diff -Nru gdb-9.1/bfd/acinclude.m4 gdb-10.2/bfd/acinclude.m4 --- gdb-9.1/bfd/acinclude.m4 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/acinclude.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ dnl -dnl Copyright (C) 2012-2019 Free Software Foundation, Inc. +dnl Copyright (C) 2012-2020 Free Software Foundation, Inc. dnl dnl This file is free software; you can redistribute it and/or modify dnl it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/bfd/aix386-core.c gdb-10.2/bfd/aix386-core.c --- gdb-9.1/bfd/aix386-core.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/aix386-core.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,7 +1,7 @@ /* BFD back-end for AIX on PS/2 core files. This was based on trad-core.c, which was written by John Gilmore of Cygnus Support. - Copyright (C) 1988-2019 Free Software Foundation, Inc. + Copyright (C) 1988-2020 Free Software Foundation, Inc. Written by Minh Tran-Le . Converted to back end form by Ian Lance Taylor . @@ -65,13 +65,13 @@ asection *sections[MAX_CORE_SEGS]; }; -static const bfd_target * +static bfd_cleanup aix386_core_file_p (bfd *abfd) { int i, n; unsigned char longbuf[4]; /* Raw bytes of various header fields */ bfd_size_type core_size = sizeof (struct corehdr); - bfd_size_type amt; + size_t amt; struct corehdr *core; struct mergem { @@ -189,7 +189,7 @@ n++; } - return abfd->xvec; + return _bfd_no_cleanup; } static char * diff -Nru gdb-9.1/bfd/aix5ppc-core.c gdb-10.2/bfd/aix5ppc-core.c --- gdb-9.1/bfd/aix5ppc-core.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/aix5ppc-core.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* IBM RS/6000 "XCOFF" back-end for BFD. - Copyright (C) 2001-2019 Free Software Foundation, Inc. + Copyright (C) 2001-2020 Free Software Foundation, Inc. Written by Tom Rix Contributed by Red Hat Inc. @@ -23,7 +23,7 @@ #include "sysdep.h" #include "bfd.h" -const bfd_target *xcoff64_core_p (bfd *); +bfd_cleanup xcoff64_core_p (bfd *); bfd_boolean xcoff64_core_file_matches_executable_p (bfd *, bfd *); char *xcoff64_core_file_failing_command (bfd *); int xcoff64_core_file_failing_signal (bfd *); @@ -48,7 +48,7 @@ #define CHECK_FILE_OFFSET(s, v) \ ((bfd_signed_vma)(v) < 0 || (bfd_signed_vma)(v) > (bfd_signed_vma)(s).st_size) -const bfd_target * +bfd_cleanup xcoff64_core_p (bfd *abfd) { enum bfd_architecture arch; @@ -60,7 +60,6 @@ bfd_vma ld_offset; bfd_size_type i; struct vm_infox vminfo; - const bfd_target *return_value = NULL; flagword flags; /* Get the header. */ @@ -109,12 +108,12 @@ { bfd_set_error (bfd_error_file_truncated); - return return_value; + return NULL; } new_core_hdr = bfd_zalloc (abfd, sizeof (struct core_dumpxx)); if (NULL == new_core_hdr) - return return_value; + return NULL; memcpy (new_core_hdr, &core, sizeof (struct core_dumpxx)); /* The core_hdr() macro is no longer used here because it would @@ -126,7 +125,7 @@ flags = SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS; sec = bfd_make_section_anyway_with_flags (abfd, ".stack", flags); if (NULL == sec) - return return_value; + return NULL; sec->size = core.c_size; sec->vma = core.c_stackorg; @@ -136,7 +135,7 @@ flags = SEC_HAS_CONTENTS | SEC_IN_MEMORY; sec = bfd_make_section_anyway_with_flags (abfd, ".reg", flags); if (NULL == sec) - return return_value; + return NULL; sec->size = sizeof (struct __context64); sec->vma = 0; @@ -150,7 +149,7 @@ flags = SEC_HAS_CONTENTS; sec = bfd_make_section_anyway_with_flags (abfd, ".ldinfo", flags); if (NULL == sec) - return return_value; + return NULL; sec->size = core.c_lsize; sec->vma = 0; @@ -164,7 +163,7 @@ flags = SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS; sec = bfd_make_section_anyway_with_flags (abfd, ".data", flags); if (NULL == sec) - return return_value; + return NULL; sec->size = core.c_datasize; sec->vma = core.c_dataorg; @@ -176,18 +175,18 @@ while (1) { if (bfd_seek (abfd, ld_offset, SEEK_SET) != 0) - return return_value; + return NULL; if (sizeof (struct __ld_info64) != bfd_bread (&ldinfo, sizeof (struct __ld_info64), abfd)) - return return_value; + return NULL; if (ldinfo.ldinfo_core) { flags = SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS; sec = bfd_make_section_anyway_with_flags (abfd, ".data", flags); if (NULL == sec) - return return_value; + return NULL; sec->size = ldinfo.ldinfo_datasize; sec->vma = ldinfo.ldinfo_dataorg; @@ -203,19 +202,19 @@ if (core.c_vmregions) { if (bfd_seek (abfd, core.c_vmm, SEEK_SET) != 0) - return return_value; + return NULL; for (i = 0; i < core.c_vmregions; i++) if (sizeof (struct vm_infox) != bfd_bread (&vminfo, sizeof (struct vm_infox), abfd)) - return return_value; + return NULL; if (vminfo.vminfo_offset) { flags = SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS; sec = bfd_make_section_anyway_with_flags (abfd, ".vmdata", flags); if (NULL == sec) - return return_value; + return NULL; sec->size = vminfo.vminfo_size; sec->vma = vminfo.vminfo_addr; @@ -228,13 +227,13 @@ mach = DEFAULT_MACHINE; bfd_default_set_arch_mach (abfd, arch, mach); - return_value = (bfd_target *) abfd->xvec; /* This is garbage for now. */ + return _bfd_no_cleanup; xcoff64_core_p_error: if (bfd_get_error () != bfd_error_system_call) bfd_set_error (bfd_error_wrong_format); - return return_value; + return NULL; } /* Return `TRUE' if given core is from the given executable. */ @@ -289,11 +288,11 @@ } str1 = strrchr (path, '/'); - str2 = strrchr (exec_bfd->filename, '/'); + str2 = strrchr (bfd_get_filename (exec_bfd), '/'); /* Step over character '/'. */ str1 = str1 != NULL ? str1 + 1 : path; - str2 = str2 != NULL ? str2 + 1 : exec_bfd->filename; + str2 = str2 != NULL ? str2 + 1 : bfd_get_filename (exec_bfd); if (strcmp (str1, str2) == 0) return_value = TRUE; @@ -329,7 +328,7 @@ #else /* AIX_5_CORE */ -const bfd_target * +bfd_cleanup xcoff64_core_p (bfd *abfd ATTRIBUTE_UNUSED) { bfd_set_error (bfd_error_wrong_format); diff -Nru gdb-9.1/bfd/aout32.c gdb-10.2/bfd/aout32.c --- gdb-9.1/bfd/aout32.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/aout32.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD back-end for 32-bit a.out files. - Copyright (C) 1990-2019 Free Software Foundation, Inc. + Copyright (C) 1990-2020 Free Software Foundation, Inc. Written by Cygnus Support. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/aout64.c gdb-10.2/bfd/aout64.c --- gdb-9.1/bfd/aout64.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/aout64.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD back-end for 64-bit a.out files. - Copyright (C) 1990-2019 Free Software Foundation, Inc. + Copyright (C) 1990-2020 Free Software Foundation, Inc. Written by Cygnus Support. This file is part of BFD, the Binary File Descriptor library. @@ -21,12 +21,4 @@ #define ARCH_SIZE 64 -/* aoutx.h requires definitions for BMAGIC and QMAGIC. */ -#ifndef BMAGIC -#define BMAGIC 0 -#endif -#ifndef QMAGIC -#define QMAGIC 0 -#endif - #include "aoutx.h" diff -Nru gdb-9.1/bfd/aout-cris.c gdb-10.2/bfd/aout-cris.c --- gdb-9.1/bfd/aout-cris.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/aout-cris.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD backend for CRIS a.out binaries. - Copyright (C) 2000-2019 Free Software Foundation, Inc. + Copyright (C) 2000-2020 Free Software Foundation, Inc. Contributed by Axis Communications AB. Written by Hans-Peter Nilsson. @@ -56,9 +56,6 @@ #define TARGET_PAGE_SIZE SEGMENT_SIZE #define TARGETNAME "a.out-cris" -/* The definition here seems not used; just provided as a convention. */ -#define DEFAULT_ARCH bfd_arch_cris - /* Do not "beautify" the CONCAT* macro args. Traditional C will not remove whitespace added here, and thus will fail to concatenate the tokens. */ @@ -92,9 +89,8 @@ through SET_ARCH_MACH. The default bfd_default_set_arch_mach will not call set_sizes. */ -#define MY_set_arch_mach NAME (aout, set_arch_mach) #define SET_ARCH_MACH(BFD, EXECP) \ - MY_set_arch_mach (BFD, DEFAULT_ARCH, N_MACHTYPE (EXECP)) + bfd_set_arch_mach (BFD, bfd_arch_cris, N_MACHTYPE (EXECP)) /* These macros describe the binary layout of the reloc information we use in a file. */ @@ -231,12 +227,14 @@ cache_ptr->address = (GET_SWORD (abfd, bytes->r_address)); /* Now the fun stuff. */ - r_index = (bytes->r_index[2] << 16) - | (bytes->r_index[1] << 8) - | bytes->r_index[0]; + r_index = (((unsigned int) bytes->r_index[2] << 16) + | ((unsigned int) bytes->r_index[1] << 8) + | bytes->r_index[0]); + r_extern = (0 != (bytes->r_type[0] & RELOC_EXT_BITS_EXTERN_LITTLE)); - r_type = ((bytes->r_type[0]) >> RELOC_EXT_BITS_TYPE_SH_LITTLE) - & RELOC_EXT_BITS_TYPE_LITTLE; + + r_type = ((bytes->r_type[0] & RELOC_EXT_BITS_TYPE_LITTLE) + >> RELOC_EXT_BITS_TYPE_SH_LITTLE); if (r_type > 2) { diff -Nru gdb-9.1/bfd/aout-ns32k.c gdb-10.2/bfd/aout-ns32k.c --- gdb-9.1/bfd/aout-ns32k.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/aout-ns32k.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD back-end for ns32k a.out-ish binaries. - Copyright (C) 1990-2019 Free Software Foundation, Inc. + Copyright (C) 1990-2020 Free Software Foundation, Inc. Contributed by Ian Dall (idall@eleceng.adelaide.edu.au). This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/aout-target.h gdb-10.2/bfd/aout-target.h --- gdb-9.1/bfd/aout-target.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/aout-target.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Define a target vector and some small routines for a variant of a.out. - Copyright (C) 1990-2019 Free Software Foundation, Inc. + Copyright (C) 1990-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -34,7 +34,7 @@ This routine is called from some_aout_object_p just before it returns. */ #ifndef MY_callback -static const bfd_target * +static bfd_cleanup MY (callback) (bfd *abfd) { struct internal_exec *execp = exec_hdr (abfd); @@ -121,20 +121,20 @@ /* Don't set sizes now -- can't be sure until we know arch & mach. Sizes get set in set_sizes callback, later. */ - return abfd->xvec; + return _bfd_no_cleanup; } #endif #ifndef MY_object_p /* Finish up the reading of an a.out file header. */ -static const bfd_target * +static bfd_cleanup MY (object_p) (bfd *abfd) { struct external_exec exec_bytes; /* Raw exec header from file. */ struct internal_exec exec; /* Cleaned-up exec header. */ - const bfd_target *target; - bfd_size_type amt = EXEC_BYTES_SIZE; + bfd_cleanup cleanup; + size_t amt = EXEC_BYTES_SIZE; if (bfd_bread ((void *) &exec_bytes, amt, abfd) != amt) { @@ -164,7 +164,7 @@ exec.a_info = SWAP_MAGIC (exec_bytes.e_info); #endif - target = NAME (aout, some_aout_object_p) (abfd, &exec, MY (callback)); + cleanup = NAME (aout, some_aout_object_p) (abfd, &exec, MY (callback)); #ifdef ENTRY_CAN_BE_ZERO /* The NEWSOS3 entry-point is/was 0, which (amongst other lossage) @@ -180,12 +180,13 @@ #ifndef S_IXUSR #define S_IXUSR 0100 /* Execute by owner. */ #endif - if (stat (abfd->filename, &buf) == 0 && (buf.st_mode & S_IXUSR)) + if (stat (bfd_get_filename (abfd), &buf) == 0 + && (buf.st_mode & S_IXUSR) != 0) abfd->flags |= EXEC_P; } #endif /* ENTRY_CAN_BE_ZERO */ - return target; + return cleanup; } #define MY_object_p MY (object_p) #endif diff -Nru gdb-9.1/bfd/aout-tic30.c gdb-10.2/bfd/aout-tic30.c --- gdb-9.1/bfd/aout-tic30.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/aout-tic30.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,1173 +0,0 @@ -/* BFD back-end for TMS320C30 a.out binaries. - Copyright (C) 1998-2019 Free Software Foundation, Inc. - Contributed by Steven Haworth (steve@pm.cse.rmit.edu.au) - - This file is part of BFD, the Binary File Descriptor library. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA - 02110-1301, USA. */ - -#define TARGET_IS_BIG_ENDIAN_P -#define N_HEADER_IN_TEXT(x) 1 -#define TEXT_START_ADDR 1024 -#define TARGET_PAGE_SIZE 128 -#define SEGMENT_SIZE TARGET_PAGE_SIZE -#define DEFAULT_ARCH bfd_arch_tic30 -#define ARCH_SIZE 32 - -/* Do not "beautify" the CONCAT* macro args. Traditional C will not - remove whitespace added here, and thus will fail to concatenate - the tokens. */ -#define MY(OP) CONCAT2 (tic30_aout_,OP) -#define TARGETNAME "a.out-tic30" -#define NAME(x,y) CONCAT3 (tic30_aout,_32_,y) - -#include "sysdep.h" -#include "bfd.h" -#include "libaout.h" -#include "aout/aout64.h" -#include "aout/stab_gnu.h" -#include "aout/ar.h" - -#define MY_reloc_howto(BFD, REL, IN, EX, PC) tic30_aout_reloc_howto (BFD, REL, & IN, & EX, & PC) - -#define MY_final_link_relocate tic30_aout_final_link_relocate -#define MY_object_p tic30_aout_object_p -#define MY_mkobject NAME (aout,mkobject) -#define MY_write_object_contents tic30_aout_write_object_contents -#define MY_set_sizes tic30_aout_set_sizes - -#ifndef MY_exec_hdr_flags -#define MY_exec_hdr_flags 1 -#endif - -#ifndef MY_backend_data - -#ifndef MY_zmagic_contiguous -#define MY_zmagic_contiguous 0 -#endif -#ifndef MY_text_includes_header -#define MY_text_includes_header 0 -#endif -#ifndef MY_entry_is_text_address -#define MY_entry_is_text_address 0 -#endif -#ifndef MY_exec_header_not_counted -#define MY_exec_header_not_counted 1 -#endif -#ifndef MY_add_dynamic_symbols -#define MY_add_dynamic_symbols 0 -#endif -#ifndef MY_add_one_symbol -#define MY_add_one_symbol 0 -#endif -#ifndef MY_link_dynamic_object -#define MY_link_dynamic_object 0 -#endif -#ifndef MY_write_dynamic_symbol -#define MY_write_dynamic_symbol 0 -#endif -#ifndef MY_check_dynamic_reloc -#define MY_check_dynamic_reloc 0 -#endif -#ifndef MY_finish_dynamic_link -#define MY_finish_dynamic_link 0 -#endif - -static bfd_boolean -tic30_aout_set_sizes (bfd *abfd) -{ - adata (abfd).page_size = TARGET_PAGE_SIZE; - -#ifdef SEGMENT_SIZE - adata (abfd).segment_size = SEGMENT_SIZE; -#else - adata (abfd).segment_size = TARGET_PAGE_SIZE; -#endif - -#ifdef ZMAGIC_DISK_BLOCK_SIZE - adata (abfd).zmagic_disk_block_size = ZMAGIC_DISK_BLOCK_SIZE; -#else - adata (abfd).zmagic_disk_block_size = TARGET_PAGE_SIZE; -#endif - - adata (abfd).exec_bytes_size = EXEC_BYTES_SIZE; - - return TRUE; -} - -static const struct aout_backend_data tic30_aout_backend_data = -{ - MY_zmagic_contiguous, - MY_text_includes_header, - MY_entry_is_text_address, - MY_exec_hdr_flags, - 0, /* Text vma? */ - MY_set_sizes, - MY_exec_header_not_counted, - MY_add_dynamic_symbols, - MY_add_one_symbol, - MY_link_dynamic_object, - MY_write_dynamic_symbol, - MY_check_dynamic_reloc, - MY_finish_dynamic_link -}; -#define MY_backend_data &tic30_aout_backend_data -#endif - -static reloc_howto_type * - tic30_aout_reloc_howto (bfd *, struct reloc_std_external *, int *, int *, int *); -static bfd_reloc_status_type - tic30_aout_final_link_relocate - (reloc_howto_type *, bfd *, asection *, bfd_byte *, bfd_vma, bfd_vma, bfd_vma); - -/* FIXME: This is wrong. aoutx.h should really only be included by - aout32.c. */ - -#include "aoutx.h" - -/* This function is used to work out pc-relative offsets for the - TMS320C30. The data already placed by md_pcrel_from within gas is - useless for a relocation, so we just get the offset value and place - a version of this within the object code. - tic30_aout_final_link_relocate will then calculate the required - relocation to add on to the value in the object code. */ - -static bfd_reloc_status_type -tic30_aout_fix_pcrel_16 (bfd *abfd, - arelent *reloc_entry, - asymbol *symbol ATTRIBUTE_UNUSED, - void * data, - asection *input_section ATTRIBUTE_UNUSED, - bfd *output_bfd ATTRIBUTE_UNUSED, - char **error_message ATTRIBUTE_UNUSED) -{ - bfd_vma relocation = 1; - bfd_byte offset_data = bfd_get_8 (abfd, (bfd_byte *) data + reloc_entry->address - 1); - - /* The byte before the location of the fix contains bits 23-16 of - the pcrel instruction. Bit 21 is set for a delayed instruction - which requires on offset of 3 instead of 1. */ - if (offset_data & 0x20) - relocation -= 3; - else - relocation -= 1; - bfd_put_16 (abfd, relocation, (bfd_byte *) data + reloc_entry->address); - return bfd_reloc_ok; -} - -/* This function is used as a callback for 16-bit relocs. This is - required for relocations between segments. A line in aoutx.h - requires that any relocations for the data section should point to - the end of the aligned text section, plus an offset. By default, - this does not happen, therefore this function takes care of - that. */ - -static bfd_reloc_status_type -tic30_aout_fix_16 (bfd *abfd, - arelent *reloc_entry, - asymbol *symbol, - void * data, - asection *input_section ATTRIBUTE_UNUSED, - bfd *output_bfd, - char **error_message ATTRIBUTE_UNUSED) -{ - bfd_vma relocation; - - /* Make sure that the symbol's section is defined. */ - if (bfd_is_und_section (symbol->section) && (symbol->flags & BSF_WEAK) == 0) - return output_bfd ? bfd_reloc_ok : bfd_reloc_undefined; - /* Get the size of the input section and turn it into the TMS320C30 - 32-bit address format. */ - relocation = (symbol->section->vma >> 2); - relocation += bfd_get_16 (abfd, (bfd_byte *) data + reloc_entry->address); - bfd_put_16 (abfd, relocation, (bfd_byte *) data + reloc_entry->address); - return bfd_reloc_ok; -} - -/* This function does the same thing as tic30_aout_fix_16 except for 32 - bit relocations. */ - -static bfd_reloc_status_type -tic30_aout_fix_32 (bfd *abfd, - arelent *reloc_entry, - asymbol *symbol, - void * data, - asection *input_section ATTRIBUTE_UNUSED, - bfd *output_bfd, - char **error_message ATTRIBUTE_UNUSED) -{ - bfd_vma relocation; - - /* Make sure that the symbol's section is defined. */ - if (bfd_is_und_section (symbol->section) && (symbol->flags & BSF_WEAK) == 0) - return output_bfd ? bfd_reloc_ok : bfd_reloc_undefined; - /* Get the size of the input section and turn it into the TMS320C30 - 32-bit address format. */ - relocation = (symbol->section->vma >> 2); - relocation += bfd_get_32 (abfd, (bfd_byte *) data + reloc_entry->address); - bfd_put_32 (abfd, relocation, (bfd_byte *) data + reloc_entry->address); - return bfd_reloc_ok; -} - -/* This table lists the relocation types for the TMS320C30. There are - only a few relocations required, and all must be divided by 4 (>> - 2) to get the 32-bit addresses in the format the TMS320C30 likes - it. */ -reloc_howto_type tic30_aout_howto_table[] = -{ - EMPTY_HOWTO (-1), - HOWTO (1, 2, 1, 16, FALSE, 0, 0, tic30_aout_fix_16, - "16", FALSE, 0x0000FFFF, 0x0000FFFF, FALSE), - HOWTO (2, 2, 2, 24, FALSE, 0, complain_overflow_bitfield, NULL, - "24", FALSE, 0x00FFFFFF, 0x00FFFFFF, FALSE), - HOWTO (3, 18, 3, 24, FALSE, 0, complain_overflow_bitfield, NULL, - "LDP", FALSE, 0x00FF0000, 0x000000FF, FALSE), - HOWTO (4, 2, 4, 32, FALSE, 0, complain_overflow_bitfield, tic30_aout_fix_32, - "32", FALSE, 0xFFFFFFFF, 0xFFFFFFFF, FALSE), - HOWTO (5, 2, 1, 16, TRUE, 0, complain_overflow_signed, - tic30_aout_fix_pcrel_16, "PCREL", TRUE, 0x0000FFFF, 0x0000FFFF, TRUE), - EMPTY_HOWTO (-1), - EMPTY_HOWTO (-1), - EMPTY_HOWTO (-1), - EMPTY_HOWTO (-1), - EMPTY_HOWTO (-1) -}; - - -static reloc_howto_type * -tic30_aout_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED, - bfd_reloc_code_real_type code) -{ - switch (code) - { - case BFD_RELOC_8: - case BFD_RELOC_TIC30_LDP: - return &tic30_aout_howto_table[3]; - case BFD_RELOC_16: - return &tic30_aout_howto_table[1]; - case BFD_RELOC_24: - return &tic30_aout_howto_table[2]; - case BFD_RELOC_16_PCREL: - return &tic30_aout_howto_table[5]; - case BFD_RELOC_32: - return &tic30_aout_howto_table[4]; - default: - return NULL; - } -} - -static reloc_howto_type * -tic30_aout_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED, - const char *r_name) -{ - unsigned int i; - - for (i = 0; - i < (sizeof (tic30_aout_howto_table) - / sizeof (tic30_aout_howto_table[0])); - i++) - if (tic30_aout_howto_table[i].name != NULL - && strcasecmp (tic30_aout_howto_table[i].name, r_name) == 0) - return &tic30_aout_howto_table[i]; - - return NULL; -} - -static reloc_howto_type * -tic30_aout_reloc_howto (bfd *abfd, - struct reloc_std_external *relocs, - int *r_index, - int *r_extern, - int *r_pcrel) -{ - unsigned int r_length; - unsigned int r_pcrel_done; - int howto_index; - - *r_pcrel = 0; - if (bfd_header_big_endian (abfd)) - { - *r_index = ((relocs->r_index[0] << 16) | (relocs->r_index[1] << 8) | relocs->r_index[2]); - *r_extern = (0 != (relocs->r_type[0] & RELOC_STD_BITS_EXTERN_BIG)); - r_pcrel_done = (0 != (relocs->r_type[0] & RELOC_STD_BITS_PCREL_BIG)); - r_length = ((relocs->r_type[0] & RELOC_STD_BITS_LENGTH_BIG) >> RELOC_STD_BITS_LENGTH_SH_BIG); - } - else - { - *r_index = ((relocs->r_index[2] << 16) | (relocs->r_index[1] << 8) | relocs->r_index[0]); - *r_extern = (0 != (relocs->r_type[0] & RELOC_STD_BITS_EXTERN_LITTLE)); - r_pcrel_done = (0 != (relocs->r_type[0] & RELOC_STD_BITS_PCREL_LITTLE)); - r_length = ((relocs->r_type[0] & RELOC_STD_BITS_LENGTH_LITTLE) >> RELOC_STD_BITS_LENGTH_SH_LITTLE); - } - howto_index = r_length + 4 * r_pcrel_done; - return tic30_aout_howto_table + howto_index; -} - -/* These macros will get 24-bit values from the bfd definition. - Big-endian only. */ -#define bfd_getb_24(BFD,ADDR) \ - (bfd_get_8 (BFD, ADDR ) << 16) | \ - (bfd_get_8 (BFD, ADDR + 1) << 8) | \ - (bfd_get_8 (BFD, ADDR + 2) ) - -#define bfd_putb_24(BFD,DATA,ADDR) \ - bfd_put_8 (BFD, (bfd_byte) ((DATA >> 16) & 0xFF), ADDR ); \ - bfd_put_8 (BFD, (bfd_byte) ((DATA >> 8) & 0xFF), ADDR + 1); \ - bfd_put_8 (BFD, (bfd_byte) ( DATA & 0xFF), ADDR + 2) - -/* Set parameters about this a.out file that are machine-dependent. - This routine is called from some_aout_object_p just before it returns. */ - -static const bfd_target * -tic30_aout_callback (bfd *abfd) -{ - struct internal_exec *execp = exec_hdr (abfd); - unsigned int arch_align_power; - unsigned long arch_align; - - /* Calculate the file positions of the parts of a newly read aout header. */ - obj_textsec (abfd)->size = N_TXTSIZE (execp); - - /* The virtual memory addresses of the sections. */ - obj_textsec (abfd)->vma = N_TXTADDR (execp); - obj_datasec (abfd)->vma = N_DATADDR (execp); - obj_bsssec (abfd)->vma = N_BSSADDR (execp); - - obj_textsec (abfd)->lma = obj_textsec (abfd)->vma; - obj_datasec (abfd)->lma = obj_datasec (abfd)->vma; - obj_bsssec (abfd)->lma = obj_bsssec (abfd)->vma; - - /* The file offsets of the sections. */ - obj_textsec (abfd)->filepos = N_TXTOFF (execp); - obj_datasec (abfd)->filepos = N_DATOFF (execp); - - /* The file offsets of the relocation info. */ - obj_textsec (abfd)->rel_filepos = N_TRELOFF (execp); - obj_datasec (abfd)->rel_filepos = N_DRELOFF (execp); - - /* The file offsets of the string table and symbol table. */ - obj_sym_filepos (abfd) = N_SYMOFF (execp); - obj_str_filepos (abfd) = N_STROFF (execp); - - /* Determine the architecture and machine type of the object file. */ -#ifdef SET_ARCH_MACH - SET_ARCH_MACH (abfd, execp); -#else - bfd_default_set_arch_mach (abfd, DEFAULT_ARCH, 0L); -#endif - - /* Now that we know the architecture, set the alignments of the - sections. This is normally done by NAME (aout,new_section_hook), - but when the initial sections were created the architecture had - not yet been set. However, for backward compatibility, we don't - set the alignment power any higher than as required by the size - of the section. */ - arch_align_power = bfd_get_arch_info (abfd)->section_align_power; - arch_align = 1 << arch_align_power; - if ((BFD_ALIGN (obj_textsec (abfd)->size, arch_align) - == obj_textsec (abfd)->size) - && (BFD_ALIGN (obj_datasec (abfd)->size, arch_align) - == obj_datasec (abfd)->size) - && (BFD_ALIGN (obj_bsssec (abfd)->size, arch_align) - == obj_bsssec (abfd)->size)) - { - obj_textsec (abfd)->alignment_power = arch_align_power; - obj_datasec (abfd)->alignment_power = arch_align_power; - obj_bsssec (abfd)->alignment_power = arch_align_power; - } - return abfd->xvec; -} - -static bfd_reloc_status_type -tic30_aout_relocate_contents (reloc_howto_type *howto, - bfd *input_bfd, - bfd_vma relocation, - bfd_byte *location) -{ - bfd_vma x; - bfd_boolean overflow; - - if (howto->size < 0) - relocation = -relocation; - - switch (howto->size) - { - default: - case 0: - abort (); - break; - case 1: - x = bfd_get_16 (input_bfd, location); - break; - case 2: - x = bfd_getb_24 (input_bfd, location); - break; - case 3: - x = bfd_get_8 (input_bfd, location); - break; - case 4: - x = bfd_get_32 (input_bfd, location); - break; - } - - overflow = FALSE; - - if (howto->complain_on_overflow != complain_overflow_dont) - { - bfd_vma check; - bfd_signed_vma signed_check; - bfd_vma add; - bfd_signed_vma signed_add; - - if (howto->rightshift == 0) - { - check = relocation; - signed_check = (bfd_signed_vma) relocation; - } - else - { - check = relocation >> howto->rightshift; - if ((bfd_signed_vma) relocation >= 0) - signed_check = check; - else - signed_check = (check | ((bfd_vma) - 1 & ~((bfd_vma) - 1 >> howto->rightshift))); - } - add = x & howto->src_mask; - signed_add = add; - if ((add & (((~howto->src_mask) >> 1) & howto->src_mask)) != 0) - signed_add -= (((~howto->src_mask) >> 1) & howto->src_mask) << 1; - if (howto->bitpos == 0) - { - check += add; - signed_check += signed_add; - } - else - { - check += add >> howto->bitpos; - if (signed_add >= 0) - signed_check += add >> howto->bitpos; - else - signed_check += ((add >> howto->bitpos) | ((bfd_vma) - 1 & ~((bfd_vma) - 1 >> howto->bitpos))); - } - switch (howto->complain_on_overflow) - { - case complain_overflow_signed: - { - bfd_signed_vma reloc_signed_max = (1 << (howto->bitsize - 1)) - 1; - bfd_signed_vma reloc_signed_min = ~reloc_signed_max; - - if (signed_check > reloc_signed_max || signed_check < reloc_signed_min) - overflow = TRUE; - } - break; - case complain_overflow_unsigned: - { - bfd_vma reloc_unsigned_max = (((1 << (howto->bitsize - 1)) - 1) << 1) | 1; - - if (check > reloc_unsigned_max) - overflow = TRUE; - } - break; - case complain_overflow_bitfield: - { - bfd_vma reloc_bits = (((1 << (howto->bitsize - 1)) - 1) << 1) | 1; - - if ((check & ~reloc_bits) != 0 - && (((bfd_vma) signed_check & ~reloc_bits) - != ((bfd_vma) -1 & ~reloc_bits))) - overflow = TRUE; - } - break; - default: - abort (); - } - } - relocation >>= (bfd_vma) howto->rightshift; - relocation <<= (bfd_vma) howto->bitpos; - x = ((x & ~howto->dst_mask) | (((x & howto->src_mask) + relocation) & howto->dst_mask)); - switch (howto->size) - { - default: - case 0: - abort (); - break; - case 1: - bfd_put_16 (input_bfd, x, location); - break; - case 2: - bfd_putb_24 (input_bfd, x, location); - break; - case 3: - bfd_put_8 (input_bfd, x, location); - break; - case 4: - bfd_put_32 (input_bfd, x, location); - break; - } - return overflow ? bfd_reloc_overflow : bfd_reloc_ok; -} - -static bfd_reloc_status_type -tic30_aout_final_link_relocate (reloc_howto_type *howto, - bfd *input_bfd, - asection *input_section, - bfd_byte *contents, - bfd_vma address, - bfd_vma value, - bfd_vma addend) -{ - bfd_vma relocation; - - if (address > bfd_get_section_limit (input_bfd, input_section)) - return bfd_reloc_outofrange; - - relocation = value + addend; - if (howto->pc_relative) - { - relocation -= (input_section->output_section->vma + input_section->output_offset); - if (howto->pcrel_offset) - relocation -= address; - } - return tic30_aout_relocate_contents (howto, input_bfd, relocation, - contents + address); -} - -/* Finish up the reading of an a.out file header. */ - -static const bfd_target * -tic30_aout_object_p (bfd *abfd) -{ - struct external_exec exec_bytes; /* Raw exec header from file. */ - struct internal_exec exec; /* Cleaned-up exec header. */ - const bfd_target *target; - bfd_size_type amt = EXEC_BYTES_SIZE; - - if (bfd_bread (& exec_bytes, amt, abfd) != amt) - { - if (bfd_get_error () != bfd_error_system_call) - bfd_set_error (bfd_error_wrong_format); - return 0; - } - -#ifdef SWAP_MAGIC - exec.a_info = SWAP_MAGIC (exec_bytes.e_info); -#else - exec.a_info = H_GET_32 (abfd, exec_bytes.e_info); -#endif /* SWAP_MAGIC */ - - if (N_BADMAG (&exec)) - return 0; -#ifdef MACHTYPE_OK - if (!(MACHTYPE_OK (N_MACHTYPE (&exec)))) - return 0; -#endif - - NAME (aout, swap_exec_header_in) (abfd, &exec_bytes, &exec); - -#ifdef SWAP_MAGIC - /* Swap_exec_header_in read in a_info with the wrong byte order. */ - exec.a_info = SWAP_MAGIC (exec_bytes.e_info); -#endif - - target = NAME (aout, some_aout_object_p) (abfd, &exec, tic30_aout_callback); - -#ifdef ENTRY_CAN_BE_ZERO - /* The NEWSOS3 entry-point is/was 0, which (amongst other lossage) - means that it isn't obvious if EXEC_P should be set. - All of the following must be true for an executable: - There must be no relocations, the bfd can be neither an - archive nor an archive element, and the file must be executable. */ - - if (exec.a_trsize + exec.a_drsize == 0 - && bfd_get_format (abfd) == bfd_object && abfd->my_archive == NULL) - { - struct stat buf; -#ifndef S_IXUSR -#define S_IXUSR 0100 /* Execute by owner. */ -#endif - if (stat (abfd->filename, &buf) == 0 && (buf.st_mode & S_IXUSR)) - abfd->flags |= EXEC_P; - } -#endif - - return target; -} - -/* Copy private section data. This actually does nothing with the - sections. It copies the subformat field. We copy it here, because - we need to know whether this is a QMAGIC file before we set the - section contents, and copy_private_bfd_data is not called until - after the section contents have been set. */ - -static bfd_boolean -MY_bfd_copy_private_section_data (bfd *ibfd, - asection *isec ATTRIBUTE_UNUSED, - bfd *obfd, - asection *osec ATTRIBUTE_UNUSED) -{ - if (bfd_get_flavour (obfd) == bfd_target_aout_flavour) - obj_aout_subformat (obfd) = obj_aout_subformat (ibfd); - return TRUE; -} - -/* Write an object file. - Section contents have already been written. We write the - file header, symbols, and relocation. */ - -static bfd_boolean -tic30_aout_write_object_contents (bfd *abfd) -{ - struct external_exec exec_bytes; - struct internal_exec *execp = exec_hdr (abfd); - - obj_reloc_entry_size (abfd) = RELOC_STD_SIZE; - - { - if (adata (abfd).magic == undecided_magic) - NAME (aout, adjust_sizes_and_vmas) (abfd); - - execp->a_syms = bfd_get_symcount (abfd) * EXTERNAL_NLIST_SIZE; - execp->a_entry = bfd_get_start_address (abfd); - - execp->a_trsize = ((obj_textsec (abfd)->reloc_count) * obj_reloc_entry_size (abfd)); - execp->a_drsize = ((obj_datasec (abfd)->reloc_count) * obj_reloc_entry_size (abfd)); - NAME (aout, swap_exec_header_out) (abfd, execp, &exec_bytes); - - if (adata (abfd).exec_bytes_size > 0) - { - bfd_size_type amt; - - if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0) - return FALSE; - amt = adata (abfd).exec_bytes_size; - if (bfd_bwrite (& exec_bytes, amt, abfd) != amt) - return FALSE; - } - - /* Now write out reloc info, followed by syms and strings. */ - if (bfd_get_outsymbols (abfd) != (asymbol **) NULL - && bfd_get_symcount (abfd) != 0) - { - if (bfd_seek (abfd, (file_ptr) (N_SYMOFF (execp)), SEEK_SET) != 0) - return FALSE; - - if (!NAME (aout, write_syms) (abfd)) - return FALSE; - } - - if (bfd_seek (abfd, (file_ptr) (N_TRELOFF (execp)), SEEK_SET) != 0) - return FALSE; - if (!NAME (aout, squirt_out_relocs) (abfd, obj_textsec (abfd))) - return FALSE; - - if (bfd_seek (abfd, (file_ptr) (N_DRELOFF (execp)), SEEK_SET) != 0) - return FALSE; - if (!NAME (aout, squirt_out_relocs) (abfd, obj_datasec (abfd))) - return FALSE; - } - - return TRUE; -} - -#ifndef MY_final_link_callback - -/* Callback for the final_link routine to set the section offsets. */ - -static void -MY_final_link_callback (bfd *abfd, - file_ptr *ptreloff, - file_ptr *pdreloff, - file_ptr *psymoff) -{ - struct internal_exec *execp = exec_hdr (abfd); - - *ptreloff = obj_datasec (abfd)->filepos + execp->a_data; - *pdreloff = *ptreloff + execp->a_trsize; - *psymoff = *pdreloff + execp->a_drsize; -} - -#endif - -#ifndef MY_bfd_final_link - -/* Final link routine. We need to use a call back to get the correct - offsets in the output file. */ - -static bfd_boolean -MY_bfd_final_link (bfd *abfd, struct bfd_link_info *info) -{ - struct internal_exec *execp = exec_hdr (abfd); - asection *objsym_section; - file_ptr pos; - bfd_vma vma = 0; - - /* Set the executable header size to 0, as we don't want one for an - output. FIXME: Really? tic30_aout_object_p doesn't accept such - an executable! */ - adata (abfd).exec_bytes_size = 0; - - pos = adata (abfd).exec_bytes_size; - /* ??? Why are we looking at create_object_symbols_section? */ - objsym_section = info->create_object_symbols_section; - if (objsym_section != NULL) - vma = objsym_section->vma; - - /* Text. */ - if (obj_textsec (abfd) != NULL) - { - pos += vma; - obj_textsec (abfd)->filepos = pos; - obj_textsec (abfd)->vma = vma; - obj_textsec (abfd)->user_set_vma = 1; - execp->a_text = obj_textsec (abfd)->size; - pos += obj_textsec (abfd)->size; - vma += obj_textsec (abfd)->size; - } - - /* Data. */ - if (obj_datasec (abfd) != NULL) - { - if (abfd->flags & D_PAGED) - { - if (objsym_section != NULL - && objsym_section->next != NULL - && objsym_section->next->vma != 0) - obj_datasec (abfd)->vma = objsym_section->next->vma; - else - obj_datasec (abfd)->vma = BFD_ALIGN (vma, adata (abfd).segment_size); - } - else - obj_datasec (abfd)->vma = BFD_ALIGN (vma, 4); - - if (obj_datasec (abfd)->vma < vma) - obj_datasec (abfd)->vma = BFD_ALIGN (vma, 4); - - pos += obj_datasec (abfd)->vma - vma; - obj_datasec (abfd)->filepos = pos; - obj_datasec (abfd)->user_set_vma = 1; - - vma = obj_datasec (abfd)->vma; - if (obj_textsec (abfd) != NULL) - { - execp->a_text = vma - obj_textsec (abfd)->vma; - obj_textsec (abfd)->size = execp->a_text; - } - execp->a_data = obj_datasec (abfd)->size; - vma += obj_datasec (abfd)->size; - } - - /* Since BSS follows data immediately, see if it needs alignment. */ - if (obj_bsssec (abfd) != NULL) - { - int pad; - - pad = align_power (vma, obj_bsssec (abfd)->alignment_power) - vma; - if (obj_datasec (abfd) != NULL) - { - obj_datasec (abfd)->size += pad; - execp->a_data += pad; - } - else if (obj_textsec (abfd) != NULL) - { - obj_textsec (abfd)->size += pad; - execp->a_text += pad; - } - - /* BSS. */ - vma += pad; - obj_bsssec (abfd)->vma = vma; - obj_bsssec (abfd)->user_set_vma = 1; - } - - /* We are fully resized, so don't readjust in final_link. */ - adata (abfd).magic = z_magic; - - return NAME (aout, final_link) (abfd, info, MY_final_link_callback); -} - -#endif - -static enum machine_type -tic30_aout_machine_type (enum bfd_architecture arch, - unsigned long machine ATTRIBUTE_UNUSED, - bfd_boolean *unknown) -{ - enum machine_type arch_flags; - - arch_flags = M_UNKNOWN; - *unknown = TRUE; - - switch (arch) - { - case bfd_arch_tic30: - *unknown = FALSE; - break; - default: - arch_flags = M_UNKNOWN; - } - if (arch_flags != M_UNKNOWN) - *unknown = FALSE; - return arch_flags; -} - -static bfd_boolean -tic30_aout_set_arch_mach (bfd *abfd, - enum bfd_architecture arch, - unsigned long machine) -{ - if (!bfd_default_set_arch_mach (abfd, arch, machine)) - return FALSE; - if (arch != bfd_arch_unknown) - { - bfd_boolean unknown; - tic30_aout_machine_type (arch, machine, &unknown); - if (unknown) - return FALSE; - } - obj_reloc_entry_size (abfd) = RELOC_STD_SIZE; - return (*aout_backend_info (abfd)->set_sizes) (abfd); -} - -/* We assume BFD generic archive files. */ -#ifndef MY_openr_next_archived_file -#define MY_openr_next_archived_file bfd_generic_openr_next_archived_file -#endif -#ifndef MY_get_elt_at_index -#define MY_get_elt_at_index _bfd_generic_get_elt_at_index -#endif -#ifndef MY_generic_stat_arch_elt -#define MY_generic_stat_arch_elt bfd_generic_stat_arch_elt -#endif -#ifndef MY_slurp_armap -#define MY_slurp_armap bfd_slurp_bsd_armap -#endif -#ifndef MY_slurp_extended_name_table -#define MY_slurp_extended_name_table _bfd_slurp_extended_name_table -#endif -#ifndef MY_construct_extended_name_table -#define MY_construct_extended_name_table \ - _bfd_archive_bsd_construct_extended_name_table -#endif -#ifndef MY_write_armap -#define MY_write_armap _bfd_bsd_write_armap -#endif -#ifndef MY_read_ar_hdr -#define MY_read_ar_hdr _bfd_generic_read_ar_hdr -#endif -#ifndef MY_write_ar_hdr -#define MY_write_ar_hdr _bfd_generic_write_ar_hdr -#endif -#ifndef MY_truncate_arname -#define MY_truncate_arname bfd_bsd_truncate_arname -#endif -#ifndef MY_update_armap_timestamp -#define MY_update_armap_timestamp _bfd_archive_bsd_update_armap_timestamp -#endif - -/* No core file defined here -- configure in trad-core.c separately. */ -#ifndef MY_core_file_failing_command -#define MY_core_file_failing_command _bfd_nocore_core_file_failing_command -#endif -#ifndef MY_core_file_failing_signal -#define MY_core_file_failing_signal _bfd_nocore_core_file_failing_signal -#endif -#ifndef MY_core_file_matches_executable_p -#define MY_core_file_matches_executable_p \ - _bfd_nocore_core_file_matches_executable_p -#endif -#ifndef MY_core_file_pid -#define MY_core_file_pid _bfd_nocore_core_file_pid -#endif -#ifndef MY_core_file_p -#define MY_core_file_p _bfd_dummy_target -#endif - -#ifndef MY_bfd_debug_info_start -#define MY_bfd_debug_info_start _bfd_void_bfd -#endif -#ifndef MY_bfd_debug_info_end -#define MY_bfd_debug_info_end _bfd_void_bfd -#endif -#ifndef MY_bfd_debug_info_accumulate -#define MY_bfd_debug_info_accumulate _bfd_void_bfd_asection -#endif - -#ifndef MY_core_file_failing_command -#define MY_core_file_failing_command NAME (aout, core_file_failing_command) -#endif -#ifndef MY_core_file_failing_signal -#define MY_core_file_failing_signal NAME (aout, core_file_failing_signal) -#endif -#ifndef MY_core_file_matches_executable_p -#define MY_core_file_matches_executable_p NAME (aout, core_file_matches_executable_p) -#endif -#ifndef MY_set_section_contents -#define MY_set_section_contents NAME (aout, set_section_contents) -#endif -#ifndef MY_get_section_contents -#define MY_get_section_contents aout_32_get_section_contents -#endif -#ifndef MY_get_section_contents_in_window -#define MY_get_section_contents_in_window _bfd_generic_get_section_contents_in_window -#endif -#ifndef MY_new_section_hook -#define MY_new_section_hook NAME (aout, new_section_hook) -#endif -#ifndef MY_get_symtab_upper_bound -#define MY_get_symtab_upper_bound NAME (aout, get_symtab_upper_bound) -#endif -#ifndef MY_canonicalize_symtab -#define MY_canonicalize_symtab NAME (aout, canonicalize_symtab) -#endif -#ifndef MY_get_reloc_upper_bound -#define MY_get_reloc_upper_bound NAME (aout, get_reloc_upper_bound) -#endif -#ifndef MY_canonicalize_reloc -#define MY_canonicalize_reloc NAME (aout, canonicalize_reloc) -#endif -#ifndef MY_set_reloc -#define MY_set_reloc _bfd_generic_set_reloc -#endif -#ifndef MY_make_empty_symbol -#define MY_make_empty_symbol NAME (aout, make_empty_symbol) -#endif -#ifndef MY_print_symbol -#define MY_print_symbol NAME (aout, print_symbol) -#endif -#ifndef MY_get_symbol_info -#define MY_get_symbol_info NAME (aout, get_symbol_info) -#endif -#ifndef MY_get_symbol_version_string -#define MY_get_symbol_version_string \ - _bfd_nosymbols_get_symbol_version_string -#endif -#ifndef MY_get_lineno -#define MY_get_lineno NAME (aout, get_lineno) -#endif -#ifndef MY_set_arch_mach -#define MY_set_arch_mach tic30_aout_set_arch_mach -#endif -#ifndef MY_find_nearest_line -#define MY_find_nearest_line NAME (aout, find_nearest_line) -#endif -#ifndef MY_find_line -#define MY_find_line _bfd_nosymbols_find_line -#endif -#ifndef MY_find_inliner_info -#define MY_find_inliner_info _bfd_nosymbols_find_inliner_info -#endif -#ifndef MY_sizeof_headers -#define MY_sizeof_headers NAME (aout, sizeof_headers) -#endif -#ifndef MY_bfd_get_relocated_section_contents -#define MY_bfd_get_relocated_section_contents \ - bfd_generic_get_relocated_section_contents -#endif -#ifndef MY_bfd_relax_section -#define MY_bfd_relax_section bfd_generic_relax_section -#endif -#ifndef MY_bfd_gc_sections -#define MY_bfd_gc_sections bfd_generic_gc_sections -#endif -#ifndef MY_bfd_lookup_section_flags -#define MY_bfd_lookup_section_flags bfd_generic_lookup_section_flags -#endif -#ifndef MY_bfd_merge_sections -#define MY_bfd_merge_sections bfd_generic_merge_sections -#endif -#ifndef MY_bfd_is_group_section -#define MY_bfd_is_group_section bfd_generic_is_group_section -#endif -#ifndef MY_bfd_group_name -#define MY_bfd_group_name bfd_generic_group_name -#endif -#ifndef MY_bfd_discard_group -#define MY_bfd_discard_group bfd_generic_discard_group -#endif -#ifndef MY_section_already_linked -#define MY_section_already_linked \ - _bfd_generic_section_already_linked -#endif -#ifndef MY_bfd_define_common_symbol -#define MY_bfd_define_common_symbol bfd_generic_define_common_symbol -#endif -#ifndef MY_bfd_link_hide_symbol -#define MY_bfd_link_hide_symbol _bfd_generic_link_hide_symbol -#endif -#ifndef MY_bfd_define_start_stop -#define MY_bfd_define_start_stop bfd_generic_define_start_stop -#endif -#ifndef MY_bfd_reloc_type_lookup -#define MY_bfd_reloc_type_lookup tic30_aout_reloc_type_lookup -#endif -#ifndef MY_bfd_reloc_name_lookup -#define MY_bfd_reloc_name_lookup tic30_aout_reloc_name_lookup -#endif -#ifndef MY_bfd_make_debug_symbol -#define MY_bfd_make_debug_symbol 0 -#endif -#ifndef MY_read_minisymbols -#define MY_read_minisymbols NAME (aout, read_minisymbols) -#endif -#ifndef MY_minisymbol_to_symbol -#define MY_minisymbol_to_symbol NAME (aout, minisymbol_to_symbol) -#endif -#ifndef MY_bfd_link_hash_table_create -#define MY_bfd_link_hash_table_create NAME (aout, link_hash_table_create) -#endif -#ifndef MY_bfd_link_add_symbols -#define MY_bfd_link_add_symbols NAME (aout, link_add_symbols) -#endif -#ifndef MY_bfd_link_just_syms -#define MY_bfd_link_just_syms _bfd_generic_link_just_syms -#endif -#ifndef MY_bfd_copy_link_hash_symbol_type -#define MY_bfd_copy_link_hash_symbol_type \ - _bfd_generic_copy_link_hash_symbol_type -#endif -#ifndef MY_bfd_link_split_section -#define MY_bfd_link_split_section _bfd_generic_link_split_section -#endif - -#ifndef MY_bfd_link_check_relocs -#define MY_bfd_link_check_relocs _bfd_generic_link_check_relocs -#endif - -#ifndef MY_bfd_copy_private_bfd_data -#define MY_bfd_copy_private_bfd_data _bfd_generic_bfd_copy_private_bfd_data -#endif - -#ifndef MY_bfd_merge_private_bfd_data -#define MY_bfd_merge_private_bfd_data _bfd_generic_bfd_merge_private_bfd_data -#endif - -#ifndef MY_bfd_copy_private_symbol_data -#define MY_bfd_copy_private_symbol_data _bfd_generic_bfd_copy_private_symbol_data -#endif - -#ifndef MY_bfd_copy_private_header_data -#define MY_bfd_copy_private_header_data _bfd_generic_bfd_copy_private_header_data -#endif - -#ifndef MY_bfd_print_private_bfd_data -#define MY_bfd_print_private_bfd_data _bfd_generic_bfd_print_private_bfd_data -#endif - -#ifndef MY_bfd_set_private_flags -#define MY_bfd_set_private_flags _bfd_generic_bfd_set_private_flags -#endif - -#ifndef MY_bfd_is_local_label_name -#define MY_bfd_is_local_label_name bfd_generic_is_local_label_name -#endif - -#ifndef MY_bfd_is_target_special_symbol -#define MY_bfd_is_target_special_symbol _bfd_bool_bfd_asymbol_false -#endif - -#ifndef MY_bfd_free_cached_info -#define MY_bfd_free_cached_info NAME (aout, bfd_free_cached_info) -#endif - -#ifndef MY_close_and_cleanup -#define MY_close_and_cleanup MY_bfd_free_cached_info -#endif - -#ifndef MY_get_dynamic_symtab_upper_bound -#define MY_get_dynamic_symtab_upper_bound \ - _bfd_nodynamic_get_dynamic_symtab_upper_bound -#endif -#ifndef MY_canonicalize_dynamic_symtab -#define MY_canonicalize_dynamic_symtab \ - _bfd_nodynamic_canonicalize_dynamic_symtab -#endif -#ifndef MY_get_synthetic_symtab -#define MY_get_synthetic_symtab \ - _bfd_nodynamic_get_synthetic_symtab -#endif -#ifndef MY_get_dynamic_reloc_upper_bound -#define MY_get_dynamic_reloc_upper_bound \ - _bfd_nodynamic_get_dynamic_reloc_upper_bound -#endif -#ifndef MY_canonicalize_dynamic_reloc -#define MY_canonicalize_dynamic_reloc \ - _bfd_nodynamic_canonicalize_dynamic_reloc -#endif - -/* Aout symbols normally have leading underscores. */ -#ifndef MY_symbol_leading_char -#define MY_symbol_leading_char '_' -#endif - -/* Aout archives normally use spaces for padding. */ -#ifndef AR_PAD_CHAR -#define AR_PAD_CHAR ' ' -#endif - -#ifndef MY_BFD_TARGET -const bfd_target tic30_aout_vec = -{ - TARGETNAME, /* Name. */ - bfd_target_aout_flavour, - BFD_ENDIAN_BIG, /* Target byte order (big). */ - BFD_ENDIAN_BIG, /* Target headers byte order (big). */ - (HAS_RELOC | /* Object flags. */ - HAS_SYMS | HAS_LOCALS | WP_TEXT | D_PAGED), - (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC), /* Section flags. */ - MY_symbol_leading_char, - AR_PAD_CHAR, /* AR_pad_char. */ - 15, /* AR_max_namelen. */ - 0, /* match priority. */ - bfd_getb64, bfd_getb_signed_64, bfd_putb64, - bfd_getb32, bfd_getb_signed_32, bfd_putb32, - bfd_getb16, bfd_getb_signed_16, bfd_putb16, /* Data. */ - bfd_getb64, bfd_getb_signed_64, bfd_putb64, - bfd_getb32, bfd_getb_signed_32, bfd_putb32, - bfd_getb16, bfd_getb_signed_16, bfd_putb16, /* Headers. */ - { /* bfd_check_format. */ - _bfd_dummy_target, - MY_object_p, - bfd_generic_archive_p, - MY_core_file_p - }, - { /* bfd_set_format. */ - _bfd_bool_bfd_false_error, - MY_mkobject, - _bfd_generic_mkarchive, - _bfd_bool_bfd_false_error - }, - { /* bfd_write_contents. */ - _bfd_bool_bfd_false_error, - MY_write_object_contents, - _bfd_write_archive_contents, - _bfd_bool_bfd_false_error - }, - - BFD_JUMP_TABLE_GENERIC (MY), - BFD_JUMP_TABLE_COPY (MY), - BFD_JUMP_TABLE_CORE (MY), - BFD_JUMP_TABLE_ARCHIVE (MY), - BFD_JUMP_TABLE_SYMBOLS (MY), - BFD_JUMP_TABLE_RELOCS (MY), - BFD_JUMP_TABLE_WRITE (MY), - BFD_JUMP_TABLE_LINK (MY), - BFD_JUMP_TABLE_DYNAMIC (MY), - - NULL, - - MY_backend_data -}; -#endif /* MY_BFD_TARGET */ diff -Nru gdb-9.1/bfd/aoutx.h gdb-10.2/bfd/aoutx.h --- gdb-9.1/bfd/aoutx.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/aoutx.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD semi-generic back-end for a.out binaries. - Copyright (C) 1990-2019 Free Software Foundation, Inc. + Copyright (C) 1990-2020 Free Software Foundation, Inc. Written by Cygnus Support. This file is part of BFD, the Binary File Descriptor library. @@ -128,6 +128,18 @@ #include "aout/stab_gnu.h" #include "aout/ar.h" +#ifdef BMAGIC +#define N_IS_BMAGIC(x) (N_MAGIC (x) == BMAGIC) +#else +#define N_IS_BMAGIC(x) (0) +#endif + +#ifdef QMAGIC +#define N_SET_QMAGIC(x) N_SET_MAGIC (x, QMAGIC) +#else +#define N_SET_QMAGIC(x) do { /**/ } while (0) +#endif + /* SUBSECTION Relocations @@ -452,14 +464,14 @@ handle any last-minute setup. */ -const bfd_target * +bfd_cleanup NAME (aout, some_aout_object_p) (bfd *abfd, struct internal_exec *execp, - const bfd_target *(*callback_to_real_object_p) (bfd *)) + bfd_cleanup (*callback_to_real_object_p) (bfd *)) { struct aout_data_struct *rawptr, *oldrawptr; - const bfd_target *result; - bfd_size_type amt = sizeof (* rawptr); + bfd_cleanup result; + size_t amt = sizeof (* rawptr); rawptr = (struct aout_data_struct *) bfd_zalloc (abfd, amt); if (rawptr == NULL) @@ -492,7 +504,7 @@ abfd->flags |= D_PAGED | WP_TEXT; adata (abfd).magic = z_magic; } - else if (N_MAGIC (execp) == QMAGIC) + else if (N_IS_QMAGIC (execp)) { abfd->flags |= D_PAGED | WP_TEXT; adata (abfd).magic = z_magic; @@ -503,8 +515,7 @@ abfd->flags |= WP_TEXT; adata (abfd).magic = n_magic; } - else if (N_MAGIC (execp) == OMAGIC - || N_MAGIC (execp) == BMAGIC) + else if (N_MAGIC (execp) == OMAGIC || N_IS_BMAGIC (execp)) adata (abfd).magic = o_magic; else /* Should have been checked with N_BADMAG before this routine @@ -591,7 +602,7 @@ adata (abfd)->segment_size = SEGMENT_SIZE; adata (abfd)->exec_bytes_size = EXEC_BYTES_SIZE; - return abfd->xvec; + return _bfd_no_cleanup /* The architecture is encoded in various ways in various a.out variants, or is not encoded at all in some of them. The relocation size depends @@ -671,7 +682,7 @@ NAME (aout, mkobject) (bfd *abfd) { struct aout_data_struct *rawptr; - bfd_size_type amt = sizeof (* rawptr); + size_t amt = sizeof (* rawptr); bfd_set_error (bfd_error_system_call); @@ -891,57 +902,56 @@ file_ptr pos = adata (abfd).exec_bytes_size; bfd_vma vma = 0; int pad = 0; + asection *text = obj_textsec (abfd); + asection *data = obj_datasec (abfd); + asection *bss = obj_bsssec (abfd); /* Text. */ - obj_textsec (abfd)->filepos = pos; - if (!obj_textsec (abfd)->user_set_vma) - obj_textsec (abfd)->vma = vma; + text->filepos = pos; + if (!text->user_set_vma) + text->vma = vma; else - vma = obj_textsec (abfd)->vma; + vma = text->vma; - pos += obj_textsec (abfd)->size; - vma += obj_textsec (abfd)->size; + pos += execp->a_text; + vma += execp->a_text; /* Data. */ - if (!obj_datasec (abfd)->user_set_vma) + if (!data->user_set_vma) { - obj_textsec (abfd)->size += pad; pos += pad; vma += pad; - obj_datasec (abfd)->vma = vma; + data->vma = vma; } else - vma = obj_datasec (abfd)->vma; - obj_datasec (abfd)->filepos = pos; - pos += obj_datasec (abfd)->size; - vma += obj_datasec (abfd)->size; + vma = data->vma; + execp->a_text += pad; + + data->filepos = pos; + pos += data->size; + vma += data->size; /* BSS. */ - if (!obj_bsssec (abfd)->user_set_vma) + if (!bss->user_set_vma) { - obj_datasec (abfd)->size += pad; pos += pad; vma += pad; - obj_bsssec (abfd)->vma = vma; + bss->vma = vma; } else { /* The VMA of the .bss section is set by the VMA of the .data section plus the size of the .data section. We may need to add padding bytes to make this true. */ - pad = obj_bsssec (abfd)->vma - vma; - if (pad > 0) - { - obj_datasec (abfd)->size += pad; - pos += pad; - } + pad = bss->vma - vma; + if (pad < 0) + pad = 0; + pos += pad; } - obj_bsssec (abfd)->filepos = pos; + execp->a_data = data->size + pad; + bss->filepos = pos; + execp->a_bss = bss->size; - /* Fix up the exec header. */ - execp->a_text = obj_textsec (abfd)->size; - execp->a_data = obj_datasec (abfd)->size; - execp->a_bss = obj_bsssec (abfd)->size; N_SET_MAGIC (execp, OMAGIC); } @@ -953,6 +963,9 @@ const struct aout_backend_data *abdp; /* TRUE if text includes exec header. */ bfd_boolean ztih; + asection *text = obj_textsec (abfd); + asection *data = obj_datasec (abfd); + asection *bss = obj_bsssec (abfd); abdp = aout_backend_info (abfd); @@ -960,18 +973,17 @@ ztih = (abdp != NULL && (abdp->text_includes_header || obj_aout_subformat (abfd) == q_magic_format)); - obj_textsec (abfd)->filepos = (ztih - ? adata (abfd).exec_bytes_size - : adata (abfd).zmagic_disk_block_size); - if (! obj_textsec (abfd)->user_set_vma) + text->filepos = (ztih + ? adata (abfd).exec_bytes_size + : adata (abfd).zmagic_disk_block_size); + if (!text->user_set_vma) { /* ?? Do we really need to check for relocs here? */ - obj_textsec (abfd)->vma = ((abfd->flags & HAS_RELOC) - ? 0 - : (ztih - ? (abdp->default_text_vma - + adata (abfd).exec_bytes_size) - : abdp->default_text_vma)); + text->vma = ((abfd->flags & HAS_RELOC) + ? 0 + : (ztih + ? abdp->default_text_vma + adata (abfd).exec_bytes_size + : abdp->default_text_vma)); text_pad = 0; } else @@ -980,17 +992,17 @@ may need to pad it such that the .data section starts at a page boundary. */ if (ztih) - text_pad = ((obj_textsec (abfd)->filepos - obj_textsec (abfd)->vma) + text_pad = ((text->filepos - text->vma) & (adata (abfd).page_size - 1)); else - text_pad = ((- obj_textsec (abfd)->vma) + text_pad = (-text->vma & (adata (abfd).page_size - 1)); } /* Find start of data. */ if (ztih) { - text_end = obj_textsec (abfd)->filepos + obj_textsec (abfd)->size; + text_end = text->filepos + execp->a_text; text_pad += BFD_ALIGN (text_end, adata (abfd).page_size) - text_end; } else @@ -998,55 +1010,45 @@ /* Note that if page_size == zmagic_disk_block_size, then filepos == page_size, and this case is the same as the ztih case. */ - text_end = obj_textsec (abfd)->size; + text_end = execp->a_text; text_pad += BFD_ALIGN (text_end, adata (abfd).page_size) - text_end; - text_end += obj_textsec (abfd)->filepos; + text_end += text->filepos; } - obj_textsec (abfd)->size += text_pad; - text_end += text_pad; + execp->a_text += text_pad; /* Data. */ - if (!obj_datasec (abfd)->user_set_vma) + if (!data->user_set_vma) { bfd_vma vma; - vma = obj_textsec (abfd)->vma + obj_textsec (abfd)->size; - obj_datasec (abfd)->vma = BFD_ALIGN (vma, adata (abfd).segment_size); + vma = text->vma + execp->a_text; + data->vma = BFD_ALIGN (vma, adata (abfd).segment_size); } if (abdp && abdp->zmagic_mapped_contiguous) { - asection * text = obj_textsec (abfd); - asection * data = obj_datasec (abfd); - - text_pad = data->vma - (text->vma + text->size); + text_pad = data->vma - (text->vma + execp->a_text); /* Only pad the text section if the data section is going to be placed after it. */ if (text_pad > 0) - text->size += text_pad; + execp->a_text += text_pad; } - obj_datasec (abfd)->filepos = (obj_textsec (abfd)->filepos - + obj_textsec (abfd)->size); + data->filepos = text->filepos + execp->a_text; /* Fix up exec header while we're at it. */ - execp->a_text = obj_textsec (abfd)->size; if (ztih && (!abdp || (abdp && !abdp->exec_header_not_counted))) execp->a_text += adata (abfd).exec_bytes_size; if (obj_aout_subformat (abfd) == q_magic_format) - N_SET_MAGIC (execp, QMAGIC); + N_SET_QMAGIC (execp); else N_SET_MAGIC (execp, ZMAGIC); /* Spec says data section should be rounded up to page boundary. */ - obj_datasec (abfd)->size - = align_power (obj_datasec (abfd)->size, - obj_bsssec (abfd)->alignment_power); - execp->a_data = BFD_ALIGN (obj_datasec (abfd)->size, - adata (abfd).page_size); - data_pad = execp->a_data - obj_datasec (abfd)->size; + execp->a_data = align_power (data->size, bss->alignment_power); + execp->a_data = BFD_ALIGN (execp->a_data, adata (abfd).page_size); + data_pad = execp->a_data - data->size; /* BSS. */ - if (!obj_bsssec (abfd)->user_set_vma) - obj_bsssec (abfd)->vma = (obj_datasec (abfd)->vma - + obj_datasec (abfd)->size); + if (!bss->user_set_vma) + bss->vma = data->vma + execp->a_data; /* If the BSS immediately follows the data section and extra space in the page is left after the data section, fudge data in the header so that the bss section looks smaller by that @@ -1054,12 +1056,10 @@ (Note that a linker script, as well as the above assignment, could have explicitly set the BSS vma to immediately follow the data section.) */ - if (align_power (obj_bsssec (abfd)->vma, obj_bsssec (abfd)->alignment_power) - == obj_datasec (abfd)->vma + obj_datasec (abfd)->size) - execp->a_bss = (data_pad > obj_bsssec (abfd)->size - ? 0 : obj_bsssec (abfd)->size - data_pad); + if (align_power (bss->vma, bss->alignment_power) == data->vma + execp->a_data) + execp->a_bss = data_pad > bss->size ? 0 : bss->size - data_pad; else - execp->a_bss = obj_bsssec (abfd)->size; + execp->a_bss = bss->size; } static void @@ -1068,38 +1068,39 @@ file_ptr pos = adata (abfd).exec_bytes_size; bfd_vma vma = 0; int pad; + asection *text = obj_textsec (abfd); + asection *data = obj_datasec (abfd); + asection *bss = obj_bsssec (abfd); /* Text. */ - obj_textsec (abfd)->filepos = pos; - if (!obj_textsec (abfd)->user_set_vma) - obj_textsec (abfd)->vma = vma; + text->filepos = pos; + if (!text->user_set_vma) + text->vma = vma; else - vma = obj_textsec (abfd)->vma; - pos += obj_textsec (abfd)->size; - vma += obj_textsec (abfd)->size; + vma = text->vma; + pos += execp->a_text; + vma += execp->a_text; /* Data. */ - obj_datasec (abfd)->filepos = pos; - if (!obj_datasec (abfd)->user_set_vma) - obj_datasec (abfd)->vma = BFD_ALIGN (vma, adata (abfd).segment_size); - vma = obj_datasec (abfd)->vma; + data->filepos = pos; + if (!data->user_set_vma) + data->vma = BFD_ALIGN (vma, adata (abfd).segment_size); + vma = data->vma; /* Since BSS follows data immediately, see if it needs alignment. */ - vma += obj_datasec (abfd)->size; - pad = align_power (vma, obj_bsssec (abfd)->alignment_power) - vma; - obj_datasec (abfd)->size += pad; - pos += obj_datasec (abfd)->size; + vma += data->size; + pad = align_power (vma, bss->alignment_power) - vma; + execp->a_data = data->size + pad; + pos += execp->a_data; /* BSS. */ - if (!obj_bsssec (abfd)->user_set_vma) - obj_bsssec (abfd)->vma = vma; + if (!bss->user_set_vma) + bss->vma = vma; else - vma = obj_bsssec (abfd)->vma; + vma = bss->vma; /* Fix up exec header. */ - execp->a_text = obj_textsec (abfd)->size; - execp->a_data = obj_datasec (abfd)->size; - execp->a_bss = obj_bsssec (abfd)->size; + execp->a_bss = bss->size; N_SET_MAGIC (execp, NMAGIC); } @@ -1114,9 +1115,8 @@ if (adata (abfd).magic != undecided_magic) return TRUE; - obj_textsec (abfd)->size = - align_power (obj_textsec (abfd)->size, - obj_textsec (abfd)->alignment_power); + execp->a_text = align_power (obj_textsec (abfd)->size, + obj_textsec (abfd)->alignment_power); /* Rule (heuristic) for when to pad to a new page. Note that there are (at least) two ways demand-paged (ZMAGIC) files have been @@ -1181,11 +1181,11 @@ #ifdef BFD_AOUT_DEBUG fprintf (stderr, " text=<%x,%x,%x> data=<%x,%x,%x> bss=<%x,%x>\n", - obj_textsec (abfd)->vma, obj_textsec (abfd)->size, + obj_textsec (abfd)->vma, execp->a_text, obj_textsec (abfd)->filepos, - obj_datasec (abfd)->vma, obj_datasec (abfd)->size, + obj_datasec (abfd)->vma, execp->a_data, obj_datasec (abfd)->filepos, - obj_bsssec (abfd)->vma, obj_bsssec (abfd)->size); + obj_bsssec (abfd)->vma, execp->a_bss); #endif return TRUE; @@ -1303,16 +1303,11 @@ /* We allocate using malloc to make the values easy to free later on. If we put them on the objalloc it might not be possible to free them. */ - syms = (struct external_nlist *) bfd_malloc (amt); + if (bfd_seek (abfd, obj_sym_filepos (abfd), SEEK_SET) != 0) + return FALSE; + syms = (struct external_nlist *) _bfd_malloc_and_read (abfd, amt, amt); if (syms == NULL) return FALSE; - - if (bfd_seek (abfd, obj_sym_filepos (abfd), SEEK_SET) != 0 - || bfd_bread (syms, amt, abfd) != amt) - { - free (syms); - return FALSE; - } #endif obj_aout_external_syms (abfd) = syms; @@ -1675,7 +1670,7 @@ asymbol * NAME (aout, make_empty_symbol) (bfd *abfd) { - bfd_size_type amt = sizeof (aout_symbol_type); + size_t amt = sizeof (aout_symbol_type); aout_symbol_type *new_symbol = (aout_symbol_type *) bfd_zalloc (abfd, amt); if (!new_symbol) @@ -1685,7 +1680,7 @@ return &new_symbol->symbol; } -/* Translate a set of internal symbols into external symbols. */ +/* Translate a set of external symbols into internal symbols. */ bfd_boolean NAME (aout, translate_symbol_table) (bfd *abfd, @@ -1852,7 +1847,7 @@ emit_stringtab (bfd *abfd, struct bfd_strtab_hash *tab) { bfd_byte buffer[BYTES_IN_WORD]; - bfd_size_type amt = BYTES_IN_WORD; + size_t amt = BYTES_IN_WORD; /* The string table starts with the size. */ PUT_WORD (abfd, _bfd_stringtab_size (tab) + BYTES_IN_WORD, buffer); @@ -1878,7 +1873,7 @@ asymbol *g = generic[count]; bfd_size_type indx; struct external_nlist nsp; - bfd_size_type amt; + size_t amt; indx = add_to_stringtab (abfd, strtab, g->name, FALSE); if (indx == (bfd_size_type) -1) @@ -1917,7 +1912,7 @@ return TRUE; -error_return: + error_return: _bfd_stringtab_free (strtab); return FALSE; } @@ -1961,7 +1956,24 @@ PUT_WORD (abfd, g->address, natptr->r_address); BFD_ASSERT (g->howto != NULL); - r_length = g->howto->size ; /* Size as a power of two. */ + + switch (bfd_get_reloc_size (g->howto)) + { + default: + _bfd_error_handler (_("%pB: unsupported AOUT relocation size: %d"), + abfd, bfd_get_reloc_size (g->howto)); + bfd_set_error (bfd_error_bad_value); + return; + case 1: + case 2: + case 4: + r_length = g->howto->size; /* Size as a power of two. */ + break; + case 8: + r_length = 3; + break; + } + r_pcrel = (int) g->howto->pc_relative; /* Relative to PC? */ /* XXX This relies on relocs coming from a.out files. */ r_baserel = (g->howto->type & 8) != 0; @@ -2316,34 +2328,22 @@ return FALSE; } - if (reloc_size == 0) - return TRUE; /* Nothing to be done. */ - - if (bfd_seek (abfd, asect->rel_filepos, SEEK_SET) != 0) - return FALSE; - each_size = obj_reloc_entry_size (abfd); - count = reloc_size / each_size; if (count == 0) return TRUE; /* Nothing to be done. */ - amt = count * sizeof (arelent); - reloc_cache = (arelent *) bfd_zmalloc (amt); - if (reloc_cache == NULL) + if (bfd_seek (abfd, asect->rel_filepos, SEEK_SET) != 0) return FALSE; - - relocs = bfd_malloc (reloc_size); + relocs = _bfd_malloc_and_read (abfd, reloc_size, reloc_size); if (relocs == NULL) - { - free (reloc_cache); - return FALSE; - } + return FALSE; - if (bfd_bread (relocs, reloc_size, abfd) != reloc_size) + amt = count * sizeof (arelent); + reloc_cache = (arelent *) bfd_zmalloc (amt); + if (reloc_cache == NULL) { free (relocs); - free (reloc_cache); return FALSE; } @@ -2409,8 +2409,8 @@ || (*generic)->sym_ptr_ptr == NULL) { bfd_set_error (bfd_error_invalid_operation); - _bfd_error_handler (_("\ -%pB: attempt to write out unknown reloc type"), abfd); + _bfd_error_handler (_("%pB: attempt to write out " + "unknown reloc type"), abfd); return FALSE; } MY_swap_ext_reloc_out (abfd, *generic, @@ -2427,8 +2427,8 @@ || (*generic)->sym_ptr_ptr == NULL) { bfd_set_error (bfd_error_invalid_operation); - _bfd_error_handler (_("\ -%pB: attempt to write out unknown reloc type"), abfd); + _bfd_error_handler (_("%pB: attempt to write out " + "unknown reloc type"), abfd); return FALSE; } MY_swap_std_reloc_out (abfd, *generic, @@ -2697,7 +2697,7 @@ bfd_size_type filelen, funclen; char *buf; - *filename_ptr = abfd->filename; + *filename_ptr = bfd_get_filename (abfd); *functionname_ptr = NULL; *line_ptr = 0; if (disriminator_ptr) @@ -2827,8 +2827,7 @@ else funclen = strlen (bfd_asymbol_name (func)); - if (adata (abfd).line_buf != NULL) - free (adata (abfd).line_buf); + free (adata (abfd).line_buf); if (filelen + funclen == 0) adata (abfd).line_buf = buf = NULL; @@ -2910,7 +2909,7 @@ || abfd->tdata.aout_data == NULL) return TRUE; -#define BFCI_FREE(x) if (x != NULL) { free (x); x = NULL; } +#define BFCI_FREE(x) do { free (x); x = NULL; } while (0) BFCI_FREE (obj_aout_symbols (abfd)); #ifdef USE_MMAP obj_aout_external_syms (abfd) = 0; @@ -2980,7 +2979,7 @@ NAME (aout, link_hash_table_create) (bfd *abfd) { struct aout_link_hash_table *ret; - bfd_size_type amt = sizeof (* ret); + size_t amt = sizeof (* ret); ret = (struct aout_link_hash_table *) bfd_malloc (amt); if (ret == NULL) @@ -3634,7 +3633,7 @@ bfd_vma val; struct external_nlist outsym; bfd_size_type indx; - bfd_size_type amt; + size_t amt; if (h->root.type == bfd_link_hash_warning) { @@ -3759,7 +3758,7 @@ struct reloc_std_external srel; struct reloc_ext_external erel; void * rel_ptr; - bfd_size_type amt; + size_t amt; pr = p->u.reloc.p; @@ -3831,13 +3830,16 @@ int r_baserel; int r_jmptable; int r_relative; - int r_length; + unsigned int r_length; r_pcrel = (int) howto->pc_relative; r_baserel = (howto->type & 8) != 0; r_jmptable = (howto->type & 16) != 0; r_relative = (howto->type & 32) != 0; - r_length = howto->size; + if (bfd_get_reloc_size (howto) != 8) + r_length = howto->size; /* Size as a power of two. */ + else + r_length = 3; PUT_WORD (flaginfo->output_bfd, p->offset, srel.r_address); if (bfd_header_big_endian (flaginfo->output_bfd)) @@ -4854,7 +4856,8 @@ discarding such symbols. */ if (strip != strip_all && (strip != strip_some - || bfd_hash_lookup (flaginfo->info->keep_hash, input_bfd->filename, + || bfd_hash_lookup (flaginfo->info->keep_hash, + bfd_get_filename (input_bfd), FALSE, FALSE) != NULL) && discard != discard_all) { @@ -4862,7 +4865,7 @@ H_PUT_8 (output_bfd, 0, outsym->e_other); H_PUT_16 (output_bfd, 0, outsym->e_desc); strtab_index = add_to_stringtab (output_bfd, flaginfo->strtab, - input_bfd->filename, FALSE); + bfd_get_filename (input_bfd), FALSE); if (strtab_index == (bfd_size_type) -1) return FALSE; PUT_WORD (output_bfd, strtab_index, outsym->e_strx); @@ -5624,26 +5627,15 @@ } } - if (aout_info.contents != NULL) - { - free (aout_info.contents); - aout_info.contents = NULL; - } - if (aout_info.relocs != NULL) - { - free (aout_info.relocs); - aout_info.relocs = NULL; - } - if (aout_info.symbol_map != NULL) - { - free (aout_info.symbol_map); - aout_info.symbol_map = NULL; - } - if (aout_info.output_syms != NULL) - { - free (aout_info.output_syms); - aout_info.output_syms = NULL; - } + free (aout_info.contents); + aout_info.contents = NULL; + free (aout_info.relocs); + aout_info.relocs = NULL; + free (aout_info.symbol_map); + aout_info.symbol_map = NULL; + free (aout_info.output_syms); + aout_info.output_syms = NULL; + if (includes_hash_initialized) { bfd_hash_table_free (&aout_info.includes.root); @@ -5686,14 +5678,10 @@ return TRUE; error_return: - if (aout_info.contents != NULL) - free (aout_info.contents); - if (aout_info.relocs != NULL) - free (aout_info.relocs); - if (aout_info.symbol_map != NULL) - free (aout_info.symbol_map); - if (aout_info.output_syms != NULL) - free (aout_info.output_syms); + free (aout_info.contents); + free (aout_info.relocs); + free (aout_info.symbol_map); + free (aout_info.output_syms); if (includes_hash_initialized) bfd_hash_table_free (&aout_info.includes.root); return FALSE; diff -Nru gdb-9.1/bfd/arc-got.h gdb-10.2/bfd/arc-got.h --- gdb-9.1/bfd/arc-got.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/arc-got.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* ARC-specific support for 32-bit ELF - Copyright (C) 1994-2019 Free Software Foundation, Inc. + Copyright (C) 1994-2020 Free Software Foundation, Inc. Contributed by Cupertino Miranda (cmiranda@synopsys.com). This file is part of BFD, the Binary File Descriptor library. @@ -296,7 +296,7 @@ if (h != NULL) { - // TODO: This should not be here. + /* TODO: This should not be here. */ reloc_data->sym_value = h->root.u.def.value; reloc_data->sym_section = h->root.u.def.section; diff -Nru gdb-9.1/bfd/archive64.c gdb-10.2/bfd/archive64.c --- gdb-9.1/bfd/archive64.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/archive64.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Support for 64-bit archives. - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. Ian Lance Taylor, Cygnus Support Linker support added by Mark Mitchell, CodeSourcery, LLC. @@ -47,6 +47,7 @@ bfd_byte *raw_armap = NULL; carsym *carsyms; bfd_size_type amt; + ufile_ptr filesize; ardata->symdefs = NULL; @@ -76,6 +77,13 @@ parsed_size = mapdata->parsed_size; free (mapdata); + filesize = bfd_get_file_size (abfd); + if (filesize != 0 && parsed_size > filesize) + { + bfd_set_error (bfd_error_malformed_archive); + return FALSE; + } + if (bfd_bread (int_buf, 8, abfd) != 8) { if (bfd_get_error () != bfd_error_system_call) @@ -102,22 +110,19 @@ bfd_set_error (bfd_error_malformed_archive); return FALSE; } - ardata->symdefs = (struct carsym *) bfd_zalloc (abfd, amt); + ardata->symdefs = (struct carsym *) bfd_alloc (abfd, amt); if (ardata->symdefs == NULL) return FALSE; carsyms = ardata->symdefs; stringbase = ((char *) ardata->symdefs) + carsym_size; - raw_armap = (bfd_byte *) bfd_alloc (abfd, ptrsize); - if (raw_armap == NULL) - goto release_symdefs; - - if (bfd_bread (raw_armap, ptrsize, abfd) != ptrsize + raw_armap = (bfd_byte *) _bfd_alloc_and_read (abfd, ptrsize, ptrsize); + if (raw_armap == NULL || bfd_bread (stringbase, stringsize, abfd) != stringsize) { if (bfd_get_error () != bfd_error_system_call) bfd_set_error (bfd_error_malformed_archive); - goto release_raw_armap; + goto release_symdefs; } stringend = stringbase + stringsize; @@ -142,9 +147,7 @@ return TRUE; -release_raw_armap: - bfd_release (abfd, raw_armap); -release_symdefs: + release_symdefs: bfd_release (abfd, ardata->symdefs); return FALSE; } diff -Nru gdb-9.1/bfd/archive.c gdb-10.2/bfd/archive.c --- gdb-9.1/bfd/archive.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/archive.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD back-end for archive files (libraries). - Copyright (C) 1990-2019 Free Software Foundation, Inc. + Copyright (C) 1990-2020 Free Software Foundation, Inc. Written by Cygnus Support. Mostly Gumby Henkel-Wallace's fault. This file is part of BFD, the Binary File Descriptor library. @@ -212,7 +212,7 @@ bfd_boolean _bfd_generic_mkarchive (bfd *abfd) { - bfd_size_type amt = sizeof (struct artdata); + size_t amt = sizeof (struct artdata); abfd->tdata.aout_ar_data = (struct artdata *) bfd_zalloc (abfd, amt); if (bfd_ardata (abfd) == NULL) @@ -403,7 +403,7 @@ bfd *abfd; /* PR 15140: Don't allow a nested archive pointing to itself. */ - if (filename_cmp (filename, arch_bfd->filename) == 0) + if (filename_cmp (filename, bfd_get_filename (arch_bfd)) == 0) { bfd_set_error (bfd_error_malformed_archive); return NULL; @@ -413,7 +413,7 @@ abfd != NULL; abfd = abfd->archive_next) { - if (filename_cmp (filename, abfd->filename) == 0) + if (filename_cmp (filename, bfd_get_filename (abfd)) == 0) return abfd; } abfd = open_nested_file (filename, arch_bfd); @@ -488,6 +488,7 @@ bfd_size_type parsed_size; struct areltdata *ared; char *filename = NULL; + ufile_ptr filesize; bfd_size_type namelen = 0; bfd_size_type allocsize = sizeof (struct areltdata) + sizeof (struct ar_hdr); char *allocptr = 0; @@ -538,11 +539,19 @@ { /* BSD-4.4 extended name */ namelen = atoi (&hdr.ar_name[3]); + filesize = bfd_get_file_size (abfd); + if (namelen > parsed_size + || namelen > -allocsize - 2 + || (filesize != 0 && namelen > filesize)) + { + bfd_set_error (bfd_error_malformed_archive); + return NULL; + } allocsize += namelen + 1; parsed_size -= namelen; extra_size = namelen; - allocptr = (char *) bfd_zmalloc (allocsize); + allocptr = (char *) bfd_malloc (allocsize); if (allocptr == NULL) return NULL; filename = (allocptr @@ -586,13 +595,13 @@ if (!allocptr) { - allocptr = (char *) bfd_zmalloc (allocsize); + allocptr = (char *) bfd_malloc (allocsize); if (allocptr == NULL) return NULL; } + memset (allocptr, 0, sizeof (struct areltdata)); ared = (struct areltdata *) allocptr; - ared->arch_header = allocptr + sizeof (struct areltdata); memcpy (ared->arch_header, &hdr, sizeof (struct ar_hdr)); ared->parsed_size = parsed_size; @@ -619,7 +628,7 @@ char * _bfd_append_relative_path (bfd *arch, char *elt_name) { - const char *arch_name = arch->filename; + const char *arch_name = bfd_get_filename (arch); const char *base_name = lbasename (arch_name); size_t prefix_len; char *filename; @@ -728,8 +737,7 @@ else { n_bfd->origin = n_bfd->proxy_origin; - n_bfd->filename = bfd_strdup (filename); - if (n_bfd->filename == NULL) + if (!bfd_set_filename (n_bfd, filename)) goto out; } @@ -842,12 +850,12 @@ return (bfd *) _bfd_ptr_bfd_null_error (archive); } -const bfd_target * +bfd_cleanup bfd_generic_archive_p (bfd *abfd) { struct artdata *tdata_hold; char armag[SARMAG + 1]; - bfd_size_type amt; + size_t amt; if (bfd_bread (armag, SARMAG, abfd) != SARMAG) { @@ -924,7 +932,7 @@ } } - return abfd->xvec; + return _bfd_no_cleanup; } /* Some constants for a 32 bit BSD archive structure. We do not @@ -951,11 +959,12 @@ do_slurp_bsd_armap (bfd *abfd) { struct areltdata *mapdata; - unsigned int counter; + size_t counter; bfd_byte *raw_armap, *rbase; struct artdata *ardata = bfd_ardata (abfd); char *stringbase; - bfd_size_type parsed_size, amt; + bfd_size_type parsed_size; + size_t amt, string_size; carsym *set; mapdata = (struct areltdata *) _bfd_read_ar_hdr (abfd); @@ -965,45 +974,51 @@ free (mapdata); /* PR 17512: file: 883ff754. */ /* PR 17512: file: 0458885f. */ - if (parsed_size < 4) - return FALSE; - - raw_armap = (bfd_byte *) bfd_zalloc (abfd, parsed_size); - if (raw_armap == NULL) - return FALSE; - - if (bfd_bread (raw_armap, parsed_size, abfd) != parsed_size) + if (parsed_size < BSD_SYMDEF_COUNT_SIZE + BSD_STRING_COUNT_SIZE) { - if (bfd_get_error () != bfd_error_system_call) - bfd_set_error (bfd_error_malformed_archive); - byebye: - bfd_release (abfd, raw_armap); + bfd_set_error (bfd_error_malformed_archive); return FALSE; } - ardata->symdef_count = H_GET_32 (abfd, raw_armap) / BSD_SYMDEF_SIZE; - if (ardata->symdef_count * BSD_SYMDEF_SIZE > - parsed_size - BSD_SYMDEF_COUNT_SIZE) + raw_armap = (bfd_byte *) _bfd_alloc_and_read (abfd, parsed_size, parsed_size); + if (raw_armap == NULL) + return FALSE; + + parsed_size -= BSD_SYMDEF_COUNT_SIZE + BSD_STRING_COUNT_SIZE; + amt = H_GET_32 (abfd, raw_armap); + if (amt > parsed_size + || amt % BSD_SYMDEF_SIZE != 0) { /* Probably we're using the wrong byte ordering. */ bfd_set_error (bfd_error_wrong_format); - goto byebye; + goto release_armap; } rbase = raw_armap + BSD_SYMDEF_COUNT_SIZE; - stringbase = ((char *) rbase - + ardata->symdef_count * BSD_SYMDEF_SIZE - + BSD_STRING_COUNT_SIZE); - amt = ardata->symdef_count * sizeof (carsym); + stringbase = (char *) rbase + amt + BSD_STRING_COUNT_SIZE; + string_size = parsed_size - amt; + + ardata->symdef_count = amt / BSD_SYMDEF_SIZE; + if (_bfd_mul_overflow (ardata->symdef_count, sizeof (carsym), &amt)) + { + bfd_set_error (bfd_error_no_memory); + goto release_armap; + } ardata->symdefs = (struct carsym *) bfd_alloc (abfd, amt); if (!ardata->symdefs) - return FALSE; + goto release_armap; for (counter = 0, set = ardata->symdefs; counter < ardata->symdef_count; counter++, set++, rbase += BSD_SYMDEF_SIZE) { - set->name = H_GET_32 (abfd, rbase) + stringbase; + unsigned nameoff = H_GET_32 (abfd, rbase); + if (nameoff >= string_size) + { + bfd_set_error (bfd_error_malformed_archive); + goto release_armap; + } + set->name = stringbase + nameoff; set->file_offset = H_GET_32 (abfd, rbase + BSD_SYMDEF_OFFSET_SIZE); } @@ -1015,6 +1030,12 @@ to be allocated on an objalloc anyway... */ abfd->has_armap = TRUE; return TRUE; + + release_armap: + ardata->symdef_count = 0; + ardata->symdefs = NULL; + bfd_release (abfd, raw_armap); + return FALSE; } /* Read a COFF archive symbol table. Returns FALSE on error, TRUE @@ -1030,12 +1051,12 @@ char *stringend; bfd_size_type stringsize; bfd_size_type parsed_size; + ufile_ptr filesize; + size_t nsymz, carsym_size, ptrsize, i; carsym *carsyms; - bfd_size_type nsymz; /* Number of symbols in armap. */ bfd_vma (*swap) (const void *); - char int_buf[sizeof (long)]; - bfd_size_type carsym_size, ptrsize; - unsigned int i; + char int_buf[4]; + struct areltdata *tmp; mapdata = (struct areltdata *) _bfd_read_ar_hdr (abfd); if (mapdata == NULL) @@ -1044,47 +1065,54 @@ free (mapdata); if (bfd_bread (int_buf, 4, abfd) != 4) - { - if (bfd_get_error () != bfd_error_system_call) - bfd_set_error (bfd_error_malformed_archive); - return FALSE; - } + return FALSE; + /* It seems that all numeric information in a coff archive is always - in big endian format, nomatter the host or target. */ + in big endian format, no matter the host or target. */ swap = bfd_getb32; nsymz = bfd_getb32 (int_buf); - stringsize = parsed_size - (4 * nsymz) - 4; /* The coff armap must be read sequentially. So we construct a bsd-style one in core all at once, for simplicity. */ - if (nsymz > ~ (bfd_size_type) 0 / sizeof (carsym)) - return FALSE; + if (_bfd_mul_overflow (nsymz, sizeof (carsym), &carsym_size)) + { + bfd_set_error (bfd_error_no_memory); + return FALSE; + } + + filesize = bfd_get_file_size (abfd); + ptrsize = 4 * nsymz; + if ((filesize != 0 && parsed_size > filesize) + || parsed_size < 4 + || parsed_size - 4 < ptrsize) + { + bfd_set_error (bfd_error_malformed_archive); + return FALSE; + } - carsym_size = (nsymz * sizeof (carsym)); - ptrsize = (4 * nsymz); + stringsize = parsed_size - ptrsize - 4; if (carsym_size + stringsize + 1 <= carsym_size) + { + bfd_set_error (bfd_error_no_memory); + return FALSE; + } + + /* Allocate and read in the raw offsets. */ + raw_armap = (int *) _bfd_malloc_and_read (abfd, ptrsize, ptrsize); + if (raw_armap == NULL) return FALSE; - ardata->symdefs = (struct carsym *) bfd_zalloc (abfd, - carsym_size + stringsize + 1); + ardata->symdefs = (struct carsym *) bfd_alloc (abfd, + carsym_size + stringsize + 1); if (ardata->symdefs == NULL) - return FALSE; + goto free_armap; carsyms = ardata->symdefs; stringbase = ((char *) ardata->symdefs) + carsym_size; - /* Allocate and read in the raw offsets. */ - raw_armap = (int *) bfd_alloc (abfd, ptrsize); - if (raw_armap == NULL) + if (bfd_bread (stringbase, stringsize, abfd) != stringsize) goto release_symdefs; - if (bfd_bread (raw_armap, ptrsize, abfd) != ptrsize - || (bfd_bread (stringbase, stringsize, abfd) != stringsize)) - { - if (bfd_get_error () != bfd_error_system_call) - bfd_set_error (bfd_error_malformed_archive); - goto release_raw_armap; - } /* OK, build the carsyms. */ stringend = stringbase + stringsize; @@ -1104,34 +1132,29 @@ ardata->first_file_filepos = bfd_tell (abfd); /* Pad to an even boundary if you have to. */ ardata->first_file_filepos += (ardata->first_file_filepos) % 2; + if (bfd_seek (abfd, ardata->first_file_filepos, SEEK_SET) != 0) + goto release_symdefs; abfd->has_armap = TRUE; - bfd_release (abfd, raw_armap); + free (raw_armap); /* Check for a second archive header (as used by PE). */ - { - struct areltdata *tmp; - - bfd_seek (abfd, ardata->first_file_filepos, SEEK_SET); - tmp = (struct areltdata *) _bfd_read_ar_hdr (abfd); - if (tmp != NULL) - { - if (tmp->arch_header[0] == '/' - && tmp->arch_header[1] == ' ') - { - ardata->first_file_filepos += - (tmp->parsed_size + sizeof (struct ar_hdr) + 1) & ~(unsigned) 1; - } - free (tmp); - } - } + tmp = (struct areltdata *) _bfd_read_ar_hdr (abfd); + if (tmp != NULL) + { + if (tmp->arch_header[0] == '/' + && tmp->arch_header[1] == ' ') + ardata->first_file_filepos + += (tmp->parsed_size + sizeof (struct ar_hdr) + 1) & ~(unsigned) 1; + free (tmp); + } return TRUE; -release_raw_armap: - bfd_release (abfd, raw_armap); -release_symdefs: + release_symdefs: bfd_release (abfd, (ardata)->symdefs); + free_armap: + free (raw_armap); return FALSE; } @@ -1208,8 +1231,6 @@ _bfd_slurp_extended_name_table (bfd *abfd) { char nextname[17]; - struct areltdata *namedata; - bfd_size_type amt; /* FIXME: Formatting sucks here, and in case of failure of BFD_READ, we probably don't want to return TRUE. */ @@ -1218,6 +1239,10 @@ if (bfd_bread (nextname, 16, abfd) == 16) { + struct areltdata *namedata; + bfd_size_type amt; + ufile_ptr filesize; + if (bfd_seek (abfd, (file_ptr) -16, SEEK_CUR) != 0) return FALSE; @@ -1233,12 +1258,16 @@ if (namedata == NULL) return FALSE; + filesize = bfd_get_file_size (abfd); amt = namedata->parsed_size; - if (amt + 1 == 0) - goto byebye; + if (amt + 1 == 0 || (filesize != 0 && amt > filesize)) + { + bfd_set_error (bfd_error_malformed_archive); + goto byebye; + } bfd_ardata (abfd)->extended_names_size = amt; - bfd_ardata (abfd)->extended_names = (char *) bfd_zalloc (abfd, amt + 1); + bfd_ardata (abfd)->extended_names = (char *) bfd_alloc (abfd, amt + 1); if (bfd_ardata (abfd)->extended_names == NULL) { byebye: @@ -1256,6 +1285,7 @@ bfd_ardata (abfd)->extended_names = NULL; goto byebye; } + bfd_ardata (abfd)->extended_names[amt] = 0; /* Since the archive is supposed to be printable if it contains text, the entries in the list are newline-padded, not null @@ -1438,8 +1468,7 @@ if (len > pathbuf_len) { - if (pathbuf != NULL) - free (pathbuf); + free (pathbuf); pathbuf_len = 0; pathbuf = (char *) bfd_malloc (len); if (pathbuf == NULL) @@ -1533,13 +1562,13 @@ if (bfd_is_thin_archive (abfd)) { - const char *filename = current->filename; + const char *filename = bfd_get_filename (current); /* If the element being added is a member of another archive (i.e., we are flattening), use the containing archive's name. */ if (current->my_archive && ! bfd_is_thin_archive (current->my_archive)) - filename = current->my_archive->filename; + filename = bfd_get_filename (current->my_archive); /* If the path is the same as the previous path seen, reuse it. This can happen when flattening a thin @@ -1552,8 +1581,8 @@ /* If the path is relative, adjust it relative to the containing archive. */ if (! IS_ABSOLUTE_PATH (filename) - && ! IS_ABSOLUTE_PATH (abfd->filename)) - normal = adjust_relative_path (filename, abfd->filename); + && ! IS_ABSOLUTE_PATH (bfd_get_filename (abfd))) + normal = adjust_relative_path (filename, bfd_get_filename (abfd)); else normal = filename; @@ -1567,7 +1596,7 @@ continue; } - normal = normalize (abfd, current->filename); + normal = normalize (abfd, bfd_get_filename (current)); if (normal == NULL) return FALSE; @@ -1607,7 +1636,7 @@ if (total_namelen == 0) return TRUE; - *tabloc = (char *) bfd_zalloc (abfd, total_namelen); + *tabloc = (char *) bfd_alloc (abfd, total_namelen); if (*tabloc == NULL) return FALSE; @@ -1624,7 +1653,7 @@ const char *normal; unsigned int thislen; long stroff; - const char *filename = current->filename; + const char *filename = bfd_get_filename (current); if (bfd_is_thin_archive (abfd)) { @@ -1632,7 +1661,7 @@ (i.e., we are flattening), use the containing archive's name. */ if (current->my_archive && ! bfd_is_thin_archive (current->my_archive)) - filename = current->my_archive->filename; + filename = bfd_get_filename (current->my_archive); /* If the path is the same as the previous path seen, reuse it. This can happen when flattening a thin archive that contains other archives. @@ -1641,8 +1670,8 @@ if (last_filename && filename_cmp (last_filename, filename) == 0) normal = last_filename; else if (! IS_ABSOLUTE_PATH (filename) - && ! IS_ABSOLUTE_PATH (abfd->filename)) - normal = adjust_relative_path (filename, abfd->filename); + && ! IS_ABSOLUTE_PATH (bfd_get_filename (abfd))) + normal = adjust_relative_path (filename, bfd_get_filename (abfd)); else normal = filename; } @@ -1664,16 +1693,14 @@ stroff = last_stroff; else { - strcpy (strptr, normal); - if (! trailing_slash) - strptr[thislen] = ARFMAG[1]; - else - { - strptr[thislen] = '/'; - strptr[thislen + 1] = ARFMAG[1]; - } + last_filename = filename; stroff = strptr - *tabloc; last_stroff = stroff; + memcpy (strptr, normal, thislen); + strptr += thislen; + if (trailing_slash) + *strptr++ = '/'; + *strptr++ = ARFMAG[1]; } hdr->ar_name[0] = ar_padchar (current); if (bfd_is_thin_archive (abfd) && current->origin > 0) @@ -1686,13 +1713,6 @@ } else _bfd_ar_spacepad (hdr->ar_name + 1, maxname - 1, "%-ld", stroff); - if (normal != last_filename) - { - strptr += thislen + 1; - if (trailing_slash) - ++strptr; - last_filename = filename; - } } } @@ -1719,7 +1739,7 @@ current != NULL; current = current->archive_next) { - const char *normal = normalize (abfd, current->filename); + const char *normal = normalize (abfd, bfd_get_filename (current)); int has_space = 0; unsigned int len; @@ -1765,7 +1785,7 @@ if (is_bsd44_extended_name (hdr->ar_name)) { /* This is a BSD 4.4 extended name. */ - const char *fullname = normalize (abfd, abfd->filename); + const char *fullname = normalize (abfd, bfd_get_filename (abfd)); unsigned int len = strlen (fullname); unsigned int padded_len = (len + 3) & ~3; @@ -1841,7 +1861,7 @@ struct stat status; struct areltdata *ared; struct ar_hdr *hdr; - bfd_size_type amt; + size_t amt; if (member && (member->flags & BFD_IN_MEMORY) != 0) { @@ -2117,13 +2137,15 @@ if (!current->arelt_data) { current->arelt_data = - bfd_ar_hdr_from_filesystem (arch, current->filename, current); + bfd_ar_hdr_from_filesystem (arch, bfd_get_filename (current), + current); if (!current->arelt_data) goto input_err; /* Put in the file name. */ BFD_SEND (arch, _bfd_truncate_arname, - (arch, current->filename, (char *) arch_hdr (current))); + (arch, bfd_get_filename (current), + (char *) arch_hdr (current))); } if (makemap && ! hasobjects) @@ -2191,17 +2213,13 @@ while (remaining) { - unsigned int amt = DEFAULT_BUFFERSIZE; + size_t amt = DEFAULT_BUFFERSIZE; if (amt > remaining) amt = remaining; errno = 0; if (bfd_bread (buffer, amt, current) != amt) - { - if (bfd_get_error () != bfd_error_system_call) - bfd_set_error (bfd_error_file_truncated); - goto input_err; - } + goto input_err; if (bfd_bwrite (buffer, amt, arch) != amt) return FALSE; remaining -= amt; @@ -2255,7 +2273,7 @@ asymbol **syms = NULL; long syms_max = 0; bfd_boolean ret; - bfd_size_type amt; + size_t amt; static bfd_boolean report_plugin_err = TRUE; /* Dunno if this is the best place for this info... */ @@ -2276,7 +2294,7 @@ /* Drop all the files called __.SYMDEF, we're going to make our own. */ while (arch->archive_head - && strcmp (arch->archive_head->filename, "__.SYMDEF") == 0) + && strcmp (bfd_get_filename (arch->archive_head), "__.SYMDEF") == 0) arch->archive_head = arch->archive_head->archive_next; /* Map over each element. */ @@ -2307,8 +2325,7 @@ { if (storage > syms_max) { - if (syms_max > 0) - free (syms); + free (syms); syms_max = storage; syms = (asymbol **) bfd_malloc (syms_max); if (syms == NULL) @@ -2389,20 +2406,16 @@ ret = BFD_SEND (arch, write_armap, (arch, elength, map, orl_count, stridx)); - if (syms_max > 0) - free (syms); - if (map != NULL) - free (map); + free (syms); + free (map); if (first_name != NULL) bfd_release (arch, first_name); return ret; error_return: - if (syms_max > 0) - free (syms); - if (map != NULL) - free (map); + free (syms); + free (map); if (first_name != NULL) bfd_release (arch, first_name); @@ -2477,7 +2490,7 @@ { struct stat statbuf; - if (stat (arch->filename, &statbuf) == 0) + if (stat (bfd_get_filename (arch), &statbuf) == 0) bfd_ardata (arch)->armap_timestamp = (statbuf.st_mtime + ARMAP_TIME_OFFSET); uid = getuid(); diff -Nru gdb-9.1/bfd/archures.c gdb-10.2/bfd/archures.c --- gdb-9.1/bfd/archures.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/archures.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD library support routines for architectures. - Copyright (C) 1990-2019 Free Software Foundation, Inc. + Copyright (C) 1990-2020 Free Software Foundation, Inc. Hacked by John Gilmore and Steve Chamberlain of Cygnus Support. This file is part of BFD, the Binary File Descriptor library. @@ -211,10 +211,6 @@ . bfd_arch_k1om, {* Intel K1OM. *} .#define bfd_mach_k1om (1 << 6) .#define bfd_mach_k1om_intel_syntax (bfd_mach_k1om | bfd_mach_i386_intel_syntax) -.#define bfd_mach_i386_nacl (1 << 7) -.#define bfd_mach_i386_i386_nacl (bfd_mach_i386_i386 | bfd_mach_i386_nacl) -.#define bfd_mach_x86_64_nacl (bfd_mach_x86_64 | bfd_mach_i386_nacl) -.#define bfd_mach_x64_32_nacl (bfd_mach_x64_32 | bfd_mach_i386_nacl) . bfd_arch_iamcu, {* Intel MCU. *} .#define bfd_mach_iamcu (1 << 8) .#define bfd_mach_i386_iamcu (bfd_mach_i386_i386 | bfd_mach_iamcu) @@ -232,7 +228,6 @@ .#define bfd_mach_h8300sx 6 .#define bfd_mach_h8300sxn 7 . bfd_arch_pdp11, {* DEC PDP-11. *} -. bfd_arch_plugin, . bfd_arch_powerpc, {* PowerPC. *} .#define bfd_mach_ppc 32 .#define bfd_mach_ppc64 64 @@ -355,7 +350,6 @@ .#define bfd_mach_tic4x 40 . bfd_arch_tic54x, {* Texas Instruments TMS320C54X. *} . bfd_arch_tic6x, {* Texas Instruments TMS320C6X. *} -. bfd_arch_tic80, {* TI TMS320c80 (MVP). *} . bfd_arch_v850, {* NEC V850. *} . bfd_arch_v850_rh850,{* NEC V850 (using RH850 ABI). *} .#define bfd_mach_v850 1 @@ -417,6 +411,7 @@ .#define bfd_mach_iq10 2 . bfd_arch_bpf, {* Linux eBPF. *} .#define bfd_mach_bpf 1 +.#define bfd_mach_xbpf 2 . bfd_arch_epiphany, {* Adapteva EPIPHANY. *} .#define bfd_mach_epiphany16 1 .#define bfd_mach_epiphany32 2 @@ -506,10 +501,25 @@ . bfd_arch_xtensa, {* Tensilica's Xtensa cores. *} .#define bfd_mach_xtensa 1 . bfd_arch_z80, -.#define bfd_mach_z80strict 1 {* No undocumented opcodes. *} -.#define bfd_mach_z80 3 {* With ixl, ixh, iyl, and iyh. *} -.#define bfd_mach_z80full 7 {* All undocumented instructions. *} -.#define bfd_mach_r800 11 {* R800: successor with multiplication. *} +.{* Zilog Z80 without undocumented opcodes. *} +.#define bfd_mach_z80strict 1 +.{* Zilog Z180: successor with additional instructions, but without +. halves of ix and iy. *} +.#define bfd_mach_z180 2 +.{* Zilog Z80 with ixl, ixh, iyl, and iyh. *} +.#define bfd_mach_z80 3 +.{* Zilog eZ80 (successor of Z80 & Z180) in Z80 (16-bit address) mode. *} +.#define bfd_mach_ez80_z80 4 +.{* Zilog eZ80 (successor of Z80 & Z180) in ADL (24-bit address) mode. *} +.#define bfd_mach_ez80_adl 5 +.{* Z80N *} +.#define bfd_mach_z80n 6 +.{* Zilog Z80 with all undocumented instructions. *} +.#define bfd_mach_z80full 7 +.{* GameBoy Z80 (reduced instruction set). *} +.#define bfd_mach_gbz80 8 +.{* ASCII R800: successor with multiplication. *} +.#define bfd_mach_r800 11 . bfd_arch_lm32, {* Lattice Mico32. *} .#define bfd_mach_lm32 1 . bfd_arch_microblaze,{* Xilinx MicroBlaze. *} @@ -520,6 +530,7 @@ .#define bfd_mach_tilegx32 2 . bfd_arch_aarch64, {* AArch64. *} .#define bfd_mach_aarch64 0 +.#define bfd_mach_aarch64_8R 1 .#define bfd_mach_aarch64_ilp32 32 . bfd_arch_nios2, {* Nios II. *} .#define bfd_mach_nios2 0 @@ -543,6 +554,7 @@ .#define bfd_mach_ck803 5 .#define bfd_mach_ck807 6 .#define bfd_mach_ck810 7 +.#define bfd_mach_ck860 8 . bfd_arch_last . }; */ @@ -651,7 +663,6 @@ extern const bfd_arch_info_type bfd_or1k_arch; extern const bfd_arch_info_type bfd_pdp11_arch; extern const bfd_arch_info_type bfd_pj_arch; -extern const bfd_arch_info_type bfd_plugin_arch; extern const bfd_arch_info_type bfd_powerpc_archs[]; #define bfd_powerpc_arch bfd_powerpc_archs[0] extern const bfd_arch_info_type bfd_pru_arch; @@ -668,7 +679,6 @@ extern const bfd_arch_info_type bfd_tic4x_arch; extern const bfd_arch_info_type bfd_tic54x_arch; extern const bfd_arch_info_type bfd_tic6x_arch; -extern const bfd_arch_info_type bfd_tic80_arch; extern const bfd_arch_info_type bfd_tilegx_arch; extern const bfd_arch_info_type bfd_tilepro_arch; extern const bfd_arch_info_type bfd_v850_arch; @@ -756,7 +766,6 @@ &bfd_tic4x_arch, &bfd_tic54x_arch, &bfd_tic6x_arch, - &bfd_tic80_arch, &bfd_tilegx_arch, &bfd_tilepro_arch, &bfd_v850_arch, @@ -843,7 +852,7 @@ const char **name_ptr; const char **name_list; const bfd_arch_info_type * const *app; - bfd_size_type amt; + size_t amt; /* Determine the number of architectures. */ vec_length = 0; diff -Nru gdb-9.1/bfd/arc-plt.def gdb-10.2/bfd/arc-plt.def --- gdb-9.1/bfd/arc-plt.def 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/arc-plt.def 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Arc V2 Related PLT entries. - Copyright (C) 2016-2019 Free Software Foundation, Inc. + Copyright (C) 2016-2020 Free Software Foundation, Inc. Contributed by Cupertino Miranda (cmiranda@synopsys.com). This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/arc-plt.h gdb-10.2/bfd/arc-plt.h --- gdb-9.1/bfd/arc-plt.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/arc-plt.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* ARC-specific header file for PLT support. - Copyright (C) 2016-2019 Free Software Foundation, Inc. + Copyright (C) 2016-2020 Free Software Foundation, Inc. Contributed by Cupertino Miranda (cmiranda@synopsys.com). This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/bfd.c gdb-10.2/bfd/bfd.c --- gdb-9.1/bfd/bfd.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/bfd.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Generic BFD library interface and support routines. - Copyright (C) 1990-2019 Free Software Foundation, Inc. + Copyright (C) 1990-2020 Free Software Foundation, Inc. Written by Cygnus Support. This file is part of BFD, the Binary File Descriptor library. @@ -85,12 +85,6 @@ . {* A unique identifier of the BFD *} . unsigned int id; . -. {* The format which belongs to the BFD. (object, core, etc.) *} -. ENUM_BITFIELD (bfd_format) format : 3; -. -. {* The direction with which the BFD was opened. *} -. ENUM_BITFIELD (bfd_direction) direction : 2; -. . {* Format_specific flags. *} . flagword flags; . @@ -194,6 +188,12 @@ . | BFD_PLUGIN | BFD_TRADITIONAL_FORMAT | BFD_DETERMINISTIC_OUTPUT \ . | BFD_COMPRESS_GABI | BFD_CONVERT_ELF_COMMON | BFD_USE_ELF_STT_COMMON) . +. {* The format which belongs to the BFD. (object, core, etc.) *} +. ENUM_BITFIELD (bfd_format) format : 3; +. +. {* The direction with which the BFD was opened. *} +. ENUM_BITFIELD (bfd_direction) direction : 2; +. . {* Is the file descriptor being cached? That is, can it be closed as . needed, and re-opened when accessed later? *} . unsigned int cacheable : 1; @@ -245,13 +245,16 @@ . {* Set if this is a slim LTO object not loaded with a compiler plugin. *} . unsigned int lto_slim_object : 1; . +. {* Do not attempt to modify this file. Set when detecting errors +. that BFD is not prepared to handle for objcopy/strip. *} +. unsigned int read_only : 1; +. . {* Set to dummy BFD created when claimed by a compiler plug-in . library. *} . bfd *plugin_dummy_bfd; . -. {* Currently my_archive is tested before adding origin to -. anything. I believe that this can become always an add of -. origin, with origin set to 0 for non archive files. *} +. {* The offset of this bfd in the file, typically 0 if it is not +. contained in an archive. *} . ufile_ptr origin; . . {* The origin in the archive of the proxy entry. This will @@ -283,7 +286,7 @@ . . {* Symbol table for output BFD (with symcount entries). . Also used by the linker to cache input BFD symbols. *} -. struct bfd_symbol **outsymbols; +. struct bfd_symbol **outsymbols; . . {* Used for input and output. *} . unsigned int symcount; @@ -294,6 +297,11 @@ . {* Pointer to structure which contains architecture information. *} . const struct bfd_arch_info *arch_info; . +. {* Cached length of file for bfd_get_size. 0 until bfd_get_size is +. called, 1 if stat returns an error or the file size is too large to +. return in ufile_ptr. Both 0 and 1 should be treated as "unknown". *} +. ufile_ptr size; +. . {* Stuff only useful for archives. *} . void *arelt_data; . struct bfd *my_archive; {* The containing archive BFD. *} @@ -783,8 +791,8 @@ char *buf; const char *msg = bfd_errmsg (input_error); - if (asprintf (&buf, _(bfd_errmsgs [error_tag]), input_bfd->filename, msg) - != -1) + if (asprintf (&buf, _(bfd_errmsgs [error_tag]), + bfd_get_filename (input_bfd), msg) != -1) return buf; /* Ick, what to do on out of memory? */ @@ -1110,10 +1118,10 @@ else if (abfd->my_archive && !bfd_is_thin_archive (abfd->my_archive)) result = fprintf (stream, "%s(%s)", - abfd->my_archive->filename, - abfd->filename); + bfd_get_filename (abfd->my_archive), + bfd_get_filename (abfd)); else - result = fprintf (stream, "%s", abfd->filename); + result = fprintf (stream, "%s", bfd_get_filename (abfd)); } else PRINT_TYPE (void *, p); @@ -2058,7 +2066,8 @@ . BFD_SEND (abfd, _bfd_debug_info_accumulate, (abfd, section)) . .#define bfd_stat_arch_elt(abfd, stat) \ -. BFD_SEND (abfd, _bfd_stat_arch_elt,(abfd, stat)) +. BFD_SEND (abfd->my_archive ? abfd->my_archive : abfd, \ +. _bfd_stat_arch_elt, (abfd, stat)) . .#define bfd_update_armap_timestamp(abfd) \ . BFD_SEND (abfd, _bfd_update_armap_timestamp, (abfd)) @@ -2162,14 +2171,15 @@ bfd_boolean flags_valid, flagword flags, bfd_boolean at_valid, - bfd_vma at, + bfd_vma at, /* Bytes. */ bfd_boolean includes_filehdr, bfd_boolean includes_phdrs, unsigned int count, asection **secs) { struct elf_segment_map *m, **pm; - bfd_size_type amt; + size_t amt; + unsigned int opb = bfd_octets_per_byte (abfd, NULL); if (bfd_get_flavour (abfd) != bfd_target_elf_flavour) return TRUE; @@ -2182,7 +2192,7 @@ m->p_type = type; m->p_flags = flags; - m->p_paddr = at; + m->p_paddr = at * opb; m->p_flags_valid = flags_valid; m->p_paddr_valid = at_valid; m->includes_filehdr = includes_filehdr; @@ -2481,8 +2491,7 @@ res = cplus_demangle (name, options); - if (alloc != NULL) - free (alloc); + free (alloc); if (res == NULL) { @@ -2540,59 +2549,60 @@ bfd_update_compression_header (bfd *abfd, bfd_byte *contents, asection *sec) { - if ((abfd->flags & BFD_COMPRESS) != 0) + if ((abfd->flags & BFD_COMPRESS) == 0) + abort (); + + switch (bfd_get_flavour (abfd)) { - if (bfd_get_flavour (abfd) == bfd_target_elf_flavour) + case bfd_target_elf_flavour: + if ((abfd->flags & BFD_COMPRESS_GABI) != 0) { - if ((abfd->flags & BFD_COMPRESS_GABI) != 0) - { - const struct elf_backend_data *bed - = get_elf_backend_data (abfd); + const struct elf_backend_data *bed = get_elf_backend_data (abfd); + struct bfd_elf_section_data * esd = elf_section_data (sec); - /* Set the SHF_COMPRESSED bit. */ - elf_section_flags (sec) |= SHF_COMPRESSED; + /* Set the SHF_COMPRESSED bit. */ + elf_section_flags (sec) |= SHF_COMPRESSED; - if (bed->s->elfclass == ELFCLASS32) - { - Elf32_External_Chdr *echdr - = (Elf32_External_Chdr *) contents; - bfd_put_32 (abfd, ELFCOMPRESS_ZLIB, &echdr->ch_type); - bfd_put_32 (abfd, sec->size, &echdr->ch_size); - bfd_put_32 (abfd, 1 << sec->alignment_power, - &echdr->ch_addralign); - /* bfd_log2 (alignof (Elf32_Chdr)) */ - bfd_set_section_alignment (sec, 2); - } - else - { - Elf64_External_Chdr *echdr - = (Elf64_External_Chdr *) contents; - bfd_put_32 (abfd, ELFCOMPRESS_ZLIB, &echdr->ch_type); - bfd_put_32 (abfd, 0, &echdr->ch_reserved); - bfd_put_64 (abfd, sec->size, &echdr->ch_size); - bfd_put_64 (abfd, 1 << sec->alignment_power, - &echdr->ch_addralign); - /* bfd_log2 (alignof (Elf64_Chdr)) */ - bfd_set_section_alignment (sec, 3); - } + if (bed->s->elfclass == ELFCLASS32) + { + Elf32_External_Chdr *echdr = (Elf32_External_Chdr *) contents; + bfd_put_32 (abfd, ELFCOMPRESS_ZLIB, &echdr->ch_type); + bfd_put_32 (abfd, sec->size, &echdr->ch_size); + bfd_put_32 (abfd, 1 << sec->alignment_power, + &echdr->ch_addralign); + /* bfd_log2 (alignof (Elf32_Chdr)) */ + bfd_set_section_alignment (sec, 2); + esd->this_hdr.sh_addralign = 4; } else { - /* Clear the SHF_COMPRESSED bit. */ - elf_section_flags (sec) &= ~SHF_COMPRESSED; - - /* Write the zlib header. It should be "ZLIB" followed by - the uncompressed section size, 8 bytes in big-endian - order. */ - memcpy (contents, "ZLIB", 4); - bfd_putb64 (sec->size, contents + 4); - /* No way to keep the original alignment, just use 1 always. */ - bfd_set_section_alignment (sec, 0); + Elf64_External_Chdr *echdr = (Elf64_External_Chdr *) contents; + bfd_put_32 (abfd, ELFCOMPRESS_ZLIB, &echdr->ch_type); + bfd_put_32 (abfd, 0, &echdr->ch_reserved); + bfd_put_64 (abfd, sec->size, &echdr->ch_size); + bfd_put_64 (abfd, 1 << sec->alignment_power, + &echdr->ch_addralign); + /* bfd_log2 (alignof (Elf64_Chdr)) */ + bfd_set_section_alignment (sec, 3); + esd->this_hdr.sh_addralign = 8; } + break; } + + /* Clear the SHF_COMPRESSED bit. */ + elf_section_flags (sec) &= ~SHF_COMPRESSED; + /* Fall through. */ + + default: + /* Write the zlib header. It should be "ZLIB" followed by + the uncompressed section size, 8 bytes in big-endian + order. */ + memcpy (contents, "ZLIB", 4); + bfd_putb64 (sec->size, contents + 4); + /* No way to keep the original alignment, just use 1 always. */ + bfd_set_section_alignment (sec, 0); + break; } - else - abort (); } /* @@ -2770,7 +2780,7 @@ || bfd_get_flavour (obfd) != bfd_target_elf_flavour) return TRUE; - /* Do nothing if ELF classes of input and output are the same. */ + /* Do nothing if ELF classes of input and output are the same. */ if (get_elf_backend_data (ibfd)->s->elfclass == get_elf_backend_data (obfd)->s->elfclass) return TRUE; @@ -2784,11 +2794,17 @@ if ((ibfd->flags & BFD_DECOMPRESS)) return TRUE; - /* Do nothing if the input section isn't a SHF_COMPRESSED section. */ + /* Do nothing if the input section isn't a SHF_COMPRESSED section. */ ihdr_size = bfd_get_compression_header_size (ibfd, isec); if (ihdr_size == 0) return TRUE; + /* PR 25221. Check for corrupt input sections. */ + if (ihdr_size > bfd_get_section_limit (ibfd, isec)) + /* FIXME: Issue a warning about a corrupt + compression header size field ? */ + return FALSE; + contents = *ptr; /* Convert the contents of the input SHF_COMPRESSED section to @@ -2805,6 +2821,12 @@ use_memmove = FALSE; } + else if (ihdr_size != sizeof (Elf64_External_Chdr)) + { + /* FIXME: Issue a warning about a corrupt + compression header size field ? */ + return FALSE; + } else { Elf64_External_Chdr *echdr = (Elf64_External_Chdr *) contents; diff -Nru gdb-9.1/bfd/bfd-in2.h gdb-10.2/bfd/bfd-in2.h --- gdb-9.1/bfd/bfd-in2.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/bfd-in2.h 2021-04-25 04:06:26.000000000 +0000 @@ -7,7 +7,7 @@ /* Main header file for the bfd library -- portable access to object files. - Copyright (C) 1990-2019 Free Software Foundation, Inc. + Copyright (C) 1990-2020 Free Software Foundation, Inc. Contributed by Cygnus Support. @@ -643,7 +643,7 @@ char *bfd_follow_build_id_debuglink (bfd *abfd, const char *dir); -void bfd_set_filename (bfd *abfd, char *filename); +const char *bfd_set_filename (bfd *abfd, const char *filename); /* Extracted from libbfd.c. */ @@ -700,7 +700,7 @@ BFD_SEND (abfd, bfd_getx_signed_64, (ptr)) #define bfd_get(bits, abfd, ptr) \ - ((bits) == 8 ? (bfd_vma) bfd_get_8 (abfd, ptr) \ + ((bits) == 8 ? bfd_get_8 (abfd, ptr) \ : (bits) == 16 ? bfd_get_16 (abfd, ptr) \ : (bits) == 32 ? bfd_get_32 (abfd, ptr) \ : (bits) == 64 ? bfd_get_64 (abfd, ptr) \ @@ -795,6 +795,10 @@ /* A unique sequence number. */ unsigned int id; + /* A unique section number which can be used by assembler to + distinguish different sections with the same section name. */ + unsigned int section_id; + /* Which section in the bfd; 0..n-1 as sections are created in a bfd. */ unsigned int index; @@ -928,6 +932,10 @@ else up the line will take care of it later. */ #define SEC_LINKER_CREATED 0x100000 + /* This section contains a section ID to distinguish different + sections with the same section name. */ +#define SEC_ASSEMBLER_SECTION_ID 0x100000 + /* This section should not be subject to garbage collection. Also set to inform the linker that this section should not be listed in the link map as discarded. */ @@ -1177,11 +1185,17 @@ /* Early in the link process, map_head and map_tail are used to build a list of input sections attached to an output section. Later, output sections use these fields for a list of bfd_link_order - structs. */ + structs. The linked_to_symbol_name field is for ELF assembler + internal use. */ union { struct bfd_link_order *link_order; struct bfd_section *s; + const char *linked_to_symbol_name; } map_head, map_tail; + /* Points to the output section this section is already assigned to, if any. + This is used when support for non-contiguous memory regions is enabled. */ + struct bfd_section *already_assigned; + } asection; /* Relax table contains information about instructions which can @@ -1315,7 +1329,9 @@ static inline bfd_boolean bfd_is_const_section (const asection *sec) { - return sec >= bfd_abs_section_ptr && sec <= bfd_ind_section_ptr; + return (sec >= _bfd_std_section + && sec < _bfd_std_section + (sizeof (_bfd_std_section) + / sizeof (_bfd_std_section[0]))); } /* Return TRUE if input section SEC has been discarded. */ @@ -1329,41 +1345,42 @@ } #define BFD_FAKE_SECTION(SEC, SYM, NAME, IDX, FLAGS) \ - /* name, id, index, next, prev, flags, user_set_vma, */ \ - { NAME, IDX, 0, NULL, NULL, FLAGS, 0, \ + /* name, id, section_id, index, next, prev, flags, user_set_vma, */ \ + { NAME, IDX, 0, 0, NULL, NULL, FLAGS, 0, \ \ - /* linker_mark, linker_has_input, gc_mark, decompress_status, */ \ + /* linker_mark, linker_has_input, gc_mark, decompress_status, */ \ 0, 0, 1, 0, \ \ - /* segment_mark, sec_info_type, use_rela_p, */ \ + /* segment_mark, sec_info_type, use_rela_p, */ \ 0, 0, 0, \ \ - /* sec_flg0, sec_flg1, sec_flg2, sec_flg3, sec_flg4, sec_flg5, */ \ + /* sec_flg0, sec_flg1, sec_flg2, sec_flg3, sec_flg4, sec_flg5, */ \ 0, 0, 0, 0, 0, 0, \ \ - /* vma, lma, size, rawsize, compressed_size, relax, relax_count, */ \ + /* vma, lma, size, rawsize, compressed_size, relax, relax_count, */ \ 0, 0, 0, 0, 0, 0, 0, \ \ - /* output_offset, output_section, alignment_power, */ \ + /* output_offset, output_section, alignment_power, */ \ 0, &SEC, 0, \ \ - /* relocation, orelocation, reloc_count, filepos, rel_filepos, */ \ + /* relocation, orelocation, reloc_count, filepos, rel_filepos, */ \ NULL, NULL, 0, 0, 0, \ \ - /* line_filepos, userdata, contents, lineno, lineno_count, */ \ + /* line_filepos, userdata, contents, lineno, lineno_count, */ \ 0, NULL, NULL, NULL, 0, \ \ /* entsize, kept_section, moving_line_filepos, */ \ - 0, NULL, 0, \ + 0, NULL, 0, \ \ - /* target_index, used_by_bfd, constructor_chain, owner, */ \ + /* target_index, used_by_bfd, constructor_chain, owner, */ \ 0, NULL, NULL, NULL, \ \ - /* symbol, symbol_ptr_ptr, */ \ + /* symbol, symbol_ptr_ptr, */ \ (struct bfd_symbol *) SYM, &SEC.symbol, \ \ - /* map_head, map_tail */ \ - { NULL }, { NULL } \ + /* map_head, map_tail, already_assigned */ \ + { NULL }, { NULL }, NULL \ + \ } /* We use a macro to initialize the static asymbol structures because @@ -1594,10 +1611,6 @@ bfd_arch_k1om, /* Intel K1OM. */ #define bfd_mach_k1om (1 << 6) #define bfd_mach_k1om_intel_syntax (bfd_mach_k1om | bfd_mach_i386_intel_syntax) -#define bfd_mach_i386_nacl (1 << 7) -#define bfd_mach_i386_i386_nacl (bfd_mach_i386_i386 | bfd_mach_i386_nacl) -#define bfd_mach_x86_64_nacl (bfd_mach_x86_64 | bfd_mach_i386_nacl) -#define bfd_mach_x64_32_nacl (bfd_mach_x64_32 | bfd_mach_i386_nacl) bfd_arch_iamcu, /* Intel MCU. */ #define bfd_mach_iamcu (1 << 8) #define bfd_mach_i386_iamcu (bfd_mach_i386_i386 | bfd_mach_iamcu) @@ -1615,7 +1628,6 @@ #define bfd_mach_h8300sx 6 #define bfd_mach_h8300sxn 7 bfd_arch_pdp11, /* DEC PDP-11. */ - bfd_arch_plugin, bfd_arch_powerpc, /* PowerPC. */ #define bfd_mach_ppc 32 #define bfd_mach_ppc64 64 @@ -1738,7 +1750,6 @@ #define bfd_mach_tic4x 40 bfd_arch_tic54x, /* Texas Instruments TMS320C54X. */ bfd_arch_tic6x, /* Texas Instruments TMS320C6X. */ - bfd_arch_tic80, /* TI TMS320c80 (MVP). */ bfd_arch_v850, /* NEC V850. */ bfd_arch_v850_rh850,/* NEC V850 (using RH850 ABI). */ #define bfd_mach_v850 1 @@ -1800,6 +1811,7 @@ #define bfd_mach_iq10 2 bfd_arch_bpf, /* Linux eBPF. */ #define bfd_mach_bpf 1 +#define bfd_mach_xbpf 2 bfd_arch_epiphany, /* Adapteva EPIPHANY. */ #define bfd_mach_epiphany16 1 #define bfd_mach_epiphany32 2 @@ -1889,10 +1901,25 @@ bfd_arch_xtensa, /* Tensilica's Xtensa cores. */ #define bfd_mach_xtensa 1 bfd_arch_z80, -#define bfd_mach_z80strict 1 /* No undocumented opcodes. */ -#define bfd_mach_z80 3 /* With ixl, ixh, iyl, and iyh. */ -#define bfd_mach_z80full 7 /* All undocumented instructions. */ -#define bfd_mach_r800 11 /* R800: successor with multiplication. */ +/* Zilog Z80 without undocumented opcodes. */ +#define bfd_mach_z80strict 1 +/* Zilog Z180: successor with additional instructions, but without + halves of ix and iy. */ +#define bfd_mach_z180 2 +/* Zilog Z80 with ixl, ixh, iyl, and iyh. */ +#define bfd_mach_z80 3 +/* Zilog eZ80 (successor of Z80 & Z180) in Z80 (16-bit address) mode. */ +#define bfd_mach_ez80_z80 4 +/* Zilog eZ80 (successor of Z80 & Z180) in ADL (24-bit address) mode. */ +#define bfd_mach_ez80_adl 5 +/* Z80N */ +#define bfd_mach_z80n 6 +/* Zilog Z80 with all undocumented instructions. */ +#define bfd_mach_z80full 7 +/* GameBoy Z80 (reduced instruction set). */ +#define bfd_mach_gbz80 8 +/* ASCII R800: successor with multiplication. */ +#define bfd_mach_r800 11 bfd_arch_lm32, /* Lattice Mico32. */ #define bfd_mach_lm32 1 bfd_arch_microblaze,/* Xilinx MicroBlaze. */ @@ -1903,6 +1930,7 @@ #define bfd_mach_tilegx32 2 bfd_arch_aarch64, /* AArch64. */ #define bfd_mach_aarch64 0 +#define bfd_mach_aarch64_8R 1 #define bfd_mach_aarch64_ilp32 32 bfd_arch_nios2, /* Nios II. */ #define bfd_mach_nios2 0 @@ -1926,6 +1954,7 @@ #define bfd_mach_ck803 5 #define bfd_mach_ck807 6 #define bfd_mach_ck810 7 +#define bfd_mach_ck860 8 bfd_arch_last }; @@ -3015,10 +3044,10 @@ BFD_RELOC_PPC64_DTPREL16_HIGHESTA, BFD_RELOC_PPC64_TPREL34, BFD_RELOC_PPC64_DTPREL34, - BFD_RELOC_PPC64_GOT_TLSGD34, - BFD_RELOC_PPC64_GOT_TLSLD34, - BFD_RELOC_PPC64_GOT_TPREL34, - BFD_RELOC_PPC64_GOT_DTPREL34, + BFD_RELOC_PPC64_GOT_TLSGD_PCREL34, + BFD_RELOC_PPC64_GOT_TLSLD_PCREL34, + BFD_RELOC_PPC64_GOT_TPREL_PCREL34, + BFD_RELOC_PPC64_GOT_DTPREL_PCREL34, BFD_RELOC_PPC64_TLS_PCREL, /* IBM 370/390 relocations */ @@ -5085,6 +5114,8 @@ BFD_RELOC_MSP430_ABS_HI16, BFD_RELOC_MSP430_PREL31, BFD_RELOC_MSP430_SYM_DIFF, + BFD_RELOC_MSP430_SET_ULEB128, + BFD_RELOC_MSP430_SUB_ULEB128, /* Relocations used by the Altera Nios II core. */ BFD_RELOC_NIOS2_S16, @@ -5194,7 +5225,9 @@ PLT entries. Otherwise, this is just a generic 32-bit relocation. */ BFD_RELOC_XTENSA_PLT, -/* Xtensa relocations to mark the difference of two local symbols. +/* Xtensa relocations for backward compatibility. These have been replaced +by BFD_RELOC_XTENSA_PDIFF and BFD_RELOC_XTENSA_NDIFF. +Xtensa relocations to mark the difference of two local symbols. These are only needed to support linker relaxation and can be ignored when not relaxing. The field is set to the value of the difference assuming no relaxation. The relocation encodes the position of the @@ -5268,9 +5301,46 @@ BFD_RELOC_XTENSA_TLS_ARG, BFD_RELOC_XTENSA_TLS_CALL, +/* Xtensa relocations to mark the difference of two local symbols. +These are only needed to support linker relaxation and can be ignored +when not relaxing. The field is set to the value of the difference +assuming no relaxation. The relocation encodes the position of the +subtracted symbol so the linker can determine whether to adjust the field +value. PDIFF relocations are used for positive differences, NDIFF +relocations are used for negative differences. The difference value +is treated as unsigned with these relocation types, giving full +8/16 value ranges. */ + BFD_RELOC_XTENSA_PDIFF8, + BFD_RELOC_XTENSA_PDIFF16, + BFD_RELOC_XTENSA_PDIFF32, + BFD_RELOC_XTENSA_NDIFF8, + BFD_RELOC_XTENSA_NDIFF16, + BFD_RELOC_XTENSA_NDIFF32, + /* 8 bit signed offset in (ix+d) or (iy+d). */ BFD_RELOC_Z80_DISP8, +/* First 8 bits of multibyte (32, 24 or 16 bit) value. */ + BFD_RELOC_Z80_BYTE0, + +/* Second 8 bits of multibyte (32, 24 or 16 bit) value. */ + BFD_RELOC_Z80_BYTE1, + +/* Third 8 bits of multibyte (32 or 24 bit) value. */ + BFD_RELOC_Z80_BYTE2, + +/* Fourth 8 bits of multibyte (32 bit) value. */ + BFD_RELOC_Z80_BYTE3, + +/* Lowest 16 bits of multibyte (32 or 24 bit) value. */ + BFD_RELOC_Z80_WORD0, + +/* Highest 16 bits of multibyte (32 or 24 bit) value. */ + BFD_RELOC_Z80_WORD1, + +/* Like BFD_RELOC_16 but big-endian. */ + BFD_RELOC_Z80_16_BE, + /* DJNZ offset. */ BFD_RELOC_Z8K_DISP7, @@ -6453,12 +6523,6 @@ /* A unique identifier of the BFD */ unsigned int id; - /* The format which belongs to the BFD. (object, core, etc.) */ - ENUM_BITFIELD (bfd_format) format : 3; - - /* The direction with which the BFD was opened. */ - ENUM_BITFIELD (bfd_direction) direction : 2; - /* Format_specific flags. */ flagword flags; @@ -6562,6 +6626,12 @@ | BFD_PLUGIN | BFD_TRADITIONAL_FORMAT | BFD_DETERMINISTIC_OUTPUT \ | BFD_COMPRESS_GABI | BFD_CONVERT_ELF_COMMON | BFD_USE_ELF_STT_COMMON) + /* The format which belongs to the BFD. (object, core, etc.) */ + ENUM_BITFIELD (bfd_format) format : 3; + + /* The direction with which the BFD was opened. */ + ENUM_BITFIELD (bfd_direction) direction : 2; + /* Is the file descriptor being cached? That is, can it be closed as needed, and re-opened when accessed later? */ unsigned int cacheable : 1; @@ -6613,13 +6683,16 @@ /* Set if this is a slim LTO object not loaded with a compiler plugin. */ unsigned int lto_slim_object : 1; + /* Do not attempt to modify this file. Set when detecting errors + that BFD is not prepared to handle for objcopy/strip. */ + unsigned int read_only : 1; + /* Set to dummy BFD created when claimed by a compiler plug-in library. */ bfd *plugin_dummy_bfd; - /* Currently my_archive is tested before adding origin to - anything. I believe that this can become always an add of - origin, with origin set to 0 for non archive files. */ + /* The offset of this bfd in the file, typically 0 if it is not + contained in an archive. */ ufile_ptr origin; /* The origin in the archive of the proxy entry. This will @@ -6651,7 +6724,7 @@ /* Symbol table for output BFD (with symcount entries). Also used by the linker to cache input BFD symbols. */ - struct bfd_symbol **outsymbols; + struct bfd_symbol **outsymbols; /* Used for input and output. */ unsigned int symcount; @@ -6662,6 +6735,11 @@ /* Pointer to structure which contains architecture information. */ const struct bfd_arch_info *arch_info; + /* Cached length of file for bfd_get_size. 0 until bfd_get_size is + called, 1 if stat returns an error or the file size is too large to + return in ufile_ptr. Both 0 and 1 should be treated as "unknown". */ + ufile_ptr size; + /* Stuff only useful for archives. */ void *arelt_data; struct bfd *my_archive; /* The containing archive BFD. */ @@ -7072,7 +7150,8 @@ BFD_SEND (abfd, _bfd_debug_info_accumulate, (abfd, section)) #define bfd_stat_arch_elt(abfd, stat) \ - BFD_SEND (abfd, _bfd_stat_arch_elt,(abfd, stat)) + BFD_SEND (abfd->my_archive ? abfd->my_archive : abfd, \ + _bfd_stat_arch_elt, (abfd, stat)) #define bfd_update_armap_timestamp(abfd) \ BFD_SEND (abfd, _bfd_update_armap_timestamp, (abfd)) @@ -7245,6 +7324,8 @@ /* Forward declaration. */ typedef struct flag_info flag_info; +typedef void (*bfd_cleanup) (bfd *); + typedef struct bfd_target { /* Identifies the kind of target, e.g., SunOS4, Ultrix, etc. */ @@ -7309,9 +7390,9 @@ /* Format dependent routines: these are vectors of entry points within the target vector structure, one for each format to check. */ - /* Check the format of a file being read. Return a <> or zero. */ - const struct bfd_target * - (*_bfd_check_format[bfd_type_end]) (bfd *); + /* Check the format of a file being read. Return a <> on + success or zero on failure. */ + bfd_cleanup (*_bfd_check_format[bfd_type_end]) (bfd *); /* Set the format of a file being written. */ bfd_boolean (*_bfd_set_format[bfd_type_end]) (bfd *); @@ -7457,9 +7538,10 @@ #define bfd_get_symbol_info(b,p,e) \ BFD_SEND (b, _bfd_get_symbol_info, (b,p,e)) const char *(*_bfd_get_symbol_version_string) (bfd *, struct bfd_symbol *, + bfd_boolean, bfd_boolean *); -#define bfd_get_symbol_version_string(b,s,h) \ - BFD_SEND (b, _bfd_get_symbol_version_string, (b,s,h)) +#define bfd_get_symbol_version_string(b,s,p,h) \ + BFD_SEND (b, _bfd_get_symbol_version_string, (b,s,p,h)) bfd_boolean (*_bfd_is_local_label_name) (bfd *, const char *); bfd_boolean (*_bfd_is_target_special_symbol) (bfd *, asymbol *); alent * (*_get_lineno) (bfd *, struct bfd_symbol *); diff -Nru gdb-9.1/bfd/bfd-in.h gdb-10.2/bfd/bfd-in.h --- gdb-9.1/bfd/bfd-in.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/bfd-in.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Main header file for the bfd library -- portable access to object files. - Copyright (C) 1990-2019 Free Software Foundation, Inc. + Copyright (C) 1990-2020 Free Software Foundation, Inc. Contributed by Cygnus Support. diff -Nru gdb-9.1/bfd/bfdio.c gdb-10.2/bfd/bfdio.c --- gdb-9.1/bfd/bfdio.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/bfdio.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Low-level I/O routines for BFDs. - Copyright (C) 1990-2019 Free Software Foundation, Inc. + Copyright (C) 1990-2020 Free Software Foundation, Inc. Written by Cygnus Support. @@ -25,6 +25,10 @@ #include #include "bfd.h" #include "libbfd.h" +#include "aout/ar.h" +#if defined (_WIN32) +#include +#endif #ifndef S_IXUSR #define S_IXUSR 0100 /* Execute by owner. */ @@ -92,12 +96,7 @@ In fopen-vms.h, they are separated from the mode with a comma. Split here. */ vms_attr = strchr (modes, ','); - if (vms_attr == NULL) - { - /* No attributes. */ - return close_on_exec (fopen (filename, modes)); - } - else + if (vms_attr != NULL) { /* Attributes found. Split. */ size_t modes_len = strlen (modes) + 1; @@ -115,13 +114,38 @@ } return close_on_exec (fopen (filename, at[0], at[1], at[2])); } -#else /* !VMS */ -#if defined (HAVE_FOPEN64) + +#elif defined (_WIN32) + size_t filelen = strlen (filename) + 1; + + if (filelen > MAX_PATH - 1) + { + FILE * file; + char * fullpath = (char *) malloc (filelen + 8); + int i; + + /* Add a Microsoft recommended prefix that + will allow the extra-long path to work. */ + strcpy (fullpath, "\\\\?\\"); + strcat (fullpath, filename); + + /* Convert any UNIX style path separators into the DOS form. */ + for (i = 0; fullpath[i]; i++) + { + if (IS_UNIX_DIR_SEPARATOR (fullpath[i])) + fullpath[i] = '\\'; + } + + file = close_on_exec (fopen (fullpath, modes)); + free (fullpath); + return file; + } + +#elif defined (HAVE_FOPEN64) return close_on_exec (fopen64 (filename, modes)); -#else - return close_on_exec (fopen (filename, modes)); #endif -#endif /* !VMS */ + + return close_on_exec (fopen (filename, modes)); } /* @@ -186,6 +210,7 @@ offset += abfd->origin; abfd = abfd->my_archive; } + offset += abfd->origin; /* If this is an archive element, don't read past the end of this element. */ @@ -255,6 +280,7 @@ offset += abfd->origin; abfd = abfd->my_archive; } + offset += abfd->origin; if (abfd->iovec == NULL) return 0; @@ -315,6 +341,7 @@ offset += abfd->origin; abfd = abfd->my_archive; } + offset += abfd->origin; if (abfd->iovec == NULL) { @@ -415,17 +442,32 @@ of space for the 15 bazillon byte table it is about to read. This function at least allows us to answer the question, "is the size reasonable?". + + A return value of zero indicates the file size is unknown. */ ufile_ptr bfd_get_size (bfd *abfd) { - struct stat buf; - - if (bfd_stat (abfd, &buf) != 0) - return 0; - - return buf.st_size; + /* A size of 0 means we haven't yet called bfd_stat. A size of 1 + means we have a cached value of 0, ie. unknown. */ + if (abfd->size <= 1 || bfd_write_p (abfd)) + { + struct stat buf; + + if (abfd->size == 1 && !bfd_write_p (abfd)) + return 0; + + if (bfd_stat (abfd, &buf) != 0 + || buf.st_size == 0 + || buf.st_size - (ufile_ptr) buf.st_size != 0) + { + abfd->size = 1; + return 0; + } + abfd->size = buf.st_size; + } + return abfd->size; } /* @@ -445,11 +487,29 @@ ufile_ptr bfd_get_file_size (bfd *abfd) { + ufile_ptr file_size, archive_size = (ufile_ptr) -1; + if (abfd->my_archive != NULL && !bfd_is_thin_archive (abfd->my_archive)) - return arelt_size (abfd); + { + struct areltdata *adata = (struct areltdata *) abfd->arelt_data; + if (adata != NULL) + { + archive_size = adata->parsed_size; + /* If the archive is compressed we can't compare against + file size. */ + if (adata->arch_header != NULL + && memcmp (((struct ar_hdr *) adata->arch_header)->ar_fmag, + "Z\012", 2) == 0) + return archive_size; + abfd = abfd->my_archive; + } + } - return bfd_get_size (abfd); + file_size = bfd_get_size (abfd); + if (archive_size < file_size) + return archive_size; + return file_size; } /* @@ -479,6 +539,7 @@ offset += abfd->origin; abfd = abfd->my_archive; } + offset += abfd->origin; if (abfd->iovec == NULL) { @@ -606,8 +667,7 @@ { struct bfd_in_memory *bim = (struct bfd_in_memory *) abfd->iostream; - if (bim->buffer != NULL) - free (bim->buffer); + free (bim->buffer); free (bim); abfd->iostream = NULL; diff -Nru gdb-9.1/bfd/bfd.m4 gdb-10.2/bfd/bfd.m4 --- gdb-9.1/bfd/bfd.m4 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/bfd.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ dnl This file was derived from acinclude.m4. dnl -dnl Copyright (C) 2012-2019 Free Software Foundation, Inc. +dnl Copyright (C) 2012-2020 Free Software Foundation, Inc. dnl dnl This file is free software; you can redistribute it and/or modify dnl it under the terms of the GNU General Public License as published by @@ -17,15 +17,20 @@ dnl . dnl +dnl Check for sys/procfs.h, enforcing structured /proc on Solaris. + +AC_DEFUN([BFD_SYS_PROCFS_H], +[AC_DEFINE(_STRUCTURED_PROC, 1, [Use structured /proc on Solaris.]) + AC_CHECK_HEADERS(sys/procfs.h)]) + dnl Check for existence of a type $1 in sys/procfs.h AC_DEFUN([BFD_HAVE_SYS_PROCFS_TYPE], -[AC_MSG_CHECKING([for $1 in sys/procfs.h]) +[AC_REQUIRE([BFD_SYS_PROCFS_H]) + AC_MSG_CHECKING([for $1 in sys/procfs.h]) AC_CACHE_VAL(bfd_cv_have_sys_procfs_type_$1, [AC_TRY_COMPILE([ #define _SYSCALL32 -/* Needed for new procfs interface on sparc-solaris. */ -#define _STRUCTURED_PROC 1 #include ], [$1 avar], bfd_cv_have_sys_procfs_type_$1=yes, @@ -41,12 +46,11 @@ dnl Check for existence of member $2 in type $1 in sys/procfs.h AC_DEFUN([BFD_HAVE_SYS_PROCFS_TYPE_MEMBER], -[AC_MSG_CHECKING([for $1.$2 in sys/procfs.h]) +[AC_REQUIRE([BFD_SYS_PROCFS_H]) + AC_MSG_CHECKING([for $1.$2 in sys/procfs.h]) AC_CACHE_VAL(bfd_cv_have_sys_procfs_type_member_$1_$2, [AC_TRY_COMPILE([ #define _SYSCALL32 -/* Needed for new procfs interface on sparc-solaris. */ -#define _STRUCTURED_PROC 1 #include ], [$1 avar; void* aref = (void*) &avar.$2], bfd_cv_have_sys_procfs_type_member_$1_$2=yes, diff -Nru gdb-9.1/bfd/bfdwin.c gdb-10.2/bfd/bfdwin.c --- gdb-9.1/bfd/bfdwin.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/bfdwin.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Support for memory-mapped windows into a BFD. - Copyright (C) 1995-2019 Free Software Foundation, Inc. + Copyright (C) 1995-2020 Free Software Foundation, Inc. Written by Cygnus Support. This file is part of BFD, the Binary File Descriptor library. @@ -150,6 +150,7 @@ offset += abfd->origin; abfd = abfd->my_archive; } + offset += abfd->origin; /* Seek into the file, to ensure it is open if cacheable. */ if (abfd->iostream == NULL diff -Nru gdb-9.1/bfd/binary.c gdb-10.2/bfd/binary.c --- gdb-9.1/bfd/binary.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/binary.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD back-end for binary objects. - Copyright (C) 1994-2019 Free Software Foundation, Inc. + Copyright (C) 1994-2020 Free Software Foundation, Inc. Written by Ian Lance Taylor, Cygnus Support, This file is part of BFD, the Binary File Descriptor library. @@ -19,10 +19,10 @@ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ -/* This is a BFD backend which may be used to write binary objects. - It may only be used for output, not input. The intention is that - this may be used as an output format for objcopy in order to - generate raw binary data. +/* This is a BFD backend which may be used to read or write binary + objects. Historically, it was used as an output format for objcopy + in order to generate raw binary data, but is now used for other + purposes as well. This is very simple. The only complication is that the real data will start at some address X, and in some cases we will not want to @@ -53,7 +53,7 @@ was not defaulted. That is, it must be explicitly specified as being binary. */ -static const bfd_target * +static bfd_cleanup binary_object_p (bfd *abfd) { struct stat statbuf; @@ -86,7 +86,7 @@ abfd->tdata.any = (void *) sec; - return abfd->xvec; + return _bfd_no_cleanup; } #define binary_close_and_cleanup _bfd_generic_close_and_cleanup @@ -97,12 +97,12 @@ static bfd_boolean binary_get_section_contents (bfd *abfd, - asection *section ATTRIBUTE_UNUSED, + asection *section, void * location, file_ptr offset, bfd_size_type count) { - if (bfd_seek (abfd, offset, SEEK_SET) != 0 + if (bfd_seek (abfd, section->filepos + offset, SEEK_SET) != 0 || bfd_bread (location, count, abfd) != count) return FALSE; return TRUE; @@ -151,7 +151,7 @@ asection *sec = (asection *) abfd->tdata.any; asymbol *syms; unsigned int i; - bfd_size_type amt = BIN_SYMS * sizeof (asymbol); + size_t amt = BIN_SYMS * sizeof (asymbol); syms = (asymbol *) bfd_alloc (abfd, amt); if (syms == NULL) diff -Nru gdb-9.1/bfd/cache.c gdb-10.2/bfd/cache.c --- gdb-9.1/bfd/cache.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cache.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* BFD library -- caching of file descriptors. - Copyright (C) 1990-2019 Free Software Foundation, Inc. + Copyright (C) 1990-2020 Free Software Foundation, Inc. Hacked by Steve Chamberlain of Cygnus Support (steve@cygnus.com). @@ -592,15 +592,17 @@ { case read_direction: case no_direction: - abfd->iostream = _bfd_real_fopen (abfd->filename, FOPEN_RB); + abfd->iostream = _bfd_real_fopen (bfd_get_filename (abfd), FOPEN_RB); break; case both_direction: case write_direction: if (abfd->opened_once) { - abfd->iostream = _bfd_real_fopen (abfd->filename, FOPEN_RUB); + abfd->iostream = _bfd_real_fopen (bfd_get_filename (abfd), + FOPEN_RUB); if (abfd->iostream == NULL) - abfd->iostream = _bfd_real_fopen (abfd->filename, FOPEN_WUB); + abfd->iostream = _bfd_real_fopen (bfd_get_filename (abfd), + FOPEN_WUB); } else { @@ -627,10 +629,11 @@ the --info option. */ struct stat s; - if (stat (abfd->filename, &s) == 0 && s.st_size != 0) - unlink_if_ordinary (abfd->filename); + if (stat (bfd_get_filename (abfd), &s) == 0 && s.st_size != 0) + unlink_if_ordinary (bfd_get_filename (abfd)); #endif - abfd->iostream = _bfd_real_fopen (abfd->filename, FOPEN_WUB); + abfd->iostream = _bfd_real_fopen (bfd_get_filename (abfd), + FOPEN_WUB); abfd->opened_once = TRUE; } break; diff -Nru gdb-9.1/bfd/cf-i386lynx.c gdb-10.2/bfd/cf-i386lynx.c --- gdb-9.1/bfd/cf-i386lynx.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cf-i386lynx.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD back-end for Intel 386 COFF LynxOS files. - Copyright (C) 1993-2019 Free Software Foundation, Inc. + Copyright (C) 1993-2020 Free Software Foundation, Inc. Written by Cygnus Support. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/ChangeLog gdb-10.2/bfd/ChangeLog --- gdb-9.1/bfd/ChangeLog 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/ChangeLog 2021-04-25 04:06:26.000000000 +0000 @@ -1,3003 +1,4323 @@ -2019-12-11 Joel Brobecker +2020-09-13 Joel Brobecker * development.sh (development): Set to false. -2019-12-11 Alan Modra +2020-09-12 H.J. Lu - * elf32-rx.c (elf32_rx_relax_section): Avoid signed overflow. - * libaout.h (N_SET_INFO, N_SET_FLAGS): Likewise. - * netbsd.h (write_object_contents): Likewise. - * elf32-arm.c (bfd_elf32_arm_vfp11_erratum_scan): Likewise. - * libhppa.h (HPPA_R_CONSTANT): Don't signed extend with shifts. - (stm32l4xx_create_replacing_stub_vldm): Don't truncate high bits - with shifts. - * elf32-nds32.h (R_NDS32_RELAX_ENTRY_DISABLE_RELAX_FLAG): Define - using 1u shifted left. Ditto for other macros. - * mmo.c (LOP): Make unsigned. + PR ld/26391 + * elflink.c (elf_final_link_info): Add local_hash_table. + (local_hash_entry): New. + (local_hash_newfunc): Likewise. + (elf_link_output_symstrtab): Append ".COUNT" to duplicated local + symbols. + (bfd_elf_final_link): Initialize and free local_hash_table for + "-z unique-symbol". -2019-12-11 Alan Modra +2020-09-10 Siddhesh Poyarekar - * libbfd.c (bfd_get_8): Return a bfd_vma. - (bfd_get_signed_8): Return a bfd_signed_vma. - * bfd-in2.h: Regenerate. + * elfnn-aarch64.c (elfNN_aarch64_final_link_relocate): Revert + changes in 7e05773767820b441b23a16628b55c98cb1aef46. Set + error for undefined symbol in BFD_RELOC_AARCH64_BRANCH19 and + BFD_RELOC_AARCH64_TSTBR14 relocations. -2019-12-11 Alan Modra +2020-09-09 Nick Clifton - * xtensa-modules.c (Field_* functions): Don't mask using shifts. - (Operand_soffsetx4_decode, Operand_simm4_decode), - (Operand_simm8_decode, Operand_simm8x256_decode), - (Operand_simm12b_decode, Operand_label8_decode), - (Operand_label12_decode, Operand_soffset_decode), - (Operand_xt_wbr15_label_decode, Operand_xt_wbr18_label_decode): Don't - sign extend using shifts. - (Operand_immrx4_decode, Operand_uimm16x4_decode): Avoid UB in - constant. - -2019-12-11 Alan Modra - - * cpu-ia64-opc.c (ext_imms_scaled): Avoid undefined left shift - of negative values by using unsigned vars. - -2019-12-07 Alan Modra - - PR 25236 - * elflink.c (_bfd_elf_link_assign_sym_version): Assign versions - for ELF_COMMON_DEF_P symbols. - (elf_link_output_extsym, _bfd_elf_add_default_symbol): Adjust to - suit. - -2019-12-05 Sandra Loosemore - - Only give FDE encoding warnings if --eh-frame-hdr was specified. - - * elf-eh-frame.c (_bfd_elf_discard_section_eh_frame): Make - FDE encoding warning conditional. - -2019-12-05 Nick Clifton - - PR 25029 - * peXXigen.c (_bfd_XXi_swap_aouthdr_out): Ignore empty sections - when computing the sizes stored in the headers. - -2019-12-03 Alan Modra - - PR 25230 - * dwarf2.c (struct dwarf2_debug_file): Add line_table and - abbrev_offsets. - (struct abbrev_offset_entry): New. - (hash_abbrev, eq_abbrev, del_abbrev): New functions. - (read_abbrevs): Check whether we have already read abbrevs at - given offset, and add new offset/abbrev to hash table. - (decode_line_info): Keep line table at offset zero in file struct. - Return this for a cu reusing the same dir/file list. - (find_abstract_instance): Find cu for DW_FORM_GNU_ref_alt. - (_bfd_dwarf2_slurp_debug_info): Create offset/abbrev hash tables. - (_bfd_dwarf2_cleanup_debug_info): Adjust deletion of lines and - abbrevs. - -2019-12-03 Alan Modra - - PR 25230 - * dwarf2.c (struct dwarf2_debug_file): New struct. - (struct dwarf2_debug): Delete fields now in dwarf2_debug_file. - Add f, alt fields. - (struct comp_unit): Add file field. - (read_indirect_string, read_indirect_line_string): Adjust to suit. - (read_alt_indirect_string, read_alt_indirect_ref): Likewise. - (read_debug_ranges, find_abstract_instance, read_rangelist): Likewise. - (_bfd_dwarf2_stash_syms, place_sections): Likewise. - (stash_maybe_update_info_hash_tablse): Likewise. - (stash_verify_info_hash_table): Likewise. - (_bfd_dwarf2_slurp_debug_info): Likewise. - (_bfd_dwarf2_find_symbol_bias): Likewise. - (_bfd_dwarf2_find_nearest_line): Likewise. - (_bfd_dwarf2_cleanup_debug_info): Likewise. - (read_abbrevs): Add file param and adjust. Update calls. - (stash_comp_unit): Likewise. - (decode_line_info): Delete stash param and adjust. Update calls. - (comp_unit_find_nearest_line): Likewise. - (comp_unit_maybe_decode_line_info): Likewise. - (comp_unit_find_line): Likewise. - (parse_comp_unit): Add file and info_ptr param and adjust. Update - calls. - -2019-12-03 Alan Modra - - * dwarf2.c (read_indirect_string): Don't duplicate offset check - done in read_section. - (read_indirect_line_string): Likewise. - (read_alt_indirect_string): Likewise. - (read_alt_indirect_ref): Likewise. - (read_abbrevs): Likewise. Free memory on all failure paths. - Use correct unsigned type for pointer difference comparison. - -2019-12-03 Alan Modra - - * dwarf2.c (struct dwarf2_debug): Update comments. Remove sec - and sec_info_ptr. - (_bfd_dwarf2_slurp_debug_info): Don't set sec or sec_info_ptr. - (stash_comp_unit): Likewise. - (read_alt_indirect_ref): Return NULL not FALSE. - -2019-12-03 Alan Modra - - * dwarf2.c (_bfd_dwarf2_find_nearest_line): Correct function comment. - -2019-11-27 Alan Modra - - PR 23652 - * dwarf2.c (_bfd_dwarf2_stash_syms): Break out of loop on finding - matching section. - (_bfd_dwarf2_find_nearest_line): Return an int, with value 2 when - returning info from the symbol table. Do the _bfd_elf_find_function - search also when !found. Call _bfd_dwarf2_stash_syms regardless of - symbols. - * elf64-alpha.c (elf64_alpha_find_nearest_line): Accept dwarf2 - result of 1 only. - * elfxx-mips.c (_bfd_mips_elf_find_nearest_line): Likewise. - * libbfd-in.h (_bfd_dwarf2_find_nearest_line): Update prototype. - * libbfd.h: Regenerate. + * cofflink.c (coff_link_check_archive_element): Move the check for + coff type input to the start of the function. -2019-11-27 Alan Modra +2020-09-09 Alan Modra - PR 23652 - * dwarf2.c (_bfd_dwarf2_stash_syms): New function. - (_bfd_dwarf2_find_nearest_line): Use it here, passing syms to - _bfd_elf_find_function. Call _bfd_elf_find_function in cases - where _bfd_elf_find_nearest_line would do so. - * elf.c (_bfd_elf_find_nearest_line): Omit _bfd_elf_find_function - for dwarf2. - * elfxx-mips.c (_bfd_mips_elf_find_nearest_line): Similarly. Tidy. - * elf32-arm.c (elf32_arm_maybe_function_sym): New function. - (elf_backend_maybe_function_sym): Define. - (arm_elf_find_function, elf32_arm_find_nearest_line): Delete. - (bfd_elf32_find_nearest_line): Don't define. - * elfnn-aarch64.c (elfNN_aarch64_maybe_function_sym): New function. - (elf_backend_maybe_function_sym): Define. - (aarch64_elf_find_function, elfNN_aarch64_find_nearest_line): Delete. - (bfd_elfNN_find_nearest_line): Don't define. - -2019-11-27 Alan Modra - - * elf32-sh.c (sh_reloc): Use a bfd_vma insn. - (sh_reloc ): Divide calculated relocation value - by two before applying to insn. Correct overflow test. - * coff-sh.c (sh_reloc): Likewise. - -2019-11-26 Nick Clifton - - * elf32-sh.c (sh_elf_reloc): Use a signed_vma when checking for a - negative relocated value. - * coff-sh.c (sh_reloc): Likewise. - -2019-11-25 Alan Modra - - * archures.c (bfd_octets_per_byte): Tail call - bfd_arch_mach_octets_per_byte. - * coff-arm.c (OCTETS_PER_BYTE): Define. - (coff_arm_reloc): Introduce new "octets" temp. Use OCTETS_PER_BYTE - with section. Correct "addr". Remove ATTRIBUTE_UNUSED. - * coff-i386.c (coff_i386_reloc): Similarly. - * coff-mips.c (mips_reflo_reloc): Similarly. - * coff-x86_64.c (coff_amd64_reloc): Similarly. - * elf32-msp430.c (OCTETS_PER_BYTE): Define. - (rl78_sym_diff_handler): Use OCTETS_PER_BYTE, with section. - * elf32-nds32.c (nds32_elf_get_relocated_section_contents): Similarly. - * elf32-ppc.c (ppc_elf_addr16_ha_reloc): Similarly. - * elf32-pru.c (pru_elf32_do_ldi32_relocate): Similarly. - * elf32-s12z.c (opru18_reloc): Similarly. - * elf32-sh.c (sh_elf_reloc): Similarly. - * elf32-spu.c (spu_elf_rel9): Similarly. - * elf32-xtensa.c (bfd_elf_xtensa_reloc): Similarly. - * elf64-ppc.c (ppc64_elf_ha_reloc, ppc64_elf_brtaken_reloc), - (ppc64_elf_toc64_reloc): Similarly. - * bfd.c (bfd_get_section_limit): Pass section to bfd_octets_per_byte. - * cofflink.c (_bfd_coff_link_input_bfd), - (_bfd_coff_reloc_link_order): Likewise. - * elf.c (_bfd_elf_section_offset): Likewise. - * elflink.c (resolve_section, bfd_elf_perform_complex_relocation), - (elf_link_input_bfd, elf_reloc_link_order, elf_fixup_link_order), - (bfd_elf_final_link): Likewise. - * elf.c (_bfd_elf_make_section_from_shdr): Don't strncmp twice - to set SEC_ELF_OCTETS. - * reloc.c (bfd_perform_relocation): Tidy SEC_ELF_OCTETS special case. - (bfd_install_relocation): Likewise. - (_bfd_final_link_relocate): Don't recalculate octets. - * syms.c (_bfd_stab_section_find_nearest_line): Introduc new - "octets" temp. - * bfd-in2.h: Regenerate. + * libbfd-in.h (_bfd_write_unsigned_leb128): Declare. + * libbfd.h: Regenerate. -2019-11-25 Christian Eggers +2020-09-08 Jozef Lawrynowicz + Kuan-Lin Chen - * section.c (struct bfd_section): New flag SEC_ELF_OCTETS. - * archures.c (bfd_octets_per_byte): New parameter sec. - If section is not NULL and SEC_ELF_OCTETS is set, one octet es - returned [ELF targets only]. - * bfd.c (bfd_get_section_limit): Provide section parameter to - bfd_octets_per_byte. - * bfd-in2.h: regenerate. - * binary.c (binary_set_section_contents): Move call to - bfd_octets_per_byte into section loop. Provide section parameter - to bfd_octets_per_byte. - * coff-arm.c (coff_arm_reloc): Provide section parameter - to bfd_octets_per_byte. - * coff-i386.c (coff_i386_reloc): likewise. - * coff-mips.c (mips_reflo_reloc): likewise. - * coff-x86_64.c (coff_amd64_reloc): likewise. - * cofflink.c (_bfd_coff_link_input_bfd): likewise. - (_bfd_coff_reloc_link_order): likewise. - * elf.c (_bfd_elf_section_offset): likewise. - (_bfd_elf_make_section_from_shdr): likewise. - Set SEC_ELF_OCTETS for sections with names .gnu.build.attributes, - .debug*, .zdebug* and .note.gnu*. - * elf32-msp430.c (rl78_sym_diff_handler): Provide section parameter - to bfd_octets_per_byte. - * elf32-nds.c (nds32_elf_get_relocated_section_contents): likewise. - * elf32-ppc.c (ppc_elf_addr16_ha_reloc): likewise. - * elf32-pru.c (pru_elf32_do_ldi32_relocate): likewise. - * elf32-s12z.c (opru18_reloc): likewise. - * elf32-sh.c (sh_elf_reloc): likewise. - * elf32-spu.c (spu_elf_rel9): likewise. - * elf32-xtensa.c (bfd_elf_xtensa_reloc): likewise - * elf64-ppc.c (ppc64_elf_brtaken_reloc): likewise. - (ppc64_elf_addr16_ha_reloc): likewise. - (ppc64_elf_toc64_reloc): likewise. - * elflink.c (bfd_elf_final_link): likewise. - (bfd_elf_perform_complex_relocation): likewise. - (elf_fixup_link_order): likewise. - (elf_link_input_bfd): likewise. - (elf_link_sort_relocs): likewise. - (elf_reloc_link_order): likewise. - (resolve_section): likewise. - * linker.c (_bfd_generic_reloc_link_order): likewise. - (bfd_generic_define_common_symbol): likewise. - (default_data_link_order): likewise. - (default_indirect_link_order): likewise. - * srec.c (srec_set_section_contents): likewise. - (srec_write_section): likewise. - * syms.c (_bfd_stab_section_find_nearest_line): likewise. - * reloc.c (_bfd_final_link_relocate): likewise. - (bfd_generic_get_relocated_section_contents): likewise. - (bfd_install_relocation): likewise. - For section which have SEC_ELF_OCTETS set, multiply output_base - and output_offset with bfd_octets_per_byte. - (bfd_perform_relocation): likewise. - -2019-11-21 Alan Modra - - * elf32-arm.c (elf32_arm_size_stubs): Exclude dynamic library - BFDs that have not been loaded. - -2019-11-19 Alan Modra - - PR 25197 - * coffgen.c (coff_find_nearest_line_with_names): Check that C_FILE - u.syment.n_value does point at another C_FILE sym and not into - some auxent that happens to look like a C_FILE. Properly check - for integer overflow and avoid possible pointer wrap-around. - Simplify pr17512 checks. - -2019-11-19 Alan Modra - - PR 25200 - * reloc.c (bfd_default_reloc_type_lookup): Don't BFD_FAIL. - * elf.c (_bfd_elf_validate_reloc): Don't segfault on NULL howto. - -2019-11-18 Alan Modra - - * elf-bfd.h (struct elf_backend_data ): - Rename from elf_backend_post_process_headers. - (_bfd_elf_post_process_headers): Delete. - (_bfd_elf_init_file_header): Declare. - * elf.c (_bfd_elf_compute_section_file_positions): Call new function - in place of prep_headers and elf_backend_post_process_headers. - (_bfd_elf_init_file_header): Renamed from prep_headers with - updated args and made global. Delete dead code. - (_bfd_elf_post_process_headers): Delete. - * elf32-arm.c (elf32_arm_init_file_header): Rename from - elf32_arm_post_process_headers and call _bfd_elf_init_file_header. - Return status. - (elf_backend_init_file_header): Define. - (elf_backend_post_process_headers): Don't define. - * elf32-i386.c (elf_i386_fbsd_init_file_header): Similarly. - * elf32-m68hc1x.c (elf32_m68hc11_init_file_header): Similarly. - * elf32-metag.c (elf_metag_init_file_header): Similarly. - * elf32-spu.c (spu_elf_init_file_header - * elf32-visium.c (visium_elf_init_file_header - * elf64-alpha.c (elf64_alpha_fbsd_init_file_header - * elf64-hppa.c (elf64_hppa_init_file_header - * elf64-ia64-vms.c (elf64_vms_init_file_header - * elfnn-aarch64.c (elfNN_aarch64_init_file_header - * elfnn-ia64.c (elfNN_hpux_init_file_header - * elfxx-mips.c (_bfd_mips_init_file_header - * elfxx-mips.h (_bfd_mips_post_process_headers): Delete. - (_bfd_mips_init_file_header): Declare. - (elf_backend_post_process_headers): Delete. - (elf_backend_init_file_header): Define. - * elfxx-target.h (elf_backend_post_process_headers): Delete. - (elf_backend_init_file_header): Define and use. - * elf32-m68hc12.c (elf_backend_init_file_header): Define. - (elf_backend_post_process_headers): Don't define. - * elf32-m68hc1x.h (elf32_m68hc11_post_process_headers): Delete. - (elf32_m68hc11_init_file_header): Declare. - * elf32-ppc.c (elf_backend_post_process_headers): Remove - unnecessary undef. - -2019-11-18 Alan Modra - - * elf-bfd.h (struct elf_backend_data ): - Rename from elf_backend_modify_program_headers. - (_bfd_elf_modify_headers): Declare. - * elf.c (assign_file_positions_except_relocs): Set - elf_program_header_size. Always call elf_backend_modify_headers. - Extract code modifying file header.. - (_bfd_elf_modify_headers): ..to here. New function. - * elf32-arm.c (elf_backend_modify_headers): Renamed from - elf_backend_modify_program_headers. - * elf32-i386.c: Similarly. - * elf64-x86-64.c: Similarly. - * elfxx-target.h: Similarly. Default elf_backend_modify_headers - to _bfd_elf_modify_headers. - * elf-nacl.h (nacl_modify_headers): Rename from - nacl_modify_program_headers. - * elf-nacl.c (nacl_modify_headers): Rename from - nacl_modify_program_headers and call _bfd_elf_modify_headers. - * elf32-rx.c (elf32_rx_modify_headers): Similarly. - * elf32-spu.c (spu_elf_modify_headers): Similarly. - * elfnn-ia64.c (elfNN_ia64_modify_headers): Similarly. - * elf32-sh.c (elf_backend_modify_program_headers): Don't undef. - -2019-11-18 Alan Modra - - PR 25196 - * bfd.c (bfd_error_type): Add bfd_error_sorry. - (bfd_errmsgs): Likewise. - * elf.c (rewrite_elf_program_header): Don't abort on confused - lma/alignment. Replace bfd_error_bad_value with bfd_error_sorry. - (_bfd_elf_validate_reloc): Use bfd_error_sorry. - (_bfd_elf_final_write_processing): Likewise. - * bfd-in2.h: Regenerate. + * bfd-in2.h (bfd_reloc_code_real): Add + BFD_RELOC_MSP430_{SET,SUB}_ULEB128. + * elf32-msp430.c (msp430_elf_ignore_reloc): New. + (elf_msp430_howto_table): Add R_MSP430{,X}_GNU_{SET,SUB}_ULEB128. + (msp430_reloc_map): Add R_MSP430_GNU_{SET,SUB}_ULEB128. + (msp430x_reloc_map): Add R_MSP430X_GNU_{SET,SUB}_ULEB128. + (write_uleb128): New. + (msp430_final_link_relocate): Handle R_MSP430{,X}_GNU_{SET,SUB}_ULEB128. + * libbfd.c (_bfd_write_unsigned_leb128): New. + * libbfd.h (_bfd_write_unsigned_leb128): New prototype. + Add BFD_RELOC_MSP430_{SET,SUB}_ULEB128. + * reloc.c: Document BFD_RELOC_MSP430_{SET,SUB}_ULEB128. + +2020-09-08 Alex Coplan + + * archures.c (bfd_mach_aarch64_8R): New. + * bfd-in2.h: Regenerate. + * cpu-aarch64.c (bfd_aarch64_arch_v8_r): New. + (bfd_aarch64_arch_ilp32): Update tail pointer. + +2020-09-08 Alan Modra + + PR 13250 + PR 26580 + * elflink.c (_bfd_elf_merge_symbol): Make "override" a bfd**. + Return oldbfd in override when old common should override new + common. + (_bfd_elf_add_default_symbol): Adjust to suit. + (elf_link_add_object_symbols): Likewise. Pass "override" to + _bfd_generic_link_add_one_symbol. Save and restore common u.c.p + field for --as-needed shared libraries. Revert pr13250 changes. + +2020-09-08 Nick Clifton + + * plugin.c (bfd_plugin_canonicalize_symtab): Handle the case of an + unrecognized symbol type in a weak definition. + +2020-09-04 Alan Modra + + PR 26574 + * elfcode.h (elf_object_p): Sanity check section header offset. + * elf.c (_bfd_elf_slurp_secondary_reloc_section): Sanity check + sh_entsize. + +2020-09-04 Alan Modra + + PR 15146 + PR 26314 + PR 26530 + * elflink.c (elf_link_add_object_symbols): Do set def_regular + and ref_regular for IR symbols. Don't clear dynsym, allowing + IR symbols to load --as-needed shared libraries, but prevent + IR symbols from becoming dynamic. + +2020-09-03 Nick Clifton + + PR 26521 + * elf.c (_bfd_elf_write_secondary_reloc_section): Check for + secondary reloc sections with a zero sh_entsize field. -2019-11-12 Jim Wilson +2020-09-03 Nelson Chu - PR 25181 - * elfnn-riscv.c (_bfd_riscv_relax_call): Always add max_alignment to - foff. If sym_sec->output_section and sec->output_section are the same - and not *ABS* then set max_alignment to that section's alignment. - -2019-11-07 Alan Modra - - * cpu-cr16c.c: Delete. - * elf32-cr16c.c: Delete. - * Makefile.am, - * archures.c, - * config.bfd, - * configure.ac, - * reloc.c, - * targets.c: Remove cr16c support. - * Makefile.in, - * bfd-in2.h, - * configure, - * libbfd.h, - * po/SRC-POTFILES.in: Regenerate. + * elfnn-riscv.c (riscv_i_or_e_p): Minor cleanup for warnings/errors. + (riscv_merge_std_ext): Likewise. + (riscv_merge_arch_attr_info): Likewise. + (riscv_merge_attributes): Likewise and fix comment typos. -2019-11-05 Tim Rühsen +2020-09-03 Nelson Chu - * doc/chew.c (add_to_definition): Use correct type when - calculating size of array reallocation. - (nextword): Always initialise the word return parameter. - (compile): Check return value of nextword(). - -2019-10-30 Keith Seitz - - * elf-bfd.h (elf_backend_data) : - New field. - (_bfd_elf32_core_find_build_id, _bfd_elf64_core_find_build_id): - New functions. - (elf_read_notes): Add declaration. - * elf.c (elf_read_notes): Move elf-bfd.h. - (_bfd_elf_core_find_build_id): New function. - (bfd_section_from_phdr): Scan core file PT_LOAD segments for - build-id if none is known. - (elf_parse_notes): For core files, scan for notes. - * elfcore.h (elf_core_file_matches_executable_p): If both - BFDs have identical build-ids, then they match. - (_bfd_elf_core_find_build_id): New function. - * elfxx-target.h (elf_backend_core_find_build_id): Define. - (elfNN_bed): Add elf_backend_core_find_build_id. + * elfnn-riscv.c (riscv_version_mismatch): Change the return type + from void to bfd_boolean. Report warnings rather than errors + when the ISA versions are mis-matched. Afterwards, remember to + update the output ISA versions to the newest ones. + (riscv_merge_std_ext): Allow to link objects with different + standard ISA versions. Try to add output ISA versions to + merged_subsets first. + (riscv_merge_multi_letter_ext): Likewise. But for standard additional + ISA and non-standard ISA versions. -2019-10-29 Andrew Eikum +2020-09-03 Kito Cheng - * libcoff-in.h (struct pe_tdata): Add dos_message field. - * libcoff.h: Regenerate. - * peXXigen.c (_bfd_XXi_only_swap_filehdr_out): Copy the - dos_message field rather than initialising it. - (_bfd_XX_bfd_copy_private_bfd_data_common): Copy the dos_message - field. - * peicode.h (pe_mkobject): Initialise the dos_message field. - (pe_mkobject_hook): Copy the dos_message field. - (pe_bfd_object_p): Copy the dos_message field. - -2019-10-25 Alan Modra - - PR 4499 - * elf-nacl.c (nacl_modify_segment_map): Set no_sort_lma for all - PT_LOAD segments. - * elf32-spu.c (spu_elf_modify_segment_map): Likewise on overlay - PT_LOAD segments. - * elf.c (elf_sort_segments): New function. - (assign_file_positions_except_relocs): Use shortcuts to elfheader - and elf_tdata. Seek to e_phoff not sizeof_ehdr to write program - headers. Move PT_PHDR check.. - (assign_file_positions_for_non_load_sections): ..and code setting - PT_PHDR p_vaddr and p_paddr, and code setting __ehdr_start value.. - (assign_file_positions_for_load_sections): ..to here. Sort - PT_LOAD headers. Delete header_pad code. Use actual number of - headers rather than allocated in calculating size for program - headers. Don't assume program headers follow ELF file header. - Simplify pt_load_count code. Only set "off" for PT_LOAD or - PT_NOTE in cores. - (rewrite_elf_program_header): Set p_vaddr_offset for segments - that include file and program headers. - (copy_elf_program_header): Likewise, replacing header_size code. - -2019-10-21 Alan Modra - - PR 452 - * archive.c (normalize): Return file unchanged when - BFD_ARCHIVE_FULL_PATH. - (_bfd_construct_extended_name_table): Pass abfd, the output - bfd, to normalize. - (_bfd_archive_bsd44_construct_extended_name_table): Likewise. - * bfd.c (struct bfd): Make flags a full flagword. - (BFD_ARCHIVE_FULL_PATH): Define. - * bfd-in2.h: Regenerate. + * elfnn-riscv.c (riscv_merge_std_ext): Fix to report the correct + error message when the versions of extension are mis-matched. + * elfxx-riscv.c (riscv_parse_subset): Don't issue the error when + the string is empty. -2019-10-20 John David Anglin +2020-09-03 Alan Modra - * elf32-hppa.c (elf32_hppa_size_dynamic_sections): Provide 8-byte - minimum alignment for .plt section. + * xcofflink.c (xcoff_get_archive_info): Allocate xcoff_archive_info + on the output bfd objalloc memory. -2019-10-19 John David Anglin +2020-09-02 Alan Modra - * elf32-hppa.c: Revise import stub sequences. - (LONG_BRANCH_STUB_SIZE): Define. - (LONG_BRANCH_SHARED_STUB_SIZE): Define. - (IMPORT_STUB_SIZE): Define. - (IMPORT_SHARED_STUB_SIZE): Define. - (EXPORT_STUB_SIZE): Define. - (plt_stub): Revise to not use register %r22. - (LDO_R1_R22): Define. - (LDW_R22_R21): Define. - (LDW_R22_R19): Define. - (hppa_build_one_stub): Update stub generation and use new defines. - (hppa_size_one_stub): Likewise. + * elfnn-aarch64.c (elfNN_aarch64_relocate_section): Correct type + of constant shifted left. -2019-10-17 Nelson Chu +2020-09-02 Alan Modra - * elfnn-riscv.c (riscv_elf_relocate_section): Report the error message - that user should recompile their code with `fPIC` when linking non-pic - code into shared library. + * elf32-pru.c (pru_elf32_do_ldi32_relocate): Use an unsigned + type for "relocation". - * elfnn-riscv.c (riscv_elf_relocate_section): Use asprintf to extend - the error message if needed, and then store the result into the - `msg_buf`. Finally, remember to free the unused `msg_buf`. All error - message for the dangerous relocation should be set before we call the - callback function. If we miss the error message since linker runs out - of memory, we should set the default error message for the error. +2020-09-01 Alan Modra -2019-10-16 Alan Modra + * reloc.c (N_ONES): Handle N=0. + * elf32-arm.c (elf32_arm_howto_table_1): Set complain_overflow_dont + for R_ARM_TLS_DESCSEQ and R_ARM_THM_TLS_DESCSEQ. - PR 13616 - * cpu-powerpc.c (bfd_arch_ppc_nop_fill): New function, use it - for all ppc arch info. - * linker.c (default_data_link_order): Pass info->big_endian to - arch_info->fill function. +2020-09-01 Alan Modra -2019-10-15 Alan Modra + PR 26429 + * elf32-arm.c (elf32_arm_allocate_local_sym_info): Allocate arrays + in descending order of alignment. - * elf32-m68hc1x.c (reloc_warning): Add printf attribute. - (elf32_m68hc11_relocate_section): Don't use a variable for format - strings. Delete some unnecessary xgettext:c-format comments. +2020-09-01 Alan Modra -2019-10-15 Alan Modra + PR 26423 + * elf32-arm.c (calculate_group_reloc_mask): Use 3u in shift. - PR 24955 - * elf32-arm.c (set_cmse_veneer_addr_from_implib): Use bfd_malloc - rather than xmalloc. - * elf32-m68hc1x.c (reloc_warning): New function. - (elf32_m68hc11_relocate_section): Use it here. Cast bfd_vma values - corresponding to %lx in format strings. - * elf32-nds32.c (nds32_insertion_sort): Use a stack temporary. +2020-08-31 Alan Modra -2019-10-15 Alan Modra + PR 26493 + * elfnn-riscv.c (riscv_make_plt_header): Cast PLT_HEADER_SIZE to + unsigned when using with RISCV_ITYPE. + (_bfd_riscv_relax_call): Use an unsigned foff. - PR 25100 - * elf64-ppc.c (sfpr_define): Delete dead code that triggered a warning. +2020-08-31 Alan Modra -2019-10-15 Alan Modra + PR 26476 + PR 26477 + * elfxx-mips.c (CRINFO_CTYPE, CRINFO_RTYPE, CRINFO_DIST2TO), + (CRINFO_RELVADDR): Make unsigned. + (mips_elf_nullify_got_load): Use unsigned constant when shifting + into sign bit. - * bfd.c (bfd_check_compression_header): Check for powers of two - with x == (x & -x). +2020-08-31 Alan Modra -2019-10-14 Alan Modra + PR 26466 + * mep-relocs.pl (emit_apply): Handle HI16S adjustment. Use "u" + variable and rewrite signed overflow check. + * elf32-mep.c: Regenerate. + (mep_final_link_relocate): Delete "s". - * syms.c (struct indexentry): Add idx field. - (cmpindexentry): Final sort on idx. - (_bfd_stab_section_find_nearest_line): Set idx. +2020-08-31 Alan Modra -2019-10-14 Alan Modra + PR 26461 + * elfxx-ia64.c (ia64_elf_install_value): Make expressions unsigned + that might shift values into sign bit. - * dwarf2.c (struct lookup_funcinfo): Add idx field. - (compare_lookup_funcinfos): Perform final sort on idx. - (build_lookup_funcinfo_table): Set idx. - (compare_sequences): Perform final sort on num_lines. - (build_line_info_table): Set num_lines and line_info_lookup earlier. - (sort_line_sequences): Set num_lines for sort. +2020-08-31 Alan Modra -2019-10-14 Alan Modra + PR 26445 + * elf32-csky.c (csky_relocate_contents): Make relocation a bfd_vma, + and similarly for variables dealing with overflow. - * elflink.c (elf_sort_symbol): Sort on type and name as well. - (elf_link_add_object_symbols): Style fix. +2020-08-31 Alan Modra -2019-10-14 Alan Modra + PR 26442 + * elf32-crx.c (crx_elf_final_link_relocate): Calculate reloc_bits + without undefined behaviour. Tidy excess casts. - * elf.c (_bfd_elf_map_sections_to_segments): Init target_index - for sections about to be sorted. - (assign_file_positions_for_load_sections): Likewise. - (elf_sort_sections): Don't bother optimising both TOEND case. - * elflink.c (bfd_elf_final_link): Reset target_index. +2020-08-31 Alan Modra -2019-10-14 Alan Modra + * elf-m10300.c (mn10300_elf_relax_delete_bytes): Calculate + alignment from reloc addend after reloc type R_MN10300_ALIGN is + found. - * elflink.c (elf_get_linked_section_vma): Delete. - (compare_link_order): Use elf_linked_to_section and sort by lma, - size, and id. - (elf_fixup_link_order): Use size_t variables where appropriate. - Make use of elf_linked_to_section. Formatting. Properly align - sections. +2020-08-30 Alan Modra -2019-10-14 Alan Modra + PR 26435 + PR 26436 + * elf32-cr16.c (cr16_elf_final_link_relocate): Calculate reloc_bits + without undefined behaviour. - * elf-strtab.c (strrevcmp): Comment. - * merge.c (strrevcmp): Likewise. - * elf64-ppc.c (compare_symbols): Correct final pointer comparison. - Comment on why comparing pointers ensures a stable sort. - * elflink.c (struct elf_symbol): Add void* to union. - (elf_sort_elf_symbol): Ensure a stable sort with pointer comparison. - (elf_sym_name_compare): Likewise. - (bfd_elf_match_symbols_in_sections): Style fix. - (elf_link_sort_cmp1): Comment. - -2019-10-14 Alan Modra - - PR 24955 - * elflink.c (elf_output_implib): Don't use xmalloc. Don't ignore - return value of bfd_alloc2. - * peXXigen.c (_bfd_XXi_write_codeview_record): Don't use xmalloc. - * pef.c (bfd_pef_print_symbol): Likewise. Don't ignore return - value of bfd_get_section_contents. - * som.c (som_write_space_strings): Don't use xmalloc. - (som_write_symbol_strings): Likewise. - -2019-10-11 Max Filippov - - * dwarf2.c (stash_maybe_enable_info_hash_tables): Only set - stash->info_hash_status = STASH_INFO_HASH_ON when - stash_maybe_update_info_hash_tables succeeds. - -2019-10-09 Alan Modra - - PR 25070 - * dwarf2.c (_bfd_dwarf2_slurp_debug_info): Catch overflow of - total_size calculation. - -2019-10-08 Alan Modra - - PR 25078 - * dwarf2.c (find_abstract_instance): Delete orig_info_ptr, add - recur_count. Error on recur_count reaching 100 rather than - info_ptr matching orig_info_ptr. Adjust calls. - -2019-10-07 Jozef Lawrynowicz - - * elf32-msp430.c (elf32_msp430_merge_mspabi_attributes): Rename to.. - (elf32_msp430_merge_msp430_attributes): Add support for merging - the GNU object attribute for data region. - -2019-10-07 Alan Modra - - * elf64-ppc.c (ppc64_elf_size_dynamic_sections): Do allocate - space for local got non-tls relocs when PIE. - -2019-10-07 Alan Modra - - * elflink.c (elf_fixup_link_order): Don't attempt to find - an elf_section for linker created bfd sections. - -2019-10-07 Alan Modra - - * elf32-ppc.c (ppc_elf_tls_optimize): Don't process R_PPC_TLSLD - with non-local symbol. Don't double count __tls_get_addr calls - with marker relocs. - * elf64-ppc.c (ppc64_elf_tls_optimize): Likewise. - -2019-10-07 Alan Modra - - * elf32-ppc.c (nomark_tls_get_addr): Rename from has_tls_get_addr_call - throughout. - * elf64-ppc.c (nomark_tls_get_addr): Likewise. - -2019-10-04 Alan Modra - - * elf64-ppc.c (ppc64_elf_check_relocs): Move initialisation of vars. - (ppc64_elf_tls_optimize): Correct is_local condition. - (allocate_got): Don't reserve dynamic relocations for any of the - tls got relocs in PIEs when the symbol is local. - (allocate_dynrelocs): Correct validity test for local sym using - tlsld_got slot. - (ppc64_elf_size_dynamic_sections): Don't reserve dynamic relocations - for any of the tls got relocs in PIEs. - (ppc64_elf_layout_multitoc): Likewise. - (ppc64_elf_relocate_section): Correct validity test for local sym - using tlsld_got slot. Don't emit dynamic relocations for any of - the tls got relocs in PIEs when the symbol is local. - * elf32-ppc.c (ppc_elf_tls_optimize): Correct is_local condition. - (got_relocs_needed): Delete. - (allocate_dynrelocs): Correct validity test for local sym using - tlsld_got slot. Don't reserve dynamic relocations for any of the - tls got relocs in PIEs when the symbol is local. - (ppc_elf_size_dynamic_sections): Don't reserve dynamic relocations - for any of the tls got relocs in PIEs. - (ppc_elf_relocate_section): Correct validity test for local sym - using tlsld_got slot. Don't emit dynamic relocations for any of - the tls got relocs in PIEs when the symbol is local. - -2019-10-04 Szabolcs Nagy - - PR ld/22263 - PR ld/25056 - * elf32-arm.c (elf32_arm_tls_transition): Use bfd_link_dll instead of - bfd_link_pic for TLS checks. - (elf32_arm_final_link_relocate): Likewise. - (allocate_dynrelocs_for_symbol): Likewise. +2020-08-29 Nick Clifton -2019-10-04 Szabolcs Nagy + PR 26520 + * dwarf2.c (scan_unit_for_symbols): Add member entries to the + variable table. - PR ld/25062 - * elf32-arm.c (elf32_arm_final_link_relocate): Sign extend data. +2020-08-29 Alan Modra -2019-09-30 Nick Alcock + PR 26459 + * elfnn-ia64.c (get_dyn_sym_info): Don't bsearch or look at last + element when count is zero. bfd_realloc when shrinking. - * elf-bfd.h (bfd_section_is_ctf): New inline function. - * elf.c (special_sections_c): Add ".ctf". - (assign_file_positions_for_non_load_sections): Note that - compressed debugging sections etc are not assigned here. Treat - CTF sections like SEC_ELF_COMPRESS sections when is_linker_output: - sh_offset -1. - (assign_file_positions_except_relocs): Likewise. - (find_section_in_list): Note that debugging and CTF sections, as - well as reloc sections, are assigned later. - (_bfd_elf_assign_file_positions_for_non_load): CTF sections get - their size and contents updated. - (_bfd_elf_set_section_contents): Skip CTF sections: unlike - compressed sections, they have no uncompressed content to copy at - this stage. - * elflink.c (elf_link_swap_symbols_out): Call the examine_strtab - callback right before the strtab is written out. - (bfd_elf_final_link): Don't cache the section contents of CTF - sections: they are not populated yet. Call the emit_ctf callback - right at the end, after all the symbols and strings are flushed - out. - -2019-07-13 Nick Alcock - - * elf-strtab.c (_bfd_elf_strtab_len): New. - (_bfd_elf_strtab_str): Likewise. - * bfd-elf.h: Declare them. - -2019-07-13 Nick Alcock - - * elf-bfd.h (bfd_elf_get_str_section): Add. - * elf.c (bfd_elf_get_str_section): No longer static. - -2019-09-26 Alan Modra - - PR 24262 - * Makefile.am (AM_CPPFLAGS): Add -DLIBDIR. - * plugin.c (load_plugin): Search both ${libdir}/bfd-plugins and - ${bindir}/../lib/bfd-plugins if different. - * Makefile.in: Regenerate. +2020-08-28 Alan Modra -2019-09-23 Alan Modra + PR 26418 + * ecofflink.c (bfd_ecoff_write_accumulated_debug): Don't write + zero size buffers. - * elf64-ppc.c (ppc64_elf_check_relocs): Use bfd_link_executable - in choosing between different actions for shared library and - non-shared library cases. Delete ELIMINATE_COPY_RELOCS test. - (dec_dynrel_count): Likewise. Account for ifunc special case. - (ppc64_elf_adjust_dynamic_symbol): Copy relocs are for executables, - not non-pic. - (allocate_dynrelocs): Comment fixes. Delete ELIMINATE_COPY_RELOCS - test. +2020-08-28 Alan Modra -2019-09-23 Alan Modra + PR 26418 + * ecofflink.c (WRITE): Really don't write zero size chunks. - * Makefile.am (SOURCE_HFILES): Add many missing .h files. - * Makefile.in: Regenerate. - * po/SRC-POTFILES.in: Regenerate. +2020-08-28 Tuckker -2019-09-23 Alan Modra + PR 26543 + * linker.c (bfd_generic_define_common_symbol): Force the alignment + to 1 if the section has now alignment requirement. - * bfd-in.h (bfd_symbol, bfd_section_already_linked), - (bfd_elf_version_tree): Delete forward declarations. - Move other forward decls and remaining elf function decl later. - (bfd_section_already_linked_table_init), - (bfd_section_already_linked_table_free), - (_bfd_handle_already_linked, _bfd_nearby_section), - (_bfd_fix_excluded_sec_syms): Move to bfdlink.h. - -2019-09-23 Alan Modra - - * bfd-in.h: Move ecoff function declarations.. - * ecoff-bfd.h: ..to here, new file. - * ecoff.c: Include ecoff-bfd.h. - * ecofflink.c: Likewise. - * elf64-alpha.c: Likewise. - * elfxx-mips.c: Likewise. - * bfd-in2.h: Regenerate. +2020-08-28 Cooper Qu -2019-09-23 Alan Modra + * elf32-csky.c (csky_archs): Fix arch names. + (csky_find_arch_with_name): New. + (elf32_csky_merge_attributes): New. + (csky_elf_merge_private_bfd_data): Add process of merge + attribute section. + (elf32_csky_obj_attrs_arg_type): New. + (elf32_csky_obj_attrs_handle_unknown): New. + (elf_backend_obj_attrs_vendor): Define. + (elf_backend_obj_attrs_section): Define. + (elf_backend_obj_attrs_arg_type): Define. + (elf_backend_obj_attrs_section_type): Define. + +2020-08-28 Nick Clifton + + PR19011 + * cofflink.c (_bfd_coff_generic_relocate_section): Provide a value + for undefined symbols which will not generate extra warning + messages about truncated relocs. + +2020-08-28 Nelson Chu + + * elfnn-riscv.c (riscv_elf_check_relocs): Treat R_RISCV_CALL + and R_RISCV_CALL_PLT as the same in the riscv_elf_check_relocs. + (riscv_elf_relocate_section): Remove the R_RISCV_CALL for the + unresolved reloc checks. + +2020-08-27 John David Anglin + + PR 26356 + * som.c (som_bfd_copy_private_section_data): Issue error when a + subspace is specified without its containing space. + +2020-08-27 Alan Modra + + PR 26469 + * elflink.c: Include limits.h. + (CHAR_BIT): Provide fallback define. + (set_symbol_value): Correct complex reloc comment. + (undefined_reference): Set bfd_error. + (BINARY_OP_HEAD, BINARY_OP_TAIL): Split out from.. + (BINARY_OP): ..this. + (eval_symbol): Limit shifts. Force unsigned for left shift. + Catch divide by zero. + * configure.ac (AC_CHECK_HEADERS): Combine, sort and add limits.h. + * configure: Regenerate. + * config.in: Regenerate. - * bfd-in.h (enum notice_asneeded_action): Move to bfdlink.h. - Move most other elf declarations.. - * elf-bfd.h: ..to here. - * bfd-in2.h: Regenerate. +2020-08-27 Alan Modra -2019-09-23 Alan Modra + PR 26462 + * reloc.c (bfd_check_overflow): Return early if zero bitsize. - * bfd-in.h: Move m68k function declaration.. - * cpu-m68k.h: ..to here, new file.. - * elf32-m68k.h: ..and here, new file. - * elf32-m68k.c: Include cpu-m68k.h and elf32-m68k.h. - * bfd-in2.h: Regenerate. +2020-08-27 Alan Modra -2019-09-23 Alan Modra + * elf32-arm.c (elf32_arm_final_link_relocate): Don't segfault + on sym_sec not being output. - * bfd-in.h: Move bfin function declaration.. - * elf32-bfin.h: ..to here, new file. - * elf32-bfin.c: Include elf32-bfin.h. - * bfd-in2.h: Regenerate. +2020-08-27 Alan Modra -2019-09-23 Alan Modra + PR 26416 + * elf64-alpha.c (elf64_alpha_relax_tls_get_addr): Correct "dynamic". - * bfd-in.h: Move cr16 function declaration.. - * elf32-cr16.h: ..to here, new file. - * elf32-cr16.c: Include elf32-cr16.h. - * bfd-in2.h: Regenerate. +2020-08-26 Nick Clifton -2019-09-23 Alan Modra + PR 26433 + * elf32-avr.c (avr_final_link_relocate): Fix undefined shift + behaviour. + (avr_elf32_load_records_from_section): Use bfd_get_16 and + bfd_get_32 to load values from potentially unaligned pointers. - * bfd-in.h (bfd_sunos_get_needed_list), - (bfd_sunos_record_link_assignment), - (bfd_sunos_size_dynamic_sections), - (bfd_i386linux_size_dynamic_sections), - (bfd_sparclinux_size_dynamic_sections): Delete obsolete decls. - * bfd-in2.h: Regenerate. + PR 26416 + * elf64-alpha.c (elf64_alpha_relax_tls_get_addr): Test for and + ignore local symbols. + (elf64_alpha_relax_got_load): Do not check for local dynamic + symbols. + (OP_LDA, OP_LDAH, OP_LDQ, OP_BR, OP_BSR): Use unsigned constant + values. + (INSN_A) Cast the A parameter to unsigned. + (INSN_AB): Define in terms of INSN_A. + (INSN_ABC): Likewise. + (INSN_ABO): Likewise. + (INSN_AD): Likewise. + + PR 26411 + * elfnn-aarch64.c (elfNN_aarch64_relocate_section): Use an + unsigned long constant when creating a mask to test for alignment + issues. + +2020-08-26 Alan Modra + + PR 26507 + * elf32-xtensa.c (find_removed_literal): Don't bsearch empty map. + +2020-08-26 Alan Modra + + PR 26506 + * elf32-xtensa.c (elf_xtensa_combine_prop_entries): Return early + when section is empty. + +2020-08-26 Alan Modra + + PR 26498 + * elf32-spu.c (find_function_stack_adjust): Use unsigned vars to + avoid UB left shift. + +2020-08-26 Alan Modra + + PR 26484 + PR 26485 + PR 26486 + PR 26487 + PR 26488 + PR 26490 + * elf64-ppc.c (is_tls_get_addr): Avoid UB &h->elf when h is NULL. + (ppc64_elf_tls_setup): Likewise. + (branch_reloc_hash_match): Likewise. + (build_plt_stub): Likewise. + (ppc64_elf_relocate_section): Likewise. -2019-09-23 Alan Modra +2020-08-26 Alan Modra - * bfd-in.h: Move xcoff function declarations.. - * xcofflink.h: ..to here, new file. - * xcofflink.c: Include xcofflink.h. - * coff-rs6000.c (bfd_xcoff_ar_archive_set_magic): Delete unused func. - * bfd-in2.h: Regenerate. + PR 26478 + * mmo.c (mmo_write_symbols_and_terminator): Don't memcpy empty table. -2019-09-23 Alan Modra +2020-08-26 Alan Modra - * bfd-in.h: Delete coff forward refs and move coff declaration.. - * coff-bfd.h: ..to here. - * bfd-in2.h: Regenerate. + PR 26475 + * elfxx-mips.c (_bfd_mips_elf_finish_dynamic_sections): Check + sstubs->contents != NULL. -2019-09-23 Alan Modra +2020-08-26 Alan Modra - * bfd-in.h: Move arm declaraions.. - * cpu-arm.h: ..to here, new file.. - * coff-arm.h: ..and here, new file.. - * elf32-arm.h: ..and here, new file. - * cpu-arm.c: Include cpu-arm.h. - * coff-arm.c: Include cpu-arm.h and coff-arm.h. - * elf32-arm.c: Include cpu-arm.h and elf32-arm.h. - * pe-arm.c: Move function rename defines later. - * pe-arm-wince.c: Likewise and include sysdep.h and bfd.h early. - * bfd-in2.h: Regenerate. + PR 26453 + * som.c (som_prep_for_fixups): Return early when no symbols. -2019-09-23 Alan Modra +2020-08-26 Alan Modra - * bfd-in.h: Move tic6x function declaration.. - * elf32-tic6x.h: ..to here. - * bfd-in2.h: Regenerate. + PR 26418 + * ecofflink.c (WRITE): Don't write size 0 chunks. -2019-09-23 Alan Modra +2020-08-26 Alan Modra - * bfd-in.h: Move aarch64 declarations and defines.. - * cpu-aarch64.h: ..to here, new file.. - * elfxx-aarch64.h: ..and here. - * cpu-aarch64.c: Include cpu-aarch64.h. - * elfnn-aarch64.c: Likewise. - * bfd-in2.h: Regenerate. + * bfdio.c (bfd_get_file_size): Don't segv on NULL adata. -2019-09-23 Alan Modra +2020-08-26 Alan Modra - * bfd-in.h: Delete ticoff function declarations. - * coff-tic54x.c (bfd_ticoff_set_section_load_page), - (bfd_ticoff_get_section_load_page): Make static. - * bfd-in2.h: Regenerate. + PR 26415 + * vms-misc.c (vms_time_t_to_vms_time): Don't use unsigned short vars. -2019-09-23 Alan Modra +2020-08-26 David Faust - * bfd-in.h: Move h8300 function declaration to.. - * cpu-h8300.h: ..here, new file. - * cpu-h8300.c: Include cpu-h8300.h. - * elf32-h8300.c: Likewise. + * archures.c (bfd_mach_xbpf): Define. * bfd-in2.h: Regenerate. + * cpu-bpf.c (bfd_xbpf_arch) New. + (bfd_bpf_arch) Update next in list field to point to xbpf arch. -2019-09-23 Alan Modra +2020-08-26 Alan Modra - * bfd-in.h: Move ia64 function declarations.. - * elfxx-ia64.h: ..to here. - * bfd-in2.h: Regenerate. + * archures.c (bfd_mach_ck860): Define. -2019-09-23 Alan Modra +2020-08-25 Mark Wielaard - * bfd-in.h: Move v850 function declarations.. - * elf32-v850.h: ..to here, new file. - * elf32-v850.c: Include elf32-v850.h. - * bfd-in2.h: Regenerate. + * dwarf2.c (struct dwarf2_debug_file): Add dwarf_rnglists_buffer + and dwarf_rnglists_size fields. + (dwarf_debug_sections): Add debug_rnglists. + (dwarf_debug_section_enum): Likewise. + (read_debug_rnglists): New function. + (read_rangelist): New function to call either read_ranges or + read_rnglists. Rename original function to... + (read_ranges): ...this. + (read_rnglists): New function. -2019-09-23 Alan Modra +2020-08-25 Alan Modra - * bfd-in.h: Move mips function declaration to.. - * elfxx-mips.h: ..here. - * bfd-in2.h: Regenerate. + PR 26505 + * elf32-xstormy16.c (xstormy16_elf_relax_section): Check + is_elf_hash_table before accessing elf fields. -2019-09-23 Alan Modra +2020-08-25 Alan Modra - * bfd-in.h: Move csky function declarations to.. - * elf32-csky.h: ..here, new file. - * elf32-csky.c: Include elf32-csky.h. - * bfd-in2.h: Regenerate. + PR 26482 + * coff-rs6000.c (_bfd_xcoff_sizeof_headers): Ignore sections that + won't be output. -2019-09-20 Nelson Chu +2020-08-25 Alan Modra - * elfnn-riscv.c (riscv_pcgp_hi_reloc): Add new field undefined_weak. - (riscv_record_pcgp_hi_reloc): New parameter undefined_weak. - Set undefined_weak field from it. - (relax_func_t): New parameter undefined_weak. - (_bfd_riscv_relax_call): New ignored parameter undefined_weak. - (_bfd_riscv_relax_tls_le): Likewise. - (_bfd_riscv_relax_align): Likewise. - (_bfd_riscv_relax_delete): Likewise. - (_bfd_riscv_relax_lui): New parameter undefined_weak. If true, - allow relaxing. For LO12* relocs, set rs1 to x0 when undefined_weak. - (_bfd_riscv_relax_pc): New parameter undefined_weak. For LO12* relocs, - set undefined_weak from hi_reloc. If true, allow relaxing. For LO12* - relocs, set rs1 to x0 when undefined_weak and change to non-pcrel - reloc. - (_bfd_riscv_relax_section): New local undefined_weak. Set for - undef weak relocs that can be relaxed. Pass to relax_func call. - -2019-09-20 Alan Modra - - * bfd-in.h (bfd_section_name, bfd_section_size, bfd_section_vma), - (bfd_section_lma, bfd_section_alignment, bfd_section_flags), - (bfd_section_userdata, bfd_is_com_section, discarded_section), - (bfd_get_section_limit_octets, bfd_get_section_limit): Delete macros. - * bfd.c (bfd_get_section_limit_octets, bfd_get_section_limit), - (bfd_section_list_remove, bfd_section_list_append), - (bfd_section_list_prepend, bfd_section_list_insert_after), - (bfd_section_list_insert_before, bfd_section_removed_from_list): - New inline functions. - * section.c (bfd_is_und_section, bfd_is_abs_section), - (bfd_is_ind_section, bfd_is_const_section, bfd_section_list_remove), - (bfd_section_list_append, bfd_section_list_prepend), - (bfd_section_list_insert_after, bfd_section_list_insert_before), - (bfd_section_removed_from_list): Delete macros. - (bfd_section_name, bfd_section_size, bfd_section_vma), - (bfd_section_lma, bfd_section_alignment, bfd_section_flags), - (bfd_section_userdata, bfd_is_com_section, bfd_is_und_section), - (bfd_is_abs_section, bfd_is_ind_section, bfd_is_const_section), - (discarded_section): New inline functions. - * bfd-in2.h: Regenerate. + PR 26463 + * elf32-m32c.c (m32c_elf_relax_section): Check is_elf_hash_table + before accessing elf fields. -2019-09-20 Alan Modra +2020-08-25 Alan Modra - * bfd-in.h (bfd_asymbol_section, bfd_asymbol_value, bfd_asymbol_name), - (bfd_asymbol_bfd, bfd_asymbol_flavour, bfd_set_asymbol_name): Delete. - * bfd.c (bfd_asymbol_section, bfd_asymbol_value, bfd_asymbol_name), - (bfd_asymbol_bfd, bfd_set_asymbol_name): New inline functions. - * targets.c (bfd_asymbol_flavour): Likewise. - * bfd-in2.h: Regenerate. + PR 26452 + * som.c (som_compute_checksum): XOR 32-bit words in header, + not unsigned long sized words. -2019-09-20 Alan Modra +2020-08-25 Alan Modra - * archive.c (bfd_generic_archive_p): Use bfd_set_thin_archive. - * bfd-in.h (bfd_get_filename, bfd_get_cacheable, bfd_get_format), - (bfd_get_target, bfd_get_flavour, bfd_family_coff, bfd_big_endian), - (bfd_little_endian, bfd_header_big_endian, bfd_header_little_endian), - (bfd_get_file_flags, bfd_applicable_file_flags), - (bfd_applicable_section_flags, bfd_has_map, bfd_is_thin_archive), - (bfd_valid_reloc_types, bfd_usrdata, bfd_get_start_address), - (bfd_get_symcount, bfd_get_outsymbols, bfd_count_sections), - (bfd_get_dynamic_symcount, bfd_get_symbol_leading_char): Delete. - * bfd/bfd.c (bfd_get_filename, bfd_get_cacheable, bfd_get_format), - (bfd_get_file_flags, bfd_get_start_address, bfd_get_symcount), - (bfd_get_dynamic_symcount, bfd_get_outsymbols, bfd_count_sections), - (bfd_has_map, bfd_is_thin_archive, bfd_set_thin_archive), - (bfd_usrdata, bfd_set_usrdata): New inline functions. - * targets.c (bfd_get_target, bfd_get_flavour), - (bfd_applicable_file_flags, bfd_family_coff, bfd_big_endian), - (bfd_little_endian, bfd_header_big_endian), - (bfd_header_little_endian, bfd_applicable_section_flags), - (bfd_get_symbol_leading_char): New inline functions. - * bfd-in2.h: Regenerate. + PR 26430 + * elf-nacl.c (nacl_modify_segment_map): Correct alloc size and + amount copied for elf_segment_map defined with one element + sections array. -2019-09-20 Alan Modra +2020-08-25 Alan Modra - * elf64-ppc.c (ppc64_glibc_dynamic_reloc): New function. - (ppc64_elf_relocate_section): Warn if emitting unsupported dynamic - relocations. - -2019-09-18 Alan Modra - - * bfd-in.h (bfd_get_section_name, bfd_get_section_vma), - (bfd_get_section_lma, bfd_get_section_alignment), - (bfd_get_section_size, bfd_get_section_flags), - (bfd_get_section_userdata): Delete. - (bfd_section_name, bfd_section_size, bfd_section_vma), - (bfd_section_lma, bfd_section_alignment): Lose bfd parameter. - (bfd_section_flags, bfd_section_userdata): New. - (bfd_is_com_section): Rename parameter. - * section.c (bfd_set_section_userdata, bfd_set_section_vma), - (bfd_set_section_alignment, bfd_set_section_flags, bfd_rename_section), - (bfd_set_section_size): Delete bfd parameter, rename section parameter. - (bfd_set_section_lma): New. - * bfd-in2.h: Regenerate. - * mach-o.c (bfd_mach_o_init_section_from_mach_o): Delete bfd param, - update callers. - * aoutx.h, * bfd.c, * coff-alpha.c, * coff-arm.c, * coff-mips.c, - * coff64-rs6000.c, * coffcode.h, * coffgen.c, * cofflink.c, - * compress.c, * ecoff.c, * elf-eh-frame.c, * elf-hppa.h, - * elf-ifunc.c, * elf-m10200.c, * elf-m10300.c, * elf-properties.c, - * elf-s390-common.c, * elf-vxworks.c, * elf.c, * elf32-arc.c, - * elf32-arm.c, * elf32-avr.c, * elf32-bfin.c, * elf32-cr16.c, - * elf32-cr16c.c, * elf32-cris.c, * elf32-crx.c, * elf32-csky.c, - * elf32-d10v.c, * elf32-epiphany.c, * elf32-fr30.c, * elf32-frv.c, - * elf32-ft32.c, * elf32-h8300.c, * elf32-hppa.c, * elf32-i386.c, - * elf32-ip2k.c, * elf32-iq2000.c, * elf32-lm32.c, * elf32-m32c.c, - * elf32-m32r.c, * elf32-m68hc1x.c, * elf32-m68k.c, * elf32-mcore.c, - * elf32-mep.c, * elf32-metag.c, * elf32-microblaze.c, - * elf32-moxie.c, * elf32-msp430.c, * elf32-mt.c, * elf32-nds32.c, - * elf32-nios2.c, * elf32-or1k.c, * elf32-ppc.c, * elf32-pru.c, - * elf32-rl78.c, * elf32-rx.c, * elf32-s390.c, * elf32-score.c, - * elf32-score7.c, * elf32-sh.c, * elf32-spu.c, * elf32-tic6x.c, - * elf32-tilepro.c, * elf32-v850.c, * elf32-vax.c, * elf32-visium.c, - * elf32-xstormy16.c, * elf32-xtensa.c, * elf64-alpha.c, - * elf64-bpf.c, * elf64-hppa.c, * elf64-ia64-vms.c, * elf64-mmix.c, - * elf64-ppc.c, * elf64-s390.c, * elf64-sparc.c, * elf64-x86-64.c, - * elflink.c, * elfnn-aarch64.c, * elfnn-ia64.c, * elfnn-riscv.c, - * elfxx-aarch64.c, * elfxx-mips.c, * elfxx-sparc.c, - * elfxx-tilegx.c, * elfxx-x86.c, * i386msdos.c, * linker.c, - * mach-o.c, * mmo.c, * opncls.c, * pdp11.c, * pei-x86_64.c, - * peicode.h, * reloc.c, * section.c, * syms.c, * vms-alpha.c, - * xcofflink.c: Update throughout for bfd section macro and function - changes. - -2019-09-18 Alan Modra - - * bfd-in.h (bfd_asymbol_section): Rename from bfd_get_section. - (bfd_get_output_section): Delete. - (bfd_asymbol_base): Delete. - (bfd_asymbol_section, bfd_asymbol_value, bfd_asymbol_name), - (bfd_asymbol_bfd, bfd_asymbol_flavour): Tidy. - (bfd_set_asymbol_name): New macro. - * bfd-in2.h: Regenerate. - * aout-cris.c: Update throughout to use bfd_asymbol_section. - * aoutx.h: Likewise. - * cofflink.c: Likewise. - * dwarf2.c: Likewise. - * ecoff.c: Likewise. - * elf.c: Likewise. - * elf32-arm.c: Likewise. - * elf32-mips.c: Likewise. - * elf32-score.c: Likewise. - * elf32-score7.c: Likewise. - * elfn32-mips.c: Likewise. - * elfnn-aarch64.c: Likewise. - * elfxx-mips.c: Likewise. - * linker.c: Likewise. - * pdp11.c: Likewise. - * elf64-mmix.c (mmix_elf_reloc): Part expand bfd_get_output_section. + PR 26422 + * elf32-arm.c (elf32_arm_final_link_relocate): Use the appropriate + bfd_get_x size function to read addends out of fields. Apply + rightshift adjustment too. Don't apply the now unnecessary + howto->size shift to branch REL addends. Don't refetch R_ARM_ABS8 + and R_ARM_ABS16 addends. Don't refetch thumb branch addends. + Correct R_ARM_THM_JUMP6 addend. -2019-09-18 Simon Marchi +2020-08-25 Alan Modra - * Makefile.in: Re-generate. - * configure: Re-generate. - * doc/Makefile.in: Re-generate. - -2019-09-18 Alan Modra - - * aoutx.h (slurp_symbol_table): Don't set symcount using bfd_get - macros. - * pdp11.c (slurp_symbol_table): Likewise. - * som.c (som_slurp_symbol_table): Likewise. - * coff-ppc.c (ppc_bfd_coff_final_link): Likewise. - * coffcode.h (coff_slurp_symbol_table): Likewise. - * cofflink.c (_bfd_coff_final_link): Likewise. - * ecoff.c (ecoff_slurp_symbolic_header): Likewise. - (_bfd_ecoff_slurp_symbolic_info): Likewise. - (_bfd_ecoff_slurp_symbol_table): Likewise. - (_bfd_ecoff_bfd_final_link): Likewise. - * elf.c (_bfd_elf_canonicalize_symtab): Likewise. - * elflink.c (elf_link_output_symstrtab): Likewise. - (bfd_elf_final_link): Likewise. - * peicode.h (pe_ILF_build_a_bfd): Likewise. - * xcofflink.c (_bfd_xcoff_bfd_final_link): Likewise. - * aoutx.h (some_aout_object_p, slurp_symbol_table): Don't set - start_address or symcount using bfd_get macros. - * coffgen.c (coff_real_object_p): Likewise. - * pdp11.c (some_aout_object_p, slurp_symbol_table): Likewise. - * som.c (som_object_setup, som_slurp_symbol_table): Likewise. - * elfcore.h (elf_core_file_p): Don't set start_address using - bfd_get macro. - * elf.c (_bfd_elf_canonicalize_dynamic_symtab): Don't set dynsymcount - using bfd_get macro. - * bfd.c (bfd_set_file_flags): Don't set flags using bfd_get macro. - * linker.c (bfd_generic_link_read_symbols): Don't set outsymbols - or symcount using bfd_get macros. - (_bfd_generic_final_link, generic_add_output_symbol): Likewise. - * syms.c (bfd_set_symtab): Likewise. - * vms-alpha.c (alpha_vms_bfd_final_link): Likewise. - * archive.c (do_slurp_bsd_armap): Don't set has_armap using - bfd_has_map macro. - (do_slurp_coff_armap, bfd_slurp_armap): Likewise. - * archive64.c (_bfd_archive_64_bit_slurp_armap): Likewise. - * coff-rs6000.c (_bfd_xcoff_slurp_armap): Likewise. - * coff64-rs6000.c (xcoff64_slurp_armap): Likewise. - * ecoff.c (_bfd_ecoff_slurp_armap): Likewise. - * som.c (som_slurp_armap): Likewise. + PR 26419 + * elf-m10300.c (mn10300_elf_relax_section): Don't attempt access + before start of section. -2019-09-18 Alan Modra +2020-08-25 Alan Modra - * archures.c (bfd_get_arch): Make param const. - (bfd_get_mach, bfd_arch_bits_per_byte): Likewise. - (bfd_arch_bits_per_address, bfd_octets_per_byte): Likewise. - * bfd-in2.h: Regenerate. + * elf-m10300.c (elf32_mn10300_hash_table): Test is_elf_hash_table + before accessing elf_hash_table_id. + * elf32-arc.c (elf_arc_hash_table): Likewise. + * elf32-arm.c (elf32_arm_hash_table): Likewise. + * elf32-avr.c (avr_link_hash_table): Likewise. + * elf32-bfin.c (bfinfdpic_hash_table): Likewise. + * elf32-cris.c (elf_cris_hash_table): Likewise. + * elf32-csky.c (csky_elf_hash_table): Likewise. + * elf32-frv.c (frvfdpic_hash_table): Likewise. + * elf32-hppa.c (hppa_link_hash_table): Likewise. + * elf32-lm32.c (lm32_elf_hash_table): Likewise. + * elf32-m32r.c (m32r_elf_hash_table): Likewise. + * elf32-m68hc1x.h (m68hc11_elf_hash_table): Likewise. + * elf32-m68k.c (elf_m68k_hash_table): Likewise. + * elf32-metag.c (metag_link_hash_table): Likewise. + * elf32-microblaze.c (elf32_mb_hash_table): Likewise. + * elf32-nds32.h (nds32_elf_hash_table): Likewise. + * elf32-or1k.c (or1k_elf_hash_table): Likewise. + * elf32-s390.c (elf_s390_hash_table): Likewise. + * elf32-sh.c (sh_elf_hash_table): Likewise. + * elf32-spu.c (spu_hash_table): Likewise. + * elf32-tilepro.c (tilepro_elf_hash_table): Likewise. + * elf32-xtensa.c (elf_xtensa_hash_table): Likewise. + * elf64-alpha.c (alpha_elf_hash_table): Likewise. + * elf64-hppa.c (hppa_link_hash_table): Likewise. + * elf64-ia64-vms.c (elf64_ia64_hash_table): Likewise. + * elf64-s390.c (elf_s390_hash_table): Likewise. + * elfnn-ia64.c (elfNN_ia64_hash_table): Likewise. + * elfnn-riscv.c (riscv_elf_hash_table): Likewise. + * elfxx-mips.c (mips_elf_hash_table): Likewise. + * elfxx-sparc.h (_bfd_sparc_elf_hash_table): Likewise. + * elfxx-tilegx.c (tilegx_elf_hash_table): Likewise. -2019-09-18 Alan Modra +2020-08-21 Jon Turney - * bfd-in.h (carsym.name): Make const. - * reloc.c (struct reloc_howto_struct.name): Likewise. - * targets.c (bfd_target.name): Likewise.! - * bfd.c (bfd_get_sign_extend_vma): Make variable const. - * som.c (som_bfd_fill_in_ar_symbols): Use an intermediary variable - when setting carsym.name. - * bfd-in2.h: Regenerate. + * elf.c (elfcore_grok_win32pstatus): Change name_size to unsigned + int. Use '%u' format with _bfd_error_handler to render it. -2019-09-18 Alan Modra +2020-08-25 Alan Modra - * mach-o.c (bfd_mach_o_fat_member_init): Likewise. Replace - xstrdup and xmalloc with bfd_strdup and bfd_malloc. Return an - error status. Adjust calls. - * vms-lib.c (_bfd_vms_lib_get_module): Test mhd->id earlier. - Close bfd on failure. Replace xstrdup/bfd_alloc use with - bfd_malloc. Use bfd_set_filename. - -2019-09-18 Alan Modra - - * elf64-ppc.c (must_be_dyn_reloc): Return 0 for TOC16 relocs. - (ppc64_elf_check_relocs): Support dynamic/copy relocs for TOC16. - (ppc64_elf_adjust_dynamic_symbol): Don't keep dynamic reloc when - needs_copy even if all relocs are in rw sections. - (dec_dynrel_count): Handle TOC16 relocs. - (ppc64_elf_relocate_section): Support dynamic relocs for TOC16. - (ppc64_elf_finish_dynamic_symbol): Adjust to handle needs_copy - semantic change. + PR 26489 + * elf64-ppc.c (ppc64_elf_size_stubs): Test code_sec->has_toc_reloc + and code_sec->makes_toc_func_call before sec_info[code_sec->id]. -2019-09-16 Phil Blundell +2020-08-25 Alan Modra - * version.m4: Set version to 2.33.50. - * Makefile.in, configure, doc/Makefile.in: Regenerated. + PR 26492 + * elf64-ppc.c (ppc_hash_table): Test is_elf_hash_table before + accessing elf_hash_table_id. -2019-09-11 Tom Tromey +2020-08-25 Alan Modra - * opncls.c (bfd_set_filename): New function. - * bfd-in2.h: Regenerate. + PR 26483 + * elf32-ppc.c (ppc_elf_hash_table): Test is_elf_hash_table before + accessing elf_hash_table_id. -2019-09-11 Alan Modra +2020-08-24 Mark Wielaard - * targets.c (struct bfd_target): Add _bfd_group_name. - (BFD_JUMP_TABLE): Likewise. - * coffgen.c (bfd_coff_group_name): New function. - * elf.c (bfd_elf_group_name): New function. - * linker.c (_bfd_nolink_bfd_group_name): New function. - * section.c (bfd_generic_group_name): New function. - * elf-bfd.h (bfd_elf_group_name): Declare. - * libbfd-in.h (_bfd_nolink_bfd_group_name): Declare. - * libcoff-in.h (bfd_coff_group_name): Declare. - * aout-target.h (MY_bfd_group_name): Define. - * aout-tic30.c (MY_bfd_group_name): Define. - * bfd.c (bfd_group_name): Define. - * binary.c (binary_bfd_group_name): Define. - * coff-alpha.c (_bfd_ecoff_bfd_group_name): Define. - * coff-mips.c (_bfd_ecoff_bfd_group_name): Define. - * coff-rs6000.c (_bfd_xcoff_bfd_group_name): Define. - * coffcode.h (coff_bfd_group_name): Define. - * elfxx-target.h (bfd_elfNN_bfd_group_name): Define. - * i386msdos.c (msdos_bfd_group_name): Define. - * ihex.c (ihex_bfd_group_name): Define. - * mach-o-target.c (bfd_mach_o_bfd_group_name): Define. - * mmo.c (mmo_bfd_group_name): Define. - * pef.c (bfd_pef_bfd_group_name): Define. - * plugin.c (bfd_plugin_bfd_group_name): Define. - * ppcboot.c (ppcboot_bfd_group_name): Define. - * som.c (som_bfd_group_name): Define. - * srec.c (srec_bfd_group_name): Define. - * tekhex.c (tekhex_bfd_group_name): Define. - * verilog.c (verilog_bfd_group_name): Define. - * vms-alpha.c (vms_bfd_group_name, alpha_vms_bfd_group_name): Define. - * xsym.c (bfd_sym_bfd_group_name): Define. - * coff64-rs6000.c (rs6000_xcoff64_vec): Init new field. - (rs6000_xcoff64_aix_vec): Likewise. - * bfd-in2.h: Regenerate. - * libbfd.h: Regenerate. - * libcoff.h: Regenerate. + * dwarf2.c (read_attribute_value): Handle DW_FORM_data16. + (read_formatted_entries): Likewise. And skip zero entry. -2019-09-10 Nick Clifton +2020-08-24 Cooper Qu - PR 24907 - * archures.c (bfd_arch_info_type): Add max_reloc_offset_into_insn - field. - (bfd_default_arch_struct): Initialise the new field. - * bfd-in2.h: Regenerate. - * cpu-aarch64.c: Initialise the new field. - * cpu-alpha.c: Likewise. - * cpu-arc.c: Likewise. - * cpu-arm.c: Likewise. - * cpu-avr.c: Likewise. - * cpu-bfin.c: Likewise. - * cpu-bpf.c: Likewise. - * cpu-cr16.c: Likewise. - * cpu-cr16c.c: Likewise. - * cpu-cris.c: Likewise. - * cpu-crx.c: Likewise. - * cpu-csky.c: Likewise. - * cpu-d10v.c: Likewise. - * cpu-d30v.c: Likewise. - * cpu-dlx.c: Likewise. - * cpu-epiphany.c: Likewise. - * cpu-fr30.c: Likewise. - * cpu-frv.c: Likewise. - * cpu-ft32.c: Likewise. - * cpu-h8300.c: Likewise. - * cpu-hppa.c: Likewise. - * cpu-i386.c: Likewise. - * cpu-ia64.c: Likewise. - * cpu-iamcu.c: Likewise. - * cpu-ip2k.c: Likewise. - * cpu-iq2000.c: Likewise. - * cpu-k1om.c: Likewise. - * cpu-l1om.c: Likewise. - * cpu-lm32.c: Likewise. - * cpu-m10200.c: Likewise. - * cpu-m10300.c: Likewise. - * cpu-m32c.c: Likewise. - * cpu-m32r.c: Likewise. - * cpu-m68hc11.c: Likewise. - * cpu-m68hc12.c: Likewise. - * cpu-m68k.c: Likewise. - * cpu-m9s12x.c: Likewise. - * cpu-m9s12xg.c: Likewise. - * cpu-mcore.c: Likewise. - * cpu-mep.c: Likewise. - * cpu-metag.c: Likewise. - * cpu-microblaze.c: Likewise. - * cpu-mips.c: Likewise. - * cpu-mmix.c: Likewise. - * cpu-moxie.c: Likewise. - * cpu-msp430.c: Likewise. - * cpu-mt.c: Likewise. - * cpu-nds32.c: Likewise. - * cpu-nfp.c: Likewise. - * cpu-nios2.c: Likewise. - * cpu-ns32k.c: Likewise. - * cpu-or1k.c: Likewise. - * cpu-pdp11.c: Likewise. - * cpu-pj.c: Likewise. - * cpu-plugin.c: Likewise. - * cpu-powerpc.c: Likewise. - * cpu-pru.c: Likewise. - * cpu-riscv.c: Likewise. - * cpu-rl78.c: Likewise. - * cpu-rs6000.c: Likewise. - * cpu-rx.c: Likewise. - * cpu-s12z.c: Likewise. - * cpu-s390.c: Likewise. - * cpu-score.c: Likewise. - * cpu-sh.c: Likewise. - * cpu-sparc.c: Likewise. - * cpu-spu.c: Likewise. - * cpu-tic30.c: Likewise. - * cpu-tic4x.c: Likewise. - * cpu-tic54x.c: Likewise. - * cpu-tic6x.c: Likewise. - * cpu-tic80.c: Likewise. - * cpu-tilegx.c: Likewise. - * cpu-tilepro.c: Likewise. - * cpu-v850.c: Likewise. - * cpu-v850_rh850.c: Likewise. - * cpu-vax.c: Likewise. - * cpu-visium.c: Likewise. - * cpu-wasm32.c: Likewise. - * cpu-xc16x.c: Likewise. - * cpu-xgate.c: Likewise. - * cpu-xstormy16.c: Likewise. - * cpu-xtensa.c: Likewise. - * cpu-z80.c: Likewise. - * cpu-z8k.c: Likewise. + * bfd-in2.h (bfd_mach_ck860): New. + * cpu-csky.c (arch_info_struct): Add item for CK860. -2019-09-09 Phil Blundell +2020-08-24 Alan Modra - binutils 2.33 branch created. + * elf32-ppc.c (ppc_elf_check_relocs): Set has_tls_reloc for + high part tprel16 relocs. + (ppc_elf_tls_optimize): Sanity check high part tprel16 relocs. + Clear do_tls_opt on odd instructions. + (ppc_elf_relocate_section): Move TPREL16_HA/LO optimisation later. + Don't sanity check them here. + * elf64-ppc.c (ppc64_elf_check_relocs): Set has_tls_reloc for + high part tprel16 relocs. + (ppc64_elf_tls_optimize): Sanity check high part tprel16 relocs. + Clear do_tls_opt on odd instructions. + (ppc64_elf_relocate_section): Don't sanity check TPREL16_HA. -2019-09-06 Alan Modra +2020-08-23 John David Anglin - * aout-target.h (object_p): Formatting. - * bfd-in.h (bfd_get_filename): Don't cast to char*. - * corefile.c (generic_core_file_matches_executable_p): Constify - variables and remove cast. - * bfd-in2.h: Regenerate. + PR binutils/26357 + * configure.ac: Disable plugins by default on 32-bit hppa*-*-hpux*. + * configure: Regenerate. -2019-09-05 Alan Modra +2020-08-22 H.J. Lu - * elf64-ppc.c (ppc64_elf_check_relocs): Interpret an addend in - GOT_PCREL and PLT_PCREL relocs as affecting the value stored - in the GOT/PLT entry rather than affecting the offset to that - GOI/PLT entry. - (ppc64_elf_edit_toc, ppc64_elf_relocate_section): Likewise. + PR ld/26382 + * elflink.c (elf_link_output_symstrtab): Keep only one '@' for + versioned symbols, which are defined in shared objects, in + symbol string table. + +2020-08-21 Nick Clifton + + * elfnn-aarch64.c (_bfd_aarch64_erratum_835769_scan): Only sort + the data map if there are entries in it. + (_bfd_aarch64_erratum_843419_scan): Likewise. + +2020-08-21 Jan Beulich + + * peXXigen.c (_bfd_XX_bfd_copy_private_bfd_data_common): Check + last byte of debug dir, not first. + +2020-08-20 Nick Clifton + + PR 26428 + * bfd.c (bfd_update_compression_header): Also set the sh_addralign + field in the ELF header of the compressed sections. + +2020-08-20 Nick Clifton + + PR 26406 + * elf-bfd.h (struct bfd_elf_section_data): Add + has_secondary_relocs field. + * elf.c (_bfd_elf_copy_special_section_fields): Set the + has_secondary_relocs field for sections which have associated + secondary relocs. + * elfcode.h (elf_write_relocs): Only call write_secondary_relocs + on sections which have associated secondary relocs. + +2020-08-15 Alan Modra + + * elf32-frv.c (elf32_frv_add_symbol_hook): Set SEC_SMALL_DATA on + small common section. + * elf32-m32r.c (m32r_elf_add_symbol_hook): Likewise. + * elf32-microblaze.c (microblaze_elf_add_symbol_hook): Likewise. + * elf32-nds32.c (nds32_elf_add_symbol_hook): Likewise. + * elf32-nios2.c (nios2_elf_add_symbol_hook): Likewise. + * elf32-ppc.c (ppc_elf_add_symbol_hook): Likewise. + * elf32-score.c (s3_bfd_score_elf_add_symbol_hook): Likewise. + * elf32-score7.c (s7_bfd_score_elf_add_symbol_hook): Likewise. + * elf32-tic6x.c (elf32_tic6x_add_symbol_hook): Likewise. + * elf32-v850.c (v850_elf_check_relocs): Likewise. + (v850_elf_add_symbol_hook): Likewise. + * elf64-alpha.c (elf64_alpha_add_symbol_hook): Likewise. + * elf64-ia64-vms.c (elf64_ia64_add_symbol_hook): Likewise. + * elfnn-ia64.c (elfNN_ia64_add_symbol_hook): Likewise. + * elfxx-mips.c (_bfd_mips_elf_add_symbol_hook): Likewise. -2019-09-05 Alan Modra +2020-08-15 Alan Modra - * elf64-ppc.c (xlate_pcrel_opt): Handle prefix loads and stores - in second instruction. - (ppc64_elf_relocate_section): Likewise. + PR 26389 + * syms.c (bfd_decode_symclass): Choose 'c' for commons only when + SEC_SMALL_DATA. + * elf32-m32r.c (_bfd_m32r_elf_symbol_processing): Set SEC_SMALL_DATA + on small common section. + * elf32-score.c (s3_bfd_score_elf_symbol_processing): Likewise. + * elf32-score7.c (s7_bfd_score_elf_symbol_processing): Likewise. + * elf32-tic6x.c (elf32_tic6x_symbol_processing): Likewise. + * elf32-v850.c (v850_elf_symbol_processing): Likewise. + * elfxx-mips.c (_bfd_mips_elf_symbol_processing): Likewise. + * ecoff.c (ecoff_set_symbol_info, ecoff_link_add_externals): Likewise. -2019-09-05 Alan Modra +2020-08-14 Alan Modra - PR 24955 - * libbfd-in.h (bfd_strdup): New inline function. - * archive.c (_bfd_get_elt_at_filepos): Use bfd_strdup. Close - bfd on error. - * elfcode.h (_bfd_elf_bfd_from_remote_memory): Use bfd_strdup. - * opncls.c (bfd_fopen): Use bfd_strdup. Close fd and stream - on error. - (bfd_openstreamr): Use bfd_strdup. - (bfd_openr_iovec, bfd_openw, bfd_create): Likewise. - * plugin.c (try_load_plugin): Use bfd_malloc. - * libbfd.h: Regenerate. + * hash.c (bfd_hash_set_default_size): Use higher_prime_number + rather than another copy of primes. Increase maximum default + size allowed. -2019-09-02 Alan Modra +2020-08-13 Alan Modra - PR 11983 - * dwarf2.c (_bfd_dwarf2_slurp_debug_info): Free debug_filename - on success. Tidy. - (read_alt_indirect_string): Likewise. - (read_alt_indirect_ref): Likewise. + * config.bfd: Obsolete arm*-*-symbianelf*, and ia64*-*-*. -2019-08-31 Jim Wilson +2020-08-13 Alan Modra - PR 23825 - * elfnn-riscv.c (riscv_elf_create_dynamic_sections): Add SEC_LOAD, - SEC_DATA, and SEC_HAS_CONTENTS to .tdata.dyn section. + * elf64-ppc.h (struct ppc64_elf_params): Add no_pcrel_opt. + * elf64-ppc.c (ppc64_elf_relocate_section): Disable GOT reloc + optimizations when --no-toc-optimize. Disable R_PPC64_PCREL_OPT + optimization when --no-pcrel-optimize. -2019-08-30 Jim Wilson +2020-08-13 Alan Modra - * elfnn-riscv.c (riscv_elf_relocate_section): For unresolvable reloc - error, call bfd_set_error, set ret to FALSE, and goto out label. + PR 26348 + * bfd.c (struct bfd): Add read_only. + * elfcode.h (elf_swap_shdr_in): Test both sh_offset and sh_size. + Set read_only on warning. + (elf_object_p): Sanity check program header alignment. Set + read_only on warning. + * bfd-in2.h: Regenerate. -2019-08-30 H.J. Lu +2020-08-12 Jon Turney - PR ld/24951 - * archive.c (_bfd_get_elt_at_filepos): Copy BFD_COMPRESS, - BFD_DECOMPRESS and BFD_COMPRESS_GABI flags for thin archive. + * elf.c (elfcore_grok_win32pstatus): Use unsigned int for + win32pstatus note type to avoid signedness comparison warning. -2019-08-29 Alan Modra +2020-07-21 Jon Turney - PR 24697 - * elf32-ppc.c (ppc_elf_check_relocs): Call bad_shared_reloc - when !bfd_link_executable for R_PPC_EMB_SDA2I16 and - R_PPC_EMB_SDA2REL. Don't call bad_shared_reloc for any other - reloc. + * elf.c (elfcore_grok_win32pstatus): Warn on malformed + win32pstatus notes, and return TRUE so we continue rather than + stopping as if it was an error. -2019-08-29 Alan Modra +2020-07-01 Jon Turney - * elf64-ppc.c (xlate_pcrel_opt): Add poff parameter. Allow offset - on second insn, return it in poff. - (ppc64_elf_relocate_section): Add offset to paddi addend for - PCREL_OPT. + * elf.c (elfcore_grok_win32pstatus): Handle NOTE_INFO_MODULE64. -2019-08-28 Jim Wilson +2020-07-11 Jon Turney - * elfnn-riscv.c (_bfd_riscv_relax_lui): Add check to exclude abs - section when setting max_alignment. Update comment. - (_bfd_riscv_relax_pc): Likewise. + * elf.c (elfcore_grok_win32pstatus): Don't apply size constraint + for NOTE_INFO_THREAD to all win32pstatus ELF notes, instead apply + appropriate size constraint for each win32pstatus note type. -2019-08-29 Alan Modra +2020-07-01 Jon Turney - PR 24891 - * bfd.c (struct bfd): Add no_element_cache. - * archive.c (_bfd_get_elt_at_filepos): Don't add element to - archive cache when no_element_cache. - (bfd_generic_archive_p): Set no_element_cache when opening first - element to check format. Close first element too. - (do_slurp_bsd_armap): Don't zero ardata->cache here. - * bfd-in2.h: Regenerate. + * elf.c (elfcore_grok_win32pstatus): Don't hardcode the size of + the Win32 API thread CONTEXT type read from a NOTE_INFO_THREAD + win32pstatus note. -2019-08-24 Alan Modra +2020-07-11 Jon Turney - * elf64-ppc.c (ppc64_elf_edit_toc): Exclude undefined weak - symbols from GOT optimisation. + * elf.c (NOTE_INFO{_PROCESS,_THREAD,_MODULE}): Define. + (elfcore_grok_win32pstatus): Use. -2019-08-23 Stafford Horne +2020-07-01 Jon Turney - * elf32-or1k.c (or1k_elf_finish_dynamic_symbol): Use correct value for - PLT GOT entries. + * elf.c (elfcore_grok_win32pstatus): Fix the offset used to read + the tid from a win32pstatus NOTE_INFO_THREAD ELF note. Fix + offsets used to read NOTE_INFO_PROCESS. -2019-08-23 Nick Clifton +2020-08-12 Nick Clifton - PR 24456 - * elf.c (bfd_section_from_shdr): Issue an informative warning - message and continue processing other sections after encountering - a reloc section for a section which already has other relocs - associated with it. + * po/ru.po: Updated Russian translation. + * po/sr.po: Updated Serbian translation. -2019-08-23 Alan Modra +2020-08-07 David Faust - PR 24933 - * elfxx-x86.c (_bfd_x86_elf_get_synthetic_symtab): Don't exit - on error without freeing plts[] contents. + * elf64-bpf.c (bpf_elf_relocate_section): Ensure signed division for + DISP16 and DISP32 relocations. -2019-08-22 Dennis Zhang +2020-08-05 David Faust - * cpu-arm.c: New entries for Cortex-M35P, Cortex-A77, Cortex-A76AE. + * elf64-bpf.c (bpf_elf_generic_reloc): New function. + (bpf_elf_howto_table): Use it here. + (bpf_elf_relocate_section): Use addends recorded in input_bfd for + instruction and data relocations. + +2020-08-03 Alan Modra + + * vms-lib.c (vms_traverse_index): Sanity check size remaining + before accessing vms_idx or vms_elfidx. + +2020-08-03 Alan Modra + + PR 26330 + * elf.c (_bfd_elf_get_symtab_upper_bound): Sanity check symbol table + size against file size. Correct LONG_MAX limit check. + (_bfd_elf_get_dynamic_symtab_upper_bound): Likewise. + (_bfd_elf_get_reloc_upper_bound): Don't check file size if writing. + (_bfd_elf_get_dynamic_reloc_upper_bound): Likewise. + * elf64-x86-64-.c (elf_x86_64_get_synthetic_symtab): Use + bfd_malloc_and_get_section. + +2020-07-31 Alan Modra + + PR 26314 + * elflink.c (bfd_elf_link_record_dynamic_symbol): Don't allow + IR symbols to become dynamic. + (elf_link_add_object_symbols): Don't exclude IR symbols when + deciding whether an as-needed shared library is needed. + +2020-07-30 Szabolcs Nagy + + PR ld/26312 + * elfnn-aarch64.c (elfNN_aarch64_init_small_plt0_entry): Set sh_entsize + to 0. + (elfNN_aarch64_finish_dynamic_sections): Remove sh_entsize setting. + +2020-07-30 Rainer Orth + + * bfd.m4 (BFD_SYS_PROCFS_H): New macro. + (BFD_HAVE_SYS_PROCFS_TYPE): Require BFD_SYS_PROCFS_H. + Don't define _STRUCTURED_PROC. + (BFD_HAVE_SYS_PROCFS_TYPE_MEMBER): Likewise. + * elf.c [HAVE_SYS_PROCFS_H] (_STRUCTURED_PROC): Don't define. + * configure.ac: Use BFD_SYS_PROCFS_H to check for . + * configure, config.in: Regenerate. + * Makefile.am (AM_CPPFLAGS): Add LARGEFILE_CPPFLAGS. + * Makefile.in, doc/Makefile.in: Regenerate. + +2020-07-30 H.J. Lu + + * elf-bfd.h (sym_cache): Moved before elf_link_hash_table. + (elf_link_hash_table): Add sym_cache. + * elf32-arm.c (elf32_arm_link_hash_table): Remove sym_cache. + (elf32_arm_check_relocs): Updated. + (elf32_arm_size_dynamic_sections): Likewise. + * elf32-bfin.c (bfin_link_hash_table): Removed. + (bfin_link_hash_newfunc): Updated. + (bfin_hash_table): Removed. + * elf32-csky.c (csky_elf_link_hash_table): Remove sym_cache. + (csky_elf_check_relocs): Updated. + * elf32-hppa.c (elf32_hppa_link_hash_table): Remove sym_cache. + (elf32_hppa_check_relocs): Updated. + * elf32-i386.c (elf_i386_tls_transition): Updated. + (elf_i386_convert_load_reloc): Likewise. + (elf_i386_check_relocs): Likewise. + * elf32-m32r.c (elf_m32r_link_hash_table): Removed. + (m32r_elf_hash_table): Updated. + (m32r_elf_link_hash_table_create): Likewise. + (m32r_elf_create_dynamic_sections): Likewise. + (m32r_elf_adjust_dynamic_symbol): Likewise. + (allocate_dynrelocs): Likewise. + (m32r_elf_size_dynamic_sections): Likewise. + (m32r_elf_relocate_section): Likewise. + (m32r_elf_finish_dynamic_symbol): Likewise. + (m32r_elf_check_relocs): Likewise. + * elf32-m68hc1x.h (m68hc11_elf_link_hash_table): Remove + sym_cache. + * elf32-m68k.c (elf_m68k_link_hash_table): Likewise. + (elf_m68k_check_relocs): Updated. + * elf32-metag.c (elf_metag_link_hash_table): Remove sym_cache. + (elf_metag_check_relocs): Updated. + * elf32-microblaze.c (elf32_mb_link_hash_table): Remove sym_sec. + (microblaze_elf_check_relocs): Updated. + * elf32-nds32.c (nds32_elf_link_hash_table_create): Likewise. + (nds32_elf_create_dynamic_sections): Likewise. + (nds32_elf_adjust_dynamic_symbol): Likewise. + (nds32_elf_check_relocs): Likewise. + * elf32-nds32.h (elf_nds32_link_hash_table): Remove sdynbss, + srelbss and aym_cache. + * elf32-nios2.c (elf32_nios2_link_hash_table): Remove sym_cache. + (nios2_elf32_check_relocs): Updated. + * elf32-or1k.c (elf_or1k_link_hash_table): Remove sym_sec. + (or1k_elf_check_relocs): Updated. + * elf32-ppc.c (ppc_elf_check_relocs): Remove sym_cache. + (ppc_elf_check_relocs): Updated. + * elf32-s390.c (elf_s390_link_hash_table): Remove sym_cache. + (elf_s390_check_relocs): Updated. + (elf_s390_finish_dynamic_sections): Likewise. + * elf32-sh.c (elf_sh_link_hash_table): Remove sdynbss, srelbss + and aym_cache. + (sh_elf_create_dynamic_sections): Updated. + (sh_elf_adjust_dynamic_symbol): Likewise. + (sh_elf_size_dynamic_sections): Likewise. + (sh_elf_check_relocs): Likewise. + * elf32-tic6x.c (elf32_tic6x_link_hash_table): Remove sym_cache. + (elf32_tic6x_check_relocs): Updated. + * elf32-tilepro.c (tilepro_elf_link_hash_table): Removed. + (tilepro_elf_hash_table): Updated. + (tilepro_elf_link_hash_table_create): Likewise. + (tilepro_elf_check_relocs): Likewise. + (tilepro_elf_adjust_dynamic_symbol): Likewise. + (allocate_dynrelocs): Likewise. + (tilepro_elf_size_dynamic_sections): Likewise. + (tilepro_elf_relocate_section): Likewise. + (tilepro_elf_finish_dynamic_symbol): Likewise. + (tilepro_finish_dyn): Likewise. + (tilepro_elf_finish_dynamic_sections): Likewise. + * elf64-ppc.c (ppc_link_hash_table): Remove sym_cache. + (ppc64_elf_before_check_relocs): Updated. + (ppc64_elf_check_relocs): Likewise. + * elf64-s390.c (elf_s390_link_hash_table): Remove sym_cache. + (elf_s390_check_relocs): Updated. + (elf_s390_relocate_section): Likewise. + (elf_s390_finish_dynamic_sections): Likewise. + * elf64-x86-64.c (elf_x86_64_tls_transition): Likewise. + (elf_x86_64_check_relocs): Likewise. + * elfnn-aarch64.c (elf_aarch64_link_hash_table): Remove + sym_cache. + (elfNN_aarch64_check_relocs): Updated. + * elfnn-riscv.c (riscv_elf_link_hash_table): Remove sym_cache. + (riscv_elf_check_relocs): Updated. + * elfxx-mips.c (mips_elf_link_hash_table): Remove sym_cache. + (mips_elf_resolve_got_page_ref): Updated. + * elfxx-sparc.c (_bfd_sparc_elf_check_relocs): Likewise. + * elfxx-sparc.h (_bfd_sparc_elf_link_hash_table): Remove + sym_cache. + * elfxx-tilegx.c (tilegx_elf_link_hash_table): Likewise. + (tilegx_elf_check_relocs): Updated. + * elfxx-x86.h (elf_x86_link_hash_table): Remove sym_cache. -2019-08-22 Nick Clifton +2020-07-29 Maciej W. Rozycki - PR 24922 - * pei-x86_64.c (pex64_xdata_print_uwd_codes): Add checks before - reading data from extra records. + * elflink.c (bfd_elf_final_link): Give local symbols a name if + so requested. + * elfxx-mips.c (_bfd_mips_elf_name_local_section_symbols): Only + return TRUE if making ET_REL output. -2019-08-22 Tamar Christina +2020-07-29 Maciej W. Rozycki - PR ld/24601 - * elfnn-aarch64.c (aarch64_relocate): Handle weak TLS and undefined TLS. - Also Pass input_bfd to _bfd_aarch64_elf_resolve_relocation. - * elfxx-aarch64.c (_bfd_aarch64_elf_resolve_relocation): Use it. - * elfxx-aarch64.h (_bfd_aarch64_elf_resolve_relocation): Emit warning - for weak TLS. + * elf-bfd.h (elf_backend_data): Add + `elf_backend_elfsym_local_is_section' member. + * elfxx-target.h (elf_backend_elfsym_local_is_section): New + macro. + (elfNN_bed): Add `elf_backend_elfsym_local_is_section' member. + * elflink.c (bfd_elf_final_link): Use it to determine whether + set the `.symtab' section's `sh_info' value to the index of the + first non-local or non-section symbol. + * elf32-mips.c (mips_elf32_elfsym_local_is_section): New + function. + (elf_backend_elfsym_local_is_section): New macro. + * elfn32-mips.c (mips_elf_n32_elfsym_local_is_section): New + function. + (elf_backend_elfsym_local_is_section): New macro. -2019-08-22 Alan Modra +2020-07-29 Alan Modra - * elf32-arm.c (cmse_scan): Don't use ARM_GET_SYM_CMSE_SPCL, - instead recognize CMSE_PREFIX in symbol name. - (elf32_arm_gc_mark_extra_sections): Likewise. - (elf32_arm_filter_cmse_symbols): Don't test ARM_GET_SYM_CMSE_SPCL. - (elf32_arm_swap_symbol_in): Don't invoke ARM_SET_SYM_CMSE_SPCL. + * elflink.c (bfd_elf_final_link): Don't segfault on local dynsyms + defined in excluded sections. -2019-08-20 Dennis Zhang +2020-07-28 Alan Modra - * cpu-aarch64.c: New entries for Cortex-A34, Cortex-A65, - Cortex-A77, cortex-A65AE, and Cortex-A76AE. + * elf.c (assign_section_numbers): Comment. Don't segfault on + discarded sections when setting linked-to section for generic + ELF linker. + * elflink.c (bfd_elf_match_symbols_in_sections): Allow NULL info. -2019-08-20 Tamar Christina +2020-07-27 Alan Modra - * elf32-arm.c (elf32_thumb2_plt_entry, elf32_arm_plt_thumb_stub, - elf32_arm_stub_long_branch_v4t_thumb_thumb, - elf32_arm_stub_long_branch_v4t_thumb_arm, - elf32_arm_stub_short_branch_v4t_thumb_arm, - elf32_arm_stub_long_branch_v4t_thumb_arm_pic, - elf32_arm_stub_long_branch_v4t_thumb_thumb_pic, - elf32_arm_stub_long_branch_v4t_thumb_tls_pic): Change nop to branch to - previous instruction. + * xcofflink.c (xcoff_need_ldrel_p): Accept --just-symbols symbols and + similar as absolute. + (bfd_xcoff_import_symbol): Don't fuss over absolute symbol + redefinitions here. -2019-08-19 Tom Tromey +2020-07-24 Nick Clifton - * dwarf2.c (_bfd_dwarf2_find_symbol_bias): Create hash table - holding symbols. + * config.bfd: Move xc16x target to the obsolete list. -2019-08-19 Alan Modra +2020-07-22 Kevin Buettner - * elf64-ppc.c (struct ppc64_elf_obj_tdata): Rename has_gotrel - to has_optrel. - (struct _ppc64_elf_section_data): Likewise. - (ppc64_elf_check_relocs): Set has_optrel for more relocs. - (ppc64_elf_edit_toc): Do ha/lo insn checks in GOT loop rather - than TOC loop. Check PLT16 insns too. + * binary.c (binary_get_section_contents): Seek using offset + from section's file position. -2019-08-16 H.J. Lu +2020-07-22 Kevin Buettner - PR ld/24905 - * elf64-x86-64.c (elf_x86_64_check_relocs): Move PIC check for - PC-relative relocations back to ... - (elf_x86_64_relocate_section): Here. + * elf.c (_bfd_elf_make_section_from_phdr): Remove hack for GDB. -2019-08-16 Martin Liska +2020-07-22 Max Filippov - PR ld/24912 - * elflink.c: Report error only for not relocatable. - * linker.c (_bfd_generic_link_add_one_symbol): Do not handle - here lto_slim_object as it's handled in caller. + PR 26246 + * elf32-xtensa.c (removed_literal_compare): Use correct pointer + type for the first function argument. Rename pointers to reflect + that they have distinct types. -2019-08-16 Alan Modra +2020-07-20 Alan Modra - * elf32-ppc.c (ppc_elf_relocate_section): Optimize unaligned relocs. + * elflink.c (_bfd_elf_gc_keep): Use bfd_is_const_section. -2019-08-15 Jim Wilson +2020-07-19 Alan Modra - * elfnn-riscv.c (perform_relocation) : If - RISCV_CONST_HIGH_PART (value) is zero, then convert c.lui instruction - to c.li instruction, and use ENCODE_RVC_IMM to set value. + * elf64-ppc.c (struct ppc_link_hash_table): Add has_power10_relocs. + (select_alt_stub): New function. + (ppc_get_stub_entry): Use it here. + (ppc64_elf_check_relocs): Set had_power10_relocs rather than + power10_stubs. + (ppc64_elf_size_stubs): Clear power10_stubs here instead. Don't + merge notoc stubs with other varieties when power10_stubs is "auto". + Instead dup the stub hash table entry. + (plt_stub_size, ppc_build_one_stub, ppc_size_one_stub): Adjust + tests of power10_stubs. -2019-08-15 Tom Tromey +2020-07-15 Alan Modra - * dwarf2.c (scan_unit_for_symbols): Check for end of CU, not end - of section. + PR 26239 + * coffgen.c (_bfd_coff_close_and_cleanup): Free dwarf2 info. -2019-08-14 Alan Modra +2020-07-15 Nick Clifton - PR 24623 - * dwarf2.c (stash_comp_unit): New function, extracted from.. - (_bfd_dwarf2_find_nearest_line): ..here. - (find_abstract_instance): Parse comp units and decode line info - as needed. + PR26240 + * coffgen.c (coff_get_normalized_symtab): Fix off-by-one error in + check for aux entries that overflow the buufer. -2019-08-14 Alan Modra +2020-07-15 Hans-Peter Nilsson - * dwarf2.c (comp_unit_maybe_decode_line_info): Declare. - (comp_unit_find_nearest_line): Use it here.. - (_bfd_dwarf2_find_symbol_bias): ..and here. + * elf64-mmix.c (mmix_elf_relax_section): Improve accounting for + R_MMIX_PUSHJ_STUBBABLE relocs against undefined symbols. -2019-08-14 Alan Modra +2020-07-15 Markus Böck + Alan Modra - * dwarf2.c (_bfd_dwarf2_find_nearest_line): Remove addr_size parameter. - * libbfd-in.h (_bfd_dwarf2_find_nearest_line): Update prototype. - * coffgen.c (coff_find_nearest_line_with_names): Adjust - _bfd_dwarf2_find_nearest_line calls. - * elf.c (_bfd_elf_find_nearest_line, _bfd_elf_find_line): Likewise. - * elf32-arm.c (elf32_arm_find_nearest_line): Likewise. - * elf64-alpha.c (elf64_alpha_find_nearest_line): Likewise. - * elfnn-aarch64.c (elfNN_aarch64_find_nearest_line): Likewise. - * elfxx-mips.c (_bfd_mips_elf_find_nearest_line): Likewise. - * mach-o.c (bfd_mach_o_find_nearest_line): Likewise. - * libbfd.h: Regenerate. + PR 26198 + * coffgen.c (_bfd_coff_section_already_linked): Allow for plugin + objects both before and after normal object files. + * elflink.c (_bfd_elf_section_already_linked): Likewise. -2019-08-09 Mihailo Stojanovic +2020-07-10 Alan Modra - * elf-bfd.h (struct elf_backend_data): New members. - * elflink.c (_bfd_elf_link_create_dynamic_sections): Create - .gnu.hash section if necessary. - (struct collect_gnu_hash_codes): New member. - (elf_gnu_hash_process_symidx): New function name. - (elf_renumber_gnu_hash_syms): Ignore local and undefined - symbols. Record xlat location for every symbol which should have - a .MIPS.xhash entry. - (bfd_elf_size_dynamic_sections): Add DT_GNU_HASH dynamic tag to - dynamic section if necessary. - (GNU_HASH_SECTION_NAME): New define. - (bfd_elf_size_dynsym_hash_dynstr): Get .MIPS.xhash section. - Update the section size info. - * elfxx-mips.c (struct mips_elf_hash_sort_data): New members. - (struct mips_elf_link_hash_entry): New member. - (mips_elf_link_hash_newfunc): Initialize .MIPS.xhash translation - table location. - (mips_elf_sort_hash_table): Initialize the pointer to the - .MIPS.xhash section. - (mips_elf_sort_hash_table_f): Populate the .MIPS.xhash - translation table entry with the symbol dynindx. - (_bfd_mips_elf_section_from_shdr): Add SHT_MIPS_XHASH. - (_bfd_mips_elf_fake_sections): Initialize .MIPS.xhash section - info. - (_bfd_mips_elf_create_dynamic_sections): Create .MIPS.xhash - section. - (_bfd_mips_elf_size_dynamic_sections): Add DT_MIPS_XHASH tag to - dynamic section. - (_bfd_mips_elf_finish_synamic_sections): Add DT_MIPS_XHASH. - (_bfd_mips_elf_final_write_processing): Set .MIPS.xhash section - sh_link info. - (_bfd_mips_elf_get_target_dtag): Get DT_MIPS_XHASH tag. - (MIPS_LIBC_ABI_XHASH): New ABI version enum value. - (_bfd_mips_post_process_headers): Mark the ABI version as - MIPS_LIBC_ABI_XHASH if there exists a .MIPS.xhash section, - but not a .hash section. - (_bfd_mips_elf_record_xhash_symbol): New function. Record a - position in the translation table, associated with the hash - entry. - * elfxx-mips.h (literal_reloc_p): Define - elf_backend_record_xhash_symbol backend hook. - * elfxx-target.h: Initialize elf_backend_record_xhash_symbol - backend hook. - -2019-08-07 Jose E. Marchesi - - * elf64-bpf.c (bpf_elf_relocate_section): New function. - (bpf_elf_insn_disp_reloc): Delete function. - (elf_backend_relocate_section): Define. - -2019-08-07 Alan Modra - - PR 24644 - * archive64.c (_bfd_archive_64_bit_slurp_armap): Properly check - for overflow in expressions involving nsymz. - -2019-08-01 Ilia Diachkov - - * elfnn-riscv.c (_bfd_riscv_relax_lui): Set lui relax safety area to - two pages in relro presence. - -2019-08-01 Max Filippov - - * elf32-xtensa.c (insn_num_slots, get_rsr_lend_opcode) - (get_wsr_lbeg_opcode): New functions. - (check_loop_aligned): Detect relaxed loops and adjust loop_len - and insn_len for the first actual instruction of the loop. + * elf64-ppc.h (struct ppc64_elf_params): Add power10_stubs. + * elf64-ppc.c (struct ppc_link_hash_table): Delete + power10_stubs. + (ppc64_elf_check_relocs): Adjust setting of power10_stubs. + (plt_stub_size, ppc_build_one_stub, ppc_size_one_stub): Adjust + uses of power10_stubs. -2019-07-30 Alan Modra +2020-07-09 Alan Modra - PR 24768 - * bfd.c (struct bfd): Add lto_slim_object flag. - * bfd-in2.h: Regenerate. + * coff-ppc.c: Delete. + * pe-ppc.c: Delete. + * pei-ppc.c: Delete. + * Makefile.am (BFD32_BACKENDS, BFD32_BACKENDS_CFILES): Remove PE PPC. + * coffcode.h (coff_set_arch_mach_hook, coff_set_flags): Remove + PPCMAGIC code. + (coff_write_object_contents): Remove PPC_PE code. + * config.bfd: Move powerpcle-pe to removed targets. + * configure.ac: Remove powerpc PE entries. + * libcoff-in.h (ppc_allocate_toc_section): Delete. + (ppc_process_before_allocation): Delete. + * peXXigen.c: Remove POWERPC_LE_PE code and comments. + * targets.c: Remove powerpc PE vectors. + * po/SRC-POTFILES.in: Regenerate. + * libcoff.h: Regenerate. + * Makefile.in: Regenerate. + * configure: Regenerate. -2019-07-29 Martin Liska +2020-07-09 Nick Clifton - PR 24768 - * archive.c (_bfd_compute_and_write_armap): Come up with - report_plugin_err variable. - * bfd-in2.h (struct bfd): Add lto_slim_object flag. - * elf.c (struct lto_section): New. - (_bfd_elf_make_section_from_shdr): Parse content of - .gnu_lto_.lto section. - * elflink.c: Report error for a missing LTO plugin. - * linker.c (_bfd_generic_link_add_one_symbol): Likewise. - -2019-07-28 Alan Modra - - PR 24857 - PR 24339 - * elflink.c (elf_link_add_object_symbols): Report an informative - error on finding local symbols with index equal or greater than - symbol table sh_info. Correct comment. Allow such symbols in - dynamic objects. Abort on NULL section for symbol. - -2019-07-26 Alan Modra - - * elf-bfd.h (struct output_elf_obj_tdata): Delete "linker" field. - (elf_linker): Don't define. - * elflink.c (bfd_elf_final_link): Don't set elf_linker. - -2019-07-25 YunQiang Su - - PR 24832 - * elfxx-mips.c (mips_set_isa_flags): Default to MIPS 3 for 64-bit - mips inputs. - -2019-07-24 Claudiu Zissulescu - - * elf32-arc.c (bfd_get_32_me): Add a small description, fix - formating. - (reloc_type_to_name): Fix formating. - (arc_elf_object_p): Likewise. - (debug_arc_reloc): Likewise. - (arc_do_relocation): Likewise. - -2019-07-24 Claudiu Zissulescu - - * elf32-arc.c (bfd_get_32_me): New function. - (bfd_put_32_me): Likewise. - (arc_elf_relax_section): Likewise. - (bfd_elf32_bfd_relax_section): Define. - -2019-07-24 Alan Modra - - * elf-bfd.h (struct elf_backend_data): Return bfd_boolean from - elf_backend_final_write_processing, don't pass linker arg. - (_bfd_elf_final_write_processing): Update prototype. - * elf.c (_bfd_elf_write_object_contents): Adjust call. - (_bfd_elf_final_write_processing): Return error on incompatible - OSABI and has_gnu_osabi. Remove linker arg. - * elf-nacl.h (nacl_final_write_processing): Update prototype. - * elf-vxworks.h (elf_vxworks_final_write_processing): Likewise. - * elfxx-mips.h (_bfd_mips_final_write_processing): Likewise. - (_bfd_mips_elf_final_write_processing): Likewise. - * elf-hppa.h (elf_hppa_final_write_processing): Return status - and remove linker arg. - * elf-m10300.c (_bfd_mn10300_elf_final_write_processing): Likewise. - * elf-nacl.c (nacl_final_write_processing): Likewise. - * elf-vxworks.c (elf_vxworks_final_write_processing): Likewise. - * elf32-arc.c (arc_elf_final_write_processing): Likewise. - * elf32-arm.c (arm_final_write_processing): Likewise. - (elf32_arm_final_write_processing): Likewise. - (elf32_arm_nacl_final_write_processing): Likewise. - (elf32_arm_vxworks_final_write_processing): Likewise. - * elf32-avr.c (bfd_elf_avr_final_write_processing): Likewise. - * elf32-bfin.c (elf32_bfin_final_write_processing): Likewise. - * elf32-cr16.c (_bfd_cr16_elf_final_write_processing): Likewise. - * elf32-cris.c (cris_elf_final_write_processing): Likewise. - * elf32-h8300.c (elf32_h8_final_write_processing): Likewise. - * elf32-lm32.c (lm32_elf_final_write_processing): Likewise. - * elf32-m32r.c (m32r_elf_final_write_processing): Likewise. - * elf32-m68k.c (elf_m68k_final_write_processing): Likewise. - * elf32-mips.c (mips_vxworks_final_write_processing): Likewise. - * elf32-msp430.c (bfd_elf_msp430_final_write_processing): Likewise. - * elf32-nds32.c (nds32_elf_final_write_processing): Likewise. - * elf32-or1k.c (or1k_elf_final_write_processing): Likewise. - * elf32-pj.c (pj_elf_final_write_processing): Likewise. - * elf32-ppc.c (ppc_final_write_processing): Likewise. - (ppc_elf_final_write_processing): Likewise. - (ppc_elf_vxworks_final_write_processing): Likewise. - * elf32-sparc.c (sparc_final_write_processing): Likewise. - (elf32_sparc_final_write_processing): Likewise. - (elf32_sparc_vxworks_final_write_processing): Likewise. - * elf32-v850.c (v850_elf_final_write_processing): Likewise. - * elf32-xc16x.c (elf32_xc16x_final_write_processing): Likewise. - * elf32-xtensa.c (elf_xtensa_final_write_processing): Likewise. - * elf64-ia64-vms.c (elf64_vms_final_write_processing): Likewise. - * elfnn-ia64.c (elfNN_ia64_final_write_processing): Likewise. - * elfxx-mips.c (_bfd_mips_final_write_processing): Likewise. - (_bfd_mips_elf_final_write_processing): Likewise. - -2019-07-24 Alan Modra - - * elf-vxworks.c (elf_vxworks_final_write_processing): Don't return - early. - * elf32-arc.c (arc_elf_final_write_processing): Likewise. - * elf32-xtensa.c (elf_xtensa_final_write_processing): Likewise. - -2019-07-24 Alan Modra - - * elf32-visium.c (visium_elf_post_process_headers): Don't set - EI_OSABI header byte here. - (ELF_OSABI): Define. - -2019-07-23 Alan Modra - - * elf-bfd.h (enum elf_gnu_osabi): Add elf_gnu_osabi_mbind. - * elf.c (_bfd_elf_make_section_from_shdr): Set elf_gnu_osabi_mbind. - (get_program_header_size): Formatting. Only test SH_GNU_MBIND - when elf_gnu_osabi_mbind is set. - (_bfd_elf_map_sections_to_segments): Likewise. - (_bfd_elf_init_private_section_data): Likewise. - (_bfd_elf_final_write_processing): Update comment. - * elf64-hppa.c (elf64_hppa_special_sections): Move .tbss entry. - (elf_backend_special_sections): Define without .tbss for linux. - -2019-07-23 Alan Modra - - * elf-bfd.h (enum elf_gnu_osabi): Rename from elf_gnu_symbols. - Remove none, any, all enums. - (struct elf_obj_tdata): Rename has_gnu_symbols field to has_gnu_osabi. - (_bfd_elf_final_write_processing): Declare. - * elf.c (_bfd_elf_write_object_contents): Unconditionally call - elf_backend_final_write_processing. - (_bfd_elf_post_process_headers): Move body of function to.. - (_bfd_elf_final_write_processing): ..here, but set EI_OSABI byte - only when not already set. Adjust for rename. - * elfxx-target.h (elf_backend_final_write_processing): Default to - _bfd_elf_final_write_processing. - * elf-hppa.h (elf_hppa_final_write_processing): Call - _bfd_elf_final_write_processing. - * elf-m10300.c (_bfd_mn10300_elf_final_write_processing): Likewise. - * elf-nacl.c (nacl_final_write_processing): Likewise. - * elf-vxworks.c (elf_vxworks_final_write_processing): Likewise. - * elf32-arc.c (arc_elf_final_write_processing): Likewise. - * elf32-avr.c (bfd_elf_avr_final_write_processing): Likewise. - * elf32-bfin.c (elf32_bfin_final_write_processing): Likewise. - * elf32-cr16.c (_bfd_cr16_elf_final_write_processing): Likewise. - * elf32-cris.c (cris_elf_final_write_processing): Likewise. - * elf32-h8300.c (elf32_h8_final_write_processing): Likewise. - * elf32-lm32.c (lm32_elf_final_write_processing): Likewise. - * elf32-m32r.c (m32r_elf_final_write_processing): Likewise. - * elf32-m68k.c (elf_m68k_final_write_processing): Likewise. - * elf32-msp430.c (bfd_elf_msp430_final_write_processing): Likewise. - * elf32-nds32.c (nds32_elf_final_write_processing): Likewise. - * elf32-or1k.c (or1k_elf_final_write_processing): Likewise. - * elf32-pj.c (pj_elf_final_write_processing): Likewise. - * elf32-v850.c (v850_elf_final_write_processing): Likewise. - * elf32-xc16x.c (elf32_xc16x_final_write_processing): Likewise. - * elf32-xtensa.c (elf_xtensa_final_write_processing): Likewise. - * elf64-ia64-vms.c (elf64_vms_final_write_processing): Likewise. - * elfnn-ia64.c (elfNN_ia64_final_write_processing): Likewise. - * elf32-arm.c (arm_final_write_processing): Split out from.. - (elf32_arm_final_write_processing): ..here. Call - _bfd_elf_final_write_processing. - (elf32_arm_nacl_final_write_processing): Adjust. - * elfxx-mips.c (_bfd_mips_final_write_processing): Split out from.. - (_bfd_mips_elf_final_write_processing): ..here. Call - _bfd_elf_final_write_processing. - * elfxx-mips.h (_bfd_mips_final_write_processing): Declare. - * elf32-mips.c (mips_vxworks_final_write_processing): Adjust. - * elf32-ppc.c (ppc_final_write_processing): Split out from.. - (ppc_elf_final_write_processing): ..here. Call - _bfd_elf_final_write_processing. - (ppc_elf_vxworks_final_write_processing): Adjust. - * elf32-sparc.c (sparc_final_write_processing): Split out from.. - (elf32_sparc_final_write_processing): ..here. Call - _bfd_elf_final_write_processing. - (elf32_sparc_vxworks_final_write_processing): Adjust. - * elf32-d10v.c (elf_backend_final_write_processing): Don't define. - * elf32-d30v.c (elf_backend_final_write_processing): Don't define. - * elf32-m68hc11.c (elf_backend_final_write_processing): Don't define. - * elf32-m68hc12.c (elf_backend_final_write_processing): Don't define. - * elf32-s12z.c (elf_backend_final_write_processing): Don't define. - * elf32-i386.c (elf_i386_check_relocs): Don't set has_gnu_symbols. - * elf64-x86-64.c (elf_x86_64_check_relocs): Likewise. - * elflink.c (elf_link_add_object_symbols): Likewise. - (elf_link_output_symstrtab): Set has_gnu_osabi for symbols here - instead. - -2019-07-23 Omar Majid - - * coffcode.h (coff_set_arch_mach_hook): Handle I386_APPLE_MAGIC, - I386_FREEBSD_MAGIC, I386_LINUX_MAGIC, I386_NETBSD_MAGIC, - AMD64_APPLE_MAGIC, AMD64_FREEBSD_MAGIC, AMD64_LINUX_MAGIC, - AMD64_NETBSD_MAGIC. - * peXXigen.c: Add comment about source of .NET magic numbers. - -2019-07-19 Alan Modra - - * reloc.c (BFD_RELOC_PPC64_TPREL34, BFD_RELOC_PPC64_DTPREL34), - (BFD_RELOC_PPC64_GOT_TLSGD34, BFD_RELOC_PPC64_GOT_TLSLD34), - (BFD_RELOC_PPC64_GOT_TPREL34, BFD_RELOC_PPC64_GOT_DTPREL34), - (BFD_RELOC_PPC64_TLS_PCREL): New pcrel tls relocs. - * elf64-ppc.c (ppc64_elf_howto_raw): Add howtos for pcrel tls relocs. - (ppc64_elf_reloc_type_lookup): Translate pcrel tls relocs. - (must_be_dyn_reloc, dec_dynrel_count): Add R_PPC64_TPREL64. - (ppc64_elf_check_relocs): Support pcrel tls relocs. - (ppc64_elf_tls_optimize, ppc64_elf_relocate_section): Likewise. - * bfd-in2.h: Regenerate. - * libbfd.h: Regenerate. + * po/fr.po: Updated French translation. -2019-07-18 Alan Modra +2020-07-07 Alan Modra - * elf64-ppc.c (ppc64_elf_relocate_section): Don't bother selecting - a TLS section symbol for edited relocs. Tighten TLS symbol/reloc - match test. + * xcofflink.c (xcoff_mark): Don't mark const sections. + (bfd_xcoff_record_link_assignment): Add FIXME. + (_bfd_xcoff_bfd_final_link): Don't segfault on assorted magic + sections being discarded by linker script. -2019-07-18 Alan Modra +2020-07-07 Alan Modra - * elf64-ppc.c (TLS_EXPLICIT): Define as 256. - (ppc64_elf_check_relocs): Don't store TLS_EXPLICIT even if char - is more than 8 bits. - (ppc64_elf_tls_optimize): Likewise. Make tls_set, tls_clear, and - tls_type vars unsigned int. - (ppc64_elf_relocate_section): Use r_type rather than TLS_EXPLICIT - to select r_type edit. + * coff-rs6000.c (xcoff_write_archive_contents_old): Set default + time, uid, gid and mode for deterministic archive. + (xcoff_write_archive_contents_big): Likewise. -2019-07-18 Alan Modra +2020-07-07 Alan Modra - * elf32-ppc.c (TLS_GDIE): Rename from TLS_TPRELGD throughout file. - Correct comment. - * elf64-ppc.c (TLS_GDIE): Likewise. + * coffcode.h (coff_classify_symbol): Handle C_HIDEXT and + C_AIX_WEAKEXT. -2019-07-18 Alan Modra +2020-07-06 Nick Clifton - * elf64-ppc.c (ppc64_elf_tls_optimize): Correct test for allowed - range of tp-relative offsets. + * po/pt.po: Updated Portuguese translation. + * po/uk.po: Updated Ukranian translation. -2019-07-15 Alan Modra +2020-07-04 Nick Clifton - * elflink.c (_bfd_elf_fix_symbol_flags): If the def for an - alias is no longer bfd_link_hash_defined, clear the alias. + * version.m4: Set version to 2.35.50. + * configure: Regenerate. + * po/bbfd.pot: Regenerate. -2019-07-13 Alan Modra +2020-07-04 Nick Clifton - * elflink.c (_bfd_elf_omit_section_dynsym_default): Don't keep - tls_sec. - (_bfd_elf_init_1_index_section): Prefer not using TLS sections. - (_bfd_elf_init_2_index_sections): Likewise. - * elf64-ppc.c (ppc64_elf_relocate_section): When emitting dynamic - relocations for local TLS symbols, use STN_UNDEF as the relocation - symbol. - * elf32-ppc.c (ppc_elf_relocate_section): Likewise, and don't - leave TLS symbol value in the addend. + Binutils 2.35 branch created. -2019-07-08 Alan Modra +2020-07-01 Alan Modra - PR 24785 - * elf32-ppc.c (_bfd_elf_ppc_set_arch): Sanity check .PPC.EMB.apuinfo - size before reading first word. + PR 26188 + * coffgen.c (coff_find_nearest_line_with_names): Sanity check + raw syment index before dereferencing. + +2020-07-01 Alan Modra + + * elf32-i386.c (elf_backend_object_p): Undef for vxworks. + +2020-07-01 Alan Modra + + * config.bfd: Obsolete xc16x. + +2020-06-30 H.J. Lu + + * archures.c (bfd_mach_i386_nacl): Removed. + (bfd_mach_i386_i386_nacl): Likewise. + (bfd_mach_x86_64_nacl): Likewise. + (bfd_mach_x64_32_nacl): Likewise. + * config.bfd: Remove *-*-nacl* targets. + * configure.ac: Remove x86 NaCl target vectors. + * cpu-i386.c (bfd_arch_i386_onebyte_nop_fill): Removed. + (bfd_x64_32_nacl_arch): Likewise. + (bfd_x86_64_nacl_arch): Likewise. + (bfd_i386_nacl_arch): Likewise. + (bfd_x64_32_arch_intel_syntax): Updated. + * elf32-i386.c: Don't include "elf-nacl.h". + (elf_i386_nacl_plt): Removed. + (elf_i386_nacl_plt0_entry): Likewise. + (elf_i386_nacl_plt_entry): Likewise. + (elf_i386_nacl_pic_plt0_entry): Likewise. + (elf_i386_nacl_pic_plt_entry): Likewise. + (elf_i386_nacl_eh_frame_plt): Likewise. + (elf_i386_nacl_plt): Likewise. + (elf32_i386_nacl_elf_object_p): Likewise. + (elf_i386_get_synthetic_symtab): Updated. + (elf_i386_link_setup_gnu_properties): Likewise. + * elf64-x86-64.c: Don't include "elf-nacl.h". + (elf_x86_64_nacl_plt): Removed. + (elf64_x86_64_nacl_elf_object_p): Likewise. + (elf_x86_64_nacl_plt0_entry): Likewise. + (elf_x86_64_nacl_plt_entry): Likewise. + (elf_x86_64_nacl_eh_frame_plt): Likewise. + (elf_x86_64_nacl_plt): Likewise. + (elf32_x86_64_nacl_elf_object_p): Likewise. + (elf_x86_64_get_synthetic_symtab): Updated. + (elf_x86_64_link_setup_gnu_properties): Likewise. + * elfxx-x86.c (_bfd_x86_elf_link_setup_gnu_properties): Likewise. + * targets.c: Remove x86 NaCl target vectors. + * bfd-in2.h: Regenerated. + * configure: Likewise. -2019-07-02 Nick Clifton +2020-06-29 H.J. Lu - PR 24717 - * elf.c (is_debuginfo_file): New function. - (assign_file_positions_for_non_load_sections): Do not warn about - allocated sections outside of loadable segments if they are found - in a debuginfo file. - * elf-bfd.h (is_debuginfo_file): Prototype. + * elf32-tic6x.c (elf32_tic6x_size_dynamic_sections): Call + _bfd_elf_add_dynamic_tags. -2019-07-02 Nick Clifton +2020-06-29 Alan Modra - PR 24753 - * compress.c (bfd_get_full_section_contents): Do not complain - about linker created sections that are larger than the file size. + * peXXigen.c (_bfd_XXi_slurp_codeview_record): Properly check + return value of bfd_bread. Don't read more than requested length. + Sanity check length. Properly terminate file name. + +2020-06-29 Alan Modra + + * arc-got.h: Use C style comments. + * coff-z80.c: Likewise. + * elf32-csky.c: Likewise. + * peXXigen.c: Likewise. + * elf32-m32c.c (m32c_elf_relax_delete_bytes): Remove commented out + code. + +2020-06-26 Pat Bernardi + + * elf32-m68k.c (m68k_elf_merge_obj_attributes): New function. + (elf32_m68k_merge_private_bfd_data): Merge GNU attributes. + +2020-06-26 Alan Modra + + * elfxx-riscv.c (struct priv_spec_t, priv_specs), + (riscv_get_priv_spec_class, riscv_get_priv_spec_class_from_numbers), + (riscv_get_priv_spec_name): Move to.. + * cpu-riscv.c: ..here. + (riscv_get_priv_spec_class_from_numbers): Don't xmalloc temp buffer. + Use %u to print unsigned numbers. + +2020-06-24 Andrew Burgess + + * cpu-riscv.c (riscv_scan): Don't allow shorter matches using the + default architecture. + +2020-06-24 H.J. Lu + + PR ld/26083 + * elf32-csky.c (csky_elf_size_dynamic_sections): Call + _bfd_elf_add_dynamic_tags. + +2020-06-24 H.J. Lu + + PR ld/26083 + * elf32-cris.c (elf_cris_size_dynamic_sections): Call + _bfd_elf_add_dynamic_tags. + +2020-06-24 Alan Modra + + * vms-alpha.c (_bfd_vms_slurp_etir ): Implement + shifts without undefined behaviour. + +2020-06-23 H.J. Lu + + * elf-bfd.h (elf_link_hash_table): Add dt_pltgot_required and + dt_jmprel_required. + (_bfd_elf_add_dynamic_tags): New. + * elf-m10300.c (_bfd_mn10300_elf_size_dynamic_sections): Call + _bfd_elf_add_dynamic_tags. + * elf32-arc.c (elf_arc_size_dynamic_sections): Likewise. + * elf32-bfin.c (elf32_bfinfdpic_size_dynamic_sections): Likewise. + * elf32-cr16.c (_bfd_cr16_elf_size_dynamic_sections): Likewise. + * elf32-frv.c (elf32_frvfdpic_size_dynamic_sections): Likewise. + * elf32-lm32.c (lm32_elf_size_dynamic_sections): Likewise. + * elf32-m32r.c (m32r_elf_size_dynamic_sections): Likewise. + * elf32-m68k.c (elf_m68k_size_dynamic_sections): Likewise. + * elf32-microblaze.c (microblaze_elf_size_dynamic_sections): + Likewise. + * elf32-nds32.c (nds32_elf_size_dynamic_sections): Likewise. + * elf32-nios2.c (nios2_elf32_size_dynamic_sections): Likewise. + * elf32-or1k.c (or1k_elf_size_dynamic_sections): Likewise. + * elf32-s390.c (elf_s390_size_dynamic_sections): Likewise. + * elf32-tilepro.c (tilepro_elf_size_dynamic_sections): Likewise. + * elf32-vax.c (elf_vax_size_dynamic_sections): Likewise. + * elf64-alpha.c (elf64_alpha_size_dynamic_sections): Likewise. + * elf64-s390.c (elf_s390_size_dynamic_sections): Likewise. + * elfnn-aarch64.c (elfNN_aarch64_size_dynamic_sections): + Likewise. + * elfnn-riscv.c (riscv_elf_size_dynamic_sections): Likewise. + * elfxx-tilegx.c (tilegx_elf_size_dynamic_sections): Likewise. + * elf32-arm.c (elf32_arm_size_dynamic_sections): Call + _bfd_elf_maybe_vxworks_add_dynamic_tags. + * elf32-ppc.c (ppc_elf_size_dynamic_sections): Likewise. + * elfxx-sparc.c (_bfd_sparc_elf_size_dynamic_sections): + Likewise. + * elfxx-x86.c (_bfd_x86_elf_link_hash_table_create): Likewise. + (_bfd_x86_elf_size_dynamic_sections): Likewise. + * elfxx-x86.h (elf_x86_link_hash_table): Remove dt_reloc, + dt_reloc_sz and dt_reloc_ent. + * elf-vxworks.c (_bfd_elf_maybe_vxworks_add_dynamic_tags): New. + * elf-vxworks.h (_bfd_elf_maybe_vxworks_add_dynamic_tags): + Likewise. + * elf32-hppa.c (elf32_hppa_link_hash_table_create): Set + etab.dt_pltgot_required. + (elf32_hppa_size_dynamic_sections): Call + _bfd_elf_add_dynamic_tags. + * elf32-metag.c (elf_metag_link_hash_table_create): Set + etab.dt_pltgot_required. + (elf_metag_size_dynamic_sections): Call _bfd_elf_add_dynamic_tags. + * elf32-sh.c (sh_elf_link_hash_table_create): Set + root.dt_pltgot_required for FDPIC output. + (sh_elf_size_dynamic_sections): Call + _bfd_elf_maybe_vxworks_add_dynamic_tags. + * elf32-xtensa.c (elf_xtensa_link_hash_table_create): Set + elf.dt_pltgot_required. + (elf_xtensa_size_dynamic_sections): Call + _bfd_elf_add_dynamic_tags. + * elf64-hppa.c (elf64_hppa_hash_table_create): Set + root.dt_pltgot_required. + (elf64_hppa_size_dynamic_sections): Call + _bfd_elf_add_dynamic_tags. + * elfnn-ia64.c (elfNN_ia64_hash_table_create): Set + root.dt_pltgot_required. + (elfNN_ia64_size_dynamic_sections): Set root.dt_jmprel_required + for rel_pltoff_sec. Call _bfd_elf_add_dynamic_tags. + * elflink.c (_bfd_elf_add_dynamic_tags): New. + +2020-06-22 Saagar Jha + + * mach-o.c: Support the new load commands by reading a linkedit + data command for them. + +2020-06-22 Nelson Chu + + * elfxx-riscv.c (struct priv_spec_t priv_specs[]): Move them from + opcodes/riscv-opc.c to bfd/elfxx-riscv.c, since we need it in linker. + (riscv_get_priv_spec_class): Likewise. + (riscv_get_priv_spec_name): Likewise. + (riscv_get_priv_spec_class_from_numbers): New function, convert + the version numbers into string, then call riscv_get_priv_spec_class + to get the priv spec class. + * elfxx-riscv.h (riscv_get_priv_spec_class): Move forward declaration + from include/opcode/riscv.h to bfd/elfxx-riscv.h. + (riscv_get_priv_spec_name): Likewise. + (riscv_get_priv_spec_class_from_numbers): New forward declaration. + (opcode/riscv.h): Include it in the header rather than elfxx-riscv.c. + * elfnn-riscv.c (riscv_merge_attributes): Get the priv spec classes + of input and output objects form their priv spec attributes by + riscv_get_priv_spec_class_from_numbers. Report warning rather than + errors when linking objects with differnet priv spec versions. We do + know v1.9.1 may have conflicts to other versions, so report the + warning, too. After that, update the output priv spec version to the + newest one so far. + +2020-06-22 Nelson Chu + + * elfnn-riscv.c (riscv_merge_attributes): Once we meet one of the + priv attributes, we will check the conflicts for all of them (major, + minor and revision), and then set the priv_attrs_merged to TRUE to + indicate that we have handled all of the priv attributes. Remove + the unused boolean priv_may_conflict, in_priv_zero and out_priv_zero. + +2020-06-21 Alan Modra + + PR 26132 + * configure.ac: Disable plugins by default for some targets. + * plugin.c: Comment typo fix. + * configure: Regenerate. -2019-07-02 Christophe Lyon +2020-06-19 Nick Clifton - * bfd/elf32-arm.c (CMSE_STUB_NAME): New define. - (elf32_arm_get_stub_entry): Do not try to emit long-branch stubs - for CMSE stubs. - (arm_dedicated_stub_output_section_name): Use CMSE_STUB_NAME. + * plugin.c (try_load_plugin): Suppress the error message about + being unable to open a plugin if creating a list of viable + plugins. + +2020-06-16 Alan Modra + + * aout-tic30.c: Delete file. + * Makefile.am (BFD32_BACKENDS): Remove aout-tic30.lo. + (BFD32_BACKENDS_CFILES): Remove aout-tic30.c. + * config.bfd (c30-*-*aout*, tic30-*-*aout*): Remove entry. + (xc16x-*-elf): Sort properly. + * configure.ac: Remove tic30_aout_vec. + * targets.c: Likewise. + * Makefile.in: Regenerate. + * configure: Regenerate. + * po/SRC-POTFILES.in: Regenerate. -2019-07-02 Srinath Parvathaneni +2020-06-15 Max Filippov - * elf32-arm.c (elf32_arm_gc_mark_extra_sections): Mark debug - sections when .text section contain secure entry functions - is marked. + * elf32-xtensa.c (XSHAL_ABI, XTHAL_ABI_UNDEFINED) + (XTHAL_ABI_WINDOWED, XTHAL_ABI_CALL0): New macros. + (elf32xtensa_abi): New global variable. + (xtensa_abi_choice): New function. + (elf_xtensa_create_plt_entry): Use xtensa_abi_choice instead of + XSHAL_ABI to select PLT code. + +2020-06-15 Roland McGrath + + * elflink.c (bfd_elf_define_start_stop): Use start_stop_visibility + field of bfd_link_info. + +2020-06-15 Alan Modra + + * config.bfd: Obsolete powerpcle-*-pe targets. + +2020-06-15 Alan Modra + + PR 26103 + * elflink.c (elf_link_add_archive_symbols): Exclude undefined + symbols that were defined in discarded sections. + * cofflink.c (coff_link_check_archive_element): Likewise. + (coff_link_add_symbols): Set indx to -3 for symbols defined in + discarded sections. + (_bfd_coff_write_global_sym): Don't emit such symbols. + libcoff-in.h (struct coff_link_hash_entry): Update indx comment. + libcoff.h: Regenerate. + +2020-06-11 Alan Modra + + PR 26107 + * pdp11.c (is_stab): Replace legacy "index" function with "strchr". + +2020-06-10 H.J. Lu + + * elfnn-ia64.c (elfNN_ia64_link_hash_table): Remove reltext. + (allocate_dynrel_entries): Set DF_TEXTREL instead of reltext. + (elfNN_ia64_size_dynamic_sections): Check DF_TEXTREL instead + of reltext. + +2020-06-10 H.J. Lu + + PR ld/26094 + * elflink.c (bfd_elf_define_start_stop): Handle common symbols. + Clear verinfo.verdef. + +2020-06-09 H.J. Lu + + PR ld/18801 + * elf-bfd.h (elf_link_hash_table): Add ifunc_resolvers. + (_bfd_elf_allocate_ifunc_dyn_relocs): Remove the + bfd_boolean * argument. Set ifunc_resolvers if there are IFUNC + resolvers. + * elf-ifunc.c (_bfd_elf_allocate_ifunc_dyn_relocs): Updated. + Set ifunc_resolvers if there are FUNC resolvers. + * elf64-ppc.c (ppc_link_hash_table): Remove local_ifunc_resolver. + (build_global_entry_stubs_and_plt): Replace local_ifunc_resolver + with elf.ifunc_resolvers. + (write_plt_relocs_for_local_syms): Likewise. + (ppc64_elf_relocate_section): Likewise. + (ppc64_elf_finish_dynamic_sections): Likewise. + * elfnn-aarch64.c (elfNN_aarch64_allocate_ifunc_dynrelocs): + Updated. + * elfxx-x86.c (elf_x86_allocate_dynrelocs): Likewise. + (_bfd_x86_elf_size_dynamic_sections): Check elf.ifunc_resolvers + instead of readonly_dynrelocs_against_ifunc. + * elfxx-x86.h (elf_x86_link_hash_table): Remove + readonly_dynrelocs_against_ifunc. + +2020-06-09 Alan Modra + + * elf64-ppc.c (struct ppc_link_hash_table): Delete + maybe_local_ifunc_resolver field. + (build_global_entry_stubs_and_plt): Set local_ifunc_resolver in + cases where maybe_local_ifunc_resolver was set. + (ppc64_elf_relocate_section): Likewise. + (ppc64_elf_finish_dynamic_sections): Downgrade ifunc with textrel + error to a warning. -2019-07-01 Nick Clifton +2020-06-08 H.J. Lu - PR 23839 - * elf32-arm.c (elf32_arm_update_relocs): Do not include the - section VMA in the offset used to update exidx relocs. + * elf-bfd.h (elf_link_hash_entry): Add tlsdesc_plt and + tlsdesc_got. + * elf32-arm.c (elf32_arm_link_hash_table): Remove tlsdesc_plt + and dt_tlsdesc_got. + (elf32_arm_size_dynamic_sections): Updated. Clear + root.tlsdesc_plt for DF_BIND_NOW. + (elf32_arm_finish_dynamic_sections): Updated. + (elf32_arm_output_arch_local_syms): Likewise. + * elf32-nds32.c (nds32_elf_size_dynamic_sections): Updated. + Clear root.tlsdesc_plt for DF_BIND_NOW. + (nds32_elf_finish_dynamic_sections): Updated. + * elf32-nds32.h (elf_nds32_link_hash_table): Remove + dt_tlsdesc_plt and dt_tlsdesc_got. + * elf64-x86-64.c (elf_x86_64_finish_dynamic_sections): Updated. + * elfnn-aarch64.c (elf_aarch64_link_hash_table): Remove + tlsdesc_plt and dt_tlsdesc_got. + (elfNN_aarch64_allocate_dynrelocs): Updated. + (elfNN_aarch64_finish_dynamic_sections): Likewise. + (elfNN_aarch64_size_dynamic_sections): Updated. Clear + root.tlsdesc_plt for DF_BIND_NOW. Don't check DF_BIND_NOW + twice. + * elfxx-x86.c (elf_x86_allocate_dynrelocs): Updated. + (_bfd_x86_elf_size_dynamic_sections): Likewise. + (_bfd_x86_elf_finish_dynamic_sections): Likewise. + * elfxx-x86.h (elf_x86_link_hash_table): Remove tlsdesc_plt and + tlsdesc_got. + +2020-06-07 H.J. Lu + + * elf32-tic6x.c (elf32_bed): Defined the default to + elf32_tic6x_bed. + +2020-06-07 H.J. Lu + + * elf64-hppa.c (elf64_hppa_link_hash_table): Remove plt_sec and + plt_rel_sec. + (elf64_hppa_check_relocs): Replace plt_sec/plt_rel_sec with + root.splt/root.srelplt. + (elf64_hppa_create_dynamic_sections): Likewise. + (elf64_hppa_size_dynamic_sections): Likewise. + (elf64_hppa_finish_dynamic_symbol): Likewise. + (elf_hppa_final_link): Likewise. + (elf_hppa_final_link_relocate): Likewise. -2019-06-28 Nick Clifton +2020-06-06 H.J. Lu - PR 24708 - * elf.c (_bfd_elf_slurp_version_tables): Check for an excessively - large version reference section. - * compress.c (bfd_get_full_section_contents): Check for an - uncompressed section whose size is larger than the file size. + * elfxx-sparc.c (_bfd_sparc_elf_size_dynamic_sections): Updated. + * elfxx-sparc.h (_bfd_sparc_elf_link_hash_table): Remove + is_vxworks. + +2020-06-06 H.J. Lu + + * elf-bfd.h (elf_target_os): New. + (elf_link_hash_table): Add target_os. + (elf_backend_data): Add target_os. + * elf32-arm.c (elf32_arm_link_hash_table): Remove vxworks_p, + symbian_p and nacl_p. + (create_got_section): Updated. + (elf32_arm_create_dynamic_sections): Likewise. + (arm_type_of_stub): Likewise. + (elf32_arm_create_or_find_stub_sec): Likewise. + (elf32_arm_allocate_plt_entry): Likewise. + (elf32_arm_populate_plt_entry): Likewise. + (elf32_arm_final_link_relocate): Likewise. + (elf32_arm_check_relocs): Likewise. + (allocate_dynrelocs_for_symbol): Likewise. + (elf32_arm_finish_dynamic_symbol): Likewise. + (elf32_arm_finish_dynamic_sections): Likewise. + (elf32_arm_output_plt_map_1): Likewise. + (elf32_arm_output_arch_local_syms): Likewise. + (elf32_arm_add_symbol_hook): Likewise. + (elf32_arm_nacl_link_hash_table_create): Likewise. + (elf32_arm_vxworks_link_hash_table_create): Likewise. + (elf32_arm_symbian_link_hash_table_create): Likewise. + (ELF_TARGET_OS): New. + * elf32-i386.c (elf_i386_arch_bed): Removed. + (elf_backend_arch_data): Likewise. + (elf_i386_solaris_arch_bed): Likewise. + (elf_i386_nacl_arch_bed): Likewise. + (elf_i386_vxworks_arch_bed): Likewise. + (elf_i386_relocate_section): Updated. + (elf_i386_finish_dynamic_sections): Likewise. + (elf_i386_get_synthetic_symtab): Likewise. + (elf_i386_link_setup_gnu_properties): Likewise. + (ELF_TARGET_OS): New. + * elf32-mips.c (ELF_TARGET_OS): New. + * elf32-ppc.c (ppc_elf_link_hash_table): Remove is_vxworks. + (ppc_elf_create_got): Updated. + (ppc_elf_create_dynamic_sections): Likewise. + (ppc_elf_check_relocs): Likewise. + (ppc_elf_adjust_dynamic_symbol): Likewise. + (ppc_elf_size_dynamic_sections): Likewise. + (ppc_elf_relocate_section): Likewise. + (ppc_elf_finish_dynamic_sections): Likewise. + (ppc_elf_vxworks_link_hash_table_create): Likewise. + (ELF_TARGET_OS): New. + * elf32-sh.c (elf_sh_link_hash_table): Remove vxworks_p. + (sh_elf_link_hash_table_create): Updated. + (sh_elf_create_dynamic_sections): Likewise. + (allocate_dynrelocs): Likewise. + (sh_elf_size_dynamic_sections): Likewise. + (sh_elf_relocate_section): Likewise. + (sh_elf_finish_dynamic_symbol): Likewise. + (sh_elf_finish_dynamic_sections): Likewise. + (ELF_TARGET_OS): New. + * elf32-sparc.c (elf32_sparc_vxworks_link_hash_table_create): + Removed. + (bfd_elf32_bfd_link_hash_table_create): Likewise. + (ELF_TARGET_OS): New. + * elf64-x86-64.c (elf_x86_64_arch_bed): Removed. + (elf_x86_64_solaris_arch_bed): Likewise. + (elf_x86_64_nacl_arch_bed): Likewise. + (elf_x86_64_finish_dynamic_sections): Updated. + (elf_x86_64_get_synthetic_symtab): Likewise. + (elf_x86_64_link_setup_gnu_properties): Likewise. + (ELF_TARGET_OS): New. + * elflink.c (_bfd_elf_link_hash_table_init): Initialize + target_o. + * elfxx-mips.c (mips_elf_link_hash_table): Remove is_vxworks. + (MIPS_ELF_REL_DYN_NAME): Updated. + (ELF_MIPS_GP_OFFSET): Likewise. + (mips_elf_create_local_got_entry): Likewise. + (mips_elf_allocate_dynamic_relocations): Likewise. + (mips_elf_count_got_symbols): Likewise. + (is_gott_symbol): Likewise. + (mips_elf_calculate_relocation): Likewise. + (mips_elf_create_dynamic_relocation): Likewise. + (_bfd_mips_elf_check_relocs): Likewise. + (allocate_dynrelocs): Likewise. + (_bfd_mips_elf_adjust_dynamic_symbol): Likewise. + (mips_elf_lay_out_got): Likewise. + (mips_elf_set_plt_sym_value): Likewise. + (_bfd_mips_elf_size_dynamic_sections): Likewise. + (_bfd_mips_elf_finish_dynamic_symbol): Likewise. + (_bfd_mips_elf_finish_dynamic_sections): Likewise. + (_bfd_mips_elf_final_link): Likewise. + (_bfd_mips_init_file_header): Likewise. + * elfxx-sparc.c (_bfd_sparc_elf_create_dynamic_sections): + Likewise. + (allocate_dynrelocs): Likewise. + (_bfd_sparc_elf_size_dynamic_sections): Likewise. + (_bfd_sparc_elf_relocate_section): Likewise. + (_bfd_sparc_elf_finish_dynamic_symbol): Likewise. + (sparc_finish_dyn): Likewise. + (_bfd_sparc_elf_finish_dynamic_sections): Likewise. + * elfxx-target.h (ELF_TARGET_OS): New. + (elfNN_bed): Add ELF_TARGET_OS. + * elfxx-x86.c (elf_x86_allocate_dynrelocs): Updated. + (_bfd_x86_elf_link_hash_table_create): Likewise. + (_bfd_x86_elf_size_dynamic_sections): Likewise. + (_bfd_x86_elf_finish_dynamic_sections): Likewise. + (_bfd_x86_elf_adjust_dynamic_symbol): Likewise. + (_bfd_x86_elf_link_setup_gnu_properties): Likewise. + * elfxx-x86.h (elf_x86_target_os): Removed. + (elf_x86_backend_data): Likewise. + (get_elf_x86_backend_data): Likewise. + (elf_x86_link_hash_table): Remove target_os. + +2020-06-06 Alan Modra + + * reloc.c: Rename + BFD_RELOC_PPC64_GOT_TLSGD34 to BFD_RELOC_PPC64_GOT_TLSGD_PCREL34, + BFD_RELOC_PPC64_GOT_TLSLD34 to BFD_RELOC_PPC64_GOT_TLSLD_PCREL34, + BFD_RELOC_PPC64_GOT_TPREL34 to BFD_RELOC_PPC64_GOT_TPREL_PCREL34, + BFD_RELOC_PPC64_GOT_DTPREL34 to BFD_RELOC_PPC64_GOT_DTPREL_PCREL34. + * elf64-ppc.c: Update throughout for reloc renaming. + (ppc64_elf_reloc_name_lookup): Handle old reloc names. + * libbfd.h: Regenerate. + * bfd-in2.h: Regenerate. -2019-06-28 Alan Modra +2020-06-05 H.J. Lu - * format.c (bfd_check_format_matches): Don't match plugin target - if another target matches. Expand comment. - * targets.c (_bfd_target_vector): Move plugin_vec after all other - non-corefile targets, outside !SELECT_VECS. - * config.bfd: Don't handle targ=plugin here. - * configure.ac: Don't add plugin to enable_targets or handle in - target loop setting selvecs and other target vars. - * configure: Regenerate. + PR ld/26080 + * elf32-bfin.c (bfinfdpic_relocate_section): Skip non SEC_ALLOC + section. -2019-06-26 Nick Clifton +2020-06-05 Nick Clifton - PR 24703 - * mach-o-arm.c (bfd_mach_o_arm_canonicalize_one_reloc): Add error - messages for failures. - * mach-o.c (bfd_mach_o_canonicalize_relocs): Set an bfd error code - if returning an error value. + * pdp11.c (aout_link_add_symbols): Fix use before initialisation + bug. -2019-06-25 Jan Beulich +2020-06-05 Nelson Chu - * elf-properties.c (elf_find_and_remove_property): Rename last - parameter. Mention it in comment. + * elfnn-riscv.c (riscv_merge_attributes): Add new boolean + priv_may_conflict, in_priv_zero and out_priv_zero to decide + whether the object can be linked according to it's priv + attributes. The object without any priv spec attributes can + be linked with others. If the first input object doesn't contain + any priv attributes, then we need to copy the setting from the + next input one. Also report more detailed error messages to user. + +2020-06-04 Stephen Casner + + Extend pdp11-aout symbol table format to accommodate .stab + symbols and implement correct handling of them. + + * pdp11.c (pdp11_external_nlist): Repurposed e_unused to e_desc. + (N_STAB, is_stab): Needed new function is_stab to disambiguate + normal vs. .stab symbol table type values, replacing N_STAB mask. + (translate_from_native_sym_flags): Determine correct section for + different .stab types. + (translate_to_native_sym_flags): Leave .stab types intact. + (translate_symbol_table): Error if symbol indicates overlay; + store desc field from .stab symbols. + (write_syms): Output desc field with symbol. + (aout_link_check_ar_symbols): Skip .stab symbols. + (aout_link_add_symbols): Correctly distinguish .stab symbols. + (aout_link_write_other_symbol): Write 0 for desk and ovly fields. + (aout_link_write_symbols): Write 0 for desk and ovly fields; + correctly distinguish .stab symbols and select calculate their + section and value; and copy desc and ovly fields from input symbol + to output symbol. + +2020-06-04 Stephen Casner + + * aoutx.h (translate_symbol_table): Comment had external and + internal swapped. + * pdp11.c (translate_symbol_table): Likewise. + +2020-06-04 H.J. Lu + + * elfxx-x86.h (elf_x86_link_hash_table): Remove target_id. + (is_x86_elf): Check elf.hash_table_id instead of target_id. + * elfxx-x86.c (_bfd_x86_elf_link_hash_table_create): Updated. + +2020-06-04 H.J. Lu + + PR ld/26080 + * elf-m10300.c (mn10300_elf_relocate_section): Resolve relocation + in debug section against symbol defined in shared library to 0. + * elf32-i386.c (elf_i386_check_relocs): Remove SEC_ALLOC check. + * elf32-lm32.c (lm32_elf_check_relocs): Likewise. + * elf32-m32r.c (m32r_elf_check_relocs): Likewise. + * elf32-nds32.c (nds32_elf_check_relocs): Likewise. + * elf32-nios2.c (nios2_elf32_check_relocs): Likewise. + * elf32-or1k.c (or1k_elf_check_relocs): Likewise. + * elf32-ppc.c (ppc_elf_check_relocs): Likewise. + * elf32-sh.c (sh_elf_check_relocs): Likewise. + * elf32-xtensa.c (elf_xtensa_check_relocs): Likewise. + * elf64-alpha.c (elf64_alpha_check_relocs): Likewise. + * elf64-ppc.c (ppc64_elf_check_relocs): Likewise. + * elf64-x86-64.c (elf_x86_64_check_relocs): Likewise. + * elfxx-mips.c (_bfd_mips_elf_check_relocs): Likewise. + * elf32-vax.c (elf_vax_check_relocs): Set non_got_ref for non-GOT + reference. + (elf_vax_adjust_dynamic_symbol): Generate a copy reloc only if + there is non-GOT reference. + * elflink.c (_bfd_elf_link_check_relocs): Skip non-loaded, + non-alloced sections. + +2020-06-03 Stephen Casner + + Copy several years of fixes from bfd/aoutx.h to bfd/pdp11.c. + + * pdp11.c (some_aout_object_p): 4c1534c7a2a - Don't set EXEC_P for + files with relocs. + (aout_get_external_symbols): 6b8f0fd579d - Return if count is zero. + 0301ce1486b PR 22306 - Handle stringsize of zero, and error for any + other size that doesn't qcover the header word. + bf82069dce1 PR 23056 - Allocate an extra byte at the end of the + string table, and zero it. + (translate_symbol_table): 0d329c0a83a PR 22887 - Print an error + message and set bfd_error on finding an invalid name string offset. + (add_to_stringtab): INLINE -> inline + (pdp11_aout_swap_reloc_in): 116acb2c268 PR 22887 - Correct r_index + bound check. + (squirt_out_relocs): e2996cc315d PR 20921 - Check for and report + any relocs that could not be recognised. + 92744f05809 PR 20929 - Check for relocs without an associated symbol. + (find_nearest_line): 808346fcfcf PR 23055 - Check that the symbol + name exists and is long enough, before attempting to see if it is + for a .o file. + c3864421222 - Correct case for N_SO being the last symbol. + 50455f1ab29 PR 20891 - Handle the case where the main file name + and the directory name are both empty. + e82ab856bb4 PR 20892 - Handle the case where function name is empty. + (aout_link_add_symbols): e517df3dbf7 PR 19629 - Check for out of + range string table offsets. + 531336e3a0b PR 20909 - Fix off-by-one error in check for an + illegal string offset. + (aout_link_includes_newfunc): Add comment. + (pdp11_aout_link_input_section): ad756e3f9e6 - Return with an error + on unexpected relocation type rather than ASSERT. + +2020-06-03 H.J. Lu + + PR ld/26066 + * elf32-nios2.c (nios2_elf32_size_dynamic_sections): Call + _bfd_elf_maybe_set_textrel to set DF_TEXTREL. + +2020-06-03 H.J. Lu + + PR ld/26066 + * elf32-nios2.c (nios2_elf32_check_relocs): Skip non-loaded, + non-alloced sections. + +2020-06-03 H.J. Lu + + * elf32-frv.c (elf32_frv_relocate_section): Don't generate + dynamic relocations for non SEC_ALLOC sections. + +2020-06-03 Gunther Nikl + + * aout64.c (BMAGIC, QMAGIC): Do not define. + * aoutx.h (N_IS_BMAGIC, N_SET_QMAGIC): New defines. + (NAME (aout, some_aout_object_p)): Use N_IS_QMAGIC and N_IS_BMAGIC + to check the file format. + (adjust_z_magic): Use N_SET_QMAGIC to set file format. + * i386aout.c (NO_WRITE_HEADER_KLUDGE): Delete define. + * libaout.h (NO_WRITE_HEADER_KLUDGE): Do not define. + +2020-06-03 H.J. Lu + + * elf32-arc.c (elf_arc_relocate_section): Don't generate dynamic + relocations for non SEC_ALLOC sections. + +2020-06-03 H.J. Lu + + * elf-bfd.h (_bfd_elf_maybe_set_textrel): New + * elf32-arm.c (maybe_set_textrel): Removed. + (elf32_arm_size_dynamic_sections): Replace maybe_set_textrel + with _bfd_elf_maybe_set_textrel. + * elf32-csky.c (maybe_set_textrel): Removed. + (csky_elf_size_dynamic_sections): Replace maybe_set_textrel + with _bfd_elf_maybe_set_textrel. + * elf32-hppa.c (maybe_set_textrel): Removed. + (elf32_hppa_size_dynamic_sections): Replace maybe_set_textrel + with _bfd_elf_maybe_set_textrel. + * elf32-lm32.c (maybe_set_textrel): Removed. + (lm32_elf_size_dynamic_sections): Replace maybe_set_textrel + with _bfd_elf_maybe_set_textrel. + * elf32-m32r.c (maybe_set_textrel): Removed. + (m32r_elf_size_dynamic_sections): Replace maybe_set_textrel + with _bfd_elf_maybe_set_textrel. + * elf32-metag.c (maybe_set_textrel): Removed. + (elf_metag_size_dynamic_sections): Replace maybe_set_textrel + with _bfd_elf_maybe_set_textrel. + * elf32-nds32.c (maybe_set_textrel): Removed. + (nds32_elf_size_dynamic_sections): Replace maybe_set_textrel + with _bfd_elf_maybe_set_textrel. + * elf32-or1k.c (maybe_set_textrel): Removed. + (or1k_elf_size_dynamic_sections): Replace maybe_set_textrel + with _bfd_elf_maybe_set_textrel. + * elf32-ppc.c (maybe_set_textrel): Removed. + (ppc_elf_size_dynamic_sections): Replace maybe_set_textrel + with _bfd_elf_maybe_set_textrel. + * elf32-s390.c (maybe_set_textrel): Removed. + (elf_s390_size_dynamic_sections): Replace maybe_set_textrel + with _bfd_elf_maybe_set_textrel. + * elf32-sh.c (maybe_set_textrel): Removed. + (sh_elf_size_dynamic_sections): Replace maybe_set_textrel + with _bfd_elf_maybe_set_textrel. + * elf32-tic6x.c (maybe_set_textrel): Removed. + (elf32_tic6x_size_dynamic_sections): Replace maybe_set_textrel + with _bfd_elf_maybe_set_textrel. + * elf32-tilepro.c (maybe_set_textrel): Removed. + (tilepro_elf_size_dynamic_sections): Replace maybe_set_textrel + with _bfd_elf_maybe_set_textrel. + * elf64-ppc.c (maybe_set_textrel): Removed. + (ppc64_elf_size_dynamic_sections): Replace maybe_set_textrel + with _bfd_elf_maybe_set_textrel. + * elf64-s390.c (maybe_set_textrel): Removed. + (elf_s390_size_dynamic_sections): Replace maybe_set_textrel + with _bfd_elf_maybe_set_textrel. + * elfnn-aarch64.c (maybe_set_textrel): Removed. + (elfNN_aarch64_size_dynamic_sections): Replace maybe_set_textrel + with _bfd_elf_maybe_set_textrel. + * elfnn-riscv.c (maybe_set_textrel): Removed. + (riscv_elf_size_dynamic_sections): Replace maybe_set_textrel + with _bfd_elf_maybe_set_textrel. + * elfxx-sparc.c (maybe_set_textrel): Removed. + (_bfd_sparc_elf_size_dynamic_sections): Replace maybe_set_textrel + with _bfd_elf_maybe_set_textrel. + * elfxx-tilegx.c (maybe_set_textrel): Removed. + (tilegx_elf_size_dynamic_sections): Replace maybe_set_textrel + with _bfd_elf_maybe_set_textrel. + * elfxx-x86.c (maybe_set_textrel): Removed. + (_bfd_x86_elf_size_dynamic_sections): Replace maybe_set_textrel + with _bfd_elf_maybe_set_textrel. + * elflink.c (_bfd_elf_maybe_set_textrel): New. + +2020-06-03 H.J. Lu + + PR ld/26067 + * elf32-arm.c (elf32_arm_copy_indirect_symbol): Don't copy + dyn_relocs. + * elf32-csky.c (csky_elf_copy_indirect_symbol): Likewise. + * elf32-hppa.c (elf32_hppa_copy_indirect_symbol): Likewise. + * elf32-metag.c (elf_metag_copy_indirect_symbol): Likewise. + * elf32-microblaze.c (microblaze_elf_copy_indirect_symbol): + Likewise. + * elf32-nds32.c (nds32_elf_copy_indirect_symbol): Likewise. + * elf32-nios2.c (nios2_elf32_copy_indirect_symbol): Likewise. + * elf32-or1k.c (or1k_elf_copy_indirect_symbol): Likewise. + * elf32-s390.c (elf_s390_copy_indirect_symbol): Likewise. + * elf32-sh.c (sh_elf_copy_indirect_symbol): Likewise. + * elf32-tilepro.c (tilepro_elf_copy_indirect_symbol): Likewise. + * elf64-s390.c (elf_s390_copy_indirect_symbol): Likewise. + * elfnn-aarch64.c (elfNN_aarch64_copy_indirect_symbol): Likewise. + * elfnn-riscv.c (riscv_elf_copy_indirect_symbol): Likewise. + * elfxx-sparc.c (_bfd_sparc_elf_copy_indirect_symbol): Likewise. + * elfxx-tilegx.c (tilegx_elf_copy_indirect_symbol): Likewise. + * elfxx-x86.c (_bfd_x86_elf_copy_indirect_symbol): Likewise. + * elf32-lm32.c (lm32_elf_copy_indirect_symbol): Removed. + (elf_backend_copy_indirect_symbol): Likewise. + * elf32-m32r.c (m32r_elf_copy_indirect_symbol): Removed. + (elf_backend_copy_indirect_symbol): Likewise. + * elflink.c (_bfd_elf_link_hash_copy_indirect): Copy dyn_relocs. + +2020-06-03 H.J. Lu + + PR ld/26067 + * elf-bfd.h (_bfd_elf_readonly_dynrelocs): New. + * elf32-arm.c (readonly_dynrelocs): Removed. + (maybe_set_textrel): Replace readonly_dynrelocs with + _bfd_elf_readonly_dynrelocs. + * elf32-csky.c (readonly_dynrelocs): Removed. + (maybe_set_textrel): Replace readonly_dynrelocs with + _bfd_elf_readonly_dynrelocs. + * elf32-hppa.c(readonly_dynrelocs): Removed. + (alias_readonly_dynrelocs): Replace readonly_dynrelocs with + _bfd_elf_readonly_dynrelocs. + (maybe_set_textrel): Likewise. + * elf32-lm32.c (readonly_dynrelocs): Removed. + (lm32_elf_adjust_dynamic_symbol): Replace readonly_dynrelocs + with _bfd_elf_readonly_dynrelocs. + (maybe_set_textrel): Likewise. + * elf32-m32r.c (readonly_dynrelocs): Removed. + (m32r_elf_adjust_dynamic_symbol): Replace readonly_dynrelocs + with _bfd_elf_readonly_dynrelocs. + (maybe_set_textrel): Likewise. + * elf32-metag.c (readonly_dynrelocs): Removed. + (elf_metag_adjust_dynamic_symbol): Replace readonly_dynrelocs + with _bfd_elf_readonly_dynrelocs. + (maybe_set_textrel): Likewise. + * elf32-microblaze.c (readonly_dynrelocs): Removed. + (microblaze_elf_adjust_dynamic_symbol): Replace readonly_dynrelocs + with _bfd_elf_readonly_dynrelocs. + * elf32-nds32.c (readonly_dynrelocs): Removed. + (nds32_elf_adjust_dynamic_symbol): Replace readonly_dynrelocs + with _bfd_elf_readonly_dynrelocs. + (maybe_set_textrel): Likewise. + * elf32-or1k.c (readonly_dynrelocs): Removed. + (or1k_elf_adjust_dynamic_symbol): Replace readonly_dynrelocs + with _bfd_elf_readonly_dynrelocs. + * elf32-ppc.c (readonly_dynrelocs): Removed. + (alias_readonly_dynrelocs): Replace readonly_dynrelocs with + _bfd_elf_readonly_dynrelocs. + (ppc_elf_adjust_dynamic_symbol): Likewise. + (maybe_set_textrel): Likewise. + * elf32-s390.c (readonly_dynrelocs): Removed. + (elf_s390_adjust_dynamic_symbol): Replace readonly_dynrelocs + with _bfd_elf_readonly_dynrelocs. + (maybe_set_textrel): Likewise. + * elf32-sh.c (readonly_dynrelocs): Removed. + (sh_elf_adjust_dynamic_symbol): Replace readonly_dynrelocs with + _bfd_elf_readonly_dynrelocs. + (maybe_set_textrel): Likewise. + * elf32-tic6x.c (readonly_dynrelocs): Removed. + (maybe_set_textrel): Replace readonly_dynrelocs with + _bfd_elf_readonly_dynrelocs. + * elf32-tilepro.c (readonly_dynrelocs): Removed. + (tilepro_elf_adjust_dynamic_symbol): Replace readonly_dynrelocs + with _bfd_elf_readonly_dynrelocs. + (maybe_set_textrel): Likewise. + * elf64-ppc.c (readonly_dynrelocs): Removed. + (alias_readonly_dynrelocs): Replace readonly_dynrelocs with + _bfd_elf_readonly_dynrelocs. + (ppc64_elf_adjust_dynamic_symbol): Likewise. + (maybe_set_textrel): Likewise. + * elf64-s390.c (readonly_dynrelocs): Removed. + (elf_s390_adjust_dynamic_symbol): Replace readonly_dynrelocs + with _bfd_elf_readonly_dynrelocs. + (maybe_set_textrel): Likewise. + * elflink.c (_bfd_elf_readonly_dynrelocs): New. + * elfnn-aarch64.c (readonly_dynrelocs): Removed. + (maybe_set_textrel): Replace readonly_dynrelocs with + _bfd_elf_readonly_dynrelocs. + * elfnn-riscv.c (readonly_dynrelocs): Removed. + (riscv_elf_adjust_dynamic_symbol): Replace readonly_dynrelocs + with _bfd_elf_readonly_dynrelocs. + (maybe_set_textrel): Likewise. + * elfxx-sparc.c (readonly_dynrelocs): Removed. + (_bfd_sparc_elf_adjust_dynamic_symbol): Replace + readonly_dynrelocs with _bfd_elf_readonly_dynrelocs. + (maybe_set_textrel): Likewise. + * elfxx-tilegx.c (readonly_dynrelocs): Removed. + (tilegx_elf_adjust_dynamic_symbol): Replace readonly_dynrelocs + with _bfd_elf_readonly_dynrelocs. + (maybe_set_textrel): Likewise. + * elfxx-x86.c (readonly_dynrelocs): Removed. + (maybe_set_textrel): Replace readonly_dynrelocs with + _bfd_elf_readonly_dynrelocs. + (_bfd_x86_elf_adjust_dynamic_symbol): Likewise. + +2020-06-03 H.J. Lu + + * elfxx-x86.h (GENERATE_DYNAMIC_RELOCATION_P): Silence + -fsanitize=undefined. + +2020-06-03 Alan Modra + + PR 26069 + PR 18758 + * peicode.h (pe_ILF_make_a_section): Align data for compilers + other than gcc. + (pe_ILF_build_a_bfd): Likewise. + +2020-06-03 Alan Modra + + PR 26069 + * elf.c (_bfd_elf_close_and_cleanup): Free elf_shstrtab for + core files as well as objects. + +2020-06-01 H.J. Lu + + PR ld/26067 + * elf-bfd.h (elf_link_hash_entry): Add dyn_relocs after size. + * elf-s390-common.c (s390_elf_allocate_ifunc_dyn_relocs): + Updated. + * elf32-arc.c (elf_arc_link_hash_entry): Remove dyn_relocs. + (elf_arc_link_hash_newfunc): Updated. + * elf32-arm.c (elf32_arm_link_hash_entry): Remove dyn_relocs. + (elf32_arm_link_hash_newfunc): Updated. + (elf32_arm_copy_indirect_symbol): Likewise. + (elf32_arm_check_relocs): Likewise. + (readonly_dynrelocs): Likewise. + (allocate_dynrelocs_for_symbol): Likewise. + * elf32-csky.c (csky_elf_link_hash_entry): Remove dyn_relocs. + (csky_elf_link_hash_newfunc): Updated. + (csky_allocate_dynrelocs): Likewise. + (readonly_dynrelocs): Likewise. + (csky_elf_copy_indirect_symbol): Likewise. + * elf32-hppa.c (elf32_hppa_link_hash_entry): Remove dyn_relocs. + (hppa_link_hash_newfunc): Updated. + (elf32_hppa_copy_indirect_symbol): Likewise. + (elf32_hppa_hide_symbol): Likewise. + (elf32_hppa_adjust_dynamic_symbol): Likewise. + (allocate_dynrelocs): Likewise. + (elf32_hppa_relocate_section): Likewise. + * elf32-i386.c (elf_i386_check_relocs): Likewise. + * elf32-lm32.c (elf_lm32_link_hash_entry): Removed. + (lm32_elf_link_hash_newfunc): Likewise. + (lm32_elf_link_hash_table_create): Updated. + (readonly_dynrelocs): Likewise. + (allocate_dynrelocs): Likewise. + (lm32_elf_copy_indirect_symbol): Likewise. + * elf32-m32r.c (elf_m32r_link_hash_entry): Removed. + (m32r_elf_link_hash_newfunc): Likewise. + (m32r_elf_link_hash_table_create): Updated. + (m32r_elf_copy_indirect_symbol): Likewise. + (allocate_dynrelocs): Likewise. + * elf32-metag.c (elf_metag_link_hash_entry): Remove dyn_relocs. + (metag_link_hash_newfunc): Updated. + (elf_metag_copy_indirect_symbol): Likewise. + (readonly_dynrelocs): Likewise. + (allocate_dynrelocs): Likewise. + * elf32-microblaze.c (elf32_mb_link_hash_entry): Remove + dyn_relocs. + (link_hash_newfunc): Updated. + (microblaze_elf_check_relocs): Likewise. + (microblaze_elf_copy_indirect_symbol): Likewise. + (readonly_dynrelocs): Likewise. + (allocate_dynrelocs): Likewise. + * elf32-nds32.c (elf_nds32_link_hash_entry): Remove dyn_relocs. + (nds32_elf_link_hash_newfunc): Updated. + (nds32_elf_copy_indirect_symbol): Likewise. + (readonly_dynrelocs): Likewise. + (allocate_dynrelocs): Likewise. + (nds32_elf_check_relocs): Likewise. + * elf32-nios2.c (elf32_nios2_link_hash_entry): Remove dyn_relocs. + (link_hash_newfunc): Updated. + (nios2_elf32_copy_indirect_symbol): Likewise. + (nios2_elf32_check_relocs): Likewise. + (allocate_dynrelocs): Likewise. + * elf32-or1k.c (elf_or1k_link_hash_entry): Remove dyn_relocs. + (or1k_elf_link_hash_newfunc): Updated. + (readonly_dynrelocs): Likewise. + (allocate_dynrelocs): Likewise. + (or1k_elf_copy_indirect_symbol): Likewise. + * elf32-ppc.c (ppc_elf_link_hash_entry): Remove dyn_relocs. + (ppc_elf_link_hash_newfunc): Updated. + (ppc_elf_copy_indirect_symbol): Likewise. + (ppc_elf_check_relocs): Likewise. + (readonly_dynrelocs): Likewise. + (ppc_elf_adjust_dynamic_symbol): Likewise. + (allocate_dynrelocs): Likewise. + (ppc_elf_relocate_section): Likewise. + * elf32-s390.c (elf_s390_link_hash_entry): Remove dyn_relocs. + (link_hash_newfunc): Updated. + (elf_s390_copy_indirect_symbol): Likewise. + (readonly_dynrelocs): Likewise. + (elf_s390_adjust_dynamic_symbol): Likewise. + (allocate_dynrelocs): Likewise. + * elf32-sh.c (elf_sh_link_hash_entry): Remove dyn_relocs. + (sh_elf_link_hash_newfunc): Updated. + (readonly_dynrelocs): Likewise. + (allocate_dynrelocs): Likewise. + (sh_elf_copy_indirect_symbol): Likewise. + (sh_elf_check_relocs): Likewise. + * elf32-tic6x.c (elf32_tic6x_link_hash_entry): Removed. + (elf32_tic6x_link_hash_newfunc): Likewise. + (elf32_tic6x_link_hash_table_create): Updated. + (readonly_dynrelocs): Likewise. + (elf32_tic6x_check_relocs): Likewise. + (elf32_tic6x_allocate_dynrelocs): Likewise. + * elf32-tilepro.c (tilepro_elf_link_hash_entry): Remove + dyn_relocs. + (link_hash_newfunc): Updated. + (tilepro_elf_copy_indirect_symbol): Likewise. + (tilepro_elf_check_relocs): Likewise. + (allocate_dynrelocs): Likewise. + * elf64-ppc.c (ppc_link_hash_entry): Remove dyn_relocs. + (ppc64_elf_copy_indirect_symbol): Updated. + (ppc64_elf_check_relocs): Likewise. + (readonly_dynrelocs): Likewise. + (ppc64_elf_adjust_dynamic_symbol): Likewise. + (dec_dynrel_count): Likewise. + (allocate_dynrelocs): Likewise. + (ppc64_elf_relocate_section): Likewise. + * elf64-s390.c (elf_s390_link_hash_entry): Remove dyn_relocs. + (link_hash_newfunc): Updated. + (elf_s390_copy_indirect_symbol): Likewise. + (readonly_dynrelocs): Likewise. + (allocate_dynrelocs): Likewise. + * elf64-x86-64.c (elf_x86_64_check_relocs): Likewise. + * elfnn-aarch64.c (elf_aarch64_link_hash_entry): Remove + dyn_relocs. + (elfNN_aarch64_link_hash_newfunc): Updated. + (elfNN_aarch64_copy_indirect_symbol): Likewise. + (readonly_dynrelocs): Likewise. + (need_copy_relocation_p): Likewise. + (elfNN_aarch64_allocate_dynrelocs): Likewise. + (elfNN_aarch64_allocate_ifunc_dynrelocs): Likewise. + * elfnn-riscv.c (riscv_elf_link_hash_entry): Remove dyn_relocs. + (link_hash_newfunc): Updated. + (riscv_elf_copy_indirect_symbol): Likewise. + (riscv_elf_check_relocs): Likewise. + (readonly_dynrelocs): Likewise. + (allocate_dynrelocs): Likewise. + * elfxx-sparc.c (_bfd_sparc_elf_link_hash_entry): Remove + dyn_relocs. + (link_hash_newfunc): Updated. + (_bfd_sparc_elf_copy_indirect_symbol): Likewise. + (_bfd_sparc_elf_check_relocs): Likewise. + (readonly_dynrelocs): Likewise. + (allocate_dynrelocs): Likewise. + * elfxx-tilegx.c (tilegx_elf_link_hash_entry): Remove dyn_relocs. + (link_hash_newfunc): Updated. + (tilegx_elf_copy_indirect_symbol): Likewise. + (tilegx_elf_check_relocs): Likewise. + (readonly_dynrelocs): Likewise. + (allocate_dynrelocs): Likewise. + * elfxx-x86.c (elf_x86_allocate_dynrelocs): Likewise. + (readonly_dynrelocs): Likewise. + (_bfd_x86_elf_copy_indirect_symbol): Likewise. + * elfxx-x86.h (elf_x86_link_hash_entry): Remove dyn_relocs. + +2020-06-01 Alan Modra + + * vms-alpha.c (_bfd_vms_slurp_etir): Check bound for the current + command against cmd_length, not the end of record. For + ETIR__C_STO_IMMR check size against cmd_length, mask repeat count + to 32-bits and break out on zero size. Add ETIR__C_STC_LP_PSB + cmd_length test. + +2020-05-28 David Faust + + * elf64-bpf.c (bpf_elf_relocate_section): Fix handling of + R_BPF_INSN_{32,64} relocations. + +2020-05-28 Stephen Casner + + * pdp11.c: Implement BRD_RELOC_32 to relocate the low 16 bits of + addreses in .long (used in testsuites) and .stab values. + +2020-05-27 H.J. Lu + + PR ld/22909 + * elflink.c (bfd_elf_final_link): Use bfd_link_textrel_check. + Check bfd_link_dll when issue a DT_TEXTREL warning. + * elfxx-x86.c (maybe_set_textrel): Likewise. + (_bfd_x86_elf_size_dynamic_sections): Likewise. + +2020-05-26 Nick Clifton + + * plugin.c (try_load_plugin): Extend error message when a plugin + fails to open. + +2020-05-23 Alan Modra + + * bfdio.c (bfd_get_file_size): Don't segfault on NULL arch_header. + +2020-05-22 Alan Modra + + PR 25882 + * elf32-ppc.c (_bfd_elf_ppc_merge_fp_attributes): Don't init FP + attributes from shared libraries, and do not return an error if + they don't match. + +2020-05-21 Alan Modra + + PR 25993 + * opncls.c (_bfd_free_cached_info): Keep a copy of the bfd + filename. + (_bfd_delete_bfd): Free the copy. + (_bfd_new_bfd): Free nbfd->memory on error. + +2020-05-21 Alan Modra + + * aoutx.h: Replace "if (x) free (x)" with "free (x)" throughout. + * archive.c, * bfd.c, * bfdio.c, * coff-alpha.c, * coff-ppc.c, + * coff-sh.c, * coff-stgo32.c, * coffcode.h, * coffgen.c, + * cofflink.c, * cpu-arm.c, * doc/chew.c, * dwarf2.c, * ecoff.c, + * ecofflink.c, * elf-eh-frame.c, * elf-m10200.c, * elf-m10300.c, + * elf-strtab.c, * elf.c, * elf32-arc.c, * elf32-arm.c, + * elf32-avr.c, * elf32-bfin.c, * elf32-cr16.c, * elf32-crx.c, + * elf32-epiphany.c, * elf32-ft32.c, * elf32-h8300.c, + * elf32-ip2k.c, * elf32-m32c.c, * elf32-m68hc11.c, + * elf32-m68k.c, * elf32-microblaze.c, * elf32-msp430.c, + * elf32-nds32.c, * elf32-nios2.c, * elf32-ppc.c, * elf32-pru.c, + * elf32-rl78.c, * elf32-rx.c, * elf32-sh.c, * elf32-spu.c, + * elf32-v850.c, * elf32-xtensa.c, * elf64-alpha.c, + * elf64-hppa.c, * elf64-ia64-vms.c, * elf64-mips.c + * elf64-mmix.c, * elf64-ppc.c, * elf64-sparc.c, * elfcode.h, + * elflink.c, * elfnn-ia64.c, * elfnn-riscv.c, * elfxx-mips.c, + * elfxx-x86.c, * format.c, * ihex.c, * libbfd.c, * linker.c, + * mmo.c, * opncls.c, * pdp11.c, * peXXigen.c, * pef.c, + * peicode.h, * simple.c, * som.c, * srec.c, * stabs.c, * syms.c, + * targets.c, * vms-lib.c, * xcofflink.c, * xtensa-isa.c: Likewise. + +2020-05-20 Nelson Chu + + * elfxx-riscv.h (riscv_parse_subset_t): Add new callback function + get_default_version. It is used to find the default version for + the specific extension. + * elfxx-riscv.c (riscv_parsing_subset_version): Remove the parameters + default_major_version and default_minor_version. Add new bfd_boolean + parameter *use_default_version. Set it to TRUE if we need to call + the callback rps->get_default_version to find the default version. + (riscv_parse_std_ext): Call rps->get_default_version if we fail to find + the default version in riscv_parsing_subset_version, and then call + riscv_add_subset to add the subset into subset list. + (riscv_parse_prefixed_ext): Likewise. + (riscv_std_z_ext_strtab): Support Zicsr extensions. + * elfnn-riscv.c (riscv_merge_std_ext): Use strcasecmp to compare the + strings rather than characters. + riscv_merge_arch_attr_info): The callback function get_default_version + is only needed for assembler, so set it to NULL int the linker. + * elfxx-riscv.c (riscv_estimate_digit): Remove the static. + * elfxx-riscv.h: Updated. + +2020-05-20 Alan Modra + + PR 25993 + * archive.c (_bfd_get_elt_at_filepos): Don't strdup filename, + use bfd_set_filename. + * elfcode.h (_bfd_elf_bfd_from_remote_memory): Likewise. + * mach-o.c (bfd_mach_o_fat_member_init): Likewise. + * opncls.c (bfd_fopen, bfd_openstreamr, bfd_openr_iovec, bfd_openw), + (bfd_create): Likewise. + (_bfd_delete_bfd): Don't free filename. + (bfd_set_filename): Copy filename param to bfd_alloc'd memory, + return pointer to the copy or NULL on alloc fail. + * vms-lib.c (_bfd_vms_lib_get_module): Free newname and test + result of bfd_set_filename. + * bfd-in2.h: Regenerate. + +2020-05-20 Alan Modra + + PR 26011 + * elf.c (_bfd_elf_get_reloc_upper_bound): Sanity check reloc + section size against file size. + (_bfd_elf_get_dynamic_reloc_upper_bound): Likewise. + +2020-05-19 Gunther Nikl + + PR 26005 + * elf.c (bfd_section_from_shdr): Replace bfd_zmalloc with bfd_malloc + and memset when allocating memory for the sections_being_created + array. + +2020-05-19 Stafford Horne + + * elf32-or1k.c (or1k_elf_finish_dynamic_symbol): Rename srela + to relgot. + (or1k_elf_relocate_section): Access srelgot via + htab->root.srelgot. Add assertions for srelgot->contents. + Introduce local variable for srelgot to not reuse global + sreloc. + (or1k_elf_relocate_section): Fixup dynamic symbol detection. + (or1k_set_got_and_rela_sizes): New function. + (or1k_initial_exec_offset): New function. + (TLS_GD, TLS_IE, TLS_LD, TLS_LE): Redefine macros as masks. + (or1k_elf_relocate_section): Allow for TLS to handle multiple + model access. + (or1k_elf_check_relocs): Use OR to set TLS access. + (allocate_dynrelocs): Use or1k_set_got_and_rela_sizes to set + sizes. + (or1k_elf_size_dynamic_sections): Use + or1k_set_got_and_rela_sizes to set sizes. + (or1k_elf_relocate_section): Fixup PCREL relocation calculation. + (TCB_SIZE): New macro. + (tpoff): Use TCB_SIZE and alignment to calculate offset. + (allocate_dynrelocs, readonly_dynrelocs, or1k_elf_check_relocs) + (or1k_elf_size_dynamic_sections): Rename p to sec_relocs. + (allocate_dynrelocs): Rename s to splt or sgot based on usage. + (tpoff): Add dynamic boolean argument. + (or1k_elf_relocate_section): Pass dynamic flag to tpoff. + +2020-05-19 Siddhesh Poyarekar + + * elfnn-aarch64.c (elfNN_aarch64_final_link_relocate): Club + BFD_RELOC_AARCH64_BRANCH19 and BFD_RELOC_AARCH64_TSTBR14 + cases with BFD_RELOC_AARCH64_JUMP26. + (elfNN_aarch64_check_relocs): Likewise. + +2020-05-19 Alan Modra + + * aix5ppc-core.c (xcoff64_core_file_matches_executable_p): Use + bfd_get_filename rather than accessing bfd->filename directly. + * aout-target.h (MY (object_p)): Likewise. + * aoutx.h (aout_find_nearest_line, aout_link_write_symbols): Likewise. + * archive.c (find_nested_archive, _bfd_generic_read_ar_hdr_mag), + (_bfd_construct_extended_name_table, _bfd_bsd44_write_ar_hdr), + (_bfd_archive_bsd44_construct_extended_name_table), + (_bfd_write_archive_contents, _bfd_compute_and_write_armap), + (_bfd_bsd_write_armap): Likewise. + * bfd.c (bfd_errmsg, _bfd_doprnt): Likewise. + * cache.c (bfd_open_file): Likewise. + * ecoff.c (_bfd_ecoff_write_armap): Likewise. + * ecofflink.c (bfd_ecoff_debug_accumulate_other): Likewise. + * elf32-bfin.c (bfinfdpic_relocate_section): Likewise. + * elf32-frv.c (elf32_frv_relocate_section): Likewise. + * elf32-hppa.c (elf32_hppa_final_link): Likewise. + * elf32-nds32.c (nds32_elf_output_symbol_hook), + (patch_tls_desc_to_ie): Likewise. + * elf32-spu.c (sort_bfds, print_one_overlay_section), + (spu_elf_auto_overlay): Likewise. + * elf64-hppa.c (elf_hppa_final_link): Likewise. + * elf64-ia64-vms.c (elf64_ia64_size_dynamic_sections): Likewise. + * elfcore.h (elf_core_file_matches_executable_p): Likewise. + * elflink.c (bfd_elf_size_dynamic_sections), + (elf_link_input_bfd): Likewise. + * linker.c (_bfd_generic_link_output_symbols): Likewise. + * mach-o.c (bfd_mach_o_follow_dsym), + (bfd_mach_o_close_and_cleanup): Likewise. + * opncls.c (_bfd_delete_bfd, _maybe_make_executable), + (find_separate_debug_file, get_build_id_name): Likewise. + * pdp11.c (aout_find_nearest_line, aout_link_write_symbols): Likewise. + * plugin.c (bfd_plugin_open_input): Likewise. + * rs6000-core.c (rs6000coff_core_file_matches_executable_p): Likewise. + * som.c (som_write_armap): Likewise. + * srec.c (srec_write_record, srec_write_symbols): Likewise. + * vms-lib.c (_bfd_vms_lib_get_imagelib_file), + (_bfd_vms_lib_write_archive_contents): Likewise. + * xcofflink.c (xcoff_link_add_dynamic_symbols): Likewise. + +2020-05-19 Alan Modra + + PR 25713 + * bfdio.c (_bfd_real_fopen): Typo fix. + +2020-05-18 Nick Clifton + + PR 26005 + * elf.c (bfd_section_from_shdr): Use bfd_malloc to allocate memory + for the sections_being_created array. + +2020-05-18 Alan Modra + + * ecoff.c (ecoff_slurp_reloc_table): Malloc external_relocs so + they can be freed without also freeing internal_relocs. + +2020-05-18 Jaydeep Chauhan + + PR 25713 + * bfdio.c (_bfd_real_fopen): Convert UNIX style sirectory + separators into DOS style when creating a WIN32 fullpath. + +2020-05-14 Nelson Chu + + * elfnn-riscv.c (elfNN_riscv_mkobject): New function. We need this + to initialize RISC-V tdata. + +2020-05-12 Gunther Nikl + + * aoutx.h (NAME (aout, swap_std_reloc_out)): Reject an unsupported + relocation size. + +2020-05-11 Alan Modra + + * elf64-ppc.c (xlate_pcrel_opt): Handle lxvp and stxvp. + +2020-05-11 Alan Modra + + * elf64-ppc.c: Rename powerxx to power10 throughout. + +2020-05-11 Alan Modra + + PR 25961 + * coffgen.c (coff_get_normalized_symtab): Check that buffer + contains required number of auxents before processing any auxent. + * coffswap.h (coff_swap_aux_in ): Only swap in extended + file name from auxents for PE. + +2020-05-04 Gunther Nikl + + * aout-cris.c (DEFAULT_ARCH): Delete define. + (MY_set_arch_mach): Likewise. + (SET_ARCH_MACH): Use bfd_set_arch_mach with an explicit architecture + of bfd_arch_cris. + (swap_ext_reloc_in): Add casts to r_index extraction. Mask valid bits + of r_type before the shift. + +2020-05-04 Wilco Dijkstra + + PR ld/25665 + * elfnn-aarch64.c (group_sections): Copy implementation from + elf32-arm.c. + +2020-05-01 Alan Modra + + PR 25900 + * elfnn-riscv.c (_bfd_riscv_relax_section): Check root.type before + accessing root.u.def of symbols. Also check root.u.def.section + is non-NULL. Reverse tests so as to make the logic positive. + +2020-05-01 Alan Modra + + PR 25882 + * elf32-tic6x.c (elf32_tic6x_merge_attributes): Don't transfer + Tag_ABI_PIC or Tag_ABI_PID from dynamic objects to the output. + +2020-05-01 Alan Modra + + PR 25882 + * elf32-bfin.c (elf32_bfin_merge_private_bfd_data): Add FIXME. + * elf32-frv.c (frv_elf_merge_private_bfd_data): Likewise. + * elfxx-mips.c (_bfd_mips_elf_merge_private_bfd_data): Likewise. + * elf32-nds32.c (nds32_elf_merge_private_bfd_data): Likewise. + * elf32-score.c (s3_elf32_score_merge_private_bfd_data): Likewise. + * elf32-score7.c (s7_elf32_score_merge_private_bfd_data): Likewise. + * elf32-sh.c (sh_elf_merge_private_data): Likewise. + * elf32-tic6x.c (elf32_tic6x_merge_attributes): Likewise. + * elf64-ia64-vms.c (elf64_ia64_merge_private_bfd_data): Likewise. + * elfnn-ia64.c (elfNN_ia64_merge_private_bfd_data): Likewise. + +2020-05-01 Alan Modra + + PR 25882 + * elf32-ppc.c (ppc_elf_merge_private_bfd_data): Ignore e_flags + from shared libraries. + +2020-04-29 Max Filippov + + * elf32-xtensa.c (relax_section): Don't negate diff_value for + XTENSA_NDIFF relocations. Don't add sign bits whe diff_value + equals 0. Report overflow when the result has negative sign but + all significant bits are zero. + +2020-04-29 Gunther Nikl + + * aoutx.h (swap_std_reloc_out): Special case 64 bit relocations. + (aout_link_reloc_link_order): Likewise. Make r_length an unsigned. + +2020-04-28 Alan Modra + + * vms-alpha.c (_bfd_vms_slurp_etir): Correct divide by zero check. + Emit warning message. + +2020-04-27 Tamar Christina + + * coff-i386.c (COFF_WITH_PE_BIGOBJ): New. + * coff-x86_64.c (COFF_WITH_PE_BIGOBJ): New. + * config.bfd (targ_selvecs): Rename x86_64_pe_be_vec + to x86_64_pe_big_vec as it not a big-endian format. + (vec i386_pe_big_vec): New. + * configure.ac: Likewise. + * targets.c: Likewise. + * configure: Regenerate. + * pe-i386.c (TARGET_SYM_BIG, TARGET_NAME_BIG, + COFF_WITH_PE_BIGOBJ): New. + * pe-x86_64.c (TARGET_SYM_BIG, TARGET_NAME_BIG): + New. + (x86_64_pe_be_vec): Moved. + +2020-04-23 Anton Kolesov + + * elf-bfd.h (elfcore_write_arc_v2): Add prototype. + * elf.c (elfcore_grok_arc_v2): New function. + (elfcore_grok_note): Call the new function to handle the corresponding + note. + (elfcore_write_arc_v2): New function. + (elfcore_write_register_note): Call the new function to handle the + corresponding pseudo-sections. -2019-06-24 Ilia Diachkov +2020-04-22 Max Filippov - * elfnn-riscv.c (_bfd_riscv_relax_lui): Delete early exit when - SEC_MERGE or SEC_CODE flags are set. - (_bfd_riscv_relax_section): New local symtype. Set sym_sec and - symtype consistently. Don't include sec_addr (sym_sec) in symval. - Add check for SEC_INFO_TYPE_MERGE and call _bfd_merged_section_offset. - Add sec_addr (sym_sec) after handling merge sections. + PR ld/25861 + * bfd-in2.h: Regenerated. + * elf32-xtensa.c (elf_howto_table): New entries for + R_XTENSA_PDIFF{8,16,32} and R_XTENSA_NDIFF{8,16,32}. + (elf_xtensa_reloc_type_lookup, elf_xtensa_do_reloc) + (relax_section): Add cases for R_XTENSA_PDIFF{8,16,32} and + R_XTENSA_NDIFF{8,16,32}. + * libbfd.h (bfd_reloc_code_real_names): Add names for + BFD_RELOC_XTENSA_PDIFF{8,16,32} and + BFD_RELOC_XTENSA_NDIFF{8,16,32}. + * reloc.c: Add documentation for BFD_RELOC_XTENSA_PDIFF{8,16,32} + and BFD_RELOC_XTENSA_NDIFF{8,16,32}. -2019-06-24 H.J. Lu +2020-04-21 Tamar Christina - PR ld/24721 - * elf-properties.c (elf_merge_gnu_property_list): Remove the - property after reporting property removal. + PR binutils/24753 + * compress.c (bfd_get_full_section_contents): Exclude sections with no + content. -2019-06-23 Alan Modra +2020-04-21 H.J. Lu - PR 24704 - * elf64-ppc.c (R_PPC64_GOT16_DS): Don't set has_gotrel. - (ppc64_elf_edit_toc): Don't remove R_PPC64_GOT16_DS got entries. - Reduce range of offsets allowed for other GOT relocs. + PR ld/25849 + * elf-bfd.h (elf_backend_data): Add + elf_backend_strip_zero_sized_dynamic_sections. + (_bfd_elf_strip_zero_sized_dynamic_sections): New prototype. + * elf64-alpha.c (elf_backend_strip_zero_sized_dynamic_sections): + New macro. + * elflink.c (_bfd_elf_strip_zero_sized_dynamic_sections): New + function. + * elfxx-target.h (elf_backend_strip_zero_sized_dynamic_sections): + New macro. + (elfNN_bed): Add elf_backend_strip_zero_sized_dynamic_sections. -2019-06-23 Alan Modra +2020-04-21 H.J. Lu - PR 24689 - * elfcode.h (elf_object_p): Warning fix. + * elf64-alpha.c (alpha_elf_reloc_entry): Replace reltext with + sec. + (elf64_alpha_check_relocs): Set sec instead of reltext. Warn + DT_TEXTREL with -M. + (elf64_alpha_calc_dynrel_sizes): Warn DT_TEXTREL with -M. -2019-06-21 Alan Modra +2020-04-21 Nick Clifton - PR 24689 - * elfcode.h (elf_object_p): Check type of e_shstrndx section. + * po/sr.po: Updated Serbian translation. -2019-06-19 Alan Modra +2020-04-21 Alan Modra - PR 24697 - * elf32-ppc.c (ppc_elf_relocate_section): Don't read insn for - R_PPC_EMB_RELSDA. Mask low bit of R_PPC_EMB_SDA21 r_offset. + * elf32-sh.c (sh_elf_relocate_section): Remove STO_SH5_ISA32 + processing. -2019-06-19 Alan Modra +2020-04-20 Stephen Casner - * elf64-ppc.c (ppc64_elf_inline_plt): Correct st_other test for - functions that require r2 valid to use local entry. - (ppc64_elf_size_stubs, ppc64_elf_relocate_section): Likewise. + * pdp11.c (N_STAB): Modify value to avoid conflict with N_EXT + causing globals from linker script to be treated as debug symbols. + (translate_symbol_table): Don't sign-extend symbol values from 16 + to 64 bits in nm output. -2019-06-17 Szabolcs Nagy +2020-04-20 Alan Modra - * elfnn-aarch64.c (elfNN_aarch64_allocate_local_dynrelocs): Remove. - (elfNN_aarch64_size_dynamic_sections): Remove loc_hash_table traversal - with elfNN_aarch64_allocate_local_dynrelocs. + * elf64-ppc.c (ppc64_elf_size_stubs): Strip relbrlt too. -2019-06-14 Szabolcs Nagy +2020-04-18 Alan Modra - * elfnn-aarch64.c: Enable MOVW_PREL relocs for ELF32. + * section.c (bfd_is_const_section): Correct test for special + sections. + * bfd-in2.h: Regenerate. -2019-06-14 Alan Modra +2020-04-17 Alan Modra - * Makefile.in: Regenerate. - * configure: Regenerate. + PR 25842 + * elf.c (_bfd_elf_get_symbol_version_string): Don't segfault on + NULL nodename. + +2020-04-16 Nick Clifton + + PR 25803 + * elfxx-mips.c (_bfd_mips_elf_adjust_dynamic_symbol): Replace an + abort with a more helpful error message. + +2020-04-16 Alan Modra + + PR 25827 + * dwarf2.c (scan_unit_for_symbols): Wrap overlong lines. Don't + strdup(0). + +2020-04-15 Fangrui Song + + PR binutils/24613 + * coff-rs6000.c (xcoff_ppc_relocate_section): Change RM_GENERATE_ERROR + to RM_DIAGNOSE plus a check of warn_unresolved_syms. + * coff64-rs6000.c (xcoff_ppc_relocate_section): Likewise. + * elf-bfd.h (_bfd_elf_large_com_section): Likewise. + * elf32-m32r.c (m32r_elf_relocate_section): Likewise. + * elf32-score.c (s3_bfd_score_elf_relocate_section): Likewise. + * elf32-score7.c (s7_bfd_score_elf_relocate_section): Likewise. + * elf32-sh.c (sh_elf_relocate_section): Likewise. + * elf32-spu.c (spu_elf_relocate_section): Likewise. + * elf64-hppa.c (elf64_hppa_relocate_section): Likewise. + * elflink.c (elf_link_output_extsym): Likewise. + * elfxx-mips.c (mips_elf_calculate_relocation): Likewise. + +2020-04-15 Alan Modra + + PR 25823 + * peXXigen.c (_bfd_XXi_swap_sym_in ): Don't use a + pointer into strings that may be freed for section name, always + allocate a new string. + +2020-04-14 Juan Manuel Guerrero + Jan W. Jagersma + + * coff-go32.c (COFF_GO32, IMAGE_SCN_LNK_NRELOC_OVFL) + (coff_SWAP_scnhdr_in, coff_SWAP_scnhdr_out): Define. + (_bfd_go32_swap_scnhdr_in, _bfd_go32_swap_scnhdr_out) + (_bfd_go32_mkobject): New functions. + * coff-stgo32.c (IMAGE_SCN_LNK_NRELOC_OVFL) + (coff_SWAP_scnhdr_in, coff_SWAP_scnhdr_out): Define. + (go32exe_mkobject): Call _bfd_go32_mkobject. + * coffcode.h (COFF_WITH_EXTENDED_RELOC_COUNTER): Define. + (coff_set_alignment_hook): Define function for COFF_GO32_EXE + and COFF_GO32. + (coff_write_relocs): Enable extended reloc counter code if + COFF_WITH_EXTENDED_RELOC_COUNTER is defined. Test for obj_go32. + (coff_write_object_contents): Likewise. Pad section headers + for COFF_GO32 and COFF_GO32EXE. Use bfd_coff_swap_scnhdr_out + instead of coff_swap_scnhdr_out. + * cofflink.c (_bfd_coff_final_link): Test also for obj_go32 to + enable extended reloc counter. + * coffswap.h: (coff_swap_scnhdr_in, coff_swap_scnhdr_out): + Declare with ATTRIBUTE_UNUSED. + * libcoff-in.h: (struct coff_tdata): New field go32. + (obj_go32): Define. + * libcoff.h: Regenerate. -2019-06-14 Alan Modra +2020-04-14 Fangrui Song - * elf64-ppc.c: Fix comments involving paddi. + PR gas/25768 + * elf.c (assign_section_numbers): Always set .stab sh_entsize to + 12. + +2020-04-14 Stephen Casner + + PR ld/25677 + * pdp11.c: Add implementation of --imagic option. + (adjust_o_magic): Fix objcopy --extract-symbol test. + * libaout.h (enum aout_magic): Add i_magic. + +2020-04-07 Rainer Orth + Nick Clifton + + * elf32-sparc.c (sparc_final_write_processing): Fix whitespace. + <0>: Ignore. + : Error rather than abort. + +2020-04-03 H.J. Lu + + PR ld/25767 + * elf.c (_bfd_elf_fixup_group_sections): Remove zero-sized + relocation section from section group. + +2020-04-02 Jan W. Jagersma + + * bfdio.c (bfd_bread, bfd_tell, bfd_seek, bfd_mmap): Always add + bfd->origin to file offset. + * bfdwin.c (bfd_get_file_window): Likewise. + * bfd.c: Clarify the use of the bfd->origin field. + * bfd-in2.h: Regenerate. + * coff-i386.c: Don't include go32exe.h. Allow overriding + coff_write_object_contents via COFF_WRITE_CONTENTS. + * coff-stgo32.c (go32exe_cleanup, go32exe_mkobject) + (go32exe_write_object_contents): New functions. + (go32exe_temp_stub, go32exe_temp_stub_size): New static globals. + (COFF_WRITE_CONTENTS, GO32EXE_DEFAULT_STUB_SIZE): Define. + (create_go32_stub): Remove check for 2k size limit. Read stub + from go32exe_temp_stub if present. + (go32_stubbed_coff_bfd_copy_private_bfd_data): Allocate and + copy variable-length stub. + (go32_check_format): Read stub to go32exe_temp_stub, set + origin, return go32exe_cleanup. + (adjust_filehdr_in_post, adjust_filehdr_out_pre) + (adjust_filehdr_out_post, adjust_scnhdr_in_post) + (adjust_scnhdr_out_pre, adjust_scnhdr_out_post) + (adjust_aux_in_post, adjust_aux_out_pre, adjust_aux_out_post): + Remove functions and their associated #defines. + * coffcode.h (coff_mkobject_hook): Remove stub copying code. + * libcoff-in.h: (struct coff_tdata): New field stub_size. + Rename field go32stub to stub. + * libcoff.h: Regenerate. + * coff-stgo32.c (go32_check_format): Rename to... + (go32exe_check_format): ...this. + (go32_stubbed_coff_bfd_copy_private_bfd_data): Rename to... + (go32exe_copy_private_bfd_data): ...this. + (stub_bytes): Rename to... + (go32exe_default_stub): ...this. + (create_go32_stub): Rename to... + (go32exe_create_stub): ...this. + * coff-stgo32.c (go32exe_copy_private_bfd_data): Avoid realloc + when possible. -2019-06-12 Adam Lackorzymski +2020-04-01 H.J. Lu - PR 24643 - * elf32-arm.c (arm_elf_find_function): Fail if the symol table is - absent, or the bfd is not in the ELF formart. - * elfnn-aarch64.c (aarch64_elf_find_function): Likewise. + PR ld/25749 + PR ld/25754 + * elf32-i386.c (elf_i386_convert_load_reloc): Convert load + relocation to R_386_32 for relocation against non-preemptible + absolute symbol. + (elf_i386_check_relocs): Call _bfd_elf_x86_valid_reloc_p. Don't + allocate dynamic relocation for non-preemptible absolute symbol. + (elf_i386_relocate_section): Pass sec to + GENERATE_DYNAMIC_RELOCATION_P. + * elf64-x86-64.c (R_X86_64_converted_reloc_bit): Moved. + (elf_x86_64_convert_load_reloc): Covert load relocation to + R_X86_64_32S or R_X86_64_32 for relocation against non-preemptible + absolute symbol. Don't convert to R_X86_64_32S nor R_X86_64_32 + for non-preemptible absolute symbol if they overflow. + (elf_x86_64_check_relocs): Call _bfd_elf_x86_valid_reloc_p. Set + tls_type for GOT slot to GOT_ABS for non-preemptible absolute + symbol. Don't allocate dynamic relocation for non-preemptible + absolute symbol. + (elf_x86_64_relocate_section): Don't generate relative relocation + for GOTPCREL relocations aganst local absolute symbol. Pass sec + to GENERATE_DYNAMIC_RELOCATION_P. + * elfxx-x86.c (elf_x86_allocate_dynrelocs): No dynamic relocation + against non-preemptible absolute symbol. + (_bfd_elf_x86_valid_reloc_p): New function. + (_bfd_x86_elf_size_dynamic_sections): No dynamic relocation for + GOT_ABS GOT slot. + * elfxx-x86.h (GENERATE_DYNAMIC_RELOCATION_P): Add an SEC + argument. Don't generate dynamic relocation against + non-preemptible absolute symbol. + (ABS_SYMBOL_P): New. + (GENERATE_RELATIVE_RELOC_P): Don't generate relative relocation + against non-preemptible absolute symbol. + (GOT_ABS): New. + (R_X86_64_converted_reloc_bit): New. Moved from elf64-x86-64.c. + (_bfd_elf_x86_valid_reloc_p): New. + +2020-04-01 Tamar Christina + + PR ld/16017 + * elf32-arm.c (elf32_arm_populate_plt_entry): Set LSB of the PLT0 + address in the GOT if in thumb only mode. + +2020-04-01 Tamar Christina + + * elf32-arm.c (elf32_thumb2_plt_entry): Fix PC-rel offset. + +2020-04-01 Hans-Peter Nilsson + + * mmo.c (mmo_scan): Create .text section only when needed, not + from the start. + +2020-03-31 Alan Modra -2019-06-10 Christos Zoulas + * coff-alpha.c (alpha_ecoff_get_elt_at_filepos): Correct bfd_bread + return value check. - PR 24650 - * elf.c (elfcore_make_auxv_note_section): New function. - (elfcore_grok_note): Use it. - (elfcore_grok_freebsd_note): Likewise. - (elfcore_grok_openbsd_note): Likewise. - (elfcore_grok_netbsd_note): Likewise. Plus add support for - NT_NETBSDCORE_AUXV notes. +2020-03-31 Alan Modra -2019-06-06 Sudakshina Das + * vms-alpha.c (image_write): Check bounds for sections without + contents too. Error on non-zero write to section without + contents. + (_bfd_vms_slurp_etir): Check return of image_write* functions. - * elfxx-aarch64.c (_bfd_aarch64_elf_link_setup_gnu_properties): Set - alignment of the new gnu property section. +2020-03-31 Alan Modra -2019-06-06 Sudakshina Das + * tekhex.c (pass_over): Check is_eof before reading buffer. - * bfd-in.h: Change comment. - * bfd-in2.h: Regenerate. - * elfnn-aarch64.c (elfNN_aarch64_merge_gnu_properties): Update warning. - * elfxx-aarch64.c (_bfd_aarch64_elf_link_setup_gnu_properties): - Likwise. +2020-03-30 Nick Clifton -2019-05-28 Faraz Shahbazker + PR binutils/pr25662 + * libcoff-in.h (struct pe_tdata): Rename the insert_timestamp + field to timestamp and make it an integer. + * libcoff.h: Regenerate. + * peXXigen.c (_bfd_XXi_only_swap_filehdr_out): Test the timestamp + field in the pe_data structure rather than the insert_timestamp + field. - * elfxx-mips.c (mips_elf_calculate_relocation) : - Remove overflow check. +2020-03-30 Alan Modra -2019-05-28 Alan Modra + PR 25745 + * elf64-ppc.c (ppc64_elf_build_stubs): Use asprintf to form + statistics message. - PR 24596 - * cofflink.c (coff_link_check_archive_element): Don't assume - element is a coff object file after calling add_archive_element. +2020-03-26 Nick Clifton -2019-05-28 Alan Modra + * cofflink.c (bfd_coff_get_internal_extra_pe_aouthdr): Delete. + * libbfd-in.h (bfd_coff_get_internal_extra_pe_aouthdr): Remove + prototype. + * libbfd.h: Regenerate. - PR 24596 - * elf32-microblaze.c (microblaze_elf_finish_dynamic_sections): Don't - attempt to set sh_entsize for excluded PLT section. +2020-03-26 Alan Modra -2019-05-28 Alan Modra + * i386msdos.c (msdos_object_p): Catch -1 return from bfd_bread. - PR 24596 - * elf64-alpha.c (elf64_alpha_relocate_section): Don't attempt - to emit R_ALPHA_GOTTPREL in PIEs, for which no space is - allocated in alpha_dynamic_entries_for_reloc. +2020-03-26 Alan Modra -2019-05-28 Alan Modra + * vms-alpha.c (dst_define_location): Limit size of dst_ptr_offsets + array. + (_bfd_vms_slurp_object_records): Rename "err" to "ok". - PR 24596 - * elf32-lm32.c (lm32_elf_finish_dynamic_sections): Don't segfault - on NULL output_section. - * elflink.c (elf_final_link_free): Don't free -1 symshndxbuf. +2020-03-25 Nick Clifton -2019-05-28 Alan Modra + * cofflink.c (bfd_coff_get_internal_extra_pe_aouthdr): New + function. + * libbfd-in.h (bfd_coff_get_internal_extra_pe_aouthdr): Prototype. + * libbfd.h: Regenerate. - PR 24596 - * elf32-m68k.c (elf_m68k_get_got_entry): Don't create a new - entry when MUST_FIND. Abort when MUST_FIND not found. - (elf_m68k_get_bfd2got_entry): Likewise. - (elf_m68k_relocate_section): Remove now useless assert. +2020-03-25 Shahab Vahedi -2019-05-28 Alan Modra + * elf32-arc.c (PRINT_DEBUG_RELOC_INFO_BEFORE): Use the + correct field name in the output string. - PR 24596 - * elf64-hppa.c (elf64_hppa_finalize_dynreloc): Get the output bfd - from bfd_link_info, not an output section owner. - (elf64_hppa_finish_dynamic_symbol, elf64_hppa_finalize_opd): Likewise. - (elf_hppa_final_link_relocate): Likewise. +2020-03-25 Alan Modra -2019-05-28 Alan Modra + PR 25662 + * elf.c (assign_file_positions_for_load_sections): Adjust offset + for SHT_NOBITS section if first in segment. + +2020-03-24 H.J. Lu + + PR binutils/25708 + * elf-bfd.h (_bfd_elf_get_symbol_version_name): Renamed to ... + (_bfd_elf_get_symbol_version_string): This. + * elf.c (_bfd_elf_get_symbol_version_name): Renamed to ... + (_bfd_elf_get_symbol_version_string): This. + (bfd_elf_print_symbol): Pass TRUE to + _bfd_elf_get_symbol_version_string. + * libbfd-in.h (_bfd_nosymbols_get_symbol_version_string): Add a + bfd_boolean argument. + * syms.c (_bfd_nosymbols_get_symbol_version_string): Likewise. + * targets.c (_bfd_get_symbol_version_string): Likewise. + (bfd_get_symbol_version_string): Likewise. + * bfd-in2.h: Regenerated. - PR 24596 - * aout-tic30.c (MY_bfd_final_link): Don't segfault on missing - create_object_symbols_section, obj_textsec, obj_datasec or - obj_bsssec. Fix other errors in placement. - * config.bfd: Obsolete tic30-aout. +2020-03-24 Nick Clifton + Jaydeep Chauhan -2019-05-28 Alan Modra + PR 25713 + * bfdio.c (_bfd_real_fopen): Add code to handle long filenames on + Win32 systems. - PR 24596 - * dwarf2.c (save_section_vma, section_vma_same): Check for NULL - end of section list as well as section_count. - * xcofflink.c (xcoff_link_add_symbols): Fix temporarily changed - section list before returning error. +2020-03-24 Nick Clifton -2019-05-27 Alan Modra + PR 25681 + * elf.c (_bfd_elf_map_sections_to_segments): When looking for a + segment to use for PT_GNU_RELRO, ignore empty sections in a + segment's current list. - * elf.c (bfd_elf_set_group_contents): Exit on zero size section. +2020-03-24 H.J. Lu -2019-05-27 Alan Modra + PR binutils/25717 + * elf-bfd.h (elf_obj_tdata): Change num_group to unsigned int. - PR 24596 - * linker.c (_bfd_generic_link_output_symbols): Heed BSF_KEEP. +2020-03-24 H.J. Lu -2019-05-24 Szabolcs Nagy + PR binutils/25708 + * elf-bfd.h (_bfd_elf_get_symbol_version_name): New. + * elf.c (_bfd_elf_get_symbol_version_name): New function. Based + on the previous _bfd_elf_get_symbol_version_string. + (_bfd_elf_get_symbol_version_string): Use it. - * elfnn-aarch64.c (elfNN_aarch64_merge_symbol_attribute): New function. - (struct elf_aarch64_link_hash_table): Add variant_pcs member. - (elfNN_aarch64_allocate_dynrelocs): Update variant_pcs. - (elfNN_aarch64_size_dynamic_sections): Add DT_AARCH64_VARIANT_PCS. - (elf_backend_merge_symbol_attribute): Define. +2020-03-24 Alan Modra -2019-05-24 Alan Modra + * archive.c (_bfd_generic_read_ar_hdr_mag): Sanity check extended + name size. Use bfd_malloc rather than bfd_zmalloc, clearing just + struct areltdata. - * po/SRC-POTFILES.in: Regenerate. +2020-03-23 Sebastian Huber -2019-05-24 Alan Modra + * elflink.c (_bfd_elf_tls_setup): Mention .tdata in comment. - * elf64-ppc.c: Comment on powerxx _notoc stub variants. - (LI_R11_0, LIS_R11, ORI_R11_R11_0, SLDI_R11_R11_34): Define. - (PADDI_R12_PC, PLD_R12_PC, D34, HA34): Define. - (struct ppc_link_hash_table): Add powerxx_stubs. - (ppc64_elf_check_relocs): Set powerxx_stubs. - (build_powerxx_offset, size_powerxx_offset), - (num_relocs_for_powerxx_offset), - (emit_relocs_for_powerxx_offset): New functions. - (plt_stub_size): Size powerxx stubs. - (ppc_build_one_stub): Emit powerxx stubs. - (ppc_size_one_stub): Size powerxx stubs. Omit .eh_frame for - powerxx stubs. - -2019-05-24 Alan Modra - - * elf64-ppc.c (ppc64_elf_check_relocs): Set has_gotrel for - R_PPC64_GOT_PCREL34. - (xlate_pcrel_opt): New function. - (ppc64_elf_edit_toc): Handle R_PPC64_GOT_PCREL34. - (ppc64_elf_relocate_section): Edit GOT indirect to GOT relative - for R_PPC64_GOT_PCREL34. Implement R_PPC64_PCREL_OPT optimisation. - -2019-05-24 Alan Modra - - * reloc.c (BFD_RELOC_PPC64_D34, BFD_RELOC_PPC64_D34_LO), - (BFD_RELOC_PPC64_D34_HI30, BFD_RELOC_PPC64_D34_HA30), - (BFD_RELOC_PPC64_PCREL34, BFD_RELOC_PPC64_GOT_PCREL34), - (BFD_RELOC_PPC64_PLT_PCREL34), - (BFD_RELOC_PPC64_ADDR16_HIGHER34, BFD_RELOC_PPC64_ADDR16_HIGHERA34), - (BFD_RELOC_PPC64_ADDR16_HIGHEST34, BFD_RELOC_PPC64_ADDR16_HIGHESTA34), - (BFD_RELOC_PPC64_REL16_HIGHER34, BFD_RELOC_PPC64_REL16_HIGHERA34), - (BFD_RELOC_PPC64_REL16_HIGHEST34, BFD_RELOC_PPC64_REL16_HIGHESTA34), - (BFD_RELOC_PPC64_D28, BFD_RELOC_PPC64_PCREL28): New reloc enums. - * elf64-ppc.c (PNOP): Define. - (ppc64_elf_howto_raw): Add reloc howtos for new relocations. - (ppc64_elf_reloc_type_lookup): Translate new bfd reloc numbers. - (ppc64_elf_ha_reloc): Adjust addend for highera34 and highesta34 - relocs. - (ppc64_elf_prefix_reloc): New function. - (struct ppc_link_hash_table): Add notoc_plt. - (is_branch_reloc): Add R_PPC64_PLTCALL_NOTOC. - (is_plt_seq_reloc): Add R_PPC64_PLT_PCREL34, - R_PPC64_PLT_PCREL34_NOTOC, and R_PPC64_PLTSEQ_NOTOC. - (ppc64_elf_check_relocs): Handle pcrel got and plt relocs. Set - has_pltcall for section on seeing R_PPC64_PLTCALL_NOTOC. Handle - possible need for dynamic relocs on non-pcrel powerxx relocs. - (dec_dynrel_count): Handle non-pcrel powerxx relocs. - (ppc64_elf_inline_plt): Handle R_PPC64_PLTCALL_NOTOC. - (toc_adjusting_stub_needed): Likewise. - (ppc64_elf_tls_optimize): Handle R_PPC64_PLTSEQ_NOTOC. - (ppc64_elf_relocate_section): Handle new powerxx relocs. - * bfd-in2.h: Regenerate. - * libbfd.h: Regenerate. +2020-03-23 Alan Modra -2019-05-23 Jose E. Marchesi + * ecoff.c (_bfd_ecoff_slurp_armap): Sanity check parsed_size and + symbol count. Allocate an extra byte to ensure name strings + are terminated. Sanity check name offsets. Release memory on + error return. - * config.bfd (targ_cpu): Process bpf-*-none only if BFD64. - * configure.ac: Set target_size=64 for bpf_elf64_le_vec and - bpf_elf64_be_vec. - * configure: Regenerate. +2020-03-23 Alan Modra -2019-05-23 Jose E. Marchesi + * i386msdos.c (msdos_object_p): Don't access e_lfanew when that + field hasn't been read. Remove unnecessary casts. - * configure: Regenerated. - * Makefile.am (ALL_MACHINES): Add cpu-bpf.lo. - (ALL_MACHINES_CFILES): Add cpu-bpf.c. - (BFD64_BACKENDS): Add elf64-bpf.lo. - (BFD64_BACKENDS_CFILES): Add elf64-bpf.c. - * Makefile.in (SOURCE_HFILES): Regenerate. - * config.bfd (targ_cpu): Handle bpf-*-* targets. - * cpu-bpf.c: New file. - * elf64-bpf.c: Likewise. - * targets.c (_bfd_target_vector): Add bpf_elf64_be_vec and - bpf_elf64_le_vec. - * archures.c: Define architecture bfd_arch_bpf and machine - bfd_arch_bpf. - * reloc.c: Define BFD relocations used by the BPF target. - * bfd-in2.h: Regenerated. - * libbfd.h: Likewise. +2020-03-22 Alan Modra -2019-05-22 Alan Modra + * coff64-rs6000.c (xcoff64_slurp_armap): Ensure size is large + enough to read number of symbols. - * elf32-arm.c (arm_allocate_glue_section_space): Clear section - contents. +2020-03-20 H.J. Lu -2019-05-22 Alan Modra + * configure.ac (HAVE_EXECUTABLE_SUFFIX): Removed. + (EXECUTABLE_SUFFIX): Likewise. + * config.in: Regenerated. + * configure: Likewise. + * plugin.c (bfd_plugin_close_and_cleanup): Defined as + _bfd_generic_close_and_cleanup. + (plugin_list_entry): Remove resolution_file, resolution_option, + real_bfd, real_nsyms, real_syms, lto_nsyms, lto_syms, gcc, + lto_wrapper, gcc_env and initialized, + (need_lto_wrapper_p): Removed. + (get_lto_wrapper): Likewise. + (setup_lto_wrapper_env): Likewise. + (register_all_symbols_read): Likewise. + (egister_cleanup): Likewise. + (get_symbols): Likewise. + (add_input_file): Likewise. + (bfd_plugin_set_program_name): Remove need_lto_wrapper. + (add_symbols): Updated. + (try_claim): Likewise. + (try_load_plugin): Likewise. + (bfd_plugin_canonicalize_symtab): Likewise. + * plugin.h (bfd_plugin_set_program_name): Remove int argument. + (plugin_data_struct): Remove real_bfd, real_nsyms and real_syms. + +2020-03-19 H.J. Lu + + PR binutils/25640 + * plugin.c (plugin_list_entry): Add has_symbol_type. + (add_symbols_v2): New function. + (bfd_plugin_open_input): Don't invoke LTO wrapper if LTO plugin + provides symbol type. + (try_load_plugin): Add LDPT_ADD_SYMBOLS_V2. + (bfd_plugin_canonicalize_symtab): Use LTO plugin symbol type if + available. + +2020-03-20 Alan Modra + + * coff-rs6000.c (_bfd_xcoff_slurp_armap): Ensure size is large + enough to read number of symbols. + +2020-03-20 Alan Modra + + * elf.c (_bfd_elf_setup_sections): Don't test known non-NULL + backend functions for NULL before calling. + (copy_special_section_fields, _bfd_elf_copy_private_bfd_data), + (bfd_section_from_shdr, assign_section_numbers): Likewise. + * elfcode.h (elf_write_relocs, elf_slurp_reloc_table): Likewise. + * elfnn-ia64.c (ignore_errors): New function. + (elf_backend_link_order_error_handler): Redefine as ignore_errors. + +2020-03-19 Nick Clifton + + PR 25676 + * dwarf2.c (struct varinfo): Add unit_offset field to record the + location of the varinfo in the unit's debug info data. Change the + type of the stack field to a boolean. + (lookup_var_by_offset): New function. Returns the varinfo + structure for the variable described at the given offset in the + unit's debug info. + (scan_unit_for_symbols): Add support for variables which have the + DW_AT_specification attribute. + +2020-03-19 Nick Clifton + + PR 25699 + * elf.c (bfd_elf_set_group_contents): Replace assertion with an + error return. + +2020-03-19 Sebastian Huber + + * elfxx-riscv.c (riscv_parse_subset): Don't use C99. + +2020-03-18 Nick Clifton + + PR 25673 + * elf.c (_bfd_elf_write_secondary_reloc_section): Fix illegal + memory access when processing a corrupt secondary reloc section. + +2020-03-18 Christophe Lyon + + * elf32-arm.c (arm_build_one_stub): Emit a fatal error message + instead of calling abort. + * 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. + * elf64-ppc.c (ppc_build_one_stub): Likewise. + (ppc_size_one_stub): Likewise. + * elfnn-aarch64.c (aarch64_build_one_stub): Likewise. + +2020-03-17 Nick Clifton + + PR 25688 + * elf.c (_bfd_elf_copy_special_section_fields): Replace assertions + with error messages. + +2020-03-17 Nick Clifton + + PR 25687 + * elf.c (_bfd_elf_slurp_secondary_reloc_section): Remove redundant + free. Add free on another failure path. + +2020-03-16 Alan Modra + + PR 25675 + * elf.c (elf_sort_segments): Don't call bfd_octets_per_byte unless + we have a non-zero section count. Do lma comparison in octets. + +2020-03-16 Alan Modra + + * vms-alpha.c (dst_restore_location): Validate index into + dst_ptr_offsets array before accessing. Return status. + (dst_retrieve_location): Similarly, making "loc" parameter a + pointer to return value. + (_bfd_vms_slurp_etir): Update calls to above functions. - * vms-alpha.c (_bfd_vms_write_etir): Don't attempt further - processing on "size error in section". +2020-03-14 Kamil Rytarowski -2019-05-22 Alan Modra + * configure.ac: Include netbsd-core.lo for all NetBSD arm and mips + targets. + * configure: Regenerated. - * som.c (som_bfd_free_cached_info): Call - _bfd_generic_close_and_cleanup. +2020-03-14 Alan Modra -2019-05-21 Faraz Shahbazker + * section.c (BFD_FAKE_SECTIONS): Formatting. + * bfd-in2.h: Regenerate. - * elfxx-mips.c (_bfd_mips_elf_check_relocs): Generate error - for TLS_TPREL_HI16(/LO16) relocations in shared library. +2020-03-13 Kamil Rytarowski -2019-05-21 Faraz Shahbazker + * elf.c (elfcore_grok_netbsd_note): Add support for + NT_NETBSDCORE_LWPSTATUS notes. - * elfxx-mips.c (_bfd_mips_elf_check_relocs): Add NULL pointer - checks. Search the RELA table for n64 relocations. - -2019-05-21 Matthew Fortune - Faraz Shahbazker - - * elfxx-mips.c (LA25_BC): New macro. - (mips_elf_link_hash_table): New field. - (STUB_JALRC): New macro. - (mipsr6_o32_exec_plt0_entry_compact): New array. - (mipsr6_n32_exec_plt0_entry_compact): Likewise. - (mipsr6_n64_exec_plt0_entry_compact): Likewise. - (mipsr6_exec_plt_entry_compact): Likewise. - (mips_elf_create_la25_stub): Use BC instead of J for stubs - when compact_branches is true. - (_bfd_mips_elf_finish_dynamic_symbol): Choose the compact - PLT for MIPSR6 with compact_branches. Do not reorder the - compact branches PLT. Switch the lazy stub for MIPSR6 - with compact_branches to use JALRC. - (mips_finish_exec_plt): Choose the compact PLT0 for MIPSR6 - when compact_branches is true. - (_bfd_mips_elf_compact_branches): New function. - * elfxx-mips.h (_bfd_mips_elf_compact_branches): New prototype. - -2019-05-21 Tamar Christina - - PR ld/24373 - * elfnn-aarch64.c (_bfd_aarch64_erratum_843419_branch_to_stub): - Fix print formatter. - -2019-05-21 Andre Vieira - - PR 24460 - * elf32-arm.c (get_value_helper): Remove. - (elf32_arm_final_link_relocate): Fix branch future relocations. - -2019-05-21 Tamar Christina - - PR ld/24373 - * bfd-in.h (enum erratum_84319_opts): New - (bfd_elf64_aarch64_set_options, bfd_elf32_aarch64_set_options): Change - int to enum erratum_84319_opts. - * bfd-in2.h: Regenerate. - * elfnn-aarch64.c (struct elf_aarch64_link_hash_table): Change - fix_erratum_843419 to use new enum, remove fix_erratum_843419_adr. - (_bfd_aarch64_add_stub_entry_after): Conditionally create erratum stub. - (aarch64_size_one_stub): Conditionally size erratum 843419 stubs. - (_bfd_aarch64_resize_stubs): Amend comment. - (elfNN_aarch64_size_stubs): Don't generate stubs when no workaround - requested. - (bfd_elfNN_aarch64_set_options): Use new fix_erratum_843419 enum. - (_bfd_aarch64_erratum_843419_branch_to_stub): Implement selection of - erratum workaround. - (clear_erratum_843419_entry): Update erratum conditional. - -2019-05-21 Senthil Kumar Selvaraj - - PR ld/24571 - * bfd/elf32-avr.c (elf32_avr_relax_section): Adjust range check - when computing distance_short_enough. - -2019-05-21 Senthil Kumar Selvaraj - - PR ld/24564 - * bfd/elf32-avr.c (avr_relative_distance_considering_wrap_around): - Wrap around even if distance equals avr_pc_wrap_around. +2020-03-13 Christophe Lyon -2019-05-20 Nick Clifton + * bfd-in2.h: Regenerate. + * section.c (asection): Add already_assigned field. + (BFD_FAKE_SECTION): Add default initializer for it. + * ecoff.c (bfd_debug_section): Initialize already_assigned field. + * elf32-arm.c (arm_build_one_stub): Add support for + non_contiguous_regions. + * 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. + * elf64-ppc.c (ppc_build_one_stub): Likewise. + (ppc_size_one_stub): Likewise. + * elfnn-aarch64.c (aarch64_build_one_stub): Likewise. + * elflink.c (elf_link_input_bfd): Likewise. - * po/fr.po: Updated French translation. +2020-03-13 H.J. Lu -2019-05-16 Andre Vieira + PR ld/24920 + * elf-linker-x86.h (elf_linker_x86_params): Add + static_before_all_inputs and has_dynamic_linker. + * elfxx-x86.c (_bfd_x86_elf_link_setup_gnu_properties): Report + dynamic input objects if -static is passed at command-line + before all input files without --dynamic-linker unless + --no-dynamic-linker is used. + +2020-03-13 Kamil Rytarowski + + * elf.c (elfcore_grok_netbsd_note): Add support for aarch64. + +2020-03-13 Christian Eggers + + * bfd.c (bfd_record_phdr): New local "opb". Fix assignment of + "p_paddr" from "at". + * elfcode.h (bfd_from_remote_memory): Add units to several + parameters. New local "opb". Fix usage of p_align. Fix + calculation of "localbase" from "ehdr_vma" and "p_vaddr". Fix + call of target_read_memory. + * elflink.c (elf_fixup_link_order): Fix scope of "s" local. Fix + calculation of "offset" and "output_offset". + (bfd_elf_final_link): New local "opb". Fix calculation of "size" + from "offset" and fix calculation of "end" from "vma+size". Fix + comparison between "sh_addr" and "vma"/"output_offset". + (bfd_elf_discard_info): Fix calculation of "eh_alignment". + * elf-bfd.h (struct elf_link_hash_table): Add unit to tls_size + member. + * elf.c (_bfd_elf_map_sections_to_segments): Add unit (bytes/ + octets) to "wrap_to2 and "phdr_size" locals. Fix calculation of + "wrap_to" value. Add unit (bytes) to phdr_lma variable. Fix + assignment of p_paddr from phdr_lma. Fix comparison between + "lma+size" and "next->lma". + (elf_sort_segments): Fix assignment from p_paddr to lma. + (assign_file_positions_for_load_sections): Add unit (bytes) to + local "align". Fix calculation of local "off_adjust". Fix + calculation of local "filehdr_vaddr". + (assign_file_positions_for_non_load_sections): New local "opb". + Fix calculation of "end" from "p_size". Fix comparison between + "vma+SECTION_SIZE" and "start". Fix calculation of "p_memsz" + from "end" and "p_vaddr". + (rewrite_elf_program_header): Fix comparison between p_vaddr and + vma. Fix assignment to p_paddr from lma. Fix comparison between + p_paddr and lma. Fix assignment to p_paddr from lma. + * merge.c (sec_merge_emit): New local "opb". Convert + "alignment_power" to octets. + (_bfd_add_merge_section): New locals "alignment_power" and + "opb". Fix comparison between "alignment_power" and + "sizeof(align)". + (_bfd_merge_sections): New local "opb". Divide size by opb + before checking align mask. + +2020-03-13 Christian Eggers + + * elf.c (_bfd_elf_make_section_from_shdr): Introduce new temp + opb. Divide Elf_Internal_Shdr::sh_addr by opb when setting + section LMA/VMA. + (_bfd_elf_make_section_from_phdr): Similarly. + (elf_fake_sections): Fix calculation of + Elf_Internal_shdr::sh_addr from section VMA. + (_bfd_elf_map_sections_to_segments): Fix mixup between octets + and bytes. + (assign_file_positions_for_load_sections): Fix calculations of + Elf_Internal_shdr::p_vaddr and p_paddr from section LMA/VMA. Fix + comparison between program header address and section LMA. + (assign_file_positions_for_non_load_sections): Likewise. + (rewrite_elf_program_header): Likewise. Introduce new temp opb. + (IS_CONTAINED_BY_VMA): Add parameter opb. + (IS_CONTAINED_BY_LMA,IS_SECTION_IN_INPUT_SEGMENT, + INCLUDE_SECTION_IN_SEGMENT): Likewise. + (copy_elf_program_header): Update call to ELF_SECTION_IN_SEGMENT. + Fix calculations of p_addr_valid and p_vaddr_offset. + * elflink.c (elf_link_add_object_symbols): Multiply section VMA + with octets per byte when comparing against p_vaddr. + +2020-03-11 Alan Modra + + * som.c (setup_sections): Sanity check subspace.name. + +2020-03-11 Alan Modra + + * elf64-ppc.c (ppc64_elf_inline_plt): Do increment rel in for loop. + +2020-03-10 Alan Modra + + PR 25648 + * ihex.c (ihex_write_object_contents): Don't assume ordering of + addresses here. + +2020-03-09 Alan Modra + + * wasm-module.c (wasm_scan): Sanity check file name length + before allocating memory. Move common section setup code. Do + without bfd_tell to calculate section size. + +2020-03-06 Nick Clifton + + * elf.c (_bfd_elf_set_section_contents): Replace call to abort + with error messages and failure return values. + +2020-03-05 Max Filippov + + * elf32-xtensa.c (shrink_dynamic_reloc_sections): Shrink dynamic + relocation sections for any removed reference to a dynamic symbol. + +2020-03-05 Nick Clifton + + * elf-bfd.h (struct elf_backend_data): Add new fields: + init_secondary_reloc_section, slurp_secondary_reloc_section, + write_secondary_reloc_section. + (_bfd_elf_init_secondary_reloc_section): Prototype. + (_bfd_elf_slurp_secondary_reloc_section): Prototype. + (_bfd_elf_write_secondary_reloc_section): Prototype. + * elf.c ( bfd_section_from_shdr): Invoke the new + init_secondary_reloc_section backend function, if defined, when a + second reloc section is encountered. + (swap_out_syms): Invoke the new symbol_section_index function, if + defined, when computing the section index of an OS/PROC specific + symbol. + (_bfd_elf_init_secondary_reloc_section): New function. + (_bfd_elf_slurp_secondary_reloc_section): New function. + (_bfd_elf_write_secondary_reloc_section): New function. + (_bfd_elf_copy_special_section_fields): New function. + * elfcode.h (elf_write_relocs): Invoke the new + write_secondary_relocs function, if defined, in order to emit + secondary relocs. + (elf_slurp_reloc_table): Invoke the new slurp_secondary_relocs + function, if defined, in order to read in secondary relocs. + * elfxx-target.h (elf_backend_copy_special_section_fields): + Provide a non-NULL default definition. + (elf_backend_init_secondary_reloc_section): Likewise. + (elf_backend_slurp_secondary_reloc_section): Likewise. + (elf_backend_write_secondary_reloc_section): Likewise. + (struct elf_backend_data elfNN_bed): Add initialisers for the new + fields. + * configure.ac (score_elf32_[bl]e_vec): Add elf64.lo + * configure: Regenerate. + +2020-03-05 Alan Modra + + * archive64.c (_bfd_archive_64_bit_slurp_armap): Check parsed_size + against file size before allocating memory. Use bfd_alloc rather + than bfd_zalloc for carsym/strings memory. + +2020-03-04 Alan Modra + + * elf.c (elf_fake_sections): Ensure sh_addralign is such that + sh_addr mod sh_addalign is zero. + +2020-03-04 Alan Modra + + * format.c (bfd_check_format_matches): Call cleanup on error exit. + +2020-03-03 Alan Modra + + * format.c (struct bfd_preserve): Add cleanup field. + (bfd_preserve_save): Add cleanup param and save. + (bfd_preserve_restore): Return cleanup. + (bfd_preserve_finish): Call the cleanup for the discarded match. + (bfd_check_format_matches): Pass cleanup to bfd_preserve_save, + and clear when preserving a match. Restore cleanup too when + restoring that match. + +2020-03-02 Alan Modra + + * cisco-core.c (cisco_core_file_p): Return bfd_cleanup. + * hpux-core.c (hpux_core_core_file_p): Update prototype. + * sco5-core.c (sco5_core_file_p): Return bfd_cleanup. + (core_sco5_vec): Correct initialisers. + +2020-03-02 Alan Modra + + * aix386-core.c (aix386_core_file_p): Return bfd_cleanup. + * aix5ppc-core.c (xcoff64_core_p): Likewise. + * cisco-core.c (cisco_core_file_validate): Likewise. + * hppabsd-core.c (hppabsd_core_core_file_p): Likewise. + * hpux-core.c (hpux_core_core_file_p): Likewise. + * irix-core.c (irix_core_core_file_p): Likewise. + * lynx-core.c (lynx_core_file_p): Likewise. + * netbsd-core.c (netbsd_core_file_p): Likewise. + * osf-core.c (osf_core_core_file_p): Likewise. + * ptrace-core.c (ptrace_unix_core_file_p): Likewise. + * sco5-core.c (sco5_core_file_p): Likewise. + +2020-03-02 H.J. Lu + + * trad-core.c (trad_unix_core_file_p): Return bfd_cleanup. + +2020-03-02 Alan Modra + + * targets.c (bfd_cleanup): New typedef. + (struct bfd <_bfd_check_format>): Return a bfd_cleanup. + * libbfd-in.h (_bfd_no_cleanup): Define. + * format.c (bfd_reinit): Add cleanup parameter, call it. + (bfd_check_format_matches): Set cleanup from _bfd_check_format + call and pass to bfd_reinit. Delete temp, use abfd->xvec instead. + * aout-target.h (callback, object_p): Return bfd_cleanup. + * aout-tic30.c (tic30_aout_callback, tic30_aout_object_p): Likewise. + * archive.c (bfd_generic_archive_p): Likewise. + * binary.c (binary_object_p): Likewise. + * coff-alpha.c (alpha_ecoff_object_p): Likewise. + * coff-ia64.c (ia64coff_object_p): Likewise. + * coff-rs6000.c (_bfd_xcoff_archive_p, rs6000coff_core_p): Likewise. + * coff-sh.c (coff_small_object_p): Likewise. + * coff-stgo32.c (go32_check_format): Likewise. + * coff64-rs6000.c (xcoff64_archive_p, rs6000coff_core_p), + (xcoff64_core_p): Likewise. + * coffgen.c (coff_real_object_p, coff_object_p): Likewise. + * elf-bfd.h (bfd_elf32_object_p, bfd_elf32_core_file_p), + (bfd_elf64_object_p, bfd_elf64_core_file_p): Likewise. + * elfcode.h (elf_object_p): Likewise. + * elfcore.h (elf_core_file_p): Likewise. + * i386msdos.c (msdos_object_p): Likewise. + * ihex.c (ihex_object_p): Likewise. + * libaout.h (some_aout_object_p): Likewise. + * libbfd-in.h (bfd_generic_archive_p, _bfd_dummy_target), + (_bfd_vms_lib_alpha_archive_p, _bfd_vms_lib_ia64_archive_p): Likewise. + * libbfd.c (_bfd_dummy_target): Likewise. + * libcoff-in.h (coff_object_p): Likewise. + * mach-o-aarch64.c (bfd_mach_o_arm64_object_p), + (bfd_mach_o_arm64_core_p): Likewise. + * mach-o-arm.c (bfd_mach_o_arm_object_p), + (bfd_mach_o_arm_core_p): Likewise. + * mach-o-i386.c (bfd_mach_o_i386_object_p), + (bfd_mach_o_i386_core_p): Likewise. + * mach-o-x86-64.c (bfd_mach_o_x86_64_object_p), + (bfd_mach_o_x86_64_core_p): Likewise. + * mach-o.c (bfd_mach_o_header_p, bfd_mach_o_gen_object_p), + (bfd_mach_o_gen_core_p, bfd_mach_o_fat_archive_p): Likewise. + * mach-o.h (bfd_mach_o_object_p, bfd_mach_o_core_p), + (bfd_mach_o_fat_archive_p, bfd_mach_o_header_p): Likewise. + * mmo.c (mmo_object_p): Likewise. + * pef.c (bfd_pef_object_p, bfd_pef_xlib_object_p): Likewise. + * peicode.h (coff_real_object_p, pe_ILF_object_p), + (pe_bfd_object_p): Likewise. + * plugin.c (ld_plugin_object_p, bfd_plugin_object_p): Likewise. + * ppcboot.c (ppcboot_object_p): Likewise. + * rs6000-core.c (rs6000coff_core_p): Likewise. + * som.c (som_object_setup, som_object_p): Likewise. + * srec.c (srec_object_p, symbolsrec_object_p): Likewise. + * tekhex.c (tekhex_object_p): Likewise. + * vms-alpha.c (alpha_vms_object_p): Likewise. + * vms-lib.c (_bfd_vms_lib_archive_p, _bfd_vms_lib_alpha_archive_p), + (_bfd_vms_lib_ia64_archive_p, _bfd_vms_lib_txt_archive_p): Likewise. + * wasm-module.c (wasm_object_p): Likewise. + * xsym.c (bfd_sym_object_p): Likewise. + * xsym.h (bfd_sym_object_p): Likewise. + * aoutx.h (some_aout_object_p): Likewise, and callback parameter + return type. + * pdp11.c (some_aout_object_p): Likewise. + * plugin.c (register_ld_plugin_object_p): Update object_p + parameter type. + * plugin.h (register_ld_plugin_object_p): Likewise. + * bfd-in2.h: Regenerate. + * libbfd.h: Regenerate. + * libcoff.h: Regenerate. - * elf32-arm.c (elf32_arm_merge_eabi_attributes): Add case for Tag_MVE_arch. +2020-03-02 Alan Modra -2019-05-16 Alan Modra + * coff-alpha.c (alpha_ecoff_le_vec): Add SEC_SMALL_DATA to + applicable section flags. + * coff-mips.c (mips_ecoff_le_vec, mips_ecoff_be_vec): Likewise. + (mips_ecoff_bele_vec): Likewise. + * coffcode.h (sec_to_styp_flags): Set SEC_SMALL_DATA for .sdata + and .sbss sections. + * ecoff.c (_bfd_ecoff_new_section_hook): Likewise. + (_bfd_ecoff_styp_to_sec_flags): Likewise. + +2020-03-02 Alan Modra + + * elf32-m32r.c (m32r_elf_section_flags): New function. + (elf_backend_section_flags): Define. + * elf32-nds32.c (nds32_elf_section_flags): New function. + (elf_backend_section_flags): Define. + * elf32-ppc.c (ppc_elf_section_from_shdr): Set SEC_SMALL_DATA for + .sbss and .sdata sections. + * elf32-v850.c (v850_elf_section_from_shdr): Set SEC_SMALL_DATA + for SHF_V850_GPREL sections. + * elf64-alpha.c (elf64_alpha_section_from_shdr): Delete outdated + FIXME. + * elf64-hppa.c (elf64_hppa_section_from_shdr): Set SEC_SMALL_DATA + for SHF_PARISC_SHORT sections. + * elf64-ppc.c (ppc64_elf_section_flags): New function. + (elf_backend_section_flags): Define. + * elfxx-mips.c (_bfd_mips_elf_section_from_shdr): Set SEC_SMALL_DATA + for SHF_MIPS_GPREL sections. Delete FIXME. + +2020-03-02 Alan Modra + + * elf-bfd.h (elf_backend_section_flags): Remove flagword* param. + * elf.c (_bfd_elf_make_section_from_shdr): Set section flags before + calling elf_backend_section_flags with adjusted params. Use + newsect->flags past that point. + (_bfd_elf_new_section_hook): Always set sh_type and sh_flags for + special sections. + (_bfd_elf_init_private_section_data): Allow normal sh_type sections + to have their type overridden, and all sh_flags but processor and + os specific. + * elf32-arm.c (elf32_arm_section_flags): Adjust for changed params. + * elf32-mep.c (mep_elf_section_flags): Likewise. + * elf32-nios2.c (nios2_elf32_section_flags): Likewise. + * elf64-alpha.c (elf64_alpha_section_flags): Likewise. + * elf64-ia64-vms.c (elf64_ia64_section_flags): Likewise. + * elfnn-ia64.c (elfNN_ia64_section_flags): Likewise. + * elfnn-aarch64.c (elfNN_aarch64_size_stubs): Exclude the linker + stub BFD and non-aarch64 input files when scanning for stubs. + +2020-03-02 Alan Modra + + * coff-alpha.c (alpha_ecoff_get_elt_at_filepos): Provide an upper + limit to decompressed element size. + +2020-03-02 Alan Modra + + * vms-lib.c (vms_traverse_index): Add recur_count param and + update calls. Fail on excessive recursion. + +2020-03-02 Alan Modra + + * vms-alpha.c (vms_get_remaining_object_record): Use + bfd_realloc_or_free rather than bfd_realloc. + (add_symbol_entry, vector_grow1, alpha_vms_slurp_relocs): Likewise. + (dst_define_location, parse_module): Likewise, and check realloc + return status before using memory. Return status from function + adjusting all callers. + +2020-02-28 Alan Modra - * elf32-arm.c (elf32_arm_write_section): Revert last change. + * vms-lib.c (_bfd_vms_lib_archive_p): Free memory on error paths. -2019-05-15 Alan Modra +2020-02-28 Alan Modra - * elf32-arm.c (elf32_arm_write_section): Don't leave - error case of STM32L4XX_ERRATUM_BRANCH_TO_VENEER with - unitialised section contents. + * vms-alpha.c (alpha_vms_object_p): Use _bfd_malloc_and_read. + Remove duplicate undersize check. -2019-05-14 Jamey Hicks +2020-02-27 Alan Modra - PR 19921 - * verilog.c: (VerilogDataWidth): New variable. - (verilog_write_record): Emit bytes in VerilogDataWidth bundles. + PR 24511 + * mmo.c (mmo_scan): Set SEC_DATA for .data. -2019-05-08 Nick Clifton +2020-02-27 Alan Modra - PR 24523 - * elf32-m68k.c (elf32_m68k_merge_private_bfd_data): Return TRUE - rather than FALSE if encountering a non-ELF file. + PR 24511 + * syms.c (stt): Trim off all but 'e', 'i' and 'p' entries. + (coff_section_type): Adjust comment. + (decode_section_type): Likewise. Call coff_section_type before + decode_section_type. + (bfd_decode_symclass): Use 'c' for common sections other than + the standard one. + +2020-02-27 Alan Modra + + * coff-rs6000.c (_bfd_xcoff_read_ar_hdr): Put all data in one + malloc'd block. + +2020-02-27 Alan Modra + + * bfd.c (bfd_stat_arch_elt): Use vector of containing archive, + if file is an archive element. + * bfd-in2.h: Regenerate. + +2020-02-26 Alan Modra + + * archive.c (do_slurp_bsd_armap): Increase minimum parsed_size, and + bfd_set_error on failing test. Don't bother changing bfd_error on + file read error. Check symdef_count is multiple of BSD_SYMDEF_SIZE. + Check sym name is within string buffer. Use size_t for some vars. + (do_slurp_coff_armap): Use size_t for some variables, fix size of + int_buf. Don't change bfd_error on file read error. Use + _bfd_mul_overflow when calculating carsym buffer size. Reorder + calculations to catch overflows before they occur. malloc and + free raw armap rather than using bfd_alloc. Read raw armap before + allocating carsym+strings buffer. + (_bfd_slurp_extended_name_table): Localize variables. Check + name size against file size. + +2020-02-26 Alan Modra + + * vms-lib.c (vms_lib_read_index): Release correct buffer. + +2020-02-26 Alan Modra + + * elf32-rx.c (rx_elf_relocate_section): Use bfd_malloc rather than + malloc. Check for NULL return from bfd_malloc. + (rx_table_find, rx_table_map): Likewise. + (rx_set_section_contents): Check bfd_alloc return. + (rx_dump_symtab): Don't alloc internal_syms or external_syms. + +2020-02-26 Alan Modra + + * aoutx.h: Indent labels correctly. Format error strings. + * archive.c: Likewise. + * archive64.c: Likewise. + * coff-arm.c: Likewise. + * coff-rs6000.c: Likewise. + * coff-stgo32.c: Likewise. + * cpu-arm.c: Likewise. + * dwarf2.c: Likewise. + * elf-ifunc.c: Likewise. + * elf-properties.c: Likewise. + * elf-s390-common.c: Likewise. + * elf-strtab.c: Likewise. + * elf.c: Likewise. + * elf32-arm.c: Likewise. + * elf32-bfin.c: Likewise. + * elf32-cr16.c: Likewise. + * elf32-csky.c: Likewise. + * elf32-i386.c: Likewise. + * elf32-m68k.c: Likewise. + * elf32-msp430.c: Likewise. + * elf32-nds32.c: Likewise. + * elf32-nios2.c: Likewise. + * elf32-pru.c: Likewise. + * elf32-xtensa.c: Likewise. + * elf64-ia64-vms.c: Likewise. + * elf64-x86-64.c: Likewise. + * elfcode.h: Likewise. + * elfcore.h: Likewise. + * elflink.c: Likewise. + * elfnn-aarch64.c: Likewise. + * elfnn-ia64.c: Likewise. + * elfnn-riscv.c: Likewise. + * elfxx-mips.c: Likewise. + * elfxx-sparc.c: Likewise. + * elfxx-x86.c: Likewise. + * i386lynx.c: Likewise. + * merge.c: Likewise. + * pdp11.c: Likewise. + * plugin.c: Likewise. + * reloc.c: Likewise. -2019-05-06 Alan Modra +2020-02-26 Alan Modra - * elf32-pj.c (pj_elf_reloc): Don't report undefined weak as an error. + PR 25593 + * elf-bfd.h (struct elf_link_hash_table): Rename "loaded" to + "dyn_loaded". + (bfd_elf_add_dt_needed_tag): Declare. + * elf-strtab.c (_bfd_elf_strtab_restore): Handle NULL buf. + * elflink.c (bfd_elf_add_dt_needed_tag): Make global and rename + from elf_add_dt_needed_tag. Remove soname and doit param. + (elf_link_add_object_symbols): Don't use elf_add_dt_needed_tag + to see whether as-needed lib is already loaded, use dyn_loaded + list instead. When saving and restoring around as-needed lib + handle possibility that dynstr has not been initialised. Don't + add DT_NEEDED tags here. Limit dyn_loaded list to dynamic libs. + Mark libs loaded via DT_NEEDED entries of other libs with + DYN_NO_NEEDED if they should not be mentioned in DT_NEEDED of + the output. + (elf_link_check_versioned_symbol): Remove now unneccesary + DYNAMIC check when traversing dyn_loaded list. + +2020-02-26 Alan Modra + + * bfdio.c (bfd_get_file_size): Ignore bogus archive element sizes. + +2020-02-25 H.J. Lu + + PR binutils/25584 + * plugin.c (need_lto_wrapper_p): New. + (bfd_plugin_set_program_name): Add an int argument to set + need_lto_wrapper_p. + (get_lto_wrapper): Return FALSE if need_lto_wrapper_p isn't + set. + * plugin.h (bfd_plugin_set_program_name): Add an int argument. + +2020-02-24 Alan Modra + + * vms-lib.c (_bfd_vms_lib_archive_p): Correct overflow checks. + +2020-02-24 Alan Modra + + * vms-lib.c (struct carsym_mem): Add limit. + (vms_add_index): Heed limit. + (vms_traverse_index): Catch buffer overflows. Remove outdated fixme. + (vms_lib_read_index): Set up limit. Catch 32-bit overflow. + Always return actual number read. + (_bfd_vms_lib_archive_p): Catch buffer overflows. Replace + assertion with error exit. + +2020-02-22 Alan Modra + + PR 25585 + * elf.c (assign_file_positions_for_load_sections): Continue linking + on "PHDR segment not covered by LOAD segment" errors. + +2020-02-21 Alan Modra + + * mach-o.c (bfd_mach_o_canonicalize_relocs): Fix ineffective + overflow check. + (bfd_mach_o_canonicalize_reloc): Likewise. + (bfd_mach_o_canonicalize_dynamic_reloc): Likewise. Sanity check + counts and offsets against file size. + (bfd_mach_o_build_dysymtab): Fix ineffective overflow check. + (bfd_mach_o_mangle_sections): Remove unnecessary overflow check. + (bfd_mach_o_read_symtab_symbols): Sanity check count and offset + against file size. Delete symbol table error message. + (bfd_mach_o_read_dysymtab): Sanity check counts and offsets + against file size. + (bfd_mach_o_read_symtab): Likewise. + (bfd_mach_o_read_command): Pass file size. + (bfd_mach_o_scan): Sanity check command count against file size. + +2020-02-21 Alan Modra + + PR 25569 + * aoutx.h (adjust_o_magic, adjust_z_magic, adjust_n_magic): Use + "text", "data" and "bss" section pointer vars. Don't update + section size, just exec header sizes. + (adjust_sizes_and_vmas): Don't update text section size. Set + initial exec header a_text. Print exec headers sizes. + * pdp11.c (adjust_o_magic, adjust_z_magic, adjust_n_magic), + (adjust_sizes_and_vmas): Similarly. Formatting. + (final_link): Correct final file extension. + +2020-02-20 Nick Clifton + + * elf-bfd.h (struct elf_backend_data): Add symbol_section_index + callback. + * elfxx-target.h (elf_backend_symbol_section_index): Provide + default definition. + (elfNN_bed): Initialise the symbol_section_index field. + * elf.c (swap_out_syms): Call symbol_section_index, if defined, on + OS and PROC specific section indicies. Warn if converting other + reserved incidies to SHN_ABS. + +2020-02-19 Sergey Belyashov + + PR 25537 + * cpu-z80.c: Add machine type compatibility checking. + +2020-02-19 H.J. Lu + + PR binutils/25355 + * plugin.c (plugin_list_entry): Remove handle. + (try_load_plugin): Call dlclose before return. + +2020-02-19 Alan Modra + + * libbfd-in.h (_bfd_constant_p): Define. + (_bfd_alloc_and_read, _bfd_malloc_and_read): Check read size against + file size before allocating memory. + * coffgen.c (_bfd_coff_get_external_symbols): Remove file size check. + * elf.c (bfd_elf_get_str_section): Likewise. + (_bfd_elf_slurp_version_tables): Likewise. + * libbfd.h: Regenerate. -2019-05-06 Alan Modra +2020-02-19 Alan Modra - * reloc.c (BFD_RELOC_PPC64_TPREL16_HIGH, BFD_RELOC_PPC64_TPREL16_HIGHA), - (BFD_RELOC_PPC64_DTPREL16_HIGH, BFD_RELOC_PPC64_DTPREL16_HIGHA): - Sort before BFD_RELOC_PPC64_DTPREL16_HIGHESTA entry. + * libbfd-in.h (_bfd_alloc_and_read, _bfd_malloc_and_read): New. + * aoutx.h (aout_get_external_symbols): Replace calls to + bfd_[m]alloc and bfd_bread with call to _bfd_[m]alloc_and_read. + (slurp_reloc_table): Likewise. + * archive.c (do_slurp_bsd_armap): Likewise. + (do_slurp_coff_armap): Likewise. + * archive64.c (_bfd_archive_64_bit_slurp_armap): Likewise. + * coff-rs6000.c (_bfd_xcoff_slurp_armap): Likewise. + * coff64-rs6000.c (xcoff64_slurp_armap): Likewise. + * coffcode.h (coff_set_arch_mach_hook, buy_and_read): Likewise. + * coffgen.c (coff_real_object_p, coff_object_p, build_debug_section), + (_bfd_coff_get_external_symbols): Likewise. + * ecoff.c (ecoff_slurp_symbolic_header), + (_bfd_ecoff_slurp_symbolic_info, ecoff_slurp_reloc_table), + (_bfd_ecoff_slurp_armap, ecoff_link_add_object_symbols, READ), + (ecoff_indirect_link_order): Likewise. + * elf.c (bfd_elf_get_str_section, setup_group, elf_read_notes), + (_bfd_elf_slurp_version_tables): Likewise. + * elf32-m32c.c (m32c_elf_relax_section): Likewise. + * elf32-rl78.c (rl78_elf_relax_section): Likewise. + * elf32-rx.c (elf32_rx_relax_section): Likewise. + * elf64-alpha.c (READ): Likewise. + * elf64-mips.c (mips_elf64_slurp_one_reloc_table): Likewise. + * elf64-sparc.c (elf64_sparc_slurp_one_reloc_table): Likewise. + * elfcode.h (elf_slurp_symbol_table), + (elf_slurp_reloc_table_from_section): Likewise. + * elflink.c (elf_link_add_object_symbols), + (elf_link_check_versioned_symbol): Likewise. + * elfxx-mips.c (READ): Likewise. + * i386lynx.c (slurp_reloc_table): Likewise. + * lynx-core.c (lynx_core_file_p): Likewise. + * mach-o.c (bfd_mach_o_canonicalize_relocs), + (bfd_mach_o_read_symtab_strtab, bfd_mach_o_alloc_and_read), + (bfd_mach_o_read_prebound_dylib, bfd_mach_o_read_dyld_content + * pdp11.c (aout_get_external_symbols, slurp_reloc_table + * pef.c (bfd_pef_print_loader_section, bfd_pef_scan_start_address), + (bfd_pef_parse_symbols): Likewise. + * peicode.h (pe_ILF_object_p, pe_bfd_object_p + * som.c (setup_sections, som_slurp_string_table), + (som_slurp_reloc_table, som_bfd_count_ar_symbols), + (som_bfd_fill_in_ar_symbols): Likewise. + * vms-alpha.c (module_find_nearest_line, evax_bfd_print_dst), + (evax_bfd_print_image): Likewise. + * vms-lib.c (_bfd_vms_lib_archive_p): Likewise. + * wasm-module.c (wasm_scan): Likewise. + * xcofflink.c (xcoff_link_add_symbols): Likewise. + * xsym.c (bfd_sym_read_name_table), + (bfd_sym_print_type_information_table_entry): Likewise. * libbfd.h: Regenerate. - * bfd-in2.h: Regenerate. -2019-05-04 Alan Modra +2020-02-19 Alan Modra - PR 24511 - * syms.c (coff_section_type): Only allow '.', '$' and numeric - following the standard section names. - (bfd_decode_symclass): Prioritize section flag tests in - decode_section_type before name tests in coff_section_type. - * plugin.c (bfd_plugin_canonicalize_symtab): Init fake_section - and fake_common_section using BFD_FAKE_SECTION. Use "fake" as - their names and choose standard .text section flags for - fake_section. - -2019-05-02 Nick Clifton - - PR 24493 - * coffcode.h (styp_to_sec_flags): Treat .gnu.debuglink and - .gnu.debugaltlink sections as debugging sections. - -2019-04-30 Alan Modra - - * elf64-ppc.c (struct ppc64_elf_obj_tdata): Add has_gotrel. - (struct _ppc64_elf_section_data): Likewise. - (ppc64_elf_check_relocs): Set above fields. - (ppc64_elf_edit_toc): Add a pass over GOT relocs. - (ppc64_elf_relocate_section): Edit GOT indirect to GOT relative - when possible. + * aoutx.h (slurp_reloc_table): Allocate reloc_cache after + reading external relocs. + * ecoff.c (ecoff_slurp_reloc_table): Likewise. + * archive.c (_bfd_write_archive_contents): Don't twiddle bfd_error + after bfd_bread. + * archive64.c (_bfd_archive_64_bit_slurp_armap): Remove unnecessary + bfd_release. + * elf32-m32c.c (m32c_offset_for_reloc): Make shndx_buf a bfd_byte*. + (m32c_elf_relax_section): Likewise. + * elf32-rl78.c (rl78_offset_for_reloc): Likewise. + (rl78_elf_relax_section): Likewise. + * elf32-rx.c (rx_offset_for_reloc): Likewise. + (elf32_rx_relax_section): Likewise. + * mach-o.c (bfd_mach_o_alloc_and_read): Move earlier with better + parameter types and use.. + (bfd_mach_o_read_dylinker, bfd_mach_o_read_dylib), + (bfd_mach_o_read_fvmlib, bfd_mach_o_read_str): ..in these functions. + * peicode.h (pe_bfd_object_p): Don't zero the part of opthdr + being read from file, just the extra. + * som.c (som_slurp_symbol_table): Allocate internal symbol buffer + after reading external syms. Free on failure. + +2020-02-19 Alan Modra + + * coffcode.h (buy_and_read, coff_slurp_line_table), + (coff_slurp_symbol_table, coff_slurp_reloc_table): Replace + bfd_[z][m]alloc2 calls with _bfd_mul_overflow followed by the + corresponding bfd_alloc call. Adjust variables to suit. + * coffgen.c (_bfd_coff_get_external_symbols): Likewise. + * ecoff.c (_bfd_ecoff_slurp_symbolic_info), + (_bfd_ecoff_slurp_symbol_table, READ): Likewise. + * elf.c (bfd_elf_get_elf_syms, setup_group, bfd_section_from_shdr), + (swap_out_syms, _bfd_elf_slurp_version_tables): Likewise. + * elf32-m32c.c (m32c_elf_relax_section): Likewise. + * elf32-rl78.c (rl78_elf_relax_section): Likewise. + * elf32-rx.c (elf32_rx_relax_section): Likewise. + * elf64-alpha.c (READ): Likewise. + * elfcode.h (elf_object_p, elf_write_relocs, elf_write_shdrs_and_ehdr), + (elf_slurp_symbol_table, elf_slurp_reloc_table), + (bfd_from_remote_memory): Likewise. + * elfcore.h (core_find_build_id): Likewise. + * elfxx-mips.c (READ): Likewise. + * mach-o.c (bfd_mach_o_mangle_sections), + (bfd_mach_o_read_symtab_symbols, bfd_mach_o_read_thread), + (bfd_mach_o_read_dysymtab, bfd_mach_o_flatten_sections), + (bfd_mach_o_scan, bfd_mach_o_fat_archive_p): Likewise. + * som.c (setup_sections, som_prep_for_fixups) + (som_build_and_write_symbol_table, som_slurp_symbol_table), + (som_slurp_reloc_table, som_bfd_count_ar_symbols), + (som_bfd_fill_in_ar_symbols, som_slurp_armap), + (som_bfd_ar_write_symbol_stuff): Likewise. + * vms-alpha.c (vector_grow1): Likewise. + * vms-lib.c (vms_add_index): Likewise. + * wasm-module.c (wasm_scan_name_function_section): Likewise. + * libbfd.c (bfd_malloc2, bfd_realloc2, bfd_zmalloc2): Delete. + * opncls.c (bfd_alloc2, bfd_zalloc2): Delete. + * libbfd-in.h (bfd_malloc2, bfd_realloc2, bfd_zmalloc2), + (bfd_alloc2, bfd_zalloc2): Delete. + (_bfd_mul_overflow): Define. + * libbfd.h: Regenerate. -2019-04-26 H.J. Lu +2020-02-19 Alan Modra - PR ld/24486 - * elflink.c (elf_link_output_extsym): Don't complain undefined - weak dynamic reference. + * elf.c (bfd_section_from_shdr): Use bfd_zalloc rather than + bfd_zalloc2. + (assign_section_numbers): Likewise. + (elf_map_symbols): Likewise, and bfd_alloc rather than bfd_alloc2. + (_bfd_elf_map_sections_to_segments): Use bfd_malloc rather than + bfd_malloc2, size_t amt, and unsigned tls_count. + (rewrite_elf_program_header): Use bfd_malloc and size_t amt. + * elflink.c (elf_create_symbuf): Use bfd_malloc. + (elf_output_implib): Use bfd_alloc. + +2020-02-19 Alan Modra + + * bfd.c (struct bfd): Move format and direction to other + bitfields. Add "size". + * bfdio.c (bfd_get_size): Cache size when not writing file. + * opncls.c (bfd_get_debug_link_info_1): Allow for bfd_get_size + returning zero, ie. unknown. + (bfd_get_alt_debug_link_info): Likewise. + * bfd-in2.h: Regenerate. + +2020-02-19 Alan Modra + + * coffgen.c (_bfd_coff_get_external_symbols): Don't call + bfd_get_file_size twice. + (_bfd_coff_read_string_table): Allow for bfd_get_file_size + zero, ie. unknown, return. + * elf-attrs.c (_bfd_elf_parse_attributes): Likewise. + * elfcode.h (elf_swap_shdr_in): Likewise. + (elf_object_p): Don't call bfd_get_file_size twice and correct + file size check. + +2020-02-19 Alan Modra + + * mach-o.c (bfd_mach_o_flatten_sections): Return a bfd_boolean, + FALSE if memory alloc fails. Adjust calls. + * som.c (som_prep_for_fixups): Likewise. + * vms-alpha.c (alpha_vms_add_fixup_lp, alpha_vms_add_fixup_ca), + (alpha_vms_add_fixup_qr, alpha_vms_add_fixup_lr), + (alpha_vms_add_lw_reloc, alpha_vms_add_qw_reloc): Likewise. + * som.c (som_build_and_write_symbol_table): Return via error_return + on seek failure. + * vms-alpha.c (VEC_APPEND): Adjust for vector_grow1 changes. + (VEC_APPEND_EL): Delete. + (vector_grow1): Return pointer to element. Catch overflow. + Return NULL on memory allocation failure. + (alpha_vms_add_fixup_lp): Replace VEC_APPEND_EL with VEC_APPEND. + (alpha_vms_add_fixup_ca): Likewise. + (alpha_vms_link_add_object_symbols): Check VEC_APPEND result + before using. + * elf.c (bfd_section_from_shdr): Check bfd_zalloc2 result. + +2020-02-19 Alan Modra + + * aix386-core.c (aix386_core_file_p): Use size_t for "amt". + * aout-target.h (object_p): Likewise. + * aout-tic30.c (tic30_aout_object_p): Likewise. + * aoutx.h (some_aout_object_p, mkobject, make_empty_symbol), + (emit_stringtab, write_syms, link_hash_table_create), + (aout_link_write_other_symbol): Likewise. + * archive.c (_bfd_generic_mkarchive, bfd_generic_archive_p), + (bfd_ar_hdr_from_filesystem, _bfd_write_archive_contents), + (_bfd_compute_and_write_armap): Likewise. + * archures.c (bfd_arch_list): Likewise. + * bfd.c (bfd_record_phdr): Likewise. + * binary.c (binary_canonicalize_symtab): Likewise. + * cisco-core.c (cisco_core_file_validate): Likewise. + * coff-arm.c (coff_arm_link_hash_table_create, find_thumb_glue), + (find_arm_glue, record_arm_to_thumb_glue), + (record_thumb_to_arm_glue): Likewise. + * coff-ppc.c (ppc_coff_link_hash_table_create, record_toc), + (ppc_allocate_toc_section): Likewise. + * coff-rs6000.c (_bfd_xcoff_mkobject, _bfd_xcoff_archive_p): Likewise. + * coff-sh.c (sh_relax_section): Likewise. + * coff64-rs6000.c (xcoff64_archive_p): Likewise. + * coffcode.h (handle_COMDAT, coff_new_section_hook), + (coff_set_alignment_hook, coff_mkobject), + (coff_compute_section_file_positions): Likewise. + * coffgen.c (coff_make_empty_symbol, coff_bfd_make_debug_symbol), + (coff_find_nearest_line_with_names), + ( bfd_coff_set_symbol_class): Likewise. + * cofflink.c (_bfd_coff_link_hash_table_create), + (_bfd_coff_link_input_bfd): Likewise. + * dwarf1.c (alloc_dwarf1_unit, alloc_dwarf1_func): Likewise. + * dwarf2.c (read_abbrevs, read_attribute_value, add_line_info), + (build_line_info_table, sort_line_sequences), + (line_info_add_include_dir, line_info_add_file_name), + (decode_line_info, scan_unit_for_symbols, parse_comp_unit), + (place_sections, _bfd_dwarf2_slurp_debug_info): Likewise. + * ecoff.c (_bfd_ecoff_mkobject, _bfd_ecoff_make_empty_symbol), + (_bfd_ecoff_find_nearest_line), + (_bfd_ecoff_bfd_link_hash_table_create): Likewise. + * ecofflink.c (bfd_ecoff_debug_init): Likewise. + * elf-hppa.h (_bfd_elf_hppa_gen_reloc_type): Likewise. + * elf-m10300.c (mn10300_elf_relax_section), + (elf32_mn10300_link_hash_table_create): Likewise. + * elf-strtab.c (_bfd_elf_strtab_init): Likewise. + * elf.c (make_mapping, copy_elf_program_header): Likewise. + * elf32-arm.c (elf32_arm_link_hash_table_create), + (elf32_arm_setup_section_lists, elf32_arm_check_relocs), + (elf32_arm_new_section_hook): Likewise. + * elf32-avr.c (elf_avr_new_section_hook), + (elf32_avr_link_hash_table_create, get_local_syms), + (elf32_avr_setup_section_lists): Likewise. + * elf32-bfin.c (bfinfdpic_elf_link_hash_table_create), + (bfin_link_hash_table_create): Likewise. + * elf32-cr16.c (elf32_cr16_link_hash_table_create): Likewise. + * elf32-cris.c (elf_cris_link_hash_table_create): Likewise. + * elf32-csky.c (csky_elf_link_hash_table_create), + (csky_elf_check_relocs, elf32_csky_setup_section_lists): Likewise. + * elf32-frv.c (frvfdpic_elf_link_hash_table_create): Likewise. + * elf32-hppa.c (elf32_hppa_link_hash_table_create), + (elf32_hppa_setup_section_lists, get_local_syms): Likewise. + * elf32-i386.c (elf_i386_check_relocs): Likewise. + * elf32-lm32.c (lm32_elf_link_hash_table_create): Likewise. + * elf32-m32r.c (m32r_elf_link_hash_table_create), + (m32r_elf_check_relocs): Likewise. + * elf32-m68hc1x.c (m68hc11_elf_hash_table_create), + (elf32_m68hc11_setup_section_lists), + (elf32_m68hc11_size_stubs): Likewise. + * elf32-m68k.c (elf_m68k_link_hash_table_create): Likewise. + * elf32-metag.c (elf_metag_link_hash_table_create), + (elf_metag_setup_section_lists): Likewise. + * elf32-microblaze.c (microblaze_elf_link_hash_table_create), + (microblaze_elf_check_relocs): Likewise. + * elf32-nds32.c (nds32_elf_link_hash_table_create), + (nds32_elf_check_relocs): Likewise. + * elf32-nios2.c (nios2_elf32_setup_section_lists), + (get_local_syms, nios2_elf32_check_relocs), + (nios2_elf32_link_hash_table_create): Likewise. + * elf32-or1k.c (or1k_elf_link_hash_table_create), + (or1k_elf_check_relocs): Likewise. + * elf32-ppc.c (ppc_elf_modify_segment_map, update_plt_info): Likewise. + * elf32-pru.c (pru_elf32_link_hash_table_create): Likewise. + * elf32-s390.c (elf_s390_link_hash_table_create), + (elf_s390_check_relocs): Likewise. + * elf32-score.c (score_elf_create_got_section), + (s3_elf32_score_new_section_hook), + (elf32_score_link_hash_table_create): Likewise. + * elf32-score7.c (score_elf_create_got_section), + (s7_elf32_score_new_section_hook): Likewise. + * elf32-sh.c (sh_elf_link_hash_table_create), + (sh_elf_check_relocs): Likewise. + * elf32-tic6x.c (elf32_tic6x_link_hash_table_create), + (elf32_tic6x_new_section_hook, elf32_tic6x_check_relocs): Likewise. + * elf32-tilepro.c (tilepro_elf_link_hash_table_create), + (tilepro_elf_check_relocs): Likewise. + * elf32-v850.c (remember_hi16s_reloc): Likewise. + * elf32-vax.c (elf_vax_link_hash_table_create): Likewise. + * elf32-xtensa.c (elf_xtensa_link_hash_table_create), + (elf_xtensa_new_section_hook): Likewise. + * elf64-alpha.c (elf64_alpha_bfd_link_hash_table_create), + (get_got_entry, elf64_alpha_check_relocs): Likewise. + * elf64-hppa.c (elf64_hppa_hash_table_create): Likewise. + * elf64-ia64-vms.c (elf64_ia64_object_p): Likewise. + * elf64-mmix.c (mmix_elf_new_section_hook): Likewise. + * elf64-ppc.c (ppc64_elf_new_section_hook), + (ppc64_elf_link_hash_table_create, update_local_sym_info), + (update_plt_info, ppc64_elf_check_relocs): Likewise. + * elf64-s390.c (elf_s390_link_hash_table_create), + (elf_s390_check_relocs): Likewise. + * elf64-x86-64.c (elf_x86_64_check_relocs): Likewise. + * elflink.c (bfd_elf_link_record_local_dynamic_symbol), + (_bfd_elf_link_find_version_dependencies, elf_link_add_object_symbols), + (elf_link_add_archive_symbols, compute_bucket_count), + (bfd_elf_size_dynsym_hash_dynstr, _bfd_elf_link_hash_table_create), + (bfd_elf_get_bfd_needed_list, elf_link_swap_symbols_out), + (bfd_elf_final_link): Likewise. + * elfnn-aarch64.c (elfNN_aarch64_link_hash_table_create), + (elfNN_aarch64_setup_section_lists, elfNN_aarch64_check_relocs), + (elfNN_aarch64_new_section_hook): Likewise. + * elfnn-ia64.c (elfNN_ia64_object_p): Likewise. + * elfnn-riscv.c (riscv_elf_link_hash_table_create), + (riscv_elf_check_relocs): Likewise. + * elfxx-mips.c (_bfd_mips_elf_new_section_hook), + (_bfd_mips_elf_add_symbol_hook, _bfd_mips_elf_check_relocs), + (_bfd_mips_elf_modify_segment_map, _bfd_mips_elf_set_section_contents), + (_bfd_mips_elf_link_hash_table_create): Likewise. + * elfxx-sparc.c (_bfd_sparc_elf_link_hash_table_create), + (_bfd_sparc_elf_check_relocs), + (_bfd_sparc_elf_new_section_hook): Likewise. + * elfxx-tilegx.c (tilegx_elf_link_hash_table_create), + (tilegx_elf_check_relocs): Likewise. + * elfxx-x86.c (_bfd_x86_elf_link_hash_table_create): Likewise. + * format.c (bfd_check_format_matches): Likewise. + * hash.c (_bfd_stringtab_init): Likewise. + * ihex.c (ihex_scan): Likewise. + * irix-core.c (irix_core_core_file_p): Likewise. + * linker.c (bfd_wrapped_link_hash_lookup), + (_bfd_generic_link_hash_table_create), + (_bfd_generic_reloc_link_order): Likewise. + * lynx-core.c (lynx_core_file_p): Likewise. + * netbsd-core.c (netbsd_core_file_p): Likewise. + * osf-core.c (osf_core_core_file_p): Likewise. + * pdp11.c (some_aout_object_p, mkobject, make_empty_symbol), + (link_hash_table_create, aout_link_write_other_symbol): Likewise. + * peXXigen.c (_bfd_XX_bfd_copy_private_section_data): Likewise. + * peicode.h (pe_mkobject): Likewise. + * ppcboot.c (ppcboot_mkobject, ppcboot_canonicalize_symtab): Likewise. + * ptrace-core.c (ptrace_unix_core_file_p): Likewise. + * sco5-core.c (read_uarea): Likewise. + * som.c (hppa_som_gen_reloc_type, som_object_p, som_prep_headers), + (som_write_fixups, som_write_space_strings, som_write_symbol_strings), + (som_finish_writing, som_canonicalize_symtab, som_new_section_hook), + (som_bfd_copy_private_section_data, bfd_som_set_section_attributes), + (bfd_som_attach_aux_hdr, som_write_armap): Likewise. + * srec.c (srec_scan): Likewise. + * syms.c (_bfd_generic_make_empty_symbol): Likewise. + * targets.c (bfd_target_list): Likewise. + * tekhex.c (first_phase, tekhex_sizeof_headers): Likewise. + * trad-core.c (trad_unix_core_file_p): Likewise. + * vms-alpha.c (vms_initialize, alpha_vms_bfd_link_hash_table_create), + (vms_new_section_hook): Likewise. + * wasm-module.c (wasm_make_empty_symbol): Likewise. + * xcofflink.c (xcoff_get_section_contents), + (_bfd_xcoff_bfd_link_hash_table_create, xcoff_set_import_path), + (xcoff_find_function, bfd_xcoff_link_record_set, xcoff_build_ldsym), + (bfd_xcoff_size_dynamic_sections, xcoff_link_input_bfd): Likewise. + +2020-02-19 Alan Modra + + * elfxx-riscv.c (riscv_multi_letter_ext_valid_p): Don't use C99. + +2020-02-13 H.J. Lu + + * plugin.c (try_load_plugin): Make plugin_list_iter an argument + and use it if it isn't NULL. Remove has_plugin_p argument. Add + a build_list_p argument. Don't search plugin_list. Short circuit + when building the plugin list. + (has_plugin): Renamed to has_plugin_list. + (bfd_plugin_set_plugin): Don't set has_plugin. + (bfd_plugin_specified_p): Check plugin_list instead. + (build_plugin_list): New function. + (load_plugin): Call build_plugin_list and use plugin_list. + +2020-02-11 H.J. Lu + + PR binutils/25355 + * plugin.c (try_claim): Always clean up for LTO wrapper. + (try_load_plugin): Treat each object as independent. Create a + copy for plugin name. + +2020-02-11 Nick Clifton + + * elf32-msp430.c (msp430_final_link_relocate): Always use longs + for addresses in print statements. + (msp430_elf_relax_delete_bytes): Likewise. + (msp430_elf_relax_add_words): Likewise. + (msp430_elf_relax_section): Likewise. + +2020-02-11 H.J. Lu + + * plugin.c (add_symbols): Clear plugin_data memory. + +2020-02-10 H.J. Lu + + PR binutils/25355 + * configure.ac (HAVE_EXECUTABLE_SUFFIX): New AC_DEFINE. + (EXECUTABLE_SUFFIX): Likewise. + * config.in: Regenerated. + * configure: Likewise. + * plugin.c (bfd_plugin_close_and_cleanup): Removed. + (plugin_list_entry): Add all_symbols_read, cleanup_handler, + gcc, lto_wrapper, resolution_file, resolution_option, gcc_env, + real_bfd, real_nsyms, real_syms, lto_nsyms and lto_syms. + (get_lto_wrapper): New. + (setup_lto_wrapper_env): Likewise. + (current_plugin): Likewise. + (register_all_symbols_read): Likewise. + (register_cleanup): Likewise. + (get_symbols): Likewise. + (add_input_file): Likewise. + (bfd_plugin_close_and_cleanup): Likewise. + (claim_file): Removed. + (register_claim_file): Set current_plugin->claim_file. + (add_symbols): Make a copy of LTO symbols. Set lto_nsyms and + lto_syms in current_plugin. + (try_claim): Use current_plugin->claim_file. Call LTO plugin + all_symbols_read handler. Copy real symbols to plugin_data. + Call LTO plugin cleanup handler. Clean up for LTO wrapper. + (try_load_plugin): Don't reuse the previous plugin for LTO + wrapper. Set up GCC LTO wrapper if possible. Don't set + plugin_list_iter->claim_file. + (bfd_plugin_canonicalize_symtab): Use real LTO symbols if + possible. + * plugin.h (plugin_data_struct): Add real_bfd, real_nsyms and + real_syms. + +2020-02-10 Jozef Lawrynowicz + + * elf32-msp430.c (msp430_elf_relax_section): Before relaxing a branch, + check if previous instruction matches a conditional jump inserted + earlier. Invert conditional jump and delete branch in this case. + +2020-02-10 Jozef Lawrynowicz + + * elf32-msp430.c (msp430_elf_relax_add_two_words): Rename to + msp430_elf_relax_add_words. Support insertion of either one or two + words. + (msp430_elf_relax_section): Catch opcode of 0x3c00 when relocation + needs to be grown. Handle insertion of branch instruction to replace + jump. + +2020-02-10 Jozef Lawrynowicz + + * elf32-msp430.c (msp430_final_link_relocate): Add printf statements for + debugging relocations. + (msp430_elf_relax_delete_bytes): Likewise. + (msp430_elf_relax_add_two_words): Likewise. + (msp430_elf_relax_section): Likewise. + +2020-02-10 Alan Modra + + * archures.c: Wrap overlong z80 comments. + * bfd-in2.h: Regenerate. + +2020-02-07 Sergey Belyashov + + PR 25469 + * archures.c: Add GBZ80 and Z80N machine values. + * reloc.c: Add BFD_RELOC_Z80_16_BE. + * coff-z80.c: Add support for new reloc. + * coffcode.h: Add support for new machine values. + * cpu-z80.c: Add support for new machine names. + * elf32-z80.c: Add support for new reloc. + * bfd-in2.h: Regenerate. + * libbfd.h: Regenerate. -2019-04-25 Sudakshina Das +2020-02-07 Nick Clifton - * elfnn-aarch64.c (PLT_BTI_ENTRY_SIZE): Remove. - (PLT_BTI_TLSDESC_ENTRY_SIZE): Remove. - (PLT_PAC_ENTRY_SIZE, PLT_BTI_PAC_ENTRY_SIZE): Remove. - (PLT_BTI_SMALL_ENTRY_SIZE, PLT_PAC_SMALL_ENTRY_SIZE): Update. - (elfNN_aarch64_small_plt0_pac_entry): Remove. - (elfNN_aarch64_small_plt0_bti_pac_entry): Remove. - (elfNN_aarch64_small_plt0_bti_entry): Update. - (elfNN_aarch64_small_plt_bti_entry): Update. - (elfNN_aarch64_small_plt_pac_entry): Update. - (elfNN_aarch64_tlsdesc_small_plt_bti_entry): Update. - (setup_plt_values): Setup new entries. - (elfNN_aarch64_finish_dynamic_sections): Remove size change. - (elfNN_aarch64_plt_sym_val): Likewise. + PR 23932 + * elf.c (rewrite_elf_program_header): Do not complain if no + sections are mapped to a segment. -2019-04-22 Jim Wilson +2020-02-06 H.J. Lu - * elfnn-riscv.c (PRSTATUS_SIZE) [ARCH_SIZE==32]: Change from 0 to 204. + PR ld/25490 + * elflink.c (_bfd_elf_gc_mark_extra_sections): Issue an error + for garbage collection on __patchable_function_entries section + without linked-to section. -2019-04-19 Alan Modra +2020-02-06 H.J. Lu - * elf32-s12z.c (elf_backend_can_gc_sections): Don't define + PR gas/25381 + * bfd-in2.h: Regenerated. + * elflink.c (_bfd_elf_gc_mark_extra_sections): Call mark_hook + on section if gc_mark of any of its linked-to sections is set + and don't set gc_mark again. + * section.c (asection): Add linked_to_symbol_name to map_head + union. -2019-04-17 H.J. Lu +2020-02-06 Maciej W. Rozycki - * elf64-x86-64.c (elf_x86_64_need_pic): Suggest -fPIE when not - building shared object. - * elfxx-x86.c (_bfd_x86_elf_size_dynamic_sections): Likewise. + * elf32-v850.c (v850_elf_relax_section): Fix the index used for + reporting an unrecognized instruction with R_V850_LONGJUMP. -2019-04-17 H.J. Lu +2020-02-05 Alan Modra - PR ld/24458 - * elfxx-x86.h (SYMBOL_DEFINED_NON_SHARED_P): Also check x86 - linker_def. + * elf64-ppc.c (ppc_stub_plt_branch): Match comment with reality. -2019-04-15 Thomas Preud'homme +2020-02-04 Alan Modra - * reloc.c (BFD_RELOC_ARM_T32_VLDR_VSTR_OFF_IMM): New internal - relocation. - * bfd-in2.h: Regenerate. - * libbfd.h: Likewise. + * elf32-ppc.c (ppc_elf_relocate_section): After applying + R_PPC_VLE_ADDR20, goto copy_reloc. -2019-04-15 Sudakshina Das +2020-02-02 H.J. Lu - * reloc.c (BFD_RELOC_ARM_THUMB_LOOP12): New. * bfd-in2.h: Regenerated. - * libbfd.h: Regenerated. + * section.c (SEC_ASSEMBLER_SECTION_ID): Fix a typo in comments. -2019-04-15 Sudakshina Das +2020-02-02 H.J. Lu - * reloc.c (BFD_RELOC_THUMB_PCREL_BFCSEL): New relocation. + PR gas/25380 * bfd-in2.h: Regenerated. - * libbfd.h: Likewise. + * ecoff.c (bfd_debug_section): Add section_id. + * section.c (bfd_section): Add section_id. + (SEC_ASSEMBLER_SECTION_ID): New. + (BFD_FAKE_SECTION): Add section_id. + +2020-02-01 Nick Clifton + + * config.bfd: Move the c30-aout and tic30-aout targets onto the + obsolete list. + +2020-01-31 Sandra Loosemore + + * elf-eh-frame.c (_bfd_elf_write_section_eh_frame): DW_EH_PE_datarel + encodings are relative to the GOT on nios2, too. + +2020-01-31 Alan Modra + + * Makefile.am (elf32-target.h, elf64-target.h): Don't use a temp + file. Use $< and $@ in rules. + (elf32-aarch64.c, elf64-aarch64.c): Likewise. + (elf32-ia64.c, elf64-ia64.c): Likewise. + (elf32-riscv.c, elf64-riscv.c): Likewise. + (peigen.c, pepigen.c, pex64igen.c): Likewise. + (elf32-aarch64.c, elf64-aarch64.c): Don't emit $srcdir on #line. + (elf32-riscv.c, elf64-riscv.c): Likewise, and use $(SED). + (elf32-ia64.c, elf64-ia64.c): Do emit #line. + (peigen.c, pepigen.c, pex64igen.c): Likewise. + * Makefile.in: Regenerate. -2019-04-15 Sudakshina Das +2020-01-31 Alan Modra - * reloc.c (BFD_RELOC_ARM_THUMB_BF13): New. - * bfd-in2.h: Regenerated. - * libbfd.h: Regenerated. - * elf32-arm.c (elf32_arm_howto_table_1): New entry for R_ARM_THM_BF13. - (elf32_arm_reloc_map elf32_arm_reloc_map): Map BFD_RELOC_ARM_THUMB_BF13 - and R_ARM_THM_BF12 together. - (elf32_arm_final_link_relocate): New switch case for R_ARM_THM_BF13. + PR 4110 + * elf.c (setup_group): Don't clear entire section contents, + just the padding after group flags. Release alloc'd memory + after a seek or read failure. -2019-04-15 Sudakshina Das +2020-01-16 Jon Turney - * reloc.c (BFD_RELOC_ARM_THUMB_BF19): New - * libbfd.h: Regenerated. - * bfd-in2.h: Regenerated. - * bfd-elf32-arm.c (elf32_arm_howto_table_1): New entry for R_ARM_THM_BF18. - (elf32_arm_reloc_map elf32_arm_reloc_map): Map BFD_RELOC_ARM_THUMB_BF19 - and R_ARM_THM_BF18 together. - (elf32_arm_final_link_relocate): New switch case for R_ARM_THM_BF19. + * peXXigen.c (pe_is_repro): New function. + (_bfd_XX_print_private_bfd_data_common): Note timestamp is + actually a build hash if PE_IMAGE_DEBUG_TYPE_REPRO is present. -2019-04-15 Sudakshina Das +2020-01-16 Jon Turney - * reloc.c (BFD_RELOC_ARM_THUMB_BF17): New enum. - * bfd-in2.h: Regenerated. - * libbfd.h: Regenerated. - * bfd-elf32-arm.c (elf32_arm_howto_table_1): New entry for R_ARM_THM_BF16. - (elf32_arm_reloc_map elf32_arm_reloc_map): Map BFD_RELOC_ARM_THUMB_BF17 - and R_ARM_THM_BF16 together. - (get_value_helper): New reloc helper. - (elf32_arm_final_link_relocate): New switch case for R_ARM_THM_BF16. + * peXXigen.c (debug_type_names): Add names for new debug data type + values. -2019-04-15 Sudakshina Das +2020-01-16 Jon Turney - * reloc.c (BFD_RELOC_THUMB_PCREL_BRANCH5): New enum. - * bfd-in2.h: Regenerate. - * libbfd.h: Regenerate. + * peXXigen.c (pe_print_debugdata): Fix the iteration variable for + inner loop. Fix a memory leak. -2019-04-15 Thomas Preud'homme +2020-01-30 Alan Modra - * archures.c (bfd_mach_arm_8_1M_MAIN): Define. - * bfd-in2.h: Regenerate. - * cpu-arm.c (arch_info_struct): Add entry for Armv8.1-M Mainline. - * elf32-arm.c (using_thumb_only): Return true for Armv8.1-M Mainline - and update assert. - (using_thumb2): Likewise. - (using_thumb2_bl): Update assert. - (arch_has_arm_nop): Likewise. - (bfd_arm_get_mach_from_attributes): Add case for Armv8.1-M Mainline. - (tag_cpu_arch_combine): Add logic for Armv8.1-M Mainline merging. + * coffgen.c (coff_real_object_p): Don't clear obj_coff_keep_syms + or obj_coff_keep_strings here. + (coff_get_normalized_symtab): Free external syms directly. + * xcofflink.c (xcoff_link_input_bfd): Restore obj_coff_keep_syms + on error exit path. -2019-04-11 H.J. Lu +2020-01-27 Jim Wilson - * elf-linker-x86.h (elf_x86_cet_report): New. - (elf_linker_x86_params): Add cet_report. - * elfxx-x86.c (_bfd_x86_elf_link_setup_gnu_properties): Report - missing IBT and SHSTK properties if needed. + * cpu-riscv.c (riscv_scan): New. + (N): Change bfd_default_scan to riscv_scan. -2019-04-11 H.J. Lu +2020-01-27 Andreas Schwab - PR ld/24436 - * elf-m10300.c (mn10300_elf_check_relocs): Remove BFD_ASSERT of - "h != NULL". Don't check "h != NULL" before calling. - bfd_elf_gc_record_vtentry. - * elf32-arm.c (elf32_arm_check_relocs): Likewise. - * elf32-bfin.c (bfin_check_relocs): Likewise. - * elf32-cris.c (cris_elf_check_relocs): Likewise. - * elf32-csky.c (csky_elf_check_relocs): Likewise. - * elf32-d10v.c (elf32_d10v_check_relocs): Likewise. - * elf32-dlx.c (elf32_dlx_check_relocs): Likewise. - * elf32-fr30.c (fr30_elf_check_relocs): Likewise. - * elf32-frv.c (elf32_frv_check_relocs): Likewise. - * elf32-hppa.c (elf32_hppa_check_relocs): Likewise. - * elf32-i386.c (elf_i386_check_relocs): Likewise. - * elf32-iq2000.c (iq2000_elf_check_relocs): Likewise. - * elf32-m32r.c (m32r_elf_check_relocs): Likewise. - * elf32-m68hc1x.c (elf32_m68hc11_check_relocs): Likewise. - * elf32-m68k.c (elf_m68k_check_relocs): Likewise. - * elf32-mcore.c (mcore_elf_check_relocs): Likewise. - * elf32-metag.c (elf_metag_check_relocs): Likewise. - * elf32-or1k.c (or1k_elf_check_relocs): Likewise. - * elf32-ppc.c (ppc_elf_check_relocs): Likewise. - * elf32-s390.c (elf_s390_check_relocs): Likewise. - * elf32-sh.c (sh_elf_check_relocs): Likewise. - * elf32-v850.c (v850_elf_check_relocs): Likewise. - * elf32-vax.c (elf_vax_check_relocs): Likewise. - * elf32-xstormy16.c (xstormy16_elf_check_relocs): Likewise. - * elf32-xtensa.c (elf_xtensa_check_relocs): Likewise. - * elf64-mmix.c (mmix_elf_check_relocs): Likewise. - * elf64-ppc.c (ppc64_elf_check_relocs): Likewise. - * elf64-s390.c (elf_s390_check_relocs): Likewise. - * elf64-x86-64.c (elf_s390_check_relocs): Likewise. - * elfxx-mips.c (_bfd_mips_elf_check_relocs): Likewise. - * elfxx-sparc.c (_bfd_sparc_elf_check_relocs): Likewise. - * elflink.c (bfd_elf_gc_record_vtinherit): Check for corrupt - VTENTRY entry. + * Makefile.am (ALL_MACHINES): Remove cpu-plugin.lo. + (ALL_MACHINES_CFILES): Remove cpu-plugin.c. + * Makefile.in: Regenerate. + * cpu-plugin.c: Remove. + * archures.c (enum bfd_architecture): Remove bfd_arch_plugin. + (bfd_plugin_arch): Remove declaration. + * bfd-in2.h: Regenerate. + * po/SRC-POTFILES.in: Regenerate. -2019-04-11 Alan Modra +2020-01-27 H.J. Lu + Alan Modra - PR 24435 - * elflink.c (elf_link_add_object_symbols): Don't read partial - dynamic entries from fuzzed objects. + PR ld/25458 + * elflink.c (_bfd_elf_gc_mark_rsec): Mark all weak aliases. -2019-04-11 Tamar Christina +2020-01-24 Jim Wilson - PR ld/24302 - * elfnn-aarch64.c (elfNN_aarch64_size_dynamic_sections): Don't emit - DT_TLSDESC_GOT and DT_TLSDESC_PLT when DF_BIND_NOW. - (elfNN_aarch64_finish_dynamic_sections): Don't write PLT if DF_BIND_NOW. + * elfxx-riscv.c (riscv_get_prefix_class): Format s case like others. + (riscv_parse_prefixed_ext): Fix s extension comment and reword to + avoid over long line. -2019-04-10 Michael Forney +2020-01-24 Nick Clifton - PR 24427 - * doc/chew.c (free_words): Correctly free "push_text" strings. + PR 25447 + * coffgen.c (_bfd_coff_close_and_cleanup): Do not clear the keep + syms and keep strings flags as these may have been set in order to + prevent a bogus call to free. -2019-04-08 H.J. Lu +2020-01-23 Nick Clifton - * config.bfd: Remove i[3-7]86-*-kaos* and i[3-7]86-*-chaos targets. + * po/fr.po: Updated French translation. -2019-04-08 Alan Modra +2020-01-23 Alan Modra - * configure.ac (elfxx_x86): Define and use. - * configure: Regenerate. + PR 25444 + * elf.c (assign_file_positions_for_load_sections): Avoid divide + by zero when p_align is zero. -2019-04-06 H.J. Lu +2020-01-22 Maxim Blinov - * elf-linker-x86.h: New file. - * elf32-i386.c (elf_i386_convert_load_reloc): Use htab->params - to get x86-specific linker options. - * elf64-x86-64.c (elf_x86_64_convert_load_reloc): Likewise. - (elf_x86_64_check_relocs): Likewise. - (elf_x86_64_relocate_section): Likewise. - (elf_x86_64_link_setup_gnu_properties): Likewise. - * elfxx-x86.c (_bfd_x86_elf_merge_gnu_properties): Likewise. - (_bfd_x86_elf_link_setup_gnu_properties): Likewise. - (_bfd_elf_linker_x86_set_options): New function. - * elfxx-x86.h: Include "elf-linker-x86.h". - (elf_x86_link_hash_table): Add params. + * bfd/elfnn-riscv.c (riscv_skip_prefix): New. + (riscv_prefix_cmp): Likewise. + (riscv_non_std_ext_p): Deleted. + (riscv_std_sv_ext_p): Likewise. + (riscv_non_std_sv_ext_p): Likewise. + (riscv_merge_non_std_and_sv_ext): Rename to... + (riscv_merge_multi_letter_ext): and modified to use riscv_prefix_cmp. + (riscv_merge_arch_attr_info): Replace 3 calls to + riscv_merge_non_std_and_sv_ext with single call to + riscv_merge_multi_letter_ext. + * bfd/elfxx-riscv.c (riscv_parse_std_ext): Break if we + encounter a 'z' prefix. + (riscv_get_prefix_class): New function, return prefix class based + on first few characters of input string. + (riscv_parse_config): New structure to factor out minor differences + in extension class parsing behaviour. + (riscv_parse_sv_or_non_std_ext): Rename to... + (riscv_parse_prefixed_ext): and parameterise with + riscv_parse_config. + (riscv_std_z_ext_strtab, riscv_std_s_ext_strtab): New. + (riscv_multi_letter_ext_valid_p): New. + (riscv_ext_x_valid_p, riscv_ext_z_valid_p, riscv_ext_s_valid_p): New. + (riscv_parse_subset): Delegate all non-single-letter parsing work + to riscv_parse_prefixed_ext. + * bfd/elfxx-riscv.h (riscv_isa_ext_class): New type. + (riscv_get_prefix_class): Declare. + +2020-01-22 Alan Modra + + * elf64-ppc.c (struct ppc_link_hash_table): Add tga_group. + (ppc64_elf_archive_symbol_lookup): Extract __tls_get_addr_opt for + __tls_get_addr_desc. + (ppc64_elf_size_stubs): Add section for linker generated + __tls_get_addr_desc wrapper function. Loop at least once if + generating this function. + (emit_tga_desc, emit_tga_desc_eh_frame): New functions. + (ppc64_elf_build_stubs): Generate __tls_get_addr_desc. + +2020-01-22 Alan Modra + + * elf64-ppc.h (struct ppc64_elf_params): Add no_tls_get_addr_regsave. + * elf64-ppc.c (struct ppc_link_hash_table): Add tga_desc and + tga_desc_fd. + (is_tls_get_addr): Match tga_desc and tga_desc_df too. + (STDU_R1_0R1, ADDI_R1_R1): Define. + (tls_get_addr_prologue, tls_get_addr_epilogue): New functions. + (ppc64_elf_tls_setup): Set up tga_desc and tga_desc_fd. Indirect + tga_desc_fd to opt_fd, and tga_desc to opt. Set + no_tls_get_addr_regsave. + (branch_reloc_hash_match): Add hash3 and hash4. + (ppc64_elf_tls_optimize): Handle tga_desc_fd and tga_desc too. + (ppc64_elf_size_dynamic_sections): Likewise. + (ppc64_elf_relocate_section): Likewise. + (plt_stub_size, build_plt_stub): Likewise. Size regsave + __tls_get_addr stub. + (build_tls_get_addr_stub): Build regsave __tls_get_addr stub and + eh_frame. + (ppc_size_one_stub): Handle tga_desc_fd and tga_desc too. Size + eh_frame for regsave __tls_get_addr. -2019-04-03 Alan Modra +2020-01-22 Alan Modra - * coff-i386.c, * coff-x86_64.c, * coffgen.c, * dwarf2.c, - * elf-m10200.c, * elf.c, * elf32-arm.c, * elf32-bfin.c, - * elf32-csky.c, * elf32-m32r.c, * elf32-microblaze.c, * elf32-pru.c, - * elf32-rx.c, * elf32-xgate.c, * elf64-sparc.c, * elfnn-ia64.c, - * elfxx-riscv.c, * elfxx-sparc.c, * linker.c, * mach-o.c, - * pe-x86_64.c, * pei-x86_64.c, * plugin.c: Whitespace fixes. + * elf64-ppc.c (ppc64_elf_size_stubs): Correct condition under + which __tls_get_addr calls will be eliminated. -2019-04-02 Jim Wilson +2020-01-20 Nick Clifton - PR 24389 - * elfnn-riscv.c (_bfd_riscv_elf_merge_private_bfd_data): Move read of - ELF header flags to after check for ELF object file. Loop through - sections looking for code sections, if none, then skip ABI checks. + * po/pt.po: Updates Portuguese translation. + * po/ru.po: Updated Russian translation. + * po/uk.po: Updated Ukranian translation. -2019-03-30 Andrew Waterman +2020-01-20 H.J. Lu - * elfnn-riscv.c (_bfd_riscv_relax_call): Only check ARCH_SIZE for - rd == X_RA case. + PR ld/25416 + * elf64-x86-64.c (elf_x86_64_check_tls_transition): Support + "rex leal x@tlsdesc(%rip), %reg" and "call *x@tlsdesc(%eax)" in + X32 mode. + (elf_x86_64_relocate_section): In x32 mode, for GDesc -> LE + transition, relax "rex leal x@tlsdesc(%rip), %reg" to + "rex movl $x@tpoff, %reg", for GDesc -> IE transition, relax + "rex leal x@tlsdesc(%rip), %reg" to + "rex movl x@gottpoff(%rip), %eax". For both transitions, relax + "call *(%eax)" to "nopl (%rax)". + +2020-01-20 Alan Modra + + * elf64-ppc.c (LD_R11_0R3, CMPDI_R11_0, STD_R11_0R1, LD_R11_0R1), + (MTLR_R11): Don't define. + (LD_R0_0R3, CMPDI_R0_0): Define. + (build_tls_get_addr_stub): Don't use r11 in stub. -2019-03-29 Max Filippov +2020-01-20 Alan Modra - * elf32-xtensa.c (shrink_dynamic_reloc_sections): Add - info->export_dynamic to the conditional. + * elf64-ppc.c (ppc_elf_hash_entry): New function, use throughout file. + (defined_sym_val, is_tls_get_addr): Likewise. -2019-03-28 Alan Modra +2020-01-18 Nick Clifton - PR 24392 - * configure.ac: Invoke AC_CHECK_SIZEOF(int). + * version.m4 (BFD_VERSION): Set to 2.34.50. * configure: Regenerate. - * coffgen.c (coff_get_reloc_upper_bound): Replace gcc diagnostic - workaround with SIZEOF_LONG vs. SIZEOF_INT check. - * 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. - -2019-03-21 Jim Wilson - - PR 24365 - * elfnn-riscv.c (riscv_elf_relocate_section): For STT_SECTION check, - verify sym non-NULL before using. Add identical check using h. - -2019-03-21 Sudakshina Das - - * elf-bfd.h (struct elf_backend_data): Add argument to - merge_gnu_properties. - * elf-properties.c (elf_merge_gnu_properties): Add argument to - itself and while calling bed->merge_gnu_properties. - (elf_merge_gnu_property_list): Update the calls for - elf_merge_gnu_properties. - * elfnn-aarch64.c (elfNN_aarch64_merge_gnu_properties): Update handling - of --force-bti warning and add argument. - * elfxx-aarch64.c (_bfd_aarch64_elf_link_setup_gnu_properties): Add - warning. - * elfxx-x86.c (_bfd_x86_elf_merge_gnu_properties): Add argument. - * elfxx-x86.h (_bfd_x86_elf_merge_gnu_properties): Likewise in - declaration. - -2019-03-20 Sudakshina Das - - * elfxx-aarch64.c (_bfd_aarch64_elf_link_fixup_gnu_properties): Define. - * elfxx-aarch64.h (_bfd_aarch64_elf_link_fixup_gnu_properties): Declare. - (elf_backend_fixup_gnu_properties): Define for AArch64. - -2019-03-18 Alan Modra - - PR 24355 - * elf32-ppc.c (ppc_finish_symbols): Don't call write_glink_stub - for local iplt syms with ent->plt.offset == -1. Remove ineffective - attempt at writing glink stubs only once. - -2019-03-16 Alan Modra - - PR 24337 - * elf.c (_bfd_elf_rela_local_sym): Revert last change. - (_bfd_elf_rel_local_sym): Likewise. - * elflink.c (elf_link_input_bfd): Use bfd_und_section for - section of symbols with unrecognized shndx. + * po/bfd.pot: Regenerate. -2019-03-15 H.J. Lu +2020-01-18 Nick Clifton - PR ld/24267 - * coffgen.c (_bfd_coff_section_already_linked): Skip discarded - section. - * cofflink.c (coff_link_add_symbols): Check for symbols defined - in discarded section. + Binutils 2.34 branch created. -2019-03-15 Alan Modra +2020-01-17 Christian Biesinger - PR 24339 - * elflink.c (elf_link_add_object_symbols): Bail out on a local - symbol after globals if elf_bad_symtab is not set. - -2019-03-15 Alan Modra - - PR 24337 - * elf.c (_bfd_elf_rela_local_sym): Don't segfault on NULL sec. - (_bfd_elf_rel_local_sym): Likewise. - -2019-03-15 Alan Modra - - PR 24336 - * elflink.c (elf_link_read_relocs_from_section): Handle fuzzed - object files with sh_size not a multiple of sh_entsize. - -2019-03-15 H.J. Lu - - PR ld/24338 - * elf64-x86-64.c (elf_x86_64_relocate_section): Check for corrupt - input with bad relocation. - -22019-03-15 H.J. Lu - - * elf64-x86-64.c (elf_x86_64_relocate_section): Re-indent. - -2019-03-14 Nick Clifton - - PR 24334 - * dwarf2.c (struct dwarf2_debug): Add sec_vma_count field. - (save_section_vma): Initialise field to the number of entries in - the sec_vma table. - (section_vma_same): Check that the number of entries in the - sec_vma table matches the number of sections in the bfd. - -2019-03-14 Nick Clifton - - PR 24333 - * elflink.c (_bfd_elf_add_default_symbol): Add a check for a NULL - section owner pointer when adding the default symbol. - -2019-03-14 Nick Clifton - - PR 24332 - * elflink.c (elf_link_add_object_symbols): Add new local variable - extversym_end. Initialise it to point to the end of the version - symbol table, if present. Check it when initialising and updating - the ever pointer. - -2019-03-13 Sudakshina Das - - * elfnn-aarch64.c (PLT_PAC_ENTRY_SIZE, PLT_PAC_SMALL_ENTRY_SIZE): New. - (PLT_BTI_PAC_ENTRY_SIZE, PLT_BTI_PAC_SMALL_ENTRY_SIZE): New. - (setup_plt_values): Account for PAC or PAC and BTI enabled PLTs. - (elfNN_aarch64_size_dynamic_sections): Add checks for PLT_BTI_PAC - and PLT_PAC_PLT. - (elfNN_aarch64_finish_dynamic_sections): Account for PLT_BTI_PAC. - (get_plt_type): Add case for DT_AARCH64_PAC_PLT. - (elfNN_aarch64_plt_sym_val): Add cases for PLT_BTI_PAC and PLT_PAC. - -2019-03-13 Sudakshina Das - Szabolcs Nagy - - * bfd-in.h (aarch64_plt_type, aarch64_enable_bti_type): New. - (aarch64_bti_pac_info): New. - (bfd_elf64_aarch64_set_options): Add aarch64_bti_pac_info argument. - (bfd_elf32_aarch64_set_options): Likewise. - * bfd-in2.h: Regenerate - * elfnn-aarch64.c (PLT_BTI_ENTRY_SIZE): New. - (PLT_BTI_SMALL_ENTRY_SIZE, PLT_BTI_TLSDESC_ENTRY_SIZE): New. - (elfNN_aarch64_small_plt0_bti_entry): New. - (elfNN_aarch64_small_plt_bti_entry): New. - (elfNN_aarch64_tlsdesc_small_plt_bti_entry): New. - (elf_aarch64_obj_tdata): Add no_bti_warn and plt_type fields. - (elf_aarch64_link_hash_table): Add plt0_entry, plt_entry and - tlsdesc_plt_entry_size fields. - (elfNN_aarch64_link_hash_table_create): Initialise the new fields. - (setup_plt_values): New helper function. - (bfd_elfNN_aarch64_set_options): Use new bp_info to set plt sizes and - bti enable type. - (elfNN_aarch64_allocate_dynrelocs): Use new size members instead of - fixed macros. - (elfNN_aarch64_size_dynamic_sections): Likewise and add checks. - (elfNN_aarch64_create_small_pltn_entry): Use new generic pointers - to plt stubs instead of fixed ones and update filling them according - to the need for bti. - (elfNN_aarch64_init_small_plt0_entry): Likewise. - (elfNN_aarch64_finish_dynamic_sections): Likewise. - (get_plt_type, elfNN_aarch64_get_synthetic_symtab): New. - (elfNN_aarch64_plt_sym_val): Update size accordingly. - (elfNN_aarch64_link_setup_gnu_properties): Set up plts if BTI GNU NOTE - is set. - (bfd_elfNN_get_synthetic_symtab): Define. - (elfNN_aarch64_merge_gnu_properties): Give out warning with --force-bti - and mising BTI NOTE SECTION. - - -2019-03-13 Sudakshina Das - - * elf-properties.c (_bfd_elf_link_setup_gnu_properties): Exclude - linker created inputs from merge. - * elfnn-aarch64.c (struct elf_aarch64_obj_tdata): Add field for - GNU_PROPERTY_AARCH64_FEATURE_1_AND properties. - (elfNN_aarch64_link_setup_gnu_properties): New. - (elfNN_aarch64_merge_gnu_properties): New. - (elf_backend_setup_gnu_properties): Define for AArch64. - (elf_backend_merge_gnu_properties): Likewise. - * elfxx-aarch64.c (_bfd_aarch64_elf_link_setup_gnu_properties): Define. - (_bfd_aarch64_elf_parse_gnu_properties): Define. - (_bfd_aarch64_elf_merge_gnu_properties): Define. - * elfxx-aarch64.h (_bfd_aarch64_elf_link_setup_gnu_properties): Declare. - (_bfd_aarch64_elf_parse_gnu_properties): Declare. - (_bfd_aarch64_elf_merge_gnu_properties): Declare. - (elf_backend_parse_gnu_properties): Define for AArch64. - -2019-03-13 H.J. Lu - - PR ld/24322 - * elfxx-x86.c (_bfd_x86_elf_merge_gnu_properties): Properly - merge GNU_PROPERTY_X86_FEATURE_1_[IBT|SHSTK]. - -2019-03-12 Alan Modra - - * coffcode.h (buy_and_read): Delete unnecessary forward decl. Add - nmemb parameter. Use bfd_alloc2. - (coff_slurp_line_table): Use bfd_alloc2. Update buy_and_read calls. - Delete assertion. - (coff_slurp_symbol_table): Use bfd_alloc2 and bfd_zalloc2. - (coff_slurp_reloc_table): Use bfd_alloc2. Update buy_and_read calls. - * coffgen.c (coff_get_reloc_upper_bound): Ensure size calculation - doesn't overflow. - * elf.c (bfd_section_from_shdr): Use bfd_zalloc2. Style fix. - (assign_section_numbers): Style fix. - (swap_out_syms): Use bfd_malloc2. - (_bfd_elf_get_reloc_upper_bound): Ensure size calculation doesn't - overflow. - (_bfd_elf_make_empty_symbol): Style fix. - (elfobj_grok_stapsdt_note_1): Formatting. - * elfcode.h (elf_object_p): Use bfd_alloc2. - (elf_write_relocs, elf_write_shdrs_and_ehdr): Likewise. - (elf_slurp_symbol_table): Use bfd_zalloc2. - (elf_slurp_reloc_table): Use bfd_alloc2. - (_bfd_elf_bfd_from_remote_memory): Use bfd_malloc2. - * elf64-sparc (elf64_sparc_get_reloc_upper_bound): Ensure - size calculation doesn't overflow. - (elf64_sparc_get_dynamic_reloc_upper_bound): Likewise. - * mach-o.c (bfd_mach_o_get_reloc_upper_bound): Likewise. - * pdp11.c (get_reloc_upper_bound): Copy aoutx.h version. - -2019-03-08 Alan Modra - - PR 24311 - * merge.c (merge_strings): Return secinfo. Don't pad section - to alignment here. - (_bfd_merge_sections): Pad section to alignment here, if input - sections contributing to merged output all pad to alignment. - Formatting. - -2019-03-06 Nick Clifton - - * dwarf2.c (_bfd_dwarf2_find_symbol_bias): Check for a NULL symbol - table pointer. - * coffgen.c (coff_find_nearest_line_with_names): Do not call - _bfd_dwarf2_find_symbol_bias if there is no symbol table available. - -2019-03-01 Andreas Krebbel - - This reverts commit 5a12586d44fa8d5dfc74cbca4f2f36a273a16335. - 2019-01-14 Maamoun Tarsha - - PR 20113 - * elf32-s390.c (allocate_dynrelocs): Update comment. - -2019-02-28 Tamar Christina - - * elf-eh-frame.c (_bfd_elf_write_section_eh_frame): Correct CIE parse. - -2019-02-28 Nick Clifton - - PR 24273 - * elf.c (bfd_elf_string_from_elf_section): Check for a string - section that is not NUL terminated. - -2019-02-27 H.J. Lu - - PR ld/24276 - * elf64-x86-64.c (elf_x86_64_check_relocs): Skip symbol defined - by linker when checking copy reloc on protected symbol. - -2019-02-24 Alan Modra - - PR 24144 - * pdp11.c (set_section_contents): Revert 2015-02-24 change. - -2019-02-20 Eric Tsai - - * elf32-xtensa.c (is_resolvable_asm_expansion): Scan output - sections between the call site and call destination and adjust - call distance by the largest alignment. - -2019-02-20 Alan Hayward - - * elf-bfd.h (elfcore_write_aarch_pauth): Add declaration. - * elf.c (elfcore_grok_aarch_pauth): New function. - (elfcore_grok_note): Check for NT_ARM_PAC_MASK. - (elfcore_write_aarch_pauth): New function. - (elfcore_write_register_note): Check for AArch64 pauth section. - -2019-02-20 Alan Modra - - PR 24225 - * elf32-nios2.c (nios2_elf32_relocate_section): Check asprintf - return value. + * coff-arm.c: Fix spelling error (seperate). + * elfxx-riscv.c (riscv_parse_sv_or_non_std_ext): Fix spelling + error (seperate). + * sysdep.h (strnlen): Fix spelling error (seperate). -2019-02-20 Michael Roitzsch +2020-01-15 Lars Brinkhoff - * configure.ac (SHARED_LIBADD): Add -liberty -lintl for all - Darwin hosts, not just or1k. - * configure: Regenerate. + PR 20694 + * pdp11.c (TARGET_PAGE_SIZE): Set to 8192. -2019-02-20 Alan Modra +2020-01-15 Alan Modra - PR 24236 - * archive64.c (_bfd_archive_64_bit_slurp_armap): Move code adding - sentinel NUL to string buffer nearer to loop where it is used. - Don't go past sentinel when scanning strings, and don't write - NUL again. - * archive.c (do_slurp_coff_armap): Simplify string handling to - archive64.c style. + PR 25384 + * elf64-ppc.c (ELIMINATE_COPY_RELOCS): Update comment. + (ppc64_elf_adjust_dynamic_symbol): Don't allow .dynbss copies + of function symbols unless dot symbols are present. Do warn + whenever one is created, regardles of whether a PLT entry is + also emitted for the function symbol. -2019-02-19 Alan Modra +2020-01-14 Alan Modra - PR 24235 - * pei-x86_64.c (pex64_bfd_print_pdata_section): Correct checks - attempting to prevent read past end of section. + * som.c (som_bfd_count_ar_symbols): Error when file position + of symbols on chains is not strictly increasing. -2019-02-18 Alan Modra +2020-01-14 Alan Modra - PR 24225 - * elf32-nios2.c (nios2_elf32_relocate_section): Use asprintf and - PRIx64 to generate warning messages. Print local sym names too. + * vms.h (VMS_DEBUG): Define as 0. + * vms-alpha.c (image_write): Move debug output after bounds check. + Tidy bounds check. + (_bfd_vms_slurp_eihd): Warning fix. + (_bfd_vms_slurp_etir): Init variables to avoid bogus warnings. -2019-02-09 Vineet Gupta +2020-01-13 Alan Modra - * elf32-arc (INIT_SYM_STRING): Delete. - (FINI_SYM_STRING): Likewise. - (init_str): Likewise. - (fini_str): Likewise. + * vms-alpha.c (_bfd_vms_slurp_egsd): Ensure minimum size even + for "ignored" records. -2019-02-08 Alan Modra +2020-01-13 Alan Modra - * elf32-ppc.c (ppc_elf_relocate_section): Add %X to "unsupported - for bss-plt" warning to make it an error. + * wasm-module.c (wasm_scan_name_function_section): Formatting. + Delete asect name check. Move asect NULL check to wasm_object_p. + Correct bounds check of sizes against end. Replace uses of + bfd_zalloc with bfd_alloc, zeroing only necessary bytes. Use + just one bfd_release. + (wasm_scan): Don't use malloc/strdup for section names, + bfd_alloc instead. Simplify code prefixing section name. + Formatting. Don't attempt to free memory here.. + (wasm_object_p): ..do so here. -2019-02-07 Eric Botcazou +2020-01-10 Szabolcs Nagy - PR ld/18841 - * elf32-sparc.c (elf32_sparc_reloc_type_class): Return - reloc_class_ifunc for ifunc symbols. - * elf64-sparc.c (elf64_sparc_reloc_type_class): Likewise. + PR ld/22269 + * elf32-arm.c (elf32_arm_final_link_relocate): Use + UNDEFWEAK_NO_DYNAMIC_RELOC. + (allocate_dynrelocs_for_symbol): Likewise. -2019-02-07 Eric Botcazou +2020-01-10 Tamar Christina - * elf32-visium.c (visium_elf_howto_parity_reloc): Minor tweak. - : Use explicit range test to detect an overflow. + PR 25210 + * elfnn-aarch64.c (_bfd_aarch64_create_stub_section): Remove elfclass. -2019-02-07 Nick Clifton +2020-01-10 Alan Modra - * config.bfd: Move the powerpc-lynxos and powerpc-windiss targets - into the definitely obsolete list. + * coff-alpha.c (alpha_ecoff_object_p): Calculate size in bfd_size_type. -2019-02-05 H.J. Lu +2020-01-09 Nick Clifton - PR ld/24151 - * elf64-x86-64.c (elf_x86_64_need_pic): Check - SYMBOL_DEFINED_NON_SHARED_P instead of def_regular. - (elf_x86_64_relocate_section): Move PIC check for PC-relative - relocations to ... - (elf_x86_64_check_relocs): Here. - (elf_x86_64_finish_dynamic_symbol): Use SYMBOL_DEFINED_NON_SHARED_P - to check if a symbol is defined in a non-shared object. - * elfxx-x86.h (SYMBOL_DEFINED_NON_SHARED_P): New. + PR 25221 + * bfd.c (bfd_convert_section_contents): Check for a compress + header size that is larger than the actual section size. -2019-01-21 Sergio Durigan Junior +2020-01-08 Alan Modra - * elf32-arm.c (elf32_arm_final_link_relocate): Use 'llabs' instead - of 'labs' (and fix GCC warning). + PR 25351 + * elflink.c (bfd_elf_final_link): Call _bfd_fix_excluded_sec_syms + after removing sections. -2019-01-25 Nick Clifton +2020-01-06 Jim Wilson - * po/ru.po: Updated Russian translation. + PR 25205 + * elfnn-riscv.c (riscv_elf_relocate_section) : Add + check for !bfd_link_pic (info). + : Move next to R_RISCV_CALL. + : Add comment. + (_bfd_riscv_relax_section): For plt.offset check, add check for + bfd_link_pic (info). Add comment. -2019-01-23 Nick Clifton +2020-01-06 Alan Modra - * po/fr.po: Updated French translation. + * format.c (bfd_check_format_matches): Ignore bfd_error on target + match failures. Don't init to bfd_error_wrong_format before + calling _bfd_check_format. -2019-01-21 Nick Clifton +2020-01-06 Alan Modra - * po/pt.po: Updated Portuguese translation. - * po/uk.po: Updated Ukranian translation. + * vms-alpha.c (_bfd_vms_push, _bfd_vms_pop): Return pass/fail + status rather than exiting on stack overflow or underflow. + (_bfd_vms_slurp_etir): Adjust to suit. -2019-01-21 Yuri Chornoivan +2020-01-06 Alan Modra - PR 24108 - * elf32-nds32.c (nds32_relocate_section): Add space between words - in error message. - * elfnn-riscv.c (riscv_version_mismatch): Fix spelling mistake in - error message. - (riscv_i_or_e_p): Likewise. - (riscv_merge_arch_attr_info): Likewise. + * som.c (som_bfd_fill_in_ar_symbols): Bounds check som_dict index. -2019-01-19 Nick Clifton +2020-01-06 Alan Modra - * version.m4: Reset to 2.32.51 - * configure: Regenerate. - * po/bfd.pot: Regenerate. + * mach-o.c (bfd_mach_o_read_dylinker): Don't read past end of + command. Check name offset is within command. + (bfd_mach_o_read_dylib, bfd_mach_o_read_prebound_dylib), + (bfd_mach_o_read_prebind_cksum, bfd_mach_o_read_twolevel_hints), + (bfd_mach_o_read_fvmlib, bfd_mach_o_read_dysymtab), + (bfd_mach_o_read_symtab, bfd_mach_o_read_uuid), + (bfd_mach_o_read_linkedit, bfd_mach_o_read_str), + (bfd_mach_o_read_dyld_info, bfd_mach_o_read_version_min), + (bfd_mach_o_read_encryption_info, bfd_mach_o_read_source_version), + (bfd_mach_o_read_encryption_info_64, bfd_mach_o_read_main), + (bfd_mach_o_read_note, bfd_mach_o_read_build_version), + (bfd_mach_o_read_segment): Similarly. + (bfd_mach_o_read_thread): Properly bound check thread struct. + Don't repeat checks on second loop. + (bfd_mach_o_read_command): Fail on invalid command length. -2018-06-24 Nick Clifton +2020-01-04 Alan Modra - 2.32 branch created. + * format.c (bfd_check_format_matches): Add preserve_match. + Save initial bfd state in "preserve", matched bfd state in + "preserve_match". Save just the first match. Release + bfd_alloc memory. Restore and finish preserved state as + appropriate on all function exit paths. -2019-01-16 Kito Cheng +2020-01-04 Alan Modra - * elf-attrs.c (vendor_obj_attr_size): Return 0 if size is 0 even - for OBJ_ATTR_PROC. + * mmo.c (mmo_mkobject): Allocate tdata with bfd_zalloc. -2019-01-16 Kito Cheng - Nelson Chu +2020-01-04 Alan Modra - * elfnn-riscv.c (in_subsets): New. - (out_subsets): Likewise. - (merged_subsets): Likewise. - (riscv_std_ext_p): Likewise. - (riscv_non_std_ext_p): Likewise. - (riscv_std_sv_ext_p): Likewise. - (riscv_non_std_sv_ext_p): Likewise. - (riscv_version_mismatch): Likewise. - (riscv_i_or_e_p): Likewise. - (riscv_merge_std_ext): Likewise. - (riscv_merge_non_std_and_sv_ext): Likewise. - (riscv_merge_arch_attr_info): Likewise. - (riscv_merge_attributes): Likewise. - (_bfd_riscv_elf_merge_private_bfd_data): Merge attribute. - - * elfnn-riscv.c (riscv_elf_obj_attrs_arg_type): New. - (elf_backend_obj_attrs_vendor): Define. - (elf_backend_obj_attrs_section_type): Likewise. - (elf_backend_obj_attrs_section): Likewise. - (elf_backend_obj_attrs_arg_type): Define as - riscv_elf_obj_attrs_arg_type. - * elfxx-riscv.c (riscv_estimate_digit): New. - (riscv_estimate_arch_strlen1): Likewise. - (riscv_estimate_arch_strlen): Likewise. - (riscv_arch_str1): Likewise. - (riscv_arch_str): Likewise. - * elfxx-riscv.h (riscv_arch_str): Declare. - -2019-01-14 John Darrington - - * bfd-in2.h [BFD_RELOC_S12Z_OPR]: New reloc. - * libbfd.h: regen. - * elf32-s12z.c (eld_s12z_howto_table): R_S12Z_OPR takes non zero - source field. (md_apply_fix): Apply final fix - to BFD_RELOC_S12Z_OPR. - * reloc.c[BFD_RELOC_S12Z_OPR]: New reloc. + * coffgen.c (coff_real_object_p): Free malloc'd memory on target + match too. -2019-01-14 Maamoun Tarsha +2020-01-03 Nick Clifton - PR 20113 - * elf32-s390.c (allocate_dynrelocs): Update comment. + PR 25307 + (bfd_pef_parse_function_stubs): Correct the test that ensures that + there is enough data remaining in the code buffer before + attempting to read a function stub. -2019-01-09 Andrew Paprocki +2020-01-03 Nick Clifton - * warning.m4: Adjust egrep pattern for non-GNU compilers. - * configure: Regenerate. + PR 25308 + * elf-properties.c (_bfd_elf_convert_gnu_properties): Check the + return value from bfd_malloc. + * elf32-arm.c (bfd_elf32_arm_vfp11_fix_veneer_locations): Likewise. + (bfd_elf32_arm_stm32l4xx_fix_veneer_locations): Likewise. + (elf32_arm_filter_cmse_symbols): Likewise. + (elf32_arm_write_section): Likewise. + * mach-o.c (bfd_mach_o_core_fetch_environment): Likewise. + (bfd_mach_o_follow_dsym): Likewise. + * pef.c (bfd_pef_print_loader_section): Likewise. + (bfd_pef_scan_start_address): Likewise. + (bfd_pef_parse_function_stubs): Likewise. + (bfd_pef_parse_symbols): Likewise. -2019-01-08 Alan Modra +2020-01-03 Sergei Trofimovich - PR 23699 - PR 24065 - * ihex.c (ihex_write_object_contents): Properly check 32-bit - address range. + * elfnn-ia64.c (elfNN_ia64_merge_private_bfd_data): don't fail + on binary inputs ld/PR25316. + (is_ia64_elf): new helper to filter on ia64 objects. -2019-01-05 Yoshinori Sato +2020-01-03 Jan Beulich - * bfd/archures.c: Add bfd_mach_rx_v2 and bfd_mach_rx_v3. - * bfd/bfd-in2.h: Regenerate. - * bfd/cpu-rx.c (arch_info_struct): Add RXv2 and RXv3 entry. - * bfd/elf32-rx.c (elf32_rx_machine): Add RXv2 and RXv3 support. + * mach-o.c (cpusubtype, bfd_mach_o_header_p): Insert underscore + in parameter names. + (bfd_mach_o_scan): Insert underscore in two variable names. -2019-01-04 Lifang Xia +2020-01-02 Sergey Belyashov - * config.bfd (csky-*-elf* | csky-*-linux*): Modify the csky - default target, little endian target is more suitable. + * Makefile.am: Add z80-elf target support. + * configure.ac: Likewise. + * targets.c: Likewise. + * Makefile.in: Regenerate. + * configure: Regenerate. + * config.bfd: Add z80-elf target support and new arches: ez80 and + z180. + * elf32-z80.c: New file. + * archures.c: Add new z80 architectures: eZ80 and Z180. + * coffcode.h: Likewise. + * cpu-z80.c: Likewise. + * coff-z80.c: Add new relocations for Z80 target and local label + check. + * reloc.c: Add new relocs. + * bfd-in2.h: Regenerate. + * libbfd.h: Regenerate. -2019-01-04 Alan Modra +2020-01-02 Tamar Christina - PR 24061 - PR 21786 - * coff-rs6000.c (GET_VALUE_IN_FIELD): Add base parameter and - adjust all callers. - (EQ_VALUE_IN_FIELD): Likewise. - * coff64-rs6000.c (GET_VALUE_IN_FIELD): Likewise. + PR 25210 + PR 24753 + * elfnn-aarch64.c (_bfd_aarch64_create_stub_section): Set ELF class. -2019-01-01 Alan Modra +2020-01-01 Alan Modra Update year range in copyright notice of all files. -For older changes see ChangeLog-2018 +For older changes see ChangeLog-2019 -Copyright (C) 2019 Free Software Foundation, Inc. +Copyright (C) 2020 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/bfd/ChangeLog-2019 gdb-10.2/bfd/ChangeLog-2019 --- gdb-9.1/bfd/ChangeLog-2019 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/bfd/ChangeLog-2019 2020-09-13 02:33:40.000000000 +0000 @@ -0,0 +1,3185 @@ +2019-12-31 Alan Modra + + * vms-alpha.c (_bfd_vms_slurp_eisd): Don't overflow when checking + offset. Don't overflow when checking rec_size, and do allow + rec_size to the end of the buffer. Ensure eisd->type can be + accessed, not just the first 32 bytes. Don't call + _bfd_vms_save_counted_string with zero length remaining. Fail + on empty string section name. + (_bfd_vms_slurp_egsd): Formatting. Catch more reads past end + of record size. Correct remaining length calculation. Fail + on empty string section name. Consolidate error paths. + +2019-12-30 Alan Modra + + * vms-alpha.c (alpha_vms_free_private): New function, extracted.. + (vms_close_and_cleanup): ..from here. + (alpha_vms_object_p): Call alpha_vms_free_private on failure. + +2019-12-30 Alan Modra + + * coffgen.c (coff_real_object_p): Free malloc'd memory on failure. + +2019-12-30 Alan Modra + + * archive.c (do_slurp_bsd_armap): Use bfd_alloc rather than + bfd_zalloc when memory is all written after the call. + (do_slurp_coff_armap): Likewise. Set bfd_error on ridiculously + large allocations that overflow bfd_size_type. Use just one + bfd_release on error exit. + (_bfd_slurp_extended_name_table): Use bfd_alloc for extended_names, + clear last byte rather than the entire array. Use bfd_alloc for + string table. Rearrange and simplify code copying file names. + +2019-12-29 Alan Modra + + * vms-alpha.c (_bfd_vms_slurp_egsd): Make base_addr a bfd_vma. + Limit alignment power. Correct and simplify alignment expression. + (evax_bfd_print_relocation_records): Avoid signed shift left. + +2019-12-29 Alan Modra + + * vms-misc.c (_bfd_vms_save_sized_string): Add abfd param, make + size a size_t. Use bfd_alloc rather than bfd_malloc. + (_bfd_vms_save_counted_string): Similarly. + * vms.h (_bfd_vms_save_sized_string): Update prototype. + (_bfd_vms_save_counted_string): Likewise. + * vms-alpha.c (_bfd_vms_slurp_ehdr): Adjust + _bfd_vms_save_counted_string and bfd_vms_save_sized_string calls. + (_bfd_vms_slurp_egsd, parse_module): Likewise. + (_bfd_vms_slurp_eisd): Likewise. Check return status. + (alpha_vms_bfd_link_hash_table_free): New function. + (alpha_vms_bfd_link_hash_table_create): Arrange to call it. + (vms_close_and_cleanup): Free more memory. Don't release tdata. + +2019-12-29 Alan Modra + + * coffcode.h (coff_close_and_cleanup): Redefine to.. + * coffgen.c (_bfd_coff_close_and_cleanup): ..this. New function. + * libcoff-in.h (_bfd_coff_close_and_cleanup): Declare. + * libcoff.h: Regenerate. + +2019-12-29 Hannes Domani + Alan Modra + + PR 15350 + * bfd.c (bfd_update_compression_header): Write zlib header for + formats other than ELF too. + +2019-12-26 Alan Modra + + * som.c (setup_sections): Don't overflow space_strings_size. Use + bfd_malloc2 to catch overflow of size calculation. + (som_prep_for_fixups): Use bfd_zalloc2 to catch overflow of size + calculation. + (som_build_and_write_symbol_table): Similarly use bfd_zmalloc2. + (som_slurp_symbol_table): Similarly use bfd_zmalloc2, bfd_malloc2, + and bfd_zalloc2. + (bfd_som_attach_aux_hdr): Use size_t vars for string length. + (som_bfd_count_ar_symbols): Use bfd_malloc2 to catch overflow of + size calculation. Use size_t vars for length and catch overflow. + (som_slurp_armap): Use bfd_alloc2 to catch overflow of size + calculation. + (som_bfd_ar_write_symbol_stuff): Similarly use bfd_zmalloc2 and + bfd_malloc2. Perform size calculations in bfd_size_type. + +2019-12-26 Hannes Domani + + * peicode.h (pe_bfd_read_buildid): Free data. + +2019-12-23 Alan Modra + + * vms-alpha.c (add_symbol): Add "max" parameter. Error on string + length larger than max. + (_bfd_vms_slurp_egsd): Ensure record is at least large enough to + read string length byte, error if not. Pass size to add_symbol. + (_bfd_vms_slurp_etir): Don't read past end of buffer when reading + type and length. Allow read of last byte in buffer. + +2019-12-23 Alan Modra + + * wasm-module.c (wasm_read_leb128): Don't allow oversize shifts. + Catch value overflow. Sign extend only on terminating byte. + +2019-12-20 Alan Modra + + * xtensa-isa.c (xtensa_insnbuf_from_chars): Avoid signed overflow. + +2019-12-20 Alan Modra + + * libhppa.h (hppa_field_adjust, bfd_hppa_insn2fmt): Delete forward + declaration. Move ATTRIBUTE_UNUSED to definition. + (sign_extend, low_sign_extend, sign_unext, low_sign_unext), + (re_assemble_3, re_assemble_12, re_assemble_14, re_assemble_16), + (re_assemble_17, re_assemble_21, re_assemble_22): Likewise. Make + args and return value unsigned. Use unsigned variables. + (hppa_rebuild_insn): Similarly. + +2019-12-20 Alan Modra + + * format.c (bfd_check_format_matches): Free matching_vector when + not returning matching target strings. + +2019-12-20 Alan Modra + + * coff-alpha.c (alpha_ecoff_read_ar_hdr): Free ar_hdr on error return. + +2019-12-18 Alan Modra + + * coff-rs6000.c (_bfd_xcoff_slurp_armap): Don't overflow when + checking symbol count against section size. Guard against strlen + running off end of buffer by allocating one more byte and zeroing. + * coff64-rs6000.c (xcoff64_slurp_armap): Likewise. + +2019-12-18 Alan Modra + + * elf32-ppc.c (ppc_elf_get_synthetic_symtab): Use size_t for vars. + * elf64-ppc.c (sym_exists_at): Use size_t for lo, hi and mid. + +2019-12-18 Alan Modra + + * elf-bfd.h (ELF_LOCAL_SYMBOL_HASH): Avoid signed overflow. + * elf32-hppa.c (final_link_relocate): Likewise. + * elf32-ppc.c (_bfd_elf_ppc_at_tls_transform): Likewise. + (_bfd_elf_ppc_at_tprel_transform, is_insn_ds_form): Likewise. + (is_insn_dq_form, ppc_elf_relocate_section): Likewise. + * elf64-ppc.c (ok_lo_toc_insn, ppc64_elf_edit_toc): Likewise. + (ppc64_elf_relocate_section): Likewise. + * elfxx-mips.c (mips_elf_perform_relocation): Likewise. + * netbsd.h (N_SET_FLAGS): Likewise. + +2019-12-17 Alan Modra + + * coff-tic80.c: Delete file. + * cpu-tic80.c: Delete file. + * archures.c: Remove tic80 support. + * coffcode.h: Likewise. + * coffswap.h: Likewise. + * targets.c: Likewise. + * config.bfd: Likewise. + * configure.ac: Likewise. + * Makefile.am: Likewise. + * Makefile.in: Regenerate. + * bfd-in2.h: Regenerate. + * configure: Regenerate. + * po/SRC-POTFILES.in: Regenerate. + +2019-12-13 Alan Modra + + PR 25237 + * elf.c: (assign_file_positions_for_load_sections): Attempt to + keep meaningless p_offset for PT_LOAD segments without file + contents within file size. + +2019-12-12 Alan Modra + + * libbfd.c (bfd_get): Don't cast result of bfd_get_8. + * bfd-in2.h: Regenerate. + +2019-12-11 Alan Modra + + * elf32-rx.c (elf32_rx_relax_section): Avoid signed overflow. + * libaout.h (N_SET_INFO, N_SET_FLAGS): Likewise. + * netbsd.h (write_object_contents): Likewise. + * elf32-arm.c (bfd_elf32_arm_vfp11_erratum_scan): Likewise. + * libhppa.h (HPPA_R_CONSTANT): Don't signed extend with shifts. + (stm32l4xx_create_replacing_stub_vldm): Don't truncate high bits + with shifts. + * elf32-nds32.h (R_NDS32_RELAX_ENTRY_DISABLE_RELAX_FLAG): Define + using 1u shifted left. Ditto for other macros. + * mmo.c (LOP): Make unsigned. + +2019-12-11 Alan Modra + + * libbfd.c (bfd_get_8): Return a bfd_vma. + (bfd_get_signed_8): Return a bfd_signed_vma. + * bfd-in2.h: Regenerate. + +2019-12-11 Alan Modra + + * xtensa-modules.c (Field_* functions): Don't mask using shifts. + (Operand_soffsetx4_decode, Operand_simm4_decode), + (Operand_simm8_decode, Operand_simm8x256_decode), + (Operand_simm12b_decode, Operand_label8_decode), + (Operand_label12_decode, Operand_soffset_decode), + (Operand_xt_wbr15_label_decode, Operand_xt_wbr18_label_decode): Don't + sign extend using shifts. + (Operand_immrx4_decode, Operand_uimm16x4_decode): Avoid UB in + constant. + +2019-12-11 Alan Modra + + * cpu-ia64-opc.c (ext_imms_scaled): Avoid undefined left shift + of negative values by using unsigned vars. + +2019-12-07 Alan Modra + + PR 25236 + * elflink.c (_bfd_elf_link_assign_sym_version): Assign versions + for ELF_COMMON_DEF_P symbols. + (elf_link_output_extsym, _bfd_elf_add_default_symbol): Adjust to + suit. + +2019-12-05 Sandra Loosemore + + Only give FDE encoding warnings if --eh-frame-hdr was specified. + + * elf-eh-frame.c (_bfd_elf_discard_section_eh_frame): Make + FDE encoding warning conditional. + +2019-12-05 Nick Clifton + + PR 25029 + * peXXigen.c (_bfd_XXi_swap_aouthdr_out): Ignore empty sections + when computing the sizes stored in the headers. + +2019-12-03 Alan Modra + + PR 25230 + * dwarf2.c (struct dwarf2_debug_file): Add line_table and + abbrev_offsets. + (struct abbrev_offset_entry): New. + (hash_abbrev, eq_abbrev, del_abbrev): New functions. + (read_abbrevs): Check whether we have already read abbrevs at + given offset, and add new offset/abbrev to hash table. + (decode_line_info): Keep line table at offset zero in file struct. + Return this for a cu reusing the same dir/file list. + (find_abstract_instance): Find cu for DW_FORM_GNU_ref_alt. + (_bfd_dwarf2_slurp_debug_info): Create offset/abbrev hash tables. + (_bfd_dwarf2_cleanup_debug_info): Adjust deletion of lines and + abbrevs. + +2019-12-03 Alan Modra + + PR 25230 + * dwarf2.c (struct dwarf2_debug_file): New struct. + (struct dwarf2_debug): Delete fields now in dwarf2_debug_file. + Add f, alt fields. + (struct comp_unit): Add file field. + (read_indirect_string, read_indirect_line_string): Adjust to suit. + (read_alt_indirect_string, read_alt_indirect_ref): Likewise. + (read_debug_ranges, find_abstract_instance, read_rangelist): Likewise. + (_bfd_dwarf2_stash_syms, place_sections): Likewise. + (stash_maybe_update_info_hash_tablse): Likewise. + (stash_verify_info_hash_table): Likewise. + (_bfd_dwarf2_slurp_debug_info): Likewise. + (_bfd_dwarf2_find_symbol_bias): Likewise. + (_bfd_dwarf2_find_nearest_line): Likewise. + (_bfd_dwarf2_cleanup_debug_info): Likewise. + (read_abbrevs): Add file param and adjust. Update calls. + (stash_comp_unit): Likewise. + (decode_line_info): Delete stash param and adjust. Update calls. + (comp_unit_find_nearest_line): Likewise. + (comp_unit_maybe_decode_line_info): Likewise. + (comp_unit_find_line): Likewise. + (parse_comp_unit): Add file and info_ptr param and adjust. Update + calls. + +2019-12-03 Alan Modra + + * dwarf2.c (read_indirect_string): Don't duplicate offset check + done in read_section. + (read_indirect_line_string): Likewise. + (read_alt_indirect_string): Likewise. + (read_alt_indirect_ref): Likewise. + (read_abbrevs): Likewise. Free memory on all failure paths. + Use correct unsigned type for pointer difference comparison. + +2019-12-03 Alan Modra + + * dwarf2.c (struct dwarf2_debug): Update comments. Remove sec + and sec_info_ptr. + (_bfd_dwarf2_slurp_debug_info): Don't set sec or sec_info_ptr. + (stash_comp_unit): Likewise. + (read_alt_indirect_ref): Return NULL not FALSE. + +2019-12-03 Alan Modra + + * dwarf2.c (_bfd_dwarf2_find_nearest_line): Correct function comment. + +2019-11-27 Alan Modra + + PR 23652 + * dwarf2.c (_bfd_dwarf2_stash_syms): Break out of loop on finding + matching section. + (_bfd_dwarf2_find_nearest_line): Return an int, with value 2 when + returning info from the symbol table. Do the _bfd_elf_find_function + search also when !found. Call _bfd_dwarf2_stash_syms regardless of + symbols. + * elf64-alpha.c (elf64_alpha_find_nearest_line): Accept dwarf2 + result of 1 only. + * elfxx-mips.c (_bfd_mips_elf_find_nearest_line): Likewise. + * libbfd-in.h (_bfd_dwarf2_find_nearest_line): Update prototype. + * libbfd.h: Regenerate. + +2019-11-27 Alan Modra + + PR 23652 + * dwarf2.c (_bfd_dwarf2_stash_syms): New function. + (_bfd_dwarf2_find_nearest_line): Use it here, passing syms to + _bfd_elf_find_function. Call _bfd_elf_find_function in cases + where _bfd_elf_find_nearest_line would do so. + * elf.c (_bfd_elf_find_nearest_line): Omit _bfd_elf_find_function + for dwarf2. + * elfxx-mips.c (_bfd_mips_elf_find_nearest_line): Similarly. Tidy. + * elf32-arm.c (elf32_arm_maybe_function_sym): New function. + (elf_backend_maybe_function_sym): Define. + (arm_elf_find_function, elf32_arm_find_nearest_line): Delete. + (bfd_elf32_find_nearest_line): Don't define. + * elfnn-aarch64.c (elfNN_aarch64_maybe_function_sym): New function. + (elf_backend_maybe_function_sym): Define. + (aarch64_elf_find_function, elfNN_aarch64_find_nearest_line): Delete. + (bfd_elfNN_find_nearest_line): Don't define. + +2019-11-27 Alan Modra + + * elf32-sh.c (sh_reloc): Use a bfd_vma insn. + (sh_reloc ): Divide calculated relocation value + by two before applying to insn. Correct overflow test. + * coff-sh.c (sh_reloc): Likewise. + +2019-11-26 Nick Clifton + + * elf32-sh.c (sh_elf_reloc): Use a signed_vma when checking for a + negative relocated value. + * coff-sh.c (sh_reloc): Likewise. + +2019-11-25 Alan Modra + + * archures.c (bfd_octets_per_byte): Tail call + bfd_arch_mach_octets_per_byte. + * coff-arm.c (OCTETS_PER_BYTE): Define. + (coff_arm_reloc): Introduce new "octets" temp. Use OCTETS_PER_BYTE + with section. Correct "addr". Remove ATTRIBUTE_UNUSED. + * coff-i386.c (coff_i386_reloc): Similarly. + * coff-mips.c (mips_reflo_reloc): Similarly. + * coff-x86_64.c (coff_amd64_reloc): Similarly. + * elf32-msp430.c (OCTETS_PER_BYTE): Define. + (rl78_sym_diff_handler): Use OCTETS_PER_BYTE, with section. + * elf32-nds32.c (nds32_elf_get_relocated_section_contents): Similarly. + * elf32-ppc.c (ppc_elf_addr16_ha_reloc): Similarly. + * elf32-pru.c (pru_elf32_do_ldi32_relocate): Similarly. + * elf32-s12z.c (opru18_reloc): Similarly. + * elf32-sh.c (sh_elf_reloc): Similarly. + * elf32-spu.c (spu_elf_rel9): Similarly. + * elf32-xtensa.c (bfd_elf_xtensa_reloc): Similarly. + * elf64-ppc.c (ppc64_elf_ha_reloc, ppc64_elf_brtaken_reloc), + (ppc64_elf_toc64_reloc): Similarly. + * bfd.c (bfd_get_section_limit): Pass section to bfd_octets_per_byte. + * cofflink.c (_bfd_coff_link_input_bfd), + (_bfd_coff_reloc_link_order): Likewise. + * elf.c (_bfd_elf_section_offset): Likewise. + * elflink.c (resolve_section, bfd_elf_perform_complex_relocation), + (elf_link_input_bfd, elf_reloc_link_order, elf_fixup_link_order), + (bfd_elf_final_link): Likewise. + * elf.c (_bfd_elf_make_section_from_shdr): Don't strncmp twice + to set SEC_ELF_OCTETS. + * reloc.c (bfd_perform_relocation): Tidy SEC_ELF_OCTETS special case. + (bfd_install_relocation): Likewise. + (_bfd_final_link_relocate): Don't recalculate octets. + * syms.c (_bfd_stab_section_find_nearest_line): Introduc new + "octets" temp. + * bfd-in2.h: Regenerate. + +2019-11-25 Christian Eggers + + * section.c (struct bfd_section): New flag SEC_ELF_OCTETS. + * archures.c (bfd_octets_per_byte): New parameter sec. + If section is not NULL and SEC_ELF_OCTETS is set, one octet es + returned [ELF targets only]. + * bfd.c (bfd_get_section_limit): Provide section parameter to + bfd_octets_per_byte. + * bfd-in2.h: regenerate. + * binary.c (binary_set_section_contents): Move call to + bfd_octets_per_byte into section loop. Provide section parameter + to bfd_octets_per_byte. + * coff-arm.c (coff_arm_reloc): Provide section parameter + to bfd_octets_per_byte. + * coff-i386.c (coff_i386_reloc): likewise. + * coff-mips.c (mips_reflo_reloc): likewise. + * coff-x86_64.c (coff_amd64_reloc): likewise. + * cofflink.c (_bfd_coff_link_input_bfd): likewise. + (_bfd_coff_reloc_link_order): likewise. + * elf.c (_bfd_elf_section_offset): likewise. + (_bfd_elf_make_section_from_shdr): likewise. + Set SEC_ELF_OCTETS for sections with names .gnu.build.attributes, + .debug*, .zdebug* and .note.gnu*. + * elf32-msp430.c (rl78_sym_diff_handler): Provide section parameter + to bfd_octets_per_byte. + * elf32-nds.c (nds32_elf_get_relocated_section_contents): likewise. + * elf32-ppc.c (ppc_elf_addr16_ha_reloc): likewise. + * elf32-pru.c (pru_elf32_do_ldi32_relocate): likewise. + * elf32-s12z.c (opru18_reloc): likewise. + * elf32-sh.c (sh_elf_reloc): likewise. + * elf32-spu.c (spu_elf_rel9): likewise. + * elf32-xtensa.c (bfd_elf_xtensa_reloc): likewise + * elf64-ppc.c (ppc64_elf_brtaken_reloc): likewise. + (ppc64_elf_addr16_ha_reloc): likewise. + (ppc64_elf_toc64_reloc): likewise. + * elflink.c (bfd_elf_final_link): likewise. + (bfd_elf_perform_complex_relocation): likewise. + (elf_fixup_link_order): likewise. + (elf_link_input_bfd): likewise. + (elf_link_sort_relocs): likewise. + (elf_reloc_link_order): likewise. + (resolve_section): likewise. + * linker.c (_bfd_generic_reloc_link_order): likewise. + (bfd_generic_define_common_symbol): likewise. + (default_data_link_order): likewise. + (default_indirect_link_order): likewise. + * srec.c (srec_set_section_contents): likewise. + (srec_write_section): likewise. + * syms.c (_bfd_stab_section_find_nearest_line): likewise. + * reloc.c (_bfd_final_link_relocate): likewise. + (bfd_generic_get_relocated_section_contents): likewise. + (bfd_install_relocation): likewise. + For section which have SEC_ELF_OCTETS set, multiply output_base + and output_offset with bfd_octets_per_byte. + (bfd_perform_relocation): likewise. + +2019-11-21 Alan Modra + + * elf32-arm.c (elf32_arm_size_stubs): Exclude dynamic library + BFDs that have not been loaded. + +2019-11-19 Alan Modra + + PR 25197 + * coffgen.c (coff_find_nearest_line_with_names): Check that C_FILE + u.syment.n_value does point at another C_FILE sym and not into + some auxent that happens to look like a C_FILE. Properly check + for integer overflow and avoid possible pointer wrap-around. + Simplify pr17512 checks. + +2019-11-19 Alan Modra + + PR 25200 + * reloc.c (bfd_default_reloc_type_lookup): Don't BFD_FAIL. + * elf.c (_bfd_elf_validate_reloc): Don't segfault on NULL howto. + +2019-11-18 Alan Modra + + * elf-bfd.h (struct elf_backend_data ): + Rename from elf_backend_post_process_headers. + (_bfd_elf_post_process_headers): Delete. + (_bfd_elf_init_file_header): Declare. + * elf.c (_bfd_elf_compute_section_file_positions): Call new function + in place of prep_headers and elf_backend_post_process_headers. + (_bfd_elf_init_file_header): Renamed from prep_headers with + updated args and made global. Delete dead code. + (_bfd_elf_post_process_headers): Delete. + * elf32-arm.c (elf32_arm_init_file_header): Rename from + elf32_arm_post_process_headers and call _bfd_elf_init_file_header. + Return status. + (elf_backend_init_file_header): Define. + (elf_backend_post_process_headers): Don't define. + * elf32-i386.c (elf_i386_fbsd_init_file_header): Similarly. + * elf32-m68hc1x.c (elf32_m68hc11_init_file_header): Similarly. + * elf32-metag.c (elf_metag_init_file_header): Similarly. + * elf32-spu.c (spu_elf_init_file_header + * elf32-visium.c (visium_elf_init_file_header + * elf64-alpha.c (elf64_alpha_fbsd_init_file_header + * elf64-hppa.c (elf64_hppa_init_file_header + * elf64-ia64-vms.c (elf64_vms_init_file_header + * elfnn-aarch64.c (elfNN_aarch64_init_file_header + * elfnn-ia64.c (elfNN_hpux_init_file_header + * elfxx-mips.c (_bfd_mips_init_file_header + * elfxx-mips.h (_bfd_mips_post_process_headers): Delete. + (_bfd_mips_init_file_header): Declare. + (elf_backend_post_process_headers): Delete. + (elf_backend_init_file_header): Define. + * elfxx-target.h (elf_backend_post_process_headers): Delete. + (elf_backend_init_file_header): Define and use. + * elf32-m68hc12.c (elf_backend_init_file_header): Define. + (elf_backend_post_process_headers): Don't define. + * elf32-m68hc1x.h (elf32_m68hc11_post_process_headers): Delete. + (elf32_m68hc11_init_file_header): Declare. + * elf32-ppc.c (elf_backend_post_process_headers): Remove + unnecessary undef. + +2019-11-18 Alan Modra + + * elf-bfd.h (struct elf_backend_data ): + Rename from elf_backend_modify_program_headers. + (_bfd_elf_modify_headers): Declare. + * elf.c (assign_file_positions_except_relocs): Set + elf_program_header_size. Always call elf_backend_modify_headers. + Extract code modifying file header.. + (_bfd_elf_modify_headers): ..to here. New function. + * elf32-arm.c (elf_backend_modify_headers): Renamed from + elf_backend_modify_program_headers. + * elf32-i386.c: Similarly. + * elf64-x86-64.c: Similarly. + * elfxx-target.h: Similarly. Default elf_backend_modify_headers + to _bfd_elf_modify_headers. + * elf-nacl.h (nacl_modify_headers): Rename from + nacl_modify_program_headers. + * elf-nacl.c (nacl_modify_headers): Rename from + nacl_modify_program_headers and call _bfd_elf_modify_headers. + * elf32-rx.c (elf32_rx_modify_headers): Similarly. + * elf32-spu.c (spu_elf_modify_headers): Similarly. + * elfnn-ia64.c (elfNN_ia64_modify_headers): Similarly. + * elf32-sh.c (elf_backend_modify_program_headers): Don't undef. + +2019-11-18 Alan Modra + + PR 25196 + * bfd.c (bfd_error_type): Add bfd_error_sorry. + (bfd_errmsgs): Likewise. + * elf.c (rewrite_elf_program_header): Don't abort on confused + lma/alignment. Replace bfd_error_bad_value with bfd_error_sorry. + (_bfd_elf_validate_reloc): Use bfd_error_sorry. + (_bfd_elf_final_write_processing): Likewise. + * bfd-in2.h: Regenerate. + +2019-11-12 Jim Wilson + + PR 25181 + * elfnn-riscv.c (_bfd_riscv_relax_call): Always add max_alignment to + foff. If sym_sec->output_section and sec->output_section are the same + and not *ABS* then set max_alignment to that section's alignment. + +2019-11-07 Alan Modra + + * cpu-cr16c.c: Delete. + * elf32-cr16c.c: Delete. + * Makefile.am, + * archures.c, + * config.bfd, + * configure.ac, + * reloc.c, + * targets.c: Remove cr16c support. + * Makefile.in, + * bfd-in2.h, + * configure, + * libbfd.h, + * po/SRC-POTFILES.in: Regenerate. + +2019-11-05 Tim Rühsen + + * doc/chew.c (add_to_definition): Use correct type when + calculating size of array reallocation. + (nextword): Always initialise the word return parameter. + (compile): Check return value of nextword(). + +2019-10-30 Keith Seitz + + * elf-bfd.h (elf_backend_data) : + New field. + (_bfd_elf32_core_find_build_id, _bfd_elf64_core_find_build_id): + New functions. + (elf_read_notes): Add declaration. + * elf.c (elf_read_notes): Move elf-bfd.h. + (_bfd_elf_core_find_build_id): New function. + (bfd_section_from_phdr): Scan core file PT_LOAD segments for + build-id if none is known. + (elf_parse_notes): For core files, scan for notes. + * elfcore.h (elf_core_file_matches_executable_p): If both + BFDs have identical build-ids, then they match. + (_bfd_elf_core_find_build_id): New function. + * elfxx-target.h (elf_backend_core_find_build_id): Define. + (elfNN_bed): Add elf_backend_core_find_build_id. + +2019-10-29 Andrew Eikum + + * libcoff-in.h (struct pe_tdata): Add dos_message field. + * libcoff.h: Regenerate. + * peXXigen.c (_bfd_XXi_only_swap_filehdr_out): Copy the + dos_message field rather than initialising it. + (_bfd_XX_bfd_copy_private_bfd_data_common): Copy the dos_message + field. + * peicode.h (pe_mkobject): Initialise the dos_message field. + (pe_mkobject_hook): Copy the dos_message field. + (pe_bfd_object_p): Copy the dos_message field. + +2019-10-25 Alan Modra + + PR 4499 + * elf-nacl.c (nacl_modify_segment_map): Set no_sort_lma for all + PT_LOAD segments. + * elf32-spu.c (spu_elf_modify_segment_map): Likewise on overlay + PT_LOAD segments. + * elf.c (elf_sort_segments): New function. + (assign_file_positions_except_relocs): Use shortcuts to elfheader + and elf_tdata. Seek to e_phoff not sizeof_ehdr to write program + headers. Move PT_PHDR check.. + (assign_file_positions_for_non_load_sections): ..and code setting + PT_PHDR p_vaddr and p_paddr, and code setting __ehdr_start value.. + (assign_file_positions_for_load_sections): ..to here. Sort + PT_LOAD headers. Delete header_pad code. Use actual number of + headers rather than allocated in calculating size for program + headers. Don't assume program headers follow ELF file header. + Simplify pt_load_count code. Only set "off" for PT_LOAD or + PT_NOTE in cores. + (rewrite_elf_program_header): Set p_vaddr_offset for segments + that include file and program headers. + (copy_elf_program_header): Likewise, replacing header_size code. + +2019-10-21 Alan Modra + + PR 452 + * archive.c (normalize): Return file unchanged when + BFD_ARCHIVE_FULL_PATH. + (_bfd_construct_extended_name_table): Pass abfd, the output + bfd, to normalize. + (_bfd_archive_bsd44_construct_extended_name_table): Likewise. + * bfd.c (struct bfd): Make flags a full flagword. + (BFD_ARCHIVE_FULL_PATH): Define. + * bfd-in2.h: Regenerate. + +2019-10-20 John David Anglin + + * elf32-hppa.c (elf32_hppa_size_dynamic_sections): Provide 8-byte + minimum alignment for .plt section. + +2019-10-19 John David Anglin + + * elf32-hppa.c: Revise import stub sequences. + (LONG_BRANCH_STUB_SIZE): Define. + (LONG_BRANCH_SHARED_STUB_SIZE): Define. + (IMPORT_STUB_SIZE): Define. + (IMPORT_SHARED_STUB_SIZE): Define. + (EXPORT_STUB_SIZE): Define. + (plt_stub): Revise to not use register %r22. + (LDO_R1_R22): Define. + (LDW_R22_R21): Define. + (LDW_R22_R19): Define. + (hppa_build_one_stub): Update stub generation and use new defines. + (hppa_size_one_stub): Likewise. + +2019-10-17 Nelson Chu + + * elfnn-riscv.c (riscv_elf_relocate_section): Report the error message + that user should recompile their code with `fPIC` when linking non-pic + code into shared library. + + * elfnn-riscv.c (riscv_elf_relocate_section): Use asprintf to extend + the error message if needed, and then store the result into the + `msg_buf`. Finally, remember to free the unused `msg_buf`. All error + message for the dangerous relocation should be set before we call the + callback function. If we miss the error message since linker runs out + of memory, we should set the default error message for the error. + +2019-10-16 Alan Modra + + PR 13616 + * cpu-powerpc.c (bfd_arch_ppc_nop_fill): New function, use it + for all ppc arch info. + * linker.c (default_data_link_order): Pass info->big_endian to + arch_info->fill function. + +2019-10-15 Alan Modra + + * elf32-m68hc1x.c (reloc_warning): Add printf attribute. + (elf32_m68hc11_relocate_section): Don't use a variable for format + strings. Delete some unnecessary xgettext:c-format comments. + +2019-10-15 Alan Modra + + PR 24955 + * elf32-arm.c (set_cmse_veneer_addr_from_implib): Use bfd_malloc + rather than xmalloc. + * elf32-m68hc1x.c (reloc_warning): New function. + (elf32_m68hc11_relocate_section): Use it here. Cast bfd_vma values + corresponding to %lx in format strings. + * elf32-nds32.c (nds32_insertion_sort): Use a stack temporary. + +2019-10-15 Alan Modra + + PR 25100 + * elf64-ppc.c (sfpr_define): Delete dead code that triggered a warning. + +2019-10-15 Alan Modra + + * bfd.c (bfd_check_compression_header): Check for powers of two + with x == (x & -x). + +2019-10-14 Alan Modra + + * syms.c (struct indexentry): Add idx field. + (cmpindexentry): Final sort on idx. + (_bfd_stab_section_find_nearest_line): Set idx. + +2019-10-14 Alan Modra + + * dwarf2.c (struct lookup_funcinfo): Add idx field. + (compare_lookup_funcinfos): Perform final sort on idx. + (build_lookup_funcinfo_table): Set idx. + (compare_sequences): Perform final sort on num_lines. + (build_line_info_table): Set num_lines and line_info_lookup earlier. + (sort_line_sequences): Set num_lines for sort. + +2019-10-14 Alan Modra + + * elflink.c (elf_sort_symbol): Sort on type and name as well. + (elf_link_add_object_symbols): Style fix. + +2019-10-14 Alan Modra + + * elf.c (_bfd_elf_map_sections_to_segments): Init target_index + for sections about to be sorted. + (assign_file_positions_for_load_sections): Likewise. + (elf_sort_sections): Don't bother optimising both TOEND case. + * elflink.c (bfd_elf_final_link): Reset target_index. + +2019-10-14 Alan Modra + + * elflink.c (elf_get_linked_section_vma): Delete. + (compare_link_order): Use elf_linked_to_section and sort by lma, + size, and id. + (elf_fixup_link_order): Use size_t variables where appropriate. + Make use of elf_linked_to_section. Formatting. Properly align + sections. + +2019-10-14 Alan Modra + + * elf-strtab.c (strrevcmp): Comment. + * merge.c (strrevcmp): Likewise. + * elf64-ppc.c (compare_symbols): Correct final pointer comparison. + Comment on why comparing pointers ensures a stable sort. + * elflink.c (struct elf_symbol): Add void* to union. + (elf_sort_elf_symbol): Ensure a stable sort with pointer comparison. + (elf_sym_name_compare): Likewise. + (bfd_elf_match_symbols_in_sections): Style fix. + (elf_link_sort_cmp1): Comment. + +2019-10-14 Alan Modra + + PR 24955 + * elflink.c (elf_output_implib): Don't use xmalloc. Don't ignore + return value of bfd_alloc2. + * peXXigen.c (_bfd_XXi_write_codeview_record): Don't use xmalloc. + * pef.c (bfd_pef_print_symbol): Likewise. Don't ignore return + value of bfd_get_section_contents. + * som.c (som_write_space_strings): Don't use xmalloc. + (som_write_symbol_strings): Likewise. + +2019-10-11 Max Filippov + + * dwarf2.c (stash_maybe_enable_info_hash_tables): Only set + stash->info_hash_status = STASH_INFO_HASH_ON when + stash_maybe_update_info_hash_tables succeeds. + +2019-10-09 Alan Modra + + PR 25070 + * dwarf2.c (_bfd_dwarf2_slurp_debug_info): Catch overflow of + total_size calculation. + +2019-10-08 Alan Modra + + PR 25078 + * dwarf2.c (find_abstract_instance): Delete orig_info_ptr, add + recur_count. Error on recur_count reaching 100 rather than + info_ptr matching orig_info_ptr. Adjust calls. + +2019-10-07 Jozef Lawrynowicz + + * elf32-msp430.c (elf32_msp430_merge_mspabi_attributes): Rename to.. + (elf32_msp430_merge_msp430_attributes): Add support for merging + the GNU object attribute for data region. + +2019-10-07 Alan Modra + + * elf64-ppc.c (ppc64_elf_size_dynamic_sections): Do allocate + space for local got non-tls relocs when PIE. + +2019-10-07 Alan Modra + + * elflink.c (elf_fixup_link_order): Don't attempt to find + an elf_section for linker created bfd sections. + +2019-10-07 Alan Modra + + * elf32-ppc.c (ppc_elf_tls_optimize): Don't process R_PPC_TLSLD + with non-local symbol. Don't double count __tls_get_addr calls + with marker relocs. + * elf64-ppc.c (ppc64_elf_tls_optimize): Likewise. + +2019-10-07 Alan Modra + + * elf32-ppc.c (nomark_tls_get_addr): Rename from has_tls_get_addr_call + throughout. + * elf64-ppc.c (nomark_tls_get_addr): Likewise. + +2019-10-04 Alan Modra + + * elf64-ppc.c (ppc64_elf_check_relocs): Move initialisation of vars. + (ppc64_elf_tls_optimize): Correct is_local condition. + (allocate_got): Don't reserve dynamic relocations for any of the + tls got relocs in PIEs when the symbol is local. + (allocate_dynrelocs): Correct validity test for local sym using + tlsld_got slot. + (ppc64_elf_size_dynamic_sections): Don't reserve dynamic relocations + for any of the tls got relocs in PIEs. + (ppc64_elf_layout_multitoc): Likewise. + (ppc64_elf_relocate_section): Correct validity test for local sym + using tlsld_got slot. Don't emit dynamic relocations for any of + the tls got relocs in PIEs when the symbol is local. + * elf32-ppc.c (ppc_elf_tls_optimize): Correct is_local condition. + (got_relocs_needed): Delete. + (allocate_dynrelocs): Correct validity test for local sym using + tlsld_got slot. Don't reserve dynamic relocations for any of the + tls got relocs in PIEs when the symbol is local. + (ppc_elf_size_dynamic_sections): Don't reserve dynamic relocations + for any of the tls got relocs in PIEs. + (ppc_elf_relocate_section): Correct validity test for local sym + using tlsld_got slot. Don't emit dynamic relocations for any of + the tls got relocs in PIEs when the symbol is local. + +2019-10-04 Szabolcs Nagy + + PR ld/22263 + PR ld/25056 + * elf32-arm.c (elf32_arm_tls_transition): Use bfd_link_dll instead of + bfd_link_pic for TLS checks. + (elf32_arm_final_link_relocate): Likewise. + (allocate_dynrelocs_for_symbol): Likewise. + +2019-10-04 Szabolcs Nagy + + PR ld/25062 + * elf32-arm.c (elf32_arm_final_link_relocate): Sign extend data. + +2019-09-30 Nick Alcock + + * elf-bfd.h (bfd_section_is_ctf): New inline function. + * elf.c (special_sections_c): Add ".ctf". + (assign_file_positions_for_non_load_sections): Note that + compressed debugging sections etc are not assigned here. Treat + CTF sections like SEC_ELF_COMPRESS sections when is_linker_output: + sh_offset -1. + (assign_file_positions_except_relocs): Likewise. + (find_section_in_list): Note that debugging and CTF sections, as + well as reloc sections, are assigned later. + (_bfd_elf_assign_file_positions_for_non_load): CTF sections get + their size and contents updated. + (_bfd_elf_set_section_contents): Skip CTF sections: unlike + compressed sections, they have no uncompressed content to copy at + this stage. + * elflink.c (elf_link_swap_symbols_out): Call the examine_strtab + callback right before the strtab is written out. + (bfd_elf_final_link): Don't cache the section contents of CTF + sections: they are not populated yet. Call the emit_ctf callback + right at the end, after all the symbols and strings are flushed + out. + +2019-07-13 Nick Alcock + + * elf-strtab.c (_bfd_elf_strtab_len): New. + (_bfd_elf_strtab_str): Likewise. + * bfd-elf.h: Declare them. + +2019-07-13 Nick Alcock + + * elf-bfd.h (bfd_elf_get_str_section): Add. + * elf.c (bfd_elf_get_str_section): No longer static. + +2019-09-26 Alan Modra + + PR 24262 + * Makefile.am (AM_CPPFLAGS): Add -DLIBDIR. + * plugin.c (load_plugin): Search both ${libdir}/bfd-plugins and + ${bindir}/../lib/bfd-plugins if different. + * Makefile.in: Regenerate. + +2019-09-23 Alan Modra + + * elf64-ppc.c (ppc64_elf_check_relocs): Use bfd_link_executable + in choosing between different actions for shared library and + non-shared library cases. Delete ELIMINATE_COPY_RELOCS test. + (dec_dynrel_count): Likewise. Account for ifunc special case. + (ppc64_elf_adjust_dynamic_symbol): Copy relocs are for executables, + not non-pic. + (allocate_dynrelocs): Comment fixes. Delete ELIMINATE_COPY_RELOCS + test. + +2019-09-23 Alan Modra + + * Makefile.am (SOURCE_HFILES): Add many missing .h files. + * Makefile.in: Regenerate. + * po/SRC-POTFILES.in: Regenerate. + +2019-09-23 Alan Modra + + * bfd-in.h (bfd_symbol, bfd_section_already_linked), + (bfd_elf_version_tree): Delete forward declarations. + Move other forward decls and remaining elf function decl later. + (bfd_section_already_linked_table_init), + (bfd_section_already_linked_table_free), + (_bfd_handle_already_linked, _bfd_nearby_section), + (_bfd_fix_excluded_sec_syms): Move to bfdlink.h. + +2019-09-23 Alan Modra + + * bfd-in.h: Move ecoff function declarations.. + * ecoff-bfd.h: ..to here, new file. + * ecoff.c: Include ecoff-bfd.h. + * ecofflink.c: Likewise. + * elf64-alpha.c: Likewise. + * elfxx-mips.c: Likewise. + * bfd-in2.h: Regenerate. + +2019-09-23 Alan Modra + + * bfd-in.h (enum notice_asneeded_action): Move to bfdlink.h. + Move most other elf declarations.. + * elf-bfd.h: ..to here. + * bfd-in2.h: Regenerate. + +2019-09-23 Alan Modra + + * bfd-in.h: Move m68k function declaration.. + * cpu-m68k.h: ..to here, new file.. + * elf32-m68k.h: ..and here, new file. + * elf32-m68k.c: Include cpu-m68k.h and elf32-m68k.h. + * bfd-in2.h: Regenerate. + +2019-09-23 Alan Modra + + * bfd-in.h: Move bfin function declaration.. + * elf32-bfin.h: ..to here, new file. + * elf32-bfin.c: Include elf32-bfin.h. + * bfd-in2.h: Regenerate. + +2019-09-23 Alan Modra + + * bfd-in.h: Move cr16 function declaration.. + * elf32-cr16.h: ..to here, new file. + * elf32-cr16.c: Include elf32-cr16.h. + * bfd-in2.h: Regenerate. + +2019-09-23 Alan Modra + + * bfd-in.h (bfd_sunos_get_needed_list), + (bfd_sunos_record_link_assignment), + (bfd_sunos_size_dynamic_sections), + (bfd_i386linux_size_dynamic_sections), + (bfd_sparclinux_size_dynamic_sections): Delete obsolete decls. + * bfd-in2.h: Regenerate. + +2019-09-23 Alan Modra + + * bfd-in.h: Move xcoff function declarations.. + * xcofflink.h: ..to here, new file. + * xcofflink.c: Include xcofflink.h. + * coff-rs6000.c (bfd_xcoff_ar_archive_set_magic): Delete unused func. + * bfd-in2.h: Regenerate. + +2019-09-23 Alan Modra + + * bfd-in.h: Delete coff forward refs and move coff declaration.. + * coff-bfd.h: ..to here. + * bfd-in2.h: Regenerate. + +2019-09-23 Alan Modra + + * bfd-in.h: Move arm declaraions.. + * cpu-arm.h: ..to here, new file.. + * coff-arm.h: ..and here, new file.. + * elf32-arm.h: ..and here, new file. + * cpu-arm.c: Include cpu-arm.h. + * coff-arm.c: Include cpu-arm.h and coff-arm.h. + * elf32-arm.c: Include cpu-arm.h and elf32-arm.h. + * pe-arm.c: Move function rename defines later. + * pe-arm-wince.c: Likewise and include sysdep.h and bfd.h early. + * bfd-in2.h: Regenerate. + +2019-09-23 Alan Modra + + * bfd-in.h: Move tic6x function declaration.. + * elf32-tic6x.h: ..to here. + * bfd-in2.h: Regenerate. + +2019-09-23 Alan Modra + + * bfd-in.h: Move aarch64 declarations and defines.. + * cpu-aarch64.h: ..to here, new file.. + * elfxx-aarch64.h: ..and here. + * cpu-aarch64.c: Include cpu-aarch64.h. + * elfnn-aarch64.c: Likewise. + * bfd-in2.h: Regenerate. + +2019-09-23 Alan Modra + + * bfd-in.h: Delete ticoff function declarations. + * coff-tic54x.c (bfd_ticoff_set_section_load_page), + (bfd_ticoff_get_section_load_page): Make static. + * bfd-in2.h: Regenerate. + +2019-09-23 Alan Modra + + * bfd-in.h: Move h8300 function declaration to.. + * cpu-h8300.h: ..here, new file. + * cpu-h8300.c: Include cpu-h8300.h. + * elf32-h8300.c: Likewise. + * bfd-in2.h: Regenerate. + +2019-09-23 Alan Modra + + * bfd-in.h: Move ia64 function declarations.. + * elfxx-ia64.h: ..to here. + * bfd-in2.h: Regenerate. + +2019-09-23 Alan Modra + + * bfd-in.h: Move v850 function declarations.. + * elf32-v850.h: ..to here, new file. + * elf32-v850.c: Include elf32-v850.h. + * bfd-in2.h: Regenerate. + +2019-09-23 Alan Modra + + * bfd-in.h: Move mips function declaration to.. + * elfxx-mips.h: ..here. + * bfd-in2.h: Regenerate. + +2019-09-23 Alan Modra + + * bfd-in.h: Move csky function declarations to.. + * elf32-csky.h: ..here, new file. + * elf32-csky.c: Include elf32-csky.h. + * bfd-in2.h: Regenerate. + +2019-09-20 Nelson Chu + + * elfnn-riscv.c (riscv_pcgp_hi_reloc): Add new field undefined_weak. + (riscv_record_pcgp_hi_reloc): New parameter undefined_weak. + Set undefined_weak field from it. + (relax_func_t): New parameter undefined_weak. + (_bfd_riscv_relax_call): New ignored parameter undefined_weak. + (_bfd_riscv_relax_tls_le): Likewise. + (_bfd_riscv_relax_align): Likewise. + (_bfd_riscv_relax_delete): Likewise. + (_bfd_riscv_relax_lui): New parameter undefined_weak. If true, + allow relaxing. For LO12* relocs, set rs1 to x0 when undefined_weak. + (_bfd_riscv_relax_pc): New parameter undefined_weak. For LO12* relocs, + set undefined_weak from hi_reloc. If true, allow relaxing. For LO12* + relocs, set rs1 to x0 when undefined_weak and change to non-pcrel + reloc. + (_bfd_riscv_relax_section): New local undefined_weak. Set for + undef weak relocs that can be relaxed. Pass to relax_func call. + +2019-09-20 Alan Modra + + * bfd-in.h (bfd_section_name, bfd_section_size, bfd_section_vma), + (bfd_section_lma, bfd_section_alignment, bfd_section_flags), + (bfd_section_userdata, bfd_is_com_section, discarded_section), + (bfd_get_section_limit_octets, bfd_get_section_limit): Delete macros. + * bfd.c (bfd_get_section_limit_octets, bfd_get_section_limit), + (bfd_section_list_remove, bfd_section_list_append), + (bfd_section_list_prepend, bfd_section_list_insert_after), + (bfd_section_list_insert_before, bfd_section_removed_from_list): + New inline functions. + * section.c (bfd_is_und_section, bfd_is_abs_section), + (bfd_is_ind_section, bfd_is_const_section, bfd_section_list_remove), + (bfd_section_list_append, bfd_section_list_prepend), + (bfd_section_list_insert_after, bfd_section_list_insert_before), + (bfd_section_removed_from_list): Delete macros. + (bfd_section_name, bfd_section_size, bfd_section_vma), + (bfd_section_lma, bfd_section_alignment, bfd_section_flags), + (bfd_section_userdata, bfd_is_com_section, bfd_is_und_section), + (bfd_is_abs_section, bfd_is_ind_section, bfd_is_const_section), + (discarded_section): New inline functions. + * bfd-in2.h: Regenerate. + +2019-09-20 Alan Modra + + * bfd-in.h (bfd_asymbol_section, bfd_asymbol_value, bfd_asymbol_name), + (bfd_asymbol_bfd, bfd_asymbol_flavour, bfd_set_asymbol_name): Delete. + * bfd.c (bfd_asymbol_section, bfd_asymbol_value, bfd_asymbol_name), + (bfd_asymbol_bfd, bfd_set_asymbol_name): New inline functions. + * targets.c (bfd_asymbol_flavour): Likewise. + * bfd-in2.h: Regenerate. + +2019-09-20 Alan Modra + + * archive.c (bfd_generic_archive_p): Use bfd_set_thin_archive. + * bfd-in.h (bfd_get_filename, bfd_get_cacheable, bfd_get_format), + (bfd_get_target, bfd_get_flavour, bfd_family_coff, bfd_big_endian), + (bfd_little_endian, bfd_header_big_endian, bfd_header_little_endian), + (bfd_get_file_flags, bfd_applicable_file_flags), + (bfd_applicable_section_flags, bfd_has_map, bfd_is_thin_archive), + (bfd_valid_reloc_types, bfd_usrdata, bfd_get_start_address), + (bfd_get_symcount, bfd_get_outsymbols, bfd_count_sections), + (bfd_get_dynamic_symcount, bfd_get_symbol_leading_char): Delete. + * bfd/bfd.c (bfd_get_filename, bfd_get_cacheable, bfd_get_format), + (bfd_get_file_flags, bfd_get_start_address, bfd_get_symcount), + (bfd_get_dynamic_symcount, bfd_get_outsymbols, bfd_count_sections), + (bfd_has_map, bfd_is_thin_archive, bfd_set_thin_archive), + (bfd_usrdata, bfd_set_usrdata): New inline functions. + * targets.c (bfd_get_target, bfd_get_flavour), + (bfd_applicable_file_flags, bfd_family_coff, bfd_big_endian), + (bfd_little_endian, bfd_header_big_endian), + (bfd_header_little_endian, bfd_applicable_section_flags), + (bfd_get_symbol_leading_char): New inline functions. + * bfd-in2.h: Regenerate. + +2019-09-20 Alan Modra + + * elf64-ppc.c (ppc64_glibc_dynamic_reloc): New function. + (ppc64_elf_relocate_section): Warn if emitting unsupported dynamic + relocations. + +2019-09-18 Alan Modra + + * bfd-in.h (bfd_get_section_name, bfd_get_section_vma), + (bfd_get_section_lma, bfd_get_section_alignment), + (bfd_get_section_size, bfd_get_section_flags), + (bfd_get_section_userdata): Delete. + (bfd_section_name, bfd_section_size, bfd_section_vma), + (bfd_section_lma, bfd_section_alignment): Lose bfd parameter. + (bfd_section_flags, bfd_section_userdata): New. + (bfd_is_com_section): Rename parameter. + * section.c (bfd_set_section_userdata, bfd_set_section_vma), + (bfd_set_section_alignment, bfd_set_section_flags, bfd_rename_section), + (bfd_set_section_size): Delete bfd parameter, rename section parameter. + (bfd_set_section_lma): New. + * bfd-in2.h: Regenerate. + * mach-o.c (bfd_mach_o_init_section_from_mach_o): Delete bfd param, + update callers. + * aoutx.h, * bfd.c, * coff-alpha.c, * coff-arm.c, * coff-mips.c, + * coff64-rs6000.c, * coffcode.h, * coffgen.c, * cofflink.c, + * compress.c, * ecoff.c, * elf-eh-frame.c, * elf-hppa.h, + * elf-ifunc.c, * elf-m10200.c, * elf-m10300.c, * elf-properties.c, + * elf-s390-common.c, * elf-vxworks.c, * elf.c, * elf32-arc.c, + * elf32-arm.c, * elf32-avr.c, * elf32-bfin.c, * elf32-cr16.c, + * elf32-cr16c.c, * elf32-cris.c, * elf32-crx.c, * elf32-csky.c, + * elf32-d10v.c, * elf32-epiphany.c, * elf32-fr30.c, * elf32-frv.c, + * elf32-ft32.c, * elf32-h8300.c, * elf32-hppa.c, * elf32-i386.c, + * elf32-ip2k.c, * elf32-iq2000.c, * elf32-lm32.c, * elf32-m32c.c, + * elf32-m32r.c, * elf32-m68hc1x.c, * elf32-m68k.c, * elf32-mcore.c, + * elf32-mep.c, * elf32-metag.c, * elf32-microblaze.c, + * elf32-moxie.c, * elf32-msp430.c, * elf32-mt.c, * elf32-nds32.c, + * elf32-nios2.c, * elf32-or1k.c, * elf32-ppc.c, * elf32-pru.c, + * elf32-rl78.c, * elf32-rx.c, * elf32-s390.c, * elf32-score.c, + * elf32-score7.c, * elf32-sh.c, * elf32-spu.c, * elf32-tic6x.c, + * elf32-tilepro.c, * elf32-v850.c, * elf32-vax.c, * elf32-visium.c, + * elf32-xstormy16.c, * elf32-xtensa.c, * elf64-alpha.c, + * elf64-bpf.c, * elf64-hppa.c, * elf64-ia64-vms.c, * elf64-mmix.c, + * elf64-ppc.c, * elf64-s390.c, * elf64-sparc.c, * elf64-x86-64.c, + * elflink.c, * elfnn-aarch64.c, * elfnn-ia64.c, * elfnn-riscv.c, + * elfxx-aarch64.c, * elfxx-mips.c, * elfxx-sparc.c, + * elfxx-tilegx.c, * elfxx-x86.c, * i386msdos.c, * linker.c, + * mach-o.c, * mmo.c, * opncls.c, * pdp11.c, * pei-x86_64.c, + * peicode.h, * reloc.c, * section.c, * syms.c, * vms-alpha.c, + * xcofflink.c: Update throughout for bfd section macro and function + changes. + +2019-09-18 Alan Modra + + * bfd-in.h (bfd_asymbol_section): Rename from bfd_get_section. + (bfd_get_output_section): Delete. + (bfd_asymbol_base): Delete. + (bfd_asymbol_section, bfd_asymbol_value, bfd_asymbol_name), + (bfd_asymbol_bfd, bfd_asymbol_flavour): Tidy. + (bfd_set_asymbol_name): New macro. + * bfd-in2.h: Regenerate. + * aout-cris.c: Update throughout to use bfd_asymbol_section. + * aoutx.h: Likewise. + * cofflink.c: Likewise. + * dwarf2.c: Likewise. + * ecoff.c: Likewise. + * elf.c: Likewise. + * elf32-arm.c: Likewise. + * elf32-mips.c: Likewise. + * elf32-score.c: Likewise. + * elf32-score7.c: Likewise. + * elfn32-mips.c: Likewise. + * elfnn-aarch64.c: Likewise. + * elfxx-mips.c: Likewise. + * linker.c: Likewise. + * pdp11.c: Likewise. + * elf64-mmix.c (mmix_elf_reloc): Part expand bfd_get_output_section. + +2019-09-18 Simon Marchi + + * Makefile.in: Re-generate. + * configure: Re-generate. + * doc/Makefile.in: Re-generate. + +2019-09-18 Alan Modra + + * aoutx.h (slurp_symbol_table): Don't set symcount using bfd_get + macros. + * pdp11.c (slurp_symbol_table): Likewise. + * som.c (som_slurp_symbol_table): Likewise. + * coff-ppc.c (ppc_bfd_coff_final_link): Likewise. + * coffcode.h (coff_slurp_symbol_table): Likewise. + * cofflink.c (_bfd_coff_final_link): Likewise. + * ecoff.c (ecoff_slurp_symbolic_header): Likewise. + (_bfd_ecoff_slurp_symbolic_info): Likewise. + (_bfd_ecoff_slurp_symbol_table): Likewise. + (_bfd_ecoff_bfd_final_link): Likewise. + * elf.c (_bfd_elf_canonicalize_symtab): Likewise. + * elflink.c (elf_link_output_symstrtab): Likewise. + (bfd_elf_final_link): Likewise. + * peicode.h (pe_ILF_build_a_bfd): Likewise. + * xcofflink.c (_bfd_xcoff_bfd_final_link): Likewise. + * aoutx.h (some_aout_object_p, slurp_symbol_table): Don't set + start_address or symcount using bfd_get macros. + * coffgen.c (coff_real_object_p): Likewise. + * pdp11.c (some_aout_object_p, slurp_symbol_table): Likewise. + * som.c (som_object_setup, som_slurp_symbol_table): Likewise. + * elfcore.h (elf_core_file_p): Don't set start_address using + bfd_get macro. + * elf.c (_bfd_elf_canonicalize_dynamic_symtab): Don't set dynsymcount + using bfd_get macro. + * bfd.c (bfd_set_file_flags): Don't set flags using bfd_get macro. + * linker.c (bfd_generic_link_read_symbols): Don't set outsymbols + or symcount using bfd_get macros. + (_bfd_generic_final_link, generic_add_output_symbol): Likewise. + * syms.c (bfd_set_symtab): Likewise. + * vms-alpha.c (alpha_vms_bfd_final_link): Likewise. + * archive.c (do_slurp_bsd_armap): Don't set has_armap using + bfd_has_map macro. + (do_slurp_coff_armap, bfd_slurp_armap): Likewise. + * archive64.c (_bfd_archive_64_bit_slurp_armap): Likewise. + * coff-rs6000.c (_bfd_xcoff_slurp_armap): Likewise. + * coff64-rs6000.c (xcoff64_slurp_armap): Likewise. + * ecoff.c (_bfd_ecoff_slurp_armap): Likewise. + * som.c (som_slurp_armap): Likewise. + +2019-09-18 Alan Modra + + * archures.c (bfd_get_arch): Make param const. + (bfd_get_mach, bfd_arch_bits_per_byte): Likewise. + (bfd_arch_bits_per_address, bfd_octets_per_byte): Likewise. + * bfd-in2.h: Regenerate. + +2019-09-18 Alan Modra + + * bfd-in.h (carsym.name): Make const. + * reloc.c (struct reloc_howto_struct.name): Likewise. + * targets.c (bfd_target.name): Likewise.! + * bfd.c (bfd_get_sign_extend_vma): Make variable const. + * som.c (som_bfd_fill_in_ar_symbols): Use an intermediary variable + when setting carsym.name. + * bfd-in2.h: Regenerate. + +2019-09-18 Alan Modra + + * mach-o.c (bfd_mach_o_fat_member_init): Likewise. Replace + xstrdup and xmalloc with bfd_strdup and bfd_malloc. Return an + error status. Adjust calls. + * vms-lib.c (_bfd_vms_lib_get_module): Test mhd->id earlier. + Close bfd on failure. Replace xstrdup/bfd_alloc use with + bfd_malloc. Use bfd_set_filename. + +2019-09-18 Alan Modra + + * elf64-ppc.c (must_be_dyn_reloc): Return 0 for TOC16 relocs. + (ppc64_elf_check_relocs): Support dynamic/copy relocs for TOC16. + (ppc64_elf_adjust_dynamic_symbol): Don't keep dynamic reloc when + needs_copy even if all relocs are in rw sections. + (dec_dynrel_count): Handle TOC16 relocs. + (ppc64_elf_relocate_section): Support dynamic relocs for TOC16. + (ppc64_elf_finish_dynamic_symbol): Adjust to handle needs_copy + semantic change. + +2019-09-16 Phil Blundell + + * version.m4: Set version to 2.33.50. + * Makefile.in, configure, doc/Makefile.in: Regenerated. + +2019-09-11 Tom Tromey + + * opncls.c (bfd_set_filename): New function. + * bfd-in2.h: Regenerate. + +2019-09-11 Alan Modra + + * targets.c (struct bfd_target): Add _bfd_group_name. + (BFD_JUMP_TABLE): Likewise. + * coffgen.c (bfd_coff_group_name): New function. + * elf.c (bfd_elf_group_name): New function. + * linker.c (_bfd_nolink_bfd_group_name): New function. + * section.c (bfd_generic_group_name): New function. + * elf-bfd.h (bfd_elf_group_name): Declare. + * libbfd-in.h (_bfd_nolink_bfd_group_name): Declare. + * libcoff-in.h (bfd_coff_group_name): Declare. + * aout-target.h (MY_bfd_group_name): Define. + * aout-tic30.c (MY_bfd_group_name): Define. + * bfd.c (bfd_group_name): Define. + * binary.c (binary_bfd_group_name): Define. + * coff-alpha.c (_bfd_ecoff_bfd_group_name): Define. + * coff-mips.c (_bfd_ecoff_bfd_group_name): Define. + * coff-rs6000.c (_bfd_xcoff_bfd_group_name): Define. + * coffcode.h (coff_bfd_group_name): Define. + * elfxx-target.h (bfd_elfNN_bfd_group_name): Define. + * i386msdos.c (msdos_bfd_group_name): Define. + * ihex.c (ihex_bfd_group_name): Define. + * mach-o-target.c (bfd_mach_o_bfd_group_name): Define. + * mmo.c (mmo_bfd_group_name): Define. + * pef.c (bfd_pef_bfd_group_name): Define. + * plugin.c (bfd_plugin_bfd_group_name): Define. + * ppcboot.c (ppcboot_bfd_group_name): Define. + * som.c (som_bfd_group_name): Define. + * srec.c (srec_bfd_group_name): Define. + * tekhex.c (tekhex_bfd_group_name): Define. + * verilog.c (verilog_bfd_group_name): Define. + * vms-alpha.c (vms_bfd_group_name, alpha_vms_bfd_group_name): Define. + * xsym.c (bfd_sym_bfd_group_name): Define. + * coff64-rs6000.c (rs6000_xcoff64_vec): Init new field. + (rs6000_xcoff64_aix_vec): Likewise. + * bfd-in2.h: Regenerate. + * libbfd.h: Regenerate. + * libcoff.h: Regenerate. + +2019-09-10 Nick Clifton + + PR 24907 + * archures.c (bfd_arch_info_type): Add max_reloc_offset_into_insn + field. + (bfd_default_arch_struct): Initialise the new field. + * bfd-in2.h: Regenerate. + * cpu-aarch64.c: Initialise the new field. + * cpu-alpha.c: Likewise. + * cpu-arc.c: Likewise. + * cpu-arm.c: Likewise. + * cpu-avr.c: Likewise. + * cpu-bfin.c: Likewise. + * cpu-bpf.c: Likewise. + * cpu-cr16.c: Likewise. + * cpu-cr16c.c: Likewise. + * cpu-cris.c: Likewise. + * cpu-crx.c: Likewise. + * cpu-csky.c: Likewise. + * cpu-d10v.c: Likewise. + * cpu-d30v.c: Likewise. + * cpu-dlx.c: Likewise. + * cpu-epiphany.c: Likewise. + * cpu-fr30.c: Likewise. + * cpu-frv.c: Likewise. + * cpu-ft32.c: Likewise. + * cpu-h8300.c: Likewise. + * cpu-hppa.c: Likewise. + * cpu-i386.c: Likewise. + * cpu-ia64.c: Likewise. + * cpu-iamcu.c: Likewise. + * cpu-ip2k.c: Likewise. + * cpu-iq2000.c: Likewise. + * cpu-k1om.c: Likewise. + * cpu-l1om.c: Likewise. + * cpu-lm32.c: Likewise. + * cpu-m10200.c: Likewise. + * cpu-m10300.c: Likewise. + * cpu-m32c.c: Likewise. + * cpu-m32r.c: Likewise. + * cpu-m68hc11.c: Likewise. + * cpu-m68hc12.c: Likewise. + * cpu-m68k.c: Likewise. + * cpu-m9s12x.c: Likewise. + * cpu-m9s12xg.c: Likewise. + * cpu-mcore.c: Likewise. + * cpu-mep.c: Likewise. + * cpu-metag.c: Likewise. + * cpu-microblaze.c: Likewise. + * cpu-mips.c: Likewise. + * cpu-mmix.c: Likewise. + * cpu-moxie.c: Likewise. + * cpu-msp430.c: Likewise. + * cpu-mt.c: Likewise. + * cpu-nds32.c: Likewise. + * cpu-nfp.c: Likewise. + * cpu-nios2.c: Likewise. + * cpu-ns32k.c: Likewise. + * cpu-or1k.c: Likewise. + * cpu-pdp11.c: Likewise. + * cpu-pj.c: Likewise. + * cpu-plugin.c: Likewise. + * cpu-powerpc.c: Likewise. + * cpu-pru.c: Likewise. + * cpu-riscv.c: Likewise. + * cpu-rl78.c: Likewise. + * cpu-rs6000.c: Likewise. + * cpu-rx.c: Likewise. + * cpu-s12z.c: Likewise. + * cpu-s390.c: Likewise. + * cpu-score.c: Likewise. + * cpu-sh.c: Likewise. + * cpu-sparc.c: Likewise. + * cpu-spu.c: Likewise. + * cpu-tic30.c: Likewise. + * cpu-tic4x.c: Likewise. + * cpu-tic54x.c: Likewise. + * cpu-tic6x.c: Likewise. + * cpu-tic80.c: Likewise. + * cpu-tilegx.c: Likewise. + * cpu-tilepro.c: Likewise. + * cpu-v850.c: Likewise. + * cpu-v850_rh850.c: Likewise. + * cpu-vax.c: Likewise. + * cpu-visium.c: Likewise. + * cpu-wasm32.c: Likewise. + * cpu-xc16x.c: Likewise. + * cpu-xgate.c: Likewise. + * cpu-xstormy16.c: Likewise. + * cpu-xtensa.c: Likewise. + * cpu-z80.c: Likewise. + * cpu-z8k.c: Likewise. + +2019-09-09 Phil Blundell + + binutils 2.33 branch created. + +2019-09-06 Alan Modra + + * aout-target.h (object_p): Formatting. + * bfd-in.h (bfd_get_filename): Don't cast to char*. + * corefile.c (generic_core_file_matches_executable_p): Constify + variables and remove cast. + * bfd-in2.h: Regenerate. + +2019-09-05 Alan Modra + + * elf64-ppc.c (ppc64_elf_check_relocs): Interpret an addend in + GOT_PCREL and PLT_PCREL relocs as affecting the value stored + in the GOT/PLT entry rather than affecting the offset to that + GOI/PLT entry. + (ppc64_elf_edit_toc, ppc64_elf_relocate_section): Likewise. + +2019-09-05 Alan Modra + + * elf64-ppc.c (xlate_pcrel_opt): Handle prefix loads and stores + in second instruction. + (ppc64_elf_relocate_section): Likewise. + +2019-09-05 Alan Modra + + PR 24955 + * libbfd-in.h (bfd_strdup): New inline function. + * archive.c (_bfd_get_elt_at_filepos): Use bfd_strdup. Close + bfd on error. + * elfcode.h (_bfd_elf_bfd_from_remote_memory): Use bfd_strdup. + * opncls.c (bfd_fopen): Use bfd_strdup. Close fd and stream + on error. + (bfd_openstreamr): Use bfd_strdup. + (bfd_openr_iovec, bfd_openw, bfd_create): Likewise. + * plugin.c (try_load_plugin): Use bfd_malloc. + * libbfd.h: Regenerate. + +2019-09-02 Alan Modra + + PR 11983 + * dwarf2.c (_bfd_dwarf2_slurp_debug_info): Free debug_filename + on success. Tidy. + (read_alt_indirect_string): Likewise. + (read_alt_indirect_ref): Likewise. + +2019-08-31 Jim Wilson + + PR 23825 + * elfnn-riscv.c (riscv_elf_create_dynamic_sections): Add SEC_LOAD, + SEC_DATA, and SEC_HAS_CONTENTS to .tdata.dyn section. + +2019-08-30 Jim Wilson + + * elfnn-riscv.c (riscv_elf_relocate_section): For unresolvable reloc + error, call bfd_set_error, set ret to FALSE, and goto out label. + +2019-08-30 H.J. Lu + + PR ld/24951 + * archive.c (_bfd_get_elt_at_filepos): Copy BFD_COMPRESS, + BFD_DECOMPRESS and BFD_COMPRESS_GABI flags for thin archive. + +2019-08-29 Alan Modra + + PR 24697 + * elf32-ppc.c (ppc_elf_check_relocs): Call bad_shared_reloc + when !bfd_link_executable for R_PPC_EMB_SDA2I16 and + R_PPC_EMB_SDA2REL. Don't call bad_shared_reloc for any other + reloc. + +2019-08-29 Alan Modra + + * elf64-ppc.c (xlate_pcrel_opt): Add poff parameter. Allow offset + on second insn, return it in poff. + (ppc64_elf_relocate_section): Add offset to paddi addend for + PCREL_OPT. + +2019-08-28 Jim Wilson + + * elfnn-riscv.c (_bfd_riscv_relax_lui): Add check to exclude abs + section when setting max_alignment. Update comment. + (_bfd_riscv_relax_pc): Likewise. + +2019-08-29 Alan Modra + + PR 24891 + * bfd.c (struct bfd): Add no_element_cache. + * archive.c (_bfd_get_elt_at_filepos): Don't add element to + archive cache when no_element_cache. + (bfd_generic_archive_p): Set no_element_cache when opening first + element to check format. Close first element too. + (do_slurp_bsd_armap): Don't zero ardata->cache here. + * bfd-in2.h: Regenerate. + +2019-08-24 Alan Modra + + * elf64-ppc.c (ppc64_elf_edit_toc): Exclude undefined weak + symbols from GOT optimisation. + +2019-08-23 Stafford Horne + + * elf32-or1k.c (or1k_elf_finish_dynamic_symbol): Use correct value for + PLT GOT entries. + +2019-08-23 Nick Clifton + + PR 24456 + * elf.c (bfd_section_from_shdr): Issue an informative warning + message and continue processing other sections after encountering + a reloc section for a section which already has other relocs + associated with it. + +2019-08-23 Alan Modra + + PR 24933 + * elfxx-x86.c (_bfd_x86_elf_get_synthetic_symtab): Don't exit + on error without freeing plts[] contents. + +2019-08-22 Dennis Zhang + + * cpu-arm.c: New entries for Cortex-M35P, Cortex-A77, Cortex-A76AE. + +2019-08-22 Nick Clifton + + PR 24922 + * pei-x86_64.c (pex64_xdata_print_uwd_codes): Add checks before + reading data from extra records. + +2019-08-22 Tamar Christina + + PR ld/24601 + * elfnn-aarch64.c (aarch64_relocate): Handle weak TLS and undefined TLS. + Also Pass input_bfd to _bfd_aarch64_elf_resolve_relocation. + * elfxx-aarch64.c (_bfd_aarch64_elf_resolve_relocation): Use it. + * elfxx-aarch64.h (_bfd_aarch64_elf_resolve_relocation): Emit warning + for weak TLS. + +2019-08-22 Alan Modra + + * elf32-arm.c (cmse_scan): Don't use ARM_GET_SYM_CMSE_SPCL, + instead recognize CMSE_PREFIX in symbol name. + (elf32_arm_gc_mark_extra_sections): Likewise. + (elf32_arm_filter_cmse_symbols): Don't test ARM_GET_SYM_CMSE_SPCL. + (elf32_arm_swap_symbol_in): Don't invoke ARM_SET_SYM_CMSE_SPCL. + +2019-08-20 Dennis Zhang + + * cpu-aarch64.c: New entries for Cortex-A34, Cortex-A65, + Cortex-A77, cortex-A65AE, and Cortex-A76AE. + +2019-08-20 Tamar Christina + + * elf32-arm.c (elf32_thumb2_plt_entry, elf32_arm_plt_thumb_stub, + elf32_arm_stub_long_branch_v4t_thumb_thumb, + elf32_arm_stub_long_branch_v4t_thumb_arm, + elf32_arm_stub_short_branch_v4t_thumb_arm, + elf32_arm_stub_long_branch_v4t_thumb_arm_pic, + elf32_arm_stub_long_branch_v4t_thumb_thumb_pic, + elf32_arm_stub_long_branch_v4t_thumb_tls_pic): Change nop to branch to + previous instruction. + +2019-08-19 Tom Tromey + + * dwarf2.c (_bfd_dwarf2_find_symbol_bias): Create hash table + holding symbols. + +2019-08-19 Alan Modra + + * elf64-ppc.c (struct ppc64_elf_obj_tdata): Rename has_gotrel + to has_optrel. + (struct _ppc64_elf_section_data): Likewise. + (ppc64_elf_check_relocs): Set has_optrel for more relocs. + (ppc64_elf_edit_toc): Do ha/lo insn checks in GOT loop rather + than TOC loop. Check PLT16 insns too. + +2019-08-16 H.J. Lu + + PR ld/24905 + * elf64-x86-64.c (elf_x86_64_check_relocs): Move PIC check for + PC-relative relocations back to ... + (elf_x86_64_relocate_section): Here. + +2019-08-16 Martin Liska + + PR ld/24912 + * elflink.c: Report error only for not relocatable. + * linker.c (_bfd_generic_link_add_one_symbol): Do not handle + here lto_slim_object as it's handled in caller. + +2019-08-16 Alan Modra + + * elf32-ppc.c (ppc_elf_relocate_section): Optimize unaligned relocs. + +2019-08-15 Jim Wilson + + * elfnn-riscv.c (perform_relocation) : If + RISCV_CONST_HIGH_PART (value) is zero, then convert c.lui instruction + to c.li instruction, and use ENCODE_RVC_IMM to set value. + +2019-08-15 Tom Tromey + + * dwarf2.c (scan_unit_for_symbols): Check for end of CU, not end + of section. + +2019-08-14 Alan Modra + + PR 24623 + * dwarf2.c (stash_comp_unit): New function, extracted from.. + (_bfd_dwarf2_find_nearest_line): ..here. + (find_abstract_instance): Parse comp units and decode line info + as needed. + +2019-08-14 Alan Modra + + * dwarf2.c (comp_unit_maybe_decode_line_info): Declare. + (comp_unit_find_nearest_line): Use it here.. + (_bfd_dwarf2_find_symbol_bias): ..and here. + +2019-08-14 Alan Modra + + * dwarf2.c (_bfd_dwarf2_find_nearest_line): Remove addr_size parameter. + * libbfd-in.h (_bfd_dwarf2_find_nearest_line): Update prototype. + * coffgen.c (coff_find_nearest_line_with_names): Adjust + _bfd_dwarf2_find_nearest_line calls. + * elf.c (_bfd_elf_find_nearest_line, _bfd_elf_find_line): Likewise. + * elf32-arm.c (elf32_arm_find_nearest_line): Likewise. + * elf64-alpha.c (elf64_alpha_find_nearest_line): Likewise. + * elfnn-aarch64.c (elfNN_aarch64_find_nearest_line): Likewise. + * elfxx-mips.c (_bfd_mips_elf_find_nearest_line): Likewise. + * mach-o.c (bfd_mach_o_find_nearest_line): Likewise. + * libbfd.h: Regenerate. + +2019-08-09 Mihailo Stojanovic + + * elf-bfd.h (struct elf_backend_data): New members. + * elflink.c (_bfd_elf_link_create_dynamic_sections): Create + .gnu.hash section if necessary. + (struct collect_gnu_hash_codes): New member. + (elf_gnu_hash_process_symidx): New function name. + (elf_renumber_gnu_hash_syms): Ignore local and undefined + symbols. Record xlat location for every symbol which should have + a .MIPS.xhash entry. + (bfd_elf_size_dynamic_sections): Add DT_GNU_HASH dynamic tag to + dynamic section if necessary. + (GNU_HASH_SECTION_NAME): New define. + (bfd_elf_size_dynsym_hash_dynstr): Get .MIPS.xhash section. + Update the section size info. + * elfxx-mips.c (struct mips_elf_hash_sort_data): New members. + (struct mips_elf_link_hash_entry): New member. + (mips_elf_link_hash_newfunc): Initialize .MIPS.xhash translation + table location. + (mips_elf_sort_hash_table): Initialize the pointer to the + .MIPS.xhash section. + (mips_elf_sort_hash_table_f): Populate the .MIPS.xhash + translation table entry with the symbol dynindx. + (_bfd_mips_elf_section_from_shdr): Add SHT_MIPS_XHASH. + (_bfd_mips_elf_fake_sections): Initialize .MIPS.xhash section + info. + (_bfd_mips_elf_create_dynamic_sections): Create .MIPS.xhash + section. + (_bfd_mips_elf_size_dynamic_sections): Add DT_MIPS_XHASH tag to + dynamic section. + (_bfd_mips_elf_finish_synamic_sections): Add DT_MIPS_XHASH. + (_bfd_mips_elf_final_write_processing): Set .MIPS.xhash section + sh_link info. + (_bfd_mips_elf_get_target_dtag): Get DT_MIPS_XHASH tag. + (MIPS_LIBC_ABI_XHASH): New ABI version enum value. + (_bfd_mips_post_process_headers): Mark the ABI version as + MIPS_LIBC_ABI_XHASH if there exists a .MIPS.xhash section, + but not a .hash section. + (_bfd_mips_elf_record_xhash_symbol): New function. Record a + position in the translation table, associated with the hash + entry. + * elfxx-mips.h (literal_reloc_p): Define + elf_backend_record_xhash_symbol backend hook. + * elfxx-target.h: Initialize elf_backend_record_xhash_symbol + backend hook. + +2019-08-07 Jose E. Marchesi + + * elf64-bpf.c (bpf_elf_relocate_section): New function. + (bpf_elf_insn_disp_reloc): Delete function. + (elf_backend_relocate_section): Define. + +2019-08-07 Alan Modra + + PR 24644 + * archive64.c (_bfd_archive_64_bit_slurp_armap): Properly check + for overflow in expressions involving nsymz. + +2019-08-01 Ilia Diachkov + + * elfnn-riscv.c (_bfd_riscv_relax_lui): Set lui relax safety area to + two pages in relro presence. + +2019-08-01 Max Filippov + + * elf32-xtensa.c (insn_num_slots, get_rsr_lend_opcode) + (get_wsr_lbeg_opcode): New functions. + (check_loop_aligned): Detect relaxed loops and adjust loop_len + and insn_len for the first actual instruction of the loop. + +2019-07-30 Alan Modra + + PR 24768 + * bfd.c (struct bfd): Add lto_slim_object flag. + * bfd-in2.h: Regenerate. + +2019-07-29 Martin Liska + + PR 24768 + * archive.c (_bfd_compute_and_write_armap): Come up with + report_plugin_err variable. + * bfd-in2.h (struct bfd): Add lto_slim_object flag. + * elf.c (struct lto_section): New. + (_bfd_elf_make_section_from_shdr): Parse content of + .gnu_lto_.lto section. + * elflink.c: Report error for a missing LTO plugin. + * linker.c (_bfd_generic_link_add_one_symbol): Likewise. + +2019-07-28 Alan Modra + + PR 24857 + PR 24339 + * elflink.c (elf_link_add_object_symbols): Report an informative + error on finding local symbols with index equal or greater than + symbol table sh_info. Correct comment. Allow such symbols in + dynamic objects. Abort on NULL section for symbol. + +2019-07-26 Alan Modra + + * elf-bfd.h (struct output_elf_obj_tdata): Delete "linker" field. + (elf_linker): Don't define. + * elflink.c (bfd_elf_final_link): Don't set elf_linker. + +2019-07-25 YunQiang Su + + PR 24832 + * elfxx-mips.c (mips_set_isa_flags): Default to MIPS 3 for 64-bit + mips inputs. + +2019-07-24 Claudiu Zissulescu + + * elf32-arc.c (bfd_get_32_me): Add a small description, fix + formating. + (reloc_type_to_name): Fix formating. + (arc_elf_object_p): Likewise. + (debug_arc_reloc): Likewise. + (arc_do_relocation): Likewise. + +2019-07-24 Claudiu Zissulescu + + * elf32-arc.c (bfd_get_32_me): New function. + (bfd_put_32_me): Likewise. + (arc_elf_relax_section): Likewise. + (bfd_elf32_bfd_relax_section): Define. + +2019-07-24 Alan Modra + + * elf-bfd.h (struct elf_backend_data): Return bfd_boolean from + elf_backend_final_write_processing, don't pass linker arg. + (_bfd_elf_final_write_processing): Update prototype. + * elf.c (_bfd_elf_write_object_contents): Adjust call. + (_bfd_elf_final_write_processing): Return error on incompatible + OSABI and has_gnu_osabi. Remove linker arg. + * elf-nacl.h (nacl_final_write_processing): Update prototype. + * elf-vxworks.h (elf_vxworks_final_write_processing): Likewise. + * elfxx-mips.h (_bfd_mips_final_write_processing): Likewise. + (_bfd_mips_elf_final_write_processing): Likewise. + * elf-hppa.h (elf_hppa_final_write_processing): Return status + and remove linker arg. + * elf-m10300.c (_bfd_mn10300_elf_final_write_processing): Likewise. + * elf-nacl.c (nacl_final_write_processing): Likewise. + * elf-vxworks.c (elf_vxworks_final_write_processing): Likewise. + * elf32-arc.c (arc_elf_final_write_processing): Likewise. + * elf32-arm.c (arm_final_write_processing): Likewise. + (elf32_arm_final_write_processing): Likewise. + (elf32_arm_nacl_final_write_processing): Likewise. + (elf32_arm_vxworks_final_write_processing): Likewise. + * elf32-avr.c (bfd_elf_avr_final_write_processing): Likewise. + * elf32-bfin.c (elf32_bfin_final_write_processing): Likewise. + * elf32-cr16.c (_bfd_cr16_elf_final_write_processing): Likewise. + * elf32-cris.c (cris_elf_final_write_processing): Likewise. + * elf32-h8300.c (elf32_h8_final_write_processing): Likewise. + * elf32-lm32.c (lm32_elf_final_write_processing): Likewise. + * elf32-m32r.c (m32r_elf_final_write_processing): Likewise. + * elf32-m68k.c (elf_m68k_final_write_processing): Likewise. + * elf32-mips.c (mips_vxworks_final_write_processing): Likewise. + * elf32-msp430.c (bfd_elf_msp430_final_write_processing): Likewise. + * elf32-nds32.c (nds32_elf_final_write_processing): Likewise. + * elf32-or1k.c (or1k_elf_final_write_processing): Likewise. + * elf32-pj.c (pj_elf_final_write_processing): Likewise. + * elf32-ppc.c (ppc_final_write_processing): Likewise. + (ppc_elf_final_write_processing): Likewise. + (ppc_elf_vxworks_final_write_processing): Likewise. + * elf32-sparc.c (sparc_final_write_processing): Likewise. + (elf32_sparc_final_write_processing): Likewise. + (elf32_sparc_vxworks_final_write_processing): Likewise. + * elf32-v850.c (v850_elf_final_write_processing): Likewise. + * elf32-xc16x.c (elf32_xc16x_final_write_processing): Likewise. + * elf32-xtensa.c (elf_xtensa_final_write_processing): Likewise. + * elf64-ia64-vms.c (elf64_vms_final_write_processing): Likewise. + * elfnn-ia64.c (elfNN_ia64_final_write_processing): Likewise. + * elfxx-mips.c (_bfd_mips_final_write_processing): Likewise. + (_bfd_mips_elf_final_write_processing): Likewise. + +2019-07-24 Alan Modra + + * elf-vxworks.c (elf_vxworks_final_write_processing): Don't return + early. + * elf32-arc.c (arc_elf_final_write_processing): Likewise. + * elf32-xtensa.c (elf_xtensa_final_write_processing): Likewise. + +2019-07-24 Alan Modra + + * elf32-visium.c (visium_elf_post_process_headers): Don't set + EI_OSABI header byte here. + (ELF_OSABI): Define. + +2019-07-23 Alan Modra + + * elf-bfd.h (enum elf_gnu_osabi): Add elf_gnu_osabi_mbind. + * elf.c (_bfd_elf_make_section_from_shdr): Set elf_gnu_osabi_mbind. + (get_program_header_size): Formatting. Only test SH_GNU_MBIND + when elf_gnu_osabi_mbind is set. + (_bfd_elf_map_sections_to_segments): Likewise. + (_bfd_elf_init_private_section_data): Likewise. + (_bfd_elf_final_write_processing): Update comment. + * elf64-hppa.c (elf64_hppa_special_sections): Move .tbss entry. + (elf_backend_special_sections): Define without .tbss for linux. + +2019-07-23 Alan Modra + + * elf-bfd.h (enum elf_gnu_osabi): Rename from elf_gnu_symbols. + Remove none, any, all enums. + (struct elf_obj_tdata): Rename has_gnu_symbols field to has_gnu_osabi. + (_bfd_elf_final_write_processing): Declare. + * elf.c (_bfd_elf_write_object_contents): Unconditionally call + elf_backend_final_write_processing. + (_bfd_elf_post_process_headers): Move body of function to.. + (_bfd_elf_final_write_processing): ..here, but set EI_OSABI byte + only when not already set. Adjust for rename. + * elfxx-target.h (elf_backend_final_write_processing): Default to + _bfd_elf_final_write_processing. + * elf-hppa.h (elf_hppa_final_write_processing): Call + _bfd_elf_final_write_processing. + * elf-m10300.c (_bfd_mn10300_elf_final_write_processing): Likewise. + * elf-nacl.c (nacl_final_write_processing): Likewise. + * elf-vxworks.c (elf_vxworks_final_write_processing): Likewise. + * elf32-arc.c (arc_elf_final_write_processing): Likewise. + * elf32-avr.c (bfd_elf_avr_final_write_processing): Likewise. + * elf32-bfin.c (elf32_bfin_final_write_processing): Likewise. + * elf32-cr16.c (_bfd_cr16_elf_final_write_processing): Likewise. + * elf32-cris.c (cris_elf_final_write_processing): Likewise. + * elf32-h8300.c (elf32_h8_final_write_processing): Likewise. + * elf32-lm32.c (lm32_elf_final_write_processing): Likewise. + * elf32-m32r.c (m32r_elf_final_write_processing): Likewise. + * elf32-m68k.c (elf_m68k_final_write_processing): Likewise. + * elf32-msp430.c (bfd_elf_msp430_final_write_processing): Likewise. + * elf32-nds32.c (nds32_elf_final_write_processing): Likewise. + * elf32-or1k.c (or1k_elf_final_write_processing): Likewise. + * elf32-pj.c (pj_elf_final_write_processing): Likewise. + * elf32-v850.c (v850_elf_final_write_processing): Likewise. + * elf32-xc16x.c (elf32_xc16x_final_write_processing): Likewise. + * elf32-xtensa.c (elf_xtensa_final_write_processing): Likewise. + * elf64-ia64-vms.c (elf64_vms_final_write_processing): Likewise. + * elfnn-ia64.c (elfNN_ia64_final_write_processing): Likewise. + * elf32-arm.c (arm_final_write_processing): Split out from.. + (elf32_arm_final_write_processing): ..here. Call + _bfd_elf_final_write_processing. + (elf32_arm_nacl_final_write_processing): Adjust. + * elfxx-mips.c (_bfd_mips_final_write_processing): Split out from.. + (_bfd_mips_elf_final_write_processing): ..here. Call + _bfd_elf_final_write_processing. + * elfxx-mips.h (_bfd_mips_final_write_processing): Declare. + * elf32-mips.c (mips_vxworks_final_write_processing): Adjust. + * elf32-ppc.c (ppc_final_write_processing): Split out from.. + (ppc_elf_final_write_processing): ..here. Call + _bfd_elf_final_write_processing. + (ppc_elf_vxworks_final_write_processing): Adjust. + * elf32-sparc.c (sparc_final_write_processing): Split out from.. + (elf32_sparc_final_write_processing): ..here. Call + _bfd_elf_final_write_processing. + (elf32_sparc_vxworks_final_write_processing): Adjust. + * elf32-d10v.c (elf_backend_final_write_processing): Don't define. + * elf32-d30v.c (elf_backend_final_write_processing): Don't define. + * elf32-m68hc11.c (elf_backend_final_write_processing): Don't define. + * elf32-m68hc12.c (elf_backend_final_write_processing): Don't define. + * elf32-s12z.c (elf_backend_final_write_processing): Don't define. + * elf32-i386.c (elf_i386_check_relocs): Don't set has_gnu_symbols. + * elf64-x86-64.c (elf_x86_64_check_relocs): Likewise. + * elflink.c (elf_link_add_object_symbols): Likewise. + (elf_link_output_symstrtab): Set has_gnu_osabi for symbols here + instead. + +2019-07-23 Omar Majid + + * coffcode.h (coff_set_arch_mach_hook): Handle I386_APPLE_MAGIC, + I386_FREEBSD_MAGIC, I386_LINUX_MAGIC, I386_NETBSD_MAGIC, + AMD64_APPLE_MAGIC, AMD64_FREEBSD_MAGIC, AMD64_LINUX_MAGIC, + AMD64_NETBSD_MAGIC. + * peXXigen.c: Add comment about source of .NET magic numbers. + +2019-07-19 Alan Modra + + * reloc.c (BFD_RELOC_PPC64_TPREL34, BFD_RELOC_PPC64_DTPREL34), + (BFD_RELOC_PPC64_GOT_TLSGD34, BFD_RELOC_PPC64_GOT_TLSLD34), + (BFD_RELOC_PPC64_GOT_TPREL34, BFD_RELOC_PPC64_GOT_DTPREL34), + (BFD_RELOC_PPC64_TLS_PCREL): New pcrel tls relocs. + * elf64-ppc.c (ppc64_elf_howto_raw): Add howtos for pcrel tls relocs. + (ppc64_elf_reloc_type_lookup): Translate pcrel tls relocs. + (must_be_dyn_reloc, dec_dynrel_count): Add R_PPC64_TPREL64. + (ppc64_elf_check_relocs): Support pcrel tls relocs. + (ppc64_elf_tls_optimize, ppc64_elf_relocate_section): Likewise. + * bfd-in2.h: Regenerate. + * libbfd.h: Regenerate. + +2019-07-18 Alan Modra + + * elf64-ppc.c (ppc64_elf_relocate_section): Don't bother selecting + a TLS section symbol for edited relocs. Tighten TLS symbol/reloc + match test. + +2019-07-18 Alan Modra + + * elf64-ppc.c (TLS_EXPLICIT): Define as 256. + (ppc64_elf_check_relocs): Don't store TLS_EXPLICIT even if char + is more than 8 bits. + (ppc64_elf_tls_optimize): Likewise. Make tls_set, tls_clear, and + tls_type vars unsigned int. + (ppc64_elf_relocate_section): Use r_type rather than TLS_EXPLICIT + to select r_type edit. + +2019-07-18 Alan Modra + + * elf32-ppc.c (TLS_GDIE): Rename from TLS_TPRELGD throughout file. + Correct comment. + * elf64-ppc.c (TLS_GDIE): Likewise. + +2019-07-18 Alan Modra + + * elf64-ppc.c (ppc64_elf_tls_optimize): Correct test for allowed + range of tp-relative offsets. + +2019-07-15 Alan Modra + + * elflink.c (_bfd_elf_fix_symbol_flags): If the def for an + alias is no longer bfd_link_hash_defined, clear the alias. + +2019-07-13 Alan Modra + + * elflink.c (_bfd_elf_omit_section_dynsym_default): Don't keep + tls_sec. + (_bfd_elf_init_1_index_section): Prefer not using TLS sections. + (_bfd_elf_init_2_index_sections): Likewise. + * elf64-ppc.c (ppc64_elf_relocate_section): When emitting dynamic + relocations for local TLS symbols, use STN_UNDEF as the relocation + symbol. + * elf32-ppc.c (ppc_elf_relocate_section): Likewise, and don't + leave TLS symbol value in the addend. + +2019-07-08 Alan Modra + + PR 24785 + * elf32-ppc.c (_bfd_elf_ppc_set_arch): Sanity check .PPC.EMB.apuinfo + size before reading first word. + +2019-07-02 Nick Clifton + + PR 24717 + * elf.c (is_debuginfo_file): New function. + (assign_file_positions_for_non_load_sections): Do not warn about + allocated sections outside of loadable segments if they are found + in a debuginfo file. + * elf-bfd.h (is_debuginfo_file): Prototype. + +2019-07-02 Nick Clifton + + PR 24753 + * compress.c (bfd_get_full_section_contents): Do not complain + about linker created sections that are larger than the file size. + +2019-07-02 Christophe Lyon + + * bfd/elf32-arm.c (CMSE_STUB_NAME): New define. + (elf32_arm_get_stub_entry): Do not try to emit long-branch stubs + for CMSE stubs. + (arm_dedicated_stub_output_section_name): Use CMSE_STUB_NAME. + +2019-07-02 Srinath Parvathaneni + + * elf32-arm.c (elf32_arm_gc_mark_extra_sections): Mark debug + sections when .text section contain secure entry functions + is marked. + +2019-07-01 Nick Clifton + + PR 23839 + * elf32-arm.c (elf32_arm_update_relocs): Do not include the + section VMA in the offset used to update exidx relocs. + +2019-06-28 Nick Clifton + + PR 24708 + * elf.c (_bfd_elf_slurp_version_tables): Check for an excessively + large version reference section. + * compress.c (bfd_get_full_section_contents): Check for an + uncompressed section whose size is larger than the file size. + +2019-06-28 Alan Modra + + * format.c (bfd_check_format_matches): Don't match plugin target + if another target matches. Expand comment. + * targets.c (_bfd_target_vector): Move plugin_vec after all other + non-corefile targets, outside !SELECT_VECS. + * config.bfd: Don't handle targ=plugin here. + * configure.ac: Don't add plugin to enable_targets or handle in + target loop setting selvecs and other target vars. + * configure: Regenerate. + +2019-06-26 Nick Clifton + + PR 24703 + * mach-o-arm.c (bfd_mach_o_arm_canonicalize_one_reloc): Add error + messages for failures. + * mach-o.c (bfd_mach_o_canonicalize_relocs): Set an bfd error code + if returning an error value. + +2019-06-25 Jan Beulich + + * elf-properties.c (elf_find_and_remove_property): Rename last + parameter. Mention it in comment. + +2019-06-24 Ilia Diachkov + + * elfnn-riscv.c (_bfd_riscv_relax_lui): Delete early exit when + SEC_MERGE or SEC_CODE flags are set. + (_bfd_riscv_relax_section): New local symtype. Set sym_sec and + symtype consistently. Don't include sec_addr (sym_sec) in symval. + Add check for SEC_INFO_TYPE_MERGE and call _bfd_merged_section_offset. + Add sec_addr (sym_sec) after handling merge sections. + +2019-06-24 H.J. Lu + + PR ld/24721 + * elf-properties.c (elf_merge_gnu_property_list): Remove the + property after reporting property removal. + +2019-06-23 Alan Modra + + PR 24704 + * elf64-ppc.c (R_PPC64_GOT16_DS): Don't set has_gotrel. + (ppc64_elf_edit_toc): Don't remove R_PPC64_GOT16_DS got entries. + Reduce range of offsets allowed for other GOT relocs. + +2019-06-23 Alan Modra + + PR 24689 + * elfcode.h (elf_object_p): Warning fix. + +2019-06-21 Alan Modra + + PR 24689 + * elfcode.h (elf_object_p): Check type of e_shstrndx section. + +2019-06-19 Alan Modra + + PR 24697 + * elf32-ppc.c (ppc_elf_relocate_section): Don't read insn for + R_PPC_EMB_RELSDA. Mask low bit of R_PPC_EMB_SDA21 r_offset. + +2019-06-19 Alan Modra + + * elf64-ppc.c (ppc64_elf_inline_plt): Correct st_other test for + functions that require r2 valid to use local entry. + (ppc64_elf_size_stubs, ppc64_elf_relocate_section): Likewise. + +2019-06-17 Szabolcs Nagy + + * elfnn-aarch64.c (elfNN_aarch64_allocate_local_dynrelocs): Remove. + (elfNN_aarch64_size_dynamic_sections): Remove loc_hash_table traversal + with elfNN_aarch64_allocate_local_dynrelocs. + +2019-06-14 Szabolcs Nagy + + * elfnn-aarch64.c: Enable MOVW_PREL relocs for ELF32. + +2019-06-14 Alan Modra + + * Makefile.in: Regenerate. + * configure: Regenerate. + +2019-06-14 Alan Modra + + * elf64-ppc.c: Fix comments involving paddi. + +2019-06-12 Adam Lackorzymski + + PR 24643 + * elf32-arm.c (arm_elf_find_function): Fail if the symol table is + absent, or the bfd is not in the ELF formart. + * elfnn-aarch64.c (aarch64_elf_find_function): Likewise. + +2019-06-10 Christos Zoulas + + PR 24650 + * elf.c (elfcore_make_auxv_note_section): New function. + (elfcore_grok_note): Use it. + (elfcore_grok_freebsd_note): Likewise. + (elfcore_grok_openbsd_note): Likewise. + (elfcore_grok_netbsd_note): Likewise. Plus add support for + NT_NETBSDCORE_AUXV notes. + +2019-06-06 Sudakshina Das + + * elfxx-aarch64.c (_bfd_aarch64_elf_link_setup_gnu_properties): Set + alignment of the new gnu property section. + +2019-06-06 Sudakshina Das + + * bfd-in.h: Change comment. + * bfd-in2.h: Regenerate. + * elfnn-aarch64.c (elfNN_aarch64_merge_gnu_properties): Update warning. + * elfxx-aarch64.c (_bfd_aarch64_elf_link_setup_gnu_properties): + Likwise. + +2019-05-28 Faraz Shahbazker + + * elfxx-mips.c (mips_elf_calculate_relocation) : + Remove overflow check. + +2019-05-28 Alan Modra + + PR 24596 + * cofflink.c (coff_link_check_archive_element): Don't assume + element is a coff object file after calling add_archive_element. + +2019-05-28 Alan Modra + + PR 24596 + * elf32-microblaze.c (microblaze_elf_finish_dynamic_sections): Don't + attempt to set sh_entsize for excluded PLT section. + +2019-05-28 Alan Modra + + PR 24596 + * elf64-alpha.c (elf64_alpha_relocate_section): Don't attempt + to emit R_ALPHA_GOTTPREL in PIEs, for which no space is + allocated in alpha_dynamic_entries_for_reloc. + +2019-05-28 Alan Modra + + PR 24596 + * elf32-lm32.c (lm32_elf_finish_dynamic_sections): Don't segfault + on NULL output_section. + * elflink.c (elf_final_link_free): Don't free -1 symshndxbuf. + +2019-05-28 Alan Modra + + PR 24596 + * elf32-m68k.c (elf_m68k_get_got_entry): Don't create a new + entry when MUST_FIND. Abort when MUST_FIND not found. + (elf_m68k_get_bfd2got_entry): Likewise. + (elf_m68k_relocate_section): Remove now useless assert. + +2019-05-28 Alan Modra + + PR 24596 + * elf64-hppa.c (elf64_hppa_finalize_dynreloc): Get the output bfd + from bfd_link_info, not an output section owner. + (elf64_hppa_finish_dynamic_symbol, elf64_hppa_finalize_opd): Likewise. + (elf_hppa_final_link_relocate): Likewise. + +2019-05-28 Alan Modra + + PR 24596 + * aout-tic30.c (MY_bfd_final_link): Don't segfault on missing + create_object_symbols_section, obj_textsec, obj_datasec or + obj_bsssec. Fix other errors in placement. + * config.bfd: Obsolete tic30-aout. + +2019-05-28 Alan Modra + + PR 24596 + * dwarf2.c (save_section_vma, section_vma_same): Check for NULL + end of section list as well as section_count. + * xcofflink.c (xcoff_link_add_symbols): Fix temporarily changed + section list before returning error. + +2019-05-27 Alan Modra + + * elf.c (bfd_elf_set_group_contents): Exit on zero size section. + +2019-05-27 Alan Modra + + PR 24596 + * linker.c (_bfd_generic_link_output_symbols): Heed BSF_KEEP. + +2019-05-24 Szabolcs Nagy + + * elfnn-aarch64.c (elfNN_aarch64_merge_symbol_attribute): New function. + (struct elf_aarch64_link_hash_table): Add variant_pcs member. + (elfNN_aarch64_allocate_dynrelocs): Update variant_pcs. + (elfNN_aarch64_size_dynamic_sections): Add DT_AARCH64_VARIANT_PCS. + (elf_backend_merge_symbol_attribute): Define. + +2019-05-24 Alan Modra + + * po/SRC-POTFILES.in: Regenerate. + +2019-05-24 Alan Modra + + * elf64-ppc.c: Comment on powerxx _notoc stub variants. + (LI_R11_0, LIS_R11, ORI_R11_R11_0, SLDI_R11_R11_34): Define. + (PADDI_R12_PC, PLD_R12_PC, D34, HA34): Define. + (struct ppc_link_hash_table): Add powerxx_stubs. + (ppc64_elf_check_relocs): Set powerxx_stubs. + (build_powerxx_offset, size_powerxx_offset), + (num_relocs_for_powerxx_offset), + (emit_relocs_for_powerxx_offset): New functions. + (plt_stub_size): Size powerxx stubs. + (ppc_build_one_stub): Emit powerxx stubs. + (ppc_size_one_stub): Size powerxx stubs. Omit .eh_frame for + powerxx stubs. + +2019-05-24 Alan Modra + + * elf64-ppc.c (ppc64_elf_check_relocs): Set has_gotrel for + R_PPC64_GOT_PCREL34. + (xlate_pcrel_opt): New function. + (ppc64_elf_edit_toc): Handle R_PPC64_GOT_PCREL34. + (ppc64_elf_relocate_section): Edit GOT indirect to GOT relative + for R_PPC64_GOT_PCREL34. Implement R_PPC64_PCREL_OPT optimisation. + +2019-05-24 Alan Modra + + * reloc.c (BFD_RELOC_PPC64_D34, BFD_RELOC_PPC64_D34_LO), + (BFD_RELOC_PPC64_D34_HI30, BFD_RELOC_PPC64_D34_HA30), + (BFD_RELOC_PPC64_PCREL34, BFD_RELOC_PPC64_GOT_PCREL34), + (BFD_RELOC_PPC64_PLT_PCREL34), + (BFD_RELOC_PPC64_ADDR16_HIGHER34, BFD_RELOC_PPC64_ADDR16_HIGHERA34), + (BFD_RELOC_PPC64_ADDR16_HIGHEST34, BFD_RELOC_PPC64_ADDR16_HIGHESTA34), + (BFD_RELOC_PPC64_REL16_HIGHER34, BFD_RELOC_PPC64_REL16_HIGHERA34), + (BFD_RELOC_PPC64_REL16_HIGHEST34, BFD_RELOC_PPC64_REL16_HIGHESTA34), + (BFD_RELOC_PPC64_D28, BFD_RELOC_PPC64_PCREL28): New reloc enums. + * elf64-ppc.c (PNOP): Define. + (ppc64_elf_howto_raw): Add reloc howtos for new relocations. + (ppc64_elf_reloc_type_lookup): Translate new bfd reloc numbers. + (ppc64_elf_ha_reloc): Adjust addend for highera34 and highesta34 + relocs. + (ppc64_elf_prefix_reloc): New function. + (struct ppc_link_hash_table): Add notoc_plt. + (is_branch_reloc): Add R_PPC64_PLTCALL_NOTOC. + (is_plt_seq_reloc): Add R_PPC64_PLT_PCREL34, + R_PPC64_PLT_PCREL34_NOTOC, and R_PPC64_PLTSEQ_NOTOC. + (ppc64_elf_check_relocs): Handle pcrel got and plt relocs. Set + has_pltcall for section on seeing R_PPC64_PLTCALL_NOTOC. Handle + possible need for dynamic relocs on non-pcrel powerxx relocs. + (dec_dynrel_count): Handle non-pcrel powerxx relocs. + (ppc64_elf_inline_plt): Handle R_PPC64_PLTCALL_NOTOC. + (toc_adjusting_stub_needed): Likewise. + (ppc64_elf_tls_optimize): Handle R_PPC64_PLTSEQ_NOTOC. + (ppc64_elf_relocate_section): Handle new powerxx relocs. + * bfd-in2.h: Regenerate. + * libbfd.h: Regenerate. + +2019-05-23 Jose E. Marchesi + + * config.bfd (targ_cpu): Process bpf-*-none only if BFD64. + * configure.ac: Set target_size=64 for bpf_elf64_le_vec and + bpf_elf64_be_vec. + * configure: Regenerate. + +2019-05-23 Jose E. Marchesi + + * configure: Regenerated. + * Makefile.am (ALL_MACHINES): Add cpu-bpf.lo. + (ALL_MACHINES_CFILES): Add cpu-bpf.c. + (BFD64_BACKENDS): Add elf64-bpf.lo. + (BFD64_BACKENDS_CFILES): Add elf64-bpf.c. + * Makefile.in (SOURCE_HFILES): Regenerate. + * config.bfd (targ_cpu): Handle bpf-*-* targets. + * cpu-bpf.c: New file. + * elf64-bpf.c: Likewise. + * targets.c (_bfd_target_vector): Add bpf_elf64_be_vec and + bpf_elf64_le_vec. + * archures.c: Define architecture bfd_arch_bpf and machine + bfd_arch_bpf. + * reloc.c: Define BFD relocations used by the BPF target. + * bfd-in2.h: Regenerated. + * libbfd.h: Likewise. + +2019-05-22 Alan Modra + + * elf32-arm.c (arm_allocate_glue_section_space): Clear section + contents. + +2019-05-22 Alan Modra + + * vms-alpha.c (_bfd_vms_write_etir): Don't attempt further + processing on "size error in section". + +2019-05-22 Alan Modra + + * som.c (som_bfd_free_cached_info): Call + _bfd_generic_close_and_cleanup. + +2019-05-21 Faraz Shahbazker + + * elfxx-mips.c (_bfd_mips_elf_check_relocs): Generate error + for TLS_TPREL_HI16(/LO16) relocations in shared library. + +2019-05-21 Faraz Shahbazker + + * elfxx-mips.c (_bfd_mips_elf_check_relocs): Add NULL pointer + checks. Search the RELA table for n64 relocations. + +2019-05-21 Matthew Fortune + Faraz Shahbazker + + * elfxx-mips.c (LA25_BC): New macro. + (mips_elf_link_hash_table): New field. + (STUB_JALRC): New macro. + (mipsr6_o32_exec_plt0_entry_compact): New array. + (mipsr6_n32_exec_plt0_entry_compact): Likewise. + (mipsr6_n64_exec_plt0_entry_compact): Likewise. + (mipsr6_exec_plt_entry_compact): Likewise. + (mips_elf_create_la25_stub): Use BC instead of J for stubs + when compact_branches is true. + (_bfd_mips_elf_finish_dynamic_symbol): Choose the compact + PLT for MIPSR6 with compact_branches. Do not reorder the + compact branches PLT. Switch the lazy stub for MIPSR6 + with compact_branches to use JALRC. + (mips_finish_exec_plt): Choose the compact PLT0 for MIPSR6 + when compact_branches is true. + (_bfd_mips_elf_compact_branches): New function. + * elfxx-mips.h (_bfd_mips_elf_compact_branches): New prototype. + +2019-05-21 Tamar Christina + + PR ld/24373 + * elfnn-aarch64.c (_bfd_aarch64_erratum_843419_branch_to_stub): + Fix print formatter. + +2019-05-21 Andre Vieira + + PR 24460 + * elf32-arm.c (get_value_helper): Remove. + (elf32_arm_final_link_relocate): Fix branch future relocations. + +2019-05-21 Tamar Christina + + PR ld/24373 + * bfd-in.h (enum erratum_84319_opts): New + (bfd_elf64_aarch64_set_options, bfd_elf32_aarch64_set_options): Change + int to enum erratum_84319_opts. + * bfd-in2.h: Regenerate. + * elfnn-aarch64.c (struct elf_aarch64_link_hash_table): Change + fix_erratum_843419 to use new enum, remove fix_erratum_843419_adr. + (_bfd_aarch64_add_stub_entry_after): Conditionally create erratum stub. + (aarch64_size_one_stub): Conditionally size erratum 843419 stubs. + (_bfd_aarch64_resize_stubs): Amend comment. + (elfNN_aarch64_size_stubs): Don't generate stubs when no workaround + requested. + (bfd_elfNN_aarch64_set_options): Use new fix_erratum_843419 enum. + (_bfd_aarch64_erratum_843419_branch_to_stub): Implement selection of + erratum workaround. + (clear_erratum_843419_entry): Update erratum conditional. + +2019-05-21 Senthil Kumar Selvaraj + + PR ld/24571 + * bfd/elf32-avr.c (elf32_avr_relax_section): Adjust range check + when computing distance_short_enough. + +2019-05-21 Senthil Kumar Selvaraj + + PR ld/24564 + * bfd/elf32-avr.c (avr_relative_distance_considering_wrap_around): + Wrap around even if distance equals avr_pc_wrap_around. + +2019-05-20 Nick Clifton + + * po/fr.po: Updated French translation. + +2019-05-16 Andre Vieira + + * elf32-arm.c (elf32_arm_merge_eabi_attributes): Add case for Tag_MVE_arch. + +2019-05-16 Alan Modra + + * elf32-arm.c (elf32_arm_write_section): Revert last change. + +2019-05-15 Alan Modra + + * elf32-arm.c (elf32_arm_write_section): Don't leave + error case of STM32L4XX_ERRATUM_BRANCH_TO_VENEER with + unitialised section contents. + +2019-05-14 Jamey Hicks + + PR 19921 + * verilog.c: (VerilogDataWidth): New variable. + (verilog_write_record): Emit bytes in VerilogDataWidth bundles. + +2019-05-08 Nick Clifton + + PR 24523 + * elf32-m68k.c (elf32_m68k_merge_private_bfd_data): Return TRUE + rather than FALSE if encountering a non-ELF file. + +2019-05-06 Alan Modra + + * elf32-pj.c (pj_elf_reloc): Don't report undefined weak as an error. + +2019-05-06 Alan Modra + + * reloc.c (BFD_RELOC_PPC64_TPREL16_HIGH, BFD_RELOC_PPC64_TPREL16_HIGHA), + (BFD_RELOC_PPC64_DTPREL16_HIGH, BFD_RELOC_PPC64_DTPREL16_HIGHA): + Sort before BFD_RELOC_PPC64_DTPREL16_HIGHESTA entry. + * libbfd.h: Regenerate. + * bfd-in2.h: Regenerate. + +2019-05-04 Alan Modra + + PR 24511 + * syms.c (coff_section_type): Only allow '.', '$' and numeric + following the standard section names. + (bfd_decode_symclass): Prioritize section flag tests in + decode_section_type before name tests in coff_section_type. + * plugin.c (bfd_plugin_canonicalize_symtab): Init fake_section + and fake_common_section using BFD_FAKE_SECTION. Use "fake" as + their names and choose standard .text section flags for + fake_section. + +2019-05-02 Nick Clifton + + PR 24493 + * coffcode.h (styp_to_sec_flags): Treat .gnu.debuglink and + .gnu.debugaltlink sections as debugging sections. + +2019-04-30 Alan Modra + + * elf64-ppc.c (struct ppc64_elf_obj_tdata): Add has_gotrel. + (struct _ppc64_elf_section_data): Likewise. + (ppc64_elf_check_relocs): Set above fields. + (ppc64_elf_edit_toc): Add a pass over GOT relocs. + (ppc64_elf_relocate_section): Edit GOT indirect to GOT relative + when possible. + +2019-04-26 H.J. Lu + + PR ld/24486 + * elflink.c (elf_link_output_extsym): Don't complain undefined + weak dynamic reference. + +2019-04-25 Sudakshina Das + + * elfnn-aarch64.c (PLT_BTI_ENTRY_SIZE): Remove. + (PLT_BTI_TLSDESC_ENTRY_SIZE): Remove. + (PLT_PAC_ENTRY_SIZE, PLT_BTI_PAC_ENTRY_SIZE): Remove. + (PLT_BTI_SMALL_ENTRY_SIZE, PLT_PAC_SMALL_ENTRY_SIZE): Update. + (elfNN_aarch64_small_plt0_pac_entry): Remove. + (elfNN_aarch64_small_plt0_bti_pac_entry): Remove. + (elfNN_aarch64_small_plt0_bti_entry): Update. + (elfNN_aarch64_small_plt_bti_entry): Update. + (elfNN_aarch64_small_plt_pac_entry): Update. + (elfNN_aarch64_tlsdesc_small_plt_bti_entry): Update. + (setup_plt_values): Setup new entries. + (elfNN_aarch64_finish_dynamic_sections): Remove size change. + (elfNN_aarch64_plt_sym_val): Likewise. + +2019-04-22 Jim Wilson + + * elfnn-riscv.c (PRSTATUS_SIZE) [ARCH_SIZE==32]: Change from 0 to 204. + +2019-04-19 Alan Modra + + * elf32-s12z.c (elf_backend_can_gc_sections): Don't define + +2019-04-17 H.J. Lu + + * elf64-x86-64.c (elf_x86_64_need_pic): Suggest -fPIE when not + building shared object. + * elfxx-x86.c (_bfd_x86_elf_size_dynamic_sections): Likewise. + +2019-04-17 H.J. Lu + + PR ld/24458 + * elfxx-x86.h (SYMBOL_DEFINED_NON_SHARED_P): Also check x86 + linker_def. + +2019-04-15 Thomas Preud'homme + + * reloc.c (BFD_RELOC_ARM_T32_VLDR_VSTR_OFF_IMM): New internal + relocation. + * bfd-in2.h: Regenerate. + * libbfd.h: Likewise. + +2019-04-15 Sudakshina Das + + * reloc.c (BFD_RELOC_ARM_THUMB_LOOP12): New. + * bfd-in2.h: Regenerated. + * libbfd.h: Regenerated. + +2019-04-15 Sudakshina Das + + * reloc.c (BFD_RELOC_THUMB_PCREL_BFCSEL): New relocation. + * bfd-in2.h: Regenerated. + * libbfd.h: Likewise. + +2019-04-15 Sudakshina Das + + * reloc.c (BFD_RELOC_ARM_THUMB_BF13): New. + * bfd-in2.h: Regenerated. + * libbfd.h: Regenerated. + * elf32-arm.c (elf32_arm_howto_table_1): New entry for R_ARM_THM_BF13. + (elf32_arm_reloc_map elf32_arm_reloc_map): Map BFD_RELOC_ARM_THUMB_BF13 + and R_ARM_THM_BF12 together. + (elf32_arm_final_link_relocate): New switch case for R_ARM_THM_BF13. + +2019-04-15 Sudakshina Das + + * reloc.c (BFD_RELOC_ARM_THUMB_BF19): New + * libbfd.h: Regenerated. + * bfd-in2.h: Regenerated. + * bfd-elf32-arm.c (elf32_arm_howto_table_1): New entry for R_ARM_THM_BF18. + (elf32_arm_reloc_map elf32_arm_reloc_map): Map BFD_RELOC_ARM_THUMB_BF19 + and R_ARM_THM_BF18 together. + (elf32_arm_final_link_relocate): New switch case for R_ARM_THM_BF19. + +2019-04-15 Sudakshina Das + + * reloc.c (BFD_RELOC_ARM_THUMB_BF17): New enum. + * bfd-in2.h: Regenerated. + * libbfd.h: Regenerated. + * bfd-elf32-arm.c (elf32_arm_howto_table_1): New entry for R_ARM_THM_BF16. + (elf32_arm_reloc_map elf32_arm_reloc_map): Map BFD_RELOC_ARM_THUMB_BF17 + and R_ARM_THM_BF16 together. + (get_value_helper): New reloc helper. + (elf32_arm_final_link_relocate): New switch case for R_ARM_THM_BF16. + +2019-04-15 Sudakshina Das + + * reloc.c (BFD_RELOC_THUMB_PCREL_BRANCH5): New enum. + * bfd-in2.h: Regenerate. + * libbfd.h: Regenerate. + +2019-04-15 Thomas Preud'homme + + * archures.c (bfd_mach_arm_8_1M_MAIN): Define. + * bfd-in2.h: Regenerate. + * cpu-arm.c (arch_info_struct): Add entry for Armv8.1-M Mainline. + * elf32-arm.c (using_thumb_only): Return true for Armv8.1-M Mainline + and update assert. + (using_thumb2): Likewise. + (using_thumb2_bl): Update assert. + (arch_has_arm_nop): Likewise. + (bfd_arm_get_mach_from_attributes): Add case for Armv8.1-M Mainline. + (tag_cpu_arch_combine): Add logic for Armv8.1-M Mainline merging. + +2019-04-11 H.J. Lu + + * elf-linker-x86.h (elf_x86_cet_report): New. + (elf_linker_x86_params): Add cet_report. + * elfxx-x86.c (_bfd_x86_elf_link_setup_gnu_properties): Report + missing IBT and SHSTK properties if needed. + +2019-04-11 H.J. Lu + + PR ld/24436 + * elf-m10300.c (mn10300_elf_check_relocs): Remove BFD_ASSERT of + "h != NULL". Don't check "h != NULL" before calling. + bfd_elf_gc_record_vtentry. + * elf32-arm.c (elf32_arm_check_relocs): Likewise. + * elf32-bfin.c (bfin_check_relocs): Likewise. + * elf32-cris.c (cris_elf_check_relocs): Likewise. + * elf32-csky.c (csky_elf_check_relocs): Likewise. + * elf32-d10v.c (elf32_d10v_check_relocs): Likewise. + * elf32-dlx.c (elf32_dlx_check_relocs): Likewise. + * elf32-fr30.c (fr30_elf_check_relocs): Likewise. + * elf32-frv.c (elf32_frv_check_relocs): Likewise. + * elf32-hppa.c (elf32_hppa_check_relocs): Likewise. + * elf32-i386.c (elf_i386_check_relocs): Likewise. + * elf32-iq2000.c (iq2000_elf_check_relocs): Likewise. + * elf32-m32r.c (m32r_elf_check_relocs): Likewise. + * elf32-m68hc1x.c (elf32_m68hc11_check_relocs): Likewise. + * elf32-m68k.c (elf_m68k_check_relocs): Likewise. + * elf32-mcore.c (mcore_elf_check_relocs): Likewise. + * elf32-metag.c (elf_metag_check_relocs): Likewise. + * elf32-or1k.c (or1k_elf_check_relocs): Likewise. + * elf32-ppc.c (ppc_elf_check_relocs): Likewise. + * elf32-s390.c (elf_s390_check_relocs): Likewise. + * elf32-sh.c (sh_elf_check_relocs): Likewise. + * elf32-v850.c (v850_elf_check_relocs): Likewise. + * elf32-vax.c (elf_vax_check_relocs): Likewise. + * elf32-xstormy16.c (xstormy16_elf_check_relocs): Likewise. + * elf32-xtensa.c (elf_xtensa_check_relocs): Likewise. + * elf64-mmix.c (mmix_elf_check_relocs): Likewise. + * elf64-ppc.c (ppc64_elf_check_relocs): Likewise. + * elf64-s390.c (elf_s390_check_relocs): Likewise. + * elf64-x86-64.c (elf_s390_check_relocs): Likewise. + * elfxx-mips.c (_bfd_mips_elf_check_relocs): Likewise. + * elfxx-sparc.c (_bfd_sparc_elf_check_relocs): Likewise. + * elflink.c (bfd_elf_gc_record_vtinherit): Check for corrupt + VTENTRY entry. + +2019-04-11 Alan Modra + + PR 24435 + * elflink.c (elf_link_add_object_symbols): Don't read partial + dynamic entries from fuzzed objects. + +2019-04-11 Tamar Christina + + PR ld/24302 + * elfnn-aarch64.c (elfNN_aarch64_size_dynamic_sections): Don't emit + DT_TLSDESC_GOT and DT_TLSDESC_PLT when DF_BIND_NOW. + (elfNN_aarch64_finish_dynamic_sections): Don't write PLT if DF_BIND_NOW. + +2019-04-10 Michael Forney + + PR 24427 + * doc/chew.c (free_words): Correctly free "push_text" strings. + +2019-04-08 H.J. Lu + + * config.bfd: Remove i[3-7]86-*-kaos* and i[3-7]86-*-chaos targets. + +2019-04-08 Alan Modra + + * configure.ac (elfxx_x86): Define and use. + * configure: Regenerate. + +2019-04-06 H.J. Lu + + * elf-linker-x86.h: New file. + * elf32-i386.c (elf_i386_convert_load_reloc): Use htab->params + to get x86-specific linker options. + * elf64-x86-64.c (elf_x86_64_convert_load_reloc): Likewise. + (elf_x86_64_check_relocs): Likewise. + (elf_x86_64_relocate_section): Likewise. + (elf_x86_64_link_setup_gnu_properties): Likewise. + * elfxx-x86.c (_bfd_x86_elf_merge_gnu_properties): Likewise. + (_bfd_x86_elf_link_setup_gnu_properties): Likewise. + (_bfd_elf_linker_x86_set_options): New function. + * elfxx-x86.h: Include "elf-linker-x86.h". + (elf_x86_link_hash_table): Add params. + +2019-04-03 Alan Modra + + * coff-i386.c, * coff-x86_64.c, * coffgen.c, * dwarf2.c, + * elf-m10200.c, * elf.c, * elf32-arm.c, * elf32-bfin.c, + * elf32-csky.c, * elf32-m32r.c, * elf32-microblaze.c, * elf32-pru.c, + * elf32-rx.c, * elf32-xgate.c, * elf64-sparc.c, * elfnn-ia64.c, + * elfxx-riscv.c, * elfxx-sparc.c, * linker.c, * mach-o.c, + * pe-x86_64.c, * pei-x86_64.c, * plugin.c: Whitespace fixes. + +2019-04-02 Jim Wilson + + PR 24389 + * elfnn-riscv.c (_bfd_riscv_elf_merge_private_bfd_data): Move read of + ELF header flags to after check for ELF object file. Loop through + sections looking for code sections, if none, then skip ABI checks. + +2019-03-30 Andrew Waterman + + * elfnn-riscv.c (_bfd_riscv_relax_call): Only check ARCH_SIZE for + rd == X_RA case. + +2019-03-29 Max Filippov + + * elf32-xtensa.c (shrink_dynamic_reloc_sections): Add + info->export_dynamic to the conditional. + +2019-03-28 Alan Modra + + PR 24392 + * configure.ac: Invoke AC_CHECK_SIZEOF(int). + * configure: Regenerate. + * coffgen.c (coff_get_reloc_upper_bound): Replace gcc diagnostic + workaround with SIZEOF_LONG vs. SIZEOF_INT check. + * 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. + +2019-03-21 Jim Wilson + + PR 24365 + * elfnn-riscv.c (riscv_elf_relocate_section): For STT_SECTION check, + verify sym non-NULL before using. Add identical check using h. + +2019-03-21 Sudakshina Das + + * elf-bfd.h (struct elf_backend_data): Add argument to + merge_gnu_properties. + * elf-properties.c (elf_merge_gnu_properties): Add argument to + itself and while calling bed->merge_gnu_properties. + (elf_merge_gnu_property_list): Update the calls for + elf_merge_gnu_properties. + * elfnn-aarch64.c (elfNN_aarch64_merge_gnu_properties): Update handling + of --force-bti warning and add argument. + * elfxx-aarch64.c (_bfd_aarch64_elf_link_setup_gnu_properties): Add + warning. + * elfxx-x86.c (_bfd_x86_elf_merge_gnu_properties): Add argument. + * elfxx-x86.h (_bfd_x86_elf_merge_gnu_properties): Likewise in + declaration. + +2019-03-20 Sudakshina Das + + * elfxx-aarch64.c (_bfd_aarch64_elf_link_fixup_gnu_properties): Define. + * elfxx-aarch64.h (_bfd_aarch64_elf_link_fixup_gnu_properties): Declare. + (elf_backend_fixup_gnu_properties): Define for AArch64. + +2019-03-18 Alan Modra + + PR 24355 + * elf32-ppc.c (ppc_finish_symbols): Don't call write_glink_stub + for local iplt syms with ent->plt.offset == -1. Remove ineffective + attempt at writing glink stubs only once. + +2019-03-16 Alan Modra + + PR 24337 + * elf.c (_bfd_elf_rela_local_sym): Revert last change. + (_bfd_elf_rel_local_sym): Likewise. + * elflink.c (elf_link_input_bfd): Use bfd_und_section for + section of symbols with unrecognized shndx. + +2019-03-15 H.J. Lu + + PR ld/24267 + * coffgen.c (_bfd_coff_section_already_linked): Skip discarded + section. + * cofflink.c (coff_link_add_symbols): Check for symbols defined + in discarded section. + +2019-03-15 Alan Modra + + PR 24339 + * elflink.c (elf_link_add_object_symbols): Bail out on a local + symbol after globals if elf_bad_symtab is not set. + +2019-03-15 Alan Modra + + PR 24337 + * elf.c (_bfd_elf_rela_local_sym): Don't segfault on NULL sec. + (_bfd_elf_rel_local_sym): Likewise. + +2019-03-15 Alan Modra + + PR 24336 + * elflink.c (elf_link_read_relocs_from_section): Handle fuzzed + object files with sh_size not a multiple of sh_entsize. + +2019-03-15 H.J. Lu + + PR ld/24338 + * elf64-x86-64.c (elf_x86_64_relocate_section): Check for corrupt + input with bad relocation. + +22019-03-15 H.J. Lu + + * elf64-x86-64.c (elf_x86_64_relocate_section): Re-indent. + +2019-03-14 Nick Clifton + + PR 24334 + * dwarf2.c (struct dwarf2_debug): Add sec_vma_count field. + (save_section_vma): Initialise field to the number of entries in + the sec_vma table. + (section_vma_same): Check that the number of entries in the + sec_vma table matches the number of sections in the bfd. + +2019-03-14 Nick Clifton + + PR 24333 + * elflink.c (_bfd_elf_add_default_symbol): Add a check for a NULL + section owner pointer when adding the default symbol. + +2019-03-14 Nick Clifton + + PR 24332 + * elflink.c (elf_link_add_object_symbols): Add new local variable + extversym_end. Initialise it to point to the end of the version + symbol table, if present. Check it when initialising and updating + the ever pointer. + +2019-03-13 Sudakshina Das + + * elfnn-aarch64.c (PLT_PAC_ENTRY_SIZE, PLT_PAC_SMALL_ENTRY_SIZE): New. + (PLT_BTI_PAC_ENTRY_SIZE, PLT_BTI_PAC_SMALL_ENTRY_SIZE): New. + (setup_plt_values): Account for PAC or PAC and BTI enabled PLTs. + (elfNN_aarch64_size_dynamic_sections): Add checks for PLT_BTI_PAC + and PLT_PAC_PLT. + (elfNN_aarch64_finish_dynamic_sections): Account for PLT_BTI_PAC. + (get_plt_type): Add case for DT_AARCH64_PAC_PLT. + (elfNN_aarch64_plt_sym_val): Add cases for PLT_BTI_PAC and PLT_PAC. + +2019-03-13 Sudakshina Das + Szabolcs Nagy + + * bfd-in.h (aarch64_plt_type, aarch64_enable_bti_type): New. + (aarch64_bti_pac_info): New. + (bfd_elf64_aarch64_set_options): Add aarch64_bti_pac_info argument. + (bfd_elf32_aarch64_set_options): Likewise. + * bfd-in2.h: Regenerate + * elfnn-aarch64.c (PLT_BTI_ENTRY_SIZE): New. + (PLT_BTI_SMALL_ENTRY_SIZE, PLT_BTI_TLSDESC_ENTRY_SIZE): New. + (elfNN_aarch64_small_plt0_bti_entry): New. + (elfNN_aarch64_small_plt_bti_entry): New. + (elfNN_aarch64_tlsdesc_small_plt_bti_entry): New. + (elf_aarch64_obj_tdata): Add no_bti_warn and plt_type fields. + (elf_aarch64_link_hash_table): Add plt0_entry, plt_entry and + tlsdesc_plt_entry_size fields. + (elfNN_aarch64_link_hash_table_create): Initialise the new fields. + (setup_plt_values): New helper function. + (bfd_elfNN_aarch64_set_options): Use new bp_info to set plt sizes and + bti enable type. + (elfNN_aarch64_allocate_dynrelocs): Use new size members instead of + fixed macros. + (elfNN_aarch64_size_dynamic_sections): Likewise and add checks. + (elfNN_aarch64_create_small_pltn_entry): Use new generic pointers + to plt stubs instead of fixed ones and update filling them according + to the need for bti. + (elfNN_aarch64_init_small_plt0_entry): Likewise. + (elfNN_aarch64_finish_dynamic_sections): Likewise. + (get_plt_type, elfNN_aarch64_get_synthetic_symtab): New. + (elfNN_aarch64_plt_sym_val): Update size accordingly. + (elfNN_aarch64_link_setup_gnu_properties): Set up plts if BTI GNU NOTE + is set. + (bfd_elfNN_get_synthetic_symtab): Define. + (elfNN_aarch64_merge_gnu_properties): Give out warning with --force-bti + and mising BTI NOTE SECTION. + + +2019-03-13 Sudakshina Das + + * elf-properties.c (_bfd_elf_link_setup_gnu_properties): Exclude + linker created inputs from merge. + * elfnn-aarch64.c (struct elf_aarch64_obj_tdata): Add field for + GNU_PROPERTY_AARCH64_FEATURE_1_AND properties. + (elfNN_aarch64_link_setup_gnu_properties): New. + (elfNN_aarch64_merge_gnu_properties): New. + (elf_backend_setup_gnu_properties): Define for AArch64. + (elf_backend_merge_gnu_properties): Likewise. + * elfxx-aarch64.c (_bfd_aarch64_elf_link_setup_gnu_properties): Define. + (_bfd_aarch64_elf_parse_gnu_properties): Define. + (_bfd_aarch64_elf_merge_gnu_properties): Define. + * elfxx-aarch64.h (_bfd_aarch64_elf_link_setup_gnu_properties): Declare. + (_bfd_aarch64_elf_parse_gnu_properties): Declare. + (_bfd_aarch64_elf_merge_gnu_properties): Declare. + (elf_backend_parse_gnu_properties): Define for AArch64. + +2019-03-13 H.J. Lu + + PR ld/24322 + * elfxx-x86.c (_bfd_x86_elf_merge_gnu_properties): Properly + merge GNU_PROPERTY_X86_FEATURE_1_[IBT|SHSTK]. + +2019-03-12 Alan Modra + + * coffcode.h (buy_and_read): Delete unnecessary forward decl. Add + nmemb parameter. Use bfd_alloc2. + (coff_slurp_line_table): Use bfd_alloc2. Update buy_and_read calls. + Delete assertion. + (coff_slurp_symbol_table): Use bfd_alloc2 and bfd_zalloc2. + (coff_slurp_reloc_table): Use bfd_alloc2. Update buy_and_read calls. + * coffgen.c (coff_get_reloc_upper_bound): Ensure size calculation + doesn't overflow. + * elf.c (bfd_section_from_shdr): Use bfd_zalloc2. Style fix. + (assign_section_numbers): Style fix. + (swap_out_syms): Use bfd_malloc2. + (_bfd_elf_get_reloc_upper_bound): Ensure size calculation doesn't + overflow. + (_bfd_elf_make_empty_symbol): Style fix. + (elfobj_grok_stapsdt_note_1): Formatting. + * elfcode.h (elf_object_p): Use bfd_alloc2. + (elf_write_relocs, elf_write_shdrs_and_ehdr): Likewise. + (elf_slurp_symbol_table): Use bfd_zalloc2. + (elf_slurp_reloc_table): Use bfd_alloc2. + (_bfd_elf_bfd_from_remote_memory): Use bfd_malloc2. + * elf64-sparc (elf64_sparc_get_reloc_upper_bound): Ensure + size calculation doesn't overflow. + (elf64_sparc_get_dynamic_reloc_upper_bound): Likewise. + * mach-o.c (bfd_mach_o_get_reloc_upper_bound): Likewise. + * pdp11.c (get_reloc_upper_bound): Copy aoutx.h version. + +2019-03-08 Alan Modra + + PR 24311 + * merge.c (merge_strings): Return secinfo. Don't pad section + to alignment here. + (_bfd_merge_sections): Pad section to alignment here, if input + sections contributing to merged output all pad to alignment. + Formatting. + +2019-03-06 Nick Clifton + + * dwarf2.c (_bfd_dwarf2_find_symbol_bias): Check for a NULL symbol + table pointer. + * coffgen.c (coff_find_nearest_line_with_names): Do not call + _bfd_dwarf2_find_symbol_bias if there is no symbol table available. + +2019-03-01 Andreas Krebbel + + This reverts commit 5a12586d44fa8d5dfc74cbca4f2f36a273a16335. + 2019-01-14 Maamoun Tarsha + + PR 20113 + * elf32-s390.c (allocate_dynrelocs): Update comment. + +2019-02-28 Tamar Christina + + * elf-eh-frame.c (_bfd_elf_write_section_eh_frame): Correct CIE parse. + +2019-02-28 Nick Clifton + + PR 24273 + * elf.c (bfd_elf_string_from_elf_section): Check for a string + section that is not NUL terminated. + +2019-02-27 H.J. Lu + + PR ld/24276 + * elf64-x86-64.c (elf_x86_64_check_relocs): Skip symbol defined + by linker when checking copy reloc on protected symbol. + +2019-02-24 Alan Modra + + PR 24144 + * pdp11.c (set_section_contents): Revert 2015-02-24 change. + +2019-02-20 Eric Tsai + + * elf32-xtensa.c (is_resolvable_asm_expansion): Scan output + sections between the call site and call destination and adjust + call distance by the largest alignment. + +2019-02-20 Alan Hayward + + * elf-bfd.h (elfcore_write_aarch_pauth): Add declaration. + * elf.c (elfcore_grok_aarch_pauth): New function. + (elfcore_grok_note): Check for NT_ARM_PAC_MASK. + (elfcore_write_aarch_pauth): New function. + (elfcore_write_register_note): Check for AArch64 pauth section. + +2019-02-20 Alan Modra + + PR 24225 + * elf32-nios2.c (nios2_elf32_relocate_section): Check asprintf + return value. + +2019-02-20 Michael Roitzsch + + * configure.ac (SHARED_LIBADD): Add -liberty -lintl for all + Darwin hosts, not just or1k. + * configure: Regenerate. + +2019-02-20 Alan Modra + + PR 24236 + * archive64.c (_bfd_archive_64_bit_slurp_armap): Move code adding + sentinel NUL to string buffer nearer to loop where it is used. + Don't go past sentinel when scanning strings, and don't write + NUL again. + * archive.c (do_slurp_coff_armap): Simplify string handling to + archive64.c style. + +2019-02-19 Alan Modra + + PR 24235 + * pei-x86_64.c (pex64_bfd_print_pdata_section): Correct checks + attempting to prevent read past end of section. + +2019-02-18 Alan Modra + + PR 24225 + * elf32-nios2.c (nios2_elf32_relocate_section): Use asprintf and + PRIx64 to generate warning messages. Print local sym names too. + +2019-02-09 Vineet Gupta + + * elf32-arc (INIT_SYM_STRING): Delete. + (FINI_SYM_STRING): Likewise. + (init_str): Likewise. + (fini_str): Likewise. + +2019-02-08 Alan Modra + + * elf32-ppc.c (ppc_elf_relocate_section): Add %X to "unsupported + for bss-plt" warning to make it an error. + +2019-02-07 Eric Botcazou + + PR ld/18841 + * elf32-sparc.c (elf32_sparc_reloc_type_class): Return + reloc_class_ifunc for ifunc symbols. + * elf64-sparc.c (elf64_sparc_reloc_type_class): Likewise. + +2019-02-07 Eric Botcazou + + * elf32-visium.c (visium_elf_howto_parity_reloc): Minor tweak. + : Use explicit range test to detect an overflow. + +2019-02-07 Nick Clifton + + * config.bfd: Move the powerpc-lynxos and powerpc-windiss targets + into the definitely obsolete list. + +2019-02-05 H.J. Lu + + PR ld/24151 + * elf64-x86-64.c (elf_x86_64_need_pic): Check + SYMBOL_DEFINED_NON_SHARED_P instead of def_regular. + (elf_x86_64_relocate_section): Move PIC check for PC-relative + relocations to ... + (elf_x86_64_check_relocs): Here. + (elf_x86_64_finish_dynamic_symbol): Use SYMBOL_DEFINED_NON_SHARED_P + to check if a symbol is defined in a non-shared object. + * elfxx-x86.h (SYMBOL_DEFINED_NON_SHARED_P): New. + +2019-01-21 Sergio Durigan Junior + + * elf32-arm.c (elf32_arm_final_link_relocate): Use 'llabs' instead + of 'labs' (and fix GCC warning). + +2019-01-25 Nick Clifton + + * po/ru.po: Updated Russian translation. + +2019-01-23 Nick Clifton + + * po/fr.po: Updated French translation. + +2019-01-21 Nick Clifton + + * po/pt.po: Updated Portuguese translation. + * po/uk.po: Updated Ukranian translation. + +2019-01-21 Yuri Chornoivan + + PR 24108 + * elf32-nds32.c (nds32_relocate_section): Add space between words + in error message. + * elfnn-riscv.c (riscv_version_mismatch): Fix spelling mistake in + error message. + (riscv_i_or_e_p): Likewise. + (riscv_merge_arch_attr_info): Likewise. + +2019-01-19 Nick Clifton + + * version.m4: Reset to 2.32.51 + * configure: Regenerate. + * po/bfd.pot: Regenerate. + +2018-06-24 Nick Clifton + + 2.32 branch created. + +2019-01-16 Kito Cheng + + * elf-attrs.c (vendor_obj_attr_size): Return 0 if size is 0 even + for OBJ_ATTR_PROC. + +2019-01-16 Kito Cheng + Nelson Chu + + * elfnn-riscv.c (in_subsets): New. + (out_subsets): Likewise. + (merged_subsets): Likewise. + (riscv_std_ext_p): Likewise. + (riscv_non_std_ext_p): Likewise. + (riscv_std_sv_ext_p): Likewise. + (riscv_non_std_sv_ext_p): Likewise. + (riscv_version_mismatch): Likewise. + (riscv_i_or_e_p): Likewise. + (riscv_merge_std_ext): Likewise. + (riscv_merge_non_std_and_sv_ext): Likewise. + (riscv_merge_arch_attr_info): Likewise. + (riscv_merge_attributes): Likewise. + (_bfd_riscv_elf_merge_private_bfd_data): Merge attribute. + + * elfnn-riscv.c (riscv_elf_obj_attrs_arg_type): New. + (elf_backend_obj_attrs_vendor): Define. + (elf_backend_obj_attrs_section_type): Likewise. + (elf_backend_obj_attrs_section): Likewise. + (elf_backend_obj_attrs_arg_type): Define as + riscv_elf_obj_attrs_arg_type. + * elfxx-riscv.c (riscv_estimate_digit): New. + (riscv_estimate_arch_strlen1): Likewise. + (riscv_estimate_arch_strlen): Likewise. + (riscv_arch_str1): Likewise. + (riscv_arch_str): Likewise. + * elfxx-riscv.h (riscv_arch_str): Declare. + +2019-01-14 John Darrington + + * bfd-in2.h [BFD_RELOC_S12Z_OPR]: New reloc. + * libbfd.h: regen. + * elf32-s12z.c (eld_s12z_howto_table): R_S12Z_OPR takes non zero + source field. (md_apply_fix): Apply final fix + to BFD_RELOC_S12Z_OPR. + * reloc.c[BFD_RELOC_S12Z_OPR]: New reloc. + +2019-01-14 Maamoun Tarsha + + PR 20113 + * elf32-s390.c (allocate_dynrelocs): Update comment. + +2019-01-09 Andrew Paprocki + + * warning.m4: Adjust egrep pattern for non-GNU compilers. + * configure: Regenerate. + +2019-01-08 Alan Modra + + PR 23699 + PR 24065 + * ihex.c (ihex_write_object_contents): Properly check 32-bit + address range. + +2019-01-05 Yoshinori Sato + + * bfd/archures.c: Add bfd_mach_rx_v2 and bfd_mach_rx_v3. + * bfd/bfd-in2.h: Regenerate. + * bfd/cpu-rx.c (arch_info_struct): Add RXv2 and RXv3 entry. + * bfd/elf32-rx.c (elf32_rx_machine): Add RXv2 and RXv3 support. + +2019-01-04 Lifang Xia + + * config.bfd (csky-*-elf* | csky-*-linux*): Modify the csky + default target, little endian target is more suitable. + +2019-01-04 Alan Modra + + PR 24061 + PR 21786 + * coff-rs6000.c (GET_VALUE_IN_FIELD): Add base parameter and + adjust all callers. + (EQ_VALUE_IN_FIELD): Likewise. + * coff64-rs6000.c (GET_VALUE_IN_FIELD): Likewise. + +2019-01-01 Alan Modra + + Update year range in copyright notice of all files. + +For older changes see ChangeLog-2018 + +Copyright (C) 2019 Free Software Foundation, Inc. + +Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. + +Local Variables: +mode: change-log +left-margin: 8 +fill-column: 74 +version-control: never +End: diff -Nru gdb-9.1/bfd/cisco-core.c gdb-10.2/bfd/cisco-core.c --- gdb-9.1/bfd/cisco-core.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cisco-core.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD back-end for CISCO crash dumps. - Copyright (C) 1994-2019 Free Software Foundation, Inc. + Copyright (C) 1994-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -80,7 +80,7 @@ /* Examine the file for a crash info struct at the offset given by CRASH_INFO_LOC. */ -static const bfd_target * +static bfd_cleanup cisco_core_file_validate (bfd *abfd, int crash_info_loc) { char buf[4]; @@ -92,7 +92,7 @@ unsigned int rambase; sec_ptr asect; struct stat statbuf; - bfd_size_type amt; + size_t amt; flagword flags; if (bfd_seek (abfd, (file_ptr) crash_info_loc, SEEK_SET) != 0) @@ -274,7 +274,7 @@ nread = statbuf.st_size - asect->filepos; asect->size = (nread < 1024) ? nread : 1024; - return abfd->xvec; + return _bfd_no_cleanup; /* Get here if we have already started filling out the BFD and there is an error of some kind. */ @@ -286,19 +286,19 @@ return NULL; } -static const bfd_target * +static bfd_cleanup cisco_core_file_p (bfd *abfd) { int *crash_info_locp; - const bfd_target *target = NULL; + bfd_cleanup cleanup = NULL; for (crash_info_locp = crash_info_locs; - *crash_info_locp != -1 && target == NULL; + *crash_info_locp != -1 && cleanup == NULL; crash_info_locp++) { - target = cisco_core_file_validate (abfd, *crash_info_locp); + cleanup = cisco_core_file_validate (abfd, *crash_info_locp); } - return (target); + return cleanup; } static char * diff -Nru gdb-9.1/bfd/coff64-rs6000.c gdb-10.2/bfd/coff64-rs6000.c --- gdb-9.1/bfd/coff64-rs6000.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/coff64-rs6000.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD back-end for IBM RS/6000 "XCOFF64" files. - Copyright (C) 2000-2019 Free Software Foundation, Inc. + Copyright (C) 2000-2020 Free Software Foundation, Inc. Written Clinton Popetz. Contributed by Cygnus Support. @@ -155,7 +155,7 @@ asection **); static bfd_boolean xcoff64_slurp_armap (bfd *); -static const bfd_target *xcoff64_archive_p +static bfd_cleanup xcoff64_archive_p (bfd *); static bfd *xcoff64_openr_next_archived_file (bfd *, bfd *); @@ -238,7 +238,7 @@ #define coff_bfd_reloc_type_lookup xcoff64_reloc_type_lookup #define coff_bfd_reloc_name_lookup xcoff64_reloc_name_lookup #ifdef AIX_CORE -extern const bfd_target * rs6000coff_core_p +extern bfd_cleanup rs6000coff_core_p (bfd *abfd); extern bfd_boolean rs6000coff_core_file_matches_executable_p (bfd *cbfd, bfd *ebfd); @@ -1249,10 +1249,11 @@ { if (info->unresolved_syms_in_objects != RM_IGNORE && (h->flags & XCOFF_WAS_UNDEFINED) != 0) - (*info->callbacks->undefined_symbol) + info->callbacks->undefined_symbol (info, h->root.root.string, input_bfd, input_section, rel->r_vaddr - input_section->vma, - info->unresolved_syms_in_objects == RM_GENERATE_ERROR); + info->unresolved_syms_in_objects == RM_DIAGNOSE + && !info->warn_unresolved_syms); if (h->root.type == bfd_link_hash_defined || h->root.type == bfd_link_hash_defweak) @@ -1933,18 +1934,25 @@ return FALSE; sz = bfd_scan_vma (hdr.size, (const char **) NULL, 10); + if (sz + 1 < 9) + { + bfd_set_error (bfd_error_bad_value); + return FALSE; + } /* Read in the entire symbol table. */ - contents = (bfd_byte *) bfd_alloc (abfd, sz); + contents = (bfd_byte *) _bfd_alloc_and_read (abfd, sz + 1, sz); if (contents == NULL) return FALSE; - if (bfd_bread (contents, sz, abfd) != sz) - return FALSE; + + /* Ensure strings are NULL terminated so we don't wander off the end + of the buffer. */ + contents[sz] = 0; /* The symbol table starts with an eight byte count. */ c = H_GET_64 (abfd, contents); - if (c * 8 >= sz) + if (c >= sz / 8) { bfd_set_error (bfd_error_bad_value); return FALSE; @@ -1984,14 +1992,14 @@ /* See if this is an NEW XCOFF archive. */ -static const bfd_target * +static bfd_cleanup xcoff64_archive_p (bfd *abfd) { struct artdata *tdata_hold; char magic[SXCOFFARMAG]; /* This is the new format. */ struct xcoff_ar_file_hdr_big hdr; - bfd_size_type amt = SXCOFFARMAG; + size_t amt = SXCOFFARMAG; if (bfd_bread (magic, amt, abfd) != amt) { @@ -2051,7 +2059,7 @@ return NULL; } - return abfd->xvec; + return _bfd_no_cleanup; } @@ -2798,7 +2806,7 @@ &bfd_xcoff_backend_data, }; -extern const bfd_target *xcoff64_core_p +extern bfd_cleanup xcoff64_core_p (bfd *); extern bfd_boolean xcoff64_core_file_matches_executable_p (bfd *, bfd *); diff -Nru gdb-9.1/bfd/coff-alpha.c gdb-10.2/bfd/coff-alpha.c --- gdb-9.1/bfd/coff-alpha.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/coff-alpha.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD back-end for ALPHA Extended-Coff files. - Copyright (C) 1993-2019 Free Software Foundation, Inc. + Copyright (C) 1993-2020 Free Software Foundation, Inc. Modified from coff-mips.c by Steve Chamberlain and Ian Lance Taylor . @@ -398,10 +398,10 @@ /* Recognize an Alpha ECOFF file. */ -static const bfd_target * +static bfd_cleanup alpha_ecoff_object_p (bfd *abfd) { - static const bfd_target *ret; + bfd_cleanup ret; ret = coff_object_p (abfd); @@ -423,7 +423,7 @@ { bfd_size_type size; - size = sec->line_filepos * 8; + size = (bfd_size_type) sec->line_filepos * 8; BFD_ASSERT (size == sec->size || size + 8 == sec->size); if (!bfd_set_section_size (sec, size)) @@ -1127,13 +1127,11 @@ abort (); successful_return: - if (reloc_vector != NULL) - free (reloc_vector); + free (reloc_vector); return data; error_return: - if (reloc_vector != NULL) - free (reloc_vector); + free (reloc_vector); return NULL; } @@ -2026,7 +2024,10 @@ if (bfd_seek (abfd, (file_ptr) FILHSZ, SEEK_CUR) != 0 || bfd_bread (ab, (bfd_size_type) 8, abfd) != 8 || bfd_seek (abfd, (file_ptr) (- (FILHSZ + 8)), SEEK_CUR) != 0) - return NULL; + { + free (ret); + return NULL; + } ret->parsed_size = H_GET_64 (abfd, ab); } @@ -2047,6 +2048,7 @@ bfd_size_type size; bfd_byte *buf, *p; struct bfd_in_memory *bim; + ufile_ptr filesize; buf = NULL; nbfd = _bfd_get_elt_at_filepos (archive, filepos); @@ -2080,6 +2082,14 @@ goto error_return; size = H_GET_64 (nbfd, ab); + /* The decompression algorithm will at most expand by eight times. */ + filesize = bfd_get_file_size (archive); + if (filesize != 0 && size / 8 > filesize) + { + bfd_set_error (bfd_error_malformed_archive); + goto error_return; + } + if (size != 0) { bfd_size_type left; @@ -2118,7 +2128,7 @@ n = dict[h]; else { - if (! bfd_bread (&n, (bfd_size_type) 1, nbfd)) + if (bfd_bread (&n, 1, nbfd) != 1) goto error_return; dict[h] = n; } @@ -2159,8 +2169,7 @@ return nbfd; error_return: - if (buf != NULL) - free (buf); + free (buf); if (nbfd != NULL) bfd_close (nbfd); return NULL; @@ -2412,7 +2421,8 @@ | HAS_LINENO | HAS_DEBUG | HAS_SYMS | HAS_LOCALS | DYNAMIC | WP_TEXT | D_PAGED), - (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC | SEC_CODE | SEC_DATA), + (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC | SEC_CODE + | SEC_DATA | SEC_SMALL_DATA), 0, /* leading underscore */ ' ', /* ar_pad_char */ 15, /* ar_max_namelen */ diff -Nru gdb-9.1/bfd/coff-arm.c gdb-10.2/bfd/coff-arm.c --- gdb-9.1/bfd/coff-arm.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/coff-arm.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD back-end for ARM COFF files. - Copyright (C) 1990-2019 Free Software Foundation, Inc. + Copyright (C) 1990-2020 Free Software Foundation, Inc. Written by Cygnus Support. This file is part of BFD, the Binary File Descriptor library. @@ -924,7 +924,7 @@ coff_arm_link_hash_table_create (bfd * abfd) { struct coff_arm_link_hash_table * ret; - bfd_size_type amt = sizeof (struct coff_arm_link_hash_table); + size_t amt = sizeof (struct coff_arm_link_hash_table); ret = bfd_zmalloc (amt); if (ret == NULL) @@ -1026,7 +1026,7 @@ { char *tmp_name; struct coff_link_hash_entry *myh; - bfd_size_type amt = strlen (name) + strlen (THUMB2ARM_GLUE_ENTRY_NAME) + 1; + size_t amt = strlen (name) + strlen (THUMB2ARM_GLUE_ENTRY_NAME) + 1; tmp_name = bfd_malloc (amt); @@ -1055,7 +1055,7 @@ { char *tmp_name; struct coff_link_hash_entry * myh; - bfd_size_type amt = strlen (name) + strlen (ARM2THUMB_GLUE_ENTRY_NAME) + 1; + size_t amt = strlen (name) + strlen (ARM2THUMB_GLUE_ENTRY_NAME) + 1; tmp_name = bfd_malloc (amt); @@ -1154,7 +1154,7 @@ /* The standard COFF backend linker does not cope with the special Thumb BRANCH23 relocation. The alternative would be to split the - BRANCH23 into seperate HI23 and LO23 relocations. However, it is a + BRANCH23 into separate HI23 and LO23 relocations. However, it is a bit simpler simply providing our own relocation driver. */ /* The reloc processing routine for the ARM/Thumb COFF linker. NOTE: @@ -1840,7 +1840,7 @@ struct bfd_link_hash_entry * bh; struct coff_arm_link_hash_table * globals; bfd_vma val; - bfd_size_type amt; + size_t amt; globals = coff_arm_hash_table (info); @@ -1896,7 +1896,7 @@ struct bfd_link_hash_entry * bh; struct coff_arm_link_hash_table * globals; bfd_vma val; - bfd_size_type amt; + size_t amt; globals = coff_arm_hash_table (info); @@ -2210,7 +2210,8 @@ { _bfd_error_handler /* xgettext: c-format */ - (_("error: %pB is compiled for APCS-%d, whereas %pB is compiled for APCS-%d"), + (_("error: %pB is compiled for APCS-%d, " + "whereas %pB is compiled for APCS-%d"), ibfd, APCS_26_FLAG (ibfd) ? 26 : 32, obfd, APCS_26_FLAG (obfd) ? 26 : 32 ); @@ -2223,14 +2224,16 @@ { if (APCS_FLOAT_FLAG (ibfd)) /* xgettext: c-format */ - _bfd_error_handler (_("\ -error: %pB passes floats in float registers, whereas %pB passes them in integer registers"), - ibfd, obfd); + _bfd_error_handler + (_("error: %pB passes floats in float registers, " + "whereas %pB passes them in integer registers"), + ibfd, obfd); else /* xgettext: c-format */ - _bfd_error_handler (_("\ -error: %pB passes floats in integer registers, whereas %pB passes them in float registers"), - ibfd, obfd); + _bfd_error_handler + (_("error: %pB passes floats in integer registers, " + "whereas %pB passes them in float registers"), + ibfd, obfd); bfd_set_error (bfd_error_wrong_format); return FALSE; @@ -2240,14 +2243,16 @@ { if (PIC_FLAG (ibfd)) /* xgettext: c-format */ - _bfd_error_handler (_("\ -error: %pB is compiled as position independent code, whereas target %pB is absolute position"), - ibfd, obfd); + _bfd_error_handler + (_("error: %pB is compiled as position independent code, " + "whereas target %pB is absolute position"), + ibfd, obfd); else /* xgettext: c-format */ - _bfd_error_handler (_("\ -error: %pB is compiled as absolute position code, whereas target %pB is position independent"), - ibfd, obfd); + _bfd_error_handler + (_("error: %pB is compiled as absolute position code, " + "whereas target %pB is position independent"), + ibfd, obfd); bfd_set_error (bfd_error_wrong_format); return FALSE; @@ -2272,14 +2277,15 @@ { if (INTERWORK_FLAG (ibfd)) /* xgettext: c-format */ - _bfd_error_handler (_("\ -warning: %pB supports interworking, whereas %pB does not"), + _bfd_error_handler (_("warning: %pB supports interworking, " + "whereas %pB does not"), ibfd, obfd); else /* xgettext: c-format */ - _bfd_error_handler (_("\ -warning: %pB does not support interworking, whereas %pB does"), - ibfd, obfd); + _bfd_error_handler + (_("warning: %pB does not support interworking, " + "whereas %pB does"), + ibfd, obfd); } } else @@ -2428,9 +2434,11 @@ if (INTERWORK_FLAG (dest)) { /* xgettext:c-format */ - _bfd_error_handler (_("\ -warning: clearing the interworking flag of %pB because non-interworking code in %pB has been linked with it"), - dest, src); + _bfd_error_handler + (_("warning: clearing the interworking flag of %pB " + "because non-interworking code in %pB has been " + "linked with it"), + dest, src); } SET_INTERWORK_FLAG (dest, 0); diff -Nru gdb-9.1/bfd/coff-arm.h gdb-10.2/bfd/coff-arm.h --- gdb-9.1/bfd/coff-arm.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/coff-arm.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD back-end for ARM COFF files. - Copyright (C) 2019 Free Software Foundation, Inc. + Copyright (C) 2019-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/coff-bfd.c gdb-10.2/bfd/coff-bfd.c --- gdb-9.1/bfd/coff-bfd.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/coff-bfd.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD COFF interfaces used outside of BFD. - Copyright (C) 1990-2019 Free Software Foundation, Inc. + Copyright (C) 1990-2020 Free Software Foundation, Inc. Written by Cygnus Support. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/coff-bfd.h gdb-10.2/bfd/coff-bfd.h --- gdb-9.1/bfd/coff-bfd.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/coff-bfd.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD COFF interfaces used outside of BFD. - Copyright (C) 1990-2019 Free Software Foundation, Inc. + Copyright (C) 1990-2020 Free Software Foundation, Inc. Written by Cygnus Support. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/coffcode.h gdb-10.2/bfd/coffcode.h --- gdb-9.1/bfd/coffcode.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/coffcode.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Support for the generic parts of most COFF variants, for BFD. - Copyright (C) 1990-2019 Free Software Foundation, Inc. + Copyright (C) 1990-2020 Free Software Foundation, Inc. Written by Cygnus Support. This file is part of BFD, the Binary File Descriptor library. @@ -364,6 +364,10 @@ #define GNU_LINKONCE_WT ".gnu.linkonce.wt." #define DOT_RELOC ".reloc" +#if defined(COFF_WITH_PE) || defined(COFF_GO32_EXE) || defined(COFF_GO32) +# define COFF_WITH_EXTENDED_RELOC_COUNTER +#endif + #if defined (COFF_LONG_SECTION_NAMES) /* Needed to expand the inputs to BLANKOR1TOODD. */ #define COFFLONGSECTIONCATHELPER(x,y) x ## y @@ -717,7 +721,7 @@ #ifndef COFF_WITH_PE static bfd_boolean -styp_to_sec_flags (bfd *abfd ATTRIBUTE_UNUSED, +styp_to_sec_flags (bfd *abfd, void * hdr, const char *name, asection *section ATTRIBUTE_UNUSED, @@ -850,6 +854,11 @@ sec_flags = (SEC_LOAD | SEC_ALLOC); #endif /* STYP_SDATA */ + if ((bfd_applicable_section_flags (abfd) & SEC_SMALL_DATA) != 0 + && (CONST_STRNEQ (name, ".sbss") + || CONST_STRNEQ (name, ".sdata"))) + sec_flags |= SEC_SMALL_DATA; + #if defined (COFF_LONG_SECTION_NAMES) && defined (COFF_SUPPORT_GNU_LINKONCE) /* As a GNU extension, if the name begins with .gnu.linkonce, we only link a single copy of the section. This is used to support @@ -1109,7 +1118,7 @@ drop through from the above). */ { char *newname; - bfd_size_type amt; + size_t amt; /* This must the second symbol with the section #. It is the actual symbol name. @@ -1312,6 +1321,11 @@ } } + if ((bfd_applicable_section_flags (abfd) & SEC_SMALL_DATA) != 0 + && (CONST_STRNEQ (name, ".sbss") + || CONST_STRNEQ (name, ".sdata"))) + sec_flags |= SEC_SMALL_DATA; + #if defined (COFF_LONG_SECTION_NAMES) && defined (COFF_SUPPORT_GNU_LINKONCE) /* As a GNU extension, if the name begins with .gnu.linkonce, we only link a single copy of the section. This is used to support @@ -1752,7 +1766,7 @@ coff_new_section_hook (bfd * abfd, asection * section) { combined_entry_type *native; - bfd_size_type amt; + size_t amt; unsigned char sclass = C_STAT; section->alignment_power = COFF_DEFAULT_SECTION_ALIGNMENT_POWER; @@ -1843,7 +1857,7 @@ void * scnhdr) { struct internal_scnhdr *hdr = (struct internal_scnhdr *) scnhdr; - bfd_size_type amt; + size_t amt; unsigned int alignment_power_const = hdr->s_flags & IMAGE_SCN_ALIGN_POWER_BIT_MASK; @@ -1954,6 +1968,39 @@ } #else /* ! RS6000COFF_C */ +#if defined (COFF_GO32_EXE) || defined (COFF_GO32) + +static void +coff_set_alignment_hook (bfd * abfd, asection * section, void * scnhdr) +{ + struct internal_scnhdr *hdr = (struct internal_scnhdr *) scnhdr; + + /* Check for extended relocs. */ + if (hdr->s_flags & IMAGE_SCN_LNK_NRELOC_OVFL) + { + struct external_reloc dst; + struct internal_reloc n; + const file_ptr oldpos = bfd_tell (abfd); + const bfd_size_type relsz = bfd_coff_relsz (abfd); + + if (bfd_seek (abfd, (file_ptr) hdr->s_relptr, 0) != 0) + return; + if (bfd_bread (& dst, relsz, abfd) != relsz) + return; + + coff_swap_reloc_in (abfd, &dst, &n); + if (bfd_seek (abfd, oldpos, 0) != 0) + return; + section->reloc_count = hdr->s_nreloc = n.r_vaddr - 1; + section->rel_filepos += relsz; + } + else if (hdr->s_nreloc == 0xffff) + _bfd_error_handler + (_("%pB: warning: claims to have 0xffff relocs, without overflow"), + abfd); +} + +#else /* ! COFF_GO32_EXE && ! COFF_GO32 */ static void coff_set_alignment_hook (bfd *abfd ATTRIBUTE_UNUSED, @@ -1962,6 +2009,7 @@ { } +#endif /* ! COFF_GO32_EXE && ! COFF_GO32 */ #endif /* ! RS6000COFF_C */ #endif /* ! COFF_WITH_PE */ #endif /* ! COFF_ALIGN_IN_SECTION_HEADER */ @@ -1972,7 +2020,7 @@ coff_mkobject (bfd * abfd) { coff_data_type *coff; - bfd_size_type amt = sizeof (coff_data_type); + size_t amt = sizeof (coff_data_type); abfd->tdata.coff_obj_data = bfd_zalloc (abfd, amt); if (abfd->tdata.coff_obj_data == NULL) @@ -2066,15 +2114,6 @@ abfd->flags |= HAS_DEBUG; #endif - if ((internal_f->f_flags & F_GO32STUB) != 0) - { - coff->go32stub = (char *) bfd_alloc (abfd, (bfd_size_type) GO32_STUBSIZE); - if (coff->go32stub == NULL) - return NULL; - } - if (coff->go32stub != NULL) - memcpy (coff->go32stub, internal_f->go32stub, GO32_STUBSIZE); - return coff; } #endif @@ -2097,11 +2136,6 @@ machine = 0; switch (internal_f->f_magic) { -#ifdef PPCMAGIC - case PPCMAGIC: - arch = bfd_arch_powerpc; - break; -#endif #ifdef I386MAGIC case I386MAGIC: case I386PTXMAGIC: @@ -2161,11 +2195,15 @@ arch = bfd_arch_z80; switch (internal_f->f_flags & F_MACHMASK) { - case 0: case bfd_mach_z80strict << 12: case bfd_mach_z80 << 12: + case bfd_mach_z80n << 12: case bfd_mach_z80full << 12: case bfd_mach_r800 << 12: + case bfd_mach_gbz80 << 12: + case bfd_mach_z180 << 12: + case bfd_mach_ez80_z80 << 12: + case bfd_mach_ez80_adl << 12: machine = ((unsigned)internal_f->f_flags & F_MACHMASK) >> 12; break; default: @@ -2218,15 +2256,11 @@ struct internal_syment sym; bfd_size_type amt = bfd_coff_symesz (abfd); - buf = bfd_malloc (amt); + if (bfd_seek (abfd, obj_sym_filepos (abfd), SEEK_SET) != 0) + return FALSE; + buf = _bfd_malloc_and_read (abfd, amt, amt); if (buf == NULL) return FALSE; - if (bfd_seek (abfd, obj_sym_filepos (abfd), SEEK_SET) != 0 - || bfd_bread (buf, amt, abfd) != amt) - { - free (buf); - return FALSE; - } bfd_coff_swap_sym_in (abfd, buf, & sym); if (sym.n_sclass == C_FILE) cputype = sym.n_type & 0xff; @@ -2330,12 +2364,6 @@ break; #endif -#ifdef TIC80_ARCH_MAGIC - case TIC80_ARCH_MAGIC: - arch = bfd_arch_tic80; - break; -#endif - #ifdef MCOREMAGIC case MCOREMAGIC: arch = bfd_arch_mcore; @@ -2526,8 +2554,8 @@ if (bfd_seek (abfd, s->rel_filepos, SEEK_SET) != 0) return FALSE; -#ifdef COFF_WITH_PE - if (obj_pe (abfd) && s->reloc_count >= 0xffff) +#ifdef COFF_WITH_EXTENDED_RELOC_COUNTER + if ((obj_pe (abfd) || obj_go32 (abfd)) && s->reloc_count >= 0xffff) { /* Encode real count here as first reloc. */ struct internal_reloc n; @@ -2633,8 +2661,7 @@ } #ifdef TARG_AUX - if (p != NULL) - free (p); + free (p); #endif } @@ -2656,11 +2683,15 @@ *magicp = Z80MAGIC; switch (bfd_get_mach (abfd)) { - case 0: case bfd_mach_z80strict: case bfd_mach_z80: + case bfd_mach_z80n: case bfd_mach_z80full: case bfd_mach_r800: + case bfd_mach_gbz80: + case bfd_mach_z180: + case bfd_mach_ez80_z80: + case bfd_mach_ez80_adl: *flagsp = bfd_get_mach (abfd) << 12; break; default: @@ -2715,12 +2746,6 @@ return TRUE; #endif -#ifdef TIC80_ARCH_MAGIC - case bfd_arch_tic80: - *magicp = TIC80_ARCH_MAGIC; - return TRUE; -#endif - #ifdef ARMMAGIC case bfd_arch_arm: #ifdef ARM_WINCE @@ -2760,12 +2785,6 @@ return TRUE; #endif -#ifdef PPCMAGIC - case bfd_arch_powerpc: - *magicp = PPCMAGIC; - return TRUE; -#endif - #if defined(I386MAGIC) || defined(AMD64MAGIC) case bfd_arch_i386: #if defined(I386MAGIC) @@ -2818,9 +2837,7 @@ #ifdef RS6000COFF_C case bfd_arch_rs6000: -#ifndef PPCMAGIC case bfd_arch_powerpc: -#endif BFD_ASSERT (bfd_get_flavour (abfd) == bfd_target_xcoff_flavour); *magicp = bfd_xcoff_magic_number (abfd); return TRUE; @@ -2883,7 +2900,7 @@ /* Calculate the file position for each section. */ #define ALIGN_SECTIONS_IN_FILE -#if defined(TIC80COFF) || defined(TICOFF) +#ifdef TICOFF #undef ALIGN_SECTIONS_IN_FILE #endif @@ -3092,7 +3109,7 @@ page size too, and remember both sizes. */ if (coff_section_data (abfd, current) == NULL) { - bfd_size_type amt = sizeof (struct coff_section_tdata); + size_t amt = sizeof (struct coff_section_tdata); current->used_by_bfd = bfd_zalloc (abfd, amt); if (current->used_by_bfd == NULL) @@ -3100,7 +3117,7 @@ } if (pei_section_data (abfd, current) == NULL) { - bfd_size_type amt = sizeof (struct pei_section_tdata); + size_t amt = sizeof (struct pei_section_tdata); coff_section_data (abfd, current)->tdata = bfd_zalloc (abfd, amt); if (coff_section_data (abfd, current)->tdata == NULL) @@ -3389,9 +3406,9 @@ for (current = abfd->sections; current != NULL; current = current->next) { -#ifdef COFF_WITH_PE +#ifdef COFF_WITH_EXTENDED_RELOC_COUNTER /* We store the actual reloc count in the first reloc's addr. */ - if (obj_pe (abfd) && current->reloc_count >= 0xffff) + if ((obj_pe (abfd) || obj_go32 (abfd)) && current->reloc_count >= 0xffff) reloc_count ++; #endif reloc_count += current->reloc_count; @@ -3419,9 +3436,9 @@ { current->rel_filepos = reloc_base; reloc_base += current->reloc_count * bfd_coff_relsz (abfd); -#ifdef COFF_WITH_PE +#ifdef COFF_WITH_EXTENDED_RELOC_COUNTER /* Extra reloc to hold real count. */ - if (obj_pe (abfd) && current->reloc_count >= 0xffff) + if ((obj_pe (abfd) || obj_go32 (abfd)) && current->reloc_count >= 0xffff) reloc_base += bfd_coff_relsz (abfd); #endif } @@ -3622,7 +3639,7 @@ SCNHDR buff; bfd_size_type amt = bfd_coff_scnhsz (abfd); - if (coff_swap_scnhdr_out (abfd, §ion, &buff) == 0 + if (bfd_coff_swap_scnhdr_out (abfd, §ion, &buff) == 0 || bfd_bwrite (& buff, amt, abfd) != amt) return FALSE; } @@ -3748,7 +3765,7 @@ scnhdr.s_nlnno = current->target_index; scnhdr.s_flags = STYP_OVRFLO; amt = bfd_coff_scnhsz (abfd); - if (coff_swap_scnhdr_out (abfd, &scnhdr, &buff) == 0 + if (bfd_coff_swap_scnhdr_out (abfd, &scnhdr, &buff) == 0 || bfd_bwrite (& buff, amt, abfd) != amt) return FALSE; } @@ -3756,6 +3773,22 @@ #endif #endif +#if defined (COFF_GO32_EXE) || defined (COFF_GO32) + /* Pad section headers. */ + if ((abfd->flags & EXEC_P) && abfd->sections != NULL) + { + file_ptr cur_ptr = scn_base + + abfd->section_count * bfd_coff_scnhsz (abfd); + long fill_size = (abfd->sections->filepos - cur_ptr); + bfd_byte *b = bfd_zmalloc (fill_size); + if (b) + { + bfd_bwrite ((PTR)b, fill_size, abfd); + free (b); + } + } +#endif + /* OK, now set up the filehdr... */ /* Don't include the internal abs section in the section count */ @@ -3811,9 +3844,6 @@ but it doesn't hurt to set it internally. */ internal_f.f_target_id = TI_TARGET_ID; #endif -#ifdef TIC80_TARGET_ID - internal_f.f_target_id = TIC80_TARGET_ID; -#endif /* FIXME, should do something about the other byte orders and architectures. */ @@ -3841,21 +3871,12 @@ internal_a.magic = TICOFF_AOUT_MAGIC; #define __A_MAGIC_SET__ #endif -#ifdef TIC80COFF - internal_a.magic = TIC80_ARCH_MAGIC; -#define __A_MAGIC_SET__ -#endif /* TIC80 */ #if defined(ARM) #define __A_MAGIC_SET__ internal_a.magic = ZMAGIC; #endif -#if defined(PPC_PE) -#define __A_MAGIC_SET__ - internal_a.magic = IMAGE_NT_OPTIONAL_HDR_MAGIC; -#endif - #if defined MCORE_PE #define __A_MAGIC_SET__ internal_a.magic = IMAGE_NT_OPTIONAL_HDR_MAGIC; @@ -3937,24 +3958,6 @@ return FALSE; } #endif -#ifdef COFF_IMAGE_WITH_PE -#ifdef PPC_PE - else if ((abfd->flags & EXEC_P) != 0) - { - bfd_byte b; - - /* PowerPC PE appears to require that all executable files be - rounded up to the page size. */ - b = 0; - if (bfd_seek (abfd, - (file_ptr) BFD_ALIGN (sym_base, COFF_PAGE_SIZE) - 1, - SEEK_SET) != 0 - || bfd_bwrite (&b, (bfd_size_type) 1, abfd) != 1) - return FALSE; - } -#endif -#endif - /* If bfd_get_symcount (abfd) != 0, then we are not using the COFF backend linker, and obj_raw_syment_count is not valid until after coff_write_symbols is called. */ @@ -4211,15 +4214,16 @@ buy_and_read (bfd *abfd, file_ptr where, bfd_size_type nmemb, bfd_size_type size) { - void *area = bfd_alloc2 (abfd, nmemb, size); + size_t amt; - if (!area) - return NULL; - size *= nmemb; - if (bfd_seek (abfd, where, SEEK_SET) != 0 - || bfd_bread (area, size, abfd) != size) + if (_bfd_mul_overflow (nmemb, size, &amt)) + { + bfd_set_error (bfd_error_file_too_big); + return NULL; + } + if (bfd_seek (abfd, where, SEEK_SET) != 0) return NULL; - return area; + return _bfd_alloc_and_read (abfd, amt, amt); } /* @@ -4276,6 +4280,7 @@ LINENO *src; bfd_boolean have_func; bfd_boolean ret = TRUE; + size_t amt; if (asect->lineno_count == 0) return TRUE; @@ -4290,9 +4295,12 @@ return FALSE; } - lineno_cache = (alent *) bfd_alloc2 (abfd, - (bfd_size_type) asect->lineno_count + 1, - sizeof (alent)); + if (_bfd_mul_overflow (asect->lineno_count + 1, sizeof (alent), &amt)) + { + bfd_set_error (bfd_error_file_too_big); + return FALSE; + } + lineno_cache = (alent *) bfd_alloc (abfd, amt); if (lineno_cache == NULL) return FALSE; @@ -4406,8 +4414,12 @@ alent *n_lineno_cache; /* Create a table of functions. */ - func_table = (alent **) bfd_alloc2 (abfd, nbr_func, sizeof (alent *)); - if (func_table != NULL) + if (_bfd_mul_overflow (nbr_func, sizeof (alent *), &amt)) + { + bfd_set_error (bfd_error_file_too_big); + ret = FALSE; + } + else if ((func_table = (alent **) bfd_alloc (abfd, amt)) != NULL) { alent **p = func_table; unsigned int i; @@ -4422,9 +4434,12 @@ qsort (func_table, nbr_func, sizeof (alent *), coff_sort_func_alent); /* Create the new sorted table. */ - n_lineno_cache = (alent *) bfd_alloc2 (abfd, asect->lineno_count, - sizeof (alent)); - if (n_lineno_cache != NULL) + if (_bfd_mul_overflow (asect->lineno_count, sizeof (alent), &amt)) + { + bfd_set_error (bfd_error_file_too_big); + ret = FALSE; + } + else if ((n_lineno_cache = (alent *) bfd_alloc (abfd, amt)) != NULL) { alent *n_cache_ptr = n_lineno_cache; @@ -4470,6 +4485,7 @@ unsigned int *table_ptr; unsigned int number_of_symbols = 0; bfd_boolean ret = TRUE; + size_t amt; if (obj_symbols (abfd)) return TRUE; @@ -4479,15 +4495,23 @@ return FALSE; /* Allocate enough room for all the symbols in cached form. */ - cached_area = (coff_symbol_type *) bfd_alloc2 (abfd, - obj_raw_syment_count (abfd), - sizeof (coff_symbol_type)); + if (_bfd_mul_overflow (obj_raw_syment_count (abfd), + sizeof (*cached_area), &amt)) + { + bfd_set_error (bfd_error_file_too_big); + return FALSE; + } + cached_area = (coff_symbol_type *) bfd_alloc (abfd, amt); if (cached_area == NULL) return FALSE; - table_ptr = (unsigned int *) bfd_zalloc2 (abfd, obj_raw_syment_count (abfd), - sizeof (unsigned int)); - + if (_bfd_mul_overflow (obj_raw_syment_count (abfd), + sizeof (*table_ptr), &amt)) + { + bfd_set_error (bfd_error_file_too_big); + return FALSE; + } + table_ptr = (unsigned int *) bfd_zalloc (abfd, amt); if (table_ptr == NULL) return FALSE; else @@ -4775,7 +4799,7 @@ case C_ALIAS: /* Duplicate tag. */ #endif /* New storage classes for TI COFF. */ -#if defined(TIC80COFF) || defined(TICOFF) +#ifdef TICOFF case C_UEXT: /* Tentative external definition. */ #endif case C_EXTLAB: /* External load time label. */ @@ -4844,6 +4868,12 @@ case C_THUMBEXT: case C_THUMBEXTFUNC: #endif +#ifdef RS6000COFF_C + case C_HIDEXT: +#if ! defined _AIX52 && ! defined AIX_WEAK_SUPPORT + case C_AIX_WEAKEXT: +#endif +#endif #ifdef C_SYSTEM case C_SYSTEM: #endif @@ -4857,6 +4887,10 @@ else return COFF_SYMBOL_COMMON; } +#ifdef RS6000COFF_C + if (syment->n_sclass == C_HIDEXT) + return COFF_SYMBOL_LOCAL; +#endif return COFF_SYMBOL_GLOBAL; default: @@ -4974,6 +5008,7 @@ arelent *reloc_cache; arelent *cache_ptr; unsigned int idx; + size_t amt; if (asect->relocation) return TRUE; @@ -4987,9 +5022,12 @@ native_relocs = (RELOC *) buy_and_read (abfd, asect->rel_filepos, asect->reloc_count, bfd_coff_relsz (abfd)); - reloc_cache = (arelent *) bfd_alloc2 (abfd, asect->reloc_count, - sizeof (arelent)); - + if (_bfd_mul_overflow (asect->reloc_count, sizeof (arelent), &amt)) + { + bfd_set_error (bfd_error_file_too_big); + return FALSE; + } + reloc_cache = (arelent *) bfd_alloc (abfd, amt); if (reloc_cache == NULL || native_relocs == NULL) return FALSE; @@ -5661,7 +5699,7 @@ #endif /* COFF_WITH_PE_BIGOBJ */ #ifndef coff_close_and_cleanup -#define coff_close_and_cleanup _bfd_generic_close_and_cleanup +#define coff_close_and_cleanup _bfd_coff_close_and_cleanup #endif #ifndef coff_bfd_free_cached_info diff -Nru gdb-9.1/bfd/coffgen.c gdb-10.2/bfd/coffgen.c --- gdb-9.1/bfd/coffgen.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/coffgen.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Support for the generic parts of COFF, for BFD. - Copyright (C) 1990-2019 Free Software Foundation, Inc. + Copyright (C) 1990-2020 Free Software Foundation, Inc. Written by Cygnus Support. This file is part of BFD, the Binary File Descriptor library. @@ -225,12 +225,12 @@ /* Read in a COFF object and make it into a BFD. This is used by ECOFF as well. */ -const bfd_target * +bfd_cleanup coff_real_object_p (bfd *, unsigned, struct internal_filehdr *, struct internal_aouthdr *); -const bfd_target * +bfd_cleanup coff_real_object_p (bfd *abfd, unsigned nscns, struct internal_filehdr *internal_f, @@ -275,13 +275,10 @@ scnhsz = bfd_coff_scnhsz (abfd); readsize = (bfd_size_type) nscns * scnhsz; - external_sections = (char *) bfd_alloc (abfd, readsize); + external_sections = (char *) _bfd_alloc_and_read (abfd, readsize, readsize); if (!external_sections) goto fail; - if (bfd_bread ((void *) external_sections, readsize, abfd) != readsize) - goto fail; - /* Set the arch/mach *before* swapping in sections; section header swapping may depend on arch/mach info. */ if (! bfd_coff_set_arch_mach_hook (abfd, (void *) internal_f)) @@ -302,21 +299,23 @@ } } - return abfd->xvec; + _bfd_coff_free_symbols (abfd); + return _bfd_no_cleanup; fail: + _bfd_coff_free_symbols (abfd); bfd_release (abfd, tdata); fail2: abfd->tdata.any = tdata_save; abfd->flags = oflags; abfd->start_address = ostart; - return (const bfd_target *) NULL; + return NULL; } /* Turn a COFF file into a BFD, but fail with bfd_error_wrong_format if it is not a COFF file. This is also used by ECOFF. */ -const bfd_target * +bfd_cleanup coff_object_p (bfd *abfd) { bfd_size_type filhsz; @@ -330,14 +329,11 @@ filhsz = bfd_coff_filhsz (abfd); aoutsz = bfd_coff_aoutsz (abfd); - filehdr = bfd_alloc (abfd, filhsz); + filehdr = _bfd_alloc_and_read (abfd, filhsz, filhsz); if (filehdr == NULL) - return NULL; - if (bfd_bread (filehdr, filhsz, abfd) != filhsz) { if (bfd_get_error () != bfd_error_system_call) bfd_set_error (bfd_error_wrong_format); - bfd_release (abfd, filehdr); return NULL; } bfd_coff_swap_filehdr_in (abfd, filehdr, &internal_f); @@ -363,18 +359,13 @@ { void * opthdr; - opthdr = bfd_alloc (abfd, aoutsz); + opthdr = _bfd_alloc_and_read (abfd, aoutsz, internal_f.f_opthdr); if (opthdr == NULL) return NULL; - if (bfd_bread (opthdr, (bfd_size_type) internal_f.f_opthdr, abfd) - != internal_f.f_opthdr) - { - bfd_release (abfd, opthdr); - return NULL; - } /* PR 17512: file: 11056-1136-0.004. */ if (internal_f.f_opthdr < aoutsz) - memset (((char *) opthdr) + internal_f.f_opthdr, 0, aoutsz - internal_f.f_opthdr); + memset (((char *) opthdr) + internal_f.f_opthdr, 0, + aoutsz - internal_f.f_opthdr); bfd_coff_swap_aouthdr_in (abfd, opthdr, (void *) &internal_a); bfd_release (abfd, opthdr); @@ -553,11 +544,8 @@ for (; erel < erel_end; erel += relsz, irel++) bfd_coff_swap_reloc_in (abfd, (void *) erel, (void *) irel); - if (free_external != NULL) - { - free (free_external); - free_external = NULL; - } + free (free_external); + free_external = NULL; if (cache && free_internal != NULL) { @@ -575,10 +563,8 @@ return internal_relocs; error_return: - if (free_external != NULL) - free (free_external); - if (free_internal != NULL) - free (free_internal); + free (free_external); + free (free_internal); return NULL; } @@ -1591,19 +1577,20 @@ return NULL; } - sec_size = sect->size; - debug_section = (char *) bfd_alloc (abfd, sec_size); - if (debug_section == NULL) - return NULL; - /* Seek to the beginning of the `.debug' section and read it. Save the current position first; it is needed by our caller. Then read debug section and reset the file pointer. */ position = bfd_tell (abfd); - if (bfd_seek (abfd, sect->filepos, SEEK_SET) != 0 - || bfd_bread (debug_section, sec_size, abfd) != sec_size - || bfd_seek (abfd, position, SEEK_SET) != 0) + if (bfd_seek (abfd, sect->filepos, SEEK_SET) != 0) + return NULL; + + sec_size = sect->size; + debug_section = (char *) _bfd_alloc_and_read (abfd, sec_size, sec_size); + if (debug_section == NULL) + return NULL; + + if (bfd_seek (abfd, position, SEEK_SET) != 0) return NULL; * sect_return = sect; @@ -1637,50 +1624,28 @@ bfd_boolean _bfd_coff_get_external_symbols (bfd *abfd) { - bfd_size_type symesz; - bfd_size_type size; + size_t symesz; + size_t size; void * syms; if (obj_coff_external_syms (abfd) != NULL) return TRUE; symesz = bfd_coff_symesz (abfd); - - size = obj_raw_syment_count (abfd) * symesz; - if (size == 0) - return TRUE; - /* Check for integer overflow and for unreasonable symbol counts. */ - if (size < obj_raw_syment_count (abfd) - || (bfd_get_file_size (abfd) > 0 - && size > bfd_get_file_size (abfd))) - - { - _bfd_error_handler (_("%pB: corrupt symbol count: %#" PRIx64 ""), - abfd, (uint64_t) obj_raw_syment_count (abfd)); - return FALSE; - } - - syms = bfd_malloc (size); - if (syms == NULL) + if (_bfd_mul_overflow (obj_raw_syment_count (abfd), symesz, &size)) { - /* PR 21013: Provide an error message when the alloc fails. */ - _bfd_error_handler (_("%pB: not enough memory to allocate space " - "for %#" PRIx64 " symbols of size %#" PRIx64), - abfd, (uint64_t) obj_raw_syment_count (abfd), - (uint64_t) symesz); + bfd_set_error (bfd_error_file_truncated); return FALSE; } - if (bfd_seek (abfd, obj_sym_filepos (abfd), SEEK_SET) != 0 - || bfd_bread (syms, size, abfd) != size) - { - if (syms != NULL) - free (syms); - return FALSE; - } + if (size == 0) + return TRUE; + if (bfd_seek (abfd, obj_sym_filepos (abfd), SEEK_SET) != 0) + return FALSE; + syms = _bfd_malloc_and_read (abfd, size, size); obj_coff_external_syms (abfd) = syms; - return TRUE; + return syms != NULL; } /* Read in the external strings. The strings are not loaded until @@ -1696,6 +1661,7 @@ bfd_size_type strsize; char *strings; file_ptr pos; + ufile_ptr filesize; if (obj_coff_strings (abfd) != NULL) return obj_coff_strings (abfd); @@ -1729,7 +1695,9 @@ #endif } - if (strsize < STRING_SIZE_SIZE || strsize > bfd_get_file_size (abfd)) + filesize = bfd_get_file_size (abfd); + if (strsize < STRING_SIZE_SIZE + || (filesize != 0 && strsize > filesize)) { _bfd_error_handler /* xgettext: c-format */ @@ -1845,6 +1813,13 @@ symbol_ptr = internal_ptr; internal_ptr->is_sym = TRUE; + /* PR 17512: Prevent buffer overrun. */ + if (symbol_ptr->u.syment.n_numaux > ((raw_end - 1) - raw_src) / symesz) + { + bfd_release (abfd, internal); + return NULL; + } + for (i = 0; i < symbol_ptr->u.syment.n_numaux; i++) @@ -1852,13 +1827,6 @@ internal_ptr++; raw_src += symesz; - /* PR 17512: Prevent buffer overrun. */ - if (raw_src >= raw_end || internal_ptr >= internal_end) - { - bfd_release (abfd, internal); - return NULL; - } - bfd_coff_swap_aux_in (abfd, (void *) raw_src, symbol_ptr->u.syment.n_type, symbol_ptr->u.syment.n_sclass, @@ -1871,10 +1839,13 @@ } } - /* Free the raw symbols, but not the strings (if we have them). */ - obj_coff_keep_strings (abfd) = TRUE; - if (! _bfd_coff_free_symbols (abfd)) - return NULL; + /* Free the raw symbols. */ + if (obj_coff_external_syms (abfd) != NULL + && ! obj_coff_keep_syms (abfd)) + { + free (obj_coff_external_syms (abfd)); + obj_coff_external_syms (abfd) = NULL; + } for (internal_ptr = internal; internal_ptr < internal_end; internal_ptr++) @@ -2020,7 +1991,7 @@ asymbol * coff_make_empty_symbol (bfd *abfd) { - bfd_size_type amt = sizeof (coff_symbol_type); + size_t amt = sizeof (coff_symbol_type); coff_symbol_type *new_symbol = (coff_symbol_type *) bfd_zalloc (abfd, amt); if (new_symbol == NULL) @@ -2041,7 +2012,7 @@ void * ptr ATTRIBUTE_UNUSED, unsigned long sz ATTRIBUTE_UNUSED) { - bfd_size_type amt = sizeof (coff_symbol_type); + size_t amt = sizeof (coff_symbol_type); coff_symbol_type *new_symbol = (coff_symbol_type *) bfd_alloc (abfd, amt); if (new_symbol == NULL) @@ -2266,7 +2237,7 @@ combined_entry_type *pend; alent *l; struct coff_section_tdata *sec_data; - bfd_size_type amt; + size_t amt; /* Before looking through the symbol table, try to use a .stab section to find the information. */ @@ -2464,11 +2435,15 @@ /* In XCOFF a debugging symbol can follow the function symbol. */ - if (s->u.syment.n_scnum == N_DEBUG) + if (((size_t) ((char *) s - (char *) obj_raw_syments (abfd)) + < obj_raw_syment_count (abfd) * sizeof (*s)) + && s->u.syment.n_scnum == N_DEBUG) s = s + 1 + s->u.syment.n_numaux; /* S should now point to the .bf of the function. */ - if (s->u.syment.n_numaux) + if (((size_t) ((char *) s - (char *) obj_raw_syments (abfd)) + < obj_raw_syment_count (abfd) * sizeof (*s)) + && s->u.syment.n_numaux) { /* The linenumber is stored in the auxent. */ union internal_auxent *a = &((s + 1)->u.auxent); @@ -2589,7 +2564,7 @@ coff_write_alien_symbol(). */ combined_entry_type * native; - bfd_size_type amt = sizeof (* native); + size_t amt = sizeof (* native); native = (combined_entry_type *) bfd_zalloc (abfd, amt); if (native == NULL) @@ -2687,7 +2662,8 @@ .gnu.linkonce.*.. */ if (((s_comdat != NULL) == (l_comdat != NULL) && strcmp (name, l->sec->name) == 0) - || (l->sec->owner->flags & BFD_PLUGIN) != 0) + || (l->sec->owner->flags & BFD_PLUGIN) != 0 + || (sec->owner->flags & BFD_PLUGIN) != 0) { /* The section has already been linked. See if we should issue a warning. */ @@ -3161,3 +3137,26 @@ return ci->name; return NULL; } + +bfd_boolean +_bfd_coff_close_and_cleanup (bfd *abfd) +{ + struct coff_tdata *tdata = coff_data (abfd); + + if (tdata != NULL) + { + /* PR 25447: + Do not clear the keep_syms and keep_strings flags. + These may have been set by pe_ILF_build_a_bfd() indicating + that the syms and strings pointers are not to be freed. */ + if (bfd_get_format (abfd) == bfd_object + && bfd_family_coff (abfd) + && !_bfd_coff_free_symbols (abfd)) + return FALSE; + + if (bfd_get_format (abfd) == bfd_object + || bfd_get_format (abfd) == bfd_core) + _bfd_dwarf2_cleanup_debug_info (abfd, &tdata->dwarf2_find_line_info); + } + return _bfd_generic_close_and_cleanup (abfd); +} diff -Nru gdb-9.1/bfd/coff-go32.c gdb-10.2/bfd/coff-go32.c --- gdb-9.1/bfd/coff-go32.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/coff-go32.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD back-end for Intel 386 COFF files (DJGPP variant). - Copyright (C) 1990-2019 Free Software Foundation, Inc. + Copyright (C) 1990-2020 Free Software Foundation, Inc. Written by DJ Delorie. This file is part of BFD, the Binary File Descriptor library. @@ -22,6 +22,7 @@ #define TARGET_SYM i386_coff_go32_vec #define TARGET_NAME "coff-go32" #define TARGET_UNDERSCORE '_' +#define COFF_GO32 #define COFF_LONG_SECTION_NAMES #define COFF_SUPPORT_GNU_LINKONCE #define COFF_LONG_FILENAMES @@ -42,4 +43,137 @@ { COFF_SECTION_NAME_PARTIAL_MATCH (".gnu.linkonce.wi"), \ COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 0 } +/* Section contains extended relocations. */ +#define IMAGE_SCN_LNK_NRELOC_OVFL (0x01000000) + +#include "sysdep.h" +#include "bfd.h" + +/* The following functions are not static, because they are also + used for coff-go32-exe (coff-stgo32.c). */ +bfd_boolean _bfd_go32_mkobject (bfd *); +void _bfd_go32_swap_scnhdr_in (bfd *, void *, void *); +unsigned int _bfd_go32_swap_scnhdr_out (bfd *, void *, void *); + +#define coff_mkobject _bfd_go32_mkobject +#define coff_SWAP_scnhdr_in _bfd_go32_swap_scnhdr_in +#define coff_SWAP_scnhdr_out _bfd_go32_swap_scnhdr_out + #include "coff-i386.c" + +bfd_boolean +_bfd_go32_mkobject (bfd * abfd) +{ + const bfd_size_type amt = sizeof (coff_data_type); + + abfd->tdata.coff_obj_data = bfd_zalloc (abfd, amt); + if (abfd->tdata.coff_obj_data == NULL) + return FALSE; + + coff_data (abfd)->go32 = TRUE; + + return TRUE; +} + +void +_bfd_go32_swap_scnhdr_in (bfd * abfd, void * ext, void * in) +{ + SCNHDR *scnhdr_ext = (SCNHDR *) ext; + struct internal_scnhdr *scnhdr_int = (struct internal_scnhdr *) in; + + memcpy (scnhdr_int->s_name, scnhdr_ext->s_name, sizeof (scnhdr_int->s_name)); + + scnhdr_int->s_vaddr = GET_SCNHDR_VADDR (abfd, scnhdr_ext->s_vaddr); + scnhdr_int->s_paddr = GET_SCNHDR_PADDR (abfd, scnhdr_ext->s_paddr); + scnhdr_int->s_size = GET_SCNHDR_SIZE (abfd, scnhdr_ext->s_size); + + scnhdr_int->s_scnptr = GET_SCNHDR_SCNPTR (abfd, scnhdr_ext->s_scnptr); + scnhdr_int->s_relptr = GET_SCNHDR_RELPTR (abfd, scnhdr_ext->s_relptr); + scnhdr_int->s_lnnoptr = GET_SCNHDR_LNNOPTR (abfd, scnhdr_ext->s_lnnoptr); + scnhdr_int->s_flags = GET_SCNHDR_FLAGS (abfd, scnhdr_ext->s_flags); + scnhdr_int->s_nreloc = GET_SCNHDR_NRELOC (abfd, scnhdr_ext->s_nreloc); + scnhdr_int->s_nlnno = GET_SCNHDR_NLNNO (abfd, scnhdr_ext->s_nlnno); + + /* DJGPP follows the same strategy as PE COFF. + Iff the file is an executable then the higher 16 bits + of the line number have been stored in the relocation + counter field. */ + if (abfd->flags & EXEC_P && (strcmp (scnhdr_ext->s_name, ".text") == 0)) + { + scnhdr_int->s_nlnno + = (GET_SCNHDR_NRELOC (abfd, scnhdr_ext->s_nreloc) << 16) + + GET_SCNHDR_NLNNO (abfd, scnhdr_ext->s_nlnno); + scnhdr_int->s_nreloc = 0; + } +} + +unsigned int +_bfd_go32_swap_scnhdr_out (bfd * abfd, void * in, void * out) +{ + struct internal_scnhdr *scnhdr_int = (struct internal_scnhdr *) in; + SCNHDR *scnhdr_ext = (SCNHDR *) out; + unsigned int ret = bfd_coff_scnhsz (abfd); + + memcpy (scnhdr_ext->s_name, scnhdr_int->s_name, sizeof (scnhdr_int->s_name)); + + PUT_SCNHDR_VADDR (abfd, scnhdr_int->s_vaddr, scnhdr_ext->s_vaddr); + PUT_SCNHDR_PADDR (abfd, scnhdr_int->s_paddr, scnhdr_ext->s_paddr); + PUT_SCNHDR_SIZE (abfd, scnhdr_int->s_size, scnhdr_ext->s_size); + PUT_SCNHDR_SCNPTR (abfd, scnhdr_int->s_scnptr, scnhdr_ext->s_scnptr); + PUT_SCNHDR_RELPTR (abfd, scnhdr_int->s_relptr, scnhdr_ext->s_relptr); + PUT_SCNHDR_LNNOPTR (abfd, scnhdr_int->s_lnnoptr, scnhdr_ext->s_lnnoptr); + PUT_SCNHDR_FLAGS (abfd, scnhdr_int->s_flags, scnhdr_ext->s_flags); + + if (abfd->flags & EXEC_P && (strcmp (scnhdr_int->s_name, ".text") == 0)) + { + /* DJGPP follows the same strategy as PE COFF. + By inference from looking at MS output, the 32 bit field + which is the combination of the number_of_relocs and + number_of_linenos is used for the line number count in + executables. A 16-bit field won't do for cc1. The MS + document says that the number of relocs is zero for + executables, but the 17-th bit has been observed to be there. + Overflow is not an issue: a 4G-line program will overflow a + bunch of other fields long before this! */ + PUT_SCNHDR_NLNNO (abfd, (scnhdr_int->s_nlnno & 0xffff), + scnhdr_ext->s_nlnno); + PUT_SCNHDR_NRELOC (abfd, (scnhdr_int->s_nlnno >> 16), + scnhdr_ext->s_nreloc); + } + else + { + /* DJGPP follows the same strategy as PE COFF. */ + if (scnhdr_int->s_nlnno <= MAX_SCNHDR_NLNNO) + PUT_SCNHDR_NLNNO (abfd, scnhdr_int->s_nlnno, scnhdr_ext->s_nlnno); + else + { + char buf[sizeof (scnhdr_int->s_name) + 1]; + + memcpy (buf, scnhdr_int->s_name, sizeof (scnhdr_int->s_name)); + buf[sizeof (scnhdr_int->s_name)] = '\0'; + _bfd_error_handler + /* xgettext:c-format */ + (_("%pB: warning: %s: line number overflow: 0x%lx > 0xffff"), + abfd, buf, scnhdr_int->s_nlnno); + bfd_set_error (bfd_error_file_truncated); + PUT_SCNHDR_NLNNO (abfd, 0xffff, scnhdr_ext->s_nlnno); + ret = 0; + } + + /* Although we could encode 0xffff relocs here, we do not, to be + consistent with other parts of bfd. Also it lets us warn, as + we should never see 0xffff here w/o having the overflow flag + set. */ + if (scnhdr_int->s_nreloc < MAX_SCNHDR_NRELOC) + PUT_SCNHDR_NRELOC (abfd, scnhdr_int->s_nreloc, scnhdr_ext->s_nreloc); + else + { + /* DJGPP can deal with large #s of relocs, but not here. */ + PUT_SCNHDR_NRELOC (abfd, 0xffff, scnhdr_ext->s_nreloc); + scnhdr_int->s_flags |= IMAGE_SCN_LNK_NRELOC_OVFL; + PUT_SCNHDR_FLAGS (abfd, scnhdr_int->s_flags, scnhdr_ext->s_flags); + } + } + + return ret; +} diff -Nru gdb-9.1/bfd/coff-i386.c gdb-10.2/bfd/coff-i386.c --- gdb-9.1/bfd/coff-i386.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/coff-i386.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD back-end for Intel 386 COFF files. - Copyright (C) 1990-2019 Free Software Foundation, Inc. + Copyright (C) 1990-2020 Free Software Foundation, Inc. Written by Cygnus Support. This file is part of BFD, the Binary File Descriptor library. @@ -31,10 +31,6 @@ #include "coff/pe.h" #endif -#ifdef COFF_GO32_EXE -#include "coff/go32exe.h" -#endif - #ifndef bfd_pe_print_pdata #define bfd_pe_print_pdata NULL #endif @@ -663,23 +659,92 @@ bfd_getl32, bfd_getl_signed_32, bfd_putl32, bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* hdrs */ +#ifndef COFF_CHECK_FORMAT +#define COFF_CHECK_FORMAT coff_object_p +#endif +#ifndef COFF_WRITE_CONTENTS +#define COFF_WRITE_CONTENTS coff_write_object_contents +#endif + /* Note that we allow an object file to be treated as a core file as well. */ -#ifdef COFF_CHECK_FORMAT { /* bfd_check_format */ _bfd_dummy_target, COFF_CHECK_FORMAT, bfd_generic_archive_p, COFF_CHECK_FORMAT }, + { /* bfd_set_format */ + _bfd_bool_bfd_false_error, + coff_mkobject, + _bfd_generic_mkarchive, + _bfd_bool_bfd_false_error + }, + { /* bfd_write_contents */ + _bfd_bool_bfd_false_error, + COFF_WRITE_CONTENTS, + _bfd_write_archive_contents, + _bfd_bool_bfd_false_error + }, + + BFD_JUMP_TABLE_GENERIC (coff), + BFD_JUMP_TABLE_COPY (coff), + BFD_JUMP_TABLE_CORE (_bfd_nocore), + BFD_JUMP_TABLE_ARCHIVE (_bfd_archive_coff), + BFD_JUMP_TABLE_SYMBOLS (coff), + BFD_JUMP_TABLE_RELOCS (coff), + BFD_JUMP_TABLE_WRITE (coff), + BFD_JUMP_TABLE_LINK (coff), + BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic), + + NULL, + + COFF_SWAP_TABLE +}; + +#ifdef COFF_WITH_PE_BIGOBJ +const bfd_target + TARGET_SYM_BIG = +{ + TARGET_NAME_BIG, + bfd_target_coff_flavour, + BFD_ENDIAN_LITTLE, /* data byte order is little */ + BFD_ENDIAN_LITTLE, /* header byte order is little */ + + (HAS_RELOC | EXEC_P | /* object flags */ + HAS_LINENO | HAS_DEBUG | + HAS_SYMS | HAS_LOCALS | WP_TEXT | D_PAGED | BFD_COMPRESS | BFD_DECOMPRESS ), + + (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC /* section flags */ +#ifdef COFF_WITH_PE + | SEC_LINK_ONCE | SEC_LINK_DUPLICATES | SEC_READONLY | SEC_DEBUGGING +#endif + | SEC_CODE | SEC_DATA | SEC_EXCLUDE ), + +#ifdef TARGET_UNDERSCORE + TARGET_UNDERSCORE, /* leading underscore */ #else - { + 0, /* leading underscore */ +#endif + '/', /* ar_pad_char */ + 15, /* ar_max_namelen */ + 0, /* match priority. */ + + bfd_getl64, bfd_getl_signed_64, bfd_putl64, + bfd_getl32, bfd_getl_signed_32, bfd_putl32, + bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* data */ + bfd_getl64, bfd_getl_signed_64, bfd_putl64, + bfd_getl32, bfd_getl_signed_32, bfd_putl32, + bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* hdrs */ + +/* Note that we allow an object file to be treated as a core file as well. */ + + { /* bfd_check_format */ _bfd_dummy_target, - coff_object_p, + COFF_CHECK_FORMAT, bfd_generic_archive_p, - coff_object_p + COFF_CHECK_FORMAT }, -#endif { /* bfd_set_format */ _bfd_bool_bfd_false_error, coff_mkobject, @@ -688,7 +753,7 @@ }, { /* bfd_write_contents */ _bfd_bool_bfd_false_error, - coff_write_object_contents, + COFF_WRITE_CONTENTS, _bfd_write_archive_contents, _bfd_bool_bfd_false_error }, @@ -705,5 +770,6 @@ NULL, - COFF_SWAP_TABLE + &bigobj_swap_table }; +#endif \ No newline at end of file diff -Nru gdb-9.1/bfd/coff-ia64.c gdb-10.2/bfd/coff-ia64.c --- gdb-9.1/bfd/coff-ia64.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/coff-ia64.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD back-end for HP/Intel IA-64 COFF files. - Copyright (C) 1999-2019 Free Software Foundation, Inc. + Copyright (C) 1999-2020 Free Software Foundation, Inc. Contributed by David Mosberger This file is part of BFD, the Binary File Descriptor library. @@ -67,7 +67,7 @@ #include "coffcode.h" -static const bfd_target * +static bfd_cleanup ia64coff_object_p (bfd *abfd) { #ifdef COFF_IMAGE_WITH_PE diff -Nru gdb-9.1/bfd/cofflink.c gdb-10.2/bfd/cofflink.c --- gdb-9.1/bfd/cofflink.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cofflink.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* COFF specific linker code. - Copyright (C) 1994-2019 Free Software Foundation, Inc. + Copyright (C) 1994-2020 Free Software Foundation, Inc. Written by Ian Lance Taylor, Cygnus Support. This file is part of BFD, the Binary File Descriptor library. @@ -109,7 +109,7 @@ _bfd_coff_link_hash_table_create (bfd *abfd) { struct coff_link_hash_table *ret; - bfd_size_type amt = sizeof (struct coff_link_hash_table); + size_t amt = sizeof (struct coff_link_hash_table); ret = (struct coff_link_hash_table *) bfd_malloc (amt); if (ret == NULL) @@ -206,14 +206,20 @@ { *pneeded = FALSE; + /* PR 22369 - Skip non COFF objects in the archive. */ + if (! bfd_family_coff (abfd)) + return TRUE; + /* We are only interested in symbols that are currently undefined. If a symbol is currently known to be common, COFF linkers do not bring in an object file which defines it. */ if (h->type != bfd_link_hash_undefined) return TRUE; - /* PR 22369 - Skip non COFF objects in the archive. */ - if (! bfd_family_coff (abfd)) + /* If the archive element has already been loaded then one + of the symbols defined by that element might have been + made undefined due to being in a discarded section. */ + if (((struct coff_link_hash_entry *) h)->indx == -3) return TRUE; /* Include this element? */ @@ -286,6 +292,7 @@ asection *section; bfd_vma value; bfd_boolean addit; + bfd_boolean discarded = FALSE; /* This symbol is externally visible. */ @@ -311,7 +318,10 @@ flags = BSF_EXPORT | BSF_GLOBAL; section = coff_section_from_bfd_index (abfd, sym.n_scnum); if (discarded_section (section)) - section = bfd_und_section_ptr; + { + discarded = TRUE; + section = bfd_und_section_ptr; + } else if (! obj_pe (abfd)) value -= section->vma; break; @@ -408,6 +418,9 @@ (const char *) NULL, copy, FALSE, (struct bfd_link_hash_entry **) sym_hash))) goto error_return; + + if (discarded) + (*sym_hash)->indx = -3; } if (obj_pe (abfd) && (flags & BSF_SECTION_SYM) != 0) @@ -689,7 +702,7 @@ rel_filepos += o->reloc_count * relsz; /* In PE COFF, if there are at least 0xffff relocations an extra relocation will be written out to encode the count. */ - if (obj_pe (abfd) && o->reloc_count >= 0xffff) + if ((obj_pe (abfd) || obj_go32 (abfd)) && o->reloc_count >= 0xffff) rel_filepos += relsz; } @@ -993,41 +1006,20 @@ coff_debug_merge_hash_table_free (&flaginfo.debug_merge); debug_merge_allocated = FALSE; - if (flaginfo.internal_syms != NULL) - { - free (flaginfo.internal_syms); - flaginfo.internal_syms = NULL; - } - if (flaginfo.sec_ptrs != NULL) - { - free (flaginfo.sec_ptrs); - flaginfo.sec_ptrs = NULL; - } - if (flaginfo.sym_indices != NULL) - { - free (flaginfo.sym_indices); - flaginfo.sym_indices = NULL; - } - if (flaginfo.linenos != NULL) - { - free (flaginfo.linenos); - flaginfo.linenos = NULL; - } - if (flaginfo.contents != NULL) - { - free (flaginfo.contents); - flaginfo.contents = NULL; - } - if (flaginfo.external_relocs != NULL) - { - free (flaginfo.external_relocs); - flaginfo.external_relocs = NULL; - } - if (flaginfo.internal_relocs != NULL) - { - free (flaginfo.internal_relocs); - flaginfo.internal_relocs = NULL; - } + free (flaginfo.internal_syms); + flaginfo.internal_syms = NULL; + free (flaginfo.sec_ptrs); + flaginfo.sec_ptrs = NULL; + free (flaginfo.sym_indices); + flaginfo.sym_indices = NULL; + free (flaginfo.linenos); + flaginfo.linenos = NULL; + free (flaginfo.contents); + flaginfo.contents = NULL; + free (flaginfo.external_relocs); + flaginfo.external_relocs = NULL; + free (flaginfo.internal_relocs); + flaginfo.internal_relocs = NULL; /* The value of the last C_FILE symbol is supposed to be the symbol index of the first external symbol. Write it out again if @@ -1066,11 +1058,8 @@ goto error_return; /* The outsyms buffer is used by _bfd_coff_write_global_sym. */ - if (flaginfo.outsyms != NULL) - { - free (flaginfo.outsyms); - flaginfo.outsyms = NULL; - } + free (flaginfo.outsyms); + flaginfo.outsyms = NULL; if (bfd_link_relocatable (info) && max_output_reloc_count > 0) { @@ -1108,7 +1097,7 @@ if (bfd_seek (abfd, o->rel_filepos, SEEK_SET) != 0) goto error_return; - if (obj_pe (abfd) && o->reloc_count >= 0xffff) + if ((obj_pe (abfd) || obj_go32 (abfd)) && o->reloc_count >= 0xffff) { /* In PE COFF, write the count of relocs as the first reloc. The header overflow bit will be set @@ -1141,10 +1130,8 @@ for (i = 0; i < abfd->section_count; i++) { - if (flaginfo.section_info[i].relocs != NULL) - free (flaginfo.section_info[i].relocs); - if (flaginfo.section_info[i].rel_hashes != NULL) - free (flaginfo.section_info[i].rel_hashes); + free (flaginfo.section_info[i].relocs); + free (flaginfo.section_info[i].rel_hashes); } free (flaginfo.section_info); flaginfo.section_info = NULL; @@ -1203,31 +1190,20 @@ for (i = 0; i < abfd->section_count; i++) { - if (flaginfo.section_info[i].relocs != NULL) - free (flaginfo.section_info[i].relocs); - if (flaginfo.section_info[i].rel_hashes != NULL) - free (flaginfo.section_info[i].rel_hashes); + free (flaginfo.section_info[i].relocs); + free (flaginfo.section_info[i].rel_hashes); } free (flaginfo.section_info); } - if (flaginfo.internal_syms != NULL) - free (flaginfo.internal_syms); - if (flaginfo.sec_ptrs != NULL) - free (flaginfo.sec_ptrs); - if (flaginfo.sym_indices != NULL) - free (flaginfo.sym_indices); - if (flaginfo.outsyms != NULL) - free (flaginfo.outsyms); - if (flaginfo.linenos != NULL) - free (flaginfo.linenos); - if (flaginfo.contents != NULL) - free (flaginfo.contents); - if (flaginfo.external_relocs != NULL) - free (flaginfo.external_relocs); - if (flaginfo.internal_relocs != NULL) - free (flaginfo.internal_relocs); - if (external_relocs != NULL) - free (external_relocs); + free (flaginfo.internal_syms); + free (flaginfo.sec_ptrs); + free (flaginfo.sym_indices); + free (flaginfo.outsyms); + free (flaginfo.linenos); + free (flaginfo.contents); + free (flaginfo.external_relocs); + free (flaginfo.internal_relocs); + free (external_relocs); return FALSE; } @@ -1286,8 +1262,7 @@ if (!bfd_malloc_and_get_section (abfd, sec, ©)) { - if (copy != NULL) - free (copy); + free (copy); return 0; } e = (char *) copy + sec->size; @@ -1647,7 +1622,7 @@ struct coff_debug_merge_element **epp; bfd_byte *esl, *eslend; struct internal_syment *islp; - bfd_size_type amt; + size_t amt; name = _bfd_coff_internal_syment_name (input_bfd, &isym, buf); if (name == NULL) @@ -2605,6 +2580,9 @@ return FALSE; case bfd_link_hash_undefined: + if (h->indx == -3) + return TRUE; + /* Fall through. */ case bfd_link_hash_undefweak: isym.n_scnum = N_UNDEF; isym.n_value = 0; @@ -3075,9 +3053,15 @@ } else if (! bfd_link_relocatable (info)) - (*info->callbacks->undefined_symbol) - (info, h->root.root.string, input_bfd, input_section, - rel->r_vaddr - input_section->vma, TRUE); + { + (*info->callbacks->undefined_symbol) + (info, h->root.root.string, input_bfd, input_section, + rel->r_vaddr - input_section->vma, TRUE); + /* Stop the linker from issueing errors about truncated relocs + referencing this undefined symbol by giving it an address + that should be in range. */ + val = input_section->output_section->vma; + } } /* If the input section defining the symbol has been discarded diff -Nru gdb-9.1/bfd/coff-mcore.c gdb-10.2/bfd/coff-mcore.c --- gdb-9.1/bfd/coff-mcore.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/coff-mcore.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD back-end for Motorola MCore COFF/PE - Copyright (C) 1999-2019 Free Software Foundation, Inc. + Copyright (C) 1999-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/coff-mips.c gdb-10.2/bfd/coff-mips.c --- gdb-9.1/bfd/coff-mips.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/coff-mips.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD back-end for MIPS Extended-Coff files. - Copyright (C) 1990-2019 Free Software Foundation, Inc. + Copyright (C) 1990-2020 Free Software Foundation, Inc. Original version by Per Bothner. Full support added by Ian Lance Taylor, ian@cygnus.com. @@ -1440,7 +1440,8 @@ | HAS_LINENO | HAS_DEBUG | HAS_SYMS | HAS_LOCALS | WP_TEXT | D_PAGED), - (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC | SEC_CODE | SEC_DATA), + (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC | SEC_CODE + | SEC_DATA | SEC_SMALL_DATA), 0, /* leading underscore */ ' ', /* ar_pad_char */ 15, /* ar_max_namelen */ @@ -1497,7 +1498,8 @@ | HAS_LINENO | HAS_DEBUG | HAS_SYMS | HAS_LOCALS | WP_TEXT | D_PAGED), - (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC | SEC_CODE | SEC_DATA), + (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC | SEC_CODE + | SEC_DATA | SEC_SMALL_DATA), 0, /* leading underscore */ ' ', /* ar_pad_char */ 15, /* ar_max_namelen */ @@ -1554,7 +1556,8 @@ | HAS_LINENO | HAS_DEBUG | HAS_SYMS | HAS_LOCALS | WP_TEXT | D_PAGED), - (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC | SEC_CODE | SEC_DATA), + (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC | SEC_CODE + | SEC_DATA | SEC_SMALL_DATA), 0, /* leading underscore */ ' ', /* ar_pad_char */ 15, /* ar_max_namelen */ diff -Nru gdb-9.1/bfd/coff-ppc.c gdb-10.2/bfd/coff-ppc.c --- gdb-9.1/bfd/coff-ppc.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/coff-ppc.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,2621 +0,0 @@ -/* BFD back-end for PowerPC Microsoft Portable Executable files. - Copyright (C) 1990-2019 Free Software Foundation, Inc. - - Original version pieced together by Kim Knuttila (krk@cygnus.com) - - There is nothing new under the sun. This file draws a lot on other - coff files, in particular, those for the rs/6000, alpha, mips, and - intel backends, and the PE work for the arm. - - This file is part of BFD, the Binary File Descriptor library. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, 51 Franklin Street - Fifth Floor, - Boston, MA 02110-1301, USA. */ - -/* Current State: - - objdump works - - relocs generated by gas - - ld will link files, but they do not run. - - dlltool will not produce correct output in some .reloc cases, and will - not produce the right glue code for dll function calls. */ - -#include "sysdep.h" -#include "bfd.h" -#include "libbfd.h" - -#include "coff/powerpc.h" -#include "coff/internal.h" - -#include "coff/pe.h" - -#ifdef BADMAG -#undef BADMAG -#endif - -#define BADMAG(x) PPCBADMAG(x) - -#include "libcoff.h" - -/* This file is compiled more than once, but we only compile the - final_link routine once. */ -extern bfd_boolean ppc_bfd_coff_final_link (bfd *, struct bfd_link_info *); -extern void dump_toc (void *); - -/* The toc is a set of bfd_vma fields. We use the fact that valid - addresses are even (i.e. the bit representing "1" is off) to allow - us to encode a little extra information in the field - - Unallocated addresses are initialized to 1. - - Allocated addresses are even numbers. - The first time we actually write a reference to the toc in the bfd, - we want to record that fact in a fixup file (if it is asked for), so - we keep track of whether or not an address has been written by marking - the low order bit with a "1" upon writing. */ - -#define SET_UNALLOCATED(x) ((x) = 1) -#define IS_UNALLOCATED(x) ((x) == 1) - -#define IS_WRITTEN(x) ((x) & 1) -#define MARK_AS_WRITTEN(x) ((x) |= 1) -#define MAKE_ADDR_AGAIN(x) ((x) &= ~1) - -/* Turn on this check if you suspect something amiss in the hash tables. */ -#ifdef DEBUG_HASH - -/* Need a 7 char string for an eye catcher. */ -#define EYE "krkjunk" - -#define HASH_CHECK_DCL char eye_catcher[8]; -#define HASH_CHECK_INIT(ret) strcpy(ret->eye_catcher, EYE) -#define HASH_CHECK(addr) \ - if (strcmp (addr->eye_catcher, EYE) != 0) \ - { \ - fprintf (stderr,\ - /* xgettext: c-format */ \ - _("File %s, line %d, Hash check failure, bad eye %8s\n"), \ - __FILE__, __LINE__, addr->eye_catcher); \ - abort (); \ - } - -#else - -#define HASH_CHECK_DCL -#define HASH_CHECK_INIT(ret) -#define HASH_CHECK(addr) - -#endif - -/* In order not to add an int to every hash table item for every coff - linker, we define our own hash table, derived from the coff one. */ - -/* PE linker hash table entries. */ - -struct ppc_coff_link_hash_entry -{ - struct coff_link_hash_entry root; /* First entry, as required. */ - - /* As we wonder around the relocs, we'll keep the assigned toc_offset - here. */ - bfd_vma toc_offset; /* Our addition, as required. */ - int symbol_is_glue; - unsigned long int glue_insn; - - HASH_CHECK_DCL -}; - -/* PE linker hash table. */ - -struct ppc_coff_link_hash_table -{ - struct coff_link_hash_table root; /* First entry, as required. */ -}; - -/* Routine to create an entry in the link hash table. */ - -static struct bfd_hash_entry * -ppc_coff_link_hash_newfunc (struct bfd_hash_entry * entry, - struct bfd_hash_table * table, - const char * string) -{ - struct ppc_coff_link_hash_entry *ret = - (struct ppc_coff_link_hash_entry *) entry; - - /* Allocate the structure if it has not already been allocated by a - subclass. */ - if (ret == (struct ppc_coff_link_hash_entry *) NULL) - ret = (struct ppc_coff_link_hash_entry *) - bfd_hash_allocate (table, - sizeof (struct ppc_coff_link_hash_entry)); - - if (ret == (struct ppc_coff_link_hash_entry *) NULL) - return NULL; - - /* Call the allocation method of the superclass. */ - ret = ((struct ppc_coff_link_hash_entry *) - _bfd_coff_link_hash_newfunc ((struct bfd_hash_entry *) ret, - table, string)); - - if (ret) - { - /* Initialize the local fields. */ - SET_UNALLOCATED (ret->toc_offset); - ret->symbol_is_glue = 0; - ret->glue_insn = 0; - - HASH_CHECK_INIT (ret); - } - - return (struct bfd_hash_entry *) ret; -} - -/* Initialize a PE linker hash table. */ - -static bfd_boolean -ppc_coff_link_hash_table_init (struct ppc_coff_link_hash_table *table, - bfd *abfd, - struct bfd_hash_entry *(*newfunc) - (struct bfd_hash_entry *, - struct bfd_hash_table *, - const char *), - unsigned int entsize) -{ - return _bfd_coff_link_hash_table_init (&table->root, abfd, newfunc, entsize); -} - -/* Create a PE linker hash table. */ - -static struct bfd_link_hash_table * -ppc_coff_link_hash_table_create (bfd *abfd) -{ - struct ppc_coff_link_hash_table *ret; - bfd_size_type amt = sizeof (struct ppc_coff_link_hash_table); - - ret = (struct ppc_coff_link_hash_table *) bfd_malloc (amt); - if (ret == NULL) - return NULL; - if (!ppc_coff_link_hash_table_init (ret, abfd, - ppc_coff_link_hash_newfunc, - sizeof (struct ppc_coff_link_hash_entry))) - { - free (ret); - return (struct bfd_link_hash_table *) NULL; - } - return &ret->root.root; -} - -/* Now, tailor coffcode.h to use our hash stuff. */ - -#define coff_bfd_link_hash_table_create ppc_coff_link_hash_table_create - -/* The nt loader points the toc register to &toc + 32768, in order to - use the complete range of a 16-bit displacement. We have to adjust - for this when we fix up loads displaced off the toc reg. */ -#define TOC_LOAD_ADJUSTMENT (-32768) -#define TOC_SECTION_NAME ".private.toc" - -/* The main body of code is in coffcode.h. */ - -#define COFF_DEFAULT_SECTION_ALIGNMENT_POWER (3) - -/* In case we're on a 32-bit machine, construct a 64-bit "-1" value - from smaller values. Start with zero, widen, *then* decrement. */ -#define MINUS_ONE (((bfd_vma)0) - 1) - -/* These should definitely go in a header file somewhere... */ - -/* NOP */ -#define IMAGE_REL_PPC_ABSOLUTE 0x0000 - -/* 64-bit address */ -#define IMAGE_REL_PPC_ADDR64 0x0001 - -/* 32-bit address */ -#define IMAGE_REL_PPC_ADDR32 0x0002 - -/* 26-bit address, shifted left 2 (branch absolute) */ -#define IMAGE_REL_PPC_ADDR24 0x0003 - -/* 16-bit address */ -#define IMAGE_REL_PPC_ADDR16 0x0004 - -/* 16-bit address, shifted left 2 (load doubleword) */ -#define IMAGE_REL_PPC_ADDR14 0x0005 - -/* 26-bit PC-relative offset, shifted left 2 (branch relative) */ -#define IMAGE_REL_PPC_REL24 0x0006 - -/* 16-bit PC-relative offset, shifted left 2 (br cond relative) */ -#define IMAGE_REL_PPC_REL14 0x0007 - -/* 16-bit offset from TOC base */ -#define IMAGE_REL_PPC_TOCREL16 0x0008 - -/* 16-bit offset from TOC base, shifted left 2 (load doubleword) */ -#define IMAGE_REL_PPC_TOCREL14 0x0009 - -/* 32-bit addr w/o image base */ -#define IMAGE_REL_PPC_ADDR32NB 0x000A - -/* va of containing section (as in an image sectionhdr) */ -#define IMAGE_REL_PPC_SECREL 0x000B - -/* sectionheader number */ -#define IMAGE_REL_PPC_SECTION 0x000C - -/* substitute TOC restore instruction iff symbol is glue code */ -#define IMAGE_REL_PPC_IFGLUE 0x000D - -/* symbol is glue code; virtual address is TOC restore instruction */ -#define IMAGE_REL_PPC_IMGLUE 0x000E - -/* va of containing section (limited to 16 bits) */ -#define IMAGE_REL_PPC_SECREL16 0x000F - -/* Stuff to handle immediate data when the number of bits in the - data is greater than the number of bits in the immediate field - We need to do (usually) 32 bit arithmetic on 16 bit chunks. */ -#define IMAGE_REL_PPC_REFHI 0x0010 -#define IMAGE_REL_PPC_REFLO 0x0011 -#define IMAGE_REL_PPC_PAIR 0x0012 - -/* This is essentially the same as tocrel16, with TOCDEFN assumed. */ -#define IMAGE_REL_PPC_TOCREL16_DEFN 0x0013 - -/* Flag bits in IMAGE_RELOCATION.TYPE. */ - -/* Subtract reloc value rather than adding it. */ -#define IMAGE_REL_PPC_NEG 0x0100 - -/* Fix branch prediction bit to predict branch taken. */ -#define IMAGE_REL_PPC_BRTAKEN 0x0200 - -/* Fix branch prediction bit to predict branch not taken. */ -#define IMAGE_REL_PPC_BRNTAKEN 0x0400 - -/* TOC slot defined in file (or, data in toc). */ -#define IMAGE_REL_PPC_TOCDEFN 0x0800 - -/* Masks to isolate above values in IMAGE_RELOCATION.Type. */ -#define IMAGE_REL_PPC_TYPEMASK 0x00FF -#define IMAGE_REL_PPC_FLAGMASK 0x0F00 - -#define EXTRACT_TYPE(x) ((x) & IMAGE_REL_PPC_TYPEMASK) -#define EXTRACT_FLAGS(x) ((x) & IMAGE_REL_PPC_FLAGMASK) -#define EXTRACT_JUNK(x) \ - ((x) & ~(IMAGE_REL_PPC_TYPEMASK | IMAGE_REL_PPC_FLAGMASK)) - -/* Static helper functions to make relocation work. */ -/* (Work In Progress) */ - -static bfd_reloc_status_type ppc_refhi_reloc - (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **); -static bfd_reloc_status_type ppc_pair_reloc - (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **); -static bfd_reloc_status_type ppc_toc16_reloc - (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **); -static bfd_reloc_status_type ppc_section_reloc - (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **); -static bfd_reloc_status_type ppc_secrel_reloc - (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **); -static bfd_reloc_status_type ppc_imglue_reloc - (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **); - -/* FIXME: It'll take a while to get through all of these. I only need a few to - get us started, so those I'll make sure work. Those marked FIXME are either - completely unverified or have a specific unknown marked in the comment. */ - -/* Relocation entries for Windows/NT on PowerPC. - - From the document "" we find the following listed as used relocs: - - ABSOLUTE : The noop - ADDR[64|32|16] : fields that hold addresses in data fields or the - 16 bit displacement field on a load/store. - ADDR[24|14] : fields that hold addresses in branch and cond - branches. These represent [26|16] bit addresses. - The low order 2 bits are preserved. - REL[24|14] : branches relative to the Instruction Address - register. These represent [26|16] bit addresses, - as before. The instruction field will be zero, and - the address of the SYM will be inserted at link time. - TOCREL16 : 16 bit displacement field referring to a slot in - toc. - TOCREL14 : 16 bit displacement field, similar to REL14 or ADDR14. - ADDR32NB : 32 bit address relative to the virtual origin. - (On the alpha, this is always a linker generated thunk) - (i.e. 32bit addr relative to the image base) - SECREL : The value is relative to the start of the section - containing the symbol. - SECTION : access to the header containing the item. Supports the - codeview debugger. - - In particular, note that the document does not indicate that the - relocations listed in the header file are used. */ - - -static reloc_howto_type ppc_coff_howto_table[] = -{ - /* IMAGE_REL_PPC_ABSOLUTE 0x0000 NOP */ - /* Unused: */ - HOWTO (IMAGE_REL_PPC_ABSOLUTE, /* type */ - 0, /* rightshift */ - 0, /* size (0 = byte, 1 = short, 2 = long) */ - 0, /* bitsize */ - FALSE, /* pc_relative */ - 0, /* bitpos */ - complain_overflow_dont, /* dont complain_on_overflow */ - 0, /* special_function */ - "ABSOLUTE", /* name */ - FALSE, /* partial_inplace */ - 0x00, /* src_mask */ - 0x00, /* dst_mask */ - FALSE), /* pcrel_offset */ - - /* IMAGE_REL_PPC_ADDR64 0x0001 64-bit address */ - /* Unused: */ - HOWTO(IMAGE_REL_PPC_ADDR64, /* type */ - 0, /* rightshift */ - 3, /* size (0 = byte, 1 = short, 2 = long) */ - 64, /* bitsize */ - FALSE, /* pc_relative */ - 0, /* bitpos */ - complain_overflow_bitfield, /* complain_on_overflow */ - 0, /* special_function */ - "ADDR64", /* name */ - TRUE, /* partial_inplace */ - MINUS_ONE, /* src_mask */ - MINUS_ONE, /* dst_mask */ - FALSE), /* pcrel_offset */ - - /* IMAGE_REL_PPC_ADDR32 0x0002 32-bit address */ - /* Used: */ - HOWTO (IMAGE_REL_PPC_ADDR32, /* type */ - 0, /* rightshift */ - 2, /* size (0 = byte, 1 = short, 2 = long) */ - 32, /* bitsize */ - FALSE, /* pc_relative */ - 0, /* bitpos */ - complain_overflow_bitfield, /* complain_on_overflow */ - 0, /* special_function */ - "ADDR32", /* name */ - TRUE, /* partial_inplace */ - 0xffffffff, /* src_mask */ - 0xffffffff, /* dst_mask */ - FALSE), /* pcrel_offset */ - - /* IMAGE_REL_PPC_ADDR24 0x0003 26-bit address, shifted left 2 (branch absolute) */ - /* the LI field is in bit 6 through bit 29 is 24 bits, + 2 for the shift */ - /* Of course, That's the IBM approved bit numbering, which is not what */ - /* anyone else uses.... The li field is in bit 2 thru 25 */ - /* Used: */ - HOWTO (IMAGE_REL_PPC_ADDR24, /* type */ - 0, /* rightshift */ - 2, /* size (0 = byte, 1 = short, 2 = long) */ - 26, /* bitsize */ - FALSE, /* pc_relative */ - 0, /* bitpos */ - complain_overflow_bitfield, /* complain_on_overflow */ - 0, /* special_function */ - "ADDR24", /* name */ - TRUE, /* partial_inplace */ - 0x07fffffc, /* src_mask */ - 0x07fffffc, /* dst_mask */ - FALSE), /* pcrel_offset */ - - /* IMAGE_REL_PPC_ADDR16 0x0004 16-bit address */ - /* Used: */ - HOWTO (IMAGE_REL_PPC_ADDR16, /* type */ - 0, /* rightshift */ - 1, /* size (0 = byte, 1 = short, 2 = long) */ - 16, /* bitsize */ - FALSE, /* pc_relative */ - 0, /* bitpos */ - complain_overflow_signed, /* complain_on_overflow */ - 0, /* special_function */ - "ADDR16", /* name */ - TRUE, /* partial_inplace */ - 0xffff, /* src_mask */ - 0xffff, /* dst_mask */ - FALSE), /* pcrel_offset */ - - /* IMAGE_REL_PPC_ADDR14 0x0005 */ - /* 16-bit address, shifted left 2 (load doubleword) */ - /* FIXME: the mask is likely wrong, and the bit position may be as well */ - /* Unused: */ - HOWTO (IMAGE_REL_PPC_ADDR14, /* type */ - 1, /* rightshift */ - 1, /* size (0 = byte, 1 = short, 2 = long) */ - 16, /* bitsize */ - FALSE, /* pc_relative */ - 0, /* bitpos */ - complain_overflow_signed, /* complain_on_overflow */ - 0, /* special_function */ - "ADDR16", /* name */ - TRUE, /* partial_inplace */ - 0xffff, /* src_mask */ - 0xffff, /* dst_mask */ - FALSE), /* pcrel_offset */ - - /* IMAGE_REL_PPC_REL24 0x0006 */ - /* 26-bit PC-relative offset, shifted left 2 (branch relative) */ - /* Used: */ - HOWTO (IMAGE_REL_PPC_REL24, /* type */ - 0, /* rightshift */ - 2, /* size (0 = byte, 1 = short, 2 = long) */ - 26, /* bitsize */ - TRUE, /* pc_relative */ - 0, /* bitpos */ - complain_overflow_signed, /* complain_on_overflow */ - 0, /* special_function */ - "REL24", /* name */ - TRUE, /* partial_inplace */ - 0x3fffffc, /* src_mask */ - 0x3fffffc, /* dst_mask */ - FALSE), /* pcrel_offset */ - - /* IMAGE_REL_PPC_REL14 0x0007 */ - /* 16-bit PC-relative offset, shifted left 2 (br cond relative) */ - /* FIXME: the mask is likely wrong, and the bit position may be as well */ - /* FIXME: how does it know how far to shift? */ - /* Unused: */ - HOWTO (IMAGE_REL_PPC_ADDR14, /* type */ - 1, /* rightshift */ - 1, /* size (0 = byte, 1 = short, 2 = long) */ - 16, /* bitsize */ - FALSE, /* pc_relative */ - 0, /* bitpos */ - complain_overflow_signed, /* complain_on_overflow */ - 0, /* special_function */ - "ADDR16", /* name */ - TRUE, /* partial_inplace */ - 0xffff, /* src_mask */ - 0xffff, /* dst_mask */ - TRUE), /* pcrel_offset */ - - /* IMAGE_REL_PPC_TOCREL16 0x0008 */ - /* 16-bit offset from TOC base */ - /* Used: */ - HOWTO (IMAGE_REL_PPC_TOCREL16,/* type */ - 0, /* rightshift */ - 1, /* size (0 = byte, 1 = short, 2 = long) */ - 16, /* bitsize */ - FALSE, /* pc_relative */ - 0, /* bitpos */ - complain_overflow_dont, /* complain_on_overflow */ - ppc_toc16_reloc, /* special_function */ - "TOCREL16", /* name */ - FALSE, /* partial_inplace */ - 0xffff, /* src_mask */ - 0xffff, /* dst_mask */ - FALSE), /* pcrel_offset */ - - /* IMAGE_REL_PPC_TOCREL14 0x0009 */ - /* 16-bit offset from TOC base, shifted left 2 (load doubleword) */ - /* Unused: */ - HOWTO (IMAGE_REL_PPC_TOCREL14,/* type */ - 1, /* rightshift */ - 1, /* size (0 = byte, 1 = short, 2 = long) */ - 16, /* bitsize */ - FALSE, /* pc_relative */ - 0, /* bitpos */ - complain_overflow_signed, /* complain_on_overflow */ - 0, /* special_function */ - "TOCREL14", /* name */ - FALSE, /* partial_inplace */ - 0xffff, /* src_mask */ - 0xffff, /* dst_mask */ - FALSE), /* pcrel_offset */ - - /* IMAGE_REL_PPC_ADDR32NB 0x000A */ - /* 32-bit addr w/ image base */ - /* Unused: */ - HOWTO (IMAGE_REL_PPC_ADDR32NB,/* type */ - 0, /* rightshift */ - 2, /* size (0 = byte, 1 = short, 2 = long) */ - 32, /* bitsize */ - FALSE, /* pc_relative */ - 0, /* bitpos */ - complain_overflow_signed, /* complain_on_overflow */ - 0, /* special_function */ - "ADDR32NB", /* name */ - TRUE, /* partial_inplace */ - 0xffffffff, /* src_mask */ - 0xffffffff, /* dst_mask */ - FALSE), /* pcrel_offset */ - - /* IMAGE_REL_PPC_SECREL 0x000B */ - /* va of containing section (as in an image sectionhdr) */ - /* Unused: */ - HOWTO (IMAGE_REL_PPC_SECREL,/* type */ - 0, /* rightshift */ - 2, /* size (0 = byte, 1 = short, 2 = long) */ - 32, /* bitsize */ - FALSE, /* pc_relative */ - 0, /* bitpos */ - complain_overflow_signed, /* complain_on_overflow */ - ppc_secrel_reloc, /* special_function */ - "SECREL", /* name */ - TRUE, /* partial_inplace */ - 0xffffffff, /* src_mask */ - 0xffffffff, /* dst_mask */ - TRUE), /* pcrel_offset */ - - /* IMAGE_REL_PPC_SECTION 0x000C */ - /* sectionheader number */ - /* Unused: */ - HOWTO (IMAGE_REL_PPC_SECTION,/* type */ - 0, /* rightshift */ - 2, /* size (0 = byte, 1 = short, 2 = long) */ - 32, /* bitsize */ - FALSE, /* pc_relative */ - 0, /* bitpos */ - complain_overflow_signed, /* complain_on_overflow */ - ppc_section_reloc, /* special_function */ - "SECTION", /* name */ - TRUE, /* partial_inplace */ - 0xffffffff, /* src_mask */ - 0xffffffff, /* dst_mask */ - TRUE), /* pcrel_offset */ - - /* IMAGE_REL_PPC_IFGLUE 0x000D */ - /* substitute TOC restore instruction iff symbol is glue code */ - /* Used: */ - HOWTO (IMAGE_REL_PPC_IFGLUE,/* type */ - 0, /* rightshift */ - 2, /* size (0 = byte, 1 = short, 2 = long) */ - 32, /* bitsize */ - FALSE, /* pc_relative */ - 0, /* bitpos */ - complain_overflow_signed, /* complain_on_overflow */ - 0, /* special_function */ - "IFGLUE", /* name */ - TRUE, /* partial_inplace */ - 0xffffffff, /* src_mask */ - 0xffffffff, /* dst_mask */ - FALSE), /* pcrel_offset */ - - /* IMAGE_REL_PPC_IMGLUE 0x000E */ - /* symbol is glue code; virtual address is TOC restore instruction */ - /* Unused: */ - HOWTO (IMAGE_REL_PPC_IMGLUE,/* type */ - 0, /* rightshift */ - 2, /* size (0 = byte, 1 = short, 2 = long) */ - 32, /* bitsize */ - FALSE, /* pc_relative */ - 0, /* bitpos */ - complain_overflow_dont, /* complain_on_overflow */ - ppc_imglue_reloc, /* special_function */ - "IMGLUE", /* name */ - FALSE, /* partial_inplace */ - 0xffffffff, /* src_mask */ - 0xffffffff, /* dst_mask */ - FALSE), /* pcrel_offset */ - - /* IMAGE_REL_PPC_SECREL16 0x000F */ - /* va of containing section (limited to 16 bits) */ - /* Unused: */ - HOWTO (IMAGE_REL_PPC_SECREL16,/* type */ - 0, /* rightshift */ - 1, /* size (0 = byte, 1 = short, 2 = long) */ - 16, /* bitsize */ - FALSE, /* pc_relative */ - 0, /* bitpos */ - complain_overflow_signed, /* complain_on_overflow */ - 0, /* special_function */ - "SECREL16", /* name */ - TRUE, /* partial_inplace */ - 0xffff, /* src_mask */ - 0xffff, /* dst_mask */ - TRUE), /* pcrel_offset */ - - /* IMAGE_REL_PPC_REFHI 0x0010 */ - /* Unused: */ - HOWTO (IMAGE_REL_PPC_REFHI, /* type */ - 0, /* rightshift */ - 1, /* size (0 = byte, 1 = short, 2 = long) */ - 16, /* bitsize */ - FALSE, /* pc_relative */ - 0, /* bitpos */ - complain_overflow_signed, /* complain_on_overflow */ - ppc_refhi_reloc, /* special_function */ - "REFHI", /* name */ - TRUE, /* partial_inplace */ - 0xffffffff, /* src_mask */ - 0xffffffff, /* dst_mask */ - FALSE), /* pcrel_offset */ - - /* IMAGE_REL_PPC_REFLO 0x0011 */ - /* Unused: */ - HOWTO (IMAGE_REL_PPC_REFLO, /* type */ - 0, /* rightshift */ - 1, /* size (0 = byte, 1 = short, 2 = long) */ - 16, /* bitsize */ - FALSE, /* pc_relative */ - 0, /* bitpos */ - complain_overflow_signed, /* complain_on_overflow */ - ppc_refhi_reloc, /* special_function */ - "REFLO", /* name */ - TRUE, /* partial_inplace */ - 0xffffffff, /* src_mask */ - 0xffffffff, /* dst_mask */ - FALSE), /* pcrel_offset */ - - /* IMAGE_REL_PPC_PAIR 0x0012 */ - /* Unused: */ - HOWTO (IMAGE_REL_PPC_PAIR, /* type */ - 0, /* rightshift */ - 1, /* size (0 = byte, 1 = short, 2 = long) */ - 16, /* bitsize */ - FALSE, /* pc_relative */ - 0, /* bitpos */ - complain_overflow_signed, /* complain_on_overflow */ - ppc_pair_reloc, /* special_function */ - "PAIR", /* name */ - TRUE, /* partial_inplace */ - 0xffffffff, /* src_mask */ - 0xffffffff, /* dst_mask */ - FALSE), /* pcrel_offset */ - - /* IMAGE_REL_PPC_TOCREL16_DEFN 0x0013 */ - /* 16-bit offset from TOC base, without causing a definition */ - /* Used: */ - HOWTO ( (IMAGE_REL_PPC_TOCREL16 | IMAGE_REL_PPC_TOCDEFN), /* type */ - 0, /* rightshift */ - 1, /* size (0 = byte, 1 = short, 2 = long) */ - 16, /* bitsize */ - FALSE, /* pc_relative */ - 0, /* bitpos */ - complain_overflow_dont, /* complain_on_overflow */ - 0, /* special_function */ - "TOCREL16, TOCDEFN", /* name */ - FALSE, /* partial_inplace */ - 0xffff, /* src_mask */ - 0xffff, /* dst_mask */ - FALSE), /* pcrel_offset */ - -}; - -/* Some really cheezy macros that can be turned on to test stderr :-) */ - -#ifdef DEBUG_RELOC -#define UN_IMPL(x) \ -{ \ - static int i; \ - if (i == 0) \ - { \ - i = 1; \ - fprintf (stderr,_("Unimplemented Relocation -- %s\n"),x); \ - } \ -} - -#define DUMP_RELOC(n,r) \ -{ \ - fprintf (stderr,"%s sym %d, addr %d, addend %d\n", \ - n, (*(r->sym_ptr_ptr))->name, \ - r->address, r->addend); \ -} - -/* Given a reloc name, n, and a pointer to an internal_reloc, - dump out interesting information on the contents - -#define n_name _n._n_name -#define n_zeroes _n._n_n._n_zeroes -#define n_offset _n._n_n._n_offset */ - -#define DUMP_RELOC2(n,r) \ -{ \ - fprintf (stderr,"%s sym %d, r_vaddr %d %s\n", \ - n, r->r_symndx, r->r_vaddr, \ - (((r->r_type) & IMAGE_REL_PPC_TOCDEFN) == 0) \ - ?" ":" TOCDEFN" ); \ -} - -#else -#define UN_IMPL(x) -#define DUMP_RELOC(n,r) -#define DUMP_RELOC2(n,r) -#endif - -/* TOC construction and management routines. */ - -/* This file is compiled twice, and these variables are defined in one - of the compilations. FIXME: This is confusing and weird. Also, - BFD should not use global variables. */ -extern bfd * bfd_of_toc_owner; -extern long int global_toc_size; -extern long int import_table_size; -extern long int first_thunk_address; -extern long int thunk_size; - -enum toc_type -{ - default_toc, - toc_32, - toc_64 -}; - -enum ref_category -{ - priv, - pub, - tocdata -}; - -struct list_ele -{ - struct list_ele *next; - bfd_vma addr; - enum ref_category cat; - int offset; - const char *name; -}; - -extern struct list_ele *head; -extern struct list_ele *tail; - -static void -record_toc (asection *toc_section, - bfd_signed_vma our_toc_offset, - enum ref_category cat, - const char *name) -{ - /* Add this entry to our toc addr-offset-name list. */ - bfd_size_type amt = sizeof (struct list_ele); - struct list_ele *t = (struct list_ele *) bfd_malloc (amt); - - if (t == NULL) - abort (); - t->next = 0; - t->offset = our_toc_offset; - t->name = name; - t->cat = cat; - t->addr = toc_section->output_offset + our_toc_offset; - - if (head == 0) - { - head = t; - tail = t; - } - else - { - tail->next = t; - tail = t; - } -} - -#ifdef COFF_IMAGE_WITH_PE - -/* Record a toc offset against a symbol. */ -static bfd_boolean -ppc_record_toc_entry (bfd *abfd, - struct bfd_link_info *info ATTRIBUTE_UNUSED, - asection *sec ATTRIBUTE_UNUSED, - int sym, - enum toc_type toc_kind ATTRIBUTE_UNUSED) -{ - struct ppc_coff_link_hash_entry *h; - int *local_syms; - - h = 0; - - h = (struct ppc_coff_link_hash_entry *) (obj_coff_sym_hashes (abfd)[sym]); - if (h != 0) - { - HASH_CHECK(h); - } - - if (h == 0) - { - local_syms = obj_coff_local_toc_table(abfd); - - if (local_syms == 0) - { - unsigned int i; - bfd_size_type amt; - - /* allocate a table */ - amt = (bfd_size_type) obj_raw_syment_count (abfd) * sizeof (int); - local_syms = (int *) bfd_zalloc (abfd, amt); - if (local_syms == 0) - return FALSE; - obj_coff_local_toc_table (abfd) = local_syms; - - for (i = 0; i < obj_raw_syment_count (abfd); ++i) - { - SET_UNALLOCATED (local_syms[i]); - } - } - - if (IS_UNALLOCATED(local_syms[sym])) - { - local_syms[sym] = global_toc_size; - global_toc_size += 4; - - /* The size must fit in a 16-bit displacement. */ - if (global_toc_size > 65535) - { - _bfd_error_handler (_("TOC overflow")); - bfd_set_error (bfd_error_file_too_big); - return FALSE; - } - } - } - else - { - /* Check to see if there's a toc slot allocated. If not, do it - here. It will be used in relocate_section. */ - if (IS_UNALLOCATED(h->toc_offset)) - { - h->toc_offset = global_toc_size; - global_toc_size += 4; - - /* The size must fit in a 16-bit displacement. */ - if (global_toc_size >= 65535) - { - _bfd_error_handler (_("TOC overflow")); - bfd_set_error (bfd_error_file_too_big); - return FALSE; - } - } - } - - return TRUE; -} - -/* Record a toc offset against a symbol. */ -static void -ppc_mark_symbol_as_glue (bfd *abfd, - int sym, - struct internal_reloc *rel) -{ - struct ppc_coff_link_hash_entry *h; - - h = (struct ppc_coff_link_hash_entry *) (obj_coff_sym_hashes (abfd)[sym]); - - HASH_CHECK(h); - - h->symbol_is_glue = 1; - h->glue_insn = bfd_get_32 (abfd, (bfd_byte *) &rel->r_vaddr); - - return; -} - -#endif /* COFF_IMAGE_WITH_PE */ - -/* Return TRUE if this relocation should - appear in the output .reloc section. */ - -static bfd_boolean -in_reloc_p (bfd * abfd ATTRIBUTE_UNUSED, - reloc_howto_type *howto) -{ - return - (! howto->pc_relative) - && (howto->type != IMAGE_REL_PPC_ADDR32NB) - && (howto->type != IMAGE_REL_PPC_TOCREL16) - && (howto->type != IMAGE_REL_PPC_IMGLUE) - && (howto->type != IMAGE_REL_PPC_IFGLUE) - && (howto->type != IMAGE_REL_PPC_SECREL) - && (howto->type != IMAGE_REL_PPC_SECTION) - && (howto->type != IMAGE_REL_PPC_SECREL16) - && (howto->type != IMAGE_REL_PPC_REFHI) - && (howto->type != IMAGE_REL_PPC_REFLO) - && (howto->type != IMAGE_REL_PPC_PAIR) - && (howto->type != IMAGE_REL_PPC_TOCREL16_DEFN) ; -} - -static bfd_boolean -write_base_file_entry (bfd *obfd, struct bfd_link_info *info, bfd_vma addr) -{ - if (coff_data (obfd)->pe) - addr -= pe_data (obfd)->pe_opthdr.ImageBase; - if (fwrite (&addr, sizeof (addr), 1, (FILE *) info->base_file) == 1) - return TRUE; - - bfd_set_error (bfd_error_system_call); - return FALSE; -} - -/* The reloc processing routine for the optimized COFF linker. */ - -static bfd_boolean -coff_ppc_relocate_section (bfd *output_bfd, - struct bfd_link_info *info, - bfd *input_bfd, - asection *input_section, - bfd_byte *contents, - struct internal_reloc *relocs, - struct internal_syment *syms, - asection **sections) -{ - struct internal_reloc *rel; - struct internal_reloc *relend; - asection *toc_section = 0; - bfd_vma relocation; - reloc_howto_type *howto = 0; - - /* If we are performing a relocatable link, we don't need to do a - thing. The caller will take care of adjusting the reloc - addresses and symbol indices. */ - if (bfd_link_relocatable (info)) - return TRUE; - - rel = relocs; - relend = rel + input_section->reloc_count; - for (; rel < relend; rel++) - { - long symndx; - struct ppc_coff_link_hash_entry *h; - struct internal_syment *sym; - bfd_vma val; - - asection *sec; - bfd_reloc_status_type rstat; - bfd_byte *loc; - - unsigned short r_type = EXTRACT_TYPE (rel->r_type); - unsigned short r_flags = EXTRACT_FLAGS(rel->r_type); - - symndx = rel->r_symndx; - loc = contents + rel->r_vaddr - input_section->vma; - - /* FIXME: check bounds on r_type */ - howto = ppc_coff_howto_table + r_type; - - if (symndx == -1) - { - h = NULL; - sym = NULL; - } - else - { - h = (struct ppc_coff_link_hash_entry *) - (obj_coff_sym_hashes (input_bfd)[symndx]); - if (h != 0) - { - HASH_CHECK(h); - } - - sym = syms + symndx; - } - - if (r_type == IMAGE_REL_PPC_IMGLUE && h == 0) - { - /* An IMGLUE reloc must have a name. Something is very wrong. */ - abort (); - } - - sec = NULL; - val = 0; - - /* FIXME: PAIR unsupported in the following code. */ - if (h == NULL) - { - if (symndx == -1) - sec = bfd_abs_section_ptr; - else - { - sec = sections[symndx]; - val = (sec->output_section->vma - + sec->output_offset - + sym->n_value); - if (! obj_pe (output_bfd)) - val -= sec->vma; - } - } - else - { - HASH_CHECK(h); - - if (h->root.root.type == bfd_link_hash_defined - || h->root.root.type == bfd_link_hash_defweak) - { - sec = h->root.root.u.def.section; - val = (h->root.root.u.def.value - + sec->output_section->vma - + sec->output_offset); - } - else - (*info->callbacks->undefined_symbol) - (info, h->root.root.root.string, input_bfd, input_section, - rel->r_vaddr - input_section->vma, TRUE); - } - - rstat = bfd_reloc_ok; - - /* Each case must do its own relocation, setting rstat appropriately. */ - switch (r_type) - { - default: - /* xgettext: c-format */ - _bfd_error_handler (_("%pB: unsupported relocation type %#x"), - input_bfd, r_type); - bfd_set_error (bfd_error_bad_value); - return FALSE; - case IMAGE_REL_PPC_TOCREL16: - { - bfd_signed_vma our_toc_offset; - int fixit; - - DUMP_RELOC2(howto->name, rel); - - if (toc_section == 0) - { - toc_section = bfd_get_section_by_name (bfd_of_toc_owner, - TOC_SECTION_NAME); - - if ( toc_section == NULL ) - { - /* There is no toc section. Something is very wrong. */ - abort (); - } - } - - /* Amazing bit tricks present. As we may have seen earlier, we - use the 1 bit to tell us whether or not a toc offset has been - allocated. Now that they've all been allocated, we will use - the 1 bit to tell us if we've written this particular toc - entry out. */ - fixit = FALSE; - if (h == 0) - { - /* It is a file local symbol. */ - int *local_toc_table; - char name[SYMNMLEN + 1]; - - sym = syms + symndx; - strncpy (name, sym->_n._n_name, SYMNMLEN); - name[SYMNMLEN] = '\0'; - - local_toc_table = obj_coff_local_toc_table(input_bfd); - our_toc_offset = local_toc_table[symndx]; - - if (IS_WRITTEN(our_toc_offset)) - { - /* If it has been written out, it is marked with the - 1 bit. Fix up our offset, but do not write it out - again. */ - MAKE_ADDR_AGAIN(our_toc_offset); - } - else - { - /* Write out the toc entry. */ - record_toc (toc_section, our_toc_offset, priv, - strdup (name)); - - bfd_put_32 (output_bfd, val, - toc_section->contents + our_toc_offset); - - MARK_AS_WRITTEN(local_toc_table[symndx]); - fixit = TRUE; - } - } - else - { - const char *name = h->root.root.root.string; - our_toc_offset = h->toc_offset; - - if ((r_flags & IMAGE_REL_PPC_TOCDEFN) - == IMAGE_REL_PPC_TOCDEFN ) - { - /* This is unbelievable cheese. Some knowledgable asm - hacker has decided to use r2 as a base for loading - a value. He/She does this by setting the tocdefn bit, - and not supplying a toc definition. The behaviour is - then to use the difference between the value of the - symbol and the actual location of the toc as the toc - index. - - In fact, what is usually happening is, because the - Import Address Table is mapped immediately following - the toc, some trippy library code trying for speed on - dll linkage, takes advantage of that and considers - the IAT to be part of the toc, thus saving a load. */ - - our_toc_offset = val - (toc_section->output_section->vma - + toc_section->output_offset); - - /* The size must still fit in a 16-bit displacement. */ - if ((bfd_vma) our_toc_offset >= 65535) - { - _bfd_error_handler - /* xgettext: c-format */ - (_("%pB: Relocation for %s of %#" PRIx64 " exceeds " - "Toc size limit"), - input_bfd, name, (uint64_t) our_toc_offset); - bfd_set_error (bfd_error_bad_value); - return FALSE; - } - - record_toc (toc_section, our_toc_offset, pub, - strdup (name)); - } - else if (IS_WRITTEN (our_toc_offset)) - { - /* If it has been written out, it is marked with the - 1 bit. Fix up our offset, but do not write it out - again. */ - MAKE_ADDR_AGAIN(our_toc_offset); - } - else - { - record_toc(toc_section, our_toc_offset, pub, - strdup (name)); - - /* Write out the toc entry. */ - bfd_put_32 (output_bfd, val, - toc_section->contents + our_toc_offset); - - MARK_AS_WRITTEN(h->toc_offset); - /* The tricky part is that this is the address that - needs a .reloc entry for it. */ - fixit = TRUE; - } - } - - if (fixit && info->base_file) - { - /* So if this is non pcrelative, and is referenced - to a section or a common symbol, then it needs a reloc. */ - - /* Relocation to a symbol in a section which - isn't absolute - we output the address here - to a file. */ - bfd_vma addr = (toc_section->output_section->vma - + toc_section->output_offset + our_toc_offset); - - if (!write_base_file_entry (output_bfd, info, addr)) - return FALSE; - } - - /* FIXME: this test is conservative. */ - if ((r_flags & IMAGE_REL_PPC_TOCDEFN) != IMAGE_REL_PPC_TOCDEFN - && (bfd_vma) our_toc_offset > toc_section->size) - { - _bfd_error_handler - /* xgettext: c-format */ - (_("%pB: Relocation exceeds allocated TOC (%#" PRIx64 ")"), - input_bfd, (uint64_t) toc_section->size); - bfd_set_error (bfd_error_bad_value); - return FALSE; - } - - /* Now we know the relocation for this toc reference. */ - relocation = our_toc_offset + TOC_LOAD_ADJUSTMENT; - rstat = _bfd_relocate_contents (howto, input_bfd, relocation, loc); - } - break; - case IMAGE_REL_PPC_IFGLUE: - { - /* To solve this, we need to know whether or not the symbol - appearing on the call instruction is a glue function or not. - A glue function must announce itself via a IMGLUE reloc, and - the reloc contains the required toc restore instruction. */ - DUMP_RELOC2 (howto->name, rel); - - if (h != 0) - { - if (h->symbol_is_glue == 1) - { - bfd_put_32 (input_bfd, (bfd_vma) h->glue_insn, loc); - } - } - } - break; - case IMAGE_REL_PPC_SECREL: - /* Unimplemented: codeview debugging information. */ - /* For fast access to the header of the section - containing the item. */ - break; - case IMAGE_REL_PPC_SECTION: - /* Unimplemented: codeview debugging information. */ - /* Is used to indicate that the value should be relative - to the beginning of the section that contains the - symbol. */ - break; - case IMAGE_REL_PPC_ABSOLUTE: - { - const char *my_name; - char buf[SYMNMLEN + 1]; - - if (h == 0) - { - strncpy (buf, (syms+symndx)->_n._n_name, SYMNMLEN); - buf[SYMNMLEN] = '\0'; - my_name = buf; - } - else - my_name = h->root.root.root.string; - - _bfd_error_handler - /* xgettext: c-format */ - (_("warning: unsupported reloc %s \n" - "sym %ld (%s), r_vaddr %" PRId64 " (%#" PRIx64 ")"), - howto->name, input_bfd, input_section, - rel->r_symndx, my_name, - (int64_t) rel->r_vaddr, (uint64_t) rel->r_vaddr); - } - break; - case IMAGE_REL_PPC_IMGLUE: - { - /* There is nothing to do now. This reloc was noted in the first - pass over the relocs, and the glue instruction extracted. */ - const char *my_name; - - if (h->symbol_is_glue == 1) - break; - my_name = h->root.root.root.string; - - _bfd_error_handler - /* xgettext: c-format */ - (_("%pB: Out of order IMGLUE reloc for %s"), input_bfd, my_name); - bfd_set_error (bfd_error_bad_value); - return FALSE; - } - - case IMAGE_REL_PPC_ADDR32NB: - { - const char *name = 0; - - DUMP_RELOC2 (howto->name, rel); - - if (CONST_STRNEQ (input_section->name, ".idata$2") && first_thunk_address == 0) - { - /* Set magic values. */ - int idata5offset; - struct coff_link_hash_entry *myh; - - myh = coff_link_hash_lookup (coff_hash_table (info), - "__idata5_magic__", - FALSE, FALSE, TRUE); - first_thunk_address = myh->root.u.def.value + - sec->output_section->vma + - sec->output_offset - - pe_data(output_bfd)->pe_opthdr.ImageBase; - - idata5offset = myh->root.u.def.value; - myh = coff_link_hash_lookup (coff_hash_table (info), - "__idata6_magic__", - FALSE, FALSE, TRUE); - - thunk_size = myh->root.u.def.value - idata5offset; - myh = coff_link_hash_lookup (coff_hash_table (info), - "__idata4_magic__", - FALSE, FALSE, TRUE); - import_table_size = myh->root.u.def.value; - } - - if (h == 0) - /* It is a file local symbol. */ - sym = syms + symndx; - else - { - char *target = 0; - - name = h->root.root.root.string; - if (strcmp (".idata$2", name) == 0) - target = "__idata2_magic__"; - else if (strcmp (".idata$4", name) == 0) - target = "__idata4_magic__"; - else if (strcmp (".idata$5", name) == 0) - target = "__idata5_magic__"; - - if (target != 0) - { - struct coff_link_hash_entry *myh; - - myh = coff_link_hash_lookup (coff_hash_table (info), - target, - FALSE, FALSE, TRUE); - if (myh == 0) - { - /* Missing magic cookies. Something is very wrong. */ - abort (); - } - - val = myh->root.u.def.value + - sec->output_section->vma + sec->output_offset; - if (first_thunk_address == 0) - { - int idata5offset; - myh = coff_link_hash_lookup (coff_hash_table (info), - "__idata5_magic__", - FALSE, FALSE, TRUE); - first_thunk_address = myh->root.u.def.value + - sec->output_section->vma + - sec->output_offset - - pe_data(output_bfd)->pe_opthdr.ImageBase; - - idata5offset = myh->root.u.def.value; - myh = coff_link_hash_lookup (coff_hash_table (info), - "__idata6_magic__", - FALSE, FALSE, TRUE); - - thunk_size = myh->root.u.def.value - idata5offset; - myh = coff_link_hash_lookup (coff_hash_table (info), - "__idata4_magic__", - FALSE, FALSE, TRUE); - import_table_size = myh->root.u.def.value; - } - } - } - - rstat = _bfd_relocate_contents (howto, - input_bfd, - val - - pe_data (output_bfd)->pe_opthdr.ImageBase, - loc); - } - break; - - case IMAGE_REL_PPC_REL24: - DUMP_RELOC2(howto->name, rel); - val -= (input_section->output_section->vma - + input_section->output_offset); - - rstat = _bfd_relocate_contents (howto, - input_bfd, - val, - loc); - break; - case IMAGE_REL_PPC_ADDR16: - case IMAGE_REL_PPC_ADDR24: - case IMAGE_REL_PPC_ADDR32: - DUMP_RELOC2(howto->name, rel); - rstat = _bfd_relocate_contents (howto, - input_bfd, - val, - loc); - break; - } - - if (info->base_file) - { - /* So if this is non pcrelative, and is referenced - to a section or a common symbol, then it needs a reloc. */ - if (sym && pe_data(output_bfd)->in_reloc_p (output_bfd, howto)) - { - /* Relocation to a symbol in a section which - isn't absolute - we output the address here - to a file. */ - bfd_vma addr = (rel->r_vaddr - - input_section->vma - + input_section->output_offset - + input_section->output_section->vma); - - if (!write_base_file_entry (output_bfd, info, addr)) - return FALSE; - } - } - - switch (rstat) - { - default: - abort (); - case bfd_reloc_ok: - break; - case bfd_reloc_overflow: - { - const char *name; - char buf[SYMNMLEN + 1]; - - if (symndx == -1) - name = "*ABS*"; - else if (h != NULL) - name = NULL; - else if (sym == NULL) - name = "*unknown*"; - else if (sym->_n._n_n._n_zeroes == 0 - && sym->_n._n_n._n_offset != 0) - name = obj_coff_strings (input_bfd) + sym->_n._n_n._n_offset; - else - { - strncpy (buf, sym->_n._n_name, SYMNMLEN); - buf[SYMNMLEN] = '\0'; - name = buf; - } - - (*info->callbacks->reloc_overflow) - (info, (h ? &h->root.root : NULL), name, howto->name, - (bfd_vma) 0, input_bfd, input_section, - rel->r_vaddr - input_section->vma); - } - } - } - - return TRUE; -} - -#ifdef COFF_IMAGE_WITH_PE - -/* FIXME: BFD should not use global variables. This file is compiled - twice, and these variables are shared. This is confusing and - weird. */ - -long int global_toc_size = 4; - -bfd* bfd_of_toc_owner = 0; - -long int import_table_size; -long int first_thunk_address; -long int thunk_size; - -struct list_ele *head; -struct list_ele *tail; - -static char * -h1 = N_("\n\t\t\tTOC MAPPING\n\n"); -static char * -h2 = N_(" TOC disassembly Comments Name\n"); -static char * -h3 = N_(" Offset spelling (if present)\n"); - -void -dump_toc (void * vfile) -{ - FILE *file = (FILE *) vfile; - struct list_ele *t; - - fputs (_(h1), file); - fputs (_(h2), file); - fputs (_(h3), file); - - for (t = head; t != 0; t=t->next) - { - const char *cat = ""; - - if (t->cat == priv) - cat = _("private "); - else if (t->cat == pub) - cat = _("public "); - else if (t->cat == tocdata) - cat = _("data-in-toc "); - - if (t->offset > global_toc_size) - { - if (t->offset <= global_toc_size + thunk_size) - cat = _("IAT reference "); - else - { - fprintf (file, - /* xgettext: c-format */ - _("**** global_toc_size %ld(%lx), thunk_size %ld(%lx)\n"), - global_toc_size, (unsigned long) global_toc_size, - thunk_size, (unsigned long) thunk_size); - cat = _("Out of bounds!"); - } - } - - fprintf (file, - " %04lx (%d)", (unsigned long) t->offset, t->offset - 32768); - fprintf (file, - " %s %s\n", - cat, t->name); - - } - - fprintf (file, "\n"); -} - -bfd_boolean -ppc_allocate_toc_section (struct bfd_link_info *info ATTRIBUTE_UNUSED) -{ - asection *s; - bfd_byte *foo; - bfd_size_type amt; - static char test_char = '1'; - - if ( global_toc_size == 0 ) /* FIXME: does this get me in trouble? */ - return TRUE; - - if (bfd_of_toc_owner == 0) - /* No toc owner? Something is very wrong. */ - abort (); - - s = bfd_get_section_by_name ( bfd_of_toc_owner , TOC_SECTION_NAME); - if (s == NULL) - /* No toc section? Something is very wrong. */ - abort (); - - amt = global_toc_size; - foo = (bfd_byte *) bfd_alloc (bfd_of_toc_owner, amt); - memset(foo, test_char, (size_t) global_toc_size); - - s->size = global_toc_size; - s->contents = foo; - - return TRUE; -} - -bfd_boolean -ppc_process_before_allocation (bfd *abfd, - struct bfd_link_info *info) -{ - asection *sec; - struct internal_reloc *i, *rel; - - /* Here we have a bfd that is to be included on the link. We have a hook - to do reloc rummaging, before section sizes are nailed down. */ - _bfd_coff_get_external_symbols (abfd); - - /* Rummage around all the relocs and map the toc. */ - sec = abfd->sections; - - if (sec == 0) - return TRUE; - - for (; sec != 0; sec = sec->next) - { - if (sec->reloc_count == 0) - continue; - - /* load the relocs */ - /* FIXME: there may be a storage leak here */ - i=_bfd_coff_read_internal_relocs(abfd,sec,1,0,0,0); - - if (i == 0) - abort (); - - for (rel = i; rel < i + sec->reloc_count; ++rel) - { - unsigned short r_type = EXTRACT_TYPE (rel->r_type); - unsigned short r_flags = EXTRACT_FLAGS (rel->r_type); - bfd_boolean ok = TRUE; - - DUMP_RELOC2 (ppc_coff_howto_table[r_type].name, rel); - - switch(r_type) - { - case IMAGE_REL_PPC_TOCREL16: - /* If TOCDEFN is on, ignore as someone else has allocated the - toc entry. */ - if ((r_flags & IMAGE_REL_PPC_TOCDEFN) != IMAGE_REL_PPC_TOCDEFN) - ok = ppc_record_toc_entry(abfd, info, sec, - rel->r_symndx, default_toc); - if (!ok) - return FALSE; - break; - case IMAGE_REL_PPC_IMGLUE: - ppc_mark_symbol_as_glue (abfd, rel->r_symndx, rel); - break; - default: - break; - } - } - } - - return TRUE; -} - -#endif - -static bfd_reloc_status_type -ppc_refhi_reloc (bfd *abfd ATTRIBUTE_UNUSED, - arelent *reloc_entry ATTRIBUTE_UNUSED, - asymbol *symbol ATTRIBUTE_UNUSED, - void * data ATTRIBUTE_UNUSED, - asection *input_section ATTRIBUTE_UNUSED, - bfd *output_bfd, - char **error_message ATTRIBUTE_UNUSED) -{ - UN_IMPL("REFHI"); - DUMP_RELOC("REFHI",reloc_entry); - - if (output_bfd == (bfd *) NULL) - return bfd_reloc_continue; - - return bfd_reloc_undefined; -} - -static bfd_reloc_status_type -ppc_pair_reloc (bfd *abfd ATTRIBUTE_UNUSED, - arelent *reloc_entry ATTRIBUTE_UNUSED, - asymbol *symbol ATTRIBUTE_UNUSED, - void * data ATTRIBUTE_UNUSED, - asection *input_section ATTRIBUTE_UNUSED, - bfd *output_bfd, - char **error_message ATTRIBUTE_UNUSED) -{ - UN_IMPL("PAIR"); - DUMP_RELOC("PAIR",reloc_entry); - - if (output_bfd == (bfd *) NULL) - return bfd_reloc_continue; - - return bfd_reloc_undefined; -} - -static bfd_reloc_status_type -ppc_toc16_reloc (bfd *abfd ATTRIBUTE_UNUSED, - arelent *reloc_entry ATTRIBUTE_UNUSED, - asymbol *symbol ATTRIBUTE_UNUSED, - void * data ATTRIBUTE_UNUSED, - asection *input_section ATTRIBUTE_UNUSED, - bfd *output_bfd, - char **error_message ATTRIBUTE_UNUSED) -{ - UN_IMPL ("TOCREL16"); - DUMP_RELOC ("TOCREL16",reloc_entry); - - if (output_bfd == (bfd *) NULL) - return bfd_reloc_continue; - - return bfd_reloc_ok; -} - -static bfd_reloc_status_type -ppc_secrel_reloc (bfd *abfd ATTRIBUTE_UNUSED, - arelent *reloc_entry ATTRIBUTE_UNUSED, - asymbol *symbol ATTRIBUTE_UNUSED, - void * data ATTRIBUTE_UNUSED, - asection *input_section ATTRIBUTE_UNUSED, - bfd *output_bfd, - char **error_message ATTRIBUTE_UNUSED) -{ - UN_IMPL("SECREL"); - DUMP_RELOC("SECREL",reloc_entry); - - if (output_bfd == (bfd *) NULL) - return bfd_reloc_continue; - - return bfd_reloc_ok; -} - -static bfd_reloc_status_type -ppc_section_reloc (bfd *abfd ATTRIBUTE_UNUSED, - arelent *reloc_entry ATTRIBUTE_UNUSED, - asymbol *symbol ATTRIBUTE_UNUSED, - void * data ATTRIBUTE_UNUSED, - asection *input_section ATTRIBUTE_UNUSED, - bfd *output_bfd, - char **error_message ATTRIBUTE_UNUSED) -{ - UN_IMPL("SECTION"); - DUMP_RELOC("SECTION",reloc_entry); - - if (output_bfd == (bfd *) NULL) - return bfd_reloc_continue; - - return bfd_reloc_ok; -} - -static bfd_reloc_status_type -ppc_imglue_reloc (bfd *abfd ATTRIBUTE_UNUSED, - arelent *reloc_entry ATTRIBUTE_UNUSED, - asymbol *symbol ATTRIBUTE_UNUSED, - void * data ATTRIBUTE_UNUSED, - asection *input_section ATTRIBUTE_UNUSED, - bfd *output_bfd, - char **error_message ATTRIBUTE_UNUSED) - -{ - UN_IMPL("IMGLUE"); - DUMP_RELOC("IMGLUE",reloc_entry); - - if (output_bfd == (bfd *) NULL) - return bfd_reloc_continue; - - return bfd_reloc_ok; -} - -#define MAX_RELOC_INDEX \ - (sizeof (ppc_coff_howto_table) / sizeof (ppc_coff_howto_table[0]) - 1) - -/* FIXME: There is a possibility that when we read in a reloc from a file, - that there are some bits encoded in the upper portion of the - type field. Not yet implemented. */ - -static void -ppc_coff_rtype2howto (arelent *relent, struct internal_reloc *internal) -{ - /* We can encode one of three things in the type field, aside from the - type: - 1. IMAGE_REL_PPC_NEG - indicates the value field is a subtraction - value, rather than an addition value - 2. IMAGE_REL_PPC_BRTAKEN, IMAGE_REL_PPC_BRNTAKEN - indicates that - the branch is expected to be taken or not. - 3. IMAGE_REL_PPC_TOCDEFN - toc slot definition in the file - For now, we just strip this stuff to find the type, and ignore it other - than that. */ - reloc_howto_type *howto; - unsigned short r_type = EXTRACT_TYPE (internal->r_type); - unsigned short r_flags = EXTRACT_FLAGS(internal->r_type); - unsigned short junk = EXTRACT_JUNK (internal->r_type); - - /* The masking process only slices off the bottom byte for r_type. */ - if ( r_type > MAX_RELOC_INDEX ) - abort (); - - /* Check for absolute crap. */ - if (junk != 0) - abort (); - - switch(r_type) - { - case IMAGE_REL_PPC_ADDR16: - case IMAGE_REL_PPC_REL24: - case IMAGE_REL_PPC_ADDR24: - case IMAGE_REL_PPC_ADDR32: - case IMAGE_REL_PPC_IFGLUE: - case IMAGE_REL_PPC_ADDR32NB: - case IMAGE_REL_PPC_SECTION: - case IMAGE_REL_PPC_SECREL: - DUMP_RELOC2 (ppc_coff_howto_table[r_type].name, internal); - howto = ppc_coff_howto_table + r_type; - break; - case IMAGE_REL_PPC_IMGLUE: - DUMP_RELOC2 (ppc_coff_howto_table[r_type].name, internal); - howto = ppc_coff_howto_table + r_type; - break; - case IMAGE_REL_PPC_TOCREL16: - DUMP_RELOC2 (ppc_coff_howto_table[r_type].name, internal); - if (r_flags & IMAGE_REL_PPC_TOCDEFN) - howto = ppc_coff_howto_table + IMAGE_REL_PPC_TOCREL16_DEFN; - else - howto = ppc_coff_howto_table + IMAGE_REL_PPC_TOCREL16; - break; - default: - _bfd_error_handler - /* xgettext: c-format */ - (_("warning: unsupported reloc %s [%d] used -- it may not work"), - ppc_coff_howto_table[r_type].name, r_type); - howto = ppc_coff_howto_table + r_type; - break; - } - - relent->howto = howto; -} - -static reloc_howto_type * -coff_ppc_rtype_to_howto (bfd *abfd ATTRIBUTE_UNUSED, - asection *sec, - struct internal_reloc *rel, - struct coff_link_hash_entry *h ATTRIBUTE_UNUSED, - struct internal_syment *sym ATTRIBUTE_UNUSED, - bfd_vma *addendp) -{ - reloc_howto_type *howto; - - /* We can encode one of three things in the type field, aside from the - type: - 1. IMAGE_REL_PPC_NEG - indicates the value field is a subtraction - value, rather than an addition value - 2. IMAGE_REL_PPC_BRTAKEN, IMAGE_REL_PPC_BRNTAKEN - indicates that - the branch is expected to be taken or not. - 3. IMAGE_REL_PPC_TOCDEFN - toc slot definition in the file - For now, we just strip this stuff to find the type, and ignore it other - than that. */ - - unsigned short r_type = EXTRACT_TYPE (rel->r_type); - unsigned short r_flags = EXTRACT_FLAGS (rel->r_type); - unsigned short junk = EXTRACT_JUNK (rel->r_type); - - /* The masking process only slices off the bottom byte for r_type. */ - if (r_type > MAX_RELOC_INDEX) - abort (); - - /* Check for absolute crap. */ - if (junk != 0) - abort (); - - switch(r_type) - { - case IMAGE_REL_PPC_ADDR32NB: - DUMP_RELOC2(ppc_coff_howto_table[r_type].name, rel); - *addendp -= pe_data(sec->output_section->owner)->pe_opthdr.ImageBase; - howto = ppc_coff_howto_table + r_type; - break; - case IMAGE_REL_PPC_TOCREL16: - DUMP_RELOC2(ppc_coff_howto_table[r_type].name, rel); - if (r_flags & IMAGE_REL_PPC_TOCDEFN) - howto = ppc_coff_howto_table + IMAGE_REL_PPC_TOCREL16_DEFN; - else - howto = ppc_coff_howto_table + IMAGE_REL_PPC_TOCREL16; - break; - case IMAGE_REL_PPC_ADDR16: - case IMAGE_REL_PPC_REL24: - case IMAGE_REL_PPC_ADDR24: - case IMAGE_REL_PPC_ADDR32: - case IMAGE_REL_PPC_IFGLUE: - case IMAGE_REL_PPC_SECTION: - case IMAGE_REL_PPC_SECREL: - DUMP_RELOC2(ppc_coff_howto_table[r_type].name, rel); - howto = ppc_coff_howto_table + r_type; - break; - case IMAGE_REL_PPC_IMGLUE: - DUMP_RELOC2(ppc_coff_howto_table[r_type].name, rel); - howto = ppc_coff_howto_table + r_type; - break; - default: - _bfd_error_handler - /* xgettext: c-format */ - (_("warning: unsupported reloc %s [%d] used -- it may not work"), - ppc_coff_howto_table[r_type].name, r_type); - howto = ppc_coff_howto_table + r_type; - break; - } - - return howto; -} - -/* A cheesy little macro to make the code a little more readable. */ -#define HOW2MAP(bfd_rtype,ppc_rtype) \ - case bfd_rtype: return &ppc_coff_howto_table[ppc_rtype] - -static reloc_howto_type * -ppc_coff_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED, - bfd_reloc_code_real_type code) -{ - switch (code) - { - HOW2MAP(BFD_RELOC_32_GOTOFF, IMAGE_REL_PPC_IMGLUE); - HOW2MAP(BFD_RELOC_16_GOT_PCREL, IMAGE_REL_PPC_IFGLUE); - HOW2MAP(BFD_RELOC_16, IMAGE_REL_PPC_ADDR16); - HOW2MAP(BFD_RELOC_PPC_B26, IMAGE_REL_PPC_REL24); - HOW2MAP(BFD_RELOC_PPC_BA26, IMAGE_REL_PPC_ADDR24); - HOW2MAP(BFD_RELOC_PPC_TOC16, IMAGE_REL_PPC_TOCREL16); - HOW2MAP(BFD_RELOC_16_GOTOFF, IMAGE_REL_PPC_TOCREL16_DEFN); - HOW2MAP(BFD_RELOC_32, IMAGE_REL_PPC_ADDR32); - HOW2MAP(BFD_RELOC_RVA, IMAGE_REL_PPC_ADDR32NB); - default: - return NULL; - } -} -#undef HOW2MAP - -static reloc_howto_type * -ppc_coff_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED, - const char *r_name) -{ - unsigned int i; - - for (i = 0; - i < sizeof (ppc_coff_howto_table) / sizeof (ppc_coff_howto_table[0]); - i++) - if (ppc_coff_howto_table[i].name != NULL - && strcasecmp (ppc_coff_howto_table[i].name, r_name) == 0) - return &ppc_coff_howto_table[i]; - - return NULL; -} - -/* Tailor coffcode.h -- macro heaven. */ - -#define RTYPE2HOWTO(cache_ptr, dst) ppc_coff_rtype2howto (cache_ptr, dst) - -/* We use the special COFF backend linker, with our own special touch. */ - -#define coff_bfd_reloc_type_lookup ppc_coff_reloc_type_lookup -#define coff_bfd_reloc_name_lookup ppc_coff_reloc_name_lookup -#define coff_rtype_to_howto coff_ppc_rtype_to_howto -#define coff_relocate_section coff_ppc_relocate_section -#define coff_bfd_final_link ppc_bfd_coff_final_link - -#ifndef COFF_IMAGE_WITH_PE -#endif - -#define SELECT_RELOC(internal, howto) {internal.r_type=howto->type;} - -#define COFF_PAGE_SIZE 0x1000 - -/* FIXME: This controls some code that used to be in peicode.h and is - now in peigen.c. It will not control the code in peigen.c. If - anybody wants to get this working, you will need to fix that. */ -#define POWERPC_LE_PE - -#define COFF_SECTION_ALIGNMENT_ENTRIES \ -{ COFF_SECTION_NAME_EXACT_MATCH (".idata$2"), \ - COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 0 }, \ -{ COFF_SECTION_NAME_EXACT_MATCH (".idata$3"), \ - COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 0 }, \ -{ COFF_SECTION_NAME_EXACT_MATCH (".idata$4"), \ - COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \ -{ COFF_SECTION_NAME_EXACT_MATCH (".idata$5"), \ - COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \ -{ COFF_SECTION_NAME_EXACT_MATCH (".idata$6"), \ - COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 1 }, \ -{ COFF_SECTION_NAME_EXACT_MATCH (".reloc"), \ - COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 1 } - -#include "coffcode.h" - -#ifndef COFF_IMAGE_WITH_PE - -static bfd_boolean -ppc_do_last (bfd *abfd) -{ - if (abfd == bfd_of_toc_owner) - return TRUE; - else - return FALSE; -} - -static bfd * -ppc_get_last (void) -{ - return bfd_of_toc_owner; -} - -/* This piece of machinery exists only to guarantee that the bfd that holds - the toc section is written last. - - This does depend on bfd_make_section attaching a new section to the - end of the section list for the bfd. - - This is otherwise intended to be functionally the same as - cofflink.c:_bfd_coff_final_link(). It is specifically different only - where the POWERPC_LE_PE macro modifies the code. It is left in as a - precise form of comment. krk@cygnus.com */ - -/* Do the final link step. */ - -bfd_boolean -ppc_bfd_coff_final_link (bfd *abfd, struct bfd_link_info *info) -{ - bfd_size_type symesz; - struct coff_final_link_info flaginfo; - bfd_boolean debug_merge_allocated; - asection *o; - struct bfd_link_order *p; - bfd_size_type max_sym_count; - bfd_size_type max_lineno_count; - bfd_size_type max_reloc_count; - bfd_size_type max_output_reloc_count; - bfd_size_type max_contents_size; - file_ptr rel_filepos; - unsigned int relsz; - file_ptr line_filepos; - unsigned int linesz; - bfd *sub; - bfd_byte *external_relocs = NULL; - char strbuf[STRING_SIZE_SIZE]; - bfd_size_type amt; - - symesz = bfd_coff_symesz (abfd); - - flaginfo.info = info; - flaginfo.output_bfd = abfd; - flaginfo.strtab = NULL; - flaginfo.section_info = NULL; - flaginfo.last_file_index = -1; - flaginfo.last_bf_index = -1; - flaginfo.internal_syms = NULL; - flaginfo.sec_ptrs = NULL; - flaginfo.sym_indices = NULL; - flaginfo.outsyms = NULL; - flaginfo.linenos = NULL; - flaginfo.contents = NULL; - flaginfo.external_relocs = NULL; - flaginfo.internal_relocs = NULL; - debug_merge_allocated = FALSE; - - coff_data (abfd)->link_info = info; - - flaginfo.strtab = _bfd_stringtab_init (); - if (flaginfo.strtab == NULL) - goto error_return; - - if (! coff_debug_merge_hash_table_init (&flaginfo.debug_merge)) - goto error_return; - debug_merge_allocated = TRUE; - - /* Compute the file positions for all the sections. */ - if (! abfd->output_has_begun) - { - if (! bfd_coff_compute_section_file_positions (abfd)) - return FALSE; - } - - /* Count the line numbers and relocation entries required for the - output file. Set the file positions for the relocs. */ - rel_filepos = obj_relocbase (abfd); - relsz = bfd_coff_relsz (abfd); - max_contents_size = 0; - max_lineno_count = 0; - max_reloc_count = 0; - - for (o = abfd->sections; o != NULL; o = o->next) - { - o->reloc_count = 0; - o->lineno_count = 0; - - for (p = o->map_head.link_order; p != NULL; p = p->next) - { - if (p->type == bfd_indirect_link_order) - { - asection *sec; - - sec = p->u.indirect.section; - - /* Mark all sections which are to be included in the - link. This will normally be every section. We need - to do this so that we can identify any sections which - the linker has decided to not include. */ - sec->linker_mark = TRUE; - - if (info->strip == strip_none - || info->strip == strip_some) - o->lineno_count += sec->lineno_count; - - if (bfd_link_relocatable (info)) - o->reloc_count += sec->reloc_count; - - if (sec->rawsize > max_contents_size) - max_contents_size = sec->rawsize; - if (sec->size > max_contents_size) - max_contents_size = sec->size; - if (sec->lineno_count > max_lineno_count) - max_lineno_count = sec->lineno_count; - if (sec->reloc_count > max_reloc_count) - max_reloc_count = sec->reloc_count; - } - else if (bfd_link_relocatable (info) - && (p->type == bfd_section_reloc_link_order - || p->type == bfd_symbol_reloc_link_order)) - ++o->reloc_count; - } - if (o->reloc_count == 0) - o->rel_filepos = 0; - else - { - o->flags |= SEC_RELOC; - o->rel_filepos = rel_filepos; - rel_filepos += o->reloc_count * relsz; - } - } - - /* If doing a relocatable link, allocate space for the pointers we - need to keep. */ - if (bfd_link_relocatable (info)) - { - unsigned int i; - - /* We use section_count + 1, rather than section_count, because - the target_index fields are 1 based. */ - amt = abfd->section_count + 1; - amt *= sizeof (struct coff_link_section_info); - flaginfo.section_info = (struct coff_link_section_info *) bfd_malloc (amt); - - if (flaginfo.section_info == NULL) - goto error_return; - - for (i = 0; i <= abfd->section_count; i++) - { - flaginfo.section_info[i].relocs = NULL; - flaginfo.section_info[i].rel_hashes = NULL; - } - } - - /* We now know the size of the relocs, so we can determine the file - positions of the line numbers. */ - line_filepos = rel_filepos; - linesz = bfd_coff_linesz (abfd); - max_output_reloc_count = 0; - - for (o = abfd->sections; o != NULL; o = o->next) - { - if (o->lineno_count == 0) - o->line_filepos = 0; - else - { - o->line_filepos = line_filepos; - line_filepos += o->lineno_count * linesz; - } - - if (o->reloc_count != 0) - { - /* We don't know the indices of global symbols until we have - written out all the local symbols. For each section in - the output file, we keep an array of pointers to hash - table entries. Each entry in the array corresponds to a - reloc. When we find a reloc against a global symbol, we - set the corresponding entry in this array so that we can - fix up the symbol index after we have written out all the - local symbols. - - Because of this problem, we also keep the relocs in - memory until the end of the link. This wastes memory, - but only when doing a relocatable link, which is not the - common case. */ - BFD_ASSERT (bfd_link_relocatable (info)); - amt = o->reloc_count; - amt *= sizeof (struct internal_reloc); - flaginfo.section_info[o->target_index].relocs = - (struct internal_reloc *) bfd_malloc (amt); - amt = o->reloc_count; - amt *= sizeof (struct coff_link_hash_entry *); - flaginfo.section_info[o->target_index].rel_hashes = - (struct coff_link_hash_entry **) bfd_malloc (amt); - if (flaginfo.section_info[o->target_index].relocs == NULL - || flaginfo.section_info[o->target_index].rel_hashes == NULL) - goto error_return; - - if (o->reloc_count > max_output_reloc_count) - max_output_reloc_count = o->reloc_count; - } - - /* Reset the reloc and lineno counts, so that we can use them to - count the number of entries we have output so far. */ - o->reloc_count = 0; - o->lineno_count = 0; - } - - obj_sym_filepos (abfd) = line_filepos; - - /* Figure out the largest number of symbols in an input BFD. Take - the opportunity to clear the output_has_begun fields of all the - input BFD's. */ - max_sym_count = 0; - for (sub = info->input_bfds; sub != NULL; sub = sub->link.next) - { - bfd_size_type sz; - - sub->output_has_begun = FALSE; - sz = obj_raw_syment_count (sub); - if (sz > max_sym_count) - max_sym_count = sz; - } - - /* Allocate some buffers used while linking. */ - amt = max_sym_count * sizeof (struct internal_syment); - flaginfo.internal_syms = (struct internal_syment *) bfd_malloc (amt); - amt = max_sym_count * sizeof (asection *); - flaginfo.sec_ptrs = (asection **) bfd_malloc (amt); - amt = max_sym_count * sizeof (long); - flaginfo.sym_indices = (long *) bfd_malloc (amt); - amt = (max_sym_count + 1) * symesz; - flaginfo.outsyms = (bfd_byte *) bfd_malloc (amt); - amt = max_lineno_count * bfd_coff_linesz (abfd); - flaginfo.linenos = (bfd_byte *) bfd_malloc (amt); - flaginfo.contents = (bfd_byte *) bfd_malloc (max_contents_size); - flaginfo.external_relocs = (bfd_byte *) bfd_malloc (max_reloc_count * relsz); - if (! bfd_link_relocatable (info)) - { - amt = max_reloc_count * sizeof (struct internal_reloc); - flaginfo.internal_relocs = (struct internal_reloc *) bfd_malloc (amt); - } - if ((flaginfo.internal_syms == NULL && max_sym_count > 0) - || (flaginfo.sec_ptrs == NULL && max_sym_count > 0) - || (flaginfo.sym_indices == NULL && max_sym_count > 0) - || flaginfo.outsyms == NULL - || (flaginfo.linenos == NULL && max_lineno_count > 0) - || (flaginfo.contents == NULL && max_contents_size > 0) - || (flaginfo.external_relocs == NULL && max_reloc_count > 0) - || (! bfd_link_relocatable (info) - && flaginfo.internal_relocs == NULL - && max_reloc_count > 0)) - goto error_return; - - /* We now know the position of everything in the file, except that - we don't know the size of the symbol table and therefore we don't - know where the string table starts. We just build the string - table in memory as we go along. We process all the relocations - for a single input file at once. */ - obj_raw_syment_count (abfd) = 0; - - if (coff_backend_info (abfd)->_bfd_coff_start_final_link) - { - if (! bfd_coff_start_final_link (abfd, info)) - goto error_return; - } - - for (o = abfd->sections; o != NULL; o = o->next) - { - for (p = o->map_head.link_order; p != NULL; p = p->next) - { - if (p->type == bfd_indirect_link_order - && (bfd_get_flavour (p->u.indirect.section->owner) - == bfd_target_coff_flavour)) - { - sub = p->u.indirect.section->owner; -#ifdef POWERPC_LE_PE - if (! sub->output_has_begun && !ppc_do_last(sub)) -#else - if (! sub->output_has_begun) -#endif - { - if (! _bfd_coff_link_input_bfd (&flaginfo, sub)) - goto error_return; - sub->output_has_begun = TRUE; - } - } - else if (p->type == bfd_section_reloc_link_order - || p->type == bfd_symbol_reloc_link_order) - { - if (! _bfd_coff_reloc_link_order (abfd, &flaginfo, o, p)) - goto error_return; - } - else - { - if (! _bfd_default_link_order (abfd, info, o, p)) - goto error_return; - } - } - } - -#ifdef POWERPC_LE_PE - { - bfd* last_one = ppc_get_last(); - if (last_one) - { - if (! _bfd_coff_link_input_bfd (&flaginfo, last_one)) - goto error_return; - } - last_one->output_has_begun = TRUE; - } -#endif - - /* Free up the buffers used by _bfd_coff_link_input_bfd. */ - coff_debug_merge_hash_table_free (&flaginfo.debug_merge); - debug_merge_allocated = FALSE; - - if (flaginfo.internal_syms != NULL) - { - free (flaginfo.internal_syms); - flaginfo.internal_syms = NULL; - } - if (flaginfo.sec_ptrs != NULL) - { - free (flaginfo.sec_ptrs); - flaginfo.sec_ptrs = NULL; - } - if (flaginfo.sym_indices != NULL) - { - free (flaginfo.sym_indices); - flaginfo.sym_indices = NULL; - } - if (flaginfo.linenos != NULL) - { - free (flaginfo.linenos); - flaginfo.linenos = NULL; - } - if (flaginfo.contents != NULL) - { - free (flaginfo.contents); - flaginfo.contents = NULL; - } - if (flaginfo.external_relocs != NULL) - { - free (flaginfo.external_relocs); - flaginfo.external_relocs = NULL; - } - if (flaginfo.internal_relocs != NULL) - { - free (flaginfo.internal_relocs); - flaginfo.internal_relocs = NULL; - } - - /* The value of the last C_FILE symbol is supposed to be the symbol - index of the first external symbol. Write it out again if - necessary. */ - if (flaginfo.last_file_index != -1 - && (unsigned int) flaginfo.last_file.n_value != obj_raw_syment_count (abfd)) - { - file_ptr pos; - - flaginfo.last_file.n_value = obj_raw_syment_count (abfd); - bfd_coff_swap_sym_out (abfd, &flaginfo.last_file, - flaginfo.outsyms); - pos = obj_sym_filepos (abfd) + flaginfo.last_file_index * symesz; - if (bfd_seek (abfd, pos, SEEK_SET) != 0 - || bfd_bwrite (flaginfo.outsyms, symesz, abfd) != symesz) - return FALSE; - } - - /* Write out the global symbols. */ - flaginfo.failed = FALSE; - bfd_hash_traverse (&info->hash->table, _bfd_coff_write_global_sym, &flaginfo); - if (flaginfo.failed) - goto error_return; - - /* The outsyms buffer is used by _bfd_coff_write_global_sym. */ - if (flaginfo.outsyms != NULL) - { - free (flaginfo.outsyms); - flaginfo.outsyms = NULL; - } - - if (bfd_link_relocatable (info)) - { - /* Now that we have written out all the global symbols, we know - the symbol indices to use for relocs against them, and we can - finally write out the relocs. */ - amt = max_output_reloc_count * relsz; - external_relocs = (bfd_byte *) bfd_malloc (amt); - if (external_relocs == NULL) - goto error_return; - - for (o = abfd->sections; o != NULL; o = o->next) - { - struct internal_reloc *irel; - struct internal_reloc *irelend; - struct coff_link_hash_entry **rel_hash; - bfd_byte *erel; - - if (o->reloc_count == 0) - continue; - - irel = flaginfo.section_info[o->target_index].relocs; - irelend = irel + o->reloc_count; - rel_hash = flaginfo.section_info[o->target_index].rel_hashes; - erel = external_relocs; - for (; irel < irelend; irel++, rel_hash++, erel += relsz) - { - if (*rel_hash != NULL) - { - BFD_ASSERT ((*rel_hash)->indx >= 0); - irel->r_symndx = (*rel_hash)->indx; - } - bfd_coff_swap_reloc_out (abfd, irel, erel); - } - - amt = relsz * o->reloc_count; - if (bfd_seek (abfd, o->rel_filepos, SEEK_SET) != 0 - || bfd_bwrite (external_relocs, amt, abfd) != amt) - goto error_return; - } - - free (external_relocs); - external_relocs = NULL; - } - - /* Free up the section information. */ - if (flaginfo.section_info != NULL) - { - unsigned int i; - - for (i = 0; i < abfd->section_count; i++) - { - if (flaginfo.section_info[i].relocs != NULL) - free (flaginfo.section_info[i].relocs); - if (flaginfo.section_info[i].rel_hashes != NULL) - free (flaginfo.section_info[i].rel_hashes); - } - free (flaginfo.section_info); - flaginfo.section_info = NULL; - } - - /* If we have optimized stabs strings, output them. */ - if (coff_hash_table (info)->stab_info.stabstr != NULL) - { - if (! _bfd_write_stab_strings (abfd, &coff_hash_table (info)->stab_info)) - return FALSE; - } - - /* Write out the string table. */ - if (obj_raw_syment_count (abfd) != 0) - { - file_ptr pos; - - pos = obj_sym_filepos (abfd) + obj_raw_syment_count (abfd) * symesz; - if (bfd_seek (abfd, pos, SEEK_SET) != 0) - return FALSE; - -#if STRING_SIZE_SIZE == 4 - H_PUT_32 (abfd, - _bfd_stringtab_size (flaginfo.strtab) + STRING_SIZE_SIZE, - strbuf); -#else - #error Change H_PUT_32 above -#endif - - if (bfd_bwrite (strbuf, (bfd_size_type) STRING_SIZE_SIZE, abfd) - != STRING_SIZE_SIZE) - return FALSE; - - if (! _bfd_stringtab_emit (abfd, flaginfo.strtab)) - return FALSE; - } - - _bfd_stringtab_free (flaginfo.strtab); - - /* Setting symcount to 0 will cause write_object_contents to - not try to write out the symbols. */ - abfd->symcount = 0; - - return TRUE; - - error_return: - if (debug_merge_allocated) - coff_debug_merge_hash_table_free (&flaginfo.debug_merge); - if (flaginfo.strtab != NULL) - _bfd_stringtab_free (flaginfo.strtab); - if (flaginfo.section_info != NULL) - { - unsigned int i; - - for (i = 0; i < abfd->section_count; i++) - { - if (flaginfo.section_info[i].relocs != NULL) - free (flaginfo.section_info[i].relocs); - if (flaginfo.section_info[i].rel_hashes != NULL) - free (flaginfo.section_info[i].rel_hashes); - } - free (flaginfo.section_info); - } - if (flaginfo.internal_syms != NULL) - free (flaginfo.internal_syms); - if (flaginfo.sec_ptrs != NULL) - free (flaginfo.sec_ptrs); - if (flaginfo.sym_indices != NULL) - free (flaginfo.sym_indices); - if (flaginfo.outsyms != NULL) - free (flaginfo.outsyms); - if (flaginfo.linenos != NULL) - free (flaginfo.linenos); - if (flaginfo.contents != NULL) - free (flaginfo.contents); - if (flaginfo.external_relocs != NULL) - free (flaginfo.external_relocs); - if (flaginfo.internal_relocs != NULL) - free (flaginfo.internal_relocs); - if (external_relocs != NULL) - free (external_relocs); - return FALSE; -} -#endif - -/* Forward declaration for use by alternative_target field. */ -#ifdef TARGET_BIG_SYM -extern const bfd_target TARGET_BIG_SYM; -#endif - -/* The transfer vectors that lead the outside world to all of the above. */ - -#ifdef TARGET_LITTLE_SYM -const bfd_target TARGET_LITTLE_SYM = -{ - TARGET_LITTLE_NAME, /* name or coff-arm-little */ - bfd_target_coff_flavour, - BFD_ENDIAN_LITTLE, /* data byte order is little */ - BFD_ENDIAN_LITTLE, /* header byte order is little */ - - (HAS_RELOC | EXEC_P /* FIXME: object flags */ - | HAS_LINENO | HAS_DEBUG - | HAS_SYMS | HAS_LOCALS | WP_TEXT | D_PAGED), - -#ifndef COFF_WITH_PE - (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_CODE | SEC_READONLY - | SEC_RELOC), /* section flags */ -#else - (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_CODE | SEC_READONLY - | SEC_RELOC | SEC_LINK_ONCE | SEC_LINK_DUPLICATES), -#endif - - 0, /* leading char */ - '/', /* ar_pad_char */ - 15, /* ar_max_namelen??? FIXMEmgo */ - 0, /* match priority. */ - - bfd_getl64, bfd_getl_signed_64, bfd_putl64, - bfd_getl32, bfd_getl_signed_32, bfd_putl32, - bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* data */ - - bfd_getl64, bfd_getl_signed_64, bfd_putl64, - bfd_getl32, bfd_getl_signed_32, bfd_putl32, - bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* hdrs */ - - { /* bfd_check_format */ - _bfd_dummy_target, - coff_object_p, - bfd_generic_archive_p, - coff_object_p - }, - { /* bfd_set_format */ - _bfd_bool_bfd_false_error, - coff_mkobject, - _bfd_generic_mkarchive, - _bfd_bool_bfd_false_error - }, - { /* bfd_write_contents */ - _bfd_bool_bfd_false_error, - coff_write_object_contents, - _bfd_write_archive_contents, - _bfd_bool_bfd_false_error - }, - - BFD_JUMP_TABLE_GENERIC (coff), - BFD_JUMP_TABLE_COPY (coff), - BFD_JUMP_TABLE_CORE (_bfd_nocore), - BFD_JUMP_TABLE_ARCHIVE (_bfd_archive_coff), - BFD_JUMP_TABLE_SYMBOLS (coff), - BFD_JUMP_TABLE_RELOCS (coff), - BFD_JUMP_TABLE_WRITE (coff), - BFD_JUMP_TABLE_LINK (coff), - BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic), - - /* Alternative_target. */ -#ifdef TARGET_BIG_SYM - &TARGET_BIG_SYM, -#else - NULL, -#endif - - COFF_SWAP_TABLE -}; -#endif - -#ifdef TARGET_BIG_SYM -const bfd_target TARGET_BIG_SYM = -{ - TARGET_BIG_NAME, - bfd_target_coff_flavour, - BFD_ENDIAN_BIG, /* data byte order is big */ - BFD_ENDIAN_BIG, /* header byte order is big */ - - (HAS_RELOC | EXEC_P /* FIXME: object flags */ - | HAS_LINENO | HAS_DEBUG - | HAS_SYMS | HAS_LOCALS | WP_TEXT | D_PAGED), - -#ifndef COFF_WITH_PE - (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_CODE | SEC_READONLY - | SEC_RELOC), /* section flags */ -#else - (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_CODE | SEC_READONLY - | SEC_RELOC | SEC_LINK_ONCE | SEC_LINK_DUPLICATES), -#endif - - 0, /* leading char */ - '/', /* ar_pad_char */ - 15, /* ar_max_namelen??? FIXMEmgo */ - 0, /* match priority. */ - - bfd_getb64, bfd_getb_signed_64, bfd_putb64, - bfd_getb32, bfd_getb_signed_32, bfd_putb32, - bfd_getb16, bfd_getb_signed_16, bfd_putb16, /* data */ - - bfd_getb64, bfd_getb_signed_64, bfd_putb64, - bfd_getb32, bfd_getb_signed_32, bfd_putb32, - bfd_getb16, bfd_getb_signed_16, bfd_putb16, /* hdrs */ - - { /* bfd_check_format */ - _bfd_dummy_target, - coff_object_p, - bfd_generic_archive_p, - coff_object_p - }, - { /* bfd_set_format */ - _bfd_bool_bfd_false_error, - coff_mkobject, - _bfd_generic_mkarchive, - _bfd_bool_bfd_false_error - }, - { /* bfd_write_contents */ - _bfd_bool_bfd_false_error, - coff_write_object_contents, - _bfd_write_archive_contents, - _bfd_bool_bfd_false_error - }, - - BFD_JUMP_TABLE_GENERIC (coff), - BFD_JUMP_TABLE_COPY (coff), - BFD_JUMP_TABLE_CORE (_bfd_nocore), - BFD_JUMP_TABLE_ARCHIVE (_bfd_archive_coff), - BFD_JUMP_TABLE_SYMBOLS (coff), - BFD_JUMP_TABLE_RELOCS (coff), - BFD_JUMP_TABLE_WRITE (coff), - BFD_JUMP_TABLE_LINK (coff), - BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic), - - /* Alternative_target. */ -#ifdef TARGET_LITTLE_SYM - &TARGET_LITTLE_SYM, -#else - NULL, -#endif - - COFF_SWAP_TABLE -}; - -#endif diff -Nru gdb-9.1/bfd/coff-rs6000.c gdb-10.2/bfd/coff-rs6000.c --- gdb-9.1/bfd/coff-rs6000.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/coff-rs6000.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD back-end for IBM RS/6000 "XCOFF" files. - Copyright (C) 1990-2019 Free Software Foundation, Inc. + Copyright (C) 1990-2020 Free Software Foundation, Inc. Written by Metin G. Ozisik, Mimi Phuong-Thao Vo, and John Gilmore. Archive support from Damon A. Permezel. Contributed by IBM Corporation and Cygnus Support. @@ -38,7 +38,7 @@ extern reloc_howto_type *_bfd_xcoff_reloc_type_lookup (bfd *, bfd_reloc_code_real_type); extern bfd_boolean _bfd_xcoff_slurp_armap (bfd *); -extern const bfd_target *_bfd_xcoff_archive_p (bfd *); +extern bfd_cleanup _bfd_xcoff_archive_p (bfd *); extern void * _bfd_xcoff_read_ar_hdr (bfd *); extern bfd *_bfd_xcoff_openr_next_archived_file (bfd *, bfd *); extern int _bfd_xcoff_stat_arch_elt (bfd *, struct stat *); @@ -77,7 +77,7 @@ #define coff_mkobject _bfd_xcoff_mkobject #define coff_bfd_is_local_label_name _bfd_xcoff_is_local_label_name #ifdef AIX_CORE -extern const bfd_target * rs6000coff_core_p (bfd *abfd); +extern bfd_cleanup rs6000coff_core_p (bfd *abfd); extern bfd_boolean rs6000coff_core_file_matches_executable_p (bfd *cbfd, bfd *ebfd); extern char *rs6000coff_core_file_failing_command (bfd *abfd); @@ -323,7 +323,7 @@ _bfd_xcoff_mkobject (bfd *abfd) { coff_data_type *coff; - bfd_size_type amt = sizeof (struct xcoff_tdata); + size_t amt = sizeof (struct xcoff_tdata); abfd->tdata.xcoff_obj_data = (struct xcoff_tdata *) bfd_zalloc (abfd, amt); if (abfd->tdata.xcoff_obj_data == NULL) @@ -652,7 +652,7 @@ ext->x_sym.x_misc.x_lnsz.x_size); } -end: + end: return bfd_coff_auxesz (abfd); } @@ -1260,18 +1260,25 @@ return FALSE; GET_VALUE_IN_FIELD (sz, hdr.size, 10); + if (sz + 1 < 5) + { + bfd_set_error (bfd_error_bad_value); + return FALSE; + } /* Read in the entire symbol table. */ - contents = (bfd_byte *) bfd_alloc (abfd, sz); + contents = (bfd_byte *) _bfd_alloc_and_read (abfd, sz + 1, sz); if (contents == NULL) return FALSE; - if (bfd_bread (contents, sz, abfd) != sz) - return FALSE; + + /* Ensure strings are NULL terminated so we don't wander off the + end of the buffer. */ + contents[sz] = 0; /* The symbol table starts with a four byte count. */ c = H_GET_32 (abfd, contents); - if (c * 4 >= sz) + if (c >= sz / 4) { bfd_set_error (bfd_error_bad_value); return FALSE; @@ -1315,18 +1322,25 @@ return FALSE; GET_VALUE_IN_FIELD (sz, hdr.size, 10); + if (sz + 1 < 9) + { + bfd_set_error (bfd_error_bad_value); + return FALSE; + } /* Read in the entire symbol table. */ - contents = (bfd_byte *) bfd_alloc (abfd, sz); + contents = (bfd_byte *) _bfd_alloc_and_read (abfd, sz + 1, sz); if (contents == NULL) return FALSE; - if (bfd_bread (contents, sz, abfd) != sz) - return FALSE; + + /* Ensure strings are NULL terminated so we don't wander off the + end of the buffer. */ + contents[sz] = 0; /* The symbol table starts with an eight byte count. */ c = H_GET_64 (abfd, contents); - if (c * 8 >= sz) + if (c >= sz / 8) { bfd_set_error (bfd_error_bad_value); return FALSE; @@ -1366,12 +1380,12 @@ /* See if this is an XCOFF archive. */ -const bfd_target * +bfd_cleanup _bfd_xcoff_archive_p (bfd *abfd) { struct artdata *tdata_hold; char magic[SXCOFFARMAG]; - bfd_size_type amt = SXCOFFARMAG; + size_t amt = SXCOFFARMAG; if (bfd_bread (magic, amt, abfd) != amt) { @@ -1467,7 +1481,7 @@ return NULL; } - return abfd->xvec; + return _bfd_no_cleanup; } /* Read the archive header in an XCOFF archive. */ @@ -1477,32 +1491,23 @@ { bfd_size_type namlen; struct areltdata *ret; - bfd_size_type amt = sizeof (struct areltdata); - - ret = (struct areltdata *) bfd_zmalloc (amt); - if (ret == NULL) - return NULL; + bfd_size_type amt; if (! xcoff_big_format_p (abfd)) { struct xcoff_ar_hdr hdr; struct xcoff_ar_hdr *hdrp; - if (bfd_bread (&hdr, (bfd_size_type) SIZEOF_AR_HDR, abfd) - != SIZEOF_AR_HDR) - { - free (ret); - return NULL; - } + if (bfd_bread (&hdr, SIZEOF_AR_HDR, abfd) != SIZEOF_AR_HDR) + return NULL; GET_VALUE_IN_FIELD (namlen, hdr.namlen, 10); - amt = SIZEOF_AR_HDR + namlen + 1; - hdrp = (struct xcoff_ar_hdr *) bfd_alloc (abfd, amt); - if (hdrp == NULL) - { - free (ret); - return NULL; - } + amt = sizeof (struct areltdata) + SIZEOF_AR_HDR + namlen + 1; + ret = (struct areltdata *) bfd_malloc (amt); + if (ret == NULL) + return ret; + + hdrp = (struct xcoff_ar_hdr *) (ret + 1); memcpy (hdrp, &hdr, SIZEOF_AR_HDR); if (bfd_bread ((char *) hdrp + SIZEOF_AR_HDR, namlen, abfd) != namlen) { @@ -1520,21 +1525,16 @@ struct xcoff_ar_hdr_big hdr; struct xcoff_ar_hdr_big *hdrp; - if (bfd_bread (&hdr, (bfd_size_type) SIZEOF_AR_HDR_BIG, abfd) - != SIZEOF_AR_HDR_BIG) - { - free (ret); - return NULL; - } + if (bfd_bread (&hdr, SIZEOF_AR_HDR_BIG, abfd) != SIZEOF_AR_HDR_BIG) + return NULL; GET_VALUE_IN_FIELD (namlen, hdr.namlen, 10); - amt = SIZEOF_AR_HDR_BIG + namlen + 1; - hdrp = (struct xcoff_ar_hdr_big *) bfd_alloc (abfd, amt); - if (hdrp == NULL) - { - free (ret); - return NULL; - } + amt = sizeof (struct areltdata) + SIZEOF_AR_HDR_BIG + namlen + 1; + ret = (struct areltdata *) bfd_malloc (amt); + if (ret == NULL) + return ret; + + hdrp = (struct xcoff_ar_hdr_big *) (ret + 1); memcpy (hdrp, &hdr, SIZEOF_AR_HDR_BIG); if (bfd_bread ((char *) hdrp + SIZEOF_AR_HDR_BIG, namlen, abfd) != namlen) { @@ -2101,6 +2101,13 @@ bfd_set_error (bfd_error_system_call); return FALSE; } + if ((abfd->flags & BFD_DETERMINISTIC_OUTPUT) != 0) + { + s.st_mtime = 0; + s.st_uid = 0; + s.st_gid = 0; + s.st_mode = 0644; + } ahdrp = bfd_zalloc (sub, sizeof (*ahdrp)); if (ahdrp == NULL) @@ -2321,6 +2328,13 @@ bfd_set_error (bfd_error_system_call); return FALSE; } + if ((abfd->flags & BFD_DETERMINISTIC_OUTPUT) != 0) + { + s.st_mtime = 0; + s.st_uid = 0; + s.st_gid = 0; + s.st_mode = 0644; + } ahdrp = bfd_zalloc (current_bfd, sizeof (*ahdrp)); if (ahdrp == NULL) @@ -2566,11 +2580,13 @@ /* Sum. */ for (sub = info->input_bfds; sub != NULL; sub = sub->link.next) for (s = sub->sections; s != NULL; s = s->next) - { - struct nbr_reloc_lineno *e = &n_rl[s->output_section->index]; - e->reloc_count += s->reloc_count; - e->lineno_count += s->lineno_count; - } + if (s->output_section->owner == abfd + && !bfd_section_removed_from_list (abfd, s->output_section)) + { + struct nbr_reloc_lineno *e = &n_rl[s->output_section->index]; + e->reloc_count += s->reloc_count; + e->lineno_count += s->lineno_count; + } /* Add the size of a section for each section with an overflow. */ for (s = abfd->sections; s != NULL; s = s->next) @@ -3389,7 +3405,8 @@ (info, h->root.root.string, input_bfd, input_section, rel->r_vaddr - input_section->vma, - info->unresolved_syms_in_objects == RM_GENERATE_ERROR); + info->unresolved_syms_in_objects == RM_DIAGNOSE && + !info->warn_unresolved_syms); if (h->root.type == bfd_link_hash_defined || h->root.type == bfd_link_hash_defweak) diff -Nru gdb-9.1/bfd/coff-sh.c gdb-10.2/bfd/coff-sh.c --- gdb-9.1/bfd/coff-sh.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/coff-sh.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD back-end for Renesas Super-H COFF binaries. - Copyright (C) 1993-2019 Free Software Foundation, Inc. + Copyright (C) 1993-2020 Free Software Foundation, Inc. Contributed by Cygnus Support. Written by Steve Chamberlain, . Relaxing code written by Ian Lance Taylor, . @@ -722,7 +722,7 @@ if (coff_section_data (abfd, sec) == NULL) { - bfd_size_type amt = sizeof (struct coff_section_tdata); + size_t amt = sizeof (struct coff_section_tdata); sec->used_by_bfd = bfd_zalloc (abfd, amt); if (sec->used_by_bfd == NULL) return FALSE; @@ -1056,10 +1056,9 @@ return TRUE; error_return: - if (internal_relocs != NULL - && internal_relocs != coff_section_data (abfd, sec)->relocs) + if (internal_relocs != coff_section_data (abfd, sec)->relocs) free (internal_relocs); - if (contents != NULL && contents != coff_section_data (abfd, sec)->contents) + if (contents != coff_section_data (abfd, sec)->contents) free (contents); return FALSE; } @@ -2723,8 +2722,7 @@ return TRUE; error_return: - if (labels != NULL) - free (labels); + free (labels); return FALSE; } @@ -2995,12 +2993,9 @@ return data; error_return: - if (internal_relocs != NULL) - free (internal_relocs); - if (internal_syms != NULL) - free (internal_syms); - if (sections != NULL) - free (sections); + free (internal_relocs); + free (internal_syms); + free (sections); return NULL; } @@ -3044,7 +3039,7 @@ /* Only recognize the small versions if the target was not defaulted. Otherwise we won't recognize the non default endianness. */ -static const bfd_target * +static bfd_cleanup coff_small_object_p (bfd *abfd) { if (abfd->target_defaulted) diff -Nru gdb-9.1/bfd/coff-stgo32.c gdb-10.2/bfd/coff-stgo32.c --- gdb-9.1/bfd/coff-stgo32.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/coff-stgo32.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD back-end for Intel 386 COFF files (DJGPP variant with a stub). - Copyright (C) 1997-2019 Free Software Foundation, Inc. + Copyright (C) 1997-2020 Free Software Foundation, Inc. Written by Robert Hoehne. This file is part of BFD, the Binary File Descriptor library. @@ -23,17 +23,10 @@ DOS executable program before the coff image to load it in memory and execute it. This is needed, because DOS cannot run coff files. - All the functions below are called by the corresponding functions - from coffswap.h. - The only thing what they do is to adjust the information stored in - the COFF file which are offset into the file. - This is needed, because DJGPP uses a very special way to load and run - the coff image. It loads the image in memory and assumes then, that the - image had no stub by using the filepointers as pointers in the coff - image and NOT in the file. - - To be compatible with any existing executables I have fixed this - here and NOT in the DJGPP startup code. */ + The COFF image is loaded in memory without the stub attached, so + all offsets are relative to the beginning of the image, not the + actual file. We handle this in bfd by setting bfd->origin to where + the COFF image starts. */ #define TARGET_SYM i386_coff_go32stubbed_vec #define TARGET_NAME "coff-go32-exe" @@ -53,54 +46,29 @@ { COFF_SECTION_NAME_PARTIAL_MATCH (".gnu.linkonce.wi"), \ COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 0 } +/* Section contains extended relocations. */ +#define IMAGE_SCN_LNK_NRELOC_OVFL (0x01000000) + #include "sysdep.h" #include "bfd.h" +#include "coff/msdos.h" -/* All that ..._PRE and ...POST functions are called from the corresponding - coff_swap... functions. The ...PRE functions are called at the beginning - of the function and the ...POST functions at the end of the swap routines. */ - -static void -adjust_filehdr_in_post (bfd *, void *, void *); -static void -adjust_filehdr_out_pre (bfd *, void *, void *); -static void -adjust_filehdr_out_post (bfd *, void *, void *); -static void -adjust_scnhdr_in_post (bfd *, void *, void *); -static void -adjust_scnhdr_out_pre (bfd *, void *, void *); -static void -adjust_scnhdr_out_post (bfd *, void *, void *); -static void -adjust_aux_in_post (bfd *, void *, int, int, int, int, void *); -static void -adjust_aux_out_pre (bfd *, void *, int, int, int, int, void *); -static void -adjust_aux_out_post (bfd *, void *, int, int, int, int, void *); -static void -create_go32_stub (bfd *); - -#define COFF_ADJUST_FILEHDR_IN_POST adjust_filehdr_in_post -#define COFF_ADJUST_FILEHDR_OUT_PRE adjust_filehdr_out_pre -#define COFF_ADJUST_FILEHDR_OUT_POST adjust_filehdr_out_post - -#define COFF_ADJUST_SCNHDR_IN_POST adjust_scnhdr_in_post -#define COFF_ADJUST_SCNHDR_OUT_PRE adjust_scnhdr_out_pre -#define COFF_ADJUST_SCNHDR_OUT_POST adjust_scnhdr_out_post - -#define COFF_ADJUST_AUX_IN_POST adjust_aux_in_post -#define COFF_ADJUST_AUX_OUT_PRE adjust_aux_out_pre -#define COFF_ADJUST_AUX_OUT_POST adjust_aux_out_post - -static const bfd_target *go32_check_format (bfd *); - -#define COFF_CHECK_FORMAT go32_check_format - -static bfd_boolean - go32_stubbed_coff_bfd_copy_private_bfd_data (bfd *, bfd *); - -#define coff_bfd_copy_private_bfd_data go32_stubbed_coff_bfd_copy_private_bfd_data +static bfd_cleanup go32exe_check_format (bfd *); +static bfd_boolean go32exe_write_object_contents (bfd *); +static bfd_boolean go32exe_mkobject (bfd *); +static bfd_boolean go32exe_copy_private_bfd_data (bfd *, bfd *); + +/* Defined in coff-go32.c. */ +bfd_boolean _bfd_go32_mkobject (bfd *); +void _bfd_go32_swap_scnhdr_in (bfd *, void *, void *); +unsigned int _bfd_go32_swap_scnhdr_out (bfd *, void *, void *); + +#define COFF_CHECK_FORMAT go32exe_check_format +#define COFF_WRITE_CONTENTS go32exe_write_object_contents +#define coff_mkobject go32exe_mkobject +#define coff_bfd_copy_private_bfd_data go32exe_copy_private_bfd_data +#define coff_SWAP_scnhdr_in _bfd_go32_swap_scnhdr_in +#define coff_SWAP_scnhdr_out _bfd_go32_swap_scnhdr_out #include "coff-i386.c" @@ -110,160 +78,15 @@ /* These bytes are a 2048-byte DOS executable, which loads the COFF image into memory and then runs it. It is called 'stub'. */ - -static const unsigned char stub_bytes[GO32_STUBSIZE] = +#define GO32EXE_DEFAULT_STUB_SIZE 2048 +static const unsigned char go32exe_default_stub[GO32EXE_DEFAULT_STUB_SIZE] = { #include "go32stub.h" }; -/* - I have not commented each swap function below, because the - technique is in any function the same. For the ...in function, - all the pointers are adjusted by adding GO32_STUBSIZE and for the - ...out function, it is subtracted first and after calling the - standard swap function it is reset to the old value. */ - -/* This macro is used for adjusting the filepointers, which - is done only, if the pointer is nonzero. */ - -#define ADJUST_VAL(val,diff) \ - if (val != 0) val += diff - -static void -adjust_filehdr_in_post (bfd * abfd ATTRIBUTE_UNUSED, - void * src, - void * dst) -{ - FILHDR *filehdr_src = (FILHDR *) src; - struct internal_filehdr *filehdr_dst = (struct internal_filehdr *) dst; - - ADJUST_VAL (filehdr_dst->f_symptr, GO32_STUBSIZE); - - /* Save now the stub to be used later. Put the stub data to FILEHDR_DST - first as coff_data (abfd) still does not exist. It may not even be ever - created as we are just checking the file format of ABFD. */ - memcpy (filehdr_dst->go32stub, filehdr_src->stub, GO32_STUBSIZE); - filehdr_dst->f_flags |= F_GO32STUB; -} - -static void -adjust_filehdr_out_pre (bfd * abfd, void * in, void * out) -{ - struct internal_filehdr *filehdr_in = (struct internal_filehdr *) in; - FILHDR *filehdr_out = (FILHDR *) out; - - /* Generate the stub. */ - create_go32_stub (abfd); - - /* Copy the stub to the file header. */ - if (coff_data (abfd)->go32stub != NULL) - memcpy (filehdr_out->stub, coff_data (abfd)->go32stub, GO32_STUBSIZE); - else - /* Use the default. */ - memcpy (filehdr_out->stub, stub_bytes, GO32_STUBSIZE); - - ADJUST_VAL (filehdr_in->f_symptr, -GO32_STUBSIZE); -} - -static void -adjust_filehdr_out_post (bfd * abfd ATTRIBUTE_UNUSED, - void * in, - void * out ATTRIBUTE_UNUSED) -{ - struct internal_filehdr *filehdr_in = (struct internal_filehdr *) in; - /* Undo the above change. */ - ADJUST_VAL (filehdr_in->f_symptr, GO32_STUBSIZE); -} - -static void -adjust_scnhdr_in_post (bfd * abfd ATTRIBUTE_UNUSED, - void * ext ATTRIBUTE_UNUSED, - void * in) -{ - struct internal_scnhdr *scnhdr_int = (struct internal_scnhdr *) in; - - ADJUST_VAL (scnhdr_int->s_scnptr, GO32_STUBSIZE); - ADJUST_VAL (scnhdr_int->s_relptr, GO32_STUBSIZE); - ADJUST_VAL (scnhdr_int->s_lnnoptr, GO32_STUBSIZE); -} - -static void -adjust_scnhdr_out_pre (bfd * abfd ATTRIBUTE_UNUSED, - void * in, - void * out ATTRIBUTE_UNUSED) -{ - struct internal_scnhdr *scnhdr_int = (struct internal_scnhdr *) in; - - ADJUST_VAL (scnhdr_int->s_scnptr, -GO32_STUBSIZE); - ADJUST_VAL (scnhdr_int->s_relptr, -GO32_STUBSIZE); - ADJUST_VAL (scnhdr_int->s_lnnoptr, -GO32_STUBSIZE); -} - -static void -adjust_scnhdr_out_post (bfd * abfd ATTRIBUTE_UNUSED, - void * in, - void * out ATTRIBUTE_UNUSED) -{ - struct internal_scnhdr *scnhdr_int = (struct internal_scnhdr *) in; - - ADJUST_VAL (scnhdr_int->s_scnptr, GO32_STUBSIZE); - ADJUST_VAL (scnhdr_int->s_relptr, GO32_STUBSIZE); - ADJUST_VAL (scnhdr_int->s_lnnoptr, GO32_STUBSIZE); -} - -static void -adjust_aux_in_post (bfd * abfd ATTRIBUTE_UNUSED, - void * ext1 ATTRIBUTE_UNUSED, - int type, - int in_class, - int indx ATTRIBUTE_UNUSED, - int numaux ATTRIBUTE_UNUSED, - void * in1) -{ - union internal_auxent *in = (union internal_auxent *) in1; - - if (in_class == C_BLOCK || in_class == C_FCN || ISFCN (type) - || ISTAG (in_class)) - { - ADJUST_VAL (in->x_sym.x_fcnary.x_fcn.x_lnnoptr, GO32_STUBSIZE); - } -} - -static void -adjust_aux_out_pre (bfd *abfd ATTRIBUTE_UNUSED, - void * inp, - int type, - int in_class, - int indx ATTRIBUTE_UNUSED, - int numaux ATTRIBUTE_UNUSED, - void * extp ATTRIBUTE_UNUSED) -{ - union internal_auxent *in = (union internal_auxent *) inp; - - if (in_class == C_BLOCK || in_class == C_FCN || ISFCN (type) - || ISTAG (in_class)) - { - ADJUST_VAL (in->x_sym.x_fcnary.x_fcn.x_lnnoptr, -GO32_STUBSIZE); - } -} - -static void -adjust_aux_out_post (bfd *abfd ATTRIBUTE_UNUSED, - void * inp, - int type, - int in_class, - int indx ATTRIBUTE_UNUSED, - int numaux ATTRIBUTE_UNUSED, - void * extp ATTRIBUTE_UNUSED) -{ - union internal_auxent *in = (union internal_auxent *) inp; - - if (in_class == C_BLOCK || in_class == C_FCN || ISFCN (type) - || ISTAG (in_class)) - { - ADJUST_VAL (in->x_sym.x_fcnary.x_fcn.x_lnnoptr, GO32_STUBSIZE); - } -} +/* Temporary location for stub read from input file. */ +static char * go32exe_temp_stub = NULL; +static bfd_size_type go32exe_temp_stub_size = 0; /* That's the function, which creates the stub. There are different cases from where the stub is taken. @@ -275,13 +98,16 @@ file. If there was any error, the standard stub (compiled in this file) - is taken. */ + is taken. + + Ideally this function should exec '$(TARGET)-stubify' to generate + a stub, like gcc does. */ static void -create_go32_stub (bfd *abfd) +go32exe_create_stub (bfd *abfd) { /* Do it only once. */ - if (coff_data (abfd)->go32stub == NULL) + if (coff_data (abfd)->stub == NULL) { char *stub; struct stat st; @@ -291,6 +117,22 @@ unsigned long coff_start; long exe_start; + /* If we read a stub from an input file, use that one. */ + if (go32exe_temp_stub != NULL) + { + coff_data (abfd)->stub = bfd_alloc (abfd, + go32exe_temp_stub_size); + if (coff_data (abfd)->stub == NULL) + return; + memcpy (coff_data (abfd)->stub, go32exe_temp_stub, + go32exe_temp_stub_size); + coff_data (abfd)->stub_size = go32exe_temp_stub_size; + free (go32exe_temp_stub); + go32exe_temp_stub = NULL; + go32exe_temp_stub_size = 0; + return; + } + /* Check at first the environment variable $(GO32STUB). */ stub = getenv ("GO32STUB"); /* Now check the environment variable $(STUB). */ @@ -323,13 +165,6 @@ if (_H (1)) coff_start += (long) _H (1) - 512L; - /* Currently there is only a fixed stub size of 2048 bytes - supported. */ - if (coff_start != 2048) - { - close (f); - goto stub_end; - } exe_start = _H (4) * 16; if ((long) lseek (f, exe_start, SEEK_SET) != exe_start) { @@ -347,31 +182,35 @@ goto stub_end; } /* Now we found a correct stub (hopefully). */ - coff_data (abfd)->go32stub = bfd_alloc (abfd, (bfd_size_type) coff_start); - if (coff_data (abfd)->go32stub == NULL) + coff_data (abfd)->stub = bfd_alloc (abfd, (bfd_size_type) coff_start); + if (coff_data (abfd)->stub == NULL) { close (f); return; } lseek (f, 0L, SEEK_SET); - if ((unsigned long) read (f, coff_data (abfd)->go32stub, coff_start) + if ((unsigned long) read (f, coff_data (abfd)->stub, coff_start) != coff_start) { - bfd_release (abfd, coff_data (abfd)->go32stub); - coff_data (abfd)->go32stub = NULL; + bfd_release (abfd, coff_data (abfd)->stub); + coff_data (abfd)->stub = NULL; } + else + coff_data (abfd)->stub_size = coff_start; close (f); } -stub_end: + stub_end: /* There was something wrong above, so use now the standard builtin stub. */ - if (coff_data (abfd)->go32stub == NULL) + if (coff_data (abfd)->stub == NULL) { - coff_data (abfd)->go32stub - = bfd_alloc (abfd, (bfd_size_type) GO32_STUBSIZE); - if (coff_data (abfd)->go32stub == NULL) + coff_data (abfd)->stub + = bfd_alloc (abfd, (bfd_size_type) GO32EXE_DEFAULT_STUB_SIZE); + if (coff_data (abfd)->stub == NULL) return; - memcpy (coff_data (abfd)->go32stub, stub_bytes, GO32_STUBSIZE); + memcpy (coff_data (abfd)->stub, go32exe_default_stub, + GO32EXE_DEFAULT_STUB_SIZE); + coff_data (abfd)->stub_size = GO32EXE_DEFAULT_STUB_SIZE; } } @@ -379,46 +218,163 @@ to the new obfd. */ static bfd_boolean -go32_stubbed_coff_bfd_copy_private_bfd_data (bfd *ibfd, bfd *obfd) +go32exe_copy_private_bfd_data (bfd *ibfd, bfd *obfd) { /* Check if both are the same targets. */ if (ibfd->xvec != obfd->xvec) return TRUE; - /* Check if we have a source stub. */ - if (coff_data (ibfd)->go32stub == NULL) - return TRUE; + /* Make sure we have a source stub. */ + BFD_ASSERT (coff_data (ibfd)->stub != NULL); - /* As adjust_filehdr_out_pre may get called only after this function, - optionally allocate the output stub. */ - if (coff_data (obfd)->go32stub == NULL) - coff_data (obfd)->go32stub = bfd_alloc (obfd, - (bfd_size_type) GO32_STUBSIZE); + /* Reallocate the output stub if necessary. */ + if (coff_data (ibfd)->stub_size > coff_data (obfd)->stub_size) + coff_data (obfd)->stub = bfd_alloc (obfd, coff_data (ibfd)->stub_size); + if (coff_data (obfd)->stub == NULL) + return FALSE; /* Now copy the stub. */ - if (coff_data (obfd)->go32stub != NULL) - memcpy (coff_data (obfd)->go32stub, coff_data (ibfd)->go32stub, - GO32_STUBSIZE); + memcpy (coff_data (obfd)->stub, coff_data (ibfd)->stub, + coff_data (ibfd)->stub_size); + coff_data (obfd)->stub_size = coff_data (ibfd)->stub_size; + obfd->origin = coff_data (obfd)->stub_size; return TRUE; } -/* coff_object_p only checks 2 bytes F_MAGIC at GO32_STUBSIZE inside the file - which is too fragile. */ +/* Cleanup function, returned from check_format hook. */ -static const bfd_target * -go32_check_format (bfd *abfd) +static void +go32exe_cleanup (bfd *abfd) { - char mz[2]; + abfd->origin = 0; + + free (go32exe_temp_stub); + go32exe_temp_stub = NULL; + go32exe_temp_stub_size = 0; +} - if (bfd_bread (mz, 2, abfd) != 2 || mz[0] != 'M' || mz[1] != 'Z') +/* Check that there is a GO32 stub and read it to go32exe_temp_stub. + Then set abfd->origin so that the COFF image is read at the correct + file offset. */ + +static bfd_cleanup +go32exe_check_format (bfd *abfd) +{ + struct external_DOS_hdr filehdr_dos; + uint16_t num_pages; + uint16_t last_page_size; + uint32_t header_end; + bfd_size_type stubsize; + + /* This format can not appear in an archive. */ + if (abfd->origin != 0) { bfd_set_error (bfd_error_wrong_format); return NULL; } + bfd_set_error (bfd_error_system_call); + + /* Read in the stub file header, which is a DOS MZ executable. */ + if (bfd_bread (&filehdr_dos, DOS_HDR_SIZE, abfd) != DOS_HDR_SIZE) + goto fail; + + /* Make sure that this is an MZ executable. */ + if (H_GET_16 (abfd, filehdr_dos.e_magic) != IMAGE_DOS_SIGNATURE) + goto fail_format; + + /* Determine the size of the stub */ + num_pages = H_GET_16 (abfd, filehdr_dos.e_cp); + last_page_size = H_GET_16 (abfd, filehdr_dos.e_cblp); + stubsize = num_pages * 512; + if (last_page_size != 0) + stubsize += last_page_size - 512; + + /* Save now the stub to be used later. Put the stub data to a temporary + location first as tdata still does not exist. It may not even + be ever created if we are just checking the file format of ABFD. */ + bfd_seek (abfd, 0, SEEK_SET); + go32exe_temp_stub = bfd_malloc (stubsize); + if (go32exe_temp_stub == NULL) + goto fail; + if (bfd_bread (go32exe_temp_stub, stubsize, abfd) != stubsize) + goto fail; + go32exe_temp_stub_size = stubsize; + + /* Confirm that this is a go32stub. */ + header_end = H_GET_16 (abfd, filehdr_dos.e_cparhdr) * 16UL; + if (! CONST_STRNEQ (go32exe_temp_stub + header_end, "go32stub")) + goto fail_format; + + /* Set origin to where the COFF header starts and seek there. */ + abfd->origin = stubsize; if (bfd_seek (abfd, 0, SEEK_SET) != 0) - return NULL; + goto fail; + + /* Call coff_object_p to read the COFF image. If this fails then the file + must be just a stub with no COFF data attached. */ + bfd_cleanup cleanup = coff_object_p (abfd); + if (cleanup == NULL) + goto fail; + BFD_ASSERT (cleanup == _bfd_no_cleanup); + + return go32exe_cleanup; + + fail_format: + bfd_set_error (bfd_error_wrong_format); + fail: + go32exe_cleanup (abfd); + return NULL; +} + +/* Write the stub to the output file, then call coff_write_object_contents. */ + +static bfd_boolean +go32exe_write_object_contents (bfd *abfd) +{ + const bfd_size_type pos = bfd_tell (abfd); + const bfd_size_type stubsize = coff_data (abfd)->stub_size; + + BFD_ASSERT (stubsize != 0); + + bfd_set_error (bfd_error_system_call); - return coff_object_p (abfd); + /* Write the stub. */ + abfd->origin = 0; + if (bfd_seek (abfd, 0, SEEK_SET) != 0) + return FALSE; + if (bfd_bwrite (coff_data (abfd)->stub, stubsize, abfd) != stubsize) + return FALSE; + + /* Seek back to where we were. */ + abfd->origin = stubsize; + if (bfd_seek (abfd, pos, SEEK_SET) != 0) + return FALSE; + + return coff_write_object_contents (abfd); +} + +/* mkobject hook. Called directly through bfd_set_format or via + coff_mkobject_hook etc from bfd_check_format. */ + +static bfd_boolean +go32exe_mkobject (bfd *abfd) +{ + /* Don't output to an archive. */ + if (abfd->my_archive != NULL) + return FALSE; + + if (!_bfd_go32_mkobject (abfd)) + return FALSE; + + go32exe_create_stub (abfd); + if (coff_data (abfd)->stub == NULL) + { + bfd_release (abfd, coff_data (abfd)); + return FALSE; + } + abfd->origin = coff_data (abfd)->stub_size; + + return TRUE; } diff -Nru gdb-9.1/bfd/coffswap.h gdb-10.2/bfd/coffswap.h --- gdb-9.1/bfd/coffswap.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/coffswap.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Generic COFF swapping routines, for BFD. - Copyright (C) 1990-2019 Free Software Foundation, Inc. + Copyright (C) 1990-2020 Free Software Foundation, Inc. Written by Cygnus Support. This file is part of BFD, the Binary File Descriptor library. @@ -264,9 +264,6 @@ filehdr_dst->f_nsyms = H_GET_32 (abfd, filehdr_src->f_nsyms); filehdr_dst->f_opthdr = H_GET_16 (abfd, filehdr_src->f_opthdr); filehdr_dst->f_flags = H_GET_16 (abfd, filehdr_src->f_flags); -#ifdef TIC80_TARGET_ID - filehdr_dst->f_target_id = H_GET_16 (abfd, filehdr_src->f_target_id); -#endif #ifdef COFF_ADJUST_FILEHDR_IN_POST COFF_ADJUST_FILEHDR_IN_POST (abfd, src, dst); @@ -289,9 +286,6 @@ H_PUT_32 (abfd, filehdr_in->f_nsyms, filehdr_out->f_nsyms); H_PUT_16 (abfd, filehdr_in->f_opthdr, filehdr_out->f_opthdr); H_PUT_16 (abfd, filehdr_in->f_flags, filehdr_out->f_flags); -#ifdef TIC80_TARGET_ID - H_PUT_16 (abfd, filehdr_in->f_target_id, filehdr_out->f_target_id); -#endif #ifdef COFF_ADJUST_FILEHDR_OUT_POST COFF_ADJUST_FILEHDR_OUT_POST (abfd, in, out); @@ -405,7 +399,7 @@ #if FILNMLEN != E_FILNMLEN #error we need to cope with truncating or extending FILNMLEN #else - if (numaux > 1) + if (numaux > 1 && coff_data (abfd)->pe) { if (indx == 0) memcpy (in->x_file.x_fname, ext->x_file.x_fname, @@ -731,6 +725,7 @@ return AOUTSZ; } +ATTRIBUTE_UNUSED static void coff_swap_scnhdr_in (bfd * abfd, void * ext, void * in) { @@ -757,6 +752,7 @@ #endif } +ATTRIBUTE_UNUSED static unsigned int coff_swap_scnhdr_out (bfd * abfd, void * in, void * out) { diff -Nru gdb-9.1/bfd/coff-tic30.c gdb-10.2/bfd/coff-tic30.c --- gdb-9.1/bfd/coff-tic30.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/coff-tic30.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD back-end for TMS320C30 coff binaries. - Copyright (C) 1998-2019 Free Software Foundation, Inc. + Copyright (C) 1998-2020 Free Software Foundation, Inc. Contributed by Steven Haworth (steve@pm.cse.rmit.edu.au) This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/coff-tic4x.c gdb-10.2/bfd/coff-tic4x.c --- gdb-9.1/bfd/coff-tic4x.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/coff-tic4x.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD back-end for TMS320C4X coff binaries. - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz) diff -Nru gdb-9.1/bfd/coff-tic54x.c gdb-10.2/bfd/coff-tic54x.c --- gdb-9.1/bfd/coff-tic54x.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/coff-tic54x.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD back-end for TMS320C54X coff binaries. - Copyright (C) 1999-2019 Free Software Foundation, Inc. + Copyright (C) 1999-2020 Free Software Foundation, Inc. Contributed by Timothy Wall (twall@cygnus.com) This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/coff-tic80.c gdb-10.2/bfd/coff-tic80.c --- gdb-9.1/bfd/coff-tic80.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/coff-tic80.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,711 +0,0 @@ -/* BFD back-end for Texas Instruments TMS320C80 Multimedia Video Processor (MVP). - Copyright (C) 1996-2019 Free Software Foundation, Inc. - - Written by Fred Fish (fnf@cygnus.com) - - There is nothing new under the sun. This file draws a lot on other - coff files. - - This file is part of BFD, the Binary File Descriptor library. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, 51 Franklin Street - Fifth Floor, - Boston, MA 02110-1301, USA. */ - -#include "sysdep.h" -#include "bfd.h" -#include "bfdlink.h" -#include "libbfd.h" -#ifdef _CONST -/* Newlib-based hosts define _CONST as a STDC-safe alias for const, - but to the tic80 toolchain it means something altogether different. - Since sysdep.h will have pulled in stdio.h and hence _ansi.h which - contains this definition, we must undef it before including the - tic80-specific definition. */ -#undef _CONST -#endif /* _CONST */ -#include "coff/tic80.h" -#include "coff/internal.h" -#include "libcoff.h" - -#define COFF_DEFAULT_SECTION_ALIGNMENT_POWER (2) -#define COFF_ALIGN_IN_SECTION_HEADER 1 -#define COFF_ALIGN_IN_SFLAGS 1 -#define COFF_ENCODE_ALIGNMENT(S,X) ((S).s_flags |= (((unsigned)(X) & 0xf) << 8)) -#define COFF_DECODE_ALIGNMENT(X) (((X) >> 8) & 0xf) - -#define GET_SCNHDR_FLAGS H_GET_16 -#define PUT_SCNHDR_FLAGS H_PUT_16 - -static bfd_reloc_status_type ppbase_reloc - (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **); -static bfd_reloc_status_type glob15_reloc - (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **); -static bfd_reloc_status_type glob16_reloc - (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **); -static bfd_reloc_status_type local16_reloc - (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **); - - -static reloc_howto_type tic80_howto_table[] = -{ - - HOWTO (R_RELLONG, /* type */ - 0, /* rightshift */ - 2, /* size (0 = byte, 1 = short, 2 = long) */ - 32, /* bitsize */ - FALSE, /* pc_relative */ - 0, /* bitpos */ - complain_overflow_bitfield, /* complain_on_overflow */ - NULL, /* special_function */ - "RELLONG", /* name */ - TRUE, /* partial_inplace */ - 0xffffffff, /* src_mask */ - 0xffffffff, /* dst_mask */ - FALSE), /* pcrel_offset */ - - HOWTO (R_MPPCR, /* type */ - 2, /* rightshift */ - 2, /* size (0 = byte, 1 = short, 2 = long) */ - 32, /* bitsize */ - TRUE, /* pc_relative */ - 0, /* bitpos */ - complain_overflow_signed, /* complain_on_overflow */ - NULL, /* special_function */ - "MPPCR", /* name */ - TRUE, /* partial_inplace */ - 0xffffffff, /* src_mask */ - 0xffffffff, /* dst_mask */ - TRUE), /* pcrel_offset */ - - HOWTO (R_ABS, /* type */ - 0, /* rightshift */ - 2, /* size (0 = byte, 1 = short, 2 = long) */ - 32, /* bitsize */ - FALSE, /* pc_relative */ - 0, /* bitpos */ - complain_overflow_bitfield, /* complain_on_overflow */ - NULL, /* special_function */ - "ABS", /* name */ - TRUE, /* partial_inplace */ - 0xffffffff, /* src_mask */ - 0xffffffff, /* dst_mask */ - FALSE), /* pcrel_offset */ - - HOWTO (R_PPBASE, /* type */ - 0, /* rightshift */ - 2, /* size (0 = byte, 1 = short, 2 = long) */ - 32, /* bitsize */ - FALSE, /* pc_relative */ - 0, /* bitpos */ - complain_overflow_dont, /* complain_on_overflow */ - ppbase_reloc, /* special_function */ - "PPBASE", /* name */ - TRUE, /* partial_inplace */ - 0xffffffff, /* src_mask */ - 0xffffffff, /* dst_mask */ - FALSE), /* pcrel_offset */ - - HOWTO (R_PPLBASE, /* type */ - 0, /* rightshift */ - 2, /* size (0 = byte, 1 = short, 2 = long) */ - 32, /* bitsize */ - FALSE, /* pc_relative */ - 0, /* bitpos */ - complain_overflow_dont, /* complain_on_overflow */ - ppbase_reloc, /* special_function */ - "PPLBASE", /* name */ - TRUE, /* partial_inplace */ - 0xffffffff, /* src_mask */ - 0xffffffff, /* dst_mask */ - FALSE), /* pcrel_offset */ - - HOWTO (R_PP15, /* type */ - 0, /* rightshift */ - 2, /* size (0 = byte, 1 = short, 2 = long) */ - 15, /* bitsize */ - FALSE, /* pc_relative */ - 6, /* bitpos */ - complain_overflow_dont, /* complain_on_overflow */ - glob15_reloc, /* special_function */ - "PP15", /* name */ - TRUE, /* partial_inplace */ - 0x1ffc0, /* src_mask */ - 0x1ffc0, /* dst_mask */ - FALSE), /* pcrel_offset */ - - HOWTO (R_PP15W, /* type */ - 2, /* rightshift */ - 2, /* size (0 = byte, 1 = short, 2 = long) */ - 15, /* bitsize */ - FALSE, /* pc_relative */ - 6, /* bitpos */ - complain_overflow_dont, /* complain_on_overflow */ - glob15_reloc, /* special_function */ - "PP15W", /* name */ - TRUE, /* partial_inplace */ - 0x1ffc0, /* src_mask */ - 0x1ffc0, /* dst_mask */ - FALSE), /* pcrel_offset */ - - HOWTO (R_PP15H, /* type */ - 1, /* rightshift */ - 2, /* size (0 = byte, 1 = short, 2 = long) */ - 15, /* bitsize */ - FALSE, /* pc_relative */ - 6, /* bitpos */ - complain_overflow_dont, /* complain_on_overflow */ - glob15_reloc, /* special_function */ - "PP15H", /* name */ - TRUE, /* partial_inplace */ - 0x1ffc0, /* src_mask */ - 0x1ffc0, /* dst_mask */ - FALSE), /* pcrel_offset */ - - HOWTO (R_PP16B, /* type */ - 0, /* rightshift */ - 2, /* size (0 = byte, 1 = short, 2 = long) */ - 16, /* bitsize */ - FALSE, /* pc_relative */ - 6, /* bitpos */ - complain_overflow_dont, /* complain_on_overflow */ - glob16_reloc, /* special_function */ - "PP16B", /* name */ - TRUE, /* partial_inplace */ - 0x3ffc0, /* src_mask */ - 0x3ffc0, /* dst_mask */ - FALSE), /* pcrel_offset */ - - HOWTO (R_PPL15, /* type */ - 0, /* rightshift */ - 2, /* size (0 = byte, 1 = short, 2 = long) */ - 15, /* bitsize */ - FALSE, /* pc_relative */ - 0, /* bitpos */ - complain_overflow_dont, /* complain_on_overflow */ - NULL, /* special_function */ - "PPL15", /* name */ - TRUE, /* partial_inplace */ - 0x7fff, /* src_mask */ - 0x7fff, /* dst_mask */ - FALSE), /* pcrel_offset */ - - HOWTO (R_PPL15W, /* type */ - 2, /* rightshift */ - 2, /* size (0 = byte, 1 = short, 2 = long) */ - 15, /* bitsize */ - FALSE, /* pc_relative */ - 0, /* bitpos */ - complain_overflow_dont, /* complain_on_overflow */ - NULL, /* special_function */ - "PPL15W", /* name */ - TRUE, /* partial_inplace */ - 0x7fff, /* src_mask */ - 0x7fff, /* dst_mask */ - FALSE), /* pcrel_offset */ - - HOWTO (R_PPL15H, /* type */ - 1, /* rightshift */ - 2, /* size (0 = byte, 1 = short, 2 = long) */ - 15, /* bitsize */ - FALSE, /* pc_relative */ - 0, /* bitpos */ - complain_overflow_dont, /* complain_on_overflow */ - NULL, /* special_function */ - "PPL15H", /* name */ - TRUE, /* partial_inplace */ - 0x7fff, /* src_mask */ - 0x7fff, /* dst_mask */ - FALSE), /* pcrel_offset */ - - HOWTO (R_PPL16B, /* type */ - 0, /* rightshift */ - 2, /* size (0 = byte, 1 = short, 2 = long) */ - 16, /* bitsize */ - FALSE, /* pc_relative */ - 0, /* bitpos */ - complain_overflow_dont, /* complain_on_overflow */ - local16_reloc, /* special_function */ - "PPL16B", /* name */ - TRUE, /* partial_inplace */ - 0xffff, /* src_mask */ - 0xffff, /* dst_mask */ - FALSE), /* pcrel_offset */ - - HOWTO (R_PPN15, /* type */ - 0, /* rightshift */ - -2, /* size (0 = byte, 1 = short, 2 = long) */ - 15, /* bitsize */ - FALSE, /* pc_relative */ - 6, /* bitpos */ - complain_overflow_dont, /* complain_on_overflow */ - glob15_reloc, /* special_function */ - "PPN15", /* name */ - TRUE, /* partial_inplace */ - 0x1ffc0, /* src_mask */ - 0x1ffc0, /* dst_mask */ - FALSE), /* pcrel_offset */ - - HOWTO (R_PPN15W, /* type */ - 2, /* rightshift */ - -2, /* size (0 = byte, 1 = short, 2 = long) */ - 15, /* bitsize */ - FALSE, /* pc_relative */ - 6, /* bitpos */ - complain_overflow_dont, /* complain_on_overflow */ - glob15_reloc, /* special_function */ - "PPN15W", /* name */ - TRUE, /* partial_inplace */ - 0x1ffc0, /* src_mask */ - 0x1ffc0, /* dst_mask */ - FALSE), /* pcrel_offset */ - - HOWTO (R_PPN15H, /* type */ - 1, /* rightshift */ - -2, /* size (0 = byte, 1 = short, 2 = long) */ - 15, /* bitsize */ - FALSE, /* pc_relative */ - 6, /* bitpos */ - complain_overflow_dont, /* complain_on_overflow */ - glob15_reloc, /* special_function */ - "PPN15H", /* name */ - TRUE, /* partial_inplace */ - 0x1ffc0, /* src_mask */ - 0x1ffc0, /* dst_mask */ - FALSE), /* pcrel_offset */ - - HOWTO (R_PPN16B, /* type */ - 0, /* rightshift */ - -2, /* size (0 = byte, 1 = short, 2 = long) */ - 16, /* bitsize */ - FALSE, /* pc_relative */ - 6, /* bitpos */ - complain_overflow_dont, /* complain_on_overflow */ - glob16_reloc, /* special_function */ - "PPN16B", /* name */ - TRUE, /* partial_inplace */ - 0x3ffc0, /* src_mask */ - 0x3ffc0, /* dst_mask */ - FALSE), /* pcrel_offset */ - - HOWTO (R_PPLN15, /* type */ - 0, /* rightshift */ - -2, /* size (0 = byte, 1 = short, 2 = long) */ - 15, /* bitsize */ - FALSE, /* pc_relative */ - 0, /* bitpos */ - complain_overflow_dont, /* complain_on_overflow */ - NULL, /* special_function */ - "PPLN15", /* name */ - TRUE, /* partial_inplace */ - 0x7fff, /* src_mask */ - 0x7fff, /* dst_mask */ - FALSE), /* pcrel_offset */ - - HOWTO (R_PPLN15W, /* type */ - 2, /* rightshift */ - -2, /* size (0 = byte, 1 = short, 2 = long) */ - 15, /* bitsize */ - FALSE, /* pc_relative */ - 0, /* bitpos */ - complain_overflow_dont, /* complain_on_overflow */ - NULL, /* special_function */ - "PPLN15W", /* name */ - TRUE, /* partial_inplace */ - 0x7fff, /* src_mask */ - 0x7fff, /* dst_mask */ - FALSE), /* pcrel_offset */ - - HOWTO (R_PPLN15H, /* type */ - 1, /* rightshift */ - -2, /* size (0 = byte, 1 = short, 2 = long) */ - 15, /* bitsize */ - FALSE, /* pc_relative */ - 0, /* bitpos */ - complain_overflow_dont, /* complain_on_overflow */ - NULL, /* special_function */ - "PPLN15H", /* name */ - TRUE, /* partial_inplace */ - 0x7fff, /* src_mask */ - 0x7fff, /* dst_mask */ - FALSE), /* pcrel_offset */ - - HOWTO (R_PPLN16B, /* type */ - 0, /* rightshift */ - -2, /* size (0 = byte, 1 = short, 2 = long) */ - 15, /* bitsize */ - FALSE, /* pc_relative */ - 0, /* bitpos */ - complain_overflow_dont, /* complain_on_overflow */ - local16_reloc, /* special_function */ - "PPLN16B", /* name */ - TRUE, /* partial_inplace */ - 0xffff, /* src_mask */ - 0xffff, /* dst_mask */ - FALSE) /* pcrel_offset */ -}; - -/* Special relocation functions, used when the output file is not - itself a COFF TIc80 file. */ - -/* This special function is used for the base address type - relocations. */ - -static bfd_reloc_status_type -ppbase_reloc (bfd *abfd ATTRIBUTE_UNUSED, - arelent *reloc_entry ATTRIBUTE_UNUSED, - asymbol *symbol_in ATTRIBUTE_UNUSED, - void * data ATTRIBUTE_UNUSED, - asection *input_section ATTRIBUTE_UNUSED, - bfd *output_bfd ATTRIBUTE_UNUSED, - char **error_message ATTRIBUTE_UNUSED) -{ - /* FIXME. */ - abort (); -} - -/* This special function is used for the global 15 bit relocations. */ - -static bfd_reloc_status_type -glob15_reloc (bfd *abfd ATTRIBUTE_UNUSED, - arelent *reloc_entry ATTRIBUTE_UNUSED, - asymbol *symbol_in ATTRIBUTE_UNUSED, - void * data ATTRIBUTE_UNUSED, - asection *input_section ATTRIBUTE_UNUSED, - bfd *output_bfd ATTRIBUTE_UNUSED, - char **error_message ATTRIBUTE_UNUSED) -{ - /* FIXME. */ - abort (); -} - -/* This special function is used for the global 16 bit relocations. */ - -static bfd_reloc_status_type -glob16_reloc (bfd *abfd ATTRIBUTE_UNUSED, - arelent *reloc_entry ATTRIBUTE_UNUSED, - asymbol *symbol_in ATTRIBUTE_UNUSED, - void * data ATTRIBUTE_UNUSED, - asection *input_section ATTRIBUTE_UNUSED, - bfd *output_bfd ATTRIBUTE_UNUSED, - char **error_message ATTRIBUTE_UNUSED) -{ - /* FIXME. */ - abort (); -} - -/* This special function is used for the local 16 bit relocations. */ - -static bfd_reloc_status_type -local16_reloc (bfd *abfd ATTRIBUTE_UNUSED, - arelent *reloc_entry ATTRIBUTE_UNUSED, - asymbol *symbol_in ATTRIBUTE_UNUSED, - void * data ATTRIBUTE_UNUSED, - asection *input_section ATTRIBUTE_UNUSED, - bfd *output_bfd ATTRIBUTE_UNUSED, - char **error_message ATTRIBUTE_UNUSED) -{ - /* FIXME. */ - abort (); -} - -/* Code to turn an external r_type into a pointer to an entry in the howto_table. - If passed an r_type we don't recognize the abort rather than silently failing - to generate an output file. */ - -static void -rtype2howto (arelent *cache_ptr, struct internal_reloc *dst) -{ - unsigned int i; - - for (i = 0; i < sizeof tic80_howto_table / sizeof tic80_howto_table[0]; i++) - { - if (tic80_howto_table[i].type == dst->r_type) - { - cache_ptr->howto = tic80_howto_table + i; - return; - } - } - - _bfd_error_handler (_("unsupported relocation type %#x"), - (unsigned int) dst->r_type); - cache_ptr->howto = tic80_howto_table + 0; -} - -#define RTYPE2HOWTO(cache_ptr, dst) rtype2howto (cache_ptr, dst) -#define coff_rtype_to_howto coff_tic80_rtype_to_howto - -static reloc_howto_type * -coff_tic80_rtype_to_howto (bfd *abfd ATTRIBUTE_UNUSED, - asection *sec, - struct internal_reloc *rel, - struct coff_link_hash_entry *h ATTRIBUTE_UNUSED, - struct internal_syment *sym ATTRIBUTE_UNUSED, - bfd_vma *addendp) -{ - arelent genrel; - - if (rel -> r_symndx == -1 && addendp != NULL) - { - /* This is a TI "internal relocation", which means that the relocation - amount is the amount by which the current section is being relocated - in the output section. */ - *addendp = (sec -> output_section -> vma + sec -> output_offset) - sec -> vma; - } - RTYPE2HOWTO (&genrel, rel); - return genrel.howto; -} - -#ifndef BADMAG -#define BADMAG(x) TIC80BADMAG(x) -#endif - -#define coff_relocate_section coff_tic80_relocate_section - -/* We need a special relocation routine to handle the PP relocs. Most - of this is a copy of _bfd_coff_generic_relocate_section. */ - -static bfd_boolean -coff_tic80_relocate_section (bfd *output_bfd, - struct bfd_link_info *info, - bfd *input_bfd, - asection *input_section, - bfd_byte *contents, - struct internal_reloc *relocs, - struct internal_syment *syms, - asection **sections) -{ - struct internal_reloc *rel; - struct internal_reloc *relend; - - rel = relocs; - relend = rel + input_section->reloc_count; - for (; rel < relend; rel++) - { - long symndx; - struct coff_link_hash_entry *h; - struct internal_syment *sym; - bfd_vma addend; - bfd_vma val; - reloc_howto_type *howto; - bfd_reloc_status_type rstat; - bfd_vma addr; - - symndx = rel->r_symndx; - - if (symndx == -1) - { - h = NULL; - sym = NULL; - } - else - { - h = obj_coff_sym_hashes (input_bfd)[symndx]; - sym = syms + symndx; - } - - /* COFF treats common symbols in one of two ways. Either the - size of the symbol is included in the section contents, or it - is not. We assume that the size is not included, and force - the rtype_to_howto function to adjust the addend as needed. */ - - if (sym != NULL && sym->n_scnum != 0) - addend = - sym->n_value; - else - addend = 0; - - howto = bfd_coff_rtype_to_howto (input_bfd, input_section, rel, h, - sym, &addend); - if (howto == NULL) - return FALSE; - - val = 0; - - if (h == NULL) - { - asection *sec; - - if (symndx == -1) - { - sec = bfd_abs_section_ptr; - val = 0; - } - else - { - sec = sections[symndx]; - val = (sec->output_section->vma - + sec->output_offset - + sym->n_value); - if (! obj_pe (output_bfd)) - val -= sec->vma; - } - } - else - { - if (h->root.type == bfd_link_hash_defined - || h->root.type == bfd_link_hash_defweak) - { - asection *sec; - - sec = h->root.u.def.section; - val = (h->root.u.def.value - + sec->output_section->vma - + sec->output_offset); - } - - else if (! bfd_link_relocatable (info)) - (*info->callbacks->undefined_symbol) - (info, h->root.root.string, input_bfd, input_section, - rel->r_vaddr - input_section->vma, TRUE); - } - - addr = rel->r_vaddr - input_section->vma; - - /* FIXME: This code assumes little endian, but the PP can - apparently be bi-endian. I don't know if the bi-endianness - applies to the instruction set or just to the data. */ - switch (howto->type) - { - default: - case R_ABS: - case R_RELLONGX: - case R_PPL15: - case R_PPL15W: - case R_PPL15H: - case R_PPLN15: - case R_PPLN15W: - case R_PPLN15H: - rstat = _bfd_final_link_relocate (howto, input_bfd, input_section, - contents, addr, val, addend); - break; - - case R_PP15: - case R_PP15W: - case R_PP15H: - case R_PPN15: - case R_PPN15W: - case R_PPN15H: - /* Offset the address so that we can use 4 byte relocations. */ - rstat = _bfd_final_link_relocate (howto, input_bfd, input_section, - contents + 2, addr, val, addend); - break; - - case R_PP16B: - case R_PPN16B: - { - /* The most significant bit is stored in bit 6. */ - bfd_byte hold; - - hold = contents[addr + 4]; - contents[addr + 4] &=~ 0x20; - contents[addr + 4] |= (contents[addr] >> 1) & 0x20; - rstat = _bfd_final_link_relocate (howto, input_bfd, input_section, - contents + 2, addr, - val, addend); - contents[addr] &=~ 0x40; - contents[addr] |= (contents[addr + 4] << 1) & 0x40; - contents[addr + 4] &=~ 0x20; - contents[addr + 4] |= hold & 0x20; - break; - } - - case R_PPL16B: - case R_PPLN16B: - { - /* The most significant bit is stored in bit 28. */ - bfd_byte hold; - - hold = contents[addr + 1]; - contents[addr + 1] &=~ 0x80; - contents[addr + 1] |= (contents[addr + 3] << 3) & 0x80; - rstat = _bfd_final_link_relocate (howto, input_bfd, input_section, - contents, addr, - val, addend); - contents[addr + 3] &= ~0x10; - contents[addr + 3] |= (contents[addr + 1] >> 3) & 0x10; - contents[addr + 1] &=~ 0x80; - contents[addr + 1] |= hold & 0x80; - break; - } - - case R_PPBASE: - /* Parameter RAM is from 0x1000000 to 0x1000800. */ - contents[addr] &=~ 0x3; - if (val >= 0x1000000 && val < 0x1000800) - contents[addr] |= 0x3; - else - contents[addr] |= 0x2; - rstat = bfd_reloc_ok; - break; - - case R_PPLBASE: - /* Parameter RAM is from 0x1000000 to 0x1000800. */ - contents[addr + 2] &= ~0xc0; - if (val >= 0x1000000 && val < 0x1000800) - contents[addr + 2] |= 0xc0; - else - contents[addr + 2] |= 0x80; - rstat = bfd_reloc_ok; - break; - } - - switch (rstat) - { - default: - abort (); - case bfd_reloc_ok: - break; - case bfd_reloc_outofrange: - _bfd_error_handler - /* xgettext: c-format */ - (_("%pB: bad reloc address %#" PRIx64 " in section `%pA'"), - input_bfd, (uint64_t) rel->r_vaddr, input_section); - return FALSE; - case bfd_reloc_overflow: - { - const char *name; - char buf[SYMNMLEN + 1]; - - if (symndx == -1) - name = "*ABS*"; - else if (h != NULL) - name = NULL; - else - { - name = _bfd_coff_internal_syment_name (input_bfd, sym, buf); - if (name == NULL) - return FALSE; - } - - (*info->callbacks->reloc_overflow) - (info, (h ? &h->root : NULL), name, howto->name, - (bfd_vma) 0, input_bfd, input_section, - rel->r_vaddr - input_section->vma); - } - } - } - return TRUE; -} - -#define TIC80COFF 1 /* Customize coffcode.h */ -#undef C_AUTOARG /* Clashes with TIc80's C_UEXT */ -#undef C_LASTENT /* Clashes with TIc80's C_STATLAB */ - -#ifndef bfd_pe_print_pdata -#define bfd_pe_print_pdata NULL -#endif - -#include "coffcode.h" - -CREATE_LITTLE_COFF_TARGET_VEC (tic80_coff_vec, "coff-tic80", D_PAGED, 0, '_', NULL, COFF_SWAP_TABLE) diff -Nru gdb-9.1/bfd/coff-x86_64.c gdb-10.2/bfd/coff-x86_64.c --- gdb-9.1/bfd/coff-x86_64.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/coff-x86_64.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD back-end for AMD 64 COFF files. - Copyright (C) 2006-2019 Free Software Foundation, Inc. + Copyright (C) 2006-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -824,3 +824,76 @@ COFF_SWAP_TABLE }; + +/* Entry for big object files. */ + +#ifdef COFF_WITH_PE_BIGOBJ +const bfd_target + TARGET_SYM_BIG = +{ + TARGET_NAME_BIG, + bfd_target_coff_flavour, + BFD_ENDIAN_LITTLE, /* Data byte order is little. */ + BFD_ENDIAN_LITTLE, /* Header byte order is little. */ + + (HAS_RELOC | EXEC_P /* Object flags. */ + | HAS_LINENO | HAS_DEBUG + | HAS_SYMS | HAS_LOCALS | WP_TEXT | D_PAGED | BFD_COMPRESS | BFD_DECOMPRESS), + + (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC /* Section flags. */ +#if defined(COFF_WITH_PE) + | SEC_LINK_ONCE | SEC_LINK_DUPLICATES | SEC_READONLY | SEC_DEBUGGING +#endif + | SEC_CODE | SEC_DATA | SEC_EXCLUDE ), + +#ifdef TARGET_UNDERSCORE + TARGET_UNDERSCORE, /* Leading underscore. */ +#else + 0, /* Leading underscore. */ +#endif + '/', /* Ar_pad_char. */ + 15, /* Ar_max_namelen. */ + 0, /* match priority. */ + + bfd_getl64, bfd_getl_signed_64, bfd_putl64, + bfd_getl32, bfd_getl_signed_32, bfd_putl32, + bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* Data. */ + bfd_getl64, bfd_getl_signed_64, bfd_putl64, + bfd_getl32, bfd_getl_signed_32, bfd_putl32, + bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* Hdrs. */ + + /* Note that we allow an object file to be treated as a core file as well. */ + { /* bfd_check_format. */ + _bfd_dummy_target, + amd64coff_object_p, + bfd_generic_archive_p, + amd64coff_object_p + }, + { /* bfd_set_format. */ + _bfd_bool_bfd_false_error, + coff_mkobject, + _bfd_generic_mkarchive, + _bfd_bool_bfd_false_error + }, + { /* bfd_write_contents. */ + _bfd_bool_bfd_false_error, + coff_write_object_contents, + _bfd_write_archive_contents, + _bfd_bool_bfd_false_error + }, + + BFD_JUMP_TABLE_GENERIC (coff), + BFD_JUMP_TABLE_COPY (coff), + BFD_JUMP_TABLE_CORE (_bfd_nocore), + BFD_JUMP_TABLE_ARCHIVE (_bfd_archive_coff), + BFD_JUMP_TABLE_SYMBOLS (coff), + BFD_JUMP_TABLE_RELOCS (coff), + BFD_JUMP_TABLE_WRITE (coff), + BFD_JUMP_TABLE_LINK (coff), + BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic), + + NULL, + + &bigobj_swap_table +}; +#endif \ No newline at end of file diff -Nru gdb-9.1/bfd/coff-z80.c gdb-10.2/bfd/coff-z80.c --- gdb-9.1/bfd/coff-z80.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/coff-z80.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD back-end for Zilog Z80 COFF binaries. - Copyright (C) 2005-2019 Free Software Foundation, Inc. + Copyright (C) 2005-2020 Free Software Foundation, Inc. Contributed by Arnold Metselaar This file is part of BFD, the Binary File Descriptor library. @@ -26,39 +26,219 @@ #include "coff/z80.h" #include "coff/internal.h" #include "libcoff.h" +#include "libiberty.h" #define COFF_DEFAULT_SECTION_ALIGNMENT_POWER 0 -static reloc_howto_type r_imm32 = -HOWTO (R_IMM32, 0, 2, 32, FALSE, 0, - complain_overflow_dont, 0, "r_imm32", TRUE, 0xffffffff, 0xffffffff, - FALSE); - -static reloc_howto_type r_imm24 = -HOWTO (R_IMM24, 0, 1, 24, FALSE, 0, - complain_overflow_dont, 0, "r_imm24", TRUE, 0x00ffffff, 0x00ffffff, - FALSE); - -static reloc_howto_type r_imm16 = -HOWTO (R_IMM16, 0, 1, 16, FALSE, 0, - complain_overflow_dont, 0, "r_imm16", TRUE, 0x0000ffff, 0x0000ffff, - FALSE); - -static reloc_howto_type r_imm8 = -HOWTO (R_IMM8, 0, 0, 8, FALSE, 0, - complain_overflow_bitfield, 0, "r_imm8", TRUE, 0x000000ff, 0x000000ff, - FALSE); - -static reloc_howto_type r_jr = -HOWTO (R_JR, 0, 0, 8, TRUE, 0, - complain_overflow_signed, 0, "r_jr", FALSE, 0, 0xFF, - FALSE); - -static reloc_howto_type r_off8 = -HOWTO (R_OFF8, 0, 0, 8, FALSE, 0, - complain_overflow_signed, 0,"r_off8", FALSE, 0, 0xff, - FALSE); +typedef struct { + bfd_reloc_code_real_type r_type; + reloc_howto_type howto; +} bfd_howto_type; +#define BFD_EMPTY_HOWTO(rt,x) {rt, EMPTY_HOWTO(x)} +#define BFD_HOWTO(rt,a,b,c,d,e,f,g,h,i,j,k,l,m) {rt, HOWTO(a,b,c,d,e,f,g,h,i,j,k,l,m)} + +static bfd_howto_type howto_table[] = +{ + BFD_EMPTY_HOWTO (BFD_RELOC_NONE, 0), + + BFD_HOWTO (BFD_RELOC_32, + R_IMM32, /* type */ + 0, /* rightshift */ + 2, /* size (0 = byte, 1 = short, 2 = long) */ + 32, /* bitsize */ + FALSE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_bitfield, /* complain_on_overflow */ + 0, /* special_function */ + "r_imm32", /* name */ + FALSE, /* partial_inplace */ + 0xffffffff, /* src_mask */ + 0xffffffff, /* dst_mask */ + FALSE), /* pcrel_offset */ + + BFD_HOWTO (BFD_RELOC_24, + R_IMM24, /* type */ + 0, /* rightshift */ + 1, /* size (0 = byte, 1 = short, 2 = long) */ + 24, /* bitsize */ + FALSE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_bitfield, /* complain_on_overflow */ + 0, /* special_function */ + "r_imm24", /* name */ + FALSE, /* partial_inplace */ + 0x00ffffff, /* src_mask */ + 0x00ffffff, /* dst_mask */ + FALSE), /* pcrel_offset */ + + BFD_HOWTO (BFD_RELOC_16, + R_IMM16, /* type */ + 0, /* rightshift */ + 1, /* size (0 = byte, 1 = short, 2 = long) */ + 16, /* bitsize */ + FALSE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_bitfield, /* complain_on_overflow */ + 0, /* special_function */ + "r_imm16", /* name */ + FALSE, /* partial_inplace */ + 0x0000ffff, /* src_mask */ + 0x0000ffff, /* dst_mask */ + FALSE), /* pcrel_offset */ + + BFD_HOWTO (BFD_RELOC_8, + R_IMM8, /* type */ + 0, /* rightshift */ + 0, /* size (0 = byte, 1 = short, 2 = long) */ + 8, /* bitsize */ + FALSE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_bitfield, /* complain_on_overflow */ + 0, /* special_function */ + "r_imm8", /* name */ + FALSE, /* partial_inplace */ + 0x000000ff, /* src_mask */ + 0x000000ff, /* dst_mask */ + FALSE), /* pcrel_offset */ + + BFD_HOWTO (BFD_RELOC_8_PCREL, + R_JR, /* type */ + 0, /* rightshift */ + 0, /* size (0 = byte, 1 = short, 2 = long) */ + 8, /* bitsize */ + TRUE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_signed, /* complain_on_overflow */ + 0, /* special_function */ + "r_jr", /* name */ + FALSE, /* partial_inplace */ + 0, /* src_mask */ + 0xFF, /* dst_mask */ + TRUE), /* pcrel_offset */ + + BFD_HOWTO (BFD_RELOC_Z80_DISP8, + R_OFF8, /* type */ + 0, /* rightshift */ + 0, /* size (0 = byte, 1 = short, 2 = long) */ + 8, /* bitsize */ + FALSE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_signed, /* complain_on_overflow */ + 0, /* special_function */ + "r_off8", /* name */ + FALSE, /* partial_inplace */ + 0, /* src_mask */ + 0xff, /* dst_mask */ + FALSE), /* pcrel_offset */ + + BFD_HOWTO (BFD_RELOC_Z80_BYTE0, + R_BYTE0, /* type */ + 0, /* rightshift */ + 0, /* size (0 = byte, 1 = short, 2 = long) */ + 8, /* bitsize */ + FALSE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_dont, /* complain_on_overflow */ + 0, /* special_function */ + "r_byte0", /* name */ + FALSE, /* partial_inplace */ + 0, /* src_mask */ + 0xff, /* dst_mask */ + FALSE), /* pcrel_offset */ + + BFD_HOWTO (BFD_RELOC_Z80_BYTE1, + R_BYTE1, /* type */ + 8, /* rightshift */ + 0, /* size (0 = byte, 1 = short, 2 = long) */ + 8, /* bitsize */ + FALSE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_dont, /* complain_on_overflow */ + 0, /* special_function */ + "r_byte1", /* name */ + FALSE, /* partial_inplace */ + 0, /* src_mask */ + 0xff, /* dst_mask */ + FALSE), /* pcrel_offset */ + + BFD_HOWTO (BFD_RELOC_Z80_BYTE2, + R_BYTE2, /* type */ + 16, /* rightshift */ + 0, /* size (0 = byte, 1 = short, 2 = long) */ + 8, /* bitsize */ + FALSE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_dont, /* complain_on_overflow */ + 0, /* special_function */ + "r_byte2", /* name */ + FALSE, /* partial_inplace */ + 0, /* src_mask */ + 0xff, /* dst_mask */ + FALSE), /* pcrel_offset */ + + BFD_HOWTO (BFD_RELOC_Z80_BYTE3, + R_BYTE3, /* type */ + 24, /* rightshift */ + 0, /* size (0 = byte, 1 = short, 2 = long) */ + 8, /* bitsize */ + FALSE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_dont, /* complain_on_overflow */ + 0, /* special_function */ + "r_byte3", /* name */ + FALSE, /* partial_inplace */ + 0, /* src_mask */ + 0xff, /* dst_mask */ + FALSE), /* pcrel_offset */ + + BFD_HOWTO (BFD_RELOC_Z80_WORD0, + R_WORD0, /* type */ + 0, /* rightshift */ + 0, /* size (0 = byte, 1 = short, 2 = long) */ + 16, /* bitsize */ + FALSE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_dont, /* complain_on_overflow */ + 0, /* special_function */ + "r_word0", /* name */ + FALSE, /* partial_inplace */ + 0, /* src_mask */ + 0xffff, /* dst_mask */ + FALSE), /* pcrel_offset */ + + BFD_HOWTO (BFD_RELOC_Z80_WORD1, + R_WORD1, /* type */ + 16, /* rightshift */ + 0, /* size (0 = byte, 1 = short, 2 = long) */ + 16, /* bitsize */ + FALSE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_dont, /* complain_on_overflow */ + 0, /* special_function */ + "r_word1", /* name */ + FALSE, /* partial_inplace */ + 0, /* src_mask */ + 0xffff, /* dst_mask */ + FALSE), /* pcrel_offset */ + + BFD_HOWTO (BFD_RELOC_Z80_16_BE, + R_IMM16BE, /* type */ + 0, /* rightshift */ + 1, /* size (0 = byte, 1 = short, 2 = long) */ + 16, /* bitsize */ + FALSE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_bitfield, /* complain_on_overflow */ + 0, /* special_function */ + "r_imm16be", /* name */ + FALSE, /* partial_inplace */ + 0x0000ffff, /* src_mask */ + 0x0000ffff, /* dst_mask */ + FALSE), /* pcrel_offset */ +}; + +#define NUM_HOWTOS ARRAY_SIZE (howto_table) #define BADMAG(x) Z80BADMAG(x) #define Z80 1 /* Customize coffcode.h. */ @@ -74,34 +254,19 @@ dst->r_stuff[1] = 'C'; /* Code to turn a r_type into a howto ptr, uses the above howto table. */ - static void rtype2howto (arelent *internal, struct internal_reloc *dst) { - switch (dst->r_type) + unsigned i; + for (i = 0; i < NUM_HOWTOS; i++) { - default: - internal->howto = NULL; - break; - case R_IMM8: - internal->howto = &r_imm8; - break; - case R_IMM16: - internal->howto = &r_imm16; - break; - case R_IMM24: - internal->howto = &r_imm24; - break; - case R_IMM32: - internal->howto = &r_imm32; - break; - case R_JR: - internal->howto = &r_jr; - break; - case R_OFF8: - internal->howto = &r_off8; - break; + if (howto_table[i].howto.type == dst->r_type) + { + internal->howto = &howto_table[i].howto; + return; + } } + internal->howto = NULL; } #define RTYPE2HOWTO(internal, relocentry) rtype2howto (internal, relocentry) @@ -110,35 +275,23 @@ coff_z80_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED, bfd_reloc_code_real_type code) { - switch (code) - { - case BFD_RELOC_8: return & r_imm8; - case BFD_RELOC_16: return & r_imm16; - case BFD_RELOC_24: return & r_imm24; - case BFD_RELOC_32: return & r_imm32; - case BFD_RELOC_8_PCREL: return & r_jr; - case BFD_RELOC_Z80_DISP8: return & r_off8; - default: BFD_FAIL (); - return NULL; - } + unsigned i; + for (i = 0; i < NUM_HOWTOS; i++) + if (howto_table[i].r_type == code) + return &howto_table[i].howto; + + BFD_FAIL (); + return NULL; } static reloc_howto_type * coff_z80_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED, const char *r_name) { - if (strcasecmp (r_imm8.name, r_name) == 0) - return &r_imm8; - if (strcasecmp (r_imm16.name, r_name) == 0) - return &r_imm16; - if (strcasecmp (r_imm24.name, r_name) == 0) - return &r_imm24; - if (strcasecmp (r_imm32.name, r_name) == 0) - return &r_imm32; - if (strcasecmp (r_jr.name, r_name) == 0) - return &r_jr; - if (strcasecmp (r_off8.name, r_name) == 0) - return &r_off8; + unsigned i; + for (i = 0; i < NUM_HOWTOS; i++) + if (strcasecmp(howto_table[i].howto.name, r_name) == 0) + return &howto_table[i].howto; return NULL; } @@ -180,14 +333,15 @@ unsigned int *dst_ptr) { asection * input_section = link_order->u.indirect.section; - int val; + int val = bfd_coff_reloc16_get_value (reloc, link_info, input_section); switch (reloc->howto->type) { case R_OFF8: - val = bfd_coff_reloc16_get_value (reloc, link_info, - input_section); - if (val>127 || val<-128) /* Test for overflow. */ + if (reloc->howto->partial_inplace) + val += (signed char)(bfd_get_8 ( in_abfd, data+*src_ptr) + & reloc->howto->src_mask); + if (val>127 || val<-128) /* Test for overflow. */ (*link_info->callbacks->reloc_overflow) (link_info, NULL, bfd_asymbol_name (*reloc->sym_ptr_ptr), reloc->howto->name, reloc->addend, input_section->owner, @@ -198,26 +352,55 @@ (*src_ptr) += 1; break; + case R_BYTE3: + bfd_put_8 (in_abfd, val >> 24, data + *dst_ptr); + (*dst_ptr) += 1; + (*src_ptr) += 1; + break; + + case R_BYTE2: + bfd_put_8 (in_abfd, val >> 16, data + *dst_ptr); + (*dst_ptr) += 1; + (*src_ptr) += 1; + break; + + case R_BYTE1: + bfd_put_8 (in_abfd, val >> 8, data + *dst_ptr); + (*dst_ptr) += 1; + (*src_ptr) += 1; + break; + case R_IMM8: - val = bfd_get_8 ( in_abfd, data+*src_ptr) - + bfd_coff_reloc16_get_value (reloc, link_info, input_section); + if (reloc->howto->partial_inplace) + val += bfd_get_8 ( in_abfd, data+*src_ptr) & reloc->howto->src_mask; + /* Fall through. */ + case R_BYTE0: bfd_put_8 (in_abfd, val, data + *dst_ptr); (*dst_ptr) += 1; (*src_ptr) += 1; break; + case R_WORD1: + bfd_put_16 (in_abfd, val >> 16, data + *dst_ptr); + (*dst_ptr) += 2; + (*src_ptr) += 2; + break; + case R_IMM16: - val = bfd_get_16 ( in_abfd, data+*src_ptr) - + bfd_coff_reloc16_get_value (reloc, link_info, input_section); + if (reloc->howto->partial_inplace) + val += bfd_get_16 ( in_abfd, data+*src_ptr) & reloc->howto->src_mask; + /* Fall through. */ + case R_WORD0: bfd_put_16 (in_abfd, val, data + *dst_ptr); (*dst_ptr) += 2; (*src_ptr) += 2; break; case R_IMM24: - val = bfd_get_16 ( in_abfd, data+*src_ptr) - + (bfd_get_8 ( in_abfd, data+*src_ptr+2) << 16) - + bfd_coff_reloc16_get_value (reloc, link_info, input_section); + if (reloc->howto->partial_inplace) + val += (bfd_get_16 ( in_abfd, data+*src_ptr) + + (bfd_get_8 ( in_abfd, data+*src_ptr+2) << 16)) + & reloc->howto->src_mask; bfd_put_16 (in_abfd, val, data + *dst_ptr); bfd_put_8 (in_abfd, val >> 16, data + *dst_ptr+2); (*dst_ptr) += 3; @@ -225,8 +408,8 @@ break; case R_IMM32: - val = bfd_get_32 ( in_abfd, data+*src_ptr) - + bfd_coff_reloc16_get_value (reloc, link_info, input_section); + if (reloc->howto->partial_inplace) + val += bfd_get_32 ( in_abfd, data+*src_ptr) & reloc->howto->src_mask; bfd_put_32 (in_abfd, val, data + *dst_ptr); (*dst_ptr) += 4; (*src_ptr) += 4; @@ -234,15 +417,13 @@ case R_JR: { - bfd_vma dst = bfd_coff_reloc16_get_value (reloc, link_info, - input_section); + if (reloc->howto->partial_inplace) + val += (signed char)(bfd_get_8 ( in_abfd, data+*src_ptr) + & reloc->howto->src_mask); bfd_vma dot = (*dst_ptr + input_section->output_offset + input_section->output_section->vma); - int gap = dst - dot - 1; /* -1, Since the offset is relative - to the value of PC after reading - the offset. */ - + int gap = val - dot; if (gap >= 128 || gap < -128) (*link_info->callbacks->reloc_overflow) (link_info, NULL, bfd_asymbol_name (*reloc->sym_ptr_ptr), @@ -255,11 +436,32 @@ break; } + case R_IMM16BE: + if (reloc->howto->partial_inplace) + val += (bfd_get_8 ( in_abfd, data+*src_ptr+0) * 0x100 + + bfd_get_8 ( in_abfd, data+*src_ptr+1)) & reloc->howto->src_mask; + + bfd_put_8 (in_abfd, val >> 8, data + *dst_ptr+0); + bfd_put_8 (in_abfd, val, data + *dst_ptr+1); + (*dst_ptr) += 2; + (*src_ptr) += 2; + break; + default: abort (); } } +static int +z80_is_local_label_name (bfd * abfd ATTRIBUTE_UNUSED, + const char * name) +{ + return (name[0] == '.' && name[1] == 'L') || + _bfd_coff_is_local_label_name (abfd, name); +} + +#define coff_bfd_is_local_label_name z80_is_local_label_name + #define coff_reloc16_extra_cases extra_case #define coff_bfd_reloc_type_lookup coff_z80_reloc_type_lookup #define coff_bfd_reloc_name_lookup coff_z80_reloc_name_lookup diff -Nru gdb-9.1/bfd/coff-z8k.c gdb-10.2/bfd/coff-z8k.c --- gdb-9.1/bfd/coff-z8k.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/coff-z8k.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD back-end for Zilog Z800n COFF binaries. - Copyright (C) 1992-2019 Free Software Foundation, Inc. + Copyright (C) 1992-2020 Free Software Foundation, Inc. Contributed by Cygnus Support. Written by Steve Chamberlain, . diff -Nru gdb-9.1/bfd/compress.c gdb-10.2/bfd/compress.c --- gdb-9.1/bfd/compress.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/compress.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Compressed section support (intended for debug sections). - Copyright (C) 2008-2019 Free Software Foundation, Inc. + Copyright (C) 2008-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -255,6 +255,9 @@ /* PR 24753: Linker created sections can be larger than the file size, eg if they are being used to hold stubs. */ && (bfd_section_flags (sec) & SEC_LINKER_CREATED) == 0 + /* PR 24753: Sections which have no content should also be + excluded as they contain no size on disk. */ + && (bfd_section_flags (sec) & SEC_HAS_CONTENTS) != 0 /* The MMO file format supports its own special compression technique, but it uses COMPRESS_SECTION_NONE when loading a section's contents. */ diff -Nru gdb-9.1/bfd/config.bfd gdb-10.2/bfd/config.bfd --- gdb-9.1/bfd/config.bfd 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/config.bfd 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ # config.bfd # -# Copyright (C) 2012-2019 Free Software Foundation, Inc. +# Copyright (C) 2012-2020 Free Software Foundation, Inc. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -53,7 +53,8 @@ echo "*** Use or1k-*-elf or or1k-*-linux as the target instead" >&2 exit 1 ;; - c30-*-*aout* | tic30-*-*aout* | \ + arm*-*-symbianelf* | \ + ia64*-*-* | \ null) if test "x$enable_obsolete" != xyes; then echo "*** Configuration $targ is obsolete." >&2 @@ -85,6 +86,7 @@ arm-*-oabi | \ arm-*-riscix* | \ arm-epoc-pe* | \ + c30-*-*aout* | tic30-*-*aout* | \ cr16c-*-* | \ h8300*-*-coff | \ h8500*-*-coff | \ @@ -141,6 +143,7 @@ mips*-sgi-* | \ mips*el-*-rtems* | \ powerpc-*-lynxos* | powerpc-*-windiss* | \ + powerpcle-*-pe | powerpcle-*-winnt* | powerpcle-*-cygwin* | \ sh*-*-symbianelf* | sh5*-*-* | sh64*-*-* | \ sparc*-*-*aout* | \ sparc*-*-chorus* | \ @@ -151,6 +154,7 @@ vax-*-bsd* | vax-*-ultrix* | vax-*-vms* | \ w65-*-* | \ we32k-*-* | \ + xc16x-*-* | \ null) echo "*** Configuration $targ is obsolete." >&2 echo "*** Support has been REMOVED." >&2 @@ -207,7 +211,7 @@ x86_64*) targ_archs=bfd_i386_arch ;; xtensa*) targ_archs=bfd_xtensa_arch ;; xgate) targ_archs=bfd_xgate_arch ;; -z80|r800) targ_archs=bfd_z80_arch ;; +z80*|r800|z180|gbz80|ez80*) targ_archs=bfd_z80_arch ;; z8k*) targ_archs=bfd_z8k_arch ;; *) targ_archs=bfd_${targ_cpu}_arch ;; esac @@ -338,15 +342,11 @@ ;; arm-*-nacl*) targ_defvec=arm_elf32_nacl_le_vec - targ_selvecs="arm_elf32_nacl_be_vec i386_elf32_nacl_vec" - targ64_selvecs="x86_64_elf32_nacl_vec x86_64_elf64_nacl_vec" - targ_archs="$targ_archs bfd_i386_arch" + targ_selvecs="arm_elf32_nacl_be_vec" ;; armeb-*-nacl*) targ_defvec=arm_elf32_nacl_be_vec - targ_selvecs="arm_elf32_nacl_le_vec i386_elf32_nacl_vec" - targ64_selvecs="x86_64_elf32_nacl_vec x86_64_elf64_nacl_vec" - targ_archs="$targ_archs bfd_i386_arch" + targ_selvecs="arm_elf32_nacl_le_vec" ;; armeb-*-netbsdelf*) targ_defvec=arm_elf32_be_vec @@ -413,9 +413,6 @@ targ_underscore=yes ;; - c30-*-*aout* | tic30-*-*aout*) - targ_defvec=tic30_aout_vec - ;; c30-*-*coff* | tic30-*-*coff*) targ_defvec=tic30_coff_vec ;; @@ -637,12 +634,6 @@ targ_selvecs="iamcu_elf32_vec i386_pei_vec" targ64_selvecs="x86_64_elf64_vec x86_64_elf32_vec x86_64_pei_vec l1om_elf64_vec k1om_elf64_vec" ;; - i[3-7]86-*-nacl*) - targ_defvec=i386_elf32_nacl_vec - targ_selvecs="arm_elf32_nacl_be_vec arm_elf32_nacl_le_vec" - targ64_selvecs="x86_64_elf64_nacl_vec x86_64_elf32_nacl_vec" - targ_archs="$targ_archs bfd_arm_arch" - ;; i[3-7]86-*-redox*) targ_defvec=i386_elf32_vec targ_selvecs= @@ -693,15 +684,9 @@ targ_selvecs="i386_elf32_vec iamcu_elf32_vec x86_64_elf32_vec i386_pei_vec x86_64_pei_vec l1om_elf64_vec k1om_elf64_vec" want64=true ;; - x86_64-*-nacl*) - targ_defvec=x86_64_elf32_nacl_vec - targ_selvecs="i386_elf32_nacl_vec x86_64_elf64_nacl_vec arm_elf32_nacl_be_vec arm_elf32_nacl_le_vec" - targ_archs="$targ_archs bfd_arm_arch" - want64=true - ;; x86_64-*-mingw* | x86_64-*-pe | x86_64-*-pep | x86_64-*-cygwin) targ_defvec=x86_64_pe_vec - targ_selvecs="x86_64_pe_vec x86_64_pei_vec x86_64_pe_be_vec x86_64_elf64_vec l1om_elf64_vec k1om_elf64_vec i386_pe_vec i386_pei_vec i386_elf32_vec iamcu_elf32_vec" + targ_selvecs="x86_64_pe_vec x86_64_pei_vec x86_64_pe_big_vec x86_64_elf64_vec l1om_elf64_vec k1om_elf64_vec i386_pe_vec i386_pei_vec i386_elf32_vec iamcu_elf32_vec" want64=true targ_underscore=no ;; @@ -751,7 +736,7 @@ ;; i[3-7]86-*-mingw32* | i[3-7]86-*-cygwin* | i[3-7]86-*-winnt | i[3-7]86-*-pe) targ_defvec=i386_pe_vec - targ_selvecs="i386_pe_vec i386_pei_vec i386_elf32_vec iamcu_elf32_vec" + targ_selvecs="i386_pe_vec i386_pe_big_vec i386_pei_vec i386_elf32_vec iamcu_elf32_vec" targ_underscore=yes ;; i[3-7]86-*-vxworks*) @@ -1162,10 +1147,6 @@ targ_selvecs="rs6000_xcoff_vec powerpc_elf32_vec powerpc_boot_vec" targ64_selvecs="powerpc_elf64_vec powerpc_elf64_le_vec" ;; - powerpcle-*-pe | powerpcle-*-winnt* | powerpcle-*-cygwin*) - targ_defvec=powerpc_pe_le_vec - targ_selvecs="powerpc_pei_le_vec powerpc_pei_vec powerpc_pe_le_vec powerpc_pe_vec" - ;; pru-*-*) targ_defvec=pru_elf32_vec @@ -1333,11 +1314,6 @@ targ_selvecs="tic6x_elf32_linux_be_vec tic6x_elf32_le_vec tic6x_elf32_be_vec" ;; - tic80*-*-*) - targ_defvec=tic80_coff_vec - targ_underscore=yes - ;; - #ifdef BFD64 tilegx-*-*) targ_defvec=tilegx_elf64_le_vec @@ -1392,6 +1368,10 @@ targ_selvecs="wasm_vec" ;; + xc16x-*-elf) + targ_defvec=xc16x_elf32_vec + ;; + xgate-*-*) targ_defvec=xgate_elf32_vec targ_selvecs="xgate_elf32_vec" @@ -1405,15 +1385,17 @@ targ_defvec=xtensa_elf32_le_vec targ_selvecs=xtensa_elf32_be_vec ;; - xc16x-*-elf) - targ_defvec=xc16x_elf32_vec - ;; - z80-*-*) + z80-*-coff) targ_defvec=z80_coff_vec targ_underscore=no ;; + z80-*-elf) + targ_defvec=z80_elf32_vec + targ_underscore=no + ;; + z8k*-*-*) targ_defvec=z8k_coff_vec targ_underscore=yes diff -Nru gdb-9.1/bfd/config.in gdb-10.2/bfd/config.in --- gdb-9.1/bfd/config.in 2018-11-07 19:00:23.000000000 +0000 +++ gdb-10.2/bfd/config.in 2021-04-25 04:06:26.000000000 +0000 @@ -143,6 +143,9 @@ /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H +/* Define to 1 if you have the header file. */ +#undef HAVE_LIMITS_H + /* Define to 1 if the system has the type `long double'. */ #undef HAVE_LONG_DOUBLE @@ -416,3 +419,6 @@ /* Define to 1 if you need to in order for `stat' and other things to work. */ #undef _POSIX_SOURCE + +/* Use structured /proc on Solaris. */ +#undef _STRUCTURED_PROC diff -Nru gdb-9.1/bfd/configure gdb-10.2/bfd/configure --- gdb-9.1/bfd/configure 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/configure 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for bfd 2.33.50. +# Generated by GNU Autoconf 2.69 for bfd 2.35.50. # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. @@ -587,8 +587,8 @@ # Identity of this package. PACKAGE_NAME='bfd' PACKAGE_TARNAME='bfd' -PACKAGE_VERSION='2.33.50' -PACKAGE_STRING='bfd 2.33.50' +PACKAGE_VERSION='2.35.50' +PACKAGE_STRING='bfd 2.35.50' PACKAGE_BUGREPORT='' PACKAGE_URL='' @@ -699,6 +699,7 @@ DEBUGDIR PLUGINS_FALSE PLUGINS_TRUE +LARGEFILE_CPPFLAGS OTOOL64 OTOOL LIPO @@ -1391,7 +1392,7 @@ # 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.33.50 to adapt to many kinds of systems. +\`configure' configures bfd 2.35.50 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1462,7 +1463,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of bfd 2.33.50:";; + short | recursive ) echo "Configuration of bfd 2.35.50:";; esac cat <<\_ACEOF @@ -1589,7 +1590,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -bfd configure 2.33.50 +bfd configure 2.35.50 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2237,7 +2238,7 @@ 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.33.50, which was +It was created by bfd $as_me 2.35.50, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -4187,7 +4188,7 @@ # Define the identity of the package. PACKAGE='bfd' - VERSION='2.33.50' + VERSION='2.35.50' cat >>confdefs.h <<_ACEOF @@ -11728,7 +11729,7 @@ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11731 "configure" +#line 11732 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -11834,7 +11835,7 @@ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11837 "configure" +#line 11838 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -12186,15 +12187,56 @@ case "${host}" in - sparc-*-solaris*|i[3-7]86-*-solaris*) - # On native 32bit sparc and ia32 solaris, large-file and procfs support - # are mutually exclusive; and without procfs support, the bfd/ elf module - # cannot provide certain routines such as elfcore_write_prpsinfo - # or elfcore_write_prstatus. So unless the user explicitly requested - # large-file support through the --enable-largefile switch, disable - # large-file support in favor of procfs support. - test "${target}" = "${host}" -a "x$plugins" = xno \ - && : ${enable_largefile="no"} + sparc-*-solaris*|i?86-*-solaris*) + # On native 32-bit Solaris/SPARC and x86, large-file and procfs support + # were mutually exclusive until Solaris 11.3. Without procfs support, + # the bfd/ elf module cannot provide certain routines such as + # elfcore_write_prpsinfo or elfcore_write_prstatus. So unless the user + # explicitly requested large-file support through the + # --enable-largefile switch, disable large-file support in favor of + # procfs support. + # + # Check if is incompatible with large-file support. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#define _FILE_OFFSET_BITS 64 +#define _STRUCTURED_PROC 1 +#include +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + acx_cv_procfs_lfs=yes +else + acx_cv_procfs_lfs=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + # + # Forcefully disable large-file support only if necessary, gdb is in + # tree and enabled. + if test "${target}" = "${host}" -a "$acx_cv_procfs_lfs" = no \ + -a -d $srcdir/../gdb -a "$enable_gdb" != no; then + : ${enable_largefile="no"} + if test "$plugins" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: +plugin support disabled; require large-file support which is incompatible with GDB." >&5 +$as_echo "$as_me: WARNING: +plugin support disabled; require large-file support which is incompatible with GDB." >&2;} + plugins=no + fi + fi + # + # Explicitly undef _FILE_OFFSET_BITS if enable_largefile=no for the + # benefit of g++ 9+ which predefines it on Solaris. + if test "$enable_largefile" = no; then + LARGEFILE_CPPFLAGS="-U_FILE_OFFSET_BITS" + + fi ;; esac @@ -12400,6 +12442,30 @@ +case "${target}" in + hppa*64*-*-* | vax-*-netbsdelf*) ;; + *-*-*aout* | i[3-7]86-*-bsd* | i[3-7]86-*-msdos* | ns32k-*-* | \ + pdp11-*-* | vax-*-*bsd*) + if test "$plugins" = "yes"; then + if test "${enable_plugins+set}" = set; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Enabling plugins for AOUT is experimental" >&5 +$as_echo "$as_me: WARNING: Enabling plugins for AOUT is experimental" >&2;} + else + plugins=no + fi + fi ;; + hppa*-*-hpux* | *-*-*vms* | \ + powerpc*-*-aix* | powerpc-*-beos* | powerpc-*-macos* | rs6000-*-*) + if test "$plugins" = "yes"; then + if test "${enable_plugins+set}" = set; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Enabling plugins may result in ar creating non-standard archives for ${target}" >&5 +$as_echo "$as_me: WARNING: Enabling plugins may result in ar creating non-standard archives for ${target}" >&2;} + else + plugins=no + fi + fi ;; +esac + if test "$plugins" = "yes"; then PLUGINS_TRUE= PLUGINS_FALSE='#' @@ -13465,20 +13531,9 @@ fi -for ac_header in alloca.h stddef.h string.h strings.h stdlib.h time.h unistd.h wchar.h wctype.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - -for ac_header in fcntl.h sys/file.h sys/time.h sys/stat.h sys/resource.h +for ac_header in alloca.h fcntl.h limits.h stddef.h stdlib.h string.h \ + strings.h sys/file.h sys/resource.h sys/stat.h sys/time.h \ + time.h unistd.h wchar.h wctype.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" @@ -14673,7 +14728,7 @@ ecoff="ecofflink.lo $coffgen" xcoff="xcofflink.lo $coffgen" -elfxx_x86="elfxx-x86.lo elf-ifunc.lo elf-nacl.lo elf-vxworks.lo" +elfxx_x86="elfxx-x86.lo elf-ifunc.lo elf-vxworks.lo" for vec in $selvecs do target_size=32 @@ -14758,12 +14813,12 @@ i386_coff_lynx_vec) tb="$tb cf-i386lynx.lo lynx-core.lo $coff" ;; i386_elf32_vec) tb="$tb elf32-i386.lo $elfxx_x86 elf32.lo $elf" ;; i386_elf32_fbsd_vec) tb="$tb elf32-i386.lo $elfxx_x86 elf32.lo $elf" ;; - i386_elf32_nacl_vec) tb="$tb elf32-i386.lo $elfxx_x86 elf32.lo $elf" ;; i386_elf32_sol2_vec) tb="$tb elf32-i386.lo $elfxx_x86 elf32.lo $elf" ;; i386_elf32_vxworks_vec) tb="$tb elf32-i386.lo $elfxx_x86 elf32.lo $elf" ;; i386_mach_o_vec) tb="$tb mach-o-i386.lo" ;; i386_msdos_vec) tb="$tb i386msdos.lo" ;; i386_pe_vec) tb="$tb pe-i386.lo peigen.lo $coff" ;; + i386_pe_big_vec) tb="$tb pe-i386.lo peigen.lo $coff" ;; i386_pei_vec) tb="$tb pei-i386.lo peigen.lo $coff" ;; iamcu_elf32_vec) tb="$tb elf32-i386.lo $elfxx_x86 elf32.lo $elf" ;; ia64_elf32_be_vec) tb="$tb elf32-ia64.lo elfxx-ia64.lo elf32.lo $elf" ;; @@ -14775,10 +14830,10 @@ ia64_pei_vec) tb="$tb pei-ia64.lo pepigen.lo $coff"; target_size=64 ;; ip2k_elf32_vec) tb="$tb elf32-ip2k.lo elf32.lo $elf" ;; iq2000_elf32_vec) tb="$tb elf32-iq2000.lo elf32.lo $elf" ;; - k1om_elf64_vec) tb="$tb elf64-x86-64.lo elfxx-x86.lo elf-ifunc.lo elf-nacl.lo elf64.lo $elf"; target_size=64 ;; - k1om_elf64_fbsd_vec) tb="$tb elf64-x86-64.lo elfxx-x86.lo elf-ifunc.lo elf-nacl.lo elf64.lo $elf"; target_size=64 ;; - l1om_elf64_vec) tb="$tb elf64-x86-64.lo elfxx-x86.lo elf-ifunc.lo elf-nacl.lo elf64.lo $elf"; target_size=64 ;; - l1om_elf64_fbsd_vec) tb="$tb elf64-x86-64.lo elfxx-x86.lo elf-ifunc.lo elf-nacl.lo elf64.lo $elf"; target_size=64 ;; + k1om_elf64_vec) tb="$tb elf64-x86-64.lo elfxx-x86.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;; + k1om_elf64_fbsd_vec) tb="$tb elf64-x86-64.lo elfxx-x86.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;; + l1om_elf64_vec) tb="$tb elf64-x86-64.lo elfxx-x86.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;; + l1om_elf64_fbsd_vec) tb="$tb elf64-x86-64.lo elfxx-x86.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;; lm32_elf32_vec) tb="$tb elf32-lm32.lo elf32.lo $elf" ;; lm32_elf32_fdpic_vec) tb="$tb elf32-lm32.lo elf32.lo $elf" ;; m32c_elf32_vec) tb="$tb elf32-m32c.lo elf32.lo $elf" ;; @@ -14859,10 +14914,6 @@ powerpc_elf64_vec) tb="$tb elf64-ppc.lo elf64-gen.lo elf64.lo $elf"; target_size=64 ;; powerpc_elf64_le_vec) tb="$tb elf64-ppc.lo elf64-gen.lo elf64.lo $elf" target_size=64 ;; powerpc_elf64_fbsd_vec) tb="$tb elf64-ppc.lo elf64-gen.lo elf64.lo $elf" target_size=64 ;; - powerpc_pe_vec) tb="$tb pe-ppc.lo peigen.lo $coff" ;; - powerpc_pe_le_vec) tb="$tb pe-ppc.lo peigen.lo $coff" ;; - powerpc_pei_vec) tb="$tb pei-ppc.lo peigen.lo $coff" ;; - powerpc_pei_le_vec) tb="$tb pei-ppc.lo peigen.lo $coff" ;; powerpc_xcoff_vec) tb="$tb coff-rs6000.lo $xcoff" ;; pru_elf32_vec) tb="$tb elf32-pru.lo elf32.lo $elf" ;; riscv_elf32_vec) tb="$tb elf32-riscv.lo elfxx-riscv.lo elf32.lo $elf" ;; @@ -14877,8 +14928,8 @@ rx_elf32_linux_le_vec) tb="$tb elf32-rx.lo elf32.lo $elf" ;; s390_elf32_vec) tb="$tb elf32-s390.lo elf32.lo $elf" ;; s390_elf64_vec) tb="$tb elf64-s390.lo elf64.lo $elf"; target_size=64 ;; - score_elf32_be_vec) tb="$tb elf32-score.lo elf32-score7.lo elf32.lo $elf"; want64=true; target_size=64 ;; - score_elf32_le_vec) tb="$tb elf32-score.lo elf32-score7.lo elf32.lo $elf"; want64=true; target_size=64 ;; + score_elf32_be_vec) tb="$tb elf32-score.lo elf32-score7.lo elf32.lo elf64.lo $elf"; want64=true; target_size=64 ;; + score_elf32_le_vec) tb="$tb elf32-score.lo elf32-score7.lo elf32.lo elf64.lo $elf"; want64=true; target_size=64 ;; sh_coff_vec) tb="$tb coff-sh.lo $coff" ;; sh_coff_le_vec) tb="$tb coff-sh.lo $coff" ;; sh_coff_small_vec) tb="$tb coff-sh.lo $coff" ;; @@ -14903,7 +14954,6 @@ sparc_elf64_sol2_vec) tb="$tb elf64-sparc.lo elfxx-sparc.lo elf-vxworks.lo elf64.lo $elf"; target_size=64 ;; spu_elf32_vec) tb="$tb elf32-spu.lo elf32.lo $elf" ;; sym_vec) tb="$tb xsym.lo" ;; - tic30_aout_vec) tb="$tb aout-tic30.lo" ;; tic30_coff_vec) tb="$tb coff-tic30.lo $coffgen" ;; tic4x_coff0_vec) tb="$tb coff-tic4x.lo $coffgen" ;; tic4x_coff0_beh_vec) tb="$tb coff-tic4x.lo $coffgen" ;; @@ -14923,7 +14973,6 @@ tic6x_elf32_c6000_le_vec) tb="$tb elf32-tic6x.lo elf32.lo $elf" ;; tic6x_elf32_linux_be_vec) tb="$tb elf32-tic6x.lo elf32.lo $elf" ;; tic6x_elf32_linux_le_vec) tb="$tb elf32-tic6x.lo elf32.lo $elf" ;; - tic80_coff_vec) tb="$tb coff-tic80.lo $coff" ;; tilegx_elf32_be_vec) tb="$tb elf32-tilegx.lo elfxx-tilegx.lo elf32.lo $elf" ; target_size=32 ;; tilegx_elf32_le_vec) tb="$tb elf32-tilegx.lo elfxx-tilegx.lo elf32.lo $elf" ; target_size=32 ;; tilegx_elf64_be_vec) tb="$tb elf64-tilegx.lo elfxx-tilegx.lo elf64.lo $elf" ; target_size=64 ;; @@ -14940,15 +14989,13 @@ wasm32_elf32_vec) tb="$tb elf32-wasm32.lo elf32.lo $elf" ;; x86_64_coff_vec) tb="$tb coff-x86_64.lo $coff"; target_size=64 ;; x86_64_elf32_vec) tb="$tb elf64-x86-64.lo $elfxx_x86 elf64.lo elf32.lo $elf"; target_size=64 ;; - x86_64_elf32_nacl_vec) tb="$tb elf64-x86-64.lo $elfxx_x86 elf64.lo elf32.lo $elf"; target_size=64 ;; x86_64_elf64_vec) tb="$tb elf64-x86-64.lo $elfxx_x86 elf64.lo $elf"; target_size=64 ;; x86_64_elf64_cloudabi_vec) tb="$tb elf64-x86-64.lo $elfxx_x86 elf64.lo $elf"; target_size=64 ;; x86_64_elf64_fbsd_vec) tb="$tb elf64-x86-64.lo $elfxx_x86 elf64.lo $elf"; target_size=64 ;; - x86_64_elf64_nacl_vec) tb="$tb elf64-x86-64.lo $elfxx_x86 elf64.lo $elf"; target_size=64 ;; x86_64_elf64_sol2_vec) tb="$tb elf64-x86-64.lo $elfxx_x86 elf64.lo $elf"; target_size=64 ;; x86_64_mach_o_vec) tb="$tb mach-o-x86-64.lo" ;; x86_64_pe_vec) tb="$tb pe-x86_64.lo pex64igen.lo $coff"; target_size=64 ;; - x86_64_pe_be_vec) tb="$tb pe-x86_64.lo pex64igen.lo $coff"; target_size=64 ;; + x86_64_pe_big_vec) tb="$tb pe-x86_64.lo pex64igen.lo $coff"; target_size=64 ;; x86_64_pei_vec) tb="$tb pei-x86_64.lo pex64igen.lo $coff"; target_size=64 ;; xc16x_elf32_vec) tb="$tb elf32-xc16x.lo elf32.lo $elf" ;; xgate_elf32_vec) tb="$tb elf32-xgate.lo elf32.lo $elf" ;; @@ -14956,6 +15003,7 @@ xtensa_elf32_be_vec) tb="$tb xtensa-isa.lo xtensa-modules.lo elf32-xtensa.lo elf32.lo $elf" ;; xtensa_elf32_le_vec) tb="$tb xtensa-isa.lo xtensa-modules.lo elf32-xtensa.lo elf32.lo $elf" ;; z80_coff_vec) tb="$tb coff-z80.lo reloc16.lo $coffgen" ;; + z80_elf32_vec) tb="$tb elf32-z80.lo elf32.lo $elf" ;; z8k_coff_vec) tb="$tb coff-z8k.lo reloc16.lo $coff" ;; # These appear out of order in targets.c @@ -15115,7 +15163,7 @@ ;; arm-*-freebsd* | arm-*-kfreebsd*-gnu) COREFILE='' ;; - arm-*-netbsd* | arm-*-openbsd*) + arm*-*-netbsd* | arm-*-openbsd*) COREFILE=netbsd-core.lo ;; arm-*-riscix) COREFILE=trad-core.lo ;; @@ -15176,7 +15224,7 @@ ;; i[3-7]86-*-isc*) COREFILE=trad-core.lo ;; i[3-7]86-*-aix*) COREFILE=aix386-core.lo ;; - mips-*-netbsd* | mips*-*-openbsd*) + mips*-*-netbsd* | mips*-*-openbsd*) COREFILE=netbsd-core.lo ;; mips-sgi-irix4*) COREFILE=irix-core.lo ;; @@ -15293,7 +15341,10 @@ # ELF corefile support has several flavors, but all of # them use something called - for ac_header in sys/procfs.h + +$as_echo "#define _STRUCTURED_PROC 1" >>confdefs.h + + for ac_header in sys/procfs.h do : ac_fn_c_check_header_mongrel "$LINENO" "sys/procfs.h" "ac_cv_header_sys_procfs_h" "$ac_includes_default" if test "x$ac_cv_header_sys_procfs_h" = xyes; then : @@ -15306,7 +15357,8 @@ done if test "$ac_cv_header_sys_procfs_h" = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for prstatus_t in sys/procfs.h" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for prstatus_t in sys/procfs.h" >&5 $as_echo_n "checking for prstatus_t in sys/procfs.h... " >&6; } if ${bfd_cv_have_sys_procfs_type_prstatus_t+:} false; then : $as_echo_n "(cached) " >&6 @@ -15315,8 +15367,6 @@ /* end confdefs.h. */ #define _SYSCALL32 -/* Needed for new procfs interface on sparc-solaris. */ -#define _STRUCTURED_PROC 1 #include int main () @@ -15343,7 +15393,8 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_prstatus_t" >&5 $as_echo "$bfd_cv_have_sys_procfs_type_prstatus_t" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for prstatus32_t in sys/procfs.h" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for prstatus32_t in sys/procfs.h" >&5 $as_echo_n "checking for prstatus32_t in sys/procfs.h... " >&6; } if ${bfd_cv_have_sys_procfs_type_prstatus32_t+:} false; then : $as_echo_n "(cached) " >&6 @@ -15352,8 +15403,6 @@ /* end confdefs.h. */ #define _SYSCALL32 -/* Needed for new procfs interface on sparc-solaris. */ -#define _STRUCTURED_PROC 1 #include int main () @@ -15380,7 +15429,8 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_prstatus32_t" >&5 $as_echo "$bfd_cv_have_sys_procfs_type_prstatus32_t" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for prstatus_t.pr_who in sys/procfs.h" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for prstatus_t.pr_who in sys/procfs.h" >&5 $as_echo_n "checking for prstatus_t.pr_who in sys/procfs.h... " >&6; } if ${bfd_cv_have_sys_procfs_type_member_prstatus_t_pr_who+:} false; then : $as_echo_n "(cached) " >&6 @@ -15389,8 +15439,6 @@ /* end confdefs.h. */ #define _SYSCALL32 -/* Needed for new procfs interface on sparc-solaris. */ -#define _STRUCTURED_PROC 1 #include int main () @@ -15417,7 +15465,8 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_member_prstatus_t_pr_who" >&5 $as_echo "$bfd_cv_have_sys_procfs_type_member_prstatus_t_pr_who" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for prstatus32_t.pr_who in sys/procfs.h" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for prstatus32_t.pr_who in sys/procfs.h" >&5 $as_echo_n "checking for prstatus32_t.pr_who in sys/procfs.h... " >&6; } if ${bfd_cv_have_sys_procfs_type_member_prstatus32_t_pr_who+:} false; then : $as_echo_n "(cached) " >&6 @@ -15426,8 +15475,6 @@ /* end confdefs.h. */ #define _SYSCALL32 -/* Needed for new procfs interface on sparc-solaris. */ -#define _STRUCTURED_PROC 1 #include int main () @@ -15454,7 +15501,8 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_member_prstatus32_t_pr_who" >&5 $as_echo "$bfd_cv_have_sys_procfs_type_member_prstatus32_t_pr_who" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pstatus_t in sys/procfs.h" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pstatus_t in sys/procfs.h" >&5 $as_echo_n "checking for pstatus_t in sys/procfs.h... " >&6; } if ${bfd_cv_have_sys_procfs_type_pstatus_t+:} false; then : $as_echo_n "(cached) " >&6 @@ -15463,8 +15511,6 @@ /* end confdefs.h. */ #define _SYSCALL32 -/* Needed for new procfs interface on sparc-solaris. */ -#define _STRUCTURED_PROC 1 #include int main () @@ -15491,7 +15537,8 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_pstatus_t" >&5 $as_echo "$bfd_cv_have_sys_procfs_type_pstatus_t" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pxstatus_t in sys/procfs.h" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pxstatus_t in sys/procfs.h" >&5 $as_echo_n "checking for pxstatus_t in sys/procfs.h... " >&6; } if ${bfd_cv_have_sys_procfs_type_pxstatus_t+:} false; then : $as_echo_n "(cached) " >&6 @@ -15500,8 +15547,6 @@ /* end confdefs.h. */ #define _SYSCALL32 -/* Needed for new procfs interface on sparc-solaris. */ -#define _STRUCTURED_PROC 1 #include int main () @@ -15528,7 +15573,8 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_pxstatus_t" >&5 $as_echo "$bfd_cv_have_sys_procfs_type_pxstatus_t" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pstatus32_t in sys/procfs.h" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pstatus32_t in sys/procfs.h" >&5 $as_echo_n "checking for pstatus32_t in sys/procfs.h... " >&6; } if ${bfd_cv_have_sys_procfs_type_pstatus32_t+:} false; then : $as_echo_n "(cached) " >&6 @@ -15537,8 +15583,6 @@ /* end confdefs.h. */ #define _SYSCALL32 -/* Needed for new procfs interface on sparc-solaris. */ -#define _STRUCTURED_PROC 1 #include int main () @@ -15565,7 +15609,8 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_pstatus32_t" >&5 $as_echo "$bfd_cv_have_sys_procfs_type_pstatus32_t" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for prpsinfo_t in sys/procfs.h" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for prpsinfo_t in sys/procfs.h" >&5 $as_echo_n "checking for prpsinfo_t in sys/procfs.h... " >&6; } if ${bfd_cv_have_sys_procfs_type_prpsinfo_t+:} false; then : $as_echo_n "(cached) " >&6 @@ -15574,8 +15619,6 @@ /* end confdefs.h. */ #define _SYSCALL32 -/* Needed for new procfs interface on sparc-solaris. */ -#define _STRUCTURED_PROC 1 #include int main () @@ -15602,7 +15645,8 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_prpsinfo_t" >&5 $as_echo "$bfd_cv_have_sys_procfs_type_prpsinfo_t" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for prpsinfo_t.pr_pid in sys/procfs.h" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for prpsinfo_t.pr_pid in sys/procfs.h" >&5 $as_echo_n "checking for prpsinfo_t.pr_pid in sys/procfs.h... " >&6; } if ${bfd_cv_have_sys_procfs_type_member_prpsinfo_t_pr_pid+:} false; then : $as_echo_n "(cached) " >&6 @@ -15611,8 +15655,6 @@ /* end confdefs.h. */ #define _SYSCALL32 -/* Needed for new procfs interface on sparc-solaris. */ -#define _STRUCTURED_PROC 1 #include int main () @@ -15639,7 +15681,8 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_member_prpsinfo_t_pr_pid" >&5 $as_echo "$bfd_cv_have_sys_procfs_type_member_prpsinfo_t_pr_pid" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for prpsinfo32_t in sys/procfs.h" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for prpsinfo32_t in sys/procfs.h" >&5 $as_echo_n "checking for prpsinfo32_t in sys/procfs.h... " >&6; } if ${bfd_cv_have_sys_procfs_type_prpsinfo32_t+:} false; then : $as_echo_n "(cached) " >&6 @@ -15648,8 +15691,6 @@ /* end confdefs.h. */ #define _SYSCALL32 -/* Needed for new procfs interface on sparc-solaris. */ -#define _STRUCTURED_PROC 1 #include int main () @@ -15676,7 +15717,8 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_prpsinfo32_t" >&5 $as_echo "$bfd_cv_have_sys_procfs_type_prpsinfo32_t" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for prpsinfo32_t.pr_pid in sys/procfs.h" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for prpsinfo32_t.pr_pid in sys/procfs.h" >&5 $as_echo_n "checking for prpsinfo32_t.pr_pid in sys/procfs.h... " >&6; } if ${bfd_cv_have_sys_procfs_type_member_prpsinfo32_t_pr_pid+:} false; then : $as_echo_n "(cached) " >&6 @@ -15685,8 +15727,6 @@ /* end confdefs.h. */ #define _SYSCALL32 -/* Needed for new procfs interface on sparc-solaris. */ -#define _STRUCTURED_PROC 1 #include int main () @@ -15713,7 +15753,8 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_member_prpsinfo32_t_pr_pid" >&5 $as_echo "$bfd_cv_have_sys_procfs_type_member_prpsinfo32_t_pr_pid" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for psinfo_t in sys/procfs.h" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for psinfo_t in sys/procfs.h" >&5 $as_echo_n "checking for psinfo_t in sys/procfs.h... " >&6; } if ${bfd_cv_have_sys_procfs_type_psinfo_t+:} false; then : $as_echo_n "(cached) " >&6 @@ -15722,8 +15763,6 @@ /* end confdefs.h. */ #define _SYSCALL32 -/* Needed for new procfs interface on sparc-solaris. */ -#define _STRUCTURED_PROC 1 #include int main () @@ -15750,7 +15789,8 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_psinfo_t" >&5 $as_echo "$bfd_cv_have_sys_procfs_type_psinfo_t" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for psinfo_t.pr_pid in sys/procfs.h" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for psinfo_t.pr_pid in sys/procfs.h" >&5 $as_echo_n "checking for psinfo_t.pr_pid in sys/procfs.h... " >&6; } if ${bfd_cv_have_sys_procfs_type_member_psinfo_t_pr_pid+:} false; then : $as_echo_n "(cached) " >&6 @@ -15759,8 +15799,6 @@ /* end confdefs.h. */ #define _SYSCALL32 -/* Needed for new procfs interface on sparc-solaris. */ -#define _STRUCTURED_PROC 1 #include int main () @@ -15787,7 +15825,8 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_member_psinfo_t_pr_pid" >&5 $as_echo "$bfd_cv_have_sys_procfs_type_member_psinfo_t_pr_pid" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for psinfo32_t in sys/procfs.h" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for psinfo32_t in sys/procfs.h" >&5 $as_echo_n "checking for psinfo32_t in sys/procfs.h... " >&6; } if ${bfd_cv_have_sys_procfs_type_psinfo32_t+:} false; then : $as_echo_n "(cached) " >&6 @@ -15796,8 +15835,6 @@ /* end confdefs.h. */ #define _SYSCALL32 -/* Needed for new procfs interface on sparc-solaris. */ -#define _STRUCTURED_PROC 1 #include int main () @@ -15824,7 +15861,8 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_psinfo32_t" >&5 $as_echo "$bfd_cv_have_sys_procfs_type_psinfo32_t" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for psinfo32_t.pr_pid in sys/procfs.h" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for psinfo32_t.pr_pid in sys/procfs.h" >&5 $as_echo_n "checking for psinfo32_t.pr_pid in sys/procfs.h... " >&6; } if ${bfd_cv_have_sys_procfs_type_member_psinfo32_t_pr_pid+:} false; then : $as_echo_n "(cached) " >&6 @@ -15833,8 +15871,6 @@ /* end confdefs.h. */ #define _SYSCALL32 -/* Needed for new procfs interface on sparc-solaris. */ -#define _STRUCTURED_PROC 1 #include int main () @@ -15861,7 +15897,8 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_member_psinfo32_t_pr_pid" >&5 $as_echo "$bfd_cv_have_sys_procfs_type_member_psinfo32_t_pr_pid" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lwpstatus_t in sys/procfs.h" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lwpstatus_t in sys/procfs.h" >&5 $as_echo_n "checking for lwpstatus_t in sys/procfs.h... " >&6; } if ${bfd_cv_have_sys_procfs_type_lwpstatus_t+:} false; then : $as_echo_n "(cached) " >&6 @@ -15870,8 +15907,6 @@ /* end confdefs.h. */ #define _SYSCALL32 -/* Needed for new procfs interface on sparc-solaris. */ -#define _STRUCTURED_PROC 1 #include int main () @@ -15898,7 +15933,8 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_lwpstatus_t" >&5 $as_echo "$bfd_cv_have_sys_procfs_type_lwpstatus_t" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lwpxstatus_t in sys/procfs.h" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lwpxstatus_t in sys/procfs.h" >&5 $as_echo_n "checking for lwpxstatus_t in sys/procfs.h... " >&6; } if ${bfd_cv_have_sys_procfs_type_lwpxstatus_t+:} false; then : $as_echo_n "(cached) " >&6 @@ -15907,8 +15943,6 @@ /* end confdefs.h. */ #define _SYSCALL32 -/* Needed for new procfs interface on sparc-solaris. */ -#define _STRUCTURED_PROC 1 #include int main () @@ -15935,7 +15969,8 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_lwpxstatus_t" >&5 $as_echo "$bfd_cv_have_sys_procfs_type_lwpxstatus_t" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lwpstatus_t.pr_context in sys/procfs.h" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lwpstatus_t.pr_context in sys/procfs.h" >&5 $as_echo_n "checking for lwpstatus_t.pr_context in sys/procfs.h... " >&6; } if ${bfd_cv_have_sys_procfs_type_member_lwpstatus_t_pr_context+:} false; then : $as_echo_n "(cached) " >&6 @@ -15944,8 +15979,6 @@ /* end confdefs.h. */ #define _SYSCALL32 -/* Needed for new procfs interface on sparc-solaris. */ -#define _STRUCTURED_PROC 1 #include int main () @@ -15972,7 +16005,8 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_member_lwpstatus_t_pr_context" >&5 $as_echo "$bfd_cv_have_sys_procfs_type_member_lwpstatus_t_pr_context" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lwpstatus_t.pr_reg in sys/procfs.h" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lwpstatus_t.pr_reg in sys/procfs.h" >&5 $as_echo_n "checking for lwpstatus_t.pr_reg in sys/procfs.h... " >&6; } if ${bfd_cv_have_sys_procfs_type_member_lwpstatus_t_pr_reg+:} false; then : $as_echo_n "(cached) " >&6 @@ -15981,8 +16015,6 @@ /* end confdefs.h. */ #define _SYSCALL32 -/* Needed for new procfs interface on sparc-solaris. */ -#define _STRUCTURED_PROC 1 #include int main () @@ -16009,7 +16041,8 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_member_lwpstatus_t_pr_reg" >&5 $as_echo "$bfd_cv_have_sys_procfs_type_member_lwpstatus_t_pr_reg" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lwpstatus_t.pr_fpreg in sys/procfs.h" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lwpstatus_t.pr_fpreg in sys/procfs.h" >&5 $as_echo_n "checking for lwpstatus_t.pr_fpreg in sys/procfs.h... " >&6; } if ${bfd_cv_have_sys_procfs_type_member_lwpstatus_t_pr_fpreg+:} false; then : $as_echo_n "(cached) " >&6 @@ -16018,8 +16051,6 @@ /* end confdefs.h. */ #define _SYSCALL32 -/* Needed for new procfs interface on sparc-solaris. */ -#define _STRUCTURED_PROC 1 #include int main () @@ -16046,7 +16077,8 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_member_lwpstatus_t_pr_fpreg" >&5 $as_echo "$bfd_cv_have_sys_procfs_type_member_lwpstatus_t_pr_fpreg" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for win32_pstatus_t in sys/procfs.h" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for win32_pstatus_t in sys/procfs.h" >&5 $as_echo_n "checking for win32_pstatus_t in sys/procfs.h... " >&6; } if ${bfd_cv_have_sys_procfs_type_win32_pstatus_t+:} false; then : $as_echo_n "(cached) " >&6 @@ -16055,8 +16087,6 @@ /* end confdefs.h. */ #define _SYSCALL32 -/* Needed for new procfs interface on sparc-solaris. */ -#define _STRUCTURED_PROC 1 #include int main () @@ -16953,7 +16983,7 @@ # 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.33.50, which was +This file was extended by bfd $as_me 2.35.50, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -17019,7 +17049,7 @@ 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.33.50 +bfd config.status 2.35.50 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff -Nru gdb-9.1/bfd/configure.ac gdb-10.2/bfd/configure.ac --- gdb-9.1/bfd/configure.ac 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/configure.ac 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ dnl Process this file with autoconf to produce a configure script. dnl -dnl Copyright (C) 2012-2019 Free Software Foundation, Inc. +dnl Copyright (C) 2012-2020 Free Software Foundation, Inc. dnl dnl This file is free software; you can redistribute it and/or modify dnl it under the terms of the GNU General Public License as published by @@ -44,6 +44,30 @@ # AC_PLUGINS setting $plugins is called by ACX_LARGEFILE. ACX_LARGEFILE +changequote(,)dnl +case "${target}" in + hppa*64*-*-* | vax-*-netbsdelf*) ;; + *-*-*aout* | i[3-7]86-*-bsd* | i[3-7]86-*-msdos* | ns32k-*-* | \ + pdp11-*-* | vax-*-*bsd*) +changequote([,])dnl + if test "$plugins" = "yes"; then + if test "${enable_plugins+set}" = set; then + AC_MSG_WARN(Enabling plugins for AOUT is experimental) + else + plugins=no + fi + fi ;; + hppa*-*-hpux* | *-*-*vms* | \ + powerpc*-*-aix* | powerpc-*-beos* | powerpc-*-macos* | rs6000-*-*) + if test "$plugins" = "yes"; then + if test "${enable_plugins+set}" = set; then + AC_MSG_WARN(Enabling plugins may result in ar creating non-standard archives for ${target}) + else + plugins=no + fi + fi ;; +esac + AM_CONDITIONAL(PLUGINS, test "$plugins" = "yes") AC_ARG_ENABLE(64-bit-bfd, @@ -219,8 +243,9 @@ BFD_CC_FOR_BUILD -AC_CHECK_HEADERS(alloca.h stddef.h string.h strings.h stdlib.h time.h unistd.h wchar.h wctype.h) -AC_CHECK_HEADERS(fcntl.h sys/file.h sys/time.h sys/stat.h sys/resource.h) +AC_CHECK_HEADERS(alloca.h fcntl.h limits.h stddef.h stdlib.h string.h \ + strings.h sys/file.h sys/resource.h sys/stat.h sys/time.h \ + time.h unistd.h wchar.h wctype.h) GCC_HEADER_STDINT(bfd_stdint.h) AC_HEADER_TIME AC_HEADER_DIRENT @@ -409,7 +434,7 @@ ecoff="ecofflink.lo $coffgen" xcoff="xcofflink.lo $coffgen" -elfxx_x86="elfxx-x86.lo elf-ifunc.lo elf-nacl.lo elf-vxworks.lo" +elfxx_x86="elfxx-x86.lo elf-ifunc.lo elf-vxworks.lo" for vec in $selvecs do target_size=32 @@ -494,12 +519,12 @@ i386_coff_lynx_vec) tb="$tb cf-i386lynx.lo lynx-core.lo $coff" ;; i386_elf32_vec) tb="$tb elf32-i386.lo $elfxx_x86 elf32.lo $elf" ;; i386_elf32_fbsd_vec) tb="$tb elf32-i386.lo $elfxx_x86 elf32.lo $elf" ;; - i386_elf32_nacl_vec) tb="$tb elf32-i386.lo $elfxx_x86 elf32.lo $elf" ;; i386_elf32_sol2_vec) tb="$tb elf32-i386.lo $elfxx_x86 elf32.lo $elf" ;; i386_elf32_vxworks_vec) tb="$tb elf32-i386.lo $elfxx_x86 elf32.lo $elf" ;; i386_mach_o_vec) tb="$tb mach-o-i386.lo" ;; i386_msdos_vec) tb="$tb i386msdos.lo" ;; i386_pe_vec) tb="$tb pe-i386.lo peigen.lo $coff" ;; + i386_pe_big_vec) tb="$tb pe-i386.lo peigen.lo $coff" ;; i386_pei_vec) tb="$tb pei-i386.lo peigen.lo $coff" ;; iamcu_elf32_vec) tb="$tb elf32-i386.lo $elfxx_x86 elf32.lo $elf" ;; ia64_elf32_be_vec) tb="$tb elf32-ia64.lo elfxx-ia64.lo elf32.lo $elf" ;; @@ -511,10 +536,10 @@ ia64_pei_vec) tb="$tb pei-ia64.lo pepigen.lo $coff"; target_size=64 ;; ip2k_elf32_vec) tb="$tb elf32-ip2k.lo elf32.lo $elf" ;; iq2000_elf32_vec) tb="$tb elf32-iq2000.lo elf32.lo $elf" ;; - k1om_elf64_vec) tb="$tb elf64-x86-64.lo elfxx-x86.lo elf-ifunc.lo elf-nacl.lo elf64.lo $elf"; target_size=64 ;; - k1om_elf64_fbsd_vec) tb="$tb elf64-x86-64.lo elfxx-x86.lo elf-ifunc.lo elf-nacl.lo elf64.lo $elf"; target_size=64 ;; - l1om_elf64_vec) tb="$tb elf64-x86-64.lo elfxx-x86.lo elf-ifunc.lo elf-nacl.lo elf64.lo $elf"; target_size=64 ;; - l1om_elf64_fbsd_vec) tb="$tb elf64-x86-64.lo elfxx-x86.lo elf-ifunc.lo elf-nacl.lo elf64.lo $elf"; target_size=64 ;; + k1om_elf64_vec) tb="$tb elf64-x86-64.lo elfxx-x86.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;; + k1om_elf64_fbsd_vec) tb="$tb elf64-x86-64.lo elfxx-x86.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;; + l1om_elf64_vec) tb="$tb elf64-x86-64.lo elfxx-x86.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;; + l1om_elf64_fbsd_vec) tb="$tb elf64-x86-64.lo elfxx-x86.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;; lm32_elf32_vec) tb="$tb elf32-lm32.lo elf32.lo $elf" ;; lm32_elf32_fdpic_vec) tb="$tb elf32-lm32.lo elf32.lo $elf" ;; m32c_elf32_vec) tb="$tb elf32-m32c.lo elf32.lo $elf" ;; @@ -595,10 +620,6 @@ powerpc_elf64_vec) tb="$tb elf64-ppc.lo elf64-gen.lo elf64.lo $elf"; target_size=64 ;; powerpc_elf64_le_vec) tb="$tb elf64-ppc.lo elf64-gen.lo elf64.lo $elf" target_size=64 ;; powerpc_elf64_fbsd_vec) tb="$tb elf64-ppc.lo elf64-gen.lo elf64.lo $elf" target_size=64 ;; - powerpc_pe_vec) tb="$tb pe-ppc.lo peigen.lo $coff" ;; - powerpc_pe_le_vec) tb="$tb pe-ppc.lo peigen.lo $coff" ;; - powerpc_pei_vec) tb="$tb pei-ppc.lo peigen.lo $coff" ;; - powerpc_pei_le_vec) tb="$tb pei-ppc.lo peigen.lo $coff" ;; powerpc_xcoff_vec) tb="$tb coff-rs6000.lo $xcoff" ;; pru_elf32_vec) tb="$tb elf32-pru.lo elf32.lo $elf" ;; riscv_elf32_vec) tb="$tb elf32-riscv.lo elfxx-riscv.lo elf32.lo $elf" ;; @@ -613,8 +634,8 @@ rx_elf32_linux_le_vec) tb="$tb elf32-rx.lo elf32.lo $elf" ;; s390_elf32_vec) tb="$tb elf32-s390.lo elf32.lo $elf" ;; s390_elf64_vec) tb="$tb elf64-s390.lo elf64.lo $elf"; target_size=64 ;; - score_elf32_be_vec) tb="$tb elf32-score.lo elf32-score7.lo elf32.lo $elf"; want64=true; target_size=64 ;; - score_elf32_le_vec) tb="$tb elf32-score.lo elf32-score7.lo elf32.lo $elf"; want64=true; target_size=64 ;; + score_elf32_be_vec) tb="$tb elf32-score.lo elf32-score7.lo elf32.lo elf64.lo $elf"; want64=true; target_size=64 ;; + score_elf32_le_vec) tb="$tb elf32-score.lo elf32-score7.lo elf32.lo elf64.lo $elf"; want64=true; target_size=64 ;; sh_coff_vec) tb="$tb coff-sh.lo $coff" ;; sh_coff_le_vec) tb="$tb coff-sh.lo $coff" ;; sh_coff_small_vec) tb="$tb coff-sh.lo $coff" ;; @@ -639,7 +660,6 @@ sparc_elf64_sol2_vec) tb="$tb elf64-sparc.lo elfxx-sparc.lo elf-vxworks.lo elf64.lo $elf"; target_size=64 ;; spu_elf32_vec) tb="$tb elf32-spu.lo elf32.lo $elf" ;; sym_vec) tb="$tb xsym.lo" ;; - tic30_aout_vec) tb="$tb aout-tic30.lo" ;; tic30_coff_vec) tb="$tb coff-tic30.lo $coffgen" ;; tic4x_coff0_vec) tb="$tb coff-tic4x.lo $coffgen" ;; tic4x_coff0_beh_vec) tb="$tb coff-tic4x.lo $coffgen" ;; @@ -659,7 +679,6 @@ tic6x_elf32_c6000_le_vec) tb="$tb elf32-tic6x.lo elf32.lo $elf" ;; tic6x_elf32_linux_be_vec) tb="$tb elf32-tic6x.lo elf32.lo $elf" ;; tic6x_elf32_linux_le_vec) tb="$tb elf32-tic6x.lo elf32.lo $elf" ;; - tic80_coff_vec) tb="$tb coff-tic80.lo $coff" ;; tilegx_elf32_be_vec) tb="$tb elf32-tilegx.lo elfxx-tilegx.lo elf32.lo $elf" ; target_size=32 ;; tilegx_elf32_le_vec) tb="$tb elf32-tilegx.lo elfxx-tilegx.lo elf32.lo $elf" ; target_size=32 ;; tilegx_elf64_be_vec) tb="$tb elf64-tilegx.lo elfxx-tilegx.lo elf64.lo $elf" ; target_size=64 ;; @@ -676,15 +695,13 @@ wasm32_elf32_vec) tb="$tb elf32-wasm32.lo elf32.lo $elf" ;; x86_64_coff_vec) tb="$tb coff-x86_64.lo $coff"; target_size=64 ;; x86_64_elf32_vec) tb="$tb elf64-x86-64.lo $elfxx_x86 elf64.lo elf32.lo $elf"; target_size=64 ;; - x86_64_elf32_nacl_vec) tb="$tb elf64-x86-64.lo $elfxx_x86 elf64.lo elf32.lo $elf"; target_size=64 ;; x86_64_elf64_vec) tb="$tb elf64-x86-64.lo $elfxx_x86 elf64.lo $elf"; target_size=64 ;; x86_64_elf64_cloudabi_vec) tb="$tb elf64-x86-64.lo $elfxx_x86 elf64.lo $elf"; target_size=64 ;; x86_64_elf64_fbsd_vec) tb="$tb elf64-x86-64.lo $elfxx_x86 elf64.lo $elf"; target_size=64 ;; - x86_64_elf64_nacl_vec) tb="$tb elf64-x86-64.lo $elfxx_x86 elf64.lo $elf"; target_size=64 ;; x86_64_elf64_sol2_vec) tb="$tb elf64-x86-64.lo $elfxx_x86 elf64.lo $elf"; target_size=64 ;; x86_64_mach_o_vec) tb="$tb mach-o-x86-64.lo" ;; x86_64_pe_vec) tb="$tb pe-x86_64.lo pex64igen.lo $coff"; target_size=64 ;; - x86_64_pe_be_vec) tb="$tb pe-x86_64.lo pex64igen.lo $coff"; target_size=64 ;; + x86_64_pe_big_vec) tb="$tb pe-x86_64.lo pex64igen.lo $coff"; target_size=64 ;; x86_64_pei_vec) tb="$tb pei-x86_64.lo pex64igen.lo $coff"; target_size=64 ;; xc16x_elf32_vec) tb="$tb elf32-xc16x.lo elf32.lo $elf" ;; xgate_elf32_vec) tb="$tb elf32-xgate.lo elf32.lo $elf" ;; @@ -692,6 +709,7 @@ xtensa_elf32_be_vec) tb="$tb xtensa-isa.lo xtensa-modules.lo elf32-xtensa.lo elf32.lo $elf" ;; xtensa_elf32_le_vec) tb="$tb xtensa-isa.lo xtensa-modules.lo elf32-xtensa.lo elf32.lo $elf" ;; z80_coff_vec) tb="$tb coff-z80.lo reloc16.lo $coffgen" ;; + z80_elf32_vec) tb="$tb elf32-z80.lo elf32.lo $elf" ;; z8k_coff_vec) tb="$tb coff-z8k.lo reloc16.lo $coff" ;; # These appear out of order in targets.c @@ -836,7 +854,7 @@ ;; arm-*-freebsd* | arm-*-kfreebsd*-gnu) COREFILE='' ;; - arm-*-netbsd* | arm-*-openbsd*) + arm*-*-netbsd* | arm-*-openbsd*) COREFILE=netbsd-core.lo ;; arm-*-riscix) COREFILE=trad-core.lo ;; @@ -921,7 +939,7 @@ i[3-7]86-*-isc*) COREFILE=trad-core.lo ;; i[3-7]86-*-aix*) COREFILE=aix386-core.lo ;; changequote([,])dnl - mips-*-netbsd* | mips*-*-openbsd*) + mips*-*-netbsd* | mips*-*-openbsd*) COREFILE=netbsd-core.lo ;; mips-sgi-irix4*) COREFILE=irix-core.lo ;; @@ -1022,7 +1040,7 @@ # ELF corefile support has several flavors, but all of # them use something called - AC_CHECK_HEADERS(sys/procfs.h) + BFD_SYS_PROCFS_H if test "$ac_cv_header_sys_procfs_h" = yes; then BFD_HAVE_SYS_PROCFS_TYPE(prstatus_t) BFD_HAVE_SYS_PROCFS_TYPE(prstatus32_t) @@ -1087,7 +1105,6 @@ AC_SUBST(bfd_file_ptr) AC_SUBST(bfd_ufile_ptr) -dnl AC_CHECK_HEADERS(sys/mman.h) AC_FUNC_MMAP AC_CHECK_FUNCS(madvise mprotect) case ${want_mmap}+${ac_cv_func_mmap_fixed_mapped} in diff -Nru gdb-9.1/bfd/configure.com gdb-10.2/bfd/configure.com --- gdb-9.1/bfd/configure.com 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/configure.com 2021-04-25 04:06:26.000000000 +0000 @@ -7,7 +7,7 @@ $! Written by Klaus K"ampf (kkaempf@rmi.de) $! Rewritten by Tristan Gingold (gingold@adacore.com) $! -$! Copyright (C) 2012-2019 Free Software Foundation, Inc. +$! Copyright (C) 2012-2020 Free Software Foundation, Inc. $! $! This file is free software; you can redistribute it and/or modify $! it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/bfd/configure.host gdb-10.2/bfd/configure.host --- gdb-9.1/bfd/configure.host 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/configure.host 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ # -# Copyright (C) 2012-2019 Free Software Foundation, Inc. +# Copyright (C) 2012-2020 Free Software Foundation, Inc. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/bfd/corefile.c gdb-10.2/bfd/corefile.c --- gdb-9.1/bfd/corefile.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/corefile.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Core file generic interface routines for BFD. - Copyright (C) 1990-2019 Free Software Foundation, Inc. + Copyright (C) 1990-2020 Free Software Foundation, Inc. Written by Cygnus Support. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/cpu-aarch64.c gdb-10.2/bfd/cpu-aarch64.c --- gdb-9.1/bfd/cpu-aarch64.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-aarch64.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD support for AArch64. - Copyright (C) 2009-2019 Free Software Foundation, Inc. + Copyright (C) 2009-2020 Free Software Foundation, Inc. Contributed by ARM Ltd. This file is part of BFD, the Binary File Descriptor library. @@ -107,8 +107,12 @@ "aarch64", PRINT, 4, DEFAULT, compatible, scan, \ bfd_arch_default_fill, NEXT, 0 } +static const bfd_arch_info_type bfd_aarch64_arch_v8_r = + N (bfd_mach_aarch64_8R, "aarch64:armv8-r", 64, FALSE, NULL); + static const bfd_arch_info_type bfd_aarch64_arch_ilp32 = - N (bfd_mach_aarch64_ilp32, "aarch64:ilp32", 32, FALSE, NULL); + N (bfd_mach_aarch64_ilp32, "aarch64:ilp32", 32, FALSE, + &bfd_aarch64_arch_v8_r); const bfd_arch_info_type bfd_aarch64_arch = N (0, "aarch64", 64, TRUE, &bfd_aarch64_arch_ilp32); diff -Nru gdb-9.1/bfd/cpu-aarch64.h gdb-10.2/bfd/cpu-aarch64.h --- gdb-9.1/bfd/cpu-aarch64.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-aarch64.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* ELF AArch64 mapping symbol support - Copyright (C) 2019 Free Software Foundation, Inc. + Copyright (C) 2019-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/cpu-alpha.c gdb-10.2/bfd/cpu-alpha.c --- gdb-9.1/bfd/cpu-alpha.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-alpha.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD support for the Alpha architecture. - Copyright (C) 1992-2019 Free Software Foundation, Inc. + Copyright (C) 1992-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/cpu-arc.c gdb-10.2/bfd/cpu-arc.c --- gdb-9.1/bfd/cpu-arc.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-arc.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD support for the ARC processor - Copyright (C) 1994-2019 Free Software Foundation, Inc. + Copyright (C) 1994-2020 Free Software Foundation, Inc. Contributed by Doug Evans (dje@cygnus.com). This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/cpu-arm.c gdb-10.2/bfd/cpu-arm.c --- gdb-9.1/bfd/cpu-arm.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-arm.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD support for the ARM processor - Copyright (C) 1994-2019 Free Software Foundation, Inc. + Copyright (C) 1994-2020 Free Software Foundation, Inc. Contributed by Richard Earnshaw (rwe@pegasus.esprit.ec.org) This file is part of BFD, the Binary File Descriptor library. @@ -300,8 +300,8 @@ || out == bfd_mach_arm_iWMMXt2)) { /* xgettext: c-format */ - _bfd_error_handler (_("\ -error: %pB is compiled for the EP9312, whereas %pB is compiled for XScale"), + _bfd_error_handler (_("error: %pB is compiled for the EP9312, " + "whereas %pB is compiled for XScale"), ibfd, obfd); bfd_set_error (bfd_error_wrong_format); return FALSE; @@ -312,8 +312,8 @@ || in == bfd_mach_arm_iWMMXt2)) { /* xgettext: c-format */ - _bfd_error_handler (_("\ -error: %pB is compiled for the EP9312, whereas %pB is compiled for XScale"), + _bfd_error_handler (_("error: %pB is compiled for the EP9312, " + "whereas %pB is compiled for XScale"), obfd, ibfd); bfd_set_error (bfd_error_wrong_format); return FALSE; @@ -458,8 +458,7 @@ return TRUE; FAIL: - if (buffer != NULL) - free (buffer); + free (buffer); return FALSE; } @@ -528,8 +527,7 @@ } FAIL: - if (buffer != NULL) - free (buffer); + free (buffer); return bfd_mach_arm_unknown; } diff -Nru gdb-9.1/bfd/cpu-arm.h gdb-10.2/bfd/cpu-arm.h --- gdb-9.1/bfd/cpu-arm.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-arm.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD support for the ARM processor - Copyright (C) 2019 Free Software Foundation, Inc. + Copyright (C) 2019-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/cpu-avr.c gdb-10.2/bfd/cpu-avr.c --- gdb-9.1/bfd/cpu-avr.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-avr.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD library support routines for the AVR architecture. - Copyright (C) 1999-2019 Free Software Foundation, Inc. + Copyright (C) 1999-2020 Free Software Foundation, Inc. Contributed by Denis Chertykov This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/cpu-bfin.c gdb-10.2/bfd/cpu-bfin.c --- gdb-9.1/bfd/cpu-bfin.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-bfin.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* BFD Support for the ADI Blackfin processor. - Copyright (C) 2005-2019 Free Software Foundation, Inc. + Copyright (C) 2005-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/cpu-bpf.c gdb-10.2/bfd/cpu-bpf.c --- gdb-9.1/bfd/cpu-bpf.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-bpf.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD support for the BPF processor. - Copyright (C) 2019 Free Software Foundation, Inc. + Copyright (C) 2019-2020 Free Software Foundation, Inc. Contributed by Oracle Inc. This file is part of BFD, the Binary File Descriptor library. @@ -23,6 +23,26 @@ #include "bfd.h" #include "libbfd.h" + +static const bfd_arch_info_type bfd_xbpf_arch = +{ + 64, /* Bits per word. */ + 64, /* Bits per address. */ + 8, /* Bits per byte. */ + bfd_arch_bpf, /* Architecture. */ + bfd_mach_xbpf, /* Machine. */ + "bpf", /* Architecture name. */ + "xbpf", /* Machine name. */ + 3, /* Section align power. */ + FALSE, /* The default ? */ + bfd_default_compatible, /* Architecture comparison fn. */ + bfd_default_scan, /* String to architecture convert fn. */ + bfd_arch_default_fill, /* Default fill. */ + NULL, /* Next in list. */ + 0 /* Maximum offset of a reloc from the start of an insn. */ +}; + + const bfd_arch_info_type bfd_bpf_arch = { 64, /* Bits per word. */ @@ -37,6 +57,6 @@ bfd_default_compatible, /* Architecture comparison fn. */ bfd_default_scan, /* String to architecture convert fn. */ bfd_arch_default_fill, /* Default fill. */ - NULL, /* Next in list. */ + &bfd_xbpf_arch, /* Next in list. */ 0 /* Maximum offset of a reloc from the start of an insn. */ }; diff -Nru gdb-9.1/bfd/cpu-cr16.c gdb-10.2/bfd/cpu-cr16.c --- gdb-9.1/bfd/cpu-cr16.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-cr16.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD support for the CR16 processor. - Copyright (C) 2007-2019 Free Software Foundation, Inc. + Copyright (C) 2007-2020 Free Software Foundation, Inc. Written by M R Swami Reddy This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/cpu-cris.c gdb-10.2/bfd/cpu-cris.c --- gdb-9.1/bfd/cpu-cris.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-cris.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD support for the Axis CRIS architecture. - Copyright (C) 2000-2019 Free Software Foundation, Inc. + Copyright (C) 2000-2020 Free Software Foundation, Inc. Contributed by Axis Communications AB. Written by Hans-Peter Nilsson. diff -Nru gdb-9.1/bfd/cpu-crx.c gdb-10.2/bfd/cpu-crx.c --- gdb-9.1/bfd/cpu-crx.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-crx.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD support for the CRX processor. - Copyright (C) 2004-2019 Free Software Foundation, Inc. + Copyright (C) 2004-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/cpu-csky.c gdb-10.2/bfd/cpu-csky.c --- gdb-9.1/bfd/cpu-csky.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-csky.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD support for C-SKY processors. - Copyright (C) 1994-2019 Free Software Foundation, Inc. + Copyright (C) 1994-2020 Free Software Foundation, Inc. Contributed by C-SKY Microsystems and Mentor Graphics. This file is part of BFD, the Binary File Descriptor library. @@ -53,6 +53,7 @@ N (bfd_mach_ck803, "csky:ck803", FALSE, & arch_info_struct[5]), N (bfd_mach_ck807, "csky:ck807", FALSE, & arch_info_struct[6]), N (bfd_mach_ck810, "csky:ck810", FALSE, & arch_info_struct[7]), + N (bfd_mach_ck860, "csky:ck860", FALSE, & arch_info_struct[8]), N (bfd_mach_ck_unknown, "csky:any", FALSE, NULL) }; diff -Nru gdb-9.1/bfd/cpu-d10v.c gdb-10.2/bfd/cpu-d10v.c --- gdb-9.1/bfd/cpu-d10v.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-d10v.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD support for the D10V processor - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. Contributed by Martin Hunt (hunt@cygnus.com). This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/cpu-d30v.c gdb-10.2/bfd/cpu-d30v.c --- gdb-9.1/bfd/cpu-d30v.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-d30v.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD support for the Mitsubishi D30V processor - Copyright (C) 1997-2019 Free Software Foundation, Inc. + Copyright (C) 1997-2020 Free Software Foundation, Inc. Contributed by Martin Hunt (hunt@cygnus.com). This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/cpu-dlx.c gdb-10.2/bfd/cpu-dlx.c --- gdb-9.1/bfd/cpu-dlx.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-dlx.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD support for the DLX Microprocessor architecture. - Copyright (C) 2002-2019 Free Software Foundation, Inc. + Copyright (C) 2002-2020 Free Software Foundation, Inc. Hacked by Kuang Hwa Lin This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/cpu-epiphany.c gdb-10.2/bfd/cpu-epiphany.c --- gdb-9.1/bfd/cpu-epiphany.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-epiphany.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD support for the Adapteva EPIPHANY processor. - Copyright (C) 2009-2019 Free Software Foundation, Inc. + Copyright (C) 2009-2020 Free Software Foundation, Inc. Contributed by Embecosm on behalf of Adapteva, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/cpu-fr30.c gdb-10.2/bfd/cpu-fr30.c --- gdb-9.1/bfd/cpu-fr30.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-fr30.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD support for the FR30 processor. - Copyright (C) 1998-2019 Free Software Foundation, Inc. + Copyright (C) 1998-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/cpu-frv.c gdb-10.2/bfd/cpu-frv.c --- gdb-9.1/bfd/cpu-frv.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-frv.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD support for the FRV processor. - Copyright (C) 2002-2019 Free Software Foundation, Inc. + Copyright (C) 2002-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/cpu-ft32.c gdb-10.2/bfd/cpu-ft32.c --- gdb-9.1/bfd/cpu-ft32.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-ft32.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD support for the ft32 processor. - Copyright (C) 2013-2019 Free Software Foundation, Inc. + Copyright (C) 2013-2020 Free Software Foundation, Inc. Written by FTDI (support@ftdichip.com) This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/cpu-h8300.c gdb-10.2/bfd/cpu-h8300.c --- gdb-9.1/bfd/cpu-h8300.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-h8300.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD library support routines for the Renesas H8/300 architecture. - Copyright (C) 1990-2019 Free Software Foundation, Inc. + Copyright (C) 1990-2020 Free Software Foundation, Inc. Hacked by Steve Chamberlain of Cygnus Support. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/cpu-h8300.h gdb-10.2/bfd/cpu-h8300.h --- gdb-9.1/bfd/cpu-h8300.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-h8300.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* H8/300 functions. - Copyright (C) 2019 Free Software Foundation, Inc. + Copyright (C) 2019-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/cpu-hppa.c gdb-10.2/bfd/cpu-hppa.c --- gdb-9.1/bfd/cpu-hppa.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-hppa.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD support for the HP Precision Architecture architecture. - Copyright (C) 1992-2019 Free Software Foundation, Inc. + Copyright (C) 1992-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/cpu-i386.c gdb-10.2/bfd/cpu-i386.c --- gdb-9.1/bfd/cpu-i386.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-i386.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD support for the Intel 386 architecture. - Copyright (C) 1992-2019 Free Software Foundation, Inc. + Copyright (C) 1992-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -117,19 +117,6 @@ return bfd_arch_i386_fill (count, code, TRUE); } -/* Fill the buffer with zero, or one-byte nop instructions if CODE is TRUE. */ - -static void * -bfd_arch_i386_onebyte_nop_fill (bfd_size_type count, - bfd_boolean is_bigendian ATTRIBUTE_UNUSED, - bfd_boolean code) -{ - void *fill = bfd_malloc (count); - if (fill != NULL) - memset (fill, code ? 0x90 : 0, count); - return fill; -} - #define N(BITS, MACH, NAME, PRINT, DEF, FILL, NEXT) \ { BITS, /* Bits in a word. */ \ BITS, /* Bits in an address. */ \ @@ -148,22 +135,9 @@ } -static const bfd_arch_info_type bfd_x64_32_nacl_arch = - N (64, bfd_mach_x64_32_nacl, "i386", "i386:x64-32:nacl", - FALSE, bfd_arch_i386_onebyte_nop_fill, NULL); - -static const bfd_arch_info_type bfd_x86_64_nacl_arch = - N (64, bfd_mach_x86_64_nacl, "i386", "i386:x86-64:nacl", - FALSE, bfd_arch_i386_onebyte_nop_fill, &bfd_x64_32_nacl_arch); - -const bfd_arch_info_type bfd_i386_nacl_arch = - N (32, bfd_mach_i386_i386_nacl, "i386", "i386:nacl", - TRUE, bfd_arch_i386_onebyte_nop_fill, &bfd_x86_64_nacl_arch); - - static const bfd_arch_info_type bfd_x64_32_arch_intel_syntax = N (64, bfd_mach_x64_32_intel_syntax, "i386:intel", "i386:x64-32:intel", - FALSE, bfd_arch_i386_long_nop_fill, &bfd_i386_nacl_arch); + FALSE, bfd_arch_i386_long_nop_fill, NULL); static const bfd_arch_info_type bfd_x86_64_arch_intel_syntax = N (64, bfd_mach_x86_64_intel_syntax, "i386:intel", "i386:x86-64:intel", diff -Nru gdb-9.1/bfd/cpu-ia64.c gdb-10.2/bfd/cpu-ia64.c --- gdb-9.1/bfd/cpu-ia64.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-ia64.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD support for the ia64 architecture. - Copyright (C) 1998-2019 Free Software Foundation, Inc. + Copyright (C) 1998-2020 Free Software Foundation, Inc. Contributed by David Mosberger-Tang This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/cpu-ia64-opc.c gdb-10.2/bfd/cpu-ia64-opc.c --- gdb-9.1/bfd/cpu-ia64-opc.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-ia64-opc.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 1998-2019 Free Software Foundation, Inc. +/* Copyright (C) 1998-2020 Free Software Foundation, Inc. Contributed by David Mosberger-Tang This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/cpu-iamcu.c gdb-10.2/bfd/cpu-iamcu.c --- gdb-9.1/bfd/cpu-iamcu.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-iamcu.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD support for the Intel MCU architecture. - Copyright (C) 2015-2019 Free Software Foundation, Inc. + Copyright (C) 2015-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/cpu-ip2k.c gdb-10.2/bfd/cpu-ip2k.c --- gdb-9.1/bfd/cpu-ip2k.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-ip2k.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD support for the Scenix IP2xxx processor. - Copyright (C) 2000-2019 Free Software Foundation, Inc. + Copyright (C) 2000-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/cpu-iq2000.c gdb-10.2/bfd/cpu-iq2000.c --- gdb-9.1/bfd/cpu-iq2000.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-iq2000.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD support for the Vitesse IQ2000 processor. - Copyright (C) 2003-2019 Free Software Foundation, Inc. + Copyright (C) 2003-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/cpu-k1om.c gdb-10.2/bfd/cpu-k1om.c --- gdb-9.1/bfd/cpu-k1om.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-k1om.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD support for the Intel K1OM architecture. - Copyright (C) 2011-2019 Free Software Foundation, Inc. + Copyright (C) 2011-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/cpu-l1om.c gdb-10.2/bfd/cpu-l1om.c --- gdb-9.1/bfd/cpu-l1om.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-l1om.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD support for the Intel L1OM architecture. - Copyright (C) 2009-2019 Free Software Foundation, Inc. + Copyright (C) 2009-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/cpu-lm32.c gdb-10.2/bfd/cpu-lm32.c --- gdb-9.1/bfd/cpu-lm32.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-lm32.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD support for the Lattice Mico32 architecture. - Copyright (C) 2008-2019 Free Software Foundation, Inc. + Copyright (C) 2008-2020 Free Software Foundation, Inc. Contributed by Jon Beniston This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/cpu-m10200.c gdb-10.2/bfd/cpu-m10200.c --- gdb-9.1/bfd/cpu-m10200.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-m10200.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD support for the Matsushita 10200 processor - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/cpu-m10300.c gdb-10.2/bfd/cpu-m10300.c --- gdb-9.1/bfd/cpu-m10300.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-m10300.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD support for the Matsushita 10300 processor - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/cpu-m32c.c gdb-10.2/bfd/cpu-m32c.c --- gdb-9.1/bfd/cpu-m32c.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-m32c.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD support for the M16C/M32C processors. - Copyright (C) 2004-2019 Free Software Foundation, Inc. + Copyright (C) 2004-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/cpu-m32r.c gdb-10.2/bfd/cpu-m32r.c --- gdb-9.1/bfd/cpu-m32r.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-m32r.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD support for the M32R processor. - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/cpu-m68hc11.c gdb-10.2/bfd/cpu-m68hc11.c --- gdb-9.1/bfd/cpu-m68hc11.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-m68hc11.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD support for the Motorola 68HC11 processor - Copyright (C) 1999-2019 Free Software Foundation, Inc. + Copyright (C) 1999-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/cpu-m68hc12.c gdb-10.2/bfd/cpu-m68hc12.c --- gdb-9.1/bfd/cpu-m68hc12.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-m68hc12.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD support for the Motorola 68HC12 processor - Copyright (C) 1999-2019 Free Software Foundation, Inc. + Copyright (C) 1999-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/cpu-m68k.c gdb-10.2/bfd/cpu-m68k.c --- gdb-9.1/bfd/cpu-m68k.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-m68k.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD library support routines for architectures. - Copyright (C) 1990-2019 Free Software Foundation, Inc. + Copyright (C) 1990-2020 Free Software Foundation, Inc. Hacked by Steve Chamberlain of Cygnus Support. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/cpu-m68k.h gdb-10.2/bfd/cpu-m68k.h --- gdb-9.1/bfd/cpu-m68k.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-m68k.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD library support routines. - Copyright (C) 2019 Free Software Foundation, Inc. + Copyright (C) 2019-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/cpu-m9s12x.c gdb-10.2/bfd/cpu-m9s12x.c --- gdb-9.1/bfd/cpu-m9s12x.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-m9s12x.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD support for the Freescale 9S12X processor - Copyright (C) 2008-2019 Free Software Foundation, Inc. + Copyright (C) 2008-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/cpu-m9s12xg.c gdb-10.2/bfd/cpu-m9s12xg.c --- gdb-9.1/bfd/cpu-m9s12xg.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-m9s12xg.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD support for the Freescale 9S12-XGATE co-processor - Copyright (C) 2008-2019 Free Software Foundation, Inc. + Copyright (C) 2008-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/cpu-mcore.c gdb-10.2/bfd/cpu-mcore.c --- gdb-9.1/bfd/cpu-mcore.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-mcore.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD library support routines for Motorola's MCore architecture - Copyright (C) 1993-2019 Free Software Foundation, Inc. + Copyright (C) 1993-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/cpu-mep.c gdb-10.2/bfd/cpu-mep.c --- gdb-9.1/bfd/cpu-mep.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-mep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD support for the Toshiba Media Engine Processor. - Copyright (C) 2001-2019 Free Software Foundation, Inc. + Copyright (C) 2001-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/cpu-metag.c gdb-10.2/bfd/cpu-metag.c --- gdb-9.1/bfd/cpu-metag.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-metag.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD support for the Imagination Technologies Meta processor. - Copyright (C) 2013-2019 Free Software Foundation, Inc. + Copyright (C) 2013-2020 Free Software Foundation, Inc. Contributed by Imagination Technologies Ltd. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/cpu-microblaze.c gdb-10.2/bfd/cpu-microblaze.c --- gdb-9.1/bfd/cpu-microblaze.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-microblaze.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* BFD Xilinx MicroBlaze architecture definition - Copyright (C) 2009-2019 Free Software Foundation, Inc. + Copyright (C) 2009-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/cpu-mips.c gdb-10.2/bfd/cpu-mips.c --- gdb-9.1/bfd/cpu-mips.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-mips.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* bfd back-end for mips support - Copyright (C) 1990-2019 Free Software Foundation, Inc. + Copyright (C) 1990-2020 Free Software Foundation, Inc. Written by Steve Chamberlain of Cygnus Support. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/cpu-mmix.c gdb-10.2/bfd/cpu-mmix.c --- gdb-9.1/bfd/cpu-mmix.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-mmix.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD library support routines for MMIX. - Copyright (C) 2001-2019 Free Software Foundation, Inc. + Copyright (C) 2001-2020 Free Software Foundation, Inc. Contributed by Hans-Peter Nilsson (hp@bitrange.com) This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/cpu-moxie.c gdb-10.2/bfd/cpu-moxie.c --- gdb-9.1/bfd/cpu-moxie.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-moxie.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD support for the moxie processor. - Copyright (C) 2009-2019 Free Software Foundation, Inc. + Copyright (C) 2009-2020 Free Software Foundation, Inc. Written by Anthony Green This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/cpu-msp430.c gdb-10.2/bfd/cpu-msp430.c --- gdb-9.1/bfd/cpu-msp430.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-msp430.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD library support routines for the MSP architecture. - Copyright (C) 2002-2019 Free Software Foundation, Inc. + Copyright (C) 2002-2020 Free Software Foundation, Inc. Contributed by Dmitry Diky This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/cpu-mt.c gdb-10.2/bfd/cpu-mt.c --- gdb-9.1/bfd/cpu-mt.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-mt.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD support for the Morpho Technologies MT processor. - Copyright (C) 2001-2019 Free Software Foundation, Inc. + Copyright (C) 2001-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/cpu-nds32.c gdb-10.2/bfd/cpu-nds32.c --- gdb-9.1/bfd/cpu-nds32.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-nds32.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD support for the NDS32 processor - Copyright (C) 2012-2019 Free Software Foundation, Inc. + Copyright (C) 2012-2020 Free Software Foundation, Inc. Contributed by Andes Technology Corporation. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/cpu-nfp.c gdb-10.2/bfd/cpu-nfp.c --- gdb-9.1/bfd/cpu-nfp.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-nfp.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD library support routines for the NFP. - Copyright (C) 2017-2019 Free Software Foundation, Inc. + Copyright (C) 2017-2020 Free Software Foundation, Inc. Contributed by Francois H. Theron This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/cpu-nios2.c gdb-10.2/bfd/cpu-nios2.c --- gdb-9.1/bfd/cpu-nios2.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-nios2.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD support for the Altera Nios II processor. - Copyright (C) 2012-2019 Free Software Foundation, Inc. + Copyright (C) 2012-2020 Free Software Foundation, Inc. Contributed by Nigel Gray (ngray@altera.com). Contributed by Mentor Graphics, Inc. diff -Nru gdb-9.1/bfd/cpu-ns32k.c gdb-10.2/bfd/cpu-ns32k.c --- gdb-9.1/bfd/cpu-ns32k.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-ns32k.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD support for the ns32k architecture. - Copyright (C) 1990-2019 Free Software Foundation, Inc. + Copyright (C) 1990-2020 Free Software Foundation, Inc. Almost totally rewritten by Ian Dall from initial work by Andrew Cagney. diff -Nru gdb-9.1/bfd/cpu-or1k.c gdb-10.2/bfd/cpu-or1k.c --- gdb-9.1/bfd/cpu-or1k.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-or1k.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD support for the OpenRISC 1000 architecture. - Copyright (C) 2002-2019 Free Software Foundation, Inc. + Copyright (C) 2002-2020 Free Software Foundation, Inc. Contributed for OR32 by Ivan Guzvinec This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/cpu-pdp11.c gdb-10.2/bfd/cpu-pdp11.c --- gdb-9.1/bfd/cpu-pdp11.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-pdp11.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD back-end for PDP-11 support. - Copyright (C) 2001-2019 Free Software Foundation, Inc. + Copyright (C) 2001-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/cpu-pj.c gdb-10.2/bfd/cpu-pj.c --- gdb-9.1/bfd/cpu-pj.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-pj.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD library support routines for the Pico Java architecture. - Copyright (C) 1999-2019 Free Software Foundation, Inc. + Copyright (C) 1999-2020 Free Software Foundation, Inc. Hacked by Steve Chamberlain of Transmeta. sac@pobox.com This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/cpu-plugin.c gdb-10.2/bfd/cpu-plugin.c --- gdb-9.1/bfd/cpu-plugin.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-plugin.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,41 +0,0 @@ -/* BFD support for plugins. - Copyright (C) 2009-2019 Free Software Foundation, Inc. - - This file is part of BFD, the Binary File Descriptor library. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, - MA 02110-1301, USA. */ - -#include "sysdep.h" -#include "bfd.h" -#include "libbfd.h" - -const bfd_arch_info_type bfd_plugin_arch = -{ - 32, /* Bits in a word. */ - 32, /* Bits in an address. */ - 8, /* Bits in a byte. */ - bfd_arch_plugin, - 0, /* Only 1 machine. */ - "plugin", - "plugin", - 3, - TRUE, - bfd_default_compatible, - bfd_default_scan, - bfd_arch_default_fill, - NULL, - 0 /* Maximum offset of a reloc from the start of an insn. */ -}; diff -Nru gdb-9.1/bfd/cpu-powerpc.c gdb-10.2/bfd/cpu-powerpc.c --- gdb-9.1/bfd/cpu-powerpc.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-powerpc.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD PowerPC CPU definition - Copyright (C) 1994-2019 Free Software Foundation, Inc. + Copyright (C) 1994-2020 Free Software Foundation, Inc. Contributed by Ian Lance Taylor, Cygnus Support. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/cpu-pru.c gdb-10.2/bfd/cpu-pru.c --- gdb-9.1/bfd/cpu-pru.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-pru.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD support for the TI PRU microprocessor. - Copyright (C) 2014-2019 Free Software Foundation, Inc. + Copyright (C) 2014-2020 Free Software Foundation, Inc. Contributed by Dimitar Dimitrov This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/cpu-riscv.c gdb-10.2/bfd/cpu-riscv.c --- gdb-9.1/bfd/cpu-riscv.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-riscv.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD backend for RISC-V - Copyright (C) 2011-2019 Free Software Foundation, Inc. + Copyright (C) 2011-2020 Free Software Foundation, Inc. Contributed by Andrew Waterman (andrew@sifive.com). Based on MIPS target. @@ -23,6 +23,86 @@ #include "sysdep.h" #include "bfd.h" #include "libbfd.h" +#include "elfxx-riscv.h" + +/* Record the priv spec version string and the corresponding class. */ + +struct priv_spec_t +{ + const char *name; + enum riscv_priv_spec_class class; +}; + +/* List for all supported privilege versions. */ + +static const struct priv_spec_t priv_specs[] = +{ + {"1.9.1", PRIV_SPEC_CLASS_1P9P1}, + {"1.10", PRIV_SPEC_CLASS_1P10}, + {"1.11", PRIV_SPEC_CLASS_1P11}, + +/* Terminate the list. */ + {NULL, 0} +}; + +/* Get the corresponding CSR version class by giving a privilege + version string. */ + +int +riscv_get_priv_spec_class (const char *s, + enum riscv_priv_spec_class *class) +{ + const struct priv_spec_t *version; + + if (s == NULL) + return 0; + + for (version = &priv_specs[0]; version->name != NULL; ++version) + if (strcmp (version->name, s) == 0) + { + *class = version->class; + return 1; + } + + /* Can not find the supported privilege version. */ + return 0; +} + +/* Get the corresponding CSR version class by giving privilege + version numbers. It is usually used to convert the priv + attribute numbers into the corresponding class. */ + +int +riscv_get_priv_spec_class_from_numbers (unsigned int major, + unsigned int minor, + unsigned int revision, + enum riscv_priv_spec_class *class) +{ + char buf[36]; + + if (major == 0 && minor == 0 && revision == 0) + { + *class = PRIV_SPEC_CLASS_NONE; + return 1; + } + + if (revision != 0) + snprintf (buf, sizeof (buf), "%u.%u.%u", major, minor, revision); + else + snprintf (buf, sizeof (buf), "%u.%u", major, minor); + + return riscv_get_priv_spec_class (buf, class); +} + +/* Get the corresponding privilege version string by giving a CSR + version class. */ + +const char * +riscv_get_priv_spec_name (enum riscv_priv_spec_class class) +{ + /* The first enum is PRIV_SPEC_CLASS_NONE. */ + return priv_specs[class - 1].name; +} /* This routine is provided two arch_infos and returns an arch_info that is compatible with both, or NULL if none exists. */ @@ -39,6 +119,33 @@ return a; } +/* Return TRUE if STRING matches the architecture described by INFO. */ + +static bfd_boolean +riscv_scan (const struct bfd_arch_info *info, const char *string) +{ + if (bfd_default_scan (info, string)) + return TRUE; + + /* The incoming STRING might take the form of riscv:rvXXzzz, where XX is + 32 or 64, and zzz are one or more extension characters. As we + currently only have 3 architectures defined, 'riscv', 'riscv:rv32', + and 'riscv:rv64', we would like to ignore the zzz for the purpose of + matching here. + + However, we don't want the default 'riscv' to match over a more + specific 'riscv:rv32' or 'riscv:rv64', so in the case of the default + architecture (with the shorter 'riscv' name) we don't allow any + special matching, but for the 'riscv:rvXX' cases, we allow a match + with any additional trailing characters being ignored. */ + if (!info->the_default + && strncasecmp (string, info->printable_name, + strlen (info->printable_name)) == 0) + return TRUE; + + return FALSE; +} + #define N(BITS, NUMBER, PRINT, DEFAULT, NEXT) \ { \ BITS, /* Bits in a word. */ \ @@ -51,7 +158,7 @@ 3, \ DEFAULT, \ riscv_compatible, \ - bfd_default_scan, \ + riscv_scan, \ bfd_arch_default_fill, \ NEXT, \ 0 /* Maximum offset of a reloc from the start of an insn. */\ diff -Nru gdb-9.1/bfd/cpu-rl78.c gdb-10.2/bfd/cpu-rl78.c --- gdb-9.1/bfd/cpu-rl78.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-rl78.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD support for the RL78 processor. - Copyright (C) 2011-2019 Free Software Foundation, Inc. + Copyright (C) 2011-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/cpu-rs6000.c gdb-10.2/bfd/cpu-rs6000.c --- gdb-9.1/bfd/cpu-rs6000.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-rs6000.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD back-end for rs6000 support - Copyright (C) 1990-2019 Free Software Foundation, Inc. + Copyright (C) 1990-2020 Free Software Foundation, Inc. Written by Mimi Phuong-Thao Vo of IBM and John Gilmore of Cygnus Support. diff -Nru gdb-9.1/bfd/cpu-rx.c gdb-10.2/bfd/cpu-rx.c --- gdb-9.1/bfd/cpu-rx.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-rx.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD support for the RX processor. - Copyright (C) 2008-2019 Free Software Foundation, Inc. + Copyright (C) 2008-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/cpu-s12z.c gdb-10.2/bfd/cpu-s12z.c --- gdb-9.1/bfd/cpu-s12z.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-s12z.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD support for the Freescale 9S12Z processor - Copyright (C) 2008-2019 Free Software Foundation, Inc. + Copyright (C) 2008-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/cpu-s390.c gdb-10.2/bfd/cpu-s390.c --- gdb-9.1/bfd/cpu-s390.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-s390.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD support for the s390 processor. - Copyright (C) 2000-2019 Free Software Foundation, Inc. + Copyright (C) 2000-2020 Free Software Foundation, Inc. Contributed by Carl B. Pedersen and Martin Schwidefsky. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/cpu-score.c gdb-10.2/bfd/cpu-score.c --- gdb-9.1/bfd/cpu-score.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-score.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD support for the score processor - Copyright (C) 2006-2019 Free Software Foundation, Inc. + Copyright (C) 2006-2020 Free Software Foundation, Inc. Contributed by Brain.lin (brain.lin@sunplusct.com) Mei Ligang (ligang@sunnorth.com.cn) diff -Nru gdb-9.1/bfd/cpu-sh.c gdb-10.2/bfd/cpu-sh.c --- gdb-9.1/bfd/cpu-sh.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-sh.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD library support routines for the Renesas / SuperH SH architecture. - Copyright (C) 1993-2019 Free Software Foundation, Inc. + Copyright (C) 1993-2020 Free Software Foundation, Inc. Hacked by Steve Chamberlain of Cygnus Support. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/cpu-sparc.c gdb-10.2/bfd/cpu-sparc.c --- gdb-9.1/bfd/cpu-sparc.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-sparc.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD support for the SPARC architecture. - Copyright (C) 1992-2019 Free Software Foundation, Inc. + Copyright (C) 1992-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/cpu-spu.c gdb-10.2/bfd/cpu-spu.c --- gdb-9.1/bfd/cpu-spu.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-spu.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2006-2019 Free Software Foundation, Inc. +/* Copyright (C) 2006-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/cpu-tic30.c gdb-10.2/bfd/cpu-tic30.c --- gdb-9.1/bfd/cpu-tic30.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-tic30.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD support for the Texas Instruments TMS320C30 architecture. - Copyright (C) 1998-2019 Free Software Foundation, Inc. + Copyright (C) 1998-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/cpu-tic4x.c gdb-10.2/bfd/cpu-tic4x.c --- gdb-9.1/bfd/cpu-tic4x.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-tic4x.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* bfd back-end for TMS320C[34]x support - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz) diff -Nru gdb-9.1/bfd/cpu-tic54x.c gdb-10.2/bfd/cpu-tic54x.c --- gdb-9.1/bfd/cpu-tic54x.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-tic54x.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD support for the Texas Instruments TMS320C54X architecture. - Copyright (C) 1999-2019 Free Software Foundation, Inc. + Copyright (C) 1999-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/cpu-tic6x.c gdb-10.2/bfd/cpu-tic6x.c --- gdb-9.1/bfd/cpu-tic6x.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-tic6x.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD support for the TI C6X processor. - Copyright (C) 2010-2019 Free Software Foundation, Inc. + Copyright (C) 2010-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/cpu-tic80.c gdb-10.2/bfd/cpu-tic80.c --- gdb-9.1/bfd/cpu-tic80.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-tic80.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,42 +0,0 @@ -/* bfd back-end for TI TMS320C80 (MVP) support - Copyright (C) 1996-2019 Free Software Foundation, Inc. - Written by Fred Fish at Cygnus support (fnf@cygnus.com) - - This file is part of BFD, the Binary File Descriptor library. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, - MA 02110-1301, USA. */ - -#include "sysdep.h" -#include "bfd.h" -#include "libbfd.h" - -const bfd_arch_info_type bfd_tic80_arch = -{ - 32, /* Bits in a word. */ - 32, /* Bits in an address. */ - 8, /* Bits in a byte. */ - bfd_arch_tic80, /* Architecture number. */ - 0, /* Only 1 machine. */ - "tic80", /* Architecture name. */ - "tic80", /* Printable name. */ - 2, /* Section alignment power. */ - TRUE, /* Default machine. */ - bfd_default_compatible, - bfd_default_scan, - bfd_arch_default_fill, - NULL, /* Pointer to next in chain. */ - 0 /* Maximum offset of a reloc from the start of an insn. */ -}; diff -Nru gdb-9.1/bfd/cpu-tilegx.c gdb-10.2/bfd/cpu-tilegx.c --- gdb-9.1/bfd/cpu-tilegx.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-tilegx.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD support for the TILE-Gx processor. - Copyright (C) 2011-2019 Free Software Foundation, Inc. + Copyright (C) 2011-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/cpu-tilepro.c gdb-10.2/bfd/cpu-tilepro.c --- gdb-9.1/bfd/cpu-tilepro.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-tilepro.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD support for the TILEPro processor. - Copyright (C) 2011-2019 Free Software Foundation, Inc. + Copyright (C) 2011-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/cpu-v850.c gdb-10.2/bfd/cpu-v850.c --- gdb-9.1/bfd/cpu-v850.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-v850.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD support for the NEC V850 processor - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/cpu-v850_rh850.c gdb-10.2/bfd/cpu-v850_rh850.c --- gdb-9.1/bfd/cpu-v850_rh850.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-v850_rh850.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD support for the NEC V850 processor with the RH850 ABI. - Copyright (C) 2012-2019 Free Software Foundation, Inc. + Copyright (C) 2012-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/cpu-vax.c gdb-10.2/bfd/cpu-vax.c --- gdb-9.1/bfd/cpu-vax.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-vax.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* bfd back-end for vax support - Copyright (C) 1990-2019 Free Software Foundation, Inc. + Copyright (C) 1990-2020 Free Software Foundation, Inc. Written by Steve Chamberlain of Cygnus Support. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/cpu-visium.c gdb-10.2/bfd/cpu-visium.c --- gdb-9.1/bfd/cpu-visium.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-visium.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* BFD support for the Visium processor. - Copyright (C) 2003-2019 Free Software Foundation, Inc. + Copyright (C) 2003-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/cpu-wasm32.c gdb-10.2/bfd/cpu-wasm32.c --- gdb-9.1/bfd/cpu-wasm32.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-wasm32.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD support for the WebAssembly target - Copyright (C) 2017-2019 Free Software Foundation, Inc. + Copyright (C) 2017-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/cpu-xc16x.c gdb-10.2/bfd/cpu-xc16x.c --- gdb-9.1/bfd/cpu-xc16x.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-xc16x.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD support for the Infineon XC16X Microcontroller. - Copyright (C) 2006-2019 Free Software Foundation, Inc. + Copyright (C) 2006-2020 Free Software Foundation, Inc. Contributed by KPIT Cummins Infosystems This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/cpu-xgate.c gdb-10.2/bfd/cpu-xgate.c --- gdb-9.1/bfd/cpu-xgate.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-xgate.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD support for the Freescale XGATE processor - Copyright (C) 2010-2019 Free Software Foundation, Inc. + Copyright (C) 2010-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/cpu-xstormy16.c gdb-10.2/bfd/cpu-xstormy16.c --- gdb-9.1/bfd/cpu-xstormy16.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-xstormy16.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD support for the XSTORMY16 processor. - Copyright (C) 2001-2019 Free Software Foundation, Inc. + Copyright (C) 2001-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/cpu-xtensa.c gdb-10.2/bfd/cpu-xtensa.c --- gdb-9.1/bfd/cpu-xtensa.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-xtensa.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD support for the Xtensa processor. - Copyright (C) 2003-2019 Free Software Foundation, Inc. + Copyright (C) 2003-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/cpu-z80.c gdb-10.2/bfd/cpu-z80.c --- gdb-9.1/bfd/cpu-z80.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-z80.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD library support routines for the Z80 architecture. - Copyright (C) 2005-2019 Free Software Foundation, Inc. + Copyright (C) 2005-2020 Free Software Foundation, Inc. Contributed by Arnold Metselaar This file is part of BFD, the Binary File Descriptor library. @@ -31,27 +31,91 @@ static const bfd_arch_info_type * compatible (const bfd_arch_info_type *a, const bfd_arch_info_type *b) { - if (a->arch != b->arch) + if (a->arch != b->arch || a->arch != bfd_arch_z80) return NULL; if (a->mach == b->mach) return a; + switch (a->mach) + { + case bfd_mach_z80: + case bfd_mach_z80full: + case bfd_mach_z80strict: + switch (b->mach) + { + case bfd_mach_z80: + case bfd_mach_z80full: + case bfd_mach_z80strict: + return & bfd_z80_arch; + case bfd_mach_z180: + case bfd_mach_ez80_z80: + case bfd_mach_ez80_adl: + case bfd_mach_z80n: + case bfd_mach_r800: + return b; + } + break; + case bfd_mach_z80n: + case bfd_mach_r800: + switch (b->mach) + { + case bfd_mach_z80: + case bfd_mach_z80full: + case bfd_mach_z80strict: + return a; + } + break; + case bfd_mach_z180: + switch (b->mach) + { + case bfd_mach_z80: + case bfd_mach_z80full: + case bfd_mach_z80strict: + return a; + case bfd_mach_ez80_z80: + case bfd_mach_ez80_adl: + return b; + } + break; + case bfd_mach_ez80_z80: + case bfd_mach_ez80_adl: + switch (b->mach) + { + case bfd_mach_z80: + case bfd_mach_z80full: + case bfd_mach_z80strict: + case bfd_mach_z180: + case bfd_mach_ez80_z80: + return a; + case bfd_mach_ez80_adl: + return b; + } + break; + case bfd_mach_gbz80: + return NULL; + } - return (a->arch == bfd_arch_z80) ? & bfd_z80_arch : NULL; + return NULL; } -#define N(name,print,default,next) \ - { 16, 16, 8, bfd_arch_z80, name, "z80", print, 0, default, \ +#define N(name,print,bits,default,next) \ + { 16, bits, 8, bfd_arch_z80, name, "z80", print, 0, default, \ compatible, bfd_default_scan, bfd_arch_default_fill, next, 0 } #define M(n) &arch_info_struct[n] static const bfd_arch_info_type arch_info_struct[] = { - N (bfd_mach_z80strict, "z80-strict", FALSE, M(1)), - N (bfd_mach_z80, "z80", FALSE, M(2)), - N (bfd_mach_z80full, "z80-full", FALSE, M(3)), - N (bfd_mach_r800, "r800", FALSE, NULL) + N (bfd_mach_z80, "z80", 16, TRUE, M(1)), + N (bfd_mach_z80strict, "z80-strict", 16, FALSE, M(2)), + N (bfd_mach_z80full, "z80-full", 16, FALSE, M(3)), + N (bfd_mach_r800, "r800", 16, FALSE, M(4)), + N (bfd_mach_gbz80, "gbz80", 16, FALSE, M(5)), + N (bfd_mach_z180, "z180", 16, FALSE, M(6)), + N (bfd_mach_z80n, "z80n", 16, FALSE, M(7)), + N (bfd_mach_ez80_z80, "ez80-z80", 16, FALSE, M(8)), + N (bfd_mach_ez80_adl, "ez80-adl", 24, FALSE, NULL) }; -const bfd_arch_info_type bfd_z80_arch = N (0, "z80-any", TRUE, M(0)); +const bfd_arch_info_type bfd_z80_arch = + N (bfd_mach_z80, "z80", 16, TRUE, M(1)); diff -Nru gdb-9.1/bfd/cpu-z8k.c gdb-10.2/bfd/cpu-z8k.c --- gdb-9.1/bfd/cpu-z8k.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/cpu-z8k.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD library support routines for the Z800n architecture. - Copyright (C) 1992-2019 Free Software Foundation, Inc. + Copyright (C) 1992-2020 Free Software Foundation, Inc. Hacked by Steve Chamberlain of Cygnus Support. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/development.sh gdb-10.2/bfd/development.sh --- gdb-9.1/bfd/development.sh 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/development.sh 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2012-2019 Free Software Foundation, Inc. +# Copyright (C) 2012-2020 Free Software Foundation, Inc. # # This file is part of GDB. # diff -Nru gdb-9.1/bfd/doc/archures.texi gdb-10.2/bfd/doc/archures.texi --- gdb-9.1/bfd/doc/archures.texi 2020-02-08 12:53:25.000000000 +0000 +++ gdb-10.2/bfd/doc/archures.texi 2021-04-25 04:09:39.000000000 +0000 @@ -178,10 +178,6 @@ bfd_arch_k1om, /* Intel K1OM. */ #define bfd_mach_k1om (1 << 6) #define bfd_mach_k1om_intel_syntax (bfd_mach_k1om | bfd_mach_i386_intel_syntax) -#define bfd_mach_i386_nacl (1 << 7) -#define bfd_mach_i386_i386_nacl (bfd_mach_i386_i386 | bfd_mach_i386_nacl) -#define bfd_mach_x86_64_nacl (bfd_mach_x86_64 | bfd_mach_i386_nacl) -#define bfd_mach_x64_32_nacl (bfd_mach_x64_32 | bfd_mach_i386_nacl) bfd_arch_iamcu, /* Intel MCU. */ #define bfd_mach_iamcu (1 << 8) #define bfd_mach_i386_iamcu (bfd_mach_i386_i386 | bfd_mach_iamcu) @@ -199,7 +195,6 @@ #define bfd_mach_h8300sx 6 #define bfd_mach_h8300sxn 7 bfd_arch_pdp11, /* DEC PDP-11. */ - bfd_arch_plugin, bfd_arch_powerpc, /* PowerPC. */ #define bfd_mach_ppc 32 #define bfd_mach_ppc64 64 @@ -322,7 +317,6 @@ #define bfd_mach_tic4x 40 bfd_arch_tic54x, /* Texas Instruments TMS320C54X. */ bfd_arch_tic6x, /* Texas Instruments TMS320C6X. */ - bfd_arch_tic80, /* TI TMS320c80 (MVP). */ bfd_arch_v850, /* NEC V850. */ bfd_arch_v850_rh850,/* NEC V850 (using RH850 ABI). */ #define bfd_mach_v850 1 @@ -384,6 +378,7 @@ #define bfd_mach_iq10 2 bfd_arch_bpf, /* Linux eBPF. */ #define bfd_mach_bpf 1 +#define bfd_mach_xbpf 2 bfd_arch_epiphany, /* Adapteva EPIPHANY. */ #define bfd_mach_epiphany16 1 #define bfd_mach_epiphany32 2 @@ -473,10 +468,25 @@ bfd_arch_xtensa, /* Tensilica's Xtensa cores. */ #define bfd_mach_xtensa 1 bfd_arch_z80, -#define bfd_mach_z80strict 1 /* No undocumented opcodes. */ -#define bfd_mach_z80 3 /* With ixl, ixh, iyl, and iyh. */ -#define bfd_mach_z80full 7 /* All undocumented instructions. */ -#define bfd_mach_r800 11 /* R800: successor with multiplication. */ +/* Zilog Z80 without undocumented opcodes. */ +#define bfd_mach_z80strict 1 +/* Zilog Z180: successor with additional instructions, but without + halves of ix and iy. */ +#define bfd_mach_z180 2 +/* Zilog Z80 with ixl, ixh, iyl, and iyh. */ +#define bfd_mach_z80 3 +/* Zilog eZ80 (successor of Z80 & Z180) in Z80 (16-bit address) mode. */ +#define bfd_mach_ez80_z80 4 +/* Zilog eZ80 (successor of Z80 & Z180) in ADL (24-bit address) mode. */ +#define bfd_mach_ez80_adl 5 +/* Z80N */ +#define bfd_mach_z80n 6 +/* Zilog Z80 with all undocumented instructions. */ +#define bfd_mach_z80full 7 +/* GameBoy Z80 (reduced instruction set). */ +#define bfd_mach_gbz80 8 +/* ASCII R800: successor with multiplication. */ +#define bfd_mach_r800 11 bfd_arch_lm32, /* Lattice Mico32. */ #define bfd_mach_lm32 1 bfd_arch_microblaze,/* Xilinx MicroBlaze. */ @@ -487,6 +497,7 @@ #define bfd_mach_tilegx32 2 bfd_arch_aarch64, /* AArch64. */ #define bfd_mach_aarch64 0 +#define bfd_mach_aarch64_8R 1 #define bfd_mach_aarch64_ilp32 32 bfd_arch_nios2, /* Nios II. */ #define bfd_mach_nios2 0 @@ -510,6 +521,7 @@ #define bfd_mach_ck803 5 #define bfd_mach_ck807 6 #define bfd_mach_ck810 7 +#define bfd_mach_ck860 8 bfd_arch_last @}; @end example diff -Nru gdb-9.1/bfd/doc/bfd.info gdb-10.2/bfd/doc/bfd.info --- gdb-9.1/bfd/doc/bfd.info 2020-02-08 12:53:27.000000000 +0000 +++ gdb-10.2/bfd/doc/bfd.info 2021-04-25 04:09:42.000000000 +0000 @@ -1,8 +1,8 @@ -This is bfd.info, produced by makeinfo version 6.5 from bfd.texi. +This is bfd.info, produced by makeinfo version 6.7 from bfd.texi. This file documents the BFD library. - Copyright (C) 1991-2019 Free Software Foundation, Inc. + Copyright (C) 1991-2020 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or @@ -378,12 +378,6 @@ /* A unique identifier of the BFD */ unsigned int id; - /* The format which belongs to the BFD. (object, core, etc.) */ - ENUM_BITFIELD (bfd_format) format : 3; - - /* The direction with which the BFD was opened. */ - ENUM_BITFIELD (bfd_direction) direction : 2; - /* Format_specific flags. */ flagword flags; @@ -487,6 +481,12 @@ | BFD_PLUGIN | BFD_TRADITIONAL_FORMAT | BFD_DETERMINISTIC_OUTPUT \ | BFD_COMPRESS_GABI | BFD_CONVERT_ELF_COMMON | BFD_USE_ELF_STT_COMMON) + /* The format which belongs to the BFD. (object, core, etc.) */ + ENUM_BITFIELD (bfd_format) format : 3; + + /* The direction with which the BFD was opened. */ + ENUM_BITFIELD (bfd_direction) direction : 2; + /* Is the file descriptor being cached? That is, can it be closed as needed, and re-opened when accessed later? */ unsigned int cacheable : 1; @@ -538,13 +538,16 @@ /* Set if this is a slim LTO object not loaded with a compiler plugin. */ unsigned int lto_slim_object : 1; + /* Do not attempt to modify this file. Set when detecting errors + that BFD is not prepared to handle for objcopy/strip. */ + unsigned int read_only : 1; + /* Set to dummy BFD created when claimed by a compiler plug-in library. */ bfd *plugin_dummy_bfd; - /* Currently my_archive is tested before adding origin to - anything. I believe that this can become always an add of - origin, with origin set to 0 for non archive files. */ + /* The offset of this bfd in the file, typically 0 if it is not + contained in an archive. */ ufile_ptr origin; /* The origin in the archive of the proxy entry. This will @@ -576,7 +579,7 @@ /* Symbol table for output BFD (with symcount entries). Also used by the linker to cache input BFD symbols. */ - struct bfd_symbol **outsymbols; + struct bfd_symbol **outsymbols; /* Used for input and output. */ unsigned int symcount; @@ -587,6 +590,11 @@ /* Pointer to structure which contains architecture information. */ const struct bfd_arch_info *arch_info; + /* Cached length of file for bfd_get_size. 0 until bfd_get_size is + called, 1 if stat returns an error or the file size is too large to + return in ufile_ptr. Both 0 and 1 should be treated as "unknown". */ + ufile_ptr size; + /* Stuff only useful for archives. */ void *arelt_data; struct bfd *my_archive; /* The containing archive BFD. */ @@ -1270,7 +1278,8 @@ BFD_SEND (abfd, _bfd_debug_info_accumulate, (abfd, section)) #define bfd_stat_arch_elt(abfd, stat) \ - BFD_SEND (abfd, _bfd_stat_arch_elt,(abfd, stat)) + BFD_SEND (abfd->my_archive ? abfd->my_archive : abfd, \ + _bfd_stat_arch_elt, (abfd, stat)) #define bfd_update_armap_timestamp(abfd) \ BFD_SEND (abfd, _bfd_update_armap_timestamp, (abfd)) @@ -1537,6 +1546,8 @@ space for the 15 bazillon byte table it is about to read. This function at least allows us to answer the question, "is the size reasonable?". + A return value of zero indicates the file size is unknown. + 2.3.1.29 'bfd_get_file_size' ............................ @@ -1734,6 +1745,10 @@ /* A unique sequence number. */ unsigned int id; + /* A unique section number which can be used by assembler to + distinguish different sections with the same section name. */ + unsigned int section_id; + /* Which section in the bfd; 0..n-1 as sections are created in a bfd. */ unsigned int index; @@ -1867,6 +1882,10 @@ else up the line will take care of it later. */ #define SEC_LINKER_CREATED 0x100000 + /* This section contains a section ID to distinguish different + sections with the same section name. */ + #define SEC_ASSEMBLER_SECTION_ID 0x100000 + /* This section should not be subject to garbage collection. Also set to inform the linker that this section should not be listed in the link map as discarded. */ @@ -2116,11 +2135,17 @@ /* Early in the link process, map_head and map_tail are used to build a list of input sections attached to an output section. Later, output sections use these fields for a list of bfd_link_order - structs. */ + structs. The linked_to_symbol_name field is for ELF assembler + internal use. */ union { struct bfd_link_order *link_order; struct bfd_section *s; + const char *linked_to_symbol_name; } map_head, map_tail; + /* Points to the output section this section is already assigned to, if any. + This is used when support for non-contiguous memory regions is enabled. */ + struct bfd_section *already_assigned; + } asection; /* Relax table contains information about instructions which can @@ -2254,7 +2279,9 @@ static inline bfd_boolean bfd_is_const_section (const asection *sec) { - return sec >= bfd_abs_section_ptr && sec <= bfd_ind_section_ptr; + return (sec >= _bfd_std_section + && sec < _bfd_std_section + (sizeof (_bfd_std_section) + / sizeof (_bfd_std_section[0]))); } /* Return TRUE if input section SEC has been discarded. */ @@ -2268,41 +2295,42 @@ } #define BFD_FAKE_SECTION(SEC, SYM, NAME, IDX, FLAGS) \ - /* name, id, index, next, prev, flags, user_set_vma, */ \ - { NAME, IDX, 0, NULL, NULL, FLAGS, 0, \ + /* name, id, section_id, index, next, prev, flags, user_set_vma, */ \ + { NAME, IDX, 0, 0, NULL, NULL, FLAGS, 0, \ \ - /* linker_mark, linker_has_input, gc_mark, decompress_status, */ \ + /* linker_mark, linker_has_input, gc_mark, decompress_status, */ \ 0, 0, 1, 0, \ \ - /* segment_mark, sec_info_type, use_rela_p, */ \ + /* segment_mark, sec_info_type, use_rela_p, */ \ 0, 0, 0, \ \ - /* sec_flg0, sec_flg1, sec_flg2, sec_flg3, sec_flg4, sec_flg5, */ \ + /* sec_flg0, sec_flg1, sec_flg2, sec_flg3, sec_flg4, sec_flg5, */ \ 0, 0, 0, 0, 0, 0, \ \ - /* vma, lma, size, rawsize, compressed_size, relax, relax_count, */ \ + /* vma, lma, size, rawsize, compressed_size, relax, relax_count, */ \ 0, 0, 0, 0, 0, 0, 0, \ \ - /* output_offset, output_section, alignment_power, */ \ + /* output_offset, output_section, alignment_power, */ \ 0, &SEC, 0, \ \ - /* relocation, orelocation, reloc_count, filepos, rel_filepos, */ \ + /* relocation, orelocation, reloc_count, filepos, rel_filepos, */ \ NULL, NULL, 0, 0, 0, \ \ - /* line_filepos, userdata, contents, lineno, lineno_count, */ \ + /* line_filepos, userdata, contents, lineno, lineno_count, */ \ 0, NULL, NULL, NULL, 0, \ \ /* entsize, kept_section, moving_line_filepos, */ \ - 0, NULL, 0, \ + 0, NULL, 0, \ \ - /* target_index, used_by_bfd, constructor_chain, owner, */ \ + /* target_index, used_by_bfd, constructor_chain, owner, */ \ 0, NULL, NULL, NULL, \ \ - /* symbol, symbol_ptr_ptr, */ \ + /* symbol, symbol_ptr_ptr, */ \ (struct bfd_symbol *) SYM, &SEC.symbol, \ \ - /* map_head, map_tail */ \ - { NULL }, { NULL } \ + /* map_head, map_tail, already_assigned */ \ + { NULL }, { NULL }, NULL \ + \ } /* We use a macro to initialize the static asymbol structures because @@ -4459,10 +4487,10 @@ -- : BFD_RELOC_PPC64_DTPREL16_HIGHESTA -- : BFD_RELOC_PPC64_TPREL34 -- : BFD_RELOC_PPC64_DTPREL34 - -- : BFD_RELOC_PPC64_GOT_TLSGD34 - -- : BFD_RELOC_PPC64_GOT_TLSLD34 - -- : BFD_RELOC_PPC64_GOT_TPREL34 - -- : BFD_RELOC_PPC64_GOT_DTPREL34 + -- : BFD_RELOC_PPC64_GOT_TLSGD_PCREL34 + -- : BFD_RELOC_PPC64_GOT_TLSLD_PCREL34 + -- : BFD_RELOC_PPC64_GOT_TPREL_PCREL34 + -- : BFD_RELOC_PPC64_GOT_DTPREL_PCREL34 -- : BFD_RELOC_PPC64_TLS_PCREL PowerPC and PowerPC64 thread-local storage relocations. -- : BFD_RELOC_I370_D12 @@ -6169,6 +6197,8 @@ -- : BFD_RELOC_MSP430_ABS_HI16 -- : BFD_RELOC_MSP430_PREL31 -- : BFD_RELOC_MSP430_SYM_DIFF + -- : BFD_RELOC_MSP430_SET_ULEB128 + -- : BFD_RELOC_MSP430_SUB_ULEB128 msp430 specific relocation codes -- : BFD_RELOC_NIOS2_S16 -- : BFD_RELOC_NIOS2_U16 @@ -6270,6 +6300,8 @@ -- : BFD_RELOC_XTENSA_DIFF8 -- : BFD_RELOC_XTENSA_DIFF16 -- : BFD_RELOC_XTENSA_DIFF32 + Xtensa relocations for backward compatibility. These have been + replaced by BFD_RELOC_XTENSA_PDIFF and BFD_RELOC_XTENSA_NDIFF. Xtensa relocations to mark the difference of two local symbols. These are only needed to support linker relaxation and can be ignored when not relaxing. The field is set to the value of the @@ -6333,8 +6365,37 @@ -- : BFD_RELOC_XTENSA_TLS_ARG -- : BFD_RELOC_XTENSA_TLS_CALL Xtensa TLS relocations. + -- : BFD_RELOC_XTENSA_PDIFF8 + -- : BFD_RELOC_XTENSA_PDIFF16 + -- : BFD_RELOC_XTENSA_PDIFF32 + -- : BFD_RELOC_XTENSA_NDIFF8 + -- : BFD_RELOC_XTENSA_NDIFF16 + -- : BFD_RELOC_XTENSA_NDIFF32 + Xtensa relocations to mark the difference of two local symbols. + These are only needed to support linker relaxation and can be + ignored when not relaxing. The field is set to the value of the + difference assuming no relaxation. The relocation encodes the + position of the subtracted symbol so the linker can determine + whether to adjust the field value. PDIFF relocations are used for + positive differences, NDIFF relocations are used for negative + differences. The difference value is treated as unsigned with + these relocation types, giving full 8/16 value ranges. -- : BFD_RELOC_Z80_DISP8 8 bit signed offset in (ix+d) or (iy+d). + -- : BFD_RELOC_Z80_BYTE0 + First 8 bits of multibyte (32, 24 or 16 bit) value. + -- : BFD_RELOC_Z80_BYTE1 + Second 8 bits of multibyte (32, 24 or 16 bit) value. + -- : BFD_RELOC_Z80_BYTE2 + Third 8 bits of multibyte (32 or 24 bit) value. + -- : BFD_RELOC_Z80_BYTE3 + Fourth 8 bits of multibyte (32 bit) value. + -- : BFD_RELOC_Z80_WORD0 + Lowest 16 bits of multibyte (32 or 24 bit) value. + -- : BFD_RELOC_Z80_WORD1 + Highest 16 bits of multibyte (32 or 24 bit) value. + -- : BFD_RELOC_Z80_16_BE + Like BFD_RELOC_16 but big-endian. -- : BFD_RELOC_Z8K_DISP7 DJNZ offset. -- : BFD_RELOC_Z8K_CALLR @@ -7429,6 +7490,8 @@ /* Forward declaration. */ typedef struct flag_info flag_info; + typedef void (*bfd_cleanup) (bfd *); + typedef struct bfd_target { /* Identifies the kind of target, e.g., SunOS4, Ultrix, etc. */ @@ -7493,9 +7556,9 @@ /* Format dependent routines: these are vectors of entry points within the target vector structure, one for each format to check. */ - /* Check the format of a file being read. Return a bfd_target * or zero. */ - const struct bfd_target * - (*_bfd_check_format[bfd_type_end]) (bfd *); + /* Check the format of a file being read. Return a bfd_cleanup on + success or zero on failure. */ + bfd_cleanup (*_bfd_check_format[bfd_type_end]) (bfd *); /* Set the format of a file being written. */ bfd_boolean (*_bfd_set_format[bfd_type_end]) (bfd *); @@ -7643,9 +7706,10 @@ #define bfd_get_symbol_info(b,p,e) \ BFD_SEND (b, _bfd_get_symbol_info, (b,p,e)) const char *(*_bfd_get_symbol_version_string) (bfd *, struct bfd_symbol *, + bfd_boolean, bfd_boolean *); - #define bfd_get_symbol_version_string(b,s,h) \ - BFD_SEND (b, _bfd_get_symbol_version_string, (b,s,h)) + #define bfd_get_symbol_version_string(b,s,p,h) \ + BFD_SEND (b, _bfd_get_symbol_version_string, (b,s,p,h)) bfd_boolean (*_bfd_is_local_label_name) (bfd *, const char *); bfd_boolean (*_bfd_is_target_special_symbol) (bfd *, asymbol *); alent * (*_get_lineno) (bfd *, struct bfd_symbol *); @@ -8166,10 +8230,6 @@ bfd_arch_k1om, /* Intel K1OM. */ #define bfd_mach_k1om (1 << 6) #define bfd_mach_k1om_intel_syntax (bfd_mach_k1om | bfd_mach_i386_intel_syntax) - #define bfd_mach_i386_nacl (1 << 7) - #define bfd_mach_i386_i386_nacl (bfd_mach_i386_i386 | bfd_mach_i386_nacl) - #define bfd_mach_x86_64_nacl (bfd_mach_x86_64 | bfd_mach_i386_nacl) - #define bfd_mach_x64_32_nacl (bfd_mach_x64_32 | bfd_mach_i386_nacl) bfd_arch_iamcu, /* Intel MCU. */ #define bfd_mach_iamcu (1 << 8) #define bfd_mach_i386_iamcu (bfd_mach_i386_i386 | bfd_mach_iamcu) @@ -8187,7 +8247,6 @@ #define bfd_mach_h8300sx 6 #define bfd_mach_h8300sxn 7 bfd_arch_pdp11, /* DEC PDP-11. */ - bfd_arch_plugin, bfd_arch_powerpc, /* PowerPC. */ #define bfd_mach_ppc 32 #define bfd_mach_ppc64 64 @@ -8310,7 +8369,6 @@ #define bfd_mach_tic4x 40 bfd_arch_tic54x, /* Texas Instruments TMS320C54X. */ bfd_arch_tic6x, /* Texas Instruments TMS320C6X. */ - bfd_arch_tic80, /* TI TMS320c80 (MVP). */ bfd_arch_v850, /* NEC V850. */ bfd_arch_v850_rh850,/* NEC V850 (using RH850 ABI). */ #define bfd_mach_v850 1 @@ -8372,6 +8430,7 @@ #define bfd_mach_iq10 2 bfd_arch_bpf, /* Linux eBPF. */ #define bfd_mach_bpf 1 + #define bfd_mach_xbpf 2 bfd_arch_epiphany, /* Adapteva EPIPHANY. */ #define bfd_mach_epiphany16 1 #define bfd_mach_epiphany32 2 @@ -8461,10 +8520,25 @@ bfd_arch_xtensa, /* Tensilica's Xtensa cores. */ #define bfd_mach_xtensa 1 bfd_arch_z80, - #define bfd_mach_z80strict 1 /* No undocumented opcodes. */ - #define bfd_mach_z80 3 /* With ixl, ixh, iyl, and iyh. */ - #define bfd_mach_z80full 7 /* All undocumented instructions. */ - #define bfd_mach_r800 11 /* R800: successor with multiplication. */ + /* Zilog Z80 without undocumented opcodes. */ + #define bfd_mach_z80strict 1 + /* Zilog Z180: successor with additional instructions, but without + halves of ix and iy. */ + #define bfd_mach_z180 2 + /* Zilog Z80 with ixl, ixh, iyl, and iyh. */ + #define bfd_mach_z80 3 + /* Zilog eZ80 (successor of Z80 & Z180) in Z80 (16-bit address) mode. */ + #define bfd_mach_ez80_z80 4 + /* Zilog eZ80 (successor of Z80 & Z180) in ADL (24-bit address) mode. */ + #define bfd_mach_ez80_adl 5 + /* Z80N */ + #define bfd_mach_z80n 6 + /* Zilog Z80 with all undocumented instructions. */ + #define bfd_mach_z80full 7 + /* GameBoy Z80 (reduced instruction set). */ + #define bfd_mach_gbz80 8 + /* ASCII R800: successor with multiplication. */ + #define bfd_mach_r800 11 bfd_arch_lm32, /* Lattice Mico32. */ #define bfd_mach_lm32 1 bfd_arch_microblaze,/* Xilinx MicroBlaze. */ @@ -8475,6 +8549,7 @@ #define bfd_mach_tilegx32 2 bfd_arch_aarch64, /* AArch64. */ #define bfd_mach_aarch64 0 + #define bfd_mach_aarch64_8R 1 #define bfd_mach_aarch64_ilp32 32 bfd_arch_nios2, /* Nios II. */ #define bfd_mach_nios2 0 @@ -8498,6 +8573,7 @@ #define bfd_mach_ck803 5 #define bfd_mach_ck807 6 #define bfd_mach_ck810 7 + #define bfd_mach_ck860 8 bfd_arch_last }; @@ -8983,16 +9059,7 @@ Allocate a block of WANTED bytes of memory attached to 'abfd' and return a pointer to it. -2.14.1.13 'bfd_alloc2' -...................... - -*Synopsis* - void *bfd_alloc2 (bfd *abfd, bfd_size_type nmemb, bfd_size_type size); - *Description* -Allocate a block of NMEMB elements of SIZE bytes each of memory attached -to 'abfd' and return a pointer to it. - -2.14.1.14 'bfd_zalloc' +2.14.1.13 'bfd_zalloc' ...................... *Synopsis* @@ -9001,16 +9068,7 @@ Allocate a block of WANTED bytes of zeroed memory attached to 'abfd' and return a pointer to it. -2.14.1.15 'bfd_zalloc2' -....................... - -*Synopsis* - void *bfd_zalloc2 (bfd *abfd, bfd_size_type nmemb, bfd_size_type size); - *Description* -Allocate a block of NMEMB elements of SIZE bytes each of zeroed memory -attached to 'abfd' and return a pointer to it. - -2.14.1.16 'bfd_calc_gnu_debuglink_crc32' +2.14.1.14 'bfd_calc_gnu_debuglink_crc32' ........................................ *Synopsis* @@ -9024,7 +9082,7 @@ *Returns* Return the updated CRC32 value. -2.14.1.17 'bfd_get_debug_link_info_1' +2.14.1.15 'bfd_get_debug_link_info_1' ..................................... *Synopsis* @@ -9046,7 +9104,7 @@ The returned filename is allocated with 'malloc'; freeing it is the responsibility of the caller. -2.14.1.18 'bfd_get_debug_link_info' +2.14.1.16 'bfd_get_debug_link_info' ................................... *Synopsis* @@ -9064,7 +9122,7 @@ The returned filename is allocated with 'malloc'; freeing it is the responsibility of the caller. -2.14.1.19 'bfd_get_alt_debug_link_info' +2.14.1.17 'bfd_get_alt_debug_link_info' ....................................... *Synopsis* @@ -9078,7 +9136,7 @@ filename and build_id are allocated with 'malloc'; freeing them is the responsibility of the caller. -2.14.1.20 'separate_debug_file_exists' +2.14.1.18 'separate_debug_file_exists' ...................................... *Synopsis* @@ -9091,7 +9149,7 @@ The CRC32_P parameter is an untyped pointer because this routine is used as a 'check_func_type' function. -2.14.1.21 'separate_alt_debug_file_exists' +2.14.1.19 'separate_alt_debug_file_exists' .......................................... *Synopsis* @@ -9100,7 +9158,7 @@ *Description* Checks to see if NAME is a file. -2.14.1.22 'find_separate_debug_file' +2.14.1.20 'find_separate_debug_file' .................................... *Synopsis* @@ -9125,7 +9183,7 @@ result from the CHECK function. Returns NULL if no valid file could be found. -2.14.1.23 'bfd_follow_gnu_debuglink' +2.14.1.21 'bfd_follow_gnu_debuglink' .................................... *Synopsis* @@ -9146,7 +9204,7 @@ pointer to a heap-allocated string containing the filename. The caller is responsible for freeing this string. -2.14.1.24 'bfd_follow_gnu_debugaltlink' +2.14.1.22 'bfd_follow_gnu_debugaltlink' ....................................... *Synopsis* @@ -9166,7 +9224,7 @@ pointer to a heap-allocated string containing the filename. The caller is responsible for freeing this string. -2.14.1.25 'bfd_create_gnu_debuglink_section' +2.14.1.23 'bfd_create_gnu_debuglink_section' ............................................ *Synopsis* @@ -9180,7 +9238,7 @@ A pointer to the new section is returned if all is ok. Otherwise 'NULL' is returned and bfd_error is set. -2.14.1.26 'bfd_fill_in_gnu_debuglink_section' +2.14.1.24 'bfd_fill_in_gnu_debuglink_section' ............................................. *Synopsis* @@ -9195,7 +9253,7 @@ 'TRUE' is returned if all is ok. Otherwise 'FALSE' is returned and bfd_error is set. -2.14.1.27 'get_build_id' +2.14.1.25 'get_build_id' ........................ *Synopsis* @@ -9209,7 +9267,7 @@ Returns a pointer to the build-id structure if a build-id could be found. If no build-id is found NULL is returned and error code is set. -2.14.1.28 'get_build_id_name' +2.14.1.26 'get_build_id_name' ............................. *Synopsis* @@ -9226,7 +9284,7 @@ a 'struct bfd_build_id' pointer) is set to a pointer to the build_id structure. -2.14.1.29 'check_build_id_file' +2.14.1.27 'check_build_id_file' ............................... *Synopsis* @@ -9240,7 +9298,7 @@ which matches the build-id pointed at by BUILD_ID_P (which is really a 'struct bfd_build_id **'). -2.14.1.30 'bfd_follow_build_id_debuglink' +2.14.1.28 'bfd_follow_build_id_debuglink' ......................................... *Synopsis* @@ -9264,14 +9322,15 @@ pointer to a heap-allocated string containing the filename. The caller is responsible for freeing this string. -2.14.1.31 'bfd_set_filename' +2.14.1.29 'bfd_set_filename' ............................ *Synopsis* - void bfd_set_filename (bfd *abfd, char *filename); + const char *bfd_set_filename (bfd *abfd, const char *filename); *Description* -Set the filename of ABFD. The old filename, if any, is freed. FILENAME -must be allocated using 'xmalloc'. After this call, it is owned ABFD. +Set the filename of ABFD, copying the FILENAME parameter to bfd_alloc'd +memory owned by ABFD. Returns a pointer the newly allocated name, or +NULL if the allocation failed.  File: bfd.info, Node: Internal, Next: File Caching, Prev: Opening and Closing, Up: BFD front end @@ -9371,7 +9430,7 @@ BFD_SEND (abfd, bfd_getx_signed_64, (ptr)) #define bfd_get(bits, abfd, ptr) \ - ((bits) == 8 ? (bfd_vma) bfd_get_8 (abfd, ptr) \ + ((bits) == 8 ? bfd_get_8 (abfd, ptr) \ : (bits) == 16 ? bfd_get_16 (abfd, ptr) \ : (bits) == 32 ? bfd_get_32 (abfd, ptr) \ : (bits) == 64 ? bfd_get_64 (abfd, ptr) \ @@ -11986,7 +12045,7 @@ (line 83) * _bfd_generic_make_empty_symbol: symbol handling functions. (line 96) -* _bfd_generic_set_reloc: howto manager. (line 3496) +* _bfd_generic_set_reloc: howto manager. (line 3529) * _bfd_generic_verify_endian_match: Writing the symbol table. (line 172) * _bfd_link_add_symbols in target vector: Adding Symbols to the Hash Table. @@ -11997,7 +12056,7 @@ (line 6) * _bfd_relocate_contents: Relocating the section contents. (line 22) -* _bfd_unrecognized_reloc: howto manager. (line 3508) +* _bfd_unrecognized_reloc: howto manager. (line 3541) * aout_SIZE_machine_type: aout. (line 145) * aout_SIZE_mkobject: aout. (line 137) * aout_SIZE_new_section_hook: aout. (line 175) @@ -12010,15 +12069,13 @@ * BFD canonical format: Canonical format. (line 11) * bfd_alloc: Opening and Closing. (line 239) -* bfd_alloc2: Opening and Closing. - (line 248) -* bfd_alt_mach_code: Miscellaneous. (line 291) -* bfd_arch_bits_per_address: Architectures. (line 655) -* bfd_arch_bits_per_byte: Architectures. (line 647) -* bfd_arch_default_fill: Architectures. (line 737) -* bfd_arch_get_compatible: Architectures. (line 590) -* bfd_arch_list: Architectures. (line 581) -* bfd_arch_mach_octets_per_byte: Architectures. (line 725) +* bfd_alt_mach_code: Miscellaneous. (line 292) +* bfd_arch_bits_per_address: Architectures. (line 667) +* bfd_arch_bits_per_byte: Architectures. (line 659) +* bfd_arch_default_fill: Architectures. (line 749) +* bfd_arch_get_compatible: Architectures. (line 602) +* bfd_arch_list: Architectures. (line 593) +* bfd_arch_mach_octets_per_byte: Architectures. (line 737) * BFD_ARELOC_BFIN_ADD: howto manager. (line 1144) * BFD_ARELOC_BFIN_ADDR: howto manager. (line 1178) * BFD_ARELOC_BFIN_AND: howto manager. (line 1158) @@ -12043,11 +12100,11 @@ * bfd_cache_close_all: File Caching. (line 38) * bfd_cache_init: File Caching. (line 17) * bfd_calc_gnu_debuglink_crc32: Opening and Closing. - (line 275) + (line 257) * bfd_canonicalize_reloc: Miscellaneous. (line 18) * bfd_canonicalize_symtab: symbol handling functions. (line 52) -* bfd_check_compression_header: Miscellaneous. (line 363) +* bfd_check_compression_header: Miscellaneous. (line 364) * bfd_check_format: Formats. (line 20) * bfd_check_format_matches: Formats. (line 51) * bfd_check_overflow: typedef arelent. (line 328) @@ -12056,8 +12113,8 @@ * bfd_close_all_done: Opening and Closing. (line 179) * bfd_coff_backend_data: coff. (line 296) -* bfd_convert_section_contents: Miscellaneous. (line 401) -* bfd_convert_section_size: Miscellaneous. (line 391) +* bfd_convert_section_contents: Miscellaneous. (line 402) +* bfd_convert_section_size: Miscellaneous. (line 392) * bfd_copy_private_bfd_data: Miscellaneous. (line 159) * bfd_copy_private_header_data: Miscellaneous. (line 142) * bfd_copy_private_section_data: section prototypes. (line 279) @@ -12069,34 +12126,34 @@ * bfd_create: Opening and Closing. (line 198) * bfd_create_gnu_debuglink_section: Opening and Closing. - (line 431) + (line 413) * bfd_decode_symclass: symbol handling functions. (line 116) -* bfd_default_arch_struct: Architectures. (line 602) -* bfd_default_compatible: Architectures. (line 664) -* bfd_default_reloc_type_lookup: howto manager. (line 3420) -* bfd_default_scan: Architectures. (line 673) -* bfd_default_set_arch_mach: Architectures. (line 620) -* bfd_demangle: Miscellaneous. (line 342) -* bfd_emul_get_commonpagesize: Miscellaneous. (line 322) -* bfd_emul_get_maxpagesize: Miscellaneous. (line 302) -* bfd_emul_set_commonpagesize: Miscellaneous. (line 333) -* bfd_emul_set_maxpagesize: Miscellaneous. (line 313) +* bfd_default_arch_struct: Architectures. (line 614) +* bfd_default_compatible: Architectures. (line 676) +* bfd_default_reloc_type_lookup: howto manager. (line 3453) +* bfd_default_scan: Architectures. (line 685) +* bfd_default_set_arch_mach: Architectures. (line 632) +* bfd_demangle: Miscellaneous. (line 343) +* bfd_emul_get_commonpagesize: Miscellaneous. (line 323) +* bfd_emul_get_maxpagesize: Miscellaneous. (line 303) +* bfd_emul_set_commonpagesize: Miscellaneous. (line 334) +* bfd_emul_set_maxpagesize: Miscellaneous. (line 314) * bfd_errmsg: Error reporting. (line 79) * bfd_fdopenr: Opening and Closing. (line 56) * bfd_fill_in_gnu_debuglink_section: Opening and Closing. - (line 445) -* bfd_find_target: bfd_target. (line 567) + (line 427) +* bfd_find_target: bfd_target. (line 570) * bfd_find_version_for_sym: Writing the symbol table. (line 111) -* bfd_flavour_name: bfd_target. (line 630) +* bfd_flavour_name: bfd_target. (line 633) * bfd_follow_build_id_debuglink: Opening and Closing. - (line 505) + (line 487) * bfd_follow_gnu_debugaltlink: Opening and Closing. - (line 411) + (line 393) * bfd_follow_gnu_debuglink: Opening and Closing. - (line 390) + (line 372) * bfd_fopen: Opening and Closing. (line 11) * bfd_format_string: Formats. (line 78) @@ -12105,43 +12162,43 @@ * bfd_generic_define_start_stop: Writing the symbol table. (line 97) * bfd_generic_discard_group: section prototypes. (line 312) -* bfd_generic_gc_sections: howto manager. (line 3451) -* bfd_generic_get_relocated_section_contents: howto manager. (line 3481) +* bfd_generic_gc_sections: howto manager. (line 3484) +* bfd_generic_get_relocated_section_contents: howto manager. (line 3514) * bfd_generic_group_name: section prototypes. (line 304) * bfd_generic_is_group_section: section prototypes. (line 296) -* bfd_generic_lookup_section_flags: howto manager. (line 3461) -* bfd_generic_merge_sections: howto manager. (line 3471) -* bfd_generic_relax_section: howto manager. (line 3438) +* bfd_generic_lookup_section_flags: howto manager. (line 3494) +* bfd_generic_merge_sections: howto manager. (line 3504) +* bfd_generic_relax_section: howto manager. (line 3471) * bfd_get_alt_debug_link_info: Opening and Closing. - (line 329) -* bfd_get_arch: Architectures. (line 631) -* bfd_get_arch_info: Architectures. (line 683) + (line 311) +* bfd_get_arch: Architectures. (line 643) +* bfd_get_arch_info: Architectures. (line 695) * bfd_get_arch_size: Miscellaneous. (line 63) -* bfd_get_compression_header_size: Miscellaneous. (line 380) +* bfd_get_compression_header_size: Miscellaneous. (line 381) * bfd_get_debug_link_info: Opening and Closing. - (line 311) + (line 293) * bfd_get_debug_link_info_1: Opening and Closing. - (line 289) + (line 271) * bfd_get_error: Error reporting. (line 49) -* bfd_get_file_size: Miscellaneous. (line 490) +* bfd_get_file_size: Miscellaneous. (line 493) * bfd_get_gp_size: Miscellaneous. (line 106) * bfd_get_linker_section: section prototypes. (line 37) -* bfd_get_mach: Architectures. (line 639) -* bfd_get_mtime: Miscellaneous. (line 453) +* bfd_get_mach: Architectures. (line 651) +* bfd_get_mtime: Miscellaneous. (line 454) * bfd_get_next_mapent: Archives. (line 57) * bfd_get_next_section_by_name: section prototypes. (line 25) -* bfd_get_reloc_code_name: howto manager. (line 3429) +* bfd_get_reloc_code_name: howto manager. (line 3462) * bfd_get_reloc_size: typedef arelent. (line 306) * bfd_get_reloc_upper_bound: Miscellaneous. (line 8) * bfd_get_section_by_name: section prototypes. (line 16) * bfd_get_section_by_name_if: section prototypes. (line 46) * bfd_get_section_contents: section prototypes. (line 252) * bfd_get_sign_extend_vma: Miscellaneous. (line 78) -* bfd_get_size: Miscellaneous. (line 462) +* bfd_get_size: Miscellaneous. (line 463) * bfd_get_size <1>: Internal. (line 24) * bfd_get_symtab_upper_bound: symbol handling functions. (line 5) -* bfd_get_target_info: bfd_target. (line 583) +* bfd_get_target_info: bfd_target. (line 586) * bfd_get_unique_section_name: section prototypes. (line 65) * bfd_hash_allocate: Creating and Freeing a Hash Table. (line 17) @@ -12172,13 +12229,13 @@ (line 39) * bfd_is_undefined_symclass: symbol handling functions. (line 125) -* bfd_iterate_over_targets: bfd_target. (line 618) +* bfd_iterate_over_targets: bfd_target. (line 621) * bfd_link_check_relocs: Writing the symbol table. (line 133) * bfd_link_split_section: Writing the symbol table. (line 43) * bfd_log2: Internal. (line 180) -* bfd_lookup_arch: Architectures. (line 691) +* bfd_lookup_arch: Architectures. (line 703) * bfd_make_debug_symbol: symbol handling functions. (line 106) * bfd_make_empty_symbol: symbol handling functions. @@ -12196,8 +12253,8 @@ * bfd_map_over_sections: section prototypes. (line 176) * bfd_merge_private_bfd_data: Writing the symbol table. (line 155) -* bfd_mmap: Miscellaneous. (line 499) -* bfd_octets_per_byte: Architectures. (line 714) +* bfd_mmap: Miscellaneous. (line 502) +* bfd_octets_per_byte: Architectures. (line 726) * bfd_openr: Opening and Closing. (line 37) * bfd_openr_iovec: Opening and Closing. @@ -12210,8 +12267,8 @@ * bfd_open_file: File Caching. (line 51) * bfd_perform_relocation: typedef arelent. (line 357) * bfd_perror: Error reporting. (line 88) -* bfd_printable_arch_mach: Architectures. (line 702) -* bfd_printable_name: Architectures. (line 562) +* bfd_printable_arch_mach: Architectures. (line 714) +* bfd_printable_name: Architectures. (line 574) * bfd_print_symbol_vandf: symbol handling functions. (line 73) * bfd_put_size: Internal. (line 21) @@ -12349,145 +12406,145 @@ * BFD_RELOC_8_PCREL: howto manager. (line 38) * BFD_RELOC_8_PLTOFF: howto manager. (line 65) * BFD_RELOC_8_PLT_PCREL: howto manager. (line 58) -* BFD_RELOC_AARCH64_16: howto manager. (line 2761) -* BFD_RELOC_AARCH64_16_PCREL: howto manager. (line 2767) -* BFD_RELOC_AARCH64_32: howto manager. (line 2760) -* BFD_RELOC_AARCH64_32_PCREL: howto manager. (line 2766) -* BFD_RELOC_AARCH64_64: howto manager. (line 2759) -* BFD_RELOC_AARCH64_64_PCREL: howto manager. (line 2765) -* BFD_RELOC_AARCH64_ADD_LO12: howto manager. (line 2840) -* BFD_RELOC_AARCH64_ADR_GOT_PAGE: howto manager. (line 2886) -* BFD_RELOC_AARCH64_ADR_HI21_NC_PCREL: howto manager. (line 2836) -* BFD_RELOC_AARCH64_ADR_HI21_PCREL: howto manager. (line 2833) -* BFD_RELOC_AARCH64_ADR_LO21_PCREL: howto manager. (line 2830) -* BFD_RELOC_AARCH64_BRANCH19: howto manager. (line 2852) -* BFD_RELOC_AARCH64_CALL26: howto manager. (line 2860) -* BFD_RELOC_AARCH64_COPY: howto manager. (line 3053) -* BFD_RELOC_AARCH64_GAS_INTERNAL_FIXUP: howto manager. (line 3077) -* BFD_RELOC_AARCH64_GLOB_DAT: howto manager. (line 3055) -* BFD_RELOC_AARCH64_GOT_LD_PREL19: howto manager. (line 2880) -* BFD_RELOC_AARCH64_IRELATIVE: howto manager. (line 3069) -* BFD_RELOC_AARCH64_JUMP26: howto manager. (line 2856) -* BFD_RELOC_AARCH64_JUMP_SLOT: howto manager. (line 3057) -* BFD_RELOC_AARCH64_LD32_GOTPAGE_LO14: howto manager. (line 2907) -* BFD_RELOC_AARCH64_LD32_GOT_LO12_NC: howto manager. (line 2894) -* BFD_RELOC_AARCH64_LD64_GOTOFF_LO15: howto manager. (line 2904) -* BFD_RELOC_AARCH64_LD64_GOTPAGE_LO15: howto manager. (line 2910) -* BFD_RELOC_AARCH64_LD64_GOT_LO12_NC: howto manager. (line 2890) -* BFD_RELOC_AARCH64_LDST128_LO12: howto manager. (line 2876) -* BFD_RELOC_AARCH64_LDST16_LO12: howto manager. (line 2864) -* BFD_RELOC_AARCH64_LDST32_LO12: howto manager. (line 2868) -* BFD_RELOC_AARCH64_LDST64_LO12: howto manager. (line 2872) -* BFD_RELOC_AARCH64_LDST8_LO12: howto manager. (line 2844) -* BFD_RELOC_AARCH64_LDST_LO12: howto manager. (line 3080) -* BFD_RELOC_AARCH64_LD_GOT_LO12_NC: howto manager. (line 3098) -* BFD_RELOC_AARCH64_LD_LO19_PCREL: howto manager. (line 2826) -* BFD_RELOC_AARCH64_MOVW_G0: howto manager. (line 2770) -* BFD_RELOC_AARCH64_MOVW_G0_NC: howto manager. (line 2773) -* BFD_RELOC_AARCH64_MOVW_G0_S: howto manager. (line 2791) -* BFD_RELOC_AARCH64_MOVW_G1: howto manager. (line 2776) -* BFD_RELOC_AARCH64_MOVW_G1_NC: howto manager. (line 2779) -* BFD_RELOC_AARCH64_MOVW_G1_S: howto manager. (line 2795) -* BFD_RELOC_AARCH64_MOVW_G2: howto manager. (line 2782) -* BFD_RELOC_AARCH64_MOVW_G2_NC: howto manager. (line 2785) -* BFD_RELOC_AARCH64_MOVW_G2_S: howto manager. (line 2799) -* BFD_RELOC_AARCH64_MOVW_G3: howto manager. (line 2788) -* BFD_RELOC_AARCH64_MOVW_GOTOFF_G0_NC: howto manager. (line 2898) -* BFD_RELOC_AARCH64_MOVW_GOTOFF_G1: howto manager. (line 2901) -* BFD_RELOC_AARCH64_MOVW_PREL_G0: howto manager. (line 2803) -* BFD_RELOC_AARCH64_MOVW_PREL_G0_NC: howto manager. (line 2807) -* BFD_RELOC_AARCH64_MOVW_PREL_G1: howto manager. (line 2811) -* BFD_RELOC_AARCH64_MOVW_PREL_G1_NC: howto manager. (line 2814) -* BFD_RELOC_AARCH64_MOVW_PREL_G2: howto manager. (line 2817) -* BFD_RELOC_AARCH64_MOVW_PREL_G2_NC: howto manager. (line 2820) -* BFD_RELOC_AARCH64_MOVW_PREL_G3: howto manager. (line 2823) -* BFD_RELOC_AARCH64_NONE: howto manager. (line 2757) -* BFD_RELOC_AARCH64_NULL: howto manager. (line 2755) -* BFD_RELOC_AARCH64_RELATIVE: howto manager. (line 3059) -* BFD_RELOC_AARCH64_RELOC_END: howto manager. (line 3071) -* BFD_RELOC_AARCH64_RELOC_START: howto manager. (line 2750) -* BFD_RELOC_AARCH64_TLSDESC: howto manager. (line 3067) -* BFD_RELOC_AARCH64_TLSDESC_ADD: howto manager. (line 3049) -* BFD_RELOC_AARCH64_TLSDESC_ADD_LO12: howto manager. (line 3041) -* BFD_RELOC_AARCH64_TLSDESC_ADR_PAGE21: howto manager. (line 3035) -* BFD_RELOC_AARCH64_TLSDESC_ADR_PREL21: howto manager. (line 3033) -* BFD_RELOC_AARCH64_TLSDESC_CALL: howto manager. (line 3051) -* BFD_RELOC_AARCH64_TLSDESC_LD32_LO12_NC: howto manager. (line 3039) -* BFD_RELOC_AARCH64_TLSDESC_LD64_LO12: howto manager. (line 3037) -* BFD_RELOC_AARCH64_TLSDESC_LDR: howto manager. (line 3047) -* BFD_RELOC_AARCH64_TLSDESC_LD_LO12_NC: howto manager. (line 3104) -* BFD_RELOC_AARCH64_TLSDESC_LD_PREL19: howto manager. (line 3031) -* BFD_RELOC_AARCH64_TLSDESC_OFF_G0_NC: howto manager. (line 3045) -* BFD_RELOC_AARCH64_TLSDESC_OFF_G1: howto manager. (line 3043) -* BFD_RELOC_AARCH64_TLSGD_ADD_LO12_NC: howto manager. (line 2920) -* BFD_RELOC_AARCH64_TLSGD_ADR_PAGE21: howto manager. (line 2913) -* BFD_RELOC_AARCH64_TLSGD_ADR_PREL21: howto manager. (line 2918) -* BFD_RELOC_AARCH64_TLSGD_MOVW_G0_NC: howto manager. (line 2924) -* BFD_RELOC_AARCH64_TLSGD_MOVW_G1: howto manager. (line 2926) +* BFD_RELOC_AARCH64_16: howto manager. (line 2794) +* BFD_RELOC_AARCH64_16_PCREL: howto manager. (line 2800) +* BFD_RELOC_AARCH64_32: howto manager. (line 2793) +* BFD_RELOC_AARCH64_32_PCREL: howto manager. (line 2799) +* BFD_RELOC_AARCH64_64: howto manager. (line 2792) +* BFD_RELOC_AARCH64_64_PCREL: howto manager. (line 2798) +* BFD_RELOC_AARCH64_ADD_LO12: howto manager. (line 2873) +* BFD_RELOC_AARCH64_ADR_GOT_PAGE: howto manager. (line 2919) +* BFD_RELOC_AARCH64_ADR_HI21_NC_PCREL: howto manager. (line 2869) +* BFD_RELOC_AARCH64_ADR_HI21_PCREL: howto manager. (line 2866) +* BFD_RELOC_AARCH64_ADR_LO21_PCREL: howto manager. (line 2863) +* BFD_RELOC_AARCH64_BRANCH19: howto manager. (line 2885) +* BFD_RELOC_AARCH64_CALL26: howto manager. (line 2893) +* BFD_RELOC_AARCH64_COPY: howto manager. (line 3086) +* BFD_RELOC_AARCH64_GAS_INTERNAL_FIXUP: howto manager. (line 3110) +* BFD_RELOC_AARCH64_GLOB_DAT: howto manager. (line 3088) +* BFD_RELOC_AARCH64_GOT_LD_PREL19: howto manager. (line 2913) +* BFD_RELOC_AARCH64_IRELATIVE: howto manager. (line 3102) +* BFD_RELOC_AARCH64_JUMP26: howto manager. (line 2889) +* BFD_RELOC_AARCH64_JUMP_SLOT: howto manager. (line 3090) +* BFD_RELOC_AARCH64_LD32_GOTPAGE_LO14: howto manager. (line 2940) +* BFD_RELOC_AARCH64_LD32_GOT_LO12_NC: howto manager. (line 2927) +* BFD_RELOC_AARCH64_LD64_GOTOFF_LO15: howto manager. (line 2937) +* BFD_RELOC_AARCH64_LD64_GOTPAGE_LO15: howto manager. (line 2943) +* BFD_RELOC_AARCH64_LD64_GOT_LO12_NC: howto manager. (line 2923) +* BFD_RELOC_AARCH64_LDST128_LO12: howto manager. (line 2909) +* BFD_RELOC_AARCH64_LDST16_LO12: howto manager. (line 2897) +* BFD_RELOC_AARCH64_LDST32_LO12: howto manager. (line 2901) +* BFD_RELOC_AARCH64_LDST64_LO12: howto manager. (line 2905) +* BFD_RELOC_AARCH64_LDST8_LO12: howto manager. (line 2877) +* BFD_RELOC_AARCH64_LDST_LO12: howto manager. (line 3113) +* BFD_RELOC_AARCH64_LD_GOT_LO12_NC: howto manager. (line 3131) +* BFD_RELOC_AARCH64_LD_LO19_PCREL: howto manager. (line 2859) +* BFD_RELOC_AARCH64_MOVW_G0: howto manager. (line 2803) +* BFD_RELOC_AARCH64_MOVW_G0_NC: howto manager. (line 2806) +* BFD_RELOC_AARCH64_MOVW_G0_S: howto manager. (line 2824) +* BFD_RELOC_AARCH64_MOVW_G1: howto manager. (line 2809) +* BFD_RELOC_AARCH64_MOVW_G1_NC: howto manager. (line 2812) +* BFD_RELOC_AARCH64_MOVW_G1_S: howto manager. (line 2828) +* BFD_RELOC_AARCH64_MOVW_G2: howto manager. (line 2815) +* BFD_RELOC_AARCH64_MOVW_G2_NC: howto manager. (line 2818) +* BFD_RELOC_AARCH64_MOVW_G2_S: howto manager. (line 2832) +* BFD_RELOC_AARCH64_MOVW_G3: howto manager. (line 2821) +* BFD_RELOC_AARCH64_MOVW_GOTOFF_G0_NC: howto manager. (line 2931) +* BFD_RELOC_AARCH64_MOVW_GOTOFF_G1: howto manager. (line 2934) +* BFD_RELOC_AARCH64_MOVW_PREL_G0: howto manager. (line 2836) +* BFD_RELOC_AARCH64_MOVW_PREL_G0_NC: howto manager. (line 2840) +* BFD_RELOC_AARCH64_MOVW_PREL_G1: howto manager. (line 2844) +* BFD_RELOC_AARCH64_MOVW_PREL_G1_NC: howto manager. (line 2847) +* BFD_RELOC_AARCH64_MOVW_PREL_G2: howto manager. (line 2850) +* BFD_RELOC_AARCH64_MOVW_PREL_G2_NC: howto manager. (line 2853) +* BFD_RELOC_AARCH64_MOVW_PREL_G3: howto manager. (line 2856) +* BFD_RELOC_AARCH64_NONE: howto manager. (line 2790) +* BFD_RELOC_AARCH64_NULL: howto manager. (line 2788) +* BFD_RELOC_AARCH64_RELATIVE: howto manager. (line 3092) +* BFD_RELOC_AARCH64_RELOC_END: howto manager. (line 3104) +* BFD_RELOC_AARCH64_RELOC_START: howto manager. (line 2783) +* BFD_RELOC_AARCH64_TLSDESC: howto manager. (line 3100) +* BFD_RELOC_AARCH64_TLSDESC_ADD: howto manager. (line 3082) +* BFD_RELOC_AARCH64_TLSDESC_ADD_LO12: howto manager. (line 3074) +* BFD_RELOC_AARCH64_TLSDESC_ADR_PAGE21: howto manager. (line 3068) +* BFD_RELOC_AARCH64_TLSDESC_ADR_PREL21: howto manager. (line 3066) +* BFD_RELOC_AARCH64_TLSDESC_CALL: howto manager. (line 3084) +* BFD_RELOC_AARCH64_TLSDESC_LD32_LO12_NC: howto manager. (line 3072) +* BFD_RELOC_AARCH64_TLSDESC_LD64_LO12: howto manager. (line 3070) +* BFD_RELOC_AARCH64_TLSDESC_LDR: howto manager. (line 3080) +* BFD_RELOC_AARCH64_TLSDESC_LD_LO12_NC: howto manager. (line 3137) +* BFD_RELOC_AARCH64_TLSDESC_LD_PREL19: howto manager. (line 3064) +* BFD_RELOC_AARCH64_TLSDESC_OFF_G0_NC: howto manager. (line 3078) +* BFD_RELOC_AARCH64_TLSDESC_OFF_G1: howto manager. (line 3076) +* BFD_RELOC_AARCH64_TLSGD_ADD_LO12_NC: howto manager. (line 2953) +* BFD_RELOC_AARCH64_TLSGD_ADR_PAGE21: howto manager. (line 2946) +* BFD_RELOC_AARCH64_TLSGD_ADR_PREL21: howto manager. (line 2951) +* BFD_RELOC_AARCH64_TLSGD_MOVW_G0_NC: howto manager. (line 2957) +* BFD_RELOC_AARCH64_TLSGD_MOVW_G1: howto manager. (line 2959) * BFD_RELOC_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21: howto manager. - (line 2928) + (line 2961) * BFD_RELOC_AARCH64_TLSIE_LD32_GOTTPREL_LO12_NC: howto manager. - (line 2932) + (line 2965) * BFD_RELOC_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC: howto manager. - (line 2930) + (line 2963) * BFD_RELOC_AARCH64_TLSIE_LD_GOTTPREL_LO12_NC: howto manager. - (line 3101) -* BFD_RELOC_AARCH64_TLSIE_LD_GOTTPREL_PREL19: howto manager. (line 2934) + (line 3134) +* BFD_RELOC_AARCH64_TLSIE_LD_GOTTPREL_PREL19: howto manager. (line 2967) * BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC: howto manager. - (line 2936) -* BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G1: howto manager. (line 2938) -* BFD_RELOC_AARCH64_TLSLD_ADD_DTPREL_HI12: howto manager. (line 2940) -* BFD_RELOC_AARCH64_TLSLD_ADD_DTPREL_LO12: howto manager. (line 2942) -* BFD_RELOC_AARCH64_TLSLD_ADD_DTPREL_LO12_NC: howto manager. (line 2944) -* BFD_RELOC_AARCH64_TLSLD_ADD_LO12_NC: howto manager. (line 2947) -* BFD_RELOC_AARCH64_TLSLD_ADR_PAGE21: howto manager. (line 2951) -* BFD_RELOC_AARCH64_TLSLD_ADR_PREL21: howto manager. (line 2954) -* BFD_RELOC_AARCH64_TLSLD_LDST16_DTPREL_LO12: howto manager. (line 2957) + (line 2969) +* BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G1: howto manager. (line 2971) +* BFD_RELOC_AARCH64_TLSLD_ADD_DTPREL_HI12: howto manager. (line 2973) +* BFD_RELOC_AARCH64_TLSLD_ADD_DTPREL_LO12: howto manager. (line 2975) +* BFD_RELOC_AARCH64_TLSLD_ADD_DTPREL_LO12_NC: howto manager. (line 2977) +* BFD_RELOC_AARCH64_TLSLD_ADD_LO12_NC: howto manager. (line 2980) +* BFD_RELOC_AARCH64_TLSLD_ADR_PAGE21: howto manager. (line 2984) +* BFD_RELOC_AARCH64_TLSLD_ADR_PREL21: howto manager. (line 2987) +* BFD_RELOC_AARCH64_TLSLD_LDST16_DTPREL_LO12: howto manager. (line 2990) * BFD_RELOC_AARCH64_TLSLD_LDST16_DTPREL_LO12_NC: howto manager. - (line 2960) -* BFD_RELOC_AARCH64_TLSLD_LDST32_DTPREL_LO12: howto manager. (line 2963) + (line 2993) +* BFD_RELOC_AARCH64_TLSLD_LDST32_DTPREL_LO12: howto manager. (line 2996) * BFD_RELOC_AARCH64_TLSLD_LDST32_DTPREL_LO12_NC: howto manager. - (line 2966) -* BFD_RELOC_AARCH64_TLSLD_LDST64_DTPREL_LO12: howto manager. (line 2969) + (line 2999) +* BFD_RELOC_AARCH64_TLSLD_LDST64_DTPREL_LO12: howto manager. (line 3002) * BFD_RELOC_AARCH64_TLSLD_LDST64_DTPREL_LO12_NC: howto manager. - (line 2972) -* BFD_RELOC_AARCH64_TLSLD_LDST8_DTPREL_LO12: howto manager. (line 2975) + (line 3005) +* BFD_RELOC_AARCH64_TLSLD_LDST8_DTPREL_LO12: howto manager. (line 3008) * BFD_RELOC_AARCH64_TLSLD_LDST8_DTPREL_LO12_NC: howto manager. - (line 2978) -* BFD_RELOC_AARCH64_TLSLD_LDST_DTPREL_LO12: howto manager. (line 3084) + (line 3011) +* BFD_RELOC_AARCH64_TLSLD_LDST_DTPREL_LO12: howto manager. (line 3117) * BFD_RELOC_AARCH64_TLSLD_LDST_DTPREL_LO12_NC: howto manager. - (line 3088) -* BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G0: howto manager. (line 2981) -* BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G0_NC: howto manager. (line 2983) -* BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G1: howto manager. (line 2985) -* BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G1_NC: howto manager. (line 2987) -* BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G2: howto manager. (line 2989) -* BFD_RELOC_AARCH64_TLSLE_ADD_TPREL_HI12: howto manager. (line 3001) -* BFD_RELOC_AARCH64_TLSLE_ADD_TPREL_LO12: howto manager. (line 3003) -* BFD_RELOC_AARCH64_TLSLE_ADD_TPREL_LO12_NC: howto manager. (line 3005) -* BFD_RELOC_AARCH64_TLSLE_LDST16_TPREL_LO12: howto manager. (line 3007) + (line 3121) +* BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G0: howto manager. (line 3014) +* BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G0_NC: howto manager. (line 3016) +* BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G1: howto manager. (line 3018) +* BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G1_NC: howto manager. (line 3020) +* BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G2: howto manager. (line 3022) +* BFD_RELOC_AARCH64_TLSLE_ADD_TPREL_HI12: howto manager. (line 3034) +* BFD_RELOC_AARCH64_TLSLE_ADD_TPREL_LO12: howto manager. (line 3036) +* BFD_RELOC_AARCH64_TLSLE_ADD_TPREL_LO12_NC: howto manager. (line 3038) +* BFD_RELOC_AARCH64_TLSLE_LDST16_TPREL_LO12: howto manager. (line 3040) * BFD_RELOC_AARCH64_TLSLE_LDST16_TPREL_LO12_NC: howto manager. - (line 3010) -* BFD_RELOC_AARCH64_TLSLE_LDST32_TPREL_LO12: howto manager. (line 3013) + (line 3043) +* BFD_RELOC_AARCH64_TLSLE_LDST32_TPREL_LO12: howto manager. (line 3046) * BFD_RELOC_AARCH64_TLSLE_LDST32_TPREL_LO12_NC: howto manager. - (line 3016) -* BFD_RELOC_AARCH64_TLSLE_LDST64_TPREL_LO12: howto manager. (line 3019) + (line 3049) +* BFD_RELOC_AARCH64_TLSLE_LDST64_TPREL_LO12: howto manager. (line 3052) * BFD_RELOC_AARCH64_TLSLE_LDST64_TPREL_LO12_NC: howto manager. - (line 3022) -* BFD_RELOC_AARCH64_TLSLE_LDST8_TPREL_LO12: howto manager. (line 3025) + (line 3055) +* BFD_RELOC_AARCH64_TLSLE_LDST8_TPREL_LO12: howto manager. (line 3058) * BFD_RELOC_AARCH64_TLSLE_LDST8_TPREL_LO12_NC: howto manager. - (line 3028) -* BFD_RELOC_AARCH64_TLSLE_LDST_TPREL_LO12: howto manager. (line 3091) -* BFD_RELOC_AARCH64_TLSLE_LDST_TPREL_LO12_NC: howto manager. (line 3095) -* BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G0: howto manager. (line 2997) -* BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G0_NC: howto manager. (line 2999) -* BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G1: howto manager. (line 2993) -* BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G1_NC: howto manager. (line 2995) -* BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G2: howto manager. (line 2991) -* BFD_RELOC_AARCH64_TLS_DTPMOD: howto manager. (line 3061) -* BFD_RELOC_AARCH64_TLS_DTPREL: howto manager. (line 3063) -* BFD_RELOC_AARCH64_TLS_TPREL: howto manager. (line 3065) -* BFD_RELOC_AARCH64_TSTBR14: howto manager. (line 2848) + (line 3061) +* BFD_RELOC_AARCH64_TLSLE_LDST_TPREL_LO12: howto manager. (line 3124) +* BFD_RELOC_AARCH64_TLSLE_LDST_TPREL_LO12_NC: howto manager. (line 3128) +* BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G0: howto manager. (line 3030) +* BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G0_NC: howto manager. (line 3032) +* BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G1: howto manager. (line 3026) +* BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G1_NC: howto manager. (line 3028) +* BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G2: howto manager. (line 3024) +* BFD_RELOC_AARCH64_TLS_DTPMOD: howto manager. (line 3094) +* BFD_RELOC_AARCH64_TLS_DTPREL: howto manager. (line 3096) +* BFD_RELOC_AARCH64_TLS_TPREL: howto manager. (line 3098) +* BFD_RELOC_AARCH64_TSTBR14: howto manager. (line 2881) * BFD_RELOC_AC_SECTOFF_S9: howto manager. (line 1062) * BFD_RELOC_AC_SECTOFF_S9_1: howto manager. (line 1063) * BFD_RELOC_AC_SECTOFF_S9_2: howto manager. (line 1064) @@ -12758,11 +12815,11 @@ * BFD_RELOC_BFIN_GOTOFFHI: howto manager. (line 1133) * BFD_RELOC_BFIN_GOTOFFLO: howto manager. (line 1134) * BFD_RELOC_BFIN_PLTPC: howto manager. (line 1138) -* BFD_RELOC_BPF_16: howto manager. (line 3299) -* BFD_RELOC_BPF_32: howto manager. (line 3298) -* BFD_RELOC_BPF_64: howto manager. (line 3297) -* BFD_RELOC_BPF_DISP16: howto manager. (line 3300) -* BFD_RELOC_BPF_DISP32: howto manager. (line 3301) +* BFD_RELOC_BPF_16: howto manager. (line 3332) +* BFD_RELOC_BPF_32: howto manager. (line 3331) +* BFD_RELOC_BPF_64: howto manager. (line 3330) +* BFD_RELOC_BPF_DISP16: howto manager. (line 3333) +* BFD_RELOC_BPF_DISP32: howto manager. (line 3334) * BFD_RELOC_C6000_ABS_H16: howto manager. (line 1576) * BFD_RELOC_C6000_ABS_L16: howto manager. (line 1575) * BFD_RELOC_C6000_ABS_S16: howto manager. (line 1574) @@ -12793,71 +12850,71 @@ * BFD_RELOC_C6000_SBR_U15_B: howto manager. (line 1577) * BFD_RELOC_C6000_SBR_U15_H: howto manager. (line 1578) * BFD_RELOC_C6000_SBR_U15_W: howto manager. (line 1579) -* BFD_RELOC_CKCORE_ADDR32: howto manager. (line 3338) -* BFD_RELOC_CKCORE_ADDRGOT: howto manager. (line 3354) -* BFD_RELOC_CKCORE_ADDRGOT_HI16: howto manager. (line 3373) -* BFD_RELOC_CKCORE_ADDRGOT_LO16: howto manager. (line 3374) -* BFD_RELOC_CKCORE_ADDRPLT: howto manager. (line 3355) -* BFD_RELOC_CKCORE_ADDRPLT_HI16: howto manager. (line 3375) -* BFD_RELOC_CKCORE_ADDRPLT_LO16: howto manager. (line 3376) -* BFD_RELOC_CKCORE_ADDR_HI16: howto manager. (line 3361) -* BFD_RELOC_CKCORE_ADDR_LO16: howto manager. (line 3362) -* BFD_RELOC_CKCORE_CALLGRAPH: howto manager. (line 3398) -* BFD_RELOC_CKCORE_COPY: howto manager. (line 3347) -* BFD_RELOC_CKCORE_DOFFSET_IMM18: howto manager. (line 3381) -* BFD_RELOC_CKCORE_DOFFSET_IMM18BY2: howto manager. (line 3382) -* BFD_RELOC_CKCORE_DOFFSET_IMM18BY4: howto manager. (line 3383) -* BFD_RELOC_CKCORE_DOFFSET_LO16: howto manager. (line 3379) -* BFD_RELOC_CKCORE_GLOB_DAT: howto manager. (line 3348) -* BFD_RELOC_CKCORE_GNU_VTENTRY: howto manager. (line 3345) -* BFD_RELOC_CKCORE_GNU_VTINHERIT: howto manager. (line 3344) -* BFD_RELOC_CKCORE_GOT12: howto manager. (line 3367) -* BFD_RELOC_CKCORE_GOT32: howto manager. (line 3352) -* BFD_RELOC_CKCORE_GOTOFF: howto manager. (line 3350) -* BFD_RELOC_CKCORE_GOTOFF_HI16: howto manager. (line 3365) -* BFD_RELOC_CKCORE_GOTOFF_IMM18: howto manager. (line 3384) -* BFD_RELOC_CKCORE_GOTOFF_LO16: howto manager. (line 3366) -* BFD_RELOC_CKCORE_GOTPC: howto manager. (line 3351) -* BFD_RELOC_CKCORE_GOTPC_HI16: howto manager. (line 3363) -* BFD_RELOC_CKCORE_GOTPC_LO16: howto manager. (line 3364) -* BFD_RELOC_CKCORE_GOT_HI16: howto manager. (line 3368) -* BFD_RELOC_CKCORE_GOT_IMM18BY4: howto manager. (line 3385) -* BFD_RELOC_CKCORE_GOT_LO16: howto manager. (line 3369) -* BFD_RELOC_CKCORE_IRELATIVE: howto manager. (line 3399) -* BFD_RELOC_CKCORE_JUMP_SLOT: howto manager. (line 3349) -* BFD_RELOC_CKCORE_NOJSRI: howto manager. (line 3397) -* BFD_RELOC_CKCORE_NONE: howto manager. (line 3337) -* BFD_RELOC_CKCORE_PCREL32: howto manager. (line 3342) -* BFD_RELOC_CKCORE_PCREL_BLOOP_IMM12BY4: howto manager. (line 3401) -* BFD_RELOC_CKCORE_PCREL_BLOOP_IMM4BY4: howto manager. (line 3400) -* BFD_RELOC_CKCORE_PCREL_FLRW_IMM8BY4: howto manager. (line 3396) -* BFD_RELOC_CKCORE_PCREL_IMM10BY2: howto manager. (line 3359) -* BFD_RELOC_CKCORE_PCREL_IMM10BY4: howto manager. (line 3360) -* BFD_RELOC_CKCORE_PCREL_IMM11BY2: howto manager. (line 3340) -* BFD_RELOC_CKCORE_PCREL_IMM16BY2: howto manager. (line 3357) -* BFD_RELOC_CKCORE_PCREL_IMM16BY4: howto manager. (line 3358) -* BFD_RELOC_CKCORE_PCREL_IMM18BY2: howto manager. (line 3380) -* BFD_RELOC_CKCORE_PCREL_IMM26BY2: howto manager. (line 3356) -* BFD_RELOC_CKCORE_PCREL_IMM4BY2: howto manager. (line 3341) -* BFD_RELOC_CKCORE_PCREL_IMM7BY4: howto manager. (line 3387) -* BFD_RELOC_CKCORE_PCREL_IMM8BY4: howto manager. (line 3339) -* BFD_RELOC_CKCORE_PCREL_JSR_IMM11BY2: howto manager. (line 3343) -* BFD_RELOC_CKCORE_PCREL_JSR_IMM26BY2: howto manager. (line 3377) -* BFD_RELOC_CKCORE_PLT12: howto manager. (line 3370) -* BFD_RELOC_CKCORE_PLT32: howto manager. (line 3353) -* BFD_RELOC_CKCORE_PLT_HI16: howto manager. (line 3371) -* BFD_RELOC_CKCORE_PLT_IMM18BY4: howto manager. (line 3386) -* BFD_RELOC_CKCORE_PLT_LO16: howto manager. (line 3372) -* BFD_RELOC_CKCORE_RELATIVE: howto manager. (line 3346) -* BFD_RELOC_CKCORE_TLS_DTPMOD32: howto manager. (line 3393) -* BFD_RELOC_CKCORE_TLS_DTPOFF32: howto manager. (line 3394) -* BFD_RELOC_CKCORE_TLS_GD32: howto manager. (line 3390) -* BFD_RELOC_CKCORE_TLS_IE32: howto manager. (line 3389) -* BFD_RELOC_CKCORE_TLS_LDM32: howto manager. (line 3391) -* BFD_RELOC_CKCORE_TLS_LDO32: howto manager. (line 3392) -* BFD_RELOC_CKCORE_TLS_LE32: howto manager. (line 3388) -* BFD_RELOC_CKCORE_TLS_TPOFF32: howto manager. (line 3395) -* BFD_RELOC_CKCORE_TOFFSET_LO16: howto manager. (line 3378) +* BFD_RELOC_CKCORE_ADDR32: howto manager. (line 3371) +* BFD_RELOC_CKCORE_ADDRGOT: howto manager. (line 3387) +* BFD_RELOC_CKCORE_ADDRGOT_HI16: howto manager. (line 3406) +* BFD_RELOC_CKCORE_ADDRGOT_LO16: howto manager. (line 3407) +* BFD_RELOC_CKCORE_ADDRPLT: howto manager. (line 3388) +* BFD_RELOC_CKCORE_ADDRPLT_HI16: howto manager. (line 3408) +* BFD_RELOC_CKCORE_ADDRPLT_LO16: howto manager. (line 3409) +* BFD_RELOC_CKCORE_ADDR_HI16: howto manager. (line 3394) +* BFD_RELOC_CKCORE_ADDR_LO16: howto manager. (line 3395) +* BFD_RELOC_CKCORE_CALLGRAPH: howto manager. (line 3431) +* BFD_RELOC_CKCORE_COPY: howto manager. (line 3380) +* BFD_RELOC_CKCORE_DOFFSET_IMM18: howto manager. (line 3414) +* BFD_RELOC_CKCORE_DOFFSET_IMM18BY2: howto manager. (line 3415) +* BFD_RELOC_CKCORE_DOFFSET_IMM18BY4: howto manager. (line 3416) +* BFD_RELOC_CKCORE_DOFFSET_LO16: howto manager. (line 3412) +* BFD_RELOC_CKCORE_GLOB_DAT: howto manager. (line 3381) +* BFD_RELOC_CKCORE_GNU_VTENTRY: howto manager. (line 3378) +* BFD_RELOC_CKCORE_GNU_VTINHERIT: howto manager. (line 3377) +* BFD_RELOC_CKCORE_GOT12: howto manager. (line 3400) +* BFD_RELOC_CKCORE_GOT32: howto manager. (line 3385) +* BFD_RELOC_CKCORE_GOTOFF: howto manager. (line 3383) +* BFD_RELOC_CKCORE_GOTOFF_HI16: howto manager. (line 3398) +* BFD_RELOC_CKCORE_GOTOFF_IMM18: howto manager. (line 3417) +* BFD_RELOC_CKCORE_GOTOFF_LO16: howto manager. (line 3399) +* BFD_RELOC_CKCORE_GOTPC: howto manager. (line 3384) +* BFD_RELOC_CKCORE_GOTPC_HI16: howto manager. (line 3396) +* BFD_RELOC_CKCORE_GOTPC_LO16: howto manager. (line 3397) +* BFD_RELOC_CKCORE_GOT_HI16: howto manager. (line 3401) +* BFD_RELOC_CKCORE_GOT_IMM18BY4: howto manager. (line 3418) +* BFD_RELOC_CKCORE_GOT_LO16: howto manager. (line 3402) +* BFD_RELOC_CKCORE_IRELATIVE: howto manager. (line 3432) +* BFD_RELOC_CKCORE_JUMP_SLOT: howto manager. (line 3382) +* BFD_RELOC_CKCORE_NOJSRI: howto manager. (line 3430) +* BFD_RELOC_CKCORE_NONE: howto manager. (line 3370) +* BFD_RELOC_CKCORE_PCREL32: howto manager. (line 3375) +* BFD_RELOC_CKCORE_PCREL_BLOOP_IMM12BY4: howto manager. (line 3434) +* BFD_RELOC_CKCORE_PCREL_BLOOP_IMM4BY4: howto manager. (line 3433) +* BFD_RELOC_CKCORE_PCREL_FLRW_IMM8BY4: howto manager. (line 3429) +* BFD_RELOC_CKCORE_PCREL_IMM10BY2: howto manager. (line 3392) +* BFD_RELOC_CKCORE_PCREL_IMM10BY4: howto manager. (line 3393) +* BFD_RELOC_CKCORE_PCREL_IMM11BY2: howto manager. (line 3373) +* BFD_RELOC_CKCORE_PCREL_IMM16BY2: howto manager. (line 3390) +* BFD_RELOC_CKCORE_PCREL_IMM16BY4: howto manager. (line 3391) +* BFD_RELOC_CKCORE_PCREL_IMM18BY2: howto manager. (line 3413) +* BFD_RELOC_CKCORE_PCREL_IMM26BY2: howto manager. (line 3389) +* BFD_RELOC_CKCORE_PCREL_IMM4BY2: howto manager. (line 3374) +* BFD_RELOC_CKCORE_PCREL_IMM7BY4: howto manager. (line 3420) +* BFD_RELOC_CKCORE_PCREL_IMM8BY4: howto manager. (line 3372) +* BFD_RELOC_CKCORE_PCREL_JSR_IMM11BY2: howto manager. (line 3376) +* BFD_RELOC_CKCORE_PCREL_JSR_IMM26BY2: howto manager. (line 3410) +* BFD_RELOC_CKCORE_PLT12: howto manager. (line 3403) +* BFD_RELOC_CKCORE_PLT32: howto manager. (line 3386) +* BFD_RELOC_CKCORE_PLT_HI16: howto manager. (line 3404) +* BFD_RELOC_CKCORE_PLT_IMM18BY4: howto manager. (line 3419) +* BFD_RELOC_CKCORE_PLT_LO16: howto manager. (line 3405) +* BFD_RELOC_CKCORE_RELATIVE: howto manager. (line 3379) +* BFD_RELOC_CKCORE_TLS_DTPMOD32: howto manager. (line 3426) +* BFD_RELOC_CKCORE_TLS_DTPOFF32: howto manager. (line 3427) +* BFD_RELOC_CKCORE_TLS_GD32: howto manager. (line 3423) +* BFD_RELOC_CKCORE_TLS_IE32: howto manager. (line 3422) +* BFD_RELOC_CKCORE_TLS_LDM32: howto manager. (line 3424) +* BFD_RELOC_CKCORE_TLS_LDO32: howto manager. (line 3425) +* BFD_RELOC_CKCORE_TLS_LE32: howto manager. (line 3421) +* BFD_RELOC_CKCORE_TLS_TPOFF32: howto manager. (line 3428) +* BFD_RELOC_CKCORE_TOFFSET_LO16: howto manager. (line 3411) * bfd_reloc_code_type: howto manager. (line 9) * BFD_RELOC_CR16_ABS20: howto manager. (line 2276) * BFD_RELOC_CR16_ABS24: howto manager. (line 2277) @@ -12964,13 +13021,13 @@ * BFD_RELOC_DLX_HI16_S: howto manager. (line 1224) * BFD_RELOC_DLX_JMP26: howto manager. (line 1228) * BFD_RELOC_DLX_LO16: howto manager. (line 1226) -* BFD_RELOC_EPIPHANY_HIGH: howto manager. (line 3307) -* BFD_RELOC_EPIPHANY_IMM11: howto manager. (line 3313) -* BFD_RELOC_EPIPHANY_IMM8: howto manager. (line 3316) -* BFD_RELOC_EPIPHANY_LOW: howto manager. (line 3309) -* BFD_RELOC_EPIPHANY_SIMM11: howto manager. (line 3311) -* BFD_RELOC_EPIPHANY_SIMM24: howto manager. (line 3305) -* BFD_RELOC_EPIPHANY_SIMM8: howto manager. (line 3303) +* BFD_RELOC_EPIPHANY_HIGH: howto manager. (line 3340) +* BFD_RELOC_EPIPHANY_IMM11: howto manager. (line 3346) +* BFD_RELOC_EPIPHANY_IMM8: howto manager. (line 3349) +* BFD_RELOC_EPIPHANY_LOW: howto manager. (line 3342) +* BFD_RELOC_EPIPHANY_SIMM11: howto manager. (line 3344) +* BFD_RELOC_EPIPHANY_SIMM24: howto manager. (line 3338) +* BFD_RELOC_EPIPHANY_SIMM8: howto manager. (line 3336) * BFD_RELOC_FR30_10_IN_8: howto manager. (line 1615) * BFD_RELOC_FR30_12_PCREL: howto manager. (line 1621) * BFD_RELOC_FR30_20: howto manager. (line 1603) @@ -13138,18 +13195,18 @@ * BFD_RELOC_IP2K_PAGE3: howto manager. (line 2066) * BFD_RELOC_IP2K_PC_SKIP: howto manager. (line 2075) * BFD_RELOC_IP2K_TEXT: howto manager. (line 2077) -* BFD_RELOC_IQ2000_OFFSET_16: howto manager. (line 2543) -* BFD_RELOC_IQ2000_OFFSET_21: howto manager. (line 2544) -* BFD_RELOC_IQ2000_UHI16: howto manager. (line 2545) -* BFD_RELOC_LM32_16_GOT: howto manager. (line 2635) -* BFD_RELOC_LM32_BRANCH: howto manager. (line 2634) -* BFD_RELOC_LM32_CALL: howto manager. (line 2633) -* BFD_RELOC_LM32_COPY: howto manager. (line 2638) -* BFD_RELOC_LM32_GLOB_DAT: howto manager. (line 2639) -* BFD_RELOC_LM32_GOTOFF_HI16: howto manager. (line 2636) -* BFD_RELOC_LM32_GOTOFF_LO16: howto manager. (line 2637) -* BFD_RELOC_LM32_JMP_SLOT: howto manager. (line 2640) -* BFD_RELOC_LM32_RELATIVE: howto manager. (line 2641) +* BFD_RELOC_IQ2000_OFFSET_16: howto manager. (line 2545) +* BFD_RELOC_IQ2000_OFFSET_21: howto manager. (line 2546) +* BFD_RELOC_IQ2000_UHI16: howto manager. (line 2547) +* BFD_RELOC_LM32_16_GOT: howto manager. (line 2668) +* BFD_RELOC_LM32_BRANCH: howto manager. (line 2667) +* BFD_RELOC_LM32_CALL: howto manager. (line 2666) +* BFD_RELOC_LM32_COPY: howto manager. (line 2671) +* BFD_RELOC_LM32_GLOB_DAT: howto manager. (line 2672) +* BFD_RELOC_LM32_GOTOFF_HI16: howto manager. (line 2669) +* BFD_RELOC_LM32_GOTOFF_LO16: howto manager. (line 2670) +* BFD_RELOC_LM32_JMP_SLOT: howto manager. (line 2673) +* BFD_RELOC_LM32_RELATIVE: howto manager. (line 2674) * BFD_RELOC_LO10: howto manager. (line 109) * BFD_RELOC_LO16: howto manager. (line 319) * BFD_RELOC_LO16_BASEREL: howto manager. (line 91) @@ -13200,23 +13257,23 @@ * BFD_RELOC_M68HC12_9_PCREL: howto manager. (line 2250) * BFD_RELOC_M68HC12_HI8XG: howto manager. (line 2257) * BFD_RELOC_M68HC12_LO8XG: howto manager. (line 2254) -* BFD_RELOC_MACH_O_ARM64_ADDEND: howto manager. (line 2671) -* BFD_RELOC_MACH_O_ARM64_GOT_LOAD_PAGE21: howto manager. (line 2673) -* BFD_RELOC_MACH_O_ARM64_GOT_LOAD_PAGEOFF12: howto manager. (line 2675) -* BFD_RELOC_MACH_O_ARM64_POINTER_TO_GOT: howto manager. (line 2677) -* BFD_RELOC_MACH_O_LOCAL_SECTDIFF: howto manager. (line 2646) -* BFD_RELOC_MACH_O_PAIR: howto manager. (line 2648) -* BFD_RELOC_MACH_O_SECTDIFF: howto manager. (line 2643) -* BFD_RELOC_MACH_O_SUBTRACTOR32: howto manager. (line 2650) -* BFD_RELOC_MACH_O_SUBTRACTOR64: howto manager. (line 2652) -* BFD_RELOC_MACH_O_X86_64_BRANCH32: howto manager. (line 2654) -* BFD_RELOC_MACH_O_X86_64_BRANCH8: howto manager. (line 2655) -* BFD_RELOC_MACH_O_X86_64_GOT: howto manager. (line 2658) -* BFD_RELOC_MACH_O_X86_64_GOT_LOAD: howto manager. (line 2660) -* BFD_RELOC_MACH_O_X86_64_PCREL32_1: howto manager. (line 2663) -* BFD_RELOC_MACH_O_X86_64_PCREL32_2: howto manager. (line 2665) -* BFD_RELOC_MACH_O_X86_64_PCREL32_4: howto manager. (line 2667) -* BFD_RELOC_MACH_O_X86_64_TLV: howto manager. (line 2669) +* BFD_RELOC_MACH_O_ARM64_ADDEND: howto manager. (line 2704) +* BFD_RELOC_MACH_O_ARM64_GOT_LOAD_PAGE21: howto manager. (line 2706) +* BFD_RELOC_MACH_O_ARM64_GOT_LOAD_PAGEOFF12: howto manager. (line 2708) +* BFD_RELOC_MACH_O_ARM64_POINTER_TO_GOT: howto manager. (line 2710) +* BFD_RELOC_MACH_O_LOCAL_SECTDIFF: howto manager. (line 2679) +* BFD_RELOC_MACH_O_PAIR: howto manager. (line 2681) +* BFD_RELOC_MACH_O_SECTDIFF: howto manager. (line 2676) +* BFD_RELOC_MACH_O_SUBTRACTOR32: howto manager. (line 2683) +* BFD_RELOC_MACH_O_SUBTRACTOR64: howto manager. (line 2685) +* BFD_RELOC_MACH_O_X86_64_BRANCH32: howto manager. (line 2687) +* BFD_RELOC_MACH_O_X86_64_BRANCH8: howto manager. (line 2688) +* BFD_RELOC_MACH_O_X86_64_GOT: howto manager. (line 2691) +* BFD_RELOC_MACH_O_X86_64_GOT_LOAD: howto manager. (line 2693) +* BFD_RELOC_MACH_O_X86_64_PCREL32_1: howto manager. (line 2696) +* BFD_RELOC_MACH_O_X86_64_PCREL32_2: howto manager. (line 2698) +* BFD_RELOC_MACH_O_X86_64_PCREL32_4: howto manager. (line 2700) +* BFD_RELOC_MACH_O_X86_64_TLV: howto manager. (line 2702) * BFD_RELOC_MCORE_PCREL_32: howto manager. (line 1627) * BFD_RELOC_MCORE_PCREL_IMM11BY2: howto manager. (line 1625) * BFD_RELOC_MCORE_PCREL_IMM4BY2: howto manager. (line 1626) @@ -13281,28 +13338,28 @@ * BFD_RELOC_METAG_TLS_LE_HI16: howto manager. (line 1688) * BFD_RELOC_METAG_TLS_LE_LO16: howto manager. (line 1689) * BFD_RELOC_METAG_TLS_TPOFF: howto manager. (line 1684) -* BFD_RELOC_MICROBLAZE_32_GOTOFF: howto manager. (line 2713) -* BFD_RELOC_MICROBLAZE_32_LO: howto manager. (line 2679) -* BFD_RELOC_MICROBLAZE_32_LO_PCREL: howto manager. (line 2682) -* BFD_RELOC_MICROBLAZE_32_ROSDA: howto manager. (line 2685) -* BFD_RELOC_MICROBLAZE_32_RWSDA: howto manager. (line 2688) -* BFD_RELOC_MICROBLAZE_32_SYM_OP_SYM: howto manager. (line 2691) -* BFD_RELOC_MICROBLAZE_32_TLSDTPMOD: howto manager. (line 2729) -* BFD_RELOC_MICROBLAZE_32_TLSDTPREL: howto manager. (line 2731) -* BFD_RELOC_MICROBLAZE_64_GOT: howto manager. (line 2702) -* BFD_RELOC_MICROBLAZE_64_GOTOFF: howto manager. (line 2709) -* BFD_RELOC_MICROBLAZE_64_GOTPC: howto manager. (line 2698) -* BFD_RELOC_MICROBLAZE_64_NONE: howto manager. (line 2694) -* BFD_RELOC_MICROBLAZE_64_PLT: howto manager. (line 2705) -* BFD_RELOC_MICROBLAZE_64_TEXTPCREL: howto manager. (line 2742) -* BFD_RELOC_MICROBLAZE_64_TEXTREL: howto manager. (line 2746) -* BFD_RELOC_MICROBLAZE_64_TLS: howto manager. (line 2719) -* BFD_RELOC_MICROBLAZE_64_TLSDTPREL: howto manager. (line 2733) -* BFD_RELOC_MICROBLAZE_64_TLSGD: howto manager. (line 2721) -* BFD_RELOC_MICROBLAZE_64_TLSGOTTPREL: howto manager. (line 2736) -* BFD_RELOC_MICROBLAZE_64_TLSLD: howto manager. (line 2725) -* BFD_RELOC_MICROBLAZE_64_TLSTPREL: howto manager. (line 2739) -* BFD_RELOC_MICROBLAZE_COPY: howto manager. (line 2716) +* BFD_RELOC_MICROBLAZE_32_GOTOFF: howto manager. (line 2746) +* BFD_RELOC_MICROBLAZE_32_LO: howto manager. (line 2712) +* BFD_RELOC_MICROBLAZE_32_LO_PCREL: howto manager. (line 2715) +* BFD_RELOC_MICROBLAZE_32_ROSDA: howto manager. (line 2718) +* BFD_RELOC_MICROBLAZE_32_RWSDA: howto manager. (line 2721) +* BFD_RELOC_MICROBLAZE_32_SYM_OP_SYM: howto manager. (line 2724) +* BFD_RELOC_MICROBLAZE_32_TLSDTPMOD: howto manager. (line 2762) +* BFD_RELOC_MICROBLAZE_32_TLSDTPREL: howto manager. (line 2764) +* BFD_RELOC_MICROBLAZE_64_GOT: howto manager. (line 2735) +* BFD_RELOC_MICROBLAZE_64_GOTOFF: howto manager. (line 2742) +* BFD_RELOC_MICROBLAZE_64_GOTPC: howto manager. (line 2731) +* BFD_RELOC_MICROBLAZE_64_NONE: howto manager. (line 2727) +* BFD_RELOC_MICROBLAZE_64_PLT: howto manager. (line 2738) +* BFD_RELOC_MICROBLAZE_64_TEXTPCREL: howto manager. (line 2775) +* BFD_RELOC_MICROBLAZE_64_TEXTREL: howto manager. (line 2779) +* BFD_RELOC_MICROBLAZE_64_TLS: howto manager. (line 2752) +* BFD_RELOC_MICROBLAZE_64_TLSDTPREL: howto manager. (line 2766) +* BFD_RELOC_MICROBLAZE_64_TLSGD: howto manager. (line 2754) +* BFD_RELOC_MICROBLAZE_64_TLSGOTTPREL: howto manager. (line 2769) +* BFD_RELOC_MICROBLAZE_64_TLSLD: howto manager. (line 2758) +* BFD_RELOC_MICROBLAZE_64_TLSTPREL: howto manager. (line 2772) +* BFD_RELOC_MICROBLAZE_COPY: howto manager. (line 2749) * BFD_RELOC_MICROMIPS_10_PCREL_S1: howto manager. (line 352) * BFD_RELOC_MICROMIPS_16_PCREL_S1: howto manager. (line 353) * BFD_RELOC_MICROMIPS_7_PCREL_S1: howto manager. (line 351) @@ -13458,6 +13515,8 @@ * BFD_RELOC_MSP430_ABS_HI16: howto manager. (line 2458) * BFD_RELOC_MSP430_PREL31: howto manager. (line 2459) * BFD_RELOC_MSP430_RL_PCREL: howto manager. (line 2445) +* BFD_RELOC_MSP430_SET_ULEB128: howto manager. (line 2461) +* BFD_RELOC_MSP430_SUB_ULEB128: howto manager. (line 2462) * BFD_RELOC_MSP430_SYM_DIFF: howto manager. (line 2460) * BFD_RELOC_MT_GNU_VTENTRY: howto manager. (line 2435) * BFD_RELOC_MT_GNU_VTINHERIT: howto manager. (line 2433) @@ -13596,58 +13655,58 @@ * BFD_RELOC_NDS32_TRAN: howto manager. (line 1422) * BFD_RELOC_NDS32_UPDATE_TA: howto manager. (line 1381) * BFD_RELOC_NDS32_WORD_9_PCREL: howto manager. (line 1279) -* BFD_RELOC_NIOS2_ALIGN: howto manager. (line 2476) -* BFD_RELOC_NIOS2_CACHE_OPX: howto manager. (line 2466) -* BFD_RELOC_NIOS2_CALL16: howto manager. (line 2478) -* BFD_RELOC_NIOS2_CALL26: howto manager. (line 2464) -* BFD_RELOC_NIOS2_CALL26_NOAT: howto manager. (line 2496) -* BFD_RELOC_NIOS2_CALLR: howto manager. (line 2475) -* BFD_RELOC_NIOS2_CALL_HA: howto manager. (line 2500) -* BFD_RELOC_NIOS2_CALL_LO: howto manager. (line 2499) -* BFD_RELOC_NIOS2_CJMP: howto manager. (line 2474) -* BFD_RELOC_NIOS2_COPY: howto manager. (line 2491) -* BFD_RELOC_NIOS2_GLOB_DAT: howto manager. (line 2492) -* BFD_RELOC_NIOS2_GOT16: howto manager. (line 2477) -* BFD_RELOC_NIOS2_GOTOFF: howto manager. (line 2495) -* BFD_RELOC_NIOS2_GOTOFF_HA: howto manager. (line 2480) -* BFD_RELOC_NIOS2_GOTOFF_LO: howto manager. (line 2479) -* BFD_RELOC_NIOS2_GOT_HA: howto manager. (line 2498) -* BFD_RELOC_NIOS2_GOT_LO: howto manager. (line 2497) -* BFD_RELOC_NIOS2_GPREL: howto manager. (line 2472) -* BFD_RELOC_NIOS2_HI16: howto manager. (line 2469) -* BFD_RELOC_NIOS2_HIADJ16: howto manager. (line 2471) -* BFD_RELOC_NIOS2_IMM5: howto manager. (line 2465) -* BFD_RELOC_NIOS2_IMM6: howto manager. (line 2467) -* BFD_RELOC_NIOS2_IMM8: howto manager. (line 2468) -* BFD_RELOC_NIOS2_JUMP_SLOT: howto manager. (line 2493) -* BFD_RELOC_NIOS2_LO16: howto manager. (line 2470) -* BFD_RELOC_NIOS2_PCREL_HA: howto manager. (line 2482) -* BFD_RELOC_NIOS2_PCREL_LO: howto manager. (line 2481) -* BFD_RELOC_NIOS2_R2_F1I5_2: howto manager. (line 2510) -* BFD_RELOC_NIOS2_R2_I10_1_PCREL: howto manager. (line 2502) -* BFD_RELOC_NIOS2_R2_L5I4X1: howto manager. (line 2511) -* BFD_RELOC_NIOS2_R2_S12: howto manager. (line 2501) -* BFD_RELOC_NIOS2_R2_T1I7_1_PCREL: howto manager. (line 2503) -* BFD_RELOC_NIOS2_R2_T1I7_2: howto manager. (line 2504) -* BFD_RELOC_NIOS2_R2_T1X1I6: howto manager. (line 2512) -* BFD_RELOC_NIOS2_R2_T1X1I6_2: howto manager. (line 2513) -* BFD_RELOC_NIOS2_R2_T2I4: howto manager. (line 2505) -* BFD_RELOC_NIOS2_R2_T2I4_1: howto manager. (line 2506) -* BFD_RELOC_NIOS2_R2_T2I4_2: howto manager. (line 2507) -* BFD_RELOC_NIOS2_R2_X1I7_2: howto manager. (line 2508) -* BFD_RELOC_NIOS2_R2_X2L5: howto manager. (line 2509) -* BFD_RELOC_NIOS2_RELATIVE: howto manager. (line 2494) -* BFD_RELOC_NIOS2_S16: howto manager. (line 2462) -* BFD_RELOC_NIOS2_TLS_DTPMOD: howto manager. (line 2488) -* BFD_RELOC_NIOS2_TLS_DTPREL: howto manager. (line 2489) -* BFD_RELOC_NIOS2_TLS_GD16: howto manager. (line 2483) -* BFD_RELOC_NIOS2_TLS_IE16: howto manager. (line 2486) -* BFD_RELOC_NIOS2_TLS_LDM16: howto manager. (line 2484) -* BFD_RELOC_NIOS2_TLS_LDO16: howto manager. (line 2485) -* BFD_RELOC_NIOS2_TLS_LE16: howto manager. (line 2487) -* BFD_RELOC_NIOS2_TLS_TPREL: howto manager. (line 2490) -* BFD_RELOC_NIOS2_U16: howto manager. (line 2463) -* BFD_RELOC_NIOS2_UJMP: howto manager. (line 2473) +* BFD_RELOC_NIOS2_ALIGN: howto manager. (line 2478) +* BFD_RELOC_NIOS2_CACHE_OPX: howto manager. (line 2468) +* BFD_RELOC_NIOS2_CALL16: howto manager. (line 2480) +* BFD_RELOC_NIOS2_CALL26: howto manager. (line 2466) +* BFD_RELOC_NIOS2_CALL26_NOAT: howto manager. (line 2498) +* BFD_RELOC_NIOS2_CALLR: howto manager. (line 2477) +* BFD_RELOC_NIOS2_CALL_HA: howto manager. (line 2502) +* BFD_RELOC_NIOS2_CALL_LO: howto manager. (line 2501) +* BFD_RELOC_NIOS2_CJMP: howto manager. (line 2476) +* BFD_RELOC_NIOS2_COPY: howto manager. (line 2493) +* BFD_RELOC_NIOS2_GLOB_DAT: howto manager. (line 2494) +* BFD_RELOC_NIOS2_GOT16: howto manager. (line 2479) +* BFD_RELOC_NIOS2_GOTOFF: howto manager. (line 2497) +* BFD_RELOC_NIOS2_GOTOFF_HA: howto manager. (line 2482) +* BFD_RELOC_NIOS2_GOTOFF_LO: howto manager. (line 2481) +* BFD_RELOC_NIOS2_GOT_HA: howto manager. (line 2500) +* BFD_RELOC_NIOS2_GOT_LO: howto manager. (line 2499) +* BFD_RELOC_NIOS2_GPREL: howto manager. (line 2474) +* BFD_RELOC_NIOS2_HI16: howto manager. (line 2471) +* BFD_RELOC_NIOS2_HIADJ16: howto manager. (line 2473) +* BFD_RELOC_NIOS2_IMM5: howto manager. (line 2467) +* BFD_RELOC_NIOS2_IMM6: howto manager. (line 2469) +* BFD_RELOC_NIOS2_IMM8: howto manager. (line 2470) +* BFD_RELOC_NIOS2_JUMP_SLOT: howto manager. (line 2495) +* BFD_RELOC_NIOS2_LO16: howto manager. (line 2472) +* BFD_RELOC_NIOS2_PCREL_HA: howto manager. (line 2484) +* BFD_RELOC_NIOS2_PCREL_LO: howto manager. (line 2483) +* BFD_RELOC_NIOS2_R2_F1I5_2: howto manager. (line 2512) +* BFD_RELOC_NIOS2_R2_I10_1_PCREL: howto manager. (line 2504) +* BFD_RELOC_NIOS2_R2_L5I4X1: howto manager. (line 2513) +* BFD_RELOC_NIOS2_R2_S12: howto manager. (line 2503) +* BFD_RELOC_NIOS2_R2_T1I7_1_PCREL: howto manager. (line 2505) +* BFD_RELOC_NIOS2_R2_T1I7_2: howto manager. (line 2506) +* BFD_RELOC_NIOS2_R2_T1X1I6: howto manager. (line 2514) +* BFD_RELOC_NIOS2_R2_T1X1I6_2: howto manager. (line 2515) +* BFD_RELOC_NIOS2_R2_T2I4: howto manager. (line 2507) +* BFD_RELOC_NIOS2_R2_T2I4_1: howto manager. (line 2508) +* BFD_RELOC_NIOS2_R2_T2I4_2: howto manager. (line 2509) +* BFD_RELOC_NIOS2_R2_X1I7_2: howto manager. (line 2510) +* BFD_RELOC_NIOS2_R2_X2L5: howto manager. (line 2511) +* BFD_RELOC_NIOS2_RELATIVE: howto manager. (line 2496) +* BFD_RELOC_NIOS2_S16: howto manager. (line 2464) +* BFD_RELOC_NIOS2_TLS_DTPMOD: howto manager. (line 2490) +* BFD_RELOC_NIOS2_TLS_DTPREL: howto manager. (line 2491) +* BFD_RELOC_NIOS2_TLS_GD16: howto manager. (line 2485) +* BFD_RELOC_NIOS2_TLS_IE16: howto manager. (line 2488) +* BFD_RELOC_NIOS2_TLS_LDM16: howto manager. (line 2486) +* BFD_RELOC_NIOS2_TLS_LDO16: howto manager. (line 2487) +* BFD_RELOC_NIOS2_TLS_LE16: howto manager. (line 2489) +* BFD_RELOC_NIOS2_TLS_TPREL: howto manager. (line 2492) +* BFD_RELOC_NIOS2_U16: howto manager. (line 2465) +* BFD_RELOC_NIOS2_UJMP: howto manager. (line 2475) * BFD_RELOC_NONE: howto manager. (line 118) * BFD_RELOC_NS32K_DISP_16: howto manager. (line 586) * BFD_RELOC_NS32K_DISP_16_PCREL: howto manager. (line 589) @@ -13735,11 +13794,11 @@ * BFD_RELOC_PPC64_ENTRY: howto manager. (line 683) * BFD_RELOC_PPC64_GOT16_DS: howto manager. (line 665) * BFD_RELOC_PPC64_GOT16_LO_DS: howto manager. (line 666) -* BFD_RELOC_PPC64_GOT_DTPREL34: howto manager. (line 754) +* BFD_RELOC_PPC64_GOT_DTPREL_PCREL34: howto manager. (line 754) * BFD_RELOC_PPC64_GOT_PCREL34: howto manager. (line 690) -* BFD_RELOC_PPC64_GOT_TLSGD34: howto manager. (line 751) -* BFD_RELOC_PPC64_GOT_TLSLD34: howto manager. (line 752) -* BFD_RELOC_PPC64_GOT_TPREL34: howto manager. (line 753) +* BFD_RELOC_PPC64_GOT_TLSGD_PCREL34: howto manager. (line 751) +* BFD_RELOC_PPC64_GOT_TLSLD_PCREL34: howto manager. (line 752) +* BFD_RELOC_PPC64_GOT_TPREL_PCREL34: howto manager. (line 753) * BFD_RELOC_PPC64_HIGHER: howto manager. (line 651) * BFD_RELOC_PPC64_HIGHER_S: howto manager. (line 652) * BFD_RELOC_PPC64_HIGHEST: howto manager. (line 653) @@ -13862,18 +13921,18 @@ * BFD_RELOC_PPC_VLE_SDAREL_HI16D: howto manager. (line 646) * BFD_RELOC_PPC_VLE_SDAREL_LO16A: howto manager. (line 643) * BFD_RELOC_PPC_VLE_SDAREL_LO16D: howto manager. (line 644) -* BFD_RELOC_PRU_16_PMEM: howto manager. (line 2528) -* BFD_RELOC_PRU_32_PMEM: howto manager. (line 2527) -* BFD_RELOC_PRU_GNU_DIFF16: howto manager. (line 2532) -* BFD_RELOC_PRU_GNU_DIFF16_PMEM: howto manager. (line 2534) -* BFD_RELOC_PRU_GNU_DIFF32: howto manager. (line 2533) -* BFD_RELOC_PRU_GNU_DIFF32_PMEM: howto manager. (line 2535) -* BFD_RELOC_PRU_GNU_DIFF8: howto manager. (line 2531) -* BFD_RELOC_PRU_LDI32: howto manager. (line 2519) -* BFD_RELOC_PRU_S10_PCREL: howto manager. (line 2523) -* BFD_RELOC_PRU_U16: howto manager. (line 2515) -* BFD_RELOC_PRU_U16_PMEMIMM: howto manager. (line 2517) -* BFD_RELOC_PRU_U8_PCREL: howto manager. (line 2525) +* BFD_RELOC_PRU_16_PMEM: howto manager. (line 2530) +* BFD_RELOC_PRU_32_PMEM: howto manager. (line 2529) +* BFD_RELOC_PRU_GNU_DIFF16: howto manager. (line 2534) +* BFD_RELOC_PRU_GNU_DIFF16_PMEM: howto manager. (line 2536) +* BFD_RELOC_PRU_GNU_DIFF32: howto manager. (line 2535) +* BFD_RELOC_PRU_GNU_DIFF32_PMEM: howto manager. (line 2537) +* BFD_RELOC_PRU_GNU_DIFF8: howto manager. (line 2533) +* BFD_RELOC_PRU_LDI32: howto manager. (line 2521) +* BFD_RELOC_PRU_S10_PCREL: howto manager. (line 2525) +* BFD_RELOC_PRU_U16: howto manager. (line 2517) +* BFD_RELOC_PRU_U16_PMEMIMM: howto manager. (line 2519) +* BFD_RELOC_PRU_U8_PCREL: howto manager. (line 2527) * BFD_RELOC_RELC: howto manager. (line 2416) * BFD_RELOC_RISCV_32_PCREL: howto manager. (line 1885) * BFD_RELOC_RISCV_ADD16: howto manager. (line 1853) @@ -13986,7 +14045,7 @@ * BFD_RELOC_RX_RELAX: howto manager. (line 1948) * BFD_RELOC_RX_SYM: howto manager. (line 1937) * BFD_RELOC_S12Z_15_PCREL: howto manager. (line 2260) -* BFD_RELOC_S12Z_OPR: howto manager. (line 3403) +* BFD_RELOC_S12Z_OPR: howto manager. (line 3436) * BFD_RELOC_SCORE16_BRANCH: howto manager. (line 2051) * BFD_RELOC_SCORE16_JMP: howto manager. (line 2049) * BFD_RELOC_SCORE_BCMP: howto manager. (line 2053) @@ -14207,201 +14266,201 @@ * BFD_RELOC_TIC54X_MS7_OF_23: howto manager. (line 1567) * BFD_RELOC_TIC54X_PARTLS7: howto manager. (line 1553) * BFD_RELOC_TIC54X_PARTMS9: howto manager. (line 1557) -* BFD_RELOC_TILEGX_BROFF_X1: howto manager. (line 3198) -* BFD_RELOC_TILEGX_COPY: howto manager. (line 3194) -* BFD_RELOC_TILEGX_DEST_IMM8_X1: howto manager. (line 3205) -* BFD_RELOC_TILEGX_GLOB_DAT: howto manager. (line 3195) -* BFD_RELOC_TILEGX_HW0: howto manager. (line 3187) -* BFD_RELOC_TILEGX_HW0_LAST: howto manager. (line 3191) -* BFD_RELOC_TILEGX_HW1: howto manager. (line 3188) -* BFD_RELOC_TILEGX_HW1_LAST: howto manager. (line 3192) -* BFD_RELOC_TILEGX_HW2: howto manager. (line 3189) -* BFD_RELOC_TILEGX_HW2_LAST: howto manager. (line 3193) -* BFD_RELOC_TILEGX_HW3: howto manager. (line 3190) -* BFD_RELOC_TILEGX_IMM16_X0_HW0: howto manager. (line 3214) -* BFD_RELOC_TILEGX_IMM16_X0_HW0_GOT: howto manager. (line 3242) -* BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST: howto manager. (line 3222) -* BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_GOT: howto manager. (line 3250) -* BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_PCREL: howto manager. (line 3236) +* BFD_RELOC_TILEGX_BROFF_X1: howto manager. (line 3231) +* BFD_RELOC_TILEGX_COPY: howto manager. (line 3227) +* BFD_RELOC_TILEGX_DEST_IMM8_X1: howto manager. (line 3238) +* BFD_RELOC_TILEGX_GLOB_DAT: howto manager. (line 3228) +* BFD_RELOC_TILEGX_HW0: howto manager. (line 3220) +* BFD_RELOC_TILEGX_HW0_LAST: howto manager. (line 3224) +* BFD_RELOC_TILEGX_HW1: howto manager. (line 3221) +* BFD_RELOC_TILEGX_HW1_LAST: howto manager. (line 3225) +* BFD_RELOC_TILEGX_HW2: howto manager. (line 3222) +* BFD_RELOC_TILEGX_HW2_LAST: howto manager. (line 3226) +* BFD_RELOC_TILEGX_HW3: howto manager. (line 3223) +* BFD_RELOC_TILEGX_IMM16_X0_HW0: howto manager. (line 3247) +* BFD_RELOC_TILEGX_IMM16_X0_HW0_GOT: howto manager. (line 3275) +* BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST: howto manager. (line 3255) +* BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_GOT: howto manager. (line 3283) +* BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_PCREL: howto manager. (line 3269) * BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_PLT_PCREL: howto manager. - (line 3270) -* BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_GD: howto manager. (line 3264) -* BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_IE: howto manager. (line 3276) -* BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_LE: howto manager. (line 3260) -* BFD_RELOC_TILEGX_IMM16_X0_HW0_PCREL: howto manager. (line 3228) -* BFD_RELOC_TILEGX_IMM16_X0_HW0_PLT_PCREL: howto manager. (line 3244) -* BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_GD: howto manager. (line 3256) -* BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_IE: howto manager. (line 3268) -* BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_LE: howto manager. (line 3258) -* BFD_RELOC_TILEGX_IMM16_X0_HW1: howto manager. (line 3216) -* BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST: howto manager. (line 3224) -* BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_GOT: howto manager. (line 3252) -* BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_PCREL: howto manager. (line 3238) + (line 3303) +* BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_GD: howto manager. (line 3297) +* BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_IE: howto manager. (line 3309) +* BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_LE: howto manager. (line 3293) +* BFD_RELOC_TILEGX_IMM16_X0_HW0_PCREL: howto manager. (line 3261) +* BFD_RELOC_TILEGX_IMM16_X0_HW0_PLT_PCREL: howto manager. (line 3277) +* BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_GD: howto manager. (line 3289) +* BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_IE: howto manager. (line 3301) +* BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_LE: howto manager. (line 3291) +* BFD_RELOC_TILEGX_IMM16_X0_HW1: howto manager. (line 3249) +* BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST: howto manager. (line 3257) +* BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_GOT: howto manager. (line 3285) +* BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_PCREL: howto manager. (line 3271) * BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_PLT_PCREL: howto manager. - (line 3272) -* BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_GD: howto manager. (line 3266) -* BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_IE: howto manager. (line 3278) -* BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_LE: howto manager. (line 3262) -* BFD_RELOC_TILEGX_IMM16_X0_HW1_PCREL: howto manager. (line 3230) -* BFD_RELOC_TILEGX_IMM16_X0_HW1_PLT_PCREL: howto manager. (line 3246) -* BFD_RELOC_TILEGX_IMM16_X0_HW2: howto manager. (line 3218) -* BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST: howto manager. (line 3226) -* BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST_PCREL: howto manager. (line 3240) + (line 3305) +* BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_GD: howto manager. (line 3299) +* BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_IE: howto manager. (line 3311) +* BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_LE: howto manager. (line 3295) +* BFD_RELOC_TILEGX_IMM16_X0_HW1_PCREL: howto manager. (line 3263) +* BFD_RELOC_TILEGX_IMM16_X0_HW1_PLT_PCREL: howto manager. (line 3279) +* BFD_RELOC_TILEGX_IMM16_X0_HW2: howto manager. (line 3251) +* BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST: howto manager. (line 3259) +* BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST_PCREL: howto manager. (line 3273) * BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST_PLT_PCREL: howto manager. - (line 3274) -* BFD_RELOC_TILEGX_IMM16_X0_HW2_PCREL: howto manager. (line 3232) -* BFD_RELOC_TILEGX_IMM16_X0_HW2_PLT_PCREL: howto manager. (line 3248) -* BFD_RELOC_TILEGX_IMM16_X0_HW3: howto manager. (line 3220) -* BFD_RELOC_TILEGX_IMM16_X0_HW3_PCREL: howto manager. (line 3234) -* BFD_RELOC_TILEGX_IMM16_X0_HW3_PLT_PCREL: howto manager. (line 3254) -* BFD_RELOC_TILEGX_IMM16_X1_HW0: howto manager. (line 3215) -* BFD_RELOC_TILEGX_IMM16_X1_HW0_GOT: howto manager. (line 3243) -* BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST: howto manager. (line 3223) -* BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_GOT: howto manager. (line 3251) -* BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_PCREL: howto manager. (line 3237) + (line 3307) +* BFD_RELOC_TILEGX_IMM16_X0_HW2_PCREL: howto manager. (line 3265) +* BFD_RELOC_TILEGX_IMM16_X0_HW2_PLT_PCREL: howto manager. (line 3281) +* BFD_RELOC_TILEGX_IMM16_X0_HW3: howto manager. (line 3253) +* BFD_RELOC_TILEGX_IMM16_X0_HW3_PCREL: howto manager. (line 3267) +* BFD_RELOC_TILEGX_IMM16_X0_HW3_PLT_PCREL: howto manager. (line 3287) +* BFD_RELOC_TILEGX_IMM16_X1_HW0: howto manager. (line 3248) +* BFD_RELOC_TILEGX_IMM16_X1_HW0_GOT: howto manager. (line 3276) +* BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST: howto manager. (line 3256) +* BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_GOT: howto manager. (line 3284) +* BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_PCREL: howto manager. (line 3270) * BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_PLT_PCREL: howto manager. - (line 3271) -* BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_GD: howto manager. (line 3265) -* BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_IE: howto manager. (line 3277) -* BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_LE: howto manager. (line 3261) -* BFD_RELOC_TILEGX_IMM16_X1_HW0_PCREL: howto manager. (line 3229) -* BFD_RELOC_TILEGX_IMM16_X1_HW0_PLT_PCREL: howto manager. (line 3245) -* BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_GD: howto manager. (line 3257) -* BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_IE: howto manager. (line 3269) -* BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_LE: howto manager. (line 3259) -* BFD_RELOC_TILEGX_IMM16_X1_HW1: howto manager. (line 3217) -* BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST: howto manager. (line 3225) -* BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_GOT: howto manager. (line 3253) -* BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_PCREL: howto manager. (line 3239) + (line 3304) +* BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_GD: howto manager. (line 3298) +* BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_IE: howto manager. (line 3310) +* BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_LE: howto manager. (line 3294) +* BFD_RELOC_TILEGX_IMM16_X1_HW0_PCREL: howto manager. (line 3262) +* BFD_RELOC_TILEGX_IMM16_X1_HW0_PLT_PCREL: howto manager. (line 3278) +* BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_GD: howto manager. (line 3290) +* BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_IE: howto manager. (line 3302) +* BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_LE: howto manager. (line 3292) +* BFD_RELOC_TILEGX_IMM16_X1_HW1: howto manager. (line 3250) +* BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST: howto manager. (line 3258) +* BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_GOT: howto manager. (line 3286) +* BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_PCREL: howto manager. (line 3272) * BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_PLT_PCREL: howto manager. - (line 3273) -* BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_GD: howto manager. (line 3267) -* BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_IE: howto manager. (line 3279) -* BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_LE: howto manager. (line 3263) -* BFD_RELOC_TILEGX_IMM16_X1_HW1_PCREL: howto manager. (line 3231) -* BFD_RELOC_TILEGX_IMM16_X1_HW1_PLT_PCREL: howto manager. (line 3247) -* BFD_RELOC_TILEGX_IMM16_X1_HW2: howto manager. (line 3219) -* BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST: howto manager. (line 3227) -* BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_PCREL: howto manager. (line 3241) + (line 3306) +* BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_GD: howto manager. (line 3300) +* BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_IE: howto manager. (line 3312) +* BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_LE: howto manager. (line 3296) +* BFD_RELOC_TILEGX_IMM16_X1_HW1_PCREL: howto manager. (line 3264) +* BFD_RELOC_TILEGX_IMM16_X1_HW1_PLT_PCREL: howto manager. (line 3280) +* BFD_RELOC_TILEGX_IMM16_X1_HW2: howto manager. (line 3252) +* BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST: howto manager. (line 3260) +* BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_PCREL: howto manager. (line 3274) * BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_PLT_PCREL: howto manager. - (line 3275) -* BFD_RELOC_TILEGX_IMM16_X1_HW2_PCREL: howto manager. (line 3233) -* BFD_RELOC_TILEGX_IMM16_X1_HW2_PLT_PCREL: howto manager. (line 3249) -* BFD_RELOC_TILEGX_IMM16_X1_HW3: howto manager. (line 3221) -* BFD_RELOC_TILEGX_IMM16_X1_HW3_PCREL: howto manager. (line 3235) -* BFD_RELOC_TILEGX_IMM16_X1_HW3_PLT_PCREL: howto manager. (line 3255) -* BFD_RELOC_TILEGX_IMM8_X0: howto manager. (line 3201) -* BFD_RELOC_TILEGX_IMM8_X0_TLS_ADD: howto manager. (line 3292) -* BFD_RELOC_TILEGX_IMM8_X0_TLS_GD_ADD: howto manager. (line 3287) -* BFD_RELOC_TILEGX_IMM8_X1: howto manager. (line 3203) -* BFD_RELOC_TILEGX_IMM8_X1_TLS_ADD: howto manager. (line 3293) -* BFD_RELOC_TILEGX_IMM8_X1_TLS_GD_ADD: howto manager. (line 3288) -* BFD_RELOC_TILEGX_IMM8_Y0: howto manager. (line 3202) -* BFD_RELOC_TILEGX_IMM8_Y0_TLS_ADD: howto manager. (line 3294) -* BFD_RELOC_TILEGX_IMM8_Y0_TLS_GD_ADD: howto manager. (line 3289) -* BFD_RELOC_TILEGX_IMM8_Y1: howto manager. (line 3204) -* BFD_RELOC_TILEGX_IMM8_Y1_TLS_ADD: howto manager. (line 3295) -* BFD_RELOC_TILEGX_IMM8_Y1_TLS_GD_ADD: howto manager. (line 3290) -* BFD_RELOC_TILEGX_JMP_SLOT: howto manager. (line 3196) -* BFD_RELOC_TILEGX_JUMPOFF_X1: howto manager. (line 3199) -* BFD_RELOC_TILEGX_JUMPOFF_X1_PLT: howto manager. (line 3200) -* BFD_RELOC_TILEGX_MF_IMM14_X1: howto manager. (line 3207) -* BFD_RELOC_TILEGX_MMEND_X0: howto manager. (line 3209) -* BFD_RELOC_TILEGX_MMSTART_X0: howto manager. (line 3208) -* BFD_RELOC_TILEGX_MT_IMM14_X1: howto manager. (line 3206) -* BFD_RELOC_TILEGX_RELATIVE: howto manager. (line 3197) -* BFD_RELOC_TILEGX_SHAMT_X0: howto manager. (line 3210) -* BFD_RELOC_TILEGX_SHAMT_X1: howto manager. (line 3211) -* BFD_RELOC_TILEGX_SHAMT_Y0: howto manager. (line 3212) -* BFD_RELOC_TILEGX_SHAMT_Y1: howto manager. (line 3213) -* BFD_RELOC_TILEGX_TLS_DTPMOD32: howto manager. (line 3283) -* BFD_RELOC_TILEGX_TLS_DTPMOD64: howto manager. (line 3280) -* BFD_RELOC_TILEGX_TLS_DTPOFF32: howto manager. (line 3284) -* BFD_RELOC_TILEGX_TLS_DTPOFF64: howto manager. (line 3281) -* BFD_RELOC_TILEGX_TLS_GD_CALL: howto manager. (line 3286) -* BFD_RELOC_TILEGX_TLS_IE_LOAD: howto manager. (line 3291) -* BFD_RELOC_TILEGX_TLS_TPOFF32: howto manager. (line 3285) -* BFD_RELOC_TILEGX_TLS_TPOFF64: howto manager. (line 3282) -* BFD_RELOC_TILEPRO_BROFF_X1: howto manager. (line 3111) -* BFD_RELOC_TILEPRO_COPY: howto manager. (line 3107) -* BFD_RELOC_TILEPRO_DEST_IMM8_X1: howto manager. (line 3118) -* BFD_RELOC_TILEPRO_GLOB_DAT: howto manager. (line 3108) -* BFD_RELOC_TILEPRO_IMM16_X0: howto manager. (line 3121) -* BFD_RELOC_TILEPRO_IMM16_X0_GOT: howto manager. (line 3137) -* BFD_RELOC_TILEPRO_IMM16_X0_GOT_HA: howto manager. (line 3143) -* BFD_RELOC_TILEPRO_IMM16_X0_GOT_HI: howto manager. (line 3141) -* BFD_RELOC_TILEPRO_IMM16_X0_GOT_LO: howto manager. (line 3139) -* BFD_RELOC_TILEPRO_IMM16_X0_HA: howto manager. (line 3127) -* BFD_RELOC_TILEPRO_IMM16_X0_HA_PCREL: howto manager. (line 3135) -* BFD_RELOC_TILEPRO_IMM16_X0_HI: howto manager. (line 3125) -* BFD_RELOC_TILEPRO_IMM16_X0_HI_PCREL: howto manager. (line 3133) -* BFD_RELOC_TILEPRO_IMM16_X0_LO: howto manager. (line 3123) -* BFD_RELOC_TILEPRO_IMM16_X0_LO_PCREL: howto manager. (line 3131) -* BFD_RELOC_TILEPRO_IMM16_X0_PCREL: howto manager. (line 3129) -* BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD: howto manager. (line 3159) -* BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD_HA: howto manager. (line 3165) -* BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD_HI: howto manager. (line 3163) -* BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD_LO: howto manager. (line 3161) -* BFD_RELOC_TILEPRO_IMM16_X0_TLS_IE: howto manager. (line 3167) -* BFD_RELOC_TILEPRO_IMM16_X0_TLS_IE_HA: howto manager. (line 3173) -* BFD_RELOC_TILEPRO_IMM16_X0_TLS_IE_HI: howto manager. (line 3171) -* BFD_RELOC_TILEPRO_IMM16_X0_TLS_IE_LO: howto manager. (line 3169) -* BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE: howto manager. (line 3178) -* BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_HA: howto manager. (line 3184) -* BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_HI: howto manager. (line 3182) -* BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_LO: howto manager. (line 3180) -* BFD_RELOC_TILEPRO_IMM16_X1: howto manager. (line 3122) -* BFD_RELOC_TILEPRO_IMM16_X1_GOT: howto manager. (line 3138) -* BFD_RELOC_TILEPRO_IMM16_X1_GOT_HA: howto manager. (line 3144) -* BFD_RELOC_TILEPRO_IMM16_X1_GOT_HI: howto manager. (line 3142) -* BFD_RELOC_TILEPRO_IMM16_X1_GOT_LO: howto manager. (line 3140) -* BFD_RELOC_TILEPRO_IMM16_X1_HA: howto manager. (line 3128) -* BFD_RELOC_TILEPRO_IMM16_X1_HA_PCREL: howto manager. (line 3136) -* BFD_RELOC_TILEPRO_IMM16_X1_HI: howto manager. (line 3126) -* BFD_RELOC_TILEPRO_IMM16_X1_HI_PCREL: howto manager. (line 3134) -* BFD_RELOC_TILEPRO_IMM16_X1_LO: howto manager. (line 3124) -* BFD_RELOC_TILEPRO_IMM16_X1_LO_PCREL: howto manager. (line 3132) -* BFD_RELOC_TILEPRO_IMM16_X1_PCREL: howto manager. (line 3130) -* BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD: howto manager. (line 3160) -* BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD_HA: howto manager. (line 3166) -* BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD_HI: howto manager. (line 3164) -* BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD_LO: howto manager. (line 3162) -* BFD_RELOC_TILEPRO_IMM16_X1_TLS_IE: howto manager. (line 3168) -* BFD_RELOC_TILEPRO_IMM16_X1_TLS_IE_HA: howto manager. (line 3174) -* BFD_RELOC_TILEPRO_IMM16_X1_TLS_IE_HI: howto manager. (line 3172) -* BFD_RELOC_TILEPRO_IMM16_X1_TLS_IE_LO: howto manager. (line 3170) -* BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE: howto manager. (line 3179) -* BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_HA: howto manager. (line 3185) -* BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_HI: howto manager. (line 3183) -* BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_LO: howto manager. (line 3181) -* BFD_RELOC_TILEPRO_IMM8_X0: howto manager. (line 3114) -* BFD_RELOC_TILEPRO_IMM8_X0_TLS_GD_ADD: howto manager. (line 3154) -* BFD_RELOC_TILEPRO_IMM8_X1: howto manager. (line 3116) -* BFD_RELOC_TILEPRO_IMM8_X1_TLS_GD_ADD: howto manager. (line 3155) -* BFD_RELOC_TILEPRO_IMM8_Y0: howto manager. (line 3115) -* BFD_RELOC_TILEPRO_IMM8_Y0_TLS_GD_ADD: howto manager. (line 3156) -* BFD_RELOC_TILEPRO_IMM8_Y1: howto manager. (line 3117) -* BFD_RELOC_TILEPRO_IMM8_Y1_TLS_GD_ADD: howto manager. (line 3157) -* BFD_RELOC_TILEPRO_JMP_SLOT: howto manager. (line 3109) -* BFD_RELOC_TILEPRO_JOFFLONG_X1: howto manager. (line 3112) -* BFD_RELOC_TILEPRO_JOFFLONG_X1_PLT: howto manager. (line 3113) -* BFD_RELOC_TILEPRO_MF_IMM15_X1: howto manager. (line 3120) -* BFD_RELOC_TILEPRO_MMEND_X0: howto manager. (line 3146) -* BFD_RELOC_TILEPRO_MMEND_X1: howto manager. (line 3148) -* BFD_RELOC_TILEPRO_MMSTART_X0: howto manager. (line 3145) -* BFD_RELOC_TILEPRO_MMSTART_X1: howto manager. (line 3147) -* BFD_RELOC_TILEPRO_MT_IMM15_X1: howto manager. (line 3119) -* BFD_RELOC_TILEPRO_RELATIVE: howto manager. (line 3110) -* BFD_RELOC_TILEPRO_SHAMT_X0: howto manager. (line 3149) -* BFD_RELOC_TILEPRO_SHAMT_X1: howto manager. (line 3150) -* BFD_RELOC_TILEPRO_SHAMT_Y0: howto manager. (line 3151) -* BFD_RELOC_TILEPRO_SHAMT_Y1: howto manager. (line 3152) -* BFD_RELOC_TILEPRO_TLS_DTPMOD32: howto manager. (line 3175) -* BFD_RELOC_TILEPRO_TLS_DTPOFF32: howto manager. (line 3176) -* BFD_RELOC_TILEPRO_TLS_GD_CALL: howto manager. (line 3153) -* BFD_RELOC_TILEPRO_TLS_IE_LOAD: howto manager. (line 3158) -* BFD_RELOC_TILEPRO_TLS_TPOFF32: howto manager. (line 3177) -* bfd_reloc_type_lookup: howto manager. (line 3407) + (line 3308) +* BFD_RELOC_TILEGX_IMM16_X1_HW2_PCREL: howto manager. (line 3266) +* BFD_RELOC_TILEGX_IMM16_X1_HW2_PLT_PCREL: howto manager. (line 3282) +* BFD_RELOC_TILEGX_IMM16_X1_HW3: howto manager. (line 3254) +* BFD_RELOC_TILEGX_IMM16_X1_HW3_PCREL: howto manager. (line 3268) +* BFD_RELOC_TILEGX_IMM16_X1_HW3_PLT_PCREL: howto manager. (line 3288) +* BFD_RELOC_TILEGX_IMM8_X0: howto manager. (line 3234) +* BFD_RELOC_TILEGX_IMM8_X0_TLS_ADD: howto manager. (line 3325) +* BFD_RELOC_TILEGX_IMM8_X0_TLS_GD_ADD: howto manager. (line 3320) +* BFD_RELOC_TILEGX_IMM8_X1: howto manager. (line 3236) +* BFD_RELOC_TILEGX_IMM8_X1_TLS_ADD: howto manager. (line 3326) +* BFD_RELOC_TILEGX_IMM8_X1_TLS_GD_ADD: howto manager. (line 3321) +* BFD_RELOC_TILEGX_IMM8_Y0: howto manager. (line 3235) +* BFD_RELOC_TILEGX_IMM8_Y0_TLS_ADD: howto manager. (line 3327) +* BFD_RELOC_TILEGX_IMM8_Y0_TLS_GD_ADD: howto manager. (line 3322) +* BFD_RELOC_TILEGX_IMM8_Y1: howto manager. (line 3237) +* BFD_RELOC_TILEGX_IMM8_Y1_TLS_ADD: howto manager. (line 3328) +* BFD_RELOC_TILEGX_IMM8_Y1_TLS_GD_ADD: howto manager. (line 3323) +* BFD_RELOC_TILEGX_JMP_SLOT: howto manager. (line 3229) +* BFD_RELOC_TILEGX_JUMPOFF_X1: howto manager. (line 3232) +* BFD_RELOC_TILEGX_JUMPOFF_X1_PLT: howto manager. (line 3233) +* BFD_RELOC_TILEGX_MF_IMM14_X1: howto manager. (line 3240) +* BFD_RELOC_TILEGX_MMEND_X0: howto manager. (line 3242) +* BFD_RELOC_TILEGX_MMSTART_X0: howto manager. (line 3241) +* BFD_RELOC_TILEGX_MT_IMM14_X1: howto manager. (line 3239) +* BFD_RELOC_TILEGX_RELATIVE: howto manager. (line 3230) +* BFD_RELOC_TILEGX_SHAMT_X0: howto manager. (line 3243) +* BFD_RELOC_TILEGX_SHAMT_X1: howto manager. (line 3244) +* BFD_RELOC_TILEGX_SHAMT_Y0: howto manager. (line 3245) +* BFD_RELOC_TILEGX_SHAMT_Y1: howto manager. (line 3246) +* BFD_RELOC_TILEGX_TLS_DTPMOD32: howto manager. (line 3316) +* BFD_RELOC_TILEGX_TLS_DTPMOD64: howto manager. (line 3313) +* BFD_RELOC_TILEGX_TLS_DTPOFF32: howto manager. (line 3317) +* BFD_RELOC_TILEGX_TLS_DTPOFF64: howto manager. (line 3314) +* BFD_RELOC_TILEGX_TLS_GD_CALL: howto manager. (line 3319) +* BFD_RELOC_TILEGX_TLS_IE_LOAD: howto manager. (line 3324) +* BFD_RELOC_TILEGX_TLS_TPOFF32: howto manager. (line 3318) +* BFD_RELOC_TILEGX_TLS_TPOFF64: howto manager. (line 3315) +* BFD_RELOC_TILEPRO_BROFF_X1: howto manager. (line 3144) +* BFD_RELOC_TILEPRO_COPY: howto manager. (line 3140) +* BFD_RELOC_TILEPRO_DEST_IMM8_X1: howto manager. (line 3151) +* BFD_RELOC_TILEPRO_GLOB_DAT: howto manager. (line 3141) +* BFD_RELOC_TILEPRO_IMM16_X0: howto manager. (line 3154) +* BFD_RELOC_TILEPRO_IMM16_X0_GOT: howto manager. (line 3170) +* BFD_RELOC_TILEPRO_IMM16_X0_GOT_HA: howto manager. (line 3176) +* BFD_RELOC_TILEPRO_IMM16_X0_GOT_HI: howto manager. (line 3174) +* BFD_RELOC_TILEPRO_IMM16_X0_GOT_LO: howto manager. (line 3172) +* BFD_RELOC_TILEPRO_IMM16_X0_HA: howto manager. (line 3160) +* BFD_RELOC_TILEPRO_IMM16_X0_HA_PCREL: howto manager. (line 3168) +* BFD_RELOC_TILEPRO_IMM16_X0_HI: howto manager. (line 3158) +* BFD_RELOC_TILEPRO_IMM16_X0_HI_PCREL: howto manager. (line 3166) +* BFD_RELOC_TILEPRO_IMM16_X0_LO: howto manager. (line 3156) +* BFD_RELOC_TILEPRO_IMM16_X0_LO_PCREL: howto manager. (line 3164) +* BFD_RELOC_TILEPRO_IMM16_X0_PCREL: howto manager. (line 3162) +* BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD: howto manager. (line 3192) +* BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD_HA: howto manager. (line 3198) +* BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD_HI: howto manager. (line 3196) +* BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD_LO: howto manager. (line 3194) +* BFD_RELOC_TILEPRO_IMM16_X0_TLS_IE: howto manager. (line 3200) +* BFD_RELOC_TILEPRO_IMM16_X0_TLS_IE_HA: howto manager. (line 3206) +* BFD_RELOC_TILEPRO_IMM16_X0_TLS_IE_HI: howto manager. (line 3204) +* BFD_RELOC_TILEPRO_IMM16_X0_TLS_IE_LO: howto manager. (line 3202) +* BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE: howto manager. (line 3211) +* BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_HA: howto manager. (line 3217) +* BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_HI: howto manager. (line 3215) +* BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_LO: howto manager. (line 3213) +* BFD_RELOC_TILEPRO_IMM16_X1: howto manager. (line 3155) +* BFD_RELOC_TILEPRO_IMM16_X1_GOT: howto manager. (line 3171) +* BFD_RELOC_TILEPRO_IMM16_X1_GOT_HA: howto manager. (line 3177) +* BFD_RELOC_TILEPRO_IMM16_X1_GOT_HI: howto manager. (line 3175) +* BFD_RELOC_TILEPRO_IMM16_X1_GOT_LO: howto manager. (line 3173) +* BFD_RELOC_TILEPRO_IMM16_X1_HA: howto manager. (line 3161) +* BFD_RELOC_TILEPRO_IMM16_X1_HA_PCREL: howto manager. (line 3169) +* BFD_RELOC_TILEPRO_IMM16_X1_HI: howto manager. (line 3159) +* BFD_RELOC_TILEPRO_IMM16_X1_HI_PCREL: howto manager. (line 3167) +* BFD_RELOC_TILEPRO_IMM16_X1_LO: howto manager. (line 3157) +* BFD_RELOC_TILEPRO_IMM16_X1_LO_PCREL: howto manager. (line 3165) +* BFD_RELOC_TILEPRO_IMM16_X1_PCREL: howto manager. (line 3163) +* BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD: howto manager. (line 3193) +* BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD_HA: howto manager. (line 3199) +* BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD_HI: howto manager. (line 3197) +* BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD_LO: howto manager. (line 3195) +* BFD_RELOC_TILEPRO_IMM16_X1_TLS_IE: howto manager. (line 3201) +* BFD_RELOC_TILEPRO_IMM16_X1_TLS_IE_HA: howto manager. (line 3207) +* BFD_RELOC_TILEPRO_IMM16_X1_TLS_IE_HI: howto manager. (line 3205) +* BFD_RELOC_TILEPRO_IMM16_X1_TLS_IE_LO: howto manager. (line 3203) +* BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE: howto manager. (line 3212) +* BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_HA: howto manager. (line 3218) +* BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_HI: howto manager. (line 3216) +* BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_LO: howto manager. (line 3214) +* BFD_RELOC_TILEPRO_IMM8_X0: howto manager. (line 3147) +* BFD_RELOC_TILEPRO_IMM8_X0_TLS_GD_ADD: howto manager. (line 3187) +* BFD_RELOC_TILEPRO_IMM8_X1: howto manager. (line 3149) +* BFD_RELOC_TILEPRO_IMM8_X1_TLS_GD_ADD: howto manager. (line 3188) +* BFD_RELOC_TILEPRO_IMM8_Y0: howto manager. (line 3148) +* BFD_RELOC_TILEPRO_IMM8_Y0_TLS_GD_ADD: howto manager. (line 3189) +* BFD_RELOC_TILEPRO_IMM8_Y1: howto manager. (line 3150) +* BFD_RELOC_TILEPRO_IMM8_Y1_TLS_GD_ADD: howto manager. (line 3190) +* BFD_RELOC_TILEPRO_JMP_SLOT: howto manager. (line 3142) +* BFD_RELOC_TILEPRO_JOFFLONG_X1: howto manager. (line 3145) +* BFD_RELOC_TILEPRO_JOFFLONG_X1_PLT: howto manager. (line 3146) +* BFD_RELOC_TILEPRO_MF_IMM15_X1: howto manager. (line 3153) +* BFD_RELOC_TILEPRO_MMEND_X0: howto manager. (line 3179) +* BFD_RELOC_TILEPRO_MMEND_X1: howto manager. (line 3181) +* BFD_RELOC_TILEPRO_MMSTART_X0: howto manager. (line 3178) +* BFD_RELOC_TILEPRO_MMSTART_X1: howto manager. (line 3180) +* BFD_RELOC_TILEPRO_MT_IMM15_X1: howto manager. (line 3152) +* BFD_RELOC_TILEPRO_RELATIVE: howto manager. (line 3143) +* BFD_RELOC_TILEPRO_SHAMT_X0: howto manager. (line 3182) +* BFD_RELOC_TILEPRO_SHAMT_X1: howto manager. (line 3183) +* BFD_RELOC_TILEPRO_SHAMT_Y0: howto manager. (line 3184) +* BFD_RELOC_TILEPRO_SHAMT_Y1: howto manager. (line 3185) +* BFD_RELOC_TILEPRO_TLS_DTPMOD32: howto manager. (line 3208) +* BFD_RELOC_TILEPRO_TLS_DTPOFF32: howto manager. (line 3209) +* BFD_RELOC_TILEPRO_TLS_GD_CALL: howto manager. (line 3186) +* BFD_RELOC_TILEPRO_TLS_IE_LOAD: howto manager. (line 3191) +* BFD_RELOC_TILEPRO_TLS_TPOFF32: howto manager. (line 3210) +* bfd_reloc_type_lookup: howto manager. (line 3440) * BFD_RELOC_V850_16_GOT: howto manager. (line 1525) * BFD_RELOC_V850_16_GOTOFF: howto manager. (line 1541) * BFD_RELOC_V850_16_PCREL: howto manager. (line 1505) @@ -14447,27 +14506,27 @@ * BFD_RELOC_VAX_GLOB_DAT: howto manager. (line 2423) * BFD_RELOC_VAX_JMP_SLOT: howto manager. (line 2424) * BFD_RELOC_VAX_RELATIVE: howto manager. (line 2425) -* BFD_RELOC_VISIUM_HI16: howto manager. (line 3318) -* BFD_RELOC_VISIUM_HI16_PCREL: howto manager. (line 3322) -* BFD_RELOC_VISIUM_IM16: howto manager. (line 3320) -* BFD_RELOC_VISIUM_IM16_PCREL: howto manager. (line 3324) -* BFD_RELOC_VISIUM_LO16: howto manager. (line 3319) -* BFD_RELOC_VISIUM_LO16_PCREL: howto manager. (line 3323) -* BFD_RELOC_VISIUM_REL16: howto manager. (line 3321) +* BFD_RELOC_VISIUM_HI16: howto manager. (line 3351) +* BFD_RELOC_VISIUM_HI16_PCREL: howto manager. (line 3355) +* BFD_RELOC_VISIUM_IM16: howto manager. (line 3353) +* BFD_RELOC_VISIUM_IM16_PCREL: howto manager. (line 3357) +* BFD_RELOC_VISIUM_LO16: howto manager. (line 3352) +* BFD_RELOC_VISIUM_LO16_PCREL: howto manager. (line 3356) +* BFD_RELOC_VISIUM_REL16: howto manager. (line 3354) * BFD_RELOC_VPE4KMATH_DATA: howto manager. (line 2081) * BFD_RELOC_VPE4KMATH_INSN: howto manager. (line 2082) * BFD_RELOC_VTABLE_ENTRY: howto manager. (line 2085) * BFD_RELOC_VTABLE_INHERIT: howto manager. (line 2084) -* BFD_RELOC_WASM32_ABS32_CODE: howto manager. (line 3331) -* BFD_RELOC_WASM32_CODE_POINTER: howto manager. (line 3333) -* BFD_RELOC_WASM32_COPY: howto manager. (line 3332) -* BFD_RELOC_WASM32_INDEX: howto manager. (line 3334) -* BFD_RELOC_WASM32_LEB128: howto manager. (line 3326) -* BFD_RELOC_WASM32_LEB128_GOT: howto manager. (line 3327) -* BFD_RELOC_WASM32_LEB128_GOT_CODE: howto manager. (line 3328) -* BFD_RELOC_WASM32_LEB128_PLT: howto manager. (line 3329) -* BFD_RELOC_WASM32_PLT_INDEX: howto manager. (line 3330) -* BFD_RELOC_WASM32_PLT_SIG: howto manager. (line 3335) +* BFD_RELOC_WASM32_ABS32_CODE: howto manager. (line 3364) +* BFD_RELOC_WASM32_CODE_POINTER: howto manager. (line 3366) +* BFD_RELOC_WASM32_COPY: howto manager. (line 3365) +* BFD_RELOC_WASM32_INDEX: howto manager. (line 3367) +* BFD_RELOC_WASM32_LEB128: howto manager. (line 3359) +* BFD_RELOC_WASM32_LEB128_GOT: howto manager. (line 3360) +* BFD_RELOC_WASM32_LEB128_GOT_CODE: howto manager. (line 3361) +* BFD_RELOC_WASM32_LEB128_PLT: howto manager. (line 3362) +* BFD_RELOC_WASM32_PLT_INDEX: howto manager. (line 3363) +* BFD_RELOC_WASM32_PLT_SIG: howto manager. (line 3368) * BFD_RELOC_X86_64_32S: howto manager. (line 554) * BFD_RELOC_X86_64_COPY: howto manager. (line 549) * BFD_RELOC_X86_64_DTPMOD64: howto manager. (line 555) @@ -14519,76 +14578,89 @@ * BFD_RELOC_XSTORMY16_24: howto manager. (line 2413) * BFD_RELOC_XSTORMY16_FPTR16: howto manager. (line 2414) * BFD_RELOC_XSTORMY16_REL_12: howto manager. (line 2411) -* BFD_RELOC_XTENSA_ASM_EXPAND: howto manager. (line 2609) -* BFD_RELOC_XTENSA_ASM_SIMPLIFY: howto manager. (line 2613) -* BFD_RELOC_XTENSA_DIFF16: howto manager. (line 2560) -* BFD_RELOC_XTENSA_DIFF32: howto manager. (line 2561) -* BFD_RELOC_XTENSA_DIFF8: howto manager. (line 2559) -* BFD_RELOC_XTENSA_GLOB_DAT: howto manager. (line 2551) -* BFD_RELOC_XTENSA_JMP_SLOT: howto manager. (line 2552) -* BFD_RELOC_XTENSA_OP0: howto manager. (line 2604) -* BFD_RELOC_XTENSA_OP1: howto manager. (line 2605) -* BFD_RELOC_XTENSA_OP2: howto manager. (line 2606) -* BFD_RELOC_XTENSA_PLT: howto manager. (line 2555) -* BFD_RELOC_XTENSA_RELATIVE: howto manager. (line 2553) -* BFD_RELOC_XTENSA_RTLD: howto manager. (line 2547) -* BFD_RELOC_XTENSA_SLOT0_ALT: howto manager. (line 2587) -* BFD_RELOC_XTENSA_SLOT0_OP: howto manager. (line 2568) -* BFD_RELOC_XTENSA_SLOT10_ALT: howto manager. (line 2597) -* BFD_RELOC_XTENSA_SLOT10_OP: howto manager. (line 2578) -* BFD_RELOC_XTENSA_SLOT11_ALT: howto manager. (line 2598) -* BFD_RELOC_XTENSA_SLOT11_OP: howto manager. (line 2579) -* BFD_RELOC_XTENSA_SLOT12_ALT: howto manager. (line 2599) -* BFD_RELOC_XTENSA_SLOT12_OP: howto manager. (line 2580) -* BFD_RELOC_XTENSA_SLOT13_ALT: howto manager. (line 2600) -* BFD_RELOC_XTENSA_SLOT13_OP: howto manager. (line 2581) -* BFD_RELOC_XTENSA_SLOT14_ALT: howto manager. (line 2601) -* BFD_RELOC_XTENSA_SLOT14_OP: howto manager. (line 2582) -* BFD_RELOC_XTENSA_SLOT1_ALT: howto manager. (line 2588) -* BFD_RELOC_XTENSA_SLOT1_OP: howto manager. (line 2569) -* BFD_RELOC_XTENSA_SLOT2_ALT: howto manager. (line 2589) -* BFD_RELOC_XTENSA_SLOT2_OP: howto manager. (line 2570) -* BFD_RELOC_XTENSA_SLOT3_ALT: howto manager. (line 2590) -* BFD_RELOC_XTENSA_SLOT3_OP: howto manager. (line 2571) -* BFD_RELOC_XTENSA_SLOT4_ALT: howto manager. (line 2591) -* BFD_RELOC_XTENSA_SLOT4_OP: howto manager. (line 2572) -* BFD_RELOC_XTENSA_SLOT5_ALT: howto manager. (line 2592) -* BFD_RELOC_XTENSA_SLOT5_OP: howto manager. (line 2573) -* BFD_RELOC_XTENSA_SLOT6_ALT: howto manager. (line 2593) -* BFD_RELOC_XTENSA_SLOT6_OP: howto manager. (line 2574) -* BFD_RELOC_XTENSA_SLOT7_ALT: howto manager. (line 2594) -* BFD_RELOC_XTENSA_SLOT7_OP: howto manager. (line 2575) -* BFD_RELOC_XTENSA_SLOT8_ALT: howto manager. (line 2595) -* BFD_RELOC_XTENSA_SLOT8_OP: howto manager. (line 2576) -* BFD_RELOC_XTENSA_SLOT9_ALT: howto manager. (line 2596) -* BFD_RELOC_XTENSA_SLOT9_OP: howto manager. (line 2577) -* BFD_RELOC_XTENSA_TLSDESC_ARG: howto manager. (line 2618) -* BFD_RELOC_XTENSA_TLSDESC_FN: howto manager. (line 2617) -* BFD_RELOC_XTENSA_TLS_ARG: howto manager. (line 2622) -* BFD_RELOC_XTENSA_TLS_CALL: howto manager. (line 2623) -* BFD_RELOC_XTENSA_TLS_DTPOFF: howto manager. (line 2619) -* BFD_RELOC_XTENSA_TLS_FUNC: howto manager. (line 2621) -* BFD_RELOC_XTENSA_TLS_TPOFF: howto manager. (line 2620) -* BFD_RELOC_Z80_DISP8: howto manager. (line 2625) -* BFD_RELOC_Z8K_CALLR: howto manager. (line 2629) -* BFD_RELOC_Z8K_DISP7: howto manager. (line 2627) -* BFD_RELOC_Z8K_IMM4L: howto manager. (line 2631) +* BFD_RELOC_XTENSA_ASM_EXPAND: howto manager. (line 2613) +* BFD_RELOC_XTENSA_ASM_SIMPLIFY: howto manager. (line 2617) +* BFD_RELOC_XTENSA_DIFF16: howto manager. (line 2562) +* BFD_RELOC_XTENSA_DIFF32: howto manager. (line 2563) +* BFD_RELOC_XTENSA_DIFF8: howto manager. (line 2561) +* BFD_RELOC_XTENSA_GLOB_DAT: howto manager. (line 2553) +* BFD_RELOC_XTENSA_JMP_SLOT: howto manager. (line 2554) +* BFD_RELOC_XTENSA_NDIFF16: howto manager. (line 2633) +* BFD_RELOC_XTENSA_NDIFF32: howto manager. (line 2634) +* BFD_RELOC_XTENSA_NDIFF8: howto manager. (line 2632) +* BFD_RELOC_XTENSA_OP0: howto manager. (line 2608) +* BFD_RELOC_XTENSA_OP1: howto manager. (line 2609) +* BFD_RELOC_XTENSA_OP2: howto manager. (line 2610) +* BFD_RELOC_XTENSA_PDIFF16: howto manager. (line 2630) +* BFD_RELOC_XTENSA_PDIFF32: howto manager. (line 2631) +* BFD_RELOC_XTENSA_PDIFF8: howto manager. (line 2629) +* BFD_RELOC_XTENSA_PLT: howto manager. (line 2557) +* BFD_RELOC_XTENSA_RELATIVE: howto manager. (line 2555) +* BFD_RELOC_XTENSA_RTLD: howto manager. (line 2549) +* BFD_RELOC_XTENSA_SLOT0_ALT: howto manager. (line 2591) +* BFD_RELOC_XTENSA_SLOT0_OP: howto manager. (line 2572) +* BFD_RELOC_XTENSA_SLOT10_ALT: howto manager. (line 2601) +* BFD_RELOC_XTENSA_SLOT10_OP: howto manager. (line 2582) +* BFD_RELOC_XTENSA_SLOT11_ALT: howto manager. (line 2602) +* BFD_RELOC_XTENSA_SLOT11_OP: howto manager. (line 2583) +* BFD_RELOC_XTENSA_SLOT12_ALT: howto manager. (line 2603) +* BFD_RELOC_XTENSA_SLOT12_OP: howto manager. (line 2584) +* BFD_RELOC_XTENSA_SLOT13_ALT: howto manager. (line 2604) +* BFD_RELOC_XTENSA_SLOT13_OP: howto manager. (line 2585) +* BFD_RELOC_XTENSA_SLOT14_ALT: howto manager. (line 2605) +* BFD_RELOC_XTENSA_SLOT14_OP: howto manager. (line 2586) +* BFD_RELOC_XTENSA_SLOT1_ALT: howto manager. (line 2592) +* BFD_RELOC_XTENSA_SLOT1_OP: howto manager. (line 2573) +* BFD_RELOC_XTENSA_SLOT2_ALT: howto manager. (line 2593) +* BFD_RELOC_XTENSA_SLOT2_OP: howto manager. (line 2574) +* BFD_RELOC_XTENSA_SLOT3_ALT: howto manager. (line 2594) +* BFD_RELOC_XTENSA_SLOT3_OP: howto manager. (line 2575) +* BFD_RELOC_XTENSA_SLOT4_ALT: howto manager. (line 2595) +* BFD_RELOC_XTENSA_SLOT4_OP: howto manager. (line 2576) +* BFD_RELOC_XTENSA_SLOT5_ALT: howto manager. (line 2596) +* BFD_RELOC_XTENSA_SLOT5_OP: howto manager. (line 2577) +* BFD_RELOC_XTENSA_SLOT6_ALT: howto manager. (line 2597) +* BFD_RELOC_XTENSA_SLOT6_OP: howto manager. (line 2578) +* BFD_RELOC_XTENSA_SLOT7_ALT: howto manager. (line 2598) +* BFD_RELOC_XTENSA_SLOT7_OP: howto manager. (line 2579) +* BFD_RELOC_XTENSA_SLOT8_ALT: howto manager. (line 2599) +* BFD_RELOC_XTENSA_SLOT8_OP: howto manager. (line 2580) +* BFD_RELOC_XTENSA_SLOT9_ALT: howto manager. (line 2600) +* BFD_RELOC_XTENSA_SLOT9_OP: howto manager. (line 2581) +* BFD_RELOC_XTENSA_TLSDESC_ARG: howto manager. (line 2622) +* BFD_RELOC_XTENSA_TLSDESC_FN: howto manager. (line 2621) +* BFD_RELOC_XTENSA_TLS_ARG: howto manager. (line 2626) +* BFD_RELOC_XTENSA_TLS_CALL: howto manager. (line 2627) +* BFD_RELOC_XTENSA_TLS_DTPOFF: howto manager. (line 2623) +* BFD_RELOC_XTENSA_TLS_FUNC: howto manager. (line 2625) +* BFD_RELOC_XTENSA_TLS_TPOFF: howto manager. (line 2624) +* BFD_RELOC_Z80_16_BE: howto manager. (line 2658) +* BFD_RELOC_Z80_BYTE0: howto manager. (line 2646) +* BFD_RELOC_Z80_BYTE1: howto manager. (line 2648) +* BFD_RELOC_Z80_BYTE2: howto manager. (line 2650) +* BFD_RELOC_Z80_BYTE3: howto manager. (line 2652) +* BFD_RELOC_Z80_DISP8: howto manager. (line 2644) +* BFD_RELOC_Z80_WORD0: howto manager. (line 2654) +* BFD_RELOC_Z80_WORD1: howto manager. (line 2656) +* BFD_RELOC_Z8K_CALLR: howto manager. (line 2662) +* BFD_RELOC_Z8K_DISP7: howto manager. (line 2660) +* BFD_RELOC_Z8K_IMM4L: howto manager. (line 2664) * bfd_rename_section: section prototypes. (line 167) -* bfd_scan_arch: Architectures. (line 571) +* bfd_scan_arch: Architectures. (line 583) * bfd_scan_vma: Miscellaneous. (line 126) * bfd_sections_find_if: section prototypes. (line 197) * bfd_section_already_linked: Writing the symbol table. (line 55) * bfd_section_list_clear: section prototypes. (line 7) * bfd_set_archive_head: Archives. (line 74) -* bfd_set_arch_info: Architectures. (line 612) +* bfd_set_arch_info: Architectures. (line 624) * bfd_set_assert_handler: Error reporting. (line 162) -* bfd_set_default_target: bfd_target. (line 557) +* bfd_set_default_target: bfd_target. (line 560) * bfd_set_error: Error reporting. (line 58) * bfd_set_error_handler: Error reporting. (line 128) * bfd_set_error_program_name: Error reporting. (line 136) * bfd_set_filename: Opening and Closing. - (line 529) + (line 511) * bfd_set_file_flags: Miscellaneous. (line 45) * bfd_set_format: Formats. (line 67) * bfd_set_gp_size: Miscellaneous. (line 116) @@ -14603,33 +14675,31 @@ (line 63) * bfd_symbol_info: symbol handling functions. (line 135) -* bfd_target_list: bfd_target. (line 609) -* bfd_update_compression_header: Miscellaneous. (line 353) +* bfd_target_list: bfd_target. (line 612) +* bfd_update_compression_header: Miscellaneous. (line 354) * bfd_write_bigendian_4byte_int: Internal. (line 12) * bfd_zalloc: Opening and Closing. - (line 257) -* bfd_zalloc2: Opening and Closing. - (line 266) + (line 248) * check_build_id_file: Opening and Closing. - (line 491) + (line 473) * coff_symbol_type: coff. (line 233) * core_file_matches_executable_p: Core Files. (line 38) * find_separate_debug_file: Opening and Closing. - (line 365) + (line 347) * generic_core_file_matches_executable_p: Core Files. (line 48) * get_build_id: Opening and Closing. - (line 460) + (line 442) * get_build_id_name: Opening and Closing. - (line 474) + (line 456) * Hash tables: Hash Tables. (line 6) * internal object-file format: Canonical format. (line 11) * Linker: Linker Functions. (line 6) * Other functions: Miscellaneous. (line 188) * separate_alt_debug_file_exists: Opening and Closing. - (line 356) + (line 338) * separate_debug_file_exists: Opening and Closing. - (line 343) -* struct bfd_iovec: Miscellaneous. (line 414) + (line 325) +* struct bfd_iovec: Miscellaneous. (line 415) * target vector (_bfd_final_link): Performing the Final Link. (line 6) * target vector (_bfd_link_add_symbols): Adding Symbols to the Hash Table. @@ -14651,61 +14721,66 @@ Node: Canonical format8785 Node: BFD front end13128 Node: typedef bfd13552 -Node: Error reporting31009 -Node: Miscellaneous36260 -Node: Memory Usage55374 -Node: Initialization56605 -Node: Sections57281 -Node: Section Input57764 -Node: Section Output58958 -Node: typedef asection61445 -Node: section prototypes85488 -Node: Symbols96232 -Node: Reading Symbols97835 -Node: Writing Symbols98943 -Node: Mini Symbols100687 -Node: typedef asymbol101661 -Node: symbol handling functions107746 -Node: Archives113121 -Node: Formats117258 -Node: Relocations120209 -Node: typedef arelent120936 -Node: howto manager135854 -Node: Core Files267925 -Node: Targets269963 -Node: bfd_target271938 -Node: Architectures299273 -Node: Opening and Closing330730 -Node: Internal349193 -Node: File Caching356025 -Node: Linker Functions357943 -Node: Creating a Linker Hash Table359617 -Node: Adding Symbols to the Hash Table361356 -Node: Differing file formats362256 -Node: Adding symbols from an object file363981 -Node: Adding symbols from an archive366131 -Node: Performing the Final Link368477 -Node: Information provided by the linker369718 -Node: Relocating the section contents370872 -Node: Writing the symbol table372624 -Node: Hash Tables379778 -Node: Creating and Freeing a Hash Table380976 -Node: Looking Up or Entering a String382226 -Node: Traversing a Hash Table383479 -Node: Deriving a New Hash Table Type384268 -Node: Define the Derived Structures385334 -Node: Write the Derived Creation Routine386415 -Node: Write Other Derived Routines389040 -Node: BFD back ends390355 -Node: What to Put Where390625 -Node: aout390805 -Node: coff397087 -Node: elf425238 -Node: mmo425639 -Node: File layout426509 -Node: Symbol-table432422 -Node: mmo section mapping436185 -Node: GNU Free Documentation License439839 -Node: BFD Index464903 +Node: Error reporting31354 +Node: Miscellaneous36605 +Node: Memory Usage55845 +Node: Initialization57076 +Node: Sections57752 +Node: Section Input58235 +Node: Section Output59429 +Node: typedef asection61916 +Node: section prototypes86834 +Node: Symbols97578 +Node: Reading Symbols99181 +Node: Writing Symbols100289 +Node: Mini Symbols102033 +Node: typedef asymbol103007 +Node: symbol handling functions109092 +Node: Archives114467 +Node: Formats118604 +Node: Relocations121555 +Node: typedef arelent122282 +Node: howto manager137200 +Node: Core Files270842 +Node: Targets272880 +Node: bfd_target274855 +Node: Architectures302302 +Node: Opening and Closing334074 +Node: Internal352043 +Node: File Caching358875 +Node: Linker Functions360793 +Node: Creating a Linker Hash Table362467 +Node: Adding Symbols to the Hash Table364206 +Node: Differing file formats365106 +Node: Adding symbols from an object file366831 +Node: Adding symbols from an archive368981 +Node: Performing the Final Link371327 +Node: Information provided by the linker372568 +Node: Relocating the section contents373722 +Node: Writing the symbol table375474 +Node: Hash Tables382628 +Node: Creating and Freeing a Hash Table383826 +Node: Looking Up or Entering a String385076 +Node: Traversing a Hash Table386329 +Node: Deriving a New Hash Table Type387118 +Node: Define the Derived Structures388184 +Node: Write the Derived Creation Routine389265 +Node: Write Other Derived Routines391890 +Node: BFD back ends393205 +Node: What to Put Where393475 +Node: aout393655 +Node: coff399937 +Node: elf428088 +Node: mmo428489 +Node: File layout429359 +Node: Symbol-table435272 +Node: mmo section mapping439035 +Node: GNU Free Documentation License442689 +Node: BFD Index467753  End Tag Table + + +Local Variables: +coding: utf-8 +End: diff -Nru gdb-9.1/bfd/doc/bfdint.texi gdb-10.2/bfd/doc/bfdint.texi --- gdb-9.1/bfd/doc/bfdint.texi 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/doc/bfdint.texi 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ \input texinfo -@c Copyright (C) 1988-2019 Free Software Foundation, Inc. +@c Copyright (C) 1988-2020 Free Software Foundation, Inc. @setfilename bfdint.info @settitle BFD Internals @@ -14,7 +14,7 @@ @copying This file documents the internals of the BFD library. -Copyright @copyright{} 1988-2019 Free Software Foundation, Inc. +Copyright @copyright{} 1988-2020 Free Software Foundation, Inc. Contributed by Cygnus Support. Permission is granted to copy, distribute and/or modify this document diff -Nru gdb-9.1/bfd/doc/bfdio.texi gdb-10.2/bfd/doc/bfdio.texi --- gdb-9.1/bfd/doc/bfdio.texi 2020-02-08 12:53:25.000000000 +0000 +++ gdb-10.2/bfd/doc/bfdio.texi 2021-04-25 04:09:39.000000000 +0000 @@ -80,6 +80,8 @@ This function at least allows us to answer the question, "is the size reasonable?". +A return value of zero indicates the file size is unknown. + @findex bfd_get_file_size @subsubsection @code{bfd_get_file_size} @strong{Synopsis} diff -Nru gdb-9.1/bfd/doc/bfdsumm.texi gdb-10.2/bfd/doc/bfdsumm.texi --- gdb-9.1/bfd/doc/bfdsumm.texi 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/doc/bfdsumm.texi 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ @c This summary of BFD is shared by the BFD and LD docs. -@c Copyright (C) 2012-2019 Free Software Foundation, Inc. +@c Copyright (C) 2012-2020 Free Software Foundation, Inc. When an object file is opened, BFD subroutines automatically determine the format of the input object file. They then build a descriptor in diff -Nru gdb-9.1/bfd/doc/bfd.texi gdb-10.2/bfd/doc/bfd.texi --- gdb-9.1/bfd/doc/bfd.texi 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/doc/bfd.texi 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ \input texinfo.tex @setfilename bfd.info -@c Copyright (C) 1988-2019 Free Software Foundation, Inc. +@c Copyright (C) 1988-2020 Free Software Foundation, Inc. @c @synindex fn cp @@ -14,7 +14,7 @@ @copying This file documents the BFD library. -Copyright @copyright{} 1991-2019 Free Software Foundation, Inc. +Copyright @copyright{} 1991-2020 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or @@ -62,7 +62,7 @@ @end tex @vskip 0pt plus 1filll -Copyright @copyright{} 1991-2019 Free Software Foundation, Inc. +Copyright @copyright{} 1991-2020 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 diff -Nru gdb-9.1/bfd/doc/bfdt.texi gdb-10.2/bfd/doc/bfdt.texi --- gdb-9.1/bfd/doc/bfdt.texi 2020-02-08 12:53:25.000000000 +0000 +++ gdb-10.2/bfd/doc/bfdt.texi 2021-04-25 04:09:39.000000000 +0000 @@ -60,12 +60,6 @@ /* A unique identifier of the BFD */ unsigned int id; - /* The format which belongs to the BFD. (object, core, etc.) */ - ENUM_BITFIELD (bfd_format) format : 3; - - /* The direction with which the BFD was opened. */ - ENUM_BITFIELD (bfd_direction) direction : 2; - /* Format_specific flags. */ flagword flags; @@ -169,6 +163,12 @@ | BFD_PLUGIN | BFD_TRADITIONAL_FORMAT | BFD_DETERMINISTIC_OUTPUT \ | BFD_COMPRESS_GABI | BFD_CONVERT_ELF_COMMON | BFD_USE_ELF_STT_COMMON) + /* The format which belongs to the BFD. (object, core, etc.) */ + ENUM_BITFIELD (bfd_format) format : 3; + + /* The direction with which the BFD was opened. */ + ENUM_BITFIELD (bfd_direction) direction : 2; + /* Is the file descriptor being cached? That is, can it be closed as needed, and re-opened when accessed later? */ unsigned int cacheable : 1; @@ -220,13 +220,16 @@ /* Set if this is a slim LTO object not loaded with a compiler plugin. */ unsigned int lto_slim_object : 1; + /* Do not attempt to modify this file. Set when detecting errors + that BFD is not prepared to handle for objcopy/strip. */ + unsigned int read_only : 1; + /* Set to dummy BFD created when claimed by a compiler plug-in library. */ bfd *plugin_dummy_bfd; - /* Currently my_archive is tested before adding origin to - anything. I believe that this can become always an add of - origin, with origin set to 0 for non archive files. */ + /* The offset of this bfd in the file, typically 0 if it is not + contained in an archive. */ ufile_ptr origin; /* The origin in the archive of the proxy entry. This will @@ -258,7 +261,7 @@ /* Symbol table for output BFD (with symcount entries). Also used by the linker to cache input BFD symbols. */ - struct bfd_symbol **outsymbols; + struct bfd_symbol **outsymbols; /* Used for input and output. */ unsigned int symcount; @@ -269,6 +272,11 @@ /* Pointer to structure which contains architecture information. */ const struct bfd_arch_info *arch_info; + /* Cached length of file for bfd_get_size. 0 until bfd_get_size is + called, 1 if stat returns an error or the file size is too large to + return in ufile_ptr. Both 0 and 1 should be treated as "unknown". */ + ufile_ptr size; + /* Stuff only useful for archives. */ void *arelt_data; struct bfd *my_archive; /* The containing archive BFD. */ @@ -1009,7 +1017,8 @@ BFD_SEND (abfd, _bfd_debug_info_accumulate, (abfd, section)) #define bfd_stat_arch_elt(abfd, stat) \ - BFD_SEND (abfd, _bfd_stat_arch_elt,(abfd, stat)) + BFD_SEND (abfd->my_archive ? abfd->my_archive : abfd, \ + _bfd_stat_arch_elt, (abfd, stat)) #define bfd_update_armap_timestamp(abfd) \ BFD_SEND (abfd, _bfd_update_armap_timestamp, (abfd)) diff -Nru gdb-9.1/bfd/doc/bfdver.texi gdb-10.2/bfd/doc/bfdver.texi --- gdb-9.1/bfd/doc/bfdver.texi 2020-02-08 12:53:25.000000000 +0000 +++ gdb-10.2/bfd/doc/bfdver.texi 2021-04-25 04:09:39.000000000 +0000 @@ -1,4 +1,4 @@ -@set VERSION 2.33.50 +@set VERSION 2.35.50 @set VERSION_PACKAGE (GNU Binutils) -@set UPDATED February 2020 +@set UPDATED April 2021 @set BUGURL @uref{http://www.sourceware.org/bugzilla/} diff -Nru gdb-9.1/bfd/doc/chew.c gdb-10.2/bfd/doc/chew.c --- gdb-9.1/bfd/doc/chew.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/doc/chew.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* chew - Copyright (C) 1990-2019 Free Software Foundation, Inc. + Copyright (C) 1990-2020 Free Software Foundation, Inc. Contributed by steve chamberlain @cygnus This file is part of BFD, the Binary File Descriptor library. @@ -170,8 +170,7 @@ delete_string (buffer) string_type *buffer; { - if (buffer->ptr) - free (buffer->ptr); + free (buffer->ptr); buffer->ptr = NULL; } @@ -1258,8 +1257,7 @@ { dict_type *next; - if (ptr->word) - free (ptr->word); + free (ptr->word); if (ptr->code) { int i; @@ -1443,8 +1441,7 @@ fprintf (stderr, "syntax error at %s\n", string - 1); } } - if (word) - free (word); + free (word); } static void diff -Nru gdb-9.1/bfd/doc/libbfd.texi gdb-10.2/bfd/doc/libbfd.texi --- gdb-9.1/bfd/doc/libbfd.texi 2020-02-08 12:53:25.000000000 +0000 +++ gdb-10.2/bfd/doc/libbfd.texi 2021-04-25 04:09:39.000000000 +0000 @@ -96,7 +96,7 @@ BFD_SEND (abfd, bfd_getx_signed_64, (ptr)) #define bfd_get(bits, abfd, ptr) \ - ((bits) == 8 ? (bfd_vma) bfd_get_8 (abfd, ptr) \ + ((bits) == 8 ? bfd_get_8 (abfd, ptr) \ : (bits) == 16 ? bfd_get_16 (abfd, ptr) \ : (bits) == 32 ? bfd_get_32 (abfd, ptr) \ : (bits) == 64 ? bfd_get_64 (abfd, ptr) \ diff -Nru gdb-9.1/bfd/doc/Makefile.am gdb-10.2/bfd/doc/Makefile.am --- gdb-9.1/bfd/doc/Makefile.am 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/doc/Makefile.am 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ ## Process this file with automake to generate Makefile.in # -# Copyright (C) 2012-2019 Free Software Foundation, Inc. +# Copyright (C) 2012-2020 Free Software Foundation, Inc. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/bfd/doc/Makefile.in gdb-10.2/bfd/doc/Makefile.in --- gdb-9.1/bfd/doc/Makefile.in 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/doc/Makefile.in 2021-04-25 04:06:26.000000000 +0000 @@ -15,7 +15,7 @@ @SET_MAKE@ # -# Copyright (C) 2012-2019 Free Software Foundation, Inc. +# Copyright (C) 2012-2020 Free Software Foundation, Inc. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -272,6 +272,7 @@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ +LARGEFILE_CPPFLAGS = @LARGEFILE_CPPFLAGS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBINTL = @LIBINTL@ diff -Nru gdb-9.1/bfd/doc/makefile.vms gdb-10.2/bfd/doc/makefile.vms --- gdb-9.1/bfd/doc/makefile.vms 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/doc/makefile.vms 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2012-2019 Free Software Foundation, Inc. +# Copyright (C) 2012-2020 Free Software Foundation, Inc. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/bfd/doc/opncls.texi gdb-10.2/bfd/doc/opncls.texi --- gdb-9.1/bfd/doc/opncls.texi 2020-02-08 12:53:25.000000000 +0000 +++ gdb-10.2/bfd/doc/opncls.texi 2021-04-25 04:09:39.000000000 +0000 @@ -265,16 +265,6 @@ Allocate a block of @var{wanted} bytes of memory attached to @code{abfd} and return a pointer to it. -@findex bfd_alloc2 -@subsubsection @code{bfd_alloc2} -@strong{Synopsis} -@example -void *bfd_alloc2 (bfd *abfd, bfd_size_type nmemb, bfd_size_type size); -@end example -@strong{Description}@* -Allocate a block of @var{nmemb} elements of @var{size} bytes each -of memory attached to @code{abfd} and return a pointer to it. - @findex bfd_zalloc @subsubsection @code{bfd_zalloc} @strong{Synopsis} @@ -285,16 +275,6 @@ Allocate a block of @var{wanted} bytes of zeroed memory attached to @code{abfd} and return a pointer to it. -@findex bfd_zalloc2 -@subsubsection @code{bfd_zalloc2} -@strong{Synopsis} -@example -void *bfd_zalloc2 (bfd *abfd, bfd_size_type nmemb, bfd_size_type size); -@end example -@strong{Description}@* -Allocate a block of @var{nmemb} elements of @var{size} bytes each -of zeroed memory attached to @code{abfd} and return a pointer to it. - @findex bfd_calc_gnu_debuglink_crc32 @subsubsection @code{bfd_calc_gnu_debuglink_crc32} @strong{Synopsis} @@ -578,10 +558,10 @@ @subsubsection @code{bfd_set_filename} @strong{Synopsis} @example -void bfd_set_filename (bfd *abfd, char *filename); +const char *bfd_set_filename (bfd *abfd, const char *filename); @end example @strong{Description}@* -Set the filename of @var{abfd}. The old filename, if any, is freed. -@var{filename} must be allocated using @code{xmalloc}. After -this call, it is owned @var{abfd}. +Set the filename of @var{abfd}, copying the FILENAME parameter to +bfd_alloc'd memory owned by @var{abfd}. Returns a pointer the +newly allocated name, or NULL if the allocation failed. diff -Nru gdb-9.1/bfd/doc/reloc.texi gdb-10.2/bfd/doc/reloc.texi --- gdb-9.1/bfd/doc/reloc.texi 2020-02-08 12:53:25.000000000 +0000 +++ gdb-10.2/bfd/doc/reloc.texi 2021-04-25 04:09:39.000000000 +0000 @@ -1288,10 +1288,10 @@ @deffnx {} BFD_RELOC_PPC64_DTPREL16_HIGHESTA @deffnx {} BFD_RELOC_PPC64_TPREL34 @deffnx {} BFD_RELOC_PPC64_DTPREL34 -@deffnx {} BFD_RELOC_PPC64_GOT_TLSGD34 -@deffnx {} BFD_RELOC_PPC64_GOT_TLSLD34 -@deffnx {} BFD_RELOC_PPC64_GOT_TPREL34 -@deffnx {} BFD_RELOC_PPC64_GOT_DTPREL34 +@deffnx {} BFD_RELOC_PPC64_GOT_TLSGD_PCREL34 +@deffnx {} BFD_RELOC_PPC64_GOT_TLSLD_PCREL34 +@deffnx {} BFD_RELOC_PPC64_GOT_TPREL_PCREL34 +@deffnx {} BFD_RELOC_PPC64_GOT_DTPREL_PCREL34 @deffnx {} BFD_RELOC_PPC64_TLS_PCREL PowerPC and PowerPC64 thread-local storage relocations. @end deffn @@ -3356,6 +3356,8 @@ @deffnx {} BFD_RELOC_MSP430_ABS_HI16 @deffnx {} BFD_RELOC_MSP430_PREL31 @deffnx {} BFD_RELOC_MSP430_SYM_DIFF +@deffnx {} BFD_RELOC_MSP430_SET_ULEB128 +@deffnx {} BFD_RELOC_MSP430_SUB_ULEB128 msp430 specific relocation codes @end deffn @deffn {} BFD_RELOC_NIOS2_S16 @@ -3469,6 +3471,8 @@ @deffn {} BFD_RELOC_XTENSA_DIFF8 @deffnx {} BFD_RELOC_XTENSA_DIFF16 @deffnx {} BFD_RELOC_XTENSA_DIFF32 +Xtensa relocations for backward compatibility. These have been replaced +by BFD_RELOC_XTENSA_PDIFF and BFD_RELOC_XTENSA_NDIFF. Xtensa relocations to mark the difference of two local symbols. These are only needed to support linker relaxation and can be ignored when not relaxing. The field is set to the value of the difference @@ -3540,9 +3544,46 @@ @deffnx {} BFD_RELOC_XTENSA_TLS_CALL Xtensa TLS relocations. @end deffn +@deffn {} BFD_RELOC_XTENSA_PDIFF8 +@deffnx {} BFD_RELOC_XTENSA_PDIFF16 +@deffnx {} BFD_RELOC_XTENSA_PDIFF32 +@deffnx {} BFD_RELOC_XTENSA_NDIFF8 +@deffnx {} BFD_RELOC_XTENSA_NDIFF16 +@deffnx {} BFD_RELOC_XTENSA_NDIFF32 +Xtensa relocations to mark the difference of two local symbols. +These are only needed to support linker relaxation and can be ignored +when not relaxing. The field is set to the value of the difference +assuming no relaxation. The relocation encodes the position of the +subtracted symbol so the linker can determine whether to adjust the field +value. PDIFF relocations are used for positive differences, NDIFF +relocations are used for negative differences. The difference value +is treated as unsigned with these relocation types, giving full +8/16 value ranges. +@end deffn @deffn {} BFD_RELOC_Z80_DISP8 8 bit signed offset in (ix+d) or (iy+d). @end deffn +@deffn {} BFD_RELOC_Z80_BYTE0 +First 8 bits of multibyte (32, 24 or 16 bit) value. +@end deffn +@deffn {} BFD_RELOC_Z80_BYTE1 +Second 8 bits of multibyte (32, 24 or 16 bit) value. +@end deffn +@deffn {} BFD_RELOC_Z80_BYTE2 +Third 8 bits of multibyte (32 or 24 bit) value. +@end deffn +@deffn {} BFD_RELOC_Z80_BYTE3 +Fourth 8 bits of multibyte (32 bit) value. +@end deffn +@deffn {} BFD_RELOC_Z80_WORD0 +Lowest 16 bits of multibyte (32 or 24 bit) value. +@end deffn +@deffn {} BFD_RELOC_Z80_WORD1 +Highest 16 bits of multibyte (32 or 24 bit) value. +@end deffn +@deffn {} BFD_RELOC_Z80_16_BE +Like BFD_RELOC_16 but big-endian. +@end deffn @deffn {} BFD_RELOC_Z8K_DISP7 DJNZ offset. @end deffn diff -Nru gdb-9.1/bfd/doc/section.texi gdb-10.2/bfd/doc/section.texi --- gdb-9.1/bfd/doc/section.texi 2020-02-08 12:53:25.000000000 +0000 +++ gdb-10.2/bfd/doc/section.texi 2021-04-25 04:09:39.000000000 +0000 @@ -113,6 +113,10 @@ /* A unique sequence number. */ unsigned int id; + /* A unique section number which can be used by assembler to + distinguish different sections with the same section name. */ + unsigned int section_id; + /* Which section in the bfd; 0..n-1 as sections are created in a bfd. */ unsigned int index; @@ -246,6 +250,10 @@ else up the line will take care of it later. */ #define SEC_LINKER_CREATED 0x100000 + /* This section contains a section ID to distinguish different + sections with the same section name. */ +#define SEC_ASSEMBLER_SECTION_ID 0x100000 + /* This section should not be subject to garbage collection. Also set to inform the linker that this section should not be listed in the link map as discarded. */ @@ -495,11 +503,17 @@ /* Early in the link process, map_head and map_tail are used to build a list of input sections attached to an output section. Later, output sections use these fields for a list of bfd_link_order - structs. */ + structs. The linked_to_symbol_name field is for ELF assembler + internal use. */ union @{ struct bfd_link_order *link_order; struct bfd_section *s; + const char *linked_to_symbol_name; @} map_head, map_tail; + /* Points to the output section this section is already assigned to, if any. + This is used when support for non-contiguous memory regions is enabled. */ + struct bfd_section *already_assigned; + @} asection; /* Relax table contains information about instructions which can @@ -633,7 +647,9 @@ static inline bfd_boolean bfd_is_const_section (const asection *sec) @{ - return sec >= bfd_abs_section_ptr && sec <= bfd_ind_section_ptr; + return (sec >= _bfd_std_section + && sec < _bfd_std_section + (sizeof (_bfd_std_section) + / sizeof (_bfd_std_section[0]))); @} /* Return TRUE if input section SEC has been discarded. */ @@ -647,41 +663,42 @@ @} #define BFD_FAKE_SECTION(SEC, SYM, NAME, IDX, FLAGS) \ - /* name, id, index, next, prev, flags, user_set_vma, */ \ - @{ NAME, IDX, 0, NULL, NULL, FLAGS, 0, \ + /* name, id, section_id, index, next, prev, flags, user_set_vma, */ \ + @{ NAME, IDX, 0, 0, NULL, NULL, FLAGS, 0, \ \ - /* linker_mark, linker_has_input, gc_mark, decompress_status, */ \ + /* linker_mark, linker_has_input, gc_mark, decompress_status, */ \ 0, 0, 1, 0, \ \ - /* segment_mark, sec_info_type, use_rela_p, */ \ + /* segment_mark, sec_info_type, use_rela_p, */ \ 0, 0, 0, \ \ - /* sec_flg0, sec_flg1, sec_flg2, sec_flg3, sec_flg4, sec_flg5, */ \ + /* sec_flg0, sec_flg1, sec_flg2, sec_flg3, sec_flg4, sec_flg5, */ \ 0, 0, 0, 0, 0, 0, \ \ - /* vma, lma, size, rawsize, compressed_size, relax, relax_count, */ \ + /* vma, lma, size, rawsize, compressed_size, relax, relax_count, */ \ 0, 0, 0, 0, 0, 0, 0, \ \ - /* output_offset, output_section, alignment_power, */ \ + /* output_offset, output_section, alignment_power, */ \ 0, &SEC, 0, \ \ - /* relocation, orelocation, reloc_count, filepos, rel_filepos, */ \ + /* relocation, orelocation, reloc_count, filepos, rel_filepos, */ \ NULL, NULL, 0, 0, 0, \ \ - /* line_filepos, userdata, contents, lineno, lineno_count, */ \ + /* line_filepos, userdata, contents, lineno, lineno_count, */ \ 0, NULL, NULL, NULL, 0, \ \ /* entsize, kept_section, moving_line_filepos, */ \ - 0, NULL, 0, \ + 0, NULL, 0, \ \ - /* target_index, used_by_bfd, constructor_chain, owner, */ \ + /* target_index, used_by_bfd, constructor_chain, owner, */ \ 0, NULL, NULL, NULL, \ \ - /* symbol, symbol_ptr_ptr, */ \ + /* symbol, symbol_ptr_ptr, */ \ (struct bfd_symbol *) SYM, &SEC.symbol, \ \ - /* map_head, map_tail */ \ - @{ NULL @}, @{ NULL @} \ + /* map_head, map_tail, already_assigned */ \ + @{ NULL @}, @{ NULL @}, NULL \ + \ @} /* We use a macro to initialize the static asymbol structures because diff -Nru gdb-9.1/bfd/doc/targets.texi gdb-10.2/bfd/doc/targets.texi --- gdb-9.1/bfd/doc/targets.texi 2020-02-08 12:53:25.000000000 +0000 +++ gdb-10.2/bfd/doc/targets.texi 2021-04-25 04:09:39.000000000 +0000 @@ -146,6 +146,8 @@ /* Forward declaration. */ typedef struct flag_info flag_info; +typedef void (*bfd_cleanup) (bfd *); + typedef struct bfd_target @{ /* Identifies the kind of target, e.g., SunOS4, Ultrix, etc. */ @@ -210,9 +212,9 @@ /* Format dependent routines: these are vectors of entry points within the target vector structure, one for each format to check. */ - /* Check the format of a file being read. Return a @code{bfd_target *} or zero. */ - const struct bfd_target * - (*_bfd_check_format[bfd_type_end]) (bfd *); + /* Check the format of a file being read. Return a @code{bfd_cleanup} on + success or zero on failure. */ + bfd_cleanup (*_bfd_check_format[bfd_type_end]) (bfd *); /* Set the format of a file being written. */ bfd_boolean (*_bfd_set_format[bfd_type_end]) (bfd *); @@ -362,9 +364,10 @@ #define bfd_get_symbol_info(b,p,e) \ BFD_SEND (b, _bfd_get_symbol_info, (b,p,e)) const char *(*_bfd_get_symbol_version_string) (bfd *, struct bfd_symbol *, + bfd_boolean, bfd_boolean *); -#define bfd_get_symbol_version_string(b,s,h) \ - BFD_SEND (b, _bfd_get_symbol_version_string, (b,s,h)) +#define bfd_get_symbol_version_string(b,s,p,h) \ + BFD_SEND (b, _bfd_get_symbol_version_string, (b,s,p,h)) bfd_boolean (*_bfd_is_local_label_name) (bfd *, const char *); bfd_boolean (*_bfd_is_target_special_symbol) (bfd *, asymbol *); alent * (*_get_lineno) (bfd *, struct bfd_symbol *); diff -Nru gdb-9.1/bfd/dwarf1.c gdb-10.2/bfd/dwarf1.c --- gdb-9.1/bfd/dwarf1.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/dwarf1.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* DWARF 1 find nearest line (_bfd_dwarf1_find_nearest_line). - Copyright (C) 1998-2019 Free Software Foundation, Inc. + Copyright (C) 1998-2020 Free Software Foundation, Inc. Written by Gavin Romig-Koch of Cygnus Solutions (gavin@cygnus.com). @@ -140,7 +140,7 @@ static struct dwarf1_unit* alloc_dwarf1_unit (struct dwarf1_debug* stash) { - bfd_size_type amt = sizeof (struct dwarf1_unit); + size_t amt = sizeof (struct dwarf1_unit); struct dwarf1_unit* x = (struct dwarf1_unit *) bfd_zalloc (stash->abfd, amt); if (x) @@ -158,7 +158,7 @@ static struct dwarf1_func * alloc_dwarf1_func (struct dwarf1_debug* stash, struct dwarf1_unit* aUnit) { - bfd_size_type amt = sizeof (struct dwarf1_func); + size_t amt = sizeof (struct dwarf1_func); struct dwarf1_func* x = (struct dwarf1_func *) bfd_zalloc (stash->abfd, amt); if (x) diff -Nru gdb-9.1/bfd/dwarf2.c gdb-10.2/bfd/dwarf2.c --- gdb-9.1/bfd/dwarf2.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/dwarf2.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* DWARF 2 support. - Copyright (C) 1994-2019 Free Software Foundation, Inc. + Copyright (C) 1994-2020 Free Software Foundation, Inc. Adapted from gdb/dwarf2read.c by Gavin Koch of Cygnus Solutions (gavin@cygnus.com). @@ -130,6 +130,12 @@ /* Length of the loaded .debug_ranges section. */ bfd_size_type dwarf_ranges_size; + /* Pointer to the .debug_rnglists section loaded into memory. */ + bfd_byte *dwarf_rnglists_buffer; + + /* Length of the loaded .debug_rnglists section. */ + bfd_size_type dwarf_rnglists_size; + /* A list of all previously read comp_units. */ struct comp_unit *all_comp_units; @@ -295,12 +301,12 @@ /* This data structure holds the information of an abbrev. */ struct abbrev_info { - unsigned int number; /* Number identifying abbrev. */ - enum dwarf_tag tag; /* DWARF tag. */ - int has_children; /* Boolean. */ - unsigned int num_attrs; /* Number of attributes. */ - struct attr_abbrev *attrs; /* An array of attribute descriptions. */ - struct abbrev_info *next; /* Next in chain. */ + unsigned int number; /* Number identifying abbrev. */ + enum dwarf_tag tag; /* DWARF tag. */ + bfd_boolean has_children; /* TRUE if the abbrev has children. */ + unsigned int num_attrs; /* Number of attributes. */ + struct attr_abbrev * attrs; /* An array of attribute descriptions. */ + struct abbrev_info * next; /* Next in chain. */ }; struct attr_abbrev @@ -327,6 +333,7 @@ { ".debug_pubnames", ".zdebug_pubnames" }, { ".debug_pubtypes", ".zdebug_pubtypes" }, { ".debug_ranges", ".zdebug_ranges" }, + { ".debug_rnglists", ".zdebug_rnglist" }, { ".debug_static_func", ".zdebug_static_func" }, { ".debug_static_vars", ".zdebug_static_vars" }, { ".debug_str", ".zdebug_str", }, @@ -360,6 +367,7 @@ debug_pubnames, debug_pubtypes, debug_ranges, + debug_rnglists, debug_static_func, debug_static_vars, debug_str, @@ -995,7 +1003,7 @@ struct abbrev_info *cur_abbrev; unsigned int abbrev_number, bytes_read, abbrev_name; unsigned int abbrev_form, hash_number; - bfd_size_type amt; + size_t amt; void **slot; struct abbrev_offset_entry ent = { offset, NULL }; @@ -1158,7 +1166,7 @@ bfd *abfd = unit->abfd; unsigned int bytes_read; struct dwarf_block *blk; - bfd_size_type amt; + size_t amt; if (info_ptr >= info_ptr_end && form != DW_FORM_flag_present) { @@ -1329,6 +1337,17 @@ attr->form = DW_FORM_sdata; attr->u.sval = implicit_const; break; + case DW_FORM_data16: + /* This is really a "constant", but there is no way to store that + so pretend it is a 16 byte block instead. */ + amt = sizeof (struct dwarf_block); + blk = (struct dwarf_block *) bfd_alloc (abfd, amt); + if (blk == NULL) + return NULL; + blk->size = 16; + info_ptr = read_n_bytes (info_ptr, info_ptr_end, blk); + attr->u.blk = blk; + break; default: _bfd_error_handler (_("DWARF error: invalid or unhandled FORM value: %#x"), form); @@ -1472,19 +1491,24 @@ struct varinfo { - /* Pointer to previous variable in list of all variables */ + /* Pointer to previous variable in list of all variables. */ struct varinfo *prev_var; - /* Source location file name */ + /* The offset of the varinfo from the start of the unit. */ + bfd_uint64_t unit_offset; + /* Source location file name. */ char *file; - /* Source location line number */ + /* Source location line number. */ int line; + /* The type of this variable. */ int tag; + /* The name of the variable, if it has one. */ char *name; + /* The address of the variable. */ bfd_vma addr; - /* Where the symbol is defined */ + /* Where the symbol is defined. */ asection *sec; - /* Is this a stack variable? */ - unsigned int stack: 1; + /* Is this a stack variable? */ + bfd_boolean stack; }; /* Return TRUE if NEW_LINE should sort after LINE. */ @@ -1513,7 +1537,7 @@ unsigned int discriminator, int end_sequence) { - bfd_size_type amt = sizeof (struct line_info); + size_t amt = sizeof (struct line_info); struct line_sequence* seq = table->sequences; struct line_info* info = (struct line_info *) bfd_alloc (table->abfd, amt); @@ -1782,11 +1806,11 @@ build_line_info_table (struct line_info_table * table, struct line_sequence * seq) { - bfd_size_type amt; - struct line_info** line_info_lookup; - struct line_info* each_line; - unsigned int num_lines; - unsigned int line_index; + size_t amt; + struct line_info **line_info_lookup; + struct line_info *each_line; + unsigned int num_lines; + unsigned int line_index; if (seq->line_info_lookup != NULL) return TRUE; @@ -1824,12 +1848,12 @@ static bfd_boolean sort_line_sequences (struct line_info_table* table) { - bfd_size_type amt; - struct line_sequence* sequences; - struct line_sequence* seq; - unsigned int n = 0; - unsigned int num_sequences = table->num_sequences; - bfd_vma last_high_pc; + size_t amt; + struct line_sequence *sequences; + struct line_sequence *seq; + unsigned int n = 0; + unsigned int num_sequences = table->num_sequences; + bfd_vma last_high_pc; if (num_sequences == 0) return TRUE; @@ -1897,7 +1921,7 @@ if ((table->num_dirs % DIR_ALLOC_CHUNK) == 0) { char **tmp; - bfd_size_type amt; + size_t amt; amt = table->num_dirs + DIR_ALLOC_CHUNK; amt *= sizeof (char *); @@ -1931,7 +1955,7 @@ if ((table->num_files % FILE_ALLOC_CHUNK) == 0) { struct fileinfo *tmp; - bfd_size_type amt; + size_t amt; amt = table->num_files + FILE_ALLOC_CHUNK; amt *= sizeof (struct fileinfo); @@ -2064,11 +2088,17 @@ case DW_FORM_udata: *uintp = attr.u.val; break; + + case DW_FORM_data16: + /* MD5 data is in the attr.blk, but we are ignoring those. */ + break; } } - if (!callback (table, fe.name, fe.dir, fe.time, fe.size)) - return FALSE; + /* Skip the first "zero entry", which is the compilation dir/file. */ + if (datai != 0) + if (!callback (table, fe.name, fe.dir, fe.time, fe.size)) + return FALSE; } *bufp = buf; @@ -2091,7 +2121,7 @@ char *cur_file, *cur_dir; unsigned char op_code, extended_op, adj_opcode; unsigned int exop_len; - bfd_size_type amt; + size_t amt; if (unit->line_offset == 0 && file->line_table) return file->line_table; @@ -2415,8 +2445,7 @@ (_("DWARF error: mangled line number section")); bfd_set_error (bfd_error_bad_value); line_fail: - if (filename != NULL) - free (filename); + free (filename); goto fail; } break; @@ -2461,8 +2490,7 @@ filenum = _bfd_safe_read_leb128 (abfd, line_ptr, &bytes_read, FALSE, line_end); line_ptr += bytes_read; - if (filename) - free (filename); + free (filename); filename = concat_filename (table, filenum); break; } @@ -2508,8 +2536,7 @@ } } - if (filename) - free (filename); + free (filename); } if (unit->line_offset == 0) @@ -2524,10 +2551,8 @@ table->sequences = table->sequences->prev_sequence; free (seq); } - if (table->files != NULL) - free (table->files); - if (table->dirs != NULL) - free (table->dirs); + free (table->files); + free (table->dirs); return NULL; } @@ -2599,7 +2624,7 @@ return seq->last_line->address - seq->low_pc; } -fail: + fail: *filename_ptr = NULL; return 0; } @@ -2617,6 +2642,19 @@ &file->dwarf_ranges_buffer, &file->dwarf_ranges_size); } +/* Read in the .debug_rnglists section for future reference. */ + +static bfd_boolean +read_debug_rnglists (struct comp_unit * unit) +{ + struct dwarf2_debug *stash = unit->stash; + struct dwarf2_debug_file *file = unit->file; + + return read_section (unit->abfd, &stash->debug_sections[debug_rnglists], + file->syms, 0, + &file->dwarf_rnglists_buffer, &file->dwarf_rnglists_size); +} + /* Function table functions. */ static int @@ -2858,7 +2896,7 @@ struct varinfo* each; for (each = unit->variable_table; each; each = each->prev_var) - if (each->stack == 0 + if (! each->stack && each->file != NULL && each->name != NULL && each->addr == addr @@ -3107,8 +3145,8 @@ } static bfd_boolean -read_rangelist (struct comp_unit *unit, struct arange *arange, - bfd_uint64_t offset) +read_ranges (struct comp_unit *unit, struct arange *arange, + bfd_uint64_t offset) { bfd_byte *ranges_ptr; bfd_byte *ranges_end; @@ -3153,6 +3191,121 @@ return TRUE; } +static bfd_boolean +read_rnglists (struct comp_unit *unit, struct arange *arange, + bfd_uint64_t offset) +{ + bfd_byte *rngs_ptr; + bfd_byte *rngs_end; + bfd_vma base_address = unit->base_address; + bfd_vma low_pc; + bfd_vma high_pc; + bfd *abfd = unit->abfd; + + if (! unit->file->dwarf_rnglists_buffer) + { + if (! read_debug_rnglists (unit)) + return FALSE; + } + + rngs_ptr = unit->file->dwarf_rnglists_buffer + offset; + if (rngs_ptr < unit->file->dwarf_rnglists_buffer) + return FALSE; + rngs_end = unit->file->dwarf_rnglists_buffer; + rngs_end += unit->file->dwarf_rnglists_size; + + for (;;) + { + enum dwarf_range_list_entry rlet; + unsigned int bytes_read; + + if (rngs_ptr + 1 > rngs_end) + return FALSE; + + rlet = read_1_byte (abfd, rngs_ptr, rngs_end); + rngs_ptr++; + + switch (rlet) + { + case DW_RLE_end_of_list: + return TRUE; + + case DW_RLE_base_address: + if (rngs_ptr + unit->addr_size > rngs_end) + return FALSE; + base_address = read_address (unit, rngs_ptr, rngs_end); + rngs_ptr += unit->addr_size; + continue; + + case DW_RLE_start_length: + if (rngs_ptr + unit->addr_size > rngs_end) + return FALSE; + low_pc = read_address (unit, rngs_ptr, rngs_end); + rngs_ptr += unit->addr_size; + high_pc = low_pc; + high_pc += _bfd_safe_read_leb128 (abfd, rngs_ptr, &bytes_read, + FALSE, rngs_end); + rngs_ptr += bytes_read; + break; + + case DW_RLE_offset_pair: + low_pc = base_address; + low_pc += _bfd_safe_read_leb128 (abfd, rngs_ptr, &bytes_read, + FALSE, rngs_end); + high_pc = base_address; + high_pc += _bfd_safe_read_leb128 (abfd, rngs_ptr, &bytes_read, + FALSE, rngs_end); + break; + + case DW_RLE_start_end: + if (rngs_ptr + 2 * unit->addr_size > rngs_end) + return FALSE; + low_pc = read_address (unit, rngs_ptr, rngs_end); + rngs_ptr += unit->addr_size; + high_pc = read_address (unit, rngs_ptr, rngs_end); + rngs_ptr += unit->addr_size; + break; + + /* TODO x-variants need .debug_addr support used for split-dwarf. */ + case DW_RLE_base_addressx: + case DW_RLE_startx_endx: + case DW_RLE_startx_length: + default: + return FALSE; + } + + if ((low_pc == 0 && high_pc == 0) || low_pc == high_pc) + return FALSE; + + if (!arange_add (unit, arange, low_pc, high_pc)) + return FALSE; + } +} + +static bfd_boolean +read_rangelist (struct comp_unit *unit, struct arange *arange, + bfd_uint64_t offset) +{ + if (unit->version <= 4) + return read_ranges (unit, arange, offset); + else + return read_rnglists (unit, arange, offset); +} + +static struct varinfo * +lookup_var_by_offset (bfd_uint64_t offset, struct varinfo * table) +{ + while (table) + { + if (table->unit_offset == offset) + return table; + table = table->prev_var; + } + + return NULL; +} + + /* DWARF2 Compilation unit functions. */ /* Scan over each die in a comp. unit looking for functions to add @@ -3189,11 +3342,13 @@ bfd_vma low_pc = 0; bfd_vma high_pc = 0; bfd_boolean high_pc_relative = FALSE; + bfd_uint64_t current_offset; /* PR 17512: file: 9f405d9d. */ if (info_ptr >= info_ptr_end) goto fail; + current_offset = info_ptr - unit->info_ptr_unit; abbrev_number = _bfd_safe_read_leb128 (abfd, info_ptr, &bytes_read, FALSE, info_ptr_end); info_ptr += bytes_read; @@ -3221,12 +3376,13 @@ goto fail; } - var = NULL; if (abbrev->tag == DW_TAG_subprogram || abbrev->tag == DW_TAG_entry_point || abbrev->tag == DW_TAG_inlined_subroutine) { - bfd_size_type amt = sizeof (struct funcinfo); + size_t amt = sizeof (struct funcinfo); + + var = NULL; func = (struct funcinfo *) bfd_zalloc (abfd, amt); if (func == NULL) goto fail; @@ -3248,19 +3404,23 @@ else { func = NULL; - if (abbrev->tag == DW_TAG_variable) + if (abbrev->tag == DW_TAG_variable + || abbrev->tag == DW_TAG_member) { - bfd_size_type amt = sizeof (struct varinfo); + size_t amt = sizeof (struct varinfo); var = (struct varinfo *) bfd_zalloc (abfd, amt); if (var == NULL) goto fail; var->tag = abbrev->tag; - var->stack = 1; + var->stack = TRUE; var->prev_var = unit->variable_table; unit->variable_table = var; + var->unit_offset = current_offset; /* PR 18205: Missing debug information can cause this var to be attached to an already cached unit. */ } + else + var = NULL; /* No inline function in scope at this nesting level. */ nested_funcs[nesting_level].func = 0; @@ -3349,6 +3509,33 @@ { switch (attr.name) { + case DW_AT_specification: + if (attr.u.val) + { + struct varinfo * spec_var; + + spec_var = lookup_var_by_offset (attr.u.val, + unit->variable_table); + if (spec_var == NULL) + { + _bfd_error_handler (_("DWARF error: could not find " + "variable specification " + "at offset %lx"), + (unsigned long) attr.u.val); + break; + } + + if (var->name == NULL) + var->name = spec_var->name; + if (var->file == NULL && spec_var->file != NULL) + var->file = strdup (spec_var->file); + if (var->line == 0) + var->line = spec_var->line; + if (var->sec == NULL) + var->sec = spec_var->sec; + } + break; + case DW_AT_name: if (is_str_attr (attr.form)) var->name = attr.u.str; @@ -3365,7 +3552,7 @@ case DW_AT_external: if (attr.u.val != 0) - var->stack = 0; + var->stack = FALSE; break; case DW_AT_location: @@ -3379,7 +3566,7 @@ if (attr.u.blk->data != NULL && *attr.u.blk->data == DW_OP_addr) { - var->stack = 0; + var->stack = FALSE; /* Verify that DW_OP_addr is the only opcode in the location, in which case the block size will be 1 @@ -3469,7 +3656,7 @@ struct abbrev_info *abbrev; struct attribute attr; bfd_byte *end_ptr = info_ptr + unit_length; - bfd_size_type amt; + size_t amt; bfd_vma low_pc = 0; bfd_vma high_pc = 0; bfd *abfd = file->bfd_ptr; @@ -3875,7 +4062,7 @@ each_var = each_var->prev_var) { /* Skip stack vars and vars with no files or names. */ - if (each_var->stack == 0 + if (! each_var->stack && each_var->file != NULL && each_var->name != NULL) /* There is no need to copy name string into hash table as @@ -4084,7 +4271,7 @@ else { bfd_vma last_vma = 0, last_dwarf = 0; - bfd_size_type amt = i * sizeof (struct adjusted_section); + size_t amt = i * sizeof (struct adjusted_section); p = (struct adjusted_section *) bfd_malloc (amt); if (p == NULL) @@ -4452,7 +4639,7 @@ void **pinfo, bfd_boolean do_place) { - bfd_size_type amt = sizeof (struct dwarf2_debug); + size_t amt = sizeof (struct dwarf2_debug); bfd_size_type total_size; asection *msec; struct dwarf2_debug *stash = (struct dwarf2_debug *) *pinfo; @@ -5094,34 +5281,22 @@ free (each->line_table->dirs); } - if (each->lookup_funcinfo_table) - { - free (each->lookup_funcinfo_table); - each->lookup_funcinfo_table = NULL; - } + free (each->lookup_funcinfo_table); + each->lookup_funcinfo_table = NULL; while (function_table) { - if (function_table->file) - { - free (function_table->file); - function_table->file = NULL; - } - if (function_table->caller_file) - { - free (function_table->caller_file); - function_table->caller_file = NULL; - } + free (function_table->file); + function_table->file = NULL; + free (function_table->caller_file); + function_table->caller_file = NULL; function_table = function_table->prev_func; } while (variable_table) { - if (variable_table->file) - { - free (variable_table->file); - variable_table->file = NULL; - } + free (variable_table->file); + variable_table->file = NULL; variable_table = variable_table->prev_var; } } diff -Nru gdb-9.1/bfd/ecoff-bfd.h gdb-10.2/bfd/ecoff-bfd.h --- gdb-9.1/bfd/ecoff-bfd.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/ecoff-bfd.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Externally visible ECOFF routines. - Copyright (C) 2019 Free Software Foundation, Inc. + Copyright (C) 2019-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/ecoff.c gdb-10.2/bfd/ecoff.c --- gdb-9.1/bfd/ecoff.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/ecoff.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Generic ECOFF (Extended-COFF) routines. - Copyright (C) 1990-2019 Free Software Foundation, Inc. + Copyright (C) 1990-2020 Free Software Foundation, Inc. Original version by Per Bothner. Full support added by Ian Lance Taylor, ian@cygnus.com. @@ -52,8 +52,10 @@ /* This stuff is somewhat copied from coffcode.h. */ static asection bfd_debug_section = { - /* name, id, index, next, prev, flags, user_set_vma, */ - "*DEBUG*", 0, 0, NULL, NULL, 0, 0, + /* name, id, section_id, index, next, prev, flags, */ + "*DEBUG*", 0, 0, 0, NULL, NULL, 0, + /* user_set_vma, */ + 0, /* linker_mark, linker_has_input, gc_mark, compress_status, */ 0, 0, 1, 0, /* segment_mark, sec_info_type, use_rela_p, */ @@ -76,8 +78,10 @@ NULL, /* symbol_ptr_ptr, */ NULL, - /* map_head, map_tail */ - { NULL }, { NULL } + /* map_head, map_tail, */ + { NULL }, { NULL }, + /* already_assigned */ + NULL, }; /* Create an ECOFF object. */ @@ -85,7 +89,7 @@ bfd_boolean _bfd_ecoff_mkobject (bfd *abfd) { - bfd_size_type amt = sizeof (ecoff_data_type); + size_t amt = sizeof (ecoff_data_type); abfd->tdata.ecoff_obj_data = (struct ecoff_tdata *) bfd_zalloc (abfd, amt); if (abfd->tdata.ecoff_obj_data == NULL) @@ -154,14 +158,14 @@ { _INIT, SEC_ALLOC | SEC_CODE | SEC_LOAD }, { _FINI, SEC_ALLOC | SEC_CODE | SEC_LOAD }, { _DATA, SEC_ALLOC | SEC_DATA | SEC_LOAD }, - { _SDATA, SEC_ALLOC | SEC_DATA | SEC_LOAD }, + { _SDATA, SEC_ALLOC | SEC_DATA | SEC_LOAD | SEC_SMALL_DATA }, { _RDATA, SEC_ALLOC | SEC_DATA | SEC_LOAD | SEC_READONLY}, - { _LIT8, SEC_ALLOC | SEC_DATA | SEC_LOAD | SEC_READONLY}, - { _LIT4, SEC_ALLOC | SEC_DATA | SEC_LOAD | SEC_READONLY}, + { _LIT8, SEC_ALLOC | SEC_DATA | SEC_LOAD | SEC_READONLY | SEC_SMALL_DATA}, + { _LIT4, SEC_ALLOC | SEC_DATA | SEC_LOAD | SEC_READONLY | SEC_SMALL_DATA}, { _RCONST, SEC_ALLOC | SEC_DATA | SEC_LOAD | SEC_READONLY}, { _PDATA, SEC_ALLOC | SEC_DATA | SEC_LOAD | SEC_READONLY}, { _BSS, SEC_ALLOC}, - { _SBSS, SEC_ALLOC}, + { _SBSS, SEC_ALLOC | SEC_SMALL_DATA}, /* An Irix 4 shared libary. */ { _LIB, SEC_COFF_SHARED_LIBRARY} }; @@ -410,16 +414,19 @@ || styp_flags == STYP_PDATA || styp_flags == STYP_RCONST) sec_flags |= SEC_READONLY; + if (styp_flags & STYP_SDATA) + sec_flags |= SEC_SMALL_DATA; } - else if ((styp_flags & STYP_BSS) - || (styp_flags & STYP_SBSS)) + else if (styp_flags & STYP_SBSS) + sec_flags |= SEC_ALLOC | SEC_SMALL_DATA; + else if (styp_flags & STYP_BSS) sec_flags |= SEC_ALLOC; else if ((styp_flags & STYP_INFO) || styp_flags == STYP_COMMENT) sec_flags |= SEC_NEVER_LOAD; else if ((styp_flags & STYP_LITA) || (styp_flags & STYP_LIT8) || (styp_flags & STYP_LIT4)) - sec_flags |= SEC_DATA | SEC_LOAD | SEC_ALLOC | SEC_READONLY; + sec_flags |= SEC_DATA |SEC_SMALL_DATA | SEC_LOAD | SEC_ALLOC | SEC_READONLY; else if (styp_flags & STYP_ECOFF_LIB) sec_flags |= SEC_COFF_SHARED_LIBRARY; else @@ -463,13 +470,12 @@ } /* Read the symbolic information header. */ - raw = bfd_malloc (external_hdr_size); + if (bfd_seek (abfd, ecoff_data (abfd)->sym_filepos, SEEK_SET) != 0) + goto error_return; + raw = _bfd_malloc_and_read (abfd, external_hdr_size, external_hdr_size); if (raw == NULL) goto error_return; - if (bfd_seek (abfd, ecoff_data (abfd)->sym_filepos, SEEK_SET) != 0 - || bfd_bread (raw, external_hdr_size, abfd) != external_hdr_size) - goto error_return; internal_symhdr = &ecoff_data (abfd)->debug_info.symbolic_header; (*backend->debug_swap.swap_hdr_in) (abfd, raw, internal_symhdr); @@ -482,12 +488,10 @@ /* Now we can get the correct number of symbols. */ abfd->symcount = internal_symhdr->isymMax + internal_symhdr->iextMax; - if (raw != NULL) - free (raw); + free (raw); return TRUE; error_return: - if (raw != NULL) - free (raw); + free (raw); return FALSE; } @@ -512,6 +516,7 @@ bfd_size_type raw_end; bfd_size_type cb_end; file_ptr pos; + size_t amt; BFD_ASSERT (debug == &ecoff_data (abfd)->debug_info); @@ -568,18 +573,13 @@ ecoff_data (abfd)->sym_filepos = 0; return TRUE; } - raw = bfd_alloc (abfd, raw_size); - if (raw == NULL) - return FALSE; - pos = ecoff_data (abfd)->sym_filepos; pos += backend->debug_swap.external_hdr_size; - if (bfd_seek (abfd, pos, SEEK_SET) != 0 - || bfd_bread (raw, raw_size, abfd) != raw_size) - { - bfd_release (abfd, raw); - return FALSE; - } + if (bfd_seek (abfd, pos, SEEK_SET) != 0) + return FALSE; + raw = _bfd_alloc_and_read (abfd, raw_size, raw_size); + if (raw == NULL) + return FALSE; ecoff_data (abfd)->raw_syments = raw; @@ -613,8 +613,13 @@ We need to look at the fdr to deal with a lot of information in the symbols, so we swap them here. */ - debug->fdr = (FDR *) bfd_alloc2 (abfd, internal_symhdr->ifdMax, - sizeof (struct fdr)); + if (_bfd_mul_overflow ((unsigned long) internal_symhdr->ifdMax, + sizeof (struct fdr), &amt)) + { + bfd_set_error (bfd_error_file_too_big); + return FALSE; + } + debug->fdr = (FDR *) bfd_alloc (abfd, amt); if (debug->fdr == NULL) return FALSE; external_fdr_size = backend->debug_swap.external_fdr_size; @@ -648,7 +653,7 @@ _bfd_ecoff_make_empty_symbol (bfd *abfd) { ecoff_symbol_type *new_symbol; - bfd_size_type amt = sizeof (ecoff_symbol_type); + size_t amt = sizeof (ecoff_symbol_type); new_symbol = (ecoff_symbol_type *) bfd_zalloc (abfd, amt); if (new_symbol == NULL) @@ -786,7 +791,7 @@ { /* Initialize the small common section. */ ecoff_scom_section.name = SCOMMON; - ecoff_scom_section.flags = SEC_IS_COMMON; + ecoff_scom_section.flags = SEC_IS_COMMON | SEC_SMALL_DATA; ecoff_scom_section.output_section = &ecoff_scom_section; ecoff_scom_section.symbol = &ecoff_scom_symbol; ecoff_scom_section.symbol_ptr_ptr = &ecoff_scom_symbol_ptr; @@ -870,6 +875,7 @@ char *eraw_end; FDR *fdr_ptr; FDR *fdr_end; + size_t amt; /* If we've already read in the symbol table, do nothing. */ if (ecoff_data (abfd)->canonical_symbols != NULL) @@ -882,8 +888,13 @@ if (bfd_get_symcount (abfd) == 0) return TRUE; - internal = (ecoff_symbol_type *) bfd_alloc2 (abfd, bfd_get_symcount (abfd), - sizeof (ecoff_symbol_type)); + if (_bfd_mul_overflow (bfd_get_symcount (abfd), + sizeof (ecoff_symbol_type), &amt)) + { + bfd_set_error (bfd_error_file_too_big); + return FALSE; + } + internal = (ecoff_symbol_type *) bfd_alloc (abfd, amt); if (internal == NULL) return FALSE; @@ -1597,7 +1608,7 @@ arelent *internal_relocs; bfd_size_type external_reloc_size; bfd_size_type amt; - char *external_relocs; + bfd_byte *external_relocs; arelent *rptr; unsigned int i; @@ -1609,20 +1620,23 @@ if (! _bfd_ecoff_slurp_symbol_table (abfd)) return FALSE; - amt = section->reloc_count; - amt *= sizeof (arelent); - internal_relocs = (arelent *) bfd_alloc (abfd, amt); - external_reloc_size = backend->external_reloc_size; amt = external_reloc_size * section->reloc_count; - external_relocs = (char *) bfd_alloc (abfd, amt); - if (internal_relocs == NULL || external_relocs == NULL) - return FALSE; if (bfd_seek (abfd, section->rel_filepos, SEEK_SET) != 0) return FALSE; - if (bfd_bread (external_relocs, amt, abfd) != amt) + external_relocs = _bfd_malloc_and_read (abfd, amt, amt); + if (external_relocs == NULL) return FALSE; + amt = section->reloc_count; + amt *= sizeof (arelent); + internal_relocs = (arelent *) bfd_alloc (abfd, amt); + if (internal_relocs == NULL) + { + free (external_relocs); + return FALSE; + } + for (i = 0, rptr = internal_relocs; i < section->reloc_count; i++, rptr++) { struct internal_reloc intern; @@ -1687,7 +1701,7 @@ (*backend->adjust_reloc_in) (abfd, &intern, rptr); } - bfd_release (abfd, external_relocs); + free (external_relocs); section->relocation = internal_relocs; @@ -1760,7 +1774,7 @@ if (ecoff_data (abfd)->find_line_info == NULL) { - bfd_size_type amt = sizeof (struct ecoff_find_line); + size_t amt = sizeof (struct ecoff_find_line); ecoff_data (abfd)->find_line_info = (struct ecoff_find_line *) bfd_zalloc (abfd, amt); @@ -2781,14 +2795,12 @@ if (reloc_buff != NULL) bfd_release (abfd, reloc_buff); - if (buff != NULL) - free (buff); + free (buff); return TRUE; error_return: if (reloc_buff != NULL) bfd_release (abfd, reloc_buff); - if (buff != NULL) - free (buff); + free (buff); return FALSE; } @@ -2867,7 +2879,7 @@ char nextname[17]; unsigned int i; struct areltdata *mapdata; - bfd_size_type parsed_size; + bfd_size_type parsed_size, stringsize; char *raw_armap; struct artdata *ardata; unsigned int count; @@ -2879,9 +2891,9 @@ /* Get the name of the first element. */ i = bfd_bread ((void *) nextname, (bfd_size_type) 16, abfd); if (i == 0) - return TRUE; + return TRUE; if (i != 16) - return FALSE; + return FALSE; if (bfd_seek (abfd, (file_ptr) -16, SEEK_CUR) != 0) return FALSE; @@ -2926,21 +2938,22 @@ parsed_size = mapdata->parsed_size; free (mapdata); - raw_armap = (char *) bfd_alloc (abfd, parsed_size); - if (raw_armap == NULL) - return FALSE; - - if (bfd_bread ((void *) raw_armap, parsed_size, abfd) != parsed_size) + if (parsed_size + 1 < 9) { - if (bfd_get_error () != bfd_error_system_call) - bfd_set_error (bfd_error_malformed_archive); - bfd_release (abfd, (void *) raw_armap); + bfd_set_error (bfd_error_malformed_archive); return FALSE; } + raw_armap = (char *) _bfd_alloc_and_read (abfd, parsed_size + 1, parsed_size); + if (raw_armap == NULL) + return FALSE; + raw_armap[parsed_size] = 0; + ardata->tdata = (void *) raw_armap; count = H_GET_32 (abfd, raw_armap); + if ((parsed_size - 8) / 8 < count) + goto error_malformed; ardata->symdef_count = 0; ardata->cache = NULL; @@ -2948,6 +2961,7 @@ /* This code used to overlay the symdefs over the raw archive data, but that doesn't work on a 64 bit host. */ stringbase = raw_armap + count * 8 + 8; + stringsize = parsed_size - (count * 8 + 8); #ifdef CHECK_ARMAP_HASH { @@ -2995,7 +3009,7 @@ amt *= sizeof (carsym); symdef_ptr = (carsym *) bfd_alloc (abfd, amt); if (!symdef_ptr) - return FALSE; + goto error_exit; ardata->symdefs = symdef_ptr; @@ -3008,6 +3022,8 @@ if (file_offset == 0) continue; name_offset = H_GET_32 (abfd, raw_ptr); + if (name_offset > stringsize) + goto error_malformed; symdef_ptr->name = stringbase + name_offset; symdef_ptr->file_offset = file_offset; ++symdef_ptr; @@ -3016,10 +3032,17 @@ ardata->first_file_filepos = bfd_tell (abfd); /* Pad to an even boundary. */ ardata->first_file_filepos += ardata->first_file_filepos % 2; - abfd->has_armap = TRUE; - return TRUE; + + error_malformed: + bfd_set_error (bfd_error_malformed_archive); + error_exit: + ardata->symdef_count = 0; + ardata->symdefs = NULL; + ardata->tdata = NULL; + bfd_release (abfd, raw_armap); + return FALSE; } /* Write out an armap. */ @@ -3079,7 +3102,7 @@ complain that the index is out of date. Actually, the Ultrix linker just checks the archive name; the GNU linker may check the date. */ - stat (abfd->filename, &statbuf); + stat (bfd_get_filename (abfd), &statbuf); _bfd_ar_spacepad (hdr.ar_date, sizeof (hdr.ar_date), "%ld", (long) (statbuf.st_mtime + 60)); @@ -3228,7 +3251,7 @@ _bfd_ecoff_bfd_link_hash_table_create (bfd *abfd) { struct ecoff_link_hash_table *ret; - bfd_size_type amt = sizeof (struct ecoff_link_hash_table); + size_t amt = sizeof (struct ecoff_link_hash_table); ret = (struct ecoff_link_hash_table *) bfd_malloc (amt); if (ret == NULL) @@ -3381,7 +3404,7 @@ { /* Initialize the small common section. */ ecoff_scom_section.name = SCOMMON; - ecoff_scom_section.flags = SEC_IS_COMMON; + ecoff_scom_section.flags = SEC_IS_COMMON | SEC_SMALL_DATA; ecoff_scom_section.output_section = &ecoff_scom_section; ecoff_scom_section.symbol = &ecoff_scom_symbol; ecoff_scom_section.symbol_ptr_ptr = &ecoff_scom_symbol_ptr; @@ -3484,38 +3507,30 @@ symhdr = &ecoff_data (abfd)->debug_info.symbolic_header; /* Read in the external symbols and external strings. */ + if (bfd_seek (abfd, symhdr->cbExtOffset, SEEK_SET) != 0) + return FALSE; external_ext_size = ecoff_backend (abfd)->debug_swap.external_ext_size; esize = symhdr->iextMax * external_ext_size; - external_ext = bfd_malloc (esize); + external_ext = _bfd_malloc_and_read (abfd, esize, esize); if (external_ext == NULL && esize != 0) goto error_return; - if (bfd_seek (abfd, (file_ptr) symhdr->cbExtOffset, SEEK_SET) != 0 - || bfd_bread (external_ext, esize, abfd) != esize) + if (bfd_seek (abfd, symhdr->cbSsExtOffset, SEEK_SET) != 0) goto error_return; - - ssext = (char *) bfd_malloc ((bfd_size_type) symhdr->issExtMax); + ssext = (char *) _bfd_malloc_and_read (abfd, symhdr->issExtMax, + symhdr->issExtMax); if (ssext == NULL && symhdr->issExtMax != 0) goto error_return; - if (bfd_seek (abfd, (file_ptr) symhdr->cbSsExtOffset, SEEK_SET) != 0 - || (bfd_bread (ssext, (bfd_size_type) symhdr->issExtMax, abfd) - != (bfd_size_type) symhdr->issExtMax)) - goto error_return; - result = ecoff_link_add_externals (abfd, info, external_ext, ssext); - if (ssext != NULL) - free (ssext); - if (external_ext != NULL) - free (external_ext); + free (ssext); + free (external_ext); return result; error_return: - if (ssext != NULL) - free (ssext); - if (external_ext != NULL) - free (external_ext); + free (ssext); + free (external_ext); return FALSE; } @@ -3743,25 +3758,31 @@ HDRR *symhdr = &debug->symbolic_header; bfd_boolean ret; -#define READ(ptr, offset, count, size, type) \ - if (symhdr->count == 0) \ - debug->ptr = NULL; \ - else \ - { \ - bfd_size_type amt = (bfd_size_type) size * symhdr->count; \ - debug->ptr = (type) bfd_malloc (amt); \ - if (debug->ptr == NULL) \ - { \ - ret = FALSE; \ - goto return_something; \ - } \ - if (bfd_seek (input_bfd, (file_ptr) symhdr->offset, SEEK_SET) != 0 \ - || bfd_bread (debug->ptr, amt, input_bfd) != amt) \ - { \ - ret = FALSE; \ - goto return_something; \ - } \ - } +#define READ(ptr, offset, count, size, type) \ + do \ + { \ + size_t amt; \ + debug->ptr = NULL; \ + if (symhdr->count == 0) \ + break; \ + if (_bfd_mul_overflow (size, symhdr->count, &amt)) \ + { \ + bfd_set_error (bfd_error_file_too_big); \ + ret = FALSE; \ + goto return_something; \ + } \ + if (bfd_seek (input_bfd, symhdr->offset, SEEK_SET) != 0) \ + { \ + ret = FALSE; \ + goto return_something; \ + } \ + debug->ptr = (type) _bfd_malloc_and_read (input_bfd, amt, amt); \ + if (debug->ptr == NULL) \ + { \ + ret = FALSE; \ + goto return_something; \ + } \ + } while (0) /* If raw_syments is not NULL, then the data was already by read by _bfd_ecoff_slurp_symbolic_info. */ @@ -3791,24 +3812,15 @@ return_something: if (ecoff_data (input_bfd)->raw_syments == NULL) { - if (debug->line != NULL) - free (debug->line); - if (debug->external_dnr != NULL) - free (debug->external_dnr); - if (debug->external_pdr != NULL) - free (debug->external_pdr); - if (debug->external_sym != NULL) - free (debug->external_sym); - if (debug->external_opt != NULL) - free (debug->external_opt); - if (debug->external_aux != NULL) - free (debug->external_aux); - if (debug->ss != NULL) - free (debug->ss); - if (debug->external_fdr != NULL) - free (debug->external_fdr); - if (debug->external_rfd != NULL) - free (debug->external_rfd); + free (debug->line); + free (debug->external_dnr); + free (debug->external_pdr); + free (debug->external_sym); + free (debug->external_opt); + free (debug->external_aux); + free (debug->ss); + free (debug->external_fdr); + free (debug->external_rfd); /* Make sure we don't accidentally follow one of these pointers into freed memory. */ @@ -3861,13 +3873,11 @@ external_reloc_size = ecoff_backend (input_bfd)->external_reloc_size; external_relocs_size = external_reloc_size * input_section->reloc_count; - external_relocs = bfd_malloc (external_relocs_size); - if (external_relocs == NULL && external_relocs_size != 0) + if (bfd_seek (input_bfd, input_section->rel_filepos, SEEK_SET) != 0) goto error_return; - - if (bfd_seek (input_bfd, input_section->rel_filepos, SEEK_SET) != 0 - || (bfd_bread (external_relocs, external_relocs_size, input_bfd) - != external_relocs_size)) + external_relocs = _bfd_malloc_and_read (input_bfd, external_relocs_size, + external_relocs_size); + if (external_relocs == NULL && external_relocs_size != 0) goto error_return; /* Relocate the section contents. */ @@ -3899,17 +3909,13 @@ output_section->reloc_count += input_section->reloc_count; } - if (contents != NULL) - free (contents); - if (external_relocs != NULL) - free (external_relocs); + free (contents); + free (external_relocs); return TRUE; error_return: - if (contents != NULL) - free (contents); - if (external_relocs != NULL) - free (external_relocs); + free (contents); + free (external_relocs); return FALSE; } diff -Nru gdb-9.1/bfd/ecofflink.c gdb-10.2/bfd/ecofflink.c --- gdb-9.1/bfd/ecofflink.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/ecofflink.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Routines to link ECOFF debugging information. - Copyright (C) 1993-2019 Free Software Foundation, Inc. + Copyright (C) 1993-2020 Free Software Foundation, Inc. Written by Ian Lance Taylor, Cygnus Support, . This file is part of BFD, the Binary File Descriptor library. @@ -467,7 +467,7 @@ struct bfd_link_info *info) { struct accumulate *ainfo; - bfd_size_type amt = sizeof (struct accumulate); + size_t amt = sizeof (struct accumulate); ainfo = (struct accumulate *) bfd_malloc (amt); if (!ainfo) @@ -1112,7 +1112,7 @@ fdr.issBase = output_symhdr->issMax; fdr.cbSs = 0; fdr.rss = ecoff_add_string (ainfo, info, output_debug, &fdr, - input_bfd->filename); + bfd_get_filename (input_bfd)); if (fdr.rss == -1) return FALSE; fdr.isymBase = output_symhdr->isymMax; @@ -1464,12 +1464,10 @@ != swap->external_hdr_size) goto error_return; - if (buff != NULL) - free (buff); + free (buff); return TRUE; error_return: - if (buff != NULL) - free (buff); + free (buff); return FALSE; } @@ -1491,10 +1489,12 @@ return FALSE; #define WRITE(ptr, count, size, offset) \ - BFD_ASSERT (symhdr->offset == 0 \ - || (bfd_vma) bfd_tell (abfd) == symhdr->offset); \ - if (bfd_bwrite (debug->ptr, (bfd_size_type) size * symhdr->count, abfd)\ - != size * symhdr->count) \ + BFD_ASSERT (symhdr->offset == 0 \ + || (bfd_vma) bfd_tell (abfd) == symhdr->offset); \ + if (symhdr->count != 0 \ + && bfd_bwrite (debug->ptr, \ + (bfd_size_type) size * symhdr->count, \ + abfd) != size * symhdr->count) \ return FALSE; WRITE (line, cbLine, sizeof (unsigned char), cbLineOffset); @@ -1652,7 +1652,7 @@ /* The external strings and symbol are not converted over to using shuffles. FIXME: They probably should be. */ amt = debug->symbolic_header.issExtMax; - if (bfd_bwrite (debug->ssext, amt, abfd) != amt) + if (amt != 0 && bfd_bwrite (debug->ssext, amt, abfd) != amt) goto error_return; if ((debug->symbolic_header.issExtMax & (swap->debug_align - 1)) != 0) { @@ -1682,16 +1682,14 @@ == (bfd_vma) bfd_tell (abfd))); amt = debug->symbolic_header.iextMax * swap->external_ext_size; - if (bfd_bwrite (debug->external_ext, amt, abfd) != amt) + if (amt != 0 && bfd_bwrite (debug->external_ext, amt, abfd) != amt) goto error_return; - if (space != NULL) - free (space); + free (space); return TRUE; error_return: - if (space != NULL) - free (space); + free (space); return FALSE; } @@ -2320,12 +2318,11 @@ if (len != 0) { - if (line_info->find_buffer != NULL) - free (line_info->find_buffer); + free (line_info->find_buffer); buffer = (char *) bfd_malloc ((bfd_size_type) len); + line_info->find_buffer = buffer; if (buffer == NULL) return FALSE; - line_info->find_buffer = buffer; } if (function_name != NULL) diff -Nru gdb-9.1/bfd/ecoffswap.h gdb-10.2/bfd/ecoffswap.h --- gdb-9.1/bfd/ecoffswap.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/ecoffswap.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Generic ECOFF swapping routines, for BFD. - Copyright (C) 1992-2019 Free Software Foundation, Inc. + Copyright (C) 1992-2020 Free Software Foundation, Inc. Written by Cygnus Support. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/elf32-am33lin.c gdb-10.2/bfd/elf32-am33lin.c --- gdb-9.1/bfd/elf32-am33lin.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-am33lin.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Matsushita AM33/2.0 support for 32-bit GNU/Linux ELF - Copyright (C) 2003-2019 Free Software Foundation, Inc. + Copyright (C) 2003-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/elf32-arc.c gdb-10.2/bfd/elf32-arc.c --- gdb-9.1/bfd/elf32-arc.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-arc.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* ARC-specific support for 32-bit ELF - Copyright (C) 1994-2019 Free Software Foundation, Inc. + Copyright (C) 1994-2020 Free Software Foundation, Inc. Contributed by Cupertino Miranda (cmiranda@synopsys.com). This file is part of BFD, the Binary File Descriptor library. @@ -184,9 +184,6 @@ { struct elf_link_hash_entry root; - /* Track dynamic relocs copied for this symbol. */ - struct elf_dyn_relocs *dyn_relocs; - struct got_entry *got_ents; }; @@ -340,7 +337,6 @@ table, string)); if (ret != NULL) { - ret->dyn_relocs = NULL; ret->got_ents = NULL; } @@ -1255,11 +1251,11 @@ else \ ARC_DEBUG ("symbol_section->vma = NULL\n"); \ if (input_section->output_section != NULL) \ - ARC_DEBUG ("symbol_section->vma = %#lx\n", \ + ARC_DEBUG ("input_section->vma = %#lx\n", \ input_section->output_section->vma \ + input_section->output_offset); \ else \ - ARC_DEBUG ("symbol_section->vma = NULL\n"); \ + ARC_DEBUG ("input_section->vma = NULL\n"); \ ARC_DEBUG ("PCL = %#lx\n", P); \ ARC_DEBUG ("P = %#lx\n", P); \ ARC_DEBUG ("G = %#lx\n", G); \ @@ -1786,6 +1782,7 @@ case R_ARC_PC32: case R_ARC_32_PCREL: if (bfd_link_pic (info) + && (input_section->flags & SEC_ALLOC) != 0 && (!IS_ARC_PCREL_TYPE (r_type) || (h != NULL && h->dynindx != -1 @@ -1942,8 +1939,9 @@ } #define elf_arc_hash_table(p) \ - (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \ - == ARC_ELF_DATA ? ((struct elf_arc_link_hash_table *) ((p)->hash)) : NULL) + ((is_elf_hash_table ((p)->hash) \ + && elf_hash_table_id (elf_hash_table (p)) == ARC_ELF_DATA) \ + ? (struct elf_arc_link_hash_table *) (p)->hash : NULL) static bfd_boolean elf_arc_check_relocs (bfd * abfd, @@ -2710,7 +2708,6 @@ bfd *dynobj; asection *s; bfd_boolean relocs_exist = FALSE; - bfd_boolean reltext_exist = FALSE; struct elf_link_hash_table *htab = elf_hash_table (info); dynobj = htab->dynobj; @@ -2765,29 +2762,7 @@ else if (strncmp (s->name, ".rela", 5) == 0) { if (s->size != 0 && s != htab->srelplt) - { - if (!reltext_exist) - { - const char *name = s->name + 5; - bfd *ibfd; - for (ibfd = info->input_bfds; ibfd; ibfd = ibfd->link.next) - if (bfd_get_flavour (ibfd) == bfd_target_elf_flavour - && ibfd->flags & DYNAMIC) - { - asection *target = bfd_get_section_by_name (ibfd, name); - if (target != NULL - && elf_section_data (target)->sreloc == s - && ((target->output_section->flags - & (SEC_READONLY | SEC_ALLOC)) - == (SEC_READONLY | SEC_ALLOC))) - { - reltext_exist = TRUE; - break; - } - } - } - relocs_exist = TRUE; - } + relocs_exist = TRUE; /* We use the reloc_count field as a counter if we need to copy relocs into the output file. */ @@ -2814,33 +2789,7 @@ return FALSE; } - if (htab->dynamic_sections_created) - { - /* TODO: Check if this is needed. */ - if (!bfd_link_pic (info)) - if (!_bfd_elf_add_dynamic_entry (info, DT_DEBUG, 0)) - return FALSE; - - if (htab->splt && (htab->splt->flags & SEC_EXCLUDE) == 0) - if (!_bfd_elf_add_dynamic_entry (info, DT_PLTGOT, 0) - || !_bfd_elf_add_dynamic_entry (info, DT_PLTRELSZ, 0) - || !_bfd_elf_add_dynamic_entry (info, DT_PLTREL, DT_RELA) - || !_bfd_elf_add_dynamic_entry (info, DT_JMPREL, 0)) - return FALSE; - - if (relocs_exist) - if (!_bfd_elf_add_dynamic_entry (info, DT_RELA, 0) - || !_bfd_elf_add_dynamic_entry (info, DT_RELASZ, 0) - || !_bfd_elf_add_dynamic_entry (info, DT_RELAENT, - sizeof (Elf32_External_Rela))) - return FALSE; - - if (reltext_exist) - if (!_bfd_elf_add_dynamic_entry (info, DT_TEXTREL, 0)) - return FALSE; - } - - return TRUE; + return _bfd_elf_add_dynamic_tags (output_bfd, info, relocs_exist); } @@ -3128,21 +3077,17 @@ elf_section_data (sec)->this_hdr.contents = contents; } - if (internal_relocs != NULL - && elf_section_data (sec)->relocs != internal_relocs) + if (elf_section_data (sec)->relocs != internal_relocs) free (internal_relocs); return TRUE; error_return: - if (isymbuf != NULL - && symtab_hdr->contents != (unsigned char *) isymbuf) + if (symtab_hdr->contents != (unsigned char *) isymbuf) free (isymbuf); - if (contents != NULL - && elf_section_data (sec)->this_hdr.contents != contents) + if (elf_section_data (sec)->this_hdr.contents != contents) free (contents); - if (internal_relocs != NULL - && elf_section_data (sec)->relocs != internal_relocs) + if (elf_section_data (sec)->relocs != internal_relocs) free (internal_relocs); return FALSE; diff -Nru gdb-9.1/bfd/elf32-arm.c gdb-10.2/bfd/elf32-arm.c --- gdb-9.1/bfd/elf32-arm.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-arm.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* 32-bit ELF support for ARM - Copyright (C) 1998-2019 Free Software Foundation, Inc. + Copyright (C) 1998-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -1391,7 +1391,7 @@ 0, /* bitsize */ FALSE, /* pc_relative */ 0, /* bitpos */ - complain_overflow_bitfield,/* complain_on_overflow */ + complain_overflow_dont,/* complain_on_overflow */ bfd_elf_generic_reloc, /* special_function */ "R_ARM_TLS_DESCSEQ", /* name */ FALSE, /* partial_inplace */ @@ -1683,7 +1683,7 @@ 0, /* bitsize */ FALSE, /* pc_relative */ 0, /* bitpos */ - complain_overflow_bitfield,/* complain_on_overflow */ + complain_overflow_dont,/* complain_on_overflow */ bfd_elf_generic_reloc, /* special_function */ "R_ARM_THM_TLS_DESCSEQ",/* name */ FALSE, /* partial_inplace */ @@ -2453,8 +2453,8 @@ 0x0c00f240, /* movw ip, #0xNNNN */ 0x0c00f2c0, /* movt ip, #0xNNNN */ 0xf8dc44fc, /* add ip, pc */ - 0xe7fdf000 /* ldr.w pc, [ip] */ - /* b .-2 */ + 0xe7fcf000 /* ldr.w pc, [ip] */ + /* b .-4 */ }; /* The format of the first entry in the procedure linkage table @@ -3215,9 +3215,6 @@ { struct elf_link_hash_entry root; - /* Track dynamic relocs copied for this symbol. */ - struct elf_dyn_relocs *dyn_relocs; - /* ARM-specific PLT information. */ struct arm_plt_info plt; @@ -3258,9 +3255,10 @@ (info))) /* Get the ARM elf linker hash table from a link_info structure. */ -#define elf32_arm_hash_table(info) \ - (elf_hash_table_id ((struct elf_link_hash_table *) ((info)->hash)) \ - == ARM_ELF_DATA ? ((struct elf32_arm_link_hash_table *) ((info)->hash)) : NULL) +#define elf32_arm_hash_table(p) \ + ((is_elf_hash_table ((p)->hash) \ + && elf_hash_table_id (elf_hash_table (p)) == ARM_ELF_DATA) \ + ? (struct elf32_arm_link_hash_table *) (p)->hash : NULL) #define arm_stub_hash_lookup(table, string, create, copy) \ ((struct elf32_arm_stub_hash_entry *) \ @@ -3363,15 +3361,6 @@ /* The number of bytes in the subsequent PLT etries. */ bfd_size_type plt_entry_size; - /* True if the target system is VxWorks. */ - int vxworks_p; - - /* True if the target system is Symbian OS. */ - int symbian_p; - - /* True if the target system is Native Client. */ - int nacl_p; - /* True if the target uses REL relocations. */ bfd_boolean use_rel; @@ -3392,16 +3381,6 @@ /* The (unloaded but important) VxWorks .rela.plt.unloaded section. */ asection *srelplt2; - /* The offset into splt of the PLT entry for the TLS descriptor - resolver. Special values are 0, if not necessary (or not found - to be necessary yet), and -1 if needed but not determined - yet. */ - bfd_vma dt_tlsdesc_plt; - - /* The offset into sgot of the GOT entry used by the PLT entry - above. */ - bfd_vma dt_tlsdesc_got; - /* Offset in .plt section of tls_arm_trampoline. */ bfd_vma tls_trampoline; @@ -3412,9 +3391,6 @@ bfd_vma offset; } tls_ldm_got; - /* Small local sym cache. */ - struct sym_cache sym_cache; - /* For convenience in allocate_dynrelocs. */ bfd * obfd; @@ -3582,7 +3558,6 @@ table, string)); if (ret != NULL) { - ret->dyn_relocs = NULL; ret->tls_type = GOT_UNKNOWN; ret->tlsdesc_got = (bfd_vma) -1; ret->plt.thumb_refcount = 0; @@ -3618,27 +3593,40 @@ num_syms = elf_tdata (abfd)->symtab_hdr.sh_info; size = num_syms * (sizeof (bfd_signed_vma) - + sizeof (struct arm_local_iplt_info *) + sizeof (bfd_vma) - + sizeof (char) - + sizeof (struct fdpic_local)); + + sizeof (struct arm_local_iplt_info *) + + sizeof (struct fdpic_local) + + sizeof (char)); data = bfd_zalloc (abfd, size); if (data == NULL) return FALSE; - elf32_arm_local_fdpic_cnts (abfd) = (struct fdpic_local *) data; - data += num_syms * sizeof (struct fdpic_local); - + /* It is important that these all be allocated in descending + order of required alignment, so that arrays allocated later + will be sufficiently aligned. */ elf_local_got_refcounts (abfd) = (bfd_signed_vma *) data; data += num_syms * sizeof (bfd_signed_vma); + elf32_arm_local_tlsdesc_gotent (abfd) = (bfd_vma *) data; + data += num_syms * sizeof (bfd_vma); + elf32_arm_local_iplt (abfd) = (struct arm_local_iplt_info **) data; data += num_syms * sizeof (struct arm_local_iplt_info *); - elf32_arm_local_tlsdesc_gotent (abfd) = (bfd_vma *) data; - data += num_syms * sizeof (bfd_vma); + elf32_arm_local_fdpic_cnts (abfd) = (struct fdpic_local *) data; + data += num_syms * sizeof (struct fdpic_local); elf32_arm_local_got_tls_type (abfd) = data; +#if GCC_VERSION >= 3000 + BFD_ASSERT (__alignof__ (*elf32_arm_local_tlsdesc_gotent (abfd)) + <= __alignof__ (*elf_local_got_refcounts (abfd))); + BFD_ASSERT (__alignof__ (*elf32_arm_local_iplt (abfd)) + <= __alignof__ (*elf32_arm_local_tlsdesc_gotent (abfd))); + BFD_ASSERT (__alignof__ (*elf32_arm_local_fdpic_cnts (abfd)) + <= __alignof__ (*elf32_arm_local_iplt (abfd))); + BFD_ASSERT (__alignof__ (*elf32_arm_local_got_tls_type (abfd)) + <= __alignof__ (*elf32_arm_local_fdpic_cnts (abfd))); +#endif } return TRUE; } @@ -3807,7 +3795,7 @@ return FALSE; /* BPABI objects never have a GOT, or associated sections. */ - if (htab->symbian_p) + if (htab->root.target_os == is_symbian) return TRUE; if (! _bfd_elf_create_got_section (dynobj, info)) @@ -3964,7 +3952,7 @@ if (!_bfd_elf_create_dynamic_sections (dynobj, info)) return FALSE; - if (htab->vxworks_p) + if (htab->root.target_os == is_vxworks) { if (!elf_vxworks_create_dynamic_sections (dynobj, info, &htab->srelplt2)) return FALSE; @@ -4032,37 +4020,6 @@ edir = (struct elf32_arm_link_hash_entry *) dir; eind = (struct elf32_arm_link_hash_entry *) ind; - if (eind->dyn_relocs != NULL) - { - if (edir->dyn_relocs != NULL) - { - struct elf_dyn_relocs **pp; - struct elf_dyn_relocs *p; - - /* Add reloc counts against the indirect sym to the direct sym - list. Merge any entries against the same section. */ - for (pp = &eind->dyn_relocs; (p = *pp) != NULL; ) - { - struct elf_dyn_relocs *q; - - for (q = edir->dyn_relocs; q != NULL; q = q->next) - if (q->sec == p->sec) - { - q->pc_count += p->pc_count; - q->count += p->count; - *pp = p->next; - break; - } - if (q == NULL) - pp = &p->next; - } - *pp = edir->dyn_relocs; - } - - edir->dyn_relocs = eind->dyn_relocs; - eind->dyn_relocs = NULL; - } - if (ind->root.type == bfd_link_hash_indirect) { /* Copy over PLT info. */ @@ -4110,7 +4067,7 @@ elf32_arm_link_hash_table_create (bfd *abfd) { struct elf32_arm_link_hash_table *ret; - bfd_size_type amt = sizeof (struct elf32_arm_link_hash_table); + size_t amt = sizeof (struct elf32_arm_link_hash_table); ret = (struct elf32_arm_link_hash_table *) bfd_zmalloc (amt); if (ret == NULL) @@ -4518,11 +4475,11 @@ ? (r_type == R_ARM_TLS_CALL /* TLS PIC Stub. */ ? arm_stub_long_branch_any_tls_pic - : (globals->nacl_p + : (globals->root.target_os == is_nacl ? arm_stub_long_branch_arm_nacl_pic : arm_stub_long_branch_any_arm_pic)) /* non-PIC stubs. */ - : (globals->nacl_p + : (globals->root.target_os == is_nacl ? arm_stub_long_branch_arm_nacl : arm_stub_long_branch_any_any); } @@ -4787,7 +4744,7 @@ stub_sec_p = &htab->stub_group[link_sec->id].stub_sec; stub_sec_prefix = link_sec->name; out_sec = link_sec->output_section; - align = htab->nacl_p ? 4 : 3; + align = htab->root.target_os == is_nacl ? 4 : 3; } if (*stub_sec_p == NULL) @@ -5064,6 +5021,14 @@ stub_entry = (struct elf32_arm_stub_hash_entry *) gen_entry; info = (struct bfd_link_info *) in_arg; + /* Fail if the target section could not be assigned to an output + section. The user should fix his linker script. */ + if (stub_entry->target_section->output_section == NULL + && info->non_contiguous_regions) + info->callbacks->einfo (_("%F%P: Could not assign '%pA' to an output section. " + "Retry without --enable-non-contiguous-regions.\n"), + stub_entry->target_section); + globals = elf32_arm_hash_table (info); if (globals == NULL) return FALSE; @@ -5304,7 +5269,7 @@ unsigned int top_id, top_index; asection *section; asection **input_list, **list; - bfd_size_type amt; + size_t amt; struct elf32_arm_link_hash_table *htab = elf32_arm_hash_table (info); if (htab == NULL) @@ -6415,7 +6380,7 @@ ret = FALSE; } -free_sym_buf: + free_sym_buf: free (sympp); return ret; } @@ -6609,9 +6574,7 @@ free (internal_relocs); /* Fall through. */ error_ret_free_local: - if (local_syms != NULL - && (symtab_hdr->contents - != (unsigned char *) local_syms)) + if (symtab_hdr->contents != (unsigned char *) local_syms) free (local_syms); return FALSE; } @@ -7148,7 +7111,6 @@ tmp_name = (char *) bfd_malloc ((bfd_size_type) strlen (name) + strlen (ARM2THUMB_GLUE_ENTRY_NAME) + 1); - BFD_ASSERT (tmp_name); sprintf (tmp_name, ARM2THUMB_GLUE_ENTRY_NAME, name); @@ -7323,7 +7285,6 @@ tmp_name = (char *) bfd_malloc ((bfd_size_type) strlen (name) + strlen (ARM2THUMB_GLUE_ENTRY_NAME) + 1); - BFD_ASSERT (tmp_name); sprintf (tmp_name, ARM2THUMB_GLUE_ENTRY_NAME, name); @@ -7401,7 +7362,6 @@ /* Add symbol for veneer. */ tmp_name = (char *) bfd_malloc ((bfd_size_type) strlen (ARM_BX_GLUE_ENTRY_NAME) + 1); - BFD_ASSERT (tmp_name); sprintf (tmp_name, ARM_BX_GLUE_ENTRY_NAME, reg); @@ -7493,7 +7453,6 @@ tmp_name = (char *) bfd_malloc ((bfd_size_type) strlen (VFP11_ERRATUM_VENEER_ENTRY_NAME) + 10); - BFD_ASSERT (tmp_name); sprintf (tmp_name, VFP11_ERRATUM_VENEER_ENTRY_NAME, @@ -7613,7 +7572,6 @@ tmp_name = (char *) bfd_malloc ((bfd_size_type) strlen (STM32L4XX_ERRATUM_VENEER_ENTRY_NAME) + 10); - BFD_ASSERT (tmp_name); sprintf (tmp_name, STM32L4XX_ERRATUM_VENEER_ENTRY_NAME, @@ -7983,25 +7941,21 @@ } } - if (contents != NULL - && elf_section_data (sec)->this_hdr.contents != contents) + if (elf_section_data (sec)->this_hdr.contents != contents) free (contents); contents = NULL; - if (internal_relocs != NULL - && elf_section_data (sec)->relocs != internal_relocs) + if (elf_section_data (sec)->relocs != internal_relocs) free (internal_relocs); internal_relocs = NULL; } return TRUE; -error_return: - if (contents != NULL - && elf_section_data (sec)->this_hdr.contents != contents) + error_return: + if (elf_section_data (sec)->this_hdr.contents != contents) free (contents); - if (internal_relocs != NULL - && elf_section_data (sec)->relocs != internal_relocs) + if (elf_section_data (sec)->relocs != internal_relocs) free (internal_relocs); return FALSE; @@ -8604,17 +8558,15 @@ } } - if (contents != NULL - && elf_section_data (sec)->this_hdr.contents != contents) + if (elf_section_data (sec)->this_hdr.contents != contents) free (contents); contents = NULL; } return TRUE; -error_return: - if (contents != NULL - && elf_section_data (sec)->this_hdr.contents != contents) + error_return: + if (elf_section_data (sec)->this_hdr.contents != contents) free (contents); return FALSE; @@ -8644,6 +8596,7 @@ tmp_name = (char *) bfd_malloc ((bfd_size_type) strlen (VFP11_ERRATUM_VENEER_ENTRY_NAME) + 10); + BFD_ASSERT (tmp_name); for (sec = abfd->sections; sec != NULL; sec = sec->next) { @@ -8731,6 +8684,7 @@ tmp_name = (char *) bfd_malloc ((bfd_size_type) strlen (STM32L4XX_ERRATUM_VENEER_ENTRY_NAME) + 10); + BFD_ASSERT (tmp_name); for (sec = abfd->sections; sec != NULL; sec = sec->next) { @@ -9039,17 +8993,15 @@ } } - if (contents != NULL - && elf_section_data (sec)->this_hdr.contents != contents) + if (elf_section_data (sec)->this_hdr.contents != contents) free (contents); contents = NULL; } return TRUE; -error_return: - if (contents != NULL - && elf_section_data (sec)->this_hdr.contents != contents) + error_return: + if (elf_section_data (sec)->this_hdr.contents != contents) free (contents); return FALSE; @@ -9564,7 +9516,7 @@ sgotplt = htab->root.igotplt; /* NaCl uses a special first entry in .iplt too. */ - if (htab->nacl_p && splt->size == 0) + if (htab->root.target_os == is_nacl && splt->size == 0) splt->size += htab->plt_header_size; /* Allocate room for an R_ARM_IRELATIVE relocation in .rel.iplt. */ @@ -9606,7 +9558,7 @@ root_plt->offset = splt->size; splt->size += htab->plt_entry_size; - if (!htab->symbian_p) + if (htab->root.target_os != is_symbian) { /* We also need to make an entry in the .got.plt section, which will be placed in the .got section by the linker script. */ @@ -9687,7 +9639,7 @@ BFD_ASSERT (splt != NULL && srel != NULL); /* Fill in the entry in the procedure linkage table. */ - if (htab->symbian_p) + if (htab->root.target_os == is_symbian) { BFD_ASSERT (dynindx >= 0); put_arm_insn (htab, output_bfd, @@ -9744,7 +9696,7 @@ + root_plt->offset); ptr = splt->contents + root_plt->offset; - if (htab->vxworks_p && bfd_link_pic (info)) + if (htab->root.target_os == is_vxworks && bfd_link_pic (info)) { unsigned int i; bfd_vma val; @@ -9762,7 +9714,7 @@ put_arm_insn (htab, output_bfd, val, ptr); } } - else if (htab->vxworks_p) + else if (htab->root.target_os == is_vxworks) { unsigned int i; bfd_vma val; @@ -9800,7 +9752,7 @@ rel.r_addend = 0; SWAP_RELOC_OUT (htab) (output_bfd, &rel, loc); } - else if (htab->nacl_p) + else if (htab->root.target_os == is_nacl) { /* Calculate the displacement between the PLT slot and the common tail that's part of the special initial PLT slot. */ @@ -9996,6 +9948,12 @@ rel.r_info = ELF32_R_INFO (dynindx, R_ARM_JUMP_SLOT); initial_got_entry = (splt->output_section->vma + splt->output_offset); + + /* PR ld/16017 + When thumb only we need to set the LSB for any address that + will be used with an interworking branch instruction. */ + if (using_thumb_only (htab)) + initial_got_entry |= 1; } } @@ -10289,7 +10247,7 @@ /* Determine the most significant bit in the residual and align the resulting value to a 2-bit boundary. */ for (msb = 30; msb >= 0; msb -= 2) - if (residual & (3 << msb)) + if (residual & (3u << msb)) break; /* The desired shift is now (msb - 6), or zero, whichever @@ -10403,16 +10361,22 @@ if (globals->use_rel) { - addend = bfd_get_32 (input_bfd, hit_data) & howto->src_mask; + bfd_vma sign; - if (addend & ((howto->src_mask + 1) >> 1)) + switch (howto->size) { - signed_addend = -1; - signed_addend &= ~ howto->src_mask; - signed_addend |= addend; - } - else - signed_addend = addend; + case 0: addend = bfd_get_8 (input_bfd, hit_data); break; + case 1: addend = bfd_get_16 (input_bfd, hit_data); break; + case 2: addend = bfd_get_32 (input_bfd, hit_data); break; + default: addend = 0; break; + } + /* Note: the addend and signed_addend calculated here are + incorrect for any split field. */ + addend &= howto->src_mask; + sign = howto->src_mask & ~(howto->src_mask >> 1); + signed_addend = (addend ^ sign) - sign; + signed_addend = (bfd_vma) signed_addend << howto->rightshift; + addend <<= howto->rightshift; } else addend = signed_addend = rel->r_addend; @@ -10499,7 +10463,7 @@ return bfd_reloc_ok; case R_ARM_ABS12: - if (!globals->vxworks_p) + if (globals->root.target_os != is_vxworks) return elf32_arm_abs12_reloc (input_bfd, hit_data, value + addend); /* Fall through. */ @@ -10547,7 +10511,7 @@ || globals->root.is_relocatable_executable || globals->fdpic_p) && (input_section->flags & SEC_ALLOC) - && !(globals->vxworks_p + && !(globals->root.target_os == is_vxworks && strcmp (input_section->output_section->name, ".tls_vars") == 0) && ((r_type != R_ARM_REL32 && r_type != R_ARM_REL32_NOI) @@ -10624,7 +10588,7 @@ /* This symbol is local, or marked to become local. */ BFD_ASSERT (r_type == R_ARM_ABS32 || r_type == R_ARM_ABS32_NOI || (globals->fdpic_p && !bfd_link_pic(info))); - if (globals->symbian_p) + if (globals->root.target_os == is_symbian) { asection *osec; @@ -10644,7 +10608,9 @@ osec = sym_sec->output_section; else osec = input_section->output_section; - symbol = elf_section_data (osec)->dynindx; + symbol = 0; + if (osec && elf_section_data (osec)) + symbol = elf_section_data (osec)->dynindx; if (symbol == 0) { struct elf_link_hash_table *htab = elf_hash_table (info); @@ -10807,11 +10773,7 @@ value -= (input_section->output_section->vma + input_section->output_offset); value -= rel->r_offset; - if (globals->use_rel) - value += (signed_addend << howto->size); - else - /* RELA addends do not have to be adjusted by howto->size. */ - value += signed_addend; + value += signed_addend; signed_addend = value; signed_addend >>= howto->rightshift; @@ -10915,9 +10877,6 @@ return bfd_reloc_ok; case R_ARM_ABS8: - /* PR 16202: Refectch the addend using the correct size. */ - if (globals->use_rel) - addend = bfd_get_8 (input_bfd, hit_data); value += addend; /* There is no way to tell whether the user intended to use a signed or @@ -10930,9 +10889,6 @@ return bfd_reloc_ok; case R_ARM_ABS16: - /* PR 16202: Refectch the addend using the correct size. */ - if (globals->use_rel) - addend = bfd_get_16 (input_bfd, hit_data); value += addend; /* See comment for R_ARM_ABS8. */ @@ -11411,25 +11367,12 @@ /* CZB cannot jump backward. */ if (r_type == R_ARM_THM_JUMP6) - reloc_signed_min = 0; - - if (globals->use_rel) { - /* Need to refetch addend. */ - addend = bfd_get_16 (input_bfd, hit_data) & howto->src_mask; - if (addend & ((howto->src_mask + 1) >> 1)) - { - signed_addend = -1; - signed_addend &= ~ howto->src_mask; - signed_addend |= addend; - } - else - signed_addend = addend; - /* The value in the insn has been right shifted. We need to - undo this, so that we can perform the address calculation - in terms of bytes. */ - signed_addend <<= howto->rightshift; + reloc_signed_min = 0; + if (globals->use_rel) + signed_addend = ((addend & 0x200) >> 3) | ((addend & 0xf8) >> 2); } + relocation = value + signed_addend; relocation -= (input_section->output_section->vma @@ -11581,8 +11524,7 @@ if (dynreloc_st_type == STT_GNU_IFUNC) outrel.r_info = ELF32_R_INFO (0, R_ARM_IRELATIVE); else if (bfd_link_pic (info) - && (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT - || h->root.type != bfd_link_hash_undefweak)) + && !UNDEFWEAK_NO_DYNAMIC_RELOC (info, h)) outrel.r_info = ELF32_R_INFO (0, R_ARM_RELATIVE); else { @@ -15370,7 +15312,7 @@ if (r_symndx < symtab_hdr->sh_info) { /* A local symbol. */ - isym = bfd_sym_from_r_symndx (&htab->sym_cache, + isym = bfd_sym_from_r_symndx (&htab->root.sym_cache, abfd, r_symndx); if (isym == NULL) return FALSE; @@ -15548,7 +15490,7 @@ case R_ARM_ABS12: /* VxWorks uses dynamic R_ARM_ABS12 relocations for ldr __GOTT_INDEX__ offsets. */ - if (!htab->vxworks_p) + if (htab->root.target_os != is_vxworks) { may_need_local_target_p = TRUE; break; @@ -15701,7 +15643,7 @@ return FALSE; /* BPABI objects never have dynamic relocations mapped. */ - if (htab->symbian_p) + if (htab->root.target_os == is_symbian) { flagword flags; @@ -15714,7 +15656,7 @@ /* If this is a global symbol, count the number of relocations we need for this symbol. */ if (h != NULL) - head = &((struct elf32_arm_link_hash_entry *) h)->dyn_relocs; + head = &h->dyn_relocs; else { head = elf32_arm_get_local_dynreloc_list (abfd, r_symndx, isym); @@ -15725,7 +15667,7 @@ p = *head; if (p == NULL || p->sec != sec) { - bfd_size_type amt = sizeof *p; + size_t amt = sizeof *p; p = (struct elf_dyn_relocs *) bfd_alloc (htab->root.dynobj, amt); if (p == NULL) @@ -16093,23 +16035,6 @@ return found; } -/* Find dynamic relocs for H that apply to read-only sections. */ - -static asection * -readonly_dynrelocs (struct elf_link_hash_entry *h) -{ - struct elf_dyn_relocs *p; - - for (p = elf32_arm_hash_entry (h)->dyn_relocs; p != NULL; p = p->next) - { - asection *s = p->sec->output_section; - - if (s != NULL && (s->flags & SEC_READONLY) != 0) - return p->sec; - } - return NULL; -} - /* Adjust a symbol defined by a dynamic object and referenced by a regular object. The current definition is in some section of the dynamic object, but we're not including those sections. We have to @@ -16322,7 +16247,7 @@ /* VxWorks executables have a second set of relocations for each PLT entry. They go in a separate relocation section, which is processed by the kernel loader. */ - if (htab->vxworks_p && !bfd_link_pic (info)) + if (htab->root.target_os == is_vxworks && !bfd_link_pic (info)) { /* There is a relocation for the initial PLT entry: an R_ARM_32 relocation for _GLOBAL_OFFSET_TABLE_. */ @@ -16366,7 +16291,7 @@ return FALSE; } - if (!htab->symbian_p) + if (htab->root.target_os != is_symbian) { s = htab->root.sgot; h->got.offset = s->size; @@ -16455,8 +16380,7 @@ GOT entry's R_ARM_IRELATIVE relocation. */ elf32_arm_allocate_irelocs (info, htab->root.srelgot, 1); else if (bfd_link_pic (info) - && (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT - || h->root.type != bfd_link_hash_undefweak)) + && !UNDEFWEAK_NO_DYNAMIC_RELOC (info, h)) /* Reserve room for the GOT entry's R_ARM_RELATIVE relocation. */ elf32_arm_allocate_dynrelocs (info, htab->root.srelgot, 1); else if (htab->fdpic_p && tls_type == GOT_NORMAL) @@ -16596,7 +16520,7 @@ h->root.u.def.value = th->root.u.def.value & ~1; } - if (eh->dyn_relocs == NULL) + if (h->dyn_relocs == NULL) return TRUE; /* In the shared -Bsymbolic case, discard space allocated for @@ -16617,7 +16541,7 @@ { struct elf_dyn_relocs **pp; - for (pp = &eh->dyn_relocs; (p = *pp) != NULL; ) + for (pp = &h->dyn_relocs; (p = *pp) != NULL; ) { p->count -= p->pc_count; p->pc_count = 0; @@ -16628,11 +16552,11 @@ } } - if (htab->vxworks_p) + if (htab->root.target_os == is_vxworks) { struct elf_dyn_relocs **pp; - for (pp = &eh->dyn_relocs; (p = *pp) != NULL; ) + for (pp = &h->dyn_relocs; (p = *pp) != NULL; ) { if (strcmp (p->sec->output_section->name, ".tls_vars") == 0) *pp = p->next; @@ -16643,12 +16567,12 @@ /* Also discard relocs on undefined weak syms with non-default visibility. */ - if (eh->dyn_relocs != NULL + if (h->dyn_relocs != NULL && h->root.type == bfd_link_hash_undefweak) { if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT || UNDEFWEAK_NO_DYNAMIC_RELOC (info, h)) - eh->dyn_relocs = NULL; + h->dyn_relocs = NULL; /* Make sure undefined weak symbols are output as a dynamic symbol in PIEs. */ @@ -16699,13 +16623,13 @@ goto keep; } - eh->dyn_relocs = NULL; + h->dyn_relocs = NULL; keep: ; } /* Finally, allocate space. */ - for (p = eh->dyn_relocs; p != NULL; p = p->next) + for (p = h->dyn_relocs; p != NULL; p = p->next) { asection *sreloc = elf_section_data (p->sec)->sreloc; @@ -16724,34 +16648,6 @@ return TRUE; } -/* Set DF_TEXTREL if we find any dynamic relocs that apply to - read-only sections. */ - -static bfd_boolean -maybe_set_textrel (struct elf_link_hash_entry *h, void *info_p) -{ - asection *sec; - - if (h->root.type == bfd_link_hash_indirect) - return TRUE; - - sec = readonly_dynrelocs (h); - if (sec != NULL) - { - struct bfd_link_info *info = (struct bfd_link_info *) info_p; - - info->flags |= DF_TEXTREL; - info->callbacks->minfo - (_("%pB: dynamic relocation against `%pT' in read-only section `%pA'\n"), - sec->owner, h->root.root.string, sec); - - /* Not an error, just cut short the traversal. */ - return FALSE; - } - - return TRUE; -} - void bfd_elf32_arm_set_byteswap_code (struct bfd_link_info *info, int byteswap_code) @@ -16773,7 +16669,6 @@ { bfd * dynobj; asection * s; - bfd_boolean plt; bfd_boolean relocs; bfd *ibfd; struct elf32_arm_link_hash_table *htab; @@ -16810,7 +16705,6 @@ bfd_size_type locsymcount; Elf_Internal_Shdr *symtab_hdr; asection *srel; - bfd_boolean is_vxworks = htab->vxworks_p; unsigned int symndx; struct fdpic_local *local_fdpic_cnts; @@ -16832,7 +16726,7 @@ linker script /DISCARD/, so we'll be discarding the relocs too. */ } - else if (is_vxworks + else if (htab->root.target_os == is_vxworks && strcmp (p->sec->output_section->name, ".tls_vars") == 0) { @@ -16973,7 +16867,8 @@ s->size += 4; } - isym = bfd_sym_from_r_symndx (&htab->sym_cache, ibfd, symndx); + isym = bfd_sym_from_r_symndx (&htab->root.sym_cache, ibfd, + symndx); if (isym == NULL) return FALSE; @@ -17062,12 +16957,14 @@ /* If we're not using lazy TLS relocations, don't generate the PLT and GOT entries they require. */ - if (!(info->flags & DF_BIND_NOW)) + if ((info->flags & DF_BIND_NOW)) + htab->root.tlsdesc_plt = 0; + else { - htab->dt_tlsdesc_got = htab->root.sgot->size; + htab->root.tlsdesc_got = htab->root.sgot->size; htab->root.sgot->size += 4; - htab->dt_tlsdesc_plt = htab->root.splt->size; + htab->root.tlsdesc_plt = htab->root.splt->size; htab->root.splt->size += 4 * ARRAY_SIZE (dl_tlsdesc_lazy_trampoline); } } @@ -17075,7 +16972,6 @@ /* The check_relocs and adjust_dynamic_symbol entry points have determined the sizes of the various dynamic sections. Allocate memory for them. */ - plt = FALSE; relocs = FALSE; for (s = dynobj->sections; s != NULL; s = s->next) { @@ -17091,7 +16987,7 @@ if (s == htab->root.splt) { /* Remember whether there is a PLT. */ - plt = s->size != 0; + ; } else if (CONST_STRNEQ (name, ".rel")) { @@ -17143,72 +17039,8 @@ return FALSE; } - if (elf_hash_table (info)->dynamic_sections_created) - { - /* Add some entries to the .dynamic section. We fill in the - values later, in elf32_arm_finish_dynamic_sections, but we - must add the entries now so that we get the correct size for - the .dynamic section. The DT_DEBUG entry is filled in by the - dynamic linker and used by the debugger. */ -#define add_dynamic_entry(TAG, VAL) \ - _bfd_elf_add_dynamic_entry (info, TAG, VAL) - - if (bfd_link_executable (info)) - { - if (!add_dynamic_entry (DT_DEBUG, 0)) - return FALSE; - } - - if (plt) - { - if ( !add_dynamic_entry (DT_PLTGOT, 0) - || !add_dynamic_entry (DT_PLTRELSZ, 0) - || !add_dynamic_entry (DT_PLTREL, - htab->use_rel ? DT_REL : DT_RELA) - || !add_dynamic_entry (DT_JMPREL, 0)) - return FALSE; - - if (htab->dt_tlsdesc_plt - && (!add_dynamic_entry (DT_TLSDESC_PLT,0) - || !add_dynamic_entry (DT_TLSDESC_GOT,0))) - return FALSE; - } - - if (relocs) - { - if (htab->use_rel) - { - if (!add_dynamic_entry (DT_REL, 0) - || !add_dynamic_entry (DT_RELSZ, 0) - || !add_dynamic_entry (DT_RELENT, RELOC_SIZE (htab))) - return FALSE; - } - else - { - if (!add_dynamic_entry (DT_RELA, 0) - || !add_dynamic_entry (DT_RELASZ, 0) - || !add_dynamic_entry (DT_RELAENT, RELOC_SIZE (htab))) - return FALSE; - } - } - - /* If any dynamic relocs apply to a read-only section, - then we need a DT_TEXTREL entry. */ - if ((info->flags & DF_TEXTREL) == 0) - elf_link_hash_traverse (&htab->root, maybe_set_textrel, info); - - if ((info->flags & DF_TEXTREL) != 0) - { - if (!add_dynamic_entry (DT_TEXTREL, 0)) - return FALSE; - } - if (htab->vxworks_p - && !elf_vxworks_add_dynamic_entries (output_bfd, info)) - return FALSE; - } -#undef add_dynamic_entry - - return TRUE; + return _bfd_elf_maybe_vxworks_add_dynamic_tags (output_bfd, info, + relocs); } /* Size sections even though they're not dynamic. We use it to setup @@ -17347,7 +17179,9 @@ and for FDPIC, the _GLOBAL_OFFSET_TABLE_ symbol is not absolute: it is relative to the ".got" section. */ if (h == htab->root.hdynamic - || (!htab->fdpic_p && !htab->vxworks_p && h == htab->root.hgot)) + || (!htab->fdpic_p + && htab->root.target_os != is_vxworks + && h == htab->root.hgot)) sym->st_shndx = SHN_ABS; return TRUE; @@ -17433,7 +17267,7 @@ splt = htab->root.splt; BFD_ASSERT (splt != NULL && sdyn != NULL); - BFD_ASSERT (htab->symbian_p || sgot != NULL); + BFD_ASSERT (htab->root.target_os == is_symbian || sgot != NULL); dyncon = (Elf32_External_Dyn *) sdyn->contents; dynconend = (Elf32_External_Dyn *) (sdyn->contents + sdyn->size); @@ -17451,7 +17285,7 @@ unsigned int type; default: - if (htab->vxworks_p + if (htab->root.target_os == is_vxworks && elf_vxworks_finish_dynamic_entry (output_bfd, &dyn)) bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon); break; @@ -17476,7 +17310,8 @@ goto get_vma_if_bpabi; case DT_PLTGOT: - name = htab->symbian_p ? ".got" : ".got.plt"; + name = (htab->root.target_os == is_symbian + ? ".got" : ".got.plt"); goto get_vma; case DT_JMPREL: name = RELOC_SECTION (htab, ".plt"); @@ -17489,7 +17324,7 @@ bfd_set_error (bfd_error_invalid_operation); return FALSE; } - if (!htab->symbian_p) + if (htab->root.target_os != is_symbian) dyn.d_un.d_ptr = s->output_section->vma + s->output_offset; else /* In the BPABI, tags in the PT_DYNAMIC section point @@ -17500,7 +17335,7 @@ break; get_vma_if_bpabi: - if (htab->symbian_p) + if (htab->root.target_os == is_symbian) goto get_vma; break; @@ -17522,7 +17357,7 @@ relocation section, since relocation sections are never allocated under the BPABI. PLT relocs are also included. */ - if (htab->symbian_p) + if (htab->root.target_os == is_symbian) { unsigned int i; type = ((dyn.d_tag == DT_REL || dyn.d_tag == DT_RELSZ) @@ -17549,14 +17384,14 @@ case DT_TLSDESC_PLT: s = htab->root.splt; dyn.d_un.d_ptr = (s->output_section->vma + s->output_offset - + htab->dt_tlsdesc_plt); + + htab->root.tlsdesc_plt); bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon); break; case DT_TLSDESC_GOT: s = htab->root.sgot; dyn.d_un.d_ptr = (s->output_section->vma + s->output_offset - + htab->dt_tlsdesc_got); + + htab->root.tlsdesc_got); bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon); break; @@ -17598,7 +17433,7 @@ got_address = sgot->output_section->vma + sgot->output_offset; plt_address = splt->output_section->vma + splt->output_offset; - if (htab->vxworks_p) + if (htab->root.target_os == is_vxworks) { /* The VxWorks GOT is relocated by the dynamic linker. Therefore, we must emit relocations rather than simply @@ -17621,7 +17456,7 @@ SWAP_RELOC_OUT (htab) (output_bfd, &rel, htab->srelplt2->contents); } - else if (htab->nacl_p) + else if (htab->root.target_os == is_nacl) arm_nacl_put_plt0 (htab, output_bfd, splt, got_address + 8 - (plt_address + 16)); else if (using_thumb_only (htab)) @@ -17667,7 +17502,7 @@ if (splt->output_section->owner == output_bfd) elf_section_data (splt->output_section)->this_hdr.sh_entsize = 4; - if (htab->dt_tlsdesc_plt) + if (htab->root.tlsdesc_plt) { bfd_vma got_address = sgot->output_section->vma + sgot->output_offset; @@ -17677,18 +17512,18 @@ = splt->output_section->vma + splt->output_offset; arm_put_trampoline (htab, output_bfd, - splt->contents + htab->dt_tlsdesc_plt, + splt->contents + htab->root.tlsdesc_plt, dl_tlsdesc_lazy_trampoline, 6); bfd_put_32 (output_bfd, - gotplt_address + htab->dt_tlsdesc_got - - (plt_address + htab->dt_tlsdesc_plt) + gotplt_address + htab->root.tlsdesc_got + - (plt_address + htab->root.tlsdesc_plt) - dl_tlsdesc_lazy_trampoline[6], - splt->contents + htab->dt_tlsdesc_plt + 24); + splt->contents + htab->root.tlsdesc_plt + 24); bfd_put_32 (output_bfd, - got_address - (plt_address + htab->dt_tlsdesc_plt) + got_address - (plt_address + htab->root.tlsdesc_plt) - dl_tlsdesc_lazy_trampoline[7], - splt->contents + htab->dt_tlsdesc_plt + 24 + 4); + splt->contents + htab->root.tlsdesc_plt + 24 + 4); } if (htab->tls_trampoline) @@ -17702,7 +17537,7 @@ #endif } - if (htab->vxworks_p + if (htab->root.target_os == is_vxworks && !bfd_link_pic (info) && htab->root.splt->size > 0) { @@ -17732,7 +17567,9 @@ } } - if (htab->nacl_p && htab->root.iplt != NULL && htab->root.iplt->size > 0) + if (htab->root.target_os == is_nacl + && htab->root.iplt != NULL + && htab->root.iplt->size > 0) /* NaCl uses a special first entry in .iplt too. */ arm_nacl_put_plt0 (htab, output_bfd, htab->root.iplt, 0); @@ -18009,14 +17846,14 @@ (osi->info->output_bfd, osi->sec->output_section)); addr = root_plt->offset & -2; - if (htab->symbian_p) + if (htab->root.target_os == is_symbian) { if (!elf32_arm_output_map_sym (osi, ARM_MAP_ARM, addr)) return FALSE; if (!elf32_arm_output_map_sym (osi, ARM_MAP_DATA, addr + 4)) return FALSE; } - else if (htab->vxworks_p) + else if (htab->root.target_os == is_vxworks) { if (!elf32_arm_output_map_sym (osi, ARM_MAP_ARM, addr)) return FALSE; @@ -18027,7 +17864,7 @@ if (!elf32_arm_output_map_sym (osi, ARM_MAP_DATA, addr + 20)) return FALSE; } - else if (htab->nacl_p) + else if (htab->root.target_os == is_nacl) { if (!elf32_arm_output_map_sym (osi, ARM_MAP_ARM, addr)) return FALSE; @@ -18389,7 +18226,7 @@ /* Output mapping symbols for the plt header. SymbianOS does not have a plt header. */ - if (htab->vxworks_p) + if (htab->root.target_os == is_vxworks) { /* VxWorks shared libraries have no PLT header. */ if (!bfd_link_pic (info)) @@ -18400,7 +18237,7 @@ return FALSE; } } - else if (htab->nacl_p) + else if (htab->root.target_os == is_nacl) { if (!elf32_arm_output_map_sym (&osi, ARM_MAP_ARM, 0)) return FALSE; @@ -18414,7 +18251,7 @@ if (!elf32_arm_output_map_sym (&osi, ARM_MAP_THUMB, 16)) return FALSE; } - else if (!htab->symbian_p && !htab->fdpic_p) + else if (htab->root.target_os != is_symbian && !htab->fdpic_p) { if (!elf32_arm_output_map_sym (&osi, ARM_MAP_ARM, 0)) return FALSE; @@ -18424,7 +18261,9 @@ #endif } } - if (htab->nacl_p && htab->root.iplt && htab->root.iplt->size > 0) + if (htab->root.target_os == is_nacl + && htab->root.iplt + && htab->root.iplt->size > 0) { /* NaCl uses a special first entry in .iplt too. */ osi.sec = htab->root.iplt; @@ -18457,14 +18296,15 @@ } } } - if (htab->dt_tlsdesc_plt != 0) + if (htab->root.tlsdesc_plt != 0) { /* Mapping symbols for the lazy tls trampoline. */ - if (!elf32_arm_output_map_sym (&osi, ARM_MAP_ARM, htab->dt_tlsdesc_plt)) + if (!elf32_arm_output_map_sym (&osi, ARM_MAP_ARM, + htab->root.tlsdesc_plt)) return FALSE; if (!elf32_arm_output_map_sym (&osi, ARM_MAP_DATA, - htab->dt_tlsdesc_plt + 24)) + htab->root.tlsdesc_plt + 24)) return FALSE; } if (htab->tls_trampoline != 0) @@ -18505,6 +18345,8 @@ maxnamelen = 128; cmse_name = (char *) bfd_malloc (maxnamelen); + BFD_ASSERT (cmse_name); + for (src_count = 0; src_count < symcount; src_count++) { struct elf32_arm_link_hash_entry *cmse_hash; @@ -18580,7 +18422,7 @@ if (!sec->used_by_bfd) { _arm_elf_section_data *sdata; - bfd_size_type amt = sizeof (*sdata); + size_t amt = sizeof (*sdata); sdata = (_arm_elf_section_data *) bfd_zalloc (abfd, amt); if (sdata == NULL) @@ -19700,6 +19542,8 @@ unsigned int in_index, out_index; bfd_vma add_to_offsets = 0; + if (edited_contents == NULL) + return FALSE; for (in_index = 0, out_index = 0; in_index * 8 < input_size || edit_node;) { if (edit_node) @@ -19992,7 +19836,7 @@ if (elf32_arm_hash_table (info) == NULL) return FALSE; - if (elf32_arm_hash_table (info)->vxworks_p + if (elf32_arm_hash_table (info)->root.target_os == is_vxworks && !elf_vxworks_add_symbol_hook (abfd, info, sym, namep, flagsp, secp, valp)) return FALSE; @@ -20231,10 +20075,10 @@ } static bfd_boolean -elf32_arm_section_flags (flagword *flags, const Elf_Internal_Shdr * hdr) +elf32_arm_section_flags (const Elf_Internal_Shdr *hdr) { if (hdr->sh_flags & SHF_ARM_PURECODE) - *flags |= SEC_ELF_PURECODE; + hdr->bfd_section->flags |= SEC_ELF_PURECODE; return TRUE; } @@ -20504,8 +20348,6 @@ struct elf32_arm_link_hash_table *htab = (struct elf32_arm_link_hash_table *) ret; - htab->nacl_p = 1; - htab->plt_header_size = 4 * ARRAY_SIZE (elf32_arm_nacl_plt0_entry); htab->plt_entry_size = 4 * ARRAY_SIZE (elf32_arm_nacl_plt_entry); } @@ -20560,6 +20402,8 @@ #undef ELF_MINPAGESIZE #undef ELF_COMMONPAGESIZE +#undef ELF_TARGET_OS +#define ELF_TARGET_OS is_nacl #include "elf32-target.h" @@ -20642,6 +20486,8 @@ #undef elf_backend_omit_section_dynsym #define elf_backend_omit_section_dynsym elf32_arm_fdpic_omit_section_dynsym +#undef ELF_TARGET_OS + #include "elf32-target.h" #undef elf_match_priority @@ -20673,7 +20519,6 @@ struct elf32_arm_link_hash_table *htab = (struct elf32_arm_link_hash_table *) ret; htab->use_rel = 0; - htab->vxworks_p = 1; } return ret; } @@ -20705,6 +20550,8 @@ #define elf_backend_want_plt_sym 1 #undef ELF_MAXPAGESIZE #define ELF_MAXPAGESIZE 0x1000 +#undef ELF_TARGET_OS +#define ELF_TARGET_OS is_vxworks #include "elf32-target.h" @@ -20961,7 +20808,6 @@ htab->plt_header_size = 0; /* The PLT entries are each one instruction and one word. */ htab->plt_entry_size = 4 * ARRAY_SIZE (elf32_arm_symbian_plt_entry); - htab->symbian_p = 1; /* Symbian uses armv5t or above, so use_blx is always true. */ htab->use_blx = 1; htab->root.is_relocatable_executable = 1; @@ -21092,5 +20938,7 @@ #define elf_backend_dtrel_excludes_plt 0 #undef ELF_MAXPAGESIZE #define ELF_MAXPAGESIZE 0x8000 +#undef ELF_TARGET_OS +#define ELF_TARGET_OS is_symbian #include "elf32-target.h" diff -Nru gdb-9.1/bfd/elf32-arm.h gdb-10.2/bfd/elf32-arm.h --- gdb-9.1/bfd/elf32-arm.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-arm.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* 32-bit ELF support for ARM - Copyright (C) 2019 Free Software Foundation, Inc. + Copyright (C) 2019-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/elf32-avr.c gdb-10.2/bfd/elf32-avr.c --- gdb-9.1/bfd/elf32-avr.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-avr.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* AVR-specific support for 32-bit ELF - Copyright (C) 1999-2019 Free Software Foundation, Inc. + Copyright (C) 1999-2020 Free Software Foundation, Inc. Contributed by Denis Chertykov This file is part of BFD, the Binary File Descriptor library. @@ -106,9 +106,9 @@ /* Various hash macros and functions. */ #define avr_link_hash_table(p) \ - /* PR 3874: Check that we have an AVR style hash table before using it. */\ - (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \ - == AVR_ELF_DATA ? ((struct elf32_avr_link_hash_table *) ((p)->hash)) : NULL) + ((is_elf_hash_table ((p)->hash) \ + && elf_hash_table_id (elf_hash_table (p)) == AVR_ELF_DATA) \ + ? (struct elf32_avr_link_hash_table *) (p)->hash : NULL) #define avr_stub_hash_entry(ent) \ ((struct elf32_avr_stub_hash_entry *)(ent)) @@ -767,7 +767,7 @@ if (!sec->used_by_bfd) { struct elf_avr_section_data *sdata; - bfd_size_type amt = sizeof (*sdata); + size_t amt = sizeof (*sdata); sdata = bfd_zalloc (abfd, amt); if (sdata == NULL) @@ -858,10 +858,8 @@ = (struct elf32_avr_link_hash_table *) obfd->link.hash; /* Free the address mapping table. */ - if (htab->amt_stub_offsets != NULL) - free (htab->amt_stub_offsets); - if (htab->amt_destination_addr != NULL) - free (htab->amt_destination_addr); + free (htab->amt_stub_offsets); + free (htab->amt_destination_addr); bfd_hash_table_free (&htab->bstab); _bfd_elf_link_hash_table_free (obfd); @@ -875,7 +873,7 @@ elf32_avr_link_hash_table_create (bfd *abfd) { struct elf32_avr_link_hash_table *htab; - bfd_size_type amt = sizeof (*htab); + size_t amt = sizeof (*htab); htab = bfd_zmalloc (amt); if (htab == NULL) @@ -1054,7 +1052,7 @@ if (srel > ((1 << 7) - 1) || (srel < - (1 << 7))) return bfd_reloc_overflow; x = bfd_get_16 (input_bfd, contents); - x = (x & 0xfc07) | (((srel >> 1) << 3) & 0x3f8); + x = (x & 0xfc07) | (((srel >> 1) * 8) & 0x3f8); bfd_put_16 (input_bfd, x, contents); break; @@ -3166,21 +3164,17 @@ } } - if (internal_relocs != NULL - && elf_section_data (sec)->relocs != internal_relocs) + if (elf_section_data (sec)->relocs != internal_relocs) free (internal_relocs); return TRUE; error_return: - if (isymbuf != NULL - && symtab_hdr->contents != (unsigned char *) isymbuf) + if (symtab_hdr->contents != (unsigned char *) isymbuf) free (isymbuf); - if (contents != NULL - && elf_section_data (sec)->this_hdr.contents != contents) + if (elf_section_data (sec)->this_hdr.contents != contents) free (contents); - if (internal_relocs != NULL - && elf_section_data (sec)->relocs != internal_relocs) + if (elf_section_data (sec)->relocs != internal_relocs) free (internal_relocs); return FALSE; @@ -3273,10 +3267,8 @@ isymbuf, sections)) goto error_return; - if (sections != NULL) - free (sections); - if (isymbuf != NULL - && symtab_hdr->contents != (unsigned char *) isymbuf) + free (sections); + if (symtab_hdr->contents != (unsigned char *) isymbuf) free (isymbuf); if (elf_section_data (input_section)->relocs != internal_relocs) free (internal_relocs); @@ -3285,13 +3277,10 @@ return data; error_return: - if (sections != NULL) - free (sections); - if (isymbuf != NULL - && symtab_hdr->contents != (unsigned char *) isymbuf) + free (sections); + if (symtab_hdr->contents != (unsigned char *) isymbuf) free (isymbuf); - if (internal_relocs != NULL - && elf_section_data (input_section)->relocs != internal_relocs) + if (elf_section_data (input_section)->relocs != internal_relocs) free (internal_relocs); return NULL; } @@ -3494,7 +3483,7 @@ unsigned int top_id, top_index; asection *section; asection **input_list, **list; - bfd_size_type amt; + size_t amt; struct elf32_avr_link_hash_table *htab = avr_link_hash_table (info); if (htab == NULL || htab->no_stubs) @@ -3558,7 +3547,7 @@ unsigned int bfd_indx; Elf_Internal_Sym *local_syms, **all_local_syms; struct elf32_avr_link_hash_table *htab = avr_link_hash_table (info); - bfd_size_type amt; + size_t amt; if (htab == NULL) return -1; @@ -4050,7 +4039,7 @@ ptr++; flags = *((bfd_byte *) ptr); ptr++; - record_count = *((uint16_t *) ptr); + record_count = bfd_get_16 (abfd, ptr); ptr+=2; BFD_ASSERT (ptr - contents == AVR_PROPERTY_SECTION_HEADER_SIZE); @@ -4117,7 +4106,7 @@ } } - address = *((uint32_t *) ptr); + address = bfd_get_32 (abfd, ptr); ptr += 4; size -= 4; @@ -4159,7 +4148,7 @@ /* Just a 4-byte fill to load. */ if (size < 4) goto load_failed; - r_list->records [i].data.org.fill = *((uint32_t *) ptr); + r_list->records [i].data.org.fill = bfd_get_32 (abfd, ptr); ptr += 4; size -= 4; break; @@ -4167,7 +4156,7 @@ /* Just a 4-byte alignment to load. */ if (size < 4) goto load_failed; - r_list->records [i].data.align.bytes = *((uint32_t *) ptr); + r_list->records [i].data.align.bytes = bfd_get_32 (abfd, ptr); ptr += 4; size -= 4; /* Just initialise PRECEDING_DELETED field, this field is @@ -4178,9 +4167,9 @@ /* A 4-byte alignment, and a 4-byte fill to load. */ if (size < 8) goto load_failed; - r_list->records [i].data.align.bytes = *((uint32_t *) ptr); + r_list->records [i].data.align.bytes = bfd_get_32 (abfd, ptr); ptr += 4; - r_list->records [i].data.align.fill = *((uint32_t *) ptr); + r_list->records [i].data.align.fill = bfd_get_32 (abfd, ptr); ptr += 4; size -= 8; /* Just initialise PRECEDING_DELETED field, this field is diff -Nru gdb-9.1/bfd/elf32-avr.h gdb-10.2/bfd/elf32-avr.h --- gdb-9.1/bfd/elf32-avr.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-avr.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* AVR-specific support for 32-bit ELF. - Copyright (C) 2006-2019 Free Software Foundation, Inc. + Copyright (C) 2006-2020 Free Software Foundation, Inc. Written by Bjoern Haase diff -Nru gdb-9.1/bfd/elf32-bfin.c gdb-10.2/bfd/elf32-bfin.c --- gdb-9.1/bfd/elf32-bfin.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-bfin.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* ADI Blackfin BFD support for 32-bit ELF. - Copyright (C) 2005-2019 Free Software Foundation, Inc. + Copyright (C) 2005-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -1668,9 +1668,10 @@ /* Get the Blackfin ELF linker hash table from a link_info structure. */ -#define bfinfdpic_hash_table(info) \ - (elf_hash_table_id ((struct elf_link_hash_table *) ((info)->hash)) \ - == BFIN_ELF_DATA ? ((struct bfinfdpic_elf_link_hash_table *) ((info)->hash)) : NULL) +#define bfinfdpic_hash_table(p) \ + ((is_elf_hash_table ((p)->hash) \ + && elf_hash_table_id (elf_hash_table (p)) == BFIN_ELF_DATA) \ + ? (struct bfinfdpic_elf_link_hash_table *) (p)->hash : NULL) #define bfinfdpic_got_section(info) \ (bfinfdpic_hash_table (info)->elf.sgot) @@ -1728,7 +1729,7 @@ bfinfdpic_elf_link_hash_table_create (bfd *abfd) { struct bfinfdpic_elf_link_hash_table *ret; - bfd_size_type amt = sizeof (struct bfinfdpic_elf_link_hash_table); + size_t amt = sizeof (struct bfinfdpic_elf_link_hash_table); ret = bfd_zmalloc (amt); if (ret == NULL) @@ -2552,6 +2553,7 @@ h = NULL; sym = NULL; sec = NULL; + picrel = NULL; if (r_symndx < symtab_hdr->sh_info) { @@ -2614,6 +2616,9 @@ case R_BFIN_FUNCDESC_GOTOFFLO: case R_BFIN_FUNCDESC: case R_BFIN_FUNCDESC_VALUE: + if ((input_section->flags & SEC_ALLOC) == 0) + break; + if (h != NULL) picrel = bfinfdpic_relocs_info_for_global (bfinfdpic_relocs_info (info), input_bfd, h, @@ -3015,11 +3020,11 @@ input file basename is crt0.o only once. */ if (silence_segment_error == 1) silence_segment_error = - (strlen (input_bfd->filename) == 6 - && filename_cmp (input_bfd->filename, "crt0.o") == 0) - || (strlen (input_bfd->filename) > 6 - && filename_cmp (input_bfd->filename - + strlen (input_bfd->filename) - 7, + (strlen (bfd_get_filename (input_bfd)) == 6 + && filename_cmp (bfd_get_filename (input_bfd), "crt0.o") == 0) + || (strlen (bfd_get_filename (input_bfd)) > 6 + && filename_cmp (bfd_get_filename (input_bfd) + + strlen (bfd_get_filename (input_bfd)) - 7, "/crt0.o") == 0) ? -1 : 0; #endif @@ -4063,26 +4068,6 @@ if (!_bfinfdpic_size_got_plt (output_bfd, &gpinfo)) return FALSE; - if (elf_hash_table (info)->dynamic_sections_created) - { - if (bfinfdpic_got_section (info)->size) - if (!_bfd_elf_add_dynamic_entry (info, DT_PLTGOT, 0)) - return FALSE; - - if (bfinfdpic_pltrel_section (info)->size) - if (!_bfd_elf_add_dynamic_entry (info, DT_PLTRELSZ, 0) - || !_bfd_elf_add_dynamic_entry (info, DT_PLTREL, DT_REL) - || !_bfd_elf_add_dynamic_entry (info, DT_JMPREL, 0)) - return FALSE; - - if (bfinfdpic_gotrel_section (info)->size) - if (!_bfd_elf_add_dynamic_entry (info, DT_REL, 0) - || !_bfd_elf_add_dynamic_entry (info, DT_RELSZ, 0) - || !_bfd_elf_add_dynamic_entry (info, DT_RELENT, - sizeof (Elf32_External_Rel))) - return FALSE; - } - s = bfd_get_linker_section (dynobj, ".dynbss"); if (s && s->size == 0) s->flags |= SEC_EXCLUDE; @@ -4091,7 +4076,7 @@ if (s && s->size == 0) s->flags |= SEC_EXCLUDE; - return TRUE; + return _bfd_elf_add_dynamic_tags (output_bfd, info, TRUE); } static bfd_boolean @@ -4755,6 +4740,10 @@ flagword old_flags, new_flags; bfd_boolean error = FALSE; + /* FIXME: What should be checked when linking shared libraries? */ + if ((ibfd->flags & DYNAMIC) != 0) + return TRUE; + new_flags = elf_elfheader (ibfd)->e_flags; old_flags = elf_elfheader (obfd)->e_flags; @@ -4803,16 +4792,6 @@ struct bfin_pcrel_relocs_copied *pcrel_relocs_copied; }; -/* bfin ELF linker hash table. */ - -struct bfin_link_hash_table -{ - struct elf_link_hash_table root; - - /* Small local sym cache. */ - struct sym_cache sym_cache; -}; - #define bfin_hash_entry(ent) ((struct bfin_link_hash_entry *) (ent)) static struct bfd_hash_entry * @@ -4841,15 +4820,14 @@ static struct bfd_link_hash_table * bfin_link_hash_table_create (bfd * abfd) { - struct bfin_link_hash_table *ret; - bfd_size_type amt = sizeof (struct bfin_link_hash_table); + struct elf_link_hash_table *ret; + size_t amt = sizeof (struct elf_link_hash_table); ret = bfd_zmalloc (amt); if (ret == NULL) return NULL; - if (!_bfd_elf_link_hash_table_init (&ret->root, abfd, - bfin_link_hash_newfunc, + if (!_bfd_elf_link_hash_table_init (ret, abfd, bfin_link_hash_newfunc, sizeof (struct elf_link_hash_entry), BFIN_ELF_DATA)) { @@ -4857,9 +4835,7 @@ return NULL; } - ret->sym_cache.abfd = NULL; - - return &ret->root.root; + return &ret->root; } /* The size in bytes of an entry in the procedure linkage table. */ @@ -5391,18 +5367,16 @@ strncpy ((char *) p + 4, targetsec->output_section->name, 8); } - if (isymbuf != NULL && symtab_hdr->contents != (unsigned char *) isymbuf) + if (symtab_hdr->contents != (unsigned char *) isymbuf) free (isymbuf); - if (internal_relocs != NULL - && elf_section_data (datasec)->relocs != internal_relocs) + if (elf_section_data (datasec)->relocs != internal_relocs) free (internal_relocs); return TRUE; -error_return: - if (isymbuf != NULL && symtab_hdr->contents != (unsigned char *) isymbuf) + error_return: + if (symtab_hdr->contents != (unsigned char *) isymbuf) free (isymbuf); - if (internal_relocs != NULL - && elf_section_data (datasec)->relocs != internal_relocs) + if (elf_section_data (datasec)->relocs != internal_relocs) free (internal_relocs); return FALSE; } @@ -5432,10 +5406,6 @@ #define bfd_elf32_bfd_is_local_label_name \ bfin_is_local_label_name -#define bfin_hash_table(p) \ - ((struct bfin_link_hash_table *) (p)->hash) - - #define elf_backend_create_dynamic_sections \ _bfd_elf_create_dynamic_sections diff -Nru gdb-9.1/bfd/elf32-bfin.h gdb-10.2/bfd/elf32-bfin.h --- gdb-9.1/bfd/elf32-bfin.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-bfin.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* ADI Blackfin BFD support for 32-bit ELF. - Copyright (C) 2019 Free Software Foundation, Inc. + Copyright (C) 2019-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/elf32.c gdb-10.2/bfd/elf32.c --- gdb-9.1/bfd/elf32.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* ELF 32-bit executable support for BFD. - Copyright (C) 1993-2019 Free Software Foundation, Inc. + Copyright (C) 1993-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/elf32-cr16.c gdb-10.2/bfd/elf32-cr16.c --- gdb-9.1/bfd/elf32-cr16.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-cr16.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD back-end for National Semiconductor's CR16 ELF - Copyright (C) 2007-2019 Free Software Foundation, Inc. + Copyright (C) 2007-2020 Free Software Foundation, Inc. Written by M R Swami Reddy. This file is part of BFD, the Binary File Descriptor library. @@ -824,10 +824,9 @@ } } - result = TRUE; - fail: - if (isymbuf != NULL) - free (isymbuf); + result = TRUE; + fail: + free (isymbuf); return result; } @@ -923,10 +922,7 @@ as signed or unsigned. */ check = Rvalue >> howto->rightshift; - /* Assumes two's complement. This expression avoids - overflow if howto->bitsize is the number of bits in - bfd_vma. */ - reloc_bits = (((1 << (howto->bitsize - 1)) - 1) << 1) | 1; + reloc_bits = ((bfd_vma) 1 << (howto->bitsize - 1) << 1) - 1; /* For GOT and GOTC relocs no boundary checks applied. */ if (!((r_type == R_CR16_GOT_REGREL20) @@ -1572,10 +1568,8 @@ isymbuf, sections)) goto error_return; - if (sections != NULL) - free (sections); - if (isymbuf != NULL - && symtab_hdr->contents != (unsigned char *) isymbuf) + free (sections); + if (symtab_hdr->contents != (unsigned char *) isymbuf) free (isymbuf); if (elf_section_data (input_section)->relocs != internal_relocs) free (internal_relocs); @@ -1584,13 +1578,10 @@ return data; error_return: - if (sections != NULL) - free (sections); - if (isymbuf != NULL - && symtab_hdr->contents != (unsigned char *) isymbuf) + free (sections); + if (symtab_hdr->contents != (unsigned char *) isymbuf) free (isymbuf); - if (internal_relocs != NULL - && elf_section_data (input_section)->relocs != internal_relocs) + if (elf_section_data (input_section)->relocs != internal_relocs) free (internal_relocs); return NULL; } @@ -1641,7 +1632,7 @@ elf32_cr16_link_hash_table_create (bfd *abfd) { struct elf_link_hash_table *ret; - bfd_size_type amt = sizeof (struct elf_link_hash_table); + size_t amt = sizeof (struct elf_link_hash_table); ret = (struct elf_link_hash_table *) bfd_zmalloc (amt); if (ret == (struct elf_link_hash_table *) NULL) @@ -2174,21 +2165,17 @@ } - if (internal_relocs != NULL - && elf_section_data (sec)->relocs != internal_relocs) + if (elf_section_data (sec)->relocs != internal_relocs) free (internal_relocs); return TRUE; error_return: - if (isymbuf != NULL - && symtab_hdr->contents != (unsigned char *) isymbuf) + if (symtab_hdr->contents != (unsigned char *) isymbuf) free (isymbuf); - if (contents != NULL - && elf_section_data (sec)->this_hdr.contents != contents) + if (elf_section_data (sec)->this_hdr.contents != contents) free (contents); - if (internal_relocs != NULL - && elf_section_data (sec)->relocs != internal_relocs) + if (elf_section_data (sec)->relocs != internal_relocs) free (internal_relocs); return FALSE; @@ -2417,9 +2404,7 @@ { bfd * dynobj; asection * s; - bfd_boolean plt; bfd_boolean relocs; - bfd_boolean reltext; dynobj = elf_hash_table (info)->dynobj; BFD_ASSERT (dynobj != NULL); @@ -2452,9 +2437,7 @@ /* The check_relocs and adjust_dynamic_symbol entry points have determined the sizes of the various dynamic sections. Allocate memory for them. */ - plt = FALSE; relocs = FALSE; - reltext = FALSE; for (s = dynobj->sections; s != NULL; s = s->next) { const char * name; @@ -2469,34 +2452,16 @@ if (strcmp (name, ".plt") == 0) { /* Remember whether there is a PLT. */ - plt = s->size != 0; + ; } else if (CONST_STRNEQ (name, ".rela")) { if (s->size != 0) { - asection * target; - /* Remember whether there are any reloc sections other than .rela.plt. */ if (strcmp (name, ".rela.plt") != 0) - { - const char * outname; - - relocs = TRUE; - - /* If this relocation section applies to a read only - section, then we probably need a DT_TEXTREL - entry. The entries in the .rela.plt section - really apply to the .got section, which we - created ourselves and so know is not readonly. */ - outname = bfd_section_name (s->output_section); - target = bfd_get_section_by_name (output_bfd, outname + 5); - if (target != NULL - && (target->flags & SEC_READONLY) != 0 - && (target->flags & SEC_ALLOC) != 0) - reltext = TRUE; - } + relocs = TRUE; /* We use the reloc_count field as a counter if we need to copy relocs into the output file. */ @@ -2536,45 +2501,7 @@ return FALSE; } - if (elf_hash_table (info)->dynamic_sections_created) - { - /* Add some entries to the .dynamic section. We fill in the - values later, in _bfd_cr16_elf_finish_dynamic_sections, - but we must add the entries now so that we get the correct - size for the .dynamic section. The DT_DEBUG entry is filled - in by the dynamic linker and used by the debugger. */ - if (! bfd_link_executable (info)) - { - if (!_bfd_elf_add_dynamic_entry (info, DT_DEBUG, 0)) - return FALSE; - } - - if (plt) - { - if (!_bfd_elf_add_dynamic_entry (info, DT_PLTGOT, 0) - || !_bfd_elf_add_dynamic_entry (info, DT_PLTRELSZ, 0) - || !_bfd_elf_add_dynamic_entry (info, DT_PLTREL, DT_RELA) - || !_bfd_elf_add_dynamic_entry (info, DT_JMPREL, 0)) - return FALSE; - } - - if (relocs) - { - if (!_bfd_elf_add_dynamic_entry (info, DT_RELA, 0) - || !_bfd_elf_add_dynamic_entry (info, DT_RELASZ, 0) - || !_bfd_elf_add_dynamic_entry (info, DT_RELAENT, - sizeof (Elf32_External_Rela))) - return FALSE; - } - - if (reltext) - { - if (!_bfd_elf_add_dynamic_entry (info, DT_TEXTREL, 0)) - return FALSE; - } - } - - return TRUE; + return _bfd_elf_add_dynamic_tags (output_bfd, info, relocs); } /* Finish up dynamic symbol handling. We set the contents of various @@ -2847,18 +2774,16 @@ strncpy ((char *) p + 4, targetsec->output_section->name, 4); } - if (isymbuf != NULL && symtab_hdr->contents != (unsigned char *) isymbuf) + if (symtab_hdr->contents != (unsigned char *) isymbuf) free (isymbuf); - if (internal_relocs != NULL - && elf_section_data (datasec)->relocs != internal_relocs) + if (elf_section_data (datasec)->relocs != internal_relocs) free (internal_relocs); return TRUE; -error_return: - if (isymbuf != NULL && symtab_hdr->contents != (unsigned char *) isymbuf) + error_return: + if (symtab_hdr->contents != (unsigned char *) isymbuf) free (isymbuf); - if (internal_relocs != NULL - && elf_section_data (datasec)->relocs != internal_relocs) + if (elf_section_data (datasec)->relocs != internal_relocs) free (internal_relocs); return FALSE; } diff -Nru gdb-9.1/bfd/elf32-cr16.h gdb-10.2/bfd/elf32-cr16.h --- gdb-9.1/bfd/elf32-cr16.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-cr16.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD back-end for National Semiconductor's CR16 ELF - Copyright (C) 2019 Free Software Foundation, Inc. + Copyright (C) 2019-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/elf32-cris.c gdb-10.2/bfd/elf32-cris.c --- gdb-9.1/bfd/elf32-cris.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-cris.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* CRIS-specific support for 32-bit ELF. - Copyright (C) 2000-2019 Free Software Foundation, Inc. + Copyright (C) 2000-2020 Free Software Foundation, Inc. Contributed by Axis Communications AB. Written by Hans-Peter Nilsson, based on elf32-fr30.c PIC and shlib bits based primarily on elf32-m68k.c and elf32-i386.c. @@ -837,8 +837,9 @@ /* Get the CRIS ELF linker hash table from a link_info structure. */ #define elf_cris_hash_table(p) \ - (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \ - == CRIS_ELF_DATA ? ((struct elf_cris_link_hash_table *) ((p)->hash)) : NULL) + ((is_elf_hash_table ((p)->hash) \ + && elf_hash_table_id (elf_hash_table (p)) == CRIS_ELF_DATA) \ + ? (struct elf_cris_link_hash_table *) (p)->hash : NULL) /* Get the CRIS ELF linker hash entry from a regular hash entry (the "parent class"). The .root reference is just a simple type @@ -889,7 +890,7 @@ elf_cris_link_hash_table_create (bfd *abfd) { struct elf_cris_link_hash_table *ret; - bfd_size_type amt = sizeof (struct elf_cris_link_hash_table); + size_t amt = sizeof (struct elf_cris_link_hash_table); ret = ((struct elf_cris_link_hash_table *) bfd_zmalloc (amt)); if (ret == (struct elf_cris_link_hash_table *) NULL) @@ -3513,7 +3514,6 @@ struct elf_cris_link_hash_table * htab; bfd *dynobj; asection *s; - bfd_boolean plt; bfd_boolean relocs; htab = elf_cris_hash_table (info); @@ -3569,7 +3569,6 @@ /* The check_relocs and adjust_dynamic_symbol entry points have determined the sizes of the various dynamic sections. Allocate memory for them. */ - plt = FALSE; relocs = FALSE; for (s = dynobj->sections; s != NULL; s = s->next) { @@ -3584,8 +3583,7 @@ if (strcmp (name, ".plt") == 0) { - /* Remember whether there is a PLT. */ - plt = s->size != 0; + ; } else if (strcmp (name, ".got.plt") == 0) { @@ -3650,49 +3648,7 @@ return FALSE; } - if (elf_hash_table (info)->dynamic_sections_created) - { - /* Add some entries to the .dynamic section. We fill in the - values later, in elf_cris_finish_dynamic_sections, but we - must add the entries now so that we get the correct size for - the .dynamic section. The DT_DEBUG entry is filled in by the - dynamic linker and used by the debugger. */ -#define add_dynamic_entry(TAG, VAL) \ - _bfd_elf_add_dynamic_entry (info, TAG, VAL) - - if (!bfd_link_pic (info)) - { - if (!add_dynamic_entry (DT_DEBUG, 0)) - return FALSE; - } - - if (plt) - { - if (!add_dynamic_entry (DT_PLTGOT, 0) - || !add_dynamic_entry (DT_PLTRELSZ, 0) - || !add_dynamic_entry (DT_PLTREL, DT_RELA) - || !add_dynamic_entry (DT_JMPREL, 0)) - return FALSE; - } - - if (relocs) - { - if (!add_dynamic_entry (DT_RELA, 0) - || !add_dynamic_entry (DT_RELASZ, 0) - || !add_dynamic_entry (DT_RELAENT, sizeof (Elf32_External_Rela))) - return FALSE; - } - - if ((info->flags & DF_TEXTREL) != 0) - { - if (!add_dynamic_entry (DT_TEXTREL, 0)) - return FALSE; - info->flags |= DF_TEXTREL; - } - } -#undef add_dynamic_entry - - return TRUE; + return _bfd_elf_add_dynamic_tags (output_bfd, info, relocs); } /* This function is called via elf_cris_link_hash_traverse if we are diff -Nru gdb-9.1/bfd/elf32-crx.c gdb-10.2/bfd/elf32-crx.c --- gdb-9.1/bfd/elf32-crx.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-crx.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD back-end for National Semiconductor's CRX ELF - Copyright (C) 2004-2019 Free Software Foundation, Inc. + Copyright (C) 2004-2020 Free Software Foundation, Inc. Written by Tomer Levi, NSC, Israel. This file is part of BFD, the Binary File Descriptor library. @@ -506,25 +506,18 @@ as signed or unsigned. */ check = Rvalue >> howto->rightshift; - /* Assumes two's complement. This expression avoids - overflow if howto->bitsize is the number of bits in - bfd_vma. */ - reloc_bits = (((1 << (howto->bitsize - 1)) - 1) << 1) | 1; - - if (((bfd_vma) check & ~reloc_bits) != 0 - && (((bfd_vma) check & ~reloc_bits) - != (-(bfd_vma) 1 & ~reloc_bits))) + reloc_bits = ((bfd_vma) 1 << (howto->bitsize - 1) << 1) - 1; + + if ((check & ~reloc_bits) != 0 + && (check & ~reloc_bits) != ((bfd_vma) -1 & ~reloc_bits)) { /* The above right shift is incorrect for a signed value. See if turning on the upper bits fixes the overflow. */ if (howto->rightshift && (bfd_signed_vma) Rvalue < 0) { - check |= ((bfd_vma) - 1 - & ~((bfd_vma) - 1 - >> howto->rightshift)); - if (((bfd_vma) check & ~reloc_bits) - != (-(bfd_vma) 1 & ~reloc_bits)) + check |= (bfd_vma) -1 & ~((bfd_vma) -1 >> howto->rightshift); + if ((check & ~reloc_bits) != ((bfd_vma) -1 & ~reloc_bits)) return bfd_reloc_overflow; } else @@ -532,7 +525,7 @@ } /* Drop unwanted bits from the value we are relocating to. */ - Rvalue >>= (bfd_vma) howto->rightshift; + Rvalue >>= howto->rightshift; /* Apply dst_mask to select only relocatable part of the insn. */ Rvalue &= howto->dst_mask; @@ -805,10 +798,8 @@ isymbuf, sections)) goto error_return; - if (sections != NULL) - free (sections); - if (isymbuf != NULL - && symtab_hdr->contents != (unsigned char *) isymbuf) + free (sections); + if (symtab_hdr->contents != (unsigned char *) isymbuf) free (isymbuf); if (elf_section_data (input_section)->relocs != internal_relocs) free (internal_relocs); @@ -817,13 +808,10 @@ return data; error_return: - if (sections != NULL) - free (sections); - if (isymbuf != NULL - && symtab_hdr->contents != (unsigned char *) isymbuf) + free (sections); + if (symtab_hdr->contents != (unsigned char *) isymbuf) free (isymbuf); - if (internal_relocs != NULL - && elf_section_data (input_section)->relocs != internal_relocs) + if (elf_section_data (input_section)->relocs != internal_relocs) free (internal_relocs); return NULL; } @@ -1289,21 +1277,17 @@ } } - if (internal_relocs != NULL - && elf_section_data (sec)->relocs != internal_relocs) + if (elf_section_data (sec)->relocs != internal_relocs) free (internal_relocs); return TRUE; error_return: - if (isymbuf != NULL - && symtab_hdr->contents != (unsigned char *) isymbuf) + if (symtab_hdr->contents != (unsigned char *) isymbuf) free (isymbuf); - if (contents != NULL - && elf_section_data (sec)->this_hdr.contents != contents) + if (elf_section_data (sec)->this_hdr.contents != contents) free (contents); - if (internal_relocs != NULL - && elf_section_data (sec)->relocs != internal_relocs) + if (elf_section_data (sec)->relocs != internal_relocs) free (internal_relocs); return FALSE; diff -Nru gdb-9.1/bfd/elf32-csky.c gdb-10.2/bfd/elf32-csky.c --- gdb-9.1/bfd/elf32-csky.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-csky.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* 32-bit ELF support for C-SKY. - Copyright (C) 1998-2019 Free Software Foundation, Inc. + Copyright (C) 1998-2020 Free Software Foundation, Inc. Contributed by C-SKY Microsystems and Mentor Graphics. This file is part of BFD, the Binary File Descriptor library. @@ -56,14 +56,15 @@ static struct csky_arch_for_merge csky_archs[] = { /* 510 and 610 merge to 610 without warning. */ - { "510", CSKY_ARCH_510, CSKY_V1, 0, 0}, - { "610", CSKY_ARCH_610, CSKY_V1, 1, 0}, + { "ck510", CSKY_ARCH_510, CSKY_V1, 0, 0}, + { "ck610", CSKY_ARCH_610, CSKY_V1, 1, 0}, /* 801, 802, 803, 807, 810 merge to largest one. */ - { "801", CSKY_ARCH_801, CSKY_V2, 0, 1}, - { "802", CSKY_ARCH_802, CSKY_V2, 1, 1}, - { "803", CSKY_ARCH_803, CSKY_V2, 2, 1}, - { "807", CSKY_ARCH_807, CSKY_V2, 3, 1}, - { "810", CSKY_ARCH_810, CSKY_V2, 4, 1}, + { "ck801", CSKY_ARCH_801, CSKY_V2, 0, 1}, + { "ck802", CSKY_ARCH_802, CSKY_V2, 1, 1}, + { "ck803", CSKY_ARCH_803, CSKY_V2, 2, 1}, + { "ck807", CSKY_ARCH_807, CSKY_V2, 3, 1}, + { "ck810", CSKY_ARCH_810, CSKY_V2, 4, 1}, + { "ck860", CSKY_ARCH_860, CSKY_V2, 5, 1}, { NULL, 0, 0, 0, 0} }; @@ -1163,8 +1164,6 @@ int plt_refcount; /* For sub jsri2bsr relocs count. */ int jsri2bsr_refcount; - /* Track dynamic relocs copied for this symbol. */ - struct elf_dyn_relocs *dyn_relocs; #define GOT_UNKNOWN 0 #define GOT_NORMAL 1 @@ -1186,11 +1185,10 @@ (info))) /* Get the C-SKY ELF linker hash table from a link_info structure. */ -#define csky_elf_hash_table(info) \ - ((elf_hash_table_id ((struct elf_link_hash_table *) ((info)->hash)) \ - == CSKY_ELF_DATA) \ - ? ((struct csky_elf_link_hash_table *) ((info)->hash)) \ - : NULL) +#define csky_elf_hash_table(p) \ + ((is_elf_hash_table ((p)->hash) \ + && elf_hash_table_id (elf_hash_table (p)) == CSKY_ELF_DATA) \ + ? (struct csky_elf_link_hash_table *) (p)->hash : NULL) #define csky_elf_hash_entry(ent) ((struct csky_elf_link_hash_entry*)(ent)) @@ -1210,9 +1208,6 @@ { struct elf_link_hash_table elf; - /* Small local sym cache. */ - struct sym_cache sym_cache; - /* Data for R_CKCORE_TLS_LDM32 relocations. */ union { @@ -1429,7 +1424,6 @@ struct csky_elf_link_hash_entry *eh; eh = (struct csky_elf_link_hash_entry *) ret; - eh->dyn_relocs = NULL; eh->plt_refcount = 0; eh->jsri2bsr_refcount = 0; eh->tls_type = GOT_NORMAL; @@ -1500,7 +1494,7 @@ csky_elf_link_hash_table_create (bfd *abfd) { struct csky_elf_link_hash_table *ret; - bfd_size_type amt = sizeof (struct csky_elf_link_hash_table); + size_t amt = sizeof (struct csky_elf_link_hash_table); ret = (struct csky_elf_link_hash_table*) bfd_zmalloc (amt); if (ret == NULL) @@ -1804,7 +1798,7 @@ h->got.offset = (bfd_vma) -1; eh = (struct csky_elf_link_hash_entry *) h; - if (eh->dyn_relocs == NULL) + if (h->dyn_relocs == NULL) return TRUE; /* In the shared -Bsymbolic case, discard space allocated for @@ -1819,7 +1813,7 @@ { struct elf_dyn_relocs **pp; - for (pp = &eh->dyn_relocs; (p = *pp) != NULL; ) + for (pp = &h->dyn_relocs; (p = *pp) != NULL; ) { p->count -= p->pc_count; p->pc_count = 0; @@ -1832,17 +1826,17 @@ if (eh->jsri2bsr_refcount && h->root.type == bfd_link_hash_defined - && eh->dyn_relocs != NULL) - eh->dyn_relocs->count -= eh->jsri2bsr_refcount; + && h->dyn_relocs != NULL) + h->dyn_relocs->count -= eh->jsri2bsr_refcount; /* Also discard relocs on undefined weak syms with non-default visibility. */ - if (eh->dyn_relocs != NULL + if (h->dyn_relocs != NULL && h->root.type == bfd_link_hash_undefweak) { if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT || UNDEFWEAK_NO_DYNAMIC_RELOC (info, h)) - eh->dyn_relocs = NULL; + h->dyn_relocs = NULL; /* Make sure undefined weak symbols are output as a dynamic symbol in PIEs. */ @@ -1881,13 +1875,13 @@ goto keep; } - eh->dyn_relocs = NULL; + h->dyn_relocs = NULL; keep: ; } /* Finally, allocate space. */ - for (p = eh->dyn_relocs; p != NULL; p = p->next) + for (p = h->dyn_relocs; p != NULL; p = p->next) { asection *srelgot = htab->elf.srelgot; srelgot->size += p->count * sizeof (Elf32_External_Rela); @@ -1896,48 +1890,6 @@ return TRUE; } -static asection * -readonly_dynrelocs (struct elf_link_hash_entry *h) -{ - struct elf_dyn_relocs *p; - - for (p = csky_elf_hash_entry (h)->dyn_relocs; p != NULL; p = p->next) - { - asection *s = p->sec->output_section; - - if (s != NULL && (s->flags & SEC_READONLY) != 0) - return p->sec; - } - return NULL; -} - -/* Set DF_TEXTREL if we find any dynamic relocs that apply to - read-only sections. */ - -static bfd_boolean -maybe_set_textrel (struct elf_link_hash_entry *h, void *info_p) -{ - asection *sec; - - if (h->root.type == bfd_link_hash_indirect) - return TRUE; - - sec = readonly_dynrelocs (h); - if (sec != NULL) - { - struct bfd_link_info *info = (struct bfd_link_info *) info_p; - - info->flags |= DF_TEXTREL; - info->callbacks->minfo - (_("%pB: dynamic relocation against `%pT' in read-only section `%pA'\n"), - sec->owner, h->root.root.string, sec); - - /* Not an error, just cut short the traversal. */ - return FALSE; - } - return TRUE; -} - /* Set the sizes of the dynamic sections. */ static bfd_boolean @@ -2138,48 +2090,8 @@ } if (htab->elf.dynamic_sections_created) - { - /* Add some entries to the .dynamic section. We fill in the - values later, in csky_elf_finish_dynamic_sections, but we - must add the entries now so that we get the correct size for - the .dynamic section. The DT_DEBUG entry is filled in by the - dynamic linker and used by the debugger. */ -#define add_dynamic_entry(TAG, VAL) \ - _bfd_elf_add_dynamic_entry (info, TAG, VAL) - - if (bfd_link_executable (info) && !add_dynamic_entry (DT_DEBUG, 0)) - return FALSE; - - if (htab->elf.sgot->size != 0 || htab->elf.splt->size) - { - if (!add_dynamic_entry (DT_PLTGOT, 0) - || !add_dynamic_entry (DT_PLTRELSZ, 0) - || !add_dynamic_entry (DT_PLTREL, DT_RELA) - || !add_dynamic_entry (DT_JMPREL, 0)) - return FALSE; - } - - if (relocs) - { - if (!add_dynamic_entry (DT_RELA, 0) - || !add_dynamic_entry (DT_RELASZ, 0) - || !add_dynamic_entry (DT_RELAENT, - sizeof (Elf32_External_Rela))) - return FALSE; - - /* If any dynamic relocs apply to a read-only section, - then we need a DT_TEXTREL entry. */ - if ((info->flags & DF_TEXTREL) == 0) - elf_link_hash_traverse (&htab->elf, maybe_set_textrel, info); - - if ((info->flags & DF_TEXTREL) != 0 - && !add_dynamic_entry (DT_TEXTREL, 0)) - return FALSE; - } - } -#undef add_dynamic_entry - - return TRUE; + htab->elf.dt_pltgot_required = htab->elf.sgot->size != 0; + return _bfd_elf_add_dynamic_tags (output_bfd, info, relocs); } /* Finish up dynamic symbol handling. We set the contents of various @@ -2465,35 +2377,6 @@ edir = (struct csky_elf_link_hash_entry *) dir; eind = (struct csky_elf_link_hash_entry *) ind; - if (eind->dyn_relocs != NULL) - { - if (edir->dyn_relocs != NULL) - { - struct elf_dyn_relocs **pp; - struct elf_dyn_relocs *p; - - /* Add reloc counts against the indirect sym to the direct sym - list. Merge any entries against the same section. */ - for (pp = &eind->dyn_relocs; (p = *pp) != NULL; ) - { - struct elf_dyn_relocs *q; - - for (q = edir->dyn_relocs; q != NULL; q = q->next) - if (q->sec == p->sec) - { - q->pc_count += p->pc_count; - q->count += p->count; - *pp = p->next; - break; - } - if (q == NULL) - pp = &p->next; - } - *pp = edir->dyn_relocs; - } - edir->dyn_relocs = eind->dyn_relocs; - eind->dyn_relocs = NULL; - } if (ind->root.type == bfd_link_hash_indirect && dir->got.refcount <= 0) { @@ -2591,7 +2474,7 @@ if (r_symndx < symtab_hdr->sh_info) { /* A local symbol. */ - isym = bfd_sym_from_r_symndx (&htab->sym_cache, + isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache, abfd, r_symndx); if (isym == NULL) return FALSE; @@ -2687,7 +2570,7 @@ || (ELF32_R_TYPE (rel->r_info) == R_CKCORE_PCREL_JSR_IMM11BY2)) eh->jsri2bsr_refcount += 1; - head = &eh->dyn_relocs; + head = &h->dyn_relocs; } else { @@ -2698,7 +2581,7 @@ asection *s; Elf_Internal_Sym *loc_isym; - loc_isym = bfd_sym_from_r_symndx (&htab->sym_cache, + loc_isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache, abfd, r_symndx); if (loc_isym == NULL) return FALSE; @@ -2712,7 +2595,7 @@ p = *head; if (p == NULL || p->sec != sec) { - bfd_size_type amt = sizeof *p; + size_t amt = sizeof *p; p = ((struct elf_dyn_relocs *) bfd_alloc (htab->elf.dynobj, amt)); if (p == NULL) @@ -2920,6 +2803,199 @@ return csky_arch; } +static csky_arch_for_merge * +csky_find_arch_with_name (const char *name) +{ + csky_arch_for_merge *csky_arch = NULL; + const char *msg; + + if (name == NULL) + return NULL; + + for (csky_arch = csky_archs; csky_arch->name != NULL; csky_arch++) + { + if (strncmp (csky_arch->name, name, strlen (csky_arch->name)) == 0) + break; + } + if (csky_arch == NULL) + { + msg = _("warning: unrecognised arch name '%#x'"); + (*_bfd_error_handler) (msg, name); + bfd_set_error (bfd_error_wrong_format); + } + return csky_arch; +} + +static bfd_boolean +elf32_csky_merge_attributes (bfd *ibfd, struct bfd_link_info *info) +{ + bfd *obfd = info->output_bfd; + obj_attribute *in_attr; + obj_attribute *out_attr; + obj_attribute tattr; + csky_arch_for_merge *old_arch = NULL; + csky_arch_for_merge *new_arch = NULL; + int i; + bfd_boolean result = TRUE; + const char *msg = NULL; + + const char *sec_name = get_elf_backend_data (ibfd)->obj_attrs_section; + + /* Skip the linker stubs file. This preserves previous behavior + of accepting unknown attributes in the first input file - but + is that a bug? */ + if (ibfd->flags & BFD_LINKER_CREATED) + return TRUE; + + /* Skip any input that hasn't attribute section. + This enables to link object files without attribute section with + any others. */ + if (bfd_get_section_by_name (ibfd, sec_name) == NULL) + { + return TRUE; + } + + if (!elf_known_obj_attributes_proc (obfd)[0].i) + { + /* This is the first object. Copy the attributes. */ + out_attr = elf_known_obj_attributes_proc (obfd); + + /* If Tag_CSKY_CPU_NAME is already set, save it. */ + memcpy (&tattr, &out_attr[Tag_CSKY_ARCH_NAME], sizeof (tattr)); + + _bfd_elf_copy_obj_attributes (ibfd, obfd); + + out_attr = elf_known_obj_attributes_proc (obfd); + + /* Restore Tag_CSKY_CPU_NAME. */ + memcpy (&out_attr[Tag_CSKY_ARCH_NAME], &tattr, sizeof (tattr)); + + /* Use the Tag_null value to indicate the attributes have been + initialized. */ + out_attr[0].i = 1; + } + + in_attr = elf_known_obj_attributes_proc (ibfd); + out_attr = elf_known_obj_attributes_proc (obfd); + + for (i = LEAST_KNOWN_OBJ_ATTRIBUTE; i < NUM_KNOWN_OBJ_ATTRIBUTES; i++) + { + /* Merge this attribute with existing attributes. */ + switch (i) + { + case Tag_CSKY_CPU_NAME: + case Tag_CSKY_ARCH_NAME: + /* Do arch merge. */ + new_arch = csky_find_arch_with_name (in_attr[Tag_CSKY_ARCH_NAME].s); + old_arch = csky_find_arch_with_name (out_attr[Tag_CSKY_ARCH_NAME].s); + + if (new_arch != NULL && old_arch != NULL) + { + if (new_arch->class != old_arch->class) + { + msg = _("%pB: machine flag conflict with target"); + (*_bfd_error_handler) (msg, ibfd); + bfd_set_error (bfd_error_wrong_format); + return FALSE; + } + else if (new_arch->class_level != old_arch->class_level) + { + csky_arch_for_merge *newest_arch = + ((new_arch->class_level > old_arch->class_level) ? + new_arch : old_arch); + + if (new_arch->do_warning || old_arch->do_warning) + { + msg = _("warning: file %pB's arch flag %s conflict " + "with target %s,set target arch flag to %s"); + (*_bfd_error_handler) (msg, ibfd, new_arch->name, + old_arch->name, + (newest_arch->name)); + bfd_set_error (bfd_error_wrong_format); + } + + if (out_attr[Tag_CSKY_ARCH_NAME].s != NULL) + bfd_release (obfd, out_attr[Tag_CSKY_ARCH_NAME].s); + + out_attr[Tag_CSKY_ARCH_NAME].s = + _bfd_elf_attr_strdup (obfd, newest_arch->name); + } + } + + break; + + case Tag_CSKY_ISA_FLAGS: + case Tag_CSKY_ISA_EXT_FLAGS: + /* Do ISA merge. */ + break; + + case Tag_CSKY_VDSP_VERSION: + if (out_attr[i].i == 0) + out_attr[i].i = in_attr[i].i; + else if (out_attr[i].i != in_attr[i].i) + { + _bfd_error_handler + (_("Error: %pB and %pB has different VDSP version"), ibfd, obfd); + result = FALSE; + } + break; + + case Tag_CSKY_FPU_VERSION: + if (out_attr[i].i <= in_attr[i].i + && out_attr[i].i == 0) + out_attr[i].i = in_attr[i].i; + break; + + case Tag_CSKY_DSP_VERSION: + if (out_attr[i].i == 0) + out_attr[i].i = in_attr[i].i; + else if (out_attr[i].i != in_attr[i].i) + { + _bfd_error_handler + (_("Error: %pB and %pB has different DSP version"), ibfd, obfd); + result = FALSE; + } + break; + + case Tag_CSKY_FPU_ABI: + if (out_attr[i].i != in_attr[i].i + && (out_attr[i].i == 0 + || (out_attr[i].i == VAL_CSKY_FPU_ABI_SOFT + && in_attr[i].i == VAL_CSKY_FPU_ABI_SOFTFP))) + { + out_attr[i].i = in_attr[i].i; + } + else if (out_attr[i].i == VAL_CSKY_FPU_ABI_HARD + && (out_attr[i].i != in_attr[i].i + && in_attr[i].i != 0)) + { + _bfd_error_handler + (_("Error: %pB and %pB has different FPU ABI"), ibfd, obfd); + result = FALSE; + } + break; + + default: + result = + result && _bfd_elf_merge_unknown_attribute_low (ibfd, obfd, i); + break; + } + + /* If out_attr was copied from in_attr then it won't have a type yet. */ + if (in_attr[i].type && !out_attr[i].type) + out_attr[i].type = in_attr[i].type; + } + + /* Merge Tag_compatibility attributes and any common GNU ones. */ + if (!_bfd_elf_merge_object_attributes (ibfd, info)) + return FALSE; + + /* Check for any attributes not known on CSKY. */ + result &= _bfd_elf_merge_unknown_attribute_list (ibfd, obfd); + + return result; +} + /* Merge backend specific data from an object file to the output object file when linking. */ @@ -2931,6 +3007,9 @@ flagword new_flags; csky_arch_for_merge *old_arch = NULL; csky_arch_for_merge *new_arch = NULL; + flagword newest_flag = 0; + const char *sec_name; + obj_attribute *out_attr; /* Check if we have the same endianness. */ if (! _bfd_generic_verify_endian_match (ibfd, info)) @@ -2940,76 +3019,79 @@ || bfd_get_flavour (obfd) != bfd_target_elf_flavour) return TRUE; - new_flags = elf_elfheader (ibfd)->e_flags; - old_flags = elf_elfheader (obfd)->e_flags; + /* Merge ".csky.attribute" section. */ + if (!elf32_csky_merge_attributes (ibfd, info)) + return FALSE; if (! elf_flags_init (obfd)) { /* First call, no flags set. */ elf_flags_init (obfd) = TRUE; - elf_elfheader (obfd)->e_flags = new_flags; } - else if (new_flags == old_flags) - /* Do nothing. */ - ; - else if (new_flags == 0 || old_flags == 0) - /* When one flag is 0, assign the other one's flag. */ - elf_elfheader (obfd)->e_flags = new_flags | old_flags; - else + + /* Try to merge e_flag. */ + new_flags = elf_elfheader (ibfd)->e_flags; + old_flags = elf_elfheader (obfd)->e_flags; + out_attr = elf_known_obj_attributes_proc (obfd); + + /* the flags like"e , f ,g ..." , we take collection. */ + newest_flag = (old_flags & (~CSKY_ARCH_MASK)) + | (new_flags & (~CSKY_ARCH_MASK)); + + sec_name = get_elf_backend_data (ibfd)->obj_attrs_section; + if (bfd_get_section_by_name (ibfd, sec_name) == NULL) { - flagword newest_flag = 0; + /* Input BFDs have no ".csky.attribute" section. */ + new_arch = csky_find_arch_with_eflag (new_flags & CSKY_ARCH_MASK); + old_arch = csky_find_arch_with_name (out_attr[Tag_CSKY_ARCH_NAME].s); - if ((new_flags & CSKY_ARCH_MASK) != 0 - && (old_flags & CSKY_ARCH_MASK) != 0) + if (new_arch != NULL && old_arch != NULL) { - new_arch = csky_find_arch_with_eflag (new_flags & CSKY_ARCH_MASK); - old_arch = csky_find_arch_with_eflag (old_flags & CSKY_ARCH_MASK); - /* Collect flags like e, f, g. */ - newest_flag = (old_flags & (~CSKY_ARCH_MASK)) - | (new_flags & (~CSKY_ARCH_MASK)); - if (new_arch != NULL && old_arch != NULL) + if (new_arch->class != old_arch->class) { - if (new_arch->class != old_arch->class) + _bfd_error_handler + /* xgettext:c-format */ + (_("%pB: machine flag conflict with target"), ibfd); + bfd_set_error (bfd_error_wrong_format); + return FALSE; + } + else if (new_arch->class_level != old_arch->class_level) + { + csky_arch_for_merge *newest_arch = + (new_arch->class_level > old_arch->class_level + ? new_arch : old_arch); + + if (new_arch->do_warning || old_arch->do_warning) { _bfd_error_handler /* xgettext:c-format */ - (_("%pB: machine flag conflict with target"), ibfd); + (_("warning: file %pB's arch flag %s conflicts with " + "target ck%s, using %s"), + ibfd, new_arch->name, old_arch->name, + newest_arch->name); bfd_set_error (bfd_error_wrong_format); - return FALSE; } - else if (new_arch->class_level != old_arch->class_level) - { - csky_arch_for_merge *newest_arch - = (new_arch->class_level > old_arch->class_level - ? new_arch : old_arch); - if (new_arch->do_warning || old_arch->do_warning) - { - _bfd_error_handler - /* xgettext:c-format */ - (_("warning: file %pB's arch flag ck%s conflicts with " - "target ck%s, using ck%s"), - ibfd, new_arch->name, old_arch->name, - newest_arch->name); - bfd_set_error (bfd_error_wrong_format); - } - newest_flag |= newest_arch->arch_eflag; - } - else - newest_flag |= ((new_flags & (CSKY_ARCH_MASK | CSKY_ABI_MASK)) - | (old_flags - & (CSKY_ARCH_MASK | CSKY_ABI_MASK))); + if (out_attr[Tag_CSKY_ARCH_NAME].s != NULL) + bfd_release (obfd, out_attr[Tag_CSKY_ARCH_NAME].s); + + out_attr[Tag_CSKY_ARCH_NAME].s = + _bfd_elf_attr_strdup (obfd, newest_arch->name); } else newest_flag |= ((new_flags & (CSKY_ARCH_MASK | CSKY_ABI_MASK)) | (old_flags & (CSKY_ARCH_MASK | CSKY_ABI_MASK))); } else - newest_flag |= ((new_flags & (CSKY_ARCH_MASK | CSKY_ABI_MASK)) - | (old_flags & (CSKY_ARCH_MASK | CSKY_ABI_MASK))); - - elf_elfheader (obfd)->e_flags = newest_flag; + { + if (new_arch && new_arch->name != NULL) + out_attr[Tag_CSKY_ARCH_NAME].s = + _bfd_elf_attr_strdup (obfd, new_arch->name); + } } + + elf_elfheader (obfd)->e_flags = newest_flag; + return TRUE; } @@ -3413,7 +3495,7 @@ if (r_type >= (unsigned int) R_CKCORE_MAX) { bfd_set_error (bfd_error_bad_value); -error_ret_free_internal: + error_ret_free_internal: if (elf_section_data (section)->relocs == NULL) free (internal_relocs); goto error_ret_free_local; @@ -3592,7 +3674,7 @@ } return TRUE; -error_ret_free_local: + error_ret_free_local: return FALSE; } @@ -3621,6 +3703,14 @@ stub_entry = (struct elf32_csky_stub_hash_entry *)gen_entry; info = (struct bfd_link_info *) in_arg; + /* Fail if the target section could not be assigned to an output + section. The user should fix his linker script. */ + if (stub_entry->target_section->output_section == NULL + && info->non_contiguous_regions) + info->callbacks->einfo (_("%F%P: Could not assign '%pA' to an output section. " + "Retry without --enable-non-contiguous-regions.\n"), + stub_entry->target_section); + globals = csky_elf_hash_table (info); if (globals == NULL) return FALSE; @@ -3770,7 +3860,7 @@ unsigned int top_id, top_index; asection *section; asection **input_list, **list; - bfd_size_type amt; + size_t amt; struct csky_elf_link_hash_table *htab = csky_elf_hash_table (info); if (!htab) @@ -3828,7 +3918,7 @@ static bfd_reloc_status_type csky_relocate_contents (reloc_howto_type *howto, bfd *input_bfd, - long relocation, + bfd_vma relocation, bfd_byte *location) { int size; @@ -3844,8 +3934,8 @@ /* FIXME: these macros should be defined at file head or head file head. */ #define CSKY_INSN_ADDI_TO_SUBI 0x04000000 -#define CSKY_INSN_MOV_RTB 0xc41d4820 // mov32 rx, r29, 0 -#define CSKY_INSN_MOV_RDB 0xc41c4820 // mov32 rx, r28, 0 +#define CSKY_INSN_MOV_RTB 0xc41d4820 /* mov32 rx, r29, 0 */ +#define CSKY_INSN_MOV_RDB 0xc41c4820 /* mov32 rx, r28, 0 */ #define CSKY_INSN_GET_ADDI_RZ(x) (((x) & 0x03e00000) >> 21) #define CSKY_INSN_SET_MOV_RZ(x) ((x) & 0x0000001f) #define CSKY_INSN_JSRI_TO_LRW 0xea9a0000 @@ -3871,7 +3961,7 @@ if (R_CKCORE_DOFFSET_LO16 == howto->type) { - if ((signed) relocation < 0) + if ((bfd_signed_vma) relocation < 0) { x |= CSKY_INSN_ADDI_TO_SUBI; relocation = -relocation; @@ -3882,7 +3972,7 @@ } else if (R_CKCORE_TOFFSET_LO16 == howto->type) { - if ((signed) relocation < 0) + if ((bfd_signed_vma) relocation < 0) { x |= CSKY_INSN_ADDI_TO_SUBI; relocation = -relocation; @@ -3903,13 +3993,13 @@ flag = bfd_reloc_ok; if (howto->complain_on_overflow != complain_overflow_dont) { - int addrmask; - int fieldmask; - int signmask; - int ss; - int a; - int b; - int sum; + bfd_vma addrmask; + bfd_vma fieldmask; + bfd_vma signmask; + bfd_vma ss; + bfd_vma a; + bfd_vma b; + bfd_vma sum; /* Get the values to be added together. For signed and unsigned relocations, we assume that all values should be truncated to the size of an address. For bitfields, all the bits matter. @@ -3995,7 +4085,7 @@ } /* Put RELOCATION in the right bits. */ - relocation >>= (bfd_vma) rightshift; + relocation >>= rightshift; if ((howto->type == R_CKCORE_DOFFSET_LO16 || howto->type == R_CKCORE_TOFFSET_LO16) @@ -4022,7 +4112,7 @@ csky_put_insn_32 (input_bfd, CSKY_INSN_JSR_R26, location + 4); } - relocation <<= (bfd_vma) bitpos; + relocation <<= bitpos; /* Add RELOCATION to the right bits of X. */ x = ((x & ~howto->dst_mask) | (((x & howto->src_mask) + relocation) & howto->dst_mask)); @@ -5145,6 +5235,47 @@ return TRUE; } +/* Determine whether an object attribute tag takes an integer, a + string or both. */ + +static int +elf32_csky_obj_attrs_arg_type (int tag) +{ + switch (tag) + { + case Tag_compatibility: + return ATTR_TYPE_FLAG_INT_VAL | ATTR_TYPE_FLAG_STR_VAL; + case Tag_CSKY_ARCH_NAME: + case Tag_CSKY_CPU_NAME: + case Tag_CSKY_FPU_NUMBER_MODULE: + return ATTR_TYPE_FLAG_STR_VAL; + case Tag_CSKY_ISA_FLAGS: + case Tag_CSKY_ISA_EXT_FLAGS: + case Tag_CSKY_DSP_VERSION: + case Tag_CSKY_VDSP_VERSION: + case Tag_CSKY_FPU_VERSION: + case Tag_CSKY_FPU_ABI: + case Tag_CSKY_FPU_ROUNDING: + case Tag_CSKY_FPU_HARDFP: + case Tag_CSKY_FPU_Exception: + case Tag_CSKY_FPU_DENORMAL: + return ATTR_TYPE_FLAG_INT_VAL; + default: + break; + } + + return (tag & 1) != 0 ? ATTR_TYPE_FLAG_STR_VAL : ATTR_TYPE_FLAG_INT_VAL; +} + +/* Attribute numbers >=64 (mod 128) can be safely ignored. */ + +static bfd_boolean +elf32_csky_obj_attrs_handle_unknown (bfd *abfd ATTRIBUTE_UNUSED, + int tag ATTRIBUTE_UNUSED) +{ + return TRUE; +} + /* End of external entry points for sizing and building linker stubs. */ /* CPU-related basic API. */ @@ -5198,4 +5329,15 @@ #define elf_backend_grok_prstatus csky_elf_grok_prstatus #define elf_backend_grok_psinfo csky_elf_grok_psinfo +/* Attribute sections. */ +#undef elf_backend_obj_attrs_vendor +#define elf_backend_obj_attrs_vendor "csky" +#undef elf_backend_obj_attrs_section +#define elf_backend_obj_attrs_section ".csky.attributes" +#undef elf_backend_obj_attrs_arg_type +#define elf_backend_obj_attrs_arg_type elf32_csky_obj_attrs_arg_type +#undef elf_backend_obj_attrs_section_type +#define elf_backend_obj_attrs_section_type SHT_CSKY_ATTRIBUTES +#define elf_backend_obj_attrs_handle_unknown elf32_csky_obj_attrs_handle_unknown + #include "elf32-target.h" diff -Nru gdb-9.1/bfd/elf32-csky.h gdb-10.2/bfd/elf32-csky.h --- gdb-9.1/bfd/elf32-csky.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-csky.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* 32-bit ELF support for C-SKY. - Copyright (C) 2019 Free Software Foundation, Inc. + Copyright (C) 2019-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/elf32-d10v.c gdb-10.2/bfd/elf32-d10v.c --- gdb-9.1/bfd/elf32-d10v.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-d10v.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* D10V-specific support for 32-bit ELF - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. Contributed by Martin Hunt (hunt@cygnus.com). This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/elf32-d30v.c gdb-10.2/bfd/elf32-d30v.c --- gdb-9.1/bfd/elf32-d30v.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-d30v.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* D30V-specific support for 32-bit ELF - Copyright (C) 1997-2019 Free Software Foundation, Inc. + Copyright (C) 1997-2020 Free Software Foundation, Inc. Contributed by Martin Hunt (hunt@cygnus.com). This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/elf32-dlx.c gdb-10.2/bfd/elf32-dlx.c --- gdb-9.1/bfd/elf32-dlx.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-dlx.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* DLX specific support for 32-bit ELF - Copyright (C) 2002-2019 Free Software Foundation, Inc. + Copyright (C) 2002-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/elf32-dlx.h gdb-10.2/bfd/elf32-dlx.h --- gdb-9.1/bfd/elf32-dlx.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-dlx.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* DLX specific support for 32-bit ELF - Copyright (C) 2002-2019 Free Software Foundation, Inc. + Copyright (C) 2002-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/elf32-epiphany.c gdb-10.2/bfd/elf32-epiphany.c --- gdb-9.1/bfd/elf32-epiphany.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-epiphany.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Adapteva epiphany specific support for 32-bit ELF - Copyright (C) 2000-2019 Free Software Foundation, Inc. + Copyright (C) 2000-2020 Free Software Foundation, Inc. Contributed by Embecosm on behalf of Adapteva, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -341,21 +341,17 @@ } } - if (internal_relocs != NULL - && elf_section_data (sec)->relocs != internal_relocs) + if (elf_section_data (sec)->relocs != internal_relocs) free (internal_relocs); return TRUE; error_return: - if (isymbuf != NULL - && symtab_hdr->contents != (unsigned char *) isymbuf) + if (symtab_hdr->contents != (unsigned char *) isymbuf) free (isymbuf); - if (contents != NULL - && elf_section_data (sec)->this_hdr.contents != contents) + if (elf_section_data (sec)->this_hdr.contents != contents) free (contents); - if (internal_relocs != NULL - && elf_section_data (sec)->relocs != internal_relocs) + if (elf_section_data (sec)->relocs != internal_relocs) free (internal_relocs); return FALSE; } diff -Nru gdb-9.1/bfd/elf32-fr30.c gdb-10.2/bfd/elf32-fr30.c --- gdb-9.1/bfd/elf32-fr30.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-fr30.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* FR30-specific support for 32-bit ELF. - Copyright (C) 1998-2019 Free Software Foundation, Inc. + Copyright (C) 1998-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/elf32-frv.c gdb-10.2/bfd/elf32-frv.c --- gdb-9.1/bfd/elf32-frv.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-frv.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* FRV-specific support for 32-bit ELF. - Copyright (C) 2002-2019 Free Software Foundation, Inc. + Copyright (C) 2002-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -826,8 +826,9 @@ /* Get the FRV ELF linker hash table from a link_info structure. */ #define frvfdpic_hash_table(p) \ - (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \ - == FRV_ELF_DATA ? ((struct frvfdpic_elf_link_hash_table *) ((p)->hash)) : NULL) + ((is_elf_hash_table ((p)->hash) \ + && elf_hash_table_id (elf_hash_table (p)) == FRV_ELF_DATA) \ + ? (struct frvfdpic_elf_link_hash_table *) (p)->hash : NULL) #define frvfdpic_got_section(info) \ (frvfdpic_hash_table (info)->elf.sgot) @@ -942,7 +943,7 @@ frvfdpic_elf_link_hash_table_create (bfd *abfd) { struct frvfdpic_elf_link_hash_table *ret; - bfd_size_type amt = sizeof (struct frvfdpic_elf_link_hash_table); + size_t amt = sizeof (struct frvfdpic_elf_link_hash_table); ret = bfd_zmalloc (amt); if (ret == NULL) @@ -2712,7 +2713,7 @@ const char *name; int r_type; asection *osec; - struct frvfdpic_relocs_info *picrel; + struct frvfdpic_relocs_info *picrel = NULL; bfd_vma orig_addend = rel->r_addend; r_type = ELF32_R_TYPE (rel->r_info); @@ -2806,6 +2807,9 @@ case R_FRV_GETTLSOFF_RELAX: case R_FRV_TLSOFF_RELAX: case R_FRV_TLSMOFF: + if ((input_section->flags & SEC_ALLOC) == 0) + break; + if (h != NULL) picrel = frvfdpic_relocs_info_for_global (frvfdpic_relocs_info (info), input_bfd, h, @@ -3896,11 +3900,11 @@ input file basename is crt0.o only once. */ if (silence_segment_error == 1) silence_segment_error = - (strlen (input_bfd->filename) == 6 - && filename_cmp (input_bfd->filename, "crt0.o") == 0) - || (strlen (input_bfd->filename) > 6 - && filename_cmp (input_bfd->filename - + strlen (input_bfd->filename) - 7, + (strlen (bfd_get_filename (input_bfd)) == 6 + && filename_cmp (bfd_get_filename (input_bfd), "crt0.o") == 0) + || (strlen (bfd_get_filename (input_bfd)) > 6 + && filename_cmp (bfd_get_filename (input_bfd) + + strlen (bfd_get_filename (input_bfd)) - 7, "/crt0.o") == 0) ? -1 : 0; if (!silence_segment_error @@ -4119,6 +4123,7 @@ scomm = bfd_make_section_with_flags (abfd, ".scommon", (SEC_ALLOC | SEC_IS_COMMON + | SEC_SMALL_DATA | SEC_LINKER_CREATED)); if (scomm == NULL) return FALSE; @@ -5463,27 +5468,7 @@ if (!_frvfdpic_size_got_plt (output_bfd, &gpinfo)) return FALSE; - if (elf_hash_table (info)->dynamic_sections_created) - { - if (frvfdpic_got_section (info)->size) - if (!_bfd_elf_add_dynamic_entry (info, DT_PLTGOT, 0)) - return FALSE; - - if (frvfdpic_pltrel_section (info)->size) - if (!_bfd_elf_add_dynamic_entry (info, DT_PLTRELSZ, 0) - || !_bfd_elf_add_dynamic_entry (info, DT_PLTREL, DT_REL) - || !_bfd_elf_add_dynamic_entry (info, DT_JMPREL, 0)) - return FALSE; - - if (frvfdpic_gotrel_section (info)->size) - if (!_bfd_elf_add_dynamic_entry (info, DT_REL, 0) - || !_bfd_elf_add_dynamic_entry (info, DT_RELSZ, 0) - || !_bfd_elf_add_dynamic_entry (info, DT_RELENT, - sizeof (Elf32_External_Rel))) - return FALSE; - } - - return TRUE; + return _bfd_elf_add_dynamic_tags (output_bfd, info, TRUE); } static bfd_boolean @@ -6344,6 +6329,10 @@ char new_opt[80]; char old_opt[80]; + /* FIXME: What should be checked when linking shared libraries? */ + if ((ibfd->flags & DYNAMIC) != 0) + return TRUE; + new_opt[0] = old_opt[0] = '\0'; new_flags = elf_elfheader (ibfd)->e_flags; old_flags = elf_elfheader (obfd)->e_flags; diff -Nru gdb-9.1/bfd/elf32-ft32.c gdb-10.2/bfd/elf32-ft32.c --- gdb-9.1/bfd/elf32-ft32.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-ft32.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,8 +1,8 @@ /* ft32-specific support for 32-bit ELF. - Copyright (C) 2013-2019 Free Software Foundation, Inc. + Copyright (C) 2013-2020 Free Software Foundation, Inc. Copied from elf32-moxie.c which is.. - Copyright (C) 2009-2019 Free Software Foundation, Inc. + Copyright (C) 2009-2020 Free Software Foundation, Inc. Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -1230,15 +1230,13 @@ } - if (internal_relocs != NULL - && elf_section_data (sec)->relocs != internal_relocs) + if (elf_section_data (sec)->relocs != internal_relocs) free (internal_relocs); return TRUE; error_return: - if (free_relocs != NULL) - free (free_relocs); + free (free_relocs); return TRUE; } diff -Nru gdb-9.1/bfd/elf32-gen.c gdb-10.2/bfd/elf32-gen.c --- gdb-9.1/bfd/elf32-gen.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-gen.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Generic support for 32-bit ELF - Copyright (C) 1993-2019 Free Software Foundation, Inc. + Copyright (C) 1993-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/elf32-h8300.c gdb-10.2/bfd/elf32-h8300.c --- gdb-9.1/bfd/elf32-h8300.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-h8300.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD back-end for Renesas H8/300 ELF binaries. - Copyright (C) 1993-2019 Free Software Foundation, Inc. + Copyright (C) 1993-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -1465,21 +1465,17 @@ } } - if (internal_relocs != NULL - && elf_section_data (sec)->relocs != internal_relocs) + if (elf_section_data (sec)->relocs != internal_relocs) free (internal_relocs); return TRUE; error_return: - if (isymbuf != NULL - && symtab_hdr->contents != (unsigned char *) isymbuf) + if (symtab_hdr->contents != (unsigned char *) isymbuf) free (isymbuf); - if (contents != NULL - && elf_section_data (sec)->this_hdr.contents != contents) + if (elf_section_data (sec)->this_hdr.contents != contents) free (contents); - if (internal_relocs != NULL - && elf_section_data (sec)->relocs != internal_relocs) + if (elf_section_data (sec)->relocs != internal_relocs) free (internal_relocs); return FALSE; } @@ -1682,10 +1678,8 @@ isymbuf, sections)) goto error_return; - if (sections != NULL) - free (sections); - if (isymbuf != NULL - && symtab_hdr->contents != (unsigned char *) isymbuf) + free (sections); + if (symtab_hdr->contents != (unsigned char *) isymbuf) free (isymbuf); if (elf_section_data (input_section)->relocs != internal_relocs) free (internal_relocs); @@ -1694,13 +1688,10 @@ return data; error_return: - if (sections != NULL) - free (sections); - if (isymbuf != NULL - && symtab_hdr->contents != (unsigned char *) isymbuf) + free (sections); + if (symtab_hdr->contents != (unsigned char *) isymbuf) free (isymbuf); - if (internal_relocs != NULL - && elf_section_data (input_section)->relocs != internal_relocs) + if (elf_section_data (input_section)->relocs != internal_relocs) free (internal_relocs); return NULL; } diff -Nru gdb-9.1/bfd/elf32-hppa.c gdb-10.2/bfd/elf32-hppa.c --- gdb-9.1/bfd/elf32-hppa.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-hppa.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD back-end for HP PA-RISC ELF files. - Copyright (C) 1990-2019 Free Software Foundation, Inc. + Copyright (C) 1990-2020 Free Software Foundation, Inc. Original code by Center for Software Science @@ -231,10 +231,6 @@ symbol. */ struct elf32_hppa_stub_hash_entry *hsh_cache; - /* Used to count relocations for delayed sizing of relocation - sections. */ - struct elf_dyn_relocs *dyn_relocs; - ENUM_BITFIELD (_tls_type) tls_type : 8; /* Set if this symbol is used by a plabel reloc. */ @@ -290,9 +286,6 @@ /* Set if we need a .plt stub to support lazy dynamic linking. */ unsigned int need_plt_stub:1; - /* Small local sym cache. */ - struct sym_cache sym_cache; - /* Data for LDM relocations. */ union { @@ -303,8 +296,9 @@ /* Various hash macros and functions. */ #define hppa_link_hash_table(p) \ - (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \ - == HPPA32_ELF_DATA ? ((struct elf32_hppa_link_hash_table *) ((p)->hash)) : NULL) + ((is_elf_hash_table ((p)->hash) \ + && elf_hash_table_id (elf_hash_table (p)) == HPPA32_ELF_DATA) \ + ? (struct elf32_hppa_link_hash_table *) (p)->hash : NULL) #define hppa_elf_hash_entry(ent) \ ((struct elf32_hppa_link_hash_entry *)(ent)) @@ -390,7 +384,6 @@ /* Initialize the local fields. */ hh = hppa_elf_hash_entry (entry); hh->hsh_cache = NULL; - hh->dyn_relocs = NULL; hh->plabel = 0; hh->tls_type = GOT_UNKNOWN; } @@ -418,7 +411,7 @@ elf32_hppa_link_hash_table_create (bfd *abfd) { struct elf32_hppa_link_hash_table *htab; - bfd_size_type amt = sizeof (*htab); + size_t amt = sizeof (*htab); htab = bfd_zmalloc (amt); if (htab == NULL) @@ -440,6 +433,7 @@ return NULL; } htab->etab.root.hash_table_free = elf32_hppa_link_hash_table_free; + htab->etab.dt_pltgot_required = TRUE; htab->text_segment_base = (bfd_vma) -1; htab->data_segment_base = (bfd_vma) -1; @@ -731,6 +725,15 @@ switch (hsh->stub_type) { case hppa_stub_long_branch: + /* Fail if the target section could not be assigned to an output + section. The user should fix his linker script. */ + if (hsh->target_section->output_section == NULL + && info->non_contiguous_regions) + info->callbacks->einfo (_("%F%P: Could not assign '%pA' to an output " + "section. Retry without " + "--enable-non-contiguous-regions.\n"), + hsh->target_section); + /* Create the long branch. A long branch is formed with "ldil" loading the upper bits of the target address into a register, then branching with "be" which adds in the lower bits. @@ -751,6 +754,15 @@ break; case hppa_stub_long_branch_shared: + /* Fail if the target section could not be assigned to an output + section. The user should fix his linker script. */ + if (hsh->target_section->output_section == NULL + && info->non_contiguous_regions) + info->callbacks->einfo (_("%F%P: Could not assign %pA to an output " + "section. Retry without " + "--enable-non-contiguous-regions.\n"), + hsh->target_section); + /* Branches are relative. This is where we are going to. */ sym_value = (hsh->target_value + hsh->target_section->output_offset @@ -823,6 +835,15 @@ break; case hppa_stub_export: + /* Fail if the target section could not be assigned to an output + section. The user should fix his linker script. */ + if (hsh->target_section->output_section == NULL + && info->non_contiguous_regions) + info->callbacks->einfo (_("%F%P: Could not assign %pA to an output " + "section. Retry without " + "--enable-non-contiguous-regions.\n"), + hsh->target_section); + /* Branches are relative. This is where we are going to. */ sym_value = (hsh->target_value + hsh->target_section->output_offset @@ -1018,42 +1039,6 @@ hh_dir = hppa_elf_hash_entry (eh_dir); hh_ind = hppa_elf_hash_entry (eh_ind); - if (hh_ind->dyn_relocs != NULL - && eh_ind->root.type == bfd_link_hash_indirect) - { - if (hh_dir->dyn_relocs != NULL) - { - struct elf_dyn_relocs **hdh_pp; - struct elf_dyn_relocs *hdh_p; - - /* Add reloc counts against the indirect sym to the direct sym - list. Merge any entries against the same section. */ - for (hdh_pp = &hh_ind->dyn_relocs; (hdh_p = *hdh_pp) != NULL; ) - { - struct elf_dyn_relocs *hdh_q; - - for (hdh_q = hh_dir->dyn_relocs; - hdh_q != NULL; - hdh_q = hdh_q->next) - if (hdh_q->sec == hdh_p->sec) - { -#if RELATIVE_DYNRELOCS - hdh_q->pc_count += hdh_p->pc_count; -#endif - hdh_q->count += hdh_p->count; - *hdh_pp = hdh_p->next; - break; - } - if (hdh_q == NULL) - hdh_pp = &hdh_p->next; - } - *hdh_pp = hh_dir->dyn_relocs; - } - - hh_dir->dyn_relocs = hh_ind->dyn_relocs; - hh_ind->dyn_relocs = NULL; - } - if (eh_ind->root.type == bfd_link_hash_indirect) { hh_dir->plabel |= hh_ind->plabel; @@ -1467,7 +1452,7 @@ relocations we need for this symbol. */ if (hh != NULL) { - hdh_head = &hh->dyn_relocs; + hdh_head = &hh->eh.dyn_relocs; } else { @@ -1478,7 +1463,7 @@ void *vpp; Elf_Internal_Sym *isym; - isym = bfd_sym_from_r_symndx (&htab->sym_cache, + isym = bfd_sym_from_r_symndx (&htab->etab.sym_cache, abfd, r_symndx); if (isym == NULL) return FALSE; @@ -1632,25 +1617,6 @@ } } -/* Find any dynamic relocs that apply to read-only sections. */ - -static asection * -readonly_dynrelocs (struct elf_link_hash_entry *eh) -{ - struct elf32_hppa_link_hash_entry *hh; - struct elf_dyn_relocs *hdh_p; - - hh = hppa_elf_hash_entry (eh); - for (hdh_p = hh->dyn_relocs; hdh_p != NULL; hdh_p = hdh_p->next) - { - asection *sec = hdh_p->sec->output_section; - - if (sec != NULL && (sec->flags & SEC_READONLY) != 0) - return hdh_p->sec; - } - return NULL; -} - /* Return true if we have dynamic relocs against H or any of its weak aliases, that apply to read-only sections. Cannot be used after size_dynamic_sections. */ @@ -1661,7 +1627,7 @@ struct elf32_hppa_link_hash_entry *hh = hppa_elf_hash_entry (eh); do { - if (readonly_dynrelocs (&hh->eh)) + if (_bfd_elf_readonly_dynrelocs (&hh->eh)) return TRUE; hh = hppa_elf_hash_entry (hh->eh.u.alias); } while (hh != NULL && &hh->eh != eh); @@ -1692,7 +1658,7 @@ /* Discard dyn_relocs when non-pic if we've decided that a function symbol is local. */ if (!bfd_link_pic (info) && local) - hppa_elf_hash_entry (eh)->dyn_relocs = NULL; + eh->dyn_relocs = NULL; /* If the symbol is used by a plabel, we must allocate a PLT slot. The refcounts are not reliable when it has been hidden since @@ -1742,7 +1708,7 @@ eh->root.u.def.value = def->root.u.def.value; if (def->root.u.def.section == htab->etab.sdynbss || def->root.u.def.section == htab->etab.sdynrelro) - hppa_elf_hash_entry (eh)->dyn_relocs = NULL; + eh->dyn_relocs = NULL; return TRUE; } @@ -1800,7 +1766,7 @@ } /* We no longer want dyn_relocs. */ - hppa_elf_hash_entry (eh)->dyn_relocs = NULL; + eh->dyn_relocs = NULL; return _bfd_elf_adjust_dynamic_copy (info, eh, sec); } @@ -1985,15 +1951,15 @@ /* If no dynamic sections we can't have dynamic relocs. */ if (!htab->etab.dynamic_sections_created) - hh->dyn_relocs = NULL; + eh->dyn_relocs = NULL; /* Discard relocs on undefined syms with non-default visibility. */ else if ((eh->root.type == bfd_link_hash_undefined && ELF_ST_VISIBILITY (eh->other) != STV_DEFAULT) || UNDEFWEAK_NO_DYNAMIC_RELOC (info, eh)) - hh->dyn_relocs = NULL; + eh->dyn_relocs = NULL; - if (hh->dyn_relocs == NULL) + if (eh->dyn_relocs == NULL) return TRUE; /* If this is a -Bsymbolic shared link, then we need to discard all @@ -2008,7 +1974,7 @@ { struct elf_dyn_relocs **hdh_pp; - for (hdh_pp = &hh->dyn_relocs; (hdh_p = *hdh_pp) != NULL; ) + for (hdh_pp = &eh->dyn_relocs; (hdh_p = *hdh_pp) != NULL; ) { hdh_p->count -= hdh_p->pc_count; hdh_p->pc_count = 0; @@ -2020,7 +1986,7 @@ } #endif - if (hh->dyn_relocs != NULL) + if (eh->dyn_relocs != NULL) { if (!ensure_undef_dynamic (info, eh)) return FALSE; @@ -2040,14 +2006,14 @@ return FALSE; if (eh->dynindx == -1) - hh->dyn_relocs = NULL; + eh->dyn_relocs = NULL; } else - hh->dyn_relocs = NULL; + eh->dyn_relocs = NULL; } /* Finally, allocate space. */ - for (hdh_p = hh->dyn_relocs; hdh_p != NULL; hdh_p = hdh_p->next) + for (hdh_p = eh->dyn_relocs; hdh_p != NULL; hdh_p = hdh_p->next) { asection *sreloc = elf_section_data (hdh_p->sec)->sreloc; sreloc->size += hdh_p->count * sizeof (Elf32_External_Rela); @@ -2075,33 +2041,6 @@ return TRUE; } -/* Set DF_TEXTREL if we find any dynamic relocs that apply to - read-only sections. */ - -static bfd_boolean -maybe_set_textrel (struct elf_link_hash_entry *eh, void *inf) -{ - asection *sec; - - if (eh->root.type == bfd_link_hash_indirect) - return TRUE; - - sec = readonly_dynrelocs (eh); - if (sec != NULL) - { - struct bfd_link_info *info = (struct bfd_link_info *) inf; - - info->flags |= DF_TEXTREL; - info->callbacks->minfo - (_("%pB: dynamic relocation against `%pT' in read-only section `%pA'\n"), - sec->owner, eh->root.root.string, sec); - - /* Not an error, just cut short the traversal. */ - return FALSE; - } - return TRUE; -} - /* Set the sizes of the dynamic sections. */ static bfd_boolean @@ -2338,59 +2277,7 @@ return FALSE; } - if (htab->etab.dynamic_sections_created) - { - /* Like IA-64 and HPPA64, always create a DT_PLTGOT. It - actually has nothing to do with the PLT, it is how we - communicate the LTP value of a load module to the dynamic - linker. */ -#define add_dynamic_entry(TAG, VAL) \ - _bfd_elf_add_dynamic_entry (info, TAG, VAL) - - if (!add_dynamic_entry (DT_PLTGOT, 0)) - return FALSE; - - /* Add some entries to the .dynamic section. We fill in the - values later, in elf32_hppa_finish_dynamic_sections, but we - must add the entries now so that we get the correct size for - the .dynamic section. The DT_DEBUG entry is filled in by the - dynamic linker and used by the debugger. */ - if (bfd_link_executable (info)) - { - if (!add_dynamic_entry (DT_DEBUG, 0)) - return FALSE; - } - - if (htab->etab.srelplt->size != 0) - { - if (!add_dynamic_entry (DT_PLTRELSZ, 0) - || !add_dynamic_entry (DT_PLTREL, DT_RELA) - || !add_dynamic_entry (DT_JMPREL, 0)) - return FALSE; - } - - if (relocs) - { - if (!add_dynamic_entry (DT_RELA, 0) - || !add_dynamic_entry (DT_RELASZ, 0) - || !add_dynamic_entry (DT_RELAENT, sizeof (Elf32_External_Rela))) - return FALSE; - - /* If any dynamic relocs apply to a read-only section, - then we need a DT_TEXTREL entry. */ - if ((info->flags & DF_TEXTREL) == 0) - elf_link_hash_traverse (&htab->etab, maybe_set_textrel, info); - - if ((info->flags & DF_TEXTREL) != 0) - { - if (!add_dynamic_entry (DT_TEXTREL, 0)) - return FALSE; - } - } - } -#undef add_dynamic_entry - - return TRUE; + return _bfd_elf_add_dynamic_tags (output_bfd, info, relocs); } /* External entry points for sizing and building linker stubs. */ @@ -2407,7 +2294,7 @@ unsigned int top_id, top_index; asection *section; asection **input_list, **list; - bfd_size_type amt; + size_t amt; struct elf32_hppa_link_hash_table *htab = hppa_link_hash_table (info); if (htab == NULL) @@ -2596,7 +2483,7 @@ /* We want to read in symbol extension records only once. To do this we need to read in the local symbols in parallel and save them for later use; so hold pointers to the local symbols in an array. */ - bfd_size_type amt = sizeof (Elf_Internal_Sym *) * htab->bfd_count; + size_t amt = sizeof (Elf_Internal_Sym *) * htab->bfd_count; all_local_syms = bfd_zmalloc (amt); htab->all_local_syms = all_local_syms; if (all_local_syms == NULL) @@ -3169,7 +3056,7 @@ /* Do not attempt to sort non-regular files. This is here especially for configure scripts and kernel builds which run tests with "ld [...] -o /dev/null". */ - if (stat (abfd->filename, &buf) != 0 + if (stat (bfd_get_filename (abfd), &buf) != 0 || !S_ISREG(buf.st_mode)) return TRUE; @@ -3221,7 +3108,7 @@ struct elf32_hppa_link_hash_entry *hh, struct bfd_link_info *info) { - int insn; + unsigned int insn; unsigned int r_type = ELF32_R_TYPE (rela->r_info); unsigned int orig_r_type = r_type; reloc_howto_type *howto = elf_hppa_howto_table + r_type; @@ -3340,7 +3227,7 @@ /* GCC sometimes uses a register other than r19 for the operation, so we must convert any addil instruction that uses this relocation. */ - if ((insn & 0xfc000000) == ((int) OP_ADDIL << 26)) + if ((insn & 0xfc000000) == OP_ADDIL << 26) insn = ADDIL_DP; else /* We must have a ldil instruction. It's too hard to find @@ -3374,8 +3261,8 @@ instance: "extern int foo" with foo defined as "const int foo". */ if (sym_sec == NULL || (sym_sec->flags & SEC_CODE) != 0) { - if ((insn & ((0x3f << 26) | (0x1f << 21))) - == (((int) OP_ADDIL << 26) | (27 << 21))) + if ((insn & ((0x3fu << 26) | (0x1f << 21))) + == ((OP_ADDIL << 26) | (27 << 21))) { insn &= ~ (0x1f << 21); } @@ -3882,11 +3769,11 @@ if (bfd_link_pic (info) ? ((hh == NULL - || hh->dyn_relocs != NULL) + || hh->eh.dyn_relocs != NULL) && ((hh != NULL && pc_dynrelocs (hh)) || IS_ABSOLUTE_RELOC (r_type))) : (hh != NULL - && hh->dyn_relocs != NULL)) + && hh->eh.dyn_relocs != NULL)) { Elf_Internal_Rela outrel; bfd_boolean skip; @@ -4149,7 +4036,7 @@ else { Elf_Internal_Sym *isym - = bfd_sym_from_r_symndx (&htab->sym_cache, + = bfd_sym_from_r_symndx (&htab->etab.sym_cache, input_bfd, r_symndx); if (isym == NULL) return FALSE; diff -Nru gdb-9.1/bfd/elf32-hppa.h gdb-10.2/bfd/elf32-hppa.h --- gdb-9.1/bfd/elf32-hppa.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-hppa.h 2021-04-25 04:06:26.000000000 +0000 @@ -4,7 +4,7 @@ in the Stratus FTX/Golf Object File Format (SED-1762) dated February 1994. - Copyright (C) 1990-2019 Free Software Foundation, Inc. + Copyright (C) 1990-2020 Free Software Foundation, Inc. Written by: diff -Nru gdb-9.1/bfd/elf32-i386.c gdb-10.2/bfd/elf32-i386.c --- gdb-9.1/bfd/elf32-i386.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-i386.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Intel 80386/80486-specific support for 32-bit ELF - Copyright (C) 1993-2019 Free Software Foundation, Inc. + Copyright (C) 1993-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -19,7 +19,6 @@ MA 02110-1301, USA. */ #include "elfxx-x86.h" -#include "elf-nacl.h" #include "elf-vxworks.h" #include "dwarf2.h" #include "opcode/i386.h" @@ -843,14 +842,6 @@ #define PLTRESOLVE_RELOCS 2 #define PLT_NON_JUMP_SLOT_RELOCS 2 -/* These are the standard parameters. */ -static const struct elf_x86_backend_data elf_i386_arch_bed = - { - is_normal /* os */ - }; - -#define elf_backend_arch_data &elf_i386_arch_bed - /* Return TRUE if the TLS access code sequence support transition from R_TYPE. */ @@ -1167,7 +1158,7 @@ { Elf_Internal_Sym *isym; - isym = bfd_sym_from_r_symndx (&htab->sym_cache, + isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache, abfd, r_symndx); name = bfd_elf_sym_name (abfd, symtab_hdr, isym, NULL); } @@ -1226,6 +1217,7 @@ bfd_vma nop_offset; bfd_boolean is_pic; bfd_boolean to_reloc_32; + bfd_boolean abs_symbol; unsigned int r_type; unsigned int r_symndx; bfd_vma roff = irel->r_offset; @@ -1249,6 +1241,21 @@ modrm = bfd_get_8 (abfd, contents + roff - 1); baseless = (modrm & 0xc7) == 0x5; + if (h) + { + /* NB: Also set linker_def via SYMBOL_REFERENCES_LOCAL_P. */ + local_ref = SYMBOL_REFERENCES_LOCAL_P (link_info, h); + isym = NULL; + abs_symbol = ABS_SYMBOL_P (h); + } + else + { + local_ref = TRUE; + isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache, abfd, + r_symndx); + abs_symbol = isym->st_shndx == SHN_ABS; + } + if (baseless && is_pic) { /* For PIC, disallow R_386_GOT32X without a base register @@ -1256,11 +1263,7 @@ const char *name; if (h == NULL) - { - isym = bfd_sym_from_r_symndx (&htab->sym_cache, abfd, - r_symndx); - name = bfd_elf_sym_name (abfd, symtab_hdr, isym, NULL); - } + name = bfd_elf_sym_name (abfd, symtab_hdr, isym, NULL); else name = h->root.root.string; @@ -1294,9 +1297,6 @@ goto convert_load; } - /* NB: Also set linker_def via SYMBOL_REFERENCES_LOCAL_P. */ - local_ref = SYMBOL_REFERENCES_LOCAL_P (link_info, h); - /* Undefined weak symbol is only bound locally in executable and its reference is resolved as 0. */ if (h->root.type == bfd_link_hash_undefweak @@ -1327,7 +1327,7 @@ && local_ref) { /* The function is locally defined. */ -convert_branch: + convert_branch: /* Convert R_386_GOT32X to R_386_PC32. */ if (modrm == 0x15 || (modrm & 0xf8) == 0x90) { @@ -1393,9 +1393,12 @@ || h->root.type == bfd_link_hash_defweak) && local_ref)) { -convert_load: + convert_load: if (opcode == 0x8b) { + if (abs_symbol && local_ref) + to_reloc_32 = TRUE; + if (to_reloc_32) { /* Convert "mov foo@GOT[(%reg1)], %reg2" to @@ -1475,15 +1478,6 @@ if (bfd_link_relocatable (info)) return TRUE; - /* Don't do anything special with non-loaded, non-alloced sections. - In particular, any relocs in such sections should not affect GOT - and PLT reference counting (ie. we don't allow them to create GOT - or PLT entries), there's no possibility or desire to optimize TLS - relocs, and there's not much point in propagating relocs to shared - libs that the dynamic linker won't relocate. */ - if ((sec->flags & SEC_ALLOC) == 0) - return TRUE; - htab = elf_x86_hash_table (info, I386_ELF_DATA); if (htab == NULL) { @@ -1519,6 +1513,7 @@ Elf_Internal_Sym *isym; const char *name; bfd_boolean size_reloc; + bfd_boolean no_dynreloc; r_symndx = ELF32_R_SYM (rel->r_info); r_type = ELF32_R_TYPE (rel->r_info); @@ -1534,7 +1529,7 @@ if (r_symndx < symtab_hdr->sh_info) { /* A local symbol. */ - isym = bfd_sym_from_r_symndx (&htab->sym_cache, + isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache, abfd, r_symndx); if (isym == NULL) goto error_return; @@ -1587,6 +1582,10 @@ goto error_return; } + if (!_bfd_elf_x86_valid_reloc_p (sec, info, htab, rel, h, isym, + symtab_hdr, &no_dynreloc)) + return FALSE; + if (! elf_i386_tls_transition (info, abfd, sec, contents, symtab_hdr, sym_hashes, &r_type, GOT_UNKNOWN, @@ -1739,7 +1738,7 @@ case R_386_GOTOFF: case R_386_GOTPC: -create_got: + create_got: if (r_type != R_386_TLS_IE) { if (eh != NULL) @@ -1769,7 +1768,7 @@ case R_386_PC32: if (eh != NULL && (sec->flags & SEC_CODE) != 0) eh->zero_undefweak |= 0x2; -do_relocation: + do_relocation: /* We are called after all symbols have been resolved. Only relocation against STT_GNU_IFUNC symbol must go through PLT. */ @@ -1826,9 +1825,10 @@ } size_reloc = FALSE; -do_size: - if (NEED_DYNAMIC_RELOCATION_P (info, FALSE, h, sec, r_type, - R_386_32)) + do_size: + if (!no_dynreloc + && NEED_DYNAMIC_RELOCATION_P (info, FALSE, h, sec, r_type, + R_386_32)) { struct elf_dyn_relocs *p; struct elf_dyn_relocs **head; @@ -1849,7 +1849,7 @@ relocations we need for this symbol. */ if (h != NULL) { - head = &eh->dyn_relocs; + head = &h->dyn_relocs; } else { @@ -1859,7 +1859,7 @@ void **vpp; asection *s; - isym = bfd_sym_from_r_symndx (&htab->sym_cache, + isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache, abfd, r_symndx); if (isym == NULL) goto error_return; @@ -1875,7 +1875,7 @@ p = *head; if (p == NULL || p->sec != sec) { - bfd_size_type amt = sizeof *p; + size_t amt = sizeof *p; p = (struct elf_dyn_relocs *) bfd_alloc (htab->elf.dynobj, amt); if (p == NULL) @@ -1931,7 +1931,7 @@ return TRUE; -error_return: + error_return: if (elf_section_data (sec)->this_hdr.contents != contents) free (contents); sec->check_relocs_failed = 1; @@ -2034,7 +2034,7 @@ local_tlsdesc_gotents = elf_x86_local_tlsdesc_gotent (input_bfd); /* We have to handle relocations in vxworks .tls_vars sections specially, because the dynamic loader is 'weird'. */ - is_vxworks_tls = (htab->target_os == is_vxworks + is_vxworks_tls = (htab->elf.target_os == is_vxworks && bfd_link_pic (info) && !strcmp (input_section->output_section->name, ".tls_vars")); @@ -2362,7 +2362,7 @@ switch (r_type) { default: -bad_ifunc_reloc: + bad_ifunc_reloc: if (h->root.root.string) name = h->root.root.string; else @@ -2386,7 +2386,7 @@ asection *sreloc; bfd_vma offset; -do_ifunc_pointer: + do_ifunc_pointer: /* Need a dynamic relocation to get the real function adddress. */ offset = _bfd_elf_section_offset (output_bfd, @@ -2449,7 +2449,7 @@ } } -skip_ifunc: + skip_ifunc: resolved_to_zero = (eh != NULL && UNDEFINED_WEAK_RESOLVED_TO_ZERO (info, eh)); @@ -2551,7 +2551,7 @@ we don't know what the GOT base is. */ const char *name; -disallow_got32: + disallow_got32: if (h == NULL || h->root.root.string == NULL) name = bfd_elf_sym_name (input_bfd, symtab_hdr, sym, NULL); @@ -2704,7 +2704,7 @@ || is_vxworks_tls) break; - if (GENERATE_DYNAMIC_RELOCATION_P (info, eh, r_type, + if (GENERATE_DYNAMIC_RELOCATION_P (info, eh, r_type, sec, FALSE, resolved_to_zero, (r_type == R_386_PC32))) { @@ -3409,12 +3409,12 @@ return FALSE; } -do_relocation: + do_relocation: r = _bfd_final_link_relocate (howto, input_bfd, input_section, contents, rel->r_offset, relocation, 0); -check_relocation_error: + check_relocation_error: if (r != bfd_reloc_ok) { const char *name; @@ -3588,7 +3588,7 @@ resolved_plt->contents + plt_offset + htab->plt.plt_got_offset); - if (htab->target_os == is_vxworks) + if (htab->elf.target_os == is_vxworks) { int s, k, reloc_index; @@ -3848,7 +3848,7 @@ else { BFD_ASSERT((h->got.offset & 1) == 0); -do_glob_dat: + do_glob_dat: bfd_put_32 (output_bfd, (bfd_vma) 0, htab->elf.sgot->contents + h->got.offset); rel.r_info = ELF32_R_INFO (h->dynindx, R_386_GLOB_DAT); @@ -4006,7 +4006,7 @@ htab->elf.splt->contents + htab->lazy_plt->plt0_got2_offset); - if (htab->target_os == is_vxworks) + if (htab->elf.target_os == is_vxworks) { Elf_Internal_Rela rel; int num_plts = (htab->elf.splt->size @@ -4097,9 +4097,6 @@ return TRUE; } -/* Forward declaration. */ -static const struct elf_x86_lazy_plt_layout elf_i386_nacl_plt; - /* Similar to _bfd_elf_get_synthetic_symtab. Support PLTs with all dynamic relocations. */ @@ -4147,7 +4144,7 @@ lazy_plt = NULL; non_lazy_ibt_plt = NULL; lazy_ibt_plt = NULL; - switch (get_elf_x86_backend_data (abfd)->target_os) + switch (get_elf_backend_data (abfd)->target_os) { case is_normal: case is_solaris: @@ -4158,9 +4155,8 @@ case is_vxworks: lazy_plt = &elf_i386_lazy_plt; break; - case is_nacl: - lazy_plt = &elf_i386_nacl_plt; - break; + default: + abort (); } got_addr = 0; @@ -4307,7 +4303,7 @@ { struct elf_x86_init_table init_table; - switch (get_elf_x86_backend_data (info->output_bfd)->target_os) + switch (get_elf_backend_data (info->output_bfd)->target_os) { case is_normal: case is_solaris: @@ -4324,13 +4320,8 @@ init_table.lazy_ibt_plt = NULL; init_table.non_lazy_ibt_plt = NULL; break; - case is_nacl: - init_table.plt0_pad_byte = 0x90; - init_table.lazy_plt = &elf_i386_nacl_plt; - init_table.non_lazy_plt = NULL; - init_table.lazy_ibt_plt = NULL; - init_table.non_lazy_ibt_plt = NULL; - break; + default: + abort (); } init_table.r_info = elf32_r_info; @@ -4434,13 +4425,8 @@ #undef TARGET_LITTLE_NAME #define TARGET_LITTLE_NAME "elf32-i386-sol2" -static const struct elf_x86_backend_data elf_i386_solaris_arch_bed = - { - is_solaris /* os */ - }; - -#undef elf_backend_arch_data -#define elf_backend_arch_data &elf_i386_solaris_arch_bed +#undef ELF_TARGET_OS +#define ELF_TARGET_OS is_solaris /* Restore default: we cannot use ELFOSABI_SOLARIS, otherwise ELFOSABI_NONE objects won't be recognized. */ @@ -4566,9 +4552,7 @@ #undef ELF_MACHINE_CODE #define ELF_MACHINE_CODE EM_IAMCU -#undef elf_backend_arch_data -#define elf_backend_arch_data &elf_i386_arch_bed - +#undef ELF_TARGET_OS #undef ELF_OSABI #undef elf32_bed @@ -4592,201 +4576,7 @@ #define ELF_ARCH bfd_arch_i386 #undef ELF_MACHINE_CODE #define ELF_MACHINE_CODE EM_386 - -/* Native Client support. */ - -#undef TARGET_LITTLE_SYM -#define TARGET_LITTLE_SYM i386_elf32_nacl_vec -#undef TARGET_LITTLE_NAME -#define TARGET_LITTLE_NAME "elf32-i386-nacl" -#undef elf32_bed -#define elf32_bed elf32_i386_nacl_bed - -#undef ELF_MAXPAGESIZE -#define ELF_MAXPAGESIZE 0x10000 - -/* Restore defaults. */ -#undef ELF_OSABI -#undef elf_backend_want_plt_sym -#define elf_backend_want_plt_sym 0 -#undef elf_backend_static_tls_alignment - -/* NaCl uses substantially different PLT entries for the same effects. */ - -#undef elf_backend_plt_alignment -#define elf_backend_plt_alignment 5 -#define NACL_PLT_ENTRY_SIZE 64 -#define NACLMASK 0xe0 /* 32-byte alignment mask. */ - -static const bfd_byte elf_i386_nacl_plt0_entry[] = - { - 0xff, 0x35, /* pushl contents of address */ - 0, 0, 0, 0, /* replaced with address of .got + 4. */ - 0x8b, 0x0d, /* movl contents of address, %ecx */ - 0, 0, 0, 0, /* replaced with address of .got + 8. */ - 0x83, 0xe1, NACLMASK, /* andl $NACLMASK, %ecx */ - 0xff, 0xe1 /* jmp *%ecx */ - }; - -static const bfd_byte elf_i386_nacl_plt_entry[NACL_PLT_ENTRY_SIZE] = - { - 0x8b, 0x0d, /* movl contents of address, %ecx */ - 0, 0, 0, 0, /* replaced with GOT slot address. */ - 0x83, 0xe1, NACLMASK, /* andl $NACLMASK, %ecx */ - 0xff, 0xe1, /* jmp *%ecx */ - - /* Pad to the next 32-byte boundary with nop instructions. */ - 0x90, - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, - - /* Lazy GOT entries point here (32-byte aligned). */ - 0x68, /* pushl immediate */ - 0, 0, 0, 0, /* replaced with reloc offset. */ - 0xe9, /* jmp relative */ - 0, 0, 0, 0, /* replaced with offset to .plt. */ - - /* Pad to the next 32-byte boundary with nop instructions. */ - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, - 0x90, 0x90 - }; - -static const bfd_byte -elf_i386_nacl_pic_plt0_entry[sizeof (elf_i386_nacl_plt0_entry)] = - { - 0xff, 0x73, 0x04, /* pushl 4(%ebx) */ - 0x8b, 0x4b, 0x08, /* mov 0x8(%ebx), %ecx */ - 0x83, 0xe1, 0xe0, /* and $NACLMASK, %ecx */ - 0xff, 0xe1, /* jmp *%ecx */ - - /* This is expected to be the same size as elf_i386_nacl_plt0_entry, - so pad to that size with nop instructions. */ - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 - }; - -static const bfd_byte elf_i386_nacl_pic_plt_entry[NACL_PLT_ENTRY_SIZE] = - { - 0x8b, 0x8b, /* movl offset(%ebx), %ecx */ - 0, 0, 0, 0, /* replaced with offset of this symbol in .got. */ - 0x83, 0xe1, 0xe0, /* andl $NACLMASK, %ecx */ - 0xff, 0xe1, /* jmp *%ecx */ - - /* Pad to the next 32-byte boundary with nop instructions. */ - 0x90, - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, - - /* Lazy GOT entries point here (32-byte aligned). */ - 0x68, /* pushl immediate */ - 0, 0, 0, 0, /* replaced with offset into relocation table. */ - 0xe9, /* jmp relative */ - 0, 0, 0, 0, /* replaced with offset to start of .plt. */ - - /* Pad to the next 32-byte boundary with nop instructions. */ - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, - 0x90, 0x90 - }; - -static const bfd_byte elf_i386_nacl_eh_frame_plt[] = - { -#if (PLT_CIE_LENGTH != 20 \ - || PLT_FDE_LENGTH != 36 \ - || PLT_FDE_START_OFFSET != 4 + PLT_CIE_LENGTH + 8 \ - || PLT_FDE_LEN_OFFSET != 4 + PLT_CIE_LENGTH + 12) -# error "Need elf_x86_backend_data parameters for eh_frame_plt offsets!" -#endif - PLT_CIE_LENGTH, 0, 0, 0, /* CIE length */ - 0, 0, 0, 0, /* CIE ID */ - 1, /* CIE version */ - 'z', 'R', 0, /* Augmentation string */ - 1, /* Code alignment factor */ - 0x7c, /* Data alignment factor: -4 */ - 8, /* Return address column */ - 1, /* Augmentation size */ - DW_EH_PE_pcrel | DW_EH_PE_sdata4, /* FDE encoding */ - DW_CFA_def_cfa, 4, 4, /* DW_CFA_def_cfa: r4 (esp) ofs 4 */ - DW_CFA_offset + 8, 1, /* DW_CFA_offset: r8 (eip) at cfa-4 */ - DW_CFA_nop, DW_CFA_nop, - - PLT_FDE_LENGTH, 0, 0, 0, /* FDE length */ - PLT_CIE_LENGTH + 8, 0, 0, 0, /* CIE pointer */ - 0, 0, 0, 0, /* R_386_PC32 .plt goes here */ - 0, 0, 0, 0, /* .plt size goes here */ - 0, /* Augmentation size */ - DW_CFA_def_cfa_offset, 8, /* DW_CFA_def_cfa_offset: 8 */ - DW_CFA_advance_loc + 6, /* DW_CFA_advance_loc: 6 to __PLT__+6 */ - DW_CFA_def_cfa_offset, 12, /* DW_CFA_def_cfa_offset: 12 */ - DW_CFA_advance_loc + 58, /* DW_CFA_advance_loc: 58 to __PLT__+64 */ - DW_CFA_def_cfa_expression, /* DW_CFA_def_cfa_expression */ - 13, /* Block length */ - DW_OP_breg4, 4, /* DW_OP_breg4 (esp): 4 */ - DW_OP_breg8, 0, /* DW_OP_breg8 (eip): 0 */ - DW_OP_const1u, 63, DW_OP_and, DW_OP_const1u, 37, DW_OP_ge, - DW_OP_lit2, DW_OP_shl, DW_OP_plus, - DW_CFA_nop, DW_CFA_nop - }; - -static const struct elf_x86_lazy_plt_layout elf_i386_nacl_plt = - { - elf_i386_nacl_plt0_entry, /* plt0_entry */ - sizeof (elf_i386_nacl_plt0_entry), /* plt0_entry_size */ - elf_i386_nacl_plt_entry, /* plt_entry */ - NACL_PLT_ENTRY_SIZE, /* plt_entry_size */ - NULL, /* plt_tlsdesc_entry */ - 0, /* plt_tlsdesc_entry_size*/ - 0, /* plt_tlsdesc_got1_offset */ - 0, /* plt_tlsdesc_got2_offset */ - 0, /* plt_tlsdesc_got1_insn_end */ - 0, /* plt_tlsdesc_got2_insn_end */ - 2, /* plt0_got1_offset */ - 8, /* plt0_got2_offset */ - 0, /* plt0_got2_insn_end */ - 2, /* plt_got_offset */ - 33, /* plt_reloc_offset */ - 38, /* plt_plt_offset */ - 0, /* plt_got_insn_size */ - 0, /* plt_plt_insn_end */ - 32, /* plt_lazy_offset */ - elf_i386_nacl_pic_plt0_entry, /* pic_plt0_entry */ - elf_i386_nacl_pic_plt_entry, /* pic_plt_entry */ - elf_i386_nacl_eh_frame_plt, /* eh_frame_plt */ - sizeof (elf_i386_nacl_eh_frame_plt) /* eh_frame_plt_size */ - }; - -static const struct elf_x86_backend_data elf_i386_nacl_arch_bed = - { - is_nacl /* os */ - }; - -static bfd_boolean -elf32_i386_nacl_elf_object_p (bfd *abfd) -{ - /* Set the right machine number for a NaCl i386 ELF32 file. */ - bfd_default_set_arch_mach (abfd, bfd_arch_i386, bfd_mach_i386_i386_nacl); - return TRUE; -} - -#undef elf_backend_arch_data -#define elf_backend_arch_data &elf_i386_nacl_arch_bed - -#undef elf_backend_object_p -#define elf_backend_object_p elf32_i386_nacl_elf_object_p -#undef elf_backend_modify_segment_map -#define elf_backend_modify_segment_map nacl_modify_segment_map -#undef elf_backend_modify_headers -#define elf_backend_modify_headers nacl_modify_headers -#undef elf_backend_final_write_processing -#define elf_backend_final_write_processing nacl_final_write_processing - -#include "elf32-target.h" - -/* Restore defaults. */ #undef elf_backend_object_p -#undef elf_backend_modify_segment_map -#undef elf_backend_modify_headers -#undef elf_backend_final_write_processing /* VxWorks support. */ @@ -4800,13 +4590,8 @@ #undef elf_backend_plt_alignment #define elf_backend_plt_alignment 4 -static const struct elf_x86_backend_data elf_i386_vxworks_arch_bed = - { - is_vxworks /* os */ - }; - -#undef elf_backend_arch_data -#define elf_backend_arch_data &elf_i386_vxworks_arch_bed +#undef ELF_TARGET_OS +#define ELF_TARGET_OS is_vxworks #undef elf_backend_relocs_compatible #undef elf_backend_add_symbol_hook diff -Nru gdb-9.1/bfd/elf32-ip2k.c gdb-10.2/bfd/elf32-ip2k.c --- gdb-9.1/bfd/elf32-ip2k.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-ip2k.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Ubicom IP2xxx specific support for 32-bit ELF - Copyright (C) 2000-2019 Free Software Foundation, Inc. + Copyright (C) 2000-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -638,8 +638,7 @@ { if (!bfd_malloc_and_get_section (abfd, stab, &stabcontents)) { - if (stabcontents != NULL) - free (stabcontents); + free (stabcontents); return; } @@ -1210,21 +1209,17 @@ } } - if (internal_relocs != NULL - && elf_section_data (sec)->relocs != internal_relocs) + if (elf_section_data (sec)->relocs != internal_relocs) free (internal_relocs); return TRUE; error_return: - if (isymbuf != NULL - && symtab_hdr->contents != (unsigned char *) isymbuf) + if (symtab_hdr->contents != (unsigned char *) isymbuf) free (isymbuf); - if (contents != NULL - && elf_section_data (sec)->this_hdr.contents != contents) + if (elf_section_data (sec)->this_hdr.contents != contents) free (contents); - if (internal_relocs != NULL - && elf_section_data (sec)->relocs != internal_relocs) + if (elf_section_data (sec)->relocs != internal_relocs) free (internal_relocs); return FALSE; } diff -Nru gdb-9.1/bfd/elf32-iq2000.c gdb-10.2/bfd/elf32-iq2000.c --- gdb-9.1/bfd/elf32-iq2000.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-iq2000.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* IQ2000-specific support for 32-bit ELF. - Copyright (C) 2003-2019 Free Software Foundation, Inc. + Copyright (C) 2003-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/elf32-lm32.c gdb-10.2/bfd/elf32-lm32.c --- gdb-9.1/bfd/elf32-lm32.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-lm32.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Lattice Mico32-specific support for 32-bit ELF - Copyright (C) 2008-2019 Free Software Foundation, Inc. + Copyright (C) 2008-2020 Free Software Foundation, Inc. Contributed by Jon Beniston This file is part of BFD, the Binary File Descriptor library. @@ -50,16 +50,6 @@ static bfd_reloc_status_type lm32_elf_gprel_reloc (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **); -/* lm32 ELF linker hash entry. */ - -struct elf_lm32_link_hash_entry -{ - struct elf_link_hash_entry root; - - /* Track dynamic relocs copied for this symbol. */ - struct elf_dyn_relocs *dyn_relocs; -}; - /* lm32 ELF linker hash table. */ struct elf_lm32_link_hash_table @@ -77,8 +67,9 @@ /* Get the lm32 ELF linker hash table from a link_info structure. */ #define lm32_elf_hash_table(p) \ - (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \ - == LM32_ELF_DATA ? ((struct elf_lm32_link_hash_table *) ((p)->hash)) : NULL) + ((is_elf_hash_table ((p)->hash) \ + && elf_hash_table_id (elf_hash_table (p)) == LM32_ELF_DATA) \ + ? (struct elf_lm32_link_hash_table *) (p)->hash : NULL) #define lm32fdpic_got_section(info) \ (lm32_elf_hash_table (info)->root.sgot) @@ -93,54 +84,21 @@ struct weak_symbol_list *next; }; -/* Create an entry in an lm32 ELF linker hash table. */ - -static struct bfd_hash_entry * -lm32_elf_link_hash_newfunc (struct bfd_hash_entry *entry, - struct bfd_hash_table *table, - const char *string) -{ - struct elf_lm32_link_hash_entry *ret = - (struct elf_lm32_link_hash_entry *) entry; - - /* Allocate the structure if it has not already been allocated by a - subclass. */ - if (ret == NULL) - ret = bfd_hash_allocate (table, - sizeof (struct elf_lm32_link_hash_entry)); - if (ret == NULL) - return NULL; - - /* Call the allocation method of the superclass. */ - ret = ((struct elf_lm32_link_hash_entry *) - _bfd_elf_link_hash_newfunc ((struct bfd_hash_entry *) ret, - table, string)); - if (ret != NULL) - { - struct elf_lm32_link_hash_entry *eh; - - eh = (struct elf_lm32_link_hash_entry *) ret; - eh->dyn_relocs = NULL; - } - - return (struct bfd_hash_entry *) ret; -} - /* Create an lm32 ELF linker hash table. */ static struct bfd_link_hash_table * lm32_elf_link_hash_table_create (bfd *abfd) { struct elf_lm32_link_hash_table *ret; - bfd_size_type amt = sizeof (struct elf_lm32_link_hash_table); + size_t amt = sizeof (struct elf_lm32_link_hash_table); ret = bfd_zmalloc (amt); if (ret == NULL) return NULL; if (!_bfd_elf_link_hash_table_init (&ret->root, abfd, - lm32_elf_link_hash_newfunc, - sizeof (struct elf_lm32_link_hash_entry), + _bfd_elf_link_hash_newfunc, + sizeof (struct elf_link_hash_entry), LM32_ELF_DATA)) { free (ret); @@ -1171,15 +1129,6 @@ if (bfd_link_relocatable (info)) return TRUE; - /* Don't do anything special with non-loaded, non-alloced sections. - In particular, any relocs in such sections should not affect GOT - and PLT reference counting (ie. we don't allow them to create GOT - or PLT entries), there's no possibility or desire to optimize TLS - relocs, and there's not much point in propagating relocs to shared - libs that the dynamic linker won't relocate. */ - if ((sec->flags & SEC_ALLOC) == 0) - return TRUE; - symtab_hdr = &elf_tdata (abfd)->symtab_hdr; sym_hashes = elf_sym_hashes (abfd); sym_hashes_end = sym_hashes + symtab_hdr->sh_size/sizeof (Elf32_External_Sym); @@ -1642,24 +1591,6 @@ } } -/* Find dynamic relocs for H that apply to read-only sections. */ - -static asection * -readonly_dynrelocs (struct elf_link_hash_entry *h) -{ - struct elf_dyn_relocs *p; - struct elf_lm32_link_hash_entry *eh = (struct elf_lm32_link_hash_entry *) h; - - for (p = eh->dyn_relocs; p != NULL; p = p->next) - { - asection *s = p->sec->output_section; - - if (s != NULL && (s->flags & SEC_READONLY) != 0) - return p->sec; - } - return NULL; -} - /* Adjust a symbol defined by a dynamic object and referenced by a regular object. The current definition is in some section of the dynamic object, but we're not including those sections. We have to @@ -1746,7 +1677,7 @@ /* If we don't find any dynamic relocs in read-only sections, then we'll be keeping the dynamic relocs and avoiding the copy reloc. */ - if (0 && !readonly_dynrelocs (h)) + if (0 && !_bfd_elf_readonly_dynrelocs (h)) { h->non_got_ref = 0; return TRUE; @@ -1794,7 +1725,6 @@ { struct bfd_link_info *info; struct elf_lm32_link_hash_table *htab; - struct elf_lm32_link_hash_entry *eh; struct elf_dyn_relocs *p; if (h->root.type == bfd_link_hash_indirect) @@ -1805,8 +1735,6 @@ if (htab == NULL) return FALSE; - eh = (struct elf_lm32_link_hash_entry *) h; - if (htab->root.dynamic_sections_created && h->plt.refcount > 0) { @@ -1889,7 +1817,7 @@ else h->got.offset = (bfd_vma) -1; - if (eh->dyn_relocs == NULL) + if (h->dyn_relocs == NULL) return TRUE; /* In the shared -Bsymbolic case, discard space allocated for @@ -1906,7 +1834,7 @@ { struct elf_dyn_relocs **pp; - for (pp = &eh->dyn_relocs; (p = *pp) != NULL;) + for (pp = &h->dyn_relocs; (p = *pp) != NULL;) { p->count -= p->pc_count; p->pc_count = 0; @@ -1919,11 +1847,11 @@ /* Also discard relocs on undefined weak syms with non-default visibility. */ - if (eh->dyn_relocs != NULL + if (h->dyn_relocs != NULL && h->root.type == bfd_link_hash_undefweak) { if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT) - eh->dyn_relocs = NULL; + h->dyn_relocs = NULL; /* Make sure undefined weak symbols are output as a dynamic symbol in PIEs. */ @@ -1963,13 +1891,13 @@ goto keep; } - eh->dyn_relocs = NULL; + h->dyn_relocs = NULL; keep: ; } /* Finally, allocate space. */ - for (p = eh->dyn_relocs; p != NULL; p = p->next) + for (p = h->dyn_relocs; p != NULL; p = p->next) { asection *sreloc = elf_section_data (p->sec)->sreloc; sreloc->size += p->count * sizeof (Elf32_External_Rela); @@ -1978,33 +1906,6 @@ return TRUE; } -/* Set DF_TEXTREL if we find any dynamic relocs that apply to - read-only sections. */ - -static bfd_boolean -maybe_set_textrel (struct elf_link_hash_entry *h, void *info_p) -{ - asection *sec; - - if (h->root.type == bfd_link_hash_indirect) - return TRUE; - - sec = readonly_dynrelocs (h); - if (sec != NULL) - { - struct bfd_link_info *info = (struct bfd_link_info *) info_p; - - info->flags |= DF_TEXTREL; - info->callbacks->minfo - (_("%pB: dynamic relocation against `%pT' in read-only section `%pA'\n"), - sec->owner, h->root.root.string, sec); - - /* Not an error, just cut short the traversal. */ - return FALSE; - } - return TRUE; -} - /* Set the sizes of the dynamic sections. */ static bfd_boolean @@ -2160,52 +2061,8 @@ return FALSE; } - if (htab->root.dynamic_sections_created) - { - /* Add some entries to the .dynamic section. We fill in the - values later, in lm32_elf_finish_dynamic_sections, but we - must add the entries now so that we get the correct size for - the .dynamic section. The DT_DEBUG entry is filled in by the - dynamic linker and used by the debugger. */ -#define add_dynamic_entry(TAG, VAL) \ - _bfd_elf_add_dynamic_entry (info, TAG, VAL) - - if (bfd_link_executable (info)) - { - if (! add_dynamic_entry (DT_DEBUG, 0)) - return FALSE; - } - - if (htab->root.splt->size != 0) - { - if (! add_dynamic_entry (DT_PLTGOT, 0) - || ! add_dynamic_entry (DT_PLTRELSZ, 0) - || ! add_dynamic_entry (DT_PLTREL, DT_RELA) - || ! add_dynamic_entry (DT_JMPREL, 0)) - return FALSE; - } - - if (relocs) - { - if (! add_dynamic_entry (DT_RELA, 0) - || ! add_dynamic_entry (DT_RELASZ, 0) - || ! add_dynamic_entry (DT_RELAENT, - sizeof (Elf32_External_Rela))) - return FALSE; - - /* If any dynamic relocs apply to a read-only section, - then we need a DT_TEXTREL entry. */ - if ((info->flags & DF_TEXTREL) == 0) - elf_link_hash_traverse (&htab->root, maybe_set_textrel, info); - - if ((info->flags & DF_TEXTREL) != 0) - { - if (! add_dynamic_entry (DT_TEXTREL, 0)) - return FALSE; - } - } - } -#undef add_dynamic_entry + if (!_bfd_elf_add_dynamic_tags (output_bfd, info, relocs)) + return FALSE; /* Allocate .rofixup section. */ if (IS_FDPIC (output_bfd)) @@ -2454,53 +2311,6 @@ return TRUE; } -/* Copy the extra info we tack onto an elf_link_hash_entry. */ - -static void -lm32_elf_copy_indirect_symbol (struct bfd_link_info *info, - struct elf_link_hash_entry *dir, - struct elf_link_hash_entry *ind) -{ - struct elf_lm32_link_hash_entry * edir; - struct elf_lm32_link_hash_entry * eind; - - edir = (struct elf_lm32_link_hash_entry *) dir; - eind = (struct elf_lm32_link_hash_entry *) ind; - - if (eind->dyn_relocs != NULL) - { - if (edir->dyn_relocs != NULL) - { - struct elf_dyn_relocs **pp; - struct elf_dyn_relocs *p; - - /* Add reloc counts against the indirect sym to the direct sym - list. Merge any entries against the same section. */ - for (pp = &eind->dyn_relocs; (p = *pp) != NULL;) - { - struct elf_dyn_relocs *q; - - for (q = edir->dyn_relocs; q != NULL; q = q->next) - if (q->sec == p->sec) - { - q->pc_count += p->pc_count; - q->count += p->count; - *pp = p->next; - break; - } - if (q == NULL) - pp = &p->next; - } - *pp = edir->dyn_relocs; - } - - edir->dyn_relocs = eind->dyn_relocs; - eind->dyn_relocs = NULL; - } - - _bfd_elf_link_hash_copy_indirect (info, dir, ind); -} - static bfd_boolean lm32_elf_always_size_sections (bfd *output_bfd, struct bfd_link_info *info) { @@ -2588,7 +2398,6 @@ #define bfd_elf32_bfd_link_hash_table_create lm32_elf_link_hash_table_create #define elf_backend_check_relocs lm32_elf_check_relocs #define elf_backend_reloc_type_class lm32_elf_reloc_type_class -#define elf_backend_copy_indirect_symbol lm32_elf_copy_indirect_symbol #define elf_backend_size_dynamic_sections lm32_elf_size_dynamic_sections #define elf_backend_omit_section_dynsym _bfd_elf_omit_section_dynsym_all #define elf_backend_create_dynamic_sections lm32_elf_create_dynamic_sections diff -Nru gdb-9.1/bfd/elf32-m32c.c gdb-10.2/bfd/elf32-m32c.c --- gdb-9.1/bfd/elf32-m32c.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-m32c.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* M16C/M32C specific support for 32-bit ELF. - Copyright (C) 2005-2019 Free Software Foundation, Inc. + Copyright (C) 2005-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -1284,7 +1284,7 @@ m32c_offset_for_reloc (bfd *abfd, Elf_Internal_Rela *rel, Elf_Internal_Shdr *symtab_hdr, - Elf_External_Sym_Shndx *shndx_buf ATTRIBUTE_UNUSED, + bfd_byte *shndx_buf ATTRIBUTE_UNUSED, Elf_Internal_Sym *intsyms) { bfd_vma symval; @@ -1442,10 +1442,11 @@ bfd_byte * free_contents = NULL; Elf_Internal_Sym *intsyms = NULL; Elf_Internal_Sym *free_intsyms = NULL; - Elf_External_Sym_Shndx *shndx_buf = NULL; + bfd_byte *shndx_buf = NULL; int machine; - if (abfd == elf_hash_table (link_info)->dynobj + if (is_elf_hash_table (link_info->hash) + && abfd == elf_hash_table (link_info)->dynobj && (sec->flags & SEC_LINKER_CREATED) != 0 && strcmp (sec->name, ".plt") == 0) return m32c_elf_relax_plt_section (sec, link_info, again); @@ -1491,17 +1492,20 @@ if (shndx_hdr && shndx_hdr->sh_size != 0) { - bfd_size_type amt; + size_t amt; - amt = symtab_hdr->sh_info; - amt *= sizeof (Elf_External_Sym_Shndx); - shndx_buf = (Elf_External_Sym_Shndx *) bfd_malloc (amt); - if (shndx_buf == NULL) + if (_bfd_mul_overflow (symtab_hdr->sh_info, + sizeof (Elf_External_Sym_Shndx), &amt)) + { + bfd_set_error (bfd_error_file_too_big); + goto error_return; + } + if (bfd_seek (abfd, shndx_hdr->sh_offset, SEEK_SET) != 0) goto error_return; - if (bfd_seek (abfd, shndx_hdr->sh_offset, SEEK_SET) != 0 - || bfd_bread (shndx_buf, amt, abfd) != amt) + shndx_buf = _bfd_malloc_and_read (abfd, amt, amt); + if (shndx_buf == NULL) goto error_return; - shndx_hdr->contents = (bfd_byte *) shndx_buf; + shndx_hdr->contents = shndx_buf; } /* Get a copy of the native relocations. */ @@ -1898,11 +1902,8 @@ } /* next relocation */ - if (free_relocs != NULL) - { - free (free_relocs); - free_relocs = NULL; - } + free (free_relocs); + free_relocs = NULL; if (free_contents != NULL) { @@ -1928,7 +1929,7 @@ /* Cache the symbols for elf_link_input_bfd. */ else { - symtab_hdr->contents = NULL /* (unsigned char *) intsyms*/; + symtab_hdr->contents = NULL /* (unsigned char *) intsyms*/; } free_intsyms = NULL; @@ -1937,17 +1938,14 @@ return TRUE; error_return: - if (free_relocs != NULL) - free (free_relocs); - if (free_contents != NULL) - free (free_contents); + free (free_relocs); + free (free_contents); if (shndx_buf != NULL) { shndx_hdr->contents = NULL; free (shndx_buf); } - if (free_intsyms != NULL) - free (free_intsyms); + free (free_intsyms); return FALSE; } @@ -2075,7 +2073,6 @@ symcount = (symtab_hdr->sh_size / sizeof (Elf32_External_Sym) - symtab_hdr->sh_info); sym_hashes = elf_sym_hashes (abfd); - // sym_hashes += symtab_hdr->sh_info; end_hashes = sym_hashes + symcount; for (; sym_hashes < end_hashes; sym_hashes ++) diff -Nru gdb-9.1/bfd/elf32-m32r.c gdb-10.2/bfd/elf32-m32r.c --- gdb-9.1/bfd/elf32-m32r.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-m32r.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* M32R-specific support for 32-bit ELF. - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -1354,7 +1354,7 @@ { /* Initialize the small common section. */ m32r_elf_scom_section.name = ".scommon"; - m32r_elf_scom_section.flags = SEC_IS_COMMON; + m32r_elf_scom_section.flags = SEC_IS_COMMON | SEC_SMALL_DATA; m32r_elf_scom_section.output_section = &m32r_elf_scom_section; m32r_elf_scom_section.symbol = &m32r_elf_scom_symbol; m32r_elf_scom_section.symbol_ptr_ptr = &m32r_elf_scom_symbol_ptr; @@ -1434,7 +1434,7 @@ { case SHN_M32R_SCOMMON: *secp = bfd_make_section_old_way (abfd, ".scommon"); - (*secp)->flags |= SEC_IS_COMMON; + (*secp)->flags |= SEC_IS_COMMON | SEC_SMALL_DATA; *valp = sym->st_size; break; } @@ -1498,30 +1498,6 @@ bfd_size_type count; }; -/* m32r ELF linker hash entry. */ - -struct elf_m32r_link_hash_entry -{ - struct elf_link_hash_entry root; - - /* Track dynamic relocs copied for this symbol. */ - struct elf_dyn_relocs *dyn_relocs; -}; - -/* m32r ELF linker hash table. */ - -struct elf_m32r_link_hash_table -{ - struct elf_link_hash_table root; - - /* Short-cuts to get to dynamic linker sections. */ - asection *sdynbss; - asection *srelbss; - - /* Small local sym cache. */ - struct sym_cache sym_cache; -}; - /* Traverse an m32r ELF linker hash table. */ #define m32r_elf_link_hash_traverse(table, func, info) \ @@ -1533,64 +1509,32 @@ /* Get the m32r ELF linker hash table from a link_info structure. */ #define m32r_elf_hash_table(p) \ - (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \ - == M32R_ELF_DATA ? ((struct elf_m32r_link_hash_table *) ((p)->hash)) : NULL) - -/* Create an entry in an m32r ELF linker hash table. */ - -static struct bfd_hash_entry * -m32r_elf_link_hash_newfunc (struct bfd_hash_entry *entry, - struct bfd_hash_table *table, - const char *string) -{ - struct elf_m32r_link_hash_entry *ret = - (struct elf_m32r_link_hash_entry *) entry; - - /* Allocate the structure if it has not already been allocated by a - subclass. */ - if (ret == NULL) - ret = bfd_hash_allocate (table, - sizeof (struct elf_m32r_link_hash_entry)); - if (ret == NULL) - return NULL; - - /* Call the allocation method of the superclass. */ - ret = ((struct elf_m32r_link_hash_entry *) - _bfd_elf_link_hash_newfunc ((struct bfd_hash_entry *) ret, - table, string)); - if (ret != NULL) - { - struct elf_m32r_link_hash_entry *eh; - - eh = (struct elf_m32r_link_hash_entry *) ret; - eh->dyn_relocs = NULL; - } - - return (struct bfd_hash_entry *) ret; -} + ((is_elf_hash_table ((p)->hash) \ + && elf_hash_table_id (elf_hash_table (p)) == M32R_ELF_DATA) \ + ? (struct elf_link_hash_table *) (p)->hash : NULL) /* Create an m32r ELF linker hash table. */ static struct bfd_link_hash_table * m32r_elf_link_hash_table_create (bfd *abfd) { - struct elf_m32r_link_hash_table *ret; - bfd_size_type amt = sizeof (struct elf_m32r_link_hash_table); + struct elf_link_hash_table *ret; + size_t amt = sizeof (struct elf_link_hash_table); ret = bfd_zmalloc (amt); if (ret == NULL) return NULL; - if (!_bfd_elf_link_hash_table_init (&ret->root, abfd, - m32r_elf_link_hash_newfunc, - sizeof (struct elf_m32r_link_hash_entry), + if (!_bfd_elf_link_hash_table_init (ret, abfd, + _bfd_elf_link_hash_newfunc, + sizeof (struct elf_link_hash_entry), M32R_ELF_DATA)) { free (ret); return NULL; } - return &ret->root.root; + return &ret->root; } /* Create dynamic sections when linking against a dynamic object. */ @@ -1598,7 +1542,7 @@ static bfd_boolean m32r_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info) { - struct elf_m32r_link_hash_table *htab; + struct elf_link_hash_table *htab; flagword flags, pltflags; asection *s; const struct elf_backend_data *bed = get_elf_backend_data (abfd); @@ -1621,7 +1565,7 @@ pltflags |= SEC_READONLY; s = bfd_make_section_anyway_with_flags (abfd, ".plt", pltflags); - htab->root.splt = s; + htab->splt = s; if (s == NULL || !bfd_set_section_alignment (s, bed->plt_alignment)) return FALSE; @@ -1641,7 +1585,7 @@ h = (struct elf_link_hash_entry *) bh; h->def_regular = 1; h->type = STT_OBJECT; - htab->root.hplt = h; + htab->hplt = h; if (bfd_link_pic (info) && ! bfd_elf_link_record_dynamic_symbol (info, h)) @@ -1652,12 +1596,12 @@ bed->default_use_rela_p ? ".rela.plt" : ".rel.plt", flags | SEC_READONLY); - htab->root.srelplt = s; + htab->srelplt = s; if (s == NULL || !bfd_set_section_alignment (s, ptralign)) return FALSE; - if (htab->root.sgot == NULL + if (htab->sgot == NULL && !_bfd_elf_create_got_section (abfd, info)) return FALSE; @@ -1701,72 +1645,7 @@ return TRUE; } -/* Copy the extra info we tack onto an elf_link_hash_entry. */ - -static void -m32r_elf_copy_indirect_symbol (struct bfd_link_info *info, - struct elf_link_hash_entry *dir, - struct elf_link_hash_entry *ind) -{ - struct elf_m32r_link_hash_entry * edir; - struct elf_m32r_link_hash_entry * eind; - - edir = (struct elf_m32r_link_hash_entry *) dir; - eind = (struct elf_m32r_link_hash_entry *) ind; - - if (eind->dyn_relocs != NULL) - { - if (edir->dyn_relocs != NULL) - { - struct elf_dyn_relocs **pp; - struct elf_dyn_relocs *p; - - /* Add reloc counts against the indirect sym to the direct sym - list. Merge any entries against the same section. */ - for (pp = &eind->dyn_relocs; (p = *pp) != NULL;) - { - struct elf_dyn_relocs *q; - - for (q = edir->dyn_relocs; q != NULL; q = q->next) - if (q->sec == p->sec) - { - q->pc_count += p->pc_count; - q->count += p->count; - *pp = p->next; - break; - } - if (q == NULL) - pp = &p->next; - } - *pp = edir->dyn_relocs; - } - - edir->dyn_relocs = eind->dyn_relocs; - eind->dyn_relocs = NULL; - } - - _bfd_elf_link_hash_copy_indirect (info, dir, ind); -} - -/* Find dynamic relocs for H that apply to read-only sections. */ - -static asection * -readonly_dynrelocs (struct elf_link_hash_entry *h) -{ - struct elf_dyn_relocs *p; - struct elf_m32r_link_hash_entry *eh = (struct elf_m32r_link_hash_entry *) h; - - for (p = eh->dyn_relocs; p != NULL; p = p->next) - { - asection *s = p->sec->output_section; - - if (s != NULL && (s->flags & SEC_READONLY) != 0) - return p->sec; - } - return NULL; -} - /* Adjust a symbol defined by a dynamic object and referenced by a regular object. The current definition is in some section of the dynamic object, but we're not including those sections. We have to @@ -1777,7 +1656,7 @@ m32r_elf_adjust_dynamic_symbol (struct bfd_link_info *info, struct elf_link_hash_entry *h) { - struct elf_m32r_link_hash_table *htab; + struct elf_link_hash_table *htab; bfd *dynobj; asection *s; @@ -1857,7 +1736,7 @@ /* If we don't find any dynamic relocs in read-only sections, then we'll be keeping the dynamic relocs and avoiding the copy reloc. */ - if (0 && !readonly_dynrelocs (h)) + if (0 && !_bfd_elf_readonly_dynrelocs (h)) { h->non_got_ref = 0; return TRUE; @@ -1904,8 +1783,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf) { struct bfd_link_info *info; - struct elf_m32r_link_hash_table *htab; - struct elf_m32r_link_hash_entry *eh; + struct elf_link_hash_table *htab; struct elf_dyn_relocs *p; if (h->root.type == bfd_link_hash_indirect) @@ -1916,9 +1794,7 @@ if (htab == NULL) return FALSE; - eh = (struct elf_m32r_link_hash_entry *) h; - - if (htab->root.dynamic_sections_created + if (htab->dynamic_sections_created && h->plt.refcount > 0) { /* Make sure this symbol is output as a dynamic symbol. @@ -1932,7 +1808,7 @@ if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, bfd_link_pic (info), h)) { - asection *s = htab->root.splt; + asection *s = htab->splt; /* If this is the first .plt entry, make room for the special first entry. */ @@ -1958,10 +1834,10 @@ /* We also need to make an entry in the .got.plt section, which will be placed in the .got section by the linker script. */ - htab->root.sgotplt->size += 4; + htab->sgotplt->size += 4; /* We also need to make an entry in the .rel.plt section. */ - htab->root.srelplt->size += sizeof (Elf32_External_Rela); + htab->srelplt->size += sizeof (Elf32_External_Rela); } else { @@ -1989,18 +1865,18 @@ return FALSE; } - s = htab->root.sgot; + s = htab->sgot; h->got.offset = s->size; s->size += 4; - dyn = htab->root.dynamic_sections_created; + dyn = htab->dynamic_sections_created; if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, bfd_link_pic (info), h)) - htab->root.srelgot->size += sizeof (Elf32_External_Rela); + htab->srelgot->size += sizeof (Elf32_External_Rela); } else h->got.offset = (bfd_vma) -1; - if (eh->dyn_relocs == NULL) + if (h->dyn_relocs == NULL) return TRUE; /* In the shared -Bsymbolic case, discard space allocated for @@ -2017,7 +1893,7 @@ { struct elf_dyn_relocs **pp; - for (pp = &eh->dyn_relocs; (p = *pp) != NULL;) + for (pp = &h->dyn_relocs; (p = *pp) != NULL;) { p->count -= p->pc_count; p->pc_count = 0; @@ -2030,11 +1906,11 @@ /* Also discard relocs on undefined weak syms with non-default visibility. */ - if (eh->dyn_relocs != NULL + if (h->dyn_relocs != NULL && h->root.type == bfd_link_hash_undefweak) { if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT) - eh->dyn_relocs = NULL; + h->dyn_relocs = NULL; /* Make sure undefined weak symbols are output as a dynamic symbol in PIEs. */ @@ -2055,7 +1931,7 @@ if (!h->non_got_ref && ((h->def_dynamic && !h->def_regular) - || (htab->root.dynamic_sections_created + || (htab->dynamic_sections_created && (h->root.type == bfd_link_hash_undefweak || h->root.type == bfd_link_hash_undefined)))) { @@ -2074,13 +1950,13 @@ goto keep; } - eh->dyn_relocs = NULL; + h->dyn_relocs = NULL; keep: ; } /* Finally, allocate space. */ - for (p = eh->dyn_relocs; p != NULL; p = p->next) + for (p = h->dyn_relocs; p != NULL; p = p->next) { asection *sreloc = elf_section_data (p->sec)->sreloc; sreloc->size += p->count * sizeof (Elf32_External_Rela); @@ -2089,40 +1965,13 @@ return TRUE; } -/* Set DF_TEXTREL if we find any dynamic relocs that apply to - read-only sections. */ - -static bfd_boolean -maybe_set_textrel (struct elf_link_hash_entry *h, void *info_p) -{ - asection *sec; - - if (h->root.type == bfd_link_hash_indirect) - return TRUE; - - sec = readonly_dynrelocs (h); - if (sec != NULL) - { - struct bfd_link_info *info = (struct bfd_link_info *) info_p; - - info->flags |= DF_TEXTREL; - info->callbacks->minfo - (_("%pB: dynamic relocation against `%pT' in read-only section `%pA'\n"), - sec->owner, h->root.root.string, sec); - - /* Not an error, just cut short the traversal. */ - return FALSE; - } - return TRUE; -} - /* Set the sizes of the dynamic sections. */ static bfd_boolean m32r_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, struct bfd_link_info *info) { - struct elf_m32r_link_hash_table *htab; + struct elf_link_hash_table *htab; bfd *dynobj; asection *s; bfd_boolean relocs; @@ -2136,10 +1985,10 @@ if (htab == NULL) return FALSE; - dynobj = htab->root.dynobj; + dynobj = htab->dynobj; BFD_ASSERT (dynobj != NULL); - if (htab->root.dynamic_sections_created) + if (htab->dynamic_sections_created) { /* Set the contents of the .interp section to the interpreter. */ if (bfd_link_executable (info) && !info->nointerp) @@ -2198,8 +2047,8 @@ symtab_hdr = &elf_tdata (ibfd)->symtab_hdr; locsymcount = symtab_hdr->sh_info; end_local_got = local_got + locsymcount; - s = htab->root.sgot; - srel = htab->root.srelgot; + s = htab->sgot; + srel = htab->srelgot; for (; local_got < end_local_got; ++local_got) { if (*local_got > 0) @@ -2216,7 +2065,7 @@ /* Allocate global sym .plt and .got entries, and space for global sym dynamic relocs. */ - elf_link_hash_traverse (&htab->root, allocate_dynrelocs, info); + elf_link_hash_traverse (htab, allocate_dynrelocs, info); /* We now have determined the sizes of the various dynamic sections. Allocate memory for them. */ @@ -2226,9 +2075,9 @@ if ((s->flags & SEC_LINKER_CREATED) == 0) continue; - if (s == htab->root.splt - || s == htab->root.sgot - || s == htab->root.sgotplt + if (s == htab->splt + || s == htab->sgot + || s == htab->sgotplt || s == htab->sdynbss) { /* Strip this section if we don't need it; see the @@ -2236,7 +2085,7 @@ } else if (CONST_STRNEQ (bfd_section_name (s), ".rela")) { - if (s->size != 0 && s != htab->root.srelplt) + if (s->size != 0 && s != htab->srelplt) relocs = TRUE; /* We use the reloc_count field as a counter if we need @@ -2275,54 +2124,7 @@ return FALSE; } - if (htab->root.dynamic_sections_created) - { - /* Add some entries to the .dynamic section. We fill in the - values later, in m32r_elf_finish_dynamic_sections, but we - must add the entries now so that we get the correct size for - the .dynamic section. The DT_DEBUG entry is filled in by the - dynamic linker and used by the debugger. */ -#define add_dynamic_entry(TAG, VAL) \ - _bfd_elf_add_dynamic_entry (info, TAG, VAL) - - if (bfd_link_executable (info)) - { - if (! add_dynamic_entry (DT_DEBUG, 0)) - return FALSE; - } - - if (htab->root.splt->size != 0) - { - if (! add_dynamic_entry (DT_PLTGOT, 0) - || ! add_dynamic_entry (DT_PLTRELSZ, 0) - || ! add_dynamic_entry (DT_PLTREL, DT_RELA) - || ! add_dynamic_entry (DT_JMPREL, 0)) - return FALSE; - } - - if (relocs) - { - if (! add_dynamic_entry (DT_RELA, 0) - || ! add_dynamic_entry (DT_RELASZ, 0) - || ! add_dynamic_entry (DT_RELAENT, - sizeof (Elf32_External_Rela))) - return FALSE; - - /* If any dynamic relocs apply to a read-only section, - then we need a DT_TEXTREL entry. */ - if ((info->flags & DF_TEXTREL) == 0) - elf_link_hash_traverse (&htab->root, maybe_set_textrel, info); - - if ((info->flags & DF_TEXTREL) != 0) - { - if (! add_dynamic_entry (DT_TEXTREL, 0)) - return FALSE; - } - } - } -#undef add_dynamic_entry - - return TRUE; + return _bfd_elf_add_dynamic_tags (output_bfd, info, relocs); } /* Relocate an M32R/D ELF section. @@ -2373,7 +2175,7 @@ Elf_Internal_Rela *rel, *relend; /* Assume success. */ bfd_boolean ret = TRUE; - struct elf_m32r_link_hash_table *htab = m32r_elf_hash_table (info); + struct elf_link_hash_table *htab = m32r_elf_hash_table (info); bfd_vma *local_got_offsets; asection *sgot, *splt, *sreloc; bfd_vma high_address = bfd_get_section_limit (input_bfd, input_section); @@ -2383,8 +2185,8 @@ local_got_offsets = elf_local_got_offsets (input_bfd); - sgot = htab->root.sgot; - splt = htab->root.splt; + sgot = htab->sgot; + splt = htab->splt; sreloc = NULL; rel = relocs; @@ -2480,7 +2282,7 @@ bfd_boolean dyn; sec = h->root.u.def.section; - dyn = htab->root.dynamic_sections_created; + dyn = htab->dynamic_sections_created; sec = h->root.u.def.section; if (r_type == R_M32R_GOTPC24 || (r_type == R_M32R_GOTPC_HI_ULO @@ -2551,12 +2353,12 @@ && ELF_ST_VISIBILITY (h->other) == STV_DEFAULT) ; else if (!bfd_link_relocatable (info)) - (*info->callbacks->undefined_symbol) - (info, h->root.root.string, input_bfd, - input_section, offset, - (info->unresolved_syms_in_objects == RM_GENERATE_ERROR - || ELF_ST_VISIBILITY (h->other))); - } + info->callbacks->undefined_symbol + (info, h->root.root.string, input_bfd, input_section, offset, + (info->unresolved_syms_in_objects == RM_DIAGNOSE + && !info->warn_unresolved_syms) + || ELF_ST_VISIBILITY (h->other)); + } if (sec != NULL && discarded_section (sec)) RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section, @@ -2701,7 +2503,7 @@ off = h->got.offset; BFD_ASSERT (off != (bfd_vma) -1); - dyn = htab->root.dynamic_sections_created; + dyn = htab->dynamic_sections_created; if (! WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, bfd_link_pic (info), h) @@ -2761,7 +2563,7 @@ /* We need to generate a R_M32R_RELATIVE reloc for the dynamic linker. */ - srelgot = htab->root.srelgot; + srelgot = htab->srelgot; BFD_ASSERT (srelgot != NULL); outrel.r_offset = (sgot->output_section->vma @@ -3077,7 +2879,7 @@ struct elf_link_hash_entry *h, Elf_Internal_Sym *sym) { - struct elf_m32r_link_hash_table *htab; + struct elf_link_hash_table *htab; bfd_byte *loc; #ifdef DEBUG_PIC @@ -3103,9 +2905,9 @@ BFD_ASSERT (h->dynindx != -1); - splt = htab->root.splt; - sgot = htab->root.sgotplt; - srela = htab->root.srelplt; + splt = htab->splt; + sgot = htab->sgotplt; + srela = htab->srelplt; BFD_ASSERT (splt != NULL && sgot != NULL && srela != NULL); /* Get the index in the procedure linkage table which @@ -3199,8 +3001,8 @@ /* This symbol has an entry in the global offset table. Set it up. */ - sgot = htab->root.sgot; - srela = htab->root.srelgot; + sgot = htab->sgot; + srela = htab->srelgot; BFD_ASSERT (sgot != NULL && srela != NULL); rela.r_offset = (sgot->output_section->vma @@ -3248,7 +3050,7 @@ && (h->root.type == bfd_link_hash_defined || h->root.type == bfd_link_hash_defweak)); - s = bfd_get_linker_section (htab->root.dynobj, ".rela.bss"); + s = bfd_get_linker_section (htab->dynobj, ".rela.bss"); BFD_ASSERT (s != NULL); rela.r_offset = (h->root.u.def.value @@ -3263,7 +3065,7 @@ } /* Mark some specially defined symbols as absolute. */ - if (h == htab->root.hdynamic || h == htab->root.hgot) + if (h == htab->hdynamic || h == htab->hgot) sym->st_shndx = SHN_ABS; return TRUE; @@ -3276,7 +3078,7 @@ m32r_elf_finish_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info) { - struct elf_m32r_link_hash_table *htab; + struct elf_link_hash_table *htab; bfd *dynobj; asection *sdyn; asection *sgot; @@ -3289,12 +3091,12 @@ if (htab == NULL) return FALSE; - dynobj = htab->root.dynobj; + dynobj = htab->dynobj; - sgot = htab->root.sgotplt; + sgot = htab->sgotplt; sdyn = bfd_get_linker_section (dynobj, ".dynamic"); - if (htab->root.dynamic_sections_created) + if (htab->dynamic_sections_created) { asection *splt; Elf32_External_Dyn *dyncon, *dynconend; @@ -3317,17 +3119,17 @@ break; case DT_PLTGOT: - s = htab->root.sgotplt; + s = htab->sgotplt; goto get_vma; case DT_JMPREL: - s = htab->root.srelplt; + s = htab->srelplt; get_vma: dyn.d_un.d_ptr = s->output_section->vma + s->output_offset; bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon); break; case DT_PLTRELSZ: - s = htab->root.srelplt; + s = htab->srelplt; dyn.d_un.d_val = s->size; bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon); break; @@ -3335,7 +3137,7 @@ } /* Fill in the first entry in the procedure linkage table. */ - splt = htab->root.splt; + splt = htab->splt; if (splt && splt->size > 0) { if (bfd_link_pic (info)) @@ -3554,22 +3356,13 @@ struct elf_link_hash_entry **sym_hashes; const Elf_Internal_Rela *rel; const Elf_Internal_Rela *rel_end; - struct elf_m32r_link_hash_table *htab; + struct elf_link_hash_table *htab; bfd *dynobj; asection *sreloc; if (bfd_link_relocatable (info)) return TRUE; - /* Don't do anything special with non-loaded, non-alloced sections. - In particular, any relocs in such sections should not affect GOT - and PLT reference counting (ie. we don't allow them to create GOT - or PLT entries), there's no possibility or desire to optimize TLS - relocs, and there's not much point in propagating relocs to shared - libs that the dynamic linker won't relocate. */ - if ((sec->flags & SEC_ALLOC) == 0) - return TRUE; - sreloc = NULL; symtab_hdr = &elf_tdata (abfd)->symtab_hdr; sym_hashes = elf_sym_hashes (abfd); @@ -3578,7 +3371,7 @@ if (htab == NULL) return FALSE; - dynobj = htab->root.dynobj; + dynobj = htab->dynobj; rel_end = relocs + sec->reloc_count; for (rel = relocs; rel < rel_end; rel++) @@ -3600,7 +3393,7 @@ } /* Some relocs require a global offset table. */ - if (htab->root.sgot == NULL) + if (htab->sgot == NULL) { switch (r_type) { @@ -3617,7 +3410,7 @@ case R_M32R_GOTPC_LO: case R_M32R_GOT24: if (dynobj == NULL) - htab->root.dynobj = dynobj = abfd; + htab->dynobj = dynobj = abfd; if (!_bfd_elf_create_got_section (dynobj, info)) return FALSE; break; @@ -3734,7 +3527,7 @@ struct elf_dyn_relocs **head; if (dynobj == NULL) - htab->root.dynobj = dynobj = abfd; + htab->dynobj = dynobj = abfd; /* When creating a shared object, we must copy these relocs into the output file. We create a reloc @@ -3751,7 +3544,7 @@ /* If this is a global symbol, we count the number of relocations we need for this symbol. */ if (h != NULL) - head = &((struct elf_m32r_link_hash_entry *) h)->dyn_relocs; + head = &h->dyn_relocs; else { /* Track dynamic relocs needed for local syms too. */ @@ -3775,7 +3568,7 @@ p = *head; if (p == NULL || p->sec != sec) { - bfd_size_type amt = sizeof (*p); + size_t amt = sizeof (*p); p = bfd_alloc (dynobj, amt); if (p == NULL) @@ -3827,6 +3620,18 @@ { NULL, 0, 0, 0, 0 } }; +static bfd_boolean +m32r_elf_section_flags (const Elf_Internal_Shdr *hdr) +{ + const char *name = hdr->bfd_section->name; + + if (strncmp (name, ".sbss", 5) == 0 + || strncmp (name, ".sdata", 6) == 0) + hdr->bfd_section->flags |= SEC_SMALL_DATA; + + return TRUE; +} + static enum elf_reloc_type_class m32r_elf_reloc_type_class (const struct bfd_link_info *info ATTRIBUTE_UNUSED, const asection *rel_sec ATTRIBUTE_UNUSED, @@ -3869,7 +3674,6 @@ #define elf_backend_adjust_dynamic_symbol m32r_elf_adjust_dynamic_symbol #define elf_backend_finish_dynamic_symbol m32r_elf_finish_dynamic_symbol #define elf_backend_reloc_type_class m32r_elf_reloc_type_class -#define elf_backend_copy_indirect_symbol m32r_elf_copy_indirect_symbol #define elf_backend_can_gc_sections 1 /*#if !USE_REL @@ -3897,6 +3701,7 @@ #define bfd_elf32_bfd_set_private_flags m32r_elf_set_private_flags #define bfd_elf32_bfd_print_private_bfd_data m32r_elf_print_private_bfd_data #define elf_backend_special_sections m32r_elf_special_sections +#define elf_backend_section_flags m32r_elf_section_flags #define elf_backend_linux_prpsinfo32_ugid16 TRUE diff -Nru gdb-9.1/bfd/elf32-m68hc11.c gdb-10.2/bfd/elf32-m68hc11.c --- gdb-9.1/bfd/elf32-m68hc11.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-m68hc11.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Motorola 68HC11-specific support for 32-bit ELF - Copyright (C) 1999-2019 Free Software Foundation, Inc. + Copyright (C) 1999-2020 Free Software Foundation, Inc. Contributed by Stephane Carrez (stcarrez@nerim.fr) (Heavily copied from the D10V port by Martin Hunt (hunt@cygnus.com)) @@ -415,6 +415,14 @@ stub_entry = (struct elf32_m68hc11_stub_hash_entry *) gen_entry; info = (struct bfd_link_info *) in_arg; + /* Fail if the target section could not be assigned to an output + section. The user should fix his linker script. */ + if (stub_entry->target_section->output_section == NULL + && info->non_contiguous_regions) + info->callbacks->einfo (_("%F%P: Could not assign '%pA' to an output section. " + "Retry without --enable-non-contiguous-regions.\n"), + stub_entry->target_section); + htab = m68hc11_elf_hash_table (info); if (htab == NULL) return FALSE; @@ -1074,11 +1082,8 @@ prev_insn_group = 0; } - if (free_relocs != NULL) - { - free (free_relocs); - free_relocs = NULL; - } + free (free_relocs); + free_relocs = NULL; if (free_contents != NULL) { @@ -1107,12 +1112,9 @@ return TRUE; error_return: - if (free_relocs != NULL) - free (free_relocs); - if (free_contents != NULL) - free (free_contents); - if (free_extsyms != NULL) - free (free_extsyms); + free (free_relocs); + free (free_contents); + free (free_extsyms); return FALSE; } diff -Nru gdb-9.1/bfd/elf32-m68hc12.c gdb-10.2/bfd/elf32-m68hc12.c --- gdb-9.1/bfd/elf32-m68hc12.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-m68hc12.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Motorola 68HC12-specific support for 32-bit ELF - Copyright (C) 1999-2019 Free Software Foundation, Inc. + Copyright (C) 1999-2020 Free Software Foundation, Inc. Contributed by Stephane Carrez (stcarrez@nerim.fr) (Heavily copied from the D10V port by Martin Hunt (hunt@cygnus.com)) @@ -535,6 +535,14 @@ stub_entry = (struct elf32_m68hc11_stub_hash_entry *) gen_entry; info = (struct bfd_link_info *) in_arg; + /* Fail if the target section could not be assigned to an output + section. The user should fix his linker script. */ + if (stub_entry->target_section->output_section == NULL + && info->non_contiguous_regions) + info->callbacks->einfo (_("%F%P: Could not assign '%pA' to an output section. " + "Retry without --enable-non-contiguous-regions.\n"), + stub_entry->target_section); + htab = m68hc11_elf_hash_table (info); stub_sec = stub_entry->stub_sec; diff -Nru gdb-9.1/bfd/elf32-m68hc1x.c gdb-10.2/bfd/elf32-m68hc1x.c --- gdb-9.1/bfd/elf32-m68hc1x.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-m68hc1x.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Motorola 68HC11/HC12-specific support for 32-bit ELF - Copyright (C) 1999-2019 Free Software Foundation, Inc. + Copyright (C) 1999-2020 Free Software Foundation, Inc. Contributed by Stephane Carrez (stcarrez@nerim.fr) This file is part of BFD, the Binary File Descriptor library. @@ -77,7 +77,7 @@ m68hc11_elf_hash_table_create (bfd *abfd) { struct m68hc11_elf_link_hash_table *ret; - bfd_size_type amt = sizeof (struct m68hc11_elf_link_hash_table); + size_t amt = sizeof (struct m68hc11_elf_link_hash_table); ret = (struct m68hc11_elf_link_hash_table *) bfd_zmalloc (amt); if (ret == (struct m68hc11_elf_link_hash_table *) NULL) @@ -241,7 +241,7 @@ unsigned int top_id, top_index; asection *section; asection **input_list, **list; - bfd_size_type amt; + size_t amt; asection *text_section; struct m68hc11_elf_link_hash_table *htab; @@ -334,7 +334,7 @@ asection *section; Elf_Internal_Sym *local_syms, **all_local_syms; unsigned int bfd_indx, bfd_count; - bfd_size_type amt; + size_t amt; asection *stub_sec; struct m68hc11_elf_link_hash_table *htab = m68hc11_elf_hash_table (info); diff -Nru gdb-9.1/bfd/elf32-m68hc1x.h gdb-10.2/bfd/elf32-m68hc1x.h --- gdb-9.1/bfd/elf32-m68hc1x.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-m68hc1x.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Motorola 68HC11/68HC12-specific support for 32-bit ELF - Copyright (C) 2003-2019 Free Software Foundation, Inc. + Copyright (C) 2003-2020 Free Software Foundation, Inc. Contributed by Stephane Carrez (stcarrez@nerim.fr) This file is part of BFD, the Binary File Descriptor library. @@ -120,9 +120,6 @@ int top_index; asection **input_list; - /* Small local sym cache. */ - struct sym_cache sym_cache; - bfd_boolean (* size_one_stub) (struct bfd_hash_entry*, void*); bfd_boolean (* build_one_stub) (struct bfd_hash_entry*, void*); }; @@ -130,8 +127,9 @@ /* Get the Sparc64 ELF linker hash table from a link_info structure. */ #define m68hc11_elf_hash_table(p) \ - (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \ - == M68HC11_ELF_DATA ? ((struct m68hc11_elf_link_hash_table *) ((p)->hash)) : NULL) + ((is_elf_hash_table ((p)->hash) \ + && elf_hash_table_id (elf_hash_table (p)) == M68HC11_ELF_DATA) \ + ? (struct m68hc11_elf_link_hash_table *) (p)->hash : NULL) /* Create a 68HC11/68HC12 ELF linker hash table. */ diff -Nru gdb-9.1/bfd/elf32-m68k.c gdb-10.2/bfd/elf32-m68k.c --- gdb-9.1/bfd/elf32-m68k.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-m68k.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Motorola 68k series support for 32-bit ELF - Copyright (C) 1993-2019 Free Software Foundation, Inc. + Copyright (C) 1993-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -889,9 +889,6 @@ { struct elf_link_hash_table root; - /* Small local sym cache. */ - struct sym_cache sym_cache; - /* The PLT format used by this link, or NULL if the format has not yet been chosen. */ const struct elf_m68k_plt_info *plt_info; @@ -913,8 +910,9 @@ /* Get the m68k ELF linker hash table from a link_info structure. */ #define elf_m68k_hash_table(p) \ - (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \ - == M68K_ELF_DATA ? ((struct elf_m68k_link_hash_table *) ((p)->hash)) : NULL) + ((is_elf_hash_table ((p)->hash) \ + && elf_hash_table_id (elf_hash_table (p)) == M68K_ELF_DATA) \ + ? (struct elf_m68k_link_hash_table *) (p)->hash : NULL) /* Shortcut to multi-GOT data. */ #define elf_m68k_multi_got(INFO) (&elf_m68k_hash_table (INFO)->multi_got_) @@ -971,7 +969,7 @@ elf_m68k_link_hash_table_create (bfd *abfd) { struct elf_m68k_link_hash_table *ret; - bfd_size_type amt = sizeof (struct elf_m68k_link_hash_table); + size_t amt = sizeof (struct elf_m68k_link_hash_table); ret = (struct elf_m68k_link_hash_table *) bfd_zmalloc (amt); if (ret == (struct elf_m68k_link_hash_table *) NULL) @@ -1122,6 +1120,65 @@ return TRUE; } +/* Merge object attributes from IBFD into OBFD. Warn if + there are conflicting attributes. */ +static bfd_boolean +m68k_elf_merge_obj_attributes (bfd *ibfd, struct bfd_link_info *info) +{ + bfd *obfd = info->output_bfd; + obj_attribute *in_attr, *in_attrs; + obj_attribute *out_attr, *out_attrs; + bfd_boolean ret = TRUE; + + in_attrs = elf_known_obj_attributes (ibfd)[OBJ_ATTR_GNU]; + out_attrs = elf_known_obj_attributes (obfd)[OBJ_ATTR_GNU]; + + in_attr = &in_attrs[Tag_GNU_M68K_ABI_FP]; + out_attr = &out_attrs[Tag_GNU_M68K_ABI_FP]; + + if (in_attr->i != out_attr->i) + { + int in_fp = in_attr->i & 3; + int out_fp = out_attr->i & 3; + static bfd *last_fp; + + if (in_fp == 0) + ; + else if (out_fp == 0) + { + out_attr->type = ATTR_TYPE_FLAG_INT_VAL; + out_attr->i ^= in_fp; + last_fp = ibfd; + } + else if (out_fp == 1 && in_fp == 2) + { + _bfd_error_handler + /* xgettext:c-format */ + (_("%pB uses hard float, %pB uses soft float"), + last_fp, ibfd); + ret = FALSE; + } + else if (out_fp == 2 && in_fp == 1) + { + _bfd_error_handler + /* xgettext:c-format */ + (_("%pB uses hard float, %pB uses soft float"), + ibfd, last_fp); + ret = FALSE; + } + } + + if (!ret) + { + out_attr->type = ATTR_TYPE_FLAG_INT_VAL | ATTR_TYPE_FLAG_ERROR; + bfd_set_error (bfd_error_bad_value); + return FALSE; + } + + /* Merge Tag_compatibility attributes and any common GNU ones. */ + return _bfd_elf_merge_object_attributes (ibfd, info); +} + /* Merge backend specific data from an object file to the output object file when linking. */ static bfd_boolean @@ -1149,6 +1206,9 @@ bfd_set_arch_mach (obfd, bfd_arch_m68k, arch_info->mach); + if (!m68k_elf_merge_obj_attributes (ibfd, info)) + return FALSE; + in_flags = elf_elfheader (ibfd)->e_flags; if (!elf_flags_init (obfd)) { @@ -2774,7 +2834,7 @@ void *vpp; Elf_Internal_Sym *isym; - isym = bfd_sym_from_r_symndx (&elf_m68k_hash_table (info)->sym_cache, + isym = bfd_sym_from_r_symndx (&elf_m68k_hash_table (info)->root.sym_cache, abfd, r_symndx); if (isym == NULL) return FALSE; @@ -3052,7 +3112,6 @@ { bfd *dynobj; asection *s; - bfd_boolean plt; bfd_boolean relocs; dynobj = elf_hash_table (info)->dynobj; @@ -3095,7 +3154,6 @@ /* The check_relocs and adjust_dynamic_symbol entry points have determined the sizes of the various dynamic sections. Allocate memory for them. */ - plt = FALSE; relocs = FALSE; for (s = dynobj->sections; s != NULL; s = s->next) { @@ -3111,7 +3169,7 @@ if (strcmp (name, ".plt") == 0) { /* Remember whether there is a PLT. */ - plt = s->size != 0; + ; } else if (CONST_STRNEQ (name, ".rela")) { @@ -3160,48 +3218,7 @@ return FALSE; } - if (elf_hash_table (info)->dynamic_sections_created) - { - /* Add some entries to the .dynamic section. We fill in the - values later, in elf_m68k_finish_dynamic_sections, but we - must add the entries now so that we get the correct size for - the .dynamic section. The DT_DEBUG entry is filled in by the - dynamic linker and used by the debugger. */ -#define add_dynamic_entry(TAG, VAL) \ - _bfd_elf_add_dynamic_entry (info, TAG, VAL) - - if (bfd_link_executable (info)) - { - if (!add_dynamic_entry (DT_DEBUG, 0)) - return FALSE; - } - - if (plt) - { - if (!add_dynamic_entry (DT_PLTGOT, 0) - || !add_dynamic_entry (DT_PLTRELSZ, 0) - || !add_dynamic_entry (DT_PLTREL, DT_RELA) - || !add_dynamic_entry (DT_JMPREL, 0)) - return FALSE; - } - - if (relocs) - { - if (!add_dynamic_entry (DT_RELA, 0) - || !add_dynamic_entry (DT_RELASZ, 0) - || !add_dynamic_entry (DT_RELAENT, sizeof (Elf32_External_Rela))) - return FALSE; - } - - if ((info->flags & DF_TEXTREL) != 0) - { - if (!add_dynamic_entry (DT_TEXTREL, 0)) - return FALSE; - } - } -#undef add_dynamic_entry - - return TRUE; + return _bfd_elf_add_dynamic_tags (output_bfd, info, relocs); } /* This function is called via elf_link_hash_traverse if we are @@ -4448,18 +4465,16 @@ strncpy ((char *) p + 4, targetsec->output_section->name, 8); } - if (isymbuf != NULL && symtab_hdr->contents != (unsigned char *) isymbuf) + if (symtab_hdr->contents != (unsigned char *) isymbuf) free (isymbuf); - if (internal_relocs != NULL - && elf_section_data (datasec)->relocs != internal_relocs) + if (elf_section_data (datasec)->relocs != internal_relocs) free (internal_relocs); return TRUE; -error_return: - if (isymbuf != NULL && symtab_hdr->contents != (unsigned char *) isymbuf) + error_return: + if (symtab_hdr->contents != (unsigned char *) isymbuf) free (isymbuf); - if (internal_relocs != NULL - && elf_section_data (datasec)->relocs != internal_relocs) + if (elf_section_data (datasec)->relocs != internal_relocs) free (internal_relocs); return FALSE; } diff -Nru gdb-9.1/bfd/elf32-m68k.h gdb-10.2/bfd/elf32-m68k.h --- gdb-9.1/bfd/elf32-m68k.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-m68k.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Motorola 68k series support for 32-bit ELF - Copyright (C) 2019 Free Software Foundation, Inc. + Copyright (C) 2019-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/elf32-mcore.c gdb-10.2/bfd/elf32-mcore.c --- gdb-9.1/bfd/elf32-mcore.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-mcore.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Motorola MCore specific support for 32-bit ELF - Copyright (C) 1994-2019 Free Software Foundation, Inc. + Copyright (C) 1994-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/elf32-mep.c gdb-10.2/bfd/elf32-mep.c --- gdb-9.1/bfd/elf32-mep.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-mep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* MeP-specific support for 32-bit ELF. - Copyright (C) 2001-2019 Free Software Foundation, Inc. + Copyright (C) 2001-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -43,26 +43,26 @@ MEPREL (R_RELC, 0, 0, 0, 0, 0, N, 0), /* MEPRELOC:HOWTO */ /* This section generated from bfd/mep-relocs.pl from include/elf/mep.h. */ - MEPREL (R_MEP_8, 0, 8, 0, 0, 0, U, 0xff), - MEPREL (R_MEP_16, 1, 16, 0, 0, 0, U, 0xffff), - MEPREL (R_MEP_32, 2, 32, 0, 0, 0, U, 0xffffffff), + MEPREL (R_MEP_8, 0, 8, 0, 0, 0, U, 0xff), + MEPREL (R_MEP_16, 1, 16, 0, 0, 0, U, 0xffff), + MEPREL (R_MEP_32, 2, 32, 0, 0, 0, U, 0xffffffff), MEPREL (R_MEP_PCREL8A2, 1, 8, 1, 1, 1, S, 0x00fe), MEPREL (R_MEP_PCREL12A2,1, 12, 1, 1, 1, S, 0x0ffe), MEPREL (R_MEP_PCREL17A2,2, 17, 0, 1, 1, S, 0x0000ffff), MEPREL (R_MEP_PCREL24A2,2, 24, 0, 1, 1, S, 0x07f0ffff), MEPREL (R_MEP_PCABS24A2,2, 24, 0, 1, 0, U, 0x07f0ffff), - MEPREL (R_MEP_LOW16, 2, 16, 0, 0, 0, N, 0x0000ffff), - MEPREL (R_MEP_HI16U, 2, 32, 0,16, 0, N, 0x0000ffff), - MEPREL (R_MEP_HI16S, 2, 32, 0,16, 0, N, 0x0000ffff), - MEPREL (R_MEP_GPREL, 2, 16, 0, 0, 0, S, 0x0000ffff), - MEPREL (R_MEP_TPREL, 2, 16, 0, 0, 0, S, 0x0000ffff), - MEPREL (R_MEP_TPREL7, 1, 7, 0, 0, 0, U, 0x007f), + MEPREL (R_MEP_LOW16, 2, 16, 0, 0, 0, N, 0x0000ffff), + MEPREL (R_MEP_HI16U, 2, 32, 0,16, 0, N, 0x0000ffff), + MEPREL (R_MEP_HI16S, 2, 32, 0,16, 0, N, 0x0000ffff), + MEPREL (R_MEP_GPREL, 2, 16, 0, 0, 0, S, 0x0000ffff), + MEPREL (R_MEP_TPREL, 2, 16, 0, 0, 0, S, 0x0000ffff), + MEPREL (R_MEP_TPREL7, 1, 7, 0, 0, 0, U, 0x007f), MEPREL (R_MEP_TPREL7A2, 1, 7, 1, 1, 0, U, 0x007e), MEPREL (R_MEP_TPREL7A4, 1, 7, 2, 2, 0, U, 0x007c), - MEPREL (R_MEP_UIMM24, 2, 24, 0, 0, 0, U, 0x00ffffff), + MEPREL (R_MEP_UIMM24, 2, 24, 0, 0, 0, U, 0x00ffffff), MEPREL (R_MEP_ADDR24A4, 2, 24, 0, 2, 0, U, 0x00fcffff), MEPREL (R_MEP_GNU_VTINHERIT,1, 0,16,32, 0, N, 0x0000), - MEPREL (R_MEP_GNU_VTENTRY,1, 0,16,32, 0, N, 0x0000), + MEPREL (R_MEP_GNU_VTENTRY,1, 0,16,32, 0, N, 0x0000), /* MEPRELOC:END */ }; @@ -221,7 +221,6 @@ bfd_vma relocation) { unsigned long u; - long s; unsigned char *byte; bfd_vma pc; bfd_reloc_status_type r = bfd_reloc_ok; @@ -242,12 +241,12 @@ + input_section->output_offset + rel->r_offset); - s = relocation + rel->r_addend; + u = relocation + rel->r_addend; byte = (unsigned char *)contents + rel->r_offset; if (howto->type == R_MEP_PCREL24A2 - && s == 0 + && u == 0 && pc >= 0x800000) { /* This is an unreachable branch to an undefined weak function. @@ -257,9 +256,7 @@ } if (howto->pc_relative) - s -= pc; - - u = (unsigned long) s; + u -= pc; switch (howto->type) { @@ -281,25 +278,25 @@ byte[3^e4] = (u & 0xff); break; case R_MEP_PCREL8A2: /* --------7654321- */ - if (-128 > s || s > 127) r = bfd_reloc_overflow; - byte[1^e2] = (byte[1^e2] & 0x01) | (s & 0xfe); + if (u + 128 > 255) r = bfd_reloc_overflow; + byte[1^e2] = (byte[1^e2] & 0x01) | (u & 0xfe); break; case R_MEP_PCREL12A2: /* ----ba987654321- */ - if (-2048 > s || s > 2047) r = bfd_reloc_overflow; - byte[0^e2] = (byte[0^e2] & 0xf0) | ((s >> 8) & 0x0f); - byte[1^e2] = (byte[1^e2] & 0x01) | (s & 0xfe); + if (u + 2048 > 4095) r = bfd_reloc_overflow; + byte[0^e2] = (byte[0^e2] & 0xf0) | ((u >> 8) & 0x0f); + byte[1^e2] = (byte[1^e2] & 0x01) | (u & 0xfe); break; case R_MEP_PCREL17A2: /* ----------------gfedcba987654321 */ - if (-65536 > s || s > 65535) r = bfd_reloc_overflow; - byte[2^e2] = ((s >> 9) & 0xff); - byte[3^e2] = ((s >> 1) & 0xff); + if (u + 65536 > 131071) r = bfd_reloc_overflow; + byte[2^e2] = ((u >> 9) & 0xff); + byte[3^e2] = ((u >> 1) & 0xff); break; case R_MEP_PCREL24A2: /* -----7654321----nmlkjihgfedcba98 */ - if (-8388608 > s || s > 8388607) r = bfd_reloc_overflow; - byte[0^e2] = (byte[0^e2] & 0xf8) | ((s >> 5) & 0x07); - byte[1^e2] = (byte[1^e2] & 0x0f) | ((s << 3) & 0xf0); - byte[2^e2] = ((s >> 16) & 0xff); - byte[3^e2] = ((s >> 8) & 0xff); + if (u + 8388608 > 16777215) r = bfd_reloc_overflow; + byte[0^e2] = (byte[0^e2] & 0xf8) | ((u >> 5) & 0x07); + byte[1^e2] = (byte[1^e2] & 0x0f) | ((u << 3) & 0xf0); + byte[2^e2] = ((u >> 16) & 0xff); + byte[3^e2] = ((u >> 8) & 0xff); break; case R_MEP_PCABS24A2: /* -----7654321----nmlkjihgfedcba98 */ if (u > 16777215) r = bfd_reloc_overflow; @@ -317,22 +314,21 @@ byte[3^e2] = ((u >> 16) & 0xff); break; case R_MEP_HI16S: /* ----------------vutsrqponmlkjihg */ - if (s & 0x8000) - s += 0x10000; - byte[2^e2] = ((s >> 24) & 0xff); - byte[3^e2] = ((s >> 16) & 0xff); + u += 0x8000; + byte[2^e2] = ((u >> 24) & 0xff); + byte[3^e2] = ((u >> 16) & 0xff); break; case R_MEP_GPREL: /* ----------------fedcba9876543210 */ - s -= mep_sdaoff_base(rel->r_offset); - if (-32768 > s || s > 32767) r = bfd_reloc_overflow; - byte[2^e2] = ((s >> 8) & 0xff); - byte[3^e2] = (s & 0xff); + u -= mep_sdaoff_base(rel->r_offset); + if (u + 32768 > 65535) r = bfd_reloc_overflow; + byte[2^e2] = ((u >> 8) & 0xff); + byte[3^e2] = (u & 0xff); break; case R_MEP_TPREL: /* ----------------fedcba9876543210 */ - s -= mep_tpoff_base(rel->r_offset); - if (-32768 > s || s > 32767) r = bfd_reloc_overflow; - byte[2^e2] = ((s >> 8) & 0xff); - byte[3^e2] = (s & 0xff); + u -= mep_tpoff_base(rel->r_offset); + if (u + 32768 > 65535) r = bfd_reloc_overflow; + byte[2^e2] = ((u >> 8) & 0xff); + byte[3^e2] = (u & 0xff); break; case R_MEP_TPREL7: /* ---------6543210 */ u -= mep_tpoff_base(rel->r_offset); @@ -717,10 +713,10 @@ } static bfd_boolean -mep_elf_section_flags (flagword * flags, const Elf_Internal_Shdr * hdr) +mep_elf_section_flags (const Elf_Internal_Shdr *hdr) { if (hdr->sh_flags & SHF_MEP_VLIW) - * flags |= SEC_MEP_VLIW; + hdr->bfd_section->flags |= SEC_MEP_VLIW; return TRUE; } diff -Nru gdb-9.1/bfd/elf32-metag.c gdb-10.2/bfd/elf32-metag.c --- gdb-9.1/bfd/elf32-metag.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-metag.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Meta support for 32-bit ELF - Copyright (C) 2013-2019 Free Software Foundation, Inc. + Copyright (C) 2013-2020 Free Software Foundation, Inc. Contributed by Imagination Technologies Ltd. This file is part of BFD, the Binary File Descriptor library. @@ -785,10 +785,6 @@ symbol. */ struct elf_metag_stub_hash_entry *hsh_cache; - /* Used to count relocations for delayed sizing of relocation - sections. */ - struct elf_dyn_relocs *dyn_relocs; - enum { GOT_UNKNOWN = 0, GOT_NORMAL = 1, GOT_TLS_IE = 2, GOT_TLS_LDM = 4, GOT_TLS_GD = 8 @@ -827,9 +823,6 @@ asection **input_list; Elf_Internal_Sym **all_local_syms; - /* Small local sym cache. */ - struct sym_cache sym_cache; - /* Data for LDM relocations. */ union { @@ -913,8 +906,9 @@ /* Various hash macros and functions. */ #define metag_link_hash_table(p) \ - (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \ - == METAG_ELF_DATA ? ((struct elf_metag_link_hash_table *) ((p)->hash)) : NULL) + ((is_elf_hash_table ((p)->hash) \ + && elf_hash_table_id (elf_hash_table (p)) == METAG_ELF_DATA) \ + ? (struct elf_metag_link_hash_table *) (p)->hash : NULL) #define metag_elf_hash_entry(ent) \ ((struct elf_metag_link_hash_entry *)(ent)) @@ -994,7 +988,6 @@ /* Initialize the local fields. */ hh = (struct elf_metag_link_hash_entry *) entry; hh->hsh_cache = NULL; - hh->dyn_relocs = NULL; hh->tls_type = GOT_UNKNOWN; } @@ -1021,7 +1014,7 @@ elf_metag_link_hash_table_create (bfd *abfd) { struct elf_metag_link_hash_table *htab; - bfd_size_type amt = sizeof (*htab); + size_t amt = sizeof (*htab); htab = bfd_zmalloc (amt); if (htab == NULL) @@ -1044,6 +1037,7 @@ return NULL; } htab->etab.root.hash_table_free = elf_metag_link_hash_table_free; + htab->etab.dt_pltgot_required = TRUE; return &htab->etab.root; } @@ -2102,7 +2096,7 @@ if (r_symndx < symtab_hdr->sh_info) { /* A local symbol. */ - isym = bfd_sym_from_r_symndx (&htab->sym_cache, + isym = bfd_sym_from_r_symndx (&htab->etab.sym_cache, abfd, r_symndx); if (isym == NULL) return FALSE; @@ -2328,7 +2322,7 @@ /* If this is a global symbol, we count the number of relocations we need for this symbol. */ if (hh != NULL) - hdh_head = &((struct elf_metag_link_hash_entry *) hh)->dyn_relocs; + hdh_head = &hh->eh.dyn_relocs; else { /* Track dynamic relocs needed for local syms too. */ @@ -2395,41 +2389,6 @@ hh_dir = metag_elf_hash_entry (eh_dir); hh_ind = metag_elf_hash_entry (eh_ind); - if (hh_ind->dyn_relocs != NULL) - { - if (hh_dir->dyn_relocs != NULL) - { - struct elf_dyn_relocs **hdh_pp; - struct elf_dyn_relocs *hdh_p; - - if (eh_ind->root.type == bfd_link_hash_indirect) - abort (); - - /* Add reloc counts against the weak sym to the strong sym - list. Merge any entries against the same section. */ - for (hdh_pp = &hh_ind->dyn_relocs; (hdh_p = *hdh_pp) != NULL; ) - { - struct elf_dyn_relocs *hdh_q; - - for (hdh_q = hh_dir->dyn_relocs; hdh_q != NULL; - hdh_q = hdh_q->next) - if (hdh_q->sec == hdh_p->sec) - { - hdh_q->pc_count += hdh_p->pc_count; - hdh_q->count += hdh_p->count; - *hdh_pp = hdh_p->next; - break; - } - if (hdh_q == NULL) - hdh_pp = &hdh_p->next; - } - *hdh_pp = hh_dir->dyn_relocs; - } - - hh_dir->dyn_relocs = hh_ind->dyn_relocs; - hh_ind->dyn_relocs = NULL; - } - if (eh_ind->root.type == bfd_link_hash_indirect && eh_dir->got.refcount <= 0) { @@ -2440,23 +2399,6 @@ _bfd_elf_link_hash_copy_indirect (info, eh_dir, eh_ind); } -/* Find dynamic relocs for H that apply to read-only sections. */ - -static asection * -readonly_dynrelocs (struct elf_link_hash_entry *h) -{ - struct elf_dyn_relocs *p; - - for (p = metag_elf_hash_entry (h)->dyn_relocs; p != NULL; p = p->next) - { - asection *s = p->sec->output_section; - - if (s != NULL && (s->flags & SEC_READONLY) != 0) - return p->sec; - } - return NULL; -} - /* Adjust a symbol defined by a dynamic object and referenced by a regular object. The current definition is in some section of the dynamic object, but we're not including those sections. We have to @@ -2532,7 +2474,7 @@ /* If we don't find any dynamic relocs in read-only sections, then we'll be keeping the dynamic relocs and avoiding the copy reloc. */ - if (!readonly_dynrelocs (eh)) + if (!_bfd_elf_readonly_dynrelocs (eh)) { eh->non_got_ref = 0; return TRUE; @@ -2580,7 +2522,6 @@ { struct bfd_link_info *info; struct elf_metag_link_hash_table *htab; - struct elf_metag_link_hash_entry *hh; struct elf_dyn_relocs *hdh_p; if (eh->root.type == bfd_link_hash_indirect) @@ -2687,8 +2628,7 @@ else eh->got.offset = (bfd_vma) -1; - hh = (struct elf_metag_link_hash_entry *) eh; - if (hh->dyn_relocs == NULL) + if (eh->dyn_relocs == NULL) return TRUE; /* If this is a -Bsymbolic shared link, then we need to discard all @@ -2702,7 +2642,7 @@ { struct elf_dyn_relocs **hdh_pp; - for (hdh_pp = &hh->dyn_relocs; (hdh_p = *hdh_pp) != NULL; ) + for (hdh_pp = &eh->dyn_relocs; (hdh_p = *hdh_pp) != NULL; ) { hdh_p->count -= hdh_p->pc_count; hdh_p->pc_count = 0; @@ -2715,11 +2655,11 @@ /* Also discard relocs on undefined weak syms with non-default visibility. */ - if (hh->dyn_relocs != NULL + if (eh->dyn_relocs != NULL && eh->root.type == bfd_link_hash_undefweak) { if (ELF_ST_VISIBILITY (eh->other) != STV_DEFAULT) - hh->dyn_relocs = NULL; + eh->dyn_relocs = NULL; /* Make sure undefined weak symbols are output as a dynamic symbol in PIEs. */ @@ -2758,14 +2698,14 @@ goto keep; } - hh->dyn_relocs = NULL; + eh->dyn_relocs = NULL; return TRUE; keep: ; } /* Finally, allocate space. */ - for (hdh_p = hh->dyn_relocs; hdh_p != NULL; hdh_p = hdh_p->next) + for (hdh_p = eh->dyn_relocs; hdh_p != NULL; hdh_p = hdh_p->next) { asection *sreloc = elf_section_data (hdh_p->sec)->sreloc; sreloc->size += hdh_p->count * sizeof (Elf32_External_Rela); @@ -2774,33 +2714,6 @@ return TRUE; } -/* Set DF_TEXTREL if we find any dynamic relocs that apply to - read-only sections. */ - -static bfd_boolean -maybe_set_textrel (struct elf_link_hash_entry *h, void *info_p) -{ - asection *sec; - - if (h->root.type == bfd_link_hash_indirect) - return TRUE; - - sec = readonly_dynrelocs (h); - if (sec != NULL) - { - struct bfd_link_info *info = (struct bfd_link_info *) info_p; - - info->flags |= DF_TEXTREL; - info->callbacks->minfo - (_("%pB: dynamic relocation against `%pT' in read-only section `%pA'\n"), - sec->owner, h->root.root.string, sec); - - /* Not an error, just cut short the traversal. */ - return FALSE; - } - return TRUE; -} - /* Set the sizes of the dynamic sections. */ static bfd_boolean @@ -2988,55 +2901,7 @@ } } - if (htab->etab.dynamic_sections_created) - { - /* Add some entries to the .dynamic section. We fill in the - values later, in elf_metag_finish_dynamic_sections, but we - must add the entries now so that we get the correct size for - the .dynamic section. The DT_DEBUG entry is filled in by the - dynamic linker and used by the debugger. */ -#define add_dynamic_entry(TAG, VAL) \ - _bfd_elf_add_dynamic_entry (info, TAG, VAL) - - if (!add_dynamic_entry (DT_PLTGOT, 0)) - return FALSE; - - if (bfd_link_executable (info)) - { - if (!add_dynamic_entry (DT_DEBUG, 0)) - return FALSE; - } - - if (htab->etab.srelplt->size != 0) - { - if (!add_dynamic_entry (DT_PLTRELSZ, 0) - || !add_dynamic_entry (DT_PLTREL, DT_RELA) - || !add_dynamic_entry (DT_JMPREL, 0)) - return FALSE; - } - - if (relocs) - { - if (!add_dynamic_entry (DT_RELA, 0) - || !add_dynamic_entry (DT_RELASZ, 0) - || !add_dynamic_entry (DT_RELAENT, sizeof (Elf32_External_Rela))) - return FALSE; - - /* If any dynamic relocs apply to a read-only section, - then we need a DT_TEXTREL entry. */ - if ((info->flags & DF_TEXTREL) == 0) - elf_link_hash_traverse (&htab->etab, maybe_set_textrel, info); - - if ((info->flags & DF_TEXTREL) != 0) - { - if (!add_dynamic_entry (DT_TEXTREL, 0)) - return FALSE; - } - } - } -#undef add_dynamic_entry - - return TRUE; + return _bfd_elf_add_dynamic_tags (output_bfd, info, relocs); } /* Finish up dynamic symbol handling. We set the contents of various @@ -3459,7 +3324,7 @@ #define MOV_PC_A0_3 0xa3180ca0 static bfd_boolean -metag_build_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg ATTRIBUTE_UNUSED) +metag_build_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg) { struct elf_metag_stub_hash_entry *hsh; asection *stub_sec; @@ -3467,9 +3332,19 @@ bfd_byte *loc; bfd_vma sym_value; int size; + struct bfd_link_info *info; /* Massage our args to the form they really have. */ hsh = (struct elf_metag_stub_hash_entry *) gen_entry; + info = (struct bfd_link_info *) in_arg; + + /* Fail if the target section could not be assigned to an output + section. The user should fix his linker script. */ + if (hsh->target_section->output_section == NULL + && info->non_contiguous_regions) + info->callbacks->einfo (_("%F%P: Could not assign '%pA' to an output section. " + "Retry without --enable-non-contiguous-regions.\n"), + hsh->target_section); stub_sec = hsh->stub_sec; @@ -3562,7 +3437,7 @@ unsigned int top_id, top_index; asection *section; asection **input_list, **list; - bfd_size_type amt; + size_t amt; struct elf_metag_link_hash_table *htab = metag_link_hash_table (info); /* Count the number of input BFDs and find the top input section id. */ @@ -3741,7 +3616,7 @@ /* We want to read in symbol extension records only once. To do this we need to read in the local symbols in parallel and save them for later use; so hold pointers to the local symbols in an array. */ - bfd_size_type amt = sizeof (Elf_Internal_Sym *) * htab->bfd_count; + size_t amt = sizeof (Elf_Internal_Sym *) * htab->bfd_count; all_local_syms = bfd_zmalloc (amt); htab->all_local_syms = all_local_syms; if (all_local_syms == NULL) diff -Nru gdb-9.1/bfd/elf32-metag.h gdb-10.2/bfd/elf32-metag.h --- gdb-9.1/bfd/elf32-metag.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-metag.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Meta support for 32-bit ELF - Copyright (C) 2013-2019 Free Software Foundation, Inc. + Copyright (C) 2013-2020 Free Software Foundation, Inc. Contributed by Imagination Technologies Ltd. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/elf32-microblaze.c gdb-10.2/bfd/elf32-microblaze.c --- gdb-9.1/bfd/elf32-microblaze.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-microblaze.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Xilinx MicroBlaze-specific support for 32-bit ELF - Copyright (C) 2009-2019 Free Software Foundation, Inc. + Copyright (C) 2009-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -721,9 +721,6 @@ { struct elf_link_hash_entry elf; - /* Track dynamic relocs copied for this symbol. */ - struct elf_dyn_relocs *dyn_relocs; - /* TLS Reference Types for the symbol; Updated by check_relocs */ #define TLS_GD 1 /* GD reloc. */ #define TLS_LD 2 /* LD reloc. */ @@ -747,9 +744,6 @@ { struct elf_link_hash_table elf; - /* Small local sym to section mapping cache. */ - struct sym_cache sym_sec; - /* TLS Local Dynamic GOT Entry */ union { bfd_signed_vma refcount; @@ -762,9 +756,10 @@ /* Get the ELF linker hash table from a link_info structure. */ -#define elf32_mb_hash_table(p) \ - (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \ - == MICROBLAZE_ELF_DATA ? ((struct elf32_mb_link_hash_table *) ((p)->hash)) : NULL) +#define elf32_mb_hash_table(p) \ + ((is_elf_hash_table ((p)->hash) \ + && elf_hash_table_id (elf_hash_table (p)) == MICROBLAZE_ELF_DATA) \ + ? (struct elf32_mb_link_hash_table *) (p)->hash : NULL) /* Create an entry in a microblaze ELF linker hash table. */ @@ -790,7 +785,6 @@ struct elf32_mb_link_hash_entry *eh; eh = (struct elf32_mb_link_hash_entry *) entry; - eh->dyn_relocs = NULL; eh->tls_mask = 0; } @@ -803,7 +797,7 @@ microblaze_elf_link_hash_table_create (bfd *abfd) { struct elf32_mb_link_hash_table *ret; - bfd_size_type amt = sizeof (struct elf32_mb_link_hash_table); + size_t amt = sizeof (struct elf32_mb_link_hash_table); ret = (struct elf32_mb_link_hash_table *) bfd_zmalloc (amt); if (ret == NULL) @@ -2234,11 +2228,8 @@ symtab_hdr->contents = (bfd_byte *) isymbuf; } - if (free_relocs != NULL) - { - free (free_relocs); - free_relocs = NULL; - } + free (free_relocs); + free_relocs = NULL; if (free_contents != NULL) { @@ -2261,16 +2252,11 @@ return TRUE; error_return: - if (free_relocs != NULL) - free (free_relocs); - if (free_contents != NULL) - free (free_contents); - if (sec->relax != NULL) - { - free (sec->relax); - sec->relax = NULL; - sec->relax_count = 0; - } + free (free_relocs); + free (free_contents); + free (sec->relax); + sec->relax = NULL; + sec->relax_count = 0; return FALSE; } @@ -2524,7 +2510,7 @@ /* If this is a global symbol, we count the number of relocations we need for this symbol. */ if (h != NULL) - head = &((struct elf32_mb_link_hash_entry *) h)->dyn_relocs; + head = &h->dyn_relocs; else { /* Track dynamic relocs needed for local syms too. @@ -2535,7 +2521,7 @@ Elf_Internal_Sym *isym; void *vpp; - isym = bfd_sym_from_r_symndx (&htab->sym_sec, + isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache, abfd, r_symndx); if (isym == NULL) return FALSE; @@ -2551,7 +2537,7 @@ p = *head; if (p == NULL || p->sec != sec) { - bfd_size_type amt = sizeof *p; + size_t amt = sizeof *p; p = ((struct elf_dyn_relocs *) bfd_alloc (htab->elf.dynobj, amt)); if (p == NULL) @@ -2587,62 +2573,11 @@ edir = (struct elf32_mb_link_hash_entry *) dir; eind = (struct elf32_mb_link_hash_entry *) ind; - if (eind->dyn_relocs != NULL) - { - if (edir->dyn_relocs != NULL) - { - struct elf_dyn_relocs **pp; - struct elf_dyn_relocs *p; - - if (ind->root.type == bfd_link_hash_indirect) - abort (); - - /* Add reloc counts against the weak sym to the strong sym - list. Merge any entries against the same section. */ - for (pp = &eind->dyn_relocs; (p = *pp) != NULL; ) - { - struct elf_dyn_relocs *q; - - for (q = edir->dyn_relocs; q != NULL; q = q->next) - if (q->sec == p->sec) - { - q->pc_count += p->pc_count; - q->count += p->count; - *pp = p->next; - break; - } - if (q == NULL) - pp = &p->next; - } - *pp = edir->dyn_relocs; - } - - edir->dyn_relocs = eind->dyn_relocs; - eind->dyn_relocs = NULL; - } - edir->tls_mask |= eind->tls_mask; _bfd_elf_link_hash_copy_indirect (info, dir, ind); } -/* Find dynamic relocs for H that apply to read-only sections. */ - -static asection * -readonly_dynrelocs (struct elf_link_hash_entry *h) -{ - struct elf_dyn_relocs *p; - - for (p = elf32_mb_hash_entry (h)->dyn_relocs; p != NULL; p = p->next) - { - asection *s = p->sec->output_section; - - if (s != NULL && (s->flags & SEC_READONLY) != 0) - return p->sec; - } - return NULL; -} - static bfd_boolean microblaze_elf_adjust_dynamic_symbol (struct bfd_link_info *info, struct elf_link_hash_entry *h) @@ -2721,7 +2656,7 @@ /* If we don't find any dynamic relocs in read-only sections, then we'll be keeping the dynamic relocs and avoiding the copy reloc. */ - if (!readonly_dynrelocs (h)) + if (!_bfd_elf_readonly_dynrelocs (h)) { h->non_got_ref = 0; return TRUE; @@ -2906,7 +2841,7 @@ else h->got.offset = (bfd_vma) -1; - if (eh->dyn_relocs == NULL) + if (h->dyn_relocs == NULL) return TRUE; /* In the shared -Bsymbolic case, discard space allocated for @@ -2923,7 +2858,7 @@ { struct elf_dyn_relocs **pp; - for (pp = &eh->dyn_relocs; (p = *pp) != NULL; ) + for (pp = &h->dyn_relocs; (p = *pp) != NULL; ) { p->count -= p->pc_count; p->pc_count = 0; @@ -2934,7 +2869,7 @@ } } else if (UNDEFWEAK_NO_DYNAMIC_RELOC (info, h)) - eh->dyn_relocs = NULL; + h->dyn_relocs = NULL; } else { @@ -2964,13 +2899,13 @@ goto keep; } - eh->dyn_relocs = NULL; + h->dyn_relocs = NULL; keep: ; } /* Finally, allocate space. */ - for (p = eh->dyn_relocs; p != NULL; p = p->next) + for (p = h->dyn_relocs; p != NULL; p = p->next) { asection *sreloc = elf_section_data (p->sec)->sreloc; sreloc->size += p->count * sizeof (Elf32_External_Rela); @@ -3166,45 +3101,9 @@ return FALSE; } - if (elf_hash_table (info)->dynamic_sections_created) - { - /* Add some entries to the .dynamic section. We fill in the - values later, in microblaze_elf_finish_dynamic_sections, but we - must add the entries now so that we get the correct size for - the .dynamic section. The DT_DEBUG entry is filled in by the - dynamic linker and used by the debugger. */ -#define add_dynamic_entry(TAG, VAL) \ - _bfd_elf_add_dynamic_entry (info, TAG, VAL) - - if (bfd_link_executable (info)) - { - if (!add_dynamic_entry (DT_DEBUG, 0)) - return FALSE; - } - - if (!add_dynamic_entry (DT_RELA, 0) - || !add_dynamic_entry (DT_RELASZ, 0) - || !add_dynamic_entry (DT_RELAENT, sizeof (Elf32_External_Rela))) - return FALSE; - - if (htab->elf.splt->size != 0) - { - if (!add_dynamic_entry (DT_PLTGOT, 0) - || !add_dynamic_entry (DT_PLTRELSZ, 0) - || !add_dynamic_entry (DT_PLTREL, DT_RELA) - || !add_dynamic_entry (DT_JMPREL, 0) - || !add_dynamic_entry (DT_BIND_NOW, 1)) - return FALSE; - } - - if (info->flags & DF_TEXTREL) - { - if (!add_dynamic_entry (DT_TEXTREL, 0)) - return FALSE; - } - } -#undef add_dynamic_entry - return TRUE; + /* ??? Force DF_BIND_NOW? */ + info->flags |= DF_BIND_NOW; + return _bfd_elf_add_dynamic_tags (output_bfd, info, TRUE); } /* Finish up dynamic symbol handling. We set the contents of various @@ -3501,7 +3400,7 @@ put into .sbss. */ *secp = bfd_make_section_old_way (abfd, ".sbss"); if (*secp == NULL - || !bfd_set_section_flags (*secp, SEC_IS_COMMON)) + || !bfd_set_section_flags (*secp, SEC_IS_COMMON | SEC_SMALL_DATA)) return FALSE; *valp = sym->st_size; diff -Nru gdb-9.1/bfd/elf32-mips.c gdb-10.2/bfd/elf32-mips.c --- gdb-9.1/bfd/elf32-mips.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-mips.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* MIPS-specific support for 32-bit ELF - Copyright (C) 1993-2019 Free Software Foundation, Inc. + Copyright (C) 1993-2020 Free Software Foundation, Inc. Most of the information added by Ian Lance Taylor, Cygnus Support, . @@ -63,6 +63,8 @@ (bfd *, arelent *, Elf_Internal_Rela *); static bfd_boolean mips_elf_sym_is_global (bfd *, asymbol *); +static bfd_boolean mips_elf32_elfsym_local_is_section + (bfd *); static bfd_boolean mips_elf32_object_p (bfd *); static bfd_boolean mips_elf_is_local_label_name @@ -2284,6 +2286,14 @@ || bfd_is_und_section (bfd_asymbol_section (sym)) || bfd_is_com_section (bfd_asymbol_section (sym))); } + +/* Likewise, return TRUE if the symbol table split overall must be + between section symbols and all other symbols. */ +static bfd_boolean +mips_elf32_elfsym_local_is_section (bfd *abfd) +{ + return SGI_COMPAT (abfd); +} /* Set the right machine number for a MIPS ELF file. */ @@ -2552,6 +2562,8 @@ #define elf_backend_ignore_discarded_relocs \ _bfd_mips_elf_ignore_discarded_relocs #define elf_backend_write_section _bfd_mips_elf_write_section +#define elf_backend_elfsym_local_is_section \ + mips_elf32_elfsym_local_is_section #define elf_backend_mips_irix_compat elf32_mips_irix_compat #define elf_backend_mips_rtype_to_howto mips_elf32_rtype_to_howto #define elf_backend_sort_relocs_p _bfd_mips_elf_sort_relocs_p @@ -2670,6 +2682,9 @@ #define ELF_MAXPAGESIZE 0x1000 #define ELF_COMMONPAGESIZE 0x1000 +#undef ELF_TARGET_OS +#define ELF_TARGET_OS is_vxworks + #undef elf_backend_want_got_plt #define elf_backend_want_got_plt 1 #undef elf_backend_want_plt_sym diff -Nru gdb-9.1/bfd/elf32-moxie.c gdb-10.2/bfd/elf32-moxie.c --- gdb-9.1/bfd/elf32-moxie.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-moxie.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,8 +1,8 @@ /* moxie-specific support for 32-bit ELF. - Copyright (C) 2009-2019 Free Software Foundation, Inc. + Copyright (C) 2009-2020 Free Software Foundation, Inc. Copied from elf32-fr30.c which is.. - Copyright (C) 1998-2019 Free Software Foundation, Inc. + Copyright (C) 1998-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/elf32-msp430.c gdb-10.2/bfd/elf32-msp430.c --- gdb-9.1/bfd/elf32-msp430.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-msp430.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* MSP430-specific support for 32-bit ELF - Copyright (C) 2002-2019 Free Software Foundation, Inc. + Copyright (C) 2002-2020 Free Software Foundation, Inc. Contributed by Dmitry Diky This file is part of BFD, the Binary File Descriptor library. @@ -26,6 +26,8 @@ #include "elf-bfd.h" #include "elf/msp430.h" +static bfd_boolean debug_relocs = 0; + /* All users of this file have bfd_octets_per_byte (abfd, sec) == 1. */ #define OCTETS_PER_BYTE(ABFD, SEC) 1 @@ -54,6 +56,20 @@ return bfd_reloc_continue; } +/* Special handler for relocations which don't have to be relocated. + This function just simply returns bfd_reloc_ok. */ +static bfd_reloc_status_type +msp430_elf_ignore_reloc (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc_entry, + asymbol *symbol ATTRIBUTE_UNUSED, + void *data ATTRIBUTE_UNUSED, asection *input_section, + bfd *output_bfd, char **error_message ATTRIBUTE_UNUSED) +{ + if (output_bfd != NULL) + reloc_entry->address += input_section->output_offset; + + return bfd_reloc_ok; +} + static reloc_howto_type elf_msp430_howto_table[] = { HOWTO (R_MSP430_NONE, /* type */ @@ -218,7 +234,40 @@ FALSE, /* partial_inplace */ 0xffffffff, /* src_mask */ 0xffffffff, /* dst_mask */ - FALSE) /* pcrel_offset */ + FALSE), /* pcrel_offset */ + + /* The length of unsigned-leb128 is variable, just assume the + size is one byte here. */ + HOWTO (R_MSP430_GNU_SET_ULEB128, /* type */ + 0, /* rightshift */ + 0, /* size */ + 0, /* bitsize */ + FALSE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_dont, /* complain_on_overflow */ + msp430_elf_ignore_reloc, /* special handler. */ + "R_MSP430_GNU_SET_ULEB128", /* name */ + FALSE, /* partial_inplace */ + 0, /* src_mask */ + 0, /* dst_mask */ + FALSE), /* pcrel_offset */ + + /* The length of unsigned-leb128 is variable, just assume the + size is one byte here. */ + HOWTO (R_MSP430_GNU_SUB_ULEB128, /* type */ + 0, /* rightshift */ + 0, /* size */ + 0, /* bitsize */ + FALSE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_dont, /* complain_on_overflow */ + msp430_elf_ignore_reloc, /* special handler. */ + "R_MSP430_GNU_SUB_ULEB128", /* name */ + FALSE, /* partial_inplace */ + 0, /* src_mask */ + 0, /* dst_mask */ + FALSE), /* pcrel_offset */ + }; static reloc_howto_type elf_msp430x_howto_table[] = @@ -521,7 +570,40 @@ FALSE, /* partial_inplace */ 0xffffffff, /* src_mask */ 0xffffffff, /* dst_mask */ - FALSE) /* pcrel_offset */ + FALSE), /* pcrel_offset */ + + /* The length of unsigned-leb128 is variable, just assume the + size is one byte here. */ + HOWTO (R_MSP430X_GNU_SET_ULEB128, /* type */ + 0, /* rightshift */ + 0, /* size */ + 0, /* bitsize */ + FALSE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_dont, /* complain_on_overflow */ + msp430_elf_ignore_reloc, /* special handler. */ + "R_MSP430X_GNU_SET_ULEB128", /* name */ + FALSE, /* partial_inplace */ + 0, /* src_mask */ + 0, /* dst_mask */ + FALSE), /* pcrel_offset */ + + /* The length of unsigned-leb128 is variable, just assume the + size is one byte here. */ + HOWTO (R_MSP430X_GNU_SUB_ULEB128, /* type */ + 0, /* rightshift */ + 0, /* size */ + 0, /* bitsize */ + FALSE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_dont, /* complain_on_overflow */ + msp430_elf_ignore_reloc, /* special handler. */ + "R_MSP430X_GNU_SUB_ULEB128", /* name */ + FALSE, /* partial_inplace */ + 0, /* src_mask */ + 0, /* dst_mask */ + FALSE), /* pcrel_offset */ + }; /* Map BFD reloc types to MSP430 ELF reloc types. */ @@ -545,7 +627,9 @@ {BFD_RELOC_MSP430_2X_PCREL, R_MSP430_2X_PCREL}, {BFD_RELOC_MSP430_RL_PCREL, R_MSP430_RL_PCREL}, {BFD_RELOC_8, R_MSP430_8}, - {BFD_RELOC_MSP430_SYM_DIFF, R_MSP430_SYM_DIFF} + {BFD_RELOC_MSP430_SYM_DIFF, R_MSP430_SYM_DIFF}, + {BFD_RELOC_MSP430_SET_ULEB128, R_MSP430_GNU_SET_ULEB128 }, + {BFD_RELOC_MSP430_SUB_ULEB128, R_MSP430_GNU_SUB_ULEB128 } }; static const struct msp430_reloc_map msp430x_reloc_map[] = @@ -571,7 +655,9 @@ {BFD_RELOC_MSP430_10_PCREL, R_MSP430X_10_PCREL}, {BFD_RELOC_MSP430_2X_PCREL, R_MSP430X_2X_PCREL}, {BFD_RELOC_MSP430_RL_PCREL, R_MSP430X_PCR16}, - {BFD_RELOC_MSP430_SYM_DIFF, R_MSP430X_SYM_DIFF} + {BFD_RELOC_MSP430_SYM_DIFF, R_MSP430X_SYM_DIFF}, + {BFD_RELOC_MSP430_SET_ULEB128, R_MSP430X_GNU_SET_ULEB128 }, + {BFD_RELOC_MSP430_SUB_ULEB128, R_MSP430X_GNU_SUB_ULEB128 } }; static inline bfd_boolean @@ -742,6 +828,10 @@ BFD_ASSERT (! is_rel_reloc || rel->r_addend == 0); } + if (debug_relocs) + printf ("writing relocation (%p) at 0x%lx type: %d\n", rel, + (long) (input_section->output_section->vma + input_section->output_offset + + rel->r_offset), howto->type); if (sym_diff_section != NULL) { BFD_ASSERT (sym_diff_section == input_section); @@ -749,6 +839,9 @@ if (uses_msp430x_relocs (input_bfd)) switch (howto->type) { + case R_MSP430X_GNU_SET_ULEB128: + relocation += (!is_rel_reloc ? rel->r_addend : 0); + /* Fall through. */ case R_MSP430_ABS32: /* If we are computing a 32-bit value for the location lists and the result is 0 then we add one to the value. A zero @@ -774,6 +867,9 @@ else switch (howto->type) { + case R_MSP430_GNU_SET_ULEB128: + relocation += (!is_rel_reloc ? rel->r_addend : 0); + /* Fall through. */ case R_MSP430_32: case R_MSP430_16: case R_MSP430_16_BYTE: @@ -788,16 +884,63 @@ sym_diff_section = NULL; } - if (uses_msp430x_relocs (input_bfd)) + if ((uses_msp430x_relocs (input_bfd) + && howto->type == R_MSP430X_GNU_SET_ULEB128) + || (!uses_msp430x_relocs (input_bfd) + && howto->type == R_MSP430_GNU_SET_ULEB128)) + { + unsigned int len, new_len = 0; + bfd_byte *endp, *p; + unsigned int val = relocation; + + _bfd_read_unsigned_leb128 (input_bfd, contents + rel->r_offset, &len); + + /* Clean the contents value to zero. Do not reduce the length. */ + p = contents + rel->r_offset; + endp = (p + len) - 1; + memset (p, 0x80, len - 1); + *(endp) = 0; + + /* Get the length of the new uleb128 value. */ + do + { + new_len++; + val >>= 7; + } while (val); + + if (new_len > len) + { + _bfd_error_handler + (_("error: final size of uleb128 value at offset 0x%lx in %pA " + "from %pB exceeds available space"), + (long) rel->r_offset, input_section, input_bfd); + } + else + { + /* If the number of bytes required to store the new value has + decreased, "right align" the new value within the available space, + so the MSB side is padded with uleb128 zeros (0x80). */ + p = _bfd_write_unsigned_leb128 (p + (len - new_len), endp, + relocation); + /* We checked there is enough space for the new value above, so this + should never be NULL. */ + BFD_ASSERT (p); + } + + return bfd_reloc_ok; + } + else if (uses_msp430x_relocs (input_bfd)) switch (howto->type) { case R_MSP430X_SYM_DIFF: + case R_MSP430X_GNU_SUB_ULEB128: /* Cache the input section and value. The offset is unreliable, since relaxation may have reduced the following reloc's offset. */ BFD_ASSERT (! is_rel_reloc); sym_diff_section = input_section; - sym_diff_value = relocation; + sym_diff_value = relocation + (howto->type == R_MSP430X_GNU_SUB_ULEB128 + ? rel->r_addend : 0); return bfd_reloc_ok; case R_MSP430_ABS16: @@ -1248,11 +1391,13 @@ break; case R_MSP430_SYM_DIFF: + case R_MSP430_GNU_SUB_ULEB128: /* Cache the input section and value. The offset is unreliable, since relaxation may have reduced the following reloc's offset. */ sym_diff_section = input_section; - sym_diff_value = relocation; + sym_diff_value = relocation + (howto->type == R_MSP430_GNU_SUB_ULEB128 + ? rel->r_addend : 0); return bfd_reloc_ok; default: @@ -1663,6 +1808,9 @@ contents = elf_section_data (sec)->this_hdr.contents; toaddr = sec->size; + if (debug_relocs) + printf (" deleting %d bytes between 0x%lx to 0x%lx\n", + count, (long) addr, (long) toaddr); irel = elf_section_data (sec)->relocs; irelend = irel + sec->reloc_count; @@ -1710,10 +1858,15 @@ && (CONST_STRNEQ (name, ".Letext") || CONST_STRNEQ (name, ".LFE"))))) { + if (debug_relocs) + printf (" adjusting value of local symbol %s from 0x%lx ", + name, (long) isym->st_value); if (isym->st_value < addr + count) isym->st_value = addr; else isym->st_value -= count; + if (debug_relocs) + printf ("to 0x%lx\n", (long) isym->st_value); } /* Adjust the function symbol's size as well. */ else if (ELF_ST_TYPE (isym->st_info) == STT_FUNC @@ -1754,11 +1907,11 @@ return TRUE; } -/* Insert two words into a section whilst relaxing. */ +/* Insert one or two words into a section whilst relaxing. */ static bfd_byte * -msp430_elf_relax_add_two_words (bfd * abfd, asection * sec, bfd_vma addr, - int word1, int word2) +msp430_elf_relax_add_words (bfd * abfd, asection * sec, bfd_vma addr, + int num_words, int word1, int word2) { Elf_Internal_Shdr *symtab_hdr; unsigned int sec_shndx; @@ -1772,20 +1925,25 @@ unsigned int symcount; bfd_vma sec_end; asection *p; + if (debug_relocs) + printf (" adding %d words at 0x%lx\n", num_words, + (long) (sec->output_section->vma + sec->output_offset + addr)); contents = elf_section_data (sec)->this_hdr.contents; sec_end = sec->size; + int num_bytes = num_words * 2; /* Make space for the new words. */ - contents = bfd_realloc (contents, sec_end + 4); - memmove (contents + addr + 4, contents + addr, sec_end - addr); + contents = bfd_realloc (contents, sec_end + num_bytes); + memmove (contents + addr + num_bytes, contents + addr, sec_end - addr); /* Insert the new words. */ bfd_put_16 (abfd, word1, contents + addr); - bfd_put_16 (abfd, word2, contents + addr + 2); + if (num_words == 2) + bfd_put_16 (abfd, word2, contents + addr + 2); /* Update the section information. */ - sec->size += 4; + sec->size += num_bytes; elf_section_data (sec)->this_hdr.contents = contents; /* Adjust all the relocs. */ @@ -1794,12 +1952,12 @@ for (; irel < irelend; irel++) if ((irel->r_offset >= addr && irel->r_offset < sec_end)) - irel->r_offset += 4; + irel->r_offset += num_bytes; /* Adjust the local symbols defined in this section. */ sec_shndx = _bfd_elf_section_from_bfd_section (abfd, sec); for (p = abfd->sections; p != NULL; p = p->next) - msp430_elf_relax_adjust_locals (abfd, p, addr, -4, + msp430_elf_relax_adjust_locals (abfd, p, addr, -num_bytes, sec_shndx, sec_end); /* Adjust the global symbols affected by the move. */ @@ -1808,7 +1966,14 @@ for (isymend = isym + symtab_hdr->sh_info; isym < isymend; isym++) if (isym->st_shndx == sec_shndx && isym->st_value >= addr && isym->st_value < sec_end) - isym->st_value += 4; + { + if (debug_relocs) + printf (" adjusting value of local symbol %s from 0x%lx to " + "0x%lx\n", bfd_elf_string_from_elf_section + (abfd, symtab_hdr->sh_link, isym->st_name), + (long) isym->st_value, (long)(isym->st_value + num_bytes)); + isym->st_value += num_bytes; + } /* Now adjust the global symbols defined in this section. */ symcount = (symtab_hdr->sh_size / sizeof (Elf32_External_Sym) @@ -1824,7 +1989,7 @@ && sym_hash->root.u.def.section == sec && sym_hash->root.u.def.value >= addr && sym_hash->root.u.def.value < sec_end) - sym_hash->root.u.def.value += 4; + sym_hash->root.u.def.value += num_bytes; } return contents; @@ -1853,6 +2018,10 @@ || sec->reloc_count == 0 || (sec->flags & SEC_CODE) == 0) return TRUE; + if (debug_relocs) + printf ("Relaxing %s (%p), output_offset: 0x%lx sec size: 0x%lx\n", + sec->name, sec, (long) sec->output_offset, (long) sec->size); + symtab_hdr = & elf_tdata (abfd)->symtab_hdr; /* Get a copy of the native relocations. */ @@ -1864,6 +2033,8 @@ /* Walk through them looking for relaxing opportunities. */ irelend = internal_relocs + sec->reloc_count; + if (debug_relocs) + printf (" trying code size growing relocs\n"); /* Do code size growing relocs first. */ for (irel = internal_relocs; irel < irelend; irel++) { @@ -1920,6 +2091,15 @@ sym_sec = bfd_section_from_elf_index (abfd, isym->st_shndx); symval = (isym->st_value + sym_sec->output_section->vma + sym_sec->output_offset); + + if (debug_relocs) + printf (" processing reloc at 0x%lx for local sym: %s " + "st_value: 0x%lx adj value: 0x%lx\n", + (long) (sec->output_offset + sec->output_section->vma + + irel->r_offset), + bfd_elf_string_from_elf_section (abfd, symtab_hdr->sh_link, + isym->st_name), + (long) isym->st_value, (long) symval); } else { @@ -1941,6 +2121,13 @@ symval = (h->root.u.def.value + h->root.u.def.section->output_section->vma + h->root.u.def.section->output_offset); + if (debug_relocs) + printf (" processing reloc at 0x%lx for global sym: %s " + "st_value: 0x%lx adj value: 0x%lx\n", + (long) (sec->output_offset + sec->output_section->vma + + irel->r_offset), + h->root.root.string, (long) h->root.u.def.value, + (long) symval); } /* For simplicity of coding, we are going to modify the section @@ -1960,6 +2147,7 @@ value -= (sec->output_section->vma + sec->output_offset); value -= irel->r_offset; value -= 2; + /* Scale. */ value >>= 1; @@ -1971,8 +2159,12 @@ opcode = bfd_get_16 (abfd, contents + irel->r_offset); /* Compute the new opcode. We are going to convert: + JMP label + into: + BR[A] label + or J label - into: + into: J 1f BR[A] #label 1: */ @@ -1992,8 +2184,14 @@ 1: br label 2: */ continue; + case 0x3c00: + if (uses_msp430x_relocs (abfd)) + opcode = 0x0080; /* JMP -> BRA */ + else + opcode = 0x4030; /* JMP -> BR */ + break; default: - /* Not a conditional branch instruction. */ + /* Unhandled branch instruction. */ /* fprintf (stderr, "unrecog: %x\n", opcode); */ continue; } @@ -2009,27 +2207,58 @@ /* Insert the new branch instruction. */ if (uses_msp430x_relocs (abfd)) { - /* Insert an absolute branch (aka MOVA) instruction. */ - contents = msp430_elf_relax_add_two_words - (abfd, sec, irel->r_offset + 2, 0x0080, 0x0000); - - /* Update the relocation to point to the inserted branch - instruction. Note - we are changing a PC-relative reloc - into an absolute reloc, but this is OK because we have - arranged with the assembler to have the reloc's value be - a (local) symbol, not a section+offset value. */ - irel->r_offset += 2; + if (debug_relocs) + printf (" R_MSP430X_10_PCREL -> R_MSP430X_ABS20_ADR_SRC " + "(growing with new opcode 0x%x)\n", opcode); + + /* Insert an absolute branch (aka MOVA) instruction. + Note that bits 19:16 of the address are stored in the first word + of the insn, so this is where r_offset will point to. */ + if (opcode == 0x0080) + { + /* If we're inserting a BRA because we are converting from a JMP, + then only add one word for destination address; the BRA opcode + has already been written. */ + contents = msp430_elf_relax_add_words + (abfd, sec, irel->r_offset + 2, 1, 0x0000, 0); + } + else + { + contents = msp430_elf_relax_add_words + (abfd, sec, irel->r_offset + 2, 2, 0x0080, 0x0000); + /* Update the relocation to point to the inserted branch + instruction. Note - we are changing a PC-relative reloc + into an absolute reloc, but this is OK because we have + arranged with the assembler to have the reloc's value be + a (local) symbol, not a section+offset value. */ + irel->r_offset += 2; + } + irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info), R_MSP430X_ABS20_ADR_SRC); } else { - contents = msp430_elf_relax_add_two_words - (abfd, sec, irel->r_offset + 2, 0x4030, 0x0000); - - /* See comment above about converting a 10-bit PC-rel - relocation into a 16-bit absolute relocation. */ - irel->r_offset += 4; + if (debug_relocs) + printf (" R_MSP430_10_PCREL -> R_MSP430_16 " + "(growing with new opcode 0x%x)\n", opcode); + if (opcode == 0x4030) + { + /* If we're inserting a BR because we are converting from a JMP, + then only add one word for destination address; the BR opcode + has already been written. */ + contents = msp430_elf_relax_add_words + (abfd, sec, irel->r_offset + 2, 1, 0x0000, 0); + irel->r_offset += 2; + } + else + { + contents = msp430_elf_relax_add_words + (abfd, sec, irel->r_offset + 2, 2, 0x4030, 0x0000); + /* See comment above about converting a 10-bit PC-rel + relocation into a 16-bit absolute relocation. */ + irel->r_offset += 4; + } irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info), R_MSP430_16); } @@ -2039,6 +2268,9 @@ *again = TRUE; } + if (debug_relocs) + printf (" trying code size shrinking relocs\n"); + for (irel = internal_relocs; irel < irelend; irel++) { bfd_vma symval; @@ -2083,6 +2315,15 @@ sym_sec = bfd_section_from_elf_index (abfd, isym->st_shndx); symval = (isym->st_value + sym_sec->output_section->vma + sym_sec->output_offset); + + if (debug_relocs) + printf (" processing reloc at 0x%lx for local sym: %s " + "st_value: 0x%lx adj value: 0x%lx\n", + (long) (sec->output_offset + sec->output_section->vma + + irel->r_offset), + bfd_elf_string_from_elf_section + (abfd, symtab_hdr->sh_link, isym->st_name), + (long) isym->st_value, (long) symval); } else { @@ -2104,6 +2345,13 @@ symval = (h->root.u.def.value + h->root.u.def.section->output_section->vma + h->root.u.def.section->output_offset); + if (debug_relocs) + printf (" processing reloc at 0x%lx for global sym: %s " + "st_value: 0x%lx adj value: 0x%lx\n", (long) + (sec->output_offset + sec->output_section->vma + + irel->r_offset), + h->root.root.string, (long) h->root.u.def.value, + (long) symval); } /* For simplicity of coding, we are going to modify the section @@ -2187,6 +2435,8 @@ elf_section_data (sec)->this_hdr.contents = contents; symtab_hdr->contents = (unsigned char *) isymbuf; + if (debug_relocs) + printf (" R_MSP430_RL_PCREL -> "); /* Fix the relocation's type. */ if (uses_msp430x_relocs (abfd)) { @@ -2200,11 +2450,21 @@ else { if (rx->labels == 3) /* Handle special cases. */ - irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info), - R_MSP430_2X_PCREL); + { + irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info), + R_MSP430_2X_PCREL); + if (debug_relocs) + printf ("R_MSP430_2X_PCREL (shrinking with new opcode" + " 0x%x)\n", rx->t0); + } else - irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info), - R_MSP430_10_PCREL); + { + irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info), + R_MSP430_10_PCREL); + if (debug_relocs) + printf ("R_MSP430_10_PCREL (shrinking with new opcode" + " 0x%x)\n", rx->t0); + } } /* Fix the opcode right way. */ @@ -2247,11 +2507,11 @@ able to relax. */ if ((long) value < 1016 && (long) value > -1016) { - int code2; + int code1, code2, opcode; /* Get the opcode. */ code2 = bfd_get_16 (abfd, contents + irel->r_offset - 2); - if (code2 != 0x4030) + if (code2 != 0x4030) /* BR -> JMP */ continue; /* FIXME: check r4 and r3 ? */ /* FIXME: Handle 0x4010 as well ? */ @@ -2266,21 +2526,75 @@ { irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info), R_MSP430X_10_PCREL); + if (debug_relocs) + printf (" R_MSP430X_16 -> R_MSP430X_10_PCREL "); } else { irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info), R_MSP430_10_PCREL); + if (debug_relocs) + printf (" R_MSP430_16 -> R_MSP430_10_PCREL "); } + /* If we're trying to shrink a BR[A] after previously having + grown a JMP for this reloc, then we have a sequence like + this: + J 1f + BR[A] + 1: + The opcode for J has the target hard-coded as 2 words + ahead of the insn, instead of using a reloc. + This means we cannot rely on any of the helper functions to + update this hard-coded jump destination if we remove the + BR[A] insn, so we must explicitly update it here. + This does mean that we can remove the entire branch + instruction, and invert the conditional jump, saving us 4 + bytes rather than only 2 if we detected this in the normal + way. */ + code1 = bfd_get_16 (abfd, contents + irel->r_offset - 4); + switch (code1) + { + case 0x3802: opcode = 0x3401; break; /* Jl +2 -> Jge +1 */ + case 0x3402: opcode = 0x3801; break; /* Jge +2 -> Jl +1 */ + case 0x2c02: opcode = 0x2801; break; /* Jhs +2 -> Jlo +1 */ + case 0x2802: opcode = 0x2c01; break; /* Jlo +2 -> Jhs +1 */ + case 0x2402: opcode = 0x2001; break; /* Jeq +2 -> Jne +1 */ + case 0x2002: opcode = 0x2401; break; /* jne +2 -> Jeq +1 */ + case 0x3002: /* jn +2 */ + /* FIXME: There is no direct inverse of the Jn insn. */ + continue; + default: + /* The previous opcode does not have a hard-coded jump + that we added when previously relaxing, so relax the + current branch as normal. */ + opcode = 0x3c00; + break; + } + if (debug_relocs) + printf ("(shrinking with new opcode 0x%x)\n", opcode); - /* Fix the opcode right way. */ - bfd_put_16 (abfd, 0x3c00, contents + irel->r_offset - 2); - irel->r_offset -= 2; - - /* Delete bytes. */ - if (!msp430_elf_relax_delete_bytes (abfd, sec, - irel->r_offset + 2, 2)) - goto error_return; + if (opcode != 0x3c00) + { + /* Invert the opcode of the conditional jump. */ + bfd_put_16 (abfd, opcode, contents + irel->r_offset - 4); + irel->r_offset -= 4; + + /* Delete 4 bytes - the full BR insn. */ + if (!msp430_elf_relax_delete_bytes (abfd, sec, + irel->r_offset + 2, 4)) + goto error_return; + } + else + { + /* Fix the opcode right way. */ + bfd_put_16 (abfd, opcode, contents + irel->r_offset - 2); + irel->r_offset -= 2; + + /* Delete bytes. */ + if (!msp430_elf_relax_delete_bytes (abfd, sec, + irel->r_offset + 2, 2)) + goto error_return; + } /* That will change things, so, we should relax again. Note that this is not required, and it may be slow. */ @@ -2312,20 +2626,17 @@ } } - if (internal_relocs != NULL - && elf_section_data (sec)->relocs != internal_relocs) + if (elf_section_data (sec)->relocs != internal_relocs) free (internal_relocs); return TRUE; -error_return: - if (isymbuf != NULL && symtab_hdr->contents != (unsigned char *) isymbuf) + error_return: + if (symtab_hdr->contents != (unsigned char *) isymbuf) free (isymbuf); - if (contents != NULL - && elf_section_data (sec)->this_hdr.contents != contents) + if (elf_section_data (sec)->this_hdr.contents != contents) free (contents); - if (internal_relocs != NULL - && elf_section_data (sec)->relocs != internal_relocs) + if (elf_section_data (sec)->relocs != internal_relocs) free (internal_relocs); return FALSE; diff -Nru gdb-9.1/bfd/elf32-mt.c gdb-10.2/bfd/elf32-mt.c --- gdb-9.1/bfd/elf32-mt.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-mt.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Morpho Technologies MT specific support for 32-bit ELF - Copyright (C) 2001-2019 Free Software Foundation, Inc. + Copyright (C) 2001-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/elf32-nds32.c gdb-10.2/bfd/elf32-nds32.c --- gdb-9.1/bfd/elf32-nds32.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-nds32.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* NDS32-specific support for 32-bit ELF. - Copyright (C) 2012-2019 Free Software Foundation, Inc. + Copyright (C) 2012-2020 Free Software Foundation, Inc. Contributed by Andes Technology Corporation. This file is part of BFD, the Binary File Descriptor library. @@ -199,9 +199,6 @@ { struct elf_link_hash_entry root; - /* Track dynamic relocs copied for this symbol. */ - struct elf_dyn_relocs *dyn_relocs; - /* For checking relocation type. */ enum elf_nds32_tls_type tls_type; @@ -3371,7 +3368,7 @@ || ELF_ST_TYPE (sym->st_info) == STT_TLS) break; - /* st_value is the alignemnt constraint. + /* st_value is the alignment constraint. That might be its actual size if it is an array or structure. */ switch (sym->st_value) { @@ -3391,7 +3388,7 @@ return TRUE; } - (*secp)->flags |= SEC_IS_COMMON; + (*secp)->flags |= SEC_IS_COMMON | SEC_SMALL_DATA; *valp = sym->st_size; break; } @@ -3669,7 +3666,6 @@ struct elf_nds32_link_hash_entry *eh; eh = (struct elf_nds32_link_hash_entry *) ret; - eh->dyn_relocs = NULL; eh->tls_type = GOT_UNKNOWN; eh->offset_to_gp = 0; } @@ -3684,7 +3680,7 @@ { struct elf_nds32_link_hash_table *ret; - bfd_size_type amt = sizeof (struct elf_nds32_link_hash_table); + size_t amt = sizeof (struct elf_nds32_link_hash_table); ret = (struct elf_nds32_link_hash_table *) bfd_zmalloc (amt); if (ret == NULL) @@ -3700,8 +3696,6 @@ return NULL; } - ret->sdynbss = NULL; - ret->srelbss = NULL; ret->sym_ld_script = NULL; return &ret->root.root; @@ -3837,7 +3831,7 @@ initialize them at run time. The linker script puts the .dynbss section into the .bss section of the final image. */ s = bfd_make_section (abfd, ".dynbss"); - htab->sdynbss = s; + htab->root.sdynbss = s; if (s == NULL || !bfd_set_section_flags (s, SEC_ALLOC | SEC_LINKER_CREATED)) return FALSE; @@ -3856,7 +3850,7 @@ { s = bfd_make_section (abfd, (bed->default_use_rela_p ? ".rela.bss" : ".rel.bss")); - htab->srelbss = s; + htab->root.srelbss = s; if (s == NULL || !bfd_set_section_flags (s, flags | SEC_READONLY) || !bfd_set_section_alignment (s, ptralign)) @@ -3878,40 +3872,6 @@ edir = (struct elf_nds32_link_hash_entry *) dir; eind = (struct elf_nds32_link_hash_entry *) ind; - if (eind->dyn_relocs != NULL) - { - if (edir->dyn_relocs != NULL) - { - struct elf_dyn_relocs **pp; - struct elf_dyn_relocs *p; - - if (ind->root.type == bfd_link_hash_indirect) - abort (); - - /* Add reloc counts against the weak sym to the strong sym - list. Merge any entries against the same section. */ - for (pp = &eind->dyn_relocs; (p = *pp) != NULL;) - { - struct elf_dyn_relocs *q; - - for (q = edir->dyn_relocs; q != NULL; q = q->next) - if (q->sec == p->sec) - { - q->pc_count += p->pc_count; - q->count += p->count; - *pp = p->next; - break; - } - if (q == NULL) - pp = &p->next; - } - *pp = edir->dyn_relocs; - } - - edir->dyn_relocs = eind->dyn_relocs; - eind->dyn_relocs = NULL; - } - if (ind->root.type == bfd_link_hash_indirect) { if (dir->got.refcount <= 0) @@ -3924,24 +3884,6 @@ _bfd_elf_link_hash_copy_indirect (info, dir, ind); } - -/* Find dynamic relocs for H that apply to read-only sections. */ - -static asection * -readonly_dynrelocs (struct elf_link_hash_entry *h) -{ - struct elf_dyn_relocs *p; - - for (p = elf32_nds32_hash_entry (h)->dyn_relocs; p != NULL; p = p->next) - { - asection *s = p->sec->output_section; - - if (s != NULL && (s->flags & SEC_READONLY) != 0) - return p->sec; - } - return NULL; -} - /* Adjust a symbol defined by a dynamic object and referenced by a regular object. The current definition is in some section of the dynamic object, but we're not including those sections. We have to @@ -4027,7 +3969,7 @@ /* If we don't find any dynamic relocs in read-only sections, then we'll be keeping the dynamic relocs and avoiding the copy reloc. */ - if (!readonly_dynrelocs (h)) + if (!_bfd_elf_readonly_dynrelocs (h)) { h->non_got_ref = 0; return TRUE; @@ -4044,7 +3986,7 @@ same memory location for the variable. */ htab = nds32_elf_hash_table (info); - s = htab->sdynbss; + s = htab->root.sdynbss; BFD_ASSERT (s != NULL); /* We must generate a R_NDS32_COPY reloc to tell the dynamic linker @@ -4055,7 +3997,7 @@ { asection *srel; - srel = htab->srelbss; + srel = htab->root.srelbss; BFD_ASSERT (srel != NULL); srel->size += sizeof (Elf32_External_Rela); h->needs_copy = 1; @@ -4094,7 +4036,6 @@ struct bfd_link_info *info; struct elf_link_hash_table *ehtab; struct elf_nds32_link_hash_table *htab; - struct elf_nds32_link_hash_entry *eh; struct elf_dyn_relocs *p; if (h->root.type == bfd_link_hash_indirect) @@ -4106,16 +4047,12 @@ if (h->root.type == bfd_link_hash_warning) h = (struct elf_link_hash_entry *) h->root.u.i.link; - eh = (struct elf_nds32_link_hash_entry *) h; - info = (struct bfd_link_info *) inf; ehtab = elf_hash_table (info); htab = nds32_elf_hash_table (info); if (htab == NULL) return FALSE; - eh = (struct elf_nds32_link_hash_entry *) h; - if ((htab->root.dynamic_sections_created || h->type == STT_GNU_IFUNC) && h->plt.refcount > 0 && !(bfd_link_pie (info) && h->def_regular)) @@ -4227,7 +4164,7 @@ else h->got.offset = (bfd_vma)-1; - if (eh->dyn_relocs == NULL) + if (h->dyn_relocs == NULL) return TRUE; /* In the shared -Bsymbolic case, discard space allocated for @@ -4242,7 +4179,7 @@ { struct elf_dyn_relocs **pp; - for (pp = &eh->dyn_relocs; (p = *pp) != NULL;) + for (pp = &h->dyn_relocs; (p = *pp) != NULL;) { p->count -= p->pc_count; p->pc_count = 0; @@ -4279,13 +4216,13 @@ goto keep; } - eh->dyn_relocs = NULL; + h->dyn_relocs = NULL; -keep:; + keep:; } /* Finally, allocate space. */ - for (p = eh->dyn_relocs; p != NULL; p = p->next) + for (p = h->dyn_relocs; p != NULL; p = p->next) { asection *sreloc = elf_section_data (p->sec)->sreloc; sreloc->size += p->count * sizeof (Elf32_External_Rela); @@ -4313,33 +4250,6 @@ bfd_elf32_swap_reloca_out (output_bfd, rel, loc); } -/* Set DF_TEXTREL if we find any dynamic relocs that apply to - read-only sections. */ - -static bfd_boolean -maybe_set_textrel (struct elf_link_hash_entry *h, void *info_p) -{ - asection *sec; - - if (h->root.type == bfd_link_hash_indirect) - return TRUE; - - sec = readonly_dynrelocs (h); - if (sec != NULL) - { - struct bfd_link_info *info = (struct bfd_link_info *) info_p; - - info->flags |= DF_TEXTREL; - info->callbacks->minfo - (_("%pB: dynamic relocation against `%pT' in read-only section `%pA'\n"), - sec->owner, h->root.root.string, sec); - - /* Not an error, just cut short the traversal. */ - return FALSE; - } - return TRUE; -} - /* Set the sizes of the dynamic sections. */ static bfd_boolean @@ -4350,7 +4260,6 @@ bfd *dynobj; asection *s; bfd_boolean relocs; - bfd_boolean plt; bfd *ibfd; htab = nds32_elf_hash_table (info); @@ -4493,12 +4402,14 @@ /* If we're not using lazy TLS relocations, don't generate the PLT and GOT entries they require. */ - if (!(info->flags & DF_BIND_NOW)) + if ((info->flags & DF_BIND_NOW)) + htab->root.tlsdesc_plt = 0; + else { - htab->dt_tlsdesc_got = htab->root.sgot->size; + htab->root.tlsdesc_got = htab->root.sgot->size; htab->root.sgot->size += 4; - htab->dt_tlsdesc_plt = htab->root.splt->size; + htab->root.tlsdesc_plt = htab->root.splt->size; htab->root.splt->size += 4 * ARRAY_SIZE (dl_tlsdesc_lazy_trampoline); } } @@ -4508,7 +4419,6 @@ /* The check_relocs and adjust_dynamic_symbol entry points have determined the sizes of the various dynamic sections. Allocate memory for them. */ - plt = FALSE; relocs = FALSE; for (s = dynobj->sections; s != NULL; s = s->next) { @@ -4519,7 +4429,7 @@ { /* Strip this section if we don't need it; see the comment below. */ - plt = s->size != 0; + ; } else if (s == elf_hash_table (info)->sgot) { @@ -4569,63 +4479,7 @@ return FALSE; } - - if (htab->root.dynamic_sections_created) - { - /* Add some entries to the .dynamic section. We fill in the - values later, in nds32_elf_finish_dynamic_sections, but we - must add the entries now so that we get the correct size for - the .dynamic section. The DT_DEBUG entry is filled in by the - dynamic linker and used by the debugger. */ -#define add_dynamic_entry(TAG, VAL) \ - _bfd_elf_add_dynamic_entry (info, TAG, VAL) - - if (bfd_link_executable (info)) - { - if (!add_dynamic_entry (DT_DEBUG, 0)) - return FALSE; - } - - if (elf_hash_table (info)->splt->size != 0) - { - if (!add_dynamic_entry (DT_PLTGOT, 0) - || !add_dynamic_entry (DT_PLTRELSZ, 0) - || !add_dynamic_entry (DT_PLTREL, DT_RELA) - || !add_dynamic_entry (DT_JMPREL, 0)) - return FALSE; - } - - if (htab->tls_desc_trampoline && plt) - { - if (htab->dt_tlsdesc_plt - && (!add_dynamic_entry (DT_TLSDESC_PLT, 0) - || !add_dynamic_entry (DT_TLSDESC_GOT, 0))) - return FALSE; - } - - if (relocs) - { - if (!add_dynamic_entry (DT_RELA, 0) - || !add_dynamic_entry (DT_RELASZ, 0) - || !add_dynamic_entry (DT_RELAENT, sizeof (Elf32_External_Rela))) - return FALSE; - - /* If any dynamic relocs apply to a read-only section, - then we need a DT_TEXTREL entry. */ - if ((info->flags & DF_TEXTREL) == 0) - elf_link_hash_traverse (&htab->root, maybe_set_textrel, - (void *) info); - - if ((info->flags & DF_TEXTREL) != 0) - { - if (!add_dynamic_entry (DT_TEXTREL, 0)) - return FALSE; - } - } - } -#undef add_dynamic_entry - - return TRUE; + return _bfd_elf_add_dynamic_tags (output_bfd, info, relocs); } static bfd_reloc_status_type @@ -4862,7 +4716,7 @@ if (bfd_is_const_section (input_sec)) source = input_sec->name; else - source = input_sec->owner->filename; + source = bfd_get_filename (input_sec->owner); fprintf (sym_ld_script, "\t%s = 0x%08lx;\t /* %s */\n", h->root.root.string, @@ -5047,7 +4901,7 @@ if (!rz) { - printf ("%s: %s @ 0x%08x\n", __func__, ibfd->filename, + printf ("%s: %s @ 0x%08x\n", __func__, bfd_get_filename (ibfd), (int) rel->r_offset); BFD_ASSERT(0); /* Unsupported pattern. */ } @@ -5827,7 +5681,7 @@ case R_NDS32_SDA15S0_RELA: case R_NDS32_SDA15S0: align = 0x0; -handle_sda: + handle_sda: BFD_ASSERT (sec != NULL); /* If the symbol is in the abs section, the out_bfd will be null. @@ -6155,7 +6009,7 @@ break; } -check_reloc: + check_reloc: if (r != bfd_reloc_ok) { @@ -6204,7 +6058,7 @@ errmsg = _("internal error: unknown error"); /* Fall through. */ -common_error: + common_error: (*info->callbacks->warning) (info, errmsg, name, input_bfd, input_section, offset); break; @@ -6488,7 +6342,7 @@ goto get_vma; case DT_JMPREL: s = ehtab->srelplt->output_section; -get_vma: + get_vma: BFD_ASSERT (s != NULL); dyn.d_un.d_ptr = s->vma; bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon); @@ -6522,14 +6376,14 @@ case DT_TLSDESC_PLT: s = htab->root.splt; dyn.d_un.d_ptr = (s->output_section->vma + s->output_offset - + htab->dt_tlsdesc_plt); + + htab->root.tlsdesc_plt); bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon); break; case DT_TLSDESC_GOT: s = htab->root.sgot; dyn.d_un.d_ptr = (s->output_section->vma + s->output_offset - + htab->dt_tlsdesc_got); + + htab->root.tlsdesc_got); bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon); break; } @@ -6592,14 +6446,14 @@ PLT_ENTRY_SIZE; } - if (htab->dt_tlsdesc_plt) + if (htab->root.tlsdesc_plt) { /* Calculate addresses. */ asection *sgot = sgot = ehtab->sgot; bfd_vma pltgot = sgotplt->output_section->vma + sgotplt->output_offset; bfd_vma tlsdesc_got = sgot->output_section->vma + sgot->output_offset - + htab->dt_tlsdesc_got; + + htab->root.tlsdesc_got; /* Get GP offset. */ pltgot -= elf_gp (output_bfd) - 4; /* PLTGOT[1] */ @@ -6612,7 +6466,7 @@ dl_tlsdesc_lazy_trampoline[5] += 0xfff & pltgot; /* Insert .plt. */ - nds32_put_trampoline (splt->contents + htab->dt_tlsdesc_plt, + nds32_put_trampoline (splt->contents + htab->root.tlsdesc_plt, dl_tlsdesc_lazy_trampoline, ARRAY_SIZE (dl_tlsdesc_lazy_trampoline)); } @@ -6817,6 +6671,10 @@ flagword out_fpu_config; flagword in_fpu_config; + /* FIXME: What should be checked when linking shared libraries? */ + if ((ibfd->flags & DYNAMIC) != 0) + return TRUE; + /* TODO: Revise to use object-attributes instead. */ if (!nds32_check_vec_size (ibfd)) return FALSE; @@ -7138,15 +6996,6 @@ return TRUE; } - /* Don't do anything special with non-loaded, non-alloced sections. - In particular, any relocs in such sections should not affect GOT - and PLT reference counting (ie. we don't allow them to create GOT - or PLT entries), there's no possibility or desire to optimize TLS - relocs, and there's not much point in propagating relocs to shared - libs that the dynamic linker won't relocate. */ - if ((sec->flags & SEC_ALLOC) == 0) - return TRUE; - symtab_hdr = &elf_tdata (abfd)->symtab_hdr; sym_hashes = elf_sym_hashes (abfd); sym_hashes_end = @@ -7419,14 +7268,15 @@ /* If this is a global symbol, we count the number of relocations we need for this symbol. */ if (h != NULL) - head = &((struct elf_nds32_link_hash_entry *) h)->dyn_relocs; + head = &h->dyn_relocs; else { asection *s; void *vpp; Elf_Internal_Sym *isym; - isym = bfd_sym_from_r_symndx (&htab->sym_cache, abfd, r_symndx); + isym = bfd_sym_from_r_symndx (&htab->root.sym_cache, + abfd, r_symndx); if (isym == NULL) return FALSE; @@ -7442,7 +7292,7 @@ p = *head; if (p == NULL || p->sec != sec) { - bfd_size_type amt = sizeof (*p); + size_t amt = sizeof (*p); p = (struct elf_dyn_relocs *) bfd_alloc (dynobj, amt); if (p == NULL) return FALSE; @@ -8281,7 +8131,7 @@ goto done; } -done: + done: /* Bit-15 of insn16 should be set for a valid instruction. */ if ((insn16 & 0x8000) == 0) return 0; @@ -8603,7 +8453,7 @@ goto done; } -done: + done: if (insn & 0x80000000) return 0; @@ -9448,7 +9298,7 @@ if (p < endp) *p |= 0x80; } -done_adjust_diff: + done_adjust_diff: if (sec == sect) { @@ -12567,21 +12417,19 @@ clean_nds32_elf_blank (); } -finish: - if (internal_relocs != NULL - && elf_section_data (sec)->relocs != internal_relocs) + finish: + if (elf_section_data (sec)->relocs != internal_relocs) free (internal_relocs); - if (contents != NULL - && elf_section_data (sec)->this_hdr.contents != contents) + if (elf_section_data (sec)->this_hdr.contents != contents) free (contents); - if (isymbuf != NULL && symtab_hdr->contents != (bfd_byte *) isymbuf) + if (symtab_hdr->contents != (bfd_byte *) isymbuf) free (isymbuf); return result; -error_return: + error_return: result = FALSE; goto finish; } @@ -12594,6 +12442,18 @@ }; static bfd_boolean +nds32_elf_section_flags (const Elf_Internal_Shdr *hdr) +{ + const char *name = hdr->bfd_section->name; + + if (strncmp (name, ".sbss", 5) == 0 + || strncmp (name, ".sdata", 6) == 0) + hdr->bfd_section->flags |= SEC_SMALL_DATA; + + return TRUE; +} + +static bfd_boolean nds32_elf_output_arch_syms (bfd *output_bfd ATTRIBUTE_UNUSED, struct bfd_link_info *info, void *finfo ATTRIBUTE_UNUSED, @@ -13152,7 +13012,7 @@ goto error_return; } -finish: + finish: if (relax_blank_list) { nds32_elf_relax_delete_blanks (abfd, sec, relax_blank_list); @@ -13160,7 +13020,7 @@ } return result; -error_return: + error_return: result = FALSE; goto finish; } @@ -13291,7 +13151,7 @@ free (reloc_vector); return data; -error_return: + error_return: free (reloc_vector); return NULL; } @@ -13457,7 +13317,7 @@ } while (FALSE); - if ((relocs != NULL) && (elf_section_data (asec)->relocs != relocs)) + if (elf_section_data (asec)->relocs != relocs) free (relocs); if ((min_id != relax_group_ptr->min_id) @@ -13596,7 +13456,7 @@ } while (FALSE); - if (relocs != NULL && elf_section_data (asec)->relocs != relocs) + if (elf_section_data (asec)->relocs != relocs) free (relocs); return result; @@ -14018,19 +13878,17 @@ #endif } -finish: + finish: if (incontents) contents = NULL; - if (internal_relocs != NULL - && elf_section_data (insec)->relocs != internal_relocs) + if (elf_section_data (insec)->relocs != internal_relocs) free (internal_relocs); - if (contents != NULL - && elf_section_data (insec)->this_hdr.contents != contents) + if (elf_section_data (insec)->this_hdr.contents != contents) free (contents); - if (local_syms != NULL && symtab_hdr->contents != (bfd_byte *) local_syms) + if (symtab_hdr->contents != (bfd_byte *) local_syms) free (local_syms); if (chain.next) @@ -14047,7 +13905,7 @@ return result; -error_return: + error_return: result = FALSE; goto finish; } @@ -14093,6 +13951,7 @@ #define elf_backend_object_p nds32_elf_object_p #define elf_backend_final_write_processing nds32_elf_final_write_processing #define elf_backend_special_sections nds32_elf_special_sections +#define elf_backend_section_flags nds32_elf_section_flags #define bfd_elf32_bfd_get_relocated_section_contents \ nds32_elf_get_relocated_section_contents #define bfd_elf32_bfd_is_target_special_symbol nds32_elf_is_target_special_symbol diff -Nru gdb-9.1/bfd/elf32-nds32.h gdb-10.2/bfd/elf32-nds32.h --- gdb-9.1/bfd/elf32-nds32.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-nds32.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* NDS32-specific support for 32-bit ELF. - Copyright (C) 2012-2019 Free Software Foundation, Inc. + Copyright (C) 2012-2020 Free Software Foundation, Inc. Contributed by Andes Technology Corporation. This file is part of BFD, the Binary File Descriptor library. @@ -104,10 +104,10 @@ int, int, FILE *, int, int, int); -#define nds32_elf_hash_table(info) \ - (elf_hash_table_id ((struct elf_link_hash_table *) ((info)->hash)) \ - == NDS32_ELF_DATA ? \ - ((struct elf_nds32_link_hash_table *) ((info)->hash)) : NULL) +#define nds32_elf_hash_table(p) \ + ((is_elf_hash_table ((p)->hash) \ + && elf_hash_table_id (elf_hash_table (p)) == NDS32_ELF_DATA) \ + ? (struct elf_nds32_link_hash_table *) (p)->hash : NULL) #define elf32_nds32_compute_jump_table_size(htab) \ ((htab)->next_tls_desc_index * 4) @@ -122,13 +122,6 @@ { struct elf_link_hash_table root; - /* Short-cuts to get to dynamic linker sections. */ - asection *sdynbss; - asection *srelbss; - - /* Small local sym to section mapping cache. */ - struct sym_cache sym_cache; - /* Target dependent options. */ int relax_fp_as_gp; /* --mrelax-omit-fp. */ int eliminate_gc_relocs; /* --meliminate-gc-relocs. */ @@ -138,16 +131,6 @@ /* Disable if linking a dynamically linked executable. */ int load_store_relax; - /* The offset into splt of the PLT entry for the TLS descriptor - resolver. Special values are 0, if not necessary (or not found - to be necessary yet), and -1 if needed but not determined - yet. */ - bfd_vma dt_tlsdesc_plt; - - /* The offset into sgot of the GOT entry used by the PLT entry - above. */ - bfd_vma dt_tlsdesc_got; - /* Offset in .plt section of tls_nds32_trampoline. */ bfd_vma tls_trampoline; diff -Nru gdb-9.1/bfd/elf32-nios2.c gdb-10.2/bfd/elf32-nios2.c --- gdb-9.1/bfd/elf32-nios2.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-nios2.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* 32-bit ELF support for Nios II. - Copyright (C) 2012-2019 Free Software Foundation, Inc. + Copyright (C) 2012-2020 Free Software Foundation, Inc. Contributed by Nigel Gray (ngray@altera.com). Contributed by Mentor Graphics, Inc. @@ -1737,9 +1737,6 @@ symbol. */ struct elf32_nios2_stub_hash_entry *hsh_cache; - /* Track dynamic relocs copied for this symbol. */ - struct elf_dyn_relocs *dyn_relocs; - #define GOT_UNKNOWN 0 #define GOT_NORMAL 1 #define GOT_TLS_GD 2 @@ -1811,9 +1808,6 @@ bfd_vma offset; } tls_ldm_got; - /* Small local sym cache. */ - struct sym_cache sym_cache; - bfd_vma res_n_size; }; @@ -2039,7 +2033,6 @@ eh = (struct elf32_nios2_link_hash_entry *) entry; eh->hsh_cache = NULL; - eh->dyn_relocs = NULL; eh->tls_type = GOT_UNKNOWN; eh->got_types_used = 0; } @@ -2228,7 +2221,7 @@ unsigned int top_id, top_index; asection *section; asection **input_list, **list; - bfd_size_type amt; + size_t amt; struct elf32_nios2_link_hash_table *htab = elf32_nios2_hash_table (info); /* Count the number of input BFDs and find the top input section id. */ @@ -2490,6 +2483,17 @@ = (struct elf32_nios2_stub_hash_entry *) gen_entry; asection *stub_sec = hsh->stub_sec; bfd_vma sym_value; + struct bfd_link_info *info; + + info = (struct bfd_link_info *) in_arg; + + /* Fail if the target section could not be assigned to an output + section. The user should fix his linker script. */ + if (hsh->target_section->output_section == NULL + && info->non_contiguous_regions) + info->callbacks->einfo (_("%F%P: Could not assign '%pA' to an output section. " + "Retry without --enable-non-contiguous-regions.\n"), + hsh->target_section); /* Make a note of the offset within the stubs for this entry. */ hsh->stub_offset = stub_sec->size; @@ -2560,7 +2564,7 @@ /* We want to read in symbol extension records only once. To do this we need to read in the local symbols in parallel and save them for later use; so hold pointers to the local symbols in an array. */ - bfd_size_type amt = sizeof (Elf_Internal_Sym *) * htab->bfd_count; + size_t amt = sizeof (Elf_Internal_Sym *) * htab->bfd_count; all_local_syms = bfd_zmalloc (amt); htab->all_local_syms = all_local_syms; if (all_local_syms == NULL) @@ -3062,7 +3066,7 @@ h = bfd_hash_lookup (&info->hash->table, "_gp", FALSE, FALSE); lh = (struct bfd_link_hash_entry *) h; -lookup: + lookup: if (lh) { switch (lh->type) @@ -4527,8 +4531,7 @@ { (*info->callbacks->warning) (info, msg, name, input_bfd, input_section, rel->r_offset); - if (msgbuf) - free (msgbuf); + free (msgbuf); return FALSE; } } @@ -4539,10 +4542,10 @@ /* Implement elf-backend_section_flags: Convert NIOS2 specific section flags to bfd internal section flags. */ static bfd_boolean -nios2_elf32_section_flags (flagword *flags, const Elf_Internal_Shdr *hdr) +nios2_elf32_section_flags (const Elf_Internal_Shdr *hdr) { if (hdr->sh_flags & SHF_NIOS2_GPREL) - *flags |= SEC_SMALL_DATA; + hdr->bfd_section->flags |= SEC_SMALL_DATA; return TRUE; } @@ -4631,37 +4634,6 @@ edir = (struct elf32_nios2_link_hash_entry *) dir; eind = (struct elf32_nios2_link_hash_entry *) ind; - if (eind->dyn_relocs != NULL) - { - if (edir->dyn_relocs != NULL) - { - struct elf_dyn_relocs **pp; - struct elf_dyn_relocs *p; - - /* Add reloc counts against the indirect sym to the direct sym - list. Merge any entries against the same section. */ - for (pp = &eind->dyn_relocs; (p = *pp) != NULL; ) - { - struct elf_dyn_relocs *q; - - for (q = edir->dyn_relocs; q != NULL; q = q->next) - if (q->sec == p->sec) - { - q->pc_count += p->pc_count; - q->count += p->count; - *pp = p->next; - break; - } - if (q == NULL) - pp = &p->next; - } - *pp = edir->dyn_relocs; - } - - edir->dyn_relocs = eind->dyn_relocs; - eind->dyn_relocs = NULL; - } - if (ind->root.type == bfd_link_hash_indirect && dir->got.refcount <= 0) { @@ -4916,7 +4888,7 @@ /* If this is a global symbol, we count the number of relocations we need for this symbol. */ if (h != NULL) - head = &((struct elf32_nios2_link_hash_entry *) h)->dyn_relocs; + head = &h->dyn_relocs; else { /* Track dynamic relocs needed for local syms too. @@ -4927,7 +4899,7 @@ void *vpp; Elf_Internal_Sym *isym; - isym = bfd_sym_from_r_symndx (&htab->sym_cache, + isym = bfd_sym_from_r_symndx (&htab->root.sym_cache, abfd, r_symndx); if (isym == NULL) return FALSE; @@ -4943,7 +4915,7 @@ p = *head; if (p == NULL || p->sec != sec) { - bfd_size_type amt = sizeof *p; + size_t amt = sizeof *p; p = ((struct elf_dyn_relocs *) bfd_alloc (htab->root.dynobj, amt)); if (p == NULL) @@ -5621,7 +5593,7 @@ else h->got.offset = (bfd_vma) -1; - if (eh->dyn_relocs == NULL) + if (h->dyn_relocs == NULL) return TRUE; /* In the shared -Bsymbolic case, discard space allocated for @@ -5637,7 +5609,7 @@ { struct elf_dyn_relocs **pp; - for (pp = &eh->dyn_relocs; (p = *pp) != NULL; ) + for (pp = &h->dyn_relocs; (p = *pp) != NULL; ) { p->count -= p->pc_count; p->pc_count = 0; @@ -5650,12 +5622,12 @@ /* Also discard relocs on undefined weak syms with non-default visibility. */ - if (eh->dyn_relocs != NULL + if (h->dyn_relocs != NULL && h->root.type == bfd_link_hash_undefweak) { if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT || UNDEFWEAK_NO_DYNAMIC_RELOC (info, h)) - eh->dyn_relocs = NULL; + h->dyn_relocs = NULL; /* Make sure undefined weak symbols are output as a dynamic symbol in PIEs. */ @@ -5690,13 +5662,13 @@ goto keep; } - eh->dyn_relocs = NULL; + h->dyn_relocs = NULL; keep: ; } /* Finally, allocate space. */ - for (p = eh->dyn_relocs; p != NULL; p = p->next) + for (p = h->dyn_relocs; p != NULL; p = p->next) { asection *sreloc = elf_section_data (p->sec)->sreloc; sreloc->size += p->count * sizeof (Elf32_External_Rela); @@ -5777,8 +5749,6 @@ { srel = elf_section_data (p->sec)->sreloc; srel->size += p->count * sizeof (Elf32_External_Rela); - if ((p->sec->output_section->flags & SEC_READONLY) != 0) - info->flags |= DF_TEXTREL; } } } @@ -5904,45 +5874,7 @@ if (htab->res_n_size) elf_link_hash_traverse (& htab->root, adjust_dynrelocs, info); - if (htab->root.dynamic_sections_created) - { - /* Add some entries to the .dynamic section. We fill in the - values later, in elf_nios2_finish_dynamic_sections, but we - must add the entries now so that we get the correct size for - the .dynamic section. The DT_DEBUG entry is filled in by the - dynamic linker and used by the debugger. */ -#define add_dynamic_entry(TAG, VAL) \ - _bfd_elf_add_dynamic_entry (info, TAG, VAL) - - if (!bfd_link_pic (info) && !add_dynamic_entry (DT_DEBUG, 0)) - return FALSE; - - if (htab->root.sgotplt->size != 0 - && !add_dynamic_entry (DT_PLTGOT, 0)) - return FALSE; - - if (htab->root.splt->size != 0 - && (!add_dynamic_entry (DT_PLTRELSZ, 0) - || !add_dynamic_entry (DT_PLTREL, DT_RELA) - || !add_dynamic_entry (DT_JMPREL, 0))) - return FALSE; - - if (relocs - && (!add_dynamic_entry (DT_RELA, 0) - || !add_dynamic_entry (DT_RELASZ, 0) - || !add_dynamic_entry (DT_RELAENT, sizeof (Elf32_External_Rela)))) - return FALSE; - - if (!bfd_link_pic (info) && !add_dynamic_entry (DT_NIOS2_GP, 0)) - return FALSE; - - if ((info->flags & DF_TEXTREL) != 0 - && !add_dynamic_entry (DT_TEXTREL, 0)) - return FALSE; - } -#undef add_dynamic_entry - - return TRUE; + return _bfd_elf_add_dynamic_tags (output_bfd, info, relocs); } /* Free the derived linker hash table. */ @@ -5961,7 +5893,7 @@ nios2_elf32_link_hash_table_create (bfd *abfd) { struct elf32_nios2_link_hash_table *ret; - bfd_size_type amt = sizeof (struct elf32_nios2_link_hash_table); + size_t amt = sizeof (struct elf32_nios2_link_hash_table); ret = bfd_zmalloc (amt); if (ret == NULL) @@ -6040,7 +5972,7 @@ htab = elf32_nios2_hash_table (info); if (htab->sbss == NULL) { - flagword flags = SEC_IS_COMMON | SEC_LINKER_CREATED; + flagword flags = SEC_IS_COMMON | SEC_SMALL_DATA | SEC_LINKER_CREATED; if (htab->root.dynobj == NULL) htab->root.dynobj = abfd; diff -Nru gdb-9.1/bfd/elf32-nios2.h gdb-10.2/bfd/elf32-nios2.h --- gdb-9.1/bfd/elf32-nios2.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-nios2.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Nios II support for 32-bit ELF - Copyright (C) 2013-2019 Free Software Foundation, Inc. + Copyright (C) 2013-2020 Free Software Foundation, Inc. Contributed by Mentor Graphics This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/elf32-or1k.c gdb-10.2/bfd/elf32-or1k.c --- gdb-9.1/bfd/elf32-or1k.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-or1k.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Or1k-specific support for 32-bit ELF. - Copyright (C) 2001-2019 Free Software Foundation, Inc. + Copyright (C) 2001-2020 Free Software Foundation, Inc. Contributed for OR32 by Johan Rydberg, jrydberg@opencores.org PIC parts added by Stefan Kristiansson, stefan.kristiansson@saunalahti.fi, @@ -873,21 +873,25 @@ { BFD_RELOC_OR1K_PLTA26, R_OR1K_PLTA26 }, }; +/* tls_type is a mask used to track how each symbol is accessed, + it may be accessed via multiple types of TLS access methods. + We track this for sizing (allocating got + relocation section space) and + for how to process relocations. */ #define TLS_UNKNOWN 0 #define TLS_NONE 1 #define TLS_GD 2 -#define TLS_LD 3 -#define TLS_IE 4 -#define TLS_LE 5 +#define TLS_LD 4 +#define TLS_IE 8 +#define TLS_LE 16 + +/* The size of the TLS thread control block, used to offset LE access. */ +#define TCB_SIZE 16 /* ELF linker hash entry. */ struct elf_or1k_link_hash_entry { struct elf_link_hash_entry root; - /* Track dynamic relocs copied for this symbol. */ - struct elf_dyn_relocs *dyn_relocs; - /* Track type of TLS access. */ unsigned char tls_type; }; @@ -912,16 +916,14 @@ { struct elf_link_hash_table root; - /* Small local sym to section mapping cache. */ - struct sym_cache sym_sec; - bfd_boolean saw_plta; }; /* Get the ELF linker hash table from a link_info structure. */ #define or1k_elf_hash_table(p) \ - (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \ - == OR1K_ELF_DATA ? ((struct elf_or1k_link_hash_table *) ((p)->hash)) : NULL) + ((is_elf_hash_table ((p)->hash) \ + && elf_hash_table_id (elf_hash_table (p)) == OR1K_ELF_DATA) \ + ? (struct elf_or1k_link_hash_table *) (p)->hash : NULL) static bfd_boolean elf_or1k_mkobject (bfd *abfd) @@ -957,7 +959,6 @@ struct elf_or1k_link_hash_entry *eh; eh = (struct elf_or1k_link_hash_entry *) ret; - eh->dyn_relocs = NULL; eh->tls_type = TLS_UNKNOWN; } @@ -970,7 +971,7 @@ or1k_elf_link_hash_table_create (bfd *abfd) { struct elf_or1k_link_hash_table *ret; - bfd_size_type amt = sizeof (struct elf_or1k_link_hash_table); + size_t amt = sizeof (struct elf_or1k_link_hash_table); ret = bfd_zmalloc (amt); if (ret == NULL) @@ -1043,19 +1044,49 @@ return TRUE; } - /* Return the relocation value for @tpoff relocations.. */ static bfd_vma -tpoff (struct bfd_link_info *info, bfd_vma address) +tpoff (struct bfd_link_info *info, bfd_vma address, bfd_boolean dynamic) { + struct elf_link_hash_table *htab = elf_hash_table (info); + bfd_vma base; + /* If tls_sec is NULL, we should have signalled an error already. */ - if (elf_hash_table (info)->tls_sec == NULL) + if (htab->tls_sec == NULL) return 0; - /* The thread pointer on or1k stores the address after the TCB where - the data is, just compute the difference. No need to compensate - for the size of TCB. */ - return (address - elf_hash_table (info)->tls_sec->vma); + if (dynamic) + return address - htab->tls_sec->vma; + else + { + /* On or1k, the tp points to just after the tcb, if we have an alignment + greater than the tcb size we need to offset by the alignment difference. */ + base = align_power ((bfd_vma) TCB_SIZE, htab->tls_sec->alignment_power) + - TCB_SIZE; + + /* The thread pointer on or1k stores the address after the TCB where + the data is, just compute the difference. No need to compensate + for the size of TCB. */ + return address - htab->tls_sec->vma + base; + } +} + +/* If we have both IE and GD accesses to a symbol the IE relocations should be + offset by 8 bytes because the got contains both GD and IE entries. */ +static bfd_vma +or1k_initial_exec_offset (reloc_howto_type *howto, unsigned char tls_type_mask) +{ + switch (howto->type) + { + case R_OR1K_TLS_IE_HI16: + case R_OR1K_TLS_IE_LO16: + case R_OR1K_TLS_IE_PG21: + case R_OR1K_TLS_IE_LO13: + case R_OR1K_TLS_IE_AHI16: + return (tls_type_mask & TLS_GD) != 0 ? 8 : 0; + default: + return 0; + } } /* Like _bfd_final_link_relocate, but handles non-contiguous fields. */ @@ -1226,7 +1257,6 @@ Elf_Internal_Rela *rel; Elf_Internal_Rela *relend; struct elf_or1k_link_hash_table *htab = or1k_elf_hash_table (info); - bfd *dynobj; asection *sreloc; bfd_vma *local_got_offsets; asection *sgot, *splt; @@ -1236,7 +1266,6 @@ if (htab == NULL) return FALSE; - dynobj = htab->root.dynobj; local_got_offsets = elf_local_got_offsets (input_bfd); sreloc = elf_section_data (input_section)->sreloc; @@ -1254,7 +1283,7 @@ got_sym_value = (hgot->root.u.def.value + hgot->root.u.def.section->output_section->vma + hgot->root.u.def.section->output_offset); - got_base = sgot->output_section->vma + sgot->output_offset; + got_base = sgot->output_section->vma + sgot->output_offset; } symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr; @@ -1416,16 +1445,16 @@ /* We need to generate a R_OR1K_RELATIVE reloc for the dynamic linker. */ - srelgot = bfd_get_section_by_name (dynobj, ".rela.got"); + srelgot = htab->root.srelgot; BFD_ASSERT (srelgot != NULL); outrel.r_offset = got_base + off; outrel.r_info = ELF32_R_INFO (0, R_OR1K_RELATIVE); outrel.r_addend = relocation; loc = srelgot->contents; - loc += (srelgot->reloc_count - * sizeof (Elf32_External_Rela)); - bfd_elf32_swap_reloca_out (output_bfd, &outrel,loc); + loc += (srelgot->reloc_count + * sizeof (Elf32_External_Rela)); + bfd_elf32_swap_reloca_out (output_bfd, &outrel, loc); ++srelgot->reloc_count; } local_got_offsets[r_symndx] |= 1; @@ -1591,54 +1620,80 @@ { bfd_vma gotoff; Elf_Internal_Rela rela; + asection *srelgot; bfd_byte *loc; - int dynamic; + bfd_boolean dynamic; + int indx = 0; + unsigned char tls_type; - sreloc = bfd_get_section_by_name (dynobj, ".rela.got"); + srelgot = htab->root.srelgot; /* Mark as TLS related GOT entry by setting - bit 2 as well as bit 1. */ + bit 2 to indcate TLS and bit 1 to indicate GOT. */ if (h != NULL) { gotoff = h->got.offset; + tls_type = ((struct elf_or1k_link_hash_entry *) h)->tls_type; h->got.offset |= 3; } else { + unsigned char *local_tls_type; + gotoff = local_got_offsets[r_symndx]; + local_tls_type = (unsigned char *) elf_or1k_local_tls_type (input_bfd); + tls_type = local_tls_type == NULL ? TLS_NONE + : local_tls_type[r_symndx]; local_got_offsets[r_symndx] |= 3; } /* Only process the relocation once. */ - if (gotoff & 1) + if ((gotoff & 1) != 0) { - relocation = sgot->output_offset + (gotoff & ~3); + gotoff += or1k_initial_exec_offset (howto, tls_type); + + /* The PG21 and LO13 relocs are pc-relative, while the + rest are GOT relative. */ + relocation = got_base + (gotoff & ~3); + if (!(r_type == R_OR1K_TLS_GD_PG21 + || r_type == R_OR1K_TLS_GD_LO13 + || r_type == R_OR1K_TLS_IE_PG21 + || r_type == R_OR1K_TLS_IE_LO13)) + relocation -= got_sym_value; break; } BFD_ASSERT (elf_hash_table (info)->hgot == NULL || elf_hash_table (info)->hgot->root.u.def.value == 0); - /* Dynamic entries will require relocations. if we do not need + if (h != NULL) + { + bfd_boolean dyn = htab->root.dynamic_sections_created; + bfd_boolean pic = bfd_link_pic (info); + + if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, pic, h) + && (!pic || !SYMBOL_REFERENCES_LOCAL (info, h))) + indx = h->dynindx; + } + + /* Dynamic entries will require relocations. If we do not need them we will just use the default R_OR1K_NONE and not set anything. */ - dynamic = bfd_link_pic (info) - || (sec && (sec->flags & SEC_ALLOC) != 0 - && h != NULL - && (h->root.type == bfd_link_hash_defweak || !h->def_regular)); + dynamic = (bfd_link_pic (info) || indx != 0) + && (h == NULL + || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT + || h->root.type != bfd_link_hash_undefweak); /* Shared GD. */ - if (dynamic - && (howto->type == R_OR1K_TLS_GD_HI16 - || howto->type == R_OR1K_TLS_GD_LO16 - || howto->type == R_OR1K_TLS_GD_PG21 - || howto->type == R_OR1K_TLS_GD_LO13)) + if (dynamic && ((tls_type & TLS_GD) != 0)) { int i; /* Add DTPMOD and DTPOFF GOT and rela entries. */ for (i = 0; i < 2; ++i) { + BFD_ASSERT (srelgot->contents != NULL); + rela.r_offset = got_base + gotoff + i*4; if (h != NULL && h->dynindx != -1) { @@ -1650,30 +1705,33 @@ { rela.r_info = ELF32_R_INFO (0, (i == 0 ? R_OR1K_TLS_DTPMOD : R_OR1K_TLS_DTPOFF)); - rela.r_addend = tpoff (info, relocation); + rela.r_addend = + (i == 0 ? 0 : tpoff (info, relocation, dynamic)); } - loc = sreloc->contents; - loc += sreloc->reloc_count++ * - sizeof (Elf32_External_Rela); + loc = srelgot->contents; + loc += (srelgot->reloc_count++ + * sizeof (Elf32_External_Rela)); bfd_elf32_swap_reloca_out (output_bfd, &rela, loc); bfd_put_32 (output_bfd, 0, sgot->contents + gotoff + i*4); } } /* Static GD. */ - else if (howto->type == R_OR1K_TLS_GD_HI16 - || howto->type == R_OR1K_TLS_GD_LO16 - || howto->type == R_OR1K_TLS_GD_PG21 - || howto->type == R_OR1K_TLS_GD_LO13) + else if ((tls_type & TLS_GD) != 0) { bfd_put_32 (output_bfd, 1, sgot->contents + gotoff); - bfd_put_32 (output_bfd, tpoff (info, relocation), + bfd_put_32 (output_bfd, tpoff (info, relocation, dynamic), sgot->contents + gotoff + 4); } + + gotoff += or1k_initial_exec_offset (howto, tls_type); + /* Shared IE. */ - else if (dynamic) + if (dynamic && ((tls_type & TLS_IE) != 0)) { + BFD_ASSERT (srelgot->contents != NULL); + /* Add TPOFF GOT and rela entries. */ rela.r_offset = got_base + gotoff; if (h != NULL && h->dynindx != -1) @@ -1684,21 +1742,19 @@ else { rela.r_info = ELF32_R_INFO (0, R_OR1K_TLS_TPOFF); - rela.r_addend = tpoff (info, relocation); + rela.r_addend = tpoff (info, relocation, dynamic); } - loc = sreloc->contents; - loc += sreloc->reloc_count++ * sizeof (Elf32_External_Rela); + loc = srelgot->contents; + loc += srelgot->reloc_count++ * sizeof (Elf32_External_Rela); bfd_elf32_swap_reloca_out (output_bfd, &rela, loc); bfd_put_32 (output_bfd, 0, sgot->contents + gotoff); } /* Static IE. */ - else - { - bfd_put_32 (output_bfd, tpoff (info, relocation), - sgot->contents + gotoff); - } + else if ((tls_type & TLS_IE) != 0) + bfd_put_32 (output_bfd, tpoff (info, relocation, dynamic), + sgot->contents + gotoff); /* The PG21 and LO13 relocs are pc-relative, while the rest are GOT relative. */ @@ -1716,7 +1772,7 @@ case R_OR1K_TLS_LE_AHI16: case R_OR1K_TLS_LE_SLO16: /* Relocation is offset from TP. */ - relocation = tpoff (info, relocation); + relocation = tpoff (info, relocation, 0); break; case R_OR1K_TLS_DTPMOD: @@ -1822,15 +1878,6 @@ if (bfd_link_relocatable (info)) return TRUE; - /* Don't do anything special with non-loaded, non-alloced sections. - In particular, any relocs in such sections should not affect GOT - and PLT reference counting (ie. we don't allow them to create GOT - or PLT entries), there's no possibility or desire to optimize TLS - relocs, and there's not much point in propagating relocs to shared - libs that the dynamic linker won't relocate. */ - if ((sec->flags & SEC_ALLOC) == 0) - return TRUE; - symtab_hdr = &elf_tdata (abfd)->symtab_hdr; sym_hashes = elf_sym_hashes (abfd); @@ -1895,7 +1942,7 @@ /* Record TLS type. */ if (h != NULL) - ((struct elf_or1k_link_hash_entry *) h)->tls_type = tls_type; + ((struct elf_or1k_link_hash_entry *) h)->tls_type |= tls_type; else { unsigned char *local_tls_type; @@ -1912,7 +1959,7 @@ return FALSE; elf_or1k_local_tls_type (abfd) = local_tls_type; } - local_tls_type[r_symndx] = tls_type; + local_tls_type[r_symndx] |= tls_type; } switch (r_type) @@ -2047,7 +2094,7 @@ && (h->root.type == bfd_link_hash_defweak || !h->def_regular))) { - struct elf_dyn_relocs *p; + struct elf_dyn_relocs *sec_relocs; struct elf_dyn_relocs **head; /* When creating a shared object, we must copy these @@ -2091,7 +2138,7 @@ /* If this is a global symbol, we count the number of relocations we need for this symbol. */ if (h != NULL) - head = &((struct elf_or1k_link_hash_entry *) h)->dyn_relocs; + head = &h->dyn_relocs; else { /* Track dynamic relocs needed for local syms too. @@ -2102,7 +2149,7 @@ Elf_Internal_Sym *isym; void *vpp; - isym = bfd_sym_from_r_symndx (&htab->sym_sec, + isym = bfd_sym_from_r_symndx (&htab->root.sym_cache, abfd, r_symndx); if (isym == NULL) return FALSE; @@ -2115,24 +2162,26 @@ head = (struct elf_dyn_relocs **) vpp; } - p = *head; - if (p == NULL || p->sec != sec) + sec_relocs = *head; + /* Allocate this sections dynamic reolcations structure if this + is a new section. */ + if (sec_relocs == NULL || sec_relocs->sec != sec) { - bfd_size_type amt = sizeof *p; - p = ((struct elf_dyn_relocs *) - bfd_alloc (htab->root.dynobj, amt)); - if (p == NULL) + size_t amt = sizeof *sec_relocs; + sec_relocs = ((struct elf_dyn_relocs *) + bfd_alloc (htab->root.dynobj, amt)); + if (sec_relocs == NULL) return FALSE; - p->next = *head; - *head = p; - p->sec = sec; - p->count = 0; - p->pc_count = 0; + sec_relocs->next = *head; + *head = sec_relocs; + sec_relocs->sec = sec; + sec_relocs->count = 0; + sec_relocs->pc_count = 0; } - p->count += 1; + sec_relocs->count += 1; if (r_type == R_OR1K_INSN_REL_26) - p->pc_count += 1; + sec_relocs->pc_count += 1; } } break; @@ -2402,14 +2451,14 @@ && (h->got.offset & 2) == 0) /* Homemade TLS check. */ { asection *sgot; - asection *srela; + asection *srelgot; Elf_Internal_Rela rela; /* This symbol has an entry in the global offset table. Set it up. */ sgot = htab->root.sgot; - srela = htab->root.srelgot; - BFD_ASSERT (sgot != NULL && srela != NULL); + srelgot = htab->root.srelgot; + BFD_ASSERT (sgot != NULL && srelgot != NULL); rela.r_offset = (sgot->output_section->vma + sgot->output_offset @@ -2435,10 +2484,10 @@ rela.r_addend = 0; } - loc = srela->contents; - loc += srela->reloc_count * sizeof (Elf32_External_Rela); + loc = srelgot->contents; + loc += srelgot->reloc_count * sizeof (Elf32_External_Rela); bfd_elf32_swap_reloca_out (output_bfd, &rela, loc); - ++srela->reloc_count; + ++srelgot->reloc_count; } if (h->needs_copy) @@ -2487,24 +2536,6 @@ } } -/* Find dynamic relocs for H that apply to read-only sections. */ - -static asection * -readonly_dynrelocs (struct elf_link_hash_entry *h) -{ - struct elf_dyn_relocs *p; - struct elf_or1k_link_hash_entry *eh = (struct elf_or1k_link_hash_entry *) h; - - for (p = eh->dyn_relocs; p != NULL; p = p->next) - { - asection *s = p->sec->output_section; - - if (s != NULL && (s->flags & SEC_READONLY) != 0) - return p->sec; - } - return NULL; -} - /* Adjust a symbol defined by a dynamic object and referenced by a regular object. The current definition is in some section of the dynamic object, but we're not including those sections. We have to @@ -2591,7 +2622,7 @@ /* If we don't find any dynamic relocs in read-only sections, then we'll be keeping the dynamic relocs and avoiding the copy reloc. */ - if (!readonly_dynrelocs (h)) + if (!_bfd_elf_readonly_dynrelocs (h)) { h->non_got_ref = 0; return TRUE; @@ -2634,6 +2665,56 @@ return _bfd_elf_adjust_dynamic_copy (info, h, s); } +/* Caclulate an update the sizes required for a symbol in the GOT and + RELA relocation section based on the TLS_TYPE and whether or not the symbol + is DYNAMIC. + + Symbols with TLS_GD access require 8 bytes in the GOT and, if dynamic, + require two relocation entries. Symbols with TLS_IE access require 4 bytes + in the GOT and, if dynamic, require one relocation entry. Symbols may have + both TLS_GD and TLS_IE access to be accounted for. + + Other symbols require 4 bytes in the GOT table and, if dynamic, require one + relocation entry. */ + +static void +or1k_set_got_and_rela_sizes (const unsigned char tls_type, + const bfd_boolean dynamic, + bfd_vma *got_size, + bfd_vma *rela_size) +{ + bfd_boolean is_tls_entry = FALSE; + + /* TLS GD requires two GOT entries and two relocs. */ + if ((tls_type & TLS_GD) != 0) + { + *got_size += 8; + is_tls_entry = TRUE; + } + + if ((tls_type & TLS_IE) != 0) + { + *got_size += 4; + is_tls_entry = TRUE; + } + + if (is_tls_entry == FALSE) + *got_size += 4; + + if (dynamic) + { + if ((tls_type & TLS_GD) != 0) + *rela_size += 2 * sizeof (Elf32_External_Rela); + + if ((tls_type & TLS_IE) != 0) + *rela_size += sizeof (Elf32_External_Rela); + + if (is_tls_entry == FALSE) + *rela_size += sizeof (Elf32_External_Rela); + } +} + + /* Allocate space in .plt, .got and associated reloc sections for dynamic relocs. */ @@ -2642,8 +2723,7 @@ { struct bfd_link_info *info; struct elf_or1k_link_hash_table *htab; - struct elf_or1k_link_hash_entry *eh; - struct elf_dyn_relocs *p; + struct elf_dyn_relocs *sec_relocs; if (h->root.type == bfd_link_hash_indirect) return TRUE; @@ -2653,8 +2733,6 @@ if (htab == NULL) return FALSE; - eh = (struct elf_or1k_link_hash_entry *) h; - if (htab->root.dynamic_sections_created && h->plt.refcount > 0) { @@ -2669,14 +2747,14 @@ if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, bfd_link_pic (info), h)) { - asection *s = htab->root.splt; + asection *splt = htab->root.splt; /* If this is the first .plt entry, make room for the special first entry. */ - if (s->size == 0) - s->size = PLT_ENTRY_SIZE; + if (splt->size == 0) + splt->size = PLT_ENTRY_SIZE; - h->plt.offset = s->size; + h->plt.offset = splt->size; /* If this symbol is not defined in a regular file, and we are not generating a shared library, then set the symbol to this @@ -2686,12 +2764,12 @@ if (! bfd_link_pic (info) && !h->def_regular) { - h->root.u.def.section = s; + h->root.u.def.section = splt; h->root.u.def.value = h->plt.offset; } /* Make room for this entry. */ - s->size += PLT_ENTRY_SIZE; + splt->size += PLT_ENTRY_SIZE; /* We also need to make an entry in the .got.plt section, which will be placed in the .got section by the linker script. */ @@ -2714,7 +2792,7 @@ if (h->got.refcount > 0) { - asection *s; + asection *sgot; bfd_boolean dyn; unsigned char tls_type; @@ -2727,30 +2805,21 @@ return FALSE; } - s = htab->root.sgot; + sgot = htab->root.sgot; - h->got.offset = s->size; + h->got.offset = sgot->size; tls_type = ((struct elf_or1k_link_hash_entry *) h)->tls_type; - /* TLS GD requires two GOT and two relocs. */ - if (tls_type == TLS_GD) - s->size += 8; - else - s->size += 4; dyn = htab->root.dynamic_sections_created; - if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, bfd_link_pic (info), h)) - { - if (tls_type == TLS_GD) - htab->root.srelgot->size += 2 * sizeof (Elf32_External_Rela); - else - htab->root.srelgot->size += sizeof (Elf32_External_Rela); - } + dyn = WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, bfd_link_pic (info), h); + or1k_set_got_and_rela_sizes (tls_type, dyn, + &sgot->size, &htab->root.srelgot->size); } else h->got.offset = (bfd_vma) -1; - if (eh->dyn_relocs == NULL) + if (h->dyn_relocs == NULL) return TRUE; /* In the shared -Bsymbolic case, discard space allocated for @@ -2765,24 +2834,24 @@ { struct elf_dyn_relocs **pp; - for (pp = &eh->dyn_relocs; (p = *pp) != NULL;) + for (pp = &h->dyn_relocs; (sec_relocs = *pp) != NULL;) { - p->count -= p->pc_count; - p->pc_count = 0; - if (p->count == 0) - *pp = p->next; + sec_relocs->count -= sec_relocs->pc_count; + sec_relocs->pc_count = 0; + if (sec_relocs->count == 0) + *pp = sec_relocs->next; else - pp = &p->next; + pp = &sec_relocs->next; } } /* Also discard relocs on undefined weak syms with non-default visibility. */ - if (eh->dyn_relocs != NULL + if (h->dyn_relocs != NULL && h->root.type == bfd_link_hash_undefweak) { if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT) - eh->dyn_relocs = NULL; + h->dyn_relocs = NULL; /* Make sure undefined weak symbols are output as a dynamic symbol in PIEs. */ @@ -2822,48 +2891,23 @@ goto keep; } - eh->dyn_relocs = NULL; + h->dyn_relocs = NULL; keep: ; } /* Finally, allocate space. */ - for (p = eh->dyn_relocs; p != NULL; p = p->next) + for (sec_relocs = h->dyn_relocs; + sec_relocs != NULL; + sec_relocs = sec_relocs->next) { - asection *sreloc = elf_section_data (p->sec)->sreloc; - sreloc->size += p->count * sizeof (Elf32_External_Rela); + asection *sreloc = elf_section_data (sec_relocs->sec)->sreloc; + sreloc->size += sec_relocs->count * sizeof (Elf32_External_Rela); } return TRUE; } -/* Set DF_TEXTREL if we find any dynamic relocs that apply to - read-only sections. */ - -static bfd_boolean -maybe_set_textrel (struct elf_link_hash_entry *h, void *info_p) -{ - asection *sec; - - if (h->root.type == bfd_link_hash_indirect) - return TRUE; - - sec = readonly_dynrelocs (h); - if (sec != NULL) - { - struct bfd_link_info *info = (struct bfd_link_info *) info_p; - - info->flags |= DF_TEXTREL; - info->callbacks->minfo - (_("%pB: dynamic relocation against `%pT' in read-only section `%pA'\n"), - sec->owner, h->root.root.string, sec); - - /* Not an error, just cut short the traversal. */ - return FALSE; - } - return TRUE; -} - /* Set the sizes of the dynamic sections. */ static bfd_boolean @@ -2911,26 +2955,28 @@ for (s = ibfd->sections; s != NULL; s = s->next) { - struct elf_dyn_relocs *p; + struct elf_dyn_relocs *sec_relocs; - for (p = ((struct elf_dyn_relocs *) - elf_section_data (s)->local_dynrel); - p != NULL; - p = p->next) + for (sec_relocs = ((struct elf_dyn_relocs *) + elf_section_data (s)->local_dynrel); + sec_relocs != NULL; + sec_relocs = sec_relocs->next) { - if (! bfd_is_abs_section (p->sec) - && bfd_is_abs_section (p->sec->output_section)) + if (! bfd_is_abs_section (sec_relocs->sec) + && bfd_is_abs_section (sec_relocs->sec->output_section)) { /* Input section has been discarded, either because it is a copy of a linkonce section or due to linker script /DISCARD/, so we'll be discarding the relocs too. */ } - else if (p->count != 0) + else if (sec_relocs->count != 0) { - srel = elf_section_data (p->sec)->sreloc; - srel->size += p->count * sizeof (Elf32_External_Rela); - if ((p->sec->output_section->flags & SEC_READONLY) != 0) + srel = elf_section_data (sec_relocs->sec)->sreloc; + srel->size += sec_relocs->count + * sizeof (Elf32_External_Rela); + if ((sec_relocs->sec->output_section->flags & SEC_READONLY) + != 0) info->flags |= DF_TEXTREL; } } @@ -2950,20 +2996,13 @@ { if (*local_got > 0) { - *local_got = s->size; + unsigned char tls_type = (local_tls_type == NULL) + ? TLS_UNKNOWN + : *local_tls_type; - /* TLS GD requires two GOT and two relocs. */ - if (local_tls_type != NULL && *local_tls_type == TLS_GD) - s->size += 8; - else - s->size += 4; - if (bfd_link_pic (info)) - { - if (local_tls_type != NULL && *local_tls_type == TLS_GD) - srel->size += 2 * sizeof (Elf32_External_Rela); - else - srel->size += sizeof (Elf32_External_Rela); - } + *local_got = s->size; + or1k_set_got_and_rela_sizes (tls_type, bfd_link_pic (info), + &s->size, &srel->size); } else @@ -3037,54 +3076,7 @@ return FALSE; } - if (htab->root.dynamic_sections_created) - { - /* Add some entries to the .dynamic section. We fill in the - values later, in or1k_elf_finish_dynamic_sections, but we - must add the entries now so that we get the correct size for - the .dynamic section. The DT_DEBUG entry is filled in by the - dynamic linker and used by the debugger. */ -#define add_dynamic_entry(TAG, VAL) \ - _bfd_elf_add_dynamic_entry (info, TAG, VAL) - - if (bfd_link_executable (info)) - { - if (! add_dynamic_entry (DT_DEBUG, 0)) - return FALSE; - } - - if (htab->root.splt->size != 0) - { - if (! add_dynamic_entry (DT_PLTGOT, 0) - || ! add_dynamic_entry (DT_PLTRELSZ, 0) - || ! add_dynamic_entry (DT_PLTREL, DT_RELA) - || ! add_dynamic_entry (DT_JMPREL, 0)) - return FALSE; - } - - if (relocs) - { - if (! add_dynamic_entry (DT_RELA, 0) - || ! add_dynamic_entry (DT_RELASZ, 0) - || ! add_dynamic_entry (DT_RELAENT, - sizeof (Elf32_External_Rela))) - return FALSE; - - /* If any dynamic relocs apply to a read-only section, - then we need a DT_TEXTREL entry. */ - if ((info->flags & DF_TEXTREL) == 0) - elf_link_hash_traverse (&htab->root, maybe_set_textrel, info); - - if ((info->flags & DF_TEXTREL) != 0) - { - if (! add_dynamic_entry (DT_TEXTREL, 0)) - return FALSE; - } - } - } - -#undef add_dynamic_entry - return TRUE; + return _bfd_elf_add_dynamic_tags (output_bfd, info, relocs); } /* Copy the extra info we tack onto an elf_link_hash_entry. */ @@ -3100,37 +3092,6 @@ edir = (struct elf_or1k_link_hash_entry *) dir; eind = (struct elf_or1k_link_hash_entry *) ind; - if (eind->dyn_relocs != NULL) - { - if (edir->dyn_relocs != NULL) - { - struct elf_dyn_relocs **pp; - struct elf_dyn_relocs *p; - - /* Add reloc counts against the indirect sym to the direct sym - list. Merge any entries against the same section. */ - for (pp = &eind->dyn_relocs; (p = *pp) != NULL;) - { - struct elf_dyn_relocs *q; - - for (q = edir->dyn_relocs; q != NULL; q = q->next) - if (q->sec == p->sec) - { - q->pc_count += p->pc_count; - q->count += p->count; - *pp = p->next; - break; - } - if (q == NULL) - pp = &p->next; - } - *pp = edir->dyn_relocs; - } - - edir->dyn_relocs = eind->dyn_relocs; - eind->dyn_relocs = NULL; - } - if (ind->root.type == bfd_link_hash_indirect) { if (dir->got.refcount <= 0) diff -Nru gdb-9.1/bfd/elf32-pj.c gdb-10.2/bfd/elf32-pj.c --- gdb-9.1/bfd/elf32-pj.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-pj.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* picoJava specific support for 32-bit ELF - Copyright (C) 1999-2019 Free Software Foundation, Inc. + Copyright (C) 1999-2020 Free Software Foundation, Inc. Contributed by Steve Chamberlan of Transmeta (sac@pobox.com). This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/elf32-ppc.c gdb-10.2/bfd/elf32-ppc.c --- gdb-9.1/bfd/elf32-ppc.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-ppc.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* PowerPC-specific support for 32-bit ELF - Copyright (C) 1994-2019 Free Software Foundation, Inc. + Copyright (C) 1994-2020 Free Software Foundation, Inc. Written by Ian Lance Taylor, Cygnus Support. This file is part of BFD, the Binary File Descriptor library. @@ -1332,15 +1332,21 @@ return FALSE; newsect = hdr->bfd_section; - flags = bfd_section_flags (newsect); + flags = 0; if (hdr->sh_flags & SHF_EXCLUDE) flags |= SEC_EXCLUDE; if (hdr->sh_type == SHT_ORDERED) flags |= SEC_SORT_ENTRIES; - bfd_set_section_flags (newsect, flags); - return TRUE; + if (strncmp (name, ".PPC.EMB", 8) == 0) + name += 8; + if (strncmp (name, ".sbss", 5) == 0 + || strncmp (name, ".sdata", 6) == 0) + flags |= SEC_SMALL_DATA; + + return (flags == 0 + || bfd_set_section_flags (newsect, newsect->flags | flags)); } /* Set up any other section flags and such that may be necessary. */ @@ -1394,7 +1400,7 @@ for (m = elf_seg_map (abfd); m != NULL; m = m->next) { struct elf_segment_map *n; - bfd_size_type amt; + size_t amt; unsigned int j, k; unsigned int p_flags; @@ -1627,8 +1633,7 @@ apuinfo_set = TRUE; if (largest_input_size < asec->size) { - if (buffer) - free (buffer); + free (buffer); largest_input_size = asec->size; buffer = bfd_malloc (largest_input_size); if (!buffer) @@ -1686,8 +1691,7 @@ } fail: - if (buffer) - free (buffer); + free (buffer); if (error_message) _bfd_error_handler (error_message, APUINFO_SECTION_NAME, ibfd); @@ -1802,7 +1806,7 @@ bfd_vma stub_off; asymbol *s; arelent *p; - long count, i, stub_delta; + size_t count, i, stub_delta; size_t size; char *names; bfd_byte buf[4]; @@ -2112,9 +2116,6 @@ from the beginning of the section. */ elf_linker_section_pointers_t *linker_section_pointer; - /* Track dynamic relocs copied for this symbol. */ - struct elf_dyn_relocs *dyn_relocs; - /* Contexts in which symbol is used in the GOT. Bits are or'd into the mask as the corresponding relocs are encountered during check_relocs, with TLS_TLS being set when any @@ -2194,9 +2195,6 @@ /* The type of PLT we have chosen to use. */ enum ppc_elf_plt_type plt_type; - /* True if the target system is VxWorks. */ - unsigned int is_vxworks:1; - /* Whether there exist local gnu indirect function resolvers, referenced by dynamic relocations. */ unsigned int local_ifunc_resolver:1; @@ -2214,9 +2212,6 @@ int plt_slot_size; /* The size of the first PLT entry. */ int plt_initial_entry_size; - - /* Small local sym cache. */ - struct sym_cache sym_cache; }; /* Rename some of the generic section flags to better document how they @@ -2235,8 +2230,9 @@ /* Get the PPC ELF linker hash table from a link_info structure. */ #define ppc_elf_hash_table(p) \ - (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \ - == PPC32_ELF_DATA ? ((struct ppc_elf_link_hash_table *) ((p)->hash)) : NULL) + ((is_elf_hash_table ((p)->hash) \ + && elf_hash_table_id (elf_hash_table (p)) == PPC32_ELF_DATA) \ + ? (struct ppc_elf_link_hash_table *) (p)->hash : NULL) /* Create an entry in a PPC ELF linker hash table. */ @@ -2260,7 +2256,6 @@ if (entry != NULL) { ppc_elf_hash_entry (entry)->linker_section_pointer = NULL; - ppc_elf_hash_entry (entry)->dyn_relocs = NULL; ppc_elf_hash_entry (entry)->tls_mask = 0; ppc_elf_hash_entry (entry)->has_sda_refs = 0; } @@ -2335,7 +2330,7 @@ return FALSE; htab = ppc_elf_hash_table (info); - if (!htab->is_vxworks) + if (htab->elf.target_os != is_vxworks) { /* The powerpc .got has a blrl instruction in it. Mark it executable. */ @@ -2495,7 +2490,7 @@ return FALSE; } - if (htab->is_vxworks + if (htab->elf.target_os == is_vxworks && !elf_vxworks_create_dynamic_sections (abfd, info, &htab->srelplt2)) return FALSE; @@ -2534,20 +2529,20 @@ if (eind->elf.root.type != bfd_link_hash_indirect) return; - if (eind->dyn_relocs != NULL) + if (ind->dyn_relocs != NULL) { - if (edir->dyn_relocs != NULL) + if (dir->dyn_relocs != NULL) { struct elf_dyn_relocs **pp; struct elf_dyn_relocs *p; /* Add reloc counts against the indirect sym to the direct sym list. Merge any entries against the same section. */ - for (pp = &eind->dyn_relocs; (p = *pp) != NULL; ) + for (pp = &ind->dyn_relocs; (p = *pp) != NULL; ) { struct elf_dyn_relocs *q; - for (q = edir->dyn_relocs; q != NULL; q = q->next) + for (q = dir->dyn_relocs; q != NULL; q = q->next) if (q->sec == p->sec) { q->pc_count += p->pc_count; @@ -2558,11 +2553,11 @@ if (q == NULL) pp = &p->next; } - *pp = edir->dyn_relocs; + *pp = dir->dyn_relocs; } - edir->dyn_relocs = eind->dyn_relocs; - eind->dyn_relocs = NULL; + dir->dyn_relocs = ind->dyn_relocs; + ind->dyn_relocs = NULL; } /* Copy over the GOT refcount entries that we may have already seen to @@ -2635,7 +2630,7 @@ htab = ppc_elf_hash_table (info); if (htab->sbss == NULL) { - flagword flags = SEC_IS_COMMON | SEC_LINKER_CREATED; + flagword flags = SEC_IS_COMMON | SEC_SMALL_DATA | SEC_LINKER_CREATED; if (!htab->elf.dynobj) htab->elf.dynobj = abfd; @@ -2802,7 +2797,7 @@ break; if (ent == NULL) { - bfd_size_type amt = sizeof (*ent); + size_t amt = sizeof (*ent); ent = bfd_alloc (abfd, amt); if (ent == NULL) return FALSE; @@ -2888,15 +2883,6 @@ if (bfd_link_relocatable (info)) return TRUE; - /* Don't do anything special with non-loaded, non-alloced sections. - In particular, any relocs in such sections should not affect GOT - and PLT reference counting (ie. we don't allow them to create GOT - or PLT entries), there's no possibility or desire to optimize TLS - relocs, and there's not much point in propagating relocs to shared - libs that the dynamic linker won't relocate. */ - if ((sec->flags & SEC_ALLOC) == 0) - return TRUE; - #ifdef DEBUG _bfd_error_handler ("ppc_elf_check_relocs called for section %pA in %pB", sec, abfd); @@ -2962,9 +2948,9 @@ tls_type = 0; r_type = ELF32_R_TYPE (rel->r_info); ifunc = NULL; - if (h == NULL && !htab->is_vxworks) + if (h == NULL && htab->elf.target_os != is_vxworks) { - Elf_Internal_Sym *isym = bfd_sym_from_r_symndx (&htab->sym_cache, + Elf_Internal_Sym *isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache, abfd, r_symndx); if (isym == NULL) return FALSE; @@ -3001,7 +2987,7 @@ } } - if (!htab->is_vxworks + if (htab->elf.target_os != is_vxworks && is_branch_reloc (r_type) && h != NULL && h == tga) @@ -3316,12 +3302,14 @@ return FALSE; break; + case R_PPC_TPREL16_HI: + case R_PPC_TPREL16_HA: + sec->has_tls_reloc = 1; + /* Fall through. */ /* We shouldn't really be seeing TPREL32. */ case R_PPC_TPREL32: case R_PPC_TPREL16: case R_PPC_TPREL16_LO: - case R_PPC_TPREL16_HI: - case R_PPC_TPREL16_HA: if (bfd_link_dll (info)) info->flags |= DF_STATIC_TLS; goto dodyn; @@ -3347,7 +3335,7 @@ asection *s; Elf_Internal_Sym *isym; - isym = bfd_sym_from_r_symndx (&htab->sym_cache, + isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache, abfd, r_symndx); if (isym == NULL) return FALSE; @@ -3478,7 +3466,7 @@ struct elf_dyn_relocs *p; struct elf_dyn_relocs **rel_head; - rel_head = &ppc_elf_hash_entry (h)->dyn_relocs; + rel_head = &h->dyn_relocs; p = *rel_head; if (p == NULL || p->sec != sec) { @@ -3507,7 +3495,7 @@ void *vpp; Elf_Internal_Sym *isym; - isym = bfd_sym_from_r_symndx (&htab->sym_cache, + isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache, abfd, r_symndx); if (isym == NULL) return FALSE; @@ -3553,6 +3541,17 @@ obj_attribute *in_attr, *in_attrs; obj_attribute *out_attr, *out_attrs; bfd_boolean ret = TRUE; + bfd_boolean warn_only; + + /* We only warn about shared library mismatches, because common + libraries advertise support for a particular long double variant + but actually support more than one variant. For example, glibc + typically supports 128-bit IBM long double in the shared library + but has a compatibility static archive for 64-bit long double. + The linker doesn't have the smarts to see that an app using + object files marked as 64-bit long double call the compatibility + layer objects and only from there call into the shared library. */ + warn_only = (ibfd->flags & DYNAMIC) != 0; in_attrs = elf_known_obj_attributes (ibfd)[OBJ_ATTR_GNU]; out_attrs = elf_known_obj_attributes (obfd)[OBJ_ATTR_GNU]; @@ -3570,9 +3569,12 @@ ; else if (out_fp == 0) { - out_attr->type = ATTR_TYPE_FLAG_INT_VAL; - out_attr->i ^= in_fp; - last_fp = ibfd; + if (!warn_only) + { + out_attr->type = ATTR_TYPE_FLAG_INT_VAL; + out_attr->i ^= in_fp; + last_fp = ibfd; + } } else if (out_fp != 2 && in_fp == 2) { @@ -3580,7 +3582,7 @@ /* xgettext:c-format */ (_("%pB uses hard float, %pB uses soft float"), last_fp, ibfd); - ret = FALSE; + ret = warn_only; } else if (out_fp == 2 && in_fp != 2) { @@ -3588,7 +3590,7 @@ /* xgettext:c-format */ (_("%pB uses hard float, %pB uses soft float"), ibfd, last_fp); - ret = FALSE; + ret = warn_only; } else if (out_fp == 1 && in_fp == 3) { @@ -3596,7 +3598,7 @@ /* xgettext:c-format */ (_("%pB uses double-precision hard float, " "%pB uses single-precision hard float"), last_fp, ibfd); - ret = FALSE; + ret = warn_only; } else if (out_fp == 3 && in_fp == 1) { @@ -3604,7 +3606,7 @@ /* xgettext:c-format */ (_("%pB uses double-precision hard float, " "%pB uses single-precision hard float"), ibfd, last_fp); - ret = FALSE; + ret = warn_only; } in_fp = in_attr->i & 0xc; @@ -3613,9 +3615,12 @@ ; else if (out_fp == 0) { - out_attr->type = ATTR_TYPE_FLAG_INT_VAL; - out_attr->i ^= in_fp; - last_ld = ibfd; + if (!warn_only) + { + out_attr->type = ATTR_TYPE_FLAG_INT_VAL; + out_attr->i ^= in_fp; + last_ld = ibfd; + } } else if (out_fp != 2 * 4 && in_fp == 2 * 4) { @@ -3623,7 +3628,7 @@ /* xgettext:c-format */ (_("%pB uses 64-bit long double, " "%pB uses 128-bit long double"), ibfd, last_ld); - ret = FALSE; + ret = warn_only; } else if (in_fp != 2 * 4 && out_fp == 2 * 4) { @@ -3631,7 +3636,7 @@ /* xgettext:c-format */ (_("%pB uses 64-bit long double, " "%pB uses 128-bit long double"), last_ld, ibfd); - ret = FALSE; + ret = warn_only; } else if (out_fp == 1 * 4 && in_fp == 3 * 4) { @@ -3639,7 +3644,7 @@ /* xgettext:c-format */ (_("%pB uses IBM long double, " "%pB uses IEEE long double"), last_ld, ibfd); - ret = FALSE; + ret = warn_only; } else if (out_fp == 3 * 4 && in_fp == 1 * 4) { @@ -3647,7 +3652,7 @@ /* xgettext:c-format */ (_("%pB uses IBM long double, " "%pB uses IEEE long double"), ibfd, last_ld); - ret = FALSE; + ret = warn_only; } } @@ -3796,6 +3801,9 @@ if (!ppc_elf_merge_obj_attributes (ibfd, info)) return FALSE; + if ((ibfd->flags & DYNAMIC) != 0) + return TRUE; + new_flags = elf_elfheader (ibfd)->e_flags; old_flags = elf_elfheader (obfd)->e_flags; if (!elf_flags_init (obfd)) @@ -4254,8 +4262,7 @@ { if (elf_section_data (sec)->relocs != relstart) free (relstart); - if (local_syms != NULL - && symtab_hdr->contents != (unsigned char *) local_syms) + if (symtab_hdr->contents != (unsigned char *) local_syms) free (local_syms); return FALSE; } @@ -4412,6 +4419,8 @@ if (htab == NULL) return FALSE; + htab->do_tls_opt = 1; + /* Make two passes through the relocs. First time check that tls relocs involved in setting up a tls_get_addr call are indeed followed by such a call. If they are not, don't do any tls @@ -4577,6 +4586,37 @@ tls_clear = 0; break; + case R_PPC_TPREL16_HA: + if (pass == 0) + { + unsigned char buf[4]; + unsigned int insn; + bfd_vma off = rel->r_offset & ~3; + if (!bfd_get_section_contents (ibfd, sec, buf, + off, 4)) + { + if (elf_section_data (sec)->relocs != relstart) + free (relstart); + return FALSE; + } + insn = bfd_get_32 (ibfd, buf); + /* addis rt,2,imm */ + if ((insn & ((0x3fu << 26) | 0x1f << 16)) + != ((15u << 26) | (2 << 16))) + { + /* xgettext:c-format */ + info->callbacks->minfo + (_("%H: warning: %s unexpected insn %#x.\n"), + ibfd, sec, off, "R_PPC_TPREL16_HA", insn); + htab->do_tls_opt = 0; + } + } + continue; + + case R_PPC_TPREL16_HI: + htab->do_tls_opt = 0; + continue; + default: continue; } @@ -4671,27 +4711,9 @@ free (relstart); } } - htab->do_tls_opt = 1; return TRUE; } -/* Find dynamic relocs for H that apply to read-only sections. */ - -static asection * -readonly_dynrelocs (struct elf_link_hash_entry *h) -{ - struct elf_dyn_relocs *p; - - for (p = ppc_elf_hash_entry (h)->dyn_relocs; p != NULL; p = p->next) - { - asection *s = p->sec->output_section; - - if (s != NULL && (s->flags & SEC_READONLY) != 0) - return p->sec; - } - return NULL; -} - /* Return true if we have dynamic relocs against H or any of its weak aliases, that apply to read-only sections. Cannot be used after size_dynamic_sections. */ @@ -4702,7 +4724,7 @@ struct ppc_elf_link_hash_entry *eh = ppc_elf_hash_entry (h); do { - if (readonly_dynrelocs (&eh->elf)) + if (_bfd_elf_readonly_dynrelocs (&eh->elf)) return TRUE; eh = ppc_elf_hash_entry (eh->elf.u.alias); } while (eh != NULL && &eh->elf != h); @@ -4717,7 +4739,7 @@ { struct elf_dyn_relocs *p; - for (p = ppc_elf_hash_entry (h)->dyn_relocs; p != NULL; p = p->next) + for (p = h->dyn_relocs; p != NULL; p = p->next) if (p->pc_count != 0) return TRUE; return FALSE; @@ -4761,7 +4783,7 @@ /* Discard dyn_relocs when non-pic if we've decided that a function symbol is local. */ if (!bfd_link_pic (info) && local) - ppc_elf_hash_entry (h)->dyn_relocs = NULL; + h->dyn_relocs = NULL; /* Clear procedure linkage table information for any symbol that won't need a .plt entry. */ @@ -4805,9 +4827,9 @@ || (h->non_got_ref && !h->ref_regular_nonweak && !UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))) - && !htab->is_vxworks + && htab->elf.target_os != is_vxworks && !ppc_elf_hash_entry (h)->has_sda_refs - && !readonly_dynrelocs (h)) + && !_bfd_elf_readonly_dynrelocs (h)) { h->pointer_equality_needed = 0; /* If we haven't seen a branch reloc and the symbol @@ -4818,7 +4840,7 @@ else if (!bfd_link_pic (info)) /* We are going to be defining the function symbol on the plt stub, so no dyn_relocs needed when non-pic. */ - ppc_elf_hash_entry (h)->dyn_relocs = NULL; + h->dyn_relocs = NULL; } h->protected_def = 0; /* Function symbols can't have copy relocs. */ @@ -4839,7 +4861,7 @@ if (def->root.u.def.section == htab->elf.sdynbss || def->root.u.def.section == htab->elf.sdynrelro || def->root.u.def.section == htab->dynsbss) - ppc_elf_hash_entry (h)->dyn_relocs = NULL; + h->dyn_relocs = NULL; return TRUE; } @@ -4891,7 +4913,7 @@ executable. */ if (ELIMINATE_COPY_RELOCS && !ppc_elf_hash_entry (h)->has_sda_refs - && !htab->is_vxworks + && htab->elf.target_os != is_vxworks && !h->def_regular && !alias_readonly_dynrelocs (h)) return TRUE; @@ -4935,7 +4957,7 @@ } /* We no longer want dyn_relocs. */ - ppc_elf_hash_entry (h)->dyn_relocs = NULL; + h->dyn_relocs = NULL; return _bfd_elf_adjust_dynamic_copy (info, h, s); } @@ -5145,19 +5167,19 @@ IFUNCs which are handled even in static executables. */ if (!htab->elf.dynamic_sections_created && h->type != STT_GNU_IFUNC) - eh->dyn_relocs = NULL; + h->dyn_relocs = NULL; /* Discard relocs on undefined symbols that must be local. */ else if (h->root.type == bfd_link_hash_undefined && ELF_ST_VISIBILITY (h->other) != STV_DEFAULT) - eh->dyn_relocs = NULL; + h->dyn_relocs = NULL; /* Also discard relocs on undefined weak syms with non-default visibility, or when dynamic_undefined_weak says so. */ else if (UNDEFWEAK_NO_DYNAMIC_RELOC (info, h)) - eh->dyn_relocs = NULL; + h->dyn_relocs = NULL; - if (eh->dyn_relocs == NULL) + if (h->dyn_relocs == NULL) ; /* In the shared -Bsymbolic case, discard space allocated for @@ -5177,7 +5199,7 @@ { struct elf_dyn_relocs **pp; - for (pp = &eh->dyn_relocs; (p = *pp) != NULL; ) + for (pp = &h->dyn_relocs; (p = *pp) != NULL; ) { p->count -= p->pc_count; p->pc_count = 0; @@ -5188,11 +5210,11 @@ } } - if (htab->is_vxworks) + if (htab->elf.target_os == is_vxworks) { struct elf_dyn_relocs **pp; - for (pp = &eh->dyn_relocs; (p = *pp) != NULL; ) + for (pp = &h->dyn_relocs; (p = *pp) != NULL; ) { if (strcmp (p->sec->output_section->name, ".tls_vars") == 0) *pp = p->next; @@ -5201,7 +5223,7 @@ } } - if (eh->dyn_relocs != NULL) + if (h->dyn_relocs != NULL) { /* Make sure this symbol is output as a dynamic symbol. */ if (!ensure_undef_dynamic (info, h)) @@ -5226,14 +5248,14 @@ return FALSE; if (h->dynindx == -1) - eh->dyn_relocs = NULL; + h->dyn_relocs = NULL; } else - eh->dyn_relocs = NULL; + h->dyn_relocs = NULL; } /* Allocate space. */ - for (p = eh->dyn_relocs; p != NULL; p = p->next) + for (p = h->dyn_relocs; p != NULL; p = p->next) { asection *sreloc = elf_section_data (p->sec)->sreloc; if (eh->elf.type == STT_GNU_IFUNC) @@ -5421,33 +5443,6 @@ return TRUE; } -/* Set DF_TEXTREL if we find any dynamic relocs that apply to - read-only sections. */ - -static bfd_boolean -maybe_set_textrel (struct elf_link_hash_entry *h, void *info_p) -{ - asection *sec; - - if (h->root.type == bfd_link_hash_indirect) - return TRUE; - - sec = readonly_dynrelocs (h); - if (sec != NULL) - { - struct bfd_link_info *info = (struct bfd_link_info *) info_p; - - info->flags |= DF_TEXTREL; - info->callbacks->minfo - (_("%pB: dynamic relocation against `%pT' in read-only section `%pA'\n"), - sec->owner, h->root.root.string, sec); - - /* Not an error, just cut short the traversal. */ - return FALSE; - } - return TRUE; -} - static const unsigned char glink_eh_frame_cie[] = { 0, 0, 0, 16, /* length. */ @@ -5529,7 +5524,7 @@ linker script /DISCARD/, so we'll be discarding the relocs too. */ } - else if (htab->is_vxworks + else if (htab->elf.target_os == is_vxworks && strcmp (p->sec->output_section->name, ".tls_vars") == 0) { @@ -5594,7 +5589,7 @@ else *local_got = (bfd_vma) -1; - if (htab->is_vxworks) + if (htab->elf.target_os == is_vxworks) continue; /* Allocate space for calls to local STT_GNU_IFUNC syms in .iplt. */ @@ -5859,20 +5854,9 @@ #define add_dynamic_entry(TAG, VAL) \ _bfd_elf_add_dynamic_entry (info, TAG, VAL) - if (bfd_link_executable (info)) - { - if (!add_dynamic_entry (DT_DEBUG, 0)) - return FALSE; - } - - if (htab->elf.splt != NULL && htab->elf.splt->size != 0) - { - if (!add_dynamic_entry (DT_PLTGOT, 0) - || !add_dynamic_entry (DT_PLTRELSZ, 0) - || !add_dynamic_entry (DT_PLTREL, DT_RELA) - || !add_dynamic_entry (DT_JMPREL, 0)) - return FALSE; - } + if (!_bfd_elf_maybe_vxworks_add_dynamic_tags (output_bfd, info, + relocs)) + return FALSE; if (htab->plt_type == PLT_NEW && htab->glink != NULL @@ -5886,29 +5870,6 @@ && !add_dynamic_entry (DT_PPC_OPT, PPC_OPT_TLS)) return FALSE; } - - if (relocs) - { - if (!add_dynamic_entry (DT_RELA, 0) - || !add_dynamic_entry (DT_RELASZ, 0) - || !add_dynamic_entry (DT_RELAENT, sizeof (Elf32_External_Rela))) - return FALSE; - } - - /* If any dynamic relocs apply to a read-only section, then we - need a DT_TEXTREL entry. */ - if ((info->flags & DF_TEXTREL) == 0) - elf_link_hash_traverse (elf_hash_table (info), maybe_set_textrel, - info); - - if ((info->flags & DF_TEXTREL) != 0) - { - if (!add_dynamic_entry (DT_TEXTREL, 0)) - return FALSE; - } - if (htab->is_vxworks - && !elf_vxworks_add_dynamic_entries (output_bfd, info)) - return FALSE; } #undef add_dynamic_entry @@ -6642,8 +6603,7 @@ rel_hdr = _bfd_elf_single_rel_hdr (isec); rel_hdr->sh_size += changes * rel_hdr->sh_entsize; } - else if (internal_relocs != NULL - && elf_section_data (isec)->relocs != internal_relocs) + else if (elf_section_data (isec)->relocs != internal_relocs) free (internal_relocs); *again = changes != 0 || workaround_change; @@ -6656,13 +6616,11 @@ branch_fixups = branch_fixups->next; free (f); } - if (isymbuf != NULL && (unsigned char *) isymbuf != symtab_hdr->contents) + if ((unsigned char *) isymbuf != symtab_hdr->contents) free (isymbuf); - if (contents != NULL - && elf_section_data (isec)->this_hdr.contents != contents) + if (elf_section_data (isec)->this_hdr.contents != contents) free (contents); - if (internal_relocs != NULL - && elf_section_data (isec)->relocs != internal_relocs) + if (elf_section_data (isec)->relocs != internal_relocs) free (internal_relocs); return FALSE; } @@ -6843,7 +6801,7 @@ { unsigned int rtra; - if ((insn & (0x3f << 26)) != 31 << 26) + if ((insn & (0x3fu << 26)) != 31 << 26) return 0; if (reg == 0 || ((insn >> 11) & 0x1f) == reg) @@ -6861,13 +6819,13 @@ || ((insn & (0x1f << 6)) >= 16 << 6 && (insn & (0x1f << 6)) < 24 << 6))) /* load and store indexed -> dform. */ - insn = (32 | ((insn >> 6) & 0x1f)) << 26; + insn = (32u | ((insn >> 6) & 0x1f)) << 26; else if ((insn & (((0x1a << 5) | 0x1f) << 1)) == 21 << 1) /* ldx, ldux, stdx, stdux -> ld, ldu, std, stdu. */ - insn = ((58 | ((insn >> 6) & 4)) << 26) | ((insn >> 6) & 1); + insn = ((58u | ((insn >> 6) & 4)) << 26) | ((insn >> 6) & 1); else if ((insn & (((0x1f << 5) | 0x1f) << 1)) == 341 << 1) /* lwax -> lwa. */ - insn = (58 << 26) | 2; + insn = (58u << 26) | 2; else return 0; insn |= rtra; @@ -6882,36 +6840,36 @@ _bfd_elf_ppc_at_tprel_transform (unsigned int insn, unsigned int reg) { if ((insn & (0x1f << 16)) == reg << 16 - && ((insn & (0x3f << 26)) == 14u << 26 /* addi */ - || (insn & (0x3f << 26)) == 15u << 26 /* addis */ - || (insn & (0x3f << 26)) == 32u << 26 /* lwz */ - || (insn & (0x3f << 26)) == 34u << 26 /* lbz */ - || (insn & (0x3f << 26)) == 36u << 26 /* stw */ - || (insn & (0x3f << 26)) == 38u << 26 /* stb */ - || (insn & (0x3f << 26)) == 40u << 26 /* lhz */ - || (insn & (0x3f << 26)) == 42u << 26 /* lha */ - || (insn & (0x3f << 26)) == 44u << 26 /* sth */ - || (insn & (0x3f << 26)) == 46u << 26 /* lmw */ - || (insn & (0x3f << 26)) == 47u << 26 /* stmw */ - || (insn & (0x3f << 26)) == 48u << 26 /* lfs */ - || (insn & (0x3f << 26)) == 50u << 26 /* lfd */ - || (insn & (0x3f << 26)) == 52u << 26 /* stfs */ - || (insn & (0x3f << 26)) == 54u << 26 /* stfd */ - || ((insn & (0x3f << 26)) == 58u << 26 /* lwa,ld,lmd */ + && ((insn & (0x3fu << 26)) == 14u << 26 /* addi */ + || (insn & (0x3fu << 26)) == 15u << 26 /* addis */ + || (insn & (0x3fu << 26)) == 32u << 26 /* lwz */ + || (insn & (0x3fu << 26)) == 34u << 26 /* lbz */ + || (insn & (0x3fu << 26)) == 36u << 26 /* stw */ + || (insn & (0x3fu << 26)) == 38u << 26 /* stb */ + || (insn & (0x3fu << 26)) == 40u << 26 /* lhz */ + || (insn & (0x3fu << 26)) == 42u << 26 /* lha */ + || (insn & (0x3fu << 26)) == 44u << 26 /* sth */ + || (insn & (0x3fu << 26)) == 46u << 26 /* lmw */ + || (insn & (0x3fu << 26)) == 47u << 26 /* stmw */ + || (insn & (0x3fu << 26)) == 48u << 26 /* lfs */ + || (insn & (0x3fu << 26)) == 50u << 26 /* lfd */ + || (insn & (0x3fu << 26)) == 52u << 26 /* stfs */ + || (insn & (0x3fu << 26)) == 54u << 26 /* stfd */ + || ((insn & (0x3fu << 26)) == 58u << 26 /* lwa,ld,lmd */ && (insn & 3) != 1) - || ((insn & (0x3f << 26)) == 62u << 26 /* std, stmd */ + || ((insn & (0x3fu << 26)) == 62u << 26 /* std, stmd */ && ((insn & 3) == 0 || (insn & 3) == 3)))) { insn &= ~(0x1f << 16); } else if ((insn & (0x1f << 21)) == reg << 21 - && ((insn & (0x3e << 26)) == 24u << 26 /* ori, oris */ - || (insn & (0x3e << 26)) == 26u << 26 /* xori,xoris */ - || (insn & (0x3e << 26)) == 28u << 26 /* andi,andis */)) + && ((insn & (0x3eu << 26)) == 24u << 26 /* ori, oris */ + || (insn & (0x3eu << 26)) == 26u << 26 /* xori,xoris */ + || (insn & (0x3eu << 26)) == 28u << 26 /* andi,andis */)) { insn &= ~(0x1f << 21); insn |= (insn & (0x1f << 16)) << 5; - if ((insn & (0x3e << 26)) == 26 << 26 /* xori,xoris */) + if ((insn & (0x3eu << 26)) == 26u << 26 /* xori,xoris */) insn -= 2 >> 26; /* convert to ori,oris */ } else @@ -6922,17 +6880,17 @@ static bfd_boolean is_insn_ds_form (unsigned int insn) { - return ((insn & (0x3f << 26)) == 58u << 26 /* ld,ldu,lwa */ - || (insn & (0x3f << 26)) == 62u << 26 /* std,stdu,stq */ - || (insn & (0x3f << 26)) == 57u << 26 /* lfdp */ - || (insn & (0x3f << 26)) == 61u << 26 /* stfdp */); + return ((insn & (0x3fu << 26)) == 58u << 26 /* ld,ldu,lwa */ + || (insn & (0x3fu << 26)) == 62u << 26 /* std,stdu,stq */ + || (insn & (0x3fu << 26)) == 57u << 26 /* lfdp */ + || (insn & (0x3fu << 26)) == 61u << 26 /* stfdp */); } static bfd_boolean is_insn_dq_form (unsigned int insn) { - return ((insn & (0x3f << 26)) == 56u << 26 /* lq */ - || ((insn & (0x3f << 26)) == (61u << 26) /* lxv, stxv */ + return ((insn & (0x3fu << 26)) == 56u << 26 /* lq */ + || ((insn & (0x3fu << 26)) == (61u << 26) /* lxv, stxv */ && (insn & 3) == 1)); } @@ -7016,7 +6974,7 @@ sym_hashes = elf_sym_hashes (input_bfd); /* We have to handle relocations in vxworks .tls_vars sections specially, because the dynamic loader is 'weird'. */ - is_vxworks_tls = (htab->is_vxworks && bfd_link_pic (info) + is_vxworks_tls = (htab->elf.target_os == is_vxworks && bfd_link_pic (info) && !strcmp (input_section->output_section->name, ".tls_vars")); if (input_section->sec_info_type == SEC_INFO_TYPE_TARGET) @@ -7245,7 +7203,7 @@ { /* IE */ insn1 &= (0x1f << 21) | (0x1f << 16); - insn1 |= 32 << 26; /* lwz */ + insn1 |= 32u << 26; /* lwz */ if (offset != (bfd_vma) -1) { rel[1].r_info = ELF32_R_INFO (STN_UNDEF, R_PPC_NONE); @@ -7414,7 +7372,7 @@ insn = bfd_get_32 (input_bfd, contents + rel->r_offset - d_offset); - if ((insn & (0x3f << 26)) == 15u << 26 + if ((insn & (0x3fu << 26)) == 15u << 26 && (insn & (0x1f << 16)) != 0) { if (!bfd_link_pic (info)) @@ -7450,7 +7408,7 @@ { insn = bfd_get_32 (input_bfd, contents + rel->r_offset - d_offset); - if ((insn & (0x3f << 26)) == (15u << 26) + if ((insn & (0x3fu << 26)) == (15u << 26) && (insn & (0x1f << 16)) == 0 /* lis */) { bfd_byte *p; @@ -7513,23 +7471,23 @@ { insn = bfd_get_32 (input_bfd, contents + rel->r_offset - d_offset); - if ((insn & (0x3f << 26)) == 14u << 26 /* addi */ - || (insn & (0x3f << 26)) == 32u << 26 /* lwz */ - || (insn & (0x3f << 26)) == 34u << 26 /* lbz */ - || (insn & (0x3f << 26)) == 36u << 26 /* stw */ - || (insn & (0x3f << 26)) == 38u << 26 /* stb */ - || (insn & (0x3f << 26)) == 40u << 26 /* lhz */ - || (insn & (0x3f << 26)) == 42u << 26 /* lha */ - || (insn & (0x3f << 26)) == 44u << 26 /* sth */ - || (insn & (0x3f << 26)) == 46u << 26 /* lmw */ - || (insn & (0x3f << 26)) == 47u << 26 /* stmw */ - || (insn & (0x3f << 26)) == 48u << 26 /* lfs */ - || (insn & (0x3f << 26)) == 50u << 26 /* lfd */ - || (insn & (0x3f << 26)) == 52u << 26 /* stfs */ - || (insn & (0x3f << 26)) == 54u << 26 /* stfd */ - || ((insn & (0x3f << 26)) == 58u << 26 /* lwa,ld,lmd */ + if ((insn & (0x3fu << 26)) == 14u << 26 /* addi */ + || (insn & (0x3fu << 26)) == 32u << 26 /* lwz */ + || (insn & (0x3fu << 26)) == 34u << 26 /* lbz */ + || (insn & (0x3fu << 26)) == 36u << 26 /* stw */ + || (insn & (0x3fu << 26)) == 38u << 26 /* stb */ + || (insn & (0x3fu << 26)) == 40u << 26 /* lhz */ + || (insn & (0x3fu << 26)) == 42u << 26 /* lha */ + || (insn & (0x3fu << 26)) == 44u << 26 /* sth */ + || (insn & (0x3fu << 26)) == 46u << 26 /* lmw */ + || (insn & (0x3fu << 26)) == 47u << 26 /* stmw */ + || (insn & (0x3fu << 26)) == 48u << 26 /* lfs */ + || (insn & (0x3fu << 26)) == 50u << 26 /* lfd */ + || (insn & (0x3fu << 26)) == 52u << 26 /* stfs */ + || (insn & (0x3fu << 26)) == 54u << 26 /* stfd */ + || ((insn & (0x3fu << 26)) == 58u << 26 /* lwa,ld,lmd */ && (insn & 3) != 1) - || ((insn & (0x3f << 26)) == 62u << 26 /* std, stmd */ + || ((insn & (0x3fu << 26)) == 62u << 26 /* std, stmd */ && ((insn & 3) == 0 || (insn & 3) == 3))) { /* Arrange to apply the reloc addend, if any. */ @@ -7548,7 +7506,7 @@ } ifunc = NULL; - if (!htab->is_vxworks) + if (htab->elf.target_os != is_vxworks) { struct plt_entry *ent; @@ -7629,39 +7587,6 @@ if (r_type < R_PPC_max) howto = ppc_elf_howto_table[r_type]; - switch (r_type) - { - default: - break; - - case R_PPC_TPREL16_HA: - if (htab->do_tls_opt && relocation + addend + 0x8000 < 0x10000) - { - bfd_byte *p = contents + (rel->r_offset & ~3); - unsigned int insn = bfd_get_32 (input_bfd, p); - if ((insn & ((0x3f << 26) | 0x1f << 16)) - != ((15u << 26) | (2 << 16)) /* addis rt,2,imm */) - /* xgettext:c-format */ - info->callbacks->minfo - (_("%H: warning: %s unexpected insn %#x.\n"), - input_bfd, input_section, rel->r_offset, howto->name, insn); - else - bfd_put_32 (input_bfd, NOP, p); - } - break; - - case R_PPC_TPREL16_LO: - if (htab->do_tls_opt && relocation + addend + 0x8000 < 0x10000) - { - bfd_byte *p = contents + (rel->r_offset & ~3); - unsigned int insn = bfd_get_32 (input_bfd, p); - insn &= ~(0x1f << 16); - insn |= 2 << 16; - bfd_put_32 (input_bfd, insn, p); - } - break; - } - tls_type = 0; switch (r_type) { @@ -8091,11 +8016,11 @@ if (bfd_link_pic (info) ? ((h == NULL - || ppc_elf_hash_entry (h)->dyn_relocs != NULL) + || h->dyn_relocs != NULL) && ((h != NULL && pc_dynrelocs (h)) || must_be_dyn_reloc (info, r_type))) : (h != NULL - && ppc_elf_hash_entry (h)->dyn_relocs != NULL)) + && h->dyn_relocs != NULL)) { int skip; bfd_byte *loc; @@ -8780,7 +8705,7 @@ case R_PPC_VLE_ADDR20: ppc_elf_vle_split20 (output_bfd, contents + rel->r_offset, relocation); - continue; + goto copy_reloc; /* Relocate against the beginning of the section. */ case R_PPC_SECTOFF: @@ -8831,6 +8756,31 @@ default: break; + case R_PPC_TPREL16_HA: + if (htab->do_tls_opt && relocation + addend + 0x8000 < 0x10000) + { + bfd_byte *p = contents + (rel->r_offset & ~3); + bfd_put_32 (input_bfd, NOP, p); + } + break; + + case R_PPC_TPREL16_LO: + if (htab->do_tls_opt && relocation + addend + 0x8000 < 0x10000) + { + bfd_byte *p = contents + (rel->r_offset & ~3); + unsigned int insn = bfd_get_32 (input_bfd, p); + insn &= ~(0x1f << 16); + insn |= 2 << 16; + bfd_put_32 (input_bfd, insn, p); + } + break; + } + + switch (r_type) + { + default: + break; + case R_PPC_PLTCALL: if (unresolved_reloc) { @@ -8993,11 +8943,11 @@ unsigned int insn; insn = bfd_get_32 (input_bfd, contents + (rel->r_offset & ~3)); - if ((insn & (0x3f << 26)) == 10u << 26 /* cmpli */) + if ((insn & (0x3fu << 26)) == 10u << 26 /* cmpli */) complain = complain_overflow_bitfield; - else if ((insn & (0x3f << 26)) == 28u << 26 /* andi */ - || (insn & (0x3f << 26)) == 24u << 26 /* ori */ - || (insn & (0x3f << 26)) == 26u << 26 /* xori */) + else if ((insn & (0x3fu << 26)) == 28u << 26 /* andi */ + || (insn & (0x3fu << 26)) == 24u << 26 /* ori */ + || (insn & (0x3fu << 26)) == 26u << 26 /* xori */) complain = complain_overflow_unsigned; } if (howto->complain_on_overflow != complain) @@ -9221,10 +9171,10 @@ . new_page: new_page: . */ insn = bfd_get_32 (input_bfd, contents + offset); - if ((insn & (0x3f << 26)) == (18u << 26) /* b,bl,ba,bla */ - || ((insn & (0x3f << 26)) == (16u << 26) /* bc,bcl,bca,bcla*/ + if ((insn & (0x3fu << 26)) == (18u << 26) /* b,bl,ba,bla */ + || ((insn & (0x3fu << 26)) == (16u << 26) /* bc,bcl,bca,bcla*/ && (insn & (0x14 << 21)) == (0x14 << 21)) /* with BO=0x14 */ - || ((insn & (0x3f << 26)) == (19u << 26) + || ((insn & (0x3fu << 26)) == (19u << 26) && (insn & (0x3ff << 1)) == (16u << 1) /* bclr,bclrl */ && (insn & (0x14 << 21)) == (0x14 << 21)))/* with BO=0x14 */ continue; @@ -9308,7 +9258,7 @@ else rel = NULL; - if ((insn & (0x3f << 26)) == (16u << 26) /* bc */ + if ((insn & (0x3fu << 26)) == (16u << 26) /* bc */ && (insn & 2) == 0 /* relative */) { bfd_vma delta = ((insn & 0xfffc) ^ 0x8000) - 0x8000; @@ -9701,8 +9651,7 @@ if (!get_sym_h (NULL, &sym, &sym_sec, NULL, &local_syms, lplt - local_plt, ibfd)) { - if (local_syms != NULL - && symtab_hdr->contents != (unsigned char *) local_syms) + if (symtab_hdr->contents != (unsigned char *) local_syms) free (local_syms); return FALSE; } @@ -9921,7 +9870,7 @@ switch (dyn.d_tag) { case DT_PLTGOT: - if (htab->is_vxworks) + if (htab->elf.target_os == is_vxworks) s = htab->elf.sgotplt; else s = htab->elf.splt; @@ -9953,7 +9902,7 @@ continue; default: - if (htab->is_vxworks + if (htab->elf.target_os == is_vxworks && elf_vxworks_finish_dynamic_entry (output_bfd, &dyn)) break; continue; @@ -10005,7 +9954,7 @@ } /* Fill in the first entry in the VxWorks procedure linkage table. */ - if (htab->is_vxworks + if (htab->elf.target_os == is_vxworks && htab->elf.splt != NULL && htab->elf.splt->size != 0 && htab->elf.splt->output_section != bfd_abs_section_ptr) @@ -10414,6 +10363,9 @@ #undef ELF_OSABI +#undef ELF_TARGET_OS +#define ELF_TARGET_OS is_vxworks + /* VxWorks uses the elf default section flags for .plt. */ static const struct bfd_elf_special_section * ppc_elf_vxworks_get_sec_type_attr (bfd *abfd, asection *sec) @@ -10439,7 +10391,6 @@ { struct ppc_elf_link_hash_table *htab = (struct ppc_elf_link_hash_table *)ret; - htab->is_vxworks = 1; htab->plt_type = PLT_VXWORKS; htab->plt_entry_size = VXWORKS_PLT_ENTRY_SIZE; htab->plt_slot_size = VXWORKS_PLT_ENTRY_SIZE; diff -Nru gdb-9.1/bfd/elf32-ppc.h gdb-10.2/bfd/elf32-ppc.h --- gdb-9.1/bfd/elf32-ppc.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-ppc.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* PowerPC-specific support for 64-bit ELF. - Copyright (C) 2003-2019 Free Software Foundation, Inc. + Copyright (C) 2003-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/elf32-pru.c gdb-10.2/bfd/elf32-pru.c --- gdb-9.1/bfd/elf32-pru.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-pru.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* 32-bit ELF support for TI PRU. - Copyright (C) 2014-2019 Free Software Foundation, Inc. + Copyright (C) 2014-2020 Free Software Foundation, Inc. Contributed by Dimitar Dimitrov Based on elf32-nios2.c @@ -539,7 +539,7 @@ bfd_byte *data, bfd_vma offset, bfd_vma symbol_value, bfd_vma addend) { - bfd_signed_vma relocation; + bfd_vma relocation; bfd_size_type octets = offset * OCTETS_PER_BYTE (abfd, input_section); bfd_byte *location; unsigned long in1, in2; @@ -1523,20 +1523,17 @@ } } - if (internal_relocs != NULL - && elf_section_data (sec)->relocs != internal_relocs) + if (elf_section_data (sec)->relocs != internal_relocs) free (internal_relocs); return TRUE; -error_return: - if (isymbuf != NULL && symtab_hdr->contents != (unsigned char *) isymbuf) + error_return: + if (symtab_hdr->contents != (unsigned char *) isymbuf) free (isymbuf); - if (contents != NULL - && elf_section_data (sec)->this_hdr.contents != contents) + if (elf_section_data (sec)->this_hdr.contents != contents) free (contents); - if (internal_relocs != NULL - && elf_section_data (sec)->relocs != internal_relocs) + if (elf_section_data (sec)->relocs != internal_relocs) free (internal_relocs); return FALSE; @@ -1554,7 +1551,7 @@ pru_elf32_link_hash_table_create (bfd *abfd) { struct elf_link_hash_table *ret; - bfd_size_type amt = sizeof (struct elf_link_hash_table); + size_t amt = sizeof (struct elf_link_hash_table); ret = bfd_zmalloc (amt); if (ret == NULL) diff -Nru gdb-9.1/bfd/elf32-rl78.c gdb-10.2/bfd/elf32-rl78.c --- gdb-9.1/bfd/elf32-rl78.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-rl78.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Renesas RL78 specific support for 32-bit ELF. - Copyright (C) 2011-2019 Free Software Foundation, Inc. + Copyright (C) 2011-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -1822,7 +1822,7 @@ rl78_offset_for_reloc (bfd * abfd, Elf_Internal_Rela * rel, Elf_Internal_Shdr * symtab_hdr, - Elf_External_Sym_Shndx * shndx_buf ATTRIBUTE_UNUSED, + bfd_byte * shndx_buf ATTRIBUTE_UNUSED, Elf_Internal_Sym * intsyms, Elf_Internal_Rela ** lrel, bfd * input_bfd, @@ -2068,7 +2068,7 @@ bfd_byte * free_contents = NULL; Elf_Internal_Sym * intsyms = NULL; Elf_Internal_Sym * free_intsyms = NULL; - Elf_External_Sym_Shndx * shndx_buf = NULL; + bfd_byte * shndx_buf = NULL; bfd_vma pc; bfd_vma symval ATTRIBUTE_UNUSED = 0; int pcrel ATTRIBUTE_UNUSED = 0; @@ -2121,17 +2121,20 @@ if (shndx_hdr && shndx_hdr->sh_size != 0) { - bfd_size_type amt; + size_t amt; - amt = symtab_hdr->sh_info; - amt *= sizeof (Elf_External_Sym_Shndx); - shndx_buf = (Elf_External_Sym_Shndx *) bfd_malloc (amt); - if (shndx_buf == NULL) + if (_bfd_mul_overflow (symtab_hdr->sh_info, + sizeof (Elf_External_Sym_Shndx), &amt)) + { + bfd_set_error (bfd_error_no_memory); + goto error_return; + } + if (bfd_seek (abfd, shndx_hdr->sh_offset, SEEK_SET) != 0) goto error_return; - if (bfd_seek (abfd, shndx_hdr->sh_offset, SEEK_SET) != 0 - || bfd_bread (shndx_buf, amt, abfd) != amt) + shndx_buf = _bfd_malloc_and_read (abfd, amt, amt); + if (shndx_buf == NULL) goto error_return; - shndx_hdr->contents = (bfd_byte *) shndx_buf; + shndx_hdr->contents = shndx_buf; } /* Get a copy of the native relocations. */ @@ -2549,11 +2552,8 @@ return TRUE; error_return: - if (free_relocs != NULL) - free (free_relocs); - - if (free_contents != NULL) - free (free_contents); + free (free_relocs); + free (free_contents); if (shndx_buf != NULL) { @@ -2561,8 +2561,7 @@ free (shndx_buf); } - if (free_intsyms != NULL) - free (free_intsyms); + free (free_intsyms); return TRUE; } diff -Nru gdb-9.1/bfd/elf32-rx.c gdb-10.2/bfd/elf32-rx.c --- gdb-9.1/bfd/elf32-rx.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-rx.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Renesas RX specific support for 32-bit ELF. - Copyright (C) 2008-2019 Free Software Foundation, Inc. + Copyright (C) 2008-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -576,7 +576,9 @@ /* We have already done error checking in rx_table_find(). */ - buf = (char *) malloc (13 + strlen (name + 20)); + buf = (char *) bfd_malloc (13 + strlen (name + 20)); + if (buf == NULL) + return FALSE; sprintf (buf, "$tablestart$%s", name + 20); table_start_cache = get_symbol_value (buf, @@ -618,7 +620,10 @@ idx = (int) (entry_vma - table_start_cache) / 4; /* This will look like $tableentry$$ */ - buf = (char *) malloc (12 + 20 + strlen (name + 20)); + buf = (char *) bfd_malloc (12 + 20 + strlen (name + 20)); + if (buf == NULL) + return FALSE; + sprintf (buf, "$tableentry$%d$%s", idx, name + 20); h = (struct elf_link_hash_entry *) bfd_link_hash_lookup (info->hash, buf, FALSE, FALSE, TRUE); @@ -1738,7 +1743,7 @@ rx_offset_for_reloc (bfd * abfd, Elf_Internal_Rela * rel, Elf_Internal_Shdr * symtab_hdr, - Elf_External_Sym_Shndx * shndx_buf ATTRIBUTE_UNUSED, + bfd_byte * shndx_buf ATTRIBUTE_UNUSED, Elf_Internal_Sym * intsyms, Elf_Internal_Rela ** lrel, bfd * input_bfd, @@ -2005,7 +2010,7 @@ bfd_byte * free_contents = NULL; Elf_Internal_Sym * intsyms = NULL; Elf_Internal_Sym * free_intsyms = NULL; - Elf_External_Sym_Shndx * shndx_buf = NULL; + bfd_byte * shndx_buf = NULL; bfd_vma pc; bfd_vma sec_start; bfd_vma symval = 0; @@ -2058,17 +2063,20 @@ if (shndx_hdr && shndx_hdr->sh_size != 0) { - bfd_size_type amt; + size_t amt; - amt = symtab_hdr->sh_info; - amt *= sizeof (Elf_External_Sym_Shndx); - shndx_buf = (Elf_External_Sym_Shndx *) bfd_malloc (amt); - if (shndx_buf == NULL) + if (_bfd_mul_overflow (symtab_hdr->sh_info, + sizeof (Elf_External_Sym_Shndx), &amt)) + { + bfd_set_error (bfd_error_file_too_big); + goto error_return; + } + if (bfd_seek (abfd, shndx_hdr->sh_offset, SEEK_SET) != 0) goto error_return; - if (bfd_seek (abfd, shndx_hdr->sh_offset, SEEK_SET) != 0 - || bfd_bread (shndx_buf, amt, abfd) != amt) + shndx_buf = _bfd_malloc_and_read (abfd, amt, amt); + if (shndx_buf == NULL) goto error_return; - shndx_hdr->contents = (bfd_byte *) shndx_buf; + shndx_hdr->contents = shndx_buf; } /* Get a copy of the native relocations. */ @@ -3029,8 +3037,7 @@ return TRUE; error_return: - if (free_contents != NULL) - free (free_contents); + free (free_contents); if (shndx_buf != NULL) { @@ -3038,8 +3045,7 @@ free (shndx_buf); } - if (free_intsyms != NULL) - free (free_intsyms); + free (free_intsyms); return FALSE; } @@ -3332,26 +3338,14 @@ Elf_Internal_Sym * isymend; Elf_Internal_Sym * isym; Elf_Internal_Shdr * symtab_hdr; - bfd_boolean free_internal = FALSE, free_external = FALSE; char * st_info_str; char * st_info_stb_str; char * st_other_str; char * st_shndx_str; - if (! internal_syms) - { - internal_syms = bfd_malloc (1000); - free_internal = 1; - } - if (! external_syms) - { - external_syms = bfd_malloc (1000); - free_external = 1; - } - symtab_hdr = &elf_tdata (abfd)->symtab_hdr; locsymcount = symtab_hdr->sh_size / get_elf_backend_data (abfd)->s->sizeof_sym; - if (free_internal) + if (!internal_syms) isymbuf = bfd_elf_get_elf_syms (abfd, symtab_hdr, symtab_hdr->sh_info, 0, internal_syms, external_syms, NULL); @@ -3403,10 +3397,6 @@ isym->st_other, st_other_str, isym->st_shndx, st_shndx_str); } - if (free_internal) - free (internal_syms); - if (free_external) - free (external_syms); } char * @@ -3615,6 +3605,8 @@ char * cloc = (char *) location; swapped_data = (char *) bfd_alloc (abfd, count); + if (swapped_data == NULL) + return FALSE; for (i = 0; i < count; i += 4) { @@ -3779,7 +3771,9 @@ find all the related symbols and mark their sections as SEC_KEEP so we don't garbage collect them. */ - buf = (char *) malloc (12 + 10 + strlen (tname)); + buf = (char *) bfd_malloc (12 + 10 + strlen (tname)); + if (buf == NULL) + return FALSE; sprintf (buf, "$tableend$%s", tname); h = bfd_link_hash_lookup (info->info->hash, buf, FALSE, FALSE, TRUE); @@ -3908,7 +3902,9 @@ + ent->u.def.section->output_section->vma + ent->u.def.section->output_offset); - buf = (char *) malloc (12 + 10 + strlen (tname)); + buf = (char *) bfd_malloc (12 + 10 + strlen (tname)); + if (buf == NULL) + return FALSE; sprintf (buf, "$tableend$%s", tname); end_addr = get_symbol_value_maybe (buf, info->info); @@ -3928,8 +3924,21 @@ info->table_start = start_addr; info->table_size = (int) (end_addr - start_addr) / 4; - info->table_handlers = (bfd_vma *) malloc (info->table_size * sizeof (bfd_vma)); - info->table_entries = (struct bfd_link_hash_entry **) malloc (info->table_size * sizeof (struct bfd_link_hash_entry)); + info->table_handlers = (bfd_vma *) + bfd_malloc (info->table_size * sizeof (bfd_vma)); + if (info->table_handlers == NULL) + { + free (buf); + return FALSE; + } + info->table_entries = (struct bfd_link_hash_entry **) + bfd_malloc (info->table_size * sizeof (struct bfd_link_hash_entry)); + if (info->table_entries == NULL) + { + free (info->table_handlers); + free (buf); + return FALSE; + } for (idx = 0; idx < (int) (end_addr - start_addr) / 4; idx ++) { diff -Nru gdb-9.1/bfd/elf32-rx.h gdb-10.2/bfd/elf32-rx.h --- gdb-9.1/bfd/elf32-rx.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-rx.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Renesas RX specific support for 32-bit ELF. - Copyright (C) 2014-2019 Free Software Foundation, Inc. + Copyright (C) 2014-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/elf32-s12z.c gdb-10.2/bfd/elf32-s12z.c --- gdb-9.1/bfd/elf32-s12z.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-s12z.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Freescale S12Z-specific support for 32-bit ELF - Copyright (C) 1999-2019 Free Software Foundation, Inc. + Copyright (C) 1999-2020 Free Software Foundation, Inc. (Heavily copied from the D10V port by Martin Hunt (hunt@cygnus.com)) This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/elf32-s390.c gdb-10.2/bfd/elf32-s390.c --- gdb-9.1/bfd/elf32-s390.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-s390.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* IBM S/390-specific support for 32-bit ELF - Copyright (C) 2000-2019 Free Software Foundation, Inc. + Copyright (C) 2000-2020 Free Software Foundation, Inc. Contributed by Carl B. Pedersen and Martin Schwidefsky. This file is part of BFD, the Binary File Descriptor library. @@ -654,9 +654,6 @@ { struct elf_link_hash_entry elf; - /* Track dynamic relocs copied for this symbol. */ - struct elf_dyn_relocs *dyn_relocs; - /* Number of GOTPLT references for a function. */ bfd_signed_vma gotplt_refcount; @@ -749,16 +746,14 @@ bfd_signed_vma refcount; bfd_vma offset; } tls_ldm_got; - - /* Small local sym cache. */ - struct sym_cache sym_cache; }; /* Get the s390 ELF linker hash table from a link_info structure. */ #define elf_s390_hash_table(p) \ - (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \ - == S390_ELF_DATA ? ((struct elf_s390_link_hash_table *) ((p)->hash)) : NULL) + ((is_elf_hash_table ((p)->hash) \ + && elf_hash_table_id (elf_hash_table (p)) == S390_ELF_DATA) \ + ? (struct elf_s390_link_hash_table *) (p)->hash : NULL) #undef ELF64 #include "elf-s390-common.c" @@ -787,7 +782,6 @@ struct elf_s390_link_hash_entry *eh; eh = (struct elf_s390_link_hash_entry *) entry; - eh->dyn_relocs = NULL; eh->gotplt_refcount = 0; eh->tls_type = GOT_UNKNOWN; eh->ifunc_resolver_address = 0; @@ -803,7 +797,7 @@ elf_s390_link_hash_table_create (bfd *abfd) { struct elf_s390_link_hash_table *ret; - bfd_size_type amt = sizeof (struct elf_s390_link_hash_table); + size_t amt = sizeof (struct elf_s390_link_hash_table); ret = (struct elf_s390_link_hash_table *) bfd_zmalloc (amt); if (ret == NULL) @@ -832,37 +826,6 @@ edir = (struct elf_s390_link_hash_entry *) dir; eind = (struct elf_s390_link_hash_entry *) ind; - if (eind->dyn_relocs != NULL) - { - if (edir->dyn_relocs != NULL) - { - struct elf_dyn_relocs **pp; - struct elf_dyn_relocs *p; - - /* Add reloc counts against the indirect sym to the direct sym - list. Merge any entries against the same section. */ - for (pp = &eind->dyn_relocs; (p = *pp) != NULL; ) - { - struct elf_dyn_relocs *q; - - for (q = edir->dyn_relocs; q != NULL; q = q->next) - if (q->sec == p->sec) - { - q->pc_count += p->pc_count; - q->count += p->count; - *pp = p->next; - break; - } - if (q == NULL) - pp = &p->next; - } - *pp = edir->dyn_relocs; - } - - edir->dyn_relocs = eind->dyn_relocs; - eind->dyn_relocs = NULL; - } - if (ind->root.type == bfd_link_hash_indirect && dir->got.refcount <= 0) { @@ -965,7 +928,7 @@ if (r_symndx < symtab_hdr->sh_info) { /* A local symbol. */ - isym = bfd_sym_from_r_symndx (&htab->sym_cache, + isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache, abfd, r_symndx); if (isym == NULL) return FALSE; @@ -1306,7 +1269,7 @@ relocations we need for this symbol. */ if (h != NULL) { - head = &((struct elf_s390_link_hash_entry *) h)->dyn_relocs; + head = &h->dyn_relocs; } else { @@ -1316,7 +1279,7 @@ asection *s; void *vpp; - isym = bfd_sym_from_r_symndx (&htab->sym_cache, + isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache, abfd, r_symndx); if (isym == NULL) return FALSE; @@ -1332,7 +1295,7 @@ p = *head; if (p == NULL || p->sec != sec) { - bfd_size_type amt = sizeof *p; + size_t amt = sizeof *p; p = ((struct elf_dyn_relocs *) bfd_alloc (htab->elf.dynobj, amt)); @@ -1421,23 +1384,6 @@ h->gotplt_refcount = -1; } -/* Find dynamic relocs for H that apply to read-only sections. */ - -static asection * -readonly_dynrelocs (struct elf_link_hash_entry *h) -{ - struct elf_dyn_relocs *p; - - for (p = elf_s390_hash_entry (h)->dyn_relocs; p != NULL; p = p->next) - { - asection *s = p->sec->output_section; - - if (s != NULL && (s->flags & SEC_READONLY) != 0) - return p->sec; - } - return NULL; -} - /* Adjust a symbol defined by a dynamic object and referenced by a regular object. The current definition is in some section of the dynamic object, but we're not including those sections. We have to @@ -1460,11 +1406,9 @@ { bfd_size_type pc_count = 0, count = 0; struct elf_dyn_relocs **pp; - struct elf_s390_link_hash_entry *eh; struct elf_dyn_relocs *p; - eh = (struct elf_s390_link_hash_entry *) h; - for (pp = &eh->dyn_relocs; (p = *pp) != NULL; ) + for (pp = &h->dyn_relocs; (p = *pp) != NULL; ) { pc_count += p->pc_count; p->count -= p->pc_count; @@ -1564,7 +1508,7 @@ /* If we don't find any dynamic relocs in read-only sections, then we'll be keeping the dynamic relocs and avoiding the copy reloc. */ - if (ELIMINATE_COPY_RELOCS && !readonly_dynrelocs (h)) + if (ELIMINATE_COPY_RELOCS && !_bfd_elf_readonly_dynrelocs (h)) { h->non_got_ref = 0; return TRUE; @@ -1612,7 +1556,6 @@ { struct bfd_link_info *info; struct elf_s390_link_hash_table *htab; - struct elf_s390_link_hash_entry *eh = (struct elf_s390_link_hash_entry *)h; struct elf_dyn_relocs *p; if (h->root.type == bfd_link_hash_indirect) @@ -1743,7 +1686,7 @@ else h->got.offset = (bfd_vma) -1; - if (eh->dyn_relocs == NULL) + if (h->dyn_relocs == NULL) return TRUE; /* In the shared -Bsymbolic case, discard space allocated for @@ -1758,7 +1701,7 @@ { struct elf_dyn_relocs **pp; - for (pp = &eh->dyn_relocs; (p = *pp) != NULL; ) + for (pp = &h->dyn_relocs; (p = *pp) != NULL; ) { p->count -= p->pc_count; p->pc_count = 0; @@ -1771,12 +1714,12 @@ /* Also discard relocs on undefined weak syms with non-default visibility. */ - if (eh->dyn_relocs != NULL + if (h->dyn_relocs != NULL && h->root.type == bfd_link_hash_undefweak) { if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT || UNDEFWEAK_NO_DYNAMIC_RELOC (info, h)) - eh->dyn_relocs = NULL; + h->dyn_relocs = NULL; /* Make sure undefined weak symbols are output as a dynamic symbol in PIEs. */ @@ -1816,13 +1759,13 @@ goto keep; } - eh->dyn_relocs = NULL; + h->dyn_relocs = NULL; keep: ; } /* Finally, allocate space. */ - for (p = eh->dyn_relocs; p != NULL; p = p->next) + for (p = h->dyn_relocs; p != NULL; p = p->next) { asection *sreloc = elf_section_data (p->sec)->sreloc; @@ -1832,33 +1775,6 @@ return TRUE; } -/* Set DF_TEXTREL if we find any dynamic relocs that apply to - read-only sections. */ - -static bfd_boolean -maybe_set_textrel (struct elf_link_hash_entry *h, void *info_p) -{ - asection *sec; - - if (h->root.type == bfd_link_hash_indirect) - return TRUE; - - sec = readonly_dynrelocs (h); - if (sec != NULL) - { - struct bfd_link_info *info = (struct bfd_link_info *) info_p; - - info->flags |= DF_TEXTREL; - info->callbacks->minfo - (_("%pB: dynamic relocation against `%pT' in read-only section `%pA'\n"), - sec->owner, h->root.root.string, sec); - - /* Not an error, just cut short the traversal. */ - return FALSE; - } - return TRUE; -} - /* Set the sizes of the dynamic sections. */ static bfd_boolean @@ -2047,53 +1963,7 @@ return FALSE; } - if (htab->elf.dynamic_sections_created) - { - /* Add some entries to the .dynamic section. We fill in the - values later, in elf_s390_finish_dynamic_sections, but we - must add the entries now so that we get the correct size for - the .dynamic section. The DT_DEBUG entry is filled in by the - dynamic linker and used by the debugger. */ -#define add_dynamic_entry(TAG, VAL) \ - _bfd_elf_add_dynamic_entry (info, TAG, VAL) - - if (bfd_link_executable (info)) - { - if (!add_dynamic_entry (DT_DEBUG, 0)) - return FALSE; - } - - if (htab->elf.splt->size != 0) - { - if (!add_dynamic_entry (DT_PLTGOT, 0) - || !add_dynamic_entry (DT_PLTRELSZ, 0) - || !add_dynamic_entry (DT_PLTREL, DT_RELA) - || !add_dynamic_entry (DT_JMPREL, 0)) - return FALSE; - } - - if (relocs) - { - if (!add_dynamic_entry (DT_RELA, 0) - || !add_dynamic_entry (DT_RELASZ, 0) - || !add_dynamic_entry (DT_RELAENT, sizeof (Elf32_External_Rela))) - return FALSE; - - /* If any dynamic relocs apply to a read-only section, - then we need a DT_TEXTREL entry. */ - if ((info->flags & DF_TEXTREL) == 0) - elf_link_hash_traverse (&htab->elf, maybe_set_textrel, info); - - if ((info->flags & DF_TEXTREL) != 0) - { - if (!add_dynamic_entry (DT_TEXTREL, 0)) - return FALSE; - } - } - } -#undef add_dynamic_entry - - return TRUE; + return _bfd_elf_add_dynamic_tags (output_bfd, info, relocs); } /* Return the base VMA address which should be subtracted from real addresses @@ -3850,7 +3720,7 @@ if (local_plt[i].plt.offset != (bfd_vma) -1) { asection *sec = local_plt[i].sec; - isym = bfd_sym_from_r_symndx (&htab->sym_cache, ibfd, i); + isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache, ibfd, i); if (isym == NULL) return FALSE; diff -Nru gdb-9.1/bfd/elf32-score7.c gdb-10.2/bfd/elf32-score7.c --- gdb-9.1/bfd/elf32-score7.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-score7.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* 32-bit ELF support for S+core. - Copyright (C) 2009-2019 Free Software Foundation, Inc. + Copyright (C) 2009-2020 Free Software Foundation, Inc. Contributed by Brain.lin (brain.lin@sunplusct.com) Mei Ligang (ligang@sunnorth.com.cn) @@ -1268,7 +1268,7 @@ struct elf_link_hash_entry *h; struct bfd_link_hash_entry *bh; struct score_got_info *g; - bfd_size_type amt; + size_t amt; /* This function may be called more than once. */ s = score_elf_got_section (abfd, TRUE); @@ -2443,12 +2443,13 @@ } else if (!bfd_link_relocatable (info)) { - (*info->callbacks->undefined_symbol) - (info, h->root.root.root.string, input_bfd, - input_section, rel->r_offset, - (info->unresolved_syms_in_objects == RM_GENERATE_ERROR) + info->callbacks->undefined_symbol + (info, h->root.root.root.string, input_bfd, input_section, + rel->r_offset, + (info->unresolved_syms_in_objects == RM_DIAGNOSE + && !info->warn_unresolved_syms) || ELF_ST_VISIBILITY (h->root.other)); - relocation = 0; + relocation = 0; } } @@ -2814,7 +2815,7 @@ /* Fall through. */ case SHN_SCORE_SCOMMON: *secp = bfd_make_section_old_way (abfd, ".scommon"); - (*secp)->flags |= SEC_IS_COMMON; + (*secp)->flags |= SEC_IS_COMMON | SEC_SMALL_DATA; *valp = sym->st_size; break; } @@ -2839,7 +2840,7 @@ { /* Initialize the small common section. */ score_elf_scom_section.name = ".scommon"; - score_elf_scom_section.flags = SEC_IS_COMMON; + score_elf_scom_section.flags = SEC_IS_COMMON | SEC_SMALL_DATA; score_elf_scom_section.output_section = &score_elf_scom_section; score_elf_scom_section.symbol = &score_elf_scom_symbol; score_elf_scom_section.symbol_ptr_ptr = &score_elf_scom_symbol_ptr; @@ -3825,6 +3826,10 @@ if (!_bfd_generic_verify_endian_match (ibfd, info)) return FALSE; + /* FIXME: What should be checked when linking shared libraries? */ + if ((ibfd->flags & DYNAMIC) != 0) + return TRUE; + in_flags = elf_elfheader (ibfd)->e_flags; out_flags = elf_elfheader (obfd)->e_flags; @@ -3862,7 +3867,7 @@ s7_elf32_score_new_section_hook (bfd *abfd, asection *sec) { struct _score_elf_section_data *sdata; - bfd_size_type amt = sizeof (*sdata); + size_t amt = sizeof (*sdata); sdata = bfd_zalloc (abfd, amt); if (sdata == NULL) diff -Nru gdb-9.1/bfd/elf32-score.c gdb-10.2/bfd/elf32-score.c --- gdb-9.1/bfd/elf32-score.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-score.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* 32-bit ELF support for S+core. - Copyright (C) 2006-2019 Free Software Foundation, Inc. + Copyright (C) 2006-2020 Free Software Foundation, Inc. Contributed by Brain.lin (brain.lin@sunplusct.com) Mei Ligang (ligang@sunnorth.com.cn) @@ -1410,7 +1410,7 @@ struct elf_link_hash_entry *h; struct bfd_link_hash_entry *bh; struct score_got_info *g; - bfd_size_type amt; + size_t amt; /* This function may be called more than once. */ s = score_elf_got_section (abfd, TRUE); @@ -2669,13 +2669,14 @@ } else if (!bfd_link_relocatable (info)) { - (*info->callbacks->undefined_symbol) - (info, h->root.root.root.string, input_bfd, - input_section, rel->r_offset, - (info->unresolved_syms_in_objects == RM_GENERATE_ERROR) + info->callbacks->undefined_symbol + (info, h->root.root.root.string, input_bfd, input_section, + rel->r_offset, + (info->unresolved_syms_in_objects == RM_DIAGNOSE + && !info->warn_unresolved_syms) || ELF_ST_VISIBILITY (h->root.other)); - relocation = 0; - } + relocation = 0; + } } if (sec != NULL && discarded_section (sec)) @@ -3009,7 +3010,7 @@ /* Fall through. */ case SHN_SCORE_SCOMMON: *secp = bfd_make_section_old_way (abfd, ".scommon"); - (*secp)->flags |= SEC_IS_COMMON; + (*secp)->flags |= SEC_IS_COMMON | SEC_SMALL_DATA; *valp = sym->st_size; break; } @@ -3034,7 +3035,7 @@ { /* Initialize the small common section. */ score_elf_scom_section.name = ".scommon"; - score_elf_scom_section.flags = SEC_IS_COMMON; + score_elf_scom_section.flags = SEC_IS_COMMON | SEC_SMALL_DATA; score_elf_scom_section.output_section = &score_elf_scom_section; score_elf_scom_section.symbol = &score_elf_scom_symbol; score_elf_scom_section.symbol_ptr_ptr = &score_elf_scom_symbol_ptr; @@ -4020,6 +4021,10 @@ if (!_bfd_generic_verify_endian_match (ibfd, info)) return FALSE; + /* FIXME: What should be checked when linking shared libraries? */ + if ((ibfd->flags & DYNAMIC) != 0) + return TRUE; + in_flags = elf_elfheader (ibfd)->e_flags; out_flags = elf_elfheader (obfd)->e_flags; @@ -4057,7 +4062,7 @@ s3_elf32_score_new_section_hook (bfd *abfd, asection *sec) { struct _score_elf_section_data *sdata; - bfd_size_type amt = sizeof (*sdata); + size_t amt = sizeof (*sdata); sdata = bfd_zalloc (abfd, amt); if (sdata == NULL) @@ -4359,7 +4364,7 @@ elf32_score_link_hash_table_create (bfd *abfd) { struct elf_link_hash_table *ret; - bfd_size_type amt = sizeof (struct elf_link_hash_table); + size_t amt = sizeof (struct elf_link_hash_table); ret = (struct elf_link_hash_table *) bfd_zmalloc (amt); if (ret == NULL) diff -Nru gdb-9.1/bfd/elf32-score.h gdb-10.2/bfd/elf32-score.h --- gdb-9.1/bfd/elf32-score.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-score.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* 32-bit ELF support for S+core. - Copyright (C) 2009-2019 Free Software Foundation, Inc. + Copyright (C) 2009-2020 Free Software Foundation, Inc. Contributed by Brain.lin (brain.lin@sunplusct.com) Mei Ligang (ligang@sunnorth.com.cn) diff -Nru gdb-9.1/bfd/elf32-sh.c gdb-10.2/bfd/elf32-sh.c --- gdb-9.1/bfd/elf32-sh.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-sh.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Renesas / SuperH SH specific support for 32-bit ELF - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. Contributed by Ian Lance Taylor, Cygnus Support. This file is part of BFD, the Binary File Descriptor library. @@ -167,8 +167,7 @@ if (!bfd_malloc_and_get_section (input_bfd, symbol_section, &contents)) { - if (contents != NULL) - free (contents); + free (contents); return bfd_reloc_outofrange; } } @@ -203,8 +202,7 @@ end = start0; } - if (contents != NULL - && elf_section_data (symbol_section)->this_hdr.contents != contents) + if (elf_section_data (symbol_section)->this_hdr.contents != contents) free (contents); insn = bfd_get_16 (input_bfd, contents + addr); @@ -811,21 +809,17 @@ } } - if (internal_relocs != NULL - && elf_section_data (sec)->relocs != internal_relocs) + if (elf_section_data (sec)->relocs != internal_relocs) free (internal_relocs); return TRUE; error_return: - if (isymbuf != NULL - && symtab_hdr->contents != (unsigned char *) isymbuf) + if (symtab_hdr->contents != (unsigned char *) isymbuf) free (isymbuf); - if (contents != NULL - && elf_section_data (sec)->this_hdr.contents != contents) + if (elf_section_data (sec)->this_hdr.contents != contents) free (contents); - if (internal_relocs != NULL - && elf_section_data (sec)->relocs != internal_relocs) + if (elf_section_data (sec)->relocs != internal_relocs) free (internal_relocs); return FALSE; @@ -1195,8 +1189,7 @@ when we leave sh_coff_relax_section. */ if (!bfd_malloc_and_get_section (abfd, o, &ocontents)) { - if (ocontents != NULL) - free (ocontents); + free (ocontents); return FALSE; } @@ -1253,8 +1246,7 @@ when we leave sh_coff_relax_section. */ if (!bfd_malloc_and_get_section (abfd, o, &ocontents)) { - if (ocontents != NULL) - free (ocontents); + free (ocontents); return FALSE; } @@ -1387,8 +1379,7 @@ return TRUE; error_return: - if (labels != NULL) - free (labels); + free (labels); return FALSE; } @@ -2104,9 +2095,6 @@ { struct elf_link_hash_entry root; - /* Track dynamic relocs copied for this symbol. */ - struct elf_dyn_relocs *dyn_relocs; - bfd_signed_vma gotplt_refcount; /* A local function descriptor, for FDPIC. The refcount counts @@ -2172,8 +2160,6 @@ struct elf_link_hash_table root; /* Short-cuts to get to dynamic linker sections. */ - asection *sdynbss; - asection *srelbss; asection *sfuncdesc; asection *srelfuncdesc; asection *srofixup; @@ -2181,9 +2167,6 @@ /* The (unloaded but important) VxWorks .rela.plt.unloaded section. */ asection *srelplt2; - /* Small local sym cache. */ - struct sym_cache sym_cache; - /* A counter or offset to track a TLS got entry. */ union { @@ -2194,9 +2177,6 @@ /* The type of PLT to use. */ const struct elf_sh_plt_info *plt_info; - /* True if the target system is VxWorks. */ - bfd_boolean vxworks_p; - /* True if the target system uses FDPIC. */ bfd_boolean fdpic_p; }; @@ -2212,8 +2192,9 @@ /* Get the sh ELF linker hash table from a link_info structure. */ #define sh_elf_hash_table(p) \ - (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \ - == SH_ELF_DATA ? ((struct elf_sh_link_hash_table *) ((p)->hash)) : NULL) + ((is_elf_hash_table ((p)->hash) \ + && elf_hash_table_id (elf_hash_table (p)) == SH_ELF_DATA) \ + ? (struct elf_sh_link_hash_table *) (p)->hash : NULL) /* Create an entry in an sh ELF linker hash table. */ @@ -2240,7 +2221,6 @@ table, string)); if (ret != (struct elf_sh_link_hash_entry *) NULL) { - ret->dyn_relocs = NULL; ret->gotplt_refcount = 0; ret->funcdesc.refcount = 0; ret->abs_funcdesc_refcount = 0; @@ -2256,7 +2236,7 @@ sh_elf_link_hash_table_create (bfd *abfd) { struct elf_sh_link_hash_table *ret; - bfd_size_type amt = sizeof (struct elf_sh_link_hash_table); + size_t amt = sizeof (struct elf_sh_link_hash_table); ret = (struct elf_sh_link_hash_table *) bfd_zmalloc (amt); if (ret == (struct elf_sh_link_hash_table *) NULL) @@ -2271,8 +2251,11 @@ return NULL; } - ret->vxworks_p = vxworks_object_p (abfd); - ret->fdpic_p = fdpic_object_p (abfd); + if (fdpic_object_p (abfd)) + { + ret->root.dt_pltgot_required = TRUE; + ret->fdpic_p = TRUE; + } return &ret->root.root; } @@ -2452,7 +2435,7 @@ section into the .bss section of the final image. */ s = bfd_make_section_anyway_with_flags (abfd, ".dynbss", SEC_ALLOC | SEC_LINKER_CREATED); - htab->sdynbss = s; + htab->root.sdynbss = s; if (s == NULL) return FALSE; @@ -2473,14 +2456,14 @@ (bed->default_use_rela_p ? ".rela.bss" : ".rel.bss"), flags | SEC_READONLY); - htab->srelbss = s; + htab->root.srelbss = s; if (s == NULL || !bfd_set_section_alignment (s, ptralign)) return FALSE; } } - if (htab->vxworks_p) + if (htab->root.target_os == is_vxworks) { if (!elf_vxworks_create_dynamic_sections (abfd, info, &htab->srelplt2)) return FALSE; @@ -2489,23 +2472,6 @@ return TRUE; } -/* Find dynamic relocs for H that apply to read-only sections. */ - -static asection * -readonly_dynrelocs (struct elf_link_hash_entry *h) -{ - struct elf_dyn_relocs *p; - - for (p = sh_elf_hash_entry (h)->dyn_relocs; p != NULL; p = p->next) - { - asection *s = p->sec->output_section; - - if (s != NULL && (s->flags & SEC_READONLY) != 0) - return p->sec; - } - return NULL; -} - /* Adjust a symbol defined by a dynamic object and referenced by a regular object. The current definition is in some section of the dynamic object, but we're not including those sections. We have to @@ -2594,7 +2560,7 @@ /* If we don't find any dynamic relocs in read-only sections, then we'll be keeping the dynamic relocs and avoiding the copy reloc. */ - if (0 && !readonly_dynrelocs (h)) + if (0 && !_bfd_elf_readonly_dynrelocs (h)) { h->non_got_ref = 0; return TRUE; @@ -2610,7 +2576,7 @@ both the dynamic object and the regular object will refer to the same memory location for the variable. */ - s = htab->sdynbss; + s = htab->root.sdynbss; BFD_ASSERT (s != NULL); /* We must generate a R_SH_COPY reloc to tell the dynamic linker to @@ -2621,7 +2587,7 @@ { asection *srel; - srel = htab->srelbss; + srel = htab->root.srelbss; BFD_ASSERT (srel != NULL); srel->size += sizeof (Elf32_External_Rela); h->needs_copy = 1; @@ -2718,7 +2684,7 @@ /* We also need to make an entry in the .rel.plt section. */ htab->root.srelplt->size += sizeof (Elf32_External_Rela); - if (htab->vxworks_p && !bfd_link_pic (info)) + if (htab->root.target_os == is_vxworks && !bfd_link_pic (info)) { /* VxWorks executables have a second set of relocations for each PLT entry. They go in a separate relocation @@ -2851,7 +2817,7 @@ htab->srelfuncdesc->size += sizeof (Elf32_External_Rela); } - if (eh->dyn_relocs == NULL) + if (h->dyn_relocs == NULL) return TRUE; /* In the shared -Bsymbolic case, discard space allocated for @@ -2866,7 +2832,7 @@ { struct elf_dyn_relocs **pp; - for (pp = &eh->dyn_relocs; (p = *pp) != NULL; ) + for (pp = &h->dyn_relocs; (p = *pp) != NULL; ) { p->count -= p->pc_count; p->pc_count = 0; @@ -2877,11 +2843,11 @@ } } - if (htab->vxworks_p) + if (htab->root.target_os == is_vxworks) { struct elf_dyn_relocs **pp; - for (pp = &eh->dyn_relocs; (p = *pp) != NULL; ) + for (pp = &h->dyn_relocs; (p = *pp) != NULL; ) { if (strcmp (p->sec->output_section->name, ".tls_vars") == 0) *pp = p->next; @@ -2892,12 +2858,12 @@ /* Also discard relocs on undefined weak syms with non-default visibility. */ - if (eh->dyn_relocs != NULL + if (h->dyn_relocs != NULL && h->root.type == bfd_link_hash_undefweak) { if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT || UNDEFWEAK_NO_DYNAMIC_RELOC (info, h)) - eh->dyn_relocs = NULL; + h->dyn_relocs = NULL; /* Make sure undefined weak symbols are output as a dynamic symbol in PIEs. */ @@ -2937,13 +2903,13 @@ goto keep; } - eh->dyn_relocs = NULL; + h->dyn_relocs = NULL; keep: ; } /* Finally, allocate space. */ - for (p = eh->dyn_relocs; p != NULL; p = p->next) + for (p = h->dyn_relocs; p != NULL; p = p->next) { asection *sreloc = elf_section_data (p->sec)->sreloc; sreloc->size += p->count * sizeof (Elf32_External_Rela); @@ -2956,33 +2922,6 @@ return TRUE; } -/* Set DF_TEXTREL if we find any dynamic relocs that apply to - read-only sections. */ - -static bfd_boolean -maybe_set_textrel (struct elf_link_hash_entry *h, void *info_p) -{ - asection *sec; - - if (h->root.type == bfd_link_hash_indirect) - return TRUE; - - sec = readonly_dynrelocs (h); - if (sec != NULL) - { - struct bfd_link_info *info = (struct bfd_link_info *) info_p; - - info->flags |= DF_TEXTREL; - info->callbacks->minfo - (_("%pB: dynamic relocation against `%pT' in read-only section `%pA'\n"), - sec->owner, h->root.root.string, sec); - - /* Not an error, just cut short the traversal. */ - return FALSE; - } - return TRUE; -} - /* This function is called after all the input files have been read, and the input sections have been assigned to output sections. It's a convenient place to determine the PLT style. */ @@ -3063,7 +3002,7 @@ linker script /DISCARD/, so we'll be discarding the relocs too. */ } - else if (htab->vxworks_p + else if (htab->root.target_os == is_vxworks && strcmp (p->sec->output_section->name, ".tls_vars") == 0) { @@ -3208,7 +3147,7 @@ || s == htab->root.sgotplt || s == htab->sfuncdesc || s == htab->srofixup - || s == htab->sdynbss) + || s == htab->root.sdynbss) { /* Strip this section if we don't need it; see the comment below. */ @@ -3257,62 +3196,8 @@ return FALSE; } - if (htab->root.dynamic_sections_created) - { - /* Add some entries to the .dynamic section. We fill in the - values later, in sh_elf_finish_dynamic_sections, but we - must add the entries now so that we get the correct size for - the .dynamic section. The DT_DEBUG entry is filled in by the - dynamic linker and used by the debugger. */ -#define add_dynamic_entry(TAG, VAL) \ - _bfd_elf_add_dynamic_entry (info, TAG, VAL) - - if (bfd_link_executable (info)) - { - if (! add_dynamic_entry (DT_DEBUG, 0)) - return FALSE; - } - - if (htab->root.splt->size != 0) - { - if (! add_dynamic_entry (DT_PLTGOT, 0) - || ! add_dynamic_entry (DT_PLTRELSZ, 0) - || ! add_dynamic_entry (DT_PLTREL, DT_RELA) - || ! add_dynamic_entry (DT_JMPREL, 0)) - return FALSE; - } - else if ((elf_elfheader (output_bfd)->e_flags & EF_SH_FDPIC)) - { - if (! add_dynamic_entry (DT_PLTGOT, 0)) - return FALSE; - } - - if (relocs) - { - if (! add_dynamic_entry (DT_RELA, 0) - || ! add_dynamic_entry (DT_RELASZ, 0) - || ! add_dynamic_entry (DT_RELAENT, - sizeof (Elf32_External_Rela))) - return FALSE; - - /* If any dynamic relocs apply to a read-only section, - then we need a DT_TEXTREL entry. */ - if ((info->flags & DF_TEXTREL) == 0) - elf_link_hash_traverse (&htab->root, maybe_set_textrel, info); - - if ((info->flags & DF_TEXTREL) != 0) - { - if (! add_dynamic_entry (DT_TEXTREL, 0)) - return FALSE; - } - } - if (htab->vxworks_p - && !elf_vxworks_add_dynamic_entries (output_bfd, info)) - return FALSE; - } -#undef add_dynamic_entry - - return TRUE; + return _bfd_elf_maybe_vxworks_add_dynamic_tags (output_bfd, info, + relocs); } /* Add a dynamic relocation to the SRELOC section. */ @@ -3546,7 +3431,7 @@ /* We have to handle relocations in vxworks .tls_vars sections specially, because the dynamic loader is 'weird'. */ - is_vxworks_tls = (htab && htab->vxworks_p && bfd_link_pic (info) + is_vxworks_tls = (htab && htab->root.target_os == is_vxworks && bfd_link_pic (info) && !strcmp (input_section->output_section->name, ".tls_vars")); @@ -3563,7 +3448,6 @@ bfd_vma relocation; bfd_vma addend = (bfd_vma) 0; bfd_reloc_status_type r; - int seen_stt_datalabel = 0; bfd_vma off; enum got_type got_type; const char *symname = NULL; @@ -3626,14 +3510,6 @@ relocation = (sec->output_section->vma + sec->output_offset + sym->st_value); - /* A local symbol never has STO_SH5_ISA32, so we don't need - datalabel processing here. Make sure this does not change - without notice. */ - if ((sym->st_other & STO_SH5_ISA32) != 0) - (*info->callbacks->reloc_dangerous) - (info, - _("unexpected STO_SH5_ISA32 on local symbol is not handled"), - input_bfd, input_section, rel->r_offset); if (sec != NULL && discarded_section (sec)) /* Handled below. */ @@ -3783,14 +3659,9 @@ || sh_elf_hash_entry (h)->got_type == GOT_TLS_GD))) ; else if (sec->output_section != NULL) - relocation = ((h->root.u.def.value + relocation = (h->root.u.def.value + sec->output_section->vma - + sec->output_offset) - /* A STO_SH5_ISA32 causes a "bitor 1" to the - symbol value, unless we've seen - STT_DATALABEL on the way to it. */ - | ((h->other & STO_SH5_ISA32) != 0 - && ! seen_stt_datalabel)); + + sec->output_offset); else if (!bfd_link_relocatable (info) && (_bfd_elf_section_offset (output_bfd, info, input_section, @@ -3815,12 +3686,13 @@ && ELF_ST_VISIBILITY (h->other) == STV_DEFAULT) ; else if (!bfd_link_relocatable (info)) - (*info->callbacks->undefined_symbol) - (info, h->root.root.string, input_bfd, - input_section, rel->r_offset, - (info->unresolved_syms_in_objects == RM_GENERATE_ERROR - || ELF_ST_VISIBILITY (h->other))); - } + info->callbacks->undefined_symbol + (info, h->root.root.string, input_bfd, input_section, + rel->r_offset, + (info->unresolved_syms_in_objects == RM_DIAGNOSE + && !info->warn_unresolved_syms) + || ELF_ST_VISIBILITY (h->other)); + } if (sec != NULL && discarded_section (sec)) RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section, @@ -5270,10 +5142,8 @@ isymbuf, sections)) goto error_return; - if (sections != NULL) - free (sections); - if (isymbuf != NULL - && symtab_hdr->contents != (unsigned char *) isymbuf) + free (sections); + if (symtab_hdr->contents != (unsigned char *) isymbuf) free (isymbuf); if (elf_section_data (input_section)->relocs != internal_relocs) free (internal_relocs); @@ -5282,13 +5152,10 @@ return data; error_return: - if (sections != NULL) - free (sections); - if (isymbuf != NULL - && symtab_hdr->contents != (unsigned char *) isymbuf) + free (sections); + if (symtab_hdr->contents != (unsigned char *) isymbuf) free (isymbuf); - if (internal_relocs != NULL - && elf_section_data (input_section)->relocs != internal_relocs) + if (elf_section_data (input_section)->relocs != internal_relocs) free (internal_relocs); return NULL; } @@ -5351,36 +5218,6 @@ edir = (struct elf_sh_link_hash_entry *) dir; eind = (struct elf_sh_link_hash_entry *) ind; - if (eind->dyn_relocs != NULL) - { - if (edir->dyn_relocs != NULL) - { - struct elf_dyn_relocs **pp; - struct elf_dyn_relocs *p; - - /* Add reloc counts against the indirect sym to the direct sym - list. Merge any entries against the same section. */ - for (pp = &eind->dyn_relocs; (p = *pp) != NULL; ) - { - struct elf_dyn_relocs *q; - - for (q = edir->dyn_relocs; q != NULL; q = q->next) - if (q->sec == p->sec) - { - q->pc_count += p->pc_count; - q->count += p->count; - *pp = p->next; - break; - } - if (q == NULL) - pp = &p->next; - } - *pp = edir->dyn_relocs; - } - - edir->dyn_relocs = eind->dyn_relocs; - eind->dyn_relocs = NULL; - } edir->gotplt_refcount = eind->gotplt_refcount; eind->gotplt_refcount = 0; edir->funcdesc.refcount += eind->funcdesc.refcount; @@ -5454,15 +5291,6 @@ if (bfd_link_relocatable (info)) return TRUE; - /* Don't do anything special with non-loaded, non-alloced sections. - In particular, any relocs in such sections should not affect GOT - and PLT reference counting (ie. we don't allow them to create GOT - or PLT entries), there's no possibility or desire to optimize TLS - relocs, and there's not much point in propagating relocs to shared - libs that the dynamic linker won't relocate. */ - if ((sec->flags & SEC_ALLOC) == 0) - return TRUE; - BFD_ASSERT (is_sh_elf (abfd)); symtab_hdr = &elf_symtab_hdr (abfd); @@ -5839,7 +5667,7 @@ /* If this is a global symbol, we count the number of relocations we need for this symbol. */ if (h != NULL) - head = &((struct elf_sh_link_hash_entry *) h)->dyn_relocs; + head = &h->dyn_relocs; else { /* Track dynamic relocs needed for local syms too. */ @@ -5847,7 +5675,7 @@ void *vpp; Elf_Internal_Sym *isym; - isym = bfd_sym_from_r_symndx (&htab->sym_cache, + isym = bfd_sym_from_r_symndx (&htab->root.sym_cache, abfd, r_symndx); if (isym == NULL) return FALSE; @@ -5863,7 +5691,7 @@ p = *head; if (p == NULL || p->sec != sec) { - bfd_size_type amt = sizeof (*p); + size_t amt = sizeof (*p); p = bfd_alloc (htab->root.dynobj, amt); if (p == NULL) return FALSE; @@ -6041,6 +5869,10 @@ { bfd *obfd = info->output_bfd; + /* FIXME: What should be checked when linking shared libraries? */ + if ((ibfd->flags & DYNAMIC) != 0) + return TRUE; + if (! is_sh_elf (ibfd) || ! is_sh_elf (obfd)) return TRUE; @@ -6189,7 +6021,7 @@ (splt->contents + h->plt.offset + plt_info->symbol_fields.got_entry)); - if (htab->vxworks_p) + if (htab->root.target_os == is_vxworks) { unsigned int reachable_plts, plts_per_4k; int distance; @@ -6270,7 +6102,7 @@ loc = srelplt->contents + plt_index * sizeof (Elf32_External_Rela); bfd_elf32_swap_reloca_out (output_bfd, &rel, loc); - if (htab->vxworks_p && !bfd_link_pic (info)) + if (htab->root.target_os == is_vxworks && !bfd_link_pic (info)) { /* Create the .rela.plt.unloaded relocations for this PLT entry. Begin by pointing LOC to the first such relocation. */ @@ -6393,7 +6225,7 @@ _GLOBAL_OFFSET_TABLE_ is not absolute: it is relative to the ".got" section. */ if (h == htab->root.hdynamic - || (!htab->vxworks_p && h == htab->root.hgot)) + || (htab->root.target_os != is_vxworks && h == htab->root.hgot)) sym->st_shndx = SHN_ABS; return TRUE; @@ -6434,7 +6266,7 @@ switch (dyn.d_tag) { default: - if (htab->vxworks_p + if (htab->root.target_os == is_vxworks && elf_vxworks_finish_dynamic_entry (output_bfd, &dyn)) bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon); break; @@ -6481,7 +6313,7 @@ (splt->contents + htab->plt_info->plt0_got_fields[i])); - if (htab->vxworks_p) + if (htab->root.target_os == is_vxworks) { /* Finalize the .rela.plt.unloaded contents. */ Elf_Internal_Rela rel; @@ -6882,6 +6714,9 @@ #define ELF_MAXPAGESIZE 0x1000 #undef ELF_COMMONPAGESIZE +#undef ELF_TARGET_OS +#define ELF_TARGET_OS is_vxworks + #include "elf32-target.h" #endif /* not SH_TARGET_ALREADY_DEFINED */ diff -Nru gdb-9.1/bfd/elf32-sh-relocs.h gdb-10.2/bfd/elf32-sh-relocs.h --- gdb-9.1/bfd/elf32-sh-relocs.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-sh-relocs.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2006-2019 Free Software Foundation, Inc. +/* Copyright (C) 2006-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/elf32-sparc.c gdb-10.2/bfd/elf32-sparc.c --- gdb-9.1/bfd/elf32-sparc.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-sparc.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* SPARC-specific support for 32-bit ELF - Copyright (C) 1993-2019 Free Software Foundation, Inc. + Copyright (C) 1993-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -121,37 +121,41 @@ { switch (bfd_get_mach (abfd)) { - case bfd_mach_sparc : - case bfd_mach_sparc_sparclet : - case bfd_mach_sparc_sparclite : + case bfd_mach_sparc: + case bfd_mach_sparc_sparclet: + case bfd_mach_sparc_sparclite: break; /* nothing to do */ - case bfd_mach_sparc_v8plus : + case bfd_mach_sparc_v8plus: elf_elfheader (abfd)->e_machine = EM_SPARC32PLUS; elf_elfheader (abfd)->e_flags &=~ EF_SPARC_32PLUS_MASK; elf_elfheader (abfd)->e_flags |= EF_SPARC_32PLUS; break; - case bfd_mach_sparc_v8plusa : + case bfd_mach_sparc_v8plusa: elf_elfheader (abfd)->e_machine = EM_SPARC32PLUS; elf_elfheader (abfd)->e_flags &=~ EF_SPARC_32PLUS_MASK; elf_elfheader (abfd)->e_flags |= EF_SPARC_32PLUS | EF_SPARC_SUN_US1; break; - case bfd_mach_sparc_v8plusb : - case bfd_mach_sparc_v8plusc : - case bfd_mach_sparc_v8plusd : - case bfd_mach_sparc_v8pluse : - case bfd_mach_sparc_v8plusv : - case bfd_mach_sparc_v8plusm : - case bfd_mach_sparc_v8plusm8 : + case bfd_mach_sparc_v8plusb: + case bfd_mach_sparc_v8plusc: + case bfd_mach_sparc_v8plusd: + case bfd_mach_sparc_v8pluse: + case bfd_mach_sparc_v8plusv: + case bfd_mach_sparc_v8plusm: + case bfd_mach_sparc_v8plusm8: elf_elfheader (abfd)->e_machine = EM_SPARC32PLUS; elf_elfheader (abfd)->e_flags &=~ EF_SPARC_32PLUS_MASK; elf_elfheader (abfd)->e_flags |= EF_SPARC_32PLUS | EF_SPARC_SUN_US1 | EF_SPARC_SUN_US3; break; - case bfd_mach_sparc_sparclite_le : + case bfd_mach_sparc_sparclite_le: elf_elfheader (abfd)->e_flags |= EF_SPARC_LEDATA; break; - default : - abort (); + case 0: /* A non-sparc architecture - ignore. */ + break; + default: + _bfd_error_handler + (_("%pB: unhandled sparc machine value '%lu' detected during write processing"), + abfd, (long) bfd_get_mach (abfd)); break; } } @@ -305,25 +309,6 @@ #include "elf32-target.h" -/* A wrapper around _bfd_sparc_elf_link_hash_table_create that identifies - the target system as VxWorks. */ - -static struct bfd_link_hash_table * -elf32_sparc_vxworks_link_hash_table_create (bfd *abfd) -{ - struct bfd_link_hash_table *ret; - - ret = _bfd_sparc_elf_link_hash_table_create (abfd); - if (ret) - { - struct _bfd_sparc_elf_link_hash_table *htab; - - htab = (struct _bfd_sparc_elf_link_hash_table *) ret; - htab->is_vxworks = 1; - } - return ret; -} - /* A final_write_processing hook that does both the SPARC- and VxWorks- specific handling. */ @@ -342,9 +327,8 @@ #undef ELF_MINPAGESIZE #define ELF_MINPAGESIZE 0x1000 -#undef bfd_elf32_bfd_link_hash_table_create -#define bfd_elf32_bfd_link_hash_table_create \ - elf32_sparc_vxworks_link_hash_table_create +#undef ELF_TARGET_OS +#define ELF_TARGET_OS is_vxworks #undef elf_backend_want_got_plt #define elf_backend_want_got_plt 1 diff -Nru gdb-9.1/bfd/elf32-spu.c gdb-10.2/bfd/elf32-spu.c --- gdb-9.1/bfd/elf32-spu.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-spu.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* SPU specific support for 32-bit ELF - Copyright (C) 2006-2019 Free Software Foundation, Inc. + Copyright (C) 2006-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -371,8 +371,9 @@ }; #define spu_hash_table(p) \ - (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \ - == SPU_ELF_DATA ? ((struct spu_link_hash_table *) ((p)->hash)) : NULL) + ((is_elf_hash_table ((p)->hash) \ + && elf_hash_table_id (elf_hash_table (p)) == SPU_ELF_DATA) \ + ? (struct spu_link_hash_table *) (p)->hash : NULL) struct call_info { @@ -1598,9 +1599,7 @@ if (elf_section_data (isec)->relocs != internal_relocs) free (internal_relocs); error_ret_free_local: - if (local_syms != NULL - && (symtab_hdr->contents - != (unsigned char *) local_syms)) + if (symtab_hdr->contents != (unsigned char *) local_syms) free (local_syms); return FALSE; } @@ -2210,14 +2209,14 @@ bfd_vma *lr_store, bfd_vma *sp_adjust) { - int reg[128]; + int32_t reg[128]; memset (reg, 0, sizeof (reg)); for ( ; offset + 4 <= sec->size; offset += 4) { unsigned char buf[4]; int rt, ra; - int imm; + uint32_t imm; /* Assume no relocs on stack adjusing insns. */ if (!bfd_get_section_contents (sec->owner, sec, buf, offset, 4)) @@ -3013,13 +3012,10 @@ continue; } - if (symtab_hdr->contents != NULL) - { - /* Don't use cached symbols since the generic ELF linker - code only reads local symbols, and we need globals too. */ - free (symtab_hdr->contents); - symtab_hdr->contents = NULL; - } + /* Don't use cached symbols since the generic ELF linker + code only reads local symbols, and we need globals too. */ + free (symtab_hdr->contents); + symtab_hdr->contents = NULL; syms = bfd_elf_get_elf_syms (ibfd, symtab_hdr, symcount, 0, NULL, NULL, NULL); symtab_hdr->contents = (void *) syms; @@ -4103,7 +4099,7 @@ bfd *const *abfd1 = a; bfd *const *abfd2 = b; - return filename_cmp ((*abfd1)->filename, (*abfd2)->filename); + return filename_cmp (bfd_get_filename (*abfd1), bfd_get_filename (*abfd2)); } static unsigned int @@ -4123,9 +4119,9 @@ if (fprintf (script, " %s%c%s (%s)\n", (sec->owner->my_archive != NULL - ? sec->owner->my_archive->filename : ""), + ? bfd_get_filename (sec->owner->my_archive) : ""), info->path_separator, - sec->owner->filename, + bfd_get_filename (sec->owner), sec->name) <= 0) return -1; if (sec->segment_mark) @@ -4137,9 +4133,9 @@ sec = call_fun->sec; if (fprintf (script, " %s%c%s (%s)\n", (sec->owner->my_archive != NULL - ? sec->owner->my_archive->filename : ""), + ? bfd_get_filename (sec->owner->my_archive) : ""), info->path_separator, - sec->owner->filename, + bfd_get_filename (sec->owner), sec->name) <= 0) return -1; for (call = call_fun->call_list; call; call = call->next) @@ -4155,9 +4151,9 @@ if (sec != NULL && fprintf (script, " %s%c%s (%s)\n", (sec->owner->my_archive != NULL - ? sec->owner->my_archive->filename : ""), + ? bfd_get_filename (sec->owner->my_archive) : ""), info->path_separator, - sec->owner->filename, + bfd_get_filename (sec->owner), sec->name) <= 0) return -1; @@ -4172,9 +4168,9 @@ if (sec != NULL && fprintf (script, " %s%c%s (%s)\n", (sec->owner->my_archive != NULL - ? sec->owner->my_archive->filename : ""), + ? bfd_get_filename (sec->owner->my_archive) : ""), info->path_separator, - sec->owner->filename, + bfd_get_filename (sec->owner), sec->name) <= 0) return -1; for (call = call_fun->call_list; call; call = call->next) @@ -4335,18 +4331,19 @@ qsort (bfd_arr, bfd_count, sizeof (*bfd_arr), sort_bfds); for (i = 1; i < bfd_count; ++i) - if (filename_cmp (bfd_arr[i - 1]->filename, bfd_arr[i]->filename) == 0) + if (filename_cmp (bfd_get_filename (bfd_arr[i - 1]), + bfd_get_filename (bfd_arr[i])) == 0) { if (bfd_arr[i - 1]->my_archive == bfd_arr[i]->my_archive) { if (bfd_arr[i - 1]->my_archive && bfd_arr[i]->my_archive) /* xgettext:c-format */ info->callbacks->einfo (_("%s duplicated in %s\n"), - bfd_arr[i]->filename, - bfd_arr[i]->my_archive->filename); + bfd_get_filename (bfd_arr[i]), + bfd_get_filename (bfd_arr[i]->my_archive)); else info->callbacks->einfo (_("%s duplicated\n"), - bfd_arr[i]->filename); + bfd_get_filename (bfd_arr[i])); ok = FALSE; } } @@ -4927,13 +4924,14 @@ && !(r_type == R_SPU_PPU32 || r_type == R_SPU_PPU64)) { bfd_boolean err; - err = (info->unresolved_syms_in_objects == RM_GENERATE_ERROR - || ELF_ST_VISIBILITY (h->other) != STV_DEFAULT); - (*info->callbacks->undefined_symbol) (info, - h->root.root.string, - input_bfd, - input_section, - rel->r_offset, err); + + err = (info->unresolved_syms_in_objects == RM_DIAGNOSE + && !info->warn_unresolved_syms) + || ELF_ST_VISIBILITY (h->other) != STV_DEFAULT; + + info->callbacks->undefined_symbol + (info, h->root.root.string, input_bfd, + input_section, rel->r_offset, err); } sym_name = h->root.root.string; } diff -Nru gdb-9.1/bfd/elf32-spu.h gdb-10.2/bfd/elf32-spu.h --- gdb-9.1/bfd/elf32-spu.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-spu.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* SPU specific support for 32-bit ELF. - Copyright (C) 2006-2019 Free Software Foundation, Inc. + Copyright (C) 2006-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/elf32-tic6x.c gdb-10.2/bfd/elf32-tic6x.c --- gdb-9.1/bfd/elf32-tic6x.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-tic6x.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* 32-bit ELF support for TI C6X - Copyright (C) 2010-2019 Free Software Foundation, Inc. + Copyright (C) 2010-2020 Free Software Foundation, Inc. Contributed by Joseph Myers Bernd Schmidt @@ -46,9 +46,6 @@ /* C6X specific command line arguments. */ struct elf32_tic6x_params params; - /* Small local sym cache. */ - struct sym_cache sym_cache; - /* The output BFD, for convenience. */ bfd *obfd; @@ -61,16 +58,6 @@ #define elf32_tic6x_hash_table(p) \ ((struct elf32_tic6x_link_hash_table *) ((p)->hash)) -/* TI C6X ELF linker hash entry. */ - -struct elf32_tic6x_link_hash_entry -{ - struct elf_link_hash_entry elf; - - /* Track dynamic relocs copied for this symbol. */ - struct elf_dyn_relocs *dyn_relocs; -}; - typedef enum { DELETE_EXIDX_ENTRY, @@ -1559,51 +1546,21 @@ elf32_tic6x_tdata (abfd)->use_rela_p = use_rela_p; } -/* Create an entry in a C6X ELF linker hash table. */ - -static struct bfd_hash_entry * -elf32_tic6x_link_hash_newfunc (struct bfd_hash_entry *entry, - struct bfd_hash_table *table, - const char *string) -{ - /* Allocate the structure if it has not already been allocated by a - subclass. */ - if (entry == NULL) - { - entry = bfd_hash_allocate (table, - sizeof (struct elf32_tic6x_link_hash_entry)); - if (entry == NULL) - return entry; - } - - /* Call the allocation method of the superclass. */ - entry = _bfd_elf_link_hash_newfunc (entry, table, string); - if (entry != NULL) - { - struct elf32_tic6x_link_hash_entry *eh; - - eh = (struct elf32_tic6x_link_hash_entry *) entry; - eh->dyn_relocs = NULL; - } - - return entry; -} - /* Create a C6X ELF linker hash table. */ static struct bfd_link_hash_table * elf32_tic6x_link_hash_table_create (bfd *abfd) { struct elf32_tic6x_link_hash_table *ret; - bfd_size_type amt = sizeof (struct elf32_tic6x_link_hash_table); + size_t amt = sizeof (struct elf32_tic6x_link_hash_table); ret = bfd_zmalloc (amt); if (ret == NULL) return NULL; if (!_bfd_elf_link_hash_table_init (&ret->elf, abfd, - elf32_tic6x_link_hash_newfunc, - sizeof (struct elf32_tic6x_link_hash_entry), + _bfd_elf_link_hash_newfunc, + sizeof (struct elf_link_hash_entry), TIC6X_ELF_DATA)) { free (ret); @@ -2003,25 +1960,6 @@ return TRUE; } -/* Find dynamic relocs for H that apply to read-only sections. */ - -static asection * -readonly_dynrelocs (struct elf_link_hash_entry *h) -{ - struct elf_dyn_relocs *p; - struct elf32_tic6x_link_hash_entry *eh - = (struct elf32_tic6x_link_hash_entry *) h; - - for (p = eh->dyn_relocs; p != NULL; p = p->next) - { - asection *s = p->sec->output_section; - - if (s != NULL && (s->flags & SEC_READONLY) != 0) - return p->sec; - } - return NULL; -} - /* Adjust a symbol defined by a dynamic object and referenced by a regular object. The current definition is in some section of the dynamic object, but we're not including those sections. We have to @@ -2147,7 +2085,7 @@ if (!sec->used_by_bfd) { _tic6x_elf_section_data *sdata; - bfd_size_type amt = sizeof (*sdata); + size_t amt = sizeof (*sdata); sdata = (_tic6x_elf_section_data *) bfd_zalloc (abfd, amt); if (sdata == NULL) @@ -2788,7 +2726,7 @@ if (r_symndx < symtab_hdr->sh_info) { /* A local symbol. */ - isym = bfd_sym_from_r_symndx (&htab->sym_cache, + isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache, abfd, r_symndx); if (isym == NULL) return FALSE; @@ -2924,7 +2862,7 @@ relocations we need for this symbol. */ if (h != NULL) { - head = &((struct elf32_tic6x_link_hash_entry *) h)->dyn_relocs; + head = &h->dyn_relocs; } else { @@ -2945,7 +2883,7 @@ p = *head; if (p == NULL || p->sec != sec) { - bfd_size_type amt = sizeof *p; + size_t amt = sizeof *p; p = bfd_alloc (htab->elf.dynobj, amt); if (p == NULL) return FALSE; @@ -3014,7 +2952,7 @@ { case SHN_TIC6X_SCOMMON: *secp = bfd_make_section_old_way (abfd, ".scommon"); - (*secp)->flags |= SEC_IS_COMMON; + (*secp)->flags |= SEC_IS_COMMON | SEC_SMALL_DATA; *valp = sym->st_size; bfd_set_section_alignment (*secp, bfd_log2 (sym->st_value)); break; @@ -3036,7 +2974,7 @@ { /* Initialize the small common section. */ tic6x_elf_scom_section.name = ".scommon"; - tic6x_elf_scom_section.flags = SEC_IS_COMMON; + tic6x_elf_scom_section.flags = SEC_IS_COMMON | SEC_SMALL_DATA; tic6x_elf_scom_section.output_section = &tic6x_elf_scom_section; tic6x_elf_scom_section.symbol = &tic6x_elf_scom_symbol; tic6x_elf_scom_section.symbol_ptr_ptr = &tic6x_elf_scom_symbol_ptr; @@ -3089,13 +3027,11 @@ { struct bfd_link_info *info; struct elf32_tic6x_link_hash_table *htab; - struct elf32_tic6x_link_hash_entry *eh; struct elf_dyn_relocs *p; if (h->root.type == bfd_link_hash_indirect) return TRUE; - eh = (struct elf32_tic6x_link_hash_entry *) h; info = (struct bfd_link_info *) inf; htab = elf32_tic6x_hash_table (info); @@ -3176,7 +3112,7 @@ else h->got.offset = (bfd_vma) -1; - if (eh->dyn_relocs == NULL) + if (h->dyn_relocs == NULL) return TRUE; /* Discard relocs on undefined weak syms with non-default @@ -3189,7 +3125,7 @@ { struct elf_dyn_relocs **pp; - for (pp = &eh->dyn_relocs; (p = *pp) != NULL; ) + for (pp = &h->dyn_relocs; (p = *pp) != NULL; ) { p->count -= p->pc_count; p->pc_count = 0; @@ -3200,11 +3136,11 @@ } } - if (eh->dyn_relocs != NULL + if (h->dyn_relocs != NULL && h->root.type == bfd_link_hash_undefweak) { if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT) - eh->dyn_relocs = NULL; + h->dyn_relocs = NULL; /* Make sure undefined weak symbols are output as a dynamic symbol in PIEs. */ @@ -3218,7 +3154,7 @@ } /* Finally, allocate space. */ - for (p = eh->dyn_relocs; p != NULL; p = p->next) + for (p = h->dyn_relocs; p != NULL; p = p->next) { asection *sreloc; @@ -3231,33 +3167,6 @@ return TRUE; } -/* Set DF_TEXTREL if we find any dynamic relocs that apply to - read-only sections. */ - -static bfd_boolean -maybe_set_textrel (struct elf_link_hash_entry *h, void *info_p) -{ - asection *sec; - - if (h->root.type == bfd_link_hash_indirect) - return TRUE; - - sec = readonly_dynrelocs (h); - if (sec != NULL) - { - struct bfd_link_info *info = (struct bfd_link_info *) info_p; - - info->flags |= DF_TEXTREL; - info->callbacks->minfo - (_("%pB: dynamic relocation against `%pT' in read-only section `%pA'\n"), - sec->owner, h->root.root.string, sec); - - /* Not an error, just cut short the traversal. */ - return FALSE; - } - return TRUE; -} - /* Set the sizes of the dynamic sections. */ static bfd_boolean @@ -3440,11 +3349,8 @@ #define add_dynamic_entry(TAG, VAL) \ _bfd_elf_add_dynamic_entry (info, TAG, VAL) - if (bfd_link_executable (info)) - { - if (!add_dynamic_entry (DT_DEBUG, 0)) - return FALSE; - } + if (!_bfd_elf_add_dynamic_tags (output_bfd, info, relocs)) + return FALSE; if (!add_dynamic_entry (DT_C6000_DSBT_BASE, 0) || !add_dynamic_entry (DT_C6000_DSBT_SIZE, htab->params.dsbt_size) @@ -3452,33 +3358,6 @@ htab->params.dsbt_index)) return FALSE; - if (htab->elf.splt->size != 0) - { - if (!add_dynamic_entry (DT_PLTGOT, 0) - || !add_dynamic_entry (DT_PLTRELSZ, 0) - || !add_dynamic_entry (DT_PLTREL, DT_RELA) - || !add_dynamic_entry (DT_JMPREL, 0)) - return FALSE; - } - - if (relocs) - { - if (!add_dynamic_entry (DT_RELA, 0) - || !add_dynamic_entry (DT_RELASZ, 0) - || !add_dynamic_entry (DT_RELAENT, sizeof (Elf32_External_Rela))) - return FALSE; - - /* If any dynamic relocs apply to a read-only section, - then we need a DT_TEXTREL entry. */ - if ((info->flags & DF_TEXTREL) == 0) - elf_link_hash_traverse (&htab->elf, maybe_set_textrel, info); - - if ((info->flags & DF_TEXTREL) != 0) - { - if (!add_dynamic_entry (DT_TEXTREL, 0)) - return FALSE; - } - } } #undef add_dynamic_entry @@ -3724,6 +3603,10 @@ int i; int array_align_in, array_align_out, array_expect_in, array_expect_out; + /* FIXME: What should be checked when linking shared libraries? */ + if ((ibfd->flags & DYNAMIC) != 0) + return TRUE; + if (!elf_known_obj_attributes_proc (obfd)[0].i) { /* This is the first object. Copy the attributes. */ @@ -3862,6 +3745,9 @@ case Tag_ABI_PIC: case Tag_ABI_PID: + /* Don't transfer these tags from dynamic objects. */ + if ((ibfd->flags & DYNAMIC) != 0) + continue; if (out_attr[i].i > in_attr[i].i) out_attr[i].i = in_attr[i].i; break; @@ -4334,6 +4220,8 @@ return TRUE; } +#define elf32_bed elf32_tic6x_bed + #define TARGET_LITTLE_SYM tic6x_elf32_le_vec #define TARGET_LITTLE_NAME "elf32-tic6x-le" #define TARGET_BIG_SYM tic6x_elf32_be_vec diff -Nru gdb-9.1/bfd/elf32-tic6x.h gdb-10.2/bfd/elf32-tic6x.h --- gdb-9.1/bfd/elf32-tic6x.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-tic6x.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* 32-bit ELF support for TI C6X - Copyright (C) 2010-2019 Free Software Foundation, Inc. + Copyright (C) 2010-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/elf32-tilegx.c gdb-10.2/bfd/elf32-tilegx.c --- gdb-9.1/bfd/elf32-tilegx.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-tilegx.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* TILE-Gx-specific support for 32-bit ELF. - Copyright (C) 2011-2019 Free Software Foundation, Inc. + Copyright (C) 2011-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/elf32-tilegx.h gdb-10.2/bfd/elf32-tilegx.h --- gdb-9.1/bfd/elf32-tilegx.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-tilegx.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* TILE-Gx-specific support for 32-bit ELF. - Copyright (C) 2011-2019 Free Software Foundation, Inc. + Copyright (C) 2011-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/elf32-tilepro.c gdb-10.2/bfd/elf32-tilepro.c --- gdb-9.1/bfd/elf32-tilepro.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-tilepro.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* TILEPro-specific support for 32-bit ELF. - Copyright (C) 2011-2019 Free Software Foundation, Inc. + Copyright (C) 2011-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -685,9 +685,6 @@ { struct elf_link_hash_entry elf; - /* Track dynamic relocs copied for this symbol. */ - struct elf_dyn_relocs *dyn_relocs; - #define GOT_UNKNOWN 0 #define GOT_NORMAL 1 #define GOT_TLS_GD 2 @@ -730,19 +727,11 @@ #include "elf/common.h" #include "elf/internal.h" -struct tilepro_elf_link_hash_table -{ - struct elf_link_hash_table elf; - - /* Small local sym to section mapping cache. */ - struct sym_cache sym_cache; -}; - /* Get the Tilepro ELF linker hash table from a link_info structure. */ #define tilepro_elf_hash_table(p) \ - (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \ - == TILEPRO_ELF_DATA \ - ? ((struct tilepro_elf_link_hash_table *) ((p)->hash)) : NULL) + ((is_elf_hash_table ((p)->hash) \ + && elf_hash_table_id (elf_hash_table (p)) == TILEPRO_ELF_DATA) \ + ? (struct elf_link_hash_table *) (p)->hash : NULL) static reloc_howto_type * tilepro_reloc_type_lookup (bfd * abfd ATTRIBUTE_UNUSED, @@ -1176,7 +1165,6 @@ struct tilepro_elf_link_hash_entry *eh; eh = (struct tilepro_elf_link_hash_entry *) entry; - eh->dyn_relocs = NULL; eh->tls_type = GOT_UNKNOWN; } @@ -1188,14 +1176,14 @@ static struct bfd_link_hash_table * tilepro_elf_link_hash_table_create (bfd *abfd) { - struct tilepro_elf_link_hash_table *ret; - bfd_size_type amt = sizeof (struct tilepro_elf_link_hash_table); + struct elf_link_hash_table *ret; + size_t amt = sizeof (struct elf_link_hash_table); - ret = (struct tilepro_elf_link_hash_table *) bfd_zmalloc (amt); + ret = (struct elf_link_hash_table *) bfd_zmalloc (amt); if (ret == NULL) return NULL; - if (!_bfd_elf_link_hash_table_init (&ret->elf, abfd, link_hash_newfunc, + if (!_bfd_elf_link_hash_table_init (ret, abfd, link_hash_newfunc, sizeof (struct tilepro_elf_link_hash_entry), TILEPRO_ELF_DATA)) { @@ -1203,7 +1191,7 @@ return NULL; } - return &ret->elf.root; + return &ret->root; } /* Create the .got section. */ @@ -1296,37 +1284,6 @@ edir = (struct tilepro_elf_link_hash_entry *) dir; eind = (struct tilepro_elf_link_hash_entry *) ind; - if (eind->dyn_relocs != NULL) - { - if (edir->dyn_relocs != NULL) - { - struct elf_dyn_relocs **pp; - struct elf_dyn_relocs *p; - - /* Add reloc counts against the indirect sym to the direct sym - list. Merge any entries against the same section. */ - for (pp = &eind->dyn_relocs; (p = *pp) != NULL; ) - { - struct elf_dyn_relocs *q; - - for (q = edir->dyn_relocs; q != NULL; q = q->next) - if (q->sec == p->sec) - { - q->pc_count += p->pc_count; - q->count += p->count; - *pp = p->next; - break; - } - if (q == NULL) - pp = &p->next; - } - *pp = edir->dyn_relocs; - } - - edir->dyn_relocs = eind->dyn_relocs; - eind->dyn_relocs = NULL; - } - if (ind->root.type == bfd_link_hash_indirect && dir->got.refcount <= 0) { @@ -1437,7 +1394,7 @@ tilepro_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sec, const Elf_Internal_Rela *relocs) { - struct tilepro_elf_link_hash_table *htab; + struct elf_link_hash_table *htab; Elf_Internal_Shdr *symtab_hdr; struct elf_link_hash_entry **sym_hashes; const Elf_Internal_Rela *rel; @@ -1458,8 +1415,8 @@ BFD_ASSERT (is_tilepro_elf (abfd) || num_relocs == 0); - if (htab->elf.dynobj == NULL) - htab->elf.dynobj = abfd; + if (htab->dynobj == NULL) + htab->dynobj = abfd; rel_end = relocs + num_relocs; for (rel = relocs; rel < rel_end; rel++) @@ -1604,9 +1561,9 @@ } } - if (htab->elf.sgot == NULL) + if (htab->sgot == NULL) { - if (!tilepro_elf_create_got_section (htab->elf.dynobj, info)) + if (!tilepro_elf_create_got_section (htab->dynobj, info)) return FALSE; } break; @@ -1751,7 +1708,7 @@ if (sreloc == NULL) { sreloc = _bfd_elf_make_dynamic_reloc_section - (sec, htab->elf.dynobj, 2, abfd, /*rela?*/ TRUE); + (sec, htab->dynobj, 2, abfd, /*rela?*/ TRUE); if (sreloc == NULL) return FALSE; @@ -1760,8 +1717,7 @@ /* If this is a global symbol, we count the number of relocations we need for this symbol. */ if (h != NULL) - head = - &((struct tilepro_elf_link_hash_entry *) h)->dyn_relocs; + head = &h->dyn_relocs; else { /* Track dynamic relocs needed for local syms too. @@ -1788,9 +1744,9 @@ p = *head; if (p == NULL || p->sec != sec) { - bfd_size_type amt = sizeof *p; + size_t amt = sizeof *p; p = ((struct elf_dyn_relocs *) - bfd_alloc (htab->elf.dynobj, amt)); + bfd_alloc (htab->dynobj, amt)); if (p == NULL) return FALSE; p->next = *head; @@ -1876,23 +1832,6 @@ return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym); } -/* Find dynamic relocs for H that apply to read-only sections. */ - -static asection * -readonly_dynrelocs (struct elf_link_hash_entry *h) -{ - struct elf_dyn_relocs *p; - - for (p = tilepro_elf_hash_entry (h)->dyn_relocs; p != NULL; p = p->next) - { - asection *s = p->sec->output_section; - - if (s != NULL && (s->flags & SEC_READONLY) != 0) - return p->sec; - } - return NULL; -} - /* Adjust a symbol defined by a dynamic object and referenced by a regular object. The current definition is in some section of the dynamic object, but we're not including those sections. We have to @@ -1903,14 +1842,14 @@ tilepro_elf_adjust_dynamic_symbol (struct bfd_link_info *info, struct elf_link_hash_entry *h) { - struct tilepro_elf_link_hash_table *htab; + struct elf_link_hash_table *htab; asection *s, *srel; htab = tilepro_elf_hash_table (info); BFD_ASSERT (htab != NULL); /* Make sure we know what is going on here. */ - BFD_ASSERT (htab->elf.dynobj != NULL + BFD_ASSERT (htab->dynobj != NULL && (h->needs_plt || h->is_weakalias || (h->def_dynamic @@ -1978,7 +1917,7 @@ /* If we don't find any dynamic relocs in read-only sections, then we'll be keeping the dynamic relocs and avoiding the copy reloc. */ - if (!readonly_dynrelocs (h)) + if (!_bfd_elf_readonly_dynrelocs (h)) { h->non_got_ref = 0; return TRUE; @@ -2000,13 +1939,13 @@ .rel.bss section we are going to use. */ if ((h->root.u.def.section->flags & SEC_READONLY) != 0) { - s = htab->elf.sdynrelro; - srel = htab->elf.sreldynrelro; + s = htab->sdynrelro; + srel = htab->sreldynrelro; } else { - s = htab->elf.sdynbss; - srel = htab->elf.srelbss; + s = htab->sdynbss; + srel = htab->srelbss; } if ((h->root.u.def.section->flags & SEC_ALLOC) != 0 && h->size != 0) { @@ -2024,8 +1963,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) { struct bfd_link_info *info; - struct tilepro_elf_link_hash_table *htab; - struct tilepro_elf_link_hash_entry *eh; + struct elf_link_hash_table *htab; struct elf_dyn_relocs *p; if (h->root.type == bfd_link_hash_indirect) @@ -2035,7 +1973,7 @@ htab = tilepro_elf_hash_table (info); BFD_ASSERT (htab != NULL); - if (htab->elf.dynamic_sections_created + if (htab->dynamic_sections_created && h->plt.refcount > 0) { /* Make sure this symbol is output as a dynamic symbol. @@ -2049,7 +1987,7 @@ if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, bfd_link_pic (info), h)) { - asection *s = htab->elf.splt; + asection *s = htab->splt; /* Allocate room for the header. */ if (s->size == 0) @@ -2075,10 +2013,10 @@ s->size += PLT_ENTRY_SIZE; /* We also need to make an entry in the .got.plt section. */ - htab->elf.sgotplt->size += GOT_ENTRY_SIZE; + htab->sgotplt->size += GOT_ENTRY_SIZE; /* We also need to make an entry in the .rela.plt section. */ - htab->elf.srelplt->size += TILEPRO_ELF_RELA_BYTES; + htab->srelplt->size += TILEPRO_ELF_RELA_BYTES; } else { @@ -2114,28 +2052,27 @@ return FALSE; } - s = htab->elf.sgot; + s = htab->sgot; h->got.offset = s->size; s->size += TILEPRO_BYTES_PER_WORD; /* R_TILEPRO_IMM16_Xn_TLS_GD entries need 2 consecutive GOT slots. */ if (tls_type == GOT_TLS_GD) s->size += TILEPRO_BYTES_PER_WORD; - dyn = htab->elf.dynamic_sections_created; + dyn = htab->dynamic_sections_created; /* R_TILEPRO_IMM16_Xn_TLS_IE_xxx needs one dynamic relocation, R_TILEPRO_IMM16_Xn_TLS_GD_xxx needs two if local symbol and two if global. */ if (tls_type == GOT_TLS_GD || tls_type == GOT_TLS_IE) - htab->elf.srelgot->size += 2 * TILEPRO_ELF_RELA_BYTES; + htab->srelgot->size += 2 * TILEPRO_ELF_RELA_BYTES; else if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, bfd_link_pic (info), h)) - htab->elf.srelgot->size += TILEPRO_ELF_RELA_BYTES; + htab->srelgot->size += TILEPRO_ELF_RELA_BYTES; } else h->got.offset = (bfd_vma) -1; - eh = (struct tilepro_elf_link_hash_entry *) h; - if (eh->dyn_relocs == NULL) + if (h->dyn_relocs == NULL) return TRUE; /* In the shared -Bsymbolic case, discard space allocated for @@ -2150,7 +2087,7 @@ { struct elf_dyn_relocs **pp; - for (pp = &eh->dyn_relocs; (p = *pp) != NULL; ) + for (pp = &h->dyn_relocs; (p = *pp) != NULL; ) { p->count -= p->pc_count; p->pc_count = 0; @@ -2163,12 +2100,12 @@ /* Also discard relocs on undefined weak syms with non-default visibility. */ - if (eh->dyn_relocs != NULL + if (h->dyn_relocs != NULL && h->root.type == bfd_link_hash_undefweak) { if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT || UNDEFWEAK_NO_DYNAMIC_RELOC (info, h)) - eh->dyn_relocs = NULL; + h->dyn_relocs = NULL; /* Make sure undefined weak symbols are output as a dynamic symbol in PIEs. */ @@ -2189,7 +2126,7 @@ if (!h->non_got_ref && ((h->def_dynamic && !h->def_regular) - || (htab->elf.dynamic_sections_created + || (htab->dynamic_sections_created && (h->root.type == bfd_link_hash_undefweak || h->root.type == bfd_link_hash_undefined)))) { @@ -2208,13 +2145,13 @@ goto keep; } - eh->dyn_relocs = NULL; + h->dyn_relocs = NULL; keep: ; } /* Finally, allocate space. */ - for (p = eh->dyn_relocs; p != NULL; p = p->next) + for (p = h->dyn_relocs; p != NULL; p = p->next) { asection *sreloc = elf_section_data (p->sec)->sreloc; sreloc->size += p->count * TILEPRO_ELF_RELA_BYTES; @@ -2223,33 +2160,6 @@ return TRUE; } -/* Set DF_TEXTREL if we find any dynamic relocs that apply to - read-only sections. */ - -static bfd_boolean -maybe_set_textrel (struct elf_link_hash_entry *h, void *info_p) -{ - asection *sec; - - if (h->root.type == bfd_link_hash_indirect) - return TRUE; - - sec = readonly_dynrelocs (h); - if (sec != NULL) - { - struct bfd_link_info *info = (struct bfd_link_info *) info_p; - - info->flags |= DF_TEXTREL; - info->callbacks->minfo - (_("%pB: dynamic relocation against `%pT' in read-only section `%pA'\n"), - sec->owner, h->root.root.string, sec); - - /* Not an error, just cut short the traversal. */ - return FALSE; - } - return TRUE; -} - /* Return true if the dynamic symbol for a given section should be omitted when creating a shared library. */ @@ -2277,14 +2187,14 @@ { (void)output_bfd; - struct tilepro_elf_link_hash_table *htab; + struct elf_link_hash_table *htab; bfd *dynobj; asection *s; bfd *ibfd; htab = tilepro_elf_hash_table (info); BFD_ASSERT (htab != NULL); - dynobj = htab->elf.dynobj; + dynobj = htab->dynobj; BFD_ASSERT (dynobj != NULL); if (elf_hash_table (info)->dynamic_sections_created) @@ -2350,8 +2260,8 @@ locsymcount = symtab_hdr->sh_info; end_local_got = local_got + locsymcount; local_tls_type = _bfd_tilepro_elf_local_got_tls_type (ibfd); - s = htab->elf.sgot; - srel = htab->elf.srelgot; + s = htab->sgot; + srel = htab->srelgot; for (; local_got < end_local_got; ++local_got, ++local_tls_type) { if (*local_got > 0) @@ -2372,19 +2282,19 @@ /* Allocate global sym .plt and .got entries, and space for global sym dynamic relocs. */ - elf_link_hash_traverse (&htab->elf, allocate_dynrelocs, info); + elf_link_hash_traverse (htab, allocate_dynrelocs, info); if (elf_hash_table (info)->dynamic_sections_created) { /* If the .got section is more than 0x8000 bytes, we add 0x8000 to the value of _GLOBAL_OFFSET_TABLE_, so that 16 bit relocations have a greater chance of working. */ - if (htab->elf.sgot->size >= 0x8000 + if (htab->sgot->size >= 0x8000 && elf_hash_table (info)->hgot->root.u.def.value == 0) elf_hash_table (info)->hgot->root.u.def.value = 0x8000; } - if (htab->elf.sgotplt) + if (htab->sgotplt) { struct elf_link_hash_entry *got; got = elf_link_hash_lookup (elf_hash_table (info), @@ -2395,14 +2305,14 @@ entries and there is no refeence to _GLOBAL_OFFSET_TABLE_. */ if ((got == NULL || !got->ref_regular_nonweak) - && (htab->elf.sgotplt->size + && (htab->sgotplt->size == GOTPLT_HEADER_SIZE) - && (htab->elf.splt == NULL - || htab->elf.splt->size == 0) - && (htab->elf.sgot == NULL - || (htab->elf.sgot->size + && (htab->splt == NULL + || htab->splt->size == 0) + && (htab->sgot == NULL + || (htab->sgot->size == get_elf_backend_data (output_bfd)->got_header_size))) - htab->elf.sgotplt->size = 0; + htab->sgotplt->size = 0; } /* The check_relocs and adjust_dynamic_symbol entry points have @@ -2413,11 +2323,11 @@ if ((s->flags & SEC_LINKER_CREATED) == 0) continue; - if (s == htab->elf.splt - || s == htab->elf.sgot - || s == htab->elf.sgotplt - || s == htab->elf.sdynbss - || s == htab->elf.sdynrelro) + if (s == htab->splt + || s == htab->sgot + || s == htab->sgotplt + || s == htab->sdynbss + || s == htab->sdynrelro) { /* Strip this section if we don't need it; see the comment below. */ @@ -2463,50 +2373,7 @@ return FALSE; } - if (elf_hash_table (info)->dynamic_sections_created) - { - /* Add some entries to the .dynamic section. We fill in the - values later, in tilepro_elf_finish_dynamic_sections, but we - must add the entries now so that we get the correct size for - the .dynamic section. The DT_DEBUG entry is filled in by the - dynamic linker and used by the debugger. */ -#define add_dynamic_entry(TAG, VAL) \ - _bfd_elf_add_dynamic_entry (info, TAG, VAL) - - if (bfd_link_executable (info)) - { - if (!add_dynamic_entry (DT_DEBUG, 0)) - return FALSE; - } - - if (htab->elf.srelplt->size != 0) - { - if (!add_dynamic_entry (DT_PLTGOT, 0) - || !add_dynamic_entry (DT_PLTRELSZ, 0) - || !add_dynamic_entry (DT_PLTREL, DT_RELA) - || !add_dynamic_entry (DT_JMPREL, 0)) - return FALSE; - } - - if (!add_dynamic_entry (DT_RELA, 0) - || !add_dynamic_entry (DT_RELASZ, 0) - || !add_dynamic_entry (DT_RELAENT, TILEPRO_ELF_RELA_BYTES)) - return FALSE; - - /* If any dynamic relocs apply to a read-only section, - then we need a DT_TEXTREL entry. */ - if ((info->flags & DF_TEXTREL) == 0) - elf_link_hash_traverse (&htab->elf, maybe_set_textrel, info); - - if (info->flags & DF_TEXTREL) - { - if (!add_dynamic_entry (DT_TEXTREL, 0)) - return FALSE; - } - } -#undef add_dynamic_entry - - return TRUE; + return _bfd_elf_add_dynamic_tags (output_bfd, info, TRUE); } /* Return the base VMA address which should be subtracted from real addresses @@ -2652,7 +2519,7 @@ Elf_Internal_Sym *local_syms, asection **local_sections) { - struct tilepro_elf_link_hash_table *htab; + struct elf_link_hash_table *htab; Elf_Internal_Shdr *symtab_hdr; struct elf_link_hash_entry **sym_hashes; bfd_vma *local_got_offsets; @@ -2883,7 +2750,7 @@ case R_TILEPRO_IMM16_X1_GOT_HA: /* Relocation is to the entry for this symbol in the global offset table. */ - if (htab->elf.sgot == NULL) + if (htab->sgot == NULL) abort (); if (h != NULL) @@ -2917,7 +2784,7 @@ else { bfd_put_32 (output_bfd, relocation, - htab->elf.sgot->contents + off); + htab->sgot->contents + off); h->got.offset |= 1; } } @@ -2945,11 +2812,11 @@ /* We need to generate a R_TILEPRO_RELATIVE reloc for the dynamic linker. */ - s = htab->elf.srelgot; + s = htab->srelgot; BFD_ASSERT (s != NULL); - outrel.r_offset = (htab->elf.sgot->output_section->vma - + htab->elf.sgot->output_offset + outrel.r_offset = (htab->sgot->output_section->vma + + htab->sgot->output_offset + off); outrel.r_info = ELF32_R_INFO (0, R_TILEPRO_RELATIVE); outrel.r_addend = relocation; @@ -2958,7 +2825,7 @@ } bfd_put_32 (output_bfd, relocation, - htab->elf.sgot->contents + off); + htab->sgot->contents + off); local_got_offsets[r_symndx] |= 1; } } @@ -2970,7 +2837,7 @@ procedure linkage table. */ BFD_ASSERT (h != NULL); - if (h->plt.offset == (bfd_vma) -1 || htab->elf.splt == NULL) + if (h->plt.offset == (bfd_vma) -1 || htab->splt == NULL) { /* We didn't make a PLT entry for this symbol. This happens when statically linking PIC code, or when @@ -2978,8 +2845,8 @@ break; } - relocation = (htab->elf.splt->output_section->vma - + htab->elf.splt->output_offset + relocation = (htab->splt->output_section->vma + + htab->splt->output_offset + h->plt.offset); unresolved_reloc = FALSE; break; @@ -3118,7 +2985,7 @@ outrel.r_addend = relocation + rel->r_addend; if (is_plt) - sec = htab->elf.splt; + sec = htab->splt; if (bfd_is_abs_section (sec)) indx = 0; @@ -3141,7 +3008,7 @@ if (indx == 0) { - osec = htab->elf.text_index_section; + osec = htab->text_index_section; indx = elf_section_data (osec)->dynindx; } @@ -3267,7 +3134,7 @@ local_got_offsets[r_symndx] |= 1; } - if (htab->elf.sgot == NULL) + if (htab->sgot == NULL) abort (); if ((off & 1) != 0) @@ -3278,13 +3145,13 @@ int indx = 0; bfd_boolean need_relocs = FALSE; - if (htab->elf.srelgot == NULL) + if (htab->srelgot == NULL) abort (); if (h != NULL) { bfd_boolean dyn; - dyn = htab->elf.dynamic_sections_created; + dyn = htab->dynamic_sections_created; if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, bfd_link_pic (info), @@ -3315,18 +3182,18 @@ case R_TILEPRO_IMM16_X0_TLS_IE_HA: case R_TILEPRO_IMM16_X1_TLS_IE_HA: if (need_relocs) { - bfd_put_32 (output_bfd, 0, htab->elf.sgot->contents + off); - outrel.r_offset = (htab->elf.sgot->output_section->vma - + htab->elf.sgot->output_offset + off); + bfd_put_32 (output_bfd, 0, htab->sgot->contents + off); + outrel.r_offset = (htab->sgot->output_section->vma + + htab->sgot->output_offset + off); outrel.r_addend = 0; if (indx == 0) outrel.r_addend = relocation - dtpoff_base (info); outrel.r_info = ELF32_R_INFO (indx, R_TILEPRO_TLS_TPOFF32); - tilepro_elf_append_rela_32 (output_bfd, htab->elf.srelgot, + tilepro_elf_append_rela_32 (output_bfd, htab->srelgot, &outrel); } else { bfd_put_32 (output_bfd, tpoff (info, relocation), - htab->elf.sgot->contents + off); + htab->sgot->contents + off); } break; @@ -3339,31 +3206,31 @@ case R_TILEPRO_IMM16_X0_TLS_GD_HA: case R_TILEPRO_IMM16_X1_TLS_GD_HA: if (need_relocs) { - outrel.r_offset = (htab->elf.sgot->output_section->vma - + htab->elf.sgot->output_offset + off); + outrel.r_offset = (htab->sgot->output_section->vma + + htab->sgot->output_offset + off); outrel.r_addend = 0; outrel.r_info = ELF32_R_INFO (indx, R_TILEPRO_TLS_DTPMOD32); - bfd_put_32 (output_bfd, 0, htab->elf.sgot->contents + off); - tilepro_elf_append_rela_32 (output_bfd, htab->elf.srelgot, + bfd_put_32 (output_bfd, 0, htab->sgot->contents + off); + tilepro_elf_append_rela_32 (output_bfd, htab->srelgot, &outrel); if (indx == 0) { BFD_ASSERT (! unresolved_reloc); bfd_put_32 (output_bfd, relocation - dtpoff_base (info), - (htab->elf.sgot->contents + off + + (htab->sgot->contents + off + TILEPRO_BYTES_PER_WORD)); } else { bfd_put_32 (output_bfd, 0, - (htab->elf.sgot->contents + off + + (htab->sgot->contents + off + TILEPRO_BYTES_PER_WORD)); outrel.r_info = ELF32_R_INFO (indx, R_TILEPRO_TLS_DTPOFF32); outrel.r_offset += TILEPRO_BYTES_PER_WORD; tilepro_elf_append_rela_32 (output_bfd, - htab->elf.srelgot, &outrel); + htab->srelgot, &outrel); } } @@ -3374,9 +3241,9 @@ symbol binding locally. Mark it as belonging to module 1, the executable. */ bfd_put_32 (output_bfd, 1, - htab->elf.sgot->contents + off ); + htab->sgot->contents + off ); bfd_put_32 (output_bfd, relocation - dtpoff_base (info), - htab->elf.sgot->contents + off + + htab->sgot->contents + off + TILEPRO_BYTES_PER_WORD); } break; @@ -3536,7 +3403,7 @@ struct elf_link_hash_entry *h, Elf_Internal_Sym *sym) { - struct tilepro_elf_link_hash_table *htab; + struct elf_link_hash_table *htab; htab = tilepro_elf_hash_table (info); BFD_ASSERT (htab != NULL); @@ -3556,9 +3423,9 @@ BFD_ASSERT (h->dynindx != -1); - splt = htab->elf.splt; - srela = htab->elf.srelplt; - sgotplt = htab->elf.sgotplt; + splt = htab->splt; + srela = htab->srelplt; + sgotplt = htab->sgotplt; if (splt == NULL || srela == NULL) abort (); @@ -3606,8 +3473,8 @@ /* This symbol has an entry in the GOT. Set it up. */ - sgot = htab->elf.sgot; - srela = htab->elf.srelgot; + sgot = htab->sgot; + srela = htab->srelgot; BFD_ASSERT (sgot != NULL && srela != NULL); rela.r_offset = (sgot->output_section->vma @@ -3653,16 +3520,16 @@ + h->root.u.def.section->output_offset); rela.r_info = ELF32_R_INFO (h->dynindx, R_TILEPRO_COPY); rela.r_addend = 0; - if (h->root.u.def.section == htab->elf.sdynrelro) - s = htab->elf.sreldynrelro; + if (h->root.u.def.section == htab->sdynrelro) + s = htab->sreldynrelro; else - s = htab->elf.srelbss; + s = htab->srelbss; tilepro_elf_append_rela_32 (output_bfd, s, &rela); } /* Mark some specially defined symbols as absolute. */ - if (h == htab->elf.hdynamic - || (h == htab->elf.hgot || h == htab->elf.hplt)) + if (h == htab->hdynamic + || (h == htab->hgot || h == htab->hplt)) sym->st_shndx = SHN_ABS; return TRUE; @@ -3676,7 +3543,7 @@ asection *splt ATTRIBUTE_UNUSED) { Elf32_External_Dyn *dyncon, *dynconend; - struct tilepro_elf_link_hash_table *htab; + struct elf_link_hash_table *htab; htab = tilepro_elf_hash_table (info); BFD_ASSERT (htab != NULL); @@ -3692,15 +3559,15 @@ switch (dyn.d_tag) { case DT_PLTGOT: - s = htab->elf.sgotplt; + s = htab->sgotplt; dyn.d_un.d_ptr = s->output_section->vma + s->output_offset; break; case DT_JMPREL: - s = htab->elf.srelplt; + s = htab->srelplt; dyn.d_un.d_ptr = s->output_section->vma + s->output_offset; break; case DT_PLTRELSZ: - s = htab->elf.srelplt; + s = htab->srelplt; dyn.d_un.d_val = s->size; break; default: @@ -3718,11 +3585,11 @@ { bfd *dynobj; asection *sdyn; - struct tilepro_elf_link_hash_table *htab; + struct elf_link_hash_table *htab; htab = tilepro_elf_hash_table (info); BFD_ASSERT (htab != NULL); - dynobj = htab->elf.dynobj; + dynobj = htab->dynobj; sdyn = bfd_get_linker_section (dynobj, ".dynamic"); @@ -3731,7 +3598,7 @@ asection *splt; bfd_boolean ret; - splt = htab->elf.splt; + splt = htab->splt; BFD_ASSERT (splt != NULL && sdyn != NULL); ret = tilepro_finish_dyn (output_bfd, info, dynobj, sdyn, splt); @@ -3752,42 +3619,42 @@ = PLT_ENTRY_SIZE; } - if (htab->elf.sgotplt) + if (htab->sgotplt) { - if (bfd_is_abs_section (htab->elf.sgotplt->output_section)) + if (bfd_is_abs_section (htab->sgotplt->output_section)) { _bfd_error_handler - (_("discarded output section: `%pA'"), htab->elf.sgotplt); + (_("discarded output section: `%pA'"), htab->sgotplt); return FALSE; } - if (htab->elf.sgotplt->size > 0) + if (htab->sgotplt->size > 0) { /* Write the first two entries in .got.plt, needed for the dynamic linker. */ bfd_put_32 (output_bfd, (bfd_vma) -1, - htab->elf.sgotplt->contents); + htab->sgotplt->contents); bfd_put_32 (output_bfd, (bfd_vma) 0, - htab->elf.sgotplt->contents + GOT_ENTRY_SIZE); + htab->sgotplt->contents + GOT_ENTRY_SIZE); } - elf_section_data (htab->elf.sgotplt->output_section)->this_hdr.sh_entsize + elf_section_data (htab->sgotplt->output_section)->this_hdr.sh_entsize = GOT_ENTRY_SIZE; } - if (htab->elf.sgot) + if (htab->sgot) { - if (htab->elf.sgot->size > 0) + if (htab->sgot->size > 0) { /* Set the first entry in the global offset table to the address of the dynamic section. */ bfd_vma val = (sdyn ? sdyn->output_section->vma + sdyn->output_offset : 0); - bfd_put_32 (output_bfd, val, htab->elf.sgot->contents); + bfd_put_32 (output_bfd, val, htab->sgot->contents); } - elf_section_data (htab->elf.sgot->output_section)->this_hdr.sh_entsize + elf_section_data (htab->sgot->output_section)->this_hdr.sh_entsize = GOT_ENTRY_SIZE; } diff -Nru gdb-9.1/bfd/elf32-tilepro.h gdb-10.2/bfd/elf32-tilepro.h --- gdb-9.1/bfd/elf32-tilepro.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-tilepro.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* TILEPro-specific support for 32-bit ELF. - Copyright (C) 2011-2019 Free Software Foundation, Inc. + Copyright (C) 2011-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/elf32-v850.c gdb-10.2/bfd/elf32-v850.c --- gdb-9.1/bfd/elf32-v850.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-v850.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* V850-specific support for 32-bit ELF - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -183,7 +183,7 @@ asection * section; section = h->root.u.c.p->section = bfd_make_section_old_way (abfd, common); - section->flags |= SEC_IS_COMMON; + section->flags |= SEC_IS_COMMON | SEC_SMALL_DATA; } #ifdef DEBUG @@ -230,7 +230,7 @@ remember_hi16s_reloc (bfd *abfd, bfd_vma addend, bfd_byte *address) { hi16s_location * entry = NULL; - bfd_size_type amt = sizeof (* free_hi16s); + size_t amt = sizeof (* free_hi16s); /* Find a free structure. */ if (free_hi16s == NULL) @@ -3001,7 +3001,8 @@ { /* Initialize the small common section. */ v850_elf_scom_section.name = ".scommon"; - v850_elf_scom_section.flags = SEC_IS_COMMON | SEC_ALLOC | SEC_DATA; + v850_elf_scom_section.flags + = SEC_IS_COMMON | SEC_SMALL_DATA | SEC_ALLOC | SEC_DATA; v850_elf_scom_section.output_section = & v850_elf_scom_section; v850_elf_scom_section.symbol = & v850_elf_scom_symbol; v850_elf_scom_section.symbol_ptr_ptr = & v850_elf_scom_symbol_ptr; @@ -3019,7 +3020,7 @@ { /* Initialize the tcommon section. */ v850_elf_tcom_section.name = ".tcommon"; - v850_elf_tcom_section.flags = SEC_IS_COMMON; + v850_elf_tcom_section.flags = SEC_IS_COMMON | SEC_SMALL_DATA; v850_elf_tcom_section.output_section = & v850_elf_tcom_section; v850_elf_tcom_section.symbol = & v850_elf_tcom_symbol; v850_elf_tcom_section.symbol_ptr_ptr = & v850_elf_tcom_symbol_ptr; @@ -3037,7 +3038,7 @@ { /* Initialize the zcommon section. */ v850_elf_zcom_section.name = ".zcommon"; - v850_elf_zcom_section.flags = SEC_IS_COMMON; + v850_elf_zcom_section.flags = SEC_IS_COMMON | SEC_SMALL_DATA; v850_elf_zcom_section.output_section = & v850_elf_zcom_section; v850_elf_zcom_section.symbol = & v850_elf_zcom_symbol; v850_elf_zcom_section.symbol_ptr_ptr = & v850_elf_zcom_symbol_ptr; @@ -3095,19 +3096,19 @@ { case SHN_V850_SCOMMON: *secp = bfd_make_section_old_way (abfd, ".scommon"); - (*secp)->flags |= SEC_IS_COMMON; + (*secp)->flags |= SEC_IS_COMMON | SEC_SMALL_DATA; *valp = sym->st_size; break; case SHN_V850_TCOMMON: *secp = bfd_make_section_old_way (abfd, ".tcommon"); - (*secp)->flags |= SEC_IS_COMMON; + (*secp)->flags |= SEC_IS_COMMON | SEC_SMALL_DATA; *valp = sym->st_size; break; case SHN_V850_ZCOMMON: *secp = bfd_make_section_old_way (abfd, ".zcommon"); - (*secp)->flags |= SEC_IS_COMMON; + (*secp)->flags |= SEC_IS_COMMON | SEC_SMALL_DATA; *valp = sym->st_size; break; } @@ -3151,6 +3152,8 @@ const char *name, int shindex) { + flagword flags; + /* There ought to be a place to keep ELF backend specific flags, but at the moment there isn't one. We just keep track of the sections by their name, instead. */ @@ -3158,18 +3161,21 @@ if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex)) return FALSE; + flags = 0; switch (hdr->sh_type) { case SHT_V850_SCOMMON: case SHT_V850_TCOMMON: case SHT_V850_ZCOMMON: - if (!bfd_set_section_flags (hdr->bfd_section, - (bfd_section_flags (hdr->bfd_section) - | SEC_IS_COMMON))) - return FALSE; + flags = SEC_IS_COMMON; } - return TRUE; + if ((hdr->sh_flags & SHF_V850_GPREL) != 0) + flags |= SEC_SMALL_DATA; + + return (flags == 0 + || bfd_set_section_flags (hdr->bfd_section, + hdr->bfd_section->flags | flags)); } /* Set the correct type for a V850 ELF section. We do this @@ -3837,7 +3843,7 @@ if (no_match < 0 && ((insn[2] & JMP_R_MASK) != JMP_R || MOVEA_R2 (insn[1]) != JMP_R1 (insn[2]))) - no_match = 4; + no_match = 2; } else { @@ -4088,16 +4094,13 @@ } finish: - if (internal_relocs != NULL - && elf_section_data (sec)->relocs != internal_relocs) + if (elf_section_data (sec)->relocs != internal_relocs) free (internal_relocs); - if (contents != NULL - && elf_section_data (sec)->this_hdr.contents != (unsigned char *) contents) + if (elf_section_data (sec)->this_hdr.contents != (unsigned char *) contents) free (contents); - if (isymbuf != NULL - && symtab_hdr->contents != (bfd_byte *) isymbuf) + if (symtab_hdr->contents != (bfd_byte *) isymbuf) free (isymbuf); return result; diff -Nru gdb-9.1/bfd/elf32-v850.h gdb-10.2/bfd/elf32-v850.h --- gdb-9.1/bfd/elf32-v850.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-v850.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* V850 Note manipulation routines. - Copyright (C) 2019 Free Software Foundation, Inc. + Copyright (C) 2019-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/elf32-vax.c gdb-10.2/bfd/elf32-vax.c --- gdb-9.1/bfd/elf32-vax.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-vax.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* VAX series support for 32-bit ELF - Copyright (C) 1993-2019 Free Software Foundation, Inc. + Copyright (C) 1993-2020 Free Software Foundation, Inc. Contributed by Matt Thomas . This file is part of BFD, the Binary File Descriptor library. @@ -470,7 +470,7 @@ elf_vax_link_hash_table_create (bfd *abfd) { struct elf_link_hash_table *ret; - bfd_size_type amt = sizeof (struct elf_link_hash_table); + size_t amt = sizeof (struct elf_link_hash_table); ret = bfd_zmalloc (amt); if (ret == NULL) @@ -712,6 +712,11 @@ h->plt.refcount++; } + /* Non-GOT reference may need a copy reloc in executable or + a dynamic reloc in shared library. */ + if (h != NULL) + h->non_got_ref = 1; + /* If we are creating a shared library, we need to copy the reloc into the shared library. */ if (bfd_link_pic (info) @@ -929,6 +934,11 @@ if (bfd_link_pic (info)) return TRUE; + /* If there are no references to this symbol that do not use the + GOT relocation, we don't need to generate a copy reloc. */ + if (!h->non_got_ref) + return TRUE; + /* We must allocate the symbol in our .dynbss section, which will become part of the .bss section of the executable. There will be an entry for this symbol in the .dynsym section. The dynamic @@ -1019,9 +1029,7 @@ { bfd *dynobj; asection *s; - bfd_boolean plt; bfd_boolean relocs; - bfd_boolean reltext; dynobj = elf_hash_table (info)->dynobj; BFD_ASSERT (dynobj != NULL); @@ -1057,9 +1065,7 @@ /* The check_relocs and adjust_dynamic_symbol entry points have determined the sizes of the various dynamic sections. Allocate memory for them. */ - plt = FALSE; relocs = FALSE; - reltext = FALSE; for (s = dynobj->sections; s != NULL; s = s->next) { const char *name; @@ -1074,33 +1080,14 @@ if (strcmp (name, ".plt") == 0) { /* Remember whether there is a PLT. */ - plt = s->size != 0; + ; } else if (CONST_STRNEQ (name, ".rela")) { if (s->size != 0) { - asection *target; - - /* Remember whether there are any reloc sections other - than .rela.plt. */ if (strcmp (name, ".rela.plt") != 0) - { - const char *outname; - - relocs = TRUE; - - /* If this relocation section applies to a read only - section, then we probably need a DT_TEXTREL - entry. .rela.plt is actually associated with - .got.plt, which is never readonly. */ - outname = bfd_section_name (s->output_section); - target = bfd_get_section_by_name (output_bfd, outname + 5); - if (target != NULL - && (target->flags & SEC_READONLY) != 0 - && (target->flags & SEC_ALLOC) != 0) - reltext = TRUE; - } + relocs = TRUE; /* We use the reloc_count field as a counter if we need to copy relocs into the output file. */ @@ -1138,48 +1125,7 @@ return FALSE; } - if (elf_hash_table (info)->dynamic_sections_created) - { - /* Add some entries to the .dynamic section. We fill in the - values later, in elf_vax_finish_dynamic_sections, but we - must add the entries now so that we get the correct size for - the .dynamic section. The DT_DEBUG entry is filled in by the - dynamic linker and used by the debugger. */ -#define add_dynamic_entry(TAG, VAL) \ - _bfd_elf_add_dynamic_entry (info, TAG, VAL) - - if (!bfd_link_pic (info)) - { - if (!add_dynamic_entry (DT_DEBUG, 0)) - return FALSE; - } - - if (plt) - { - if (!add_dynamic_entry (DT_PLTGOT, 0) - || !add_dynamic_entry (DT_PLTRELSZ, 0) - || !add_dynamic_entry (DT_PLTREL, DT_RELA) - || !add_dynamic_entry (DT_JMPREL, 0)) - return FALSE; - } - - if (relocs) - { - if (!add_dynamic_entry (DT_RELA, 0) - || !add_dynamic_entry (DT_RELASZ, 0) - || !add_dynamic_entry (DT_RELAENT, sizeof (Elf32_External_Rela))) - return FALSE; - } - - if (reltext || (info->flags & DF_TEXTREL) != 0) - { - if (!add_dynamic_entry (DT_TEXTREL, 0)) - return FALSE; - } - } -#undef add_dynamic_entry - - return TRUE; + return _bfd_elf_add_dynamic_tags (output_bfd, info, relocs); } /* This function is called via elf_vax_link_hash_traverse if we are diff -Nru gdb-9.1/bfd/elf32-visium.c gdb-10.2/bfd/elf32-visium.c --- gdb-9.1/bfd/elf32-visium.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-visium.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Visium-specific support for 32-bit ELF. - Copyright (C) 2003-2019 Free Software Foundation, Inc. + Copyright (C) 2003-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/elf32-wasm32.c gdb-10.2/bfd/elf32-wasm32.c --- gdb-9.1/bfd/elf32-wasm32.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-wasm32.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* 32-bit ELF for the WebAssembly target - Copyright (C) 2017-2019 Free Software Foundation, Inc. + Copyright (C) 2017-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/elf32-xc16x.c gdb-10.2/bfd/elf32-xc16x.c --- gdb-9.1/bfd/elf32-xc16x.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-xc16x.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Infineon XC16X-specific support for 16-bit ELF. - Copyright (C) 2006-2019 Free Software Foundation, Inc. + Copyright (C) 2006-2020 Free Software Foundation, Inc. Contributed by KPIT Cummins Infosystems This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/elf32-xgate.c gdb-10.2/bfd/elf32-xgate.c --- gdb-9.1/bfd/elf32-xgate.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-xgate.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Freescale XGATE-specific support for 32-bit ELF - Copyright (C) 2010-2019 Free Software Foundation, Inc. + Copyright (C) 2010-2020 Free Software Foundation, Inc. Contributed by Sean Keys(skeys@ipdatasys.com) This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/elf32-xstormy16.c gdb-10.2/bfd/elf32-xstormy16.c --- gdb-9.1/bfd/elf32-xstormy16.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-xstormy16.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Xstormy16-specific support for 32-bit ELF. - Copyright (C) 2000-2019 Free Software Foundation, Inc. + Copyright (C) 2000-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -588,7 +588,8 @@ /* Assume nothing changes. */ *again = FALSE; - if (bfd_link_relocatable (info)) + if (bfd_link_relocatable (info) + || !is_elf_hash_table (info->hash)) return TRUE; /* We only relax the .plt section at the moment. */ diff -Nru gdb-9.1/bfd/elf32-xtensa.c gdb-10.2/bfd/elf32-xtensa.c --- gdb-9.1/bfd/elf32-xtensa.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf32-xtensa.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Xtensa-specific support for 32-bit ELF. - Copyright (C) 2003-2019 Free Software Foundation, Inc. + Copyright (C) 2003-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -37,6 +37,22 @@ #define XTENSA_NO_NOP_REMOVAL 0 +#ifndef XSHAL_ABI +#define XSHAL_ABI 0 +#endif + +#ifndef XTHAL_ABI_UNDEFINED +#define XTHAL_ABI_UNDEFINED -1 +#endif + +#ifndef XTHAL_ABI_WINDOWED +#define XTHAL_ABI_WINDOWED 0 +#endif + +#ifndef XTHAL_ABI_CALL0 +#define XTHAL_ABI_CALL0 1 +#endif + /* Local helper functions. */ static bfd_boolean add_extra_plt_sections (struct bfd_link_info *, int); @@ -164,6 +180,10 @@ bfd_boolean elf32xtensa_separate_props = FALSE; +/* Xtensa ABI. It affects PLT entry code. */ + +int elf32xtensa_abi = XTHAL_ABI_UNDEFINED; + /* Rename one of the generic section flags to better document how it is used here. */ /* Whether relocations have been processed. */ @@ -325,6 +345,20 @@ HOWTO (R_XTENSA_TLS_CALL, 0, 0, 0, FALSE, 0, complain_overflow_dont, bfd_elf_xtensa_reloc, "R_XTENSA_TLS_CALL", FALSE, 0, 0, FALSE), + + HOWTO (R_XTENSA_PDIFF8, 0, 0, 8, FALSE, 0, complain_overflow_bitfield, + bfd_elf_xtensa_reloc, "R_XTENSA_PDIFF8", FALSE, 0, 0xff, FALSE), + HOWTO (R_XTENSA_PDIFF16, 0, 1, 16, FALSE, 0, complain_overflow_bitfield, + bfd_elf_xtensa_reloc, "R_XTENSA_PDIFF16", FALSE, 0, 0xffff, FALSE), + HOWTO (R_XTENSA_PDIFF32, 0, 2, 32, FALSE, 0, complain_overflow_bitfield, + bfd_elf_xtensa_reloc, "R_XTENSA_PDIFF32", FALSE, 0, 0xffffffff, FALSE), + + HOWTO (R_XTENSA_NDIFF8, 0, 0, 8, FALSE, 0, complain_overflow_bitfield, + bfd_elf_xtensa_reloc, "R_XTENSA_NDIFF8", FALSE, 0, 0xff, FALSE), + HOWTO (R_XTENSA_NDIFF16, 0, 1, 16, FALSE, 0, complain_overflow_bitfield, + bfd_elf_xtensa_reloc, "R_XTENSA_NDIFF16", FALSE, 0, 0xffff, FALSE), + HOWTO (R_XTENSA_NDIFF32, 0, 2, 32, FALSE, 0, complain_overflow_bitfield, + bfd_elf_xtensa_reloc, "R_XTENSA_NDIFF32", FALSE, 0, 0xffffffff, FALSE), }; #if DEBUG_GEN_RELOC @@ -364,6 +398,30 @@ TRACE ("BFD_RELOC_XTENSA_DIFF32"); return &elf_howto_table[(unsigned) R_XTENSA_DIFF32 ]; + case BFD_RELOC_XTENSA_PDIFF8: + TRACE ("BFD_RELOC_XTENSA_PDIFF8"); + return &elf_howto_table[(unsigned) R_XTENSA_PDIFF8 ]; + + case BFD_RELOC_XTENSA_PDIFF16: + TRACE ("BFD_RELOC_XTENSA_PDIFF16"); + return &elf_howto_table[(unsigned) R_XTENSA_PDIFF16 ]; + + case BFD_RELOC_XTENSA_PDIFF32: + TRACE ("BFD_RELOC_XTENSA_PDIFF32"); + return &elf_howto_table[(unsigned) R_XTENSA_PDIFF32 ]; + + case BFD_RELOC_XTENSA_NDIFF8: + TRACE ("BFD_RELOC_XTENSA_NDIFF8"); + return &elf_howto_table[(unsigned) R_XTENSA_NDIFF8 ]; + + case BFD_RELOC_XTENSA_NDIFF16: + TRACE ("BFD_RELOC_XTENSA_NDIFF16"); + return &elf_howto_table[(unsigned) R_XTENSA_NDIFF16 ]; + + case BFD_RELOC_XTENSA_NDIFF32: + TRACE ("BFD_RELOC_XTENSA_NDIFF32"); + return &elf_howto_table[(unsigned) R_XTENSA_NDIFF32 ]; + case BFD_RELOC_XTENSA_RTLD: TRACE ("BFD_RELOC_XTENSA_RTLD"); return &elf_howto_table[(unsigned) R_XTENSA_RTLD ]; @@ -647,8 +705,9 @@ /* Get the Xtensa ELF linker hash table from a link_info structure. */ #define elf_xtensa_hash_table(p) \ - (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \ - == XTENSA_ELF_DATA ? ((struct elf_xtensa_link_hash_table *) ((p)->hash)) : NULL) + ((is_elf_hash_table ((p)->hash) \ + && elf_hash_table_id (elf_hash_table (p)) == XTENSA_ELF_DATA) \ + ? (struct elf_xtensa_link_hash_table *) (p)->hash : NULL) /* Create an entry in an Xtensa ELF linker hash table. */ @@ -686,7 +745,7 @@ { struct elf_link_hash_entry *tlsbase; struct elf_xtensa_link_hash_table *ret; - bfd_size_type amt = sizeof (struct elf_xtensa_link_hash_table); + size_t amt = sizeof (struct elf_xtensa_link_hash_table); ret = bfd_zmalloc (amt); if (ret == NULL) @@ -708,6 +767,7 @@ tlsbase->root.type = bfd_link_hash_new; tlsbase->root.u.undef.abfd = NULL; tlsbase->non_elf = 0; + ret->elf.dt_pltgot_required = TRUE; ret->tlsbase = elf_xtensa_hash_entry (tlsbase); ret->tlsbase->tls_type = GOT_UNKNOWN; @@ -1001,7 +1061,7 @@ const Elf_Internal_Rela *rel; const Elf_Internal_Rela *rel_end; - if (bfd_link_relocatable (info) || (sec->flags & SEC_ALLOC) == 0) + if (bfd_link_relocatable (info)) return TRUE; BFD_ASSERT (is_xtensa_elf (abfd)); @@ -1709,30 +1769,11 @@ #define add_dynamic_entry(TAG, VAL) \ _bfd_elf_add_dynamic_entry (info, TAG, VAL) - if (bfd_link_executable (info)) - { - if (!add_dynamic_entry (DT_DEBUG, 0)) - return FALSE; - } - - if (relplt) - { - if (!add_dynamic_entry (DT_PLTRELSZ, 0) - || !add_dynamic_entry (DT_PLTREL, DT_RELA) - || !add_dynamic_entry (DT_JMPREL, 0)) - return FALSE; - } - - if (relgot) - { - if (!add_dynamic_entry (DT_RELA, 0) - || !add_dynamic_entry (DT_RELASZ, 0) - || !add_dynamic_entry (DT_RELAENT, sizeof (Elf32_External_Rela))) - return FALSE; - } + if (!_bfd_elf_add_dynamic_tags (output_bfd, info, + relplt || relgot)) + return FALSE; - if (!add_dynamic_entry (DT_PLTGOT, 0) - || !add_dynamic_entry (DT_XTENSA_GOT_LOC_OFF, 0) + if (!add_dynamic_entry (DT_XTENSA_GOT_LOC_OFF, 0) || !add_dynamic_entry (DT_XTENSA_GOT_LOC_SZ, 0)) return FALSE; } @@ -1851,6 +1892,12 @@ case R_XTENSA_DIFF8: case R_XTENSA_DIFF16: case R_XTENSA_DIFF32: + case R_XTENSA_PDIFF8: + case R_XTENSA_PDIFF16: + case R_XTENSA_PDIFF32: + case R_XTENSA_NDIFF8: + case R_XTENSA_NDIFF16: + case R_XTENSA_NDIFF32: case R_XTENSA_TLS_FUNC: case R_XTENSA_TLS_ARG: case R_XTENSA_TLS_CALL: @@ -2203,6 +2250,13 @@ return flag; } +int xtensa_abi_choice (void) +{ + if (elf32xtensa_abi == XTHAL_ABI_UNDEFINED) + return XSHAL_ABI; + else + return elf32xtensa_abi; +} /* Set up an entry in the procedure linkage table. */ @@ -2215,6 +2269,7 @@ bfd_vma plt_base, got_base; bfd_vma code_offset, lit_offset, abi_offset; int chunk; + int abi = xtensa_abi_choice (); chunk = reloc_index / PLT_ENTRIES_PER_CHUNK; splt = elf_xtensa_get_plt_section (info, chunk); @@ -2235,10 +2290,10 @@ /* Fill in the entry in the procedure linkage table. */ memcpy (splt->contents + code_offset, (bfd_big_endian (output_bfd) - ? elf_xtensa_be_plt_entry[XSHAL_ABI != XTHAL_ABI_WINDOWED] - : elf_xtensa_le_plt_entry[XSHAL_ABI != XTHAL_ABI_WINDOWED]), + ? elf_xtensa_be_plt_entry[abi != XTHAL_ABI_WINDOWED] + : elf_xtensa_le_plt_entry[abi != XTHAL_ABI_WINDOWED]), PLT_ENTRY_SIZE); - abi_offset = XSHAL_ABI == XTHAL_ABI_WINDOWED ? 3 : 0; + abi_offset = abi == XTHAL_ABI_WINDOWED ? 3 : 0; bfd_put_16 (output_bfd, l32r_offset (got_base + 0, plt_base + code_offset + abi_offset), splt->contents + code_offset + abi_offset + 1); @@ -3004,9 +3059,7 @@ } } - if (lit_table) - free (lit_table); - + free (lit_table); input_section->reloc_done = TRUE; return TRUE; @@ -3064,6 +3117,9 @@ int n, m, num; section_size = sxtlit->size; + if (section_size == 0) + return 0; + BFD_ASSERT (section_size % 8 == 0); num = section_size / 8; @@ -3086,8 +3142,7 @@ if (!bfd_malloc_and_get_section (output_bfd, sxtlit, &contents)) { - if (contents != 0) - free (contents); + free (contents); free (table); return -1; } @@ -5938,13 +5993,13 @@ static int removed_literal_compare (const void *a, const void *b) { - const removed_literal_map_entry *pa = a; - const removed_literal_map_entry *pb = b; + const bfd_vma *key = a; + const removed_literal_map_entry *memb = b; - if (pa->addr == pb->addr) + if (*key == memb->addr) return 0; else - return pa->addr < pb->addr ? -1 : 1; + return *key < memb->addr ? -1 : 1; } /* Check if the list of removed literals contains an entry for the @@ -5959,13 +6014,16 @@ if (removed_list->map == NULL) map_removed_literal (removed_list); - p = bsearch (&addr, removed_list->map, removed_list->n_map, - sizeof (*removed_list->map), removed_literal_compare); - if (p) - { - while (p != removed_list->map && (p - 1)->addr == addr) - --p; - r = p->literal; + if (removed_list->map != NULL) + { + p = bsearch (&addr, removed_list->map, removed_list->n_map, + sizeof (*removed_list->map), removed_literal_compare); + if (p) + { + while (p != removed_list->map && (p - 1)->addr == addr) + --p; + r = p->literal; + } } return r; } @@ -6039,7 +6097,7 @@ if (!sec->used_by_bfd) { struct elf_xtensa_section_data *sdata; - bfd_size_type amt = sizeof (*sdata); + size_t amt = sizeof (*sdata); sdata = bfd_zalloc (abfd, amt); if (sdata == NULL) @@ -6251,8 +6309,7 @@ { release_contents (sec_cache->sec, sec_cache->contents); release_internal_relocs (sec_cache->sec, sec_cache->relocs); - if (sec_cache->ptbl) - free (sec_cache->ptbl); + free (sec_cache->ptbl); } } @@ -6309,8 +6366,7 @@ err: release_contents (sec, contents); release_internal_relocs (sec, internal_relocs); - if (prop_table) - free (prop_table); + free (prop_table); return FALSE; } @@ -6429,8 +6485,7 @@ static void free_ebb_constraint (ebb_constraint *c) { - if (c->actions) - free (c->actions); + free (c->actions); } @@ -6664,8 +6719,7 @@ for (i = 0; i < c->action_count; i++) new_actions[i] = c->actions[i]; - if (c->actions) - free (c->actions); + free (c->actions); c->actions = new_actions; c->action_allocated = new_allocated; } @@ -6717,8 +6771,7 @@ static void release_internal_relocs (asection *sec, Elf_Internal_Rela *internal_relocs) { - if (internal_relocs - && elf_section_data (sec)->relocs != internal_relocs) + if (elf_section_data (sec)->relocs != internal_relocs) free (internal_relocs); } @@ -6736,8 +6789,7 @@ { if (!bfd_malloc_and_get_section (abfd, sec, &contents)) { - if (contents) - free (contents); + free (contents); return NULL; } if (keep_memory) @@ -6757,7 +6809,7 @@ static void release_contents (asection *sec, bfd_byte *contents) { - if (contents && elf_section_data (sec)->this_hdr.contents != contents) + if (elf_section_data (sec)->this_hdr.contents != contents) free (contents); } @@ -7839,13 +7891,11 @@ print_action_list (stderr, &relax_info->action_list); #endif -error_return: + error_return: release_contents (sec, contents); release_internal_relocs (sec, internal_relocs); - if (prop_table) - free (prop_table); - if (reloc_opcodes) - free (reloc_opcodes); + free (prop_table); + free (reloc_opcodes); return ok; } @@ -8445,10 +8495,11 @@ static void free_xlate_map (xlate_map_t *map) { - if (map && map->entry) - free (map->entry); if (map) - free (map); + { + free (map->entry); + free (map); + } } @@ -8632,8 +8683,7 @@ } } - if (xmap) - free_xlate_map (xmap); + free_xlate_map (xmap); return ok; } @@ -8844,9 +8894,8 @@ print_action_list (stderr, &relax_info->action_list); #endif /* DEBUG */ -error_return: - if (prop_table) - free (prop_table); + error_return: + free (prop_table); free_section_cache (&target_sec_cache); release_contents (sec, contents); @@ -9604,7 +9653,13 @@ if (r_type == R_XTENSA_DIFF8 || r_type == R_XTENSA_DIFF16 - || r_type == R_XTENSA_DIFF32) + || r_type == R_XTENSA_DIFF32 + || r_type == R_XTENSA_PDIFF8 + || r_type == R_XTENSA_PDIFF16 + || r_type == R_XTENSA_PDIFF32 + || r_type == R_XTENSA_NDIFF8 + || r_type == R_XTENSA_NDIFF16 + || r_type == R_XTENSA_NDIFF32) { bfd_signed_vma diff_value = 0; bfd_vma new_end_offset, diff_mask = 0; @@ -9620,19 +9675,45 @@ switch (r_type) { case R_XTENSA_DIFF8: + diff_mask = 0x7f; diff_value = bfd_get_signed_8 (abfd, &contents[old_source_offset]); break; case R_XTENSA_DIFF16: + diff_mask = 0x7fff; diff_value = bfd_get_signed_16 (abfd, &contents[old_source_offset]); break; case R_XTENSA_DIFF32: + diff_mask = 0x7fffffff; diff_value = bfd_get_signed_32 (abfd, &contents[old_source_offset]); break; + case R_XTENSA_PDIFF8: + case R_XTENSA_NDIFF8: + diff_mask = 0xff; + diff_value = + bfd_get_8 (abfd, &contents[old_source_offset]); + break; + case R_XTENSA_PDIFF16: + case R_XTENSA_NDIFF16: + diff_mask = 0xffff; + diff_value = + bfd_get_16 (abfd, &contents[old_source_offset]); + break; + case R_XTENSA_PDIFF32: + case R_XTENSA_NDIFF32: + diff_mask = 0xffffffff; + diff_value = + bfd_get_32 (abfd, &contents[old_source_offset]); + break; } + if (r_type >= R_XTENSA_NDIFF8 + && r_type <= R_XTENSA_NDIFF32 + && diff_value) + diff_value |= ~diff_mask; + new_end_offset = offset_with_removed_text_map (&target_relax_info->action_list, r_rel.target_offset + diff_value); @@ -9641,25 +9722,40 @@ switch (r_type) { case R_XTENSA_DIFF8: - diff_mask = 0x7f; bfd_put_signed_8 (abfd, diff_value, &contents[old_source_offset]); break; case R_XTENSA_DIFF16: - diff_mask = 0x7fff; bfd_put_signed_16 (abfd, diff_value, &contents[old_source_offset]); break; case R_XTENSA_DIFF32: - diff_mask = 0x7fffffff; bfd_put_signed_32 (abfd, diff_value, &contents[old_source_offset]); break; + case R_XTENSA_PDIFF8: + case R_XTENSA_NDIFF8: + bfd_put_8 (abfd, diff_value, + &contents[old_source_offset]); + break; + case R_XTENSA_PDIFF16: + case R_XTENSA_NDIFF16: + bfd_put_16 (abfd, diff_value, + &contents[old_source_offset]); + break; + case R_XTENSA_PDIFF32: + case R_XTENSA_NDIFF32: + bfd_put_32 (abfd, diff_value, + &contents[old_source_offset]); + break; } - /* Check for overflow. Sign bits must be all zeroes or all ones */ - if ((diff_value & ~diff_mask) != 0 && - (diff_value & ~diff_mask) != (-1 & ~diff_mask)) + /* Check for overflow. Sign bits must be all zeroes or + all ones. When sign bits are all ones diff_value + may not be zero. */ + if (((diff_value & ~diff_mask) != 0 + && (diff_value & ~diff_mask) != ~diff_mask) + || (diff_value && (bfd_vma) diff_value == ~diff_mask)) { (*link_info->callbacks->reloc_dangerous) (link_info, _("overflow after relaxation"), @@ -10148,10 +10244,9 @@ if ((r_type == R_XTENSA_32 || r_type == R_XTENSA_PLT) && (input_section->flags & SEC_ALLOC) != 0 - && (dynamic_symbol || bfd_link_pic (info)) - && (!h || h->root.type != bfd_link_hash_undefweak - || (dynamic_symbol - && (bfd_link_dll (info) || info->export_dynamic)))) + && (dynamic_symbol + || (bfd_link_pic (info) + && (!h || h->root.type != bfd_link_hash_undefweak)))) { asection *srel; bfd_boolean is_plt = FALSE; diff -Nru gdb-9.1/bfd/elf32-z80.c gdb-10.2/bfd/elf32-z80.c --- gdb-9.1/bfd/elf32-z80.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/bfd/elf32-z80.c 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,632 @@ +/* Zilog (e)Z80-specific support for 32-bit ELF + Copyright (C) 1999-2019 Free Software Foundation, Inc. + (Heavily copied from the S12Z port by Sergey Belyashov (sergey.belyashov@gmail.com)) + + This file is part of BFD, the Binary File Descriptor library. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, + MA 02110-1301, USA. */ + +#include "sysdep.h" +#include "bfd.h" +#include "bfdlink.h" +#include "libbfd.h" +#include "elf-bfd.h" + +#include "elf/z80.h" + +/* All users of this file have bfd_octets_per_byte (abfd, sec) == 1. */ +#define OCTETS_PER_BYTE(ABFD, SEC) 1 + +typedef struct { + bfd_reloc_code_real_type r_type; + reloc_howto_type howto; +} bfd_howto_type; + +#define BFD_EMPTY_HOWTO(rt,x) {rt, EMPTY_HOWTO(x)} +#define BFD_HOWTO(rt,a,b,c,d,e,f,g,h,i,j,k,l,m) {rt, HOWTO(a,b,c,d,e,f,g,h,i,j,k,l,m)} + +static bfd_reloc_status_type +z80_elf_16_be_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol, + void *data, asection *input_section, bfd *output_bfd, + char **error_message); + +static const +bfd_howto_type elf_z80_howto_table[] = +{ + /* This reloc does nothing. */ + BFD_HOWTO (BFD_RELOC_NONE, + R_Z80_NONE, /* type */ + 0, /* rightshift */ + 3, /* size (0 = byte, 1 = short, 2 = long) */ + 0, /* bitsize */ + FALSE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_dont,/* complain_on_overflow */ + bfd_elf_generic_reloc, /* special_function */ + "R_NONE", /* name */ + FALSE, /* partial_inplace */ + 0, /* src_mask */ + 0, /* dst_mask */ + FALSE), /* pcrel_offset */ + + /* A 8 bit relocation */ + BFD_HOWTO (BFD_RELOC_8, + R_Z80_8, /* type */ + 0, /* rightshift */ + 0, /* size (0 = byte, 1 = short, 2 = long) */ + 8, /* bitsize */ + FALSE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_bitfield, /* complain_on_overflow */ + bfd_elf_generic_reloc, /* special_function */ + "r_imm8", /* name */ + FALSE, /* partial_inplace */ + 0x00, /* src_mask */ + 0xff, /* dst_mask */ + FALSE), /* pcrel_offset */ + + /* A 8 bit index register displacement relocation */ + BFD_HOWTO (BFD_RELOC_Z80_DISP8, + R_Z80_8_DIS, /* type */ + 0, /* rightshift */ + 0, /* size (0 = byte, 1 = short, 2 = long) */ + 8, /* bitsize */ + FALSE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_signed, /* complain_on_overflow */ + bfd_elf_generic_reloc, /* special_function */ + "r_off", /* name */ + FALSE, /* partial_inplace */ + 0x00, /* src_mask */ + 0xff, /* dst_mask */ + FALSE), /* pcrel_offset */ + + /* A 8 bit PC-rel relocation */ + BFD_HOWTO (BFD_RELOC_8_PCREL, + R_Z80_8_PCREL, /* type */ + 0, /* rightshift */ + 0, /* size (0 = byte, 1 = short, 2 = long) */ + 8, /* bitsize */ + TRUE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_signed, /* complain_on_overflow */ + bfd_elf_generic_reloc, /* special_function */ + "r_jr", /* name */ + FALSE, /* partial_inplace */ + 0x00, /* src_mask */ + 0xff, /* dst_mask */ + TRUE), /* pcrel_offset */ + + /* An 16 bit absolute relocation */ + BFD_HOWTO (BFD_RELOC_16, + R_Z80_16, /* type */ + 0, /* rightshift */ + 1, /* size (0 = byte, 1 = short, 2 = long) */ + 16, /* bitsize */ + FALSE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_bitfield, /* complain_on_overflow */ + bfd_elf_generic_reloc, /* special_function */ + "r_imm16", /* name */ + FALSE, /* partial_inplace */ + 0x00000000, /* src_mask */ + 0x0000ffff, /* dst_mask */ + FALSE), /* pcrel_offset */ + + /* A 24 bit absolute relocation emitted by ADL mode operands */ + BFD_HOWTO (BFD_RELOC_24, + R_Z80_24, /* type */ + 0, /* rightshift */ + 5, /* size (0 = byte, 1 = short, 2 = long) */ + 24, /* bitsize */ + FALSE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_bitfield, /* complain_on_overflow */ + bfd_elf_generic_reloc, /* special_function */ + "r_imm24", /* name */ + FALSE, /* partial_inplace */ + 0x00000000, /* src_mask */ + 0x00ffffff, /* dst_mask */ + FALSE), /* pcrel_offset */ + + BFD_HOWTO (BFD_RELOC_32, + R_Z80_32, /* type */ + 0, /* rightshift */ + 2, /* size (0 = byte, 1 = short, 2 = long) */ + 32, /* bitsize */ + FALSE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_dont,/* complain_on_overflow */ + bfd_elf_generic_reloc, /* special_function */ + "r_imm32", /* name */ + FALSE, /* partial_inplace */ + 0x00000000, /* src_mask */ + 0xffffffff, /* dst_mask */ + FALSE), /* pcrel_offset */ + + /* First (lowest) 8 bits of multibyte relocation */ + BFD_HOWTO (BFD_RELOC_Z80_BYTE0, + R_Z80_BYTE0, /* type */ + 0, /* rightshift */ + 0, /* size (0 = byte, 1 = short, 2 = long) */ + 32, /* bitsize */ + FALSE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_dont,/* complain_on_overflow */ + bfd_elf_generic_reloc, /* special_function */ + "r_byte0", /* name */ + FALSE, /* partial_inplace */ + 0, /* src_mask */ + 0xff, /* dst_mask */ + FALSE), /* pcrel_offset */ + + /* Second 8 bits of multibyte relocation */ + BFD_HOWTO (BFD_RELOC_Z80_BYTE1, + R_Z80_BYTE1, /* type */ + 8, /* rightshift */ + 0, /* size (0 = byte, 1 = short, 2 = long) */ + 32, /* bitsize */ + FALSE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_dont,/* complain_on_overflow */ + bfd_elf_generic_reloc, /* special_function */ + "r_byte1", /* name */ + FALSE, /* partial_inplace */ + 0, /* src_mask */ + 0xff, /* dst_mask */ + FALSE), /* pcrel_offset */ + + /* Third 8 bits of multibyte relocation */ + BFD_HOWTO (BFD_RELOC_Z80_BYTE2, + R_Z80_BYTE2, /* type */ + 16, /* rightshift */ + 0, /* size (0 = byte, 1 = short, 2 = long) */ + 32, /* bitsize */ + FALSE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_dont,/* complain_on_overflow */ + bfd_elf_generic_reloc, /* special_function */ + "r_byte2", /* name */ + FALSE, /* partial_inplace */ + 0, /* src_mask */ + 0xff, /* dst_mask */ + FALSE), /* pcrel_offset */ + + /* Fourth (highest) 8 bits of multibyte relocation */ + BFD_HOWTO (BFD_RELOC_Z80_BYTE3, + R_Z80_BYTE3, /* type */ + 24, /* rightshift */ + 0, /* size (0 = byte, 1 = short, 2 = long) */ + 32, /* bitsize */ + FALSE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_dont,/* complain_on_overflow */ + bfd_elf_generic_reloc, /* special_function */ + "r_byte3", /* name */ + FALSE, /* partial_inplace */ + 0, /* src_mask */ + 0xff, /* dst_mask */ + FALSE), /* pcrel_offset */ + + /* An 16 bit absolute relocation of lower word of multibyte value */ + BFD_HOWTO (BFD_RELOC_Z80_WORD0, + R_Z80_WORD0, /* type */ + 0, /* rightshift */ + 1, /* size (0 = byte, 1 = short, 2 = long) */ + 32, /* bitsize */ + FALSE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_dont,/* complain_on_overflow */ + bfd_elf_generic_reloc, /* special_function */ + "r_word0", /* name */ + FALSE, /* partial_inplace */ + 0, /* src_mask */ + 0xffff, /* dst_mask */ + FALSE), /* pcrel_offset */ + + /* An 16 bit absolute relocation of higher word of multibyte value */ + BFD_HOWTO (BFD_RELOC_Z80_WORD1, + R_Z80_WORD1, /* type */ + 16, /* rightshift */ + 1, /* size (0 = byte, 1 = short, 2 = long) */ + 32, /* bitsize */ + FALSE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_dont,/* complain_on_overflow */ + bfd_elf_generic_reloc, /* special_function */ + "r_word1", /* name */ + FALSE, /* partial_inplace */ + 0, /* src_mask */ + 0xffff, /* dst_mask */ + FALSE), /* pcrel_offset */ + + /* An 16 bit big endian absolute relocation */ + BFD_HOWTO (BFD_RELOC_Z80_16_BE, + R_Z80_16_BE, /* type */ + 0, /* rightshift */ + 1, /* size (0 = byte, 1 = short, 2 = long) */ + 16, /* bitsize */ + FALSE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_bitfield, /* complain_on_overflow */ + z80_elf_16_be_reloc, /* special_function */ + "r_imm16be", /* name */ + FALSE, /* partial_inplace */ + 0x00000000, /* src_mask */ + 0x0000ffff, /* dst_mask */ + FALSE), /* pcrel_offset */ +}; + +static reloc_howto_type * +z80_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED, + bfd_reloc_code_real_type code) +{ + enum + { + table_size = sizeof (elf_z80_howto_table) / sizeof (elf_z80_howto_table[0]) + }; + unsigned int i; + + for (i = 0; i < table_size; i++) + { + if (elf_z80_howto_table[i].r_type == code) + return &elf_z80_howto_table[i].howto; + } + + printf ("%s:%d Not found BFD reloc type %d\n", __FILE__, __LINE__, code); + + return NULL; +} + +static reloc_howto_type * +z80_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED, const char *r_name) +{ + enum + { + table_size = sizeof (elf_z80_howto_table) / sizeof (elf_z80_howto_table[0]) + }; + unsigned int i; + + for (i = 0; i < table_size; i++) + { + if (elf_z80_howto_table[i].howto.name != NULL + && strcasecmp (elf_z80_howto_table[i].howto.name, r_name) == 0) + return &elf_z80_howto_table[i].howto; + } + + printf ("%s:%d Not found ELF reloc name `%s'\n", __FILE__, __LINE__, r_name); + + return NULL; +} + +static reloc_howto_type * +z80_rtype_to_howto (bfd *abfd, unsigned r_type) +{ + enum + { + table_size = sizeof (elf_z80_howto_table) / sizeof (elf_z80_howto_table[0]) + }; + unsigned int i; + + for (i = 0; i < table_size; i++) + { + if (elf_z80_howto_table[i].howto.type == r_type) + return &elf_z80_howto_table[i].howto; + } + + /* xgettext:c-format */ + _bfd_error_handler (_("%pB: unsupported relocation type %#x"), + abfd, r_type); + return NULL; +} + +/* Set the howto pointer for an z80 ELF reloc. */ + +static bfd_boolean +z80_info_to_howto_rela (bfd *abfd, arelent *cache_ptr, Elf_Internal_Rela *dst) +{ + unsigned int r_type = ELF32_R_TYPE (dst->r_info); + reloc_howto_type *howto = z80_rtype_to_howto (abfd, r_type); + if (howto != NULL) + { + cache_ptr->howto = howto; + return TRUE; + } + bfd_set_error (bfd_error_bad_value); + return FALSE; +} + +static bfd_reloc_status_type +z80_elf_final_link_relocate (unsigned long r_type, + bfd *input_bfd, + bfd *output_bfd ATTRIBUTE_UNUSED, + asection *input_section ATTRIBUTE_UNUSED, + bfd_byte *contents, + bfd_vma offset, + bfd_vma value, + bfd_vma addend, + struct bfd_link_info *info ATTRIBUTE_UNUSED, + asection *sym_sec ATTRIBUTE_UNUSED, + int is_local ATTRIBUTE_UNUSED) +{ + bfd_boolean r; + reloc_howto_type *howto; + + switch (r_type) + { + case R_Z80_16_BE: + value += addend; + bfd_put_8 (input_bfd, value >> 8, contents + offset + 0); + bfd_put_8 (input_bfd, value >> 0, contents + offset + 1); + return bfd_reloc_ok; + } + + howto = z80_rtype_to_howto (input_bfd, r_type); + if (howto == NULL) + return bfd_reloc_notsupported; + + r = _bfd_final_link_relocate (howto, input_bfd, input_section, contents, + offset, value, addend); + return r ? bfd_reloc_ok : bfd_reloc_notsupported; +} + +static bfd_boolean +z80_elf_relocate_section (bfd *output_bfd, + struct bfd_link_info *info, + bfd *input_bfd, + asection *input_section, + bfd_byte *contents, + Elf_Internal_Rela *relocs, + Elf_Internal_Sym *local_syms, + asection **local_sections) +{ + Elf_Internal_Shdr *symtab_hdr; + struct elf_link_hash_entry **sym_hashes; + Elf_Internal_Rela *rel, *relend; + + symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr; + sym_hashes = elf_sym_hashes (input_bfd); + + rel = relocs; + relend = relocs + input_section->reloc_count; + for (; rel < relend; rel++) + { + unsigned int r_type; + unsigned long r_symndx; + Elf_Internal_Sym *sym; + asection *sec; + struct elf_link_hash_entry *h; + bfd_vma relocation; + + /* This is a final link. */ + r_symndx = ELF32_R_SYM (rel->r_info); + r_type = ELF32_R_TYPE (rel->r_info); + h = NULL; + sym = NULL; + sec = NULL; + if (r_symndx < symtab_hdr->sh_info) + { + sym = local_syms + r_symndx; + sec = local_sections[r_symndx]; + relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel); + } + else + { + bfd_boolean unresolved_reloc, warned, ignored; + + RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel, + r_symndx, symtab_hdr, sym_hashes, + h, sec, relocation, + unresolved_reloc, warned, ignored); + } + + if (sec != NULL && discarded_section (sec)) + { + /* For relocs against symbols from removed linkonce sections, + or sections discarded by a linker script, we just want the + section contents cleared. Avoid any special processing. */ + reloc_howto_type *howto; + howto = z80_rtype_to_howto (input_bfd, r_type); + RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section, + rel, 1, relend, howto, 0, contents); + } + + if (bfd_link_relocatable (info)) + continue; + + + z80_elf_final_link_relocate (r_type, input_bfd, output_bfd, + input_section, + contents, rel->r_offset, + relocation, rel->r_addend, + info, sec, h == NULL); + } + + return TRUE; +} + +/* The final processing done just before writing out a Z80 ELF object + file. This gets the Z80 architecture right based on the machine + number. */ + +static bfd_boolean +z80_elf_final_write_processing (bfd *abfd) +{ + unsigned long val = bfd_get_mach (abfd); + + switch (val) + { + default: + _bfd_error_handler (_("%pB: unsupported bfd mach %#lx"), + abfd, val); + /* fall through */ + case bfd_mach_z80: + case bfd_mach_z80full: + case bfd_mach_z80strict: + val = EF_Z80_MACH_Z80; + break; + case bfd_mach_gbz80: + val = EF_Z80_MACH_GBZ80; + break; + case bfd_mach_z80n: + val = EF_Z80_MACH_Z80N; + break; + case bfd_mach_z180: + val = EF_Z80_MACH_Z180; + break; + case bfd_mach_ez80_z80: + val = EF_Z80_MACH_EZ80_Z80; + break; + case bfd_mach_ez80_adl: + val = EF_Z80_MACH_EZ80_ADL; + break; + case bfd_mach_r800: + val = EF_Z80_MACH_R800; + break; + } + elf_elfheader (abfd)->e_machine = EM_Z80; + elf_elfheader (abfd)->e_flags &= ~EF_Z80_MACH_MSK; + elf_elfheader (abfd)->e_flags |= val; + return _bfd_elf_final_write_processing (abfd); +} + +/* Set the right machine number. */ +static bfd_boolean +z80_elf_object_p (bfd *abfd) +{ + unsigned int mach; + + if (elf_elfheader (abfd)->e_machine == EM_Z80) + { + int e_mach = elf_elfheader (abfd)->e_flags & EF_Z80_MACH_MSK; + switch (e_mach) + { + default: + _bfd_error_handler (_("%pB: unsupported mach %#x"), + abfd, e_mach); + /* fall through */ + case EF_Z80_MACH_Z80: + mach = bfd_mach_z80; + break; + case EF_Z80_MACH_GBZ80: + mach = bfd_mach_gbz80; + break; + case EF_Z80_MACH_Z180: + mach = bfd_mach_z180; + break; + case EF_Z80_MACH_EZ80_Z80: + mach = bfd_mach_ez80_z80; + break; + case EF_Z80_MACH_EZ80_ADL: + mach = bfd_mach_ez80_adl; + break; + case EF_Z80_MACH_R800: + mach = bfd_mach_r800; + break; + case EF_Z80_MACH_Z80N: + mach = bfd_mach_z80n; + break; + } + } + else + { + _bfd_error_handler (_("%pB: unsupported arch %#x"), + abfd, elf_elfheader (abfd)->e_machine); + mach = bfd_mach_z80; + } + return bfd_default_set_arch_mach (abfd, bfd_arch_z80, mach); +} + +static int +z80_is_local_label_name (bfd * abfd ATTRIBUTE_UNUSED, + const char * name) +{ + return (name[0] == '.' && name[1] == 'L') || + _bfd_elf_is_local_label_name (abfd, name); +} + +static bfd_reloc_status_type +z80_elf_16_be_reloc (bfd *abfd, + arelent *reloc_entry, + asymbol *symbol, + void *data, + asection *input_section, + bfd *output_bfd, + char **error_message) +{ + bfd_vma val; + long x; + bfd_size_type octets = (reloc_entry->address + * OCTETS_PER_BYTE (abfd, input_section)); + + /* If this is a relocatable link (output_bfd test tells us), just + call the generic function. Any adjustment will be done at final + link time. */ + if (output_bfd != NULL) + return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data, + input_section, output_bfd, error_message); + + /* Get symbol value. */ + val = 0; + if (!bfd_is_com_section (symbol->section)) + val = symbol->value; + val += symbol->section->output_offset + input_section->output_offset; + if (symbol->section->output_section) + val += symbol->section->output_section->vma; + + val += reloc_entry->addend; + if (reloc_entry->howto->partial_inplace) + { + x = bfd_get_8 (abfd, (bfd_byte *) data + octets + 0) * 0x100; + x += bfd_get_8 (abfd, (bfd_byte *) data + octets + 1); + x &= ~reloc_entry->howto->src_mask; + } + else + x = 0; + + x |= val & reloc_entry->howto->dst_mask; + if (x < -0x8000 || x >= 0x10000) + return bfd_reloc_outofrange; + + bfd_put_8 (abfd, x >> 8, (bfd_byte *) data + octets + 0); + bfd_put_8 (abfd, x >> 0, (bfd_byte *) data + octets + 1); + return bfd_reloc_ok; +} + +#define ELF_ARCH bfd_arch_z80 +#define ELF_MACHINE_CODE EM_Z80 +#define ELF_MAXPAGESIZE 0x10000 + +#define TARGET_LITTLE_SYM z80_elf32_vec +#define TARGET_LITTLE_NAME "elf32-z80" + +#define elf_backend_can_refcount 1 +#define elf_backend_can_gc_sections 1 +#define elf_backend_stack_align 1 +#define elf_backend_rela_normal 1 + +#define elf_info_to_howto z80_info_to_howto_rela +#define elf_info_to_howto_rel z80_info_to_howto_rela + +#define elf_backend_final_write_processing z80_elf_final_write_processing +#define elf_backend_object_p z80_elf_object_p +#define elf_backend_relocate_section z80_elf_relocate_section + +#define bfd_elf32_bfd_reloc_type_lookup z80_reloc_type_lookup +#define bfd_elf32_bfd_reloc_name_lookup z80_reloc_name_lookup +#define bfd_elf32_bfd_is_local_label_name z80_is_local_label_name + +#include "elf32-target.h" diff -Nru gdb-9.1/bfd/elf64-alpha.c gdb-10.2/bfd/elf64-alpha.c --- gdb-9.1/bfd/elf64-alpha.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf64-alpha.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Alpha specific support for 64-bit ELF - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. Contributed by Richard Henderson . This file is part of BFD, the Binary File Descriptor library. @@ -52,11 +52,11 @@ /* Instruction data for plt generation and relaxation. */ -#define OP_LDA 0x08 -#define OP_LDAH 0x09 -#define OP_LDQ 0x29 -#define OP_BR 0x30 -#define OP_BSR 0x34 +#define OP_LDA 0x08U +#define OP_LDAH 0x09U +#define OP_LDQ 0x29U +#define OP_BR 0x30U +#define OP_BSR 0x34U #define INSN_LDA (OP_LDA << 26) #define INSN_LDAH (OP_LDAH << 26) @@ -73,11 +73,11 @@ #define INSN_JMP 0x68000000 #define INSN_JSR_MASK 0xfc00c000 -#define INSN_A(I,A) (I | (A << 21)) -#define INSN_AB(I,A,B) (I | (A << 21) | (B << 16)) -#define INSN_ABC(I,A,B,C) (I | (A << 21) | (B << 16) | C) -#define INSN_ABO(I,A,B,O) (I | (A << 21) | (B << 16) | ((O) & 0xffff)) -#define INSN_AD(I,A,D) (I | (A << 21) | (((D) >> 2) & 0x1fffff)) +#define INSN_A(I,A) (I | ((unsigned) A << 21)) +#define INSN_AB(I,A,B) (INSN_A (I, A) | (B << 16)) +#define INSN_ABC(I,A,B,C) (INSN_A (I, A) | (B << 16) | C) +#define INSN_ABO(I,A,B,O) (INSN_A (I, A) | (B << 16) | ((O) & 0xffff)) +#define INSN_AD(I,A,D) (INSN_A (I, A) | (((D) >> 2) & 0x1fffff)) /* PLT/GOT Stuff */ @@ -144,14 +144,14 @@ /* Which .reloc section? */ asection *srel; - /* What kind of relocation? */ - unsigned int rtype; - - /* Is this against read-only section? */ - unsigned int reltext : 1; + /* Which section this relocation is against? */ + asection *sec; /* How many did we find? */ unsigned long count; + + /* What kind of relocation? */ + unsigned int rtype; }; struct alpha_elf_link_hash_entry @@ -216,8 +216,9 @@ /* Get the Alpha ELF linker hash table from a link_info structure. */ #define alpha_elf_hash_table(p) \ - (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \ - == ALPHA_ELF_DATA ? ((struct alpha_elf_link_hash_table *) ((p)->hash)) : NULL) + ((is_elf_hash_table ((p)->hash) \ + && elf_hash_table_id (elf_hash_table (p)) == ALPHA_ELF_DATA) \ + ? (struct alpha_elf_link_hash_table *) (p)->hash : NULL) /* Get the object's symbols as our own entry type. */ @@ -280,7 +281,7 @@ elf64_alpha_bfd_link_hash_table_create (bfd *abfd) { struct alpha_elf_link_hash_table *ret; - bfd_size_type amt = sizeof (struct alpha_elf_link_hash_table); + size_t amt = sizeof (struct alpha_elf_link_hash_table); ret = (struct alpha_elf_link_hash_table *) bfd_zmalloc (amt); if (ret == (struct alpha_elf_link_hash_table *) NULL) @@ -1136,9 +1137,7 @@ /* Handle an Alpha specific section when reading an object file. This is called when bfd_section_from_shdr finds a section with an unknown - type. - FIXME: We need to handle the SHF_ALPHA_GPREL flag, but I'm not sure - how to. */ + type. */ static bfd_boolean elf64_alpha_section_from_shdr (bfd *abfd, @@ -1180,10 +1179,10 @@ /* Convert Alpha specific section flags to bfd internal section flags. */ static bfd_boolean -elf64_alpha_section_flags (flagword *flags, const Elf_Internal_Shdr *hdr) +elf64_alpha_section_flags (const Elf_Internal_Shdr *hdr) { if (hdr->sh_flags & SHF_ALPHA_GPREL) - *flags |= SEC_SMALL_DATA; + hdr->bfd_section->flags |= SEC_SMALL_DATA; return TRUE; } @@ -1242,6 +1241,7 @@ scomm = bfd_make_section_with_flags (abfd, ".scommon", (SEC_ALLOC | SEC_IS_COMMON + | SEC_SMALL_DATA | SEC_LINKER_CREATED)); if (scomm == NULL) return FALSE; @@ -1387,18 +1387,23 @@ /* The symbolic header contains absolute file offsets and sizes to read. */ #define READ(ptr, offset, count, size, type) \ - if (symhdr->count == 0) \ - debug->ptr = NULL; \ - else \ + do \ { \ - bfd_size_type amt = (bfd_size_type) size * symhdr->count; \ - debug->ptr = (type) bfd_malloc (amt); \ - if (debug->ptr == NULL) \ + size_t amt; \ + debug->ptr = NULL; \ + if (symhdr->count == 0) \ + break; \ + if (_bfd_mul_overflow (size, symhdr->count, &amt)) \ + { \ + bfd_set_error (bfd_error_file_too_big); \ + goto error_return; \ + } \ + if (bfd_seek (abfd, symhdr->offset, SEEK_SET) != 0) \ goto error_return; \ - if (bfd_seek (abfd, (file_ptr) symhdr->offset, SEEK_SET) != 0 \ - || bfd_bread (debug->ptr, amt, abfd) != amt) \ + debug->ptr = (type) _bfd_malloc_and_read (abfd, amt, amt); \ + if (debug->ptr == NULL) \ goto error_return; \ - } + } while (0) READ (line, cbLineOffset, cbLine, sizeof (unsigned char), unsigned char *); READ (external_dnr, cbDnOffset, idnMax, swap->external_dnr_size, void *); @@ -1419,30 +1424,18 @@ return TRUE; error_return: - if (ext_hdr != NULL) - free (ext_hdr); - if (debug->line != NULL) - free (debug->line); - if (debug->external_dnr != NULL) - free (debug->external_dnr); - if (debug->external_pdr != NULL) - free (debug->external_pdr); - if (debug->external_sym != NULL) - free (debug->external_sym); - if (debug->external_opt != NULL) - free (debug->external_opt); - if (debug->external_aux != NULL) - free (debug->external_aux); - if (debug->ss != NULL) - free (debug->ss); - if (debug->ssext != NULL) - free (debug->ssext); - if (debug->external_fdr != NULL) - free (debug->external_fdr); - if (debug->external_rfd != NULL) - free (debug->external_rfd); - if (debug->external_ext != NULL) - free (debug->external_ext); + free (ext_hdr); + free (debug->line); + free (debug->external_dnr); + free (debug->external_pdr); + free (debug->external_sym); + free (debug->external_opt); + free (debug->external_aux); + free (debug->ss); + free (debug->ssext); + free (debug->external_fdr); + free (debug->external_rfd); + free (debug->external_ext); return FALSE; } @@ -1724,7 +1717,7 @@ if (!gotent) { int entry_size; - bfd_size_type amt; + size_t amt; amt = sizeof (struct alpha_elf_got_entry); gotent = (struct alpha_elf_got_entry *) bfd_alloc (abfd, amt); @@ -1787,20 +1780,10 @@ Elf_Internal_Shdr *symtab_hdr; struct alpha_elf_link_hash_entry **sym_hashes; const Elf_Internal_Rela *rel, *relend; - bfd_size_type amt; if (bfd_link_relocatable (info)) return TRUE; - /* Don't do anything special with non-loaded, non-alloced sections. - In particular, any relocs in such sections should not affect GOT - and PLT reference counting (ie. we don't allow them to create GOT - or PLT entries), there's no possibility or desire to optimize TLS - relocs, and there's not much point in propagating relocs to shared - libs that the dynamic linker won't relocate. */ - if ((sec->flags & SEC_ALLOC) == 0) - return TRUE; - BFD_ASSERT (is_alpha_elf (abfd)); dynobj = elf_hash_table (info)->dynobj; @@ -1990,15 +1973,15 @@ if (!rent) { - amt = sizeof (struct alpha_elf_reloc_entry); + size_t amt = sizeof (struct alpha_elf_reloc_entry); rent = (struct alpha_elf_reloc_entry *) bfd_alloc (abfd, amt); if (!rent) return FALSE; rent->srel = sreloc; + rent->sec = sec; rent->rtype = r_type; rent->count = 1; - rent->reltext = (sec->flags & SEC_READONLY) != 0; rent->next = h->reloc_entries; h->reloc_entries = rent; @@ -2012,7 +1995,13 @@ loaded into memory, we need a RELATIVE reloc. */ sreloc->size += sizeof (Elf64_External_Rela); if (sec->flags & SEC_READONLY) - info->flags |= DF_TEXTREL; + { + info->flags |= DF_TEXTREL; + info->callbacks->minfo + (_("%pB: dynamic relocation against `%pT' in " + "read-only section `%pA'\n"), + sec->owner, h->root.root.root.string, sec); + } } } } @@ -2697,10 +2686,17 @@ bfd_link_pie (info)); if (entries) { + asection *sec = relent->sec; relent->srel->size += entries * sizeof (Elf64_External_Rela) * relent->count; - if (relent->reltext) - info->flags |= DT_TEXTREL; + if ((sec->flags & SEC_READONLY) != 0) + { + info->flags |= DT_TEXTREL; + info->callbacks->minfo + (_("%pB: dynamic relocation against `%pT' in " + "read-only section `%pA'\n"), + sec->owner, h->root.root.root.string, sec); + } } } @@ -2916,38 +2912,14 @@ #define add_dynamic_entry(TAG, VAL) \ _bfd_elf_add_dynamic_entry (info, TAG, VAL) - if (bfd_link_executable (info)) - { - if (!add_dynamic_entry (DT_DEBUG, 0)) - return FALSE; - } - - if (relplt) - { - if (!add_dynamic_entry (DT_PLTGOT, 0) - || !add_dynamic_entry (DT_PLTRELSZ, 0) - || !add_dynamic_entry (DT_PLTREL, DT_RELA) - || !add_dynamic_entry (DT_JMPREL, 0)) - return FALSE; - - if (elf64_alpha_use_secureplt - && !add_dynamic_entry (DT_ALPHA_PLTRO, 1)) - return FALSE; - } - - if (relocs) - { - if (!add_dynamic_entry (DT_RELA, 0) - || !add_dynamic_entry (DT_RELASZ, 0) - || !add_dynamic_entry (DT_RELAENT, sizeof (Elf64_External_Rela))) - return FALSE; + if (!_bfd_elf_add_dynamic_tags (output_bfd, info, + relocs || relplt)) + return FALSE; - if (info->flags & DF_TEXTREL) - { - if (!add_dynamic_entry (DT_TEXTREL, 0)) - return FALSE; - } - } + if (relplt + && elf64_alpha_use_secureplt + && !add_dynamic_entry (DT_ALPHA_PLTRO, 1)) + return FALSE; } #undef add_dynamic_entry @@ -3023,7 +2995,8 @@ } /* Can't relax dynamic symbols. */ - if (alpha_elf_dynamic_symbol_p (&info->h->root, info->link_info)) + if (info->h != NULL + && alpha_elf_dynamic_symbol_p (&info->h->root, info->link_info)) return TRUE; /* Can't use local-exec relocations in shared libraries. */ @@ -3171,12 +3144,10 @@ if (!gpdisp || gpdisp->r_addend != 4) { - if (tsec_free) - free (tsec_free); + free (tsec_free); return 0; } - if (tsec_free) - free (tsec_free); + free (tsec_free); } /* We've now determined that we can skip an initial gp load. Verify @@ -3493,7 +3464,8 @@ bfd_boolean dynamic, use_gottprel; unsigned long new_symndx; - dynamic = alpha_elf_dynamic_symbol_p (&info->h->root, info->link_info); + dynamic = (info->h != NULL + && alpha_elf_dynamic_symbol_p (&info->h->root, info->link_info)); /* If a TLS symbol is accessed using IE at least once, there is no point to use dynamic model for it. */ @@ -4022,14 +3994,11 @@ return TRUE; error_return: - if (isymbuf != NULL - && symtab_hdr->contents != (unsigned char *) isymbuf) + if (symtab_hdr->contents != (unsigned char *) isymbuf) free (isymbuf); - if (info.contents != NULL - && elf_section_data (sec)->this_hdr.contents != info.contents) + if (elf_section_data (sec)->this_hdr.contents != info.contents) free (info.contents); - if (internal_relocs != NULL - && elf_section_data (sec)->relocs != internal_relocs) + if (elf_section_data (sec)->relocs != internal_relocs) free (internal_relocs); return FALSE; } @@ -5523,6 +5492,9 @@ #define elf_backend_special_sections \ elf64_alpha_special_sections +#define elf_backend_strip_zero_sized_dynamic_sections \ + _bfd_elf_strip_zero_sized_dynamic_sections + /* A few constants that determine how the .plt section is set up. */ #define elf_backend_want_got_plt 0 #define elf_backend_plt_readonly 0 diff -Nru gdb-9.1/bfd/elf64-bpf.c gdb-10.2/bfd/elf64-bpf.c --- gdb-9.1/bfd/elf64-bpf.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf64-bpf.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Linux bpf specific support for 64-bit ELF - Copyright (C) 2019 Free Software Foundation, Inc. + Copyright (C) 2019-2020 Free Software Foundation, Inc. Contributed by Oracle Inc. This file is part of BFD, the Binary File Descriptor library. @@ -31,6 +31,9 @@ #define BASEADDR(SEC) ((SEC)->output_section->vma + (SEC)->output_offset) +static bfd_reloc_status_type bpf_elf_generic_reloc + (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **); + /* Relocation tables. */ static reloc_howto_type bpf_elf_howto_table [] = { @@ -42,7 +45,7 @@ FALSE, /* pc_relative */ 0, /* bitpos */ complain_overflow_dont, /* complain_on_overflow */ - bfd_elf_generic_reloc, /* special_function */ + bpf_elf_generic_reloc, /* special_function */ "R_BPF_NONE", /* name */ FALSE, /* partial_inplace */ 0, /* src_mask */ @@ -55,27 +58,27 @@ 4, /* size (0 = byte, 1 = short, 2 = long) */ 64, /* bitsize */ FALSE, /* pc_relative */ - 0, /* bitpos */ + 32, /* bitpos */ complain_overflow_signed, /* complain_on_overflow */ - bfd_elf_generic_reloc, /* special_function */ + bpf_elf_generic_reloc, /* special_function */ "R_BPF_INSN_64", /* name */ - FALSE, /* partial_inplace */ - 0, /* src_mask */ + TRUE, /* partial_inplace */ + MINUS_ONE, /* src_mask */ MINUS_ONE, /* dst_mask */ TRUE), /* pcrel_offset */ - /* 32-immediate in LDDW instruction. */ + /* 32-immediate in many instructions. */ HOWTO (R_BPF_INSN_32, /* type */ 0, /* rightshift */ 2, /* size (0 = byte, 1 = short, 2 = long) */ 32, /* bitsize */ FALSE, /* pc_relative */ - 0, /* bitpos */ + 32, /* bitpos */ complain_overflow_signed, /* complain_on_overflow */ - bfd_elf_generic_reloc, /* special_function */ + bpf_elf_generic_reloc, /* special_function */ "R_BPF_INSN_32", /* name */ - FALSE, /* partial_inplace */ - 0, /* src_mask */ + TRUE, /* partial_inplace */ + 0xffffffff, /* src_mask */ 0xffffffff, /* dst_mask */ TRUE), /* pcrel_offset */ @@ -85,12 +88,12 @@ 1, /* size (0 = byte, 1 = short, 2 = long) */ 16, /* bitsize */ FALSE, /* pc_relative */ - 0, /* bitpos */ + 16, /* bitpos */ complain_overflow_signed, /* complain_on_overflow */ - bfd_elf_generic_reloc, /* special_function */ + bpf_elf_generic_reloc, /* special_function */ "R_BPF_INSN_16", /* name */ - FALSE, /* partial_inplace */ - 0, /* src_mask */ + TRUE, /* partial_inplace */ + 0x0000ffff, /* src_mask */ 0x0000ffff, /* dst_mask */ TRUE), /* pcrel_offset */ @@ -100,11 +103,11 @@ 1, /* size (0 = byte, 1 = short, 2 = long) */ 16, /* bitsize */ TRUE, /* pc_relative */ - 32, /* bitpos */ + 16, /* bitpos */ complain_overflow_signed, /* complain_on_overflow */ - bfd_elf_generic_reloc, /* special_function */ + bpf_elf_generic_reloc, /* special_function */ "R_BPF_INSN_DISP16", /* name */ - FALSE, /* partial_inplace */ + TRUE, /* partial_inplace */ 0xffff, /* src_mask */ 0xffff, /* dst_mask */ TRUE), /* pcrel_offset */ @@ -116,10 +119,10 @@ TRUE, /* pc_relative */ 0, /* bitpos */ complain_overflow_signed, /* complain_on_overflow */ - bfd_elf_generic_reloc, /* special_function */ + bpf_elf_generic_reloc, /* special_function */ "R_BPF_8_PCREL", /* name */ - FALSE, /* partial_inplace */ - 0, /* src_mask */ + TRUE, /* partial_inplace */ + 0xff, /* src_mask */ 0xff, /* dst_mask */ TRUE), /* pcrel_offset */ @@ -130,10 +133,10 @@ TRUE, /* pc_relative */ 0, /* bitpos */ complain_overflow_signed, /* complain_on_overflow */ - bfd_elf_generic_reloc, /* special_function */ + bpf_elf_generic_reloc, /* special_function */ "R_BPF_16_PCREL", /* name */ FALSE, /* partial_inplace */ - 0, /* src_mask */ + 0xffff, /* src_mask */ 0xffff, /* dst_mask */ TRUE), /* pcrel_offset */ @@ -144,10 +147,10 @@ TRUE, /* pc_relative */ 0, /* bitpos */ complain_overflow_signed, /* complain_on_overflow */ - bfd_elf_generic_reloc, /* special_function */ + bpf_elf_generic_reloc, /* special_function */ "R_BPF_32_PCREL", /* name */ FALSE, /* partial_inplace */ - 0, /* src_mask */ + 0xffffffff, /* src_mask */ 0xffffffff, /* dst_mask */ TRUE), /* pcrel_offset */ @@ -158,10 +161,10 @@ FALSE, /* pc_relative */ 0, /* bitpos */ complain_overflow_unsigned, /* complain_on_overflow */ - bfd_elf_generic_reloc, /* special_function */ + bpf_elf_generic_reloc, /* special_function */ "R_BPF_DATA_8", /* name */ - FALSE, /* partial_inplace */ - 0, /* src_mask */ + TRUE, /* partial_inplace */ + 0xff, /* src_mask */ 0xff, /* dst_mask */ FALSE), /* pcrel_offset */ @@ -172,10 +175,10 @@ FALSE, /* pc_relative */ 0, /* bitpos */ complain_overflow_unsigned, /* complain_on_overflow */ - bfd_elf_generic_reloc, /* special_function */ + bpf_elf_generic_reloc, /* special_function */ "R_BPF_DATA_16", /* name */ FALSE, /* partial_inplace */ - 0, /* src_mask */ + 0xffff, /* src_mask */ 0xffff, /* dst_mask */ FALSE), /* pcrel_offset */ @@ -185,11 +188,11 @@ 2, /* size (0 = byte, 1 = short, 2 = long) */ 32, /* bitsize */ TRUE, /* pc_relative */ - 0, /* bitpos */ + 32, /* bitpos */ complain_overflow_signed, /* complain_on_overflow */ - bfd_elf_generic_reloc, /* special_function */ + bpf_elf_generic_reloc, /* special_function */ "R_BPF_INSN_DISP32", /* name */ - FALSE, /* partial_inplace */ + TRUE, /* partial_inplace */ 0xffffffff, /* src_mask */ 0xffffffff, /* dst_mask */ TRUE), /* pcrel_offset */ @@ -202,10 +205,10 @@ FALSE, /* pc_relative */ 0, /* bitpos */ complain_overflow_bitfield, /* complain_on_overflow */ - bfd_elf_generic_reloc, /* special_function */ + bpf_elf_generic_reloc, /* special_function */ "R_BPF_DATA_32", /* name */ FALSE, /* partial_inplace */ - 0, /* src_mask */ + 0xffffffff, /* src_mask */ 0xffffffff, /* dst_mask */ TRUE), /* pcrel_offset */ @@ -217,7 +220,7 @@ FALSE, /* pc_relative */ 0, /* bitpos */ complain_overflow_bitfield, /* complain_on_overflow */ - bfd_elf_generic_reloc, /* special_function */ + bpf_elf_generic_reloc, /* special_function */ "R_BPF_DATA_64", /* name */ FALSE, /* partial_inplace */ 0, /* src_mask */ @@ -231,10 +234,10 @@ TRUE, /* pc_relative */ 0, /* bitpos */ complain_overflow_signed, /* complain_on_overflow */ - bfd_elf_generic_reloc, /* special_function */ + bpf_elf_generic_reloc, /* special_function */ "R_BPF_64_PCREL", /* name */ FALSE, /* partial_inplace */ - 0, /* src_mask */ + MINUS_ONE, /* src_mask */ MINUS_ONE, /* dst_mask */ TRUE), /* pcrel_offset */ }; @@ -391,6 +394,8 @@ bfd_reloc_status_type r; const char * name = NULL; int r_type ATTRIBUTE_UNUSED; + bfd_signed_vma addend; + bfd_byte * where; r_type = ELF64_R_TYPE (rel->r_info); r_symndx = ELF64_R_SYM (rel->r_info); @@ -398,6 +403,7 @@ h = NULL; sym = NULL; sec = NULL; + where = contents + rel->r_offset; if (r_symndx < symtab_hdr->sh_info) { @@ -435,13 +441,12 @@ case R_BPF_INSN_DISP16: case R_BPF_INSN_DISP32: { - bfd_signed_vma addend; - /* Make the relocation PC-relative, and change its unit to - 64-bit words. */ - relocation -= sec_addr (input_section) + rel->r_offset; - /* Make it 64-bit words. */ - relocation = relocation / 8; + 64-bit words. Note we need *signed* arithmetic + here. */ + relocation = ((bfd_signed_vma) relocation + - (sec_addr (input_section) + rel->r_offset)); + relocation = (bfd_signed_vma) relocation / 8; /* Get the addend from the instruction and apply it. */ addend = bfd_get (howto->bitsize, input_bfd, @@ -460,12 +465,72 @@ r = bfd_reloc_ok; break; } + case R_BPF_DATA_8: + case R_BPF_DATA_16: + case R_BPF_DATA_32: + case R_BPF_DATA_64: + { + addend = bfd_get (howto->bitsize, input_bfd, where); + relocation += addend; + bfd_put (howto->bitsize, input_bfd, relocation, where); + + r = bfd_reloc_ok; + break; + } + case R_BPF_INSN_16: + { + + addend = bfd_get_16 (input_bfd, where + 2); + relocation += addend; + bfd_put_16 (input_bfd, relocation, where + 2); + + r = bfd_reloc_ok; + break; + } + case R_BPF_INSN_32: + { + /* Write relocated value */ + + addend = bfd_get_32 (input_bfd, where + 4); + relocation += addend; + bfd_put_32 (input_bfd, relocation, where + 4); + + r = bfd_reloc_ok; + break; + } + case R_BPF_INSN_64: + { + /* + LDDW instructions are 128 bits long, with a 64-bit immediate. + The lower 32 bits of the immediate are in the same position + as the imm32 field of other instructions. + The upper 32 bits of the immediate are stored at the end of + the instruction. + */ + + + /* Get the addend. The upper and lower 32 bits are split. + 'where' is the beginning of the 16-byte instruction. */ + addend = bfd_get_32 (input_bfd, where + 4); + addend |= (bfd_get_32 (input_bfd, where + 12) << 32); + + relocation += addend; + + bfd_put_32 (input_bfd, (relocation & 0xFFFFFFFF), where + 4); + bfd_put_32 (input_bfd, (relocation >> 32), where + 12); + r = bfd_reloc_ok; + break; + } default: - r = _bfd_final_link_relocate (howto, input_bfd, input_section, - contents, rel->r_offset, relocation, - rel->r_addend); + r = bfd_reloc_notsupported; } + if (r == bfd_reloc_ok) + r = bfd_check_overflow (howto->complain_on_overflow, + howto->bitsize, + howto->rightshift, + 64, relocation); + if (r != bfd_reloc_ok) { const char * msg = NULL; @@ -523,6 +588,77 @@ return TRUE; } +/* A generic howto special function for installing BPF relocations. + This function will be called by the assembler (via bfd_install_relocation). + At link time, bpf_elf_relocate_section will resolve the final relocations. + + BPF instructions are always big endian, and this approach avoids problems in + bfd_install_relocation. */ + +static bfd_reloc_status_type +bpf_elf_generic_reloc (bfd * abfd, arelent *reloc_entry, asymbol *symbol, + void *data, asection *input_section, + bfd *output_bfd, + char **error_message ATTRIBUTE_UNUSED) +{ + + bfd_signed_vma relocation; + bfd_reloc_status_type status; + bfd_byte *where; + + /* Sanity check that the address is in range. */ + if (reloc_entry->address > bfd_get_section_limit (abfd, input_section)) + return bfd_reloc_outofrange; + + /* Get the symbol value. */ + if (bfd_is_com_section (symbol->section)) + relocation = 0; + else + relocation = symbol->value; + + if (symbol->flags & BSF_SECTION_SYM) + /* Relocation against a section symbol: add in the section base address. */ + relocation += BASEADDR (symbol->section); + + relocation += reloc_entry->addend; + + where = (bfd_byte *) data + reloc_entry->address; + + status = bfd_check_overflow (reloc_entry->howto->complain_on_overflow, + reloc_entry->howto->bitsize, + reloc_entry->howto->rightshift, 64, relocation); + + if (status != bfd_reloc_ok) + return status; + + /* Now finally install the relocation. */ + if (reloc_entry->howto->type == R_BPF_INSN_64) + { + /* lddw is a 128-bit (!) instruction that allows loading a 64-bit + immediate into a register. the immediate is split in half, with the + lower 32 bits in the same position as the imm32 field of other + instructions, and the upper 32 bits placed at the very end of the + instruction. that is, there are 32 unused bits between them. */ + + bfd_put_32 (output_bfd, (relocation & 0xFFFFFFFF), where + 4); + bfd_put_32 (output_bfd, (relocation >> 32), where + 12); + } + else + { + /* For other kinds of relocations, the relocated value simply goes + BITPOS bits from the start of the entry. This is always a multiple + of 8, i.e. whole bytes. */ + bfd_put (reloc_entry->howto->bitsize, output_bfd, relocation, + where + reloc_entry->howto->bitpos / 8); + } + + reloc_entry->addend = relocation; + reloc_entry->address += input_section->output_offset; + + return bfd_reloc_ok; +} + + /* The macros below configure the architecture. */ #define TARGET_LITTLE_SYM bpf_elf64_le_vec diff -Nru gdb-9.1/bfd/elf64.c gdb-10.2/bfd/elf64.c --- gdb-9.1/bfd/elf64.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf64.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* ELF 64-bit executable support for BFD. - Copyright (C) 1993-2019 Free Software Foundation, Inc. + Copyright (C) 1993-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/elf64-gen.c gdb-10.2/bfd/elf64-gen.c --- gdb-9.1/bfd/elf64-gen.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf64-gen.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Generic support for 64-bit ELF - Copyright (C) 1993-2019 Free Software Foundation, Inc. + Copyright (C) 1993-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/elf64-hppa.c gdb-10.2/bfd/elf64-hppa.c --- gdb-9.1/bfd/elf64-hppa.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf64-hppa.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Support for HPPA 64-bit ELF - Copyright (C) 1999-2019 Free Software Foundation, Inc. + Copyright (C) 1999-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -117,8 +117,6 @@ /* Shortcuts to get to the various linker defined sections. */ asection *dlt_sec; asection *dlt_rel_sec; - asection *plt_sec; - asection *plt_rel_sec; asection *opd_sec; asection *opd_rel_sec; asection *other_rel_sec; @@ -147,8 +145,9 @@ }; #define hppa_link_hash_table(p) \ - (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \ - == HPPA64_ELF_DATA ? ((struct elf64_hppa_link_hash_table *) ((p)->hash)) : NULL) + ((is_elf_hash_table ((p)->hash) \ + && elf_hash_table_id (elf_hash_table (p)) == HPPA64_ELF_DATA) \ + ? (struct elf64_hppa_link_hash_table *) (p)->hash : NULL) #define hppa_elf_hash_entry(ent) \ ((struct elf64_hppa_link_hash_entry *)(ent)) @@ -289,7 +288,7 @@ elf64_hppa_hash_table_create (bfd *abfd) { struct elf64_hppa_link_hash_table *htab; - bfd_size_type amt = sizeof (*htab); + size_t amt = sizeof (*htab); htab = bfd_zmalloc (amt); if (htab == NULL) @@ -304,6 +303,7 @@ return NULL; } + htab->root.dt_pltgot_required = TRUE; htab->text_segment_base = (bfd_vma) -1; htab->data_segment_base = (bfd_vma) -1; @@ -383,7 +383,9 @@ if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex)) return FALSE; - return TRUE; + return ((hdr->sh_flags & SHF_PARISC_SHORT) == 0 + || bfd_set_section_flags (hdr->bfd_section, + hdr->bfd_section->flags | SEC_SMALL_DATA)); } /* SEC is a section containing relocs for an input BFD when linking; return @@ -532,8 +534,7 @@ ?!? Note we leak the last section_syms array. Presumably we could free it in one of the later routines in this file. */ - if (hppa_info->section_syms) - free (hppa_info->section_syms); + free (hppa_info->section_syms); /* Read this BFD's local symbols. */ if (symtab_hdr->sh_info != 0) @@ -801,7 +802,7 @@ if (need_entry & NEED_PLT) { - if (! hppa_info->plt_sec + if (! hppa_info->root.splt && ! get_plt (abfd, info, hppa_info)) goto err_out; @@ -1180,7 +1181,7 @@ asection *plt; bfd *dynobj; - plt = hppa_info->plt_sec; + plt = hppa_info->root.splt; if (!plt) { dynobj = hppa_info->root.dynobj; @@ -1200,7 +1201,7 @@ return FALSE; } - hppa_info->plt_sec = plt; + hppa_info->root.splt = plt; } return TRUE; @@ -1359,7 +1360,7 @@ if (s == NULL || !bfd_set_section_alignment (s, 3)) return FALSE; - hppa_info->plt_rel_sec = s; + hppa_info->root.srelplt = s; s = bfd_make_section_anyway_with_flags (abfd, ".rela.data", (SEC_ALLOC | SEC_LOAD @@ -1453,7 +1454,7 @@ else if (shared) t = 2 * sizeof (Elf64_External_Rela); - hppa_info->plt_rel_sec->size += t; + hppa_info->root.srelplt->size += t; } return TRUE; @@ -1527,9 +1528,7 @@ bfd *dynobj; bfd *ibfd; asection *sec; - bfd_boolean plt; bfd_boolean relocs; - bfd_boolean reltext; hppa_info = hppa_link_hash_table (info); if (hppa_info == NULL) @@ -1652,8 +1651,8 @@ } else { - sec = hppa_info->plt_sec; - srel = hppa_info->plt_rel_sec; + sec = hppa_info->root.splt; + srel = hppa_info->root.srelplt; for (; local_plt < end_local_plt; ++local_plt) { if (*local_plt > 0) @@ -1706,12 +1705,12 @@ hppa_info->dlt_sec->size = data.ofs; } - if (hppa_info->plt_sec) + if (hppa_info->root.splt) { - data.ofs = hppa_info->plt_sec->size; + data.ofs = hppa_info->root.splt->size; elf_link_hash_traverse (&hppa_info->root, allocate_global_data_plt, &data); - hppa_info->plt_sec->size = data.ofs; + hppa_info->root.splt->size = data.ofs; } if (hppa_info->stub_sec) @@ -1737,9 +1736,7 @@ allocate_dynrel_entries, &data); /* The sizes of all the sections are set. Allocate memory for them. */ - plt = FALSE; relocs = FALSE; - reltext = FALSE; for (sec = dynobj->sections; sec != NULL; sec = sec->next) { const char *name; @@ -1754,7 +1751,7 @@ if (strcmp (name, ".plt") == 0) { /* Remember whether there is a PLT. */ - plt = sec->size != 0; + ; } else if (strcmp (name, ".opd") == 0 || CONST_STRNEQ (name, ".dlt") @@ -1767,28 +1764,10 @@ { if (sec->size != 0) { - asection *target; - /* Remember whether there are any reloc sections other than .rela.plt. */ if (strcmp (name, ".rela.plt") != 0) - { - const char *outname; - - relocs = TRUE; - - /* If this relocation section applies to a read only - section, then we probably need a DT_TEXTREL - entry. The entries in the .rela.plt section - really apply to the .got section, which we - created ourselves and so know is not readonly. */ - outname = bfd_section_name (sec->output_section); - target = bfd_get_section_by_name (output_bfd, outname + 4); - if (target != NULL - && (target->flags & SEC_READONLY) != 0 - && (target->flags & SEC_ALLOC) != 0) - reltext = TRUE; - } + relocs = TRUE; /* We use the reloc_count field as a counter if we need to copy relocs into the output file. */ @@ -1841,8 +1820,7 @@ #define add_dynamic_entry(TAG, VAL) \ _bfd_elf_add_dynamic_entry (info, TAG, VAL) - if (!add_dynamic_entry (DT_HP_DLD_FLAGS, 0) - || !add_dynamic_entry (DT_PLTGOT, 0)) + if (!add_dynamic_entry (DT_HP_DLD_FLAGS, 0)) return FALSE; /* Add some entries to the .dynamic section. We fill in the @@ -1852,8 +1830,7 @@ dynamic linker and used by the debugger. */ if (! bfd_link_pic (info)) { - if (!add_dynamic_entry (DT_DEBUG, 0) - || !add_dynamic_entry (DT_HP_DLD_HOOK, 0) + if (!add_dynamic_entry (DT_HP_DLD_HOOK, 0) || !add_dynamic_entry (DT_HP_LOAD_MAP, 0)) return FALSE; } @@ -1862,33 +1839,10 @@ Required by HPUX 11.00 patch PHSS_26559. */ if (!add_dynamic_entry (DT_FLAGS, (info)->flags)) return FALSE; - - if (plt) - { - if (!add_dynamic_entry (DT_PLTRELSZ, 0) - || !add_dynamic_entry (DT_PLTREL, DT_RELA) - || !add_dynamic_entry (DT_JMPREL, 0)) - return FALSE; - } - - if (relocs) - { - if (!add_dynamic_entry (DT_RELA, 0) - || !add_dynamic_entry (DT_RELASZ, 0) - || !add_dynamic_entry (DT_RELAENT, sizeof (Elf64_External_Rela))) - return FALSE; - } - - if (reltext) - { - if (!add_dynamic_entry (DT_TEXTREL, 0)) - return FALSE; - info->flags |= DF_TEXTREL; - } } #undef add_dynamic_entry - return TRUE; + return _bfd_elf_add_dynamic_tags (output_bfd, info, relocs); } /* Called after we have output the symbol into the dynamic symbol @@ -1949,9 +1903,9 @@ return FALSE; stub = hppa_info->stub_sec; - splt = hppa_info->plt_sec; + splt = hppa_info->root.splt; sopd = hppa_info->opd_sec; - spltrel = hppa_info->plt_rel_sec; + spltrel = hppa_info->root.srelplt; /* Incredible. It is actually necessary to NOT use the symbol's real value when building the dynamic symbol table for a shared library. @@ -2531,13 +2485,13 @@ break; case DT_JMPREL: - s = hppa_info->plt_rel_sec; + s = hppa_info->root.srelplt; dyn.d_un.d_ptr = s->output_section->vma + s->output_offset; bfd_elf64_swap_dyn_out (output_bfd, &dyn, dyncon); break; case DT_PLTRELSZ: - s = hppa_info->plt_rel_sec; + s = hppa_info->root.srelplt; dyn.d_un.d_val = s->size; bfd_elf64_swap_dyn_out (output_bfd, &dyn, dyncon); break; @@ -2562,7 +2516,7 @@ /* There is some question about whether or not the size of the PLT relocs should be included here. HP's tools do it, so we'll emulate them. */ - s = hppa_info->plt_rel_sec; + s = hppa_info->root.srelplt; dyn.d_un.d_val += s->size; bfd_elf64_swap_dyn_out (output_bfd, &dyn, dyncon); break; @@ -2980,7 +2934,7 @@ that order) and set __gp to the base address of whichever section is found first. */ - sec = hppa_info->plt_sec; + sec = hppa_info->root.splt; if (sec && ! (sec->flags & SEC_EXCLUDE)) gp_val = (sec->output_offset + sec->output_section->vma @@ -3038,7 +2992,7 @@ /* Do not attempt to sort non-regular files. This is here especially for configure scripts and kernel builds which run tests with "ld [...] -o /dev/null". */ - if (stat (abfd->filename, &buf) != 0 + if (stat (bfd_get_filename (abfd), &buf) != 0 || !S_ISREG(buf.st_mode)) return TRUE; @@ -3529,8 +3483,8 @@ to the start of the DLT, so we have to compute the absolute address, then subtract out the value of __gp. */ value = (hh->plt_offset - + hppa_info->plt_sec->output_offset - + hppa_info->plt_sec->output_section->vma); + + hppa_info->root.splt->output_offset + + hppa_info->root.splt->output_section->vma); value -= _bfd_get_gp_value (output_bfd); /* All PLTOFF relocations are basically the same at this point, @@ -3880,13 +3834,14 @@ else if (!bfd_link_relocatable (info)) { bfd_boolean err; - err = (info->unresolved_syms_in_objects == RM_GENERATE_ERROR - || ELF_ST_VISIBILITY (eh->other) != STV_DEFAULT); - (*info->callbacks->undefined_symbol) (info, - eh->root.root.string, - input_bfd, - input_section, - rel->r_offset, err); + + err = (info->unresolved_syms_in_objects == RM_DIAGNOSE + && !info->warn_unresolved_syms) + || ELF_ST_VISIBILITY (eh->other) != STV_DEFAULT; + + info->callbacks->undefined_symbol + (info, eh->root.root.string, input_bfd, + input_section, rel->r_offset, err); } if (!bfd_link_relocatable (info) @@ -3898,7 +3853,7 @@ if (info->unresolved_syms_in_objects == RM_IGNORE && ELF_ST_VISIBILITY (eh->other) == STV_DEFAULT && eh->type == STT_PARISC_MILLI) - (*info->callbacks->undefined_symbol) + info->callbacks->undefined_symbol (info, eh_name (eh), input_bfd, input_section, rel->r_offset, FALSE); } diff -Nru gdb-9.1/bfd/elf64-hppa.h gdb-10.2/bfd/elf64-hppa.h --- gdb-9.1/bfd/elf64-hppa.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf64-hppa.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* ELF64/HPPA support - Copyright (C) 1999-2019 Free Software Foundation, Inc. + Copyright (C) 1999-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/elf64-ia64-vms.c gdb-10.2/bfd/elf64-ia64-vms.c --- gdb-9.1/bfd/elf64-ia64-vms.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf64-ia64-vms.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* IA-64 support for OpenVMS - Copyright (C) 1998-2019 Free Software Foundation, Inc. + Copyright (C) 1998-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -170,8 +170,9 @@ }; #define elf64_ia64_hash_table(p) \ - (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \ - == IA64_ELF_DATA ? ((struct elf64_ia64_link_hash_table *) ((p)->hash)) : NULL) + ((is_elf_hash_table ((p)->hash) \ + && elf_hash_table_id (elf_hash_table (p)) == IA64_ELF_DATA) \ + ? (struct elf64_ia64_link_hash_table *) (p)->hash : NULL) struct elf64_ia64_vms_obj_tdata { @@ -792,13 +793,11 @@ return TRUE; error_return: - if (isymbuf != NULL && (unsigned char *) isymbuf != symtab_hdr->contents) + if ((unsigned char *) isymbuf != symtab_hdr->contents) free (isymbuf); - if (contents != NULL - && elf_section_data (sec)->this_hdr.contents != contents) + if (elf_section_data (sec)->this_hdr.contents != contents) free (contents); - if (internal_relocs != NULL - && elf_section_data (sec)->relocs != internal_relocs) + if (elf_section_data (sec)->relocs != internal_relocs) free (internal_relocs); return FALSE; } @@ -822,11 +821,10 @@ flag. */ static bfd_boolean -elf64_ia64_section_flags (flagword *flags, - const Elf_Internal_Shdr *hdr) +elf64_ia64_section_flags (const Elf_Internal_Shdr *hdr) { if (hdr->sh_flags & SHF_IA_64_SHORT) - *flags |= SEC_SMALL_DATA; + hdr->bfd_section->flags |= SEC_SMALL_DATA; return TRUE; } @@ -884,6 +882,7 @@ scomm = bfd_make_section_with_flags (abfd, ".scommon", (SEC_ALLOC | SEC_IS_COMMON + | SEC_SMALL_DATA | SEC_LINKER_CREATED)); if (scomm == NULL) return FALSE; @@ -1000,14 +999,11 @@ if (entry->root.root.type == bfd_link_hash_warning) entry = (struct elf64_ia64_link_hash_entry *) entry->root.root.u.i.link; - if (entry->info) - { - free (entry->info); - entry->info = NULL; - entry->count = 0; - entry->sorted_count = 0; - entry->size = 0; - } + free (entry->info); + entry->info = NULL; + entry->count = 0; + entry->sorted_count = 0; + entry->size = 0; return TRUE; } @@ -1021,14 +1017,11 @@ struct elf64_ia64_local_hash_entry *entry = (struct elf64_ia64_local_hash_entry *) *slot; - if (entry->info) - { - free (entry->info); - entry->info = NULL; - entry->count = 0; - entry->sorted_count = 0; - entry->size = 0; - } + free (entry->info); + entry->info = NULL; + entry->count = 0; + entry->sorted_count = 0; + entry->size = 0; return TRUE; } @@ -1674,7 +1667,7 @@ *size_p = size; *info_p = info; -has_space: + has_space: /* Append the new one to the array. */ dyn_i = info + count; memset (dyn_i, 0, sizeof (*dyn_i)); @@ -2845,7 +2838,7 @@ elf_ia64_vms_ident (abfd))) return FALSE; - soname = vms_get_module_name (abfd->filename, TRUE); + soname = vms_get_module_name (bfd_get_filename (abfd), TRUE); if (soname == NULL) return FALSE; strindex = dynstrsec->size; @@ -3284,7 +3277,7 @@ { if (max_short_vma - min_short_vma >= 0x400000) { -overflow: + overflow: _bfd_error_handler /* xgettext:c-format */ (_("%pB: short data segment overflowed (%#" PRIx64 " >= 0x400000)"), @@ -4234,6 +4227,10 @@ flagword in_flags; bfd_boolean ok = TRUE; + /* FIXME: What should be checked when linking shared libraries? */ + if ((ibfd->flags & DYNAMIC) != 0) + return TRUE; + /* Don't even pretend to support mixed-format linking. */ if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour || bfd_get_flavour (obfd) != bfd_target_elf_flavour) @@ -4374,7 +4371,7 @@ flagword flags; const char *name; char *unwi_name, *unw_name; - bfd_size_type amt; + size_t amt; if (abfd->flags & DYNAMIC) return TRUE; @@ -4848,7 +4845,7 @@ /* Extract IDENT. */ if (!bfd_malloc_and_get_section (abfd, s, &dynbuf)) { -error_free_dyn: + error_free_dyn: free (dynbuf); goto error_return; } @@ -5239,11 +5236,8 @@ } } - if (isymbuf != NULL) - { - free (isymbuf); - isymbuf = NULL; - } + free (isymbuf); + isymbuf = NULL; /* If this object is the same format as the output object, and it is not a shared library, then let the backend look through the @@ -5300,8 +5294,7 @@ error_free_vers: error_free_sym: - if (isymbuf != NULL) - free (isymbuf); + free (isymbuf); error_return: return FALSE; } diff -Nru gdb-9.1/bfd/elf64-mips.c gdb-10.2/bfd/elf64-mips.c --- gdb-9.1/bfd/elf64-mips.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf64-mips.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* MIPS-specific support for 64-bit ELF - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. Ian Lance Taylor, Cygnus Support Linker support added by Mark Mitchell, CodeSourcery, LLC. @@ -4010,15 +4010,12 @@ int entsize; bfd_boolean rela_p; - allocated = bfd_malloc (rel_hdr->sh_size); + if (bfd_seek (abfd, rel_hdr->sh_offset, SEEK_SET) != 0) + return FALSE; + allocated = _bfd_malloc_and_read (abfd, rel_hdr->sh_size, rel_hdr->sh_size); if (allocated == NULL) return FALSE; - if (bfd_seek (abfd, rel_hdr->sh_offset, SEEK_SET) != 0 - || (bfd_bread (allocated, rel_hdr->sh_size, abfd) - != rel_hdr->sh_size)) - goto error_return; - native_relocs = allocated; entsize = rel_hdr->sh_entsize; @@ -4165,14 +4162,11 @@ } } - if (allocated != NULL) - free (allocated); - + free (allocated); return TRUE; error_return: - if (allocated != NULL) - free (allocated); + free (allocated); return FALSE; } diff -Nru gdb-9.1/bfd/elf64-mmix.c gdb-10.2/bfd/elf64-mmix.c --- gdb-9.1/bfd/elf64-mmix.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf64-mmix.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* MMIX-specific support for 64-bit ELF. - Copyright (C) 2001-2019 Free Software Foundation, Inc. + Copyright (C) 2001-2020 Free Software Foundation, Inc. Contributed by Hans-Peter Nilsson This file is part of BFD, the Binary File Descriptor library. @@ -831,7 +831,7 @@ if (!sec->used_by_bfd) { struct _mmix_elf_section_data *sdata; - bfd_size_type amt = sizeof (*sdata); + size_t amt = sizeof (*sdata); sdata = bfd_zalloc (abfd, amt); if (sdata == NULL) @@ -2538,6 +2538,7 @@ spot a missing actual initialization. */ size_t bpono = (size_t) -1; size_t pjsno = 0; + size_t pjsno_undefs = 0; Elf_Internal_Sym *isymbuf = NULL; bfd_size_type size = sec->rawsize ? sec->rawsize : sec->size; @@ -2703,6 +2704,11 @@ gregdata->n_remaining_bpo_relocs_this_relaxation_round--; bpono++; } + + /* Similarly, keep accounting consistent for PUSHJ + referring to an undefined symbol. */ + if (ELF64_R_TYPE (irel->r_info) == R_MMIX_PUSHJ_STUBBABLE) + pjsno_undefs++; continue; } } @@ -2842,10 +2848,10 @@ } } - BFD_ASSERT(pjsno == mmix_elf_section_data (sec)->pjs.n_pushj_relocs); + BFD_ASSERT(pjsno + pjsno_undefs + == mmix_elf_section_data (sec)->pjs.n_pushj_relocs); - if (internal_relocs != NULL - && elf_section_data (sec)->relocs != internal_relocs) + if (elf_section_data (sec)->relocs != internal_relocs) free (internal_relocs); if (sec->size < size + mmix_elf_section_data (sec)->pjs.stubs_size_sum) @@ -2860,10 +2866,9 @@ return TRUE; error_return: - if (isymbuf != NULL && (unsigned char *) isymbuf != symtab_hdr->contents) + if ((unsigned char *) isymbuf != symtab_hdr->contents) free (isymbuf); - if (internal_relocs != NULL - && elf_section_data (sec)->relocs != internal_relocs) + if (elf_section_data (sec)->relocs != internal_relocs) free (internal_relocs); return FALSE; } diff -Nru gdb-9.1/bfd/elf64-nfp.c gdb-10.2/bfd/elf64-nfp.c --- gdb-9.1/bfd/elf64-nfp.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf64-nfp.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* NFP-specific support for 64-bit ELF - Copyright (C) 2017-2019 Free Software Foundation, Inc. + Copyright (C) 2017-2020 Free Software Foundation, Inc. Contributed by Francois H. Theron This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/elf64-ppc.c gdb-10.2/bfd/elf64-ppc.c --- gdb-9.1/bfd/elf64-ppc.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf64-ppc.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* PowerPC64-specific support for 64-bit ELF. - Copyright (C) 1999-2019 Free Software Foundation, Inc. + Copyright (C) 1999-2020 Free Software Foundation, Inc. Written by Linus Nordberg, Swox AB , based on elf32-ppc.c by Ian Lance Taylor. Largely rewritten by Alan Modra. @@ -125,6 +125,7 @@ #define elf_backend_finish_dynamic_sections ppc64_elf_finish_dynamic_sections #define elf_backend_link_output_symbol_hook ppc64_elf_output_symbol_hook #define elf_backend_special_sections ppc64_elf_special_sections +#define elf_backend_section_flags ppc64_elf_section_flags #define elf_backend_merge_symbol_attribute ppc64_elf_merge_symbol_attribute #define elf_backend_merge_symbol ppc64_elf_merge_symbol #define elf_backend_get_reloc_section bfd_get_section_by_name @@ -929,16 +930,16 @@ HOW (R_PPC64_DTPREL34, 4, 34, 0x3ffff0000ffffULL, 0, FALSE, signed, ppc64_elf_unhandled_reloc), - HOW (R_PPC64_GOT_TLSGD34, 4, 34, 0x3ffff0000ffffULL, 0, TRUE, signed, + HOW (R_PPC64_GOT_TLSGD_PCREL34, 4, 34, 0x3ffff0000ffffULL, 0, TRUE, signed, ppc64_elf_unhandled_reloc), - HOW (R_PPC64_GOT_TLSLD34, 4, 34, 0x3ffff0000ffffULL, 0, TRUE, signed, + HOW (R_PPC64_GOT_TLSLD_PCREL34, 4, 34, 0x3ffff0000ffffULL, 0, TRUE, signed, ppc64_elf_unhandled_reloc), - HOW (R_PPC64_GOT_TPREL34, 4, 34, 0x3ffff0000ffffULL, 0, TRUE, signed, + HOW (R_PPC64_GOT_TPREL_PCREL34, 4, 34, 0x3ffff0000ffffULL, 0, TRUE, signed, ppc64_elf_unhandled_reloc), - HOW (R_PPC64_GOT_DTPREL34, 4, 34, 0x3ffff0000ffffULL, 0, TRUE, signed, + HOW (R_PPC64_GOT_DTPREL_PCREL34, 4, 34, 0x3ffff0000ffffULL, 0, TRUE, signed, ppc64_elf_unhandled_reloc), HOW (R_PPC64_ADDR16_HIGHER34, 1, 16, 0xffff, 34, FALSE, dont, @@ -998,8 +999,7 @@ } static reloc_howto_type * -ppc64_elf_reloc_type_lookup (bfd *abfd, - bfd_reloc_code_real_type code) +ppc64_elf_reloc_type_lookup (bfd *abfd, bfd_reloc_code_real_type code) { enum elf_ppc64_reloc_type r = R_PPC64_NONE; @@ -1279,13 +1279,13 @@ break; case BFD_RELOC_PPC64_DTPREL34: r = R_PPC64_DTPREL34; break; - case BFD_RELOC_PPC64_GOT_TLSGD34: r = R_PPC64_GOT_TLSGD34; + case BFD_RELOC_PPC64_GOT_TLSGD_PCREL34: r = R_PPC64_GOT_TLSGD_PCREL34; break; - case BFD_RELOC_PPC64_GOT_TLSLD34: r = R_PPC64_GOT_TLSLD34; + case BFD_RELOC_PPC64_GOT_TLSLD_PCREL34: r = R_PPC64_GOT_TLSLD_PCREL34; break; - case BFD_RELOC_PPC64_GOT_TPREL34: r = R_PPC64_GOT_TPREL34; + case BFD_RELOC_PPC64_GOT_TPREL_PCREL34: r = R_PPC64_GOT_TPREL_PCREL34; break; - case BFD_RELOC_PPC64_GOT_DTPREL34: r = R_PPC64_GOT_DTPREL34; + case BFD_RELOC_PPC64_GOT_DTPREL_PCREL34: r = R_PPC64_GOT_DTPREL_PCREL34; break; case BFD_RELOC_PPC64_ADDR16_HIGHER34: r = R_PPC64_ADDR16_HIGHER34; break; @@ -1317,16 +1317,33 @@ }; static reloc_howto_type * -ppc64_elf_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED, - const char *r_name) +ppc64_elf_reloc_name_lookup (bfd *abfd, const char *r_name) { unsigned int i; + static char *compat_map[][2] = { + { "R_PPC64_GOT_TLSGD34", "R_PPC64_GOT_TLSGD_PCREL34" }, + { "R_PPC64_GOT_TLSLD34", "R_PPC64_GOT_TLSLD_PCREL34" }, + { "R_PPC64_GOT_TPREL34", "R_PPC64_GOT_TPREL_PCREL34" }, + { "R_PPC64_GOT_DTPREL34", "R_PPC64_GOT_DTPREL_PCREL34" } + }; for (i = 0; i < ARRAY_SIZE (ppc64_elf_howto_raw); i++) if (ppc64_elf_howto_raw[i].name != NULL && strcasecmp (ppc64_elf_howto_raw[i].name, r_name) == 0) return &ppc64_elf_howto_raw[i]; + /* Handle old names of relocations in case they were used by + .reloc directives. + FIXME: Remove this soon. Mapping the reloc names is very likely + completely unnecessary. */ + for (i = 0; i < ARRAY_SIZE (compat_map); i++) + if (strcasecmp (compat_map[i][0], r_name) == 0) + { + _bfd_error_handler (_("warning: %s should be used rather than %s"), + compat_map[i][1], compat_map[i][0]); + return ppc64_elf_reloc_name_lookup (abfd, compat_map[i][1]); + } + return NULL; } @@ -2000,7 +2017,7 @@ if (!sec->used_by_bfd) { struct _ppc64_elf_section_data *sdata; - bfd_size_type amt = sizeof (*sdata); + size_t amt = sizeof (*sdata); sdata = bfd_zalloc (abfd, amt); if (sdata == NULL) @@ -2011,6 +2028,18 @@ return _bfd_elf_new_section_hook (abfd, sec); } +static bfd_boolean +ppc64_elf_section_flags (const Elf_Internal_Shdr *hdr) +{ + const char *name = hdr->bfd_section->name; + + if (strncmp (name, ".sbss", 5) == 0 + || strncmp (name, ".sdata", 6) == 0) + hdr->bfd_section->flags |= SEC_SMALL_DATA; + + return TRUE; +} + static struct _opd_sec_data * get_opd_info (asection * sec) { @@ -2120,9 +2149,10 @@ /* Search SYMS for a symbol of the given VALUE. */ static asymbol * -sym_exists_at (asymbol **syms, long lo, long hi, unsigned int id, bfd_vma value) +sym_exists_at (asymbol **syms, size_t lo, size_t hi, unsigned int id, + bfd_vma value) { - long mid; + size_t mid; if (id == (unsigned) -1) { @@ -2408,8 +2438,7 @@ free_contents_and_exit_err: count = -1; free_contents_and_exit: - if (contents) - free (contents); + free (contents); goto done; } @@ -2787,20 +2816,20 @@ } /* If ELIMINATE_COPY_RELOCS is non-zero, the linker will try to avoid - copying dynamic variables from a shared lib into an app's dynbss + copying dynamic variables from a shared lib into an app's .dynbss section, and instead use a dynamic relocation to point into the - shared lib. With code that gcc generates, it's vital that this be - enabled; In the PowerPC64 ABI, the address of a function is actually - the address of a function descriptor, which resides in the .opd - section. gcc uses the descriptor directly rather than going via the - GOT as some other ABI's do, which means that initialized function - pointers must reference the descriptor. Thus, a function pointer - initialized to the address of a function in a shared library will - either require a copy reloc, or a dynamic reloc. Using a copy reloc - redefines the function descriptor symbol to point to the copy. This - presents a problem as a plt entry for that function is also - initialized from the function descriptor symbol and the copy reloc - may not be initialized first. */ + shared lib. With code that gcc generates it is vital that this be + enabled; In the PowerPC64 ELFv1 ABI the address of a function is + actually the address of a function descriptor which resides in the + .opd section. gcc uses the descriptor directly rather than going + via the GOT as some other ABIs do, which means that initialized + function pointers reference the descriptor. Thus, a function + pointer initialized to the address of a function in a shared + library will either require a .dynbss copy and a copy reloc, or a + dynamic reloc. Using a .dynbss copy redefines the function + descriptor symbol to point to the copy. This presents a problem as + a PLT entry for that function is also initialized from the function + descriptor symbol and the copy may not be initialized first. */ #define ELIMINATE_COPY_RELOCS 1 /* Section name for stubs is the associated section name plus this @@ -2816,8 +2845,8 @@ ppc_stub_plt_branch: Similar to the above, but a 24 bit branch in the stub section won't reach its destination. - . addis %r11,%r2,xxx@toc@ha - . ld %r12,xxx@toc@l(%r11) + . addis %r12,%r2,xxx@toc@ha + . ld %r12,xxx@toc@l(%r12) . mtctr %r12 . bctr @@ -2843,8 +2872,8 @@ A ppc_stub_plt_branch with an r2 offset looks like: . std %r2,40(%r1) - . addis %r11,%r2,xxx@toc@ha - . ld %r12,xxx@toc@l(%r11) + . addis %r12,%r2,xxx@toc@ha + . ld %r12,xxx@toc@l(%r12) . addis %r2,%r2,off@ha . addi %r2,%r2,off@l . mtctr %r12 @@ -2900,7 +2929,7 @@ . mtctr %r12 . bctr - There are also ELFv1 powerxx variants of these stubs. + There are also ELFv1 power10 variants of these stubs. ppc_stub_long_branch_notoc: . pla %r12,dest@pcrel . b dest @@ -2923,7 +2952,7 @@ In cases where the high instructions would add zero, they are omitted and following instructions modified in some cases. - For example, a powerxx ppc_stub_plt_call_notoc might simplify down + For example, a power10 ppc_stub_plt_call_notoc might simplify down to . pld %r12,xxx@pcrel . mtctr %r12 @@ -3062,9 +3091,6 @@ struct ppc_link_hash_entry *next_dot_sym; } u; - /* Track dynamic relocs copied for this symbol. */ - struct elf_dyn_relocs *dyn_relocs; - /* Link between function code and descriptor symbols. */ struct ppc_link_hash_entry *oh; @@ -3111,6 +3137,12 @@ #define NON_GOT 256 /* local symbol plt, not stored. */ }; +static inline struct ppc_link_hash_entry * +ppc_elf_hash_entry (struct elf_link_hash_entry *ent) +{ + return (struct ppc_link_hash_entry *) ent; +} + /* ppc64 ELF linker hash table. */ struct ppc_link_hash_table @@ -3173,6 +3205,9 @@ /* Shortcut to .__tls_get_addr and __tls_get_addr. */ struct ppc_link_hash_entry *tls_get_addr; struct ppc_link_hash_entry *tls_get_addr_fd; + struct ppc_link_hash_entry *tga_desc; + struct ppc_link_hash_entry *tga_desc_fd; + struct map_stub *tga_group; /* The size of reliplt used by got entry relocs. */ bfd_size_type got_reli_size; @@ -3204,25 +3239,17 @@ /* Whether func_desc_adjust needs to be run over symbols. */ unsigned int need_func_desc_adj:1; - /* Whether there exist local gnu indirect function resolvers, - referenced by dynamic relocations. */ - unsigned int local_ifunc_resolver:1; - unsigned int maybe_local_ifunc_resolver:1; - /* Whether plt calls for ELFv2 localentry:0 funcs have been optimized. */ unsigned int has_plt_localentry0:1; /* Whether calls are made via the PLT from NOTOC functions. */ unsigned int notoc_plt:1; - /* Whether to use powerxx instructions in linkage stubs. */ - unsigned int powerxx_stubs:1; + /* Whether any code linked seems to be Power10. */ + unsigned int has_power10_relocs:1; /* Incremented every time we size stubs. */ unsigned int stub_iteration; - - /* Small local sym cache. */ - struct sym_cache sym_cache; }; /* Rename some of the generic section flags to better document how they @@ -3249,8 +3276,9 @@ /* Get the ppc64 ELF linker hash table from a link_info structure. */ #define ppc_hash_table(p) \ - (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \ - == PPC64_ELF_DATA ? ((struct ppc_link_hash_table *) ((p)->hash)) : NULL) + ((is_elf_hash_table ((p)->hash) \ + && elf_hash_table_id (elf_hash_table (p)) == PPC64_ELF_DATA) \ + ? (struct ppc_link_hash_table *) (p)->hash : NULL) #define ppc_stub_hash_lookup(table, string, create, copy) \ ((struct ppc_stub_hash_entry *) \ @@ -3425,7 +3453,7 @@ ppc64_elf_link_hash_table_create (bfd *abfd) { struct ppc_link_hash_table *htab; - bfd_size_type amt = sizeof (struct ppc_link_hash_table); + size_t amt = sizeof (struct ppc_link_hash_table); htab = bfd_zmalloc (amt); if (htab == NULL) @@ -3652,6 +3680,37 @@ return stub_name; } +/* If mixing power10 with non-power10 code and --power10-stubs is not + specified (or is auto) then calls using @notoc relocations that + need a stub will utilize power10 instructions in the stub, and + calls without @notoc relocations will not use power10 instructions. + The two classes of stubs are stored in separate stub_hash_table + entries having the same key string. The two entries will always be + adjacent on entry->root.next chain, even if hash table resizing + occurs. This function selects the correct entry to use. */ + +static struct ppc_stub_hash_entry * +select_alt_stub (struct ppc_stub_hash_entry *entry, bfd_boolean notoc) +{ + bfd_boolean have_notoc; + + have_notoc = (entry->stub_type == ppc_stub_plt_call_notoc + || entry->stub_type == ppc_stub_plt_branch_notoc + || entry->stub_type == ppc_stub_long_branch_notoc); + + if (have_notoc != notoc) + { + const char *stub_name = entry->root.string; + + entry = (struct ppc_stub_hash_entry *) entry->root.next; + if (entry != NULL + && entry->root.string != stub_name) + entry = NULL; + } + + return entry; +} + /* Look up an entry in the stub hash. Stub entries are cached because creating the stub name takes a bit of time. */ @@ -3696,6 +3755,13 @@ free (stub_name); } + if (stub_entry != NULL && htab->params->power10_stubs == -1) + { + bfd_boolean notoc = ELF64_R_TYPE (rel->r_info) == R_PPC64_REL24_NOTOC; + + stub_entry = select_alt_stub (stub_entry, notoc); + } + return stub_entry; } @@ -3810,7 +3876,7 @@ static inline struct ppc_link_hash_entry * ppc_follow_link (struct ppc_link_hash_entry *h) { - return (struct ppc_link_hash_entry *) follow_link (&h->elf.root); + return ppc_elf_hash_entry (elf_follow_link (&h->elf)); } /* Merge PLT info on FROM with that on TO. */ @@ -3857,8 +3923,8 @@ { struct ppc_link_hash_entry *edir, *eind; - edir = (struct ppc_link_hash_entry *) dir; - eind = (struct ppc_link_hash_entry *) ind; + edir = ppc_elf_hash_entry (dir); + eind = ppc_elf_hash_entry (ind); edir->is_func |= eind->is_func; edir->is_func_descriptor |= eind->is_func_descriptor; @@ -3884,20 +3950,20 @@ return; /* Copy over any dynamic relocs we may have on the indirect sym. */ - if (eind->dyn_relocs != NULL) + if (ind->dyn_relocs != NULL) { - if (edir->dyn_relocs != NULL) + if (dir->dyn_relocs != NULL) { struct elf_dyn_relocs **pp; struct elf_dyn_relocs *p; /* Add reloc counts against the indirect sym to the direct sym list. Merge any entries against the same section. */ - for (pp = &eind->dyn_relocs; (p = *pp) != NULL; ) + for (pp = &ind->dyn_relocs; (p = *pp) != NULL; ) { struct elf_dyn_relocs *q; - for (q = edir->dyn_relocs; q != NULL; q = q->next) + for (q = dir->dyn_relocs; q != NULL; q = q->next) if (q->sec == p->sec) { q->pc_count += p->pc_count; @@ -3908,11 +3974,11 @@ if (q == NULL) pp = &p->next; } - *pp = edir->dyn_relocs; + *pp = dir->dyn_relocs; } - edir->dyn_relocs = eind->dyn_relocs; - eind->dyn_relocs = NULL; + dir->dyn_relocs = ind->dyn_relocs; + ind->dyn_relocs = NULL; } /* Copy over got entries that we may have already seen to the @@ -3974,8 +4040,8 @@ { const char *fd_name = fh->elf.root.root.string + 1; - fdh = (struct ppc_link_hash_entry *) - elf_link_hash_lookup (&htab->elf, fd_name, FALSE, FALSE, FALSE); + fdh = ppc_elf_hash_entry (elf_link_hash_lookup (&htab->elf, fd_name, + FALSE, FALSE, FALSE)); if (fdh == NULL) return fdh; @@ -4103,9 +4169,9 @@ bfd *oldbfd ATTRIBUTE_UNUSED, const asection *oldsec ATTRIBUTE_UNUSED) { - ((struct ppc_link_hash_entry *) h)->fake = 0; + ppc_elf_hash_entry (h)->fake = 0; if ((STO_PPC64_LOCAL_MASK & isym->st_other) != 0) - ((struct ppc_link_hash_entry *) h)->non_zero_localentry = 1; + ppc_elf_hash_entry (h)->non_zero_localentry = 1; return TRUE; } @@ -4127,7 +4193,7 @@ if (h != NULL /* Don't return this sym if it is a fake function descriptor created by add_symbol_adjust. */ - && !((struct ppc_link_hash_entry *) h)->fake) + && !ppc_elf_hash_entry (h)->fake) return h; if (name[0] == '.') @@ -4141,6 +4207,11 @@ memcpy (dot_name + 1, name, len + 1); h = _bfd_elf_archive_symbol_lookup (abfd, info, dot_name); bfd_release (abfd, dot_name); + if (h != NULL) + return h; + + if (strcmp (name, "__tls_get_addr_opt") == 0) + h = _bfd_elf_archive_symbol_lookup (abfd, info, "__tls_get_addr_desc"); return h; } @@ -4310,7 +4381,8 @@ Elf_Internal_Sym *isym; asection *s; - isym = bfd_sym_from_r_symndx (&htab->sym_cache, ibfd, r_symndx); + isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache, ibfd, + r_symndx); if (isym == NULL) { if (elf_section_data (opd)->relocs != relocs) @@ -4416,7 +4488,7 @@ break; if (ent == NULL) { - bfd_size_type amt = sizeof (*ent); + size_t amt = sizeof (*ent); ent = bfd_alloc (abfd, amt); if (ent == NULL) return FALSE; @@ -4448,7 +4520,7 @@ break; if (ent == NULL) { - bfd_size_type amt = sizeof (*ent); + size_t amt = sizeof (*ent); ent = bfd_alloc (abfd, amt); if (ent == NULL) return FALSE; @@ -4512,15 +4584,6 @@ if (bfd_link_relocatable (info)) return TRUE; - /* Don't do anything special with non-loaded, non-alloced sections. - In particular, any relocs in such sections should not affect GOT - and PLT reference counting (ie. we don't allow them to create GOT - or PLT entries), there's no possibility or desire to optimize TLS - relocs, and there's not much point in propagating relocs to shared - libs that the dynamic linker won't relocate. */ - if ((sec->flags & SEC_ALLOC) == 0) - return TRUE; - BFD_ASSERT (is_ppc64_elf (abfd)); htab = ppc_hash_table (info); @@ -4569,14 +4632,14 @@ case R_PPC64_DTPREL34: case R_PPC64_PCREL34: case R_PPC64_GOT_PCREL34: - case R_PPC64_GOT_TLSGD34: - case R_PPC64_GOT_TLSLD34: - case R_PPC64_GOT_TPREL34: - case R_PPC64_GOT_DTPREL34: + case R_PPC64_GOT_TLSGD_PCREL34: + case R_PPC64_GOT_TLSLD_PCREL34: + case R_PPC64_GOT_TPREL_PCREL34: + case R_PPC64_GOT_DTPREL_PCREL34: case R_PPC64_PLT_PCREL34: case R_PPC64_PLT_PCREL34_NOTOC: case R_PPC64_PCREL28: - htab->powerxx_stubs = 1; + htab->has_power10_relocs = 1; break; default: break; @@ -4620,7 +4683,7 @@ } else { - Elf_Internal_Sym *isym = bfd_sym_from_r_symndx (&htab->sym_cache, + Elf_Internal_Sym *isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache, abfd, r_symndx); if (isym == NULL) return FALSE; @@ -4643,7 +4706,7 @@ /* These special tls relocs tie a call to __tls_get_addr with its parameter symbol. */ if (h != NULL) - ((struct ppc_link_hash_entry *) h)->tls_mask |= TLS_TLS | TLS_MARK; + ppc_elf_hash_entry (h)->tls_mask |= TLS_TLS | TLS_MARK; else if (!update_local_sym_info (abfd, symtab_hdr, r_symndx, rel->r_addend, @@ -4656,7 +4719,7 @@ case R_PPC64_GOT_TLSLD16_LO: case R_PPC64_GOT_TLSLD16_HI: case R_PPC64_GOT_TLSLD16_HA: - case R_PPC64_GOT_TLSLD34: + case R_PPC64_GOT_TLSLD_PCREL34: tls_type = TLS_TLS | TLS_LD; goto dogottls; @@ -4664,7 +4727,7 @@ case R_PPC64_GOT_TLSGD16_LO: case R_PPC64_GOT_TLSGD16_HI: case R_PPC64_GOT_TLSGD16_HA: - case R_PPC64_GOT_TLSGD34: + case R_PPC64_GOT_TLSGD_PCREL34: tls_type = TLS_TLS | TLS_GD; goto dogottls; @@ -4672,7 +4735,7 @@ case R_PPC64_GOT_TPREL16_LO_DS: case R_PPC64_GOT_TPREL16_HI: case R_PPC64_GOT_TPREL16_HA: - case R_PPC64_GOT_TPREL34: + case R_PPC64_GOT_TPREL_PCREL34: if (bfd_link_dll (info)) info->flags |= DF_STATIC_TLS; tls_type = TLS_TLS | TLS_TPREL; @@ -4682,7 +4745,7 @@ case R_PPC64_GOT_DTPREL16_LO_DS: case R_PPC64_GOT_DTPREL16_HI: case R_PPC64_GOT_DTPREL16_HA: - case R_PPC64_GOT_DTPREL34: + case R_PPC64_GOT_DTPREL_PCREL34: tls_type = TLS_TLS | TLS_DTPREL; dogottls: sec->has_tls_reloc = 1; @@ -4718,7 +4781,7 @@ struct ppc_link_hash_entry *eh; struct got_entry *ent; - eh = (struct ppc_link_hash_entry *) h; + eh = ppc_elf_hash_entry (h); for (ent = eh->elf.got.glist; ent != NULL; ent = ent->next) if (ent->addend == rel->r_addend && ent->owner == abfd @@ -4726,7 +4789,7 @@ break; if (ent == NULL) { - bfd_size_type amt = sizeof (*ent); + size_t amt = sizeof (*ent); ent = bfd_alloc (abfd, amt); if (ent == NULL) return FALSE; @@ -4746,14 +4809,6 @@ if (!update_local_sym_info (abfd, symtab_hdr, r_symndx, rel->r_addend, tls_type)) return FALSE; - - /* We may also need a plt entry if the symbol turns out to be - an ifunc. */ - if (h != NULL && !bfd_link_pic (info) && abiversion (abfd) != 1) - { - if (!update_plt_info (abfd, &h->plt.plist, rel->r_addend)) - return FALSE; - } break; case R_PPC64_PLT16_HA: @@ -4771,8 +4826,8 @@ h->needs_plt = 1; if (h->root.root.string[0] == '.' && h->root.root.string[1] != '\0') - ((struct ppc_link_hash_entry *) h)->is_func = 1; - ((struct ppc_link_hash_entry *) h)->tls_mask |= PLT_KEEP; + ppc_elf_hash_entry (h)->is_func = 1; + ppc_elf_hash_entry (h)->tls_mask |= PLT_KEEP; plt_list = &h->plt.plist; } if (plt_list == NULL) @@ -4899,7 +4954,7 @@ { Elf_Internal_Sym *isym; - isym = bfd_sym_from_r_symndx (&htab->sym_cache, + isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache, abfd, r_symndx); if (isym == NULL) return FALSE; @@ -4926,7 +4981,7 @@ h->needs_plt = 1; if (h->root.root.string[0] == '.' && h->root.root.string[1] != '\0') - ((struct ppc_link_hash_entry *) h)->is_func = 1; + ppc_elf_hash_entry (h)->is_func = 1; if (h == tga || h == dottga) { @@ -4984,11 +5039,7 @@ dotlstoc: sec->has_tls_reloc = 1; if (h != NULL) - { - struct ppc_link_hash_entry *eh; - eh = (struct ppc_link_hash_entry *) h; - eh->tls_mask |= tls_type & 0xff; - } + ppc_elf_hash_entry (h)->tls_mask |= tls_type & 0xff; else if (!update_local_sym_info (abfd, symtab_hdr, r_symndx, rel->r_addend, tls_type)) @@ -5023,19 +5074,21 @@ ppc64_sec->u.toc.symndx[rel->r_offset / 8 + 1] = -2; goto dodyn; - case R_PPC64_TPREL16: - case R_PPC64_TPREL16_LO: case R_PPC64_TPREL16_HI: case R_PPC64_TPREL16_HA: - case R_PPC64_TPREL16_DS: - case R_PPC64_TPREL16_LO_DS: case R_PPC64_TPREL16_HIGH: case R_PPC64_TPREL16_HIGHA: case R_PPC64_TPREL16_HIGHER: case R_PPC64_TPREL16_HIGHERA: case R_PPC64_TPREL16_HIGHEST: case R_PPC64_TPREL16_HIGHESTA: + sec->has_tls_reloc = 1; + /* Fall through. */ case R_PPC64_TPREL34: + case R_PPC64_TPREL16: + case R_PPC64_TPREL16_DS: + case R_PPC64_TPREL16_LO: + case R_PPC64_TPREL16_LO_DS: if (bfd_link_dll (info)) info->flags |= DF_STATIC_TLS; goto dodyn; @@ -5046,7 +5099,7 @@ && ELF64_R_TYPE ((rel + 1)->r_info) == R_PPC64_TOC) { if (h != NULL) - ((struct ppc_link_hash_entry *) h)->is_func = 1; + ppc_elf_hash_entry (h)->is_func = 1; } /* Fall through. */ @@ -5150,7 +5203,7 @@ struct elf_dyn_relocs *p; struct elf_dyn_relocs **head; - head = &((struct ppc_link_hash_entry *) h)->dyn_relocs; + head = &h->dyn_relocs; p = *head; if (p == NULL || p->sec != sec) { @@ -5179,7 +5232,7 @@ void *vpp; Elf_Internal_Sym *isym; - isym = bfd_sym_from_r_symndx (&htab->sym_cache, + isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache, abfd, r_symndx); if (isym == NULL) return FALSE; @@ -5531,7 +5584,7 @@ && h->type == STT_FUNC && h->root.type == bfd_link_hash_defined && (STO_PPC64_LOCAL_MASK & h->other) == 0 - && !((struct ppc_link_hash_entry *) h)->non_zero_localentry + && !ppc_elf_hash_entry (h)->non_zero_localentry && is_ppc64_elf (h->root.u.def.section->owner) && abiversion (h->root.u.def.section->owner) >= 2); } @@ -5580,6 +5633,29 @@ return NULL; } +/* Given H is a symbol that satisfies is_static_defined, return the + value in the output file. */ + +static bfd_vma +defined_sym_val (struct elf_link_hash_entry *h) +{ + return (h->root.u.def.section->output_section->vma + + h->root.u.def.section->output_offset + + h->root.u.def.value); +} + +/* Return true if H matches __tls_get_addr or one of its variants. */ + +static bfd_boolean +is_tls_get_addr (struct elf_link_hash_entry *h, + struct ppc_link_hash_table *htab) +{ + return (h == (struct elf_link_hash_entry *) htab->tls_get_addr_fd + || h == (struct elf_link_hash_entry *) htab->tga_desc_fd + || h == (struct elf_link_hash_entry *) htab->tls_get_addr + || h == (struct elf_link_hash_entry *) htab->tga_desc); +} + static bfd_boolean func_desc_adjust (struct elf_link_hash_entry *, void *); /* Garbage collect sections, after first dealing with dot-symbols. */ @@ -5613,8 +5689,8 @@ struct ppc_link_hash_entry *eh, *fh; asection *sec; - eh = (struct ppc_link_hash_entry *) - elf_link_hash_lookup (&htab->elf, sym->name, FALSE, FALSE, TRUE); + eh = ppc_elf_hash_entry (elf_link_hash_lookup (&htab->elf, sym->name, + FALSE, FALSE, TRUE)); if (eh == NULL) continue; if (eh->elf.root.type != bfd_link_hash_defined @@ -5646,7 +5722,7 @@ ppc64_elf_gc_mark_dynamic_ref (struct elf_link_hash_entry *h, void *inf) { struct bfd_link_info *info = (struct bfd_link_info *) inf; - struct ppc_link_hash_entry *eh = (struct ppc_link_hash_entry *) h; + struct ppc_link_hash_entry *eh = ppc_elf_hash_entry (h); struct ppc_link_hash_entry *fdh; struct bfd_elf_dynamic_list *d = info->dynamic_list; @@ -5730,7 +5806,7 @@ { case bfd_link_hash_defined: case bfd_link_hash_defweak: - eh = (struct ppc_link_hash_entry *) h; + eh = ppc_elf_hash_entry (h); fdh = defined_func_desc (eh); if (fdh != NULL) { @@ -5826,8 +5902,8 @@ sym[len + 0] = i / 10 + '0'; sym[len + 1] = i % 10 + '0'; - h = (struct ppc_link_hash_entry *) - elf_link_hash_lookup (&htab->elf, sym, writing, TRUE, TRUE); + h = ppc_elf_hash_entry (elf_link_hash_lookup (&htab->elf, sym, + writing, TRUE, TRUE)); if (stub_sec != NULL) { if (h != NULL @@ -6054,6 +6130,84 @@ return p + 4; } +#define STDU_R1_0R1 0xf8210001 +#define ADDI_R1_R1 0x38210000 + +/* Emit prologue of wrapper preserving regs around a call to + __tls_get_addr_opt. */ + +static bfd_byte * +tls_get_addr_prologue (bfd *obfd, bfd_byte *p, struct ppc_link_hash_table *htab) +{ + unsigned int i; + + bfd_put_32 (obfd, MFLR_R0, p); + p += 4; + bfd_put_32 (obfd, STD_R0_0R1 + 16, p); + p += 4; + + if (htab->opd_abi) + { + for (i = 4; i < 12; i++) + { + bfd_put_32 (obfd, + STD_R0_0R1 | i << 21 | (-(13 - i) * 8 & 0xffff), p); + p += 4; + } + bfd_put_32 (obfd, STDU_R1_0R1 | (-128 & 0xffff), p); + p += 4; + } + else + { + for (i = 4; i < 12; i++) + { + bfd_put_32 (obfd, + STD_R0_0R1 | i << 21 | (-(12 - i) * 8 & 0xffff), p); + p += 4; + } + bfd_put_32 (obfd, STDU_R1_0R1 | (-96 & 0xffff), p); + p += 4; + } + return p; +} + +/* Emit epilogue of wrapper preserving regs around a call to + __tls_get_addr_opt. */ + +static bfd_byte * +tls_get_addr_epilogue (bfd *obfd, bfd_byte *p, struct ppc_link_hash_table *htab) +{ + unsigned int i; + + if (htab->opd_abi) + { + for (i = 4; i < 12; i++) + { + bfd_put_32 (obfd, LD_R0_0R1 | i << 21 | (128 - (13 - i) * 8), p); + p += 4; + } + bfd_put_32 (obfd, ADDI_R1_R1 | 128, p); + p += 4; + } + else + { + for (i = 4; i < 12; i++) + { + bfd_put_32 (obfd, LD_R0_0R1 | i << 21 | (96 - (12 - i) * 8), p); + p += 4; + } + bfd_put_32 (obfd, ADDI_R1_R1 | 96, p); + p += 4; + } + bfd_put_32 (obfd, LD_R0_0R1 | 16, p); + p += 4; + bfd_put_32 (obfd, MTLR_R0, p); + p += 4; + bfd_put_32 (obfd, BLR, p); + p += 4; + return p; +} + /* Called via elf_link_hash_traverse to transfer dynamic linking information on function code symbol entries to their corresponding function descriptor symbol entries. */ @@ -6067,7 +6221,7 @@ struct ppc_link_hash_entry *fdh; bfd_boolean force_local; - fh = (struct ppc_link_hash_entry *) h; + fh = ppc_elf_hash_entry (h); if (fh->elf.root.type == bfd_link_hash_indirect) return TRUE; @@ -6245,25 +6399,6 @@ return TRUE; } -/* Find dynamic relocs for H that apply to read-only sections. */ - -static asection * -readonly_dynrelocs (struct elf_link_hash_entry *h) -{ - struct ppc_link_hash_entry *eh; - struct elf_dyn_relocs *p; - - eh = (struct ppc_link_hash_entry *) h; - for (p = eh->dyn_relocs; p != NULL; p = p->next) - { - asection *s = p->sec->output_section; - - if (s != NULL && (s->flags & SEC_READONLY) != 0) - return p->sec; - } - return NULL; -} - /* Return true if we have dynamic relocs against H or any of its weak aliases, that apply to read-only sections. Cannot be used after size_dynamic_sections. */ @@ -6271,14 +6406,12 @@ static bfd_boolean alias_readonly_dynrelocs (struct elf_link_hash_entry *h) { - struct ppc_link_hash_entry *eh; - - eh = (struct ppc_link_hash_entry *) h; + struct ppc_link_hash_entry *eh = ppc_elf_hash_entry (h); do { - if (readonly_dynrelocs (&eh->elf)) + if (_bfd_elf_readonly_dynrelocs (&eh->elf)) return TRUE; - eh = (struct ppc_link_hash_entry *) eh->elf.u.alias; + eh = ppc_elf_hash_entry (eh->elf.u.alias); } while (eh != NULL && &eh->elf != h); @@ -6292,7 +6425,7 @@ { struct elf_dyn_relocs *p; - for (p = eh->dyn_relocs; p != NULL; p = p->next) + for (p = eh->elf.dyn_relocs; p != NULL; p = p->next) if (p->pc_count != 0) return TRUE; return FALSE; @@ -6340,7 +6473,7 @@ || h->type == STT_GNU_IFUNC || h->needs_plt) { - bfd_boolean local = (((struct ppc_link_hash_entry *) h)->save_res + bfd_boolean local = (ppc_elf_hash_entry (h)->save_res || SYMBOL_CALLS_LOCAL (info, h) || UNDEFWEAK_NO_DYNAMIC_RELOC (info, h)); /* Discard dyn_relocs when non-pic if we've decided that a @@ -6355,7 +6488,7 @@ if (!bfd_link_pic (info) && h->type != STT_GNU_IFUNC && local) - ((struct ppc_link_hash_entry *) h)->dyn_relocs = NULL; + h->dyn_relocs = NULL; /* Clear procedure linkage table information for any symbol that won't need a .plt entry. */ @@ -6367,7 +6500,7 @@ || (h->type != STT_GNU_IFUNC && local && (htab->can_convert_all_inline_plt - || (((struct ppc_link_hash_entry *) h)->tls_mask + || (ppc_elf_hash_entry (h)->tls_mask & (TLS_TLS | PLT_KEEP)) != PLT_KEEP))) { h->plt.plist = NULL; @@ -6385,7 +6518,7 @@ extra work in ld.so when resolving these symbols. */ if (global_entry_stub (h)) { - if (!readonly_dynrelocs (h)) + if (!_bfd_elf_readonly_dynrelocs (h)) { h->pointer_equality_needed = 0; /* If we haven't seen a branch reloc and the symbol @@ -6396,14 +6529,14 @@ else if (!bfd_link_pic (info)) /* We are going to be defining the function symbol on the plt stub, so no dyn_relocs needed when non-pic. */ - ((struct ppc_link_hash_entry *) h)->dyn_relocs = NULL; + h->dyn_relocs = NULL; } /* ELFv2 function symbols can't have copy relocs. */ return TRUE; } else if (!h->needs_plt - && !readonly_dynrelocs (h)) + && !_bfd_elf_readonly_dynrelocs (h)) { /* If we haven't seen a branch reloc and the symbol isn't an ifunc then we don't need a plt entry. */ @@ -6426,7 +6559,7 @@ h->root.u.def.value = def->root.u.def.value; if (def->root.u.def.section == htab->elf.sdynbss || def->root.u.def.section == htab->elf.sdynrelro) - ((struct ppc_link_hash_entry *) h)->dyn_relocs = NULL; + h->dyn_relocs = NULL; return TRUE; } @@ -6461,13 +6594,23 @@ || h->protected_def) return TRUE; - if (h->plt.plist != NULL) + if (h->type == STT_FUNC + || h->type == STT_GNU_IFUNC) { - /* We should never get here, but unfortunately there are versions - of gcc out there that improperly (for this ABI) put initialized - function pointers, vtable refs and suchlike in read-only - sections. Allow them to proceed, but warn that this might - break at runtime. */ + /* .dynbss copies of function symbols only work if we have + ELFv1 dot-symbols. ELFv1 compilers since 2004 default to not + use dot-symbols and set the function symbol size to the text + size of the function rather than the size of the descriptor. + That's wrong for copying a descriptor. */ + if (ppc_elf_hash_entry (h)->oh == NULL + || !(h->size == 24 || h->size == 16)) + return TRUE; + + /* We should never get here, but unfortunately there are old + versions of gcc (circa gcc-3.2) that improperly for the + ELFv1 ABI put initialized function pointers, vtable refs and + suchlike in read-only sections. Allow them to proceed, but + warn that this might break at runtime. */ info->callbacks->einfo (_("%P: copy reloc against `%pT' requires lazy plt linking; " "avoid setting LD_BIND_NOW=1 or upgrade gcc\n"), @@ -6506,7 +6649,7 @@ } /* We no longer want dyn_relocs. */ - ((struct ppc_link_hash_entry *) h)->dyn_relocs = NULL; + h->dyn_relocs = NULL; return _bfd_elf_adjust_dynamic_copy (info, h, s); } @@ -6523,7 +6666,7 @@ if (ppc_hash_table (info) == NULL) return; - eh = (struct ppc_link_hash_entry *) h; + eh = ppc_elf_hash_entry (h); if (eh->is_func_descriptor) { struct ppc_link_hash_entry *fh = eh->oh; @@ -6546,8 +6689,8 @@ p = eh->elf.root.root.string - 1; save = *p; *(char *) p = '.'; - fh = (struct ppc_link_hash_entry *) - elf_link_hash_lookup (htab, p, FALSE, FALSE, FALSE); + fh = ppc_elf_hash_entry (elf_link_hash_lookup (htab, p, FALSE, + FALSE, FALSE)); *(char *) p = save; /* Unfortunately, if it so happens that the string we were @@ -6560,8 +6703,8 @@ while (q >= eh->elf.root.root.string && *q == *p) --q, --p; if (q < eh->elf.root.root.string && *p == '.') - fh = (struct ppc_link_hash_entry *) - elf_link_hash_lookup (htab, p, FALSE, FALSE, FALSE); + fh = ppc_elf_hash_entry (elf_link_hash_lookup (htab, p, FALSE, + FALSE, FALSE)); } if (fh != NULL) { @@ -6609,12 +6752,7 @@ } if (tls_maskp != NULL) - { - struct ppc_link_hash_entry *eh; - - eh = (struct ppc_link_hash_entry *) h; - *tls_maskp = &eh->tls_mask; - } + *tls_maskp = &ppc_elf_hash_entry (h)->tls_mask; } else { @@ -6785,7 +6923,7 @@ && h->root.type != bfd_link_hash_defweak) return TRUE; - eh = (struct ppc_link_hash_entry *) h; + eh = ppc_elf_hash_entry (h); if (eh->adjust_done) return TRUE; @@ -6933,7 +7071,7 @@ { struct elf_dyn_relocs *p; struct elf_dyn_relocs **pp; - pp = &((struct ppc_link_hash_entry *) h)->dyn_relocs; + pp = &h->dyn_relocs; /* elf_gc_sweep may have already removed all dyn relocs associated with local syms for a given section. Also, symbol flags are @@ -7186,11 +7324,9 @@ bfd_byte *loc; if (!bfd_malloc_and_get_section (ibfd, sec, &loc)) { - if (loc != NULL) - free (loc); + free (loc); error_ret: - if (local_syms != NULL - && symtab_hdr->contents != (unsigned char *) local_syms) + if (symtab_hdr->contents != (unsigned char *) local_syms) free (local_syms); if (elf_section_data (sec)->relocs != relstart) free (relstart); @@ -7250,7 +7386,7 @@ if (h != NULL && h->root.root.string[0] == '.') { - fdh = ((struct ppc_link_hash_entry *) h)->oh; + fdh = ppc_elf_hash_entry (h)->oh; if (fdh != NULL) { fdh = ppc_follow_link (fdh); @@ -7496,7 +7632,7 @@ return FALSE; relend = relstart + sec->reloc_count; - for (rel = relstart; rel < relend; ) + for (rel = relstart; rel < relend; rel++) { enum elf_ppc64_reloc_type r_type; unsigned long r_symndx; @@ -7516,8 +7652,7 @@ { if (elf_section_data (sec)->relocs != relstart) free (relstart); - if (local_syms != NULL - && symtab_hdr->contents != (bfd_byte *) local_syms) + if (symtab_hdr->contents != (bfd_byte *) local_syms) free (local_syms); return FALSE; } @@ -7566,6 +7701,7 @@ ppc64_elf_tls_setup (struct bfd_link_info *info) { struct ppc_link_hash_table *htab; + struct elf_link_hash_entry *tga, *tga_fd, *desc, *desc_fd; htab = ppc_hash_table (info); if (htab == NULL) @@ -7602,18 +7738,29 @@ (_("warning: --plt-localentry is especially dangerous without " "ld.so support to detect ABI violations")); - htab->tls_get_addr = ((struct ppc_link_hash_entry *) - elf_link_hash_lookup (&htab->elf, ".__tls_get_addr", - FALSE, FALSE, TRUE)); + tga = elf_link_hash_lookup (&htab->elf, ".__tls_get_addr", + FALSE, FALSE, TRUE); + htab->tls_get_addr = ppc_elf_hash_entry (tga); + /* Move dynamic linking info to the function descriptor sym. */ - if (htab->tls_get_addr != NULL) - func_desc_adjust (&htab->tls_get_addr->elf, info); - htab->tls_get_addr_fd = ((struct ppc_link_hash_entry *) - elf_link_hash_lookup (&htab->elf, "__tls_get_addr", - FALSE, FALSE, TRUE)); + if (tga != NULL) + func_desc_adjust (tga, info); + tga_fd = elf_link_hash_lookup (&htab->elf, "__tls_get_addr", + FALSE, FALSE, TRUE); + htab->tls_get_addr_fd = ppc_elf_hash_entry (tga_fd); + + desc = elf_link_hash_lookup (&htab->elf, ".__tls_get_addr_desc", + FALSE, FALSE, TRUE); + htab->tga_desc = ppc_elf_hash_entry (desc); + if (desc != NULL) + func_desc_adjust (desc, info); + desc_fd = elf_link_hash_lookup (&htab->elf, "__tls_get_addr_desc", + FALSE, FALSE, TRUE); + htab->tga_desc_fd = ppc_elf_hash_entry (desc_fd); + if (htab->params->tls_get_addr_opt) { - struct elf_link_hash_entry *opt, *opt_fd, *tga, *tga_fd; + struct elf_link_hash_entry *opt, *opt_fd; opt = elf_link_hash_lookup (&htab->elf, ".__tls_get_addr_opt", FALSE, FALSE, TRUE); @@ -7629,24 +7776,49 @@ signalled by the presence of __tls_get_addr_opt, and we'll be calling __tls_get_addr via a plt call stub, then make __tls_get_addr point to __tls_get_addr_opt. */ - tga_fd = &htab->tls_get_addr_fd->elf; - if (htab->elf.dynamic_sections_created - && tga_fd != NULL - && (tga_fd->type == STT_FUNC - || tga_fd->needs_plt) - && !(SYMBOL_CALLS_LOCAL (info, tga_fd) - || UNDEFWEAK_NO_DYNAMIC_RELOC (info, tga_fd))) - { - struct plt_entry *ent; - - for (ent = tga_fd->plt.plist; ent != NULL; ent = ent->next) - if (ent->plt.refcount > 0) - break; + if (!(htab->elf.dynamic_sections_created + && tga_fd != NULL + && (tga_fd->type == STT_FUNC + || tga_fd->needs_plt) + && !(SYMBOL_CALLS_LOCAL (info, tga_fd) + || UNDEFWEAK_NO_DYNAMIC_RELOC (info, tga_fd)))) + tga_fd = NULL; + if (!(htab->elf.dynamic_sections_created + && desc_fd != NULL + && (desc_fd->type == STT_FUNC + || desc_fd->needs_plt) + && !(SYMBOL_CALLS_LOCAL (info, desc_fd) + || UNDEFWEAK_NO_DYNAMIC_RELOC (info, desc_fd)))) + desc_fd = NULL; + + if (tga_fd != NULL || desc_fd != NULL) + { + struct plt_entry *ent = NULL; + + if (tga_fd != NULL) + for (ent = tga_fd->plt.plist; ent != NULL; ent = ent->next) + if (ent->plt.refcount > 0) + break; + if (ent == NULL && desc_fd != NULL) + for (ent = desc_fd->plt.plist; ent != NULL; ent = ent->next) + if (ent->plt.refcount > 0) + break; if (ent != NULL) { - tga_fd->root.type = bfd_link_hash_indirect; - tga_fd->root.u.i.link = &opt_fd->root; - ppc64_elf_copy_indirect_symbol (info, opt_fd, tga_fd); + if (tga_fd != NULL) + { + tga_fd->root.type = bfd_link_hash_indirect; + tga_fd->root.u.i.link = &opt_fd->root; + tga_fd->root.u.i.warning = NULL; + ppc64_elf_copy_indirect_symbol (info, opt_fd, tga_fd); + } + if (desc_fd != NULL) + { + desc_fd->root.type = bfd_link_hash_indirect; + desc_fd->root.u.i.link = &opt_fd->root; + desc_fd->root.u.i.warning = NULL; + ppc64_elf_copy_indirect_symbol (info, opt_fd, desc_fd); + } opt_fd->mark = 1; if (opt_fd->dynindx != -1) { @@ -7657,25 +7829,50 @@ if (!bfd_elf_link_record_dynamic_symbol (info, opt_fd)) return NULL; } - htab->tls_get_addr_fd - = (struct ppc_link_hash_entry *) opt_fd; - tga = &htab->tls_get_addr->elf; - if (opt != NULL && tga != NULL) + if (tga_fd != NULL) { - tga->root.type = bfd_link_hash_indirect; - tga->root.u.i.link = &opt->root; - ppc64_elf_copy_indirect_symbol (info, opt, tga); - opt->mark = 1; - _bfd_elf_link_hash_hide_symbol (info, opt, - tga->forced_local); - htab->tls_get_addr = (struct ppc_link_hash_entry *) opt; + htab->tls_get_addr_fd = ppc_elf_hash_entry (opt_fd); + tga = (struct elf_link_hash_entry *) htab->tls_get_addr; + if (opt != NULL && tga != NULL) + { + tga->root.type = bfd_link_hash_indirect; + tga->root.u.i.link = &opt->root; + tga->root.u.i.warning = NULL; + ppc64_elf_copy_indirect_symbol (info, opt, tga); + opt->mark = 1; + _bfd_elf_link_hash_hide_symbol (info, opt, + tga->forced_local); + htab->tls_get_addr = ppc_elf_hash_entry (opt); + } + htab->tls_get_addr_fd->oh = htab->tls_get_addr; + htab->tls_get_addr_fd->is_func_descriptor = 1; + if (htab->tls_get_addr != NULL) + { + htab->tls_get_addr->oh = htab->tls_get_addr_fd; + htab->tls_get_addr->is_func = 1; + } } - htab->tls_get_addr_fd->oh = htab->tls_get_addr; - htab->tls_get_addr_fd->is_func_descriptor = 1; - if (htab->tls_get_addr != NULL) + if (desc_fd != NULL) { - htab->tls_get_addr->oh = htab->tls_get_addr_fd; - htab->tls_get_addr->is_func = 1; + htab->tga_desc_fd = ppc_elf_hash_entry (opt_fd); + if (opt != NULL && desc != NULL) + { + desc->root.type = bfd_link_hash_indirect; + desc->root.u.i.link = &opt->root; + desc->root.u.i.warning = NULL; + ppc64_elf_copy_indirect_symbol (info, opt, desc); + opt->mark = 1; + _bfd_elf_link_hash_hide_symbol (info, opt, + desc->forced_local); + htab->tga_desc = ppc_elf_hash_entry (opt); + } + htab->tga_desc_fd->oh = htab->tga_desc; + htab->tga_desc_fd->is_func_descriptor = 1; + if (htab->tga_desc != NULL) + { + htab->tga_desc->oh = htab->tga_desc_fd; + htab->tga_desc->is_func = 1; + } } } } @@ -7683,17 +7880,25 @@ else if (htab->params->tls_get_addr_opt < 0) htab->params->tls_get_addr_opt = 0; } + + if (htab->tga_desc_fd != NULL + && htab->params->tls_get_addr_opt + && htab->params->no_tls_get_addr_regsave == -1) + htab->params->no_tls_get_addr_regsave = 0; + return _bfd_elf_tls_setup (info->output_bfd, info); } /* Return TRUE iff REL is a branch reloc with a global symbol matching - HASH1 or HASH2. */ + any of HASH1, HASH2, HASH3, or HASH4. */ static bfd_boolean branch_reloc_hash_match (const bfd *ibfd, const Elf_Internal_Rela *rel, const struct ppc_link_hash_entry *hash1, - const struct ppc_link_hash_entry *hash2) + const struct ppc_link_hash_entry *hash2, + const struct ppc_link_hash_entry *hash3, + const struct ppc_link_hash_entry *hash4) { Elf_Internal_Shdr *symtab_hdr = &elf_symtab_hdr (ibfd); enum elf_ppc64_reloc_type r_type = ELF64_R_TYPE (rel->r_info); @@ -7706,7 +7911,10 @@ h = sym_hashes[r_symndx - symtab_hdr->sh_info]; h = elf_follow_link (h); - if (h == &hash1->elf || h == &hash2->elf) + if (h == (struct elf_link_hash_entry *) hash1 + || h == (struct elf_link_hash_entry *) hash2 + || h == (struct elf_link_hash_entry *) hash3 + || h == (struct elf_link_hash_entry *) hash4) return TRUE; } return FALSE; @@ -7735,6 +7943,8 @@ if (htab == NULL) return FALSE; + htab->do_tls_opt = 1; + /* Make two passes over the relocs. On the first pass, mark toc entries involved with tls relocs, and check that tls relocs involved in setting up a tls_get_addr call are indeed followed by @@ -7787,11 +7997,9 @@ err_free_rel: if (elf_section_data (sec)->relocs != relstart) free (relstart); - if (toc_ref != NULL) - free (toc_ref); - if (locsyms != NULL - && (elf_symtab_hdr (ibfd).contents - != (unsigned char *) locsyms)) + free (toc_ref); + if (elf_symtab_hdr (ibfd).contents + != (unsigned char *) locsyms) free (locsyms); return ret; } @@ -7847,8 +8055,7 @@ if (pass == 0 && sec->nomark_tls_get_addr && h != NULL - && (h == &htab->tls_get_addr->elf - || h == &htab->tls_get_addr_fd->elf) + && is_tls_get_addr (h, htab) && !found_tls_get_addr_arg && is_branch_reloc (r_type)) { @@ -7864,7 +8071,7 @@ { case R_PPC64_GOT_TLSLD16: case R_PPC64_GOT_TLSLD16_LO: - case R_PPC64_GOT_TLSLD34: + case R_PPC64_GOT_TLSLD_PCREL34: expecting_tls_get_addr = 1; found_tls_get_addr_arg = 1; /* Fall through. */ @@ -7885,7 +8092,7 @@ case R_PPC64_GOT_TLSGD16: case R_PPC64_GOT_TLSGD16_LO: - case R_PPC64_GOT_TLSGD34: + case R_PPC64_GOT_TLSGD_PCREL34: expecting_tls_get_addr = 1; found_tls_get_addr_arg = 1; /* Fall through. */ @@ -7902,7 +8109,7 @@ tls_type = TLS_TLS | TLS_GD; break; - case R_PPC64_GOT_TPREL34: + case R_PPC64_GOT_TPREL_PCREL34: case R_PPC64_GOT_TPREL16_DS: case R_PPC64_GOT_TPREL16_LO_DS: case R_PPC64_GOT_TPREL16_HI: @@ -8042,6 +8249,42 @@ } break; + case R_PPC64_TPREL16_HA: + if (pass == 0) + { + unsigned char buf[4]; + unsigned int insn; + bfd_vma off = rel->r_offset & ~3; + if (!bfd_get_section_contents (ibfd, sec, buf, + off, 4)) + goto err_free_rel; + insn = bfd_get_32 (ibfd, buf); + /* addis rt,13,imm */ + if ((insn & ((0x3fu << 26) | 0x1f << 16)) + != ((15u << 26) | (13 << 16))) + { + /* xgettext:c-format */ + info->callbacks->minfo + (_("%H: warning: %s unexpected insn %#x.\n"), + ibfd, sec, off, "R_PPC64_TPREL16_HA", insn); + htab->do_tls_opt = 0; + } + } + continue; + + case R_PPC64_TPREL16_HI: + case R_PPC64_TPREL16_HIGH: + case R_PPC64_TPREL16_HIGHA: + case R_PPC64_TPREL16_HIGHER: + case R_PPC64_TPREL16_HIGHERA: + case R_PPC64_TPREL16_HIGHEST: + case R_PPC64_TPREL16_HIGHESTA: + /* These can all be used in sequences along with + TPREL16_LO or TPREL16_LO_DS in ways we aren't + able to verify easily. */ + htab->do_tls_opt = 0; + continue; + default: continue; } @@ -8054,8 +8297,10 @@ if (rel + 1 < relend && branch_reloc_hash_match (ibfd, rel + 1, + htab->tls_get_addr_fd, + htab->tga_desc_fd, htab->tls_get_addr, - htab->tls_get_addr_fd)) + htab->tga_desc)) { if (expecting_tls_get_addr == 2) { @@ -8110,15 +8355,29 @@ { struct plt_entry *ent = NULL; - if (htab->tls_get_addr != NULL) + if (htab->tls_get_addr_fd != NULL) + for (ent = htab->tls_get_addr_fd->elf.plt.plist; + ent != NULL; + ent = ent->next) + if (ent->addend == 0) + break; + + if (ent == NULL && htab->tga_desc_fd != NULL) + for (ent = htab->tga_desc_fd->elf.plt.plist; + ent != NULL; + ent = ent->next) + if (ent->addend == 0) + break; + + if (ent == NULL && htab->tls_get_addr != NULL) for (ent = htab->tls_get_addr->elf.plt.plist; ent != NULL; ent = ent->next) if (ent->addend == 0) break; - if (ent == NULL && htab->tls_get_addr_fd != NULL) - for (ent = htab->tls_get_addr_fd->elf.plt.plist; + if (ent == NULL && htab->tga_desc != NULL) + for (ent = htab->tga_desc->elf.plt.plist; ent != NULL; ent = ent->next) if (ent->addend == 0) @@ -8191,9 +8450,7 @@ } } - if (toc_ref != NULL) - free (toc_ref); - htab->do_tls_opt = 1; + free (toc_ref); return TRUE; } @@ -8223,7 +8480,7 @@ && h->root.type != bfd_link_hash_defweak) return TRUE; - eh = (struct ppc_link_hash_entry *) h; + eh = ppc_elf_hash_entry (h); if (eh->adjust_done) return TRUE; @@ -8259,34 +8516,34 @@ static bfd_boolean ok_lo_toc_insn (unsigned int insn, enum elf_ppc64_reloc_type r_type) { - return ((insn & (0x3f << 26)) == 12u << 26 /* addic */ - || (insn & (0x3f << 26)) == 14u << 26 /* addi */ - || (insn & (0x3f << 26)) == 32u << 26 /* lwz */ - || (insn & (0x3f << 26)) == 34u << 26 /* lbz */ - || (insn & (0x3f << 26)) == 36u << 26 /* stw */ - || (insn & (0x3f << 26)) == 38u << 26 /* stb */ - || (insn & (0x3f << 26)) == 40u << 26 /* lhz */ - || (insn & (0x3f << 26)) == 42u << 26 /* lha */ - || (insn & (0x3f << 26)) == 44u << 26 /* sth */ - || (insn & (0x3f << 26)) == 46u << 26 /* lmw */ - || (insn & (0x3f << 26)) == 47u << 26 /* stmw */ - || (insn & (0x3f << 26)) == 48u << 26 /* lfs */ - || (insn & (0x3f << 26)) == 50u << 26 /* lfd */ - || (insn & (0x3f << 26)) == 52u << 26 /* stfs */ - || (insn & (0x3f << 26)) == 54u << 26 /* stfd */ - || (insn & (0x3f << 26)) == 56u << 26 /* lq,lfq */ - || ((insn & (0x3f << 26)) == 57u << 26 /* lxsd,lxssp,lfdp */ + return ((insn & (0x3fu << 26)) == 12u << 26 /* addic */ + || (insn & (0x3fu << 26)) == 14u << 26 /* addi */ + || (insn & (0x3fu << 26)) == 32u << 26 /* lwz */ + || (insn & (0x3fu << 26)) == 34u << 26 /* lbz */ + || (insn & (0x3fu << 26)) == 36u << 26 /* stw */ + || (insn & (0x3fu << 26)) == 38u << 26 /* stb */ + || (insn & (0x3fu << 26)) == 40u << 26 /* lhz */ + || (insn & (0x3fu << 26)) == 42u << 26 /* lha */ + || (insn & (0x3fu << 26)) == 44u << 26 /* sth */ + || (insn & (0x3fu << 26)) == 46u << 26 /* lmw */ + || (insn & (0x3fu << 26)) == 47u << 26 /* stmw */ + || (insn & (0x3fu << 26)) == 48u << 26 /* lfs */ + || (insn & (0x3fu << 26)) == 50u << 26 /* lfd */ + || (insn & (0x3fu << 26)) == 52u << 26 /* stfs */ + || (insn & (0x3fu << 26)) == 54u << 26 /* stfd */ + || (insn & (0x3fu << 26)) == 56u << 26 /* lq,lfq */ + || ((insn & (0x3fu << 26)) == 57u << 26 /* lxsd,lxssp,lfdp */ /* Exclude lfqu by testing reloc. If relocs are ever defined for the reduced D field in psq_lu then those will need testing too. */ && r_type != R_PPC64_TOC16_LO && r_type != R_PPC64_GOT16_LO) - || ((insn & (0x3f << 26)) == 58u << 26 /* ld,lwa */ + || ((insn & (0x3fu << 26)) == 58u << 26 /* ld,lwa */ && (insn & 1) == 0) - || (insn & (0x3f << 26)) == 60u << 26 /* stfq */ - || ((insn & (0x3f << 26)) == 61u << 26 /* lxv,stx{v,sd,ssp},stfdp */ + || (insn & (0x3fu << 26)) == 60u << 26 /* stfq */ + || ((insn & (0x3fu << 26)) == 61u << 26 /* lxv,stx{v,sd,ssp},stfdp */ /* Exclude stfqu. psq_stu as above for psq_lu. */ && r_type != R_PPC64_TOC16_LO && r_type != R_PPC64_GOT16_LO) - || ((insn & (0x3f << 26)) == 62u << 26 /* std,stq */ + || ((insn & (0x3fu << 26)) == 62u << 26 /* std,stq */ && (insn & 1) == 0)); } @@ -8402,6 +8659,15 @@ off = insn2 & 0xffff; break; + case 6: /* lxvp, stxvp */ + if ((insn2 & 0xe) != 0) + return FALSE; + insn1 = ((1ULL << 58) | (1ULL << 52) + | ((insn2 & 1) == 0 ? 58ULL << 26 : 62ULL << 26) + | (insn2 & (31ULL << 21))); + off = insn2 & 0xfff0; + break; + case 62: /* std, stq */ if ((insn2 & 1) != 0) return FALSE; @@ -8623,18 +8889,14 @@ if (used == NULL) { error_ret: - if (local_syms != NULL - && symtab_hdr->contents != (unsigned char *) local_syms) + if (symtab_hdr->contents != (unsigned char *) local_syms) free (local_syms); if (sec != NULL - && relstart != NULL && elf_section_data (sec)->relocs != relstart) free (relstart); - if (toc_relocs != NULL - && elf_section_data (toc)->relocs != toc_relocs) + if (elf_section_data (toc)->relocs != toc_relocs) free (toc_relocs); - if (skip != NULL) - free (skip); + free (skip); return FALSE; } @@ -9001,8 +9263,7 @@ rel_hdr->sh_size = toc->reloc_count * sz; } } - else if (toc_relocs != NULL - && elf_section_data (toc)->relocs != toc_relocs) + else if (elf_section_data (toc)->relocs != toc_relocs) free (toc_relocs); if (local_syms != NULL @@ -9053,11 +9314,9 @@ if (relstart == NULL) { got_error_ret: - if (local_syms != NULL - && symtab_hdr->contents != (unsigned char *) local_syms) + if (symtab_hdr->contents != (unsigned char *) local_syms) free (local_syms); if (sec != NULL - && relstart != NULL && elf_section_data (sec)->relocs != relstart) free (relstart); return FALSE; @@ -9117,7 +9376,7 @@ insn = bfd_get_32 (ibfd, buf); if (insn_check == check_lo ? !ok_lo_toc_insn (insn, r_type) - : ((insn & ((0x3f << 26) | 0x1f << 16)) + : ((insn & ((0x3fu << 26) | 0x1f << 16)) != ((15u << 26) | (2 << 16)) /* addis rt,2,imm */)) { char str[12]; @@ -9160,6 +9419,9 @@ || discarded_section (sym_sec)) continue; + if ((h ? h->type : ELF_ST_TYPE (sym->st_info)) == STT_GNU_IFUNC) + continue; + if (!SYMBOL_REFERENCES_LOCAL (info, h)) continue; @@ -9188,7 +9450,7 @@ rel->r_offset & ~3, 4)) goto got_error_ret; insn = bfd_get_32 (ibfd, buf); - if (((insn & ((0x3f << 26) | 0x1f << 16)) + if (((insn & ((0x3fu << 26) | 0x1f << 16)) != ((15u << 26) | (2 << 16)) /* addis rt,2,imm */)) continue; break; @@ -9201,7 +9463,7 @@ rel->r_offset & ~3, 4)) goto got_error_ret; insn = bfd_get_32 (ibfd, buf); - if ((insn & (0x3f << 26 | 0x3)) != 58u << 26 /* ld */) + if ((insn & (0x3fu << 26 | 0x3)) != 58u << 26 /* ld */) continue; break; @@ -9218,7 +9480,7 @@ if ((insn & (-1u << 18)) != ((1u << 26) | (1u << 20))) continue; insn = bfd_get_32 (ibfd, buf + 4); - if ((insn & (0x3f << 26)) != 57u << 26) + if ((insn & (0x3fu << 26)) != 57u << 26) continue; break; } @@ -9275,7 +9537,7 @@ struct got_entry *gent) { struct ppc_link_hash_table *htab = ppc_hash_table (info); - struct ppc_link_hash_entry *eh = (struct ppc_link_hash_entry *) h; + struct ppc_link_hash_entry *eh = ppc_elf_hash_entry (h); int entsize = (gent->tls_type & eh->tls_mask & (TLS_GD | TLS_LD) ? 16 : 8); int rentsize = (gent->tls_type & eh->tls_mask & TLS_GD @@ -9363,7 +9625,7 @@ if (htab == NULL) return FALSE; - eh = (struct ppc_link_hash_entry *) h; + eh = ppc_elf_hash_entry (h); /* Run through the TLS GD got entries first if we're changing them to TPREL. */ if ((eh->tls_mask & (TLS_TLS | TLS_GDIE)) == (TLS_TLS | TLS_GDIE)) @@ -9429,19 +9691,19 @@ IFUNCs which are handled even in static executables. */ if (!htab->elf.dynamic_sections_created && h->type != STT_GNU_IFUNC) - eh->dyn_relocs = NULL; + h->dyn_relocs = NULL; /* Discard relocs on undefined symbols that must be local. */ else if (h->root.type == bfd_link_hash_undefined && ELF_ST_VISIBILITY (h->other) != STV_DEFAULT) - eh->dyn_relocs = NULL; + h->dyn_relocs = NULL; /* Also discard relocs on undefined weak syms with non-default visibility, or when dynamic_undefined_weak says so. */ else if (UNDEFWEAK_NO_DYNAMIC_RELOC (info, h)) - eh->dyn_relocs = NULL; + h->dyn_relocs = NULL; - if (eh->dyn_relocs != NULL) + if (h->dyn_relocs != NULL) { struct elf_dyn_relocs *p, **pp; @@ -9461,7 +9723,7 @@ avoid writing weird assembly. */ if (SYMBOL_CALLS_LOCAL (info, h)) { - for (pp = &eh->dyn_relocs; (p = *pp) != NULL; ) + for (pp = &h->dyn_relocs; (p = *pp) != NULL; ) { p->count -= p->pc_count; p->pc_count = 0; @@ -9472,7 +9734,7 @@ } } - if (eh->dyn_relocs != NULL) + if (h->dyn_relocs != NULL) { /* Ensure we catch all the cases where this symbol should be made dynamic. */ @@ -9496,14 +9758,14 @@ /* But if that didn't work out, discard dynamic relocs. */ if (h->dynindx == -1) - eh->dyn_relocs = NULL; + h->dyn_relocs = NULL; } else - eh->dyn_relocs = NULL; + h->dyn_relocs = NULL; } /* Finally, allocate space. */ - for (p = eh->dyn_relocs; p != NULL; p = p->next) + for (p = h->dyn_relocs; p != NULL; p = p->next) { asection *sreloc = elf_section_data (p->sec)->sreloc; if (eh->elf.type == STT_GNU_IFUNC) @@ -9524,7 +9786,7 @@ && h->def_regular && !htab->elf.dynamic_sections_created && !htab->can_convert_all_inline_plt - && (((struct ppc_link_hash_entry *) h)->tls_mask + && (ppc_elf_hash_entry (h)->tls_mask & (TLS_TLS | PLT_KEEP)) == PLT_KEEP)) { struct plt_entry *pent; @@ -9682,33 +9944,6 @@ return TRUE; } -/* Set DF_TEXTREL if we find any dynamic relocs that apply to - read-only sections. */ - -static bfd_boolean -maybe_set_textrel (struct elf_link_hash_entry *h, void *inf) -{ - asection *sec; - - if (h->root.type == bfd_link_hash_indirect) - return TRUE; - - sec = readonly_dynrelocs (h); - if (sec != NULL) - { - struct bfd_link_info *info = (struct bfd_link_info *) inf; - - info->flags |= DF_TEXTREL; - info->callbacks->minfo (_("%pB: dynamic relocation against `%pT'" - " in read-only section `%pA'\n"), - sec->owner, h->root.root.string, sec); - - /* Not an error, just cut short the traversal. */ - return FALSE; - } - return TRUE; -} - /* Set the sizes of the dynamic sections. */ static bfd_boolean @@ -10064,8 +10299,10 @@ } tls_opt = (htab->params->tls_get_addr_opt - && htab->tls_get_addr_fd != NULL - && htab->tls_get_addr_fd->elf.plt.plist != NULL); + && ((htab->tls_get_addr_fd != NULL + && htab->tls_get_addr_fd->elf.plt.plist != NULL) + || (htab->tga_desc_fd != NULL + && htab->tga_desc_fd->elf.plt.plist != NULL))); if (tls_opt || !htab->opd_abi) { if (!add_dynamic_entry (DT_PPC64_OPT, tls_opt ? PPC64_OPT_TLS : 0)) @@ -10082,7 +10319,8 @@ /* If any dynamic relocs apply to a read-only section, then we need a DT_TEXTREL entry. */ if ((info->flags & DF_TEXTREL) == 0) - elf_link_hash_traverse (&htab->elf, maybe_set_textrel, info); + elf_link_hash_traverse (&htab->elf, + _bfd_elf_maybe_set_textrel, info); if ((info->flags & DF_TEXTREL) != 0) { @@ -10389,7 +10627,7 @@ } static bfd_byte * -build_powerxx_offset (bfd *abfd, bfd_byte *p, bfd_vma off, int odd, +build_power10_offset (bfd *abfd, bfd_byte *p, bfd_vma off, int odd, bfd_boolean load) { uint64_t insn; @@ -10471,7 +10709,7 @@ } static unsigned int -size_powerxx_offset (bfd_vma off, int odd) +size_power10_offset (bfd_vma off, int odd) { if (off - odd + (1ULL << 33) < 1ULL << 34) return odd + 8; @@ -10482,7 +10720,7 @@ } static unsigned int -num_relocs_for_powerxx_offset (bfd_vma off, int odd) +num_relocs_for_power10_offset (bfd_vma off, int odd) { if (off - odd + (1ULL << 33) < 1ULL << 34) return 1; @@ -10493,7 +10731,7 @@ } static Elf_Internal_Rela * -emit_relocs_for_powerxx_offset (struct bfd_link_info *info, +emit_relocs_for_power10_offset (struct bfd_link_info *info, Elf_Internal_Rela *r, bfd_vma roff, bfd_vma targ, bfd_vma off, int odd) { @@ -10605,14 +10843,14 @@ if (stub_entry->stub_type >= ppc_stub_plt_call_notoc) { - if (htab->powerxx_stubs) + if (htab->params->power10_stubs != 0) { bfd_vma start = (stub_entry->stub_offset + stub_entry->group->stub_sec->output_offset + stub_entry->group->stub_sec->output_section->vma); if (stub_entry->stub_type > ppc_stub_plt_call_notoc) start += 4; - size = 8 + size_powerxx_offset (off, start & 4); + size = 8 + size_power10_offset (off, start & 4); } else size = 8 + size_offset (off - 8); @@ -10641,13 +10879,21 @@ size += 4; } if (stub_entry->h != NULL - && (stub_entry->h == htab->tls_get_addr_fd - || stub_entry->h == htab->tls_get_addr) + && is_tls_get_addr (&stub_entry->h->elf, htab) && htab->params->tls_get_addr_opt) { - size += 7 * 4; - if (stub_entry->stub_type == ppc_stub_plt_call_r2save) - size += 6 * 4; + if (htab->params->no_tls_get_addr_regsave) + { + size += 7 * 4; + if (stub_entry->stub_type == ppc_stub_plt_call_r2save) + size += 6 * 4; + } + else + { + size += 30 * 4; + if (stub_entry->stub_type == ppc_stub_plt_call_r2save) + size += 4; + } } return size; } @@ -10703,8 +10949,8 @@ if (!ALWAYS_USE_FAKE_DEP && plt_load_toc && plt_thread_safe - && !((stub_entry->h == htab->tls_get_addr_fd - || stub_entry->h == htab->tls_get_addr) + && !(stub_entry->h != NULL + && is_tls_get_addr (&stub_entry->h->elf, htab) && htab->params->tls_get_addr_opt)) { bfd_vma pltoff = stub_entry->plt_ent->plt.offset & ~1; @@ -10863,17 +11109,14 @@ /* Build a special .plt call stub for __tls_get_addr. */ -#define LD_R11_0R3 0xe9630000 +#define LD_R0_0R3 0xe8030000 #define LD_R12_0R3 0xe9830000 #define MR_R0_R3 0x7c601b78 -#define CMPDI_R11_0 0x2c2b0000 +#define CMPDI_R0_0 0x2c200000 #define ADD_R3_R12_R13 0x7c6c6a14 #define BEQLR 0x4d820020 #define MR_R3_R0 0x7c030378 -#define STD_R11_0R1 0xf9610000 #define BCTRL 0x4e800421 -#define LD_R11_0R1 0xe9610000 -#define MTLR_R11 0x7d6803a6 static inline bfd_byte * build_tls_get_addr_stub (struct ppc_link_hash_table *htab, @@ -10882,48 +11125,121 @@ { bfd *obfd = htab->params->stub_bfd; bfd_byte *loc = p; + unsigned int i; - bfd_put_32 (obfd, LD_R11_0R3 + 0, p), p += 4; + bfd_put_32 (obfd, LD_R0_0R3 + 0, p), p += 4; bfd_put_32 (obfd, LD_R12_0R3 + 8, p), p += 4; + bfd_put_32 (obfd, CMPDI_R0_0, p), p += 4; bfd_put_32 (obfd, MR_R0_R3, p), p += 4; - bfd_put_32 (obfd, CMPDI_R11_0, p), p += 4; bfd_put_32 (obfd, ADD_R3_R12_R13, p), p += 4; bfd_put_32 (obfd, BEQLR, p), p += 4; bfd_put_32 (obfd, MR_R3_R0, p), p += 4; - if (r != NULL) - r[0].r_offset += 7 * 4; - if (stub_entry->stub_type != ppc_stub_plt_call_r2save) - return build_plt_stub (htab, stub_entry, p, offset, r); - - bfd_put_32 (obfd, MFLR_R11, p), p += 4; - bfd_put_32 (obfd, STD_R11_0R1 + STK_LINKER (htab), p), p += 4; - - if (r != NULL) - r[0].r_offset += 2 * 4; - p = build_plt_stub (htab, stub_entry, p, offset, r); - bfd_put_32 (obfd, BCTRL, p - 4); - - bfd_put_32 (obfd, LD_R2_0R1 + STK_TOC (htab), p), p += 4; - bfd_put_32 (obfd, LD_R11_0R1 + STK_LINKER (htab), p), p += 4; - bfd_put_32 (obfd, MTLR_R11, p), p += 4; - bfd_put_32 (obfd, BLR, p), p += 4; + if (htab->params->no_tls_get_addr_regsave) + { + if (r != NULL) + r[0].r_offset += 7 * 4; + if (stub_entry->stub_type != ppc_stub_plt_call_r2save) + return build_plt_stub (htab, stub_entry, p, offset, r); + + bfd_put_32 (obfd, MFLR_R0, p); + p += 4; + bfd_put_32 (obfd, STD_R0_0R1 + STK_LINKER (htab), p); + p += 4; + + if (r != NULL) + r[0].r_offset += 2 * 4; + p = build_plt_stub (htab, stub_entry, p, offset, r); + bfd_put_32 (obfd, BCTRL, p - 4); + + bfd_put_32 (obfd, LD_R2_0R1 + STK_TOC (htab), p); + p += 4; + bfd_put_32 (obfd, LD_R0_0R1 + STK_LINKER (htab), p); + p += 4; + bfd_put_32 (obfd, MTLR_R0, p); + p += 4; + bfd_put_32 (obfd, BLR, p); + p += 4; + } + else + { + p = tls_get_addr_prologue (obfd, p, htab); + + if (r != NULL) + r[0].r_offset += 18 * 4; + + p = build_plt_stub (htab, stub_entry, p, offset, r); + bfd_put_32 (obfd, BCTRL, p - 4); + + if (stub_entry->stub_type == ppc_stub_plt_call_r2save) + { + bfd_put_32 (obfd, LD_R2_0R1 + STK_TOC (htab), p); + p += 4; + } + + p = tls_get_addr_epilogue (obfd, p, htab); + } if (htab->glink_eh_frame != NULL && htab->glink_eh_frame->size != 0) { bfd_byte *base, *eh; - unsigned int lr_used, delta; base = htab->glink_eh_frame->contents + stub_entry->group->eh_base + 17; eh = base + stub_entry->group->eh_size; - lr_used = stub_entry->stub_offset + (p - 20 - loc); - delta = lr_used - stub_entry->group->lr_restore; - stub_entry->group->lr_restore = lr_used + 16; - eh = eh_advance (htab->elf.dynobj, eh, delta); - *eh++ = DW_CFA_offset_extended_sf; - *eh++ = 65; - *eh++ = -(STK_LINKER (htab) / 8) & 0x7f; - *eh++ = DW_CFA_advance_loc + 4; + if (htab->params->no_tls_get_addr_regsave) + { + unsigned int lr_used, delta; + lr_used = stub_entry->stub_offset + (p - 20 - loc); + delta = lr_used - stub_entry->group->lr_restore; + stub_entry->group->lr_restore = lr_used + 16; + eh = eh_advance (htab->elf.dynobj, eh, delta); + *eh++ = DW_CFA_offset_extended_sf; + *eh++ = 65; + *eh++ = -(STK_LINKER (htab) / 8) & 0x7f; + *eh++ = DW_CFA_advance_loc + 4; + } + else + { + unsigned int cfa_updt, delta; + /* After the bctrl, lr has been modified so we need to emit + .eh_frame info saying the return address is on the stack. In + fact we must put the EH info at or before the call rather + than after it, because the EH info for a call needs to be + specified by that point. + See libgcc/unwind-dw2.c execute_cfa_program. + Any stack pointer update must be described immediately after + the instruction making the change, and since the stdu occurs + after saving regs we put all the reg saves and the cfa + change there. */ + cfa_updt = stub_entry->stub_offset + 18 * 4; + delta = cfa_updt - stub_entry->group->lr_restore; + stub_entry->group->lr_restore + = stub_entry->stub_offset + (p - loc) - 4; + eh = eh_advance (htab->elf.dynobj, eh, delta); + *eh++ = DW_CFA_def_cfa_offset; + if (htab->opd_abi) + { + *eh++ = 128; + *eh++ = 1; + } + else + *eh++ = 96; + *eh++ = DW_CFA_offset_extended_sf; + *eh++ = 65; + *eh++ = (-16 / 8) & 0x7f; + for (i = 4; i < 12; i++) + { + *eh++ = DW_CFA_offset + i; + *eh++ = (htab->opd_abi ? 13 : 12) - i; + } + *eh++ = (DW_CFA_advance_loc + + (stub_entry->group->lr_restore - 8 - cfa_updt) / 4); + *eh++ = DW_CFA_def_cfa_offset; + *eh++ = 0; + for (i = 4; i < 12; i++) + *eh++ = DW_CFA_restore + i; + *eh++ = DW_CFA_advance_loc + 2; + } *eh++ = DW_CFA_restore_extended; *eh++ = 65; stub_entry->group->eh_size = eh - base; @@ -11000,9 +11316,7 @@ h = ppc_follow_link (h->oh); BFD_ASSERT (h->elf.root.type == bfd_link_hash_defined || h->elf.root.type == bfd_link_hash_defweak); - symval = (h->elf.root.u.def.value - + h->elf.root.u.def.section->output_offset - + h->elf.root.u.def.section->output_section->vma); + symval = defined_sym_val (&h->elf); while (num_rel-- != 0) { r->r_info = ELF64_R_INFO (symndx, ELF64_R_TYPE (r->r_info)); @@ -11074,6 +11388,25 @@ stub_entry = (struct ppc_stub_hash_entry *) gen_entry; info = in_arg; + /* Fail if the target section could not be assigned to an output + section. The user should fix his linker script. */ + if (stub_entry->target_section != NULL + && stub_entry->target_section->output_section == NULL + && info->non_contiguous_regions) + info->callbacks->einfo (_("%F%P: Could not assign '%pA' to an output section. " + "Retry without --enable-non-contiguous-regions.\n"), + stub_entry->target_section); + + /* Same for the group. */ + if (stub_entry->group->stub_sec != NULL + && stub_entry->group->stub_sec->output_section == NULL + && info->non_contiguous_regions) + info->callbacks->einfo (_("%F%P: Could not assign group %pA target %pA to an " + "output section. Retry without " + "--enable-non-contiguous-regions.\n"), + stub_entry->group->stub_sec, + stub_entry->target_section); + htab = ppc_hash_table (info); if (htab == NULL) return FALSE; @@ -11352,10 +11685,10 @@ relp = p; num_rel = 0; - if (htab->powerxx_stubs) + if (htab->params->power10_stubs != 0) { bfd_boolean load = stub_entry->stub_type >= ppc_stub_plt_call_notoc; - p = build_powerxx_offset (htab->params->stub_bfd, p, off, odd, load); + p = build_power10_offset (htab->params->stub_bfd, p, off, odd, load); } else { @@ -11391,8 +11724,8 @@ if (info->emitrelocations) { bfd_vma roff = relp - stub_entry->group->stub_sec->contents; - if (htab->powerxx_stubs) - num_rel += num_relocs_for_powerxx_offset (off, odd); + if (htab->params->power10_stubs != 0) + num_rel += num_relocs_for_power10_offset (off, odd); else { num_rel += num_relocs_for_offset (off); @@ -11401,8 +11734,8 @@ r = get_relocs (stub_entry->group->stub_sec, num_rel); if (r == NULL) return FALSE; - if (htab->powerxx_stubs) - r = emit_relocs_for_powerxx_offset (info, r, roff, targ, off, odd); + if (htab->params->power10_stubs != 0) + r = emit_relocs_for_power10_offset (info, r, roff, targ, off, odd); else r = emit_relocs_for_offset (info, r, roff, targ, off); if (stub_entry->stub_type == ppc_stub_long_branch_notoc @@ -11419,7 +11752,7 @@ } } - if (!htab->powerxx_stubs + if (htab->params->power10_stubs == 0 && htab->glink_eh_frame != NULL && htab->glink_eh_frame->size != 0) { @@ -11514,8 +11847,7 @@ r[0].r_addend = targ; } if (stub_entry->h != NULL - && (stub_entry->h == htab->tls_get_addr_fd - || stub_entry->h == htab->tls_get_addr) + && is_tls_get_addr (&stub_entry->h->elf, htab) && htab->params->tls_get_addr_opt) p = build_tls_get_addr_stub (htab, stub_entry, loc, off, r); else @@ -11600,6 +11932,25 @@ if (htab == NULL) return FALSE; + /* Fail if the target section could not be assigned to an output + section. The user should fix his linker script. */ + if (stub_entry->target_section != NULL + && stub_entry->target_section->output_section == NULL + && info->non_contiguous_regions) + info->callbacks->einfo (_("%F%P: Could not assign %pA to an output section. " + "Retry without --enable-non-contiguous-regions.\n"), + stub_entry->target_section); + + /* Same for the group. */ + if (stub_entry->group->stub_sec != NULL + && stub_entry->group->stub_sec->output_section == NULL + && info->non_contiguous_regions) + info->callbacks->einfo (_("%F%P: Could not assign group %pA target %pA to an " + "output section. Retry without " + "--enable-non-contiguous-regions.\n"), + stub_entry->group->stub_sec, + stub_entry->target_section); + /* Make a note of the offset within the stubs for this entry. */ stub_entry->stub_offset = stub_entry->group->stub_sec->size; @@ -11749,16 +12100,16 @@ if (info->emitrelocations) { unsigned int num_rel; - if (htab->powerxx_stubs) - num_rel = num_relocs_for_powerxx_offset (off, odd); + if (htab->params->power10_stubs != 0) + num_rel = num_relocs_for_power10_offset (off, odd); else num_rel = num_relocs_for_offset (off - 8); stub_entry->group->stub_sec->reloc_count += num_rel; stub_entry->group->stub_sec->flags |= SEC_RELOC; } - if (htab->powerxx_stubs) - extra = size_powerxx_offset (off, odd); + if (htab->params->power10_stubs != 0) + extra = size_power10_offset (off, odd); else extra = size_offset (off - 8); /* Include branch insn plus those in the offset sequence. */ @@ -11768,7 +12119,7 @@ calculated. */ off -= extra; - if (!htab->powerxx_stubs) + if (htab->params->power10_stubs == 0) { /* After the bcl, lr has been modified so we need to emit .eh_frame info saying the return address is in r12. */ @@ -11831,8 +12182,8 @@ if (info->emitrelocations) { unsigned int num_rel; - if (htab->powerxx_stubs) - num_rel = num_relocs_for_powerxx_offset (off, odd); + if (htab->params->power10_stubs != 0) + num_rel = num_relocs_for_power10_offset (off, odd); else num_rel = num_relocs_for_offset (off - 8); stub_entry->group->stub_sec->reloc_count += num_rel; @@ -11841,7 +12192,7 @@ size = plt_stub_size (htab, stub_entry, off); - if (!htab->powerxx_stubs) + if (htab->params->power10_stubs == 0) { /* After the bcl, lr has been modified so we need to emit .eh_frame info saying the return address is in r12. */ @@ -11900,24 +12251,27 @@ size = plt_stub_size (htab, stub_entry, off); if (stub_entry->h != NULL - && (stub_entry->h == htab->tls_get_addr_fd - || stub_entry->h == htab->tls_get_addr) + && is_tls_get_addr (&stub_entry->h->elf, htab) && htab->params->tls_get_addr_opt && stub_entry->stub_type == ppc_stub_plt_call_r2save) { - /* After the bctrl, lr has been modified so we need to - emit .eh_frame info saying the return address is - on the stack. In fact we put the EH info specifying - that the return address is on the stack *at* the - call rather than after it, because the EH info for a - call needs to be specified by that point. - See libgcc/unwind-dw2.c execute_cfa_program. */ - lr_used = stub_entry->stub_offset + size - 20; - /* The eh_frame info will consist of a DW_CFA_advance_loc - or variant, DW_CFA_offset_externed_sf, 65, -stackoff, - DW_CFA_advance_loc+4, DW_CFA_restore_extended, 65. */ - delta = lr_used - stub_entry->group->lr_restore; - stub_entry->group->eh_size += eh_advance_size (delta) + 6; + if (htab->params->no_tls_get_addr_regsave) + { + lr_used = stub_entry->stub_offset + size - 20; + /* The eh_frame info will consist of a DW_CFA_advance_loc + or variant, DW_CFA_offset_externed_sf, 65, -stackoff, + DW_CFA_advance_loc+4, DW_CFA_restore_extended, 65. */ + delta = lr_used - stub_entry->group->lr_restore; + stub_entry->group->eh_size += eh_advance_size (delta) + 6; + } + else + { + /* Adjustments to r1 need to be described. */ + unsigned int cfa_updt = stub_entry->stub_offset + 18 * 4; + delta = cfa_updt - stub_entry->group->lr_restore; + stub_entry->group->eh_size += eh_advance_size (delta); + stub_entry->group->eh_size += htab->opd_abi ? 36 : 35; + } stub_entry->group->lr_restore = size - 4; } break; @@ -11939,7 +12293,7 @@ ppc64_elf_setup_section_lists (struct bfd_link_info *info) { unsigned int id; - bfd_size_type amt; + size_t amt; struct ppc_link_hash_table *htab = ppc_hash_table (info); if (htab == NULL) @@ -12349,7 +12703,7 @@ /* Calls to dynamic lib functions go through a plt call stub that uses r2. */ - eh = (struct ppc_link_hash_entry *) h; + eh = ppc_elf_hash_entry (h); if (eh != NULL && (eh->elf.plt.plist != NULL || (eh->oh != NULL @@ -12460,9 +12814,8 @@ } } - if (local_syms != NULL - && (elf_symtab_hdr (isec->owner).contents - != (unsigned char *) local_syms)) + if (elf_symtab_hdr (isec->owner).contents + != (unsigned char *) local_syms) free (local_syms); if (elf_section_data (isec)->relocs != relstart) free (relstart); @@ -12764,6 +13117,9 @@ if (htab == NULL) return FALSE; + if (htab->params->power10_stubs == -1 && !htab->has_power10_relocs) + htab->params->power10_stubs = 0; + if (htab->params->plt_thread_safe == -1 && !bfd_link_executable (info)) htab->params->plt_thread_safe = 1; if (!htab->opd_abi) @@ -12817,6 +13173,40 @@ if (!group_sections (info, stub_group_size, stubs_always_before_branch)) return FALSE; + htab->tga_group = NULL; + if (!htab->params->no_tls_get_addr_regsave + && htab->tga_desc_fd != NULL + && (htab->tga_desc_fd->elf.root.type == bfd_link_hash_undefined + || htab->tga_desc_fd->elf.root.type == bfd_link_hash_undefweak) + && htab->tls_get_addr_fd != NULL + && is_static_defined (&htab->tls_get_addr_fd->elf)) + { + asection *sym_sec, *code_sec, *stub_sec; + bfd_vma sym_value; + struct _opd_sec_data *opd; + + sym_sec = htab->tls_get_addr_fd->elf.root.u.def.section; + sym_value = defined_sym_val (&htab->tls_get_addr_fd->elf); + code_sec = sym_sec; + opd = get_opd_info (sym_sec); + if (opd != NULL) + opd_entry_value (sym_sec, sym_value, &code_sec, NULL, FALSE); + htab->tga_group = htab->sec_info[code_sec->id].u.group; + stub_sec = (*htab->params->add_stub_section) (".tga_desc.stub", + htab->tga_group->link_sec); + if (stub_sec == NULL) + return FALSE; + htab->tga_group->stub_sec = stub_sec; + + htab->tga_desc_fd->elf.root.type = bfd_link_hash_defined; + htab->tga_desc_fd->elf.root.u.def.section = stub_sec; + htab->tga_desc_fd->elf.root.u.def.value = 0; + htab->tga_desc_fd->elf.type = STT_FUNC; + htab->tga_desc_fd->elf.def_regular = 1; + htab->tga_desc_fd->elf.non_elf = 0; + _bfd_elf_link_hash_hide_symbol (info, &htab->tga_desc_fd->elf, TRUE); + } + #define STUB_SHRINK_ITER 20 /* Loop until no stubs added. After iteration 20 of this loop we may exit on a stub section shrinking. This is to break out of a @@ -12922,7 +13312,7 @@ if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms, r_indx, input_bfd)) goto error_ret_free_internal; - hash = (struct ppc_link_hash_entry *) h; + hash = ppc_elf_hash_entry (h); ok_dest = FALSE; fdh = NULL; @@ -13041,10 +13431,10 @@ fact a call needing a TOC adjustment. */ if ((code_sec != NULL && code_sec->output_section != NULL - && (htab->sec_info[code_sec->id].toc_off - != htab->sec_info[section->id].toc_off) && (code_sec->has_toc_reloc - || code_sec->makes_toc_func_call)) + || code_sec->makes_toc_func_call) + && (htab->sec_info[code_sec->id].toc_off + != htab->sec_info[section->id].toc_off)) || (((hash ? hash->elf.other : sym->st_other) & STO_PPC64_LOCAL_MASK) == 1 << STO_PPC64_LOCAL_BIT)) @@ -13058,8 +13448,7 @@ if (stub_type != ppc_stub_plt_call && stub_type != ppc_stub_plt_call_notoc && hash != NULL - && (hash == htab->tls_get_addr - || hash == htab->tls_get_addr_fd) + && is_tls_get_addr (&hash->elf, htab) && section->has_tls_reloc && irela != internal_relocs) { @@ -13069,7 +13458,8 @@ if (!get_tls_mask (&tls_mask, NULL, NULL, &local_syms, irela - 1, input_bfd)) goto error_ret_free_internal; - if ((*tls_mask & TLS_TLS) != 0) + if ((*tls_mask & TLS_TLS) != 0 + && (*tls_mask & (TLS_GD | TLS_LD)) == 0) continue; } @@ -13105,6 +13495,7 @@ if (stub_entry != NULL) { enum ppc_stub_type old_type; + /* A stub has already been created, but it may not be the required type. We shouldn't be transitioning from plt_call to long_branch @@ -13112,6 +13503,39 @@ upgrading from plt_call to plt_call_r2save or from long_branch to long_branch_r2off. */ free (stub_name); + if (htab->params->power10_stubs == -1) + { + /* For --power10-stubs=auto, don't merge _notoc + and other varieties of stubs. (The _both + variety won't be created.) */ + bfd_boolean notoc = r_type == R_PPC64_REL24_NOTOC; + struct ppc_stub_hash_entry *alt_stub + = select_alt_stub (stub_entry, notoc); + + if (alt_stub == NULL) + { + alt_stub = (struct ppc_stub_hash_entry *) + stub_hash_newfunc (NULL, + &htab->stub_hash_table, + stub_entry->root.string); + if (alt_stub == NULL) + { + /* xgettext:c-format */ + _bfd_error_handler + (_("%pB: cannot create stub entry %s"), + section->owner, stub_entry->root.string); + goto error_ret_free_internal; + } + *alt_stub = *stub_entry; + stub_entry->root.next = &alt_stub->root; + if (notoc) + /* Sort notoc stubs first, for no good + reason. */ + alt_stub = stub_entry; + alt_stub->stub_type = stub_type; + } + stub_entry = alt_stub; + } old_type = stub_entry->stub_type; switch (old_type) { @@ -13181,9 +13605,8 @@ if (elf_section_data (section)->relocs == NULL) free (internal_relocs); error_ret_free_local: - if (local_syms != NULL - && (symtab_hdr->contents - != (unsigned char *) local_syms)) + if (symtab_hdr->contents + != (unsigned char *) local_syms) free (local_syms); return FALSE; } @@ -13246,6 +13669,14 @@ stub_sec->flags &= ~SEC_RELOC; } } + if (htab->tga_group != NULL) + { + /* See emit_tga_desc and emit_tga_desc_eh_frame. */ + htab->tga_group->eh_size + = 1 + 2 + (htab->opd_abi != 0) + 3 + 8 * 2 + 3 + 8 + 3; + htab->tga_group->lr_restore = 23 * 4; + htab->tga_group->stub_sec->size = 24 * 4; + } if (htab->stub_iteration <= STUB_SHRINK_ITER || htab->brlt->rawsize < htab->brlt->size) @@ -13309,7 +13740,9 @@ || (htab->stub_iteration > STUB_SHRINK_ITER && htab->brlt->rawsize > htab->brlt->size)) && (htab->glink_eh_frame == NULL - || htab->glink_eh_frame->rawsize == htab->glink_eh_frame->size)) + || htab->glink_eh_frame->rawsize == htab->glink_eh_frame->size) + && (htab->tga_group == NULL + || htab->stub_iteration > 1)) break; /* Ask the linker to do its stuff. */ @@ -13405,6 +13838,8 @@ } maybe_strip_output (info, htab->brlt); + if (htab->relbrlt != NULL) + maybe_strip_output (info, htab->relbrlt); if (htab->glink_eh_frame != NULL) maybe_strip_output (info, htab->glink_eh_frame); @@ -13440,9 +13875,7 @@ && (!is_elf_hash_table (htab) || h->def_regular)) { - TOCstart = (h->root.u.def.value - TOC_BASE_OFF - + h->root.u.def.section->output_offset - + h->root.u.def.section->output_section->vma); + TOCstart = defined_sym_val (h) - TOC_BASE_OFF; _bfd_set_gp_value (obfd, TOCstart); return TOCstart; } @@ -13561,7 +13994,7 @@ { plt = htab->elf.iplt; relplt = htab->elf.irelplt; - htab->local_ifunc_resolver = 1; + htab->elf.ifunc_resolvers = TRUE; if (htab->opd_abi) rela.r_info = ELF64_R_INFO (0, R_PPC64_JMP_IREL); else @@ -13581,10 +14014,7 @@ else relplt = NULL; } - rela.r_addend = (h->root.u.def.value - + h->root.u.def.section->output_offset - + h->root.u.def.section->output_section->vma - + ent->addend); + rela.r_addend = defined_sym_val (h) + ent->addend; if (relplt == NULL) { @@ -13618,7 +14048,7 @@ + ((ent->plt.offset - PLT_INITIAL_ENTRY_SIZE (htab)) / PLT_ENTRY_SIZE (htab) * sizeof (Elf64_External_Rela))); if (h->type == STT_GNU_IFUNC && is_static_defined (h)) - htab->maybe_local_ifunc_resolver = 1; + htab->elf.ifunc_resolvers = TRUE; bfd_elf64_swap_reloca_out (info->output_bfd, &rela, loc); } } @@ -13747,8 +14177,7 @@ if (!get_sym_h (NULL, &sym, &sym_sec, NULL, &local_syms, lplt - local_plt, ibfd)) { - if (local_syms != NULL - && symtab_hdr->contents != (unsigned char *) local_syms) + if (symtab_hdr->contents != (unsigned char *) local_syms) free (local_syms); return FALSE; } @@ -13761,7 +14190,7 @@ if (ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC) { - htab->local_ifunc_resolver = 1; + htab->elf.ifunc_resolvers = TRUE; plt = htab->elf.iplt; relplt = htab->elf.irelplt; } @@ -13820,6 +14249,74 @@ return TRUE; } +/* Emit the static wrapper function preserving registers around a + __tls_get_addr_opt call. */ + +static bfd_boolean +emit_tga_desc (struct ppc_link_hash_table *htab) +{ + asection *stub_sec = htab->tga_group->stub_sec; + unsigned int cfa_updt = 11 * 4; + bfd_byte *p; + bfd_vma to, from, delta; + + BFD_ASSERT (htab->tga_desc_fd->elf.root.type == bfd_link_hash_defined + && htab->tga_desc_fd->elf.root.u.def.section == stub_sec + && htab->tga_desc_fd->elf.root.u.def.value == 0); + to = defined_sym_val (&htab->tls_get_addr_fd->elf); + from = defined_sym_val (&htab->tga_desc_fd->elf) + cfa_updt; + delta = to - from; + if (delta + (1 << 25) >= 1 << 26) + { + _bfd_error_handler (_("__tls_get_addr call offset overflow")); + htab->stub_error = TRUE; + return FALSE; + } + + p = stub_sec->contents; + p = tls_get_addr_prologue (htab->elf.dynobj, p, htab); + bfd_put_32 (stub_sec->owner, B_DOT | 1 | (delta & 0x3fffffc), p); + p += 4; + p = tls_get_addr_epilogue (htab->elf.dynobj, p, htab); + return stub_sec->size == (bfd_size_type) (p - stub_sec->contents); +} + +/* Emit eh_frame describing the static wrapper function. */ + +static bfd_byte * +emit_tga_desc_eh_frame (struct ppc_link_hash_table *htab, bfd_byte *p) +{ + unsigned int cfa_updt = 11 * 4; + unsigned int i; + + *p++ = DW_CFA_advance_loc + cfa_updt / 4; + *p++ = DW_CFA_def_cfa_offset; + if (htab->opd_abi) + { + *p++ = 128; + *p++ = 1; + } + else + *p++ = 96; + *p++ = DW_CFA_offset_extended_sf; + *p++ = 65; + *p++ = (-16 / 8) & 0x7f; + for (i = 4; i < 12; i++) + { + *p++ = DW_CFA_offset + i; + *p++ = (htab->opd_abi ? 13 : 12) - i; + } + *p++ = DW_CFA_advance_loc + 10; + *p++ = DW_CFA_def_cfa_offset; + *p++ = 0; + for (i = 4; i < 12; i++) + *p++ = DW_CFA_restore + i; + *p++ = DW_CFA_advance_loc + 2; + *p++ = DW_CFA_restore_extended; + *p++ = 65; + return p; +} + /* Build all the stubs associated with the current output file. The stubs are kept in a hash table attached to the main linker hash table. This function is called via gldelf64ppc_finish. */ @@ -13979,6 +14476,24 @@ } } + if (htab->tga_group != NULL) + { + htab->tga_group->lr_restore = 23 * 4; + htab->tga_group->stub_sec->size = 24 * 4; + if (!emit_tga_desc (htab)) + return FALSE; + if (htab->glink_eh_frame != NULL + && htab->glink_eh_frame->size != 0) + { + size_t align = 4; + + p = htab->glink_eh_frame->contents; + p += (sizeof (glink_eh_frame_cie) + align - 1) & -align; + p += 17; + htab->tga_group->eh_size = emit_tga_desc_eh_frame (htab, p) - p; + } + } + /* Build .glink global entry stubs, and PLT relocs for globals. */ elf_link_hash_traverse (&htab->elf, build_global_entry_stubs_and_plt, info); @@ -14104,42 +14619,46 @@ if (stats != NULL) { - size_t len; - *stats = bfd_malloc (500); - if (*stats == NULL) - return FALSE; - - len = sprintf (*stats, - ngettext ("linker stubs in %u group\n", - "linker stubs in %u groups\n", - stub_sec_count), - stub_sec_count); - sprintf (*stats + len, _(" branch %lu\n" - " branch toc adj %lu\n" - " branch notoc %lu\n" - " branch both %lu\n" - " long branch %lu\n" - " long toc adj %lu\n" - " long notoc %lu\n" - " long both %lu\n" - " plt call %lu\n" - " plt call save %lu\n" - " plt call notoc %lu\n" - " plt call both %lu\n" - " global entry %lu"), - htab->stub_count[ppc_stub_long_branch - 1], - htab->stub_count[ppc_stub_long_branch_r2off - 1], - htab->stub_count[ppc_stub_long_branch_notoc - 1], - htab->stub_count[ppc_stub_long_branch_both - 1], - htab->stub_count[ppc_stub_plt_branch - 1], - htab->stub_count[ppc_stub_plt_branch_r2off - 1], - htab->stub_count[ppc_stub_plt_branch_notoc - 1], - htab->stub_count[ppc_stub_plt_branch_both - 1], - htab->stub_count[ppc_stub_plt_call - 1], - htab->stub_count[ppc_stub_plt_call_r2save - 1], - htab->stub_count[ppc_stub_plt_call_notoc - 1], - htab->stub_count[ppc_stub_plt_call_both - 1], - htab->stub_count[ppc_stub_global_entry - 1]); + char *groupmsg; + if (asprintf (&groupmsg, + ngettext ("linker stubs in %u group\n", + "linker stubs in %u groups\n", + stub_sec_count), + stub_sec_count) < 0) + *stats = NULL; + else + { + if (asprintf (stats, _("%s" + " branch %lu\n" + " branch toc adj %lu\n" + " branch notoc %lu\n" + " branch both %lu\n" + " long branch %lu\n" + " long toc adj %lu\n" + " long notoc %lu\n" + " long both %lu\n" + " plt call %lu\n" + " plt call save %lu\n" + " plt call notoc %lu\n" + " plt call both %lu\n" + " global entry %lu"), + groupmsg, + htab->stub_count[ppc_stub_long_branch - 1], + htab->stub_count[ppc_stub_long_branch_r2off - 1], + htab->stub_count[ppc_stub_long_branch_notoc - 1], + htab->stub_count[ppc_stub_long_branch_both - 1], + htab->stub_count[ppc_stub_plt_branch - 1], + htab->stub_count[ppc_stub_plt_branch_r2off - 1], + htab->stub_count[ppc_stub_plt_branch_notoc - 1], + htab->stub_count[ppc_stub_plt_branch_both - 1], + htab->stub_count[ppc_stub_plt_call - 1], + htab->stub_count[ppc_stub_plt_call_r2save - 1], + htab->stub_count[ppc_stub_plt_call_notoc - 1], + htab->stub_count[ppc_stub_plt_call_both - 1], + htab->stub_count[ppc_stub_global_entry - 1]) < 0) + *stats = NULL; + free (groupmsg); + } } return TRUE; } @@ -14425,7 +14944,7 @@ } } } - h = (struct ppc_link_hash_entry *) h_elf; + h = ppc_elf_hash_entry (h_elf); if (sec != NULL && discarded_section (sec)) { @@ -14537,7 +15056,7 @@ case R_PPC64_LO_DS_OPT: insn = bfd_get_32 (input_bfd, contents + rel->r_offset - d_offset); - if ((insn & (0x3f << 26)) != 58u << 26) + if ((insn & (0x3fu << 26)) != 58u << 26) abort (); insn += (14u << 26) - (58u << 26); bfd_put_32 (input_bfd, insn, contents + rel->r_offset - d_offset); @@ -14629,7 +15148,7 @@ } break; - case R_PPC64_GOT_TPREL34: + case R_PPC64_GOT_TPREL_PCREL34: if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_TPREL) == 0) { @@ -14679,7 +15198,7 @@ /* For pcrel IE to LE we already have the full offset and thus don't need an addi here. A nop or mr will do. */ - if ((insn & (0x3f << 26)) == 14 << 26) + if ((insn & (0x3fu << 26)) == 14 << 26) { /* Extract regs from addi rt,ra,si. */ unsigned int rt = (insn >> 21) & 0x1f; @@ -14746,8 +15265,10 @@ if (input_section->nomark_tls_get_addr && rel + 1 < relend && branch_reloc_hash_match (input_bfd, rel + 1, + htab->tls_get_addr_fd, + htab->tga_desc_fd, htab->tls_get_addr, - htab->tls_get_addr_fd)) + htab->tga_desc)) offset = rel[1].r_offset; /* We read the low GOT_TLS (or TOC16) insn because we need to keep the destination reg. It may be @@ -14759,7 +15280,7 @@ { /* IE */ insn1 &= (0x1f << 21) | (0x1f << 16); - insn1 |= 58 << 26; /* ld */ + insn1 |= 58u << 26; /* ld */ insn2 = 0x7c636a14; /* add 3,3,13 */ if (offset != (bfd_vma) -1) rel[1].r_info = ELF64_R_INFO (STN_UNDEF, R_PPC64_NONE); @@ -14820,7 +15341,7 @@ } break; - case R_PPC64_GOT_TLSGD34: + case R_PPC64_GOT_TLSGD_PCREL34: if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_GD) == 0) { pinsn = bfd_get_32 (input_bfd, contents + rel->r_offset); @@ -14830,7 +15351,7 @@ { /* IE, pla -> pld */ pinsn += (-2ULL << 56) + (57ULL << 26) - (14ULL << 26); - r_type = R_PPC64_GOT_TPREL34; + r_type = R_PPC64_GOT_TPREL_PCREL34; } else { @@ -14846,7 +15367,7 @@ } break; - case R_PPC64_GOT_TLSLD34: + case R_PPC64_GOT_TLSLD_PCREL34: if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_LD) == 0) { pinsn = bfd_get_32 (input_bfd, contents + rel->r_offset); @@ -15170,6 +15691,7 @@ if (stub_entry->stub_type == ppc_stub_plt_call && !htab->opd_abi && htab->params->plt_localentry0 != 0 + && h != NULL && is_elfv2_localentry0 (&h->elf)) { /* The function doesn't use or change r2. */ @@ -15203,8 +15725,7 @@ || nop == CROR_313131) { if (h != NULL - && (h == htab->tls_get_addr_fd - || h == htab->tls_get_addr) + && is_tls_get_addr (&h->elf, htab) && htab->params->tls_get_addr_opt) { /* Special stub used, leave nop alone. */ @@ -15369,8 +15890,7 @@ || stub_entry->stub_type == ppc_stub_plt_call_r2save || stub_entry->stub_type == ppc_stub_plt_call_both) && !(h != NULL - && (h == htab->tls_get_addr_fd - || h == htab->tls_get_addr) + && is_tls_get_addr (&h->elf, htab) && htab->params->tls_get_addr_opt) && rel + 1 < relend && rel[1].r_offset == rel->r_offset + 4 @@ -15429,12 +15949,15 @@ break; case R_PPC64_GOT16_DS: + if ((h ? h->elf.type : ELF_ST_TYPE (sym->st_info)) == STT_GNU_IFUNC + || !htab->do_toc_opt) + break; from = TOCstart + htab->sec_info[input_section->id].toc_off; if (relocation + addend - from + 0x8000 < 0x10000 - && SYMBOL_REFERENCES_LOCAL (info, &h->elf)) + && (h == NULL || SYMBOL_REFERENCES_LOCAL (info, &h->elf))) { insn = bfd_get_32 (input_bfd, contents + (rel->r_offset & ~3)); - if ((insn & (0x3f << 26 | 0x3)) == 58u << 26 /* ld */) + if ((insn & (0x3fu << 26 | 0x3)) == 58u << 26 /* ld */) { insn += (14u << 26) - (58u << 26); bfd_put_32 (input_bfd, insn, contents + (rel->r_offset & ~3)); @@ -15446,19 +15969,22 @@ case R_PPC64_GOT16_LO_DS: case R_PPC64_GOT16_HA: + if ((h ? h->elf.type : ELF_ST_TYPE (sym->st_info)) == STT_GNU_IFUNC + || !htab->do_toc_opt) + break; from = TOCstart + htab->sec_info[input_section->id].toc_off; if (relocation + addend - from + 0x80008000ULL < 0x100000000ULL - && SYMBOL_REFERENCES_LOCAL (info, &h->elf)) + && (h == NULL || SYMBOL_REFERENCES_LOCAL (info, &h->elf))) { insn = bfd_get_32 (input_bfd, contents + (rel->r_offset & ~3)); - if ((insn & (0x3f << 26 | 0x3)) == 58u << 26 /* ld */) + if ((insn & (0x3fu << 26 | 0x3)) == 58u << 26 /* ld */) { insn += (14u << 26) - (58u << 26); bfd_put_32 (input_bfd, insn, contents + (rel->r_offset & ~3)); r_type = R_PPC64_TOC16_LO; rel->r_info = ELF64_R_INFO (r_symndx, r_type); } - else if ((insn & (0x3f << 26)) == 15u << 26 /* addis */) + else if ((insn & (0x3fu << 26)) == 15u << 26 /* addis */) { r_type = R_PPC64_TOC16_HA; rel->r_info = ELF64_R_INFO (r_symndx, r_type); @@ -15467,32 +15993,38 @@ break; case R_PPC64_GOT_PCREL34: + if ((h ? h->elf.type : ELF_ST_TYPE (sym->st_info)) == STT_GNU_IFUNC + || !htab->do_toc_opt) + break; from = (rel->r_offset + input_section->output_section->vma + input_section->output_offset); - if (relocation - from + (1ULL << 33) < 1ULL << 34 - && SYMBOL_REFERENCES_LOCAL (info, &h->elf)) - { - offset = rel->r_offset; - pinsn = bfd_get_32 (input_bfd, contents + offset); - pinsn <<= 32; - pinsn |= bfd_get_32 (input_bfd, contents + offset + 4); - if ((pinsn & ((-1ULL << 50) | (63ULL << 26))) - == ((1ULL << 58) | (1ULL << 52) | (57ULL << 26) /* pld */)) - { - /* Replace with paddi. */ - pinsn += (2ULL << 56) + (14ULL << 26) - (57ULL << 26); - r_type = R_PPC64_PCREL34; - rel->r_info = ELF64_R_INFO (r_symndx, r_type); - bfd_put_32 (input_bfd, pinsn >> 32, contents + offset); - bfd_put_32 (input_bfd, pinsn, contents + offset + 4); - goto pcrelopt; - } - } - break; + if (!(relocation - from + (1ULL << 33) < 1ULL << 34 + && (h == NULL || SYMBOL_REFERENCES_LOCAL (info, &h->elf)))) + break; + + offset = rel->r_offset; + pinsn = bfd_get_32 (input_bfd, contents + offset); + pinsn <<= 32; + pinsn |= bfd_get_32 (input_bfd, contents + offset + 4); + if ((pinsn & ((-1ULL << 50) | (63ULL << 26))) + != ((1ULL << 58) | (1ULL << 52) | (57ULL << 26) /* pld */)) + break; + + /* Replace with paddi. */ + pinsn += (2ULL << 56) + (14ULL << 26) - (57ULL << 26); + r_type = R_PPC64_PCREL34; + rel->r_info = ELF64_R_INFO (r_symndx, r_type); + bfd_put_32 (input_bfd, pinsn >> 32, contents + offset); + bfd_put_32 (input_bfd, pinsn, contents + offset + 4); + /* Fall through. */ case R_PPC64_PCREL34: - if (SYMBOL_REFERENCES_LOCAL (info, &h->elf)) + if (!htab->params->no_pcrel_opt + && rel + 1 < relend + && rel[1].r_offset == rel->r_offset + && rel[1].r_info == ELF64_R_INFO (0, R_PPC64_PCREL_OPT) + && (h == NULL || SYMBOL_REFERENCES_LOCAL (info, &h->elf))) { offset = rel->r_offset; pinsn = bfd_get_32 (input_bfd, contents + offset); @@ -15502,43 +16034,37 @@ == ((1ULL << 58) | (2ULL << 56) | (1ULL << 52) | (14ULL << 26) /* paddi */)) { - pcrelopt: - if (rel + 1 < relend - && rel[1].r_offset == offset - && rel[1].r_info == ELF64_R_INFO (0, R_PPC64_PCREL_OPT)) + bfd_vma off2 = rel[1].r_addend; + if (off2 == 0) + /* zero means next insn. */ + off2 = 8; + off2 += offset; + if (off2 + 4 <= input_section->size) { - bfd_vma off2 = rel[1].r_addend; - if (off2 == 0) - /* zero means next insn. */ - off2 = 8; - off2 += offset; - if (off2 + 4 <= input_section->size) + uint64_t pinsn2; + bfd_signed_vma addend_off; + pinsn2 = bfd_get_32 (input_bfd, contents + off2); + pinsn2 <<= 32; + if ((pinsn2 & (63ULL << 58)) == 1ULL << 58) + { + if (off2 + 8 > input_section->size) + break; + pinsn2 |= bfd_get_32 (input_bfd, + contents + off2 + 4); + } + if (xlate_pcrel_opt (&pinsn, &pinsn2, &addend_off)) { - uint64_t pinsn2; - bfd_signed_vma addend_off; - pinsn2 = bfd_get_32 (input_bfd, contents + off2); - pinsn2 <<= 32; + addend += addend_off; + rel->r_addend = addend; + bfd_put_32 (input_bfd, pinsn >> 32, + contents + offset); + bfd_put_32 (input_bfd, pinsn, + contents + offset + 4); + bfd_put_32 (input_bfd, pinsn2 >> 32, + contents + off2); if ((pinsn2 & (63ULL << 58)) == 1ULL << 58) - { - if (off2 + 8 > input_section->size) - break; - pinsn2 |= bfd_get_32 (input_bfd, - contents + off2 + 4); - } - if (xlate_pcrel_opt (&pinsn, &pinsn2, &addend_off)) - { - addend += addend_off; - rel->r_addend = addend; - bfd_put_32 (input_bfd, pinsn >> 32, - contents + offset); - bfd_put_32 (input_bfd, pinsn, - contents + offset + 4); - bfd_put_32 (input_bfd, pinsn2 >> 32, - contents + off2); - if ((pinsn2 & (63ULL << 58)) == 1ULL << 58) - bfd_put_32 (input_bfd, pinsn2, - contents + off2 + 4); - } + bfd_put_32 (input_bfd, pinsn2, + contents + off2 + 4); } } } @@ -15578,7 +16104,7 @@ case R_PPC64_GOT_TLSGD16_LO: case R_PPC64_GOT_TLSGD16_HI: case R_PPC64_GOT_TLSGD16_HA: - case R_PPC64_GOT_TLSGD34: + case R_PPC64_GOT_TLSGD_PCREL34: tls_type = TLS_TLS | TLS_GD; goto dogot; @@ -15586,7 +16112,7 @@ case R_PPC64_GOT_TLSLD16_LO: case R_PPC64_GOT_TLSLD16_HI: case R_PPC64_GOT_TLSLD16_HA: - case R_PPC64_GOT_TLSLD34: + case R_PPC64_GOT_TLSLD_PCREL34: tls_type = TLS_TLS | TLS_LD; goto dogot; @@ -15594,7 +16120,7 @@ case R_PPC64_GOT_TPREL16_LO_DS: case R_PPC64_GOT_TPREL16_HI: case R_PPC64_GOT_TPREL16_HA: - case R_PPC64_GOT_TPREL34: + case R_PPC64_GOT_TPREL_PCREL34: tls_type = TLS_TLS | TLS_TPREL; goto dogot; @@ -15602,7 +16128,7 @@ case R_PPC64_GOT_DTPREL16_LO_DS: case R_PPC64_GOT_DTPREL16_HI: case R_PPC64_GOT_DTPREL16_HA: - case R_PPC64_GOT_DTPREL34: + case R_PPC64_GOT_DTPREL_PCREL34: tls_type = TLS_TLS | TLS_DTPREL; goto dogot; @@ -15624,7 +16150,7 @@ struct got_entry *ent; if (tls_type == (TLS_TLS | TLS_LD) - && SYMBOL_REFERENCES_LOCAL (info, &h->elf)) + && (h == NULL || SYMBOL_REFERENCES_LOCAL (info, &h->elf))) ent = ppc64_tlsld_got (input_bfd); else { @@ -15691,10 +16217,8 @@ if (ifunc) { relgot = htab->elf.irelplt; - if (indx == 0) - htab->local_ifunc_resolver = 1; - else if (is_static_defined (&h->elf)) - htab->maybe_local_ifunc_resolver = 1; + if (indx == 0 || is_static_defined (&h->elf)) + htab->elf.ifunc_resolvers = TRUE; } else if (indx != 0 || (bfd_link_pic (info) @@ -15702,7 +16226,9 @@ || !UNDEFWEAK_NO_DYNAMIC_RELOC (info, &h->elf)) && !(tls_type != 0 && bfd_link_executable (info) - && SYMBOL_REFERENCES_LOCAL (info, &h->elf)))) + && (h == NULL + || SYMBOL_REFERENCES_LOCAL (info, + &h->elf))))) relgot = ppc64_elf_tdata (ent->owner)->relgot; if (relgot != NULL) { @@ -15801,10 +16327,10 @@ relocation = got->output_section->vma + got->output_offset + off; addend = 0; if (!(r_type == R_PPC64_GOT_PCREL34 - || r_type == R_PPC64_GOT_TLSGD34 - || r_type == R_PPC64_GOT_TLSLD34 - || r_type == R_PPC64_GOT_TPREL34 - || r_type == R_PPC64_GOT_DTPREL34)) + || r_type == R_PPC64_GOT_TLSGD_PCREL34 + || r_type == R_PPC64_GOT_TLSLD_PCREL34 + || r_type == R_PPC64_GOT_TPREL_PCREL34 + || r_type == R_PPC64_GOT_DTPREL_PCREL34)) addend = -(TOCstart + htab->sec_info[input_section->id].toc_off); } break; @@ -16058,11 +16584,11 @@ if (bfd_link_pic (info) ? ((h == NULL - || h->dyn_relocs != NULL) + || h->elf.dyn_relocs != NULL) && ((h != NULL && pc_dynrelocs (h)) || must_be_dyn_reloc (info, r_type))) : (h != NULL - ? h->dyn_relocs != NULL + ? h->elf.dyn_relocs != NULL : ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC)) { bfd_boolean skip, relocate; @@ -16101,7 +16627,8 @@ if (skip) memset (&outrel, 0, sizeof outrel); - else if (!SYMBOL_REFERENCES_LOCAL (info, &h->elf) + else if (h != NULL + && !SYMBOL_REFERENCES_LOCAL (info, &h->elf) && !is_opd && r_type != R_PPC64_TOC) { @@ -16223,10 +16750,8 @@ : ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC) { sreloc = htab->elf.irelplt; - if (indx == 0) - htab->local_ifunc_resolver = 1; - else if (is_static_defined (&h->elf)) - htab->maybe_local_ifunc_resolver = 1; + if (indx == 0 || is_static_defined (&h->elf)) + htab->elf.ifunc_resolvers = TRUE; } if (sreloc == NULL) abort (); @@ -16418,10 +16943,10 @@ { bfd_byte *p = contents + (rel->r_offset & ~3); insn = bfd_get_32 (input_bfd, p); - if ((insn & (0x3f << 26)) == 12u << 26 /* addic */) + if ((insn & (0x3fu << 26)) == 12u << 26 /* addic */) { /* Transform addic to addi when we change reg. */ - insn &= ~((0x3f << 26) | (0x1f << 16)); + insn &= ~((0x3fu << 26) | (0x1f << 16)); insn |= (14u << 26) | (2 << 16); } else @@ -16437,19 +16962,8 @@ if (htab->do_tls_opt && relocation + addend + 0x8000 < 0x10000) { bfd_byte *p = contents + (rel->r_offset & ~3); - insn = bfd_get_32 (input_bfd, p); - if ((insn & ((0x3f << 26) | 0x1f << 16)) - != ((15u << 26) | (13 << 16)) /* addis rt,13,imm */) - /* xgettext:c-format */ - info->callbacks->minfo - (_("%H: warning: %s unexpected insn %#x.\n"), - input_bfd, input_section, rel->r_offset, - ppc64_elf_howto_table[r_type]->name, insn); - else - { - bfd_put_32 (input_bfd, NOP, p); - goto copy_reloc; - } + bfd_put_32 (input_bfd, NOP, p); + goto copy_reloc; } break; @@ -16547,8 +17061,8 @@ forms of all the _DS relocs bloats all reloc switches in this file. It doesn't make much sense to use these relocs in data, so testing the insn should be safe. */ - if ((insn & (0x3f << 26)) == (56u << 26) - || ((insn & (0x3f << 26)) == (61u << 26) && (insn & 3) == 1)) + if ((insn & (0x3fu << 26)) == (56u << 26) + || ((insn & (0x3fu << 26)) == (61u << 26) && (insn & 3) == 1)) mask = 15; relocation += addend; addend = insn & (mask ^ 3); @@ -16597,15 +17111,15 @@ enum complain_overflow complain = complain_overflow_signed; insn = bfd_get_32 (input_bfd, contents + (rel->r_offset & ~3)); - if ((insn & (0x3f << 26)) == 10u << 26 /* cmpli */) + if ((insn & (0x3fu << 26)) == 10u << 26 /* cmpli */) complain = complain_overflow_bitfield; else if (howto->rightshift == 0 - ? ((insn & (0x3f << 26)) == 28u << 26 /* andi */ - || (insn & (0x3f << 26)) == 24u << 26 /* ori */ - || (insn & (0x3f << 26)) == 26u << 26 /* xori */) - : ((insn & (0x3f << 26)) == 29u << 26 /* andis */ - || (insn & (0x3f << 26)) == 25u << 26 /* oris */ - || (insn & (0x3f << 26)) == 27u << 26 /* xoris */)) + ? ((insn & (0x3fu << 26)) == 28u << 26 /* andi */ + || (insn & (0x3fu << 26)) == 24u << 26 /* ori */ + || (insn & (0x3fu << 26)) == 26u << 26 /* xori */) + : ((insn & (0x3fu << 26)) == 29u << 26 /* andis */ + || (insn & (0x3fu << 26)) == 25u << 26 /* oris */ + || (insn & (0x3fu << 26)) == 27u << 26 /* xoris */)) complain = complain_overflow_unsigned; if (howto->complain_on_overflow != complain) { @@ -16626,10 +17140,10 @@ case R_PPC64_GOT_PCREL34: case R_PPC64_TPREL34: case R_PPC64_DTPREL34: - case R_PPC64_GOT_TLSGD34: - case R_PPC64_GOT_TLSLD34: - case R_PPC64_GOT_TPREL34: - case R_PPC64_GOT_DTPREL34: + case R_PPC64_GOT_TLSGD_PCREL34: + case R_PPC64_GOT_TLSLD_PCREL34: + case R_PPC64_GOT_TPREL_PCREL34: + case R_PPC64_GOT_DTPREL_PCREL34: case R_PPC64_PLT_PCREL34: case R_PPC64_PLT_PCREL34_NOTOC: case R_PPC64_D28: @@ -16715,11 +17229,10 @@ && (h->elf.root.type == bfd_link_hash_undefweak || h->elf.root.type == bfd_link_hash_undefined) && is_branch_reloc (r_type)))) - info->callbacks->reloc_overflow (info, &h->elf.root, - sym_name, reloc_name, - orig_rel.r_addend, - input_bfd, input_section, - rel->r_offset); + info->callbacks->reloc_overflow + (info, (struct bfd_link_hash_entry *) h, sym_name, + reloc_name, orig_rel.r_addend, input_bfd, input_section, + rel->r_offset); } else { @@ -16730,8 +17243,7 @@ reloc_name, sym_name, (int) r); ret = FALSE; } - if (more_info != NULL) - free (more_info); + free (more_info); } copy_reloc: if (wrel != rel) @@ -16863,9 +17375,7 @@ if (h->dynindx == -1) abort (); - rela.r_offset = (h->root.u.def.value - + h->root.u.def.section->output_section->vma - + h->root.u.def.section->output_offset); + rela.r_offset = defined_sym_val (h); rela.r_info = ELF64_R_INFO (h->dynindx, R_PPC64_COPY); rela.r_addend = 0; if (h->root.u.def.section == htab->elf.sdynrelro) @@ -16993,11 +17503,7 @@ break; case DT_TEXTREL: - if (htab->local_ifunc_resolver) - info->callbacks->einfo - (_("%X%P: text relocations and GNU indirect " - "functions will result in a segfault at runtime\n")); - else if (htab->maybe_local_ifunc_resolver) + if (htab->elf.ifunc_resolvers) info->callbacks->einfo (_("%P: warning: text relocations and GNU indirect " "functions may result in a segfault at runtime\n")); diff -Nru gdb-9.1/bfd/elf64-ppc.h gdb-10.2/bfd/elf64-ppc.h --- gdb-9.1/bfd/elf64-ppc.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf64-ppc.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* PowerPC64-specific support for 64-bit ELF. - Copyright (C) 2002-2019 Free Software Foundation, Inc. + Copyright (C) 2002-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -36,6 +36,9 @@ /* Whether to use a special call stub for __tls_get_addr. */ int tls_get_addr_opt; + /* Whether the special call stub should save r4..r12. */ + int no_tls_get_addr_regsave; + /* Whether to allow multiple toc sections. */ int no_multi_toc; @@ -51,6 +54,12 @@ /* Set if PLT call stubs for localentry:0 functions should omit r2 save. */ int plt_localentry0; + /* Whether to use power10 instructions in linkage stubs. */ + int power10_stubs; + + /* Whether R_PPC64_PCREL_OPT should be ignored. */ + int no_pcrel_opt; + /* Whether to canonicalize .opd so that there are no overlapping .opd entries. */ int non_overlapping_opd; diff -Nru gdb-9.1/bfd/elf64-s390.c gdb-10.2/bfd/elf64-s390.c --- gdb-9.1/bfd/elf64-s390.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf64-s390.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* IBM S/390-specific support for 64-bit ELF - Copyright (C) 2000-2019 Free Software Foundation, Inc. + Copyright (C) 2000-2020 Free Software Foundation, Inc. Contributed Martin Schwidefsky (schwidefsky@de.ibm.com). This file is part of BFD, the Binary File Descriptor library. @@ -571,9 +571,6 @@ { struct elf_link_hash_entry elf; - /* Track dynamic relocs copied for this symbol. */ - struct elf_dyn_relocs *dyn_relocs; - /* Number of GOTPLT references for a function. */ bfd_signed_vma gotplt_refcount; @@ -666,9 +663,6 @@ bfd_vma offset; } tls_ldm_got; - /* Small local sym cache. */ - struct sym_cache sym_cache; - /* Options passed from the linker. */ struct s390_elf_params *params; }; @@ -676,8 +670,9 @@ /* Get the s390 ELF linker hash table from a link_info structure. */ #define elf_s390_hash_table(p) \ - (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \ - == S390_ELF_DATA ? ((struct elf_s390_link_hash_table *) ((p)->hash)) : NULL) + ((is_elf_hash_table ((p)->hash) \ + && elf_hash_table_id (elf_hash_table (p)) == S390_ELF_DATA) \ + ? (struct elf_s390_link_hash_table *) (p)->hash : NULL) #define ELF64 1 #include "elf-s390-common.c" @@ -706,7 +701,6 @@ struct elf_s390_link_hash_entry *eh; eh = (struct elf_s390_link_hash_entry *) entry; - eh->dyn_relocs = NULL; eh->gotplt_refcount = 0; eh->tls_type = GOT_UNKNOWN; eh->ifunc_resolver_address = 0; @@ -722,7 +716,7 @@ elf_s390_link_hash_table_create (bfd *abfd) { struct elf_s390_link_hash_table *ret; - bfd_size_type amt = sizeof (struct elf_s390_link_hash_table); + size_t amt = sizeof (struct elf_s390_link_hash_table); ret = (struct elf_s390_link_hash_table *) bfd_zmalloc (amt); if (ret == NULL) @@ -751,37 +745,6 @@ edir = (struct elf_s390_link_hash_entry *) dir; eind = (struct elf_s390_link_hash_entry *) ind; - if (eind->dyn_relocs != NULL) - { - if (edir->dyn_relocs != NULL) - { - struct elf_dyn_relocs **pp; - struct elf_dyn_relocs *p; - - /* Add reloc counts against the indirect sym to the direct sym - list. Merge any entries against the same section. */ - for (pp = &eind->dyn_relocs; (p = *pp) != NULL; ) - { - struct elf_dyn_relocs *q; - - for (q = edir->dyn_relocs; q != NULL; q = q->next) - if (q->sec == p->sec) - { - q->pc_count += p->pc_count; - q->count += p->count; - *pp = p->next; - break; - } - if (q == NULL) - pp = &p->next; - } - *pp = edir->dyn_relocs; - } - - edir->dyn_relocs = eind->dyn_relocs; - eind->dyn_relocs = NULL; - } - if (ind->root.type == bfd_link_hash_indirect && dir->got.refcount <= 0) { @@ -887,7 +850,7 @@ if (r_symndx < symtab_hdr->sh_info) { /* A local symbol. */ - isym = bfd_sym_from_r_symndx (&htab->sym_cache, + isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache, abfd, r_symndx); if (isym == NULL) return FALSE; @@ -1241,7 +1204,7 @@ relocations we need for this symbol. */ if (h != NULL) { - head = &((struct elf_s390_link_hash_entry *) h)->dyn_relocs; + head = &h->dyn_relocs; } else { @@ -1251,7 +1214,7 @@ asection *s; void *vpp; - isym = bfd_sym_from_r_symndx (&htab->sym_cache, + isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache, abfd, r_symndx); if (isym == NULL) return FALSE; @@ -1267,7 +1230,7 @@ p = *head; if (p == NULL || p->sec != sec) { - bfd_size_type amt = sizeof *p; + size_t amt = sizeof *p; p = ((struct elf_dyn_relocs *) bfd_alloc (htab->elf.dynobj, amt)); if (p == NULL) @@ -1356,23 +1319,6 @@ h->gotplt_refcount = -1; } -/* Find dynamic relocs for H that apply to read-only sections. */ - -static asection * -readonly_dynrelocs (struct elf_link_hash_entry *h) -{ - struct elf_dyn_relocs *p; - - for (p = elf_s390_hash_entry (h)->dyn_relocs; p != NULL; p = p->next) - { - asection *s = p->sec->output_section; - - if (s != NULL && (s->flags & SEC_READONLY) != 0) - return p->sec; - } - return NULL; -} - /* Adjust a symbol defined by a dynamic object and referenced by a regular object. The current definition is in some section of the dynamic object, but we're not including those sections. We have to @@ -1395,11 +1341,9 @@ { bfd_size_type pc_count = 0, count = 0; struct elf_dyn_relocs **pp; - struct elf_s390_link_hash_entry *eh; struct elf_dyn_relocs *p; - eh = (struct elf_s390_link_hash_entry *) h; - for (pp = &eh->dyn_relocs; (p = *pp) != NULL; ) + for (pp = &h->dyn_relocs; (p = *pp) != NULL; ) { pc_count += p->pc_count; p->count -= p->pc_count; @@ -1498,7 +1442,7 @@ /* If we don't find any dynamic relocs in read-only sections, then we'll be keeping the dynamic relocs and avoiding the copy reloc. */ - if (ELIMINATE_COPY_RELOCS && !readonly_dynrelocs (h)) + if (ELIMINATE_COPY_RELOCS && !_bfd_elf_readonly_dynrelocs (h)) { h->non_got_ref = 0; return TRUE; @@ -1549,7 +1493,6 @@ { struct bfd_link_info *info; struct elf_s390_link_hash_table *htab; - struct elf_s390_link_hash_entry *eh = (struct elf_s390_link_hash_entry *)h; struct elf_dyn_relocs *p; if (h->root.type == bfd_link_hash_indirect) @@ -1680,7 +1623,7 @@ else h->got.offset = (bfd_vma) -1; - if (eh->dyn_relocs == NULL) + if (h->dyn_relocs == NULL) return TRUE; /* In the shared -Bsymbolic case, discard space allocated for @@ -1695,7 +1638,7 @@ { struct elf_dyn_relocs **pp; - for (pp = &eh->dyn_relocs; (p = *pp) != NULL; ) + for (pp = &h->dyn_relocs; (p = *pp) != NULL; ) { p->count -= p->pc_count; p->pc_count = 0; @@ -1708,12 +1651,12 @@ /* Also discard relocs on undefined weak syms with non-default visibility. */ - if (eh->dyn_relocs != NULL + if (h->dyn_relocs != NULL && h->root.type == bfd_link_hash_undefweak) { if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT || UNDEFWEAK_NO_DYNAMIC_RELOC (info, h)) - eh->dyn_relocs = NULL; + h->dyn_relocs = NULL; /* Make sure undefined weak symbols are output as a dynamic symbol in PIEs. */ @@ -1753,13 +1696,13 @@ goto keep; } - eh->dyn_relocs = NULL; + h->dyn_relocs = NULL; keep: ; } /* Finally, allocate space. */ - for (p = eh->dyn_relocs; p != NULL; p = p->next) + for (p = h->dyn_relocs; p != NULL; p = p->next) { asection *sreloc = elf_section_data (p->sec)->sreloc; sreloc->size += p->count * sizeof (Elf64_External_Rela); @@ -1768,33 +1711,6 @@ return TRUE; } -/* Set DF_TEXTREL if we find any dynamic relocs that apply to - read-only sections. */ - -static bfd_boolean -maybe_set_textrel (struct elf_link_hash_entry *h, void *info_p) -{ - asection *sec; - - if (h->root.type == bfd_link_hash_indirect) - return TRUE; - - sec = readonly_dynrelocs (h); - if (sec != NULL) - { - struct bfd_link_info *info = (struct bfd_link_info *) info_p; - - info->flags |= DF_TEXTREL; - info->callbacks->minfo - (_("%pB: dynamic relocation against `%pT' in read-only section `%pA'\n"), - sec->owner, h->root.root.string, sec); - - /* Not an error, just cut short the traversal. */ - return FALSE; - } - return TRUE; -} - /* Set the sizes of the dynamic sections. */ static bfd_boolean @@ -2001,53 +1917,7 @@ return FALSE; } - if (htab->elf.dynamic_sections_created) - { - /* Add some entries to the .dynamic section. We fill in the - values later, in elf_s390_finish_dynamic_sections, but we - must add the entries now so that we get the correct size for - the .dynamic section. The DT_DEBUG entry is filled in by the - dynamic linker and used by the debugger. */ -#define add_dynamic_entry(TAG, VAL) \ - _bfd_elf_add_dynamic_entry (info, TAG, VAL) - - if (bfd_link_executable (info)) - { - if (!add_dynamic_entry (DT_DEBUG, 0)) - return FALSE; - } - - if (htab->elf.splt->size != 0) - { - if (!add_dynamic_entry (DT_PLTGOT, 0) - || !add_dynamic_entry (DT_PLTRELSZ, 0) - || !add_dynamic_entry (DT_PLTREL, DT_RELA) - || !add_dynamic_entry (DT_JMPREL, 0)) - return FALSE; - } - - if (relocs) - { - if (!add_dynamic_entry (DT_RELA, 0) - || !add_dynamic_entry (DT_RELASZ, 0) - || !add_dynamic_entry (DT_RELAENT, sizeof (Elf64_External_Rela))) - return FALSE; - - /* If any dynamic relocs apply to a read-only section, - then we need a DT_TEXTREL entry. */ - if ((info->flags & DF_TEXTREL) == 0) - elf_link_hash_traverse (&htab->elf, maybe_set_textrel, info); - - if ((info->flags & DF_TEXTREL) != 0) - { - if (!add_dynamic_entry (DT_TEXTREL, 0)) - return FALSE; - } - } - } -#undef add_dynamic_entry - - return TRUE; + return _bfd_elf_add_dynamic_tags (output_bfd, info, relocs); } /* Return the base VMA address which should be subtracted from real addresses @@ -2386,7 +2256,7 @@ & 0xff00f000) == 0xe300c000 && bfd_get_8 (input_bfd, contents + rel->r_offset + 3) == 0x04)) - && (isym = bfd_sym_from_r_symndx (&htab->sym_cache, + && (isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache, input_bfd, r_symndx)) && isym->st_shndx != SHN_ABS && h != htab->elf.hdynamic @@ -3700,7 +3570,7 @@ if (local_plt[i].plt.offset != (bfd_vma) -1) { asection *sec = local_plt[i].sec; - isym = bfd_sym_from_r_symndx (&htab->sym_cache, ibfd, i); + isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache, ibfd, i); if (isym == NULL) return FALSE; diff -Nru gdb-9.1/bfd/elf64-sparc.c gdb-10.2/bfd/elf64-sparc.c --- gdb-9.1/bfd/elf64-sparc.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf64-sparc.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* SPARC-specific support for 64-bit ELF - Copyright (C) 1993-2019 Free Software Foundation, Inc. + Copyright (C) 1993-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -79,13 +79,11 @@ bfd_size_type count; arelent *relents; - allocated = bfd_malloc (rel_hdr->sh_size); + if (bfd_seek (abfd, rel_hdr->sh_offset, SEEK_SET) != 0) + return FALSE; + allocated = _bfd_malloc_and_read (abfd, rel_hdr->sh_size, rel_hdr->sh_size); if (allocated == NULL) - goto error_return; - - if (bfd_seek (abfd, rel_hdr->sh_offset, SEEK_SET) != 0 - || bfd_bread (allocated, rel_hdr->sh_size, abfd) != rel_hdr->sh_size) - goto error_return; + return FALSE; native_relocs = (bfd_byte *) allocated; @@ -163,14 +161,11 @@ canon_reloc_count (asect) += relent - relents; - if (allocated != NULL) - free (allocated); - + free (allocated); return TRUE; error_return: - if (allocated != NULL) - free (allocated); + free (allocated); return FALSE; } diff -Nru gdb-9.1/bfd/elf64-tilegx.c gdb-10.2/bfd/elf64-tilegx.c --- gdb-9.1/bfd/elf64-tilegx.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf64-tilegx.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* TILE-Gx-specific support for 64-bit ELF. - Copyright (C) 2011-2019 Free Software Foundation, Inc. + Copyright (C) 2011-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/elf64-tilegx.h gdb-10.2/bfd/elf64-tilegx.h --- gdb-9.1/bfd/elf64-tilegx.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf64-tilegx.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* TILE-Gx-specific support for 64-bit ELF. - Copyright (C) 2011-2019 Free Software Foundation, Inc. + Copyright (C) 2011-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/elf64-x86-64.c gdb-10.2/bfd/elf64-x86-64.c --- gdb-9.1/bfd/elf64-x86-64.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf64-x86-64.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* X86-64 specific support for ELF - Copyright (C) 2000-2019 Free Software Foundation, Inc. + Copyright (C) 2000-2020 Free Software Foundation, Inc. Contributed by Jan Hubicka . This file is part of BFD, the Binary File Descriptor library. @@ -20,7 +20,6 @@ MA 02110-1301, USA. */ #include "elfxx-x86.h" -#include "elf-nacl.h" #include "dwarf2.h" #include "libiberty.h" @@ -196,9 +195,6 @@ FALSE) }; -/* Set if a relocation is converted from a GOTPCREL relocation. */ -#define R_X86_64_converted_reloc_bit (1 << 7) - #define X86_PCREL_TYPE_P(TYPE) \ ( ((TYPE) == R_X86_64_PC8) \ || ((TYPE) == R_X86_64_PC16) \ @@ -988,12 +984,6 @@ sizeof (elf_x86_64_eh_frame_non_lazy_plt) /* eh_frame_plt_size */ }; -static const struct elf_x86_backend_data elf_x86_64_arch_bed = - { - is_normal /* os */ - }; - -#define elf_backend_arch_data &elf_x86_64_arch_bed static bfd_boolean elf64_x86_64_elf_object_p (bfd *abfd) @@ -1223,7 +1213,8 @@ case R_X86_64_GOTPC32_TLSDESC: /* Check transition from GDesc access model: - leaq x@tlsdesc(%rip), %rax + leaq x@tlsdesc(%rip), %rax <--- LP64 mode. + rex leal x@tlsdesc(%rip), %eax <--- X32 mode. Make sure it's a leaq adding rip to a 32-bit offset into any register, although it's probably almost always @@ -1233,7 +1224,8 @@ return FALSE; val = bfd_get_8 (abfd, contents + offset - 3); - if ((val & 0xfb) != 0x48) + val &= 0xfb; + if (val != 0x48 && (ABI_64_P (abfd) || val != 0x40)) return FALSE; if (bfd_get_8 (abfd, contents + offset - 2) != 0x8d) @@ -1244,13 +1236,26 @@ case R_X86_64_TLSDESC_CALL: /* Check transition from GDesc access model: - call *x@tlsdesc(%rax) + call *x@tlsdesc(%rax) <--- LP64 mode. + call *x@tlsdesc(%eax) <--- X32 mode. */ if (offset + 2 <= sec->size) { - /* Make sure that it's a call *x@tlsdesc(%rax). */ + unsigned int prefix; call = contents + offset; - return call[0] == 0xff && call[1] == 0x10; + prefix = 0; + if (!ABI_64_P (abfd)) + { + /* Check for call *x@tlsdesc(%eax). */ + if (call[0] == 0x67) + { + prefix = 1; + if (offset + 3 > sec->size) + return FALSE; + } + } + /* Make sure that it's a call *x@tlsdesc(%rax). */ + return call[prefix] == 0xff && call[1 + prefix] == 0x10; } return FALSE; @@ -1366,7 +1371,7 @@ { Elf_Internal_Sym *isym; - isym = bfd_sym_from_r_symndx (&htab->sym_cache, + isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache, abfd, r_symndx); name = bfd_elf_sym_name (abfd, symtab_hdr, isym, NULL); } @@ -1494,6 +1499,8 @@ bfd_boolean no_overflow; bfd_boolean relocx; bfd_boolean to_reloc_pc32; + bfd_boolean abs_symbol; + bfd_boolean local_ref; asection *tsec; bfd_signed_vma raddend; unsigned int opcode; @@ -1501,6 +1508,7 @@ unsigned int r_type = *r_type_p; unsigned int r_symndx; bfd_vma roff = irel->r_offset; + bfd_vma abs_relocation; if (roff < (r_type == R_X86_64_REX_GOTPCRELX ? 3 : 2)) return TRUE; @@ -1544,18 +1552,26 @@ || no_overflow || is_pic); + abs_symbol = FALSE; + abs_relocation = 0; + /* Get the symbol referred to by the reloc. */ if (h == NULL) { Elf_Internal_Sym *isym - = bfd_sym_from_r_symndx (&htab->sym_cache, abfd, r_symndx); + = bfd_sym_from_r_symndx (&htab->elf.sym_cache, abfd, r_symndx); /* Skip relocation against undefined symbols. */ if (isym->st_shndx == SHN_UNDEF) return TRUE; + local_ref = TRUE; if (isym->st_shndx == SHN_ABS) - tsec = bfd_abs_section_ptr; + { + tsec = bfd_abs_section_ptr; + abs_symbol = TRUE; + abs_relocation = isym->st_value; + } else if (isym->st_shndx == SHN_COMMON) tsec = bfd_com_section_ptr; else if (isym->st_shndx == SHN_X86_64_LCOMMON) @@ -1571,9 +1587,11 @@ GOTPCRELX relocations since we need to modify REX byte. It is OK convert mov with R_X86_64_GOTPCREL to R_X86_64_PC32. */ - bfd_boolean local_ref; struct elf_x86_link_hash_entry *eh = elf_x86_hash_entry (h); + abs_symbol = ABS_SYMBOL_P (h); + abs_relocation = h->root.u.def.value; + /* NB: Also set linker_def via SYMBOL_REFERENCES_LOCAL_P. */ local_ref = SYMBOL_REFERENCES_LOCAL_P (link_info, h); if ((relocx || opcode == 0x8b) @@ -1647,7 +1665,7 @@ if (no_overflow) return TRUE; -convert: + convert: if (opcode == 0xff) { /* We have "call/jmp *foo@GOTPCREL(%rip)". */ @@ -1713,6 +1731,9 @@ if (opcode == 0x8b) { + if (abs_symbol && local_ref) + to_reloc_pc32 = FALSE; + if (to_reloc_pc32) { /* Convert "mov foo@GOTPCREL(%rip), %reg" to @@ -1772,7 +1793,22 @@ overflow when sign-extending imm32 to imm64. */ r_type = (rex & REX_W) != 0 ? R_X86_64_32S : R_X86_64_32; -rewrite_modrm_rex: + rewrite_modrm_rex: + if (abs_relocation) + { + /* Check if R_X86_64_32S/R_X86_64_32 fits. */ + if (r_type == R_X86_64_32S) + { + if ((abs_relocation + 0x80000000) > 0xffffffff) + return TRUE; + } + else + { + if (abs_relocation > 0xffffffff) + return TRUE; + } + } + bfd_put_8 (abfd, modrm, contents + roff - 1); if (rex) @@ -1819,15 +1855,6 @@ if (bfd_link_relocatable (info)) return TRUE; - /* Don't do anything special with non-loaded, non-alloced sections. - In particular, any relocs in such sections should not affect GOT - and PLT reference counting (ie. we don't allow them to create GOT - or PLT entries), there's no possibility or desire to optimize TLS - relocs, and there's not much point in propagating relocs to shared - libs that the dynamic linker won't relocate. */ - if ((sec->flags & SEC_ALLOC) == 0) - return TRUE; - htab = elf_x86_hash_table (info, X86_64_ELF_DATA); if (htab == NULL) { @@ -1864,6 +1891,7 @@ const char *name; bfd_boolean size_reloc; bfd_boolean converted_reloc; + bfd_boolean no_dynreloc; r_symndx = htab->r_sym (rel->r_info); r_type = ELF32_R_TYPE (rel->r_info); @@ -1879,7 +1907,7 @@ if (r_symndx < symtab_hdr->sh_info) { /* A local symbol. */ - isym = bfd_sym_from_r_symndx (&htab->sym_cache, + isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache, abfd, r_symndx); if (isym == NULL) goto error_return; @@ -1968,6 +1996,10 @@ converted = TRUE; } + if (!_bfd_elf_x86_valid_reloc_p (sec, info, htab, rel, h, isym, + symtab_hdr, &no_dynreloc)) + return FALSE; + if (! elf_x86_64_tls_transition (info, abfd, sec, contents, symtab_hdr, sym_hashes, &r_type, GOT_UNKNOWN, @@ -2014,12 +2046,26 @@ switch (r_type) { - default: tls_type = GOT_NORMAL; break; - case R_X86_64_TLSGD: tls_type = GOT_TLS_GD; break; - case R_X86_64_GOTTPOFF: tls_type = GOT_TLS_IE; break; + default: + tls_type = GOT_NORMAL; + if (h) + { + if (ABS_SYMBOL_P (h)) + tls_type = GOT_ABS; + } + else if (isym->st_shndx == SHN_ABS) + tls_type = GOT_ABS; + break; + case R_X86_64_TLSGD: + tls_type = GOT_TLS_GD; + break; + case R_X86_64_GOTTPOFF: + tls_type = GOT_TLS_IE; + break; case R_X86_64_GOTPC32_TLSDESC: case R_X86_64_TLSDESC_CALL: - tls_type = GOT_TLS_GDESC; break; + tls_type = GOT_TLS_GDESC; + break; } if (h != NULL) @@ -2164,7 +2210,7 @@ case R_X86_64_PC32_BND: case R_X86_64_PC64: case R_X86_64_64: -pointer: + pointer: if (eh != NULL && (sec->flags & SEC_CODE) != 0) eh->zero_undefweak |= 0x2; /* We are called after all symbols have been resolved. Only @@ -2229,9 +2275,10 @@ } size_reloc = FALSE; -do_size: - if (NEED_DYNAMIC_RELOCATION_P (info, TRUE, h, sec, r_type, - htab->pointer_r_type)) + do_size: + if (!no_dynreloc + && NEED_DYNAMIC_RELOCATION_P (info, TRUE, h, sec, r_type, + htab->pointer_r_type)) { struct elf_dyn_relocs *p; struct elf_dyn_relocs **head; @@ -2252,7 +2299,7 @@ /* If this is a global symbol, we count the number of relocations we need for this symbol. */ if (h != NULL) - head = &eh->dyn_relocs; + head = &h->dyn_relocs; else { /* Track dynamic relocs needed for local syms too. @@ -2261,7 +2308,7 @@ asection *s; void **vpp; - isym = bfd_sym_from_r_symndx (&htab->sym_cache, + isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache, abfd, r_symndx); if (isym == NULL) goto error_return; @@ -2279,7 +2326,7 @@ p = *head; if (p == NULL || p->sec != sec) { - bfd_size_type amt = sizeof *p; + size_t amt = sizeof *p; p = ((struct elf_dyn_relocs *) bfd_alloc (htab->elf.dynobj, amt)); @@ -2336,7 +2383,7 @@ return TRUE; -error_return: + error_return: if (elf_section_data (sec)->this_hdr.contents != contents) free (contents); sec->check_relocs_failed = 1; @@ -2663,7 +2710,7 @@ switch (r_type) { default: -bad_ifunc_reloc: + bad_ifunc_reloc: if (h->root.root.string) name = h->root.root.string; else @@ -2687,7 +2734,7 @@ goto do_relocation; /* FALLTHROUGH */ case R_X86_64_64: -do_ifunc_pointer: + do_ifunc_pointer: if (rel->r_addend != 0) { if (h->root.root.string) @@ -2773,7 +2820,7 @@ } } -skip_ifunc: + skip_ifunc: resolved_to_zero = (eh != NULL && UNDEFINED_WEAK_RESOLVED_TO_ZERO (info, eh)); @@ -2865,7 +2912,14 @@ base_got->contents + off); local_got_offsets[r_symndx] |= 1; - if (bfd_link_pic (info)) + /* NB: GOTPCREL relocations against local absolute + symbol store relocation value in the GOT slot + without relative relocation. */ + if (bfd_link_pic (info) + && !(sym->st_shndx == SHN_ABS + && (r_type == R_X86_64_GOTPCREL + || r_type == R_X86_64_GOTPCRELX + || r_type == R_X86_64_REX_GOTPCRELX))) relative_reloc = TRUE; } } @@ -3032,7 +3086,7 @@ break; } -use_plt: + use_plt: if (h->plt.offset != (bfd_vma) -1) { if (htab->plt_second != NULL) @@ -3147,7 +3201,7 @@ /* FIXME: The ABI says the linker should make sure the value is the same when it's zeroextended to 64 bit. */ -direct: + direct: if ((input_section->flags & SEC_ALLOC) == 0) break; @@ -3160,7 +3214,7 @@ && (X86_PCREL_TYPE_P (r_type) || X86_SIZE_TYPE_P (r_type))); - if (GENERATE_DYNAMIC_RELOCATION_P (info, eh, r_type, + if (GENERATE_DYNAMIC_RELOCATION_P (info, eh, r_type, sec, need_copy_reloc_in_pie, resolved_to_zero, FALSE)) { @@ -3358,7 +3412,7 @@ if (roff < 3 || (roff - 3 + 22) > input_section->size) { -corrupt_input: + corrupt_input: info->callbacks->einfo (_("%F%P: corrupt input: %pB\n"), input_bfd); @@ -3401,10 +3455,13 @@ { /* GDesc -> LE transition. It's originally something like: - leaq x@tlsdesc(%rip), %rax + leaq x@tlsdesc(%rip), %rax <--- LP64 mode. + rex leal x@tlsdesc(%rip), %eax <--- X32 mode. Change it to: - movl $x@tpoff, %rax. */ + movq $x@tpoff, %rax <--- LP64 mode. + rex movl $x@tpoff, %eax <--- X32 mode. + */ unsigned int val, type; @@ -3412,7 +3469,8 @@ goto corrupt_input; type = bfd_get_8 (input_bfd, contents + roff - 3); val = bfd_get_8 (input_bfd, contents + roff - 1); - bfd_put_8 (output_bfd, 0x48 | ((type >> 2) & 1), + bfd_put_8 (output_bfd, + (type & 0x48) | ((type >> 2) & 1), contents + roff - 3); bfd_put_8 (output_bfd, 0xc7, contents + roff - 2); bfd_put_8 (output_bfd, 0xc0 | ((val >> 3) & 7), @@ -3426,11 +3484,30 @@ { /* GDesc -> LE transition. It's originally: - call *(%rax) + call *(%rax) <--- LP64 mode. + call *(%eax) <--- X32 mode. Turn it into: - xchg %ax,%ax. */ - bfd_put_8 (output_bfd, 0x66, contents + roff); - bfd_put_8 (output_bfd, 0x90, contents + roff + 1); + xchg %ax,%ax <-- LP64 mode. + nopl (%rax) <-- X32 mode. + */ + unsigned int prefix = 0; + if (!ABI_64_P (input_bfd)) + { + /* Check for call *x@tlsdesc(%eax). */ + if (contents[roff] == 0x67) + prefix = 1; + } + if (prefix) + { + bfd_put_8 (output_bfd, 0x0f, contents + roff); + bfd_put_8 (output_bfd, 0x1f, contents + roff + 1); + bfd_put_8 (output_bfd, 0x00, contents + roff + 2); + } + else + { + bfd_put_8 (output_bfd, 0x66, contents + roff); + bfd_put_8 (output_bfd, 0x90, contents + roff + 1); + } continue; } else if (r_type == R_X86_64_GOTTPOFF) @@ -3741,13 +3818,18 @@ { /* GDesc -> IE transition. It's originally something like: - leaq x@tlsdesc(%rip), %rax + leaq x@tlsdesc(%rip), %rax <--- LP64 mode. + rex leal x@tlsdesc(%rip), %eax <--- X32 mode. Change it to: - movq x@gottpoff(%rip), %rax # before xchg %ax,%ax. */ + # before xchg %ax,%ax in LP64 mode. + movq x@gottpoff(%rip), %rax + # before nopl (%rax) in X32 mode. + rex movl x@gottpoff(%rip), %eax + */ /* Now modify the instruction as appropriate. To - turn a leaq into a movq in the form we use it, it + turn a lea into a mov in the form we use it, it suffices to change the second byte from 0x8d to 0x8b. */ if (roff < 2) @@ -3768,13 +3850,32 @@ { /* GDesc -> IE transition. It's originally: - call *(%rax) + call *(%rax) <--- LP64 mode. + call *(%eax) <--- X32 mode. Change it to: - xchg %ax, %ax. */ + xchg %ax, %ax <-- LP64 mode. + nopl (%rax) <-- X32 mode. + */ - bfd_put_8 (output_bfd, 0x66, contents + roff); - bfd_put_8 (output_bfd, 0x90, contents + roff + 1); + unsigned int prefix = 0; + if (!ABI_64_P (input_bfd)) + { + /* Check for call *x@tlsdesc(%eax). */ + if (contents[roff] == 0x67) + prefix = 1; + } + if (prefix) + { + bfd_put_8 (output_bfd, 0x0f, contents + roff); + bfd_put_8 (output_bfd, 0x1f, contents + roff + 1); + bfd_put_8 (output_bfd, 0x00, contents + roff + 2); + } + else + { + bfd_put_8 (output_bfd, 0x66, contents + roff); + bfd_put_8 (output_bfd, 0x90, contents + roff + 1); + } continue; } else @@ -3969,12 +4070,12 @@ } } -do_relocation: + do_relocation: r = _bfd_final_link_relocate (howto, input_bfd, input_section, contents, rel->r_offset, relocation, rel->r_addend); -check_relocation_error: + check_relocation_error: if (r != bfd_reloc_ok) { const char *name; @@ -4397,7 +4498,7 @@ else { BFD_ASSERT((h->got.offset & 1) == 0); -do_glob_dat: + do_glob_dat: bfd_put_64 (output_bfd, (bfd_vma) 0, htab->elf.sgot->contents + h->got.offset); rela.r_info = htab->r_info (h->dynindx, R_X86_64_GLOB_DAT); @@ -4565,12 +4666,12 @@ + htab->lazy_plt->plt0_got2_offset)); } - if (htab->tlsdesc_plt) + if (htab->elf.tlsdesc_plt) { bfd_put_64 (output_bfd, (bfd_vma) 0, - htab->elf.sgot->contents + htab->tlsdesc_got); + htab->elf.sgot->contents + htab->elf.tlsdesc_got); - memcpy (htab->elf.splt->contents + htab->tlsdesc_plt, + memcpy (htab->elf.splt->contents + htab->elf.tlsdesc_plt, htab->lazy_plt->plt_tlsdesc_entry, htab->lazy_plt->plt_tlsdesc_entry_size); @@ -4583,10 +4684,10 @@ + 8 - htab->elf.splt->output_section->vma - htab->elf.splt->output_offset - - htab->tlsdesc_plt + - htab->elf.tlsdesc_plt - htab->lazy_plt->plt_tlsdesc_got1_insn_end), (htab->elf.splt->contents - + htab->tlsdesc_plt + + htab->elf.tlsdesc_plt + htab->lazy_plt->plt_tlsdesc_got1_offset)); /* Add offset for indirect branch via GOT+TDG, where TDG stands for htab->tlsdesc_got, subtracting the offset @@ -4594,13 +4695,13 @@ bfd_put_32 (output_bfd, (htab->elf.sgot->output_section->vma + htab->elf.sgot->output_offset - + htab->tlsdesc_got + + htab->elf.tlsdesc_got - htab->elf.splt->output_section->vma - htab->elf.splt->output_offset - - htab->tlsdesc_plt + - htab->elf.tlsdesc_plt - htab->lazy_plt->plt_tlsdesc_got2_insn_end), (htab->elf.splt->contents - + htab->tlsdesc_plt + + htab->elf.tlsdesc_plt + htab->lazy_plt->plt_tlsdesc_got2_offset)); } } @@ -4642,9 +4743,6 @@ return TRUE; } -/* Forward declaration. */ -static const struct elf_x86_lazy_plt_layout elf_x86_64_nacl_plt; - /* Similar to _bfd_elf_get_synthetic_symtab. Support PLTs with all dynamic relocations. */ @@ -4689,31 +4787,19 @@ if (relsize <= 0) return -1; - if (get_elf_x86_backend_data (abfd)->target_os != is_nacl) + lazy_plt = &elf_x86_64_lazy_plt; + non_lazy_plt = &elf_x86_64_non_lazy_plt; + lazy_bnd_plt = &elf_x86_64_lazy_bnd_plt; + non_lazy_bnd_plt = &elf_x86_64_non_lazy_bnd_plt; + if (ABI_64_P (abfd)) { - lazy_plt = &elf_x86_64_lazy_plt; - non_lazy_plt = &elf_x86_64_non_lazy_plt; - lazy_bnd_plt = &elf_x86_64_lazy_bnd_plt; - non_lazy_bnd_plt = &elf_x86_64_non_lazy_bnd_plt; - if (ABI_64_P (abfd)) - { - lazy_ibt_plt = &elf_x86_64_lazy_ibt_plt; - non_lazy_ibt_plt = &elf_x86_64_non_lazy_ibt_plt; - } - else - { - lazy_ibt_plt = &elf_x32_lazy_ibt_plt; - non_lazy_ibt_plt = &elf_x32_non_lazy_ibt_plt; - } + lazy_ibt_plt = &elf_x86_64_lazy_ibt_plt; + non_lazy_ibt_plt = &elf_x86_64_non_lazy_ibt_plt; } else { - lazy_plt = &elf_x86_64_nacl_plt; - non_lazy_plt = NULL; - lazy_bnd_plt = NULL; - non_lazy_bnd_plt = NULL; - lazy_ibt_plt = NULL; - non_lazy_ibt_plt = NULL; + lazy_ibt_plt = &elf_x32_lazy_ibt_plt; + non_lazy_ibt_plt = &elf_x32_non_lazy_ibt_plt; } count = 0; @@ -4724,15 +4810,8 @@ continue; /* Get the PLT section contents. */ - plt_contents = (bfd_byte *) bfd_malloc (plt->size); - if (plt_contents == NULL) + if (!bfd_malloc_and_get_section (abfd, plt, &plt_contents)) break; - if (!bfd_get_section_contents (abfd, (asection *) plt, - plt_contents, 0, plt->size)) - { - free (plt_contents); - break; - } /* Check what kind of PLT it is. */ plt_type = plt_unknown; @@ -5028,6 +5107,8 @@ elf_x86_64_link_setup_gnu_properties (struct bfd_link_info *info) { struct elf_x86_init_table init_table; + const struct elf_backend_data *bed; + struct elf_x86_link_hash_table *htab; if ((int) R_X86_64_standard >= (int) R_X86_64_converted_reloc_bit || (int) R_X86_64_max <= (int) R_X86_64_converted_reloc_bit @@ -5040,42 +5121,30 @@ /* This is unused for x86-64. */ init_table.plt0_pad_byte = 0x90; - if (get_elf_x86_backend_data (info->output_bfd)->target_os != is_nacl) + bed = get_elf_backend_data (info->output_bfd); + htab = elf_x86_hash_table (info, bed->target_id); + if (!htab) + abort (); + if (htab->params->bndplt) { - const struct elf_backend_data *bed - = get_elf_backend_data (info->output_bfd); - struct elf_x86_link_hash_table *htab - = elf_x86_hash_table (info, bed->target_id); - if (!htab) - abort (); - if (htab->params->bndplt) - { - init_table.lazy_plt = &elf_x86_64_lazy_bnd_plt; - init_table.non_lazy_plt = &elf_x86_64_non_lazy_bnd_plt; - } - else - { - init_table.lazy_plt = &elf_x86_64_lazy_plt; - init_table.non_lazy_plt = &elf_x86_64_non_lazy_plt; - } + init_table.lazy_plt = &elf_x86_64_lazy_bnd_plt; + init_table.non_lazy_plt = &elf_x86_64_non_lazy_bnd_plt; + } + else + { + init_table.lazy_plt = &elf_x86_64_lazy_plt; + init_table.non_lazy_plt = &elf_x86_64_non_lazy_plt; + } - if (ABI_64_P (info->output_bfd)) - { - init_table.lazy_ibt_plt = &elf_x86_64_lazy_ibt_plt; - init_table.non_lazy_ibt_plt = &elf_x86_64_non_lazy_ibt_plt; - } - else - { - init_table.lazy_ibt_plt = &elf_x32_lazy_ibt_plt; - init_table.non_lazy_ibt_plt = &elf_x32_non_lazy_ibt_plt; - } + if (ABI_64_P (info->output_bfd)) + { + init_table.lazy_ibt_plt = &elf_x86_64_lazy_ibt_plt; + init_table.non_lazy_ibt_plt = &elf_x86_64_non_lazy_ibt_plt; } else { - init_table.lazy_plt = &elf_x86_64_nacl_plt; - init_table.non_lazy_plt = NULL; - init_table.lazy_ibt_plt = NULL; - init_table.non_lazy_ibt_plt = NULL; + init_table.lazy_ibt_plt = &elf_x32_lazy_ibt_plt; + init_table.non_lazy_ibt_plt = &elf_x32_non_lazy_ibt_plt; } if (ABI_64_P (info->output_bfd)) @@ -5221,13 +5290,8 @@ #undef TARGET_LITTLE_NAME #define TARGET_LITTLE_NAME "elf64-x86-64-sol2" -static const struct elf_x86_backend_data elf_x86_64_solaris_arch_bed = - { - is_solaris /* os */ - }; - -#undef elf_backend_arch_data -#define elf_backend_arch_data &elf_x86_64_solaris_arch_bed +#undef ELF_TARGET_OS +#define ELF_TARGET_OS is_solaris /* Restore default: we cannot use ELFOSABI_SOLARIS, otherwise ELFOSABI_NONE objects won't be recognized. */ @@ -5267,30 +5331,6 @@ #include "elf64-target.h" -/* Native Client support. */ - -static bfd_boolean -elf64_x86_64_nacl_elf_object_p (bfd *abfd) -{ - /* Set the right machine number for a NaCl x86-64 ELF64 file. */ - bfd_default_set_arch_mach (abfd, bfd_arch_i386, bfd_mach_x86_64_nacl); - return TRUE; -} - -#undef TARGET_LITTLE_SYM -#define TARGET_LITTLE_SYM x86_64_elf64_nacl_vec -#undef TARGET_LITTLE_NAME -#define TARGET_LITTLE_NAME "elf64-x86-64-nacl" -#undef elf64_bed -#define elf64_bed elf64_x86_64_nacl_bed - -#undef ELF_MAXPAGESIZE -#undef ELF_MINPAGESIZE -#undef ELF_COMMONPAGESIZE -#define ELF_MAXPAGESIZE 0x10000 -#define ELF_MINPAGESIZE 0x10000 -#define ELF_COMMONPAGESIZE 0x10000 - /* Restore defaults. */ #undef ELF_OSABI #undef elf_backend_static_tls_alignment @@ -5299,193 +5339,6 @@ #undef elf_backend_strtab_flags #undef elf_backend_copy_special_section_fields -/* NaCl uses substantially different PLT entries for the same effects. */ - -#undef elf_backend_plt_alignment -#define elf_backend_plt_alignment 5 -#define NACL_PLT_ENTRY_SIZE 64 -#define NACLMASK 0xe0 /* 32-byte alignment mask. */ - -static const bfd_byte elf_x86_64_nacl_plt0_entry[NACL_PLT_ENTRY_SIZE] = - { - 0xff, 0x35, 8, 0, 0, 0, /* pushq GOT+8(%rip) */ - 0x4c, 0x8b, 0x1d, 16, 0, 0, 0, /* mov GOT+16(%rip), %r11 */ - 0x41, 0x83, 0xe3, NACLMASK, /* and $-32, %r11d */ - 0x4d, 0x01, 0xfb, /* add %r15, %r11 */ - 0x41, 0xff, 0xe3, /* jmpq *%r11 */ - - /* 9-byte nop sequence to pad out to the next 32-byte boundary. */ - 0x66, 0x0f, 0x1f, 0x84, 0, 0, 0, 0, 0, /* nopw 0x0(%rax,%rax,1) */ - - /* 32 bytes of nop to pad out to the standard size. */ - 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, /* excess data16 prefixes */ - 0x2e, 0x0f, 0x1f, 0x84, 0, 0, 0, 0, 0, /* nopw %cs:0x0(%rax,%rax,1) */ - 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, /* excess data16 prefixes */ - 0x2e, 0x0f, 0x1f, 0x84, 0, 0, 0, 0, 0, /* nopw %cs:0x0(%rax,%rax,1) */ - 0x66, /* excess data16 prefix */ - 0x90 /* nop */ - }; - -static const bfd_byte elf_x86_64_nacl_plt_entry[NACL_PLT_ENTRY_SIZE] = - { - 0x4c, 0x8b, 0x1d, 0, 0, 0, 0, /* mov name@GOTPCREL(%rip),%r11 */ - 0x41, 0x83, 0xe3, NACLMASK, /* and $-32, %r11d */ - 0x4d, 0x01, 0xfb, /* add %r15, %r11 */ - 0x41, 0xff, 0xe3, /* jmpq *%r11 */ - - /* 15-byte nop sequence to pad out to the next 32-byte boundary. */ - 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, /* excess data16 prefixes */ - 0x2e, 0x0f, 0x1f, 0x84, 0, 0, 0, 0, 0, /* nopw %cs:0x0(%rax,%rax,1) */ - - /* Lazy GOT entries point here (32-byte aligned). */ - 0x68, /* pushq immediate */ - 0, 0, 0, 0, /* replaced with index into relocation table. */ - 0xe9, /* jmp relative */ - 0, 0, 0, 0, /* replaced with offset to start of .plt0. */ - - /* 22 bytes of nop to pad out to the standard size. */ - 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, /* excess data16 prefixes */ - 0x2e, 0x0f, 0x1f, 0x84, 0, 0, 0, 0, 0, /* nopw %cs:0x0(%rax,%rax,1) */ - 0x0f, 0x1f, 0x80, 0, 0, 0, 0, /* nopl 0x0(%rax) */ - }; - -/* .eh_frame covering the .plt section. */ - -static const bfd_byte elf_x86_64_nacl_eh_frame_plt[] = - { -#if (PLT_CIE_LENGTH != 20 \ - || PLT_FDE_LENGTH != 36 \ - || PLT_FDE_START_OFFSET != 4 + PLT_CIE_LENGTH + 8 \ - || PLT_FDE_LEN_OFFSET != 4 + PLT_CIE_LENGTH + 12) -# error "Need elf_x86_backend_data parameters for eh_frame_plt offsets!" -#endif - PLT_CIE_LENGTH, 0, 0, 0, /* CIE length */ - 0, 0, 0, 0, /* CIE ID */ - 1, /* CIE version */ - 'z', 'R', 0, /* Augmentation string */ - 1, /* Code alignment factor */ - 0x78, /* Data alignment factor */ - 16, /* Return address column */ - 1, /* Augmentation size */ - DW_EH_PE_pcrel | DW_EH_PE_sdata4, /* FDE encoding */ - DW_CFA_def_cfa, 7, 8, /* DW_CFA_def_cfa: r7 (rsp) ofs 8 */ - DW_CFA_offset + 16, 1, /* DW_CFA_offset: r16 (rip) at cfa-8 */ - DW_CFA_nop, DW_CFA_nop, - - PLT_FDE_LENGTH, 0, 0, 0, /* FDE length */ - PLT_CIE_LENGTH + 8, 0, 0, 0,/* CIE pointer */ - 0, 0, 0, 0, /* R_X86_64_PC32 .plt goes here */ - 0, 0, 0, 0, /* .plt size goes here */ - 0, /* Augmentation size */ - DW_CFA_def_cfa_offset, 16, /* DW_CFA_def_cfa_offset: 16 */ - DW_CFA_advance_loc + 6, /* DW_CFA_advance_loc: 6 to __PLT__+6 */ - DW_CFA_def_cfa_offset, 24, /* DW_CFA_def_cfa_offset: 24 */ - DW_CFA_advance_loc + 58, /* DW_CFA_advance_loc: 58 to __PLT__+64 */ - DW_CFA_def_cfa_expression, /* DW_CFA_def_cfa_expression */ - 13, /* Block length */ - DW_OP_breg7, 8, /* DW_OP_breg7 (rsp): 8 */ - DW_OP_breg16, 0, /* DW_OP_breg16 (rip): 0 */ - DW_OP_const1u, 63, DW_OP_and, DW_OP_const1u, 37, DW_OP_ge, - DW_OP_lit3, DW_OP_shl, DW_OP_plus, - DW_CFA_nop, DW_CFA_nop - }; - -static const struct elf_x86_lazy_plt_layout elf_x86_64_nacl_plt = - { - elf_x86_64_nacl_plt0_entry, /* plt0_entry */ - NACL_PLT_ENTRY_SIZE, /* plt0_entry_size */ - elf_x86_64_nacl_plt_entry, /* plt_entry */ - NACL_PLT_ENTRY_SIZE, /* plt_entry_size */ - elf_x86_64_nacl_plt0_entry, /* plt_tlsdesc_entry */ - NACL_PLT_ENTRY_SIZE, /* plt_tlsdesc_entry_size */ - 2, /* plt_tlsdesc_got1_offset */ - 9, /* plt_tlsdesc_got2_offset */ - 6, /* plt_tlsdesc_got1_insn_end */ - 13, /* plt_tlsdesc_got2_insn_end */ - 2, /* plt0_got1_offset */ - 9, /* plt0_got2_offset */ - 13, /* plt0_got2_insn_end */ - 3, /* plt_got_offset */ - 33, /* plt_reloc_offset */ - 38, /* plt_plt_offset */ - 7, /* plt_got_insn_size */ - 42, /* plt_plt_insn_end */ - 32, /* plt_lazy_offset */ - elf_x86_64_nacl_plt0_entry, /* pic_plt0_entry */ - elf_x86_64_nacl_plt_entry, /* pic_plt_entry */ - elf_x86_64_nacl_eh_frame_plt, /* eh_frame_plt */ - sizeof (elf_x86_64_nacl_eh_frame_plt) /* eh_frame_plt_size */ - }; - -static const struct elf_x86_backend_data elf_x86_64_nacl_arch_bed = - { - is_nacl /* os */ - }; - -#undef elf_backend_arch_data -#define elf_backend_arch_data &elf_x86_64_nacl_arch_bed - -#undef elf_backend_object_p -#define elf_backend_object_p elf64_x86_64_nacl_elf_object_p -#undef elf_backend_modify_segment_map -#define elf_backend_modify_segment_map nacl_modify_segment_map -#undef elf_backend_modify_headers -#define elf_backend_modify_headers nacl_modify_headers -#undef elf_backend_final_write_processing -#define elf_backend_final_write_processing nacl_final_write_processing - -#include "elf64-target.h" - -/* Native Client x32 support. */ - -static bfd_boolean -elf32_x86_64_nacl_elf_object_p (bfd *abfd) -{ - /* Set the right machine number for a NaCl x86-64 ELF32 file. */ - bfd_default_set_arch_mach (abfd, bfd_arch_i386, bfd_mach_x64_32_nacl); - return TRUE; -} - -#undef TARGET_LITTLE_SYM -#define TARGET_LITTLE_SYM x86_64_elf32_nacl_vec -#undef TARGET_LITTLE_NAME -#define TARGET_LITTLE_NAME "elf32-x86-64-nacl" -#undef elf32_bed -#define elf32_bed elf32_x86_64_nacl_bed - -#define bfd_elf32_bfd_reloc_type_lookup \ - elf_x86_64_reloc_type_lookup -#define bfd_elf32_bfd_reloc_name_lookup \ - elf_x86_64_reloc_name_lookup -#define bfd_elf32_get_synthetic_symtab \ - elf_x86_64_get_synthetic_symtab - -#undef elf_backend_object_p -#define elf_backend_object_p \ - elf32_x86_64_nacl_elf_object_p - -#undef elf_backend_bfd_from_remote_memory -#define elf_backend_bfd_from_remote_memory \ - _bfd_elf32_bfd_from_remote_memory - -#undef elf_backend_size_info -#define elf_backend_size_info \ - _bfd_elf32_size_info - -#undef elf32_bed -#define elf32_bed elf32_x86_64_bed - -#include "elf32-target.h" - -/* Restore defaults. */ -#undef elf_backend_object_p -#define elf_backend_object_p elf64_x86_64_elf_object_p -#undef elf_backend_bfd_from_remote_memory -#undef elf_backend_size_info -#undef elf_backend_modify_segment_map -#undef elf_backend_modify_headers -#undef elf_backend_final_write_processing - /* Intel L1OM support. */ static bfd_boolean @@ -5527,8 +5380,7 @@ #define ELF_COMMONPAGESIZE 0x1000 #undef elf_backend_plt_alignment #define elf_backend_plt_alignment 4 -#undef elf_backend_arch_data -#define elf_backend_arch_data &elf_x86_64_arch_bed +#undef ELF_TARGET_OS #include "elf64-target.h" @@ -5575,11 +5427,6 @@ #undef elf_backend_object_p #define elf_backend_object_p elf64_k1om_elf_object_p -#undef elf_backend_static_tls_alignment - -#undef elf_backend_want_plt_sym -#define elf_backend_want_plt_sym 0 - #include "elf64-target.h" /* FreeBSD K1OM support. */ @@ -5604,6 +5451,7 @@ #undef TARGET_LITTLE_NAME #define TARGET_LITTLE_NAME "elf32-x86-64" #undef elf32_bed +#define elf32_bed elf32_x86_64_bed #undef ELF_ARCH #define ELF_ARCH bfd_arch_i386 @@ -5613,6 +5461,13 @@ #undef ELF_OSABI +#define bfd_elf32_bfd_reloc_type_lookup \ + elf_x86_64_reloc_type_lookup +#define bfd_elf32_bfd_reloc_name_lookup \ + elf_x86_64_reloc_name_lookup +#define bfd_elf32_get_synthetic_symtab \ + elf_x86_64_get_synthetic_symtab + #undef elf_backend_object_p #define elf_backend_object_p \ elf32_x86_64_elf_object_p diff -Nru gdb-9.1/bfd/elf-attrs.c gdb-10.2/bfd/elf-attrs.c --- gdb-9.1/bfd/elf-attrs.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf-attrs.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* ELF attributes support (based on ARM EABI attributes). - Copyright (C) 2005-2019 Free Software Foundation, Inc. + Copyright (C) 2005-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -436,11 +436,14 @@ bfd_byte *p_end; bfd_vma len; const char *std_sec; + ufile_ptr filesize; /* PR 17512: file: 2844a11d. */ if (hdr->sh_size == 0) return; - if (hdr->sh_size > bfd_get_file_size (abfd)) + + filesize = bfd_get_file_size (abfd); + if (filesize != 0 && hdr->sh_size > filesize) { /* xgettext:c-format */ _bfd_error_handler (_("%pB: error: attribute section '%pA' too big: %#llx"), diff -Nru gdb-9.1/bfd/elf-bfd.h gdb-10.2/bfd/elf-bfd.h --- gdb-9.1/bfd/elf-bfd.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf-bfd.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD back-end data structures for ELF files. - Copyright (C) 1992-2019 Free Software Foundation, Inc. + Copyright (C) 1992-2020 Free Software Foundation, Inc. Written by Cygnus Support. This file is part of BFD, the Binary File Descriptor library. @@ -156,9 +156,13 @@ /* Same, but tracks a procedure linkage table entry. */ union gotplt_union plt; - /* Symbol size. */ + /* Symbol size. NB: All fields starting from here are cleared by + _bfd_elf_link_hash_newfunc. */ bfd_size_type size; + /* Track dynamic relocs copied for this symbol. */ + struct elf_dyn_relocs *dyn_relocs; + /* Symbol type (STT_NOTYPE, STT_OBJECT, etc.). */ unsigned int type : 8; @@ -536,6 +540,25 @@ const char *name; }; +enum elf_target_os +{ + is_normal, + is_symbian, /* Symbian OS. */ + is_solaris, /* Solaris. */ + is_vxworks, /* VxWorks. */ + is_nacl /* Native Client. */ +}; + +/* Used by bfd_sym_from_r_symndx to cache a small number of local + symbols. */ +#define LOCAL_SYM_CACHE_SIZE 32 +struct sym_cache +{ + bfd *abfd; + unsigned long indx[LOCAL_SYM_CACHE_SIZE]; + Elf_Internal_Sym sym[LOCAL_SYM_CACHE_SIZE]; +}; + /* ELF linker hash table. */ struct elf_link_hash_table @@ -557,6 +580,15 @@ section symbols. */ bfd_boolean is_relocatable_executable; + /* TRUE if there are IFUNC resolvers. */ + bfd_boolean ifunc_resolvers; + + /* TRUE if DT_PLTGOT is a required dynamic tag. */ + bfd_boolean dt_pltgot_required; + + /* TRUE if DT_JMPREL is a required dynamic tag. */ + bfd_boolean dt_jmprel_required; + /* The BFD used to hold special sections created by the linker. This will be the first BFD found which requires these sections to be created. */ @@ -635,10 +667,27 @@ /* Cached first output tls section and size of PT_TLS segment. */ asection *tls_sec; - bfd_size_type tls_size; + bfd_size_type tls_size; /* Bytes. */ + + /* The offset into splt of the PLT entry for the TLS descriptor + resolver. Special values are 0, if not necessary (or not found + to be necessary yet), and -1 if needed but not determined + yet. */ + bfd_vma tlsdesc_plt; + + /* The GOT offset for the lazy trampoline. Communicated to the + loader via DT_TLSDESC_GOT. The magic value (bfd_vma) -1 + indicates an offset is not allocated. */ + bfd_vma tlsdesc_got; - /* A linked list of BFD's loaded in the link. */ - struct elf_link_loaded_list *loaded; + /* Target OS for linker output. */ + enum elf_target_os target_os; + + /* A linked list of dynamic BFD's loaded in the link. */ + struct elf_link_loaded_list *dyn_loaded; + + /* Small local sym cache. */ + struct sym_cache sym_cache; /* Short-cuts to get to dynamic linker sections. */ asection *sgot; @@ -681,16 +730,6 @@ /* Returns TRUE if the hash table is a struct elf_link_hash_table. */ #define is_elf_hash_table(htab) \ (((struct bfd_link_hash_table *) (htab))->type == bfd_link_elf_hash_table) - -/* Used by bfd_sym_from_r_symndx to cache a small number of local - symbols. */ -#define LOCAL_SYM_CACHE_SIZE 32 -struct sym_cache -{ - bfd *abfd; - unsigned long indx[LOCAL_SYM_CACHE_SIZE]; - Elf_Internal_Sym sym[LOCAL_SYM_CACHE_SIZE]; -}; /* Constant information held for an ELF backend. */ @@ -857,6 +896,9 @@ extensions to elf_obj_tdata and elf_link_hash_table structures. */ enum elf_target_id target_id; + /* Target OS. */ + enum elf_target_os target_os; + /* The ELF machine code (EM_xxxx) for this backend. */ int elf_machine_code; @@ -955,7 +997,7 @@ /* A function to convert machine dependent ELF section header flags to BFD internal section header flags. */ bfd_boolean (*elf_backend_section_flags) - (flagword *, const Elf_Internal_Shdr *); + (const Elf_Internal_Shdr *); /* A function that returns a struct containing ELF section flags and type for the given BFD section. */ @@ -1083,6 +1125,12 @@ bfd_boolean (*elf_backend_size_dynamic_sections) (bfd *output_bfd, struct bfd_link_info *info); + /* The STRIP_ZERO_SIZED_DYNAMIC_SECTIONS function is called by the + ELF backend linker to strip zero-sized dynamic sections after + the section sizes have been set. */ + bfd_boolean (*elf_backend_strip_zero_sized_dynamic_sections) + (struct bfd_link_info *info); + /* Set TEXT_INDEX_SECTION and DATA_INDEX_SECTION, the output sections we keep to use as a base for relocs and symbols. */ void (*elf_backend_init_index_section) @@ -1357,6 +1405,14 @@ bfd_boolean (*elf_backend_write_section) (bfd *, struct bfd_link_info *, asection *, bfd_byte *); + /* This function, if defined, returns TRUE if it is section symbols + only that are considered local for the purpose of partitioning the + symbol table into local and global symbols. This should be NULL + for most targets, in which case the correct thing will be done. + MIPS ELF, at least on the Irix 5, has special requirements. */ + bfd_boolean (*elf_backend_elfsym_local_is_section) + (bfd *); + /* The level of IRIX compatibility we're striving for. MIPS ELF specific function. */ irix_compat_t (*elf_backend_mips_irix_compat) @@ -1503,6 +1559,22 @@ /* Opcode representing no unwind. */ int (*cant_unwind_opcode) (struct bfd_link_info *); + /* Called when emitting an ELF symbol whoes input version had an + ST_SHNDX field set to a value in the range SHN_LOPROC..SHN_HIOS. + Returns the value to be installed in the ST_SHNDX field of the + emitted symbol. If not defined, the value is left unchanged. */ + unsigned int (*symbol_section_index) (bfd *, elf_symbol_type *); + + /* Called when a section has extra reloc sections. */ + bfd_boolean (*init_secondary_reloc_section) (bfd *, Elf_Internal_Shdr *, + const char *, unsigned int); + + /* Called when after loading the normal relocs for a section. */ + bfd_boolean (*slurp_secondary_relocs) (bfd *, asection *, asymbol **); + + /* Called after writing the normal relocs for a section. */ + bfd_boolean (*write_secondary_relocs) (bfd *, asection *); + /* This is non-zero if static TLS segments require a special alignment. */ unsigned static_tls_alignment; @@ -1684,6 +1756,11 @@ /* Link from a text section to its .eh_frame_entry section. */ asection *eh_frame_entry; + /* TRUE if the section has secondary reloc sections associated with it. + FIXME: In the future it might be better to change this into a list + of secondary reloc sections, making lookup easier and faster. */ + bfd_boolean has_secondary_relocs; + /* A pointer used for various section optimizations. */ void *sec_info; }; @@ -1937,7 +2014,7 @@ struct sdt_note *sdt_note_head; Elf_Internal_Shdr **group_sect_ptr; - int num_group; + unsigned int num_group; /* Index into group_sect_ptr, updated by setup_group when finding a section's group. Used to optimize subsequent group searches. */ @@ -2061,7 +2138,7 @@ extern bfd_boolean _bfd_elf_print_private_bfd_data (bfd *, void *); const char * _bfd_elf_get_symbol_version_string - (bfd *, asymbol *, bfd_boolean *); + (bfd *, asymbol *, bfd_boolean, bfd_boolean *); extern void bfd_elf_print_symbol (bfd *, void *, asymbol *, bfd_print_symbol_type); @@ -2394,9 +2471,9 @@ extern bfd_boolean _bfd_elf_final_write_processing (bfd *); -extern const bfd_target *bfd_elf32_object_p +extern bfd_cleanup bfd_elf32_object_p (bfd *); -extern const bfd_target *bfd_elf32_core_file_p +extern bfd_cleanup bfd_elf32_core_file_p (bfd *); extern char *bfd_elf32_core_file_failing_command (bfd *); @@ -2442,9 +2519,9 @@ extern bfd_boolean bfd_elf32_slurp_reloc_table (bfd *, asection *, asymbol **, bfd_boolean); -extern const bfd_target *bfd_elf64_object_p +extern bfd_cleanup bfd_elf64_object_p (bfd *); -extern const bfd_target *bfd_elf64_core_file_p +extern bfd_cleanup bfd_elf64_core_file_p (bfd *); extern char *bfd_elf64_core_file_failing_command (bfd *); @@ -2504,6 +2581,10 @@ (bfd *, struct bfd_link_info *); extern bfd_boolean _bfd_elf_add_dynamic_entry (struct bfd_link_info *, bfd_vma, bfd_vma); +extern bfd_boolean _bfd_elf_strip_zero_sized_dynamic_sections + (struct bfd_link_info *); +extern int bfd_elf_add_dt_needed_tag + (bfd *, struct bfd_link_info *); extern bfd_boolean _bfd_elf_link_check_relocs (bfd *, struct bfd_link_info *); @@ -2712,6 +2793,8 @@ (bfd *, char *, int *, const void *, int); extern char *elfcore_write_aarch_pauth (bfd *, char *, int *, const void *, int); +extern char *elfcore_write_arc_v2 + (bfd *, char *, int *, const void *, int); extern char *elfcore_write_lwpstatus (bfd *, char *, int *, long, int, const void *); extern char *elfcore_write_register_note @@ -2817,8 +2900,8 @@ (bfd *, struct bfd_link_info *); extern bfd_boolean _bfd_elf_allocate_ifunc_dyn_relocs (struct bfd_link_info *, struct elf_link_hash_entry *, - struct elf_dyn_relocs **, bfd_boolean *, unsigned int, - unsigned int, unsigned int, bfd_boolean); + struct elf_dyn_relocs **, unsigned int, unsigned int, + unsigned int, bfd_boolean); extern void elf_append_rela (bfd *, asection *, Elf_Internal_Rela *); extern void elf_append_rel (bfd *, asection *, Elf_Internal_Rela *); @@ -2830,14 +2913,34 @@ extern bfd_boolean is_debuginfo_file (bfd *); + +extern bfd_boolean _bfd_elf_init_secondary_reloc_section + (bfd *, Elf_Internal_Shdr *, const char *, unsigned int); +extern bfd_boolean _bfd_elf_slurp_secondary_reloc_section + (bfd *, asection *, asymbol **); +extern bfd_boolean _bfd_elf_copy_special_section_fields + (const bfd *, bfd *, const Elf_Internal_Shdr *, Elf_Internal_Shdr *); +extern bfd_boolean _bfd_elf_write_secondary_reloc_section + (bfd *, asection *); +extern unsigned int _bfd_elf_symbol_section_index + (bfd *, elf_symbol_type *); + +extern asection *_bfd_elf_readonly_dynrelocs + (struct elf_link_hash_entry *); +extern bfd_boolean _bfd_elf_maybe_set_textrel + (struct elf_link_hash_entry *, void *); + +extern bfd_boolean _bfd_elf_add_dynamic_tags + (bfd *, struct bfd_link_info *, bfd_boolean); + /* Large common section. */ extern asection _bfd_elf_large_com_section; /* Hash for local symbol with the first section id, ID, in the input file and the local symbol index, SYM. */ #define ELF_LOCAL_SYMBOL_HASH(ID, SYM) \ - (((((ID) & 0xff) << 24) | (((ID) & 0xff00) << 8)) \ - ^ (SYM) ^ ((ID) >> 16)) + (((((ID) & 0xffU) << 24) | (((ID) & 0xff00) << 8)) \ + ^ (SYM) ^ (((ID) & 0xffff0000U) >> 16)) /* This is the condition under which finish_dynamic_symbol will be called. If our finish_dynamic_symbol isn't called, we'll need to do something @@ -2899,8 +3002,9 @@ else if (!bfd_link_relocatable (info)) \ { \ bfd_boolean err; \ - err = (info->unresolved_syms_in_objects == RM_GENERATE_ERROR \ - || ELF_ST_VISIBILITY (h->other) != STV_DEFAULT); \ + err = (info->unresolved_syms_in_objects == RM_DIAGNOSE && \ + !info->warn_unresolved_syms) \ + || ELF_ST_VISIBILITY (h->other) != STV_DEFAULT; \ (*info->callbacks->undefined_symbol) (info, \ h->root.root.string, \ input_bfd, \ diff -Nru gdb-9.1/bfd/elf.c gdb-10.2/bfd/elf.c --- gdb-9.1/bfd/elf.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* ELF executable support for BFD. - Copyright (C) 1993-2019 Free Software Foundation, Inc. + Copyright (C) 1993-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -296,16 +296,10 @@ /* Allocate and clear an extra byte at the end, to prevent crashes in case the string table is not terminated. */ if (shstrtabsize + 1 <= 1 - || shstrtabsize > bfd_get_file_size (abfd) || bfd_seek (abfd, offset, SEEK_SET) != 0 - || (shstrtab = (bfd_byte *) bfd_alloc (abfd, shstrtabsize + 1)) == NULL) - shstrtab = NULL; - else if (bfd_bread (shstrtab, shstrtabsize, abfd) != shstrtabsize) + || (shstrtab = _bfd_alloc_and_read (abfd, shstrtabsize + 1, + shstrtabsize)) == NULL) { - if (bfd_get_error () != bfd_error_system_call) - bfd_set_error (bfd_error_file_truncated); - bfd_release (abfd, shstrtab); - shstrtab = NULL; /* Once we've failed to read it, make sure we don't keep trying. Otherwise, we'll keep allocating space for the string table over and over. */ @@ -402,7 +396,7 @@ Elf_Internal_Sym *isymend; const struct elf_backend_data *bed; size_t extsym_size; - bfd_size_type amt; + size_t amt; file_ptr pos; if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour) @@ -448,11 +442,16 @@ alloc_intsym = NULL; bed = get_elf_backend_data (ibfd); extsym_size = bed->s->sizeof_sym; - amt = (bfd_size_type) symcount * extsym_size; + if (_bfd_mul_overflow (symcount, extsym_size, &amt)) + { + bfd_set_error (bfd_error_file_too_big); + intsym_buf = NULL; + goto out; + } pos = symtab_hdr->sh_offset + symoffset * extsym_size; if (extsym_buf == NULL) { - alloc_ext = bfd_malloc2 (symcount, extsym_size); + alloc_ext = bfd_malloc (amt); extsym_buf = alloc_ext; } if (extsym_buf == NULL @@ -467,12 +466,16 @@ extshndx_buf = NULL; else { - amt = (bfd_size_type) symcount * sizeof (Elf_External_Sym_Shndx); + if (_bfd_mul_overflow (symcount, sizeof (Elf_External_Sym_Shndx), &amt)) + { + bfd_set_error (bfd_error_file_too_big); + intsym_buf = NULL; + goto out; + } pos = shndx_hdr->sh_offset + symoffset * sizeof (Elf_External_Sym_Shndx); if (extshndx_buf == NULL) { - alloc_extshndx = (Elf_External_Sym_Shndx *) - bfd_malloc2 (symcount, sizeof (Elf_External_Sym_Shndx)); + alloc_extshndx = (Elf_External_Sym_Shndx *) bfd_malloc (amt); extshndx_buf = alloc_extshndx; } if (extshndx_buf == NULL @@ -486,8 +489,12 @@ if (intsym_buf == NULL) { - alloc_intsym = (Elf_Internal_Sym *) - bfd_malloc2 (symcount, sizeof (Elf_Internal_Sym)); + if (_bfd_mul_overflow (symcount, sizeof (Elf_Internal_Sym), &amt)) + { + bfd_set_error (bfd_error_file_too_big); + goto out; + } + alloc_intsym = (Elf_Internal_Sym *) bfd_malloc (amt); intsym_buf = alloc_intsym; if (intsym_buf == NULL) goto out; @@ -506,17 +513,14 @@ _bfd_error_handler (_("%pB symbol number %lu references" " nonexistent SHT_SYMTAB_SHNDX section"), ibfd, (unsigned long) symoffset); - if (alloc_intsym != NULL) - free (alloc_intsym); + free (alloc_intsym); intsym_buf = NULL; goto out; } out: - if (alloc_ext != NULL) - free (alloc_ext); - if (alloc_extshndx != NULL) - free (alloc_extshndx); + free (alloc_ext); + free (alloc_extshndx); return intsym_buf; } @@ -629,15 +633,14 @@ { /* We keep a list of elf section headers for group sections, so we can find them quickly. */ - bfd_size_type amt; + size_t amt; elf_tdata (abfd)->num_group = num_group; - elf_tdata (abfd)->group_sect_ptr = (Elf_Internal_Shdr **) - bfd_alloc2 (abfd, num_group, sizeof (Elf_Internal_Shdr *)); + amt = num_group * sizeof (Elf_Internal_Shdr *); + elf_tdata (abfd)->group_sect_ptr + = (Elf_Internal_Shdr **) bfd_zalloc (abfd, amt); if (elf_tdata (abfd)->group_sect_ptr == NULL) return FALSE; - memset (elf_tdata (abfd)->group_sect_ptr, 0, - num_group * sizeof (Elf_Internal_Shdr *)); num_group = 0; for (i = 0; i < shnum; i++) @@ -659,28 +662,13 @@ num_group += 1; /* Read the raw contents. */ - BFD_ASSERT (sizeof (*dest) >= 4); - amt = shdr->sh_size * sizeof (*dest) / 4; - shdr->contents = (unsigned char *) - bfd_alloc2 (abfd, shdr->sh_size, sizeof (*dest) / 4); - /* PR binutils/4110: Handle corrupt group headers. */ - if (shdr->contents == NULL) - { - _bfd_error_handler - /* xgettext:c-format */ - (_("%pB: corrupt size field in group section" - " header: %#" PRIx64), - abfd, (uint64_t) shdr->sh_size); - bfd_set_error (bfd_error_bad_value); - -- num_group; - continue; - } - - memset (shdr->contents, 0, amt); - - if (bfd_seek (abfd, shdr->sh_offset, SEEK_SET) != 0 - || (bfd_bread (shdr->contents, shdr->sh_size, abfd) - != shdr->sh_size)) + BFD_ASSERT (sizeof (*dest) >= 4 && sizeof (*dest) % 4 == 0); + shdr->contents = NULL; + if (_bfd_mul_overflow (shdr->sh_size, + sizeof (*dest) / 4, &amt) + || bfd_seek (abfd, shdr->sh_offset, SEEK_SET) != 0 + || !(shdr->contents + = _bfd_alloc_and_read (abfd, amt, shdr->sh_size))) { _bfd_error_handler /* xgettext:c-format */ @@ -689,10 +677,6 @@ abfd, (uint64_t) shdr->sh_size); bfd_set_error (bfd_error_bad_value); -- num_group; - /* PR 17510: If the group contents are even - partially corrupt, do not allow any of the - contents to be used. */ - memset (shdr->contents, 0, amt); continue; } @@ -712,6 +696,7 @@ idx = H_GET_32 (abfd, src); if (src == shdr->contents) { + dest->shdr = NULL; dest->flags = idx; if (shdr->bfd_section != NULL && (idx & GRP_COMDAT)) shdr->bfd_section->flags @@ -869,11 +854,10 @@ if (elfsec == 0) { const struct elf_backend_data *bed = get_elf_backend_data (abfd); - if (bed->link_order_error_handler) - bed->link_order_error_handler - /* xgettext:c-format */ - (_("%pB: warning: sh_link not set for section `%pA'"), - abfd, s); + bed->link_order_error_handler + /* xgettext:c-format */ + (_("%pB: warning: sh_link not set for section `%pA'"), + abfd, s); } else { @@ -1028,6 +1012,7 @@ asection *newsect; flagword flags; const struct elf_backend_data *bed; + unsigned int opb = bfd_octets_per_byte (abfd, NULL); if (hdr->bfd_section != NULL) return TRUE; @@ -1046,11 +1031,6 @@ newsect->filepos = hdr->sh_offset; - if (!bfd_set_section_vma (newsect, hdr->sh_addr) - || !bfd_set_section_size (newsect, hdr->sh_size) - || !bfd_set_section_alignment (newsect, bfd_log2 (hdr->sh_addralign))) - return FALSE; - flags = SEC_NO_FLAGS; if (hdr->sh_type != SHT_NOBITS) flags |= SEC_HAS_CONTENTS; @@ -1108,7 +1088,10 @@ flags |= SEC_DEBUGGING | SEC_ELF_OCTETS; else if (strncmp (name, GNU_BUILD_ATTRS_SECTION_NAME, 21) == 0 || strncmp (name, ".note.gnu", 9) == 0) - flags |= SEC_ELF_OCTETS; + { + flags |= SEC_ELF_OCTETS; + opb = 1; + } else if (strncmp (name, ".line", 5) == 0 || strncmp (name, ".stab", 5) == 0 || strcmp (name, ".gdb_index") == 0) @@ -1116,6 +1099,11 @@ } } + if (!bfd_set_section_vma (newsect, hdr->sh_addr / opb) + || !bfd_set_section_size (newsect, hdr->sh_size) + || !bfd_set_section_alignment (newsect, bfd_log2 (hdr->sh_addralign))) + return FALSE; + /* As a GNU extension, if the name begins with .gnu.linkonce, we only link a single copy of the section. This is used to support g++. g++ will emit each template expansion in its own section. @@ -1126,14 +1114,14 @@ && elf_next_in_group (newsect) == NULL) flags |= SEC_LINK_ONCE | SEC_LINK_DUPLICATES_DISCARD; + if (!bfd_set_section_flags (newsect, flags)) + return FALSE; + bed = get_elf_backend_data (abfd); if (bed->elf_backend_section_flags) - if (! bed->elf_backend_section_flags (&flags, hdr)) + if (!bed->elf_backend_section_flags (hdr)) return FALSE; - if (!bfd_set_section_flags (newsect, flags)) - return FALSE; - /* We do not parse the PT_NOTE segments as we are interested even in the separate debug info files which may have the segments offsets corrupted. PT_NOTEs from the core files are currently not parsed using BFD. */ @@ -1149,7 +1137,7 @@ free (contents); } - if ((flags & SEC_ALLOC) != 0) + if ((newsect->flags & SEC_ALLOC) != 0) { Elf_Internal_Phdr *phdr; unsigned int i, nload; @@ -1175,9 +1163,9 @@ || phdr->p_type == PT_TLS) && ELF_SECTION_IN_SEGMENT (hdr, phdr)) { - if ((flags & SEC_LOAD) == 0) + if ((newsect->flags & SEC_LOAD) == 0) newsect->lma = (phdr->p_paddr - + hdr->sh_addr - phdr->p_vaddr); + + hdr->sh_addr - phdr->p_vaddr) / opb; else /* We used to use the same adjustment for SEC_LOAD sections, but that doesn't work if the segment @@ -1187,7 +1175,7 @@ segment will contain sections with contiguous LMAs, even if the VMAs are not. */ newsect->lma = (phdr->p_paddr - + hdr->sh_offset - phdr->p_offset); + + hdr->sh_offset - phdr->p_offset) / opb; /* With contiguous segments, we can't tell from file offsets whether a section with zero size should @@ -1203,7 +1191,7 @@ /* Compress/decompress DWARF debug sections with names: .debug_* and .zdebug_*, after the section flags is set. */ - if ((flags & SEC_DEBUGGING) + if ((newsect->flags & SEC_DEBUGGING) && ((name[1] == 'd' && name[6] == '_') || (name[1] == 'z' && name[7] == '_'))) { @@ -1432,9 +1420,8 @@ } /* Allow the target a chance to decide how these fields should be set. */ - if (bed->elf_backend_copy_special_section_fields != NULL - && bed->elf_backend_copy_special_section_fields - (ibfd, obfd, iheader, oheader)) + if (bed->elf_backend_copy_special_section_fields (ibfd, obfd, + iheader, oheader)) return TRUE; /* We have an iheader which might match oheader, and which has non-zero @@ -1618,8 +1605,8 @@ { /* Final attempt. Call the backend copy function with a NULL input section. */ - if (bed->elf_backend_copy_special_section_fields != NULL) - bed->elf_backend_copy_special_section_fields (ibfd, obfd, NULL, oheader); + (void) bed->elf_backend_copy_special_section_fields (ibfd, obfd, + NULL, oheader); } } @@ -1888,15 +1875,16 @@ return TRUE; error_return: - if (dynbuf != NULL) - free (dynbuf); + free (dynbuf); return FALSE; } -/* Get version string. */ +/* Get version name. If BASE_P is TRUE, return "Base" for VER_FLG_BASE + and return symbol version for symbol version itself. */ const char * _bfd_elf_get_symbol_version_string (bfd *abfd, asymbol *symbol, + bfd_boolean base_p, bfd_boolean *hidden) { const char *version_string = NULL; @@ -1914,10 +1902,18 @@ && (vernum > elf_tdata (abfd)->cverdefs || (elf_tdata (abfd)->verdef[0].vd_flags == VER_FLG_BASE))) - version_string = "Base"; + version_string = base_p ? "Base" : ""; else if (vernum <= elf_tdata (abfd)->cverdefs) - version_string = - elf_tdata (abfd)->verdef[vernum - 1].vd_nodename; + { + const char *nodename + = elf_tdata (abfd)->verdef[vernum - 1].vd_nodename; + version_string = ""; + if (base_p + || nodename == NULL + || symbol->name == NULL + || strcmp (symbol->name, nodename) != 0) + version_string = nodename; + } else { Elf_Internal_Verneed *t; @@ -1998,6 +1994,7 @@ /* If we have version information, print it. */ version_string = _bfd_elf_get_symbol_version_string (abfd, symbol, + TRUE, &hidden); if (version_string) { @@ -2069,8 +2066,14 @@ sections_being_created = NULL; if (sections_being_created == NULL) { - sections_being_created = (bfd_boolean *) - bfd_zalloc2 (abfd, elf_numsections (abfd), sizeof (bfd_boolean)); + size_t amt = elf_numsections (abfd) * sizeof (bfd_boolean); + + /* PR 26005: Do not use bfd_zalloc here as the memory might + be released before the bfd has been fully scanned. */ + sections_being_created = (bfd_boolean *) bfd_malloc (amt); + if (sections_being_created == NULL) + return FALSE; + memset (sections_being_created, FALSE, amt); sections_being_created_abfd = abfd; } if (sections_being_created [shindex]) @@ -2468,13 +2471,17 @@ sections. */ if (*p_hdr != NULL) { - _bfd_error_handler - /* xgettext:c-format */ - (_("%pB: warning: multiple relocation sections for section %pA \ -found - ignoring all but the first"), - abfd, target_sect); + if (!bed->init_secondary_reloc_section (abfd, hdr, name, shindex)) + { + _bfd_error_handler + /* xgettext:c-format */ + (_("%pB: warning: secondary relocation section '%s' " + "for section %pA found - ignoring"), + abfd, name, target_sect); + } goto success; } + hdr2 = (Elf_Internal_Shdr *) bfd_alloc (abfd, sizeof (*hdr2)); if (hdr2 == NULL) goto fail; @@ -2604,8 +2611,9 @@ sections_being_created [shindex] = FALSE; if (-- nesting == 0) { + free (sections_being_created); sections_being_created = NULL; - sections_being_created_abfd = abfd; + sections_being_created_abfd = NULL; } return ret; } @@ -2910,28 +2918,13 @@ bed = get_elf_backend_data (abfd); sec->use_rela_p = bed->default_use_rela_p; - /* When we read a file, we don't need to set ELF section type and - flags. They will be overridden in _bfd_elf_make_section_from_shdr - anyway. We will set ELF section type and flags for all linker - created sections. If user specifies BFD section flags, we will - set ELF section type and flags based on BFD section flags in - elf_fake_sections. Special handling for .init_array/.fini_array - output sections since they may contain .ctors/.dtors input - sections. We don't want _bfd_elf_init_private_section_data to - copy ELF section type from .ctors/.dtors input sections. */ - if (abfd->direction != read_direction - || (sec->flags & SEC_LINKER_CREATED) != 0) - { - ssect = (*bed->get_sec_type_attr) (abfd, sec); - if (ssect != NULL - && (!sec->flags - || (sec->flags & SEC_LINKER_CREATED) != 0 - || ssect->type == SHT_INIT_ARRAY - || ssect->type == SHT_FINI_ARRAY)) - { - elf_section_type (sec) = ssect->type; - elf_section_flags (sec) = ssect->attr; - } + /* Set up ELF section type and flags for newly created sections, if + there is an ABI mandated section. */ + ssect = (*bed->get_sec_type_attr) (abfd, sec); + if (ssect != NULL) + { + elf_section_type (sec) = ssect->type; + elf_section_flags (sec) = ssect->attr; } return _bfd_generic_new_section_hook (abfd, sec); @@ -2970,6 +2963,7 @@ char namebuf[64]; size_t len; int split; + unsigned int opb = bfd_octets_per_byte (abfd, NULL); split = ((hdr->p_memsz > 0) && (hdr->p_filesz > 0) @@ -2986,8 +2980,8 @@ newsect = bfd_make_section (abfd, name); if (newsect == NULL) return FALSE; - newsect->vma = hdr->p_vaddr; - newsect->lma = hdr->p_paddr; + newsect->vma = hdr->p_vaddr / opb; + newsect->lma = hdr->p_paddr / opb; newsect->size = hdr->p_filesz; newsect->filepos = hdr->p_offset; newsect->flags |= SEC_HAS_CONTENTS; @@ -3022,8 +3016,8 @@ newsect = bfd_make_section (abfd, name); if (newsect == NULL) return FALSE; - newsect->vma = hdr->p_vaddr + hdr->p_filesz; - newsect->lma = hdr->p_paddr + hdr->p_filesz; + newsect->vma = (hdr->p_vaddr + hdr->p_filesz) / opb; + newsect->lma = (hdr->p_paddr + hdr->p_filesz) / opb; newsect->size = hdr->p_memsz - hdr->p_filesz; newsect->filepos = hdr->p_offset + hdr->p_filesz; align = newsect->vma & -newsect->vma; @@ -3032,14 +3026,6 @@ newsect->alignment_power = bfd_log2 (align); if (hdr->p_type == PT_LOAD) { - /* Hack for gdb. Segments that have not been modified do - not have their contents written to a core file, on the - assumption that a debugger can find the contents in the - executable. We flag this case by setting the fake - section size to zero. Note that "real" bss sections will - always have their contents dumped to the core file. */ - if (bfd_get_format (abfd) == bfd_core) - newsect->size = 0; newsect->flags |= SEC_ALLOC; if (hdr->p_flags & PF_X) newsect->flags |= SEC_CODE; @@ -3217,6 +3203,7 @@ unsigned int sh_type; const char *name = asect->name; bfd_boolean delay_st_name_p = FALSE; + bfd_vma mask; if (arg->failed) { @@ -3238,7 +3225,6 @@ /* Set SEC_ELF_COMPRESS to indicate this section should be compressed. */ asect->flags |= SEC_ELF_COMPRESS; - /* If this section will be compressed, delay adding section name to section name section after it is compressed in _bfd_elf_assign_file_positions_for_non_load. */ @@ -3299,7 +3285,7 @@ if ((asect->flags & SEC_ALLOC) != 0 || asect->user_set_vma) - this_hdr->sh_addr = asect->vma; + this_hdr->sh_addr = asect->vma * bfd_octets_per_byte (abfd, asect); else this_hdr->sh_addr = 0; @@ -3316,7 +3302,10 @@ arg->failed = TRUE; return; } - this_hdr->sh_addralign = (bfd_vma) 1 << asect->alignment_power; + /* Set sh_addralign to the highest power of two given by alignment + consistent with the section VMA. Linker scripts can force VMA. */ + mask = ((bfd_vma) 1 << asect->alignment_power) | this_hdr->sh_addr; + this_hdr->sh_addralign = mask & -mask; /* The sh_entsize and sh_info fields may have been set already by copy_private_section_data. */ @@ -3546,8 +3535,13 @@ if (symindx == 0) { /* If called from the assembler, swap_out_syms will have set up - elf_section_syms. */ - BFD_ASSERT (elf_section_syms (abfd) != NULL); + elf_section_syms. + PR 25699: A corrupt input file could contain bogus group info. */ + if (elf_section_syms (abfd) == NULL) + { + *failedptr = TRUE; + return; + } symindx = elf_section_syms (abfd)[sec->index]->udata.i; } elf_section_data (sec)->this_hdr.sh_info = symindx; @@ -3710,7 +3704,8 @@ /* Assign all ELF section numbers. The dummy first section is handled here too. The link/info pointers for the standard section types are filled - in here too, while we're at it. */ + in here too, while we're at it. LINK_INFO will be 0 when arriving + here for objcopy, and when using the generic ELF linker. */ static bfd_boolean assign_section_numbers (bfd *abfd, struct bfd_link_info *link_info) @@ -3721,6 +3716,7 @@ Elf_Internal_Shdr **i_shdrp; struct bfd_elf_section_data *d; bfd_boolean need_symtab; + size_t amt; section_number = 1; @@ -3828,8 +3824,8 @@ /* Set up the list of section header pointers, in agreement with the indices. */ - i_shdrp = (Elf_Internal_Shdr **) bfd_zalloc2 (abfd, section_number, - sizeof (Elf_Internal_Shdr *)); + amt = section_number * sizeof (Elf_Internal_Shdr *); + i_shdrp = (Elf_Internal_Shdr **) bfd_zalloc (abfd, amt); if (i_shdrp == NULL) return FALSE; @@ -3894,48 +3890,37 @@ s = elf_linked_to_section (sec); if (s) { - /* elf_linked_to_section points to the input section. */ - if (link_info != NULL) - { - /* Check discarded linkonce section. */ - if (discarded_section (s)) - { - asection *kept; - _bfd_error_handler - /* xgettext:c-format */ - (_("%pB: sh_link of section `%pA' points to" - " discarded section `%pA' of `%pB'"), - abfd, d->this_hdr.bfd_section, - s, s->owner); - /* Point to the kept section if it has the same - size as the discarded one. */ - kept = _bfd_elf_check_kept_section (s, link_info); - if (kept == NULL) - { - bfd_set_error (bfd_error_bad_value); - return FALSE; - } - s = kept; - } - - s = s->output_section; - BFD_ASSERT (s != NULL); - } - else + /* Check discarded linkonce section. */ + if (discarded_section (s)) { - /* Handle objcopy. */ - if (s->output_section == NULL) + asection *kept; + _bfd_error_handler + /* xgettext:c-format */ + (_("%pB: sh_link of section `%pA' points to" + " discarded section `%pA' of `%pB'"), + abfd, d->this_hdr.bfd_section, s, s->owner); + /* Point to the kept section if it has the same + size as the discarded one. */ + kept = _bfd_elf_check_kept_section (s, link_info); + if (kept == NULL) { - _bfd_error_handler - /* xgettext:c-format */ - (_("%pB: sh_link of section `%pA' points to" - " removed section `%pA' of `%pB'"), - abfd, d->this_hdr.bfd_section, s, s->owner); bfd_set_error (bfd_error_bad_value); return FALSE; } - s = s->output_section; + s = kept; + } + /* Handle objcopy. */ + else if (s->output_section == NULL) + { + _bfd_error_handler + /* xgettext:c-format */ + (_("%pB: sh_link of section `%pA' points to" + " removed section `%pA' of `%pB'"), + abfd, d->this_hdr.bfd_section, s, s->owner); + bfd_set_error (bfd_error_bad_value); + return FALSE; } + s = s->output_section; d->this_hdr.sh_link = elf_section_data (s)->this_idx; } else @@ -3947,11 +3932,10 @@ where s is NULL. */ const struct elf_backend_data *bed = get_elf_backend_data (abfd); - if (bed->link_order_error_handler) - bed->link_order_error_handler - /* xgettext:c-format */ - (_("%pB: warning: sh_link not set for section `%pA'"), - abfd, sec); + bed->link_order_error_handler + /* xgettext:c-format */ + (_("%pB: warning: sh_link not set for section `%pA'"), + abfd, sec); } } @@ -4001,9 +3985,7 @@ elf_section_data (s)->this_hdr.sh_link = d->this_idx; /* This is a .stab section. */ - if (elf_section_data (s)->this_hdr.sh_entsize == 0) - elf_section_data (s)->this_hdr.sh_entsize - = 4 + 2 * bfd_get_arch_size (abfd) / 8; + elf_section_data (s)->this_hdr.sh_entsize = 12; } } break; @@ -4148,6 +4130,7 @@ unsigned int idx; asection *asect; asymbol **new_syms; + size_t amt; #ifdef DEBUG fprintf (stderr, "elf_map_symbols\n"); @@ -4161,7 +4144,8 @@ } max_index++; - sect_syms = (asymbol **) bfd_zalloc2 (abfd, max_index, sizeof (asymbol *)); + amt = max_index * sizeof (asymbol *); + sect_syms = (asymbol **) bfd_zalloc (abfd, amt); if (sect_syms == NULL) return FALSE; elf_section_syms (abfd) = sect_syms; @@ -4212,9 +4196,8 @@ } /* Now sort the symbols so the local symbols are first. */ - new_syms = (asymbol **) bfd_alloc2 (abfd, num_locals + num_globals, - sizeof (asymbol *)); - + amt = (num_locals + num_globals) * sizeof (asymbol *); + new_syms = (asymbol **) bfd_alloc (abfd, amt); if (new_syms == NULL) return FALSE; @@ -4551,7 +4534,7 @@ struct elf_segment_map *m; unsigned int i; asection **hdrpp; - bfd_size_type amt; + size_t amt; amt = sizeof (struct elf_segment_map) - sizeof (asection *); amt += (to - from) * sizeof (asection *); @@ -4678,18 +4661,19 @@ bfd_boolean phdr_in_segment; bfd_boolean writable; bfd_boolean executable; - int tls_count = 0; + unsigned int tls_count = 0; asection *first_tls = NULL; asection *first_mbind = NULL; asection *dynsec, *eh_frame_hdr; - bfd_size_type amt; - bfd_vma addr_mask, wrap_to = 0; - bfd_size_type phdr_size; + size_t amt; + bfd_vma addr_mask, wrap_to = 0; /* Bytes. */ + bfd_size_type phdr_size; /* Octets/bytes. */ + unsigned int opb = bfd_octets_per_byte (abfd, NULL); /* Select the allocated sections, and sort them. */ - sections = (asection **) bfd_malloc2 (bfd_count_sections (abfd), - sizeof (asection *)); + amt = bfd_count_sections (abfd) * sizeof (asection *); + sections = (asection **) bfd_malloc (amt); if (sections == NULL) goto error_return; @@ -4711,8 +4695,8 @@ sections[i] = s; ++i; /* A wrapping section potentially clashes with header. */ - if (((s->lma + s->size) & addr_mask) < (s->lma & addr_mask)) - wrap_to = (s->lma + s->size) & addr_mask; + if (((s->lma + s->size / opb) & addr_mask) < (s->lma & addr_mask)) + wrap_to = (s->lma + s->size / opb) & addr_mask; } } BFD_ASSERT (i <= bfd_count_sections (abfd)); @@ -4724,6 +4708,8 @@ if (phdr_size == (bfd_size_type) -1) phdr_size = get_program_header_size (abfd, info); phdr_size += bed->s->sizeof_ehdr; + /* phdr_size is compared to LMA values which are in bytes. */ + phdr_size /= opb; maxpagesize = bed->maxpagesize; if (maxpagesize == 0) maxpagesize = 1; @@ -4794,7 +4780,7 @@ program headers we will need. */ if (phdr_in_segment && count > 0) { - bfd_vma phdr_lma; + bfd_vma phdr_lma; /* Bytes. */ bfd_boolean separate_phdr = FALSE; phdr_lma = (sections[0]->lma - phdr_size) & addr_mask & -maxpagesize; @@ -4834,7 +4820,7 @@ m = make_mapping (abfd, sections, 0, 0, phdr_in_segment); if (m == NULL) goto error_return; - m->p_paddr = phdr_lma; + m->p_paddr = phdr_lma * opb; m->p_vaddr_offset = (sections[0]->vma - phdr_size) & addr_mask & -maxpagesize; m->p_paddr_valid = 1; @@ -4948,7 +4934,7 @@ executable = TRUE; last_hdr = hdr; /* .tbss sections effectively have zero size. */ - last_size = !IS_TBSS (hdr) ? hdr->size : 0; + last_size = (!IS_TBSS (hdr) ? hdr->size : 0) / opb; continue; } @@ -4974,7 +4960,7 @@ last_hdr = hdr; /* .tbss sections effectively have zero size. */ - last_size = !IS_TBSS (hdr) ? hdr->size : 0; + last_size = (!IS_TBSS (hdr) ? hdr->size : 0) / opb; hdr_index = i; phdr_in_segment = FALSE; } @@ -5022,7 +5008,7 @@ if (s2->next->alignment_power == alignment_power && (s2->next->flags & SEC_LOAD) != 0 && elf_section_type (s2->next) == SHT_NOTE - && align_power (s2->lma + s2->size, + && align_power (s2->lma + s2->size / opb, alignment_power) == s2->next->lma) count++; @@ -5074,7 +5060,7 @@ m->p_flags = PF_R; m->p_flags_valid = 1; s = first_tls; - for (i = 0; i < (unsigned int) tls_count; ++i) + for (i = 0; i < tls_count; ++i) { if ((s->flags & SEC_THREAD_LOCAL) == 0) { @@ -5082,7 +5068,7 @@ (_("%pB: TLS sections are not adjacent:"), abfd); s = first_tls; i = 0; - while (i < (unsigned int) tls_count) + while (i < tls_count) { if ((s->flags & SEC_THREAD_LOCAL) != 0) { @@ -5204,9 +5190,12 @@ { i = m->count; while (--i != (unsigned) -1) - if ((m->sections[i]->flags & (SEC_LOAD | SEC_HAS_CONTENTS)) - == (SEC_LOAD | SEC_HAS_CONTENTS)) - break; + { + if (m->sections[i]->size > 0 + && (m->sections[i]->flags & (SEC_LOAD | SEC_HAS_CONTENTS)) + == (SEC_LOAD | SEC_HAS_CONTENTS)) + break; + } if (i != (unsigned) -1) break; @@ -5241,8 +5230,7 @@ return TRUE; error_return: - if (sections != NULL) - free (sections); + free (sections); return FALSE; } @@ -5320,17 +5308,25 @@ return m1->no_sort_lma ? -1 : 1; if (m1->p_type == PT_LOAD && !m1->no_sort_lma) { - bfd_vma lma1, lma2; + bfd_vma lma1, lma2; /* Octets. */ lma1 = 0; if (m1->p_paddr_valid) lma1 = m1->p_paddr; else if (m1->count != 0) - lma1 = m1->sections[0]->lma + m1->p_vaddr_offset; + { + unsigned int opb = bfd_octets_per_byte (m1->sections[0]->owner, + m1->sections[0]); + lma1 = (m1->sections[0]->lma + m1->p_vaddr_offset) * opb; + } lma2 = 0; if (m2->p_paddr_valid) lma2 = m2->p_paddr; else if (m2->count != 0) - lma2 = m2->sections[0]->lma + m2->p_vaddr_offset; + { + unsigned int opb = bfd_octets_per_byte (m2->sections[0]->owner, + m2->sections[0]); + lma2 = (m2->sections[0]->lma + m2->p_vaddr_offset) * opb; + } if (lma1 != lma2) return lma1 < lma2 ? -1 : 1; } @@ -5428,11 +5424,12 @@ struct elf_segment_map *phdr_load_seg; Elf_Internal_Phdr *phdrs; Elf_Internal_Phdr *p; - file_ptr off; + file_ptr off; /* Octets. */ bfd_size_type maxpagesize; unsigned int alloc, actual; unsigned int i, j; struct elf_segment_map **sorted_seg_map; + unsigned int opb = bfd_octets_per_byte (abfd, NULL); if (link_info == NULL && !_bfd_elf_map_sections_to_segments (abfd, link_info)) @@ -5540,7 +5537,7 @@ for (j = 0; j < alloc; j++) { asection **secpp; - bfd_vma off_adjust; + bfd_vma off_adjust; /* Octets. */ bfd_boolean no_contents; /* An ELF segment (described by Elf_Internal_Phdr) may contain a @@ -5554,16 +5551,16 @@ p->p_flags = m->p_flags; if (m->count == 0) - p->p_vaddr = m->p_vaddr_offset; + p->p_vaddr = m->p_vaddr_offset * opb; else - p->p_vaddr = m->sections[0]->vma + m->p_vaddr_offset; + p->p_vaddr = (m->sections[0]->vma + m->p_vaddr_offset) * opb; if (m->p_paddr_valid) p->p_paddr = m->p_paddr; else if (m->count == 0) p->p_paddr = 0; else - p->p_paddr = m->sections[0]->lma + m->p_vaddr_offset; + p->p_paddr = (m->sections[0]->lma + m->p_vaddr_offset) * opb; if (p->p_type == PT_LOAD && (abfd->flags & D_PAGED) != 0) @@ -5598,7 +5595,7 @@ if (p->p_type == PT_LOAD && m->count > 0) { - bfd_size_type align; + bfd_size_type align; /* Bytes. */ unsigned int align_power = 0; if (m->p_align_valid) @@ -5635,7 +5632,7 @@ break; } - off_adjust = vma_page_aligned_bias (p->p_vaddr, off, align); + off_adjust = vma_page_aligned_bias (p->p_vaddr, off, align * opb); /* Broken hardware and/or kernel require that files do not map the same page with different permissions on some hppa @@ -5644,7 +5641,8 @@ && (abfd->flags & D_PAGED) != 0 && bed->no_page_alias && (off & (maxpagesize - 1)) != 0 - && (off & -maxpagesize) == ((off + off_adjust) & -maxpagesize)) + && ((off & -maxpagesize) + == ((off + off_adjust) & -maxpagesize))) off_adjust += maxpagesize; off += off_adjust; if (no_contents) @@ -5735,7 +5733,7 @@ else if (phdr_load_seg != NULL) { Elf_Internal_Phdr *phdr = phdrs + phdr_load_seg->idx; - bfd_vma phdr_off = 0; + bfd_vma phdr_off = 0; /* Octets. */ if (phdr_load_seg->includes_filehdr) phdr_off = bed->s->sizeof_ehdr; p->p_vaddr = phdr->p_vaddr + phdr_off; @@ -5752,10 +5750,24 @@ || (p->p_type == PT_NOTE && bfd_get_format (abfd) == bfd_core)) { if (!m->includes_filehdr && !m->includes_phdrs) - p->p_offset = off; + { + p->p_offset = off; + if (no_contents) + { + /* Put meaningless p_offset for PT_LOAD segments + without file contents somewhere within the first + page, in an attempt to not point past EOF. */ + bfd_size_type align = maxpagesize; + if (align < p->p_align) + align = p->p_align; + if (align < 1) + align = 1; + p->p_offset = off % align; + } + } else { - file_ptr adjust; + file_ptr adjust; /* Octets. */ adjust = off - (p->p_offset + p->p_filesz); if (!no_contents) @@ -5786,10 +5798,10 @@ && ((this_hdr->sh_flags & SHF_TLS) == 0 || p->p_type == PT_TLS)))) { - bfd_vma p_start = p->p_paddr; - bfd_vma p_end = p_start + p->p_memsz; - bfd_vma s_start = sec->lma; - bfd_vma adjust = s_start - p_end; + bfd_vma p_start = p->p_paddr; /* Octets. */ + bfd_vma p_end = p_start + p->p_memsz; /* Octets. */ + bfd_vma s_start = sec->lma * opb; /* Octets. */ + bfd_vma adjust = s_start - p_end; /* Octets. */ if (adjust != 0 && (s_start < p_end @@ -5798,16 +5810,18 @@ _bfd_error_handler /* xgettext:c-format */ (_("%pB: section %pA lma %#" PRIx64 " adjusted to %#" PRIx64), - abfd, sec, (uint64_t) s_start, (uint64_t) p_end); + abfd, sec, (uint64_t) s_start / opb, + (uint64_t) p_end / opb); adjust = 0; - sec->lma = p_end; + sec->lma = p_end / opb; } p->p_memsz += adjust; - if (this_hdr->sh_type != SHT_NOBITS) + if (p->p_type == PT_LOAD) { - if (p->p_type == PT_LOAD) + if (this_hdr->sh_type != SHT_NOBITS) { + off_adjust = 0; if (p->p_filesz + adjust < p->p_memsz) { /* We have a PROGBITS section following NOBITS ones. @@ -5817,10 +5831,25 @@ if (!write_zeros (abfd, off, adjust)) return FALSE; } + } + /* We only adjust sh_offset in SHT_NOBITS sections + as would seem proper for their address when the + section is first in the segment. sh_offset + doesn't really have any significance for + SHT_NOBITS anyway, apart from a notional position + relative to other sections. Historically we + didn't bother with adjusting sh_offset and some + programs depend on it not being adjusted. See + pr12921 and pr25662. */ + if (this_hdr->sh_type != SHT_NOBITS || i == 0) + { off += adjust; + if (this_hdr->sh_type == SHT_NOBITS) + off_adjust += adjust; } - p->p_filesz += adjust; } + if (this_hdr->sh_type != SHT_NOBITS) + p->p_filesz += adjust; } if (p->p_type == PT_NOTE && bfd_get_format (abfd) == bfd_core) @@ -5920,7 +5949,11 @@ _bfd_error_handler (_("%pB: error: PHDR segment not covered" " by LOAD segment"), abfd); - return FALSE; + if (link_info == NULL) + return FALSE; + /* Arrange for the linker to exit with an error, deleting + the output file unless --noinhibit-exec is given. */ + link_info->callbacks->info ("%X"); } /* Check that all sections are in a PT_LOAD segment. @@ -5982,7 +6015,7 @@ || hash->root.type == bfd_link_hash_common)) { asection *s = NULL; - bfd_vma filehdr_vaddr = phdrs[phdr_load_seg->idx].p_vaddr; + bfd_vma filehdr_vaddr = phdrs[phdr_load_seg->idx].p_vaddr / opb; if (phdr_load_seg->count != 0) /* The segment contains sections, so use the first one. */ @@ -6059,6 +6092,7 @@ Elf_Internal_Phdr *p; struct elf_segment_map *m; file_ptr off; + unsigned int opb = bfd_octets_per_byte (abfd, NULL); i_shdrpp = elf_elfsections (abfd); end_hdrpp = i_shdrpp + elf_numsections (abfd); @@ -6125,7 +6159,7 @@ { if (p->p_type == PT_GNU_RELRO) { - bfd_vma start, end; + bfd_vma start, end; /* Bytes. */ bfd_boolean ok; if (link_info != NULL) @@ -6141,7 +6175,7 @@ if (!m->p_size_valid) abort (); start = m->sections[0]->vma; - end = start + m->p_size; + end = start + m->p_size / opb; } else { @@ -6166,7 +6200,7 @@ && lm->count != 0 && (lm->sections[lm->count - 1]->vma + (!IS_TBSS (lm->sections[lm->count - 1]) - ? lm->sections[lm->count - 1]->size + ? lm->sections[lm->count - 1]->size / opb : 0)) > start && lm->sections[0]->vma < end) break; @@ -6186,10 +6220,10 @@ if (i < lm->count) { - p->p_vaddr = lm->sections[i]->vma; - p->p_paddr = lm->sections[i]->lma; + p->p_vaddr = lm->sections[i]->vma * opb; + p->p_paddr = lm->sections[i]->lma * opb; p->p_offset = lm->sections[i]->filepos; - p->p_memsz = end - p->p_vaddr; + p->p_memsz = end * opb - p->p_vaddr; p->p_filesz = p->p_memsz; /* The RELRO segment typically ends a few bytes @@ -6786,6 +6820,7 @@ struct elf_segment_map *phdr_adjust_seg = NULL; unsigned int phdr_adjust_num = 0; const struct elf_backend_data *bed; + unsigned int opb = bfd_octets_per_byte (ibfd, NULL); bed = get_elf_backend_data (ibfd); iehdr = elf_elfheader (ibfd); @@ -6808,17 +6843,17 @@ /* Returns TRUE if the given section is contained within the given segment. VMA addresses are compared. */ -#define IS_CONTAINED_BY_VMA(section, segment) \ - (section->vma >= segment->p_vaddr \ - && (section->vma + SECTION_SIZE (section, segment) \ +#define IS_CONTAINED_BY_VMA(section, segment, opb) \ + (section->vma * (opb) >= segment->p_vaddr \ + && (section->vma * (opb) + SECTION_SIZE (section, segment) \ <= (SEGMENT_END (segment, segment->p_vaddr)))) /* Returns TRUE if the given section is contained within the given segment. LMA addresses are compared. */ -#define IS_CONTAINED_BY_LMA(section, segment, base) \ - (section->lma >= base \ - && (section->lma + SECTION_SIZE (section, segment) >= section->lma) \ - && (section->lma + SECTION_SIZE (section, segment) \ +#define IS_CONTAINED_BY_LMA(section, segment, base, opb) \ + (section->lma * (opb) >= base \ + && (section->lma + SECTION_SIZE (section, segment) / (opb) >= section->lma) \ + && (section->lma * (opb) + SECTION_SIZE (section, segment) \ <= SEGMENT_END (segment, base))) /* Handle PT_NOTE segment. */ @@ -6864,10 +6899,10 @@ 7. SHF_TLS sections are only in PT_TLS or PT_LOAD segments. 8. PT_DYNAMIC should not contain empty sections at the beginning (with the possible exception of .dynamic). */ -#define IS_SECTION_IN_INPUT_SEGMENT(section, segment, bed) \ +#define IS_SECTION_IN_INPUT_SEGMENT(section, segment, bed, opb) \ ((((segment->p_paddr \ - ? IS_CONTAINED_BY_LMA (section, segment, segment->p_paddr) \ - : IS_CONTAINED_BY_VMA (section, segment)) \ + ? IS_CONTAINED_BY_LMA (section, segment, segment->p_paddr, opb) \ + : IS_CONTAINED_BY_VMA (section, segment, opb)) \ && (section->flags & SEC_ALLOC) != 0) \ || IS_NOTE (segment, section)) \ && segment->p_type != PT_GNU_STACK \ @@ -6879,15 +6914,15 @@ && (segment->p_type != PT_DYNAMIC \ || SECTION_SIZE (section, segment) > 0 \ || (segment->p_paddr \ - ? segment->p_paddr != section->lma \ - : segment->p_vaddr != section->vma) \ + ? segment->p_paddr != section->lma * (opb) \ + : segment->p_vaddr != section->vma * (opb)) \ || (strcmp (bfd_section_name (section), ".dynamic") == 0)) \ && (segment->p_type != PT_LOAD || !section->segment_mark)) /* If the output section of a section in the input segment is NULL, it is removed from the corresponding output segment. */ -#define INCLUDE_SECTION_IN_SEGMENT(section, segment, bed) \ - (IS_SECTION_IN_INPUT_SEGMENT (section, segment, bed) \ +#define INCLUDE_SECTION_IN_SEGMENT(section, segment, bed, opb) \ + (IS_SECTION_IN_INPUT_SEGMENT (section, segment, bed, opb) \ && section->output_section != NULL) /* Returns TRUE iff seg1 starts after the end of seg2. */ @@ -6941,7 +6976,7 @@ { /* Mininal change so that the normal section to segment assignment code will work. */ - segment->p_vaddr = section->vma; + segment->p_vaddr = section->vma * opb; break; } @@ -7013,7 +7048,7 @@ asection *matching_lma; asection *suggested_lma; unsigned int j; - bfd_size_type amt; + size_t amt; asection *first_section; if (segment->p_type == PT_NULL) @@ -7027,7 +7062,7 @@ { /* Find the first section in the input segment, which may be removed from the corresponding output segment. */ - if (IS_SECTION_IN_INPUT_SEGMENT (section, segment, bed)) + if (IS_SECTION_IN_INPUT_SEGMENT (section, segment, bed, opb)) { if (first_section == NULL) first_section = section; @@ -7039,7 +7074,7 @@ /* Allocate a segment map big enough to contain all of the sections we have selected. */ amt = sizeof (struct elf_segment_map) - sizeof (asection *); - amt += (bfd_size_type) section_count * sizeof (asection *); + amt += section_count * sizeof (asection *); map = (struct elf_segment_map *) bfd_zalloc (obfd, amt); if (map == NULL) return FALSE; @@ -7095,7 +7130,7 @@ " at vaddr=%#" PRIx64 ", is this intentional?"), ibfd, (uint64_t) segment->p_vaddr); - map->p_vaddr_offset = segment->p_vaddr; + map->p_vaddr_offset = segment->p_vaddr / opb; map->count = 0; *pointer_to_map = map; pointer_to_map = &map->next; @@ -7131,7 +7166,8 @@ pointers that we are interested in. As these sections get assigned to a segment, they are removed from this array. */ - sections = (asection **) bfd_malloc2 (section_count, sizeof (asection *)); + amt = section_count * sizeof (asection *); + sections = (asection **) bfd_malloc (amt); if (sections == NULL) return FALSE; @@ -7149,7 +7185,7 @@ section != NULL; section = section->next) { - if (INCLUDE_SECTION_IN_SEGMENT (section, segment, bed)) + if (INCLUDE_SECTION_IN_SEGMENT (section, segment, bed, opb)) { output_section = section->output_section; @@ -7170,16 +7206,17 @@ + (map->includes_phdrs ? iehdr->e_phnum * iehdr->e_phentsize : 0), - output_section->alignment_power) - == output_section->vma)) + output_section->alignment_power * opb) + == (output_section->vma * opb))) map->p_paddr = segment->p_vaddr; /* Match up the physical address of the segment with the LMA address of the output section. */ - if (IS_CONTAINED_BY_LMA (output_section, segment, map->p_paddr) + if (IS_CONTAINED_BY_LMA (output_section, segment, map->p_paddr, + opb) || IS_COREFILE_NOTE (segment, section) || (bed->want_p_paddr_set_to_zero - && IS_CONTAINED_BY_VMA (output_section, segment))) + && IS_CONTAINED_BY_VMA (output_section, segment, opb))) { if (matching_lma == NULL || output_section->lma < matching_lma->lma) @@ -7223,7 +7260,8 @@ /* Account for padding before the first section in the segment. */ - map->p_vaddr_offset = map->p_paddr + hdr_size - matching_lma->lma; + map->p_vaddr_offset = ((map->p_paddr + hdr_size) / opb + - matching_lma->lma); } free (sections); @@ -7237,7 +7275,7 @@ if (matching_lma == NULL) matching_lma = suggested_lma; - map->p_paddr = matching_lma->lma; + map->p_paddr = matching_lma->lma * opb; /* Offset the segment physical address from the lma to allow for space taken up by elf headers. */ @@ -7265,7 +7303,7 @@ the same alignment. */ if (segment->p_align != 0 && segment->p_align < align) align = segment->p_align; - map->p_paddr &= -align; + map->p_paddr &= -(align * opb); } } @@ -7294,7 +7332,8 @@ BFD_ASSERT (output_section != NULL); - if (IS_CONTAINED_BY_LMA (output_section, segment, map->p_paddr) + if (IS_CONTAINED_BY_LMA (output_section, segment, map->p_paddr, + opb) || IS_COREFILE_NOTE (segment, section)) { if (map->count == 0) @@ -7308,8 +7347,8 @@ + (map->includes_phdrs ? iehdr->e_phnum * iehdr->e_phentsize : 0), - output_section->alignment_power) - != output_section->lma) + output_section->alignment_power * opb) + != output_section->lma * opb) goto sorry; } else @@ -7346,14 +7385,9 @@ /* PR 23932. A corrupt input file may contain sections that cannot be assigned to any segment - because for example they have a - negative size - or segments that do not contain any sections. */ - if (map->count == 0) - { - sorry: - bfd_set_error (bfd_error_sorry); - free (sections); - return FALSE; - } + negative size - or segments that do not contain any sections. + But there are also valid reasons why a segment can be empty. + So allow a count of zero. */ /* Add the current segment to the list of built segments. */ *pointer_to_map = map; @@ -7365,7 +7399,7 @@ segments. Create a new segment here, initialise it and carry on looping. */ amt = sizeof (struct elf_segment_map) - sizeof (asection *); - amt += (bfd_size_type) section_count * sizeof (asection *); + amt += section_count * sizeof (asection *); map = (struct elf_segment_map *) bfd_zalloc (obfd, amt); if (map == NULL) { @@ -7380,11 +7414,17 @@ map->p_type = segment->p_type; map->p_flags = segment->p_flags; map->p_flags_valid = 1; - map->p_paddr = suggested_lma->lma; + map->p_paddr = suggested_lma->lma * opb; map->p_paddr_valid = p_paddr_valid; map->includes_filehdr = 0; map->includes_phdrs = 0; } + + continue; + sorry: + bfd_set_error (bfd_error_sorry); + free (sections); + return FALSE; } while (isec < section_count); @@ -7445,6 +7485,7 @@ unsigned int num_segments; bfd_boolean phdr_included = FALSE; bfd_boolean p_paddr_valid; + unsigned int opb = bfd_octets_per_byte (ibfd, NULL); iehdr = elf_elfheader (ibfd); @@ -7470,7 +7511,7 @@ { asection *section; unsigned int section_count; - bfd_size_type amt; + size_t amt; Elf_Internal_Shdr *this_hdr; asection *first_section = NULL; asection *lowest_section; @@ -7492,7 +7533,7 @@ /* Allocate a segment map big enough to contain all of the sections we have selected. */ amt = sizeof (struct elf_segment_map) - sizeof (asection *); - amt += (bfd_size_type) section_count * sizeof (asection *); + amt += section_count * sizeof (asection *); map = (struct elf_segment_map *) bfd_zalloc (obfd, amt); if (map == NULL) return FALSE; @@ -7570,7 +7611,7 @@ seg_off = this_hdr->sh_offset - segment->p_offset; else seg_off = this_hdr->sh_addr - segment->p_vaddr; - if (section->lma - segment->p_paddr != seg_off) + if (section->lma * opb - segment->p_paddr != seg_off) map->p_paddr_valid = FALSE; } if (isec == section_count) @@ -7580,7 +7621,7 @@ } if (section_count == 0) - map->p_vaddr_offset = segment->p_vaddr; + map->p_vaddr_offset = segment->p_vaddr / opb; else if (map->p_paddr_valid) { /* Account for padding before the first section in the segment. */ @@ -7590,7 +7631,7 @@ if (map->includes_phdrs) hdr_size += iehdr->e_phnum * iehdr->e_phentsize; - map->p_vaddr_offset = (map->p_paddr + hdr_size + map->p_vaddr_offset = ((map->p_paddr + hdr_size) / opb - (lowest_section ? lowest_section->lma : 0)); } @@ -7692,7 +7733,7 @@ return copy_elf_program_header (ibfd, obfd); } -rewrite: + rewrite: if (ibfd->xvec == obfd->xvec) { /* When rewriting program header, set the output maxpagesize to @@ -7745,10 +7786,19 @@ BFD_ASSERT (elf_section_data (osec) != NULL); - /* For objcopy and relocatable link, don't copy the output ELF - section type from input if the output BFD section flags have been - set to something different. For a final link allow some flags - that the linker clears to differ. */ + /* If this is a known ABI section, ELF section type and flags may + have been set up when OSEC was created. For normal sections we + allow the user to override the type and flags other than + SHF_MASKOS and SHF_MASKPROC. */ + if (elf_section_type (osec) == SHT_PROGBITS + || elf_section_type (osec) == SHT_NOTE + || elf_section_type (osec) == SHT_NOBITS) + elf_section_type (osec) = SHT_NULL; + /* For objcopy and relocatable link, copy the ELF section type from + the input file if the BFD section flags are the same. (If they + are different the user may be doing something like + "objcopy --set-section-flags .text=alloc,data".) For a final + link allow some flags that the linker clears to differ. */ if (elf_section_type (osec) == SHT_NULL && (osec->flags == isec->flags || (final_link @@ -7757,8 +7807,8 @@ elf_section_type (osec) = elf_section_type (isec); /* FIXME: Is this correct for all OS/PROC specific flags? */ - elf_section_flags (osec) |= (elf_section_flags (isec) - & (SHF_MASKOS | SHF_MASKPROC)); + elf_section_flags (osec) = (elf_section_flags (isec) + & (SHF_MASKOS | SHF_MASKPROC)); /* Copy sh_info from input for mbind section. */ if ((elf_tdata (ibfd)->has_gnu_osabi & elf_gnu_osabi_mbind) != 0 @@ -7863,19 +7913,34 @@ elf_section_flags (s->output_section) &= ~SHF_GROUP; elf_group_name (s->output_section) = NULL; } - /* Conversely, if the member section is not being output - but the SHT_GROUP section is, then adjust its size. */ - else if (s->output_section == discarded - && isec->output_section != discarded) + else { struct bfd_elf_section_data *elf_sec = elf_section_data (s); - removed += 4; - if (elf_sec->rel.hdr != NULL - && (elf_sec->rel.hdr->sh_flags & SHF_GROUP) != 0) - removed += 4; - if (elf_sec->rela.hdr != NULL - && (elf_sec->rela.hdr->sh_flags & SHF_GROUP) != 0) - removed += 4; + if (s->output_section == discarded + && isec->output_section != discarded) + { + /* Conversely, if the member section is not being + output but the SHT_GROUP section is, then adjust + its size. */ + removed += 4; + if (elf_sec->rel.hdr != NULL + && (elf_sec->rel.hdr->sh_flags & SHF_GROUP) != 0) + removed += 4; + if (elf_sec->rela.hdr != NULL + && (elf_sec->rela.hdr->sh_flags & SHF_GROUP) != 0) + removed += 4; + } + else + { + /* Also adjust for zero-sized relocation member + section. */ + if (elf_sec->rel.hdr != NULL + && elf_sec->rel.hdr->sh_size == 0) + removed += 4; + if (elf_sec->rela.hdr != NULL + && elf_sec->rela.hdr->sh_size == 0) + removed += 4; + } } s = elf_next_in_group (s); if (s == first) @@ -7995,7 +8060,7 @@ int relocatable_p) { const struct elf_backend_data *bed; - int symcount; + unsigned int symcount; asymbol **syms; struct elf_strtab_hash *stt; Elf_Internal_Shdr *symtab_hdr; @@ -8006,9 +8071,9 @@ bfd_byte *outbound_shndx; unsigned long outbound_syms_index; unsigned long outbound_shndx_index; - int idx; + unsigned int idx; unsigned int num_locals; - bfd_size_type amt; + size_t amt; bfd_boolean name_local_sections; if (!elf_map_symbols (abfd, &num_locals)) @@ -8032,21 +8097,22 @@ symstrtab_hdr->sh_type = SHT_STRTAB; /* Allocate buffer to swap out the .strtab section. */ - symstrtab = (struct elf_sym_strtab *) bfd_malloc2 (symcount + 1, - sizeof (*symstrtab)); - if (symstrtab == NULL) + if (_bfd_mul_overflow (symcount + 1, sizeof (*symstrtab), &amt) + || (symstrtab = (struct elf_sym_strtab *) bfd_malloc (amt)) == NULL) { + bfd_set_error (bfd_error_no_memory); _bfd_elf_strtab_free (stt); return FALSE; } - outbound_syms = (bfd_byte *) bfd_alloc2 (abfd, 1 + symcount, - bed->s->sizeof_sym); - if (outbound_syms == NULL) + if (_bfd_mul_overflow (symcount + 1, bed->s->sizeof_sym, &amt) + || (outbound_syms = (bfd_byte *) bfd_alloc (abfd, amt)) == NULL) { -error_return: - _bfd_elf_strtab_free (stt); + error_no_mem: + bfd_set_error (bfd_error_no_memory); + error_return: free (symstrtab); + _bfd_elf_strtab_free (stt); return FALSE; } symtab_hdr->contents = outbound_syms; @@ -8060,9 +8126,10 @@ symtab_shndx_hdr = & elf_symtab_shndx_list (abfd)->hdr; if (symtab_shndx_hdr->sh_name != 0) { - amt = (bfd_size_type) (1 + symcount) * sizeof (Elf_External_Sym_Shndx); - outbound_shndx = (bfd_byte *) - bfd_zalloc2 (abfd, 1 + symcount, sizeof (Elf_External_Sym_Shndx)); + if (_bfd_mul_overflow (symcount + 1, + sizeof (Elf_External_Sym_Shndx), &amt)) + goto error_no_mem; + outbound_shndx = (bfd_byte *) bfd_zalloc (abfd, amt); if (outbound_shndx == NULL) goto error_return; @@ -8184,9 +8251,26 @@ if (elf_symtab_shndx_list (abfd)) shndx = elf_symtab_shndx_list (abfd)->ndx; break; - default: + case SHN_COMMON: + case SHN_ABS: shndx = SHN_ABS; break; + default: + if (shndx >= SHN_LOPROC && shndx <= SHN_HIOS) + { + if (bed->symbol_section_index) + shndx = bed->symbol_section_index (abfd, type_ptr); + /* Otherwise just leave the index alone. */ + } + else + { + if (shndx > SHN_HIOS && shndx < SHN_HIRESERVE) + _bfd_error_handler (_("%pB: \ +Unable to handle section index %x in ELF symbol. Using ABS instead."), + abfd, shndx); + shndx = SHN_ABS; + } + break; } } else @@ -8362,14 +8446,24 @@ Elf_Internal_Shdr *hdr = &elf_tdata (abfd)->symtab_hdr; symcount = hdr->sh_size / get_elf_backend_data (abfd)->s->sizeof_sym; - if (symcount >= LONG_MAX / sizeof (asymbol *)) + if (symcount > LONG_MAX / sizeof (asymbol *)) { bfd_set_error (bfd_error_file_too_big); return -1; } - symtab_size = (symcount + 1) * (sizeof (asymbol *)); - if (symcount > 0) - symtab_size -= sizeof (asymbol *); + symtab_size = symcount * (sizeof (asymbol *)); + if (symcount == 0) + symtab_size = sizeof (asymbol *); + else if (!bfd_write_p (abfd)) + { + ufile_ptr filesize = bfd_get_file_size (abfd); + + if (filesize != 0 && (unsigned long) symtab_size > filesize) + { + bfd_set_error (bfd_error_file_truncated); + return -1; + } + } return symtab_size; } @@ -8388,22 +8482,46 @@ } symcount = hdr->sh_size / get_elf_backend_data (abfd)->s->sizeof_sym; - if (symcount >= LONG_MAX / sizeof (asymbol *)) + if (symcount > LONG_MAX / sizeof (asymbol *)) { bfd_set_error (bfd_error_file_too_big); return -1; } - symtab_size = (symcount + 1) * (sizeof (asymbol *)); - if (symcount > 0) - symtab_size -= sizeof (asymbol *); + symtab_size = symcount * (sizeof (asymbol *)); + if (symcount == 0) + symtab_size = sizeof (asymbol *); + else if (!bfd_write_p (abfd)) + { + ufile_ptr filesize = bfd_get_file_size (abfd); + + if (filesize != 0 && (unsigned long) symtab_size > filesize) + { + bfd_set_error (bfd_error_file_truncated); + return -1; + } + } return symtab_size; } long -_bfd_elf_get_reloc_upper_bound (bfd *abfd ATTRIBUTE_UNUSED, - sec_ptr asect) +_bfd_elf_get_reloc_upper_bound (bfd *abfd, sec_ptr asect) { + if (asect->reloc_count != 0 && !bfd_write_p (abfd)) + { + /* Sanity check reloc section size. */ + struct bfd_elf_section_data *d = elf_section_data (asect); + Elf_Internal_Shdr *rel_hdr = &d->this_hdr; + bfd_size_type ext_rel_size = rel_hdr->sh_size; + ufile_ptr filesize = bfd_get_file_size (abfd); + + if (filesize != 0 && ext_rel_size > filesize) + { + bfd_set_error (bfd_error_file_truncated); + return -1; + } + } + #if SIZEOF_LONG == SIZEOF_INT if (asect->reloc_count >= LONG_MAX / sizeof (arelent *)) { @@ -8469,7 +8587,7 @@ long _bfd_elf_get_dynamic_reloc_upper_bound (bfd *abfd) { - bfd_size_type count; + bfd_size_type count, ext_rel_size; asection *s; if (elf_dynsymtab (abfd) == 0) @@ -8479,11 +8597,18 @@ } count = 1; + ext_rel_size = 0; for (s = abfd->sections; s != NULL; s = s->next) if (elf_section_data (s)->this_hdr.sh_link == elf_dynsymtab (abfd) && (elf_section_data (s)->this_hdr.sh_type == SHT_REL || elf_section_data (s)->this_hdr.sh_type == SHT_RELA)) { + ext_rel_size += s->size; + if (ext_rel_size < s->size) + { + bfd_set_error (bfd_error_file_truncated); + return -1; + } count += s->size / elf_section_data (s)->this_hdr.sh_entsize; if (count > LONG_MAX / sizeof (arelent *)) { @@ -8491,6 +8616,16 @@ return -1; } } + if (count > 1 && !bfd_write_p (abfd)) + { + /* Sanity check reloc section sizes. */ + ufile_ptr filesize = bfd_get_file_size (abfd); + if (filesize != 0 && ext_rel_size > filesize) + { + bfd_set_error (bfd_error_file_truncated); + return -1; + } + } return count * sizeof (arelent *); } @@ -8550,6 +8685,7 @@ { bfd_byte *contents = NULL; unsigned int freeidx = 0; + size_t amt; if (elf_dynverref (abfd) != 0) { @@ -8564,39 +8700,28 @@ if (hdr->sh_info == 0 || hdr->sh_info > hdr->sh_size / sizeof (Elf_External_Verneed)) { -error_return_bad_verref: + error_return_bad_verref: _bfd_error_handler (_("%pB: .gnu.version_r invalid entry"), abfd); bfd_set_error (bfd_error_bad_value); -error_return_verref: + error_return_verref: elf_tdata (abfd)->verref = NULL; elf_tdata (abfd)->cverrefs = 0; goto error_return; } - ufile_ptr filesize = bfd_get_file_size (abfd); - if (filesize > 0 && filesize < hdr->sh_size) - { - /* PR 24708: Avoid attempts to allocate a ridiculous amount - of memory. */ - bfd_set_error (bfd_error_no_memory); - _bfd_error_handler - /* xgettext:c-format */ - (_("error: %pB version reference section is too large (%#" PRIx64 " bytes)"), - abfd, (uint64_t) hdr->sh_size); - goto error_return_verref; - } - contents = (bfd_byte *) bfd_malloc (hdr->sh_size); - if (contents == NULL) + if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) != 0) goto error_return_verref; - - if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) != 0 - || bfd_bread (contents, hdr->sh_size, abfd) != hdr->sh_size) + contents = _bfd_malloc_and_read (abfd, hdr->sh_size, hdr->sh_size); + if (contents == NULL) goto error_return_verref; - elf_tdata (abfd)->verref = (Elf_Internal_Verneed *) - bfd_alloc2 (abfd, hdr->sh_info, sizeof (Elf_Internal_Verneed)); - + if (_bfd_mul_overflow (hdr->sh_info, sizeof (Elf_Internal_Verneed), &amt)) + { + bfd_set_error (bfd_error_file_too_big); + goto error_return_verref; + } + elf_tdata (abfd)->verref = (Elf_Internal_Verneed *) bfd_alloc (abfd, amt); if (elf_tdata (abfd)->verref == NULL) goto error_return_verref; @@ -8625,9 +8750,14 @@ iverneed->vn_auxptr = NULL; else { + if (_bfd_mul_overflow (iverneed->vn_cnt, + sizeof (Elf_Internal_Vernaux), &amt)) + { + bfd_set_error (bfd_error_file_too_big); + goto error_return_verref; + } iverneed->vn_auxptr = (struct elf_internal_vernaux *) - bfd_alloc2 (abfd, iverneed->vn_cnt, - sizeof (Elf_Internal_Vernaux)); + bfd_alloc (abfd, amt); if (iverneed->vn_auxptr == NULL) goto error_return_verref; } @@ -8713,11 +8843,10 @@ goto error_return; } - contents = (bfd_byte *) bfd_malloc (hdr->sh_size); - if (contents == NULL) + if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) != 0) goto error_return_verdef; - if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) != 0 - || bfd_bread (contents, hdr->sh_size, abfd) != hdr->sh_size) + contents = _bfd_malloc_and_read (abfd, hdr->sh_size, hdr->sh_size); + if (contents == NULL) goto error_return_verdef; BFD_ASSERT (sizeof (Elf_External_Verdef) @@ -8759,9 +8888,12 @@ else freeidx = ++maxidx; } - - elf_tdata (abfd)->verdef = (Elf_Internal_Verdef *) - bfd_zalloc2 (abfd, maxidx, sizeof (Elf_Internal_Verdef)); + if (_bfd_mul_overflow (maxidx, sizeof (Elf_Internal_Verdef), &amt)) + { + bfd_set_error (bfd_error_file_too_big); + goto error_return_verdef; + } + elf_tdata (abfd)->verdef = (Elf_Internal_Verdef *) bfd_zalloc (abfd, amt); if (elf_tdata (abfd)->verdef == NULL) goto error_return_verdef; @@ -8789,9 +8921,14 @@ iverdef->vd_auxptr = NULL; else { + if (_bfd_mul_overflow (iverdef->vd_cnt, + sizeof (Elf_Internal_Verdaux), &amt)) + { + bfd_set_error (bfd_error_file_too_big); + goto error_return_verdef; + } iverdef->vd_auxptr = (struct elf_internal_verdaux *) - bfd_alloc2 (abfd, iverdef->vd_cnt, - sizeof (Elf_Internal_Verdaux)); + bfd_alloc (abfd, amt); if (iverdef->vd_auxptr == NULL) goto error_return_verdef; } @@ -8854,8 +8991,12 @@ else freeidx++; - elf_tdata (abfd)->verdef = (Elf_Internal_Verdef *) - bfd_zalloc2 (abfd, freeidx, sizeof (Elf_Internal_Verdef)); + if (_bfd_mul_overflow (freeidx, sizeof (Elf_Internal_Verdef), &amt)) + { + bfd_set_error (bfd_error_file_too_big); + goto error_return; + } + elf_tdata (abfd)->verdef = (Elf_Internal_Verdef *) bfd_zalloc (abfd, amt); if (elf_tdata (abfd)->verdef == NULL) goto error_return; @@ -8893,8 +9034,7 @@ return TRUE; error_return: - if (contents != NULL) - free (contents); + free (contents); return FALSE; } @@ -9142,20 +9282,47 @@ hdr = &elf_section_data (section)->this_hdr; if (hdr->sh_offset == (file_ptr) -1) { + unsigned char *contents; + if (bfd_section_is_ctf (section)) /* Nothing to do with this section: the contents are generated later. */ return TRUE; - /* We must compress this section. Write output to the buffer. */ - unsigned char *contents = hdr->contents; - if ((offset + count) > hdr->sh_size - || (section->flags & SEC_ELF_COMPRESS) == 0 - || contents == NULL) - abort (); + if ((section->flags & SEC_ELF_COMPRESS) == 0) + { + _bfd_error_handler + (_("%pB:%pA: error: attempting to write into an unallocated compressed section"), + abfd, section); + bfd_set_error (bfd_error_invalid_operation); + return FALSE; + } + + if ((offset + count) > hdr->sh_size) + { + _bfd_error_handler + (_("%pB:%pA: error: attempting to write over the end of the section"), + abfd, section); + + bfd_set_error (bfd_error_invalid_operation); + return FALSE; + } + + contents = hdr->contents; + if (contents == NULL) + { + _bfd_error_handler + (_("%pB:%pA: error: attempting to write section into an empty buffer"), + abfd, section); + + bfd_set_error (bfd_error_invalid_operation); + return FALSE; + } + memcpy (contents + offset, location, count); return TRUE; } + pos = hdr->sh_offset + offset; if (bfd_seek (abfd, pos, SEEK_SET) != 0 || bfd_bwrite (location, count, abfd) != count) @@ -9273,7 +9440,9 @@ _bfd_elf_close_and_cleanup (bfd *abfd) { struct elf_obj_tdata *tdata = elf_tdata (abfd); - if (bfd_get_format (abfd) == bfd_object && tdata != NULL) + if (tdata != NULL + && (bfd_get_format (abfd) == bfd_object + || bfd_get_format (abfd) == bfd_core)) { if (elf_tdata (abfd)->o != NULL && elf_shstrtab (abfd) != NULL) _bfd_elf_strtab_free (elf_shstrtab (abfd)); @@ -9304,8 +9473,6 @@ out details about the corefile. */ #ifdef HAVE_SYS_PROCFS_H -/* Needed for new procfs interface on sparc-solaris. */ -# define _STRUCTURED_PROC 1 # include #endif @@ -9730,6 +9897,12 @@ return elfcore_make_note_pseudosection (abfd, ".reg-aarch-pauth", note); } +static bfd_boolean +elfcore_grok_arc_v2 (bfd *abfd, Elf_Internal_Note *note) +{ + return elfcore_make_note_pseudosection (abfd, ".reg-arc-v2", note); +} + #if defined (HAVE_PRPSINFO_T) typedef prpsinfo_t elfcore_psinfo_t; #if defined (HAVE_PRPSINFO32_T) /* Sparc64 cross Sparc32 */ @@ -9954,18 +10127,26 @@ } #endif /* defined (HAVE_LWPSTATUS_T) */ +/* These constants, and the structure offsets used below, are defined by + Cygwin's core_dump.h */ +#define NOTE_INFO_PROCESS 1 +#define NOTE_INFO_THREAD 2 +#define NOTE_INFO_MODULE 3 +#define NOTE_INFO_MODULE64 4 + static bfd_boolean elfcore_grok_win32pstatus (bfd *abfd, Elf_Internal_Note *note) { char buf[30]; char *name; size_t len; + unsigned int name_size; asection *sect; - int type; + unsigned int type; int is_active_thread; bfd_vma base_addr; - if (note->descsz < 728) + if (note->descsz < 4) return TRUE; if (! CONST_STRNEQ (note->namedata, "win32")) @@ -9973,20 +10154,40 @@ type = bfd_get_32 (abfd, note->descdata); + struct { + const char *type_name; + unsigned long min_size; + } size_check[] = + { + { "NOTE_INFO_PROCESS", 12 }, + { "NOTE_INFO_THREAD", 12 }, + { "NOTE_INFO_MODULE", 12 }, + { "NOTE_INFO_MODULE64", 16 }, + }; + + if (type > (sizeof(size_check)/sizeof(size_check[0]))) + return TRUE; + + if (note->descsz < size_check[type - 1].min_size) + { + _bfd_error_handler (_("%pB: warning: win32pstatus %s of size %lu bytes is too small"), + abfd, size_check[type - 1].type_name, note->descsz); + return TRUE; + } + switch (type) { - case 1 /* NOTE_INFO_PROCESS */: + case NOTE_INFO_PROCESS: /* FIXME: need to add ->core->command. */ - /* process_info.pid */ - elf_tdata (abfd)->core->pid = bfd_get_32 (abfd, note->descdata + 8); - /* process_info.signal */ - elf_tdata (abfd)->core->signal = bfd_get_32 (abfd, note->descdata + 12); + elf_tdata (abfd)->core->pid = bfd_get_32 (abfd, note->descdata + 4); + elf_tdata (abfd)->core->signal = bfd_get_32 (abfd, note->descdata + 8); break; - case 2 /* NOTE_INFO_THREAD */: - /* Make a ".reg/999" section. */ + case NOTE_INFO_THREAD: + /* Make a ".reg/" section containing the Win32 API thread CONTEXT + structure. */ /* thread_info.tid */ - sprintf (buf, ".reg/%ld", (long) bfd_get_32 (abfd, note->descdata + 8)); + sprintf (buf, ".reg/%ld", (long) bfd_get_32 (abfd, note->descdata + 4)); len = strlen (buf) + 1; name = (char *) bfd_alloc (abfd, len); @@ -10000,7 +10201,7 @@ return FALSE; /* sizeof (thread_info.thread_context) */ - sect->size = 716; + sect->size = note->descsz - 12; /* offsetof (thread_info.thread_context) */ sect->filepos = note->descpos + 12; sect->alignment_power = 2; @@ -10013,11 +10214,25 @@ return FALSE; break; - case 3 /* NOTE_INFO_MODULE */: + case NOTE_INFO_MODULE: + case NOTE_INFO_MODULE64: /* Make a ".module/xxxxxxxx" section. */ - /* module_info.base_address */ - base_addr = bfd_get_32 (abfd, note->descdata + 4); - sprintf (buf, ".module/%08lx", (unsigned long) base_addr); + if (type == NOTE_INFO_MODULE) + { + /* module_info.base_address */ + base_addr = bfd_get_32 (abfd, note->descdata + 4); + sprintf (buf, ".module/%08lx", (unsigned long) base_addr); + /* module_info.module_name_size */ + name_size = bfd_get_32 (abfd, note->descdata + 8); + } + else /* NOTE_INFO_MODULE64 */ + { + /* module_info.base_address */ + base_addr = bfd_get_64 (abfd, note->descdata + 4); + sprintf (buf, ".module/%016lx", (unsigned long) base_addr); + /* module_info.module_name_size */ + name_size = bfd_get_32 (abfd, note->descdata + 12); + } len = strlen (buf) + 1; name = (char *) bfd_alloc (abfd, len); @@ -10031,6 +10246,13 @@ if (sect == NULL) return FALSE; + if (note->descsz < 12 + name_size) + { + _bfd_error_handler (_("%pB: win32pstatus NOTE_INFO_MODULE of size %lu is too small to contain a name of size %u"), + abfd, note->descsz, name_size); + return TRUE; + } + sect->size = note->descsz; sect->filepos = note->descpos; sect->alignment_power = 2; @@ -10289,6 +10511,13 @@ else return TRUE; + case NT_ARC_V2: + if (note->namesz == 6 + && strcmp (note->namedata, "LINUX") == 0) + return elfcore_grok_arc_v2 (abfd, note); + else + return TRUE; + case NT_ARM_VFP: if (note->namesz == 6 && strcmp (note->namedata, "LINUX") == 0) @@ -10666,11 +10895,17 @@ /* NetBSD-specific Elf Auxiliary Vector data. */ return elfcore_make_auxv_note_section (abfd, note, 4); #endif +#ifdef NT_NETBSDCORE_LWPSTATUS + case NT_NETBSDCORE_LWPSTATUS: + return elfcore_make_note_pseudosection (abfd, + ".note.netbsdcore.lwpstatus", + note); +#endif default: break; } - /* As of March 2017 there are no other machine-independent notes + /* As of March 2020 there are no other machine-independent notes defined for NetBSD core files. If the note type is less than the start of the machine-dependent note types, we don't understand it. */ @@ -10684,6 +10919,7 @@ /* On the Alpha, SPARC (32-bit and 64-bit), PT_GETREGS == mach+0 and PT_GETFPREGS == mach+2. */ + case bfd_arch_aarch64: case bfd_arch_alpha: case bfd_arch_sparc: switch (note->type) @@ -11694,6 +11930,18 @@ } char * +elfcore_write_arc_v2 (bfd *abfd, + char *buf, + int *bufsiz, + const void *arc_v2, + int size) +{ + char *note_name = "LINUX"; + return elfcore_write_note (abfd, buf, bufsiz, + note_name, NT_ARC_V2, arc_v2, size); +} + +char * elfcore_write_register_note (bfd *abfd, char *buf, int *bufsiz, @@ -11775,6 +12023,8 @@ return elfcore_write_aarch_sve (abfd, buf, bufsiz, data, size); if (strcmp (section, ".reg-aarch-pauth") == 0) return elfcore_write_aarch_pauth (abfd, buf, bufsiz, data, size); + if (strcmp (section, ".reg-arc-v2") == 0) + return elfcore_write_arc_v2 (abfd, buf, bufsiz, data, size); return NULL; } @@ -11891,7 +12141,7 @@ if (bfd_seek (abfd, offset, SEEK_SET) != 0) return FALSE; - buf = (char *) bfd_malloc (size + 1); + buf = (char *) _bfd_malloc_and_read (abfd, size + 1, size); if (buf == NULL) return FALSE; @@ -11899,8 +12149,7 @@ 0-termintate the buffer so that string searches will not overflow. */ buf[size] = 0; - if (bfd_bread (buf, size, abfd) != size - || !elf_parse_notes (abfd, buf, size, offset, align)) + if (!elf_parse_notes (abfd, buf, size, offset, align)) { free (buf); return FALSE; @@ -12274,3 +12523,458 @@ size = 1; return size; } + +/* Set to non-zero to enable some debug messages. */ +#define DEBUG_SECONDARY_RELOCS 0 + +/* An internal-to-the-bfd-library only section type + used to indicate a cached secondary reloc section. */ +#define SHT_SECONDARY_RELOC (SHT_LOOS + SHT_RELA) + +/* Create a BFD section to hold a secondary reloc section. */ + +bfd_boolean +_bfd_elf_init_secondary_reloc_section (bfd * abfd, + Elf_Internal_Shdr *hdr, + const char * name, + unsigned int shindex) +{ + /* We only support RELA secondary relocs. */ + if (hdr->sh_type != SHT_RELA) + return FALSE; + +#if DEBUG_SECONDARY_RELOCS + fprintf (stderr, "secondary reloc section %s encountered\n", name); +#endif + hdr->sh_type = SHT_SECONDARY_RELOC; + return _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex); +} + +/* Read in any secondary relocs associated with SEC. */ + +bfd_boolean +_bfd_elf_slurp_secondary_reloc_section (bfd * abfd, + asection * sec, + asymbol ** symbols) +{ + const struct elf_backend_data * const ebd = get_elf_backend_data (abfd); + asection * relsec; + bfd_boolean result = TRUE; + bfd_vma (*r_sym) (bfd_vma); + +#if BFD_DEFAULT_TARGET_SIZE > 32 + if (bfd_arch_bits_per_address (abfd) != 32) + r_sym = elf64_r_sym; + else +#endif + r_sym = elf32_r_sym; + + /* Discover if there are any secondary reloc sections + associated with SEC. */ + for (relsec = abfd->sections; relsec != NULL; relsec = relsec->next) + { + Elf_Internal_Shdr * hdr = & elf_section_data (relsec)->this_hdr; + + if (hdr->sh_type == SHT_SECONDARY_RELOC + && hdr->sh_info == (unsigned) elf_section_data (sec)->this_idx + && (hdr->sh_entsize == ebd->s->sizeof_rel + || hdr->sh_entsize == ebd->s->sizeof_rela)) + { + bfd_byte * native_relocs; + bfd_byte * native_reloc; + arelent * internal_relocs; + arelent * internal_reloc; + unsigned int i; + unsigned int entsize; + unsigned int symcount; + unsigned int reloc_count; + size_t amt; + + if (ebd->elf_info_to_howto == NULL) + return FALSE; + +#if DEBUG_SECONDARY_RELOCS + fprintf (stderr, "read secondary relocs for %s from %s\n", + sec->name, relsec->name); +#endif + entsize = hdr->sh_entsize; + + native_relocs = bfd_malloc (hdr->sh_size); + if (native_relocs == NULL) + { + result = FALSE; + continue; + } + + reloc_count = NUM_SHDR_ENTRIES (hdr); + if (_bfd_mul_overflow (reloc_count, sizeof (arelent), & amt)) + { + free (native_relocs); + bfd_set_error (bfd_error_file_too_big); + result = FALSE; + continue; + } + + internal_relocs = (arelent *) bfd_alloc (abfd, amt); + if (internal_relocs == NULL) + { + free (native_relocs); + result = FALSE; + continue; + } + + if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) != 0 + || (bfd_bread (native_relocs, hdr->sh_size, abfd) + != hdr->sh_size)) + { + free (native_relocs); + /* The internal_relocs will be freed when + the memory for the bfd is released. */ + result = FALSE; + continue; + } + + symcount = bfd_get_symcount (abfd); + + for (i = 0, internal_reloc = internal_relocs, + native_reloc = native_relocs; + i < reloc_count; + i++, internal_reloc++, native_reloc += entsize) + { + bfd_boolean res; + Elf_Internal_Rela rela; + + ebd->s->swap_reloca_in (abfd, native_reloc, & rela); + + /* The address of an ELF reloc is section relative for an object + file, and absolute for an executable file or shared library. + The address of a normal BFD reloc is always section relative, + and the address of a dynamic reloc is absolute.. */ + if ((abfd->flags & (EXEC_P | DYNAMIC)) == 0) + internal_reloc->address = rela.r_offset; + else + internal_reloc->address = rela.r_offset - sec->vma; + + if (r_sym (rela.r_info) == STN_UNDEF) + { + /* FIXME: This and the error case below mean that we + have a symbol on relocs that is not elf_symbol_type. */ + internal_reloc->sym_ptr_ptr = + bfd_abs_section_ptr->symbol_ptr_ptr; + } + else if (r_sym (rela.r_info) > symcount) + { + _bfd_error_handler + /* xgettext:c-format */ + (_("%pB(%pA): relocation %d has invalid symbol index %ld"), + abfd, sec, i, (long) r_sym (rela.r_info)); + bfd_set_error (bfd_error_bad_value); + internal_reloc->sym_ptr_ptr = + bfd_abs_section_ptr->symbol_ptr_ptr; + result = FALSE; + } + else + { + asymbol **ps; + + ps = symbols + r_sym (rela.r_info) - 1; + + internal_reloc->sym_ptr_ptr = ps; + /* Make sure that this symbol is not removed by strip. */ + (*ps)->flags |= BSF_KEEP; + } + + internal_reloc->addend = rela.r_addend; + + res = ebd->elf_info_to_howto (abfd, internal_reloc, & rela); + if (! res || internal_reloc->howto == NULL) + { +#if DEBUG_SECONDARY_RELOCS + fprintf (stderr, "there is no howto associated with reloc %lx\n", + rela.r_info); +#endif + result = FALSE; + } + } + + free (native_relocs); + /* Store the internal relocs. */ + elf_section_data (relsec)->sec_info = internal_relocs; + } + } + + return result; +} + +/* Set the ELF section header fields of an output secondary reloc section. */ + +bfd_boolean +_bfd_elf_copy_special_section_fields (const bfd * ibfd ATTRIBUTE_UNUSED, + bfd * obfd ATTRIBUTE_UNUSED, + const Elf_Internal_Shdr * isection, + Elf_Internal_Shdr * osection) +{ + asection * isec; + asection * osec; + struct bfd_elf_section_data * esd; + + if (isection == NULL) + return FALSE; + + if (isection->sh_type != SHT_SECONDARY_RELOC) + return TRUE; + + isec = isection->bfd_section; + if (isec == NULL) + return FALSE; + + osec = osection->bfd_section; + if (osec == NULL) + return FALSE; + + esd = elf_section_data (osec); + BFD_ASSERT (esd->sec_info == NULL); + esd->sec_info = elf_section_data (isec)->sec_info; + osection->sh_type = SHT_RELA; + osection->sh_link = elf_onesymtab (obfd); + if (osection->sh_link == 0) + { + /* There is no symbol table - we are hosed... */ + _bfd_error_handler + /* xgettext:c-format */ + (_("%pB(%pA): link section cannot be set because the output file does not have a symbol table"), + obfd, osec); + bfd_set_error (bfd_error_bad_value); + return FALSE; + } + + /* Find the output section that corresponds to the isection's sh_info link. */ + if (isection->sh_info == 0 + || isection->sh_info >= elf_numsections (ibfd)) + { + _bfd_error_handler + /* xgettext:c-format */ + (_("%pB(%pA): info section index is invalid"), + obfd, osec); + bfd_set_error (bfd_error_bad_value); + return FALSE; + } + + isection = elf_elfsections (ibfd)[isection->sh_info]; + + if (isection == NULL + || isection->bfd_section == NULL + || isection->bfd_section->output_section == NULL) + { + _bfd_error_handler + /* xgettext:c-format */ + (_("%pB(%pA): info section index cannot be set because the section is not in the output"), + obfd, osec); + bfd_set_error (bfd_error_bad_value); + return FALSE; + } + + esd = elf_section_data (isection->bfd_section->output_section); + BFD_ASSERT (esd != NULL); + osection->sh_info = esd->this_idx; + esd->has_secondary_relocs = TRUE; +#if DEBUG_SECONDARY_RELOCS + fprintf (stderr, "update header of %s, sh_link = %u, sh_info = %u\n", + osec->name, osection->sh_link, osection->sh_info); + fprintf (stderr, "mark section %s as having secondary relocs\n", + bfd_section_name (isection->bfd_section->output_section)); +#endif + + return TRUE; +} + +/* Write out a secondary reloc section. + + FIXME: Currently this function can result in a serious performance penalty + for files with secondary relocs and lots of sections. The proper way to + fix this is for _bfd_elf_copy_special_section_fields() to chain secondary + relocs together and then to have this function just walk that chain. */ + +bfd_boolean +_bfd_elf_write_secondary_reloc_section (bfd *abfd, asection *sec) +{ + const struct elf_backend_data * const ebd = get_elf_backend_data (abfd); + bfd_vma addr_offset; + asection * relsec; + bfd_vma (*r_info) (bfd_vma, bfd_vma); + bfd_boolean result = TRUE; + + if (sec == NULL) + return FALSE; + +#if BFD_DEFAULT_TARGET_SIZE > 32 + if (bfd_arch_bits_per_address (abfd) != 32) + r_info = elf64_r_info; + else +#endif + r_info = elf32_r_info; + + /* The address of an ELF reloc is section relative for an object + file, and absolute for an executable file or shared library. + The address of a BFD reloc is always section relative. */ + addr_offset = 0; + if ((abfd->flags & (EXEC_P | DYNAMIC)) != 0) + addr_offset = sec->vma; + + /* Discover if there are any secondary reloc sections + associated with SEC. */ + for (relsec = abfd->sections; relsec != NULL; relsec = relsec->next) + { + const struct bfd_elf_section_data * const esd = elf_section_data (relsec); + Elf_Internal_Shdr * const hdr = (Elf_Internal_Shdr *) & esd->this_hdr; + + if (hdr->sh_type == SHT_RELA + && hdr->sh_info == (unsigned) elf_section_data (sec)->this_idx) + { + asymbol * last_sym; + int last_sym_idx; + unsigned int reloc_count; + unsigned int idx; + arelent * src_irel; + bfd_byte * dst_rela; + + if (hdr->contents != NULL) + { + _bfd_error_handler + /* xgettext:c-format */ + (_("%pB(%pA): error: secondary reloc section processed twice"), + abfd, relsec); + bfd_set_error (bfd_error_bad_value); + result = FALSE; + continue; + } + + if (hdr->sh_entsize == 0) + { + _bfd_error_handler + /* xgettext:c-format */ + (_("%pB(%pA): error: secondary reloc section has zero sized entries"), + abfd, relsec); + bfd_set_error (bfd_error_bad_value); + result = FALSE; + continue; + } + + reloc_count = hdr->sh_size / hdr->sh_entsize; + if (reloc_count <= 0) + { + _bfd_error_handler + /* xgettext:c-format */ + (_("%pB(%pA): error: secondary reloc section is empty!"), + abfd, relsec); + bfd_set_error (bfd_error_bad_value); + result = FALSE; + continue; + } + + hdr->contents = bfd_alloc (abfd, hdr->sh_size); + if (hdr->contents == NULL) + continue; + +#if DEBUG_SECONDARY_RELOCS + fprintf (stderr, "write %u secondary relocs for %s from %s\n", + reloc_count, sec->name, relsec->name); +#endif + last_sym = NULL; + last_sym_idx = 0; + dst_rela = hdr->contents; + src_irel = (arelent *) esd->sec_info; + if (src_irel == NULL) + { + _bfd_error_handler + /* xgettext:c-format */ + (_("%pB(%pA): error: internal relocs missing for secondary reloc section"), + abfd, relsec); + bfd_set_error (bfd_error_bad_value); + result = FALSE; + continue; + } + + for (idx = 0; idx < reloc_count; idx++, dst_rela += hdr->sh_entsize) + { + Elf_Internal_Rela src_rela; + arelent *ptr; + asymbol *sym; + int n; + + ptr = src_irel + idx; + if (ptr == NULL) + { + _bfd_error_handler + /* xgettext:c-format */ + (_("%pB(%pA): error: reloc table entry %u is empty"), + abfd, relsec, idx); + bfd_set_error (bfd_error_bad_value); + result = FALSE; + break; + } + + if (ptr->sym_ptr_ptr == NULL) + { + /* FIXME: Is this an error ? */ + n = 0; + } + else + { + sym = *ptr->sym_ptr_ptr; + + if (sym == last_sym) + n = last_sym_idx; + else + { + n = _bfd_elf_symbol_from_bfd_symbol (abfd, & sym); + if (n < 0) + { + _bfd_error_handler + /* xgettext:c-format */ + (_("%pB(%pA): error: secondary reloc %u references a missing symbol"), + abfd, relsec, idx); + bfd_set_error (bfd_error_bad_value); + result = FALSE; + n = 0; + } + + last_sym = sym; + last_sym_idx = n; + } + + if (sym->the_bfd != NULL + && sym->the_bfd->xvec != abfd->xvec + && ! _bfd_elf_validate_reloc (abfd, ptr)) + { + _bfd_error_handler + /* xgettext:c-format */ + (_("%pB(%pA): error: secondary reloc %u references a deleted symbol"), + abfd, relsec, idx); + bfd_set_error (bfd_error_bad_value); + result = FALSE; + n = 0; + } + } + + src_rela.r_offset = ptr->address + addr_offset; + if (ptr->howto == NULL) + { + _bfd_error_handler + /* xgettext:c-format */ + (_("%pB(%pA): error: secondary reloc %u is of an unknown type"), + abfd, relsec, idx); + bfd_set_error (bfd_error_bad_value); + result = FALSE; + src_rela.r_info = r_info (0, 0); + } + else + src_rela.r_info = r_info (n, ptr->howto->type); + src_rela.r_addend = ptr->addend; + ebd->s->swap_reloca_out (abfd, &src_rela, dst_rela); + } + } + } + + return result; +} diff -Nru gdb-9.1/bfd/elfcode.h gdb-10.2/bfd/elfcode.h --- gdb-9.1/bfd/elfcode.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elfcode.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* ELF executable support for BFD. - Copyright (C) 1991-2019 Free Software Foundation, Inc. + Copyright (C) 1991-2020 Free Software Foundation, Inc. Written by Fred Fish @ Cygnus Support, from information published in "UNIX System V Release 4, Programmers Guide: ANSI C and @@ -317,11 +317,19 @@ /* PR 23657. Check for invalid section size, in sections with contents. Note - we do not set an error value here because the contents of this particular section might not be needed by the consumer. */ - if (dst->sh_type != SHT_NOBITS - && dst->sh_size > bfd_get_file_size (abfd)) - _bfd_error_handler - (_("warning: %pB has a corrupt section with a size (%" BFD_VMA_FMT "x) larger than the file size"), - abfd, dst->sh_size); + if (dst->sh_type != SHT_NOBITS) + { + ufile_ptr filesize = bfd_get_file_size (abfd); + + if (filesize != 0 + && ((ufile_ptr) dst->sh_offset > filesize + || dst->sh_size > filesize - dst->sh_offset)) + { + abfd->read_only = 1; + _bfd_error_handler (_("warning: %pB has a section " + "extending past end of file"), abfd); + } + } dst->sh_link = H_GET_32 (abfd, src->sh_link); dst->sh_info = H_GET_32 (abfd, src->sh_info); dst->sh_addralign = H_GET_WORD (abfd, src->sh_addralign); @@ -492,7 +500,7 @@ any side effects in ABFD, or any data it points to (like tdata), if the file does not match the target vector. */ -const bfd_target * +bfd_cleanup elf_object_p (bfd *abfd) { Elf_External_Ehdr x_ehdr; /* Elf file header, external form */ @@ -563,7 +571,7 @@ /* If this is a relocatable file and there is no section header table, then we're hosed. */ - if (i_ehdrp->e_shoff == 0 && i_ehdrp->e_type == ET_REL) + if (i_ehdrp->e_shoff < sizeof (x_ehdr) && i_ehdrp->e_type == ET_REL) goto got_wrong_format_error; /* As a simple sanity check, verify that what BFD thinks is the @@ -573,7 +581,7 @@ goto got_wrong_format_error; /* Further sanity check. */ - if (i_ehdrp->e_shoff == 0 && i_ehdrp->e_shnum != 0) + if (i_ehdrp->e_shoff < sizeof (x_ehdr) && i_ehdrp->e_shnum != 0) goto got_wrong_format_error; ebd = get_elf_backend_data (abfd); @@ -610,7 +618,7 @@ && ebd->elf_osabi != ELFOSABI_NONE) goto got_wrong_format_error; - if (i_ehdrp->e_shoff != 0) + if (i_ehdrp->e_shoff >= sizeof (x_ehdr)) { file_ptr where = (file_ptr) i_ehdrp->e_shoff; @@ -682,19 +690,18 @@ { Elf_Internal_Shdr *shdrp; unsigned int num_sec; + size_t amt; -#ifndef BFD64 - if (i_ehdrp->e_shnum > ((bfd_size_type) -1) / sizeof (*i_shdrp)) + if (_bfd_mul_overflow (i_ehdrp->e_shnum, sizeof (*i_shdrp), &amt)) goto got_wrong_format_error; -#endif - i_shdrp = (Elf_Internal_Shdr *) bfd_alloc2 (abfd, i_ehdrp->e_shnum, - sizeof (*i_shdrp)); + i_shdrp = (Elf_Internal_Shdr *) bfd_alloc (abfd, amt); if (!i_shdrp) goto got_no_match; num_sec = i_ehdrp->e_shnum; elf_numsections (abfd) = num_sec; - elf_elfsections (abfd) - = (Elf_Internal_Shdr **) bfd_alloc2 (abfd, num_sec, sizeof (i_shdrp)); + if (_bfd_mul_overflow (num_sec, sizeof (i_shdrp), &amt)) + goto got_wrong_format_error; + elf_elfsections (abfd) = (Elf_Internal_Shdr **) bfd_alloc (abfd, amt); if (!elf_elfsections (abfd)) goto got_no_match; @@ -760,6 +767,7 @@ So we are kind, and reset the string index value to 0 so that at least some processing can be done. */ i_ehdrp->e_shstrndx = SHN_UNDEF; + abfd->read_only = 1; _bfd_error_handler (_("warning: %pB has a corrupt string table index - ignoring"), abfd); @@ -775,19 +783,19 @@ { Elf_Internal_Phdr *i_phdr; unsigned int i; + ufile_ptr filesize; + size_t amt; -#ifndef BFD64 - if (i_ehdrp->e_phnum > ((bfd_size_type) -1) / sizeof (*i_phdr)) - goto got_wrong_format_error; -#endif /* Check for a corrupt input file with an impossibly large number of program headers. */ - if (bfd_get_file_size (abfd) > 0 - && i_ehdrp->e_phnum > bfd_get_file_size (abfd)) - goto got_no_match; + filesize = bfd_get_file_size (abfd); + if (filesize != 0 + && i_ehdrp->e_phnum > filesize / sizeof (Elf_External_Phdr)) + goto got_wrong_format_error; + if (_bfd_mul_overflow (i_ehdrp->e_phnum, sizeof (*i_phdr), &amt)) + goto got_wrong_format_error; elf_tdata (abfd)->phdr - = (Elf_Internal_Phdr *) bfd_alloc2 (abfd, i_ehdrp->e_phnum, - sizeof (*i_phdr)); + = (Elf_Internal_Phdr *) bfd_alloc (abfd, amt); if (elf_tdata (abfd)->phdr == NULL) goto got_no_match; if (bfd_seek (abfd, (file_ptr) i_ehdrp->e_phoff, SEEK_SET) != 0) @@ -800,10 +808,18 @@ if (bfd_bread (&x_phdr, sizeof x_phdr, abfd) != sizeof x_phdr) goto got_no_match; elf_swap_phdr_in (abfd, &x_phdr, i_phdr); + /* Too much code in BFD relies on alignment being a power of + two, as required by the ELF spec. */ + if (i_phdr->p_align != (i_phdr->p_align & -i_phdr->p_align)) + { + abfd->read_only = 1; + _bfd_error_handler (_("warning: %pB has a program header " + "with invalid alignment"), abfd); + } } } - if (i_ehdrp->e_shstrndx != 0 && i_ehdrp->e_shoff != 0) + if (i_ehdrp->e_shstrndx != 0 && i_ehdrp->e_shoff >= sizeof (x_ehdr)) { unsigned int num_sec; @@ -849,7 +865,7 @@ s->flags |= SEC_DEBUGGING; } } - return target; + return _bfd_no_cleanup; got_wrong_format_error: bfd_set_error (bfd_error_wrong_format); @@ -865,6 +881,7 @@ void elf_write_relocs (bfd *abfd, asection *sec, void *data) { + const struct elf_backend_data * const bed = get_elf_backend_data (abfd); bfd_boolean *failedp = (bfd_boolean *) data; Elf_Internal_Shdr *rela_hdr; bfd_vma addr_offset; @@ -874,6 +891,7 @@ unsigned int idx; asymbol *last_sym; int last_sym_idx; + size_t amt; /* If we have already failed, don't do anything. */ if (*failedp) @@ -900,10 +918,10 @@ rela_hdr = elf_section_data (sec)->rel.hdr; rela_hdr->sh_size = rela_hdr->sh_entsize * sec->reloc_count; - rela_hdr->contents = (unsigned char *) bfd_alloc2 (abfd, sec->reloc_count, - rela_hdr->sh_entsize); - if (rela_hdr->contents == NULL) + if (_bfd_mul_overflow (sec->reloc_count, rela_hdr->sh_entsize, &amt) + || (rela_hdr->contents = bfd_alloc (abfd, amt)) == NULL) { + bfd_set_error (bfd_error_no_memory); *failedp = TRUE; return; } @@ -980,6 +998,13 @@ src_rela.r_addend = ptr->addend; (*swap_out) (abfd, &src_rela, dst_rela); } + + if (elf_section_data (sec)->has_secondary_relocs + && !bed->write_secondary_relocs (abfd, sec)) + { + *failedp = TRUE; + return; + } } /* Write out the program headers. */ @@ -1012,7 +1037,7 @@ Elf_External_Shdr *x_shdrp; /* Section header table, external form */ Elf_Internal_Shdr **i_shdrp; /* Section header table, internal form */ unsigned int count; - bfd_size_type amt; + size_t amt; i_ehdrp = elf_elfheader (abfd); i_shdrp = elf_elfsections (abfd); @@ -1038,8 +1063,12 @@ i_shdrp[0]->sh_link = i_ehdrp->e_shstrndx; /* at this point we've concocted all the ELF sections... */ - x_shdrp = (Elf_External_Shdr *) bfd_alloc2 (abfd, i_ehdrp->e_shnum, - sizeof (*x_shdrp)); + if (_bfd_mul_overflow (i_ehdrp->e_shnum, sizeof (*x_shdrp), &amt)) + { + bfd_set_error (bfd_error_no_memory); + return FALSE; + } + x_shdrp = (Elf_External_Shdr *) bfd_alloc (abfd, amt); if (!x_shdrp) return FALSE; @@ -1128,8 +1157,7 @@ if (contents != NULL) { (*process) (contents, i_shdr.sh_size, arg); - if (free_contents != NULL) - free (free_contents); + free (free_contents); } } @@ -1150,6 +1178,7 @@ Elf_External_Versym *xver; Elf_External_Versym *xverbuf = NULL; const struct elf_backend_data *ebd; + size_t amt; /* Read each raw ELF symbol, converting from external ELF form to internal ELF form, and then using the information to create a @@ -1194,8 +1223,12 @@ if (isymbuf == NULL) return -1; - symbase = (elf_symbol_type *) bfd_zalloc2 (abfd, symcount, - sizeof (elf_symbol_type)); + if (_bfd_mul_overflow (symcount, sizeof (elf_symbol_type), &amt)) + { + bfd_set_error (bfd_error_file_too_big); + goto error_return; + } + symbase = (elf_symbol_type *) bfd_zalloc (abfd, amt); if (symbase == (elf_symbol_type *) NULL) goto error_return; @@ -1220,13 +1253,10 @@ { if (bfd_seek (abfd, verhdr->sh_offset, SEEK_SET) != 0) goto error_return; - - xverbuf = (Elf_External_Versym *) bfd_malloc (verhdr->sh_size); + xverbuf = (Elf_External_Versym *) + _bfd_malloc_and_read (abfd, verhdr->sh_size, verhdr->sh_size); if (xverbuf == NULL && verhdr->sh_size != 0) goto error_return; - - if (bfd_bread (xverbuf, verhdr->sh_size, abfd) != verhdr->sh_size) - goto error_return; } /* Skip first symbol, which is a null dummy. */ @@ -1281,7 +1311,10 @@ { /* This symbol is in a section for which we did not create a BFD section. Just use bfd_abs_section, - although it is wrong. FIXME. */ + although it is wrong. FIXME. Note - there is + code in elf.c:swap_out_syms that calls + symbol_section_index() in the elf backend for + cases like this. */ sym->symbol.section = bfd_abs_section_ptr; } } @@ -1381,16 +1414,14 @@ *symptrs = 0; /* Final null pointer */ } - if (xverbuf != NULL) - free (xverbuf); - if (isymbuf != NULL && hdr->contents != (unsigned char *) isymbuf) + free (xverbuf); + if (hdr->contents != (unsigned char *) isymbuf) free (isymbuf); return symcount; -error_return: - if (xverbuf != NULL) - free (xverbuf); - if (isymbuf != NULL && hdr->contents != (unsigned char *) isymbuf) + error_return: + free (xverbuf); + if (hdr->contents != (unsigned char *) isymbuf) free (isymbuf); return -1; } @@ -1415,14 +1446,11 @@ int entsize; unsigned int symcount; - allocated = bfd_malloc (rel_hdr->sh_size); + if (bfd_seek (abfd, rel_hdr->sh_offset, SEEK_SET) != 0) + return FALSE; + allocated = _bfd_malloc_and_read (abfd, rel_hdr->sh_size, rel_hdr->sh_size); if (allocated == NULL) - goto error_return; - - if (bfd_seek (abfd, rel_hdr->sh_offset, SEEK_SET) != 0 - || (bfd_bread (allocated, rel_hdr->sh_size, abfd) - != rel_hdr->sh_size)) - goto error_return; + return FALSE; native_relocs = (bfd_byte *) allocated; @@ -1491,13 +1519,11 @@ goto error_return; } - if (allocated != NULL) - free (allocated); + free (allocated); return TRUE; error_return: - if (allocated != NULL) - free (allocated); + free (allocated); return FALSE; } @@ -1509,12 +1535,14 @@ asymbol **symbols, bfd_boolean dynamic) { + const struct elf_backend_data * const bed = get_elf_backend_data (abfd); struct bfd_elf_section_data * const d = elf_section_data (asect); Elf_Internal_Shdr *rel_hdr; Elf_Internal_Shdr *rel_hdr2; bfd_size_type reloc_count; bfd_size_type reloc_count2; arelent *relents; + size_t amt; if (asect->relocation != NULL) return TRUE; @@ -1552,8 +1580,12 @@ reloc_count2 = 0; } - relents = (arelent *) bfd_alloc2 (abfd, reloc_count + reloc_count2, - sizeof (arelent)); + if (_bfd_mul_overflow (reloc_count + reloc_count2, sizeof (arelent), &amt)) + { + bfd_set_error (bfd_error_file_too_big); + return FALSE; + } + relents = (arelent *) bfd_alloc (abfd, amt); if (relents == NULL) return FALSE; @@ -1571,6 +1603,9 @@ symbols, dynamic)) return FALSE; + if (!bed->slurp_secondary_relocs (abfd, asect, symbols)) + return FALSE; + asect->relocation = relents; return TRUE; } @@ -1635,10 +1670,11 @@ bfd * NAME(_bfd_elf,bfd_from_remote_memory) (bfd *templ, - bfd_vma ehdr_vma, - bfd_size_type size, - bfd_vma *loadbasep, + bfd_vma ehdr_vma /* Bytes. */, + bfd_size_type size /* Octets. */, + bfd_vma *loadbasep /* Bytes. */, int (*target_read_memory) (bfd_vma, bfd_byte *, bfd_size_type)) + /* (Bytes , , octets ). */ { Elf_External_Ehdr x_ehdr; /* Elf file header, external form */ Elf_Internal_Ehdr i_ehdr; /* Elf file header, internal form */ @@ -1651,8 +1687,9 @@ unsigned int i; bfd_vma high_offset; bfd_vma shdr_end; - bfd_vma loadbase; - char *filename; + bfd_vma loadbase; /* Bytes. */ + size_t amt; + unsigned int opb = bfd_octets_per_byte (templ, NULL); /* Read in the ELF header in external format. */ err = target_read_memory (ehdr_vma, (bfd_byte *) &x_ehdr, sizeof x_ehdr); @@ -1709,9 +1746,13 @@ return NULL; } - x_phdrs - = (Elf_External_Phdr *) bfd_malloc2 (i_ehdr.e_phnum, - sizeof (*x_phdrs) + sizeof (*i_phdrs)); + if (_bfd_mul_overflow (i_ehdr.e_phnum, + sizeof (*x_phdrs) + sizeof (*i_phdrs), &amt)) + { + bfd_set_error (bfd_error_file_too_big); + return NULL; + } + x_phdrs = (Elf_External_Phdr *) bfd_malloc (amt); if (x_phdrs == NULL) return NULL; err = target_read_memory (ehdr_vma + i_ehdr.e_phoff, (bfd_byte *) x_phdrs, @@ -1746,17 +1787,17 @@ header sits, then we can figure out the loadbase. */ if (first_phdr == NULL) { - bfd_vma p_offset = i_phdrs[i].p_offset; - bfd_vma p_vaddr = i_phdrs[i].p_vaddr; + bfd_vma p_offset = i_phdrs[i].p_offset; /* Octets. */ + bfd_vma p_vaddr = i_phdrs[i].p_vaddr; /* Octets. */ if (i_phdrs[i].p_align > 1) { - p_offset &= -i_phdrs[i].p_align; - p_vaddr &= -i_phdrs[i].p_align; + p_offset &= -(i_phdrs[i].p_align * opb); + p_vaddr &= -(i_phdrs[i].p_align * opb); } if (p_offset == 0) { - loadbase = ehdr_vma - p_vaddr; + loadbase = ehdr_vma - p_vaddr / opb; first_phdr = &i_phdrs[i]; } } @@ -1812,9 +1853,9 @@ for (i = 0; i < i_ehdr.e_phnum; ++i) if (i_phdrs[i].p_type == PT_LOAD) { - bfd_vma start = i_phdrs[i].p_offset; - bfd_vma end = start + i_phdrs[i].p_filesz; - bfd_vma vaddr = i_phdrs[i].p_vaddr; + bfd_vma start = i_phdrs[i].p_offset; /* Octets. */ + bfd_vma end = start + i_phdrs[i].p_filesz; /* Octets. */ + bfd_vma vaddr = i_phdrs[i].p_vaddr; /* Octets. */ /* Extend the beginning of the first pt_load to cover file header and program headers, if we proved earlier that its @@ -1827,7 +1868,7 @@ /* Extend the end of the last pt_load to cover section headers. */ if (last_phdr == &i_phdrs[i]) end = high_offset; - err = target_read_memory (loadbase + vaddr, + err = target_read_memory (loadbase + vaddr / opb, contents + start, end - start); if (err) { @@ -1860,22 +1901,14 @@ free (contents); return NULL; } - filename = bfd_strdup (""); - if (filename == NULL) - { - free (bim); - free (contents); - return NULL; - } nbfd = _bfd_new_bfd (); - if (nbfd == NULL) + if (nbfd == NULL + || !bfd_set_filename (nbfd, "")) { - free (filename); free (bim); free (contents); return NULL; } - nbfd->filename = filename; nbfd->xvec = templ->xvec; bim->size = high_offset; bim->buffer = contents; diff -Nru gdb-9.1/bfd/elfcore.h gdb-10.2/bfd/elfcore.h --- gdb-9.1/bfd/elfcore.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elfcore.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* ELF core file support for BFD. - Copyright (C) 1995-2019 Free Software Foundation, Inc. + Copyright (C) 1995-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -61,9 +61,9 @@ corename = elf_tdata (core_bfd)->core->program; if (corename != NULL) { - const char* execname = strrchr (exec_bfd->filename, '/'); + const char* execname = strrchr (bfd_get_filename (exec_bfd), '/'); - execname = execname ? execname + 1 : exec_bfd->filename; + execname = execname ? execname + 1 : bfd_get_filename (exec_bfd); if (strcmp (execname, corename) != 0) return FALSE; @@ -83,7 +83,7 @@ that allow standard bfd access to the general registers (.reg) and the floating point registers (.reg2). */ -const bfd_target * +bfd_cleanup elf_core_file_p (bfd *abfd) { Elf_External_Ehdr x_ehdr; /* Elf file header, external form. */ @@ -314,11 +314,11 @@ /* Save the entry point from the ELF header. */ abfd->start_address = i_ehdrp->e_entry; - return abfd->xvec; + return _bfd_no_cleanup; -wrong: + wrong: bfd_set_error (bfd_error_wrong_format); -fail: + fail: return NULL; } @@ -335,6 +335,7 @@ Elf_Internal_Ehdr i_ehdr; /* Elf file header, internal form. */ Elf_Internal_Phdr *i_phdr; unsigned int i; + size_t amt; /* Seek to the position of the segment at OFFSET. */ if (bfd_seek (abfd, offset, SEEK_SET) != 0) @@ -384,8 +385,12 @@ goto fail; /* Read in program headers. */ - i_phdr = (Elf_Internal_Phdr *) bfd_alloc2 (abfd, i_ehdr.e_phnum, - sizeof (*i_phdr)); + if (_bfd_mul_overflow (i_ehdr.e_phnum, sizeof (*i_phdr), &amt)) + { + bfd_set_error (bfd_error_file_too_big); + goto fail; + } + i_phdr = (Elf_Internal_Phdr *) bfd_alloc (abfd, amt); if (i_phdr == NULL) goto fail; @@ -414,8 +419,8 @@ build-id was found. */ goto fail; -wrong: + wrong: bfd_set_error (bfd_error_wrong_format); -fail: + fail: return FALSE; } diff -Nru gdb-9.1/bfd/elf-eh-frame.c gdb-10.2/bfd/elf-eh-frame.c --- gdb-9.1/bfd/elf-eh-frame.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf-eh-frame.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* .eh_frame section optimization. - Copyright (C) 2001-2019 Free Software Foundation, Inc. + Copyright (C) 2001-2020 Free Software Foundation, Inc. Written by Jakub Jelinek . This file is part of BFD, the Binary File Descriptor library. @@ -1049,13 +1049,10 @@ (_("error in %pB(%pA); no .eh_frame_hdr table will be created"), abfd, sec); hdr_info->u.dwarf.table = FALSE; - if (sec_info) - free (sec_info); + free (sec_info); success: - if (ehbuf) - free (ehbuf); - if (local_cies) - free (local_cies); + free (ehbuf); + free (local_cies); #undef REQUIRE } @@ -1558,11 +1555,8 @@ } } - if (sec_info->cies) - { - free (sec_info->cies); - sec_info->cies = NULL; - } + free (sec_info->cies); + sec_info->cies = NULL; /* It may be that some .eh_frame input section has greater alignment than other .eh_frame sections. In that case we run the risk of @@ -2149,6 +2143,7 @@ /* Fall thru */ case bfd_arch_frv: case bfd_arch_i386: + case bfd_arch_nios2: BFD_ASSERT (htab->hgot != NULL && ((htab->hgot->root.type == bfd_link_hash_defined) @@ -2510,8 +2505,7 @@ retval = FALSE; free (contents); - if (hdr_info->u.dwarf.array != NULL) - free (hdr_info->u.dwarf.array); + free (hdr_info->u.dwarf.array); return retval; } diff -Nru gdb-9.1/bfd/elf-hppa.h gdb-10.2/bfd/elf-hppa.h --- gdb-9.1/bfd/elf-hppa.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf-hppa.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Common code for PA ELF implementations. - Copyright (C) 1999-2019 Free Software Foundation, Inc. + Copyright (C) 1999-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -754,7 +754,7 @@ { elf_hppa_reloc_type *finaltype; elf_hppa_reloc_type **final_types; - bfd_size_type amt = sizeof (elf_hppa_reloc_type *) * 2; + size_t amt = sizeof (elf_hppa_reloc_type *) * 2; /* Allocate slots for the BFD relocation. */ final_types = bfd_alloc (abfd, amt); diff -Nru gdb-9.1/bfd/elf-ifunc.c gdb-10.2/bfd/elf-ifunc.c --- gdb-9.1/bfd/elf-ifunc.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf-ifunc.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* ELF STT_GNU_IFUNC support. - Copyright (C) 2009-2019 Free Software Foundation, Inc. + Copyright (C) 2009-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -107,7 +107,6 @@ _bfd_elf_allocate_ifunc_dyn_relocs (struct bfd_link_info *info, struct elf_link_hash_entry *h, struct elf_dyn_relocs **head, - bfd_boolean *readonly_dynrelocs_against_ifunc_p, unsigned int plt_entry_size, unsigned int plt_header_size, unsigned int got_entry_size, @@ -118,7 +117,6 @@ unsigned int sizeof_reloc; const struct elf_backend_data *bed; struct elf_link_hash_table *htab; - bfd_boolean readonly_dynrelocs_against_ifunc; /* If AVOID_PLT is TRUE, don't use PLT if possible. */ bfd_boolean use_plt = !avoid_plt || h->plt.refcount > 0; bfd_boolean need_dynreloc = !use_plt || bfd_link_pic (info); @@ -201,7 +199,7 @@ return TRUE; } -keep: + keep: bed = get_elf_backend_data (info->output_bfd); if (bed->rela_plts_and_copies_p) sizeof_reloc = bed->s->sizeof_rela; @@ -255,8 +253,6 @@ if (!need_dynreloc || !h->non_got_ref) *head = NULL; - readonly_dynrelocs_against_ifunc = FALSE; - /* Finally, allocate space. */ p = *head; if (p != NULL) @@ -264,17 +260,13 @@ bfd_size_type count = 0; do { - if (!readonly_dynrelocs_against_ifunc) - { - asection *s = p->sec->output_section; - if (s != NULL && (s->flags & SEC_READONLY) != 0) - readonly_dynrelocs_against_ifunc = TRUE; - } count += p->count; p = p->next; } while (p != NULL); + htab->ifunc_resolvers = count != 0; + /* Dynamic relocations are stored in 1. .rel[a].ifunc section in PIC object. 2. .rel[a].got section in dynamic executable. @@ -290,9 +282,6 @@ } } - if (readonly_dynrelocs_against_ifunc_p) - *readonly_dynrelocs_against_ifunc_p = readonly_dynrelocs_against_ifunc; - /* For STT_GNU_IFUNC symbol, .got.plt has the real function address and .got has the PLT entry adddress. We will load the GOT entry with the PLT entry in finish_dynamic_symbol if it is used. For diff -Nru gdb-9.1/bfd/elflink.c gdb-10.2/bfd/elflink.c --- gdb-9.1/bfd/elflink.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elflink.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* ELF linking support for BFD. - Copyright (C) 1995-2019 Free Software Foundation, Inc. + Copyright (C) 1995-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -32,6 +32,13 @@ #include "plugin.h" #endif +#ifdef HAVE_LIMITS_H +#include +#endif +#ifndef CHAR_BIT +#define CHAR_BIT 8 +#endif + /* This struct is used to pass information to routines called via elf_link_hash_traverse which must return failure. */ @@ -505,6 +512,16 @@ const char *name; size_t indx; + if (h->root.type == bfd_link_hash_defined + || h->root.type == bfd_link_hash_defweak) + { + /* An IR symbol should not be made dynamic. */ + if (h->root.u.def.section != NULL + && h->root.u.def.section->owner != NULL + && (h->root.u.def.section->owner->flags & BFD_PLUGIN) != 0) + return TRUE; + } + /* XXX: The ABI draft says the linker must turn hidden and internal symbols into STB_LOCAL symbols when producing the DSO. However, if ld.so honors st_other in the dynamic table, @@ -747,7 +764,7 @@ bfd *input_bfd, long input_indx) { - bfd_size_type amt; + size_t amt; struct elf_link_local_dynamic_entry *entry; struct elf_link_hash_table *eht; struct elf_strtab_hash *dynstr; @@ -1041,7 +1058,7 @@ bfd_boolean *pold_weak, unsigned int *pold_alignment, bfd_boolean *skip, - bfd_boolean *override, + bfd **override, bfd_boolean *type_change_ok, bfd_boolean *size_change_ok, bfd_boolean *matched) @@ -1059,7 +1076,7 @@ bfd_boolean default_sym = *matched; *skip = FALSE; - *override = FALSE; + *override = NULL; sec = *psec; bind = ELF_ST_BIND (sym->st_info); @@ -1635,7 +1652,7 @@ || (h->root.type == bfd_link_hash_common && (newweak || newfunc)))) { - *override = TRUE; + *override = abfd; newdef = FALSE; newdyncommon = FALSE; @@ -1661,7 +1678,7 @@ if (newdyncommon && h->root.type == bfd_link_hash_common) { - *override = TRUE; + *override = oldbfd; newdef = FALSE; newdyncommon = FALSE; *pvalue = sym->st_size; @@ -1837,7 +1854,7 @@ const struct elf_backend_data *bed; bfd_boolean collect; bfd_boolean dynamic; - bfd_boolean override; + bfd *override; char *p; size_t len, shortlen; asection *tmp_sec; @@ -2039,7 +2056,7 @@ /* We also need to define an indirection from the nondefault version of the symbol. */ -nondefault: + nondefault: len = strlen (name); shortname = (char *) bfd_hash_allocate (&info->hash->table, len); if (shortname == NULL) @@ -2155,7 +2172,7 @@ struct elf_find_verdep_info *rinfo = (struct elf_find_verdep_info *) data; Elf_Internal_Verneed *t; Elf_Internal_Vernaux *a; - bfd_size_type amt; + size_t amt; /* We only care about symbols defined in shared objects with version information. */ @@ -2643,8 +2660,7 @@ if (keep_memory) esdo->relocs = internal_relocs; - if (alloc1 != NULL) - free (alloc1); + free (alloc1); /* Don't free alloc2, since if it was allocated we are passing it back (under the name of internal_relocs). */ @@ -2652,8 +2668,7 @@ return internal_relocs; error_return: - if (alloc1 != NULL) - free (alloc1); + free (alloc1); if (alloc2 != NULL) { if (keep_memory) @@ -3323,8 +3338,8 @@ elf_hash_table (info)->tls_sec = tls; - /* Ensure the alignment of the first section is the largest alignment, - so that the tls segment starts aligned. */ + /* Ensure the alignment of the first section (usually .tdata) is the largest + alignment, so that the tls segment starts aligned. */ if (tls != NULL) tls->alignment_power = align; @@ -3501,23 +3516,119 @@ return TRUE; } -/* Add a DT_NEEDED entry for this dynamic object if DO_IT is true, - otherwise just check whether one already exists. Returns -1 on error, +/* Strip zero-sized dynamic sections. */ + +bfd_boolean +_bfd_elf_strip_zero_sized_dynamic_sections (struct bfd_link_info *info) +{ + struct elf_link_hash_table *hash_table; + const struct elf_backend_data *bed; + asection *s, *sdynamic, **pp; + asection *rela_dyn, *rel_dyn; + Elf_Internal_Dyn dyn; + bfd_byte *extdyn, *next; + void (*swap_dyn_in) (bfd *, const void *, Elf_Internal_Dyn *); + bfd_boolean strip_zero_sized; + bfd_boolean strip_zero_sized_plt; + + if (bfd_link_relocatable (info)) + return TRUE; + + hash_table = elf_hash_table (info); + if (!is_elf_hash_table (hash_table)) + return FALSE; + + if (!hash_table->dynobj) + return TRUE; + + sdynamic= bfd_get_linker_section (hash_table->dynobj, ".dynamic"); + if (!sdynamic) + return TRUE; + + bed = get_elf_backend_data (hash_table->dynobj); + swap_dyn_in = bed->s->swap_dyn_in; + + strip_zero_sized = FALSE; + strip_zero_sized_plt = FALSE; + + /* Strip zero-sized dynamic sections. */ + rela_dyn = bfd_get_section_by_name (info->output_bfd, ".rela.dyn"); + rel_dyn = bfd_get_section_by_name (info->output_bfd, ".rel.dyn"); + for (pp = &info->output_bfd->sections; (s = *pp) != NULL;) + if (s->size == 0 + && (s == rela_dyn + || s == rel_dyn + || s == hash_table->srelplt->output_section + || s == hash_table->splt->output_section)) + { + *pp = s->next; + info->output_bfd->section_count--; + strip_zero_sized = TRUE; + if (s == rela_dyn) + s = rela_dyn; + if (s == rel_dyn) + s = rel_dyn; + else if (s == hash_table->splt->output_section) + { + s = hash_table->splt; + strip_zero_sized_plt = TRUE; + } + else + s = hash_table->srelplt; + s->flags |= SEC_EXCLUDE; + s->output_section = bfd_abs_section_ptr; + } + else + pp = &s->next; + + if (strip_zero_sized_plt) + for (extdyn = sdynamic->contents; + extdyn < sdynamic->contents + sdynamic->size; + extdyn = next) + { + next = extdyn + bed->s->sizeof_dyn; + swap_dyn_in (hash_table->dynobj, extdyn, &dyn); + switch (dyn.d_tag) + { + default: + break; + case DT_JMPREL: + case DT_PLTRELSZ: + case DT_PLTREL: + /* Strip DT_PLTRELSZ, DT_JMPREL and DT_PLTREL entries if + the procedure linkage table (the .plt section) has been + removed. */ + memmove (extdyn, next, + sdynamic->size - (next - sdynamic->contents)); + next = extdyn; + } + } + + if (strip_zero_sized) + { + /* Regenerate program headers. */ + elf_seg_map (info->output_bfd) = NULL; + return _bfd_elf_map_sections_to_segments (info->output_bfd, info); + } + + return TRUE; +} + +/* Add a DT_NEEDED entry for this dynamic object. Returns -1 on error, 1 if a DT_NEEDED tag already exists, and 0 on success. */ -static int -elf_add_dt_needed_tag (bfd *abfd, - struct bfd_link_info *info, - const char *soname, - bfd_boolean do_it) +int +bfd_elf_add_dt_needed_tag (bfd *abfd, struct bfd_link_info *info) { struct elf_link_hash_table *hash_table; size_t strindex; + const char *soname; if (!_bfd_elf_link_create_dynstrtab (abfd, info)) return -1; hash_table = elf_hash_table (info); + soname = elf_dt_name (abfd); strindex = _bfd_elf_strtab_add (hash_table->dynstr, soname, FALSE); if (strindex == (size_t) -1) return -1; @@ -3547,17 +3658,11 @@ } } - if (do_it) - { - if (!_bfd_elf_link_create_dynamic_sections (hash_table->dynobj, info)) - return -1; + if (!_bfd_elf_link_create_dynamic_sections (hash_table->dynobj, info)) + return -1; - if (!_bfd_elf_add_dynamic_entry (info, DT_NEEDED, strindex)) - return -1; - } - else - /* We were just checking for existence of the tag. */ - _bfd_elf_strtab_delref (hash_table->dynstr, strindex); + if (!_bfd_elf_add_dynamic_entry (info, DT_NEEDED, strindex)) + return -1; return 0; } @@ -3868,8 +3973,16 @@ Elf_Internal_Rela *internal_relocs; bfd_boolean ok; - /* Don't check relocations in excluded sections. */ - if ((o->flags & SEC_RELOC) == 0 + /* Don't check relocations in excluded sections. Don't do + anything special with non-loaded, non-alloced sections. + In particular, any relocs in such sections should not + affect GOT and PLT reference counting (ie. we don't + allow them to create GOT or PLT entries), there's no + possibility or desire to optimize TLS relocs, and + there's not much point in propagating relocs to shared + libs that the dynamic linker won't relocate. */ + if ((o->flags & SEC_ALLOC) == 0 + || (o->flags & SEC_RELOC) == 0 || (o->flags & SEC_EXCLUDE) != 0 || o->reloc_count == 0 || ((info->strip == strip_all || info->strip == strip_debugger) @@ -3919,7 +4032,6 @@ const struct elf_backend_data *bed; bfd_boolean add_needed; struct elf_link_hash_table *htab; - bfd_size_type amt; void *alloc_mark = NULL; struct bfd_hash_entry **old_table = NULL; unsigned int old_size = 0; @@ -4070,7 +4182,7 @@ char *audit = NULL; struct bfd_link_needed_list *rpath = NULL, *runpath = NULL; const Elf_Internal_Phdr *phdr; - int ret; + struct elf_link_loaded_list *loaded_lib; /* ld --just-symbols and dynamic objects don't mix very well. ld shouldn't allow it. */ @@ -4098,7 +4210,7 @@ if (!bfd_malloc_and_get_section (abfd, s, &dynbuf)) { -error_free_dyn: + error_free_dyn: free (dynbuf); goto error_return; } @@ -4127,8 +4239,8 @@ struct bfd_link_needed_list *n, **pn; char *fnm, *anm; unsigned int tagv = dyn.d_un.d_val; + size_t amt = sizeof (struct bfd_link_needed_list); - amt = sizeof (struct bfd_link_needed_list); n = (struct bfd_link_needed_list *) bfd_alloc (abfd, amt); fnm = bfd_elf_string_from_elf_section (abfd, shlink, tagv); if (n == NULL || fnm == NULL) @@ -4150,8 +4262,8 @@ struct bfd_link_needed_list *n, **pn; char *fnm, *anm; unsigned int tagv = dyn.d_un.d_val; + size_t amt = sizeof (struct bfd_link_needed_list); - amt = sizeof (struct bfd_link_needed_list); n = (struct bfd_link_needed_list *) bfd_alloc (abfd, amt); fnm = bfd_elf_string_from_elf_section (abfd, shlink, tagv); if (n == NULL || fnm == NULL) @@ -4176,8 +4288,8 @@ struct bfd_link_needed_list *n, **pn; char *fnm, *anm; unsigned int tagv = dyn.d_un.d_val; + size_t amt = sizeof (struct bfd_link_needed_list); - amt = sizeof (struct bfd_link_needed_list); n = (struct bfd_link_needed_list *) bfd_alloc (abfd, amt); fnm = bfd_elf_string_from_elf_section (abfd, shlink, tagv); if (n == NULL || fnm == NULL) @@ -4227,10 +4339,14 @@ if (phdr->p_type == PT_GNU_RELRO) { for (s = abfd->sections; s != NULL; s = s->next) - if ((s->flags & SEC_ALLOC) != 0 - && s->vma >= phdr->p_vaddr - && s->vma + s->size <= phdr->p_vaddr + phdr->p_memsz) - s->flags |= SEC_READONLY; + { + unsigned int opb = bfd_octets_per_byte (abfd, s); + + if ((s->flags & SEC_ALLOC) != 0 + && s->vma * opb >= phdr->p_vaddr + && s->vma * opb + s->size <= phdr->p_vaddr + phdr->p_memsz) + s->flags |= SEC_READONLY; + } break; } @@ -4259,15 +4375,22 @@ will need to know it. */ elf_dt_name (abfd) = soname; - ret = elf_add_dt_needed_tag (abfd, info, soname, add_needed); - if (ret < 0) - goto error_return; - /* If we have already included this dynamic object in the link, just ignore it. There is no reason to include a particular dynamic object more than once. */ - if (ret > 0) - return TRUE; + for (loaded_lib = htab->dyn_loaded; + loaded_lib != NULL; + loaded_lib = loaded_lib->next) + { + if (strcmp (elf_dt_name (loaded_lib->abfd), soname) == 0) + return TRUE; + } + + /* Create dynamic sections for backends that require that be done + before setup_gnu_properties. */ + if (add_needed + && !_bfd_elf_link_create_dynamic_sections (abfd, info)) + return FALSE; /* Save the DT_AUDIT entry for the linker emulation code. */ elf_dt_audit (abfd) = audit; @@ -4311,8 +4434,7 @@ { /* We store a pointer to the hash table entry for each external symbol. */ - amt = extsymcount; - amt *= sizeof (struct elf_link_hash_entry *); + size_t amt = extsymcount * sizeof (struct elf_link_hash_entry *); sym_hash = (struct elf_link_hash_entry **) bfd_zalloc (abfd, amt); if (sym_hash == NULL) goto error_free_sym; @@ -4331,17 +4453,16 @@ to internal format. */ if (elf_dynversym (abfd) != 0) { - Elf_Internal_Shdr *versymhdr; + Elf_Internal_Shdr *versymhdr = &elf_tdata (abfd)->dynversym_hdr; + bfd_size_type amt = versymhdr->sh_size; - versymhdr = &elf_tdata (abfd)->dynversym_hdr; - amt = versymhdr->sh_size; - extversym = (Elf_External_Versym *) bfd_malloc (amt); + if (bfd_seek (abfd, versymhdr->sh_offset, SEEK_SET) != 0) + goto error_free_sym; + extversym = (Elf_External_Versym *) + _bfd_malloc_and_read (abfd, amt, amt); if (extversym == NULL) goto error_free_sym; - if (bfd_seek (abfd, versymhdr->sh_offset, SEEK_SET) != 0 - || bfd_bread (extversym, amt, abfd) != amt) - goto error_free_vers; - extversym_end = extversym + (amt / sizeof (* extversym)); + extversym_end = extversym + amt / sizeof (*extversym); } } @@ -4363,7 +4484,12 @@ h = (struct elf_link_hash_entry *) p; entsize += htab->root.table.entsize; if (h->root.type == bfd_link_hash_warning) - entsize += htab->root.table.entsize; + { + entsize += htab->root.table.entsize; + h = (struct elf_link_hash_entry *) h->root.u.i.link; + } + if (h->root.type == bfd_link_hash_common) + entsize += sizeof (*h->root.u.c.p); } } @@ -4392,9 +4518,13 @@ old_table = htab->root.table.table; old_size = htab->root.table.size; old_count = htab->root.table.count; - old_strtab = _bfd_elf_strtab_save (htab->dynstr); - if (old_strtab == NULL) - goto error_free_vers; + old_strtab = NULL; + if (htab->dynstr != NULL) + { + old_strtab = _bfd_elf_strtab_save (htab->dynstr); + if (old_strtab == NULL) + goto error_free_vers; + } for (i = 0; i < htab->root.table.size; i++) { @@ -4403,14 +4533,20 @@ for (p = htab->root.table.table[i]; p != NULL; p = p->next) { - memcpy (old_ent, p, htab->root.table.entsize); - old_ent = (char *) old_ent + htab->root.table.entsize; h = (struct elf_link_hash_entry *) p; + memcpy (old_ent, h, htab->root.table.entsize); + old_ent = (char *) old_ent + htab->root.table.entsize; if (h->root.type == bfd_link_hash_warning) { - memcpy (old_ent, h->root.u.i.link, htab->root.table.entsize); + h = (struct elf_link_hash_entry *) h->root.u.i.link; + memcpy (old_ent, h, htab->root.table.entsize); old_ent = (char *) old_ent + htab->root.table.entsize; } + if (h->root.type == bfd_link_hash_common) + { + memcpy (old_ent, h->root.u.c.p, sizeof (*h->root.u.c.p)); + old_ent = (char *) old_ent + sizeof (*h->root.u.c.p); + } } } } @@ -4453,7 +4589,7 @@ bfd_boolean type_change_ok; bfd_boolean new_weak; bfd_boolean old_weak; - bfd_boolean override; + bfd *override; bfd_boolean common; bfd_boolean discarded; unsigned int old_alignment; @@ -4461,7 +4597,7 @@ bfd *old_bfd; bfd_boolean matched; - override = FALSE; + override = NULL; flags = BSF_NO_FLAGS; sec = NULL; @@ -4781,7 +4917,8 @@ } if (! (_bfd_generic_link_add_one_symbol - (info, abfd, name, flags, sec, value, NULL, FALSE, bed->collect, + (info, override ? override : abfd, name, flags, sec, value, + NULL, FALSE, bed->collect, (struct bfd_link_hash_entry **) sym_hash))) goto error_free_vers; @@ -4852,11 +4989,7 @@ object and a shared object. */ bfd_boolean dynsym = FALSE; - /* Plugin symbols aren't normal. Don't set def_regular or - ref_regular for them, or make them dynamic. */ - if ((abfd->flags & BFD_PLUGIN) != 0) - ; - else if (! dynamic) + if (! dynamic) { if (! definition) { @@ -5037,10 +5170,6 @@ && !bfd_link_relocatable (info)) dynsym = FALSE; - /* Nor should we make plugin symbols dynamic. */ - if ((abfd->flags & BFD_PLUGIN) != 0) - dynsym = FALSE; - if (definition) { h->target_internal = isym->st_target_internal; @@ -5056,8 +5185,8 @@ aliases can be checked. */ if (!nondeflt_vers) { - amt = ((isymend - isym + 1) - * sizeof (struct elf_link_hash_entry *)); + size_t amt = ((isymend - isym + 1) + * sizeof (struct elf_link_hash_entry *)); nondeflt_vers = (struct elf_link_hash_entry **) bfd_malloc (amt); if (!nondeflt_vers) @@ -5067,7 +5196,7 @@ } } - if (dynsym && h->dynindx == -1) + if (dynsym && (abfd->flags & BFD_PLUGIN) == 0 && h->dynindx == -1) { if (! bfd_elf_link_record_dynamic_symbol (info, h)) goto error_free_vers; @@ -5091,21 +5220,16 @@ break; } - /* Don't add DT_NEEDED for references from the dummy bfd nor - for unmatched symbol. */ if (!add_needed && matched && definition && ((dynsym - && h->ref_regular_nonweak - && (old_bfd == NULL - || (old_bfd->flags & BFD_PLUGIN) == 0)) + && h->ref_regular_nonweak) || (h->ref_dynamic_nonweak && (elf_dyn_lib_class (abfd) & DYN_AS_NEEDED) != 0 && !on_needed_list (elf_dt_name (abfd), htab->needed, NULL)))) { - int ret; const char *soname = elf_dt_name (abfd); info->callbacks->minfo ("%!", soname, old_bfd, @@ -5130,12 +5254,11 @@ elf_dyn_lib_class (abfd) = (enum dynamic_lib_link_class) (elf_dyn_lib_class (abfd) & ~DYN_AS_NEEDED); + /* Create dynamic sections for backends that require + that be done before setup_gnu_properties. */ + if (!_bfd_elf_link_create_dynamic_sections (abfd, info)) + return FALSE; add_needed = TRUE; - ret = elf_add_dt_needed_tag (abfd, info, soname, add_needed); - if (ret < 0) - goto error_free_vers; - - BFD_ASSERT (ret == 0); } } } @@ -5199,17 +5322,10 @@ } } - if (extversym != NULL) - { - free (extversym); - extversym = NULL; - } - - if (isymbuf != NULL) - { - free (isymbuf); - isymbuf = NULL; - } + free (extversym); + extversym = NULL; + free (isymbuf); + isymbuf = NULL; if ((elf_dyn_lib_class (abfd) & DYN_AS_NEEDED) != 0) { @@ -5225,56 +5341,39 @@ memcpy (htab->root.table.table, old_tab, tabsize); htab->root.undefs = old_undefs; htab->root.undefs_tail = old_undefs_tail; - _bfd_elf_strtab_restore (htab->dynstr, old_strtab); + if (htab->dynstr != NULL) + _bfd_elf_strtab_restore (htab->dynstr, old_strtab); free (old_strtab); old_strtab = NULL; for (i = 0; i < htab->root.table.size; i++) { struct bfd_hash_entry *p; struct elf_link_hash_entry *h; - bfd_size_type size; - unsigned int alignment_power; unsigned int non_ir_ref_dynamic; for (p = htab->root.table.table[i]; p != NULL; p = p->next) { - h = (struct elf_link_hash_entry *) p; - if (h->root.type == bfd_link_hash_warning) - h = (struct elf_link_hash_entry *) h->root.u.i.link; - - /* Preserve the maximum alignment and size for common - symbols even if this dynamic lib isn't on DT_NEEDED - since it can still be loaded at run time by another - dynamic lib. */ - if (h->root.type == bfd_link_hash_common) - { - size = h->root.u.c.size; - alignment_power = h->root.u.c.p->alignment_power; - } - else - { - size = 0; - alignment_power = 0; - } /* Preserve non_ir_ref_dynamic so that this symbol will be exported when the dynamic lib becomes needed in the second pass. */ + h = (struct elf_link_hash_entry *) p; + if (h->root.type == bfd_link_hash_warning) + h = (struct elf_link_hash_entry *) h->root.u.i.link; non_ir_ref_dynamic = h->root.non_ir_ref_dynamic; - memcpy (p, old_ent, htab->root.table.entsize); - old_ent = (char *) old_ent + htab->root.table.entsize; + h = (struct elf_link_hash_entry *) p; + memcpy (h, old_ent, htab->root.table.entsize); + old_ent = (char *) old_ent + htab->root.table.entsize; if (h->root.type == bfd_link_hash_warning) { - memcpy (h->root.u.i.link, old_ent, htab->root.table.entsize); - old_ent = (char *) old_ent + htab->root.table.entsize; h = (struct elf_link_hash_entry *) h->root.u.i.link; + memcpy (h, old_ent, htab->root.table.entsize); + old_ent = (char *) old_ent + htab->root.table.entsize; } if (h->root.type == bfd_link_hash_common) { - if (size > h->root.u.c.size) - h->root.u.c.size = size; - if (alignment_power > h->root.u.c.p->alignment_power) - h->root.u.c.p->alignment_power = alignment_power; + memcpy (h->root.u.c.p, old_ent, sizeof (*h->root.u.c.p)); + old_ent = (char *) old_ent + sizeof (*h->root.u.c.p); } h->root.non_ir_ref_dynamic = non_ir_ref_dynamic; } @@ -5288,8 +5387,7 @@ free (old_tab); objalloc_free_block ((struct objalloc *) htab->root.table.memory, alloc_mark); - if (nondeflt_vers != NULL) - free (nondeflt_vers); + free (nondeflt_vers); return TRUE; } @@ -5312,6 +5410,7 @@ { struct elf_link_hash_entry *h = nondeflt_vers[cnt], *hi; char *shortname, *p; + size_t amt; p = strchr (h->root.root.string, ELF_VER_CHR); if (p == NULL @@ -5372,13 +5471,12 @@ struct elf_link_hash_entry **hppend; struct elf_link_hash_entry **sorted_sym_hash; struct elf_link_hash_entry *h; - size_t sym_count; + size_t sym_count, amt; /* Since we have to search the whole symbol list for each weak defined symbol, search time for N weak defined symbols will be O(N^2). Binary search will cut it down to O(NlogN). */ - amt = extsymcount; - amt *= sizeof (*sorted_sym_hash); + amt = extsymcount * sizeof (*sorted_sym_hash); sorted_sym_hash = bfd_malloc (amt); if (sorted_sym_hash == NULL) goto error_return; @@ -5553,7 +5651,7 @@ } } - if (is_elf_hash_table (htab) && add_needed) + if (dynamic && add_needed) { /* Add this bfd to the loaded list. */ struct elf_link_loaded_list *n; @@ -5562,24 +5660,22 @@ if (n == NULL) goto error_return; n->abfd = abfd; - n->next = htab->loaded; - htab->loaded = n; + n->next = htab->dyn_loaded; + htab->dyn_loaded = n; } + if (dynamic && !add_needed + && (elf_dyn_lib_class (abfd) & DYN_DT_NEEDED) != 0) + elf_dyn_lib_class (abfd) |= DYN_NO_NEEDED; return TRUE; error_free_vers: - if (old_tab != NULL) - free (old_tab); - if (old_strtab != NULL) - free (old_strtab); - if (nondeflt_vers != NULL) - free (nondeflt_vers); - if (extversym != NULL) - free (extversym); + free (old_tab); + free (old_strtab); + free (nondeflt_vers); + free (extversym); error_free_sym: - if (isymbuf != NULL) - free (isymbuf); + free (isymbuf); error_return: return FALSE; } @@ -5653,7 +5749,7 @@ unsigned char *included = NULL; carsym *symdefs; bfd_boolean loop; - bfd_size_type amt; + size_t amt; const struct elf_backend_data *bed; struct elf_link_hash_entry * (*archive_symbol_lookup) (bfd *, struct bfd_link_info *, const char *); @@ -5673,8 +5769,7 @@ c = bfd_ardata (abfd)->symdef_count; if (c == 0) return TRUE; - amt = c; - amt *= sizeof (*included); + amt = c * sizeof (*included); included = (unsigned char *) bfd_zmalloc (amt); if (included == NULL) return FALSE; @@ -5717,7 +5812,15 @@ if (h == NULL) continue; - if (h->root.type == bfd_link_hash_common) + if (h->root.type == bfd_link_hash_undefined) + { + /* If the archive element has already been loaded then one + of the symbols defined by that element might have been + made undefined due to being in a discarded section. */ + if (h->indx == -3) + continue; + } + else if (h->root.type == bfd_link_hash_common) { /* We currently have a common symbol. The archive map contains a reference to this symbol, so we may want to include it. We @@ -5734,7 +5837,7 @@ if (! elf_link_is_defined_archive_symbol (abfd, symdef)) continue; } - else if (h->root.type != bfd_link_hash_undefined) + else { if (h->root.type != bfd_link_hash_undefweak) /* Symbol must be defined. Don't check it again. */ @@ -5788,12 +5891,10 @@ while (loop); free (included); - return TRUE; error_return: - if (included != NULL) - free (included); + free (included); return FALSE; } @@ -5864,9 +5965,7 @@ later. */ h->u.elf_hash_value = ha; - if (alc != NULL) - free (alc); - + free (alc); return TRUE; } @@ -5940,9 +6039,7 @@ if (s->min_dynindx < 0 || s->min_dynindx > h->dynindx) s->min_dynindx = h->dynindx; - if (alc != NULL) - free (alc); - + free (alc); return TRUE; } @@ -6520,7 +6617,7 @@ { size_t indx; - name = lbasename (output_bfd->filename); + name = lbasename (bfd_get_filename (output_bfd)); def.vd_hash = bfd_elf_hash (name); indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr, name, FALSE); @@ -6747,7 +6844,8 @@ indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr, elf_dt_name (vn->vn_bfd) != NULL ? elf_dt_name (vn->vn_bfd) - : lbasename (vn->vn_bfd->filename), + : lbasename (bfd_get_filename + (vn->vn_bfd)), FALSE); if (indx == (size_t) -1) return FALSE; @@ -7567,6 +7665,37 @@ { struct elf_link_hash_table *htab; + if (ind->dyn_relocs != NULL) + { + if (dir->dyn_relocs != NULL) + { + struct elf_dyn_relocs **pp; + struct elf_dyn_relocs *p; + + /* Add reloc counts against the indirect sym to the direct sym + list. Merge any entries against the same section. */ + for (pp = &ind->dyn_relocs; (p = *pp) != NULL; ) + { + struct elf_dyn_relocs *q; + + for (q = dir->dyn_relocs; q != NULL; q = q->next) + if (q->sec == p->sec) + { + q->pc_count += p->pc_count; + q->count += p->count; + *pp = p->next; + break; + } + if (q == NULL) + pp = &p->next; + } + *pp = dir->dyn_relocs; + } + + dir->dyn_relocs = ind->dyn_relocs; + ind->dyn_relocs = NULL; + } + /* Copy down any references that we may have already seen to the symbol which just became indirect. */ @@ -7682,6 +7811,7 @@ table->root.type = bfd_link_elf_hash_table; table->hash_table_id = target_id; + table->target_os = get_elf_backend_data (abfd)->target_os; return ret; } @@ -7692,7 +7822,7 @@ _bfd_elf_link_hash_table_create (bfd *abfd) { struct elf_link_hash_table *ret; - bfd_size_type amt = sizeof (struct elf_link_hash_table); + size_t amt = sizeof (struct elf_link_hash_table); ret = (struct elf_link_hash_table *) bfd_zmalloc (amt); if (ret == NULL) @@ -7846,7 +7976,7 @@ const char *string; struct bfd_link_needed_list *l; unsigned int tagv = dyn.d_un.d_val; - bfd_size_type amt; + size_t amt; string = bfd_elf_string_from_elf_section (abfd, shlink, tagv); if (string == NULL) @@ -7869,8 +7999,7 @@ return TRUE; error_return: - if (dynbuf != NULL) - free (dynbuf); + free (dynbuf); return FALSE; } @@ -7935,9 +8064,10 @@ Elf_Internal_Sym **ind, **indbufend, **indbuf; struct elf_symbuf_symbol *ssym; struct elf_symbuf_head *ssymbuf, *ssymhead; - size_t i, shndx_count, total_size; + size_t i, shndx_count, total_size, amt; - indbuf = (Elf_Internal_Sym **) bfd_malloc2 (symcount, sizeof (*indbuf)); + amt = symcount * sizeof (*indbuf); + indbuf = (Elf_Internal_Sym **) bfd_malloc (amt); if (indbuf == NULL) return NULL; @@ -8048,7 +8178,7 @@ if (isymbuf1 == NULL) goto done; - if (!info->reduce_memory_overheads) + if (info != NULL && !info->reduce_memory_overheads) { ssymbuf1 = elf_create_symbuf (symcount1, isymbuf1); elf_tdata (bfd1)->symbuf = ssymbuf1; @@ -8062,7 +8192,7 @@ if (isymbuf2 == NULL) goto done; - if (ssymbuf1 != NULL && !info->reduce_memory_overheads) + if (ssymbuf1 != NULL && info != NULL && !info->reduce_memory_overheads) { ssymbuf2 = elf_create_symbuf (symcount2, isymbuf2); elf_tdata (bfd2)->symbuf = ssymbuf2; @@ -8207,15 +8337,11 @@ result = TRUE; -done: - if (symtable1) - free (symtable1); - if (symtable2) - free (symtable2); - if (isymbuf1) - free (isymbuf1); - if (isymbuf2) - free (isymbuf2); + done: + free (symtable1); + free (symtable2); + free (isymbuf1); + free (isymbuf2); return result; } @@ -8275,8 +8401,49 @@ Elf_External_Sym_Shndx *symshndxbuf; /* Number of STT_FILE syms seen. */ size_t filesym_count; + /* Local symbol hash table. */ + struct bfd_hash_table local_hash_table; }; +struct local_hash_entry +{ + /* Base hash table entry structure. */ + struct bfd_hash_entry root; + /* Size of the local symbol name. */ + size_t size; + /* Number of the duplicated local symbol names. */ + long count; +}; + +/* Create an entry in the local symbol hash table. */ + +static struct bfd_hash_entry * +local_hash_newfunc (struct bfd_hash_entry *entry, + struct bfd_hash_table *table, + const char *string) +{ + + /* Allocate the structure if it has not already been allocated by a + subclass. */ + if (entry == NULL) + { + entry = bfd_hash_allocate (table, + sizeof (struct local_hash_entry)); + if (entry == NULL) + return entry; + } + + /* Call the allocation method of the superclass. */ + entry = bfd_hash_newfunc (entry, table, string); + if (entry != NULL) + { + ((struct local_hash_entry *) entry)->count = 0; + ((struct local_hash_entry *) entry)->size = 0; + } + + return entry; +} + /* This struct is used to pass information to elf_link_output_extsym. */ struct elf_outext_info @@ -8294,12 +8461,12 @@ implementation of them consists of two parts: complex symbols, and the relocations themselves. - The relocations are use a reserved elf-wide relocation type code (R_RELC + The relocations use a reserved elf-wide relocation type code (R_RELC external / BFD_RELOC_RELC internal) and an encoding of relocation field information (start bit, end bit, word width, etc) into the addend. This information is extracted from CGEN-generated operand tables within gas. - Complex symbols are mangled symbols (BSF_RELC external / STT_RELC + Complex symbols are mangled symbols (STT_RELC external / BSF_RELC internal) representing prefix-notation expressions, including but not limited to those sorts of expressions normally encoded as addends in the addend field. The symbol mangling format is: @@ -8474,6 +8641,7 @@ /* xgettext:c-format */ _bfd_error_handler (_("undefined %s reference in complex symbol: %s"), reftype, name); + bfd_set_error (bfd_error_bad_value); } static bfd_boolean @@ -8582,7 +8750,7 @@ return TRUE; \ } -#define BINARY_OP(op) \ +#define BINARY_OP_HEAD(op) \ if (strncmp (sym, #op, strlen (#op)) == 0) \ { \ sym += strlen (#op); \ @@ -8595,18 +8763,33 @@ ++*symp; \ if (!eval_symbol (&b, symp, input_bfd, flinfo, dot, \ isymbuf, locsymcount, signed_p)) \ - return FALSE; \ + return FALSE; +#define BINARY_OP_TAIL(op) \ if (signed_p) \ *result = ((bfd_signed_vma) a) op ((bfd_signed_vma) b); \ else \ *result = a op b; \ return TRUE; \ } +#define BINARY_OP(op) BINARY_OP_HEAD(op) BINARY_OP_TAIL(op) default: UNARY_OP (0-); - BINARY_OP (<<); - BINARY_OP (>>); + BINARY_OP_HEAD (<<); + if (b >= sizeof (a) * CHAR_BIT) + { + *result = 0; + return TRUE; + } + signed_p = 0; + BINARY_OP_TAIL (<<); + BINARY_OP_HEAD (>>); + if (b >= sizeof (a) * CHAR_BIT) + { + *result = signed_p && (bfd_signed_vma) a < 0 ? -1 : 0; + return TRUE; + } + BINARY_OP_TAIL (>>); BINARY_OP (==); BINARY_OP (!=); BINARY_OP (<=); @@ -8616,8 +8799,22 @@ UNARY_OP (~); UNARY_OP (!); BINARY_OP (*); - BINARY_OP (/); - BINARY_OP (%); + BINARY_OP_HEAD (/); + if (b == 0) + { + _bfd_error_handler (_("division by zero")); + bfd_set_error (bfd_error_bad_value); + return FALSE; + } + BINARY_OP_TAIL (/); + BINARY_OP_HEAD (%); + if (b == 0) + { + _bfd_error_handler (_("division by zero")); + bfd_set_error (bfd_error_bad_value); + return FALSE; + } + BINARY_OP_TAIL (%); BINARY_OP (^); BINARY_OP (|); BINARY_OP (&); @@ -9509,9 +9706,72 @@ { /* Call _bfd_elf_strtab_offset after _bfd_elf_strtab_finalize to get the final offset for st_name. */ + char *versioned_name = (char *) name; + if (h != NULL) + { + if (h->versioned == versioned && h->def_dynamic) + { + /* Keep only one '@' for versioned symbols defined in + shared objects. */ + char *version = strrchr (name, ELF_VER_CHR); + char *base_end = strchr (name, ELF_VER_CHR); + if (version != base_end) + { + size_t base_len; + size_t len = strlen (name); + versioned_name = bfd_alloc (flinfo->output_bfd, len); + if (versioned_name == NULL) + return 0; + base_len = base_end - name; + memcpy (versioned_name, name, base_len); + memcpy (versioned_name + base_len, version, + len - base_len); + } + } + } + else if (flinfo->info->unique_symbol + && ELF_ST_BIND (elfsym->st_info) == STB_LOCAL) + { + struct local_hash_entry *lh; + switch (ELF_ST_TYPE (elfsym->st_info)) + { + case STT_FILE: + case STT_SECTION: + break; + default: + lh = (struct local_hash_entry *) bfd_hash_lookup + (&flinfo->local_hash_table, name, TRUE, FALSE); + if (lh == NULL) + return 0; + if (lh->count) + { + /* Append ".COUNT" to duplicated local symbols. */ + size_t count_len; + size_t base_len = lh->size; + char buf[30]; + sprintf (buf, "%lx", lh->count); + if (!base_len) + { + base_len = strlen (name); + lh->size = base_len; + } + count_len = strlen (buf); + versioned_name = bfd_alloc (flinfo->output_bfd, + base_len + count_len + 2); + if (versioned_name == NULL) + return 0; + memcpy (versioned_name, name, base_len); + versioned_name[base_len] = '.'; + memcpy (versioned_name + base_len + 1, buf, + count_len + 1); + } + lh->count++; + break; + } + } elfsym->st_name = (unsigned long) _bfd_elf_strtab_add (flinfo->symstrtab, - name, FALSE); + versioned_name, FALSE); if (elfsym->st_name == (unsigned long) -1) return 0; } @@ -9548,7 +9808,7 @@ elf_link_swap_symbols_out (struct elf_final_link_info *flinfo) { struct elf_link_hash_table *hash_table = elf_hash_table (flinfo->info); - bfd_size_type amt; + size_t amt; size_t i; const struct elf_backend_data *bed; bfd_byte *symbuf; @@ -9692,7 +9952,7 @@ } BFD_ASSERT (abfd != NULL); - for (loaded = elf_hash_table (info)->loaded; + for (loaded = elf_hash_table (info)->dyn_loaded; loaded != NULL; loaded = loaded->next) { @@ -9712,7 +9972,6 @@ /* We check each DSO for a possible hidden versioned definition. */ if (input == abfd - || (input->flags & DYNAMIC) == 0 || elf_dynversym (input) == 0) continue; @@ -9740,16 +9999,11 @@ /* Read in any version definitions. */ versymhdr = &elf_tdata (input)->dynversym_hdr; - extversym = (Elf_External_Versym *) bfd_malloc (versymhdr->sh_size); - if (extversym == NULL) - goto error_ret; - if (bfd_seek (input, versymhdr->sh_offset, SEEK_SET) != 0 - || (bfd_bread (extversym, versymhdr->sh_size, input) - != versymhdr->sh_size)) + || (extversym = (Elf_External_Versym *) + _bfd_malloc_and_read (input, versymhdr->sh_size, + versymhdr->sh_size)) == NULL) { - free (extversym); - error_ret: free (isymbuf); return FALSE; } @@ -9886,11 +10140,13 @@ && (!h->ref_regular || flinfo->info->gc_sections) && !elf_link_check_versioned_symbol (flinfo->info, bed, h) && flinfo->info->unresolved_syms_in_shared_libs != RM_IGNORE) - (*flinfo->info->callbacks->undefined_symbol) - (flinfo->info, h->root.root.string, - h->ref_regular ? NULL : h->root.u.undef.abfd, - NULL, 0, - flinfo->info->unresolved_syms_in_shared_libs == RM_GENERATE_ERROR); + { + flinfo->info->callbacks->undefined_symbol + (flinfo->info, h->root.root.string, + h->ref_regular ? NULL : h->root.u.undef.abfd, NULL, 0, + flinfo->info->unresolved_syms_in_shared_libs == RM_DIAGNOSE + && !flinfo->info->warn_unresolved_syms); + } /* Strip a global symbol defined in a discarded section. */ if (h->indx == -3) @@ -10569,6 +10825,18 @@ discarding, we don't need to keep it. */ if (isym->st_shndx != SHN_UNDEF && isym->st_shndx < SHN_LORESERVE + && isec->output_section == NULL + && flinfo->info->non_contiguous_regions + && flinfo->info->non_contiguous_regions_warnings) + { + _bfd_error_handler (_("warning: --enable-non-contiguous-regions " + "discards section `%s' from '%s'\n"), + isec->name, bfd_get_filename (isec->owner)); + continue; + } + + if (isym->st_shndx != SHN_UNDEF + && isym->st_shndx < SHN_LORESERVE && bfd_section_removed_from_list (output_bfd, isec->output_section)) continue; @@ -10614,7 +10882,7 @@ osym.st_shndx = SHN_ABS; if (!elf_link_output_symstrtab (flinfo, (input_bfd->lto_output ? NULL - : input_bfd->filename), + : bfd_get_filename (input_bfd)), &osym, bfd_abs_section_ptr, NULL)) return FALSE; @@ -10916,7 +11184,7 @@ #ifdef DEBUG printf ("Encountered a complex symbol!"); printf (" (input_bfd %s, section %s, reloc %ld\n", - input_bfd->filename, o->name, + bfd_get_filename (input_bfd), o->name, (long) (rel - internal_relocs)); printf (" symbol: idx %8.8lx, name %s\n", r_symndx, sym_name); @@ -11566,8 +11834,8 @@ struct bfd_link_order *p; bfd *sub; struct bfd_link_order **sections; - asection *s, *other_sec, *linkorder_sec; - bfd_vma offset; + asection *other_sec, *linkorder_sec; + bfd_vma offset; /* Octets. */ other_sec = NULL; linkorder_sec = NULL; @@ -11577,7 +11845,7 @@ { if (p->type == bfd_indirect_link_order) { - s = p->u.indirect.section; + asection *s = p->u.indirect.section; sub = s->owner; if ((s->flags & SEC_LINKER_CREATED) == 0 && bfd_get_flavour (sub) == bfd_target_elf_flavour @@ -11632,11 +11900,12 @@ for (n = 0; n < seen_linkorder; n++) { bfd_vma mask; - s = sections[n]->u.indirect.section; - mask = ~(bfd_vma) 0 << s->alignment_power; + asection *s = sections[n]->u.indirect.section; + unsigned int opb = bfd_octets_per_byte (abfd, s); + + mask = ~(bfd_vma) 0 << s->alignment_power * opb; offset = (offset + ~mask) & mask; - s->output_offset = offset / bfd_octets_per_byte (abfd, s); - sections[n]->offset = offset; + sections[n]->offset = s->output_offset = offset / opb; offset += sections[n]->size; } @@ -11661,6 +11930,7 @@ long symcount; long src_count; elf_symbol_type *osymbuf; + size_t amt; implib_bfd = info->out_implib_bfd; bed = get_elf_backend_data (abfd); @@ -11718,8 +11988,8 @@ /* Make symbols absolute. */ - osymbuf = (elf_symbol_type *) bfd_alloc2 (implib_bfd, symcount, - sizeof (*osymbuf)); + amt = symcount * sizeof (*osymbuf); + osymbuf = (elf_symbol_type *) bfd_alloc (implib_bfd, amt); if (osymbuf == NULL) goto free_sym_buf; @@ -11748,7 +12018,7 @@ ret = TRUE; -free_sym_buf: + free_sym_buf: free (sympp); return ret; } @@ -11760,32 +12030,21 @@ if (flinfo->symstrtab != NULL) _bfd_elf_strtab_free (flinfo->symstrtab); - if (flinfo->contents != NULL) - free (flinfo->contents); - if (flinfo->external_relocs != NULL) - free (flinfo->external_relocs); - if (flinfo->internal_relocs != NULL) - free (flinfo->internal_relocs); - if (flinfo->external_syms != NULL) - free (flinfo->external_syms); - if (flinfo->locsym_shndx != NULL) - free (flinfo->locsym_shndx); - if (flinfo->internal_syms != NULL) - free (flinfo->internal_syms); - if (flinfo->indices != NULL) - free (flinfo->indices); - if (flinfo->sections != NULL) - free (flinfo->sections); - if (flinfo->symshndxbuf != NULL - && flinfo->symshndxbuf != (Elf_External_Sym_Shndx *) -1) + free (flinfo->contents); + free (flinfo->external_relocs); + free (flinfo->internal_relocs); + free (flinfo->external_syms); + free (flinfo->locsym_shndx); + free (flinfo->internal_syms); + free (flinfo->indices); + free (flinfo->sections); + if (flinfo->symshndxbuf != (Elf_External_Sym_Shndx *) -1) free (flinfo->symshndxbuf); for (o = obfd->sections; o != NULL; o = o->next) { struct bfd_elf_section_data *esdo = elf_section_data (o); - if ((o->flags & SEC_RELOC) != 0 && esdo->rel.hashes != NULL) - free (esdo->rel.hashes); - if ((o->flags & SEC_RELOC) != 0 && esdo->rela.hashes != NULL) - free (esdo->rela.hashes); + free (esdo->rel.hashes); + free (esdo->rela.hashes); } } @@ -11820,6 +12079,8 @@ bfd_vma attr_size = 0; const char *std_attrs_section; struct elf_link_hash_table *htab = elf_hash_table (info); + bfd_boolean sections_removed; + bfd_boolean ret; if (!is_elf_hash_table (htab)) return FALSE; @@ -11833,6 +12094,7 @@ emit_relocs = (bfd_link_relocatable (info) || info->emitrelocations); + memset (&flinfo, 0, sizeof (flinfo)); flinfo.info = info; flinfo.output_bfd = abfd; flinfo.symstrtab = _bfd_elf_strtab_init (); @@ -11852,20 +12114,16 @@ /* Note that it is OK if symver_sec is NULL. */ } - flinfo.contents = NULL; - flinfo.external_relocs = NULL; - flinfo.internal_relocs = NULL; - flinfo.external_syms = NULL; - flinfo.locsym_shndx = NULL; - flinfo.internal_syms = NULL; - flinfo.indices = NULL; - flinfo.sections = NULL; - flinfo.symshndxbuf = NULL; - flinfo.filesym_count = 0; + if (info->unique_symbol + && !bfd_hash_table_init (&flinfo.local_hash_table, + local_hash_newfunc, + sizeof (struct local_hash_entry))) + return FALSE; /* The object attributes have been merged. Remove the input sections from the link, and set the contents of the output section. */ + sections_removed = FALSE; std_attrs_section = get_elf_backend_data (abfd)->obj_attrs_section; for (o = abfd->sections; o != NULL; o = o->next) { @@ -11905,8 +12163,11 @@ o->flags |= SEC_EXCLUDE; bfd_section_list_remove (abfd, o); abfd->section_count--; + sections_removed = TRUE; } } + if (sections_removed) + _bfd_fix_excluded_sec_syms (abfd, info); /* Count up the number of relocations we will output for each output section, so that we know the sizes of the reloc sections. We @@ -12137,6 +12398,9 @@ if (info->strip != strip_all || emit_relocs) { + bfd_boolean name_local_sections; + const char *name; + file_ptr off = elf_next_file_pos (abfd); _bfd_elf_assign_file_position_for_section (symtab_hdr, off, TRUE); @@ -12159,10 +12423,15 @@ /* Output a symbol for each section. We output these even if we are discarding local symbols, since they are used for relocs. These - symbols have no names. We store the index of each one in the - index field of the section, so that we can find it again when + symbols usually have no names. We store the index of each one in + the index field of the section, so that we can find it again when outputting relocs. */ + name_local_sections + = (bed->elf_backend_name_local_section_symbols + && bed->elf_backend_name_local_section_symbols (abfd)); + + name = NULL; elfsym.st_size = 0; elfsym.st_info = ELF_ST_INFO (STB_LOCAL, STT_SECTION); elfsym.st_other = 0; @@ -12177,13 +12446,22 @@ elfsym.st_shndx = i; if (!bfd_link_relocatable (info)) elfsym.st_value = o->vma; - if (elf_link_output_symstrtab (&flinfo, NULL, &elfsym, o, + if (name_local_sections) + name = o->name; + if (elf_link_output_symstrtab (&flinfo, name, &elfsym, o, NULL) != 1) goto error_return; } } } + /* On some targets like Irix 5 the symbol split between local and global + ones recorded in the sh_info field needs to be done between section + and all other symbols. */ + if (bed->elf_backend_elfsym_local_is_section + && bed->elf_backend_elfsym_local_is_section (abfd)) + symtab_hdr->sh_info = bfd_get_symcount (abfd); + /* Allocate some memory to hold information read in from the input files. */ if (max_contents_size != 0) @@ -12241,7 +12519,7 @@ if (htab->tls_sec) { - bfd_vma base, end = 0; + bfd_vma base, end = 0; /* Both bytes. */ asection *sec; for (sec = htab->tls_sec; @@ -12249,6 +12527,7 @@ sec = sec->next) { bfd_size_type size = sec->size; + unsigned int opb = bfd_octets_per_byte (abfd, sec); if (size == 0 && (sec->flags & SEC_HAS_CONTENTS) == 0) @@ -12256,9 +12535,9 @@ struct bfd_link_order *ord = sec->map_tail.link_order; if (ord != NULL) - size = ord->offset + ord->size; + size = ord->offset * opb + ord->size; } - end = sec->vma + size; + end = sec->vma + size / opb; } base = htab->tls_sec->vma; /* Only align end of TLS section if static TLS doesn't have special @@ -12367,14 +12646,15 @@ if (!info->reduce_memory_overheads) { for (sub = info->input_bfds; sub != NULL; sub = sub->link.next) - if (bfd_get_flavour (sub) == bfd_target_elf_flavour - && elf_tdata (sub)->symbuf) + if (bfd_get_flavour (sub) == bfd_target_elf_flavour) { free (elf_tdata (sub)->symbuf); elf_tdata (sub)->symbuf = NULL; } } + ret = TRUE; + /* Output any global symbols that got converted to local in a version script or due to symbol visibility. We do this in a separate step since ELF requires all local symbols to appear @@ -12387,7 +12667,10 @@ eoinfo.file_sym_done = FALSE; bfd_hash_traverse (&info->hash->table, elf_link_output_extsym, &eoinfo); if (eoinfo.failed) - return FALSE; + { + ret = FALSE; + goto return_local_hash_table; + } /* If backend needs to output some local symbols not present in the hash table, do it now. */ @@ -12401,7 +12684,10 @@ if (! ((*bed->elf_backend_output_arch_local_syms) (abfd, info, &flinfo, (out_sym_func) elf_link_output_symstrtab))) - return FALSE; + { + ret = FALSE; + goto return_local_hash_table; + } } /* That wrote out all the local symbols. Finish up the symbol table @@ -12410,7 +12696,8 @@ converted to local in a version script. */ /* The sh_info field records the index of the first non local symbol. */ - symtab_hdr->sh_info = bfd_get_symcount (abfd); + if (!symtab_hdr->sh_info) + symtab_hdr->sh_info = bfd_get_symcount (abfd); if (dynamic && htab->dynsym != NULL @@ -12447,7 +12734,10 @@ BFD_ASSERT (indx > 0); sym.st_shndx = indx; if (! check_dynsym (abfd, &sym)) - return FALSE; + { + ret = FALSE; + goto return_local_hash_table; + } sym.st_value = s->vma; dest = dynsym + dynindx * bed->s->sizeof_sym; bed->s->swap_symbol_out (abfd, &sym, dest, 0); @@ -12468,15 +12758,21 @@ the original st_name with the dynstr_index. */ sym = e->isym; sym.st_other &= ~ELF_ST_VISIBILITY (-1); + sym.st_shndx = SHN_UNDEF; s = bfd_section_from_elf_index (e->input_bfd, e->isym.st_shndx); - if (s != NULL) + if (s != NULL + && s->output_section != NULL + && elf_section_data (s->output_section) != NULL) { sym.st_shndx = elf_section_data (s->output_section)->this_idx; if (! check_dynsym (abfd, &sym)) - return FALSE; + { + ret = FALSE; + goto return_local_hash_table; + } sym.st_value = (s->output_section->vma + s->output_offset + e->isym.st_value); @@ -12494,7 +12790,10 @@ eoinfo.flinfo = &flinfo; bfd_hash_traverse (&info->hash->table, elf_link_output_extsym, &eoinfo); if (eoinfo.failed) - return FALSE; + { + ret = FALSE; + goto return_local_hash_table; + } /* If backend needs to output some symbols not present in the hash table, do it now. */ @@ -12508,7 +12807,10 @@ if (! ((*bed->elf_backend_output_arch_syms) (abfd, info, &flinfo, (out_sym_func) elf_link_output_symstrtab))) - return FALSE; + { + ret = FALSE; + goto return_local_hash_table; + } } /* Finalize the .strtab section. */ @@ -12516,7 +12818,10 @@ /* Swap out the .strtab section. */ if (!elf_link_swap_symbols_out (&flinfo)) - return FALSE; + { + ret = FALSE; + goto return_local_hash_table; + } /* Now we know the size of the symtab section. */ if (bfd_get_symcount (abfd) > 0) @@ -12543,7 +12848,10 @@ if (bfd_seek (abfd, symtab_shndx_hdr->sh_offset, SEEK_SET) != 0 || (bfd_bwrite (flinfo.symshndxbuf, amt, abfd) != amt)) - return FALSE; + { + ret = FALSE; + goto return_local_hash_table; + } } } @@ -12565,14 +12873,18 @@ if (bfd_seek (abfd, symstrtab_hdr->sh_offset, SEEK_SET) != 0 || ! _bfd_elf_strtab_emit (abfd, flinfo.symstrtab)) - return FALSE; + { + ret = FALSE; + goto return_local_hash_table; + } } if (info->out_implib_bfd && !elf_output_implib (abfd, info)) { _bfd_error_handler (_("%pB: failed to generate import library"), info->out_implib_bfd); - return FALSE; + ret = FALSE; + goto return_local_hash_table; } /* Adjust the relocs to have the correct symbol indices. */ @@ -12587,10 +12899,16 @@ sort = bed->sort_relocs_p == NULL || (*bed->sort_relocs_p) (o); if (esdo->rel.hdr != NULL && !elf_link_adjust_relocs (abfd, o, &esdo->rel, sort, info)) - return FALSE; + { + ret = FALSE; + goto return_local_hash_table; + } if (esdo->rela.hdr != NULL && !elf_link_adjust_relocs (abfd, o, &esdo->rela, sort, info)) - return FALSE; + { + ret = FALSE; + goto return_local_hash_table; + } /* Set the reloc_count field to 0 to prevent write_relocs from trying to swap the relocs out itself. */ @@ -12771,6 +13089,8 @@ if (bed->dtrel_excludes_plt && htab->srelplt != NULL) { + unsigned int opb = bfd_octets_per_byte (abfd, o); + /* Don't count procedure linkage table relocs in the overall reloc count. */ sh_size -= htab->srelplt->size; @@ -12790,7 +13110,7 @@ /* If .rela.plt is the first .rela section, exclude it from DT_RELA. */ else if (sh_addr == (htab->srelplt->output_section->vma - + htab->srelplt->output_offset)) + + htab->srelplt->output_offset) * opb) sh_addr += htab->srelplt->size; } @@ -12811,8 +13131,7 @@ goto error_return; /* Check for DT_TEXTREL (late, in case the backend removes it). */ - if (((info->warn_shared_textrel && bfd_link_pic (info)) - || info->error_textrel) + if (bfd_link_textrel_check (info) && (o = bfd_get_linker_section (dynobj, ".dynamic")) != NULL) { bfd_byte *dyncon, *dynconend; @@ -12827,12 +13146,15 @@ if (dyn.d_tag == DT_TEXTREL) { - if (info->error_textrel) + if (info->textrel_check == textrel_check_error) info->callbacks->einfo (_("%P%X: read-only segment has dynamic relocations\n")); + else if (bfd_link_dll (info)) + info->callbacks->einfo + (_("%P: warning: creating DT_TEXTREL in a shared object\n")); else info->callbacks->einfo - (_("%P: warning: creating a DT_TEXTREL in a shared object\n")); + (_("%P: warning: creating DT_TEXTREL in a PIE\n")); break; } } @@ -12905,17 +13227,25 @@ { bfd_byte *contents = (bfd_byte *) bfd_malloc (attr_size); if (contents == NULL) - return FALSE; /* Bail out and fail. */ + { + /* Bail out and fail. */ + ret = FALSE; + goto return_local_hash_table; + } bfd_elf_set_obj_attr_contents (abfd, contents, attr_size); bfd_set_section_contents (abfd, attr_section, contents, 0, attr_size); free (contents); } - return TRUE; + return_local_hash_table: + if (info->unique_symbol) + bfd_hash_table_free (&flinfo.local_hash_table); + return ret; error_return: elf_final_link_free (abfd, &flinfo); - return FALSE; + ret = FALSE; + goto return_local_hash_table; } /* Initialize COOKIE for input bfd ABFD. */ @@ -12974,8 +13304,7 @@ Elf_Internal_Shdr *symtab_hdr; symtab_hdr = &elf_tdata (abfd)->symtab_hdr; - if (cookie->locsyms != NULL - && symtab_hdr->contents != (unsigned char *) cookie->locsyms) + if (symtab_hdr->contents != (unsigned char *) cookie->locsyms) free (cookie->locsyms); } @@ -13012,7 +13341,7 @@ fini_reloc_cookie_rels (struct elf_reloc_cookie *cookie, asection *sec) { - if (cookie->rels && elf_section_data (sec)->relocs != cookie->rels) + if (elf_section_data (sec)->relocs != cookie->rels) free (cookie->rels); } @@ -13118,7 +13447,7 @@ bfd_boolean *start_stop) { unsigned long r_symndx; - struct elf_link_hash_entry *h; + struct elf_link_hash_entry *h, *hw; r_symndx = cookie->rel->r_info >> cookie->r_sym_shift; if (r_symndx == STN_UNDEF) @@ -13138,12 +13467,16 @@ || h->root.type == bfd_link_hash_warning) h = (struct elf_link_hash_entry *) h->root.u.i.link; h->mark = 1; - /* If this symbol is weak and there is a non-weak definition, we - keep the non-weak definition because many backends put - dynamic reloc info on the non-weak definition for code - handling copy relocs. */ - if (h->is_weakalias) - weakdef (h)->mark = 1; + /* Keep all aliases of the symbol too. If an object symbol + needs to be copied into .dynbss then all of its aliases + should be present as dynamic symbols, not just the one used + on the copy relocation. */ + hw = h; + while (hw->is_weakalias) + { + hw = hw->u.alias; + hw->mark = 1; + } if (start_stop != NULL) { @@ -13307,7 +13640,7 @@ bfd_boolean _bfd_elf_gc_mark_extra_sections (struct bfd_link_info *info, - elf_gc_mark_hook_fn mark_hook ATTRIBUTE_UNUSED) + elf_gc_mark_hook_fn mark_hook) { bfd *ibfd; @@ -13336,11 +13669,33 @@ && (isec->flags & SEC_ALLOC) != 0 && elf_section_type (isec) != SHT_NOTE) some_kept = TRUE; + else + { + /* Since all sections, except for backend specific ones, + have been garbage collected, call mark_hook on this + section if any of its linked-to sections is marked. */ + asection *linked_to_sec = elf_linked_to_section (isec); + for (; linked_to_sec != NULL; + linked_to_sec = elf_linked_to_section (linked_to_sec)) + if (linked_to_sec->gc_mark) + { + if (!_bfd_elf_gc_mark (info, isec, mark_hook)) + return FALSE; + break; + } + } if (!debug_frag_seen && (isec->flags & SEC_DEBUGGING) && CONST_STRNEQ (isec->name, ".debug_line.")) debug_frag_seen = TRUE; + else if (strcmp (bfd_section_name (isec), + "__patchable_function_entries") == 0 + && elf_linked_to_section (isec) == NULL) + info->callbacks->einfo (_("%F%P: %pB(%pA): error: " + "need linked-to section " + "for --gc-sections\n"), + isec->owner, isec); } /* If no non-note alloc section in this file will be kept, then @@ -13350,14 +13705,16 @@ /* Keep debug and special sections like .comment when they are not part of a group. Also keep section groups that contain - just debug sections or special sections. */ + just debug sections or special sections. NB: Sections with + linked-to section has been handled above. */ for (isec = ibfd->sections; isec != NULL; isec = isec->next) { if ((isec->flags & SEC_GROUP) != 0) _bfd_elf_gc_mark_debug_special_section_group (isec); else if (((isec->flags & SEC_DEBUGGING) != 0 || (isec->flags & (SEC_ALLOC | SEC_LOAD | SEC_RELOC)) == 0) - && elf_next_in_group (isec) == NULL) + && elf_next_in_group (isec) == NULL + && elf_linked_to_section (isec) == NULL) isec->gc_mark = 1; if (isec->gc_mark && (isec->flags & SEC_DEBUGGING) != 0) has_kept_debug_info = TRUE; @@ -13617,8 +13974,7 @@ if (h != NULL && (h->root.type == bfd_link_hash_defined || h->root.type == bfd_link_hash_defweak) - && !bfd_is_abs_section (h->root.u.def.section) - && !bfd_is_und_section (h->root.u.def.section)) + && !bfd_is_const_section (h->root.u.def.section)) h->root.u.def.section->flags |= SEC_KEEP; } } @@ -14217,7 +14573,7 @@ { asection *i; int eh_changed = 0; - unsigned int eh_alignment; + unsigned int eh_alignment; /* Octets. */ for (i = o->map_head.s; i != NULL; i = i->map_head.s) { @@ -14244,7 +14600,8 @@ fini_reloc_cookie_for_section (&cookie, i); } - eh_alignment = 1 << o->alignment_power; + eh_alignment = ((1 << o->alignment_power) + * bfd_octets_per_byte (output_bfd, o)); /* Skip over zero terminator, and prevent empty sections from adding alignment padding at the end. */ for (i = o->map_tail.s; i != NULL; i = i->map_tail.s) @@ -14371,7 +14728,8 @@ if (((flags & SEC_GROUP) == (l->sec->flags & SEC_GROUP) && ((flags & SEC_GROUP) != 0 || strcmp (name, l->sec->name) == 0)) - || (l->sec->owner->flags & BFD_PLUGIN) != 0) + || (l->sec->owner->flags & BFD_PLUGIN) != 0 + || (sec->owner->flags & BFD_PLUGIN) != 0) { /* The section has already been linked. See if we should issue a warning. */ @@ -14647,12 +15005,16 @@ h = elf_link_hash_lookup (elf_hash_table (info), symbol, FALSE, FALSE, TRUE); + /* NB: Common symbols will be turned into definition later. */ if (h != NULL && (h->root.type == bfd_link_hash_undefined || h->root.type == bfd_link_hash_undefweak - || ((h->ref_regular || h->def_dynamic) && !h->def_regular))) + || ((h->ref_regular || h->def_dynamic) + && !h->def_regular + && h->root.type != bfd_link_hash_common))) { bfd_boolean was_dynamic = h->ref_dynamic || h->def_dynamic; + h->verinfo.verdef = NULL; h->root.type = bfd_link_hash_defined; h->root.u.def.section = sec; h->root.u.def.value = 0; @@ -14670,7 +15032,8 @@ else { if (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT) - h->other = (h->other & ~ELF_ST_VISIBILITY (-1)) | STV_PROTECTED; + h->other = ((h->other & ~ELF_ST_VISIBILITY (-1)) + | info->start_stop_visibility); if (was_dynamic) bfd_elf_link_record_dynamic_symbol (info, h); } @@ -14678,3 +15041,147 @@ } return NULL; } + +/* Find dynamic relocs for H that apply to read-only sections. */ + +asection * +_bfd_elf_readonly_dynrelocs (struct elf_link_hash_entry *h) +{ + struct elf_dyn_relocs *p; + + for (p = h->dyn_relocs; p != NULL; p = p->next) + { + asection *s = p->sec->output_section; + + if (s != NULL && (s->flags & SEC_READONLY) != 0) + return p->sec; + } + return NULL; +} + +/* Set DF_TEXTREL if we find any dynamic relocs that apply to + read-only sections. */ + +bfd_boolean +_bfd_elf_maybe_set_textrel (struct elf_link_hash_entry *h, void *inf) +{ + asection *sec; + + if (h->root.type == bfd_link_hash_indirect) + return TRUE; + + sec = _bfd_elf_readonly_dynrelocs (h); + if (sec != NULL) + { + struct bfd_link_info *info = (struct bfd_link_info *) inf; + + info->flags |= DF_TEXTREL; + /* xgettext:c-format */ + info->callbacks->minfo (_("%pB: dynamic relocation against `%pT' " + "in read-only section `%pA'\n"), + sec->owner, h->root.root.string, sec); + + if (bfd_link_textrel_check (info)) + /* xgettext:c-format */ + info->callbacks->einfo (_("%P: %pB: warning: relocation against `%s' " + "in read-only section `%pA'\n"), + sec->owner, h->root.root.string, sec); + + /* Not an error, just cut short the traversal. */ + return FALSE; + } + return TRUE; +} + +/* Add dynamic tags. */ + +bfd_boolean +_bfd_elf_add_dynamic_tags (bfd *output_bfd, struct bfd_link_info *info, + bfd_boolean need_dynamic_reloc) +{ + struct elf_link_hash_table *htab = elf_hash_table (info); + + if (htab->dynamic_sections_created) + { + /* Add some entries to the .dynamic section. We fill in the + values later, in finish_dynamic_sections, but we must add + the entries now so that we get the correct size for the + .dynamic section. The DT_DEBUG entry is filled in by the + dynamic linker and used by the debugger. */ +#define add_dynamic_entry(TAG, VAL) \ + _bfd_elf_add_dynamic_entry (info, TAG, VAL) + + const struct elf_backend_data *bed + = get_elf_backend_data (output_bfd); + + if (bfd_link_executable (info)) + { + if (!add_dynamic_entry (DT_DEBUG, 0)) + return FALSE; + } + + if (htab->dt_pltgot_required || htab->splt->size != 0) + { + /* DT_PLTGOT is used by prelink even if there is no PLT + relocation. */ + if (!add_dynamic_entry (DT_PLTGOT, 0)) + return FALSE; + } + + if (htab->dt_jmprel_required || htab->srelplt->size != 0) + { + if (!add_dynamic_entry (DT_PLTRELSZ, 0) + || !add_dynamic_entry (DT_PLTREL, + (bed->rela_plts_and_copies_p + ? DT_RELA : DT_REL)) + || !add_dynamic_entry (DT_JMPREL, 0)) + return FALSE; + } + + if (htab->tlsdesc_plt + && (!add_dynamic_entry (DT_TLSDESC_PLT, 0) + || !add_dynamic_entry (DT_TLSDESC_GOT, 0))) + return FALSE; + + if (need_dynamic_reloc) + { + if (bed->rela_plts_and_copies_p) + { + if (!add_dynamic_entry (DT_RELA, 0) + || !add_dynamic_entry (DT_RELASZ, 0) + || !add_dynamic_entry (DT_RELAENT, + bed->s->sizeof_rela)) + return FALSE; + } + else + { + if (!add_dynamic_entry (DT_REL, 0) + || !add_dynamic_entry (DT_RELSZ, 0) + || !add_dynamic_entry (DT_RELENT, + bed->s->sizeof_rel)) + return FALSE; + } + + /* If any dynamic relocs apply to a read-only section, + then we need a DT_TEXTREL entry. */ + if ((info->flags & DF_TEXTREL) == 0) + elf_link_hash_traverse (htab, _bfd_elf_maybe_set_textrel, + info); + + if ((info->flags & DF_TEXTREL) != 0) + { + if (htab->ifunc_resolvers) + info->callbacks->einfo + (_("%P: warning: GNU indirect functions with DT_TEXTREL " + "may result in a segfault at runtime; recompile with %s\n"), + bfd_link_dll (info) ? "-fPIC" : "-fPIE"); + + if (!add_dynamic_entry (DT_TEXTREL, 0)) + return FALSE; + } + } + } +#undef add_dynamic_entry + + return TRUE; +} diff -Nru gdb-9.1/bfd/elf-linker-x86.h gdb-10.2/bfd/elf-linker-x86.h --- gdb-9.1/bfd/elf-linker-x86.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf-linker-x86.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* x86-specific ELF linker support between ld and bfd. - Copyright (C) 2019 Free Software Foundation, Inc. + Copyright (C) 2019-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -49,6 +49,12 @@ /* TRUE if generate a 1-byte NOP as suffix for x86 call instruction. */ unsigned int call_nop_as_suffix : 1; + /* TRUE if -static is passed at command-line before all input files. */ + unsigned int static_before_all_inputs : 1; + + /* TRUE if --dynamic-linker is passed at command-line. */ + unsigned int has_dynamic_linker : 1; + /* Report missing IBT and SHSTK properties. */ enum elf_x86_cet_report cet_report; diff -Nru gdb-9.1/bfd/elf-linux-core.h gdb-10.2/bfd/elf-linux-core.h --- gdb-9.1/bfd/elf-linux-core.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf-linux-core.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Definitions for PRPSINFO structures under ELF on GNU/Linux. - Copyright (C) 2013-2019 Free Software Foundation, Inc. + Copyright (C) 2013-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/elf-m10200.c gdb-10.2/bfd/elf-m10200.c --- gdb-9.1/bfd/elf-m10200.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf-m10200.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Matsushita 10200 specific support for 32-bit ELF - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -1207,21 +1207,17 @@ } } - if (internal_relocs != NULL - && elf_section_data (sec)->relocs != internal_relocs) + if (elf_section_data (sec)->relocs != internal_relocs) free (internal_relocs); return TRUE; error_return: - if (isymbuf != NULL - && symtab_hdr->contents != (unsigned char *) isymbuf) + if (symtab_hdr->contents != (unsigned char *) isymbuf) free (isymbuf); - if (contents != NULL - && elf_section_data (sec)->this_hdr.contents != contents) + if (elf_section_data (sec)->this_hdr.contents != contents) free (contents); - if (internal_relocs != NULL - && elf_section_data (sec)->relocs != internal_relocs) + if (elf_section_data (sec)->relocs != internal_relocs) free (internal_relocs); return FALSE; @@ -1355,10 +1351,8 @@ isymbuf, sections)) goto error_return; - if (sections != NULL) - free (sections); - if (isymbuf != NULL - && symtab_hdr->contents != (unsigned char *) isymbuf) + free (sections); + if (symtab_hdr->contents != (unsigned char *) isymbuf) free (isymbuf); if (elf_section_data (input_section)->relocs != internal_relocs) free (internal_relocs); @@ -1367,13 +1361,10 @@ return data; error_return: - if (sections != NULL) - free (sections); - if (isymbuf != NULL - && symtab_hdr->contents != (unsigned char *) isymbuf) + free (sections); + if (symtab_hdr->contents != (unsigned char *) isymbuf) free (isymbuf); - if (internal_relocs != NULL - && elf_section_data (input_section)->relocs != internal_relocs) + if (elf_section_data (input_section)->relocs != internal_relocs) free (internal_relocs); return NULL; } diff -Nru gdb-9.1/bfd/elf-m10300.c gdb-10.2/bfd/elf-m10300.c --- gdb-9.1/bfd/elf-m10300.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf-m10300.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Matsushita 10300 specific support for 32-bit ELF - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -128,8 +128,9 @@ /* Get the MN10300 ELF linker hash table from a link_info structure. */ #define elf32_mn10300_hash_table(p) \ - (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \ - == MN10300_ELF_DATA ? ((struct elf32_mn10300_link_hash_table *) ((p)->hash)) : NULL) + ((is_elf_hash_table ((p)->hash) \ + && elf_hash_table_id (elf_hash_table (p)) == MN10300_ELF_DATA) \ + ? (struct elf32_mn10300_link_hash_table *) (p)->hash : NULL) #define elf32_mn10300_link_hash_traverse(table, func, info) \ (elf_link_hash_traverse \ @@ -1372,7 +1373,7 @@ result = TRUE; fail: - if (isymbuf != NULL && symtab_hdr->contents != (unsigned char *) isymbuf) + if (symtab_hdr->contents != (unsigned char *) isymbuf) free (isymbuf); return result; @@ -2066,12 +2067,12 @@ && elf_hash_table (info)->dynamic_sections_created && !SYMBOL_REFERENCES_LOCAL (info, hh)) || (r_type == R_MN10300_32 + && !SYMBOL_REFERENCES_LOCAL (info, hh) /* _32 relocs in executables force _COPY relocs, such that the address of the symbol ends up being local. */ - && !bfd_link_executable (info) - && !SYMBOL_REFERENCES_LOCAL (info, hh) - && ((input_section->flags & SEC_ALLOC) != 0 + && (((input_section->flags & SEC_ALLOC) != 0 + && !bfd_link_executable (info)) /* DWARF will emit R_MN10300_32 relocations in its sections against symbols defined externally in shared libraries. We can't @@ -2417,17 +2418,19 @@ are deleting. */ for (; irel < irelend; irel++) { - int alignment = 1 << irel->r_addend; - if (ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_ALIGN && irel->r_offset > addr - && irel->r_offset < toaddr - && (count < alignment - || alignment % count != 0)) + && irel->r_offset < toaddr) { - irelalign = irel; - toaddr = irel->r_offset; - break; + int alignment = 1 << irel->r_addend; + + if (count < alignment + || alignment % count != 0) + { + irelalign = irel; + toaddr = irel->r_offset; + break; + } } } } @@ -2743,7 +2746,7 @@ /* A local symbol. */ Elf_Internal_Sym *isym; struct elf_link_hash_table *elftab; - bfd_size_type amt; + size_t amt; isym = isymbuf + r_index; if (isym->st_shndx == SHN_UNDEF) @@ -2844,7 +2847,7 @@ && ELF_ST_TYPE (isym->st_info) == STT_FUNC) { struct elf_link_hash_table *elftab; - bfd_size_type amt; + size_t amt; struct elf_link_hash_entry **lhashes = hashes; /* Skip a local symbol if it aliases a @@ -2912,8 +2915,7 @@ } /* Cache or free any memory we allocated for the relocs. */ - if (internal_relocs != NULL - && elf_section_data (section)->relocs != internal_relocs) + if (elf_section_data (section)->relocs != internal_relocs) free (internal_relocs); internal_relocs = NULL; @@ -3069,7 +3071,7 @@ const char *sym_name; char *new_name; struct elf_link_hash_table *elftab; - bfd_size_type amt; + size_t amt; if (isym->st_shndx != sec_shndx) continue; @@ -3222,8 +3224,7 @@ } /* Cache or free any memory we allocated for the relocs. */ - if (internal_relocs != NULL - && elf_section_data (section)->relocs != internal_relocs) + if (elf_section_data (section)->relocs != internal_relocs) free (internal_relocs); internal_relocs = NULL; @@ -3933,7 +3934,7 @@ /* See if the value will fit in 24 bits. We allow any 16bit match here. We prune those we can't handle below. */ - if ((long) value < 0x7fffff && (long) value > -0x800000) + if (value + 0x800000 < 0x1000000 && irel->r_offset >= 3) { unsigned char code; @@ -4004,7 +4005,7 @@ /* See if the value will fit in 16 bits. We allow any 16bit match here. We prune those we can't handle below. */ - if ((long) value < 0x7fff && (long) value > -0x8000) + if (value + 0x8000 < 0x10000 && irel->r_offset >= 2) { unsigned char code; @@ -4391,21 +4392,17 @@ } } - if (internal_relocs != NULL - && elf_section_data (sec)->relocs != internal_relocs) + if (elf_section_data (sec)->relocs != internal_relocs) free (internal_relocs); return TRUE; error_return: - if (isymbuf != NULL - && symtab_hdr->contents != (unsigned char *) isymbuf) + if (symtab_hdr->contents != (unsigned char *) isymbuf) free (isymbuf); - if (contents != NULL - && elf_section_data (section)->this_hdr.contents != contents) + if (elf_section_data (section)->this_hdr.contents != contents) free (contents); - if (internal_relocs != NULL - && elf_section_data (section)->relocs != internal_relocs) + if (elf_section_data (section)->relocs != internal_relocs) free (internal_relocs); return FALSE; @@ -4494,9 +4491,8 @@ isymbuf, sections)) goto error_return; - if (sections != NULL) - free (sections); - if (isymbuf != NULL && symtab_hdr->contents != (unsigned char *) isymbuf) + free (sections); + if (symtab_hdr->contents != (unsigned char *) isymbuf) free (isymbuf); if (internal_relocs != elf_section_data (input_section)->relocs) free (internal_relocs); @@ -4505,12 +4501,10 @@ return data; error_return: - if (sections != NULL) - free (sections); - if (isymbuf != NULL && symtab_hdr->contents != (unsigned char *) isymbuf) + free (sections); + if (symtab_hdr->contents != (unsigned char *) isymbuf) free (isymbuf); - if (internal_relocs != NULL - && internal_relocs != elf_section_data (input_section)->relocs) + if (internal_relocs != elf_section_data (input_section)->relocs) free (internal_relocs); return NULL; } @@ -4602,7 +4596,7 @@ elf32_mn10300_link_hash_table_create (bfd *abfd) { struct elf32_mn10300_link_hash_table *ret; - bfd_size_type amt = sizeof (* ret); + size_t amt = sizeof (* ret); ret = bfd_zmalloc (amt); if (ret == NULL) @@ -5021,9 +5015,7 @@ struct elf32_mn10300_link_hash_table *htab = elf32_mn10300_hash_table (info); bfd * dynobj; asection * s; - bfd_boolean plt; bfd_boolean relocs; - bfd_boolean reltext; dynobj = htab->root.dynobj; BFD_ASSERT (dynobj != NULL); @@ -5061,9 +5053,7 @@ /* The check_relocs and adjust_dynamic_symbol entry points have determined the sizes of the various dynamic sections. Allocate memory for them. */ - plt = FALSE; relocs = FALSE; - reltext = FALSE; for (s = dynobj->sections; s != NULL; s = s->next) { const char * name; @@ -5078,34 +5068,16 @@ if (streq (name, ".plt")) { /* Remember whether there is a PLT. */ - plt = s->size != 0; + ; } else if (CONST_STRNEQ (name, ".rela")) { if (s->size != 0) { - asection * target; - /* Remember whether there are any reloc sections other than .rela.plt. */ if (! streq (name, ".rela.plt")) - { - const char * outname; - - relocs = TRUE; - - /* If this relocation section applies to a read only - section, then we probably need a DT_TEXTREL - entry. The entries in the .rela.plt section - really apply to the .got section, which we - created ourselves and so know is not readonly. */ - outname = bfd_section_name (s->output_section); - target = bfd_get_section_by_name (output_bfd, outname + 5); - if (target != NULL - && (target->flags & SEC_READONLY) != 0 - && (target->flags & SEC_ALLOC) != 0) - reltext = TRUE; - } + relocs = TRUE; /* We use the reloc_count field as a counter if we need to copy relocs into the output file. */ @@ -5145,45 +5117,7 @@ return FALSE; } - if (elf_hash_table (info)->dynamic_sections_created) - { - /* Add some entries to the .dynamic section. We fill in the - values later, in _bfd_mn10300_elf_finish_dynamic_sections, - but we must add the entries now so that we get the correct - size for the .dynamic section. The DT_DEBUG entry is filled - in by the dynamic linker and used by the debugger. */ - if (! bfd_link_pic (info)) - { - if (!_bfd_elf_add_dynamic_entry (info, DT_DEBUG, 0)) - return FALSE; - } - - if (plt) - { - if (!_bfd_elf_add_dynamic_entry (info, DT_PLTGOT, 0) - || !_bfd_elf_add_dynamic_entry (info, DT_PLTRELSZ, 0) - || !_bfd_elf_add_dynamic_entry (info, DT_PLTREL, DT_RELA) - || !_bfd_elf_add_dynamic_entry (info, DT_JMPREL, 0)) - return FALSE; - } - - if (relocs) - { - if (!_bfd_elf_add_dynamic_entry (info, DT_RELA, 0) - || !_bfd_elf_add_dynamic_entry (info, DT_RELASZ, 0) - || !_bfd_elf_add_dynamic_entry (info, DT_RELAENT, - sizeof (Elf32_External_Rela))) - return FALSE; - } - - if (reltext) - { - if (!_bfd_elf_add_dynamic_entry (info, DT_TEXTREL, 0)) - return FALSE; - } - } - - return TRUE; + return _bfd_elf_add_dynamic_tags (output_bfd, info, relocs); } /* Finish up dynamic symbol handling. We set the contents of various diff -Nru gdb-9.1/bfd/elfn32-mips.c gdb-10.2/bfd/elfn32-mips.c --- gdb-9.1/bfd/elfn32-mips.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elfn32-mips.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* MIPS-specific support for 32-bit ELF - Copyright (C) 1993-2019 Free Software Foundation, Inc. + Copyright (C) 1993-2020 Free Software Foundation, Inc. Most of the information added by Ian Lance Taylor, Cygnus Support, . @@ -72,6 +72,8 @@ (bfd *, arelent *, Elf_Internal_Rela *); static bfd_boolean mips_elf_sym_is_global (bfd *, asymbol *); +static bfd_boolean mips_elf_n32_elfsym_local_is_section + (bfd *); static bfd_boolean mips_elf_n32_object_p (bfd *); static bfd_boolean elf32_mips_grok_prstatus @@ -3844,6 +3846,14 @@ || bfd_is_und_section (bfd_asymbol_section (sym)) || bfd_is_com_section (bfd_asymbol_section (sym))); } + +/* Likewise, return TRUE if the symbol table split overall must be + between section symbols and all other symbols. */ +static bfd_boolean +mips_elf_n32_elfsym_local_is_section (bfd *abfd) +{ + return SGI_COMPAT (abfd); +} /* Set the right machine number for a MIPS ELF file. */ @@ -4160,6 +4170,8 @@ #define elf_backend_ignore_discarded_relocs \ _bfd_mips_elf_ignore_discarded_relocs #define elf_backend_write_section _bfd_mips_elf_write_section +#define elf_backend_elfsym_local_is_section \ + mips_elf_n32_elfsym_local_is_section #define elf_backend_mips_irix_compat elf_n32_mips_irix_compat #define elf_backend_mips_rtype_to_howto mips_elf_n32_rtype_to_howto #define bfd_elf32_bfd_is_target_special_symbol \ diff -Nru gdb-9.1/bfd/elf-nacl.c gdb-10.2/bfd/elf-nacl.c --- gdb-9.1/bfd/elf-nacl.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf-nacl.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Native Client support for ELF - Copyright (C) 2012-2019 Free Software Foundation, Inc. + Copyright (C) 2012-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -156,13 +156,13 @@ secdata->this_hdr.sh_addr = sec->vma; secdata->this_hdr.sh_size = sec->size; - newseg = bfd_alloc (abfd, - sizeof *newseg + ((seg->count + 1) - * sizeof (asection *))); + newseg + = bfd_alloc (abfd, (sizeof (*newseg) + + seg->count * sizeof (asection *))); if (newseg == NULL) return FALSE; - memcpy (newseg, seg, - sizeof *newseg + (seg->count * sizeof (asection *))); + memcpy (newseg, seg, (sizeof (*newseg) - sizeof (asection *) + + seg->count * sizeof (asection *))); newseg->sections[newseg->count++] = sec; *m = seg = newseg; } diff -Nru gdb-9.1/bfd/elf-nacl.h gdb-10.2/bfd/elf-nacl.h --- gdb-9.1/bfd/elf-nacl.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf-nacl.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Native Client support for ELF - Copyright (C) 2012-2019 Free Software Foundation, Inc. + Copyright (C) 2012-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/elfnn-aarch64.c gdb-10.2/bfd/elfnn-aarch64.c --- gdb-9.1/bfd/elfnn-aarch64.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elfnn-aarch64.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* AArch64-specific support for NN-bit ELF. - Copyright (C) 2009-2019 Free Software Foundation, Inc. + Copyright (C) 2009-2020 Free Software Foundation, Inc. Contributed by ARM Ltd. This file is part of BFD, the Binary File Descriptor library. @@ -2570,9 +2570,6 @@ { struct elf_link_hash_entry root; - /* Track dynamic relocs copied for this symbol. */ - struct elf_dyn_relocs *dyn_relocs; - /* Since PLT entries have variable size, we need to record the index into .got.plt instead of recomputing it from the PLT offset. */ @@ -2646,9 +2643,6 @@ /* The bytes of the subsequent PLT entry. */ const bfd_byte *plt_entry; - /* Small local sym cache. */ - struct sym_cache sym_cache; - /* For convenience in allocate_dynrelocs. */ bfd *obfd; @@ -2685,20 +2679,9 @@ /* JUMP_SLOT relocs for variant PCS symbols may be present. */ int variant_pcs; - /* The offset into splt of the PLT entry for the TLS descriptor - resolver. Special values are 0, if not necessary (or not found - to be necessary yet), and -1 if needed but not determined - yet. */ - bfd_vma tlsdesc_plt; - /* The number of bytes in the PLT enty for the TLS descriptor. */ bfd_size_type tlsdesc_plt_entry_size; - /* The GOT offset for the lazy trampoline. Communicated to the - loader via DT_TLSDESC_GOT. The magic value (bfd_vma) -1 - indicates an offset is not allocated. */ - bfd_vma dt_tlsdesc_got; - /* Used by local STT_GNU_IFUNC symbols. */ htab_t loc_hash_table; void * loc_hash_memory; @@ -2728,7 +2711,6 @@ table, string)); if (ret != NULL) { - ret->dyn_relocs = NULL; ret->got_type = GOT_UNKNOWN; ret->plt_got_offset = (bfd_vma) - 1; ret->stub_cache = NULL; @@ -2855,37 +2837,6 @@ edir = (struct elf_aarch64_link_hash_entry *) dir; eind = (struct elf_aarch64_link_hash_entry *) ind; - if (eind->dyn_relocs != NULL) - { - if (edir->dyn_relocs != NULL) - { - struct elf_dyn_relocs **pp; - struct elf_dyn_relocs *p; - - /* Add reloc counts against the indirect sym to the direct sym - list. Merge any entries against the same section. */ - for (pp = &eind->dyn_relocs; (p = *pp) != NULL;) - { - struct elf_dyn_relocs *q; - - for (q = edir->dyn_relocs; q != NULL; q = q->next) - if (q->sec == p->sec) - { - q->pc_count += p->pc_count; - q->count += p->count; - *pp = p->next; - break; - } - if (q == NULL) - pp = &p->next; - } - *pp = edir->dyn_relocs; - } - - edir->dyn_relocs = eind->dyn_relocs; - eind->dyn_relocs = NULL; - } - if (ind->root.type == bfd_link_hash_indirect) { /* Copy over PLT info. */ @@ -2947,7 +2898,7 @@ elfNN_aarch64_link_hash_table_create (bfd *abfd) { struct elf_aarch64_link_hash_table *ret; - bfd_size_type amt = sizeof (struct elf_aarch64_link_hash_table); + size_t amt = sizeof (struct elf_aarch64_link_hash_table); ret = bfd_zmalloc (amt); if (ret == NULL) @@ -2967,7 +2918,7 @@ ret->plt_entry = elfNN_aarch64_small_plt_entry; ret->tlsdesc_plt_entry_size = PLT_TLSDESC_ENTRY_SIZE; ret->obfd = abfd; - ret->dt_tlsdesc_got = (bfd_vma) - 1; + ret->root.tlsdesc_got = (bfd_vma) - 1; if (!bfd_hash_table_init (&ret->stub_hash_table, stub_hash_newfunc, sizeof (struct elf_aarch64_stub_hash_entry))) @@ -3278,7 +3229,7 @@ static bfd_boolean aarch64_build_one_stub (struct bfd_hash_entry *gen_entry, - void *in_arg ATTRIBUTE_UNUSED) + void *in_arg) { struct elf_aarch64_stub_hash_entry *stub_entry; asection *stub_sec; @@ -3291,10 +3242,22 @@ unsigned int template_size; const uint32_t *template; unsigned int i; + struct bfd_link_info *info; /* Massage our args to the form they really have. */ stub_entry = (struct elf_aarch64_stub_hash_entry *) gen_entry; + info = (struct bfd_link_info *) in_arg; + + /* Fail if the target section could not be assigned to an output + section. The user should fix his linker script. */ + if (stub_entry->target_section->output_section == NULL + && info->non_contiguous_regions) + info->callbacks->einfo (_("%F%P: Could not assign '%pA' to an output section. " + "Retry without " + "--enable-non-contiguous-regions.\n"), + stub_entry->target_section); + stub_sec = stub_entry->stub_sec; /* Make a note of the offset within the stubs for this entry. */ @@ -3456,7 +3419,7 @@ unsigned int top_id, top_index; asection *section; asection **input_list, **list; - bfd_size_type amt; + size_t amt; struct elf_aarch64_link_hash_table *htab = elf_aarch64_hash_table (info); @@ -3534,7 +3497,7 @@ { asection **list = htab->input_list + isec->output_section->index; - if (*list != bfd_abs_section_ptr) + if (*list != bfd_abs_section_ptr && (isec->flags & SEC_CODE) != 0) { /* Steal the link_sec pointer for our list. */ /* This happens to make the list in reverse order, @@ -3555,68 +3518,97 @@ static void group_sections (struct elf_aarch64_link_hash_table *htab, bfd_size_type stub_group_size, - bfd_boolean stubs_always_before_branch) + bfd_boolean stubs_always_after_branch) { - asection **list = htab->input_list + htab->top_index; + asection **list = htab->input_list; do { asection *tail = *list; + asection *head; if (tail == bfd_abs_section_ptr) continue; + /* Reverse the list: we must avoid placing stubs at the + beginning of the section because the beginning of the text + section may be required for an interrupt vector in bare metal + code. */ +#define NEXT_SEC PREV_SEC + head = NULL; while (tail != NULL) { - asection *curr; - asection *prev; - bfd_size_type total; + /* Pop from tail. */ + asection *item = tail; + tail = PREV_SEC (item); - curr = tail; - total = tail->size; - while ((prev = PREV_SEC (curr)) != NULL - && ((total += curr->output_offset - prev->output_offset) - < stub_group_size)) - curr = prev; + /* Push on head. */ + NEXT_SEC (item) = head; + head = item; + } - /* OK, the size from the start of CURR to the end is less + while (head != NULL) + { + asection *curr; + asection *next; + bfd_vma stub_group_start = head->output_offset; + bfd_vma end_of_next; + + curr = head; + while (NEXT_SEC (curr) != NULL) + { + next = NEXT_SEC (curr); + end_of_next = next->output_offset + next->size; + if (end_of_next - stub_group_start >= stub_group_size) + /* End of NEXT is too far from start, so stop. */ + break; + /* Add NEXT to the group. */ + curr = next; + } + + /* OK, the size from the start to the start of CURR is less than stub_group_size and thus can be handled by one stub - section. (Or the tail section is itself larger than + section. (Or the head section is itself larger than stub_group_size, in which case we may be toast.) We should really be keeping track of the total size of stubs added here, as stubs contribute to the final output section size. */ do { - prev = PREV_SEC (tail); + next = NEXT_SEC (head); /* Set up this stub group. */ - htab->stub_group[tail->id].link_sec = curr; + htab->stub_group[head->id].link_sec = curr; } - while (tail != curr && (tail = prev) != NULL); + while (head != curr && (head = next) != NULL); /* But wait, there's more! Input sections up to stub_group_size - bytes before the stub section can be handled by it too. */ - if (!stubs_always_before_branch) + bytes after the stub section can be handled by it too. */ + if (!stubs_always_after_branch) { - total = 0; - while (prev != NULL - && ((total += tail->output_offset - prev->output_offset) - < stub_group_size)) + stub_group_start = curr->output_offset + curr->size; + + while (next != NULL) { - tail = prev; - prev = PREV_SEC (tail); - htab->stub_group[tail->id].link_sec = curr; + end_of_next = next->output_offset + next->size; + if (end_of_next - stub_group_start >= stub_group_size) + /* End of NEXT is too far from stubs, so stop. */ + break; + /* Add NEXT to the stub group. */ + head = next; + next = NEXT_SEC (head); + htab->stub_group[head->id].link_sec = curr; } } - tail = prev; + head = next; } } - while (list-- != htab->input_list); + while (list++ != htab->input_list + htab->top_index); free (htab->input_list); } #undef PREV_SEC +#undef PREV_SEC #define AARCH64_BITS(x, pos, n) (((x) >> (pos)) & ((1 << (n)) - 1)) @@ -3933,8 +3925,9 @@ sec_data = elf_aarch64_section_data (section); - qsort (sec_data->map, sec_data->mapcount, - sizeof (elf_aarch64_section_map), elf_aarch64_compare_mapping); + if (sec_data->mapcount) + qsort (sec_data->map, sec_data->mapcount, + sizeof (elf_aarch64_section_map), elf_aarch64_compare_mapping); for (span = 0; span < sec_data->mapcount; span++) { @@ -4217,8 +4210,9 @@ sec_data = elf_aarch64_section_data (section); - qsort (sec_data->map, sec_data->mapcount, - sizeof (elf_aarch64_section_map), elf_aarch64_compare_mapping); + if (sec_data->mapcount) + qsort (sec_data->map, sec_data->mapcount, + sizeof (elf_aarch64_section_map), elf_aarch64_compare_mapping); for (span = 0; span < sec_data->mapcount; span++) { @@ -4313,9 +4307,15 @@ for (input_bfd = info->input_bfds; input_bfd != NULL; input_bfd = input_bfd->link.next) - if (!_bfd_aarch64_erratum_835769_scan (input_bfd, info, - &num_erratum_835769_fixes)) - return FALSE; + { + if (!is_aarch64_elf (input_bfd) + || (input_bfd->flags & BFD_LINKER_CREATED) != 0) + continue; + + if (!_bfd_aarch64_erratum_835769_scan (input_bfd, info, + &num_erratum_835769_fixes)) + return FALSE; + } _bfd_aarch64_resize_stubs (htab); (*htab->layout_sections_again) (); @@ -4331,6 +4331,10 @@ { asection *section; + if (!is_aarch64_elf (input_bfd) + || (input_bfd->flags & BFD_LINKER_CREATED) != 0) + continue; + for (section = input_bfd->sections; section != NULL; section = section->next) @@ -4353,6 +4357,10 @@ asection *section; Elf_Internal_Sym *local_syms = NULL; + if (!is_aarch64_elf (input_bfd) + || (input_bfd->flags & BFD_LINKER_CREATED) != 0) + continue; + /* We'll need the symbol table in a second. */ symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr; if (symtab_hdr->sh_info == 0) @@ -4615,7 +4623,7 @@ return TRUE; -error_ret_free_local: + error_ret_free_local: return FALSE; } @@ -5507,7 +5515,7 @@ switch (bfd_r_type) { default: -bad_ifunc_reloc: + bad_ifunc_reloc: if (h->root.root.string) name = h->root.root.string; else @@ -5881,6 +5889,23 @@ bfd_set_error (bfd_error_bad_value); return bfd_reloc_notsupported; } + value = _bfd_aarch64_elf_resolve_relocation (input_bfd, bfd_r_type, + place, value, + signed_addend, + weak_undef_p); + break; + + case BFD_RELOC_AARCH64_BRANCH19: + case BFD_RELOC_AARCH64_TSTBR14: + if (h && h->root.type == bfd_link_hash_undefined) + { + _bfd_error_handler + /* xgettext:c-format */ + (_("%pB: conditional branch to undefined symbol `%s' " + "not allowed"), input_bfd, h->root.root.string); + bfd_set_error (bfd_error_bad_value); + return bfd_reloc_notsupported; + } /* Fall through. */ case BFD_RELOC_AARCH64_16: @@ -5888,7 +5913,6 @@ case BFD_RELOC_AARCH64_32: #endif case BFD_RELOC_AARCH64_ADD_LO12: - case BFD_RELOC_AARCH64_BRANCH19: case BFD_RELOC_AARCH64_LDST128_LO12: case BFD_RELOC_AARCH64_LDST16_LO12: case BFD_RELOC_AARCH64_LDST32_LO12: @@ -5904,7 +5928,6 @@ case BFD_RELOC_AARCH64_MOVW_G2_NC: case BFD_RELOC_AARCH64_MOVW_G2_S: case BFD_RELOC_AARCH64_MOVW_G3: - case BFD_RELOC_AARCH64_TSTBR14: value = _bfd_aarch64_elf_resolve_relocation (input_bfd, bfd_r_type, place, value, signed_addend, weak_undef_p); @@ -7119,7 +7142,7 @@ Try to catch this situation here and provide a more helpful error message to the user. */ - if (addend & ((1 << howto->rightshift) - 1) + if (addend & (((bfd_vma) 1 << howto->rightshift) - 1) /* FIXME: Are we testing all of the appropriate reloc types here ? */ && (real_r_type == BFD_RELOC_AARCH64_LD_LO19_PCREL @@ -7318,23 +7341,6 @@ return TRUE; } -/* Find dynamic relocs for H that apply to read-only sections. */ - -static asection * -readonly_dynrelocs (struct elf_link_hash_entry *h) -{ - struct elf_dyn_relocs *p; - - for (p = elf_aarch64_hash_entry (h)->dyn_relocs; p != NULL; p = p->next) - { - asection *s = p->sec->output_section; - - if (s != NULL && (s->flags & SEC_READONLY) != 0) - return p->sec; - } - return NULL; -} - /* Return true if we need copy relocation against EH. */ static bfd_boolean @@ -7343,7 +7349,7 @@ struct elf_dyn_relocs *p; asection *s; - for (p = eh->dyn_relocs; p != NULL; p = p->next) + for (p = eh->root.dyn_relocs; p != NULL; p = p->next) { /* If there is any pc-relative reference, we need to keep copy relocation to avoid propagating the relocation into runtime that current glibc @@ -7606,7 +7612,7 @@ if (r_symndx < symtab_hdr->sh_info) { /* A local symbol. */ - isym = bfd_sym_from_r_symndx (&htab->sym_cache, + isym = bfd_sym_from_r_symndx (&htab->root.sym_cache, abfd, r_symndx); if (isym == NULL) return FALSE; @@ -7822,9 +7828,7 @@ relocations we need for this symbol. */ if (h != NULL) { - struct elf_aarch64_link_hash_entry *eh; - eh = (struct elf_aarch64_link_hash_entry *) h; - head = &eh->dyn_relocs; + head = &h->dyn_relocs; } else { @@ -7835,7 +7839,7 @@ asection *s; void **vpp; - isym = bfd_sym_from_r_symndx (&htab->sym_cache, + isym = bfd_sym_from_r_symndx (&htab->root.sym_cache, abfd, r_symndx); if (isym == NULL) return FALSE; @@ -7853,7 +7857,7 @@ p = *head; if (p == NULL || p->sec != sec) { - bfd_size_type amt = sizeof *p; + size_t amt = sizeof *p; p = ((struct elf_dyn_relocs *) bfd_zalloc (htab->root.dynobj, amt)); if (p == NULL) @@ -8419,7 +8423,7 @@ if (!sec->used_by_bfd) { _aarch64_elf_section_data *sdata; - bfd_size_type amt = sizeof (*sdata); + size_t amt = sizeof (*sdata); sdata = bfd_zalloc (abfd, amt); if (sdata == NULL) @@ -8667,7 +8671,7 @@ type. */ /* TLSDESC PLT is now needed, but not yet determined. */ - htab->tlsdesc_plt = (bfd_vma) - 1; + htab->root.tlsdesc_plt = (bfd_vma) - 1; } if (got_type & GOT_TLS_GD) @@ -8683,7 +8687,7 @@ h->got.offset = (bfd_vma) - 1; } - if (eh->dyn_relocs == NULL) + if (h->dyn_relocs == NULL) return TRUE; /* In the shared -Bsymbolic case, discard space allocated for @@ -8704,7 +8708,7 @@ { struct elf_dyn_relocs **pp; - for (pp = &eh->dyn_relocs; (p = *pp) != NULL;) + for (pp = &h->dyn_relocs; (p = *pp) != NULL;) { p->count -= p->pc_count; p->pc_count = 0; @@ -8717,11 +8721,11 @@ /* Also discard relocs on undefined weak syms with non-default visibility. */ - if (eh->dyn_relocs != NULL && h->root.type == bfd_link_hash_undefweak) + if (h->dyn_relocs != NULL && h->root.type == bfd_link_hash_undefweak) { if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT || UNDEFWEAK_NO_DYNAMIC_RELOC (info, h)) - eh->dyn_relocs = NULL; + h->dyn_relocs = NULL; /* Make sure undefined weak symbols are output as a dynamic symbol in PIEs. */ @@ -8760,13 +8764,13 @@ goto keep; } - eh->dyn_relocs = NULL; + h->dyn_relocs = NULL; keep:; } /* Finally, allocate space. */ - for (p = eh->dyn_relocs; p != NULL; p = p->next) + for (p = h->dyn_relocs; p != NULL; p = p->next) { asection *sreloc; @@ -8789,7 +8793,6 @@ { struct bfd_link_info *info; struct elf_aarch64_link_hash_table *htab; - struct elf_aarch64_link_hash_entry *eh; /* An example of a bfd_link_hash_indirect symbol is versioned symbol. For example: __gxx_personality_v0(bfd_link_hash_indirect) @@ -8809,15 +8812,12 @@ info = (struct bfd_link_info *) inf; htab = elf_aarch64_hash_table (info); - eh = (struct elf_aarch64_link_hash_entry *) h; - /* Since STT_GNU_IFUNC symbol must go through PLT, we handle it here if it is defined and referenced in a non-shared object. */ if (h->type == STT_GNU_IFUNC && h->def_regular) return _bfd_elf_allocate_ifunc_dyn_relocs (info, h, - &eh->dyn_relocs, - NULL, + &h->dyn_relocs, htab->plt_entry_size, htab->plt_header_size, GOT_ENTRY_SIZE, @@ -8844,33 +8844,6 @@ return elfNN_aarch64_allocate_ifunc_dynrelocs (h, inf); } -/* Set DF_TEXTREL if we find any dynamic relocs that apply to - read-only sections. */ - -static bfd_boolean -maybe_set_textrel (struct elf_link_hash_entry *h, void *info_p) -{ - asection *sec; - - if (h->root.type == bfd_link_hash_indirect) - return TRUE; - - sec = readonly_dynrelocs (h); - if (sec != NULL) - { - struct bfd_link_info *info = (struct bfd_link_info *) info_p; - - info->flags |= DF_TEXTREL; - info->callbacks->minfo - (_("%pB: dynamic relocation against `%pT' in read-only section `%pA'\n"), - sec->owner, h->root.root.string, sec); - - /* Not an error, just cut short the traversal. */ - return FALSE; - } - return TRUE; -} - /* This is the most important function of all . Innocuosly named though ! */ @@ -8983,7 +8956,7 @@ { htab->root.srelplt->size += RELOC_SIZE (htab); /* Note RELOC_COUNT not incremented here! */ - htab->tlsdesc_plt = (bfd_vma) - 1; + htab->root.tlsdesc_plt = (bfd_vma) - 1; } if (got_type & GOT_TLS_GD) @@ -9026,19 +8999,21 @@ if (htab->root.srelplt) htab->sgotplt_jump_table_size = aarch64_compute_jump_table_size (htab); - if (htab->tlsdesc_plt) + if (htab->root.tlsdesc_plt) { if (htab->root.splt->size == 0) htab->root.splt->size += htab->plt_header_size; /* If we're not using lazy TLS relocations, don't generate the GOT and PLT entry required. */ - if (!(info->flags & DF_BIND_NOW)) + if ((info->flags & DF_BIND_NOW)) + htab->root.tlsdesc_plt = 0; + else { - htab->tlsdesc_plt = htab->root.splt->size; + htab->root.tlsdesc_plt = htab->root.splt->size; htab->root.splt->size += htab->tlsdesc_plt_entry_size; - htab->dt_tlsdesc_got = htab->root.sgot->size; + htab->root.tlsdesc_got = htab->root.sgot->size; htab->root.sgot->size += GOT_ENTRY_SIZE; } } @@ -9126,30 +9101,15 @@ #define add_dynamic_entry(TAG, VAL) \ _bfd_elf_add_dynamic_entry (info, TAG, VAL) - if (bfd_link_executable (info)) - { - if (!add_dynamic_entry (DT_DEBUG, 0)) - return FALSE; - } + if (!_bfd_elf_add_dynamic_tags (output_bfd, info, relocs)) + return FALSE; if (htab->root.splt->size != 0) { - if (!add_dynamic_entry (DT_PLTGOT, 0) - || !add_dynamic_entry (DT_PLTRELSZ, 0) - || !add_dynamic_entry (DT_PLTREL, DT_RELA) - || !add_dynamic_entry (DT_JMPREL, 0)) - return FALSE; - if (htab->variant_pcs && !add_dynamic_entry (DT_AARCH64_VARIANT_PCS, 0)) return FALSE; - if (htab->tlsdesc_plt - && !(info->flags & DF_BIND_NOW) - && (!add_dynamic_entry (DT_TLSDESC_PLT, 0) - || !add_dynamic_entry (DT_TLSDESC_GOT, 0))) - return FALSE; - if ((elf_aarch64_tdata (output_bfd)->plt_type == PLT_BTI_PAC) && (!add_dynamic_entry (DT_AARCH64_BTI_PLT, 0) || !add_dynamic_entry (DT_AARCH64_PAC_PLT, 0))) @@ -9163,25 +9123,6 @@ && !add_dynamic_entry (DT_AARCH64_PAC_PLT, 0)) return FALSE; } - - if (relocs) - { - if (!add_dynamic_entry (DT_RELA, 0) - || !add_dynamic_entry (DT_RELASZ, 0) - || !add_dynamic_entry (DT_RELAENT, RELOC_SIZE (htab))) - return FALSE; - - /* If any dynamic relocs apply to a read-only section, - then we need a DT_TEXTREL entry. */ - if ((info->flags & DF_TEXTREL) == 0) - elf_link_hash_traverse (&htab->root, maybe_set_textrel, info); - - if ((info->flags & DF_TEXTREL) != 0) - { - if (!add_dynamic_entry (DT_TEXTREL, 0)) - return FALSE; - } - } } #undef add_dynamic_entry @@ -9482,7 +9423,7 @@ } else { -do_glob_dat: + do_glob_dat: BFD_ASSERT ((h->got.offset & 1) == 0); bfd_put_NN (output_bfd, (bfd_vma) 0, htab->root.sgot->contents + h->got.offset); @@ -9571,8 +9512,11 @@ memcpy (htab->root.splt->contents, htab->plt0_entry, htab->plt_header_size); - elf_section_data (htab->root.splt->output_section)->this_hdr.sh_entsize = - htab->plt_header_size; + + /* PR 26312: Explicitly set the sh_entsize to 0 so that + consumers do not think that the section contains fixed + sized objects. */ + elf_section_data (htab->root.splt->output_section)->this_hdr.sh_entsize = 0; plt_got_2nd_ent = (htab->root.sgotplt->output_section->vma + htab->root.sgotplt->output_offset @@ -9653,14 +9597,14 @@ case DT_TLSDESC_PLT: s = htab->root.splt; dyn.d_un.d_ptr = s->output_section->vma + s->output_offset - + htab->tlsdesc_plt; + + htab->root.tlsdesc_plt; break; case DT_TLSDESC_GOT: s = htab->root.sgot; - BFD_ASSERT (htab->dt_tlsdesc_got != (bfd_vma)-1); + BFD_ASSERT (htab->root.tlsdesc_got != (bfd_vma)-1); dyn.d_un.d_ptr = s->output_section->vma + s->output_offset - + htab->dt_tlsdesc_got; + + htab->root.tlsdesc_got; break; } @@ -9674,15 +9618,11 @@ { elfNN_aarch64_init_small_plt0_entry (output_bfd, htab); - elf_section_data (htab->root.splt->output_section)-> - this_hdr.sh_entsize = htab->plt_entry_size; - - - if (htab->tlsdesc_plt && !(info->flags & DF_BIND_NOW)) + if (htab->root.tlsdesc_plt && !(info->flags & DF_BIND_NOW)) { - BFD_ASSERT (htab->dt_tlsdesc_got != (bfd_vma)-1); + BFD_ASSERT (htab->root.tlsdesc_got != (bfd_vma)-1); bfd_put_NN (output_bfd, (bfd_vma) 0, - htab->root.sgot->contents + htab->dt_tlsdesc_got); + htab->root.sgot->contents + htab->root.tlsdesc_got); const bfd_byte *entry = elfNN_aarch64_tlsdesc_small_plt_entry; htab->tlsdesc_plt_entry_size = PLT_TLSDESC_ENTRY_SIZE; @@ -9693,13 +9633,14 @@ entry = elfNN_aarch64_tlsdesc_small_plt_bti_entry; } - memcpy (htab->root.splt->contents + htab->tlsdesc_plt, + memcpy (htab->root.splt->contents + htab->root.tlsdesc_plt, entry, htab->tlsdesc_plt_entry_size); { bfd_vma adrp1_addr = htab->root.splt->output_section->vma - + htab->root.splt->output_offset + htab->tlsdesc_plt + 4; + + htab->root.splt->output_offset + + htab->root.tlsdesc_plt + 4; bfd_vma adrp2_addr = adrp1_addr + 4; @@ -9711,10 +9652,10 @@ htab->root.sgotplt->output_section->vma + htab->root.sgotplt->output_offset; - bfd_vma dt_tlsdesc_got = got_addr + htab->dt_tlsdesc_got; + bfd_vma dt_tlsdesc_got = got_addr + htab->root.tlsdesc_got; bfd_byte *plt_entry = - htab->root.splt->contents + htab->tlsdesc_plt; + htab->root.splt->contents + htab->root.tlsdesc_plt; /* First instruction in BTI enabled PLT stub is a BTI instruction so skip it. */ diff -Nru gdb-9.1/bfd/elfnn-ia64.c gdb-10.2/bfd/elfnn-ia64.c --- gdb-9.1/bfd/elfnn-ia64.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elfnn-ia64.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* IA-64 support for 64-bit ELF - Copyright (C) 1998-2019 Free Software Foundation, Inc. + Copyright (C) 1998-2020 Free Software Foundation, Inc. Contributed by David Mosberger-Tang This file is part of BFD, the Binary File Descriptor library. @@ -39,6 +39,10 @@ #define LOG_SECTION_ALIGN 2 #endif +#define is_ia64_elf(bfd) \ + (bfd_get_flavour (bfd) == bfd_target_elf_flavour \ + && elf_object_id (bfd) == IA64_ELF_DATA) + typedef struct bfd_hash_entry *(*new_hash_entry_func) (struct bfd_hash_entry *, struct bfd_hash_table *, const char *); @@ -139,7 +143,6 @@ asection *rel_pltoff_sec; /* Dynamic relocation section for same. */ bfd_size_type minplt_entries; /* Number of minplt entries. */ - unsigned reltext : 1; /* Are there relocs against readonly sections? */ unsigned self_dtpmod_done : 1;/* Has self DTPMOD entry been finished? */ bfd_vma self_dtpmod_offset; /* .got offset to self DTPMOD entry. */ /* There are maybe R_IA64_GPREL22 relocations, including those @@ -163,8 +166,9 @@ }; #define elfNN_ia64_hash_table(p) \ - (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \ - == IA64_ELF_DATA ? ((struct elfNN_ia64_link_hash_table *) ((p)->hash)) : NULL) + ((is_elf_hash_table ((p)->hash) \ + && elf_hash_table_id (elf_hash_table (p)) == IA64_ELF_DATA) \ + ? (struct elfNN_ia64_link_hash_table *) (p)->hash : NULL) static struct elfNN_ia64_dyn_sym_info * get_dyn_sym_info (struct elfNN_ia64_link_hash_table *ia64_info, @@ -869,13 +873,11 @@ return TRUE; error_return: - if (isymbuf != NULL && (unsigned char *) isymbuf != symtab_hdr->contents) + if ((unsigned char *) isymbuf != symtab_hdr->contents) free (isymbuf); - if (contents != NULL - && elf_section_data (sec)->this_hdr.contents != contents) + if (elf_section_data (sec)->this_hdr.contents != contents) free (contents); - if (internal_relocs != NULL - && elf_section_data (sec)->relocs != internal_relocs) + if (elf_section_data (sec)->relocs != internal_relocs) free (internal_relocs); return FALSE; } @@ -938,11 +940,10 @@ flag. */ static bfd_boolean -elfNN_ia64_section_flags (flagword *flags, - const Elf_Internal_Shdr *hdr) +elfNN_ia64_section_flags (const Elf_Internal_Shdr *hdr) { if (hdr->sh_flags & SHF_IA_64_SHORT) - *flags |= SEC_SMALL_DATA; + hdr->bfd_section->flags |= SEC_SMALL_DATA; return TRUE; } @@ -1064,6 +1065,7 @@ scomm = bfd_make_section_with_flags (abfd, ".scommon", (SEC_ALLOC | SEC_IS_COMMON + | SEC_SMALL_DATA | SEC_LINKER_CREATED)); if (scomm == NULL) return FALSE; @@ -1307,8 +1309,7 @@ struct elfNN_ia64_dyn_sym_info *dyn_i; unsigned int count; - if (dir->info) - free (dir->info); + free (dir->info); dir->info = ind->info; dir->count = ind->count; @@ -1396,14 +1397,11 @@ struct elfNN_ia64_link_hash_entry *entry = (struct elfNN_ia64_link_hash_entry *) xentry; - if (entry->info) - { - free (entry->info); - entry->info = NULL; - entry->count = 0; - entry->sorted_count = 0; - entry->size = 0; - } + free (entry->info); + entry->info = NULL; + entry->count = 0; + entry->sorted_count = 0; + entry->size = 0; return TRUE; } @@ -1417,14 +1415,11 @@ struct elfNN_ia64_local_hash_entry *entry = (struct elfNN_ia64_local_hash_entry *) *slot; - if (entry->info) - { - free (entry->info); - entry->info = NULL; - entry->count = 0; - entry->sorted_count = 0; - entry->size = 0; - } + free (entry->info); + entry->info = NULL; + entry->count = 0; + entry->sorted_count = 0; + entry->size = 0; return TRUE; } @@ -1480,6 +1475,7 @@ return NULL; } ret->root.root.hash_table_free = elfNN_ia64_link_hash_table_free; + ret->root.dt_pltgot_required = TRUE; return &ret->root.root; } @@ -1871,18 +1867,16 @@ key.addend = addend; dyn_i = bsearch (&key, info, sorted_count, sizeof (*info), addend_compare); - if (dyn_i) - { - return dyn_i; - } + return dyn_i; } - /* Do a quick check for the last inserted entry. */ - dyn_i = info + count - 1; - if (dyn_i->addend == addend) + if (count != 0) { - return dyn_i; + /* Do a quick check for the last inserted entry. */ + dyn_i = info + count - 1; + if (dyn_i->addend == addend) + return dyn_i; } } @@ -1910,7 +1904,7 @@ *size_p = size; *info_p = info; -has_space: + has_space: /* Append the new one to the array. */ dyn_i = info + count; memset (dyn_i, 0, sizeof (*dyn_i)); @@ -1936,19 +1930,23 @@ if (size != count) { amt = count * sizeof (*info); - info = bfd_malloc (amt); - if (info != NULL) - { - memcpy (info, *info_p, amt); - free (*info_p); - *size_p = count; - *info_p = info; - } + info = bfd_realloc (info, amt); + *size_p = count; + if (info == NULL && count != 0) + /* realloc should never fail since we are reducing size here, + but if it does use the old array. */ + info = *info_p; + else + *info_p = info; } - key.addend = addend; - dyn_i = bsearch (&key, info, count, - sizeof (*info), addend_compare); + if (count == 0) + dyn_i = NULL; + else + { + key.addend = addend; + dyn_i = bsearch (&key, info, count, sizeof (*info), addend_compare); + } } return dyn_i; @@ -2957,7 +2955,7 @@ abort (); } if (rent->reltext) - ia64_info->reltext = 1; + x->info->flags |= DF_TEXTREL; rent->srel->size += sizeof (ElfNN_External_Rela) * count; } @@ -3001,7 +2999,6 @@ struct elfNN_ia64_link_hash_table *ia64_info; asection *sec; bfd *dynobj; - bfd_boolean relplt = FALSE; ia64_info = elfNN_ia64_hash_table (info); if (ia64_info == NULL) @@ -3155,7 +3152,7 @@ ia64_info->rel_pltoff_sec = NULL; else { - relplt = TRUE; + ia64_info->root.dt_jmprel_required = TRUE; /* We use the reloc_count field as a counter if we need to copy relocs into the output file. */ sec->reloc_count = 0; @@ -3201,41 +3198,14 @@ later (in finish_dynamic_sections) but we must add the entries now so that we get the correct size for the .dynamic section. */ - if (bfd_link_executable (info)) - { - /* The DT_DEBUG entry is filled in by the dynamic linker and used - by the debugger. */ #define add_dynamic_entry(TAG, VAL) \ _bfd_elf_add_dynamic_entry (info, TAG, VAL) - if (!add_dynamic_entry (DT_DEBUG, 0)) - return FALSE; - } - - if (!add_dynamic_entry (DT_IA_64_PLT_RESERVE, 0)) - return FALSE; - if (!add_dynamic_entry (DT_PLTGOT, 0)) + if (!_bfd_elf_add_dynamic_tags (output_bfd, info, TRUE)) return FALSE; - if (relplt) - { - if (!add_dynamic_entry (DT_PLTRELSZ, 0) - || !add_dynamic_entry (DT_PLTREL, DT_RELA) - || !add_dynamic_entry (DT_JMPREL, 0)) - return FALSE; - } - - if (!add_dynamic_entry (DT_RELA, 0) - || !add_dynamic_entry (DT_RELASZ, 0) - || !add_dynamic_entry (DT_RELAENT, sizeof (ElfNN_External_Rela))) + if (!add_dynamic_entry (DT_IA_64_PLT_RESERVE, 0)) return FALSE; - - if (ia64_info->reltext) - { - if (!add_dynamic_entry (DT_TEXTREL, 0)) - return FALSE; - info->flags |= DF_TEXTREL; - } } /* ??? Perhaps force __gp local. */ @@ -3702,7 +3672,7 @@ { if (max_short_vma - min_short_vma >= 0x400000) { -overflow: + overflow: _bfd_error_handler /* xgettext:c-format */ (_("%pB: short data segment overflowed (%#" PRIx64 " >= 0x400000)"), @@ -4472,7 +4442,7 @@ case bfd_reloc_outofrange: case bfd_reloc_overflow: default: -missing_tls_sec: + missing_tls_sec: { const char *name; @@ -4732,6 +4702,7 @@ /* Merge backend specific data from an object file to the output object file when linking. */ + static bfd_boolean elfNN_ia64_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info) { @@ -4740,10 +4711,12 @@ flagword in_flags; bfd_boolean ok = TRUE; - /* Don't even pretend to support mixed-format linking. */ - if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour - || bfd_get_flavour (obfd) != bfd_target_elf_flavour) - return FALSE; + /* FIXME: What should be checked when linking shared libraries? */ + if ((ibfd->flags & DYNAMIC) != 0) + return TRUE; + + if (!is_ia64_elf (ibfd) || !is_ia64_elf (obfd)) + return TRUE; in_flags = elf_elfheader (ibfd)->e_flags; out_flags = elf_elfheader (obfd)->e_flags; @@ -4880,7 +4853,7 @@ flagword flags; const char *name; char *unwi_name, *unw_name; - bfd_size_type amt; + size_t amt; if (abfd->flags & DYNAMIC) return TRUE; @@ -5013,6 +4986,11 @@ break; } } + +static void +ignore_errors (const char *fmt ATTRIBUTE_UNUSED, ...) +{ +} #define TARGET_LITTLE_SYM ia64_elfNN_le_vec #define TARGET_LITTLE_NAME "elfNN-ia64-little" @@ -5110,7 +5088,7 @@ We don't want to flood users with so many error messages. We turn off the warning for now. It will be turned on later when the Intel compiler is fixed. */ -#define elf_backend_link_order_error_handler NULL +#define elf_backend_link_order_error_handler ignore_errors #include "elfNN-target.h" diff -Nru gdb-9.1/bfd/elfnn-riscv.c gdb-10.2/bfd/elfnn-riscv.c --- gdb-9.1/bfd/elfnn-riscv.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elfnn-riscv.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* RISC-V-specific support for NN-bit ELF. - Copyright (C) 2011-2019 Free Software Foundation, Inc. + Copyright (C) 2011-2020 Free Software Foundation, Inc. Contributed by Andrew Waterman (andrew@sifive.com). Based on TILE-Gx and MIPS targets. @@ -61,9 +61,6 @@ { struct elf_link_hash_entry elf; - /* Track dynamic relocs copied for this symbol. */ - struct elf_dyn_relocs *dyn_relocs; - #define GOT_UNKNOWN 0 #define GOT_NORMAL 1 #define GOT_TLS_GD 2 @@ -98,6 +95,14 @@ && elf_tdata (bfd) != NULL \ && elf_object_id (bfd) == RISCV_ELF_DATA) +static bfd_boolean +elfNN_riscv_mkobject (bfd *abfd) +{ + return bfd_elf_allocate_object (abfd, + sizeof (struct _bfd_riscv_elf_obj_tdata), + RISCV_ELF_DATA); +} + #include "elf/common.h" #include "elf/internal.h" @@ -108,9 +113,6 @@ /* Short-cuts to get to dynamic linker sections. */ asection *sdyntdata; - /* Small local sym to section mapping cache. */ - struct sym_cache sym_cache; - /* The max alignment of output sections. */ bfd_vma max_alignment; }; @@ -118,8 +120,9 @@ /* Get the RISC-V ELF linker hash table from a link_info structure. */ #define riscv_elf_hash_table(p) \ - (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \ - == RISCV_ELF_DATA ? ((struct riscv_elf_link_hash_table *) ((p)->hash)) : NULL) + ((is_elf_hash_table ((p)->hash) \ + && elf_hash_table_id (elf_hash_table (p)) == RISCV_ELF_DATA) \ + ? (struct riscv_elf_link_hash_table *) (p)->hash : NULL) static bfd_boolean riscv_info_to_howto_rela (bfd *abfd, @@ -196,7 +199,7 @@ entry[0] = RISCV_UTYPE (AUIPC, X_T2, gotplt_offset_high); entry[1] = RISCV_RTYPE (SUB, X_T1, X_T1, X_T3); entry[2] = RISCV_ITYPE (LREG, X_T3, X_T2, gotplt_offset_low); - entry[3] = RISCV_ITYPE (ADDI, X_T1, X_T1, -(PLT_HEADER_SIZE + 12)); + entry[3] = RISCV_ITYPE (ADDI, X_T1, X_T1, (uint32_t) -(PLT_HEADER_SIZE + 12)); entry[4] = RISCV_ITYPE (ADDI, X_T0, X_T2, gotplt_offset_low); entry[5] = RISCV_ITYPE (SRLI, X_T1, X_T1, 4 - RISCV_ELF_LOG_WORD_BYTES); entry[6] = RISCV_ITYPE (LREG, X_T0, X_T0, RISCV_ELF_WORD_BYTES); @@ -256,7 +259,6 @@ struct riscv_elf_link_hash_entry *eh; eh = (struct riscv_elf_link_hash_entry *) entry; - eh->dyn_relocs = NULL; eh->tls_type = GOT_UNKNOWN; } @@ -269,7 +271,7 @@ riscv_elf_link_hash_table_create (bfd *abfd) { struct riscv_elf_link_hash_table *ret; - bfd_size_type amt = sizeof (struct riscv_elf_link_hash_table); + size_t amt = sizeof (struct riscv_elf_link_hash_table); ret = (struct riscv_elf_link_hash_table *) bfd_zmalloc (amt); if (ret == NULL) @@ -411,37 +413,6 @@ edir = (struct riscv_elf_link_hash_entry *) dir; eind = (struct riscv_elf_link_hash_entry *) ind; - if (eind->dyn_relocs != NULL) - { - if (edir->dyn_relocs != NULL) - { - struct elf_dyn_relocs **pp; - struct elf_dyn_relocs *p; - - /* Add reloc counts against the indirect sym to the direct sym - list. Merge any entries against the same section. */ - for (pp = &eind->dyn_relocs; (p = *pp) != NULL; ) - { - struct elf_dyn_relocs *q; - - for (q = edir->dyn_relocs; q != NULL; q = q->next) - if (q->sec == p->sec) - { - q->pc_count += p->pc_count; - q->count += p->count; - *pp = p->next; - break; - } - if (q == NULL) - pp = &p->next; - } - *pp = edir->dyn_relocs; - } - - edir->dyn_relocs = eind->dyn_relocs; - eind->dyn_relocs = NULL; - } - if (ind->root.type == bfd_link_hash_indirect && dir->got.refcount <= 0) { @@ -586,21 +557,23 @@ return FALSE; break; + case R_RISCV_CALL: case R_RISCV_CALL_PLT: - /* This symbol requires a procedure linkage table entry. We + /* These symbol requires a procedure linkage table entry. We actually build the entry in adjust_dynamic_symbol, - because this might be a case of linking PIC code without + because these might be a case of linking PIC code without linking in any dynamic objects, in which case we don't need to generate a procedure linkage table after all. */ - if (h != NULL) - { - h->needs_plt = 1; - h->plt.refcount += 1; - } + /* If it is a local symbol, then we resolve it directly + without creating a PLT entry. */ + if (h == NULL) + continue; + + h->needs_plt = 1; + h->plt.refcount += 1; break; - case R_RISCV_CALL: case R_RISCV_JAL: case R_RISCV_BRANCH: case R_RISCV_RVC_BRANCH: @@ -697,7 +670,7 @@ /* If this is a global symbol, we count the number of relocations we need for this symbol. */ if (h != NULL) - head = &((struct riscv_elf_link_hash_entry *) h)->dyn_relocs; + head = &h->dyn_relocs; else { /* Track dynamic relocs needed for local syms too. @@ -708,7 +681,7 @@ void *vpp; Elf_Internal_Sym *isym; - isym = bfd_sym_from_r_symndx (&htab->sym_cache, + isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache, abfd, r_symndx); if (isym == NULL) return FALSE; @@ -724,7 +697,7 @@ p = *head; if (p == NULL || p->sec != sec) { - bfd_size_type amt = sizeof *p; + size_t amt = sizeof *p; p = ((struct elf_dyn_relocs *) bfd_alloc (htab->elf.dynobj, amt)); if (p == NULL) @@ -778,23 +751,6 @@ return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym); } -/* Find dynamic relocs for H that apply to read-only sections. */ - -static asection * -readonly_dynrelocs (struct elf_link_hash_entry *h) -{ - struct elf_dyn_relocs *p; - - for (p = riscv_elf_hash_entry (h)->dyn_relocs; p != NULL; p = p->next) - { - asection *s = p->sec->output_section; - - if (s != NULL && (s->flags & SEC_READONLY) != 0) - return p->sec; - } - return NULL; -} - /* Adjust a symbol defined by a dynamic object and referenced by a regular object. The current definition is in some section of the dynamic object, but we're not including those sections. We have to @@ -883,7 +839,7 @@ /* If we don't find any dynamic relocs in read-only sections, then we'll be keeping the dynamic relocs and avoiding the copy reloc. */ - if (!readonly_dynrelocs (h)) + if (!_bfd_elf_readonly_dynrelocs (h)) { h->non_got_ref = 0; return TRUE; @@ -936,7 +892,6 @@ { struct bfd_link_info *info; struct riscv_elf_link_hash_table *htab; - struct riscv_elf_link_hash_entry *eh; struct elf_dyn_relocs *p; if (h->root.type == bfd_link_hash_indirect) @@ -1045,8 +1000,7 @@ else h->got.offset = (bfd_vma) -1; - eh = (struct riscv_elf_link_hash_entry *) h; - if (eh->dyn_relocs == NULL) + if (h->dyn_relocs == NULL) return TRUE; /* In the shared -Bsymbolic case, discard space allocated for @@ -1061,7 +1015,7 @@ { struct elf_dyn_relocs **pp; - for (pp = &eh->dyn_relocs; (p = *pp) != NULL; ) + for (pp = &h->dyn_relocs; (p = *pp) != NULL; ) { p->count -= p->pc_count; p->pc_count = 0; @@ -1074,12 +1028,12 @@ /* Also discard relocs on undefined weak syms with non-default visibility. */ - if (eh->dyn_relocs != NULL + if (h->dyn_relocs != NULL && h->root.type == bfd_link_hash_undefweak) { if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT || UNDEFWEAK_NO_DYNAMIC_RELOC (info, h)) - eh->dyn_relocs = NULL; + h->dyn_relocs = NULL; /* Make sure undefined weak symbols are output as a dynamic symbol in PIEs. */ @@ -1119,13 +1073,13 @@ goto keep; } - eh->dyn_relocs = NULL; + h->dyn_relocs = NULL; keep: ; } /* Finally, allocate space. */ - for (p = eh->dyn_relocs; p != NULL; p = p->next) + for (p = h->dyn_relocs; p != NULL; p = p->next) { asection *sreloc = elf_section_data (p->sec)->sreloc; sreloc->size += p->count * sizeof (ElfNN_External_Rela); @@ -1134,33 +1088,6 @@ return TRUE; } -/* Set DF_TEXTREL if we find any dynamic relocs that apply to - read-only sections. */ - -static bfd_boolean -maybe_set_textrel (struct elf_link_hash_entry *h, void *info_p) -{ - asection *sec; - - if (h->root.type == bfd_link_hash_indirect) - return TRUE; - - sec = readonly_dynrelocs (h); - if (sec != NULL) - { - struct bfd_link_info *info = (struct bfd_link_info *) info_p; - - info->flags |= DF_TEXTREL; - info->callbacks->minfo - (_("%pB: dynamic relocation against `%pT' in read-only section `%pA'\n"), - sec->owner, h->root.root.string, sec); - - /* Not an error, just cut short the traversal. */ - return FALSE; - } - return TRUE; -} - static bfd_boolean riscv_elf_size_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info) { @@ -1334,50 +1261,7 @@ return FALSE; } - if (elf_hash_table (info)->dynamic_sections_created) - { - /* Add some entries to the .dynamic section. We fill in the - values later, in riscv_elf_finish_dynamic_sections, but we - must add the entries now so that we get the correct size for - the .dynamic section. The DT_DEBUG entry is filled in by the - dynamic linker and used by the debugger. */ -#define add_dynamic_entry(TAG, VAL) \ - _bfd_elf_add_dynamic_entry (info, TAG, VAL) - - if (bfd_link_executable (info)) - { - if (!add_dynamic_entry (DT_DEBUG, 0)) - return FALSE; - } - - if (htab->elf.srelplt->size != 0) - { - if (!add_dynamic_entry (DT_PLTGOT, 0) - || !add_dynamic_entry (DT_PLTRELSZ, 0) - || !add_dynamic_entry (DT_PLTREL, DT_RELA) - || !add_dynamic_entry (DT_JMPREL, 0)) - return FALSE; - } - - if (!add_dynamic_entry (DT_RELA, 0) - || !add_dynamic_entry (DT_RELASZ, 0) - || !add_dynamic_entry (DT_RELAENT, sizeof (ElfNN_External_Rela))) - return FALSE; - - /* If any dynamic relocs apply to a read-only section, - then we need a DT_TEXTREL entry. */ - if ((info->flags & DF_TEXTREL) == 0) - elf_link_hash_traverse (&htab->elf, maybe_set_textrel, info); - - if (info->flags & DF_TEXTREL) - { - if (!add_dynamic_entry (DT_TEXTREL, 0)) - return FALSE; - } - } -#undef add_dynamic_entry - - return TRUE; + return _bfd_elf_add_dynamic_tags (output_bfd, info, TRUE); } #define TP_OFFSET 0 @@ -1987,10 +1871,11 @@ break; case R_RISCV_CALL: + case R_RISCV_CALL_PLT: /* Handle a call to an undefined weak function. This won't be relaxed, so we have to handle it here. */ if (h != NULL && h->root.type == bfd_link_hash_undefweak - && h->plt.offset == MINUS_ONE) + && (!bfd_link_pic (info) || h->plt.offset == MINUS_ONE)) { /* We can use x0 as the base register. */ bfd_vma insn = bfd_get_32 (input_bfd, @@ -2003,9 +1888,9 @@ } /* Fall through. */ - case R_RISCV_CALL_PLT: case R_RISCV_JAL: case R_RISCV_RVC_JUMP: + /* This line has to match the check in _bfd_riscv_relax_section. */ if (bfd_link_pic (info) && h != NULL && h->plt.offset != MINUS_ONE) { /* Refer to the PLT entry. */ @@ -2306,7 +2191,6 @@ { switch (r_type) { - case R_RISCV_CALL: case R_RISCV_JAL: case R_RISCV_RVC_JUMP: if (asprintf (&msg_buf, @@ -2384,9 +2268,8 @@ if (msg && r != bfd_reloc_dangerous) info->callbacks->einfo (msg); - /* Free the unused `msg_buf` if needed. */ - if (msg_buf) - free (msg_buf); + /* Free the unused `msg_buf`. */ + free (msg_buf); /* We already reported the error via a callback, so don't try to report it again by returning false. That leads to spurious errors. */ @@ -2395,7 +2278,7 @@ } ret = riscv_resolve_pcrel_lo_relocs (&pcrel_relocs); -out: + out: riscv_free_pcrel_relocs (&pcrel_relocs); return ret; } @@ -2735,43 +2618,42 @@ return (strlen (name) == 1) && (name[0] != 'x') && (name[0] != 's'); } -/* Predicator for non-standard extension. */ - -static bfd_boolean -riscv_non_std_ext_p (const char *name) -{ - return (strlen (name) >= 2) && (name[0] == 'x'); -} - -/* Predicator for standard supervisor extension. */ - -static bfd_boolean -riscv_std_sv_ext_p (const char *name) -{ - return (strlen (name) >= 2) && (name[0] == 's') && (name[1] != 'x'); -} - -/* Predicator for non-standard supervisor extension. */ +/* Check if the versions are compatible. */ static bfd_boolean -riscv_non_std_sv_ext_p (const char *name) -{ - return (strlen (name) >= 3) && (name[0] == 's') && (name[1] == 'x'); -} - -/* Error handler when version mis-match. */ - -static void riscv_version_mismatch (bfd *ibfd, struct riscv_subset_t *in, struct riscv_subset_t *out) { - _bfd_error_handler - (_("error: %pB: Mis-matched ISA version for '%s' extension. " - "%d.%d vs %d.%d"), - ibfd, in->name, - in->major_version, in->minor_version, - out->major_version, out->minor_version); + if (in == NULL || out == NULL) + return TRUE; + + /* Since there are no version conflicts for now, we just report + warning when the versions are mis-matched. */ + if (in->major_version != out->major_version + || in->minor_version != out->minor_version) + { + _bfd_error_handler + (_("warning: %pB: mis-matched ISA version %d.%d for '%s' " + "extension, the output version is %d.%d"), + ibfd, + in->major_version, + in->minor_version, + in->name, + out->major_version, + out->minor_version); + + /* Update the output ISA versions to the newest ones. */ + if ((in->major_version > out->major_version) + || (in->major_version == out->major_version + && in->minor_version > out->minor_version)) + { + out->major_version = in->major_version; + out->minor_version = in->minor_version; + } + } + + return TRUE; } /* Return true if subset is 'i' or 'e'. */ @@ -2785,8 +2667,8 @@ && (strcasecmp (subset->name, "i") != 0)) { _bfd_error_handler - (_("error: %pB: corrupted ISA string '%s'. " - "First letter should be 'i' or 'e' but got '%s'."), + (_("error: %pB: corrupted ISA string '%s'. " + "First letter should be 'i' or 'e' but got '%s'"), ibfd, arch, subset->name); return FALSE; } @@ -2825,24 +2707,19 @@ if (!riscv_i_or_e_p (ibfd, out_arch, out)) return FALSE; - if (in->name[0] != out->name[0]) + if (strcasecmp (in->name, out->name) != 0) { /* TODO: We might allow merge 'i' with 'e'. */ _bfd_error_handler - (_("error: %pB: Mis-matched ISA string to merge '%s' and '%s'."), + (_("error: %pB: mis-matched ISA string to merge '%s' and '%s'"), ibfd, in->name, out->name); return FALSE; } - else if ((in->major_version != out->major_version) || - (in->minor_version != out->minor_version)) - { - /* TODO: Allow different merge policy. */ - riscv_version_mismatch (ibfd, in, out); - return FALSE; - } + else if (!riscv_version_mismatch (ibfd, in, out)) + return FALSE; else riscv_add_subset (&merged_subsets, - in->name, in->major_version, in->minor_version); + out->name, out->major_version, out->minor_version); in = in->next; out = out->next; @@ -2859,17 +2736,10 @@ if (find_in == NULL && find_out == NULL) continue; - /* Check version is same or not. */ - /* TODO: Allow different merge policy. */ - if ((find_in != NULL && find_out != NULL) - && ((find_in->major_version != find_out->major_version) - || (find_in->minor_version != find_out->minor_version))) - { - riscv_version_mismatch (ibfd, in, out); - return FALSE; - } + if (!riscv_version_mismatch (ibfd, find_in, find_out)) + return FALSE; - struct riscv_subset_t *merged = find_in ? find_in : find_out; + struct riscv_subset_t *merged = find_out ? find_out : find_in; riscv_add_subset (&merged_subsets, merged->name, merged->major_version, merged->minor_version); } @@ -2884,53 +2754,98 @@ return TRUE; } -/* Merge non-standard and supervisor extensions. - Return Value: - Return FALSE if failed to merge. +/* If C is a prefix class, then return the EXT string without the prefix. + Otherwise return the entire EXT string. */ - Arguments: - `bfd`: bfd handler. - `in_arch`: Raw arch string for input object. - `out_arch`: Raw arch string for output object. - `pin`: subset list for input object, and it'll skip all merged subset after - merge. - `pout`: Like `pin`, but for output object. */ +static const char * +riscv_skip_prefix (const char *ext, riscv_isa_ext_class_t c) +{ + switch (c) + { + case RV_ISA_CLASS_X: return &ext[1]; + case RV_ISA_CLASS_S: return &ext[1]; + case RV_ISA_CLASS_Z: return &ext[1]; + default: return ext; + } +} + +/* Compare prefixed extension names canonically. */ + +static int +riscv_prefix_cmp (const char *a, const char *b) +{ + riscv_isa_ext_class_t ca = riscv_get_prefix_class (a); + riscv_isa_ext_class_t cb = riscv_get_prefix_class (b); + + /* Extension name without prefix */ + const char *anp = riscv_skip_prefix (a, ca); + const char *bnp = riscv_skip_prefix (b, cb); + + if (ca == cb) + return strcasecmp (anp, bnp); + + return (int)ca - (int)cb; +} + +/* Merge multi letter extensions. PIN is a pointer to the head of the input + object subset list. Likewise for POUT and the output object. Return TRUE + on success and FALSE when a conflict is found. */ static bfd_boolean -riscv_merge_non_std_and_sv_ext (bfd *ibfd, - riscv_subset_t **pin, - riscv_subset_t **pout, - bfd_boolean (*predicate_func) (const char *)) +riscv_merge_multi_letter_ext (bfd *ibfd, + riscv_subset_t **pin, + riscv_subset_t **pout) { riscv_subset_t *in = *pin; riscv_subset_t *out = *pout; + riscv_subset_t *tail; - for (in = *pin; in != NULL && predicate_func (in->name); in = in->next) - riscv_add_subset (&merged_subsets, in->name, in->major_version, - in->minor_version); - - for (out = *pout; out != NULL && predicate_func (out->name); out = out->next) - { - riscv_subset_t *find_ext = - riscv_lookup_subset (&merged_subsets, out->name); - if (find_ext != NULL) - { - /* Check version is same or not. */ - /* TODO: Allow different merge policy. */ - if ((find_ext->major_version != out->major_version) - || (find_ext->minor_version != out->minor_version)) - { - riscv_version_mismatch (ibfd, find_ext, out); - return FALSE; - } + int cmp; + + while (in && out) + { + cmp = riscv_prefix_cmp (in->name, out->name); + + if (cmp < 0) + { + /* `in' comes before `out', append `in' and increment. */ + riscv_add_subset (&merged_subsets, in->name, in->major_version, + in->minor_version); + in = in->next; + } + else if (cmp > 0) + { + /* `out' comes before `in', append `out' and increment. */ + riscv_add_subset (&merged_subsets, out->name, out->major_version, + out->minor_version); + out = out->next; } else - riscv_add_subset (&merged_subsets, out->name, - out->major_version, out->minor_version); + { + /* Both present, check version and increment both. */ + if (!riscv_version_mismatch (ibfd, in, out)) + return FALSE; + + riscv_add_subset (&merged_subsets, out->name, out->major_version, + out->minor_version); + out = out->next; + in = in->next; + } } - *pin = in; - *pout = out; + if (in || out) { + /* If we're here, either `in' or `out' is running longer than + the other. So, we need to append the corresponding tail. */ + tail = in ? in : out; + + while (tail) + { + riscv_add_subset (&merged_subsets, tail->name, tail->major_version, + tail->minor_version); + tail = tail->next; + } + } + return TRUE; } @@ -2949,13 +2864,17 @@ riscv_parse_subset_t rpe_in; riscv_parse_subset_t rpe_out; + /* Only assembler needs to check the default version of ISA, so just set + the rpe_in.get_default_version and rpe_out.get_default_version to NULL. */ rpe_in.subset_list = &in_subsets; rpe_in.error_handler = _bfd_error_handler; rpe_in.xlen = &xlen_in; + rpe_in.get_default_version = NULL; rpe_out.subset_list = &out_subsets; rpe_out.error_handler = _bfd_error_handler; rpe_out.xlen = &xlen_out; + rpe_out.get_default_version = NULL; if (in_arch == NULL && out_arch == NULL) return NULL; @@ -2978,7 +2897,7 @@ { _bfd_error_handler (_("error: %pB: ISA string of input (%s) doesn't match " - "output (%s)."), ibfd, in_arch, out_arch); + "output (%s)"), ibfd, in_arch, out_arch); return NULL; } @@ -2989,29 +2908,24 @@ /* Merge standard extension. */ if (!riscv_merge_std_ext (ibfd, in_arch, out_arch, &in, &out)) return NULL; - /* Merge non-standard extension. */ - if (!riscv_merge_non_std_and_sv_ext (ibfd, &in, &out, riscv_non_std_ext_p)) - return NULL; - /* Merge standard supervisor extension. */ - if (!riscv_merge_non_std_and_sv_ext (ibfd, &in, &out, riscv_std_sv_ext_p)) - return NULL; - /* Merge non-standard supervisor extension. */ - if (!riscv_merge_non_std_and_sv_ext (ibfd, &in, &out, riscv_non_std_sv_ext_p)) + + /* Merge all non-single letter extensions with single call. */ + if (!riscv_merge_multi_letter_ext (ibfd, &in, &out)) return NULL; if (xlen_in != xlen_out) { _bfd_error_handler (_("error: %pB: XLEN of input (%u) doesn't match " - "output (%u)."), ibfd, xlen_in, xlen_out); + "output (%u)"), ibfd, xlen_in, xlen_out); return NULL; } if (xlen_in != ARCH_SIZE) { _bfd_error_handler - (_("error: %pB: Unsupported XLEN (%u), you might be " - "using wrong emulation."), ibfd, xlen_in); + (_("error: %pB: unsupported XLEN (%u), you might be " + "using wrong emulation"), ibfd, xlen_in); return NULL; } @@ -3035,6 +2949,7 @@ obj_attribute *in_attr; obj_attribute *out_attr; bfd_boolean result = TRUE; + bfd_boolean priv_attrs_merged = FALSE; const char *sec_name = get_elf_backend_data (ibfd)->obj_attrs_section; unsigned int i; @@ -3089,20 +3004,78 @@ out_attr[Tag_RISCV_arch].s = merged_arch; } break; + case Tag_RISCV_priv_spec: case Tag_RISCV_priv_spec_minor: case Tag_RISCV_priv_spec_revision: - if (out_attr[i].i != in_attr[i].i) + /* If we have handled the priv attributes, then skip it. */ + if (!priv_attrs_merged) { - _bfd_error_handler - (_("error: %pB: conflicting priv spec version " - "(major/minor/revision)."), ibfd); - result = FALSE; + unsigned int Tag_a = Tag_RISCV_priv_spec; + unsigned int Tag_b = Tag_RISCV_priv_spec_minor; + unsigned int Tag_c = Tag_RISCV_priv_spec_revision; + enum riscv_priv_spec_class in_priv_spec; + enum riscv_priv_spec_class out_priv_spec; + + /* Get the priv spec class from elf attribute numbers. */ + riscv_get_priv_spec_class_from_numbers (in_attr[Tag_a].i, + in_attr[Tag_b].i, + in_attr[Tag_c].i, + &in_priv_spec); + riscv_get_priv_spec_class_from_numbers (out_attr[Tag_a].i, + out_attr[Tag_b].i, + out_attr[Tag_c].i, + &out_priv_spec); + + /* Allow to link the object without the priv specs. */ + if (out_priv_spec == PRIV_SPEC_CLASS_NONE) + { + out_attr[Tag_a].i = in_attr[Tag_a].i; + out_attr[Tag_b].i = in_attr[Tag_b].i; + out_attr[Tag_c].i = in_attr[Tag_c].i; + } + else if (in_priv_spec != PRIV_SPEC_CLASS_NONE + && in_priv_spec != out_priv_spec) + { + _bfd_error_handler + (_("warning: %pB use privilege spec version %u.%u.%u but " + "the output use version %u.%u.%u"), + ibfd, + in_attr[Tag_a].i, + in_attr[Tag_b].i, + in_attr[Tag_c].i, + out_attr[Tag_a].i, + out_attr[Tag_b].i, + out_attr[Tag_c].i); + + /* The priv spec v1.9.1 can not be linked with other spec + versions since the conflicts. We plan to drop the + v1.9.1 in a year or two, so this confict should be + removed in the future. */ + if (in_priv_spec == PRIV_SPEC_CLASS_1P9P1 + || out_priv_spec == PRIV_SPEC_CLASS_1P9P1) + { + _bfd_error_handler + (_("warning: privilege spec version 1.9.1 can not be " + "linked with other spec versions")); + } + + /* Update the output priv spec to the newest one. */ + if (in_priv_spec > out_priv_spec) + { + out_attr[Tag_a].i = in_attr[Tag_a].i; + out_attr[Tag_b].i = in_attr[Tag_b].i; + out_attr[Tag_c].i = in_attr[Tag_c].i; + } + } + priv_attrs_merged = TRUE; } break; + case Tag_RISCV_unaligned_access: out_attr[i].i |= in_attr[i].i; break; + case Tag_RISCV_stack_align: if (out_attr[i].i == 0) out_attr[i].i = in_attr[i].i; @@ -3112,11 +3085,12 @@ { _bfd_error_handler (_("error: %pB use %u-byte stack aligned but the output " - "use %u-byte stack aligned."), + "use %u-byte stack aligned"), ibfd, in_attr[i].i, out_attr[i].i); result = FALSE; } break; + default: result &= _bfd_elf_merge_unknown_attribute_low (ibfd, obfd, i); } @@ -3224,7 +3198,7 @@ return TRUE; -fail: + fail: bfd_set_error (bfd_error_bad_value); return FALSE; } @@ -3488,7 +3462,7 @@ bfd_boolean undefined_weak ATTRIBUTE_UNUSED) { bfd_byte *contents = elf_section_data (sec)->this_hdr.contents; - bfd_signed_vma foff = symval - (sec_addr (sec) + rel->r_offset); + bfd_vma foff = symval - (sec_addr (sec) + rel->r_offset); bfd_boolean near_zero = (symval + RISCV_IMM_REACH/2) < RISCV_IMM_REACH; bfd_vma auipc, jalr; int rd, r_type, len = 4, rvc = elf_elfheader (abfd)->e_flags & EF_RISCV_RVC; @@ -3502,7 +3476,7 @@ if (sym_sec->output_section == sec->output_section && sym_sec->output_section != bfd_abs_section_ptr) max_alignment = (bfd_vma) 1 << sym_sec->output_section->alignment_power; - foff += (foff < 0 ? -max_alignment : max_alignment); + foff += ((bfd_signed_vma) foff < 0 ? -max_alignment : max_alignment); } /* See if this function call can be shortened. */ @@ -4128,7 +4102,9 @@ undefined_weak = TRUE; } - if (h->plt.offset != MINUS_ONE) + /* This line has to match the check in riscv_elf_relocate_section + in the R_RISCV_CALL[_PLT] case. */ + if (bfd_link_pic (info) && h->plt.offset != MINUS_ONE) { sym_sec = htab->elf.splt; symval = h->plt.offset; @@ -4138,15 +4114,16 @@ symval = 0; sym_sec = bfd_und_section_ptr; } - else if (h->root.u.def.section->output_section == NULL - || (h->root.type != bfd_link_hash_defined - && h->root.type != bfd_link_hash_defweak)) - continue; - else + else if ((h->root.type == bfd_link_hash_defined + || h->root.type == bfd_link_hash_defweak) + && h->root.u.def.section != NULL + && h->root.u.def.section->output_section != NULL) { symval = h->root.u.def.value; sym_sec = h->root.u.def.section; } + else + continue; if (h->type != STT_FUNC) reserve_size = @@ -4196,7 +4173,7 @@ ret = TRUE; -fail: + fail: if (relocs != data->relocs) free (relocs); riscv_free_pcgp_relocs(&pcgp_relocs, abfd, sec); @@ -4339,6 +4316,7 @@ #define elf_info_to_howto_rel NULL #define elf_info_to_howto riscv_info_to_howto_rela #define bfd_elfNN_bfd_relax_section _bfd_riscv_relax_section +#define bfd_elfNN_mkobject elfNN_riscv_mkobject #define elf_backend_init_index_section _bfd_elf_init_1_index_section diff -Nru gdb-9.1/bfd/elf-properties.c gdb-10.2/bfd/elf-properties.c --- gdb-9.1/bfd/elf-properties.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf-properties.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* ELF program property support. - Copyright (C) 2017-2019 Free Software Foundation, Inc. + Copyright (C) 2017-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -86,7 +86,7 @@ if (note->descsz < 8 || (note->descsz % align_size) != 0) { -bad_size: + bad_size: _bfd_error_handler (_("warning: %pB: corrupt GNU_PROPERTY_TYPE (%ld) size: %#lx"), abfd, note->type, note->descsz); @@ -186,7 +186,7 @@ (_("warning: %pB: unsupported GNU_PROPERTY_TYPE (%ld) type: 0x%x"), abfd, note->type, type); -next: + next: ptr += (datasz + (align_size - 1)) & ~ (align_size - 1); } @@ -703,6 +703,8 @@ if (size > bfd_section_size (isec)) { contents = (bfd_byte *) bfd_malloc (size); + if (contents == NULL) + return FALSE; free (*ptr); *ptr = contents; } diff -Nru gdb-9.1/bfd/elf-s390-common.c gdb-10.2/bfd/elf-s390-common.c --- gdb-9.1/bfd/elf-s390-common.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf-s390-common.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* IBM S/390-specific support for ELF 32 and 64 bit functions - Copyright (C) 2000-2019 Free Software Foundation, Inc. + Copyright (C) 2000-2020 Free Software Foundation, Inc. Contributed by Andreas Krebbel. This file is part of BFD, the Binary File Descriptor library. @@ -170,7 +170,7 @@ struct elf_dyn_relocs *p; struct elf_link_hash_table *htab; struct elf_s390_link_hash_entry *eh = (struct elf_s390_link_hash_entry*)h; - struct elf_dyn_relocs **head = &eh->dyn_relocs; + struct elf_dyn_relocs **head = &h->dyn_relocs; htab = elf_hash_table (info); eh->ifunc_resolver_address = h->root.u.def.value; @@ -212,7 +212,7 @@ return TRUE; } -keep: + keep: /* Without checking h->plt.refcount here we allocate a PLT slot. When setting plt.refcount in check_relocs it might not have been known that this will be an IFUNC symol. */ diff -Nru gdb-9.1/bfd/elf-s390.h gdb-10.2/bfd/elf-s390.h --- gdb-9.1/bfd/elf-s390.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf-s390.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* S/390-specific support for ELF. - Copyright (C) 2017-2019 Free Software Foundation, Inc. + Copyright (C) 2017-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/elf-strtab.c gdb-10.2/bfd/elf-strtab.c --- gdb-9.1/bfd/elf-strtab.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf-strtab.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* ELF strtab with GC and suffix merging support. - Copyright (C) 2001-2019 Free Software Foundation, Inc. + Copyright (C) 2001-2020 Free Software Foundation, Inc. Written by Jakub Jelinek . This file is part of BFD, the Binary File Descriptor library. @@ -95,7 +95,7 @@ _bfd_elf_strtab_init (void) { struct elf_strtab_hash *table; - bfd_size_type amt = sizeof (struct elf_strtab_hash); + size_t amt = sizeof (struct elf_strtab_hash); table = (struct elf_strtab_hash *) bfd_malloc (amt); if (table == NULL) @@ -245,13 +245,16 @@ void _bfd_elf_strtab_restore (struct elf_strtab_hash *tab, void *buf) { - size_t idx, curr_size = tab->size; + size_t idx, curr_size = tab->size, save_size; struct strtab_save *save = (struct strtab_save *) buf; BFD_ASSERT (tab->sec_size == 0); - BFD_ASSERT (save->size <= curr_size); - tab->size = save->size; - for (idx = 1; idx < save->size; ++idx) + save_size = 1; + if (save != NULL) + save_size = save->size; + BFD_ASSERT (save_size <= curr_size); + tab->size = save_size; + for (idx = 1; idx < save_size; ++idx) tab->array[idx]->refcount = save->refcount[idx]; for (; idx < curr_size; ++idx) @@ -439,9 +442,8 @@ } } -alloc_failure: - if (array) - free (array); + alloc_failure: + free (array); /* Assign positions to the strings we want to keep. */ sec_size = 1; diff -Nru gdb-9.1/bfd/elf-vxworks.c gdb-10.2/bfd/elf-vxworks.c --- gdb-9.1/bfd/elf-vxworks.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf-vxworks.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* VxWorks support for ELF - Copyright (C) 2005-2019 Free Software Foundation, Inc. + Copyright (C) 2005-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -295,4 +295,17 @@ return TRUE; } +/* Add dynamic tags. */ +bfd_boolean +_bfd_elf_maybe_vxworks_add_dynamic_tags (bfd *output_bfd, + struct bfd_link_info *info, + bfd_boolean need_dynamic_reloc) +{ + struct elf_link_hash_table *htab = elf_hash_table (info); + return (_bfd_elf_add_dynamic_tags (output_bfd, info, + need_dynamic_reloc) + && (!htab->dynamic_sections_created + || htab->target_os != is_vxworks + || elf_vxworks_add_dynamic_entries (output_bfd, info))); +} diff -Nru gdb-9.1/bfd/elf-vxworks.h gdb-10.2/bfd/elf-vxworks.h --- gdb-9.1/bfd/elf-vxworks.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elf-vxworks.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* VxWorks support for ELF - Copyright (C) 2005-2019 Free Software Foundation, Inc. + Copyright (C) 2005-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -33,4 +33,5 @@ (bfd *, struct bfd_link_info *, asection **); bfd_boolean elf_vxworks_add_dynamic_entries (bfd *, struct bfd_link_info *); bfd_boolean elf_vxworks_finish_dynamic_entry (bfd *, Elf_Internal_Dyn *); - +bfd_boolean _bfd_elf_maybe_vxworks_add_dynamic_tags + (bfd *, struct bfd_link_info *, bfd_boolean); diff -Nru gdb-9.1/bfd/elfxx-aarch64.c gdb-10.2/bfd/elfxx-aarch64.c --- gdb-9.1/bfd/elfxx-aarch64.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elfxx-aarch64.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* AArch64-specific support for ELF. - Copyright (C) 2009-2019 Free Software Foundation, Inc. + Copyright (C) 2009-2020 Free Software Foundation, Inc. Contributed by ARM Ltd. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/elfxx-aarch64.h gdb-10.2/bfd/elfxx-aarch64.h --- gdb-9.1/bfd/elfxx-aarch64.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elfxx-aarch64.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* AArch64-specific backend routines. - Copyright (C) 2009-2019 Free Software Foundation, Inc. + Copyright (C) 2009-2020 Free Software Foundation, Inc. Contributed by ARM Ltd. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/elfxx-ia64.c gdb-10.2/bfd/elfxx-ia64.c --- gdb-9.1/bfd/elfxx-ia64.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elfxx-ia64.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* IA-64 support for 64-bit ELF - Copyright (C) 1998-2019 Free Software Foundation, Inc. + Copyright (C) 1998-2020 Free Software Foundation, Inc. Contributed by David Mosberger-Tang This file is part of BFD, the Binary File Descriptor library. @@ -685,7 +685,7 @@ slot 2: bits 23..63 in t1 */ /* First, clear the bits that form the 64 bit constant. */ - t0 &= ~(0x3ffffLL << 46); + t0 &= ~(0x3ffffULL << 46); t1 &= ~(0x7fffffLL | (( (0x07fLL << 13) | (0x1ffLL << 27) | (0x01fLL << 22) | (0x001LL << 21) @@ -714,7 +714,7 @@ slot 2: bits 23..63 in t1 */ /* First, clear the bits that form the 64 bit constant. */ - t0 &= ~(0x3ffffLL << 46); + t0 &= ~(0x3ffffULL << 46); t1 &= ~(0x7fffffLL | ((1LL << 36 | 0xfffffLL << 13) << 23)); @@ -744,7 +744,7 @@ if (err) return bfd_reloc_overflow; - dword &= ~(0x1ffffffffffLL << shift); + dword &= ~(0x1ffffffffffULL << shift); dword |= (insn << shift); bfd_putl64 (dword, hit_addr); break; diff -Nru gdb-9.1/bfd/elfxx-ia64.h gdb-10.2/bfd/elfxx-ia64.h --- gdb-9.1/bfd/elfxx-ia64.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elfxx-ia64.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* IA-64 support for 64-bit ELF - Copyright (C) 1998-2019 Free Software Foundation, Inc. + Copyright (C) 1998-2020 Free Software Foundation, Inc. Contributed by David Mosberger-Tang This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/elfxx-mips.c gdb-10.2/bfd/elfxx-mips.c --- gdb-9.1/bfd/elfxx-mips.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elfxx-mips.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* MIPS-specific support for ELF - Copyright (C) 1993-2019 Free Software Foundation, Inc. + Copyright (C) 1993-2020 Free Software Foundation, Inc. Most of the information added by Ian Lance Taylor, Cygnus Support, . @@ -462,9 +462,6 @@ /* True if we are targetting R6 compact branches. */ bfd_boolean compact_branches; - /* True if we're generating code for VxWorks. */ - bfd_boolean is_vxworks; - /* True if we already reported the small-data section overflow. */ bfd_boolean small_data_overflow_reported; @@ -530,9 +527,6 @@ returns null. */ asection *(*add_stub_section) (const char *, asection *, asection *); - /* Small local sym cache. */ - struct sym_cache sym_cache; - /* Is the PLT header compressed? */ unsigned int plt_header_is_comp : 1; }; @@ -540,8 +534,9 @@ /* Get the MIPS ELF linker hash table from a link_info structure. */ #define mips_elf_hash_table(p) \ - (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \ - == MIPS_ELF_DATA ? ((struct mips_elf_link_hash_table *) ((p)->hash)) : NULL) + ((is_elf_hash_table ((p)->hash) \ + && elf_hash_table_id (elf_hash_table (p)) == MIPS_ELF_DATA) \ + ? (struct mips_elf_link_hash_table *) (p)->hash : NULL) /* A structure used to communicate with htab_traverse callbacks. */ struct mips_htab_traverse_info @@ -703,13 +698,13 @@ /* These are the constants used to swap the bitfields in a crinfo. */ -#define CRINFO_CTYPE (0x1) +#define CRINFO_CTYPE (0x1U) #define CRINFO_CTYPE_SH (31) -#define CRINFO_RTYPE (0xf) +#define CRINFO_RTYPE (0xfU) #define CRINFO_RTYPE_SH (27) -#define CRINFO_DIST2TO (0xff) +#define CRINFO_DIST2TO (0xffU) #define CRINFO_DIST2TO_SH (19) -#define CRINFO_RELVADDR (0x7ffff) +#define CRINFO_RELVADDR (0x7ffffU) #define CRINFO_RELVADDR_SH (0) /* A compact relocation info has long (3 words) or short (2 words) @@ -904,7 +899,8 @@ /* The name of the dynamic relocation section. */ #define MIPS_ELF_REL_DYN_NAME(INFO) \ - (mips_elf_hash_table (INFO)->is_vxworks ? ".rela.dyn" : ".rel.dyn") + (mips_elf_hash_table (INFO)->root.target_os == is_vxworks \ + ? ".rela.dyn" : ".rel.dyn") /* In case we're on a 32-bit machine, construct a 64-bit "-1" value from smaller values. Start with zero, widen, *then* decrement. */ @@ -919,7 +915,8 @@ /* The offset of $gp from the beginning of the .got section. */ #define ELF_MIPS_GP_OFFSET(INFO) \ - (mips_elf_hash_table (INFO)->is_vxworks ? 0x0 : 0x7ff0) + (mips_elf_hash_table (INFO)->root.target_os == is_vxworks \ + ? 0x0 : 0x7ff0) /* The maximum size of the GOT for it to be addressable using 16-bit offsets from $gp. */ @@ -1374,7 +1371,7 @@ if (!sec->used_by_bfd) { struct _mips_elf_section_data *sdata; - bfd_size_type amt = sizeof (*sdata); + size_t amt = sizeof (*sdata); sdata = bfd_zalloc (abfd, amt); if (sdata == NULL) @@ -1413,18 +1410,23 @@ /* The symbolic header contains absolute file offsets and sizes to read. */ #define READ(ptr, offset, count, size, type) \ - if (symhdr->count == 0) \ - debug->ptr = NULL; \ - else \ + do \ { \ - bfd_size_type amt = (bfd_size_type) size * symhdr->count; \ - debug->ptr = bfd_malloc (amt); \ - if (debug->ptr == NULL) \ + size_t amt; \ + debug->ptr = NULL; \ + if (symhdr->count == 0) \ + break; \ + if (_bfd_mul_overflow (size, symhdr->count, &amt)) \ + { \ + bfd_set_error (bfd_error_file_too_big); \ + goto error_return; \ + } \ + if (bfd_seek (abfd, symhdr->offset, SEEK_SET) != 0) \ goto error_return; \ - if (bfd_seek (abfd, symhdr->offset, SEEK_SET) != 0 \ - || bfd_bread (debug->ptr, amt, abfd) != amt) \ + debug->ptr = (type) _bfd_malloc_and_read (abfd, amt, amt); \ + if (debug->ptr == NULL) \ goto error_return; \ - } + } while (0) READ (line, cbLineOffset, cbLine, sizeof (unsigned char), unsigned char *); READ (external_dnr, cbDnOffset, idnMax, swap->external_dnr_size, void *); @@ -1445,30 +1447,18 @@ return TRUE; error_return: - if (ext_hdr != NULL) - free (ext_hdr); - if (debug->line != NULL) - free (debug->line); - if (debug->external_dnr != NULL) - free (debug->external_dnr); - if (debug->external_pdr != NULL) - free (debug->external_pdr); - if (debug->external_sym != NULL) - free (debug->external_sym); - if (debug->external_opt != NULL) - free (debug->external_opt); - if (debug->external_aux != NULL) - free (debug->external_aux); - if (debug->ss != NULL) - free (debug->ss); - if (debug->ssext != NULL) - free (debug->ssext); - if (debug->external_fdr != NULL) - free (debug->external_fdr); - if (debug->external_rfd != NULL) - free (debug->external_rfd); - if (debug->external_ext != NULL) - free (debug->external_ext); + free (ext_hdr); + free (debug->line); + free (debug->external_dnr); + free (debug->external_pdr); + free (debug->external_sym); + free (debug->external_opt); + free (debug->external_aux); + free (debug->ss); + free (debug->ssext); + free (debug->external_fdr); + free (debug->external_rfd); + free (debug->external_ext); return FALSE; } @@ -1613,30 +1603,19 @@ matters, but someday it might). */ s->map_head.link_order = NULL; - if (epdr != NULL) - free (epdr); - if (rpdr != NULL) - free (rpdr); - if (esym != NULL) - free (esym); - if (ss != NULL) - free (ss); - if (sv != NULL) - free (sv); - + free (epdr); + free (rpdr); + free (esym); + free (ss); + free (sv); return TRUE; error_return: - if (epdr != NULL) - free (epdr); - if (rpdr != NULL) - free (rpdr); - if (esym != NULL) - free (esym); - if (ss != NULL) - free (ss); - if (sv != NULL) - free (sv); + free (epdr); + free (rpdr); + free (esym); + free (ss); + free (sv); return FALSE; } @@ -3839,7 +3818,7 @@ MIPS_ELF_PUT_WORD (abfd, value, htab->root.sgot->contents + entry->gotidx); /* These GOT entries need a dynamic relocation on VxWorks. */ - if (htab->is_vxworks) + if (htab->root.target_os == is_vxworks) { Elf_Internal_Rela outrel; asection *s; @@ -4184,7 +4163,7 @@ s = mips_elf_rel_dyn_section (info, FALSE); BFD_ASSERT (s != NULL); - if (htab->is_vxworks) + if (htab->root.target_os == is_vxworks) s->size += n * MIPS_ELF_RELA_SIZE (abfd); else { @@ -4420,7 +4399,7 @@ Elf_Internal_Sym *isym; /* Read in the symbol. */ - isym = bfd_sym_from_r_symndx (&htab->sym_cache, ref->u.abfd, + isym = bfd_sym_from_r_symndx (&htab->root.sym_cache, ref->u.abfd, ref->symndx); if (isym == NULL) { @@ -4570,7 +4549,7 @@ entry if it was only used for relocations; those relocations will be against the null or section symbol instead of H. */ h->global_got_area = GGA_NONE; - else if (htab->is_vxworks + else if (htab->root.target_os == is_vxworks && h->got_only_for_calls && h->root.plt.plist->mips_offset != MINUS_ONE) /* On VxWorks, calls can refer directly to the .got.plt entry; @@ -5284,7 +5263,7 @@ static bfd_boolean is_gott_symbol (struct bfd_link_info *info, struct elf_link_hash_entry *h) { - return (mips_elf_hash_table (info)->is_vxworks + return (mips_elf_hash_table (info)->root.target_os == is_vxworks && bfd_link_pic (info) && (strcmp (h->root.root.string, "__GOTT_BASE__") == 0 || strcmp (h->root.root.string, "__GOTT_INDEX__") == 0)); @@ -5388,7 +5367,7 @@ if (mips16_reloc_p (r_type) && (((x >> 22) & 0x3ff) == 0x3d3 /* LW */ || ((x >> 22) & 0x3ff) == 0x3c7)) /* LD */ - x = (0x3cd << 22) | (x & (7 << 16)) << 3; /* LI */ + x = (0x3cdU << 22) | (x & (7 << 16)) << 3; /* LI */ else if (micromips_reloc_p (r_type) && ((x >> 26) & 0x37) == 0x37) /* LW/LD */ x = (0xc << 26) | (x & (0x1f << 21)); /* ADDIU */ @@ -5644,11 +5623,12 @@ } else { - bfd_boolean reject_undefined - = (info->unresolved_syms_in_objects == RM_GENERATE_ERROR - || ELF_ST_VISIBILITY (h->root.other) != STV_DEFAULT); + bfd_boolean reject_undefined + = (info->unresolved_syms_in_objects == RM_DIAGNOSE + && !info->warn_unresolved_syms) + || ELF_ST_VISIBILITY (h->root.other) != STV_DEFAULT; - (*info->callbacks->undefined_symbol) + info->callbacks->undefined_symbol (info, h->root.root.root.string, input_bfd, input_section, relocation->r_offset, reject_undefined); @@ -5921,7 +5901,7 @@ { /* On VxWorks, CALL relocations should refer to the .got.plt entry, which is initialized to point at the PLT stub. */ - if (htab->is_vxworks + if (htab->root.target_os == is_vxworks && (call_hi16_reloc_p (r_type) || call_lo16_reloc_p (r_type) || call16_reloc_p (r_type))) @@ -5941,7 +5921,7 @@ MIPS_ELF_PUT_WORD (dynobj, symbol, htab->root.sgot->contents + g); } } - else if (!htab->is_vxworks + else if (htab->root.target_os != is_vxworks && (call16_reloc_p (r_type) || got16_reloc_p (r_type))) /* The calculation below does not involve "g". */ break; @@ -6223,7 +6203,7 @@ case R_MICROMIPS_CALL16: /* VxWorks does not have separate local and global semantics for R_MIPS*_GOT16; every relocation evaluates to "G". */ - if (!htab->is_vxworks && local_p) + if (htab->root.target_os != is_vxworks && local_p) { value = mips_elf_got16_entry (abfd, input_bfd, info, symbol + addend, !was_local_p); @@ -6602,7 +6582,7 @@ } /* Make this the JALX opcode. */ - x = (x & ~(0x3f << 26)) | (jalx_opcode << 26); + x = (x & ~(0x3fu << 26)) | (jalx_opcode << 26); } else if (cross_mode_jump_p && b_reloc_p (r_type)) { @@ -6762,7 +6742,8 @@ in the relocation. */ if (h != NULL && ! SYMBOL_REFERENCES_LOCAL (info, &h->root)) { - BFD_ASSERT (htab->is_vxworks || h->global_got_area != GGA_NONE); + BFD_ASSERT (htab->root.target_os == is_vxworks + || h->global_got_area != GGA_NONE); indx = h->root.dynindx; if (SGI_COMPAT (output_bfd)) defined_p = h->root.def_regular; @@ -6821,7 +6802,7 @@ if (defined_p && r_type != R_MIPS_REL32) *addendp += symbol; - if (htab->is_vxworks) + if (htab->root.target_os == is_vxworks) /* VxWorks uses non-relative relocations for this. */ outrel[0].r_info = ELF32_R_INFO (indx, R_MIPS_32); else @@ -6867,7 +6848,7 @@ (sreloc->contents + sreloc->reloc_count * sizeof (Elf64_Mips_External_Rel))); } - else if (htab->is_vxworks) + else if (htab->root.target_os == is_vxworks) { /* VxWorks uses RELA rather than REL dynamic relocations. */ outrel[0].r_addend = *addendp; @@ -7133,7 +7114,7 @@ { /* Initialize the small common section. */ mips_elf_scom_section.name = ".scommon"; - mips_elf_scom_section.flags = SEC_IS_COMMON; + mips_elf_scom_section.flags = SEC_IS_COMMON | SEC_SMALL_DATA; mips_elf_scom_section.output_section = &mips_elf_scom_section; mips_elf_scom_section.symbol = &mips_elf_scom_symbol; mips_elf_scom_section.symbol_ptr_ptr = &mips_elf_scom_symbol_ptr; @@ -7279,7 +7260,7 @@ bfd_boolean _bfd_mips_elf_name_local_section_symbols (bfd *abfd) { - return SGI_COMPAT (abfd); + return elf_elfheader (abfd)->e_type == ET_REL && SGI_COMPAT (abfd); } /* Work over a section just before writing it out. This routine is @@ -7420,10 +7401,7 @@ /* Handle a MIPS specific section when reading an object file. This is called when elfcode.h finds a section with an unknown type. - This routine supports both the 32-bit and 64-bit ELF ABI. - - FIXME: We need to handle the SHF_MIPS_GPREL flag, but I'm not sure - how to. */ + This routine supports both the 32-bit and 64-bit ELF ABI. */ bfd_boolean _bfd_mips_elf_section_from_shdr (bfd *abfd, @@ -7512,6 +7490,9 @@ if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex)) return FALSE; + if (hdr->sh_flags & SHF_MIPS_GPREL) + flags |= SEC_SMALL_DATA; + if (flags) { if (!bfd_set_section_flags (hdr->bfd_section, @@ -7820,7 +7801,7 @@ /* Fall through. */ case SHN_MIPS_SCOMMON: *secp = bfd_make_section_old_way (abfd, ".scommon"); - (*secp)->flags |= SEC_IS_COMMON; + (*secp)->flags |= SEC_IS_COMMON | SEC_SMALL_DATA; *valp = sym->st_size; break; @@ -7830,7 +7811,7 @@ { asymbol *elf_text_symbol; asection *elf_text_section; - bfd_size_type amt = sizeof (asection); + size_t amt = sizeof (asection); elf_text_section = bfd_zalloc (abfd, amt); if (elf_text_section == NULL) @@ -7871,7 +7852,7 @@ { asymbol *elf_data_symbol; asection *elf_data_section; - bfd_size_type amt = sizeof (asection); + size_t amt = sizeof (asection); elf_data_section = bfd_zalloc (abfd, amt); if (elf_data_section == NULL) @@ -7990,7 +7971,7 @@ /* The psABI requires a read-only .dynamic section, but the VxWorks EABI doesn't. */ - if (!htab->is_vxworks) + if (htab->root.target_os != is_vxworks) { s = bfd_get_linker_section (abfd, ".dynamic"); if (s != NULL) @@ -8138,7 +8119,7 @@ return FALSE; /* Do the usual VxWorks handling. */ - if (htab->is_vxworks + if (htab->root.target_os == is_vxworks && !elf_vxworks_create_dynamic_sections (abfd, info, &htab->srelplt2)) return FALSE; @@ -8671,10 +8652,8 @@ call_reloc_p = FALSE; /* Set CONSTRAIN_SYMBOL_P if we need to take the relocation - into account when deciding how to define the symbol. - Relocations in nonallocatable sections such as .pdr and - .debug* should have no effect. */ - constrain_symbol_p = ((sec->flags & SEC_ALLOC) != 0); + into account when deciding how to define the symbol. */ + constrain_symbol_p = TRUE; switch (r_type) { @@ -8742,7 +8721,8 @@ elf_hash_table (info)->dynobj = dynobj = abfd; if (!mips_elf_create_got_section (dynobj, info)) return FALSE; - if (htab->is_vxworks && !bfd_link_pic (info)) + if (htab->root.target_os == is_vxworks + && !bfd_link_pic (info)) { _bfd_error_handler /* xgettext:c-format */ @@ -8788,7 +8768,7 @@ against a read-only section. */ if ((bfd_link_pic (info) || (h != NULL - && !htab->is_vxworks + && htab->root.target_os != is_vxworks && strcmp (h->root.root.string, "__gnu_local_gp") != 0 && !(!info->nocopyreloc && !PIC_OBJECT_P (abfd) @@ -8830,7 +8810,8 @@ relocations related to taking the function's address. This doesn't apply to VxWorks, where CALL relocs refer to a .got.plt entry instead of a normal .got entry. */ - if (!htab->is_vxworks && (!can_make_dynamic_p || !call_reloc_p)) + if (htab->root.target_os != is_vxworks + && (!can_make_dynamic_p || !call_reloc_p)) ((struct mips_elf_link_hash_entry *) h)->no_fn_stub = TRUE; } @@ -8855,7 +8836,8 @@ else if (call_lo16_reloc_p (r_type) || got_lo16_reloc_p (r_type) || got_disp_reloc_p (r_type) - || (got16_reloc_p (r_type) && htab->is_vxworks)) + || (got16_reloc_p (r_type) + && htab->root.target_os == is_vxworks)) { /* We may need a local GOT entry for this relocation. We don't count R_MIPS_GOT_PAGE because we can estimate the @@ -9219,7 +9201,7 @@ /* VxWorks executables are handled elsewhere; we only need to allocate relocations in shared objects. */ - if (htab->is_vxworks && !bfd_link_pic (info)) + if (htab->root.target_os == is_vxworks && !bfd_link_pic (info)) return TRUE; /* Ignore indirect symbols. All relocations against such symbols @@ -9264,7 +9246,7 @@ VxWorks does not enforce the same mapping between the GOT and the symbol table, so the same requirement does not apply there. */ - if (!htab->is_vxworks) + if (htab->root.target_os != is_vxworks) { if (hmips->global_got_area > GGA_RELOC_ONLY) hmips->global_got_area = GGA_RELOC_ONLY; @@ -9305,12 +9287,21 @@ hmips = (struct mips_elf_link_hash_entry *) h; /* Make sure we know what is going on here. */ - BFD_ASSERT (dynobj != NULL - && (h->needs_plt - || h->is_weakalias - || (h->def_dynamic - && h->ref_regular - && !h->def_regular))); + if (dynobj == NULL + || (! h->needs_plt + && ! h->is_weakalias + && (! h->def_dynamic + || ! h->ref_regular + || h->def_regular))) + { + if (h->type == STT_GNU_IFUNC) + _bfd_error_handler (_("IFUNC symbol %s in dynamic symbol table - IFUNCS are not supported"), + h->root.root.string); + else + _bfd_error_handler (_("non-dynamic symbol %s in dynamic symbol table"), + h->root.root.string); + return TRUE; + } hmips = (struct mips_elf_link_hash_entry *) h; @@ -9322,7 +9313,9 @@ Traditional stubs are only available on SVR4 psABI-based systems; VxWorks always uses PLTs instead. */ - if (!htab->is_vxworks && h->needs_plt && !hmips->no_fn_stub) + if (htab->root.target_os != is_vxworks + && h->needs_plt + && !hmips->no_fn_stub) { if (! elf_hash_table (info)->dynamic_sections_created) return TRUE; @@ -9371,7 +9364,7 @@ entry is 16 bytes and the PLT0 entry is 32 bytes. Encourage better cache usage by aligning. We do this lazily to avoid pessimizing traditional objects. */ - if (!htab->is_vxworks + if (htab->root.target_os != is_vxworks && !bfd_set_section_alignment (htab->root.splt, 5)) return FALSE; @@ -9383,21 +9376,23 @@ /* On non-VxWorks targets, the first two entries in .got.plt are reserved. */ - if (!htab->is_vxworks) + if (htab->root.target_os != is_vxworks) htab->plt_got_index += (get_elf_backend_data (dynobj)->got_header_size / MIPS_ELF_GOT_SIZE (dynobj)); /* On VxWorks, also allocate room for the header's .rela.plt.unloaded entries. */ - if (htab->is_vxworks && !bfd_link_pic (info)) + if (htab->root.target_os == is_vxworks + && !bfd_link_pic (info)) htab->srelplt2->size += 2 * sizeof (Elf32_External_Rela); /* Now work out the sizes of individual PLT entries. */ - if (htab->is_vxworks && bfd_link_pic (info)) + if (htab->root.target_os == is_vxworks + && bfd_link_pic (info)) htab->plt_mips_entry_size = 4 * ARRAY_SIZE (mips_vxworks_shared_plt_entry); - else if (htab->is_vxworks) + else if (htab->root.target_os == is_vxworks) htab->plt_mips_entry_size = 4 * ARRAY_SIZE (mips_vxworks_exec_plt_entry); else if (newabi_p) @@ -9440,7 +9435,7 @@ standard entry actually has to be used as the stub ends with a J instruction. */ if (newabi_p - || htab->is_vxworks + || htab->root.target_os == is_vxworks || hmips->call_stub || hmips->call_fp_stub) { @@ -9482,12 +9477,12 @@ hmips->use_plt_entry = TRUE; /* Make room for the R_MIPS_JUMP_SLOT relocation. */ - htab->root.srelplt->size += (htab->is_vxworks + htab->root.srelplt->size += (htab->root.target_os == is_vxworks ? MIPS_ELF_RELA_SIZE (dynobj) : MIPS_ELF_REL_SIZE (dynobj)); /* Make room for the .rela.plt.unloaded relocations. */ - if (htab->is_vxworks && !bfd_link_pic (info)) + if (htab->root.target_os == is_vxworks && !bfd_link_pic (info)) htab->srelplt2->size += 3 * sizeof (Elf32_External_Rela); /* All relocations against this symbol that could have been made @@ -9552,7 +9547,7 @@ } if ((h->root.u.def.section->flags & SEC_ALLOC) != 0) { - if (htab->is_vxworks) + if (htab->root.target_os == is_vxworks) srel->size += sizeof (Elf32_External_Rela); else mips_elf_allocate_dynamic_relocations (dynobj, info, 1); @@ -9635,7 +9630,7 @@ /* Allocate room for the reserved entries. VxWorks always reserves 3 entries; other objects only reserve 2 entries. */ BFD_ASSERT (g->assigned_low_gotno == 0); - if (htab->is_vxworks) + if (htab->root.target_os == is_vxworks) htab->reserved_gotno = 3; else htab->reserved_gotno = 2; @@ -9667,7 +9662,7 @@ } } - if (htab->is_vxworks) + if (htab->root.target_os == is_vxworks) /* There's no need to allocate page entries for VxWorks; R_MIPS*_GOT16 relocations against local symbols evaluate to "G", and the EABI does not include R_MIPS_GOT_PAGE. */ @@ -9692,7 +9687,8 @@ /* VxWorks does not support multiple GOTs. It initializes $gp to __GOTT_BASE__[__GOTT_INDEX__], the value of which is set by the dynamic loader. */ - if (!htab->is_vxworks && s->size > MIPS_ELF_GOT_MAX_SIZE (info)) + if (htab->root.target_os != is_vxworks + && s->size > MIPS_ELF_GOT_MAX_SIZE (info)) { if (!mips_elf_multi_got (output_bfd, info, s, page_gotno)) return FALSE; @@ -9718,7 +9714,7 @@ == g->global_gotno + g->local_gotno + g->tls_gotno); /* Each VxWorks GOT entry needs an explicit relocation. */ - if (htab->is_vxworks && bfd_link_pic (info)) + if (htab->root.target_os == is_vxworks && bfd_link_pic (info)) g->relocs += g->global_gotno + g->local_gotno - htab->reserved_gotno; /* Allocate room for the TLS relocations. */ @@ -9900,7 +9896,7 @@ /* For VxWorks, point at the PLT load stub rather than the lazy resolution stub; this stub will become the canonical function address. */ - if (htab->is_vxworks) + if (htab->root.target_os == is_vxworks) val += 8; h->root.root.u.def.section = htab->root.splt; @@ -9965,9 +9961,9 @@ BFD_ASSERT (htab->root.sgotplt->size == 0); BFD_ASSERT (htab->root.splt->size == 0); - if (htab->is_vxworks && bfd_link_pic (info)) + if (htab->root.target_os == is_vxworks && bfd_link_pic (info)) size = 4 * ARRAY_SIZE (mips_vxworks_shared_plt0_entry); - else if (htab->is_vxworks) + else if (htab->root.target_os == is_vxworks) size = 4 * ARRAY_SIZE (mips_vxworks_exec_plt0_entry); else if (ABI_64_P (output_bfd)) size = 4 * ARRAY_SIZE (mips_n64_exec_plt0_entry); @@ -10083,7 +10079,8 @@ room for an extra nop to fill the delay slot. This is for CPUs without load interlocking. */ if (! LOAD_INTERLOCKS_P (output_bfd) - && ! htab->is_vxworks && s->size > 0) + && htab->root.target_os != is_vxworks + && s->size > 0) s->size += 4; } else if (! CONST_STRNEQ (name, ".init") @@ -10141,7 +10138,9 @@ && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_DEBUG, 0)) return FALSE; - if (reltext && (SGI_COMPAT (output_bfd) || htab->is_vxworks)) + if (reltext + && (SGI_COMPAT (output_bfd) + || htab->root.target_os == is_vxworks)) info->flags |= DF_TEXTREL; if ((info->flags & DF_TEXTREL) != 0) @@ -10160,7 +10159,7 @@ return FALSE; sreldyn = mips_elf_rel_dyn_section (info, FALSE); - if (htab->is_vxworks) + if (htab->root.target_os == is_vxworks) { /* VxWorks uses .rela.dyn instead of .rel.dyn. It does not use any of the DT_MIPS_* tags. */ @@ -10240,7 +10239,7 @@ if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_PLTGOT, 0)) return FALSE; } - if (htab->is_vxworks + if (htab->root.target_os == is_vxworks && !elf_vxworks_add_dynamic_entries (output_bfd, info)) return FALSE; } @@ -10882,7 +10881,7 @@ dynobj = elf_hash_table (info)->dynobj; hmips = (struct mips_elf_link_hash_entry *) h; - BFD_ASSERT (!htab->is_vxworks); + BFD_ASSERT (htab->root.target_os != is_vxworks); if (h->plt.plist != NULL && (h->plt.plist->mips_offset != MINUS_ONE @@ -11818,7 +11817,7 @@ break; case DT_RELAENT: - BFD_ASSERT (htab->is_vxworks); + BFD_ASSERT (htab->root.target_os == is_vxworks); dyn.d_un.d_val = MIPS_ELF_RELA_SIZE (dynobj); break; @@ -11957,7 +11956,7 @@ case DT_PLTREL: BFD_ASSERT (htab->use_plts_and_copy_relocs); - if (htab->is_vxworks) + if (htab->root.target_os == is_vxworks) dyn.d_un.d_val = DT_RELA; else dyn.d_un.d_val = DT_REL; @@ -12001,7 +12000,7 @@ default: swap_out_p = FALSE; - if (htab->is_vxworks + if (htab->root.target_os == is_vxworks && elf_vxworks_finish_dynamic_entry (output_bfd, &dyn)) swap_out_p = TRUE; break; @@ -12026,7 +12025,7 @@ if (sgot != NULL && sgot->size > 0 && !bfd_is_abs_section (sgot->output_section)) { - if (htab->is_vxworks) + if (htab->root.target_os == is_vxworks) { /* The first entry of the global offset table points to the ".dynamic" section. The second is initialized by the @@ -12173,7 +12172,8 @@ s->contents)); /* Clean up a dummy stub function entry in .text. */ - if (htab->sstubs != NULL) + if (htab->sstubs != NULL + && htab->sstubs->contents != NULL) { file_ptr dummy_offset; @@ -12189,7 +12189,7 @@ increasing order of r_symndx. The VxWorks EABI doesn't require this, and because the code below handles REL rather than RELA relocations, using it for VxWorks would be outright harmful. */ - if (!htab->is_vxworks) + if (htab->root.target_os != is_vxworks) { s = mips_elf_rel_dyn_section (info, FALSE); if (s != NULL @@ -12211,7 +12211,7 @@ if (htab->root.splt && htab->root.splt->size > 0) { - if (htab->is_vxworks) + if (htab->root.target_os == is_vxworks) { if (bfd_link_pic (info)) mips_vxworks_finish_shared_plt (output_bfd, info); @@ -12549,7 +12549,7 @@ { asection *s; struct elf_segment_map *m, **pm; - bfd_size_type amt; + size_t amt; /* If there is a .reginfo section, we need a PT_MIPS_REGINFO segment. */ @@ -12752,7 +12752,7 @@ && s->vma + s->size <= high) ++c; - amt = sizeof *n + (bfd_size_type) (c - 1) * sizeof (asection *); + amt = sizeof *n - sizeof (asection *) + c * sizeof (asection *); n = bfd_zalloc (abfd, amt); if (n == NULL) return FALSE; @@ -13203,7 +13203,7 @@ if (elf_section_data (section) == NULL) { - bfd_size_type amt = sizeof (struct bfd_elf_section_data); + size_t amt = sizeof (struct bfd_elf_section_data); section->used_by_bfd = bfd_zalloc (abfd, amt); if (elf_section_data (section) == NULL) return FALSE; @@ -13376,13 +13376,11 @@ } } } - if (reloc_vector != NULL) - free (reloc_vector); + free (reloc_vector); return data; -error_return: - if (reloc_vector != NULL) - free (reloc_vector); + error_return: + free (reloc_vector); return NULL; } @@ -14259,21 +14257,17 @@ } } - if (internal_relocs != NULL - && elf_section_data (sec)->relocs != internal_relocs) + if (elf_section_data (sec)->relocs != internal_relocs) free (internal_relocs); return TRUE; error_return: - if (isymbuf != NULL - && symtab_hdr->contents != (unsigned char *) isymbuf) + if (symtab_hdr->contents != (unsigned char *) isymbuf) free (isymbuf); - if (contents != NULL - && elf_section_data (sec)->this_hdr.contents != contents) + if (elf_section_data (sec)->this_hdr.contents != contents) free (contents); - if (internal_relocs != NULL - && elf_section_data (sec)->relocs != internal_relocs) + if (elf_section_data (sec)->relocs != internal_relocs) free (internal_relocs); return FALSE; @@ -14285,7 +14279,7 @@ _bfd_mips_elf_link_hash_table_create (bfd *abfd) { struct mips_elf_link_hash_table *ret; - bfd_size_type amt = sizeof (struct mips_elf_link_hash_table); + size_t amt = sizeof (struct mips_elf_link_hash_table); ret = bfd_zmalloc (amt); if (ret == NULL) @@ -14319,7 +14313,6 @@ htab = (struct mips_elf_link_hash_table *) ret; htab->use_plts_and_copy_relocs = TRUE; - htab->is_vxworks = TRUE; } return ret; } @@ -14698,7 +14691,7 @@ elf_gp (abfd) = (h->u.def.value + h->u.def.section->output_section->vma + h->u.def.section->output_offset); - else if (htab->is_vxworks + else if (htab->root.target_os == is_vxworks && (h = bfd_link_hash_lookup (info->hash, "_GLOBAL_OFFSET_TABLE_", FALSE, FALSE, TRUE)) @@ -15752,6 +15745,7 @@ /* Check to see if the input BFD actually contains any sections. If not, then it has no attributes, and its flags may not have been initialized either, but it cannot actually cause any incompatibility. */ + /* FIXME: This excludes any input shared library from consideration. */ for (sec = ibfd->sections; sec != NULL; sec = sec->next) { /* Ignore synthetic sections and empty .text, .data and .bss sections @@ -16652,7 +16646,9 @@ BFD_ASSERT (htab != NULL); } - if (htab != NULL && htab->use_plts_and_copy_relocs && !htab->is_vxworks) + if (htab != NULL + && htab->use_plts_and_copy_relocs + && htab->root.target_os != is_vxworks) i_ehdrp->e_ident[EI_ABIVERSION] = MIPS_LIBC_ABI_MIPS_PLT; if (mips_elf_tdata (abfd)->abiflags.fp_abi == Val_GNU_MIPS_ABI_FP_64 diff -Nru gdb-9.1/bfd/elfxx-mips.h gdb-10.2/bfd/elfxx-mips.h --- gdb-9.1/bfd/elfxx-mips.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elfxx-mips.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* MIPS ELF specific backend routines. - Copyright (C) 2002-2019 Free Software Foundation, Inc. + Copyright (C) 2002-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/elfxx-riscv.c gdb-10.2/bfd/elfxx-riscv.c --- gdb-9.1/bfd/elfxx-riscv.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elfxx-riscv.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* RISC-V-specific support for ELF. - Copyright (C) 2011-2019 Free Software Foundation, Inc. + Copyright (C) 2011-2020 Free Software Foundation, Inc. Contributed by Andrew Waterman (andrew@sifive.com). Based on TILE-Gx and MIPS targets. @@ -25,7 +25,6 @@ #include "libbfd.h" #include "elf-bfd.h" #include "elf/riscv.h" -#include "opcode/riscv.h" #include "libiberty.h" #include "elfxx-riscv.h" #include "safe-ctype.h" @@ -1025,9 +1024,8 @@ `minor_version`: Parsing result of minor version, set to 0 if version is not present in arch string, but set to `default_minor_version` if `major_version` using default_major_version. - `default_major_version`: Default major version. - `default_minor_version`: Default minor version. - `std_ext_p`: True if parsing std extension. */ + `std_ext_p`: True if parsing std extension. + `use_default_version`: Set it to True if we need the default version. */ static const char * riscv_parsing_subset_version (riscv_parse_subset_t *rps, @@ -1035,17 +1033,16 @@ const char *p, unsigned *major_version, unsigned *minor_version, - unsigned default_major_version, - unsigned default_minor_version, - bfd_boolean std_ext_p) + bfd_boolean std_ext_p, + bfd_boolean *use_default_version) { bfd_boolean major_p = TRUE; unsigned version = 0; - unsigned major = 0; - unsigned minor = 0; char np; - for (;*p; ++p) + *major_version = 0; + *minor_version = 0; + for (; *p; ++p) { if (*p == 'p') { @@ -1062,13 +1059,14 @@ } else { - rps->error_handler ("-march=%s: Expect number after `%dp'.", - march, version); + rps->error_handler + (_("-march=%s: Expect number after `%dp'."), + march, version); return NULL; } } - major = version; + *major_version = version; major_p = FALSE; version = 0; } @@ -1079,21 +1077,15 @@ } if (major_p) - major = version; + *major_version = version; else - minor = version; + *minor_version = version; - if (major == 0 && minor == 0) - { - /* We don't found any version string, use default version. */ - *major_version = default_major_version; - *minor_version = default_minor_version; - } - else - { - *major_version = major; - *minor_version = minor; - } + /* We can not find any version in string, need to parse default version. */ + if (use_default_version != NULL + && *major_version == 0 + && *minor_version == 0) + *use_default_version = TRUE; return p; } @@ -1118,82 +1110,118 @@ static const char * riscv_parse_std_ext (riscv_parse_subset_t *rps, - const char *march, const char *p) + const char *march, + const char *p) { const char *all_std_exts = riscv_supported_std_ext (); const char *std_exts = all_std_exts; - unsigned major_version = 0; unsigned minor_version = 0; char std_ext = '\0'; + bfd_boolean use_default_version = FALSE; /* First letter must start with i, e or g. */ switch (*p) { case 'i': - p++; - p = riscv_parsing_subset_version ( - rps, - march, - p, &major_version, &minor_version, - /* default_major_version= */ 2, - /* default_minor_version= */ 0, - /* std_ext_p= */TRUE); - riscv_add_subset (rps->subset_list, "i", major_version, minor_version); + p = riscv_parsing_subset_version (rps, + march, + ++p, + &major_version, + &minor_version, + /* std_ext_p= */TRUE, + &use_default_version); + + /* Find the default version if needed. */ + if (use_default_version + && rps->get_default_version != NULL) + rps->get_default_version ("i", + &major_version, + &minor_version); + riscv_add_subset (rps->subset_list, "i", + major_version, minor_version); break; case 'e': - p++; - p = riscv_parsing_subset_version ( - rps, - march, - p, &major_version, &minor_version, - /* default_major_version= */ 1, - /* default_minor_version= */ 9, - /* std_ext_p= */TRUE); - - riscv_add_subset (rps->subset_list, "e", major_version, minor_version); - riscv_add_subset (rps->subset_list, "i", 2, 0); + p = riscv_parsing_subset_version (rps, + march, + ++p, + &major_version, + &minor_version, + /* std_ext_p= */TRUE, + &use_default_version); + + /* Find the default version if needed. */ + if (use_default_version + && rps->get_default_version != NULL) + rps->get_default_version ("e", + &major_version, + &minor_version); + riscv_add_subset (rps->subset_list, "e", + major_version, minor_version); + + /* i-ext must be enabled. */ + if (rps->get_default_version != NULL) + rps->get_default_version ("i", + &major_version, + &minor_version); + riscv_add_subset (rps->subset_list, "i", + major_version, minor_version); if (*rps->xlen > 32) { - rps->error_handler ("-march=%s: rv%de is not a valid base ISA", - march, *rps->xlen); + rps->error_handler + (_("-march=%s: rv%de is not a valid base ISA"), + march, *rps->xlen); return NULL; } - break; case 'g': - p++; - p = riscv_parsing_subset_version ( - rps, - march, - p, &major_version, &minor_version, - /* default_major_version= */ 2, - /* default_minor_version= */ 0, - /* std_ext_p= */TRUE); - riscv_add_subset (rps->subset_list, "i", major_version, minor_version); + /* The g-ext shouldn't has the version, so we just + skip the setting if user set a version to it. */ + p = riscv_parsing_subset_version (rps, + march, + ++p, + &major_version, + &minor_version, + TRUE, + &use_default_version); + + /* i-ext must be enabled. */ + if (rps->get_default_version != NULL) + rps->get_default_version ("i", + &major_version, + &minor_version); + riscv_add_subset (rps->subset_list, "i", + major_version, minor_version); for ( ; *std_exts != 'q'; std_exts++) { const char subset[] = {*std_exts, '\0'}; - riscv_add_subset ( - rps->subset_list, subset, major_version, minor_version); + + if (rps->get_default_version != NULL) + rps->get_default_version (subset, + &major_version, + &minor_version); + riscv_add_subset (rps->subset_list, subset, + major_version, minor_version); } break; default: - rps->error_handler ( - "-march=%s: first ISA subset must be `e', `i' or `g'", march); + rps->error_handler + (_("-march=%s: first ISA subset must be `e', `i' or `g'"), march); return NULL; } - while (*p) + /* The riscv_parsing_subset_version may set `p` to NULL, so I think we should + skip parsing the string if `p` is NULL or value of `p` is `\0`. */ + while (p != NULL && *p != '\0') { char subset[2] = {0, 0}; - if (*p == 'x' || *p == 's') + if (*p == 'x' || *p == 's' || *p == 'z') break; if (*p == '_') @@ -1210,55 +1238,91 @@ if (std_ext != *std_exts) { if (strchr (all_std_exts, std_ext) == NULL) - rps->error_handler ( - "-march=%s: unsupported ISA subset `%c'", march, *p); + rps->error_handler + (_("-march=%s: unsupported ISA subset `%c'"), march, *p); else - rps->error_handler ( - "-march=%s: ISA string is not in canonical order. `%c'", - march, *p); + rps->error_handler + (_("-march=%s: ISA string is not in canonical order. `%c'"), + march, *p); return NULL; } std_exts++; - p++; - p = riscv_parsing_subset_version ( - rps, - march, - p, &major_version, &minor_version, - /* default_major_version= */ 2, - /* default_minor_version= */ 0, - /* std_ext_p= */TRUE); - + use_default_version = FALSE; subset[0] = std_ext; - - riscv_add_subset (rps->subset_list, subset, major_version, minor_version); + p = riscv_parsing_subset_version (rps, + march, + ++p, + &major_version, + &minor_version, + TRUE, + &use_default_version); + + /* Find the default version if needed. */ + if (use_default_version + && rps->get_default_version != NULL) + rps->get_default_version (subset, + &major_version, + &minor_version); + riscv_add_subset (rps->subset_list, subset, + major_version, minor_version); } return p; } -/* Parsing function for non-standard and supervisor extensions. +/* Classify the argument 'arch' into one of riscv_isa_ext_class_t. */ - Return Value: - Points to the end of extensions. +riscv_isa_ext_class_t +riscv_get_prefix_class (const char *arch) +{ + switch (*arch) + { + case 's': return RV_ISA_CLASS_S; + case 'x': return RV_ISA_CLASS_X; + case 'z': return RV_ISA_CLASS_Z; + default: return RV_ISA_CLASS_UNKNOWN; + } +} - Arguments: - `rps`: Hooks and status for parsing subset. - `march`: Full arch string. - `p`: Curent parsing position. - `ext_type`: What kind of extensions, 'x', 's' or 'sx'. - `ext_type_str`: Full name for kind of extension. */ +/* Structure describing parameters to use when parsing a particular + riscv_isa_ext_class_t. One of these should be provided for each + possible class, except RV_ISA_CLASS_UNKNOWN. */ + +typedef struct riscv_parse_config +{ + /* Class of the extension. */ + riscv_isa_ext_class_t class; + + /* Lower-case prefix string for error printing + and internal parser usage, e.g. "z", "x". */ + const char *prefix; + + /* Predicate which is used for checking whether + this is a "known" extension. For 'x', + it always returns true (since they are by + definition non-standard and cannot be known. */ + bfd_boolean (*ext_valid_p) (const char *); +} riscv_parse_config_t; + +/* Parse a generic prefixed extension. + `rps`: Hooks and status for parsing subset. + `march`: The full architecture string as passed in by "-march=...". + `p`: Point from which to start parsing the -march string. + `config`: What class of extensions to parse, predicate funcs, + and strings to use in error reporting. */ static const char * -riscv_parse_sv_or_non_std_ext (riscv_parse_subset_t *rps, - const char *march, - const char *p, - const char *ext_type, - const char *ext_type_str) +riscv_parse_prefixed_ext (riscv_parse_subset_t *rps, + const char *march, + const char *p, + const riscv_parse_config_t *config) { unsigned major_version = 0; unsigned minor_version = 0; - size_t ext_type_len = strlen (ext_type); + const char *last_name; + riscv_isa_ext_class_t class; + bfd_boolean use_default_version; while (*p) { @@ -1268,12 +1332,10 @@ continue; } - if (strncmp (p, ext_type, ext_type_len) != 0) - break; - - /* It's non-standard supervisor extension if it prefix with sx. */ - if ((ext_type[0] == 's') && (ext_type_len == 1) - && (*(p + 1) == 'x')) + /* Assert that the current extension specifier matches our parsing + class. */ + class = riscv_get_prefix_class (p); + if (class != config->class) break; char *subset = xstrdup (p); @@ -1283,25 +1345,67 @@ while (*++q != '\0' && *q != '_' && !ISDIGIT (*q)) ; + use_default_version = FALSE; end_of_version = - riscv_parsing_subset_version ( - rps, - march, - q, &major_version, &minor_version, - /* default_major_version= */ 2, - /* default_minor_version= */ 0, - /* std_ext_p= */FALSE); - + riscv_parsing_subset_version (rps, march, q, &major_version, + &minor_version, FALSE, + &use_default_version); *q = '\0'; - riscv_add_subset (rps->subset_list, subset, major_version, minor_version); + /* Check that the name is valid. + For 'x', anything goes but it cannot simply be 'x'. + For 's', it must be known from a list and cannot simply be 's'. + For 'z', it must be known from a list and cannot simply be 'z'. */ + + /* Check that the extension name is well-formed. */ + if (!config->ext_valid_p (subset)) + { + rps->error_handler + (_("-march=%s: Invalid or unknown %s ISA extension: '%s'"), + march, config->prefix, subset); + free (subset); + return NULL; + } + + /* Check that the last item is not the same as this. */ + last_name = rps->subset_list->tail->name; + if (!strcasecmp (last_name, subset)) + { + rps->error_handler + (_("-march=%s: Duplicate %s ISA extension: \'%s\'"), + march, config->prefix, subset); + free (subset); + return NULL; + } + + /* Check that we are in alphabetical order within the subset. */ + if (!strncasecmp (last_name, config->prefix, 1) + && strcasecmp (last_name, subset) > 0) + { + rps->error_handler + (_("\ +-march=%s: %s ISA extension not in alphabetical order: \'%s\' must come before \'%s\'."), + march, config->prefix, subset, last_name); + free (subset); + return NULL; + } + + /* Find the default version if needed. */ + if (use_default_version + && rps->get_default_version != NULL) + rps->get_default_version (subset, + &major_version, + &minor_version); + riscv_add_subset (rps->subset_list, subset, + major_version, minor_version); + free (subset); p += end_of_version - subset; if (*p != '\0' && *p != '_') { - rps->error_handler ("-march=%s: %s must seperate with _", - march, ext_type_str); + rps->error_handler (_("-march=%s: %s must separate with _"), + march, config->prefix); return NULL; } } @@ -1309,6 +1413,84 @@ return p; } +/* List of Z-class extensions that binutils should know about. + Whether or not a particular entry is in this list will + dictate if gas/ld will accept its presence in the -march + string. + + Example: To add an extension called "Zbb" (bitmanip base extension), + add "zbb" string to the list (all lowercase). + + Keep this list alphabetically ordered. */ + +static const char * const riscv_std_z_ext_strtab[] = + { + "zicsr", NULL + }; + +/* Same as `riscv_std_z_ext_strtab', but for S-class extensions. */ + +static const char * const riscv_std_s_ext_strtab[] = + { + NULL + }; + +/* For the extension EXT, search through the list of known extensions + KNOWN_EXTS for a match, and return TRUE if found. */ + +static bfd_boolean +riscv_multi_letter_ext_valid_p (const char *ext, + const char *const *known_exts) +{ + size_t i; + + for (i = 0; known_exts[i]; ++i) + if (!strcmp (ext, known_exts[i])) + return TRUE; + + return FALSE; +} + +/* Predicator function for x-prefixed extensions. + Anything goes, except the literal 'x'. */ + +static bfd_boolean +riscv_ext_x_valid_p (const char *arg) +{ + if (!strcasecmp (arg, "x")) + return FALSE; + + return TRUE; +} + +/* Predicator functions for z-prefixed extensions. + Only known z-extensions are permitted. */ + +static bfd_boolean +riscv_ext_z_valid_p (const char *arg) +{ + return riscv_multi_letter_ext_valid_p (arg, riscv_std_z_ext_strtab); +} + +/* Predicator function for 's' prefixed extensions. + Must be either literal 's', or a known s-prefixed extension. */ + +static bfd_boolean +riscv_ext_s_valid_p (const char *arg) +{ + return riscv_multi_letter_ext_valid_p (arg, riscv_std_s_ext_strtab); +} + +/* Parsing order that is specified by the ISA manual. */ + +static const riscv_parse_config_t parse_config[] = +{ + {RV_ISA_CLASS_S, "s", riscv_ext_s_valid_p}, + {RV_ISA_CLASS_Z, "z", riscv_ext_z_valid_p}, + {RV_ISA_CLASS_X, "x", riscv_ext_x_valid_p}, + {RV_ISA_CLASS_UNKNOWN, NULL, NULL} +}; + /* Function for parsing arch string. Return Value: @@ -1323,6 +1505,7 @@ const char *arch) { const char *p = arch; + size_t i; if (strncmp (p, "rv32", 4) == 0) { @@ -1336,8 +1519,15 @@ } else { - rps->error_handler ("-march=%s: ISA string must begin with rv32 or rv64", - arch); + /* Arch string shouldn't be NULL or empty here. However, + it might be empty only when we failed to merge the arch + string in the riscv_merge_attributes. We have already + issued the correct error message in another side, so do + not issue this error when the arch string is empty. */ + if (strlen (arch)) + rps->error_handler ( + _("-march=%s: ISA string must begin with rv32 or rv64"), + arch); return FALSE; } @@ -1347,30 +1537,17 @@ if (p == NULL) return FALSE; - /* Parsing non-standard extension. */ - p = riscv_parse_sv_or_non_std_ext ( - rps, arch, p, "x", "non-standard extension"); + /* Parse the different classes of extensions in the specified order. */ + for (i = 0; i < ARRAY_SIZE (parse_config); ++i) { + p = riscv_parse_prefixed_ext (rps, arch, p, &parse_config[i]); - if (p == NULL) - return FALSE; - - /* Parsing supervisor extension. */ - p = riscv_parse_sv_or_non_std_ext ( - rps, arch, p, "s", "supervisor extension"); - - if (p == NULL) - return FALSE; - - /* Parsing non-standard supervisor extension. */ - p = riscv_parse_sv_or_non_std_ext ( - rps, arch, p, "sx", "non-standard supervisor extension"); - - if (p == NULL) - return FALSE; + if (p == NULL) + return FALSE; + } if (*p != '\0') { - rps->error_handler ("-march=%s: unexpected ISA string at end: %s", + rps->error_handler (_("-march=%s: unexpected ISA string at end: %s"), arch, p); return FALSE; } @@ -1378,31 +1555,35 @@ if (riscv_lookup_subset (rps->subset_list, "e") && riscv_lookup_subset (rps->subset_list, "f")) { - rps->error_handler ("-march=%s: rv32e does not support the `f' extension", - arch); + rps->error_handler + (_("-march=%s: rv32e does not support the `f' extension"), + arch); return FALSE; } if (riscv_lookup_subset (rps->subset_list, "d") && !riscv_lookup_subset (rps->subset_list, "f")) { - rps->error_handler ("-march=%s: `d' extension requires `f' extension", - arch); + rps->error_handler + (_("-march=%s: `d' extension requires `f' extension"), + arch); return FALSE; } if (riscv_lookup_subset (rps->subset_list, "q") && !riscv_lookup_subset (rps->subset_list, "d")) { - rps->error_handler ("-march=%s: `q' extension requires `d' extension", - arch); + rps->error_handler + (_("-march=%s: `q' extension requires `d' extension"), + arch); return FALSE; } if (riscv_lookup_subset (rps->subset_list, "q") && *rps->xlen < 64) { - rps->error_handler ("-march=%s: rv32 does not support the `q' extension", - arch); + rps->error_handler + (_("-march=%s: rv32 does not support the `q' extension"), + arch); return FALSE; } return TRUE; @@ -1413,7 +1594,8 @@ void riscv_add_subset (riscv_subset_list_t *subset_list, const char *subset, - int major, int minor) + int major, + int minor) { riscv_subset_t *s = xmalloc (sizeof *s); @@ -1437,10 +1619,10 @@ riscv_lookup_subset (const riscv_subset_list_t *subset_list, const char *subset) { - return riscv_lookup_subset_version ( - subset_list, subset, - RISCV_DONT_CARE_VERSION, - RISCV_DONT_CARE_VERSION); + return riscv_lookup_subset_version + (subset_list, subset, + RISCV_DONT_CARE_VERSION, + RISCV_DONT_CARE_VERSION); } /* Find subset in list with version checking, return NULL if not found. */ @@ -1487,7 +1669,7 @@ /* Return the number of digits for the input. */ -static size_t +size_t riscv_estimate_digit (unsigned num) { size_t digit = 0; diff -Nru gdb-9.1/bfd/elfxx-riscv.h gdb-10.2/bfd/elfxx-riscv.h --- gdb-9.1/bfd/elfxx-riscv.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elfxx-riscv.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* RISC-V ELF specific backend routines. - Copyright (C) 2011-2019 Free Software Foundation, Inc. + Copyright (C) 2011-2020 Free Software Foundation, Inc. Contributed by Andrew Waterman (andrew@sifive.com). Based on MIPS target. @@ -22,6 +22,7 @@ #include "elf/common.h" #include "elf/internal.h" +#include "opcode/riscv.h" extern reloc_howto_type * riscv_reloc_name_lookup (bfd *, const char *); @@ -72,6 +73,9 @@ void (*error_handler) (const char *, ...) ATTRIBUTE_PRINTF_1; unsigned *xlen; + void (*get_default_version) (const char *, + unsigned int *, + unsigned int *); } riscv_parse_subset_t; extern bfd_boolean @@ -86,3 +90,35 @@ extern char * riscv_arch_str (unsigned, const riscv_subset_list_t *); + +extern size_t +riscv_estimate_digit (unsigned); + +/* ISA extension name class. E.g. "zbb" corresponds to RV_ISA_CLASS_Z, + "xargs" corresponds to RV_ISA_CLASS_X, etc. Order is important + here. */ + +typedef enum riscv_isa_ext_class + { + RV_ISA_CLASS_S, + RV_ISA_CLASS_Z, + RV_ISA_CLASS_X, + RV_ISA_CLASS_UNKNOWN + } riscv_isa_ext_class_t; + +/* Classify the argument 'ext' into one of riscv_isa_ext_class_t. */ + +riscv_isa_ext_class_t +riscv_get_prefix_class (const char *); + +extern int +riscv_get_priv_spec_class (const char *, enum riscv_priv_spec_class *); + +extern int +riscv_get_priv_spec_class_from_numbers (unsigned int, + unsigned int, + unsigned int, + enum riscv_priv_spec_class *); + +extern const char * +riscv_get_priv_spec_name (enum riscv_priv_spec_class); diff -Nru gdb-9.1/bfd/elfxx-sparc.c gdb-10.2/bfd/elfxx-sparc.c --- gdb-9.1/bfd/elfxx-sparc.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elfxx-sparc.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* SPARC-specific support for ELF - Copyright (C) 2005-2019 Free Software Foundation, Inc. + Copyright (C) 2005-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -690,9 +690,6 @@ { struct elf_link_hash_entry elf; - /* Track dynamic relocs copied for this symbol. */ - struct elf_dyn_relocs *dyn_relocs; - #define GOT_UNKNOWN 0 #define GOT_NORMAL 1 #define GOT_TLS_GD 2 @@ -1028,7 +1025,6 @@ struct _bfd_sparc_elf_link_hash_entry *eh; eh = (struct _bfd_sparc_elf_link_hash_entry *) entry; - eh->dyn_relocs = NULL; eh->tls_type = GOT_UNKNOWN; eh->has_got_reloc = 0; eh->has_non_got_reloc = 0; @@ -1136,7 +1132,7 @@ _bfd_sparc_elf_link_hash_table_create (bfd *abfd) { struct _bfd_sparc_elf_link_hash_table *ret; - bfd_size_type amt = sizeof (struct _bfd_sparc_elf_link_hash_table); + size_t amt = sizeof (struct _bfd_sparc_elf_link_hash_table); ret = (struct _bfd_sparc_elf_link_hash_table *) bfd_zmalloc (amt); if (ret == NULL) @@ -1220,7 +1216,7 @@ if (!_bfd_elf_create_dynamic_sections (dynobj, info)) return FALSE; - if (htab->is_vxworks) + if (htab->elf.target_os == is_vxworks) { if (!elf_vxworks_create_dynamic_sections (dynobj, info, &htab->srelplt2)) return FALSE; @@ -1289,37 +1285,6 @@ edir = (struct _bfd_sparc_elf_link_hash_entry *) dir; eind = (struct _bfd_sparc_elf_link_hash_entry *) ind; - if (eind->dyn_relocs != NULL) - { - if (edir->dyn_relocs != NULL) - { - struct elf_dyn_relocs **pp; - struct elf_dyn_relocs *p; - - /* Add reloc counts against the indirect sym to the direct sym - list. Merge any entries against the same section. */ - for (pp = &eind->dyn_relocs; (p = *pp) != NULL; ) - { - struct elf_dyn_relocs *q; - - for (q = edir->dyn_relocs; q != NULL; q = q->next) - if (q->sec == p->sec) - { - q->pc_count += p->pc_count; - q->count += p->count; - *pp = p->next; - break; - } - if (q == NULL) - pp = &p->next; - } - *pp = edir->dyn_relocs; - } - - edir->dyn_relocs = eind->dyn_relocs; - eind->dyn_relocs = NULL; - } - if (ind->root.type == bfd_link_hash_indirect && dir->got.refcount <= 0) { edir->tls_type = eind->tls_type; @@ -1426,7 +1391,8 @@ if (r_symndx < symtab_hdr->sh_info) { /* A local symbol. */ - isym = bfd_sym_from_r_symndx (&htab->sym_cache, abfd, r_symndx); + isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache, abfd, + r_symndx); if (isym == NULL) return FALSE; @@ -1790,7 +1756,7 @@ /* If this is a global symbol, we count the number of relocations we need for this symbol. */ if (h != NULL) - head = &((struct _bfd_sparc_elf_link_hash_entry *) h)->dyn_relocs; + head = &h->dyn_relocs; else { /* Track dynamic relocs needed for local syms too. @@ -1811,7 +1777,7 @@ p = *head; if (p == NULL || p->sec != sec) { - bfd_size_type amt = sizeof *p; + size_t amt = sizeof *p; p = ((struct elf_dyn_relocs *) bfd_alloc (htab->elf.dynobj, amt)); if (p == NULL) @@ -1923,23 +1889,6 @@ return TRUE; } -/* Find dynamic relocs for H that apply to read-only sections. */ - -static asection * -readonly_dynrelocs (struct elf_link_hash_entry *h) -{ - struct elf_dyn_relocs *p; - - for (p = _bfd_sparc_elf_hash_entry (h)->dyn_relocs; p != NULL; p = p->next) - { - asection *s = p->sec->output_section; - - if (s != NULL && (s->flags & SEC_READONLY) != 0) - return p->sec; - } - return NULL; -} - /* Adjust a symbol defined by a dynamic object and referenced by a regular object. The current definition is in some section of the dynamic object, but we're not including those sections. We have to @@ -2036,7 +1985,7 @@ /* If we don't find any dynamic relocs in read-only sections, then we'll be keeping the dynamic relocs and avoiding the copy reloc. */ - if (!readonly_dynrelocs (h)) + if (!_bfd_elf_readonly_dynrelocs (h)) { h->non_got_ref = 0; return TRUE; @@ -2128,7 +2077,8 @@ s->size = htab->plt_header_size; /* Allocate space for the .rela.plt.unloaded relocations. */ - if (htab->is_vxworks && !bfd_link_pic (info)) + if (htab->elf.target_os == is_vxworks + && !bfd_link_pic (info)) htab->srelplt2->size = sizeof (Elf32_External_Rela) * 2; } @@ -2180,7 +2130,7 @@ htab->elf.irelplt->size += SPARC_ELF_RELA_BYTES (htab); } - if (htab->is_vxworks) + if (htab->elf.target_os == is_vxworks) { /* Allocate space for the .got.plt entry. */ htab->elf.sgotplt->size += 4; @@ -2257,7 +2207,7 @@ else h->got.offset = (bfd_vma) -1; - if (eh->dyn_relocs == NULL) + if (h->dyn_relocs == NULL) return TRUE; /* In the shared -Bsymbolic case, discard space allocated for @@ -2272,7 +2222,7 @@ { struct elf_dyn_relocs **pp; - for (pp = &eh->dyn_relocs; (p = *pp) != NULL; ) + for (pp = &h->dyn_relocs; (p = *pp) != NULL; ) { p->count -= p->pc_count; p->pc_count = 0; @@ -2283,11 +2233,11 @@ } } - if (htab->is_vxworks) + if (htab->elf.target_os == is_vxworks) { struct elf_dyn_relocs **pp; - for (pp = &eh->dyn_relocs; (p = *pp) != NULL; ) + for (pp = &h->dyn_relocs; (p = *pp) != NULL; ) { if (strcmp (p->sec->output_section->name, ".tls_vars") == 0) *pp = p->next; @@ -2298,7 +2248,7 @@ /* Also discard relocs on undefined weak syms with non-default visibility or in PIE. */ - if (eh->dyn_relocs != NULL + if (h->dyn_relocs != NULL && h->root.type == bfd_link_hash_undefweak) { /* An undefined weak symbol is never @@ -2313,7 +2263,7 @@ can branch to 0 without PLT. */ struct elf_dyn_relocs **pp; - for (pp = &eh->dyn_relocs; (p = *pp) != NULL;) + for (pp = &h->dyn_relocs; (p = *pp) != NULL;) if (p->pc_count == 0) *pp = p->next; else @@ -2323,7 +2273,7 @@ pp = &p->next; } - if (eh->dyn_relocs != NULL) + if (h->dyn_relocs != NULL) { /* Make sure undefined weak symbols are output as dynamic symbols in PIEs for dynamic non-GOT @@ -2333,7 +2283,7 @@ } } else - eh->dyn_relocs = NULL; + h->dyn_relocs = NULL; } /* Make sure undefined weak symbols are output as a dynamic @@ -2377,13 +2327,13 @@ goto keep; } - eh->dyn_relocs = NULL; + h->dyn_relocs = NULL; keep: ; } /* Finally, allocate space. */ - for (p = eh->dyn_relocs; p != NULL; p = p->next) + for (p = h->dyn_relocs; p != NULL; p = p->next) { asection *sreloc = elf_section_data (p->sec)->sreloc; sreloc->size += p->count * SPARC_ELF_RELA_BYTES (htab); @@ -2411,33 +2361,6 @@ return allocate_dynrelocs (h, inf); } -/* Set DF_TEXTREL if we find any dynamic relocs that apply to - read-only sections. */ - -static bfd_boolean -maybe_set_textrel (struct elf_link_hash_entry *h, void *info_p) -{ - asection *sec; - - if (h->root.type == bfd_link_hash_indirect) - return TRUE; - - sec = readonly_dynrelocs (h); - if (sec != NULL) - { - struct bfd_link_info *info = (struct bfd_link_info *) info_p; - - info->flags |= DF_TEXTREL; - info->callbacks->minfo - (_("%pB: dynamic relocation against `%pT' in read-only section `%pA'\n"), - sec->owner, h->root.root.string, sec); - - /* Not an error, just cut short the traversal. */ - return FALSE; - } - return TRUE; -} - /* Return true if the dynamic symbol for a given section should be omitted when creating a shared library. */ @@ -2512,7 +2435,7 @@ linker script /DISCARD/, so we'll be discarding the relocs too. */ } - else if (htab->is_vxworks + else if (htab->elf.target_os == is_vxworks && strcmp (p->sec->output_section->name, ".tls_vars") == 0) { @@ -2582,7 +2505,7 @@ htab_traverse (htab->loc_hash_table, allocate_local_dynrelocs, info); if (! ABI_64_P (output_bfd) - && !htab->is_vxworks + && htab->elf.target_os != is_vxworks && elf_hash_table (info)->dynamic_sections_created) { /* Make space for the trailing nop in .plt. */ @@ -2668,38 +2591,10 @@ #define add_dynamic_entry(TAG, VAL) \ _bfd_elf_add_dynamic_entry (info, TAG, VAL) - if (bfd_link_executable (info)) - { - if (!add_dynamic_entry (DT_DEBUG, 0)) - return FALSE; - } - - if (htab->elf.srelplt->size != 0) - { - if (!add_dynamic_entry (DT_PLTGOT, 0) - || !add_dynamic_entry (DT_PLTRELSZ, 0) - || !add_dynamic_entry (DT_PLTREL, DT_RELA) - || !add_dynamic_entry (DT_JMPREL, 0)) - return FALSE; - } - - if (!add_dynamic_entry (DT_RELA, 0) - || !add_dynamic_entry (DT_RELASZ, 0) - || !add_dynamic_entry (DT_RELAENT, - SPARC_ELF_RELA_BYTES (htab))) + if (!_bfd_elf_maybe_vxworks_add_dynamic_tags (output_bfd, info, + TRUE)) return FALSE; - /* If any dynamic relocs apply to a read-only section, - then we need a DT_TEXTREL entry. */ - if ((info->flags & DF_TEXTREL) == 0) - elf_link_hash_traverse (&htab->elf, maybe_set_textrel, info); - - if (info->flags & DF_TEXTREL) - { - if (!add_dynamic_entry (DT_TEXTREL, 0)) - return FALSE; - } - if (ABI_64_P (output_bfd)) { int reg; @@ -2755,9 +2650,6 @@ eht->dynsymcount++; } } - if (htab->is_vxworks - && !elf_vxworks_add_dynamic_entries (output_bfd, info)) - return FALSE; } #undef add_dynamic_entry @@ -2770,7 +2662,7 @@ if (!sec->used_by_bfd) { struct _bfd_sparc_elf_section_data *sdata; - bfd_size_type amt = sizeof (*sdata); + size_t amt = sizeof (*sdata); sdata = bfd_zalloc (abfd, amt); if (sdata == NULL) @@ -2907,7 +2799,8 @@ sreloc = elf_section_data (input_section)->sreloc; /* We have to handle relocations in vxworks .tls_vars sections specially, because the dynamic loader is 'weird'. */ - is_vxworks_tls = (htab->is_vxworks && bfd_link_pic (info) + is_vxworks_tls = (htab->elf.target_os == is_vxworks + && bfd_link_pic (info) && !strcmp (input_section->output_section->name, ".tls_vars")); @@ -4139,7 +4032,7 @@ if (r == bfd_reloc_continue) { -do_relocation: + do_relocation: r = _bfd_final_link_relocate (howto, input_bfd, input_section, contents, rel->r_offset, relocation, rel->r_addend); @@ -4350,7 +4243,7 @@ abort (); /* Fill in the entry in the .rela.plt section. */ - if (htab->is_vxworks) + if (htab->elf.target_os == is_vxworks) { /* Work out the index of this PLT entry. */ rela_index = ((h->plt.offset - htab->plt_header_size) @@ -4552,7 +4445,7 @@ ".got" section. Likewise _PROCEDURE_LINKAGE_TABLE_ and ".plt". */ if (sym != NULL && (h == htab->elf.hdynamic - || (!htab->is_vxworks + || (htab->elf.target_os != is_vxworks && (h == htab->elf.hgot || h == htab->elf.hplt)))) sym->st_shndx = SHN_ABS; @@ -4586,7 +4479,7 @@ bed->s->swap_dyn_in (dynobj, dyncon, &dyn); - if (htab->is_vxworks && dyn.d_tag == DT_PLTGOT) + if (htab->elf.target_os == is_vxworks && dyn.d_tag == DT_PLTGOT) { /* On VxWorks, DT_PLTGOT should point to the start of the GOT, not to the start of the PLT. */ @@ -4597,7 +4490,7 @@ bed->s->swap_dyn_out (output_bfd, &dyn, dyncon); } } - else if (htab->is_vxworks + else if (htab->elf.target_os == is_vxworks && elf_vxworks_finish_dynamic_entry (output_bfd, &dyn)) bed->s->swap_dyn_out (output_bfd, &dyn, dyncon); else if (abi_64_p && dyn.d_tag == DT_SPARC_REGISTER) @@ -4822,7 +4715,7 @@ /* Initialize the contents of the .plt section. */ if (splt->size > 0) { - if (htab->is_vxworks) + if (htab->elf.target_os == is_vxworks) { if (bfd_link_pic (info)) sparc_vxworks_finish_shared_plt (output_bfd, info); @@ -4840,7 +4733,8 @@ if (elf_section_data (splt->output_section) != NULL) elf_section_data (splt->output_section)->this_hdr.sh_entsize - = ((htab->is_vxworks || !ABI_64_P (output_bfd)) + = ((htab->elf.target_os == is_vxworks + || !ABI_64_P (output_bfd)) ? 0 : htab->plt_entry_size); } diff -Nru gdb-9.1/bfd/elfxx-sparc.h gdb-10.2/bfd/elfxx-sparc.h --- gdb-9.1/bfd/elfxx-sparc.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elfxx-sparc.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* SPARC ELF specific backend routines. - Copyright (C) 2005-2019 Free Software Foundation, Inc. + Copyright (C) 2005-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -55,16 +55,10 @@ bfd_vma offset; } tls_ldm_got; - /* Small local sym cache. */ - struct sym_cache sym_cache; - /* Used by local STT_GNU_IFUNC symbols. */ htab_t loc_hash_table; void *loc_hash_memory; - /* True if the target system is VxWorks. */ - int is_vxworks; - /* The (unloaded but important) .rela.plt.unloaded section, for VxWorks. */ asection *srelplt2; @@ -90,8 +84,9 @@ /* Get the SPARC ELF linker hash table from a link_info structure. */ #define _bfd_sparc_elf_hash_table(p) \ - (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \ - == SPARC_ELF_DATA ? ((struct _bfd_sparc_elf_link_hash_table *) ((p)->hash)) : NULL) + ((is_elf_hash_table ((p)->hash) \ + && elf_hash_table_id (elf_hash_table (p)) == SPARC_ELF_DATA) \ + ? (struct _bfd_sparc_elf_link_hash_table *) (p)->hash : NULL) extern reloc_howto_type *_bfd_sparc_elf_reloc_type_lookup (bfd *, bfd_reloc_code_real_type); diff -Nru gdb-9.1/bfd/elfxx-target.h gdb-10.2/bfd/elfxx-target.h --- gdb-9.1/bfd/elfxx-target.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elfxx-target.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Target definitions for NN-bit ELF - Copyright (C) 1993-2019 Free Software Foundation, Inc. + Copyright (C) 1993-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -362,6 +362,10 @@ #define ELF_TARGET_ID GENERIC_ELF_DATA #endif +#ifndef ELF_TARGET_OS +#define ELF_TARGET_OS is_normal +#endif + #ifndef ELF_OSABI #define ELF_OSABI ELFOSABI_NONE #endif @@ -485,6 +489,9 @@ #ifndef elf_backend_size_dynamic_sections #define elf_backend_size_dynamic_sections 0 #endif +#ifndef elf_backend_strip_zero_sized_dynamic_sections +#define elf_backend_strip_zero_sized_dynamic_sections 0 +#endif #ifndef elf_backend_init_index_section #define elf_backend_init_index_section _bfd_void_bfd_link #endif @@ -653,6 +660,9 @@ #ifndef elf_backend_write_section #define elf_backend_write_section NULL #endif +#ifndef elf_backend_elfsym_local_is_section +#define elf_backend_elfsym_local_is_section NULL +#endif #ifndef elf_backend_mips_irix_compat #define elf_backend_mips_irix_compat NULL #endif @@ -758,7 +768,7 @@ #endif #ifndef elf_backend_copy_special_section_fields -#define elf_backend_copy_special_section_fields NULL +#define elf_backend_copy_special_section_fields _bfd_elf_copy_special_section_fields #endif #ifndef elf_backend_compact_eh_encoding @@ -766,9 +776,25 @@ #endif #ifndef elf_backend_cant_unwind_opcode -#define elf_backend_cant_unwind_opcode 0 +#define elf_backend_cant_unwind_opcode NULL +#endif + +#ifndef elf_backend_init_secondary_reloc_section +#define elf_backend_init_secondary_reloc_section _bfd_elf_init_secondary_reloc_section #endif +#ifndef elf_backend_slurp_secondary_reloc_section +#define elf_backend_slurp_secondary_reloc_section _bfd_elf_slurp_secondary_reloc_section +#endif + +#ifndef elf_backend_write_secondary_reloc_section +#define elf_backend_write_secondary_reloc_section _bfd_elf_write_secondary_reloc_section +#endif + +#ifndef elf_backend_symbol_section_index +#define elf_backend_symbol_section_index NULL +#endif + #ifndef elf_match_priority #define elf_match_priority \ (ELF_ARCH == bfd_arch_unknown ? 2 : ELF_OSABI == ELFOSABI_NONE ? 1 : 0) @@ -780,6 +806,7 @@ { ELF_ARCH, /* arch */ ELF_TARGET_ID, /* target_id */ + ELF_TARGET_OS, /* target_os */ ELF_MACHINE_CODE, /* elf_machine_code */ ELF_OSABI, /* elf_osabi */ ELF_MAXPAGESIZE, /* maxpagesize */ @@ -815,6 +842,7 @@ elf_backend_adjust_dynamic_symbol, elf_backend_always_size_sections, elf_backend_size_dynamic_sections, + elf_backend_strip_zero_sized_dynamic_sections, elf_backend_init_index_section, elf_backend_relocate_section, elf_backend_finish_dynamic_symbol, @@ -859,6 +887,7 @@ elf_backend_can_make_lsda_relative_eh_frame, elf_backend_encode_eh_address, elf_backend_write_section, + elf_backend_elfsym_local_is_section, elf_backend_mips_irix_compat, elf_backend_mips_rtype_to_howto, elf_backend_ecoff_debug_swap, @@ -895,6 +924,10 @@ elf_backend_fixup_gnu_properties, elf_backend_compact_eh_encoding, elf_backend_cant_unwind_opcode, + elf_backend_symbol_section_index, + elf_backend_init_secondary_reloc_section, + elf_backend_slurp_secondary_reloc_section, + elf_backend_write_secondary_reloc_section, elf_backend_static_tls_alignment, elf_backend_stack_align, elf_backend_strtab_flags, diff -Nru gdb-9.1/bfd/elfxx-tilegx.c gdb-10.2/bfd/elfxx-tilegx.c --- gdb-9.1/bfd/elfxx-tilegx.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elfxx-tilegx.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* TILE-Gx-specific support for ELF. - Copyright (C) 2011-2019 Free Software Foundation, Inc. + Copyright (C) 2011-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -785,9 +785,6 @@ { struct elf_link_hash_entry elf; - /* Track dynamic relocs copied for this symbol. */ - struct elf_dyn_relocs *dyn_relocs; - #define GOT_UNKNOWN 0 #define GOT_NORMAL 1 #define GOT_TLS_GD 2 @@ -838,16 +835,14 @@ /* Whether LE transition has been disabled for some of the sections. */ bfd_boolean disable_le_transition; - - /* Small local sym to section mapping cache. */ - struct sym_cache sym_cache; }; /* Get the Tile ELF linker hash table from a link_info structure. */ #define tilegx_elf_hash_table(p) \ - (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \ - == TILEGX_ELF_DATA ? ((struct tilegx_elf_link_hash_table *) ((p)->hash)) : NULL) + ((is_elf_hash_table ((p)->hash) \ + && elf_hash_table_id (elf_hash_table (p)) == TILEGX_ELF_DATA) \ + ? (struct tilegx_elf_link_hash_table *) (p)->hash : NULL) #ifdef BFD64 static bfd_vma @@ -1356,7 +1351,6 @@ struct tilegx_elf_link_hash_entry *eh; eh = (struct tilegx_elf_link_hash_entry *) entry; - eh->dyn_relocs = NULL; eh->tls_type = GOT_UNKNOWN; } @@ -1369,7 +1363,7 @@ tilegx_elf_link_hash_table_create (bfd *abfd) { struct tilegx_elf_link_hash_table *ret; - bfd_size_type amt = sizeof (struct tilegx_elf_link_hash_table); + size_t amt = sizeof (struct tilegx_elf_link_hash_table); ret = (struct tilegx_elf_link_hash_table *) bfd_zmalloc (amt); if (ret == NULL) @@ -1505,37 +1499,6 @@ edir = (struct tilegx_elf_link_hash_entry *) dir; eind = (struct tilegx_elf_link_hash_entry *) ind; - if (eind->dyn_relocs != NULL) - { - if (edir->dyn_relocs != NULL) - { - struct elf_dyn_relocs **pp; - struct elf_dyn_relocs *p; - - /* Add reloc counts against the indirect sym to the direct sym - list. Merge any entries against the same section. */ - for (pp = &eind->dyn_relocs; (p = *pp) != NULL; ) - { - struct elf_dyn_relocs *q; - - for (q = edir->dyn_relocs; q != NULL; q = q->next) - if (q->sec == p->sec) - { - q->pc_count += p->pc_count; - q->count += p->count; - *pp = p->next; - break; - } - if (q == NULL) - pp = &p->next; - } - *pp = edir->dyn_relocs; - } - - edir->dyn_relocs = eind->dyn_relocs; - eind->dyn_relocs = NULL; - } - if (ind->root.type == bfd_link_hash_indirect && dir->got.refcount <= 0) { @@ -2003,8 +1966,7 @@ /* If this is a global symbol, we count the number of relocations we need for this symbol. */ if (h != NULL) - head = - &((struct tilegx_elf_link_hash_entry *) h)->dyn_relocs; + head = &h->dyn_relocs; else { /* Track dynamic relocs needed for local syms too. @@ -2015,7 +1977,7 @@ void *vpp; Elf_Internal_Sym *isym; - isym = bfd_sym_from_r_symndx (&htab->sym_cache, + isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache, abfd, r_symndx); if (isym == NULL) return FALSE; @@ -2031,7 +1993,7 @@ p = *head; if (p == NULL || p->sec != sec) { - bfd_size_type amt = sizeof *p; + size_t amt = sizeof *p; p = ((struct elf_dyn_relocs *) bfd_alloc (htab->elf.dynobj, amt)); if (p == NULL) @@ -2119,23 +2081,6 @@ return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym); } -/* Find dynamic relocs for H that apply to read-only sections. */ - -static asection * -readonly_dynrelocs (struct elf_link_hash_entry *h) -{ - struct elf_dyn_relocs *p; - - for (p = tilegx_elf_hash_entry (h)->dyn_relocs; p != NULL; p = p->next) - { - asection *s = p->sec->output_section; - - if (s != NULL && (s->flags & SEC_READONLY) != 0) - return p->sec; - } - return NULL; -} - /* Adjust a symbol defined by a dynamic object and referenced by a regular object. The current definition is in some section of the dynamic object, but we're not including those sections. We have to @@ -2224,7 +2169,7 @@ /* If we don't find any dynamic relocs in read-only sections, then we'll be keeping the dynamic relocs and avoiding the copy reloc. */ - if (!readonly_dynrelocs (h)) + if (!_bfd_elf_readonly_dynrelocs (h)) { h->non_got_ref = 0; return TRUE; @@ -2271,7 +2216,6 @@ { struct bfd_link_info *info; struct tilegx_elf_link_hash_table *htab; - struct tilegx_elf_link_hash_entry *eh; struct elf_dyn_relocs *p; if (h->root.type == bfd_link_hash_indirect) @@ -2380,8 +2324,7 @@ else h->got.offset = (bfd_vma) -1; - eh = (struct tilegx_elf_link_hash_entry *) h; - if (eh->dyn_relocs == NULL) + if (h->dyn_relocs == NULL) return TRUE; /* In the shared -Bsymbolic case, discard space allocated for @@ -2396,7 +2339,7 @@ { struct elf_dyn_relocs **pp; - for (pp = &eh->dyn_relocs; (p = *pp) != NULL; ) + for (pp = &h->dyn_relocs; (p = *pp) != NULL; ) { p->count -= p->pc_count; p->pc_count = 0; @@ -2409,12 +2352,12 @@ /* Also discard relocs on undefined weak syms with non-default visibility. */ - if (eh->dyn_relocs != NULL + if (h->dyn_relocs != NULL && h->root.type == bfd_link_hash_undefweak) { if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT || UNDEFWEAK_NO_DYNAMIC_RELOC (info, h)) - eh->dyn_relocs = NULL; + h->dyn_relocs = NULL; /* Make sure undefined weak symbols are output as a dynamic symbol in PIEs. */ @@ -2454,13 +2397,13 @@ goto keep; } - eh->dyn_relocs = NULL; + h->dyn_relocs = NULL; keep: ; } /* Finally, allocate space. */ - for (p = eh->dyn_relocs; p != NULL; p = p->next) + for (p = h->dyn_relocs; p != NULL; p = p->next) { asection *sreloc = elf_section_data (p->sec)->sreloc; sreloc->size += p->count * TILEGX_ELF_RELA_BYTES (htab); @@ -2469,33 +2412,6 @@ return TRUE; } -/* Set DF_TEXTREL if we find any dynamic relocs that apply to - read-only sections. */ - -static bfd_boolean -maybe_set_textrel (struct elf_link_hash_entry *h, void *info_p) -{ - asection *sec; - - if (h->root.type == bfd_link_hash_indirect) - return TRUE; - - sec = readonly_dynrelocs (h); - if (sec != NULL) - { - struct bfd_link_info *info = (struct bfd_link_info *) info_p; - - info->flags |= DF_TEXTREL; - info->callbacks->minfo - (_("%pB: dynamic relocation against `%pT' in read-only section `%pA'\n"), - sec->owner, h->root.root.string, sec); - - /* Not an error, just cut short the traversal. */ - return FALSE; - } - return TRUE; -} - /* Return true if the dynamic symbol for a given section should be omitted when creating a shared library. */ @@ -2703,50 +2619,7 @@ return FALSE; } - if (elf_hash_table (info)->dynamic_sections_created) - { - /* Add some entries to the .dynamic section. We fill in the - values later, in tilegx_elf_finish_dynamic_sections, but we - must add the entries now so that we get the correct size for - the .dynamic section. The DT_DEBUG entry is filled in by the - dynamic linker and used by the debugger. */ -#define add_dynamic_entry(TAG, VAL) \ - _bfd_elf_add_dynamic_entry (info, TAG, VAL) - - if (bfd_link_executable (info)) - { - if (!add_dynamic_entry (DT_DEBUG, 0)) - return FALSE; - } - - if (htab->elf.srelplt->size != 0) - { - if (!add_dynamic_entry (DT_PLTGOT, 0) - || !add_dynamic_entry (DT_PLTRELSZ, 0) - || !add_dynamic_entry (DT_PLTREL, DT_RELA) - || !add_dynamic_entry (DT_JMPREL, 0)) - return FALSE; - } - - if (!add_dynamic_entry (DT_RELA, 0) - || !add_dynamic_entry (DT_RELASZ, 0) - || !add_dynamic_entry (DT_RELAENT, TILEGX_ELF_RELA_BYTES (htab))) - return FALSE; - - /* If any dynamic relocs apply to a read-only section, - then we need a DT_TEXTREL entry. */ - if ((info->flags & DF_TEXTREL) == 0) - elf_link_hash_traverse (&htab->elf, maybe_set_textrel, info); - - if (info->flags & DF_TEXTREL) - { - if (!add_dynamic_entry (DT_TEXTREL, 0)) - return FALSE; - } - } -#undef add_dynamic_entry - - return TRUE; + return _bfd_elf_add_dynamic_tags (output_bfd, info, TRUE); } /* Return the base VMA address which should be subtracted from real addresses diff -Nru gdb-9.1/bfd/elfxx-tilegx.h gdb-10.2/bfd/elfxx-tilegx.h --- gdb-9.1/bfd/elfxx-tilegx.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elfxx-tilegx.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* TILE-Gx ELF specific backend routines. - Copyright (C) 2011-2019 Free Software Foundation, Inc. + Copyright (C) 2011-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/elfxx-x86.c gdb-10.2/bfd/elfxx-x86.c --- gdb-9.1/bfd/elfxx-x86.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elfxx-x86.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* x86 specific support for ELF - Copyright (C) 2017-2019 Free Software Foundation, Inc. + Copyright (C) 2017-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -131,8 +131,7 @@ if (h->type == STT_GNU_IFUNC && h->def_regular) { - if (_bfd_elf_allocate_ifunc_dyn_relocs (info, h, &eh->dyn_relocs, - &htab->readonly_dynrelocs_against_ifunc, + if (_bfd_elf_allocate_ifunc_dyn_relocs (info, h, &h->dyn_relocs, plt_entry_size, (htab->plt.has_plt0 * plt_entry_size), @@ -260,7 +259,7 @@ } } - if (htab->target_os == is_vxworks && !bfd_link_pic (info)) + if (htab->elf.target_os == is_vxworks && !bfd_link_pic (info)) { /* VxWorks has a second set of relocations for each PLT entry in executables. They go in a separate relocation section, @@ -347,7 +346,8 @@ (but if both R_386_TLS_IE_32 and R_386_TLS_IE is present, we need two), R_386_TLS_GD and R_X86_64_TLSGD need one if local symbol and two if global. No dynamic relocation against - resolved undefined weak symbol in executable. */ + resolved undefined weak symbol in executable. No dynamic + relocation against non-preemptible absolute symbol. */ if (tls_type == GOT_TLS_IE_BOTH) htab->elf.srelgot->size += 2 * htab->sizeof_reloc; else if ((GOT_TLS_GD_P (tls_type) && h->dynindx == -1) @@ -359,20 +359,22 @@ && ((ELF_ST_VISIBILITY (h->other) == STV_DEFAULT && !resolved_to_zero) || h->root.type != bfd_link_hash_undefweak) - && (bfd_link_pic (info) + && ((bfd_link_pic (info) + && !(h->dynindx == -1 + && ABS_SYMBOL_P (h))) || WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, 0, h))) htab->elf.srelgot->size += htab->sizeof_reloc; if (GOT_TLS_GDESC_P (tls_type)) { htab->elf.srelplt->size += htab->sizeof_reloc; if (bed->target_id == X86_64_ELF_DATA) - htab->tlsdesc_plt = (bfd_vma) -1; + htab->elf.tlsdesc_plt = (bfd_vma) -1; } } else h->got.offset = (bfd_vma) -1; - if (eh->dyn_relocs == NULL) + if (h->dyn_relocs == NULL) return TRUE; /* In the shared -Bsymbolic case, discard space allocated for @@ -393,7 +395,7 @@ { struct elf_dyn_relocs **pp; - for (pp = &eh->dyn_relocs; (p = *pp) != NULL; ) + for (pp = &h->dyn_relocs; (p = *pp) != NULL; ) { p->count -= p->pc_count; p->pc_count = 0; @@ -404,10 +406,10 @@ } } - if (htab->target_os == is_vxworks) + if (htab->elf.target_os == is_vxworks) { struct elf_dyn_relocs **pp; - for (pp = &eh->dyn_relocs; (p = *pp) != NULL; ) + for (pp = &h->dyn_relocs; (p = *pp) != NULL; ) { if (strcmp (p->sec->output_section->name, ".tls_vars") == 0) *pp = p->next; @@ -418,7 +420,7 @@ /* Also discard relocs on undefined weak syms with non-default visibility or in PIE. */ - if (eh->dyn_relocs != NULL) + if (h->dyn_relocs != NULL) { if (h->root.type == bfd_link_hash_undefweak) { @@ -434,7 +436,7 @@ that we can branch to 0 without PLT. */ struct elf_dyn_relocs **pp; - for (pp = &eh->dyn_relocs; (p = *pp) != NULL; ) + for (pp = &h->dyn_relocs; (p = *pp) != NULL; ) if (p->pc_count == 0) *pp = p->next; else @@ -447,12 +449,12 @@ /* Make sure undefined weak symbols are output as dynamic symbols in PIEs for dynamic non-GOT non-PLT reloations. */ - if (eh->dyn_relocs != NULL + if (h->dyn_relocs != NULL && !bfd_elf_link_record_dynamic_symbol (info, h)) return FALSE; } else - eh->dyn_relocs = NULL; + h->dyn_relocs = NULL; } else if (h->dynindx == -1 && !h->forced_local @@ -469,7 +471,7 @@ which turn out to need copy relocs. */ struct elf_dyn_relocs **pp; - for (pp = &eh->dyn_relocs; (p = *pp) != NULL; ) + for (pp = &h->dyn_relocs; (p = *pp) != NULL; ) { if (p->pc_count != 0) *pp = p->next; @@ -510,13 +512,13 @@ goto keep; } - eh->dyn_relocs = NULL; + h->dyn_relocs = NULL; keep: ; } /* Finally, allocate space. */ - for (p = eh->dyn_relocs; p != NULL; p = p->next) + for (p = h->dyn_relocs; p != NULL; p = p->next) { asection *sreloc; @@ -529,62 +531,6 @@ return TRUE; } -/* Find dynamic relocs for H that apply to read-only sections. */ - -static asection * -readonly_dynrelocs (struct elf_link_hash_entry *h) -{ - struct elf_dyn_relocs *p; - - for (p = elf_x86_hash_entry (h)->dyn_relocs; p != NULL; p = p->next) - { - asection *s = p->sec->output_section; - - if (s != NULL && (s->flags & SEC_READONLY) != 0) - return p->sec; - } - return NULL; -} - -/* Set DF_TEXTREL if we find any dynamic relocs that apply to - read-only sections. */ - -static bfd_boolean -maybe_set_textrel (struct elf_link_hash_entry *h, void *inf) -{ - asection *sec; - - if (h->root.type == bfd_link_hash_indirect) - return TRUE; - - /* Skip local IFUNC symbols. */ - if (h->forced_local && h->type == STT_GNU_IFUNC) - return TRUE; - - sec = readonly_dynrelocs (h); - if (sec != NULL) - { - struct bfd_link_info *info = (struct bfd_link_info *) inf; - - info->flags |= DF_TEXTREL; - /* xgettext:c-format */ - info->callbacks->minfo (_("%pB: dynamic relocation against `%pT' " - "in read-only section `%pA'\n"), - sec->owner, h->root.root.string, sec); - - if ((info->warn_shared_textrel && bfd_link_pic (info)) - || info->error_textrel) - /* xgettext:c-format */ - info->callbacks->einfo (_("%P: %pB: warning: relocation against `%s' " - "in read-only section `%pA'\n"), - sec->owner, h->root.root.string, sec); - - /* Not an error, just cut short the traversal. */ - return FALSE; - } - return TRUE; -} - /* Allocate space in .plt, .got and associated reloc sections for local dynamic relocs. */ @@ -756,7 +702,7 @@ { struct elf_x86_link_hash_table *ret; const struct elf_backend_data *bed; - bfd_size_type amt = sizeof (struct elf_x86_link_hash_table); + size_t amt = sizeof (struct elf_x86_link_hash_table); ret = (struct elf_x86_link_hash_table *) bfd_zmalloc (amt); if (ret == NULL) @@ -775,9 +721,6 @@ if (bed->target_id == X86_64_ELF_DATA) { ret->is_reloc_section = elf_x86_64_is_reloc_section; - ret->dt_reloc = DT_RELA; - ret->dt_reloc_sz = DT_RELASZ; - ret->dt_reloc_ent = DT_RELAENT; ret->got_entry_size = 8; ret->pcrel_plt = TRUE; ret->tls_get_addr = "__tls_get_addr"; @@ -802,9 +745,6 @@ else { ret->is_reloc_section = elf_i386_is_reloc_section; - ret->dt_reloc = DT_REL; - ret->dt_reloc_sz = DT_RELSZ; - ret->dt_reloc_ent = DT_RELENT; ret->sizeof_reloc = sizeof (Elf32_External_Rel); ret->got_entry_size = 4; ret->pcrel_plt = FALSE; @@ -815,8 +755,6 @@ ret->tls_get_addr = "___tls_get_addr"; } } - ret->target_id = bed->target_id; - ret->target_os = get_elf_x86_backend_data (abfd)->target_os; ret->loc_hash_table = htab_try_create (1024, _bfd_x86_elf_local_htab_hash, @@ -952,6 +890,100 @@ return _bfd_elf_link_check_relocs (abfd, info); } +bfd_boolean +_bfd_elf_x86_valid_reloc_p (asection *input_section, + struct bfd_link_info *info, + struct elf_x86_link_hash_table *htab, + const Elf_Internal_Rela *rel, + struct elf_link_hash_entry *h, + Elf_Internal_Sym *sym, + Elf_Internal_Shdr *symtab_hdr, + bfd_boolean *no_dynreloc_p) +{ + bfd_boolean valid_p = TRUE; + + *no_dynreloc_p = FALSE; + + /* Check If relocation against non-preemptible absolute symbol is + valid in PIC. FIXME: Can't use SYMBOL_REFERENCES_LOCAL_P since + it may call _bfd_elf_link_hide_sym_by_version and result in + ld-elfvers/ vers21 test failure. */ + if (bfd_link_pic (info) + && (h == NULL || SYMBOL_REFERENCES_LOCAL (info, h))) + { + const struct elf_backend_data *bed; + unsigned int r_type; + Elf_Internal_Rela irel; + + /* Skip non-absolute symbol. */ + if (h) + { + if (!ABS_SYMBOL_P (h)) + return valid_p; + } + else if (sym->st_shndx != SHN_ABS) + return valid_p; + + bed = get_elf_backend_data (input_section->owner); + r_type = ELF32_R_TYPE (rel->r_info); + irel = *rel; + + /* Only allow relocations against absolute symbol, which can be + resolved as absolute value + addend. GOTPCREL relocations + are allowed since absolute value + addend is stored in the + GOT slot. */ + if (bed->target_id == X86_64_ELF_DATA) + { + r_type &= ~R_X86_64_converted_reloc_bit; + valid_p = (r_type == R_X86_64_64 + || r_type == R_X86_64_32 + || r_type == R_X86_64_32S + || r_type == R_X86_64_16 + || r_type == R_X86_64_8 + || r_type == R_X86_64_GOTPCREL + || r_type == R_X86_64_GOTPCRELX + || r_type == R_X86_64_REX_GOTPCRELX); + if (!valid_p) + { + unsigned int r_symndx = htab->r_sym (rel->r_info); + irel.r_info = htab->r_info (r_symndx, r_type); + } + } + else + valid_p = (r_type == R_386_32 + || r_type == R_386_16 + || r_type == R_386_8); + + if (valid_p) + *no_dynreloc_p = TRUE; + else + { + const char *name; + arelent internal_reloc; + + if (!bed->elf_info_to_howto (input_section->owner, + &internal_reloc, &irel) + || internal_reloc.howto == NULL) + abort (); + + if (h) + name = h->root.root.string; + else + name = bfd_elf_sym_name (input_section->owner, symtab_hdr, + sym, NULL); + info->callbacks->einfo + /* xgettext:c-format */ + (_("%F%P: %pB: relocation %s against absolute symbol " + "`%s' in section `%pA' is disallowed\n"), + input_section->owner, internal_reloc.howto->name, name, + input_section); + bfd_set_error (bfd_error_bad_value); + } + } + + return valid_p; +} + /* Set the sizes of the dynamic sections. */ bfd_boolean @@ -1005,7 +1037,7 @@ linker script /DISCARD/, so we'll be discarding the relocs too. */ } - else if (htab->target_os == is_vxworks + else if (htab->elf.target_os == is_vxworks && strcmp (p->sec->output_section->name, ".tls_vars") == 0) { @@ -1020,8 +1052,7 @@ && (info->flags & DF_TEXTREL) == 0) { info->flags |= DF_TEXTREL; - if ((info->warn_shared_textrel && bfd_link_pic (info)) - || info->error_textrel) + if (bfd_link_textrel_check (info)) /* xgettext:c-format */ info->callbacks->einfo (_("%P: %pB: warning: relocation " @@ -1065,7 +1096,7 @@ || *local_tls_type == GOT_TLS_IE_BOTH) s->size += htab->got_entry_size; } - if (bfd_link_pic (info) + if ((bfd_link_pic (info) && *local_tls_type != GOT_ABS) || GOT_TLS_GD_ANY_P (*local_tls_type) || (*local_tls_type & GOT_TLS_IE)) { @@ -1078,7 +1109,7 @@ { htab->elf.srelplt->size += htab->sizeof_reloc; if (bed->target_id == X86_64_ELF_DATA) - htab->tlsdesc_plt = (bfd_vma) -1; + htab->elf.tlsdesc_plt = (bfd_vma) -1; } } } @@ -1125,22 +1156,22 @@ else if (htab->elf.irelplt) htab->next_irelative_index = htab->elf.irelplt->reloc_count - 1; - if (htab->tlsdesc_plt) + if (htab->elf.tlsdesc_plt) { /* NB: tlsdesc_plt is set only for x86-64. If we're not using lazy TLS relocations, don't generate the PLT and GOT entries they require. */ if ((info->flags & DF_BIND_NOW)) - htab->tlsdesc_plt = 0; + htab->elf.tlsdesc_plt = 0; else { - htab->tlsdesc_got = htab->elf.sgot->size; + htab->elf.tlsdesc_got = htab->elf.sgot->size; htab->elf.sgot->size += htab->got_entry_size; /* Reserve room for the initial entry. FIXME: we could probably do away with it in this case. */ if (htab->elf.splt->size == 0) htab->elf.splt->size = htab->plt.plt_entry_size; - htab->tlsdesc_plt = htab->elf.splt->size; + htab->elf.tlsdesc_plt = htab->elf.splt->size; htab->elf.splt->size += htab->plt.plt_entry_size; } } @@ -1164,7 +1195,8 @@ htab->elf.sgotplt->size = 0; /* Solaris requires to keep _GLOBAL_OFFSET_TABLE_ even if it isn't used. */ - if (htab->elf.hgot != NULL && htab->target_os != is_solaris) + if (htab->elf.hgot != NULL + && htab->elf.target_os != is_solaris) { /* Remove the unused _GLOBAL_OFFSET_TABLE_ from symbol table. */ @@ -1324,79 +1356,8 @@ + PLT_FDE_LEN_OFFSET)); } - if (htab->elf.dynamic_sections_created) - { - /* Add some entries to the .dynamic section. We fill in the - values later, in elf_{i386,x86_64}_finish_dynamic_sections, - but we must add the entries now so that we get the correct - size for the .dynamic section. The DT_DEBUG entry is filled - in by the dynamic linker and used by the debugger. */ -#define add_dynamic_entry(TAG, VAL) \ - _bfd_elf_add_dynamic_entry (info, TAG, VAL) - - if (bfd_link_executable (info)) - { - if (!add_dynamic_entry (DT_DEBUG, 0)) - return FALSE; - } - - if (htab->elf.splt->size != 0) - { - /* DT_PLTGOT is used by prelink even if there is no PLT - relocation. */ - if (!add_dynamic_entry (DT_PLTGOT, 0)) - return FALSE; - } - - if (htab->elf.srelplt->size != 0) - { - if (!add_dynamic_entry (DT_PLTRELSZ, 0) - || !add_dynamic_entry (DT_PLTREL, htab->dt_reloc) - || !add_dynamic_entry (DT_JMPREL, 0)) - return FALSE; - } - - if (htab->tlsdesc_plt - && (!add_dynamic_entry (DT_TLSDESC_PLT, 0) - || !add_dynamic_entry (DT_TLSDESC_GOT, 0))) - return FALSE; - - if (relocs) - { - if (!add_dynamic_entry (htab->dt_reloc, 0) - || !add_dynamic_entry (htab->dt_reloc_sz, 0) - || !add_dynamic_entry (htab->dt_reloc_ent, - htab->sizeof_reloc)) - return FALSE; - - /* If any dynamic relocs apply to a read-only section, - then we need a DT_TEXTREL entry. */ - if ((info->flags & DF_TEXTREL) == 0) - elf_link_hash_traverse (&htab->elf, maybe_set_textrel, info); - - if ((info->flags & DF_TEXTREL) != 0) - { - if (htab->readonly_dynrelocs_against_ifunc) - { - info->callbacks->einfo - (_("%P%X: read-only segment has dynamic IFUNC relocations;" - " recompile with %s\n"), - bfd_link_dll (info) ? "-fPIC" : "-fPIE"); - bfd_set_error (bfd_error_bad_value); - return FALSE; - } - - if (!add_dynamic_entry (DT_TEXTREL, 0)) - return FALSE; - } - } - if (htab->target_os == is_vxworks - && !elf_vxworks_add_dynamic_entries (output_bfd, info)) - return FALSE; - } -#undef add_dynamic_entry - - return TRUE; + return _bfd_elf_maybe_vxworks_add_dynamic_tags (output_bfd, info, + relocs); } /* Finish up the x86 dynamic sections. */ @@ -1482,7 +1443,7 @@ switch (dyn.d_tag) { default: - if (htab->target_os == is_vxworks + if (htab->elf.target_os == is_vxworks && elf_vxworks_finish_dynamic_entry (output_bfd, &dyn)) break; continue; @@ -1504,13 +1465,13 @@ case DT_TLSDESC_PLT: s = htab->elf.splt; dyn.d_un.d_ptr = s->output_section->vma + s->output_offset - + htab->tlsdesc_plt; + + htab->elf.tlsdesc_plt; break; case DT_TLSDESC_GOT: s = htab->elf.sgot; dyn.d_un.d_ptr = s->output_section->vma + s->output_offset - + htab->tlsdesc_got; + + htab->elf.tlsdesc_got; break; } @@ -1688,37 +1649,6 @@ edir = (struct elf_x86_link_hash_entry *) dir; eind = (struct elf_x86_link_hash_entry *) ind; - if (eind->dyn_relocs != NULL) - { - if (edir->dyn_relocs != NULL) - { - struct elf_dyn_relocs **pp; - struct elf_dyn_relocs *p; - - /* Add reloc counts against the indirect sym to the direct sym - list. Merge any entries against the same section. */ - for (pp = &eind->dyn_relocs; (p = *pp) != NULL; ) - { - struct elf_dyn_relocs *q; - - for (q = edir->dyn_relocs; q != NULL; q = q->next) - if (q->sec == p->sec) - { - q->pc_count += p->pc_count; - q->count += p->count; - *pp = p->next; - break; - } - if (q == NULL) - pp = &p->next; - } - *pp = edir->dyn_relocs; - } - - edir->dyn_relocs = eind->dyn_relocs; - eind->dyn_relocs = NULL; - } - if (ind->root.type == bfd_link_hash_indirect && dir->got.refcount <= 0) { @@ -1855,7 +1785,7 @@ struct elf_dyn_relocs **pp; eh = (struct elf_x86_link_hash_entry *) h; - for (pp = &eh->dyn_relocs; (p = *pp) != NULL; ) + for (pp = &h->dyn_relocs; (p = *pp) != NULL; ) { pc_count += p->pc_count; p->count -= p->pc_count; @@ -1978,12 +1908,12 @@ if (ELIMINATE_COPY_RELOCS && (bed->target_id == X86_64_ELF_DATA || (!eh->gotoff_ref - && htab->target_os != is_vxworks))) + && htab->elf.target_os != is_vxworks))) { /* If we don't find any dynamic relocs in read-only sections, then we'll be keeping the dynamic relocs and avoiding the copy reloc. */ - if (!readonly_dynrelocs (h)) + if (!_bfd_elf_readonly_dynrelocs (h)) { h->non_got_ref = 0; return TRUE; @@ -2347,15 +2277,14 @@ /* PLT entries with R_386_TLS_DESC relocations are skipped. */ if (n == 0) { -bad_return: + bad_return: count = -1; } else count = n; for (j = 0; plts[j].name != NULL; j++) - if (plts[j].contents != NULL) - free (plts[j].contents); + free (plts[j].contents); free (dynrelbuf); @@ -2626,7 +2555,7 @@ if (!bfd_set_section_alignment (sec, class_align)) { -error_alignment: + error_alignment: info->callbacks->einfo (_("%F%pA: failed to align section\n"), sec); } @@ -2754,7 +2683,7 @@ still be used with LD_AUDIT or LD_PROFILE if PLT entry is used for canonical function address. */ htab->plt.has_plt0 = 1; - normal_target = htab->target_os == is_normal; + normal_target = htab->elf.target_os == is_normal; if (normal_target) { @@ -2817,7 +2746,7 @@ htab->plt.eh_frame_plt = htab->lazy_plt->eh_frame_plt; } - if (htab->target_os == is_vxworks + if (htab->elf.target_os == is_vxworks && !elf_vxworks_create_dynamic_sections (dynobj, info, &htab->srelplt2)) { @@ -2866,9 +2795,6 @@ htab->interp = s; } - /* Don't change PLT section alignment for NaCl since it uses - 64-byte PLT entry and sets PLT section alignment to 32 - bytes. Don't create additional PLT sections for NaCl. */ if (normal_target) { flagword pltflags = (bed->dynamic_sec_flags @@ -2902,8 +2828,7 @@ if (use_ibt_plt) { /* Create the second PLT for Intel IBT support. IBT - PLT is supported only for non-NaCl target and is - is needed only for lazy binding. */ + PLT is needed only for lazy binding. */ sec = bfd_make_section_anyway_with_flags (dynobj, ".plt.sec", pltflags); @@ -2916,8 +2841,8 @@ else if (htab->params->bndplt && ABI_64_P (dynobj)) { /* Create the second PLT for Intel MPX support. MPX - PLT is supported only for non-NaCl target in 64-bit - mode and is needed only for lazy binding. */ + PLT is supported only in 64-bit mode and is needed + only for lazy binding. */ sec = bfd_make_section_anyway_with_flags (dynobj, ".plt.sec", pltflags); @@ -2998,6 +2923,23 @@ : bed->plt_alignment); } + if (bfd_link_executable (info) + && !info->nointerp + && !htab->params->has_dynamic_linker + && htab->params->static_before_all_inputs) + { + /* Report error for dynamic input objects if -static is passed at + command-line before all input files without --dynamic-linker + unless --no-dynamic-linker is used. */ + bfd *abfd; + + for (abfd = info->input_bfds; abfd != NULL; abfd = abfd->link.next) + if ((abfd->flags & DYNAMIC)) + info->callbacks->einfo + (_("%X%P: attempted static link of dynamic object `%pB'\n"), + abfd); + } + return pbfd; } diff -Nru gdb-9.1/bfd/elfxx-x86.h gdb-10.2/bfd/elfxx-x86.h --- gdb-9.1/bfd/elfxx-x86.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/elfxx-x86.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* x86 specific support for ELF - Copyright (C) 2017-2019 Free Software Foundation, Inc. + Copyright (C) 2017-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -119,19 +119,23 @@ Copy dynamic function pointer relocations. Don't generate dynamic relocations against resolved undefined weak symbols in PIE, except when PC32_RELOC is TRUE. Undefined weak symbol is bound locally - when PIC is false. */ -#define GENERATE_DYNAMIC_RELOCATION_P(INFO, EH, R_TYPE, \ + when PIC is false. Don't generate dynamic relocations against + non-preemptible absolute symbol. */ +#define GENERATE_DYNAMIC_RELOCATION_P(INFO, EH, R_TYPE, SEC, \ NEED_COPY_RELOC_IN_PIE, \ RESOLVED_TO_ZERO, PC32_RELOC) \ ((bfd_link_pic (INFO) \ + && !(bfd_is_abs_section (SEC) \ + && ((EH) == NULL \ + || SYMBOL_REFERENCES_LOCAL (INFO, &(EH)->elf))) \ && !(NEED_COPY_RELOC_IN_PIE) \ && ((EH) == NULL \ || ((ELF_ST_VISIBILITY ((EH)->elf.other) == STV_DEFAULT \ && (!(RESOLVED_TO_ZERO) || PC32_RELOC)) \ || (EH)->elf.root.type != bfd_link_hash_undefweak)) \ - && ((!X86_PCREL_TYPE_P (R_TYPE) \ - && !X86_SIZE_TYPE_P (R_TYPE)) \ - || ! SYMBOL_CALLS_LOCAL ((INFO), &(EH)->elf))) \ + && ((!X86_PCREL_TYPE_P (R_TYPE) && !X86_SIZE_TYPE_P (R_TYPE)) \ + || ! SYMBOL_CALLS_LOCAL ((INFO), \ + (struct elf_link_hash_entry *) (EH)))) \ || (ELIMINATE_COPY_RELOCS \ && !bfd_link_pic (INFO) \ && (EH) != NULL \ @@ -170,17 +174,25 @@ || ((struct elf_x86_link_hash_entry *) (H))->linker_def \ || ELF_COMMON_DEF_P (H)) +/* Return TRUE if the symbol described by a linker hash entry H is + going to be absolute. Similar to bfd_is_abs_symbol, but excluding + all linker-script defined symbols. */ +#define ABS_SYMBOL_P(H) \ + (bfd_is_abs_symbol (&(H)->root) && !(H)->root.ldscript_def) + /* TRUE if relative relocation should be generated. GOT reference to global symbol in PIC will lead to dynamic symbol. It becomes a problem when "time" or "times" is defined as a variable in an executable, clashing with functions of the same name in libc. If a symbol isn't undefined weak symbol, don't make it dynamic in PIC and - generate relative relocation. */ + generate relative relocation. Don't generate relative relocation + against non-preemptible absolute symbol. */ #define GENERATE_RELATIVE_RELOC_P(INFO, H) \ ((H)->dynindx == -1 \ && !(H)->forced_local \ && (H)->root.type != bfd_link_hash_undefweak \ - && bfd_link_pic (INFO)) + && bfd_link_pic (INFO) \ + && !ABS_SYMBOL_P (H)) /* TRUE if this is a pointer reference to a local IFUNC. */ #define POINTER_LOCAL_IFUNC_P(INFO, H) \ @@ -238,9 +250,6 @@ { struct elf_link_hash_entry elf; - /* Track dynamic relocs copied for this symbol. */ - struct elf_dyn_relocs *dyn_relocs; - unsigned char tls_type; /* Bit 0: Symbol has no GOT nor PLT relocations. @@ -414,6 +423,7 @@ #define GOT_TLS_IE_NEG 6 #define GOT_TLS_IE_BOTH 7 #define GOT_TLS_GDESC 8 +#define GOT_ABS 9 #define GOT_TLS_GD_BOTH_P(type) \ ((type) == (GOT_TLS_GD | GOT_TLS_GDESC)) #define GOT_TLS_GD_P(type) \ @@ -426,14 +436,6 @@ #define elf_x86_hash_entry(ent) \ ((struct elf_x86_link_hash_entry *)(ent)) -enum elf_x86_target_os -{ - is_normal, - is_solaris, - is_vxworks, - is_nacl -}; - /* x86 ELF linker hash table. */ struct elf_x86_link_hash_table @@ -466,9 +468,6 @@ /* The amount of space used by the jump slots in the GOT. */ bfd_vma sgotplt_jump_table_size; - /* Small local sym cache. */ - struct sym_cache sym_cache; - /* _TLS_MODULE_BASE_ symbol. */ struct bfd_link_hash_entry *tls_module_base; @@ -476,19 +475,11 @@ htab_t loc_hash_table; void * loc_hash_memory; - /* The offset into sgot of the GOT entry used by the PLT entry - above. */ - bfd_vma tlsdesc_got; - /* The index of the next R_X86_64_JUMP_SLOT entry in .rela.plt. */ bfd_vma next_jump_slot_index; /* The index of the next R_X86_64_IRELATIVE entry in .rela.plt. */ bfd_vma next_irelative_index; - /* TRUE if there are dynamic relocs against IFUNC symbols that apply - to read-only sections. */ - bfd_boolean readonly_dynrelocs_against_ifunc; - /* The (unloaded but important) .rel.plt.unloaded section on VxWorks. This is used for i386 only. */ asection *srelplt2; @@ -497,12 +488,6 @@ is only used for i386. */ bfd_vma next_tls_desc_index; - /* The offset into splt of the PLT entry for the TLS descriptor - resolver. Special values are 0, if not necessary (or not found - to be necessary yet), and -1 if needed but not determined - yet. This is only used for x86-64. */ - bfd_vma tlsdesc_plt; - /* Value used to fill the unused bytes of the first PLT entry. This is only used for i386. */ bfd_byte plt0_pad_byte; @@ -521,12 +506,7 @@ bfd_vma (*r_info) (bfd_vma, bfd_vma); bfd_vma (*r_sym) (bfd_vma); bfd_boolean (*is_reloc_section) (const char *); - enum elf_target_id target_id; - enum elf_x86_target_os target_os; unsigned int sizeof_reloc; - unsigned int dt_reloc; - unsigned int dt_reloc_sz; - unsigned int dt_reloc_ent; unsigned int got_entry_size; unsigned int pointer_r_type; int dynamic_interpreter_size; @@ -537,18 +517,6 @@ struct elf_linker_x86_params *params; }; -/* Architecture-specific backend data for x86. */ - -struct elf_x86_backend_data -{ - /* Target system. */ - enum elf_x86_target_os target_os; -}; - -#define get_elf_x86_backend_data(abfd) \ - ((const struct elf_x86_backend_data *) \ - get_elf_backend_data (abfd)->arch_data) - struct elf_x86_init_table { /* The lazy PLT layout. */ @@ -601,6 +569,9 @@ long count; }; +/* Set if a relocation is converted from a GOTPCREL relocation. */ +#define R_X86_64_converted_reloc_bit (1 << 7) + #define elf_x86_tdata(abfd) \ ((struct elf_x86_obj_tdata *) (abfd)->tdata.any) @@ -616,7 +587,7 @@ #define is_x86_elf(bfd, htab) \ (bfd_get_flavour (bfd) == bfd_target_elf_flavour \ && elf_tdata (bfd) != NULL \ - && elf_object_id (bfd) == (htab)->target_id) + && elf_object_id (bfd) == (htab)->elf.hash_table_id) extern bfd_boolean _bfd_x86_elf_mkobject (bfd *); @@ -652,6 +623,11 @@ extern bfd_boolean _bfd_x86_elf_link_check_relocs (bfd *, struct bfd_link_info *); +extern bfd_boolean _bfd_elf_x86_valid_reloc_p + (asection *, struct bfd_link_info *, struct elf_x86_link_hash_table *, + const Elf_Internal_Rela *, struct elf_link_hash_entry *, + Elf_Internal_Sym *, Elf_Internal_Shdr *, bfd_boolean *); + extern bfd_boolean _bfd_x86_elf_size_dynamic_sections (bfd *, struct bfd_link_info *); diff -Nru gdb-9.1/bfd/format.c gdb-10.2/bfd/format.c --- gdb-9.1/bfd/format.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/format.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Generic BFD support for file formats. - Copyright (C) 1990-2019 Free Software Foundation, Inc. + Copyright (C) 1990-2020 Free Software Foundation, Inc. Written by Cygnus Support. This file is part of BFD, the Binary File Descriptor library. @@ -106,6 +106,7 @@ unsigned int section_id; struct bfd_hash_table section_htab; const struct bfd_build_id *build_id; + bfd_cleanup cleanup; }; /* When testing an object for compatibility with a particular target @@ -118,7 +119,8 @@ the subset. */ static bfd_boolean -bfd_preserve_save (bfd *abfd, struct bfd_preserve *preserve) +bfd_preserve_save (bfd *abfd, struct bfd_preserve *preserve, + bfd_cleanup cleanup) { preserve->tdata = abfd->tdata.any; preserve->arch_info = abfd->arch_info; @@ -130,6 +132,7 @@ preserve->section_htab = abfd->section_htab; preserve->marker = bfd_alloc (abfd, 1); preserve->build_id = abfd->build_id; + preserve->cleanup = cleanup; if (preserve->marker == NULL) return FALSE; @@ -140,18 +143,20 @@ /* Clear out a subset of BFD state. */ static void -bfd_reinit (bfd *abfd, unsigned int section_id) +bfd_reinit (bfd *abfd, unsigned int section_id, bfd_cleanup cleanup) { + _bfd_section_id = section_id; + if (cleanup) + cleanup (abfd); abfd->tdata.any = NULL; abfd->arch_info = &bfd_default_arch_struct; abfd->flags &= BFD_FLAGS_SAVED; bfd_section_list_clear (abfd); - _bfd_section_id = section_id; } /* Restores bfd state saved by bfd_preserve_save. */ -static void +static bfd_cleanup bfd_preserve_restore (bfd *abfd, struct bfd_preserve *preserve) { bfd_hash_table_free (&abfd->section_htab); @@ -170,6 +175,7 @@ its arg, as well as its arg. */ bfd_release (abfd, preserve->marker); preserve->marker = NULL; + return preserve->cleanup; } /* Called when the bfd state saved by bfd_preserve_save is no longer @@ -178,6 +184,15 @@ static void bfd_preserve_finish (bfd *abfd ATTRIBUTE_UNUSED, struct bfd_preserve *preserve) { + if (preserve->cleanup) + { + /* Run the cleanup, assuming that all it will need is the + tdata at the time the cleanup was returned. */ + void *tdata = abfd->tdata.any; + abfd->tdata.any = preserve->tdata; + preserve->cleanup (abfd); + abfd->tdata.any = tdata; + } /* It would be nice to be able to free more memory here, eg. old tdata, but that's not possible since these blocks are sitting inside bfd_alloc'd memory. The section hash is on a separate @@ -219,7 +234,8 @@ int match_count, best_count, best_match; int ar_match_index; unsigned int initial_section_id = _bfd_section_id; - struct bfd_preserve preserve; + struct bfd_preserve preserve, preserve_match; + bfd_cleanup cleanup = NULL; if (matching != NULL) *matching = NULL; @@ -236,7 +252,7 @@ if (matching != NULL || *bfd_associated_vector != NULL) { - bfd_size_type amt; + size_t amt; amt = sizeof (*matching_vector) * 2 * _bfd_target_vector_entries; matching_vector = (const bfd_target **) bfd_malloc (amt); @@ -247,7 +263,10 @@ /* Presume the answer is yes. */ abfd->format = format; save_targ = abfd->xvec; - preserve.marker = NULL; + + preserve_match.marker = NULL; + if (!bfd_preserve_save (abfd, &preserve, NULL)) + goto err_ret; /* If the target type was explicitly specified, just check that target. */ if (!abfd->target_defaulted) @@ -255,9 +274,9 @@ if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0) /* rewind! */ goto err_ret; - right_targ = BFD_SEND_FMT (abfd, _bfd_check_format, (abfd)); + cleanup = BFD_SEND_FMT (abfd, _bfd_check_format, (abfd)); - if (right_targ) + if (cleanup) goto ok_ret; /* For a long time the code has dropped through to check all @@ -288,7 +307,7 @@ for (target = bfd_target_vector; *target != NULL; target++) { - const bfd_target *temp; + void **high_water; /* The binary target matches anything, so don't return it when searching. Don't match the plugin target if we have another @@ -305,7 +324,15 @@ /* If we already tried a match, the bfd is modified and may have sections attached, which will confuse the next _bfd_check_format call. */ - bfd_reinit (abfd, initial_section_id); + bfd_reinit (abfd, initial_section_id, cleanup); + /* Free bfd_alloc memory too. If we have matched and preserved + a target then the high water mark is that much higher. */ + if (preserve_match.marker) + high_water = &preserve_match.marker; + else + high_water = &preserve.marker; + bfd_release (abfd, *high_water); + *high_water = bfd_alloc (abfd, 1); /* Change BFD's target temporarily. */ abfd->xvec = *target; @@ -313,16 +340,10 @@ if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0) goto err_ret; - /* If _bfd_check_format neglects to set bfd_error, assume - bfd_error_wrong_format. We didn't used to even pay any - attention to bfd_error, so I suspect that some - _bfd_check_format might have this problem. */ - bfd_set_error (bfd_error_wrong_format); - - temp = BFD_SEND_FMT (abfd, _bfd_check_format, (abfd)); - if (temp) + cleanup = BFD_SEND_FMT (abfd, _bfd_check_format, (abfd)); + if (cleanup) { - int match_priority = temp->match_priority; + int match_priority = abfd->xvec->match_priority; #if BFD_SUPPORTS_PLUGINS /* If this object can be handled by a plugin, give that the lowest priority; objects both handled by a plugin and @@ -332,10 +353,6 @@ match_priority = (*target)->match_priority; #endif - match_targ = temp; - if (preserve.marker != NULL) - bfd_preserve_finish (abfd, &preserve); - if (abfd->format != bfd_archive || (bfd_has_map (abfd) && bfd_get_error () != bfd_error_wrong_object_format)) @@ -343,11 +360,11 @@ /* If this is the default target, accept it, even if other targets might match. People who want those other targets have to set the GNUTARGET variable. */ - if (temp == bfd_default_vector[0]) + if (abfd->xvec == bfd_default_vector[0]) goto ok_ret; if (matching_vector) - matching_vector[match_count] = temp; + matching_vector[match_count] = abfd->xvec; match_count++; if (match_priority < best_match) @@ -358,7 +375,7 @@ if (match_priority <= best_match) { /* This format checks out as ok! */ - right_targ = temp; + right_targ = abfd->xvec; best_count++; } } @@ -374,11 +391,14 @@ ar_match_index++; } - if (!bfd_preserve_save (abfd, &preserve)) - goto err_ret; + if (preserve_match.marker == NULL) + { + match_targ = abfd->xvec; + if (!bfd_preserve_save (abfd, &preserve_match, cleanup)) + goto err_ret; + cleanup = NULL; + } } - else if (bfd_get_error () != bfd_error_wrong_format) - goto err_ret; } if (best_count == 1) @@ -448,22 +468,27 @@ really shouldn't iterate on live bfd's. Note that saving the whole bfd and restoring it would be even worse; the first thing you notice is that the cached bfd file position gets out of sync. */ - if (preserve.marker != NULL) - bfd_preserve_restore (abfd, &preserve); + if (preserve_match.marker != NULL) + cleanup = bfd_preserve_restore (abfd, &preserve_match); if (match_count == 1) { abfd->xvec = right_targ; /* If we come out of the loop knowing that the last target that matched is the one we want, then ABFD should still be in a usable - state (except possibly for XVEC). */ + state (except possibly for XVEC). This is not just an + optimisation. In the case of plugins a match against the + plugin target can result in the bfd being changed such that + it no longer matches the plugin target, nor will it match + RIGHT_TARG again. */ if (match_targ != right_targ) { - bfd_reinit (abfd, initial_section_id); + bfd_reinit (abfd, initial_section_id, cleanup); + bfd_release (abfd, preserve.marker); if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0) goto err_ret; - match_targ = BFD_SEND_FMT (abfd, _bfd_check_format, (abfd)); - BFD_ASSERT (match_targ != NULL); + cleanup = BFD_SEND_FMT (abfd, _bfd_check_format, (abfd)); + BFD_ASSERT (cleanup != NULL); } ok_ret: @@ -475,8 +500,10 @@ if (abfd->direction == both_direction) abfd->output_has_begun = TRUE; - if (matching_vector) - free (matching_vector); + free (matching_vector); + if (preserve_match.marker != NULL) + bfd_preserve_finish (abfd, &preserve_match); + bfd_preserve_finish (abfd, &preserve); /* File position has moved, BTW. */ return TRUE; @@ -487,12 +514,14 @@ err_unrecog: bfd_set_error (bfd_error_file_not_recognized); err_ret: + if (cleanup) + cleanup (abfd); abfd->xvec = save_targ; abfd->format = bfd_unknown; - if (matching_vector) - free (matching_vector); - if (preserve.marker != NULL) - bfd_preserve_restore (abfd, &preserve); + free (matching_vector); + if (preserve_match.marker != NULL) + bfd_preserve_finish (abfd, &preserve_match); + bfd_preserve_restore (abfd, &preserve); return FALSE; } @@ -513,6 +542,13 @@ *(const char **) &matching_vector[match_count] = name; } } + else + free (matching_vector); + if (cleanup) + cleanup (abfd); + if (preserve_match.marker != NULL) + bfd_preserve_finish (abfd, &preserve_match); + bfd_preserve_restore (abfd, &preserve); return FALSE; } diff -Nru gdb-9.1/bfd/gen-aout.c gdb-10.2/bfd/gen-aout.c --- gdb-9.1/bfd/gen-aout.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/gen-aout.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Generate parameters for an a.out system. - Copyright (C) 1990-2019 Free Software Foundation, Inc. + Copyright (C) 1990-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/genlink.h gdb-10.2/bfd/genlink.h --- gdb-9.1/bfd/genlink.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/genlink.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* genlink.h -- interface to the BFD generic linker - Copyright (C) 1993-2019 Free Software Foundation, Inc. + Copyright (C) 1993-2020 Free Software Foundation, Inc. Written by Ian Lance Taylor, Cygnus Support. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/hash.c gdb-10.2/bfd/hash.c --- gdb-9.1/bfd/hash.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/hash.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* hash.c -- hash table routines for BFD - Copyright (C) 1993-2019 Free Software Foundation, Inc. + Copyright (C) 1993-2020 Free Software Foundation, Inc. Written by Steve Chamberlain This file is part of BFD, the Binary File Descriptor library. @@ -664,19 +664,18 @@ unsigned long bfd_hash_set_default_size (unsigned long hash_size) { - /* Extend this prime list if you want more granularity of hash table size. */ - static const unsigned long hash_size_primes[] = - { - 31, 61, 127, 251, 509, 1021, 2039, 4091, 8191, 16381, 32749, 65537 - }; - unsigned int _index; - - /* Work out best prime number near the hash_size. */ - for (_index = 0; _index < ARRAY_SIZE (hash_size_primes) - 1; ++_index) - if (hash_size <= hash_size_primes[_index]) - break; - - bfd_default_hash_table_size = hash_size_primes[_index]; + /* These silly_size values result in around 1G and 32M of memory + being allocated for the table of pointers. Note that the number + of elements allocated will be almost twice the size of any power + of two chosen here. */ + unsigned long silly_size = sizeof (size_t) > 4 ? 0x4000000 : 0x400000; + if (hash_size > silly_size) + hash_size = silly_size; + else if (hash_size != 0) + hash_size--; + hash_size = higher_prime_number (hash_size); + BFD_ASSERT (hash_size != 0); + bfd_default_hash_table_size = hash_size; return bfd_default_hash_table_size; } @@ -762,7 +761,7 @@ _bfd_stringtab_init (void) { struct bfd_strtab_hash *table; - bfd_size_type amt = sizeof (* table); + size_t amt = sizeof (* table); table = (struct bfd_strtab_hash *) bfd_malloc (amt); if (table == NULL) diff -Nru gdb-9.1/bfd/host-aout.c gdb-10.2/bfd/host-aout.c --- gdb-9.1/bfd/host-aout.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/host-aout.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD backend for local host's a.out binaries - Copyright (C) 1990-2019 Free Software Foundation, Inc. + Copyright (C) 1990-2020 Free Software Foundation, Inc. Written by Cygnus Support. Probably John Gilmore's fault. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/hosts/alphalinux.h gdb-10.2/bfd/hosts/alphalinux.h --- gdb-9.1/bfd/hosts/alphalinux.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/hosts/alphalinux.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2007-2019 Free Software Foundation, Inc. +/* Copyright (C) 2007-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/hosts/alphavms.h gdb-10.2/bfd/hosts/alphavms.h --- gdb-9.1/bfd/hosts/alphavms.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/hosts/alphavms.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* alphavms.h -- BFD definitions for an openVMS host - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. Written by Klaus Kämpf (kkaempf@progis.de) of proGIS Softwareentwicklung, Aachen, Germany diff -Nru gdb-9.1/bfd/hosts/decstation.h gdb-10.2/bfd/hosts/decstation.h --- gdb-9.1/bfd/hosts/decstation.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/hosts/decstation.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2007-2019 Free Software Foundation, Inc. +/* Copyright (C) 2007-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/hosts/dpx2.h gdb-10.2/bfd/hosts/dpx2.h --- gdb-9.1/bfd/hosts/dpx2.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/hosts/dpx2.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2007-2019 Free Software Foundation, Inc. +/* Copyright (C) 2007-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/hosts/i386bsd.h gdb-10.2/bfd/hosts/i386bsd.h --- gdb-9.1/bfd/hosts/i386bsd.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/hosts/i386bsd.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2007-2019 Free Software Foundation, Inc. +/* Copyright (C) 2007-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/hosts/i386linux.h gdb-10.2/bfd/hosts/i386linux.h --- gdb-9.1/bfd/hosts/i386linux.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/hosts/i386linux.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2007-2019 Free Software Foundation, Inc. +/* Copyright (C) 2007-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/hosts/i386mach3.h gdb-10.2/bfd/hosts/i386mach3.h --- gdb-9.1/bfd/hosts/i386mach3.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/hosts/i386mach3.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2007-2019 Free Software Foundation, Inc. +/* Copyright (C) 2007-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/hosts/i386sco.h gdb-10.2/bfd/hosts/i386sco.h --- gdb-9.1/bfd/hosts/i386sco.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/hosts/i386sco.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2007-2019 Free Software Foundation, Inc. +/* Copyright (C) 2007-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/hosts/m68klinux.h gdb-10.2/bfd/hosts/m68klinux.h --- gdb-9.1/bfd/hosts/m68klinux.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/hosts/m68klinux.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2007-2019 Free Software Foundation, Inc. +/* Copyright (C) 2007-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/hosts/mipsbsd.h gdb-10.2/bfd/hosts/mipsbsd.h --- gdb-9.1/bfd/hosts/mipsbsd.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/hosts/mipsbsd.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2007-2019 Free Software Foundation, Inc. +/* Copyright (C) 2007-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/hosts/mipsmach3.h gdb-10.2/bfd/hosts/mipsmach3.h --- gdb-9.1/bfd/hosts/mipsmach3.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/hosts/mipsmach3.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2007-2019 Free Software Foundation, Inc. +/* Copyright (C) 2007-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/hosts/news-mips.h gdb-10.2/bfd/hosts/news-mips.h --- gdb-9.1/bfd/hosts/news-mips.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/hosts/news-mips.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2007-2019 Free Software Foundation, Inc. +/* Copyright (C) 2007-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/hosts/pc532mach.h gdb-10.2/bfd/hosts/pc532mach.h --- gdb-9.1/bfd/hosts/pc532mach.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/hosts/pc532mach.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2007-2019 Free Software Foundation, Inc. +/* Copyright (C) 2007-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/hosts/riscos.h gdb-10.2/bfd/hosts/riscos.h --- gdb-9.1/bfd/hosts/riscos.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/hosts/riscos.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2007-2019 Free Software Foundation, Inc. +/* Copyright (C) 2007-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/hosts/symmetry.h gdb-10.2/bfd/hosts/symmetry.h --- gdb-9.1/bfd/hosts/symmetry.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/hosts/symmetry.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2007-2019 Free Software Foundation, Inc. +/* Copyright (C) 2007-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/hosts/vaxbsd.h gdb-10.2/bfd/hosts/vaxbsd.h --- gdb-9.1/bfd/hosts/vaxbsd.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/hosts/vaxbsd.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2019 Free Software Foundation, Inc. +/* Copyright (C) 2005-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/hosts/vaxlinux.h gdb-10.2/bfd/hosts/vaxlinux.h --- gdb-9.1/bfd/hosts/vaxlinux.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/hosts/vaxlinux.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2019 Free Software Foundation, Inc. +/* Copyright (C) 2005-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/hosts/vaxult2.h gdb-10.2/bfd/hosts/vaxult2.h --- gdb-9.1/bfd/hosts/vaxult2.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/hosts/vaxult2.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2007-2019 Free Software Foundation, Inc. +/* Copyright (C) 2007-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/hosts/vaxult.h gdb-10.2/bfd/hosts/vaxult.h --- gdb-9.1/bfd/hosts/vaxult.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/hosts/vaxult.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2007-2019 Free Software Foundation, Inc. +/* Copyright (C) 2007-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/hosts/x86-64linux.h gdb-10.2/bfd/hosts/x86-64linux.h --- gdb-9.1/bfd/hosts/x86-64linux.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/hosts/x86-64linux.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2006-2019 Free Software Foundation, Inc. +/* Copyright (C) 2006-2020 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or diff -Nru gdb-9.1/bfd/hppabsd-core.c gdb-10.2/bfd/hppabsd-core.c --- gdb-9.1/bfd/hppabsd-core.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/hppabsd-core.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD back-end for HPPA BSD core files. - Copyright (C) 1993-2019 Free Software Foundation, Inc. + Copyright (C) 1993-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -90,7 +90,7 @@ return asect; } -static const bfd_target * +static bfd_cleanup hppabsd_core_core_file_p (bfd *abfd) { int val; @@ -181,7 +181,7 @@ strncpy (core_command (abfd), u.u_comm, MAXCOMLEN + 1); core_signal (abfd) = u.u_code; - return abfd->xvec; + return _bfd_no_cleanup; fail: bfd_release (abfd, abfd->tdata.any); diff -Nru gdb-9.1/bfd/hpux-core.c gdb-10.2/bfd/hpux-core.c --- gdb-9.1/bfd/hpux-core.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/hpux-core.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD back-end for HP/UX core files. - Copyright (C) 1993-2019 Free Software Foundation, Inc. + Copyright (C) 1993-2020 Free Software Foundation, Inc. Written by Stu Grossman, Cygnus Support. Converted to back-end form by Ian Lance Taylor, Cygnus SUpport @@ -106,7 +106,7 @@ static asection *make_bfd_asection (bfd *, const char *, flagword, bfd_size_type, bfd_vma, unsigned int); -static const bfd_target *hpux_core_core_file_p (bfd *); +static bfd_cleanup hpux_core_core_file_p (bfd *); static char *hpux_core_core_file_failing_command (bfd *); static int hpux_core_core_file_failing_signal (bfd *); static void swap_abort (void); @@ -157,7 +157,7 @@ in which the core file is generated by some non-hpux application. (I am just guessing here!) */ -static const bfd_target * +static bfd_cleanup hpux_core_core_file_p (bfd *abfd) { int good_sections = 0; @@ -342,7 +342,7 @@ " As a result, some information may be unavailable.\n", abfd); - return abfd->xvec; + return _bfd_no_cleanup; fail: bfd_release (abfd, core_hdr (abfd)); diff -Nru gdb-9.1/bfd/i386aout.c gdb-10.2/bfd/i386aout.c --- gdb-9.1/bfd/i386aout.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/i386aout.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD back-end for i386 a.out binaries. - Copyright (C) 1990-2019 Free Software Foundation, Inc. + Copyright (C) 1990-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -38,7 +38,6 @@ the tokens. */ #define MY(OP) CONCAT2 (i386_aout_,OP) #define TARGETNAME "a.out-i386" -#define NO_WRITE_HEADER_KLUDGE 1 #include "sysdep.h" #include "bfd.h" diff -Nru gdb-9.1/bfd/i386bsd.c gdb-10.2/bfd/i386bsd.c --- gdb-9.1/bfd/i386bsd.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/i386bsd.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD back-end for i386 a.out binaries under BSD. - Copyright (C) 1990-2019 Free Software Foundation, Inc. + Copyright (C) 1990-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/i386lynx.c gdb-10.2/bfd/i386lynx.c --- gdb-9.1/bfd/i386lynx.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/i386lynx.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD back-end for i386 a.out binaries under LynxOS. - Copyright (C) 1990-2019 Free Software Foundation, Inc. + Copyright (C) 1990-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -399,7 +399,7 @@ bfd_set_error (bfd_error_invalid_operation); return FALSE; -doit: + doit: if (bfd_seek (abfd, asect->rel_filepos, SEEK_SET) != 0) return FALSE; each_size = obj_reloc_entry_size (abfd); @@ -411,19 +411,12 @@ if (!reloc_cache && count != 0) return FALSE; - relocs = bfd_alloc (abfd, reloc_size); + relocs = _bfd_alloc_and_read (abfd, reloc_size, reloc_size); if (!relocs && reloc_size != 0) { free (reloc_cache); return FALSE; } - - if (bfd_bread (relocs, reloc_size, abfd) != reloc_size) - { - bfd_release (abfd, relocs); - free (reloc_cache); - return FALSE; - } if (each_size == RELOC_EXT_SIZE) { diff -Nru gdb-9.1/bfd/i386msdos.c gdb-10.2/bfd/i386msdos.c --- gdb-9.1/bfd/i386msdos.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/i386msdos.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD back-end for MS-DOS executables. - Copyright (C) 1990-2019 Free Software Foundation, Inc. + Copyright (C) 1990-2020 Free Software Foundation, Inc. Written by Bryan Ford of the University of Utah. Contributed by the Center for Software Science at the @@ -41,16 +41,16 @@ return aout_32_mkobject (abfd); } -static const bfd_target * +static bfd_cleanup msdos_object_p (bfd *abfd) { struct external_DOS_hdr hdr; bfd_byte buffer[2]; asection *section; - unsigned int size; + bfd_size_type size; if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0 - || bfd_bread (&hdr, (bfd_size_type) sizeof (hdr), abfd) < DOS_HDR_SIZE) + || (size = bfd_bread (&hdr, sizeof (hdr), abfd)) + 1 < DOS_HDR_SIZE + 1) { if (bfd_get_error () != bfd_error_system_call) bfd_set_error (bfd_error_wrong_format); @@ -67,9 +67,11 @@ e_lfanew field will be valid and point to a header beginning with one of the relevant signatures. If not, e_lfanew might point to anything, so don't bail if we can't read there. */ - if (H_GET_16 (abfd, hdr.e_cparhdr) < 4 - || bfd_seek (abfd, (file_ptr) H_GET_32 (abfd, hdr.e_lfanew), SEEK_SET) != 0 - || bfd_bread (buffer, (bfd_size_type) 2, abfd) != 2) + if (size < offsetof (struct external_DOS_hdr, e_lfanew) + 4 + || H_GET_16 (abfd, hdr.e_cparhdr) < 4) + ; + else if (bfd_seek (abfd, H_GET_32 (abfd, hdr.e_lfanew), SEEK_SET) != 0 + || bfd_bread (buffer, (bfd_size_type) 2, abfd) != 2) { if (bfd_get_error () == bfd_error_system_call) return NULL; @@ -102,7 +104,7 @@ size += H_GET_16 (abfd, hdr.e_cblp); /* Check that the size is valid. */ - if (bfd_seek (abfd, (file_ptr) (section->filepos + size), SEEK_SET) != 0) + if (bfd_seek (abfd, section->filepos + size, SEEK_SET) != 0) { if (bfd_get_error () != bfd_error_system_call) bfd_set_error (bfd_error_wrong_format); @@ -112,7 +114,7 @@ bfd_set_section_size (section, size); section->alignment_power = 4; - return abfd->xvec; + return _bfd_no_cleanup; } static int diff -Nru gdb-9.1/bfd/ihex.c gdb-10.2/bfd/ihex.c --- gdb-9.1/bfd/ihex.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/ihex.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD back-end for Intel Hex objects. - Copyright (C) 1995-2019 Free Software Foundation, Inc. + Copyright (C) 1995-2020 Free Software Foundation, Inc. Written by Ian Lance Taylor of Cygnus Support . This file is part of BFD, the Binary File Descriptor library. @@ -357,7 +357,7 @@ { char secbuf[20]; char *secname; - bfd_size_type amt; + size_t amt; flagword flags; sprintf (secbuf, ".sec%d", bfd_count_sections (abfd) + 1); @@ -381,8 +381,7 @@ /* An end record. */ if (abfd->start_address == 0) abfd->start_address = addr; - if (buf != NULL) - free (buf); + free (buf); return TRUE; case 2: @@ -474,20 +473,17 @@ if (error) goto error_return; - if (buf != NULL) - free (buf); - + free (buf); return TRUE; error_return: - if (buf != NULL) - free (buf); + free (buf); return FALSE; } /* Try to recognize an Intel Hex file. */ -static const bfd_target * +static bfd_cleanup ihex_object_p (bfd *abfd) { void * tdata_save; @@ -538,7 +534,7 @@ return NULL; } - return abfd->xvec; + return _bfd_no_cleanup; } /* Read the contents of a section in an Intel Hex file. */ @@ -603,8 +599,7 @@ if ((bfd_size_type) (p - contents) >= section->size) { /* We've read everything in the section. */ - if (buf != NULL) - free (buf); + free (buf); return TRUE; } @@ -621,14 +616,11 @@ goto error_return; } - if (buf != NULL) - free (buf); - + free (buf); return TRUE; error_return: - if (buf != NULL) - free (buf); + free (buf); return FALSE; } @@ -811,16 +803,15 @@ if (count > CHUNK) now = CHUNK; - if (where > segbase + extbase + 0xffff) + if (where < extbase + || where - extbase < segbase + || where - extbase - segbase > 0xffff) { bfd_byte addr[2]; /* We need a new base address. */ - if (where <= 0xfffff) + if (extbase == 0 && where <= 0xfffff) { - /* The addresses should be sorted. */ - BFD_ASSERT (extbase == 0); - segbase = where & 0xf0000; addr[0] = (bfd_byte)(segbase >> 12) & 0xff; addr[1] = (bfd_byte)(segbase >> 4) & 0xff; diff -Nru gdb-9.1/bfd/init.c gdb-10.2/bfd/init.c --- gdb-9.1/bfd/init.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/init.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* bfd initialization stuff - Copyright (C) 1990-2019 Free Software Foundation, Inc. + Copyright (C) 1990-2020 Free Software Foundation, Inc. Written by Steve Chamberlain of Cygnus Support. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/irix-core.c gdb-10.2/bfd/irix-core.c --- gdb-9.1/bfd/irix-core.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/irix-core.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD back-end for Irix core files. - Copyright (C) 1993-2019 Free Software Foundation, Inc. + Copyright (C) 1993-2020 Free Software Foundation, Inc. Written by Stu Grossman, Cygnus Support. Converted to back-end form by Ian Lance Taylor, Cygnus Support @@ -166,13 +166,13 @@ return asect; } -static const bfd_target * +static bfd_cleanup irix_core_core_file_p (bfd *abfd) { int val; struct coreout coreout; struct idesc *idg, *idf, *ids; - bfd_size_type amt; + size_t amt; val = bfd_bread (&coreout, (bfd_size_type) sizeof coreout, abfd); if (val != sizeof coreout) @@ -244,7 +244,7 @@ /* OK, we believe you. You're a core file (sure, sure). */ bfd_default_set_arch_mach (abfd, bfd_arch_mips, 0); - return abfd->xvec; + return _bfd_no_cleanup; fail: bfd_release (abfd, core_hdr (abfd)); diff -Nru gdb-9.1/bfd/libaout.h gdb-10.2/bfd/libaout.h --- gdb-9.1/bfd/libaout.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/libaout.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD back-end data structures for a.out (and similar) files. - Copyright (C) 1990-2019 Free Software Foundation, Inc. + Copyright (C) 1990-2020 Free Software Foundation, Inc. Written by Cygnus Support. This file is part of BFD, the Binary File Descriptor library. @@ -359,7 +359,8 @@ undecided_magic = 0, z_magic, o_magic, - n_magic + n_magic, + i_magic }; struct aoutdata @@ -475,8 +476,8 @@ extern bfd_boolean NAME (aout, make_sections) (bfd *); -extern const bfd_target * NAME (aout, some_aout_object_p) - (bfd *, struct internal_exec *, const bfd_target *(*) (bfd *)); +extern bfd_cleanup NAME (aout, some_aout_object_p) + (bfd *, struct internal_exec *, bfd_cleanup (*) (bfd *)); extern bfd_boolean NAME (aout, mkobject) (bfd *); @@ -608,9 +609,6 @@ #define aout_32_get_section_contents _bfd_generic_get_section_contents #define aout_64_get_section_contents _bfd_generic_get_section_contents -#ifndef NO_WRITE_HEADER_KLUDGE -#define NO_WRITE_HEADER_KLUDGE 0 -#endif #ifndef aout_32_bfd_is_local_label_name #define aout_32_bfd_is_local_label_name bfd_generic_is_local_label_name diff -Nru gdb-9.1/bfd/libbfd.c gdb-10.2/bfd/libbfd.c --- gdb-9.1/bfd/libbfd.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/libbfd.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Assorted BFD support routines, only used internally. - Copyright (C) 1990-2019 Free Software Foundation, Inc. + Copyright (C) 1990-2020 Free Software Foundation, Inc. Written by Cygnus Support. This file is part of BFD, the Binary File Descriptor library. @@ -245,7 +245,7 @@ return 0; } -const bfd_target * +bfd_cleanup _bfd_dummy_target (bfd *ignore_abfd ATTRIBUTE_UNUSED) { bfd_set_error (bfd_error_wrong_format); @@ -279,24 +279,6 @@ return ptr; } -/* Allocate memory using malloc, nmemb * size with overflow checking. */ - -void * -bfd_malloc2 (bfd_size_type nmemb, bfd_size_type size) -{ - if ((nmemb | size) >= HALF_BFD_SIZE_TYPE - && size != 0 - && nmemb > ~(bfd_size_type) 0 / size) - { - bfd_set_error (bfd_error_no_memory); - return NULL; - } - - return bfd_malloc (size * nmemb); -} - -/* Reallocate memory using realloc. */ - void * bfd_realloc (void *ptr, bfd_size_type size) { @@ -322,22 +304,6 @@ return ret; } -/* Reallocate memory using realloc, nmemb * size with overflow checking. */ - -void * -bfd_realloc2 (void *ptr, bfd_size_type nmemb, bfd_size_type size) -{ - if ((nmemb | size) >= HALF_BFD_SIZE_TYPE - && size != 0 - && nmemb > ~(bfd_size_type) 0 / size) - { - bfd_set_error (bfd_error_no_memory); - return NULL; - } - - return bfd_realloc (ptr, size * nmemb); -} - /* Reallocate memory using realloc. If this fails the pointer is freed before returning. */ @@ -346,7 +312,7 @@ { void *ret = bfd_realloc (ptr, size); - if (ret == NULL && ptr != NULL) + if (ret == NULL) free (ptr); return ret; @@ -365,25 +331,6 @@ return ptr; } -/* Allocate memory using malloc (nmemb * size) with overflow checking - and clear it. */ - -void * -bfd_zmalloc2 (bfd_size_type nmemb, bfd_size_type size) -{ - void *ptr = bfd_malloc2 (nmemb, size); - - if (ptr != NULL) - { - size_t sz = nmemb * size; - - if (sz > 0) - memset (ptr, 0, sz); - } - - return ptr; -} - /* INTERNAL_FUNCTION bfd_write_bigendian_4byte_int @@ -495,7 +442,7 @@ . BFD_SEND (abfd, bfd_getx_signed_64, (ptr)) . .#define bfd_get(bits, abfd, ptr) \ -. ((bits) == 8 ? (bfd_vma) bfd_get_8 (abfd, ptr) \ +. ((bits) == 8 ? bfd_get_8 (abfd, ptr) \ . : (bits) == 16 ? bfd_get_16 (abfd, ptr) \ . : (bits) == 32 ? bfd_get_32 (abfd, ptr) \ . : (bits) == 64 ? bfd_get_64 (abfd, ptr) \ @@ -1204,6 +1151,30 @@ return result; } +/* Write VAL in uleb128 format to P. + END indicates the last byte of allocated space for the uleb128 value to fit + in. + Return a pointer to the byte following the last byte that was written, or + NULL if the uleb128 value does not fit in the allocated space between P and + END. */ +bfd_byte * +_bfd_write_unsigned_leb128 (bfd_byte *p, bfd_byte *end, bfd_vma val) +{ + bfd_byte c; + do + { + if (p > end) + return NULL; + c = val & 0x7f; + val >>= 7; + if (val) + c |= 0x80; + *(p++) = c; + } + while (val); + return p; +} + bfd_boolean _bfd_generic_init_private_section_data (bfd *ibfd ATTRIBUTE_UNUSED, asection *isec ATTRIBUTE_UNUSED, diff -Nru gdb-9.1/bfd/libbfd.h gdb-10.2/bfd/libbfd.h --- gdb-9.1/bfd/libbfd.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/libbfd.h 2021-04-25 04:06:26.000000000 +0000 @@ -6,7 +6,7 @@ /* libbfd.h -- Declarations used by bfd library *implementation*. (This include file is not for users of the library.) - Copyright (C) 1990-2019 Free Software Foundation, Inc. + Copyright (C) 1990-2020 Free Software Foundation, Inc. Written by Cygnus Support. @@ -121,12 +121,6 @@ (void *, bfd_size_type) ATTRIBUTE_HIDDEN; extern void *bfd_zmalloc (bfd_size_type) ATTRIBUTE_HIDDEN; -extern void *bfd_malloc2 - (bfd_size_type, bfd_size_type) ATTRIBUTE_HIDDEN; -extern void *bfd_realloc2 - (void *, bfd_size_type, bfd_size_type) ATTRIBUTE_HIDDEN; -extern void *bfd_zmalloc2 - (bfd_size_type, bfd_size_type) ATTRIBUTE_HIDDEN; static inline char * bfd_strdup (const char *str) @@ -139,10 +133,6 @@ } /* These routines allocate and free things on the BFD's objalloc. */ -extern void *bfd_alloc2 - (bfd *, bfd_size_type, bfd_size_type) ATTRIBUTE_HIDDEN; -extern void *bfd_zalloc2 - (bfd *, bfd_size_type, bfd_size_type) ATTRIBUTE_HIDDEN; extern void bfd_release (bfd *, void *) ATTRIBUTE_HIDDEN; @@ -156,7 +146,7 @@ (bfd *) ATTRIBUTE_HIDDEN; extern char *_bfd_append_relative_path (bfd *, char *) ATTRIBUTE_HIDDEN; -extern const bfd_target *bfd_generic_archive_p +extern bfd_cleanup bfd_generic_archive_p (bfd *) ATTRIBUTE_HIDDEN; extern bfd_boolean bfd_slurp_armap (bfd *) ATTRIBUTE_HIDDEN; @@ -242,8 +232,9 @@ extern bfd *_bfd_new_bfd_contained_in (bfd *) ATTRIBUTE_HIDDEN; -extern const bfd_target *_bfd_dummy_target +extern bfd_cleanup _bfd_dummy_target (bfd *) ATTRIBUTE_HIDDEN; +#define _bfd_no_cleanup _bfd_void_bfd extern void bfd_dont_truncate_arname (bfd *, const char *, char *) ATTRIBUTE_HIDDEN; @@ -440,9 +431,9 @@ (bfd *, const char *) ATTRIBUTE_HIDDEN; extern bfd *_bfd_vms_lib_get_imagelib_file (bfd *) ATTRIBUTE_HIDDEN; -extern const bfd_target *_bfd_vms_lib_alpha_archive_p +extern bfd_cleanup _bfd_vms_lib_alpha_archive_p (bfd *) ATTRIBUTE_HIDDEN; -extern const bfd_target *_bfd_vms_lib_ia64_archive_p +extern bfd_cleanup _bfd_vms_lib_ia64_archive_p (bfd *) ATTRIBUTE_HIDDEN; extern bfd_boolean _bfd_vms_lib_alpha_mkarchive (bfd *) ATTRIBUTE_HIDDEN; @@ -461,7 +452,7 @@ extern void _bfd_nosymbols_get_symbol_info (bfd *, asymbol *, symbol_info *) ATTRIBUTE_HIDDEN; extern const char * _bfd_nosymbols_get_symbol_version_string - (bfd *, asymbol *, bfd_boolean *) ATTRIBUTE_HIDDEN; + (bfd *, asymbol *, bfd_boolean, bfd_boolean *) ATTRIBUTE_HIDDEN; extern bfd_boolean _bfd_nosymbols_bfd_is_local_label_name (bfd *, const char *) ATTRIBUTE_HIDDEN; #define _bfd_nosymbols_bfd_is_target_special_symbol _bfd_bool_bfd_asymbol_false @@ -910,6 +901,68 @@ extern bfd_vma _bfd_safe_read_leb128 (bfd *, bfd_byte *, unsigned int *, bfd_boolean, const bfd_byte * const) ATTRIBUTE_HIDDEN; +extern bfd_byte * _bfd_write_unsigned_leb128 + (bfd_byte *, bfd_byte *, bfd_vma) ATTRIBUTE_HIDDEN; + +#if GCC_VERSION >= 7000 +#define _bfd_mul_overflow(a, b, res) __builtin_mul_overflow (a, b, res) +#else +/* Assumes unsigned values. Careful! Args evaluated multiple times. */ +#define _bfd_mul_overflow(a, b, res) \ + ((*res) = (a), (*res) *= (b), (b) != 0 && (*res) / (b) != (a)) +#endif + +#ifdef __GNUC__ +#define _bfd_constant_p(v) __builtin_constant_p (v) +#else +#define _bfd_constant_p(v) 0 +#endif + +static inline bfd_byte * +_bfd_alloc_and_read (bfd *abfd, bfd_size_type asize, bfd_size_type rsize) +{ + bfd_byte *mem; + if (!_bfd_constant_p (rsize)) + { + ufile_ptr filesize = bfd_get_file_size (abfd); + if (filesize != 0 && rsize > filesize) + { + bfd_set_error (bfd_error_file_truncated); + return NULL; + } + } + mem = bfd_alloc (abfd, asize); + if (mem != NULL) + { + if (bfd_bread (mem, rsize, abfd) == rsize) + return mem; + bfd_release (abfd, mem); + } + return NULL; +} + +static inline bfd_byte * +_bfd_malloc_and_read (bfd *abfd, bfd_size_type asize, bfd_size_type rsize) +{ + bfd_byte *mem; + if (!_bfd_constant_p (rsize)) + { + ufile_ptr filesize = bfd_get_file_size (abfd); + if (filesize != 0 && rsize > filesize) + { + bfd_set_error (bfd_error_file_truncated); + return NULL; + } + } + mem = bfd_malloc (asize); + if (mem != NULL) + { + if (bfd_bread (mem, rsize, abfd) == rsize) + return mem; + free (mem); + } + return NULL; +} /* Extracted from libbfd.c. */ bfd_boolean bfd_write_bigendian_4byte_int (bfd *, unsigned int); @@ -1552,10 +1605,10 @@ "BFD_RELOC_PPC64_DTPREL16_HIGHESTA", "BFD_RELOC_PPC64_TPREL34", "BFD_RELOC_PPC64_DTPREL34", - "BFD_RELOC_PPC64_GOT_TLSGD34", - "BFD_RELOC_PPC64_GOT_TLSLD34", - "BFD_RELOC_PPC64_GOT_TPREL34", - "BFD_RELOC_PPC64_GOT_DTPREL34", + "BFD_RELOC_PPC64_GOT_TLSGD_PCREL34", + "BFD_RELOC_PPC64_GOT_TLSLD_PCREL34", + "BFD_RELOC_PPC64_GOT_TPREL_PCREL34", + "BFD_RELOC_PPC64_GOT_DTPREL_PCREL34", "BFD_RELOC_PPC64_TLS_PCREL", "BFD_RELOC_I370_D12", "BFD_RELOC_CTOR", @@ -2751,6 +2804,8 @@ "BFD_RELOC_MSP430_ABS_HI16", "BFD_RELOC_MSP430_PREL31", "BFD_RELOC_MSP430_SYM_DIFF", + "BFD_RELOC_MSP430_SET_ULEB128", + "BFD_RELOC_MSP430_SUB_ULEB128", "BFD_RELOC_NIOS2_S16", "BFD_RELOC_NIOS2_U16", "BFD_RELOC_NIOS2_CALL26", @@ -2868,7 +2923,20 @@ "BFD_RELOC_XTENSA_TLS_FUNC", "BFD_RELOC_XTENSA_TLS_ARG", "BFD_RELOC_XTENSA_TLS_CALL", + "BFD_RELOC_XTENSA_PDIFF8", + "BFD_RELOC_XTENSA_PDIFF16", + "BFD_RELOC_XTENSA_PDIFF32", + "BFD_RELOC_XTENSA_NDIFF8", + "BFD_RELOC_XTENSA_NDIFF16", + "BFD_RELOC_XTENSA_NDIFF32", "BFD_RELOC_Z80_DISP8", + "BFD_RELOC_Z80_BYTE0", + "BFD_RELOC_Z80_BYTE1", + "BFD_RELOC_Z80_BYTE2", + "BFD_RELOC_Z80_BYTE3", + "BFD_RELOC_Z80_WORD0", + "BFD_RELOC_Z80_WORD1", + "BFD_RELOC_Z80_16_BE", "BFD_RELOC_Z8K_DISP7", "BFD_RELOC_Z8K_CALLR", "BFD_RELOC_Z8K_IMM4L", diff -Nru gdb-9.1/bfd/libbfd-in.h gdb-10.2/bfd/libbfd-in.h --- gdb-9.1/bfd/libbfd-in.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/libbfd-in.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,7 +1,7 @@ /* libbfd.h -- Declarations used by bfd library *implementation*. (This include file is not for users of the library.) - Copyright (C) 1990-2019 Free Software Foundation, Inc. + Copyright (C) 1990-2020 Free Software Foundation, Inc. Written by Cygnus Support. @@ -116,12 +116,6 @@ (void *, bfd_size_type) ATTRIBUTE_HIDDEN; extern void *bfd_zmalloc (bfd_size_type) ATTRIBUTE_HIDDEN; -extern void *bfd_malloc2 - (bfd_size_type, bfd_size_type) ATTRIBUTE_HIDDEN; -extern void *bfd_realloc2 - (void *, bfd_size_type, bfd_size_type) ATTRIBUTE_HIDDEN; -extern void *bfd_zmalloc2 - (bfd_size_type, bfd_size_type) ATTRIBUTE_HIDDEN; static inline char * bfd_strdup (const char *str) @@ -134,10 +128,6 @@ } /* These routines allocate and free things on the BFD's objalloc. */ -extern void *bfd_alloc2 - (bfd *, bfd_size_type, bfd_size_type) ATTRIBUTE_HIDDEN; -extern void *bfd_zalloc2 - (bfd *, bfd_size_type, bfd_size_type) ATTRIBUTE_HIDDEN; extern void bfd_release (bfd *, void *) ATTRIBUTE_HIDDEN; @@ -151,7 +141,7 @@ (bfd *) ATTRIBUTE_HIDDEN; extern char *_bfd_append_relative_path (bfd *, char *) ATTRIBUTE_HIDDEN; -extern const bfd_target *bfd_generic_archive_p +extern bfd_cleanup bfd_generic_archive_p (bfd *) ATTRIBUTE_HIDDEN; extern bfd_boolean bfd_slurp_armap (bfd *) ATTRIBUTE_HIDDEN; @@ -237,8 +227,9 @@ extern bfd *_bfd_new_bfd_contained_in (bfd *) ATTRIBUTE_HIDDEN; -extern const bfd_target *_bfd_dummy_target +extern bfd_cleanup _bfd_dummy_target (bfd *) ATTRIBUTE_HIDDEN; +#define _bfd_no_cleanup _bfd_void_bfd extern void bfd_dont_truncate_arname (bfd *, const char *, char *) ATTRIBUTE_HIDDEN; @@ -435,9 +426,9 @@ (bfd *, const char *) ATTRIBUTE_HIDDEN; extern bfd *_bfd_vms_lib_get_imagelib_file (bfd *) ATTRIBUTE_HIDDEN; -extern const bfd_target *_bfd_vms_lib_alpha_archive_p +extern bfd_cleanup _bfd_vms_lib_alpha_archive_p (bfd *) ATTRIBUTE_HIDDEN; -extern const bfd_target *_bfd_vms_lib_ia64_archive_p +extern bfd_cleanup _bfd_vms_lib_ia64_archive_p (bfd *) ATTRIBUTE_HIDDEN; extern bfd_boolean _bfd_vms_lib_alpha_mkarchive (bfd *) ATTRIBUTE_HIDDEN; @@ -456,7 +447,7 @@ extern void _bfd_nosymbols_get_symbol_info (bfd *, asymbol *, symbol_info *) ATTRIBUTE_HIDDEN; extern const char * _bfd_nosymbols_get_symbol_version_string - (bfd *, asymbol *, bfd_boolean *) ATTRIBUTE_HIDDEN; + (bfd *, asymbol *, bfd_boolean, bfd_boolean *) ATTRIBUTE_HIDDEN; extern bfd_boolean _bfd_nosymbols_bfd_is_local_label_name (bfd *, const char *) ATTRIBUTE_HIDDEN; #define _bfd_nosymbols_bfd_is_target_special_symbol _bfd_bool_bfd_asymbol_false @@ -905,3 +896,65 @@ extern bfd_vma _bfd_safe_read_leb128 (bfd *, bfd_byte *, unsigned int *, bfd_boolean, const bfd_byte * const) ATTRIBUTE_HIDDEN; +extern bfd_byte * _bfd_write_unsigned_leb128 + (bfd_byte *, bfd_byte *, bfd_vma) ATTRIBUTE_HIDDEN; + +#if GCC_VERSION >= 7000 +#define _bfd_mul_overflow(a, b, res) __builtin_mul_overflow (a, b, res) +#else +/* Assumes unsigned values. Careful! Args evaluated multiple times. */ +#define _bfd_mul_overflow(a, b, res) \ + ((*res) = (a), (*res) *= (b), (b) != 0 && (*res) / (b) != (a)) +#endif + +#ifdef __GNUC__ +#define _bfd_constant_p(v) __builtin_constant_p (v) +#else +#define _bfd_constant_p(v) 0 +#endif + +static inline bfd_byte * +_bfd_alloc_and_read (bfd *abfd, bfd_size_type asize, bfd_size_type rsize) +{ + bfd_byte *mem; + if (!_bfd_constant_p (rsize)) + { + ufile_ptr filesize = bfd_get_file_size (abfd); + if (filesize != 0 && rsize > filesize) + { + bfd_set_error (bfd_error_file_truncated); + return NULL; + } + } + mem = bfd_alloc (abfd, asize); + if (mem != NULL) + { + if (bfd_bread (mem, rsize, abfd) == rsize) + return mem; + bfd_release (abfd, mem); + } + return NULL; +} + +static inline bfd_byte * +_bfd_malloc_and_read (bfd *abfd, bfd_size_type asize, bfd_size_type rsize) +{ + bfd_byte *mem; + if (!_bfd_constant_p (rsize)) + { + ufile_ptr filesize = bfd_get_file_size (abfd); + if (filesize != 0 && rsize > filesize) + { + bfd_set_error (bfd_error_file_truncated); + return NULL; + } + } + mem = bfd_malloc (asize); + if (mem != NULL) + { + if (bfd_bread (mem, rsize, abfd) == rsize) + return mem; + free (mem); + } + return NULL; +} diff -Nru gdb-9.1/bfd/libcoff.h gdb-10.2/bfd/libcoff.h --- gdb-9.1/bfd/libcoff.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/libcoff.h 2021-04-25 04:06:26.000000000 +0000 @@ -3,7 +3,7 @@ Run "make headers" in your build bfd/ to regenerate. */ /* BFD COFF object file private structure. - Copyright (C) 1990-2019 Free Software Foundation, Inc. + Copyright (C) 1990-2020 Free Software Foundation, Inc. Written by Cygnus Support. This file is part of BFD, the Binary File Descriptor library. @@ -37,8 +37,9 @@ #define coff_data(bfd) ((bfd)->tdata.coff_obj_data) #define obj_pe(bfd) (coff_data (bfd)->pe) +#define obj_go32(bfd) (coff_data (bfd)->go32) #define obj_symbols(bfd) (coff_data (bfd)->symbols) -#define obj_sym_filepos(bfd) (coff_data (bfd)->sym_filepos) +#define obj_sym_filepos(bfd) (coff_data (bfd)->sym_filepos) #define obj_relocbase(bfd) (coff_data (bfd)->relocbase) #define obj_raw_syments(bfd) (coff_data (bfd)->raw_syments) #define obj_raw_syment_count(bfd) (coff_data (bfd)->raw_syment_count) @@ -118,9 +119,14 @@ used by ARM code. */ flagword flags; - /* coff-stgo32 EXE stub header after BFD tdata has been allocated. Its data - is kept in internal_filehdr.go32stub beforehand. */ - char *go32stub; + /* Is this a GO32 coff file? */ + bfd_boolean go32; + + /* A stub (extra data prepended before the COFF image) and its size. + Used by coff-go32-exe, it contains executable data that loads the + COFF object into memory. */ + char * stub; + bfd_size_type stub_size; } coff_data_type; /* Tdata for pe image files. */ @@ -132,7 +138,9 @@ int has_reloc_section; int dont_strip_reloc; int dos_message[16]; - bfd_boolean insert_timestamp; + /* The timestamp to insert into the output file. + If the timestamp is -1 then the current time is used. */ + int timestamp; bfd_boolean (*in_reloc_p) (bfd *, reloc_howto_type *); flagword real_flags; @@ -239,8 +247,9 @@ { struct bfd_link_hash_entry root; - /* Symbol index in output file. Set to -1 initially. Set to -2 if - there is a reloc against this symbol. */ + /* Symbol index in output file. This is initialized to -1. It is + set to -2 if the symbol is used by a reloc. It is set to -3 if + this symbol is defined in a discarded section. */ long indx; /* Symbol type. */ @@ -303,7 +312,7 @@ #define coff_hash_table(p) ((struct coff_link_hash_table *) ((p)->hash)) /* Functions in coffgen.c. */ -extern const bfd_target *coff_object_p +extern bfd_cleanup coff_object_p (bfd *); extern struct bfd_section *coff_section_from_bfd_index (bfd *, int); @@ -371,6 +380,8 @@ (arelent *, struct bfd_link_info *, asection *); extern void bfd_perform_slip (bfd *, unsigned int, asection *, bfd_vma); +extern bfd_boolean _bfd_coff_close_and_cleanup + (bfd *); /* Functions and types in cofflink.c. */ @@ -609,14 +620,6 @@ extern bfd_boolean _bfd_ppc_xcoff_relocate_section (bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *, struct internal_reloc *, struct internal_syment *, asection **); - -/* Functions in coff-ppc.c. FIXME: These are called by pe.em in the - linker, and so should start with bfd and be declared in bfd.h. */ - -extern bfd_boolean ppc_allocate_toc_section - (struct bfd_link_info *); -extern bfd_boolean ppc_process_before_allocation - (bfd *, struct bfd_link_info *); /* Extracted from coffcode.h. */ typedef struct coff_ptr_struct diff -Nru gdb-9.1/bfd/libcoff-in.h gdb-10.2/bfd/libcoff-in.h --- gdb-9.1/bfd/libcoff-in.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/libcoff-in.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD COFF object file private structure. - Copyright (C) 1990-2019 Free Software Foundation, Inc. + Copyright (C) 1990-2020 Free Software Foundation, Inc. Written by Cygnus Support. This file is part of BFD, the Binary File Descriptor library. @@ -33,8 +33,9 @@ #define coff_data(bfd) ((bfd)->tdata.coff_obj_data) #define obj_pe(bfd) (coff_data (bfd)->pe) +#define obj_go32(bfd) (coff_data (bfd)->go32) #define obj_symbols(bfd) (coff_data (bfd)->symbols) -#define obj_sym_filepos(bfd) (coff_data (bfd)->sym_filepos) +#define obj_sym_filepos(bfd) (coff_data (bfd)->sym_filepos) #define obj_relocbase(bfd) (coff_data (bfd)->relocbase) #define obj_raw_syments(bfd) (coff_data (bfd)->raw_syments) #define obj_raw_syment_count(bfd) (coff_data (bfd)->raw_syment_count) @@ -114,9 +115,14 @@ used by ARM code. */ flagword flags; - /* coff-stgo32 EXE stub header after BFD tdata has been allocated. Its data - is kept in internal_filehdr.go32stub beforehand. */ - char *go32stub; + /* Is this a GO32 coff file? */ + bfd_boolean go32; + + /* A stub (extra data prepended before the COFF image) and its size. + Used by coff-go32-exe, it contains executable data that loads the + COFF object into memory. */ + char * stub; + bfd_size_type stub_size; } coff_data_type; /* Tdata for pe image files. */ @@ -128,7 +134,9 @@ int has_reloc_section; int dont_strip_reloc; int dos_message[16]; - bfd_boolean insert_timestamp; + /* The timestamp to insert into the output file. + If the timestamp is -1 then the current time is used. */ + int timestamp; bfd_boolean (*in_reloc_p) (bfd *, reloc_howto_type *); flagword real_flags; @@ -235,8 +243,9 @@ { struct bfd_link_hash_entry root; - /* Symbol index in output file. Set to -1 initially. Set to -2 if - there is a reloc against this symbol. */ + /* Symbol index in output file. This is initialized to -1. It is + set to -2 if the symbol is used by a reloc. It is set to -3 if + this symbol is defined in a discarded section. */ long indx; /* Symbol type. */ @@ -299,7 +308,7 @@ #define coff_hash_table(p) ((struct coff_link_hash_table *) ((p)->hash)) /* Functions in coffgen.c. */ -extern const bfd_target *coff_object_p +extern bfd_cleanup coff_object_p (bfd *); extern struct bfd_section *coff_section_from_bfd_index (bfd *, int); @@ -367,6 +376,8 @@ (arelent *, struct bfd_link_info *, asection *); extern void bfd_perform_slip (bfd *, unsigned int, asection *, bfd_vma); +extern bfd_boolean _bfd_coff_close_and_cleanup + (bfd *); /* Functions and types in cofflink.c. */ @@ -605,11 +616,3 @@ extern bfd_boolean _bfd_ppc_xcoff_relocate_section (bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *, struct internal_reloc *, struct internal_syment *, asection **); - -/* Functions in coff-ppc.c. FIXME: These are called by pe.em in the - linker, and so should start with bfd and be declared in bfd.h. */ - -extern bfd_boolean ppc_allocate_toc_section - (struct bfd_link_info *); -extern bfd_boolean ppc_process_before_allocation - (bfd *, struct bfd_link_info *); diff -Nru gdb-9.1/bfd/libecoff.h gdb-10.2/bfd/libecoff.h --- gdb-9.1/bfd/libecoff.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/libecoff.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD ECOFF object file private structure. - Copyright (C) 1993-2019 Free Software Foundation, Inc. + Copyright (C) 1993-2020 Free Software Foundation, Inc. Written by Ian Lance Taylor, Cygnus Support. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/libhppa.h gdb-10.2/bfd/libhppa.h --- gdb-9.1/bfd/libhppa.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/libhppa.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* HP PA-RISC SOM object file format: definitions internal to BFD. - Copyright (C) 1990-2019 Free Software Foundation, Inc. + Copyright (C) 1990-2020 Free Software Foundation, Inc. Contributed by the Center for Software Science at the University of Utah (pa-gdb-bugs@cs.utah.edu). @@ -155,39 +155,20 @@ /* Some functions to manipulate PA instructions. */ -/* Declare the functions with the unused attribute to avoid warnings. */ -static inline int sign_extend (int, int) ATTRIBUTE_UNUSED; -static inline int low_sign_extend (int, int) ATTRIBUTE_UNUSED; -static inline int sign_unext (int, int) ATTRIBUTE_UNUSED; -static inline int low_sign_unext (int, int) ATTRIBUTE_UNUSED; -static inline int re_assemble_3 (int) ATTRIBUTE_UNUSED; -static inline int re_assemble_12 (int) ATTRIBUTE_UNUSED; -static inline int re_assemble_14 (int) ATTRIBUTE_UNUSED; -static inline int re_assemble_16 (int) ATTRIBUTE_UNUSED; -static inline int re_assemble_17 (int) ATTRIBUTE_UNUSED; -static inline int re_assemble_21 (int) ATTRIBUTE_UNUSED; -static inline int re_assemble_22 (int) ATTRIBUTE_UNUSED; -static inline bfd_signed_vma hppa_field_adjust - (bfd_vma, bfd_signed_vma, enum hppa_reloc_field_selector_type_alt) - ATTRIBUTE_UNUSED; -static inline int bfd_hppa_insn2fmt (bfd *, int) ATTRIBUTE_UNUSED; -static inline int hppa_rebuild_insn (int, int, int) ATTRIBUTE_UNUSED; - - /* The *sign_extend functions are used to assemble various bitfields taken from an instruction and return the resulting immediate value. */ -static inline int -sign_extend (int x, int len) +static inline unsigned ATTRIBUTE_UNUSED +sign_extend (unsigned x, unsigned len) { - int signbit = (1 << (len - 1)); - int mask = (signbit << 1) - 1; + unsigned signbit = (1 << (len - 1)); + unsigned mask = (signbit << 1) - 1; return ((x & mask) ^ signbit) - signbit; } -static inline int -low_sign_extend (int x, int len) +static inline unsigned ATTRIBUTE_UNUSED +low_sign_extend (unsigned x, unsigned len) { return (x >> 1) - ((x & 1) << (len - 1)); } @@ -197,21 +178,21 @@ insertion into an opcode. pa-risc uses all sorts of weird bitfields in the instruction to hold the value. */ -static inline int -sign_unext (int x, int len) +static inline unsigned ATTRIBUTE_UNUSED +sign_unext (unsigned x, unsigned len) { - int len_ones; + unsigned len_ones; len_ones = (1 << len) - 1; return x & len_ones; } -static inline int -low_sign_unext (int x, int len) +static inline unsigned ATTRIBUTE_UNUSED +low_sign_unext (unsigned x, unsigned len) { - int temp; - int sign; + unsigned temp; + unsigned sign; sign = (x >> (len-1)) & 1; @@ -220,32 +201,32 @@ return (temp << 1) | sign; } -static inline int -re_assemble_3 (int as3) +static inline unsigned ATTRIBUTE_UNUSED +re_assemble_3 (unsigned as3) { return (( (as3 & 4) << (13-2)) | ((as3 & 3) << (13+1))); } -static inline int -re_assemble_12 (int as12) +static inline unsigned ATTRIBUTE_UNUSED +re_assemble_12 (unsigned as12) { return (( (as12 & 0x800) >> 11) | ((as12 & 0x400) >> (10 - 2)) | ((as12 & 0x3ff) << (1 + 2))); } -static inline int -re_assemble_14 (int as14) +static inline unsigned ATTRIBUTE_UNUSED +re_assemble_14 (unsigned as14) { return (( (as14 & 0x1fff) << 1) | ((as14 & 0x2000) >> 13)); } -static inline int -re_assemble_16 (int as16) +static inline unsigned ATTRIBUTE_UNUSED +re_assemble_16 (unsigned as16) { - int s, t; + unsigned s, t; /* Unusual 16-bit encoding, for wide mode only. */ t = (as16 << 1) & 0xffff; @@ -253,8 +234,8 @@ return (t ^ s ^ (s >> 1)) | (s >> 15); } -static inline int -re_assemble_17 (int as17) +static inline unsigned ATTRIBUTE_UNUSED +re_assemble_17 (unsigned as17) { return (( (as17 & 0x10000) >> 16) | ((as17 & 0x0f800) << (16 - 11)) @@ -262,8 +243,8 @@ | ((as17 & 0x003ff) << (1 + 2))); } -static inline int -re_assemble_21 (int as21) +static inline unsigned ATTRIBUTE_UNUSED +re_assemble_21 (unsigned as21) { return (( (as21 & 0x100000) >> 20) | ((as21 & 0x0ffe00) >> 8) @@ -272,8 +253,8 @@ | ((as21 & 0x000003) << 12)); } -static inline int -re_assemble_22 (int as22) +static inline unsigned ATTRIBUTE_UNUSED +re_assemble_22 (unsigned as22) { return (( (as22 & 0x200000) >> 21) | ((as22 & 0x1f0000) << (21 - 16)) @@ -293,7 +274,7 @@ This function returns sign extended values in all cases. */ -static inline bfd_signed_vma +static inline bfd_signed_vma ATTRIBUTE_UNUSED hppa_field_adjust (bfd_vma sym_val, bfd_signed_vma addend, enum hppa_reloc_field_selector_type_alt r_field) @@ -459,8 +440,8 @@ /* Given a machine instruction, return its format. */ -static inline int -bfd_hppa_insn2fmt (bfd *abfd, int insn) +static inline unsigned ATTRIBUTE_UNUSED +bfd_hppa_insn2fmt (bfd *abfd, unsigned insn) { enum hppa_opcode_type op = (enum hppa_opcode_type) get_opcode (insn); @@ -541,8 +522,8 @@ /* Insert VALUE into INSN using R_FORMAT to determine exactly what bits to change. */ -static inline int -hppa_rebuild_insn (int insn, int value, int r_format) +static inline unsigned ATTRIBUTE_UNUSED +hppa_rebuild_insn (unsigned insn, unsigned value, int r_format) { switch (r_format) { diff -Nru gdb-9.1/bfd/libpei.h gdb-10.2/bfd/libpei.h --- gdb-9.1/bfd/libpei.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/libpei.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Support for the generic parts of PE/PEI; common header information. - Copyright (C) 1995-2019 Free Software Foundation, Inc. + Copyright (C) 1995-2020 Free Software Foundation, Inc. Written by Cygnus Solutions. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/libxcoff.h gdb-10.2/bfd/libxcoff.h --- gdb-9.1/bfd/libxcoff.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/libxcoff.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD XCOFF object file private structure. - Copyright (C) 2001-2019 Free Software Foundation, Inc. + Copyright (C) 2001-2020 Free Software Foundation, Inc. Written by Tom Rix, Redhat. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/linker.c gdb-10.2/bfd/linker.c --- gdb-9.1/bfd/linker.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/linker.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* linker.c -- BFD linker routines - Copyright (C) 1993-2019 Free Software Foundation, Inc. + Copyright (C) 1993-2020 Free Software Foundation, Inc. Written by Steve Chamberlain and Ian Lance Taylor, Cygnus Support This file is part of BFD, the Binary File Descriptor library. @@ -536,7 +536,7 @@ bfd_boolean copy, bfd_boolean follow) { - bfd_size_type amt; + size_t amt; if (info->wrap_hash != NULL) { @@ -764,7 +764,7 @@ _bfd_generic_link_hash_table_create (bfd *abfd) { struct generic_link_hash_table *ret; - bfd_size_type amt = sizeof (struct generic_link_hash_table); + size_t amt = sizeof (struct generic_link_hash_table); ret = (struct generic_link_hash_table *) bfd_malloc (amt); if (ret == NULL) @@ -1995,7 +1995,7 @@ newsym = bfd_make_empty_symbol (input_bfd); if (!newsym) return FALSE; - newsym->name = input_bfd->filename; + newsym->name = bfd_get_filename (input_bfd); newsym->value = 0; newsym->flags = BSF_LOCAL | BSF_FILE; newsym->section = sec; @@ -2422,7 +2422,7 @@ struct bfd_link_order * bfd_new_link_order (bfd *abfd, asection *section) { - bfd_size_type amt = sizeof (struct bfd_link_order); + size_t amt = sizeof (struct bfd_link_order); struct bfd_link_order *new_lo; new_lo = (struct bfd_link_order *) bfd_zalloc (abfd, amt); @@ -2661,13 +2661,11 @@ new_contents, loc, input_section->size)) goto error_return; - if (contents != NULL) - free (contents); + free (contents); return TRUE; error_return: - if (contents != NULL) - free (contents); + free (contents); return FALSE; } @@ -2894,10 +2892,8 @@ (_("%pB: duplicate section `%pA' has different contents\n"), sec->owner, sec); - if (sec_contents) - free (sec_contents); - if (l_sec_contents) - free (l_sec_contents); + free (sec_contents); + free (l_sec_contents); } break; } @@ -3099,8 +3095,13 @@ section = h->u.c.p->section; /* Increase the size of the section to align the common symbol. - The alignment must be a power of two. */ - alignment = bfd_octets_per_byte (output_bfd, section) << power_of_two; + The alignment must be a power of two. But if the section does + not have any alignment requirement then do not increase the + alignment unnecessarily. */ + if (power_of_two) + alignment = bfd_octets_per_byte (output_bfd, section) << power_of_two; + else + alignment = 1; BFD_ASSERT (alignment != 0 && (alignment & -alignment) == alignment); section->size += alignment - 1; section->size &= -alignment; diff -Nru gdb-9.1/bfd/lynx-core.c gdb-10.2/bfd/lynx-core.c --- gdb-9.1/bfd/lynx-core.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/lynx-core.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD back end for Lynx core files - Copyright (C) 1993-2019 Free Software Foundation, Inc. + Copyright (C) 1993-2020 Free Software Foundation, Inc. Written by Stu Grossman of Cygnus Support. This file is part of BFD, the Binary File Descriptor library. @@ -85,7 +85,7 @@ return asect; } -const bfd_target * +bfd_cleanup lynx_core_file_p (bfd *abfd) { int secnum; @@ -94,7 +94,7 @@ core_st_t *threadp; int pagesize; asection *newsect; - bfd_size_type amt; + size_t amt; pagesize = getpagesize (); /* Serious cross-target issue here... This really needs to come from a system-specific @@ -126,24 +126,13 @@ tcontext_size = pss.threadcnt * sizeof (core_st_t); - /* Allocate space for the thread contexts */ - - threadp = (core_st_t *) bfd_alloc (abfd, tcontext_size); - if (!threadp) - goto fail; - /* Save thread contexts */ - - if (bfd_seek (abfd, (file_ptr) pagesize, SEEK_SET) != 0) + if (bfd_seek (abfd, pagesize, SEEK_SET) != 0) + goto fail; + threadp = (core_st_t *) _bfd_alloc_and_read (abfd, tcontext_size, + tcontext_size); + if (!threadp) goto fail; - - if (bfd_bread ((void *) threadp, tcontext_size, abfd) != tcontext_size) - { - /* Probably too small to be a core file */ - if (bfd_get_error () != bfd_error_system_call) - bfd_set_error (bfd_error_wrong_format); - goto fail; - } core_signal (abfd) = threadp->currsig; @@ -202,7 +191,7 @@ goto fail; } - return abfd->xvec; + return _bfd_no_cleanup; fail: bfd_release (abfd, core_hdr (abfd)); diff -Nru gdb-9.1/bfd/mach-o-aarch64.c gdb-10.2/bfd/mach-o-aarch64.c --- gdb-9.1/bfd/mach-o-aarch64.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/mach-o-aarch64.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* AArch-64 Mach-O support for BFD. - Copyright (C) 2015-2019 Free Software Foundation, Inc. + Copyright (C) 2015-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -40,13 +40,13 @@ #define bfd_mach_o_tgt_seg_table NULL #define bfd_mach_o_section_type_valid_for_tgt NULL -static const bfd_target * +static bfd_cleanup bfd_mach_o_arm64_object_p (bfd *abfd) { return bfd_mach_o_header_p (abfd, 0, 0, BFD_MACH_O_CPU_TYPE_ARM64); } -static const bfd_target * +static bfd_cleanup bfd_mach_o_arm64_core_p (bfd *abfd) { return bfd_mach_o_header_p (abfd, 0, diff -Nru gdb-9.1/bfd/mach-o-arm.c gdb-10.2/bfd/mach-o-arm.c --- gdb-9.1/bfd/mach-o-arm.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/mach-o-arm.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* ARM Mach-O support for BFD. - Copyright (C) 2015-2019 Free Software Foundation, Inc. + Copyright (C) 2015-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -38,13 +38,13 @@ #define bfd_mach_o_tgt_seg_table NULL #define bfd_mach_o_section_type_valid_for_tgt NULL -static const bfd_target * +static bfd_cleanup bfd_mach_o_arm_object_p (bfd *abfd) { return bfd_mach_o_header_p (abfd, 0, 0, BFD_MACH_O_CPU_TYPE_ARM); } -static const bfd_target * +static bfd_cleanup bfd_mach_o_arm_core_p (bfd *abfd) { return bfd_mach_o_header_p (abfd, 0, diff -Nru gdb-9.1/bfd/mach-o.c gdb-10.2/bfd/mach-o.c --- gdb-9.1/bfd/mach-o.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/mach-o.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Mach-O support for BFD. - Copyright (C) 1999-2019 Free Software Foundation, Inc. + Copyright (C) 1999-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -618,12 +618,12 @@ } static const char * -cpusubtype (unsigned long cputype, unsigned long cpusubtype) +cpusubtype (unsigned long cpu_type, unsigned long cpu_subtype) { static char buffer[128]; buffer[0] = 0; - switch (cpusubtype & BFD_MACH_O_CPU_SUBTYPE_MASK) + switch (cpu_subtype & BFD_MACH_O_CPU_SUBTYPE_MASK) { case 0: break; @@ -633,13 +633,13 @@ sprintf (buffer, _("")); break; } - cpusubtype &= ~ BFD_MACH_O_CPU_SUBTYPE_MASK; + cpu_subtype &= ~ BFD_MACH_O_CPU_SUBTYPE_MASK; - switch (cputype) + switch (cpu_type) { case BFD_MACH_O_CPU_TYPE_X86_64: case BFD_MACH_O_CPU_TYPE_I386: - switch (cpusubtype) + switch (cpu_subtype) { case BFD_MACH_O_CPU_SUBTYPE_X86_ALL: return strcat (buffer, " (X86_ALL)"); @@ -649,7 +649,7 @@ break; case BFD_MACH_O_CPU_TYPE_ARM: - switch (cpusubtype) + switch (cpu_subtype) { case BFD_MACH_O_CPU_SUBTYPE_ARM_ALL: return strcat (buffer, " (ARM_ALL)"); @@ -669,7 +669,7 @@ break; case BFD_MACH_O_CPU_TYPE_ARM64: - switch (cpusubtype) + switch (cpu_subtype) { case BFD_MACH_O_CPU_SUBTYPE_ARM64_ALL: return strcat (buffer, " (ARM64_ALL)"); @@ -684,7 +684,7 @@ break; } - if (cpusubtype != 0) + if (cpu_subtype != 0) return strcat (buffer, _(" ()")); return buffer; @@ -1614,24 +1614,20 @@ bfd_mach_o_backend_data *bed = bfd_mach_o_get_backend_data (abfd); unsigned long i; struct mach_o_reloc_info_external *native_relocs = NULL; - bfd_size_type native_size; + size_t native_size; /* Allocate and read relocs. */ - native_size = count * BFD_MACH_O_RELENT_SIZE; - - /* PR 17512: file: 09477b57. */ - if (native_size < count) + if (_bfd_mul_overflow (count, BFD_MACH_O_RELENT_SIZE, &native_size)) + /* PR 17512: file: 09477b57. */ goto err; - native_relocs = - (struct mach_o_reloc_info_external *) bfd_malloc (native_size); + if (bfd_seek (abfd, filepos, SEEK_SET) != 0) + return -1; + native_relocs = (struct mach_o_reloc_info_external *) + _bfd_malloc_and_read (abfd, native_size, native_size); if (native_relocs == NULL) return -1; - if (bfd_seek (abfd, filepos, SEEK_SET) != 0 - || bfd_bread (native_relocs, native_size, abfd) != native_size) - goto err; - for (i = 0; i < count; i++) { if (!(*bed->_bfd_mach_o_canonicalize_one_reloc)(abfd, &native_relocs[i], @@ -1665,9 +1661,11 @@ if (asect->relocation == NULL) { - if (asect->reloc_count * sizeof (arelent) < asect->reloc_count) + size_t amt; + + if (_bfd_mul_overflow (asect->reloc_count, sizeof (arelent), &amt)) return -1; - res = bfd_malloc (asect->reloc_count * sizeof (arelent)); + res = bfd_malloc (amt); if (res == NULL) return -1; @@ -1720,12 +1718,30 @@ if (mdata->dyn_reloc_cache == NULL) { - if ((dysymtab->nextrel + dysymtab->nlocrel) * sizeof (arelent) - < (dysymtab->nextrel + dysymtab->nlocrel)) - return -1; + ufile_ptr filesize = bfd_get_file_size (abfd); + size_t amt; + + if (filesize != 0) + { + if (dysymtab->extreloff > filesize + || dysymtab->nextrel > ((filesize - dysymtab->extreloff) + / BFD_MACH_O_RELENT_SIZE) + || dysymtab->locreloff > filesize + || dysymtab->nlocrel > ((filesize - dysymtab->locreloff) + / BFD_MACH_O_RELENT_SIZE)) + { + bfd_set_error (bfd_error_file_truncated); + return -1; + } + } + if (_bfd_mul_overflow (dysymtab->nextrel + dysymtab->nlocrel, + sizeof (arelent), &amt)) + { + bfd_set_error (bfd_error_file_too_big); + return -1; + } - res = bfd_malloc ((dysymtab->nextrel + dysymtab->nlocrel) - * sizeof (arelent)); + res = bfd_malloc (amt); if (res == NULL) return -1; @@ -2167,14 +2183,15 @@ { unsigned i; unsigned n; + size_t amt; mdata->filelen = FILE_ALIGN (mdata->filelen, 2); cmd->indirectsymoff = mdata->filelen; - mdata->filelen += cmd->nindirectsyms * 4; - - if (cmd->nindirectsyms * 4 < cmd->nindirectsyms) + if (_bfd_mul_overflow (cmd->nindirectsyms, 4, &amt)) return FALSE; - cmd->indirect_syms = bfd_zalloc (abfd, cmd->nindirectsyms * 4); + mdata->filelen += amt; + + cmd->indirect_syms = bfd_zalloc (abfd, amt); if (cmd->indirect_syms == NULL) return FALSE; @@ -2554,6 +2571,7 @@ asection *sec; unsigned target_index; unsigned nsect; + size_t amt; nsect = bfd_count_sections (abfd); @@ -2572,8 +2590,8 @@ } mdata->nsects = nsect; - mdata->sections = bfd_alloc2 (abfd, - mdata->nsects, sizeof (bfd_mach_o_section *)); + amt = mdata->nsects * sizeof (bfd_mach_o_section *); + mdata->sections = bfd_alloc (abfd, amt); if (mdata->sections == NULL) return FALSE; @@ -3897,19 +3915,13 @@ /* See PR 21840 for a reproducer. */ if ((sym->strsize + 1) == 0) return FALSE; - sym->strtab = bfd_alloc (abfd, sym->strsize + 1); + if (bfd_seek (abfd, sym->stroff, SEEK_SET) != 0) + return FALSE; + sym->strtab = (char *) _bfd_alloc_and_read (abfd, sym->strsize + 1, + sym->strsize); if (sym->strtab == NULL) return FALSE; - if (bfd_seek (abfd, sym->stroff, SEEK_SET) != 0 - || bfd_bread (sym->strtab, sym->strsize, abfd) != sym->strsize) - { - /* PR 17512: file: 10888-1609-0.004. */ - bfd_release (abfd, sym->strtab); - sym->strtab = NULL; - bfd_set_error (bfd_error_file_truncated); - return FALSE; - } /* Zero terminate the string table. */ sym->strtab[sym->strsize] = 0; } @@ -3923,16 +3935,32 @@ bfd_mach_o_data_struct *mdata = bfd_mach_o_get_data (abfd); bfd_mach_o_symtab_command *sym = mdata->symtab; unsigned long i; + size_t amt; + ufile_ptr filesize; - if (sym == NULL || sym->symbols) + if (sym == NULL || sym->nsyms == 0 || sym->symbols) /* Return now if there are no symbols or if already loaded. */ return TRUE; - sym->symbols = bfd_alloc2 (abfd, sym->nsyms, sizeof (bfd_mach_o_asymbol)); - if (sym->symbols == NULL) + filesize = bfd_get_file_size (abfd); + if (filesize != 0) + { + unsigned int wide = mach_o_wide_p (&mdata->header); + unsigned int symwidth + = wide ? BFD_MACH_O_NLIST_64_SIZE : BFD_MACH_O_NLIST_SIZE; + + if (sym->symoff > filesize + || sym->nsyms > (filesize - sym->symoff) / symwidth) + { + bfd_set_error (bfd_error_file_truncated); + sym->nsyms = 0; + return FALSE; + } + } + if (_bfd_mul_overflow (sym->nsyms, sizeof (bfd_mach_o_asymbol), &amt) + || (sym->symbols = bfd_alloc (abfd, amt)) == NULL) { - _bfd_error_handler (_("bfd_mach_o_read_symtab_symbols: " - "unable to allocate memory for symbols")); + bfd_set_error (bfd_error_no_memory); sym->nsyms = 0; return FALSE; } @@ -3990,6 +4018,14 @@ } } +static unsigned char * +bfd_mach_o_alloc_and_read (bfd *abfd, file_ptr filepos, size_t size) +{ + if (bfd_seek (abfd, filepos, SEEK_SET) != 0) + return NULL; + return _bfd_alloc_and_read (abfd, size, size); +} + static bfd_boolean bfd_mach_o_read_dylinker (bfd *abfd, bfd_mach_o_load_command *command) { @@ -3998,21 +4034,20 @@ unsigned int nameoff; unsigned int namelen; + if (command->len < sizeof (raw) + 8) + return FALSE; if (bfd_bread (&raw, sizeof (raw), abfd) != sizeof (raw)) return FALSE; nameoff = bfd_h_get_32 (abfd, raw.str); + if (nameoff > command->len) + return FALSE; cmd->name_offset = nameoff; namelen = command->len - nameoff; nameoff += command->offset; - cmd->name_str = bfd_alloc (abfd, namelen); - if (cmd->name_str == NULL) - return FALSE; - if (bfd_seek (abfd, nameoff, SEEK_SET) != 0 - || bfd_bread (cmd->name_str, namelen, abfd) != namelen) - return FALSE; - return TRUE; + cmd->name_str = (char *) bfd_mach_o_alloc_and_read (abfd, nameoff, namelen); + return cmd->name_str != NULL; } static bfd_boolean @@ -4023,7 +4058,10 @@ struct mach_o_dylib_command_external raw; unsigned int nameoff; unsigned int namelen; + file_ptr pos; + if (command->len < sizeof (raw) + 8) + return FALSE; switch (command->type) { case BFD_MACH_O_LC_LOAD_DYLIB: @@ -4042,19 +4080,17 @@ return FALSE; nameoff = bfd_h_get_32 (abfd, raw.name); + if (nameoff > command->len) + return FALSE; cmd->timestamp = bfd_h_get_32 (abfd, raw.timestamp); cmd->current_version = bfd_h_get_32 (abfd, raw.current_version); cmd->compatibility_version = bfd_h_get_32 (abfd, raw.compatibility_version); cmd->name_offset = command->offset + nameoff; namelen = command->len - nameoff; - cmd->name_str = bfd_alloc (abfd, namelen); - if (cmd->name_str == NULL) - return FALSE; - if (bfd_seek (abfd, mdata->hdr_offset + cmd->name_offset, SEEK_SET) != 0 - || bfd_bread (cmd->name_str, namelen, abfd) != namelen) - return FALSE; - return TRUE; + pos = mdata->hdr_offset + cmd->name_offset; + cmd->name_str = (char *) bfd_mach_o_alloc_and_read (abfd, pos, namelen); + return cmd->name_str != NULL; } static bfd_boolean @@ -4068,6 +4104,8 @@ unsigned int str_len; unsigned char *str; + if (command->len < sizeof (raw) + 8) + return FALSE; if (bfd_bread (&raw, sizeof (raw), abfd) != sizeof (raw)) return FALSE; @@ -4077,11 +4115,9 @@ return FALSE; str_len = command->len - sizeof (raw); - str = bfd_alloc (abfd, str_len); + str = _bfd_alloc_and_read (abfd, str_len, str_len); if (str == NULL) return FALSE; - if (bfd_bread (str, str_len, abfd) != str_len) - return FALSE; cmd->name_offset = command->offset + nameoff; cmd->nmodules = bfd_h_get_32 (abfd, raw.nmodules); @@ -4099,6 +4135,8 @@ bfd_mach_o_prebind_cksum_command *cmd = &command->command.prebind_cksum; struct mach_o_prebind_cksum_command_external raw; + if (command->len < sizeof (raw) + 8) + return FALSE; if (bfd_bread (&raw, sizeof (raw), abfd) != sizeof (raw)) return FALSE; @@ -4113,6 +4151,8 @@ bfd_mach_o_twolevel_hints_command *cmd = &command->command.twolevel_hints; struct mach_o_twolevel_hints_command_external raw; + if (command->len < sizeof (raw) + 8) + return FALSE; if (bfd_bread (&raw, sizeof (raw), abfd) != sizeof (raw)) return FALSE; @@ -4129,22 +4169,22 @@ unsigned int nameoff; unsigned int namelen; + if (command->len < sizeof (raw) + 8) + return FALSE; if (bfd_bread (&raw, sizeof (raw), abfd) != sizeof (raw)) return FALSE; nameoff = bfd_h_get_32 (abfd, raw.name); + if (nameoff > command->len) + return FALSE; fvm->minor_version = bfd_h_get_32 (abfd, raw.minor_version); fvm->header_addr = bfd_h_get_32 (abfd, raw.header_addr); fvm->name_offset = command->offset + nameoff; namelen = command->len - nameoff; - fvm->name_str = bfd_alloc (abfd, namelen); - if (fvm->name_str == NULL) - return FALSE; - if (bfd_seek (abfd, fvm->name_offset, SEEK_SET) != 0 - || bfd_bread (fvm->name_str, namelen, abfd) != namelen) - return FALSE; - return TRUE; + fvm->name_str = (char *) bfd_mach_o_alloc_and_read (abfd, fvm->name_offset, + namelen); + return fvm->name_str != NULL; } static bfd_boolean @@ -4155,6 +4195,8 @@ unsigned int offset; unsigned int nflavours; unsigned int i; + struct mach_o_thread_command_external raw; + size_t amt; BFD_ASSERT ((command->type == BFD_MACH_O_LC_THREAD) || (command->type == BFD_MACH_O_LC_UNIXTHREAD)); @@ -4162,24 +4204,31 @@ /* Count the number of threads. */ offset = 8; nflavours = 0; - while (offset != command->len) + while (offset + sizeof (raw) <= command->len) { - struct mach_o_thread_command_external raw; - - if (offset >= command->len) - return FALSE; + unsigned int count; if (bfd_seek (abfd, command->offset + offset, SEEK_SET) != 0 || bfd_bread (&raw, sizeof (raw), abfd) != sizeof (raw)) return FALSE; - offset += sizeof (raw) + bfd_h_get_32 (abfd, raw.count) * 4; + count = bfd_h_get_32 (abfd, raw.count); + if (count > (unsigned) -1 / 4 + || command->len - (offset + sizeof (raw)) < count * 4) + return FALSE; + offset += sizeof (raw) + count * 4; nflavours++; } + if (nflavours == 0 || offset != command->len) + return FALSE; /* Allocate threads. */ - cmd->flavours = bfd_alloc2 - (abfd, nflavours, sizeof (bfd_mach_o_thread_flavour)); + if (_bfd_mul_overflow (nflavours, sizeof (bfd_mach_o_thread_flavour), &amt)) + { + bfd_set_error (bfd_error_file_too_big); + return FALSE; + } + cmd->flavours = bfd_alloc (abfd, amt); if (cmd->flavours == NULL) return FALSE; cmd->nflavours = nflavours; @@ -4188,14 +4237,6 @@ nflavours = 0; while (offset != command->len) { - struct mach_o_thread_command_external raw; - - if (offset >= command->len) - return FALSE; - - if (nflavours >= cmd->nflavours) - return FALSE; - if (bfd_seek (abfd, command->offset + offset, SEEK_SET) != 0 || bfd_bread (&raw, sizeof (raw), abfd) != sizeof (raw)) return FALSE; @@ -4261,7 +4302,8 @@ } static bfd_boolean -bfd_mach_o_read_dysymtab (bfd *abfd, bfd_mach_o_load_command *command) +bfd_mach_o_read_dysymtab (bfd *abfd, bfd_mach_o_load_command *command, + ufile_ptr filesize) { bfd_mach_o_dysymtab_command *cmd = &command->command.dysymtab; bfd_mach_o_data_struct *mdata = bfd_mach_o_get_data (abfd); @@ -4271,6 +4313,8 @@ { struct mach_o_dysymtab_command_external raw; + if (command->len < sizeof (raw) + 8) + return FALSE; if (bfd_bread (&raw, sizeof (raw), abfd) != sizeof (raw)) return FALSE; @@ -4299,9 +4343,21 @@ unsigned int i; int wide = bfd_mach_o_wide_p (abfd); unsigned int module_len = wide ? 56 : 52; + size_t amt; - cmd->dylib_module = - bfd_alloc2 (abfd, cmd->nmodtab, sizeof (bfd_mach_o_dylib_module)); + if (cmd->modtaboff > filesize + || cmd->nmodtab > (filesize - cmd->modtaboff) / module_len) + { + bfd_set_error (bfd_error_file_truncated); + return FALSE; + } + if (_bfd_mul_overflow (cmd->nmodtab, + sizeof (bfd_mach_o_dylib_module), &amt)) + { + bfd_set_error (bfd_error_file_too_big); + return FALSE; + } + cmd->dylib_module = bfd_alloc (abfd, amt); if (cmd->dylib_module == NULL) return FALSE; @@ -4348,9 +4404,22 @@ if (cmd->ntoc != 0) { unsigned long i; + size_t amt; + struct mach_o_dylib_table_of_contents_external raw; - cmd->dylib_toc = bfd_alloc2 - (abfd, cmd->ntoc, sizeof (bfd_mach_o_dylib_table_of_content)); + if (cmd->tocoff > filesize + || cmd->ntoc > (filesize - cmd->tocoff) / sizeof (raw)) + { + bfd_set_error (bfd_error_file_truncated); + return FALSE; + } + if (_bfd_mul_overflow (cmd->ntoc, + sizeof (bfd_mach_o_dylib_table_of_content), &amt)) + { + bfd_set_error (bfd_error_file_too_big); + return FALSE; + } + cmd->dylib_toc = bfd_alloc (abfd, amt); if (cmd->dylib_toc == NULL) return FALSE; @@ -4359,7 +4428,6 @@ for (i = 0; i < cmd->ntoc; i++) { - struct mach_o_dylib_table_of_contents_external raw; bfd_mach_o_dylib_table_of_content *toc = &cmd->dylib_toc[i]; if (bfd_bread (&raw, sizeof (raw), abfd) != sizeof (raw)) @@ -4373,9 +4441,20 @@ if (cmd->nindirectsyms != 0) { unsigned int i; + size_t amt; - cmd->indirect_syms = bfd_alloc2 - (abfd, cmd->nindirectsyms, sizeof (unsigned int)); + if (cmd->indirectsymoff > filesize + || cmd->nindirectsyms > (filesize - cmd->indirectsymoff) / 4) + { + bfd_set_error (bfd_error_file_truncated); + return FALSE; + } + if (_bfd_mul_overflow (cmd->nindirectsyms, sizeof (unsigned int), &amt)) + { + bfd_set_error (bfd_error_file_too_big); + return FALSE; + } + cmd->indirect_syms = bfd_alloc (abfd, amt); if (cmd->indirect_syms == NULL) return FALSE; @@ -4398,9 +4477,21 @@ { unsigned long v; unsigned int i; + size_t amt; - cmd->ext_refs = bfd_alloc2 - (abfd, cmd->nextrefsyms, sizeof (bfd_mach_o_dylib_reference)); + if (cmd->extrefsymoff > filesize + || cmd->nextrefsyms > (filesize - cmd->extrefsymoff) / 4) + { + bfd_set_error (bfd_error_file_truncated); + return FALSE; + } + if (_bfd_mul_overflow (cmd->nextrefsyms, + sizeof (bfd_mach_o_dylib_reference), &amt)) + { + bfd_set_error (bfd_error_file_too_big); + return FALSE; + } + cmd->ext_refs = bfd_alloc (abfd, amt); if (cmd->ext_refs == NULL) return FALSE; @@ -4439,7 +4530,8 @@ } static bfd_boolean -bfd_mach_o_read_symtab (bfd *abfd, bfd_mach_o_load_command *command) +bfd_mach_o_read_symtab (bfd *abfd, bfd_mach_o_load_command *command, + ufile_ptr filesize) { bfd_mach_o_symtab_command *symtab = &command->command.symtab; bfd_mach_o_data_struct *mdata = bfd_mach_o_get_data (abfd); @@ -4447,6 +4539,8 @@ BFD_ASSERT (command->type == BFD_MACH_O_LC_SYMTAB); + if (command->len < sizeof (raw) + 8) + return FALSE; if (bfd_bread (&raw, sizeof (raw), abfd) != sizeof (raw)) return FALSE; @@ -4457,6 +4551,15 @@ symtab->symbols = NULL; symtab->strtab = NULL; + if (symtab->symoff > filesize + || symtab->nsyms > (filesize - symtab->symoff) / BFD_MACH_O_NLIST_SIZE + || symtab->stroff > filesize + || symtab->strsize > filesize - symtab->stroff) + { + bfd_set_error (bfd_error_file_truncated); + return FALSE; + } + if (symtab->nsyms != 0) abfd->flags |= HAS_SYMS; @@ -4473,6 +4576,8 @@ BFD_ASSERT (command->type == BFD_MACH_O_LC_UUID); + if (command->len < 16 + 8) + return FALSE; if (bfd_bread (cmd->uuid, 16, abfd) != 16) return FALSE; @@ -4485,6 +4590,8 @@ bfd_mach_o_linkedit_command *cmd = &command->command.linkedit; struct mach_o_linkedit_data_command_external raw; + if (command->len < sizeof (raw) + 8) + return FALSE; if (bfd_bread (&raw, sizeof (raw), abfd) != sizeof (raw)) return FALSE; @@ -4500,33 +4607,20 @@ struct mach_o_str_command_external raw; unsigned long off; + if (command->len < sizeof (raw) + 8) + return FALSE; if (bfd_bread (&raw, sizeof (raw), abfd) != sizeof (raw)) return FALSE; off = bfd_get_32 (abfd, raw.str); - cmd->stroff = command->offset + off; - cmd->str_len = command->len - off; - cmd->str = bfd_alloc (abfd, cmd->str_len); - if (cmd->str == NULL) + if (off > command->len) return FALSE; - if (bfd_seek (abfd, cmd->stroff, SEEK_SET) != 0 - || bfd_bread ((void *) cmd->str, cmd->str_len, abfd) != cmd->str_len) - return FALSE; - return TRUE; -} -static unsigned char * -bfd_mach_o_alloc_and_read (bfd *abfd, unsigned int off, unsigned int size) -{ - unsigned char *buf; - - buf = bfd_alloc (abfd, size); - if (buf == NULL) - return NULL; - if (bfd_seek (abfd, off, SEEK_SET) != 0 - || bfd_bread (buf, size, abfd) != size) - return NULL; - return buf; + cmd->stroff = command->offset + off; + cmd->str_len = command->len - off; + cmd->str = (char *) bfd_mach_o_alloc_and_read (abfd, cmd->stroff, + cmd->str_len); + return cmd->str != NULL; } static bfd_boolean @@ -4535,8 +4629,8 @@ /* Read rebase content. */ if (cmd->rebase_content == NULL && cmd->rebase_size != 0) { - cmd->rebase_content = - bfd_mach_o_alloc_and_read (abfd, cmd->rebase_off, cmd->rebase_size); + cmd->rebase_content + = bfd_mach_o_alloc_and_read (abfd, cmd->rebase_off, cmd->rebase_size); if (cmd->rebase_content == NULL) return FALSE; } @@ -4544,8 +4638,8 @@ /* Read bind content. */ if (cmd->bind_content == NULL && cmd->bind_size != 0) { - cmd->bind_content = - bfd_mach_o_alloc_and_read (abfd, cmd->bind_off, cmd->bind_size); + cmd->bind_content + = bfd_mach_o_alloc_and_read (abfd, cmd->bind_off, cmd->bind_size); if (cmd->bind_content == NULL) return FALSE; } @@ -4586,6 +4680,8 @@ bfd_mach_o_dyld_info_command *cmd = &command->command.dyld_info; struct mach_o_dyld_info_command_external raw; + if (command->len < sizeof (raw) + 8) + return FALSE; if (bfd_bread (&raw, sizeof (raw), abfd) != sizeof (raw)) return FALSE; @@ -4613,6 +4709,8 @@ bfd_mach_o_version_min_command *cmd = &command->command.version_min; struct mach_o_version_min_command_external raw; + if (command->len < sizeof (raw) + 8) + return FALSE; if (bfd_bread (&raw, sizeof (raw), abfd) != sizeof (raw)) return FALSE; @@ -4627,6 +4725,8 @@ bfd_mach_o_encryption_info_command *cmd = &command->command.encryption_info; struct mach_o_encryption_info_command_external raw; + if (command->len < sizeof (raw) + 8) + return FALSE; if (bfd_bread (&raw, sizeof (raw), abfd) != sizeof (raw)) return FALSE; @@ -4642,6 +4742,8 @@ bfd_mach_o_encryption_info_command *cmd = &command->command.encryption_info; struct mach_o_encryption_info_64_command_external raw; + if (command->len < sizeof (raw) + 8) + return FALSE; if (bfd_bread (&raw, sizeof (raw), abfd) != sizeof (raw)) return FALSE; @@ -4657,6 +4759,8 @@ bfd_mach_o_main_command *cmd = &command->command.main; struct mach_o_entry_point_command_external raw; + if (command->len < sizeof (raw) + 8) + return FALSE; if (bfd_bread (&raw, sizeof (raw), abfd) != sizeof (raw)) return FALSE; @@ -4672,6 +4776,8 @@ struct mach_o_source_version_command_external raw; bfd_uint64_t ver; + if (command->len < sizeof (raw) + 8) + return FALSE; if (bfd_bread (&raw, sizeof (raw), abfd) != sizeof (raw)) return FALSE; @@ -4697,6 +4803,8 @@ bfd_mach_o_note_command *cmd = &command->command.note; struct mach_o_note_command_external raw; + if (command->len < sizeof (raw) + 8) + return FALSE; if (bfd_bread (&raw, sizeof (raw), abfd) != sizeof (raw)) return FALSE; @@ -4712,6 +4820,8 @@ bfd_mach_o_build_version_command *cmd = &command->command.build_version; struct mach_o_build_version_command_external raw; + if (command->len < sizeof (raw) + 8) + return FALSE; if (bfd_bread (&raw, sizeof (raw), abfd) != sizeof (raw)) return FALSE; @@ -4736,6 +4846,8 @@ BFD_ASSERT (command->type == BFD_MACH_O_LC_SEGMENT_64); + if (command->len < sizeof (raw) + 8) + return FALSE; if (bfd_bread (&raw, sizeof (raw), abfd) != sizeof (raw)) return FALSE; @@ -4757,6 +4869,8 @@ BFD_ASSERT (command->type == BFD_MACH_O_LC_SEGMENT); + if (command->len < sizeof (raw) + 8) + return FALSE; if (bfd_bread (&raw, sizeof (raw), abfd) != sizeof (raw)) return FALSE; @@ -4803,7 +4917,8 @@ } static bfd_boolean -bfd_mach_o_read_command (bfd *abfd, bfd_mach_o_load_command *command) +bfd_mach_o_read_command (bfd *abfd, bfd_mach_o_load_command *command, + ufile_ptr filesize) { bfd_mach_o_data_struct *mdata = bfd_mach_o_get_data (abfd); struct mach_o_load_command_external raw; @@ -4815,9 +4930,11 @@ return FALSE; cmd = bfd_h_get_32 (abfd, raw.cmd); - command->type = cmd & ~BFD_MACH_O_LC_REQ_DYLD; + command->type = cmd & ~BFD_MACH_O_LC_REQ_DYLD; command->type_required = cmd & BFD_MACH_O_LC_REQ_DYLD ? TRUE : FALSE; command->len = bfd_h_get_32 (abfd, raw.cmdsize); + if (command->len < 8 || command->len % 4 != 0) + return FALSE; switch (command->type) { @@ -4830,7 +4947,7 @@ return FALSE; break; case BFD_MACH_O_LC_SYMTAB: - if (!bfd_mach_o_read_symtab (abfd, command)) + if (!bfd_mach_o_read_symtab (abfd, command, filesize)) return FALSE; break; case BFD_MACH_O_LC_SYMSEG: @@ -4879,7 +4996,7 @@ return FALSE; break; case BFD_MACH_O_LC_DYSYMTAB: - if (!bfd_mach_o_read_dysymtab (abfd, command)) + if (!bfd_mach_o_read_dysymtab (abfd, command, filesize)) return FALSE; break; case BFD_MACH_O_LC_PREBIND_CKSUM: @@ -4900,6 +5017,8 @@ case BFD_MACH_O_LC_DATA_IN_CODE: case BFD_MACH_O_LC_DYLIB_CODE_SIGN_DRS: case BFD_MACH_O_LC_LINKER_OPTIMIZATION_HINT: + case BFD_MACH_O_LC_DYLD_EXPORTS_TRIE: + case BFD_MACH_O_LC_DYLD_CHAINED_FIXUPS: if (!bfd_mach_o_read_linkedit (abfd, command)) return FALSE; break; @@ -4950,12 +5069,13 @@ return TRUE; } -static void +static bfd_boolean bfd_mach_o_flatten_sections (bfd *abfd) { bfd_mach_o_data_struct *mdata = bfd_mach_o_get_data (abfd); bfd_mach_o_load_command *cmd; long csect = 0; + size_t amt; /* Count total number of sections. */ mdata->nsects = 0; @@ -4972,8 +5092,14 @@ } /* Allocate sections array. */ - mdata->sections = bfd_alloc2 (abfd, - mdata->nsects, sizeof (bfd_mach_o_section *)); + if (_bfd_mul_overflow (mdata->nsects, sizeof (bfd_mach_o_section *), &amt)) + { + bfd_set_error (bfd_error_file_too_big); + return FALSE; + } + mdata->sections = bfd_alloc (abfd, amt); + if (mdata->sections == NULL && mdata->nsects != 0) + return FALSE; /* Fill the array. */ csect = 0; @@ -4992,6 +5118,7 @@ mdata->sections[csect++] = sec; } } + return TRUE; } static bfd_boolean @@ -5101,8 +5228,8 @@ bfd_mach_o_data_struct *mdata) { unsigned int i; - enum bfd_architecture cputype; - unsigned long cpusubtype; + enum bfd_architecture cpu_type; + unsigned long cpu_subtype; unsigned int hdrsize; hdrsize = mach_o_wide_p (header) ? @@ -5128,8 +5255,8 @@ abfd->tdata.mach_o_data = mdata; bfd_mach_o_convert_architecture (header->cputype, header->cpusubtype, - &cputype, &cpusubtype); - if (cputype == bfd_arch_unknown) + &cpu_type, &cpu_subtype); + if (cpu_type == bfd_arch_unknown) { _bfd_error_handler /* xgettext:c-format */ @@ -5138,16 +5265,32 @@ return FALSE; } - bfd_set_arch_mach (abfd, cputype, cpusubtype); + bfd_set_arch_mach (abfd, cpu_type, cpu_subtype); if (header->ncmds != 0) { bfd_mach_o_load_command *cmd; + size_t amt; + ufile_ptr filesize = bfd_get_file_size (abfd); + + if (filesize == 0) + filesize = (ufile_ptr) -1; mdata->first_command = NULL; mdata->last_command = NULL; - cmd = bfd_alloc2 (abfd, header->ncmds, sizeof (bfd_mach_o_load_command)); + if (header->ncmds > (filesize - hdrsize) / BFD_MACH_O_LC_SIZE) + { + bfd_set_error (bfd_error_file_truncated); + return FALSE; + } + if (_bfd_mul_overflow (header->ncmds, + sizeof (bfd_mach_o_load_command), &amt)) + { + bfd_set_error (bfd_error_file_too_big); + return FALSE; + } + cmd = bfd_alloc (abfd, amt); if (cmd == NULL) return FALSE; @@ -5165,13 +5308,14 @@ cur->offset = prev->offset + prev->len; } - if (!bfd_mach_o_read_command (abfd, cur)) + if (!bfd_mach_o_read_command (abfd, cur, filesize)) return FALSE; } } /* Sections should be flatten before scanning start address. */ - bfd_mach_o_flatten_sections (abfd); + if (!bfd_mach_o_flatten_sections (abfd)) + return FALSE; if (!bfd_mach_o_scan_start_address (abfd)) return FALSE; @@ -5223,11 +5367,11 @@ return TRUE; } -const bfd_target * +bfd_cleanup bfd_mach_o_header_p (bfd *abfd, file_ptr hdr_off, - bfd_mach_o_filetype filetype, - bfd_mach_o_cpu_type cputype) + bfd_mach_o_filetype file_type, + bfd_mach_o_cpu_type cpu_type) { bfd_mach_o_header header; bfd_mach_o_data_struct *mdata; @@ -5254,9 +5398,9 @@ /* Check cputype and filetype. In case of wildcard, do not accept magics that are handled by existing targets. */ - if (cputype) + if (cpu_type) { - if (header.cputype != cputype) + if (header.cputype != cpu_type) goto wrong; } else @@ -5269,9 +5413,9 @@ #endif } - if (filetype) + if (file_type) { - if (header.filetype != filetype) + if (header.filetype != file_type) goto wrong; } else @@ -5294,7 +5438,7 @@ if (!bfd_mach_o_scan (abfd, &header, mdata)) goto wrong; - return abfd->xvec; + return _bfd_no_cleanup; wrong: bfd_set_error (bfd_error_wrong_format); @@ -5303,13 +5447,13 @@ return NULL; } -static const bfd_target * +static bfd_cleanup bfd_mach_o_gen_object_p (bfd *abfd) { return bfd_mach_o_header_p (abfd, 0, 0, 0); } -static const bfd_target * +static bfd_cleanup bfd_mach_o_gen_core_p (bfd *abfd) { return bfd_mach_o_header_p (abfd, 0, BFD_MACH_O_MH_CORE, 0); @@ -5359,12 +5503,13 @@ mach_o_fat_archentry *archentries; } mach_o_fat_data_struct; -const bfd_target * +bfd_cleanup bfd_mach_o_fat_archive_p (bfd *abfd) { mach_o_fat_data_struct *adata = NULL; struct mach_o_fat_header_external hdr; unsigned long i; + size_t amt; if (bfd_seek (abfd, 0, SEEK_SET) != 0 || bfd_bread (&hdr, sizeof (hdr), abfd) != sizeof (hdr)) @@ -5384,8 +5529,13 @@ if (adata->nfat_arch > 30) goto error; - adata->archentries = - bfd_alloc2 (abfd, adata->nfat_arch, sizeof (mach_o_fat_archentry)); + if (_bfd_mul_overflow (adata->nfat_arch, + sizeof (mach_o_fat_archentry), &amt)) + { + bfd_set_error (bfd_error_file_too_big); + goto error; + } + adata->archentries = bfd_alloc (abfd, amt); if (adata->archentries == NULL) goto error; @@ -5403,7 +5553,7 @@ abfd->tdata.mach_o_fat_data = adata; - return abfd->xvec; + return _bfd_no_cleanup; error: if (adata != NULL) @@ -5425,26 +5575,23 @@ struct areltdata *areltdata; /* Create the member filename. Use ARCH_NAME. */ const bfd_arch_info_type *ap = bfd_lookup_arch (arch_type, arch_subtype); - char *filename; + const char *filename; if (ap) { /* Use the architecture name if known. */ - filename = bfd_strdup (ap->printable_name); - if (filename == NULL) - return FALSE; + filename = bfd_set_filename (abfd, ap->printable_name); } else { /* Forge a uniq id. */ - const size_t namelen = 2 + 8 + 1 + 2 + 8 + 1; - filename = bfd_malloc (namelen); - if (filename == NULL) - return FALSE; - snprintf (filename, namelen, "0x%lx-0x%lx", + char buf[2 + 8 + 1 + 2 + 8 + 1]; + snprintf (buf, sizeof (buf), "0x%lx-0x%lx", entry->cputype, entry->cpusubtype); + filename = bfd_set_filename (abfd, buf); } - bfd_set_filename (abfd, filename); + if (!filename) + return FALSE; areltdata = bfd_zmalloc (sizeof (struct areltdata)); if (areltdata == NULL) @@ -5752,6 +5899,8 @@ unsigned char *buf = bfd_malloc (1024); unsigned long size = 1024; + if (buf == NULL) + return -1; for (;;) { bfd_size_type nread = 0; @@ -5797,6 +5946,8 @@ bottom = seg->fileoff + seg->filesize - offset; top = seg->fileoff + seg->filesize - 4; *rbuf = bfd_malloc (top - bottom); + if (*rbuf == NULL) + return -1; *rlen = top - bottom; memcpy (*rbuf, buf + size - *rlen, *rlen); @@ -5923,12 +6074,12 @@ if (abfd->my_archive && !bfd_is_thin_archive (abfd->my_archive)) base_bfd = abfd->my_archive; /* BFD may have been opened from a stream. */ - if (base_bfd->filename == NULL) + if (bfd_get_filename (base_bfd) == NULL) { bfd_set_error (bfd_error_invalid_operation); return NULL; } - base_basename = lbasename (base_bfd->filename); + base_basename = lbasename (bfd_get_filename (base_bfd)); uuid_cmd = bfd_mach_o_lookup_uuid_command (abfd); if (uuid_cmd == NULL) @@ -5938,11 +6089,14 @@ It seems apple's GDB checks all files in the dSYM bundle directory. http://opensource.apple.com/source/gdb/gdb-1708/src/gdb/macosx/macosx-tdep.c */ - dsym_filename = (char *)bfd_malloc (strlen (base_bfd->filename) + dsym_filename = (char *)bfd_malloc (strlen (bfd_get_filename (base_bfd)) + strlen (dsym_subdir) + 1 + strlen (base_basename) + 1); + if (dsym_filename == NULL) + return NULL; + sprintf (dsym_filename, "%s%s/%s", - base_bfd->filename, dsym_subdir, base_basename); + bfd_get_filename (base_bfd), dsym_subdir, base_basename); dsym_bfd = bfd_mach_o_find_dsym (dsym_filename, uuid_cmd, bfd_get_arch_info (abfd)); @@ -6020,8 +6174,8 @@ but it is small, and happens when we are closing down, so it should not matter too much. */ char *dsym_filename = (char *)(fat_bfd - ? fat_bfd->filename - : mdata->dsym_bfd->filename); + ? bfd_get_filename (fat_bfd) + : bfd_get_filename (mdata->dsym_bfd)); #endif bfd_close (mdata->dsym_bfd); mdata->dsym_bfd = NULL; diff -Nru gdb-9.1/bfd/mach-o.h gdb-10.2/bfd/mach-o.h --- gdb-9.1/bfd/mach-o.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/mach-o.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Mach-O support for BFD. - Copyright (C) 1999-2019 Free Software Foundation, Inc. + Copyright (C) 1999-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -679,9 +679,9 @@ bfd_boolean bfd_mach_o_valid (bfd *); bfd_boolean bfd_mach_o_mkobject_init (bfd *); -const bfd_target *bfd_mach_o_object_p (bfd *); -const bfd_target *bfd_mach_o_core_p (bfd *); -const bfd_target *bfd_mach_o_fat_archive_p (bfd *); +bfd_cleanup bfd_mach_o_object_p (bfd *); +bfd_cleanup bfd_mach_o_core_p (bfd *); +bfd_cleanup bfd_mach_o_fat_archive_p (bfd *); bfd *bfd_mach_o_fat_openr_next_archived_file (bfd *, bfd *); bfd_boolean bfd_mach_o_set_arch_mach (bfd *, enum bfd_architecture, unsigned long); @@ -713,8 +713,8 @@ int bfd_mach_o_core_file_failing_signal (bfd *); bfd_boolean bfd_mach_o_core_file_matches_executable_p (bfd *, bfd *); bfd *bfd_mach_o_fat_extract (bfd *, bfd_format , const bfd_arch_info_type *); -const bfd_target *bfd_mach_o_header_p (bfd *, file_ptr, bfd_mach_o_filetype, - bfd_mach_o_cpu_type); +bfd_cleanup bfd_mach_o_header_p (bfd *, file_ptr, bfd_mach_o_filetype, + bfd_mach_o_cpu_type); bfd_boolean bfd_mach_o_build_commands (bfd *); bfd_boolean bfd_mach_o_set_section_contents (bfd *, asection *, const void *, file_ptr, bfd_size_type); diff -Nru gdb-9.1/bfd/mach-o-i386.c gdb-10.2/bfd/mach-o-i386.c --- gdb-9.1/bfd/mach-o-i386.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/mach-o-i386.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Intel i386 Mach-O support for BFD. - Copyright (C) 2009-2019 Free Software Foundation, Inc. + Copyright (C) 2009-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -29,13 +29,13 @@ #define bfd_mach_o_core_p bfd_mach_o_i386_core_p #define bfd_mach_o_mkobject bfd_mach_o_i386_mkobject -static const bfd_target * +static bfd_cleanup bfd_mach_o_i386_object_p (bfd *abfd) { return bfd_mach_o_header_p (abfd, 0, 0, BFD_MACH_O_CPU_TYPE_I386); } -static const bfd_target * +static bfd_cleanup bfd_mach_o_i386_core_p (bfd *abfd) { return bfd_mach_o_header_p (abfd, 0, diff -Nru gdb-9.1/bfd/mach-o-target.c gdb-10.2/bfd/mach-o-target.c --- gdb-9.1/bfd/mach-o-target.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/mach-o-target.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Mach-O support for BFD. - Copyright (C) 1999-2019 Free Software Foundation, Inc. + Copyright (C) 1999-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/mach-o-x86-64.c gdb-10.2/bfd/mach-o-x86-64.c --- gdb-9.1/bfd/mach-o-x86-64.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/mach-o-x86-64.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Intel x86-64 Mach-O support for BFD. - Copyright (C) 2010-2019 Free Software Foundation, Inc. + Copyright (C) 2010-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -29,13 +29,13 @@ #define bfd_mach_o_core_p bfd_mach_o_x86_64_core_p #define bfd_mach_o_mkobject bfd_mach_o_x86_64_mkobject -static const bfd_target * +static bfd_cleanup bfd_mach_o_x86_64_object_p (bfd *abfd) { return bfd_mach_o_header_p (abfd, 0, 0, BFD_MACH_O_CPU_TYPE_X86_64); } -static const bfd_target * +static bfd_cleanup bfd_mach_o_x86_64_core_p (bfd *abfd) { return bfd_mach_o_header_p (abfd, 0, diff -Nru gdb-9.1/bfd/MAINTAINERS gdb-10.2/bfd/MAINTAINERS --- gdb-9.1/bfd/MAINTAINERS 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/MAINTAINERS 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ See ../binutils/MAINTAINERS -Copyright (C) 2012-2019 Free Software Foundation, Inc. +Copyright (C) 2012-2020 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/bfd/Makefile.am gdb-10.2/bfd/Makefile.am --- gdb-9.1/bfd/Makefile.am 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/Makefile.am 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ ## Process this file with automake to generate Makefile.in # -# Copyright (C) 2012-2019 Free Software Foundation, Inc. +# Copyright (C) 2012-2020 Free Software Foundation, Inc. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -53,7 +53,7 @@ WARN_CFLAGS = @WARN_CFLAGS@ NO_WERROR = @NO_WERROR@ AM_CFLAGS = $(WARN_CFLAGS) $(ZLIBINC) -AM_CPPFLAGS = -DBINDIR='"$(bindir)"' -DLIBDIR='"$(libdir)"' +AM_CPPFLAGS = -DBINDIR='"$(bindir)"' -DLIBDIR='"$(libdir)"' @LARGEFILE_CPPFLAGS@ if PLUGINS bfdinclude_HEADERS += $(INCDIR)/plugin-api.h LIBDL = @lt_cv_dlopen_libs@ @@ -144,7 +144,6 @@ cpu-or1k.lo \ cpu-pdp11.lo \ cpu-pj.lo \ - cpu-plugin.lo \ cpu-powerpc.lo \ cpu-pru.lo \ cpu-rs6000.lo \ @@ -160,7 +159,6 @@ cpu-tic4x.lo \ cpu-tic54x.lo \ cpu-tic6x.lo \ - cpu-tic80.lo \ cpu-tilegx.lo \ cpu-tilepro.lo \ cpu-v850.lo \ @@ -230,7 +228,6 @@ cpu-or1k.c \ cpu-pdp11.c \ cpu-pj.c \ - cpu-plugin.c \ cpu-powerpc.c \ cpu-pru.c \ cpu-rs6000.c \ @@ -246,7 +243,6 @@ cpu-tic4x.c \ cpu-tic54x.c \ cpu-tic6x.c \ - cpu-tic80.c \ cpu-tilegx.c \ cpu-tilepro.c \ cpu-v850.c \ @@ -266,7 +262,6 @@ BFD32_BACKENDS = \ aout-cris.lo \ aout-ns32k.lo \ - aout-tic30.lo \ aout32.lo \ cf-i386lynx.lo \ coff-go32.lo \ @@ -278,7 +273,6 @@ coff-tic30.lo \ coff-tic4x.lo \ coff-tic54x.lo \ - coff-tic80.lo \ coff-z80.lo \ coff-z8k.lo \ coffgen.lo \ @@ -357,6 +351,7 @@ elf32-xgate.lo \ elf32-xstormy16.lo \ elf32-xtensa.lo \ + elf32-z80.lo \ elf32.lo \ elflink.lo \ elfxx-sparc.lo \ @@ -375,14 +370,12 @@ pe-arm.lo \ pe-i386.lo \ pe-mcore.lo \ - pe-ppc.lo \ pe-sh.lo \ pef.lo \ pei-arm-wince.lo \ pei-arm.lo \ pei-i386.lo \ pei-mcore.lo \ - pei-ppc.lo \ pei-sh.lo \ peigen.lo \ plugin.lo \ @@ -402,7 +395,6 @@ BFD32_BACKENDS_CFILES = \ aout-cris.c \ aout-ns32k.c \ - aout-tic30.c \ aout32.c \ cf-i386lynx.c \ coff-go32.c \ @@ -414,7 +406,6 @@ coff-tic30.c \ coff-tic4x.c \ coff-tic54x.c \ - coff-tic80.c \ coff-z80.c \ coff-z8k.c \ coffgen.c \ @@ -493,6 +484,7 @@ elf32-xgate.c \ elf32-xstormy16.c \ elf32-xtensa.c \ + elf32-z80.c \ elf32.c \ elflink.c \ elfxx-sparc.c \ @@ -511,14 +503,12 @@ pe-arm.c \ pe-i386.c \ pe-mcore.c \ - pe-ppc.c \ pe-sh.c \ pef.c \ pei-arm-wince.c \ pei-arm.c \ pei-i386.c \ pei-mcore.c \ - pei-ppc.c \ pei-sh.c \ plugin.c \ ppcboot.c \ @@ -831,63 +821,46 @@ endif elf32-target.h : elfxx-target.h - rm -f elf32-target.h - $(SED) -e s/NN/32/g < $(srcdir)/elfxx-target.h > elf32-target.new - mv -f elf32-target.new elf32-target.h + $(SED) -e s/NN/32/g < $< > $@ elf64-target.h : elfxx-target.h - rm -f elf64-target.h - $(SED) -e s/NN/64/g < $(srcdir)/elfxx-target.h > elf64-target.new - mv -f elf64-target.new elf64-target.h + $(SED) -e s/NN/64/g < $< > $@ elf32-aarch64.c : elfnn-aarch64.c - rm -f elf32-aarch64.c - echo "#line 1 \"$(srcdir)/elfnn-aarch64.c\"" > elf32-aarch64.new - $(SED) -e s/NN/32/g < $(srcdir)/elfnn-aarch64.c >> elf32-aarch64.new - mv -f elf32-aarch64.new elf32-aarch64.c + echo "#line 1 \"elfnn-aarch64.c\"" > $@ + $(SED) -e s/NN/32/g < $< >> $@ elf64-aarch64.c : elfnn-aarch64.c - rm -f elf64-aarch64.c - echo "#line 1 \"$(srcdir)/elfnn-aarch64.c\"" > elf64-aarch64.new - $(SED) -e s/NN/64/g < $(srcdir)/elfnn-aarch64.c >> elf64-aarch64.new - mv -f elf64-aarch64.new elf64-aarch64.c + echo "#line 1 \"elfnn-aarch64.c\"" > $@ + $(SED) -e s/NN/64/g < $< >> $@ elf32-ia64.c : elfnn-ia64.c - rm -f elf32-ia64.c - $(SED) -e s/NN/32/g < $(srcdir)/elfnn-ia64.c > elf32-ia64.new - mv -f elf32-ia64.new elf32-ia64.c + echo "#line 1 \"elfnn-ia64.c\"" > $@ + $(SED) -e s/NN/32/g < $< >> $@ elf64-ia64.c : elfnn-ia64.c - rm -f elf64-ia64.c - $(SED) -e s/NN/64/g < $(srcdir)/elfnn-ia64.c > elf64-ia64.new - mv -f elf64-ia64.new elf64-ia64.c + echo "#line 1 \"elfnn-ia64.c\"" > $@ + $(SED) -e s/NN/64/g < $< >> $@ elf32-riscv.c : elfnn-riscv.c - rm -f elf32-riscv.c - echo "#line 1 \"$(srcdir)/elfnn-riscv.c\"" > elf32-riscv.new - sed -e s/NN/32/g < $(srcdir)/elfnn-riscv.c >> elf32-riscv.new - mv -f elf32-riscv.new elf32-riscv.c + echo "#line 1 \"elfnn-riscv.c\"" > $@ + $(SED) -e s/NN/32/g < $< >> $@ elf64-riscv.c : elfnn-riscv.c - rm -f elf64-riscv.c - echo "#line 1 \"$(srcdir)/elfnn-riscv.c\"" > elf64-riscv.new - sed -e s/NN/64/g < $(srcdir)/elfnn-riscv.c >> elf64-riscv.new - mv -f elf64-riscv.new elf64-riscv.c + echo "#line 1 \"elfnn-riscv.c\"" > $@ + $(SED) -e s/NN/64/g < $< >> $@ peigen.c : peXXigen.c - rm -f peigen.c - $(SED) -e s/XX/pe/g < $(srcdir)/peXXigen.c > peigen.new - mv -f peigen.new peigen.c + echo "#line 1 \"peXXigen.c\"" > $@ + $(SED) -e s/XX/pe/g < $< >> $@ pepigen.c : peXXigen.c - rm -f pepigen.c - $(SED) -e s/XX/pep/g < $(srcdir)/peXXigen.c > pepigen.new - mv -f pepigen.new pepigen.c + echo "#line 1 \"peXXigen.c\"" > $@ + $(SED) -e s/XX/pep/g < $< >> $@ pex64igen.c: peXXigen.c - rm -f pex64igen.c - $(SED) -e s/XX/pex64/g < $(srcdir)/peXXigen.c > pex64igen.new - mv -f pex64igen.new pex64igen.c + echo "#line 1 \"peXXigen.c\"" > $@ + $(SED) -e s/XX/pex64/g < $< >> $@ BFD_H_DEPS= $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/diagnostics.h LOCAL_H_DEPS= libbfd.h sysdep.h config.h bfd_stdint.h diff -Nru gdb-9.1/bfd/Makefile.in gdb-10.2/bfd/Makefile.in --- gdb-9.1/bfd/Makefile.in 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/Makefile.in 2021-04-25 04:06:26.000000000 +0000 @@ -15,7 +15,7 @@ @SET_MAKE@ # -# Copyright (C) 2012-2019 Free Software Foundation, Inc. +# Copyright (C) 2012-2020 Free Software Foundation, Inc. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -330,6 +330,7 @@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ +LARGEFILE_CPPFLAGS = @LARGEFILE_CPPFLAGS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBINTL = @LIBINTL@ @@ -479,9 +480,9 @@ ZLIB = @zlibdir@ -lz ZLIBINC = @zlibinc@ AM_CFLAGS = $(WARN_CFLAGS) $(ZLIBINC) -AM_CPPFLAGS = -DBINDIR='"$(bindir)"' -DLIBDIR='"$(libdir)"' @HDEFINES@ \ - @COREFLAG@ @TDEFINES@ $(CSEARCH) $(CSWITCHES) $(HAVEVECS) \ - @INCINTL@ $(am__empty) +AM_CPPFLAGS = -DBINDIR='"$(bindir)"' -DLIBDIR='"$(libdir)"' \ + @LARGEFILE_CPPFLAGS@ @HDEFINES@ @COREFLAG@ @TDEFINES@ \ + $(CSEARCH) $(CSWITCHES) $(HAVEVECS) @INCINTL@ @PLUGINS_TRUE@LIBDL = @lt_cv_dlopen_libs@ # bfd.h goes here, for now @@ -568,7 +569,6 @@ cpu-or1k.lo \ cpu-pdp11.lo \ cpu-pj.lo \ - cpu-plugin.lo \ cpu-powerpc.lo \ cpu-pru.lo \ cpu-rs6000.lo \ @@ -584,7 +584,6 @@ cpu-tic4x.lo \ cpu-tic54x.lo \ cpu-tic6x.lo \ - cpu-tic80.lo \ cpu-tilegx.lo \ cpu-tilepro.lo \ cpu-v850.lo \ @@ -654,7 +653,6 @@ cpu-or1k.c \ cpu-pdp11.c \ cpu-pj.c \ - cpu-plugin.c \ cpu-powerpc.c \ cpu-pru.c \ cpu-rs6000.c \ @@ -670,7 +668,6 @@ cpu-tic4x.c \ cpu-tic54x.c \ cpu-tic6x.c \ - cpu-tic80.c \ cpu-tilegx.c \ cpu-tilepro.c \ cpu-v850.c \ @@ -691,7 +688,6 @@ BFD32_BACKENDS = \ aout-cris.lo \ aout-ns32k.lo \ - aout-tic30.lo \ aout32.lo \ cf-i386lynx.lo \ coff-go32.lo \ @@ -703,7 +699,6 @@ coff-tic30.lo \ coff-tic4x.lo \ coff-tic54x.lo \ - coff-tic80.lo \ coff-z80.lo \ coff-z8k.lo \ coffgen.lo \ @@ -782,6 +777,7 @@ elf32-xgate.lo \ elf32-xstormy16.lo \ elf32-xtensa.lo \ + elf32-z80.lo \ elf32.lo \ elflink.lo \ elfxx-sparc.lo \ @@ -800,14 +796,12 @@ pe-arm.lo \ pe-i386.lo \ pe-mcore.lo \ - pe-ppc.lo \ pe-sh.lo \ pef.lo \ pei-arm-wince.lo \ pei-arm.lo \ pei-i386.lo \ pei-mcore.lo \ - pei-ppc.lo \ pei-sh.lo \ peigen.lo \ plugin.lo \ @@ -827,7 +821,6 @@ BFD32_BACKENDS_CFILES = \ aout-cris.c \ aout-ns32k.c \ - aout-tic30.c \ aout32.c \ cf-i386lynx.c \ coff-go32.c \ @@ -839,7 +832,6 @@ coff-tic30.c \ coff-tic4x.c \ coff-tic54x.c \ - coff-tic80.c \ coff-z80.c \ coff-z8k.c \ coffgen.c \ @@ -918,6 +910,7 @@ elf32-xgate.c \ elf32-xstormy16.c \ elf32-xtensa.c \ + elf32-z80.c \ elf32.c \ elflink.c \ elfxx-sparc.c \ @@ -936,14 +929,12 @@ pe-arm.c \ pe-i386.c \ pe-mcore.c \ - pe-ppc.c \ pe-sh.c \ pef.c \ pei-arm-wince.c \ pei-arm.c \ pei-i386.c \ pei-mcore.c \ - pei-ppc.c \ pei-sh.c \ plugin.c \ ppcboot.c \ @@ -1299,7 +1290,6 @@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aix5ppc-core.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aout-cris.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aout-ns32k.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aout-tic30.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aout32.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aout64.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/archive.Plo@am__quote@ @@ -1323,7 +1313,6 @@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff-tic30.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff-tic4x.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff-tic54x.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff-tic80.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff-x86_64.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff-z80.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff-z8k.Plo@am__quote@ @@ -1385,7 +1374,6 @@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-or1k.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-pdp11.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-pj.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-plugin.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-powerpc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-pru.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-riscv.Plo@am__quote@ @@ -1402,7 +1390,6 @@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-tic4x.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-tic54x.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-tic6x.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-tic80.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-tilegx.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-tilepro.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-v850.Plo@am__quote@ @@ -1496,6 +1483,7 @@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-xgate.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-xstormy16.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-xtensa.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-z80.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64-aarch64.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64-alpha.Plo@am__quote@ @@ -1553,7 +1541,6 @@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pe-arm.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pe-i386.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pe-mcore.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pe-ppc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pe-sh.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pe-x86_64.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pef.Plo@am__quote@ @@ -1562,7 +1549,6 @@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pei-i386.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pei-ia64.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pei-mcore.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pei-ppc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pei-sh.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pei-x86_64.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/peigen.Plo@am__quote@ @@ -1965,63 +1951,46 @@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ -DDEBUGDIR=\"$(DEBUGDIR)\" $(srcdir)/dwarf2.c elf32-target.h : elfxx-target.h - rm -f elf32-target.h - $(SED) -e s/NN/32/g < $(srcdir)/elfxx-target.h > elf32-target.new - mv -f elf32-target.new elf32-target.h + $(SED) -e s/NN/32/g < $< > $@ elf64-target.h : elfxx-target.h - rm -f elf64-target.h - $(SED) -e s/NN/64/g < $(srcdir)/elfxx-target.h > elf64-target.new - mv -f elf64-target.new elf64-target.h + $(SED) -e s/NN/64/g < $< > $@ elf32-aarch64.c : elfnn-aarch64.c - rm -f elf32-aarch64.c - echo "#line 1 \"$(srcdir)/elfnn-aarch64.c\"" > elf32-aarch64.new - $(SED) -e s/NN/32/g < $(srcdir)/elfnn-aarch64.c >> elf32-aarch64.new - mv -f elf32-aarch64.new elf32-aarch64.c + echo "#line 1 \"elfnn-aarch64.c\"" > $@ + $(SED) -e s/NN/32/g < $< >> $@ elf64-aarch64.c : elfnn-aarch64.c - rm -f elf64-aarch64.c - echo "#line 1 \"$(srcdir)/elfnn-aarch64.c\"" > elf64-aarch64.new - $(SED) -e s/NN/64/g < $(srcdir)/elfnn-aarch64.c >> elf64-aarch64.new - mv -f elf64-aarch64.new elf64-aarch64.c + echo "#line 1 \"elfnn-aarch64.c\"" > $@ + $(SED) -e s/NN/64/g < $< >> $@ elf32-ia64.c : elfnn-ia64.c - rm -f elf32-ia64.c - $(SED) -e s/NN/32/g < $(srcdir)/elfnn-ia64.c > elf32-ia64.new - mv -f elf32-ia64.new elf32-ia64.c + echo "#line 1 \"elfnn-ia64.c\"" > $@ + $(SED) -e s/NN/32/g < $< >> $@ elf64-ia64.c : elfnn-ia64.c - rm -f elf64-ia64.c - $(SED) -e s/NN/64/g < $(srcdir)/elfnn-ia64.c > elf64-ia64.new - mv -f elf64-ia64.new elf64-ia64.c + echo "#line 1 \"elfnn-ia64.c\"" > $@ + $(SED) -e s/NN/64/g < $< >> $@ elf32-riscv.c : elfnn-riscv.c - rm -f elf32-riscv.c - echo "#line 1 \"$(srcdir)/elfnn-riscv.c\"" > elf32-riscv.new - sed -e s/NN/32/g < $(srcdir)/elfnn-riscv.c >> elf32-riscv.new - mv -f elf32-riscv.new elf32-riscv.c + echo "#line 1 \"elfnn-riscv.c\"" > $@ + $(SED) -e s/NN/32/g < $< >> $@ elf64-riscv.c : elfnn-riscv.c - rm -f elf64-riscv.c - echo "#line 1 \"$(srcdir)/elfnn-riscv.c\"" > elf64-riscv.new - sed -e s/NN/64/g < $(srcdir)/elfnn-riscv.c >> elf64-riscv.new - mv -f elf64-riscv.new elf64-riscv.c + echo "#line 1 \"elfnn-riscv.c\"" > $@ + $(SED) -e s/NN/64/g < $< >> $@ peigen.c : peXXigen.c - rm -f peigen.c - $(SED) -e s/XX/pe/g < $(srcdir)/peXXigen.c > peigen.new - mv -f peigen.new peigen.c + echo "#line 1 \"peXXigen.c\"" > $@ + $(SED) -e s/XX/pe/g < $< >> $@ pepigen.c : peXXigen.c - rm -f pepigen.c - $(SED) -e s/XX/pep/g < $(srcdir)/peXXigen.c > pepigen.new - mv -f pepigen.new pepigen.c + echo "#line 1 \"peXXigen.c\"" > $@ + $(SED) -e s/XX/pep/g < $< >> $@ pex64igen.c: peXXigen.c - rm -f pex64igen.c - $(SED) -e s/XX/pex64/g < $(srcdir)/peXXigen.c > pex64igen.new - mv -f pex64igen.new pex64igen.c + echo "#line 1 \"peXXigen.c\"" > $@ + $(SED) -e s/XX/pex64/g < $< >> $@ $(BFD32_LIBS) \ $(BFD64_LIBS) \ $(ALL_MACHINES) \ diff -Nru gdb-9.1/bfd/makefile.vms gdb-10.2/bfd/makefile.vms --- gdb-9.1/bfd/makefile.vms 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/makefile.vms 2021-04-25 04:06:26.000000000 +0000 @@ -5,7 +5,7 @@ # # Created by Klaus K"ampf, kkaempf@rmi.de # -# Copyright (C) 2012-2019 Free Software Foundation, Inc. +# Copyright (C) 2012-2020 Free Software Foundation, Inc. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/bfd/mep-relocs.pl gdb-10.2/bfd/mep-relocs.pl --- gdb-9.1/bfd/mep-relocs.pl 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/mep-relocs.pl 2021-04-25 04:06:26.000000000 +0000 @@ -2,7 +2,7 @@ # -*- perl -*- # # Toshiba MeP Media Engine Relocation Generator -# Copyright (C) 2001-2019 Free Software Foundation, Inc. +# Copyright (C) 2001-2020 Free Software Foundation, Inc. # This file is part of BFD. # Originally written by DJ Delorie # @@ -156,20 +156,23 @@ $e = '^e4' # endian swap for data } print NEW " case R_MEP_$relocs[$i]: /* $pattern[$i] */\n"; + if ($relocs[$i] =~ /HI16S/) { + print NEW " u += 0x8000;\n" + } if ($attrs[$i] =~ /tp-rel/i) { - print NEW " $v -= mep_tpoff_base(rel->r_offset);\n"; + print NEW " u -= mep_tpoff_base(rel->r_offset);\n"; } if ($attrs[$i] =~ /gp-rel/i) { - print NEW " $v -= mep_sdaoff_base(rel->r_offset);\n"; + print NEW " u -= mep_sdaoff_base(rel->r_offset);\n"; } if ($attrs[$i] !~ /no-overflow/ && $bits[$i] < 32) { if ($v eq "u") { $max = (1 << $bits[$i]) - 1; print NEW " if (u > $max) r = bfd_reloc_overflow;\n"; } else { - $min = -(1 << ($bits[$i]-1)); - $max = (1 << ($bits[$i]-1)) - 1; - print NEW " if ($min > s || s > $max) r = bfd_reloc_overflow;\n"; + $min = (1 << ($bits[$i]-1)); + $max = (1 << ($bits[$i])) - 1; + print NEW " if (u + $min > $max) r = bfd_reloc_overflow;\n"; } } for ($b=0; $b> $right) & 0x$mask)"; + print NEW "((u >> $right) & 0x$mask)"; } else { - print NEW "($v & 0x$mask)"; + print NEW "(u & 0x$mask)"; } print NEW ";\n"; } diff -Nru gdb-9.1/bfd/merge.c gdb-10.2/bfd/merge.c --- gdb-9.1/bfd/merge.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/merge.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* SEC_MERGE support. - Copyright (C) 2001-2019 Free Software Foundation, Inc. + Copyright (C) 2001-2020 Free Software Foundation, Inc. Written by Jakub Jelinek . This file is part of BFD, the Binary File Descriptor library. @@ -292,8 +292,9 @@ asection *sec = secinfo->sec; char *pad = NULL; bfd_size_type off = 0; - int alignment_power = sec->output_section->alignment_power; - bfd_size_type pad_len; + unsigned int opb = bfd_octets_per_byte (abfd, sec); + int alignment_power = sec->output_section->alignment_power * opb; + bfd_size_type pad_len; /* Octets. */ /* FIXME: If alignment_power is 0 then really we should scan the entry list for the largest required alignment and use that. */ @@ -364,9 +365,11 @@ { struct sec_merge_info *sinfo; struct sec_merge_sec_info *secinfo; - unsigned int align; + unsigned int alignment_power; /* Octets. */ + unsigned int align; /* Octets. */ bfd_size_type amt; bfd_byte *contents; + unsigned int opb = bfd_octets_per_byte (abfd, sec); if ((abfd->flags & DYNAMIC) != 0 || (sec->flags & SEC_MERGE) == 0) @@ -389,10 +392,11 @@ #ifndef CHAR_BIT #define CHAR_BIT 8 #endif - if (sec->alignment_power >= sizeof (align) * CHAR_BIT) + alignment_power = sec->alignment_power * opb; + if (alignment_power >= sizeof (align) * CHAR_BIT) return TRUE; - align = 1u << sec->alignment_power; + align = 1u << alignment_power; if ((sec->entsize < align && ((sec->entsize & (sec->entsize - 1)) || !(sec->flags & SEC_STRINGS))) @@ -549,7 +553,7 @@ return TRUE; -error_return: + error_return: for (secinfo = sinfo->chain; secinfo; secinfo = secinfo->next) *secinfo->psecinfo = NULL; return FALSE; @@ -739,7 +743,7 @@ for (sinfo = (struct sec_merge_info *) xsinfo; sinfo; sinfo = sinfo->next) { struct sec_merge_sec_info *secinfo; - bfd_size_type align; + bfd_size_type align; /* Bytes. */ if (! sinfo->chain) continue; @@ -764,8 +768,10 @@ return FALSE; if (align) { + unsigned int opb = bfd_octets_per_byte (abfd, secinfo->sec); + align = (bfd_size_type) 1 << secinfo->sec->alignment_power; - if ((secinfo->sec->size & (align - 1)) != 0) + if (((secinfo->sec->size / opb) & (align - 1)) != 0) align = 0; } } @@ -782,7 +788,7 @@ else { struct sec_merge_hash_entry *e; - bfd_size_type size = 0; + bfd_size_type size = 0; /* Octets. */ /* Things are much simpler for non-strings. Just assign them slots in the section. */ diff -Nru gdb-9.1/bfd/mmo.c gdb-10.2/bfd/mmo.c --- gdb-9.1/bfd/mmo.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/mmo.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD back-end for mmo objects (MMIX-specific object-format). - Copyright (C) 2001-2019 Free Software Foundation, Inc. + Copyright (C) 2001-2020 Free Software Foundation, Inc. Written by Hans-Peter Nilsson (hp@bitrange.com). Infrastructure and other bits originally copied from srec.c and binary.c. @@ -386,7 +386,7 @@ static void mmo_xore_64 (asection *, bfd_vma vma, bfd_vma value); static void mmo_xore_32 (asection *, bfd_vma vma, unsigned int); static void mmo_xore_16 (asection *, bfd_vma vma, unsigned int); -static const bfd_target *mmo_object_p (bfd *); +static bfd_cleanup mmo_object_p (bfd *); static void mmo_map_set_sizes (bfd *, asection *, void *); static bfd_boolean mmo_get_symbols (bfd *); static bfd_boolean mmo_create_symbol (bfd *, const char *, bfd_vma, @@ -500,7 +500,7 @@ /* Check whether an existing file is an mmo file. */ -static const bfd_target * +static bfd_cleanup mmo_object_p (bfd *abfd) { struct stat statbuf; @@ -556,7 +556,7 @@ if (! bfd_default_set_arch_mach (abfd, bfd_arch_mmix, 0)) goto bad_format_free; - return abfd->xvec; + return _bfd_no_cleanup; bad_format_free: free (abfd->tdata.mmo_data->lop_stab_symbol); @@ -579,7 +579,7 @@ /* All fields are zero-initialized, so we don't have to explicitly initialize most. */ - tdata_type *tdata = (tdata_type *) bfd_zmalloc (sizeof (tdata_type)); + tdata_type *tdata = (tdata_type *) bfd_zalloc (abfd, sizeof (tdata_type)); if (tdata == NULL) return FALSE; @@ -1588,7 +1588,7 @@ unsigned int lineno = 1; bfd_boolean error = FALSE; bfd_vma vma = 0; - asection *sec = bfd_make_section_old_way (abfd, MMO_TEXT_SECTION_NAME); + asection *sec = NULL; asection *non_spec_sec = NULL; bfd_vma non_spec_vma = 0; bfd_size_type nbytes_read = 0; @@ -1646,6 +1646,8 @@ goto error_return; vma &= ~3; + if (sec == NULL) + sec = bfd_make_section_old_way (abfd, MMO_TEXT_SECTION_NAME); mmo_xore_32 (sec, vma, bfd_get_32 (abfd, buf)); vma += 4; lineno++; @@ -2038,6 +2040,8 @@ else { /* This wasn't a lopcode, so store it in the current section. */ + if (sec == NULL) + sec = bfd_make_section_old_way (abfd, MMO_TEXT_SECTION_NAME); mmo_xore_32 (sec, vma & ~3, bfd_get_32 (abfd, buf)); vma += 4; vma &= ~3; @@ -2074,13 +2078,12 @@ if (sec != NULL && (bfd_section_flags (sec) & SEC_HAS_CONTENTS) && !bfd_set_section_flags (sec, (bfd_section_flags (sec) - | SEC_ALLOC | SEC_LOAD))) + | SEC_ALLOC | SEC_LOAD | SEC_DATA))) error = TRUE; /* Free whatever resources we took. */ for (i = 0; i < sizeof (file_names) / sizeof (file_names[0]); i++) - if (file_names[i]) - free (file_names[i]); + free (file_names[i]); return ! error; } @@ -2935,7 +2938,8 @@ if (table == NULL) return FALSE; - memcpy (table, orig_table, count * sizeof (asymbol *)); + if (count != 0) + memcpy (table, orig_table, count * sizeof (asymbol *)); /* Move :Main (if there is one) to the first position. This is necessary to get the same layout of the trie-tree when linking as diff -Nru gdb-9.1/bfd/netbsd-core.c gdb-10.2/bfd/netbsd-core.c --- gdb-9.1/bfd/netbsd-core.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/netbsd-core.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD back end for NetBSD style core files - Copyright (C) 1988-2019 Free Software Foundation, Inc. + Copyright (C) 1988-2020 Free Software Foundation, Inc. Written by Paul Kranenburg, EUR This file is part of BFD, the Binary File Descriptor library. @@ -51,7 +51,7 @@ /* Handle NetBSD-style core dump file. */ -static const bfd_target * +static bfd_cleanup netbsd_core_file_p (bfd *abfd) { int val; @@ -60,7 +60,7 @@ asection *asect; struct core core; struct coreseg coreseg; - bfd_size_type amt = sizeof core; + size_t amt = sizeof core; val = bfd_bread (&core, amt, abfd); if (val != sizeof core) @@ -222,7 +222,7 @@ } /* OK, we believe you. You're a core file (sure, sure). */ - return abfd->xvec; + return _bfd_no_cleanup; punt: bfd_release (abfd, abfd->tdata.any); diff -Nru gdb-9.1/bfd/netbsd.h gdb-10.2/bfd/netbsd.h --- gdb-9.1/bfd/netbsd.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/netbsd.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD back-end definitions used by all NetBSD targets. - Copyright (C) 1990-2019 Free Software Foundation, Inc. + Copyright (C) 1990-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -48,7 +48,7 @@ ((execp)->a_info & 0xfb00ffff) | ((((int) (machtype)) & 0x3ff) << 16)) #define N_SET_FLAGS(execp, flags) \ ((execp)->a_info = \ - ((execp)->a_info & 0x03ffffff) | ((flags & 0x03f) << 26)) + ((execp)->a_info & 0x03ffffff) | ((flags & 0x3fu) << 26)) #include "sysdep.h" #include "bfd.h" diff -Nru gdb-9.1/bfd/ns32k.h gdb-10.2/bfd/ns32k.h --- gdb-9.1/bfd/ns32k.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/ns32k.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Header file for ns32k routines. - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. Written by Cygnus Support. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/ns32knetbsd.c gdb-10.2/bfd/ns32knetbsd.c --- gdb-9.1/bfd/ns32knetbsd.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/ns32knetbsd.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD back-end for NetBSD/ns32k a.out-ish binaries. - Copyright (C) 1990-2019 Free Software Foundation, Inc. + Copyright (C) 1990-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/opncls.c gdb-10.2/bfd/opncls.c --- gdb-9.1/bfd/opncls.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/opncls.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* opncls.c -- open and close a BFD. - Copyright (C) 1990-2019 Free Software Foundation, Inc. + Copyright (C) 1990-2020 Free Software Foundation, Inc. Written by Cygnus Support. @@ -84,6 +84,7 @@ if (!bfd_hash_table_init_n (& nbfd->section_htab, bfd_section_hash_newfunc, sizeof (struct section_hash_entry), 13)) { + objalloc_free ((struct objalloc *) nbfd->memory); free (nbfd); return NULL; } @@ -125,9 +126,9 @@ bfd_hash_table_free (&abfd->section_htab); objalloc_free ((struct objalloc *) abfd->memory); } + else + free ((char *) bfd_get_filename (abfd)); - if (abfd->filename) - free ((char *) abfd->filename); free (abfd->arelt_data); free (abfd); } @@ -139,6 +140,29 @@ { if (abfd->memory) { + const char *filename = bfd_get_filename (abfd); + if (filename) + { + /* We can't afford to lose the bfd filename when freeing + abfd->memory, because that would kill the cache.c scheme + of closing and reopening files in order to limit the + number of open files. To reopen, you need the filename. + And indeed _bfd_compute_and_write_armap calls + _bfd_free_cached_info to free up space used by symbols + and by check_format_matches. Which we want to continue + doing to handle very large archives. Later the archive + elements are copied, which might require reopening files. + We also want to keep using objalloc memory for the + filename since that allows the name to be updated + without either leaking memory or implementing some sort + of reference counted string for copies of the filename. */ + size_t len = strlen (filename) + 1; + char *copy = bfd_malloc (len); + if (copy == NULL) + return FALSE; + memcpy (copy, filename, len); + abfd->filename = copy; + } bfd_hash_table_free (&abfd->section_htab); objalloc_free ((struct objalloc *) abfd->memory); @@ -233,8 +257,7 @@ /* PR 11983: Do not cache the original filename, but rather make a copy - the original might go away. */ - nbfd->filename = bfd_strdup (filename); - if (nbfd->filename == NULL) + if (!bfd_set_filename (nbfd, filename)) { fclose (nbfd->iostream); _bfd_delete_bfd (nbfd); @@ -407,8 +430,7 @@ nbfd->iostream = stream; /* PR 11983: Do not cache the original filename, but rather make a copy - the original might go away. */ - nbfd->filename = bfd_strdup (filename); - if (nbfd->filename == NULL) + if (!bfd_set_filename (nbfd, filename)) { _bfd_delete_bfd (nbfd); return NULL; @@ -608,8 +630,7 @@ /* PR 11983: Do not cache the original filename, but rather make a copy - the original might go away. */ - nbfd->filename = bfd_strdup (filename); - if (nbfd->filename == NULL) + if (!bfd_set_filename (nbfd, filename)) { _bfd_delete_bfd (nbfd); return NULL; @@ -680,8 +701,7 @@ /* PR 11983: Do not cache the original filename, but rather make a copy - the original might go away. */ - nbfd->filename = bfd_strdup (filename); - if (nbfd->filename == NULL) + if (!bfd_set_filename (nbfd, filename)) { _bfd_delete_bfd (nbfd); return NULL; @@ -709,7 +729,7 @@ { struct stat buf; - if (stat (abfd->filename, &buf) == 0 + if (stat (bfd_get_filename (abfd), &buf) == 0 /* Do not attempt to change non-regular files. This is here especially for configure scripts and kernel builds which run tests with "ld [...] -o /dev/null". */ @@ -718,7 +738,7 @@ unsigned int mask = umask (0); umask (mask); - chmod (abfd->filename, + chmod (bfd_get_filename (abfd), (0777 & (buf.st_mode | ((S_IXUSR | S_IXGRP | S_IXOTH) &~ mask)))); } @@ -825,8 +845,7 @@ return NULL; /* PR 11983: Do not cache the original filename, but rather make a copy - the original might go away. */ - nbfd->filename = bfd_strdup (filename); - if (nbfd->filename == NULL) + if (!bfd_set_filename (nbfd, filename)) { _bfd_delete_bfd (nbfd); return NULL; @@ -982,32 +1001,6 @@ } /* -INTERNAL_FUNCTION - bfd_alloc2 - -SYNOPSIS - void *bfd_alloc2 (bfd *abfd, bfd_size_type nmemb, bfd_size_type size); - -DESCRIPTION - Allocate a block of @var{nmemb} elements of @var{size} bytes each - of memory attached to <> and return a pointer to it. -*/ - -void * -bfd_alloc2 (bfd *abfd, bfd_size_type nmemb, bfd_size_type size) -{ - if ((nmemb | size) >= HALF_BFD_SIZE_TYPE - && size != 0 - && nmemb > ~(bfd_size_type) 0 / size) - { - bfd_set_error (bfd_error_no_memory); - return NULL; - } - - return bfd_alloc (abfd, size * nmemb); -} - -/* FUNCTION bfd_zalloc @@ -1030,39 +1023,6 @@ return res; } -/* -INTERNAL_FUNCTION - bfd_zalloc2 - -SYNOPSIS - void *bfd_zalloc2 (bfd *abfd, bfd_size_type nmemb, bfd_size_type size); - -DESCRIPTION - Allocate a block of @var{nmemb} elements of @var{size} bytes each - of zeroed memory attached to <> and return a pointer to it. -*/ - -void * -bfd_zalloc2 (bfd *abfd, bfd_size_type nmemb, bfd_size_type size) -{ - void *res; - - if ((nmemb | size) >= HALF_BFD_SIZE_TYPE - && size != 0 - && nmemb > ~(bfd_size_type) 0 / size) - { - bfd_set_error (bfd_error_no_memory); - return NULL; - } - - size *= nmemb; - - res = bfd_alloc (abfd, size); - if (res) - memset (res, 0, (size_t) size); - return res; -} - /* Free a block allocated for a BFD. Note: Also frees all more recently allocated blocks! */ @@ -1209,6 +1169,7 @@ unsigned int crc_offset; char *name; bfd_size_type size; + ufile_ptr file_size; BFD_ASSERT (abfd); BFD_ASSERT (crc32_out); @@ -1219,15 +1180,15 @@ return NULL; size = bfd_section_size (sect); + file_size = bfd_get_size (abfd); /* PR 22794: Make sure that the section has a reasonable size. */ - if (size < 8 || size >= bfd_get_size (abfd)) + if (size < 8 || (file_size != 0 && size >= file_size)) return NULL; if (!bfd_malloc_and_get_section (abfd, sect, &contents)) { - if (contents != NULL) - free (contents); + free (contents); return NULL; } @@ -1298,6 +1259,7 @@ unsigned int buildid_offset; char *name; bfd_size_type size; + ufile_ptr file_size; BFD_ASSERT (abfd); BFD_ASSERT (buildid_len); @@ -1309,13 +1271,13 @@ return NULL; size = bfd_section_size (sect); - if (size < 8 || size >= bfd_get_size (abfd)) + file_size = bfd_get_size (abfd); + if (size < 8 || (file_size != 0 && size >= file_size)) return NULL; if (!bfd_malloc_and_get_section (abfd, sect, & contents)) { - if (contents != NULL) - free (contents); + free (contents); return NULL; } @@ -1455,7 +1417,7 @@ debug_file_directory = "."; /* BFD may have been opened from a stream. */ - if (abfd->filename == NULL) + if (bfd_get_filename (abfd) == NULL) { bfd_set_error (bfd_error_invalid_operation); return NULL; @@ -1475,8 +1437,9 @@ if (include_dirs) { - for (dirlen = strlen (abfd->filename); dirlen > 0; dirlen--) - if (IS_DIR_SEPARATOR (abfd->filename[dirlen - 1])) + const char *fname = bfd_get_filename (abfd); + for (dirlen = strlen (fname); dirlen > 0; dirlen--) + if (IS_DIR_SEPARATOR (fname[dirlen - 1])) break; dir = (char *) bfd_malloc (dirlen + 1); @@ -1485,7 +1448,7 @@ free (base); return NULL; } - memcpy (dir, abfd->filename, dirlen); + memcpy (dir, fname, dirlen); dir[dirlen] = '\0'; } else @@ -1497,7 +1460,7 @@ /* Compute the canonical name of the bfd object with all symbolic links resolved, for use in the global debugfile directory. */ - canon_dir = lrealpath (abfd->filename); + canon_dir = lrealpath (bfd_get_filename (abfd)); for (canon_dirlen = strlen (canon_dir); canon_dirlen > 0; canon_dirlen--) if (IS_DIR_SEPARATOR (canon_dir[canon_dirlen - 1])) break; @@ -1882,8 +1845,7 @@ if (!bfd_malloc_and_get_section (abfd, sect, & contents)) { - if (contents != NULL) - free (contents); + free (contents); return NULL; } @@ -1964,7 +1926,7 @@ bfd_size_type s; bfd_byte *d; - if (abfd == NULL || abfd->filename == NULL || build_id_out == NULL) + if (abfd == NULL || bfd_get_filename (abfd) == NULL || build_id_out == NULL) { bfd_set_error (bfd_error_invalid_operation); return NULL; @@ -2095,17 +2057,23 @@ bfd_set_filename SYNOPSIS - void bfd_set_filename (bfd *abfd, char *filename); + const char *bfd_set_filename (bfd *abfd, const char *filename); DESCRIPTION - Set the filename of @var{abfd}. The old filename, if any, is freed. - @var{filename} must be allocated using @code{xmalloc}. After - this call, it is owned @var{abfd}. + Set the filename of @var{abfd}, copying the FILENAME parameter to + bfd_alloc'd memory owned by @var{abfd}. Returns a pointer the + newly allocated name, or NULL if the allocation failed. */ -void -bfd_set_filename (bfd *abfd, char *filename) +const char * +bfd_set_filename (bfd *abfd, const char *filename) { - free ((char *) abfd->filename); - abfd->filename = filename; + size_t len = strlen (filename) + 1; + char *n = bfd_alloc (abfd, len); + if (n) + { + memcpy (n, filename, len); + abfd->filename = n; + } + return n; } diff -Nru gdb-9.1/bfd/osf-core.c gdb-10.2/bfd/osf-core.c --- gdb-9.1/bfd/osf-core.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/osf-core.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD back-end for OSF/1 core files. - Copyright (C) 1993-2019 Free Software Foundation, Inc. + Copyright (C) 1993-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -70,14 +70,14 @@ return asect; } -static const bfd_target * +static bfd_cleanup osf_core_core_file_p (bfd *abfd) { int val; int i; char *secname; struct core_filehdr core_header; - bfd_size_type amt; + size_t amt; amt = sizeof core_header; val = bfd_bread (& core_header, amt, abfd); @@ -138,7 +138,7 @@ /* OK, we believe you. You're a core file (sure, sure). */ - return abfd->xvec; + return _bfd_no_cleanup; fail: bfd_release (abfd, core_hdr (abfd)); diff -Nru gdb-9.1/bfd/pc532-mach.c gdb-10.2/bfd/pc532-mach.c --- gdb-9.1/bfd/pc532-mach.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/pc532-mach.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD back-end for Mach3/532 a.out-ish binaries. - Copyright (C) 1990-2019 Free Software Foundation, Inc. + Copyright (C) 1990-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/pdp11.c gdb-10.2/bfd/pdp11.c --- gdb-9.1/bfd/pdp11.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/pdp11.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD back-end for PDP-11 a.out binaries. - Copyright (C) 2001-2019 Free Software Foundation, Inc. + Copyright (C) 2001-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -22,7 +22,9 @@ /* BFD backend for PDP-11, running 2.11BSD in particular. This file was hacked up by looking hard at the existing vaxnetbsd - back end and the header files in 2.11BSD. + back end and the header files in 2.11BSD. The symbol table format + of 2.11BSD has been extended to accommodate .stab symbols. See + struct pdp11_external_nlist below for details. TODO * support for V7 file formats @@ -37,7 +39,7 @@ #define ARCH_SIZE 16 #undef TARGET_IS_BIG_ENDIAN_P -#define TARGET_PAGE_SIZE 256 +#define TARGET_PAGE_SIZE 8192 #define SEGMENT__SIZE TARGET_PAGE_SIZE #define DEFAULT_ARCH bfd_arch_pdp11 @@ -63,6 +65,7 @@ #define N_SET_FLAGS(execp, flags) do { } while (0) #define N_BADMAG(x) (N_MAGIC(x) != OMAGIC \ && N_MAGIC(x) != NMAGIC \ + && N_MAGIC(x) != IMAGIC \ && N_MAGIC(x) != ZMAGIC) #include "sysdep.h" @@ -90,7 +93,8 @@ #define A_MAGIC2 NMAGIC #define NMAGIC 0410 /* Pure executable. */ #define ZMAGIC 0413 /* Demand-paged executable. */ -#define A_MAGIC3 0411 /* Separated I&D. */ +#define IMAGIC 0411 /* Separated I&D. */ +#define A_MAGIC3 IMAGIC #define A_MAGIC4 0405 /* Overlay. */ #define A_MAGIC5 0430 /* Auto-overlay (nonseparate). */ #define A_MAGIC6 0431 /* Auto-overlay (separate). */ @@ -99,10 +103,23 @@ #define A_FLAG_RELOC_STRIPPED 0x0001 +/* The following struct defines the format of an entry in the object file + symbol table. In the original 2.11BSD struct the index into the string + table is stored as a long, but the PDP11 C convention for storing a long in + memory placed the most significant word first even though the bytes within a + word are stored least significant first. So here the string table index is + considered to be just 16 bits and the first two bytes of the struct were + previously named e_unused. To extend the symbol table format to accommodate + .stab symbols, the e_unused bytes are renamed e_desc to store the desc field + of the .stab symbol. The GDP Project's STABS document says that the "other" + field is almost always unused and can be set to zero; the only nonzero cases + identified were for stabs in their own sections, which does not apply for + pdp11 a.out format, and for a special case of GNU Modula2 which is not + supported for the PDP11. */ #define external_nlist pdp11_external_nlist struct pdp11_external_nlist { - bfd_byte e_unused[2]; /* Unused. */ + bfd_byte e_desc[2]; /* The desc field for .stab symbols, else 0. */ bfd_byte e_strx[2]; /* Index into string table of name. */ bfd_byte e_type[1]; /* Type of symbol. */ bfd_byte e_ovly[1]; /* Overlay number. */ @@ -149,6 +166,13 @@ #include "aout/stab_gnu.h" #include "aout/ar.h" +/* The symbol type numbers for the 16-bit a.out format from 2.11BSD differ from + those defined in aout64.h so we must redefine them here. N_EXT changes from + 0x01 to 0x20 which creates a conflict with some .stab values, in particular + between undefined externals (N_UNDF+N_EXT) vs. global variables (N_GYSM) and + between external bss symbols (N_BSS+N_EXT) vs. function names (N_FUN). We + disambiguate those conflicts with a hack in is_stab() to look for the ':' in + the global variable or function name string. */ #undef N_TYPE #undef N_UNDF #undef N_ABS @@ -158,6 +182,7 @@ #undef N_REG #undef N_FN #undef N_EXT +#undef N_STAB #define N_TYPE 0x1f /* Type mask. */ #define N_UNDF 0x00 /* Undefined. */ #define N_ABS 0x01 /* Absolute. */ @@ -167,6 +192,12 @@ #define N_REG 0x14 /* Register symbol. */ #define N_FN 0x1f /* File name. */ #define N_EXT 0x20 /* External flag. */ +/* Type numbers from .stab entries that could conflict: + N_GSYM 0x20 Global variable [conflict with external undef] + N_FNAME 0x22 Function name (for BSD Fortran) [ignored] + N_FUN 0x24 Function name [conflict with external BSS] + N_NOMAP 0x34 No DST map for sym. [ext. reg. doesn't exist] +*/ #define RELOC_SIZE 2 @@ -242,11 +273,16 @@ struct external_nlist *output_syms; }; +/* Copy of the link_info.separate_code boolean to select the output format with + separate instruction and data spaces selected by --imagic */ +static bfd_boolean separate_i_d = FALSE; + reloc_howto_type howto_table_pdp11[] = { /* type rs size bsz pcrel bitpos ovrf sf name part_inpl readmask setmask pcdone */ HOWTO( 0, 0, 1, 16, FALSE, 0, complain_overflow_signed,0,"16", TRUE, 0x0000ffff,0x0000ffff, FALSE), HOWTO( 1, 0, 1, 16, TRUE, 0, complain_overflow_signed,0,"DISP16", TRUE, 0x0000ffff,0x0000ffff, FALSE), +HOWTO( 2, 0, 2, 32, FALSE, 0, complain_overflow_signed,0,"32", TRUE, 0x0000ffff,0x0000ffff, FALSE), }; #define TABLE_SIZE(TABLE) (sizeof(TABLE)/sizeof(TABLE[0])) @@ -268,6 +304,8 @@ return &howto_table_pdp11[0]; case BFD_RELOC_16_PCREL: return &howto_table_pdp11[1]; + case BFD_RELOC_32: + return &howto_table_pdp11[2]; default: return NULL; } @@ -289,6 +327,19 @@ return NULL; } +/* Disambiguate conflicts between normal symbol types and .stab symbol types + (undefined externals N_UNDF+N_EXT vs. global variables N_GYSM and external + bss symbols N_BSS+N_EXT vs. function names N_FUN) with a hack to look for + the ':' in the global variable or function name string. */ + +static int +is_stab (int type, const char *name) +{ + if (type == N_GSYM || type == N_FUN) + return strchr (name, ':') != NULL; + return type > N_FUN; +} + static int pdp11_aout_write_headers (bfd *abfd, struct internal_exec *execp) { @@ -452,14 +503,14 @@ environment's "finish up" function just before returning, to handle any last-minute setup. */ -const bfd_target * +bfd_cleanup NAME (aout, some_aout_object_p) (bfd *abfd, struct internal_exec *execp, - const bfd_target *(*callback_to_real_object_p) (bfd *)) + bfd_cleanup (*callback_to_real_object_p) (bfd *)) { struct aout_data_struct *rawptr, *oldrawptr; - const bfd_target *result; - bfd_size_type amt = sizeof (struct aout_data_struct); + bfd_cleanup cleanup; + size_t amt = sizeof (struct aout_data_struct); rawptr = bfd_zalloc (abfd, amt); if (rawptr == NULL) @@ -498,6 +549,8 @@ } else if (N_MAGIC (execp) == OMAGIC) adata (abfd).magic = o_magic; + else if (N_MAGIC (execp) == IMAGIC) + adata (abfd).magic = i_magic; else { /* Should have been checked with N_BADMAG before this routine @@ -580,7 +633,7 @@ adata(abfd)->segment_size = SEGMENT_SIZE; adata(abfd)->exec_bytes_size = EXEC_BYTES_SIZE; - return abfd->xvec; + return _bfd_no_cleanup; /* The architecture is encoded in various ways in various a.out variants, or is not encoded at all in some of them. The relocation size depends @@ -592,7 +645,7 @@ header, should cope with them in this callback as well. */ #endif /* DOCUMENTATION */ - result = (*callback_to_real_object_p)(abfd); + cleanup = (*callback_to_real_object_p)(abfd); /* Now that the segment addresses have been worked out, take a better guess at whether the file is executable. If the entry point @@ -610,8 +663,11 @@ sets the entry point, and that is likely to be non-zero for most systems. */ if (execp->a_entry != 0 - || (execp->a_entry >= obj_textsec(abfd)->vma - && execp->a_entry < obj_textsec(abfd)->vma + obj_textsec(abfd)->size)) + || (execp->a_entry >= obj_textsec (abfd)->vma + && execp->a_entry < (obj_textsec (abfd)->vma + + obj_textsec (abfd)->size) + && execp->a_trsize == 0 + && execp->a_drsize == 0)) abfd->flags |= EXEC_P; #ifdef STAT_FOR_EXEC else @@ -633,12 +689,12 @@ } #endif /* STAT_FOR_EXEC */ - if (!result) + if (!cleanup) { free (rawptr); abfd->tdata.aout_data = oldrawptr; } - return result; + return cleanup; } /* Initialize ABFD for use with a.out files. */ @@ -647,7 +703,7 @@ NAME (aout, mkobject) (bfd *abfd) { struct aout_data_struct *rawptr; - bfd_size_type amt = sizeof (struct aout_data_struct); + size_t amt = sizeof (struct aout_data_struct); bfd_set_error (bfd_error_system_call); @@ -789,57 +845,56 @@ file_ptr pos = adata (abfd).exec_bytes_size; bfd_vma vma = 0; int pad = 0; + asection *text = obj_textsec (abfd); + asection *data = obj_datasec (abfd); + asection *bss = obj_bsssec (abfd); /* Text. */ - obj_textsec (abfd)->filepos = pos; - if (! obj_textsec (abfd)->user_set_vma) - obj_textsec (abfd)->vma = vma; + text->filepos = pos; + if (!text->user_set_vma) + text->vma = vma; else - vma = obj_textsec (abfd)->vma; + vma = text->vma; - pos += obj_textsec (abfd)->size; - vma += obj_textsec (abfd)->size; + pos += execp->a_text; + vma += execp->a_text; /* Data. */ - if (!obj_datasec (abfd)->user_set_vma) + if (!data->user_set_vma) { - obj_textsec (abfd)->size += pad; pos += pad; vma += pad; - obj_datasec (abfd)->vma = vma; + data->vma = vma; } else - vma = obj_datasec (abfd)->vma; - obj_datasec (abfd)->filepos = pos; - pos += obj_datasec (abfd)->size; - vma += obj_datasec (abfd)->size; + vma = data->vma; + execp->a_text += pad; + + data->filepos = pos; + pos += data->size; + vma += data->size; /* BSS. */ - if (! obj_bsssec (abfd)->user_set_vma) + if (!bss->user_set_vma) { - obj_datasec (abfd)->size += pad; pos += pad; vma += pad; - obj_bsssec (abfd)->vma = vma; + bss->vma = vma; } - else + else if (data->size > 0 || bss->size > 0) /* PR25677: for objcopy --extract-symbol */ { /* The VMA of the .bss section is set by the VMA of the .data section plus the size of the .data section. We may need to add padding bytes to make this true. */ - pad = obj_bsssec (abfd)->vma - vma; - if (pad > 0) - { - obj_datasec (abfd)->size += pad; - pos += pad; - } + pad = bss->vma - vma; + if (pad < 0) + pad = 0; + pos += pad; } - obj_bsssec (abfd)->filepos = pos; + execp->a_data = data->size + pad; + bss->filepos = pos; + execp->a_bss = bss->size; - /* Fix up the exec header. */ - execp->a_text = obj_textsec (abfd)->size; - execp->a_data = obj_datasec (abfd)->size; - execp->a_bss = obj_bsssec (abfd)->size; N_SET_MAGIC (execp, OMAGIC); } @@ -849,7 +904,11 @@ bfd_size_type data_pad, text_pad; file_ptr text_end; const struct aout_backend_data *abdp; - int ztih; /* Nonzero if text includes exec header. */ + /* TRUE if text includes exec header. */ + bfd_boolean ztih; + asection *text = obj_textsec (abfd); + asection *data = obj_datasec (abfd); + asection *bss = obj_bsssec (abfd); abdp = aout_backend_info (abfd); @@ -857,18 +916,17 @@ ztih = (abdp != NULL && (abdp->text_includes_header || obj_aout_subformat (abfd) == q_magic_format)); - obj_textsec(abfd)->filepos = (ztih - ? adata(abfd).exec_bytes_size - : adata(abfd).zmagic_disk_block_size); - if (! obj_textsec(abfd)->user_set_vma) + text->filepos = (ztih + ? adata (abfd).exec_bytes_size + : adata (abfd).zmagic_disk_block_size); + if (!text->user_set_vma) { /* ?? Do we really need to check for relocs here? */ - obj_textsec(abfd)->vma = ((abfd->flags & HAS_RELOC) - ? 0 - : (ztih - ? (abdp->default_text_vma - + adata (abfd).exec_bytes_size) - : abdp->default_text_vma)); + text->vma = ((abfd->flags & HAS_RELOC) + ? 0 + : (ztih + ? abdp->default_text_vma + adata (abfd).exec_bytes_size + : abdp->default_text_vma)); text_pad = 0; } else @@ -877,17 +935,17 @@ may need to pad it such that the .data section starts at a page boundary. */ if (ztih) - text_pad = ((obj_textsec (abfd)->filepos - obj_textsec (abfd)->vma) + text_pad = ((text->filepos - text->vma) & (adata (abfd).page_size - 1)); else - text_pad = ((- obj_textsec (abfd)->vma) + text_pad = (-text->vma & (adata (abfd).page_size - 1)); } /* Find start of data. */ if (ztih) { - text_end = obj_textsec (abfd)->filepos + obj_textsec (abfd)->size; + text_end = text->filepos + execp->a_text; text_pad += BFD_ALIGN (text_end, adata (abfd).page_size) - text_end; } else @@ -895,49 +953,42 @@ /* Note that if page_size == zmagic_disk_block_size, then filepos == page_size, and this case is the same as the ztih case. */ - text_end = obj_textsec (abfd)->size; + text_end = execp->a_text; text_pad += BFD_ALIGN (text_end, adata (abfd).page_size) - text_end; - text_end += obj_textsec (abfd)->filepos; + text_end += text->filepos; } - - obj_textsec (abfd)->size += text_pad; - text_end += text_pad; + execp->a_text += text_pad; /* Data. */ - if (!obj_datasec(abfd)->user_set_vma) + if (!data->user_set_vma) { bfd_vma vma; - vma = obj_textsec(abfd)->vma + obj_textsec(abfd)->size; - obj_datasec(abfd)->vma = BFD_ALIGN (vma, adata(abfd).segment_size); + vma = text->vma + execp->a_text; + data->vma = BFD_ALIGN (vma, adata (abfd).segment_size); } if (abdp && abdp->zmagic_mapped_contiguous) { - text_pad = (obj_datasec(abfd)->vma - - obj_textsec(abfd)->vma - - obj_textsec(abfd)->size); - obj_textsec(abfd)->size += text_pad; + text_pad = data->vma - (text->vma + execp->a_text); + /* Only pad the text section if the data + section is going to be placed after it. */ + if (text_pad > 0) + execp->a_text += text_pad; } - obj_datasec (abfd)->filepos = (obj_textsec (abfd)->filepos - + obj_textsec (abfd)->size); + data->filepos = text->filepos + execp->a_text; /* Fix up exec header while we're at it. */ - execp->a_text = obj_textsec(abfd)->size; if (ztih && (!abdp || (abdp && !abdp->exec_header_not_counted))) - execp->a_text += adata(abfd).exec_bytes_size; + execp->a_text += adata (abfd).exec_bytes_size; N_SET_MAGIC (execp, ZMAGIC); /* Spec says data section should be rounded up to page boundary. */ - obj_datasec(abfd)->size - = align_power (obj_datasec(abfd)->size, - obj_bsssec(abfd)->alignment_power); - execp->a_data = BFD_ALIGN (obj_datasec(abfd)->size, - adata(abfd).page_size); - data_pad = execp->a_data - obj_datasec(abfd)->size; + execp->a_data = align_power (data->size, bss->alignment_power); + execp->a_data = BFD_ALIGN (execp->a_data, adata (abfd).page_size); + data_pad = execp->a_data - data->size; /* BSS. */ - if (!obj_bsssec(abfd)->user_set_vma) - obj_bsssec(abfd)->vma = (obj_datasec(abfd)->vma - + obj_datasec(abfd)->size); + if (!bss->user_set_vma) + bss->vma = data->vma + execp->a_data; /* If the BSS immediately follows the data section and extra space in the page is left after the data section, fudge data in the header so that the bss section looks smaller by that @@ -945,55 +996,95 @@ (Note that a linker script, as well as the above assignment, could have explicitly set the BSS vma to immediately follow the data section.) */ - if (align_power (obj_bsssec(abfd)->vma, obj_bsssec(abfd)->alignment_power) - == obj_datasec(abfd)->vma + obj_datasec(abfd)->size) - execp->a_bss = (data_pad > obj_bsssec(abfd)->size) ? 0 : - obj_bsssec(abfd)->size - data_pad; + if (align_power (bss->vma, bss->alignment_power) == data->vma + execp->a_data) + execp->a_bss = data_pad > bss->size ? 0 : bss->size - data_pad; else - execp->a_bss = obj_bsssec(abfd)->size; + execp->a_bss = bss->size; } static void adjust_n_magic (bfd *abfd, struct internal_exec *execp) { - file_ptr pos = adata(abfd).exec_bytes_size; + file_ptr pos = adata (abfd).exec_bytes_size; bfd_vma vma = 0; int pad; + asection *text = obj_textsec (abfd); + asection *data = obj_datasec (abfd); + asection *bss = obj_bsssec (abfd); /* Text. */ - obj_textsec(abfd)->filepos = pos; - if (!obj_textsec(abfd)->user_set_vma) - obj_textsec(abfd)->vma = vma; + text->filepos = pos; + if (!text->user_set_vma) + text->vma = vma; else - vma = obj_textsec(abfd)->vma; - pos += obj_textsec(abfd)->size; - vma += obj_textsec(abfd)->size; + vma = text->vma; + pos += execp->a_text; + vma += execp->a_text; /* Data. */ - obj_datasec(abfd)->filepos = pos; - if (!obj_datasec(abfd)->user_set_vma) - obj_datasec(abfd)->vma = BFD_ALIGN (vma, adata(abfd).segment_size); - vma = obj_datasec(abfd)->vma; + data->filepos = pos; + if (!data->user_set_vma) + data->vma = BFD_ALIGN (vma, adata (abfd).segment_size); + vma = data->vma; /* Since BSS follows data immediately, see if it needs alignment. */ - vma += obj_datasec(abfd)->size; - pad = align_power (vma, obj_bsssec(abfd)->alignment_power) - vma; - obj_datasec(abfd)->size += pad; - pos += obj_datasec(abfd)->size; + vma += data->size; + pad = align_power (vma, bss->alignment_power) - vma; + execp->a_data = data->size + pad; + pos += execp->a_data; /* BSS. */ - if (!obj_bsssec(abfd)->user_set_vma) - obj_bsssec(abfd)->vma = vma; + if (!bss->user_set_vma) + bss->vma = vma; else - vma = obj_bsssec(abfd)->vma; + vma = bss->vma; /* Fix up exec header. */ - execp->a_text = obj_textsec(abfd)->size; - execp->a_data = obj_datasec(abfd)->size; - execp->a_bss = obj_bsssec(abfd)->size; + execp->a_bss = bss->size; N_SET_MAGIC (execp, NMAGIC); } +static void +adjust_i_magic (bfd *abfd, struct internal_exec *execp) +{ + file_ptr pos = adata (abfd).exec_bytes_size; + bfd_vma vma = 0; + int pad; + asection *text = obj_textsec (abfd); + asection *data = obj_datasec (abfd); + asection *bss = obj_bsssec (abfd); + + /* Text. */ + text->filepos = pos; + if (!text->user_set_vma) + text->vma = vma; + else + vma = text->vma; + pos += execp->a_text; + + /* Data. */ + data->filepos = pos; + if (!data->user_set_vma) + data->vma = 0; + vma = data->vma; + + /* Since BSS follows data immediately, see if it needs alignment. */ + vma += data->size; + pad = align_power (vma, bss->alignment_power) - vma; + execp->a_data = data->size + pad; + pos += execp->a_data; + + /* BSS. */ + if (!bss->user_set_vma) + bss->vma = vma; + else + vma = bss->vma; + + /* Fix up exec header. */ + execp->a_bss = bss->size; + N_SET_MAGIC (execp, IMAGIC); +} + bfd_boolean NAME (aout, adjust_sizes_and_vmas) (bfd *abfd) { @@ -1002,12 +1093,11 @@ if (! NAME (aout, make_sections) (abfd)) return FALSE; - if (adata(abfd).magic != undecided_magic) + if (adata (abfd).magic != undecided_magic) return TRUE; - obj_textsec(abfd)->size = - align_power(obj_textsec(abfd)->size, - obj_textsec(abfd)->alignment_power); + execp->a_text = align_power (obj_textsec (abfd)->size, + obj_textsec (abfd)->alignment_power); /* Rule (heuristic) for when to pad to a new page. Note that there are (at least) two ways demand-paged (ZMAGIC) files have been @@ -1015,7 +1105,7 @@ (TARGET_PAGE_SIZE). However, newer versions of SUNOS start the text segment right after the exec header; the latter is counted in the text segment size, and is paged in by the kernel with the rest of - the text. */ + the text. */ /* This perhaps isn't the right way to do this, but made it simpler for me to understand enough to implement it. Better would probably be to go @@ -1025,33 +1115,37 @@ I understand it better now, but I haven't time to do the cleanup this minute. */ - if (abfd->flags & WP_TEXT) - adata(abfd).magic = n_magic; + if (separate_i_d) + adata (abfd).magic = i_magic; + else if (abfd->flags & WP_TEXT) + adata (abfd).magic = n_magic; else - adata(abfd).magic = o_magic; + adata (abfd).magic = o_magic; #ifdef BFD_AOUT_DEBUG /* requires gcc2 */ #if __GNUC__ >= 2 fprintf (stderr, "%s text=<%x,%x,%x> data=<%x,%x,%x> bss=<%x,%x,%x>\n", ({ char *str; - switch (adata(abfd).magic) { - case n_magic: str = "NMAGIC"; break; - case o_magic: str = "OMAGIC"; break; - case z_magic: str = "ZMAGIC"; break; - default: abort (); - } + switch (adata (abfd).magic) + { + case n_magic: str = "NMAGIC"; break; + case o_magic: str = "OMAGIC"; break; + case i_magic: str = "IMAGIC"; break; + case z_magic: str = "ZMAGIC"; break; + default: abort (); + } str; }), - obj_textsec(abfd)->vma, obj_textsec(abfd)->size, - obj_textsec(abfd)->alignment_power, - obj_datasec(abfd)->vma, obj_datasec(abfd)->size, - obj_datasec(abfd)->alignment_power, - obj_bsssec(abfd)->vma, obj_bsssec(abfd)->size, - obj_bsssec(abfd)->alignment_power); + obj_textsec (abfd)->vma, obj_textsec (abfd)->size, + obj_textsec (abfd)->alignment_power, + obj_datasec (abfd)->vma, obj_datasec (abfd)->size, + obj_datasec (abfd)->alignment_power, + obj_bsssec (abfd)->vma, obj_bsssec (abfd)->size, + obj_bsssec (abfd)->alignment_power); #endif #endif - switch (adata(abfd).magic) + switch (adata (abfd).magic) { case o_magic: adjust_o_magic (abfd, execp); @@ -1062,17 +1156,20 @@ case n_magic: adjust_n_magic (abfd, execp); break; + case i_magic: + adjust_i_magic (abfd, execp); + break; default: abort (); } #ifdef BFD_AOUT_DEBUG fprintf (stderr, " text=<%x,%x,%x> data=<%x,%x,%x> bss=<%x,%x>\n", - obj_textsec(abfd)->vma, obj_textsec(abfd)->size, - obj_textsec(abfd)->filepos, - obj_datasec(abfd)->vma, obj_datasec(abfd)->size, - obj_datasec(abfd)->filepos, - obj_bsssec(abfd)->vma, obj_bsssec(abfd)->size); + obj_textsec (abfd)->vma, execp->a_text, + obj_textsec (abfd)->filepos, + obj_datasec (abfd)->vma, execp->a_data, + obj_datasec (abfd)->filepos, + obj_bsssec (abfd)->vma, execp->a_bss); #endif return TRUE; @@ -1182,17 +1279,13 @@ /* We allocate using malloc to make the values easy to free later on. If we put them on the objalloc it might not be possible to free them. */ - syms = bfd_malloc (count * EXTERNAL_NLIST_SIZE); - if (syms == NULL && count != 0) + if (bfd_seek (abfd, obj_sym_filepos (abfd), SEEK_SET) != 0) + return FALSE; + syms = (struct external_nlist *) + _bfd_malloc_and_read (abfd, count * EXTERNAL_NLIST_SIZE, + count * EXTERNAL_NLIST_SIZE); + if (syms == NULL) return FALSE; - - if (bfd_seek (abfd, obj_sym_filepos (abfd), SEEK_SET) != 0 - || (bfd_bread (syms, exec_hdr (abfd)->a_syms, abfd) - != exec_hdr (abfd)->a_syms)) - { - free (syms); - return FALSE; - } #endif obj_aout_external_syms (abfd) = syms; @@ -1205,36 +1298,54 @@ unsigned char string_chars[BYTES_IN_LONG]; bfd_size_type stringsize; char *strings; + bfd_size_type amt = BYTES_IN_LONG; /* Get the size of the strings. */ if (bfd_seek (abfd, obj_str_filepos (abfd), SEEK_SET) != 0 - || (bfd_bread ((void *) string_chars, (bfd_size_type) BYTES_IN_LONG, - abfd) != BYTES_IN_LONG)) + || bfd_bread ((void *) string_chars, amt, abfd) != amt) return FALSE; stringsize = H_GET_32 (abfd, string_chars); + if (stringsize == 0) + stringsize = 1; + else if (stringsize < BYTES_IN_LONG + || (size_t) stringsize != stringsize) + { + bfd_set_error (bfd_error_bad_value); + return FALSE; + } #ifdef USE_MMAP - if (! bfd_get_file_window (abfd, obj_str_filepos (abfd), stringsize, - &obj_aout_string_window (abfd), TRUE)) - return FALSE; - strings = (char *) obj_aout_string_window (abfd).data; -#else - strings = bfd_malloc (stringsize + 1); - if (strings == NULL) - return FALSE; - - /* Skip space for the string count in the buffer for convenience - when using indexes. */ - if (bfd_bread (strings + 4, stringsize - 4, abfd) != stringsize - 4) + if (stringsize >= BYTES_IN_LONG) { - free (strings); - return FALSE; + if (! bfd_get_file_window (abfd, obj_str_filepos (abfd), stringsize + 1, + &obj_aout_string_window (abfd), TRUE)) + return FALSE; + strings = (char *) obj_aout_string_window (abfd).data; } + else #endif + { + strings = (char *) bfd_malloc (stringsize + 1); + if (strings == NULL) + return FALSE; + + if (stringsize >= BYTES_IN_LONG) + { + /* Keep the string count in the buffer for convenience + when indexing with e_strx. */ + amt = stringsize - BYTES_IN_LONG; + if (bfd_bread (strings + BYTES_IN_LONG, amt, abfd) != amt) + { + free (strings); + return FALSE; + } + } + } /* Ensure that a zero index yields an empty string. */ strings[0] = '\0'; - strings[stringsize - 1] = 0; + /* Ensure that the string buffer is NUL terminated. */ + strings[stringsize] = 0; obj_aout_external_strings (abfd) = strings; obj_aout_external_string_size (abfd) = stringsize; @@ -1254,7 +1365,7 @@ { flagword visible; - if (cache_ptr->type == N_FN) + if (is_stab (cache_ptr->type, cache_ptr->symbol.name)) { asection *sec; @@ -1262,20 +1373,25 @@ cache_ptr->symbol.flags = BSF_DEBUGGING; /* Work out the symbol section. */ - switch (cache_ptr->type & N_TYPE) + switch (cache_ptr->type) { - case N_TEXT: + case N_SO: + case N_SOL: + case N_FUN: + case N_ENTRY: + case N_SLINE: case N_FN: sec = obj_textsec (abfd); break; - case N_DATA: + case N_STSYM: + case N_DSLINE: sec = obj_datasec (abfd); break; - case N_BSS: + case N_LCSYM: + case N_BSLINE: sec = obj_bsssec (abfd); break; default: - case N_ABS: sec = bfd_abs_section_ptr; break; } @@ -1347,10 +1463,12 @@ bfd_vma value = cache_ptr->value; asection *sec; bfd_vma off; + const char *name = cache_ptr->name != NULL ? cache_ptr->name : "*unknown*"; /* Mask out any existing type bits in case copying from one section to another. */ - sym_pointer->e_type[0] &= ~N_TYPE; + if (!is_stab (sym_pointer->e_type[0], name)) + sym_pointer->e_type[0] &= ~N_TYPE; sec = bfd_asymbol_section (cache_ptr); off = 0; @@ -1362,7 +1480,7 @@ _bfd_error_handler /* xgettext:c-format */ (_("%pB: can not represent section for symbol `%s' in a.out object file format"), - abfd, cache_ptr->name != NULL ? cache_ptr->name : "*unknown*"); + abfd, name); bfd_set_error (bfd_error_nonrepresentable_section); return FALSE; } @@ -1413,7 +1531,7 @@ asymbol * NAME (aout, make_empty_symbol) (bfd *abfd) { - bfd_size_type amt = sizeof (aout_symbol_type); + size_t amt = sizeof (aout_symbol_type); aout_symbol_type *new_symbol_type = bfd_zalloc (abfd, amt); if (!new_symbol_type) @@ -1423,7 +1541,7 @@ return &new_symbol_type->symbol; } -/* Translate a set of internal symbols into external symbols. */ +/* Translate a set of external symbols into internal symbols. */ bfd_boolean NAME (aout, translate_symbol_table) (bfd *abfd, @@ -1440,6 +1558,7 @@ for (; ext < ext_end; ext++, in++) { bfd_vma x; + int ovly; x = GET_WORD (abfd, ext->e_strx); in->symbol.the_bfd = abfd; @@ -1454,11 +1573,27 @@ else if (x < strsize) in->symbol.name = str + x; else - return FALSE; + { + _bfd_error_handler + (_("%pB: invalid string offset %" PRIu64 " >= %" PRIu64), + abfd, (uint64_t) x, (uint64_t) strsize); + bfd_set_error (bfd_error_bad_value); + return FALSE; + } - in->symbol.value = GET_SWORD (abfd, ext->e_value); - /* TODO: is 0 a safe value here? */ - in->desc = 0; + ovly = H_GET_8 (abfd, ext->e_ovly); + if (ovly != 0) + { + _bfd_error_handler + (_("%pB: symbol indicates overlay (not supported)"), abfd); + bfd_set_error (bfd_error_bad_value); + return FALSE; + } + + in->symbol.value = GET_WORD (abfd, ext->e_value); + /* e_desc is zero for normal symbols but for .stab symbols it + carries the desc field in our extended 2.11BSD format. */ + in->desc = H_GET_16 (abfd, ext->e_desc); in->other = 0; in->type = H_GET_8 (abfd, ext->e_type); in->symbol.udata.p = NULL; @@ -1546,7 +1681,7 @@ /* Get the index of a string in a strtab, adding it if it is not already present. */ -static INLINE bfd_size_type +static inline bfd_size_type add_to_stringtab (bfd *abfd, struct bfd_strtab_hash *tab, const char *str, @@ -1609,23 +1744,27 @@ bfd_size_type indx; struct external_nlist nsp; - PUT_WORD (abfd, 0, nsp.e_unused); - indx = add_to_stringtab (abfd, strtab, g->name, FALSE); if (indx == (bfd_size_type) -1) goto error_return; PUT_WORD (abfd, indx, nsp.e_strx); if (bfd_asymbol_flavour(g) == abfd->xvec->flavour) - H_PUT_8 (abfd, aout_symbol(g)->type, nsp.e_type); + { + H_PUT_16 (abfd, aout_symbol (g)->desc, nsp.e_desc); + H_PUT_8 (abfd, 0, nsp.e_ovly); + H_PUT_8 (abfd, aout_symbol (g)->type, nsp.e_type); + } else - H_PUT_8 (abfd, 0, nsp.e_type); + { + H_PUT_16 (abfd, 0, nsp.e_desc); + H_PUT_8 (abfd, 0, nsp.e_ovly); + H_PUT_8 (abfd, 0, nsp.e_type); + } if (! translate_to_native_sym_flags (abfd, g, &nsp)) goto error_return; - H_PUT_8 (abfd, 0, nsp.e_ovly); - if (bfd_bwrite ((void *)&nsp, (bfd_size_type) EXTERNAL_NLIST_SIZE, abfd) != EXTERNAL_NLIST_SIZE) goto error_return; @@ -1642,7 +1781,7 @@ return TRUE; -error_return: + error_return: _bfd_stringtab_free (strtab); return FALSE; } @@ -1784,10 +1923,12 @@ local or global. */ r_extern = (reloc_entry & RTYPE) == REXT; - if (r_extern && r_index > symcount) + if (r_extern && r_index >= symcount) { /* We could arrange to return an error, but it might be useful - to see the file even if it is bad. */ + to see the file even if it is bad. FIXME: Of course this + means that objdump -r *doesn't* see the actual reloc, and + objcopy silently writes a different reloc. */ r_extern = 0; r_index = N_ABS; } @@ -1829,19 +1970,11 @@ if (bfd_seek (abfd, asect->rel_filepos, SEEK_SET) != 0) return FALSE; - - each_size = obj_reloc_entry_size (abfd); - - relocs = bfd_malloc (reloc_size); + relocs = _bfd_malloc_and_read (abfd, reloc_size, reloc_size); if (relocs == NULL && reloc_size != 0) return FALSE; - if (bfd_bread (relocs, reloc_size, abfd) != reloc_size) - { - free (relocs); - return FALSE; - } - + each_size = obj_reloc_entry_size (abfd); count = reloc_size / each_size; /* Count the number of NON-ZERO relocs, this is the count we want. */ @@ -1918,6 +2051,15 @@ { bfd_byte *r; + if ((*generic)->howto == NULL + || (*generic)->sym_ptr_ptr == NULL) + { + bfd_set_error (bfd_error_invalid_operation); + _bfd_error_handler (_("%pB: attempt to write out " + "unknown reloc type"), abfd); + bfd_release (abfd, native); + return FALSE; + } r = native + (*generic)->address; pdp11_aout_swap_reloc_out (abfd, *generic, r); count--; @@ -2186,8 +2328,8 @@ size_t filelen, funclen; char *buf; - *filename_ptr = abfd->filename; - *functionname_ptr = 0; + *filename_ptr = bfd_get_filename (abfd); + *functionname_ptr = NULL; *line_ptr = 0; if (discriminator_ptr) *discriminator_ptr = 0; @@ -2215,7 +2357,10 @@ const char * symname; symname = q->symbol.name; - if (strcmp (symname + strlen (symname) - 2, ".o") == 0) + + if (symname != NULL + && strlen (symname) > 2 + && strcmp (symname + strlen (symname) - 2, ".o") == 0) { if (q->symbol.value > low_line_vma) { @@ -2247,7 +2392,7 @@ /* Look ahead to next symbol to check if that too is an N_SO. */ p++; if (*p == NULL) - break; + goto done; q = (aout_symbol_type *)(*p); if (q->type != (int) N_SO) goto next; @@ -2308,8 +2453,7 @@ else funclen = strlen (bfd_asymbol_name (func)); - if (adata (abfd).line_buf != NULL) - free (adata (abfd).line_buf); + free (adata (abfd).line_buf); if (filelen + funclen == 0) adata (abfd).line_buf = buf = NULL; else @@ -2326,9 +2470,17 @@ *filename_ptr = main_file_name; else { - sprintf (buf, "%s%s", directory_name, main_file_name); - *filename_ptr = buf; - buf += filelen + 1; + if (buf == NULL) + /* PR binutils/20891: In a corrupt input file both + main_file_name and directory_name can be empty... */ + * filename_ptr = NULL; + else + { + snprintf (buf, filelen + 1, "%s%s", directory_name, + main_file_name); + *filename_ptr = buf; + buf += filelen + 1; + } } } @@ -2337,6 +2489,12 @@ const char *function = func->name; char *colon; + if (buf == NULL) + { + /* PR binutils/20892: In a corrupt input file func can be empty. */ + * functionname_ptr = NULL; + return TRUE; + } /* The caller expects a symbol name. We actually have a function name, without the leading underscore. Put the underscore back in, so that the caller gets a symbol name. */ @@ -2376,7 +2534,7 @@ if (bfd_get_format (abfd) != bfd_object) return TRUE; -#define BFCI_FREE(x) if (x != NULL) { free (x); x = NULL; } +#define BFCI_FREE(x) do { free (x); x = NULL; } while (0) BFCI_FREE (obj_aout_symbols (abfd)); #ifdef USE_MMAP @@ -2443,7 +2601,7 @@ NAME (aout, link_hash_table_create) (bfd *abfd) { struct aout_link_hash_table *ret; - bfd_size_type amt = sizeof (struct aout_link_hash_table); + size_t amt = sizeof (struct aout_link_hash_table); ret = bfd_malloc (amt); if (ret == NULL) @@ -2547,17 +2705,17 @@ for (; p < pend; p++) { int type = H_GET_8 (abfd, p->e_type); - const char *name; + const char *name = strings + GET_WORD (abfd, p->e_strx); struct bfd_link_hash_entry *h; /* Ignore symbols that are not externally visible. This is an optimization only, as we check the type more thoroughly below. */ if ((type & N_EXT) == 0 + || is_stab(type, name) || type == N_FN) continue; - name = strings + GET_WORD (abfd, p->e_strx); h = bfd_link_hash_lookup (info->hash, name, FALSE, FALSE, TRUE); /* We are only interested in symbols that are currently @@ -2767,15 +2925,23 @@ type = H_GET_8 (abfd, p->e_type); + /* PR 19629: Corrupt binaries can contain illegal string offsets. */ + if (GET_WORD (abfd, p->e_strx) >= obj_aout_external_string_size (abfd)) + return FALSE; name = strings + GET_WORD (abfd, p->e_strx); + + /* Ignore debugging symbols. */ + if (is_stab (type, name)) + continue; + value = GET_WORD (abfd, p->e_value); flags = BSF_GLOBAL; string = NULL; switch (type) { default: - /* Anything else should be a debugging symbol. */ - BFD_ASSERT ((type & N_STAB) != 0); + /* Shouldn't be any types not covered. */ + BFD_ASSERT (0); continue; case N_UNDF: @@ -2879,6 +3045,9 @@ return (struct bfd_hash_entry *) ret; } +/* Write out a symbol that was not associated with an a.out input + object. */ + static bfd_boolean aout_link_write_other_symbol (struct bfd_hash_entry *bh, void *data) { @@ -2889,7 +3058,7 @@ bfd_vma val; struct external_nlist outsym; bfd_size_type indx; - bfd_size_type amt; + size_t amt; if (h->root.type == bfd_link_hash_warning) { @@ -2975,12 +3144,14 @@ } H_PUT_8 (output_bfd, type, outsym.e_type); + H_PUT_8 (output_bfd, 0, outsym.e_ovly); indx = add_to_stringtab (output_bfd, flaginfo->strtab, h->root.root.string, FALSE); if (indx == (bfd_size_type) -1) /* FIXME: No way to handle errors. */ abort (); + PUT_WORD (output_bfd, 0, outsym.e_desc); PUT_WORD (output_bfd, indx, outsym.e_strx); PUT_WORD (output_bfd, val, outsym.e_value); @@ -3263,8 +3434,15 @@ r_extern = (r_type == REXT); howto_idx = r_pcrel; - BFD_ASSERT (howto_idx < TABLE_SIZE (howto_table_pdp11)); - howto = howto_table_pdp11 + howto_idx; + if (howto_idx < TABLE_SIZE (howto_table_pdp11)) + howto = howto_table_pdp11 + howto_idx; + else + { + _bfd_error_handler (_("%pB: unsupported relocation type"), + input_bfd); + bfd_set_error (bfd_error_bad_value); + return FALSE; + } } if (relocatable) @@ -3642,6 +3820,7 @@ if (bfd_link_pic (info)) abfd->flags |= DYNAMIC; + separate_i_d = info->separate_code; aout_info.info = info; aout_info.output_bfd = abfd; aout_info.contents = NULL; @@ -3874,26 +4053,14 @@ } } - if (aout_info.contents != NULL) - { - free (aout_info.contents); - aout_info.contents = NULL; - } - if (aout_info.relocs != NULL) - { - free (aout_info.relocs); - aout_info.relocs = NULL; - } - if (aout_info.symbol_map != NULL) - { - free (aout_info.symbol_map); - aout_info.symbol_map = NULL; - } - if (aout_info.output_syms != NULL) - { - free (aout_info.output_syms); - aout_info.output_syms = NULL; - } + free (aout_info.contents); + aout_info.contents = NULL; + free (aout_info.relocs); + aout_info.relocs = NULL; + free (aout_info.symbol_map); + aout_info.symbol_map = NULL; + free (aout_info.output_syms); + aout_info.output_syms = NULL; if (includes_hash_initialized) { bfd_hash_table_free (&aout_info.includes.root); @@ -3926,29 +4093,37 @@ else if (obj_textsec (abfd)->reloc_count == 0 && obj_datasec (abfd)->reloc_count == 0) { - bfd_byte b; - - b = 0; - if (bfd_seek (abfd, - (file_ptr) (obj_datasec (abfd)->filepos - + exec_hdr (abfd)->a_data - - 1), - SEEK_SET) != 0 - || bfd_bwrite (&b, (bfd_size_type) 1, abfd) != 1) - goto error_return; + /* The layout of a typical a.out file is header, text, data, + relocs, symbols, string table. When there are no relocs, + symbols or string table, the last thing in the file is data + and a_data may be rounded up. However we may have a smaller + sized .data section and thus not written final padding. The + same thing can happen with text if there is no data. Write + final padding here to extend the file. */ + file_ptr pos = 0; + + if (exec_hdr (abfd)->a_data > obj_datasec (abfd)->size) + pos = obj_datasec (abfd)->filepos + exec_hdr (abfd)->a_data; + else if (obj_datasec (abfd)->size == 0 + && exec_hdr (abfd)->a_text > obj_textsec (abfd)->size) + pos = obj_textsec (abfd)->filepos + exec_hdr (abfd)->a_text; + if (pos != 0) + { + bfd_byte b = 0; + + if (bfd_seek (abfd, pos - 1, SEEK_SET) != 0 + || bfd_bwrite (&b, (bfd_size_type) 1, abfd) != 1) + goto error_return; + } } return TRUE; error_return: - if (aout_info.contents != NULL) - free (aout_info.contents); - if (aout_info.relocs != NULL) - free (aout_info.relocs); - if (aout_info.symbol_map != NULL) - free (aout_info.symbol_map); - if (aout_info.output_syms != NULL) - free (aout_info.output_syms); + free (aout_info.contents); + free (aout_info.relocs); + free (aout_info.symbol_map); + free (aout_info.output_syms); if (includes_hash_initialized) bfd_hash_table_free (&aout_info.includes.root); return FALSE; @@ -3985,13 +4160,16 @@ discarding such symbols. */ if (strip != strip_all && (strip != strip_some - || bfd_hash_lookup (flaginfo->info->keep_hash, input_bfd->filename, + || bfd_hash_lookup (flaginfo->info->keep_hash, + bfd_get_filename (input_bfd), FALSE, FALSE) != NULL) && discard != discard_all) { H_PUT_8 (output_bfd, N_TEXT, outsym->e_type); + H_PUT_8 (output_bfd, 0, outsym->e_ovly); + H_PUT_16 (output_bfd, 0, outsym->e_desc); strtab_index = add_to_stringtab (output_bfd, flaginfo->strtab, - input_bfd->filename, FALSE); + bfd_get_filename (input_bfd), FALSE); if (strtab_index == (bfd_size_type) -1) return FALSE; PUT_WORD (output_bfd, strtab_index, outsym->e_strx); @@ -4103,7 +4281,7 @@ case strip_none: break; case strip_debugger: - if ((type & N_STAB) != 0) + if (is_stab (type, name)) skip = TRUE; break; case strip_some: @@ -4123,7 +4301,33 @@ } /* Get the value of the symbol. */ - if ((type & N_TYPE) == N_TEXT + if (is_stab (type, name)) + { + switch (type) + { + default: + symsec = bfd_abs_section_ptr; + break; + case N_SO: + case N_SOL: + case N_FUN: + case N_ENTRY: + case N_SLINE: + case N_FN: + symsec = obj_textsec (input_bfd); + break; + case N_STSYM: + case N_DSLINE: + symsec = obj_datasec (input_bfd); + break; + case N_LCSYM: + case N_BSLINE: + symsec = obj_bsssec (input_bfd); + break; + } + val = GET_WORD (input_bfd, sym->e_value); + } + else if ((type & N_TYPE) == N_TEXT || type == N_WEAKT) symsec = obj_textsec (input_bfd); else if ((type & N_TYPE) == N_DATA @@ -4151,11 +4355,6 @@ val = GET_WORD (input_bfd, sym->e_value); symsec = NULL; } - else if ((type & N_STAB) != 0) - { - val = GET_WORD (input_bfd, sym->e_value); - symsec = NULL; - } else { /* If we get here with an indirect symbol, it means that @@ -4269,7 +4468,7 @@ case discard_sec_merge: break; case discard_l: - if ((type & N_STAB) == 0 + if (!is_stab (type, name) && bfd_is_local_label_name (input_bfd, name)) skip = TRUE; break; @@ -4393,6 +4592,8 @@ /* Copy this symbol into the list of symbols we are going to write out. */ H_PUT_8 (output_bfd, type, outsym->e_type); + H_PUT_8 (output_bfd, H_GET_8 (input_bfd, sym->e_ovly), outsym->e_ovly); + H_PUT_16 (output_bfd, H_GET_16 (input_bfd, sym->e_desc), outsym->e_desc); copy = FALSE; if (! flaginfo->info->keep_memory) { diff -Nru gdb-9.1/bfd/pe-arm.c gdb-10.2/bfd/pe-arm.c --- gdb-9.1/bfd/pe-arm.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/pe-arm.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD back-end for ARM PECOFF files. - Copyright (C) 1995-2019 Free Software Foundation, Inc. + Copyright (C) 1995-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/pe-arm-wince.c gdb-10.2/bfd/pe-arm-wince.c --- gdb-9.1/bfd/pe-arm-wince.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/pe-arm-wince.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD back-end for ARM WINCE PE files. - Copyright (C) 2006-2019 Free Software Foundation, Inc. + Copyright (C) 2006-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/pef.c gdb-10.2/bfd/pef.c --- gdb-9.1/bfd/pef.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/pef.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* PEF support for BFD. - Copyright (C) 1999-2019 Free Software Foundation, Inc. + Copyright (C) 1999-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -446,12 +446,15 @@ return -1; loaderlen = loadersec->size; - loaderbuf = bfd_malloc (loaderlen); + if (loaderlen < 56) + return -1; + if (bfd_seek (abfd, loadersec->filepos, SEEK_SET) != 0) + return -1; + loaderbuf = _bfd_malloc_and_read (abfd, loaderlen, loaderlen); + if (loaderbuf == NULL) + return -1; - if (bfd_seek (abfd, loadersec->filepos, SEEK_SET) < 0 - || bfd_bread ((void *) loaderbuf, loaderlen, abfd) != loaderlen - || loaderlen < 56 - || bfd_pef_parse_loader_header (abfd, loaderbuf, 56, &header) < 0) + if (bfd_pef_parse_loader_header (abfd, loaderbuf, 56, &header) < 0) { free (loaderbuf); return -1; @@ -477,14 +480,14 @@ goto end; loaderlen = loadersec->size; - loaderbuf = bfd_malloc (loaderlen); - if (bfd_seek (abfd, loadersec->filepos, SEEK_SET) < 0) + if (loaderlen < 56) goto error; - if (bfd_bread ((void *) loaderbuf, loaderlen, abfd) != loaderlen) + if (bfd_seek (abfd, loadersec->filepos, SEEK_SET) != 0) goto error; - - if (loaderlen < 56) + loaderbuf = _bfd_malloc_and_read (abfd, loaderlen, loaderlen); + if (loaderbuf == NULL) goto error; + ret = bfd_pef_parse_loader_header (abfd, loaderbuf, 56, &header); if (ret < 0) goto error; @@ -502,13 +505,11 @@ abfd->start_address = section->vma + header.main_offset; end: - if (loaderbuf != NULL) - free (loaderbuf); + free (loaderbuf); return 0; error: - if (loaderbuf != NULL) - free (loaderbuf); + free (loaderbuf); return -1; } @@ -586,7 +587,7 @@ return 0; } -static const bfd_target * +static bfd_cleanup bfd_pef_object_p (bfd *abfd) { bfd_pef_header header; @@ -605,7 +606,7 @@ if (bfd_pef_scan (abfd, &header, mdata)) goto wrong; - return abfd->xvec; + return _bfd_no_cleanup; wrong: bfd_set_error (bfd_error_wrong_format); @@ -753,6 +754,8 @@ (header.imported_library_count * sizeof (bfd_pef_imported_library)); imports = bfd_malloc (header.total_imported_symbol_count * sizeof (bfd_pef_imported_symbol)); + if (libraries == NULL || imports == NULL) + goto error; if (loaderlen < (56 + (header.imported_library_count * 24))) goto error; @@ -799,7 +802,7 @@ codepos += 4; } - if ((codepos + 4) > codelen) + if ((codepos + 24) > codelen) break; ret = bfd_pef_parse_function_stub (abfd, codebuf + codepos, 24, &sym_index); @@ -863,18 +866,14 @@ goto end; end: - if (libraries != NULL) - free (libraries); - if (imports != NULL) - free (imports); + free (libraries); + free (imports); *nsym = count; return 0; error: - if (libraries != NULL) - free (libraries); - if (imports != NULL) - free (imports); + free (libraries); + free (imports); *nsym = count; return -1; } @@ -896,10 +895,10 @@ if (codesec != NULL) { codelen = codesec->size; - codebuf = bfd_malloc (codelen); - if (bfd_seek (abfd, codesec->filepos, SEEK_SET) < 0) + if (bfd_seek (abfd, codesec->filepos, SEEK_SET) != 0) goto end; - if (bfd_bread ((void *) codebuf, codelen, abfd) != codelen) + codebuf = _bfd_malloc_and_read (abfd, codelen, codelen); + if (codebuf == NULL) goto end; } @@ -907,10 +906,10 @@ if (loadersec != NULL) { loaderlen = loadersec->size; - loaderbuf = bfd_malloc (loaderlen); - if (bfd_seek (abfd, loadersec->filepos, SEEK_SET) < 0) + if (bfd_seek (abfd, loadersec->filepos, SEEK_SET) != 0) goto end; - if (bfd_bread ((void *) loaderbuf, loaderlen, abfd) != loaderlen) + loaderbuf = _bfd_malloc_and_read (abfd, loaderlen, loaderlen); + if (loaderbuf == NULL) goto end; } @@ -936,12 +935,8 @@ csym[count] = NULL; end: - if (codebuf != NULL) - free (codebuf); - - if (loaderbuf != NULL) - free (loaderbuf); - + free (codebuf); + free (loaderbuf); return count; } @@ -1121,7 +1116,7 @@ return 0; } -static const bfd_target * +static bfd_cleanup bfd_pef_xlib_object_p (bfd *abfd) { bfd_pef_xlib_header header; @@ -1146,7 +1141,7 @@ return NULL; } - return abfd->xvec; + return _bfd_no_cleanup; } const bfd_target pef_xlib_vec = diff -Nru gdb-9.1/bfd/pef.h gdb-10.2/bfd/pef.h --- gdb-9.1/bfd/pef.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/pef.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* PEF support for BFD. - Copyright (C) 1999-2019 Free Software Foundation, Inc. + Copyright (C) 1999-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/pef-traceback.h gdb-10.2/bfd/pef-traceback.h --- gdb-9.1/bfd/pef-traceback.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/pef-traceback.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* PowerPC traceback table support for BFD. - Copyright (C) 1993-2019 Free Software Foundation, Inc. + Copyright (C) 1993-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/pe-i386.c gdb-10.2/bfd/pe-i386.c --- gdb-9.1/bfd/pe-i386.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/pe-i386.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD back-end for Intel 386 PECOFF files. - Copyright (C) 1995-2019 Free Software Foundation, Inc. + Copyright (C) 1995-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -23,7 +23,10 @@ #define TARGET_SYM i386_pe_vec #define TARGET_NAME "pe-i386" +#define TARGET_SYM_BIG i386_pe_big_vec +#define TARGET_NAME_BIG "pe-bigobj-i386" #define COFF_WITH_PE +#define COFF_WITH_PE_BIGOBJ #define PCRELOFFSET TRUE #define TARGET_UNDERSCORE '_' #define COFF_LONG_SECTION_NAMES diff -Nru gdb-9.1/bfd/pei-arm.c gdb-10.2/bfd/pei-arm.c --- gdb-9.1/bfd/pei-arm.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/pei-arm.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD back-end for arm PE IMAGE COFF files. - Copyright (C) 1995-2019 Free Software Foundation, Inc. + Copyright (C) 1995-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/pei-arm-wince.c gdb-10.2/bfd/pei-arm-wince.c --- gdb-9.1/bfd/pei-arm-wince.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/pei-arm-wince.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD back-end for ARM WINCE PE IMAGE COFF files. - Copyright (C) 2006-2019 Free Software Foundation, Inc. + Copyright (C) 2006-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/peicode.h gdb-10.2/bfd/peicode.h --- gdb-9.1/bfd/peicode.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/peicode.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Support for the generic parts of PE/PEI, for BFD. - Copyright (C) 1995-2019 Free Software Foundation, Inc. + Copyright (C) 1995-2020 Free Software Foundation, Inc. Written by Cygnus Solutions. This file is part of BFD, the Binary File Descriptor library. @@ -122,7 +122,7 @@ pe_ILF_vars; #endif /* COFF_IMAGE_WITH_PE */ -const bfd_target *coff_real_object_p +bfd_cleanup coff_real_object_p (bfd *, unsigned, struct internal_filehdr *, struct internal_aouthdr *); #ifndef NO_COFF_RELOCS @@ -257,7 +257,7 @@ pe_mkobject (bfd * abfd) { pe_data_type *pe; - bfd_size_type amt = sizeof (pe_data_type); + size_t amt = sizeof (pe_data_type); abfd->tdata.pe_obj_data = (struct pe_tdata *) bfd_zalloc (abfd, amt); @@ -622,6 +622,7 @@ { asection_ptr sec; flagword flags; + intptr_t alignment; sec = bfd_make_section_old_way (vars->abfd, name); if (sec == NULL) @@ -652,20 +653,18 @@ if (size & 1) vars->data --; -# if (GCC_VERSION >= 3000) /* PR 18758: See note in pe_ILF_buid_a_bfd. We must make sure that we - preserve host alignment requirements. We test 'size' rather than - vars.data as we cannot perform binary arithmetic on pointers. We assume - that vars.data was sufficiently aligned upon entry to this function. - The BFD_ASSERTs in this functions will warn us if we run out of room, - but we should already have enough padding built in to ILF_DATA_SIZE. */ - { - unsigned int alignment = __alignof__ (struct coff_section_tdata); - - if (size & (alignment - 1)) - vars->data += alignment - (size & (alignment - 1)); - } + preserve host alignment requirements. The BFD_ASSERTs in this + functions will warn us if we run out of room, but we should + already have enough padding built in to ILF_DATA_SIZE. */ +#if GCC_VERSION >= 3000 + alignment = __alignof__ (struct coff_section_tdata); +#else + alignment = 8; #endif + vars->data + = (bfd_byte *) (((intptr_t) vars->data + alignment - 1) & -alignment); + /* Create a coff_section_tdata structure for our use. */ sec->used_by_bfd = (struct coff_section_tdata *) vars->data; vars->data += sizeof (struct coff_section_tdata); @@ -779,6 +778,7 @@ asection_ptr id4, id5, id6 = NULL, text = NULL; coff_symbol_type ** imp_sym; unsigned int imp_index; + intptr_t alignment; /* Decode and verify the types field of the ILF structure. */ import_type = types & 0x3; @@ -874,23 +874,17 @@ /* The remaining space in bim->buffer is used by the pe_ILF_make_a_section() function. */ -# if (GCC_VERSION >= 3000) + /* PR 18758: Make sure that the data area is sufficiently aligned for - pointers on the host. __alignof__ is a gcc extension, hence the test - above. For other compilers we will have to assume that the alignment is - unimportant, or else extra code can be added here and in - pe_ILF_make_a_section. - - Note - we cannot test 'ptr' directly as it is illegal to perform binary - arithmetic on pointers, but we know that the strings section is the only - one that might end on an unaligned boundary. */ - { - unsigned int alignment = __alignof__ (char *); - - if (SIZEOF_ILF_STRINGS & (alignment - 1)) - ptr += alignment - (SIZEOF_ILF_STRINGS & (alignment - 1)); - } + struct coff_section_tdata. __alignof__ is a gcc extension, hence + the test of GCC_VERSION. For other compilers we assume 8 byte + alignment. */ +#if GCC_VERSION >= 3000 + alignment = __alignof__ (struct coff_section_tdata); +#else + alignment = 8; #endif + ptr = (bfd_byte *) (((intptr_t) ptr + alignment - 1) & -alignment); vars.data = ptr; vars.abfd = abfd; @@ -1133,8 +1127,7 @@ return TRUE; error_return: - if (vars.bim->buffer != NULL) - free (vars.bim->buffer); + free (vars.bim->buffer); free (vars.bim); return FALSE; } @@ -1142,7 +1135,7 @@ /* We have detected a Image Library Format archive element. Decode the element and return the appropriate target. */ -static const bfd_target * +static bfd_cleanup pe_ILF_object_p (bfd * abfd) { bfd_byte buffer[14]; @@ -1273,16 +1266,10 @@ /* ptr += 2; */ /* Now read in the two strings that follow. */ - ptr = (bfd_byte *) bfd_alloc (abfd, size); + ptr = (bfd_byte *) _bfd_alloc_and_read (abfd, size, size); if (ptr == NULL) return NULL; - if (bfd_bread (ptr, size, abfd) != size) - { - bfd_release (abfd, ptr); - return NULL; - } - symbol_name = (char *) ptr; /* See PR 20905 for an example of where the strnlen is necessary. */ source_dll = symbol_name + strnlen (symbol_name, size - 1) + 1; @@ -1306,7 +1293,7 @@ return NULL; } - return abfd->xvec; + return _bfd_no_cleanup; } static void @@ -1356,8 +1343,7 @@ /* Read the whole section. */ if (!bfd_malloc_and_get_section (abfd, section, &data)) { - if (data != NULL) - free (data); + free (data); return; } @@ -1396,9 +1382,11 @@ break; } } + + free (data); } -static const bfd_target * +static bfd_cleanup pe_bfd_object_p (bfd * abfd) { bfd_byte buffer[6]; @@ -1406,9 +1394,9 @@ struct external_PEI_IMAGE_hdr image_hdr; struct internal_filehdr internal_f; struct internal_aouthdr internal_a; - file_ptr opt_hdr_size; + bfd_size_type opt_hdr_size; file_ptr offset; - const bfd_target *result; + bfd_cleanup result; /* Detect if this a Microsoft Import Library Format element. */ /* First read the beginning of the header. */ @@ -1492,12 +1480,11 @@ if (amt < sizeof (PEAOUTHDR)) amt = sizeof (PEAOUTHDR); - opthdr = bfd_zalloc (abfd, amt); + opthdr = _bfd_alloc_and_read (abfd, amt, opt_hdr_size); if (opthdr == NULL) return NULL; - if (bfd_bread (opthdr, opt_hdr_size, abfd) - != (bfd_size_type) opt_hdr_size) - return NULL; + if (amt > opt_hdr_size) + memset (opthdr + opt_hdr_size, 0, amt - opt_hdr_size); bfd_set_error (bfd_error_no_error); bfd_coff_swap_aouthdr_in (abfd, opthdr, & internal_a); diff -Nru gdb-9.1/bfd/pei-i386.c gdb-10.2/bfd/pei-i386.c --- gdb-9.1/bfd/pei-i386.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/pei-i386.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD back-end for Intel 386 PE IMAGE COFF files. - Copyright (C) 1995-2019 Free Software Foundation, Inc. + Copyright (C) 1995-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/pei-ia64.c gdb-10.2/bfd/pei-ia64.c --- gdb-9.1/bfd/pei-ia64.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/pei-ia64.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD back-end for HP/Intel IA-64 PE IMAGE COFF files. - Copyright (C) 1999-2019 Free Software Foundation, Inc. + Copyright (C) 1999-2020 Free Software Foundation, Inc. Contributed by David Mosberger This implementation only supports objcopy to ouput IA-64 PE IMAGE COFF diff -Nru gdb-9.1/bfd/pei-mcore.c gdb-10.2/bfd/pei-mcore.c --- gdb-9.1/bfd/pei-mcore.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/pei-mcore.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD back-end for MCore PECOFF files. - Copyright (C) 1999-2019 Free Software Foundation, Inc. + Copyright (C) 1999-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/pei-ppc.c gdb-10.2/bfd/pei-ppc.c --- gdb-9.1/bfd/pei-ppc.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/pei-ppc.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,50 +0,0 @@ -/* BFD back-end for PowerPC PE IMAGE COFF files. - Copyright (C) 1995-2019 Free Software Foundation, Inc. - - This file is part of BFD, the Binary File Descriptor library. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, 51 Franklin Street - Fifth Floor, - Boston, MA 02110-1301, USA. */ - -#include "sysdep.h" -#include "bfd.h" - -/* setting up for a PE environment stolen directly from the i386 structure */ -#define E_FILNMLEN 18 /* # characters in a file name */ - -#define PPC_PE - -#define TARGET_LITTLE_SYM powerpc_pei_le_vec -#define TARGET_LITTLE_NAME "pei-powerpcle" - -#define TARGET_BIG_SYM powerpc_pei_vec -#define TARGET_BIG_NAME "pei-powerpc" - -#define COFF_IMAGE_WITH_PE -#define COFF_WITH_PE - -/* Long section names not allowed in executable images, only object files. */ -#define COFF_LONG_SECTION_NAMES 0 - -/* FIXME: Verify PCRELOFFSET is always false */ - -/* FIXME: This target no longer works. Search for POWERPC_LE_PE in - coff-ppc.c and peigen.c. */ - -#ifndef bfd_pe_print_pdata -#define bfd_pe_print_pdata NULL -#endif - -#include "coff-ppc.c" diff -Nru gdb-9.1/bfd/pei-sh.c gdb-10.2/bfd/pei-sh.c --- gdb-9.1/bfd/pei-sh.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/pei-sh.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD back-end for SH PE IMAGE COFF files. - Copyright (C) 1995-2019 Free Software Foundation, Inc. + Copyright (C) 1995-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/pei-x86_64.c gdb-10.2/bfd/pei-x86_64.c --- gdb-9.1/bfd/pei-x86_64.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/pei-x86_64.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD back-end for Intel 386 PE IMAGE COFF files. - Copyright (C) 2006-2019 Free Software Foundation, Inc. + Copyright (C) 2006-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/pe-mcore.c gdb-10.2/bfd/pe-mcore.c --- gdb-9.1/bfd/pe-mcore.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/pe-mcore.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD back-end for MCore PECOFF files. - Copyright (C) 1999-2019 Free Software Foundation, Inc. + Copyright (C) 1999-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/pe-ppc.c gdb-10.2/bfd/pe-ppc.c --- gdb-9.1/bfd/pe-ppc.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/pe-ppc.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,47 +0,0 @@ -/* BFD back-end for PowerPC PECOFF files. - Copyright (C) 1995-2019 Free Software Foundation, Inc. - - This file is part of BFD, the Binary File Descriptor library. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, 51 Franklin Street - Fifth Floor, - Boston, MA 02110-1301, USA. */ - -#include "sysdep.h" -#include "bfd.h" - -#define E_FILENMLEN 18 - -#define PPC_PE - -#define TARGET_LITTLE_SYM powerpc_pe_le_vec -#define TARGET_LITTLE_NAME "pe-powerpcle" - -#define TARGET_BIG_SYM powerpc_pe_vec -#define TARGET_BIG_NAME "pe-powerpc" - -#define COFF_WITH_PE - -#define COFF_LONG_SECTION_NAMES - -/* FIXME: verify PCRELOFFSET is always false */ - -/* FIXME: This target no longer works. Search for POWERPC_LE_PE in - coff-ppc.c and peigen.c. */ - -#ifndef bfd_pe_print_pdata -#define bfd_pe_print_pdata NULL -#endif - -#include "coff-ppc.c" diff -Nru gdb-9.1/bfd/pe-sh.c gdb-10.2/bfd/pe-sh.c --- gdb-9.1/bfd/pe-sh.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/pe-sh.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD back-end for SH PECOFF files. - Copyright (C) 1995-2019 Free Software Foundation, Inc. + Copyright (C) 1995-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/pe-x86_64.c gdb-10.2/bfd/pe-x86_64.c --- gdb-9.1/bfd/pe-x86_64.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/pe-x86_64.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD back-end for Intel/AMD x86_64 PECOFF files. - Copyright (C) 2006-2019 Free Software Foundation, Inc. + Copyright (C) 2006-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -25,6 +25,8 @@ #define TARGET_SYM x86_64_pe_vec #define TARGET_NAME "pe-x86-64" +#define TARGET_SYM_BIG x86_64_pe_big_vec +#define TARGET_NAME_BIG "pe-bigobj-x86-64" #define COFF_WITH_PE #define COFF_WITH_pex64 #define COFF_WITH_PE_BIGOBJ @@ -66,67 +68,3 @@ #include "coff-x86_64.c" -/* Entry for big object files. */ - -const bfd_target -x86_64_pe_be_vec = -{ - "pe-bigobj-x86-64", /* Name. */ - bfd_target_coff_flavour, - BFD_ENDIAN_LITTLE, /* Data byte order is little. */ - BFD_ENDIAN_LITTLE, /* Header byte order is little. */ - - (HAS_RELOC | EXEC_P /* Object flags. */ - | HAS_LINENO | HAS_DEBUG - | HAS_SYMS | HAS_LOCALS | WP_TEXT | D_PAGED | BFD_COMPRESS | BFD_DECOMPRESS), - - (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC /* Section flags. */ - | SEC_LINK_ONCE | SEC_LINK_DUPLICATES | SEC_READONLY | SEC_DEBUGGING - | SEC_CODE | SEC_DATA | SEC_EXCLUDE ), - - TARGET_UNDERSCORE, /* Leading underscore. */ - '/', /* Ar_pad_char. */ - 15, /* Ar_max_namelen. */ - 0, /* match priority. */ - - bfd_getl64, bfd_getl_signed_64, bfd_putl64, - bfd_getl32, bfd_getl_signed_32, bfd_putl32, - bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* Data. */ - bfd_getl64, bfd_getl_signed_64, bfd_putl64, - bfd_getl32, bfd_getl_signed_32, bfd_putl32, - bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* Hdrs. */ - - /* Note that we allow an object file to be treated as a core file as well. */ - { /* bfd_check_format. */ - _bfd_dummy_target, - amd64coff_object_p, - bfd_generic_archive_p, - amd64coff_object_p - }, - { /* bfd_set_format. */ - _bfd_bool_bfd_false_error, - coff_mkobject, - _bfd_generic_mkarchive, - _bfd_bool_bfd_false_error - }, - { /* bfd_write_contents. */ - _bfd_bool_bfd_false_error, - coff_write_object_contents, - _bfd_write_archive_contents, - _bfd_bool_bfd_false_error - }, - - BFD_JUMP_TABLE_GENERIC (coff), - BFD_JUMP_TABLE_COPY (coff), - BFD_JUMP_TABLE_CORE (_bfd_nocore), - BFD_JUMP_TABLE_ARCHIVE (_bfd_archive_coff), - BFD_JUMP_TABLE_SYMBOLS (coff), - BFD_JUMP_TABLE_RELOCS (coff), - BFD_JUMP_TABLE_WRITE (coff), - BFD_JUMP_TABLE_LINK (coff), - BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic), - - NULL, - - &bigobj_swap_table -}; diff -Nru gdb-9.1/bfd/peXXigen.c gdb-10.2/bfd/peXXigen.c --- gdb-9.1/bfd/peXXigen.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/peXXigen.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Support for the generic parts of PE/PEI; the common executable parts. - Copyright (C) 1995-2019 Free Software Foundation, Inc. + Copyright (C) 1995-2020 Free Software Foundation, Inc. Written by Cygnus Solutions. This file is part of BFD, the Binary File Descriptor library. @@ -105,12 +105,6 @@ #define HighBitSet(val) ((val) & 0x80000000) #define SetHighBit(val) ((val) | 0x80000000) #define WithoutHighBit(val) ((val) & 0x7fffffff) - -/* FIXME: This file has various tests of POWERPC_LE_PE. Those tests - worked when the code was in peicode.h, but no longer work now that - the code is in peigen.c. PowerPC NT is said to be dead. If - anybody wants to revive the code, you will have to figure out how - to handle those issues. */ void _bfd_XXi_swap_sym_in (bfd * abfd, void * ext1, void * in1) @@ -177,25 +171,25 @@ int unused_section_number = 0; asection *sec; flagword flags; + size_t name_len; + char *sec_name; for (sec = abfd->sections; sec; sec = sec->next) if (unused_section_number <= sec->target_index) unused_section_number = sec->target_index + 1; - if (name == namebuf) + name_len = strlen (name) + 1; + sec_name = bfd_alloc (abfd, name_len); + if (sec_name == NULL) { - name = (const char *) bfd_alloc (abfd, strlen (namebuf) + 1); - if (name == NULL) - { - _bfd_error_handler (_("%pB: out of memory creating name for empty section"), - abfd); - return; - } - strcpy ((char *) name, namebuf); + _bfd_error_handler (_("%pB: out of memory creating name " + "for empty section"), abfd); + return; } + memcpy (sec_name, name, name_len); flags = SEC_HAS_CONTENTS | SEC_ALLOC | SEC_DATA | SEC_LOAD; - sec = bfd_make_section_anyway_with_flags (abfd, name, flags); + sec = bfd_make_section_anyway_with_flags (abfd, sec_name, flags); if (sec == NULL) { _bfd_error_handler (_("%pB: unable to create fake empty section"), @@ -222,12 +216,6 @@ in->n_sclass = C_STAT; } #endif - -#ifdef coff_swap_sym_in_hook - /* This won't work in peigen.c, but since it's for PPC PE, it's not - worth fixing. */ - coff_swap_sym_in_hook (abfd, ext1, in1); -#endif } static bfd_boolean @@ -592,15 +580,6 @@ aouthdr_int->data_start &= 0xffffffff; } #endif - -#ifdef POWERPC_LE_PE - /* These three fields are normally set up by ppc_relocate_section. - In the case of reading a file in, we can pick them up from the - DataDirectory. */ - first_thunk_address = a->DataDirectory[PE_IMPORT_ADDRESS_TABLE].VirtualAddress; - thunk_size = a->DataDirectory[PE_IMPORT_ADDRESS_TABLE].Size; - import_table_size = a->DataDirectory[PE_IMPORT_TABLE].Size; -#endif } /* A support function for below. */ @@ -876,10 +855,10 @@ /* Use a real timestamp by default, unless the no-insert-timestamp option was chosen. */ - if ((pe_data (abfd)->insert_timestamp)) + if ((pe_data (abfd)->timestamp) == -1) H_PUT_32 (abfd, time (0), filehdr_out->f_timdat); else - H_PUT_32 (abfd, 0, filehdr_out->f_timdat); + H_PUT_32 (abfd, pe_data (abfd)->timestamp, filehdr_out->f_timdat); PUT_FILEHDR_SYMPTR (abfd, filehdr_in->f_symptr, filehdr_out->f_symptr); @@ -1010,7 +989,7 @@ (0x02000000). Also, the resource data should also be read and writable. */ - /* FIXME: Alignment is also encoded in this field, at least on PPC and + /* FIXME: Alignment is also encoded in this field, at least on ARM-WINCE. Although - how do we get the original alignment field back ? */ @@ -1147,15 +1126,21 @@ _bfd_XXi_slurp_codeview_record (bfd * abfd, file_ptr where, unsigned long length, CODEVIEW_INFO *cvinfo) { char buffer[256+1]; + bfd_size_type nread; if (bfd_seek (abfd, where, SEEK_SET) != 0) return NULL; - if (bfd_bread (buffer, 256, abfd) < 4) + if (length <= sizeof (CV_INFO_PDB70) && length <= sizeof (CV_INFO_PDB20)) + return NULL; + if (length > 256) + length = 256; + nread = bfd_bread (buffer, length, abfd); + if (length != nread) return NULL; /* Ensure null termination of filename. */ - buffer[256] = '\0'; + memset (buffer + nread, 0, sizeof (buffer) - nread); cvinfo->CVSignature = H_GET_32 (abfd, buffer); cvinfo->Age = 0; @@ -1176,7 +1161,7 @@ memcpy (&(cvinfo->Signature[8]), &(cvinfo70->Signature[8]), 8); cvinfo->SignatureLength = CV_INFO_SIGNATURE_LENGTH; - // cvinfo->PdbFileName = cvinfo70->PdbFileName; + /* cvinfo->PdbFileName = cvinfo70->PdbFileName; */ return cvinfo; } @@ -1187,7 +1172,7 @@ cvinfo->Age = H_GET_32(abfd, cvinfo20->Age); memcpy (cvinfo->Signature, cvinfo20->Signature, 4); cvinfo->SignatureLength = 4; - // cvinfo->PdbFileName = cvinfo20->PdbFileName; + /* cvinfo->PdbFileName = cvinfo20->PdbFileName; */ return cvinfo; } @@ -1250,14 +1235,6 @@ N_("Reserved") }; -#ifdef POWERPC_LE_PE -/* The code for the PPC really falls in the "architecture dependent" - category. However, it's not clear that anyone will ever care, so - we're ignoring the issue for now; if/when PPC matters, some of this - may need to go into peicode.h, or arguments passed to enable the - PPC- specific code. */ -#endif - static bfd_boolean pe_print_idata (bfd * abfd, void * vfile) { @@ -1265,11 +1242,6 @@ bfd_byte *data; asection *section; bfd_signed_vma adj; - -#ifdef POWERPC_LE_PE - asection *rel_section = bfd_get_section_by_name (abfd, ".reldata"); -#endif - bfd_size_type datasize = 0; bfd_size_type dataoff; bfd_size_type i; @@ -1325,59 +1297,6 @@ dataoff = addr - section->vma; -#ifdef POWERPC_LE_PE - if (rel_section != 0 && rel_section->size != 0) - { - /* The toc address can be found by taking the starting address, - which on the PPC locates a function descriptor. The - descriptor consists of the function code starting address - followed by the address of the toc. The starting address we - get from the bfd, and the descriptor is supposed to be in the - .reldata section. */ - - bfd_vma loadable_toc_address; - bfd_vma toc_address; - bfd_vma start_address; - bfd_byte *data; - bfd_vma offset; - - if (!bfd_malloc_and_get_section (abfd, rel_section, &data)) - { - if (data != NULL) - free (data); - return FALSE; - } - - offset = abfd->start_address - rel_section->vma; - - if (offset >= rel_section->size || offset + 8 > rel_section->size) - { - if (data != NULL) - free (data); - return FALSE; - } - - start_address = bfd_get_32 (abfd, data + offset); - loadable_toc_address = bfd_get_32 (abfd, data + offset + 4); - toc_address = loadable_toc_address - 32768; - - fprintf (file, - _("\nFunction descriptor located at the start address: %04lx\n"), - (unsigned long int) (abfd->start_address)); - fprintf (file, - /* xgettext:c-format */ - _("\tcode-base %08lx toc (loadable/actual) %08lx/%08lx\n"), - start_address, loadable_toc_address, toc_address); - if (data != NULL) - free (data); - } - else - { - fprintf (file, - _("\nNo reldata section! Function descriptor not decoded.\n")); - } -#endif - fprintf (file, _("\nThe Import Tables (interpreted %s section contents)\n"), section->name); @@ -1389,8 +1308,7 @@ /* Read the whole section. Some of the fields might be before dataoff. */ if (!bfd_malloc_and_get_section (abfd, section, &data)) { - if (data != NULL) - free (data); + free (data); return FALSE; } @@ -1935,8 +1853,7 @@ if (! bfd_malloc_and_get_section (abfd, section, &data)) { - if (data != NULL) - free (data); + free (data); return FALSE; } @@ -1984,33 +1901,6 @@ bfd_fprintf_vma (abfd, file, prolog_end_addr); fprintf (file, " %x", em_data); #endif - -#ifdef POWERPC_LE_PE - if (eh_handler == 0 && eh_data != 0) - { - /* Special bits here, although the meaning may be a little - mysterious. The only one I know for sure is 0x03 - Code Significance - 0x00 None - 0x01 Register Save Millicode - 0x02 Register Restore Millicode - 0x03 Glue Code Sequence. */ - switch (eh_data) - { - case 0x01: - fprintf (file, _(" Register save millicode")); - break; - case 0x02: - fprintf (file, _(" Register restore millicode")); - break; - case 0x03: - fprintf (file, _(" Glue code sequence")); - break; - default: - break; - } - } -#endif fprintf (file, "\n"); } @@ -2119,8 +2009,7 @@ if (! bfd_malloc_and_get_section (abfd, section, &data)) { - if (data != NULL) - free (data); + free (data); return FALSE; } @@ -2235,8 +2124,7 @@ if (! bfd_malloc_and_get_section (abfd, section, &data)) { - if (data != NULL) - free (data); + free (data); return FALSE; } @@ -2543,8 +2431,7 @@ if (! bfd_malloc_and_get_section (abfd, section, & data)) { - if (data != NULL) - free (data); + free (data); return FALSE; } @@ -2603,7 +2490,7 @@ return TRUE; } -#define IMAGE_NUMBEROF_DEBUG_TYPES 12 +#define IMAGE_NUMBEROF_DEBUG_TYPES 17 static char * debug_type_names[IMAGE_NUMBEROF_DEBUG_TYPES] = { @@ -2619,6 +2506,11 @@ "Borland", "Reserved", "CLSID", + "Feature", + "CoffGrp", + "ILTCG", + "MPX", + "Repro", }; static bfd_boolean @@ -2630,7 +2522,7 @@ asection *section; bfd_byte *data = 0; bfd_size_type dataoff; - unsigned int i; + unsigned int i, j; bfd_vma addr = extra->DataDirectory[PE_DEBUG_DATA].VirtualAddress; bfd_size_type size = extra->DataDirectory[PE_DEBUG_DATA].Size; @@ -2683,8 +2575,7 @@ /* Read the whole section. */ if (!bfd_malloc_and_get_section (abfd, section, &data)) { - if (data != NULL) - free (data); + free (data); return FALSE; } @@ -2722,8 +2613,8 @@ idd.SizeOfData, cvinfo)) continue; - for (i = 0; i < cvinfo->SignatureLength; i++) - sprintf (&signature[i*2], "%02x", cvinfo->Signature[i] & 0xff); + for (j = 0; j < cvinfo->SignatureLength; j++) + sprintf (&signature[j*2], "%02x", cvinfo->Signature[j] & 0xff); /* xgettext:c-format */ fprintf (file, _("(format %c%c%c%c signature %s age %ld)\n"), @@ -2732,6 +2623,8 @@ } } + free(data); + if (size % sizeof (struct external_IMAGE_DEBUG_DIRECTORY) != 0) fprintf (file, _("The debug directory size is not a multiple of the debug directory entry size\n")); @@ -2739,6 +2632,70 @@ return TRUE; } +static bfd_boolean +pe_is_repro (bfd * abfd) +{ + pe_data_type *pe = pe_data (abfd); + struct internal_extra_pe_aouthdr *extra = &pe->pe_opthdr; + asection *section; + bfd_byte *data = 0; + bfd_size_type dataoff; + unsigned int i; + bfd_boolean res = FALSE; + + bfd_vma addr = extra->DataDirectory[PE_DEBUG_DATA].VirtualAddress; + bfd_size_type size = extra->DataDirectory[PE_DEBUG_DATA].Size; + + if (size == 0) + return FALSE; + + addr += extra->ImageBase; + for (section = abfd->sections; section != NULL; section = section->next) + { + if ((addr >= section->vma) && (addr < (section->vma + section->size))) + break; + } + + if ((section == NULL) + || (!(section->flags & SEC_HAS_CONTENTS)) + || (section->size < size)) + { + return FALSE; + } + + dataoff = addr - section->vma; + + if (size > (section->size - dataoff)) + { + return FALSE; + } + + if (!bfd_malloc_and_get_section (abfd, section, &data)) + { + free (data); + return FALSE; + } + + for (i = 0; i < size / sizeof (struct external_IMAGE_DEBUG_DIRECTORY); i++) + { + struct external_IMAGE_DEBUG_DIRECTORY *ext + = &((struct external_IMAGE_DEBUG_DIRECTORY *)(data + dataoff))[i]; + struct internal_IMAGE_DEBUG_DIRECTORY idd; + + _bfd_XXi_swap_debugdir_in (abfd, ext, &idd); + + if (idd.Type == PE_IMAGE_DEBUG_TYPE_REPRO) + { + res = TRUE; + break; + } + } + + free(data); + + return res; +} + /* Print out the program headers. */ bfd_boolean @@ -2770,11 +2727,21 @@ PF (IMAGE_FILE_BYTES_REVERSED_HI, "big endian"); #undef PF - /* ctime implies '\n'. */ - { - time_t t = pe->coff.timestamp; - fprintf (file, "\nTime/Date\t\t%s", ctime (&t)); - } + /* + If a PE_IMAGE_DEBUG_TYPE_REPRO entry is present in the debug directory, the + timestamp is to be interpreted as the hash of a reproducible build. + */ + if (pe_is_repro (abfd)) + { + fprintf (file, "\nTime/Date\t\t%08lx", pe->coff.timestamp); + fprintf (file, "\t(This is a reproducible build file hash, not a timestamp)\n"); + } + else + { + /* ctime implies '\n'. */ + time_t t = pe->coff.timestamp; + fprintf (file, "\nTime/Date\t\t%s", ctime (&t)); + } #ifndef IMAGE_NT_OPTIONAL_HDR_MAGIC # define IMAGE_NT_OPTIONAL_HDR_MAGIC 0x10b @@ -2857,7 +2824,7 @@ case IMAGE_SUBSYSTEM_WINDOWS_CE_GUI: subsystem_name = "Wince CUI"; break; - // These are from UEFI Platform Initialization Specification 1.1. + /* These are from UEFI Platform Initialization Specification 1.1. */ case IMAGE_SUBSYSTEM_EFI_APPLICATION: subsystem_name = "EFI application"; break; @@ -2870,11 +2837,11 @@ case IMAGE_SUBSYSTEM_SAL_RUNTIME_DRIVER: subsystem_name = "SAL runtime driver"; break; - // This is from revision 8.0 of the MS PE/COFF spec + /* This is from revision 8.0 of the MS PE/COFF spec */ case IMAGE_SUBSYSTEM_XBOX: subsystem_name = "XBOX"; break; - // Added default case for clarity - subsystem_name is NULL anyway. + /* Added default case for clarity - subsystem_name is NULL anyway. */ default: subsystem_name = NULL; } @@ -2976,29 +2943,33 @@ { bfd_vma addr = ope->pe_opthdr.DataDirectory[PE_DEBUG_DATA].VirtualAddress + ope->pe_opthdr.ImageBase; - asection *section = find_section_by_vma (obfd, addr); + /* In particular a .buildid section may overlap (in VA space) with + whatever section comes ahead of it (largely because of section->size + representing s_size, not virt_size). Therefore don't look for the + section containing the first byte, but for that covering the last + one. */ + bfd_vma last = addr + ope->pe_opthdr.DataDirectory[PE_DEBUG_DATA].Size - 1; + asection *section = find_section_by_vma (obfd, last); bfd_byte *data; + /* PR 17512: file: 0f15796a. */ + if (section && addr < section->vma) + { + /* xgettext:c-format */ + _bfd_error_handler + (_("%pB: Data Directory (%lx bytes at %" PRIx64 ") " + "extends across section boundary at %" PRIx64), + obfd, ope->pe_opthdr.DataDirectory[PE_DEBUG_DATA].Size, + (uint64_t) addr, (uint64_t) section->vma); + return FALSE; + } + if (section && bfd_malloc_and_get_section (obfd, section, &data)) { unsigned int i; struct external_IMAGE_DEBUG_DIRECTORY *dd = (struct external_IMAGE_DEBUG_DIRECTORY *)(data + (addr - section->vma)); - /* PR 17512: file: 0f15796a. */ - if ((unsigned long) ope->pe_opthdr.DataDirectory[PE_DEBUG_DATA].Size - > section->size - (addr - section->vma)) - { - /* xgettext:c-format */ - _bfd_error_handler - (_("%pB: Data Directory size (%lx) " - "exceeds space left in section (%" PRIx64 ")"), - obfd, ope->pe_opthdr.DataDirectory[PE_DEBUG_DATA].Size, - (uint64_t) (section->size - (addr - section->vma))); - free (data); - return FALSE; - } - for (i = 0; i < ope->pe_opthdr.DataDirectory[PE_DEBUG_DATA].Size / sizeof (struct external_IMAGE_DEBUG_DIRECTORY); i++) { @@ -3056,7 +3027,7 @@ { if (coff_section_data (obfd, osec) == NULL) { - bfd_size_type amt = sizeof (struct coff_section_tdata); + size_t amt = sizeof (struct coff_section_tdata); osec->used_by_bfd = bfd_zalloc (obfd, amt); if (osec->used_by_bfd == NULL) return FALSE; @@ -3064,7 +3035,7 @@ if (pei_section_data (obfd, osec) == NULL) { - bfd_size_type amt = sizeof (struct pei_section_tdata); + size_t amt = sizeof (struct pei_section_tdata); coff_section_data (obfd, osec)->tdata = bfd_zalloc (obfd, amt); if (coff_section_data (obfd, osec)->tdata == NULL) return FALSE; diff -Nru gdb-9.1/bfd/plugin.c gdb-10.2/bfd/plugin.c --- gdb-9.1/bfd/plugin.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/plugin.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Plugin support for BFD. - Copyright (C) 2009-2019 Free Software Foundation, Inc. + Copyright (C) 2009-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -124,13 +124,37 @@ return LDPS_OK; } +struct plugin_list_entry +{ + /* These must be initialized for each IR object with LTO wrapper. */ + ld_plugin_claim_file_handler claim_file; + ld_plugin_all_symbols_read_handler all_symbols_read; + ld_plugin_all_symbols_read_handler cleanup_handler; + bfd_boolean has_symbol_type; + + struct plugin_list_entry *next; + + /* These can be reused for all IR objects. */ + const char *plugin_name; +}; + +static const char *plugin_program_name; + +void +bfd_plugin_set_program_name (const char *program_name) +{ + plugin_program_name = program_name; +} + +static struct plugin_list_entry *plugin_list = NULL; +static struct plugin_list_entry *current_plugin = NULL; + /* Register a claim-file handler. */ -static ld_plugin_claim_file_handler claim_file = NULL; static enum ld_plugin_status register_claim_file (ld_plugin_claim_file_handler handler) { - claim_file = handler; + current_plugin->claim_file = handler; return LDPS_OK; } @@ -143,6 +167,9 @@ struct plugin_data_struct *plugin_data = bfd_alloc (abfd, sizeof (plugin_data_struct)); + if (!plugin_data) + return LDPS_ERR; + plugin_data->nsyms = nsyms; plugin_data->syms = syms; @@ -153,12 +180,12 @@ return LDPS_OK; } -static const char *plugin_program_name; - -void -bfd_plugin_set_program_name (const char *program_name) +static enum ld_plugin_status +add_symbols_v2 (void *handle, int nsyms, + const struct ld_plugin_symbol *syms) { - plugin_program_name = program_name; + current_plugin->has_symbol_type = TRUE; + return add_symbols (handle, nsyms, syms); } int @@ -170,7 +197,7 @@ while (iobfd->my_archive && !bfd_is_thin_archive (iobfd->my_archive)) iobfd = iobfd->my_archive; - file->name = iobfd->filename; + file->name = bfd_get_filename (iobfd); if (!iobfd->iostream && !bfd_open_file (iobfd)) return 0; @@ -212,68 +239,79 @@ struct ld_plugin_input_file file; file.handle = abfd; - if (!bfd_plugin_open_input (abfd, &file)) - return 0; - if (claim_file) - claim_file (&file, &claimed); - close (file.fd); + if (bfd_plugin_open_input (abfd, &file) + && current_plugin->claim_file) + { + current_plugin->claim_file (&file, &claimed); + close (file.fd); + } + return claimed; } -struct plugin_list_entry -{ - void * handle; - ld_plugin_claim_file_handler claim_file; - struct plugin_list_entry * next; -}; - -static struct plugin_list_entry * plugin_list = NULL; - -static int -try_load_plugin (const char *pname, bfd *abfd, int *has_plugin_p) +static bfd_boolean +try_load_plugin (const char * pname, + struct plugin_list_entry * plugin_list_iter, + bfd * abfd, + bfd_boolean build_list_p) { - void *plugin_handle = NULL; - struct ld_plugin_tv tv[4]; + void *plugin_handle; + struct ld_plugin_tv tv[5]; int i; ld_plugin_onload onload; enum ld_plugin_status status; - struct plugin_list_entry *plugin_list_iter; + bfd_boolean result = FALSE; + + /* NB: Each object is independent. Reuse the previous plugin from + the last run will lead to wrong result. */ + if (current_plugin) + memset (current_plugin, 0, + offsetof (struct plugin_list_entry, next)); - *has_plugin_p = 0; + if (plugin_list_iter) + pname = plugin_list_iter->plugin_name; plugin_handle = dlopen (pname, RTLD_NOW); if (!plugin_handle) { - _bfd_error_handler ("%s\n", dlerror ()); - return 0; + /* If we are building a list of viable plugins, then + we do not bother the user with the details of any + plugins that cannot be loaded. */ + if (! build_list_p) + _bfd_error_handler ("Failed to load plugin '%s', reason: %s\n", + pname, dlerror ()); + return FALSE; } - for (plugin_list_iter = plugin_list; - plugin_list_iter; - plugin_list_iter = plugin_list_iter->next) + if (plugin_list_iter == NULL) { - if (plugin_handle == plugin_list_iter->handle) - { - dlclose (plugin_handle); - if (!plugin_list_iter->claim_file) - return 0; + size_t length_plugin_name = strlen (pname) + 1; + char *plugin_name = bfd_malloc (length_plugin_name); - register_claim_file (plugin_list_iter->claim_file); - goto have_claim_file; + if (plugin_name == NULL) + goto short_circuit; + plugin_list_iter = bfd_malloc (sizeof *plugin_list_iter); + if (plugin_list_iter == NULL) + { + free (plugin_name); + goto short_circuit; } + /* Make a copy of PNAME since PNAME from load_plugin () will be + freed. */ + memcpy (plugin_name, pname, length_plugin_name); + memset (plugin_list_iter, 0, sizeof (*plugin_list_iter)); + plugin_list_iter->plugin_name = plugin_name; + plugin_list_iter->next = plugin_list; + plugin_list = plugin_list_iter; } - plugin_list_iter = bfd_malloc (sizeof *plugin_list_iter); - if (plugin_list_iter == NULL) - return 0; - plugin_list_iter->handle = plugin_handle; - plugin_list_iter->claim_file = NULL; - plugin_list_iter->next = plugin_list; - plugin_list = plugin_list_iter; + current_plugin = plugin_list_iter; + if (build_list_p) + goto short_circuit; onload = dlsym (plugin_handle, "onload"); if (!onload) - return 0; + goto short_circuit; i = 0; tv[i].tv_tag = LDPT_MESSAGE; @@ -288,36 +326,39 @@ tv[i].tv_u.tv_add_symbols = add_symbols; ++i; + tv[i].tv_tag = LDPT_ADD_SYMBOLS_V2; + tv[i].tv_u.tv_add_symbols = add_symbols_v2; + + ++i; tv[i].tv_tag = LDPT_NULL; tv[i].tv_u.tv_val = 0; + /* LTO plugin will call handler hooks to set up plugin handlers. */ status = (*onload)(tv); if (status != LDPS_OK) - return 0; - - plugin_list_iter->claim_file = claim_file; - -have_claim_file: - *has_plugin_p = 1; + goto short_circuit; abfd->plugin_format = bfd_plugin_no; - if (!claim_file) - return 0; + if (!current_plugin->claim_file) + goto short_circuit; if (!try_claim (abfd)) - return 0; + goto short_circuit; abfd->plugin_format = bfd_plugin_yes; - return 1; + result = TRUE; + + short_circuit: + dlclose (plugin_handle); + return result; } /* There may be plugin libraries in lib/bfd-plugins. */ +static int has_plugin_list = -1; -static int has_plugin = -1; - -static const bfd_target *(*ld_plugin_object_p) (bfd *); +static bfd_cleanup (*ld_plugin_object_p) (bfd *); static const char *plugin_name; @@ -325,7 +366,6 @@ bfd_plugin_set_plugin (const char *p) { plugin_name = p; - has_plugin = p != NULL; } /* Return TRUE if a plugin library is used. */ @@ -333,7 +373,7 @@ bfd_boolean bfd_plugin_specified_p (void) { - return has_plugin > 0; + return plugin_list != NULL; } /* Return TRUE if ABFD can be claimed by linker LTO plugin. */ @@ -359,13 +399,13 @@ /* Register OBJECT_P to be used by bfd_plugin_object_p. */ void -register_ld_plugin_object_p (const bfd_target *(*object_p) (bfd *)) +register_ld_plugin_object_p (bfd_cleanup (*object_p) (bfd *)) { ld_plugin_object_p = object_p; } -static int -load_plugin (bfd *abfd) +static void +build_plugin_list (bfd *abfd) { /* The intent was to search ${libdir}/bfd-plugins for plugins, but unfortunately the original implementation wasn't precisely that @@ -374,17 +414,10 @@ static const char *path[] = { LIBDIR "/bfd-plugins", BINDIR "/../lib/bfd-plugins" }; struct stat last_st; - int found = 0; unsigned int i; - if (!has_plugin) - return found; - - if (plugin_name) - return try_load_plugin (plugin_name, abfd, &has_plugin); - - if (plugin_program_name == NULL) - return found; + if (has_plugin_list >= 0) + return; /* Try not to search the same dir twice, by looking at st_dev and st_ino for the dir. If we are on a file system that always sets @@ -419,30 +452,42 @@ full_name = concat (plugin_dir, "/", ent->d_name, NULL); if (stat (full_name, &st) == 0 && S_ISREG (st.st_mode)) - { - int valid_plugin; - - found = try_load_plugin (full_name, abfd, &valid_plugin); - if (has_plugin <= 0) - has_plugin = valid_plugin; - } + (void) try_load_plugin (full_name, NULL, abfd, TRUE); free (full_name); - if (found) - break; } closedir (d); } free (plugin_dir); } - if (found) - break; } - return found; + has_plugin_list = plugin_list != NULL; +} + +static bfd_boolean +load_plugin (bfd *abfd) +{ + struct plugin_list_entry *plugin_list_iter; + + if (plugin_name) + return try_load_plugin (plugin_name, plugin_list, abfd, FALSE); + + if (plugin_program_name == NULL) + return FALSE; + + build_plugin_list (abfd); + + for (plugin_list_iter = plugin_list; + plugin_list_iter; + plugin_list_iter = plugin_list_iter->next) + if (try_load_plugin (NULL, plugin_list_iter, abfd,FALSE)) + return TRUE; + + return FALSE; } -static const bfd_target * +static bfd_cleanup bfd_plugin_object_p (bfd *abfd) { if (ld_plugin_object_p) @@ -451,7 +496,7 @@ if (abfd->plugin_format == bfd_plugin_unknown && !load_plugin (abfd)) return NULL; - return abfd->plugin_format == bfd_plugin_yes ? abfd->xvec : NULL; + return abfd->plugin_format == bfd_plugin_yes ? _bfd_no_cleanup : NULL; } /* Copy any private info we understand from the input bfd @@ -557,9 +602,15 @@ struct plugin_data_struct *plugin_data = abfd->tdata.plugin_data; long nsyms = plugin_data->nsyms; const struct ld_plugin_symbol *syms = plugin_data->syms; - static asection fake_section - = BFD_FAKE_SECTION (fake_section, NULL, "plug", 0, + static asection fake_text_section + = BFD_FAKE_SECTION (fake_text_section, NULL, "plug", 0, SEC_ALLOC | SEC_LOAD | SEC_CODE | SEC_HAS_CONTENTS); + static asection fake_data_section + = BFD_FAKE_SECTION (fake_data_section, NULL, "plug", 0, + SEC_ALLOC | SEC_LOAD | SEC_DATA | SEC_HAS_CONTENTS); + static asection fake_bss_section + = BFD_FAKE_SECTION (fake_bss_section, NULL, "plug", 0, + SEC_ALLOC); static asection fake_common_section = BFD_FAKE_SECTION (fake_common_section, NULL, "plug", 0, SEC_IS_COMMON); int i; @@ -586,7 +637,25 @@ break; case LDPK_DEF: case LDPK_WEAKDEF: - s->section = &fake_section; + if (current_plugin->has_symbol_type) + switch (syms[i].symbol_type) + { + default: + /* FIXME: Should we issue an error here ? */ + case LDST_UNKNOWN: + /* What is the best fake section for LDST_UNKNOWN? */ + case LDST_FUNCTION: + s->section = &fake_text_section; + break; + case LDST_VARIABLE: + if (syms[i].section_kind == LDSSK_BSS) + s->section = &fake_bss_section; + else + s->section = &fake_data_section; + break; + } + else + s->section = &fake_text_section; break; default: BFD_ASSERT (0); @@ -695,4 +764,4 @@ NULL /* backend_data. */ }; -#endif /* BFD_SUPPORTS_PLUGIN */ +#endif /* BFD_SUPPORTS_PLUGINS */ diff -Nru gdb-9.1/bfd/plugin.h gdb-10.2/bfd/plugin.h --- gdb-9.1/bfd/plugin.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/plugin.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Plugin support for BFD. - Copyright (C) 2009-2019 Free Software Foundation, Inc. + Copyright (C) 2009-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -27,7 +27,7 @@ bfd_boolean bfd_plugin_target_p (const bfd_target *); bfd_boolean bfd_plugin_specified_p (void); bfd_boolean bfd_link_plugin_object_p (bfd *); -void register_ld_plugin_object_p (const bfd_target *(*object_p) (bfd *)); +void register_ld_plugin_object_p (bfd_cleanup (*object_p) (bfd *)); typedef struct plugin_data_struct { diff -Nru gdb-9.1/bfd/po/bfd.pot gdb-10.2/bfd/po/bfd.pot --- gdb-9.1/bfd/po/bfd.pot 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/po/bfd.pot 2021-04-25 04:06:26.000000000 +0000 @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: bug-binutils@gnu.org\n" -"POT-Creation-Date: 2019-01-19 16:33+0000\n" +"POT-Creation-Date: 2020-07-04 10:24+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,223 +18,236 @@ "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" -#: aout-cris.c:200 +#: aout-cris.c:196 #, c-format msgid "%pB: unsupported relocation type exported: %#x" msgstr "" -#: aout-cris.c:244 +#: aout-cris.c:242 #, c-format msgid "%pB: unsupported relocation type imported: %#x" msgstr "" -#: aout-cris.c:256 +#: aout-cris.c:254 #, c-format msgid "%pB: bad relocation record imported: %d" msgstr "" -#: aoutx.h:1265 aoutx.h:1618 pdp11.c:1138 pdp11.c:1399 +#: aoutx.h:1265 aoutx.h:1613 pdp11.c:1236 pdp11.c:1510 #, c-format msgid "%pB: can not represent section `%pA' in a.out object file format" msgstr "" -#: aoutx.h:1582 pdp11.c:1371 +#: aoutx.h:1577 pdp11.c:1482 #, c-format msgid "" "%pB: can not represent section for symbol `%s' in a.out object file format" msgstr "" -#: aoutx.h:1585 vms-alpha.c:7860 +#: aoutx.h:1580 vms-alpha.c:8040 msgid "*unknown*" msgstr "" -#: aoutx.h:1721 +#: aoutx.h:1716 pdp11.c:1578 #, c-format msgid "%pB: invalid string offset % >= %" msgstr "" -#: aoutx.h:2412 aoutx.h:2430 +#: aoutx.h:1963 +#, c-format +msgid "%pB: unsupported AOUT relocation size: %d" +msgstr "" + +#: aoutx.h:2412 aoutx.h:2430 pdp11.c:2058 #, c-format msgid "%pB: attempt to write out unknown reloc type" msgstr "" -#: aoutx.h:4086 +#: aoutx.h:4087 pdp11.c:3441 #, c-format msgid "%pB: unsupported relocation type" msgstr "" #. Unknown relocation. -#: aoutx.h:4407 coff-alpha.c:601 coff-alpha.c:1514 coff-rs6000.c:2772 +#: aoutx.h:4408 coff-alpha.c:601 coff-alpha.c:1512 coff-rs6000.c:2758 #: coff-sh.c:504 coff-tic4x.c:184 coff-tic54x.c:279 elf-hppa.h:798 -#: elf-hppa.h:826 elf-m10200.c:226 elf-m10300.c:812 elf32-arc.c:517 -#: elf32-arm.c:1943 elf32-avr.c:964 elf32-bfin.c:1061 elf32-bfin.c:4698 -#: elf32-cr16.c:653 elf32-cr16.c:683 elf32-cr16c.c:186 elf32-cris.c:467 -#: elf32-crx.c:429 elf32-csky.c:989 elf32-d10v.c:234 elf32-d30v.c:522 -#: elf32-d30v.c:544 elf32-dlx.c:548 elf32-epiphany.c:376 elf32-fr30.c:381 -#: elf32-frv.c:2558 elf32-frv.c:6262 elf32-ft32.c:306 elf32-h8300.c:302 -#: elf32-i386.c:401 elf32-ip2k.c:1245 elf32-iq2000.c:442 elf32-lm32.c:539 -#: elf32-m32c.c:305 elf32-m32r.c:1286 elf32-m32r.c:1311 elf32-m32r.c:2417 -#: elf32-m68hc11.c:390 elf32-m68hc12.c:510 elf32-m68k.c:352 elf32-mcore.c:354 -#: elf32-mcore.c:440 elf32-mep.c:389 elf32-metag.c:878 elf32-microblaze.c:692 -#: elf32-microblaze.c:969 elf32-mips.c:2229 elf32-moxie.c:137 -#: elf32-msp430.c:648 elf32-msp430.c:658 elf32-mt.c:241 elf32-nds32.c:3236 -#: elf32-nds32.c:3262 elf32-nds32.c:5173 elf32-nios2.c:3015 elf32-or1k.c:1037 -#: elf32-pj.c:325 elf32-ppc.c:898 elf32-ppc.c:911 elf32-pru.c:420 -#: elf32-rl78.c:291 elf32-rx.c:313 elf32-rx.c:322 elf32-s12z.c:292 -#: elf32-s390.c:347 elf32-sh.c:438 elf32-spu.c:160 elf32-tic6x.c:1508 -#: elf32-tic6x.c:1518 elf32-tic6x.c:1537 elf32-tic6x.c:1547 elf32-tic6x.c:2642 -#: elf32-tilepro.c:803 elf32-v850.c:1899 elf32-v850.c:1921 elf32-v850.c:4270 -#: elf32-vax.c:290 elf32-visium.c:482 elf32-wasm32.c:105 elf32-xc16x.c:250 -#: elf32-xgate.c:418 elf32-xstormy16.c:395 elf32-xtensa.c:459 -#: elf32-xtensa.c:493 elf64-alpha.c:1112 elf64-alpha.c:4101 elf64-alpha.c:4249 -#: elf64-ia64-vms.c:254 elf64-ia64-vms.c:3440 elf64-mips.c:3958 -#: elf64-mips.c:3974 elf64-mmix.c:1264 elf64-nfp.c:238 elf64-ppc.c:921 -#: elf64-ppc.c:1209 elf64-ppc.c:1218 elf64-s390.c:328 elf64-s390.c:378 -#: elf64-x86-64.c:285 elfn32-mips.c:3786 elfxx-ia64.c:324 elfxx-riscv.c:955 -#: elfxx-sparc.c:589 elfxx-sparc.c:639 elfxx-tilegx.c:912 elfxx-tilegx.c:952 -#: /work/sources/binutils/current/bfd/elfnn-aarch64.c:2125 -#: /work/sources/binutils/current/bfd/elfnn-aarch64.c:2223 elf32-ia64.c:210 -#: elf32-ia64.c:3862 elf64-ia64.c:210 elf64-ia64.c:3862 +#: elf-hppa.h:826 elf-m10200.c:226 elf-m10300.c:812 elf32-arc.c:532 +#: elf32-arm.c:1985 elf32-avr.c:962 elf32-bfin.c:1062 elf32-bfin.c:4677 +#: elf32-cr16.c:654 elf32-cr16.c:684 elf32-cris.c:467 elf32-crx.c:429 +#: elf32-csky.c:990 elf32-d10v.c:234 elf32-d30v.c:522 elf32-d30v.c:544 +#: elf32-dlx.c:546 elf32-epiphany.c:372 elf32-fr30.c:381 elf32-frv.c:2558 +#: elf32-frv.c:6239 elf32-ft32.c:306 elf32-h8300.c:302 elf32-i386.c:400 +#: elf32-ip2k.c:1240 elf32-iq2000.c:442 elf32-lm32.c:495 elf32-m32c.c:305 +#: elf32-m32r.c:1286 elf32-m32r.c:1311 elf32-m32r.c:2232 elf32-m68hc11.c:390 +#: elf32-m68hc12.c:510 elf32-m68k.c:354 elf32-mcore.c:354 elf32-mcore.c:440 +#: elf32-mep.c:389 elf32-metag.c:874 elf32-microblaze.c:692 +#: elf32-microblaze.c:965 elf32-mips.c:2229 elf32-moxie.c:137 +#: elf32-msp430.c:653 elf32-msp430.c:663 elf32-mt.c:241 elf32-nds32.c:3237 +#: elf32-nds32.c:3263 elf32-nds32.c:5033 elf32-nios2.c:3022 elf32-or1k.c:1040 +#: elf32-pj.c:326 elf32-ppc.c:901 elf32-ppc.c:914 elf32-pru.c:423 +#: elf32-rl78.c:291 elf32-rx.c:313 elf32-rx.c:322 elf32-s12z.c:296 +#: elf32-s390.c:347 elf32-sh.c:438 elf32-spu.c:163 elf32-tic6x.c:1498 +#: elf32-tic6x.c:1508 elf32-tic6x.c:1527 elf32-tic6x.c:1537 elf32-tic6x.c:2583 +#: elf32-tilepro.c:800 elf32-v850.c:1898 elf32-v850.c:1920 elf32-v850.c:4270 +#: elf32-vax.c:290 elf32-visium.c:481 elf32-wasm32.c:105 elf32-xc16x.c:250 +#: elf32-xgate.c:418 elf32-xstormy16.c:395 elf32-xtensa.c:522 +#: elf32-xtensa.c:556 elf32-z80.c:331 elf64-alpha.c:1113 elf64-alpha.c:4067 +#: elf64-alpha.c:4215 elf64-bpf.c:322 elf64-ia64-vms.c:254 +#: elf64-ia64-vms.c:3429 elf64-mips.c:3958 elf64-mips.c:3974 elf64-mmix.c:1264 +#: elf64-nfp.c:238 elf64-ppc.c:1014 elf64-ppc.c:1366 elf64-ppc.c:1375 +#: elf64-s390.c:328 elf64-s390.c:378 elf64-x86-64.c:281 elfn32-mips.c:3786 +#: elfxx-ia64.c:324 elfxx-riscv.c:954 elfxx-sparc.c:589 elfxx-sparc.c:639 +#: elfxx-tilegx.c:909 elfxx-tilegx.c:949 elfnn-aarch64.c:2215 +#: elfnn-aarch64.c:2313 elfnn-ia64.c:213 elfnn-ia64.c:3824 #, c-format msgid "%pB: unsupported relocation type %#x" msgstr "" -#: aoutx.h:5434 pdp11.c:3694 +#: aoutx.h:5435 pdp11.c:3864 #, c-format msgid "%pB: relocatable link from %s to %s not supported" msgstr "" -#: archive.c:2214 +#: arc-got.h:69 +#, c-format +msgid "%pB: cannot allocate memory for local GOT entries" +msgstr "" + +#: archive.c:2249 msgid "warning: writing archive was slow: rewriting timestamp" msgstr "" -#: archive.c:2330 linker.c:1429 +#: archive.c:2316 archive.c:2376 elflink.c:4545 linker.c:1428 #, c-format msgid "%pB: plugin needed to handle lto object" msgstr "" -#: archive.c:2559 +#: archive.c:2602 msgid "Reading archive file mod timestamp" msgstr "" -#: archive.c:2583 +#: archive.c:2626 msgid "Writing updated armap timestamp" msgstr "" -#: bfd.c:449 +#: bfd.c:677 msgid "no error" msgstr "" -#: bfd.c:450 +#: bfd.c:678 msgid "system call error" msgstr "" -#: bfd.c:451 +#: bfd.c:679 msgid "invalid bfd target" msgstr "" -#: bfd.c:452 +#: bfd.c:680 msgid "file in wrong format" msgstr "" -#: bfd.c:453 +#: bfd.c:681 msgid "archive object file in wrong format" msgstr "" -#: bfd.c:454 +#: bfd.c:682 msgid "invalid operation" msgstr "" -#: bfd.c:455 +#: bfd.c:683 msgid "memory exhausted" msgstr "" -#: bfd.c:456 +#: bfd.c:684 msgid "no symbols" msgstr "" -#: bfd.c:457 +#: bfd.c:685 msgid "archive has no index; run ranlib to add one" msgstr "" -#: bfd.c:458 +#: bfd.c:686 msgid "no more archived files" msgstr "" -#: bfd.c:459 +#: bfd.c:687 msgid "malformed archive" msgstr "" -#: bfd.c:460 +#: bfd.c:688 msgid "DSO missing from command line" msgstr "" -#: bfd.c:461 +#: bfd.c:689 msgid "file format not recognized" msgstr "" -#: bfd.c:462 +#: bfd.c:690 msgid "file format is ambiguous" msgstr "" -#: bfd.c:463 +#: bfd.c:691 msgid "section has no contents" msgstr "" -#: bfd.c:464 +#: bfd.c:692 msgid "nonrepresentable section on output" msgstr "" -#: bfd.c:465 +#: bfd.c:693 msgid "symbol needs debug section which does not exist" msgstr "" -#: bfd.c:466 +#: bfd.c:694 msgid "bad value" msgstr "" -#: bfd.c:467 +#: bfd.c:695 msgid "file truncated" msgstr "" -#: bfd.c:468 +#: bfd.c:696 msgid "file too big" msgstr "" -#: bfd.c:469 +#: bfd.c:697 +msgid "sorry, cannot handle this file" +msgstr "" + +#: bfd.c:698 #, c-format msgid "error reading %s: %s" msgstr "" -#: bfd.c:470 +#: bfd.c:699 msgid "#" msgstr "" -#: bfd.c:1429 +#: bfd.c:1658 #, c-format msgid "BFD %s assertion fail %s:%d" msgstr "" -#: bfd.c:1442 +#: bfd.c:1671 #, c-format msgid "BFD %s internal error, aborting at %s:%d in %s\n" msgstr "" -#: bfd.c:1447 +#: bfd.c:1676 #, c-format msgid "BFD %s internal error, aborting at %s:%d\n" msgstr "" -#: bfd.c:1449 +#: bfd.c:1678 msgid "Please report this bug.\n" msgstr "" -#: bfdwin.c:206 +#: bfdwin.c:207 #, c-format msgid "not mapping: data=%lx mapped=%d\n" msgstr "" -#: bfdwin.c:209 +#: bfdwin.c:210 #, c-format msgid "not mapping: env var not set\n" msgstr "" @@ -256,118 +269,113 @@ "to generate uncompressed binaries" msgstr "" -#: coff-alpha.c:850 coff-alpha.c:887 coff-alpha.c:1957 coff-mips.c:950 +#: coff-alpha.c:850 coff-alpha.c:887 coff-alpha.c:1954 coff-mips.c:953 msgid "GP relative relocation used when GP not defined" msgstr "" -#: coff-alpha.c:1443 +#: coff-alpha.c:1441 msgid "using multiple gp values" msgstr "" -#: coff-alpha.c:1501 coff-alpha.c:1507 elf.c:9100 elf32-mcore.c:100 -#: elf32-mcore.c:455 elf32-ppc.c:7697 elf32-ppc.c:8829 elf64-ppc.c:14411 +#: coff-alpha.c:1499 coff-alpha.c:1505 elf.c:9431 elf32-mcore.c:100 +#: elf32-mcore.c:455 elf32-ppc.c:7596 elf32-ppc.c:8747 elf64-ppc.c:15962 #, c-format msgid "%pB: %s unsupported" msgstr "" -#: coff-mips.c:640 elf32-mips.c:1742 elf32-score.c:430 elf32-score7.c:330 +#: coff-go32.c:156 coffswap.h:785 +#, c-format +msgid "%pB: warning: %s: line number overflow: 0x%lx > 0xffff" +msgstr "" + +#: coff-mips.c:643 elf32-mips.c:1742 elf32-score.c:430 elf32-score7.c:330 #: elf64-mips.c:3451 elfn32-mips.c:3276 msgid "GP relative relocation when _gp not defined" msgstr "" -#: coff-rs6000.c:2858 +#: coff-rs6000.c:2844 #, c-format msgid "%pB: TOC reloc at %# to symbol `%s' with no TOC entry" msgstr "" -#: coff-rs6000.c:3620 coff64-rs6000.c:2145 +#: coff-rs6000.c:3607 coff64-rs6000.c:2153 #, c-format msgid "%pB: symbol `%s' has unrecognized smclas %d" msgstr "" -#: coff-sh.c:780 elf32-sh.c:521 +#: coff-sh.c:778 elf32-sh.c:521 #, c-format msgid "%pB: %#: warning: bad R_SH_USES offset" msgstr "" -#: coff-sh.c:791 +#: coff-sh.c:789 #, c-format msgid "%pB: %#: warning: R_SH_USES points to unrecognized insn %#x" msgstr "" -#: coff-sh.c:809 elf32-sh.c:552 +#: coff-sh.c:807 elf32-sh.c:552 #, c-format msgid "%pB: %#: warning: bad R_SH_USES load offset" msgstr "" -#: coff-sh.c:834 elf32-sh.c:568 +#: coff-sh.c:832 elf32-sh.c:568 #, c-format msgid "%pB: %#: warning: could not find expected reloc" msgstr "" -#: coff-sh.c:851 elf32-sh.c:597 +#: coff-sh.c:849 elf32-sh.c:597 #, c-format msgid "%pB: %#: warning: symbol in unexpected section" msgstr "" -#: coff-sh.c:977 elf32-sh.c:727 +#: coff-sh.c:975 elf32-sh.c:727 #, c-format msgid "%pB: %#: warning: could not find expected COUNT reloc" msgstr "" -#: coff-sh.c:987 elf32-sh.c:738 +#: coff-sh.c:985 elf32-sh.c:738 #, c-format msgid "%pB: %#: warning: bad count" msgstr "" -#: coff-sh.c:1359 coff-sh.c:2647 elf32-sh.c:1142 elf32-sh.c:1512 +#: coff-sh.c:1356 coff-sh.c:2644 elf32-sh.c:1138 elf32-sh.c:1505 #, c-format msgid "%pB: %#: fatal: reloc overflow while relaxing" msgstr "" -#: coff-sh.c:1454 +#: coff-sh.c:1451 #, c-format msgid "%pB: fatal: generic symbols retrieved before relaxing" msgstr "" -#: coff-sh.c:2785 cofflink.c:2965 +#: coff-sh.c:2781 cofflink.c:2948 #, c-format msgid "%pB: illegal symbol index %ld in relocs" msgstr "" -#: coff-tic4x.c:228 coff-tic54x.c:366 coffcode.h:5010 +#: coff-tic4x.c:228 coff-tic54x.c:366 coffcode.h:5085 #, c-format msgid "%pB: warning: illegal symbol index %ld in relocs" msgstr "" -#: coff-tic80.c:441 -#, c-format -msgid "unsupported relocation type %#x" -msgstr "" - -#: coff-tic80.c:672 cofflink.c:3127 -#, c-format -msgid "%pB: bad reloc address %# in section `%pA'" -msgstr "" - -#: coffcode.h:954 +#: coffcode.h:961 #, c-format msgid "%pB: unable to load COMDAT section name" msgstr "" #. Malformed input files can trigger this test. #. cf PR 21781. -#: coffcode.h:989 +#: coffcode.h:996 #, c-format msgid "%pB: error: unexpected symbol '%s' in COMDAT section" msgstr "" -#: coffcode.h:1001 +#: coffcode.h:1008 #, c-format msgid "%pB: warning: COMDAT symbol '%s' does not match section name '%s'" msgstr "" -#: coffcode.h:1011 +#: coffcode.h:1018 #, c-format msgid "%pB: warning: no symbol for section '%s' found" msgstr "" @@ -375,397 +383,401 @@ #. Generate a warning message rather using the 'unhandled' #. variable as this will allow some .sys files generate by #. other toolchains to be processed. See bugzilla issue 196. -#: coffcode.h:1237 +#: coffcode.h:1249 #, c-format msgid "%pB: warning: ignoring section flag %s in section %s" msgstr "" -#: coffcode.h:1306 +#: coffcode.h:1318 #, c-format msgid "%pB (%s): section flag %s (%#lx) ignored" msgstr "" -#: coffcode.h:1917 +#: coffcode.h:1934 coffcode.h:1999 #, c-format msgid "%pB: warning: claims to have 0xffff relocs, without overflow" msgstr "" -#: coffcode.h:2315 +#: coffcode.h:2365 #, c-format msgid "unrecognized TI COFF target id '0x%x'" msgstr "" -#: coffcode.h:2599 +#: coffcode.h:2643 #, c-format msgid "%pB: reloc against a non-existent symbol index: %ld" msgstr "" -#: coffcode.h:2910 +#: coffcode.h:2951 #, c-format msgid "%pB: page size is too large (0x%x)" msgstr "" -#: coffcode.h:3070 +#: coffcode.h:3111 #, c-format msgid "%pB: too many sections (%d)" msgstr "" -#: coffcode.h:3489 +#: coffcode.h:3530 #, c-format msgid "%pB: section %pA: string table overflow at offset %ld" msgstr "" -#: coffcode.h:3589 +#: coffcode.h:3630 #, c-format msgid "%pB:%s section %s: alignment 2**%u not representable" msgstr "" -#: coffcode.h:4276 +#: coffcode.h:4329 #, c-format msgid "%pB: warning: line number count (%#lx) exceeds section size (%#lx)" msgstr "" -#: coffcode.h:4291 +#: coffcode.h:4349 #, c-format msgid "%pB: warning: line number table read failed" msgstr "" -#: coffcode.h:4325 coffcode.h:4339 +#: coffcode.h:4383 coffcode.h:4397 #, c-format msgid "%pB: warning: illegal symbol index 0x%lx in line number entry %d" msgstr "" -#: coffcode.h:4353 +#: coffcode.h:4411 #, c-format msgid "%pB: warning: illegal symbol in line number entry %d" msgstr "" -#: coffcode.h:4366 +#: coffcode.h:4424 #, c-format msgid "%pB: warning: duplicate line number information for `%s'" msgstr "" -#: coffcode.h:4774 +#: coffcode.h:4845 #, c-format msgid "%pB: unrecognized storage class %d for %s symbol `%s'" msgstr "" -#: coffcode.h:4904 +#: coffcode.h:4975 #, c-format msgid "warning: %pB: local symbol `%s' has no section" msgstr "" -#: coffcode.h:5050 +#: coffcode.h:5125 #, c-format msgid "%pB: illegal relocation type %d at address %#" msgstr "" -#: coffgen.c:178 elf.c:1216 +#: coffgen.c:179 elf.c:1236 #, c-format msgid "%pB: unable to initialize compress status for section %s" msgstr "" -#: coffgen.c:202 elf.c:1227 +#: coffgen.c:203 elf.c:1247 #, c-format msgid "%pB: unable to initialize decompress status for section %s" msgstr "" -#: coffgen.c:1657 -#, c-format -msgid "%pB: corrupt symbol count: %#" -msgstr "" - -#. PR 21013: Provide an error message when the alloc fails. -#: coffgen.c:1666 -#, c-format -msgid "" -"%pB: not enough memory to allocate space for %# symbols of size " -"%#" -msgstr "" - -#: coffgen.c:1735 +#: coffgen.c:1704 #, c-format msgid "%pB: bad string table size %" msgstr "" -#: coffgen.c:1912 coffgen.c:1972 coffgen.c:1990 cofflink.c:2045 elf.c:1882 -#: xcofflink.c:4505 +#: coffgen.c:1876 coffgen.c:1936 coffgen.c:1954 cofflink.c:2024 elf.c:1921 +#: xcofflink.c:4500 msgid "" msgstr "" -#: coffgen.c:2114 +#: coffgen.c:2085 #, c-format msgid " %s" msgstr "" -#: coffgen.c:2693 elflink.c:14322 linker.c:2959 +#: coffgen.c:2675 elflink.c:14624 linker.c:2956 msgid "%F%P: already_linked_table: %E\n" msgstr "" -#: coffgen.c:3034 elflink.c:13324 +#: coffgen.c:3016 elflink.c:13617 #, c-format msgid "removing unused section '%pA' in file '%pB'" msgstr "" -#: coffgen.c:3111 elflink.c:13542 +#: coffgen.c:3093 elflink.c:13835 msgid "warning: gc-sections option ignored" msgstr "" -#: cofflink.c:352 +#: cofflink.c:366 #, c-format msgid "warning: symbol `%s' is both section and non-section" msgstr "" -#: cofflink.c:454 elf64-ia64-vms.c:5203 elflink.c:4953 +#: cofflink.c:471 elf64-ia64-vms.c:5200 elflink.c:5131 #, c-format msgid "warning: type of symbol `%s' changed from %d to %d in %pB" msgstr "" -#: cofflink.c:2373 +#: cofflink.c:2352 #, c-format msgid "%pB: relocs in section `%pA', but it has no contents" msgstr "" -#: cofflink.c:2436 elflink.c:10810 +#: cofflink.c:2415 elflink.c:11082 #, c-format msgid "" "%X`%s' referenced in section `%pA' of %pB: defined in discarded section `" "%pA' of %pB\n" msgstr "" -#: cofflink.c:2734 +#: cofflink.c:2717 #, c-format msgid "%pB: %pA: reloc overflow: %#x > 0xffff" msgstr "" -#: cofflink.c:2742 +#: cofflink.c:2725 #, c-format msgid "%pB: warning: %pA: line number overflow: %#x > 0xffff" msgstr "" -#: coffswap.h:789 +#: cofflink.c:3110 #, c-format -msgid "%pB: warning: %s: line number overflow: 0x%lx > 0xffff" +msgid "%pB: bad reloc address %# in section `%pA'" msgstr "" -#: coffswap.h:803 +#: coffswap.h:799 #, c-format msgid "%pB: %s: reloc overflow: 0x%lx > 0xffff" msgstr "" -#: compress.c:260 +#: compress.c:271 +#, c-format +msgid "" +"error: %pB(%pA) section size (%# bytes) is larger than file size " +"(%# bytes)" +msgstr "" + +#: compress.c:282 #, c-format msgid "error: %pB(%pA) is too large (%# bytes)" msgstr "" -#: cpu-arm.c:298 cpu-arm.c:310 +#: cpu-arm.c:303 cpu-arm.c:315 #, c-format msgid "" "error: %pB is compiled for the EP9312, whereas %pB is compiled for XScale" msgstr "" -#: cpu-arm.c:446 +#: cpu-arm.c:451 #, c-format msgid "warning: unable to update contents of %s section in %pB" msgstr "" -#: dwarf2.c:544 +#: dwarf2.c:543 #, c-format msgid "DWARF error: can't find %s section." msgstr "" -#: dwarf2.c:579 +#: dwarf2.c:578 #, c-format msgid "" "DWARF error: offset (%) greater than or equal to %s size (%)" msgstr "" -#: dwarf2.c:1107 +#: dwarf2.c:1165 msgid "DWARF error: info pointer extends beyond end of attributes" msgstr "" -#: dwarf2.c:1275 +#: dwarf2.c:1333 #, c-format msgid "DWARF error: invalid or unhandled FORM value: %#x" msgstr "" -#: dwarf2.c:1581 +#: dwarf2.c:1646 msgid "DWARF error: mangled line number section (bad file number)" msgstr "" -#: dwarf2.c:1926 +#: dwarf2.c:1994 msgid "DWARF error: zero format count" msgstr "" -#: dwarf2.c:1936 +#: dwarf2.c:2004 #, c-format msgid "DWARF error: data count (%) larger than buffer size" msgstr "" -#: dwarf2.c:1977 +#: dwarf2.c:2045 #, c-format msgid "DWARF error: unknown format content type %" msgstr "" -#: dwarf2.c:2057 +#: dwarf2.c:2112 #, c-format msgid "DWARF error: line info section is too small (%)" msgstr "" -#: dwarf2.c:2087 +#: dwarf2.c:2142 #, c-format msgid "" "DWARF error: line info data is bigger (%#) than the space remaining " "in the section (%#lx)" msgstr "" -#: dwarf2.c:2100 +#: dwarf2.c:2155 #, c-format msgid "DWARF error: unhandled .debug_line version %d" msgstr "" -#: dwarf2.c:2110 +#: dwarf2.c:2165 msgid "DWARF error: ran out of room reading prologue" msgstr "" -#: dwarf2.c:2128 +#: dwarf2.c:2183 #, c-format msgid "DWARF error: line info unsupported segment selector size %u" msgstr "" -#: dwarf2.c:2155 +#: dwarf2.c:2210 msgid "DWARF error: invalid maximum operations per instruction" msgstr "" -#: dwarf2.c:2174 +#: dwarf2.c:2229 msgid "DWARF error: ran out of room reading opcodes" msgstr "" -#: dwarf2.c:2347 +#: dwarf2.c:2420 msgid "DWARF error: mangled line number section" msgstr "" -#: dwarf2.c:2852 dwarf2.c:2913 +#: dwarf2.c:2905 +msgid "DWARF error: abstract instance recursion detected" +msgstr "" + +#: dwarf2.c:2939 dwarf2.c:3033 msgid "DWARF error: invalid abstract instance DIE ref" msgstr "" -#: dwarf2.c:2889 +#: dwarf2.c:2955 #, c-format msgid "DWARF error: unable to read alt ref %" msgstr "" -#: dwarf2.c:2930 dwarf2.c:3103 dwarf2.c:3457 +#: dwarf2.c:3011 +#, c-format +msgid "DWARF error: unable to locate abstract instance DIE ref %" +msgstr "" + +#: dwarf2.c:3050 dwarf2.c:3232 dwarf2.c:3618 #, c-format msgid "DWARF error: could not find abbrev number %u" msgstr "" -#: dwarf2.c:2947 -msgid "DWARF error: abstract instance recursion detected" +#: dwarf2.c:3381 +#, c-format +msgid "DWARF error: could not find variable specification at offset %lx" msgstr "" -#: dwarf2.c:3376 +#: dwarf2.c:3537 #, c-format msgid "" "DWARF error: found dwarf version '%u', this reader only handles version 2, " "3, 4 and 5 information" msgstr "" -#: dwarf2.c:3420 +#: dwarf2.c:3581 #, c-format msgid "" "DWARF error: found address size '%u', this reader can not handle sizes " "greater than '%u'" msgstr "" -#: dwarf2.c:3523 +#: dwarf2.c:3685 msgid "" "DWARF error: DW_AT_comp_dir attribute encountered with a non-string form" msgstr "" -#: ecoff.c:971 +#: ecoff.c:982 #, c-format msgid "%pB: warning: isymMax (%ld) is greater than ifdMax (%ld)" msgstr "" -#: ecoff.c:1268 +#: ecoff.c:1279 #, c-format msgid "unknown basic type %d" msgstr "" -#: ecoff.c:1525 +#: ecoff.c:1536 #, c-format msgid "" "\n" " End+1 symbol: %ld" msgstr "" -#: ecoff.c:1532 ecoff.c:1535 +#: ecoff.c:1543 ecoff.c:1546 #, c-format msgid "" "\n" " First symbol: %ld" msgstr "" -#: ecoff.c:1548 +#: ecoff.c:1559 #, c-format msgid "" "\n" " End+1 symbol: %-7ld Type: %s" msgstr "" -#: ecoff.c:1555 +#: ecoff.c:1566 #, c-format msgid "" "\n" " Local symbol: %ld" msgstr "" -#: ecoff.c:1563 +#: ecoff.c:1574 #, c-format msgid "" "\n" " struct; End+1 symbol: %ld" msgstr "" -#: ecoff.c:1568 +#: ecoff.c:1579 #, c-format msgid "" "\n" " union; End+1 symbol: %ld" msgstr "" -#: ecoff.c:1573 +#: ecoff.c:1584 #, c-format msgid "" "\n" " enum; End+1 symbol: %ld" msgstr "" -#: ecoff.c:1579 +#: ecoff.c:1590 #, c-format msgid "" "\n" " Type: %s" msgstr "" -#: elf-attrs.c:446 +#: elf-attrs.c:449 #, c-format msgid "%pB: error: attribute section '%pA' too big: %#llx" msgstr "" -#: elf-attrs.c:487 +#: elf-attrs.c:490 #, c-format msgid "%pB: error: attribute section length too small: %" msgstr "" -#: elf-attrs.c:615 +#: elf-attrs.c:618 #, c-format msgid "" "error: %pB: object has vendor-specific contents that must be processed by " "the '%s' toolchain" msgstr "" -#: elf-attrs.c:625 +#: elf-attrs.c:628 #, c-format msgid "error: %pB: object tag '%d, %s' is incompatible with tag '%d, %s'" msgstr "" @@ -791,44 +803,44 @@ "dropped" msgstr "" -#: elf-eh-frame.c:1868 +#: elf-eh-frame.c:1866 #, c-format msgid "%pB: %pA not in order" msgstr "" -#: elf-eh-frame.c:1882 +#: elf-eh-frame.c:1880 #, c-format msgid "%pB: %pA invalid input section size" msgstr "" -#: elf-eh-frame.c:1890 +#: elf-eh-frame.c:1888 #, c-format msgid "%pB: %pA points past end of text section" msgstr "" -#: elf-eh-frame.c:2139 +#: elf-eh-frame.c:2141 msgid "DW_EH_PE_datarel unspecified for this architecture" msgstr "" -#: elf-eh-frame.c:2309 +#: elf-eh-frame.c:2312 #, c-format msgid "invalid output section for .eh_frame_entry: %pA" msgstr "" -#: elf-eh-frame.c:2332 +#: elf-eh-frame.c:2335 #, c-format msgid "invalid contents in %pA section" msgstr "" -#: elf-eh-frame.c:2488 +#: elf-eh-frame.c:2491 msgid ".eh_frame_hdr entry overflow" msgstr "" -#: elf-eh-frame.c:2490 +#: elf-eh-frame.c:2493 msgid ".eh_frame_hdr refers to overlapping FDEs" msgstr "" -#: elf-ifunc.c:149 +#: elf-ifunc.c:144 #, c-format msgid "" "%F%P: dynamic STT_GNU_IFUNC symbol `%s' with pointer equality in `%pB' can " @@ -836,49 +848,48 @@ "pie\n" msgstr "" -#: elf-m10200.c:434 elf-m10300.c:2147 elf32-avr.c:1510 elf32-bfin.c:3127 -#: elf32-cr16.c:1464 elf32-cr16c.c:783 elf32-cris.c:2033 elf32-crx.c:925 -#: elf32-d10v.c:512 elf32-epiphany.c:566 elf32-fr30.c:594 elf32-frv.c:4049 -#: elf32-ft32.c:494 elf32-h8300.c:523 elf32-ip2k.c:1482 elf32-iq2000.c:693 -#: elf32-lm32.c:1112 elf32-m32c.c:624 elf32-m32r.c:3045 elf32-m68hc1x.c:1266 -#: elf32-mep.c:526 elf32-metag.c:1990 elf32-microblaze.c:1631 elf32-moxie.c:288 -#: elf32-mt.c:402 elf32-nds32.c:6189 elf32-or1k.c:1759 elf32-score.c:2733 -#: elf32-score7.c:2542 elf32-spu.c:5083 elf32-tilepro.c:3506 elf32-v850.c:2291 -#: elf32-visium.c:681 elf32-xstormy16.c:931 elf64-mmix.c:1541 -#: elfxx-tilegx.c:3870 +#: elf-m10200.c:434 elf-m10300.c:2145 elf32-avr.c:1508 elf32-bfin.c:3126 +#: elf32-cr16.c:1464 elf32-cris.c:2033 elf32-crx.c:920 elf32-d10v.c:510 +#: elf32-epiphany.c:562 elf32-fr30.c:594 elf32-frv.c:4048 elf32-ft32.c:494 +#: elf32-h8300.c:523 elf32-ip2k.c:1477 elf32-iq2000.c:691 elf32-lm32.c:1069 +#: elf32-m32c.c:624 elf32-m32r.c:2860 elf32-m68hc1x.c:1272 elf32-mep.c:526 +#: elf32-metag.c:1986 elf32-microblaze.c:1627 elf32-moxie.c:288 elf32-mt.c:402 +#: elf32-nds32.c:6048 elf32-or1k.c:1817 elf32-score.c:2734 elf32-score7.c:2543 +#: elf32-spu.c:5083 elf32-tilepro.c:3380 elf32-v850.c:2290 elf32-visium.c:680 +#: elf32-xstormy16.c:929 elf64-bpf.c:512 elf64-mmix.c:1541 elfxx-tilegx.c:3744 msgid "internal error: out of range error" msgstr "" -#: elf-m10200.c:438 elf-m10300.c:2151 elf32-avr.c:1514 elf32-bfin.c:3131 -#: elf32-cr16.c:1468 elf32-cr16c.c:787 elf32-cris.c:2037 elf32-crx.c:929 -#: elf32-d10v.c:516 elf32-fr30.c:598 elf32-frv.c:4053 elf32-ft32.c:498 -#: elf32-h8300.c:527 elf32-iq2000.c:697 elf32-lm32.c:1116 elf32-m32c.c:628 -#: elf32-m32r.c:3049 elf32-m68hc1x.c:1270 elf32-mep.c:530 elf32-metag.c:1994 -#: elf32-microblaze.c:1635 elf32-moxie.c:292 elf32-msp430.c:1362 -#: elf32-nds32.c:6193 elf32-or1k.c:1763 elf32-score.c:2737 elf32-score7.c:2546 -#: elf32-spu.c:5087 elf32-tilepro.c:3510 elf32-v850.c:2295 elf32-visium.c:685 -#: elf32-xstormy16.c:935 elf64-mmix.c:1545 elfxx-mips.c:10469 -#: elfxx-tilegx.c:3874 +#: elf-m10200.c:438 elf-m10300.c:2149 elf32-avr.c:1512 elf32-bfin.c:3130 +#: elf32-cr16.c:1468 elf32-cris.c:2037 elf32-crx.c:924 elf32-d10v.c:514 +#: elf32-fr30.c:598 elf32-frv.c:4052 elf32-ft32.c:498 elf32-h8300.c:527 +#: elf32-iq2000.c:695 elf32-lm32.c:1073 elf32-m32c.c:628 elf32-m32r.c:2864 +#: elf32-m68hc1x.c:1276 elf32-mep.c:530 elf32-metag.c:1990 +#: elf32-microblaze.c:1631 elf32-moxie.c:292 elf32-msp430.c:1371 +#: elf32-nds32.c:6052 elf32-or1k.c:1821 elf32-score.c:2738 elf32-score7.c:2547 +#: elf32-spu.c:5087 elf32-tilepro.c:3384 elf32-v850.c:2294 elf32-visium.c:684 +#: elf32-xstormy16.c:933 elf64-mmix.c:1545 elfxx-mips.c:10576 +#: elfxx-tilegx.c:3748 msgid "internal error: unsupported relocation error" msgstr "" -#: elf-m10200.c:442 elf32-cr16.c:1472 elf32-cr16c.c:791 elf32-crx.c:933 -#: elf32-d10v.c:520 elf32-h8300.c:531 elf32-lm32.c:1120 elf32-m32r.c:3053 -#: elf32-m68hc1x.c:1274 elf32-microblaze.c:1639 elf32-nds32.c:6197 -#: elf32-score.c:2741 elf32-score7.c:2550 elf32-spu.c:5091 +#: elf-m10200.c:442 elf32-cr16.c:1472 elf32-crx.c:928 elf32-d10v.c:518 +#: elf32-h8300.c:531 elf32-lm32.c:1077 elf32-m32r.c:2868 elf32-m68hc1x.c:1280 +#: elf32-microblaze.c:1635 elf32-nds32.c:6056 elf32-score.c:2742 +#: elf32-score7.c:2551 elf32-spu.c:5091 msgid "internal error: dangerous error" msgstr "" -#: elf-m10200.c:446 elf-m10300.c:2168 elf32-avr.c:1522 elf32-bfin.c:3139 -#: elf32-cr16.c:1476 elf32-cr16c.c:795 elf32-cris.c:2045 elf32-crx.c:937 -#: elf32-d10v.c:524 elf32-epiphany.c:581 elf32-fr30.c:606 elf32-frv.c:4061 -#: elf32-ft32.c:506 elf32-h8300.c:535 elf32-ip2k.c:1497 elf32-iq2000.c:705 -#: elf32-lm32.c:1124 elf32-m32c.c:636 elf32-m32r.c:3057 elf32-m68hc1x.c:1278 -#: elf32-mep.c:538 elf32-metag.c:2002 elf32-microblaze.c:1643 elf32-moxie.c:300 -#: elf32-msp430.c:1370 elf32-mt.c:410 elf32-nds32.c:6201 elf32-or1k.c:1771 -#: elf32-score.c:2750 elf32-score7.c:2554 elf32-spu.c:5095 elf32-tilepro.c:3518 -#: elf32-v850.c:2315 elf32-visium.c:693 elf32-xstormy16.c:943 elf64-mmix.c:1553 -#: elfxx-tilegx.c:3882 +#: elf-m10200.c:446 elf-m10300.c:2166 elf32-avr.c:1520 elf32-bfin.c:3138 +#: elf32-cr16.c:1476 elf32-cris.c:2045 elf32-crx.c:932 elf32-d10v.c:522 +#: elf32-epiphany.c:577 elf32-fr30.c:606 elf32-frv.c:4060 elf32-ft32.c:506 +#: elf32-h8300.c:535 elf32-ip2k.c:1492 elf32-iq2000.c:703 elf32-lm32.c:1081 +#: elf32-m32c.c:636 elf32-m32r.c:2872 elf32-m68hc1x.c:1284 elf32-mep.c:538 +#: elf32-metag.c:1998 elf32-microblaze.c:1639 elf32-moxie.c:300 +#: elf32-msp430.c:1379 elf32-mt.c:410 elf32-nds32.c:6060 elf32-or1k.c:1829 +#: elf32-score.c:2751 elf32-score7.c:2555 elf32-spu.c:5095 elf32-tilepro.c:3392 +#: elf32-v850.c:2314 elf32-visium.c:692 elf32-xstormy16.c:941 elf64-bpf.c:525 +#: elf64-mmix.c:1553 elfxx-tilegx.c:3756 msgid "internal error: unknown error" msgstr "" @@ -887,41 +898,38 @@ msgid "%pB: unsupported transition from %s to %s" msgstr "" -#: elf-m10300.c:1198 +#: elf-m10300.c:1196 #, c-format msgid "%pB: %s' accessed both as normal and thread local symbol" msgstr "" -#: elf-m10300.c:2094 elf32-arm.c:13246 elf32-i386.c:3409 elf32-m32r.c:2539 -#: elf32-m68k.c:3899 elf32-s390.c:3211 elf32-sh.c:3800 elf32-tilepro.c:3409 -#: elf32-xtensa.c:2965 elf64-s390.c:3161 elf64-x86-64.c:3846 elfxx-sparc.c:3906 -#: elfxx-tilegx.c:3793 /work/sources/binutils/current/bfd/elfnn-aarch64.c:5261 -#: /work/sources/binutils/current/bfd/elfnn-aarch64.c:6807 -#: /work/sources/binutils/current/bfd/elfnn-riscv.c:2279 +#: elf-m10300.c:2092 elf32-arm.c:13400 elf32-i386.c:3403 elf32-m32r.c:2354 +#: elf32-m68k.c:3931 elf32-s390.c:3082 elf32-sh.c:3677 elf32-tilepro.c:3283 +#: elf32-xtensa.c:3023 elf64-s390.c:3031 elf64-x86-64.c:4062 elfxx-sparc.c:3795 +#: elfxx-tilegx.c:3667 elfnn-aarch64.c:5505 elfnn-aarch64.c:7102 #, c-format msgid "%pB(%pA+%#): unresolvable %s relocation against symbol `%s'" msgstr "" -#: elf-m10300.c:2156 +#: elf-m10300.c:2154 msgid "" "error: inappropriate relocation type for shared library (did you forget -" "fpic?)" msgstr "" -#: elf-m10300.c:2160 +#: elf-m10300.c:2158 #, c-format msgid "" "%pB: taking the address of protected function '%s' cannot be done when " "making a shared library" msgstr "" -#: elf-m10300.c:2163 +#: elf-m10300.c:2161 msgid "internal error: suspicious relocation type used in shared library" msgstr "" -#: elf-m10300.c:2649 elf32-avr.c:2492 elf32-frv.c:5641 elf64-ia64-vms.c:364 -#: elfxx-sparc.c:2795 reloc.c:8185 reloc16.c:155 elf32-ia64.c:361 -#: elf64-ia64.c:361 +#: elf-m10300.c:2647 elf32-avr.c:2489 elf32-frv.c:5620 elf64-ia64-vms.c:364 +#: elfxx-sparc.c:2683 reloc.c:8244 reloc16.c:155 elfnn-ia64.c:364 msgid "%P%F: --relax and -r may not be used together\n" msgstr "" @@ -963,7 +971,7 @@ msgid "Removed property %W to merge %pB (0x%v) and %pB (not found)\n" msgstr "" -#: elf-properties.c:316 elf-properties.c:396 +#: elf-properties.c:316 elf-properties.c:394 msgid "Removed property %W to merge %pB and %pB\n" msgstr "" @@ -971,421 +979,515 @@ msgid "Removed property %W to merge %pB and %pB (not found)\n" msgstr "" -#: elf-properties.c:339 +#: elf-properties.c:337 msgid "Updated property %W (0x%v) to merge %pB (0x%v) and %pB (0x%v)\n" msgstr "" -#: elf-properties.c:348 +#: elf-properties.c:346 msgid "Updated property %W (%v) to merge %pB (0x%v) and %pB (not found)\n" msgstr "" -#: elf-properties.c:390 +#: elf-properties.c:388 msgid "Removed property %W to merge %pB (not found) and %pB (0x%v)\n" msgstr "" #. Merge .note.gnu.property sections. -#: elf-properties.c:552 elf-properties.c:554 +#: elf-properties.c:550 elf-properties.c:552 msgid "\n" msgstr "" -#: elf-properties.c:553 +#: elf-properties.c:551 msgid "Merging program properties\n" msgstr "" #. PR 17512: file: f057ec89. -#: elf.c:345 +#: elf.c:336 #, c-format msgid "%pB: attempt to load strings from a non-string section (number %d)" msgstr "" -#: elf.c:360 +#: elf.c:361 #, c-format msgid "%pB: invalid string offset %u >= % for section `%s'" msgstr "" -#: elf.c:499 /work/sources/binutils/current/bfd/elfnn-aarch64.c:7891 +#: elf.c:513 elfnn-aarch64.c:8096 #, c-format msgid "%pB symbol number %lu references nonexistent SHT_SYMTAB_SHNDX section" msgstr "" -#: elf.c:664 -#, c-format -msgid "%pB: corrupt size field in group section header: %#" -msgstr "" - -#: elf.c:680 +#: elf.c:675 #, c-format msgid "%pB: invalid size field in group section header: %#" msgstr "" -#: elf.c:728 +#: elf.c:720 #, c-format msgid "%pB: invalid entry in SHT_GROUP section [%u]" msgstr "" -#: elf.c:747 +#: elf.c:739 #, c-format msgid "%pB: no valid group sections found" msgstr "" #. See PR 21957 for a reproducer. -#: elf.c:776 +#: elf.c:768 #, c-format msgid "%pB: group section '%pA' has no contents" msgstr "" -#: elf.c:837 +#: elf.c:829 #, c-format msgid "%pB: no group info for section '%pA'" msgstr "" -#: elf.c:868 elf.c:3886 elflink.c:11403 +#: elf.c:859 elf.c:3955 #, c-format msgid "%pB: warning: sh_link not set for section `%pA'" msgstr "" -#: elf.c:888 +#: elf.c:879 #, c-format msgid "%pB: sh_link [%d] in section `%pA' is incorrect" msgstr "" -#: elf.c:901 +#: elf.c:892 #, c-format msgid "%pB: SHT_GROUP section [index %d] has no SHF_GROUP sections" msgstr "" -#: elf.c:922 +#: elf.c:913 #, c-format msgid "%pB: section group entry number %u is corrupt" msgstr "" -#: elf.c:945 +#: elf.c:936 #, c-format msgid "%pB: unknown type [%#x] section `%s' in group [%pA]" msgstr "" -#: elf.c:1408 +#: elf.c:1438 #, c-format msgid "%pB: invalid sh_link field (%d) in section number %d" msgstr "" -#: elf.c:1424 +#: elf.c:1454 #, c-format msgid "%pB: failed to find link section for section %d" msgstr "" -#: elf.c:1451 +#: elf.c:1481 #, c-format msgid "%pB: failed to find info section for section %d" msgstr "" -#: elf.c:1623 +#: elf.c:1653 #, c-format msgid "" "\n" "Program Header:\n" msgstr "" -#: elf.c:1665 +#: elf.c:1695 #, c-format msgid "" "\n" "Dynamic Section:\n" msgstr "" -#: elf.c:1806 +#: elf.c:1836 #, c-format msgid "" "\n" "Version definitions:\n" msgstr "" -#: elf.c:1831 +#: elf.c:1861 #, c-format msgid "" "\n" "Version References:\n" msgstr "" -#: elf.c:1836 +#: elf.c:1866 #, c-format msgid " required from %s:\n" msgstr "" -#: elf.c:2037 +#: elf.c:2082 #, c-format msgid "%pB: warning: loop in section dependencies detected" msgstr "" -#: elf.c:2145 +#: elf.c:2190 #, c-format msgid "" "%pB: warning: multiple symbol tables detected - ignoring the table in " "section %u" msgstr "" -#: elf.c:2229 +#: elf.c:2274 #, c-format msgid "" "%pB: warning: multiple dynamic symbol tables detected - ignoring the table " "in section %u" msgstr "" -#: elf.c:2342 +#: elf.c:2387 #, c-format msgid "%pB: invalid link %u for reloc section %s (index %u)" msgstr "" -#: elf.c:2504 elf.c:2519 elf.c:2530 elf.c:2543 +#: elf.c:2478 +#, c-format +msgid "" +"%pB: warning: secondary relocation section '%s' for section %pA found - " +"ignoring" +msgstr "" + +#: elf.c:2562 elf.c:2577 elf.c:2588 elf.c:2601 #, c-format msgid "%pB: unknown type [%#x] section `%s'" msgstr "" -#: elf.c:3248 +#: elf.c:3308 #, c-format msgid "%pB: error: alignment power %d of section `%pA' is too big" msgstr "" -#: elf.c:3278 +#: elf.c:3341 #, c-format msgid "warning: section `%pA' type changed to PROGBITS" msgstr "" -#: elf.c:3754 +#: elf.c:3824 #, c-format msgid "%pB: too many sections: %u" msgstr "" -#: elf.c:3839 +#: elf.c:3909 #, c-format msgid "" "%pB: sh_link of section `%pA' points to discarded section `%pA' of `%pB'" msgstr "" -#: elf.c:3864 +#: elf.c:3934 #, c-format msgid "%pB: sh_link of section `%pA' points to removed section `%pA' of `%pB'" msgstr "" -#: elf.c:4430 +#: elf.c:4495 #, c-format -msgid "%pB: GNU_MBIN section `%pA' has invalid sh_info field: %d" +msgid "%pB: GNU_MBIND section `%pA' has invalid sh_info field: %d" msgstr "" -#: elf.c:5013 +#: elf.c:5086 #, c-format msgid "%pB: TLS sections are not adjacent:" msgstr "" -#: elf.c:5020 +#: elf.c:5093 #, c-format msgid "\t TLS: %pA" msgstr "" -#: elf.c:5024 +#: elf.c:5097 #, c-format msgid "\tnon-TLS: %pA" msgstr "" -#: elf.c:5538 +#: elf.c:5687 #, c-format msgid "" "%pB: The first section in the PT_DYNAMIC segment is not the .dynamic section" msgstr "" -#: elf.c:5566 +#: elf.c:5713 #, c-format msgid "%pB: not enough room for program headers, try linking with -N" msgstr "" -#: elf.c:5654 +#: elf.c:5830 #, c-format msgid "%pB: section %pA lma %# adjusted to %#" msgstr "" -#: elf.c:5791 +#. The fix for this error is usually to edit the linker script being +#. used and set up the program headers manually. Either that or +#. leave room for the headers at the start of the SECTIONS. +#: elf.c:5967 +#, c-format +msgid "%pB: error: PHDR segment not covered by LOAD segment" +msgstr "" + +#: elf.c:6007 #, c-format msgid "%pB: section `%pA' can't be allocated in segment %d" msgstr "" -#: elf.c:5839 +#: elf.c:6139 #, c-format msgid "%pB: warning: allocated section `%s' not in segment" msgstr "" -#: elf.c:6072 +#: elf.c:6300 #, c-format msgid "" "%pB: error: non-load segment %d includes file header and/or program header" msgstr "" -#. The fix for this error is usually to edit the linker script being -#. used and set up the program headers manually. Either that or -#. leave room for the headers at the start of the SECTIONS. -#: elf.c:6249 -#, c-format -msgid "%pB: error: PHDR segment not covered by LOAD segment" -msgstr "" - -#: elf.c:6606 +#: elf.c:6804 #, c-format msgid "%pB: symbol `%s' required but not present" msgstr "" -#: elf.c:6949 +#: elf.c:7147 #, c-format msgid "" "%pB: warning: empty loadable segment detected at vaddr=%#, is this " "intentional?" msgstr "" -#: elf.c:7574 +#: elf.c:7773 #, c-format msgid "%pB: warning: segment alignment of %# is too large" msgstr "" -#: elf.c:8073 +#: elf.c:8286 +#, c-format +msgid "" +"%pB: Unable to handle section index %x in ELF symbol. Using ABS instead." +msgstr "" + +#: elf.c:8316 #, c-format msgid "" "unable to find equivalent output section for symbol '%s' from section '%s'" msgstr "" -#: elf.c:8421 +#: elf.c:8703 #, c-format msgid "%pB: .gnu.version_r invalid entry" msgstr "" -#: elf.c:8548 +#: elf.c:8836 #, c-format msgid "%pB: .gnu.version_d invalid entry" msgstr "" -#: elf32-arc.c:440 elf32-frv.c:6630 elf32-iq2000.c:870 elf32-m32c.c:914 -#: elf32-mt.c:562 elf32-rl78.c:1260 elf32-rx.c:3199 elf32-visium.c:841 -#: elf64-ppc.c:4950 +#: elf.c:9293 +#, c-format +msgid "" +"%pB:%pA: error: attempting to write into an unallocated compressed section" +msgstr "" + +#: elf.c:9302 +#, c-format +msgid "%pB:%pA: error: attempting to write over the end of the section" +msgstr "" + +#: elf.c:9313 +#, c-format +msgid "%pB:%pA: error: attempting to write section into an empty buffer" +msgstr "" + +#: elf.c:12430 +msgid "GNU_MBIND section is unsupported" +msgstr "" + +#: elf.c:12432 +msgid "symbol type STT_GNU_IFUNC is unsupported" +msgstr "" + +#: elf.c:12434 +msgid "symbol binding STB_GNU_UNIQUE is unsupported" +msgstr "" + +#: elf.c:12618 elf64-sparc.c:123 elfcode.h:1482 +#, c-format +msgid "%pB(%pA): relocation %d has invalid symbol index %ld" +msgstr "" + +#: elf.c:12692 +#, c-format +msgid "" +"%pB(%pA): link section cannot be set because the output file does not have a " +"symbol table" +msgstr "" + +#: elf.c:12704 +#, c-format +msgid "%pB(%pA): info section index is invalid" +msgstr "" + +#: elf.c:12718 +#, c-format +msgid "" +"%pB(%pA): info section index cannot be set because the section is not in the " +"output" +msgstr "" + +#: elf.c:12784 +#, c-format +msgid "%pB(%pA): error: secondary reloc section processed twice" +msgstr "" + +#: elf.c:12796 +#, c-format +msgid "%pB(%pA): error: secondary reloc section is empty!" +msgstr "" + +#: elf.c:12819 +#, c-format +msgid "%pB(%pA): error: internal relocs missing for secondary reloc section" +msgstr "" + +#: elf.c:12838 +#, c-format +msgid "%pB(%pA): error: reloc table entry %u is empty" +msgstr "" + +#: elf.c:12863 +#, c-format +msgid "%pB(%pA): error: secondary reloc %u references a missing symbol" +msgstr "" + +#: elf.c:12880 +#, c-format +msgid "%pB(%pA): error: secondary reloc %u references a deleted symbol" +msgstr "" + +#: elf.c:12893 +#, c-format +msgid "%pB(%pA): error: secondary reloc %u is of an unknown type" +msgstr "" + +#: elf32-arc.c:455 elf32-frv.c:6611 elf32-iq2000.c:868 elf32-m32c.c:914 +#: elf32-mt.c:562 elf32-rl78.c:1260 elf32-rx.c:3205 elf32-visium.c:844 +#: elf64-ppc.c:5291 #, c-format msgid "private flags = 0x%lx:" msgstr "" -#: elf32-arc.c:627 +#: elf32-arc.c:642 #, c-format msgid "warning: %pB: conflicting platform configuration %s with %s" msgstr "" -#: elf32-arc.c:646 +#: elf32-arc.c:661 #, c-format msgid "error: %pB: unable to merge CPU base attributes %s with %s" msgstr "" -#: elf32-arc.c:683 +#: elf32-arc.c:698 #, c-format msgid "error: %pB: unable to merge ISA extension attributes %s" msgstr "" -#: elf32-arc.c:707 +#: elf32-arc.c:722 #, c-format msgid "error: %pB: conflicting ISA extension attributes %s with %s" msgstr "" -#: elf32-arc.c:747 +#: elf32-arc.c:762 #, c-format msgid "error: %pB: cannot mix rf16 with full register set %pB" msgstr "" -#: elf32-arc.c:775 +#: elf32-arc.c:790 #, c-format msgid "error: %pB: conflicting attributes %s: %s with %s" msgstr "" -#: elf32-arc.c:802 +#: elf32-arc.c:817 #, c-format msgid "error: %pB: conflicting attributes %s" msgstr "" -#: elf32-arc.c:907 +#: elf32-arc.c:922 #, c-format msgid "" "error: attempting to link %pB with a binary %pB of different architecture" msgstr "" -#: elf32-arc.c:923 elf32-iq2000.c:846 elf32-m32c.c:889 elf32-m68hc1x.c:1385 -#: elf32-ppc.c:3865 elf64-sparc.c:711 elfxx-mips.c:15354 +#: elf32-arc.c:938 elf32-iq2000.c:844 elf32-m32c.c:889 elf32-m68hc1x.c:1391 +#: elf32-ppc.c:3867 elf64-sparc.c:722 elfxx-mips.c:15513 #, c-format msgid "%pB: uses different e_flags (%#x) fields than previous modules (%#x)" msgstr "" -#: elf32-arc.c:1012 +#: elf32-arc.c:1027 msgid "error: the ARC4 architecture is no longer supported" msgstr "" -#: elf32-arc.c:1018 +#: elf32-arc.c:1033 msgid "warning: unset or old architecture flags; use default machine" msgstr "" -#: elf32-arc.c:1151 +#: elf32-arc.c:1159 #, c-format msgid "" "%pB(%pA+%#): CMEM relocation to `%s' is invalid, 16 MSB should be " "%#x (value is %#)" msgstr "" -#: elf32-arc.c:1162 +#: elf32-arc.c:1170 #, c-format msgid "" "%pB(%pA+%#): CMEM relocation to `%s+%#' is invalid, 16 MSB " "should be %#x (value is %#)" msgstr "" -#: elf32-arc.c:1876 +#: elf32-arc.c:1885 msgid "GOT and PLT relocations cannot be fixed with a non dynamic linker" msgstr "" -#: elf32-arc.c:1900 elf32-rl78.c:1098 elf32-rx.c:1470 +#: elf32-arc.c:1909 elf32-rl78.c:1098 elf32-rx.c:1475 #, c-format msgid "" "%pB(%pA): warning: unaligned access to symbol '%s' in the small data area" msgstr "" -#: elf32-arc.c:1905 elf32-rl78.c:1103 elf32-rx.c:1475 +#: elf32-arc.c:1914 elf32-rl78.c:1103 elf32-rx.c:1480 #, c-format msgid "%pB(%pA): internal error: out of range error" msgstr "" -#: elf32-arc.c:1910 elf32-rl78.c:1108 elf32-rx.c:1480 +#: elf32-arc.c:1919 elf32-rl78.c:1108 elf32-rx.c:1485 #, c-format msgid "%pB(%pA): internal error: unsupported relocation error" msgstr "" -#: elf32-arc.c:1915 elf32-rl78.c:1113 elf32-rx.c:1485 +#: elf32-arc.c:1924 elf32-rl78.c:1113 elf32-rx.c:1490 #, c-format msgid "%pB(%pA): internal error: dangerous relocation" msgstr "" -#: elf32-arc.c:1920 elf32-rl78.c:1118 elf32-rx.c:1490 +#: elf32-arc.c:1929 elf32-rl78.c:1118 elf32-rx.c:1495 #, c-format msgid "%pB(%pA): internal error: unknown error" msgstr "" -#: elf32-arc.c:2013 elf32-arc.c:2081 elf32-arm.c:15323 elf32-metag.c:2257 -#: /work/sources/binutils/current/bfd/elfnn-aarch64.c:7462 -#: /work/sources/binutils/current/bfd/elfnn-riscv.c:497 +#: elf32-arc.c:2022 elf32-arc.c:2090 elf32-arm.c:15513 elf32-metag.c:2253 +#: elf32-nds32.c:5498 elfnn-aarch64.c:7739 elfnn-riscv.c:483 #, c-format msgid "" "%pB: relocation %s against `%s' can not be used when making a shared object; " "recompile with -fPIC" msgstr "" -#: elf32-arc.c:2949 +#: elf32-arc.c:2909 #, c-format msgid "%pB: unknown mandatory ARC object attribute %d" msgstr "" -#: elf32-arc.c:2957 +#: elf32-arc.c:2917 #, c-format msgid "warning: %pB: unknown ARC object attribute %d" msgstr "" -#: elf32-arm.c:4304 elf32-arm.c:4338 elf32-arm.c:4357 elf32-arm.c:4409 +#: elf32-arm.c:4307 elf32-arm.c:4341 elf32-arm.c:4360 elf32-arm.c:4412 #, c-format msgid "" "%pB(%pA): warning: long branch veneers used in section with SHF_ARM_PURECODE " @@ -1393,141 +1495,156 @@ "movw instruction" msgstr "" -#: elf32-arm.c:4369 elf32-arm.c:4423 elf32-arm.c:9093 elf32-arm.c:9183 +#: elf32-arm.c:4372 elf32-arm.c:4426 elf32-arm.c:9116 elf32-arm.c:9206 #, c-format msgid "" "%pB(%s): warning: interworking not enabled; first occurrence: %pB: %s call " "to %s" msgstr "" -#: elf32-arm.c:4697 +#: elf32-arm.c:4552 +#, c-format +msgid "" +"ERROR: CMSE stub (%s section) too far (%#) from destination " +"(%#)" +msgstr "" + +#: elf32-arm.c:4721 #, c-format msgid "no address assigned to the veneers output section %s" msgstr "" -#: elf32-arm.c:4772 elf32-arm.c:6909 elf32-csky.c:3287 elf32-hppa.c:579 -#: elf32-m68hc1x.c:165 elf32-metag.c:1186 elf32-nios2.c:2208 elf64-ppc.c:3501 -#: /work/sources/binutils/current/bfd/elfnn-aarch64.c:3098 +#: elf32-arm.c:4796 elf32-arm.c:6943 elf32-csky.c:3172 elf32-hppa.c:584 +#: elf32-m68hc1x.c:165 elf32-metag.c:1182 elf32-nios2.c:2204 elf64-ppc.c:3775 +#: elfnn-aarch64.c:3190 #, c-format msgid "%pB: cannot create stub entry %s" msgstr "" -#: elf32-arm.c:5957 +#: elf32-arm.c:5017 elf32-csky.c:3514 elf32-hppa.c:734 elf32-m68hc11.c:422 +#: elf32-m68hc12.c:542 elf32-metag.c:3347 elf32-nios2.c:2497 elf64-ppc.c:11315 +#: elfnn-aarch64.c:3259 +msgid "" +"%F%P: Could not assign '%pA' to an output section. Retry without --enable-" +"non-contiguous-regions.\n" +msgstr "" + +#: elf32-arm.c:5987 #, c-format msgid "%pB: special symbol `%s' only allowed for ARMv8-M architecture or later" msgstr "" -#: elf32-arm.c:5966 +#: elf32-arm.c:5996 #, c-format msgid "" "%pB: invalid special symbol `%s'; it must be a global or weak function symbol" msgstr "" -#: elf32-arm.c:6005 +#: elf32-arm.c:6035 #, c-format msgid "" "%pB: invalid standard symbol `%s'; it must be a global or weak function " "symbol" msgstr "" -#: elf32-arm.c:6011 +#: elf32-arm.c:6041 #, c-format msgid "%pB: absent standard symbol `%s'" msgstr "" -#: elf32-arm.c:6023 +#: elf32-arm.c:6053 #, c-format msgid "%pB: `%s' and its special symbol are in different sections" msgstr "" -#: elf32-arm.c:6035 +#: elf32-arm.c:6065 #, c-format msgid "%pB: entry function `%s' not output" msgstr "" -#: elf32-arm.c:6042 +#: elf32-arm.c:6072 #, c-format msgid "%pB: entry function `%s' is empty" msgstr "" -#: elf32-arm.c:6171 +#: elf32-arm.c:6201 #, c-format msgid "%pB: --in-implib only supported for Secure Gateway import libraries" msgstr "" -#: elf32-arm.c:6217 +#: elf32-arm.c:6250 #, c-format msgid "" "%pB: invalid import library entry: `%s'; symbol should be absolute, global " "and refer to Thumb functions" msgstr "" -#: elf32-arm.c:6239 +#: elf32-arm.c:6272 #, c-format msgid "entry function `%s' disappeared from secure code" msgstr "" -#: elf32-arm.c:6263 +#: elf32-arm.c:6296 #, c-format msgid "`%s' refers to a non entry function" msgstr "" -#: elf32-arm.c:6278 +#: elf32-arm.c:6311 #, c-format msgid "%pB: visibility of symbol `%s' has changed" msgstr "" -#: elf32-arm.c:6287 +#: elf32-arm.c:6320 #, c-format msgid "%pB: incorrect size for symbol `%s'" msgstr "" -#: elf32-arm.c:6306 +#: elf32-arm.c:6339 #, c-format msgid "offset of veneer for entry function `%s' not a multiple of its size" msgstr "" -#: elf32-arm.c:6326 +#: elf32-arm.c:6359 msgid "" "new entry function(s) introduced but no output import library specified:" msgstr "" -#: elf32-arm.c:6334 +#: elf32-arm.c:6367 #, c-format msgid "start address of `%s' is different from previous link" msgstr "" -#: elf32-arm.c:7042 elf32-arm.c:7078 +#: elf32-arm.c:7076 elf32-arm.c:7111 #, c-format msgid "unable to find %s glue '%s' for '%s'" msgstr "" -#: elf32-arm.c:7793 +#: elf32-arm.c:7822 #, c-format msgid "%pB: BE8 images only valid in big-endian mode" msgstr "" #. Give a warning, but do as the user requests anyway. -#: elf32-arm.c:8024 +#: elf32-arm.c:8049 #, c-format msgid "" "%pB: warning: selected VFP11 erratum workaround is not necessary for target " "architecture" msgstr "" -#: elf32-arm.c:8051 +#: elf32-arm.c:8076 #, c-format msgid "" "%pB: warning: selected STM32L4XX erratum workaround is not necessary for " "target architecture" msgstr "" -#: elf32-arm.c:8588 elf32-arm.c:8608 elf32-arm.c:8674 elf32-arm.c:8693 +#: elf32-arm.c:8612 elf32-arm.c:8632 elf32-arm.c:8699 elf32-arm.c:8718 #, c-format msgid "%pB: unable to find %s veneer `%s'" msgstr "" -#: elf32-arm.c:8900 +#: elf32-arm.c:8925 #, c-format msgid "" "%pB(%pA+%#x): error: multiple load detected in non-last IT block " @@ -1535,202 +1652,199 @@ "it to generate only one instruction per IT block" msgstr "" -#: elf32-arm.c:9000 +#: elf32-arm.c:9023 #, c-format msgid "invalid TARGET2 relocation type '%s'" msgstr "" #. FIXME: We ought to be able to generate thumb-1 PLT #. instructions... -#: elf32-arm.c:9802 +#: elf32-arm.c:9825 #, c-format msgid "%pB: warning: thumb-1 mode PLT generation not currently supported" msgstr "" -#: elf32-arm.c:10106 elf32-arm.c:10148 +#: elf32-arm.c:10135 elf32-arm.c:10177 #, c-format msgid "%pB(%pA+%#): unexpected %s instruction '%#lx' in TLS trampoline" msgstr "" -#: elf32-arm.c:10492 +#: elf32-arm.c:10521 msgid "shared object" msgstr "" -#: elf32-arm.c:10495 +#: elf32-arm.c:10524 msgid "PIE executable" msgstr "" -#: elf32-arm.c:10498 +#: elf32-arm.c:10527 #, c-format msgid "" "%pB: relocation %s against external or undefined symbol `%s' can not be used " "when making a %s; recompile with -fPIC" msgstr "" -#: elf32-arm.c:10635 elf32-arm.c:11062 +#: elf32-arm.c:10664 elf32-arm.c:11091 #, c-format msgid "%pB: warning: %s BLX instruction targets %s function '%s'" msgstr "" -#: elf32-arm.c:11975 elf32-arm.c:12001 +#: elf32-arm.c:12003 elf32-arm.c:12029 #, c-format msgid "" "%pB(%pA+%#): unexpected %s instruction '%#lx' referenced by " "TLS_GOTDESC" msgstr "" -#: elf32-arm.c:12047 elf32-csky.c:4853 elf32-m68k.c:3703 elf32-metag.c:1919 -#: elf32-nios2.c:4366 +#: elf32-arm.c:12075 elf32-csky.c:4746 elf32-m68k.c:3735 elf32-metag.c:1915 +#: elf32-nios2.c:4385 #, c-format msgid "%pB(%pA+%#): %s relocation not permitted in shared object" msgstr "" -#: elf32-arm.c:12261 +#: elf32-arm.c:12289 #, c-format msgid "" "%pB(%pA+%#): only ADD or SUB instructions are allowed for ALU group " "relocations" msgstr "" -#: elf32-arm.c:12302 elf32-arm.c:12394 elf32-arm.c:12482 elf32-arm.c:12572 +#: elf32-arm.c:12330 elf32-arm.c:12422 elf32-arm.c:12510 elf32-arm.c:12600 #, c-format msgid "" "%pB(%pA+%#): overflow whilst splitting %# for group " "relocation %s" msgstr "" -#: elf32-arm.c:13078 elf32-sh.c:3689 +#: elf32-arm.c:13232 elf32-sh.c:3571 #, c-format msgid "%pB(%pA+%#): %s relocation against SEC_MERGE section" msgstr "" -#: elf32-arm.c:13191 elf32-m68k.c:3936 elf32-xtensa.c:2703 -#: /work/sources/binutils/current/bfd/elfnn-aarch64.c:6534 +#: elf32-arm.c:13345 elf32-m68k.c:3968 elf32-xtensa.c:2761 elfnn-aarch64.c:6829 #, c-format msgid "%pB(%pA+%#): %s used with TLS symbol %s" msgstr "" -#: elf32-arm.c:13193 elf32-m68k.c:3938 elf32-xtensa.c:2705 -#: /work/sources/binutils/current/bfd/elfnn-aarch64.c:6536 +#: elf32-arm.c:13347 elf32-m68k.c:3970 elf32-xtensa.c:2763 elfnn-aarch64.c:6831 #, c-format msgid "%pB(%pA+%#): %s used with non-TLS symbol %s" msgstr "" -#: elf32-arm.c:13276 elf32-tic6x.c:2708 -#: /work/sources/binutils/current/bfd/elfnn-aarch64.c:6871 +#: elf32-arm.c:13430 elf32-tic6x.c:2649 elfnn-aarch64.c:7166 msgid "out of range" msgstr "" -#: elf32-arm.c:13280 elf32-nios2.c:4500 elf32-pru.c:933 elf32-tic6x.c:2712 -#: /work/sources/binutils/current/bfd/elfnn-aarch64.c:6875 +#: elf32-arm.c:13434 elf32-nios2.c:4519 elf32-pru.c:936 elf32-tic6x.c:2653 +#: elfnn-aarch64.c:7170 msgid "unsupported relocation" msgstr "" -#: elf32-arm.c:13288 elf32-nios2.c:4510 elf32-pru.c:943 elf32-tic6x.c:2720 -#: /work/sources/binutils/current/bfd/elfnn-aarch64.c:6883 +#: elf32-arm.c:13442 elf32-nios2.c:4529 elf32-pru.c:946 elf32-tic6x.c:2661 +#: elfnn-aarch64.c:7178 msgid "unknown error" msgstr "" -#: elf32-arm.c:13764 +#: elf32-arm.c:13920 #, c-format msgid "" "warning: not setting interworking flag of %pB since it has already been " "specified as non-interworking" msgstr "" -#: elf32-arm.c:13768 +#: elf32-arm.c:13924 #, c-format msgid "warning: clearing the interworking flag of %pB due to outside request" msgstr "" -#: elf32-arm.c:13813 +#: elf32-arm.c:13969 #, c-format msgid "" "warning: clearing the interworking flag of %pB because non-interworking code " "in %pB has been linked with it" msgstr "" -#: elf32-arm.c:13900 +#: elf32-arm.c:14056 #, c-format msgid "%pB: unknown mandatory EABI object attribute %d" msgstr "" -#: elf32-arm.c:13908 +#: elf32-arm.c:14064 #, c-format msgid "warning: %pB: unknown EABI object attribute %d" msgstr "" -#: elf32-arm.c:14175 +#: elf32-arm.c:14364 #, c-format msgid "error: %pB: unknown CPU architecture" msgstr "" -#: elf32-arm.c:14213 elf32-nios2.c:2946 +#: elf32-arm.c:14402 elf32-nios2.c:2953 #, c-format msgid "error: %pB: conflicting CPU architectures %d/%d" msgstr "" -#: elf32-arm.c:14310 +#: elf32-arm.c:14499 #, c-format msgid "" "Error: %pB has both the current and legacy Tag_MPextension_use attributes" msgstr "" -#: elf32-arm.c:14339 +#: elf32-arm.c:14528 #, c-format msgid "error: %pB uses VFP register arguments, %pB does not" msgstr "" -#: elf32-arm.c:14497 +#: elf32-arm.c:14687 #, c-format msgid "error: %pB: unable to merge virtualization attributes with %pB" msgstr "" -#: elf32-arm.c:14523 +#: elf32-arm.c:14713 #, c-format msgid "error: %pB: conflicting architecture profiles %c/%c" msgstr "" -#: elf32-arm.c:14662 +#: elf32-arm.c:14852 #, c-format msgid "warning: %pB: conflicting platform configuration" msgstr "" -#: elf32-arm.c:14671 +#: elf32-arm.c:14861 #, c-format msgid "error: %pB: conflicting use of R9" msgstr "" -#: elf32-arm.c:14683 +#: elf32-arm.c:14873 #, c-format msgid "error: %pB: SB relative addressing conflicts with use of R9" msgstr "" -#: elf32-arm.c:14696 +#: elf32-arm.c:14886 #, c-format msgid "" "warning: %pB uses %u-byte wchar_t yet the output is to use %u-byte wchar_t; " "use of wchar_t values across objects may fail" msgstr "" -#: elf32-arm.c:14727 +#: elf32-arm.c:14917 #, c-format msgid "" "warning: %pB uses %s enums yet the output is to use %s enums; use of enum " "values across objects may fail" msgstr "" -#: elf32-arm.c:14739 +#: elf32-arm.c:14929 #, c-format msgid "error: %pB uses iWMMXt register arguments, %pB does not" msgstr "" -#: elf32-arm.c:14756 +#: elf32-arm.c:14946 #, c-format msgid "error: fp16 format mismatch between %pB and %pB" msgstr "" -#: elf32-arm.c:14792 +#: elf32-arm.c:14982 #, c-format msgid "%pB has both the current and legacy Tag_MPextension_use attributes" msgstr "" @@ -1740,355 +1854,342 @@ #. Ignore init flag - it may not be set, despite the flags field containing valid data. #. Ignore init flag - it may not be set, despite the flags field #. containing valid data. -#: elf32-arm.c:14879 elf32-bfin.c:4740 elf32-cris.c:3908 elf32-m68hc1x.c:1410 -#: elf32-m68k.c:1201 elf32-score.c:4000 elf32-score7.c:3805 elf32-vax.c:537 -#: elf32-xgate.c:494 elfxx-mips.c:16037 -#: /work/sources/binutils/current/bfd/elfnn-aarch64.c:7037 +#: elf32-arm.c:15069 elf32-bfin.c:4719 elf32-cris.c:3861 elf32-m68hc1x.c:1416 +#: elf32-m68k.c:1267 elf32-score.c:4000 elf32-score7.c:3805 elf32-vax.c:537 +#: elf32-xgate.c:494 elfxx-mips.c:16199 elfnn-aarch64.c:7332 #, c-format msgid "private flags = %lx:" msgstr "" -#: elf32-arm.c:14888 +#: elf32-arm.c:15078 #, c-format msgid " [interworking enabled]" msgstr "" -#: elf32-arm.c:14896 +#: elf32-arm.c:15086 #, c-format msgid " [VFP float format]" msgstr "" -#: elf32-arm.c:14898 +#: elf32-arm.c:15088 #, c-format msgid " [Maverick float format]" msgstr "" -#: elf32-arm.c:14900 +#: elf32-arm.c:15090 #, c-format msgid " [FPA float format]" msgstr "" -#: elf32-arm.c:14903 +#: elf32-arm.c:15093 #, c-format msgid " [floats passed in float registers]" msgstr "" -#: elf32-arm.c:14906 elf32-arm.c:14992 +#: elf32-arm.c:15096 elf32-arm.c:15182 #, c-format msgid " [position independent]" msgstr "" -#: elf32-arm.c:14909 +#: elf32-arm.c:15099 #, c-format msgid " [new ABI]" msgstr "" -#: elf32-arm.c:14912 +#: elf32-arm.c:15102 #, c-format msgid " [old ABI]" msgstr "" -#: elf32-arm.c:14915 +#: elf32-arm.c:15105 #, c-format msgid " [software FP]" msgstr "" -#: elf32-arm.c:14924 +#: elf32-arm.c:15114 #, c-format msgid " [Version1 EABI]" msgstr "" -#: elf32-arm.c:14927 elf32-arm.c:14938 +#: elf32-arm.c:15117 elf32-arm.c:15128 #, c-format msgid " [sorted symbol table]" msgstr "" -#: elf32-arm.c:14929 elf32-arm.c:14940 +#: elf32-arm.c:15119 elf32-arm.c:15130 #, c-format msgid " [unsorted symbol table]" msgstr "" -#: elf32-arm.c:14935 +#: elf32-arm.c:15125 #, c-format msgid " [Version2 EABI]" msgstr "" -#: elf32-arm.c:14943 +#: elf32-arm.c:15133 #, c-format msgid " [dynamic symbols use segment index]" msgstr "" -#: elf32-arm.c:14946 +#: elf32-arm.c:15136 #, c-format msgid " [mapping symbols precede others]" msgstr "" -#: elf32-arm.c:14953 +#: elf32-arm.c:15143 #, c-format msgid " [Version3 EABI]" msgstr "" -#: elf32-arm.c:14957 +#: elf32-arm.c:15147 #, c-format msgid " [Version4 EABI]" msgstr "" -#: elf32-arm.c:14961 +#: elf32-arm.c:15151 #, c-format msgid " [Version5 EABI]" msgstr "" -#: elf32-arm.c:14964 +#: elf32-arm.c:15154 #, c-format msgid " [soft-float ABI]" msgstr "" -#: elf32-arm.c:14967 +#: elf32-arm.c:15157 #, c-format msgid " [hard-float ABI]" msgstr "" -#: elf32-arm.c:14973 +#: elf32-arm.c:15163 #, c-format msgid " [BE8]" msgstr "" -#: elf32-arm.c:14976 +#: elf32-arm.c:15166 #, c-format msgid " [LE8]" msgstr "" -#: elf32-arm.c:14982 +#: elf32-arm.c:15172 #, c-format msgid " " msgstr "" -#: elf32-arm.c:14989 +#: elf32-arm.c:15179 #, c-format msgid " [relocatable executable]" msgstr "" -#: elf32-arm.c:14995 +#: elf32-arm.c:15185 #, c-format msgid " [FDPIC ABI supplement]" msgstr "" -#: elf32-arm.c:15000 /work/sources/binutils/current/bfd/elfnn-aarch64.c:7040 +#: elf32-arm.c:15190 elfnn-aarch64.c:7335 #, c-format msgid "" msgstr "" -#: elf32-arm.c:15117 elf32-i386.c:1529 elf32-s390.c:960 elf32-tic6x.c:2783 -#: elf32-tilepro.c:1479 elf32-xtensa.c:1029 elf64-s390.c:882 -#: elf64-x86-64.c:1865 elfxx-sparc.c:1422 elfxx-tilegx.c:1700 -#: /work/sources/binutils/current/bfd/elfnn-aarch64.c:7329 -#: /work/sources/binutils/current/bfd/elfnn-riscv.c:539 +#: elf32-arm.c:15307 elf32-i386.c:1524 elf32-s390.c:925 elf32-tic6x.c:2724 +#: elf32-tilepro.c:1443 elf32-xtensa.c:1093 elf64-s390.c:847 +#: elf64-x86-64.c:1902 elfxx-sparc.c:1386 elfxx-tilegx.c:1664 +#: elfnn-aarch64.c:7606 elfnn-riscv.c:525 #, c-format msgid "%pB: bad symbol index: %d" msgstr "" -#: elf32-arm.c:15508 +#: elf32-arm.c:15696 #, c-format msgid "" "FDPIC does not yet support %s relocation to become dynamic for executable" msgstr "" -#: elf32-arm.c:16558 elf32-csky.c:1931 elf32-hppa.c:2090 elf32-lm32.c:1998 -#: elf32-m32r.c:2110 elf32-metag.c:2797 elf32-nds32.c:4330 elf32-or1k.c:2858 -#: elf32-ppc.c:5469 elf32-s390.c:1854 elf32-sh.c:2975 elf32-tic6x.c:3252 -#: elf32-tilepro.c:2245 elf64-ppc.c:9023 elf64-s390.c:1791 elfxx-sparc.c:2435 -#: elfxx-tilegx.c:2491 elfxx-x86.c:571 -#: /work/sources/binutils/current/bfd/elfnn-aarch64.c:8677 -#: /work/sources/binutils/current/bfd/elfnn-riscv.c:1142 -#, c-format -msgid "%pB: dynamic relocation against `%pT' in read-only section `%pA'\n" -msgstr "" - -#: elf32-arm.c:16854 +#: elf32-arm.c:16939 #, c-format msgid "errors encountered processing file %pB" msgstr "" -#: elf32-arm.c:17301 elflink.c:12556 elflink.c:12603 +#: elf32-arm.c:17326 elflink.c:12818 elflink.c:12865 #, c-format msgid "could not find section %s" msgstr "" -#: elf32-arm.c:18512 +#: elf32-arm.c:18550 #, c-format msgid "%pB: error: Cortex-A8 erratum stub is allocated in unsafe location" msgstr "" #. There's not much we can do apart from complain if this #. happens. -#: elf32-arm.c:18539 +#: elf32-arm.c:18577 #, c-format msgid "%pB: error: Cortex-A8 erratum stub out of range (input file too large)" msgstr "" -#: elf32-arm.c:19366 elf32-arm.c:19388 +#: elf32-arm.c:19404 elf32-arm.c:19426 #, c-format msgid "%pB: error: VFP11 veneer out of range" msgstr "" -#: elf32-arm.c:19439 +#: elf32-arm.c:19477 #, c-format msgid "" "%pB(%#): error: cannot create STM32L4XX veneer; jump out of range by " "% bytes; cannot encode branch instruction" msgstr "" -#: elf32-arm.c:19478 +#: elf32-arm.c:19516 #, c-format msgid "%pB: error: cannot create STM32L4XX veneer" msgstr "" -#: elf32-arm.c:20567 +#: elf32-arm.c:20600 #, c-format msgid "error: %pB is already in final BE8 format" msgstr "" -#: elf32-arm.c:20643 +#: elf32-arm.c:20676 #, c-format msgid "" "error: source object %pB has EABI version %d, but target %pB has EABI " "version %d" msgstr "" -#: elf32-arm.c:20658 +#: elf32-arm.c:20691 #, c-format msgid "error: %pB is compiled for APCS-%d, whereas target %pB uses APCS-%d" msgstr "" -#: elf32-arm.c:20668 +#: elf32-arm.c:20701 #, c-format msgid "" "error: %pB passes floats in float registers, whereas %pB passes them in " "integer registers" msgstr "" -#: elf32-arm.c:20672 +#: elf32-arm.c:20705 #, c-format msgid "" "error: %pB passes floats in integer registers, whereas %pB passes them in " "float registers" msgstr "" -#: elf32-arm.c:20682 elf32-arm.c:20686 elf32-arm.c:20696 +#: elf32-arm.c:20715 elf32-arm.c:20719 elf32-arm.c:20729 #, c-format msgid "error: %pB uses %s instructions, whereas %pB does not" msgstr "" -#: elf32-arm.c:20700 +#: elf32-arm.c:20733 #, c-format msgid "error: %pB does not use %s instructions, whereas %pB does" msgstr "" -#: elf32-arm.c:20719 +#: elf32-arm.c:20752 #, c-format msgid "error: %pB uses software FP, whereas %pB uses hardware FP" msgstr "" -#: elf32-arm.c:20723 +#: elf32-arm.c:20756 #, c-format msgid "error: %pB uses hardware FP, whereas %pB uses software FP" msgstr "" -#: elf32-arm.c:20737 +#: elf32-arm.c:20770 #, c-format msgid "warning: %pB supports interworking, whereas %pB does not" msgstr "" -#: elf32-arm.c:20743 +#: elf32-arm.c:20776 #, c-format msgid "warning: %pB does not support interworking, whereas %pB does" msgstr "" -#: elf32-avr.c:1518 elf32-bfin.c:3135 elf32-cris.c:2041 elf32-epiphany.c:577 -#: elf32-fr30.c:602 elf32-frv.c:4057 elf32-ft32.c:502 elf32-ip2k.c:1493 -#: elf32-iq2000.c:701 elf32-m32c.c:632 elf32-mep.c:534 elf32-metag.c:1998 -#: elf32-moxie.c:296 elf32-msp430.c:1366 elf32-mt.c:406 elf32-or1k.c:1767 -#: elf32-tilepro.c:3514 elf32-v850.c:2299 elf32-visium.c:689 -#: elf32-xstormy16.c:939 elf64-mmix.c:1549 elfxx-tilegx.c:3878 +#: elf32-avr.c:1516 elf32-bfin.c:3134 elf32-cris.c:2041 elf32-epiphany.c:573 +#: elf32-fr30.c:602 elf32-frv.c:4056 elf32-ft32.c:502 elf32-ip2k.c:1488 +#: elf32-iq2000.c:699 elf32-m32c.c:632 elf32-mep.c:534 elf32-metag.c:1994 +#: elf32-moxie.c:296 elf32-msp430.c:1375 elf32-mt.c:406 elf32-or1k.c:1825 +#: elf32-tilepro.c:3388 elf32-v850.c:2298 elf32-visium.c:688 +#: elf32-xstormy16.c:937 elf64-bpf.c:521 elf64-mmix.c:1549 elfxx-tilegx.c:3752 msgid "internal error: dangerous relocation" msgstr "" -#: elf32-avr.c:3327 /work/sources/binutils/current/bfd/elfnn-aarch64.c:3126 +#: elf32-avr.c:3327 elfnn-aarch64.c:3221 #, c-format msgid "cannot create stub entry %s" msgstr "" -#: elf32-bfin.c:106 elf32-bfin.c:362 +#: elf32-bfin.c:107 elf32-bfin.c:363 msgid "relocation should be even number" msgstr "" -#: elf32-bfin.c:1585 +#: elf32-bfin.c:1584 #, c-format msgid "%pB(%pA+%#): unresolvable relocation against symbol `%s'" msgstr "" -#: elf32-bfin.c:1617 elf32-i386.c:3449 elf32-m68k.c:3976 elf32-s390.c:3269 -#: elf64-s390.c:3219 elf64-x86-64.c:3896 +#: elf32-bfin.c:1616 elf32-i386.c:3443 elf32-m68k.c:4008 elf32-s390.c:3140 +#: elf64-s390.c:3089 elf64-x86-64.c:4112 #, c-format msgid "%pB(%pA+%#): reloc against `%s': error %d" msgstr "" -#: elf32-bfin.c:2638 +#: elf32-bfin.c:2641 #, c-format msgid "" "%pB: relocation at `%pA+%#' references symbol `%s' with nonzero " "addend" msgstr "" -#: elf32-bfin.c:2655 +#: elf32-bfin.c:2658 msgid "relocation references symbol not defined in the module" msgstr "" -#: elf32-bfin.c:2752 +#: elf32-bfin.c:2755 msgid "R_BFIN_FUNCDESC references dynamic symbol with nonzero addend" msgstr "" -#: elf32-bfin.c:2793 elf32-bfin.c:2916 +#: elf32-bfin.c:2795 elf32-bfin.c:2916 msgid "cannot emit fixups in read-only section" msgstr "" -#: elf32-bfin.c:2824 elf32-bfin.c:2954 elf32-lm32.c:1049 elf32-sh.c:4511 +#: elf32-bfin.c:2825 elf32-bfin.c:2953 elf32-lm32.c:1006 elf32-sh.c:4389 msgid "cannot emit dynamic relocations in read-only section" msgstr "" -#: elf32-bfin.c:2874 +#: elf32-bfin.c:2875 msgid "R_BFIN_FUNCDESC_VALUE references dynamic symbol with nonzero addend" msgstr "" -#: elf32-bfin.c:3039 +#: elf32-bfin.c:3038 msgid "relocations between different segments are not supported" msgstr "" -#: elf32-bfin.c:3040 +#: elf32-bfin.c:3039 msgid "warning: relocation references a different segment" msgstr "" -#: elf32-bfin.c:4787 elf32-frv.c:6603 +#: elf32-bfin.c:4770 elf32-frv.c:6584 #, c-format msgid "%pB: cannot link non-fdpic object file into fdpic executable" msgstr "" -#: elf32-bfin.c:4791 elf32-frv.c:6607 +#: elf32-bfin.c:4774 elf32-frv.c:6588 #, c-format msgid "%pB: cannot link fdpic object file into non-fdpic executable" msgstr "" -#: elf32-bfin.c:4941 +#: elf32-bfin.c:4924 #, c-format msgid "*** check this relocation %s" msgstr "" -#: elf32-bfin.c:5057 +#: elf32-bfin.c:5040 msgid "" "the bfin target does not currently support the generation of copy relocations" msgstr "" -#: elf32-bfin.c:5351 elf32-cr16.c:2803 elf32-m68k.c:4390 +#: elf32-bfin.c:5334 elf32-cr16.c:2731 elf32-m68k.c:4422 msgid "unsupported relocation type" msgstr "" @@ -2108,18 +2209,18 @@ msgstr "" #: elf32-cris.c:1193 elf32-cris.c:1326 elf32-cris.c:1591 elf32-cris.c:1674 -#: elf32-cris.c:1827 elf32-tic6x.c:2619 +#: elf32-cris.c:1827 elf32-tic6x.c:2560 msgid "[whose name is lost]" msgstr "" -#: elf32-cris.c:1311 elf32-tic6x.c:2603 +#: elf32-cris.c:1311 elf32-tic6x.c:2544 #, c-format msgid "" "%pB, section %pA: relocation %s with non-zero addend % against local " "symbol" msgstr "" -#: elf32-cris.c:1320 elf32-cris.c:1668 elf32-cris.c:1821 elf32-tic6x.c:2612 +#: elf32-cris.c:1320 elf32-cris.c:1668 elf32-cris.c:1821 elf32-tic6x.c:2553 #, c-format msgid "" "%pB, section %pA: relocation %s with non-zero addend % against " @@ -2189,76 +2290,76 @@ "recompile with -fPIC" msgstr "" -#: elf32-cris.c:3747 +#: elf32-cris.c:3700 #, c-format msgid "" "%pB, section `%pA', to symbol `%s': relocation %s should not be used in a " "shared object; recompile with -fPIC" msgstr "" -#: elf32-cris.c:3860 +#: elf32-cris.c:3812 msgid "unexpected machine number" msgstr "" -#: elf32-cris.c:3911 +#: elf32-cris.c:3864 #, c-format msgid " [symbols have a _ prefix]" msgstr "" -#: elf32-cris.c:3914 +#: elf32-cris.c:3867 #, c-format msgid " [v10 and v32]" msgstr "" -#: elf32-cris.c:3917 +#: elf32-cris.c:3870 #, c-format msgid " [v32]" msgstr "" -#: elf32-cris.c:3961 +#: elf32-cris.c:3914 #, c-format msgid "" "%pB: uses _-prefixed symbols, but writing file with non-prefixed symbols" msgstr "" -#: elf32-cris.c:3962 +#: elf32-cris.c:3915 #, c-format msgid "" "%pB: uses non-prefixed symbols, but writing file with _-prefixed symbols" msgstr "" -#: elf32-cris.c:3981 +#: elf32-cris.c:3934 #, c-format msgid "%pB contains CRIS v32 code, incompatible with previous objects" msgstr "" -#: elf32-cris.c:3983 +#: elf32-cris.c:3936 #, c-format msgid "%pB contains non-CRIS-v32 code, incompatible with previous objects" msgstr "" -#: elf32-csky.c:2066 +#: elf32-csky.c:2022 msgid "GOT table size out of range" msgstr "" -#: elf32-csky.c:2917 +#: elf32-csky.c:2802 #, c-format msgid "warning: unrecognized arch eflag '%#lx'" msgstr "" -#: elf32-csky.c:2977 +#: elf32-csky.c:2862 #, c-format msgid "%pB: machine flag conflict with target" msgstr "" -#: elf32-csky.c:2990 +#: elf32-csky.c:2875 #, c-format msgid "" "warning: file %pB's arch flag ck%s conflicts with target ck%s, using ck%s" msgstr "" #. The r_type is error, not support it. -#: elf32-csky.c:4225 elf32-i386.c:351 +#: elf32-csky.c:4118 elf32-i386.c:350 #, c-format msgid "%pB: unsupported relocation type: %#x" msgstr "" @@ -2274,7 +2375,7 @@ msgstr "" #. Only if it's not an unresolved symbol. -#: elf32-epiphany.c:573 elf32-ip2k.c:1489 +#: elf32-epiphany.c:569 elf32-ip2k.c:1484 msgid "unsupported relocation between data/insn address spaces" msgstr "" @@ -2282,97 +2383,97 @@ msgid "relocation requires zero addend" msgstr "" -#: elf32-frv.c:2829 +#: elf32-frv.c:2832 #, c-format msgid "%H: relocation to `%s+%v' may have caused the error above\n" msgstr "" -#: elf32-frv.c:2846 +#: elf32-frv.c:2849 msgid "%H: relocation references symbol not defined in the module\n" msgstr "" -#: elf32-frv.c:2922 +#: elf32-frv.c:2925 msgid "%H: R_FRV_GETTLSOFF not applied to a call instruction\n" msgstr "" -#: elf32-frv.c:2963 +#: elf32-frv.c:2966 msgid "%H: R_FRV_GOTTLSDESC12 not applied to an lddi instruction\n" msgstr "" -#: elf32-frv.c:3034 +#: elf32-frv.c:3037 msgid "%H: R_FRV_GOTTLSDESCHI not applied to a sethi instruction\n" msgstr "" -#: elf32-frv.c:3071 +#: elf32-frv.c:3074 msgid "%H: R_FRV_GOTTLSDESCLO not applied to a setlo or setlos instruction\n" msgstr "" -#: elf32-frv.c:3118 +#: elf32-frv.c:3121 msgid "%H: R_FRV_TLSDESC_RELAX not applied to an ldd instruction\n" msgstr "" -#: elf32-frv.c:3202 +#: elf32-frv.c:3205 msgid "%H: R_FRV_GETTLSOFF_RELAX not applied to a calll instruction\n" msgstr "" -#: elf32-frv.c:3256 +#: elf32-frv.c:3259 msgid "%H: R_FRV_GOTTLSOFF12 not applied to an ldi instruction\n" msgstr "" -#: elf32-frv.c:3286 +#: elf32-frv.c:3289 msgid "%H: R_FRV_GOTTLSOFFHI not applied to a sethi instruction\n" msgstr "" -#: elf32-frv.c:3315 +#: elf32-frv.c:3318 msgid "%H: R_FRV_GOTTLSOFFLO not applied to a setlo or setlos instruction\n" msgstr "" -#: elf32-frv.c:3345 +#: elf32-frv.c:3348 msgid "%H: R_FRV_TLSOFF_RELAX not applied to an ld instruction\n" msgstr "" -#: elf32-frv.c:3390 +#: elf32-frv.c:3393 msgid "%H: R_FRV_TLSMOFFHI not applied to a sethi instruction\n" msgstr "" -#: elf32-frv.c:3417 +#: elf32-frv.c:3420 msgid "R_FRV_TLSMOFFLO not applied to a setlo or setlos instruction\n" msgstr "" -#: elf32-frv.c:3538 elf32-frv.c:3660 +#: elf32-frv.c:3541 elf32-frv.c:3661 msgid "%H: %s references dynamic symbol with nonzero addend\n" msgstr "" -#: elf32-frv.c:3580 elf32-frv.c:3703 +#: elf32-frv.c:3582 elf32-frv.c:3703 msgid "%H: cannot emit fixups in read-only section\n" msgstr "" -#: elf32-frv.c:3611 elf32-frv.c:3746 +#: elf32-frv.c:3612 elf32-frv.c:3745 msgid "%H: cannot emit dynamic relocations in read-only section\n" msgstr "" -#: elf32-frv.c:3918 +#: elf32-frv.c:3917 #, c-format msgid "%H: reloc against `%s' references a different segment\n" msgstr "" -#: elf32-frv.c:4069 +#: elf32-frv.c:4068 #, c-format msgid "%H: reloc against `%s': %s\n" msgstr "" -#: elf32-frv.c:6514 +#: elf32-frv.c:6495 #, c-format msgid "" "%pB: compiled with %s and linked with modules that use non-pic relocations" msgstr "" -#: elf32-frv.c:6568 elf32-iq2000.c:832 elf32-m32c.c:876 +#: elf32-frv.c:6549 elf32-iq2000.c:830 elf32-m32c.c:876 #, c-format msgid "%pB: compiled with %s and linked with modules compiled with %s" msgstr "" -#: elf32-frv.c:6581 +#: elf32-frv.c:6562 #, c-format msgid "" "%pB: uses different unknown e_flags (%#x) fields than previous modules (%#x)" @@ -2383,153 +2484,159 @@ msgid "%pB: relocations in generic ELF (EM: %d)" msgstr "" -#: elf32-hppa.c:834 elf32-hppa.c:3511 +#: elf32-hppa.c:763 elf32-hppa.c:844 elf64-ppc.c:11859 +msgid "" +"%F%P: Could not assign %pA to an output section. Retry without --enable-non-" +"contiguous-regions.\n" +msgstr "" + +#: elf32-hppa.c:865 elf32-hppa.c:3407 #, c-format msgid "" "%pB(%pA+%#): cannot reach %s, recompile with -ffunction-sections" msgstr "" -#: elf32-hppa.c:1248 +#: elf32-hppa.c:1243 #, c-format msgid "" "%pB: relocation %s can not be used when making a shared object; recompile " "with -fPIC" msgstr "" -#: elf32-hppa.c:2688 +#: elf32-hppa.c:2584 #, c-format msgid "%pB: duplicate export stub %s" msgstr "" -#: elf32-hppa.c:3344 +#: elf32-hppa.c:3240 #, c-format msgid "" "%pB(%pA+%#): %s fixup for insn %#x is not supported in a non-shared " "link" msgstr "" -#: elf32-hppa.c:4140 +#: elf32-hppa.c:4036 #, c-format msgid "%s has both normal and TLS relocs" msgstr "" -#: elf32-hppa.c:4158 +#: elf32-hppa.c:4054 #, c-format msgid "%pB:%s has both normal and TLS relocs" msgstr "" -#: elf32-hppa.c:4217 +#: elf32-hppa.c:4113 #, c-format msgid "%pB(%pA+%#): cannot handle %s for %s" msgstr "" -#: elf32-hppa.c:4521 +#: elf32-hppa.c:4417 msgid ".got section not immediately after .plt section" msgstr "" -#: elf32-i386.c:1178 elf64-x86-64.c:1377 +#: elf32-i386.c:1169 elf64-x86-64.c:1382 #, c-format msgid "" "%pB: TLS transition from %s to %s against `%s' at %# in section `" "%pA' failed" msgstr "" -#: elf32-i386.c:1269 +#: elf32-i386.c:1272 #, c-format msgid "" "%pB: direct GOT relocation R_386_GOT32X against `%s' without base register " "can not be used when making a shared object" msgstr "" -#: elf32-i386.c:1726 elf32-s390.c:1188 elf32-sh.c:5662 elf32-tilepro.c:1592 -#: elf32-xtensa.c:1203 elf64-s390.c:1120 elfxx-sparc.c:1591 elfxx-tilegx.c:1805 -#: /work/sources/binutils/current/bfd/elfnn-riscv.c:451 +#: elf32-i386.c:1721 elf32-s390.c:1153 elf32-sh.c:5494 elf32-tilepro.c:1556 +#: elf32-xtensa.c:1265 elf64-s390.c:1085 elfxx-sparc.c:1555 elfxx-tilegx.c:1769 +#: elfnn-riscv.c:437 #, c-format msgid "%pB: `%s' accessed both as normal and thread local symbol" msgstr "" -#: elf32-i386.c:1798 +#: elf32-i386.c:1793 #, c-format msgid "%pB: unsupported non-PIC call to IFUNC `%s'" msgstr "" -#: elf32-i386.c:2379 elf64-x86-64.c:2670 +#: elf32-i386.c:2373 elf64-x86-64.c:2721 #, c-format msgid "%pB: relocation %s against STT_GNU_IFUNC symbol `%s' isn't supported" msgstr "" -#: elf32-i386.c:2412 elf32-i386.c:3660 elf32-i386.c:3801 elf64-x86-64.c:2727 -#: elf64-x86-64.c:4069 elf64-x86-64.c:4225 +#: elf32-i386.c:2406 elf32-i386.c:3654 elf32-i386.c:3795 elf64-x86-64.c:2778 +#: elf64-x86-64.c:4285 elf64-x86-64.c:4441 #, c-format msgid "Local IFUNC function `%s' in %pB\n" msgstr "" -#: elf32-i386.c:2569 +#: elf32-i386.c:2563 #, c-format msgid "" "%pB: direct GOT relocation %s against `%s' without base register can not be " "used when making a shared object" msgstr "" -#: elf32-i386.c:2604 elf64-x86-64.c:2919 +#: elf32-i386.c:2598 elf64-x86-64.c:2977 msgid "hidden symbol" msgstr "" -#: elf32-i386.c:2607 elf64-x86-64.c:2922 +#: elf32-i386.c:2601 elf64-x86-64.c:2980 msgid "internal symbol" msgstr "" -#: elf32-i386.c:2610 elf64-x86-64.c:2925 +#: elf32-i386.c:2604 elf64-x86-64.c:2983 msgid "protected symbol" msgstr "" -#: elf32-i386.c:2613 elf64-x86-64.c:2928 +#: elf32-i386.c:2607 elf64-x86-64.c:2986 msgid "symbol" msgstr "" -#: elf32-i386.c:2619 +#: elf32-i386.c:2613 #, c-format msgid "" "%pB: relocation R_386_GOTOFF against undefined %s `%s' can not be used when " "making a shared object" msgstr "" -#: elf32-i386.c:2632 +#: elf32-i386.c:2626 #, c-format msgid "" "%pB: relocation R_386_GOTOFF against protected %s `%s' can not be used when " "making a shared object" msgstr "" -#: elf32-ip2k.c:856 elf32-ip2k.c:862 elf32-ip2k.c:929 elf32-ip2k.c:935 +#: elf32-ip2k.c:855 elf32-ip2k.c:861 elf32-ip2k.c:928 elf32-ip2k.c:934 msgid "" "ip2k relaxer: switch table without complete matching relocation information." msgstr "" -#: elf32-ip2k.c:879 elf32-ip2k.c:962 +#: elf32-ip2k.c:878 elf32-ip2k.c:961 msgid "ip2k relaxer: switch table header corrupt." msgstr "" -#: elf32-ip2k.c:1302 +#: elf32-ip2k.c:1297 #, c-format msgid "ip2k linker: missing page instruction at %# (dest = %#)" msgstr "" -#: elf32-ip2k.c:1321 +#: elf32-ip2k.c:1316 #, c-format msgid "" "ip2k linker: redundant page instruction at %# (dest = %#)" msgstr "" -#: elf32-lm32.c:651 elf32-nios2.c:3141 +#: elf32-lm32.c:608 elf32-nios2.c:3148 msgid "global pointer relative relocation when _gp not defined" msgstr "" -#: elf32-lm32.c:706 elf32-nios2.c:3578 +#: elf32-lm32.c:663 elf32-nios2.c:3585 msgid "global pointer relative address out of range" msgstr "" -#: elf32-lm32.c:1002 +#: elf32-lm32.c:959 #, c-format msgid "internal error: addend should be zero for %s" msgstr "" @@ -2538,150 +2645,155 @@ msgid "SDA relocation when _SDA_BASE_ not defined" msgstr "" -#: elf32-m32r.c:2984 elf32-microblaze.c:1101 elf32-microblaze.c:1149 +#: elf32-m32r.c:2799 elf32-microblaze.c:1097 elf32-microblaze.c:1145 #, c-format msgid "%pB: the target (%s) of an %s relocation is in the wrong section (%pA)" msgstr "" -#: elf32-m32r.c:3487 +#: elf32-m32r.c:3302 #, c-format msgid "%pB: instruction set mismatch with previous modules" msgstr "" -#: elf32-m32r.c:3508 elf32-nds32.c:6992 +#: elf32-m32r.c:3323 elf32-nds32.c:6855 #, c-format msgid "private flags = %lx" msgstr "" -#: elf32-m32r.c:3513 +#: elf32-m32r.c:3328 #, c-format msgid ": m32r instructions" msgstr "" -#: elf32-m32r.c:3514 +#: elf32-m32r.c:3329 #, c-format msgid ": m32rx instructions" msgstr "" -#: elf32-m32r.c:3515 +#: elf32-m32r.c:3330 #, c-format msgid ": m32r2 instructions" msgstr "" -#: elf32-m68hc1x.c:1116 +#: elf32-m68hc1x.c:1136 #, c-format msgid "" "reference to the far symbol `%s' using a wrong relocation may result in " "incorrect execution" msgstr "" -#: elf32-m68hc1x.c:1150 +#: elf32-m68hc1x.c:1167 #, c-format msgid "" "XGATE address (%lx) is not within shared RAM(0xE000-0xFFFF), therefore you " "must manually offset the address, and possibly manage the page, in your code." msgstr "" -#: elf32-m68hc1x.c:1168 +#: elf32-m68hc1x.c:1183 #, c-format msgid "" "banked address [%lx:%04lx] (%lx) is not in the same bank as current banked " "address [%lx:%04lx] (%lx)" msgstr "" -#: elf32-m68hc1x.c:1184 +#: elf32-m68hc1x.c:1198 #, c-format msgid "" "reference to a banked address [%lx:%04lx] in the normal address space at " "%04lx" msgstr "" -#: elf32-m68hc1x.c:1225 +#: elf32-m68hc1x.c:1234 #, c-format msgid "" "S12 address (%lx) is not within shared RAM(0x2000-0x4000), therefore you " "must manually offset the address in your code" msgstr "" -#: elf32-m68hc1x.c:1352 +#: elf32-m68hc1x.c:1358 #, c-format msgid "" "%pB: linking files compiled for 16-bit integers (-mshort) and others for 32-" "bit integers" msgstr "" -#: elf32-m68hc1x.c:1359 +#: elf32-m68hc1x.c:1365 #, c-format msgid "" "%pB: linking files compiled for 32-bit double (-fshort-double) and others " "for 64-bit double" msgstr "" -#: elf32-m68hc1x.c:1368 +#: elf32-m68hc1x.c:1374 #, c-format msgid "%pB: linking files compiled for HCS12 with others compiled for HC12" msgstr "" -#: elf32-m68hc1x.c:1413 elf32-xgate.c:497 +#: elf32-m68hc1x.c:1419 elf32-xgate.c:497 #, c-format msgid "[abi=32-bit int, " msgstr "" -#: elf32-m68hc1x.c:1415 elf32-xgate.c:499 +#: elf32-m68hc1x.c:1421 elf32-xgate.c:499 #, c-format msgid "[abi=16-bit int, " msgstr "" -#: elf32-m68hc1x.c:1418 elf32-xgate.c:502 +#: elf32-m68hc1x.c:1424 elf32-xgate.c:502 #, c-format msgid "64-bit double, " msgstr "" -#: elf32-m68hc1x.c:1420 elf32-xgate.c:504 +#: elf32-m68hc1x.c:1426 elf32-xgate.c:504 #, c-format msgid "32-bit double, " msgstr "" -#: elf32-m68hc1x.c:1423 +#: elf32-m68hc1x.c:1429 #, c-format msgid "cpu=HC11]" msgstr "" -#: elf32-m68hc1x.c:1425 +#: elf32-m68hc1x.c:1431 #, c-format msgid "cpu=HCS12]" msgstr "" -#: elf32-m68hc1x.c:1427 +#: elf32-m68hc1x.c:1433 #, c-format msgid "cpu=HC12]" msgstr "" -#: elf32-m68hc1x.c:1430 +#: elf32-m68hc1x.c:1436 #, c-format msgid " [memory=bank-model]" msgstr "" -#: elf32-m68hc1x.c:1432 +#: elf32-m68hc1x.c:1438 #, c-format msgid " [memory=flat]" msgstr "" -#: elf32-m68hc1x.c:1435 +#: elf32-m68hc1x.c:1441 #, c-format msgid " [XGATE RAM offsetting]" msgstr "" -#: elf32-m68k.c:1216 elf32-m68k.c:1217 vms-alpha.c:7484 vms-alpha.c:7500 +#: elf32-m68k.c:1159 elf32-m68k.c:1167 elf32-ppc.c:3583 elf32-ppc.c:3591 +#, c-format +msgid "%pB uses hard float, %pB uses soft float" +msgstr "" + +#: elf32-m68k.c:1282 elf32-m68k.c:1283 vms-alpha.c:7664 vms-alpha.c:7680 msgid "unknown" msgstr "" -#: elf32-m68k.c:1660 +#: elf32-m68k.c:1733 #, c-format msgid "%pB: GOT overflow: number of relocations with 8-bit offset > %d" msgstr "" -#: elf32-m68k.c:1667 +#: elf32-m68k.c:1740 #, c-format msgid "%pB: GOT overflow: number of relocations with 8- or 16-bit offset > %d" msgstr "" @@ -2712,20 +2824,20 @@ msgid "private flags = 0x%lx" msgstr "" -#: elf32-metag.c:1863 +#: elf32-metag.c:1859 #, c-format msgid "%pB(%pA): multiple TLS models are not supported" msgstr "" -#: elf32-metag.c:1866 +#: elf32-metag.c:1862 #, c-format msgid "" "%pB(%pA): shared library symbol %s encountered whilst performing a static " "link" msgstr "" -#: elf32-microblaze.c:1544 elf32-tilepro.c:3155 elfxx-sparc.c:3538 -#: elfxx-tilegx.c:3543 +#: elf32-microblaze.c:1540 elf32-tilepro.c:3029 elfxx-sparc.c:3427 +#: elfxx-tilegx.c:3417 #, c-format msgid "%pB: probably compiled without -fPIC?" msgstr "" @@ -2739,332 +2851,328 @@ msgid "32bits gp relative relocation occurs for an external symbol" msgstr "" -#: elf32-msp430.c:837 elf32-msp430.c:1151 +#: elf32-msp430.c:846 elf32-msp430.c:1160 msgid "try enabling relaxation to avoid relocation truncations" msgstr "" -#: elf32-msp430.c:1358 +#: elf32-msp430.c:1367 msgid "internal error: branch/jump to an odd address detected" msgstr "" -#: elf32-msp430.c:2357 +#: elf32-msp430.c:2532 #, c-format msgid "warning: %pB: unknown MSPABI object attribute %d" msgstr "" -#: elf32-msp430.c:2456 +#: elf32-msp430.c:2633 #, c-format msgid "error: %pB uses %s instructions but %pB uses %s" msgstr "" -#: elf32-msp430.c:2468 +#: elf32-msp430.c:2645 #, c-format msgid "error: %pB uses the %s code model whereas %pB uses the %s code model" msgstr "" -#: elf32-msp430.c:2480 +#: elf32-msp430.c:2658 #, c-format msgid "error: %pB uses the large code model but %pB uses MSP430 instructions" msgstr "" -#: elf32-msp430.c:2491 +#: elf32-msp430.c:2669 #, c-format msgid "error: %pB uses the %s data model whereas %pB uses the %s data model" msgstr "" -#: elf32-msp430.c:2503 +#: elf32-msp430.c:2682 #, c-format msgid "error: %pB uses the small code model but %pB uses the %s data model" msgstr "" -#: elf32-msp430.c:2515 +#: elf32-msp430.c:2694 #, c-format msgid "error: %pB uses the %s data model but %pB only uses MSP430 instructions" msgstr "" -#: elf32-nds32.c:3624 +#: elf32-msp430.c:2719 #, c-format -msgid "error: can't find symbol: %s" +msgid "" +"error: %pB can use the upper region for data, but %pB assumes data is " +"exclusively in lower memory" msgstr "" -#: elf32-nds32.c:5639 +#: elf32-nds32.c:3625 #, c-format -msgid "" -"%pB: relocation %s against `%s' can not be used whenmaking a shared object; " -"recompile with -fPIC" +msgid "error: can't find symbol: %s" msgstr "" -#: elf32-nds32.c:5669 +#: elf32-nds32.c:5528 #, c-format msgid "%pB: warning: %s unsupported in shared mode" msgstr "" -#: elf32-nds32.c:5795 +#: elf32-nds32.c:5654 #, c-format msgid "%pB: warning: unaligned access to GOT entry" msgstr "" -#: elf32-nds32.c:5836 +#: elf32-nds32.c:5695 #, c-format msgid "%pB: warning: relocate SDA_BASE failed" msgstr "" -#: elf32-nds32.c:5858 +#: elf32-nds32.c:5717 #, c-format msgid "%pB(%pA): warning: unaligned small data access of type %d" msgstr "" -#: elf32-nds32.c:6784 +#: elf32-nds32.c:6643 #, c-format msgid "" "%pB: ISR vector size mismatch with previous modules, previous %u-byte, " "current %u-byte" msgstr "" -#: elf32-nds32.c:6828 +#: elf32-nds32.c:6691 #, c-format msgid "%pB: warning: endian mismatch with previous modules" msgstr "" -#: elf32-nds32.c:6842 +#: elf32-nds32.c:6705 #, c-format msgid "" "%pB: warning: older version of object file encountered, please recompile " "with current tool chain" msgstr "" -#: elf32-nds32.c:6930 +#: elf32-nds32.c:6793 #, c-format msgid "%pB: error: ABI mismatch with previous modules" msgstr "" -#: elf32-nds32.c:6940 +#: elf32-nds32.c:6803 #, c-format msgid "%pB: error: instruction set mismatch with previous modules" msgstr "" -#: elf32-nds32.c:6967 +#: elf32-nds32.c:6830 #, c-format msgid "%pB: warning: incompatible elf-versions %s and %s" msgstr "" -#: elf32-nds32.c:6998 +#: elf32-nds32.c:6861 #, c-format msgid ": n1 instructions" msgstr "" -#: elf32-nds32.c:7001 +#: elf32-nds32.c:6864 #, c-format msgid ": n1h instructions" msgstr "" -#: elf32-nds32.c:9462 +#: elf32-nds32.c:9316 #, c-format msgid "%pB: error: search_nds32_elf_blank reports wrong node" msgstr "" -#: elf32-nds32.c:9722 +#: elf32-nds32.c:9576 #, c-format msgid "%pB: warning: %s points to unrecognized reloc at %#" msgstr "" -#: elf32-nds32.c:12975 +#: elf32-nds32.c:12839 #, c-format msgid "%pB: nested OMIT_FP in %pA" msgstr "" -#: elf32-nds32.c:12994 +#: elf32-nds32.c:12858 #, c-format msgid "%pB: unmatched OMIT_FP in %pA" msgstr "" -#: elf32-nds32.c:13275 reloc.c:8410 +#: elf32-nds32.c:13140 reloc.c:8470 #, c-format msgid "%X%P: %pB(%pA): relocation \"%pR\" goes out of range\n" msgstr "" -#: elf32-nios2.c:2930 +#: elf32-nios2.c:2937 #, c-format msgid "error: %pB: big-endian R2 is not supported" msgstr "" -#: elf32-nios2.c:3822 +#: elf32-nios2.c:3829 #, c-format msgid "" -"global pointer relative relocation at address 0x%08x when _gp not defined\n" +"global pointer relative relocation at address %# when _gp not " +"defined\n" msgstr "" -#: elf32-nios2.c:3842 +#: elf32-nios2.c:3859 #, c-format msgid "" -"unable to reach %s (at 0x%08x) from the global pointer (at 0x%08x) because " -"the offset (%d) is out of the allowed range, -32678 to 32767\n" +"unable to reach %s (at %#) from the global pointer (at %#) " +"because the offset (%) is out of the allowed range, -32678 to 32767\n" msgstr "" -#: elf32-nios2.c:4495 elf32-pru.c:928 +#: elf32-nios2.c:4514 elf32-pru.c:931 msgid "relocation out of range" msgstr "" -#: elf32-nios2.c:4505 elf32-pru.c:938 elf32-tic6x.c:2716 +#: elf32-nios2.c:4524 elf32-pru.c:941 elf32-tic6x.c:2657 msgid "dangerous relocation" msgstr "" -#: elf32-nios2.c:5378 +#: elf32-nios2.c:5367 #, c-format msgid "dynamic variable `%s' is zero size" msgstr "" -#: elf32-or1k.c:1177 +#: elf32-or1k.c:1210 #, c-format msgid "%pB: Cannot handle relocation value size of %d" msgstr "" -#: elf32-or1k.c:1286 +#: elf32-or1k.c:1317 #, c-format msgid "%pB: unknown relocation type %d" msgstr "" -#: elf32-or1k.c:1340 +#: elf32-or1k.c:1371 #, c-format msgid "%pB: addend should be zero for plt relocations" msgstr "" -#: elf32-or1k.c:1445 +#: elf32-or1k.c:1476 #, c-format msgid "%pB: addend should be zero for got relocations" msgstr "" -#: elf32-or1k.c:1462 +#: elf32-or1k.c:1493 #, c-format msgid "%pB: gotoff relocation against dynamic symbol %s" msgstr "" -#: elf32-or1k.c:1479 elf64-alpha.c:4455 elf64-alpha.c:4599 +#: elf32-or1k.c:1510 elf64-alpha.c:4421 elf64-alpha.c:4565 #, c-format msgid "%pB: pc-relative relocation against dynamic symbol %s" msgstr "" -#: elf32-or1k.c:1493 +#: elf32-or1k.c:1524 #, c-format msgid "%pB: non-pic relocation against symbol %s" msgstr "" -#: elf32-or1k.c:1577 +#: elf32-or1k.c:1608 #, c-format msgid "%pB: support for local dynamic not implemented" msgstr "" -#: elf32-or1k.c:1729 +#: elf32-or1k.c:1787 #, c-format msgid "%pB: will not resolve runtime TLS relocation" msgstr "" -#: elf32-or1k.c:2074 +#: elf32-or1k.c:2120 #, c-format msgid "%pB: bad relocation section name `%s'" msgstr "" -#: elf32-or1k.c:3218 +#: elf32-or1k.c:3181 #, c-format msgid "%pB: %s flag mismatch with previous modules" msgstr "" -#: elf32-ppc.c:986 +#: elf32-ppc.c:989 #, c-format msgid "generic linker can't handle %s" msgstr "" -#: elf32-ppc.c:1617 +#: elf32-ppc.c:1628 #, c-format msgid "corrupt %s section in %pB" msgstr "" -#: elf32-ppc.c:1637 +#: elf32-ppc.c:1647 #, c-format msgid "unable to read in %s section from %pB" msgstr "" -#: elf32-ppc.c:1679 +#: elf32-ppc.c:1689 #, c-format msgid "warning: unable to set size of %s section in %pB" msgstr "" -#: elf32-ppc.c:1729 +#: elf32-ppc.c:1738 msgid "failed to allocate space for new APUinfo section" msgstr "" -#: elf32-ppc.c:1748 +#: elf32-ppc.c:1757 msgid "failed to compute new APUinfo section" msgstr "" -#: elf32-ppc.c:1751 +#: elf32-ppc.c:1760 msgid "failed to install new APUinfo section" msgstr "" -#: elf32-ppc.c:2853 +#: elf32-ppc.c:2861 #, c-format msgid "%pB: relocation %s cannot be used when making a shared object" msgstr "" -#: elf32-ppc.c:3587 elf32-ppc.c:3595 -#, c-format -msgid "%pB uses hard float, %pB uses soft float" -msgstr "" - -#: elf32-ppc.c:3603 elf32-ppc.c:3611 +#: elf32-ppc.c:3599 elf32-ppc.c:3607 #, c-format msgid "" "%pB uses double-precision hard float, %pB uses single-precision hard float" msgstr "" -#: elf32-ppc.c:3630 elf32-ppc.c:3638 +#: elf32-ppc.c:3629 elf32-ppc.c:3637 #, c-format msgid "%pB uses 64-bit long double, %pB uses 128-bit long double" msgstr "" -#: elf32-ppc.c:3646 elf32-ppc.c:3654 +#: elf32-ppc.c:3645 elf32-ppc.c:3653 #, c-format msgid "%pB uses IBM long double, %pB uses IEEE long double" msgstr "" -#: elf32-ppc.c:3721 elf32-ppc.c:3730 +#: elf32-ppc.c:3720 elf32-ppc.c:3729 #, c-format msgid "%pB uses AltiVec vector ABI, %pB uses SPE vector ABI" msgstr "" -#: elf32-ppc.c:3759 elf32-ppc.c:3768 +#: elf32-ppc.c:3758 elf32-ppc.c:3767 #, c-format msgid "%pB uses r3/r4 for small structure returns, %pB uses memory" msgstr "" -#: elf32-ppc.c:3829 +#: elf32-ppc.c:3831 #, c-format msgid "" "%pB: compiled with -mrelocatable and linked with modules compiled normally" msgstr "" -#: elf32-ppc.c:3837 +#: elf32-ppc.c:3839 #, c-format msgid "" "%pB: compiled normally and linked with modules compiled with -mrelocatable" msgstr "" -#: elf32-ppc.c:3906 +#: elf32-ppc.c:3908 #, c-format msgid "%pB(%pA+0x%lx): expected 16A style relocation on 0x%08x insn" msgstr "" -#: elf32-ppc.c:3925 +#: elf32-ppc.c:3927 #, c-format msgid "%pB(%pA+0x%lx): expected 16D style relocation on 0x%08x insn" msgstr "" -#: elf32-ppc.c:4028 +#: elf32-ppc.c:4030 #, c-format msgid "bss-plt forced due to %pB" msgstr "" -#: elf32-ppc.c:4030 +#: elf32-ppc.c:4032 msgid "bss-plt forced by profiling" msgstr "" @@ -3072,40 +3180,40 @@ #. could just mark this symbol to exclude it #. from tls optimization but it's safer to skip #. the entire optimization. -#: elf32-ppc.c:4606 elf64-ppc.c:7724 +#: elf32-ppc.c:4606 elf64-ppc.c:8252 #, c-format msgid "%H arg lost __tls_get_addr, TLS optimization disabled\n" msgstr "" -#: elf32-ppc.c:5577 elf32-sh.c:3078 elf32-tilepro.c:2339 elfxx-sparc.c:2534 -#: elfxx-tilegx.c:2579 +#: elf32-ppc.c:5513 elf32-sh.c:3023 elf32-tilepro.c:2256 elfxx-sparc.c:2453 +#: elfxx-tilegx.c:2496 #, c-format msgid "%pB: dynamic relocation in read-only section `%pA'\n" msgstr "" -#: elf32-ppc.c:7457 +#: elf32-ppc.c:7356 msgid "%P: %H: error: %s with unexpected instruction %x\n" msgstr "" -#: elf32-ppc.c:7494 +#: elf32-ppc.c:7393 msgid "%H: fixup branch overflow\n" msgstr "" -#: elf32-ppc.c:7534 elf32-ppc.c:7570 +#: elf32-ppc.c:7433 elf32-ppc.c:7469 #, c-format msgid "%pB(%pA+%#): error: %s with unexpected instruction %#x" msgstr "" -#: elf32-ppc.c:7634 +#: elf32-ppc.c:7533 #, c-format msgid "%X%H: unsupported bss-plt -fPIC ifunc %s\n" msgstr "" -#: elf32-ppc.c:7673 elf64-ppc.c:15220 +#: elf32-ppc.c:7572 elf64-ppc.c:16848 msgid "%H: warning: %s unexpected insn %#x.\n" msgstr "" -#: elf32-ppc.c:7985 +#: elf32-ppc.c:7881 #, c-format msgid "%H: non-zero addend on %s reloc against `%s'\n" msgstr "" @@ -3118,59 +3226,59 @@ #. local won't have the +32k reloc addend trick marking #. -fPIC code, so the linker won't know whether r30 is #. _GLOBAL_OFFSET_TABLE_ or pointing into a .got2 section. -#: elf32-ppc.c:8017 +#: elf32-ppc.c:7913 #, c-format msgid "%X%H: @local call to ifunc %s\n" msgstr "" -#: elf32-ppc.c:8187 +#: elf32-ppc.c:8091 #, c-format msgid "%H: relocation %s for indirect function %s unsupported\n" msgstr "" -#: elf32-ppc.c:8515 elf32-ppc.c:8546 elf32-ppc.c:8637 elf32-ppc.c:8725 +#: elf32-ppc.c:8425 elf32-ppc.c:8456 elf32-ppc.c:8547 elf32-ppc.c:8643 #, c-format msgid "" "%pB: the target (%s) of a %s relocation is in the wrong output section (%s)" msgstr "" -#: elf32-ppc.c:8855 elf32-ppc.c:8873 -msgid "%P: %H: %s relocation unsupported for bss-plt\n" +#: elf32-ppc.c:8773 elf32-ppc.c:8791 +msgid "%X%P: %H: %s relocation unsupported for bss-plt\n" msgstr "" -#: elf32-ppc.c:8954 +#: elf32-ppc.c:8872 #, c-format msgid "%H: error: %s against `%s' not a multiple of %u\n" msgstr "" -#: elf32-ppc.c:8983 +#: elf32-ppc.c:8901 #, c-format msgid "%H: unresolvable %s relocation against symbol `%s'\n" msgstr "" -#: elf32-ppc.c:9064 +#: elf32-ppc.c:8982 #, c-format msgid "%H: %s reloc against `%s': error %d\n" msgstr "" -#: elf32-ppc.c:9959 elf64-ppc.c:15715 +#: elf32-ppc.c:9872 msgid "" "%X%P: text relocations and GNU indirect functions will result in a segfault " "at runtime\n" msgstr "" -#: elf32-ppc.c:9963 elf64-ppc.c:15719 +#: elf32-ppc.c:9876 elf64-ppc.c:17398 msgid "" "%P: warning: text relocations and GNU indirect functions may result in a " "segfault at runtime\n" msgstr "" -#: elf32-ppc.c:10008 +#: elf32-ppc.c:9921 #, c-format msgid "%s not defined in linker created %pA" msgstr "" -#: elf32-pru.c:579 elf32-pru.c:1472 +#: elf32-pru.c:582 elf32-pru.c:1475 #, c-format msgid "error: %pB: old incompatible object file detected" msgstr "" @@ -3187,7 +3295,7 @@ msgid "warning: RL78_SYM reloc with an unknown symbol" msgstr "" -#: elf32-rl78.c:1084 elf32-rx.c:1456 +#: elf32-rl78.c:1084 elf32-rx.c:1461 #, c-format msgid "%pB(%pA): error: call to undefined function '%s'" msgstr "" @@ -3216,17 +3324,17 @@ msgid " [64-bit doubles]" msgstr "" -#: elf32-rx.c:605 +#: elf32-rx.c:607 #, c-format msgid "%pB:%pA: table entry %s outside table" msgstr "" -#: elf32-rx.c:612 +#: elf32-rx.c:614 #, c-format msgid "%pB:%pA: table entry %s not word-aligned within table" msgstr "" -#: elf32-rx.c:684 +#: elf32-rx.c:689 #, c-format msgid "%pB:%pA: warning: deprecated Red Hat reloc %s detected against: %s" msgstr "" @@ -3235,59 +3343,59 @@ #. an absolute address is being computed. There are special cases #. for relocs against symbols that are known to be referenced in #. crt0.o before the PID base address register has been initialised. -#: elf32-rx.c:704 +#: elf32-rx.c:709 #, c-format msgid "%pB(%pA): unsafe PID relocation %s at %# (against %s in %s)" msgstr "" -#: elf32-rx.c:1288 +#: elf32-rx.c:1293 msgid "warning: RX_SYM reloc with an unknown symbol" msgstr "" -#: elf32-rx.c:3167 +#: elf32-rx.c:3173 #, c-format msgid "there is a conflict merging the ELF header flags from %pB" msgstr "" -#: elf32-rx.c:3170 +#: elf32-rx.c:3176 #, c-format msgid " the input file's flags: %s" msgstr "" -#: elf32-rx.c:3172 +#: elf32-rx.c:3178 #, c-format msgid " the output file's flags: %s" msgstr "" -#: elf32-rx.c:3792 +#: elf32-rx.c:3784 #, c-format msgid "%pB:%pA: table %s missing corresponding %s" msgstr "" -#: elf32-rx.c:3800 +#: elf32-rx.c:3792 #, c-format msgid "%pB:%pA: %s and %s must be in the same input section" msgstr "" -#: elf32-s390.c:2140 elf64-s390.c:2095 +#: elf32-s390.c:2011 elf64-s390.c:1965 #, c-format msgid "%pB(%pA+%#): invalid instruction for TLS relocation %s" msgstr "" -#: elf32-score.c:1521 elf32-score7.c:1382 elfxx-mips.c:3754 +#: elf32-score.c:1521 elf32-score7.c:1382 elfxx-mips.c:3800 msgid "not enough GOT space for local GOT entries" msgstr "" -#: elf32-score.c:2746 +#: elf32-score.c:2747 msgid "address not word aligned" msgstr "" -#: elf32-score.c:2827 elf32-score7.c:2632 +#: elf32-score.c:2828 elf32-score7.c:2633 #, c-format msgid "%pB: malformed reloc detected for section %pA" msgstr "" -#: elf32-score.c:2881 elf32-score7.c:2686 +#: elf32-score.c:2882 elf32-score7.c:2687 #, c-format msgid "%pB: CALL15 reloc at %# not against global symbol" msgstr "" @@ -3302,7 +3410,7 @@ msgid " [fix dep]" msgstr "" -#: elf32-score.c:4050 elf32-score7.c:3855 +#: elf32-score.c:4054 elf32-score7.c:3859 #, c-format msgid "%pB: warning: linking PIC files with non-PIC files" msgstr "" @@ -3312,44 +3420,40 @@ msgid "%pB: %#: warning: R_SH_USES points to unrecognized insn 0x%x" msgstr "" -#: elf32-sh.c:3633 -msgid "unexpected STO_SH5_ISA32 on local symbol is not handled" -msgstr "" - -#: elf32-sh.c:3880 +#: elf32-sh.c:3758 #, c-format msgid "" "%pB: %#: fatal: unaligned branch target for relax-support relocation" msgstr "" -#: elf32-sh.c:3910 elf32-sh.c:3926 +#: elf32-sh.c:3788 elf32-sh.c:3804 #, c-format msgid "%pB: %#: fatal: unaligned %s relocation %#" msgstr "" -#: elf32-sh.c:3942 +#: elf32-sh.c:3820 #, c-format msgid "" "%pB: %#: fatal: R_SH_PSHA relocation % not in range -32..32" msgstr "" -#: elf32-sh.c:3958 +#: elf32-sh.c:3836 #, c-format msgid "" "%pB: %#: fatal: R_SH_PSHL relocation % not in range -32..32" msgstr "" -#: elf32-sh.c:4088 elf32-sh.c:4483 +#: elf32-sh.c:3966 elf32-sh.c:4361 #, c-format msgid "%pB(%pA+%#): cannot emit fixup to `%s' in read-only section" msgstr "" -#: elf32-sh.c:4586 +#: elf32-sh.c:4464 #, c-format msgid "%pB(%pA+%#): %s relocation against external symbol \"%s\"" msgstr "" -#: elf32-sh.c:4705 +#: elf32-sh.c:4583 #, c-format msgid "" "%pB(%pA): offset in relocation for GD->LE translation is too small: " @@ -3357,125 +3461,125 @@ msgstr "" #. The backslash is to prevent bogus trigraph detection. -#: elf32-sh.c:4723 +#: elf32-sh.c:4601 #, c-format msgid "%pB(%pA+%#): unexpected instruction %#04X (expected 0xd4??)" msgstr "" -#: elf32-sh.c:4731 +#: elf32-sh.c:4609 #, c-format msgid "%pB(%pA+%#): unexpected instruction %#04X (expected 0xc7??)" msgstr "" -#: elf32-sh.c:4738 +#: elf32-sh.c:4616 #, c-format msgid "%pB(%pA+%#): unexpected instruction %#04X (expected 0xd1??)" msgstr "" -#: elf32-sh.c:4745 +#: elf32-sh.c:4623 #, c-format msgid "%pB(%pA+%#): unexpected instruction %#04X (expected 0x310c)" msgstr "" -#: elf32-sh.c:4752 +#: elf32-sh.c:4630 #, c-format msgid "%pB(%pA+%#): unexpected instruction %#04X (expected 0x410b)" msgstr "" -#: elf32-sh.c:4759 +#: elf32-sh.c:4637 #, c-format msgid "%pB(%pA+%#): unexpected instruction %#04X (expected 0x34cc)" msgstr "" -#: elf32-sh.c:4794 +#: elf32-sh.c:4672 #, c-format msgid "" "%pB(%pA): offset in relocation for IE->LE translation is too small: " "%#" msgstr "" -#: elf32-sh.c:4812 +#: elf32-sh.c:4690 #, c-format msgid "" "%pB(%pA+%#): unexpected instruction %#04X (expected 0xd0??: mov.l)" msgstr "" -#: elf32-sh.c:4821 +#: elf32-sh.c:4699 #, c-format msgid "" "%pB(%pA+%#): unexpected instruction %#04X (expected 0x0?12: stc)" msgstr "" -#: elf32-sh.c:4828 +#: elf32-sh.c:4706 #, c-format msgid "" "%pB(%pA+%#): unexpected instruction %#04X (expected 0x0?ce: mov.l)" msgstr "" -#: elf32-sh.c:4943 +#: elf32-sh.c:4821 #, c-format msgid "" "%pB(%pA): offset in relocation for GD->IE translation is too small: " "%#" msgstr "" -#: elf32-sh.c:5011 +#: elf32-sh.c:4889 #, c-format msgid "" "%pB(%pA): offset in relocation for LD->LE translation is too small: " "%#" msgstr "" -#: elf32-sh.c:5139 +#: elf32-sh.c:5017 #, c-format msgid "%X%C: relocation to \"%s\" references a different segment\n" msgstr "" -#: elf32-sh.c:5146 +#: elf32-sh.c:5024 #, c-format msgid "%C: warning: relocation to \"%s\" references a different segment\n" msgstr "" -#: elf32-sh.c:5651 elf32-sh.c:5733 +#: elf32-sh.c:5483 elf32-sh.c:5565 #, c-format msgid "%pB: `%s' accessed both as normal and FDPIC symbol" msgstr "" -#: elf32-sh.c:5657 elf32-sh.c:5738 +#: elf32-sh.c:5489 elf32-sh.c:5570 #, c-format msgid "%pB: `%s' accessed both as FDPIC and thread local symbol" msgstr "" -#: elf32-sh.c:5688 +#: elf32-sh.c:5520 #, c-format msgid "%pB: Function descriptor relocation with non-zero addend" msgstr "" -#: elf32-sh.c:5895 elf64-alpha.c:4691 +#: elf32-sh.c:5727 elf64-alpha.c:4657 #, c-format msgid "%pB: TLS local exec code cannot be linked into shared objects" msgstr "" -#: elf32-sh.c:6010 +#: elf32-sh.c:5842 #, c-format msgid "%pB: uses %s instructions while previous modules use %s instructions" msgstr "" -#: elf32-sh.c:6022 +#: elf32-sh.c:5854 #, c-format msgid "" "internal error: merge of architecture '%s' with architecture '%s' produced " "unknown architecture" msgstr "" -#: elf32-sh.c:6059 +#: elf32-sh.c:5895 #, c-format msgid "" "%pB: uses instructions which are incompatible with instructions used in " "previous modules" msgstr "" -#: elf32-sh.c:6072 +#: elf32-sh.c:5908 #, c-format msgid "%pB: attempt to mix FDPIC and non-FDPIC objects" msgstr "" @@ -3490,138 +3594,144 @@ msgid "%pB: linking little endian files with big endian files" msgstr "" -#: elf32-spu.c:732 +#: elf32-sparc.c:157 +#, c-format +msgid "" +"%pB: unhandled sparc machine value '%lu' detected during write processing" +msgstr "" + +#: elf32-spu.c:735 msgid "%X%P: overlay section %pA does not start on a cache line\n" msgstr "" -#: elf32-spu.c:740 +#: elf32-spu.c:743 msgid "%X%P: overlay section %pA is larger than a cache line\n" msgstr "" -#: elf32-spu.c:760 +#: elf32-spu.c:763 msgid "%X%P: overlay section %pA is not in cache area\n" msgstr "" -#: elf32-spu.c:801 +#: elf32-spu.c:804 #, c-format msgid "%X%P: overlay sections %pA and %pA do not start at the same address\n" msgstr "" -#: elf32-spu.c:1027 +#: elf32-spu.c:1030 #, c-format msgid "warning: call to non-function symbol %s defined in %pB" msgstr "" -#: elf32-spu.c:1377 +#: elf32-spu.c:1380 #, c-format msgid "%pA:0x%v lrlive .brinfo (%u) differs from analysis (%u)\n" msgstr "" -#: elf32-spu.c:1909 +#: elf32-spu.c:1910 #, c-format msgid "%pB is not allowed to define %s" msgstr "" -#: elf32-spu.c:1917 +#: elf32-spu.c:1918 #, c-format msgid "you are not allowed to define %s in a script" msgstr "" -#: elf32-spu.c:1951 +#: elf32-spu.c:1952 #, c-format msgid "%s in overlay section" msgstr "" -#: elf32-spu.c:1980 +#: elf32-spu.c:1981 msgid "overlay stub relocation overflow" msgstr "" -#: elf32-spu.c:1989 elf64-ppc.c:13230 +#: elf32-spu.c:1990 elf64-ppc.c:14496 msgid "stubs don't match calculated size" msgstr "" -#: elf32-spu.c:2572 +#: elf32-spu.c:2573 #, c-format msgid "warning: %s overlaps %s\n" msgstr "" -#: elf32-spu.c:2588 +#: elf32-spu.c:2589 #, c-format msgid "warning: %s exceeds section size\n" msgstr "" -#: elf32-spu.c:2620 +#: elf32-spu.c:2621 #, c-format msgid "%pA:0x%v not found in function table\n" msgstr "" -#: elf32-spu.c:2761 +#: elf32-spu.c:2762 #, c-format msgid "%pB(%pA+0x%v): call to non-code section %pB(%pA), analysis incomplete\n" msgstr "" -#: elf32-spu.c:3330 +#: elf32-spu.c:3328 #, c-format msgid "stack analysis will ignore the call from %s to %s\n" msgstr "" -#: elf32-spu.c:4027 +#: elf32-spu.c:4025 msgid " calls:\n" msgstr "" -#: elf32-spu.c:4341 +#: elf32-spu.c:4340 #, c-format msgid "%s duplicated in %s\n" msgstr "" -#: elf32-spu.c:4345 +#: elf32-spu.c:4344 #, c-format msgid "%s duplicated\n" msgstr "" -#: elf32-spu.c:4352 +#: elf32-spu.c:4351 msgid "sorry, no support for duplicate object files in auto-overlay script\n" msgstr "" -#: elf32-spu.c:4394 +#: elf32-spu.c:4393 #, c-format msgid "" "non-overlay size of 0x%v plus maximum overlay size of 0x%v exceeds local " "store\n" msgstr "" -#: elf32-spu.c:4550 +#: elf32-spu.c:4549 #, c-format msgid "%pB:%pA%s exceeds overlay size\n" msgstr "" -#: elf32-spu.c:4691 +#: elf32-spu.c:4690 msgid "%F%P: auto overlay error: %E\n" msgstr "" -#: elf32-spu.c:4712 +#: elf32-spu.c:4711 msgid "Stack size for call graph root nodes.\n" msgstr "" -#: elf32-spu.c:4713 +#: elf32-spu.c:4712 msgid "" "\n" "Stack size for functions. Annotations: '*' max stack, 't' tail call\n" msgstr "" -#: elf32-spu.c:4723 +#: elf32-spu.c:4722 msgid "Maximum stack required is 0x%v\n" msgstr "" -#: elf32-spu.c:4742 +#: elf32-spu.c:4741 msgid "%X%P: stack/lrlive analysis error: %E\n" msgstr "" -#: elf32-spu.c:4745 +#: elf32-spu.c:4744 msgid "%F%P: can not build overlay stubs: %E\n" msgstr "" -#: elf32-spu.c:4814 +#: elf32-spu.c:4813 msgid "fatal error while creating .fixup" msgstr "" @@ -3630,279 +3740,278 @@ msgid "%pB(%s+%#): unresolvable %s relocation against symbol `%s'" msgstr "" -#: elf32-tic6x.c:1628 +#: elf32-tic6x.c:1588 msgid "warning: generating a shared library containing non-PIC code" msgstr "" -#: elf32-tic6x.c:1633 +#: elf32-tic6x.c:1593 msgid "warning: generating a shared library containing non-PID code" msgstr "" -#: elf32-tic6x.c:2493 +#: elf32-tic6x.c:2434 #, c-format msgid "%pB: SB-relative relocation but __c6xabi_DSBT_BASE not defined" msgstr "" -#: elf32-tic6x.c:3629 +#: elf32-tic6x.c:3511 #, c-format msgid "%pB: error: unknown mandatory EABI object attribute %d" msgstr "" -#: elf32-tic6x.c:3638 +#: elf32-tic6x.c:3520 #, c-format msgid "%pB: warning: unknown EABI object attribute %d" msgstr "" -#: elf32-tic6x.c:3752 elf32-tic6x.c:3761 +#: elf32-tic6x.c:3638 elf32-tic6x.c:3647 #, c-format msgid "error: %pB requires more stack alignment than %pB preserves" msgstr "" -#: elf32-tic6x.c:3771 elf32-tic6x.c:3780 +#: elf32-tic6x.c:3657 elf32-tic6x.c:3666 #, c-format msgid "error: unknown Tag_ABI_array_object_alignment value in %pB" msgstr "" -#: elf32-tic6x.c:3789 elf32-tic6x.c:3798 +#: elf32-tic6x.c:3675 elf32-tic6x.c:3684 #, c-format msgid "error: unknown Tag_ABI_array_object_align_expected value in %pB" msgstr "" -#: elf32-tic6x.c:3807 elf32-tic6x.c:3815 +#: elf32-tic6x.c:3693 elf32-tic6x.c:3701 #, c-format msgid "error: %pB requires more array alignment than %pB preserves" msgstr "" -#: elf32-tic6x.c:3838 +#: elf32-tic6x.c:3724 #, c-format msgid "warning: %pB and %pB differ in wchar_t size" msgstr "" -#: elf32-tic6x.c:3857 +#: elf32-tic6x.c:3743 #, c-format msgid "warning: %pB and %pB differ in whether code is compiled for DSBT" msgstr "" -#: elf32-tilepro.c:3761 elfxx-tilegx.c:4145 elfxx-x86.c:1432 -#: /work/sources/binutils/current/bfd/elfnn-aarch64.c:9530 -#: /work/sources/binutils/current/bfd/elfnn-riscv.c:2579 +#: elf32-tilepro.c:3635 elfxx-tilegx.c:4019 elfxx-x86.c:1393 +#: elfnn-aarch64.c:9704 elfnn-riscv.c:2522 #, c-format msgid "discarded output section: `%pA'" msgstr "" -#: elf32-v850.c:153 +#: elf32-v850.c:152 #, c-format msgid "variable `%s' cannot occupy in multiple small data regions" msgstr "" -#: elf32-v850.c:156 +#: elf32-v850.c:155 #, c-format msgid "" "variable `%s' can only be in one of the small, zero, and tiny data regions" msgstr "" -#: elf32-v850.c:159 +#: elf32-v850.c:158 #, c-format msgid "" "variable `%s' cannot be in both small and zero data regions simultaneously" msgstr "" -#: elf32-v850.c:162 +#: elf32-v850.c:161 #, c-format msgid "" "variable `%s' cannot be in both small and tiny data regions simultaneously" msgstr "" -#: elf32-v850.c:165 +#: elf32-v850.c:164 #, c-format msgid "" "variable `%s' cannot be in both zero and tiny data regions simultaneously" msgstr "" -#: elf32-v850.c:463 +#: elf32-v850.c:462 msgid "failed to find previous HI16 reloc" msgstr "" -#: elf32-v850.c:2303 +#: elf32-v850.c:2302 msgid "could not locate special linker symbol __gp" msgstr "" -#: elf32-v850.c:2307 +#: elf32-v850.c:2306 msgid "could not locate special linker symbol __ep" msgstr "" -#: elf32-v850.c:2311 +#: elf32-v850.c:2310 msgid "could not locate special linker symbol __ctbp" msgstr "" -#: elf32-v850.c:2532 +#: elf32-v850.c:2531 #, c-format msgid "error: %pB needs 8-byte alignment but %pB is set for 4-byte alignment" msgstr "" -#: elf32-v850.c:2548 +#: elf32-v850.c:2547 #, c-format msgid "error: %pB uses 64-bit doubles but %pB uses 32-bit doubles" msgstr "" -#: elf32-v850.c:2563 +#: elf32-v850.c:2562 #, c-format msgid "error: %pB uses FPU-3.0 but %pB only supports FPU-2.0" msgstr "" -#: elf32-v850.c:2595 +#: elf32-v850.c:2594 #, c-format msgid " alignment of 8-byte entities: " msgstr "" -#: elf32-v850.c:2598 +#: elf32-v850.c:2597 #, c-format msgid "4-byte" msgstr "" -#: elf32-v850.c:2599 +#: elf32-v850.c:2598 #, c-format msgid "8-byte" msgstr "" -#: elf32-v850.c:2600 elf32-v850.c:2612 +#: elf32-v850.c:2599 elf32-v850.c:2611 #, c-format msgid "not set" msgstr "" -#: elf32-v850.c:2601 elf32-v850.c:2613 elf32-v850.c:2625 elf32-v850.c:2636 -#: elf32-v850.c:2647 elf32-v850.c:2658 +#: elf32-v850.c:2600 elf32-v850.c:2612 elf32-v850.c:2624 elf32-v850.c:2635 +#: elf32-v850.c:2646 elf32-v850.c:2657 #, c-format msgid "unknown: %x" msgstr "" -#: elf32-v850.c:2607 +#: elf32-v850.c:2606 #, c-format msgid " size of doubles: " msgstr "" -#: elf32-v850.c:2610 +#: elf32-v850.c:2609 #, c-format msgid "4-bytes" msgstr "" -#: elf32-v850.c:2611 +#: elf32-v850.c:2610 #, c-format msgid "8-bytes" msgstr "" -#: elf32-v850.c:2619 +#: elf32-v850.c:2618 #, c-format msgid " FPU support required: " msgstr "" -#: elf32-v850.c:2622 +#: elf32-v850.c:2621 #, c-format msgid "FPU-2.0" msgstr "" -#: elf32-v850.c:2623 +#: elf32-v850.c:2622 #, c-format msgid "FPU-3.0" msgstr "" -#: elf32-v850.c:2624 +#: elf32-v850.c:2623 #, c-format msgid "none" msgstr "" -#: elf32-v850.c:2631 +#: elf32-v850.c:2630 #, c-format msgid "SIMD use: " msgstr "" -#: elf32-v850.c:2634 elf32-v850.c:2645 elf32-v850.c:2656 +#: elf32-v850.c:2633 elf32-v850.c:2644 elf32-v850.c:2655 #, c-format msgid "yes" msgstr "" -#: elf32-v850.c:2635 elf32-v850.c:2646 elf32-v850.c:2657 +#: elf32-v850.c:2634 elf32-v850.c:2645 elf32-v850.c:2656 #, c-format msgid "no" msgstr "" -#: elf32-v850.c:2642 +#: elf32-v850.c:2641 #, c-format msgid "CACHE use: " msgstr "" -#: elf32-v850.c:2653 +#: elf32-v850.c:2652 #, c-format msgid "MMU use: " msgstr "" -#: elf32-v850.c:2820 elf32-v850.c:2876 +#: elf32-v850.c:2819 elf32-v850.c:2875 #, c-format msgid "%pB: architecture mismatch with previous modules" msgstr "" #. xgettext:c-format. -#: elf32-v850.c:2894 +#: elf32-v850.c:2893 #, c-format msgid "private flags = %lx: " msgstr "" -#: elf32-v850.c:2899 +#: elf32-v850.c:2898 #, c-format msgid "unknown v850 architecture" msgstr "" -#: elf32-v850.c:2901 +#: elf32-v850.c:2900 #, c-format msgid "v850 E3 architecture" msgstr "" -#: elf32-v850.c:2903 elf32-v850.c:2910 +#: elf32-v850.c:2902 elf32-v850.c:2909 #, c-format msgid "v850 architecture" msgstr "" -#: elf32-v850.c:2911 +#: elf32-v850.c:2910 #, c-format msgid "v850e architecture" msgstr "" -#: elf32-v850.c:2912 +#: elf32-v850.c:2911 #, c-format msgid "v850e1 architecture" msgstr "" -#: elf32-v850.c:2913 +#: elf32-v850.c:2912 #, c-format msgid "v850e2 architecture" msgstr "" -#: elf32-v850.c:2914 +#: elf32-v850.c:2913 #, c-format msgid "v850e2v3 architecture" msgstr "" -#: elf32-v850.c:2915 +#: elf32-v850.c:2914 #, c-format msgid "v850e3v5 architecture" msgstr "" -#: elf32-v850.c:3609 elf32-v850.c:3848 +#: elf32-v850.c:3612 elf32-v850.c:3851 #, c-format msgid "%pB: %#: warning: %s points to unrecognized insns" msgstr "" -#: elf32-v850.c:3619 elf32-v850.c:3858 +#: elf32-v850.c:3622 elf32-v850.c:3861 #, c-format msgid "%pB: %#: warning: %s points to unrecognized insn %#x" msgstr "" -#: elf32-v850.c:3665 elf32-v850.c:3893 +#: elf32-v850.c:3668 elf32-v850.c:3896 #, c-format msgid "%pB: %#: warning: %s points to unrecognized reloc" msgstr "" -#: elf32-v850.c:3705 +#: elf32-v850.c:3708 #, c-format msgid "%pB: %#: warning: %s points to unrecognized reloc %#" msgstr "" @@ -3929,22 +4038,22 @@ "addend of %" msgstr "" -#: elf32-vax.c:1446 +#: elf32-vax.c:1389 #, c-format msgid "%pB: warning: PLT addend of % to `%s' from %pA section ignored" msgstr "" -#: elf32-vax.c:1572 +#: elf32-vax.c:1515 #, c-format msgid "%pB: warning: %s relocation against symbol `%s' from %pA section" msgstr "" -#: elf32-vax.c:1579 +#: elf32-vax.c:1522 #, c-format msgid "%pB: warning: %s relocation to %# from %pA section" msgstr "" -#: elf32-visium.c:821 +#: elf32-visium.c:824 #, c-format msgid "" "%pB: compiled %s -mtune=%s and linked with modules compiled %s -mtune=%s" @@ -3960,252 +4069,275 @@ msgid "error reading cpu type from elf private data" msgstr "" -#: elf32-xstormy16.c:457 elf64-ia64-vms.c:2085 elf32-ia64.c:2353 -#: elf64-ia64.c:2353 +#: elf32-xstormy16.c:457 elf64-ia64-vms.c:2074 elfnn-ia64.c:2343 msgid "non-zero addend in @fptr reloc" msgstr "" -#: elf32-xtensa.c:937 +#: elf32-xtensa.c:1001 #, c-format msgid "%pB(%pA): invalid property table" msgstr "" -#: elf32-xtensa.c:2675 +#: elf32-xtensa.c:2733 #, c-format msgid "%pB(%pA+%#): relocation offset out of range (size=%#)" msgstr "" -#: elf32-xtensa.c:2758 elf32-xtensa.c:2881 +#: elf32-xtensa.c:2816 elf32-xtensa.c:2939 msgid "dynamic relocation in read-only section" msgstr "" -#: elf32-xtensa.c:2858 +#: elf32-xtensa.c:2916 msgid "TLS relocation invalid without dynamic sections" msgstr "" -#: elf32-xtensa.c:3070 +#: elf32-xtensa.c:3126 msgid "internal inconsistency in size of .got.loc section" msgstr "" -#: elf32-xtensa.c:3377 +#: elf32-xtensa.c:3432 #, c-format msgid "%pB: incompatible machine type; output is 0x%x; input is 0x%x" msgstr "" -#: elf32-xtensa.c:4608 elf32-xtensa.c:4616 +#: elf32-xtensa.c:4726 elf32-xtensa.c:4734 msgid "attempt to convert L32R/CALLX to CALL failed" msgstr "" -#: elf32-xtensa.c:6444 elf32-xtensa.c:6523 elf32-xtensa.c:7899 +#: elf32-xtensa.c:6559 elf32-xtensa.c:6638 elf32-xtensa.c:8064 #, c-format msgid "" "%pB(%pA+%#): could not decode instruction; possible configuration " "mismatch" msgstr "" -#: elf32-xtensa.c:7638 +#: elf32-xtensa.c:7805 #, c-format msgid "" "%pB(%pA+%#): could not decode instruction for XTENSA_ASM_SIMPLIFY " "relocation; possible configuration mismatch" msgstr "" -#: elf32-xtensa.c:9493 +#: elf32-xtensa.c:9663 msgid "invalid relocation address" msgstr "" -#: elf32-xtensa.c:9543 +#: elf32-xtensa.c:9754 msgid "overflow after relaxation" msgstr "" -#: elf32-xtensa.c:10689 +#: elf32-xtensa.c:10900 #, c-format msgid "%pB(%pA+%#): unexpected fix for %s relocation" msgstr "" -#: elf64-alpha.c:472 +#: elf32-z80.c:473 +#, c-format +msgid "%pB: unsupported bfd mach %#lx" +msgstr "" + +#: elf32-z80.c:518 +#, c-format +msgid "%pB: unsupported mach %#x" +msgstr "" + +#: elf32-z80.c:546 +#, c-format +msgid "%pB: unsupported arch %#x" +msgstr "" + +#: elf64-alpha.c:473 msgid "GPDISP relocation did not find ldah and lda instructions" msgstr "" -#: elf64-alpha.c:2463 +#: elf64-alpha.c:1999 elf64-alpha.c:2694 elflink.c:14885 +#, c-format +msgid "%pB: dynamic relocation against `%pT' in read-only section `%pA'\n" +msgstr "" + +#: elf64-alpha.c:2451 #, c-format msgid "%pB: .got subsegment exceeds 64K (size %d)" msgstr "" -#: elf64-alpha.c:3018 elf64-alpha.c:3214 +#: elf64-alpha.c:2989 elf64-alpha.c:3183 #, c-format msgid "%pB: %pA+%#: warning: %s relocation against unexpected insn" msgstr "" -#: elf64-alpha.c:4415 elf64-alpha.c:4428 +#: elf64-alpha.c:4381 elf64-alpha.c:4394 #, c-format msgid "%pB: gp-relative relocation against dynamic symbol %s" msgstr "" -#: elf64-alpha.c:4484 +#: elf64-alpha.c:4450 #, c-format msgid "%pB: change in gp: BRSGP %s" msgstr "" -#: elf64-alpha.c:4509 mach-o.c:615 -#: /work/sources/binutils/current/bfd/elfnn-riscv.c:499 +#: elf64-alpha.c:4475 mach-o.c:616 elfnn-riscv.c:485 msgid "" msgstr "" -#: elf64-alpha.c:4515 +#: elf64-alpha.c:4481 #, c-format msgid "%pB: !samegp reloc against symbol without .prologue: %s" msgstr "" -#: elf64-alpha.c:4573 +#: elf64-alpha.c:4539 #, c-format msgid "%pB: unhandled dynamic relocation against %s" msgstr "" -#: elf64-alpha.c:4608 +#: elf64-alpha.c:4574 #, c-format msgid "%pB: pc-relative relocation against undefined weak symbol %s" msgstr "" -#: elf64-alpha.c:4674 +#: elf64-alpha.c:4640 #, c-format msgid "%pB: dtp-relative relocation against dynamic symbol %s" msgstr "" -#: elf64-alpha.c:4699 +#: elf64-alpha.c:4665 #, c-format msgid "%pB: tp-relative relocation against dynamic symbol %s" msgstr "" +#. Only if it's not an unresolved symbol. +#: elf64-bpf.c:517 +msgid "internal error: relocation not supported" +msgstr "" + #: elf64-gen.c:71 #, c-format msgid "%pB: Relocations in generic ELF (EM: %d)" msgstr "" -#: elf64-hppa.c:2081 +#: elf64-hppa.c:2032 #, c-format msgid "stub entry for %s cannot load .plt, dp offset = %" msgstr "" -#: elf64-hppa.c:3286 +#: elf64-hppa.c:3236 #, c-format msgid "%pB(%pA+%#): cannot reach %s" msgstr "" -#: elf64-ia64-vms.c:598 elf32-ia64.c:636 elf64-ia64.c:636 +#: elf64-ia64-vms.c:598 elfnn-ia64.c:639 #, c-format msgid "" "%pB: can't relax br at %# in section `%pA'; please use brl or " "indirect branch" msgstr "" -#: elf64-ia64-vms.c:2040 elf32-ia64.c:2301 elf64-ia64.c:2301 +#: elf64-ia64-vms.c:2029 elfnn-ia64.c:2291 msgid "@pltoff reloc against local symbol" msgstr "" -#: elf64-ia64-vms.c:3292 elf32-ia64.c:3712 elf64-ia64.c:3712 +#: elf64-ia64-vms.c:3281 elfnn-ia64.c:3674 #, c-format msgid "%pB: short data segment overflowed (%# >= 0x400000)" msgstr "" -#: elf64-ia64-vms.c:3302 elf32-ia64.c:3722 elf64-ia64.c:3722 +#: elf64-ia64-vms.c:3291 elfnn-ia64.c:3684 #, c-format msgid "%pB: __gp does not cover short data segment" msgstr "" -#: elf64-ia64-vms.c:3572 elf32-ia64.c:3996 elf64-ia64.c:3996 +#: elf64-ia64-vms.c:3561 elfnn-ia64.c:3958 #, c-format msgid "%pB: non-pic code with imm relocation against dynamic symbol `%s'" msgstr "" -#: elf64-ia64-vms.c:3636 elf32-ia64.c:4064 elf64-ia64.c:4064 +#: elf64-ia64-vms.c:3625 elfnn-ia64.c:4026 #, c-format msgid "%pB: @gprel relocation against dynamic symbol %s" msgstr "" -#: elf64-ia64-vms.c:3695 elf32-ia64.c:4127 elf64-ia64.c:4127 +#: elf64-ia64-vms.c:3684 elfnn-ia64.c:4089 #, c-format msgid "%pB: linking non-pic code in a position independent executable" msgstr "" -#: elf64-ia64-vms.c:3797 elf32-ia64.c:4265 elf64-ia64.c:4265 +#: elf64-ia64-vms.c:3786 elfnn-ia64.c:4227 #, c-format msgid "%pB: @internal branch to dynamic symbol %s" msgstr "" -#: elf64-ia64-vms.c:3800 elf32-ia64.c:4268 elf64-ia64.c:4268 +#: elf64-ia64-vms.c:3789 elfnn-ia64.c:4230 #, c-format msgid "%pB: speculation fixup to dynamic symbol %s" msgstr "" -#: elf64-ia64-vms.c:3803 elf32-ia64.c:4271 elf64-ia64.c:4271 +#: elf64-ia64-vms.c:3792 elfnn-ia64.c:4233 #, c-format msgid "%pB: @pcrel relocation against dynamic symbol %s" msgstr "" -#: elf64-ia64-vms.c:3927 elf32-ia64.c:4468 elf64-ia64.c:4468 +#: elf64-ia64-vms.c:3916 elfnn-ia64.c:4430 msgid "unsupported reloc" msgstr "" -#: elf64-ia64-vms.c:3964 elf32-ia64.c:4506 elf64-ia64.c:4506 +#: elf64-ia64-vms.c:3953 elfnn-ia64.c:4468 #, c-format msgid "" "%pB: missing TLS section for relocation %s against `%s' at %# in " "section `%pA'." msgstr "" -#: elf64-ia64-vms.c:3981 elf32-ia64.c:4523 elf64-ia64.c:4523 +#: elf64-ia64-vms.c:3970 elfnn-ia64.c:4485 #, c-format msgid "" "%pB: Can't relax br (%s) to `%s' at %# in section `%pA' with size " "%# (> 0x1000000)." msgstr "" -#: elf64-ia64-vms.c:4273 elf32-ia64.c:4781 elf64-ia64.c:4781 +#: elf64-ia64-vms.c:4266 elfnn-ia64.c:4746 #, c-format msgid "%pB: linking trap-on-NULL-dereference with non-trapping files" msgstr "" -#: elf64-ia64-vms.c:4282 elf32-ia64.c:4790 elf64-ia64.c:4790 +#: elf64-ia64-vms.c:4275 elfnn-ia64.c:4755 #, c-format msgid "%pB: linking big-endian files with little-endian files" msgstr "" -#: elf64-ia64-vms.c:4291 elf32-ia64.c:4799 elf64-ia64.c:4799 +#: elf64-ia64-vms.c:4284 elfnn-ia64.c:4764 #, c-format msgid "%pB: linking 64-bit files with 32-bit files" msgstr "" -#: elf64-ia64-vms.c:4300 elf32-ia64.c:4808 elf64-ia64.c:4808 +#: elf64-ia64-vms.c:4293 elfnn-ia64.c:4773 #, c-format msgid "%pB: linking constant-gp files with non-constant-gp files" msgstr "" -#: elf64-ia64-vms.c:4310 elf32-ia64.c:4818 elf64-ia64.c:4818 +#: elf64-ia64-vms.c:4303 elfnn-ia64.c:4783 #, c-format msgid "%pB: linking auto-pic files with non-auto-pic files" msgstr "" -#: elf64-ia64-vms.c:5153 elflink.c:4894 +#: elf64-ia64-vms.c:5150 elflink.c:5072 #, c-format msgid "" "warning: alignment %u of common symbol `%s' in %pB is greater than the " "alignment (%u) of its section %pA" msgstr "" -#: elf64-ia64-vms.c:5160 elflink.c:4901 +#: elf64-ia64-vms.c:5157 elflink.c:5079 #, c-format msgid "warning: alignment %u of symbol `%s' in %pB is smaller than %u in %pB" msgstr "" -#: elf64-ia64-vms.c:5176 elflink.c:4918 +#: elf64-ia64-vms.c:5173 elflink.c:5096 #, c-format msgid "" "warning: size of symbol `%s' changed from % in %pB to % in " "%pB" msgstr "" -#: elf64-mips.c:4098 +#: elf64-mips.c:4095 #, c-format msgid "%pB(%pA): relocation % has invalid symbol index %ld" msgstr "" @@ -4257,166 +4389,181 @@ msgid "%pB: directive LOCAL valid only with a register or absolute value" msgstr "" -#: elf64-mmix.c:1744 +#: elf64-mmix.c:1742 #, c-format msgid "" "%pB: LOCAL directive: register $% is not a local register; first " "global register is $%" msgstr "" -#: elf64-mmix.c:2173 +#: elf64-mmix.c:2167 #, c-format msgid "" "%pB: error: multiple definition of `%s'; start of %s is set in a earlier " "linked file" msgstr "" -#: elf64-mmix.c:2228 +#: elf64-mmix.c:2222 msgid "register section has contents\n" msgstr "" -#: elf64-mmix.c:2418 +#: elf64-mmix.c:2412 #, c-format msgid "" "internal inconsistency: remaining %lu != max %lu; please report this bug" msgstr "" -#: elf64-ppc.c:3827 +#: elf64-ppc.c:1342 +#, c-format +msgid "warning: %s should be used rather than %s" +msgstr "" + +#: elf64-ppc.c:4101 #, c-format msgid "symbol '%s' has invalid st_other for ABI version 1" msgstr "" -#: elf64-ppc.c:4002 +#: elf64-ppc.c:4281 #, c-format msgid "%pB .opd not allowed in ABI version %d" msgstr "" -#: elf64-ppc.c:4523 +#: elf64-ppc.c:4852 #, c-format msgid "%H: %s reloc unsupported in shared libraries and PIEs\n" msgstr "" -#: elf64-ppc.c:4919 +#: elf64-ppc.c:5260 #, c-format msgid "%pB uses unknown e_flags 0x%lx" msgstr "" -#: elf64-ppc.c:4927 +#: elf64-ppc.c:5268 #, c-format msgid "%pB: ABI version %ld is not compatible with ABI version %ld output" msgstr "" -#: elf64-ppc.c:4954 +#: elf64-ppc.c:5295 #, c-format msgid " [abiv%ld]" msgstr "" -#: elf64-ppc.c:6145 +#: elf64-ppc.c:6574 msgid "" "%P: copy reloc against `%pT' requires lazy plt linking; avoid setting " "LD_BIND_NOW=1 or upgrade gcc\n" msgstr "" -#: elf64-ppc.c:6417 +#: elf64-ppc.c:6841 #, c-format msgid "%pB: undefined symbol on R_PPC64_TOCSAVE relocation" msgstr "" -#: elf64-ppc.c:6644 +#: elf64-ppc.c:7089 #, c-format msgid "dynreloc miscount for %pB, section %pA" msgstr "" -#: elf64-ppc.c:6733 +#: elf64-ppc.c:7178 #, c-format msgid "%pB: .opd is not a regular array of opd entries" msgstr "" -#: elf64-ppc.c:6743 +#: elf64-ppc.c:7188 #, c-format msgid "%pB: unexpected reloc type %u in .opd section" msgstr "" -#: elf64-ppc.c:6765 +#: elf64-ppc.c:7210 #, c-format msgid "%pB: undefined sym `%s' in .opd section" msgstr "" -#: elf64-ppc.c:7249 +#: elf64-ppc.c:7697 msgid "" "warning: --plt-localentry is especially dangerous without ld.so support to " "detect ABI violations" msgstr "" -#: elf64-ppc.c:7499 +#: elf64-ppc.c:8017 msgid "%H __tls_get_addr lost arg, TLS optimization disabled\n" msgstr "" -#: elf64-ppc.c:7876 elf64-ppc.c:8513 +#: elf64-ppc.c:8417 elf64-ppc.c:9130 #, c-format msgid "%s defined on removed toc entry" msgstr "" -#: elf64-ppc.c:8241 +#: elf64-ppc.c:9087 #, c-format -msgid "%H: toc optimization is not supported for %s instruction\n" +msgid "%H: %s references optimized away TOC entry\n" msgstr "" -#: elf64-ppc.c:8470 +#: elf64-ppc.c:9308 #, c-format -msgid "%H: %s references optimized away TOC entry\n" +msgid "%H: got/toc optimization is not supported for %s instruction\n" msgstr "" -#: elf64-ppc.c:9301 +#: elf64-ppc.c:10135 #, c-format msgid "warning: discarding dynamic section %s" msgstr "" -#: elf64-ppc.c:10215 +#: elf64-ppc.c:11277 msgid "%P: cannot find opd entry toc for `%pT'\n" msgstr "" -#: elf64-ppc.c:10303 +#: elf64-ppc.c:11323 elf64-ppc.c:11867 +msgid "" +"%F%P: Could not assign group %pA target %pA to an output section. Retry " +"without --enable-non-contiguous-regions.\n" +msgstr "" + +#: elf64-ppc.c:11385 #, c-format msgid "long branch stub `%s' offset overflow" msgstr "" -#: elf64-ppc.c:10330 +#: elf64-ppc.c:11412 #, c-format msgid "can't find branch stub `%s'" msgstr "" -#: elf64-ppc.c:10394 elf64-ppc.c:10642 elf64-ppc.c:12791 +#: elf64-ppc.c:11476 elf64-ppc.c:11743 elf64-ppc.c:13972 #, c-format msgid "%P: linkage table error against `%pT'\n" msgstr "" -#: elf64-ppc.c:10820 +#: elf64-ppc.c:11939 #, c-format msgid "can't build branch stub `%s'" msgstr "" -#: elf64-ppc.c:11779 +#: elf64-ppc.c:12920 #, c-format msgid "%pB section %pA exceeds stub group size" msgstr "" -#: elf64-ppc.c:13189 elf64-ppc.c:13208 +#: elf64-ppc.c:14153 +msgid "__tls_get_addr call offset overflow" +msgstr "" + +#: elf64-ppc.c:14455 elf64-ppc.c:14474 #, c-format msgid "%s offset too large for .eh_frame sdata4 encoding" msgstr "" -#: elf64-ppc.c:13244 +#: elf64-ppc.c:14506 #, c-format msgid "linker stubs in %u group\n" msgid_plural "linker stubs in %u groups\n" msgstr[0] "" msgstr[1] "" -#: elf64-ppc.c:13248 +#: elf64-ppc.c:14513 #, c-format msgid "" -" branch %lu\n" +"%s branch %lu\n" " branch toc adj %lu\n" " branch notoc %lu\n" " branch both %lu\n" @@ -4431,188 +4578,197 @@ " global entry %lu" msgstr "" -#: elf64-ppc.c:13583 +#: elf64-ppc.c:14913 #, c-format msgid "%H: %s used with TLS symbol `%pT'\n" msgstr "" -#: elf64-ppc.c:13585 +#: elf64-ppc.c:14915 #, c-format msgid "%H: %s used with non-TLS symbol `%pT'\n" msgstr "" -#: elf64-ppc.c:14245 +#: elf64-ppc.c:15670 #, c-format msgid "%H: call to `%pT' lacks nop, can't restore toc; (plt call stub)\n" msgstr "" -#: elf64-ppc.c:14251 +#: elf64-ppc.c:15676 #, c-format msgid "" "%H: call to `%pT' lacks nop, can't restore toc; (toc save/adjust stub)\n" msgstr "" -#: elf64-ppc.c:14985 +#: elf64-ppc.c:16564 #, c-format msgid "%H: %s for indirect function `%pT' unsupported\n" msgstr "" -#: elf64-ppc.c:15097 +#: elf64-ppc.c:16649 +#, c-format +msgid "" +"%X%P: %pB: %s against %pT is not supported by glibc as a dynamic relocation\n" +msgstr "" + +#: elf64-ppc.c:16704 #, c-format msgid "%P: %pB: %s is not supported for `%pT'\n" msgstr "" -#: elf64-ppc.c:15326 +#: elf64-ppc.c:16963 #, c-format msgid "%H: error: %s not a multiple of %u\n" msgstr "" -#: elf64-ppc.c:15349 +#: elf64-ppc.c:16986 #, c-format msgid "%H: unresolvable %s against `%pT'\n" msgstr "" -#: elf64-ppc.c:15446 +#: elf64-ppc.c:17131 #, c-format msgid "%H: %s against `%pT': error %d\n" msgstr "" -#: elf64-s390.c:2576 +#: elf64-s390.c:2446 #, c-format msgid "" "%pB: `%s' non-PLT reloc for symbol defined in shared library and accessed " "from executable (rebuild file with -fPIC ?)" msgstr "" -#: elf64-sparc.c:109 elfcode.h:1471 -#, c-format -msgid "%pB(%pA): relocation %d has invalid symbol index %ld" -msgstr "" - -#: elf64-sparc.c:467 +#: elf64-sparc.c:478 #, c-format msgid "%pB: only registers %%g[2367] can be declared using STT_REGISTER" msgstr "" -#: elf64-sparc.c:488 +#: elf64-sparc.c:499 #, c-format msgid "register %%g%d used incompatibly: %s in %pB, previously %s in %pB" msgstr "" -#: elf64-sparc.c:512 +#: elf64-sparc.c:523 #, c-format msgid "symbol `%s' has differing types: REGISTER in %pB, previously %s in %pB" msgstr "" -#: elf64-sparc.c:559 +#: elf64-sparc.c:570 #, c-format msgid "Symbol `%s' has differing types: %s in %pB, previously REGISTER in %pB" msgstr "" -#: elf64-sparc.c:691 +#: elf64-sparc.c:702 #, c-format msgid "%pB: linking UltraSPARC specific with HAL specific code" msgstr "" -#: elf64-x86-64.c:1412 +#: elf64-x86-64.c:1417 msgid "hidden symbol " msgstr "" -#: elf64-x86-64.c:1415 +#: elf64-x86-64.c:1420 msgid "internal symbol " msgstr "" -#: elf64-x86-64.c:1418 elf64-x86-64.c:1422 +#: elf64-x86-64.c:1423 elf64-x86-64.c:1427 msgid "protected symbol " msgstr "" -#: elf64-x86-64.c:1424 +#: elf64-x86-64.c:1429 msgid "symbol " msgstr "" -#: elf64-x86-64.c:1425 elf64-x86-64.c:1435 -msgid "; recompile with -fPIC" -msgstr "" - -#: elf64-x86-64.c:1430 +#: elf64-x86-64.c:1435 msgid "undefined " msgstr "" -#: elf64-x86-64.c:1439 +#: elf64-x86-64.c:1445 msgid "a shared object" msgstr "" -#: elf64-x86-64.c:1441 +#: elf64-x86-64.c:1447 +msgid "; recompile with -fPIC" +msgstr "" + +#: elf64-x86-64.c:1452 msgid "a PIE object" msgstr "" -#: elf64-x86-64.c:1443 +#: elf64-x86-64.c:1454 msgid "a PDE object" msgstr "" -#: elf64-x86-64.c:1446 +#: elf64-x86-64.c:1456 +msgid "; recompile with -fPIE" +msgstr "" + +#: elf64-x86-64.c:1460 #, c-format msgid "%pB: relocation %s against %s%s`%s' can not be used when making %s%s" msgstr "" -#: elf64-x86-64.c:1931 +#: elf64-x86-64.c:1968 #, c-format msgid "%pB: relocation %s against symbol `%s' isn't supported in x32 mode" msgstr "" -#: elf64-x86-64.c:2073 +#: elf64-x86-64.c:2124 #, c-format msgid "%pB: '%s' accessed both as normal and thread local symbol" msgstr "" -#: elf64-x86-64.c:2696 /work/sources/binutils/current/bfd/elfnn-aarch64.c:5302 +#: elf64-x86-64.c:2747 elfnn-aarch64.c:5546 #, c-format msgid "" "%pB: relocation %s against STT_GNU_IFUNC symbol `%s' has non-zero addend: " "%" msgstr "" -#: elf64-x86-64.c:2934 +#: elf64-x86-64.c:2992 #, c-format msgid "" "%pB: relocation R_X86_64_GOTOFF64 against undefined %s `%s' can not be used " "when making a shared object" msgstr "" -#: elf64-x86-64.c:2948 +#: elf64-x86-64.c:3006 #, c-format msgid "" "%pB: relocation R_X86_64_GOTOFF64 against protected %s `%s' can not be used " "when making a shared object" msgstr "" -#: elf64-x86-64.c:3208 +#: elf64-x86-64.c:3283 #, c-format msgid "" "%pB: addend %s%#x in relocation %s against symbol `%s' at %# in " "section `%pA' is out of range" msgstr "" -#: elf64-x86-64.c:3885 +#: elf64-x86-64.c:3417 elflink.c:13267 +msgid "%F%P: corrupt input: %pB\n" +msgstr "" + +#: elf64-x86-64.c:4101 msgid "%F%P: failed to convert GOTPCREL relocation; relink with --no-relax\n" msgstr "" -#: elf64-x86-64.c:4043 +#: elf64-x86-64.c:4259 #, c-format msgid "%F%pB: PC-relative offset overflow in PLT entry for `%s'\n" msgstr "" -#: elf64-x86-64.c:4106 +#: elf64-x86-64.c:4322 #, c-format msgid "%F%pB: branch displacement overflow in PLT entry for `%s'\n" msgstr "" -#: elf64-x86-64.c:4159 +#: elf64-x86-64.c:4375 #, c-format msgid "%F%pB: PC-relative offset overflow in GOT PLT entry for `%s'\n" msgstr "" -#: elfcode.h:323 +#: elfcode.h:326 msgid "warning: %pB has a corrupt section with a size (%" msgstr "" @@ -4621,696 +4777,863 @@ msgid "warning: %pB has a corrupt string table index - ignoring" msgstr "" -#: elfcode.h:1212 +#: elfcode.h:1228 #, c-format msgid "%pB: version count (%) does not match symbol count (%ld)" msgstr "" -#: elfcore.h:300 +#: elfcore.h:308 #, c-format msgid "" "warning: %pB is truncated: expected core file size >= %, found: " "%" msgstr "" -#: elflink.c:1367 +#: elflink.c:1362 #, c-format msgid "" "%s: TLS definition in %pB section %pA mismatches non-TLS definition in %pB " "section %pA" msgstr "" -#: elflink.c:1373 +#: elflink.c:1368 #, c-format msgid "%s: TLS reference in %pB mismatches non-TLS reference in %pB" msgstr "" -#: elflink.c:1379 +#: elflink.c:1374 #, c-format msgid "" "%s: TLS definition in %pB section %pA mismatches non-TLS reference in %pB" msgstr "" -#: elflink.c:1385 +#: elflink.c:1380 #, c-format msgid "" "%s: TLS reference in %pB mismatches non-TLS definition in %pB section %pA" msgstr "" -#: elflink.c:2075 +#: elflink.c:2071 #, c-format msgid "%pB: unexpected redefinition of indirect versioned symbol `%s'" msgstr "" -#: elflink.c:2452 +#: elflink.c:2448 #, c-format msgid "%pB: version node not found for symbol %s" msgstr "" -#: elflink.c:2541 +#: elflink.c:2539 #, c-format msgid "" "%pB: bad reloc symbol index (%# >= %#lx) for offset %# in " "section `%pA'" msgstr "" -#: elflink.c:2553 +#: elflink.c:2551 #, c-format msgid "" "%pB: non-zero symbol index (%#) for offset %# in section `" "%pA' when the object file has no symbol table" msgstr "" -#: elflink.c:2744 +#: elflink.c:2740 #, c-format msgid "%pB: relocation size mismatch in %pB section %pA" msgstr "" -#: elflink.c:3066 +#: elflink.c:3069 #, c-format msgid "warning: type and size of dynamic symbol `%s' are not defined" msgstr "" -#: elflink.c:3128 +#: elflink.c:3129 msgid "%P: copy reloc against protected `%pT' is dangerous\n" msgstr "" -#: elflink.c:3932 +#: elflink.c:4064 #, c-format msgid "alternate ELF machine code found (%d) in %pB, expecting %d" msgstr "" -#: elflink.c:4598 +#: elflink.c:4534 +#, c-format +msgid "%pB: invalid version offset %lx (max %lx)" +msgstr "" + +#: elflink.c:4602 +#, c-format +msgid "%pB: %s local symbol at index %lu (>= sh_info of %lu)" +msgstr "" + +#: elflink.c:4750 +#, c-format +msgid "%pB: not enough version information" +msgstr "" + +#: elflink.c:4788 #, c-format msgid "%pB: %s: invalid version %u (max %d)" msgstr "" -#: elflink.c:4635 +#: elflink.c:4825 #, c-format msgid "%pB: %s: invalid needed version %d" msgstr "" -#: elflink.c:5054 +#: elflink.c:5231 #, c-format msgid "%pB: undefined reference to symbol '%s'" msgstr "" -#: elflink.c:6130 +#: elflink.c:6315 #, c-format msgid "%pB: stack size specified and %s set" msgstr "" -#: elflink.c:6134 +#: elflink.c:6319 #, c-format msgid "%pB: %s not absolute" msgstr "" -#: elflink.c:6331 +#: elflink.c:6516 #, c-format msgid "%s: undefined version: %s" msgstr "" -#: elflink.c:6902 +#: elflink.c:7088 #, c-format msgid "%pB: .preinit_array section is not allowed in DSO" msgstr "" -#: elflink.c:8359 +#: elflink.c:8602 #, c-format msgid "undefined %s reference in complex symbol: %s" msgstr "" -#: elflink.c:8514 +#: elflink.c:8757 #, c-format msgid "unknown operator '%c' in complex symbol" msgstr "" #. PR 21524: Let the user know if a symbol was removed by garbage collection. -#: elflink.c:8852 +#: elflink.c:9095 #, c-format msgid "" "%pB:%pA: error: relocation references symbol %s which was removed by garbage " "collection" msgstr "" -#: elflink.c:8855 +#: elflink.c:9098 #, c-format msgid "%pB:%pA: error: try relinking with --gc-keep-exported enabled" msgstr "" -#: elflink.c:9091 elflink.c:9109 elflink.c:9148 elflink.c:9166 +#: elflink.c:9343 elflink.c:9361 elflink.c:9400 elflink.c:9418 #, c-format msgid "%pB: unable to sort relocs - they are in more than one size" msgstr "" #. The section size is not divisible by either - #. something is wrong. -#: elflink.c:9125 elflink.c:9182 +#: elflink.c:9377 elflink.c:9434 #, c-format msgid "%pB: unable to sort relocs - they are of an unknown size" msgstr "" -#: elflink.c:9234 +#: elflink.c:9486 msgid "not enough memory to sort relocations" msgstr "" -#: elflink.c:9502 +#: elflink.c:9767 #, c-format msgid "%pB: too many sections: %d (>= %d)" msgstr "" -#: elflink.c:9782 +#: elflink.c:10043 #, c-format msgid "%pB: internal symbol `%s' in %pB is referenced by DSO" msgstr "" -#: elflink.c:9785 +#: elflink.c:10046 #, c-format msgid "%pB: hidden symbol `%s' in %pB is referenced by DSO" msgstr "" -#: elflink.c:9788 +#: elflink.c:10049 #, c-format msgid "%pB: local symbol `%s' in %pB is referenced by DSO" msgstr "" -#: elflink.c:9874 +#: elflink.c:10135 #, c-format msgid "%pB: could not find output section %pA for input section %pA" msgstr "" -#: elflink.c:10028 +#: elflink.c:10289 #, c-format msgid "%pB: protected symbol `%s' isn't defined" msgstr "" -#: elflink.c:10031 +#: elflink.c:10292 #, c-format msgid "%pB: internal symbol `%s' isn't defined" msgstr "" -#: elflink.c:10034 +#: elflink.c:10295 #, c-format msgid "%pB: hidden symbol `%s' isn't defined" msgstr "" -#: elflink.c:10066 +#: elflink.c:10327 #, c-format msgid "%pB: no symbol version section for versioned symbol `%s'" msgstr "" -#: elflink.c:10679 +#: elflink.c:10699 +#, c-format +msgid "" +"warning: --enable-non-contiguous-regions discards section `%s' from '%s'\n" +msgstr "" + +#: elflink.c:10951 #, c-format msgid "error: %pB: size of section %pA is not multiple of address size" msgstr "" -#: elflink.c:10724 +#: elflink.c:10996 #, c-format msgid "" "error: %pB contains a reloc (%#) for section %pA that references a " "non-existent global symbol" msgstr "" -#: elflink.c:11484 +#: elflink.c:11739 #, c-format msgid "" "%pA has both ordered [`%pA' in %pB] and unordered [`%pA' in %pB] sections" msgstr "" -#: elflink.c:11490 +#: elflink.c:11745 #, c-format msgid "%pA has both ordered and unordered sections" msgstr "" -#: elflink.c:11592 +#: elflink.c:11851 #, c-format msgid "%pB: no symbol found for import library" msgstr "" -#: elflink.c:12225 +#: elflink.c:12488 #, c-format msgid "%pB: file class %s incompatible with %s" msgstr "" -#: elflink.c:12442 +#: elflink.c:12704 #, c-format msgid "%pB: failed to generate import library" msgstr "" -#: elflink.c:12561 +#: elflink.c:12823 #, c-format msgid "warning: %s section has zero size" msgstr "" -#: elflink.c:12609 +#: elflink.c:12871 #, c-format msgid "warning: section '%s' is being made into a note" msgstr "" -#: elflink.c:12701 +#: elflink.c:12964 msgid "%P%X: read-only segment has dynamic relocations\n" msgstr "" -#: elflink.c:12704 -msgid "%P: warning: creating a DT_TEXTREL in a shared object\n" +#: elflink.c:12967 +msgid "%P: warning: creating DT_TEXTREL in a shared object\n" msgstr "" -#: elflink.c:12829 -msgid "%P%X: can not read symbols: %E\n" +#: elflink.c:12970 +msgid "%P: warning: creating DT_TEXTREL in a PIE\n" msgstr "" -#: elflink.c:13002 -msgid "%F%P: corrupt input: %pB\n" +#: elflink.c:13095 +msgid "%P%X: can not read symbols: %E\n" msgstr "" -#: elflink.c:13668 +#: elflink.c:13500 +msgid "%F%P: %pB(%pA): error: need linked-to section for --gc-sections\n" +msgstr "" + +#: elflink.c:13961 #, c-format msgid "%pB: %pA+%#: no symbol found for INHERIT" msgstr "" -#: elflink.c:13844 +#: elflink.c:14002 +#, c-format +msgid "%pB: section '%pA': corrupt VTENTRY entry" +msgstr "" + +#: elflink.c:14145 #, c-format msgid "unrecognized INPUT_SECTION_FLAG %s\n" msgstr "" -#: elfxx-mips.c:1450 +#: elflink.c:14891 +#, c-format +msgid "%P: %pB: warning: relocation against `%s' in read-only section `%pA'\n" +msgstr "" + +#: elflink.c:14980 +msgid "" +"%P: warning: GNU indirect functions with DT_TEXTREL may result in a segfault " +"at runtime; recompile with %s\n" +msgstr "" + +#: elfxx-aarch64.c:477 +#, c-format +msgid "" +"%pB: warning: Weak TLS is implementation defined and may not work as expected" +msgstr "" + +#: elfxx-aarch64.c:738 elfnn-aarch64.c:9902 elfnn-aarch64.c:9909 +#, c-format +msgid "" +"%pB: warning: BTI turned on by -z force-bti when all inputs do not have BTI " +"in NOTE section." +msgstr "" + +#: elfxx-aarch64.c:758 elfxx-x86.c:2554 +msgid "%F%P: failed to create GNU property section\n" +msgstr "" + +#: elfxx-aarch64.c:762 elfxx-x86.c:2559 +#, c-format +msgid "%F%pA: failed to align section\n" +msgstr "" + +#: elfxx-aarch64.c:812 +#, c-format +msgid "error: %pB: " +msgstr "" + +#: elfxx-mips.c:1507 msgid "static procedure (no name)" msgstr "" -#: elfxx-mips.c:5718 +#: elfxx-mips.c:5782 msgid "MIPS16 and microMIPS functions cannot call each other" msgstr "" -#: elfxx-mips.c:6485 +#: elfxx-mips.c:6547 msgid "%X%H: unsupported JALX to the same ISA mode\n" msgstr "" -#: elfxx-mips.c:6518 +#: elfxx-mips.c:6580 msgid "" "%X%H: unsupported jump between ISA modes; consider recompiling with " "interlinking enabled\n" msgstr "" -#: elfxx-mips.c:6563 +#: elfxx-mips.c:6625 msgid "" "%X%H: cannot convert branch between ISA modes to JALX: relocation out of " "range\n" msgstr "" -#: elfxx-mips.c:6575 +#: elfxx-mips.c:6637 msgid "%X%H: unsupported branch between ISA modes\n" msgstr "" -#: elfxx-mips.c:7223 +#: elfxx-mips.c:7286 #, c-format msgid "" "%pB: incorrect `.reginfo' section size; expected %, got %" msgstr "" -#: elfxx-mips.c:7267 elfxx-mips.c:7502 +#: elfxx-mips.c:7330 elfxx-mips.c:7567 #, c-format msgid "%pB: warning: bad `%s' option size %u smaller than its header" msgstr "" -#: elfxx-mips.c:8300 elfxx-mips.c:8426 +#: elfxx-mips.c:8374 elfxx-mips.c:8500 #, c-format msgid "" "%pB: warning: cannot determine the target function for stub section `%s'" msgstr "" -#: elfxx-mips.c:8558 +#: elfxx-mips.c:8632 #, c-format msgid "%pB: malformed reloc detected for section %s" msgstr "" -#: elfxx-mips.c:8658 +#: elfxx-mips.c:8731 #, c-format msgid "%pB: GOT reloc at %# not expected in executables" msgstr "" -#: elfxx-mips.c:8796 +#: elfxx-mips.c:8871 #, c-format msgid "%pB: CALL16 reloc at %# not against global symbol" msgstr "" -#: elfxx-mips.c:9086 +#: elfxx-mips.c:9174 #, 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:9422 +#: elfxx-mips.c:9300 +#, c-format +msgid "IFUNC symbol %s in dynamic symbol table - IFUNCS are not supported" +msgstr "" + +#: elfxx-mips.c:9303 +#, c-format +msgid "non-dynamic symbol %s in dynamic symbol table" +msgstr "" + +#: elfxx-mips.c:9523 #, c-format msgid "non-dynamic relocations refer to dynamic symbol %s" msgstr "" -#: elfxx-mips.c:10350 +#: elfxx-mips.c:10457 #, c-format msgid "" "%pB: can't find matching LO16 reloc against `%s' for %s at %# in " "section `%pA'" msgstr "" -#: elfxx-mips.c:10490 +#: elfxx-mips.c:10597 msgid "" "small-data section exceeds 64KB; lower small-data size limit (see option -G)" msgstr "" -#: elfxx-mips.c:10509 +#: elfxx-mips.c:10616 msgid "cannot convert a jump to JALX for a non-word-aligned address" msgstr "" -#: elfxx-mips.c:10512 +#: elfxx-mips.c:10619 msgid "jump to a non-word-aligned address" msgstr "" -#: elfxx-mips.c:10513 +#: elfxx-mips.c:10620 msgid "jump to a non-instruction-aligned address" msgstr "" -#: elfxx-mips.c:10516 +#: elfxx-mips.c:10623 msgid "cannot convert a branch to JALX for a non-word-aligned address" msgstr "" -#: elfxx-mips.c:10518 +#: elfxx-mips.c:10625 msgid "branch to a non-instruction-aligned address" msgstr "" -#: elfxx-mips.c:10520 +#: elfxx-mips.c:10627 msgid "PC-relative load from unaligned address" msgstr "" -#: elfxx-mips.c:10798 +#: elfxx-mips.c:10927 #, c-format msgid "" "%pB: `%pA' entry VMA of %# outside the 32-bit range supported; " "consider using `-Ttext-segment=...'" msgstr "" -#: elfxx-mips.c:10911 elfxx-mips.c:11484 +#: elfxx-mips.c:11042 elfxx-mips.c:11629 #, c-format msgid "%pB: `%pA' offset of % from `%pA' beyond the range of ADDIUPC" msgstr "" -#: elfxx-mips.c:11456 +#: elfxx-mips.c:11601 #, c-format msgid "" "%pB: `%pA' start VMA of %# outside the 32-bit range supported; " "consider using `-Ttext-segment=...'" msgstr "" -#: elfxx-mips.c:14397 +#: elfxx-mips.c:14556 #, c-format msgid "%pB: unknown architecture %s" msgstr "" -#: elfxx-mips.c:14931 +#: elfxx-mips.c:15090 #, c-format msgid "%pB: illegal section name `%pA'" msgstr "" -#: elfxx-mips.c:15208 +#: elfxx-mips.c:15367 #, c-format msgid "%pB: warning: linking abicalls files with non-abicalls files" msgstr "" -#: elfxx-mips.c:15225 +#: elfxx-mips.c:15384 #, c-format msgid "%pB: linking 32-bit code with 64-bit code" msgstr "" -#: elfxx-mips.c:15257 elfxx-mips.c:15323 elfxx-mips.c:15338 +#: elfxx-mips.c:15416 elfxx-mips.c:15482 elfxx-mips.c:15497 #, c-format msgid "%pB: linking %s module with previous %s modules" msgstr "" -#: elfxx-mips.c:15281 +#: elfxx-mips.c:15440 #, c-format msgid "%pB: ABI mismatch: linking %s module with previous %s modules" msgstr "" -#: elfxx-mips.c:15306 +#: elfxx-mips.c:15465 #, c-format msgid "%pB: ASE mismatch: linking %s module with previous %s modules" msgstr "" -#: elfxx-mips.c:15440 +#: elfxx-mips.c:15599 #, 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:15446 +#: elfxx-mips.c:15605 #, c-format msgid "" "warning: %pB uses unknown floating point ABI %d (set by %pB), %pB uses %s" msgstr "" -#: elfxx-mips.c:15452 +#: elfxx-mips.c:15611 #, c-format msgid "" "warning: %pB uses %s (set by %pB), %pB uses unknown floating point ABI %d" msgstr "" -#: elfxx-mips.c:15466 +#: elfxx-mips.c:15625 #, c-format msgid "warning: %pB uses %s (set by %pB), %pB uses %s" msgstr "" -#: elfxx-mips.c:15485 +#: elfxx-mips.c:15644 #, c-format msgid "warning: %pB uses %s (set by %pB), %pB uses unknown MSA ABI %d" msgstr "" -#: elfxx-mips.c:15497 +#: elfxx-mips.c:15656 #, c-format msgid "warning: %pB uses unknown MSA ABI %d (set by %pB), %pB uses %s" msgstr "" -#: elfxx-mips.c:15506 +#: elfxx-mips.c:15665 #, c-format msgid "" "warning: %pB uses unknown MSA ABI %d (set by %pB), %pB uses unknown MSA ABI " "%d" msgstr "" -#: elfxx-mips.c:15568 +#: elfxx-mips.c:15727 #, c-format msgid "%pB: endianness incompatible with that of the selected emulation" msgstr "" -#: elfxx-mips.c:15582 +#: elfxx-mips.c:15741 #, c-format msgid "%pB: ABI is incompatible with that of the selected emulation" msgstr "" -#: elfxx-mips.c:15634 +#: elfxx-mips.c:15794 #, c-format msgid "%pB: warning: inconsistent ISA between e_flags and .MIPS.abiflags" msgstr "" -#: elfxx-mips.c:15639 +#: elfxx-mips.c:15799 #, c-format msgid "" "%pB: warning: inconsistent FP ABI between .gnu.attributes and .MIPS.abiflags" msgstr "" -#: elfxx-mips.c:15643 +#: elfxx-mips.c:15803 #, c-format msgid "%pB: warning: inconsistent ASEs between e_flags and .MIPS.abiflags" msgstr "" -#: elfxx-mips.c:15650 +#: elfxx-mips.c:15810 #, c-format msgid "" "%pB: warning: inconsistent ISA extensions between e_flags and .MIPS.abiflags" msgstr "" -#: elfxx-mips.c:15654 +#: elfxx-mips.c:15814 #, c-format msgid "" "%pB: warning: unexpected flag in the flags2 field of .MIPS.abiflags (0x%lx)" msgstr "" -#: elfxx-mips.c:15843 +#: elfxx-mips.c:16005 msgid "-mips32r2 -mfp64 (12 callee-saved)" msgstr "" -#: elfxx-mips.c:15905 elfxx-mips.c:15916 +#: elfxx-mips.c:16067 elfxx-mips.c:16078 msgid "None" msgstr "" -#: elfxx-mips.c:15907 elfxx-mips.c:15976 +#: elfxx-mips.c:16069 elfxx-mips.c:16138 msgid "Unknown" msgstr "" -#: elfxx-mips.c:15987 +#: elfxx-mips.c:16149 #, c-format msgid "Hard or soft float\n" msgstr "" -#: elfxx-mips.c:15990 +#: elfxx-mips.c:16152 #, c-format msgid "Hard float (double precision)\n" msgstr "" -#: elfxx-mips.c:15993 +#: elfxx-mips.c:16155 #, c-format msgid "Hard float (single precision)\n" msgstr "" -#: elfxx-mips.c:15996 +#: elfxx-mips.c:16158 #, c-format msgid "Soft float\n" msgstr "" -#: elfxx-mips.c:15999 +#: elfxx-mips.c:16161 #, c-format msgid "Hard float (MIPS32r2 64-bit FPU 12 callee-saved)\n" msgstr "" -#: elfxx-mips.c:16002 +#: elfxx-mips.c:16164 #, c-format msgid "Hard float (32-bit CPU, Any FPU)\n" msgstr "" -#: elfxx-mips.c:16005 +#: elfxx-mips.c:16167 #, c-format msgid "Hard float (32-bit CPU, 64-bit FPU)\n" msgstr "" -#: elfxx-mips.c:16008 +#: elfxx-mips.c:16170 #, c-format msgid "Hard float compat (32-bit CPU, 64-bit FPU)\n" msgstr "" -#: elfxx-mips.c:16040 +#: elfxx-mips.c:16202 #, c-format msgid " [abi=O32]" msgstr "" -#: elfxx-mips.c:16042 +#: elfxx-mips.c:16204 #, c-format msgid " [abi=O64]" msgstr "" -#: elfxx-mips.c:16044 +#: elfxx-mips.c:16206 #, c-format msgid " [abi=EABI32]" msgstr "" -#: elfxx-mips.c:16046 +#: elfxx-mips.c:16208 #, c-format msgid " [abi=EABI64]" msgstr "" -#: elfxx-mips.c:16048 +#: elfxx-mips.c:16210 #, c-format msgid " [abi unknown]" msgstr "" -#: elfxx-mips.c:16050 +#: elfxx-mips.c:16212 #, c-format msgid " [abi=N32]" msgstr "" -#: elfxx-mips.c:16052 +#: elfxx-mips.c:16214 #, c-format msgid " [abi=64]" msgstr "" -#: elfxx-mips.c:16054 +#: elfxx-mips.c:16216 #, c-format msgid " [no abi set]" msgstr "" -#: elfxx-mips.c:16079 +#: elfxx-mips.c:16241 #, c-format msgid " [unknown ISA]" msgstr "" -#: elfxx-mips.c:16099 +#: elfxx-mips.c:16261 #, c-format msgid " [not 32bitmode]" msgstr "" -#: elfxx-sparc.c:3113 /work/sources/binutils/current/bfd/elfnn-aarch64.c:5286 +#: elfxx-riscv.c:1063 +#, c-format +msgid "-march=%s: Expect number after `%dp'." +msgstr "" + +#: elfxx-riscv.c:1174 +#, c-format +msgid "-march=%s: rv%de is not a valid base ISA" +msgstr "" + +#: elfxx-riscv.c:1214 +#, c-format +msgid "-march=%s: first ISA subset must be `e', `i' or `g'" +msgstr "" + +#: elfxx-riscv.c:1242 +#, c-format +msgid "-march=%s: unsupported ISA subset `%c'" +msgstr "" + +#: elfxx-riscv.c:1245 +#, c-format +msgid "-march=%s: ISA string is not in canonical order. `%c'" +msgstr "" + +#: elfxx-riscv.c:1364 +#, c-format +msgid "-march=%s: Invalid or unknown %s ISA extension: '%s'" +msgstr "" + +#: elfxx-riscv.c:1375 +#, c-format +msgid "-march=%s: Duplicate %s ISA extension: '%s'" +msgstr "" + +#: elfxx-riscv.c:1386 #, c-format msgid "" -"%pB: relocation %s against STT_GNU_IFUNC symbol `%s' isn't handled by %s" +"-march=%s: %s ISA extension not in alphabetical order: '%s' must come before " +"'%s'." msgstr "" -#: elfxx-tilegx.c:4254 +#: elfxx-riscv.c:1407 #, c-format -msgid "%pB: cannot link together %s and %s objects" +msgid "-march=%s: %s must separate with _" msgstr "" -#: elfxx-x86.c:578 +#: elfxx-riscv.c:1523 #, c-format -msgid "%P: %pB: warning: relocation against `%s' in read-only section `%pA'\n" +msgid "-march=%s: ISA string must begin with rv32 or rv64" msgstr "" -#: elfxx-x86.c:1027 -msgid "%P: %pB: warning: relocation in read-only section `%pA'\n" +#: elfxx-riscv.c:1544 +#, c-format +msgid "-march=%s: unexpected ISA string at end: %s" +msgstr "" + +#: elfxx-riscv.c:1553 +#, c-format +msgid "-march=%s: rv32e does not support the `f' extension" msgstr "" -#: elfxx-x86.c:1383 +#: elfxx-riscv.c:1562 +#, c-format +msgid "-march=%s: `d' extension requires `f' extension" +msgstr "" + +#: elfxx-riscv.c:1571 +#, c-format +msgid "-march=%s: `q' extension requires `d' extension" +msgstr "" + +#: elfxx-riscv.c:1579 +#, c-format +msgid "-march=%s: rv32 does not support the `q' extension" +msgstr "" + +#: elfxx-sparc.c:3002 elfnn-aarch64.c:5530 +#, c-format msgid "" -"%P%X: read-only segment has dynamic IFUNC relocations; recompile with -fPIC\n" +"%pB: relocation %s against STT_GNU_IFUNC symbol `%s' isn't handled by %s" msgstr "" -#: elfxx-x86.c:2384 +#: elfxx-tilegx.c:4128 #, c-format -msgid "error: %pB: " +msgid "%pB: cannot link together %s and %s objects" msgstr "" -#: elfxx-x86.c:2609 -msgid "%F%P: failed to create GNU property section\n" +#: elfxx-x86.c:976 +#, c-format +msgid "" +"%F%P: %pB: relocation %s against absolute symbol `%s' in section `%pA' is " +"disallowed\n" +msgstr "" + +#: elfxx-x86.c:1058 +msgid "%P: %pB: warning: relocation in read-only section `%pA'\n" msgstr "" -#: elfxx-x86.c:2614 +#: elfxx-x86.c:2314 #, c-format -msgid "%F%pA: failed to align section\n" +msgid "error: %pB: " +msgstr "" + +#: elfxx-x86.c:2580 +msgid "%P: %pB: warning: missing %s\n" +msgstr "" + +#: elfxx-x86.c:2582 +msgid "%X%P: %pB: error: missing %s\n" +msgstr "" + +#: elfxx-x86.c:2605 +msgid "IBT and SHSTK properties" +msgstr "" + +#: elfxx-x86.c:2607 +msgid "IBT property" msgstr "" -#: elfxx-x86.c:2760 +#: elfxx-x86.c:2609 +msgid "SHSTK property" +msgstr "" + +#: elfxx-x86.c:2753 msgid "%F%P: failed to create VxWorks dynamic sections\n" msgstr "" -#: elfxx-x86.c:2769 +#: elfxx-x86.c:2762 msgid "%F%P: failed to create GOT sections\n" msgstr "" -#: elfxx-x86.c:2787 +#: elfxx-x86.c:2780 msgid "%F%P: failed to create ifunc sections\n" msgstr "" -#: elfxx-x86.c:2828 +#: elfxx-x86.c:2817 msgid "%F%P: failed to create GOT PLT section\n" msgstr "" -#: elfxx-x86.c:2849 +#: elfxx-x86.c:2836 msgid "%F%P: failed to create IBT-enabled PLT section\n" msgstr "" -#: elfxx-x86.c:2864 +#: elfxx-x86.c:2850 msgid "%F%P: failed to create BND PLT section\n" msgstr "" -#: elfxx-x86.c:2885 +#: elfxx-x86.c:2870 msgid "%F%P: failed to create PLT .eh_frame section\n" msgstr "" -#: elfxx-x86.c:2898 +#: elfxx-x86.c:2883 msgid "%F%P: failed to create GOT PLT .eh_frame section\n" msgstr "" -#: elfxx-x86.c:2912 +#: elfxx-x86.c:2897 msgid "%F%P: failed to create the second PLT .eh_frame section\n" msgstr "" +#: elfxx-x86.c:2939 +msgid "%X%P: attempted static link of dynamic object `%pB'\n" +msgstr "" + #: ihex.c:230 #, c-format msgid "%pB:%d: unexpected character `%s' in Intel Hex file" @@ -5321,67 +5644,67 @@ msgid "%pB:%u: bad checksum in Intel Hex file (expected %u, found %u)" msgstr "" -#: ihex.c:394 +#: ihex.c:393 #, c-format msgid "%pB:%u: bad extended address record length in Intel Hex file" msgstr "" -#: ihex.c:412 +#: ihex.c:411 #, c-format msgid "%pB:%u: bad extended start address length in Intel Hex file" msgstr "" -#: ihex.c:430 +#: ihex.c:429 #, c-format msgid "%pB:%u: bad extended linear address record length in Intel Hex file" msgstr "" -#: ihex.c:448 +#: ihex.c:447 #, c-format msgid "%pB:%u: bad extended linear start address length in Intel Hex file" msgstr "" -#: ihex.c:466 +#: ihex.c:465 #, c-format msgid "%pB:%u: unrecognized ihex type %u in Intel Hex file" msgstr "" -#: ihex.c:585 +#: ihex.c:581 #, c-format msgid "%pB: internal error in ihex_read_section" msgstr "" -#: ihex.c:619 +#: ihex.c:614 #, c-format msgid "%pB: bad section length in ihex_read_section" msgstr "" -#: ihex.c:793 +#: ihex.c:785 #, c-format msgid "%pB 64-bit address %# out of range for Intel Hex file" msgstr "" -#: ihex.c:852 +#: ihex.c:843 #, c-format msgid "%pB: address %# out of range for Intel Hex file" msgstr "" -#: libbfd.c:937 +#: libbfd.c:884 #, c-format msgid "%pB: unable to get decompressed section %pA" msgstr "" -#: libbfd.c:1101 +#: libbfd.c:1048 #, c-format msgid "Deprecated %s called at %s line %d in %s\n" msgstr "" -#: libbfd.c:1104 +#: libbfd.c:1051 #, c-format msgid "Deprecated %s called\n" msgstr "" -#: linker.c:1697 +#: linker.c:1696 #, c-format msgid "%pB: indirect symbol `%s' to `%s' is a loop" msgstr "" @@ -5391,187 +5714,222 @@ msgid "attempt to do relocatable link with %s input and %s output" msgstr "" -#: linker.c:2853 +#: linker.c:2852 #, c-format msgid "%pB: ignoring duplicate section `%pA'\n" msgstr "" -#: linker.c:2863 linker.c:2873 +#: linker.c:2862 linker.c:2872 #, c-format msgid "%pB: duplicate section `%pA' has different size\n" msgstr "" -#: linker.c:2882 linker.c:2888 +#: linker.c:2881 linker.c:2887 #, c-format msgid "%pB: could not read contents of section `%pA'\n" msgstr "" -#: linker.c:2893 +#: linker.c:2892 #, c-format msgid "%pB: duplicate section `%pA' has different contents\n" msgstr "" -#: linker.c:3407 +#: linker.c:3404 #, c-format msgid "%pB: compiled for a big endian system and target is little endian" msgstr "" -#: linker.c:3410 +#: linker.c:3407 #, c-format msgid "%pB: compiled for a little endian system and target is big endian" msgstr "" -#: mach-o.c:632 +#: mach-o-arm.c:172 +msgid "malformed mach-o ARM reloc pair: reloc is first reloc" +msgstr "" + +#: mach-o-arm.c:188 +#, c-format +msgid "malformed mach-o ARM reloc pair: invalid length: %d" +msgstr "" + +#: mach-o-arm.c:203 +#, c-format +msgid "malformed mach-o ARM sectdiff reloc: invalid length: %d" +msgstr "" + +#: mach-o-arm.c:218 +#, c-format +msgid "malformed mach-o ARM local sectdiff reloc: invalid length: %d" +msgstr "" + +#: mach-o-arm.c:233 +#, c-format +msgid "malformed mach-o ARM half sectdiff reloc: invalid length: %d" +msgstr "" + +#: mach-o-arm.c:265 +#, c-format +msgid "malformed mach-o ARM vanilla reloc: invalid length: %d (pcrel: %d)" +msgstr "" + +#: mach-o-arm.c:329 +#, c-format +msgid "malformed mach-o ARM reloc: unknown reloc type: %d" +msgstr "" + +#: mach-o.c:633 #, c-format msgid "" msgstr "" -#: mach-o.c:687 +#: mach-o.c:688 msgid " ()" msgstr "" -#: mach-o.c:698 +#: mach-o.c:699 #, c-format msgid " MACH-O header:\n" msgstr "" -#: mach-o.c:699 +#: mach-o.c:700 #, c-format msgid " magic: %#lx\n" msgstr "" -#: mach-o.c:700 +#: mach-o.c:701 #, c-format msgid " cputype: %#lx (%s)\n" msgstr "" -#: mach-o.c:702 +#: mach-o.c:703 #, c-format msgid " cpusubtype: %#lx%s\n" msgstr "" -#: mach-o.c:704 +#: mach-o.c:705 #, c-format msgid " filetype: %#lx\n" msgstr "" -#: mach-o.c:705 +#: mach-o.c:706 #, c-format msgid " ncmds: %#lx\n" msgstr "" -#: mach-o.c:706 +#: mach-o.c:707 #, c-format msgid " sizeocmds: %#lx\n" msgstr "" -#: mach-o.c:707 +#: mach-o.c:708 #, c-format msgid " flags: %#lx\n" msgstr "" -#: mach-o.c:708 +#: mach-o.c:709 #, c-format msgid " version: %x\n" msgstr "" #. Urg - what has happened ? -#: mach-o.c:743 +#: mach-o.c:744 #, c-format msgid "incompatible cputypes in mach-o files: %ld vs %ld" msgstr "" -#: mach-o.c:912 +#: mach-o.c:913 msgid "bfd_mach_o_canonicalize_symtab: unable to load symbols" msgstr "" -#: mach-o.c:2108 +#: mach-o.c:1505 +msgid "" +"malformed mach-o reloc: section index is greater than the number of sections" +msgstr "" + +#: mach-o.c:2139 msgid "" "sorry: modtab, toc and extrefsyms are not yet implemented for dysymtab " "commands." msgstr "" -#: mach-o.c:2554 +#: mach-o.c:2587 #, c-format msgid "mach-o: there are too many sections (%u) maximum is 255,\n" msgstr "" -#: mach-o.c:2661 +#: mach-o.c:2694 #, c-format msgid "unable to allocate data for load command %#x" msgstr "" -#: mach-o.c:2766 +#: mach-o.c:2799 #, c-format msgid "unable to write unknown load command %#x" msgstr "" -#: mach-o.c:2950 +#: mach-o.c:2983 #, c-format msgid "section address (%#) below start of segment (%#)" msgstr "" -#: mach-o.c:3092 +#: mach-o.c:3125 #, c-format msgid "unable to layout unknown load command %#x" msgstr "" -#: mach-o.c:3628 +#: mach-o.c:3660 #, c-format msgid "" "bfd_mach_o_read_section_32: overlarge alignment value: %#lx, using 32 instead" msgstr "" -#: mach-o.c:3671 +#: mach-o.c:3703 #, c-format msgid "" "bfd_mach_o_read_section_64: overlarge alignment value: %#lx, using 32 instead" msgstr "" -#: mach-o.c:3722 +#: mach-o.c:3754 #, c-format msgid "bfd_mach_o_read_symtab_symbol: unable to read %d bytes at %u" msgstr "" -#: mach-o.c:3741 +#: mach-o.c:3773 #, c-format msgid "bfd_mach_o_read_symtab_symbol: name out of range (%lu >= %u)" msgstr "" -#: mach-o.c:3824 +#: mach-o.c:3856 #, c-format msgid "" "bfd_mach_o_read_symtab_symbol: symbol \"%s\" specified invalid section %d " "(max %lu): setting to undefined" msgstr "" -#: mach-o.c:3843 +#: mach-o.c:3875 #, c-format msgid "" "bfd_mach_o_read_symtab_symbol: symbol \"%s\" specified invalid type field 0x" "%x: setting to undefined" msgstr "" -#: mach-o.c:3920 -msgid "bfd_mach_o_read_symtab_symbols: unable to allocate memory for symbols" -msgstr "" - -#: mach-o.c:4931 +#: mach-o.c:5064 #, c-format msgid "%pB: unknown load command %#x" msgstr "" -#: mach-o.c:5122 +#: mach-o.c:5263 #, c-format msgid "bfd_mach_o_scan: unknown architecture 0x%lx/0x%lx" msgstr "" -#: mach-o.c:5227 +#: mach-o.c:5385 #, c-format msgid "unknown header byte-order value %#x" msgstr "" -#: merge.c:878 +#: merge.c:895 #, c-format msgid "%pB: access beyond end of merged section (%)" msgstr "" @@ -5586,138 +5944,138 @@ msgid "%pB: no core to allocate a symbol %d bytes long" msgstr "" -#: mmo.c:955 +#: mmo.c:952 #, c-format msgid "%pB: attempt to emit contents at non-multiple-of-4 address %#" msgstr "" -#: mmo.c:1252 +#: mmo.c:1248 #, c-format msgid "%pB: invalid mmo file: initialization value for $255 is not `Main'\n" msgstr "" -#: mmo.c:1399 +#: mmo.c:1395 #, c-format msgid "" "%pB: unsupported wide character sequence 0x%02X 0x%02X after symbol name " "starting with `%s'\n" msgstr "" -#: mmo.c:1633 +#: mmo.c:1628 #, c-format msgid "%pB: invalid mmo file: unsupported lopcode `%d'\n" msgstr "" -#: mmo.c:1644 +#: mmo.c:1639 #, c-format msgid "%pB: invalid mmo file: expected YZ = 1 got YZ = %d for lop_quote\n" msgstr "" -#: mmo.c:1682 +#: mmo.c:1679 #, c-format msgid "" "%pB: invalid mmo file: expected z = 1 or z = 2, got z = %d for lop_loc\n" msgstr "" -#: mmo.c:1733 +#: mmo.c:1730 #, c-format msgid "" "%pB: invalid mmo file: expected z = 1 or z = 2, got z = %d for lop_fixo\n" msgstr "" -#: mmo.c:1774 +#: mmo.c:1771 #, c-format msgid "%pB: invalid mmo file: expected y = 0, got y = %d for lop_fixrx\n" msgstr "" -#: mmo.c:1785 +#: mmo.c:1782 #, c-format msgid "" "%pB: invalid mmo file: expected z = 16 or z = 24, got z = %d for lop_fixrx\n" msgstr "" -#: mmo.c:1810 +#: mmo.c:1807 #, c-format msgid "" "%pB: invalid mmo file: leading byte of operand word must be 0 or 1, got %d " "for lop_fixrx\n" msgstr "" -#: mmo.c:1835 +#: mmo.c:1832 #, c-format msgid "%pB: cannot allocate file name for file number %d, %d bytes\n" msgstr "" -#: mmo.c:1857 +#: mmo.c:1854 #, c-format msgid "" "%pB: invalid mmo file: file number %d `%s', was already entered as `%s'\n" msgstr "" -#: mmo.c:1871 +#: mmo.c:1868 #, c-format msgid "" "%pB: invalid mmo file: file name for number %d was not specified before use\n" msgstr "" -#: mmo.c:1978 +#: mmo.c:1975 #, c-format msgid "" "%pB: invalid mmo file: fields y and z of lop_stab non-zero, y: %d, z: %d\n" msgstr "" -#: mmo.c:2015 +#: mmo.c:2012 #, c-format msgid "%pB: invalid mmo file: lop_end not last item in file\n" msgstr "" -#: mmo.c:2029 +#: mmo.c:2026 #, c-format msgid "" "%pB: invalid mmo file: YZ of lop_end (%ld) not equal to the number of tetras " "to the preceding lop_stab (%ld)\n" msgstr "" -#: mmo.c:2740 +#: mmo.c:2735 #, c-format msgid "%pB: invalid symbol table: duplicate symbol `%s'\n" msgstr "" -#: mmo.c:2983 +#: mmo.c:2978 #, c-format msgid "" "%pB: bad symbol definition: `Main' set to %s rather than the start address " "%s\n" msgstr "" -#: mmo.c:3082 +#: mmo.c:3077 #, c-format msgid "" "%pB: warning: symbol table too large for mmo, larger than 65535 32-bit " "words: %d. Only `Main' will be emitted.\n" msgstr "" -#: mmo.c:3128 +#: mmo.c:3123 #, c-format msgid "%pB: internal error, symbol table changed size from %d to %d words\n" msgstr "" -#: mmo.c:3181 +#: mmo.c:3176 #, c-format msgid "%pB: internal error, internal register section %pA had contents\n" msgstr "" -#: mmo.c:3232 +#: mmo.c:3227 #, c-format msgid "%pB: no initialized registers; section length 0\n" msgstr "" -#: mmo.c:3239 +#: mmo.c:3234 #, c-format msgid "%pB: too many initialized registers; section length %" msgstr "" -#: mmo.c:3244 +#: mmo.c:3239 #, c-format msgid "" "%pB: invalid start address for initialized registers of length %: " @@ -5729,60 +6087,67 @@ msgid "unhandled OSF/1 core file section type %d" msgstr "" -#: pef.c:527 +#: pdp11.c:1588 +#, c-format +msgid "%pB: symbol indicates overlay (not supported)" +msgstr "" + +#: pef.c:530 #, c-format msgid "bfd_pef_scan: unknown architecture 0x%lx" msgstr "" -#: pei-x86_64.c:177 pei-x86_64.c:191 pei-x86_64.c:220 +#: pei-x86_64.c:177 pei-x86_64.c:191 pei-x86_64.c:220 pei-x86_64.c:243 +#: pei-x86_64.c:253 pei-x86_64.c:278 pei-x86_64.c:290 pei-x86_64.c:304 +#: pei-x86_64.c:322 pei-x86_64.c:334 pei-x86_64.c:346 #, c-format msgid "warning: corrupt unwind data\n" msgstr "" #. PR 17512: file: 2245-7442-0.004. -#: pei-x86_64.c:315 +#: pei-x86_64.c:367 #, c-format msgid "Unknown: %x" msgstr "" -#: pei-x86_64.c:365 pei-x86_64.c:375 pei-x86_64.c:384 +#: pei-x86_64.c:418 pei-x86_64.c:428 pei-x86_64.c:437 #, c-format msgid "warning: xdata section corrupt\n" msgstr "" -#: pei-x86_64.c:439 +#: pei-x86_64.c:492 #, c-format msgid "Too many unwind codes (%ld)\n" msgstr "" -#: pei-x86_64.c:529 +#: pei-x86_64.c:582 #, c-format msgid "Warning: %s section size (%ld) is not a multiple of %d\n" msgstr "" -#: pei-x86_64.c:536 +#: pei-x86_64.c:589 #, c-format msgid "Warning: %s section size is zero\n" msgstr "" -#: pei-x86_64.c:551 +#: pei-x86_64.c:604 #, c-format msgid "Warning: %s section size (%ld) is smaller than virtual size (%ld)\n" msgstr "" -#: pei-x86_64.c:560 +#: pei-x86_64.c:613 #, c-format msgid "" "\n" "The Function Table (interpreted %s section contents)\n" msgstr "" -#: pei-x86_64.c:563 +#: pei-x86_64.c:616 #, c-format msgid "vma:\t\t\tBeginAddress\t EndAddress\t UnwindData\n" msgstr "" -#: pei-x86_64.c:692 +#: pei-x86_64.c:745 #, c-format msgid "" "\n" @@ -5790,44 +6155,44 @@ msgstr "" #. XXX code yet to be written. -#: peicode.h:775 +#: peicode.h:796 #, c-format msgid "%pB: unhandled import type; %x" msgstr "" -#: peicode.h:781 +#: peicode.h:802 #, c-format msgid "%pB: unrecognized import type; %x" msgstr "" -#: peicode.h:796 +#: peicode.h:817 #, c-format msgid "%pB: unrecognized import name type; %x" msgstr "" -#: peicode.h:1211 +#: peicode.h:1225 #, c-format msgid "%pB: unrecognised machine type (0x%x) in Import Library Format archive" msgstr "" -#: peicode.h:1224 +#: peicode.h:1238 #, c-format msgid "" "%pB: recognised but unhandled machine type (0x%x) in Import Library Format " "archive" msgstr "" -#: peicode.h:1242 +#: peicode.h:1256 #, c-format msgid "%pB: size field is zero in Import Library Format header" msgstr "" -#: peicode.h:1274 +#: peicode.h:1282 #, c-format msgid "%pB: string not null terminated in ILF object file" msgstr "" -#: peicode.h:1330 +#: peicode.h:1338 #, c-format msgid "%pB: error: debug data ends beyond end of debug directory" msgstr "" @@ -5881,32 +6246,32 @@ msgid "Partition[%d] length = 0x%.8lx (%ld)\n" msgstr "" -#: reloc.c:8232 +#: reloc.c:8291 msgid "INPUT_SECTION_FLAGS are not supported" msgstr "" -#: reloc.c:8333 +#: reloc.c:8392 #, c-format msgid "%X%P: %pB(%pA): error: relocation for offset %V has no value\n" msgstr "" -#: reloc.c:8420 +#: reloc.c:8480 #, c-format msgid "%X%P: %pB(%pA): relocation \"%pR\" is not supported\n" msgstr "" -#: reloc.c:8429 +#: reloc.c:8489 #, c-format msgid "%X%P: %pB(%pA): relocation \"%pR\" returns an unrecognized value %x\n" msgstr "" -#: reloc.c:8491 +#: reloc.c:8551 #, c-format msgid "%pB: unrecognized relocation type %#x in section `%pA'" msgstr "" #. PR 21803: Suggest the most likely cause of this error. -#: reloc.c:8495 +#: reloc.c:8555 #, c-format msgid "is this version of the linker - %s - out of date ?" msgstr "" @@ -5916,14 +6281,14 @@ msgid "%pB: warning core file truncated" msgstr "" -#: som.c:5478 +#: som.c:5497 #, c-format msgid "" "\n" "Exec Auxiliary Header\n" msgstr "" -#: som.c:5787 +#: som.c:5806 msgid "som_sizeof_headers unimplemented" msgstr "" @@ -5937,7 +6302,7 @@ msgid "%pB:%d: byte count %d too small" msgstr "" -#: srec.c:581 srec.c:615 +#: srec.c:580 srec.c:614 #, c-format msgid "%pB:%d: bad checksum in S-record file" msgstr "" @@ -5947,73 +6312,83 @@ msgid "%pB(%pA+%#lx): stabs entry has invalid string index" msgstr "" -#: syms.c:1091 +#: syms.c:1085 msgid "unsupported .stab relocation" msgstr "" -#: vms-alpha.c:479 +#: vms-alpha.c:480 msgid "corrupt EIHD record - size is too small" msgstr "" -#: vms-alpha.c:660 +#: vms-alpha.c:666 #, c-format msgid "unable to read EIHS record at offset %#x" msgstr "" -#: vms-alpha.c:1173 +#: vms-alpha.c:1158 +msgid "record is too small for symbol name length" +msgstr "" + +#: vms-alpha.c:1191 #, c-format msgid "corrupt EGSD record: its size (%#x) is too small" msgstr "" -#: vms-alpha.c:1197 +#: vms-alpha.c:1215 #, c-format -msgid "corrupt EGSD record: size (%#x) is larger than remaining space (%#x)" +msgid "" +"corrupt EGSD record type %d: size (%#x) is larger than remaining space (%#x)" msgstr "" -#: vms-alpha.c:1205 +#: vms-alpha.c:1225 #, c-format -msgid "corrupt EGSD record: size (%#x) is too small" +msgid "corrupt EGSD record type %d: size (%#x) is too small" msgstr "" -#: vms-alpha.c:1334 vms-alpha.c:1350 vms-alpha.c:1390 +#: vms-alpha.c:1367 #, c-format msgid "corrupt EGSD record: its psindx field is too big (%#lx)" msgstr "" -#: vms-alpha.c:1419 +#: vms-alpha.c:1443 #, c-format msgid "unknown EGSD subtype %d" msgstr "" -#: vms-alpha.c:1452 +#: vms-alpha.c:1476 #, c-format msgid "stack overflow (%d) in _bfd_vms_push" msgstr "" -#: vms-alpha.c:1465 +#: vms-alpha.c:1490 msgid "stack underflow in _bfd_vms_pop" msgstr "" +#: vms-alpha.c:1564 +#, c-format +msgid "dst_define_location %u too large" +msgstr "" + #. These names have not yet been added to this switch statement. -#: vms-alpha.c:1707 +#: vms-alpha.c:1765 #, c-format msgid "unknown ETIR command %d" msgstr "" -#: vms-alpha.c:1738 +#: vms-alpha.c:1796 msgid "corrupt vms value" msgstr "" -#: vms-alpha.c:1866 +#: vms-alpha.c:1927 msgid "corrupt ETIR record encountered" msgstr "" -#: vms-alpha.c:1923 +#: vms-alpha.c:1989 #, c-format msgid "bad section index in %s" msgstr "" -#: vms-alpha.c:1936 +#: vms-alpha.c:2003 #, c-format msgid "unsupported STA cmd %s" msgstr "" @@ -6023,1944 +6398,1956 @@ #. Rotate. #. Redefine symbol to current location. #. Define a literal. -#: vms-alpha.c:2116 vms-alpha.c:2147 vms-alpha.c:2238 vms-alpha.c:2396 +#: vms-alpha.c:2211 vms-alpha.c:2242 vms-alpha.c:2337 vms-alpha.c:2557 #, c-format msgid "%s: not supported" msgstr "" -#: vms-alpha.c:2122 +#: vms-alpha.c:2217 #, c-format msgid "%s: not implemented" msgstr "" -#: vms-alpha.c:2380 +#: vms-alpha.c:2382 vms-alpha.c:2397 +#, c-format +msgid "invalid %s" +msgstr "" + +#. Divide by zero is supposed to give a result of zero, +#. and a non-fatal warning message. +#: vms-alpha.c:2457 +#, c-format +msgid "%s divide by zero" +msgstr "" + +#: vms-alpha.c:2523 #, c-format msgid "invalid use of %s with contexts" msgstr "" -#: vms-alpha.c:2414 +#: vms-alpha.c:2581 #, c-format msgid "reserved cmd %d" msgstr "" -#: vms-alpha.c:2498 +#: vms-alpha.c:2665 msgid "corrupt EEOM record - size is too small" msgstr "" -#: vms-alpha.c:2507 +#: vms-alpha.c:2674 msgid "object module not error-free !" msgstr "" -#: vms-alpha.c:3831 +#: vms-alpha.c:4001 #, c-format msgid "SEC_RELOC with no relocs in section %pA" msgstr "" -#: vms-alpha.c:3883 vms-alpha.c:4097 +#: vms-alpha.c:4053 vms-alpha.c:4268 #, c-format msgid "size error in section %pA" msgstr "" -#: vms-alpha.c:4043 +#: vms-alpha.c:4213 msgid "spurious ALPHA_R_BSR reloc" msgstr "" -#: vms-alpha.c:4084 +#: vms-alpha.c:4254 #, c-format msgid "unhandled relocation %s" msgstr "" -#: vms-alpha.c:4377 +#: vms-alpha.c:4551 #, c-format msgid "unknown source command %d" msgstr "" -#: vms-alpha.c:4438 vms-alpha.c:4444 vms-alpha.c:4450 vms-alpha.c:4456 -#: vms-alpha.c:4462 vms-alpha.c:4489 vms-alpha.c:4495 vms-alpha.c:4501 -#: vms-alpha.c:4507 +#: vms-alpha.c:4612 vms-alpha.c:4618 vms-alpha.c:4624 vms-alpha.c:4630 +#: vms-alpha.c:4636 vms-alpha.c:4663 vms-alpha.c:4669 vms-alpha.c:4675 +#: vms-alpha.c:4681 #, c-format msgid "%s not implemented" msgstr "" -#: vms-alpha.c:4550 +#: vms-alpha.c:4724 #, c-format msgid "unknown line command %d" msgstr "" -#: vms-alpha.c:5010 vms-alpha.c:5028 vms-alpha.c:5043 vms-alpha.c:5059 -#: vms-alpha.c:5072 vms-alpha.c:5084 vms-alpha.c:5097 +#: vms-alpha.c:5188 vms-alpha.c:5206 vms-alpha.c:5221 vms-alpha.c:5237 +#: vms-alpha.c:5250 vms-alpha.c:5262 vms-alpha.c:5275 #, c-format msgid "unknown reloc %s + %s" msgstr "" -#: vms-alpha.c:5152 +#: vms-alpha.c:5330 #, c-format msgid "unknown reloc %s" msgstr "" -#: vms-alpha.c:5166 +#: vms-alpha.c:5344 msgid "invalid section index in ETIR" msgstr "" -#: vms-alpha.c:5175 +#: vms-alpha.c:5353 msgid "relocation for non-REL psect" msgstr "" -#: vms-alpha.c:5222 +#: vms-alpha.c:5402 #, c-format msgid "unknown symbol in command %s" msgstr "" -#: vms-alpha.c:5636 +#: vms-alpha.c:5816 #, c-format msgid "reloc (%d) is *UNKNOWN*" msgstr "" -#: vms-alpha.c:5752 +#: vms-alpha.c:5932 #, c-format msgid " EMH %u (len=%u): " msgstr "" -#: vms-alpha.c:5757 +#: vms-alpha.c:5937 #, c-format msgid " Error: The length is less than the length of an EMH record\n" msgstr "" -#: vms-alpha.c:5774 +#: vms-alpha.c:5954 #, c-format msgid "" " Error: The record length is less than the size of an EMH_MHD record\n" msgstr "" -#: vms-alpha.c:5777 +#: vms-alpha.c:5957 #, c-format msgid "Module header\n" msgstr "" -#: vms-alpha.c:5778 +#: vms-alpha.c:5958 #, c-format msgid " structure level: %u\n" msgstr "" -#: vms-alpha.c:5779 +#: vms-alpha.c:5959 #, c-format msgid " max record size: %u\n" msgstr "" -#: vms-alpha.c:5785 +#: vms-alpha.c:5965 #, c-format msgid " Error: The module name is missing\n" msgstr "" -#: vms-alpha.c:5791 +#: vms-alpha.c:5971 #, c-format msgid " Error: The module name is too long\n" msgstr "" -#: vms-alpha.c:5794 +#: vms-alpha.c:5974 #, c-format msgid " module name : %.*s\n" msgstr "" -#: vms-alpha.c:5798 +#: vms-alpha.c:5978 #, c-format msgid " Error: The module version is missing\n" msgstr "" -#: vms-alpha.c:5804 +#: vms-alpha.c:5984 #, c-format msgid " Error: The module version is too long\n" msgstr "" -#: vms-alpha.c:5807 +#: vms-alpha.c:5987 #, c-format msgid " module version : %.*s\n" msgstr "" -#: vms-alpha.c:5810 +#: vms-alpha.c:5990 #, c-format msgid " Error: The compile date is truncated\n" msgstr "" -#: vms-alpha.c:5812 +#: vms-alpha.c:5992 #, c-format msgid " compile date : %.17s\n" msgstr "" -#: vms-alpha.c:5817 +#: vms-alpha.c:5997 #, c-format msgid "Language Processor Name\n" msgstr "" -#: vms-alpha.c:5818 +#: vms-alpha.c:5998 #, c-format msgid " language name: %.*s\n" msgstr "" -#: vms-alpha.c:5822 +#: vms-alpha.c:6002 #, c-format msgid "Source Files Header\n" msgstr "" -#: vms-alpha.c:5823 +#: vms-alpha.c:6003 #, c-format msgid " file: %.*s\n" msgstr "" -#: vms-alpha.c:5827 +#: vms-alpha.c:6007 #, c-format msgid "Title Text Header\n" msgstr "" -#: vms-alpha.c:5828 +#: vms-alpha.c:6008 #, c-format msgid " title: %.*s\n" msgstr "" -#: vms-alpha.c:5832 +#: vms-alpha.c:6012 #, c-format msgid "Copyright Header\n" msgstr "" -#: vms-alpha.c:5833 +#: vms-alpha.c:6013 #, c-format msgid " copyright: %.*s\n" msgstr "" -#: vms-alpha.c:5837 +#: vms-alpha.c:6017 #, c-format msgid "unhandled emh subtype %u\n" msgstr "" -#: vms-alpha.c:5847 +#: vms-alpha.c:6027 #, c-format msgid " EEOM (len=%u):\n" msgstr "" -#: vms-alpha.c:5852 +#: vms-alpha.c:6032 #, c-format msgid " Error: The length is less than the length of an EEOM record\n" msgstr "" -#: vms-alpha.c:5856 +#: vms-alpha.c:6036 #, c-format msgid " number of cond linkage pairs: %u\n" msgstr "" -#: vms-alpha.c:5858 +#: vms-alpha.c:6038 #, c-format msgid " completion code: %u\n" msgstr "" -#: vms-alpha.c:5862 +#: vms-alpha.c:6042 #, c-format msgid " transfer addr flags: 0x%02x\n" msgstr "" -#: vms-alpha.c:5863 +#: vms-alpha.c:6043 #, c-format msgid " transfer addr psect: %u\n" msgstr "" -#: vms-alpha.c:5865 +#: vms-alpha.c:6045 #, c-format msgid " transfer address : 0x%08x\n" msgstr "" -#: vms-alpha.c:5874 +#: vms-alpha.c:6054 msgid " WEAK" msgstr "" -#: vms-alpha.c:5876 +#: vms-alpha.c:6056 msgid " DEF" msgstr "" -#: vms-alpha.c:5878 +#: vms-alpha.c:6058 msgid " UNI" msgstr "" -#: vms-alpha.c:5880 vms-alpha.c:5901 +#: vms-alpha.c:6060 vms-alpha.c:6081 msgid " REL" msgstr "" -#: vms-alpha.c:5882 +#: vms-alpha.c:6062 msgid " COMM" msgstr "" -#: vms-alpha.c:5884 +#: vms-alpha.c:6064 msgid " VECEP" msgstr "" -#: vms-alpha.c:5886 +#: vms-alpha.c:6066 msgid " NORM" msgstr "" -#: vms-alpha.c:5888 +#: vms-alpha.c:6068 msgid " QVAL" msgstr "" -#: vms-alpha.c:5895 +#: vms-alpha.c:6075 msgid " PIC" msgstr "" -#: vms-alpha.c:5897 +#: vms-alpha.c:6077 msgid " LIB" msgstr "" -#: vms-alpha.c:5899 +#: vms-alpha.c:6079 msgid " OVR" msgstr "" -#: vms-alpha.c:5903 +#: vms-alpha.c:6083 msgid " GBL" msgstr "" -#: vms-alpha.c:5905 +#: vms-alpha.c:6085 msgid " SHR" msgstr "" -#: vms-alpha.c:5907 +#: vms-alpha.c:6087 msgid " EXE" msgstr "" -#: vms-alpha.c:5909 +#: vms-alpha.c:6089 msgid " RD" msgstr "" -#: vms-alpha.c:5911 +#: vms-alpha.c:6091 msgid " WRT" msgstr "" -#: vms-alpha.c:5913 +#: vms-alpha.c:6093 msgid " VEC" msgstr "" -#: vms-alpha.c:5915 +#: vms-alpha.c:6095 msgid " NOMOD" msgstr "" -#: vms-alpha.c:5917 +#: vms-alpha.c:6097 msgid " COM" msgstr "" -#: vms-alpha.c:5919 +#: vms-alpha.c:6099 msgid " 64B" msgstr "" -#: vms-alpha.c:5928 +#: vms-alpha.c:6108 #, c-format msgid " EGSD (len=%u):\n" msgstr "" -#: vms-alpha.c:5941 +#: vms-alpha.c:6121 #, c-format msgid " EGSD entry %2u (type: %u, len: %u): " msgstr "" -#: vms-alpha.c:5947 vms-alpha.c:6198 +#: vms-alpha.c:6127 vms-alpha.c:6378 #, c-format msgid " Error: length larger than remaining space in record\n" msgstr "" -#: vms-alpha.c:5959 +#: vms-alpha.c:6139 #, c-format msgid "PSC - Program section definition\n" msgstr "" -#: vms-alpha.c:5960 vms-alpha.c:5977 +#: vms-alpha.c:6140 vms-alpha.c:6157 #, c-format msgid " alignment : 2**%u\n" msgstr "" -#: vms-alpha.c:5961 vms-alpha.c:5978 +#: vms-alpha.c:6141 vms-alpha.c:6158 #, c-format msgid " flags : 0x%04x" msgstr "" -#: vms-alpha.c:5965 +#: vms-alpha.c:6145 #, c-format msgid " alloc (len): %u (0x%08x)\n" msgstr "" -#: vms-alpha.c:5966 vms-alpha.c:6023 vms-alpha.c:6072 +#: vms-alpha.c:6146 vms-alpha.c:6203 vms-alpha.c:6252 #, c-format msgid " name : %.*s\n" msgstr "" -#: vms-alpha.c:5976 +#: vms-alpha.c:6156 #, c-format msgid "SPSC - Shared Image Program section def\n" msgstr "" -#: vms-alpha.c:5982 +#: vms-alpha.c:6162 #, c-format msgid " alloc (len) : %u (0x%08x)\n" msgstr "" -#: vms-alpha.c:5983 +#: vms-alpha.c:6163 #, c-format msgid " image offset : 0x%08x\n" msgstr "" -#: vms-alpha.c:5985 +#: vms-alpha.c:6165 #, c-format msgid " symvec offset : 0x%08x\n" msgstr "" -#: vms-alpha.c:5987 +#: vms-alpha.c:6167 #, c-format msgid " name : %.*s\n" msgstr "" -#: vms-alpha.c:6000 +#: vms-alpha.c:6180 #, c-format msgid "SYM - Global symbol definition\n" msgstr "" -#: vms-alpha.c:6001 vms-alpha.c:6061 vms-alpha.c:6082 vms-alpha.c:6101 +#: vms-alpha.c:6181 vms-alpha.c:6241 vms-alpha.c:6262 vms-alpha.c:6281 #, c-format msgid " flags: 0x%04x" msgstr "" -#: vms-alpha.c:6004 +#: vms-alpha.c:6184 #, c-format msgid " psect offset: 0x%08x\n" msgstr "" -#: vms-alpha.c:6008 +#: vms-alpha.c:6188 #, c-format msgid " code address: 0x%08x\n" msgstr "" -#: vms-alpha.c:6010 +#: vms-alpha.c:6190 #, c-format msgid " psect index for entry point : %u\n" msgstr "" -#: vms-alpha.c:6013 vms-alpha.c:6089 vms-alpha.c:6108 +#: vms-alpha.c:6193 vms-alpha.c:6269 vms-alpha.c:6288 #, c-format msgid " psect index : %u\n" msgstr "" -#: vms-alpha.c:6015 vms-alpha.c:6091 vms-alpha.c:6110 +#: vms-alpha.c:6195 vms-alpha.c:6271 vms-alpha.c:6290 #, c-format msgid " name : %.*s\n" msgstr "" -#: vms-alpha.c:6022 +#: vms-alpha.c:6202 #, c-format msgid "SYM - Global symbol reference\n" msgstr "" -#: vms-alpha.c:6034 +#: vms-alpha.c:6214 #, c-format msgid "IDC - Ident Consistency check\n" msgstr "" -#: vms-alpha.c:6035 +#: vms-alpha.c:6215 #, c-format msgid " flags : 0x%08x" msgstr "" -#: vms-alpha.c:6039 +#: vms-alpha.c:6219 #, c-format msgid " id match : %x\n" msgstr "" -#: vms-alpha.c:6041 +#: vms-alpha.c:6221 #, c-format msgid " error severity: %x\n" msgstr "" -#: vms-alpha.c:6044 +#: vms-alpha.c:6224 #, c-format msgid " entity name : %.*s\n" msgstr "" -#: vms-alpha.c:6046 +#: vms-alpha.c:6226 #, c-format msgid " object name : %.*s\n" msgstr "" -#: vms-alpha.c:6049 +#: vms-alpha.c:6229 #, c-format msgid " binary ident : 0x%08x\n" msgstr "" -#: vms-alpha.c:6052 +#: vms-alpha.c:6232 #, c-format msgid " ascii ident : %.*s\n" msgstr "" -#: vms-alpha.c:6060 +#: vms-alpha.c:6240 #, c-format msgid "SYMG - Universal symbol definition\n" msgstr "" -#: vms-alpha.c:6064 +#: vms-alpha.c:6244 #, c-format msgid " symbol vector offset: 0x%08x\n" msgstr "" -#: vms-alpha.c:6066 +#: vms-alpha.c:6246 #, c-format msgid " entry point: 0x%08x\n" msgstr "" -#: vms-alpha.c:6068 +#: vms-alpha.c:6248 #, c-format msgid " proc descr : 0x%08x\n" msgstr "" -#: vms-alpha.c:6070 +#: vms-alpha.c:6250 #, c-format msgid " psect index: %u\n" msgstr "" -#: vms-alpha.c:6081 +#: vms-alpha.c:6261 #, c-format msgid "SYMV - Vectored symbol definition\n" msgstr "" -#: vms-alpha.c:6085 +#: vms-alpha.c:6265 #, c-format msgid " vector : 0x%08x\n" msgstr "" -#: vms-alpha.c:6087 vms-alpha.c:6106 +#: vms-alpha.c:6267 vms-alpha.c:6286 #, c-format msgid " psect offset: %u\n" msgstr "" -#: vms-alpha.c:6100 +#: vms-alpha.c:6280 #, c-format msgid "SYMM - Global symbol definition with version\n" msgstr "" -#: vms-alpha.c:6104 +#: vms-alpha.c:6284 #, c-format msgid " version mask: 0x%08x\n" msgstr "" -#: vms-alpha.c:6115 +#: vms-alpha.c:6295 #, c-format msgid "unhandled egsd entry type %u\n" msgstr "" -#: vms-alpha.c:6150 +#: vms-alpha.c:6330 #, c-format msgid " linkage index: %u, replacement insn: 0x%08x\n" msgstr "" -#: vms-alpha.c:6154 +#: vms-alpha.c:6334 #, c-format msgid " psect idx 1: %u, offset 1: 0x%08x %08x\n" msgstr "" -#: vms-alpha.c:6159 +#: vms-alpha.c:6339 #, c-format msgid " psect idx 2: %u, offset 2: 0x%08x %08x\n" msgstr "" -#: vms-alpha.c:6165 +#: vms-alpha.c:6345 #, c-format msgid " psect idx 3: %u, offset 3: 0x%08x %08x\n" msgstr "" -#: vms-alpha.c:6170 +#: vms-alpha.c:6350 #, c-format msgid " global name: %.*s\n" msgstr "" -#: vms-alpha.c:6181 +#: vms-alpha.c:6361 #, c-format msgid " %s (len=%u+%u):\n" msgstr "" -#: vms-alpha.c:6203 +#: vms-alpha.c:6383 #, c-format msgid " (type: %3u, size: 4+%3u): " msgstr "" -#: vms-alpha.c:6207 +#: vms-alpha.c:6387 #, c-format msgid "STA_GBL (stack global) %.*s\n" msgstr "" -#: vms-alpha.c:6211 +#: vms-alpha.c:6391 #, c-format msgid "STA_LW (stack longword) 0x%08x\n" msgstr "" -#: vms-alpha.c:6215 +#: vms-alpha.c:6395 #, c-format msgid "STA_QW (stack quadword) 0x%08x %08x\n" msgstr "" -#: vms-alpha.c:6220 +#: vms-alpha.c:6400 #, c-format msgid "STA_PQ (stack psect base + offset)\n" msgstr "" -#: vms-alpha.c:6222 +#: vms-alpha.c:6402 #, c-format msgid " psect: %u, offset: 0x%08x %08x\n" msgstr "" -#: vms-alpha.c:6228 +#: vms-alpha.c:6408 #, c-format msgid "STA_LI (stack literal)\n" msgstr "" -#: vms-alpha.c:6231 +#: vms-alpha.c:6411 #, c-format msgid "STA_MOD (stack module)\n" msgstr "" -#: vms-alpha.c:6234 +#: vms-alpha.c:6414 #, c-format msgid "STA_CKARG (compare procedure argument)\n" msgstr "" -#: vms-alpha.c:6238 +#: vms-alpha.c:6418 #, c-format msgid "STO_B (store byte)\n" msgstr "" -#: vms-alpha.c:6241 +#: vms-alpha.c:6421 #, c-format msgid "STO_W (store word)\n" msgstr "" -#: vms-alpha.c:6244 +#: vms-alpha.c:6424 #, c-format msgid "STO_LW (store longword)\n" msgstr "" -#: vms-alpha.c:6247 +#: vms-alpha.c:6427 #, c-format msgid "STO_QW (store quadword)\n" msgstr "" -#: vms-alpha.c:6253 +#: vms-alpha.c:6433 #, c-format msgid "STO_IMMR (store immediate repeat) %u bytes\n" msgstr "" -#: vms-alpha.c:6260 +#: vms-alpha.c:6440 #, c-format msgid "STO_GBL (store global) %.*s\n" msgstr "" -#: vms-alpha.c:6264 +#: vms-alpha.c:6444 #, c-format msgid "STO_CA (store code address) %.*s\n" msgstr "" -#: vms-alpha.c:6268 +#: vms-alpha.c:6448 #, c-format msgid "STO_RB (store relative branch)\n" msgstr "" -#: vms-alpha.c:6271 +#: vms-alpha.c:6451 #, c-format msgid "STO_AB (store absolute branch)\n" msgstr "" -#: vms-alpha.c:6274 +#: vms-alpha.c:6454 #, c-format msgid "STO_OFF (store offset to psect)\n" msgstr "" -#: vms-alpha.c:6280 +#: vms-alpha.c:6460 #, c-format msgid "STO_IMM (store immediate) %u bytes\n" msgstr "" -#: vms-alpha.c:6287 +#: vms-alpha.c:6467 #, c-format msgid "STO_GBL_LW (store global longword) %.*s\n" msgstr "" -#: vms-alpha.c:6291 +#: vms-alpha.c:6471 #, c-format msgid "STO_OFF (store LP with procedure signature)\n" msgstr "" -#: vms-alpha.c:6294 +#: vms-alpha.c:6474 #, c-format msgid "STO_BR_GBL (store branch global) *todo*\n" msgstr "" -#: vms-alpha.c:6297 +#: vms-alpha.c:6477 #, c-format msgid "STO_BR_PS (store branch psect + offset) *todo*\n" msgstr "" -#: vms-alpha.c:6301 +#: vms-alpha.c:6481 #, c-format msgid "OPR_NOP (no-operation)\n" msgstr "" -#: vms-alpha.c:6304 +#: vms-alpha.c:6484 #, c-format msgid "OPR_ADD (add)\n" msgstr "" -#: vms-alpha.c:6307 +#: vms-alpha.c:6487 #, c-format msgid "OPR_SUB (subtract)\n" msgstr "" -#: vms-alpha.c:6310 +#: vms-alpha.c:6490 #, c-format msgid "OPR_MUL (multiply)\n" msgstr "" -#: vms-alpha.c:6313 +#: vms-alpha.c:6493 #, c-format msgid "OPR_DIV (divide)\n" msgstr "" -#: vms-alpha.c:6316 +#: vms-alpha.c:6496 #, c-format msgid "OPR_AND (logical and)\n" msgstr "" -#: vms-alpha.c:6319 +#: vms-alpha.c:6499 #, c-format msgid "OPR_IOR (logical inclusive or)\n" msgstr "" -#: vms-alpha.c:6322 +#: vms-alpha.c:6502 #, c-format msgid "OPR_EOR (logical exclusive or)\n" msgstr "" -#: vms-alpha.c:6325 +#: vms-alpha.c:6505 #, c-format msgid "OPR_NEG (negate)\n" msgstr "" -#: vms-alpha.c:6328 +#: vms-alpha.c:6508 #, c-format msgid "OPR_COM (complement)\n" msgstr "" -#: vms-alpha.c:6331 +#: vms-alpha.c:6511 #, c-format msgid "OPR_INSV (insert field)\n" msgstr "" -#: vms-alpha.c:6334 +#: vms-alpha.c:6514 #, c-format msgid "OPR_ASH (arithmetic shift)\n" msgstr "" -#: vms-alpha.c:6337 +#: vms-alpha.c:6517 #, c-format msgid "OPR_USH (unsigned shift)\n" msgstr "" -#: vms-alpha.c:6340 +#: vms-alpha.c:6520 #, c-format msgid "OPR_ROT (rotate)\n" msgstr "" -#: vms-alpha.c:6343 +#: vms-alpha.c:6523 #, c-format msgid "OPR_SEL (select)\n" msgstr "" -#: vms-alpha.c:6346 +#: vms-alpha.c:6526 #, c-format msgid "OPR_REDEF (redefine symbol to curr location)\n" msgstr "" -#: vms-alpha.c:6349 +#: vms-alpha.c:6529 #, c-format msgid "OPR_REDEF (define a literal)\n" msgstr "" -#: vms-alpha.c:6353 +#: vms-alpha.c:6533 #, c-format msgid "STC_LP (store cond linkage pair)\n" msgstr "" -#: vms-alpha.c:6357 +#: vms-alpha.c:6537 #, c-format msgid "STC_LP_PSB (store cond linkage pair + signature)\n" msgstr "" -#: vms-alpha.c:6359 +#: vms-alpha.c:6539 #, c-format msgid " linkage index: %u, procedure: %.*s\n" msgstr "" -#: vms-alpha.c:6362 +#: vms-alpha.c:6542 #, c-format msgid " signature: %.*s\n" msgstr "" -#: vms-alpha.c:6365 +#: vms-alpha.c:6545 #, c-format msgid "STC_GBL (store cond global)\n" msgstr "" -#: vms-alpha.c:6367 +#: vms-alpha.c:6547 #, c-format msgid " linkage index: %u, global: %.*s\n" msgstr "" -#: vms-alpha.c:6371 +#: vms-alpha.c:6551 #, c-format msgid "STC_GCA (store cond code address)\n" msgstr "" -#: vms-alpha.c:6373 +#: vms-alpha.c:6553 #, c-format msgid " linkage index: %u, procedure name: %.*s\n" msgstr "" -#: vms-alpha.c:6377 +#: vms-alpha.c:6557 #, c-format msgid "STC_PS (store cond psect + offset)\n" msgstr "" -#: vms-alpha.c:6380 +#: vms-alpha.c:6560 #, c-format msgid " linkage index: %u, psect: %u, offset: 0x%08x %08x\n" msgstr "" -#: vms-alpha.c:6387 +#: vms-alpha.c:6567 #, c-format msgid "STC_NOP_GBL (store cond NOP at global addr)\n" msgstr "" -#: vms-alpha.c:6391 +#: vms-alpha.c:6571 #, c-format msgid "STC_NOP_PS (store cond NOP at psect + offset)\n" msgstr "" -#: vms-alpha.c:6395 +#: vms-alpha.c:6575 #, c-format msgid "STC_BSR_GBL (store cond BSR at global addr)\n" msgstr "" -#: vms-alpha.c:6399 +#: vms-alpha.c:6579 #, c-format msgid "STC_BSR_PS (store cond BSR at psect + offset)\n" msgstr "" -#: vms-alpha.c:6403 +#: vms-alpha.c:6583 #, c-format msgid "STC_LDA_GBL (store cond LDA at global addr)\n" msgstr "" -#: vms-alpha.c:6407 +#: vms-alpha.c:6587 #, c-format msgid "STC_LDA_PS (store cond LDA at psect + offset)\n" msgstr "" -#: vms-alpha.c:6411 +#: vms-alpha.c:6591 #, c-format msgid "STC_BOH_GBL (store cond BOH at global addr)\n" msgstr "" -#: vms-alpha.c:6415 +#: vms-alpha.c:6595 #, c-format msgid "STC_BOH_PS (store cond BOH at psect + offset)\n" msgstr "" -#: vms-alpha.c:6420 +#: vms-alpha.c:6600 #, c-format msgid "STC_NBH_GBL (store cond or hint at global addr)\n" msgstr "" -#: vms-alpha.c:6424 +#: vms-alpha.c:6604 #, c-format msgid "STC_NBH_PS (store cond or hint at psect + offset)\n" msgstr "" -#: vms-alpha.c:6428 +#: vms-alpha.c:6608 #, c-format msgid "CTL_SETRB (set relocation base)\n" msgstr "" -#: vms-alpha.c:6434 +#: vms-alpha.c:6614 #, c-format msgid "CTL_AUGRB (augment relocation base) %u\n" msgstr "" -#: vms-alpha.c:6438 +#: vms-alpha.c:6618 #, c-format msgid "CTL_DFLOC (define location)\n" msgstr "" -#: vms-alpha.c:6441 +#: vms-alpha.c:6621 #, c-format msgid "CTL_STLOC (set location)\n" msgstr "" -#: vms-alpha.c:6444 +#: vms-alpha.c:6624 #, c-format msgid "CTL_STKDL (stack defined location)\n" msgstr "" -#: vms-alpha.c:6447 vms-alpha.c:6871 vms-alpha.c:6997 +#: vms-alpha.c:6627 vms-alpha.c:7051 vms-alpha.c:7177 #, c-format msgid "*unhandled*\n" msgstr "" -#: vms-alpha.c:6477 vms-alpha.c:6516 +#: vms-alpha.c:6657 vms-alpha.c:6696 #, c-format msgid "cannot read GST record length\n" msgstr "" #. Ill-formed. -#: vms-alpha.c:6498 +#: vms-alpha.c:6678 #, c-format msgid "cannot find EMH in first GST record\n" msgstr "" -#: vms-alpha.c:6524 +#: vms-alpha.c:6704 #, c-format msgid "cannot read GST record header\n" msgstr "" -#: vms-alpha.c:6537 +#: vms-alpha.c:6717 #, c-format msgid " corrupted GST\n" msgstr "" -#: vms-alpha.c:6545 +#: vms-alpha.c:6725 #, c-format msgid "cannot read GST record\n" msgstr "" -#: vms-alpha.c:6574 +#: vms-alpha.c:6754 #, c-format msgid " unhandled EOBJ record type %u\n" msgstr "" -#: vms-alpha.c:6598 +#: vms-alpha.c:6778 #, c-format msgid " bitcount: %u, base addr: 0x%08x\n" msgstr "" -#: vms-alpha.c:6612 +#: vms-alpha.c:6792 #, c-format msgid " bitmap: 0x%08x (count: %u):\n" msgstr "" -#: vms-alpha.c:6619 +#: vms-alpha.c:6799 #, c-format msgid " %08x" msgstr "" -#: vms-alpha.c:6645 +#: vms-alpha.c:6825 #, c-format msgid " image %u (%u entries)\n" msgstr "" -#: vms-alpha.c:6651 +#: vms-alpha.c:6831 #, c-format msgid " offset: 0x%08x, val: 0x%08x\n" msgstr "" -#: vms-alpha.c:6673 +#: vms-alpha.c:6853 #, c-format msgid " image %u (%u entries), offsets:\n" msgstr "" -#: vms-alpha.c:6680 +#: vms-alpha.c:6860 #, c-format msgid " 0x%08x" msgstr "" #. 64 bits. -#: vms-alpha.c:6802 +#: vms-alpha.c:6982 #, c-format msgid "64 bits *unhandled*\n" msgstr "" -#: vms-alpha.c:6807 +#: vms-alpha.c:6987 #, c-format msgid "class: %u, dtype: %u, length: %u, pointer: 0x%08x\n" msgstr "" -#: vms-alpha.c:6818 +#: vms-alpha.c:6998 #, c-format msgid "non-contiguous array of %s\n" msgstr "" -#: vms-alpha.c:6823 +#: vms-alpha.c:7003 #, c-format msgid "dimct: %u, aflags: 0x%02x, digits: %u, scale: %u\n" msgstr "" -#: vms-alpha.c:6828 +#: vms-alpha.c:7008 #, c-format msgid "arsize: %u, a0: 0x%08x\n" msgstr "" -#: vms-alpha.c:6832 +#: vms-alpha.c:7012 #, c-format msgid "Strides:\n" msgstr "" -#: vms-alpha.c:6842 +#: vms-alpha.c:7022 #, c-format msgid "Bounds:\n" msgstr "" -#: vms-alpha.c:6848 +#: vms-alpha.c:7028 #, c-format msgid "[%u]: Lower: %u, upper: %u\n" msgstr "" -#: vms-alpha.c:6860 +#: vms-alpha.c:7040 #, c-format msgid "unaligned bit-string of %s\n" msgstr "" -#: vms-alpha.c:6865 +#: vms-alpha.c:7045 #, c-format msgid "base: %u, pos: %u\n" msgstr "" -#: vms-alpha.c:6886 +#: vms-alpha.c:7066 #, c-format msgid "vflags: 0x%02x, value: 0x%08x " msgstr "" -#: vms-alpha.c:6892 +#: vms-alpha.c:7072 #, c-format msgid "(no value)\n" msgstr "" -#: vms-alpha.c:6895 +#: vms-alpha.c:7075 #, c-format msgid "(not active)\n" msgstr "" -#: vms-alpha.c:6898 +#: vms-alpha.c:7078 #, c-format msgid "(not allocated)\n" msgstr "" -#: vms-alpha.c:6901 +#: vms-alpha.c:7081 #, c-format msgid "(descriptor)\n" msgstr "" -#: vms-alpha.c:6905 +#: vms-alpha.c:7085 #, c-format msgid "(trailing value)\n" msgstr "" -#: vms-alpha.c:6908 +#: vms-alpha.c:7088 #, c-format msgid "(value spec follows)\n" msgstr "" -#: vms-alpha.c:6911 +#: vms-alpha.c:7091 #, c-format msgid "(at bit offset %u)\n" msgstr "" -#: vms-alpha.c:6915 +#: vms-alpha.c:7095 #, c-format msgid "(reg: %u, disp: %u, indir: %u, kind: " msgstr "" -#: vms-alpha.c:6922 +#: vms-alpha.c:7102 msgid "literal" msgstr "" -#: vms-alpha.c:6925 +#: vms-alpha.c:7105 msgid "address" msgstr "" -#: vms-alpha.c:6928 +#: vms-alpha.c:7108 msgid "desc" msgstr "" -#: vms-alpha.c:6931 +#: vms-alpha.c:7111 msgid "reg" msgstr "" -#: vms-alpha.c:6948 +#: vms-alpha.c:7128 #, c-format msgid "len: %2u, kind: %2u " msgstr "" -#: vms-alpha.c:6954 +#: vms-alpha.c:7134 #, c-format msgid "atomic, type=0x%02x %s\n" msgstr "" -#: vms-alpha.c:6958 +#: vms-alpha.c:7138 #, c-format msgid "indirect, defined at 0x%08x\n" msgstr "" -#: vms-alpha.c:6962 +#: vms-alpha.c:7142 #, c-format msgid "typed pointer\n" msgstr "" -#: vms-alpha.c:6966 +#: vms-alpha.c:7146 #, c-format msgid "pointer\n" msgstr "" -#: vms-alpha.c:6974 +#: vms-alpha.c:7154 #, c-format msgid "array, dim: %u, bitmap: " msgstr "" -#: vms-alpha.c:6981 +#: vms-alpha.c:7161 #, c-format msgid "array descriptor:\n" msgstr "" -#: vms-alpha.c:6988 +#: vms-alpha.c:7168 #, c-format msgid "type spec for element:\n" msgstr "" -#: vms-alpha.c:6990 +#: vms-alpha.c:7170 #, c-format msgid "type spec for subscript %u:\n" msgstr "" -#: vms-alpha.c:7008 +#: vms-alpha.c:7188 #, c-format msgid "Debug symbol table:\n" msgstr "" -#: vms-alpha.c:7019 +#: vms-alpha.c:7199 #, c-format msgid "cannot read DST header\n" msgstr "" -#: vms-alpha.c:7025 +#: vms-alpha.c:7205 #, c-format msgid " type: %3u, len: %3u (at 0x%08x): " msgstr "" -#: vms-alpha.c:7039 +#: vms-alpha.c:7219 #, c-format msgid "cannot read DST symbol\n" msgstr "" -#: vms-alpha.c:7082 +#: vms-alpha.c:7262 #, c-format msgid "standard data: %s\n" msgstr "" -#: vms-alpha.c:7085 vms-alpha.c:7173 +#: vms-alpha.c:7265 vms-alpha.c:7353 #, c-format msgid " name: %.*s\n" msgstr "" -#: vms-alpha.c:7092 +#: vms-alpha.c:7272 #, c-format msgid "modbeg\n" msgstr "" -#: vms-alpha.c:7094 +#: vms-alpha.c:7274 #, c-format msgid " flags: %d, language: %u, major: %u, minor: %u\n" msgstr "" -#: vms-alpha.c:7100 vms-alpha.c:7374 +#: vms-alpha.c:7280 vms-alpha.c:7554 #, c-format msgid " module name: %.*s\n" msgstr "" -#: vms-alpha.c:7103 +#: vms-alpha.c:7283 #, c-format msgid " compiler : %.*s\n" msgstr "" -#: vms-alpha.c:7108 +#: vms-alpha.c:7288 #, c-format msgid "modend\n" msgstr "" -#: vms-alpha.c:7115 +#: vms-alpha.c:7295 msgid "rtnbeg\n" msgstr "" -#: vms-alpha.c:7117 +#: vms-alpha.c:7297 #, c-format msgid " flags: %u, address: 0x%08x, pd-address: 0x%08x\n" msgstr "" -#: vms-alpha.c:7122 +#: vms-alpha.c:7302 #, c-format msgid " routine name: %.*s\n" msgstr "" -#: vms-alpha.c:7130 +#: vms-alpha.c:7310 #, c-format msgid "rtnend: size 0x%08x\n" msgstr "" -#: vms-alpha.c:7138 +#: vms-alpha.c:7318 #, c-format msgid "prolog: bkpt address 0x%08x\n" msgstr "" -#: vms-alpha.c:7147 +#: vms-alpha.c:7327 #, c-format msgid "epilog: flags: %u, count: %u\n" msgstr "" -#: vms-alpha.c:7157 +#: vms-alpha.c:7337 #, c-format msgid "blkbeg: address: 0x%08x, name: %.*s\n" msgstr "" -#: vms-alpha.c:7166 +#: vms-alpha.c:7346 #, c-format msgid "blkend: size: 0x%08x\n" msgstr "" -#: vms-alpha.c:7172 +#: vms-alpha.c:7352 #, c-format msgid "typspec (len: %u)\n" msgstr "" -#: vms-alpha.c:7179 +#: vms-alpha.c:7359 #, c-format msgid "septyp, name: %.*s\n" msgstr "" -#: vms-alpha.c:7188 +#: vms-alpha.c:7368 #, c-format msgid "recbeg: name: %.*s\n" msgstr "" -#: vms-alpha.c:7190 +#: vms-alpha.c:7370 #, c-format msgid " len: %u bits\n" msgstr "" -#: vms-alpha.c:7195 +#: vms-alpha.c:7375 #, c-format msgid "recend\n" msgstr "" -#: vms-alpha.c:7199 +#: vms-alpha.c:7379 #, c-format msgid "enumbeg, len: %u, name: %.*s\n" msgstr "" -#: vms-alpha.c:7203 +#: vms-alpha.c:7383 #, c-format msgid "enumelt, name: %.*s\n" msgstr "" -#: vms-alpha.c:7207 +#: vms-alpha.c:7387 #, c-format msgid "enumend\n" msgstr "" -#: vms-alpha.c:7212 +#: vms-alpha.c:7392 #, c-format msgid "label, name: %.*s\n" msgstr "" -#: vms-alpha.c:7214 +#: vms-alpha.c:7394 #, c-format msgid " address: 0x%08x\n" msgstr "" -#: vms-alpha.c:7224 +#: vms-alpha.c:7404 #, c-format msgid "discontiguous range (nbr: %u)\n" msgstr "" -#: vms-alpha.c:7227 +#: vms-alpha.c:7407 #, c-format msgid " address: 0x%08x, size: %u\n" msgstr "" -#: vms-alpha.c:7237 +#: vms-alpha.c:7417 #, c-format msgid "line num (len: %u)\n" msgstr "" -#: vms-alpha.c:7254 +#: vms-alpha.c:7434 #, c-format msgid "delta_pc_w %u\n" msgstr "" -#: vms-alpha.c:7261 +#: vms-alpha.c:7441 #, c-format msgid "incr_linum(b): +%u\n" msgstr "" -#: vms-alpha.c:7267 +#: vms-alpha.c:7447 #, c-format msgid "incr_linum_w: +%u\n" msgstr "" -#: vms-alpha.c:7273 +#: vms-alpha.c:7453 #, c-format msgid "incr_linum_l: +%u\n" msgstr "" -#: vms-alpha.c:7279 +#: vms-alpha.c:7459 #, c-format msgid "set_line_num(w) %u\n" msgstr "" -#: vms-alpha.c:7284 +#: vms-alpha.c:7464 #, c-format msgid "set_line_num_b %u\n" msgstr "" -#: vms-alpha.c:7289 +#: vms-alpha.c:7469 #, c-format msgid "set_line_num_l %u\n" msgstr "" -#: vms-alpha.c:7294 +#: vms-alpha.c:7474 #, c-format msgid "set_abs_pc: 0x%08x\n" msgstr "" -#: vms-alpha.c:7298 +#: vms-alpha.c:7478 #, c-format msgid "delta_pc_l: +0x%08x\n" msgstr "" -#: vms-alpha.c:7303 +#: vms-alpha.c:7483 #, c-format msgid "term(b): 0x%02x" msgstr "" -#: vms-alpha.c:7305 +#: vms-alpha.c:7485 #, c-format msgid " pc: 0x%08x\n" msgstr "" -#: vms-alpha.c:7310 +#: vms-alpha.c:7490 #, c-format msgid "term_w: 0x%04x" msgstr "" -#: vms-alpha.c:7312 +#: vms-alpha.c:7492 #, c-format msgid " pc: 0x%08x\n" msgstr "" -#: vms-alpha.c:7318 +#: vms-alpha.c:7498 #, c-format msgid "delta pc +%-4d" msgstr "" -#: vms-alpha.c:7322 +#: vms-alpha.c:7502 #, c-format msgid " pc: 0x%08x line: %5u\n" msgstr "" -#: vms-alpha.c:7327 +#: vms-alpha.c:7507 #, c-format msgid " *unhandled* cmd %u\n" msgstr "" -#: vms-alpha.c:7342 +#: vms-alpha.c:7522 #, c-format msgid "source (len: %u)\n" msgstr "" -#: vms-alpha.c:7357 +#: vms-alpha.c:7537 #, c-format msgid " declfile: len: %u, flags: %u, fileid: %u\n" msgstr "" -#: vms-alpha.c:7362 +#: vms-alpha.c:7542 #, c-format msgid " rms: cdt: 0x%08x %08x, ebk: 0x%08x, ffb: 0x%04x, rfo: %u\n" msgstr "" -#: vms-alpha.c:7371 +#: vms-alpha.c:7551 #, c-format msgid " filename : %.*s\n" msgstr "" -#: vms-alpha.c:7380 +#: vms-alpha.c:7560 #, c-format msgid " setfile %u\n" msgstr "" -#: vms-alpha.c:7385 vms-alpha.c:7390 +#: vms-alpha.c:7565 vms-alpha.c:7570 #, c-format msgid " setrec %u\n" msgstr "" -#: vms-alpha.c:7395 vms-alpha.c:7400 +#: vms-alpha.c:7575 vms-alpha.c:7580 #, c-format msgid " setlnum %u\n" msgstr "" -#: vms-alpha.c:7405 vms-alpha.c:7410 +#: vms-alpha.c:7585 vms-alpha.c:7590 #, c-format msgid " deflines %u\n" msgstr "" -#: vms-alpha.c:7414 +#: vms-alpha.c:7594 #, c-format msgid " formfeed\n" msgstr "" -#: vms-alpha.c:7418 +#: vms-alpha.c:7598 #, c-format msgid " *unhandled* cmd %u\n" msgstr "" -#: vms-alpha.c:7430 +#: vms-alpha.c:7610 #, c-format msgid "*unhandled* dst type %u\n" msgstr "" -#: vms-alpha.c:7462 +#: vms-alpha.c:7642 #, c-format msgid "cannot read EIHD\n" msgstr "" -#: vms-alpha.c:7466 +#: vms-alpha.c:7646 #, c-format msgid "EIHD: (size: %u, nbr blocks: %u)\n" msgstr "" -#: vms-alpha.c:7470 +#: vms-alpha.c:7650 #, c-format msgid " majorid: %u, minorid: %u\n" msgstr "" -#: vms-alpha.c:7478 +#: vms-alpha.c:7658 msgid "executable" msgstr "" -#: vms-alpha.c:7481 +#: vms-alpha.c:7661 msgid "linkable image" msgstr "" -#: vms-alpha.c:7488 +#: vms-alpha.c:7668 #, c-format msgid " image type: %u (%s)" msgstr "" -#: vms-alpha.c:7494 +#: vms-alpha.c:7674 msgid "native" msgstr "" -#: vms-alpha.c:7497 +#: vms-alpha.c:7677 msgid "CLI" msgstr "" -#: vms-alpha.c:7504 +#: vms-alpha.c:7684 #, c-format msgid ", subtype: %u (%s)\n" msgstr "" -#: vms-alpha.c:7511 +#: vms-alpha.c:7691 #, c-format msgid " offsets: isd: %u, activ: %u, symdbg: %u, imgid: %u, patch: %u\n" msgstr "" -#: vms-alpha.c:7515 +#: vms-alpha.c:7695 #, c-format msgid " fixup info rva: " msgstr "" -#: vms-alpha.c:7517 +#: vms-alpha.c:7697 #, c-format msgid ", symbol vector rva: " msgstr "" -#: vms-alpha.c:7520 +#: vms-alpha.c:7700 #, c-format msgid "" "\n" " version array off: %u\n" msgstr "" -#: vms-alpha.c:7525 +#: vms-alpha.c:7705 #, c-format msgid " img I/O count: %u, nbr channels: %u, req pri: %08x%08x\n" msgstr "" -#: vms-alpha.c:7531 +#: vms-alpha.c:7711 #, c-format msgid " linker flags: %08x:" msgstr "" -#: vms-alpha.c:7562 +#: vms-alpha.c:7742 #, c-format msgid " ident: 0x%08x, sysver: 0x%08x, match ctrl: %u, symvect_size: %u\n" msgstr "" -#: vms-alpha.c:7568 +#: vms-alpha.c:7748 #, c-format msgid " BPAGE: %u" msgstr "" -#: vms-alpha.c:7575 +#: vms-alpha.c:7755 #, c-format msgid ", ext fixup offset: %u, no_opt psect off: %u" msgstr "" -#: vms-alpha.c:7578 +#: vms-alpha.c:7758 #, c-format msgid ", alias: %u\n" msgstr "" -#: vms-alpha.c:7586 +#: vms-alpha.c:7766 #, c-format msgid "system version array information:\n" msgstr "" -#: vms-alpha.c:7590 +#: vms-alpha.c:7770 #, c-format msgid "cannot read EIHVN header\n" msgstr "" -#: vms-alpha.c:7600 +#: vms-alpha.c:7780 #, c-format msgid "cannot read EIHVN version\n" msgstr "" -#: vms-alpha.c:7603 +#: vms-alpha.c:7783 #, c-format msgid " %02u " msgstr "" -#: vms-alpha.c:7607 +#: vms-alpha.c:7787 msgid "BASE_IMAGE " msgstr "" -#: vms-alpha.c:7610 +#: vms-alpha.c:7790 msgid "MEMORY_MANAGEMENT" msgstr "" -#: vms-alpha.c:7613 +#: vms-alpha.c:7793 msgid "IO " msgstr "" -#: vms-alpha.c:7616 +#: vms-alpha.c:7796 msgid "FILES_VOLUMES " msgstr "" -#: vms-alpha.c:7619 +#: vms-alpha.c:7799 msgid "PROCESS_SCHED " msgstr "" -#: vms-alpha.c:7622 +#: vms-alpha.c:7802 msgid "SYSGEN " msgstr "" -#: vms-alpha.c:7625 +#: vms-alpha.c:7805 msgid "CLUSTERS_LOCKMGR " msgstr "" -#: vms-alpha.c:7628 +#: vms-alpha.c:7808 msgid "LOGICAL_NAMES " msgstr "" -#: vms-alpha.c:7631 +#: vms-alpha.c:7811 msgid "SECURITY " msgstr "" -#: vms-alpha.c:7634 +#: vms-alpha.c:7814 msgid "IMAGE_ACTIVATOR " msgstr "" -#: vms-alpha.c:7637 +#: vms-alpha.c:7817 msgid "NETWORKS " msgstr "" -#: vms-alpha.c:7640 +#: vms-alpha.c:7820 msgid "COUNTERS " msgstr "" -#: vms-alpha.c:7643 +#: vms-alpha.c:7823 msgid "STABLE " msgstr "" -#: vms-alpha.c:7646 +#: vms-alpha.c:7826 msgid "MISC " msgstr "" -#: vms-alpha.c:7649 +#: vms-alpha.c:7829 msgid "CPU " msgstr "" -#: vms-alpha.c:7652 +#: vms-alpha.c:7832 msgid "VOLATILE " msgstr "" -#: vms-alpha.c:7655 +#: vms-alpha.c:7835 msgid "SHELL " msgstr "" -#: vms-alpha.c:7658 +#: vms-alpha.c:7838 msgid "POSIX " msgstr "" -#: vms-alpha.c:7661 +#: vms-alpha.c:7841 msgid "MULTI_PROCESSING " msgstr "" -#: vms-alpha.c:7664 +#: vms-alpha.c:7844 msgid "GALAXY " msgstr "" -#: vms-alpha.c:7667 +#: vms-alpha.c:7847 msgid "*unknown* " msgstr "" -#: vms-alpha.c:7683 vms-alpha.c:7958 +#: vms-alpha.c:7863 vms-alpha.c:8137 #, c-format msgid "cannot read EIHA\n" msgstr "" -#: vms-alpha.c:7686 +#: vms-alpha.c:7866 #, c-format msgid "Image activation: (size=%u)\n" msgstr "" -#: vms-alpha.c:7689 +#: vms-alpha.c:7869 #, c-format msgid " First address : 0x%08x 0x%08x\n" msgstr "" -#: vms-alpha.c:7693 +#: vms-alpha.c:7873 #, c-format msgid " Second address: 0x%08x 0x%08x\n" msgstr "" -#: vms-alpha.c:7697 +#: vms-alpha.c:7877 #, c-format msgid " Third address : 0x%08x 0x%08x\n" msgstr "" -#: vms-alpha.c:7701 +#: vms-alpha.c:7881 #, c-format msgid " Fourth address: 0x%08x 0x%08x\n" msgstr "" -#: vms-alpha.c:7705 +#: vms-alpha.c:7885 #, c-format msgid " Shared image : 0x%08x 0x%08x\n" msgstr "" -#: vms-alpha.c:7716 +#: vms-alpha.c:7896 #, c-format msgid "cannot read EIHI\n" msgstr "" -#: vms-alpha.c:7720 +#: vms-alpha.c:7900 #, c-format msgid "Image identification: (major: %u, minor: %u)\n" msgstr "" -#: vms-alpha.c:7723 +#: vms-alpha.c:7903 #, c-format msgid " image name : %.*s\n" msgstr "" -#: vms-alpha.c:7725 +#: vms-alpha.c:7905 #, c-format msgid " link time : %s\n" msgstr "" -#: vms-alpha.c:7727 +#: vms-alpha.c:7907 #, c-format msgid " image ident : %.*s\n" msgstr "" -#: vms-alpha.c:7729 +#: vms-alpha.c:7909 #, c-format msgid " linker ident : %.*s\n" msgstr "" -#: vms-alpha.c:7731 +#: vms-alpha.c:7911 #, c-format msgid " image build ident: %.*s\n" msgstr "" -#: vms-alpha.c:7741 +#: vms-alpha.c:7921 #, c-format msgid "cannot read EIHS\n" msgstr "" -#: vms-alpha.c:7745 +#: vms-alpha.c:7925 #, c-format msgid "Image symbol & debug table: (major: %u, minor: %u)\n" msgstr "" -#: vms-alpha.c:7751 +#: vms-alpha.c:7931 #, c-format msgid " debug symbol table : vbn: %u, size: %u (0x%x)\n" msgstr "" -#: vms-alpha.c:7756 +#: vms-alpha.c:7936 #, c-format msgid " global symbol table: vbn: %u, records: %u\n" msgstr "" -#: vms-alpha.c:7761 +#: vms-alpha.c:7941 #, c-format msgid " debug module table : vbn: %u, size: %u\n" msgstr "" -#: vms-alpha.c:7774 +#: vms-alpha.c:7954 #, c-format msgid "cannot read EISD\n" msgstr "" -#: vms-alpha.c:7785 +#: vms-alpha.c:7965 #, c-format msgid "" "Image section descriptor: (major: %u, minor: %u, size: %u, offset: %u)\n" msgstr "" -#: vms-alpha.c:7793 +#: vms-alpha.c:7973 #, c-format msgid " section: base: 0x%08x%08x size: 0x%08x\n" msgstr "" -#: vms-alpha.c:7798 +#: vms-alpha.c:7978 #, c-format msgid " flags: 0x%04x" msgstr "" -#: vms-alpha.c:7836 +#: vms-alpha.c:8016 #, c-format msgid " vbn: %u, pfc: %u, matchctl: %u type: %u (" msgstr "" -#: vms-alpha.c:7842 +#: vms-alpha.c:8022 msgid "NORMAL" msgstr "" -#: vms-alpha.c:7845 +#: vms-alpha.c:8025 msgid "SHRFXD" msgstr "" -#: vms-alpha.c:7848 +#: vms-alpha.c:8028 msgid "PRVFXD" msgstr "" -#: vms-alpha.c:7851 +#: vms-alpha.c:8031 msgid "SHRPIC" msgstr "" -#: vms-alpha.c:7854 +#: vms-alpha.c:8034 msgid "PRVPIC" msgstr "" -#: vms-alpha.c:7857 +#: vms-alpha.c:8037 msgid "USRSTACK" msgstr "" -#: vms-alpha.c:7863 +#: vms-alpha.c:8043 msgid ")\n" msgstr "" -#: vms-alpha.c:7866 +#: vms-alpha.c:8046 #, c-format msgid " ident: 0x%08x, name: %.*s\n" msgstr "" -#: vms-alpha.c:7876 +#: vms-alpha.c:8056 #, c-format msgid "cannot read DMT\n" msgstr "" -#: vms-alpha.c:7880 +#: vms-alpha.c:8060 #, c-format msgid "Debug module table:\n" msgstr "" -#: vms-alpha.c:7889 +#: vms-alpha.c:8069 #, c-format msgid "cannot read DMT header\n" msgstr "" -#: vms-alpha.c:7895 +#: vms-alpha.c:8075 #, c-format msgid " module offset: 0x%08x, size: 0x%08x, (%u psects)\n" msgstr "" -#: vms-alpha.c:7905 +#: vms-alpha.c:8085 #, c-format msgid "cannot read DMT psect\n" msgstr "" -#: vms-alpha.c:7909 +#: vms-alpha.c:8089 #, c-format msgid " psect start: 0x%08x, length: %u\n" msgstr "" -#: vms-alpha.c:7922 +#: vms-alpha.c:8102 #, c-format msgid "cannot read DST\n" msgstr "" -#: vms-alpha.c:7932 +#: vms-alpha.c:8112 #, c-format msgid "cannot read GST\n" msgstr "" -#: vms-alpha.c:7936 +#: vms-alpha.c:8116 #, c-format msgid "Global symbol table:\n" msgstr "" -#: vms-alpha.c:7965 +#: vms-alpha.c:8143 #, c-format msgid "Image activator fixup: (major: %u, minor: %u)\n" msgstr "" -#: vms-alpha.c:7969 +#: vms-alpha.c:8147 #, c-format msgid " iaflink : 0x%08x %08x\n" msgstr "" -#: vms-alpha.c:7973 +#: vms-alpha.c:8151 #, c-format msgid " fixuplnk: 0x%08x %08x\n" msgstr "" -#: vms-alpha.c:7976 +#: vms-alpha.c:8154 #, c-format msgid " size : %u\n" msgstr "" -#: vms-alpha.c:7978 +#: vms-alpha.c:8156 #, c-format msgid " flags: 0x%08x\n" msgstr "" -#: vms-alpha.c:7983 +#: vms-alpha.c:8161 #, c-format msgid " qrelfixoff: %5u, lrelfixoff: %5u\n" msgstr "" -#: vms-alpha.c:7988 +#: vms-alpha.c:8166 #, c-format msgid " qdotadroff: %5u, ldotadroff: %5u\n" msgstr "" -#: vms-alpha.c:7993 +#: vms-alpha.c:8171 #, c-format msgid " codeadroff: %5u, lpfixoff : %5u\n" msgstr "" -#: vms-alpha.c:7996 +#: vms-alpha.c:8174 #, c-format msgid " chgprtoff : %5u\n" msgstr "" -#: vms-alpha.c:8000 +#: vms-alpha.c:8178 #, c-format msgid " shlstoff : %5u, shrimgcnt : %5u\n" msgstr "" -#: vms-alpha.c:8003 +#: vms-alpha.c:8181 #, c-format msgid " shlextra : %5u, permctx : %5u\n" msgstr "" -#: vms-alpha.c:8006 +#: vms-alpha.c:8184 #, c-format msgid " base_va : 0x%08x\n" msgstr "" -#: vms-alpha.c:8008 +#: vms-alpha.c:8186 #, c-format msgid " lppsbfixoff: %5u\n" msgstr "" -#: vms-alpha.c:8016 +#: vms-alpha.c:8194 #, c-format msgid " Shareable images:\n" msgstr "" -#: vms-alpha.c:8021 +#: vms-alpha.c:8199 #, c-format msgid " %u: size: %u, flags: 0x%02x, name: %.*s\n" msgstr "" -#: vms-alpha.c:8028 +#: vms-alpha.c:8206 #, c-format msgid " quad-word relocation fixups:\n" msgstr "" -#: vms-alpha.c:8033 +#: vms-alpha.c:8211 #, c-format msgid " long-word relocation fixups:\n" msgstr "" -#: vms-alpha.c:8038 +#: vms-alpha.c:8216 #, c-format msgid " quad-word .address reference fixups:\n" msgstr "" -#: vms-alpha.c:8043 +#: vms-alpha.c:8221 #, c-format msgid " long-word .address reference fixups:\n" msgstr "" -#: vms-alpha.c:8048 +#: vms-alpha.c:8226 #, c-format msgid " Code Address Reference Fixups:\n" msgstr "" -#: vms-alpha.c:8053 +#: vms-alpha.c:8231 #, c-format msgid " Linkage Pairs Reference Fixups:\n" msgstr "" -#: vms-alpha.c:8062 +#: vms-alpha.c:8240 #, c-format msgid " Change Protection (%u entries):\n" msgstr "" -#: vms-alpha.c:8068 +#: vms-alpha.c:8246 #, c-format msgid " base: 0x%08x %08x, size: 0x%08x, prot: 0x%08x " msgstr "" #. FIXME: we do not yet support relocatable link. It is not obvious #. how to do it for debug infos. -#: vms-alpha.c:8908 +#: vms-alpha.c:9123 msgid "%P: relocatable link is not supported\n" msgstr "" -#: vms-alpha.c:8979 +#: vms-alpha.c:9194 #, c-format msgid "%P: multiple entry points: in modules %pB and %pB\n" msgstr "" -#: vms-lib.c:1445 +#: vms-lib.c:1525 #, c-format msgid "could not open shared image '%s' from '%s'" msgstr "" -#: vms-misc.c:361 +#: vms-misc.c:367 msgid "_bfd_vms_output_counted called with zero bytes" msgstr "" -#: vms-misc.c:366 +#: vms-misc.c:372 msgid "_bfd_vms_output_counted called with too many bytes" msgstr "" @@ -7974,412 +8361,454 @@ msgid "%pB: dynamic object with no .loader section" msgstr "" -#: xcofflink.c:1413 +#: xcofflink.c:1417 #, c-format msgid "%pB: `%s' has line numbers but no enclosing section" msgstr "" -#: xcofflink.c:1466 +#: xcofflink.c:1470 #, c-format msgid "%pB: class %d symbol `%s' has no aux entries" msgstr "" -#: xcofflink.c:1489 +#: xcofflink.c:1493 #, c-format msgid "%pB: symbol `%s' has unrecognized csect type %d" msgstr "" -#: xcofflink.c:1502 +#: xcofflink.c:1506 #, c-format msgid "%pB: bad XTY_ER symbol `%s': class %d scnum %d scnlen %" msgstr "" -#: xcofflink.c:1533 +#: xcofflink.c:1537 #, c-format msgid "%pB: XMC_TC0 symbol `%s' is class %d scnlen %" msgstr "" -#: xcofflink.c:1680 +#: xcofflink.c:1684 #, c-format msgid "%pB: csect `%s' not in enclosing section" msgstr "" -#: xcofflink.c:1788 +#: xcofflink.c:1792 #, c-format msgid "%pB: misplaced XTY_LD `%s'" msgstr "" -#: xcofflink.c:2109 +#: xcofflink.c:2113 #, c-format msgid "%pB: reloc %s:% not in csect" msgstr "" -#: xcofflink.c:3196 +#: xcofflink.c:3193 #, c-format msgid "%s: no such symbol" msgstr "" -#: xcofflink.c:3301 +#: xcofflink.c:3298 #, c-format msgid "warning: attempt to export undefined symbol `%s'" msgstr "" -#: xcofflink.c:3680 +#: xcofflink.c:3677 msgid "error: undefined symbol __rtinit" msgstr "" -#: xcofflink.c:4060 +#: xcofflink.c:4055 #, c-format msgid "%pB: loader reloc in unrecognized section `%s'" msgstr "" -#: xcofflink.c:4072 +#: xcofflink.c:4067 #, c-format msgid "%pB: `%s' in loader reloc but not loader sym" msgstr "" -#: xcofflink.c:4089 +#: xcofflink.c:4084 #, c-format msgid "%pB: loader reloc in read-only section %pA" msgstr "" -#: xcofflink.c:5113 +#: xcofflink.c:5112 #, c-format msgid "TOC overflow: %# > 0x10000; try -mminimal-toc when compiling" msgstr "" -#: /work/sources/binutils/current/bfd/elfnn-aarch64.c:5031 +#. Not fatal, this callback cannot fail. +#: elfnn-aarch64.c:2872 +#, c-format +msgid "unknown attribute for symbol `%s': 0x%02x" +msgstr "" + +#: elfnn-aarch64.c:5246 #, c-format msgid "%pB: error: erratum 835769 stub out of range (input file too large)" msgstr "" -#: /work/sources/binutils/current/bfd/elfnn-aarch64.c:5112 +#: elfnn-aarch64.c:5338 #, c-format msgid "%pB: error: erratum 843419 stub out of range (input file too large)" msgstr "" -#: /work/sources/binutils/current/bfd/elfnn-aarch64.c:5641 +#: elfnn-aarch64.c:5351 +msgid "%pB: error: erratum 843419 immediate 0x%" +msgstr "" + +#: elfnn-aarch64.c:5899 #, c-format msgid "" "%pB: relocation %s against symbol `%s' which may bind externally can not be " "used when making a shared object; recompile with -fPIC" msgstr "" -#: /work/sources/binutils/current/bfd/elfnn-aarch64.c:5732 +#: elfnn-aarch64.c:5990 #, c-format msgid "" "%pB: local symbol descriptor table be NULL when applying relocation %s " "against local symbol" msgstr "" -#: /work/sources/binutils/current/bfd/elfnn-aarch64.c:6830 +#: elfnn-aarch64.c:6103 elfnn-aarch64.c:6140 +#, c-format +msgid "%pB: TLS relocation %s against undefined symbol `%s'" +msgstr "" + +#: elfnn-aarch64.c:7125 msgid "too many GOT entries for -fpic, please recompile with -fPIC" msgstr "" -#: /work/sources/binutils/current/bfd/elfnn-aarch64.c:6858 +#: elfnn-aarch64.c:7153 msgid "" "one possible cause of this error is that the symbol is being referenced in " "the indicated code as if it had a larger alignment than was declared where " "it was defined" msgstr "" -#: /work/sources/binutils/current/bfd/elfnn-aarch64.c:7443 +#: elfnn-aarch64.c:7720 #, c-format msgid "" "%pB: relocation %s against `%s' can not be used when making a shared object" msgstr "" -#: /work/sources/binutils/current/bfd/elfnn-riscv.c:182 -#: /work/sources/binutils/current/bfd/elfnn-riscv.c:217 +#: elfnn-riscv.c:187 elfnn-riscv.c:222 #, c-format msgid "%pB: warning: RVE PLT generation not supported" msgstr "" -#: /work/sources/binutils/current/bfd/elfnn-riscv.c:2311 +#: elfnn-riscv.c:1977 +#, c-format +msgid "%pcrel_lo section symbol with an addend" +msgstr "" + +#: elfnn-riscv.c:2198 +#, c-format +msgid "" +"%%X%%P: relocation %s against `%s' can not be used when making a shared " +"object; recompile with -fPIC\n" +msgstr "" + +#: elfnn-riscv.c:2208 +#, c-format +msgid "%%X%%P: unresolvable %s relocation against symbol `%s'\n" +msgstr "" + +#: elfnn-riscv.c:2247 msgid "%X%P: internal error: out of range error\n" msgstr "" -#: /work/sources/binutils/current/bfd/elfnn-riscv.c:2315 +#: elfnn-riscv.c:2252 msgid "%X%P: internal error: unsupported relocation error\n" msgstr "" -#: /work/sources/binutils/current/bfd/elfnn-riscv.c:2325 +#: elfnn-riscv.c:2258 +msgid "dangerous relocation error" +msgstr "" + +#: elfnn-riscv.c:2264 msgid "%X%P: internal error: unknown error\n" msgstr "" -#: /work/sources/binutils/current/bfd/elfnn-riscv.c:2711 +#: elfnn-riscv.c:2630 #, c-format -msgid "error: %pB: Mis-matched ISA version for '%s' exetension. %d.%d vs %d.%d" +msgid "error: %pB: Mis-matched ISA version for '%s' extension. %d.%d vs %d.%d" msgstr "" -#: /work/sources/binutils/current/bfd/elfnn-riscv.c:2729 +#: elfnn-riscv.c:2648 #, c-format msgid "" -"error: %pB: corrupted ISA string '%s'.first letter should be 'i' or 'e' but " +"error: %pB: corrupted ISA string '%s'. First letter should be 'i' or 'e' but " "got '%s'." msgstr "" -#: /work/sources/binutils/current/bfd/elfnn-riscv.c:2773 +#: elfnn-riscv.c:2692 #, c-format msgid "error: %pB: Mis-matched ISA string to merge '%s' and '%s'." msgstr "" -#: /work/sources/binutils/current/bfd/elfnn-riscv.c:2921 +#: elfnn-riscv.c:2893 #, c-format msgid "error: %pB: ISA string of input (%s) doesn't match output (%s)." msgstr "" -#: /work/sources/binutils/current/bfd/elfnn-riscv.c:2946 +#: elfnn-riscv.c:2913 #, c-format msgid "error: %pB: XLEN of input (%u) doesn't match output (%u)." msgstr "" -#: /work/sources/binutils/current/bfd/elfnn-riscv.c:2954 +#: elfnn-riscv.c:2921 #, c-format -msgid "error: %pB: Unspported XLEN (%u), you mightusing wrong emulation." +msgid "error: %pB: Unsupported XLEN (%u), you might be using wrong emulation." msgstr "" -#: /work/sources/binutils/current/bfd/elfnn-riscv.c:3039 +#: elfnn-riscv.c:3035 #, c-format -msgid "error: %pB: conflicting priv spec version (major/minor/revision)." +msgid "" +"warning: %pB use privilege spec version %u.%u.%u but the output use version " +"%u.%u.%u." +msgstr "" + +#: elfnn-riscv.c:3053 +msgid "" +"warning: privilege spec version 1.9.1 can not be linked with other spec " +"versions." msgstr "" -#: /work/sources/binutils/current/bfd/elfnn-riscv.c:3055 +#: elfnn-riscv.c:3081 #, c-format msgid "" "error: %pB use %u-byte stack aligned but the output use %u-byte stack " "aligned." msgstr "" -#: /work/sources/binutils/current/bfd/elfnn-riscv.c:3096 +#: elfnn-riscv.c:3122 #, c-format msgid "" "%pB: ABI is incompatible with that of the selected emulation:\n" " target emulation `%s' does not match `%s'" msgstr "" -#: /work/sources/binutils/current/bfd/elfnn-riscv.c:3119 +#: elfnn-riscv.c:3176 #, c-format msgid "%pB: can't link %s modules with %s modules" msgstr "" -#: /work/sources/binutils/current/bfd/elfnn-riscv.c:3129 +#: elfnn-riscv.c:3186 #, c-format msgid "%pB: can't link RVE with other target" msgstr "" -#: /work/sources/binutils/current/bfd/elfnn-riscv.c:3630 +#: elfnn-riscv.c:3724 #, c-format msgid "" "%pB(%pA+%#): % bytes required for alignment to %-" "byte boundary, but only % present" msgstr "" -#: peigen.c:157 pepigen.c:157 pex64igen.c:157 +#: peXXigen.c:164 #, c-format msgid "%pB: unable to find name for empty section" msgstr "" -#: peigen.c:183 pepigen.c:183 pex64igen.c:183 +#: peXXigen.c:191 #, c-format msgid "%pB: out of memory creating name for empty section" msgstr "" -#: peigen.c:194 pepigen.c:194 pex64igen.c:194 +#: peXXigen.c:201 #, c-format msgid "%pB: unable to create fake empty section" msgstr "" -#: peigen.c:532 pepigen.c:532 pex64igen.c:532 +#: peXXigen.c:539 #, c-format msgid "" -"%pB: aout header specifies an invalid number of data-directory entries: %ld" +"%pB: aout header specifies an invalid number of data-directory entries: %u" msgstr "" -#: peigen.c:1091 pepigen.c:1091 pex64igen.c:1091 +#: peXXigen.c:1088 #, c-format msgid "%pB: line number overflow: 0x%lx > 0xffff" msgstr "" -#: peigen.c:1235 pepigen.c:1235 pex64igen.c:1235 +#: peXXigen.c:1241 msgid "Export Directory [.edata (or where ever we found it)]" msgstr "" -#: peigen.c:1236 pepigen.c:1236 pex64igen.c:1236 +#: peXXigen.c:1242 msgid "Import Directory [parts of .idata]" msgstr "" -#: peigen.c:1237 pepigen.c:1237 pex64igen.c:1237 +#: peXXigen.c:1243 msgid "Resource Directory [.rsrc]" msgstr "" -#: peigen.c:1238 pepigen.c:1238 pex64igen.c:1238 +#: peXXigen.c:1244 msgid "Exception Directory [.pdata]" msgstr "" -#: peigen.c:1239 pepigen.c:1239 pex64igen.c:1239 +#: peXXigen.c:1245 msgid "Security Directory" msgstr "" -#: peigen.c:1240 pepigen.c:1240 pex64igen.c:1240 +#: peXXigen.c:1246 msgid "Base Relocation Directory [.reloc]" msgstr "" -#: peigen.c:1241 pepigen.c:1241 pex64igen.c:1241 +#: peXXigen.c:1247 msgid "Debug Directory" msgstr "" -#: peigen.c:1242 pepigen.c:1242 pex64igen.c:1242 +#: peXXigen.c:1248 msgid "Description Directory" msgstr "" -#: peigen.c:1243 pepigen.c:1243 pex64igen.c:1243 +#: peXXigen.c:1249 msgid "Special Directory" msgstr "" -#: peigen.c:1244 pepigen.c:1244 pex64igen.c:1244 +#: peXXigen.c:1250 msgid "Thread Storage Directory [.tls]" msgstr "" -#: peigen.c:1245 pepigen.c:1245 pex64igen.c:1245 +#: peXXigen.c:1251 msgid "Load Configuration Directory" msgstr "" -#: peigen.c:1246 pepigen.c:1246 pex64igen.c:1246 +#: peXXigen.c:1252 msgid "Bound Import Directory" msgstr "" -#: peigen.c:1247 pepigen.c:1247 pex64igen.c:1247 +#: peXXigen.c:1253 msgid "Import Address Table Directory" msgstr "" -#: peigen.c:1248 pepigen.c:1248 pex64igen.c:1248 +#: peXXigen.c:1254 msgid "Delay Import Directory" msgstr "" -#: peigen.c:1249 pepigen.c:1249 pex64igen.c:1249 +#: peXXigen.c:1255 msgid "CLR Runtime Header" msgstr "" -#: peigen.c:1250 pepigen.c:1250 pex64igen.c:1250 +#: peXXigen.c:1256 msgid "Reserved" msgstr "" -#: peigen.c:1310 pepigen.c:1310 pex64igen.c:1310 +#: peXXigen.c:1316 #, c-format msgid "" "\n" "There is an import table, but the section containing it could not be found\n" msgstr "" -#: peigen.c:1316 pepigen.c:1316 pex64igen.c:1316 +#: peXXigen.c:1322 #, c-format msgid "" "\n" "There is an import table in %s, but that section has no contents\n" msgstr "" -#: peigen.c:1323 pepigen.c:1323 pex64igen.c:1323 +#: peXXigen.c:1329 #, c-format msgid "" "\n" "There is an import table in %s at 0x%lx\n" msgstr "" -#: peigen.c:1365 pepigen.c:1365 pex64igen.c:1365 +#: peXXigen.c:1369 #, c-format msgid "" "\n" "Function descriptor located at the start address: %04lx\n" msgstr "" -#: peigen.c:1369 pepigen.c:1369 pex64igen.c:1369 +#: peXXigen.c:1373 #, c-format msgid "\tcode-base %08lx toc (loadable/actual) %08lx/%08lx\n" msgstr "" -#: peigen.c:1377 pepigen.c:1377 pex64igen.c:1377 +#: peXXigen.c:1380 #, c-format msgid "" "\n" "No reldata section! Function descriptor not decoded.\n" msgstr "" -#: peigen.c:1382 pepigen.c:1382 pex64igen.c:1382 +#: peXXigen.c:1385 #, c-format msgid "" "\n" "The Import Tables (interpreted %s section contents)\n" msgstr "" -#: peigen.c:1385 pepigen.c:1385 pex64igen.c:1385 +#: peXXigen.c:1388 #, c-format msgid "" " vma: Hint Time Forward DLL First\n" " Table Stamp Chain Name Thunk\n" msgstr "" -#: peigen.c:1435 pepigen.c:1435 pex64igen.c:1435 +#: peXXigen.c:1437 #, c-format msgid "" "\n" "\tDLL Name: %.*s\n" msgstr "" -#: peigen.c:1451 pepigen.c:1451 pex64igen.c:1451 +#: peXXigen.c:1453 #, c-format msgid "\tvma: Hint/Ord Member-Name Bound-To\n" msgstr "" -#: peigen.c:1476 pepigen.c:1476 pex64igen.c:1476 +#: peXXigen.c:1478 #, c-format msgid "" "\n" "There is a first thunk, but the section containing it could not be found\n" msgstr "" -#: peigen.c:1520 peigen.c:1559 pepigen.c:1520 pepigen.c:1559 pex64igen.c:1520 -#: pex64igen.c:1559 +#: peXXigen.c:1522 peXXigen.c:1561 #, c-format msgid "\t" msgstr "" -#: peigen.c:1652 pepigen.c:1652 pex64igen.c:1652 +#: peXXigen.c:1654 #, c-format msgid "" "\n" "There is an export table, but the section containing it could not be found\n" msgstr "" -#: peigen.c:1658 pepigen.c:1658 pex64igen.c:1658 +#: peXXigen.c:1660 #, c-format msgid "" "\n" "There is an export table in %s, but that section has no contents\n" msgstr "" -#: peigen.c:1669 pepigen.c:1669 pex64igen.c:1669 +#: peXXigen.c:1671 #, c-format msgid "" "\n" "There is an export table in %s, but it does not fit into that section\n" msgstr "" -#: peigen.c:1680 pepigen.c:1680 pex64igen.c:1680 +#: peXXigen.c:1682 #, c-format msgid "" "\n" "There is an export table in %s, but it is too small (%d)\n" msgstr "" -#: peigen.c:1686 pepigen.c:1686 pex64igen.c:1686 +#: peXXigen.c:1688 #, c-format msgid "" "\n" "There is an export table in %s at 0x%lx\n" msgstr "" -#: peigen.c:1714 pepigen.c:1714 pex64igen.c:1714 +#: peXXigen.c:1716 #, c-format msgid "" "\n" @@ -8387,162 +8816,160 @@ "\n" msgstr "" -#: peigen.c:1718 pepigen.c:1718 pex64igen.c:1718 +#: peXXigen.c:1720 #, c-format msgid "Export Flags \t\t\t%lx\n" msgstr "" -#: peigen.c:1721 pepigen.c:1721 pex64igen.c:1721 +#: peXXigen.c:1723 #, c-format msgid "Time/Date stamp \t\t%lx\n" msgstr "" -#: peigen.c:1725 pepigen.c:1725 pex64igen.c:1725 +#: peXXigen.c:1727 #, c-format msgid "Major/Minor \t\t\t%d/%d\n" msgstr "" -#: peigen.c:1728 pepigen.c:1728 pex64igen.c:1728 +#: peXXigen.c:1730 #, c-format msgid "Name \t\t\t\t" msgstr "" -#: peigen.c:1739 pepigen.c:1739 pex64igen.c:1739 +#: peXXigen.c:1741 #, c-format msgid "Ordinal Base \t\t\t%ld\n" msgstr "" -#: peigen.c:1742 pepigen.c:1742 pex64igen.c:1742 +#: peXXigen.c:1744 #, c-format msgid "Number in:\n" msgstr "" -#: peigen.c:1745 pepigen.c:1745 pex64igen.c:1745 +#: peXXigen.c:1747 #, c-format msgid "\tExport Address Table \t\t%08lx\n" msgstr "" -#: peigen.c:1749 pepigen.c:1749 pex64igen.c:1749 +#: peXXigen.c:1751 #, c-format msgid "\t[Name Pointer/Ordinal] Table\t%08lx\n" msgstr "" -#: peigen.c:1752 pepigen.c:1752 pex64igen.c:1752 +#: peXXigen.c:1754 #, c-format msgid "Table Addresses\n" msgstr "" -#: peigen.c:1755 pepigen.c:1755 pex64igen.c:1755 +#: peXXigen.c:1757 #, c-format msgid "\tExport Address Table \t\t" msgstr "" -#: peigen.c:1760 pepigen.c:1760 pex64igen.c:1760 +#: peXXigen.c:1762 #, c-format msgid "\tName Pointer Table \t\t" msgstr "" -#: peigen.c:1765 pepigen.c:1765 pex64igen.c:1765 +#: peXXigen.c:1767 #, c-format msgid "\tOrdinal Table \t\t\t" msgstr "" -#: peigen.c:1779 pepigen.c:1779 pex64igen.c:1779 +#: peXXigen.c:1781 #, c-format msgid "" "\n" "Export Address Table -- Ordinal Base %ld\n" msgstr "" -#: peigen.c:1788 pepigen.c:1788 pex64igen.c:1788 +#: peXXigen.c:1790 #, c-format msgid "\tInvalid Export Address Table rva (0x%lx) or entry count (0x%lx)\n" msgstr "" -#: peigen.c:1807 pepigen.c:1807 pex64igen.c:1807 +#: peXXigen.c:1809 msgid "Forwarder RVA" msgstr "" -#: peigen.c:1819 pepigen.c:1819 pex64igen.c:1819 +#: peXXigen.c:1821 msgid "Export RVA" msgstr "" -#: peigen.c:1826 pepigen.c:1826 pex64igen.c:1826 +#: peXXigen.c:1828 #, c-format msgid "" "\n" "[Ordinal/Name Pointer] Table\n" msgstr "" -#: peigen.c:1834 pepigen.c:1834 pex64igen.c:1834 +#: peXXigen.c:1836 #, c-format msgid "\tInvalid Name Pointer Table rva (0x%lx) or entry count (0x%lx)\n" msgstr "" -#: peigen.c:1841 pepigen.c:1841 pex64igen.c:1841 +#: peXXigen.c:1843 #, c-format msgid "\tInvalid Ordinal Table rva (0x%lx) or entry count (0x%lx)\n" msgstr "" -#: peigen.c:1855 pepigen.c:1855 pex64igen.c:1855 +#: peXXigen.c:1857 #, c-format msgid "\t[%4ld] \n" msgstr "" -#: peigen.c:1909 peigen.c:2106 pepigen.c:1909 pepigen.c:2106 pex64igen.c:1909 -#: pex64igen.c:2106 +#: peXXigen.c:1911 peXXigen.c:2107 #, c-format msgid "warning, .pdata section size (%ld) is not a multiple of %d\n" msgstr "" -#: peigen.c:1913 peigen.c:2110 pepigen.c:1913 pepigen.c:2110 pex64igen.c:1913 -#: pex64igen.c:2110 +#: peXXigen.c:1915 peXXigen.c:2111 #, c-format msgid "" "\n" "The Function Table (interpreted .pdata section contents)\n" msgstr "" -#: peigen.c:1916 pepigen.c:1916 pex64igen.c:1916 +#: peXXigen.c:1918 #, c-format msgid " vma:\t\t\tBegin Address End Address Unwind Info\n" msgstr "" -#: peigen.c:1918 pepigen.c:1918 pex64igen.c:1918 +#: peXXigen.c:1920 #, c-format msgid "" " vma:\t\tBegin End EH EH PrologEnd Exception\n" " \t\tAddress Address Handler Data Address Mask\n" msgstr "" -#: peigen.c:1931 pepigen.c:1931 pex64igen.c:1931 +#: peXXigen.c:1933 #, c-format msgid "Virtual size of .pdata section (%ld) larger than real size (%ld)\n" msgstr "" -#: peigen.c:2001 pepigen.c:2001 pex64igen.c:2001 +#: peXXigen.c:2002 #, c-format msgid " Register save millicode" msgstr "" -#: peigen.c:2004 pepigen.c:2004 pex64igen.c:2004 +#: peXXigen.c:2005 #, c-format msgid " Register restore millicode" msgstr "" -#: peigen.c:2007 pepigen.c:2007 pex64igen.c:2007 +#: peXXigen.c:2008 #, c-format msgid " Glue code sequence" msgstr "" -#: peigen.c:2112 pepigen.c:2112 pex64igen.c:2112 +#: peXXigen.c:2113 #, c-format msgid "" " vma:\t\tBegin Prolog Function Flags Exception EH\n" " \t\tAddress Length Length 32b exc Handler Data\n" msgstr "" -#: peigen.c:2234 pepigen.c:2234 pex64igen.c:2234 +#: peXXigen.c:2234 #, c-format msgid "" "\n" @@ -8550,86 +8977,86 @@ "PE File Base Relocations (interpreted .reloc section contents)\n" msgstr "" -#: peigen.c:2264 pepigen.c:2264 pex64igen.c:2264 +#: peXXigen.c:2263 #, c-format msgid "" "\n" "Virtual Address: %08lx Chunk size %ld (0x%lx) Number of fixups %ld\n" msgstr "" -#: peigen.c:2282 pepigen.c:2282 pex64igen.c:2282 +#: peXXigen.c:2281 #, c-format msgid "\treloc %4d offset %4x [%4lx] %s" msgstr "" -#: peigen.c:2343 pepigen.c:2343 pex64igen.c:2343 +#: peXXigen.c:2342 #, c-format msgid "%03x %*.s Entry: " msgstr "" -#: peigen.c:2367 pepigen.c:2367 pex64igen.c:2367 +#: peXXigen.c:2366 #, c-format msgid "name: [val: %08lx len %d]: " msgstr "" -#: peigen.c:2387 pepigen.c:2387 pex64igen.c:2387 +#: peXXigen.c:2386 #, c-format msgid "\n" msgstr "" -#: peigen.c:2397 pepigen.c:2397 pex64igen.c:2397 +#: peXXigen.c:2396 #, c-format msgid "\n" msgstr "" -#: peigen.c:2402 pepigen.c:2402 pex64igen.c:2402 +#: peXXigen.c:2401 #, c-format msgid "ID: %#08lx" msgstr "" -#: peigen.c:2405 pepigen.c:2405 pex64igen.c:2405 +#: peXXigen.c:2404 #, c-format msgid ", Value: %#08lx\n" msgstr "" -#: peigen.c:2427 pepigen.c:2427 pex64igen.c:2427 +#: peXXigen.c:2426 #, c-format msgid "%03x %*.s Leaf: Addr: %#08lx, Size: %#08lx, Codepage: %d\n" msgstr "" -#: peigen.c:2469 pepigen.c:2469 pex64igen.c:2469 +#: peXXigen.c:2468 #, c-format msgid "\n" msgstr "" -#: peigen.c:2477 pepigen.c:2477 pex64igen.c:2477 +#: peXXigen.c:2476 #, c-format msgid " Table: Char: %d, Time: %08lx, Ver: %d/%d, Num Names: %d, IDs: %d\n" msgstr "" -#: peigen.c:2566 pepigen.c:2566 pex64igen.c:2566 +#: peXXigen.c:2564 #, c-format msgid "Corrupt .rsrc section detected!\n" msgstr "" -#: peigen.c:2590 pepigen.c:2590 pex64igen.c:2590 +#: peXXigen.c:2588 #, c-format msgid "" "\n" "WARNING: Extra data in .rsrc section - it will be ignored by Windows:\n" msgstr "" -#: peigen.c:2596 pepigen.c:2596 pex64igen.c:2596 +#: peXXigen.c:2594 #, c-format msgid " String table starts at offset: %#03x\n" msgstr "" -#: peigen.c:2599 pepigen.c:2599 pex64igen.c:2599 +#: peXXigen.c:2597 #, c-format msgid " Resources start at offset: %#03x\n" msgstr "" -#: peigen.c:2651 pepigen.c:2651 pex64igen.c:2651 +#: peXXigen.c:2654 #, c-format msgid "" "\n" @@ -8637,14 +9064,14 @@ "found\n" msgstr "" -#: peigen.c:2657 pepigen.c:2657 pex64igen.c:2657 +#: peXXigen.c:2660 #, c-format msgid "" "\n" "There is a debug directory in %s, but that section has no contents\n" msgstr "" -#: peigen.c:2664 pepigen.c:2664 pex64igen.c:2664 +#: peXXigen.c:2667 #, c-format msgid "" "\n" @@ -8652,7 +9079,7 @@ "small\n" msgstr "" -#: peigen.c:2669 pepigen.c:2669 pex64igen.c:2669 +#: peXXigen.c:2672 #, c-format msgid "" "\n" @@ -8660,23 +9087,23 @@ "\n" msgstr "" -#: peigen.c:2676 pepigen.c:2676 pex64igen.c:2676 +#: peXXigen.c:2679 #, c-format msgid "" "The debug data size field in the data directory is too big for the section" msgstr "" -#: peigen.c:2681 pepigen.c:2681 pex64igen.c:2681 +#: peXXigen.c:2684 #, c-format msgid "Type Size Rva Offset\n" msgstr "" -#: peigen.c:2729 pepigen.c:2729 pex64igen.c:2729 +#: peXXigen.c:2731 #, c-format msgid "(format %c%c%c%c signature %s age %ld)\n" msgstr "" -#: peigen.c:2737 pepigen.c:2737 pex64igen.c:2737 +#: peXXigen.c:2741 #, c-format msgid "" "The debug directory size is not a multiple of the debug directory entry " @@ -8686,99 +9113,99 @@ #. The MS dumpbin program reportedly ands with 0xff0f before #. printing the characteristics field. Not sure why. No reason to #. emulate it here. -#: peigen.c:2757 pepigen.c:2757 pex64igen.c:2757 +#: peXXigen.c:2825 #, c-format msgid "" "\n" "Characteristics 0x%x\n" msgstr "" -#: peigen.c:2993 pepigen.c:2993 pex64igen.c:2993 +#: peXXigen.c:3072 #, c-format msgid "" "%pB: Data Directory size (%lx) exceeds space left in section (%)" msgstr "" -#: peigen.c:3025 pepigen.c:3025 pex64igen.c:3025 +#: peXXigen.c:3104 msgid "failed to update file offsets in debug directory" msgstr "" -#: peigen.c:3033 pepigen.c:3033 pex64igen.c:3033 +#: peXXigen.c:3112 #, c-format msgid "%pB: failed to read debug data section" msgstr "" -#: peigen.c:3849 pepigen.c:3849 pex64igen.c:3849 +#: peXXigen.c:3928 #, c-format msgid ".rsrc merge failure: duplicate string resource: %d" msgstr "" -#: peigen.c:3984 pepigen.c:3984 pex64igen.c:3984 +#: peXXigen.c:4063 msgid ".rsrc merge failure: multiple non-default manifests" msgstr "" -#: peigen.c:4002 pepigen.c:4002 pex64igen.c:4002 +#: peXXigen.c:4081 msgid ".rsrc merge failure: a directory matches a leaf" msgstr "" -#: peigen.c:4044 pepigen.c:4044 pex64igen.c:4044 +#: peXXigen.c:4123 msgid ".rsrc merge failure: duplicate leaf" msgstr "" -#: peigen.c:4046 pepigen.c:4046 pex64igen.c:4046 +#: peXXigen.c:4125 #, c-format msgid ".rsrc merge failure: duplicate leaf: %s" msgstr "" -#: peigen.c:4112 pepigen.c:4112 pex64igen.c:4112 +#: peXXigen.c:4191 msgid ".rsrc merge failure: dirs with differing characteristics" msgstr "" -#: peigen.c:4119 pepigen.c:4119 pex64igen.c:4119 +#: peXXigen.c:4198 msgid ".rsrc merge failure: differing directory versions" msgstr "" #. Corrupted .rsrc section - cannot merge. -#: peigen.c:4236 pepigen.c:4236 pex64igen.c:4236 +#: peXXigen.c:4315 #, c-format msgid "%pB: .rsrc merge failure: corrupt .rsrc section" msgstr "" -#: peigen.c:4244 pepigen.c:4244 pex64igen.c:4244 +#: peXXigen.c:4323 #, c-format msgid "%pB: .rsrc merge failure: unexpected .rsrc size" msgstr "" -#: peigen.c:4383 pepigen.c:4383 pex64igen.c:4383 +#: peXXigen.c:4462 #, c-format msgid "%pB: unable to fill in DataDictionary[1] because .idata$2 is missing" msgstr "" -#: peigen.c:4403 pepigen.c:4403 pex64igen.c:4403 +#: peXXigen.c:4482 #, c-format msgid "%pB: unable to fill in DataDictionary[1] because .idata$4 is missing" msgstr "" -#: peigen.c:4424 pepigen.c:4424 pex64igen.c:4424 +#: peXXigen.c:4503 #, c-format msgid "%pB: unable to fill in DataDictionary[12] because .idata$5 is missing" msgstr "" -#: peigen.c:4444 pepigen.c:4444 pex64igen.c:4444 +#: peXXigen.c:4523 #, c-format msgid "" "%pB: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE (12)] because ." "idata$6 is missing" msgstr "" -#: peigen.c:4486 pepigen.c:4486 pex64igen.c:4486 +#: peXXigen.c:4565 #, c-format msgid "" "%pB: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE(12)] because ." "idata$6 is missing" msgstr "" -#: peigen.c:4511 pepigen.c:4511 pex64igen.c:4511 +#: peXXigen.c:4590 #, c-format msgid "%pB: unable to fill in DataDictionary[9] because __tls_used is missing" msgstr "" Binary files /tmp/tmpwlqmdap4/HCMjq_z_kj/gdb-9.1/bfd/po/fr.gmo and /tmp/tmpwlqmdap4/bi0oNuAXeo/gdb-10.2/bfd/po/fr.gmo differ diff -Nru gdb-9.1/bfd/po/fr.po gdb-10.2/bfd/po/fr.po --- gdb-9.1/bfd/po/fr.po 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/po/fr.po 2021-04-25 04:06:26.000000000 +0000 @@ -1,14 +1,14 @@ # Messages français pour GNU concernant bfd. -# Copyright (C) 2019 Free Software Foundation, Inc. +# Copyright (C) 2020 Free Software Foundation, Inc. # This file is distributed under the same license as the binutils package. # Michel Robitaille , traducteur depuis/since 1996. -# Frédéric Marchal , 2019. +# Frédéric Marchal , 2020. msgid "" msgstr "" -"Project-Id-Version: bfd-2.31.90\n" +"Project-Id-Version: bfd-2.34.90\n" "Report-Msgid-Bugs-To: bug-binutils@gnu.org\n" -"POT-Creation-Date: 2019-01-19 16:30+0000\n" -"PO-Revision-Date: 2019-05-15 05:58+0200\n" +"POT-Creation-Date: 2020-07-04 10:26+0100\n" +"PO-Revision-Date: 2020-07-09 12:30+0200\n" "Last-Translator: Frédéric Marchal \n" "Language-Team: French \n" "Language: fr\n" @@ -18,222 +18,235 @@ "X-Bugs: Report translation errors to the Language-Team address.\n" "Plural-Forms: nplurals=2; plural=(n >= 2);\n" -#: aout-cris.c:200 +#: aout-cris.c:196 #, c-format msgid "%pB: unsupported relocation type exported: %#x" msgstr "%pB: type de réadressage exporté non supporté %#x" -#: aout-cris.c:244 +#: aout-cris.c:242 #, c-format msgid "%pB: unsupported relocation type imported: %#x" msgstr "%pB: type de réadressage importé non supporté: %#x" -#: aout-cris.c:256 +#: aout-cris.c:254 #, c-format msgid "%pB: bad relocation record imported: %d" msgstr "%pB: mauvais enregistrement de réadressage importé: %d" -#: aoutx.h:1265 aoutx.h:1618 pdp11.c:1138 pdp11.c:1399 +#: aoutx.h:1265 aoutx.h:1613 pdp11.c:1236 pdp11.c:1510 #, c-format msgid "%pB: can not represent section `%pA' in a.out object file format" msgstr "%pB: ne peut représenter la section « %pA » dans le fichier format objet a.out" -#: aoutx.h:1582 pdp11.c:1371 +#: aoutx.h:1577 pdp11.c:1482 #, c-format msgid "%pB: can not represent section for symbol `%s' in a.out object file format" msgstr "%pB: ne peut représenter la section pour le symbole « %s » dans le fichier format objet a.out" -#: aoutx.h:1585 vms-alpha.c:7860 +#: aoutx.h:1580 vms-alpha.c:8040 msgid "*unknown*" msgstr "*inconnu*" -#: aoutx.h:1721 +#: aoutx.h:1716 pdp11.c:1578 #, c-format msgid "%pB: invalid string offset % >= %" msgstr "%pB: chaîne de décalage invalide % >= %" -#: aoutx.h:2412 aoutx.h:2430 +#: aoutx.h:1963 +#, c-format +msgid "%pB: unsupported AOUT relocation size: %d" +msgstr "%pB: taille de réadressage AOUT non supportée : %d" + +#: aoutx.h:2412 aoutx.h:2430 pdp11.c:2058 #, c-format msgid "%pB: attempt to write out unknown reloc type" msgstr "%pB: tentative d'écrire un type de réadressage inconnu" -#: aoutx.h:4086 +#: aoutx.h:4087 pdp11.c:3441 #, c-format msgid "%pB: unsupported relocation type" msgstr "%pB: type de réadressage non supporté" #. Unknown relocation. -#: aoutx.h:4407 coff-alpha.c:601 coff-alpha.c:1514 coff-rs6000.c:2772 +#: aoutx.h:4408 coff-alpha.c:601 coff-alpha.c:1512 coff-rs6000.c:2758 #: coff-sh.c:504 coff-tic4x.c:184 coff-tic54x.c:279 elf-hppa.h:798 -#: elf-hppa.h:826 elf-m10200.c:226 elf-m10300.c:812 elf32-arc.c:517 -#: elf32-arm.c:1943 elf32-avr.c:964 elf32-bfin.c:1061 elf32-bfin.c:4698 -#: elf32-cr16.c:653 elf32-cr16.c:683 elf32-cr16c.c:186 elf32-cris.c:467 -#: elf32-crx.c:429 elf32-csky.c:989 elf32-d10v.c:234 elf32-d30v.c:522 -#: elf32-d30v.c:544 elf32-dlx.c:548 elf32-epiphany.c:376 elf32-fr30.c:381 -#: elf32-frv.c:2558 elf32-frv.c:6262 elf32-ft32.c:306 elf32-h8300.c:302 -#: elf32-i386.c:401 elf32-ip2k.c:1245 elf32-iq2000.c:442 elf32-lm32.c:539 -#: elf32-m32c.c:305 elf32-m32r.c:1286 elf32-m32r.c:1311 elf32-m32r.c:2417 -#: elf32-m68hc11.c:390 elf32-m68hc12.c:510 elf32-m68k.c:352 elf32-mcore.c:354 -#: elf32-mcore.c:440 elf32-mep.c:389 elf32-metag.c:878 elf32-microblaze.c:692 -#: elf32-microblaze.c:969 elf32-mips.c:2229 elf32-moxie.c:137 -#: elf32-msp430.c:648 elf32-msp430.c:658 elf32-mt.c:241 elf32-nds32.c:3236 -#: elf32-nds32.c:3262 elf32-nds32.c:5173 elf32-nios2.c:3015 elf32-or1k.c:1037 -#: elf32-pj.c:325 elf32-ppc.c:898 elf32-ppc.c:911 elf32-pru.c:420 -#: elf32-rl78.c:291 elf32-rx.c:313 elf32-rx.c:322 elf32-s12z.c:292 -#: elf32-s390.c:347 elf32-sh.c:438 elf32-spu.c:160 elf32-tic6x.c:1508 -#: elf32-tic6x.c:1518 elf32-tic6x.c:1537 elf32-tic6x.c:1547 elf32-tic6x.c:2642 -#: elf32-tilepro.c:803 elf32-v850.c:1899 elf32-v850.c:1921 elf32-v850.c:4270 -#: elf32-vax.c:290 elf32-visium.c:482 elf32-wasm32.c:105 elf32-xc16x.c:250 -#: elf32-xgate.c:418 elf32-xstormy16.c:395 elf32-xtensa.c:459 -#: elf32-xtensa.c:493 elf64-alpha.c:1112 elf64-alpha.c:4101 elf64-alpha.c:4249 -#: elf64-ia64-vms.c:254 elf64-ia64-vms.c:3440 elf64-mips.c:3958 -#: elf64-mips.c:3974 elf64-mmix.c:1264 elf64-nfp.c:238 elf64-ppc.c:921 -#: elf64-ppc.c:1209 elf64-ppc.c:1218 elf64-s390.c:328 elf64-s390.c:378 -#: elf64-x86-64.c:285 elfn32-mips.c:3786 elfxx-ia64.c:324 elfxx-riscv.c:955 -#: elfxx-sparc.c:589 elfxx-sparc.c:639 elfxx-tilegx.c:912 elfxx-tilegx.c:952 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:2125 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:2223 -#: elf32-ia64.c:210 elf32-ia64.c:3862 elf64-ia64.c:210 elf64-ia64.c:3862 +#: elf-hppa.h:826 elf-m10200.c:226 elf-m10300.c:812 elf32-arc.c:532 +#: elf32-arm.c:1985 elf32-avr.c:962 elf32-bfin.c:1062 elf32-bfin.c:4677 +#: elf32-cr16.c:654 elf32-cr16.c:684 elf32-cris.c:467 elf32-crx.c:429 +#: elf32-csky.c:990 elf32-d10v.c:234 elf32-d30v.c:522 elf32-d30v.c:544 +#: elf32-dlx.c:546 elf32-epiphany.c:372 elf32-fr30.c:381 elf32-frv.c:2558 +#: elf32-frv.c:6239 elf32-ft32.c:306 elf32-h8300.c:302 elf32-i386.c:400 +#: elf32-ip2k.c:1240 elf32-iq2000.c:442 elf32-lm32.c:495 elf32-m32c.c:305 +#: elf32-m32r.c:1286 elf32-m32r.c:1311 elf32-m32r.c:2232 elf32-m68hc11.c:390 +#: elf32-m68hc12.c:510 elf32-m68k.c:354 elf32-mcore.c:354 elf32-mcore.c:440 +#: elf32-mep.c:389 elf32-metag.c:874 elf32-microblaze.c:692 +#: elf32-microblaze.c:965 elf32-mips.c:2229 elf32-moxie.c:137 +#: elf32-msp430.c:653 elf32-msp430.c:663 elf32-mt.c:241 elf32-nds32.c:3237 +#: elf32-nds32.c:3263 elf32-nds32.c:5033 elf32-nios2.c:3022 elf32-or1k.c:1040 +#: elf32-pj.c:326 elf32-ppc.c:901 elf32-ppc.c:914 elf32-pru.c:423 +#: elf32-rl78.c:291 elf32-rx.c:313 elf32-rx.c:322 elf32-s12z.c:296 +#: elf32-s390.c:347 elf32-sh.c:438 elf32-spu.c:163 elf32-tic6x.c:1498 +#: elf32-tic6x.c:1508 elf32-tic6x.c:1527 elf32-tic6x.c:1537 elf32-tic6x.c:2583 +#: elf32-tilepro.c:800 elf32-v850.c:1898 elf32-v850.c:1920 elf32-v850.c:4270 +#: elf32-vax.c:290 elf32-visium.c:481 elf32-wasm32.c:105 elf32-xc16x.c:250 +#: elf32-xgate.c:418 elf32-xstormy16.c:395 elf32-xtensa.c:522 +#: elf32-xtensa.c:556 elf32-z80.c:331 elf64-alpha.c:1113 elf64-alpha.c:4067 +#: elf64-alpha.c:4215 elf64-bpf.c:322 elf64-ia64-vms.c:254 +#: elf64-ia64-vms.c:3429 elf64-mips.c:3958 elf64-mips.c:3974 elf64-mmix.c:1264 +#: elf64-nfp.c:238 elf64-ppc.c:1014 elf64-ppc.c:1366 elf64-ppc.c:1375 +#: elf64-s390.c:328 elf64-s390.c:378 elf64-x86-64.c:281 elfn32-mips.c:3786 +#: elfxx-ia64.c:324 elfxx-riscv.c:954 elfxx-sparc.c:589 elfxx-sparc.c:639 +#: elfxx-tilegx.c:909 elfxx-tilegx.c:949 elfnn-aarch64.c:2215 +#: elfnn-aarch64.c:2313 elfnn-ia64.c:213 elfnn-ia64.c:3824 #, c-format msgid "%pB: unsupported relocation type %#x" msgstr "%pB: type de réadressage %#x non supporté" -#: aoutx.h:5434 pdp11.c:3694 +#: aoutx.h:5435 pdp11.c:3864 #, c-format msgid "%pB: relocatable link from %s to %s not supported" msgstr "%pB: lien relocalisable de %s vers %s n'est pas supporté" -#: archive.c:2214 +#: arc-got.h:69 +#, c-format +msgid "%pB: cannot allocate memory for local GOT entries" +msgstr "%pB: impossible d'allouer la mémoire pour les entrées locales GOT" + +#: archive.c:2249 msgid "warning: writing archive was slow: rewriting timestamp" msgstr "attention: l'écriture de l'archive était lente: réécriture du cachet de date-heure" -#: archive.c:2330 linker.c:1429 +#: archive.c:2316 archive.c:2376 elflink.c:4545 linker.c:1428 #, c-format msgid "%pB: plugin needed to handle lto object" msgstr "%pB: le greffon doit gérer l'objet lto" -#: archive.c:2559 +#: archive.c:2602 msgid "Reading archive file mod timestamp" msgstr "Lecture du cachet date-heure modifié du fichier d'archive" -#: archive.c:2583 +#: archive.c:2626 msgid "Writing updated armap timestamp" msgstr "Écriture du cachet date-heure armap mise à jour" -#: bfd.c:449 +#: bfd.c:677 msgid "no error" msgstr "pas d'erreur" -#: bfd.c:450 +#: bfd.c:678 msgid "system call error" msgstr "erreur d'appel système" -#: bfd.c:451 +#: bfd.c:679 msgid "invalid bfd target" msgstr "cible bfd invalide" -#: bfd.c:452 +#: bfd.c:680 msgid "file in wrong format" msgstr "fichier dans un mauvais format" -#: bfd.c:453 +#: bfd.c:681 msgid "archive object file in wrong format" msgstr "fichier objet d'archive dans un mauvais format" -#: bfd.c:454 +#: bfd.c:682 msgid "invalid operation" msgstr "opération invalide" -#: bfd.c:455 +#: bfd.c:683 msgid "memory exhausted" msgstr "mémoire épuisée" -#: bfd.c:456 +#: bfd.c:684 msgid "no symbols" msgstr "aucun symbole" -#: bfd.c:457 +#: bfd.c:685 msgid "archive has no index; run ranlib to add one" msgstr "l'archive n'a pas d'index; exécuter ranlib pour en ajouter un" -#: bfd.c:458 +#: bfd.c:686 msgid "no more archived files" msgstr "aucun autre fichier d'archive" -#: bfd.c:459 +#: bfd.c:687 msgid "malformed archive" msgstr "archive mal formée" -#: bfd.c:460 +#: bfd.c:688 msgid "DSO missing from command line" msgstr "DSO manquant dans la ligne de commande" -#: bfd.c:461 +#: bfd.c:689 msgid "file format not recognized" msgstr "format de fichier non reconnu" -#: bfd.c:462 +#: bfd.c:690 msgid "file format is ambiguous" msgstr "format de fichier ambigu" -#: bfd.c:463 +#: bfd.c:691 msgid "section has no contents" msgstr "section sans contenu" -#: bfd.c:464 +#: bfd.c:692 msgid "nonrepresentable section on output" msgstr "section non-représentable sur la sortie" -#: bfd.c:465 +#: bfd.c:693 msgid "symbol needs debug section which does not exist" msgstr "symboles ont besoin de la section de débug qui est inexistante" -#: bfd.c:466 +#: bfd.c:694 msgid "bad value" msgstr "mauvaise valeur" -#: bfd.c:467 +#: bfd.c:695 msgid "file truncated" msgstr "fichier tronqué" -#: bfd.c:468 +#: bfd.c:696 msgid "file too big" msgstr "fichier trop gros" -#: bfd.c:469 +#: bfd.c:697 +msgid "sorry, cannot handle this file" +msgstr "désolé, ce fichier ne peut être traité" + +#: bfd.c:698 #, c-format msgid "error reading %s: %s" msgstr "erreur lors de la lecture de %s: %s" -#: bfd.c:470 +#: bfd.c:699 msgid "#" msgstr "#" -#: bfd.c:1429 +#: bfd.c:1658 #, c-format msgid "BFD %s assertion fail %s:%d" msgstr "BFD assertion %s a échoué %s:%d" -#: bfd.c:1442 +#: bfd.c:1671 #, c-format msgid "BFD %s internal error, aborting at %s:%d in %s\n" msgstr "BFD erreur interne %s, abandon à %s:%d dans %s\n" -#: bfd.c:1447 +#: bfd.c:1676 #, c-format msgid "BFD %s internal error, aborting at %s:%d\n" msgstr "BFD erreur interne %s, abandon à %s:%d\n" -#: bfd.c:1449 +#: bfd.c:1678 msgid "Please report this bug.\n" msgstr "Merci de rapporter cette anomalie.\n" -#: bfdwin.c:206 +#: bfdwin.c:207 #, c-format msgid "not mapping: data=%lx mapped=%d\n" msgstr "pas de table de projection: données=%lx adresse de la table=%d\n" -#: bfdwin.c:209 +#: bfdwin.c:210 #, c-format msgid "not mapping: env var not set\n" msgstr "pas de table de projection: variable d'environnement pas initialisée\n" @@ -253,118 +266,113 @@ msgid "%pB: cannot handle compressed Alpha binaries; use compiler flags, or objZ, to generate uncompressed binaries" msgstr "%pB: les binaires compressés pour Alpha ne sont pas supportés; utilisez les options du compilateur ou objZ pour produire des binaires non compressés" -#: coff-alpha.c:850 coff-alpha.c:887 coff-alpha.c:1957 coff-mips.c:950 +#: coff-alpha.c:850 coff-alpha.c:887 coff-alpha.c:1954 coff-mips.c:953 msgid "GP relative relocation used when GP not defined" msgstr "Réadressage relatif GP utilisé alors que GP n'est pas défini" -#: coff-alpha.c:1443 +#: coff-alpha.c:1441 msgid "using multiple gp values" msgstr "utilisation de valeurs gp multiples" -#: coff-alpha.c:1501 coff-alpha.c:1507 elf.c:9100 elf32-mcore.c:100 -#: elf32-mcore.c:455 elf32-ppc.c:7697 elf32-ppc.c:8829 elf64-ppc.c:14411 +#: coff-alpha.c:1499 coff-alpha.c:1505 elf.c:9431 elf32-mcore.c:100 +#: elf32-mcore.c:455 elf32-ppc.c:7596 elf32-ppc.c:8747 elf64-ppc.c:15962 #, c-format msgid "%pB: %s unsupported" msgstr "%pB: %s pas supporté" -#: coff-mips.c:640 elf32-mips.c:1742 elf32-score.c:430 elf32-score7.c:330 +#: coff-go32.c:156 coffswap.h:785 +#, c-format +msgid "%pB: warning: %s: line number overflow: 0x%lx > 0xffff" +msgstr "%pB: attention: %s: débordement du compteur de numéro de ligne: 0x%lx > 0xffff" + +#: coff-mips.c:643 elf32-mips.c:1742 elf32-score.c:430 elf32-score7.c:330 #: elf64-mips.c:3451 elfn32-mips.c:3276 msgid "GP relative relocation when _gp not defined" msgstr "réadressage relatif GP sans que _gp ne soit défini" -#: coff-rs6000.c:2858 +#: coff-rs6000.c:2844 #, c-format msgid "%pB: TOC reloc at %# to symbol `%s' with no TOC entry" msgstr "%pB: la table des matières des réadressages à %# pour le symbole « %s » sans aucune entrée" -#: coff-rs6000.c:3620 coff64-rs6000.c:2145 +#: coff-rs6000.c:3607 coff64-rs6000.c:2153 #, c-format msgid "%pB: symbol `%s' has unrecognized smclas %d" msgstr "%pB: symbole « %s » a une classe smclas %d non reconnue" -#: coff-sh.c:780 elf32-sh.c:521 +#: coff-sh.c:778 elf32-sh.c:521 #, c-format msgid "%pB: %#: warning: bad R_SH_USES offset" msgstr "%pB: %#: attention: mauvais décalage pour R_SH_USES" -#: coff-sh.c:791 +#: coff-sh.c:789 #, c-format msgid "%pB: %#: warning: R_SH_USES points to unrecognized insn %#x" msgstr "%pB: %#: attention: R_SH_USES pointe vers l'insn inconnu %#x" -#: coff-sh.c:809 elf32-sh.c:552 +#: coff-sh.c:807 elf32-sh.c:552 #, c-format msgid "%pB: %#: warning: bad R_SH_USES load offset" msgstr "%pB: %#: attention: mauvais décalage de chargement R_SH_USES" -#: coff-sh.c:834 elf32-sh.c:568 +#: coff-sh.c:832 elf32-sh.c:568 #, c-format msgid "%pB: %#: warning: could not find expected reloc" msgstr "%pB: %#: attention: ne peut repérer le réadressage attendu" -#: coff-sh.c:851 elf32-sh.c:597 +#: coff-sh.c:849 elf32-sh.c:597 #, c-format msgid "%pB: %#: warning: symbol in unexpected section" msgstr "%pB: %#: attention: symbole dans une section inattendue" -#: coff-sh.c:977 elf32-sh.c:727 +#: coff-sh.c:975 elf32-sh.c:727 #, c-format msgid "%pB: %#: warning: could not find expected COUNT reloc" msgstr "%pB: %#: attention: ne peut repérer le compteur de réadressages attendu" -#: coff-sh.c:987 elf32-sh.c:738 +#: coff-sh.c:985 elf32-sh.c:738 #, c-format msgid "%pB: %#: warning: bad count" msgstr "%pB: %#: attention: mauvais décompte" -#: coff-sh.c:1359 coff-sh.c:2647 elf32-sh.c:1142 elf32-sh.c:1512 +#: coff-sh.c:1356 coff-sh.c:2644 elf32-sh.c:1138 elf32-sh.c:1505 #, c-format msgid "%pB: %#: fatal: reloc overflow while relaxing" msgstr "%pB: %#: erreur fatale: débordement de réadressage lors des relâches" -#: coff-sh.c:1454 +#: coff-sh.c:1451 #, c-format msgid "%pB: fatal: generic symbols retrieved before relaxing" msgstr "%pB: fatal: symboles génériques récupérés avant la relâche" -#: coff-sh.c:2785 cofflink.c:2965 +#: coff-sh.c:2781 cofflink.c:2948 #, c-format msgid "%pB: illegal symbol index %ld in relocs" msgstr "%pB: symbole index %ld illégal dans les réadressages" -#: coff-tic4x.c:228 coff-tic54x.c:366 coffcode.h:5010 +#: coff-tic4x.c:228 coff-tic54x.c:366 coffcode.h:5085 #, c-format msgid "%pB: warning: illegal symbol index %ld in relocs" msgstr "%pB: attention: symbole index illégal %ld dans les réadressages" -#: coff-tic80.c:441 -#, c-format -msgid "unsupported relocation type %#x" -msgstr "type de réadressage %#x non supporté" - -#: coff-tic80.c:672 cofflink.c:3127 -#, c-format -msgid "%pB: bad reloc address %# in section `%pA'" -msgstr "%pB: mauvaise adresse de réadressage %# dans la section « %pA »" - -#: coffcode.h:954 +#: coffcode.h:961 #, c-format msgid "%pB: unable to load COMDAT section name" msgstr "%pB: impossible de charger le nom de section COMDAT" #. Malformed input files can trigger this test. #. cf PR 21781. -#: coffcode.h:989 +#: coffcode.h:996 #, c-format msgid "%pB: error: unexpected symbol '%s' in COMDAT section" msgstr "%pB: erreur: symbole « %s » inattendu dans la section COMDAT" -#: coffcode.h:1001 +#: coffcode.h:1008 #, c-format msgid "%pB: warning: COMDAT symbol '%s' does not match section name '%s'" msgstr "%pB: attention: symbole COMDAT « %s » ne concorde par avec le nom de section « %s »" -#: coffcode.h:1011 +#: coffcode.h:1018 #, c-format msgid "%pB: warning: no symbol for section '%s' found" msgstr "%pB: attention: pas de symbole trouvé pour la section « %s »" @@ -372,311 +380,315 @@ #. Generate a warning message rather using the 'unhandled' #. variable as this will allow some .sys files generate by #. other toolchains to be processed. See bugzilla issue 196. -#: coffcode.h:1237 +#: coffcode.h:1249 #, c-format msgid "%pB: warning: ignoring section flag %s in section %s" msgstr "%pB: attention: ignore le fanion de section %s dans la section %s" -#: coffcode.h:1306 +#: coffcode.h:1318 #, c-format msgid "%pB (%s): section flag %s (%#lx) ignored" msgstr "%pB (%s): fanion de section %s (%#lx) ignoré" -#: coffcode.h:1917 +#: coffcode.h:1934 coffcode.h:1999 #, c-format msgid "%pB: warning: claims to have 0xffff relocs, without overflow" msgstr "%pB: attention: prétend avoir 0xffff réadressages, sans débordement" -#: coffcode.h:2315 +#: coffcode.h:2365 #, c-format msgid "unrecognized TI COFF target id '0x%x'" msgstr "identificateur de cible TI COFF non reconnu « 0x%x »" -#: coffcode.h:2599 +#: coffcode.h:2643 #, c-format msgid "%pB: reloc against a non-existent symbol index: %ld" msgstr "%pB: réadressage par rapport à un index de symbole inexistant: %ld" -#: coffcode.h:2910 +#: coffcode.h:2951 #, c-format msgid "%pB: page size is too large (0x%x)" msgstr "%pB: la taille de page est trop grande (0x%x)" -#: coffcode.h:3070 +#: coffcode.h:3111 #, c-format msgid "%pB: too many sections (%d)" msgstr "%pB: trop de sections (%d)" -#: coffcode.h:3489 +#: coffcode.h:3530 #, c-format msgid "%pB: section %pA: string table overflow at offset %ld" msgstr "%pB: section %pA: débordement de la table de chaînes à l'offset %ld" -#: coffcode.h:3589 +#: coffcode.h:3630 #, c-format msgid "%pB:%s section %s: alignment 2**%u not representable" msgstr "%pB:%s section %s: l'alignement 2**%u n'est pas représentable" -#: coffcode.h:4276 +#: coffcode.h:4329 #, c-format msgid "%pB: warning: line number count (%#lx) exceeds section size (%#lx)" msgstr "%pB: attention: le décompte du nombre de lignes (%#lx) dépasse la taille de la section (%#lx)" -#: coffcode.h:4291 +#: coffcode.h:4349 #, c-format msgid "%pB: warning: line number table read failed" msgstr "%pB: attention: erreur lors de la lecture de la table des numéros de ligne" -#: coffcode.h:4325 coffcode.h:4339 +#: coffcode.h:4383 coffcode.h:4397 #, c-format msgid "%pB: warning: illegal symbol index 0x%lx in line number entry %d" msgstr "%pB: attention: symbole d'index 0x%lx illégal dans l'entrée %d des numéros de lignes" -#: coffcode.h:4353 +#: coffcode.h:4411 #, c-format msgid "%pB: warning: illegal symbol in line number entry %d" msgstr "%pB: attention: symbole illégal dans l'entrée %d des numéros de lignes" -#: coffcode.h:4366 +#: coffcode.h:4424 #, c-format msgid "%pB: warning: duplicate line number information for `%s'" msgstr "%pB: attention: information de numéro de ligne dédoublée pour « %s »" -#: coffcode.h:4774 +#: coffcode.h:4845 #, c-format msgid "%pB: unrecognized storage class %d for %s symbol `%s'" msgstr "%pB: classe de stockage %d non reconnue pour %s symbole « %s »" -#: coffcode.h:4904 +#: coffcode.h:4975 #, c-format msgid "warning: %pB: local symbol `%s' has no section" msgstr "attention: %pB: symbole local « %s » n'a pas de section" -#: coffcode.h:5050 +#: coffcode.h:5125 #, c-format msgid "%pB: illegal relocation type %d at address %#" msgstr "%pB: type de réadressage %d illégal à l'adresse %#" -#: coffgen.c:178 elf.c:1216 +#: coffgen.c:179 elf.c:1236 #, c-format msgid "%pB: unable to initialize compress status for section %s" msgstr "%pB: impossible d'initialiser le statut de compression de la section %s" -#: coffgen.c:202 elf.c:1227 +#: coffgen.c:203 elf.c:1247 #, c-format msgid "%pB: unable to initialize decompress status for section %s" msgstr "%pB: impossible d'initialiser le statut de décompression de la section %s" -#: coffgen.c:1657 -#, c-format -msgid "%pB: corrupt symbol count: %#" -msgstr "%pB: décompte de symbole corrompu: %#" - -#. PR 21013: Provide an error message when the alloc fails. -#: coffgen.c:1666 -#, c-format -msgid "%pB: not enough memory to allocate space for %# symbols of size %#" -msgstr "%pB: Pas assez de mémoire pour allouer l'espace pour %# symboles de taille %#" - -#: coffgen.c:1735 +#: coffgen.c:1704 #, c-format msgid "%pB: bad string table size %" msgstr "%pB: mauvaise taille de la table des chaînes %" -#: coffgen.c:1912 coffgen.c:1972 coffgen.c:1990 cofflink.c:2045 elf.c:1882 -#: xcofflink.c:4505 +#: coffgen.c:1876 coffgen.c:1936 coffgen.c:1954 cofflink.c:2024 elf.c:1921 +#: xcofflink.c:4500 msgid "" msgstr "" -#: coffgen.c:2114 +#: coffgen.c:2085 #, c-format msgid " %s" msgstr " %s" -#: coffgen.c:2693 elflink.c:14322 linker.c:2959 +#: coffgen.c:2675 elflink.c:14624 linker.c:2956 msgid "%F%P: already_linked_table: %E\n" msgstr "%F%P: already_linked_table: %E\n" -#: coffgen.c:3034 elflink.c:13324 +#: coffgen.c:3016 elflink.c:13617 #, c-format msgid "removing unused section '%pA' in file '%pB'" msgstr "suppression de la section inutilisée « %pA » dans le fichier « %pB »" -#: coffgen.c:3111 elflink.c:13542 +#: coffgen.c:3093 elflink.c:13835 msgid "warning: gc-sections option ignored" msgstr "attention: l'option des sections gc est ignorée" -#: cofflink.c:352 +#: cofflink.c:366 #, c-format msgid "warning: symbol `%s' is both section and non-section" msgstr "attention: le symbole « %s » est à la fois une section et une non-section" -#: cofflink.c:454 elf64-ia64-vms.c:5203 elflink.c:4953 +#: cofflink.c:471 elf64-ia64-vms.c:5200 elflink.c:5131 #, c-format msgid "warning: type of symbol `%s' changed from %d to %d in %pB" msgstr "attention: le type du symbole « %s » a changé de %d à %d dans %pB" -#: cofflink.c:2373 +#: cofflink.c:2352 #, c-format msgid "%pB: relocs in section `%pA', but it has no contents" msgstr "%pB: réadressages dans la section « %pA » qui est vide" -#: cofflink.c:2436 elflink.c:10810 +#: cofflink.c:2415 elflink.c:11082 #, c-format msgid "%X`%s' referenced in section `%pA' of %pB: defined in discarded section `%pA' of %pB\n" msgstr "%X« %s » référencé dans la section « %pA » de %pB: défini dans la section abandonnée « %pA » de %pB\n" -#: cofflink.c:2734 +#: cofflink.c:2717 #, c-format msgid "%pB: %pA: reloc overflow: %#x > 0xffff" msgstr "%pB: %pA: débordement de réadressage: %#x > 0xffff" -#: cofflink.c:2742 +#: cofflink.c:2725 #, c-format msgid "%pB: warning: %pA: line number overflow: %#x > 0xffff" msgstr "%pB: attention: %pA: débordement du compteur de numéro de ligne: %#x > 0xffff" -#: coffswap.h:789 +#: cofflink.c:3110 #, c-format -msgid "%pB: warning: %s: line number overflow: 0x%lx > 0xffff" -msgstr "%pB: attention: %s: débordement du compteur de numéro de ligne: 0x%lx > 0xffff" +msgid "%pB: bad reloc address %# in section `%pA'" +msgstr "%pB: mauvaise adresse de réadressage %# dans la section « %pA »" -#: coffswap.h:803 +#: coffswap.h:799 #, c-format msgid "%pB: %s: reloc overflow: 0x%lx > 0xffff" msgstr "%pB: %s: débordement de réadressage: 0x%lx > 0xffff" -#: compress.c:260 +#: compress.c:271 +#, c-format +msgid "error: %pB(%pA) section size (%# bytes) is larger than file size (%# bytes)" +msgstr "erreur: %pB(%pA) la taille de la section (%# octets) est plus grande que la taille du fichier (%# octets)" + +#: compress.c:282 #, c-format msgid "error: %pB(%pA) is too large (%# bytes)" msgstr "erreur: %pB(%pA) est trop grand (%# octets)" -#: cpu-arm.c:298 cpu-arm.c:310 +#: cpu-arm.c:303 cpu-arm.c:315 #, c-format msgid "error: %pB is compiled for the EP9312, whereas %pB is compiled for XScale" msgstr "erreur: %pB compilé pour EP9312 alors que %pB a été compilé pour XScale" -#: cpu-arm.c:446 +#: cpu-arm.c:451 #, c-format msgid "warning: unable to update contents of %s section in %pB" msgstr "attention: incapable de mettre à jour le contenu de la section %s dans %pB" -#: dwarf2.c:544 +#: dwarf2.c:543 #, c-format msgid "DWARF error: can't find %s section." msgstr "Erreur DWARF: ne peut repérer la section %s." -#: dwarf2.c:579 +#: dwarf2.c:578 #, c-format msgid "DWARF error: offset (%) greater than or equal to %s size (%)" msgstr "Erreur DWARF: décalage (%) plus grand ou égal à la taille de %s (%)" -#: dwarf2.c:1107 +#: dwarf2.c:1165 msgid "DWARF error: info pointer extends beyond end of attributes" msgstr "Erreur DWARF: le pointeur d'info va au delà de la fin des attributs" -#: dwarf2.c:1275 +#: dwarf2.c:1333 #, c-format msgid "DWARF error: invalid or unhandled FORM value: %#x" msgstr "Erreur DWARF: valeur de FORM invalide ou non supportée: %#x" -#: dwarf2.c:1581 +#: dwarf2.c:1646 msgid "DWARF error: mangled line number section (bad file number)" msgstr "Erreur DWARF: numéro de ligne de section mutilé (mauvais no. de fichier)" -#: dwarf2.c:1926 +#: dwarf2.c:1994 msgid "DWARF error: zero format count" msgstr "Erreur DWARF: décompte de format nul" -#: dwarf2.c:1936 +#: dwarf2.c:2004 #, c-format msgid "DWARF error: data count (%) larger than buffer size" msgstr "Erreur DWARF: décompte de données (%) plus grand que la taille du tampon" -#: dwarf2.c:1977 +#: dwarf2.c:2045 #, c-format msgid "DWARF error: unknown format content type %" msgstr "Erreur DWARF: type de contenu de format % inconnu" -#: dwarf2.c:2057 +#: dwarf2.c:2112 #, c-format msgid "DWARF error: line info section is too small (%)" msgstr "Erreur DWARF: la section des informations de lignes est trop petite (%)" -#: dwarf2.c:2087 +#: dwarf2.c:2142 #, c-format msgid "DWARF error: line info data is bigger (%#) than the space remaining in the section (%#lx)" msgstr "Erreur DWARF: les données des informations de lignes sont plus grandes (%#) que l'espace restant dans la section (%#lx)" -#: dwarf2.c:2100 +#: dwarf2.c:2155 #, c-format msgid "DWARF error: unhandled .debug_line version %d" msgstr "Erreur DWARF: version .debug_line %d non prise en charge" -#: dwarf2.c:2110 +#: dwarf2.c:2165 msgid "DWARF error: ran out of room reading prologue" msgstr "Erreur DWARF: on est tombé à cours de place lors de la lecture du prologue" -#: dwarf2.c:2128 +#: dwarf2.c:2183 #, c-format msgid "DWARF error: line info unsupported segment selector size %u" msgstr "Erreur DWARF: taille de sélecteur de segment %u non supportée pour les informations de lignes" -#: dwarf2.c:2155 +#: dwarf2.c:2210 msgid "DWARF error: invalid maximum operations per instruction" msgstr "Erreur DWARF: opérations maximum par instruction invalide" -#: dwarf2.c:2174 +#: dwarf2.c:2229 msgid "DWARF error: ran out of room reading opcodes" msgstr "Erreur DWARF: on est tombé à cours de place en lisant les opcodes" -#: dwarf2.c:2347 +#: dwarf2.c:2420 msgid "DWARF error: mangled line number section" msgstr "Erreur DWARF: numéro de ligne de section mutilé" -#: dwarf2.c:2852 dwarf2.c:2913 +#: dwarf2.c:2905 +msgid "DWARF error: abstract instance recursion detected" +msgstr "Erreur DWARF: récursion d'une instance abstraite détectée" + +#: dwarf2.c:2939 dwarf2.c:3033 msgid "DWARF error: invalid abstract instance DIE ref" msgstr "Erreur DWARF: réf DIE d'instance abstraite invalide" -#: dwarf2.c:2889 +#: dwarf2.c:2955 #, c-format msgid "DWARF error: unable to read alt ref %" msgstr "Erreur DWARF: impossible de lire la ref alt %" -#: dwarf2.c:2930 dwarf2.c:3103 dwarf2.c:3457 +#: dwarf2.c:3011 +#, c-format +msgid "DWARF error: unable to locate abstract instance DIE ref %" +msgstr "Erreur DWARF: impossible de localiser l'instance abstraite de la réf DIE %" + +#: dwarf2.c:3050 dwarf2.c:3232 dwarf2.c:3618 #, c-format msgid "DWARF error: could not find abbrev number %u" msgstr "Erreur DWARF: ne peut repérer le numéro abrégé %u" -#: dwarf2.c:2947 -msgid "DWARF error: abstract instance recursion detected" -msgstr "Erreur DWARF: récursion d'une instance abstraite détectée" +#: dwarf2.c:3381 +#, c-format +msgid "DWARF error: could not find variable specification at offset %lx" +msgstr "Erreur DWARF: ne peut repérer la spécification de variable au décalage %lx" -#: dwarf2.c:3376 +#: dwarf2.c:3537 #, c-format msgid "DWARF error: found dwarf version '%u', this reader only handles version 2, 3, 4 and 5 information" msgstr "Erreur DWARF: version DWARF trouvée « %u », ce lecteur ne supporte que les informations des versions 2, 3, 4 et 5" -#: dwarf2.c:3420 +#: dwarf2.c:3581 #, c-format msgid "DWARF error: found address size '%u', this reader can not handle sizes greater than '%u'" msgstr "Erreur DWARF: taille d'adresse obtenue « %u », ce lecteur ne peut traiter des tailles plus grandes que « %u »" -#: dwarf2.c:3523 +#: dwarf2.c:3685 msgid "DWARF error: DW_AT_comp_dir attribute encountered with a non-string form" msgstr "Erreur DWARF: attribut DW_AT_comp_dir rencontré sous une forme non-chaîne" -#: ecoff.c:971 +#: ecoff.c:982 #, c-format msgid "%pB: warning: isymMax (%ld) is greater than ifdMax (%ld)" msgstr "%pB: attention: isymMax (%ld) est plus grand que ifdMax (%ld)" -#: ecoff.c:1268 +#: ecoff.c:1279 #, c-format msgid "unknown basic type %d" msgstr "type de base %d inconnu" -#: ecoff.c:1525 +#: ecoff.c:1536 #, c-format msgid "" "\n" @@ -685,7 +697,7 @@ "\n" " Dernier+1 symbole: %ld" -#: ecoff.c:1532 ecoff.c:1535 +#: ecoff.c:1543 ecoff.c:1546 #, c-format msgid "" "\n" @@ -694,7 +706,7 @@ "\n" " Premier symbole: %ld" -#: ecoff.c:1548 +#: ecoff.c:1559 #, c-format msgid "" "\n" @@ -703,7 +715,7 @@ "\n" " Dernier+1 symbole: %-7ld Type: %s" -#: ecoff.c:1555 +#: ecoff.c:1566 #, c-format msgid "" "\n" @@ -712,7 +724,7 @@ "\n" " Symbole local: %ld" -#: ecoff.c:1563 +#: ecoff.c:1574 #, c-format msgid "" "\n" @@ -721,7 +733,7 @@ "\n" " struct; Symbole Fin+1: %ld" -#: ecoff.c:1568 +#: ecoff.c:1579 #, c-format msgid "" "\n" @@ -730,7 +742,7 @@ "\n" " union; Dernier+1 symbole: %ld" -#: ecoff.c:1573 +#: ecoff.c:1584 #, c-format msgid "" "\n" @@ -739,7 +751,7 @@ "\n" " enum; Dernier+1 symbol: %ld" -#: ecoff.c:1579 +#: ecoff.c:1590 #, c-format msgid "" "\n" @@ -748,22 +760,22 @@ "\n" " Type: %s" -#: elf-attrs.c:446 +#: elf-attrs.c:449 #, c-format msgid "%pB: error: attribute section '%pA' too big: %#llx" msgstr "%pB: erreur: section d'attributs « %pA » trop grande: %llx" -#: elf-attrs.c:487 +#: elf-attrs.c:490 #, c-format msgid "%pB: error: attribute section length too small: %" msgstr "%pB: erreur: longueur de section d'attributs trop petite: %" -#: elf-attrs.c:615 +#: elf-attrs.c:618 #, c-format msgid "error: %pB: object has vendor-specific contents that must be processed by the '%s' toolchain" msgstr "erreur: %pB: l'objet a un contenu spécifique à un vendeur qui doit être traité par la chaîne d'outils « %s »" -#: elf-attrs.c:625 +#: elf-attrs.c:628 #, c-format msgid "error: %pB: object tag '%d, %s' is incompatible with tag '%d, %s'" msgstr "erreur: %pB: étiquette d'objet « %d, %s » incompatible avec l'étiquette « %d, %s »" @@ -787,91 +799,90 @@ msgid "further warnings about FDE encoding preventing .eh_frame_hdr generation dropped" msgstr "les avertissements suivants à propos de l'encodage FDE empêchant la génération de .eh_frame_hdr sont abandonnés" -#: elf-eh-frame.c:1868 +#: elf-eh-frame.c:1866 #, c-format msgid "%pB: %pA not in order" msgstr "%pB: %pA pas dans l'ordre" -#: elf-eh-frame.c:1882 +#: elf-eh-frame.c:1880 #, c-format msgid "%pB: %pA invalid input section size" msgstr "%pB: %pA taille de section d'entrée invalide" -#: elf-eh-frame.c:1890 +#: elf-eh-frame.c:1888 #, c-format msgid "%pB: %pA points past end of text section" msgstr "%pB: %pA pointe au delà de la fin de la section texte" -#: elf-eh-frame.c:2139 +#: elf-eh-frame.c:2141 msgid "DW_EH_PE_datarel unspecified for this architecture" msgstr "DW_EH_PE_datarel non spécifié pour cette architecture" -#: elf-eh-frame.c:2309 +#: elf-eh-frame.c:2312 #, c-format msgid "invalid output section for .eh_frame_entry: %pA" msgstr "section de sortie invalide pour .eh_frame_entry: %pA" -#: elf-eh-frame.c:2332 +#: elf-eh-frame.c:2335 #, c-format msgid "invalid contents in %pA section" msgstr "contenu invalide dans la section %pA" -#: elf-eh-frame.c:2488 +#: elf-eh-frame.c:2491 msgid ".eh_frame_hdr entry overflow" msgstr "débordement de l'entrée .eh_frame_hdr" -#: elf-eh-frame.c:2490 +#: elf-eh-frame.c:2493 msgid ".eh_frame_hdr refers to overlapping FDEs" msgstr ".eh_frame_hdr fait référence à des FDE qui se chevauchent" -#: elf-ifunc.c:149 +#: elf-ifunc.c:144 #, c-format msgid "%F%P: dynamic STT_GNU_IFUNC symbol `%s' with pointer equality in `%pB' can not be used when making an executable; recompile with -fPIE and relink with -pie\n" msgstr "%P%P: le symbole dynamique STT_GNU_IFUNC « %s » avec une égalité de pointeur dans « %pB » ne peut pas être utilisé lors de la création d'un exécutable. Recompilez avec -fPIE et reliez avec -pie\n" -#: elf-m10200.c:434 elf-m10300.c:2147 elf32-avr.c:1510 elf32-bfin.c:3127 -#: elf32-cr16.c:1464 elf32-cr16c.c:783 elf32-cris.c:2033 elf32-crx.c:925 -#: elf32-d10v.c:512 elf32-epiphany.c:566 elf32-fr30.c:594 elf32-frv.c:4049 -#: elf32-ft32.c:494 elf32-h8300.c:523 elf32-ip2k.c:1482 elf32-iq2000.c:693 -#: elf32-lm32.c:1112 elf32-m32c.c:624 elf32-m32r.c:3045 elf32-m68hc1x.c:1266 -#: elf32-mep.c:526 elf32-metag.c:1990 elf32-microblaze.c:1631 -#: elf32-moxie.c:288 elf32-mt.c:402 elf32-nds32.c:6189 elf32-or1k.c:1759 -#: elf32-score.c:2733 elf32-score7.c:2542 elf32-spu.c:5083 -#: elf32-tilepro.c:3506 elf32-v850.c:2291 elf32-visium.c:681 -#: elf32-xstormy16.c:931 elf64-mmix.c:1541 elfxx-tilegx.c:3870 +#: elf-m10200.c:434 elf-m10300.c:2145 elf32-avr.c:1508 elf32-bfin.c:3126 +#: elf32-cr16.c:1464 elf32-cris.c:2033 elf32-crx.c:920 elf32-d10v.c:510 +#: elf32-epiphany.c:562 elf32-fr30.c:594 elf32-frv.c:4048 elf32-ft32.c:494 +#: elf32-h8300.c:523 elf32-ip2k.c:1477 elf32-iq2000.c:691 elf32-lm32.c:1069 +#: elf32-m32c.c:624 elf32-m32r.c:2860 elf32-m68hc1x.c:1272 elf32-mep.c:526 +#: elf32-metag.c:1986 elf32-microblaze.c:1627 elf32-moxie.c:288 elf32-mt.c:402 +#: elf32-nds32.c:6048 elf32-or1k.c:1817 elf32-score.c:2734 elf32-score7.c:2543 +#: elf32-spu.c:5083 elf32-tilepro.c:3380 elf32-v850.c:2290 elf32-visium.c:680 +#: elf32-xstormy16.c:929 elf64-bpf.c:512 elf64-mmix.c:1541 elfxx-tilegx.c:3744 msgid "internal error: out of range error" msgstr "erreur interne: hors limite" -#: elf-m10200.c:438 elf-m10300.c:2151 elf32-avr.c:1514 elf32-bfin.c:3131 -#: elf32-cr16.c:1468 elf32-cr16c.c:787 elf32-cris.c:2037 elf32-crx.c:929 -#: elf32-d10v.c:516 elf32-fr30.c:598 elf32-frv.c:4053 elf32-ft32.c:498 -#: elf32-h8300.c:527 elf32-iq2000.c:697 elf32-lm32.c:1116 elf32-m32c.c:628 -#: elf32-m32r.c:3049 elf32-m68hc1x.c:1270 elf32-mep.c:530 elf32-metag.c:1994 -#: elf32-microblaze.c:1635 elf32-moxie.c:292 elf32-msp430.c:1362 -#: elf32-nds32.c:6193 elf32-or1k.c:1763 elf32-score.c:2737 elf32-score7.c:2546 -#: elf32-spu.c:5087 elf32-tilepro.c:3510 elf32-v850.c:2295 elf32-visium.c:685 -#: elf32-xstormy16.c:935 elf64-mmix.c:1545 elfxx-mips.c:10469 -#: elfxx-tilegx.c:3874 +#: elf-m10200.c:438 elf-m10300.c:2149 elf32-avr.c:1512 elf32-bfin.c:3130 +#: elf32-cr16.c:1468 elf32-cris.c:2037 elf32-crx.c:924 elf32-d10v.c:514 +#: elf32-fr30.c:598 elf32-frv.c:4052 elf32-ft32.c:498 elf32-h8300.c:527 +#: elf32-iq2000.c:695 elf32-lm32.c:1073 elf32-m32c.c:628 elf32-m32r.c:2864 +#: elf32-m68hc1x.c:1276 elf32-mep.c:530 elf32-metag.c:1990 +#: elf32-microblaze.c:1631 elf32-moxie.c:292 elf32-msp430.c:1371 +#: elf32-nds32.c:6052 elf32-or1k.c:1821 elf32-score.c:2738 elf32-score7.c:2547 +#: elf32-spu.c:5087 elf32-tilepro.c:3384 elf32-v850.c:2294 elf32-visium.c:684 +#: elf32-xstormy16.c:933 elf64-mmix.c:1545 elfxx-mips.c:10576 +#: elfxx-tilegx.c:3748 msgid "internal error: unsupported relocation error" msgstr "erreur interne: erreur de réadressage non supportée" -#: elf-m10200.c:442 elf32-cr16.c:1472 elf32-cr16c.c:791 elf32-crx.c:933 -#: elf32-d10v.c:520 elf32-h8300.c:531 elf32-lm32.c:1120 elf32-m32r.c:3053 -#: elf32-m68hc1x.c:1274 elf32-microblaze.c:1639 elf32-nds32.c:6197 -#: elf32-score.c:2741 elf32-score7.c:2550 elf32-spu.c:5091 +#: elf-m10200.c:442 elf32-cr16.c:1472 elf32-crx.c:928 elf32-d10v.c:518 +#: elf32-h8300.c:531 elf32-lm32.c:1077 elf32-m32r.c:2868 elf32-m68hc1x.c:1280 +#: elf32-microblaze.c:1635 elf32-nds32.c:6056 elf32-score.c:2742 +#: elf32-score7.c:2551 elf32-spu.c:5091 msgid "internal error: dangerous error" msgstr "erreur interne: erreur dangereuse" -#: elf-m10200.c:446 elf-m10300.c:2168 elf32-avr.c:1522 elf32-bfin.c:3139 -#: elf32-cr16.c:1476 elf32-cr16c.c:795 elf32-cris.c:2045 elf32-crx.c:937 -#: elf32-d10v.c:524 elf32-epiphany.c:581 elf32-fr30.c:606 elf32-frv.c:4061 -#: elf32-ft32.c:506 elf32-h8300.c:535 elf32-ip2k.c:1497 elf32-iq2000.c:705 -#: elf32-lm32.c:1124 elf32-m32c.c:636 elf32-m32r.c:3057 elf32-m68hc1x.c:1278 -#: elf32-mep.c:538 elf32-metag.c:2002 elf32-microblaze.c:1643 -#: elf32-moxie.c:300 elf32-msp430.c:1370 elf32-mt.c:410 elf32-nds32.c:6201 -#: elf32-or1k.c:1771 elf32-score.c:2750 elf32-score7.c:2554 elf32-spu.c:5095 -#: elf32-tilepro.c:3518 elf32-v850.c:2315 elf32-visium.c:693 -#: elf32-xstormy16.c:943 elf64-mmix.c:1553 elfxx-tilegx.c:3882 +#: elf-m10200.c:446 elf-m10300.c:2166 elf32-avr.c:1520 elf32-bfin.c:3138 +#: elf32-cr16.c:1476 elf32-cris.c:2045 elf32-crx.c:932 elf32-d10v.c:522 +#: elf32-epiphany.c:577 elf32-fr30.c:606 elf32-frv.c:4060 elf32-ft32.c:506 +#: elf32-h8300.c:535 elf32-ip2k.c:1492 elf32-iq2000.c:703 elf32-lm32.c:1081 +#: elf32-m32c.c:636 elf32-m32r.c:2872 elf32-m68hc1x.c:1284 elf32-mep.c:538 +#: elf32-metag.c:1998 elf32-microblaze.c:1639 elf32-moxie.c:300 +#: elf32-msp430.c:1379 elf32-mt.c:410 elf32-nds32.c:6060 elf32-or1k.c:1829 +#: elf32-score.c:2751 elf32-score7.c:2555 elf32-spu.c:5095 +#: elf32-tilepro.c:3392 elf32-v850.c:2314 elf32-visium.c:692 +#: elf32-xstormy16.c:941 elf64-bpf.c:525 elf64-mmix.c:1553 elfxx-tilegx.c:3756 msgid "internal error: unknown error" msgstr "erreur interne: erreur inconnue" @@ -880,38 +891,35 @@ msgid "%pB: unsupported transition from %s to %s" msgstr "%pB: transition de %s à %s non supportée" -#: elf-m10300.c:1198 +#: elf-m10300.c:1196 #, c-format msgid "%pB: %s' accessed both as normal and thread local symbol" msgstr "%pB: « %s » accédé à la fois comme symbole normal et comme symbole locale au thread" -#: elf-m10300.c:2094 elf32-arm.c:13246 elf32-i386.c:3409 elf32-m32r.c:2539 -#: elf32-m68k.c:3899 elf32-s390.c:3211 elf32-sh.c:3800 elf32-tilepro.c:3409 -#: elf32-xtensa.c:2965 elf64-s390.c:3161 elf64-x86-64.c:3846 -#: elfxx-sparc.c:3906 elfxx-tilegx.c:3793 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:5261 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:6807 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2279 +#: elf-m10300.c:2092 elf32-arm.c:13400 elf32-i386.c:3403 elf32-m32r.c:2354 +#: elf32-m68k.c:3931 elf32-s390.c:3082 elf32-sh.c:3677 elf32-tilepro.c:3283 +#: elf32-xtensa.c:3023 elf64-s390.c:3031 elf64-x86-64.c:4062 +#: elfxx-sparc.c:3795 elfxx-tilegx.c:3667 elfnn-aarch64.c:5505 +#: elfnn-aarch64.c:7102 #, c-format msgid "%pB(%pA+%#): unresolvable %s relocation against symbol `%s'" msgstr "%pB(%pA+%#): réadressage %s sans solution vers le symbole « %s »" -#: elf-m10300.c:2156 +#: elf-m10300.c:2154 msgid "error: inappropriate relocation type for shared library (did you forget -fpic?)" msgstr "erreur: type de réadressage inapproprié pour une librairie partagée (avez-vous oublié -fpic ?)" -#: elf-m10300.c:2160 +#: elf-m10300.c:2158 #, c-format msgid "%pB: taking the address of protected function '%s' cannot be done when making a shared library" msgstr "%pB: l'adresse de la fonction protégée « %s » ne peut être prise lors de la création d'une librairie partagée" -#: elf-m10300.c:2163 +#: elf-m10300.c:2161 msgid "internal error: suspicious relocation type used in shared library" msgstr "erreur interne: type de réadressage douteux utilisé dans une librairie partagée" -#: elf-m10300.c:2649 elf32-avr.c:2492 elf32-frv.c:5641 elf64-ia64-vms.c:364 -#: elfxx-sparc.c:2795 reloc.c:8185 reloc16.c:155 elf32-ia64.c:361 -#: elf64-ia64.c:361 +#: elf-m10300.c:2647 elf32-avr.c:2489 elf32-frv.c:5620 elf64-ia64-vms.c:364 +#: elfxx-sparc.c:2683 reloc.c:8244 reloc16.c:155 elfnn-ia64.c:364 msgid "%P%F: --relax and -r may not be used together\n" msgstr "%P%F: --relax et -r ne peuvent pas être utilisés en même temps\n" @@ -953,7 +961,7 @@ msgid "Removed property %W to merge %pB (0x%v) and %pB (not found)\n" msgstr "Propriété supprimée %W à fusionner %pB (0x%v) et %pB (pas trouvée)\n" -#: elf-properties.c:316 elf-properties.c:396 +#: elf-properties.c:316 elf-properties.c:394 msgid "Removed property %W to merge %pB and %pB\n" msgstr "Propriété supprimée %W à fusionner %pB et %pB\n" @@ -961,115 +969,110 @@ msgid "Removed property %W to merge %pB and %pB (not found)\n" msgstr "Propriété supprimée %W à fusionner %pB et %pB (pas trouvée)\n" -#: elf-properties.c:339 +#: elf-properties.c:337 msgid "Updated property %W (0x%v) to merge %pB (0x%v) and %pB (0x%v)\n" msgstr "Propriété mise à jour %W (0x%v) à fusionner %pB (0x%v) et %pB (0x%v)\n" -#: elf-properties.c:348 +#: elf-properties.c:346 msgid "Updated property %W (%v) to merge %pB (0x%v) and %pB (not found)\n" msgstr "Propriété mise à jour %W (%v) à fusionner %pB (0x%v) et %pB (pas trouvée)\n" -#: elf-properties.c:390 +#: elf-properties.c:388 msgid "Removed property %W to merge %pB (not found) and %pB (0x%v)\n" msgstr "Propriété supprimée %W à fusionner %pB (pas trouvée) et %pB (0x%v)\n" #. Merge .note.gnu.property sections. -#: elf-properties.c:552 elf-properties.c:554 +#: elf-properties.c:550 elf-properties.c:552 msgid "\n" msgstr "\n" -#: elf-properties.c:553 +#: elf-properties.c:551 msgid "Merging program properties\n" msgstr "Fusion des propriétés du programme\n" #. PR 17512: file: f057ec89. -#: elf.c:345 +#: elf.c:336 #, c-format msgid "%pB: attempt to load strings from a non-string section (number %d)" msgstr "%pB: tentative de charger des chaînes depuis une section non-chaînes (numéro %d)" -#: elf.c:360 +#: elf.c:361 #, c-format msgid "%pB: invalid string offset %u >= % for section `%s'" msgstr "%pB: chaîne de décalage invalide %u >= % pour la section « %s »" -#: elf.c:499 /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:7891 +#: elf.c:513 elfnn-aarch64.c:8096 #, c-format msgid "%pB symbol number %lu references nonexistent SHT_SYMTAB_SHNDX section" msgstr "%pB le symbole numéro %lu fait référence à une section SHT_SYMTAB_SHNDX inexistante" -#: elf.c:664 -#, c-format -msgid "%pB: corrupt size field in group section header: %#" -msgstr "%pB: champ de taille corrompu dans l'en-tête du groupe de section: %#" - -#: elf.c:680 +#: elf.c:675 #, c-format msgid "%pB: invalid size field in group section header: %#" msgstr "%pB: champ de taille invalide dans l'en-tête du groupe de section: %#" -#: elf.c:728 +#: elf.c:720 #, c-format msgid "%pB: invalid entry in SHT_GROUP section [%u]" msgstr "%pB: entrée invalide dans la section SHT_GROUP [%u]" -#: elf.c:747 +#: elf.c:739 #, c-format msgid "%pB: no valid group sections found" msgstr "%pB: aucune section de groupe valable trouvée" #. See PR 21957 for a reproducer. -#: elf.c:776 +#: elf.c:768 #, c-format msgid "%pB: group section '%pA' has no contents" msgstr "%pB: la section de groupe « %pA » n'a pas de contenu" -#: elf.c:837 +#: elf.c:829 #, c-format msgid "%pB: no group info for section '%pA'" msgstr "%pB: aucune info de groupe pour la section « %pA »" -#: elf.c:868 elf.c:3886 elflink.c:11403 +#: elf.c:859 elf.c:3955 #, c-format msgid "%pB: warning: sh_link not set for section `%pA'" msgstr "%pB: attention: sh_link n'a pas de valeur pour la section « %pA »" -#: elf.c:888 +#: elf.c:879 #, c-format msgid "%pB: sh_link [%d] in section `%pA' is incorrect" msgstr "%pB: sh_link [%d] n'est pas correct dans la section « %pA »" -#: elf.c:901 +#: elf.c:892 #, c-format msgid "%pB: SHT_GROUP section [index %d] has no SHF_GROUP sections" msgstr "%pB: la section SHT_GROUP [index %d] n'a pas de section SHF_GROUP" -#: elf.c:922 +#: elf.c:913 #, c-format msgid "%pB: section group entry number %u is corrupt" msgstr "%pB: l'entrée de groupe de section %u est corrompue" -#: elf.c:945 +#: elf.c:936 #, c-format msgid "%pB: unknown type [%#x] section `%s' in group [%pA]" msgstr "%pB: type [%#x] de section « %s » inconnu dans le groupe [%pA]" -#: elf.c:1408 +#: elf.c:1438 #, c-format msgid "%pB: invalid sh_link field (%d) in section number %d" msgstr "%pB: champ sh_link (%d) invalide dans la section numéro %d" -#: elf.c:1424 +#: elf.c:1454 #, c-format msgid "%pB: failed to find link section for section %d" msgstr "%pB: impossible de trouver la section de liaison pour la section %d" -#: elf.c:1451 +#: elf.c:1481 #, c-format msgid "%pB: failed to find info section for section %d" msgstr "%pB: impossible de trouver la section d'information pour la section %d" -#: elf.c:1623 +#: elf.c:1653 #, c-format msgid "" "\n" @@ -1078,7 +1081,7 @@ "\n" "En-tête de programme:\n" -#: elf.c:1665 +#: elf.c:1695 #, c-format msgid "" "\n" @@ -1087,7 +1090,7 @@ "\n" "Section dynamique:\n" -#: elf.c:1806 +#: elf.c:1836 #, c-format msgid "" "\n" @@ -1096,7 +1099,7 @@ "\n" "Définitions des versions:\n" -#: elf.c:1831 +#: elf.c:1861 #, c-format msgid "" "\n" @@ -1105,262 +1108,353 @@ "\n" "Références de version:\n" -#: elf.c:1836 +#: elf.c:1866 #, c-format msgid " required from %s:\n" msgstr " requis par %s:\n" -#: elf.c:2037 +#: elf.c:2082 #, c-format msgid "%pB: warning: loop in section dependencies detected" msgstr "%pB: attention: boucle détectée dans les dépendances de sections" -#: elf.c:2145 +#: elf.c:2190 #, c-format msgid "%pB: warning: multiple symbol tables detected - ignoring the table in section %u" msgstr "%pB: attention: plusieurs tables de symboles détectées — la table dans la section %u est ignorée" -#: elf.c:2229 +#: elf.c:2274 #, c-format msgid "%pB: warning: multiple dynamic symbol tables detected - ignoring the table in section %u" msgstr "%pB: attention: plusieurs tables de symboles dynamiques ont été détectées — la table dans la section %u est ignorée" -#: elf.c:2342 +#: elf.c:2387 #, c-format msgid "%pB: invalid link %u for reloc section %s (index %u)" msgstr "%pB: lien %u invalide pour la section de réadressages %s (index %u)" -#: elf.c:2504 elf.c:2519 elf.c:2530 elf.c:2543 +#: elf.c:2478 +#, c-format +msgid "%pB: warning: secondary relocation section '%s' for section %pA found - ignoring" +msgstr "%pB: attention: la section de réadressage secondaire « %s » pour la section %pA a été trouvée — elle est ignorée" + +#: elf.c:2562 elf.c:2577 elf.c:2588 elf.c:2601 #, c-format msgid "%pB: unknown type [%#x] section `%s'" msgstr "%pB: type [%#x] inconnu dans la section « %s »" -#: elf.c:3248 +#: elf.c:3308 #, c-format msgid "%pB: error: alignment power %d of section `%pA' is too big" msgstr "%pB: erreur: l'alignement à la puissance %d de la section « %pA » est trop grand" -#: elf.c:3278 +#: elf.c:3341 #, c-format msgid "warning: section `%pA' type changed to PROGBITS" msgstr "attention: type de la section « %pA » changé en PROGBITS" -#: elf.c:3754 +#: elf.c:3824 #, c-format msgid "%pB: too many sections: %u" msgstr "%pB: trop de sections: %u" -#: elf.c:3839 +#: elf.c:3909 #, c-format msgid "%pB: sh_link of section `%pA' points to discarded section `%pA' of `%pB'" msgstr "%pB: le sh_link de la section « %pA » pointe vers la section abandonnée « %pA » de « %pB »" -#: elf.c:3864 +#: elf.c:3934 #, c-format msgid "%pB: sh_link of section `%pA' points to removed section `%pA' of `%pB'" msgstr "%pB: le sh_link de la section « %pA » pointe vers la section supprimée « %pA » de « %pB »" -#: elf.c:4430 +#: elf.c:4495 #, c-format -msgid "%pB: GNU_MBIN section `%pA' has invalid sh_info field: %d" -msgstr "%pB: la section GNU_MBIN « %pA » a un champ sh_info invalide: %d" +msgid "%pB: GNU_MBIND section `%pA' has invalid sh_info field: %d" +msgstr "%pB: la section GNU_MBIND « %pA » a un champ sh_info invalide: %d" -#: elf.c:5013 +#: elf.c:5086 #, c-format msgid "%pB: TLS sections are not adjacent:" msgstr "%pB: Les sections TLS ne sont pas adjacentes:" -#: elf.c:5020 +#: elf.c:5093 #, c-format msgid "\t TLS: %pA" msgstr "\t TLS: %pA" -#: elf.c:5024 +#: elf.c:5097 #, c-format msgid "\tnon-TLS: %pA" msgstr "\tnon-TLS: %pA" -#: elf.c:5538 +#: elf.c:5687 #, c-format msgid "%pB: The first section in the PT_DYNAMIC segment is not the .dynamic section" msgstr "%pB: La première section dans le segment PT_DYNAMIC n'est pas la section .dynamic" -#: elf.c:5566 +#: elf.c:5713 #, c-format msgid "%pB: not enough room for program headers, try linking with -N" msgstr "%pB: pas suffisamment d'espace pour les en-têtes du programme, essayer l'option -N" -#: elf.c:5654 +#: elf.c:5830 #, c-format msgid "%pB: section %pA lma %# adjusted to %#" msgstr "%pB: section %pA avec lma %# ajustée à %#" -#: elf.c:5791 +#. The fix for this error is usually to edit the linker script being +#. used and set up the program headers manually. Either that or +#. leave room for the headers at the start of the SECTIONS. +#: elf.c:5967 +#, c-format +msgid "%pB: error: PHDR segment not covered by LOAD segment" +msgstr "%pB: erreur: segment PHDR non couvert par le segment LOAD" + +#: elf.c:6007 #, c-format msgid "%pB: section `%pA' can't be allocated in segment %d" msgstr "%pB: la section « %pA » ne peut pas être allouée dans le segment %d" -#: elf.c:5839 +#: elf.c:6139 #, c-format msgid "%pB: warning: allocated section `%s' not in segment" msgstr "%pB: attention: section allouée « %s » n'est pas dans le segment" -#: elf.c:6072 +#: elf.c:6300 #, c-format msgid "%pB: error: non-load segment %d includes file header and/or program header" msgstr "%pB: erreur: le segment de non-chargement %d inclus un en-tête de fichier ou de programme" -#. The fix for this error is usually to edit the linker script being -#. used and set up the program headers manually. Either that or -#. leave room for the headers at the start of the SECTIONS. -#: elf.c:6249 -#, c-format -msgid "%pB: error: PHDR segment not covered by LOAD segment" -msgstr "%pB: erreur: segment PHDR non couvert par le segment LOAD" - -#: elf.c:6606 +#: elf.c:6804 #, c-format msgid "%pB: symbol `%s' required but not present" msgstr "%pB: symbole « %s » requis mais absent" -#: elf.c:6949 +#: elf.c:7147 #, c-format msgid "%pB: warning: empty loadable segment detected at vaddr=%#, is this intentional?" msgstr "%pB: attention: segment chargeable vide détecté à vaddr=%#, est-ce intentionnel ?" -#: elf.c:7574 +#: elf.c:7773 #, c-format msgid "%pB: warning: segment alignment of %# is too large" msgstr "%pB: attention: un alignement de segment de %# est trop grand" -#: elf.c:8073 +#: elf.c:8286 +#, c-format +msgid "%pB: Unable to handle section index %x in ELF symbol. Using ABS instead." +msgstr "%pB: Impossible de gérer l'indice de section %x dans le symbole ELF. Utilisation de ABS à la place." + +#: elf.c:8316 #, c-format msgid "unable to find equivalent output section for symbol '%s' from section '%s'" msgstr "incapable de trouver un équivalent pour le symbole « %s » de la section « %s »" -#: elf.c:8421 +#: elf.c:8703 #, c-format msgid "%pB: .gnu.version_r invalid entry" msgstr "%pB: entrée .gnu.version_r invalide" -#: elf.c:8548 +#: elf.c:8836 #, c-format msgid "%pB: .gnu.version_d invalid entry" msgstr "%pB: entrée .gnu.version_d invalide" -#: elf32-arc.c:440 elf32-frv.c:6630 elf32-iq2000.c:870 elf32-m32c.c:914 -#: elf32-mt.c:562 elf32-rl78.c:1260 elf32-rx.c:3199 elf32-visium.c:841 -#: elf64-ppc.c:4950 +#: elf.c:9293 +#, c-format +msgid "%pB:%pA: error: attempting to write into an unallocated compressed section" +msgstr "%pB:%pA: erreur: tentative d'écrire dans une session compressée non allouée" + +#: elf.c:9302 +#, c-format +msgid "%pB:%pA: error: attempting to write over the end of the section" +msgstr "%pB:%pA: erreur: tentative d'écrire au delà de la fin de la section" + +#: elf.c:9313 +#, c-format +msgid "%pB:%pA: error: attempting to write section into an empty buffer" +msgstr "%pB:%pA: erreur: tentative d'écrire la section dans un tampon vide" + +#: elf.c:12430 +msgid "GNU_MBIND section is unsupported" +msgstr "la section GNU_MBIND n'est pas supportée" + +#: elf.c:12432 +msgid "symbol type STT_GNU_IFUNC is unsupported" +msgstr "le type symbolique STT_GNU_IFUNC n'est pas supporté" + +#: elf.c:12434 +msgid "symbol binding STB_GNU_UNIQUE is unsupported" +msgstr "la liaison symbolique STB_GNU_UNIQUE n'est pas supportée" + +#: elf.c:12618 elf64-sparc.c:123 elfcode.h:1482 +#, c-format +msgid "%pB(%pA): relocation %d has invalid symbol index %ld" +msgstr "%pB(%pA): réadressage %d a un index de symbole %ld invalide" + +#: elf.c:12692 +#, c-format +msgid "%pB(%pA): link section cannot be set because the output file does not have a symbol table" +msgstr "%pB(%pA): la section de liaison ne peut pas être définie car le fichier de sortie n'a pas de table de symboles" + +#: elf.c:12704 +#, c-format +msgid "%pB(%pA): info section index is invalid" +msgstr "%pB(%pA): l'index de la section d'information est invalide" + +#: elf.c:12718 +#, c-format +msgid "%pB(%pA): info section index cannot be set because the section is not in the output" +msgstr "%pB(%pA): l'index de la section d'information ne peut pas être défini car la section n'est pas dans la sortie" + +#: elf.c:12784 +#, c-format +msgid "%pB(%pA): error: secondary reloc section processed twice" +msgstr "%pB(%pA): erreur: le section de réadressage secondaire est compressée deux fois" + +#: elf.c:12796 +#, c-format +msgid "%pB(%pA): error: secondary reloc section is empty!" +msgstr "%pB(%pA): erreur: la section de réadressage secondaire est vide !" + +#: elf.c:12819 +#, c-format +msgid "%pB(%pA): error: internal relocs missing for secondary reloc section" +msgstr "%pB(%pA): erreur: réadressages internes manquants pour la section de réadressage secondaire" + +#: elf.c:12838 +#, c-format +msgid "%pB(%pA): error: reloc table entry %u is empty" +msgstr "%pB:%pA: erreur: l'entrée %u de la table de réadressage est vide" + +#: elf.c:12863 +#, c-format +msgid "%pB(%pA): error: secondary reloc %u references a missing symbol" +msgstr "%pB(%pA): erreur: le réadressage secondaire %u fait référence à un symbole manquant" + +#: elf.c:12880 +#, c-format +msgid "%pB(%pA): error: secondary reloc %u references a deleted symbol" +msgstr "%pB(%pA): erreur: le réadressage secondaire %u fait référence à un symbole supprimé" + +#: elf.c:12893 +#, c-format +msgid "%pB(%pA): error: secondary reloc %u is of an unknown type" +msgstr "%pB(%pA): erreur: le réadressage secondaire %u est d'un type inconnu" + +#: elf32-arc.c:455 elf32-frv.c:6611 elf32-iq2000.c:868 elf32-m32c.c:914 +#: elf32-mt.c:562 elf32-rl78.c:1260 elf32-rx.c:3205 elf32-visium.c:844 +#: elf64-ppc.c:5291 #, c-format msgid "private flags = 0x%lx:" msgstr "fanions privés = 0x%lx:" -#: elf32-arc.c:627 +#: elf32-arc.c:642 #, c-format msgid "warning: %pB: conflicting platform configuration %s with %s" msgstr "attention: %pB: configuration de plateforme %s en conflit avec %s" -#: elf32-arc.c:646 +#: elf32-arc.c:661 #, c-format msgid "error: %pB: unable to merge CPU base attributes %s with %s" msgstr "erreur: %pB: impossible de fusionner les attributs de base CPU %s avec %s" -#: elf32-arc.c:683 +#: elf32-arc.c:698 #, c-format msgid "error: %pB: unable to merge ISA extension attributes %s" msgstr "erreur: %pB: impossible de fusionner les attributs de l'extension ISA %s" -#: elf32-arc.c:707 +#: elf32-arc.c:722 #, c-format msgid "error: %pB: conflicting ISA extension attributes %s with %s" msgstr "erreur: %pB: attributs d'extension ISA %s en conflit avec %s" -#: elf32-arc.c:747 +#: elf32-arc.c:762 #, c-format msgid "error: %pB: cannot mix rf16 with full register set %pB" msgstr "erreur: %pB: impossible de mélanger rf16 avec l'ensemble des registres complets %pB" -#: elf32-arc.c:775 +#: elf32-arc.c:790 #, c-format msgid "error: %pB: conflicting attributes %s: %s with %s" msgstr "erreur: %pB: attributs %s conflictuels: %s avec %s" -#: elf32-arc.c:802 +#: elf32-arc.c:817 #, c-format msgid "error: %pB: conflicting attributes %s" msgstr "erreur: %pB: attributs %s conflictuels" -#: elf32-arc.c:907 +#: elf32-arc.c:922 #, c-format msgid "error: attempting to link %pB with a binary %pB of different architecture" msgstr "erreur: tentative de lier %pB avec un binaire %pB d'une architecture différente" -#: elf32-arc.c:923 elf32-iq2000.c:846 elf32-m32c.c:889 elf32-m68hc1x.c:1385 -#: elf32-ppc.c:3865 elf64-sparc.c:711 elfxx-mips.c:15354 +#: elf32-arc.c:938 elf32-iq2000.c:844 elf32-m32c.c:889 elf32-m68hc1x.c:1391 +#: elf32-ppc.c:3867 elf64-sparc.c:722 elfxx-mips.c:15513 #, c-format msgid "%pB: uses different e_flags (%#x) fields than previous modules (%#x)" msgstr "%pB: utilise des champs e_flags (%#x) différents des modules précédents (%#x)" -#: elf32-arc.c:1012 +#: elf32-arc.c:1027 msgid "error: the ARC4 architecture is no longer supported" msgstr "erreur: l'architecture ARC4 n'est plus supportée" -#: elf32-arc.c:1018 +#: elf32-arc.c:1033 msgid "warning: unset or old architecture flags; use default machine" msgstr "attention: fanions d'architecture non définis ou trop anciens; utilise la machine par défaut" -#: elf32-arc.c:1151 +#: elf32-arc.c:1159 #, c-format msgid "%pB(%pA+%#): CMEM relocation to `%s' is invalid, 16 MSB should be %#x (value is %#)" msgstr "%pB(%pA+%#): le réadressage CMEM vers « %s » est invalide. 16 MSB devrait être %#x (la valeur est %#)" -#: elf32-arc.c:1162 +#: elf32-arc.c:1170 #, c-format msgid "%pB(%pA+%#): CMEM relocation to `%s+%#' is invalid, 16 MSB should be %#x (value is %#)" msgstr "%pB(%pA+%#): le réadressage CMEM vers « %s+%# » est invalide, 16 MSB devrait être %#x (la valeur est %)" -#: elf32-arc.c:1876 +#: elf32-arc.c:1885 msgid "GOT and PLT relocations cannot be fixed with a non dynamic linker" msgstr "les réadressages GOT et PLT ne peuvent pas être corrigés avec un éditeur de liens non dynamique" -#: elf32-arc.c:1900 elf32-rl78.c:1098 elf32-rx.c:1470 +#: elf32-arc.c:1909 elf32-rl78.c:1098 elf32-rx.c:1475 #, c-format msgid "%pB(%pA): warning: unaligned access to symbol '%s' in the small data area" msgstr "%pB(%pA): attention: accès non aligné au symbole « %s » dans la zone des petites données" -#: elf32-arc.c:1905 elf32-rl78.c:1103 elf32-rx.c:1475 +#: elf32-arc.c:1914 elf32-rl78.c:1103 elf32-rx.c:1480 #, c-format msgid "%pB(%pA): internal error: out of range error" msgstr "%pB(%pA): erreur interne: hors limite" -#: elf32-arc.c:1910 elf32-rl78.c:1108 elf32-rx.c:1480 +#: elf32-arc.c:1919 elf32-rl78.c:1108 elf32-rx.c:1485 #, c-format msgid "%pB(%pA): internal error: unsupported relocation error" msgstr "%pB(%pA): erreur interne: réadressage non supporté" -#: elf32-arc.c:1915 elf32-rl78.c:1113 elf32-rx.c:1485 +#: elf32-arc.c:1924 elf32-rl78.c:1113 elf32-rx.c:1490 #, c-format msgid "%pB(%pA): internal error: dangerous relocation" msgstr "%pB(%pA): erreur interne: réadressage dangereux" -#: elf32-arc.c:1920 elf32-rl78.c:1118 elf32-rx.c:1490 +#: elf32-arc.c:1929 elf32-rl78.c:1118 elf32-rx.c:1495 #, c-format msgid "%pB(%pA): internal error: unknown error" msgstr "%pB(%pA): erreur interne: erreur inconnue" -#: elf32-arc.c:2013 elf32-arc.c:2081 elf32-arm.c:15323 elf32-metag.c:2257 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:7462 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:497 +#: elf32-arc.c:2022 elf32-arc.c:2090 elf32-arm.c:15513 elf32-metag.c:2253 +#: elf32-nds32.c:5498 elfnn-aarch64.c:7739 elfnn-riscv.c:483 #, c-format msgid "%pB: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC" msgstr "%pB: réadressage de %s en vertu de « %s » ne peut être utilisé lors de la création d'un objet partagé; recompilez avec -fPIC" -#: elf32-arc.c:2949 +#: elf32-arc.c:2909 #, c-format msgid "%pB: unknown mandatory ARC object attribute %d" msgstr "%pB: l'attribut d'objet ARC obligatoire %d est inconnu" -#: elf32-arc.c:2957 +#: elf32-arc.c:2917 #, c-format msgid "warning: %pB: unknown ARC object attribute %d" msgstr "attention: %pB: attribut d'objet ARC %d inconnu" @@ -1368,317 +1462,327 @@ # Les auteurs francophones que j'ai trouvés utilisent le mot « veneer ». Le mot « trampoline » est nettement plus approprié # pour désigner une instruction intermédiaire dont le seul but est de faire rebondir un branchement court vers une destination plus # éloignée. -#: elf32-arm.c:4304 elf32-arm.c:4338 elf32-arm.c:4357 elf32-arm.c:4409 +#: elf32-arm.c:4307 elf32-arm.c:4341 elf32-arm.c:4360 elf32-arm.c:4412 #, c-format msgid "%pB(%pA): warning: long branch veneers used in section with SHF_ARM_PURECODE section attribute is only supported for M-profile targets that implement the movw instruction" msgstr "%pB(%pA): attention: les trampolines (aka veneers) de branchements longs utilisés dans la section avec l'attribut de section SHF_ARM_PURECODE n'est supporté que sur les cibles M-profile implémentant l'instruction movw." -#: elf32-arm.c:4369 elf32-arm.c:4423 elf32-arm.c:9093 elf32-arm.c:9183 +#: elf32-arm.c:4372 elf32-arm.c:4426 elf32-arm.c:9116 elf32-arm.c:9206 #, c-format msgid "%pB(%s): warning: interworking not enabled; first occurrence: %pB: %s call to %s" msgstr "%pB(%s): attention: l'inter-réseautage n'est pas activé; première occurrence: %pB: appel %s à %s" -#: elf32-arm.c:4697 +#: elf32-arm.c:4552 +#, c-format +msgid "ERROR: CMSE stub (%s section) too far (%#) from destination (%#)" +msgstr "ERREUR: l'ébauche CMSE (section %s) est trop loin (%#) de la destination (%#)" + +#: elf32-arm.c:4721 #, c-format msgid "no address assigned to the veneers output section %s" msgstr "aucune adresse assignée à la section de sortie %s des trampolines (veneers)" -#: elf32-arm.c:4772 elf32-arm.c:6909 elf32-csky.c:3287 elf32-hppa.c:579 -#: elf32-m68hc1x.c:165 elf32-metag.c:1186 elf32-nios2.c:2208 elf64-ppc.c:3501 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:3098 +#: elf32-arm.c:4796 elf32-arm.c:6943 elf32-csky.c:3172 elf32-hppa.c:584 +#: elf32-m68hc1x.c:165 elf32-metag.c:1182 elf32-nios2.c:2204 elf64-ppc.c:3775 +#: elfnn-aarch64.c:3190 #, c-format msgid "%pB: cannot create stub entry %s" msgstr "%pB: ne peut créer l'entrée de l'ébauche %s" -#: elf32-arm.c:5957 +#: elf32-arm.c:5017 elf32-csky.c:3514 elf32-hppa.c:734 elf32-m68hc11.c:422 +#: elf32-m68hc12.c:542 elf32-metag.c:3347 elf32-nios2.c:2497 elf64-ppc.c:11315 +#: elfnn-aarch64.c:3259 +msgid "%F%P: Could not assign '%pA' to an output section. Retry without --enable-non-contiguous-regions.\n" +msgstr "%F%P: Impossible d'assigner « %pA » à une section de sortie. Réessayez sans --enable-non-contiguous-regions.\n" + +#: elf32-arm.c:5987 #, c-format msgid "%pB: special symbol `%s' only allowed for ARMv8-M architecture or later" msgstr "%pB: le symbole spécial « %s » est uniquement autorisé pour les architectures ARMv8-M ou ultérieures" -#: elf32-arm.c:5966 +#: elf32-arm.c:5996 #, c-format msgid "%pB: invalid special symbol `%s'; it must be a global or weak function symbol" msgstr "%pB: symbole spécial « %s » invalide; il doit être un symbole de fonction global ou faible" -#: elf32-arm.c:6005 +#: elf32-arm.c:6035 #, c-format msgid "%pB: invalid standard symbol `%s'; it must be a global or weak function symbol" msgstr "%pB: symbole standard « %s » invalide; il doit être un symbole de fonction global ou faible" -#: elf32-arm.c:6011 +#: elf32-arm.c:6041 #, c-format msgid "%pB: absent standard symbol `%s'" msgstr "%pB: symbole standard « %s » absent" -#: elf32-arm.c:6023 +#: elf32-arm.c:6053 #, c-format msgid "%pB: `%s' and its special symbol are in different sections" msgstr "%pB: « %s » est ses symboles spéciaux sont dans des sections différentes" -#: elf32-arm.c:6035 +#: elf32-arm.c:6065 #, c-format msgid "%pB: entry function `%s' not output" msgstr "%pB: fonction « %s » d'entrée par écrite" -#: elf32-arm.c:6042 +#: elf32-arm.c:6072 #, c-format msgid "%pB: entry function `%s' is empty" msgstr "%pB: la fonction « %s » d'entrée est vide" -#: elf32-arm.c:6171 +#: elf32-arm.c:6201 #, c-format msgid "%pB: --in-implib only supported for Secure Gateway import libraries" msgstr "%pB: --in-implib uniquement supporté pour les bibliothèques d'import Secure Gateway" -#: elf32-arm.c:6217 +#: elf32-arm.c:6250 #, c-format msgid "%pB: invalid import library entry: `%s'; symbol should be absolute, global and refer to Thumb functions" msgstr "%pB: entrée de bibliothèque d'importation invalide: « %s »; le symbole devrait être absolu, global et faire référence à des fonctions Thumb" -#: elf32-arm.c:6239 +#: elf32-arm.c:6272 #, c-format msgid "entry function `%s' disappeared from secure code" msgstr "la fonction d'entrée « %s » a disparu du code sûr" -#: elf32-arm.c:6263 +#: elf32-arm.c:6296 #, c-format msgid "`%s' refers to a non entry function" msgstr "« %s » fait référence à quelque chose qui n'est pas une fonction d'entrée" -#: elf32-arm.c:6278 +#: elf32-arm.c:6311 #, c-format msgid "%pB: visibility of symbol `%s' has changed" msgstr "%pB: la visibilité du symbole « %s » a changé" -#: elf32-arm.c:6287 +#: elf32-arm.c:6320 #, c-format msgid "%pB: incorrect size for symbol `%s'" msgstr "%pB: taille incorrecte pour le symbole « %s »" -#: elf32-arm.c:6306 +#: elf32-arm.c:6339 #, c-format msgid "offset of veneer for entry function `%s' not a multiple of its size" msgstr "le décalage du trampoline (aka veneer) pour la fonction d'entrée « %s » n'est pas un multiple de sa taille" -#: elf32-arm.c:6326 +#: elf32-arm.c:6359 msgid "new entry function(s) introduced but no output import library specified:" msgstr "une ou plusieurs nouvelles fonctions d'entrée spécifiées mais aucune bibliothèque d'import est spécifiée:" -#: elf32-arm.c:6334 +#: elf32-arm.c:6367 #, c-format msgid "start address of `%s' is different from previous link" msgstr "l'adresse de départ de « %s » est différente de celle de l'édition de liens précédente" -#: elf32-arm.c:7042 elf32-arm.c:7078 +#: elf32-arm.c:7076 elf32-arm.c:7111 #, c-format msgid "unable to find %s glue '%s' for '%s'" msgstr "incapable de repérer le liant %s « %s » pour « %s »" -#: elf32-arm.c:7793 +#: elf32-arm.c:7822 #, c-format msgid "%pB: BE8 images only valid in big-endian mode" msgstr "%pB: les images BE8 ne sont valables qu'en mode gros boutiste" #. Give a warning, but do as the user requests anyway. -#: elf32-arm.c:8024 +#: elf32-arm.c:8049 #, c-format msgid "%pB: warning: selected VFP11 erratum workaround is not necessary for target architecture" msgstr "%pB: attention: le palliatif VFP11 sélectionné n'est pas nécessaire avec l'architecture cible" -#: elf32-arm.c:8051 +#: elf32-arm.c:8076 #, c-format msgid "%pB: warning: selected STM32L4XX erratum workaround is not necessary for target architecture" msgstr "%pB: attention: le palliatif STM32L4XX sélectionné n'est pas nécessaire avec l'architecture cible" -#: elf32-arm.c:8588 elf32-arm.c:8608 elf32-arm.c:8674 elf32-arm.c:8693 +#: elf32-arm.c:8612 elf32-arm.c:8632 elf32-arm.c:8699 elf32-arm.c:8718 #, c-format msgid "%pB: unable to find %s veneer `%s'" msgstr "%pB: incapable de trouver le trampoline (veneer) « %s » pour %s" -#: elf32-arm.c:8900 +#: elf32-arm.c:8925 #, c-format msgid "%pB(%pA+%#x): error: multiple load detected in non-last IT block instruction: STM32L4XX veneer cannot be generated; use gcc option -mrestrict-it to generate only one instruction per IT block" msgstr "%pB(%pA+%#x): erreur: chargements multiples détectés dans un bloc d'instruction IT qui n'est pas le dernier: le trampoline (veneer) du STM32L4XX ne peut pas être généré; utilisez l'option -mrestrict-it de gcc pour générer seulement une instruction par bloc IT" -#: elf32-arm.c:9000 +#: elf32-arm.c:9023 #, c-format msgid "invalid TARGET2 relocation type '%s'" msgstr "type de réadressage TARGET2 « %s » invalide" #. FIXME: We ought to be able to generate thumb-1 PLT #. instructions... -#: elf32-arm.c:9802 +#: elf32-arm.c:9825 #, c-format msgid "%pB: warning: thumb-1 mode PLT generation not currently supported" msgstr "%pB: attention: génération de PLT dans le mode thumb-1 pas encore supportée" -#: elf32-arm.c:10106 elf32-arm.c:10148 +#: elf32-arm.c:10135 elf32-arm.c:10177 #, c-format msgid "%pB(%pA+%#): unexpected %s instruction '%#lx' in TLS trampoline" msgstr "%pB(%pA+%#): instruction %s « %lx » inattendue dans le trampoline TLS" -#: elf32-arm.c:10492 +#: elf32-arm.c:10521 msgid "shared object" msgstr "objet partagé" -#: elf32-arm.c:10495 +#: elf32-arm.c:10524 msgid "PIE executable" msgstr "exécutable PIE" -#: elf32-arm.c:10498 +#: elf32-arm.c:10527 #, c-format msgid "%pB: relocation %s against external or undefined symbol `%s' can not be used when making a %s; recompile with -fPIC" msgstr "%pB: le réadressage de %s vers le symbole externe ou non défini « %s » ne peut pas être utilisé en construisant un %s; recompilez avec -fPIC" -#: elf32-arm.c:10635 elf32-arm.c:11062 +#: elf32-arm.c:10664 elf32-arm.c:11091 #, c-format msgid "%pB: warning: %s BLX instruction targets %s function '%s'" msgstr "%pB: attention: instruction %s BLX vise la fonction %s « %s »." -#: elf32-arm.c:11975 elf32-arm.c:12001 +#: elf32-arm.c:12003 elf32-arm.c:12029 #, c-format msgid "%pB(%pA+%#): unexpected %s instruction '%#lx' referenced by TLS_GOTDESC" msgstr "%pB(%pA+%#): instruction %s '%#lx' inattendue référencée par TLS_GOTDESC" -#: elf32-arm.c:12047 elf32-csky.c:4853 elf32-m68k.c:3703 elf32-metag.c:1919 -#: elf32-nios2.c:4366 +#: elf32-arm.c:12075 elf32-csky.c:4746 elf32-m68k.c:3735 elf32-metag.c:1915 +#: elf32-nios2.c:4385 #, c-format msgid "%pB(%pA+%#): %s relocation not permitted in shared object" msgstr "%pB(%pA+%#): réadressage %s pas permis dans un objet partagé" -#: elf32-arm.c:12261 +#: elf32-arm.c:12289 #, c-format msgid "%pB(%pA+%#): only ADD or SUB instructions are allowed for ALU group relocations" msgstr "%pB(%pA+%#): seuls ADD ou SUB sont permis dans les réadressages du groupe ALU" -#: elf32-arm.c:12302 elf32-arm.c:12394 elf32-arm.c:12482 elf32-arm.c:12572 +#: elf32-arm.c:12330 elf32-arm.c:12422 elf32-arm.c:12510 elf32-arm.c:12600 #, c-format msgid "%pB(%pA+%#): overflow whilst splitting %# for group relocation %s" msgstr "%pB(%pA+%#): débordement en scindant %# pour le réadressage du groupe %s" -#: elf32-arm.c:13078 elf32-sh.c:3689 +#: elf32-arm.c:13232 elf32-sh.c:3571 #, c-format msgid "%pB(%pA+%#): %s relocation against SEC_MERGE section" msgstr "%pB(%pA+%#): %s réadressage vers une section SEC_MERGE" -#: elf32-arm.c:13191 elf32-m68k.c:3936 elf32-xtensa.c:2703 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:6534 +#: elf32-arm.c:13345 elf32-m68k.c:3968 elf32-xtensa.c:2761 +#: elfnn-aarch64.c:6829 #, c-format msgid "%pB(%pA+%#): %s used with TLS symbol %s" msgstr "%pB(%pA+%#): %s utilisé avec le symbole TLS %s" -#: elf32-arm.c:13193 elf32-m68k.c:3938 elf32-xtensa.c:2705 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:6536 +#: elf32-arm.c:13347 elf32-m68k.c:3970 elf32-xtensa.c:2763 +#: elfnn-aarch64.c:6831 #, c-format msgid "%pB(%pA+%#): %s used with non-TLS symbol %s" msgstr "%pB(%pA+%#): %s utilisé avec le symbole non-TLS %s" -#: elf32-arm.c:13276 elf32-tic6x.c:2708 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:6871 +#: elf32-arm.c:13430 elf32-tic6x.c:2649 elfnn-aarch64.c:7166 msgid "out of range" msgstr "hors limite" -#: elf32-arm.c:13280 elf32-nios2.c:4500 elf32-pru.c:933 elf32-tic6x.c:2712 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:6875 +#: elf32-arm.c:13434 elf32-nios2.c:4519 elf32-pru.c:936 elf32-tic6x.c:2653 +#: elfnn-aarch64.c:7170 msgid "unsupported relocation" msgstr "réadressage non supporté" -#: elf32-arm.c:13288 elf32-nios2.c:4510 elf32-pru.c:943 elf32-tic6x.c:2720 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:6883 +#: elf32-arm.c:13442 elf32-nios2.c:4529 elf32-pru.c:946 elf32-tic6x.c:2661 +#: elfnn-aarch64.c:7178 msgid "unknown error" msgstr "erreur inconnue" -#: elf32-arm.c:13764 +#: elf32-arm.c:13920 #, c-format msgid "warning: not setting interworking flag of %pB since it has already been specified as non-interworking" msgstr "attention: pas d'initialisation du fanion d'inter-réseautage de %pB puisqu'il a déjà été spécifié sans inter-réseautage" -#: elf32-arm.c:13768 +#: elf32-arm.c:13924 #, c-format msgid "warning: clearing the interworking flag of %pB due to outside request" msgstr "attention: mise à zéro du fanion d'inter-réseautage de %pB en raison d'une requête externe" -#: elf32-arm.c:13813 +#: elf32-arm.c:13969 #, c-format msgid "warning: clearing the interworking flag of %pB because non-interworking code in %pB has been linked with it" msgstr "attention: mise à zéro du fanion d'inter-réseautage %pB en raison du code sans inter-réseautage dans %pB lié avec lui" -#: elf32-arm.c:13900 +#: elf32-arm.c:14056 #, c-format msgid "%pB: unknown mandatory EABI object attribute %d" msgstr "%pB: l'attribut d'objet EABI obligatoire %d est inconnu" -#: elf32-arm.c:13908 +#: elf32-arm.c:14064 #, c-format msgid "warning: %pB: unknown EABI object attribute %d" msgstr "attention: %pB: l'attribut d'objet EABI %d est inconnu" -#: elf32-arm.c:14175 +#: elf32-arm.c:14364 #, c-format msgid "error: %pB: unknown CPU architecture" msgstr "erreur: %pB: architecture CPU inconnue" -#: elf32-arm.c:14213 elf32-nios2.c:2946 +#: elf32-arm.c:14402 elf32-nios2.c:2953 #, c-format msgid "error: %pB: conflicting CPU architectures %d/%d" msgstr "erreur: %pB: architectures CPU conflictuelles %d/%d" -#: elf32-arm.c:14310 +#: elf32-arm.c:14499 #, c-format msgid "Error: %pB has both the current and legacy Tag_MPextension_use attributes" msgstr "Erreur: %pB utilise les deux attributs Tag_MPextension_use actuel et hérité" -#: elf32-arm.c:14339 +#: elf32-arm.c:14528 #, c-format msgid "error: %pB uses VFP register arguments, %pB does not" msgstr "erreur: %pB passe les paramètres dans un registre VFP alors que %pB ne le fait pas" -#: elf32-arm.c:14497 +#: elf32-arm.c:14687 #, c-format msgid "error: %pB: unable to merge virtualization attributes with %pB" msgstr "erreur: %pB: impossible de fusionner les attributs de visualisation avec %pB" -#: elf32-arm.c:14523 +#: elf32-arm.c:14713 #, c-format msgid "error: %pB: conflicting architecture profiles %c/%c" msgstr "erreur: %pB: profils d'architecture conflictuels %c/%c" -#: elf32-arm.c:14662 +#: elf32-arm.c:14852 #, c-format msgid "warning: %pB: conflicting platform configuration" msgstr "attention: %pB: configuration de plateforme conflictuelle" -#: elf32-arm.c:14671 +#: elf32-arm.c:14861 #, c-format msgid "error: %pB: conflicting use of R9" msgstr "erreur: %pB: utilisation conflictuelle de R9" -#: elf32-arm.c:14683 +#: elf32-arm.c:14873 #, c-format msgid "error: %pB: SB relative addressing conflicts with use of R9" msgstr "erreur: %pB: adressage relatif SB entre en conflit avec l'utilisation de R9" -#: elf32-arm.c:14696 +#: elf32-arm.c:14886 #, c-format msgid "warning: %pB uses %u-byte wchar_t yet the output is to use %u-byte wchar_t; use of wchar_t values across objects may fail" msgstr "attention: %pB utilise des wchar_t de %u octets alors que la sortie doit utiliser des wchar_t de %u octets. L'utilisation de wchar_t entre objets peu échouer" -#: elf32-arm.c:14727 +#: elf32-arm.c:14917 #, c-format msgid "warning: %pB uses %s enums yet the output is to use %s enums; use of enum values across objects may fail" msgstr "attention: %pB utilise des enums %s alors que la sortie doit utiliser des enums %s. L'utilisation des valeurs enum entre objets peu échouer" -#: elf32-arm.c:14739 +#: elf32-arm.c:14929 #, c-format msgid "error: %pB uses iWMMXt register arguments, %pB does not" msgstr "erreur: %pB passe les paramètres dans le registre iWMMXt contrairement à %pB" -#: elf32-arm.c:14756 +#: elf32-arm.c:14946 #, c-format msgid "error: fp16 format mismatch between %pB and %pB" msgstr "erreur: désaccord de format fp16 entre %pB et %pB" -#: elf32-arm.c:14792 +#: elf32-arm.c:14982 #, c-format msgid "%pB has both the current and legacy Tag_MPextension_use attributes" msgstr "%pB utilise les deux attributs Tag_MPextension_use actuel et hérité" @@ -1688,345 +1792,330 @@ #. Ignore init flag - it may not be set, despite the flags field containing valid data. #. Ignore init flag - it may not be set, despite the flags field #. containing valid data. -#: elf32-arm.c:14879 elf32-bfin.c:4740 elf32-cris.c:3908 elf32-m68hc1x.c:1410 -#: elf32-m68k.c:1201 elf32-score.c:4000 elf32-score7.c:3805 elf32-vax.c:537 -#: elf32-xgate.c:494 elfxx-mips.c:16037 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:7037 +#: elf32-arm.c:15069 elf32-bfin.c:4719 elf32-cris.c:3861 elf32-m68hc1x.c:1416 +#: elf32-m68k.c:1267 elf32-score.c:4000 elf32-score7.c:3805 elf32-vax.c:537 +#: elf32-xgate.c:494 elfxx-mips.c:16199 elfnn-aarch64.c:7332 #, c-format msgid "private flags = %lx:" msgstr "fanions privés = %lx" -#: elf32-arm.c:14888 +#: elf32-arm.c:15078 #, c-format msgid " [interworking enabled]" msgstr " [inter-réseautage autorisé]" -#: elf32-arm.c:14896 +#: elf32-arm.c:15086 #, c-format msgid " [VFP float format]" msgstr " [format flottant VFP]" -#: elf32-arm.c:14898 +#: elf32-arm.c:15088 #, c-format msgid " [Maverick float format]" msgstr " [format flottant Maverick]" -#: elf32-arm.c:14900 +#: elf32-arm.c:15090 #, c-format msgid " [FPA float format]" msgstr " [format flottant FPA]" -#: elf32-arm.c:14903 +#: elf32-arm.c:15093 #, c-format msgid " [floats passed in float registers]" msgstr " [valeurs en virgule flottante passées dans des registres de valeurs en virgule flottante]" -#: elf32-arm.c:14906 elf32-arm.c:14992 +#: elf32-arm.c:15096 elf32-arm.c:15182 #, c-format msgid " [position independent]" msgstr " [position indépendante]" -#: elf32-arm.c:14909 +#: elf32-arm.c:15099 #, c-format msgid " [new ABI]" msgstr " [nouvel ABI]" -#: elf32-arm.c:14912 +#: elf32-arm.c:15102 #, c-format msgid " [old ABI]" msgstr " [ancien ABI]" -#: elf32-arm.c:14915 +#: elf32-arm.c:15105 #, c-format msgid " [software FP]" msgstr " [virgule flottante logiciel]" -#: elf32-arm.c:14924 +#: elf32-arm.c:15114 #, c-format msgid " [Version1 EABI]" msgstr " [Version1 EABI]" -#: elf32-arm.c:14927 elf32-arm.c:14938 +#: elf32-arm.c:15117 elf32-arm.c:15128 #, c-format msgid " [sorted symbol table]" msgstr " [table des symboles triés]" -#: elf32-arm.c:14929 elf32-arm.c:14940 +#: elf32-arm.c:15119 elf32-arm.c:15130 #, c-format msgid " [unsorted symbol table]" msgstr " [table des symboles non triés]" -#: elf32-arm.c:14935 +#: elf32-arm.c:15125 #, c-format msgid " [Version2 EABI]" msgstr " [Version2 EABI]" -#: elf32-arm.c:14943 +#: elf32-arm.c:15133 #, c-format msgid " [dynamic symbols use segment index]" msgstr " [symboles dynamiques utilisent un index de segment]" -#: elf32-arm.c:14946 +#: elf32-arm.c:15136 #, c-format msgid " [mapping symbols precede others]" msgstr " [mapping de symboles précèdes les autres]" -#: elf32-arm.c:14953 +#: elf32-arm.c:15143 #, c-format msgid " [Version3 EABI]" msgstr " [Version3 EABI]" -#: elf32-arm.c:14957 +#: elf32-arm.c:15147 #, c-format msgid " [Version4 EABI]" msgstr " [Version4 EABI]" -#: elf32-arm.c:14961 +#: elf32-arm.c:15151 #, c-format msgid " [Version5 EABI]" msgstr " [Version5 EABI]" -#: elf32-arm.c:14964 +#: elf32-arm.c:15154 #, c-format msgid " [soft-float ABI]" msgstr " [soft-float ABI]" -#: elf32-arm.c:14967 +#: elf32-arm.c:15157 #, c-format msgid " [hard-float ABI]" msgstr " [hard-float ABI]" -#: elf32-arm.c:14973 +#: elf32-arm.c:15163 #, c-format msgid " [BE8]" msgstr " [BE8]" -#: elf32-arm.c:14976 +#: elf32-arm.c:15166 #, c-format msgid " [LE8]" msgstr " [LE8]" -#: elf32-arm.c:14982 +#: elf32-arm.c:15172 #, c-format msgid " " msgstr " " -#: elf32-arm.c:14989 +#: elf32-arm.c:15179 #, c-format msgid " [relocatable executable]" msgstr " [exécutables relocalisés]" -#: elf32-arm.c:14995 +#: elf32-arm.c:15185 #, c-format msgid " [FDPIC ABI supplement]" msgstr " [supplément ABI FDPIC]" -#: elf32-arm.c:15000 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:7040 +#: elf32-arm.c:15190 elfnn-aarch64.c:7335 #, c-format msgid "" msgstr "" -#: elf32-arm.c:15117 elf32-i386.c:1529 elf32-s390.c:960 elf32-tic6x.c:2783 -#: elf32-tilepro.c:1479 elf32-xtensa.c:1029 elf64-s390.c:882 -#: elf64-x86-64.c:1865 elfxx-sparc.c:1422 elfxx-tilegx.c:1700 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:7329 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:539 +#: elf32-arm.c:15307 elf32-i386.c:1524 elf32-s390.c:925 elf32-tic6x.c:2724 +#: elf32-tilepro.c:1443 elf32-xtensa.c:1093 elf64-s390.c:847 +#: elf64-x86-64.c:1902 elfxx-sparc.c:1386 elfxx-tilegx.c:1664 +#: elfnn-aarch64.c:7606 elfnn-riscv.c:525 #, c-format msgid "%pB: bad symbol index: %d" msgstr "%pB: symbole index erroné: %d" -#: elf32-arm.c:15508 +#: elf32-arm.c:15696 #, c-format msgid "FDPIC does not yet support %s relocation to become dynamic for executable" msgstr "FDPIC ne supporte pas encore le réadressage %s pour devenir dynamique à l'exécution" -#: elf32-arm.c:16558 elf32-csky.c:1931 elf32-hppa.c:2090 elf32-lm32.c:1998 -#: elf32-m32r.c:2110 elf32-metag.c:2797 elf32-nds32.c:4330 elf32-or1k.c:2858 -#: elf32-ppc.c:5469 elf32-s390.c:1854 elf32-sh.c:2975 elf32-tic6x.c:3252 -#: elf32-tilepro.c:2245 elf64-ppc.c:9023 elf64-s390.c:1791 elfxx-sparc.c:2435 -#: elfxx-tilegx.c:2491 elfxx-x86.c:571 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:8677 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:1142 -#, c-format -msgid "%pB: dynamic relocation against `%pT' in read-only section `%pA'\n" -msgstr "%pB: réadressage dynamique sur « %pT » dans la section en lecture seule « %pA »\n" - -#: elf32-arm.c:16854 +#: elf32-arm.c:16939 #, c-format msgid "errors encountered processing file %pB" msgstr "erreurs rencontrées pendant le traitement du fichier %pB" -#: elf32-arm.c:17301 elflink.c:12556 elflink.c:12603 +#: elf32-arm.c:17326 elflink.c:12818 elflink.c:12865 #, c-format msgid "could not find section %s" msgstr "ne peut repérer la section %s" -#: elf32-arm.c:18512 +#: elf32-arm.c:18550 #, c-format msgid "%pB: error: Cortex-A8 erratum stub is allocated in unsafe location" msgstr "%pB: erreur: l'ébauche d'erratum du Cortex A8 est allouée à un emplacement peu sûr" #. There's not much we can do apart from complain if this #. happens. -#: elf32-arm.c:18539 +#: elf32-arm.c:18577 #, c-format msgid "%pB: error: Cortex-A8 erratum stub out of range (input file too large)" msgstr "%pB: erreur: l'ébauche d'erratum du Cortex A8 est hors limite (fichier d'entrée trop grand)" -#: elf32-arm.c:19366 elf32-arm.c:19388 +#: elf32-arm.c:19404 elf32-arm.c:19426 #, c-format msgid "%pB: error: VFP11 veneer out of range" msgstr "%pB: erreur: vernis VFP11 hors limite" -#: elf32-arm.c:19439 +#: elf32-arm.c:19477 #, c-format msgid "%pB(%#): error: cannot create STM32L4XX veneer; jump out of range by % bytes; cannot encode branch instruction" msgstr "%pB(%#): erreur: impossible de créer le trampoline (veneer) du STM32L4XX; saut hors de portée pour % octets; impossible d'encoder l'instruction de branchement" -#: elf32-arm.c:19478 +#: elf32-arm.c:19516 #, c-format msgid "%pB: error: cannot create STM32L4XX veneer" msgstr "%pB: erreur: impossible de créer le trampoline (veneer) du STM32L4XX." -#: elf32-arm.c:20567 +#: elf32-arm.c:20600 #, c-format msgid "error: %pB is already in final BE8 format" msgstr "erreur: %pB est déjà au format final BE8" -#: elf32-arm.c:20643 +#: elf32-arm.c:20676 #, c-format msgid "error: source object %pB has EABI version %d, but target %pB has EABI version %d" msgstr "erreur: l'objet source %pB a l'EABI version %d alors que la cible %pB a l'EABI version %d" -#: elf32-arm.c:20658 +#: elf32-arm.c:20691 #, c-format msgid "error: %pB is compiled for APCS-%d, whereas target %pB uses APCS-%d" msgstr "erreur: %pB compilé pour APCS-%d alors que la cible %pB utilise APCS-%d" -#: elf32-arm.c:20668 +#: elf32-arm.c:20701 #, c-format msgid "error: %pB passes floats in float registers, whereas %pB passes them in integer registers" msgstr "erreur: %pB passage de valeurs en virgule flottante dans les registres FP alors que %pB les passe dans les registres entiers" -#: elf32-arm.c:20672 +#: elf32-arm.c:20705 #, c-format msgid "error: %pB passes floats in integer registers, whereas %pB passes them in float registers" msgstr "erreur: %pB passage de valeurs en virgule flottante dans les registres entiers alors que %pB les passe dans les registres FP" -#: elf32-arm.c:20682 elf32-arm.c:20686 elf32-arm.c:20696 +#: elf32-arm.c:20715 elf32-arm.c:20719 elf32-arm.c:20729 #, c-format msgid "error: %pB uses %s instructions, whereas %pB does not" msgstr "erreur: %pB utilise les instructions %s alors que %pB ne les utilise pas" -#: elf32-arm.c:20700 +#: elf32-arm.c:20733 #, c-format msgid "error: %pB does not use %s instructions, whereas %pB does" msgstr "erreur: %pB n'utilise pas les instructions %s alors que %pB les utilise" -#: elf32-arm.c:20719 +#: elf32-arm.c:20752 #, c-format msgid "error: %pB uses software FP, whereas %pB uses hardware FP" msgstr "erreur: %pB utilise le logiciel pour virgule flottante alors que %pB utilise le matériel pour virgule flottante" -#: elf32-arm.c:20723 +#: elf32-arm.c:20756 #, c-format msgid "error: %pB uses hardware FP, whereas %pB uses software FP" msgstr "erreur: %pB utilise le matériel pour virgule flottante alors que %pB utilise le logiciel pour virgule flottante" -#: elf32-arm.c:20737 +#: elf32-arm.c:20770 #, c-format msgid "warning: %pB supports interworking, whereas %pB does not" msgstr "attention: %pB supporte l'inter-réseautage, contrairement à %pB" -#: elf32-arm.c:20743 +#: elf32-arm.c:20776 #, c-format msgid "warning: %pB does not support interworking, whereas %pB does" msgstr "attention: %pB ne supporte pas l'inter-réseautage, contrairement à %pB" -#: elf32-avr.c:1518 elf32-bfin.c:3135 elf32-cris.c:2041 elf32-epiphany.c:577 -#: elf32-fr30.c:602 elf32-frv.c:4057 elf32-ft32.c:502 elf32-ip2k.c:1493 -#: elf32-iq2000.c:701 elf32-m32c.c:632 elf32-mep.c:534 elf32-metag.c:1998 -#: elf32-moxie.c:296 elf32-msp430.c:1366 elf32-mt.c:406 elf32-or1k.c:1767 -#: elf32-tilepro.c:3514 elf32-v850.c:2299 elf32-visium.c:689 -#: elf32-xstormy16.c:939 elf64-mmix.c:1549 elfxx-tilegx.c:3878 +#: elf32-avr.c:1516 elf32-bfin.c:3134 elf32-cris.c:2041 elf32-epiphany.c:573 +#: elf32-fr30.c:602 elf32-frv.c:4056 elf32-ft32.c:502 elf32-ip2k.c:1488 +#: elf32-iq2000.c:699 elf32-m32c.c:632 elf32-mep.c:534 elf32-metag.c:1994 +#: elf32-moxie.c:296 elf32-msp430.c:1375 elf32-mt.c:406 elf32-or1k.c:1825 +#: elf32-tilepro.c:3388 elf32-v850.c:2298 elf32-visium.c:688 +#: elf32-xstormy16.c:937 elf64-bpf.c:521 elf64-mmix.c:1549 elfxx-tilegx.c:3752 msgid "internal error: dangerous relocation" msgstr "erreur interne: réadressage dangereux" -#: elf32-avr.c:3327 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:3126 +#: elf32-avr.c:3327 elfnn-aarch64.c:3221 #, c-format msgid "cannot create stub entry %s" msgstr "ne peut créer l'entrée d'ébauche %s" -#: elf32-bfin.c:106 elf32-bfin.c:362 +#: elf32-bfin.c:107 elf32-bfin.c:363 msgid "relocation should be even number" msgstr "le réadressage devrait être un nombre paire" -#: elf32-bfin.c:1585 +#: elf32-bfin.c:1584 #, c-format msgid "%pB(%pA+%#): unresolvable relocation against symbol `%s'" msgstr "%pB(%pA+%#): réadressage sans solution vers le symbole « %s »" -#: elf32-bfin.c:1617 elf32-i386.c:3449 elf32-m68k.c:3976 elf32-s390.c:3269 -#: elf64-s390.c:3219 elf64-x86-64.c:3896 +#: elf32-bfin.c:1616 elf32-i386.c:3443 elf32-m68k.c:4008 elf32-s390.c:3140 +#: elf64-s390.c:3089 elf64-x86-64.c:4112 #, c-format msgid "%pB(%pA+%#): reloc against `%s': error %d" msgstr "%pB(%pA+%#): réadressage sur « %s »: erreur %d" -#: elf32-bfin.c:2638 +#: elf32-bfin.c:2641 #, c-format msgid "%pB: relocation at `%pA+%#' references symbol `%s' with nonzero addend" msgstr "%pB: réadressage à « %pA+%# » fait référence au symbole « %s » avec un opérande non nul" -#: elf32-bfin.c:2655 +#: elf32-bfin.c:2658 msgid "relocation references symbol not defined in the module" msgstr "le réadressage fait référence à un symbole non défini dans le module" -#: elf32-bfin.c:2752 +#: elf32-bfin.c:2755 msgid "R_BFIN_FUNCDESC references dynamic symbol with nonzero addend" msgstr "R_BFIN_FUNCDESC fait référence à un symbole dynamique avec un opérande non nul" -#: elf32-bfin.c:2793 elf32-bfin.c:2916 +#: elf32-bfin.c:2795 elf32-bfin.c:2916 msgid "cannot emit fixups in read-only section" msgstr "impossible d'apporter des corrections dans une section en lecture seule" -#: elf32-bfin.c:2824 elf32-bfin.c:2954 elf32-lm32.c:1049 elf32-sh.c:4511 +#: elf32-bfin.c:2825 elf32-bfin.c:2953 elf32-lm32.c:1006 elf32-sh.c:4389 msgid "cannot emit dynamic relocations in read-only section" msgstr "impossible d'éditer les réadressages dynamiques dans une section en lecture seule" -#: elf32-bfin.c:2874 +#: elf32-bfin.c:2875 msgid "R_BFIN_FUNCDESC_VALUE references dynamic symbol with nonzero addend" msgstr "R_BFIN_FUNCDESC_VALUE fait référence à un symbole dynamique avec un opérande non nul" -#: elf32-bfin.c:3039 +#: elf32-bfin.c:3038 msgid "relocations between different segments are not supported" msgstr "les réadressages entre segments différents ne sont pas supportés" -#: elf32-bfin.c:3040 +#: elf32-bfin.c:3039 msgid "warning: relocation references a different segment" msgstr "attention: réadressage fait référence à un segment différent" -#: elf32-bfin.c:4787 elf32-frv.c:6603 +#: elf32-bfin.c:4770 elf32-frv.c:6584 #, c-format msgid "%pB: cannot link non-fdpic object file into fdpic executable" msgstr "%pB: ne peut lier un fichier objet non fdpic dans un exécutable fdpic" -#: elf32-bfin.c:4791 elf32-frv.c:6607 +#: elf32-bfin.c:4774 elf32-frv.c:6588 #, c-format msgid "%pB: cannot link fdpic object file into non-fdpic executable" msgstr "%pB: ne peut lier un fichier objet fdpic dans un exécutable non fdpic" -#: elf32-bfin.c:4941 +#: elf32-bfin.c:4924 #, c-format msgid "*** check this relocation %s" msgstr "*** vérifiez ce réadressage %s" -#: elf32-bfin.c:5057 +#: elf32-bfin.c:5040 msgid "the bfin target does not currently support the generation of copy relocations" msgstr "la cible bfin ne supporte actuellement pas la génération de réadressages copiés" -#: elf32-bfin.c:5351 elf32-cr16.c:2803 elf32-m68k.c:4390 +#: elf32-bfin.c:5334 elf32-cr16.c:2731 elf32-m68k.c:4422 msgid "unsupported relocation type" msgstr "type de réadressage non supporté" @@ -2046,16 +2135,16 @@ msgstr "%pB, section %pA: pas de PLT pour réadresser %s sur le symbole « %s »" #: elf32-cris.c:1193 elf32-cris.c:1326 elf32-cris.c:1591 elf32-cris.c:1674 -#: elf32-cris.c:1827 elf32-tic6x.c:2619 +#: elf32-cris.c:1827 elf32-tic6x.c:2560 msgid "[whose name is lost]" msgstr "[dont le nom est perdu]" -#: elf32-cris.c:1311 elf32-tic6x.c:2603 +#: elf32-cris.c:1311 elf32-tic6x.c:2544 #, c-format msgid "%pB, section %pA: relocation %s with non-zero addend % against local symbol" msgstr "%pB, section %pA: réadressage de %s avec un opérande non nul % sur le symbole local" -#: elf32-cris.c:1320 elf32-cris.c:1668 elf32-cris.c:1821 elf32-tic6x.c:2612 +#: elf32-cris.c:1320 elf32-cris.c:1668 elf32-cris.c:1821 elf32-tic6x.c:2553 #, c-format msgid "%pB, section %pA: relocation %s with non-zero addend % against symbol `%s'" msgstr "%pB, section %pA: réadressage de %s avec un opérande non nul % sur le symbole « %s »" @@ -2113,71 +2202,71 @@ msgid "%pB, section %pA: relocation %s should not be used in a shared object; recompile with -fPIC" msgstr "%pB, section %pA: réadressage de %s ne devrait pas être utilisé dans un objet partagé; recompilez avec -fPIC" -#: elf32-cris.c:3747 +#: elf32-cris.c:3700 #, c-format msgid "%pB, section `%pA', to symbol `%s': relocation %s should not be used in a shared object; recompile with -fPIC" msgstr "%pB, section « %pA », vers le symbole « %s »: réadressage de %s ne devrait pas être utilisé dans un objet partagé; recompilez avec -fPIC" -#: elf32-cris.c:3860 +#: elf32-cris.c:3812 msgid "unexpected machine number" msgstr "numéro de machine inattendu" -#: elf32-cris.c:3911 +#: elf32-cris.c:3864 #, c-format msgid " [symbols have a _ prefix]" msgstr " [symboles sont préfixés par «  _  »]" -#: elf32-cris.c:3914 +#: elf32-cris.c:3867 #, c-format msgid " [v10 and v32]" msgstr " [v10 et v32]" -#: elf32-cris.c:3917 +#: elf32-cris.c:3870 #, c-format msgid " [v32]" msgstr " [v32]" -#: elf32-cris.c:3961 +#: elf32-cris.c:3914 #, c-format msgid "%pB: uses _-prefixed symbols, but writing file with non-prefixed symbols" msgstr "%pB: utilise des symboles préfixés par _ mais écrits les symboles sans préfixes dans le fichier" -#: elf32-cris.c:3962 +#: elf32-cris.c:3915 #, c-format msgid "%pB: uses non-prefixed symbols, but writing file with _-prefixed symbols" msgstr "%pB: utilise des symboles sans préfixe mais ajoute le préfixe _ aux symboles dans le fichier" -#: elf32-cris.c:3981 +#: elf32-cris.c:3934 #, c-format msgid "%pB contains CRIS v32 code, incompatible with previous objects" msgstr "%pB contient du code CRIS v32 incompatible avec les objets précédents" -#: elf32-cris.c:3983 +#: elf32-cris.c:3936 #, c-format msgid "%pB contains non-CRIS-v32 code, incompatible with previous objects" msgstr "%pB contient du code non CRIS v32 incompatible avec les objets précédents" -#: elf32-csky.c:2066 +#: elf32-csky.c:2022 msgid "GOT table size out of range" msgstr "taille de la table GOT hors limites" -#: elf32-csky.c:2917 +#: elf32-csky.c:2802 #, c-format msgid "warning: unrecognized arch eflag '%#lx'" msgstr "avertissement: eflag arch « %#lx » non reconnu" -#: elf32-csky.c:2977 +#: elf32-csky.c:2862 #, c-format msgid "%pB: machine flag conflict with target" msgstr "%pB: fanion machine en conflit avec la cible" -#: elf32-csky.c:2990 +#: elf32-csky.c:2875 #, c-format msgid "warning: file %pB's arch flag ck%s conflicts with target ck%s, using ck%s" msgstr "avertissement: le fanion d'archive ck%2$s du fichier %1$pB est en conflit avec la cible ck%3$s, utilise ck%4$s" #. The r_type is error, not support it. -#: elf32-csky.c:4225 elf32-i386.c:351 +#: elf32-csky.c:4118 elf32-i386.c:350 #, c-format msgid "%pB: unsupported relocation type: %#x" msgstr "%pB: type de réadressage non supporté: %#x" @@ -2193,7 +2282,7 @@ msgstr "saut (PC rel26) à la section (%s) n'est pas supporté" #. Only if it's not an unresolved symbol. -#: elf32-epiphany.c:573 elf32-ip2k.c:1489 +#: elf32-epiphany.c:569 elf32-ip2k.c:1484 msgid "unsupported relocation between data/insn address spaces" msgstr "réadressage non supporté entre les espaces d'adresses data/insn" @@ -2201,96 +2290,96 @@ msgid "relocation requires zero addend" msgstr "le réadressage exige un opérande nul" -#: elf32-frv.c:2829 +#: elf32-frv.c:2832 #, c-format msgid "%H: relocation to `%s+%v' may have caused the error above\n" msgstr "%H: le réadressage en « %s+%v » peut avoir causé le problème ci-dessus\n" -#: elf32-frv.c:2846 +#: elf32-frv.c:2849 msgid "%H: relocation references symbol not defined in the module\n" msgstr "%H: le réadressage fait référence à un symbole non défini dans le module\n" -#: elf32-frv.c:2922 +#: elf32-frv.c:2925 msgid "%H: R_FRV_GETTLSOFF not applied to a call instruction\n" msgstr "%H: R_FRV_GETTLSOFF pas appliqué à une instruction d'appel\n" -#: elf32-frv.c:2963 +#: elf32-frv.c:2966 msgid "%H: R_FRV_GOTTLSDESC12 not applied to an lddi instruction\n" msgstr "%H: R_FRV_GOTTLSDESC12 pas appliqué à une instruction lddi\n" -#: elf32-frv.c:3034 +#: elf32-frv.c:3037 msgid "%H: R_FRV_GOTTLSDESCHI not applied to a sethi instruction\n" msgstr "%H: R_FRV_GOTTLSDESCHI pas appliqué à une instruction sethi\n" -#: elf32-frv.c:3071 +#: elf32-frv.c:3074 msgid "%H: R_FRV_GOTTLSDESCLO not applied to a setlo or setlos instruction\n" msgstr "%H: R_FRV_GOTTLSDESCLO pas appliqué à une instruction setlo ou setlos\n" -#: elf32-frv.c:3118 +#: elf32-frv.c:3121 msgid "%H: R_FRV_TLSDESC_RELAX not applied to an ldd instruction\n" msgstr "%H: R_FRV_TLSDESC_RELAX pas appliqué à une instruction ldd\n" -#: elf32-frv.c:3202 +#: elf32-frv.c:3205 msgid "%H: R_FRV_GETTLSOFF_RELAX not applied to a calll instruction\n" msgstr "%H: R_FRV_GETTLSOFF_RELAX pas appliqué à une instruction calll\n" -#: elf32-frv.c:3256 +#: elf32-frv.c:3259 msgid "%H: R_FRV_GOTTLSOFF12 not applied to an ldi instruction\n" msgstr "%H: R_FRV_GOTTLSOFF12 pas appliqué à une instruction ldi\n" -#: elf32-frv.c:3286 +#: elf32-frv.c:3289 msgid "%H: R_FRV_GOTTLSOFFHI not applied to a sethi instruction\n" msgstr "%H: R_FRV_GOTTLSOFFHI pas appliqué à une instruction sethi\n" -#: elf32-frv.c:3315 +#: elf32-frv.c:3318 msgid "%H: R_FRV_GOTTLSOFFLO not applied to a setlo or setlos instruction\n" msgstr "%H: R_FRV_GOTTLSOFFLO pas appliqué à une instruction setlo ou setlos\n" -#: elf32-frv.c:3345 +#: elf32-frv.c:3348 msgid "%H: R_FRV_TLSOFF_RELAX not applied to an ld instruction\n" msgstr "%H: R_FRV_TLSOFF_RELAX pas appliqué à une instruction ld\n" -#: elf32-frv.c:3390 +#: elf32-frv.c:3393 msgid "%H: R_FRV_TLSMOFFHI not applied to a sethi instruction\n" msgstr "%H: R_FRV_TLSMOFFHI pas appliqué à une instruction sethi\n" -#: elf32-frv.c:3417 +#: elf32-frv.c:3420 msgid "R_FRV_TLSMOFFLO not applied to a setlo or setlos instruction\n" msgstr "R_FRV_TLSMOFFLO pas appliqué à une instruction setlo ou setlos\n" -#: elf32-frv.c:3538 elf32-frv.c:3660 +#: elf32-frv.c:3541 elf32-frv.c:3661 msgid "%H: %s references dynamic symbol with nonzero addend\n" msgstr "%H: %s fait référence à un symbole dynamique avec un opérande non nul\n" -#: elf32-frv.c:3580 elf32-frv.c:3703 +#: elf32-frv.c:3582 elf32-frv.c:3703 msgid "%H: cannot emit fixups in read-only section\n" msgstr "%H: impossible d'apporter des corrections dans une section en lecture seule\n" -#: elf32-frv.c:3611 elf32-frv.c:3746 +#: elf32-frv.c:3612 elf32-frv.c:3745 msgid "%H: cannot emit dynamic relocations in read-only section\n" msgstr "%H: impossible d'éditer les réadressages dynamiques dans une section en lecture seule\n" -#: elf32-frv.c:3918 +#: elf32-frv.c:3917 #, c-format msgid "%H: reloc against `%s' references a different segment\n" msgstr "%H: le réadressage sur « %s » fait référence à un segment différent\n" -#: elf32-frv.c:4069 +#: elf32-frv.c:4068 #, c-format msgid "%H: reloc against `%s': %s\n" msgstr "%H: réadressage sur « %s »: %s\n" -#: elf32-frv.c:6514 +#: elf32-frv.c:6495 #, c-format msgid "%pB: compiled with %s and linked with modules that use non-pic relocations" msgstr "%pB: compilé avec %s et lié avec les modules qui utilisent le réadressage non PIC" -#: elf32-frv.c:6568 elf32-iq2000.c:832 elf32-m32c.c:876 +#: elf32-frv.c:6549 elf32-iq2000.c:830 elf32-m32c.c:876 #, c-format msgid "%pB: compiled with %s and linked with modules compiled with %s" msgstr "%pB: compilé avec %s et lié avec les modules compilés avec %s" -#: elf32-frv.c:6581 +#: elf32-frv.c:6562 #, c-format msgid "%pB: uses different unknown e_flags (%#x) fields than previous modules (%#x)" msgstr "%pB: utilise différents champs e_flags (%#x) de ceux des modules précédents (%#x)" @@ -2300,139 +2389,142 @@ msgid "%pB: relocations in generic ELF (EM: %d)" msgstr "%pB: réadressages en format ELF générique (EM: %d)" -#: elf32-hppa.c:834 elf32-hppa.c:3511 +#: elf32-hppa.c:763 elf32-hppa.c:844 elf64-ppc.c:11859 +msgid "%F%P: Could not assign %pA to an output section. Retry without --enable-non-contiguous-regions.\n" +msgstr "%F%P: Impossible d'assigner %pA à une section de sortie. Réessayez sans --enable-non-contiguous-regions.\n" + +#: elf32-hppa.c:865 elf32-hppa.c:3407 #, c-format msgid "%pB(%pA+%#): cannot reach %s, recompile with -ffunction-sections" msgstr "%pB(%pA+%#): ne peut atteindre %s, recompilez avec -ffunction-sections" -#: elf32-hppa.c:1248 +#: elf32-hppa.c:1243 #, c-format msgid "%pB: relocation %s can not be used when making a shared object; recompile with -fPIC" msgstr "%pB: réadressage de %s ne peut être utilisé lors de la création d'un objet partagé; recompilez avec -fPIC" -#: elf32-hppa.c:2688 +#: elf32-hppa.c:2584 #, c-format msgid "%pB: duplicate export stub %s" msgstr "%pB: ébauche d'exportation en double %s" -#: elf32-hppa.c:3344 +#: elf32-hppa.c:3240 #, c-format msgid "%pB(%pA+%#): %s fixup for insn %#x is not supported in a non-shared link" msgstr "%pB(%pA+%#): correction %s pour insn %#x n'est pas supporté dans un lien non partagé" -#: elf32-hppa.c:4140 +#: elf32-hppa.c:4036 #, c-format msgid "%s has both normal and TLS relocs" msgstr "%s a, à la fois, des réadressages normaux et TLS" -#: elf32-hppa.c:4158 +#: elf32-hppa.c:4054 #, c-format msgid "%pB:%s has both normal and TLS relocs" msgstr "%pB:%s a, à la fois, des réadressages normaux et TLS" -#: elf32-hppa.c:4217 +#: elf32-hppa.c:4113 #, c-format msgid "%pB(%pA+%#): cannot handle %s for %s" msgstr "%pB(%pA+%#): ne sait pas traiter %s pour %s" -#: elf32-hppa.c:4521 +#: elf32-hppa.c:4417 msgid ".got section not immediately after .plt section" msgstr "section .got pas immédiatement après la section .plt" -#: elf32-i386.c:1178 elf64-x86-64.c:1377 +#: elf32-i386.c:1169 elf64-x86-64.c:1382 #, c-format msgid "%pB: TLS transition from %s to %s against `%s' at %# in section `%pA' failed" msgstr "%pB: Échec de la transition TLS de %s vers %s sur « %s » à %# dans la section « %pA »" -#: elf32-i386.c:1269 +#: elf32-i386.c:1272 #, c-format msgid "%pB: direct GOT relocation R_386_GOT32X against `%s' without base register can not be used when making a shared object" msgstr "%pB: le réadressage GOT direct R_386_GOT32X sur le symbole « %s » sans registre de base ne peut pas être utilisé lors de la création d'un objet partagé" -#: elf32-i386.c:1726 elf32-s390.c:1188 elf32-sh.c:5662 elf32-tilepro.c:1592 -#: elf32-xtensa.c:1203 elf64-s390.c:1120 elfxx-sparc.c:1591 -#: elfxx-tilegx.c:1805 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:451 +#: elf32-i386.c:1721 elf32-s390.c:1153 elf32-sh.c:5494 elf32-tilepro.c:1556 +#: elf32-xtensa.c:1265 elf64-s390.c:1085 elfxx-sparc.c:1555 +#: elfxx-tilegx.c:1769 elfnn-riscv.c:437 #, c-format msgid "%pB: `%s' accessed both as normal and thread local symbol" msgstr "%pB: « %s » accédé à la fois comme symbole normal et comme symbole locale au thread" -#: elf32-i386.c:1798 +#: elf32-i386.c:1793 #, c-format msgid "%pB: unsupported non-PIC call to IFUNC `%s'" msgstr "%pB: appel non-PIC non supporté vers IFUNC « %s »" -#: elf32-i386.c:2379 elf64-x86-64.c:2670 +#: elf32-i386.c:2373 elf64-x86-64.c:2721 #, c-format msgid "%pB: relocation %s against STT_GNU_IFUNC symbol `%s' isn't supported" msgstr "%pB: le réadressage %s sur le symbole STT_GNU_IFUNC « %s » n'est pas supporté" -#: elf32-i386.c:2412 elf32-i386.c:3660 elf32-i386.c:3801 elf64-x86-64.c:2727 -#: elf64-x86-64.c:4069 elf64-x86-64.c:4225 +#: elf32-i386.c:2406 elf32-i386.c:3654 elf32-i386.c:3795 elf64-x86-64.c:2778 +#: elf64-x86-64.c:4285 elf64-x86-64.c:4441 #, c-format msgid "Local IFUNC function `%s' in %pB\n" msgstr "Fonction IFUNC locale « %s » dans %pB\n" -#: elf32-i386.c:2569 +#: elf32-i386.c:2563 #, c-format msgid "%pB: direct GOT relocation %s against `%s' without base register can not be used when making a shared object" msgstr "%pB: le réadressage GOT direct %s vers « %s » sans registre de base ne peut pas être utilisé lors de la création d'un objet partagé" -#: elf32-i386.c:2604 elf64-x86-64.c:2919 +#: elf32-i386.c:2598 elf64-x86-64.c:2977 msgid "hidden symbol" msgstr "symbole caché" -#: elf32-i386.c:2607 elf64-x86-64.c:2922 +#: elf32-i386.c:2601 elf64-x86-64.c:2980 msgid "internal symbol" msgstr "symbole interne" -#: elf32-i386.c:2610 elf64-x86-64.c:2925 +#: elf32-i386.c:2604 elf64-x86-64.c:2983 msgid "protected symbol" msgstr "symbole protégé" -#: elf32-i386.c:2613 elf64-x86-64.c:2928 +#: elf32-i386.c:2607 elf64-x86-64.c:2986 msgid "symbol" msgstr "symbole" -#: elf32-i386.c:2619 +#: elf32-i386.c:2613 #, c-format msgid "%pB: relocation R_386_GOTOFF against undefined %s `%s' can not be used when making a shared object" msgstr "%pB: réadressage R_386_GOTOFF sur le symbole %s « %s » non défini ne peut pas être utilisé lors de la création d'un objet partagé" # « la %s progétée » a un %s qui est remplacé par le texte non traduit « function » ou « data ». # Heureusement, cette ligne n'existe plus dans le code source actuel, pas besoin de signaler un bug. -#: elf32-i386.c:2632 +#: elf32-i386.c:2626 #, c-format msgid "%pB: relocation R_386_GOTOFF against protected %s `%s' can not be used when making a shared object" msgstr "%pB: réadressage R_386_GOTOFF vers la %s protégée « %s » ne peut pas être utilisé lors de la création d'un objet partagé" -#: elf32-ip2k.c:856 elf32-ip2k.c:862 elf32-ip2k.c:929 elf32-ip2k.c:935 +#: elf32-ip2k.c:855 elf32-ip2k.c:861 elf32-ip2k.c:928 elf32-ip2k.c:934 msgid "ip2k relaxer: switch table without complete matching relocation information." msgstr "relâche ip2k: table de commutation sans concordance complète des informations de réadressage" -#: elf32-ip2k.c:879 elf32-ip2k.c:962 +#: elf32-ip2k.c:878 elf32-ip2k.c:961 msgid "ip2k relaxer: switch table header corrupt." msgstr "relâche ip2k: en-tête de table de commutation corrompue" -#: elf32-ip2k.c:1302 +#: elf32-ip2k.c:1297 #, c-format msgid "ip2k linker: missing page instruction at %# (dest = %#)" msgstr "éditeur de liens ip2k: instruction de page manquante à %# (cible = %#)" -#: elf32-ip2k.c:1321 +#: elf32-ip2k.c:1316 #, c-format msgid "ip2k linker: redundant page instruction at %# (dest = %#)" msgstr "éditeur de liens ip2k: instruction de page redondante à %# (cible = %#)." -#: elf32-lm32.c:651 elf32-nios2.c:3141 +#: elf32-lm32.c:608 elf32-nios2.c:3148 msgid "global pointer relative relocation when _gp not defined" msgstr "réadressage relatif au pointeur global sans que _gp ne soit défini" -#: elf32-lm32.c:706 elf32-nios2.c:3578 +#: elf32-lm32.c:663 elf32-nios2.c:3585 msgid "global pointer relative address out of range" msgstr "adresse relative du pointeur global hors limites" -#: elf32-lm32.c:1002 +#: elf32-lm32.c:959 #, c-format msgid "internal error: addend should be zero for %s" msgstr "erreur interne: opérande devrait être zéro pour %s" @@ -2441,136 +2533,141 @@ msgid "SDA relocation when _SDA_BASE_ not defined" msgstr "réadressage SDA alors que _SDA_BASE_ n'est pas défini" -#: elf32-m32r.c:2984 elf32-microblaze.c:1101 elf32-microblaze.c:1149 +#: elf32-m32r.c:2799 elf32-microblaze.c:1097 elf32-microblaze.c:1145 #, c-format msgid "%pB: the target (%s) of an %s relocation is in the wrong section (%pA)" msgstr "%pB: la cible (%s) du réadressage %s est dans la mauvaise section (%pA)" -#: elf32-m32r.c:3487 +#: elf32-m32r.c:3302 #, c-format msgid "%pB: instruction set mismatch with previous modules" msgstr "%pB: jeu d'instructions ne concorde par avec les modules précédents" -#: elf32-m32r.c:3508 elf32-nds32.c:6992 +#: elf32-m32r.c:3323 elf32-nds32.c:6855 #, c-format msgid "private flags = %lx" msgstr "fanions privés = %lx" -#: elf32-m32r.c:3513 +#: elf32-m32r.c:3328 #, c-format msgid ": m32r instructions" msgstr ": instructions m32r" -#: elf32-m32r.c:3514 +#: elf32-m32r.c:3329 #, c-format msgid ": m32rx instructions" msgstr ": instruction m32rx" -#: elf32-m32r.c:3515 +#: elf32-m32r.c:3330 #, c-format msgid ": m32r2 instructions" msgstr ": instructions m32r2" -#: elf32-m68hc1x.c:1116 +#: elf32-m68hc1x.c:1136 #, c-format msgid "reference to the far symbol `%s' using a wrong relocation may result in incorrect execution" msgstr "référence à un symbole far « %s » utilisant le mauvais réadressage peut provoquer une exécution incorrecte" -#: elf32-m68hc1x.c:1150 +#: elf32-m68hc1x.c:1167 #, c-format msgid "XGATE address (%lx) is not within shared RAM(0xE000-0xFFFF), therefore you must manually offset the address, and possibly manage the page, in your code." msgstr "l'adresse XGATE (%lx) n'est pas dans la mémoire RAM partagée (0xE000-0xFFFF), par conséquent, vous devez décaler l'adresse manuellement, et peut-être gérer la page, dans votre code." -#: elf32-m68hc1x.c:1168 +#: elf32-m68hc1x.c:1183 #, c-format msgid "banked address [%lx:%04lx] (%lx) is not in the same bank as current banked address [%lx:%04lx] (%lx)" msgstr "banque d'adresses [%lx:%04lx] (%lx) n'es pas dans la même banque que la banque courante d'adresses [%lx:%04lx] (%lx)" -#: elf32-m68hc1x.c:1184 +#: elf32-m68hc1x.c:1198 #, c-format msgid "reference to a banked address [%lx:%04lx] in the normal address space at %04lx" msgstr "référence à une banque d'adresses [%lx:%04lx] dans l'espace normal d'adresses à %04lx" -#: elf32-m68hc1x.c:1225 +#: elf32-m68hc1x.c:1234 #, c-format msgid "S12 address (%lx) is not within shared RAM(0x2000-0x4000), therefore you must manually offset the address in your code" msgstr "l'adresse S12 (%lx) n'est pas dans la mémoire RAM partagée (0x2000-0x4000), par conséquent, vous devez décaler l'adresse manuellement dans votre code" -#: elf32-m68hc1x.c:1352 +#: elf32-m68hc1x.c:1358 #, c-format msgid "%pB: linking files compiled for 16-bit integers (-mshort) and others for 32-bit integers" msgstr "%pB: fichiers liés compilés pour des entiers de 16 bits (-mshort) et d'autres pour des entiers de 32 bits" -#: elf32-m68hc1x.c:1359 +#: elf32-m68hc1x.c:1365 #, c-format msgid "%pB: linking files compiled for 32-bit double (-fshort-double) and others for 64-bit double" msgstr "%pB: fichiers liés compilés pour des doubles de 32 bits (-fshort-double) et d'autres pour des doubles de 64 bits" -#: elf32-m68hc1x.c:1368 +#: elf32-m68hc1x.c:1374 #, c-format msgid "%pB: linking files compiled for HCS12 with others compiled for HC12" msgstr "%pB: certains fichiers liés compilés pour HCS12 avec d'autres compilés pour HC12" -#: elf32-m68hc1x.c:1413 elf32-xgate.c:497 +#: elf32-m68hc1x.c:1419 elf32-xgate.c:497 #, c-format msgid "[abi=32-bit int, " msgstr "[abi=32-bit int, " -#: elf32-m68hc1x.c:1415 elf32-xgate.c:499 +#: elf32-m68hc1x.c:1421 elf32-xgate.c:499 #, c-format msgid "[abi=16-bit int, " msgstr "[abi=16-bit int, " -#: elf32-m68hc1x.c:1418 elf32-xgate.c:502 +#: elf32-m68hc1x.c:1424 elf32-xgate.c:502 #, c-format msgid "64-bit double, " msgstr "double de 64 bits, " -#: elf32-m68hc1x.c:1420 elf32-xgate.c:504 +#: elf32-m68hc1x.c:1426 elf32-xgate.c:504 #, c-format msgid "32-bit double, " msgstr "double de 32 bits, " -#: elf32-m68hc1x.c:1423 +#: elf32-m68hc1x.c:1429 #, c-format msgid "cpu=HC11]" msgstr "cpu=HC11]" -#: elf32-m68hc1x.c:1425 +#: elf32-m68hc1x.c:1431 #, c-format msgid "cpu=HCS12]" msgstr "cpu=HCS12]" -#: elf32-m68hc1x.c:1427 +#: elf32-m68hc1x.c:1433 #, c-format msgid "cpu=HC12]" msgstr "cpu=HC12]" -#: elf32-m68hc1x.c:1430 +#: elf32-m68hc1x.c:1436 #, c-format msgid " [memory=bank-model]" msgstr " [memory=bank-model]" -#: elf32-m68hc1x.c:1432 +#: elf32-m68hc1x.c:1438 #, c-format msgid " [memory=flat]" msgstr " [memory=flat]" -#: elf32-m68hc1x.c:1435 +#: elf32-m68hc1x.c:1441 #, c-format msgid " [XGATE RAM offsetting]" msgstr " [décalage RAM XGATE]" -#: elf32-m68k.c:1216 elf32-m68k.c:1217 vms-alpha.c:7484 vms-alpha.c:7500 +#: elf32-m68k.c:1159 elf32-m68k.c:1167 elf32-ppc.c:3583 elf32-ppc.c:3591 +#, c-format +msgid "%pB uses hard float, %pB uses soft float" +msgstr "%pB utilise la virgule flottante matérielle, %pB utilise la virgule flottante logicielle" + +#: elf32-m68k.c:1282 elf32-m68k.c:1283 vms-alpha.c:7664 vms-alpha.c:7680 msgid "unknown" msgstr "inconnu" -#: elf32-m68k.c:1660 +#: elf32-m68k.c:1733 #, c-format msgid "%pB: GOT overflow: number of relocations with 8-bit offset > %d" msgstr "%pB: débordement GOT: nombre de réadressages avec des offsets de 8 bits > %d" -#: elf32-m68k.c:1667 +#: elf32-m68k.c:1740 #, c-format msgid "%pB: GOT overflow: number of relocations with 8- or 16-bit offset > %d" msgstr "%pB: débordement GOT: nombre de réadressages avec des offsets de 8 ou 16 bits > %d" @@ -2601,18 +2698,18 @@ msgid "private flags = 0x%lx" msgstr "fanions privés = 0x%lx" -#: elf32-metag.c:1863 +#: elf32-metag.c:1859 #, c-format msgid "%pB(%pA): multiple TLS models are not supported" msgstr "%pB(%pA): l'utilisation de plusieurs modèles TLS n'est pas supporté" -#: elf32-metag.c:1866 +#: elf32-metag.c:1862 #, c-format msgid "%pB(%pA): shared library symbol %s encountered whilst performing a static link" msgstr "%pB(%pA): symbole de bibliothèque partagée %s rencontré en réalisant une édition de liens statiques" -#: elf32-microblaze.c:1544 elf32-tilepro.c:3155 elfxx-sparc.c:3538 -#: elfxx-tilegx.c:3543 +#: elf32-microblaze.c:1540 elf32-tilepro.c:3029 elfxx-sparc.c:3427 +#: elfxx-tilegx.c:3417 #, c-format msgid "%pB: probably compiled without -fPIC?" msgstr "%pB: probablement compilé sans -fPIC ?" @@ -2626,320 +2723,315 @@ msgid "32bits gp relative relocation occurs for an external symbol" msgstr "réadressage relatif gp 32bits rencontré pour un symbole externe" -#: elf32-msp430.c:837 elf32-msp430.c:1151 +#: elf32-msp430.c:846 elf32-msp430.c:1160 msgid "try enabling relaxation to avoid relocation truncations" msgstr "essayez d'activer la relaxation pour éviter des réadressages tronqués" -#: elf32-msp430.c:1358 +#: elf32-msp430.c:1367 msgid "internal error: branch/jump to an odd address detected" msgstr "erreur interne: branchement/saut vers une adresse impaire détecté" -#: elf32-msp430.c:2357 +#: elf32-msp430.c:2532 #, c-format msgid "warning: %pB: unknown MSPABI object attribute %d" msgstr "attention: %pB: attribut d'objet MSPABI %d inconnu" -#: elf32-msp430.c:2456 +#: elf32-msp430.c:2633 #, c-format msgid "error: %pB uses %s instructions but %pB uses %s" msgstr "erreur: %pB utilise les instructions %s alors que %pB utilise %s" -#: elf32-msp430.c:2468 +#: elf32-msp430.c:2645 #, c-format msgid "error: %pB uses the %s code model whereas %pB uses the %s code model" msgstr "erreur: %pB utilise le modèle de code %s alors que %pB utilise le modèle de code %s" -#: elf32-msp430.c:2480 +#: elf32-msp430.c:2658 #, c-format msgid "error: %pB uses the large code model but %pB uses MSP430 instructions" msgstr "erreur: %pB utilise le grand modèle de code alors que %pB utilise les instructions MSP430" -#: elf32-msp430.c:2491 +#: elf32-msp430.c:2669 #, c-format msgid "error: %pB uses the %s data model whereas %pB uses the %s data model" msgstr "erreur: %pB utilise le modèle de données %s alors que %pB utilise le modèle de données %s" -#: elf32-msp430.c:2503 +#: elf32-msp430.c:2682 #, c-format msgid "error: %pB uses the small code model but %pB uses the %s data model" msgstr "erreur: %pB utilise le petit modèle de code alors que %pB utilise le modèle de données %s" -#: elf32-msp430.c:2515 +#: elf32-msp430.c:2694 #, c-format msgid "error: %pB uses the %s data model but %pB only uses MSP430 instructions" msgstr "erreur: %pB utilise le modèle de données %s alors que %pB utilise uniquement des instructions MSP430" -#: elf32-nds32.c:3624 +#: elf32-msp430.c:2719 #, c-format -msgid "error: can't find symbol: %s" -msgstr "erreur: le symbole ne peut être trouvé: %s" +msgid "error: %pB can use the upper region for data, but %pB assumes data is exclusively in lower memory" +msgstr "erreur: %pB peut utiliser la région haute pour les données mais %pB suppose que les données sont exclusivement en mémoire basse" -#: elf32-nds32.c:5639 +#: elf32-nds32.c:3625 #, c-format -msgid "%pB: relocation %s against `%s' can not be used whenmaking a shared object; recompile with -fPIC" -msgstr "%pB: réadressage de %s en vertu de « %s » ne peut être utilisé lors de la création d'un objet partagé; recompilez avec -fPIC" +msgid "error: can't find symbol: %s" +msgstr "erreur: le symbole ne peut être trouvé: %s" -#: elf32-nds32.c:5669 +#: elf32-nds32.c:5528 #, c-format msgid "%pB: warning: %s unsupported in shared mode" msgstr "%pB: attention: %s non supporté en mode partagé" -#: elf32-nds32.c:5795 +#: elf32-nds32.c:5654 #, c-format msgid "%pB: warning: unaligned access to GOT entry" msgstr "%pB: attention: accès non aligné à une entrée GOT" -#: elf32-nds32.c:5836 +#: elf32-nds32.c:5695 #, c-format msgid "%pB: warning: relocate SDA_BASE failed" msgstr "%pB: attention: réadressage SDA_BASE a échoué" -#: elf32-nds32.c:5858 +#: elf32-nds32.c:5717 #, c-format msgid "%pB(%pA): warning: unaligned small data access of type %d" msgstr "%pB(%pA): attention: accès non aligné à une petite donnée de type %d" -#: elf32-nds32.c:6784 +#: elf32-nds32.c:6643 #, c-format msgid "%pB: ISR vector size mismatch with previous modules, previous %u-byte, current %u-byte" msgstr "%pB: Taille de vecteur ISR en désaccord avec les modules précédents: précédent a %u octets; actuel a %u octets" -#: elf32-nds32.c:6828 +#: elf32-nds32.c:6691 #, c-format msgid "%pB: warning: endian mismatch with previous modules" msgstr "%pB: attention: l'ordre des octets n'est pas le même que dans les modules précédents" -#: elf32-nds32.c:6842 +#: elf32-nds32.c:6705 #, c-format msgid "%pB: warning: older version of object file encountered, please recompile with current tool chain" msgstr "%pB: attention: version plus ancienne du fichier objet rencontrée. Veuillez recompiler avec la chaîne d'outils actuelle" -#: elf32-nds32.c:6930 +#: elf32-nds32.c:6793 #, c-format msgid "%pB: error: ABI mismatch with previous modules" msgstr "%pB: erreur: non concordance de l'ABI avec les modules précédents" -#: elf32-nds32.c:6940 +#: elf32-nds32.c:6803 #, c-format msgid "%pB: error: instruction set mismatch with previous modules" msgstr "%pB: erreur: le jeu d'instructions ne concorde par avec les modules précédents" -#: elf32-nds32.c:6967 +#: elf32-nds32.c:6830 #, c-format msgid "%pB: warning: incompatible elf-versions %s and %s" msgstr "%pB: attention: versions elf %s et %s non compatibles" -#: elf32-nds32.c:6998 +#: elf32-nds32.c:6861 #, c-format msgid ": n1 instructions" msgstr ": instructions n1" -#: elf32-nds32.c:7001 +#: elf32-nds32.c:6864 #, c-format msgid ": n1h instructions" msgstr ": instructions n1h" -#: elf32-nds32.c:9462 +#: elf32-nds32.c:9316 #, c-format msgid "%pB: error: search_nds32_elf_blank reports wrong node" msgstr "%pB: erreur: search_nds32_elf_blank rapporte le mauvais nÅ“ud" -#: elf32-nds32.c:9722 +#: elf32-nds32.c:9576 #, c-format msgid "%pB: warning: %s points to unrecognized reloc at %#" msgstr "%pB: attention: %s pointe vers le réadressage non reconnu à %#" -#: elf32-nds32.c:12975 +#: elf32-nds32.c:12839 #, c-format msgid "%pB: nested OMIT_FP in %pA" msgstr "%pB: OMIT_FP imbriqués dans %pA" -#: elf32-nds32.c:12994 +#: elf32-nds32.c:12858 #, c-format msgid "%pB: unmatched OMIT_FP in %pA" msgstr "%pB: OMIT_FP non apparié dans %pA" -#: elf32-nds32.c:13275 reloc.c:8410 +#: elf32-nds32.c:13140 reloc.c:8470 #, c-format msgid "%X%P: %pB(%pA): relocation \"%pR\" goes out of range\n" msgstr "%X%P: %pB(%pA): réadressage « %pR » va en dehors des limites\n" -#: elf32-nios2.c:2930 +#: elf32-nios2.c:2937 #, c-format msgid "error: %pB: big-endian R2 is not supported" msgstr "erreur: %pB: R2 gros boutiste n'est pas supporté" -#: elf32-nios2.c:3822 +#: elf32-nios2.c:3829 #, c-format -msgid "global pointer relative relocation at address 0x%08x when _gp not defined\n" -msgstr "réadressage relatif au pointeur global à l'adresse 0x%08x sans que _gp ne soit défini\n" +msgid "global pointer relative relocation at address %# when _gp not defined\n" +msgstr "réadressage relatif au pointeur global à l'adresse %# sans que _gp ne soit défini\n" -#: elf32-nios2.c:3842 +#: elf32-nios2.c:3859 #, c-format -msgid "unable to reach %s (at 0x%08x) from the global pointer (at 0x%08x) because the offset (%d) is out of the allowed range, -32678 to 32767\n" -msgstr "impossible d'atteindre %s (à 0x%08x) depuis le pointeur global (à 0x%08x) car l'offset (%d) est en dehors de la plage autorisée -32768 à 32767.\n" +msgid "unable to reach %s (at %#) from the global pointer (at %#) because the offset (%) is out of the allowed range, -32678 to 32767\n" +msgstr "impossible d'atteindre %s (à %#) depuis le pointeur global (à %#) car l'offset (%) est en dehors de la plage autorisée -32768 à 32767.\n" -#: elf32-nios2.c:4495 elf32-pru.c:928 +#: elf32-nios2.c:4514 elf32-pru.c:931 msgid "relocation out of range" msgstr "réadressage hors limite" -#: elf32-nios2.c:4505 elf32-pru.c:938 elf32-tic6x.c:2716 +#: elf32-nios2.c:4524 elf32-pru.c:941 elf32-tic6x.c:2657 msgid "dangerous relocation" msgstr "réadressage dangereux" -#: elf32-nios2.c:5378 +#: elf32-nios2.c:5367 #, c-format msgid "dynamic variable `%s' is zero size" msgstr "la variable dynamique « %s » a une taille nulle" -#: elf32-or1k.c:1177 +#: elf32-or1k.c:1210 #, c-format msgid "%pB: Cannot handle relocation value size of %d" msgstr "%pB: Impossible de gérer une taille de valeur de réadressage de %d" -#: elf32-or1k.c:1286 +#: elf32-or1k.c:1317 #, c-format msgid "%pB: unknown relocation type %d" msgstr "%pB: type de réadressage %d inconnu" -#: elf32-or1k.c:1340 +#: elf32-or1k.c:1371 #, c-format msgid "%pB: addend should be zero for plt relocations" msgstr "%pB: l'opérande devrait être zéro pour des réadressages plt" -#: elf32-or1k.c:1445 +#: elf32-or1k.c:1476 #, c-format msgid "%pB: addend should be zero for got relocations" msgstr "%pB: l'opérande devrait être zéro pour des réadressages got" -#: elf32-or1k.c:1462 +#: elf32-or1k.c:1493 #, c-format msgid "%pB: gotoff relocation against dynamic symbol %s" msgstr "%pB: réadressage gotoff vers le symbole dynamique %s" -#: elf32-or1k.c:1479 elf64-alpha.c:4455 elf64-alpha.c:4599 +#: elf32-or1k.c:1510 elf64-alpha.c:4421 elf64-alpha.c:4565 #, c-format msgid "%pB: pc-relative relocation against dynamic symbol %s" msgstr "%pB: réadressage relatif au PC vers le symbole dynamique %s" -#: elf32-or1k.c:1493 +#: elf32-or1k.c:1524 #, c-format msgid "%pB: non-pic relocation against symbol %s" msgstr "%pB: réadressage non-pic vers le symbole dynamique %s" -#: elf32-or1k.c:1577 +#: elf32-or1k.c:1608 #, c-format msgid "%pB: support for local dynamic not implemented" msgstr "%pB: support pour les dynamiques locaux pas implémentée" -#: elf32-or1k.c:1729 +#: elf32-or1k.c:1787 #, c-format msgid "%pB: will not resolve runtime TLS relocation" msgstr "%pB: le réadressage TLS ne sera pas résolu à l'exécution" -#: elf32-or1k.c:2074 +#: elf32-or1k.c:2120 #, c-format msgid "%pB: bad relocation section name `%s'" msgstr "%pB: nom de section de réadressage erroné « %s »" -#: elf32-or1k.c:3218 +#: elf32-or1k.c:3181 #, c-format msgid "%pB: %s flag mismatch with previous modules" msgstr "%pB: désaccord du fanion %s avec les modules précédents" -#: elf32-ppc.c:986 +#: elf32-ppc.c:989 #, c-format msgid "generic linker can't handle %s" msgstr "liaison générique ne peut traiter %s" -#: elf32-ppc.c:1617 +#: elf32-ppc.c:1628 #, c-format msgid "corrupt %s section in %pB" msgstr "section %s corrompue dans %pB" -#: elf32-ppc.c:1637 +#: elf32-ppc.c:1647 #, c-format msgid "unable to read in %s section from %pB" msgstr "incapable de lire dans la section %s à partir de %pB" -#: elf32-ppc.c:1679 +#: elf32-ppc.c:1689 #, c-format msgid "warning: unable to set size of %s section in %pB" msgstr "attention: incapable d'initialiser la taille de la section %s dans %pB" -#: elf32-ppc.c:1729 +#: elf32-ppc.c:1738 msgid "failed to allocate space for new APUinfo section" msgstr "échec d'allocation d'espace pour une nouvelle section APUinfo" -#: elf32-ppc.c:1748 +#: elf32-ppc.c:1757 msgid "failed to compute new APUinfo section" msgstr "échec d'évaluation de la nouvelle section APUinfo" -#: elf32-ppc.c:1751 +#: elf32-ppc.c:1760 msgid "failed to install new APUinfo section" msgstr "échec d'installation de la nouvelle section APUinfo" -#: elf32-ppc.c:2853 +#: elf32-ppc.c:2861 #, c-format msgid "%pB: relocation %s cannot be used when making a shared object" msgstr "%pB: réadressage %s ne peut être utilisé lors de la création d'un objet partagé" -#: elf32-ppc.c:3587 elf32-ppc.c:3595 -#, c-format -msgid "%pB uses hard float, %pB uses soft float" -msgstr "%pB utilise la virgule flottante matérielle, %pB utilise la virgule flottante logicielle" - -#: elf32-ppc.c:3603 elf32-ppc.c:3611 +#: elf32-ppc.c:3599 elf32-ppc.c:3607 #, c-format msgid "%pB uses double-precision hard float, %pB uses single-precision hard float" msgstr "%pB utilise la virgule flottante double précision matérielle, %pB utilise la virgule flottante simple précision matérielle" -#: elf32-ppc.c:3630 elf32-ppc.c:3638 +#: elf32-ppc.c:3629 elf32-ppc.c:3637 #, c-format msgid "%pB uses 64-bit long double, %pB uses 128-bit long double" msgstr "%pB utilise un double long 64 bits, %pB utilise un double long de 128 bits" -#: elf32-ppc.c:3646 elf32-ppc.c:3654 +#: elf32-ppc.c:3645 elf32-ppc.c:3653 #, c-format msgid "%pB uses IBM long double, %pB uses IEEE long double" msgstr "%pB utilise un double long IBM, %pB utilise un double long IEEE" -#: elf32-ppc.c:3721 elf32-ppc.c:3730 +#: elf32-ppc.c:3720 elf32-ppc.c:3729 #, c-format msgid "%pB uses AltiVec vector ABI, %pB uses SPE vector ABI" msgstr "%pB utilise l'ABI de vecteurs AltiVec, %pB utilise l'ABI de vecteurs SPE" -#: elf32-ppc.c:3759 elf32-ppc.c:3768 +#: elf32-ppc.c:3758 elf32-ppc.c:3767 #, c-format msgid "%pB uses r3/r4 for small structure returns, %pB uses memory" msgstr "%pB utilise r3/r4 pour les retours de petites structures, %pB utilise la mémoire" -#: elf32-ppc.c:3829 +#: elf32-ppc.c:3831 #, c-format msgid "%pB: compiled with -mrelocatable and linked with modules compiled normally" msgstr "%pB: compilé avec -mrelocatable et fait l'édition de lien avec les modules compilés normalement" -#: elf32-ppc.c:3837 +#: elf32-ppc.c:3839 #, c-format msgid "%pB: compiled normally and linked with modules compiled with -mrelocatable" msgstr "%pB: compilé normalement et fait l'édition de lien avec les modules compilés avec -mrelocatable" -#: elf32-ppc.c:3906 +#: elf32-ppc.c:3908 #, c-format msgid "%pB(%pA+0x%lx): expected 16A style relocation on 0x%08x insn" msgstr "%pB(%pA+0x%lx): réadressage du style 16A attendu sur l'insn 0x%08x" -#: elf32-ppc.c:3925 +#: elf32-ppc.c:3927 #, c-format msgid "%pB(%pA+0x%lx): expected 16D style relocation on 0x%08x insn" msgstr "%pB(%pA+0x%lx): réadressage du style 16D attendu sur l'insn 0x%08x" -#: elf32-ppc.c:4028 +#: elf32-ppc.c:4030 #, c-format msgid "bss-plt forced due to %pB" msgstr "bss-plt forcé à cause de %pB" -#: elf32-ppc.c:4030 +#: elf32-ppc.c:4032 msgid "bss-plt forced by profiling" msgstr "bss-plt forcé par le profilage" @@ -2947,40 +3039,40 @@ #. could just mark this symbol to exclude it #. from tls optimization but it's safer to skip #. the entire optimization. -#: elf32-ppc.c:4606 elf64-ppc.c:7724 +#: elf32-ppc.c:4606 elf64-ppc.c:8252 #, c-format msgid "%H arg lost __tls_get_addr, TLS optimization disabled\n" msgstr "%H l'argument a perdu __tls_get_addr, optimisation TLS désactivée\n" -#: elf32-ppc.c:5577 elf32-sh.c:3078 elf32-tilepro.c:2339 elfxx-sparc.c:2534 -#: elfxx-tilegx.c:2579 +#: elf32-ppc.c:5513 elf32-sh.c:3023 elf32-tilepro.c:2256 elfxx-sparc.c:2453 +#: elfxx-tilegx.c:2496 #, c-format msgid "%pB: dynamic relocation in read-only section `%pA'\n" msgstr "%pB: réadressage dynamique dans une section en lecture seule « %pA »\n" -#: elf32-ppc.c:7457 +#: elf32-ppc.c:7356 msgid "%P: %H: error: %s with unexpected instruction %x\n" msgstr "%P: %H: erreur: %s avec l'instruction inattendue %x\n" -#: elf32-ppc.c:7494 +#: elf32-ppc.c:7393 msgid "%H: fixup branch overflow\n" msgstr "%H: débordement du branchement de correction\n" -#: elf32-ppc.c:7534 elf32-ppc.c:7570 +#: elf32-ppc.c:7433 elf32-ppc.c:7469 #, c-format msgid "%pB(%pA+%#): error: %s with unexpected instruction %#x" msgstr "%pB(%pA+%#): erreur: %s avec l'instruction inattendue %#x" -#: elf32-ppc.c:7634 +#: elf32-ppc.c:7533 #, c-format msgid "%X%H: unsupported bss-plt -fPIC ifunc %s\n" msgstr "%X%H: bss-plt -fPIC ifunc %s non supporté\n" -#: elf32-ppc.c:7673 elf64-ppc.c:15220 +#: elf32-ppc.c:7572 elf64-ppc.c:16848 msgid "%H: warning: %s unexpected insn %#x.\n" msgstr "%H: attention: %s insn %#x inattendue.\n" -#: elf32-ppc.c:7985 +#: elf32-ppc.c:7881 #, c-format msgid "%H: non-zero addend on %s reloc against `%s'\n" msgstr "%H: opérande non nul sur le réadressage %s par rapport à « %s »\n" @@ -2993,54 +3085,54 @@ #. local won't have the +32k reloc addend trick marking #. -fPIC code, so the linker won't know whether r30 is #. _GLOBAL_OFFSET_TABLE_ or pointing into a .got2 section. -#: elf32-ppc.c:8017 +#: elf32-ppc.c:7913 #, c-format msgid "%X%H: @local call to ifunc %s\n" msgstr "%X%H: appel @local à ifunc %s\n" -#: elf32-ppc.c:8187 +#: elf32-ppc.c:8091 #, c-format msgid "%H: relocation %s for indirect function %s unsupported\n" msgstr "%H: réadressage %s non supporté pour la fonction indirecte %s\n" -#: elf32-ppc.c:8515 elf32-ppc.c:8546 elf32-ppc.c:8637 elf32-ppc.c:8725 +#: elf32-ppc.c:8425 elf32-ppc.c:8456 elf32-ppc.c:8547 elf32-ppc.c:8643 #, c-format msgid "%pB: the target (%s) of a %s relocation is in the wrong output section (%s)" msgstr "%pB: la cible (%s) d'un réadressage %s est dans la mauvaise section de sortie (%s)" -#: elf32-ppc.c:8855 elf32-ppc.c:8873 -msgid "%P: %H: %s relocation unsupported for bss-plt\n" -msgstr "%P: %H: le réadressage %s n'est pas supporté pour bss-plt\n" +#: elf32-ppc.c:8773 elf32-ppc.c:8791 +msgid "%X%P: %H: %s relocation unsupported for bss-plt\n" +msgstr "%X%P: %H: le réadressage %s n'est pas supporté pour bss-plt\n" -#: elf32-ppc.c:8954 +#: elf32-ppc.c:8872 #, c-format msgid "%H: error: %s against `%s' not a multiple of %u\n" msgstr "%H: erreur: %s par rapport à « %s » n'est pas un multiple de %u\n" -#: elf32-ppc.c:8983 +#: elf32-ppc.c:8901 #, c-format msgid "%H: unresolvable %s relocation against symbol `%s'\n" msgstr "%H: réadressage %s sans solution par rapport au symbole « %s »\n" -#: elf32-ppc.c:9064 +#: elf32-ppc.c:8982 #, c-format msgid "%H: %s reloc against `%s': error %d\n" msgstr "%H: réadressage %s vers « %s »: erreur %d\n" -#: elf32-ppc.c:9959 elf64-ppc.c:15715 +#: elf32-ppc.c:9872 msgid "%X%P: text relocations and GNU indirect functions will result in a segfault at runtime\n" msgstr "%X%P: les réadressages de textes et les fonctions indirectes GNU résulteront en un crash à l'exécution\n" -#: elf32-ppc.c:9963 elf64-ppc.c:15719 +#: elf32-ppc.c:9876 elf64-ppc.c:17398 msgid "%P: warning: text relocations and GNU indirect functions may result in a segfault at runtime\n" msgstr "%P: attention: les réadressages de textes et les fonctions indirectes GNU pourraient résulter en un crash à l'exécution\n" -#: elf32-ppc.c:10008 +#: elf32-ppc.c:9921 #, c-format msgid "%s not defined in linker created %pA" msgstr "%s pas défini dans %pA créé par l'éditeur de liens" -#: elf32-pru.c:579 elf32-pru.c:1472 +#: elf32-pru.c:582 elf32-pru.c:1475 #, c-format msgid "error: %pB: old incompatible object file detected" msgstr "erreur: %pB: ancien fichier objet incompatible détecté" @@ -3057,7 +3149,7 @@ msgid "warning: RL78_SYM reloc with an unknown symbol" msgstr "attention: réadressage RL78_SYM avec un symbole inconnu" -#: elf32-rl78.c:1084 elf32-rx.c:1456 +#: elf32-rl78.c:1084 elf32-rx.c:1461 #, c-format msgid "%pB(%pA): error: call to undefined function '%s'" msgstr "%pB(%pA): erreur: appel à la fonction non définie « %s »" @@ -3087,17 +3179,17 @@ msgid " [64-bit doubles]" msgstr " [doubles de 64 bits]" -#: elf32-rx.c:605 +#: elf32-rx.c:607 #, c-format msgid "%pB:%pA: table entry %s outside table" msgstr "%pB:%pA: l'entrée %s de la table est en dehors de la table" -#: elf32-rx.c:612 +#: elf32-rx.c:614 #, c-format msgid "%pB:%pA: table entry %s not word-aligned within table" msgstr "%pB:%pA: l'entrée %s de la table n'est pas alignée sur un mot dans la table" -#: elf32-rx.c:684 +#: elf32-rx.c:689 #, c-format msgid "%pB:%pA: warning: deprecated Red Hat reloc %s detected against: %s" msgstr "%pB:%pA: attention: réadressage %s Red Hat réprouvée détecté sur: %s" @@ -3106,59 +3198,59 @@ #. an absolute address is being computed. There are special cases #. for relocs against symbols that are known to be referenced in #. crt0.o before the PID base address register has been initialised. -#: elf32-rx.c:704 +#: elf32-rx.c:709 #, c-format msgid "%pB(%pA): unsafe PID relocation %s at %# (against %s in %s)" msgstr "%pB(%pA): réadressage PID %s non sûr à % (sur %s dans %s)" -#: elf32-rx.c:1288 +#: elf32-rx.c:1293 msgid "warning: RX_SYM reloc with an unknown symbol" msgstr "attention: réadressage RX_SYM avec un symbole inconnu" -#: elf32-rx.c:3167 +#: elf32-rx.c:3173 #, c-format msgid "there is a conflict merging the ELF header flags from %pB" msgstr "il y a un conflit en fusionnant les fanions d'en-têtes ELF de %pB" -#: elf32-rx.c:3170 +#: elf32-rx.c:3176 #, c-format msgid " the input file's flags: %s" msgstr " les fanions du fichier d'entrée: %s" -#: elf32-rx.c:3172 +#: elf32-rx.c:3178 #, c-format msgid " the output file's flags: %s" msgstr " les fanions du fichier de sortie: %s" -#: elf32-rx.c:3792 +#: elf32-rx.c:3784 #, c-format msgid "%pB:%pA: table %s missing corresponding %s" msgstr "%pB:%pA: la table %s n'a pas de %s correspondant" -#: elf32-rx.c:3800 +#: elf32-rx.c:3792 #, c-format msgid "%pB:%pA: %s and %s must be in the same input section" msgstr "%pB:%pA: %s et %s doivent être dans la même section d'entrée" -#: elf32-s390.c:2140 elf64-s390.c:2095 +#: elf32-s390.c:2011 elf64-s390.c:1965 #, c-format msgid "%pB(%pA+%#): invalid instruction for TLS relocation %s" msgstr "%pB(%pA+%#): instruction invalide pour le réadressage TLS %s" -#: elf32-score.c:1521 elf32-score7.c:1382 elfxx-mips.c:3754 +#: elf32-score.c:1521 elf32-score7.c:1382 elfxx-mips.c:3800 msgid "not enough GOT space for local GOT entries" msgstr "pas suffisamment d'espace GOT pour les entrées locales GOT" -#: elf32-score.c:2746 +#: elf32-score.c:2747 msgid "address not word aligned" msgstr "adresse pas alignée sur un mot" -#: elf32-score.c:2827 elf32-score7.c:2632 +#: elf32-score.c:2828 elf32-score7.c:2633 #, c-format msgid "%pB: malformed reloc detected for section %pA" msgstr "%pB: réadressage mal composé détecté dans la section %pA" -#: elf32-score.c:2881 elf32-score7.c:2686 +#: elf32-score.c:2882 elf32-score7.c:2687 #, c-format msgid "%pB: CALL15 reloc at %# not against global symbol" msgstr "%pB: appel CALL15 de réadressage à %# n'est pas appliqué sur un symbole global" @@ -3173,7 +3265,7 @@ msgid " [fix dep]" msgstr " [fix dep]" -#: elf32-score.c:4050 elf32-score7.c:3855 +#: elf32-score.c:4054 elf32-score7.c:3859 #, c-format msgid "%pB: warning: linking PIC files with non-PIC files" msgstr "%pB: attention: édition de liens des fichiers PIC avec des fichiers non PIC" @@ -3183,153 +3275,149 @@ msgid "%pB: %#: warning: R_SH_USES points to unrecognized insn 0x%x" msgstr "%pB: %#: attention: R_SH_USES pointe vers un insn inconnu 0x%x" -#: elf32-sh.c:3633 -msgid "unexpected STO_SH5_ISA32 on local symbol is not handled" -msgstr "STO_SH5_ISA32 inattendu sur le symbole local n'est pas traité" - -#: elf32-sh.c:3880 +#: elf32-sh.c:3758 #, c-format msgid "%pB: %#: fatal: unaligned branch target for relax-support relocation" msgstr "%pB: %#: fatal: cible de branchement non alignée pour un réadressage de type relax-support" -#: elf32-sh.c:3910 elf32-sh.c:3926 +#: elf32-sh.c:3788 elf32-sh.c:3804 #, c-format msgid "%pB: %#: fatal: unaligned %s relocation %#" msgstr "%pB: %#: fatal: réadressage %s non aligné %#" -#: elf32-sh.c:3942 +#: elf32-sh.c:3820 #, c-format msgid "%pB: %#: fatal: R_SH_PSHA relocation % not in range -32..32" msgstr "%pB: %#: fatal: réadressage R_SH_PSHA % pas dans l'intervalle -32..32" -#: elf32-sh.c:3958 +#: elf32-sh.c:3836 #, c-format msgid "%pB: %#: fatal: R_SH_PSHL relocation % not in range -32..32" msgstr "%pB: %#: fatal: réadressage R_SH_PSHL % n'est pas dans l'intervalle -32..32" -#: elf32-sh.c:4088 elf32-sh.c:4483 +#: elf32-sh.c:3966 elf32-sh.c:4361 #, c-format msgid "%pB(%pA+%#): cannot emit fixup to `%s' in read-only section" msgstr "%pB(%pA+%#): impossible d'apporter des corrections à « %s » dans une section en lecture seule" -#: elf32-sh.c:4586 +#: elf32-sh.c:4464 #, c-format msgid "%pB(%pA+%#): %s relocation against external symbol \"%s\"" msgstr "%pB(%pA+%#): %s réadressage vers le symbole externe « %s »" -#: elf32-sh.c:4705 +#: elf32-sh.c:4583 #, c-format msgid "%pB(%pA): offset in relocation for GD->LE translation is too small: %#" msgstr "%pB(%pA): le décalage dans le réadressage de la traduction GD->LE est trop petit: %#" #. The backslash is to prevent bogus trigraph detection. -#: elf32-sh.c:4723 +#: elf32-sh.c:4601 #, c-format msgid "%pB(%pA+%#): unexpected instruction %#04X (expected 0xd4??)" msgstr "%pB(%pA+%#): instruction %#04X inattendue (0xd4?? attendue)" -#: elf32-sh.c:4731 +#: elf32-sh.c:4609 #, c-format msgid "%pB(%pA+%#): unexpected instruction %#04X (expected 0xc7??)" msgstr "%pB(%pA+%#): instruction %#04X inattendue (0xc7?? attendue)" -#: elf32-sh.c:4738 +#: elf32-sh.c:4616 #, c-format msgid "%pB(%pA+%#): unexpected instruction %#04X (expected 0xd1??)" msgstr "%pB(%pA+%#): instruction %#04X inattendue (0xd1?? attendue)" -#: elf32-sh.c:4745 +#: elf32-sh.c:4623 #, c-format msgid "%pB(%pA+%#): unexpected instruction %#04X (expected 0x310c)" msgstr "%pB(%pA+%#): instruction %#04X inattendue (0x310c attendue)" -#: elf32-sh.c:4752 +#: elf32-sh.c:4630 #, c-format msgid "%pB(%pA+%#): unexpected instruction %#04X (expected 0x410b)" msgstr "%pB(%pA+%#): instruction %#04X inattendue (0x410b attendue)" -#: elf32-sh.c:4759 +#: elf32-sh.c:4637 #, c-format msgid "%pB(%pA+%#): unexpected instruction %#04X (expected 0x34cc)" msgstr "%pB(%pA+%#): instruction %#04X inattendue (0x34cc attendue)" -#: elf32-sh.c:4794 +#: elf32-sh.c:4672 #, c-format msgid "%pB(%pA): offset in relocation for IE->LE translation is too small: %#" msgstr "%pB(%pA): le décalage dans le réadressage pour la traduction IE->LE est trop petit: %#" -#: elf32-sh.c:4812 +#: elf32-sh.c:4690 #, c-format msgid "%pB(%pA+%#): unexpected instruction %#04X (expected 0xd0??: mov.l)" msgstr "%pB(%pA+%#): instruction %#04X inattendue (0xd0?? attendue: mov.l)" -#: elf32-sh.c:4821 +#: elf32-sh.c:4699 #, c-format msgid "%pB(%pA+%#): unexpected instruction %#04X (expected 0x0?12: stc)" msgstr "%pB(%pA+%#): instruction %#04X inattendue (0x0?12 attendue: stc)" -#: elf32-sh.c:4828 +#: elf32-sh.c:4706 #, c-format msgid "%pB(%pA+%#): unexpected instruction %#04X (expected 0x0?ce: mov.l)" msgstr "%pB(%pA+%#): instruction %#04X inattendue (0x0?ce attendu: mov.l)" -#: elf32-sh.c:4943 +#: elf32-sh.c:4821 #, c-format msgid "%pB(%pA): offset in relocation for GD->IE translation is too small: %#" msgstr "%pB(%pA): le décalage dans le réadressage pour la traduction GD->IE est trop petit: %#" -#: elf32-sh.c:5011 +#: elf32-sh.c:4889 #, c-format msgid "%pB(%pA): offset in relocation for LD->LE translation is too small: %#" msgstr "%pB(%pA): le décalage dans le réadressage pour la traduction LD->LE est trop petit: %#" -#: elf32-sh.c:5139 +#: elf32-sh.c:5017 #, c-format msgid "%X%C: relocation to \"%s\" references a different segment\n" msgstr "%X%C: le réadressage vers « %s » fait référence à un segment différent\n" -#: elf32-sh.c:5146 +#: elf32-sh.c:5024 #, c-format msgid "%C: warning: relocation to \"%s\" references a different segment\n" msgstr "%C: attention: réadressage vers « %s » fait référence à un segment différent\n" -#: elf32-sh.c:5651 elf32-sh.c:5733 +#: elf32-sh.c:5483 elf32-sh.c:5565 #, c-format msgid "%pB: `%s' accessed both as normal and FDPIC symbol" msgstr "%pB: « %s » accédé à la fois comme symbole normal et comme symbole FDPIC" -#: elf32-sh.c:5657 elf32-sh.c:5738 +#: elf32-sh.c:5489 elf32-sh.c:5570 #, c-format msgid "%pB: `%s' accessed both as FDPIC and thread local symbol" msgstr "%pB: « %s » accédé à la fois comme symbole FDPIC et comme symbole local au thread" -#: elf32-sh.c:5688 +#: elf32-sh.c:5520 #, c-format msgid "%pB: Function descriptor relocation with non-zero addend" msgstr "%pB: Descripteur de fonction réadressé avec un opérande non nul" -#: elf32-sh.c:5895 elf64-alpha.c:4691 +#: elf32-sh.c:5727 elf64-alpha.c:4657 #, c-format msgid "%pB: TLS local exec code cannot be linked into shared objects" msgstr "%pB: code exécutable local TLS ne peut être lié en objets partagés" # %s sont « dsp » ou « floating point » non traduits -#: elf32-sh.c:6010 +#: elf32-sh.c:5842 #, c-format msgid "%pB: uses %s instructions while previous modules use %s instructions" msgstr "%pB: utilise les instructions %s tandis que les modules précédents utilisent les instructions %s" -#: elf32-sh.c:6022 +#: elf32-sh.c:5854 #, c-format msgid "internal error: merge of architecture '%s' with architecture '%s' produced unknown architecture" msgstr "erreur interne: la fusion de l'architecture « %s » avec l'architecture « %s » a produit une architecture inconnue" -#: elf32-sh.c:6059 +#: elf32-sh.c:5895 #, c-format msgid "%pB: uses instructions which are incompatible with instructions used in previous modules" msgstr "%pB: utilise des instructions qui sont incompatibles avec les instructions utilisées dans les modules précédents" -#: elf32-sh.c:6072 +#: elf32-sh.c:5908 #, c-format msgid "%pB: attempt to mix FDPIC and non-FDPIC objects" msgstr "%pB: tentative de mélanger des objets FDPIC et non-FDPIC" @@ -3344,118 +3432,123 @@ msgid "%pB: linking little endian files with big endian files" msgstr "%pB: édition de liens pour des fichiers à octets de poids faible avec des fichiers à octets de poids fort" -#: elf32-spu.c:732 +#: elf32-sparc.c:157 +#, c-format +msgid "%pB: unhandled sparc machine value '%lu' detected during write processing" +msgstr "%pB: valeur de machine sparc « %lu » non gérée détectée durant le traitement de l'écriture" + +#: elf32-spu.c:735 msgid "%X%P: overlay section %pA does not start on a cache line\n" msgstr "%X%P: recouvrement de la section %pA ne démarre pas sur une ligne de cache\n" -#: elf32-spu.c:740 +#: elf32-spu.c:743 msgid "%X%P: overlay section %pA is larger than a cache line\n" msgstr "%X%P: recouvrement de la section %pA est plus grand que la ligne de cache\n" -#: elf32-spu.c:760 +#: elf32-spu.c:763 msgid "%X%P: overlay section %pA is not in cache area\n" msgstr "%X%P: recouvrement de la section %pA n'est pas dans une zone de cache\n" -#: elf32-spu.c:801 +#: elf32-spu.c:804 #, c-format msgid "%X%P: overlay sections %pA and %pA do not start at the same address\n" msgstr "%X%P: recouvrement des sections %pA et %pA ne commencent pas à la même adresse\n" -#: elf32-spu.c:1027 +#: elf32-spu.c:1030 #, c-format msgid "warning: call to non-function symbol %s defined in %pB" msgstr "attention: appel au symbole %s défini dans %pB qui n'est pas une fonction" -#: elf32-spu.c:1377 +#: elf32-spu.c:1380 #, c-format msgid "%pA:0x%v lrlive .brinfo (%u) differs from analysis (%u)\n" msgstr "%pA:0x%v le lrlive .brinfo (%u) diffère de celui de l'analyse (%u)\n" -#: elf32-spu.c:1909 +#: elf32-spu.c:1910 #, c-format msgid "%pB is not allowed to define %s" msgstr "%pB ne peut pas définir %s" -#: elf32-spu.c:1917 +#: elf32-spu.c:1918 #, c-format msgid "you are not allowed to define %s in a script" msgstr "vous ne pouvez pas définir %s dans un script" -#: elf32-spu.c:1951 +#: elf32-spu.c:1952 #, c-format msgid "%s in overlay section" msgstr "%s dans une section de recouvrement" -#: elf32-spu.c:1980 +#: elf32-spu.c:1981 msgid "overlay stub relocation overflow" msgstr "débordement du réadressage de l'ébauche de recouvrement" -#: elf32-spu.c:1989 elf64-ppc.c:13230 +#: elf32-spu.c:1990 elf64-ppc.c:14496 msgid "stubs don't match calculated size" msgstr "taille des ébauches ne concorde pas avec la taille calculée" -#: elf32-spu.c:2572 +#: elf32-spu.c:2573 #, c-format msgid "warning: %s overlaps %s\n" msgstr "attention: %s recouvre %s\n" -#: elf32-spu.c:2588 +#: elf32-spu.c:2589 #, c-format msgid "warning: %s exceeds section size\n" msgstr "attention: %s dépasse la taille de la section\n" -#: elf32-spu.c:2620 +#: elf32-spu.c:2621 #, c-format msgid "%pA:0x%v not found in function table\n" msgstr "%pA:%0x%v pas trouvé dans la table de fonctions\n" -#: elf32-spu.c:2761 +#: elf32-spu.c:2762 #, c-format msgid "%pB(%pA+0x%v): call to non-code section %pB(%pA), analysis incomplete\n" msgstr "%pB(%pA+0x%v): appel à la section non exécutable %pB(%pA), analyse incomplète\n" -#: elf32-spu.c:3330 +#: elf32-spu.c:3328 #, c-format msgid "stack analysis will ignore the call from %s to %s\n" msgstr "l'analyse de la pile ignorera l'appel de %s à %s\n" -#: elf32-spu.c:4027 +#: elf32-spu.c:4025 msgid " calls:\n" msgstr " appels:\n" -#: elf32-spu.c:4341 +#: elf32-spu.c:4340 #, c-format msgid "%s duplicated in %s\n" msgstr "%s dupliqué dans %s\n" -#: elf32-spu.c:4345 +#: elf32-spu.c:4344 #, c-format msgid "%s duplicated\n" msgstr "%s dupliqué\n" -#: elf32-spu.c:4352 +#: elf32-spu.c:4351 msgid "sorry, no support for duplicate object files in auto-overlay script\n" msgstr "désolé, pas de support des fichiers objet dupliqués dans un script auto-overlay\n" -#: elf32-spu.c:4394 +#: elf32-spu.c:4393 #, c-format msgid "non-overlay size of 0x%v plus maximum overlay size of 0x%v exceeds local store\n" msgstr "la taille de non recouvrement de 0x%v plus la taille maximum de recouvrement de 0x%v dépasse l'espace local\n" -#: elf32-spu.c:4550 +#: elf32-spu.c:4549 #, c-format msgid "%pB:%pA%s exceeds overlay size\n" msgstr "%pB:%pA%s dépasse la taille de recouvrement\n" -#: elf32-spu.c:4691 +#: elf32-spu.c:4690 msgid "%F%P: auto overlay error: %E\n" msgstr "%F%P: erreur d'auto recouvrement: %E\n" -#: elf32-spu.c:4712 +#: elf32-spu.c:4711 msgid "Stack size for call graph root nodes.\n" msgstr "Taille de la pile des nÅ“uds racine du graph d'appel.\n" -#: elf32-spu.c:4713 +#: elf32-spu.c:4712 msgid "" "\n" "Stack size for functions. Annotations: '*' max stack, 't' tail call\n" @@ -3463,19 +3556,19 @@ "\n" "Taille de la pile pour les fonctions. Annotations: « * » pile max, « t » appel de queue\n" -#: elf32-spu.c:4723 +#: elf32-spu.c:4722 msgid "Maximum stack required is 0x%v\n" msgstr "Pile maximum requise est 0x%v\n" -#: elf32-spu.c:4742 +#: elf32-spu.c:4741 msgid "%X%P: stack/lrlive analysis error: %E\n" msgstr "%X%P: erreur d'analyse de pile/lrlive: %E\n" -#: elf32-spu.c:4745 +#: elf32-spu.c:4744 msgid "%F%P: can not build overlay stubs: %E\n" msgstr "%F%P: ne peut construire les ébauches de recouvrement: %E\n" -#: elf32-spu.c:4814 +#: elf32-spu.c:4813 msgid "fatal error while creating .fixup" msgstr "erreur fatale lors de la création de .fixup" @@ -3484,275 +3577,274 @@ msgid "%pB(%s+%#): unresolvable %s relocation against symbol `%s'" msgstr "%pB(%s+%#): réadressage %s sans solution vers le symbole « %s »" -#: elf32-tic6x.c:1628 +#: elf32-tic6x.c:1588 msgid "warning: generating a shared library containing non-PIC code" msgstr "attention: production d'une librairie partagée contenant du code non-PIC" -#: elf32-tic6x.c:1633 +#: elf32-tic6x.c:1593 msgid "warning: generating a shared library containing non-PID code" msgstr "attention: production d'une librairie partagée contenant du code non-PID" -#: elf32-tic6x.c:2493 +#: elf32-tic6x.c:2434 #, c-format msgid "%pB: SB-relative relocation but __c6xabi_DSBT_BASE not defined" msgstr "%pB: réadressage relatif à SB mais __c6xabi_DSBT_BASE n'est pas défini" -#: elf32-tic6x.c:3629 +#: elf32-tic6x.c:3511 #, c-format msgid "%pB: error: unknown mandatory EABI object attribute %d" msgstr "%pB: erreur: l'attribut d'objet EABI obligatoire %d est manquant" -#: elf32-tic6x.c:3638 +#: elf32-tic6x.c:3520 #, c-format msgid "%pB: warning: unknown EABI object attribute %d" msgstr "%pB: attention: attribut d'objet EABI %d inconnu" -#: elf32-tic6x.c:3752 elf32-tic6x.c:3761 +#: elf32-tic6x.c:3638 elf32-tic6x.c:3647 #, c-format msgid "error: %pB requires more stack alignment than %pB preserves" msgstr "erreur: %pB nécessite un plus grand alignement de pile que ce que %pB préserve" -#: elf32-tic6x.c:3771 elf32-tic6x.c:3780 +#: elf32-tic6x.c:3657 elf32-tic6x.c:3666 #, c-format msgid "error: unknown Tag_ABI_array_object_alignment value in %pB" msgstr "erreur: valeur Tag_ABI_array_object_alignment inconnue dans %pB" -#: elf32-tic6x.c:3789 elf32-tic6x.c:3798 +#: elf32-tic6x.c:3675 elf32-tic6x.c:3684 #, c-format msgid "error: unknown Tag_ABI_array_object_align_expected value in %pB" msgstr "erreur: valeur Tag_ABI_array_object_align_expected inconnue dans %pB" -#: elf32-tic6x.c:3807 elf32-tic6x.c:3815 +#: elf32-tic6x.c:3693 elf32-tic6x.c:3701 #, c-format msgid "error: %pB requires more array alignment than %pB preserves" msgstr "erreur: %pB nécessite un plus grand alignement de tableau que ce que %pB préserve" -#: elf32-tic6x.c:3838 +#: elf32-tic6x.c:3724 #, c-format msgid "warning: %pB and %pB differ in wchar_t size" msgstr "attention: %pB et %pB on des tailles de wchar_t différentes" -#: elf32-tic6x.c:3857 +#: elf32-tic6x.c:3743 #, c-format msgid "warning: %pB and %pB differ in whether code is compiled for DSBT" msgstr "attention: %pB et %pB ne sont pas d'accord sur la compilation du code pour DSBT" -#: elf32-tilepro.c:3761 elfxx-tilegx.c:4145 elfxx-x86.c:1432 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:9530 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2579 +#: elf32-tilepro.c:3635 elfxx-tilegx.c:4019 elfxx-x86.c:1393 +#: elfnn-aarch64.c:9704 elfnn-riscv.c:2522 #, c-format msgid "discarded output section: `%pA'" msgstr "section de sortie rejetée: « %pA »" -#: elf32-v850.c:153 +#: elf32-v850.c:152 #, c-format msgid "variable `%s' cannot occupy in multiple small data regions" msgstr "variable « %s » ne peut occuper de multiples petites régions de données" -#: elf32-v850.c:156 +#: elf32-v850.c:155 #, c-format msgid "variable `%s' can only be in one of the small, zero, and tiny data regions" msgstr "variable « %s » peut seulement être dans une région de données petite, zéro ou minuscule" -#: elf32-v850.c:159 +#: elf32-v850.c:158 #, c-format msgid "variable `%s' cannot be in both small and zero data regions simultaneously" msgstr "variable « %s » ne peut être dans une région de données petite et zéro à la fois" -#: elf32-v850.c:162 +#: elf32-v850.c:161 #, c-format msgid "variable `%s' cannot be in both small and tiny data regions simultaneously" msgstr "variable « %s » ne peut être dans une région de données petite et minuscule à la fois" -#: elf32-v850.c:165 +#: elf32-v850.c:164 #, c-format msgid "variable `%s' cannot be in both zero and tiny data regions simultaneously" msgstr "variable « %s » ne peut être dans une région de données zéro et minuscule à la fois" -#: elf32-v850.c:463 +#: elf32-v850.c:462 msgid "failed to find previous HI16 reloc" msgstr "échec de repérage du réadressage HI16 précédent" -#: elf32-v850.c:2303 +#: elf32-v850.c:2302 msgid "could not locate special linker symbol __gp" msgstr "ne peut repérer le symbole spécial d'édition de lien __gp" -#: elf32-v850.c:2307 +#: elf32-v850.c:2306 msgid "could not locate special linker symbol __ep" msgstr "ne peut repérer le symbole spécial d'édition de lien __ep" -#: elf32-v850.c:2311 +#: elf32-v850.c:2310 msgid "could not locate special linker symbol __ctbp" msgstr "ne peut repérer le symbole spécial d'édition de lien __ctbp" -#: elf32-v850.c:2532 +#: elf32-v850.c:2531 #, c-format msgid "error: %pB needs 8-byte alignment but %pB is set for 4-byte alignment" msgstr "erreur: %pB a besoin d'un alignement sur 8 octets mais %pB est défini pour un alignement sur 4 octets" -#: elf32-v850.c:2548 +#: elf32-v850.c:2547 #, c-format msgid "error: %pB uses 64-bit doubles but %pB uses 32-bit doubles" msgstr "erreur: %pB utilise des doubles 64 bits alors que %pB utilise des doubles 32 bits" -#: elf32-v850.c:2563 +#: elf32-v850.c:2562 #, c-format msgid "error: %pB uses FPU-3.0 but %pB only supports FPU-2.0" msgstr "erreur: %pB utilise FPU-3.0 mais %pB ne supporte que FPU-2.0" -#: elf32-v850.c:2595 +#: elf32-v850.c:2594 #, c-format msgid " alignment of 8-byte entities: " msgstr " alignement d'entités de 8 octets:" -#: elf32-v850.c:2598 +#: elf32-v850.c:2597 #, c-format msgid "4-byte" msgstr "4 octets" -#: elf32-v850.c:2599 +#: elf32-v850.c:2598 #, c-format msgid "8-byte" msgstr "8 octets" -#: elf32-v850.c:2600 elf32-v850.c:2612 +#: elf32-v850.c:2599 elf32-v850.c:2611 #, c-format msgid "not set" msgstr "pas défini" -#: elf32-v850.c:2601 elf32-v850.c:2613 elf32-v850.c:2625 elf32-v850.c:2636 -#: elf32-v850.c:2647 elf32-v850.c:2658 +#: elf32-v850.c:2600 elf32-v850.c:2612 elf32-v850.c:2624 elf32-v850.c:2635 +#: elf32-v850.c:2646 elf32-v850.c:2657 #, c-format msgid "unknown: %x" msgstr "inconnu: %x" -#: elf32-v850.c:2607 +#: elf32-v850.c:2606 #, c-format msgid " size of doubles: " msgstr " taille des doubles: " -#: elf32-v850.c:2610 +#: elf32-v850.c:2609 #, c-format msgid "4-bytes" msgstr "4 octets" -#: elf32-v850.c:2611 +#: elf32-v850.c:2610 #, c-format msgid "8-bytes" msgstr "8 octets" -#: elf32-v850.c:2619 +#: elf32-v850.c:2618 #, c-format msgid " FPU support required: " msgstr " support du FPU requis: " -#: elf32-v850.c:2622 +#: elf32-v850.c:2621 #, c-format msgid "FPU-2.0" msgstr "FPU-2.0" -#: elf32-v850.c:2623 +#: elf32-v850.c:2622 #, c-format msgid "FPU-3.0" msgstr "FPU-3.0" -#: elf32-v850.c:2624 +#: elf32-v850.c:2623 #, c-format msgid "none" msgstr "aucun" -#: elf32-v850.c:2631 +#: elf32-v850.c:2630 #, c-format msgid "SIMD use: " msgstr "utilisation SIMD: " -#: elf32-v850.c:2634 elf32-v850.c:2645 elf32-v850.c:2656 +#: elf32-v850.c:2633 elf32-v850.c:2644 elf32-v850.c:2655 #, c-format msgid "yes" msgstr "oui" -#: elf32-v850.c:2635 elf32-v850.c:2646 elf32-v850.c:2657 +#: elf32-v850.c:2634 elf32-v850.c:2645 elf32-v850.c:2656 #, c-format msgid "no" msgstr "non" -#: elf32-v850.c:2642 +#: elf32-v850.c:2641 #, c-format msgid "CACHE use: " msgstr "utilisation CACHE: " -#: elf32-v850.c:2653 +#: elf32-v850.c:2652 #, c-format msgid "MMU use: " msgstr "utilisation MMU: " -#: elf32-v850.c:2820 elf32-v850.c:2876 +#: elf32-v850.c:2819 elf32-v850.c:2875 #, c-format msgid "%pB: architecture mismatch with previous modules" msgstr "%pB: l'architecture ne concorde pas avec les modules précédents" #. xgettext:c-format. -#: elf32-v850.c:2894 +#: elf32-v850.c:2893 #, c-format msgid "private flags = %lx: " msgstr "fanions privés = %lx: " -#: elf32-v850.c:2899 +#: elf32-v850.c:2898 #, c-format msgid "unknown v850 architecture" msgstr "architecture v850 inconnue" -#: elf32-v850.c:2901 +#: elf32-v850.c:2900 #, c-format msgid "v850 E3 architecture" msgstr "architecture v850 E3" -#: elf32-v850.c:2903 elf32-v850.c:2910 +#: elf32-v850.c:2902 elf32-v850.c:2909 #, c-format msgid "v850 architecture" msgstr "architecture v850" -#: elf32-v850.c:2911 +#: elf32-v850.c:2910 #, c-format msgid "v850e architecture" msgstr "architecture v850e" -#: elf32-v850.c:2912 +#: elf32-v850.c:2911 #, c-format msgid "v850e1 architecture" msgstr "architecture v850e1" -#: elf32-v850.c:2913 +#: elf32-v850.c:2912 #, c-format msgid "v850e2 architecture" msgstr "architecture v850e2" -#: elf32-v850.c:2914 +#: elf32-v850.c:2913 #, c-format msgid "v850e2v3 architecture" msgstr "architecture v850e2v3" -#: elf32-v850.c:2915 +#: elf32-v850.c:2914 #, c-format msgid "v850e3v5 architecture" msgstr "architecture v850e3v5" -#: elf32-v850.c:3609 elf32-v850.c:3848 +#: elf32-v850.c:3612 elf32-v850.c:3851 #, c-format msgid "%pB: %#: warning: %s points to unrecognized insns" msgstr "%pB: %#: attention: %s pointe vers l'insn inconnue" -#: elf32-v850.c:3619 elf32-v850.c:3858 +#: elf32-v850.c:3622 elf32-v850.c:3861 #, c-format msgid "%pB: %#: warning: %s points to unrecognized insn %#x" msgstr "%pB: %#: attention: %s pointe vers l'insn inconnue %#x" -#: elf32-v850.c:3665 elf32-v850.c:3893 +#: elf32-v850.c:3668 elf32-v850.c:3896 #, c-format msgid "%pB: %#: warning: %s points to unrecognized reloc" msgstr "%pB: %#: attention: %s pointe vers le réadressage non reconnu" -#: elf32-v850.c:3705 +#: elf32-v850.c:3708 #, c-format msgid "%pB: %#: warning: %s points to unrecognized reloc %#" msgstr "%pB: %#: attention: %s pointe vers le réadressage non reconnu à %#" @@ -3777,24 +3869,24 @@ msgid "%pB: warning: GOT addend of % to `%s' does not match previous GOT addend of %" msgstr "%pB: attention: ajout GOT de % à « %s » ne concorde par avec l'ajout GOT précédent de %" -#: elf32-vax.c:1446 +#: elf32-vax.c:1389 #, c-format msgid "%pB: warning: PLT addend of % to `%s' from %pA section ignored" msgstr "%pB: attention: ignore l'ajout PLT de % à « %s » de la section %pA" -#: elf32-vax.c:1572 +#: elf32-vax.c:1515 #, c-format msgid "%pB: warning: %s relocation against symbol `%s' from %pA section" msgstr "%pB: attention: réadressage %s vers le symbole « %s » de la section %pA" -#: elf32-vax.c:1579 +#: elf32-vax.c:1522 #, c-format msgid "%pB: warning: %s relocation to %# from %pA section" msgstr "%pB: attention: réadressage %s vers %# de la section %pA" # Les %s sont « with » ou « without » non traduits. # Heureusement, le fichier entier a été supprimé dans les sources actuelles. -#: elf32-visium.c:821 +#: elf32-visium.c:824 #, c-format msgid "%pB: compiled %s -mtune=%s and linked with modules compiled %s -mtune=%s" msgstr "%pB: compilé %s -mtune=%s et lié avec des modules compilés %s -mtune=%s" @@ -3809,238 +3901,261 @@ msgid "error reading cpu type from elf private data" msgstr "erreur lors de la lecture du type de CPU dans les données elf privées" -#: elf32-xstormy16.c:457 elf64-ia64-vms.c:2085 elf32-ia64.c:2353 -#: elf64-ia64.c:2353 +#: elf32-xstormy16.c:457 elf64-ia64-vms.c:2074 elfnn-ia64.c:2343 msgid "non-zero addend in @fptr reloc" msgstr "ajout non nul dans le réadressage @fptr" -#: elf32-xtensa.c:937 +#: elf32-xtensa.c:1001 #, c-format msgid "%pB(%pA): invalid property table" msgstr "%pB(%pA): table de propriété invalide" -#: elf32-xtensa.c:2675 +#: elf32-xtensa.c:2733 #, c-format msgid "%pB(%pA+%#): relocation offset out of range (size=%#)" msgstr "%pB(%pA+%#): décalage de réadressage hors limite (taille=%#)" -#: elf32-xtensa.c:2758 elf32-xtensa.c:2881 +#: elf32-xtensa.c:2816 elf32-xtensa.c:2939 msgid "dynamic relocation in read-only section" msgstr "réadressage dynamique dans une section en lecture seule" -#: elf32-xtensa.c:2858 +#: elf32-xtensa.c:2916 msgid "TLS relocation invalid without dynamic sections" msgstr "réadressage TLS incorrecte sans section dynamique" -#: elf32-xtensa.c:3070 +#: elf32-xtensa.c:3126 msgid "internal inconsistency in size of .got.loc section" msgstr "incohérence interne dans la taille de la section .got.loc" -#: elf32-xtensa.c:3377 +#: elf32-xtensa.c:3432 #, c-format msgid "%pB: incompatible machine type; output is 0x%x; input is 0x%x" msgstr "%pB: type de machine incompatible; sortie est 0x%x; entrée est 0x%x" -#: elf32-xtensa.c:4608 elf32-xtensa.c:4616 +#: elf32-xtensa.c:4726 elf32-xtensa.c:4734 msgid "attempt to convert L32R/CALLX to CALL failed" msgstr "échec de la tentative de convertir L32R/CALLX en CALL" -#: elf32-xtensa.c:6444 elf32-xtensa.c:6523 elf32-xtensa.c:7899 +#: elf32-xtensa.c:6559 elf32-xtensa.c:6638 elf32-xtensa.c:8064 #, c-format msgid "%pB(%pA+%#): could not decode instruction; possible configuration mismatch" msgstr "%pB(%pA+%#): l'instruction ne peut pas être décodée; la configuration est peut-être erronée" -#: elf32-xtensa.c:7638 +#: elf32-xtensa.c:7805 #, c-format msgid "%pB(%pA+%#): could not decode instruction for XTENSA_ASM_SIMPLIFY relocation; possible configuration mismatch" msgstr "%pB(%pA+%#): l'instruction ne peut pas être décodée pour un réadressage XTENSA_ASM_SIMPLIFY; la configuration est peut-être erronée" -#: elf32-xtensa.c:9493 +#: elf32-xtensa.c:9663 msgid "invalid relocation address" msgstr "adresse de réadressage incorrecte" -#: elf32-xtensa.c:9543 +#: elf32-xtensa.c:9754 msgid "overflow after relaxation" msgstr "débordement après la relâche" -#: elf32-xtensa.c:10689 +#: elf32-xtensa.c:10900 #, c-format msgid "%pB(%pA+%#): unexpected fix for %s relocation" msgstr "%pB(%pA+%#): correction inattendue pour le réadressage %s" -#: elf64-alpha.c:472 +#: elf32-z80.c:473 +#, c-format +msgid "%pB: unsupported bfd mach %#lx" +msgstr "%pB: correspondance bfd %#lx non supportée" + +#: elf32-z80.c:518 +#, c-format +msgid "%pB: unsupported mach %#x" +msgstr "%pB: correspondance %#x non supportée" + +#: elf32-z80.c:546 +#, c-format +msgid "%pB: unsupported arch %#x" +msgstr "%pB: architecture %#x non supportée" + +#: elf64-alpha.c:473 msgid "GPDISP relocation did not find ldah and lda instructions" msgstr "le réadressage GPDISP n'a pas repéré les instructions ldah et lda" -#: elf64-alpha.c:2463 +#: elf64-alpha.c:1999 elf64-alpha.c:2694 elflink.c:14885 +#, c-format +msgid "%pB: dynamic relocation against `%pT' in read-only section `%pA'\n" +msgstr "%pB: réadressage dynamique sur « %pT » dans la section en lecture seule « %pA »\n" + +#: elf64-alpha.c:2451 #, c-format msgid "%pB: .got subsegment exceeds 64K (size %d)" msgstr "%pB: le sous-segment .got excède 64K (taille %d)" -#: elf64-alpha.c:3018 elf64-alpha.c:3214 +#: elf64-alpha.c:2989 elf64-alpha.c:3183 #, c-format msgid "%pB: %pA+%#: warning: %s relocation against unexpected insn" msgstr "%pB: %pA+%#: attention: réadressage de %s sur une insn inattendue" -#: elf64-alpha.c:4415 elf64-alpha.c:4428 +#: elf64-alpha.c:4381 elf64-alpha.c:4394 #, c-format msgid "%pB: gp-relative relocation against dynamic symbol %s" msgstr "%pB: réadressage relatif au gp vers le symbole dynamique %s" -#: elf64-alpha.c:4484 +#: elf64-alpha.c:4450 #, c-format msgid "%pB: change in gp: BRSGP %s" msgstr "%pB: changé dans le GP: BRSGP %s" -#: elf64-alpha.c:4509 mach-o.c:615 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:499 +#: elf64-alpha.c:4475 mach-o.c:616 elfnn-riscv.c:485 msgid "" msgstr "" -#: elf64-alpha.c:4515 +#: elf64-alpha.c:4481 #, c-format msgid "%pB: !samegp reloc against symbol without .prologue: %s" msgstr "%pB: réadressage !samegp vers le symbole sans .prologue: %s" -#: elf64-alpha.c:4573 +#: elf64-alpha.c:4539 #, c-format msgid "%pB: unhandled dynamic relocation against %s" msgstr "%pB: réadressage dynamique non traité vers %s" -#: elf64-alpha.c:4608 +#: elf64-alpha.c:4574 #, c-format msgid "%pB: pc-relative relocation against undefined weak symbol %s" msgstr "%pB: réadressage relatif au PC vers le symbole faible non défini %s" -#: elf64-alpha.c:4674 +#: elf64-alpha.c:4640 #, c-format msgid "%pB: dtp-relative relocation against dynamic symbol %s" msgstr "%pB: réadressage relatif au dtp vers le symbole dynamique %s" -#: elf64-alpha.c:4699 +#: elf64-alpha.c:4665 #, c-format msgid "%pB: tp-relative relocation against dynamic symbol %s" msgstr "%pB: réadressage relatif au tp vers le symbole dynamique %s" +#. Only if it's not an unresolved symbol. +#: elf64-bpf.c:517 +msgid "internal error: relocation not supported" +msgstr "erreur interne: réadressage non supporté" + #: elf64-gen.c:71 #, c-format msgid "%pB: Relocations in generic ELF (EM: %d)" msgstr "%pB: Réadressages en format ELF générique (EM: %d)" -#: elf64-hppa.c:2081 +#: elf64-hppa.c:2032 #, c-format msgid "stub entry for %s cannot load .plt, dp offset = %" msgstr "l'entrée de l'ébauche pour %s ne peut charger .plt, décalage dp = %" -#: elf64-hppa.c:3286 +#: elf64-hppa.c:3236 #, c-format msgid "%pB(%pA+%#): cannot reach %s" msgstr "%pB(%pA+%#): ne peut atteindre %s" -#: elf64-ia64-vms.c:598 elf32-ia64.c:636 elf64-ia64.c:636 +#: elf64-ia64-vms.c:598 elfnn-ia64.c:639 #, c-format msgid "%pB: can't relax br at %# in section `%pA'; please use brl or indirect branch" msgstr "%pB: Ne peut relâcher br à %# dans la section « %pA ». Veuillez utiliser brl ou un branchement indirect." -#: elf64-ia64-vms.c:2040 elf32-ia64.c:2301 elf64-ia64.c:2301 +#: elf64-ia64-vms.c:2029 elfnn-ia64.c:2291 msgid "@pltoff reloc against local symbol" msgstr "réadressage @pltoff vers un symbole local" -#: elf64-ia64-vms.c:3292 elf32-ia64.c:3712 elf64-ia64.c:3712 +#: elf64-ia64-vms.c:3281 elfnn-ia64.c:3674 #, c-format msgid "%pB: short data segment overflowed (%# >= 0x400000)" msgstr "%pB: débordement du segment de données court (%# >= 0x400000)" -#: elf64-ia64-vms.c:3302 elf32-ia64.c:3722 elf64-ia64.c:3722 +#: elf64-ia64-vms.c:3291 elfnn-ia64.c:3684 #, c-format msgid "%pB: __gp does not cover short data segment" msgstr "%pB: __gp ne couvre pas le segment de données court" -#: elf64-ia64-vms.c:3572 elf32-ia64.c:3996 elf64-ia64.c:3996 +#: elf64-ia64-vms.c:3561 elfnn-ia64.c:3958 #, c-format msgid "%pB: non-pic code with imm relocation against dynamic symbol `%s'" msgstr "%pB: code non pic avec des réadressages imm vers le symbole dynamique « %s »" -#: elf64-ia64-vms.c:3636 elf32-ia64.c:4064 elf64-ia64.c:4064 +#: elf64-ia64-vms.c:3625 elfnn-ia64.c:4026 #, c-format msgid "%pB: @gprel relocation against dynamic symbol %s" msgstr "%pB: réadressage @gprel vers le symbole dynamique %s" -#: elf64-ia64-vms.c:3695 elf32-ia64.c:4127 elf64-ia64.c:4127 +#: elf64-ia64-vms.c:3684 elfnn-ia64.c:4089 #, c-format msgid "%pB: linking non-pic code in a position independent executable" msgstr "%pB: liaison de code non-pic dans un exécutable à position indépendante" -#: elf64-ia64-vms.c:3797 elf32-ia64.c:4265 elf64-ia64.c:4265 +#: elf64-ia64-vms.c:3786 elfnn-ia64.c:4227 #, c-format msgid "%pB: @internal branch to dynamic symbol %s" msgstr "%pB: branchement @internal vers le symbole dynamique %s" -#: elf64-ia64-vms.c:3800 elf32-ia64.c:4268 elf64-ia64.c:4268 +#: elf64-ia64-vms.c:3789 elfnn-ia64.c:4230 #, c-format msgid "%pB: speculation fixup to dynamic symbol %s" msgstr "%pB: spéculation d'ajustements vers le symbole dynamique %s" -#: elf64-ia64-vms.c:3803 elf32-ia64.c:4271 elf64-ia64.c:4271 +#: elf64-ia64-vms.c:3792 elfnn-ia64.c:4233 #, c-format msgid "%pB: @pcrel relocation against dynamic symbol %s" msgstr "%pB: réadressage @pcrel vers le symbole dynamique %s" -#: elf64-ia64-vms.c:3927 elf32-ia64.c:4468 elf64-ia64.c:4468 +#: elf64-ia64-vms.c:3916 elfnn-ia64.c:4430 msgid "unsupported reloc" msgstr "réadressage non supportée" -#: elf64-ia64-vms.c:3964 elf32-ia64.c:4506 elf64-ia64.c:4506 +#: elf64-ia64-vms.c:3953 elfnn-ia64.c:4468 #, c-format msgid "%pB: missing TLS section for relocation %s against `%s' at %# in section `%pA'." msgstr "%pB: section TLS manquante pour le réadressage %s vers « %s » à %# dans la section « %pA »." -#: elf64-ia64-vms.c:3981 elf32-ia64.c:4523 elf64-ia64.c:4523 +#: elf64-ia64-vms.c:3970 elfnn-ia64.c:4485 #, c-format msgid "%pB: Can't relax br (%s) to `%s' at %# in section `%pA' with size %# (> 0x1000000)." msgstr "%pB: Ne peut pas relâcher br (%s) sur « %s » à %# dans la section « %pA » avec la taille %# (> 0x1000000)." -#: elf64-ia64-vms.c:4273 elf32-ia64.c:4781 elf64-ia64.c:4781 +#: elf64-ia64-vms.c:4266 elfnn-ia64.c:4746 #, c-format msgid "%pB: linking trap-on-NULL-dereference with non-trapping files" msgstr "%pB: édition de liens trap-on-NULL-dereference avec des fichiers non-trapping" -#: elf64-ia64-vms.c:4282 elf32-ia64.c:4790 elf64-ia64.c:4790 +#: elf64-ia64-vms.c:4275 elfnn-ia64.c:4755 #, c-format msgid "%pB: linking big-endian files with little-endian files" msgstr "%pB: édition de liens entre des fichiers à octets de poids fort et des fichiers à octets de poids faible" -#: elf64-ia64-vms.c:4291 elf32-ia64.c:4799 elf64-ia64.c:4799 +#: elf64-ia64-vms.c:4284 elfnn-ia64.c:4764 #, c-format msgid "%pB: linking 64-bit files with 32-bit files" msgstr "%pB: édition de liens entre fichiers 64 bits et fichiers 32 bits" -#: elf64-ia64-vms.c:4300 elf32-ia64.c:4808 elf64-ia64.c:4808 +#: elf64-ia64-vms.c:4293 elfnn-ia64.c:4773 #, c-format msgid "%pB: linking constant-gp files with non-constant-gp files" msgstr "%pB: édition de liens entre fichiers constant-gp et fichiers non-constant-gp" -#: elf64-ia64-vms.c:4310 elf32-ia64.c:4818 elf64-ia64.c:4818 +#: elf64-ia64-vms.c:4303 elfnn-ia64.c:4783 #, c-format msgid "%pB: linking auto-pic files with non-auto-pic files" msgstr "%pB: édition de liens entre fichiers auto-pic et fichiers non-auto-pic" -#: elf64-ia64-vms.c:5153 elflink.c:4894 +#: elf64-ia64-vms.c:5150 elflink.c:5072 #, c-format msgid "warning: alignment %u of common symbol `%s' in %pB is greater than the alignment (%u) of its section %pA" msgstr "attention: alignement %u du symbole commun « %s » dans %pB est plus grand que l'alignement (%u) de sa section %pA" -#: elf64-ia64-vms.c:5160 elflink.c:4901 +#: elf64-ia64-vms.c:5157 elflink.c:5079 #, c-format msgid "warning: alignment %u of symbol `%s' in %pB is smaller than %u in %pB" msgstr "attention: alignement %u du symbole « %s » dans %pB est plus petit que %u dans %pB" -#: elf64-ia64-vms.c:5176 elflink.c:4918 +#: elf64-ia64-vms.c:5173 elflink.c:5096 #, c-format msgid "warning: size of symbol `%s' changed from % in %pB to % in %pB" msgstr "attention: taille du symbole « %s » a changé de % dans %pB à % dans %pB" -#: elf64-mips.c:4098 +#: elf64-mips.c:4095 #, c-format msgid "%pB(%pA): relocation % has invalid symbol index %ld" msgstr "%pB(%pA): réadressage % a un index de symbole %ld invalide" @@ -4087,157 +4202,170 @@ msgid "%pB: directive LOCAL valid only with a register or absolute value" msgstr "%pB: directive LOCAL valide seulement avec un registre ou une valeur absolue" -#: elf64-mmix.c:1744 +#: elf64-mmix.c:1742 #, c-format msgid "%pB: LOCAL directive: register $% is not a local register; first global register is $%" msgstr "%pB: directive LOCAL: registre $% n'est pas un registre local; premier registre global est $%" -#: elf64-mmix.c:2173 +#: elf64-mmix.c:2167 #, c-format msgid "%pB: error: multiple definition of `%s'; start of %s is set in a earlier linked file" msgstr "%pB: erreur: multiple définitions de « %s »; début de %s est initialisé dans un précédent fichier lié" -#: elf64-mmix.c:2228 +#: elf64-mmix.c:2222 msgid "register section has contents\n" msgstr "registre de section contient\n" -#: elf64-mmix.c:2418 +#: elf64-mmix.c:2412 #, c-format msgid "internal inconsistency: remaining %lu != max %lu; please report this bug" msgstr "inconsistance interne: reste %lu != max %lu; merci de rapporter cette anomalie" -#: elf64-ppc.c:3827 +#: elf64-ppc.c:1342 +#, c-format +msgid "warning: %s should be used rather than %s" +msgstr "attention: %s devrait être utilisé au lieu de %s" + +#: elf64-ppc.c:4101 #, c-format msgid "symbol '%s' has invalid st_other for ABI version 1" msgstr "le symbole « %s » a un st_other invalide pour l'ABI à la version 1" -#: elf64-ppc.c:4002 +#: elf64-ppc.c:4281 #, c-format msgid "%pB .opd not allowed in ABI version %d" msgstr "%pB .opd pas permis dans l'ABI à la version %d" -#: elf64-ppc.c:4523 +#: elf64-ppc.c:4852 #, c-format msgid "%H: %s reloc unsupported in shared libraries and PIEs\n" msgstr "%H: le réadressage %s n'est pas supporté dans les bibliothèques partagées et les PIE\n" -#: elf64-ppc.c:4919 +#: elf64-ppc.c:5260 #, c-format msgid "%pB uses unknown e_flags 0x%lx" msgstr "%pB utilise le e_flags 0x%lx inconnu" -#: elf64-ppc.c:4927 +#: elf64-ppc.c:5268 #, c-format msgid "%pB: ABI version %ld is not compatible with ABI version %ld output" msgstr "%pB: la version ABI %ld n'est pas compatible avec la sortie de l'ABI version %ld" -#: elf64-ppc.c:4954 +#: elf64-ppc.c:5295 #, c-format msgid " [abiv%ld]" msgstr " [abiv%ld]" -#: elf64-ppc.c:6145 +#: elf64-ppc.c:6574 msgid "%P: copy reloc against `%pT' requires lazy plt linking; avoid setting LD_BIND_NOW=1 or upgrade gcc\n" msgstr "%P: le réadressage par copie sur « %pT » nécessite un lien plt paresseux; évitez de mettre LD_BIND_NOW=1 ou mettez à jour gcc\n" -#: elf64-ppc.c:6417 +#: elf64-ppc.c:6841 #, c-format msgid "%pB: undefined symbol on R_PPC64_TOCSAVE relocation" msgstr "%pB: symbole indéfini sur le réadressage R_PPC64_TOCSAVE" -#: elf64-ppc.c:6644 +#: elf64-ppc.c:7089 #, c-format msgid "dynreloc miscount for %pB, section %pA" msgstr "erreur de décompte de réadressage dynamique pour %pB, section %pA" -#: elf64-ppc.c:6733 +#: elf64-ppc.c:7178 #, c-format msgid "%pB: .opd is not a regular array of opd entries" msgstr "%pB: .opd n'est pas un tableau régulier d'entrées opd" -#: elf64-ppc.c:6743 +#: elf64-ppc.c:7188 #, c-format msgid "%pB: unexpected reloc type %u in .opd section" msgstr "%pB: type de réadressage %u inattendu dans la section .opd" -#: elf64-ppc.c:6765 +#: elf64-ppc.c:7210 #, c-format msgid "%pB: undefined sym `%s' in .opd section" msgstr "%pB: symbole « %s » indéfini dans la section .opd" -#: elf64-ppc.c:7249 +#: elf64-ppc.c:7697 msgid "warning: --plt-localentry is especially dangerous without ld.so support to detect ABI violations" msgstr "attention: --plt-localentry est particulièrement dangereux sans le support de ld.so pour détecter des violations de l'ABI" -#: elf64-ppc.c:7499 +#: elf64-ppc.c:8017 msgid "%H __tls_get_addr lost arg, TLS optimization disabled\n" msgstr "%H __tls_get_addr a perdu l'argument, optimisation TLS désactivée\n" -#: elf64-ppc.c:7876 elf64-ppc.c:8513 +#: elf64-ppc.c:8417 elf64-ppc.c:9130 #, c-format msgid "%s defined on removed toc entry" msgstr "%s défini dans une entrée toc supprimée" -#: elf64-ppc.c:8241 -#, c-format -msgid "%H: toc optimization is not supported for %s instruction\n" -msgstr "%H: l'optimisation toc n'est pas supportée pour l'instruction %s\n" - -#: elf64-ppc.c:8470 +#: elf64-ppc.c:9087 #, c-format msgid "%H: %s references optimized away TOC entry\n" msgstr "%H: %s fait référence à une entrée TOC supprimée par l'optimisation\n" -#: elf64-ppc.c:9301 +#: elf64-ppc.c:9308 +#, c-format +msgid "%H: got/toc optimization is not supported for %s instruction\n" +msgstr "%H: l'optimisation got/toc n'est pas supportée pour l'instruction %s\n" + +#: elf64-ppc.c:10135 #, c-format msgid "warning: discarding dynamic section %s" msgstr "attention: abandon de la section dynamique %s" -#: elf64-ppc.c:10215 +#: elf64-ppc.c:11277 msgid "%P: cannot find opd entry toc for `%pT'\n" msgstr "%P: l'entrée toc de opd non trouvée pour « %pT »\n" -#: elf64-ppc.c:10303 +#: elf64-ppc.c:11323 elf64-ppc.c:11867 +msgid "%F%P: Could not assign group %pA target %pA to an output section. Retry without --enable-non-contiguous-regions.\n" +msgstr "%F%P: Impossible d'assigner le groupe %pA de la cible %pA à une section de sortie. Réessayez sans --enable-non-contiguous-regions.\n" + +#: elf64-ppc.c:11385 #, c-format msgid "long branch stub `%s' offset overflow" msgstr "débordement de l'offset du branchement long de l'ébauche « %s »" -#: elf64-ppc.c:10330 +#: elf64-ppc.c:11412 #, c-format msgid "can't find branch stub `%s'" msgstr "ne peut repérer l'ébauche de branchement « %s »" -#: elf64-ppc.c:10394 elf64-ppc.c:10642 elf64-ppc.c:12791 +#: elf64-ppc.c:11476 elf64-ppc.c:11743 elf64-ppc.c:13972 #, c-format msgid "%P: linkage table error against `%pT'\n" msgstr "%P: erreur de la table de liaison vers « %pT »\n" -#: elf64-ppc.c:10820 +#: elf64-ppc.c:11939 #, c-format msgid "can't build branch stub `%s'" msgstr "ne peut construire l'ébauche de branchement « %s »" -#: elf64-ppc.c:11779 +#: elf64-ppc.c:12920 #, c-format msgid "%pB section %pA exceeds stub group size" msgstr "%pB section %pA dépasse la taille du groupe d'ébauche" -#: elf64-ppc.c:13189 elf64-ppc.c:13208 +#: elf64-ppc.c:14153 +msgid "__tls_get_addr call offset overflow" +msgstr "débordement du décalage dans l'appel __tls_get_addr" + +#: elf64-ppc.c:14455 elf64-ppc.c:14474 #, c-format msgid "%s offset too large for .eh_frame sdata4 encoding" msgstr "décalage %s trop grand pour l'encodage .eh_frame sdata4" -#: elf64-ppc.c:13244 +#: elf64-ppc.c:14506 #, c-format msgid "linker stubs in %u group\n" msgid_plural "linker stubs in %u groups\n" msgstr[0] "ébauches de l'éditeur de liens dans %u groupe\n" msgstr[1] "ébauches de l'éditeur de liens dans %u groupes\n" -#: elf64-ppc.c:13248 +#: elf64-ppc.c:14513 #, c-format msgid "" -" branch %lu\n" +"%s branch %lu\n" " branch toc adj %lu\n" " branch notoc %lu\n" " branch both %lu\n" @@ -4251,7 +4379,7 @@ " plt call both %lu\n" " global entry %lu" msgstr "" -" branchements %lu\n" +"%s branchements %lu\n" " aj. branchements toc %lu\n" " branchements notoc %lu\n" " branchements les deux %lu\n" @@ -4265,186 +4393,193 @@ " appels plt les deux %lu\n" " entrées globales %lu" -#: elf64-ppc.c:13583 +#: elf64-ppc.c:14913 #, c-format msgid "%H: %s used with TLS symbol `%pT'\n" msgstr "%H: %s utilisé avec le symbole TLS « %pT »\n" -#: elf64-ppc.c:13585 +#: elf64-ppc.c:14915 #, c-format msgid "%H: %s used with non-TLS symbol `%pT'\n" msgstr "%H: %s utilisé avec le symbole non-TLS « %pT »\n" -#: elf64-ppc.c:14245 +#: elf64-ppc.c:15670 #, c-format msgid "%H: call to `%pT' lacks nop, can't restore toc; (plt call stub)\n" msgstr "%H: il manque un nop à l'appel à « %pT », toc ne peut être rétablie, (ébauche de l'appel plt)\n" -#: elf64-ppc.c:14251 +#: elf64-ppc.c:15676 #, c-format msgid "%H: call to `%pT' lacks nop, can't restore toc; (toc save/adjust stub)\n" msgstr "%H: il manque un nop à l'appel à « %pT », toc ne peut être rétablie, (ébauche de la sauvegarde/ajustement de la toc)\n" -#: elf64-ppc.c:14985 +#: elf64-ppc.c:16564 #, c-format msgid "%H: %s for indirect function `%pT' unsupported\n" msgstr "%H: %s non supporté pour la fonction indirecte « %pT »\n" -#: elf64-ppc.c:15097 +#: elf64-ppc.c:16649 +#, c-format +msgid "%X%P: %pB: %s against %pT is not supported by glibc as a dynamic relocation\n" +msgstr "%X%P: %pB: %s vis-à-vis de %pT n'est pas supporté par glibc comme réadressage dynamique\n" + +#: elf64-ppc.c:16704 #, c-format msgid "%P: %pB: %s is not supported for `%pT'\n" msgstr "%P: %pB: %s n'est pas supporté pour le symbole « %pT »\n" -#: elf64-ppc.c:15326 +#: elf64-ppc.c:16963 #, c-format msgid "%H: error: %s not a multiple of %u\n" msgstr "%H: erreur: %s n'est pas un multiple de %u\n" -#: elf64-ppc.c:15349 +#: elf64-ppc.c:16986 #, c-format msgid "%H: unresolvable %s against `%pT'\n" msgstr "%H: %s ne peut être résolu par rapport à « %pT »\n" -#: elf64-ppc.c:15446 +#: elf64-ppc.c:17131 #, c-format msgid "%H: %s against `%pT': error %d\n" msgstr "%H: %s vers « %pT »: erreur %d\n" -#: elf64-s390.c:2576 +#: elf64-s390.c:2446 #, c-format msgid "%pB: `%s' non-PLT reloc for symbol defined in shared library and accessed from executable (rebuild file with -fPIC ?)" msgstr "%pB: réadressage non-PLT « %s » pour le symbole défini dans une bibliothèque partagée et accédé depuis l'exécutable (recompilez le fichier avec -fPIC ?)" -#: elf64-sparc.c:109 elfcode.h:1471 -#, c-format -msgid "%pB(%pA): relocation %d has invalid symbol index %ld" -msgstr "%pB(%pA): réadressage %d a un index de symbole %ld invalide" - -#: elf64-sparc.c:467 +#: elf64-sparc.c:478 #, c-format msgid "%pB: only registers %%g[2367] can be declared using STT_REGISTER" msgstr "%pB: seuls les registres %%g[2367] peuvent être déclarés en utilisant les registres STT_REGISTER" -#: elf64-sparc.c:488 +#: elf64-sparc.c:499 #, c-format msgid "register %%g%d used incompatibly: %s in %pB, previously %s in %pB" msgstr "registre %%g%d utilisé de manière incompatible: %s dans %pB précédemment %s dans %pB" -#: elf64-sparc.c:512 +#: elf64-sparc.c:523 #, c-format msgid "symbol `%s' has differing types: REGISTER in %pB, previously %s in %pB" msgstr "symbole « %s » a des types qui diffèrent: REGISTRE dans %pB, précédemment %s dans %pB" -#: elf64-sparc.c:559 +#: elf64-sparc.c:570 #, c-format msgid "Symbol `%s' has differing types: %s in %pB, previously REGISTER in %pB" msgstr "Symbole « %s » a des types qui diffèrent: %s dans %pB, précédemment REGISTRE dans %pB" -#: elf64-sparc.c:691 +#: elf64-sparc.c:702 #, c-format msgid "%pB: linking UltraSPARC specific with HAL specific code" msgstr "%pB: édition de liens spécifiques pour UltraSPARC avec du code spécifique HAL" -#: elf64-x86-64.c:1412 +#: elf64-x86-64.c:1417 msgid "hidden symbol " msgstr "symbole caché " -#: elf64-x86-64.c:1415 +#: elf64-x86-64.c:1420 msgid "internal symbol " msgstr "symbole interne " -#: elf64-x86-64.c:1418 elf64-x86-64.c:1422 +#: elf64-x86-64.c:1423 elf64-x86-64.c:1427 msgid "protected symbol " msgstr "symbole protégé " -#: elf64-x86-64.c:1424 +#: elf64-x86-64.c:1429 msgid "symbol " msgstr "symbole " -#: elf64-x86-64.c:1425 elf64-x86-64.c:1435 -msgid "; recompile with -fPIC" -msgstr "; recompilez avec -fPIC" - -#: elf64-x86-64.c:1430 +#: elf64-x86-64.c:1435 msgid "undefined " msgstr "non défini " -#: elf64-x86-64.c:1439 +#: elf64-x86-64.c:1445 msgid "a shared object" msgstr "un objet partagé" -#: elf64-x86-64.c:1441 +#: elf64-x86-64.c:1447 +msgid "; recompile with -fPIC" +msgstr "; recompilez avec -fPIC" + +#: elf64-x86-64.c:1452 msgid "a PIE object" msgstr "un objet PIE" -#: elf64-x86-64.c:1443 +#: elf64-x86-64.c:1454 msgid "a PDE object" msgstr "un objet PDE" +#: elf64-x86-64.c:1456 +msgid "; recompile with -fPIE" +msgstr "; recompilez avec -fPIE" + # Les %s%s au début de %s%s« %s » peuvent être « non défini » ou rien pour le premier et # un des fragments ci-dessus pour le second ce qui donne par exemple « symbole interne non défini» en inversant les deux %s. # Malheureusement, on ne peut pas inverser les %s car la syntaxe %1$s a été ajoutée le 5/11/2017 à bfd comme indiqué # dans le bug https://sourceware.org/bugzilla/show_bug.cgi?id=22717. # L'avant dernier %s est l'un des trois messages ci-dessus telle que "un objet partagé". # Le dernier %s collé au dernier %s peut être rien ou un des fragments traduits ci-dessus et commençant par un point-virgule. -#: elf64-x86-64.c:1446 +#: elf64-x86-64.c:1460 #, c-format msgid "%pB: relocation %s against %s%s`%s' can not be used when making %s%s" msgstr "%pB: réadressage %s vers %s%s« %s » ne peut pas être utilisé en créant %s%s" -#: elf64-x86-64.c:1931 +#: elf64-x86-64.c:1968 #, c-format msgid "%pB: relocation %s against symbol `%s' isn't supported in x32 mode" msgstr "%pB: le réadressage %s sur le symbole « %s » n'est pas supporté en mode x32" -#: elf64-x86-64.c:2073 +#: elf64-x86-64.c:2124 #, c-format msgid "%pB: '%s' accessed both as normal and thread local symbol" msgstr "%pB: symbole « %s » accédé à la fois comme normal et comme local au thread" -#: elf64-x86-64.c:2696 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:5302 +#: elf64-x86-64.c:2747 elfnn-aarch64.c:5546 #, c-format msgid "%pB: relocation %s against STT_GNU_IFUNC symbol `%s' has non-zero addend: %" msgstr "%pB: le réadressage %s vers le symbole STT_GNU_IFUNC « %s » a l'opérande non nul: %" -#: elf64-x86-64.c:2934 +#: elf64-x86-64.c:2992 #, c-format msgid "%pB: relocation R_X86_64_GOTOFF64 against undefined %s `%s' can not be used when making a shared object" msgstr "%pB: réadressage R_X86_64_GOTOFF64 sur le symbole %s « %s » non défini ne peut pas être utilisé lors de la création d'un objet partagé" # Le %s protégée est soit « function » ou « data » sans traduction. # Cette construction scabreuse a déjà été enlevée dans les sources. -#: elf64-x86-64.c:2948 +#: elf64-x86-64.c:3006 #, c-format msgid "%pB: relocation R_X86_64_GOTOFF64 against protected %s `%s' can not be used when making a shared object" msgstr "%pB: réadressage R_X86_64_GOTOFF64 vers la %s protégée « %s » ne peut pas être utilisé lors de la création d'un objet partagé" -#: elf64-x86-64.c:3208 +#: elf64-x86-64.c:3283 #, c-format msgid "%pB: addend %s%#x in relocation %s against symbol `%s' at %# in section `%pA' is out of range" msgstr "%pB: l'opérande %s%#x dans le réadressage %s vers le symbole « %s » à %# dans la section « %pA » est hors limite" -#: elf64-x86-64.c:3885 +#: elf64-x86-64.c:3417 elflink.c:13267 +msgid "%F%P: corrupt input: %pB\n" +msgstr "%F%P: entrée corrompue: %pB\n" + +#: elf64-x86-64.c:4101 msgid "%F%P: failed to convert GOTPCREL relocation; relink with --no-relax\n" msgstr "%F%P: impossible de convertir le réadressage GOTPCREL: éditez les liens à nouveau avec --no-relax\n" -#: elf64-x86-64.c:4043 +#: elf64-x86-64.c:4259 #, c-format msgid "%F%pB: PC-relative offset overflow in PLT entry for `%s'\n" msgstr "%F%pB: débordement du décalage relatif au PC dans l'entrée PLT pour « %s »\n" -#: elf64-x86-64.c:4106 +#: elf64-x86-64.c:4322 #, c-format msgid "%F%pB: branch displacement overflow in PLT entry for `%s'\n" msgstr "%F%pB: débordement du déplacement de branchement dans l'entrée PLT pour « %s »\n" -#: elf64-x86-64.c:4159 +#: elf64-x86-64.c:4375 #, c-format msgid "%F%pB: PC-relative offset overflow in GOT PLT entry for `%s'\n" msgstr "%F%pB: débordement du décalage relatif au PC dans l'entrée PLT GOT pour « %s »\n" -#: elfcode.h:323 +#: elfcode.h:326 msgid "warning: %pB has a corrupt section with a size (%" msgstr "attention: %pB a une section corrompue avec une taille (%" @@ -4453,656 +4588,813 @@ msgid "warning: %pB has a corrupt string table index - ignoring" msgstr "attention: %pB a un index de table de chaînes corrompu - ignoré" -#: elfcode.h:1212 +#: elfcode.h:1228 #, c-format msgid "%pB: version count (%) does not match symbol count (%ld)" msgstr "%pB: compteur de version (%) ne concorde pas avec le symbole du compteur (%ld)" -#: elfcore.h:300 +#: elfcore.h:308 #, c-format msgid "warning: %pB is truncated: expected core file size >= %, found: %" msgstr "attention: %pB est tronqué: taille attendue du cÅ“ur du fichier >= %, obtenu: %" -#: elflink.c:1367 +#: elflink.c:1362 #, c-format msgid "%s: TLS definition in %pB section %pA mismatches non-TLS definition in %pB section %pA" msgstr "%s: définition TLS dans %pB section %pA ne correspond pas à la définition non TLS dans %pB section %pA" -#: elflink.c:1373 +#: elflink.c:1368 #, c-format msgid "%s: TLS reference in %pB mismatches non-TLS reference in %pB" msgstr "%s: référence TLS dans %pB ne correspond pas à la référence non TLS dans %pB" -#: elflink.c:1379 +#: elflink.c:1374 #, c-format msgid "%s: TLS definition in %pB section %pA mismatches non-TLS reference in %pB" msgstr "%s: définition TLS dans %pB section %pA ne correspond pas à la référence TLS dans %pB" -#: elflink.c:1385 +#: elflink.c:1380 #, c-format msgid "%s: TLS reference in %pB mismatches non-TLS definition in %pB section %pA" msgstr "%s: référence TLS dans %pB ne correspond pas à la définition non TLS dans %pB section %pA" -#: elflink.c:2075 +#: elflink.c:2071 #, c-format msgid "%pB: unexpected redefinition of indirect versioned symbol `%s'" msgstr "%pB: attention: redéfinition inattendue du symbole indirect avec version « %s »" -#: elflink.c:2452 +#: elflink.c:2448 #, c-format msgid "%pB: version node not found for symbol %s" msgstr "%pB: version du nÅ“ud pas trouvée pour le symbole %s" -#: elflink.c:2541 +#: elflink.c:2539 #, c-format msgid "%pB: bad reloc symbol index (%# >= %#lx) for offset %# in section `%pA'" msgstr "%pB: mauvais index du symbole de réadressage (%# >= %#lx) pour l'offset %# de la section « %pA »" -#: elflink.c:2553 +#: elflink.c:2551 #, c-format msgid "%pB: non-zero symbol index (%#) for offset %# in section `%pA' when the object file has no symbol table" msgstr "%pB: index de symbole non nul (%#) pour l'offset %# de la section « %pA » quand le fichier objet n'a pas de table de symboles" -#: elflink.c:2744 +#: elflink.c:2740 #, c-format msgid "%pB: relocation size mismatch in %pB section %pA" msgstr "%pB: taille du réadressage ne concorde pas dans %pB section %pA" -#: elflink.c:3066 +#: elflink.c:3069 #, c-format msgid "warning: type and size of dynamic symbol `%s' are not defined" msgstr "attention: type et taille du symbole dynamique « %s » ne sont pas définis" -#: elflink.c:3128 +#: elflink.c:3129 msgid "%P: copy reloc against protected `%pT' is dangerous\n" msgstr "%P: un réadressage copié envers un « %pT » protégé est dangereux\n" -#: elflink.c:3932 +#: elflink.c:4064 #, c-format msgid "alternate ELF machine code found (%d) in %pB, expecting %d" msgstr "code machine ELF alternatif trouvé (%d) dans %pB, %d est attendu" -#: elflink.c:4598 +#: elflink.c:4534 +#, c-format +msgid "%pB: invalid version offset %lx (max %lx)" +msgstr "%pB: décalage de version %lx invalide (max %lx)" + +#: elflink.c:4602 +#, c-format +msgid "%pB: %s local symbol at index %lu (>= sh_info of %lu)" +msgstr "%pB: symbole locale %s à l'index %lu (>= sh_info de %lu)" + +#: elflink.c:4750 +#, c-format +msgid "%pB: not enough version information" +msgstr "%pB: pas assez d'informations de version" + +#: elflink.c:4788 #, c-format msgid "%pB: %s: invalid version %u (max %d)" msgstr "%pB: %s: version invalide %u (max %d)" -#: elflink.c:4635 +#: elflink.c:4825 #, c-format msgid "%pB: %s: invalid needed version %d" msgstr "%pB: %s: version requise invalide %d" -#: elflink.c:5054 +#: elflink.c:5231 #, c-format msgid "%pB: undefined reference to symbol '%s'" msgstr "%pB: référence au symbole non défini « %s »" -#: elflink.c:6130 +#: elflink.c:6315 #, c-format msgid "%pB: stack size specified and %s set" msgstr "%pB: taille de pile spécifiée et %s défini" -#: elflink.c:6134 +#: elflink.c:6319 #, c-format msgid "%pB: %s not absolute" msgstr "%pB: %s pas supporté" -#: elflink.c:6331 +#: elflink.c:6516 #, c-format msgid "%s: undefined version: %s" msgstr "%s: version non définie: %s" -#: elflink.c:6902 +#: elflink.c:7088 #, c-format msgid "%pB: .preinit_array section is not allowed in DSO" msgstr "%pB: section .preinit_array n'est pas permise dans DSO" -#: elflink.c:8359 +#: elflink.c:8602 #, c-format msgid "undefined %s reference in complex symbol: %s" msgstr "référence %s non définie dans le symbole complexe: %s" -#: elflink.c:8514 +#: elflink.c:8757 #, c-format msgid "unknown operator '%c' in complex symbol" msgstr "opérateur « %c » inconnu dans le symbole complexe" #. PR 21524: Let the user know if a symbol was removed by garbage collection. -#: elflink.c:8852 +#: elflink.c:9095 #, c-format msgid "%pB:%pA: error: relocation references symbol %s which was removed by garbage collection" msgstr "%pB:%pA: erreur: symbole de référence des réadressages %s qui a été supprimé par le ramasse miettes" -#: elflink.c:8855 +#: elflink.c:9098 #, c-format msgid "%pB:%pA: error: try relinking with --gc-keep-exported enabled" msgstr "%pB:%pA: erreur: essayez de rééditer les liens avec --gc-keep-exported enabled." -#: elflink.c:9091 elflink.c:9109 elflink.c:9148 elflink.c:9166 +#: elflink.c:9343 elflink.c:9361 elflink.c:9400 elflink.c:9418 #, c-format msgid "%pB: unable to sort relocs - they are in more than one size" msgstr "%pB: impossible de trier les réadressages - plusieurs tailles rencontrées" #. The section size is not divisible by either - #. something is wrong. -#: elflink.c:9125 elflink.c:9182 +#: elflink.c:9377 elflink.c:9434 #, c-format msgid "%pB: unable to sort relocs - they are of an unknown size" msgstr "%pB: impossible de trier les réadressages - leur taille est inconnue" -#: elflink.c:9234 +#: elflink.c:9486 msgid "not enough memory to sort relocations" msgstr "pas assez de mémoire pour trier les réadressages" -#: elflink.c:9502 +#: elflink.c:9767 #, c-format msgid "%pB: too many sections: %d (>= %d)" msgstr "%pB: trop de sections: %d (>= %d)" -#: elflink.c:9782 +#: elflink.c:10043 #, c-format msgid "%pB: internal symbol `%s' in %pB is referenced by DSO" msgstr "%pB: symbole interne « %s » dans %pB est référencé par DSO" -#: elflink.c:9785 +#: elflink.c:10046 #, c-format msgid "%pB: hidden symbol `%s' in %pB is referenced by DSO" msgstr "%pB: symbole caché « %s » dans %pB est référencé par DSO" -#: elflink.c:9788 +#: elflink.c:10049 #, c-format msgid "%pB: local symbol `%s' in %pB is referenced by DSO" msgstr "%pB: symbole local « %s » dans %pB est référencé par DSO" -#: elflink.c:9874 +#: elflink.c:10135 #, c-format msgid "%pB: could not find output section %pA for input section %pA" msgstr "%pB: ne peut repérer la section de sortie %pA pour la section d'entrée %pA" -#: elflink.c:10028 +#: elflink.c:10289 #, c-format msgid "%pB: protected symbol `%s' isn't defined" msgstr "%pB: symbole protégé « %s » n'est pas défini" -#: elflink.c:10031 +#: elflink.c:10292 #, c-format msgid "%pB: internal symbol `%s' isn't defined" msgstr "%pB: symbole interne « %s » n'est pas défini" -#: elflink.c:10034 +#: elflink.c:10295 #, c-format msgid "%pB: hidden symbol `%s' isn't defined" msgstr "%pB: symbole caché « %s » n'est pas défini" -#: elflink.c:10066 +#: elflink.c:10327 #, c-format msgid "%pB: no symbol version section for versioned symbol `%s'" msgstr "%pB: pas de section de version de symbole pour le symbole avec version « %s »" -#: elflink.c:10679 +#: elflink.c:10699 +#, c-format +msgid "warning: --enable-non-contiguous-regions discards section `%s' from '%s'\n" +msgstr "attention: --enable-non-contiguous-regions abandonne la section « %s » de « %s »\n" + +#: elflink.c:10951 #, c-format msgid "error: %pB: size of section %pA is not multiple of address size" msgstr "erreur: %pB: le réadressage de la section %pA n'est pas un multiple de la taille des adresses" -#: elflink.c:10724 +#: elflink.c:10996 #, c-format msgid "error: %pB contains a reloc (%#) for section %pA that references a non-existent global symbol" msgstr "erreur: %pB contient un réadressage (%#) pour la section %pA qui fait référence à un symbole global inexistant" -#: elflink.c:11484 +#: elflink.c:11739 #, c-format msgid "%pA has both ordered [`%pA' in %pB] and unordered [`%pA' in %pB] sections" msgstr "%pA a, à la fois, des sections ordonnées [« %pA » dans %pB] et désordonnées [« %pA » dans %pB]" -#: elflink.c:11490 +#: elflink.c:11745 #, c-format msgid "%pA has both ordered and unordered sections" msgstr "%pA a, à la fois, des sections ordonnées et désordonnées" -#: elflink.c:11592 +#: elflink.c:11851 #, c-format msgid "%pB: no symbol found for import library" msgstr "%pB: aucun symbole trouvé dans la bibliothèque d'importation" -#: elflink.c:12225 +#: elflink.c:12488 #, c-format msgid "%pB: file class %s incompatible with %s" msgstr "%pB: classe de fichier %s incompatible avec %s" -#: elflink.c:12442 +#: elflink.c:12704 #, c-format msgid "%pB: failed to generate import library" msgstr "%pB: échec de la génération de la bibliothèque d'importation" -#: elflink.c:12561 +#: elflink.c:12823 #, c-format msgid "warning: %s section has zero size" msgstr "attention: section %s a une taille nulle" -#: elflink.c:12609 +#: elflink.c:12871 #, c-format msgid "warning: section '%s' is being made into a note" msgstr "attention: section « %s » changé en une note" -#: elflink.c:12701 +#: elflink.c:12964 msgid "%P%X: read-only segment has dynamic relocations\n" msgstr "%P%X: segment en lecture seule a des réadressages dynamiques\n" -#: elflink.c:12704 -msgid "%P: warning: creating a DT_TEXTREL in a shared object\n" -msgstr "%P: attention: création d'un DT_TEXTREL dans un objet partagé\n" +#: elflink.c:12967 +msgid "%P: warning: creating DT_TEXTREL in a shared object\n" +msgstr "%P: attention: création de DT_TEXTREL dans un objet partagé\n" + +#: elflink.c:12970 +msgid "%P: warning: creating DT_TEXTREL in a PIE\n" +msgstr "%P: attention: création de DT_TEXTREL dans un PIE\n" -#: elflink.c:12829 +#: elflink.c:13095 msgid "%P%X: can not read symbols: %E\n" msgstr "%P%X: ne peut pas lire les symboles: %E\n" -#: elflink.c:13002 -msgid "%F%P: corrupt input: %pB\n" -msgstr "%F%P: entrée corrompue: %pB\n" +#: elflink.c:13500 +msgid "%F%P: %pB(%pA): error: need linked-to section for --gc-sections\n" +msgstr "%F%P: %pB(%pA): erreur: une section linked-to est requise pour --gc-sections\n" -#: elflink.c:13668 +#: elflink.c:13961 #, c-format msgid "%pB: %pA+%#: no symbol found for INHERIT" msgstr "%pB: %pA+%#: Pas de symbole trouvé pour INHERIT" -#: elflink.c:13844 +#: elflink.c:14002 +#, c-format +msgid "%pB: section '%pA': corrupt VTENTRY entry" +msgstr "%pB: section « %pA »: entrée VTENTRY corrompue" + +#: elflink.c:14145 #, c-format msgid "unrecognized INPUT_SECTION_FLAG %s\n" msgstr "INPUT_SECTION_FLAG %s non reconnu\n" -#: elfxx-mips.c:1450 +#: elflink.c:14891 +#, c-format +msgid "%P: %pB: warning: relocation against `%s' in read-only section `%pA'\n" +msgstr "%P: %pB: attention: réadressage sur « %s » dans la section en lecture seule « %pA »\n" + +#: elflink.c:14980 +msgid "%P: warning: GNU indirect functions with DT_TEXTREL may result in a segfault at runtime; recompile with %s\n" +msgstr "%P: attention: les fonctions indirectes GNU avec DT_TEXTREL pourraient résulter en un plantage à l'exécution; recompilez avec %s\n" + +#: elfxx-aarch64.c:477 +#, c-format +msgid "%pB: warning: Weak TLS is implementation defined and may not work as expected" +msgstr "%pB: avertissement: Le TLS faible est défini par l'implémentation et pourrait ne pas fonctionner comme attendu" + +#: elfxx-aarch64.c:738 elfnn-aarch64.c:9902 elfnn-aarch64.c:9909 +#, c-format +msgid "%pB: warning: BTI turned on by -z force-bti when all inputs do not have BTI in NOTE section." +msgstr "%pB: avertissement: BTI activé par -z force-bti alors que toutes les entrées n'ont pas BTI dans la section NOTE." + +#: elfxx-aarch64.c:758 elfxx-x86.c:2554 +msgid "%F%P: failed to create GNU property section\n" +msgstr "%F%P: échec lors de la création de la section des propriétés GNU\n" + +#: elfxx-aarch64.c:762 elfxx-x86.c:2559 +#, c-format +msgid "%F%pA: failed to align section\n" +msgstr "%F%pA: échec lors de l'alignement de la section\n" + +#: elfxx-aarch64.c:812 +#, c-format +msgid "error: %pB: " +msgstr "erreur: %pB: " + +#: elfxx-mips.c:1507 msgid "static procedure (no name)" msgstr "procédure statique (sans name)" -#: elfxx-mips.c:5718 +#: elfxx-mips.c:5782 msgid "MIPS16 and microMIPS functions cannot call each other" msgstr "Des fonctions MIPS16 et microMIPS ne peuvent pas s'appeler l'une l'autre" -#: elfxx-mips.c:6485 +#: elfxx-mips.c:6547 msgid "%X%H: unsupported JALX to the same ISA mode\n" msgstr "%X%H: JALX vers le même mode ISA n'est pas supporté\n" -#: elfxx-mips.c:6518 +#: elfxx-mips.c:6580 msgid "%X%H: unsupported jump between ISA modes; consider recompiling with interlinking enabled\n" msgstr "%X%H: saut non supporté entre modes ISA ; envisagez de recompiler avec l'interliage activé\n" -#: elfxx-mips.c:6563 +#: elfxx-mips.c:6625 msgid "%X%H: cannot convert branch between ISA modes to JALX: relocation out of range\n" msgstr "%X%H: impossible de convertir les branchements vers JALX entre modes ISA: réadressage hors portée\n" -#: elfxx-mips.c:6575 +#: elfxx-mips.c:6637 msgid "%X%H: unsupported branch between ISA modes\n" msgstr "%X%H: branchement entre modes ISA non supporté\n" -#: elfxx-mips.c:7223 +#: elfxx-mips.c:7286 #, c-format msgid "%pB: incorrect `.reginfo' section size; expected %, got %" msgstr "%pB: taille de section « .reginfo » incorrecte; % attendu, % obtenu" -#: elfxx-mips.c:7267 elfxx-mips.c:7502 +#: elfxx-mips.c:7330 elfxx-mips.c:7567 #, c-format msgid "%pB: warning: bad `%s' option size %u smaller than its header" msgstr "%pB: attention: mauvaise « %s » taille d'option %u plus petite que son en-tête" -#: elfxx-mips.c:8300 elfxx-mips.c:8426 +#: elfxx-mips.c:8374 elfxx-mips.c:8500 #, c-format msgid "%pB: warning: cannot determine the target function for stub section `%s'" msgstr "%pB: attention: ne peut pas déterminer la fonction cible de la section d'ébauche « %s »" -#: elfxx-mips.c:8558 +#: elfxx-mips.c:8632 #, c-format msgid "%pB: malformed reloc detected for section %s" msgstr "%pB: réadressage mal composé détecté dans la section %s" -#: elfxx-mips.c:8658 +#: elfxx-mips.c:8731 #, c-format msgid "%pB: GOT reloc at %# not expected in executables" msgstr "%pB: réadressage GOT à %# pas attendu dans les exécutables" -#: elfxx-mips.c:8796 +#: elfxx-mips.c:8871 #, c-format msgid "%pB: CALL16 reloc at %# not against global symbol" msgstr "%pB: Le réadressage CALL16 à %# n'est pas sur un symbole global" -#: elfxx-mips.c:9086 +#: elfxx-mips.c:9174 #, c-format msgid "%X%H: relocation %s against `%s' cannot be used when making a shared object; recompile with -fPIC\n" msgstr "%X%H: réadressage de %s en vertu de « %s » ne peut être utilisé lors de la création d'un objet partagé; recompilez avec -fPIC\n" -#: elfxx-mips.c:9422 +#: elfxx-mips.c:9300 +#, c-format +msgid "IFUNC symbol %s in dynamic symbol table - IFUNCS are not supported" +msgstr "Symbole IFUNC %s dans la table des symboles dynamiques – IFUNC n'est pas supporté" + +#: elfxx-mips.c:9303 +#, c-format +msgid "non-dynamic symbol %s in dynamic symbol table" +msgstr "symbole non dynamique %s dans la table des symboles dynamiques" + +#: elfxx-mips.c:9523 #, c-format msgid "non-dynamic relocations refer to dynamic symbol %s" msgstr "réadressages non dynamiques font référence au symbole dynamique %s" -#: elfxx-mips.c:10350 +#: elfxx-mips.c:10457 #, c-format msgid "%pB: can't find matching LO16 reloc against `%s' for %s at %# in section `%pA'" msgstr "%pB: ne trouve pas de réadressage LO16 correspondant sur « %s » pour %s à %# de la section « %pA »" -#: elfxx-mips.c:10490 +#: elfxx-mips.c:10597 msgid "small-data section exceeds 64KB; lower small-data size limit (see option -G)" msgstr "la taille des petites données de la section dépasse 64KB; abaissez la limite de taille des petites données (voyez l'option -G)" -#: elfxx-mips.c:10509 +#: elfxx-mips.c:10616 msgid "cannot convert a jump to JALX for a non-word-aligned address" msgstr "impossible de convertir un saut vers JALX pour une adresse non alignée sur un mot" -#: elfxx-mips.c:10512 +#: elfxx-mips.c:10619 msgid "jump to a non-word-aligned address" msgstr "saut vers une adresse non alignée sur un mot" -#: elfxx-mips.c:10513 +#: elfxx-mips.c:10620 msgid "jump to a non-instruction-aligned address" msgstr "saut vers une adresse non alignée sur une instruction" -#: elfxx-mips.c:10516 +#: elfxx-mips.c:10623 msgid "cannot convert a branch to JALX for a non-word-aligned address" msgstr "impossible de convertir un branchement vers JALX pour une adresse non alignée sur un mot" -#: elfxx-mips.c:10518 +#: elfxx-mips.c:10625 msgid "branch to a non-instruction-aligned address" msgstr "branchement vers une adresse non alignée sur une instruction" -#: elfxx-mips.c:10520 +#: elfxx-mips.c:10627 msgid "PC-relative load from unaligned address" msgstr "Chargement relatif au PC depuis une adresse non alignée" -#: elfxx-mips.c:10798 +#: elfxx-mips.c:10927 #, c-format msgid "%pB: `%pA' entry VMA of %# outside the 32-bit range supported; consider using `-Ttext-segment=...'" msgstr "%pB: l'entrée VMA « %pA » de %# est en dehors de la plage 32 bits supportée; envisagez d'utiliser « -Ttext-segment=… »" -#: elfxx-mips.c:10911 elfxx-mips.c:11484 +#: elfxx-mips.c:11042 elfxx-mips.c:11629 #, c-format msgid "%pB: `%pA' offset of % from `%pA' beyond the range of ADDIUPC" msgstr "%pB: « %pA » offset de % depuis « %pA » au delà de la limite de ADDIUPC" -#: elfxx-mips.c:11456 +#: elfxx-mips.c:11601 #, c-format msgid "%pB: `%pA' start VMA of %# outside the 32-bit range supported; consider using `-Ttext-segment=...'" msgstr "%pB: le début VMA « %pA » de %# est en dehors de la plage 32 bits supportée; envisagez d'utiliser « -Ttext-segment=… »" -#: elfxx-mips.c:14397 +#: elfxx-mips.c:14556 #, c-format msgid "%pB: unknown architecture %s" msgstr "%pB: Architecture %s inconnue" -#: elfxx-mips.c:14931 +#: elfxx-mips.c:15090 #, c-format msgid "%pB: illegal section name `%pA'" msgstr "%pB: nom illégal de section « %pA »" -#: elfxx-mips.c:15208 +#: elfxx-mips.c:15367 #, c-format msgid "%pB: warning: linking abicalls files with non-abicalls files" msgstr "%pB: attention: édition de liens des fichiers abicalls avec des fichiers non abicalls" -#: elfxx-mips.c:15225 +#: elfxx-mips.c:15384 #, c-format msgid "%pB: linking 32-bit code with 64-bit code" msgstr "%pB: édition de liens de code 32 bits avec du code 64 bits" -#: elfxx-mips.c:15257 elfxx-mips.c:15323 elfxx-mips.c:15338 +#: elfxx-mips.c:15416 elfxx-mips.c:15482 elfxx-mips.c:15497 #, c-format msgid "%pB: linking %s module with previous %s modules" msgstr "%pB: édition de liens du module %s avec les modules précédents %s" -#: elfxx-mips.c:15281 +#: elfxx-mips.c:15440 #, c-format msgid "%pB: ABI mismatch: linking %s module with previous %s modules" msgstr "%pB: ABI ne concorde pas: édition de lien du module %s avec les modules précédents %s" -#: elfxx-mips.c:15306 +#: elfxx-mips.c:15465 #, c-format msgid "%pB: ASE mismatch: linking %s module with previous %s modules" msgstr "%pB: ASE ne concorde pas: édition de lien du module %s avec les modules précédents %s" -#: elfxx-mips.c:15440 +#: elfxx-mips.c:15599 #, c-format msgid "warning: %pB uses unknown floating point ABI %d (set by %pB), %pB uses unknown floating point ABI %d" msgstr "Attention: %pB utilise l'ABI virgule flottante inconnue %d (définie par %pB), %pB utilise l'ABI virgule flottante inconnue %d" -#: elfxx-mips.c:15446 +#: elfxx-mips.c:15605 #, c-format msgid "warning: %pB uses unknown floating point ABI %d (set by %pB), %pB uses %s" msgstr "Attention: %pB utilise l'ABI virgule flottante inconnue %d (définie par %pB), %pB utilise %s" -#: elfxx-mips.c:15452 +#: elfxx-mips.c:15611 #, c-format msgid "warning: %pB uses %s (set by %pB), %pB uses unknown floating point ABI %d" msgstr "Attention: %pB utilise %s (défini par %pB), %pB utilise l'ABI virgule flottante inconnue %d" -#: elfxx-mips.c:15466 +#: elfxx-mips.c:15625 #, c-format msgid "warning: %pB uses %s (set by %pB), %pB uses %s" msgstr "Attention: %pB utilise %s (défini par %pB), %pB utilise « %s »" -#: elfxx-mips.c:15485 +#: elfxx-mips.c:15644 #, c-format msgid "warning: %pB uses %s (set by %pB), %pB uses unknown MSA ABI %d" msgstr "Attention: %pB utilise %s (défini par %pB), %pB utilise l'ABI MSA inconnue %d" -#: elfxx-mips.c:15497 +#: elfxx-mips.c:15656 #, c-format msgid "warning: %pB uses unknown MSA ABI %d (set by %pB), %pB uses %s" msgstr "Attention: %pB utilise l'ABI MSA inconnue %d (définie par %pB), %pB utilise %s" -#: elfxx-mips.c:15506 +#: elfxx-mips.c:15665 #, c-format msgid "warning: %pB uses unknown MSA ABI %d (set by %pB), %pB uses unknown MSA ABI %d" msgstr "Attention: %pB utilise l'ABI MSA inconnue %d (définie par %pB), %pB utilise l'ABI MSA inconnue %d" -#: elfxx-mips.c:15568 +#: elfxx-mips.c:15727 #, c-format msgid "%pB: endianness incompatible with that of the selected emulation" msgstr "%pB: système de poids fort ou faible incompatible avec celui sélectionné pour l'émulation" -#: elfxx-mips.c:15582 +#: elfxx-mips.c:15741 #, c-format msgid "%pB: ABI is incompatible with that of the selected emulation" msgstr "%pB: ABI est incompatible avec celui sélectionné pour l'émulation" -#: elfxx-mips.c:15634 +#: elfxx-mips.c:15794 #, c-format msgid "%pB: warning: inconsistent ISA between e_flags and .MIPS.abiflags" msgstr "%pB: attention: ISA incohérentes entre e_flags et .MIPS.abiflags" -#: elfxx-mips.c:15639 +#: elfxx-mips.c:15799 #, c-format msgid "%pB: warning: inconsistent FP ABI between .gnu.attributes and .MIPS.abiflags" msgstr "%pB: attention: ABI FP incohérentes entre .gnu.attributes and .MIPS.abiflags" -#: elfxx-mips.c:15643 +#: elfxx-mips.c:15803 #, c-format msgid "%pB: warning: inconsistent ASEs between e_flags and .MIPS.abiflags" msgstr "%pB: attention: ASE incohérents entre e_flags et .MIPS.abiflags" -#: elfxx-mips.c:15650 +#: elfxx-mips.c:15810 #, c-format msgid "%pB: warning: inconsistent ISA extensions between e_flags and .MIPS.abiflags" msgstr "%pB: attention: extensions ISA incohérentes entre e_flags et .MIPS.abiflags" -#: elfxx-mips.c:15654 +#: elfxx-mips.c:15814 #, c-format msgid "%pB: warning: unexpected flag in the flags2 field of .MIPS.abiflags (0x%lx)" msgstr "%pB: attention: fanion inattendu dans le champ flags2 de .MIPS.abiflags (0x%lx)" -#: elfxx-mips.c:15843 +#: elfxx-mips.c:16005 msgid "-mips32r2 -mfp64 (12 callee-saved)" msgstr "-mips32r2 -mfp64 (12 callee-saved)" -#: elfxx-mips.c:15905 elfxx-mips.c:15916 +#: elfxx-mips.c:16067 elfxx-mips.c:16078 msgid "None" msgstr "aucun" -#: elfxx-mips.c:15907 elfxx-mips.c:15976 +#: elfxx-mips.c:16069 elfxx-mips.c:16138 msgid "Unknown" msgstr "Inconnu" -#: elfxx-mips.c:15987 +#: elfxx-mips.c:16149 #, c-format msgid "Hard or soft float\n" msgstr "Flottant matériel ou logiciel\n" -#: elfxx-mips.c:15990 +#: elfxx-mips.c:16152 #, c-format msgid "Hard float (double precision)\n" msgstr "Flottant matériel (double précision)\n" -#: elfxx-mips.c:15993 +#: elfxx-mips.c:16155 #, c-format msgid "Hard float (single precision)\n" msgstr "Flottant matériel (simple précision)\n" -#: elfxx-mips.c:15996 +#: elfxx-mips.c:16158 #, c-format msgid "Soft float\n" msgstr "Flottant logiciel\n" -#: elfxx-mips.c:15999 +#: elfxx-mips.c:16161 #, c-format msgid "Hard float (MIPS32r2 64-bit FPU 12 callee-saved)\n" msgstr "Flottant matériel (MIPS32r2 64 bits FPU 12 callee-saved)\n" -#: elfxx-mips.c:16002 +#: elfxx-mips.c:16164 #, c-format msgid "Hard float (32-bit CPU, Any FPU)\n" msgstr "Flottant matériel (processeur 32 bits, tout coprocesseur)\n" -#: elfxx-mips.c:16005 +#: elfxx-mips.c:16167 #, c-format msgid "Hard float (32-bit CPU, 64-bit FPU)\n" msgstr "Flottant matériel (processeur 32 bits, coprocesseur 64 bits)\n" -#: elfxx-mips.c:16008 +#: elfxx-mips.c:16170 #, c-format msgid "Hard float compat (32-bit CPU, 64-bit FPU)\n" msgstr "Compatibilité flottant matériel (processeur 32 bits, coprocesseur 64 bits)\n" -#: elfxx-mips.c:16040 +#: elfxx-mips.c:16202 #, c-format msgid " [abi=O32]" msgstr " [abi=O32]" -#: elfxx-mips.c:16042 +#: elfxx-mips.c:16204 #, c-format msgid " [abi=O64]" msgstr " [abi=O64]" -#: elfxx-mips.c:16044 +#: elfxx-mips.c:16206 #, c-format msgid " [abi=EABI32]" msgstr " [abi=EABI32]" -#: elfxx-mips.c:16046 +#: elfxx-mips.c:16208 #, c-format msgid " [abi=EABI64]" msgstr " [abi=EABI64]" -#: elfxx-mips.c:16048 +#: elfxx-mips.c:16210 #, c-format msgid " [abi unknown]" msgstr " [abi inconnu]" -#: elfxx-mips.c:16050 +#: elfxx-mips.c:16212 #, c-format msgid " [abi=N32]" msgstr " [abi=N32]" -#: elfxx-mips.c:16052 +#: elfxx-mips.c:16214 #, c-format msgid " [abi=64]" msgstr " [abi=64]" -#: elfxx-mips.c:16054 +#: elfxx-mips.c:16216 #, c-format msgid " [no abi set]" msgstr " [aucun jeu abi]" -#: elfxx-mips.c:16079 +#: elfxx-mips.c:16241 #, c-format msgid " [unknown ISA]" msgstr " [ISA inconnu]" -#: elfxx-mips.c:16099 +#: elfxx-mips.c:16261 #, c-format msgid " [not 32bitmode]" msgstr " [aucun mode 32 bits]" -#: elfxx-sparc.c:3113 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:5286 +#: elfxx-riscv.c:1063 +#, c-format +msgid "-march=%s: Expect number after `%dp'." +msgstr "-march=%s: Nombre attendu après « %dp »." + +#: elfxx-riscv.c:1174 +#, c-format +msgid "-march=%s: rv%de is not a valid base ISA" +msgstr "-march=%s: rv%de n'est pas une base ISA valable" + +#: elfxx-riscv.c:1214 +#, c-format +msgid "-march=%s: first ISA subset must be `e', `i' or `g'" +msgstr "-march=%s: le premier sous-ensemble ISA doit être « e », « i » ou « g »" + +#: elfxx-riscv.c:1242 +#, c-format +msgid "-march=%s: unsupported ISA subset `%c'" +msgstr "-march=%s: sous-ensemble ISA « %c » non supporté" + +#: elfxx-riscv.c:1245 +#, c-format +msgid "-march=%s: ISA string is not in canonical order. `%c'" +msgstr "-march=%s: la chaîne ISA n'est pas dans l'ordre canonique. « %c »" + +#: elfxx-riscv.c:1364 +#, c-format +msgid "-march=%s: Invalid or unknown %s ISA extension: '%s'" +msgstr "-march=%s: Extension ISA %s invalide ou inconnue : « %s »" + +#: elfxx-riscv.c:1375 +#, c-format +msgid "-march=%s: Duplicate %s ISA extension: '%s'" +msgstr "-march=%s: Extension ISA %s dupliquée : « %s »" + +#: elfxx-riscv.c:1386 +#, c-format +msgid "-march=%s: %s ISA extension not in alphabetical order: '%s' must come before '%s'." +msgstr "-march=%s: extension ISA %s pas dans l'ordre alphabétique : « %s » doit apparaître avant « %s »." + +#: elfxx-riscv.c:1407 +#, c-format +msgid "-march=%s: %s must separate with _" +msgstr "-march=%s: %s doit séparer avec _" + +#: elfxx-riscv.c:1523 +#, c-format +msgid "-march=%s: ISA string must begin with rv32 or rv64" +msgstr "-march=%s: la chaîne ISA doit commencer par rv32 ou rv64" + +#: elfxx-riscv.c:1544 +#, c-format +msgid "-march=%s: unexpected ISA string at end: %s" +msgstr "-march=%s: chaîne ISA inattendue à la fin : %s" + +#: elfxx-riscv.c:1553 +#, c-format +msgid "-march=%s: rv32e does not support the `f' extension" +msgstr "-march=%s: rv32e ne supporte pas l'extension « f »" + +#: elfxx-riscv.c:1562 +#, c-format +msgid "-march=%s: `d' extension requires `f' extension" +msgstr "-march=%s: l'extension « d » requiert l'extension « f »" + +#: elfxx-riscv.c:1571 +#, c-format +msgid "-march=%s: `q' extension requires `d' extension" +msgstr "-march=%s: l'extension « q » requiert l'extension « d »" + +#: elfxx-riscv.c:1579 +#, c-format +msgid "-march=%s: rv32 does not support the `q' extension" +msgstr "-march=%s: rv32 ne supporte pas l'extension « q »" + +#: elfxx-sparc.c:3002 elfnn-aarch64.c:5530 #, c-format msgid "%pB: relocation %s against STT_GNU_IFUNC symbol `%s' isn't handled by %s" msgstr "%pB: le réadressage %s sur le symbole STT_GNU_IFUNC « %s » n'est pas géré par %s" -#: elfxx-tilegx.c:4254 +#: elfxx-tilegx.c:4128 #, c-format msgid "%pB: cannot link together %s and %s objects" msgstr "%pB: ne peut lier ensemble les objets %s et %s" -#: elfxx-x86.c:578 +#: elfxx-x86.c:976 #, c-format -msgid "%P: %pB: warning: relocation against `%s' in read-only section `%pA'\n" -msgstr "%P: %pB: attention: réadressage sur « %s » dans la section en lecture seule « %pA »\n" +msgid "%F%P: %pB: relocation %s against absolute symbol `%s' in section `%pA' is disallowed\n" +msgstr "%F%P: %pB: le réadressage de %s par rapport au symbole absolu « %s » dans la section « %pA » est interdit\n" -#: elfxx-x86.c:1027 +#: elfxx-x86.c:1058 msgid "%P: %pB: warning: relocation in read-only section `%pA'\n" msgstr "%P: %pB: attention: réadressage dans la section « %pA » en lecture seule\n" -#: elfxx-x86.c:1383 -msgid "%P%X: read-only segment has dynamic IFUNC relocations; recompile with -fPIC\n" -msgstr "%P%X: le segment en lecture seule a des réadressages IFUNC dynamiques; recompilez avec -fPIC\n" - -#: elfxx-x86.c:2384 +#: elfxx-x86.c:2314 #, c-format msgid "error: %pB: " msgstr "erreur: %pB: " -#: elfxx-x86.c:2609 -msgid "%F%P: failed to create GNU property section\n" -msgstr "%F%P: échec lors de la création de la section des propriétés GNU\n" +#: elfxx-x86.c:2580 +msgid "%P: %pB: warning: missing %s\n" +msgstr "%P: %pB: avertissement: %s manquant\n" + +#: elfxx-x86.c:2582 +msgid "%X%P: %pB: error: missing %s\n" +msgstr "%X%P: %pB: erreur: %s manquant\n" + +#: elfxx-x86.c:2605 +msgid "IBT and SHSTK properties" +msgstr "propriétés IBT et SHSTK" + +#: elfxx-x86.c:2607 +msgid "IBT property" +msgstr "propriété IBT" -#: elfxx-x86.c:2614 -#, c-format -msgid "%F%pA: failed to align section\n" -msgstr "%F%pA: échec lors de l'alignement de la section\n" +#: elfxx-x86.c:2609 +msgid "SHSTK property" +msgstr "propriété SHSTK" -#: elfxx-x86.c:2760 +#: elfxx-x86.c:2753 msgid "%F%P: failed to create VxWorks dynamic sections\n" msgstr "%F%P: échec lors de la création des sections dynamiques VxWorks\n" -#: elfxx-x86.c:2769 +#: elfxx-x86.c:2762 msgid "%F%P: failed to create GOT sections\n" msgstr "%F%P: échec lors de la création des sections GOT\n" -#: elfxx-x86.c:2787 +#: elfxx-x86.c:2780 msgid "%F%P: failed to create ifunc sections\n" msgstr "%F%P: échec lors de la création des sections ifunc\n" -#: elfxx-x86.c:2828 +#: elfxx-x86.c:2817 msgid "%F%P: failed to create GOT PLT section\n" msgstr "%F%P: échec lors de la création de la section PLT GOT\n" -#: elfxx-x86.c:2849 +#: elfxx-x86.c:2836 msgid "%F%P: failed to create IBT-enabled PLT section\n" msgstr "%F%P: échec lors de la création de la section PLT activée pour IBT\n" -#: elfxx-x86.c:2864 +#: elfxx-x86.c:2850 msgid "%F%P: failed to create BND PLT section\n" msgstr "%F%P: échec lors de la création de la section PLT BND\n" -#: elfxx-x86.c:2885 +#: elfxx-x86.c:2870 msgid "%F%P: failed to create PLT .eh_frame section\n" msgstr "%F%P: échec lors de la création de la section .eh_frame PLT\n" -#: elfxx-x86.c:2898 +#: elfxx-x86.c:2883 msgid "%F%P: failed to create GOT PLT .eh_frame section\n" msgstr "%F%P: échec lors de la création de la section .eh_frame PLT GOT\n" -#: elfxx-x86.c:2912 +#: elfxx-x86.c:2897 msgid "%F%P: failed to create the second PLT .eh_frame section\n" msgstr "%F%P: échec lors de la création de la section .eh_frame PLT\n" +#: elfxx-x86.c:2939 +msgid "%X%P: attempted static link of dynamic object `%pB'\n" +msgstr "%X%P: édition de lien statique tentée sur l'objet dynamique « %pB »\n" + #: ihex.c:230 #, c-format msgid "%pB:%d: unexpected character `%s' in Intel Hex file" @@ -5113,67 +5405,67 @@ msgid "%pB:%u: bad checksum in Intel Hex file (expected %u, found %u)" msgstr "%pB:%u: somme de contrôle erronée dans le fichier Intel hexadécimal (attendu %u, obtenu %u)" -#: ihex.c:394 +#: ihex.c:393 #, c-format msgid "%pB:%u: bad extended address record length in Intel Hex file" msgstr "%pB:%u: longueur erronée de l'enregistrement d'adresse étendue dans le fichier Intel hexadécimal" -#: ihex.c:412 +#: ihex.c:411 #, c-format msgid "%pB:%u: bad extended start address length in Intel Hex file" msgstr "%pB:%u: longueur erronée d'adresse étendue de début dans le fichier Intel hexadécimal" -#: ihex.c:430 +#: ihex.c:429 #, c-format msgid "%pB:%u: bad extended linear address record length in Intel Hex file" msgstr "%pB:%u: longueur erronée de l'enregistrement d'adresse étendue linéaire dans le fichier Intel hexadécimal" -#: ihex.c:448 +#: ihex.c:447 #, c-format msgid "%pB:%u: bad extended linear start address length in Intel Hex file" msgstr "%pB:%u: longueur erronée d'adresse étendue linéaire de début dans le fichier Intel hexadécimal" -#: ihex.c:466 +#: ihex.c:465 #, c-format msgid "%pB:%u: unrecognized ihex type %u in Intel Hex file" msgstr "%pB:%u: type ihex %u non reconnu dans le fichier Intel hexadécimal" -#: ihex.c:585 +#: ihex.c:581 #, c-format msgid "%pB: internal error in ihex_read_section" msgstr "%pB: erreur interne dans ihex_read_section" -#: ihex.c:619 +#: ihex.c:614 #, c-format msgid "%pB: bad section length in ihex_read_section" msgstr "%pB: longueur erronée de section dans ihex_read_section" -#: ihex.c:793 +#: ihex.c:785 #, c-format msgid "%pB 64-bit address %# out of range for Intel Hex file" msgstr "%pB: l'adresse 64 bits %# hors limite pour le fichier Intel hexadécimal" -#: ihex.c:852 +#: ihex.c:843 #, c-format msgid "%pB: address %# out of range for Intel Hex file" msgstr "%pB: adresse %# hors limite pour le fichier Intel hexadécimal" -#: libbfd.c:937 +#: libbfd.c:884 #, c-format msgid "%pB: unable to get decompressed section %pA" msgstr "%pB: impossible d'obtenir la section décompressée %pA" -#: libbfd.c:1101 +#: libbfd.c:1048 #, c-format msgid "Deprecated %s called at %s line %d in %s\n" msgstr "%s déprécié appelé à %s dans la ligne %d dans %s\n" -#: libbfd.c:1104 +#: libbfd.c:1051 #, c-format msgid "Deprecated %s called\n" msgstr "%s appel déprécié\n" -#: linker.c:1697 +#: linker.c:1696 #, c-format msgid "%pB: indirect symbol `%s' to `%s' is a loop" msgstr "%pB: symbole indirect « %s » vers « %s » est une boucle" @@ -5183,179 +5475,213 @@ msgid "attempt to do relocatable link with %s input and %s output" msgstr "tentative de réadressage d'un lien avec %s à l'entrée et %s à la sortie" -#: linker.c:2853 +#: linker.c:2852 #, c-format msgid "%pB: ignoring duplicate section `%pA'\n" msgstr "%pB: ignore les sections dupliquées « %pA »\n" -#: linker.c:2863 linker.c:2873 +#: linker.c:2862 linker.c:2872 #, c-format msgid "%pB: duplicate section `%pA' has different size\n" msgstr "%pB: section dupliquée « %pA » avec des tailles différentes\n" -#: linker.c:2882 linker.c:2888 +#: linker.c:2881 linker.c:2887 #, c-format msgid "%pB: could not read contents of section `%pA'\n" msgstr "%pB: ne peut pas lire le contenu de la section « %pA »\n" -#: linker.c:2893 +#: linker.c:2892 #, c-format msgid "%pB: duplicate section `%pA' has different contents\n" msgstr "%pB: section dupliquée « %pA » a des contenus différents\n" -#: linker.c:3407 +#: linker.c:3404 #, c-format msgid "%pB: compiled for a big endian system and target is little endian" msgstr "%pB: compilé pour un système à octets de poids fort alors que la cible est un système à octets de poids faible" -#: linker.c:3410 +#: linker.c:3407 #, c-format msgid "%pB: compiled for a little endian system and target is big endian" msgstr "%pB: compilé pour un système à octets de poids faible alors que la cible est un système à octets de poids fort" -#: mach-o.c:632 +#: mach-o-arm.c:172 +msgid "malformed mach-o ARM reloc pair: reloc is first reloc" +msgstr "paire de réadressage mach-o ARM mal formée : le réadressage est le premier réadressage" + +#: mach-o-arm.c:188 +#, c-format +msgid "malformed mach-o ARM reloc pair: invalid length: %d" +msgstr "paire de réadressage mach-o ARM mal formée : longueur invalide : %d" + +#: mach-o-arm.c:203 +#, c-format +msgid "malformed mach-o ARM sectdiff reloc: invalid length: %d" +msgstr "réadressage mach-o ARM sectdiff mal formé : longueur invalide : %d" + +#: mach-o-arm.c:218 +#, c-format +msgid "malformed mach-o ARM local sectdiff reloc: invalid length: %d" +msgstr "réadressage mach-o ARM local sectdiff mal formé : longueur invalide : %d" + +#: mach-o-arm.c:233 +#, c-format +msgid "malformed mach-o ARM half sectdiff reloc: invalid length: %d" +msgstr "réadressage mach-o ARM half sectdiff : longueur invalide : %d" + +#: mach-o-arm.c:265 +#, c-format +msgid "malformed mach-o ARM vanilla reloc: invalid length: %d (pcrel: %d)" +msgstr "réadressage mach-o ARM vanilla mal formé : longueur invalide : %d (pcrel : %d)" + +#: mach-o-arm.c:329 +#, c-format +msgid "malformed mach-o ARM reloc: unknown reloc type: %d" +msgstr "réadressage mach-o ARM mal formé : type de réadressage inconnu : %d" + +#: mach-o.c:633 #, c-format msgid "" msgstr "" -#: mach-o.c:687 +#: mach-o.c:688 msgid " ()" msgstr "()" -#: mach-o.c:698 +#: mach-o.c:699 #, c-format msgid " MACH-O header:\n" msgstr "En-tête MACH-O:\n" -#: mach-o.c:699 +#: mach-o.c:700 #, c-format msgid " magic: %#lx\n" msgstr " magique: %#lx\n" -#: mach-o.c:700 +#: mach-o.c:701 #, c-format msgid " cputype: %#lx (%s)\n" msgstr " typecpu: %#lx (%s)\n" -#: mach-o.c:702 +#: mach-o.c:703 #, c-format msgid " cpusubtype: %#lx%s\n" msgstr " soustypecpu: %#lx%s\n" -#: mach-o.c:704 +#: mach-o.c:705 #, c-format msgid " filetype: %#lx\n" msgstr " typefichier: %#lx\n" -#: mach-o.c:705 +#: mach-o.c:706 #, c-format msgid " ncmds: %#lx\n" msgstr " ncmds: %#lx\n" -#: mach-o.c:706 +#: mach-o.c:707 #, c-format msgid " sizeocmds: %#lx\n" msgstr " taillecmds: %#lx\n" -#: mach-o.c:707 +#: mach-o.c:708 #, c-format msgid " flags: %#lx\n" msgstr " fanions: %#lx\n" -#: mach-o.c:708 +#: mach-o.c:709 #, c-format msgid " version: %x\n" msgstr " version: %x\n" #. Urg - what has happened ? -#: mach-o.c:743 +#: mach-o.c:744 #, c-format msgid "incompatible cputypes in mach-o files: %ld vs %ld" msgstr "cputypes incompatibles dans les fichiers mach-o: %ld vs %ld" -#: mach-o.c:912 +#: mach-o.c:913 msgid "bfd_mach_o_canonicalize_symtab: unable to load symbols" msgstr "bfd_mach_o_canonicalize_symtab: impossible de charger les symboles" -#: mach-o.c:2108 +#: mach-o.c:1505 +msgid "malformed mach-o reloc: section index is greater than the number of sections" +msgstr "réadressage mach-o mal formé : l'index de section est plus grand que le nombre de sections" + +#: mach-o.c:2139 msgid "sorry: modtab, toc and extrefsyms are not yet implemented for dysymtab commands." msgstr "désolé: modtab, toc et extrefsyms ne sont pas encore implémentés pour les commandes dysymtab." -#: mach-o.c:2554 +#: mach-o.c:2587 #, c-format msgid "mach-o: there are too many sections (%u) maximum is 255,\n" msgstr "mach-o: il y a trop de sections (%u) le maximum est 255,\n" -#: mach-o.c:2661 +#: mach-o.c:2694 #, c-format msgid "unable to allocate data for load command %#x" msgstr "impossible d'allouer les données pour la commande de chargement %#x" -#: mach-o.c:2766 +#: mach-o.c:2799 #, c-format msgid "unable to write unknown load command %#x" msgstr "impossible d'écrire la commande de chargement inconnue %#x" -#: mach-o.c:2950 +#: mach-o.c:2983 #, c-format msgid "section address (%#) below start of segment (%#)" msgstr "adresse de section (%#) en deçà du début du segment (%#)" -#: mach-o.c:3092 +#: mach-o.c:3125 #, c-format msgid "unable to layout unknown load command %#x" msgstr "impossible de disposer la commande de chargement inconnue %#x" -#: mach-o.c:3628 +#: mach-o.c:3660 #, c-format msgid "bfd_mach_o_read_section_32: overlarge alignment value: %#lx, using 32 instead" msgstr "bfd_mach_o_read_section_32: valeur d'alignement démesurée: %#lx, utilise 32 à la place" -#: mach-o.c:3671 +#: mach-o.c:3703 #, c-format msgid "bfd_mach_o_read_section_64: overlarge alignment value: %#lx, using 32 instead" msgstr "bfd_mach_o_read_section_64: valeur d'alignement démesurée: %#lx, utilise 32 à la place" -#: mach-o.c:3722 +#: mach-o.c:3754 #, c-format msgid "bfd_mach_o_read_symtab_symbol: unable to read %d bytes at %u" msgstr "bfd_mach_o_read_symtab_symbol: impossible de lire %d octets à %u" -#: mach-o.c:3741 +#: mach-o.c:3773 #, c-format msgid "bfd_mach_o_read_symtab_symbol: name out of range (%lu >= %u)" msgstr "bfd_mach_o_read_symtab_symbol: nom hors limites (%lu >= %u)" -#: mach-o.c:3824 +#: mach-o.c:3856 #, c-format msgid "bfd_mach_o_read_symtab_symbol: symbol \"%s\" specified invalid section %d (max %lu): setting to undefined" msgstr "bfd_mach_o_read_symtab_symbol: le symbole « %s » spécifie la section %d invalide (max %lu): laissé non défini" -#: mach-o.c:3843 +#: mach-o.c:3875 #, c-format msgid "bfd_mach_o_read_symtab_symbol: symbol \"%s\" specified invalid type field 0x%x: setting to undefined" msgstr "bfd_mach_o_read_symtab_symbol: symbole « %s » spécifie le champ de type 0x%x invalide: laissé non défini" -#: mach-o.c:3920 -msgid "bfd_mach_o_read_symtab_symbols: unable to allocate memory for symbols" -msgstr "bfd_mach_o_read_symtab_symbols: impossible d'allouer la mémoire pour les symboles" - -#: mach-o.c:4931 +#: mach-o.c:5064 #, c-format msgid "%pB: unknown load command %#x" msgstr "%pB: commande de chargement inconnue %#x" -#: mach-o.c:5122 +#: mach-o.c:5263 #, c-format msgid "bfd_mach_o_scan: unknown architecture 0x%lx/0x%lx" msgstr "bfd_mach_o_scan: architecture 0x%lx/0x%lx inconnue" -#: mach-o.c:5227 +#: mach-o.c:5385 #, c-format msgid "unknown header byte-order value %#x" msgstr "la valeur d'ordre des octets de l'en-tête %#x est inconnue" -#: merge.c:878 +#: merge.c:895 #, c-format msgid "%pB: access beyond end of merged section (%)" msgstr "%pB: accès au-delà de la fin de la section fusionnée (%)" @@ -5370,122 +5696,122 @@ msgid "%pB: no core to allocate a symbol %d bytes long" msgstr "%pB: pas de noyau pour allouer un symbole de %d octets de longueur" -#: mmo.c:955 +#: mmo.c:952 #, c-format msgid "%pB: attempt to emit contents at non-multiple-of-4 address %#" msgstr "%pB: tentative d'émettre du contenu à une adresse %# qui n'est pas un multiple de 4" -#: mmo.c:1252 +#: mmo.c:1248 #, c-format msgid "%pB: invalid mmo file: initialization value for $255 is not `Main'\n" msgstr "%pB: fichier mmo invalide: valeur d'initialisation pour $255 n'est pas « Main »\n" -#: mmo.c:1399 +#: mmo.c:1395 #, c-format msgid "%pB: unsupported wide character sequence 0x%02X 0x%02X after symbol name starting with `%s'\n" msgstr "%pB: séquence de caractères large 0x%02X 0x%02X non supportée après le nom de symbole débutant par « %s »\n" -#: mmo.c:1633 +#: mmo.c:1628 #, c-format msgid "%pB: invalid mmo file: unsupported lopcode `%d'\n" msgstr "%pB: fichier mmo invalide: lopcode « %d » non supporté\n" -#: mmo.c:1644 +#: mmo.c:1639 #, c-format msgid "%pB: invalid mmo file: expected YZ = 1 got YZ = %d for lop_quote\n" msgstr "%pB: fichier mmo invalide: attendu YZ = 1 obtenu YZ = %d pour lop_quote\n" -#: mmo.c:1682 +#: mmo.c:1679 #, c-format msgid "%pB: invalid mmo file: expected z = 1 or z = 2, got z = %d for lop_loc\n" msgstr "%pB: fichier mmo invalide: attendu z = 1 ou z = 2, obtenu z = %d pour lop_loc\n" -#: mmo.c:1733 +#: mmo.c:1730 #, c-format msgid "%pB: invalid mmo file: expected z = 1 or z = 2, got z = %d for lop_fixo\n" msgstr "%pB: fichier mmo invalide: attendu z = 1 ou z = 2, obtenu z = %d pour lop_fixo\n" -#: mmo.c:1774 +#: mmo.c:1771 #, c-format msgid "%pB: invalid mmo file: expected y = 0, got y = %d for lop_fixrx\n" msgstr "%pB: fichier mmo invalide: attendu y = 0, obtenu y = %d pour lop_fixrx\n" -#: mmo.c:1785 +#: mmo.c:1782 #, c-format msgid "%pB: invalid mmo file: expected z = 16 or z = 24, got z = %d for lop_fixrx\n" msgstr "%pB: fichier mmo invalide: attendu z = 16 ou z = 24, obtenu z = %d pour lop_fixrx\n" -#: mmo.c:1810 +#: mmo.c:1807 #, c-format msgid "%pB: invalid mmo file: leading byte of operand word must be 0 or 1, got %d for lop_fixrx\n" msgstr "%pB: fichier mmo invalide: octet de tête du mot de l'opérande doit être 0 ou 1, obtenu %d pour lop_fixrx\n" -#: mmo.c:1835 +#: mmo.c:1832 #, c-format msgid "%pB: cannot allocate file name for file number %d, %d bytes\n" msgstr "%pB: ne peut pas allouer un nom de fichier pour le no. de fichier %d, %d octets\n" -#: mmo.c:1857 +#: mmo.c:1854 #, c-format msgid "%pB: invalid mmo file: file number %d `%s', was already entered as `%s'\n" msgstr "%pB: fichier mmo invalide: no. de fichier %d « %s », a déjà été entré en tant que « %s »\n" -#: mmo.c:1871 +#: mmo.c:1868 #, c-format msgid "%pB: invalid mmo file: file name for number %d was not specified before use\n" msgstr "%pB: fichier mmo invalide: nom de fichier %d n'a pas été spécifié avant son utilisation\n" -#: mmo.c:1978 +#: mmo.c:1975 #, c-format msgid "%pB: invalid mmo file: fields y and z of lop_stab non-zero, y: %d, z: %d\n" msgstr "%pB: fichier mmo invalide: champs y et z de lop_stab non nul, y: %d, z: %d\n" -#: mmo.c:2015 +#: mmo.c:2012 #, c-format msgid "%pB: invalid mmo file: lop_end not last item in file\n" msgstr "%pB: fichier mmo invalide: lop_end n'est pas le dernier élement dans le fichier\n" -#: mmo.c:2029 +#: mmo.c:2026 #, c-format msgid "%pB: invalid mmo file: YZ of lop_end (%ld) not equal to the number of tetras to the preceding lop_stab (%ld)\n" msgstr "%pB: fichier mmo invalide: YZ de lop_end (%ld) n'est pas égal au nombre de tetras du lop_stab précédent (%ld)\n" -#: mmo.c:2740 +#: mmo.c:2735 #, c-format msgid "%pB: invalid symbol table: duplicate symbol `%s'\n" msgstr "%pB: table de symboles invalide: symbole « %s » dupliqué\n" -#: mmo.c:2983 +#: mmo.c:2978 #, c-format msgid "%pB: bad symbol definition: `Main' set to %s rather than the start address %s\n" msgstr "%pB: Définition de symbole erronée: « Main » initialisé à %s au lieu de l'adresse de départ %s\n" -#: mmo.c:3082 +#: mmo.c:3077 #, c-format msgid "%pB: warning: symbol table too large for mmo, larger than 65535 32-bit words: %d. Only `Main' will be emitted.\n" msgstr "%pB: attention: table de symboles trop grande pour mmo, plus grande que 65535 mots de 32 bits: %d. Seul « Main » sera produit.\n" -#: mmo.c:3128 +#: mmo.c:3123 #, c-format msgid "%pB: internal error, symbol table changed size from %d to %d words\n" msgstr "%pB: erreur interne, table de symbole a changé de taille de %d à %d mots\n" -#: mmo.c:3181 +#: mmo.c:3176 #, c-format msgid "%pB: internal error, internal register section %pA had contents\n" msgstr "%pB: erreur interne, registre interne de section %pA contient quelque chose\n" -#: mmo.c:3232 +#: mmo.c:3227 #, c-format msgid "%pB: no initialized registers; section length 0\n" msgstr "%pB: pas de registre initialisé; section de longueur 0\n" -#: mmo.c:3239 +#: mmo.c:3234 #, c-format msgid "%pB: too many initialized registers; section length %" msgstr "%pB: trop de registres initialisés; longueur de section %" -#: mmo.c:3244 +#: mmo.c:3239 #, c-format msgid "%pB: invalid start address for initialized registers of length %: %#" msgstr "%pB: adresse de départ invalide pour des registres initialisés de longueur %: %#" @@ -5495,48 +5821,55 @@ msgid "unhandled OSF/1 core file section type %d" msgstr "type de section de fichier core OSF/1 %d non traité" -#: pef.c:527 +#: pdp11.c:1588 +#, c-format +msgid "%pB: symbol indicates overlay (not supported)" +msgstr "%pB: le symbole indique un recouvrement (pas supporté)" + +#: pef.c:530 #, c-format msgid "bfd_pef_scan: unknown architecture 0x%lx" msgstr "bfd_pef_scan: architecture 0x%lx inconnue" -#: pei-x86_64.c:177 pei-x86_64.c:191 pei-x86_64.c:220 +#: pei-x86_64.c:177 pei-x86_64.c:191 pei-x86_64.c:220 pei-x86_64.c:243 +#: pei-x86_64.c:253 pei-x86_64.c:278 pei-x86_64.c:290 pei-x86_64.c:304 +#: pei-x86_64.c:322 pei-x86_64.c:334 pei-x86_64.c:346 #, c-format msgid "warning: corrupt unwind data\n" msgstr "attention: données de déroulement corrompues\n" #. PR 17512: file: 2245-7442-0.004. -#: pei-x86_64.c:315 +#: pei-x86_64.c:367 #, c-format msgid "Unknown: %x" msgstr "Inconnu: %x" -#: pei-x86_64.c:365 pei-x86_64.c:375 pei-x86_64.c:384 +#: pei-x86_64.c:418 pei-x86_64.c:428 pei-x86_64.c:437 #, c-format msgid "warning: xdata section corrupt\n" msgstr "attention: section xdata corrompue\n" -#: pei-x86_64.c:439 +#: pei-x86_64.c:492 #, c-format msgid "Too many unwind codes (%ld)\n" msgstr "Trop de codes de déroulages (%ld)\n" -#: pei-x86_64.c:529 +#: pei-x86_64.c:582 #, c-format msgid "Warning: %s section size (%ld) is not a multiple of %d\n" msgstr "Attention: la taille de la section %s (%ld) n'est pas un multiple de %d\n" -#: pei-x86_64.c:536 +#: pei-x86_64.c:589 #, c-format msgid "Warning: %s section size is zero\n" msgstr "Attention: la taille de la section %s est nulle\n" -#: pei-x86_64.c:551 +#: pei-x86_64.c:604 #, c-format msgid "Warning: %s section size (%ld) is smaller than virtual size (%ld)\n" msgstr "Attention: la taille de la section %s (%ld) est plus petite que la taille virtuelle (%ld)\n" -#: pei-x86_64.c:560 +#: pei-x86_64.c:613 #, c-format msgid "" "\n" @@ -5545,12 +5878,12 @@ "\n" "La table de fonctions (interprétation du contenu de la section %s)\n" -#: pei-x86_64.c:563 +#: pei-x86_64.c:616 #, c-format msgid "vma:\t\t\tBeginAddress\t EndAddress\t UnwindData\n" msgstr " vma:\t\t\tAdresse Début\t Adresse Fin\t Unwind Info\n" -#: pei-x86_64.c:692 +#: pei-x86_64.c:745 #, c-format msgid "" "\n" @@ -5560,42 +5893,42 @@ "Vidange de %s\n" #. XXX code yet to be written. -#: peicode.h:775 +#: peicode.h:796 #, c-format msgid "%pB: unhandled import type; %x" msgstr "%pB: type d'importation non traitée; %x" -#: peicode.h:781 +#: peicode.h:802 #, c-format msgid "%pB: unrecognized import type; %x" msgstr "%pB: type d'importation non reconnu; %x" -#: peicode.h:796 +#: peicode.h:817 #, c-format msgid "%pB: unrecognized import name type; %x" msgstr "%pB: type de nom d'importation non reconnu: %x" -#: peicode.h:1211 +#: peicode.h:1225 #, c-format msgid "%pB: unrecognised machine type (0x%x) in Import Library Format archive" msgstr "%pB: type de machine non reconnu (0x%x) dans l'archive de librairie de formats d'importation" -#: peicode.h:1224 +#: peicode.h:1238 #, c-format msgid "%pB: recognised but unhandled machine type (0x%x) in Import Library Format archive" msgstr "%pB: type de machine reconnue mais non traitée (0x%x) dans l'archive da la librairie de formats d'importation" -#: peicode.h:1242 +#: peicode.h:1256 #, c-format msgid "%pB: size field is zero in Import Library Format header" msgstr "%pB: taille du champ est zéro dans l'en-tête de la librairie de formats d'importation" -#: peicode.h:1274 +#: peicode.h:1282 #, c-format msgid "%pB: string not null terminated in ILF object file" msgstr "%pB: chaîne n'est pas terminée par un zéro dans le fichier objet ILF" -#: peicode.h:1330 +#: peicode.h:1338 #, c-format msgid "%pB: error: debug data ends beyond end of debug directory" msgstr "%pB: erreur: les données de débogage s'arrêtent après la fin du répertoire de débogage" @@ -5653,32 +5986,32 @@ msgid "Partition[%d] length = 0x%.8lx (%ld)\n" msgstr "Longueur de la partition[%d] = 0x%.8lx (%ld)\n" -#: reloc.c:8232 +#: reloc.c:8291 msgid "INPUT_SECTION_FLAGS are not supported" msgstr "INPUT_SECTION_FLAGS pas supportés" -#: reloc.c:8333 +#: reloc.c:8392 #, c-format msgid "%X%P: %pB(%pA): error: relocation for offset %V has no value\n" msgstr "%X%P: %pB(%pA): erreur: le réadressage pour le décalage %V n'a pas de valeur\n" -#: reloc.c:8420 +#: reloc.c:8480 #, c-format msgid "%X%P: %pB(%pA): relocation \"%pR\" is not supported\n" msgstr "%X%P: %pB(%pA): le réadressage « %pR » n'est pas supporté\n" -#: reloc.c:8429 +#: reloc.c:8489 #, c-format msgid "%X%P: %pB(%pA): relocation \"%pR\" returns an unrecognized value %x\n" msgstr "%X%P: %pB(%pA): le réadressage « %pR » retourne une valeur %x non reconnue\n" -#: reloc.c:8491 +#: reloc.c:8551 #, c-format msgid "%pB: unrecognized relocation type %#x in section `%pA'" msgstr "%pB: réadressage inconnu (%#x) dans la section « %pA »" #. PR 21803: Suggest the most likely cause of this error. -#: reloc.c:8495 +#: reloc.c:8555 #, c-format msgid "is this version of the linker - %s - out of date ?" msgstr "la version de l'éditeur de liens – %s – est-elle dépassée ?" @@ -5688,7 +6021,7 @@ msgid "%pB: warning core file truncated" msgstr "%pB: fichier core d'avertissement tronqué" -#: som.c:5478 +#: som.c:5497 #, c-format msgid "" "\n" @@ -5697,7 +6030,7 @@ "\n" "En-tête auxiliaire de l'exec\n" -#: som.c:5787 +#: som.c:5806 msgid "som_sizeof_headers unimplemented" msgstr "som_sizeof_headers non implémenté" @@ -5711,7 +6044,7 @@ msgid "%pB:%d: byte count %d too small" msgstr "%pB:%d: nombre d'octets %d trop petit" -#: srec.c:581 srec.c:615 +#: srec.c:580 srec.c:614 #, c-format msgid "%pB:%d: bad checksum in S-record file" msgstr "%pB:%d: mauvaise somme de contrôle dans le fichier S-record" @@ -5721,73 +6054,82 @@ msgid "%pB(%pA+%#lx): stabs entry has invalid string index" msgstr "%pB(%pA+%#lx): entrée des ébauches a un indexe de chaîne invalide" -#: syms.c:1091 +#: syms.c:1085 msgid "unsupported .stab relocation" msgstr "réadressage du .stab non supporté" -#: vms-alpha.c:479 +#: vms-alpha.c:480 msgid "corrupt EIHD record - size is too small" msgstr "enregistrement EIHD corrompu – la taille est trop petite" -#: vms-alpha.c:660 +#: vms-alpha.c:666 #, c-format msgid "unable to read EIHS record at offset %#x" msgstr "impossible de lire l'enregistrement EIHS à l'offset %#x" -#: vms-alpha.c:1173 +#: vms-alpha.c:1158 +msgid "record is too small for symbol name length" +msgstr "l'enregistrement est trop petit pour la longueur du nom de symbole" + +#: vms-alpha.c:1191 #, c-format msgid "corrupt EGSD record: its size (%#x) is too small" msgstr "enregistrement EGSD corrompu: sa taille (%#x) est trop petite" -#: vms-alpha.c:1197 +#: vms-alpha.c:1215 #, c-format -msgid "corrupt EGSD record: size (%#x) is larger than remaining space (%#x)" -msgstr "enregistrement EGSD corrompu: la taille (%#x) est plus grande que l'espace restant (%#x)" +msgid "corrupt EGSD record type %d: size (%#x) is larger than remaining space (%#x)" +msgstr "type d'enregistrement EGSD %d corrompu: la taille (%#x) est plus grande que l'espace restant (%#x)" -#: vms-alpha.c:1205 +#: vms-alpha.c:1225 #, c-format -msgid "corrupt EGSD record: size (%#x) is too small" -msgstr "enregistrement EGSD corrompu: la taille (%#x) est trop petite" +msgid "corrupt EGSD record type %d: size (%#x) is too small" +msgstr "type d'enregistrement EGSD %d corrompu: la taille (%#x) est trop petite" -#: vms-alpha.c:1334 vms-alpha.c:1350 vms-alpha.c:1390 +#: vms-alpha.c:1367 #, c-format msgid "corrupt EGSD record: its psindx field is too big (%#lx)" msgstr "enregistrement EGSD corrompu: son champ psindx est trop grand (%#lx)" -#: vms-alpha.c:1419 +#: vms-alpha.c:1443 #, c-format msgid "unknown EGSD subtype %d" msgstr "sous type EGSD %d inconnu" -#: vms-alpha.c:1452 +#: vms-alpha.c:1476 #, c-format msgid "stack overflow (%d) in _bfd_vms_push" msgstr "débordement de la pile (%d) dans _bfd_vms_push" -#: vms-alpha.c:1465 +#: vms-alpha.c:1490 msgid "stack underflow in _bfd_vms_pop" msgstr "sous dépilage de la pile dans _bfd_vms_pop" +#: vms-alpha.c:1564 +#, c-format +msgid "dst_define_location %u too large" +msgstr "dst_define_location %u trop grand" + #. These names have not yet been added to this switch statement. -#: vms-alpha.c:1707 +#: vms-alpha.c:1765 #, c-format msgid "unknown ETIR command %d" msgstr "commande ETIR %d inconnue" -#: vms-alpha.c:1738 +#: vms-alpha.c:1796 msgid "corrupt vms value" msgstr "valeur vms corrompue" -#: vms-alpha.c:1866 +#: vms-alpha.c:1927 msgid "corrupt ETIR record encountered" msgstr "enregistrement ETIR corrompu rencontré" -#: vms-alpha.c:1923 +#: vms-alpha.c:1989 #, c-format msgid "bad section index in %s" msgstr "index de section erronée dans %s" -#: vms-alpha.c:1936 +#: vms-alpha.c:2003 #, c-format msgid "unsupported STA cmd %s" msgstr "commande STA %s non supportée" @@ -5797,1468 +6139,1480 @@ #. Rotate. #. Redefine symbol to current location. #. Define a literal. -#: vms-alpha.c:2116 vms-alpha.c:2147 vms-alpha.c:2238 vms-alpha.c:2396 +#: vms-alpha.c:2211 vms-alpha.c:2242 vms-alpha.c:2337 vms-alpha.c:2557 #, c-format msgid "%s: not supported" msgstr "%s: pas supporté" -#: vms-alpha.c:2122 +#: vms-alpha.c:2217 #, c-format msgid "%s: not implemented" msgstr "%s: non implémenté" -#: vms-alpha.c:2380 +#: vms-alpha.c:2382 vms-alpha.c:2397 +#, c-format +msgid "invalid %s" +msgstr "%s invalide" + +#. Divide by zero is supposed to give a result of zero, +#. and a non-fatal warning message. +#: vms-alpha.c:2457 +#, c-format +msgid "%s divide by zero" +msgstr "%s divise par zéro" + +#: vms-alpha.c:2523 #, c-format msgid "invalid use of %s with contexts" msgstr "utilisation incorrecte de %s avec des contextes" -#: vms-alpha.c:2414 +#: vms-alpha.c:2581 #, c-format msgid "reserved cmd %d" msgstr "commande %d réservée" -#: vms-alpha.c:2498 +#: vms-alpha.c:2665 msgid "corrupt EEOM record - size is too small" msgstr "enregistrement EEOM corrompu – taille trop petite" -#: vms-alpha.c:2507 +#: vms-alpha.c:2674 msgid "object module not error-free !" msgstr "module objet N'EST PAS sans erreur !" -#: vms-alpha.c:3831 +#: vms-alpha.c:4001 #, c-format msgid "SEC_RELOC with no relocs in section %pA" msgstr "SEC_RELOC sans réadressages dans la section %pA" -#: vms-alpha.c:3883 vms-alpha.c:4097 +#: vms-alpha.c:4053 vms-alpha.c:4268 #, c-format msgid "size error in section %pA" msgstr "erreur de taille dans la section %pA" -#: vms-alpha.c:4043 +#: vms-alpha.c:4213 msgid "spurious ALPHA_R_BSR reloc" msgstr "réadressages ALPHA_R_BSR parasite" -#: vms-alpha.c:4084 +#: vms-alpha.c:4254 #, c-format msgid "unhandled relocation %s" msgstr "réadressage %s non traité" -#: vms-alpha.c:4377 +#: vms-alpha.c:4551 #, c-format msgid "unknown source command %d" msgstr "commande source %d inconnue" -#: vms-alpha.c:4438 vms-alpha.c:4444 vms-alpha.c:4450 vms-alpha.c:4456 -#: vms-alpha.c:4462 vms-alpha.c:4489 vms-alpha.c:4495 vms-alpha.c:4501 -#: vms-alpha.c:4507 +#: vms-alpha.c:4612 vms-alpha.c:4618 vms-alpha.c:4624 vms-alpha.c:4630 +#: vms-alpha.c:4636 vms-alpha.c:4663 vms-alpha.c:4669 vms-alpha.c:4675 +#: vms-alpha.c:4681 #, c-format msgid "%s not implemented" msgstr "%s non implémenté" -#: vms-alpha.c:4550 +#: vms-alpha.c:4724 #, c-format msgid "unknown line command %d" msgstr "commande de ligne %d inconnue" -#: vms-alpha.c:5010 vms-alpha.c:5028 vms-alpha.c:5043 vms-alpha.c:5059 -#: vms-alpha.c:5072 vms-alpha.c:5084 vms-alpha.c:5097 +#: vms-alpha.c:5188 vms-alpha.c:5206 vms-alpha.c:5221 vms-alpha.c:5237 +#: vms-alpha.c:5250 vms-alpha.c:5262 vms-alpha.c:5275 #, c-format msgid "unknown reloc %s + %s" msgstr "réadressage %s + %s inconnu" -#: vms-alpha.c:5152 +#: vms-alpha.c:5330 #, c-format msgid "unknown reloc %s" msgstr "réadressage %s inconnu" -#: vms-alpha.c:5166 +#: vms-alpha.c:5344 msgid "invalid section index in ETIR" msgstr "index de section incorrect dans ETIR" -#: vms-alpha.c:5175 +#: vms-alpha.c:5353 msgid "relocation for non-REL psect" msgstr "réadressage pour psect non-REL" -#: vms-alpha.c:5222 +#: vms-alpha.c:5402 #, c-format msgid "unknown symbol in command %s" msgstr "symbole inconnu dans la commande %s" -#: vms-alpha.c:5636 +#: vms-alpha.c:5816 #, c-format msgid "reloc (%d) is *UNKNOWN*" msgstr "le réadressage (%d) est *INCONNU*" -#: vms-alpha.c:5752 +#: vms-alpha.c:5932 #, c-format msgid " EMH %u (len=%u): " msgstr " EMH %u (long=%u): " -#: vms-alpha.c:5757 +#: vms-alpha.c:5937 #, c-format msgid " Error: The length is less than the length of an EMH record\n" msgstr " Erreur: La longueur est plus petite que la longueur d'un enregistrement EMH\n" -#: vms-alpha.c:5774 +#: vms-alpha.c:5954 #, c-format msgid " Error: The record length is less than the size of an EMH_MHD record\n" msgstr " Erreur: La longueur de l'enregistrement est inférieure à la taille de l'enregistrement EMH_MHD\n" -#: vms-alpha.c:5777 +#: vms-alpha.c:5957 #, c-format msgid "Module header\n" msgstr "En-tête module\n" -#: vms-alpha.c:5778 +#: vms-alpha.c:5958 #, c-format msgid " structure level: %u\n" msgstr " niveau de structure: %u\n" -#: vms-alpha.c:5779 +#: vms-alpha.c:5959 #, c-format msgid " max record size: %u\n" msgstr " taille max d'enregistrement: %u\n" -#: vms-alpha.c:5785 +#: vms-alpha.c:5965 #, c-format msgid " Error: The module name is missing\n" msgstr " Erreur: Le nom du module est manquant\n" -#: vms-alpha.c:5791 +#: vms-alpha.c:5971 #, c-format msgid " Error: The module name is too long\n" msgstr " Erreur: Le nom du module est trop long\n" -#: vms-alpha.c:5794 +#: vms-alpha.c:5974 #, c-format msgid " module name : %.*s\n" msgstr " nom du module : %.*s\n" -#: vms-alpha.c:5798 +#: vms-alpha.c:5978 #, c-format msgid " Error: The module version is missing\n" msgstr " Erreur: La version du module est manquante\n" -#: vms-alpha.c:5804 +#: vms-alpha.c:5984 #, c-format msgid " Error: The module version is too long\n" msgstr " Erreur: La version du module est trop longue\n" -#: vms-alpha.c:5807 +#: vms-alpha.c:5987 #, c-format msgid " module version : %.*s\n" msgstr " version du module : %.*s\n" -#: vms-alpha.c:5810 +#: vms-alpha.c:5990 #, c-format msgid " Error: The compile date is truncated\n" msgstr " Erreur: La date de compilation est tronquée\n" -#: vms-alpha.c:5812 +#: vms-alpha.c:5992 #, c-format msgid " compile date : %.17s\n" msgstr " date de compilation : %.17s\n" -#: vms-alpha.c:5817 +#: vms-alpha.c:5997 #, c-format msgid "Language Processor Name\n" msgstr "Nom du Processeur de Langage\n" -#: vms-alpha.c:5818 +#: vms-alpha.c:5998 #, c-format msgid " language name: %.*s\n" msgstr " nom du language: %.*s\n" -#: vms-alpha.c:5822 +#: vms-alpha.c:6002 #, c-format msgid "Source Files Header\n" msgstr "En-tête des fichiers sources\n" -#: vms-alpha.c:5823 +#: vms-alpha.c:6003 #, c-format msgid " file: %.*s\n" msgstr " fichier: %.*s\n" -#: vms-alpha.c:5827 +#: vms-alpha.c:6007 #, c-format msgid "Title Text Header\n" msgstr "En-tête du texte du titre\n" -#: vms-alpha.c:5828 +#: vms-alpha.c:6008 #, c-format msgid " title: %.*s\n" msgstr " titre: %.*s\n" -#: vms-alpha.c:5832 +#: vms-alpha.c:6012 #, c-format msgid "Copyright Header\n" msgstr "En-tête du copyright\n" -#: vms-alpha.c:5833 +#: vms-alpha.c:6013 #, c-format msgid " copyright: %.*s\n" msgstr " copyright: %.*s\n" -#: vms-alpha.c:5837 +#: vms-alpha.c:6017 #, c-format msgid "unhandled emh subtype %u\n" msgstr "sous-type emh %u non pris en charge\n" -#: vms-alpha.c:5847 +#: vms-alpha.c:6027 #, c-format msgid " EEOM (len=%u):\n" msgstr " EEOM (long=%u):\n" -#: vms-alpha.c:5852 +#: vms-alpha.c:6032 #, c-format msgid " Error: The length is less than the length of an EEOM record\n" msgstr " Erreur: La longueur est plus petite que la longueur d'un enregistrement EEOM\n" -#: vms-alpha.c:5856 +#: vms-alpha.c:6036 #, c-format msgid " number of cond linkage pairs: %u\n" msgstr " nombre de paires de liaisons cond: %u\n" -#: vms-alpha.c:5858 +#: vms-alpha.c:6038 #, c-format msgid " completion code: %u\n" msgstr " code de complétion: %u\n" -#: vms-alpha.c:5862 +#: vms-alpha.c:6042 #, c-format msgid " transfer addr flags: 0x%02x\n" msgstr " fanions de transfert d'adr: 0x%02x\n" -#: vms-alpha.c:5863 +#: vms-alpha.c:6043 #, c-format msgid " transfer addr psect: %u\n" msgstr " psect transert adr: %u\n" -#: vms-alpha.c:5865 +#: vms-alpha.c:6045 #, c-format msgid " transfer address : 0x%08x\n" msgstr " adresse de transert: 0x%08x\n" -#: vms-alpha.c:5874 +#: vms-alpha.c:6054 msgid " WEAK" msgstr " FAIBLE" -#: vms-alpha.c:5876 +#: vms-alpha.c:6056 msgid " DEF" msgstr " DEF" -#: vms-alpha.c:5878 +#: vms-alpha.c:6058 msgid " UNI" msgstr " UNI" -#: vms-alpha.c:5880 vms-alpha.c:5901 +#: vms-alpha.c:6060 vms-alpha.c:6081 msgid " REL" msgstr " REL" -#: vms-alpha.c:5882 +#: vms-alpha.c:6062 msgid " COMM" msgstr " COMM" -#: vms-alpha.c:5884 +#: vms-alpha.c:6064 msgid " VECEP" msgstr " VECEP" -#: vms-alpha.c:5886 +#: vms-alpha.c:6066 msgid " NORM" msgstr " NORM" -#: vms-alpha.c:5888 +#: vms-alpha.c:6068 msgid " QVAL" msgstr " QVAL" -#: vms-alpha.c:5895 +#: vms-alpha.c:6075 msgid " PIC" msgstr " PIC" -#: vms-alpha.c:5897 +#: vms-alpha.c:6077 msgid " LIB" msgstr " LIB" -#: vms-alpha.c:5899 +#: vms-alpha.c:6079 msgid " OVR" msgstr " OVR" -#: vms-alpha.c:5903 +#: vms-alpha.c:6083 msgid " GBL" msgstr " GBL" -#: vms-alpha.c:5905 +#: vms-alpha.c:6085 msgid " SHR" msgstr " SHR" -#: vms-alpha.c:5907 +#: vms-alpha.c:6087 msgid " EXE" msgstr " EXE" -#: vms-alpha.c:5909 +#: vms-alpha.c:6089 msgid " RD" msgstr " RD" -#: vms-alpha.c:5911 +#: vms-alpha.c:6091 msgid " WRT" msgstr " WRT" -#: vms-alpha.c:5913 +#: vms-alpha.c:6093 msgid " VEC" msgstr " VEC" -#: vms-alpha.c:5915 +#: vms-alpha.c:6095 msgid " NOMOD" msgstr " NOMOD" -#: vms-alpha.c:5917 +#: vms-alpha.c:6097 msgid " COM" msgstr " COM" -#: vms-alpha.c:5919 +#: vms-alpha.c:6099 msgid " 64B" msgstr " 64B" -#: vms-alpha.c:5928 +#: vms-alpha.c:6108 #, c-format msgid " EGSD (len=%u):\n" msgstr " EGSD (long=%u):\n" -#: vms-alpha.c:5941 +#: vms-alpha.c:6121 #, c-format msgid " EGSD entry %2u (type: %u, len: %u): " msgstr " entrée EGSD %2u (type: %u, long: %u): " -#: vms-alpha.c:5947 vms-alpha.c:6198 +#: vms-alpha.c:6127 vms-alpha.c:6378 #, c-format msgid " Error: length larger than remaining space in record\n" msgstr " Erreur: longueur plus grande que l'espace restant dans l'enregistrement\n" -#: vms-alpha.c:5959 +#: vms-alpha.c:6139 #, c-format msgid "PSC - Program section definition\n" msgstr "PSC - Définition de section du programme\n" -#: vms-alpha.c:5960 vms-alpha.c:5977 +#: vms-alpha.c:6140 vms-alpha.c:6157 #, c-format msgid " alignment : 2**%u\n" msgstr " alignement : 2**%u\n" -#: vms-alpha.c:5961 vms-alpha.c:5978 +#: vms-alpha.c:6141 vms-alpha.c:6158 #, c-format msgid " flags : 0x%04x" msgstr " fanions : 0x%04x" -#: vms-alpha.c:5965 +#: vms-alpha.c:6145 #, c-format msgid " alloc (len): %u (0x%08x)\n" msgstr " alloc (long): %u (0x%08x)\n" -#: vms-alpha.c:5966 vms-alpha.c:6023 vms-alpha.c:6072 +#: vms-alpha.c:6146 vms-alpha.c:6203 vms-alpha.c:6252 #, c-format msgid " name : %.*s\n" msgstr " nom : %.*s\n" -#: vms-alpha.c:5976 +#: vms-alpha.c:6156 #, c-format msgid "SPSC - Shared Image Program section def\n" msgstr "SPSC - Def de section de l'image partagée du programme\n" -#: vms-alpha.c:5982 +#: vms-alpha.c:6162 #, c-format msgid " alloc (len) : %u (0x%08x)\n" msgstr " alloc (long) : %u (0x%08x)\n" -#: vms-alpha.c:5983 +#: vms-alpha.c:6163 #, c-format msgid " image offset : 0x%08x\n" msgstr " offset d'image: 0x%08x\n" -#: vms-alpha.c:5985 +#: vms-alpha.c:6165 #, c-format msgid " symvec offset : 0x%08x\n" msgstr " offset symvec : 0x%08x\n" -#: vms-alpha.c:5987 +#: vms-alpha.c:6167 #, c-format msgid " name : %.*s\n" msgstr " nom : %.*s\n" -#: vms-alpha.c:6000 +#: vms-alpha.c:6180 #, c-format msgid "SYM - Global symbol definition\n" msgstr "SYM - Définition du symbol global\n" -#: vms-alpha.c:6001 vms-alpha.c:6061 vms-alpha.c:6082 vms-alpha.c:6101 +#: vms-alpha.c:6181 vms-alpha.c:6241 vms-alpha.c:6262 vms-alpha.c:6281 #, c-format msgid " flags: 0x%04x" msgstr " fanions: 0x%04x" -#: vms-alpha.c:6004 +#: vms-alpha.c:6184 #, c-format msgid " psect offset: 0x%08x\n" msgstr " offset psect: 0x%08x\n" -#: vms-alpha.c:6008 +#: vms-alpha.c:6188 #, c-format msgid " code address: 0x%08x\n" msgstr " adresse code: 0x%08x\n" -#: vms-alpha.c:6010 +#: vms-alpha.c:6190 #, c-format msgid " psect index for entry point : %u\n" msgstr " index psect pour point d'entrée: %u\n" -#: vms-alpha.c:6013 vms-alpha.c:6089 vms-alpha.c:6108 +#: vms-alpha.c:6193 vms-alpha.c:6269 vms-alpha.c:6288 #, c-format msgid " psect index : %u\n" msgstr " index psect : %u\n" -#: vms-alpha.c:6015 vms-alpha.c:6091 vms-alpha.c:6110 +#: vms-alpha.c:6195 vms-alpha.c:6271 vms-alpha.c:6290 #, c-format msgid " name : %.*s\n" msgstr " nom : %.*s\n" -#: vms-alpha.c:6022 +#: vms-alpha.c:6202 #, c-format msgid "SYM - Global symbol reference\n" msgstr "SYM - Référence du symbol globaux\n" -#: vms-alpha.c:6034 +#: vms-alpha.c:6214 #, c-format msgid "IDC - Ident Consistency check\n" msgstr "IDC - Vérification de la consistance d'identité\n" -#: vms-alpha.c:6035 +#: vms-alpha.c:6215 #, c-format msgid " flags : 0x%08x" msgstr " fanions : 0x%08x" -#: vms-alpha.c:6039 +#: vms-alpha.c:6219 #, c-format msgid " id match : %x\n" msgstr " correspondance id : %x\n" -#: vms-alpha.c:6041 +#: vms-alpha.c:6221 #, c-format msgid " error severity: %x\n" msgstr " sévérité d'erreur: %x\n" -#: vms-alpha.c:6044 +#: vms-alpha.c:6224 #, c-format msgid " entity name : %.*s\n" msgstr " nom d'entité : %.*s\n" -#: vms-alpha.c:6046 +#: vms-alpha.c:6226 #, c-format msgid " object name : %.*s\n" msgstr " nom d'objet : %.*s\n" -#: vms-alpha.c:6049 +#: vms-alpha.c:6229 #, c-format msgid " binary ident : 0x%08x\n" msgstr " ident binaire : 0x%08x\n" -#: vms-alpha.c:6052 +#: vms-alpha.c:6232 #, c-format msgid " ascii ident : %.*s\n" msgstr " ident ascii : %.*s\n" -#: vms-alpha.c:6060 +#: vms-alpha.c:6240 #, c-format msgid "SYMG - Universal symbol definition\n" msgstr "SYMG - Définition de symbole universel\n" -#: vms-alpha.c:6064 +#: vms-alpha.c:6244 #, c-format msgid " symbol vector offset: 0x%08x\n" msgstr " offset vecteur symbole: 0x%08x\n" -#: vms-alpha.c:6066 +#: vms-alpha.c:6246 #, c-format msgid " entry point: 0x%08x\n" msgstr " point d'entrée: 0x%08x\n" -#: vms-alpha.c:6068 +#: vms-alpha.c:6248 #, c-format msgid " proc descr : 0x%08x\n" msgstr " descr proc : 0x%08x\n" -#: vms-alpha.c:6070 +#: vms-alpha.c:6250 #, c-format msgid " psect index: %u\n" msgstr " index psect: %u\n" -#: vms-alpha.c:6081 +#: vms-alpha.c:6261 #, c-format msgid "SYMV - Vectored symbol definition\n" msgstr "SYMV - Définition symbole vectorisé\n" -#: vms-alpha.c:6085 +#: vms-alpha.c:6265 #, c-format msgid " vector : 0x%08x\n" msgstr " vecteur : 0x%08x\n" -#: vms-alpha.c:6087 vms-alpha.c:6106 +#: vms-alpha.c:6267 vms-alpha.c:6286 #, c-format msgid " psect offset: %u\n" msgstr " offset psect: %u\n" -#: vms-alpha.c:6100 +#: vms-alpha.c:6280 #, c-format msgid "SYMM - Global symbol definition with version\n" msgstr "SYMM - Définition de symbole globale avec version\n" -#: vms-alpha.c:6104 +#: vms-alpha.c:6284 #, c-format msgid " version mask: 0x%08x\n" msgstr " masque de version: 0x%08x\n" -#: vms-alpha.c:6115 +#: vms-alpha.c:6295 #, c-format msgid "unhandled egsd entry type %u\n" msgstr "type d'entrée egsd %u non supporté\n" -#: vms-alpha.c:6150 +#: vms-alpha.c:6330 #, c-format msgid " linkage index: %u, replacement insn: 0x%08x\n" msgstr " index de liaison: %u, instruction de remplacement: 0x%08x\n" -#: vms-alpha.c:6154 +#: vms-alpha.c:6334 #, c-format msgid " psect idx 1: %u, offset 1: 0x%08x %08x\n" msgstr " index psect 1: %u, offset 1: 0x%08x %08x\n" -#: vms-alpha.c:6159 +#: vms-alpha.c:6339 #, c-format msgid " psect idx 2: %u, offset 2: 0x%08x %08x\n" msgstr " index psect 2: %u, offset 2: 0x%08x %08x\n" -#: vms-alpha.c:6165 +#: vms-alpha.c:6345 #, c-format msgid " psect idx 3: %u, offset 3: 0x%08x %08x\n" msgstr " index psect 3: %u, offset 3: 0x%08x %08x\n" -#: vms-alpha.c:6170 +#: vms-alpha.c:6350 #, c-format msgid " global name: %.*s\n" msgstr " nom global: %.*s\n" -#: vms-alpha.c:6181 +#: vms-alpha.c:6361 #, c-format msgid " %s (len=%u+%u):\n" msgstr " %s (long=%u+%u):\n" -#: vms-alpha.c:6203 +#: vms-alpha.c:6383 #, c-format msgid " (type: %3u, size: 4+%3u): " msgstr " (type: %3u, taille: 4+%3u): " -#: vms-alpha.c:6207 +#: vms-alpha.c:6387 #, c-format msgid "STA_GBL (stack global) %.*s\n" msgstr "STA_GBL (pile globals) %.*s\n" -#: vms-alpha.c:6211 +#: vms-alpha.c:6391 #, c-format msgid "STA_LW (stack longword) 0x%08x\n" msgstr "STA_LW (pile mot long) 0x%08x\n" -#: vms-alpha.c:6215 +#: vms-alpha.c:6395 #, c-format msgid "STA_QW (stack quadword) 0x%08x %08x\n" msgstr "STA_QW (pile quad mot) 0x%08x %08x\n" -#: vms-alpha.c:6220 +#: vms-alpha.c:6400 #, c-format msgid "STA_PQ (stack psect base + offset)\n" msgstr "STA_PQ (base pile psect + offset)\n" -#: vms-alpha.c:6222 +#: vms-alpha.c:6402 #, c-format msgid " psect: %u, offset: 0x%08x %08x\n" msgstr " psect: %u, offset: 0x%08x %08x\n" -#: vms-alpha.c:6228 +#: vms-alpha.c:6408 #, c-format msgid "STA_LI (stack literal)\n" msgstr "STA_LI (pile literale)\n" -#: vms-alpha.c:6231 +#: vms-alpha.c:6411 #, c-format msgid "STA_MOD (stack module)\n" msgstr "STA_MOD (pile module)\n" -#: vms-alpha.c:6234 +#: vms-alpha.c:6414 #, c-format msgid "STA_CKARG (compare procedure argument)\n" msgstr "STA_CKARG (compare les arguments de la procédure)\n" -#: vms-alpha.c:6238 +#: vms-alpha.c:6418 #, c-format msgid "STO_B (store byte)\n" msgstr "STO_B (stocke octet)\n" -#: vms-alpha.c:6241 +#: vms-alpha.c:6421 #, c-format msgid "STO_W (store word)\n" msgstr "STO_W (stocke mot)\n" -#: vms-alpha.c:6244 +#: vms-alpha.c:6424 #, c-format msgid "STO_LW (store longword)\n" msgstr "STO_LW (stocke mot long)\n" -#: vms-alpha.c:6247 +#: vms-alpha.c:6427 #, c-format msgid "STO_QW (store quadword)\n" msgstr "STO_QW (stocke quad mot)\n" -#: vms-alpha.c:6253 +#: vms-alpha.c:6433 #, c-format msgid "STO_IMMR (store immediate repeat) %u bytes\n" msgstr "STO_IMMR (stock répétition immédiate) %u octets\n" -#: vms-alpha.c:6260 +#: vms-alpha.c:6440 #, c-format msgid "STO_GBL (store global) %.*s\n" msgstr "STO_GBL (stocke globale) %.*s\n" -#: vms-alpha.c:6264 +#: vms-alpha.c:6444 #, c-format msgid "STO_CA (store code address) %.*s\n" msgstr "STO_CA (stock adresse code) %.*s\n" -#: vms-alpha.c:6268 +#: vms-alpha.c:6448 #, c-format msgid "STO_RB (store relative branch)\n" msgstr "STO_RB (stocke branche relative)\n" -#: vms-alpha.c:6271 +#: vms-alpha.c:6451 #, c-format msgid "STO_AB (store absolute branch)\n" msgstr "STO_AB (stocke branche absolue)\n" -#: vms-alpha.c:6274 +#: vms-alpha.c:6454 #, c-format msgid "STO_OFF (store offset to psect)\n" msgstr "STO_OFF (stocke offset de psect)\n" -#: vms-alpha.c:6280 +#: vms-alpha.c:6460 #, c-format msgid "STO_IMM (store immediate) %u bytes\n" msgstr "STO_IMM (stocke immediat) %u octets\n" -#: vms-alpha.c:6287 +#: vms-alpha.c:6467 #, c-format msgid "STO_GBL_LW (store global longword) %.*s\n" msgstr "STO_GBL_LW (stocke mot long global) %.*s\n" -#: vms-alpha.c:6291 +#: vms-alpha.c:6471 #, c-format msgid "STO_OFF (store LP with procedure signature)\n" msgstr "STO_OFF (stocke LP avec la signature de la procédure)\n" -#: vms-alpha.c:6294 +#: vms-alpha.c:6474 #, c-format msgid "STO_BR_GBL (store branch global) *todo*\n" msgstr "STO_BR_GBL (stocke branche globale) *todo*\n" -#: vms-alpha.c:6297 +#: vms-alpha.c:6477 #, c-format msgid "STO_BR_PS (store branch psect + offset) *todo*\n" msgstr "STO_BR_PS (stocke branche psect + offset) *todo*\n" -#: vms-alpha.c:6301 +#: vms-alpha.c:6481 #, c-format msgid "OPR_NOP (no-operation)\n" msgstr "OPR_NOP (pas d'operation)\n" -#: vms-alpha.c:6304 +#: vms-alpha.c:6484 #, c-format msgid "OPR_ADD (add)\n" msgstr "OPR_ADD (ajout)\n" -#: vms-alpha.c:6307 +#: vms-alpha.c:6487 #, c-format msgid "OPR_SUB (subtract)\n" msgstr "OPR_SUB (soustraction)\n" -#: vms-alpha.c:6310 +#: vms-alpha.c:6490 #, c-format msgid "OPR_MUL (multiply)\n" msgstr "OPR_MUL (multiplication)\n" -#: vms-alpha.c:6313 +#: vms-alpha.c:6493 #, c-format msgid "OPR_DIV (divide)\n" msgstr "OPR_DIV (division)\n" -#: vms-alpha.c:6316 +#: vms-alpha.c:6496 #, c-format msgid "OPR_AND (logical and)\n" msgstr "OPR_AND (et logique)\n" -#: vms-alpha.c:6319 +#: vms-alpha.c:6499 #, c-format msgid "OPR_IOR (logical inclusive or)\n" msgstr "OPR_IOR (ou inclusif logique)\n" -#: vms-alpha.c:6322 +#: vms-alpha.c:6502 #, c-format msgid "OPR_EOR (logical exclusive or)\n" msgstr "OPR_EOR (ou exclusif logique)\n" -#: vms-alpha.c:6325 +#: vms-alpha.c:6505 #, c-format msgid "OPR_NEG (negate)\n" msgstr "OPR_NEG (négation)\n" -#: vms-alpha.c:6328 +#: vms-alpha.c:6508 #, c-format msgid "OPR_COM (complement)\n" msgstr "OPR_COM (complément)\n" -#: vms-alpha.c:6331 +#: vms-alpha.c:6511 #, c-format msgid "OPR_INSV (insert field)\n" msgstr "OPR_INSV (insertion champ)\n" -#: vms-alpha.c:6334 +#: vms-alpha.c:6514 #, c-format msgid "OPR_ASH (arithmetic shift)\n" msgstr "OPR_ASH (décalage arithmetique)\n" -#: vms-alpha.c:6337 +#: vms-alpha.c:6517 #, c-format msgid "OPR_USH (unsigned shift)\n" msgstr "OPR_USH (décalage non signé)\n" -#: vms-alpha.c:6340 +#: vms-alpha.c:6520 #, c-format msgid "OPR_ROT (rotate)\n" msgstr "OPR_ROT (rotation)\n" -#: vms-alpha.c:6343 +#: vms-alpha.c:6523 #, c-format msgid "OPR_SEL (select)\n" msgstr "OPR_SEL (selection)\n" -#: vms-alpha.c:6346 +#: vms-alpha.c:6526 #, c-format msgid "OPR_REDEF (redefine symbol to curr location)\n" msgstr "OPR_REDEF (redéfini le symbole à la position actuelle)\n" -#: vms-alpha.c:6349 +#: vms-alpha.c:6529 #, c-format msgid "OPR_REDEF (define a literal)\n" msgstr "OPR_REDEF (définir un litéral)\n" -#: vms-alpha.c:6353 +#: vms-alpha.c:6533 #, c-format msgid "STC_LP (store cond linkage pair)\n" msgstr "STC_LP (stocke pair de liaison cond)\n" -#: vms-alpha.c:6357 +#: vms-alpha.c:6537 #, c-format msgid "STC_LP_PSB (store cond linkage pair + signature)\n" msgstr "STC_LP_PSB (stocke pair de liaison cond + signature)\n" -#: vms-alpha.c:6359 +#: vms-alpha.c:6539 #, c-format msgid " linkage index: %u, procedure: %.*s\n" msgstr " index liaison: %u, procédure: %.*s\n" -#: vms-alpha.c:6362 +#: vms-alpha.c:6542 #, c-format msgid " signature: %.*s\n" msgstr " signature: %.*s\n" -#: vms-alpha.c:6365 +#: vms-alpha.c:6545 #, c-format msgid "STC_GBL (store cond global)\n" msgstr "STC_GBL (stocke cond globale)\n" -#: vms-alpha.c:6367 +#: vms-alpha.c:6547 #, c-format msgid " linkage index: %u, global: %.*s\n" msgstr " index liaison: %u, globale: %.*s\n" -#: vms-alpha.c:6371 +#: vms-alpha.c:6551 #, c-format msgid "STC_GCA (store cond code address)\n" msgstr "STC_GCA (stocke adresse code cond)\n" -#: vms-alpha.c:6373 +#: vms-alpha.c:6553 #, c-format msgid " linkage index: %u, procedure name: %.*s\n" msgstr " index liaison: %u, nom procédure: %.*s\n" -#: vms-alpha.c:6377 +#: vms-alpha.c:6557 #, c-format msgid "STC_PS (store cond psect + offset)\n" msgstr "STC_PS (stocke psect cond + offset)\n" -#: vms-alpha.c:6380 +#: vms-alpha.c:6560 #, c-format msgid " linkage index: %u, psect: %u, offset: 0x%08x %08x\n" msgstr " index liaison: %u, psect: %u, offset: 0x%08x %08x\n" -#: vms-alpha.c:6387 +#: vms-alpha.c:6567 #, c-format msgid "STC_NOP_GBL (store cond NOP at global addr)\n" msgstr "STC_NOP_GBL (stocke NOP cond à l'adresse globale)\n" -#: vms-alpha.c:6391 +#: vms-alpha.c:6571 #, c-format msgid "STC_NOP_PS (store cond NOP at psect + offset)\n" msgstr "STC_NOP_PS (stocke NOP cond à psect + offset)\n" -#: vms-alpha.c:6395 +#: vms-alpha.c:6575 #, c-format msgid "STC_BSR_GBL (store cond BSR at global addr)\n" msgstr "STC_BSR_GBL (stocke BSR cond à l'adresse globale)\n" -#: vms-alpha.c:6399 +#: vms-alpha.c:6579 #, c-format msgid "STC_BSR_PS (store cond BSR at psect + offset)\n" msgstr "STC_BSR_PS (stocke BSR cond à psect + offset)\n" -#: vms-alpha.c:6403 +#: vms-alpha.c:6583 #, c-format msgid "STC_LDA_GBL (store cond LDA at global addr)\n" msgstr "STC_LDA_GBL (stocke LDA cond à l'adresse globale)\n" -#: vms-alpha.c:6407 +#: vms-alpha.c:6587 #, c-format msgid "STC_LDA_PS (store cond LDA at psect + offset)\n" msgstr "STC_LDA_PS (stocke LDA cond à psect + offset)\n" -#: vms-alpha.c:6411 +#: vms-alpha.c:6591 #, c-format msgid "STC_BOH_GBL (store cond BOH at global addr)\n" msgstr "STC_BOH_GBL (stocke BOH cond à l'adresse globale)\n" -#: vms-alpha.c:6415 +#: vms-alpha.c:6595 #, c-format msgid "STC_BOH_PS (store cond BOH at psect + offset)\n" msgstr "STC_BOH_PS (stocke BOH cond à psect + offset)\n" -#: vms-alpha.c:6420 +#: vms-alpha.c:6600 #, c-format msgid "STC_NBH_GBL (store cond or hint at global addr)\n" msgstr "STC_NBH_GBL (stocke cond ou suggestion à l'adresse globale)\n" -#: vms-alpha.c:6424 +#: vms-alpha.c:6604 #, c-format msgid "STC_NBH_PS (store cond or hint at psect + offset)\n" msgstr "STC_NBH_PS (stocke cond or suggestion à psect + offset)\n" -#: vms-alpha.c:6428 +#: vms-alpha.c:6608 #, c-format msgid "CTL_SETRB (set relocation base)\n" msgstr "CTL_SETRB (fixe la base du réadressage)\n" -#: vms-alpha.c:6434 +#: vms-alpha.c:6614 #, c-format msgid "CTL_AUGRB (augment relocation base) %u\n" msgstr "CTL_AUGRB (augmente la base du réadressage) %u\n" -#: vms-alpha.c:6438 +#: vms-alpha.c:6618 #, c-format msgid "CTL_DFLOC (define location)\n" msgstr "CTL_DFLOC (définir position)\n" -#: vms-alpha.c:6441 +#: vms-alpha.c:6621 #, c-format msgid "CTL_STLOC (set location)\n" msgstr "CTL_STLOC (fixer position)\n" -#: vms-alpha.c:6444 +#: vms-alpha.c:6624 #, c-format msgid "CTL_STKDL (stack defined location)\n" msgstr "CTL_STKDL (position définie dans la pile)\n" -#: vms-alpha.c:6447 vms-alpha.c:6871 vms-alpha.c:6997 +#: vms-alpha.c:6627 vms-alpha.c:7051 vms-alpha.c:7177 #, c-format msgid "*unhandled*\n" msgstr "*non pris en charge*\n" -#: vms-alpha.c:6477 vms-alpha.c:6516 +#: vms-alpha.c:6657 vms-alpha.c:6696 #, c-format msgid "cannot read GST record length\n" msgstr "impossible de lire la longueur de l'enregistrement GST\n" #. Ill-formed. -#: vms-alpha.c:6498 +#: vms-alpha.c:6678 #, c-format msgid "cannot find EMH in first GST record\n" msgstr "impossible de trouver le EMH dans le premier enregistrement GST\n" -#: vms-alpha.c:6524 +#: vms-alpha.c:6704 #, c-format msgid "cannot read GST record header\n" msgstr "impossible de lire l'en-tête de l'enregistrement GST\n" -#: vms-alpha.c:6537 +#: vms-alpha.c:6717 #, c-format msgid " corrupted GST\n" msgstr " GST corrompu\n" -#: vms-alpha.c:6545 +#: vms-alpha.c:6725 #, c-format msgid "cannot read GST record\n" msgstr "ne peut lire l'enregistrement GST\n" -#: vms-alpha.c:6574 +#: vms-alpha.c:6754 #, c-format msgid " unhandled EOBJ record type %u\n" msgstr " type d'enregistrement EOBJ %u non supporté\n" -#: vms-alpha.c:6598 +#: vms-alpha.c:6778 #, c-format msgid " bitcount: %u, base addr: 0x%08x\n" msgstr " décompte des bits: %u, adr base: 0x%08x\n" -#: vms-alpha.c:6612 +#: vms-alpha.c:6792 #, c-format msgid " bitmap: 0x%08x (count: %u):\n" msgstr " carte des bits: 0x%08x (occurrence: %u):\n" -#: vms-alpha.c:6619 +#: vms-alpha.c:6799 #, c-format msgid " %08x" msgstr " %08x" -#: vms-alpha.c:6645 +#: vms-alpha.c:6825 #, c-format msgid " image %u (%u entries)\n" msgstr " image %u (%u entrées)\n" -#: vms-alpha.c:6651 +#: vms-alpha.c:6831 #, c-format msgid " offset: 0x%08x, val: 0x%08x\n" msgstr " offset: 0x%08x, val: 0x%08x\n" -#: vms-alpha.c:6673 +#: vms-alpha.c:6853 #, c-format msgid " image %u (%u entries), offsets:\n" msgstr " image %u (%u entrées), offsets:\n" -#: vms-alpha.c:6680 +#: vms-alpha.c:6860 #, c-format msgid " 0x%08x" msgstr " 0x%08x" #. 64 bits. -#: vms-alpha.c:6802 +#: vms-alpha.c:6982 #, c-format msgid "64 bits *unhandled*\n" msgstr "64 bits *non supporté*\n" -#: vms-alpha.c:6807 +#: vms-alpha.c:6987 #, c-format msgid "class: %u, dtype: %u, length: %u, pointer: 0x%08x\n" msgstr "classe: %u, dtype: %u, longueur: %u, pointeur: 0x%08x\n" -#: vms-alpha.c:6818 +#: vms-alpha.c:6998 #, c-format msgid "non-contiguous array of %s\n" msgstr "table de %s non contiguë\n" -#: vms-alpha.c:6823 +#: vms-alpha.c:7003 #, c-format msgid "dimct: %u, aflags: 0x%02x, digits: %u, scale: %u\n" msgstr "dimct: %u, aflags: 0x%02x, digits: %u, échelle: %u\n" -#: vms-alpha.c:6828 +#: vms-alpha.c:7008 #, c-format msgid "arsize: %u, a0: 0x%08x\n" msgstr "arsize: %u, a0: 0x%08x\n" -#: vms-alpha.c:6832 +#: vms-alpha.c:7012 #, c-format msgid "Strides:\n" msgstr "Pas:\n" -#: vms-alpha.c:6842 +#: vms-alpha.c:7022 #, c-format msgid "Bounds:\n" msgstr "Limites:\n" -#: vms-alpha.c:6848 +#: vms-alpha.c:7028 #, c-format msgid "[%u]: Lower: %u, upper: %u\n" msgstr "[%u]: Inférieure: %u, supérieure: %u\n" -#: vms-alpha.c:6860 +#: vms-alpha.c:7040 #, c-format msgid "unaligned bit-string of %s\n" msgstr "chaine de bits de %s désalignée\n" -#: vms-alpha.c:6865 +#: vms-alpha.c:7045 #, c-format msgid "base: %u, pos: %u\n" msgstr "base: %u, pos: %u\n" -#: vms-alpha.c:6886 +#: vms-alpha.c:7066 #, c-format msgid "vflags: 0x%02x, value: 0x%08x " msgstr "vflags: 0x%02x, valeur: 0x%08x " -#: vms-alpha.c:6892 +#: vms-alpha.c:7072 #, c-format msgid "(no value)\n" msgstr "(pas de valeur)\n" -#: vms-alpha.c:6895 +#: vms-alpha.c:7075 #, c-format msgid "(not active)\n" msgstr "(pas active)\n" -#: vms-alpha.c:6898 +#: vms-alpha.c:7078 #, c-format msgid "(not allocated)\n" msgstr "(pas allouée)\n" -#: vms-alpha.c:6901 +#: vms-alpha.c:7081 #, c-format msgid "(descriptor)\n" msgstr "(descripteur)\n" -#: vms-alpha.c:6905 +#: vms-alpha.c:7085 #, c-format msgid "(trailing value)\n" msgstr "(valeur postérieure)\n" -#: vms-alpha.c:6908 +#: vms-alpha.c:7088 #, c-format msgid "(value spec follows)\n" msgstr "(spécificités de la valeur suivent)\n" -#: vms-alpha.c:6911 +#: vms-alpha.c:7091 #, c-format msgid "(at bit offset %u)\n" msgstr "(à l'offset de bit %u)\n" -#: vms-alpha.c:6915 +#: vms-alpha.c:7095 #, c-format msgid "(reg: %u, disp: %u, indir: %u, kind: " msgstr "(reg: %u, aff: %u, indir: %u, type: " -#: vms-alpha.c:6922 +#: vms-alpha.c:7102 msgid "literal" msgstr "litérale" -#: vms-alpha.c:6925 +#: vms-alpha.c:7105 msgid "address" msgstr "adresse" -#: vms-alpha.c:6928 +#: vms-alpha.c:7108 msgid "desc" msgstr "desc" -#: vms-alpha.c:6931 +#: vms-alpha.c:7111 msgid "reg" msgstr "reg" -#: vms-alpha.c:6948 +#: vms-alpha.c:7128 #, c-format msgid "len: %2u, kind: %2u " msgstr "long: %2u, type: %2u " -#: vms-alpha.c:6954 +#: vms-alpha.c:7134 #, c-format msgid "atomic, type=0x%02x %s\n" msgstr "atomique, type=0x%02x %s\n" -#: vms-alpha.c:6958 +#: vms-alpha.c:7138 #, c-format msgid "indirect, defined at 0x%08x\n" msgstr "indirect, défini à 0x%08x\n" -#: vms-alpha.c:6962 +#: vms-alpha.c:7142 #, c-format msgid "typed pointer\n" msgstr "pointeur typé\n" -#: vms-alpha.c:6966 +#: vms-alpha.c:7146 #, c-format msgid "pointer\n" msgstr "pointeur\n" -#: vms-alpha.c:6974 +#: vms-alpha.c:7154 #, c-format msgid "array, dim: %u, bitmap: " msgstr "tableau, dim: %u, bitmpa: " -#: vms-alpha.c:6981 +#: vms-alpha.c:7161 #, c-format msgid "array descriptor:\n" msgstr "descripteur de tableau:\n" -#: vms-alpha.c:6988 +#: vms-alpha.c:7168 #, c-format msgid "type spec for element:\n" msgstr "spec de type pour élément:\n" -#: vms-alpha.c:6990 +#: vms-alpha.c:7170 #, c-format msgid "type spec for subscript %u:\n" msgstr "spec de type pour l'indice %u:\n" -#: vms-alpha.c:7008 +#: vms-alpha.c:7188 #, c-format msgid "Debug symbol table:\n" msgstr "Table des symboles de debug:\n" -#: vms-alpha.c:7019 +#: vms-alpha.c:7199 #, c-format msgid "cannot read DST header\n" msgstr "impossible de lire l'en-tête DST\n" -#: vms-alpha.c:7025 +#: vms-alpha.c:7205 #, c-format msgid " type: %3u, len: %3u (at 0x%08x): " msgstr " type: %3u, long: %3u (à 0x%08x): " -#: vms-alpha.c:7039 +#: vms-alpha.c:7219 #, c-format msgid "cannot read DST symbol\n" msgstr "ne peut lire le symbole DST\n" -#: vms-alpha.c:7082 +#: vms-alpha.c:7262 #, c-format msgid "standard data: %s\n" msgstr "données standards: %s\n" -#: vms-alpha.c:7085 vms-alpha.c:7173 +#: vms-alpha.c:7265 vms-alpha.c:7353 #, c-format msgid " name: %.*s\n" msgstr " nom: %.*s\n" -#: vms-alpha.c:7092 +#: vms-alpha.c:7272 #, c-format msgid "modbeg\n" msgstr "début module\n" -#: vms-alpha.c:7094 +#: vms-alpha.c:7274 #, c-format msgid " flags: %d, language: %u, major: %u, minor: %u\n" msgstr " fanions: %d, language: %u, majeur: %u, mineur: %u\n" -#: vms-alpha.c:7100 vms-alpha.c:7374 +#: vms-alpha.c:7280 vms-alpha.c:7554 #, c-format msgid " module name: %.*s\n" msgstr " nom du module: %.*s\n" -#: vms-alpha.c:7103 +#: vms-alpha.c:7283 #, c-format msgid " compiler : %.*s\n" msgstr " compilateur : %.*s\n" -#: vms-alpha.c:7108 +#: vms-alpha.c:7288 #, c-format msgid "modend\n" msgstr "fin module\n" -#: vms-alpha.c:7115 +#: vms-alpha.c:7295 msgid "rtnbeg\n" msgstr "début rtn\n" -#: vms-alpha.c:7117 +#: vms-alpha.c:7297 #, c-format msgid " flags: %u, address: 0x%08x, pd-address: 0x%08x\n" msgstr " fanions: %u, adresse: 0x%08x, pd-adresse: 0x%08x\n" -#: vms-alpha.c:7122 +#: vms-alpha.c:7302 #, c-format msgid " routine name: %.*s\n" msgstr " nom routine : %.*s\n" -#: vms-alpha.c:7130 +#: vms-alpha.c:7310 #, c-format msgid "rtnend: size 0x%08x\n" msgstr "fin rtn: taille 0x%08x\n" -#: vms-alpha.c:7138 +#: vms-alpha.c:7318 #, c-format msgid "prolog: bkpt address 0x%08x\n" msgstr "prologue: adresse bkpt 0x%08x\n" -#: vms-alpha.c:7147 +#: vms-alpha.c:7327 #, c-format msgid "epilog: flags: %u, count: %u\n" msgstr "épilogue: fanions: %u, nombre: %u\n" -#: vms-alpha.c:7157 +#: vms-alpha.c:7337 #, c-format msgid "blkbeg: address: 0x%08x, name: %.*s\n" msgstr "début blk: adresse: 0x%08x, nom: %.*s\n" -#: vms-alpha.c:7166 +#: vms-alpha.c:7346 #, c-format msgid "blkend: size: 0x%08x\n" msgstr "fin blk: taille: 0x%08x\n" -#: vms-alpha.c:7172 +#: vms-alpha.c:7352 #, c-format msgid "typspec (len: %u)\n" msgstr "typspec (long: %u)\n" -#: vms-alpha.c:7179 +#: vms-alpha.c:7359 #, c-format msgid "septyp, name: %.*s\n" msgstr "septyp, nom: %.*s\n" -#: vms-alpha.c:7188 +#: vms-alpha.c:7368 #, c-format msgid "recbeg: name: %.*s\n" msgstr "début rec: nom: %.*s\n" -#: vms-alpha.c:7190 +#: vms-alpha.c:7370 #, c-format msgid " len: %u bits\n" msgstr " long: %u bits\n" -#: vms-alpha.c:7195 +#: vms-alpha.c:7375 #, c-format msgid "recend\n" msgstr "fin rec\n" -#: vms-alpha.c:7199 +#: vms-alpha.c:7379 #, c-format msgid "enumbeg, len: %u, name: %.*s\n" msgstr "début énumération, long: %u, nom: %.*s\n" -#: vms-alpha.c:7203 +#: vms-alpha.c:7383 #, c-format msgid "enumelt, name: %.*s\n" msgstr "énumération éléments, nom: %.*s\n" -#: vms-alpha.c:7207 +#: vms-alpha.c:7387 #, c-format msgid "enumend\n" msgstr "fin énumération\n" -#: vms-alpha.c:7212 +#: vms-alpha.c:7392 #, c-format msgid "label, name: %.*s\n" msgstr "étiquette, nom: %.*s\n" -#: vms-alpha.c:7214 +#: vms-alpha.c:7394 #, c-format msgid " address: 0x%08x\n" msgstr " adresse: 0x%08x\n" -#: vms-alpha.c:7224 +#: vms-alpha.c:7404 #, c-format msgid "discontiguous range (nbr: %u)\n" msgstr "plage discontinue (nbr: %u)\n" -#: vms-alpha.c:7227 +#: vms-alpha.c:7407 #, c-format msgid " address: 0x%08x, size: %u\n" msgstr " adresse: 0x%08x, taille: %u\n" -#: vms-alpha.c:7237 +#: vms-alpha.c:7417 #, c-format msgid "line num (len: %u)\n" msgstr "num ligne (long: %u)\n" -#: vms-alpha.c:7254 +#: vms-alpha.c:7434 #, c-format msgid "delta_pc_w %u\n" msgstr "delta_pc_w %u\n" -#: vms-alpha.c:7261 +#: vms-alpha.c:7441 #, c-format msgid "incr_linum(b): +%u\n" msgstr "incr_linum(b): +%u\n" -#: vms-alpha.c:7267 +#: vms-alpha.c:7447 #, c-format msgid "incr_linum_w: +%u\n" msgstr "incr_linum_w: +%u\n" -#: vms-alpha.c:7273 +#: vms-alpha.c:7453 #, c-format msgid "incr_linum_l: +%u\n" msgstr "incr_linum_l: +%u\n" -#: vms-alpha.c:7279 +#: vms-alpha.c:7459 #, c-format msgid "set_line_num(w) %u\n" msgstr "set_line_num(w) %u\n" -#: vms-alpha.c:7284 +#: vms-alpha.c:7464 #, c-format msgid "set_line_num_b %u\n" msgstr "set_line_num_b %u\n" -#: vms-alpha.c:7289 +#: vms-alpha.c:7469 #, c-format msgid "set_line_num_l %u\n" msgstr "set_line_num_l %u\n" -#: vms-alpha.c:7294 +#: vms-alpha.c:7474 #, c-format msgid "set_abs_pc: 0x%08x\n" msgstr "set_abs_pc: 0x%08x\n" -#: vms-alpha.c:7298 +#: vms-alpha.c:7478 #, c-format msgid "delta_pc_l: +0x%08x\n" msgstr "delta_pc_l: +0x%08x\n" -#: vms-alpha.c:7303 +#: vms-alpha.c:7483 #, c-format msgid "term(b): 0x%02x" msgstr "term(b): 0x%02x" -#: vms-alpha.c:7305 +#: vms-alpha.c:7485 #, c-format msgid " pc: 0x%08x\n" msgstr " pc: 0x%08x\n" -#: vms-alpha.c:7310 +#: vms-alpha.c:7490 #, c-format msgid "term_w: 0x%04x" msgstr "term_w: 0x%04x" -#: vms-alpha.c:7312 +#: vms-alpha.c:7492 #, c-format msgid " pc: 0x%08x\n" msgstr " pc: 0x%08x\n" -#: vms-alpha.c:7318 +#: vms-alpha.c:7498 #, c-format msgid "delta pc +%-4d" msgstr "delta pc +%-4d" -#: vms-alpha.c:7322 +#: vms-alpha.c:7502 #, c-format msgid " pc: 0x%08x line: %5u\n" msgstr " pc: 0x%08x ligne: %5u\n" -#: vms-alpha.c:7327 +#: vms-alpha.c:7507 #, c-format msgid " *unhandled* cmd %u\n" msgstr " cmd %u *non gérée*\n" -#: vms-alpha.c:7342 +#: vms-alpha.c:7522 #, c-format msgid "source (len: %u)\n" msgstr "source (long: %u)\n" -#: vms-alpha.c:7357 +#: vms-alpha.c:7537 #, c-format msgid " declfile: len: %u, flags: %u, fileid: %u\n" msgstr " declfile: long: %u, fanions: %u, id fichier: %u\n" -#: vms-alpha.c:7362 +#: vms-alpha.c:7542 #, c-format msgid " rms: cdt: 0x%08x %08x, ebk: 0x%08x, ffb: 0x%04x, rfo: %u\n" msgstr " rms: cdt: 0x%08x %08x, ebk: 0x%08x, ffb: 0x%04x, rfo: %u\n" -#: vms-alpha.c:7371 +#: vms-alpha.c:7551 #, c-format msgid " filename : %.*s\n" msgstr " nom fichier: %.*s\n" -#: vms-alpha.c:7380 +#: vms-alpha.c:7560 #, c-format msgid " setfile %u\n" msgstr " setfile %u\n" -#: vms-alpha.c:7385 vms-alpha.c:7390 +#: vms-alpha.c:7565 vms-alpha.c:7570 #, c-format msgid " setrec %u\n" msgstr " setrec %u\n" -#: vms-alpha.c:7395 vms-alpha.c:7400 +#: vms-alpha.c:7575 vms-alpha.c:7580 #, c-format msgid " setlnum %u\n" msgstr " setlnum %u\n" -#: vms-alpha.c:7405 vms-alpha.c:7410 +#: vms-alpha.c:7585 vms-alpha.c:7590 #, c-format msgid " deflines %u\n" msgstr " deflines %u\n" -#: vms-alpha.c:7414 +#: vms-alpha.c:7594 #, c-format msgid " formfeed\n" msgstr " formfeed\n" -#: vms-alpha.c:7418 +#: vms-alpha.c:7598 #, c-format msgid " *unhandled* cmd %u\n" msgstr " cmd %u *non gérée*\n" -#: vms-alpha.c:7430 +#: vms-alpha.c:7610 #, c-format msgid "*unhandled* dst type %u\n" msgstr "type dst %u *non géré*\n" -#: vms-alpha.c:7462 +#: vms-alpha.c:7642 #, c-format msgid "cannot read EIHD\n" msgstr "ne peut lire EIHD\n" -#: vms-alpha.c:7466 +#: vms-alpha.c:7646 #, c-format msgid "EIHD: (size: %u, nbr blocks: %u)\n" msgstr "EIHD: (taille: %u, nbr blocs: %u)\n" -#: vms-alpha.c:7470 +#: vms-alpha.c:7650 #, c-format msgid " majorid: %u, minorid: %u\n" msgstr " id majeur: %u, id mineur: %u\n" -#: vms-alpha.c:7478 +#: vms-alpha.c:7658 msgid "executable" msgstr "exécutable" -#: vms-alpha.c:7481 +#: vms-alpha.c:7661 msgid "linkable image" msgstr "image liable" -#: vms-alpha.c:7488 +#: vms-alpha.c:7668 #, c-format msgid " image type: %u (%s)" msgstr " type image: %u (%s)" -#: vms-alpha.c:7494 +#: vms-alpha.c:7674 msgid "native" msgstr "natif" -#: vms-alpha.c:7497 +#: vms-alpha.c:7677 msgid "CLI" msgstr "CLI" -#: vms-alpha.c:7504 +#: vms-alpha.c:7684 #, c-format msgid ", subtype: %u (%s)\n" msgstr ", sous-type: %u (%s)\n" -#: vms-alpha.c:7511 +#: vms-alpha.c:7691 #, c-format msgid " offsets: isd: %u, activ: %u, symdbg: %u, imgid: %u, patch: %u\n" msgstr " offsets: isd: %u, actif: %u, debug symbol: %u, id image: %u, patch: %u\n" -#: vms-alpha.c:7515 +#: vms-alpha.c:7695 #, c-format msgid " fixup info rva: " msgstr " correctif info rva: " -#: vms-alpha.c:7517 +#: vms-alpha.c:7697 #, c-format msgid ", symbol vector rva: " msgstr ", vecteur de symbol rva: " -#: vms-alpha.c:7520 +#: vms-alpha.c:7700 #, c-format msgid "" "\n" @@ -7267,474 +7621,474 @@ "\n" " offset tableau version: %u\n" -#: vms-alpha.c:7525 +#: vms-alpha.c:7705 #, c-format msgid " img I/O count: %u, nbr channels: %u, req pri: %08x%08x\n" msgstr " décompte E/S img: %u, nbr canaux: %u, priv req: %08x%08x\n" -#: vms-alpha.c:7531 +#: vms-alpha.c:7711 #, c-format msgid " linker flags: %08x:" msgstr " fanions lieur: %08x:" -#: vms-alpha.c:7562 +#: vms-alpha.c:7742 #, c-format msgid " ident: 0x%08x, sysver: 0x%08x, match ctrl: %u, symvect_size: %u\n" msgstr " ident: 0x%08x, ver sys: 0x%08x, apparier ctrl: %u, taille vectsym: %u\n" -#: vms-alpha.c:7568 +#: vms-alpha.c:7748 #, c-format msgid " BPAGE: %u" msgstr " BPAGE: %u" -#: vms-alpha.c:7575 +#: vms-alpha.c:7755 #, c-format msgid ", ext fixup offset: %u, no_opt psect off: %u" msgstr ", offset correctif étendu: %u, offset no_opt psect: %u" -#: vms-alpha.c:7578 +#: vms-alpha.c:7758 #, c-format msgid ", alias: %u\n" msgstr ", alias: %u\n" -#: vms-alpha.c:7586 +#: vms-alpha.c:7766 #, c-format msgid "system version array information:\n" msgstr "information sur table de version système:\n" -#: vms-alpha.c:7590 +#: vms-alpha.c:7770 #, c-format msgid "cannot read EIHVN header\n" msgstr "ne peut lire l'en-tête EIHVN\n" -#: vms-alpha.c:7600 +#: vms-alpha.c:7780 #, c-format msgid "cannot read EIHVN version\n" msgstr "ne peut lire la version EIHVN\n" -#: vms-alpha.c:7603 +#: vms-alpha.c:7783 #, c-format msgid " %02u " msgstr " %02u " -#: vms-alpha.c:7607 +#: vms-alpha.c:7787 msgid "BASE_IMAGE " msgstr "BASE_IMAGE " -#: vms-alpha.c:7610 +#: vms-alpha.c:7790 msgid "MEMORY_MANAGEMENT" msgstr "MEMORY_MANAGEMENT" -#: vms-alpha.c:7613 +#: vms-alpha.c:7793 msgid "IO " msgstr "IO " -#: vms-alpha.c:7616 +#: vms-alpha.c:7796 msgid "FILES_VOLUMES " msgstr "FILES_VOLUMES " -#: vms-alpha.c:7619 +#: vms-alpha.c:7799 msgid "PROCESS_SCHED " msgstr "PROCESS_SCHED " -#: vms-alpha.c:7622 +#: vms-alpha.c:7802 msgid "SYSGEN " msgstr "SYSGEN " -#: vms-alpha.c:7625 +#: vms-alpha.c:7805 msgid "CLUSTERS_LOCKMGR " msgstr "CLUSTERS_LOCKMGR " -#: vms-alpha.c:7628 +#: vms-alpha.c:7808 msgid "LOGICAL_NAMES " msgstr "LOGICAL_NAMES " -#: vms-alpha.c:7631 +#: vms-alpha.c:7811 msgid "SECURITY " msgstr "SECURITY " -#: vms-alpha.c:7634 +#: vms-alpha.c:7814 msgid "IMAGE_ACTIVATOR " msgstr "IMAGE_ACTIVATOR " -#: vms-alpha.c:7637 +#: vms-alpha.c:7817 msgid "NETWORKS " msgstr "NETWORKS " -#: vms-alpha.c:7640 +#: vms-alpha.c:7820 msgid "COUNTERS " msgstr "COUNTERS " -#: vms-alpha.c:7643 +#: vms-alpha.c:7823 msgid "STABLE " msgstr "STABLE " -#: vms-alpha.c:7646 +#: vms-alpha.c:7826 msgid "MISC " msgstr "MISC " -#: vms-alpha.c:7649 +#: vms-alpha.c:7829 msgid "CPU " msgstr "CPU " -#: vms-alpha.c:7652 +#: vms-alpha.c:7832 msgid "VOLATILE " msgstr "VOLATILE " -#: vms-alpha.c:7655 +#: vms-alpha.c:7835 msgid "SHELL " msgstr "SHELL " -#: vms-alpha.c:7658 +#: vms-alpha.c:7838 msgid "POSIX " msgstr "POSIX " -#: vms-alpha.c:7661 +#: vms-alpha.c:7841 msgid "MULTI_PROCESSING " msgstr "MULTI_PROCESSING " -#: vms-alpha.c:7664 +#: vms-alpha.c:7844 msgid "GALAXY " msgstr "GALAXY " -#: vms-alpha.c:7667 +#: vms-alpha.c:7847 msgid "*unknown* " msgstr "*inconnu* " -#: vms-alpha.c:7683 vms-alpha.c:7958 +#: vms-alpha.c:7863 vms-alpha.c:8137 #, c-format msgid "cannot read EIHA\n" msgstr "ne peut lire EIHA\n" -#: vms-alpha.c:7686 +#: vms-alpha.c:7866 #, c-format msgid "Image activation: (size=%u)\n" msgstr "Activation de l'image: (taille=%u)\n" -#: vms-alpha.c:7689 +#: vms-alpha.c:7869 #, c-format msgid " First address : 0x%08x 0x%08x\n" msgstr " Première adresse : 0x%08x 0x%08x\n" -#: vms-alpha.c:7693 +#: vms-alpha.c:7873 #, c-format msgid " Second address: 0x%08x 0x%08x\n" msgstr " Deuxième adresse : 0x%08x 0x%08x\n" -#: vms-alpha.c:7697 +#: vms-alpha.c:7877 #, c-format msgid " Third address : 0x%08x 0x%08x\n" msgstr " Troisième adresse: 0x%08x 0x%08x\n" -#: vms-alpha.c:7701 +#: vms-alpha.c:7881 #, c-format msgid " Fourth address: 0x%08x 0x%08x\n" msgstr " Quatrième adresse: 0x%08x 0x%08x\n" -#: vms-alpha.c:7705 +#: vms-alpha.c:7885 #, c-format msgid " Shared image : 0x%08x 0x%08x\n" msgstr " Image partagée : 0x%08x 0x%08x\n" -#: vms-alpha.c:7716 +#: vms-alpha.c:7896 #, c-format msgid "cannot read EIHI\n" msgstr "ne peut lire EIHI\n" -#: vms-alpha.c:7720 +#: vms-alpha.c:7900 #, c-format msgid "Image identification: (major: %u, minor: %u)\n" msgstr "Identification d'image: (majeur: %u, mineur: %u)\n" -#: vms-alpha.c:7723 +#: vms-alpha.c:7903 #, c-format msgid " image name : %.*s\n" msgstr " nom de l'image : %.*s\n" -#: vms-alpha.c:7725 +#: vms-alpha.c:7905 #, c-format msgid " link time : %s\n" msgstr " heure de liaison : %s\n" -#: vms-alpha.c:7727 +#: vms-alpha.c:7907 #, c-format msgid " image ident : %.*s\n" msgstr " ident image : %.*s\n" -#: vms-alpha.c:7729 +#: vms-alpha.c:7909 #, c-format msgid " linker ident : %.*s\n" msgstr " ident lieur : %.*s\n" -#: vms-alpha.c:7731 +#: vms-alpha.c:7911 #, c-format msgid " image build ident: %.*s\n" msgstr " ident construction image: %.*s\n" -#: vms-alpha.c:7741 +#: vms-alpha.c:7921 #, c-format msgid "cannot read EIHS\n" msgstr "ne peut lire EIHS\n" -#: vms-alpha.c:7745 +#: vms-alpha.c:7925 #, c-format msgid "Image symbol & debug table: (major: %u, minor: %u)\n" msgstr "Image des symboles et table debug: (majeur: %u, mineur: %u)\n" -#: vms-alpha.c:7751 +#: vms-alpha.c:7931 #, c-format msgid " debug symbol table : vbn: %u, size: %u (0x%x)\n" msgstr " table des symboles de debug : vbn: %u, taille: %u (0x%x)\n" -#: vms-alpha.c:7756 +#: vms-alpha.c:7936 #, c-format msgid " global symbol table: vbn: %u, records: %u\n" msgstr " table des symboles globale: vbn: %u, enregistrements: %u\n" -#: vms-alpha.c:7761 +#: vms-alpha.c:7941 #, c-format msgid " debug module table : vbn: %u, size: %u\n" msgstr " table des modules de debug: vbn: %u, taille: %u\n" -#: vms-alpha.c:7774 +#: vms-alpha.c:7954 #, c-format msgid "cannot read EISD\n" msgstr "ne peut lire EISD\n" -#: vms-alpha.c:7785 +#: vms-alpha.c:7965 #, c-format msgid "Image section descriptor: (major: %u, minor: %u, size: %u, offset: %u)\n" msgstr "Descripteur de section d'image: (majeur: %u, mineur: %u, taille: %u, offset: %u)\n" -#: vms-alpha.c:7793 +#: vms-alpha.c:7973 #, c-format msgid " section: base: 0x%08x%08x size: 0x%08x\n" msgstr " section: base: 0x%08x%08x taille: 0x%08x\n" -#: vms-alpha.c:7798 +#: vms-alpha.c:7978 #, c-format msgid " flags: 0x%04x" msgstr " fanions: 0x%04x" -#: vms-alpha.c:7836 +#: vms-alpha.c:8016 #, c-format msgid " vbn: %u, pfc: %u, matchctl: %u type: %u (" msgstr " vbn: %u, pfc: %u, matchctl: %u type: %u (" -#: vms-alpha.c:7842 +#: vms-alpha.c:8022 msgid "NORMAL" msgstr "NORMAL" -#: vms-alpha.c:7845 +#: vms-alpha.c:8025 msgid "SHRFXD" msgstr "SHRFXD" -#: vms-alpha.c:7848 +#: vms-alpha.c:8028 msgid "PRVFXD" msgstr "PRVFXD" -#: vms-alpha.c:7851 +#: vms-alpha.c:8031 msgid "SHRPIC" msgstr "SHRPIC" -#: vms-alpha.c:7854 +#: vms-alpha.c:8034 msgid "PRVPIC" msgstr "PRVPIC" -#: vms-alpha.c:7857 +#: vms-alpha.c:8037 msgid "USRSTACK" msgstr "USRSTACK" -#: vms-alpha.c:7863 +#: vms-alpha.c:8043 msgid ")\n" msgstr ")\n" -#: vms-alpha.c:7866 +#: vms-alpha.c:8046 #, c-format msgid " ident: 0x%08x, name: %.*s\n" msgstr " ident: 0x%08x, nom: %.*s\n" -#: vms-alpha.c:7876 +#: vms-alpha.c:8056 #, c-format msgid "cannot read DMT\n" msgstr "ne peut lire DMT\n" -#: vms-alpha.c:7880 +#: vms-alpha.c:8060 #, c-format msgid "Debug module table:\n" msgstr "Table de debug du module:\n" -#: vms-alpha.c:7889 +#: vms-alpha.c:8069 #, c-format msgid "cannot read DMT header\n" msgstr "ne peut lire l'en-tête DMT\n" -#: vms-alpha.c:7895 +#: vms-alpha.c:8075 #, c-format msgid " module offset: 0x%08x, size: 0x%08x, (%u psects)\n" msgstr " offset du module: 0x%08x, taille: 0x%08x, (%u psects)\n" -#: vms-alpha.c:7905 +#: vms-alpha.c:8085 #, c-format msgid "cannot read DMT psect\n" msgstr "ne peut lire le psect DMT\n" -#: vms-alpha.c:7909 +#: vms-alpha.c:8089 #, c-format msgid " psect start: 0x%08x, length: %u\n" msgstr " début psect: 0x%08x, longueur: %u\n" -#: vms-alpha.c:7922 +#: vms-alpha.c:8102 #, c-format msgid "cannot read DST\n" msgstr "ne peut lire DST\n" -#: vms-alpha.c:7932 +#: vms-alpha.c:8112 #, c-format msgid "cannot read GST\n" msgstr "ne peut lire GST\n" -#: vms-alpha.c:7936 +#: vms-alpha.c:8116 #, c-format msgid "Global symbol table:\n" msgstr "Table des symboles globaux:\n" -#: vms-alpha.c:7965 +#: vms-alpha.c:8143 #, c-format msgid "Image activator fixup: (major: %u, minor: %u)\n" msgstr "Correction de l'activateur de l'image: (majeur: %u, mineur: %u)\n" -#: vms-alpha.c:7969 +#: vms-alpha.c:8147 #, c-format msgid " iaflink : 0x%08x %08x\n" msgstr " lien iaf : 0x%08x %08x\n" -#: vms-alpha.c:7973 +#: vms-alpha.c:8151 #, c-format msgid " fixuplnk: 0x%08x %08x\n" msgstr " lien correctif: 0x%08x %08x\n" -#: vms-alpha.c:7976 +#: vms-alpha.c:8154 #, c-format msgid " size : %u\n" msgstr " taille : %u\n" -#: vms-alpha.c:7978 +#: vms-alpha.c:8156 #, c-format msgid " flags: 0x%08x\n" msgstr " fanions: 0x%08x\n" -#: vms-alpha.c:7983 +#: vms-alpha.c:8161 #, c-format msgid " qrelfixoff: %5u, lrelfixoff: %5u\n" msgstr " qrelfixoff: %5u, lrelfixoff: %5u\n" -#: vms-alpha.c:7988 +#: vms-alpha.c:8166 #, c-format msgid " qdotadroff: %5u, ldotadroff: %5u\n" msgstr " qdotadroff: %5u, ldotadroff: %5u\n" -#: vms-alpha.c:7993 +#: vms-alpha.c:8171 #, c-format msgid " codeadroff: %5u, lpfixoff : %5u\n" msgstr " codeadroff: %5u, lpfixoff : %5u\n" -#: vms-alpha.c:7996 +#: vms-alpha.c:8174 #, c-format msgid " chgprtoff : %5u\n" msgstr " chgprtoff : %5u\n" -#: vms-alpha.c:8000 +#: vms-alpha.c:8178 #, c-format msgid " shlstoff : %5u, shrimgcnt : %5u\n" msgstr " shlstoff : %5u, shrimgcnt : %5u\n" -#: vms-alpha.c:8003 +#: vms-alpha.c:8181 #, c-format msgid " shlextra : %5u, permctx : %5u\n" msgstr " shlextra : %5u, permctx : %5u\n" -#: vms-alpha.c:8006 +#: vms-alpha.c:8184 #, c-format msgid " base_va : 0x%08x\n" msgstr " base_va : 0x%08x\n" -#: vms-alpha.c:8008 +#: vms-alpha.c:8186 #, c-format msgid " lppsbfixoff: %5u\n" msgstr " lppsbfixoff: %5u\n" -#: vms-alpha.c:8016 +#: vms-alpha.c:8194 #, c-format msgid " Shareable images:\n" msgstr " Images partageables:\n" -#: vms-alpha.c:8021 +#: vms-alpha.c:8199 #, c-format msgid " %u: size: %u, flags: 0x%02x, name: %.*s\n" msgstr " %u: taille: %u, fanions: 0x%02x, nom: %.*s\n" -#: vms-alpha.c:8028 +#: vms-alpha.c:8206 #, c-format msgid " quad-word relocation fixups:\n" msgstr " correctifs du réadressage des quad-mots:\n" -#: vms-alpha.c:8033 +#: vms-alpha.c:8211 #, c-format msgid " long-word relocation fixups:\n" msgstr " correctifs du réadressage des mots longs:\n" -#: vms-alpha.c:8038 +#: vms-alpha.c:8216 #, c-format msgid " quad-word .address reference fixups:\n" msgstr " correctifs des références quad-mots « .address »:\n" -#: vms-alpha.c:8043 +#: vms-alpha.c:8221 #, c-format msgid " long-word .address reference fixups:\n" msgstr " correctifs des références mots longs « .address »:\n" -#: vms-alpha.c:8048 +#: vms-alpha.c:8226 #, c-format msgid " Code Address Reference Fixups:\n" msgstr " Correctifs des références des adresses de code:\n" -#: vms-alpha.c:8053 +#: vms-alpha.c:8231 #, c-format msgid " Linkage Pairs Reference Fixups:\n" msgstr " Correctifs des références des paires de liaison:\n" -#: vms-alpha.c:8062 +#: vms-alpha.c:8240 #, c-format msgid " Change Protection (%u entries):\n" msgstr " Changement de protection (%u entrées):\n" -#: vms-alpha.c:8068 +#: vms-alpha.c:8246 #, c-format msgid " base: 0x%08x %08x, size: 0x%08x, prot: 0x%08x " msgstr " base: 0x%08x %08x, taille: 0x%08x, prot: 0x%08x " #. FIXME: we do not yet support relocatable link. It is not obvious #. how to do it for debug infos. -#: vms-alpha.c:8908 +#: vms-alpha.c:9123 msgid "%P: relocatable link is not supported\n" msgstr "%P: lien relocalisable pas supporté\n" -#: vms-alpha.c:8979 +#: vms-alpha.c:9194 #, c-format msgid "%P: multiple entry points: in modules %pB and %pB\n" msgstr "%P: points d'entrée multiples: dans les modules %pB et %pB\n" -#: vms-lib.c:1445 +#: vms-lib.c:1525 #, c-format msgid "could not open shared image '%s' from '%s'" msgstr "n'a pas su ouvrir l'image partagée « %s » de « %s »" -#: vms-misc.c:361 +#: vms-misc.c:367 msgid "_bfd_vms_output_counted called with zero bytes" msgstr "_bfd_vms_output_counted appelé avec un compte de zéro octet" -#: vms-misc.c:366 +#: vms-misc.c:372 msgid "_bfd_vms_output_counted called with too many bytes" msgstr "_bfd_vms_output_counted appelé avec trop d'octets" @@ -7748,172 +8102,209 @@ msgid "%pB: dynamic object with no .loader section" msgstr "%pB: objet dynamique sans section .loader" -#: xcofflink.c:1413 +#: xcofflink.c:1417 #, c-format msgid "%pB: `%s' has line numbers but no enclosing section" msgstr "%pB: « %s » contient des numéros de lignes mais de section d'encadrement" -#: xcofflink.c:1466 +#: xcofflink.c:1470 #, c-format msgid "%pB: class %d symbol `%s' has no aux entries" msgstr "%pB: classe %d symbole « %s » n'a pas d'entrée auxiliaire" -#: xcofflink.c:1489 +#: xcofflink.c:1493 #, c-format msgid "%pB: symbol `%s' has unrecognized csect type %d" msgstr "%pB: symbole « %s » a un type csect %d non reconnu" -#: xcofflink.c:1502 +#: xcofflink.c:1506 #, c-format msgid "%pB: bad XTY_ER symbol `%s': class %d scnum %d scnlen %" msgstr "%pB: symbole XTY_ER « %s » erroné: classe %d scnum %d scnlen %" -#: xcofflink.c:1533 +#: xcofflink.c:1537 #, c-format msgid "%pB: XMC_TC0 symbol `%s' is class %d scnlen %" msgstr "%pB: XMC_TC0 symbol « %s » est la classe %d scnlen %" -#: xcofflink.c:1680 +#: xcofflink.c:1684 #, c-format msgid "%pB: csect `%s' not in enclosing section" msgstr "%pB: csect « %s » n'est pas dans un section d'encadrement" -#: xcofflink.c:1788 +#: xcofflink.c:1792 #, c-format msgid "%pB: misplaced XTY_LD `%s'" msgstr "%pB: XTY_LD « %s » mal placé" -#: xcofflink.c:2109 +#: xcofflink.c:2113 #, c-format msgid "%pB: reloc %s:% not in csect" msgstr "%pB: le réadressage %s:% n'est pas dans csect" -#: xcofflink.c:3196 +#: xcofflink.c:3193 #, c-format msgid "%s: no such symbol" msgstr "%s: pas de tel symbole" -#: xcofflink.c:3301 +#: xcofflink.c:3298 #, c-format msgid "warning: attempt to export undefined symbol `%s'" msgstr "attention: tentative d'exportation d'un symbole non défini « %s »" -#: xcofflink.c:3680 +#: xcofflink.c:3677 msgid "error: undefined symbol __rtinit" msgstr "erreur: symbole __rtinit non défini" -#: xcofflink.c:4060 +#: xcofflink.c:4055 #, c-format msgid "%pB: loader reloc in unrecognized section `%s'" msgstr "%pB: chargeur de réadressage dans une section non reconnue « %s »" -#: xcofflink.c:4072 +#: xcofflink.c:4067 #, c-format msgid "%pB: `%s' in loader reloc but not loader sym" msgstr "%pB: « %s » est dans le chargeur de réadressage mais pas dans celui des symboles" -#: xcofflink.c:4089 +#: xcofflink.c:4084 #, c-format msgid "%pB: loader reloc in read-only section %pA" msgstr "%pB: chargeur de réadressages dans la section %pA en lecture seule" -#: xcofflink.c:5113 +#: xcofflink.c:5112 #, c-format msgid "TOC overflow: %# > 0x10000; try -mminimal-toc when compiling" msgstr "Débordement de la table des entrées: %# > 0x10000; essayez l'option -mminimal-toc à la compilation" -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:5031 +#. Not fatal, this callback cannot fail. +#: elfnn-aarch64.c:2872 +#, c-format +msgid "unknown attribute for symbol `%s': 0x%02x" +msgstr "attribut inconnu pour le symbole « %s » : 0x%02x" + +#: elfnn-aarch64.c:5246 #, c-format msgid "%pB: error: erratum 835769 stub out of range (input file too large)" msgstr "%pB: erreur: l'ébauche d'erratum du 835769 est hors limite (fichier d'entrée trop grand)" -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:5112 +#: elfnn-aarch64.c:5338 #, c-format msgid "%pB: error: erratum 843419 stub out of range (input file too large)" msgstr "%pB: erreur: l'ébauche d'erratum du 843419 est hors limite (fichier d'entrée trop grand)" -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:5641 +#: elfnn-aarch64.c:5351 +msgid "%pB: error: erratum 843419 immediate 0x%" +msgstr "%pB: erreur: erratum 843419 immédiat 0x%" + +#: elfnn-aarch64.c:5899 #, c-format msgid "%pB: relocation %s against symbol `%s' which may bind externally can not be used when making a shared object; recompile with -fPIC" msgstr "%pB: réadressage de %s en vertu du symbol « %s » qui peut être lié avec l'extérieur ne peut être utilisé lors de la création d'un objet partagé; recompilez avec -fPIC" -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:5732 +#: elfnn-aarch64.c:5990 #, c-format msgid "%pB: local symbol descriptor table be NULL when applying relocation %s against local symbol" msgstr "%pB: la table des descripteurs de symboles locaux peut être NULL en application le réadressage %s sur un symbole local" -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:6830 +#: elfnn-aarch64.c:6103 elfnn-aarch64.c:6140 +#, c-format +msgid "%pB: TLS relocation %s against undefined symbol `%s'" +msgstr "%pB: réadressage TLS %s sur le symbole indéfini « %s »" + +#: elfnn-aarch64.c:7125 msgid "too many GOT entries for -fpic, please recompile with -fPIC" msgstr "trop d'entrées GOT pour -fpic, recompilez avec -fPIC" -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:6858 +#: elfnn-aarch64.c:7153 msgid "one possible cause of this error is that the symbol is being referenced in the indicated code as if it had a larger alignment than was declared where it was defined" msgstr "une cause possible pour cette erreur est que le symbole est référencé dans le code indiqué comme si il avait un alignement plus grand que celui qui a été déclaré lors de sa définition." -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:7443 +#: elfnn-aarch64.c:7720 #, c-format msgid "%pB: relocation %s against `%s' can not be used when making a shared object" msgstr "%pB: le réadressage %s vers « %s » ne peut pas être utilisé en créant un objet partagé" -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:182 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:217 +#: elfnn-riscv.c:187 elfnn-riscv.c:222 #, c-format msgid "%pB: warning: RVE PLT generation not supported" msgstr "%pB: attention: la génération de PLT RVE n'est pas supportée" -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2311 +#: elfnn-riscv.c:1977 +#, c-format +msgid "%pcrel_lo section symbol with an addend" +msgstr "symbole de section %pcrel_lo avec un opérande" + +#: elfnn-riscv.c:2198 +#, c-format +msgid "%%X%%P: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC\n" +msgstr "%%X%%p: réadressage de %s en vertu de « %s » ne peut être utilisé lors de la création d'un objet partagé; recompilez avec -fPIC\n" + +#: elfnn-riscv.c:2208 +#, c-format +msgid "%%X%%P: unresolvable %s relocation against symbol `%s'\n" +msgstr "%%X%%P: réadressage %s sans solution par rapport au symbole « %s »\n" + +#: elfnn-riscv.c:2247 msgid "%X%P: internal error: out of range error\n" msgstr "%X%P: erreur interne: erreur car hors limite\n" -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2315 +#: elfnn-riscv.c:2252 msgid "%X%P: internal error: unsupported relocation error\n" msgstr "%X%P: erreur interne: erreur car réadressage non supporté\n" -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2325 +#: elfnn-riscv.c:2258 +msgid "dangerous relocation error" +msgstr "erreur de réadressage dangereux" + +#: elfnn-riscv.c:2264 msgid "%X%P: internal error: unknown error\n" msgstr "%X%P: erreur interne: erreur inconnue\n" -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2711 +#: elfnn-riscv.c:2630 #, c-format -msgid "error: %pB: Mis-matched ISA version for '%s' exetension. %d.%d vs %d.%d" -msgstr "erreur: %pB: version ISA non concordante pour l'extension « %s ». %d.%d vs %d.%d" +msgid "error: %pB: Mis-matched ISA version for '%s' extension. %d.%d vs %d.%d" +msgstr "erreur: %pB: Version ISA non concordante pour l'extension « %s ». %d.%d vs %d.%d" -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2729 +#: elfnn-riscv.c:2648 #, c-format -msgid "error: %pB: corrupted ISA string '%s'.first letter should be 'i' or 'e' but got '%s'." -msgstr "erreur: %pB: chaîne ISA « %s » corrompue, la première lettre devrait être « i » ou « e » mais on a trouvé « %s »." +msgid "error: %pB: corrupted ISA string '%s'. First letter should be 'i' or 'e' but got '%s'." +msgstr "erreur: %pB: chaîne ISA « %s » corrompue. La première lettre devrait être « i » ou « e » mais on a trouvé « %s »." -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2773 +#: elfnn-riscv.c:2692 #, c-format msgid "error: %pB: Mis-matched ISA string to merge '%s' and '%s'." msgstr "erreur: %pB: Chaînes ISA à fusionner « %s » et « %s » non concordantes." -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2921 +#: elfnn-riscv.c:2893 #, c-format msgid "error: %pB: ISA string of input (%s) doesn't match output (%s)." msgstr "erreur: %pB: la chaîne ISA en entrée (%s) ne correspond pas à la sortie (%s)." -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2946 +#: elfnn-riscv.c:2913 #, c-format msgid "error: %pB: XLEN of input (%u) doesn't match output (%u)." msgstr "erreur: %pB: XLEN de l'entrée (%u) ne correspond pas à la sortie (%u)." -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2954 +#: elfnn-riscv.c:2921 #, c-format -msgid "error: %pB: Unspported XLEN (%u), you mightusing wrong emulation." +msgid "error: %pB: Unsupported XLEN (%u), you might be using wrong emulation." msgstr "erreur: %pB: XLEN (%u) non supportée, vous pourriez être en train d'utiliser la mauvaise émulation." -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:3039 +#: elfnn-riscv.c:3035 #, c-format -msgid "error: %pB: conflicting priv spec version (major/minor/revision)." -msgstr "erreur: %pB: version de spec priv en conflit (majeur/mineur/révision)." +msgid "warning: %pB use privilege spec version %u.%u.%u but the output use version %u.%u.%u." +msgstr "avertissement: %pB utilise la version de spec privilège %u.%u.%u mais la sortie utilise la version %u.%u.%u." -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:3055 +#: elfnn-riscv.c:3053 +msgid "warning: privilege spec version 1.9.1 can not be linked with other spec versions." +msgstr "attention: la version de spec privilège 1.9.1 ne peut pas être liée avec d'autres versions de spec." + +#: elfnn-riscv.c:3081 #, c-format msgid "error: %pB use %u-byte stack aligned but the output use %u-byte stack aligned." msgstr "erreur: %pB utilise un alignement de pile de %u octets mais la sortie utilise un alignement de pile de %u octets." -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:3096 +#: elfnn-riscv.c:3122 #, c-format msgid "" "%pB: ABI is incompatible with that of the selected emulation:\n" @@ -7922,111 +8313,111 @@ "%pB: l'ABI est incompatible avec celle de l'émulation sélectionnée:\n" " l'émulation de la cible « %s » ne correspond pas à « %s »" -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:3119 +#: elfnn-riscv.c:3176 #, c-format msgid "%pB: can't link %s modules with %s modules" msgstr "%pB: impossible de réaliser l'édition de liens des modules %s avec les modules %s" -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:3129 +#: elfnn-riscv.c:3186 #, c-format msgid "%pB: can't link RVE with other target" msgstr "%pB: impossible de faire l'édition de lien avec une autre cible" -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:3630 +#: elfnn-riscv.c:3724 #, c-format msgid "%pB(%pA+%#): % bytes required for alignment to %-byte boundary, but only % present" msgstr "%pB(%pA+0x%: % octets requis pour aligner sur une frontière de % octets mais seulement % sont présents" -#: peigen.c:157 pepigen.c:157 pex64igen.c:157 +#: peXXigen.c:164 #, c-format msgid "%pB: unable to find name for empty section" msgstr "%pB: impossible de trouver le nom pour une section vide" -#: peigen.c:183 pepigen.c:183 pex64igen.c:183 +#: peXXigen.c:191 #, c-format msgid "%pB: out of memory creating name for empty section" msgstr "%pB: pas assez de mémoire en créant le nom pour une section vide" -#: peigen.c:194 pepigen.c:194 pex64igen.c:194 +#: peXXigen.c:201 #, c-format msgid "%pB: unable to create fake empty section" msgstr "%pB: impossible de créer une section vide factice" -#: peigen.c:532 pepigen.c:532 pex64igen.c:532 +#: peXXigen.c:539 #, c-format -msgid "%pB: aout header specifies an invalid number of data-directory entries: %ld" -msgstr "%pB: l'en-tête aout spécifie un nombre invalide d'entrées de répertoire de données: %ld" +msgid "%pB: aout header specifies an invalid number of data-directory entries: %u" +msgstr "%pB: l'en-tête aout spécifie un nombre invalide d'entrées de répertoire de données: %u" -#: peigen.c:1091 pepigen.c:1091 pex64igen.c:1091 +#: peXXigen.c:1088 #, c-format msgid "%pB: line number overflow: 0x%lx > 0xffff" msgstr "%pB: débordement du nombre de lignes: 0x%lx > 0xffff" -#: peigen.c:1235 pepigen.c:1235 pex64igen.c:1235 +#: peXXigen.c:1241 msgid "Export Directory [.edata (or where ever we found it)]" msgstr "Répertoire d'exportation [.edata (ou là où il a été trouvé)]" -#: peigen.c:1236 pepigen.c:1236 pex64igen.c:1236 +#: peXXigen.c:1242 msgid "Import Directory [parts of .idata]" msgstr "Répertoire d'importation [faisant partie de .idata]" -#: peigen.c:1237 pepigen.c:1237 pex64igen.c:1237 +#: peXXigen.c:1243 msgid "Resource Directory [.rsrc]" msgstr "Répertoire des resources [.rsrc]" -#: peigen.c:1238 pepigen.c:1238 pex64igen.c:1238 +#: peXXigen.c:1244 msgid "Exception Directory [.pdata]" msgstr "Répertoire des exceptions [.pdata]" -#: peigen.c:1239 pepigen.c:1239 pex64igen.c:1239 +#: peXXigen.c:1245 msgid "Security Directory" msgstr "Répertoire de la sécurité" -#: peigen.c:1240 pepigen.c:1240 pex64igen.c:1240 +#: peXXigen.c:1246 msgid "Base Relocation Directory [.reloc]" msgstr "Répertoire de base du réadressage [.reloc]" -#: peigen.c:1241 pepigen.c:1241 pex64igen.c:1241 +#: peXXigen.c:1247 msgid "Debug Directory" msgstr "Répertoire de débug" -#: peigen.c:1242 pepigen.c:1242 pex64igen.c:1242 +#: peXXigen.c:1248 msgid "Description Directory" msgstr "Répertoire de description" -#: peigen.c:1243 pepigen.c:1243 pex64igen.c:1243 +#: peXXigen.c:1249 msgid "Special Directory" msgstr "Répertoire spécial" -#: peigen.c:1244 pepigen.c:1244 pex64igen.c:1244 +#: peXXigen.c:1250 msgid "Thread Storage Directory [.tls]" msgstr "Répertoire des files de stockage [.tls]" -#: peigen.c:1245 pepigen.c:1245 pex64igen.c:1245 +#: peXXigen.c:1251 msgid "Load Configuration Directory" msgstr "Répertoire de chargement de configuration" -#: peigen.c:1246 pepigen.c:1246 pex64igen.c:1246 +#: peXXigen.c:1252 msgid "Bound Import Directory" msgstr "Répertoire des importations limitées" -#: peigen.c:1247 pepigen.c:1247 pex64igen.c:1247 +#: peXXigen.c:1253 msgid "Import Address Table Directory" msgstr "Répertoire de la table d'adresse d'importation" -#: peigen.c:1248 pepigen.c:1248 pex64igen.c:1248 +#: peXXigen.c:1254 msgid "Delay Import Directory" msgstr "Répertoire des délais d'importation" -#: peigen.c:1249 pepigen.c:1249 pex64igen.c:1249 +#: peXXigen.c:1255 msgid "CLR Runtime Header" msgstr "En-tête exécutable CLR" -#: peigen.c:1250 pepigen.c:1250 pex64igen.c:1250 +#: peXXigen.c:1256 msgid "Reserved" msgstr "Réservé" -#: peigen.c:1310 pepigen.c:1310 pex64igen.c:1310 +#: peXXigen.c:1316 #, c-format msgid "" "\n" @@ -8035,7 +8426,7 @@ "\n" "Il y a une table d'importation, mais la section la contenant ne peut être repérée\n" -#: peigen.c:1316 pepigen.c:1316 pex64igen.c:1316 +#: peXXigen.c:1322 #, c-format msgid "" "\n" @@ -8044,7 +8435,7 @@ "\n" "Il y a une table d'importation dans %s, mais cette section n'a pas de contenu\n" -#: peigen.c:1323 pepigen.c:1323 pex64igen.c:1323 +#: peXXigen.c:1329 #, c-format msgid "" "\n" @@ -8053,7 +8444,7 @@ "\n" "Il y a une table d'importation dans %s à 0x%lx\n" -#: peigen.c:1365 pepigen.c:1365 pex64igen.c:1365 +#: peXXigen.c:1369 #, c-format msgid "" "\n" @@ -8062,12 +8453,12 @@ "\n" "Descripteur de fonction localisé à l'adresse de départ: %04lx\n" -#: peigen.c:1369 pepigen.c:1369 pex64igen.c:1369 +#: peXXigen.c:1373 #, c-format msgid "\tcode-base %08lx toc (loadable/actual) %08lx/%08lx\n" msgstr "\tcode-base %08lx tab. des entrées (chargeable/actuel) %08lx/%08lx\n" -#: peigen.c:1377 pepigen.c:1377 pex64igen.c:1377 +#: peXXigen.c:1380 #, c-format msgid "" "\n" @@ -8076,7 +8467,7 @@ "\n" "Pas de section reldata! Descripteur de fonction pas décodé.\n" -#: peigen.c:1382 pepigen.c:1382 pex64igen.c:1382 +#: peXXigen.c:1385 #, c-format msgid "" "\n" @@ -8085,7 +8476,7 @@ "\n" "Les tables d'importation (contenus interprété de la section %s)\n" -#: peigen.c:1385 pepigen.c:1385 pex64igen.c:1385 +#: peXXigen.c:1388 #, c-format msgid "" " vma: Hint Time Forward DLL First\n" @@ -8094,7 +8485,7 @@ " vma: Hint Temps Avant DLL Premier\n" " Table Estampil. Chaîne Nom Thunk\n" -#: peigen.c:1435 pepigen.c:1435 pex64igen.c:1435 +#: peXXigen.c:1437 #, c-format msgid "" "\n" @@ -8103,12 +8494,12 @@ "\n" "\tNom DLL: %.*s\n" -#: peigen.c:1451 pepigen.c:1451 pex64igen.c:1451 +#: peXXigen.c:1453 #, c-format msgid "\tvma: Hint/Ord Member-Name Bound-To\n" msgstr "\tvma: Hint/Ord Membre Lien\n" -#: peigen.c:1476 pepigen.c:1476 pex64igen.c:1476 +#: peXXigen.c:1478 #, c-format msgid "" "\n" @@ -8117,13 +8508,12 @@ "\n" "Il y a un premier « thunk », mais la section le contenant ne peut être repérée\n" -#: peigen.c:1520 peigen.c:1559 pepigen.c:1520 pepigen.c:1559 pex64igen.c:1520 -#: pex64igen.c:1559 +#: peXXigen.c:1522 peXXigen.c:1561 #, c-format msgid "\t" msgstr "\t" -#: peigen.c:1652 pepigen.c:1652 pex64igen.c:1652 +#: peXXigen.c:1654 #, c-format msgid "" "\n" @@ -8132,7 +8522,7 @@ "\n" "Il y a une table d'exportation, mais la section la contenant n'a pu être repérée\n" -#: peigen.c:1658 pepigen.c:1658 pex64igen.c:1658 +#: peXXigen.c:1660 #, c-format msgid "" "\n" @@ -8141,7 +8531,7 @@ "\n" "Il y a une table d'exportation dans %s, mais cette section n'a pas de contenu\n" -#: peigen.c:1669 pepigen.c:1669 pex64igen.c:1669 +#: peXXigen.c:1671 #, c-format msgid "" "\n" @@ -8150,7 +8540,7 @@ "\n" "Il y a une table d'exportation dans %s, mais elle ne rentre pas dans la section\n" -#: peigen.c:1680 pepigen.c:1680 pex64igen.c:1680 +#: peXXigen.c:1682 #, c-format msgid "" "\n" @@ -8159,7 +8549,7 @@ "\n" "Il y a une table d'exportation dans %s, mais elle est trop petite (%d)\n" -#: peigen.c:1686 pepigen.c:1686 pex64igen.c:1686 +#: peXXigen.c:1688 #, c-format msgid "" "\n" @@ -8168,7 +8558,7 @@ "\n" "Il y a une table d'exportation dans %s à 0x%lx\n" -#: peigen.c:1714 pepigen.c:1714 pex64igen.c:1714 +#: peXXigen.c:1716 #, c-format msgid "" "\n" @@ -8179,67 +8569,67 @@ "Les tables d'exportation (contenus interprété de la section %s)\n" "\n" -#: peigen.c:1718 pepigen.c:1718 pex64igen.c:1718 +#: peXXigen.c:1720 #, c-format msgid "Export Flags \t\t\t%lx\n" msgstr "Fanion d'exportation \t\t\t%lx\n" -#: peigen.c:1721 pepigen.c:1721 pex64igen.c:1721 +#: peXXigen.c:1723 #, c-format msgid "Time/Date stamp \t\t%lx\n" msgstr "Tampon Heure/Date \t\t%lx\n" -#: peigen.c:1725 pepigen.c:1725 pex64igen.c:1725 +#: peXXigen.c:1727 #, c-format msgid "Major/Minor \t\t\t%d/%d\n" msgstr "Majeur/Mineur \t\t\t%d/%d\n" -#: peigen.c:1728 pepigen.c:1728 pex64igen.c:1728 +#: peXXigen.c:1730 #, c-format msgid "Name \t\t\t\t" msgstr "Nom \t\t\t\t" -#: peigen.c:1739 pepigen.c:1739 pex64igen.c:1739 +#: peXXigen.c:1741 #, c-format msgid "Ordinal Base \t\t\t%ld\n" msgstr "base de nombre ordinal \t\t\t%ld\n" -#: peigen.c:1742 pepigen.c:1742 pex64igen.c:1742 +#: peXXigen.c:1744 #, c-format msgid "Number in:\n" msgstr "Numéro dans:\n" -#: peigen.c:1745 pepigen.c:1745 pex64igen.c:1745 +#: peXXigen.c:1747 #, c-format msgid "\tExport Address Table \t\t%08lx\n" msgstr "\tTable d'adresses d'exportation \t\t%08lx\n" -#: peigen.c:1749 pepigen.c:1749 pex64igen.c:1749 +#: peXXigen.c:1751 #, c-format msgid "\t[Name Pointer/Ordinal] Table\t%08lx\n" msgstr "\tTable [Nom pointeur/Nombre ordinal]\t%08lx\n" -#: peigen.c:1752 pepigen.c:1752 pex64igen.c:1752 +#: peXXigen.c:1754 #, c-format msgid "Table Addresses\n" msgstr "Table d'adresses\n" -#: peigen.c:1755 pepigen.c:1755 pex64igen.c:1755 +#: peXXigen.c:1757 #, c-format msgid "\tExport Address Table \t\t" msgstr "\tTable d'adresse d'exportation \t\t" -#: peigen.c:1760 pepigen.c:1760 pex64igen.c:1760 +#: peXXigen.c:1762 #, c-format msgid "\tName Pointer Table \t\t" msgstr "\tTable des noms de pointeurs \t\t" -#: peigen.c:1765 pepigen.c:1765 pex64igen.c:1765 +#: peXXigen.c:1767 #, c-format msgid "\tOrdinal Table \t\t\t" msgstr "\tTable des ordinals \t\t\t" -#: peigen.c:1779 pepigen.c:1779 pex64igen.c:1779 +#: peXXigen.c:1781 #, c-format msgid "" "\n" @@ -8248,20 +8638,20 @@ "\n" "Table d'adresses d'exportation -- base de nombre ordinal %ld\n" -#: peigen.c:1788 pepigen.c:1788 pex64igen.c:1788 +#: peXXigen.c:1790 #, c-format msgid "\tInvalid Export Address Table rva (0x%lx) or entry count (0x%lx)\n" msgstr "\tL'adresse virtuelle relative de la table des adresses exportées (0x%lx) ou le nombre d'entrées (0x%lx) est invalide\n" -#: peigen.c:1807 pepigen.c:1807 pex64igen.c:1807 +#: peXXigen.c:1809 msgid "Forwarder RVA" msgstr "Adresseur RVA" -#: peigen.c:1819 pepigen.c:1819 pex64igen.c:1819 +#: peXXigen.c:1821 msgid "Export RVA" msgstr "Exportation RVA" -#: peigen.c:1826 pepigen.c:1826 pex64igen.c:1826 +#: peXXigen.c:1828 #, c-format msgid "" "\n" @@ -8270,29 +8660,27 @@ "\n" "Table [Ordinal/Nom de pointeur]\n" -#: peigen.c:1834 pepigen.c:1834 pex64igen.c:1834 +#: peXXigen.c:1836 #, c-format msgid "\tInvalid Name Pointer Table rva (0x%lx) or entry count (0x%lx)\n" msgstr "\tAdresse virtuelle relative de la table des pointeurs de noms (0x%lx) ou nombre d'entrées (0x%lx) invalide\n" -#: peigen.c:1841 pepigen.c:1841 pex64igen.c:1841 +#: peXXigen.c:1843 #, c-format msgid "\tInvalid Ordinal Table rva (0x%lx) or entry count (0x%lx)\n" msgstr "\tAdresse virtuelle relative de la table ordinale (0x%lx) ou nombre d'entrées (0x%lx) invalide\n" -#: peigen.c:1855 pepigen.c:1855 pex64igen.c:1855 +#: peXXigen.c:1857 #, c-format msgid "\t[%4ld] \n" msgstr "\t[%4ld] \n" -#: peigen.c:1909 peigen.c:2106 pepigen.c:1909 pepigen.c:2106 pex64igen.c:1909 -#: pex64igen.c:2106 +#: peXXigen.c:1911 peXXigen.c:2107 #, c-format msgid "warning, .pdata section size (%ld) is not a multiple of %d\n" msgstr "attention, taille de la section .pdata (%ld) n'est pas un multiple de %d\n" -#: peigen.c:1913 peigen.c:2110 pepigen.c:1913 pepigen.c:2110 pex64igen.c:1913 -#: pex64igen.c:2110 +#: peXXigen.c:1915 peXXigen.c:2111 #, c-format msgid "" "\n" @@ -8301,12 +8689,12 @@ "\n" "La table de fonctions (interprétation du contenu de la section .pdata)\n" -#: peigen.c:1916 pepigen.c:1916 pex64igen.c:1916 +#: peXXigen.c:1918 #, c-format msgid " vma:\t\t\tBegin Address End Address Unwind Info\n" msgstr " vma:\t\t\tDébut Adresse Fin Adresse Unwind Info\n" -#: peigen.c:1918 pepigen.c:1918 pex64igen.c:1918 +#: peXXigen.c:1920 #, c-format msgid "" " vma:\t\tBegin End EH EH PrologEnd Exception\n" @@ -8315,27 +8703,27 @@ " vma:\t\tDébut Fin EH EH FinProlog Exception\n" " \t\tAdresse Adresse Handler Données Adresse Masque\n" -#: peigen.c:1931 pepigen.c:1931 pex64igen.c:1931 +#: peXXigen.c:1933 #, c-format msgid "Virtual size of .pdata section (%ld) larger than real size (%ld)\n" msgstr "La taille virtuelle de la section .pdata (%ld) est plus grande que la taille réelle (%ld)\n" -#: peigen.c:2001 pepigen.c:2001 pex64igen.c:2001 +#: peXXigen.c:2002 #, c-format msgid " Register save millicode" msgstr " Registre a préservé le millicode" -#: peigen.c:2004 pepigen.c:2004 pex64igen.c:2004 +#: peXXigen.c:2005 #, c-format msgid " Register restore millicode" msgstr " Registre a restauré le millicode" -#: peigen.c:2007 pepigen.c:2007 pex64igen.c:2007 +#: peXXigen.c:2008 #, c-format msgid " Glue code sequence" msgstr " Séquence du code de liants" -#: peigen.c:2112 pepigen.c:2112 pex64igen.c:2112 +#: peXXigen.c:2113 #, c-format msgid "" " vma:\t\tBegin Prolog Function Flags Exception EH\n" @@ -8344,7 +8732,7 @@ " vma:\t\tDébut Long. Long. Fanions Gestion. EH\n" " \t\tAdresse Prolog. Fonction 32b exc Exception Données\n" -#: peigen.c:2234 pepigen.c:2234 pex64igen.c:2234 +#: peXXigen.c:2234 #, c-format msgid "" "\n" @@ -8355,7 +8743,7 @@ "\n" "Fichier de base des réadressages PE (contenus interprétés de la section .reloc)\n" -#: peigen.c:2264 pepigen.c:2264 pex64igen.c:2264 +#: peXXigen.c:2263 #, c-format msgid "" "\n" @@ -8364,62 +8752,62 @@ "\n" "Adresse virtuelle: %08lx taille des morceaux %ld (0x%lx) nombre de correctifs %ld\n" -#: peigen.c:2282 pepigen.c:2282 pex64igen.c:2282 +#: peXXigen.c:2281 #, c-format msgid "\treloc %4d offset %4x [%4lx] %s" msgstr "\tréadressage %4d décalage %4x [%4lx] %s" -#: peigen.c:2343 pepigen.c:2343 pex64igen.c:2343 +#: peXXigen.c:2342 #, c-format msgid "%03x %*.s Entry: " msgstr "%03x %*.s Entrée: " -#: peigen.c:2367 pepigen.c:2367 pex64igen.c:2367 +#: peXXigen.c:2366 #, c-format msgid "name: [val: %08lx len %d]: " msgstr "nom: [val: %08lx long %d]: " -#: peigen.c:2387 pepigen.c:2387 pex64igen.c:2387 +#: peXXigen.c:2386 #, c-format msgid "\n" msgstr "\n" -#: peigen.c:2397 pepigen.c:2397 pex64igen.c:2397 +#: peXXigen.c:2396 #, c-format msgid "\n" msgstr "\n" -#: peigen.c:2402 pepigen.c:2402 pex64igen.c:2402 +#: peXXigen.c:2401 #, c-format msgid "ID: %#08lx" msgstr "ID: %#08lx" -#: peigen.c:2405 pepigen.c:2405 pex64igen.c:2405 +#: peXXigen.c:2404 #, c-format msgid ", Value: %#08lx\n" msgstr ", Valeur: %#08lx\n" -#: peigen.c:2427 pepigen.c:2427 pex64igen.c:2427 +#: peXXigen.c:2426 #, c-format msgid "%03x %*.s Leaf: Addr: %#08lx, Size: %#08lx, Codepage: %d\n" msgstr "%03x %*.s Feuilles: Adr: %#08lx, Taille: %#08lx, Codepage: %d\n" -#: peigen.c:2469 pepigen.c:2469 pex64igen.c:2469 +#: peXXigen.c:2468 #, c-format msgid "\n" msgstr "\n" -#: peigen.c:2477 pepigen.c:2477 pex64igen.c:2477 +#: peXXigen.c:2476 #, c-format msgid " Table: Char: %d, Time: %08lx, Ver: %d/%d, Num Names: %d, IDs: %d\n" msgstr "Table: Car: %d, Temps: %08lx, Ver: %d/%d, Nbr Noms: %d, IDs: %d\n" -#: peigen.c:2566 pepigen.c:2566 pex64igen.c:2566 +#: peXXigen.c:2564 #, c-format msgid "Corrupt .rsrc section detected!\n" msgstr "Détection d'une section .rsrc corrompue !\n" -#: peigen.c:2590 pepigen.c:2590 pex64igen.c:2590 +#: peXXigen.c:2588 #, c-format msgid "" "\n" @@ -8428,17 +8816,17 @@ "\n" "ATTENTION: Données en trop dans la section .rsrc – elles seront ignorées par Windows:\n" -#: peigen.c:2596 pepigen.c:2596 pex64igen.c:2596 +#: peXXigen.c:2594 #, c-format msgid " String table starts at offset: %#03x\n" msgstr " La table des chaînes démarre au décalage: %#03x\n" -#: peigen.c:2599 pepigen.c:2599 pex64igen.c:2599 +#: peXXigen.c:2597 #, c-format msgid " Resources start at offset: %#03x\n" msgstr " Les ressources démarrent au décalage: %#03x\n" -#: peigen.c:2651 pepigen.c:2651 pex64igen.c:2651 +#: peXXigen.c:2654 #, c-format msgid "" "\n" @@ -8447,7 +8835,7 @@ "\n" "Ceci est un répertoire de débogage, mais la section le contenant ne peut être repérée\n" -#: peigen.c:2657 pepigen.c:2657 pex64igen.c:2657 +#: peXXigen.c:2660 #, c-format msgid "" "\n" @@ -8456,7 +8844,7 @@ "\n" "Il y a un répertoire de débogage dans %s, mais cette section n'a pas de contenu\n" -#: peigen.c:2664 pepigen.c:2664 pex64igen.c:2664 +#: peXXigen.c:2667 #, c-format msgid "" "\n" @@ -8465,7 +8853,7 @@ "\n" "Erreur: la section %s contient l'adresse de départ des données de débogage mais elle est trop petite\n" -#: peigen.c:2669 pepigen.c:2669 pex64igen.c:2669 +#: peXXigen.c:2672 #, c-format msgid "" "\n" @@ -8475,24 +8863,24 @@ "\n" "Il y a un répertoire de débogage dans %s à 0x%lx\n" -#: peigen.c:2676 pepigen.c:2676 pex64igen.c:2676 +#: peXXigen.c:2679 #, c-format msgid "The debug data size field in the data directory is too big for the section" msgstr "Le champ de taille des données de débogage dans le répertoire de données est trop grand pour la section" # RVA = Adresse Virtuelle Relative mais AVR semble inconnu sur internet. Gageons que les utilisateurs trouverons plus # facilement la signification de RVA dans ce contexte. -#: peigen.c:2681 pepigen.c:2681 pex64igen.c:2681 +#: peXXigen.c:2684 #, c-format msgid "Type Size Rva Offset\n" msgstr "Type Taille Rva Décalage\n" -#: peigen.c:2729 pepigen.c:2729 pex64igen.c:2729 +#: peXXigen.c:2731 #, c-format msgid "(format %c%c%c%c signature %s age %ld)\n" msgstr "(format %c%c%c%c signature %s age %ld)\n" -#: peigen.c:2737 pepigen.c:2737 pex64igen.c:2737 +#: peXXigen.c:2741 #, c-format msgid "The debug directory size is not a multiple of the debug directory entry size\n" msgstr "La taille du répertoire de débogage n'est pas un multiple de la taille d'une entrée du répertoire de débogage\n" @@ -8500,7 +8888,7 @@ #. The MS dumpbin program reportedly ands with 0xff0f before #. printing the characteristics field. Not sure why. No reason to #. emulate it here. -#: peigen.c:2757 pepigen.c:2757 pex64igen.c:2757 +#: peXXigen.c:2825 #, c-format msgid "" "\n" @@ -8509,97 +8897,124 @@ "\n" "Caractéristiques 0x%x\n" -#: peigen.c:2993 pepigen.c:2993 pex64igen.c:2993 +#: peXXigen.c:3072 #, c-format msgid "%pB: Data Directory size (%lx) exceeds space left in section (%)" msgstr "%pB: La taille du répertoire de données (%lx) excède l'espace restant dans la section (%)" -#: peigen.c:3025 pepigen.c:3025 pex64igen.c:3025 +#: peXXigen.c:3104 msgid "failed to update file offsets in debug directory" msgstr "échec lors de la mise à jour des décalages du fichier dans le répertoire de débogage" -#: peigen.c:3033 pepigen.c:3033 pex64igen.c:3033 +#: peXXigen.c:3112 #, c-format msgid "%pB: failed to read debug data section" msgstr "%pB: échec lors de la lecture de la section des données de débogage" -#: peigen.c:3849 pepigen.c:3849 pex64igen.c:3849 +#: peXXigen.c:3928 #, c-format msgid ".rsrc merge failure: duplicate string resource: %d" msgstr "échec de la fusion de .rsrc: ressource chaîne dupliquée: %d" -#: peigen.c:3984 pepigen.c:3984 pex64igen.c:3984 +#: peXXigen.c:4063 msgid ".rsrc merge failure: multiple non-default manifests" msgstr "échec de la fusion de .rsrc: plusieurs manifestes pas par défaut" -#: peigen.c:4002 pepigen.c:4002 pex64igen.c:4002 +#: peXXigen.c:4081 msgid ".rsrc merge failure: a directory matches a leaf" msgstr "échec de la fusion de .rsrc: un répertoire correspond à une feuille" -#: peigen.c:4044 pepigen.c:4044 pex64igen.c:4044 +#: peXXigen.c:4123 msgid ".rsrc merge failure: duplicate leaf" msgstr "échec de la fusion de .rsrc: feuille dupliquée" -#: peigen.c:4046 pepigen.c:4046 pex64igen.c:4046 +#: peXXigen.c:4125 #, c-format msgid ".rsrc merge failure: duplicate leaf: %s" msgstr "échec de la fusion .rsrc: feuille dupliquée: %s" -#: peigen.c:4112 pepigen.c:4112 pex64igen.c:4112 +#: peXXigen.c:4191 msgid ".rsrc merge failure: dirs with differing characteristics" msgstr "échec de la fusion .rsrc: répertoires avec des caractéristiques différentes" -#: peigen.c:4119 pepigen.c:4119 pex64igen.c:4119 +#: peXXigen.c:4198 msgid ".rsrc merge failure: differing directory versions" msgstr "échec de la fusion de .rsrc: versions de répertoires différentes" #. Corrupted .rsrc section - cannot merge. -#: peigen.c:4236 pepigen.c:4236 pex64igen.c:4236 +#: peXXigen.c:4315 #, c-format msgid "%pB: .rsrc merge failure: corrupt .rsrc section" msgstr "%pB: échec de la fusion de .rsrc: section .rsrc corrompue" -#: peigen.c:4244 pepigen.c:4244 pex64igen.c:4244 +#: peXXigen.c:4323 #, c-format msgid "%pB: .rsrc merge failure: unexpected .rsrc size" msgstr "%pB: échec de la fusion de .rsrc: taille de .rsrc inattendue" -#: peigen.c:4383 pepigen.c:4383 pex64igen.c:4383 +#: peXXigen.c:4462 #, c-format msgid "%pB: unable to fill in DataDictionary[1] because .idata$2 is missing" msgstr "%pB: impossible de remplir DataDictionary[1] car .idata$2 est manquant" -#: peigen.c:4403 pepigen.c:4403 pex64igen.c:4403 +#: peXXigen.c:4482 #, c-format msgid "%pB: unable to fill in DataDictionary[1] because .idata$4 is missing" msgstr "%pB: impossible de remplir DataDictionary[1] car .idata$4 est manquant" -#: peigen.c:4424 pepigen.c:4424 pex64igen.c:4424 +#: peXXigen.c:4503 #, c-format msgid "%pB: unable to fill in DataDictionary[12] because .idata$5 is missing" msgstr "%pB: impossible de remplir DataDictionary[12] car .idata$5 est manquant" -#: peigen.c:4444 pepigen.c:4444 pex64igen.c:4444 +#: peXXigen.c:4523 #, c-format msgid "%pB: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE (12)] because .idata$6 is missing" msgstr "%pB: impossible de remplir DataDictionary[PE_IMPORT_ADDRESS_TABLE (12)] car .idata$6 est manquant" -#: peigen.c:4486 pepigen.c:4486 pex64igen.c:4486 +#: peXXigen.c:4565 #, c-format msgid "%pB: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE(12)] because .idata$6 is missing" msgstr "%pB: impossible de remplir DataDictionary[PE_IMPORT_ADDRESS_TABLE(12)] car .idata$6 est manquant" -#: peigen.c:4511 pepigen.c:4511 pex64igen.c:4511 +#: peXXigen.c:4590 #, c-format msgid "%pB: unable to fill in DataDictionary[9] because __tls_used is missing" msgstr "%pB: impossible de remplir DataDictionary[9] car __tls_used est manquant" +#~ msgid "%pB: corrupt symbol count: %#" +#~ msgstr "%pB: décompte de symbole corrompu: %#" + +#~ msgid "%pB: not enough memory to allocate space for %# symbols of size %#" +#~ msgstr "%pB: Pas assez de mémoire pour allouer l'espace pour %# symboles de taille %#" + +#~ msgid "%pB: corrupt size field in group section header: %#" +#~ msgstr "%pB: champ de taille corrompu dans l'en-tête du groupe de section: %#" + +#~ msgid "error: %pB version reference section is too large (%# bytes)" +#~ msgstr "erreur: la section de référence de version %pB est trop grande (%# octets)" + +#~ msgid "unexpected STO_SH5_ISA32 on local symbol is not handled" +#~ msgstr "STO_SH5_ISA32 inattendu sur le symbole local n'est pas traité" + +#~ msgid "%P%X: read-only segment has dynamic IFUNC relocations; recompile with %s\n" +#~ msgstr "%P%X: le segment en lecture seule a des réadressages IFUNC dynamiques; recompilez avec %s\n" + +#~ msgid "bfd_mach_o_read_symtab_symbols: unable to allocate memory for symbols" +#~ msgstr "bfd_mach_o_read_symtab_symbols: impossible d'allouer la mémoire pour les symboles" + +#~ msgid "error: %pB: conflicting priv spec version (major/minor/revision)." +#~ msgstr "erreur: %pB: version de spec priv en conflit (majeur/mineur/révision)." + +#~ msgid "unsupported relocation type %#x" +#~ msgstr "type de réadressage %#x non supporté" + +#~ msgid "%pB: relocation %s against `%s' can not be used whenmaking a shared object; recompile with -fPIC" +#~ msgstr "%pB: réadressage de %s en vertu de « %s » ne peut être utilisé lors de la création d'un objet partagé; recompilez avec -fPIC" + #~ msgid "%H: call to `%pT' lacks nop, can't restore toc; recompile with -fPIC\n" #~ msgstr "%H: il manque un nop à l'appel à « %pT », toc ne peut être rétablie, recompilez avec -fPIC\n" -#~ msgid "error: %pB: " -#~ msgstr "erreur: %pB: " - #~ msgid "error: %pB: " #~ msgstr "erreur: %pB: " @@ -8690,9 +9105,6 @@ #~ msgid "unsupported reloc type" #~ msgstr "type de réadressage non supporté" -#~ msgid "SH Error: unknown reloc type %d" -#~ msgstr "Erreur SH: type de réadressage %d inconnu" - #~ msgid "Unrecognized reloc type 0x%x" #~ msgstr "Type de réadressage non reconnu 0x%x" @@ -8749,9 +9161,6 @@ #~ msgid "%B: invalid AVR reloc number: %d" #~ msgstr "%B: numéro de réadressage AVR invalide: %d" -#~ msgid "%B: unsupported relocation type %d" -#~ msgstr "%B: type de réadressage %d non supporté" - #~ msgid "Unsupported CR16 relocation type: 0x%x\n" #~ msgstr "Type de réadressage CR16 non supporté: 0x%x\n" @@ -8794,9 +9203,6 @@ #~ msgid "%B: unrecognised I370 reloc number: %d" #~ msgstr "%B: numéro de réadressage I370 non reconnu: %d" -#~ msgid "%B: unknown relocation type %d for symbol %s" -#~ msgstr "%B: type de réadressage %d inconnu pour le symbole %s" - #~ msgid "%B: Relocation %s is not yet supported for symbol %s." #~ msgstr "%B: réadressage %s n'est pas encore supporté pour le symbole %s" @@ -9133,9 +9539,6 @@ #~ msgid "Warning: size of symbol `%s' changed from %lu in %B to %lu in %B" #~ msgstr "Attention: taille du symbole « %s » a changé de %lu dans %B à %lu dans %B" -#~ msgid "%B: addend -0x%x in relocation %s against symbol `%s' at 0x%lx in section `%A' is out of range" -#~ msgstr "%B: l'opérande -0x%x dans le réadressage %s vers le symbole « %s » à 0x%lx dans la section « %A » est hors limite" - #~ msgid "%F: failed to create BND PLT .eh_frame section\n" #~ msgstr "%F: échec lors de la création de la section .eh_frame PLT BND\n" diff -Nru gdb-9.1/bfd/po/Make-in gdb-10.2/bfd/po/Make-in --- gdb-9.1/bfd/po/Make-in 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/po/Make-in 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ # Makefile for program source directory in GNU NLS utilities package. # Copyright (C) 1995, 1996, 1997 by Ulrich Drepper -# Copyright (C) 2001-2019 Free Software Foundation, Inc. +# Copyright (C) 2001-2020 Free Software Foundation, Inc. # # This file may be copied and used freely without restrictions. It can # be used in projects which are not available under the GNU Public License Binary files /tmp/tmpwlqmdap4/HCMjq_z_kj/gdb-9.1/bfd/po/pt.gmo and /tmp/tmpwlqmdap4/bi0oNuAXeo/gdb-10.2/bfd/po/pt.gmo differ diff -Nru gdb-9.1/bfd/po/pt.po gdb-10.2/bfd/po/pt.po --- gdb-9.1/bfd/po/pt.po 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/po/pt.po 2021-04-25 04:06:26.000000000 +0000 @@ -1,240 +1,253 @@ # Portuguese translations for GNU binutils package. # Copyright (C) 2018 Free Software Foundation, Inc. # This file is distributed under the same license as the binutils package. -# Pedro Albuquerque , 2018, 2019. +# Pedro Albuquerque , 2018, 2019, 2020. # msgid "" msgstr "" -"Project-Id-Version: bfd-2.31.90\n" +"Project-Id-Version: bfd-2.34.90\n" "Report-Msgid-Bugs-To: bug-binutils@gnu.org\n" -"POT-Creation-Date: 2019-01-19 16:30+0000\n" -"PO-Revision-Date: 2019-01-20 17:21+0000\n" -"Last-Translator: Pedro Albuquerque \n" +"POT-Creation-Date: 2020-07-04 10:26+0100\n" +"PO-Revision-Date: 2020-07-05 07:27+0100\n" +"Last-Translator: Pedro Albuquerque \n" "Language-Team: Portuguese \n" "Language: pt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" -"Plural-Forms: nplurals=2; plural=n != 1;\\n\n" -"X-Generator: Gtranslator 2.91.7\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Geany / PoHelper 1.36\n" -#: aout-cris.c:200 +#: aout-cris.c:196 #, c-format msgid "%pB: unsupported relocation type exported: %#x" msgstr "%pB: tipo de relocalização não suportado exportado: %#x" -#: aout-cris.c:244 +#: aout-cris.c:242 #, c-format msgid "%pB: unsupported relocation type imported: %#x" msgstr "%pB: tipo de relocalização não suportado importado: %#x" -#: aout-cris.c:256 +#: aout-cris.c:254 #, c-format msgid "%pB: bad relocation record imported: %d" msgstr "%pB: registo de relocalização importado inválido: %d" -#: aoutx.h:1265 aoutx.h:1618 pdp11.c:1138 pdp11.c:1399 +#: aoutx.h:1265 aoutx.h:1613 pdp11.c:1236 pdp11.c:1510 #, c-format msgid "%pB: can not represent section `%pA' in a.out object file format" msgstr "%pB: impossível representar secção \"%pA\" num formato de ficheiro objecto a.out" -#: aoutx.h:1582 pdp11.c:1371 +#: aoutx.h:1577 pdp11.c:1482 #, c-format msgid "%pB: can not represent section for symbol `%s' in a.out object file format" msgstr "%pB: impossível representar secção para símbolo\"%s\" num formato de ficheiro objecto a.out" -#: aoutx.h:1585 vms-alpha.c:7860 +#: aoutx.h:1580 vms-alpha.c:8040 msgid "*unknown*" msgstr "*desconhecido*" -#: aoutx.h:1721 +#: aoutx.h:1716 pdp11.c:1578 #, c-format msgid "%pB: invalid string offset % >= %" msgstr "%pB: desvio de cadeia inválido % >= %" -#: aoutx.h:2412 aoutx.h:2430 +#: aoutx.h:1963 +#, c-format +msgid "%pB: unsupported AOUT relocation size: %d" +msgstr "%pB: tipo de relocalização AOUT não suportado %d" + +#: aoutx.h:2412 aoutx.h:2430 pdp11.c:2058 #, c-format msgid "%pB: attempt to write out unknown reloc type" msgstr "%pB tentativa de escrever tipo de reloc desconhecido" -#: aoutx.h:4086 +#: aoutx.h:4087 pdp11.c:3441 #, c-format msgid "%pB: unsupported relocation type" msgstr "%pB: tipo de relocalização não suportado" #. Unknown relocation. -#: aoutx.h:4407 coff-alpha.c:601 coff-alpha.c:1514 coff-rs6000.c:2772 +#: aoutx.h:4408 coff-alpha.c:601 coff-alpha.c:1512 coff-rs6000.c:2758 #: coff-sh.c:504 coff-tic4x.c:184 coff-tic54x.c:279 elf-hppa.h:798 -#: elf-hppa.h:826 elf-m10200.c:226 elf-m10300.c:812 elf32-arc.c:517 -#: elf32-arm.c:1943 elf32-avr.c:964 elf32-bfin.c:1061 elf32-bfin.c:4698 -#: elf32-cr16.c:653 elf32-cr16.c:683 elf32-cr16c.c:186 elf32-cris.c:467 -#: elf32-crx.c:429 elf32-csky.c:989 elf32-d10v.c:234 elf32-d30v.c:522 -#: elf32-d30v.c:544 elf32-dlx.c:548 elf32-epiphany.c:376 elf32-fr30.c:381 -#: elf32-frv.c:2558 elf32-frv.c:6262 elf32-ft32.c:306 elf32-h8300.c:302 -#: elf32-i386.c:401 elf32-ip2k.c:1245 elf32-iq2000.c:442 elf32-lm32.c:539 -#: elf32-m32c.c:305 elf32-m32r.c:1286 elf32-m32r.c:1311 elf32-m32r.c:2417 -#: elf32-m68hc11.c:390 elf32-m68hc12.c:510 elf32-m68k.c:352 elf32-mcore.c:354 -#: elf32-mcore.c:440 elf32-mep.c:389 elf32-metag.c:878 elf32-microblaze.c:692 -#: elf32-microblaze.c:969 elf32-mips.c:2229 elf32-moxie.c:137 -#: elf32-msp430.c:648 elf32-msp430.c:658 elf32-mt.c:241 elf32-nds32.c:3236 -#: elf32-nds32.c:3262 elf32-nds32.c:5173 elf32-nios2.c:3015 elf32-or1k.c:1037 -#: elf32-pj.c:325 elf32-ppc.c:898 elf32-ppc.c:911 elf32-pru.c:420 -#: elf32-rl78.c:291 elf32-rx.c:313 elf32-rx.c:322 elf32-s12z.c:292 -#: elf32-s390.c:347 elf32-sh.c:438 elf32-spu.c:160 elf32-tic6x.c:1508 -#: elf32-tic6x.c:1518 elf32-tic6x.c:1537 elf32-tic6x.c:1547 elf32-tic6x.c:2642 -#: elf32-tilepro.c:803 elf32-v850.c:1899 elf32-v850.c:1921 elf32-v850.c:4270 -#: elf32-vax.c:290 elf32-visium.c:482 elf32-wasm32.c:105 elf32-xc16x.c:250 -#: elf32-xgate.c:418 elf32-xstormy16.c:395 elf32-xtensa.c:459 -#: elf32-xtensa.c:493 elf64-alpha.c:1112 elf64-alpha.c:4101 elf64-alpha.c:4249 -#: elf64-ia64-vms.c:254 elf64-ia64-vms.c:3440 elf64-mips.c:3958 -#: elf64-mips.c:3974 elf64-mmix.c:1264 elf64-nfp.c:238 elf64-ppc.c:921 -#: elf64-ppc.c:1209 elf64-ppc.c:1218 elf64-s390.c:328 elf64-s390.c:378 -#: elf64-x86-64.c:285 elfn32-mips.c:3786 elfxx-ia64.c:324 elfxx-riscv.c:955 -#: elfxx-sparc.c:589 elfxx-sparc.c:639 elfxx-tilegx.c:912 elfxx-tilegx.c:952 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:2125 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:2223 -#: elf32-ia64.c:210 elf32-ia64.c:3862 elf64-ia64.c:210 elf64-ia64.c:3862 +#: elf-hppa.h:826 elf-m10200.c:226 elf-m10300.c:812 elf32-arc.c:532 +#: elf32-arm.c:1985 elf32-avr.c:962 elf32-bfin.c:1062 elf32-bfin.c:4677 +#: elf32-cr16.c:654 elf32-cr16.c:684 elf32-cris.c:467 elf32-crx.c:429 +#: elf32-csky.c:990 elf32-d10v.c:234 elf32-d30v.c:522 elf32-d30v.c:544 +#: elf32-dlx.c:546 elf32-epiphany.c:372 elf32-fr30.c:381 elf32-frv.c:2558 +#: elf32-frv.c:6239 elf32-ft32.c:306 elf32-h8300.c:302 elf32-i386.c:400 +#: elf32-ip2k.c:1240 elf32-iq2000.c:442 elf32-lm32.c:495 elf32-m32c.c:305 +#: elf32-m32r.c:1286 elf32-m32r.c:1311 elf32-m32r.c:2232 elf32-m68hc11.c:390 +#: elf32-m68hc12.c:510 elf32-m68k.c:354 elf32-mcore.c:354 elf32-mcore.c:440 +#: elf32-mep.c:389 elf32-metag.c:874 elf32-microblaze.c:692 +#: elf32-microblaze.c:965 elf32-mips.c:2229 elf32-moxie.c:137 +#: elf32-msp430.c:653 elf32-msp430.c:663 elf32-mt.c:241 elf32-nds32.c:3237 +#: elf32-nds32.c:3263 elf32-nds32.c:5033 elf32-nios2.c:3022 elf32-or1k.c:1040 +#: elf32-pj.c:326 elf32-ppc.c:901 elf32-ppc.c:914 elf32-pru.c:423 +#: elf32-rl78.c:291 elf32-rx.c:313 elf32-rx.c:322 elf32-s12z.c:296 +#: elf32-s390.c:347 elf32-sh.c:438 elf32-spu.c:163 elf32-tic6x.c:1498 +#: elf32-tic6x.c:1508 elf32-tic6x.c:1527 elf32-tic6x.c:1537 elf32-tic6x.c:2583 +#: elf32-tilepro.c:800 elf32-v850.c:1898 elf32-v850.c:1920 elf32-v850.c:4270 +#: elf32-vax.c:290 elf32-visium.c:481 elf32-wasm32.c:105 elf32-xc16x.c:250 +#: elf32-xgate.c:418 elf32-xstormy16.c:395 elf32-xtensa.c:522 +#: elf32-xtensa.c:556 elf32-z80.c:331 elf64-alpha.c:1113 elf64-alpha.c:4067 +#: elf64-alpha.c:4215 elf64-bpf.c:322 elf64-ia64-vms.c:254 +#: elf64-ia64-vms.c:3429 elf64-mips.c:3958 elf64-mips.c:3974 elf64-mmix.c:1264 +#: elf64-nfp.c:238 elf64-ppc.c:1014 elf64-ppc.c:1366 elf64-ppc.c:1375 +#: elf64-s390.c:328 elf64-s390.c:378 elf64-x86-64.c:281 elfn32-mips.c:3786 +#: elfxx-ia64.c:324 elfxx-riscv.c:954 elfxx-sparc.c:589 elfxx-sparc.c:639 +#: elfxx-tilegx.c:909 elfxx-tilegx.c:949 elfnn-aarch64.c:2215 +#: elfnn-aarch64.c:2313 elfnn-ia64.c:213 elfnn-ia64.c:3824 #, c-format msgid "%pB: unsupported relocation type %#x" msgstr "%pB: tipo de relocalização %#x não suportado" -#: aoutx.h:5434 pdp11.c:3694 +#: aoutx.h:5435 pdp11.c:3864 #, c-format msgid "%pB: relocatable link from %s to %s not supported" msgstr "%pB: ligação relocalizável de %s para %s não suportado" -#: archive.c:2214 +#: arc-got.h:69 +#, c-format +msgid "%pB: cannot allocate memory for local GOT entries" +msgstr "%pB: impossível alocar memória para entradas GOT locais" + +#: archive.c:2249 msgid "warning: writing archive was slow: rewriting timestamp" msgstr "Aviso: escrita do arquivo lenta: a reescrever a datação" -#: archive.c:2330 linker.c:1429 +#: archive.c:2316 archive.c:2376 elflink.c:4545 linker.c:1428 #, c-format msgid "%pB: plugin needed to handle lto object" msgstr "%pB: extensão precisou de gerir objecto lto" -#: archive.c:2559 +#: archive.c:2602 msgid "Reading archive file mod timestamp" msgstr "A ler datação de mod de ficheiro de arquivo" -#: archive.c:2583 +#: archive.c:2626 msgid "Writing updated armap timestamp" msgstr "A escrever datação armap actualizado" -#: bfd.c:449 +#: bfd.c:677 msgid "no error" msgstr "Sem erro" -#: bfd.c:450 +#: bfd.c:678 msgid "system call error" msgstr "Erro de chamada do sistema" -#: bfd.c:451 +#: bfd.c:679 msgid "invalid bfd target" msgstr "Alvo bfd inválido" -#: bfd.c:452 +#: bfd.c:680 msgid "file in wrong format" msgstr "Ficheiro em formato errado" -#: bfd.c:453 +#: bfd.c:681 msgid "archive object file in wrong format" msgstr "Ficheiro objecto de arquivo em formato errado" -#: bfd.c:454 +#: bfd.c:682 msgid "invalid operation" msgstr "Operação inválida" -#: bfd.c:455 +#: bfd.c:683 msgid "memory exhausted" msgstr "Memória esgotada" -#: bfd.c:456 +#: bfd.c:684 msgid "no symbols" msgstr "Sem símbolos" -#: bfd.c:457 +#: bfd.c:685 msgid "archive has no index; run ranlib to add one" msgstr "Arquivo sem índice; execute ranlib para adicionar um" -#: bfd.c:458 +#: bfd.c:686 msgid "no more archived files" msgstr "Sem mais ficheiros de arquivo" -#: bfd.c:459 +#: bfd.c:687 msgid "malformed archive" msgstr "Arquivo mal formado" -#: bfd.c:460 +#: bfd.c:688 msgid "DSO missing from command line" msgstr "DSO em falta da linha de comandos" -#: bfd.c:461 +#: bfd.c:689 msgid "file format not recognized" msgstr "Formato de ficheiro não reconhecido" -#: bfd.c:462 +#: bfd.c:690 msgid "file format is ambiguous" msgstr "Formato de ficheiro ambíguo" -#: bfd.c:463 +#: bfd.c:691 msgid "section has no contents" msgstr "Secção sem conteúdo" -#: bfd.c:464 +#: bfd.c:692 msgid "nonrepresentable section on output" msgstr "Secção não representável na saída" -#: bfd.c:465 +#: bfd.c:693 msgid "symbol needs debug section which does not exist" msgstr "Símbolo precisa de secção de depuração que não existe" -#: bfd.c:466 +#: bfd.c:694 msgid "bad value" msgstr "Mau valor" -#: bfd.c:467 +#: bfd.c:695 msgid "file truncated" msgstr "Ficheiro truncado" -#: bfd.c:468 +#: bfd.c:696 msgid "file too big" msgstr "Ficheiro muito grande" -#: bfd.c:469 +#: bfd.c:697 +msgid "sorry, cannot handle this file" +msgstr "desculpe, impossível gerir este ficheiro" + +#: bfd.c:698 #, c-format msgid "error reading %s: %s" msgstr "Erro ao ler %s: %s" -#: bfd.c:470 +#: bfd.c:699 msgid "#" msgstr "#" -#: bfd.c:1429 +#: bfd.c:1658 #, c-format msgid "BFD %s assertion fail %s:%d" msgstr "BFD falha de asserção %s %s:%d" -#: bfd.c:1442 +#: bfd.c:1671 #, c-format msgid "BFD %s internal error, aborting at %s:%d in %s\n" msgstr "BFD erro interno %s, a abortar em %s:%d em %s\n" -#: bfd.c:1447 +#: bfd.c:1676 #, c-format msgid "BFD %s internal error, aborting at %s:%d\n" msgstr "BFD erro interno %s, a abortar em %s:%d\n" -#: bfd.c:1449 +#: bfd.c:1678 msgid "Please report this bug.\n" msgstr "Por favor, reporte este erro.\n" -#: bfdwin.c:206 +#: bfdwin.c:207 #, c-format msgid "not mapping: data=%lx mapped=%d\n" msgstr "não mapeado: dados=%lx mapeado=%d\n" -#: bfdwin.c:209 +#: bfdwin.c:210 #, c-format msgid "not mapping: env var not set\n" msgstr "não mapeado: env var não definida\n" @@ -256,118 +269,113 @@ "%pB: impossível gerir binários Alpha comprimidos.\n" " Use bandeiras do compilador ou objZ para gerar binários descomprimidos." -#: coff-alpha.c:850 coff-alpha.c:887 coff-alpha.c:1957 coff-mips.c:950 +#: coff-alpha.c:850 coff-alpha.c:887 coff-alpha.c:1954 coff-mips.c:953 msgid "GP relative relocation used when GP not defined" msgstr "Usada relocalização relativa GP sem GP definido" -#: coff-alpha.c:1443 +#: coff-alpha.c:1441 msgid "using multiple gp values" msgstr "a usar múltiplos valores gp" -#: coff-alpha.c:1501 coff-alpha.c:1507 elf.c:9100 elf32-mcore.c:100 -#: elf32-mcore.c:455 elf32-ppc.c:7697 elf32-ppc.c:8829 elf64-ppc.c:14411 +#: coff-alpha.c:1499 coff-alpha.c:1505 elf.c:9431 elf32-mcore.c:100 +#: elf32-mcore.c:455 elf32-ppc.c:7596 elf32-ppc.c:8747 elf64-ppc.c:15962 #, c-format msgid "%pB: %s unsupported" msgstr "%pB: %s: não suportado" -#: coff-mips.c:640 elf32-mips.c:1742 elf32-score.c:430 elf32-score7.c:330 +#: coff-go32.c:156 coffswap.h:785 +#, c-format +msgid "%pB: warning: %s: line number overflow: 0x%lx > 0xffff" +msgstr "%pB: aviso: %s: transporte de número de linha: 0x%lx > 0xffff" + +#: coff-mips.c:643 elf32-mips.c:1742 elf32-score.c:430 elf32-score7.c:330 #: elf64-mips.c:3451 elfn32-mips.c:3276 msgid "GP relative relocation when _gp not defined" msgstr "Relocalização relativa GP com _gp não definido" -#: coff-rs6000.c:2858 +#: coff-rs6000.c:2844 #, c-format msgid "%pB: TOC reloc at %# to symbol `%s' with no TOC entry" msgstr "%pB: reloc TOC em %# para símbolo \"%s\" sem entrada TOC" -#: coff-rs6000.c:3620 coff64-rs6000.c:2145 +#: coff-rs6000.c:3607 coff64-rs6000.c:2153 #, c-format msgid "%pB: symbol `%s' has unrecognized smclas %d" msgstr "%pB: símbolo \"%s\" tem smclas %d não reconhecido" -#: coff-sh.c:780 elf32-sh.c:521 +#: coff-sh.c:778 elf32-sh.c:521 #, c-format msgid "%pB: %#: warning: bad R_SH_USES offset" msgstr "%pB: %#: aviso: mau desvio R_SH_USES" -#: coff-sh.c:791 +#: coff-sh.c:789 #, c-format msgid "%pB: %#: warning: R_SH_USES points to unrecognized insn %#x" msgstr "%pB: %#: aviso: R_SH_USES aponta para insn %#x não reconhecido" -#: coff-sh.c:809 elf32-sh.c:552 +#: coff-sh.c:807 elf32-sh.c:552 #, c-format msgid "%pB: %#: warning: bad R_SH_USES load offset" msgstr "%pB: %#: aviso: mau desvio de carga R_SH_USES" -#: coff-sh.c:834 elf32-sh.c:568 +#: coff-sh.c:832 elf32-sh.c:568 #, c-format msgid "%pB: %#: warning: could not find expected reloc" msgstr "%pB: %#: aviso: impossível encontrar reloc esperado" -#: coff-sh.c:851 elf32-sh.c:597 +#: coff-sh.c:849 elf32-sh.c:597 #, c-format msgid "%pB: %#: warning: symbol in unexpected section" msgstr "%pB: %#: aviso: símbolo em secção inesperada" -#: coff-sh.c:977 elf32-sh.c:727 +#: coff-sh.c:975 elf32-sh.c:727 #, c-format msgid "%pB: %#: warning: could not find expected COUNT reloc" msgstr "%pB: %#: aviso: impossível encontrar reloc COUNT" -#: coff-sh.c:987 elf32-sh.c:738 +#: coff-sh.c:985 elf32-sh.c:738 #, c-format msgid "%pB: %#: warning: bad count" msgstr "%pB: %#: aviso: má contagem" -#: coff-sh.c:1359 coff-sh.c:2647 elf32-sh.c:1142 elf32-sh.c:1512 +#: coff-sh.c:1356 coff-sh.c:2644 elf32-sh.c:1138 elf32-sh.c:1505 #, c-format msgid "%pB: %#: fatal: reloc overflow while relaxing" msgstr "%pB: %#: fatal: transporte reloc ao relaxar" -#: coff-sh.c:1454 +#: coff-sh.c:1451 #, c-format msgid "%pB: fatal: generic symbols retrieved before relaxing" msgstr "%pB: fatal: obtidos símbolos genéricos antes de relaxar" -#: coff-sh.c:2785 cofflink.c:2965 +#: coff-sh.c:2781 cofflink.c:2948 #, c-format msgid "%pB: illegal symbol index %ld in relocs" msgstr "%pB: índice de símbolo %ld ilegal em relocs" -#: coff-tic4x.c:228 coff-tic54x.c:366 coffcode.h:5010 +#: coff-tic4x.c:228 coff-tic54x.c:366 coffcode.h:5085 #, c-format msgid "%pB: warning: illegal symbol index %ld in relocs" msgstr "%pB: aviso: índice de símbolo %ld ilegal em relocs" -#: coff-tic80.c:441 -#, c-format -msgid "unsupported relocation type %#x" -msgstr "tipo de relocalização %#x não suportado" - -#: coff-tic80.c:672 cofflink.c:3127 -#, c-format -msgid "%pB: bad reloc address %# in section `%pA'" -msgstr "%pB: mau endereço reloc %# na secção \"%pA\"" - -#: coffcode.h:954 +#: coffcode.h:961 #, c-format msgid "%pB: unable to load COMDAT section name" msgstr "%pB: impossível carregar nome de secção COMDAT" #. Malformed input files can trigger this test. #. cf PR 21781. -#: coffcode.h:989 +#: coffcode.h:996 #, c-format msgid "%pB: error: unexpected symbol '%s' in COMDAT section" msgstr "%pB: erro: símbolo \"%s\" inesperado em secção COMDAT" -#: coffcode.h:1001 +#: coffcode.h:1008 #, c-format msgid "%pB: warning: COMDAT symbol '%s' does not match section name '%s'" msgstr "%pB: aviso: símbolo \"%s\" COMDAT não corresponde ao nome de secção \"%s\"" -#: coffcode.h:1011 +#: coffcode.h:1018 #, c-format msgid "%pB: warning: no symbol for section '%s' found" msgstr "%pB: aviso: símbolo para secção \"%s\" não encontrado" @@ -375,311 +383,315 @@ #. Generate a warning message rather using the 'unhandled' #. variable as this will allow some .sys files generate by #. other toolchains to be processed. See bugzilla issue 196. -#: coffcode.h:1237 +#: coffcode.h:1249 #, c-format msgid "%pB: warning: ignoring section flag %s in section %s" msgstr "%pB: aviso: a ignorar bandeira de secção %s na secção %s" -#: coffcode.h:1306 +#: coffcode.h:1318 #, c-format msgid "%pB (%s): section flag %s (%#lx) ignored" msgstr "%pB (%s): bandeira de secção %s (%#lx) ignorada" -#: coffcode.h:1917 +#: coffcode.h:1934 coffcode.h:1999 #, c-format msgid "%pB: warning: claims to have 0xffff relocs, without overflow" msgstr "%pB: aviso: afirma ter 0xffff relocs, sem transporte" -#: coffcode.h:2315 +#: coffcode.h:2365 #, c-format msgid "unrecognized TI COFF target id '0x%x'" msgstr "TI COFF id de alvo \"0x%x\" não reconhecida" -#: coffcode.h:2599 +#: coffcode.h:2643 #, c-format msgid "%pB: reloc against a non-existent symbol index: %ld" msgstr "%pB: reloc contra índice de símbolo não existente: %ld" -#: coffcode.h:2910 +#: coffcode.h:2951 #, c-format msgid "%pB: page size is too large (0x%x)" msgstr "%pB: tamanho de página muito grande (0x%x)" -#: coffcode.h:3070 +#: coffcode.h:3111 #, c-format msgid "%pB: too many sections (%d)" msgstr "%pB: demasiadas secções (%d)" -#: coffcode.h:3489 +#: coffcode.h:3530 #, c-format msgid "%pB: section %pA: string table overflow at offset %ld" msgstr "%pB: secção %pA: transporte na tabela de símbolo no desvio %ld" -#: coffcode.h:3589 +#: coffcode.h:3630 #, c-format msgid "%pB:%s section %s: alignment 2**%u not representable" msgstr "%pB:%s secção %s: alinhamento 2**%u não representável" -#: coffcode.h:4276 +#: coffcode.h:4329 #, c-format msgid "%pB: warning: line number count (%#lx) exceeds section size (%#lx)" msgstr "%pB: aviso: total de número de linha (%#lx) excede tamanho de secção (%#lx)" -#: coffcode.h:4291 +#: coffcode.h:4349 #, c-format msgid "%pB: warning: line number table read failed" msgstr "%pB: aviso: falha ao ler tabela de número de linha" -#: coffcode.h:4325 coffcode.h:4339 +#: coffcode.h:4383 coffcode.h:4397 #, c-format msgid "%pB: warning: illegal symbol index 0x%lx in line number entry %d" msgstr "%pB: aviso: índice de símbolo 0x%lx ilegal em entrada de número de linha %d" -#: coffcode.h:4353 +#: coffcode.h:4411 #, c-format msgid "%pB: warning: illegal symbol in line number entry %d" msgstr "%pB: aviso: símbolo ilegal em entrada de número de linha %d" -#: coffcode.h:4366 +#: coffcode.h:4424 #, c-format msgid "%pB: warning: duplicate line number information for `%s'" msgstr "%pB: aviso: informação de número de linha duplicada para \"%s\"" -#: coffcode.h:4774 +#: coffcode.h:4845 #, c-format msgid "%pB: unrecognized storage class %d for %s symbol `%s'" msgstr "%pB: classe de armazenamento %d não reconhecida para %s símbolo \"%s\"" -#: coffcode.h:4904 +#: coffcode.h:4975 #, c-format msgid "warning: %pB: local symbol `%s' has no section" msgstr "aviso: %pB: símbolo local \"%s\" não tem secção" -#: coffcode.h:5050 +#: coffcode.h:5125 #, c-format msgid "%pB: illegal relocation type %d at address %#" msgstr "%pB: tipo de relocalização %d ilegal no endereço %#" -#: coffgen.c:178 elf.c:1216 +#: coffgen.c:179 elf.c:1236 #, c-format msgid "%pB: unable to initialize compress status for section %s" msgstr "%pB: impossível inicializar estado comprimido para secção %s" -#: coffgen.c:202 elf.c:1227 +#: coffgen.c:203 elf.c:1247 #, c-format msgid "%pB: unable to initialize decompress status for section %s" msgstr "%pB: impossível inicializar estado descomprimido para secção %s" -#: coffgen.c:1657 -#, c-format -msgid "%pB: corrupt symbol count: %#" -msgstr "%pB: total de símbolos corrupto: %#" - -#. PR 21013: Provide an error message when the alloc fails. -#: coffgen.c:1666 -#, c-format -msgid "%pB: not enough memory to allocate space for %# symbols of size %#" -msgstr "%pB: memória insuficiente para alocar espaço para %# símbolos de tamanho %#" - -#: coffgen.c:1735 +#: coffgen.c:1704 #, c-format msgid "%pB: bad string table size %" msgstr "%pB: mau tamanho de tabela de cadeias %" -#: coffgen.c:1912 coffgen.c:1972 coffgen.c:1990 cofflink.c:2045 elf.c:1882 -#: xcofflink.c:4505 +#: coffgen.c:1876 coffgen.c:1936 coffgen.c:1954 cofflink.c:2024 elf.c:1921 +#: xcofflink.c:4500 msgid "" msgstr "" -#: coffgen.c:2114 +#: coffgen.c:2085 #, c-format msgid " %s" msgstr " %s" -#: coffgen.c:2693 elflink.c:14322 linker.c:2959 +#: coffgen.c:2675 elflink.c:14624 linker.c:2956 msgid "%F%P: already_linked_table: %E\n" msgstr "%F%P: already_linked_table: %E\n" -#: coffgen.c:3034 elflink.c:13324 +#: coffgen.c:3016 elflink.c:13617 #, c-format msgid "removing unused section '%pA' in file '%pB'" msgstr "A remover secção \"%pA\" não usada no ficheiro \"%pB\"" -#: coffgen.c:3111 elflink.c:13542 +#: coffgen.c:3093 elflink.c:13835 msgid "warning: gc-sections option ignored" msgstr "Aviso: opção gc-sections ignorada" -#: cofflink.c:352 +#: cofflink.c:366 #, c-format msgid "warning: symbol `%s' is both section and non-section" msgstr "Aviso: símbolo \"%s\" é secção e não-secção em simultâneo" -#: cofflink.c:454 elf64-ia64-vms.c:5203 elflink.c:4953 +#: cofflink.c:471 elf64-ia64-vms.c:5200 elflink.c:5131 #, c-format msgid "warning: type of symbol `%s' changed from %d to %d in %pB" msgstr "Aviso: tipo de símbolo \"%s\" alterado de %d para %d em %pB" -#: cofflink.c:2373 +#: cofflink.c:2352 #, c-format msgid "%pB: relocs in section `%pA', but it has no contents" msgstr "%pB: relocs na secção \"%pA\", mas não tem conteúdo" -#: cofflink.c:2436 elflink.c:10810 +#: cofflink.c:2415 elflink.c:11082 #, c-format msgid "%X`%s' referenced in section `%pA' of %pB: defined in discarded section `%pA' of %pB\n" msgstr "%X\"%s\" referenciado na secção \"%pA\" de %pB: definido em secção descartada \"%pA\" de %pB\n" -#: cofflink.c:2734 +#: cofflink.c:2717 #, c-format msgid "%pB: %pA: reloc overflow: %#x > 0xffff" msgstr "%pB: %pA: transporte de reloc: %#x > 0xffff" -#: cofflink.c:2742 +#: cofflink.c:2725 #, c-format msgid "%pB: warning: %pA: line number overflow: %#x > 0xffff" msgstr "%pB: aviso: %pA: transporte de número de linha: %#x > 0xffff" -#: coffswap.h:789 +#: cofflink.c:3110 #, c-format -msgid "%pB: warning: %s: line number overflow: 0x%lx > 0xffff" -msgstr "%pB: aviso: %s: transporte de número de linha: 0x%lx > 0xffff" +msgid "%pB: bad reloc address %# in section `%pA'" +msgstr "%pB: mau endereço reloc %# na secção \"%pA\"" -#: coffswap.h:803 +#: coffswap.h:799 #, c-format msgid "%pB: %s: reloc overflow: 0x%lx > 0xffff" msgstr "%pB: %s: transporte de reloc: 0x%lx > 0xffff" -#: compress.c:260 +#: compress.c:271 +#, c-format +msgid "error: %pB(%pA) section size (%# bytes) is larger than file size (%# bytes)" +msgstr "erro: %pB(%pA) tamanho de secção (%# bytes) maior que o tamanho do ficheiro (%# bytes)" + +#: compress.c:282 #, c-format msgid "error: %pB(%pA) is too large (%# bytes)" msgstr "erro: %pB(%pA) é muito grande (%# bytes)" -#: cpu-arm.c:298 cpu-arm.c:310 +#: cpu-arm.c:303 cpu-arm.c:315 #, c-format msgid "error: %pB is compiled for the EP9312, whereas %pB is compiled for XScale" msgstr "erro: %pB está compilado para EP9312, enquanto %pB está compilado para XScale" -#: cpu-arm.c:446 +#: cpu-arm.c:451 #, c-format msgid "warning: unable to update contents of %s section in %pB" msgstr "aviso: impossível actualizar conteúdo da secção %s em %pB" -#: dwarf2.c:544 +#: dwarf2.c:543 #, c-format msgid "DWARF error: can't find %s section." msgstr "Erro Dwarf: impossível encontrar a secção %s." -#: dwarf2.c:579 +#: dwarf2.c:578 #, c-format msgid "DWARF error: offset (%) greater than or equal to %s size (%)" msgstr "Erro Dwarf: desvio (%) maior ou igual a tamanho %s (%)." -#: dwarf2.c:1107 +#: dwarf2.c:1165 msgid "DWARF error: info pointer extends beyond end of attributes" msgstr "Erro Dwarf: ponteiro de informação excede o final dos atributos" -#: dwarf2.c:1275 +#: dwarf2.c:1333 #, c-format msgid "DWARF error: invalid or unhandled FORM value: %#x" msgstr "Erro Dwarf: valor FORM inválido ou não gerido: %#x." -#: dwarf2.c:1581 +#: dwarf2.c:1646 msgid "DWARF error: mangled line number section (bad file number)" msgstr "Erro Dwarf: secção de número de linha modificada (mau nº de ficheiro)." -#: dwarf2.c:1926 +#: dwarf2.c:1994 msgid "DWARF error: zero format count" msgstr "Erro Dwarf: total de formato zero." -#: dwarf2.c:1936 +#: dwarf2.c:2004 #, c-format msgid "DWARF error: data count (%) larger than buffer size" msgstr "Erro Dwarf: total de dados (%) maior que o tamanho do buffer." -#: dwarf2.c:1977 +#: dwarf2.c:2045 #, c-format msgid "DWARF error: unknown format content type %" msgstr "Erro Dwarf: tipo de formato de conteúdo % desconhecido." -#: dwarf2.c:2057 +#: dwarf2.c:2112 #, c-format msgid "DWARF error: line info section is too small (%)" msgstr "Erro Dwarf: secção de informação da linha muito pequena (%)" -#: dwarf2.c:2087 +#: dwarf2.c:2142 #, c-format msgid "DWARF error: line info data is bigger (%#) than the space remaining in the section (%#lx)" msgstr "Erro Dwarf: secção de informação da linha maior (%#) que o espaço restante na secção (%#lx)" -#: dwarf2.c:2100 +#: dwarf2.c:2155 #, c-format msgid "DWARF error: unhandled .debug_line version %d" msgstr "Erro Dwarf: versão %d .debug_line version não gerida." -#: dwarf2.c:2110 +#: dwarf2.c:2165 msgid "DWARF error: ran out of room reading prologue" msgstr "Erro Dwarf: sem espaço ao ler o prólogo" -#: dwarf2.c:2128 +#: dwarf2.c:2183 #, c-format msgid "DWARF error: line info unsupported segment selector size %u" msgstr "Erro Dwarf: tamanho %u do selector de segmento de informação de linha não suportado" -#: dwarf2.c:2155 +#: dwarf2.c:2210 msgid "DWARF error: invalid maximum operations per instruction" msgstr "Erro Dwarf: máximo de operações por instrução inválido." -#: dwarf2.c:2174 +#: dwarf2.c:2229 msgid "DWARF error: ran out of room reading opcodes" msgstr "Erro Dwarf: sem espaço ao ler opcodes" -#: dwarf2.c:2347 +#: dwarf2.c:2420 msgid "DWARF error: mangled line number section" msgstr "Erro Dwarf: secção de número de linha modificada." -#: dwarf2.c:2852 dwarf2.c:2913 +#: dwarf2.c:2905 +msgid "DWARF error: abstract instance recursion detected" +msgstr "Erro Dwarf: detectada recursividade em instância abstracta." + +#: dwarf2.c:2939 dwarf2.c:3033 msgid "DWARF error: invalid abstract instance DIE ref" msgstr "Erro Dwarf: instância DIE ref abstracta inválida." -#: dwarf2.c:2889 +#: dwarf2.c:2955 #, c-format msgid "DWARF error: unable to read alt ref %" msgstr "Erro Dwarf: impossível ler referência alternativa %." -#: dwarf2.c:2930 dwarf2.c:3103 dwarf2.c:3457 +#: dwarf2.c:3011 +#, c-format +msgid "DWARF error: unable to locate abstract instance DIE ref %" +msgstr "Erro Dwarf: impossível localizar instância DIE abstracta inválida ref. %" + +#: dwarf2.c:3050 dwarf2.c:3232 dwarf2.c:3618 #, c-format msgid "DWARF error: could not find abbrev number %u" msgstr "Erro Dwarf: impossível encontrar número abbrev %u." -#: dwarf2.c:2947 -msgid "DWARF error: abstract instance recursion detected" -msgstr "Erro Dwarf: detectada recursividade em instância abstracta." +#: dwarf2.c:3381 +#, c-format +msgid "DWARF error: could not find variable specification at offset %lx" +msgstr "Erro Dwarf: impossível encontrar especificação de variável no desvio %lx" -#: dwarf2.c:3376 +#: dwarf2.c:3537 #, c-format msgid "DWARF error: found dwarf version '%u', this reader only handles version 2, 3, 4 and 5 information" msgstr "Erro Dwarf: encontrada versão dwarf \"%u\", este leitor só gere informação das versões 2, 3, 4 e 5." -#: dwarf2.c:3420 +#: dwarf2.c:3581 #, c-format msgid "DWARF error: found address size '%u', this reader can not handle sizes greater than '%u'" msgstr "Erro Dwarf: encontrado tamanho de endereço \"%u\", este leitor não gere tamanhos maiores que \"%u\"." -#: dwarf2.c:3523 +#: dwarf2.c:3685 msgid "DWARF error: DW_AT_comp_dir attribute encountered with a non-string form" msgstr "Erro Dwarf: encontrado atributo DW_AT_comp_dir com uma forma não-cadeia." -#: ecoff.c:971 +#: ecoff.c:982 #, c-format msgid "%pB: warning: isymMax (%ld) is greater than ifdMax (%ld)" msgstr "%pB: aviso: isymMax (%ld) é maior que ifdMax (%ld)" -#: ecoff.c:1268 +#: ecoff.c:1279 #, c-format msgid "unknown basic type %d" msgstr "Tipo básico %d desconhecido" -#: ecoff.c:1525 +#: ecoff.c:1536 #, c-format msgid "" "\n" @@ -688,7 +700,7 @@ "\n" " Símbolo End+1: %ld" -#: ecoff.c:1532 ecoff.c:1535 +#: ecoff.c:1543 ecoff.c:1546 #, c-format msgid "" "\n" @@ -697,7 +709,7 @@ "\n" " Primeiro símbolo: %ld" -#: ecoff.c:1548 +#: ecoff.c:1559 #, c-format msgid "" "\n" @@ -706,7 +718,7 @@ "\n" " Símbolo End+1: %-7ld Tipo: %s" -#: ecoff.c:1555 +#: ecoff.c:1566 #, c-format msgid "" "\n" @@ -715,7 +727,7 @@ "\n" " Símbolo local: %ld" -#: ecoff.c:1563 +#: ecoff.c:1574 #, c-format msgid "" "\n" @@ -724,7 +736,7 @@ "\n" " struct; símbolo End+1: %ld" -#: ecoff.c:1568 +#: ecoff.c:1579 #, c-format msgid "" "\n" @@ -733,7 +745,7 @@ "\n" " union; símbolo End+1: %ld" -#: ecoff.c:1573 +#: ecoff.c:1584 #, c-format msgid "" "\n" @@ -742,7 +754,7 @@ "\n" " enum; símbolo End+1: %ld" -#: ecoff.c:1579 +#: ecoff.c:1590 #, c-format msgid "" "\n" @@ -751,22 +763,22 @@ "\n" " Tipo: %s" -#: elf-attrs.c:446 +#: elf-attrs.c:449 #, c-format msgid "%pB: error: attribute section '%pA' too big: %#llx" msgstr "%pB: erro: secção de atributo \"%pA\"muito grande: %#llx" -#: elf-attrs.c:487 +#: elf-attrs.c:490 #, c-format msgid "%pB: error: attribute section length too small: %" msgstr "%pB: erro: tamanho da secção de atributo muito pequeno: %" -#: elf-attrs.c:615 +#: elf-attrs.c:618 #, c-format msgid "error: %pB: object has vendor-specific contents that must be processed by the '%s' toolchain" msgstr "erro: %pB: objecto tem conteúdo especifico do fabricante que tem de ser processado por \"%s\"" -#: elf-attrs.c:625 +#: elf-attrs.c:628 #, c-format msgid "error: %pB: object tag '%d, %s' is incompatible with tag '%d, %s'" msgstr "erro: %pB: etiqueta do objecto \"%d, %s\" é incompatível com etiqueta \"%d, %s\"" @@ -790,91 +802,90 @@ msgid "further warnings about FDE encoding preventing .eh_frame_hdr generation dropped" msgstr "emitidos mais avisos sobre a codificação FDE impedir a geração de .eh_frame_hdr" -#: elf-eh-frame.c:1868 +#: elf-eh-frame.c:1866 #, c-format msgid "%pB: %pA not in order" msgstr "%pB: %pA não está em ordem" -#: elf-eh-frame.c:1882 +#: elf-eh-frame.c:1880 #, c-format msgid "%pB: %pA invalid input section size" msgstr "%pB: %pA tamanho inválido de secção de entrada" -#: elf-eh-frame.c:1890 +#: elf-eh-frame.c:1888 #, c-format msgid "%pB: %pA points past end of text section" msgstr "%pB: %pA aponta para lá do fim da secção de texto" -#: elf-eh-frame.c:2139 +#: elf-eh-frame.c:2141 msgid "DW_EH_PE_datarel unspecified for this architecture" msgstr "DW_EH_PE_datarel não especificado para esta arquitectura." -#: elf-eh-frame.c:2309 +#: elf-eh-frame.c:2312 #, c-format msgid "invalid output section for .eh_frame_entry: %pA" msgstr "Secção de saída inválida para .eh_frame_entry: %pA" -#: elf-eh-frame.c:2332 +#: elf-eh-frame.c:2335 #, c-format msgid "invalid contents in %pA section" msgstr "Conteúdo inválido na secção %pA" -#: elf-eh-frame.c:2488 +#: elf-eh-frame.c:2491 msgid ".eh_frame_hdr entry overflow" msgstr "transporte na entrada .eh_frame_hdr." -#: elf-eh-frame.c:2490 +#: elf-eh-frame.c:2493 msgid ".eh_frame_hdr refers to overlapping FDEs" msgstr ".eh_frame_hdr refere FDEs sobrepostos." -#: elf-ifunc.c:149 +#: elf-ifunc.c:144 #, c-format msgid "%F%P: dynamic STT_GNU_IFUNC symbol `%s' with pointer equality in `%pB' can not be used when making an executable; recompile with -fPIE and relink with -pie\n" msgstr "%F%P: símbolo \"%s\" STT_GNU_IFUNC dinâmico com igualdade de ponteiro em \"%pB\" não pode ser usado ao fazer um executável; recompile com -fPIE e volte a ligar com -pie\n" -#: elf-m10200.c:434 elf-m10300.c:2147 elf32-avr.c:1510 elf32-bfin.c:3127 -#: elf32-cr16.c:1464 elf32-cr16c.c:783 elf32-cris.c:2033 elf32-crx.c:925 -#: elf32-d10v.c:512 elf32-epiphany.c:566 elf32-fr30.c:594 elf32-frv.c:4049 -#: elf32-ft32.c:494 elf32-h8300.c:523 elf32-ip2k.c:1482 elf32-iq2000.c:693 -#: elf32-lm32.c:1112 elf32-m32c.c:624 elf32-m32r.c:3045 elf32-m68hc1x.c:1266 -#: elf32-mep.c:526 elf32-metag.c:1990 elf32-microblaze.c:1631 -#: elf32-moxie.c:288 elf32-mt.c:402 elf32-nds32.c:6189 elf32-or1k.c:1759 -#: elf32-score.c:2733 elf32-score7.c:2542 elf32-spu.c:5083 -#: elf32-tilepro.c:3506 elf32-v850.c:2291 elf32-visium.c:681 -#: elf32-xstormy16.c:931 elf64-mmix.c:1541 elfxx-tilegx.c:3870 +#: elf-m10200.c:434 elf-m10300.c:2145 elf32-avr.c:1508 elf32-bfin.c:3126 +#: elf32-cr16.c:1464 elf32-cris.c:2033 elf32-crx.c:920 elf32-d10v.c:510 +#: elf32-epiphany.c:562 elf32-fr30.c:594 elf32-frv.c:4048 elf32-ft32.c:494 +#: elf32-h8300.c:523 elf32-ip2k.c:1477 elf32-iq2000.c:691 elf32-lm32.c:1069 +#: elf32-m32c.c:624 elf32-m32r.c:2860 elf32-m68hc1x.c:1272 elf32-mep.c:526 +#: elf32-metag.c:1986 elf32-microblaze.c:1627 elf32-moxie.c:288 elf32-mt.c:402 +#: elf32-nds32.c:6048 elf32-or1k.c:1817 elf32-score.c:2734 elf32-score7.c:2543 +#: elf32-spu.c:5083 elf32-tilepro.c:3380 elf32-v850.c:2290 elf32-visium.c:680 +#: elf32-xstormy16.c:929 elf64-bpf.c:512 elf64-mmix.c:1541 elfxx-tilegx.c:3744 msgid "internal error: out of range error" msgstr "erro interno: erro fora do intervalo" -#: elf-m10200.c:438 elf-m10300.c:2151 elf32-avr.c:1514 elf32-bfin.c:3131 -#: elf32-cr16.c:1468 elf32-cr16c.c:787 elf32-cris.c:2037 elf32-crx.c:929 -#: elf32-d10v.c:516 elf32-fr30.c:598 elf32-frv.c:4053 elf32-ft32.c:498 -#: elf32-h8300.c:527 elf32-iq2000.c:697 elf32-lm32.c:1116 elf32-m32c.c:628 -#: elf32-m32r.c:3049 elf32-m68hc1x.c:1270 elf32-mep.c:530 elf32-metag.c:1994 -#: elf32-microblaze.c:1635 elf32-moxie.c:292 elf32-msp430.c:1362 -#: elf32-nds32.c:6193 elf32-or1k.c:1763 elf32-score.c:2737 elf32-score7.c:2546 -#: elf32-spu.c:5087 elf32-tilepro.c:3510 elf32-v850.c:2295 elf32-visium.c:685 -#: elf32-xstormy16.c:935 elf64-mmix.c:1545 elfxx-mips.c:10469 -#: elfxx-tilegx.c:3874 +#: elf-m10200.c:438 elf-m10300.c:2149 elf32-avr.c:1512 elf32-bfin.c:3130 +#: elf32-cr16.c:1468 elf32-cris.c:2037 elf32-crx.c:924 elf32-d10v.c:514 +#: elf32-fr30.c:598 elf32-frv.c:4052 elf32-ft32.c:498 elf32-h8300.c:527 +#: elf32-iq2000.c:695 elf32-lm32.c:1073 elf32-m32c.c:628 elf32-m32r.c:2864 +#: elf32-m68hc1x.c:1276 elf32-mep.c:530 elf32-metag.c:1990 +#: elf32-microblaze.c:1631 elf32-moxie.c:292 elf32-msp430.c:1371 +#: elf32-nds32.c:6052 elf32-or1k.c:1821 elf32-score.c:2738 elf32-score7.c:2547 +#: elf32-spu.c:5087 elf32-tilepro.c:3384 elf32-v850.c:2294 elf32-visium.c:684 +#: elf32-xstormy16.c:933 elf64-mmix.c:1545 elfxx-mips.c:10576 +#: elfxx-tilegx.c:3748 msgid "internal error: unsupported relocation error" msgstr "erro interno: erro relocalização não suportada" -#: elf-m10200.c:442 elf32-cr16.c:1472 elf32-cr16c.c:791 elf32-crx.c:933 -#: elf32-d10v.c:520 elf32-h8300.c:531 elf32-lm32.c:1120 elf32-m32r.c:3053 -#: elf32-m68hc1x.c:1274 elf32-microblaze.c:1639 elf32-nds32.c:6197 -#: elf32-score.c:2741 elf32-score7.c:2550 elf32-spu.c:5091 +#: elf-m10200.c:442 elf32-cr16.c:1472 elf32-crx.c:928 elf32-d10v.c:518 +#: elf32-h8300.c:531 elf32-lm32.c:1077 elf32-m32r.c:2868 elf32-m68hc1x.c:1280 +#: elf32-microblaze.c:1635 elf32-nds32.c:6056 elf32-score.c:2742 +#: elf32-score7.c:2551 elf32-spu.c:5091 msgid "internal error: dangerous error" msgstr "erro interno: erro perigoso" -#: elf-m10200.c:446 elf-m10300.c:2168 elf32-avr.c:1522 elf32-bfin.c:3139 -#: elf32-cr16.c:1476 elf32-cr16c.c:795 elf32-cris.c:2045 elf32-crx.c:937 -#: elf32-d10v.c:524 elf32-epiphany.c:581 elf32-fr30.c:606 elf32-frv.c:4061 -#: elf32-ft32.c:506 elf32-h8300.c:535 elf32-ip2k.c:1497 elf32-iq2000.c:705 -#: elf32-lm32.c:1124 elf32-m32c.c:636 elf32-m32r.c:3057 elf32-m68hc1x.c:1278 -#: elf32-mep.c:538 elf32-metag.c:2002 elf32-microblaze.c:1643 -#: elf32-moxie.c:300 elf32-msp430.c:1370 elf32-mt.c:410 elf32-nds32.c:6201 -#: elf32-or1k.c:1771 elf32-score.c:2750 elf32-score7.c:2554 elf32-spu.c:5095 -#: elf32-tilepro.c:3518 elf32-v850.c:2315 elf32-visium.c:693 -#: elf32-xstormy16.c:943 elf64-mmix.c:1553 elfxx-tilegx.c:3882 +#: elf-m10200.c:446 elf-m10300.c:2166 elf32-avr.c:1520 elf32-bfin.c:3138 +#: elf32-cr16.c:1476 elf32-cris.c:2045 elf32-crx.c:932 elf32-d10v.c:522 +#: elf32-epiphany.c:577 elf32-fr30.c:606 elf32-frv.c:4060 elf32-ft32.c:506 +#: elf32-h8300.c:535 elf32-ip2k.c:1492 elf32-iq2000.c:703 elf32-lm32.c:1081 +#: elf32-m32c.c:636 elf32-m32r.c:2872 elf32-m68hc1x.c:1284 elf32-mep.c:538 +#: elf32-metag.c:1998 elf32-microblaze.c:1639 elf32-moxie.c:300 +#: elf32-msp430.c:1379 elf32-mt.c:410 elf32-nds32.c:6060 elf32-or1k.c:1829 +#: elf32-score.c:2751 elf32-score7.c:2555 elf32-spu.c:5095 +#: elf32-tilepro.c:3392 elf32-v850.c:2314 elf32-visium.c:692 +#: elf32-xstormy16.c:941 elf64-bpf.c:525 elf64-mmix.c:1553 elfxx-tilegx.c:3756 msgid "internal error: unknown error" msgstr "erro interno: erro desconhecido" @@ -883,38 +894,35 @@ msgid "%pB: unsupported transition from %s to %s" msgstr "%pB: transição %s para %s não suportada" -#: elf-m10300.c:1198 +#: elf-m10300.c:1196 #, c-format msgid "%pB: %s' accessed both as normal and thread local symbol" msgstr "%pB: %s acedido como símbolo local normal e de fio, em simultâneo" -#: elf-m10300.c:2094 elf32-arm.c:13246 elf32-i386.c:3409 elf32-m32r.c:2539 -#: elf32-m68k.c:3899 elf32-s390.c:3211 elf32-sh.c:3800 elf32-tilepro.c:3409 -#: elf32-xtensa.c:2965 elf64-s390.c:3161 elf64-x86-64.c:3846 -#: elfxx-sparc.c:3906 elfxx-tilegx.c:3793 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:5261 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:6807 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2279 +#: elf-m10300.c:2092 elf32-arm.c:13400 elf32-i386.c:3403 elf32-m32r.c:2354 +#: elf32-m68k.c:3931 elf32-s390.c:3082 elf32-sh.c:3677 elf32-tilepro.c:3283 +#: elf32-xtensa.c:3023 elf64-s390.c:3031 elf64-x86-64.c:4062 +#: elfxx-sparc.c:3795 elfxx-tilegx.c:3667 elfnn-aarch64.c:5505 +#: elfnn-aarch64.c:7102 #, c-format msgid "%pB(%pA+%#): unresolvable %s relocation against symbol `%s'" msgstr "%pB(%pA+%#): relocalização %s insolúvel contra o símbolo \"%s\"" -#: elf-m10300.c:2156 +#: elf-m10300.c:2154 msgid "error: inappropriate relocation type for shared library (did you forget -fpic?)" msgstr "erro: tipo de relocalização inapropriado para biblioteca partilhada (esqueceu-se de -fpic?)" -#: elf-m10300.c:2160 +#: elf-m10300.c:2158 #, c-format msgid "%pB: taking the address of protected function '%s' cannot be done when making a shared library" msgstr "%pB: tirar o endereço da função protegida \"%s\" não pode ser feito ao fazer uma biblioteca partilhada" -#: elf-m10300.c:2163 +#: elf-m10300.c:2161 msgid "internal error: suspicious relocation type used in shared library" msgstr "erro interno: tipo de relocalização suspeito usado em biblioteca partilhada" -#: elf-m10300.c:2649 elf32-avr.c:2492 elf32-frv.c:5641 elf64-ia64-vms.c:364 -#: elfxx-sparc.c:2795 reloc.c:8185 reloc16.c:155 elf32-ia64.c:361 -#: elf64-ia64.c:361 +#: elf-m10300.c:2647 elf32-avr.c:2489 elf32-frv.c:5620 elf64-ia64-vms.c:364 +#: elfxx-sparc.c:2683 reloc.c:8244 reloc16.c:155 elfnn-ia64.c:364 msgid "%P%F: --relax and -r may not be used together\n" msgstr "%P%F: --relax e -r não podem ser usadas em conjunto\n" @@ -956,7 +964,7 @@ msgid "Removed property %W to merge %pB (0x%v) and %pB (not found)\n" msgstr "Removida propriedade %W para unir %pB (0x%v) e %pB (não encontrado)\n" -#: elf-properties.c:316 elf-properties.c:396 +#: elf-properties.c:316 elf-properties.c:394 msgid "Removed property %W to merge %pB and %pB\n" msgstr "Removida propriedade %W para unir %pB e %pB\n" @@ -964,115 +972,110 @@ msgid "Removed property %W to merge %pB and %pB (not found)\n" msgstr "Removida propriedade %W para unir %pB e %pB (não encontrado)\n" -#: elf-properties.c:339 +#: elf-properties.c:337 msgid "Updated property %W (0x%v) to merge %pB (0x%v) and %pB (0x%v)\n" msgstr "Actualizada propriedade %W (0x%v) para unir %pB (0x%v) e %pB (0x%v)\n" -#: elf-properties.c:348 +#: elf-properties.c:346 msgid "Updated property %W (%v) to merge %pB (0x%v) and %pB (not found)\n" msgstr "Actualizada propriedade %W (%v) para unir %pB (0x%v) e %pB (não encontrada)\n" -#: elf-properties.c:390 +#: elf-properties.c:388 msgid "Removed property %W to merge %pB (not found) and %pB (0x%v)\n" msgstr "Removida propriedade %W para unir %pB (não encontrado) e %pB (0x%v)\n" #. Merge .note.gnu.property sections. -#: elf-properties.c:552 elf-properties.c:554 +#: elf-properties.c:550 elf-properties.c:552 msgid "\n" msgstr "\n" -#: elf-properties.c:553 +#: elf-properties.c:551 msgid "Merging program properties\n" msgstr "A unir propriedades do programa\n" #. PR 17512: file: f057ec89. -#: elf.c:345 +#: elf.c:336 #, c-format msgid "%pB: attempt to load strings from a non-string section (number %d)" msgstr "%pB: tentativa de carregar cadeias de secção não-cadeia (número %d)" -#: elf.c:360 +#: elf.c:361 #, c-format msgid "%pB: invalid string offset %u >= % for section `%s'" msgstr "%pB: desvio de cadeia inválido %u >= % para secção \"%s\"" -#: elf.c:499 /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:7891 +#: elf.c:513 elfnn-aarch64.c:8096 #, c-format msgid "%pB symbol number %lu references nonexistent SHT_SYMTAB_SHNDX section" msgstr "%pB número de símbolo %lu referencia secção SHT_SYMTAB_SHNDX não existente" -#: elf.c:664 -#, c-format -msgid "%pB: corrupt size field in group section header: %#" -msgstr "%pB: campo de tamanho corrupto no cabeçalho da secção de grupo: %#" - -#: elf.c:680 +#: elf.c:675 #, c-format msgid "%pB: invalid size field in group section header: %#" msgstr "%pB: campo de tamanho inválido no cabeçalho da secção de grupo: %#" -#: elf.c:728 +#: elf.c:720 #, c-format msgid "%pB: invalid entry in SHT_GROUP section [%u]" msgstr "%pB: entrada na secção [%u] SHT_GROUP inválida" -#: elf.c:747 +#: elf.c:739 #, c-format msgid "%pB: no valid group sections found" msgstr "%pB: sem secções de grupo válidas" #. See PR 21957 for a reproducer. -#: elf.c:776 +#: elf.c:768 #, c-format msgid "%pB: group section '%pA' has no contents" msgstr "%pB: secção de grupo \"%pA\" não tem conteúdo" -#: elf.c:837 +#: elf.c:829 #, c-format msgid "%pB: no group info for section '%pA'" msgstr "%pB: sem informação de grupo para secção \"%pA\"" -#: elf.c:868 elf.c:3886 elflink.c:11403 +#: elf.c:859 elf.c:3955 #, c-format msgid "%pB: warning: sh_link not set for section `%pA'" msgstr "%pB: aviso: sh_link não definido para a secção \"%pA\"" -#: elf.c:888 +#: elf.c:879 #, c-format msgid "%pB: sh_link [%d] in section `%pA' is incorrect" msgstr "%pB: sh_link [%d] na secção \"%pA\" está incorrecto" -#: elf.c:901 +#: elf.c:892 #, c-format msgid "%pB: SHT_GROUP section [index %d] has no SHF_GROUP sections" msgstr "%pB: secção SHT_GROUP [índice %d] não tem secções SHF_GROUP" -#: elf.c:922 +#: elf.c:913 #, c-format msgid "%pB: section group entry number %u is corrupt" msgstr "%pB: entrada do grupo de secção número %u está corrompida" -#: elf.c:945 +#: elf.c:936 #, c-format msgid "%pB: unknown type [%#x] section `%s' in group [%pA]" msgstr "%pB: secção tipo [%#x] \"%s\" desconhecida no grupo [%pA]" -#: elf.c:1408 +#: elf.c:1438 #, c-format msgid "%pB: invalid sh_link field (%d) in section number %d" msgstr "%pB: sh_link field (%d) inválido no número da secção %d" -#: elf.c:1424 +#: elf.c:1454 #, c-format msgid "%pB: failed to find link section for section %d" msgstr "%pB: falha ao procurar secção de ligação para a secção %d" -#: elf.c:1451 +#: elf.c:1481 #, c-format msgid "%pB: failed to find info section for section %d" msgstr "%pB: falha ao procurar secção de informação para a secção %d" -#: elf.c:1623 +#: elf.c:1653 #, c-format msgid "" "\n" @@ -1081,7 +1084,7 @@ "\n" "Cabeçalho do programa:\n" -#: elf.c:1665 +#: elf.c:1695 #, c-format msgid "" "\n" @@ -1090,7 +1093,7 @@ "\n" "Secção dinâmica:\n" -#: elf.c:1806 +#: elf.c:1836 #, c-format msgid "" "\n" @@ -1099,7 +1102,7 @@ "\n" "Definições da versão:\n" -#: elf.c:1831 +#: elf.c:1861 #, c-format msgid "" "\n" @@ -1108,579 +1111,680 @@ "\n" "Referências da versão:\n" -#: elf.c:1836 +#: elf.c:1866 #, c-format msgid " required from %s:\n" msgstr " requerido de %s:\n" -#: elf.c:2037 +#: elf.c:2082 #, c-format msgid "%pB: warning: loop in section dependencies detected" msgstr "%pB: aviso: detectado ciclo em dependências da secção" -#: elf.c:2145 +#: elf.c:2190 #, c-format msgid "%pB: warning: multiple symbol tables detected - ignoring the table in section %u" msgstr "%pB: aviso: detectadas múltiplas tabelas de símbolo - a ignorar a tabela na secção %u" -#: elf.c:2229 +#: elf.c:2274 #, c-format msgid "%pB: warning: multiple dynamic symbol tables detected - ignoring the table in section %u" msgstr "%pB: aviso: detectadas múltiplas tabelas de símbolo dinâmico - a ignorar a tabela na secção %u" -#: elf.c:2342 +#: elf.c:2387 #, c-format msgid "%pB: invalid link %u for reloc section %s (index %u)" msgstr "%pB: ligação inválida %u para secção reloc %s (índice %u)" -#: elf.c:2504 elf.c:2519 elf.c:2530 elf.c:2543 +#: elf.c:2478 +#, c-format +msgid "%pB: warning: secondary relocation section '%s' for section %pA found - ignoring" +msgstr "%pB: aviso: encontrada secção de relocalização \"%s\" para a secção %pA - a ignorar" + +#: elf.c:2562 elf.c:2577 elf.c:2588 elf.c:2601 #, c-format msgid "%pB: unknown type [%#x] section `%s'" msgstr "%pB: tipo desconhecido [%#x], secção \"%s\"" -#: elf.c:3248 +#: elf.c:3308 #, c-format msgid "%pB: error: alignment power %d of section `%pA' is too big" msgstr "%pB: erro: poder de alinhamento %d da secção \"%pA\" é muito grande" -#: elf.c:3278 +#: elf.c:3341 #, c-format msgid "warning: section `%pA' type changed to PROGBITS" msgstr "aviso: tipo da secção \"%pA\" alterou-se para PROGBITS" -#: elf.c:3754 +#: elf.c:3824 #, c-format msgid "%pB: too many sections: %u" msgstr "%pB: demasiadas secções: %u" -#: elf.c:3839 +#: elf.c:3909 #, c-format msgid "%pB: sh_link of section `%pA' points to discarded section `%pA' of `%pB'" msgstr "%pB: sh_link da secção \"%pA\" aponta para secção descartada \"%pA\" de \"%pB\"" -#: elf.c:3864 +#: elf.c:3934 #, c-format msgid "%pB: sh_link of section `%pA' points to removed section `%pA' of `%pB'" msgstr "%pB: sh_link da secção \"%pA\" aponta para secção removida \"%pA\" de \"%pB\"" -#: elf.c:4430 +#: elf.c:4495 #, c-format -msgid "%pB: GNU_MBIN section `%pA' has invalid sh_info field: %d" -msgstr "%pB: secção \"%pA\" de GNU_MBIN tem campo sh_info inválido: %d" +msgid "%pB: GNU_MBIND section `%pA' has invalid sh_info field: %d" +msgstr "%pB: secção \"%pA\" de GNU_MBIND tem um campo sh_info field inválido: %d" -#: elf.c:5013 +#: elf.c:5086 #, c-format msgid "%pB: TLS sections are not adjacent:" msgstr "%pB: secções TLS não adjacentes:" -#: elf.c:5020 +#: elf.c:5093 #, c-format msgid "\t TLS: %pA" msgstr "\t TLS: %pA" -#: elf.c:5024 +#: elf.c:5097 #, c-format msgid "\tnon-TLS: %pA" msgstr "\tnão-TLS: %pA" -#: elf.c:5538 +#: elf.c:5687 #, c-format msgid "%pB: The first section in the PT_DYNAMIC segment is not the .dynamic section" msgstr "%pB: a primeira secção no segmento PT_DYNAMIC não é a secção .dynamic" -#: elf.c:5566 +#: elf.c:5713 #, c-format msgid "%pB: not enough room for program headers, try linking with -N" msgstr "%pB: sem espaço para cabeçalhos do programa, tente ligar com -N" -#: elf.c:5654 +#: elf.c:5830 #, c-format msgid "%pB: section %pA lma %# adjusted to %#" msgstr "%pB: secção %pA lma %# ajustada para %#" -#: elf.c:5791 +#. The fix for this error is usually to edit the linker script being +#. used and set up the program headers manually. Either that or +#. leave room for the headers at the start of the SECTIONS. +#: elf.c:5967 +#, c-format +msgid "%pB: error: PHDR segment not covered by LOAD segment" +msgstr "%pB: erro: segmento PHDR não coberto pelo segmento LOAD" + +#: elf.c:6007 #, c-format msgid "%pB: section `%pA' can't be allocated in segment %d" msgstr "%pB: secção \"%pA\" não pode ser alocada no segmento %d" -#: elf.c:5839 +#: elf.c:6139 #, c-format msgid "%pB: warning: allocated section `%s' not in segment" msgstr "%pB: aviso: secção alocada \"%s\" não está no segmento" -#: elf.c:6072 +#: elf.c:6300 #, c-format msgid "%pB: error: non-load segment %d includes file header and/or program header" msgstr "%pB: erro: segmento %d não carga inclui cabeçalho de ficheiro e/ou de programa" -#. The fix for this error is usually to edit the linker script being -#. used and set up the program headers manually. Either that or -#. leave room for the headers at the start of the SECTIONS. -#: elf.c:6249 -#, c-format -msgid "%pB: error: PHDR segment not covered by LOAD segment" -msgstr "%pB: erro: segmento PHDR não coberto pelo segmento LOAD" - -#: elf.c:6606 +#: elf.c:6804 #, c-format msgid "%pB: symbol `%s' required but not present" msgstr "%pB: símbolo \"%s\" requerido mas não presente" -#: elf.c:6949 +#: elf.c:7147 #, c-format msgid "%pB: warning: empty loadable segment detected at vaddr=%#, is this intentional?" msgstr "%pB: aviso: detectado segmento carregável vazio em vaddr=%#, é intencional?" -#: elf.c:7574 +#: elf.c:7773 #, c-format msgid "%pB: warning: segment alignment of %# is too large" msgstr "%pB: aviso: alinhamento do segmento de %# é muito grande" -#: elf.c:8073 +#: elf.c:8286 +#, c-format +msgid "%pB: Unable to handle section index %x in ELF symbol. Using ABS instead." +msgstr "%pB: impossível gerir índice de secção %x em símbolo ELF. A usar ABS." + +#: elf.c:8316 #, c-format msgid "unable to find equivalent output section for symbol '%s' from section '%s'" msgstr "Impossível encontrar secção de saída equivalente para símbolo \"%s\" da secção \"%s\"" -#: elf.c:8421 +#: elf.c:8703 #, c-format msgid "%pB: .gnu.version_r invalid entry" msgstr "%pB: entrada .gnu.version_r inválida" -#: elf.c:8548 +#: elf.c:8836 #, c-format msgid "%pB: .gnu.version_d invalid entry" msgstr "%pB: entrada .gnu.version_d inválida" -#: elf32-arc.c:440 elf32-frv.c:6630 elf32-iq2000.c:870 elf32-m32c.c:914 -#: elf32-mt.c:562 elf32-rl78.c:1260 elf32-rx.c:3199 elf32-visium.c:841 -#: elf64-ppc.c:4950 +#: elf.c:9293 +#, c-format +msgid "%pB:%pA: error: attempting to write into an unallocated compressed section" +msgstr "%pB:%pA: erro: tentativa de escrita numa secção comprimida não alocada" + +#: elf.c:9302 +#, c-format +msgid "%pB:%pA: error: attempting to write over the end of the section" +msgstr "%pB: %pA: erro: tentativa de escrita para lá do fim da secção" + +#: elf.c:9313 +#, c-format +msgid "%pB:%pA: error: attempting to write section into an empty buffer" +msgstr "%pB:%pA: erro: tentativa de escrever a secção num buffer vazio" + +#: elf.c:12430 +msgid "GNU_MBIND section is unsupported" +msgstr "secção GNU_MBIND não é suportada" + +#: elf.c:12432 +msgid "symbol type STT_GNU_IFUNC is unsupported" +msgstr "tipo de símbolo STT_GNU_IFUNC não é suportado" + +#: elf.c:12434 +msgid "symbol binding STB_GNU_UNIQUE is unsupported" +msgstr "vínculo de símbolo STB_GNU_UNIQUE não é suportado" + +#: elf.c:12618 elf64-sparc.c:123 elfcode.h:1482 +#, c-format +msgid "%pB(%pA): relocation %d has invalid symbol index %ld" +msgstr "%pB(%pA): relocalização %d tem índice de símbolos inválido %ld" + +#: elf.c:12692 +#, c-format +msgid "%pB(%pA): link section cannot be set because the output file does not have a symbol table" +msgstr "%pB(%pA): a secção ligação não pode ser definida porque o ficheiro de saída não tem uma tabela de símbolos" + +#: elf.c:12704 +#, c-format +msgid "%pB(%pA): info section index is invalid" +msgstr "%pB(%pA): índice da secção de informação inválido" + +#: elf.c:12718 +#, c-format +msgid "%pB(%pA): info section index cannot be set because the section is not in the output" +msgstr "%pB(%pA): índice da secção de informação não pode ser definido porque a secção não está na saída" + +#: elf.c:12784 +#, c-format +msgid "%pB(%pA): error: secondary reloc section processed twice" +msgstr "%pB(%pA): erro: secção de relocalização secundária processada duas vezes" + +#: elf.c:12796 +#, c-format +msgid "%pB(%pA): error: secondary reloc section is empty!" +msgstr "%pB(%pA): erro: secção de relocalização secundária vazia" + +#: elf.c:12819 +#, c-format +msgid "%pB(%pA): error: internal relocs missing for secondary reloc section" +msgstr "%pB(%pA): erro: relocs internos em falta para a secção de relocalização secundária " + +#: elf.c:12838 +#, c-format +msgid "%pB(%pA): error: reloc table entry %u is empty" +msgstr "%pB:%pA: erro: a entrada %u da tabela de relocalização está vazia" + +#: elf.c:12863 +#, c-format +msgid "%pB(%pA): error: secondary reloc %u references a missing symbol" +msgstr "%pB(%pA): erro: a relocalização secundária %u referencia um símbolo em falta" + +#: elf.c:12880 +#, c-format +msgid "%pB(%pA): error: secondary reloc %u references a deleted symbol" +msgstr "%pB(%pA): erro: a relocalização secundária %u referencia um símbolo eliminado" + +#: elf.c:12893 +#, c-format +msgid "%pB(%pA): error: secondary reloc %u is of an unknown type" +msgstr "%pB(%pA): erro: a relocalização secundária %u tem um tipo desconhecido" + +#: elf32-arc.c:455 elf32-frv.c:6611 elf32-iq2000.c:868 elf32-m32c.c:914 +#: elf32-mt.c:562 elf32-rl78.c:1260 elf32-rx.c:3205 elf32-visium.c:844 +#: elf64-ppc.c:5291 #, c-format msgid "private flags = 0x%lx:" msgstr "bandeiras privadas = 0x%lx:" -#: elf32-arc.c:627 +#: elf32-arc.c:642 #, c-format msgid "warning: %pB: conflicting platform configuration %s with %s" msgstr "Aviso: %pB: conflito na configuração de plataforma %s com %s." -#: elf32-arc.c:646 +#: elf32-arc.c:661 #, c-format msgid "error: %pB: unable to merge CPU base attributes %s with %s" msgstr "erro: %pB: impossível unir atributos base CPU %s com %s." -#: elf32-arc.c:683 +#: elf32-arc.c:698 #, c-format msgid "error: %pB: unable to merge ISA extension attributes %s" msgstr "erro: %pB: impossível unir atributos de extensão ISA %s." -#: elf32-arc.c:707 +#: elf32-arc.c:722 #, c-format msgid "error: %pB: conflicting ISA extension attributes %s with %s" msgstr "erro: %pB: conflito de atributos de extensão ISA %s com %s." -#: elf32-arc.c:747 +#: elf32-arc.c:762 #, c-format msgid "error: %pB: cannot mix rf16 with full register set %pB" msgstr "erro: %pB: impossível misturar rf16 com conjunto de registo completo %pB." -#: elf32-arc.c:775 +#: elf32-arc.c:790 #, c-format msgid "error: %pB: conflicting attributes %s: %s with %s" msgstr "erro: %pB: conflito de atributos %s: %s com %s." -#: elf32-arc.c:802 +#: elf32-arc.c:817 #, c-format msgid "error: %pB: conflicting attributes %s" msgstr "erro: %pB: conflito de atributos %s." -#: elf32-arc.c:907 +#: elf32-arc.c:922 #, c-format msgid "error: attempting to link %pB with a binary %pB of different architecture" msgstr "ERRO: tentativa de ligar %pB com um binário %pB de diferente arquitectura" -#: elf32-arc.c:923 elf32-iq2000.c:846 elf32-m32c.c:889 elf32-m68hc1x.c:1385 -#: elf32-ppc.c:3865 elf64-sparc.c:711 elfxx-mips.c:15354 +#: elf32-arc.c:938 elf32-iq2000.c:844 elf32-m32c.c:889 elf32-m68hc1x.c:1391 +#: elf32-ppc.c:3867 elf64-sparc.c:722 elfxx-mips.c:15513 #, c-format msgid "%pB: uses different e_flags (%#x) fields than previous modules (%#x)" msgstr "%pB: usa campos e_flags diferentes (%#x) dos módulos anteriores (%#x)" -#: elf32-arc.c:1012 +#: elf32-arc.c:1027 msgid "error: the ARC4 architecture is no longer supported" msgstr "Erro: a arquitectura ARC4 já não é suportada." -#: elf32-arc.c:1018 +#: elf32-arc.c:1033 msgid "warning: unset or old architecture flags; use default machine" msgstr "Aviso: bandeiras não definidas ou de arquitectura antiga. Use a máquina predefinida." -#: elf32-arc.c:1151 +#: elf32-arc.c:1159 #, c-format msgid "%pB(%pA+%#): CMEM relocation to `%s' is invalid, 16 MSB should be %#x (value is %#)" msgstr "%pB(%pA+%#): relocalização CMEM para \"%s\" é inválida, 16 MSB deveria ser %#x (o valor é %#)" -#: elf32-arc.c:1162 +#: elf32-arc.c:1170 #, c-format msgid "%pB(%pA+%#): CMEM relocation to `%s+%#' is invalid, 16 MSB should be %#x (value is %#)" msgstr "%pB(%pA+%#): relocalização CMEM para \"%s+%#\" é inválida, 16 MSB deveria ser %#x (o valor é %#)" -#: elf32-arc.c:1876 +#: elf32-arc.c:1885 msgid "GOT and PLT relocations cannot be fixed with a non dynamic linker" msgstr "Relocalizações GOT e PLT não podem ser reparadas com um linker não dinâmico." -#: elf32-arc.c:1900 elf32-rl78.c:1098 elf32-rx.c:1470 +#: elf32-arc.c:1909 elf32-rl78.c:1098 elf32-rx.c:1475 #, c-format msgid "%pB(%pA): warning: unaligned access to symbol '%s' in the small data area" msgstr "%pB(%pA): aviso: acesso não alinhado ao símbolo \"%s\" na área de dados pequenos" -#: elf32-arc.c:1905 elf32-rl78.c:1103 elf32-rx.c:1475 +#: elf32-arc.c:1914 elf32-rl78.c:1103 elf32-rx.c:1480 #, c-format msgid "%pB(%pA): internal error: out of range error" msgstr "%pB(%pA): erro interno: erro fora do intervalo" -#: elf32-arc.c:1910 elf32-rl78.c:1108 elf32-rx.c:1480 +#: elf32-arc.c:1919 elf32-rl78.c:1108 elf32-rx.c:1485 #, c-format msgid "%pB(%pA): internal error: unsupported relocation error" msgstr "%pB(%pA): erro interno: erro relocalização não suportada" -#: elf32-arc.c:1915 elf32-rl78.c:1113 elf32-rx.c:1485 +#: elf32-arc.c:1924 elf32-rl78.c:1113 elf32-rx.c:1490 #, c-format msgid "%pB(%pA): internal error: dangerous relocation" msgstr "%pB(%pA): erro interno: relocalização perigosa" -#: elf32-arc.c:1920 elf32-rl78.c:1118 elf32-rx.c:1490 +#: elf32-arc.c:1929 elf32-rl78.c:1118 elf32-rx.c:1495 #, c-format msgid "%pB(%pA): internal error: unknown error" msgstr "%pB(%pA): erro interno: erro desconhecido" -#: elf32-arc.c:2013 elf32-arc.c:2081 elf32-arm.c:15323 elf32-metag.c:2257 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:7462 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:497 +#: elf32-arc.c:2022 elf32-arc.c:2090 elf32-arm.c:15513 elf32-metag.c:2253 +#: elf32-nds32.c:5498 elfnn-aarch64.c:7739 elfnn-riscv.c:483 #, c-format msgid "%pB: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC" msgstr "%pB: relocalização %s contra \"%s\" não pode ser usada a fazer um objecto partilhado; recompile com -fPIC" -#: elf32-arc.c:2949 +#: elf32-arc.c:2909 #, c-format msgid "%pB: unknown mandatory ARC object attribute %d" msgstr "%pB: atributo de objecto ARC %d obrigatório desconhecido." -#: elf32-arc.c:2957 +#: elf32-arc.c:2917 #, c-format msgid "warning: %pB: unknown ARC object attribute %d" msgstr "Aviso: %pB: atributo de objecto ARC %d desconhecido." -#: elf32-arm.c:4304 elf32-arm.c:4338 elf32-arm.c:4357 elf32-arm.c:4409 +#: elf32-arm.c:4307 elf32-arm.c:4341 elf32-arm.c:4360 elf32-arm.c:4412 #, c-format msgid "%pB(%pA): warning: long branch veneers used in section with SHF_ARM_PURECODE section attribute is only supported for M-profile targets that implement the movw instruction" msgstr "%pB(%pA): aviso: o uso de folhas de ramos longos na secção com atributo de secção SHF_ARM_PURECODE só é suportado para alvos M-profile que implementem a instrução movw." -#: elf32-arm.c:4369 elf32-arm.c:4423 elf32-arm.c:9093 elf32-arm.c:9183 +#: elf32-arm.c:4372 elf32-arm.c:4426 elf32-arm.c:9116 elf32-arm.c:9206 #, c-format msgid "%pB(%s): warning: interworking not enabled; first occurrence: %pB: %s call to %s" msgstr "%pB(%s): aviso: interworking não activo; primeira ocorrência: %pB: chamada %s a %s" -#: elf32-arm.c:4697 +#: elf32-arm.c:4552 +#, c-format +msgid "ERROR: CMSE stub (%s section) too far (%#) from destination (%#)" +msgstr "ERRO: fictício CMSE (secção %s) muito longe (%#) do destino (%#)" + +#: elf32-arm.c:4721 #, c-format msgid "no address assigned to the veneers output section %s" msgstr "Sem endereço atribuído à secção de saída das folhas %s" -#: elf32-arm.c:4772 elf32-arm.c:6909 elf32-csky.c:3287 elf32-hppa.c:579 -#: elf32-m68hc1x.c:165 elf32-metag.c:1186 elf32-nios2.c:2208 elf64-ppc.c:3501 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:3098 +#: elf32-arm.c:4796 elf32-arm.c:6943 elf32-csky.c:3172 elf32-hppa.c:584 +#: elf32-m68hc1x.c:165 elf32-metag.c:1182 elf32-nios2.c:2204 elf64-ppc.c:3775 +#: elfnn-aarch64.c:3190 #, c-format msgid "%pB: cannot create stub entry %s" msgstr "%pB: impossível criar entrada fictícia %s" -#: elf32-arm.c:5957 +#: elf32-arm.c:5017 elf32-csky.c:3514 elf32-hppa.c:734 elf32-m68hc11.c:422 +#: elf32-m68hc12.c:542 elf32-metag.c:3347 elf32-nios2.c:2497 elf64-ppc.c:11315 +#: elfnn-aarch64.c:3259 +msgid "%F%P: Could not assign '%pA' to an output section. Retry without --enable-non-contiguous-regions.\n" +msgstr "%F%P: impossível atribuir \"%pA\" a uma secção de saída. Repita sem --enable-non-contiguous-regions.\n" + +#: elf32-arm.c:5987 #, c-format msgid "%pB: special symbol `%s' only allowed for ARMv8-M architecture or later" msgstr "%pB: símbolo especial \"%s\" só é permitido para arquitecturas ARMv8-M ou posteriores." -#: elf32-arm.c:5966 +#: elf32-arm.c:5996 #, c-format msgid "%pB: invalid special symbol `%s'; it must be a global or weak function symbol" msgstr "%pB: sómbolo especial inválido \"%s\"; tem de ser um símbolo de função global ou fraco." -#: elf32-arm.c:6005 +#: elf32-arm.c:6035 #, c-format msgid "%pB: invalid standard symbol `%s'; it must be a global or weak function symbol" msgstr "%pB: símbolo padrão %s inválido; tem de ser um símbolo de função global ou fraco." -#: elf32-arm.c:6011 +#: elf32-arm.c:6041 #, c-format msgid "%pB: absent standard symbol `%s'" msgstr "%pB: símbolo standard \"%s\" ausente." -#: elf32-arm.c:6023 +#: elf32-arm.c:6053 #, c-format msgid "%pB: `%s' and its special symbol are in different sections" msgstr "%pB: \"%s\" e o seu símbolo especial estão em secções diferentes." -#: elf32-arm.c:6035 +#: elf32-arm.c:6065 #, c-format msgid "%pB: entry function `%s' not output" msgstr "%pB: função de entrada \"%s\" não saída." -#: elf32-arm.c:6042 +#: elf32-arm.c:6072 #, c-format msgid "%pB: entry function `%s' is empty" msgstr "%pB: função de entrada \"%s\" está vazia." -#: elf32-arm.c:6171 +#: elf32-arm.c:6201 #, c-format msgid "%pB: --in-implib only supported for Secure Gateway import libraries" msgstr "%pB: --in-implib só é suportado para bibliotecas importadas Secure Gateway." -#: elf32-arm.c:6217 +#: elf32-arm.c:6250 #, c-format msgid "%pB: invalid import library entry: `%s'; symbol should be absolute, global and refer to Thumb functions" msgstr "%pB: entrada de biblioteca importada %s inválida; o símbolo deve ser absoluto, global e referir-se a funções Thumb." -#: elf32-arm.c:6239 +#: elf32-arm.c:6272 #, c-format msgid "entry function `%s' disappeared from secure code" msgstr "Função de entrada \"%s\" desapareceu do código de segurança." -#: elf32-arm.c:6263 +#: elf32-arm.c:6296 #, c-format msgid "`%s' refers to a non entry function" msgstr "\"%s\" refere-se a função não de entrada." -#: elf32-arm.c:6278 +#: elf32-arm.c:6311 #, c-format msgid "%pB: visibility of symbol `%s' has changed" msgstr "%pB: a visibilidade do símbolo \"%s\" mudou." -#: elf32-arm.c:6287 +#: elf32-arm.c:6320 #, c-format msgid "%pB: incorrect size for symbol `%s'" msgstr "%pB: tamanho incorrecto do símbolo \"%s\"." -#: elf32-arm.c:6306 +#: elf32-arm.c:6339 #, c-format msgid "offset of veneer for entry function `%s' not a multiple of its size" msgstr "Desvio \"%s\" da folha para função de entrada não é múltiplo do seu tamanho." -#: elf32-arm.c:6326 +#: elf32-arm.c:6359 msgid "new entry function(s) introduced but no output import library specified:" msgstr "introduzidas novas funções de entrada mas não especificou biblioteca importada de saída:" -#: elf32-arm.c:6334 +#: elf32-arm.c:6367 #, c-format msgid "start address of `%s' is different from previous link" msgstr "Endereço inicial de \"%s\" é diferente da ligação prévia." -#: elf32-arm.c:7042 elf32-arm.c:7078 +#: elf32-arm.c:7076 elf32-arm.c:7111 #, c-format msgid "unable to find %s glue '%s' for '%s'" msgstr "impossível encontrar cola %s \"%s\" para \"%s\"" -#: elf32-arm.c:7793 +#: elf32-arm.c:7822 #, c-format msgid "%pB: BE8 images only valid in big-endian mode" msgstr "%pB: imagens BE8 só são válidas em modo big-endian." #. Give a warning, but do as the user requests anyway. -#: elf32-arm.c:8024 +#: elf32-arm.c:8049 #, c-format msgid "%pB: warning: selected VFP11 erratum workaround is not necessary for target architecture" msgstr "%pB: aviso: a solução de errata VFP11 seleccionada não é necessária para arquitectura de destino" -#: elf32-arm.c:8051 +#: elf32-arm.c:8076 #, c-format msgid "%pB: warning: selected STM32L4XX erratum workaround is not necessary for target architecture" msgstr "%pB: aviso: a solução de errata STM32L4XX seleccionada não é necessária para arquitectura de destino" -#: elf32-arm.c:8588 elf32-arm.c:8608 elf32-arm.c:8674 elf32-arm.c:8693 +#: elf32-arm.c:8612 elf32-arm.c:8632 elf32-arm.c:8699 elf32-arm.c:8718 #, c-format msgid "%pB: unable to find %s veneer `%s'" msgstr "%pB: impossível encontrar a folha %s \"%s\"" -#: elf32-arm.c:8900 +#: elf32-arm.c:8925 #, c-format msgid "%pB(%pA+%#x): error: multiple load detected in non-last IT block instruction: STM32L4XX veneer cannot be generated; use gcc option -mrestrict-it to generate only one instruction per IT block" msgstr "" "%pB(%pA+%#x): erro: detectada múltipla carga em bloco de instrução IT não-último: impossível gerar folha STM32L4XX.\n" "Use a opção gcc -mrestrict-it para gerar só uma instrução por bloco IT." -#: elf32-arm.c:9000 +#: elf32-arm.c:9023 #, c-format msgid "invalid TARGET2 relocation type '%s'" msgstr "Tipo de relocalização \"%s\" TARGET2 inválido." #. FIXME: We ought to be able to generate thumb-1 PLT #. instructions... -#: elf32-arm.c:9802 +#: elf32-arm.c:9825 #, c-format msgid "%pB: warning: thumb-1 mode PLT generation not currently supported" msgstr "%pB: aviso: geração PLT modo thumb-1 não é actualmente suportada" -#: elf32-arm.c:10106 elf32-arm.c:10148 +#: elf32-arm.c:10135 elf32-arm.c:10177 #, c-format msgid "%pB(%pA+%#): unexpected %s instruction '%#lx' in TLS trampoline" msgstr "%pB(%pA+%#): instrução %s \"%#lx\" inesperada em trampolim TLS" -#: elf32-arm.c:10492 +#: elf32-arm.c:10521 msgid "shared object" msgstr "objecto partilhado" -#: elf32-arm.c:10495 +#: elf32-arm.c:10524 msgid "PIE executable" msgstr "Executável PIE" -#: elf32-arm.c:10498 +#: elf32-arm.c:10527 #, c-format msgid "%pB: relocation %s against external or undefined symbol `%s' can not be used when making a %s; recompile with -fPIC" msgstr "%pB: relocalização %s contra símbolo \"%s\" externo ou indefinido não pode ser usada ao fazer %s; recompile com -fPIC" -#: elf32-arm.c:10635 elf32-arm.c:11062 +#: elf32-arm.c:10664 elf32-arm.c:11091 #, c-format msgid "%pB: warning: %s BLX instruction targets %s function '%s'" msgstr "%pB: aviso: instrução %s BLX destina-se a função %s \"%s\"." -#: elf32-arm.c:11975 elf32-arm.c:12001 +#: elf32-arm.c:12003 elf32-arm.c:12029 #, c-format msgid "%pB(%pA+%#): unexpected %s instruction '%#lx' referenced by TLS_GOTDESC" msgstr "%pB(%pA+%#): instrução %s \"%#lx\" inesperada referenciada por TLS_GOTDESC" -#: elf32-arm.c:12047 elf32-csky.c:4853 elf32-m68k.c:3703 elf32-metag.c:1919 -#: elf32-nios2.c:4366 +#: elf32-arm.c:12075 elf32-csky.c:4746 elf32-m68k.c:3735 elf32-metag.c:1915 +#: elf32-nios2.c:4385 #, c-format msgid "%pB(%pA+%#): %s relocation not permitted in shared object" msgstr "%pB(%pA+%#): relocalização %s não permitida em objecto partilhado" -#: elf32-arm.c:12261 +#: elf32-arm.c:12289 #, c-format msgid "%pB(%pA+%#): only ADD or SUB instructions are allowed for ALU group relocations" msgstr "%pB(%pA+%#): só são permitidas instruções ADD ou SUB para relocalizações de grupo ALU" -#: elf32-arm.c:12302 elf32-arm.c:12394 elf32-arm.c:12482 elf32-arm.c:12572 +#: elf32-arm.c:12330 elf32-arm.c:12422 elf32-arm.c:12510 elf32-arm.c:12600 #, c-format msgid "%pB(%pA+%#): overflow whilst splitting %# for group relocation %s" msgstr "%pB(%pA+%#): transporte ao dividir %# para relocalização de grupo %s" -#: elf32-arm.c:13078 elf32-sh.c:3689 +#: elf32-arm.c:13232 elf32-sh.c:3571 #, c-format msgid "%pB(%pA+%#): %s relocation against SEC_MERGE section" msgstr "%pB(%pA+%#): relocalização %s contra secção SEC_MERGE" -#: elf32-arm.c:13191 elf32-m68k.c:3936 elf32-xtensa.c:2703 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:6534 +#: elf32-arm.c:13345 elf32-m68k.c:3968 elf32-xtensa.c:2761 +#: elfnn-aarch64.c:6829 #, c-format msgid "%pB(%pA+%#): %s used with TLS symbol %s" msgstr "%pB(%pA+%#): %s usado com símbolo TLS %s" -#: elf32-arm.c:13193 elf32-m68k.c:3938 elf32-xtensa.c:2705 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:6536 +#: elf32-arm.c:13347 elf32-m68k.c:3970 elf32-xtensa.c:2763 +#: elfnn-aarch64.c:6831 #, c-format msgid "%pB(%pA+%#): %s used with non-TLS symbol %s" msgstr "%pB(%pA+%#): %s usado com símbolo não-TLS %s" -#: elf32-arm.c:13276 elf32-tic6x.c:2708 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:6871 +#: elf32-arm.c:13430 elf32-tic6x.c:2649 elfnn-aarch64.c:7166 msgid "out of range" msgstr "fora do intervalo" -#: elf32-arm.c:13280 elf32-nios2.c:4500 elf32-pru.c:933 elf32-tic6x.c:2712 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:6875 +#: elf32-arm.c:13434 elf32-nios2.c:4519 elf32-pru.c:936 elf32-tic6x.c:2653 +#: elfnn-aarch64.c:7170 msgid "unsupported relocation" msgstr "relocalização não suportada" -#: elf32-arm.c:13288 elf32-nios2.c:4510 elf32-pru.c:943 elf32-tic6x.c:2720 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:6883 +#: elf32-arm.c:13442 elf32-nios2.c:4529 elf32-pru.c:946 elf32-tic6x.c:2661 +#: elfnn-aarch64.c:7178 msgid "unknown error" msgstr "erro desconhecido" -#: elf32-arm.c:13764 +#: elf32-arm.c:13920 #, c-format msgid "warning: not setting interworking flag of %pB since it has already been specified as non-interworking" msgstr "Aviso: bandeira %pB de interworking não definida porque já foi especificada como não-interworking" -#: elf32-arm.c:13768 +#: elf32-arm.c:13924 #, c-format msgid "warning: clearing the interworking flag of %pB due to outside request" msgstr "Aviso: a limpar bandeira %pB de interworking devido a pedido externo" -#: elf32-arm.c:13813 +#: elf32-arm.c:13969 #, c-format msgid "warning: clearing the interworking flag of %pB because non-interworking code in %pB has been linked with it" msgstr "Aviso: a limpar bandeira %pB de interworking devido a código não interworking em %pB que lhe foi ligado" -#: elf32-arm.c:13900 +#: elf32-arm.c:14056 #, c-format msgid "%pB: unknown mandatory EABI object attribute %d" msgstr "Aviso: %pB: atributo de objecto EABI %d obrigatório desconhecido" -#: elf32-arm.c:13908 +#: elf32-arm.c:14064 #, c-format msgid "warning: %pB: unknown EABI object attribute %d" msgstr "Aviso: %pB: atributo de objecto EABI %d desconhecido" -#: elf32-arm.c:14175 +#: elf32-arm.c:14364 #, c-format msgid "error: %pB: unknown CPU architecture" msgstr "erro: %pB: arquitectura CPU desconhecida" -#: elf32-arm.c:14213 elf32-nios2.c:2946 +#: elf32-arm.c:14402 elf32-nios2.c:2953 #, c-format msgid "error: %pB: conflicting CPU architectures %d/%d" msgstr "erro: %pB: arquitecturas CPU %d/%d em conflito" -#: elf32-arm.c:14310 +#: elf32-arm.c:14499 #, c-format msgid "Error: %pB has both the current and legacy Tag_MPextension_use attributes" msgstr "Erro: %pB tem ambos os atributos Tag_MPextension_use actual e legado" -#: elf32-arm.c:14339 +#: elf32-arm.c:14528 #, c-format msgid "error: %pB uses VFP register arguments, %pB does not" msgstr "erro: %pB usa argumentos de registo VFP, %pB não" -#: elf32-arm.c:14497 +#: elf32-arm.c:14687 #, c-format msgid "error: %pB: unable to merge virtualization attributes with %pB" msgstr "erro: %pB: impossível unir atributos de virtualização com %pB" -#: elf32-arm.c:14523 +#: elf32-arm.c:14713 #, c-format msgid "error: %pB: conflicting architecture profiles %c/%c" msgstr "erro: %pB: perfis de arquitectura %c/%c em conflito" -#: elf32-arm.c:14662 +#: elf32-arm.c:14852 #, c-format msgid "warning: %pB: conflicting platform configuration" msgstr "Aviso: %pB: configuração de plataforma em conflito" -#: elf32-arm.c:14671 +#: elf32-arm.c:14861 #, c-format msgid "error: %pB: conflicting use of R9" msgstr "erro: %pB: uso de R9 em conflito" -#: elf32-arm.c:14683 +#: elf32-arm.c:14873 #, c-format msgid "error: %pB: SB relative addressing conflicts with use of R9" msgstr "erro: %pB: conflitos de endereçamento relativo SB com o uso de R9" -#: elf32-arm.c:14696 +#: elf32-arm.c:14886 #, c-format msgid "warning: %pB uses %u-byte wchar_t yet the output is to use %u-byte wchar_t; use of wchar_t values across objects may fail" msgstr "aviso: %pB usa %u-byte wchar_t mas a saída deve usar %u-byte wchar_t; uso de valores wchar_t através de vários objectos pode falhar" -#: elf32-arm.c:14727 +#: elf32-arm.c:14917 #, c-format msgid "warning: %pB uses %s enums yet the output is to use %s enums; use of enum values across objects may fail" msgstr "aviso: %pB usa %s enums mas a saída deve usar %s enums; uso de valores enum através de vários objectos pode falhar" -#: elf32-arm.c:14739 +#: elf32-arm.c:14929 #, c-format msgid "error: %pB uses iWMMXt register arguments, %pB does not" msgstr "erro: %pB usa argumentos de registo iWMMXt, %pB não" -#: elf32-arm.c:14756 +#: elf32-arm.c:14946 #, c-format msgid "error: fp16 format mismatch between %pB and %pB" msgstr "erro: formato fp16 enganado entre %pB e %pB" -#: elf32-arm.c:14792 +#: elf32-arm.c:14982 #, c-format msgid "%pB has both the current and legacy Tag_MPextension_use attributes" msgstr "%pB tem ambos os atributos Tag_MPextension_use actual e legado" @@ -1690,345 +1794,330 @@ #. Ignore init flag - it may not be set, despite the flags field containing valid data. #. Ignore init flag - it may not be set, despite the flags field #. containing valid data. -#: elf32-arm.c:14879 elf32-bfin.c:4740 elf32-cris.c:3908 elf32-m68hc1x.c:1410 -#: elf32-m68k.c:1201 elf32-score.c:4000 elf32-score7.c:3805 elf32-vax.c:537 -#: elf32-xgate.c:494 elfxx-mips.c:16037 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:7037 +#: elf32-arm.c:15069 elf32-bfin.c:4719 elf32-cris.c:3861 elf32-m68hc1x.c:1416 +#: elf32-m68k.c:1267 elf32-score.c:4000 elf32-score7.c:3805 elf32-vax.c:537 +#: elf32-xgate.c:494 elfxx-mips.c:16199 elfnn-aarch64.c:7332 #, c-format msgid "private flags = %lx:" msgstr "bandeiras provadas = %lx:" -#: elf32-arm.c:14888 +#: elf32-arm.c:15078 #, c-format msgid " [interworking enabled]" msgstr " [interworking activo]" -#: elf32-arm.c:14896 +#: elf32-arm.c:15086 #, c-format msgid " [VFP float format]" msgstr " [formato flutuante VFP]" -#: elf32-arm.c:14898 +#: elf32-arm.c:15088 #, c-format msgid " [Maverick float format]" msgstr " [formato flutuante Maverick]" -#: elf32-arm.c:14900 +#: elf32-arm.c:15090 #, c-format msgid " [FPA float format]" msgstr " [formato flutuante FPA]" -#: elf32-arm.c:14903 +#: elf32-arm.c:15093 #, c-format msgid " [floats passed in float registers]" msgstr " [flutuantes passados em registos flutuantes]" -#: elf32-arm.c:14906 elf32-arm.c:14992 +#: elf32-arm.c:15096 elf32-arm.c:15182 #, c-format msgid " [position independent]" msgstr " [posição independente]" -#: elf32-arm.c:14909 +#: elf32-arm.c:15099 #, c-format msgid " [new ABI]" msgstr " [novo ABI]" -#: elf32-arm.c:14912 +#: elf32-arm.c:15102 #, c-format msgid " [old ABI]" msgstr " [ABI antigo]" -#: elf32-arm.c:14915 +#: elf32-arm.c:15105 #, c-format msgid " [software FP]" msgstr " [software FP]" -#: elf32-arm.c:14924 +#: elf32-arm.c:15114 #, c-format msgid " [Version1 EABI]" msgstr " [Version1 EABI]" -#: elf32-arm.c:14927 elf32-arm.c:14938 +#: elf32-arm.c:15117 elf32-arm.c:15128 #, c-format msgid " [sorted symbol table]" msgstr " [tabela de símbolo ordenada]" -#: elf32-arm.c:14929 elf32-arm.c:14940 +#: elf32-arm.c:15119 elf32-arm.c:15130 #, c-format msgid " [unsorted symbol table]" msgstr " [tabela de símbolo desordenada]" -#: elf32-arm.c:14935 +#: elf32-arm.c:15125 #, c-format msgid " [Version2 EABI]" msgstr " [Version2 EABI]" -#: elf32-arm.c:14943 +#: elf32-arm.c:15133 #, c-format msgid " [dynamic symbols use segment index]" msgstr " [símbolos dinâmicos usam índice de segmento]" -#: elf32-arm.c:14946 +#: elf32-arm.c:15136 #, c-format msgid " [mapping symbols precede others]" msgstr " [símbolos de mapeamento precedem outros]" -#: elf32-arm.c:14953 +#: elf32-arm.c:15143 #, c-format msgid " [Version3 EABI]" msgstr " [Version3 EABI]" -#: elf32-arm.c:14957 +#: elf32-arm.c:15147 #, c-format msgid " [Version4 EABI]" msgstr " [Version4 EABI]" -#: elf32-arm.c:14961 +#: elf32-arm.c:15151 #, c-format msgid " [Version5 EABI]" msgstr " [Version5 EABI]" -#: elf32-arm.c:14964 +#: elf32-arm.c:15154 #, c-format msgid " [soft-float ABI]" msgstr " [soft-float ABI]" -#: elf32-arm.c:14967 +#: elf32-arm.c:15157 #, c-format msgid " [hard-float ABI]" msgstr " [hard-float ABI]" -#: elf32-arm.c:14973 +#: elf32-arm.c:15163 #, c-format msgid " [BE8]" msgstr " [BE8]" -#: elf32-arm.c:14976 +#: elf32-arm.c:15166 #, c-format msgid " [LE8]" msgstr " [LE8]" -#: elf32-arm.c:14982 +#: elf32-arm.c:15172 #, c-format msgid " " msgstr " " -#: elf32-arm.c:14989 +#: elf32-arm.c:15179 #, c-format msgid " [relocatable executable]" msgstr " [executável relocalizável]" -#: elf32-arm.c:14995 +#: elf32-arm.c:15185 #, c-format msgid " [FDPIC ABI supplement]" msgstr " [suplemento FDPIC ABI]" -#: elf32-arm.c:15000 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:7040 +#: elf32-arm.c:15190 elfnn-aarch64.c:7335 #, c-format msgid "" msgstr "" -#: elf32-arm.c:15117 elf32-i386.c:1529 elf32-s390.c:960 elf32-tic6x.c:2783 -#: elf32-tilepro.c:1479 elf32-xtensa.c:1029 elf64-s390.c:882 -#: elf64-x86-64.c:1865 elfxx-sparc.c:1422 elfxx-tilegx.c:1700 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:7329 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:539 +#: elf32-arm.c:15307 elf32-i386.c:1524 elf32-s390.c:925 elf32-tic6x.c:2724 +#: elf32-tilepro.c:1443 elf32-xtensa.c:1093 elf64-s390.c:847 +#: elf64-x86-64.c:1902 elfxx-sparc.c:1386 elfxx-tilegx.c:1664 +#: elfnn-aarch64.c:7606 elfnn-riscv.c:525 #, c-format msgid "%pB: bad symbol index: %d" msgstr "%pB: mau índice de símbolo: %d" -#: elf32-arm.c:15508 +#: elf32-arm.c:15696 #, c-format msgid "FDPIC does not yet support %s relocation to become dynamic for executable" msgstr "FDPIC ainda não suporta que a relocalização %s se torne dinâmica para executável" -#: elf32-arm.c:16558 elf32-csky.c:1931 elf32-hppa.c:2090 elf32-lm32.c:1998 -#: elf32-m32r.c:2110 elf32-metag.c:2797 elf32-nds32.c:4330 elf32-or1k.c:2858 -#: elf32-ppc.c:5469 elf32-s390.c:1854 elf32-sh.c:2975 elf32-tic6x.c:3252 -#: elf32-tilepro.c:2245 elf64-ppc.c:9023 elf64-s390.c:1791 elfxx-sparc.c:2435 -#: elfxx-tilegx.c:2491 elfxx-x86.c:571 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:8677 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:1142 -#, c-format -msgid "%pB: dynamic relocation against `%pT' in read-only section `%pA'\n" -msgstr "%pB: relocalização dinâmica contra \"%pT\" em secção só de leitura \"%pA\"\n" - -#: elf32-arm.c:16854 +#: elf32-arm.c:16939 #, c-format msgid "errors encountered processing file %pB" msgstr "Encontrados erros ao processar o ficheiro %pB" -#: elf32-arm.c:17301 elflink.c:12556 elflink.c:12603 +#: elf32-arm.c:17326 elflink.c:12818 elflink.c:12865 #, c-format msgid "could not find section %s" msgstr "impossível encontrar a secção %s" -#: elf32-arm.c:18512 +#: elf32-arm.c:18550 #, c-format msgid "%pB: error: Cortex-A8 erratum stub is allocated in unsafe location" msgstr "%pB: erro: errata Cortex-A8 fictícia está alocada a localização não-segura" #. There's not much we can do apart from complain if this #. happens. -#: elf32-arm.c:18539 +#: elf32-arm.c:18577 #, c-format msgid "%pB: error: Cortex-A8 erratum stub out of range (input file too large)" msgstr "%pB: erro: errata Cortex-A8 fictícia fora do intervalo (ficheiro de entrada muito grande)" -#: elf32-arm.c:19366 elf32-arm.c:19388 +#: elf32-arm.c:19404 elf32-arm.c:19426 #, c-format msgid "%pB: error: VFP11 veneer out of range" msgstr "%pB: erro: folha VFP11 fora do intervalo" -#: elf32-arm.c:19439 +#: elf32-arm.c:19477 #, c-format msgid "%pB(%#): error: cannot create STM32L4XX veneer; jump out of range by % bytes; cannot encode branch instruction" msgstr "%pB(%#): erro: impossível criar folha STM32L4XX. Sai fora do intervalo por % bytes. Impossível codificar a instrução do ramo. " -#: elf32-arm.c:19478 +#: elf32-arm.c:19516 #, c-format msgid "%pB: error: cannot create STM32L4XX veneer" msgstr "%pB: erro: impossível criar folha STM32L4XX." -#: elf32-arm.c:20567 +#: elf32-arm.c:20600 #, c-format msgid "error: %pB is already in final BE8 format" msgstr "erro: %pB já está no formato final BE8" -#: elf32-arm.c:20643 +#: elf32-arm.c:20676 #, c-format msgid "error: source object %pB has EABI version %d, but target %pB has EABI version %d" msgstr "erro: objecto fonte %pB tem versão EABI %d, mas o alvo %pB tem versão EABI %d" -#: elf32-arm.c:20658 +#: elf32-arm.c:20691 #, c-format msgid "error: %pB is compiled for APCS-%d, whereas target %pB uses APCS-%d" msgstr "erro: %pB está compilado para APCS-%d, enquanto o alvo %pB usa APCS-%d" -#: elf32-arm.c:20668 +#: elf32-arm.c:20701 #, c-format msgid "error: %pB passes floats in float registers, whereas %pB passes them in integer registers" msgstr "erro: %pB passa flutuantes em registos flutuantes, enquanto %pB os passa em registos inteiros" -#: elf32-arm.c:20672 +#: elf32-arm.c:20705 #, c-format msgid "error: %pB passes floats in integer registers, whereas %pB passes them in float registers" msgstr "erro: %pB passa flutuantes em registos inteiros, enquanto %pB os passa em registos flutuantes" -#: elf32-arm.c:20682 elf32-arm.c:20686 elf32-arm.c:20696 +#: elf32-arm.c:20715 elf32-arm.c:20719 elf32-arm.c:20729 #, c-format msgid "error: %pB uses %s instructions, whereas %pB does not" msgstr "erro: %pB usa instruções%s, enquanto %pB não" -#: elf32-arm.c:20700 +#: elf32-arm.c:20733 #, c-format msgid "error: %pB does not use %s instructions, whereas %pB does" msgstr "erro: %pB não usa instruções %s, enquanto %pB sim" -#: elf32-arm.c:20719 +#: elf32-arm.c:20752 #, c-format msgid "error: %pB uses software FP, whereas %pB uses hardware FP" msgstr "erro: %pB usa programa FP, enquanto %pB usa equipamento FP" -#: elf32-arm.c:20723 +#: elf32-arm.c:20756 #, c-format msgid "error: %pB uses hardware FP, whereas %pB uses software FP" msgstr "erro: %pB usa equipamento FP, enquanto %pB usa programa FP" -#: elf32-arm.c:20737 +#: elf32-arm.c:20770 #, c-format msgid "warning: %pB supports interworking, whereas %pB does not" msgstr "Aviso: %pB suporta interworking, enquanto %pB não" -#: elf32-arm.c:20743 +#: elf32-arm.c:20776 #, c-format msgid "warning: %pB does not support interworking, whereas %pB does" msgstr "Aviso: %pB não suporta interworking, enquanto %pB sim" -#: elf32-avr.c:1518 elf32-bfin.c:3135 elf32-cris.c:2041 elf32-epiphany.c:577 -#: elf32-fr30.c:602 elf32-frv.c:4057 elf32-ft32.c:502 elf32-ip2k.c:1493 -#: elf32-iq2000.c:701 elf32-m32c.c:632 elf32-mep.c:534 elf32-metag.c:1998 -#: elf32-moxie.c:296 elf32-msp430.c:1366 elf32-mt.c:406 elf32-or1k.c:1767 -#: elf32-tilepro.c:3514 elf32-v850.c:2299 elf32-visium.c:689 -#: elf32-xstormy16.c:939 elf64-mmix.c:1549 elfxx-tilegx.c:3878 +#: elf32-avr.c:1516 elf32-bfin.c:3134 elf32-cris.c:2041 elf32-epiphany.c:573 +#: elf32-fr30.c:602 elf32-frv.c:4056 elf32-ft32.c:502 elf32-ip2k.c:1488 +#: elf32-iq2000.c:699 elf32-m32c.c:632 elf32-mep.c:534 elf32-metag.c:1994 +#: elf32-moxie.c:296 elf32-msp430.c:1375 elf32-mt.c:406 elf32-or1k.c:1825 +#: elf32-tilepro.c:3388 elf32-v850.c:2298 elf32-visium.c:688 +#: elf32-xstormy16.c:937 elf64-bpf.c:521 elf64-mmix.c:1549 elfxx-tilegx.c:3752 msgid "internal error: dangerous relocation" msgstr "erro interno: relocalização perigosa" -#: elf32-avr.c:3327 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:3126 +#: elf32-avr.c:3327 elfnn-aarch64.c:3221 #, c-format msgid "cannot create stub entry %s" msgstr "impossível criar entrada fictícia %s" -#: elf32-bfin.c:106 elf32-bfin.c:362 +#: elf32-bfin.c:107 elf32-bfin.c:363 msgid "relocation should be even number" msgstr "a relocalização deve ser número par" -#: elf32-bfin.c:1585 +#: elf32-bfin.c:1584 #, c-format msgid "%pB(%pA+%#): unresolvable relocation against symbol `%s'" msgstr "%pB(%pA+%#): relocalização insolúvel contra símbolo \"%s\"" -#: elf32-bfin.c:1617 elf32-i386.c:3449 elf32-m68k.c:3976 elf32-s390.c:3269 -#: elf64-s390.c:3219 elf64-x86-64.c:3896 +#: elf32-bfin.c:1616 elf32-i386.c:3443 elf32-m68k.c:4008 elf32-s390.c:3140 +#: elf64-s390.c:3089 elf64-x86-64.c:4112 #, c-format msgid "%pB(%pA+%#): reloc against `%s': error %d" msgstr "%pB(%pA+%#): reloc contra \"%s\": erro %d" -#: elf32-bfin.c:2638 +#: elf32-bfin.c:2641 #, c-format msgid "%pB: relocation at `%pA+%#' references symbol `%s' with nonzero addend" msgstr "%pB: relocalização em \"%pA+%#\" referencia o símbolo \"%s\" com adenda não-zero" -#: elf32-bfin.c:2655 +#: elf32-bfin.c:2658 msgid "relocation references symbol not defined in the module" msgstr "relocalização referencia símbolo ainda não definido no módulo" -#: elf32-bfin.c:2752 +#: elf32-bfin.c:2755 msgid "R_BFIN_FUNCDESC references dynamic symbol with nonzero addend" msgstr "R_BFIN_FUNCDESC referencia símbolo dinâmico com adenda não-zero" -#: elf32-bfin.c:2793 elf32-bfin.c:2916 +#: elf32-bfin.c:2795 elf32-bfin.c:2916 msgid "cannot emit fixups in read-only section" msgstr "impossível emitir fixups em secção só de leitura" -#: elf32-bfin.c:2824 elf32-bfin.c:2954 elf32-lm32.c:1049 elf32-sh.c:4511 +#: elf32-bfin.c:2825 elf32-bfin.c:2953 elf32-lm32.c:1006 elf32-sh.c:4389 msgid "cannot emit dynamic relocations in read-only section" msgstr "impossível emitir relocalizações dinâmicas em secção só de leitura" -#: elf32-bfin.c:2874 +#: elf32-bfin.c:2875 msgid "R_BFIN_FUNCDESC_VALUE references dynamic symbol with nonzero addend" msgstr "R_BFIN_FUNCDESC_VALUE referencia símbolo dinâmico com adenda não-zero" -#: elf32-bfin.c:3039 +#: elf32-bfin.c:3038 msgid "relocations between different segments are not supported" msgstr "relocalizações entre diferentes segmentos não são suportadas" -#: elf32-bfin.c:3040 +#: elf32-bfin.c:3039 msgid "warning: relocation references a different segment" msgstr "aviso: a relocalização referencia um segmento diferente" -#: elf32-bfin.c:4787 elf32-frv.c:6603 +#: elf32-bfin.c:4770 elf32-frv.c:6584 #, c-format msgid "%pB: cannot link non-fdpic object file into fdpic executable" msgstr "%pB: impossível ligar ficheiro objecto não-fdpic a executável fdpic" -#: elf32-bfin.c:4791 elf32-frv.c:6607 +#: elf32-bfin.c:4774 elf32-frv.c:6588 #, c-format msgid "%pB: cannot link fdpic object file into non-fdpic executable" msgstr "%pB: impossível ligar ficheiro objecto fdpic a executável não-fdpic" -#: elf32-bfin.c:4941 +#: elf32-bfin.c:4924 #, c-format msgid "*** check this relocation %s" msgstr "*** verificar esta relocalização %s" -#: elf32-bfin.c:5057 +#: elf32-bfin.c:5040 msgid "the bfin target does not currently support the generation of copy relocations" msgstr "o alvo bfin actualmente não suporta a geração de relocalizações de cópia" -#: elf32-bfin.c:5351 elf32-cr16.c:2803 elf32-m68k.c:4390 +#: elf32-bfin.c:5334 elf32-cr16.c:2731 elf32-m68k.c:4422 msgid "unsupported relocation type" msgstr "relocalização não suportada" @@ -2048,16 +2137,16 @@ msgstr "%pB, secção %pA: sem PLT para relocalização %s contra símbolo \"%s\"" #: elf32-cris.c:1193 elf32-cris.c:1326 elf32-cris.c:1591 elf32-cris.c:1674 -#: elf32-cris.c:1827 elf32-tic6x.c:2619 +#: elf32-cris.c:1827 elf32-tic6x.c:2560 msgid "[whose name is lost]" msgstr "8cujo nome está perdido]" -#: elf32-cris.c:1311 elf32-tic6x.c:2603 +#: elf32-cris.c:1311 elf32-tic6x.c:2544 #, c-format msgid "%pB, section %pA: relocation %s with non-zero addend % against local symbol" msgstr "%pB, secção %pA: relocalização %s com adenda não-zero % contra símbolo local" -#: elf32-cris.c:1320 elf32-cris.c:1668 elf32-cris.c:1821 elf32-tic6x.c:2612 +#: elf32-cris.c:1320 elf32-cris.c:1668 elf32-cris.c:1821 elf32-tic6x.c:2553 #, c-format msgid "%pB, section %pA: relocation %s with non-zero addend % against symbol `%s'" msgstr "%pB, secção %pA: relocalização %s com adenda não-zero % contra símbolo \"%s\"" @@ -2119,73 +2208,73 @@ "%pB, secção %pA:\n" " relocalização %s não deve ser usada em objecto partilhado; recompile com -fPIC" -#: elf32-cris.c:3747 +#: elf32-cris.c:3700 #, c-format msgid "%pB, section `%pA', to symbol `%s': relocation %s should not be used in a shared object; recompile with -fPIC" msgstr "" "%pB, secção %pA, para símbolo \"%s\":\n" " relocalização %s não deve ser usada em objecto partilhado; recompile com -fPIC" -#: elf32-cris.c:3860 +#: elf32-cris.c:3812 msgid "unexpected machine number" msgstr "Número de máquina inesperado" -#: elf32-cris.c:3911 +#: elf32-cris.c:3864 #, c-format msgid " [symbols have a _ prefix]" msgstr " [símbolos têm um prefixo _]" -#: elf32-cris.c:3914 +#: elf32-cris.c:3867 #, c-format msgid " [v10 and v32]" msgstr " [v10 e v32]" -#: elf32-cris.c:3917 +#: elf32-cris.c:3870 #, c-format msgid " [v32]" msgstr " [v32]" -#: elf32-cris.c:3961 +#: elf32-cris.c:3914 #, c-format msgid "%pB: uses _-prefixed symbols, but writing file with non-prefixed symbols" msgstr "%pB: usa símbolos prefixados com _, mas o ficheiro será escrito com símbolos sem prefixo" -#: elf32-cris.c:3962 +#: elf32-cris.c:3915 #, c-format msgid "%pB: uses non-prefixed symbols, but writing file with _-prefixed symbols" msgstr "%pB: usa símbolos sem prefixo, mas o ficheiro será escrito com símbolos prefixados com _" -#: elf32-cris.c:3981 +#: elf32-cris.c:3934 #, c-format msgid "%pB contains CRIS v32 code, incompatible with previous objects" msgstr "%pB contém código CRIS v32, incompatível com os objectos anteriores" -#: elf32-cris.c:3983 +#: elf32-cris.c:3936 #, c-format msgid "%pB contains non-CRIS-v32 code, incompatible with previous objects" msgstr "%pB contém código não-CRIS-v32, incompatível com os objectos anteriores" -#: elf32-csky.c:2066 +#: elf32-csky.c:2022 msgid "GOT table size out of range" msgstr "tamanho de tabela GOT fora do intervalo" -#: elf32-csky.c:2917 +#: elf32-csky.c:2802 #, c-format msgid "warning: unrecognized arch eflag '%#lx'" msgstr "aviso: eflag \"%#lx\" arch não reconhecida" -#: elf32-csky.c:2977 +#: elf32-csky.c:2862 #, c-format msgid "%pB: machine flag conflict with target" msgstr "%pB: conflito de bandeira de máquina com destino" -#: elf32-csky.c:2990 +#: elf32-csky.c:2875 #, c-format msgid "warning: file %pB's arch flag ck%s conflicts with target ck%s, using ck%s" msgstr "aviso: bandeira arch do ficheiro %pB ck%s em conflito com o destino ck%s, a usar ck%s" #. The r_type is error, not support it. -#: elf32-csky.c:4225 elf32-i386.c:351 +#: elf32-csky.c:4118 elf32-i386.c:350 #, c-format msgid "%pB: unsupported relocation type: %#x" msgstr "%pB: tipo de relocalização não suportado: %#x" @@ -2201,7 +2290,7 @@ msgstr "Erro de ligação BFD: salto (PC rel26) para secção (%s) não suportado" #. Only if it's not an unresolved symbol. -#: elf32-epiphany.c:573 elf32-ip2k.c:1489 +#: elf32-epiphany.c:569 elf32-ip2k.c:1484 msgid "unsupported relocation between data/insn address spaces" msgstr "relocalização não suportada entre dados/espaços de endereço insn" @@ -2209,96 +2298,96 @@ msgid "relocation requires zero addend" msgstr "relocalização requer adenda zero" -#: elf32-frv.c:2829 +#: elf32-frv.c:2832 #, c-format msgid "%H: relocation to `%s+%v' may have caused the error above\n" msgstr "%H: relocalização para \"%s+%v\" poderá ter causado o erro acima\n" -#: elf32-frv.c:2846 +#: elf32-frv.c:2849 msgid "%H: relocation references symbol not defined in the module\n" msgstr "%H: relocalização referencia símbolo não definido no módulo\n" -#: elf32-frv.c:2922 +#: elf32-frv.c:2925 msgid "%H: R_FRV_GETTLSOFF not applied to a call instruction\n" msgstr "%H: R_FRV_GETTLSOFF não aplicado a uma instrução call\n" -#: elf32-frv.c:2963 +#: elf32-frv.c:2966 msgid "%H: R_FRV_GOTTLSDESC12 not applied to an lddi instruction\n" msgstr "%H: R_FRV_GOTTLSDESC12 não aplicado a uma instrução lddi\n" -#: elf32-frv.c:3034 +#: elf32-frv.c:3037 msgid "%H: R_FRV_GOTTLSDESCHI not applied to a sethi instruction\n" msgstr "%H: R_FRV_GOTTLSDESCHI não aplicado a uma instrução sethi\n" -#: elf32-frv.c:3071 +#: elf32-frv.c:3074 msgid "%H: R_FRV_GOTTLSDESCLO not applied to a setlo or setlos instruction\n" msgstr "%H: R_FRV_GOTTLSDESCLO não aplicado a uma instrução setlo ou setlos\n" -#: elf32-frv.c:3118 +#: elf32-frv.c:3121 msgid "%H: R_FRV_TLSDESC_RELAX not applied to an ldd instruction\n" msgstr "%H: R_FRV_TLSDESC_RELAX não aplicado a uma instrução ldd\n" -#: elf32-frv.c:3202 +#: elf32-frv.c:3205 msgid "%H: R_FRV_GETTLSOFF_RELAX not applied to a calll instruction\n" msgstr "%H: R_FRV_GETTLSOFF_RELAX não aplicado a uma instrução calll\n" -#: elf32-frv.c:3256 +#: elf32-frv.c:3259 msgid "%H: R_FRV_GOTTLSOFF12 not applied to an ldi instruction\n" msgstr "%H: R_FRV_GOTTLSOFF12 não aplicado a uma instrução ldi\n" -#: elf32-frv.c:3286 +#: elf32-frv.c:3289 msgid "%H: R_FRV_GOTTLSOFFHI not applied to a sethi instruction\n" msgstr "%H: R_FRV_GOTTLSOFFHI não aplicado a uma instrução sethi\n" -#: elf32-frv.c:3315 +#: elf32-frv.c:3318 msgid "%H: R_FRV_GOTTLSOFFLO not applied to a setlo or setlos instruction\n" msgstr "%H: R_FRV_GOTTLSOFFLO não aplicado a uma instrução setlo ou setlos\n" -#: elf32-frv.c:3345 +#: elf32-frv.c:3348 msgid "%H: R_FRV_TLSOFF_RELAX not applied to an ld instruction\n" msgstr "%H: R_FRV_TLSOFF_RELAX não aplicado a uma instrução ld\n" -#: elf32-frv.c:3390 +#: elf32-frv.c:3393 msgid "%H: R_FRV_TLSMOFFHI not applied to a sethi instruction\n" msgstr "%H: R_FRV_TLSMOFFHI não aplicado a uma instrução sethi\n" -#: elf32-frv.c:3417 +#: elf32-frv.c:3420 msgid "R_FRV_TLSMOFFLO not applied to a setlo or setlos instruction\n" msgstr "R_FRV_TLSMOFFLO não aplicado a uma instrução setlo ou setlos\n" -#: elf32-frv.c:3538 elf32-frv.c:3660 +#: elf32-frv.c:3541 elf32-frv.c:3661 msgid "%H: %s references dynamic symbol with nonzero addend\n" msgstr "%H: R_FRV_FUNCDESC referencia símbolo dinâmico com adenda não zero\n" -#: elf32-frv.c:3580 elf32-frv.c:3703 +#: elf32-frv.c:3582 elf32-frv.c:3703 msgid "%H: cannot emit fixups in read-only section\n" msgstr "%H: impossível emitir fixups em secção só de leitura\n" -#: elf32-frv.c:3611 elf32-frv.c:3746 +#: elf32-frv.c:3612 elf32-frv.c:3745 msgid "%H: cannot emit dynamic relocations in read-only section\n" msgstr "%H: impossível emitir relocalizações dinâmicas em secção só de leitura\n" -#: elf32-frv.c:3918 +#: elf32-frv.c:3917 #, c-format msgid "%H: reloc against `%s' references a different segment\n" msgstr "%H: reloc contra \"%s\" referencia um segmento diferente\n" -#: elf32-frv.c:4069 +#: elf32-frv.c:4068 #, c-format msgid "%H: reloc against `%s': %s\n" msgstr "%H: reloc contra \"%s\": %s\n" -#: elf32-frv.c:6514 +#: elf32-frv.c:6495 #, c-format msgid "%pB: compiled with %s and linked with modules that use non-pic relocations" msgstr "%pB: compilado com %s e ligado com módulos que usam relocalizações não-pic" -#: elf32-frv.c:6568 elf32-iq2000.c:832 elf32-m32c.c:876 +#: elf32-frv.c:6549 elf32-iq2000.c:830 elf32-m32c.c:876 #, c-format msgid "%pB: compiled with %s and linked with modules compiled with %s" msgstr "%pB: compilado com %s e ligado com módulos compilados com %s" -#: elf32-frv.c:6581 +#: elf32-frv.c:6562 #, c-format msgid "%pB: uses different unknown e_flags (%#x) fields than previous modules (%#x)" msgstr "%pB: usa campos e_flags (%#x) desconhecidos diferentes dos módulos anteriores (%#x)" @@ -2308,137 +2397,140 @@ msgid "%pB: relocations in generic ELF (EM: %d)" msgstr "%pB: relocalizações em ELF (EM: %d) genérico" -#: elf32-hppa.c:834 elf32-hppa.c:3511 +#: elf32-hppa.c:763 elf32-hppa.c:844 elf64-ppc.c:11859 +msgid "%F%P: Could not assign %pA to an output section. Retry without --enable-non-contiguous-regions.\n" +msgstr "%F%P: impossível atribuir \"%pA\" a uma secção de saída. Repita sem --enable-non-contiguous-regions.\n" + +#: elf32-hppa.c:865 elf32-hppa.c:3407 #, c-format msgid "%pB(%pA+%#): cannot reach %s, recompile with -ffunction-sections" msgstr "%pB(%pA+%#): impossível atingir %s, recompile com -ffunction-sections" -#: elf32-hppa.c:1248 +#: elf32-hppa.c:1243 #, c-format msgid "%pB: relocation %s can not be used when making a shared object; recompile with -fPIC" msgstr "%pB: relocalização %s não pode ser usada ao fazer um objecto partilhado; recompile com -fPIC" -#: elf32-hppa.c:2688 +#: elf32-hppa.c:2584 #, c-format msgid "%pB: duplicate export stub %s" msgstr "%pB: fictício de exportação duplicado %s" -#: elf32-hppa.c:3344 +#: elf32-hppa.c:3240 #, c-format msgid "%pB(%pA+%#): %s fixup for insn %#x is not supported in a non-shared link" msgstr "%pB(%pA+%#): %s fixup para insn %#x não é suportado em ligação não partilhada" -#: elf32-hppa.c:4140 +#: elf32-hppa.c:4036 #, c-format msgid "%s has both normal and TLS relocs" msgstr "%s tem relocs normal e TLS em simultâneo" -#: elf32-hppa.c:4158 +#: elf32-hppa.c:4054 #, c-format msgid "%pB:%s has both normal and TLS relocs" msgstr "%pB:%s tem relocs normal e TLS em simultâneo" -#: elf32-hppa.c:4217 +#: elf32-hppa.c:4113 #, c-format msgid "%pB(%pA+%#): cannot handle %s for %s" msgstr "%pB(%pA+%#): impossível gerir %s para %s" -#: elf32-hppa.c:4521 +#: elf32-hppa.c:4417 msgid ".got section not immediately after .plt section" msgstr "secção .got não imediatamente após secção .plt" -#: elf32-i386.c:1178 elf64-x86-64.c:1377 +#: elf32-i386.c:1169 elf64-x86-64.c:1382 #, c-format msgid "%pB: TLS transition from %s to %s against `%s' at %# in section `%pA' failed" msgstr "%pB: transição TLS de %s para %s contra \"%s\" em %# na secção \"%pA\" falhou" -#: elf32-i386.c:1269 +#: elf32-i386.c:1272 #, c-format msgid "%pB: direct GOT relocation R_386_GOT32X against `%s' without base register can not be used when making a shared object" msgstr "%pB: relocalização GOT directa R_386_GOT32X contra \"%s\" sem registo-base não pode ser usada ao fazer um objecto partilhado" -#: elf32-i386.c:1726 elf32-s390.c:1188 elf32-sh.c:5662 elf32-tilepro.c:1592 -#: elf32-xtensa.c:1203 elf64-s390.c:1120 elfxx-sparc.c:1591 -#: elfxx-tilegx.c:1805 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:451 +#: elf32-i386.c:1721 elf32-s390.c:1153 elf32-sh.c:5494 elf32-tilepro.c:1556 +#: elf32-xtensa.c:1265 elf64-s390.c:1085 elfxx-sparc.c:1555 +#: elfxx-tilegx.c:1769 elfnn-riscv.c:437 #, c-format msgid "%pB: `%s' accessed both as normal and thread local symbol" msgstr "%pB: \"%s\" acedido como símbolo local normal e thread em simultâneo" -#: elf32-i386.c:1798 +#: elf32-i386.c:1793 #, c-format msgid "%pB: unsupported non-PIC call to IFUNC `%s'" msgstr "%pB: chamada não-PIC a IFUNC \"%s\" não suportada" -#: elf32-i386.c:2379 elf64-x86-64.c:2670 +#: elf32-i386.c:2373 elf64-x86-64.c:2721 #, c-format msgid "%pB: relocation %s against STT_GNU_IFUNC symbol `%s' isn't supported" msgstr "%pB: relocalização %s contra STT_GNU_IFUNC símbolo \"%s\" não suportada" -#: elf32-i386.c:2412 elf32-i386.c:3660 elf32-i386.c:3801 elf64-x86-64.c:2727 -#: elf64-x86-64.c:4069 elf64-x86-64.c:4225 +#: elf32-i386.c:2406 elf32-i386.c:3654 elf32-i386.c:3795 elf64-x86-64.c:2778 +#: elf64-x86-64.c:4285 elf64-x86-64.c:4441 #, c-format msgid "Local IFUNC function `%s' in %pB\n" msgstr "Função IFUNC local \"%s\" em %pB\n" -#: elf32-i386.c:2569 +#: elf32-i386.c:2563 #, c-format msgid "%pB: direct GOT relocation %s against `%s' without base register can not be used when making a shared object" msgstr "%pB: relocalização GOT directa %s contra \"%s\" sem registo-base não pode ser usada ao fazer um objecto partilhado" -#: elf32-i386.c:2604 elf64-x86-64.c:2919 +#: elf32-i386.c:2598 elf64-x86-64.c:2977 msgid "hidden symbol" msgstr "símbolo oculto" -#: elf32-i386.c:2607 elf64-x86-64.c:2922 +#: elf32-i386.c:2601 elf64-x86-64.c:2980 msgid "internal symbol" msgstr "símbolo interno" -#: elf32-i386.c:2610 elf64-x86-64.c:2925 +#: elf32-i386.c:2604 elf64-x86-64.c:2983 msgid "protected symbol" msgstr "símbolo protegido" -#: elf32-i386.c:2613 elf64-x86-64.c:2928 +#: elf32-i386.c:2607 elf64-x86-64.c:2986 msgid "symbol" msgstr "símbolo" -#: elf32-i386.c:2619 +#: elf32-i386.c:2613 #, c-format msgid "%pB: relocation R_386_GOTOFF against undefined %s `%s' can not be used when making a shared object" msgstr "%pB: relocalização R_386_GOTOFF contra %s \"%s\" indefinido não pode ser usada ao fazer um objecto partilhado" -#: elf32-i386.c:2632 +#: elf32-i386.c:2626 #, c-format msgid "%pB: relocation R_386_GOTOFF against protected %s `%s' can not be used when making a shared object" msgstr "%pB: relocalização R_386_GOTOFF contra %s \"%s\" protegido não pode ser usada ao fazer um objecto partilhado" -#: elf32-ip2k.c:856 elf32-ip2k.c:862 elf32-ip2k.c:929 elf32-ip2k.c:935 +#: elf32-ip2k.c:855 elf32-ip2k.c:861 elf32-ip2k.c:928 elf32-ip2k.c:934 msgid "ip2k relaxer: switch table without complete matching relocation information." msgstr "ip2k relaxer: tabela de troca sem informação completa de comparação de relocalização." -#: elf32-ip2k.c:879 elf32-ip2k.c:962 +#: elf32-ip2k.c:878 elf32-ip2k.c:961 msgid "ip2k relaxer: switch table header corrupt." msgstr "ip2k relaxer: cabeçalho da tabela de troca corrompido." -#: elf32-ip2k.c:1302 +#: elf32-ip2k.c:1297 #, c-format msgid "ip2k linker: missing page instruction at %# (dest = %#)" msgstr "ip2k linker: página de instrução em falta em %# (dest = %#)" -#: elf32-ip2k.c:1321 +#: elf32-ip2k.c:1316 #, c-format msgid "ip2k linker: redundant page instruction at %# (dest = %#)" msgstr "ip2k linker: página de instrução redundante em %# (dest = %#)" -#: elf32-lm32.c:651 elf32-nios2.c:3141 +#: elf32-lm32.c:608 elf32-nios2.c:3148 msgid "global pointer relative relocation when _gp not defined" msgstr "relocalização relativa de ponteiro global com _gp não definido" -#: elf32-lm32.c:706 elf32-nios2.c:3578 +#: elf32-lm32.c:663 elf32-nios2.c:3585 msgid "global pointer relative address out of range" msgstr "endereço relativo de ponteiro global fora do intervalo" -#: elf32-lm32.c:1002 +#: elf32-lm32.c:959 #, c-format msgid "internal error: addend should be zero for %s" msgstr "erro interno: adenda devia ser zero para %s" @@ -2447,136 +2539,141 @@ msgid "SDA relocation when _SDA_BASE_ not defined" msgstr "relocalização SDA com _SDA_BASE_ não definido" -#: elf32-m32r.c:2984 elf32-microblaze.c:1101 elf32-microblaze.c:1149 +#: elf32-m32r.c:2799 elf32-microblaze.c:1097 elf32-microblaze.c:1145 #, c-format msgid "%pB: the target (%s) of an %s relocation is in the wrong section (%pA)" msgstr "%pB: o alvo (%s) de uma relocalização %s está na secção errada (%pA)" -#: elf32-m32r.c:3487 +#: elf32-m32r.c:3302 #, c-format msgid "%pB: instruction set mismatch with previous modules" msgstr "%pB: conjunto de instruções trocado com os módulos anteriores" -#: elf32-m32r.c:3508 elf32-nds32.c:6992 +#: elf32-m32r.c:3323 elf32-nds32.c:6855 #, c-format msgid "private flags = %lx" msgstr "bandeiras privadas = %lx" -#: elf32-m32r.c:3513 +#: elf32-m32r.c:3328 #, c-format msgid ": m32r instructions" msgstr ": instruções m32r" -#: elf32-m32r.c:3514 +#: elf32-m32r.c:3329 #, c-format msgid ": m32rx instructions" msgstr ": instruções m32rx" -#: elf32-m32r.c:3515 +#: elf32-m32r.c:3330 #, c-format msgid ": m32r2 instructions" msgstr ": instruções m32r2" -#: elf32-m68hc1x.c:1116 +#: elf32-m68hc1x.c:1136 #, c-format msgid "reference to the far symbol `%s' using a wrong relocation may result in incorrect execution" msgstr "Referência ao símbolo distante \"%s\" com uma relocalização errada pode resultar em execução incorrecta" -#: elf32-m68hc1x.c:1150 +#: elf32-m68hc1x.c:1167 #, c-format msgid "XGATE address (%lx) is not within shared RAM(0xE000-0xFFFF), therefore you must manually offset the address, and possibly manage the page, in your code." msgstr "O endereço XGATE (%lx) não está dentro de RAM(0xE000-0xFFFF) partilhado, deve desviar manualmente o endereço e, possivelmente gerir a página, no seu código." -#: elf32-m68hc1x.c:1168 +#: elf32-m68hc1x.c:1183 #, c-format msgid "banked address [%lx:%04lx] (%lx) is not in the same bank as current banked address [%lx:%04lx] (%lx)" msgstr "endereço de banco [%lx:%04lx] (%lx) não está no mesmo banco que o endereço actual [%lx:%04lx] (%lx)" -#: elf32-m68hc1x.c:1184 +#: elf32-m68hc1x.c:1198 #, c-format msgid "reference to a banked address [%lx:%04lx] in the normal address space at %04lx" msgstr "referência a um endereço de banco [%lx:%04lx] no espaço de endereço normal em %04lx" -#: elf32-m68hc1x.c:1225 +#: elf32-m68hc1x.c:1234 #, c-format msgid "S12 address (%lx) is not within shared RAM(0x2000-0x4000), therefore you must manually offset the address in your code" msgstr "endereço S12 (%lx) não está dentro de RAM(0x2000-0x4000) partilhado, deve desviar manualmente o endereço no seu código" -#: elf32-m68hc1x.c:1352 +#: elf32-m68hc1x.c:1358 #, c-format msgid "%pB: linking files compiled for 16-bit integers (-mshort) and others for 32-bit integers" msgstr "%pB: a ligar ficheiros compilados para inteiros de 16-bit (-mshort) e outros para inteiros de 32-bit" -#: elf32-m68hc1x.c:1359 +#: elf32-m68hc1x.c:1365 #, c-format msgid "%pB: linking files compiled for 32-bit double (-fshort-double) and others for 64-bit double" msgstr "%pB: a ligar ficheiros compilados para duplos de 32-bit (-fshort-double) e outros para duplos de 64-bit" -#: elf32-m68hc1x.c:1368 +#: elf32-m68hc1x.c:1374 #, c-format msgid "%pB: linking files compiled for HCS12 with others compiled for HC12" msgstr "%pB: a ligar ficheiros compilados para HCS12 com outros compilados para HC12" -#: elf32-m68hc1x.c:1413 elf32-xgate.c:497 +#: elf32-m68hc1x.c:1419 elf32-xgate.c:497 #, c-format msgid "[abi=32-bit int, " msgstr "[abi=32-bit int, " -#: elf32-m68hc1x.c:1415 elf32-xgate.c:499 +#: elf32-m68hc1x.c:1421 elf32-xgate.c:499 #, c-format msgid "[abi=16-bit int, " msgstr "[abi=16-bit int, " -#: elf32-m68hc1x.c:1418 elf32-xgate.c:502 +#: elf32-m68hc1x.c:1424 elf32-xgate.c:502 #, c-format msgid "64-bit double, " msgstr "64-bit duplo, " -#: elf32-m68hc1x.c:1420 elf32-xgate.c:504 +#: elf32-m68hc1x.c:1426 elf32-xgate.c:504 #, c-format msgid "32-bit double, " msgstr "32-bit duplo, " -#: elf32-m68hc1x.c:1423 +#: elf32-m68hc1x.c:1429 #, c-format msgid "cpu=HC11]" msgstr "cpu=HC11]" -#: elf32-m68hc1x.c:1425 +#: elf32-m68hc1x.c:1431 #, c-format msgid "cpu=HCS12]" msgstr "cpu=HCS12]" -#: elf32-m68hc1x.c:1427 +#: elf32-m68hc1x.c:1433 #, c-format msgid "cpu=HC12]" msgstr "cpu=HC12]" -#: elf32-m68hc1x.c:1430 +#: elf32-m68hc1x.c:1436 #, c-format msgid " [memory=bank-model]" msgstr " [memória=bank-model]" -#: elf32-m68hc1x.c:1432 +#: elf32-m68hc1x.c:1438 #, c-format msgid " [memory=flat]" msgstr " [memória=flat]" -#: elf32-m68hc1x.c:1435 +#: elf32-m68hc1x.c:1441 #, c-format msgid " [XGATE RAM offsetting]" msgstr " [desvio XGATE RAM]" -#: elf32-m68k.c:1216 elf32-m68k.c:1217 vms-alpha.c:7484 vms-alpha.c:7500 +#: elf32-m68k.c:1159 elf32-m68k.c:1167 elf32-ppc.c:3583 elf32-ppc.c:3591 +#, c-format +msgid "%pB uses hard float, %pB uses soft float" +msgstr "%pB usa vírgula rígida, %pB usa vírgula suave" + +#: elf32-m68k.c:1282 elf32-m68k.c:1283 vms-alpha.c:7664 vms-alpha.c:7680 msgid "unknown" msgstr "desconhecido" -#: elf32-m68k.c:1660 +#: elf32-m68k.c:1733 #, c-format msgid "%pB: GOT overflow: number of relocations with 8-bit offset > %d" msgstr "%pB: transporte GOT: número de relocalizações com desvio 8-bit > %d" -#: elf32-m68k.c:1667 +#: elf32-m68k.c:1740 #, c-format msgid "%pB: GOT overflow: number of relocations with 8- or 16-bit offset > %d" msgstr "%pB: transporte GOT: número de relocalizações com desvio 8- ou 16-bit > %d" @@ -2607,18 +2704,18 @@ msgid "private flags = 0x%lx" msgstr "bandeiras privadas = 0x%lx" -#: elf32-metag.c:1863 +#: elf32-metag.c:1859 #, c-format msgid "%pB(%pA): multiple TLS models are not supported" msgstr "%pB(%pA): múltiplos modelos TLS não são suportados" -#: elf32-metag.c:1866 +#: elf32-metag.c:1862 #, c-format msgid "%pB(%pA): shared library symbol %s encountered whilst performing a static link" msgstr "%pB(%pA): encontrado símbolo de biblioteca partilhada %s ao realizar ligação estática" -#: elf32-microblaze.c:1544 elf32-tilepro.c:3155 elfxx-sparc.c:3538 -#: elfxx-tilegx.c:3543 +#: elf32-microblaze.c:1540 elf32-tilepro.c:3029 elfxx-sparc.c:3427 +#: elfxx-tilegx.c:3417 #, c-format msgid "%pB: probably compiled without -fPIC?" msgstr "%pB: provavelmente compilado com -fPIC?" @@ -2632,320 +2729,315 @@ msgid "32bits gp relative relocation occurs for an external symbol" msgstr "relocalização relativa 32bits gp ocorre para um símbolo externo" -#: elf32-msp430.c:837 elf32-msp430.c:1151 +#: elf32-msp430.c:846 elf32-msp430.c:1160 msgid "try enabling relaxation to avoid relocation truncations" msgstr "Tente activar relaxe para evitar truncamentos nas relocalizações" -#: elf32-msp430.c:1358 +#: elf32-msp430.c:1367 msgid "internal error: branch/jump to an odd address detected" msgstr "erro interno: detectado ramo/salto para um endereço ímpar" -#: elf32-msp430.c:2357 +#: elf32-msp430.c:2532 #, c-format msgid "warning: %pB: unknown MSPABI object attribute %d" msgstr "Aviso: %pB: atributo de objecto MSABI %d desconhecido" -#: elf32-msp430.c:2456 +#: elf32-msp430.c:2633 #, c-format msgid "error: %pB uses %s instructions but %pB uses %s" msgstr "erro: %pB usa instruções %s mas %pB usa %s" -#: elf32-msp430.c:2468 +#: elf32-msp430.c:2645 #, c-format msgid "error: %pB uses the %s code model whereas %pB uses the %s code model" msgstr "erro: %pB usa o modelo de código %s enquanto %pB usa o modelo de código %s" -#: elf32-msp430.c:2480 +#: elf32-msp430.c:2658 #, c-format msgid "error: %pB uses the large code model but %pB uses MSP430 instructions" msgstr "erro: %pB usa o modelo de código grande mas %pB usa instruções MSP430" -#: elf32-msp430.c:2491 +#: elf32-msp430.c:2669 #, c-format msgid "error: %pB uses the %s data model whereas %pB uses the %s data model" msgstr "erro: %pB usa o modelo de dados %s enquanto %pB usa o modelo de dados %s" -#: elf32-msp430.c:2503 +#: elf32-msp430.c:2682 #, c-format msgid "error: %pB uses the small code model but %pB uses the %s data model" msgstr "erro: %pB usa o modelo de código pequeno mas %pB usa o modelo de dados %s" -#: elf32-msp430.c:2515 +#: elf32-msp430.c:2694 #, c-format msgid "error: %pB uses the %s data model but %pB only uses MSP430 instructions" msgstr "erro: %pB usa o modelo de dados %s mas %pB só usa instruções MSP430" -#: elf32-nds32.c:3624 +#: elf32-msp430.c:2719 #, c-format -msgid "error: can't find symbol: %s" -msgstr "erro: impossível encontrar símbolo: %s." +msgid "error: %pB can use the upper region for data, but %pB assumes data is exclusively in lower memory" +msgstr "erro: %pB pode usar a região superior para dados, mas %pB assume que os dados estão exclusivamente na memória inferior" -#: elf32-nds32.c:5639 +#: elf32-nds32.c:3625 #, c-format -msgid "%pB: relocation %s against `%s' can not be used whenmaking a shared object; recompile with -fPIC" -msgstr "%pB: relocalização %s contra \"%s\" não pode ser usada ao fazer um objecto partilhado; recompile com -fPIC" +msgid "error: can't find symbol: %s" +msgstr "erro: impossível encontrar símbolo: %s." -#: elf32-nds32.c:5669 +#: elf32-nds32.c:5528 #, c-format msgid "%pB: warning: %s unsupported in shared mode" msgstr "%pB: aviso: %s não suportado em modo partilhado" -#: elf32-nds32.c:5795 +#: elf32-nds32.c:5654 #, c-format msgid "%pB: warning: unaligned access to GOT entry" msgstr "%pB: aviso: acesso não alinhado a entrada GOT." -#: elf32-nds32.c:5836 +#: elf32-nds32.c:5695 #, c-format msgid "%pB: warning: relocate SDA_BASE failed" msgstr "%pB: aviso: falha ao relocalizar SDA_BASE." -#: elf32-nds32.c:5858 +#: elf32-nds32.c:5717 #, c-format msgid "%pB(%pA): warning: unaligned small data access of type %d" msgstr "%pB(%pA): aviso: acesso não alinhado a dados pequenos de tipo %d." -#: elf32-nds32.c:6784 +#: elf32-nds32.c:6643 #, c-format msgid "%pB: ISR vector size mismatch with previous modules, previous %u-byte, current %u-byte" msgstr "%pB: tamanho do vector ISR trocado com módulos anteriores, anterior %u-byte, actual %u-byte" -#: elf32-nds32.c:6828 +#: elf32-nds32.c:6691 #, c-format msgid "%pB: warning: endian mismatch with previous modules" msgstr "%pB: aviso: Endian trocado com módulos anteriores." -#: elf32-nds32.c:6842 +#: elf32-nds32.c:6705 #, c-format msgid "%pB: warning: older version of object file encountered, please recompile with current tool chain" msgstr "%pB: aviso: encontradas versões anteriores do ficheiro objecto, recompile com as ferramentas actuais." -#: elf32-nds32.c:6930 +#: elf32-nds32.c:6793 #, c-format msgid "%pB: error: ABI mismatch with previous modules" msgstr "%pB: erro: ABI trocado com módulos anteriores." -#: elf32-nds32.c:6940 +#: elf32-nds32.c:6803 #, c-format msgid "%pB: error: instruction set mismatch with previous modules" msgstr "%pB: erro: conjunto de instruções trocado com módulos anteriores." -#: elf32-nds32.c:6967 +#: elf32-nds32.c:6830 #, c-format msgid "%pB: warning: incompatible elf-versions %s and %s" msgstr "%pB: aviso: versões elf %s e %s incompatíveis." -#: elf32-nds32.c:6998 +#: elf32-nds32.c:6861 #, c-format msgid ": n1 instructions" msgstr ": instruções n1" -#: elf32-nds32.c:7001 +#: elf32-nds32.c:6864 #, c-format msgid ": n1h instructions" msgstr ": instruções n1h" -#: elf32-nds32.c:9462 +#: elf32-nds32.c:9316 #, c-format msgid "%pB: error: search_nds32_elf_blank reports wrong node" msgstr "%pB: erro: search_nds32_elf_blank reporta nó errado" -#: elf32-nds32.c:9722 +#: elf32-nds32.c:9576 #, c-format msgid "%pB: warning: %s points to unrecognized reloc at %#" msgstr "%pB: aviso: %s aponta para reloc não reconhecida em %#" -#: elf32-nds32.c:12975 +#: elf32-nds32.c:12839 #, c-format msgid "%pB: nested OMIT_FP in %pA" msgstr "%pB: OMIT_FP aninhado em %pA." -#: elf32-nds32.c:12994 +#: elf32-nds32.c:12858 #, c-format msgid "%pB: unmatched OMIT_FP in %pA" msgstr "%pB: OMIT_FP desirmanado em %pA." -#: elf32-nds32.c:13275 reloc.c:8410 +#: elf32-nds32.c:13140 reloc.c:8470 #, c-format msgid "%X%P: %pB(%pA): relocation \"%pR\" goes out of range\n" msgstr "%X%P: %pB(%pA): relocalização \"%R\" sai fora do intervalo\n" -#: elf32-nios2.c:2930 +#: elf32-nios2.c:2937 #, c-format msgid "error: %pB: big-endian R2 is not supported" msgstr "erro: %pB: Big-endian R2 não é suportado." -#: elf32-nios2.c:3822 +#: elf32-nios2.c:3829 #, c-format -msgid "global pointer relative relocation at address 0x%08x when _gp not defined\n" -msgstr "relocalização relativa de ponteiro global no endereço 0x%08x com _gp não definido\n" +msgid "global pointer relative relocation at address %# when _gp not defined\n" +msgstr "relocalização relativa de ponteiro global no endereço %# com _gp não definido\n" -#: elf32-nios2.c:3842 +#: elf32-nios2.c:3859 #, c-format -msgid "unable to reach %s (at 0x%08x) from the global pointer (at 0x%08x) because the offset (%d) is out of the allowed range, -32678 to 32767\n" -msgstr "Impossível atingir %s (at 0x%08x) do ponteiro global (em 0x%08x) porque o desvio (%d) está fora do intervalo permitido, -32678 a 32767.\n" +msgid "unable to reach %s (at %#) from the global pointer (at %#) because the offset (%) is out of the allowed range, -32678 to 32767\n" +msgstr "Impossível atingir %s (em %#) do ponteiro global (em %#) porque o desvio (%) está fora do intervalo permitido, -32678 a 32767.\n" -#: elf32-nios2.c:4495 elf32-pru.c:928 +#: elf32-nios2.c:4514 elf32-pru.c:931 msgid "relocation out of range" msgstr "relocalização fora do intervalo" -#: elf32-nios2.c:4505 elf32-pru.c:938 elf32-tic6x.c:2716 +#: elf32-nios2.c:4524 elf32-pru.c:941 elf32-tic6x.c:2657 msgid "dangerous relocation" msgstr "relocalização perigosa" -#: elf32-nios2.c:5378 +#: elf32-nios2.c:5367 #, c-format msgid "dynamic variable `%s' is zero size" msgstr "variável dinâmica \"%s\" tem tamanho zero" -#: elf32-or1k.c:1177 +#: elf32-or1k.c:1210 #, c-format msgid "%pB: Cannot handle relocation value size of %d" msgstr "%pB: impossível gerir valor de tamanho de relocalização de %d" -#: elf32-or1k.c:1286 +#: elf32-or1k.c:1317 #, c-format msgid "%pB: unknown relocation type %d" msgstr "%pB: tipo de relocalização %d desconhecido" -#: elf32-or1k.c:1340 +#: elf32-or1k.c:1371 #, c-format msgid "%pB: addend should be zero for plt relocations" msgstr "%pB: adenda devia ser zero para relocalizações plt" -#: elf32-or1k.c:1445 +#: elf32-or1k.c:1476 #, c-format msgid "%pB: addend should be zero for got relocations" msgstr "%pB: adenda devia ser zero para relocalizações got" -#: elf32-or1k.c:1462 +#: elf32-or1k.c:1493 #, c-format msgid "%pB: gotoff relocation against dynamic symbol %s" msgstr "%pB: relocalização gotoff contra símbolo dinâmico %s" -#: elf32-or1k.c:1479 elf64-alpha.c:4455 elf64-alpha.c:4599 +#: elf32-or1k.c:1510 elf64-alpha.c:4421 elf64-alpha.c:4565 #, c-format msgid "%pB: pc-relative relocation against dynamic symbol %s" msgstr "%pB: relocalização pc-relative contra símbolo dinâmico %s" -#: elf32-or1k.c:1493 +#: elf32-or1k.c:1524 #, c-format msgid "%pB: non-pic relocation against symbol %s" msgstr "%pB: relocalização não-pic contra símbolo %s" -#: elf32-or1k.c:1577 +#: elf32-or1k.c:1608 #, c-format msgid "%pB: support for local dynamic not implemented" msgstr "%pB: suporte a dinâmica local não implementado" -#: elf32-or1k.c:1729 +#: elf32-or1k.c:1787 #, c-format msgid "%pB: will not resolve runtime TLS relocation" msgstr "%pB: não resolve relocalização TLS em tempo de execução" -#: elf32-or1k.c:2074 +#: elf32-or1k.c:2120 #, c-format msgid "%pB: bad relocation section name `%s'" msgstr "%pB: mau nome de secção de relocalização \"%s\"" -#: elf32-or1k.c:3218 +#: elf32-or1k.c:3181 #, c-format msgid "%pB: %s flag mismatch with previous modules" msgstr "%pB: bandeira %strocada com módulos anteriores" -#: elf32-ppc.c:986 +#: elf32-ppc.c:989 #, c-format msgid "generic linker can't handle %s" msgstr "linker genérico não pode gerir %s" -#: elf32-ppc.c:1617 +#: elf32-ppc.c:1628 #, c-format msgid "corrupt %s section in %pB" msgstr "secção %s corrupta em %pB" -#: elf32-ppc.c:1637 +#: elf32-ppc.c:1647 #, c-format msgid "unable to read in %s section from %pB" msgstr "impossível ler na secção %s de %pB" -#: elf32-ppc.c:1679 +#: elf32-ppc.c:1689 #, c-format msgid "warning: unable to set size of %s section in %pB" msgstr "aviso: impossível definir tamanho da secção %s em %pB" -#: elf32-ppc.c:1729 +#: elf32-ppc.c:1738 msgid "failed to allocate space for new APUinfo section" msgstr "falha ao alocar espaço para nova secção APUinfo." -#: elf32-ppc.c:1748 +#: elf32-ppc.c:1757 msgid "failed to compute new APUinfo section" msgstr "falha ao computar nova secção APUinfo." -#: elf32-ppc.c:1751 +#: elf32-ppc.c:1760 msgid "failed to install new APUinfo section" msgstr "falha ao instalar nova secção APUinfo." -#: elf32-ppc.c:2853 +#: elf32-ppc.c:2861 #, c-format msgid "%pB: relocation %s cannot be used when making a shared object" msgstr "%pB: relocalização %s não pode ser usada ao fazer objecto partilhado" -#: elf32-ppc.c:3587 elf32-ppc.c:3595 -#, c-format -msgid "%pB uses hard float, %pB uses soft float" -msgstr "%pB usa vírgula rígida, %pB usa vírgula suave" - -#: elf32-ppc.c:3603 elf32-ppc.c:3611 +#: elf32-ppc.c:3599 elf32-ppc.c:3607 #, c-format msgid "%pB uses double-precision hard float, %pB uses single-precision hard float" msgstr "%pB usa vírgula rígida de precisão dupla, %pB usa vírgula rígida de precisão simples" -#: elf32-ppc.c:3630 elf32-ppc.c:3638 +#: elf32-ppc.c:3629 elf32-ppc.c:3637 #, c-format msgid "%pB uses 64-bit long double, %pB uses 128-bit long double" msgstr "%pB usa 64-bit long double, %pB usa 128-bit long double" -#: elf32-ppc.c:3646 elf32-ppc.c:3654 +#: elf32-ppc.c:3645 elf32-ppc.c:3653 #, c-format msgid "%pB uses IBM long double, %pB uses IEEE long double" msgstr "%pB usa IBM long double, %pB usa IEEE long double" -#: elf32-ppc.c:3721 elf32-ppc.c:3730 +#: elf32-ppc.c:3720 elf32-ppc.c:3729 #, c-format msgid "%pB uses AltiVec vector ABI, %pB uses SPE vector ABI" msgstr "%pB usa AltiVec vector ABI, %pB usa SPE vector ABI" -#: elf32-ppc.c:3759 elf32-ppc.c:3768 +#: elf32-ppc.c:3758 elf32-ppc.c:3767 #, c-format msgid "%pB uses r3/r4 for small structure returns, %pB uses memory" msgstr "%pB usa r3/r4 para pequenas devoluções de estrutura, %pB usa a memória" -#: elf32-ppc.c:3829 +#: elf32-ppc.c:3831 #, c-format msgid "%pB: compiled with -mrelocatable and linked with modules compiled normally" msgstr "%pB: compilado com -mrelocatable e ligado com módulos compilados normalmente" -#: elf32-ppc.c:3837 +#: elf32-ppc.c:3839 #, c-format msgid "%pB: compiled normally and linked with modules compiled with -mrelocatable" msgstr "%pB: compilado normalmente e ligado com módulos compilados com -mrelocatable" -#: elf32-ppc.c:3906 +#: elf32-ppc.c:3908 #, c-format msgid "%pB(%pA+0x%lx): expected 16A style relocation on 0x%08x insn" msgstr "%pB(%pA+0x%lx): esperada relocalização estilo 16A em 0x%08x insn" -#: elf32-ppc.c:3925 +#: elf32-ppc.c:3927 #, c-format msgid "%pB(%pA+0x%lx): expected 16D style relocation on 0x%08x insn" msgstr "%pB(%pA+0x%lx): esperada relocalização estilo 16D em 0x%08x insn" -#: elf32-ppc.c:4028 +#: elf32-ppc.c:4030 #, c-format msgid "bss-plt forced due to %pB" msgstr "bss-plt forçado devido a %pB" -#: elf32-ppc.c:4030 +#: elf32-ppc.c:4032 msgid "bss-plt forced by profiling" msgstr "bss-plt forçado pelo perfil" @@ -2953,40 +3045,40 @@ #. could just mark this symbol to exclude it #. from tls optimization but it's safer to skip #. the entire optimization. -#: elf32-ppc.c:4606 elf64-ppc.c:7724 +#: elf32-ppc.c:4606 elf64-ppc.c:8252 #, c-format msgid "%H arg lost __tls_get_addr, TLS optimization disabled\n" msgstr "argumento %H perdeu __tls_get_addr, optimização TLS desactivada\n" -#: elf32-ppc.c:5577 elf32-sh.c:3078 elf32-tilepro.c:2339 elfxx-sparc.c:2534 -#: elfxx-tilegx.c:2579 +#: elf32-ppc.c:5513 elf32-sh.c:3023 elf32-tilepro.c:2256 elfxx-sparc.c:2453 +#: elfxx-tilegx.c:2496 #, c-format msgid "%pB: dynamic relocation in read-only section `%pA'\n" msgstr "%pB: relocalização dinâmica em secção \"%pA\" só de leitura\n" -#: elf32-ppc.c:7457 +#: elf32-ppc.c:7356 msgid "%P: %H: error: %s with unexpected instruction %x\n" msgstr "%P: %H: erro: %s com instrução inesperada %x\n" -#: elf32-ppc.c:7494 +#: elf32-ppc.c:7393 msgid "%H: fixup branch overflow\n" msgstr "%H: transporte em ramo fixup\n" -#: elf32-ppc.c:7534 elf32-ppc.c:7570 +#: elf32-ppc.c:7433 elf32-ppc.c:7469 #, c-format msgid "%pB(%pA+%#): error: %s with unexpected instruction %#x" msgstr "%pB(%pA+%#): erro: %s com instrução inesperada %#x" -#: elf32-ppc.c:7634 +#: elf32-ppc.c:7533 #, c-format msgid "%X%H: unsupported bss-plt -fPIC ifunc %s\n" msgstr "%X%H: bss-plt -fPIC ifunc %s não suportada\n" -#: elf32-ppc.c:7673 elf64-ppc.c:15220 +#: elf32-ppc.c:7572 elf64-ppc.c:16848 msgid "%H: warning: %s unexpected insn %#x.\n" msgstr "%H: aviso: %s insn %#x inesperado.\n" -#: elf32-ppc.c:7985 +#: elf32-ppc.c:7881 #, c-format msgid "%H: non-zero addend on %s reloc against `%s'\n" msgstr "%H: adenda não-zero em reloc %s contra \"%s\"\n" @@ -2999,54 +3091,54 @@ #. local won't have the +32k reloc addend trick marking #. -fPIC code, so the linker won't know whether r30 is #. _GLOBAL_OFFSET_TABLE_ or pointing into a .got2 section. -#: elf32-ppc.c:8017 +#: elf32-ppc.c:7913 #, c-format msgid "%X%H: @local call to ifunc %s\n" msgstr "%X%H: chamada @local a ifunc %s\n" -#: elf32-ppc.c:8187 +#: elf32-ppc.c:8091 #, c-format msgid "%H: relocation %s for indirect function %s unsupported\n" msgstr "%H: relocalização %s para função indirecta %s não suportada\n" -#: elf32-ppc.c:8515 elf32-ppc.c:8546 elf32-ppc.c:8637 elf32-ppc.c:8725 +#: elf32-ppc.c:8425 elf32-ppc.c:8456 elf32-ppc.c:8547 elf32-ppc.c:8643 #, c-format msgid "%pB: the target (%s) of a %s relocation is in the wrong output section (%s)" msgstr "%pB: o alvo (%s) de uma relocalização %s está na secção de saída errada (%s)" -#: elf32-ppc.c:8855 elf32-ppc.c:8873 -msgid "%P: %H: %s relocation unsupported for bss-plt\n" -msgstr "%P: %pB: relocalização %s ainda não é suportada para símbolo %s\n" +#: elf32-ppc.c:8773 elf32-ppc.c:8791 +msgid "%X%P: %H: %s relocation unsupported for bss-plt\n" +msgstr "%X%P: %H: %s relocalização não suportada para bss-plt\n" -#: elf32-ppc.c:8954 +#: elf32-ppc.c:8872 #, c-format msgid "%H: error: %s against `%s' not a multiple of %u\n" msgstr "%H: erro: %s contra \"%s\" não é múltiplo de %u\n" -#: elf32-ppc.c:8983 +#: elf32-ppc.c:8901 #, c-format msgid "%H: unresolvable %s relocation against symbol `%s'\n" msgstr "%H: relocalização %s insolúvel contra símbolo \"%s\"\n" -#: elf32-ppc.c:9064 +#: elf32-ppc.c:8982 #, c-format msgid "%H: %s reloc against `%s': error %d\n" msgstr "%H: %s reloc contra \"%s\": erro %d\n" -#: elf32-ppc.c:9959 elf64-ppc.c:15715 +#: elf32-ppc.c:9872 msgid "%X%P: text relocations and GNU indirect functions will result in a segfault at runtime\n" msgstr "%X%P: relocalizações de texto e funções indirectas GNU resultarão em segfault em tempo de execução\n" -#: elf32-ppc.c:9963 elf64-ppc.c:15719 +#: elf32-ppc.c:9876 elf64-ppc.c:17398 msgid "%P: warning: text relocations and GNU indirect functions may result in a segfault at runtime\n" msgstr "%P: aviso: relocalizações de texto e funções indirectas GNU podem resultar em segfault em tempo de execução\n" -#: elf32-ppc.c:10008 +#: elf32-ppc.c:9921 #, c-format msgid "%s not defined in linker created %pA" msgstr "%s não definido em linker criado %pA" -#: elf32-pru.c:579 elf32-pru.c:1472 +#: elf32-pru.c:582 elf32-pru.c:1475 #, c-format msgid "error: %pB: old incompatible object file detected" msgstr "erro: %pB: detectado ficheiro objecto antigo incompatível" @@ -3063,7 +3155,7 @@ msgid "warning: RL78_SYM reloc with an unknown symbol" msgstr "Aviso: reloc RL78_SYM com símbolo desconhecido" -#: elf32-rl78.c:1084 elf32-rx.c:1456 +#: elf32-rl78.c:1084 elf32-rx.c:1461 #, c-format msgid "%pB(%pA): error: call to undefined function '%s'" msgstr "%pB(%pA): erro: chamada a função não definida \"%s\"" @@ -3092,17 +3184,17 @@ msgid " [64-bit doubles]" msgstr " [64-bit doubles]" -#: elf32-rx.c:605 +#: elf32-rx.c:607 #, c-format msgid "%pB:%pA: table entry %s outside table" msgstr "%pB:%pA: entrada de tabela %s fora da tabela" -#: elf32-rx.c:612 +#: elf32-rx.c:614 #, c-format msgid "%pB:%pA: table entry %s not word-aligned within table" msgstr "%pB:%pA: entrada de tabela %s não alinhado dentro da tabela" -#: elf32-rx.c:684 +#: elf32-rx.c:689 #, c-format msgid "%pB:%pA: warning: deprecated Red Hat reloc %s detected against: %s" msgstr "%pB:%pA: aviso: reloc Red Hat obsoleta %s detectada contra: %s" @@ -3111,59 +3203,59 @@ #. an absolute address is being computed. There are special cases #. for relocs against symbols that are known to be referenced in #. crt0.o before the PID base address register has been initialised. -#: elf32-rx.c:704 +#: elf32-rx.c:709 #, c-format msgid "%pB(%pA): unsafe PID relocation %s at %# (against %s in %s)" msgstr "%pB(%pA): relocalização PID insegura %s em %# (contra %s em %s)" -#: elf32-rx.c:1288 +#: elf32-rx.c:1293 msgid "warning: RX_SYM reloc with an unknown symbol" msgstr "Aviso: reloc RX_SYM com símbolo desconhecido" -#: elf32-rx.c:3167 +#: elf32-rx.c:3173 #, c-format msgid "there is a conflict merging the ELF header flags from %pB" msgstr "Há um conflito na união das bandeira do cabeçalho ELF de %pB" -#: elf32-rx.c:3170 +#: elf32-rx.c:3176 #, c-format msgid " the input file's flags: %s" msgstr " bandeiras fich. entrada: %s" -#: elf32-rx.c:3172 +#: elf32-rx.c:3178 #, c-format msgid " the output file's flags: %s" msgstr " bandeiras fich. saída: %s" -#: elf32-rx.c:3792 +#: elf32-rx.c:3784 #, c-format msgid "%pB:%pA: table %s missing corresponding %s" msgstr "%pB:%pA: tabela %s com correspondente %s em falta" -#: elf32-rx.c:3800 +#: elf32-rx.c:3792 #, c-format msgid "%pB:%pA: %s and %s must be in the same input section" msgstr "%pB:%pA: %s e %s têm de estar na mesma secção de entrada" -#: elf32-s390.c:2140 elf64-s390.c:2095 +#: elf32-s390.c:2011 elf64-s390.c:1965 #, c-format msgid "%pB(%pA+%#): invalid instruction for TLS relocation %s" msgstr "%pB(%pA+%#): instrução inválida para relocalização TLS %s" -#: elf32-score.c:1521 elf32-score7.c:1382 elfxx-mips.c:3754 +#: elf32-score.c:1521 elf32-score7.c:1382 elfxx-mips.c:3800 msgid "not enough GOT space for local GOT entries" msgstr "espaço GOT insuficiente para entradas GOT locais" -#: elf32-score.c:2746 +#: elf32-score.c:2747 msgid "address not word aligned" msgstr "endereço não alinhado por word" -#: elf32-score.c:2827 elf32-score7.c:2632 +#: elf32-score.c:2828 elf32-score7.c:2633 #, c-format msgid "%pB: malformed reloc detected for section %pA" msgstr "%pB: reloc malformada detectada para secção %pA" -#: elf32-score.c:2881 elf32-score7.c:2686 +#: elf32-score.c:2882 elf32-score7.c:2687 #, c-format msgid "%pB: CALL15 reloc at %# not against global symbol" msgstr "%pB: reloc CALL15 em %# não contra símbolo global" @@ -3178,7 +3270,7 @@ msgid " [fix dep]" msgstr " [fix dep]" -#: elf32-score.c:4050 elf32-score7.c:3855 +#: elf32-score.c:4054 elf32-score7.c:3859 #, c-format msgid "%pB: warning: linking PIC files with non-PIC files" msgstr "%pB: aviso: a ligar ficheiros PIC com ficheiros não-PIC" @@ -3188,152 +3280,148 @@ msgid "%pB: %#: warning: R_SH_USES points to unrecognized insn 0x%x" msgstr "%pB: %#: aviso: R_SH_USES aponta para insn 0x%x não reconhecido" -#: elf32-sh.c:3633 -msgid "unexpected STO_SH5_ISA32 on local symbol is not handled" -msgstr "STO_SH5_ISA32 inesperado em símbolo local não é gerido" - -#: elf32-sh.c:3880 +#: elf32-sh.c:3758 #, c-format msgid "%pB: %#: fatal: unaligned branch target for relax-support relocation" msgstr "%pB: %#: fatal: ramo alvo não alinhado para relocalização relax-support" -#: elf32-sh.c:3910 elf32-sh.c:3926 +#: elf32-sh.c:3788 elf32-sh.c:3804 #, c-format msgid "%pB: %#: fatal: unaligned %s relocation %#" msgstr "%pB: %#: fatal: relocalização %s desalinhada %#" -#: elf32-sh.c:3942 +#: elf32-sh.c:3820 #, c-format msgid "%pB: %#: fatal: R_SH_PSHA relocation % not in range -32..32" msgstr "%pB: %#: fatal: R_SH_PSHA relocalização % fora do intervalo -32..32" -#: elf32-sh.c:3958 +#: elf32-sh.c:3836 #, c-format msgid "%pB: %#: fatal: R_SH_PSHL relocation % not in range -32..32" msgstr "%pB: %#: fatal: R_SH_PSHL relocalização % fora do intervalo -32..32" -#: elf32-sh.c:4088 elf32-sh.c:4483 +#: elf32-sh.c:3966 elf32-sh.c:4361 #, c-format msgid "%pB(%pA+%#): cannot emit fixup to `%s' in read-only section" msgstr "%pB(%pA+%#): impossível emitir fixup a \"%s\" em secção só de leitura" -#: elf32-sh.c:4586 +#: elf32-sh.c:4464 #, c-format msgid "%pB(%pA+%#): %s relocation against external symbol \"%s\"" msgstr "%pB(%pA+%#): relocalização %s contra símbolo externo \"%s\"" -#: elf32-sh.c:4705 +#: elf32-sh.c:4583 #, c-format msgid "%pB(%pA): offset in relocation for GD->LE translation is too small: %#" msgstr "%pB(%pA): desvio em relocalização para translacção GD->LE é muito pequeno: %#" #. The backslash is to prevent bogus trigraph detection. -#: elf32-sh.c:4723 +#: elf32-sh.c:4601 #, c-format msgid "%pB(%pA+%#): unexpected instruction %#04X (expected 0xd4??)" msgstr "%pB(%pA+%#): instrução inesperada %#04X (esperada 0xd4??)" -#: elf32-sh.c:4731 +#: elf32-sh.c:4609 #, c-format msgid "%pB(%pA+%#): unexpected instruction %#04X (expected 0xc7??)" msgstr "%pB(%pA+%#): instrução inesperada %#04X (esperada 0xc7??)" -#: elf32-sh.c:4738 +#: elf32-sh.c:4616 #, c-format msgid "%pB(%pA+%#): unexpected instruction %#04X (expected 0xd1??)" msgstr "%pB(%pA+%#): instrução inesperada %#04X (esperada 0xd1??)" -#: elf32-sh.c:4745 +#: elf32-sh.c:4623 #, c-format msgid "%pB(%pA+%#): unexpected instruction %#04X (expected 0x310c)" msgstr "%pB(%pA+%#): instrução inesperada %#04X (esperada 0x310c)" -#: elf32-sh.c:4752 +#: elf32-sh.c:4630 #, c-format msgid "%pB(%pA+%#): unexpected instruction %#04X (expected 0x410b)" msgstr "%pB(%pA+%#): instrução inesperada %#04X (esperada 0x410b)" -#: elf32-sh.c:4759 +#: elf32-sh.c:4637 #, c-format msgid "%pB(%pA+%#): unexpected instruction %#04X (expected 0x34cc)" msgstr "%pB(%pA+%#): instrução inesperada %#04X (esperada 0x34cc)" -#: elf32-sh.c:4794 +#: elf32-sh.c:4672 #, c-format msgid "%pB(%pA): offset in relocation for IE->LE translation is too small: %#" msgstr "%pB(%pA): desvio em relocalização para translacção IE->LE é muito pequeno: %#" -#: elf32-sh.c:4812 +#: elf32-sh.c:4690 #, c-format msgid "%pB(%pA+%#): unexpected instruction %#04X (expected 0xd0??: mov.l)" msgstr "%pB(%pA+%#): instrução inesperada %#04X (esperada 0xd0??: mov.l)" -#: elf32-sh.c:4821 +#: elf32-sh.c:4699 #, c-format msgid "%pB(%pA+%#): unexpected instruction %#04X (expected 0x0?12: stc)" msgstr "%pB(%pA+%#): instrução inesperada %#04X (esperada 0x0?12: stc)" -#: elf32-sh.c:4828 +#: elf32-sh.c:4706 #, c-format msgid "%pB(%pA+%#): unexpected instruction %#04X (expected 0x0?ce: mov.l)" msgstr "%pB(%pA+%#): instrução inesperada %#04X (esperada 0x0?ce: mov.l)" -#: elf32-sh.c:4943 +#: elf32-sh.c:4821 #, c-format msgid "%pB(%pA): offset in relocation for GD->IE translation is too small: %#" msgstr "%pB(%pA): desvio em relocalização para translacção GD->IE é muito pequeno: %#" -#: elf32-sh.c:5011 +#: elf32-sh.c:4889 #, c-format msgid "%pB(%pA): offset in relocation for LD->LE translation is too small: %#" msgstr "%pB(%pA): desvio em relocalização para translacção LD->LE é muito pequeno: %#" -#: elf32-sh.c:5139 +#: elf32-sh.c:5017 #, c-format msgid "%X%C: relocation to \"%s\" references a different segment\n" msgstr "%X%C: relocalização para \"%s\" referencia um segmento diferente\n" -#: elf32-sh.c:5146 +#: elf32-sh.c:5024 #, c-format msgid "%C: warning: relocation to \"%s\" references a different segment\n" msgstr "%C: aviso: relocalização para \"%s\" referencia um segmento diferente\n" -#: elf32-sh.c:5651 elf32-sh.c:5733 +#: elf32-sh.c:5483 elf32-sh.c:5565 #, c-format msgid "%pB: `%s' accessed both as normal and FDPIC symbol" msgstr "%pB: \"%s\" acedido como símbolo normal e FDPIC em simultâneo" -#: elf32-sh.c:5657 elf32-sh.c:5738 +#: elf32-sh.c:5489 elf32-sh.c:5570 #, c-format msgid "%pB: `%s' accessed both as FDPIC and thread local symbol" msgstr "%pB: \"%s\" acedido como símbolo local FDPIC e thread em simultâneo" -#: elf32-sh.c:5688 +#: elf32-sh.c:5520 #, c-format msgid "%pB: Function descriptor relocation with non-zero addend" msgstr "%pB: relocalização de descritor de função com adenda não-zero" -#: elf32-sh.c:5895 elf64-alpha.c:4691 +#: elf32-sh.c:5727 elf64-alpha.c:4657 #, c-format msgid "%pB: TLS local exec code cannot be linked into shared objects" msgstr "%pB: código exec TLS local não pode ser ligado a objectos partilhados" -#: elf32-sh.c:6010 +#: elf32-sh.c:5842 #, c-format msgid "%pB: uses %s instructions while previous modules use %s instructions" msgstr "%pB: usa instruções %s enquanto os módulos anteriores usam instruções %s" -#: elf32-sh.c:6022 +#: elf32-sh.c:5854 #, c-format msgid "internal error: merge of architecture '%s' with architecture '%s' produced unknown architecture" msgstr "erro interno: união da arquitectura \"%s\" com a arquitectura \"%s\" produziu uma arquitectura desconhecida" -#: elf32-sh.c:6059 +#: elf32-sh.c:5895 #, c-format msgid "%pB: uses instructions which are incompatible with instructions used in previous modules" msgstr "%pB: usa instruções incompatíveis com instruções usadas em módulos anteriores" -#: elf32-sh.c:6072 +#: elf32-sh.c:5908 #, c-format msgid "%pB: attempt to mix FDPIC and non-FDPIC objects" msgstr "%pB: tentativa de misturar objectos FDPIC e não-FDPIC" @@ -3348,118 +3436,123 @@ msgid "%pB: linking little endian files with big endian files" msgstr "%pB: a ligar ficheiros little endian com ficheiros big endian" -#: elf32-spu.c:732 +#: elf32-sparc.c:157 +#, c-format +msgid "%pB: unhandled sparc machine value '%lu' detected during write processing" +msgstr "%pB: valor de máquina sparc \"%lu\" não gerido detectado durante o processamento de escrita" + +#: elf32-spu.c:735 msgid "%X%P: overlay section %pA does not start on a cache line\n" msgstr "%X%P: secção de sobreposição %pA não começa numa linha de cache.\n" -#: elf32-spu.c:740 +#: elf32-spu.c:743 msgid "%X%P: overlay section %pA is larger than a cache line\n" msgstr "%X%P: secção de sobreposição %pA é maior que uma linha de cache.\n" -#: elf32-spu.c:760 +#: elf32-spu.c:763 msgid "%X%P: overlay section %pA is not in cache area\n" msgstr "%X%P: secção de sobreposição %pA não está numa área de cache.\n" -#: elf32-spu.c:801 +#: elf32-spu.c:804 #, c-format msgid "%X%P: overlay sections %pA and %pA do not start at the same address\n" msgstr "%X%P: secções de sobreposição %pA e %pA não começam no mesmo endereço.\n" -#: elf32-spu.c:1027 +#: elf32-spu.c:1030 #, c-format msgid "warning: call to non-function symbol %s defined in %pB" msgstr "aviso: chamada a símbolo não-função %s definida em %pB" -#: elf32-spu.c:1377 +#: elf32-spu.c:1380 #, c-format msgid "%pA:0x%v lrlive .brinfo (%u) differs from analysis (%u)\n" msgstr "%pA:0x%v lrlive .brinfo (%u) difere da análise (%u)\n" -#: elf32-spu.c:1909 +#: elf32-spu.c:1910 #, c-format msgid "%pB is not allowed to define %s" msgstr "%pB não tem permissão para definir %s" -#: elf32-spu.c:1917 +#: elf32-spu.c:1918 #, c-format msgid "you are not allowed to define %s in a script" msgstr "não tem permissão para definir %s num script" -#: elf32-spu.c:1951 +#: elf32-spu.c:1952 #, c-format msgid "%s in overlay section" msgstr "%s em secção de sobreposição" -#: elf32-spu.c:1980 +#: elf32-spu.c:1981 msgid "overlay stub relocation overflow" msgstr "transporte de relocalização fictícia de sobreposição" -#: elf32-spu.c:1989 elf64-ppc.c:13230 +#: elf32-spu.c:1990 elf64-ppc.c:14496 msgid "stubs don't match calculated size" msgstr "fictícios não correspondem ao tamanho calculado" -#: elf32-spu.c:2572 +#: elf32-spu.c:2573 #, c-format msgid "warning: %s overlaps %s\n" msgstr "aviso: %s sobrepõe-se a %s\n" -#: elf32-spu.c:2588 +#: elf32-spu.c:2589 #, c-format msgid "warning: %s exceeds section size\n" msgstr "aviso: %s excede o tamanho da secção\n" -#: elf32-spu.c:2620 +#: elf32-spu.c:2621 #, c-format msgid "%pA:0x%v not found in function table\n" msgstr "%pA:0x%v não encontrado na tabela de função\n" -#: elf32-spu.c:2761 +#: elf32-spu.c:2762 #, c-format msgid "%pB(%pA+0x%v): call to non-code section %pB(%pA), analysis incomplete\n" msgstr "%pB(%pA+0x%v): chamada a secção não-código %pB(%pA), análise incompleta\n" -#: elf32-spu.c:3330 +#: elf32-spu.c:3328 #, c-format msgid "stack analysis will ignore the call from %s to %s\n" msgstr "Análise de stack ignorará a chamada de %s a %s\n" -#: elf32-spu.c:4027 +#: elf32-spu.c:4025 msgid " calls:\n" msgstr " chamadas:\n" -#: elf32-spu.c:4341 +#: elf32-spu.c:4340 #, c-format msgid "%s duplicated in %s\n" msgstr "%s duplicado em %s\n" -#: elf32-spu.c:4345 +#: elf32-spu.c:4344 #, c-format msgid "%s duplicated\n" msgstr "%s duplicado\n" -#: elf32-spu.c:4352 +#: elf32-spu.c:4351 msgid "sorry, no support for duplicate object files in auto-overlay script\n" msgstr "desculpe, sem suporte para ficheiros objecto duplicados no script de auto-sobreposição\n" -#: elf32-spu.c:4394 +#: elf32-spu.c:4393 #, c-format msgid "non-overlay size of 0x%v plus maximum overlay size of 0x%v exceeds local store\n" msgstr "tamanho não-sobreposição de 0x%v mais o tamanho máximo de sobreposição de 0x%v excede a capacidade local\n" -#: elf32-spu.c:4550 +#: elf32-spu.c:4549 #, c-format msgid "%pB:%pA%s exceeds overlay size\n" msgstr "%pB:%pA%s excede o tamanho de sobreposição\n" -#: elf32-spu.c:4691 +#: elf32-spu.c:4690 msgid "%F%P: auto overlay error: %E\n" msgstr "%F%P: erro de auto-sobreposição: %E\n" -#: elf32-spu.c:4712 +#: elf32-spu.c:4711 msgid "Stack size for call graph root nodes.\n" msgstr "Tamanho de stack para chamar nós raiz gráficos.\n" -#: elf32-spu.c:4713 +#: elf32-spu.c:4712 msgid "" "\n" "Stack size for functions. Annotations: '*' max stack, 't' tail call\n" @@ -3467,19 +3560,19 @@ "\n" "Tamanho de stack para funções. Anotações: \"*\" stack máx, \"t\" chamada tail\n" -#: elf32-spu.c:4723 +#: elf32-spu.c:4722 msgid "Maximum stack required is 0x%v\n" msgstr "Stack máximo requerido é 0x%v\n" -#: elf32-spu.c:4742 +#: elf32-spu.c:4741 msgid "%X%P: stack/lrlive analysis error: %E\n" msgstr "%X%P: erro de análise stack/lrlive: %E\n" -#: elf32-spu.c:4745 +#: elf32-spu.c:4744 msgid "%F%P: can not build overlay stubs: %E\n" msgstr "%F%P: impossível construir fictícios de sobreposição: %E\n" -#: elf32-spu.c:4814 +#: elf32-spu.c:4813 msgid "fatal error while creating .fixup" msgstr "erro fatal ao criar .fixup" @@ -3488,275 +3581,274 @@ msgid "%pB(%s+%#): unresolvable %s relocation against symbol `%s'" msgstr "%pB(%s+%#): relocalização %s insolúvel comtra símbolo \"%s\"" -#: elf32-tic6x.c:1628 +#: elf32-tic6x.c:1588 msgid "warning: generating a shared library containing non-PIC code" msgstr "aviso: a gerar uma biblioteca partilhada contendo código não PIC" -#: elf32-tic6x.c:1633 +#: elf32-tic6x.c:1593 msgid "warning: generating a shared library containing non-PID code" msgstr "aviso: a gerar uma biblioteca partilhada contendo código não PID" -#: elf32-tic6x.c:2493 +#: elf32-tic6x.c:2434 #, c-format msgid "%pB: SB-relative relocation but __c6xabi_DSBT_BASE not defined" msgstr "%pB: relocalização relativa a SB mas __c6xabi_DSBT_BASE não definido" -#: elf32-tic6x.c:3629 +#: elf32-tic6x.c:3511 #, c-format msgid "%pB: error: unknown mandatory EABI object attribute %d" msgstr "%pB: erro: atributo de objecto EABI obrigatório desconhecido %d" -#: elf32-tic6x.c:3638 +#: elf32-tic6x.c:3520 #, c-format msgid "%pB: warning: unknown EABI object attribute %d" msgstr "%pB: aviso: atributo de objecto EABI desconhecido %d" -#: elf32-tic6x.c:3752 elf32-tic6x.c:3761 +#: elf32-tic6x.c:3638 elf32-tic6x.c:3647 #, c-format msgid "error: %pB requires more stack alignment than %pB preserves" msgstr "erro: %pB requer mais alinhamento de stack do que %pB preserva" -#: elf32-tic6x.c:3771 elf32-tic6x.c:3780 +#: elf32-tic6x.c:3657 elf32-tic6x.c:3666 #, c-format msgid "error: unknown Tag_ABI_array_object_alignment value in %pB" msgstr "erro: valor Tag_ABI_array_object_alignment desconhecido em %pB" -#: elf32-tic6x.c:3789 elf32-tic6x.c:3798 +#: elf32-tic6x.c:3675 elf32-tic6x.c:3684 #, c-format msgid "error: unknown Tag_ABI_array_object_align_expected value in %pB" msgstr "erro: valor Tag_ABI_array_object_align_expected desconhecido em %pB" -#: elf32-tic6x.c:3807 elf32-tic6x.c:3815 +#: elf32-tic6x.c:3693 elf32-tic6x.c:3701 #, c-format msgid "error: %pB requires more array alignment than %pB preserves" msgstr "erro: %pB requer mais alinhamento de matriz do que %pB preserva" -#: elf32-tic6x.c:3838 +#: elf32-tic6x.c:3724 #, c-format msgid "warning: %pB and %pB differ in wchar_t size" msgstr "aviso: %pB e %pB diferem em tamanho wchar_t" -#: elf32-tic6x.c:3857 +#: elf32-tic6x.c:3743 #, c-format msgid "warning: %pB and %pB differ in whether code is compiled for DSBT" msgstr "aviso: %pB e %pB diferem sobre se o código foi compilado para DSBT" -#: elf32-tilepro.c:3761 elfxx-tilegx.c:4145 elfxx-x86.c:1432 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:9530 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2579 +#: elf32-tilepro.c:3635 elfxx-tilegx.c:4019 elfxx-x86.c:1393 +#: elfnn-aarch64.c:9704 elfnn-riscv.c:2522 #, c-format msgid "discarded output section: `%pA'" msgstr "secção de saída descartada: \"%pA\"" -#: elf32-v850.c:153 +#: elf32-v850.c:152 #, c-format msgid "variable `%s' cannot occupy in multiple small data regions" msgstr "Variável \"%s\" não pode ocupar múltiplas pequenas regiões de dados" -#: elf32-v850.c:156 +#: elf32-v850.c:155 #, c-format msgid "variable `%s' can only be in one of the small, zero, and tiny data regions" msgstr "Variável \"%s\" só pode estar numa das regiões de dados pequena, zero e minúscula" -#: elf32-v850.c:159 +#: elf32-v850.c:158 #, c-format msgid "variable `%s' cannot be in both small and zero data regions simultaneously" msgstr "Variável \"%s\" não pode estar nas regiões de dados pequena e zero em simultâneo" -#: elf32-v850.c:162 +#: elf32-v850.c:161 #, c-format msgid "variable `%s' cannot be in both small and tiny data regions simultaneously" msgstr "Variável \"%s\" não pode estar nas regiões de dados pequena e minúscula em simultâneo" -#: elf32-v850.c:165 +#: elf32-v850.c:164 #, c-format msgid "variable `%s' cannot be in both zero and tiny data regions simultaneously" msgstr "Variável \"%s\" não pode estar nas regiões de dados zero e minúscula em simultâneo" -#: elf32-v850.c:463 +#: elf32-v850.c:462 msgid "failed to find previous HI16 reloc" msgstr "Falha ao procurar reloc HI16 anterior" -#: elf32-v850.c:2303 +#: elf32-v850.c:2302 msgid "could not locate special linker symbol __gp" msgstr "impossível localizar símbolo linker especial __gp" -#: elf32-v850.c:2307 +#: elf32-v850.c:2306 msgid "could not locate special linker symbol __ep" msgstr "impossível localizar símbolo linker especial __ep" -#: elf32-v850.c:2311 +#: elf32-v850.c:2310 msgid "could not locate special linker symbol __ctbp" msgstr "impossível localizar símbolo linker especial __ctbp" -#: elf32-v850.c:2532 +#: elf32-v850.c:2531 #, c-format msgid "error: %pB needs 8-byte alignment but %pB is set for 4-byte alignment" msgstr "erro: %pB precisa de alinhamento 8-byte mas %pB está definido para alinhamento 4-byte" -#: elf32-v850.c:2548 +#: elf32-v850.c:2547 #, c-format msgid "error: %pB uses 64-bit doubles but %pB uses 32-bit doubles" msgstr "erro: %pB usa doubles 64-bit mas %pB usa doubles 32-bit" -#: elf32-v850.c:2563 +#: elf32-v850.c:2562 #, c-format msgid "error: %pB uses FPU-3.0 but %pB only supports FPU-2.0" msgstr "erro: %pB usa FPU-3.0 mas %pB só suporta FPU-2.0" -#: elf32-v850.c:2595 +#: elf32-v850.c:2594 #, c-format msgid " alignment of 8-byte entities: " msgstr " alinhamento de entidades 8-byte: " -#: elf32-v850.c:2598 +#: elf32-v850.c:2597 #, c-format msgid "4-byte" msgstr "4-byte" -#: elf32-v850.c:2599 +#: elf32-v850.c:2598 #, c-format msgid "8-byte" msgstr "8-byte" -#: elf32-v850.c:2600 elf32-v850.c:2612 +#: elf32-v850.c:2599 elf32-v850.c:2611 #, c-format msgid "not set" msgstr "não definido" -#: elf32-v850.c:2601 elf32-v850.c:2613 elf32-v850.c:2625 elf32-v850.c:2636 -#: elf32-v850.c:2647 elf32-v850.c:2658 +#: elf32-v850.c:2600 elf32-v850.c:2612 elf32-v850.c:2624 elf32-v850.c:2635 +#: elf32-v850.c:2646 elf32-v850.c:2657 #, c-format msgid "unknown: %x" msgstr "desconhecido: %x" -#: elf32-v850.c:2607 +#: elf32-v850.c:2606 #, c-format msgid " size of doubles: " msgstr " tamanho de doubles: " -#: elf32-v850.c:2610 +#: elf32-v850.c:2609 #, c-format msgid "4-bytes" msgstr "4-bytes" -#: elf32-v850.c:2611 +#: elf32-v850.c:2610 #, c-format msgid "8-bytes" msgstr "8-bytes" -#: elf32-v850.c:2619 +#: elf32-v850.c:2618 #, c-format msgid " FPU support required: " msgstr " requerido suporte FPU: " -#: elf32-v850.c:2622 +#: elf32-v850.c:2621 #, c-format msgid "FPU-2.0" msgstr "FPU-2.0" -#: elf32-v850.c:2623 +#: elf32-v850.c:2622 #, c-format msgid "FPU-3.0" msgstr "FPU-3.0" -#: elf32-v850.c:2624 +#: elf32-v850.c:2623 #, c-format msgid "none" msgstr "nenhum" -#: elf32-v850.c:2631 +#: elf32-v850.c:2630 #, c-format msgid "SIMD use: " msgstr "uso SIMD: " -#: elf32-v850.c:2634 elf32-v850.c:2645 elf32-v850.c:2656 +#: elf32-v850.c:2633 elf32-v850.c:2644 elf32-v850.c:2655 #, c-format msgid "yes" msgstr "sim" -#: elf32-v850.c:2635 elf32-v850.c:2646 elf32-v850.c:2657 +#: elf32-v850.c:2634 elf32-v850.c:2645 elf32-v850.c:2656 #, c-format msgid "no" msgstr "não" -#: elf32-v850.c:2642 +#: elf32-v850.c:2641 #, c-format msgid "CACHE use: " msgstr "uso CACHE: " -#: elf32-v850.c:2653 +#: elf32-v850.c:2652 #, c-format msgid "MMU use: " msgstr "uso MMU: " -#: elf32-v850.c:2820 elf32-v850.c:2876 +#: elf32-v850.c:2819 elf32-v850.c:2875 #, c-format msgid "%pB: architecture mismatch with previous modules" msgstr "%pB: troca de arquitectura com módulos anteriores" #. xgettext:c-format. -#: elf32-v850.c:2894 +#: elf32-v850.c:2893 #, c-format msgid "private flags = %lx: " msgstr "bandeiras privadas = %lx: " -#: elf32-v850.c:2899 +#: elf32-v850.c:2898 #, c-format msgid "unknown v850 architecture" msgstr "arquitectura V850 desconhecida" -#: elf32-v850.c:2901 +#: elf32-v850.c:2900 #, c-format msgid "v850 E3 architecture" msgstr "arquitectura v850 E3" -#: elf32-v850.c:2903 elf32-v850.c:2910 +#: elf32-v850.c:2902 elf32-v850.c:2909 #, c-format msgid "v850 architecture" msgstr "arquitectura v850" -#: elf32-v850.c:2911 +#: elf32-v850.c:2910 #, c-format msgid "v850e architecture" msgstr "arquitectura v850e" -#: elf32-v850.c:2912 +#: elf32-v850.c:2911 #, c-format msgid "v850e1 architecture" msgstr "arquitectura v850e1" -#: elf32-v850.c:2913 +#: elf32-v850.c:2912 #, c-format msgid "v850e2 architecture" msgstr "arquitectura v850e2" -#: elf32-v850.c:2914 +#: elf32-v850.c:2913 #, c-format msgid "v850e2v3 architecture" msgstr "arquitectura v850e2v3" -#: elf32-v850.c:2915 +#: elf32-v850.c:2914 #, c-format msgid "v850e3v5 architecture" msgstr "arquitectura v850e3v5" -#: elf32-v850.c:3609 elf32-v850.c:3848 +#: elf32-v850.c:3612 elf32-v850.c:3851 #, c-format msgid "%pB: %#: warning: %s points to unrecognized insns" msgstr "%pB: %#: aviso: %s aponta para insns não reconhecido" -#: elf32-v850.c:3619 elf32-v850.c:3858 +#: elf32-v850.c:3622 elf32-v850.c:3861 #, c-format msgid "%pB: %#: warning: %s points to unrecognized insn %#x" msgstr "%pB: %#: aviso: %s aponta para insn %#x não reconhecido" -#: elf32-v850.c:3665 elf32-v850.c:3893 +#: elf32-v850.c:3668 elf32-v850.c:3896 #, c-format msgid "%pB: %#: warning: %s points to unrecognized reloc" msgstr "%pB: %#: aviso: %s aponta para reloc não reconhecida" -#: elf32-v850.c:3705 +#: elf32-v850.c:3708 #, c-format msgid "%pB: %#: warning: %s points to unrecognized reloc %#" msgstr "%pB: %#: aviso: %s aponta para reloc não reconhecida %#" @@ -3781,22 +3873,22 @@ msgid "%pB: warning: GOT addend of % to `%s' does not match previous GOT addend of %" msgstr "%pB: aviso: adenda GOT de %# a \"%s\" não corresponde a adenda GOT de %# prévia" -#: elf32-vax.c:1446 +#: elf32-vax.c:1389 #, c-format msgid "%pB: warning: PLT addend of % to `%s' from %pA section ignored" msgstr "%pB: aviso: adenda PLT de %# a \"%s\" da secção %pA ignorada" -#: elf32-vax.c:1572 +#: elf32-vax.c:1515 #, c-format msgid "%pB: warning: %s relocation against symbol `%s' from %pA section" msgstr "%pB: aviso: relocalização %s contra símbolo \"%s\" da secção %pA" -#: elf32-vax.c:1579 +#: elf32-vax.c:1522 #, c-format msgid "%pB: warning: %s relocation to %# from %pA section" msgstr "%pB: aviso: relocalização %s para %# da secção %pA" -#: elf32-visium.c:821 +#: elf32-visium.c:824 #, c-format msgid "%pB: compiled %s -mtune=%s and linked with modules compiled %s -mtune=%s" msgstr "%pB: compilado %s -mtune=%s e ligado com módulos compilados %s -mtune=%s" @@ -3811,238 +3903,261 @@ msgid "error reading cpu type from elf private data" msgstr "erro ao ler tipo de cpu de dados privados elf" -#: elf32-xstormy16.c:457 elf64-ia64-vms.c:2085 elf32-ia64.c:2353 -#: elf64-ia64.c:2353 +#: elf32-xstormy16.c:457 elf64-ia64-vms.c:2074 elfnn-ia64.c:2343 msgid "non-zero addend in @fptr reloc" msgstr "adenda não-zero em reloc @fptr" -#: elf32-xtensa.c:937 +#: elf32-xtensa.c:1001 #, c-format msgid "%pB(%pA): invalid property table" msgstr "%pB(%pA): tabela de propriedade inválida" -#: elf32-xtensa.c:2675 +#: elf32-xtensa.c:2733 #, c-format msgid "%pB(%pA+%#): relocation offset out of range (size=%#)" msgstr "%pB(%pA+%#): desvio de relocalização fora do intervalo (tamanho=%#)" -#: elf32-xtensa.c:2758 elf32-xtensa.c:2881 +#: elf32-xtensa.c:2816 elf32-xtensa.c:2939 msgid "dynamic relocation in read-only section" msgstr "relocalização dinâmica em secção só de leitura" -#: elf32-xtensa.c:2858 +#: elf32-xtensa.c:2916 msgid "TLS relocation invalid without dynamic sections" msgstr "relocalização TLS inválida sem secções dinâmicas" -#: elf32-xtensa.c:3070 +#: elf32-xtensa.c:3126 msgid "internal inconsistency in size of .got.loc section" msgstr "inconsistência interna no tamanho da secção .got.loc" -#: elf32-xtensa.c:3377 +#: elf32-xtensa.c:3432 #, c-format msgid "%pB: incompatible machine type; output is 0x%x; input is 0x%x" msgstr "%pB: tipo de máquina incompatível. Saída é 0x%x. Entrada é 0x%x" -#: elf32-xtensa.c:4608 elf32-xtensa.c:4616 +#: elf32-xtensa.c:4726 elf32-xtensa.c:4734 msgid "attempt to convert L32R/CALLX to CALL failed" msgstr "Tentativa de converter L32R/CALLX para CALL falhou" -#: elf32-xtensa.c:6444 elf32-xtensa.c:6523 elf32-xtensa.c:7899 +#: elf32-xtensa.c:6559 elf32-xtensa.c:6638 elf32-xtensa.c:8064 #, c-format msgid "%pB(%pA+%#): could not decode instruction; possible configuration mismatch" msgstr "%pB(%pA+%#): impossível descodificar instrução; possível troca de configuração" -#: elf32-xtensa.c:7638 +#: elf32-xtensa.c:7805 #, c-format msgid "%pB(%pA+%#): could not decode instruction for XTENSA_ASM_SIMPLIFY relocation; possible configuration mismatch" msgstr "%pB(%pA+%#): impossível descodificar instrução para relocalização XTENSA_ASM_SIMPLIFY; possível troca de configuração" -#: elf32-xtensa.c:9493 +#: elf32-xtensa.c:9663 msgid "invalid relocation address" msgstr "Endereço de relocalização inválido" -#: elf32-xtensa.c:9543 +#: elf32-xtensa.c:9754 msgid "overflow after relaxation" msgstr "transporte após relaxe" -#: elf32-xtensa.c:10689 +#: elf32-xtensa.c:10900 #, c-format msgid "%pB(%pA+%#): unexpected fix for %s relocation" msgstr "%pB(%pA+%#): fix inesperado para relocalização %s" -#: elf64-alpha.c:472 +#: elf32-z80.c:473 +#, c-format +msgid "%pB: unsupported bfd mach %#lx" +msgstr "%pB: bfd mach %#lx não suportado" + +#: elf32-z80.c:518 +#, c-format +msgid "%pB: unsupported mach %#x" +msgstr "%pB: mach %#x não suportado" + +#: elf32-z80.c:546 +#, c-format +msgid "%pB: unsupported arch %#x" +msgstr "%pB: arch %#x não suportado" + +#: elf64-alpha.c:473 msgid "GPDISP relocation did not find ldah and lda instructions" msgstr "relocalização GPDISP não encontrou instruções ldah e lda" -#: elf64-alpha.c:2463 +#: elf64-alpha.c:1999 elf64-alpha.c:2694 elflink.c:14885 +#, c-format +msgid "%pB: dynamic relocation against `%pT' in read-only section `%pA'\n" +msgstr "%pB: relocalização dinâmica contra \"%pT\" em secção só de leitura \"%pA\"\n" + +#: elf64-alpha.c:2451 #, c-format msgid "%pB: .got subsegment exceeds 64K (size %d)" msgstr "%pB: sub-segmento .got excede 64K (tamanho %d)" -#: elf64-alpha.c:3018 elf64-alpha.c:3214 +#: elf64-alpha.c:2989 elf64-alpha.c:3183 #, c-format msgid "%pB: %pA+%#: warning: %s relocation against unexpected insn" msgstr "%pB: %pA+%#: aviso: relocalização %s contra insn inesperado" -#: elf64-alpha.c:4415 elf64-alpha.c:4428 +#: elf64-alpha.c:4381 elf64-alpha.c:4394 #, c-format msgid "%pB: gp-relative relocation against dynamic symbol %s" msgstr "%pB: relocalização gp-relative contra símbolo dinâmico %s" -#: elf64-alpha.c:4484 +#: elf64-alpha.c:4450 #, c-format msgid "%pB: change in gp: BRSGP %s" msgstr "%pB: alteração em gp: BRSGP %s" -#: elf64-alpha.c:4509 mach-o.c:615 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:499 +#: elf64-alpha.c:4475 mach-o.c:616 elfnn-riscv.c:485 msgid "" msgstr "" -#: elf64-alpha.c:4515 +#: elf64-alpha.c:4481 #, c-format msgid "%pB: !samegp reloc against symbol without .prologue: %s" msgstr "%pB: reloc !samegp contra símbolo sem .prologue: %s" -#: elf64-alpha.c:4573 +#: elf64-alpha.c:4539 #, c-format msgid "%pB: unhandled dynamic relocation against %s" msgstr "%pB: relocalização dinâmica contra %s não gerida" -#: elf64-alpha.c:4608 +#: elf64-alpha.c:4574 #, c-format msgid "%pB: pc-relative relocation against undefined weak symbol %s" msgstr "%pB: relocalização pc-relative contra símbolo fraco %s indefinido" -#: elf64-alpha.c:4674 +#: elf64-alpha.c:4640 #, c-format msgid "%pB: dtp-relative relocation against dynamic symbol %s" msgstr "%pB: relocalização dtp-relative contra símbolo dinâmico %s" -#: elf64-alpha.c:4699 +#: elf64-alpha.c:4665 #, c-format msgid "%pB: tp-relative relocation against dynamic symbol %s" msgstr "%pB: relocalização tp-relative contra símbolo dinâmico %s" +#. Only if it's not an unresolved symbol. +#: elf64-bpf.c:517 +msgid "internal error: relocation not supported" +msgstr "erro interno: relocalização não suportada" + #: elf64-gen.c:71 #, c-format msgid "%pB: Relocations in generic ELF (EM: %d)" msgstr "%pB: relocalizações em ELF (EM: %d) genérico" -#: elf64-hppa.c:2081 +#: elf64-hppa.c:2032 #, c-format msgid "stub entry for %s cannot load .plt, dp offset = %" msgstr "entrada fictícia para %s não pode carregar .plt, desvio dp = %#" -#: elf64-hppa.c:3286 +#: elf64-hppa.c:3236 #, c-format msgid "%pB(%pA+%#): cannot reach %s" msgstr "%pB(%pA+%#): impossível atingir %s" -#: elf64-ia64-vms.c:598 elf32-ia64.c:636 elf64-ia64.c:636 +#: elf64-ia64-vms.c:598 elfnn-ia64.c:639 #, c-format msgid "%pB: can't relax br at %# in section `%pA'; please use brl or indirect branch" msgstr "%pB: impossível relaxar br em %# na secção \"%pA\". Por favor, use brl ou um ramo indirecto." -#: elf64-ia64-vms.c:2040 elf32-ia64.c:2301 elf64-ia64.c:2301 +#: elf64-ia64-vms.c:2029 elfnn-ia64.c:2291 msgid "@pltoff reloc against local symbol" msgstr "reloc @pltoff contra símbolo local" -#: elf64-ia64-vms.c:3292 elf32-ia64.c:3712 elf64-ia64.c:3712 +#: elf64-ia64-vms.c:3281 elfnn-ia64.c:3674 #, c-format msgid "%pB: short data segment overflowed (%# >= 0x400000)" msgstr "%pB: transporte no segmento de dados curtos (%# >= 0x400000)" -#: elf64-ia64-vms.c:3302 elf32-ia64.c:3722 elf64-ia64.c:3722 +#: elf64-ia64-vms.c:3291 elfnn-ia64.c:3684 #, c-format msgid "%pB: __gp does not cover short data segment" msgstr "%pB: __gp não cobre o segmento de dados curtos" -#: elf64-ia64-vms.c:3572 elf32-ia64.c:3996 elf64-ia64.c:3996 +#: elf64-ia64-vms.c:3561 elfnn-ia64.c:3958 #, c-format msgid "%pB: non-pic code with imm relocation against dynamic symbol `%s'" msgstr "%pB: código não-pic com relocalização imm contra símbolo dinâmico \"%s\"" -#: elf64-ia64-vms.c:3636 elf32-ia64.c:4064 elf64-ia64.c:4064 +#: elf64-ia64-vms.c:3625 elfnn-ia64.c:4026 #, c-format msgid "%pB: @gprel relocation against dynamic symbol %s" msgstr "%pB: relocalização @gprel contra símbolo dinâmico %s" -#: elf64-ia64-vms.c:3695 elf32-ia64.c:4127 elf64-ia64.c:4127 +#: elf64-ia64-vms.c:3684 elfnn-ia64.c:4089 #, c-format msgid "%pB: linking non-pic code in a position independent executable" msgstr "%pB: a ligar código não-pic num executável de posição independente" -#: elf64-ia64-vms.c:3797 elf32-ia64.c:4265 elf64-ia64.c:4265 +#: elf64-ia64-vms.c:3786 elfnn-ia64.c:4227 #, c-format msgid "%pB: @internal branch to dynamic symbol %s" msgstr "%pB: ramo @internal para símbolo dinâmico %s" -#: elf64-ia64-vms.c:3800 elf32-ia64.c:4268 elf64-ia64.c:4268 +#: elf64-ia64-vms.c:3789 elfnn-ia64.c:4230 #, c-format msgid "%pB: speculation fixup to dynamic symbol %s" msgstr "%pB: fixup de especulação para símbolo dinâmico %s" -#: elf64-ia64-vms.c:3803 elf32-ia64.c:4271 elf64-ia64.c:4271 +#: elf64-ia64-vms.c:3792 elfnn-ia64.c:4233 #, c-format msgid "%pB: @pcrel relocation against dynamic symbol %s" msgstr "%pB: relocalização @pcrel contra símbolo dinâmico %s" -#: elf64-ia64-vms.c:3927 elf32-ia64.c:4468 elf64-ia64.c:4468 +#: elf64-ia64-vms.c:3916 elfnn-ia64.c:4430 msgid "unsupported reloc" msgstr "reloc não suportado" -#: elf64-ia64-vms.c:3964 elf32-ia64.c:4506 elf64-ia64.c:4506 +#: elf64-ia64-vms.c:3953 elfnn-ia64.c:4468 #, c-format msgid "%pB: missing TLS section for relocation %s against `%s' at %# in section `%pA'." msgstr "%pB: secção TLS em falta para relocalização %s contra \"%s\" em %# na secção \"%pA\"." -#: elf64-ia64-vms.c:3981 elf32-ia64.c:4523 elf64-ia64.c:4523 +#: elf64-ia64-vms.c:3970 elfnn-ia64.c:4485 #, c-format msgid "%pB: Can't relax br (%s) to `%s' at %# in section `%pA' with size %# (> 0x1000000)." msgstr "%pB: impossível relaxar br (%s) para \"%s\" em %# na secção \"%pA\" com tamanho %# (> 0x1000000)." -#: elf64-ia64-vms.c:4273 elf32-ia64.c:4781 elf64-ia64.c:4781 +#: elf64-ia64-vms.c:4266 elfnn-ia64.c:4746 #, c-format msgid "%pB: linking trap-on-NULL-dereference with non-trapping files" msgstr "%pB: a ligar trap-on-NULL-dereference com ficheiros não-trapping" -#: elf64-ia64-vms.c:4282 elf32-ia64.c:4790 elf64-ia64.c:4790 +#: elf64-ia64-vms.c:4275 elfnn-ia64.c:4755 #, c-format msgid "%pB: linking big-endian files with little-endian files" msgstr "%pB: a ligar ficheiros big-endian com ficheiros little-endian" -#: elf64-ia64-vms.c:4291 elf32-ia64.c:4799 elf64-ia64.c:4799 +#: elf64-ia64-vms.c:4284 elfnn-ia64.c:4764 #, c-format msgid "%pB: linking 64-bit files with 32-bit files" msgstr "%pB: a ligar ficheiros 64-bit com ficheiros 32-bit" -#: elf64-ia64-vms.c:4300 elf32-ia64.c:4808 elf64-ia64.c:4808 +#: elf64-ia64-vms.c:4293 elfnn-ia64.c:4773 #, c-format msgid "%pB: linking constant-gp files with non-constant-gp files" msgstr "%pB: a ligar ficheiros constant-gp com ficheiros não constant-gp" -#: elf64-ia64-vms.c:4310 elf32-ia64.c:4818 elf64-ia64.c:4818 +#: elf64-ia64-vms.c:4303 elfnn-ia64.c:4783 #, c-format msgid "%pB: linking auto-pic files with non-auto-pic files" msgstr "%pB: a ligar ficheiros auto-pic com ficheiro não auto-pic" -#: elf64-ia64-vms.c:5153 elflink.c:4894 +#: elf64-ia64-vms.c:5150 elflink.c:5072 #, c-format msgid "warning: alignment %u of common symbol `%s' in %pB is greater than the alignment (%u) of its section %pA" msgstr "Aviso: alihamento %u de símbolo comum \"%s\" em %pB é maior que o alinhamento (%u) da sua secção %pA" -#: elf64-ia64-vms.c:5160 elflink.c:4901 +#: elf64-ia64-vms.c:5157 elflink.c:5079 #, c-format msgid "warning: alignment %u of symbol `%s' in %pB is smaller than %u in %pB" msgstr "Aviso: alinhamento %u do símbolo \"%s\" em %pB é menor que %u em %pB" -#: elf64-ia64-vms.c:5176 elflink.c:4918 +#: elf64-ia64-vms.c:5173 elflink.c:5096 #, c-format msgid "warning: size of symbol `%s' changed from % in %pB to % in %pB" msgstr "Aviso: tamanho do símbolo \"%s\" mudou de % em %pB para % em %pB" -#: elf64-mips.c:4098 +#: elf64-mips.c:4095 #, c-format msgid "%pB(%pA): relocation % has invalid symbol index %ld" msgstr "%pB(%pA): relocalização %# tem índice de símbolos inválido %ld" @@ -4095,159 +4210,172 @@ msgid "%pB: directive LOCAL valid only with a register or absolute value" msgstr "%pB: directiva LOCAL só é válida com um registo ou um valor absoluto" -#: elf64-mmix.c:1744 +#: elf64-mmix.c:1742 #, c-format msgid "%pB: LOCAL directive: register $% is not a local register; first global register is $%" msgstr "%pB: directiva LOCAL: registo $%# não é um registo local. O primeiro registo global é $%#" -#: elf64-mmix.c:2173 +#: elf64-mmix.c:2167 #, c-format msgid "%pB: error: multiple definition of `%s'; start of %s is set in a earlier linked file" msgstr "%pB: Erro: definição múltipla de \"%s\"; início de %s está definido num ficheiro previamente ligado" -#: elf64-mmix.c:2228 +#: elf64-mmix.c:2222 msgid "register section has contents\n" msgstr "Secção de registo tem conteúdo\n" -#: elf64-mmix.c:2418 +#: elf64-mmix.c:2412 #, c-format msgid "internal inconsistency: remaining %lu != max %lu; please report this bug" msgstr "" "Inconsistência interna: resta %lu != máx %lu.\n" " Por favor, reporte este erro." -#: elf64-ppc.c:3827 +#: elf64-ppc.c:1342 +#, c-format +msgid "warning: %s should be used rather than %s" +msgstr "aviso: deve ser usado %s, em vez de %s" + +#: elf64-ppc.c:4101 #, c-format msgid "symbol '%s' has invalid st_other for ABI version 1" msgstr "símbolo \"%s\" tem st_other inválido para a versão ABI 1" -#: elf64-ppc.c:4002 +#: elf64-ppc.c:4281 #, c-format msgid "%pB .opd not allowed in ABI version %d" msgstr "%pB .opd não permitida na versão ABI %d" -#: elf64-ppc.c:4523 +#: elf64-ppc.c:4852 #, c-format msgid "%H: %s reloc unsupported in shared libraries and PIEs\n" msgstr "%H: %s reloc não suportada em bibliotecas partilhadas e PIEs.\n" -#: elf64-ppc.c:4919 +#: elf64-ppc.c:5260 #, c-format msgid "%pB uses unknown e_flags 0x%lx" msgstr "%pB usa e_flags 0x%lx desconhecido" -#: elf64-ppc.c:4927 +#: elf64-ppc.c:5268 #, c-format msgid "%pB: ABI version %ld is not compatible with ABI version %ld output" msgstr "%pB: versão ABI %ld não é compatível com a saída da versão ABI %ld" -#: elf64-ppc.c:4954 +#: elf64-ppc.c:5295 #, c-format msgid " [abiv%ld]" msgstr " [abiv%ld" -#: elf64-ppc.c:6145 +#: elf64-ppc.c:6574 msgid "%P: copy reloc against `%pT' requires lazy plt linking; avoid setting LD_BIND_NOW=1 or upgrade gcc\n" msgstr "%P: cópia da reloc contra \"%pT\" requer ligação lazy plt; evite definir LD_BIND_NOW=1 ou actualize o gcc\n" -#: elf64-ppc.c:6417 +#: elf64-ppc.c:6841 #, c-format msgid "%pB: undefined symbol on R_PPC64_TOCSAVE relocation" msgstr "%pB: símbolo indefinido em relocalização R_PPC64_TOCSAVE" -#: elf64-ppc.c:6644 +#: elf64-ppc.c:7089 #, c-format msgid "dynreloc miscount for %pB, section %pA" msgstr "erro de contagem dynreloc para %pB, secção %pA" -#: elf64-ppc.c:6733 +#: elf64-ppc.c:7178 #, c-format msgid "%pB: .opd is not a regular array of opd entries" msgstr "%pB: .opd não é uma matriz normal de entradas opd" -#: elf64-ppc.c:6743 +#: elf64-ppc.c:7188 #, c-format msgid "%pB: unexpected reloc type %u in .opd section" msgstr "%pB: tipo de reloc inesperado %u em secção .opd" -#: elf64-ppc.c:6765 +#: elf64-ppc.c:7210 #, c-format msgid "%pB: undefined sym `%s' in .opd section" msgstr "%pB: símbolo indefinido \"%s\" em secção .opd" -#: elf64-ppc.c:7249 +#: elf64-ppc.c:7697 msgid "warning: --plt-localentry is especially dangerous without ld.so support to detect ABI violations" msgstr "aviso: --plt-localentry é particularmente perigosa sem suporte ld.so para detectar violações ABI." -#: elf64-ppc.c:7499 +#: elf64-ppc.c:8017 msgid "%H __tls_get_addr lost arg, TLS optimization disabled\n" msgstr "%H __tls_get_addr perdeu arg, optimização TLS desactivada\n" -#: elf64-ppc.c:7876 elf64-ppc.c:8513 +#: elf64-ppc.c:8417 elf64-ppc.c:9130 #, c-format msgid "%s defined on removed toc entry" msgstr "%s defenido em entrada toc removida" -#: elf64-ppc.c:8241 -#, c-format -msgid "%H: toc optimization is not supported for %s instruction\n" -msgstr "%H: optimização toc não é suportada para instreuções %s.\n" - -#: elf64-ppc.c:8470 +#: elf64-ppc.c:9087 #, c-format msgid "%H: %s references optimized away TOC entry\n" msgstr "%H: %s referencia entrada TOC optimizada\n" -#: elf64-ppc.c:9301 +#: elf64-ppc.c:9308 +#, c-format +msgid "%H: got/toc optimization is not supported for %s instruction\n" +msgstr "%H: optimização got/toc não suportada para a instrução %s\n" + +#: elf64-ppc.c:10135 #, c-format msgid "warning: discarding dynamic section %s" msgstr "aviso: a descartar secção dinâmica %s" -#: elf64-ppc.c:10215 +#: elf64-ppc.c:11277 msgid "%P: cannot find opd entry toc for `%pT'\n" msgstr "%P: impossível encontrar entrada opd toc para \"%T\"\n" -#: elf64-ppc.c:10303 +#: elf64-ppc.c:11323 elf64-ppc.c:11867 +msgid "%F%P: Could not assign group %pA target %pA to an output section. Retry without --enable-non-contiguous-regions.\n" +msgstr "%F%P: impossível atribuir o grupo %pA, alvo %pA a uma secção de saída. Repita sem --enable-non-contiguous-regions.\n" + +#: elf64-ppc.c:11385 #, c-format msgid "long branch stub `%s' offset overflow" msgstr "transporte em desvio \"%s\" em fictício de ramo longo" -#: elf64-ppc.c:10330 +#: elf64-ppc.c:11412 #, c-format msgid "can't find branch stub `%s'" msgstr "impossível encontrar fictício de ramo \"%s\"" -#: elf64-ppc.c:10394 elf64-ppc.c:10642 elf64-ppc.c:12791 +#: elf64-ppc.c:11476 elf64-ppc.c:11743 elf64-ppc.c:13972 #, c-format msgid "%P: linkage table error against `%pT'\n" msgstr "%P: erro na tabela de ligação contra \"%T\"\n" -#: elf64-ppc.c:10820 +#: elf64-ppc.c:11939 #, c-format msgid "can't build branch stub `%s'" msgstr "impossível construir fictício de ramo \"%s\"" -#: elf64-ppc.c:11779 +#: elf64-ppc.c:12920 #, c-format msgid "%pB section %pA exceeds stub group size" msgstr "%pB secção %pA excede tamanho de grupo de fictício" -#: elf64-ppc.c:13189 elf64-ppc.c:13208 +#: elf64-ppc.c:14153 +msgid "__tls_get_addr call offset overflow" +msgstr "transporte de desvio de chamada __tls_get_addr" + +#: elf64-ppc.c:14455 elf64-ppc.c:14474 #, c-format msgid "%s offset too large for .eh_frame sdata4 encoding" msgstr "desvio %s muito grande para codificação .eh_frame sdata4" -#: elf64-ppc.c:13244 +#: elf64-ppc.c:14506 #, c-format msgid "linker stubs in %u group\n" msgid_plural "linker stubs in %u groups\n" msgstr[0] "fictícios de linker em grupo %u\n" msgstr[1] "fictícios de linker em grupos %u\n" -#: elf64-ppc.c:13248 +#: elf64-ppc.c:14513 #, c-format msgid "" -" branch %lu\n" +"%s branch %lu\n" " branch toc adj %lu\n" " branch notoc %lu\n" " branch both %lu\n" @@ -4261,7 +4389,7 @@ " plt call both %lu\n" " global entry %lu" msgstr "" -" branch %lu\n" +"%s branch %lu\n" " branch toc adj %lu\n" " branch notoc %lu\n" " branch both %lu\n" @@ -4275,178 +4403,185 @@ " plt call both %lu\n" " global entry %lu" -#: elf64-ppc.c:13583 +#: elf64-ppc.c:14913 #, c-format msgid "%H: %s used with TLS symbol `%pT'\n" msgstr "%H: %s usado com símbolo TLS \"%T\"\n" -#: elf64-ppc.c:13585 +#: elf64-ppc.c:14915 #, c-format msgid "%H: %s used with non-TLS symbol `%pT'\n" msgstr "%H: %s usado com símbolo não-TLS \"%T\"\n" -#: elf64-ppc.c:14245 +#: elf64-ppc.c:15670 #, c-format msgid "%H: call to `%pT' lacks nop, can't restore toc; (plt call stub)\n" msgstr "%H: chamada a \"%pT\" com nop em falta, impossível restaurar toc; (plt call stub)\n" -#: elf64-ppc.c:14251 +#: elf64-ppc.c:15676 #, c-format msgid "%H: call to `%pT' lacks nop, can't restore toc; (toc save/adjust stub)\n" msgstr "%H: chamada a \"%pT\" com nop em falta, impossível restaurar toc; (toc save/adjust stub)\n" -#: elf64-ppc.c:14985 +#: elf64-ppc.c:16564 #, c-format msgid "%H: %s for indirect function `%pT' unsupported\n" msgstr "%H: %s para função indirecta \"%T\" não suportado\n" -#: elf64-ppc.c:15097 +#: elf64-ppc.c:16649 +#, c-format +msgid "%X%P: %pB: %s against %pT is not supported by glibc as a dynamic relocation\n" +msgstr "%X%P: %pB: %s contra %pT não é suportado por glibc como relocalização dinâmica\n" + +#: elf64-ppc.c:16704 #, c-format msgid "%P: %pB: %s is not supported for `%pT'\n" msgstr "%P: %pB: %s não é suportado para \"%T\"\n" -#: elf64-ppc.c:15326 +#: elf64-ppc.c:16963 #, c-format msgid "%H: error: %s not a multiple of %u\n" msgstr "%H: erro: %s não é múltiplo de %u\n" -#: elf64-ppc.c:15349 +#: elf64-ppc.c:16986 #, c-format msgid "%H: unresolvable %s against `%pT'\n" msgstr "%H: %s insolúvel contra \"%T\"\n" -#: elf64-ppc.c:15446 +#: elf64-ppc.c:17131 #, c-format msgid "%H: %s against `%pT': error %d\n" msgstr "%H: %s contra \"%T\": erro %d\n" -#: elf64-s390.c:2576 +#: elf64-s390.c:2446 #, c-format msgid "%pB: `%s' non-PLT reloc for symbol defined in shared library and accessed from executable (rebuild file with -fPIC ?)" msgstr "%pB: \"%s\" reloc não-PLT para símbolo definido em biblioteca partilhada e acedido a partir de executável (reconstrua o ficheiro com -fPIC ?)" -#: elf64-sparc.c:109 elfcode.h:1471 -#, c-format -msgid "%pB(%pA): relocation %d has invalid symbol index %ld" -msgstr "%pB(%pA): relocalização %d tem índice de símbolos inválido %ld" - -#: elf64-sparc.c:467 +#: elf64-sparc.c:478 #, c-format msgid "%pB: only registers %%g[2367] can be declared using STT_REGISTER" msgstr "%pB: só registos %%g[2367] podem ser declarados usando STT_REGISTER" -#: elf64-sparc.c:488 +#: elf64-sparc.c:499 #, c-format msgid "register %%g%d used incompatibly: %s in %pB, previously %s in %pB" msgstr "Registo %%g%d usa incompatibilidade: %s em %pB, previamente %s em %pB" -#: elf64-sparc.c:512 +#: elf64-sparc.c:523 #, c-format msgid "symbol `%s' has differing types: REGISTER in %pB, previously %s in %pB" msgstr "Símbolo \"%s\" tem tipos diferentes: REGISTER em %pB, previamente %s em %pB" -#: elf64-sparc.c:559 +#: elf64-sparc.c:570 #, c-format msgid "Symbol `%s' has differing types: %s in %pB, previously REGISTER in %pB" msgstr "Símbolo \"%s\" tem tipos diferentes: %s em %pB, previamente REGISTER em %pB" -#: elf64-sparc.c:691 +#: elf64-sparc.c:702 #, c-format msgid "%pB: linking UltraSPARC specific with HAL specific code" msgstr "%pB: a ligar específico UltraSPARC com código específico HAL" -#: elf64-x86-64.c:1412 +#: elf64-x86-64.c:1417 msgid "hidden symbol " msgstr "símbolo oculto " -#: elf64-x86-64.c:1415 +#: elf64-x86-64.c:1420 msgid "internal symbol " msgstr "símbolo interno " -#: elf64-x86-64.c:1418 elf64-x86-64.c:1422 +#: elf64-x86-64.c:1423 elf64-x86-64.c:1427 msgid "protected symbol " msgstr "símbolo protegido " -#: elf64-x86-64.c:1424 +#: elf64-x86-64.c:1429 msgid "symbol " msgstr "símbolo " -#: elf64-x86-64.c:1425 elf64-x86-64.c:1435 -msgid "; recompile with -fPIC" -msgstr "; recompile com -fPIC" - -#: elf64-x86-64.c:1430 +#: elf64-x86-64.c:1435 msgid "undefined " msgstr "indefinido" -#: elf64-x86-64.c:1439 +#: elf64-x86-64.c:1445 msgid "a shared object" msgstr "um objecto partilhado" -#: elf64-x86-64.c:1441 +#: elf64-x86-64.c:1447 +msgid "; recompile with -fPIC" +msgstr "; recompile com -fPIC" + +#: elf64-x86-64.c:1452 msgid "a PIE object" msgstr "um objecto PIE" -#: elf64-x86-64.c:1443 +#: elf64-x86-64.c:1454 msgid "a PDE object" msgstr "um objecto PDE" -#: elf64-x86-64.c:1446 +#: elf64-x86-64.c:1456 +msgid "; recompile with -fPIE" +msgstr "; recompile com -fPIE" + +#: elf64-x86-64.c:1460 #, c-format msgid "%pB: relocation %s against %s%s`%s' can not be used when making %s%s" msgstr "%pB: relocalização %s contra %s%s\"%s\" não pode ser usada ao fazer %s%s" -#: elf64-x86-64.c:1931 +#: elf64-x86-64.c:1968 #, c-format msgid "%pB: relocation %s against symbol `%s' isn't supported in x32 mode" msgstr "%pB: relocalização %s contra símbolo \"%s\" não é suportada em modo x32" -#: elf64-x86-64.c:2073 +#: elf64-x86-64.c:2124 #, c-format msgid "%pB: '%s' accessed both as normal and thread local symbol" msgstr "%pB: \"%s\" acedido como símbolo local normal e thread em simultâneo" -#: elf64-x86-64.c:2696 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:5302 +#: elf64-x86-64.c:2747 elfnn-aarch64.c:5546 #, c-format msgid "%pB: relocation %s against STT_GNU_IFUNC symbol `%s' has non-zero addend: %" msgstr "%pB: relocalização %s contra STT_GNU_IFUNC símbolo \"%s\" tem adenda não-zero: %#" -#: elf64-x86-64.c:2934 +#: elf64-x86-64.c:2992 #, c-format msgid "%pB: relocation R_X86_64_GOTOFF64 against undefined %s `%s' can not be used when making a shared object" msgstr "%pB: relocalização R_X86_64_GOTOFF64 contra %s \"%s\" indefinido não pode ser usado ao fazer um objecto partilhado" -#: elf64-x86-64.c:2948 +#: elf64-x86-64.c:3006 #, c-format msgid "%pB: relocation R_X86_64_GOTOFF64 against protected %s `%s' can not be used when making a shared object" msgstr "%pB: relocalização R_X86_64_GOTOFF64 contra %s \"%s\" protegido não pode ser usado ao fazer um objecto partilhado" -#: elf64-x86-64.c:3208 +#: elf64-x86-64.c:3283 #, c-format msgid "%pB: addend %s%#x in relocation %s against symbol `%s' at %# in section `%pA' is out of range" msgstr "%pB: adenda %s%#x em relocalização %s contra símbolo \"%s\" em %# na secção \"%pA\" está fora do intervalo" -#: elf64-x86-64.c:3885 +#: elf64-x86-64.c:3417 elflink.c:13267 +msgid "%F%P: corrupt input: %pB\n" +msgstr "%F%P: entrada corrupta: %pB\n" + +#: elf64-x86-64.c:4101 msgid "%F%P: failed to convert GOTPCREL relocation; relink with --no-relax\n" msgstr "%F%P: falha ao converter relocalização GOTPCREL; religue com --no-relax\n" -#: elf64-x86-64.c:4043 +#: elf64-x86-64.c:4259 #, c-format msgid "%F%pB: PC-relative offset overflow in PLT entry for `%s'\n" msgstr "%F%pB: transporte de desvio PC-relative em entrada PLT para \"%s\"\n" -#: elf64-x86-64.c:4106 +#: elf64-x86-64.c:4322 #, c-format msgid "%F%pB: branch displacement overflow in PLT entry for `%s'\n" msgstr "%F%pB: transporte em deslocamento do ramo em entrada PLT para \"%s\n" -#: elf64-x86-64.c:4159 +#: elf64-x86-64.c:4375 #, c-format msgid "%F%pB: PC-relative offset overflow in GOT PLT entry for `%s'\n" msgstr "%F%pB: transporte de desvio PC-relative em entrada GOT PLT para \"%s\"\n" -#: elfcode.h:323 +#: elfcode.h:326 msgid "warning: %pB has a corrupt section with a size (%" msgstr "aviso: %pB tem uma secção corrompida com um tamanho (%" @@ -4455,656 +4590,813 @@ msgid "warning: %pB has a corrupt string table index - ignoring" msgstr "aviso: %pB tem um índice de tabela de cadeia corrompido - a ignorar" -#: elfcode.h:1212 +#: elfcode.h:1228 #, c-format msgid "%pB: version count (%) does not match symbol count (%ld)" msgstr "%pB: nº de versão (%#) não corresponde ao nº de símbolos (%ld)" -#: elfcore.h:300 +#: elfcore.h:308 #, c-format msgid "warning: %pB is truncated: expected core file size >= %, found: %" msgstr "aviso: %pB está truncado: esperado tamanho do ficheiro de núcleo >= %, obtido: %" -#: elflink.c:1367 +#: elflink.c:1362 #, c-format msgid "%s: TLS definition in %pB section %pA mismatches non-TLS definition in %pB section %pA" msgstr "%s: definição TLS em secção %pB %pA não corresponde a definição não-TLS em secção %pB %pA" -#: elflink.c:1373 +#: elflink.c:1368 #, c-format msgid "%s: TLS reference in %pB mismatches non-TLS reference in %pB" msgstr "%s: referência TLS em %pB não corresponde a referência não-TLS em %pB" -#: elflink.c:1379 +#: elflink.c:1374 #, c-format msgid "%s: TLS definition in %pB section %pA mismatches non-TLS reference in %pB" msgstr "%s: definição TLS em secção %pB %pA não corresponde a referência não-TLS em %pB" -#: elflink.c:1385 +#: elflink.c:1380 #, c-format msgid "%s: TLS reference in %pB mismatches non-TLS definition in %pB section %pA" msgstr "%s: referência TLS em %pB não corresponde a definição não-TLS em secção %pB %pA" -#: elflink.c:2075 +#: elflink.c:2071 #, c-format msgid "%pB: unexpected redefinition of indirect versioned symbol `%s'" msgstr "%pB: redefinição de símbolo com versão indirecto \"%s\" inesperada" -#: elflink.c:2452 +#: elflink.c:2448 #, c-format msgid "%pB: version node not found for symbol %s" msgstr "%pB: nó de versão não encontrado para símbolo %s" -#: elflink.c:2541 +#: elflink.c:2539 #, c-format msgid "%pB: bad reloc symbol index (%# >= %#lx) for offset %# in section `%pA'" msgstr "%pB: mau índice de símbolo de reloc (%# >= %#lx) para desvio %# na secção \"%pA\"" -#: elflink.c:2553 +#: elflink.c:2551 #, c-format msgid "%pB: non-zero symbol index (%#) for offset %# in section `%pA' when the object file has no symbol table" msgstr "%pB: índice de símbolo não-zero (%#) para desvio %# na secção \"%pA\" onde o ficheiro objecto não tem tabela de símbolo" -#: elflink.c:2744 +#: elflink.c:2740 #, c-format msgid "%pB: relocation size mismatch in %pB section %pA" msgstr "%pB: tamanho de relocalização trocado na secção %pB %pA" -#: elflink.c:3066 +#: elflink.c:3069 #, c-format msgid "warning: type and size of dynamic symbol `%s' are not defined" msgstr "aviso: tipo e tamanho do símbolo dinâmico \"%s\" não estão definidos" -#: elflink.c:3128 +#: elflink.c:3129 msgid "%P: copy reloc against protected `%pT' is dangerous\n" msgstr "%P: cópia de reloc contra \"%T\" protegido é perigosa\n" -#: elflink.c:3932 +#: elflink.c:4064 #, c-format msgid "alternate ELF machine code found (%d) in %pB, expecting %d" msgstr "encontrado código máquina ELF alternativo (%d) em %pB, esperado %d" -#: elflink.c:4598 +#: elflink.c:4534 +#, c-format +msgid "%pB: invalid version offset %lx (max %lx)" +msgstr "%pB: desvio de versão inválido %lx (máx %lx)" + +#: elflink.c:4602 +#, c-format +msgid "%pB: %s local symbol at index %lu (>= sh_info of %lu)" +msgstr "%pB: %s símbolo local no índice %lu (>= sh_info de %lu)" + +#: elflink.c:4750 +#, c-format +msgid "%pB: not enough version information" +msgstr "%pB: versão de informação insuficiente" + +#: elflink.c:4788 #, c-format msgid "%pB: %s: invalid version %u (max %d)" msgstr "%pB: %s: versão %u inválida (máx %d)" -#: elflink.c:4635 +#: elflink.c:4825 #, c-format msgid "%pB: %s: invalid needed version %d" msgstr "%pB: %s: versão necessária %d inválida" -#: elflink.c:5054 +#: elflink.c:5231 #, c-format msgid "%pB: undefined reference to symbol '%s'" msgstr "%pB: referência indefinida a símbolo \"%s\"" -#: elflink.c:6130 +#: elflink.c:6315 #, c-format msgid "%pB: stack size specified and %s set" msgstr "%pB: tamanho de stack especificado e definido como %s" -#: elflink.c:6134 +#: elflink.c:6319 #, c-format msgid "%pB: %s not absolute" msgstr "%pB: %s não absoluto" -#: elflink.c:6331 +#: elflink.c:6516 #, c-format msgid "%s: undefined version: %s" msgstr "%s: versão indefinida: %s" -#: elflink.c:6902 +#: elflink.c:7088 #, c-format msgid "%pB: .preinit_array section is not allowed in DSO" msgstr "%pB: secção .preinit_array não é permitida em DSO" -#: elflink.c:8359 +#: elflink.c:8602 #, c-format msgid "undefined %s reference in complex symbol: %s" msgstr "referência %s indefinida em símbolo complexo: %s" -#: elflink.c:8514 +#: elflink.c:8757 #, c-format msgid "unknown operator '%c' in complex symbol" msgstr "operador \"%c\" desconhecido em símbolo complexo" #. PR 21524: Let the user know if a symbol was removed by garbage collection. -#: elflink.c:8852 +#: elflink.c:9095 #, c-format msgid "%pB:%pA: error: relocation references symbol %s which was removed by garbage collection" msgstr "%pB:%pA: erro: relocalização referencia símbolo %s que foi removido pela recolha de lixo." -#: elflink.c:8855 +#: elflink.c:9098 #, c-format msgid "%pB:%pA: error: try relinking with --gc-keep-exported enabled" msgstr "%pB:%pA: erro: tente religar com --gc-keep-exported activado." -#: elflink.c:9091 elflink.c:9109 elflink.c:9148 elflink.c:9166 +#: elflink.c:9343 elflink.c:9361 elflink.c:9400 elflink.c:9418 #, c-format msgid "%pB: unable to sort relocs - they are in more than one size" msgstr "%pB: impossível ordenar relocs - têm mais de um tamanho" #. The section size is not divisible by either - #. something is wrong. -#: elflink.c:9125 elflink.c:9182 +#: elflink.c:9377 elflink.c:9434 #, c-format msgid "%pB: unable to sort relocs - they are of an unknown size" msgstr "%pB: impossível ordenar relocs - têm um tamanho desconhecido" -#: elflink.c:9234 +#: elflink.c:9486 msgid "not enough memory to sort relocations" msgstr "Sem memória suficiente para ordenar relocalizações" -#: elflink.c:9502 +#: elflink.c:9767 #, c-format msgid "%pB: too many sections: %d (>= %d)" msgstr "%pB: demasiadas secções: %d (>= %d)" -#: elflink.c:9782 +#: elflink.c:10043 #, c-format msgid "%pB: internal symbol `%s' in %pB is referenced by DSO" msgstr "%pB: símbolo \"%s\" interno em %pB é referenciado por DSO" -#: elflink.c:9785 +#: elflink.c:10046 #, c-format msgid "%pB: hidden symbol `%s' in %pB is referenced by DSO" msgstr "%pB: símbolo \"%s\" oculto em %pB é referenciado por DSO" -#: elflink.c:9788 +#: elflink.c:10049 #, c-format msgid "%pB: local symbol `%s' in %pB is referenced by DSO" msgstr "%pB: símbolo \"%s\" local em %pB é referenciado por DSO" -#: elflink.c:9874 +#: elflink.c:10135 #, c-format msgid "%pB: could not find output section %pA for input section %pA" msgstr "%pB: impossível encontrar a secção de saída %pA para a secção de entrada %pA" -#: elflink.c:10028 +#: elflink.c:10289 #, c-format msgid "%pB: protected symbol `%s' isn't defined" msgstr "%pB: símbolo \"%s\" protegido não está definido" -#: elflink.c:10031 +#: elflink.c:10292 #, c-format msgid "%pB: internal symbol `%s' isn't defined" msgstr "%pB: símbolo \"%s\" não está definido" -#: elflink.c:10034 +#: elflink.c:10295 #, c-format msgid "%pB: hidden symbol `%s' isn't defined" msgstr "%pB: símbolo \"%s\" oculto não está definido" -#: elflink.c:10066 +#: elflink.c:10327 #, c-format msgid "%pB: no symbol version section for versioned symbol `%s'" msgstr "%pB: sem secção de versão de símbolo para o símbolo com versão \"%s\"" -#: elflink.c:10679 +#: elflink.c:10699 +#, c-format +msgid "warning: --enable-non-contiguous-regions discards section `%s' from '%s'\n" +msgstr "aviso: --enable-non-contiguous-regions descarta a secção \"%s\" de \"%s\"\n" + +#: elflink.c:10951 #, c-format msgid "error: %pB: size of section %pA is not multiple of address size" msgstr "erro: %pB: tamanho da secção %pA não é múltiplo do tamanho do endereço" -#: elflink.c:10724 +#: elflink.c:10996 #, c-format msgid "error: %pB contains a reloc (%#) for section %pA that references a non-existent global symbol" msgstr "erro: %pB contém uma reloc (%#) para a secção %pA que referencia um símbolo global inexistente" -#: elflink.c:11484 +#: elflink.c:11739 #, c-format msgid "%pA has both ordered [`%pA' in %pB] and unordered [`%pA' in %pB] sections" msgstr "%pA tem secções ordenadas [\"%pA\" em %pB] e desordenadas [\"%pA\" em %pB] em simultâneo" -#: elflink.c:11490 +#: elflink.c:11745 #, c-format msgid "%pA has both ordered and unordered sections" msgstr "%pA tem secções ordenadas e desordenadas em simultâneo" -#: elflink.c:11592 +#: elflink.c:11851 #, c-format msgid "%pB: no symbol found for import library" msgstr "%pB: sem símbolo para biblioteca de importação" -#: elflink.c:12225 +#: elflink.c:12488 #, c-format msgid "%pB: file class %s incompatible with %s" msgstr "%pB: classe de ficheiro %s incompatível com %s" -#: elflink.c:12442 +#: elflink.c:12704 #, c-format msgid "%pB: failed to generate import library" msgstr "%pB: falha ao gerar biblioteca de importação" -#: elflink.c:12561 +#: elflink.c:12823 #, c-format msgid "warning: %s section has zero size" msgstr "aviso: secção %s tem tamanho zero" -#: elflink.c:12609 +#: elflink.c:12871 #, c-format msgid "warning: section '%s' is being made into a note" msgstr "aviso: a secção \"%s\" está a ser tornada numa nota" -#: elflink.c:12701 +#: elflink.c:12964 msgid "%P%X: read-only segment has dynamic relocations\n" msgstr "%P%X: segmento só de leitura tem relocalizações dinâmicas.\n" -#: elflink.c:12704 -msgid "%P: warning: creating a DT_TEXTREL in a shared object\n" -msgstr "%P: aviso: a criar uma DT_TEXTREL num objecto partilhado.\n" +#: elflink.c:12967 +msgid "%P: warning: creating DT_TEXTREL in a shared object\n" +msgstr "%P: aviso: a criar DT_TEXTREL num objecto partilhado.\n" + +#: elflink.c:12970 +msgid "%P: warning: creating DT_TEXTREL in a PIE\n" +msgstr "%P: aviso: a criar DT_TEXTREL num PIE.\n" -#: elflink.c:12829 +#: elflink.c:13095 msgid "%P%X: can not read symbols: %E\n" msgstr "%P%X: impossível ler os símbolos: %E\n" -#: elflink.c:13002 -msgid "%F%P: corrupt input: %pB\n" -msgstr "%F%P: entrada corrupta: %pB\n" +#: elflink.c:13500 +msgid "%F%P: %pB(%pA): error: need linked-to section for --gc-sections\n" +msgstr "%F%P: %pB(%pA): erro: necessária secção linked-to para --gc-sections\n" -#: elflink.c:13668 +#: elflink.c:13961 #, c-format msgid "%pB: %pA+%#: no symbol found for INHERIT" msgstr "%pB: %pA+%#: sem símbolo para INHERIT" -#: elflink.c:13844 +#: elflink.c:14002 +#, c-format +msgid "%pB: section '%pA': corrupt VTENTRY entry" +msgstr "%pB: secção \"%pA\":entrada VTENTRY corrompida" + +#: elflink.c:14145 #, c-format msgid "unrecognized INPUT_SECTION_FLAG %s\n" msgstr "INPUT_SECTION_FLAG %s não reconhecida\n" -#: elfxx-mips.c:1450 +#: elflink.c:14891 +#, c-format +msgid "%P: %pB: warning: relocation against `%s' in read-only section `%pA'\n" +msgstr "%P: %pB: aviso: relocalização contra \"%s\" em secção só de leitura \"%pA\"\n" + +#: elflink.c:14980 +msgid "%P: warning: GNU indirect functions with DT_TEXTREL may result in a segfault at runtime; recompile with %s\n" +msgstr "%P: warning: funções indirectas GNU com DT_TEXTREL podem resultar numa segfault na execução; recompile com %s\n" + +#: elfxx-aarch64.c:477 +#, c-format +msgid "%pB: warning: Weak TLS is implementation defined and may not work as expected" +msgstr "%pB: aviso: Weak TLS é definido pela implementação e pode não funcionar como esperado" + +#: elfxx-aarch64.c:738 elfnn-aarch64.c:9902 elfnn-aarch64.c:9909 +#, c-format +msgid "%pB: warning: BTI turned on by -z force-bti when all inputs do not have BTI in NOTE section." +msgstr "%pB: aviso: BTI ligado por -z force-bti quando todas as entradas não têm BTI na secção NOTE." + +#: elfxx-aarch64.c:758 elfxx-x86.c:2554 +msgid "%F%P: failed to create GNU property section\n" +msgstr "%F%P: falha ao criar secção de propriedade GNU\n" + +#: elfxx-aarch64.c:762 elfxx-x86.c:2559 +#, c-format +msgid "%F%pA: failed to align section\n" +msgstr "%F%pA: falha ao alinhar secção\n" + +#: elfxx-aarch64.c:812 +#, c-format +msgid "error: %pB: " +msgstr "erro: %pB: " + +#: elfxx-mips.c:1507 msgid "static procedure (no name)" msgstr "procedimento estático (sem nome)" -#: elfxx-mips.c:5718 +#: elfxx-mips.c:5782 msgid "MIPS16 and microMIPS functions cannot call each other" msgstr "funções MIPS16 e microMIPS não se podem chamar entre si" -#: elfxx-mips.c:6485 +#: elfxx-mips.c:6547 msgid "%X%H: unsupported JALX to the same ISA mode\n" msgstr "%X%H: JALX não suportado para o mesmo modo ISA\n" -#: elfxx-mips.c:6518 +#: elfxx-mips.c:6580 msgid "%X%H: unsupported jump between ISA modes; consider recompiling with interlinking enabled\n" msgstr "%X%H: salto não suportado entre modos ISA; considere recompilar com interlinking activado\n" -#: elfxx-mips.c:6563 +#: elfxx-mips.c:6625 msgid "%X%H: cannot convert branch between ISA modes to JALX: relocation out of range\n" msgstr "%X%H: impossível converter ramo entre modos ISA para JALX: relocalização fora do intervalo\n" -#: elfxx-mips.c:6575 +#: elfxx-mips.c:6637 msgid "%X%H: unsupported branch between ISA modes\n" msgstr "%X%H: ramo não suportado entre modos ISA\n" -#: elfxx-mips.c:7223 +#: elfxx-mips.c:7286 #, c-format msgid "%pB: incorrect `.reginfo' section size; expected %, got %" msgstr "%pB: tamanho de secção \"reginfo\" incorrecto; esperado %, obtido %" -#: elfxx-mips.c:7267 elfxx-mips.c:7502 +#: elfxx-mips.c:7330 elfxx-mips.c:7567 #, c-format msgid "%pB: warning: bad `%s' option size %u smaller than its header" msgstr "%pB: aviso: mau tamanho de opção \"%s\" %u menor que o seu cabeçalho" -#: elfxx-mips.c:8300 elfxx-mips.c:8426 +#: elfxx-mips.c:8374 elfxx-mips.c:8500 #, c-format msgid "%pB: warning: cannot determine the target function for stub section `%s'" msgstr "%pB: aviso: impossível determinar a função alvo para secção fictícia \"%s\"" -#: elfxx-mips.c:8558 +#: elfxx-mips.c:8632 #, c-format msgid "%pB: malformed reloc detected for section %s" msgstr "%pB: reloc mal formada detectada para secção %s" -#: elfxx-mips.c:8658 +#: elfxx-mips.c:8731 #, c-format msgid "%pB: GOT reloc at %# not expected in executables" msgstr "%pB: reloc GOT em %# não esperada em executáveis" -#: elfxx-mips.c:8796 +#: elfxx-mips.c:8871 #, c-format msgid "%pB: CALL16 reloc at %# not against global symbol" msgstr "%pB: reloc CALL16 em %# não contra símbolo global" -#: elfxx-mips.c:9086 +#: elfxx-mips.c:9174 #, c-format msgid "%X%H: relocation %s against `%s' cannot be used when making a shared object; recompile with -fPIC\n" msgstr "%X%H: relocalização %s contra \"%s\" não pode ser usada a fazer um objecto partilhado; recompile com -fPIC\n" -#: elfxx-mips.c:9422 +#: elfxx-mips.c:9300 +#, c-format +msgid "IFUNC symbol %s in dynamic symbol table - IFUNCS are not supported" +msgstr "Símbolo IFUNC %s na tabela dinâmica de símbolos - IFUNCS não são suportados" + +#: elfxx-mips.c:9303 +#, c-format +msgid "non-dynamic symbol %s in dynamic symbol table" +msgstr "símbolo não-dinâmico %s em tabela dinâmica de símbolos" + +#: elfxx-mips.c:9523 #, c-format msgid "non-dynamic relocations refer to dynamic symbol %s" msgstr "relocalizações não-dinâmicas referem-se a símbolo dinâmico %s" -#: elfxx-mips.c:10350 +#: elfxx-mips.c:10457 #, c-format msgid "%pB: can't find matching LO16 reloc against `%s' for %s at %# in section `%pA'" msgstr "%pB: impossível encontrar reloc LO16 correspondente contra \"%s\" para %s em %# na secção \"%pA\"" -#: elfxx-mips.c:10490 +#: elfxx-mips.c:10597 msgid "small-data section exceeds 64KB; lower small-data size limit (see option -G)" msgstr "secção small-data excede 64KB; baixe o limite de tamanho de small-data (veja a opção -G)" -#: elfxx-mips.c:10509 +#: elfxx-mips.c:10616 msgid "cannot convert a jump to JALX for a non-word-aligned address" msgstr "Impossível converter um salto para JALX para um endereço não alinhado por word" -#: elfxx-mips.c:10512 +#: elfxx-mips.c:10619 msgid "jump to a non-word-aligned address" msgstr "Salto para um endereço não alinhado por word" -#: elfxx-mips.c:10513 +#: elfxx-mips.c:10620 msgid "jump to a non-instruction-aligned address" msgstr "Salto para um endereço não alinhado por instrução" -#: elfxx-mips.c:10516 +#: elfxx-mips.c:10623 msgid "cannot convert a branch to JALX for a non-word-aligned address" msgstr "Impossível converter um ramo para JALX para um endereço não alinhado por word" -#: elfxx-mips.c:10518 +#: elfxx-mips.c:10625 msgid "branch to a non-instruction-aligned address" msgstr "Ramo para um endereço não alinhado por instrução" -#: elfxx-mips.c:10520 +#: elfxx-mips.c:10627 msgid "PC-relative load from unaligned address" msgstr "Carga PC-relative de endereço não alinhado" -#: elfxx-mips.c:10798 +#: elfxx-mips.c:10927 #, c-format msgid "%pB: `%pA' entry VMA of %# outside the 32-bit range supported; consider using `-Ttext-segment=...'" msgstr "%pB: entrada VMA \"%pA\" de %# fora do intervalo de 32-bitsuportado; considere usar \"-Ttext-segment=...\"" -#: elfxx-mips.c:10911 elfxx-mips.c:11484 +#: elfxx-mips.c:11042 elfxx-mips.c:11629 #, c-format msgid "%pB: `%pA' offset of % from `%pA' beyond the range of ADDIUPC" msgstr "%pB: desvio \"%pA\" de % de \"%pA\" além do intervalo de ADDIUPC" -#: elfxx-mips.c:11456 +#: elfxx-mips.c:11601 #, c-format msgid "%pB: `%pA' start VMA of %# outside the 32-bit range supported; consider using `-Ttext-segment=...'" msgstr "%pB: início VMA \"%pA\" de %# fora do intervalo 32-bit suportado; considere usar \"-Ttext-segment=...\"" -#: elfxx-mips.c:14397 +#: elfxx-mips.c:14556 #, c-format msgid "%pB: unknown architecture %s" msgstr "%pB: arquitectura desconhecida %s" -#: elfxx-mips.c:14931 +#: elfxx-mips.c:15090 #, c-format msgid "%pB: illegal section name `%pA'" msgstr "%pB: nome de secção ilegal \"%pA\"" -#: elfxx-mips.c:15208 +#: elfxx-mips.c:15367 #, c-format msgid "%pB: warning: linking abicalls files with non-abicalls files" msgstr "%pB: aviso: a ligar ficheiros abicalls com ficheiros não-abicalls" -#: elfxx-mips.c:15225 +#: elfxx-mips.c:15384 #, c-format msgid "%pB: linking 32-bit code with 64-bit code" msgstr "%pB: a ligar código 32-bit com código 64-bit" -#: elfxx-mips.c:15257 elfxx-mips.c:15323 elfxx-mips.c:15338 +#: elfxx-mips.c:15416 elfxx-mips.c:15482 elfxx-mips.c:15497 #, c-format msgid "%pB: linking %s module with previous %s modules" msgstr "%pB: a ligar módulo %s com módulos prévios %s" -#: elfxx-mips.c:15281 +#: elfxx-mips.c:15440 #, c-format msgid "%pB: ABI mismatch: linking %s module with previous %s modules" msgstr "%pB: troca ABI: a ligar módulo %s com módulos prévios %s" -#: elfxx-mips.c:15306 +#: elfxx-mips.c:15465 #, c-format msgid "%pB: ASE mismatch: linking %s module with previous %s modules" msgstr "%pB: troca ASE: a ligar módulo %s com módulos prévios %s" -#: elfxx-mips.c:15440 +#: elfxx-mips.c:15599 #, c-format msgid "warning: %pB uses unknown floating point ABI %d (set by %pB), %pB uses unknown floating point ABI %d" msgstr "Aviso: %pB usa vírgula flutuante ABI %d desconhecida (definida por %pB), %pB usa vírgula flutuante ABI %d desconhecida" -#: elfxx-mips.c:15446 +#: elfxx-mips.c:15605 #, c-format msgid "warning: %pB uses unknown floating point ABI %d (set by %pB), %pB uses %s" msgstr "Aviso: %pB usa vírgula flutuante ABI %d desconhecida (definida por %pB), %pB usa %s" -#: elfxx-mips.c:15452 +#: elfxx-mips.c:15611 #, c-format msgid "warning: %pB uses %s (set by %pB), %pB uses unknown floating point ABI %d" msgstr "Abiso: %pB usa %s (definida por %pB), %pB usa vírgula flutuante ABI %d desconhecida" -#: elfxx-mips.c:15466 +#: elfxx-mips.c:15625 #, c-format msgid "warning: %pB uses %s (set by %pB), %pB uses %s" msgstr "Aviso: %pB usa %s (definida por %pB), %pB usa %s" -#: elfxx-mips.c:15485 +#: elfxx-mips.c:15644 #, c-format msgid "warning: %pB uses %s (set by %pB), %pB uses unknown MSA ABI %d" msgstr "Aviso: %pB usa %s (definida por %pB), %pB usa MSA ABI %d desconhecida" -#: elfxx-mips.c:15497 +#: elfxx-mips.c:15656 #, c-format msgid "warning: %pB uses unknown MSA ABI %d (set by %pB), %pB uses %s" msgstr "Aviso: %pB usa MSA ABI %d desconhecida (definida por %pB), %pB usa %s" -#: elfxx-mips.c:15506 +#: elfxx-mips.c:15665 #, c-format msgid "warning: %pB uses unknown MSA ABI %d (set by %pB), %pB uses unknown MSA ABI %d" msgstr "Aviso: %pB usa MSA ABI %d desconhecida (definida por %pB), %pB usa MSA ABI %d desconhecida" -#: elfxx-mips.c:15568 +#: elfxx-mips.c:15727 #, c-format msgid "%pB: endianness incompatible with that of the selected emulation" msgstr "%pB: endianness incompatível com a da emulação seleccionada" -#: elfxx-mips.c:15582 +#: elfxx-mips.c:15741 #, c-format msgid "%pB: ABI is incompatible with that of the selected emulation" msgstr "%pB: ABI incompatível com a da emulação seleccionada" -#: elfxx-mips.c:15634 +#: elfxx-mips.c:15794 #, c-format msgid "%pB: warning: inconsistent ISA between e_flags and .MIPS.abiflags" msgstr "%pB: aviso: ISA inconsistente entre e_flags e .MIPS.abiflags" -#: elfxx-mips.c:15639 +#: elfxx-mips.c:15799 #, c-format msgid "%pB: warning: inconsistent FP ABI between .gnu.attributes and .MIPS.abiflags" msgstr "%pB: aviso: FP ABI inconsistente entre .gnu.attributes e .MIPS.abiflags" -#: elfxx-mips.c:15643 +#: elfxx-mips.c:15803 #, c-format msgid "%pB: warning: inconsistent ASEs between e_flags and .MIPS.abiflags" msgstr "%pB: aviso: ASEs inconsistente entre e_flags e .MIPS.abiflags" -#: elfxx-mips.c:15650 +#: elfxx-mips.c:15810 #, c-format msgid "%pB: warning: inconsistent ISA extensions between e_flags and .MIPS.abiflags" msgstr "%pB: aviso: extensões ISA inconsistentes entre e_flags e .MIPS.abiflags" -#: elfxx-mips.c:15654 +#: elfxx-mips.c:15814 #, c-format msgid "%pB: warning: unexpected flag in the flags2 field of .MIPS.abiflags (0x%lx)" msgstr "%pB: aviso: bandeira inesperada no campo flags2 de .MIPS.abiflags (0x%lx)" -#: elfxx-mips.c:15843 +#: elfxx-mips.c:16005 msgid "-mips32r2 -mfp64 (12 callee-saved)" msgstr "-mips32r2 -mfp64 (12 callee-saved)" -#: elfxx-mips.c:15905 elfxx-mips.c:15916 +#: elfxx-mips.c:16067 elfxx-mips.c:16078 msgid "None" msgstr "Nenhum" -#: elfxx-mips.c:15907 elfxx-mips.c:15976 +#: elfxx-mips.c:16069 elfxx-mips.c:16138 msgid "Unknown" msgstr "Desconhecido" -#: elfxx-mips.c:15987 +#: elfxx-mips.c:16149 #, c-format msgid "Hard or soft float\n" msgstr "Flutuante rígido ou suave\n" -#: elfxx-mips.c:15990 +#: elfxx-mips.c:16152 #, c-format msgid "Hard float (double precision)\n" msgstr "Flutuante rígido (precisão dupla)\n" -#: elfxx-mips.c:15993 +#: elfxx-mips.c:16155 #, c-format msgid "Hard float (single precision)\n" msgstr "Flutuante rígido (precisão simples)\n" -#: elfxx-mips.c:15996 +#: elfxx-mips.c:16158 #, c-format msgid "Soft float\n" msgstr "Flutuante suave\n" -#: elfxx-mips.c:15999 +#: elfxx-mips.c:16161 #, c-format msgid "Hard float (MIPS32r2 64-bit FPU 12 callee-saved)\n" msgstr "Flutuante rígido (MIPS32r2 64-bit FPU 12 callee-saved)\n" -#: elfxx-mips.c:16002 +#: elfxx-mips.c:16164 #, c-format msgid "Hard float (32-bit CPU, Any FPU)\n" msgstr "Flutuante rígido (32-bit CPU, qualquer FPU)\n" -#: elfxx-mips.c:16005 +#: elfxx-mips.c:16167 #, c-format msgid "Hard float (32-bit CPU, 64-bit FPU)\n" msgstr "Flutuante rígido (32-bit CPU, 64-bit FPU)\n" -#: elfxx-mips.c:16008 +#: elfxx-mips.c:16170 #, c-format msgid "Hard float compat (32-bit CPU, 64-bit FPU)\n" msgstr "Comp. flutuante rígido (32-bit CPU, 64-bit FPU)\n" -#: elfxx-mips.c:16040 +#: elfxx-mips.c:16202 #, c-format msgid " [abi=O32]" msgstr " [abi=O32]" -#: elfxx-mips.c:16042 +#: elfxx-mips.c:16204 #, c-format msgid " [abi=O64]" msgstr " [abi=O64]" -#: elfxx-mips.c:16044 +#: elfxx-mips.c:16206 #, c-format msgid " [abi=EABI32]" msgstr " [abi=EABI32]" -#: elfxx-mips.c:16046 +#: elfxx-mips.c:16208 #, c-format msgid " [abi=EABI64]" msgstr " [abi=EABI64]" -#: elfxx-mips.c:16048 +#: elfxx-mips.c:16210 #, c-format msgid " [abi unknown]" msgstr " [abi desconhecida]" -#: elfxx-mips.c:16050 +#: elfxx-mips.c:16212 #, c-format msgid " [abi=N32]" msgstr " [abi=N32]" -#: elfxx-mips.c:16052 +#: elfxx-mips.c:16214 #, c-format msgid " [abi=64]" msgstr " [abi=64]" -#: elfxx-mips.c:16054 +#: elfxx-mips.c:16216 #, c-format msgid " [no abi set]" msgstr " [sem abi definida]" -#: elfxx-mips.c:16079 +#: elfxx-mips.c:16241 #, c-format msgid " [unknown ISA]" msgstr " [ISA desconhecida]" -#: elfxx-mips.c:16099 +#: elfxx-mips.c:16261 #, c-format msgid " [not 32bitmode]" msgstr " [não 32bitmode]" -#: elfxx-sparc.c:3113 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:5286 +#: elfxx-riscv.c:1063 +#, c-format +msgid "-march=%s: Expect number after `%dp'." +msgstr "-march=%s: esperado número após \"%dp\"." + +#: elfxx-riscv.c:1174 +#, c-format +msgid "-march=%s: rv%de is not a valid base ISA" +msgstr "-march=%s: rv%de não é uma base ISA válida" + +#: elfxx-riscv.c:1214 +#, c-format +msgid "-march=%s: first ISA subset must be `e', `i' or `g'" +msgstr "-march=%s: o 1º sub-conjunto ISA tem de ser \"e\", \"i\" ou \"g\"" + +#: elfxx-riscv.c:1242 +#, c-format +msgid "-march=%s: unsupported ISA subset `%c'" +msgstr "-march=%s: sub-conjunto ISA \"%c\" não suportado" + +#: elfxx-riscv.c:1245 +#, c-format +msgid "-march=%s: ISA string is not in canonical order. `%c'" +msgstr "-march=%s: cadeia ISA não está na ordem canónica. \"%c\"" + +#: elfxx-riscv.c:1364 +#, c-format +msgid "-march=%s: Invalid or unknown %s ISA extension: '%s'" +msgstr "-march=%s: extensão ISA %s inválida ou desconhecida: \"%s\"" + +#: elfxx-riscv.c:1375 +#, c-format +msgid "-march=%s: Duplicate %s ISA extension: '%s'" +msgstr "-march=%s: extensão ISA %s duplicada: \"%s\"" + +#: elfxx-riscv.c:1386 +#, c-format +msgid "-march=%s: %s ISA extension not in alphabetical order: '%s' must come before '%s'." +msgstr "-march=%s: extensão ISA %s não está em ordem alfabética: \"%s\" tem de estar antes de \"%s\"." + +#: elfxx-riscv.c:1407 +#, c-format +msgid "-march=%s: %s must separate with _" +msgstr "-march=%s: %s tem de separar com _" + +#: elfxx-riscv.c:1523 +#, c-format +msgid "-march=%s: ISA string must begin with rv32 or rv64" +msgstr "-march=%s: cadeia ISA tem de começar por rv32 ou rv64" + +#: elfxx-riscv.c:1544 +#, c-format +msgid "-march=%s: unexpected ISA string at end: %s" +msgstr "-march=%s: cadeia ISA inesperada no final: %s" + +#: elfxx-riscv.c:1553 +#, c-format +msgid "-march=%s: rv32e does not support the `f' extension" +msgstr "-march=%s: rv32e não suporta a extensão \"f\"" + +#: elfxx-riscv.c:1562 +#, c-format +msgid "-march=%s: `d' extension requires `f' extension" +msgstr "-march=%s: extensão \"d\" requer a extensão \"f\"" + +#: elfxx-riscv.c:1571 +#, c-format +msgid "-march=%s: `q' extension requires `d' extension" +msgstr "-march=%s: extensão \"q\" requer a extensão \"d\"" + +#: elfxx-riscv.c:1579 +#, c-format +msgid "-march=%s: rv32 does not support the `q' extension" +msgstr "-march=%s: rv32 não suporta a extensão \"q\"" + +#: elfxx-sparc.c:3002 elfnn-aarch64.c:5530 #, c-format msgid "%pB: relocation %s against STT_GNU_IFUNC symbol `%s' isn't handled by %s" msgstr "%pB: relocalização %s contra símbolo STT_GNU_IFUNC \"%s\" não é gerido por %s" -#: elfxx-tilegx.c:4254 +#: elfxx-tilegx.c:4128 #, c-format msgid "%pB: cannot link together %s and %s objects" msgstr "%pB: impossível ligar objectos %s e %s." -#: elfxx-x86.c:578 +#: elfxx-x86.c:976 #, c-format -msgid "%P: %pB: warning: relocation against `%s' in read-only section `%pA'\n" -msgstr "%P: %pB: aviso: relocalização contra \"%s\" em secção só de leitura \"%pA\"\n" +msgid "%F%P: %pB: relocation %s against absolute symbol `%s' in section `%pA' is disallowed\n" +msgstr "%F%P: %pB: relocalização %s contra símbolo absoluto \"%s\" na secção \"%pA\" não é permitida\n" -#: elfxx-x86.c:1027 +#: elfxx-x86.c:1058 msgid "%P: %pB: warning: relocation in read-only section `%pA'\n" msgstr "%P: %pB: aviso: relocalização em secção só de leitura \"%pA\"\n" -#: elfxx-x86.c:1383 -msgid "%P%X: read-only segment has dynamic IFUNC relocations; recompile with -fPIC\n" -msgstr "%P%X: segmento só de leitura tem relocalizações dinâmicas IFUNC; recompile com -fPIC\n" - -#: elfxx-x86.c:2384 +#: elfxx-x86.c:2314 #, c-format msgid "error: %pB: " msgstr "erro: %pB: " -#: elfxx-x86.c:2609 -msgid "%F%P: failed to create GNU property section\n" -msgstr "%F%P: falha ao criar secção de propriedade GNU\n" +#: elfxx-x86.c:2580 +msgid "%P: %pB: warning: missing %s\n" +msgstr "%P: %pB: aviso: %s em falta\n" + +#: elfxx-x86.c:2582 +msgid "%X%P: %pB: error: missing %s\n" +msgstr "%X%P: %pB: erro: %s em falta\n" + +#: elfxx-x86.c:2605 +msgid "IBT and SHSTK properties" +msgstr "propriedades IBT e SHSTK" + +#: elfxx-x86.c:2607 +msgid "IBT property" +msgstr "propriedade IBT" -#: elfxx-x86.c:2614 -#, c-format -msgid "%F%pA: failed to align section\n" -msgstr "%F%pA: falha ao alinhar secção\n" +#: elfxx-x86.c:2609 +msgid "SHSTK property" +msgstr "propriedade SHSTK" -#: elfxx-x86.c:2760 +#: elfxx-x86.c:2753 msgid "%F%P: failed to create VxWorks dynamic sections\n" msgstr "%F%P: falha ao criar secções dinâmicas VxWorks \n" -#: elfxx-x86.c:2769 +#: elfxx-x86.c:2762 msgid "%F%P: failed to create GOT sections\n" msgstr "%F%P: falha ao criar secções GOT\n" -#: elfxx-x86.c:2787 +#: elfxx-x86.c:2780 msgid "%F%P: failed to create ifunc sections\n" msgstr "%F%P: falha ao criar secções ifunc\n" -#: elfxx-x86.c:2828 +#: elfxx-x86.c:2817 msgid "%F%P: failed to create GOT PLT section\n" msgstr "%F%P: falha ao criar secção GOT PLT\n" -#: elfxx-x86.c:2849 +#: elfxx-x86.c:2836 msgid "%F%P: failed to create IBT-enabled PLT section\n" msgstr "%F%P: falha ao criar secção IBT-enabled PLT\n" -#: elfxx-x86.c:2864 +#: elfxx-x86.c:2850 msgid "%F%P: failed to create BND PLT section\n" msgstr "%F%P: falha ao criar secção BND PLT\n" -#: elfxx-x86.c:2885 +#: elfxx-x86.c:2870 msgid "%F%P: failed to create PLT .eh_frame section\n" msgstr "%F%P: falha ao criar secção PLT .eh_frame\n" -#: elfxx-x86.c:2898 +#: elfxx-x86.c:2883 msgid "%F%P: failed to create GOT PLT .eh_frame section\n" msgstr "%F%P: falha ao criar secção GOT PLT .eh_frame\n" -#: elfxx-x86.c:2912 +#: elfxx-x86.c:2897 msgid "%F%P: failed to create the second PLT .eh_frame section\n" msgstr "%F%P: falha ao criar segunda secção PLT .eh_frame\n" +#: elfxx-x86.c:2939 +msgid "%X%P: attempted static link of dynamic object `%pB'\n" +msgstr "%X%P: tentada ligação estática de objecto dinâmico \"%pB\"\n" + #: ihex.c:230 #, c-format msgid "%pB:%d: unexpected character `%s' in Intel Hex file" @@ -5115,67 +5407,67 @@ msgid "%pB:%u: bad checksum in Intel Hex file (expected %u, found %u)" msgstr "%pB:%u: mau checksum em ficheiro Intel Hex (esperado %u, obtido %u)" -#: ihex.c:394 +#: ihex.c:393 #, c-format msgid "%pB:%u: bad extended address record length in Intel Hex file" msgstr "%pB:%u: mau tamanho de registo de endereço estendido em ficheiro Intel Hex" -#: ihex.c:412 +#: ihex.c:411 #, c-format msgid "%pB:%u: bad extended start address length in Intel Hex file" msgstr "%pB:%u: mau tamanho de endereço inicial estendido em ficheiro Intel Hex" -#: ihex.c:430 +#: ihex.c:429 #, c-format msgid "%pB:%u: bad extended linear address record length in Intel Hex file" msgstr "%pB:%u: mau tamanho de registo em endereço linear estendido em ficheiro Intel Hex" -#: ihex.c:448 +#: ihex.c:447 #, c-format msgid "%pB:%u: bad extended linear start address length in Intel Hex file" msgstr "%pB:%u: mau tamanho de endereço linear inicial estendido em ficheiro Intel Hex" -#: ihex.c:466 +#: ihex.c:465 #, c-format msgid "%pB:%u: unrecognized ihex type %u in Intel Hex file" msgstr "%pB:%u: tipo ihex não reconhecido %u em ficheiro Intel Hex" -#: ihex.c:585 +#: ihex.c:581 #, c-format msgid "%pB: internal error in ihex_read_section" msgstr "%pB: erro interno em ihex_read_section" -#: ihex.c:619 +#: ihex.c:614 #, c-format msgid "%pB: bad section length in ihex_read_section" msgstr "%pB: mau tamanho de secção em ihex_read_section" -#: ihex.c:793 +#: ihex.c:785 #, c-format msgid "%pB 64-bit address %# out of range for Intel Hex file" msgstr "endereço %pB 64-bit %# forta do intervalo para ficheiro Hex Intel" -#: ihex.c:852 +#: ihex.c:843 #, c-format msgid "%pB: address %# out of range for Intel Hex file" msgstr "%pB: endereço %# fora do intervalo para ficheiro Intel Hex" -#: libbfd.c:937 +#: libbfd.c:884 #, c-format msgid "%pB: unable to get decompressed section %pA" msgstr "%pB: impossível obter secção %pA descomprimida" -#: libbfd.c:1101 +#: libbfd.c:1048 #, c-format msgid "Deprecated %s called at %s line %d in %s\n" msgstr "%s obsoleto chamado em %s linha %d em %s\n" -#: libbfd.c:1104 +#: libbfd.c:1051 #, c-format msgid "Deprecated %s called\n" msgstr "%s obsoleto chamado\n" -#: linker.c:1697 +#: linker.c:1696 #, c-format msgid "%pB: indirect symbol `%s' to `%s' is a loop" msgstr "%pB: símbolo indirecto \"%s\" para \"%s\" é um ciclo" @@ -5185,179 +5477,213 @@ msgid "attempt to do relocatable link with %s input and %s output" msgstr "Tentativa de fazer ligação relocalizável com entrada %s e saída %s" -#: linker.c:2853 +#: linker.c:2852 #, c-format msgid "%pB: ignoring duplicate section `%pA'\n" msgstr "%pB: a ignorar secção \"%pA\" duplicada\n" -#: linker.c:2863 linker.c:2873 +#: linker.c:2862 linker.c:2872 #, c-format msgid "%pB: duplicate section `%pA' has different size\n" msgstr "%pB: secção \"%pA\" duplicada tem tamanho diferente\n" -#: linker.c:2882 linker.c:2888 +#: linker.c:2881 linker.c:2887 #, c-format msgid "%pB: could not read contents of section `%pA'\n" msgstr "%pB: impossível ler conteúdo da secção \"%pA\"\n" -#: linker.c:2893 +#: linker.c:2892 #, c-format msgid "%pB: duplicate section `%pA' has different contents\n" msgstr "%pB: secção \"%pA\" duplicada tem conteúdo diferente\n" -#: linker.c:3407 +#: linker.c:3404 #, c-format msgid "%pB: compiled for a big endian system and target is little endian" msgstr "%pB: compilado para um sistema big endian e o alvo é little endian" -#: linker.c:3410 +#: linker.c:3407 #, c-format msgid "%pB: compiled for a little endian system and target is big endian" msgstr "%pB: compilado para um sistema little endian e o alvo é big endian" -#: mach-o.c:632 +#: mach-o-arm.c:172 +msgid "malformed mach-o ARM reloc pair: reloc is first reloc" +msgstr "par de relocalização mach-o ARM mal formado: relocalização é a 1ª relocalização" + +#: mach-o-arm.c:188 +#, c-format +msgid "malformed mach-o ARM reloc pair: invalid length: %d" +msgstr "par de relocalização mach-o ARM mal formado: tamanho inválido: %d" + +#: mach-o-arm.c:203 +#, c-format +msgid "malformed mach-o ARM sectdiff reloc: invalid length: %d" +msgstr "sectdiff de relocalização mach-o ARM mal formado: tamanho inválido: %d" + +#: mach-o-arm.c:218 +#, c-format +msgid "malformed mach-o ARM local sectdiff reloc: invalid length: %d" +msgstr "sectdiff de relocalização local mach-o ARM mal formado: tamanho inválido: %d" + +#: mach-o-arm.c:233 +#, c-format +msgid "malformed mach-o ARM half sectdiff reloc: invalid length: %d" +msgstr "metade de sectdiff de relocalização mach-o ARM mal formado: tamanho inválido: %d" + +#: mach-o-arm.c:265 +#, c-format +msgid "malformed mach-o ARM vanilla reloc: invalid length: %d (pcrel: %d)" +msgstr "relocalização vanilla mach-o ARM mal formada: tamanho inválido: %d (pcrel: %d)" + +#: mach-o-arm.c:329 +#, c-format +msgid "malformed mach-o ARM reloc: unknown reloc type: %d" +msgstr "relocalização mach-o ARM mal formada: tipo de relocalização desconhecido: %d" + +#: mach-o.c:633 #, c-format msgid "" msgstr "" -#: mach-o.c:687 +#: mach-o.c:688 msgid " ()" msgstr "" -#: mach-o.c:698 +#: mach-o.c:699 #, c-format msgid " MACH-O header:\n" msgstr "Cabeçalho MACH-0:\n" -#: mach-o.c:699 +#: mach-o.c:700 #, c-format msgid " magic: %#lx\n" msgstr " magia: %#lx\n" -#: mach-o.c:700 +#: mach-o.c:701 #, c-format msgid " cputype: %#lx (%s)\n" msgstr " tipocpu: %#lx (%s)\n" -#: mach-o.c:702 +#: mach-o.c:703 #, c-format msgid " cpusubtype: %#lx%s\n" msgstr " subtipocpu: %#lx%s\n" -#: mach-o.c:704 +#: mach-o.c:705 #, c-format msgid " filetype: %#lx\n" msgstr " ficheiro: %#lx\n" -#: mach-o.c:705 +#: mach-o.c:706 #, c-format msgid " ncmds: %#lx\n" msgstr " ncmds : %#lx\n" -#: mach-o.c:706 +#: mach-o.c:707 #, c-format msgid " sizeocmds: %#lx\n" msgstr " tamcmds: %#lx\n" -#: mach-o.c:707 +#: mach-o.c:708 #, c-format msgid " flags: %#lx\n" msgstr " bandeiras : %#lx\n" -#: mach-o.c:708 +#: mach-o.c:709 #, c-format msgid " version: %x\n" msgstr " versão: %x\n" #. Urg - what has happened ? -#: mach-o.c:743 +#: mach-o.c:744 #, c-format msgid "incompatible cputypes in mach-o files: %ld vs %ld" msgstr "tipos de cpu incompatíveis em ficheiros mach-0: %ld vs %ld" -#: mach-o.c:912 +#: mach-o.c:913 msgid "bfd_mach_o_canonicalize_symtab: unable to load symbols" msgstr "bfd_mach_o_canonicalize_symtab: impossível carregar símbolos" -#: mach-o.c:2108 +#: mach-o.c:1505 +msgid "malformed mach-o reloc: section index is greater than the number of sections" +msgstr "relocalização mach-o mal formada: índice de secção maior que o número de secções" + +#: mach-o.c:2139 msgid "sorry: modtab, toc and extrefsyms are not yet implemented for dysymtab commands." msgstr "desculpe: modtab, toc e extrefsyms ainda não estão implementados para comandos dysymtab." -#: mach-o.c:2554 +#: mach-o.c:2587 #, c-format msgid "mach-o: there are too many sections (%u) maximum is 255,\n" msgstr "mach-o: há demasiadas secções (%u), o máximo é 255,\n" -#: mach-o.c:2661 +#: mach-o.c:2694 #, c-format msgid "unable to allocate data for load command %#x" msgstr "impossível alocar dados para comando de carga %#x" -#: mach-o.c:2766 +#: mach-o.c:2799 #, c-format msgid "unable to write unknown load command %#x" msgstr "impossível escrever comando de carga %#x desconhecido" -#: mach-o.c:2950 +#: mach-o.c:2983 #, c-format msgid "section address (%#) below start of segment (%#)" msgstr "endereço de secção (%#) abaixo do início do segmento (%#)" -#: mach-o.c:3092 +#: mach-o.c:3125 #, c-format msgid "unable to layout unknown load command %#x" msgstr "impossível dispor comando de carga %#x desconhecido" -#: mach-o.c:3628 +#: mach-o.c:3660 #, c-format msgid "bfd_mach_o_read_section_32: overlarge alignment value: %#lx, using 32 instead" msgstr "bfd_mach_o_read_section_32: valor de alinhamento muito grande: %#lx, a usar 32" -#: mach-o.c:3671 +#: mach-o.c:3703 #, c-format msgid "bfd_mach_o_read_section_64: overlarge alignment value: %#lx, using 32 instead" msgstr "bfd_mach_o_read_section_64: valor de alinhamento muito grande: %#lx, a usar 32" -#: mach-o.c:3722 +#: mach-o.c:3754 #, c-format msgid "bfd_mach_o_read_symtab_symbol: unable to read %d bytes at %u" msgstr "bfd_mach_o_read_symtab_symbol: impossível ler %d bytes em %u" -#: mach-o.c:3741 +#: mach-o.c:3773 #, c-format msgid "bfd_mach_o_read_symtab_symbol: name out of range (%lu >= %u)" msgstr "bfd_mach_o_read_symtab_symbol: nome fora do intervalo (%lu >= %u)" -#: mach-o.c:3824 +#: mach-o.c:3856 #, c-format msgid "bfd_mach_o_read_symtab_symbol: symbol \"%s\" specified invalid section %d (max %lu): setting to undefined" msgstr "bfd_mach_o_read_symtab_symbol: símbolo \"%s\" especificou secção inválida %d (máx %lu): a definir como indefinida" -#: mach-o.c:3843 +#: mach-o.c:3875 #, c-format msgid "bfd_mach_o_read_symtab_symbol: symbol \"%s\" specified invalid type field 0x%x: setting to undefined" msgstr "bfd_mach_o_read_symtab_symbol: símbolo \"%s\" especificou campo de tipo inválido 0x%x: a definir como indefinida" -#: mach-o.c:3920 -msgid "bfd_mach_o_read_symtab_symbols: unable to allocate memory for symbols" -msgstr "bfd_mach_o_read_symtab_symbols: impossível alocar memória para símbolos" - -#: mach-o.c:4931 +#: mach-o.c:5064 #, c-format msgid "%pB: unknown load command %#x" msgstr "%pB: comando de carga %#x desconhecido" -#: mach-o.c:5122 +#: mach-o.c:5263 #, c-format msgid "bfd_mach_o_scan: unknown architecture 0x%lx/0x%lx" msgstr "bfd_mach_o_scan: arquitectura desconhecida 0x%lx/0x%lx" -#: mach-o.c:5227 +#: mach-o.c:5385 #, c-format msgid "unknown header byte-order value %#x" msgstr "valor de cabeçalho byte-order %#x desconhecido" -#: merge.c:878 +#: merge.c:895 #, c-format msgid "%pB: access beyond end of merged section (%)" msgstr "%pB: acesso além do fim da secção unida (%)" @@ -5372,122 +5698,122 @@ msgid "%pB: no core to allocate a symbol %d bytes long" msgstr "%pB: sem núcleo para alocar um símbolo com %d bytes" -#: mmo.c:955 +#: mmo.c:952 #, c-format msgid "%pB: attempt to emit contents at non-multiple-of-4 address %#" msgstr "%pB: tentativa de emitir conteúdo em endereço não múltiplo de 4 %#" -#: mmo.c:1252 +#: mmo.c:1248 #, c-format msgid "%pB: invalid mmo file: initialization value for $255 is not `Main'\n" msgstr "%pB: ficheiro mmo inválido: valor de initialização para $255 não é \"Main\"\n" -#: mmo.c:1399 +#: mmo.c:1395 #, c-format msgid "%pB: unsupported wide character sequence 0x%02X 0x%02X after symbol name starting with `%s'\n" msgstr "%pB: sequência de caracteres largos 0x%02X 0x%02X não suportada após nome de símbolo começado por \"%s\"\n" -#: mmo.c:1633 +#: mmo.c:1628 #, c-format msgid "%pB: invalid mmo file: unsupported lopcode `%d'\n" msgstr "%pB: ficheiro mmo inválido: lopcode \"%d\" não suportado\n" -#: mmo.c:1644 +#: mmo.c:1639 #, c-format msgid "%pB: invalid mmo file: expected YZ = 1 got YZ = %d for lop_quote\n" msgstr "%pB: ficheiro mmo inválido: esperado YZ = 1, obtido YZ = %d para lop_quote\n" -#: mmo.c:1682 +#: mmo.c:1679 #, c-format msgid "%pB: invalid mmo file: expected z = 1 or z = 2, got z = %d for lop_loc\n" msgstr "%pB: ficheiro mmo inválido: esperado z = 1 ou z = 2, obtido z = %d para lop_loc\n" -#: mmo.c:1733 +#: mmo.c:1730 #, c-format msgid "%pB: invalid mmo file: expected z = 1 or z = 2, got z = %d for lop_fixo\n" msgstr "%pB: ficheiro mmo inválido: esperado z = 1 ou z = 2, obtido z = %d para lop_fixo\n" -#: mmo.c:1774 +#: mmo.c:1771 #, c-format msgid "%pB: invalid mmo file: expected y = 0, got y = %d for lop_fixrx\n" msgstr "%pB: ficheiro mmo inválido: esperado y = 0, obtido y = %d para lop_fixrx\n" -#: mmo.c:1785 +#: mmo.c:1782 #, c-format msgid "%pB: invalid mmo file: expected z = 16 or z = 24, got z = %d for lop_fixrx\n" msgstr "%pB: ficheiro mmo inválido: esperado z = 16 ou z = 24, obtido z = %d para lop_fixrx\n" -#: mmo.c:1810 +#: mmo.c:1807 #, c-format msgid "%pB: invalid mmo file: leading byte of operand word must be 0 or 1, got %d for lop_fixrx\n" msgstr "%pB: ficheiro mmo inválido: byte inicial da palavra operando tem de ser 0 ou 1, obtido %d para lop_fixrx\n" -#: mmo.c:1835 +#: mmo.c:1832 #, c-format msgid "%pB: cannot allocate file name for file number %d, %d bytes\n" msgstr "%pB: impossível alocar nome de ficheiro para número de ficheiro %d, %d bytes\n" -#: mmo.c:1857 +#: mmo.c:1854 #, c-format msgid "%pB: invalid mmo file: file number %d `%s', was already entered as `%s'\n" msgstr "%pB: ficheiro mmo inválido: número de ficheiro %d \"%s\", já foi inserido como \"%s\"\n" -#: mmo.c:1871 +#: mmo.c:1868 #, c-format msgid "%pB: invalid mmo file: file name for number %d was not specified before use\n" msgstr "%pB: ficheiro mmo inválido: nome de ficheiro para número %d não foi especificado antes do uso\n" -#: mmo.c:1978 +#: mmo.c:1975 #, c-format msgid "%pB: invalid mmo file: fields y and z of lop_stab non-zero, y: %d, z: %d\n" msgstr "%pB: ficheiro mmo inválido: campos y e z de lop_stab não-zero, y: %d, z: %d\n" -#: mmo.c:2015 +#: mmo.c:2012 #, c-format msgid "%pB: invalid mmo file: lop_end not last item in file\n" msgstr "%pB: ficheiro mmo inválido: lop_end não é o último item no ficheiro\n" -#: mmo.c:2029 +#: mmo.c:2026 #, c-format msgid "%pB: invalid mmo file: YZ of lop_end (%ld) not equal to the number of tetras to the preceding lop_stab (%ld)\n" msgstr "%pB: ficheiro mmo inválido: YZ de lop_end (%ld) não igual ao número de tetras para o lop_stab (%ld) precedente\n" -#: mmo.c:2740 +#: mmo.c:2735 #, c-format msgid "%pB: invalid symbol table: duplicate symbol `%s'\n" msgstr "%pB: tabela de símbolo inválida: símbolo duplicado \"%s\"\n" -#: mmo.c:2983 +#: mmo.c:2978 #, c-format msgid "%pB: bad symbol definition: `Main' set to %s rather than the start address %s\n" msgstr "%pB: má definição de símbolo: \"Main\" definido como %s em vez do endereço inicial %s\n" -#: mmo.c:3082 +#: mmo.c:3077 #, c-format msgid "%pB: warning: symbol table too large for mmo, larger than 65535 32-bit words: %d. Only `Main' will be emitted.\n" msgstr "%pB: aviso: tabela de simbolo muito grande para mmo, maior que palavras de 65535 32-bit: %d. Só \"Main\" será emitido.\n" -#: mmo.c:3128 +#: mmo.c:3123 #, c-format msgid "%pB: internal error, symbol table changed size from %d to %d words\n" msgstr "%pB: erro interno, tabela de símbolo alterou o tamanho de %d para %d palavras\n" -#: mmo.c:3181 +#: mmo.c:3176 #, c-format msgid "%pB: internal error, internal register section %pA had contents\n" msgstr "%pB: erro interno, secção de registo interna %pA tinha conteúdo\n" -#: mmo.c:3232 +#: mmo.c:3227 #, c-format msgid "%pB: no initialized registers; section length 0\n" msgstr "%pB: sem registos inicializados; tamanho de secção 0\n" -#: mmo.c:3239 +#: mmo.c:3234 #, c-format msgid "%pB: too many initialized registers; section length %" msgstr "%pB: demasiados registos inicializados; tamanho de secção %" -#: mmo.c:3244 +#: mmo.c:3239 #, c-format msgid "%pB: invalid start address for initialized registers of length %: %#" msgstr "%pB: endereço inicial inválido para registos inicializados de tamanho %: %#" @@ -5497,48 +5823,55 @@ msgid "unhandled OSF/1 core file section type %d" msgstr "Tipo de secção %d de ficheiro núcleo OSF/1 não gerida" -#: pef.c:527 +#: pdp11.c:1588 +#, c-format +msgid "%pB: symbol indicates overlay (not supported)" +msgstr "%pB: o símbolo indica sobreposição (não suportado)" + +#: pef.c:530 #, c-format msgid "bfd_pef_scan: unknown architecture 0x%lx" msgstr "bfd_pef_scan: arquitectura desconhecida 0x%lx" -#: pei-x86_64.c:177 pei-x86_64.c:191 pei-x86_64.c:220 +#: pei-x86_64.c:177 pei-x86_64.c:191 pei-x86_64.c:220 pei-x86_64.c:243 +#: pei-x86_64.c:253 pei-x86_64.c:278 pei-x86_64.c:290 pei-x86_64.c:304 +#: pei-x86_64.c:322 pei-x86_64.c:334 pei-x86_64.c:346 #, c-format msgid "warning: corrupt unwind data\n" msgstr "aviso: dados unwind corrompidos\n" #. PR 17512: file: 2245-7442-0.004. -#: pei-x86_64.c:315 +#: pei-x86_64.c:367 #, c-format msgid "Unknown: %x" msgstr "Desconhecido: %x" -#: pei-x86_64.c:365 pei-x86_64.c:375 pei-x86_64.c:384 +#: pei-x86_64.c:418 pei-x86_64.c:428 pei-x86_64.c:437 #, c-format msgid "warning: xdata section corrupt\n" msgstr "aviso: secção xdata corrupta\n" -#: pei-x86_64.c:439 +#: pei-x86_64.c:492 #, c-format msgid "Too many unwind codes (%ld)\n" msgstr "Demasiados códigos unwind (%ld)\n" -#: pei-x86_64.c:529 +#: pei-x86_64.c:582 #, c-format msgid "Warning: %s section size (%ld) is not a multiple of %d\n" msgstr "Aviso: tamanho de secção %s (%ld) não é múltiplo de %d\n" -#: pei-x86_64.c:536 +#: pei-x86_64.c:589 #, c-format msgid "Warning: %s section size is zero\n" msgstr "Aviso: tamanho de secção %s é zero\n" -#: pei-x86_64.c:551 +#: pei-x86_64.c:604 #, c-format msgid "Warning: %s section size (%ld) is smaller than virtual size (%ld)\n" msgstr "Aviso: tamanho de secção %s (%ld) é menor que o tamanho virtual (%ld)\n" -#: pei-x86_64.c:560 +#: pei-x86_64.c:613 #, c-format msgid "" "\n" @@ -5547,12 +5880,12 @@ "\n" "A tabela de função (interpretado %s conteúdo de secção)\n" -#: pei-x86_64.c:563 +#: pei-x86_64.c:616 #, c-format msgid "vma:\t\t\tBeginAddress\t EndAddress\t UnwindData\n" msgstr "vma:\t\t\tEndInicial \t EndFinal \t DadosUnwind\n" -#: pei-x86_64.c:692 +#: pei-x86_64.c:745 #, c-format msgid "" "\n" @@ -5562,42 +5895,42 @@ "Despejo de %s\n" #. XXX code yet to be written. -#: peicode.h:775 +#: peicode.h:796 #, c-format msgid "%pB: unhandled import type; %x" msgstr "%pB: tipo de importação não gerido; %x" -#: peicode.h:781 +#: peicode.h:802 #, c-format msgid "%pB: unrecognized import type; %x" msgstr "%pB: tipo de importação não reconhecido; %x" -#: peicode.h:796 +#: peicode.h:817 #, c-format msgid "%pB: unrecognized import name type; %x" msgstr "%pB: tipo de nome de importação não reconhecido; %x" -#: peicode.h:1211 +#: peicode.h:1225 #, c-format msgid "%pB: unrecognised machine type (0x%x) in Import Library Format archive" msgstr "%pB: tipo de máquina não reconhecido (0x%x) em arquivo Import Library Format" -#: peicode.h:1224 +#: peicode.h:1238 #, c-format msgid "%pB: recognised but unhandled machine type (0x%x) in Import Library Format archive" msgstr "%pB: tipo de máquina reconhecido mas não gerido (0x%x) em arquivo Import Library Format" -#: peicode.h:1242 +#: peicode.h:1256 #, c-format msgid "%pB: size field is zero in Import Library Format header" msgstr "%pB: tamanho de campo é zero em cabeçalho Import Library Format" -#: peicode.h:1274 +#: peicode.h:1282 #, c-format msgid "%pB: string not null terminated in ILF object file" msgstr "%pB: cadeia nã-null terminada em ficheiro objecto ILF." -#: peicode.h:1330 +#: peicode.h:1338 #, c-format msgid "%pB: error: debug data ends beyond end of debug directory" msgstr "%pB: erro: Debug Data termina após o fim da pasta de depuração." @@ -5655,32 +5988,32 @@ msgid "Partition[%d] length = 0x%.8lx (%ld)\n" msgstr "Tamanho da partição[%d] = 0x%.8lx (%ld)\n" -#: reloc.c:8232 +#: reloc.c:8291 msgid "INPUT_SECTION_FLAGS are not supported" msgstr "INPUT_SECTION_FLAGS não são suportadas." -#: reloc.c:8333 +#: reloc.c:8392 #, c-format msgid "%X%P: %pB(%pA): error: relocation for offset %V has no value\n" msgstr "%X%P: %pB(%pA): erro: relocalização para desvio %V não tem valor\n" -#: reloc.c:8420 +#: reloc.c:8480 #, c-format msgid "%X%P: %pB(%pA): relocation \"%pR\" is not supported\n" msgstr "%X%P: %pB(%pA): relocalização \"%R\" não é suportada\n" -#: reloc.c:8429 +#: reloc.c:8489 #, c-format msgid "%X%P: %pB(%pA): relocation \"%pR\" returns an unrecognized value %x\n" msgstr "%X%P: %pB(%pA): relocalização \"%R\" devolve um valor não reconhecido %x\n" -#: reloc.c:8491 +#: reloc.c:8551 #, c-format msgid "%pB: unrecognized relocation type %#x in section `%pA'" msgstr "%pB: relocalização não reconhecida (%#x) na secção \"%pA\"" #. PR 21803: Suggest the most likely cause of this error. -#: reloc.c:8495 +#: reloc.c:8555 #, c-format msgid "is this version of the linker - %s - out of date ?" msgstr "Estará esta versão do linker - %s - fora do prazo?" @@ -5690,7 +6023,7 @@ msgid "%pB: warning core file truncated" msgstr "%pB: aviso: ficheiro núcleo truncado" -#: som.c:5478 +#: som.c:5497 #, c-format msgid "" "\n" @@ -5699,7 +6032,7 @@ "\n" "Exec Auxiliary Header\n" -#: som.c:5787 +#: som.c:5806 msgid "som_sizeof_headers unimplemented" msgstr "som_sizeof_headers não implementado" @@ -5713,7 +6046,7 @@ msgid "%pB:%d: byte count %d too small" msgstr "%pB:%d: total de byte %d muito pequeno" -#: srec.c:581 srec.c:615 +#: srec.c:580 srec.c:614 #, c-format msgid "%pB:%d: bad checksum in S-record file" msgstr "%pB:%d: mau checksum em ficheiro S-record" @@ -5723,73 +6056,82 @@ msgid "%pB(%pA+%#lx): stabs entry has invalid string index" msgstr "%pB(%pA+%#lx): entrada Stabs tem índice de cadeia inválido." -#: syms.c:1091 +#: syms.c:1085 msgid "unsupported .stab relocation" msgstr "Relocalização .stab não suportada" -#: vms-alpha.c:479 +#: vms-alpha.c:480 msgid "corrupt EIHD record - size is too small" msgstr "Registo EIHD corrupto - tamanho muito pequeno" -#: vms-alpha.c:660 +#: vms-alpha.c:666 #, c-format msgid "unable to read EIHS record at offset %#x" msgstr "Impossível ler registo EIHS no desvio %#x" -#: vms-alpha.c:1173 +#: vms-alpha.c:1158 +msgid "record is too small for symbol name length" +msgstr "registo muito pequeno para o tamanho do nome do símbolo" + +#: vms-alpha.c:1191 #, c-format msgid "corrupt EGSD record: its size (%#x) is too small" msgstr "Registo EGSD corrupto: tamanho (%#x) muito pequeno" -#: vms-alpha.c:1197 +#: vms-alpha.c:1215 #, c-format -msgid "corrupt EGSD record: size (%#x) is larger than remaining space (%#x)" -msgstr "Registo EGSD corrupto: tamanho (%#x) maior que o espaço restante (%#x)" +msgid "corrupt EGSD record type %d: size (%#x) is larger than remaining space (%#x)" +msgstr "tipo de registo EGSD %d corrupto: tamanho (%#x) maior que o espaço restante (%#x)" -#: vms-alpha.c:1205 +#: vms-alpha.c:1225 #, c-format -msgid "corrupt EGSD record: size (%#x) is too small" -msgstr "Registo EGSD corrupto: tamanho (%#x) muito pequeno" +msgid "corrupt EGSD record type %d: size (%#x) is too small" +msgstr "tipo de registo EGSD %d corrupto: tamanho (%#x) muito pequeno" -#: vms-alpha.c:1334 vms-alpha.c:1350 vms-alpha.c:1390 +#: vms-alpha.c:1367 #, c-format msgid "corrupt EGSD record: its psindx field is too big (%#lx)" msgstr "Registo EGSD corrupto: campo psindx muito grande (%#lx)" -#: vms-alpha.c:1419 +#: vms-alpha.c:1443 #, c-format msgid "unknown EGSD subtype %d" msgstr "Sub-tipo EGSD %d desconhecido" -#: vms-alpha.c:1452 +#: vms-alpha.c:1476 #, c-format msgid "stack overflow (%d) in _bfd_vms_push" msgstr "Transporte de stack (%d) em _bfd_vms_push" -#: vms-alpha.c:1465 +#: vms-alpha.c:1490 msgid "stack underflow in _bfd_vms_pop" msgstr "Sub-transporte de stack em _bfd_vms_pop" +#: vms-alpha.c:1564 +#, c-format +msgid "dst_define_location %u too large" +msgstr "dst_define_location %u muito grande" + #. These names have not yet been added to this switch statement. -#: vms-alpha.c:1707 +#: vms-alpha.c:1765 #, c-format msgid "unknown ETIR command %d" msgstr "comando ETIR %d desconhecido" -#: vms-alpha.c:1738 +#: vms-alpha.c:1796 msgid "corrupt vms value" msgstr "Valor vms corrupto" -#: vms-alpha.c:1866 +#: vms-alpha.c:1927 msgid "corrupt ETIR record encountered" msgstr "Encontrado registo ETIR corrupto" -#: vms-alpha.c:1923 +#: vms-alpha.c:1989 #, c-format msgid "bad section index in %s" msgstr "mau índice de secção em %s" -#: vms-alpha.c:1936 +#: vms-alpha.c:2003 #, c-format msgid "unsupported STA cmd %s" msgstr "comando STA %s não suportado" @@ -5799,1468 +6141,1480 @@ #. Rotate. #. Redefine symbol to current location. #. Define a literal. -#: vms-alpha.c:2116 vms-alpha.c:2147 vms-alpha.c:2238 vms-alpha.c:2396 +#: vms-alpha.c:2211 vms-alpha.c:2242 vms-alpha.c:2337 vms-alpha.c:2557 #, c-format msgid "%s: not supported" msgstr "%s: não suportado" -#: vms-alpha.c:2122 +#: vms-alpha.c:2217 #, c-format msgid "%s: not implemented" msgstr "%s: não implementado" -#: vms-alpha.c:2380 +#: vms-alpha.c:2382 vms-alpha.c:2397 +#, c-format +msgid "invalid %s" +msgstr "%s inválido" + +#. Divide by zero is supposed to give a result of zero, +#. and a non-fatal warning message. +#: vms-alpha.c:2457 +#, c-format +msgid "%s divide by zero" +msgstr "%s divide por zero" + +#: vms-alpha.c:2523 #, c-format msgid "invalid use of %s with contexts" msgstr "uso inválido de %s com contextos" -#: vms-alpha.c:2414 +#: vms-alpha.c:2581 #, c-format msgid "reserved cmd %d" msgstr "comando reservado %d" -#: vms-alpha.c:2498 +#: vms-alpha.c:2665 msgid "corrupt EEOM record - size is too small" msgstr "Registo EEOM corrupto - tamanho demasiado pequeno" -#: vms-alpha.c:2507 +#: vms-alpha.c:2674 msgid "object module not error-free !" msgstr "Módulo objecto NÃO livre de erros!" -#: vms-alpha.c:3831 +#: vms-alpha.c:4001 #, c-format msgid "SEC_RELOC with no relocs in section %pA" msgstr "SEC_RELOC sem relocs na secção %pA" -#: vms-alpha.c:3883 vms-alpha.c:4097 +#: vms-alpha.c:4053 vms-alpha.c:4268 #, c-format msgid "size error in section %pA" msgstr "Erro de tamanho na secção %pA" -#: vms-alpha.c:4043 +#: vms-alpha.c:4213 msgid "spurious ALPHA_R_BSR reloc" msgstr "Relocalização ALPHA_R_BSR espúria" -#: vms-alpha.c:4084 +#: vms-alpha.c:4254 #, c-format msgid "unhandled relocation %s" msgstr "Relocalização %s não gerida" -#: vms-alpha.c:4377 +#: vms-alpha.c:4551 #, c-format msgid "unknown source command %d" msgstr "Comando fonte %d desconhecido" -#: vms-alpha.c:4438 vms-alpha.c:4444 vms-alpha.c:4450 vms-alpha.c:4456 -#: vms-alpha.c:4462 vms-alpha.c:4489 vms-alpha.c:4495 vms-alpha.c:4501 -#: vms-alpha.c:4507 +#: vms-alpha.c:4612 vms-alpha.c:4618 vms-alpha.c:4624 vms-alpha.c:4630 +#: vms-alpha.c:4636 vms-alpha.c:4663 vms-alpha.c:4669 vms-alpha.c:4675 +#: vms-alpha.c:4681 #, c-format msgid "%s not implemented" msgstr "%s: não implementado" -#: vms-alpha.c:4550 +#: vms-alpha.c:4724 #, c-format msgid "unknown line command %d" msgstr "comando de linha %d desconhecido" -#: vms-alpha.c:5010 vms-alpha.c:5028 vms-alpha.c:5043 vms-alpha.c:5059 -#: vms-alpha.c:5072 vms-alpha.c:5084 vms-alpha.c:5097 +#: vms-alpha.c:5188 vms-alpha.c:5206 vms-alpha.c:5221 vms-alpha.c:5237 +#: vms-alpha.c:5250 vms-alpha.c:5262 vms-alpha.c:5275 #, c-format msgid "unknown reloc %s + %s" msgstr "Reloc %s + %s desconhecida" -#: vms-alpha.c:5152 +#: vms-alpha.c:5330 #, c-format msgid "unknown reloc %s" msgstr "Reloc %s desconhecida" -#: vms-alpha.c:5166 +#: vms-alpha.c:5344 msgid "invalid section index in ETIR" msgstr "Ãndice de secção inválido em ETIR" -#: vms-alpha.c:5175 +#: vms-alpha.c:5353 msgid "relocation for non-REL psect" msgstr "Relocalização para psect não-REL" -#: vms-alpha.c:5222 +#: vms-alpha.c:5402 #, c-format msgid "unknown symbol in command %s" msgstr "Símbolo desconhecido em comando %s" -#: vms-alpha.c:5636 +#: vms-alpha.c:5816 #, c-format msgid "reloc (%d) is *UNKNOWN*" msgstr "reloc (%d) é *UNKNOWN*" -#: vms-alpha.c:5752 +#: vms-alpha.c:5932 #, c-format msgid " EMH %u (len=%u): " msgstr " EMH %u (tam=%u): " -#: vms-alpha.c:5757 +#: vms-alpha.c:5937 #, c-format msgid " Error: The length is less than the length of an EMH record\n" msgstr " Erro: o tamanho é menor que o tamanho de um registo EMH\n" -#: vms-alpha.c:5774 +#: vms-alpha.c:5954 #, c-format msgid " Error: The record length is less than the size of an EMH_MHD record\n" msgstr " Erro: o tamanho do registo é menor que o tamanho de um registo EMH_MHD\n" -#: vms-alpha.c:5777 +#: vms-alpha.c:5957 #, c-format msgid "Module header\n" msgstr "Cabeçalho de módulo\n" -#: vms-alpha.c:5778 +#: vms-alpha.c:5958 #, c-format msgid " structure level: %u\n" msgstr " nível de estrutura: %u\n" -#: vms-alpha.c:5779 +#: vms-alpha.c:5959 #, c-format msgid " max record size: %u\n" msgstr " tam. máx registo: %u\n" -#: vms-alpha.c:5785 +#: vms-alpha.c:5965 #, c-format msgid " Error: The module name is missing\n" msgstr " Erro: nome de módulo em falta\n" -#: vms-alpha.c:5791 +#: vms-alpha.c:5971 #, c-format msgid " Error: The module name is too long\n" msgstr " Erro: nome de módulo muito longo\n" -#: vms-alpha.c:5794 +#: vms-alpha.c:5974 #, c-format msgid " module name : %.*s\n" msgstr " nome de módulo : %.*s\n" -#: vms-alpha.c:5798 +#: vms-alpha.c:5978 #, c-format msgid " Error: The module version is missing\n" msgstr " Erro: versão de módulo em falta\n" -#: vms-alpha.c:5804 +#: vms-alpha.c:5984 #, c-format msgid " Error: The module version is too long\n" msgstr " Erro: versão de módulo muito longa\n" -#: vms-alpha.c:5807 +#: vms-alpha.c:5987 #, c-format msgid " module version : %.*s\n" msgstr " versão de módulo: %.*s\n" -#: vms-alpha.c:5810 +#: vms-alpha.c:5990 #, c-format msgid " Error: The compile date is truncated\n" msgstr " Erro: data de compilação truncada\n" -#: vms-alpha.c:5812 +#: vms-alpha.c:5992 #, c-format msgid " compile date : %.17s\n" msgstr " data compilação: %.17s\n" -#: vms-alpha.c:5817 +#: vms-alpha.c:5997 #, c-format msgid "Language Processor Name\n" msgstr "Nome do processador de linguagem\n" -#: vms-alpha.c:5818 +#: vms-alpha.c:5998 #, c-format msgid " language name: %.*s\n" msgstr " nome linguagem: %.*s\n" -#: vms-alpha.c:5822 +#: vms-alpha.c:6002 #, c-format msgid "Source Files Header\n" msgstr "Cabeçalho de ficheiros fonte\n" -#: vms-alpha.c:5823 +#: vms-alpha.c:6003 #, c-format msgid " file: %.*s\n" msgstr " ficheiro: %.*s\n" -#: vms-alpha.c:5827 +#: vms-alpha.c:6007 #, c-format msgid "Title Text Header\n" msgstr "Cabeçalho do texto de título\n" -#: vms-alpha.c:5828 +#: vms-alpha.c:6008 #, c-format msgid " title: %.*s\n" msgstr " título: %.*s\n" -#: vms-alpha.c:5832 +#: vms-alpha.c:6012 #, c-format msgid "Copyright Header\n" msgstr "Cabeçalho de copyright\n" -#: vms-alpha.c:5833 +#: vms-alpha.c:6013 #, c-format msgid " copyright: %.*s\n" msgstr " copyright: %.*s\n" -#: vms-alpha.c:5837 +#: vms-alpha.c:6017 #, c-format msgid "unhandled emh subtype %u\n" msgstr "sub-tipo emh %u não gerido\n" -#: vms-alpha.c:5847 +#: vms-alpha.c:6027 #, c-format msgid " EEOM (len=%u):\n" msgstr " EEOM (tam=%u):\n" -#: vms-alpha.c:5852 +#: vms-alpha.c:6032 #, c-format msgid " Error: The length is less than the length of an EEOM record\n" msgstr " Erro: o tamanho é menor que o tamanho de um registo EEOM\n" -#: vms-alpha.c:5856 +#: vms-alpha.c:6036 #, c-format msgid " number of cond linkage pairs: %u\n" msgstr " número de pares de ligação condicional: %u\n" -#: vms-alpha.c:5858 +#: vms-alpha.c:6038 #, c-format msgid " completion code: %u\n" msgstr " código de conclusão: %u\n" -#: vms-alpha.c:5862 +#: vms-alpha.c:6042 #, c-format msgid " transfer addr flags: 0x%02x\n" msgstr " transferir band end: 0x%02x\n" -#: vms-alpha.c:5863 +#: vms-alpha.c:6043 #, c-format msgid " transfer addr psect: %u\n" msgstr " transferir psect end.: %u\n" -#: vms-alpha.c:5865 +#: vms-alpha.c:6045 #, c-format msgid " transfer address : 0x%08x\n" msgstr " transferir endereço: 0x%08x\n" -#: vms-alpha.c:5874 +#: vms-alpha.c:6054 msgid " WEAK" msgstr " WEAK" -#: vms-alpha.c:5876 +#: vms-alpha.c:6056 msgid " DEF" msgstr " DEF" -#: vms-alpha.c:5878 +#: vms-alpha.c:6058 msgid " UNI" msgstr " UNI" -#: vms-alpha.c:5880 vms-alpha.c:5901 +#: vms-alpha.c:6060 vms-alpha.c:6081 msgid " REL" msgstr " REL" -#: vms-alpha.c:5882 +#: vms-alpha.c:6062 msgid " COMM" msgstr " COMM" -#: vms-alpha.c:5884 +#: vms-alpha.c:6064 msgid " VECEP" msgstr " VECEP" -#: vms-alpha.c:5886 +#: vms-alpha.c:6066 msgid " NORM" msgstr " NORM" -#: vms-alpha.c:5888 +#: vms-alpha.c:6068 msgid " QVAL" msgstr " QVAL" -#: vms-alpha.c:5895 +#: vms-alpha.c:6075 msgid " PIC" msgstr " PIC" -#: vms-alpha.c:5897 +#: vms-alpha.c:6077 msgid " LIB" msgstr " LIB" -#: vms-alpha.c:5899 +#: vms-alpha.c:6079 msgid " OVR" msgstr " OVR" -#: vms-alpha.c:5903 +#: vms-alpha.c:6083 msgid " GBL" msgstr " GBL" -#: vms-alpha.c:5905 +#: vms-alpha.c:6085 msgid " SHR" msgstr " SHR" -#: vms-alpha.c:5907 +#: vms-alpha.c:6087 msgid " EXE" msgstr " EXE" -#: vms-alpha.c:5909 +#: vms-alpha.c:6089 msgid " RD" msgstr " RD" -#: vms-alpha.c:5911 +#: vms-alpha.c:6091 msgid " WRT" msgstr " WRT" -#: vms-alpha.c:5913 +#: vms-alpha.c:6093 msgid " VEC" msgstr " VEC" -#: vms-alpha.c:5915 +#: vms-alpha.c:6095 msgid " NOMOD" msgstr " NOMOD" -#: vms-alpha.c:5917 +#: vms-alpha.c:6097 msgid " COM" msgstr " COM" -#: vms-alpha.c:5919 +#: vms-alpha.c:6099 msgid " 64B" msgstr " 64B" -#: vms-alpha.c:5928 +#: vms-alpha.c:6108 #, c-format msgid " EGSD (len=%u):\n" msgstr " EGSD (tam=%u):\n" -#: vms-alpha.c:5941 +#: vms-alpha.c:6121 #, c-format msgid " EGSD entry %2u (type: %u, len: %u): " msgstr " entrada EGSD %2u (tipo: %u, tamanho: %u): " -#: vms-alpha.c:5947 vms-alpha.c:6198 +#: vms-alpha.c:6127 vms-alpha.c:6378 #, c-format msgid " Error: length larger than remaining space in record\n" msgstr " Erro: tamanho maior que o espaço restante no registo\n" -#: vms-alpha.c:5959 +#: vms-alpha.c:6139 #, c-format msgid "PSC - Program section definition\n" msgstr "PSC - definição da secção Program\n" -#: vms-alpha.c:5960 vms-alpha.c:5977 +#: vms-alpha.c:6140 vms-alpha.c:6157 #, c-format msgid " alignment : 2**%u\n" msgstr " alinhamento : 2**%u\n" -#: vms-alpha.c:5961 vms-alpha.c:5978 +#: vms-alpha.c:6141 vms-alpha.c:6158 #, c-format msgid " flags : 0x%04x" msgstr " bandeiras : 0x%04x" -#: vms-alpha.c:5965 +#: vms-alpha.c:6145 #, c-format msgid " alloc (len): %u (0x%08x)\n" msgstr " aloc. (tam): %u (0x%08x)\n" -#: vms-alpha.c:5966 vms-alpha.c:6023 vms-alpha.c:6072 +#: vms-alpha.c:6146 vms-alpha.c:6203 vms-alpha.c:6252 #, c-format msgid " name : %.*s\n" msgstr " nome : %.*s\n" -#: vms-alpha.c:5976 +#: vms-alpha.c:6156 #, c-format msgid "SPSC - Shared Image Program section def\n" msgstr "SPSC - definição de secção Shared Image Program\n" -#: vms-alpha.c:5982 +#: vms-alpha.c:6162 #, c-format msgid " alloc (len) : %u (0x%08x)\n" msgstr " aloc. (tam) : %u (0x%08x)\n" -#: vms-alpha.c:5983 +#: vms-alpha.c:6163 #, c-format msgid " image offset : 0x%08x\n" msgstr " desvio imagem : 0x%08x\n" -#: vms-alpha.c:5985 +#: vms-alpha.c:6165 #, c-format msgid " symvec offset : 0x%08x\n" msgstr " desvio symvec : 0x%08x\n" -#: vms-alpha.c:5987 +#: vms-alpha.c:6167 #, c-format msgid " name : %.*s\n" msgstr " nome : %.*s\n" -#: vms-alpha.c:6000 +#: vms-alpha.c:6180 #, c-format msgid "SYM - Global symbol definition\n" msgstr "SYM - definição de símbolo Global\n" -#: vms-alpha.c:6001 vms-alpha.c:6061 vms-alpha.c:6082 vms-alpha.c:6101 +#: vms-alpha.c:6181 vms-alpha.c:6241 vms-alpha.c:6262 vms-alpha.c:6281 #, c-format msgid " flags: 0x%04x" msgstr " bandeiras: 0x%04x" -#: vms-alpha.c:6004 +#: vms-alpha.c:6184 #, c-format msgid " psect offset: 0x%08x\n" msgstr " desvio psect: 0x%08x\n" -#: vms-alpha.c:6008 +#: vms-alpha.c:6188 #, c-format msgid " code address: 0x%08x\n" msgstr " end. de cód.: 0x%08x\n" -#: vms-alpha.c:6010 +#: vms-alpha.c:6190 #, c-format msgid " psect index for entry point : %u\n" msgstr " índice psect do ponto de entrada: %u\n" -#: vms-alpha.c:6013 vms-alpha.c:6089 vms-alpha.c:6108 +#: vms-alpha.c:6193 vms-alpha.c:6269 vms-alpha.c:6288 #, c-format msgid " psect index : %u\n" msgstr " índice psect : %u\n" -#: vms-alpha.c:6015 vms-alpha.c:6091 vms-alpha.c:6110 +#: vms-alpha.c:6195 vms-alpha.c:6271 vms-alpha.c:6290 #, c-format msgid " name : %.*s\n" msgstr " nome : %.*s\n" -#: vms-alpha.c:6022 +#: vms-alpha.c:6202 #, c-format msgid "SYM - Global symbol reference\n" msgstr "SYM - referência de símbolo Global\n" -#: vms-alpha.c:6034 +#: vms-alpha.c:6214 #, c-format msgid "IDC - Ident Consistency check\n" msgstr "IDC - verificação Ident Consistency\n" -#: vms-alpha.c:6035 +#: vms-alpha.c:6215 #, c-format msgid " flags : 0x%08x" msgstr " bandeiras : 0x%08x" -#: vms-alpha.c:6039 +#: vms-alpha.c:6219 #, c-format msgid " id match : %x\n" msgstr " comparação id : %x\n" -#: vms-alpha.c:6041 +#: vms-alpha.c:6221 #, c-format msgid " error severity: %x\n" msgstr " severidade do erro: %x\n" -#: vms-alpha.c:6044 +#: vms-alpha.c:6224 #, c-format msgid " entity name : %.*s\n" msgstr " nome entidade : %.*s\n" -#: vms-alpha.c:6046 +#: vms-alpha.c:6226 #, c-format msgid " object name : %.*s\n" msgstr " nome objecto : %.*s\n" -#: vms-alpha.c:6049 +#: vms-alpha.c:6229 #, c-format msgid " binary ident : 0x%08x\n" msgstr " ident. binária: 0x%08x\n" -#: vms-alpha.c:6052 +#: vms-alpha.c:6232 #, c-format msgid " ascii ident : %.*s\n" msgstr " ident. ascii : %.*s\n" -#: vms-alpha.c:6060 +#: vms-alpha.c:6240 #, c-format msgid "SYMG - Universal symbol definition\n" msgstr "SYMG - definição Universal\n" -#: vms-alpha.c:6064 +#: vms-alpha.c:6244 #, c-format msgid " symbol vector offset: 0x%08x\n" msgstr " desvio do vector de símbolo: 0x%08x\n" -#: vms-alpha.c:6066 +#: vms-alpha.c:6246 #, c-format msgid " entry point: 0x%08x\n" msgstr " ponto de entrada: 0x%08x\n" -#: vms-alpha.c:6068 +#: vms-alpha.c:6248 #, c-format msgid " proc descr : 0x%08x\n" msgstr " descrição de procedimento: 0x%08x\n" -#: vms-alpha.c:6070 +#: vms-alpha.c:6250 #, c-format msgid " psect index: %u\n" msgstr " índice psect: %u\n" -#: vms-alpha.c:6081 +#: vms-alpha.c:6261 #, c-format msgid "SYMV - Vectored symbol definition\n" msgstr "SYMV - definição de símbolo Vectored\n" -#: vms-alpha.c:6085 +#: vms-alpha.c:6265 #, c-format msgid " vector : 0x%08x\n" msgstr " vector : 0x%08x\n" -#: vms-alpha.c:6087 vms-alpha.c:6106 +#: vms-alpha.c:6267 vms-alpha.c:6286 #, c-format msgid " psect offset: %u\n" msgstr " desvio psect: %u\n" -#: vms-alpha.c:6100 +#: vms-alpha.c:6280 #, c-format msgid "SYMM - Global symbol definition with version\n" msgstr "SYMM - definição de símbolo Global com versão\n" -#: vms-alpha.c:6104 +#: vms-alpha.c:6284 #, c-format msgid " version mask: 0x%08x\n" msgstr " máscara de versão: 0x%08x\n" -#: vms-alpha.c:6115 +#: vms-alpha.c:6295 #, c-format msgid "unhandled egsd entry type %u\n" msgstr "tipo de entrada egsd %u não gerida\n" -#: vms-alpha.c:6150 +#: vms-alpha.c:6330 #, c-format msgid " linkage index: %u, replacement insn: 0x%08x\n" msgstr " índice de ligação: %u, insn de substituição: 0x%08x\n" -#: vms-alpha.c:6154 +#: vms-alpha.c:6334 #, c-format msgid " psect idx 1: %u, offset 1: 0x%08x %08x\n" msgstr " índ psect 1: %u, desvio 1: 0x%08x %08x\n" -#: vms-alpha.c:6159 +#: vms-alpha.c:6339 #, c-format msgid " psect idx 2: %u, offset 2: 0x%08x %08x\n" msgstr " índ psect 2: %u, desvio 2: 0x%08x %08x\n" -#: vms-alpha.c:6165 +#: vms-alpha.c:6345 #, c-format msgid " psect idx 3: %u, offset 3: 0x%08x %08x\n" msgstr " índ psect 3: %u, desvio 3: 0x%08x %08x\n" -#: vms-alpha.c:6170 +#: vms-alpha.c:6350 #, c-format msgid " global name: %.*s\n" msgstr " nome global: %.*s\n" -#: vms-alpha.c:6181 +#: vms-alpha.c:6361 #, c-format msgid " %s (len=%u+%u):\n" msgstr " %s (tam=%u+%u):\n" -#: vms-alpha.c:6203 +#: vms-alpha.c:6383 #, c-format msgid " (type: %3u, size: 4+%3u): " msgstr " (tipo: %3u, tam.: 4+%3u): " -#: vms-alpha.c:6207 +#: vms-alpha.c:6387 #, c-format msgid "STA_GBL (stack global) %.*s\n" msgstr "STA_GBL (stack global) %.*s\n" -#: vms-alpha.c:6211 +#: vms-alpha.c:6391 #, c-format msgid "STA_LW (stack longword) 0x%08x\n" msgstr "STA_LW (stack longword) 0x%08x\n" -#: vms-alpha.c:6215 +#: vms-alpha.c:6395 #, c-format msgid "STA_QW (stack quadword) 0x%08x %08x\n" msgstr "STA_QW (stack quadword) 0x%08x %08x\n" -#: vms-alpha.c:6220 +#: vms-alpha.c:6400 #, c-format msgid "STA_PQ (stack psect base + offset)\n" msgstr "STA_PQ (stack psect base + desvio)\n" -#: vms-alpha.c:6222 +#: vms-alpha.c:6402 #, c-format msgid " psect: %u, offset: 0x%08x %08x\n" msgstr " psect: %u, desvio: 0x%08x %08x\n" -#: vms-alpha.c:6228 +#: vms-alpha.c:6408 #, c-format msgid "STA_LI (stack literal)\n" msgstr "STA_LI (stack literal)\n" -#: vms-alpha.c:6231 +#: vms-alpha.c:6411 #, c-format msgid "STA_MOD (stack module)\n" msgstr "STA_MOD (stack módulo)\n" -#: vms-alpha.c:6234 +#: vms-alpha.c:6414 #, c-format msgid "STA_CKARG (compare procedure argument)\n" msgstr "STA_CKARG (comparar argumento de procedimento)\n" -#: vms-alpha.c:6238 +#: vms-alpha.c:6418 #, c-format msgid "STO_B (store byte)\n" msgstr "STO_B (armazenar byte)\n" -#: vms-alpha.c:6241 +#: vms-alpha.c:6421 #, c-format msgid "STO_W (store word)\n" msgstr "STO_W (armazenar word)\n" -#: vms-alpha.c:6244 +#: vms-alpha.c:6424 #, c-format msgid "STO_LW (store longword)\n" msgstr "STO_LW (armazenar longword)\n" -#: vms-alpha.c:6247 +#: vms-alpha.c:6427 #, c-format msgid "STO_QW (store quadword)\n" msgstr "STO_QW (armazenar quadword)\n" -#: vms-alpha.c:6253 +#: vms-alpha.c:6433 #, c-format msgid "STO_IMMR (store immediate repeat) %u bytes\n" msgstr "STO_IMMR (armazenar repetição imediata) %u bytes\n" -#: vms-alpha.c:6260 +#: vms-alpha.c:6440 #, c-format msgid "STO_GBL (store global) %.*s\n" msgstr "STO_GBL (armazenar global) %.*s\n" -#: vms-alpha.c:6264 +#: vms-alpha.c:6444 #, c-format msgid "STO_CA (store code address) %.*s\n" msgstr "STO_CA (armazenar endereço de código) %.*s\n" -#: vms-alpha.c:6268 +#: vms-alpha.c:6448 #, c-format msgid "STO_RB (store relative branch)\n" msgstr "STO_RB (armazenar ramo relativo)\n" -#: vms-alpha.c:6271 +#: vms-alpha.c:6451 #, c-format msgid "STO_AB (store absolute branch)\n" msgstr "STO_AB (armazenar ramo absoluto)\n" -#: vms-alpha.c:6274 +#: vms-alpha.c:6454 #, c-format msgid "STO_OFF (store offset to psect)\n" msgstr "STO_OFF (armazenar desvio para psect)\n" -#: vms-alpha.c:6280 +#: vms-alpha.c:6460 #, c-format msgid "STO_IMM (store immediate) %u bytes\n" msgstr "STO_IMM (armazenar imediato) %u bytes\n" -#: vms-alpha.c:6287 +#: vms-alpha.c:6467 #, c-format msgid "STO_GBL_LW (store global longword) %.*s\n" msgstr "STO_GBL_LW (armazenar longword global) %.*s\n" -#: vms-alpha.c:6291 +#: vms-alpha.c:6471 #, c-format msgid "STO_OFF (store LP with procedure signature)\n" msgstr "STO_OFF ( global LP com assinatura de procedimento)\n" -#: vms-alpha.c:6294 +#: vms-alpha.c:6474 #, c-format msgid "STO_BR_GBL (store branch global) *todo*\n" msgstr "STO_BR_GBL ( global ramo global) *todo*\n" -#: vms-alpha.c:6297 +#: vms-alpha.c:6477 #, c-format msgid "STO_BR_PS (store branch psect + offset) *todo*\n" msgstr "STO_BR_PS ( global ramo psect + desvio) *todo*\n" -#: vms-alpha.c:6301 +#: vms-alpha.c:6481 #, c-format msgid "OPR_NOP (no-operation)\n" msgstr "OPR_NOP (sem-operação)\n" -#: vms-alpha.c:6304 +#: vms-alpha.c:6484 #, c-format msgid "OPR_ADD (add)\n" msgstr "OPR_ADD (adicionar)\n" -#: vms-alpha.c:6307 +#: vms-alpha.c:6487 #, c-format msgid "OPR_SUB (subtract)\n" msgstr "OPR_SUB (subtrair)\n" -#: vms-alpha.c:6310 +#: vms-alpha.c:6490 #, c-format msgid "OPR_MUL (multiply)\n" msgstr "OPR_MUL (multiplicar)\n" -#: vms-alpha.c:6313 +#: vms-alpha.c:6493 #, c-format msgid "OPR_DIV (divide)\n" msgstr "OPR_DIV (dividir)\n" -#: vms-alpha.c:6316 +#: vms-alpha.c:6496 #, c-format msgid "OPR_AND (logical and)\n" msgstr "OPR_AND (e lógico)\n" -#: vms-alpha.c:6319 +#: vms-alpha.c:6499 #, c-format msgid "OPR_IOR (logical inclusive or)\n" msgstr "OPR_IOR (ou inclusivo lógico)\n" -#: vms-alpha.c:6322 +#: vms-alpha.c:6502 #, c-format msgid "OPR_EOR (logical exclusive or)\n" msgstr "OPR_EOR (ou exclusivo lógico)\n" -#: vms-alpha.c:6325 +#: vms-alpha.c:6505 #, c-format msgid "OPR_NEG (negate)\n" msgstr "OPR_NEG (negar)\n" -#: vms-alpha.c:6328 +#: vms-alpha.c:6508 #, c-format msgid "OPR_COM (complement)\n" msgstr "OPR_COM (complementar)\n" -#: vms-alpha.c:6331 +#: vms-alpha.c:6511 #, c-format msgid "OPR_INSV (insert field)\n" msgstr "OPR_INSV (inserir campo)\n" -#: vms-alpha.c:6334 +#: vms-alpha.c:6514 #, c-format msgid "OPR_ASH (arithmetic shift)\n" msgstr "OPR_ASH (mudança aritmética)\n" -#: vms-alpha.c:6337 +#: vms-alpha.c:6517 #, c-format msgid "OPR_USH (unsigned shift)\n" msgstr "OPR_USH (mudança não assinada)\n" -#: vms-alpha.c:6340 +#: vms-alpha.c:6520 #, c-format msgid "OPR_ROT (rotate)\n" msgstr "OPR_ROT (rodar)\n" -#: vms-alpha.c:6343 +#: vms-alpha.c:6523 #, c-format msgid "OPR_SEL (select)\n" msgstr "OPR_SEL (seleccionar)\n" -#: vms-alpha.c:6346 +#: vms-alpha.c:6526 #, c-format msgid "OPR_REDEF (redefine symbol to curr location)\n" msgstr "OPR_REDEF (redefinir símbolo para localização actual)\n" -#: vms-alpha.c:6349 +#: vms-alpha.c:6529 #, c-format msgid "OPR_REDEF (define a literal)\n" msgstr "OPR_REDEF (definir um literal)\n" -#: vms-alpha.c:6353 +#: vms-alpha.c:6533 #, c-format msgid "STC_LP (store cond linkage pair)\n" msgstr "STC_LP (armazenar par de ligação condicional)\n" -#: vms-alpha.c:6357 +#: vms-alpha.c:6537 #, c-format msgid "STC_LP_PSB (store cond linkage pair + signature)\n" msgstr "STC_LP_PSB (armazenar par de ligação condicional + assinatura)\n" -#: vms-alpha.c:6359 +#: vms-alpha.c:6539 #, c-format msgid " linkage index: %u, procedure: %.*s\n" msgstr " índice de ligaão: %u, procedimento: %.*s\n" -#: vms-alpha.c:6362 +#: vms-alpha.c:6542 #, c-format msgid " signature: %.*s\n" msgstr " assinatura: %.*s\n" -#: vms-alpha.c:6365 +#: vms-alpha.c:6545 #, c-format msgid "STC_GBL (store cond global)\n" msgstr "STC_GBL (armazenar global condicional)\n" -#: vms-alpha.c:6367 +#: vms-alpha.c:6547 #, c-format msgid " linkage index: %u, global: %.*s\n" msgstr " índice de ligação: %u, global: %.*s\n" -#: vms-alpha.c:6371 +#: vms-alpha.c:6551 #, c-format msgid "STC_GCA (store cond code address)\n" msgstr "STC_GCA (armazenar endereço de código condicional)\n" -#: vms-alpha.c:6373 +#: vms-alpha.c:6553 #, c-format msgid " linkage index: %u, procedure name: %.*s\n" msgstr " índice de ligação: %u, nome do procedimento: %.*s\n" -#: vms-alpha.c:6377 +#: vms-alpha.c:6557 #, c-format msgid "STC_PS (store cond psect + offset)\n" msgstr "STC_PS (armazenar psect condicional + desvio)\n" -#: vms-alpha.c:6380 +#: vms-alpha.c:6560 #, c-format msgid " linkage index: %u, psect: %u, offset: 0x%08x %08x\n" msgstr " índice de ligação: %u, psect: %u, desvio: 0x%08x %08x\n" -#: vms-alpha.c:6387 +#: vms-alpha.c:6567 #, c-format msgid "STC_NOP_GBL (store cond NOP at global addr)\n" msgstr "STC_NOP_GBL (armazenar NOP condicional em endereço global)\n" -#: vms-alpha.c:6391 +#: vms-alpha.c:6571 #, c-format msgid "STC_NOP_PS (store cond NOP at psect + offset)\n" msgstr "STC_NOP_PS (armazenar NOP condicional em psect + desvio)\n" -#: vms-alpha.c:6395 +#: vms-alpha.c:6575 #, c-format msgid "STC_BSR_GBL (store cond BSR at global addr)\n" msgstr "STC_BSR_GBL (armazenar BSR condicional em endereço global)\n" -#: vms-alpha.c:6399 +#: vms-alpha.c:6579 #, c-format msgid "STC_BSR_PS (store cond BSR at psect + offset)\n" msgstr "STC_BSR_PS (armazenar BSR condicional em psect + desvio)\n" -#: vms-alpha.c:6403 +#: vms-alpha.c:6583 #, c-format msgid "STC_LDA_GBL (store cond LDA at global addr)\n" msgstr "STC_LDA_GBL (armazenar LDA condicional em endereço global)\n" -#: vms-alpha.c:6407 +#: vms-alpha.c:6587 #, c-format msgid "STC_LDA_PS (store cond LDA at psect + offset)\n" msgstr "STC_LDA_PS (armazenar LDA condicional em psect + desvio)\n" -#: vms-alpha.c:6411 +#: vms-alpha.c:6591 #, c-format msgid "STC_BOH_GBL (store cond BOH at global addr)\n" msgstr "STC_BOH_GBL (armazenar BOH condicional em endereço global)\n" -#: vms-alpha.c:6415 +#: vms-alpha.c:6595 #, c-format msgid "STC_BOH_PS (store cond BOH at psect + offset)\n" msgstr "STC_BOH_PS (armazenar BOH condicional em psect + desvio)\n" -#: vms-alpha.c:6420 +#: vms-alpha.c:6600 #, c-format msgid "STC_NBH_GBL (store cond or hint at global addr)\n" msgstr "STC_NBH_GBL (armazenar condicional ou dica em endereço global)\n" -#: vms-alpha.c:6424 +#: vms-alpha.c:6604 #, c-format msgid "STC_NBH_PS (store cond or hint at psect + offset)\n" msgstr "STC_NBH_PS (armazenar condicional ou dica em psect + desvio)\n" -#: vms-alpha.c:6428 +#: vms-alpha.c:6608 #, c-format msgid "CTL_SETRB (set relocation base)\n" msgstr "CTL_SETRB (definir base de relocalização)\n" -#: vms-alpha.c:6434 +#: vms-alpha.c:6614 #, c-format msgid "CTL_AUGRB (augment relocation base) %u\n" msgstr "CTL_AUGRB (aumentar base de relocalização) %u\n" -#: vms-alpha.c:6438 +#: vms-alpha.c:6618 #, c-format msgid "CTL_DFLOC (define location)\n" msgstr "CTL_DFLOC (definir localização)\n" -#: vms-alpha.c:6441 +#: vms-alpha.c:6621 #, c-format msgid "CTL_STLOC (set location)\n" msgstr "CTL_STLOC (definir localização)\n" -#: vms-alpha.c:6444 +#: vms-alpha.c:6624 #, c-format msgid "CTL_STKDL (stack defined location)\n" msgstr "CTL_STKDL (localização definida por stack)\n" -#: vms-alpha.c:6447 vms-alpha.c:6871 vms-alpha.c:6997 +#: vms-alpha.c:6627 vms-alpha.c:7051 vms-alpha.c:7177 #, c-format msgid "*unhandled*\n" msgstr "*não gerido*\n" -#: vms-alpha.c:6477 vms-alpha.c:6516 +#: vms-alpha.c:6657 vms-alpha.c:6696 #, c-format msgid "cannot read GST record length\n" msgstr "impossível ler tamanho do registo GST\n" #. Ill-formed. -#: vms-alpha.c:6498 +#: vms-alpha.c:6678 #, c-format msgid "cannot find EMH in first GST record\n" msgstr "impossível encontrar EMH no primeiro registo GST\n" -#: vms-alpha.c:6524 +#: vms-alpha.c:6704 #, c-format msgid "cannot read GST record header\n" msgstr "impossível ler cabeçalho de registo GST\n" -#: vms-alpha.c:6537 +#: vms-alpha.c:6717 #, c-format msgid " corrupted GST\n" msgstr " GST corrompido\n" -#: vms-alpha.c:6545 +#: vms-alpha.c:6725 #, c-format msgid "cannot read GST record\n" msgstr "impossível ler registo GST\n" -#: vms-alpha.c:6574 +#: vms-alpha.c:6754 #, c-format msgid " unhandled EOBJ record type %u\n" msgstr " tipo de registo EOBJ %u não gerido\n" -#: vms-alpha.c:6598 +#: vms-alpha.c:6778 #, c-format msgid " bitcount: %u, base addr: 0x%08x\n" msgstr " bitcount: %u, endereço base: 0x%08x\n" -#: vms-alpha.c:6612 +#: vms-alpha.c:6792 #, c-format msgid " bitmap: 0x%08x (count: %u):\n" msgstr " bitmap: 0x%08x (total: %u):\n" -#: vms-alpha.c:6619 +#: vms-alpha.c:6799 #, c-format msgid " %08x" msgstr " %08x" -#: vms-alpha.c:6645 +#: vms-alpha.c:6825 #, c-format msgid " image %u (%u entries)\n" msgstr " imagem %u (%u entradas)\n" -#: vms-alpha.c:6651 +#: vms-alpha.c:6831 #, c-format msgid " offset: 0x%08x, val: 0x%08x\n" msgstr " desvio: 0x%08x, val: 0x%08x\n" -#: vms-alpha.c:6673 +#: vms-alpha.c:6853 #, c-format msgid " image %u (%u entries), offsets:\n" msgstr " imagem %u (%u entradas), desvios:\n" -#: vms-alpha.c:6680 +#: vms-alpha.c:6860 #, c-format msgid " 0x%08x" msgstr " 0x%08x" #. 64 bits. -#: vms-alpha.c:6802 +#: vms-alpha.c:6982 #, c-format msgid "64 bits *unhandled*\n" msgstr "64 bits *não geridos*\n" -#: vms-alpha.c:6807 +#: vms-alpha.c:6987 #, c-format msgid "class: %u, dtype: %u, length: %u, pointer: 0x%08x\n" msgstr "classe: %u, dtype: %u, tamanho: %u, ponteiro: 0x%08x\n" -#: vms-alpha.c:6818 +#: vms-alpha.c:6998 #, c-format msgid "non-contiguous array of %s\n" msgstr "matriz não contínua de %s\n" -#: vms-alpha.c:6823 +#: vms-alpha.c:7003 #, c-format msgid "dimct: %u, aflags: 0x%02x, digits: %u, scale: %u\n" msgstr "dimct: %u, aflags: 0x%02x, dígitos: %u, escala: %u\n" -#: vms-alpha.c:6828 +#: vms-alpha.c:7008 #, c-format msgid "arsize: %u, a0: 0x%08x\n" msgstr "arsize: %u, a0: 0x%08x\n" -#: vms-alpha.c:6832 +#: vms-alpha.c:7012 #, c-format msgid "Strides:\n" msgstr "Passos:\n" -#: vms-alpha.c:6842 +#: vms-alpha.c:7022 #, c-format msgid "Bounds:\n" msgstr "Vínculos:\n" -#: vms-alpha.c:6848 +#: vms-alpha.c:7028 #, c-format msgid "[%u]: Lower: %u, upper: %u\n" msgstr "[%u]: inferior: %u, superior: %u\n" -#: vms-alpha.c:6860 +#: vms-alpha.c:7040 #, c-format msgid "unaligned bit-string of %s\n" msgstr "cadeia de bits não alinhada de %s\n" -#: vms-alpha.c:6865 +#: vms-alpha.c:7045 #, c-format msgid "base: %u, pos: %u\n" msgstr "base: %u, pos: %u\n" -#: vms-alpha.c:6886 +#: vms-alpha.c:7066 #, c-format msgid "vflags: 0x%02x, value: 0x%08x " msgstr "vflags: 0x%02x, valor: 0x%08x " -#: vms-alpha.c:6892 +#: vms-alpha.c:7072 #, c-format msgid "(no value)\n" msgstr "(sem valor)\n" -#: vms-alpha.c:6895 +#: vms-alpha.c:7075 #, c-format msgid "(not active)\n" msgstr "(não activo)\n" -#: vms-alpha.c:6898 +#: vms-alpha.c:7078 #, c-format msgid "(not allocated)\n" msgstr "(não alocada)\n" -#: vms-alpha.c:6901 +#: vms-alpha.c:7081 #, c-format msgid "(descriptor)\n" msgstr "(descritor)\n" -#: vms-alpha.c:6905 +#: vms-alpha.c:7085 #, c-format msgid "(trailing value)\n" msgstr "(valor inicial)\n" -#: vms-alpha.c:6908 +#: vms-alpha.c:7088 #, c-format msgid "(value spec follows)\n" msgstr "(spec de valor segue)\n" -#: vms-alpha.c:6911 +#: vms-alpha.c:7091 #, c-format msgid "(at bit offset %u)\n" msgstr "(no desvio de bit %u)\n" -#: vms-alpha.c:6915 +#: vms-alpha.c:7095 #, c-format msgid "(reg: %u, disp: %u, indir: %u, kind: " msgstr "(reg: %u, disp: %u, indir: %u, tipo: " -#: vms-alpha.c:6922 +#: vms-alpha.c:7102 msgid "literal" msgstr "literal" -#: vms-alpha.c:6925 +#: vms-alpha.c:7105 msgid "address" msgstr "endereço" -#: vms-alpha.c:6928 +#: vms-alpha.c:7108 msgid "desc" msgstr "desc" -#: vms-alpha.c:6931 +#: vms-alpha.c:7111 msgid "reg" msgstr "reg" -#: vms-alpha.c:6948 +#: vms-alpha.c:7128 #, c-format msgid "len: %2u, kind: %2u " msgstr "tam: %2u, tipo: %2u " -#: vms-alpha.c:6954 +#: vms-alpha.c:7134 #, c-format msgid "atomic, type=0x%02x %s\n" msgstr "atómico, tipo=0x%02x %s\n" -#: vms-alpha.c:6958 +#: vms-alpha.c:7138 #, c-format msgid "indirect, defined at 0x%08x\n" msgstr "indirecto, definido em 0x%08x\n" -#: vms-alpha.c:6962 +#: vms-alpha.c:7142 #, c-format msgid "typed pointer\n" msgstr "ponteiro com tipo\n" -#: vms-alpha.c:6966 +#: vms-alpha.c:7146 #, c-format msgid "pointer\n" msgstr "ponteiro\n" -#: vms-alpha.c:6974 +#: vms-alpha.c:7154 #, c-format msgid "array, dim: %u, bitmap: " msgstr "matriz, dim: %u, bitmap: " -#: vms-alpha.c:6981 +#: vms-alpha.c:7161 #, c-format msgid "array descriptor:\n" msgstr "descritor de matriz:\n" -#: vms-alpha.c:6988 +#: vms-alpha.c:7168 #, c-format msgid "type spec for element:\n" msgstr "tipo de spec para elemento:\n" -#: vms-alpha.c:6990 +#: vms-alpha.c:7170 #, c-format msgid "type spec for subscript %u:\n" msgstr "tipo de spec para subscrito %u:\n" -#: vms-alpha.c:7008 +#: vms-alpha.c:7188 #, c-format msgid "Debug symbol table:\n" msgstr "Tabela de símbolos de depuração:\n" -#: vms-alpha.c:7019 +#: vms-alpha.c:7199 #, c-format msgid "cannot read DST header\n" msgstr "impossível ler cabeçalho DST\n" -#: vms-alpha.c:7025 +#: vms-alpha.c:7205 #, c-format msgid " type: %3u, len: %3u (at 0x%08x): " msgstr " tipo: %3u, tam: %3u (em 0x%08x): " -#: vms-alpha.c:7039 +#: vms-alpha.c:7219 #, c-format msgid "cannot read DST symbol\n" msgstr "impossível ler símbolo DST\n" -#: vms-alpha.c:7082 +#: vms-alpha.c:7262 #, c-format msgid "standard data: %s\n" msgstr "dados standard: %s\n" -#: vms-alpha.c:7085 vms-alpha.c:7173 +#: vms-alpha.c:7265 vms-alpha.c:7353 #, c-format msgid " name: %.*s\n" msgstr " nome: %.*s\n" -#: vms-alpha.c:7092 +#: vms-alpha.c:7272 #, c-format msgid "modbeg\n" msgstr "modbeg\n" -#: vms-alpha.c:7094 +#: vms-alpha.c:7274 #, c-format msgid " flags: %d, language: %u, major: %u, minor: %u\n" msgstr " bands: %d, linguagem: %u, principal: %u, menor: %u\n" -#: vms-alpha.c:7100 vms-alpha.c:7374 +#: vms-alpha.c:7280 vms-alpha.c:7554 #, c-format msgid " module name: %.*s\n" msgstr " nome módulo: %.*s\n" -#: vms-alpha.c:7103 +#: vms-alpha.c:7283 #, c-format msgid " compiler : %.*s\n" msgstr " compilador : %.*s\n" -#: vms-alpha.c:7108 +#: vms-alpha.c:7288 #, c-format msgid "modend\n" msgstr "modend\n" -#: vms-alpha.c:7115 +#: vms-alpha.c:7295 msgid "rtnbeg\n" msgstr "rtnbeg\n" -#: vms-alpha.c:7117 +#: vms-alpha.c:7297 #, c-format msgid " flags: %u, address: 0x%08x, pd-address: 0x%08x\n" msgstr " bands: %u, endereço: 0x%08x, endereço pd: 0x%08x\n" -#: vms-alpha.c:7122 +#: vms-alpha.c:7302 #, c-format msgid " routine name: %.*s\n" msgstr " nome da rotina: %.*s\n" -#: vms-alpha.c:7130 +#: vms-alpha.c:7310 #, c-format msgid "rtnend: size 0x%08x\n" msgstr "rtnend: tamanho 0x%08x\n" -#: vms-alpha.c:7138 +#: vms-alpha.c:7318 #, c-format msgid "prolog: bkpt address 0x%08x\n" msgstr "prólogo: bkpt endereço 0x%08x\n" -#: vms-alpha.c:7147 +#: vms-alpha.c:7327 #, c-format msgid "epilog: flags: %u, count: %u\n" msgstr "epílogo: bandeiras: %u, total: %u\n" -#: vms-alpha.c:7157 +#: vms-alpha.c:7337 #, c-format msgid "blkbeg: address: 0x%08x, name: %.*s\n" msgstr "blkbeg: endereço: 0x%08x, nome: %.*s\n" -#: vms-alpha.c:7166 +#: vms-alpha.c:7346 #, c-format msgid "blkend: size: 0x%08x\n" msgstr "blkend: tamanho: 0x%08x\n" -#: vms-alpha.c:7172 +#: vms-alpha.c:7352 #, c-format msgid "typspec (len: %u)\n" msgstr "typspec (tam: %u)\n" -#: vms-alpha.c:7179 +#: vms-alpha.c:7359 #, c-format msgid "septyp, name: %.*s\n" msgstr "septyp, nome: %.*s\n" -#: vms-alpha.c:7188 +#: vms-alpha.c:7368 #, c-format msgid "recbeg: name: %.*s\n" msgstr "recbeg: nome: %.*s\n" -#: vms-alpha.c:7190 +#: vms-alpha.c:7370 #, c-format msgid " len: %u bits\n" msgstr " tam: %u bits\n" -#: vms-alpha.c:7195 +#: vms-alpha.c:7375 #, c-format msgid "recend\n" msgstr "recend\n" -#: vms-alpha.c:7199 +#: vms-alpha.c:7379 #, c-format msgid "enumbeg, len: %u, name: %.*s\n" msgstr "enumbeg, tam: %u, nome: %.*s\n" -#: vms-alpha.c:7203 +#: vms-alpha.c:7383 #, c-format msgid "enumelt, name: %.*s\n" msgstr "enumelt, nome: %.*s\n" -#: vms-alpha.c:7207 +#: vms-alpha.c:7387 #, c-format msgid "enumend\n" msgstr "enumend\n" -#: vms-alpha.c:7212 +#: vms-alpha.c:7392 #, c-format msgid "label, name: %.*s\n" msgstr "etiqueta, nome: %.*s\n" -#: vms-alpha.c:7214 +#: vms-alpha.c:7394 #, c-format msgid " address: 0x%08x\n" msgstr " endereço: 0x%08x\n" -#: vms-alpha.c:7224 +#: vms-alpha.c:7404 #, c-format msgid "discontiguous range (nbr: %u)\n" msgstr "intervalo descontínuo (nr: %u)\n" -#: vms-alpha.c:7227 +#: vms-alpha.c:7407 #, c-format msgid " address: 0x%08x, size: %u\n" msgstr " endereço: 0x%08x, tamanho: %u\n" -#: vms-alpha.c:7237 +#: vms-alpha.c:7417 #, c-format msgid "line num (len: %u)\n" msgstr "nº linha (tam: %u)\n" -#: vms-alpha.c:7254 +#: vms-alpha.c:7434 #, c-format msgid "delta_pc_w %u\n" msgstr "delta_pc_w %u\n" -#: vms-alpha.c:7261 +#: vms-alpha.c:7441 #, c-format msgid "incr_linum(b): +%u\n" msgstr "incr_linum(b): +%u\n" -#: vms-alpha.c:7267 +#: vms-alpha.c:7447 #, c-format msgid "incr_linum_w: +%u\n" msgstr "incr_linum_w: +%u\n" -#: vms-alpha.c:7273 +#: vms-alpha.c:7453 #, c-format msgid "incr_linum_l: +%u\n" msgstr "incr_linum_l: +%u\n" -#: vms-alpha.c:7279 +#: vms-alpha.c:7459 #, c-format msgid "set_line_num(w) %u\n" msgstr "set_line_num(w) %u\n" -#: vms-alpha.c:7284 +#: vms-alpha.c:7464 #, c-format msgid "set_line_num_b %u\n" msgstr "set_line_num_b %u\n" -#: vms-alpha.c:7289 +#: vms-alpha.c:7469 #, c-format msgid "set_line_num_l %u\n" msgstr "set_line_num_l %u\n" -#: vms-alpha.c:7294 +#: vms-alpha.c:7474 #, c-format msgid "set_abs_pc: 0x%08x\n" msgstr "set_abs_pc: 0x%08x\n" -#: vms-alpha.c:7298 +#: vms-alpha.c:7478 #, c-format msgid "delta_pc_l: +0x%08x\n" msgstr "delta_pc_l: +0x%08x\n" -#: vms-alpha.c:7303 +#: vms-alpha.c:7483 #, c-format msgid "term(b): 0x%02x" msgstr "term(b): 0x%02x" -#: vms-alpha.c:7305 +#: vms-alpha.c:7485 #, c-format msgid " pc: 0x%08x\n" msgstr " pc: 0x%08x\n" -#: vms-alpha.c:7310 +#: vms-alpha.c:7490 #, c-format msgid "term_w: 0x%04x" msgstr "term_w: 0x%04x" -#: vms-alpha.c:7312 +#: vms-alpha.c:7492 #, c-format msgid " pc: 0x%08x\n" msgstr " pc: 0x%08x\n" -#: vms-alpha.c:7318 +#: vms-alpha.c:7498 #, c-format msgid "delta pc +%-4d" msgstr "delta pc +%-4d" -#: vms-alpha.c:7322 +#: vms-alpha.c:7502 #, c-format msgid " pc: 0x%08x line: %5u\n" msgstr " pc: 0x%08x line: %5u\n" -#: vms-alpha.c:7327 +#: vms-alpha.c:7507 #, c-format msgid " *unhandled* cmd %u\n" msgstr " cmd *não gerido* %u\n" -#: vms-alpha.c:7342 +#: vms-alpha.c:7522 #, c-format msgid "source (len: %u)\n" msgstr "fonte (tam: %u)\n" -#: vms-alpha.c:7357 +#: vms-alpha.c:7537 #, c-format msgid " declfile: len: %u, flags: %u, fileid: %u\n" msgstr " declfile: tam: %u, bands: %u, idfich: %u\n" -#: vms-alpha.c:7362 +#: vms-alpha.c:7542 #, c-format msgid " rms: cdt: 0x%08x %08x, ebk: 0x%08x, ffb: 0x%04x, rfo: %u\n" msgstr " rms: cdt: 0x%08x %08x, ebk: 0x%08x, ffb: 0x%04x, rfo: %u\n" -#: vms-alpha.c:7371 +#: vms-alpha.c:7551 #, c-format msgid " filename : %.*s\n" msgstr " nomeficheiro: %.*s\n" -#: vms-alpha.c:7380 +#: vms-alpha.c:7560 #, c-format msgid " setfile %u\n" msgstr " setfile %u\n" -#: vms-alpha.c:7385 vms-alpha.c:7390 +#: vms-alpha.c:7565 vms-alpha.c:7570 #, c-format msgid " setrec %u\n" msgstr " setrec %u\n" -#: vms-alpha.c:7395 vms-alpha.c:7400 +#: vms-alpha.c:7575 vms-alpha.c:7580 #, c-format msgid " setlnum %u\n" msgstr " setlnum %u\n" -#: vms-alpha.c:7405 vms-alpha.c:7410 +#: vms-alpha.c:7585 vms-alpha.c:7590 #, c-format msgid " deflines %u\n" msgstr " deflines %u\n" -#: vms-alpha.c:7414 +#: vms-alpha.c:7594 #, c-format msgid " formfeed\n" msgstr " formfeed\n" -#: vms-alpha.c:7418 +#: vms-alpha.c:7598 #, c-format msgid " *unhandled* cmd %u\n" msgstr " cmd *não gerido* %u\n" -#: vms-alpha.c:7430 +#: vms-alpha.c:7610 #, c-format msgid "*unhandled* dst type %u\n" msgstr "tipo DST *não gerido* %u\n" -#: vms-alpha.c:7462 +#: vms-alpha.c:7642 #, c-format msgid "cannot read EIHD\n" msgstr "impossível ler EIHD\n" -#: vms-alpha.c:7466 +#: vms-alpha.c:7646 #, c-format msgid "EIHD: (size: %u, nbr blocks: %u)\n" msgstr "EIHD: (tamanho: %u, nº blocos: %u)\n" -#: vms-alpha.c:7470 +#: vms-alpha.c:7650 #, c-format msgid " majorid: %u, minorid: %u\n" msgstr " majorid: %u, minorid: %u\n" -#: vms-alpha.c:7478 +#: vms-alpha.c:7658 msgid "executable" msgstr "executável" -#: vms-alpha.c:7481 +#: vms-alpha.c:7661 msgid "linkable image" msgstr "imagem ligável" -#: vms-alpha.c:7488 +#: vms-alpha.c:7668 #, c-format msgid " image type: %u (%s)" msgstr " tipo de imagem: %u (%s)" -#: vms-alpha.c:7494 +#: vms-alpha.c:7674 msgid "native" msgstr "nativo" -#: vms-alpha.c:7497 +#: vms-alpha.c:7677 msgid "CLI" msgstr "CLI" -#: vms-alpha.c:7504 +#: vms-alpha.c:7684 #, c-format msgid ", subtype: %u (%s)\n" msgstr ", sub-tipo: %u (%s)\n" -#: vms-alpha.c:7511 +#: vms-alpha.c:7691 #, c-format msgid " offsets: isd: %u, activ: %u, symdbg: %u, imgid: %u, patch: %u\n" msgstr " desvios: isd: %u, activ: %u, symdbg: %u, imgid: %u, patch: %u\n" -#: vms-alpha.c:7515 +#: vms-alpha.c:7695 #, c-format msgid " fixup info rva: " msgstr " fixup info rva: " -#: vms-alpha.c:7517 +#: vms-alpha.c:7697 #, c-format msgid ", symbol vector rva: " msgstr ", vector símbolo rva: " -#: vms-alpha.c:7520 +#: vms-alpha.c:7700 #, c-format msgid "" "\n" @@ -7269,474 +7623,474 @@ "\n" " matriz de versão off: %u\n" -#: vms-alpha.c:7525 +#: vms-alpha.c:7705 #, c-format msgid " img I/O count: %u, nbr channels: %u, req pri: %08x%08x\n" msgstr " total img I/O: %u, nº canais: %u, req pri: %08x%08x\n" -#: vms-alpha.c:7531 +#: vms-alpha.c:7711 #, c-format msgid " linker flags: %08x:" msgstr " bands linker: %08x:" -#: vms-alpha.c:7562 +#: vms-alpha.c:7742 #, c-format msgid " ident: 0x%08x, sysver: 0x%08x, match ctrl: %u, symvect_size: %u\n" msgstr " ident: 0x%08x, sysver: 0x%08x, match ctrl: %u, symvect_size: %u\n" -#: vms-alpha.c:7568 +#: vms-alpha.c:7748 #, c-format msgid " BPAGE: %u" msgstr " BPAGE: %u" -#: vms-alpha.c:7575 +#: vms-alpha.c:7755 #, c-format msgid ", ext fixup offset: %u, no_opt psect off: %u" msgstr ", desvio ext fixup: %u, no_opt psect off: %u" -#: vms-alpha.c:7578 +#: vms-alpha.c:7758 #, c-format msgid ", alias: %u\n" msgstr ", aliás: %u\n" -#: vms-alpha.c:7586 +#: vms-alpha.c:7766 #, c-format msgid "system version array information:\n" msgstr "informação da matriz de versão do sistema:\n" -#: vms-alpha.c:7590 +#: vms-alpha.c:7770 #, c-format msgid "cannot read EIHVN header\n" msgstr "impossível ler cabeçalho EIHVN\n" -#: vms-alpha.c:7600 +#: vms-alpha.c:7780 #, c-format msgid "cannot read EIHVN version\n" msgstr "impossível ler versão EIHVN\n" -#: vms-alpha.c:7603 +#: vms-alpha.c:7783 #, c-format msgid " %02u " msgstr " %02u " -#: vms-alpha.c:7607 +#: vms-alpha.c:7787 msgid "BASE_IMAGE " msgstr "BASE_IMAGE " -#: vms-alpha.c:7610 +#: vms-alpha.c:7790 msgid "MEMORY_MANAGEMENT" msgstr "MEMORY_MANAGEMENT" -#: vms-alpha.c:7613 +#: vms-alpha.c:7793 msgid "IO " msgstr "IO " -#: vms-alpha.c:7616 +#: vms-alpha.c:7796 msgid "FILES_VOLUMES " msgstr "FILES_VOLUMES " -#: vms-alpha.c:7619 +#: vms-alpha.c:7799 msgid "PROCESS_SCHED " msgstr "PROCESS_SCHED " -#: vms-alpha.c:7622 +#: vms-alpha.c:7802 msgid "SYSGEN " msgstr "SYSGEN " -#: vms-alpha.c:7625 +#: vms-alpha.c:7805 msgid "CLUSTERS_LOCKMGR " msgstr "CLUSTERS_LOCKMGR " -#: vms-alpha.c:7628 +#: vms-alpha.c:7808 msgid "LOGICAL_NAMES " msgstr "LOGICAL_NAMES " -#: vms-alpha.c:7631 +#: vms-alpha.c:7811 msgid "SECURITY " msgstr "SECURITY " -#: vms-alpha.c:7634 +#: vms-alpha.c:7814 msgid "IMAGE_ACTIVATOR " msgstr "IMAGE_ACTIVATOR " -#: vms-alpha.c:7637 +#: vms-alpha.c:7817 msgid "NETWORKS " msgstr "NETWORKS " -#: vms-alpha.c:7640 +#: vms-alpha.c:7820 msgid "COUNTERS " msgstr "COUNTERS " -#: vms-alpha.c:7643 +#: vms-alpha.c:7823 msgid "STABLE " msgstr "STABLE " -#: vms-alpha.c:7646 +#: vms-alpha.c:7826 msgid "MISC " msgstr "MISC " -#: vms-alpha.c:7649 +#: vms-alpha.c:7829 msgid "CPU " msgstr "CPU " -#: vms-alpha.c:7652 +#: vms-alpha.c:7832 msgid "VOLATILE " msgstr "VOLATILE " -#: vms-alpha.c:7655 +#: vms-alpha.c:7835 msgid "SHELL " msgstr "SHELL " -#: vms-alpha.c:7658 +#: vms-alpha.c:7838 msgid "POSIX " msgstr "POSIX " -#: vms-alpha.c:7661 +#: vms-alpha.c:7841 msgid "MULTI_PROCESSING " msgstr "MULTI_PROCESSING " -#: vms-alpha.c:7664 +#: vms-alpha.c:7844 msgid "GALAXY " msgstr "GALAXY " -#: vms-alpha.c:7667 +#: vms-alpha.c:7847 msgid "*unknown* " msgstr "*desconhecido* " -#: vms-alpha.c:7683 vms-alpha.c:7958 +#: vms-alpha.c:7863 vms-alpha.c:8137 #, c-format msgid "cannot read EIHA\n" msgstr "impossível ler EIHA\n" -#: vms-alpha.c:7686 +#: vms-alpha.c:7866 #, c-format msgid "Image activation: (size=%u)\n" msgstr "Activação da imagem: (tam=%u)\n" -#: vms-alpha.c:7689 +#: vms-alpha.c:7869 #, c-format msgid " First address : 0x%08x 0x%08x\n" msgstr " 1º endereço: 0x%08x 0x%08x\n" -#: vms-alpha.c:7693 +#: vms-alpha.c:7873 #, c-format msgid " Second address: 0x%08x 0x%08x\n" msgstr " 2º endereço: 0x%08x 0x%08x\n" -#: vms-alpha.c:7697 +#: vms-alpha.c:7877 #, c-format msgid " Third address : 0x%08x 0x%08x\n" msgstr " 3º endereço: 0x%08x 0x%08x\n" -#: vms-alpha.c:7701 +#: vms-alpha.c:7881 #, c-format msgid " Fourth address: 0x%08x 0x%08x\n" msgstr " 4º endereço: 0x%08x 0x%08x\n" -#: vms-alpha.c:7705 +#: vms-alpha.c:7885 #, c-format msgid " Shared image : 0x%08x 0x%08x\n" msgstr " Imagem partilhada: 0x%08x 0x%08x\n" -#: vms-alpha.c:7716 +#: vms-alpha.c:7896 #, c-format msgid "cannot read EIHI\n" msgstr "impossível ler EIHI\n" -#: vms-alpha.c:7720 +#: vms-alpha.c:7900 #, c-format msgid "Image identification: (major: %u, minor: %u)\n" msgstr "Identificação da imagem: (principal: %u, menor: %u)\n" -#: vms-alpha.c:7723 +#: vms-alpha.c:7903 #, c-format msgid " image name : %.*s\n" msgstr " nome da imagem : %.*s\n" -#: vms-alpha.c:7725 +#: vms-alpha.c:7905 #, c-format msgid " link time : %s\n" msgstr " hora de ligação : %s\n" -#: vms-alpha.c:7727 +#: vms-alpha.c:7907 #, c-format msgid " image ident : %.*s\n" msgstr " ident imagem : %.*s\n" -#: vms-alpha.c:7729 +#: vms-alpha.c:7909 #, c-format msgid " linker ident : %.*s\n" msgstr " ident linker : %.*s\n" -#: vms-alpha.c:7731 +#: vms-alpha.c:7911 #, c-format msgid " image build ident: %.*s\n" msgstr " ident build imagem: %.*s\n" -#: vms-alpha.c:7741 +#: vms-alpha.c:7921 #, c-format msgid "cannot read EIHS\n" msgstr "impossível ler EIHS\n" -#: vms-alpha.c:7745 +#: vms-alpha.c:7925 #, c-format msgid "Image symbol & debug table: (major: %u, minor: %u)\n" msgstr "Tabela de símbolo de imagem e depuração: (principal: %u, menor: %u)\n" -#: vms-alpha.c:7751 +#: vms-alpha.c:7931 #, c-format msgid " debug symbol table : vbn: %u, size: %u (0x%x)\n" msgstr " tabela de símbolo de depuração : vbn: %u, tamanho: %u (0x%x)\n" -#: vms-alpha.c:7756 +#: vms-alpha.c:7936 #, c-format msgid " global symbol table: vbn: %u, records: %u\n" msgstr " tabela de símbolo global: vbn: %u, registos: %u\n" -#: vms-alpha.c:7761 +#: vms-alpha.c:7941 #, c-format msgid " debug module table : vbn: %u, size: %u\n" msgstr " tabela de módulo de depuração: vbn: %u, tamanho: %u\n" -#: vms-alpha.c:7774 +#: vms-alpha.c:7954 #, c-format msgid "cannot read EISD\n" msgstr "impossível ler EISD\n" -#: vms-alpha.c:7785 +#: vms-alpha.c:7965 #, c-format msgid "Image section descriptor: (major: %u, minor: %u, size: %u, offset: %u)\n" msgstr "Descritor de secção de imagem: (principal: %u, menor: %u, tamanho: %u, desvio: %u)\n" -#: vms-alpha.c:7793 +#: vms-alpha.c:7973 #, c-format msgid " section: base: 0x%08x%08x size: 0x%08x\n" msgstr " secção: base: 0x%08x%08x tamanho: 0x%08x\n" -#: vms-alpha.c:7798 +#: vms-alpha.c:7978 #, c-format msgid " flags: 0x%04x" msgstr " bandeiras: 0x%04x" -#: vms-alpha.c:7836 +#: vms-alpha.c:8016 #, c-format msgid " vbn: %u, pfc: %u, matchctl: %u type: %u (" msgstr " vbn: %u, pfc: %u, matchctl: %u tipo: %u (" -#: vms-alpha.c:7842 +#: vms-alpha.c:8022 msgid "NORMAL" msgstr "NORMAL" -#: vms-alpha.c:7845 +#: vms-alpha.c:8025 msgid "SHRFXD" msgstr "SHRFXD" -#: vms-alpha.c:7848 +#: vms-alpha.c:8028 msgid "PRVFXD" msgstr "PRVFXD" -#: vms-alpha.c:7851 +#: vms-alpha.c:8031 msgid "SHRPIC" msgstr "SHRPIC" -#: vms-alpha.c:7854 +#: vms-alpha.c:8034 msgid "PRVPIC" msgstr "PRVPIC" -#: vms-alpha.c:7857 +#: vms-alpha.c:8037 msgid "USRSTACK" msgstr "USRSTACK" -#: vms-alpha.c:7863 +#: vms-alpha.c:8043 msgid ")\n" msgstr ")\n" -#: vms-alpha.c:7866 +#: vms-alpha.c:8046 #, c-format msgid " ident: 0x%08x, name: %.*s\n" msgstr " ident: 0x%08x, nome: %.*s\n" -#: vms-alpha.c:7876 +#: vms-alpha.c:8056 #, c-format msgid "cannot read DMT\n" msgstr "impossível ler DMT\n" -#: vms-alpha.c:7880 +#: vms-alpha.c:8060 #, c-format msgid "Debug module table:\n" msgstr "Tabela de módulo de depuração:\n" -#: vms-alpha.c:7889 +#: vms-alpha.c:8069 #, c-format msgid "cannot read DMT header\n" msgstr "impossível ler cabeçalho DMT\n" -#: vms-alpha.c:7895 +#: vms-alpha.c:8075 #, c-format msgid " module offset: 0x%08x, size: 0x%08x, (%u psects)\n" msgstr " desvio do módulo: 0x%08x, tamanho: 0x%08x, (%u psects)\n" -#: vms-alpha.c:7905 +#: vms-alpha.c:8085 #, c-format msgid "cannot read DMT psect\n" msgstr "impossível ler psect DMT\n" -#: vms-alpha.c:7909 +#: vms-alpha.c:8089 #, c-format msgid " psect start: 0x%08x, length: %u\n" msgstr " início psect: 0x%08x, tamanho: %u\n" -#: vms-alpha.c:7922 +#: vms-alpha.c:8102 #, c-format msgid "cannot read DST\n" msgstr "impossível ler DST\n" -#: vms-alpha.c:7932 +#: vms-alpha.c:8112 #, c-format msgid "cannot read GST\n" msgstr "impossível ler GST\n" -#: vms-alpha.c:7936 +#: vms-alpha.c:8116 #, c-format msgid "Global symbol table:\n" msgstr "Tabela de símbolo global:\n" -#: vms-alpha.c:7965 +#: vms-alpha.c:8143 #, c-format msgid "Image activator fixup: (major: %u, minor: %u)\n" msgstr "Fixup do activador de imagem: (principal: %u, menor: %u)\n" -#: vms-alpha.c:7969 +#: vms-alpha.c:8147 #, c-format msgid " iaflink : 0x%08x %08x\n" msgstr " iaflink : 0x%08x %08x\n" -#: vms-alpha.c:7973 +#: vms-alpha.c:8151 #, c-format msgid " fixuplnk: 0x%08x %08x\n" msgstr " fixuplnk: 0x%08x %08x\n" -#: vms-alpha.c:7976 +#: vms-alpha.c:8154 #, c-format msgid " size : %u\n" msgstr " tamanho: %u\n" -#: vms-alpha.c:7978 +#: vms-alpha.c:8156 #, c-format msgid " flags: 0x%08x\n" msgstr " bandeiras: 0x%08x\n" -#: vms-alpha.c:7983 +#: vms-alpha.c:8161 #, c-format msgid " qrelfixoff: %5u, lrelfixoff: %5u\n" msgstr " qrelfixoff: %5u, lrelfixoff: %5u\n" -#: vms-alpha.c:7988 +#: vms-alpha.c:8166 #, c-format msgid " qdotadroff: %5u, ldotadroff: %5u\n" msgstr " qdotadroff: %5u, ldotadroff: %5u\n" -#: vms-alpha.c:7993 +#: vms-alpha.c:8171 #, c-format msgid " codeadroff: %5u, lpfixoff : %5u\n" msgstr " codeadroff: %5u, lpfixoff : %5u\n" -#: vms-alpha.c:7996 +#: vms-alpha.c:8174 #, c-format msgid " chgprtoff : %5u\n" msgstr " chgprtoff : %5u\n" -#: vms-alpha.c:8000 +#: vms-alpha.c:8178 #, c-format msgid " shlstoff : %5u, shrimgcnt : %5u\n" msgstr " shlstoff : %5u, shrimgcnt : %5u\n" -#: vms-alpha.c:8003 +#: vms-alpha.c:8181 #, c-format msgid " shlextra : %5u, permctx : %5u\n" msgstr " shlextra : %5u, permctx : %5u\n" -#: vms-alpha.c:8006 +#: vms-alpha.c:8184 #, c-format msgid " base_va : 0x%08x\n" msgstr " base_va : 0x%08x\n" -#: vms-alpha.c:8008 +#: vms-alpha.c:8186 #, c-format msgid " lppsbfixoff: %5u\n" msgstr " lppsbfixoff: %5u\n" -#: vms-alpha.c:8016 +#: vms-alpha.c:8194 #, c-format msgid " Shareable images:\n" msgstr " Imagens partilháveis:\n" -#: vms-alpha.c:8021 +#: vms-alpha.c:8199 #, c-format msgid " %u: size: %u, flags: 0x%02x, name: %.*s\n" msgstr " %u: tam.: %u, bands: 0x%02x, nome: %.*s\n" -#: vms-alpha.c:8028 +#: vms-alpha.c:8206 #, c-format msgid " quad-word relocation fixups:\n" msgstr " fixups de relocalização de quad-word:\n" -#: vms-alpha.c:8033 +#: vms-alpha.c:8211 #, c-format msgid " long-word relocation fixups:\n" msgstr " fixups de relocalização de long-word:\n" -#: vms-alpha.c:8038 +#: vms-alpha.c:8216 #, c-format msgid " quad-word .address reference fixups:\n" msgstr " fixups de referência de .address de quad-word:\n" -#: vms-alpha.c:8043 +#: vms-alpha.c:8221 #, c-format msgid " long-word .address reference fixups:\n" msgstr " fixups de referência de .address de long-word:\n" -#: vms-alpha.c:8048 +#: vms-alpha.c:8226 #, c-format msgid " Code Address Reference Fixups:\n" msgstr " Fixups de referência de endereço de código:\n" -#: vms-alpha.c:8053 +#: vms-alpha.c:8231 #, c-format msgid " Linkage Pairs Reference Fixups:\n" msgstr "Fixups de referência de pares de ligação:\n" -#: vms-alpha.c:8062 +#: vms-alpha.c:8240 #, c-format msgid " Change Protection (%u entries):\n" msgstr " Alterar protecção (%u entradas):\n" -#: vms-alpha.c:8068 +#: vms-alpha.c:8246 #, c-format msgid " base: 0x%08x %08x, size: 0x%08x, prot: 0x%08x " msgstr " base: 0x%08x %08x, tam.: 0x%08x, prot: 0x%08x " #. FIXME: we do not yet support relocatable link. It is not obvious #. how to do it for debug infos. -#: vms-alpha.c:8908 +#: vms-alpha.c:9123 msgid "%P: relocatable link is not supported\n" msgstr "%P: ligação relocalizável não suportada\n" -#: vms-alpha.c:8979 +#: vms-alpha.c:9194 #, c-format msgid "%P: multiple entry points: in modules %pB and %pB\n" msgstr "%P: múltiplos pontos de entrada: nos módulos %pB e %pB\n" -#: vms-lib.c:1445 +#: vms-lib.c:1525 #, c-format msgid "could not open shared image '%s' from '%s'" msgstr "impossível abrir imagem partilhada \"%s\" de \"%s\"" -#: vms-misc.c:361 +#: vms-misc.c:367 msgid "_bfd_vms_output_counted called with zero bytes" msgstr "_bfd_vms_output_counted chamado com zero bytes" -#: vms-misc.c:366 +#: vms-misc.c:372 msgid "_bfd_vms_output_counted called with too many bytes" msgstr "_bfd_vms_output_counted chamado com demasiados bytes" @@ -7750,172 +8104,209 @@ msgid "%pB: dynamic object with no .loader section" msgstr "%pB: objecto dinâmico sem secção .loader" -#: xcofflink.c:1413 +#: xcofflink.c:1417 #, c-format msgid "%pB: `%s' has line numbers but no enclosing section" msgstr "%pB: \"%s\" tem números de linha mas sem secção envolvente" -#: xcofflink.c:1466 +#: xcofflink.c:1470 #, c-format msgid "%pB: class %d symbol `%s' has no aux entries" msgstr "%pB: classe %d símbolo \"%s\" não tem entradas aux" -#: xcofflink.c:1489 +#: xcofflink.c:1493 #, c-format msgid "%pB: symbol `%s' has unrecognized csect type %d" msgstr "%pB: símbolo \"%s\" tem tipo csect %d não reconhecido" -#: xcofflink.c:1502 +#: xcofflink.c:1506 #, c-format msgid "%pB: bad XTY_ER symbol `%s': class %d scnum %d scnlen %" msgstr "%pB: mau símbolo XTY_ER \"%s\": classe %d scnum %d scnlen %" -#: xcofflink.c:1533 +#: xcofflink.c:1537 #, c-format msgid "%pB: XMC_TC0 symbol `%s' is class %d scnlen %" msgstr "%pB: XMC_TC0 símbolo \"%s\" é classe %d scnlen %" -#: xcofflink.c:1680 +#: xcofflink.c:1684 #, c-format msgid "%pB: csect `%s' not in enclosing section" msgstr "%pB: csect \"%s\" não está em secção envolvente" -#: xcofflink.c:1788 +#: xcofflink.c:1792 #, c-format msgid "%pB: misplaced XTY_LD `%s'" msgstr "%pB: XTY_LD \"%s\" mal colocado" -#: xcofflink.c:2109 +#: xcofflink.c:2113 #, c-format msgid "%pB: reloc %s:% not in csect" msgstr "%pB: reloc %s:% fora de csect" -#: xcofflink.c:3196 +#: xcofflink.c:3193 #, c-format msgid "%s: no such symbol" msgstr "%s: sem tal símbolo" -#: xcofflink.c:3301 +#: xcofflink.c:3298 #, c-format msgid "warning: attempt to export undefined symbol `%s'" msgstr "aviso: tentativa de exportar símbolo \"%s\" indefinido" -#: xcofflink.c:3680 +#: xcofflink.c:3677 msgid "error: undefined symbol __rtinit" msgstr "erro: símbolo __rtinit indefinido" -#: xcofflink.c:4060 +#: xcofflink.c:4055 #, c-format msgid "%pB: loader reloc in unrecognized section `%s'" msgstr "%pB: reloc loader em secção \"%s\" não reconhecida" -#: xcofflink.c:4072 +#: xcofflink.c:4067 #, c-format msgid "%pB: `%s' in loader reloc but not loader sym" msgstr "%pB: \"%s\" em reloc loader mas sem símbolo loader" -#: xcofflink.c:4089 +#: xcofflink.c:4084 #, c-format msgid "%pB: loader reloc in read-only section %pA" msgstr "%pB: reloc loader em secção só de leitura %pA" -#: xcofflink.c:5113 +#: xcofflink.c:5112 #, c-format msgid "TOC overflow: %# > 0x10000; try -mminimal-toc when compiling" msgstr "Transporte TOC: %# > 0x10000; tente -mminimal-toc ao compilar" -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:5031 +#. Not fatal, this callback cannot fail. +#: elfnn-aarch64.c:2872 +#, c-format +msgid "unknown attribute for symbol `%s': 0x%02x" +msgstr "atributo desconhecido para o símbolo \"%s\": 0x%02x" + +#: elfnn-aarch64.c:5246 #, c-format msgid "%pB: error: erratum 835769 stub out of range (input file too large)" msgstr "%pB: erro: Erratum 835769 fictício fora do intervalo (ficheiro de entrada muito grande)" -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:5112 +#: elfnn-aarch64.c:5338 #, c-format msgid "%pB: error: erratum 843419 stub out of range (input file too large)" msgstr "%pB: erro: Erratum 843419 fictício fora do intervalo (ficheiro de entrada muito grande)" -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:5641 +#: elfnn-aarch64.c:5351 +msgid "%pB: error: erratum 843419 immediate 0x%" +msgstr "%pB: erro: erratum 843419 imediato 0x%" + +#: elfnn-aarch64.c:5899 #, c-format msgid "%pB: relocation %s against symbol `%s' which may bind externally can not be used when making a shared object; recompile with -fPIC" msgstr "%pB: relocalização %s contra símbolo \"%s\" que pode ligar externamente não pode ser usada ao fazer um objecto partilhado; recompile com -fPIC" -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:5732 +#: elfnn-aarch64.c:5990 #, c-format msgid "%pB: local symbol descriptor table be NULL when applying relocation %s against local symbol" msgstr "%pB: tabela de descritor de símbolo local é NULL ao aplicar relocalização %s contra símbolo local" -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:6830 +#: elfnn-aarch64.c:6103 elfnn-aarch64.c:6140 +#, c-format +msgid "%pB: TLS relocation %s against undefined symbol `%s'" +msgstr "%pB: relocalização TLS %s contra símbolo \"%s\" indefinido" + +#: elfnn-aarch64.c:7125 msgid "too many GOT entries for -fpic, please recompile with -fPIC" msgstr "Demasiadas entradas GOT para -fpic, recompile com -fPIC" -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:6858 +#: elfnn-aarch64.c:7153 msgid "one possible cause of this error is that the symbol is being referenced in the indicated code as if it had a larger alignment than was declared where it was defined" msgstr "Uma causa possível deste erro é o símbolo ser referenciado no código indicado como se tivesse um alinhamento maior do que aquele que foi declarado na definição." -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:7443 +#: elfnn-aarch64.c:7720 #, c-format msgid "%pB: relocation %s against `%s' can not be used when making a shared object" msgstr "%pB: relocalização %s contra \"%s\" não pode ser usada ao fazer um objecto partilhado" -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:182 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:217 +#: elfnn-riscv.c:187 elfnn-riscv.c:222 #, c-format msgid "%pB: warning: RVE PLT generation not supported" msgstr "%pB: aviso: geração RVE PLT não suportada" -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2311 +#: elfnn-riscv.c:1977 +#, c-format +msgid "%pcrel_lo section symbol with an addend" +msgstr "símbolo de secção %pcrel_lo com uma adenda" + +#: elfnn-riscv.c:2198 +#, c-format +msgid "%%X%%P: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC\n" +msgstr "%%X%%P: relocalização %s contra \"%s\" não pode ser usada ao fazer um objecto partilhado; recompile com -fPIC\n" + +#: elfnn-riscv.c:2208 +#, c-format +msgid "%%X%%P: unresolvable %s relocation against symbol `%s'\n" +msgstr "%%X%%P: relocalização %s insolúvel contra símbolo \"%s\"\n" + +#: elfnn-riscv.c:2247 msgid "%X%P: internal error: out of range error\n" msgstr "%X%P: erro interno: erro fora do intervalo\n" -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2315 +#: elfnn-riscv.c:2252 msgid "%X%P: internal error: unsupported relocation error\n" msgstr "%X%P: erro interno: erro relocalização não suportada\n" -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2325 +#: elfnn-riscv.c:2258 +msgid "dangerous relocation error" +msgstr "erro de relocalização perigosa" + +#: elfnn-riscv.c:2264 msgid "%X%P: internal error: unknown error\n" msgstr "%X%P: erro interno: erro desconhecido\n" -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2711 +#: elfnn-riscv.c:2630 #, c-format -msgid "error: %pB: Mis-matched ISA version for '%s' exetension. %d.%d vs %d.%d" +msgid "error: %pB: Mis-matched ISA version for '%s' extension. %d.%d vs %d.%d" msgstr "erro: %pB: versão ISA trocada para \"%s\" extensão. %d.%d vs %d.%d" -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2729 +#: elfnn-riscv.c:2648 #, c-format -msgid "error: %pB: corrupted ISA string '%s'.first letter should be 'i' or 'e' but got '%s'." +msgid "error: %pB: corrupted ISA string '%s'. First letter should be 'i' or 'e' but got '%s'." msgstr "erro: %pB: cadeia ISA \"%s\" corrompida. Primeira letra esperada era \"i\" ou \"e\", obtida \"%s\"." -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2773 +#: elfnn-riscv.c:2692 #, c-format msgid "error: %pB: Mis-matched ISA string to merge '%s' and '%s'." msgstr "erro: %pB: cadeia ISA trocada para unir \"%s\" e \"%s\"." -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2921 +#: elfnn-riscv.c:2893 #, c-format msgid "error: %pB: ISA string of input (%s) doesn't match output (%s)." msgstr "erro: %pB: cadeia ISA de entrada (%s) não corresponde à saída (%s)." -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2946 +#: elfnn-riscv.c:2913 #, c-format msgid "error: %pB: XLEN of input (%u) doesn't match output (%u)." msgstr "erro: %pB: XLEN de entrada (%u) não corresponde à saída (%u)." -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2954 +#: elfnn-riscv.c:2921 #, c-format -msgid "error: %pB: Unspported XLEN (%u), you mightusing wrong emulation." +msgid "error: %pB: Unsupported XLEN (%u), you might be using wrong emulation." msgstr "erro: %pB: XLEN não suportado (%u), poderá estar a usar a emulação errada." -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:3039 +#: elfnn-riscv.c:3035 #, c-format -msgid "error: %pB: conflicting priv spec version (major/minor/revision)." -msgstr "erro: %pB: versão priv spec em conflito (principal/menor/revisão)." +msgid "warning: %pB use privilege spec version %u.%u.%u but the output use version %u.%u.%u." +msgstr "aviso: %pB usa a versão privilege spec %u.%u.%u mas a saída usa a versão %u.%u.%u." + +#: elfnn-riscv.c:3053 +msgid "warning: privilege spec version 1.9.1 can not be linked with other spec versions." +msgstr "aviso: privilege spec versão 1.9.1 não pode ser ligada a outras versões spec." -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:3055 +#: elfnn-riscv.c:3081 #, c-format msgid "error: %pB use %u-byte stack aligned but the output use %u-byte stack aligned." msgstr "erro: %pB usa alinhamento de pilha %u-byte mas a saída usa alinhamento de pilha %u-byte." -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:3096 +#: elfnn-riscv.c:3122 #, c-format msgid "" "%pB: ABI is incompatible with that of the selected emulation:\n" @@ -7924,111 +8315,111 @@ "%pB: ABI é incompatível com aquele da emulação seleccionada:\n" " emulação alvo \"%s\" não corresponde a \"%s\"" -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:3119 +#: elfnn-riscv.c:3176 #, c-format msgid "%pB: can't link %s modules with %s modules" msgstr "%pB: impossível ligar módulos %s com módulos %s" -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:3129 +#: elfnn-riscv.c:3186 #, c-format msgid "%pB: can't link RVE with other target" msgstr "%pB: impossível ligar RVE com outro alvo" -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:3630 +#: elfnn-riscv.c:3724 #, c-format msgid "%pB(%pA+%#): % bytes required for alignment to %-byte boundary, but only % present" msgstr "%pB(%pA+%#): % bytes requeridos para alinhamento com limite %-byte, mas só há % presentes" -#: peigen.c:157 pepigen.c:157 pex64igen.c:157 +#: peXXigen.c:164 #, c-format msgid "%pB: unable to find name for empty section" msgstr "%pB: impossível encontrar nome para secção vazia" -#: peigen.c:183 pepigen.c:183 pex64igen.c:183 +#: peXXigen.c:191 #, c-format msgid "%pB: out of memory creating name for empty section" msgstr "%pB: sem memória ao criar nome para secção vazia" -#: peigen.c:194 pepigen.c:194 pex64igen.c:194 +#: peXXigen.c:201 #, c-format msgid "%pB: unable to create fake empty section" msgstr "%pB: impossível criar secção vazia falsa" -#: peigen.c:532 pepigen.c:532 pex64igen.c:532 +#: peXXigen.c:539 #, c-format -msgid "%pB: aout header specifies an invalid number of data-directory entries: %ld" -msgstr "%pB: cabeçalho aout especifica um número inválido de entradas data-directory: %ld" +msgid "%pB: aout header specifies an invalid number of data-directory entries: %u" +msgstr "%pB: cabeçalho aout especifica um número inválido de entradas data-directory: %u" -#: peigen.c:1091 pepigen.c:1091 pex64igen.c:1091 +#: peXXigen.c:1088 #, c-format msgid "%pB: line number overflow: 0x%lx > 0xffff" msgstr "%pB: transporte de nº de linha: 0x%lx > 0xffff" -#: peigen.c:1235 pepigen.c:1235 pex64igen.c:1235 +#: peXXigen.c:1241 msgid "Export Directory [.edata (or where ever we found it)]" msgstr "Pasta de exportação [.edata (ou onde o encontrámos)]" -#: peigen.c:1236 pepigen.c:1236 pex64igen.c:1236 +#: peXXigen.c:1242 msgid "Import Directory [parts of .idata]" msgstr "Pasta de importação [partes de .idata]" -#: peigen.c:1237 pepigen.c:1237 pex64igen.c:1237 +#: peXXigen.c:1243 msgid "Resource Directory [.rsrc]" msgstr "Pasta de recursos [.rsrc]" -#: peigen.c:1238 pepigen.c:1238 pex64igen.c:1238 +#: peXXigen.c:1244 msgid "Exception Directory [.pdata]" msgstr "Pasta de excepções [.pdata]" -#: peigen.c:1239 pepigen.c:1239 pex64igen.c:1239 +#: peXXigen.c:1245 msgid "Security Directory" msgstr "Pasta de segurança" -#: peigen.c:1240 pepigen.c:1240 pex64igen.c:1240 +#: peXXigen.c:1246 msgid "Base Relocation Directory [.reloc]" msgstr "Pasta de relocalização base [.reloc]" -#: peigen.c:1241 pepigen.c:1241 pex64igen.c:1241 +#: peXXigen.c:1247 msgid "Debug Directory" msgstr "Pasta de depuração" -#: peigen.c:1242 pepigen.c:1242 pex64igen.c:1242 +#: peXXigen.c:1248 msgid "Description Directory" msgstr "Pasta de descrição" -#: peigen.c:1243 pepigen.c:1243 pex64igen.c:1243 +#: peXXigen.c:1249 msgid "Special Directory" msgstr "Pasta especial" -#: peigen.c:1244 pepigen.c:1244 pex64igen.c:1244 +#: peXXigen.c:1250 msgid "Thread Storage Directory [.tls]" msgstr "Pasta de armazenamento de Thread [.tls]" -#: peigen.c:1245 pepigen.c:1245 pex64igen.c:1245 +#: peXXigen.c:1251 msgid "Load Configuration Directory" msgstr "Pasta de configuração de carregamento" -#: peigen.c:1246 pepigen.c:1246 pex64igen.c:1246 +#: peXXigen.c:1252 msgid "Bound Import Directory" msgstr "Pasta de importação vinculada" -#: peigen.c:1247 pepigen.c:1247 pex64igen.c:1247 +#: peXXigen.c:1253 msgid "Import Address Table Directory" msgstr "Pasta de tabela de endereços de importação" -#: peigen.c:1248 pepigen.c:1248 pex64igen.c:1248 +#: peXXigen.c:1254 msgid "Delay Import Directory" msgstr "Pasta de atraso de importação" -#: peigen.c:1249 pepigen.c:1249 pex64igen.c:1249 +#: peXXigen.c:1255 msgid "CLR Runtime Header" msgstr "Cabeçalho de execução CLR" -#: peigen.c:1250 pepigen.c:1250 pex64igen.c:1250 +#: peXXigen.c:1256 msgid "Reserved" msgstr "Reservado" -#: peigen.c:1310 pepigen.c:1310 pex64igen.c:1310 +#: peXXigen.c:1316 #, c-format msgid "" "\n" @@ -8037,7 +8428,7 @@ "\n" "Há uma tabela de importação, mas a secção que a contém não pôde ser encontrada\n" -#: peigen.c:1316 pepigen.c:1316 pex64igen.c:1316 +#: peXXigen.c:1322 #, c-format msgid "" "\n" @@ -8046,7 +8437,7 @@ "\n" "Há uma tabela de importação em %s, mas essa secção não tem conteúdo\n" -#: peigen.c:1323 pepigen.c:1323 pex64igen.c:1323 +#: peXXigen.c:1329 #, c-format msgid "" "\n" @@ -8055,7 +8446,7 @@ "\n" "Há uma tabela de importação em %s em 0x%lx\n" -#: peigen.c:1365 pepigen.c:1365 pex64igen.c:1365 +#: peXXigen.c:1369 #, c-format msgid "" "\n" @@ -8064,12 +8455,12 @@ "\n" "Descritor de função localizado no endereço inicial: %04lx\n" -#: peigen.c:1369 pepigen.c:1369 pex64igen.c:1369 +#: peXXigen.c:1373 #, c-format msgid "\tcode-base %08lx toc (loadable/actual) %08lx/%08lx\n" msgstr "\tcode-base %08lx toc (carregável/actual) %08lx/%08lx\n" -#: peigen.c:1377 pepigen.c:1377 pex64igen.c:1377 +#: peXXigen.c:1380 #, c-format msgid "" "\n" @@ -8078,7 +8469,7 @@ "\n" "Sem secção reldata! Descritor de função não descodificado.\n" -#: peigen.c:1382 pepigen.c:1382 pex64igen.c:1382 +#: peXXigen.c:1385 #, c-format msgid "" "\n" @@ -8087,7 +8478,7 @@ "\n" "As tabelas de importação (interpretado %s conteúdo de secção)\n" -#: peigen.c:1385 pepigen.c:1385 pex64igen.c:1385 +#: peXXigen.c:1388 #, c-format msgid "" " vma: Hint Time Forward DLL First\n" @@ -8096,7 +8487,7 @@ " vma: Dica Hora Avanço DLL Prim.\n" " Tabela Selo Cadeia Nome Thunk\n" -#: peigen.c:1435 pepigen.c:1435 pex64igen.c:1435 +#: peXXigen.c:1437 #, c-format msgid "" "\n" @@ -8105,12 +8496,12 @@ "\n" "\tNome DLL: %.*s\n" -#: peigen.c:1451 pepigen.c:1451 pex64igen.c:1451 +#: peXXigen.c:1453 #, c-format msgid "\tvma: Hint/Ord Member-Name Bound-To\n" msgstr "\tvma: Dica/Ord Nome-membro ligado a\n" -#: peigen.c:1476 pepigen.c:1476 pex64igen.c:1476 +#: peXXigen.c:1478 #, c-format msgid "" "\n" @@ -8119,13 +8510,12 @@ "\n" "Há um primeiro thunk, mas a secção que o contém não pôde ser encontrada\n" -#: peigen.c:1520 peigen.c:1559 pepigen.c:1520 pepigen.c:1559 pex64igen.c:1520 -#: pex64igen.c:1559 +#: peXXigen.c:1522 peXXigen.c:1561 #, c-format msgid "\t" msgstr "\t" -#: peigen.c:1652 pepigen.c:1652 pex64igen.c:1652 +#: peXXigen.c:1654 #, c-format msgid "" "\n" @@ -8134,7 +8524,7 @@ "\n" "Há uma tabela de exportação, mas a secção que a contém não pôde ser encontrada\n" -#: peigen.c:1658 pepigen.c:1658 pex64igen.c:1658 +#: peXXigen.c:1660 #, c-format msgid "" "\n" @@ -8143,7 +8533,7 @@ "\n" "Há uma tabela de exportação em %s, mas essa secção não tem conteúdo\n" -#: peigen.c:1669 pepigen.c:1669 pex64igen.c:1669 +#: peXXigen.c:1671 #, c-format msgid "" "\n" @@ -8152,7 +8542,7 @@ "\n" "Há uma tabela de exportação em %s, mas não serve nessa secção\n" -#: peigen.c:1680 pepigen.c:1680 pex64igen.c:1680 +#: peXXigen.c:1682 #, c-format msgid "" "\n" @@ -8161,7 +8551,7 @@ "\n" "Há uma tabela de exportação em %s, mas é demasiado pequena (%d)\n" -#: peigen.c:1686 pepigen.c:1686 pex64igen.c:1686 +#: peXXigen.c:1688 #, c-format msgid "" "\n" @@ -8170,7 +8560,7 @@ "\n" "Há uma tabela de exportação em %s em 0x%lx\n" -#: peigen.c:1714 pepigen.c:1714 pex64igen.c:1714 +#: peXXigen.c:1716 #, c-format msgid "" "\n" @@ -8181,67 +8571,67 @@ "As tabelas de exportação (interpretado %s conteúdo de secção)\n" "\n" -#: peigen.c:1718 pepigen.c:1718 pex64igen.c:1718 +#: peXXigen.c:1720 #, c-format msgid "Export Flags \t\t\t%lx\n" msgstr "Bandeiras de exportação \t\t\t%lx\n" -#: peigen.c:1721 pepigen.c:1721 pex64igen.c:1721 +#: peXXigen.c:1723 #, c-format msgid "Time/Date stamp \t\t%lx\n" msgstr "Selo Hora/Data \t\t%lx\n" -#: peigen.c:1725 pepigen.c:1725 pex64igen.c:1725 +#: peXXigen.c:1727 #, c-format msgid "Major/Minor \t\t\t%d/%d\n" msgstr "Principal/Menor \t\t\t%d/%d\n" -#: peigen.c:1728 pepigen.c:1728 pex64igen.c:1728 +#: peXXigen.c:1730 #, c-format msgid "Name \t\t\t\t" msgstr "Nome \t\t\t\t" -#: peigen.c:1739 pepigen.c:1739 pex64igen.c:1739 +#: peXXigen.c:1741 #, c-format msgid "Ordinal Base \t\t\t%ld\n" msgstr "Base ordinal \t\t\t%ld\n" -#: peigen.c:1742 pepigen.c:1742 pex64igen.c:1742 +#: peXXigen.c:1744 #, c-format msgid "Number in:\n" msgstr "Número em:\n" -#: peigen.c:1745 pepigen.c:1745 pex64igen.c:1745 +#: peXXigen.c:1747 #, c-format msgid "\tExport Address Table \t\t%08lx\n" msgstr "\tTabela end. exportação \t\t%08lx\n" -#: peigen.c:1749 pepigen.c:1749 pex64igen.c:1749 +#: peXXigen.c:1751 #, c-format msgid "\t[Name Pointer/Ordinal] Table\t%08lx\n" msgstr "\t[Nome Ponteiro/Ordinal] Tabela\t%08lx\n" -#: peigen.c:1752 pepigen.c:1752 pex64igen.c:1752 +#: peXXigen.c:1754 #, c-format msgid "Table Addresses\n" msgstr "Endereços da tabela\n" -#: peigen.c:1755 pepigen.c:1755 pex64igen.c:1755 +#: peXXigen.c:1757 #, c-format msgid "\tExport Address Table \t\t" msgstr "\tTabela end. exportação \t\t" -#: peigen.c:1760 pepigen.c:1760 pex64igen.c:1760 +#: peXXigen.c:1762 #, c-format msgid "\tName Pointer Table \t\t" msgstr "\tTabela Nome Ponteiro \t\t" -#: peigen.c:1765 pepigen.c:1765 pex64igen.c:1765 +#: peXXigen.c:1767 #, c-format msgid "\tOrdinal Table \t\t\t" msgstr "\tTabela ordinal \t\t\t" -#: peigen.c:1779 pepigen.c:1779 pex64igen.c:1779 +#: peXXigen.c:1781 #, c-format msgid "" "\n" @@ -8250,20 +8640,20 @@ "\n" "Tabela end. exportação -- Base ordinal %ld\n" -#: peigen.c:1788 pepigen.c:1788 pex64igen.c:1788 +#: peXXigen.c:1790 #, c-format msgid "\tInvalid Export Address Table rva (0x%lx) or entry count (0x%lx)\n" msgstr "\trva de tabela de end. de exportação (0x%lx) ou total de entradas (0x%lx) inválidos\n" -#: peigen.c:1807 pepigen.c:1807 pex64igen.c:1807 +#: peXXigen.c:1809 msgid "Forwarder RVA" msgstr "Reencaminhador RVA" -#: peigen.c:1819 pepigen.c:1819 pex64igen.c:1819 +#: peXXigen.c:1821 msgid "Export RVA" msgstr "Exportação RVA" -#: peigen.c:1826 pepigen.c:1826 pex64igen.c:1826 +#: peXXigen.c:1828 #, c-format msgid "" "\n" @@ -8272,29 +8662,27 @@ "\n" "Tabela [Ordinal/Nome Ponteiro]\n" -#: peigen.c:1834 pepigen.c:1834 pex64igen.c:1834 +#: peXXigen.c:1836 #, c-format msgid "\tInvalid Name Pointer Table rva (0x%lx) or entry count (0x%lx)\n" msgstr "\trva de tabela de ponteiro de nome (0x%lx) ou total de entradas (0x%lx) inválidos\n" -#: peigen.c:1841 pepigen.c:1841 pex64igen.c:1841 +#: peXXigen.c:1843 #, c-format msgid "\tInvalid Ordinal Table rva (0x%lx) or entry count (0x%lx)\n" msgstr "\trva de tabela ordinal (0x%lx) ou total de entradas (0x%lx) inválidos\n" -#: peigen.c:1855 pepigen.c:1855 pex64igen.c:1855 +#: peXXigen.c:1857 #, c-format msgid "\t[%4ld] \n" msgstr "\t[%4ld] \n" -#: peigen.c:1909 peigen.c:2106 pepigen.c:1909 pepigen.c:2106 pex64igen.c:1909 -#: pex64igen.c:2106 +#: peXXigen.c:1911 peXXigen.c:2107 #, c-format msgid "warning, .pdata section size (%ld) is not a multiple of %d\n" msgstr "Aviso, .tamanho da secção pdata (%ld) não é múltiplo de %d\n" -#: peigen.c:1913 peigen.c:2110 pepigen.c:1913 pepigen.c:2110 pex64igen.c:1913 -#: pex64igen.c:2110 +#: peXXigen.c:1915 peXXigen.c:2111 #, c-format msgid "" "\n" @@ -8303,12 +8691,12 @@ "\n" "A tabela de função (interpretado conteúdo de secção .pdata)\n" -#: peigen.c:1916 pepigen.c:1916 pex64igen.c:1916 +#: peXXigen.c:1918 #, c-format msgid " vma:\t\t\tBegin Address End Address Unwind Info\n" msgstr " vma:\t\t\tEnd. inicial End. final Info Unwind\n" -#: peigen.c:1918 pepigen.c:1918 pex64igen.c:1918 +#: peXXigen.c:1920 #, c-format msgid "" " vma:\t\tBegin End EH EH PrologEnd Exception\n" @@ -8317,27 +8705,27 @@ " vma:\t\tInício Fim EH EH PrólogFim Excepção\n" " \t\tEndereço Endereço Gestor Dados Endereço Máscara\n" -#: peigen.c:1931 pepigen.c:1931 pex64igen.c:1931 +#: peXXigen.c:1933 #, c-format msgid "Virtual size of .pdata section (%ld) larger than real size (%ld)\n" msgstr "Tamanho virtual da secção .pdata (%ld) maior que o tamanho real (%ld)\n" -#: peigen.c:2001 pepigen.c:2001 pex64igen.c:2001 +#: peXXigen.c:2002 #, c-format msgid " Register save millicode" msgstr " Register save millicode" -#: peigen.c:2004 pepigen.c:2004 pex64igen.c:2004 +#: peXXigen.c:2005 #, c-format msgid " Register restore millicode" msgstr " Register restore millicode" -#: peigen.c:2007 pepigen.c:2007 pex64igen.c:2007 +#: peXXigen.c:2008 #, c-format msgid " Glue code sequence" msgstr " Colar sequência de código" -#: peigen.c:2112 pepigen.c:2112 pex64igen.c:2112 +#: peXXigen.c:2113 #, c-format msgid "" " vma:\t\tBegin Prolog Function Flags Exception EH\n" @@ -8346,7 +8734,7 @@ " vma:\t\tInício Prólogo Função Bands Excepção EH\n" " \t\tEndereço Tam. Tam. 32b exc Gestor Dados\n" -#: peigen.c:2234 pepigen.c:2234 pex64igen.c:2234 +#: peXXigen.c:2234 #, c-format msgid "" "\n" @@ -8357,7 +8745,7 @@ "\n" "Relocalizações base de ficheiros PE (interpretado conteúdo de secção .reloc)\n" -#: peigen.c:2264 pepigen.c:2264 pex64igen.c:2264 +#: peXXigen.c:2263 #, c-format msgid "" "\n" @@ -8366,62 +8754,62 @@ "\n" "Endereço virtual: %08lx, tamanho do pedaço %ld (0x%lx), número de fixups %ld\n" -#: peigen.c:2282 pepigen.c:2282 pex64igen.c:2282 +#: peXXigen.c:2281 #, c-format msgid "\treloc %4d offset %4x [%4lx] %s" msgstr "\treloc %4d desvio %4x [%4lx] %s" -#: peigen.c:2343 pepigen.c:2343 pex64igen.c:2343 +#: peXXigen.c:2342 #, c-format msgid "%03x %*.s Entry: " msgstr "%03x %*.s Entrada: " -#: peigen.c:2367 pepigen.c:2367 pex64igen.c:2367 +#: peXXigen.c:2366 #, c-format msgid "name: [val: %08lx len %d]: " msgstr "nome: [val: %08lx tam %d]: " -#: peigen.c:2387 pepigen.c:2387 pex64igen.c:2387 +#: peXXigen.c:2386 #, c-format msgid "\n" msgstr "\n" -#: peigen.c:2397 pepigen.c:2397 pex64igen.c:2397 +#: peXXigen.c:2396 #, c-format msgid "\n" msgstr "\n" -#: peigen.c:2402 pepigen.c:2402 pex64igen.c:2402 +#: peXXigen.c:2401 #, c-format msgid "ID: %#08lx" msgstr "ID: %#08lx" -#: peigen.c:2405 pepigen.c:2405 pex64igen.c:2405 +#: peXXigen.c:2404 #, c-format msgid ", Value: %#08lx\n" msgstr ", Valor: %#08lx\n" -#: peigen.c:2427 pepigen.c:2427 pex64igen.c:2427 +#: peXXigen.c:2426 #, c-format msgid "%03x %*.s Leaf: Addr: %#08lx, Size: %#08lx, Codepage: %d\n" msgstr "%03x %*.s Folha: End.: %#08lx, Tamanho: %#08lx, Codepage: %d\n" -#: peigen.c:2469 pepigen.c:2469 pex64igen.c:2469 +#: peXXigen.c:2468 #, c-format msgid "\n" msgstr "\n" -#: peigen.c:2477 pepigen.c:2477 pex64igen.c:2477 +#: peXXigen.c:2476 #, c-format msgid " Table: Char: %d, Time: %08lx, Ver: %d/%d, Num Names: %d, IDs: %d\n" msgstr " Tabela: Car.: %d, Hora: %08lx, Ver: %d/%d, Nomes Núm: %d, IDs: %d\n" -#: peigen.c:2566 pepigen.c:2566 pex64igen.c:2566 +#: peXXigen.c:2564 #, c-format msgid "Corrupt .rsrc section detected!\n" msgstr "Secção .rsrc corrompida detectada!\n" -#: peigen.c:2590 pepigen.c:2590 pex64igen.c:2590 +#: peXXigen.c:2588 #, c-format msgid "" "\n" @@ -8430,17 +8818,17 @@ "\n" "AVISO: dados extra em secção .rsrc - será ignorada pelo Windows:\n" -#: peigen.c:2596 pepigen.c:2596 pex64igen.c:2596 +#: peXXigen.c:2594 #, c-format msgid " String table starts at offset: %#03x\n" msgstr " Tabela de cadeia começa no desvio: %#03x\n" -#: peigen.c:2599 pepigen.c:2599 pex64igen.c:2599 +#: peXXigen.c:2597 #, c-format msgid " Resources start at offset: %#03x\n" msgstr " Recursos começam no desvio: %#03x\n" -#: peigen.c:2651 pepigen.c:2651 pex64igen.c:2651 +#: peXXigen.c:2654 #, c-format msgid "" "\n" @@ -8449,7 +8837,7 @@ "\n" "Há uma pasta de depuração, mas a secção que a contém não pôde ser encontrada\n" -#: peigen.c:2657 pepigen.c:2657 pex64igen.c:2657 +#: peXXigen.c:2660 #, c-format msgid "" "\n" @@ -8458,7 +8846,7 @@ "\n" "Há uma pasta de depuração em %s, mas essa secção não tem conteúdo\n" -#: peigen.c:2664 pepigen.c:2664 pex64igen.c:2664 +#: peXXigen.c:2667 #, c-format msgid "" "\n" @@ -8467,7 +8855,7 @@ "\n" "Erro: secção %s contém o endereço dos dados de depuração, mas é muito pequena\n" -#: peigen.c:2669 pepigen.c:2669 pex64igen.c:2669 +#: peXXigen.c:2672 #, c-format msgid "" "\n" @@ -8478,22 +8866,22 @@ "Há uma pasta de depuração em %s em 0x%lx\n" "\n" -#: peigen.c:2676 pepigen.c:2676 pex64igen.c:2676 +#: peXXigen.c:2679 #, c-format msgid "The debug data size field in the data directory is too big for the section" msgstr "O campo de tamanho dos dados de depuração na pasta de dados é demasiado grande para a secção" -#: peigen.c:2681 pepigen.c:2681 pex64igen.c:2681 +#: peXXigen.c:2684 #, c-format msgid "Type Size Rva Offset\n" msgstr "Tipo Tam. Rva Desvio\n" -#: peigen.c:2729 pepigen.c:2729 pex64igen.c:2729 +#: peXXigen.c:2731 #, c-format msgid "(format %c%c%c%c signature %s age %ld)\n" msgstr "(formato %c%c%c%c assinatura %s idade %ld)\n" -#: peigen.c:2737 pepigen.c:2737 pex64igen.c:2737 +#: peXXigen.c:2741 #, c-format msgid "The debug directory size is not a multiple of the debug directory entry size\n" msgstr "O tamanho da pasta de depuração não é múltiplo do tamanho da entrada da pasta de depuração\n" @@ -8501,7 +8889,7 @@ #. The MS dumpbin program reportedly ands with 0xff0f before #. printing the characteristics field. Not sure why. No reason to #. emulate it here. -#: peigen.c:2757 pepigen.c:2757 pex64igen.c:2757 +#: peXXigen.c:2825 #, c-format msgid "" "\n" @@ -8510,97 +8898,124 @@ "\n" "Características 0x%x\n" -#: peigen.c:2993 pepigen.c:2993 pex64igen.c:2993 +#: peXXigen.c:3072 #, c-format msgid "%pB: Data Directory size (%lx) exceeds space left in section (%)" msgstr "%pB: tamanho da pasta de dados (%lx) excede o espaço deixado na secção (%)" -#: peigen.c:3025 pepigen.c:3025 pex64igen.c:3025 +#: peXXigen.c:3104 msgid "failed to update file offsets in debug directory" msgstr "Falha ao actualizar desvios de ficheiro na pasta de depuração" -#: peigen.c:3033 pepigen.c:3033 pex64igen.c:3033 +#: peXXigen.c:3112 #, c-format msgid "%pB: failed to read debug data section" msgstr "%pB: falha ao ler secção de dados de depuração" -#: peigen.c:3849 pepigen.c:3849 pex64igen.c:3849 +#: peXXigen.c:3928 #, c-format msgid ".rsrc merge failure: duplicate string resource: %d" msgstr "falha de união .rsrc: recurso de cadeia duplicado: %d" -#: peigen.c:3984 pepigen.c:3984 pex64igen.c:3984 +#: peXXigen.c:4063 msgid ".rsrc merge failure: multiple non-default manifests" msgstr "falha de união .rsrc: múltiplos manifestos não-predefinidos" -#: peigen.c:4002 pepigen.c:4002 pex64igen.c:4002 +#: peXXigen.c:4081 msgid ".rsrc merge failure: a directory matches a leaf" msgstr "falha de união .rsrc: uma pasta corresponde a uma folha" -#: peigen.c:4044 pepigen.c:4044 pex64igen.c:4044 +#: peXXigen.c:4123 msgid ".rsrc merge failure: duplicate leaf" msgstr "falha de união .rsrc: folha duplicada" -#: peigen.c:4046 pepigen.c:4046 pex64igen.c:4046 +#: peXXigen.c:4125 #, c-format msgid ".rsrc merge failure: duplicate leaf: %s" msgstr "falha de união .rsrc: folha duplicada: %s" -#: peigen.c:4112 pepigen.c:4112 pex64igen.c:4112 +#: peXXigen.c:4191 msgid ".rsrc merge failure: dirs with differing characteristics" msgstr "falha de união .rsrc: pastas com características diferentes" -#: peigen.c:4119 pepigen.c:4119 pex64igen.c:4119 +#: peXXigen.c:4198 msgid ".rsrc merge failure: differing directory versions" msgstr "falha de união .rsrc: versões de pasta diferentes" #. Corrupted .rsrc section - cannot merge. -#: peigen.c:4236 pepigen.c:4236 pex64igen.c:4236 +#: peXXigen.c:4315 #, c-format msgid "%pB: .rsrc merge failure: corrupt .rsrc section" msgstr "%pB: falha de união .rsrc: secção .rsrc corrupta" -#: peigen.c:4244 pepigen.c:4244 pex64igen.c:4244 +#: peXXigen.c:4323 #, c-format msgid "%pB: .rsrc merge failure: unexpected .rsrc size" msgstr "%pB: falha de união .rsrc: tamanho .rsrc inesperado" -#: peigen.c:4383 pepigen.c:4383 pex64igen.c:4383 +#: peXXigen.c:4462 #, c-format msgid "%pB: unable to fill in DataDictionary[1] because .idata$2 is missing" msgstr "%pB: impossível preencher DataDictionary[1] porque .idata$2 está em falta" -#: peigen.c:4403 pepigen.c:4403 pex64igen.c:4403 +#: peXXigen.c:4482 #, c-format msgid "%pB: unable to fill in DataDictionary[1] because .idata$4 is missing" msgstr "%pB: impossível preencher DataDictionary[1] porque .idata$4 está em falta" -#: peigen.c:4424 pepigen.c:4424 pex64igen.c:4424 +#: peXXigen.c:4503 #, c-format msgid "%pB: unable to fill in DataDictionary[12] because .idata$5 is missing" msgstr "%pB: impossível preencher DataDictionary[12] porque .idata$5 está em falta" -#: peigen.c:4444 pepigen.c:4444 pex64igen.c:4444 +#: peXXigen.c:4523 #, c-format msgid "%pB: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE (12)] because .idata$6 is missing" msgstr "%pB: impossível preencher DataDictionary[PE_IMPORT_ADDRESS_TABLE (12)] porque .idata$6 está em falta" -#: peigen.c:4486 pepigen.c:4486 pex64igen.c:4486 +#: peXXigen.c:4565 #, c-format msgid "%pB: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE(12)] because .idata$6 is missing" msgstr "%pB: impossível preencher DataDictionary[PE_IMPORT_ADDRESS_TABLE(12)] porque .idata$6 está em falta" -#: peigen.c:4511 pepigen.c:4511 pex64igen.c:4511 +#: peXXigen.c:4590 #, c-format msgid "%pB: unable to fill in DataDictionary[9] because __tls_used is missing" msgstr "%pB: impossível preencher DataDictionary[9] porque __tls_used está em falta" +#~ msgid "%pB: corrupt symbol count: %#" +#~ msgstr "%pB: total de símbolos corrupto: %#" + +#~ msgid "%pB: not enough memory to allocate space for %# symbols of size %#" +#~ msgstr "%pB: memória insuficiente para alocar espaço para %# símbolos de tamanho %#" + +#~ msgid "%pB: corrupt size field in group section header: %#" +#~ msgstr "%pB: campo de tamanho corrupto no cabeçalho da secção de grupo: %#" + +#~ msgid "error: %pB version reference section is too large (%# bytes)" +#~ msgstr "erro: secção de referência da versão %pB muito grande (%# bytes)" + +#~ msgid "unexpected STO_SH5_ISA32 on local symbol is not handled" +#~ msgstr "STO_SH5_ISA32 inesperado em símbolo local não é gerido" + +#~ msgid "%P%X: read-only segment has dynamic IFUNC relocations; recompile with %s\n" +#~ msgstr "%P%X: segmento só de leitura tem relocalizações dinâmicas IFUNC; recompile com %s\n" + +#~ msgid "bfd_mach_o_read_symtab_symbols: unable to allocate memory for symbols" +#~ msgstr "bfd_mach_o_read_symtab_symbols: impossível alocar memória para símbolos" + +#~ msgid "error: %pB: conflicting priv spec version (major/minor/revision)." +#~ msgstr "erro: %pB: versão priv spec em conflito (principal/menor/revisão)." + +#~ msgid "unsupported relocation type %#x" +#~ msgstr "tipo de relocalização %#x não suportado" + +#~ msgid "%pB: relocation %s against `%s' can not be used whenmaking a shared object; recompile with -fPIC" +#~ msgstr "%pB: relocalização %s contra \"%s\" não pode ser usada ao fazer um objecto partilhado; recompile com -fPIC" + #~ msgid "%H: call to `%pT' lacks nop, can't restore toc; recompile with -fPIC\n" #~ msgstr "%H: chamada a \"%T\" com nop em falta, impossível restaurar toc; recompile com -fPIC\n" -#~ msgid "error: %pB: " -#~ msgstr "erro: %pB: " - #~ msgid "error: %pB: " #~ msgstr "erro: %pB: " @@ -8691,9 +9106,6 @@ #~ msgid "unsupported reloc type" #~ msgstr "tipo de reloc não suportado" -#~ msgid "SH Error: unknown reloc type %d" -#~ msgstr "Erro SH: tipo de reloc %d não suportado" - #~ msgid "Unrecognized reloc type 0x%x" #~ msgstr "tipo de reloc 0x%x não reconhecido" @@ -8750,9 +9162,6 @@ #~ msgid "%B: invalid AVR reloc number: %d" #~ msgstr "%B: número de reloc AVR inválido: %d" -#~ msgid "%B: unsupported relocation type %d" -#~ msgstr "%B: tipo de relocalização não suportado %d" - #~ msgid "Unsupported CR16 relocation type: 0x%x\n" #~ msgstr "Tipo de relocalização CR16 não suportado: 0x%x\n" @@ -8795,9 +9204,6 @@ #~ msgid "%B: unrecognised I370 reloc number: %d" #~ msgstr "%B: número de reloc I370 não reconhecido: %d" -#~ msgid "%B: unknown relocation type %d for symbol %s" -#~ msgstr "%B: tipo de relocalização %d não desconhecido para símbolo %s" - #~ msgid "%B: Relocation %s is not yet supported for symbol %s." #~ msgstr "%B: Relocalização %s ainda não suportada para símbolo %s." Binary files /tmp/tmpwlqmdap4/HCMjq_z_kj/gdb-9.1/bfd/po/ru.gmo and /tmp/tmpwlqmdap4/bi0oNuAXeo/gdb-10.2/bfd/po/ru.gmo differ diff -Nru gdb-9.1/bfd/po/ru.po gdb-10.2/bfd/po/ru.po --- gdb-9.1/bfd/po/ru.po 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/po/ru.po 2020-09-13 02:33:40.000000000 +0000 @@ -2,13 +2,13 @@ # Copyright (C) 2003, 2005, 2006, 2009 Free Software Foundation, Inc. # This file is distributed under the same license as the binutils package. # -# Yuri Kozlov , 2009, 2010, 2011, 2012, 2018, 2019. +# Yuri Kozlov , 2009, 2010, 2011, 2012, 2018, 2019, 2020. msgid "" msgstr "" -"Project-Id-Version: bfd 2.31.90\n" +"Project-Id-Version: bfd 2.34.90\n" "Report-Msgid-Bugs-To: bug-binutils@gnu.org\n" -"POT-Creation-Date: 2019-01-19 16:30+0000\n" -"PO-Revision-Date: 2019-01-24 18:57+0300\n" +"POT-Creation-Date: 2020-07-04 10:26+0100\n" +"PO-Revision-Date: 2020-07-30 19:54+0300\n" "Last-Translator: Yuri Kozlov \n" "Language-Team: Russian \n" "Language: ru\n" @@ -19,222 +19,235 @@ "X-Generator: Lokalize 2.0\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: aout-cris.c:200 +#: aout-cris.c:196 #, c-format msgid "%pB: unsupported relocation type exported: %#x" msgstr "%pB: ÑкÑпортирован неподдерживаемый тип перемещениÑ: %#x" -#: aout-cris.c:244 +#: aout-cris.c:242 #, c-format msgid "%pB: unsupported relocation type imported: %#x" msgstr "%pB: импортирован неподдерживаемый тип перемещениÑ: %#x" -#: aout-cris.c:256 +#: aout-cris.c:254 #, c-format msgid "%pB: bad relocation record imported: %d" msgstr "%pB: импортирована Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ о перемещении: %d" -#: aoutx.h:1265 aoutx.h:1618 pdp11.c:1138 pdp11.c:1399 +#: aoutx.h:1265 aoutx.h:1613 pdp11.c:1236 pdp11.c:1510 #, c-format msgid "%pB: can not represent section `%pA' in a.out object file format" msgstr "%pB: Ð½ÐµÐ»ÑŒÐ·Ñ Ð¿Ñ€ÐµÐ´Ñтавить раздел «%pA» в формате объектного файла a.out" -#: aoutx.h:1582 pdp11.c:1371 +#: aoutx.h:1577 pdp11.c:1482 #, c-format msgid "%pB: can not represent section for symbol `%s' in a.out object file format" msgstr "%pB: Ð½ÐµÐ»ÑŒÐ·Ñ Ð¿Ñ€ÐµÐ´Ñтавить раздел Ð´Ð»Ñ Ñимвола «%s» в формате объектного файла a.out" -#: aoutx.h:1585 vms-alpha.c:7860 +#: aoutx.h:1580 vms-alpha.c:8040 msgid "*unknown*" msgstr "*неизвеÑтно*" -#: aoutx.h:1721 +#: aoutx.h:1716 pdp11.c:1578 #, c-format msgid "%pB: invalid string offset % >= %" msgstr "%pB: недопуÑтимое Ñмещение Ñтроки % >= %" -#: aoutx.h:2412 aoutx.h:2430 +#: aoutx.h:1963 +#, c-format +msgid "%pB: unsupported AOUT relocation size: %d" +msgstr "%pB: неподдерживаемый размер Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ AOUT: %d" + +#: aoutx.h:2412 aoutx.h:2430 pdp11.c:2058 #, c-format msgid "%pB: attempt to write out unknown reloc type" msgstr "%pB: попытка запиÑать неизвеÑтный тип перемещениÑ" -#: aoutx.h:4086 +#: aoutx.h:4087 pdp11.c:3441 #, c-format msgid "%pB: unsupported relocation type" msgstr "%pB: неподдерживаемый тип перемещениÑ" #. Unknown relocation. -#: aoutx.h:4407 coff-alpha.c:601 coff-alpha.c:1514 coff-rs6000.c:2772 +#: aoutx.h:4408 coff-alpha.c:601 coff-alpha.c:1512 coff-rs6000.c:2758 #: coff-sh.c:504 coff-tic4x.c:184 coff-tic54x.c:279 elf-hppa.h:798 -#: elf-hppa.h:826 elf-m10200.c:226 elf-m10300.c:812 elf32-arc.c:517 -#: elf32-arm.c:1943 elf32-avr.c:964 elf32-bfin.c:1061 elf32-bfin.c:4698 -#: elf32-cr16.c:653 elf32-cr16.c:683 elf32-cr16c.c:186 elf32-cris.c:467 -#: elf32-crx.c:429 elf32-csky.c:989 elf32-d10v.c:234 elf32-d30v.c:522 -#: elf32-d30v.c:544 elf32-dlx.c:548 elf32-epiphany.c:376 elf32-fr30.c:381 -#: elf32-frv.c:2558 elf32-frv.c:6262 elf32-ft32.c:306 elf32-h8300.c:302 -#: elf32-i386.c:401 elf32-ip2k.c:1245 elf32-iq2000.c:442 elf32-lm32.c:539 -#: elf32-m32c.c:305 elf32-m32r.c:1286 elf32-m32r.c:1311 elf32-m32r.c:2417 -#: elf32-m68hc11.c:390 elf32-m68hc12.c:510 elf32-m68k.c:352 elf32-mcore.c:354 -#: elf32-mcore.c:440 elf32-mep.c:389 elf32-metag.c:878 elf32-microblaze.c:692 -#: elf32-microblaze.c:969 elf32-mips.c:2229 elf32-moxie.c:137 -#: elf32-msp430.c:648 elf32-msp430.c:658 elf32-mt.c:241 elf32-nds32.c:3236 -#: elf32-nds32.c:3262 elf32-nds32.c:5173 elf32-nios2.c:3015 elf32-or1k.c:1037 -#: elf32-pj.c:325 elf32-ppc.c:898 elf32-ppc.c:911 elf32-pru.c:420 -#: elf32-rl78.c:291 elf32-rx.c:313 elf32-rx.c:322 elf32-s12z.c:292 -#: elf32-s390.c:347 elf32-sh.c:438 elf32-spu.c:160 elf32-tic6x.c:1508 -#: elf32-tic6x.c:1518 elf32-tic6x.c:1537 elf32-tic6x.c:1547 elf32-tic6x.c:2642 -#: elf32-tilepro.c:803 elf32-v850.c:1899 elf32-v850.c:1921 elf32-v850.c:4270 -#: elf32-vax.c:290 elf32-visium.c:482 elf32-wasm32.c:105 elf32-xc16x.c:250 -#: elf32-xgate.c:418 elf32-xstormy16.c:395 elf32-xtensa.c:459 -#: elf32-xtensa.c:493 elf64-alpha.c:1112 elf64-alpha.c:4101 elf64-alpha.c:4249 -#: elf64-ia64-vms.c:254 elf64-ia64-vms.c:3440 elf64-mips.c:3958 -#: elf64-mips.c:3974 elf64-mmix.c:1264 elf64-nfp.c:238 elf64-ppc.c:921 -#: elf64-ppc.c:1209 elf64-ppc.c:1218 elf64-s390.c:328 elf64-s390.c:378 -#: elf64-x86-64.c:285 elfn32-mips.c:3786 elfxx-ia64.c:324 elfxx-riscv.c:955 -#: elfxx-sparc.c:589 elfxx-sparc.c:639 elfxx-tilegx.c:912 elfxx-tilegx.c:952 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:2125 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:2223 -#: elf32-ia64.c:210 elf32-ia64.c:3862 elf64-ia64.c:210 elf64-ia64.c:3862 +#: elf-hppa.h:826 elf-m10200.c:226 elf-m10300.c:812 elf32-arc.c:532 +#: elf32-arm.c:1985 elf32-avr.c:962 elf32-bfin.c:1062 elf32-bfin.c:4677 +#: elf32-cr16.c:654 elf32-cr16.c:684 elf32-cris.c:467 elf32-crx.c:429 +#: elf32-csky.c:990 elf32-d10v.c:234 elf32-d30v.c:522 elf32-d30v.c:544 +#: elf32-dlx.c:546 elf32-epiphany.c:372 elf32-fr30.c:381 elf32-frv.c:2558 +#: elf32-frv.c:6239 elf32-ft32.c:306 elf32-h8300.c:302 elf32-i386.c:400 +#: elf32-ip2k.c:1240 elf32-iq2000.c:442 elf32-lm32.c:495 elf32-m32c.c:305 +#: elf32-m32r.c:1286 elf32-m32r.c:1311 elf32-m32r.c:2232 elf32-m68hc11.c:390 +#: elf32-m68hc12.c:510 elf32-m68k.c:354 elf32-mcore.c:354 elf32-mcore.c:440 +#: elf32-mep.c:389 elf32-metag.c:874 elf32-microblaze.c:692 +#: elf32-microblaze.c:965 elf32-mips.c:2229 elf32-moxie.c:137 +#: elf32-msp430.c:653 elf32-msp430.c:663 elf32-mt.c:241 elf32-nds32.c:3237 +#: elf32-nds32.c:3263 elf32-nds32.c:5033 elf32-nios2.c:3022 elf32-or1k.c:1040 +#: elf32-pj.c:326 elf32-ppc.c:901 elf32-ppc.c:914 elf32-pru.c:423 +#: elf32-rl78.c:291 elf32-rx.c:313 elf32-rx.c:322 elf32-s12z.c:296 +#: elf32-s390.c:347 elf32-sh.c:438 elf32-spu.c:163 elf32-tic6x.c:1498 +#: elf32-tic6x.c:1508 elf32-tic6x.c:1527 elf32-tic6x.c:1537 elf32-tic6x.c:2583 +#: elf32-tilepro.c:800 elf32-v850.c:1898 elf32-v850.c:1920 elf32-v850.c:4270 +#: elf32-vax.c:290 elf32-visium.c:481 elf32-wasm32.c:105 elf32-xc16x.c:250 +#: elf32-xgate.c:418 elf32-xstormy16.c:395 elf32-xtensa.c:522 +#: elf32-xtensa.c:556 elf32-z80.c:331 elf64-alpha.c:1113 elf64-alpha.c:4067 +#: elf64-alpha.c:4215 elf64-bpf.c:322 elf64-ia64-vms.c:254 +#: elf64-ia64-vms.c:3429 elf64-mips.c:3958 elf64-mips.c:3974 elf64-mmix.c:1264 +#: elf64-nfp.c:238 elf64-ppc.c:1014 elf64-ppc.c:1366 elf64-ppc.c:1375 +#: elf64-s390.c:328 elf64-s390.c:378 elf64-x86-64.c:281 elfn32-mips.c:3786 +#: elfxx-ia64.c:324 elfxx-riscv.c:954 elfxx-sparc.c:589 elfxx-sparc.c:639 +#: elfxx-tilegx.c:909 elfxx-tilegx.c:949 elfnn-aarch64.c:2215 +#: elfnn-aarch64.c:2313 elfnn-ia64.c:213 elfnn-ia64.c:3824 #, c-format msgid "%pB: unsupported relocation type %#x" msgstr "%pB: неподдерживаемый тип Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ %#x" -#: aoutx.h:5434 pdp11.c:3694 +#: aoutx.h:5435 pdp11.c:3864 #, c-format msgid "%pB: relocatable link from %s to %s not supported" msgstr "%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰Ð°ÐµÐ¼Ð°Ñ ÑÑылка из %s в %s не поддерживаетÑÑ" -#: archive.c:2214 +#: arc-got.h:69 +#, c-format +msgid "%pB: cannot allocate memory for local GOT entries" +msgstr "%pB: невозможно выделить памÑÑ‚ÑŒ Ð´Ð»Ñ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ñ‹Ñ… Ñлементов GOT" + +#: archive.c:2249 msgid "warning: writing archive was slow: rewriting timestamp" msgstr "предупреждение: Ð¼ÐµÐ´Ð»ÐµÐ½Ð½Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ в архив: перезапиÑываетÑÑ Ð¼ÐµÑ‚ÐºÐ° времени" -#: archive.c:2330 linker.c:1429 +#: archive.c:2316 archive.c:2376 elflink.c:4545 linker.c:1428 #, c-format msgid "%pB: plugin needed to handle lto object" msgstr "%pB: Ð´Ð»Ñ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸ объекта lto требуетÑÑ Ð¼Ð¾Ð´ÑƒÐ»ÑŒ" -#: archive.c:2559 +#: archive.c:2602 msgid "Reading archive file mod timestamp" msgstr "Чтение метки времени Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð°Ñ€Ñ…Ð¸Ð²Ð½Ð¾Ð³Ð¾ файла" -#: archive.c:2583 +#: archive.c:2626 msgid "Writing updated armap timestamp" msgstr "ЗапиÑÑŒ обновлённой метки времени armap" -#: bfd.c:449 +#: bfd.c:677 msgid "no error" msgstr "нет ошибки" -#: bfd.c:450 +#: bfd.c:678 msgid "system call error" msgstr "ошибка ÑиÑтемного вызова" -#: bfd.c:451 +#: bfd.c:679 msgid "invalid bfd target" msgstr "Ð½ÐµÐ²ÐµÑ€Ð½Ð°Ñ Ñ†ÐµÐ»ÑŒ bfd" -#: bfd.c:452 +#: bfd.c:680 msgid "file in wrong format" msgstr "файл в неправильном формате" -#: bfd.c:453 +#: bfd.c:681 msgid "archive object file in wrong format" msgstr "архивный объектный файл в неправильном формате" -#: bfd.c:454 +#: bfd.c:682 msgid "invalid operation" msgstr "Ð½ÐµÐ²ÐµÑ€Ð½Ð°Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ" -#: bfd.c:455 +#: bfd.c:683 msgid "memory exhausted" msgstr "закончилаÑÑŒ памÑÑ‚ÑŒ" -#: bfd.c:456 +#: bfd.c:684 msgid "no symbols" msgstr "нет Ñимволов" -#: bfd.c:457 +#: bfd.c:685 msgid "archive has no index; run ranlib to add one" msgstr "архив без индекÑа; запуÑтите ranlib Ð´Ð»Ñ ÑозданиÑ" -#: bfd.c:458 +#: bfd.c:686 msgid "no more archived files" msgstr "архивные файлы закончилиÑÑŒ" -#: bfd.c:459 +#: bfd.c:687 msgid "malformed archive" msgstr "иÑкажённый архив" -#: bfd.c:460 +#: bfd.c:688 msgid "DSO missing from command line" msgstr "в командной Ñтроке не указан DSO" -#: bfd.c:461 +#: bfd.c:689 msgid "file format not recognized" msgstr "формат файла не раÑпознан" -#: bfd.c:462 +#: bfd.c:690 msgid "file format is ambiguous" msgstr "формат файла неоднозначен" -#: bfd.c:463 +#: bfd.c:691 msgid "section has no contents" msgstr "раздел не имеет Ñодержимого" -#: bfd.c:464 +#: bfd.c:692 msgid "nonrepresentable section on output" msgstr "раздел, непредÑтавимый Ð´Ð»Ñ Ð²Ñ‹Ð²Ð¾Ð´Ð°" -#: bfd.c:465 +#: bfd.c:693 msgid "symbol needs debug section which does not exist" msgstr "Ð´Ð»Ñ Ñимвола требуетÑÑ Ð¾Ñ‚Ð»Ð°Ð´Ð¾Ñ‡Ð½Ñ‹Ð¹ раздел, но его не ÑущеÑтвует" -#: bfd.c:466 +#: bfd.c:694 msgid "bad value" msgstr "некорректное значение" -#: bfd.c:467 +#: bfd.c:695 msgid "file truncated" msgstr "файл уÑечён" -#: bfd.c:468 +#: bfd.c:696 msgid "file too big" msgstr "файл Ñлишком большой" -#: bfd.c:469 +#: bfd.c:697 +msgid "sorry, cannot handle this file" +msgstr "невозможно обработать Ñтот файл" + +#: bfd.c:698 #, c-format msgid "error reading %s: %s" msgstr "ошибка Ñ‡Ñ‚ÐµÐ½Ð¸Ñ %s: %s" -#: bfd.c:470 +#: bfd.c:699 msgid "#" msgstr "#<неверный код ошибки>" -#: bfd.c:1429 +#: bfd.c:1658 #, c-format msgid "BFD %s assertion fail %s:%d" msgstr "Оператор ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ BFD %s обнаружил ошибку %s:%d" -#: bfd.c:1442 +#: bfd.c:1671 #, c-format msgid "BFD %s internal error, aborting at %s:%d in %s\n" msgstr "ВнутреннÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ° BFD %s, оÑтанов на %s:%d в %s\n" -#: bfd.c:1447 +#: bfd.c:1676 #, c-format msgid "BFD %s internal error, aborting at %s:%d\n" msgstr "ВнутреннÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ° BFD %s, оÑтанов на %s:%d\n" -#: bfd.c:1449 +#: bfd.c:1678 msgid "Please report this bug.\n" msgstr "ПожалуйÑта, Ñообщите об Ñтой ошибке.\n" -#: bfdwin.c:206 +#: bfdwin.c:207 #, c-format msgid "not mapping: data=%lx mapped=%d\n" msgstr "не отображено: данные=%lx отображено=%d\n" -#: bfdwin.c:209 +#: bfdwin.c:210 #, c-format msgid "not mapping: env var not set\n" msgstr "не отображено: Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ env не задана\n" @@ -254,118 +267,113 @@ msgid "%pB: cannot handle compressed Alpha binaries; use compiler flags, or objZ, to generate uncompressed binaries" msgstr "%pB: не удалоÑÑŒ обработать Ñжатые двоичные файлы Alpha; Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð½ÐµÑжатых файлов иÑпользуйте параметры компилÑтора или objZ." -#: coff-alpha.c:850 coff-alpha.c:887 coff-alpha.c:1957 coff-mips.c:950 +#: coff-alpha.c:850 coff-alpha.c:887 coff-alpha.c:1954 coff-mips.c:953 msgid "GP relative relocation used when GP not defined" msgstr "ИÑпользовано отноÑительное перемещение GP, но GP не определена" -#: coff-alpha.c:1443 +#: coff-alpha.c:1441 msgid "using multiple gp values" msgstr "иÑпользуетÑÑ Ð½ÐµÑколько значений gp" -#: coff-alpha.c:1501 coff-alpha.c:1507 elf.c:9100 elf32-mcore.c:100 -#: elf32-mcore.c:455 elf32-ppc.c:7697 elf32-ppc.c:8829 elf64-ppc.c:14411 +#: coff-alpha.c:1499 coff-alpha.c:1505 elf.c:9431 elf32-mcore.c:100 +#: elf32-mcore.c:455 elf32-ppc.c:7596 elf32-ppc.c:8747 elf64-ppc.c:15962 #, c-format msgid "%pB: %s unsupported" msgstr "%pB: %s не поддерживаетÑÑ" -#: coff-mips.c:640 elf32-mips.c:1742 elf32-score.c:430 elf32-score7.c:330 +#: coff-go32.c:156 coffswap.h:785 +#, c-format +msgid "%pB: warning: %s: line number overflow: 0x%lx > 0xffff" +msgstr "%pB: предупреждение: %s: переполнение номера Ñтроки: 0x%lx > 0xffff" + +#: coff-mips.c:643 elf32-mips.c:1742 elf32-score.c:430 elf32-score7.c:330 #: elf64-mips.c:3451 elfn32-mips.c:3276 msgid "GP relative relocation when _gp not defined" msgstr "ОтноÑительное перемещение GP, но _gp не определена" -#: coff-rs6000.c:2858 +#: coff-rs6000.c:2844 #, c-format msgid "%pB: TOC reloc at %# to symbol `%s' with no TOC entry" msgstr "%pB: перемещение TOC по адреÑу %# к Ñимволу «%s» без Ñлемента TOC" -#: coff-rs6000.c:3620 coff64-rs6000.c:2145 +#: coff-rs6000.c:3607 coff64-rs6000.c:2153 #, c-format msgid "%pB: symbol `%s' has unrecognized smclas %d" msgstr "%pB: Ñимвол «%s» имеет нераÑпознанный smclas %d" -#: coff-sh.c:780 elf32-sh.c:521 +#: coff-sh.c:778 elf32-sh.c:521 #, c-format msgid "%pB: %#: warning: bad R_SH_USES offset" msgstr "%pB: %#: предупреждение: неправильное Ñмещение R_SH_USES" -#: coff-sh.c:791 +#: coff-sh.c:789 #, c-format msgid "%pB: %#: warning: R_SH_USES points to unrecognized insn %#x" msgstr "%pB: %#: предупреждение: R_SH_USES указывает на нераÑпознанную инÑтрукцию %#x" -#: coff-sh.c:809 elf32-sh.c:552 +#: coff-sh.c:807 elf32-sh.c:552 #, c-format msgid "%pB: %#: warning: bad R_SH_USES load offset" msgstr "%pB: %#: предупреждение: неправильное загрузочное Ñмещение R_SH_USES" -#: coff-sh.c:834 elf32-sh.c:568 +#: coff-sh.c:832 elf32-sh.c:568 #, c-format msgid "%pB: %#: warning: could not find expected reloc" msgstr "%pB: %#: предупреждение: невозможно найти ожидаемое перемещение" -#: coff-sh.c:851 elf32-sh.c:597 +#: coff-sh.c:849 elf32-sh.c:597 #, c-format msgid "%pB: %#: warning: symbol in unexpected section" msgstr "%pB: %#: предупреждение: Ñимвол в неожиданном разделе" -#: coff-sh.c:977 elf32-sh.c:727 +#: coff-sh.c:975 elf32-sh.c:727 #, c-format msgid "%pB: %#: warning: could not find expected COUNT reloc" msgstr "%pB: %#: предупреждение: невозможно найти ожидаемое перемещение COUNT" -#: coff-sh.c:987 elf32-sh.c:738 +#: coff-sh.c:985 elf32-sh.c:738 #, c-format msgid "%pB: %#: warning: bad count" msgstr "%pB: %#: предупреждение: неправильный Ñчётчик" -#: coff-sh.c:1359 coff-sh.c:2647 elf32-sh.c:1142 elf32-sh.c:1512 +#: coff-sh.c:1356 coff-sh.c:2644 elf32-sh.c:1138 elf32-sh.c:1505 #, c-format msgid "%pB: %#: fatal: reloc overflow while relaxing" msgstr "%pB: %#: оÑтанов: переполнение Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸ оÑлаблении" -#: coff-sh.c:1454 +#: coff-sh.c:1451 #, c-format msgid "%pB: fatal: generic symbols retrieved before relaxing" msgstr "%pB: оÑтанов: перед оÑлаблением получены общие Ñимволы" -#: coff-sh.c:2785 cofflink.c:2965 +#: coff-sh.c:2781 cofflink.c:2948 #, c-format msgid "%pB: illegal symbol index %ld in relocs" msgstr "%pB: недопуÑтимый Ñимвольный Ð¸Ð½Ð´ÐµÐºÑ %ld в перемещениÑÑ…" -#: coff-tic4x.c:228 coff-tic54x.c:366 coffcode.h:5010 +#: coff-tic4x.c:228 coff-tic54x.c:366 coffcode.h:5085 #, c-format msgid "%pB: warning: illegal symbol index %ld in relocs" msgstr "%pB: предупреждение: недопуÑтимый Ñимвольный Ð¸Ð½Ð´ÐµÐºÑ %ld в перемещениÑÑ…" -#: coff-tic80.c:441 -#, c-format -msgid "unsupported relocation type %#x" -msgstr "неподдерживаемый тип Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ %#x" - -#: coff-tic80.c:672 cofflink.c:3127 -#, c-format -msgid "%pB: bad reloc address %# in section `%pA'" -msgstr "%pB: неправильный Ð°Ð´Ñ€ÐµÑ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ %# в разделе «%pA»" - -#: coffcode.h:954 +#: coffcode.h:961 #, c-format msgid "%pB: unable to load COMDAT section name" msgstr "%pB: невозможно загрузить Ð¸Ð¼Ñ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° COMDAT" #. Malformed input files can trigger this test. #. cf PR 21781. -#: coffcode.h:989 +#: coffcode.h:996 #, c-format msgid "%pB: error: unexpected symbol '%s' in COMDAT section" msgstr "%pB: ошибка: неожиданный Ñимвол «%s» в разделе COMDAT" -#: coffcode.h:1001 +#: coffcode.h:1008 #, c-format msgid "%pB: warning: COMDAT symbol '%s' does not match section name '%s'" msgstr "%pB: предупреждение: Ñимвол «%s» в COMDAT не Ñовпадает Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ раздела «%s»" -#: coffcode.h:1011 +#: coffcode.h:1018 #, c-format msgid "%pB: warning: no symbol for section '%s' found" msgstr "%pB: предупреждение: не найден Ñимвол Ð´Ð»Ñ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° «%s»" @@ -373,311 +381,315 @@ #. Generate a warning message rather using the 'unhandled' #. variable as this will allow some .sys files generate by #. other toolchains to be processed. See bugzilla issue 196. -#: coffcode.h:1237 +#: coffcode.h:1249 #, c-format msgid "%pB: warning: ignoring section flag %s in section %s" msgstr "%pB: предупреждение: игнорируетÑÑ Ñ„Ð»Ð°Ð³ раздела %s в разделе %s" -#: coffcode.h:1306 +#: coffcode.h:1318 #, c-format msgid "%pB (%s): section flag %s (%#lx) ignored" msgstr "%pB (%s): игнорируетÑÑ Ñ„Ð»Ð°Ð³ раздела %s (%#lx)" -#: coffcode.h:1917 +#: coffcode.h:1934 coffcode.h:1999 #, c-format msgid "%pB: warning: claims to have 0xffff relocs, without overflow" msgstr "%pB: предупреждение: утверждаетÑÑ, что еÑÑ‚ÑŒ 0xffff перемещений, без переполнениÑ" -#: coffcode.h:2315 +#: coffcode.h:2365 #, c-format msgid "unrecognized TI COFF target id '0x%x'" msgstr "нераÑпознанный идентификатор цели TI COFF «0x%x»" -#: coffcode.h:2599 +#: coffcode.h:2643 #, c-format msgid "%pB: reloc against a non-existent symbol index: %ld" msgstr "%pB: перемещение по неÑущеÑтвующему Ñимвольному индекÑу: %ld" -#: coffcode.h:2910 +#: coffcode.h:2951 #, c-format msgid "%pB: page size is too large (0x%x)" msgstr "%pB: Ñлишком большой размер Ñтраницы (0x%x)" -#: coffcode.h:3070 +#: coffcode.h:3111 #, c-format msgid "%pB: too many sections (%d)" msgstr "%pB: Ñлишком много разделов (%d)" -#: coffcode.h:3489 +#: coffcode.h:3530 #, c-format msgid "%pB: section %pA: string table overflow at offset %ld" msgstr "%pB: раздел %pA: переполнение таблицы Ñтрок по Ñмещению %ld" -#: coffcode.h:3589 +#: coffcode.h:3630 #, c-format msgid "%pB:%s section %s: alignment 2**%u not representable" msgstr "%pB:%s раздел %s: выравнивание 2**%u не предÑтавимо" -#: coffcode.h:4276 +#: coffcode.h:4329 #, c-format msgid "%pB: warning: line number count (%#lx) exceeds section size (%#lx)" msgstr "%pB: предупреждение: Ñчётчик количеÑтва Ñтрок (%#lx) превышает размер раздела (%#lx)" -#: coffcode.h:4291 +#: coffcode.h:4349 #, c-format msgid "%pB: warning: line number table read failed" msgstr "%pB: предупреждение: не удалоÑÑŒ прочитать таблицу номеров Ñтрок" -#: coffcode.h:4325 coffcode.h:4339 +#: coffcode.h:4383 coffcode.h:4397 #, c-format msgid "%pB: warning: illegal symbol index 0x%lx in line number entry %d" msgstr "%pB: предупреждение: недопуÑтимый Ñимвольный Ð¸Ð½Ð´ÐµÐºÑ 0x%lx в Ñлементе номера Ñтроки %d" -#: coffcode.h:4353 +#: coffcode.h:4411 #, c-format msgid "%pB: warning: illegal symbol in line number entry %d" msgstr "%pB: предупреждение: недопуÑтимый Ñимвольный Ð¸Ð½Ð´ÐµÐºÑ %d в Ñлементе номера Ñтроки" -#: coffcode.h:4366 +#: coffcode.h:4424 #, c-format msgid "%pB: warning: duplicate line number information for `%s'" msgstr "%pB: предупреждение: повторÑющаÑÑÑ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ номере Ñтроки Ð´Ð»Ñ Â«%s»" -#: coffcode.h:4774 +#: coffcode.h:4845 #, c-format msgid "%pB: unrecognized storage class %d for %s symbol `%s'" msgstr "%pB: нераÑпознанный клаÑÑ Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ %d Ð´Ð»Ñ %s, Ñимвол «%s»" -#: coffcode.h:4904 +#: coffcode.h:4975 #, c-format msgid "warning: %pB: local symbol `%s' has no section" msgstr "предупреждение: %pB: локальный Ñимвол «%s» не имеет раздела" -#: coffcode.h:5050 +#: coffcode.h:5125 #, c-format msgid "%pB: illegal relocation type %d at address %#" msgstr "%pB: недопуÑтимый тип Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ %d по адреÑу %#" -#: coffgen.c:178 elf.c:1216 +#: coffgen.c:179 elf.c:1236 #, c-format msgid "%pB: unable to initialize compress status for section %s" msgstr "%pB: невозможно инициализировать ÑоÑтоÑние ÑÐ¶Ð°Ñ‚Ð¸Ñ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %s" -#: coffgen.c:202 elf.c:1227 +#: coffgen.c:203 elf.c:1247 #, c-format msgid "%pB: unable to initialize decompress status for section %s" msgstr "%pB: невозможно инициализировать ÑоÑтоÑние Ñ€Ð°Ð·Ð¶Ð°Ñ‚Ð¸Ñ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %s" -#: coffgen.c:1657 -#, c-format -msgid "%pB: corrupt symbol count: %#" -msgstr "%pB: повреждён Ñчётчик Ñимволов: %#" - -#. PR 21013: Provide an error message when the alloc fails. -#: coffgen.c:1666 -#, c-format -msgid "%pB: not enough memory to allocate space for %# symbols of size %#" -msgstr "%pB: недоÑтаточно памÑти Ð´Ð»Ñ Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¼ÐµÑта Ð´Ð»Ñ %# Ñимволов размером %#" - -#: coffgen.c:1735 +#: coffgen.c:1704 #, c-format msgid "%pB: bad string table size %" msgstr "%pB: неправильный размер таблицы Ñтрок %#" -#: coffgen.c:1912 coffgen.c:1972 coffgen.c:1990 cofflink.c:2045 elf.c:1882 -#: xcofflink.c:4505 +#: coffgen.c:1876 coffgen.c:1936 coffgen.c:1954 cofflink.c:2024 elf.c:1921 +#: xcofflink.c:4500 msgid "" msgstr "<повреждено>" -#: coffgen.c:2114 +#: coffgen.c:2085 #, c-format msgid " %s" msgstr "<Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ повреждении> %s" -#: coffgen.c:2693 elflink.c:14322 linker.c:2959 +#: coffgen.c:2675 elflink.c:14624 linker.c:2956 msgid "%F%P: already_linked_table: %E\n" msgstr "%F%P: already_linked_table: %E\n" -#: coffgen.c:3034 elflink.c:13324 +#: coffgen.c:3016 elflink.c:13617 #, c-format msgid "removing unused section '%pA' in file '%pB'" msgstr "удалÑетÑÑ Ð½ÐµÐ¸Ñпользуемый раздел «%pA» в файле «%pB»" -#: coffgen.c:3111 elflink.c:13542 +#: coffgen.c:3093 elflink.c:13835 msgid "warning: gc-sections option ignored" msgstr "предупреждение: параметр gc-sections игнорируетÑÑ" -#: cofflink.c:352 +#: cofflink.c:366 #, c-format msgid "warning: symbol `%s' is both section and non-section" msgstr "предупреждение: Ñимвол «%s» Ð´Ð»Ñ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° и не Ð´Ð»Ñ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° одновременно" -#: cofflink.c:454 elf64-ia64-vms.c:5203 elflink.c:4953 +#: cofflink.c:471 elf64-ia64-vms.c:5200 elflink.c:5131 #, c-format msgid "warning: type of symbol `%s' changed from %d to %d in %pB" msgstr "предупреждение: тип Ñимвола «%s» изменён Ñ %d на %d в %pB" -#: cofflink.c:2373 +#: cofflink.c:2352 #, c-format msgid "%pB: relocs in section `%pA', but it has no contents" msgstr "%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð² разделе «%pA», но он не имеет Ñодержимого" -#: cofflink.c:2436 elflink.c:10810 +#: cofflink.c:2415 elflink.c:11082 #, c-format msgid "%X`%s' referenced in section `%pA' of %pB: defined in discarded section `%pA' of %pB\n" msgstr "%X«%s» указывает в раздел «%pA» из %pB: определён в отброшенном разделе «%pA» из %pB\n" -#: cofflink.c:2734 +#: cofflink.c:2717 #, c-format msgid "%pB: %pA: reloc overflow: %#x > 0xffff" msgstr "%pB: %pA: переполнение перемещениÑ: %#x > 0xffff" -#: cofflink.c:2742 +#: cofflink.c:2725 #, c-format msgid "%pB: warning: %pA: line number overflow: %#x > 0xffff" msgstr "%pB: предупреждение: %pA: переполнение номера Ñтроки: %#x > 0xffff" -#: coffswap.h:789 +#: cofflink.c:3110 #, c-format -msgid "%pB: warning: %s: line number overflow: 0x%lx > 0xffff" -msgstr "%pB: предупреждение: %s: переполнение номера Ñтроки: 0x%lx > 0xffff" +msgid "%pB: bad reloc address %# in section `%pA'" +msgstr "%pB: неправильный Ð°Ð´Ñ€ÐµÑ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ %# в разделе «%pA»" -#: coffswap.h:803 +#: coffswap.h:799 #, c-format msgid "%pB: %s: reloc overflow: 0x%lx > 0xffff" msgstr "%pB: %s: переполнение перемещениÑ: 0x%lx > 0xffff" -#: compress.c:260 +#: compress.c:271 +#, c-format +msgid "error: %pB(%pA) section size (%# bytes) is larger than file size (%# bytes)" +msgstr "ошибка: размер раздела %pB(%pA) равен %#, Ñто больше размера файла (%# байт)" + +#: compress.c:282 #, c-format msgid "error: %pB(%pA) is too large (%# bytes)" msgstr "ошибка: %pB(%pA) Ñлишком велико (%# байт)" -#: cpu-arm.c:298 cpu-arm.c:310 +#: cpu-arm.c:303 cpu-arm.c:315 #, c-format msgid "error: %pB is compiled for the EP9312, whereas %pB is compiled for XScale" msgstr "ошибка: %pB Ñкомпилирован Ð´Ð»Ñ EP9312, в то Ð²Ñ€ÐµÐ¼Ñ ÐºÐ°Ðº %pB Ñкомпилирован Ð´Ð»Ñ XScale" -#: cpu-arm.c:446 +#: cpu-arm.c:451 #, c-format msgid "warning: unable to update contents of %s section in %pB" msgstr "предупреждение: невозможно обновить Ñодержимое раздела %s в %pB" -#: dwarf2.c:544 +#: dwarf2.c:543 #, c-format msgid "DWARF error: can't find %s section." msgstr "ошибка в DWARF: раздел %s не найден" -#: dwarf2.c:579 +#: dwarf2.c:578 #, c-format msgid "DWARF error: offset (%) greater than or equal to %s size (%)" msgstr "ошибка в DWARF: Ñмещение (%#) больше или равно размеру %s (%#)" -#: dwarf2.c:1107 +#: dwarf2.c:1165 msgid "DWARF error: info pointer extends beyond end of attributes" msgstr "ошибка в DWARF: информационный указатель выходит за конец атрибутов" -#: dwarf2.c:1275 +#: dwarf2.c:1333 #, c-format msgid "DWARF error: invalid or unhandled FORM value: %#x" msgstr "ошибка в DWARF: недопуÑтимое или необработанное значение FORM: %#x" -#: dwarf2.c:1581 +#: dwarf2.c:1646 msgid "DWARF error: mangled line number section (bad file number)" msgstr "ошибка в DWARF: иÑкажённый раздел номеров Ñтрок (неверный номер файла)" -#: dwarf2.c:1926 +#: dwarf2.c:1994 msgid "DWARF error: zero format count" msgstr "ошибка в DWARF: Ñчётчик формата равен нулю" -#: dwarf2.c:1936 +#: dwarf2.c:2004 #, c-format msgid "DWARF error: data count (%) larger than buffer size" msgstr "ошибка в DWARF: Ñчётчик данных (%#) больше размера буфера" -#: dwarf2.c:1977 +#: dwarf2.c:2045 #, c-format msgid "DWARF error: unknown format content type %" msgstr "ошибка в DWARF: неизвеÑтный формат типа Ñодержимого %#" -#: dwarf2.c:2057 +#: dwarf2.c:2112 #, c-format msgid "DWARF error: line info section is too small (%)" msgstr "ошибка в DWARF: раздел информации о Ñтроках Ñлишком мал (%)" -#: dwarf2.c:2087 +#: dwarf2.c:2142 #, c-format msgid "DWARF error: line info data is bigger (%#) than the space remaining in the section (%#lx)" msgstr "ошибка в DWARF: данные информации о Ñтроках больше (%) чем проÑтранÑтво, оÑтавшееÑÑ Ð² разделе (%#lx)" -#: dwarf2.c:2100 +#: dwarf2.c:2155 #, c-format msgid "DWARF error: unhandled .debug_line version %d" msgstr "ошибка в DWARF: Ð½ÐµÐ¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ð½Ð½Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ %d в .debug_line" -#: dwarf2.c:2110 +#: dwarf2.c:2165 msgid "DWARF error: ran out of room reading prologue" msgstr "ошибка в DWARF: кончилоÑÑŒ меÑто при чтении пролога" -#: dwarf2.c:2128 +#: dwarf2.c:2183 #, c-format msgid "DWARF error: line info unsupported segment selector size %u" msgstr "ошибка в DWARF: неподдерживаемый размер %u Ñелектора Ñегмента в информации о Ñтроках" -#: dwarf2.c:2155 +#: dwarf2.c:2210 msgid "DWARF error: invalid maximum operations per instruction" msgstr "ошибка в DWARF: неверное макÑимальное количеÑтво операций на инÑтрукцию" -#: dwarf2.c:2174 +#: dwarf2.c:2229 msgid "DWARF error: ran out of room reading opcodes" msgstr "ошибка в DWARF: кончилоÑÑŒ меÑто при чтении кодов операций" -#: dwarf2.c:2347 +#: dwarf2.c:2420 msgid "DWARF error: mangled line number section" msgstr "ошибка в DWARF: раздел номеров Ñтрок иÑкажён" -#: dwarf2.c:2852 dwarf2.c:2913 +#: dwarf2.c:2905 +msgid "DWARF error: abstract instance recursion detected" +msgstr "ошибка в DWARF: обнаружена рекурÑÐ¸Ñ Ð°Ð±Ñтрактного ÑкземплÑра" + +#: dwarf2.c:2939 dwarf2.c:3033 msgid "DWARF error: invalid abstract instance DIE ref" msgstr "ошибка в DWARF: некорректный абÑтрактный ÑкземплÑÑ€ ÑÑылки DIE" -#: dwarf2.c:2889 +#: dwarf2.c:2955 #, c-format msgid "DWARF error: unable to read alt ref %" msgstr "ошибка в DWARF: невозможно прочитать альтернативную ÑÑылку %" -#: dwarf2.c:2930 dwarf2.c:3103 dwarf2.c:3457 +#: dwarf2.c:3011 +#, c-format +msgid "DWARF error: unable to locate abstract instance DIE ref %" +msgstr "ошибка в DWARF: невозможно найти абÑтрактный ÑкземплÑÑ€ ÑÑылки DIE %" + +#: dwarf2.c:3050 dwarf2.c:3232 dwarf2.c:3618 #, c-format msgid "DWARF error: could not find abbrev number %u" msgstr "ошибка в DWARF: невозможно найти укороченный номер %u" -#: dwarf2.c:2947 -msgid "DWARF error: abstract instance recursion detected" -msgstr "ошибка в DWARF: обнаружена рекурÑÐ¸Ñ Ð°Ð±Ñтрактного ÑкземплÑра" +#: dwarf2.c:3381 +#, c-format +msgid "DWARF error: could not find variable specification at offset %lx" +msgstr "ошибка в DWARF: невозможно найти задание переменной по Ñмещению %lx" -#: dwarf2.c:3376 +#: dwarf2.c:3537 #, c-format msgid "DWARF error: found dwarf version '%u', this reader only handles version 2, 3, 4 and 5 information" msgstr "ошибка в DWARF: найдена верÑÐ¸Ñ dwarf «%u», Ñ‚ÐµÐºÑƒÑ‰Ð°Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð½Ð¸Ð¼Ð°ÐµÑ‚ только верÑии 2, 3, 4 и 5" -#: dwarf2.c:3420 +#: dwarf2.c:3581 #, c-format msgid "DWARF error: found address size '%u', this reader can not handle sizes greater than '%u'" msgstr "ошибка в DWARF: найден размер адреÑа «%u», Ñ‚ÐµÐºÑƒÑ‰Ð°Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð½Ðµ умеет работать Ñ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð°Ð¼Ð¸ более чем «%u»" -#: dwarf2.c:3523 +#: dwarf2.c:3685 msgid "DWARF error: DW_AT_comp_dir attribute encountered with a non-string form" msgstr "ошибка в DWARF: вÑтречен атрибут DW_AT_comp_dir в не Ñтроковом виде" -#: ecoff.c:971 +#: ecoff.c:982 #, c-format msgid "%pB: warning: isymMax (%ld) is greater than ifdMax (%ld)" msgstr "%pB: предупреждение: isymMax (%ld) больше, чем ifdMax (%ld)" -#: ecoff.c:1268 +#: ecoff.c:1279 #, c-format msgid "unknown basic type %d" msgstr "неизвеÑтный начальный тип %d" -#: ecoff.c:1525 +#: ecoff.c:1536 #, c-format msgid "" "\n" @@ -686,7 +698,7 @@ "\n" " Символ End+1: %ld" -#: ecoff.c:1532 ecoff.c:1535 +#: ecoff.c:1543 ecoff.c:1546 #, c-format msgid "" "\n" @@ -695,7 +707,7 @@ "\n" " Первый Ñимвол: %ld" -#: ecoff.c:1548 +#: ecoff.c:1559 #, c-format msgid "" "\n" @@ -704,7 +716,7 @@ "\n" " Символ End+1: %-7ld Тип: %s" -#: ecoff.c:1555 +#: ecoff.c:1566 #, c-format msgid "" "\n" @@ -713,7 +725,7 @@ "\n" " Локальный Ñимвол: %ld" -#: ecoff.c:1563 +#: ecoff.c:1574 #, c-format msgid "" "\n" @@ -722,7 +734,7 @@ "\n" " struct; Ñимвол End+1: %ld" -#: ecoff.c:1568 +#: ecoff.c:1579 #, c-format msgid "" "\n" @@ -731,7 +743,7 @@ "\n" " union; Ñимвол End+1: %ld" -#: ecoff.c:1573 +#: ecoff.c:1584 #, c-format msgid "" "\n" @@ -740,7 +752,7 @@ "\n" " enum; Ñимвол End+1: %ld" -#: ecoff.c:1579 +#: ecoff.c:1590 #, c-format msgid "" "\n" @@ -749,22 +761,22 @@ "\n" " Тип: %s" -#: elf-attrs.c:446 +#: elf-attrs.c:449 #, c-format msgid "%pB: error: attribute section '%pA' too big: %#llx" msgstr "%pB: ошибка: Ñлишком большой раздел атрибутов «%pA»: %#llx" -#: elf-attrs.c:487 +#: elf-attrs.c:490 #, c-format msgid "%pB: error: attribute section length too small: %" msgstr "%pB: ошибка: длина раздела атрибутов Ñлишком мала: %" -#: elf-attrs.c:615 +#: elf-attrs.c:618 #, c-format msgid "error: %pB: object has vendor-specific contents that must be processed by the '%s' toolchain" msgstr "ошибка: %pB: объект Ñодержит данные, задаваемые производителем, которые должно обрабатыватьÑÑ Ð¸Ð½Ñтрументами Ñборки «%s»" -#: elf-attrs.c:625 +#: elf-attrs.c:628 #, c-format msgid "error: %pB: object tag '%d, %s' is incompatible with tag '%d, %s'" msgstr "ошибка: %pB: объектный тег «%d, %s» неÑовмеÑтим Ñ Ñ‚ÐµÐ³Ð¾Ð¼ «%d, %s»" @@ -788,91 +800,90 @@ msgid "further warnings about FDE encoding preventing .eh_frame_hdr generation dropped" msgstr "в дальнейшем, Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ñ Ð¾ не Ñоздании таблицы .eh_frame_hdr из-за ÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ FDE будут отбраÑыватьÑÑ" -#: elf-eh-frame.c:1868 +#: elf-eh-frame.c:1866 #, c-format msgid "%pB: %pA not in order" msgstr "%pB: %pA не упорÑдочено" -#: elf-eh-frame.c:1882 +#: elf-eh-frame.c:1880 #, c-format msgid "%pB: %pA invalid input section size" msgstr "%pB: %pA имеет некорректный размер входного раздела" -#: elf-eh-frame.c:1890 +#: elf-eh-frame.c:1888 #, c-format msgid "%pB: %pA points past end of text section" msgstr "%pB: %pA указывает за конец раздела текÑта" -#: elf-eh-frame.c:2139 +#: elf-eh-frame.c:2141 msgid "DW_EH_PE_datarel unspecified for this architecture" msgstr "DW_EH_PE_datarel не определена Ð´Ð»Ñ Ñтой архитектуры" -#: elf-eh-frame.c:2309 +#: elf-eh-frame.c:2312 #, c-format msgid "invalid output section for .eh_frame_entry: %pA" msgstr "некорректный выходной раздел Ð´Ð»Ñ .eh_frame_entry: %pA" -#: elf-eh-frame.c:2332 +#: elf-eh-frame.c:2335 #, c-format msgid "invalid contents in %pA section" msgstr "некорректное Ñодержимое в разделе %pA" -#: elf-eh-frame.c:2488 +#: elf-eh-frame.c:2491 msgid ".eh_frame_hdr entry overflow" msgstr "переполнение Ñлемента .eh_frame_hdr" -#: elf-eh-frame.c:2490 +#: elf-eh-frame.c:2493 msgid ".eh_frame_hdr refers to overlapping FDEs" msgstr ".eh_frame_hdr ÑÑылаетÑÑ Ð½Ð° перекрывающиеÑÑ FDE" -#: elf-ifunc.c:149 +#: elf-ifunc.c:144 #, c-format msgid "%F%P: dynamic STT_GNU_IFUNC symbol `%s' with pointer equality in `%pB' can not be used when making an executable; recompile with -fPIE and relink with -pie\n" msgstr "%F%P: динамичеÑкий STT_GNU_IFUNC Ñимвол «%s» Ñ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ñ‹Ð¼ указателем в «%pB» Ð½ÐµÐ»ÑŒÐ·Ñ Ð¸Ñпользовать при Ñоздании иÑполнÑемого файла; перекомпилируйте Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ -fPIE и перекомпонуйте Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ -pie\n" -#: elf-m10200.c:434 elf-m10300.c:2147 elf32-avr.c:1510 elf32-bfin.c:3127 -#: elf32-cr16.c:1464 elf32-cr16c.c:783 elf32-cris.c:2033 elf32-crx.c:925 -#: elf32-d10v.c:512 elf32-epiphany.c:566 elf32-fr30.c:594 elf32-frv.c:4049 -#: elf32-ft32.c:494 elf32-h8300.c:523 elf32-ip2k.c:1482 elf32-iq2000.c:693 -#: elf32-lm32.c:1112 elf32-m32c.c:624 elf32-m32r.c:3045 elf32-m68hc1x.c:1266 -#: elf32-mep.c:526 elf32-metag.c:1990 elf32-microblaze.c:1631 -#: elf32-moxie.c:288 elf32-mt.c:402 elf32-nds32.c:6189 elf32-or1k.c:1759 -#: elf32-score.c:2733 elf32-score7.c:2542 elf32-spu.c:5083 -#: elf32-tilepro.c:3506 elf32-v850.c:2291 elf32-visium.c:681 -#: elf32-xstormy16.c:931 elf64-mmix.c:1541 elfxx-tilegx.c:3870 +#: elf-m10200.c:434 elf-m10300.c:2145 elf32-avr.c:1508 elf32-bfin.c:3126 +#: elf32-cr16.c:1464 elf32-cris.c:2033 elf32-crx.c:920 elf32-d10v.c:510 +#: elf32-epiphany.c:562 elf32-fr30.c:594 elf32-frv.c:4048 elf32-ft32.c:494 +#: elf32-h8300.c:523 elf32-ip2k.c:1477 elf32-iq2000.c:691 elf32-lm32.c:1069 +#: elf32-m32c.c:624 elf32-m32r.c:2860 elf32-m68hc1x.c:1272 elf32-mep.c:526 +#: elf32-metag.c:1986 elf32-microblaze.c:1627 elf32-moxie.c:288 elf32-mt.c:402 +#: elf32-nds32.c:6048 elf32-or1k.c:1817 elf32-score.c:2734 elf32-score7.c:2543 +#: elf32-spu.c:5083 elf32-tilepro.c:3380 elf32-v850.c:2290 elf32-visium.c:680 +#: elf32-xstormy16.c:929 elf64-bpf.c:512 elf64-mmix.c:1541 elfxx-tilegx.c:3744 msgid "internal error: out of range error" msgstr "внутреннÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ°: ошибка выхода из диапазона" -#: elf-m10200.c:438 elf-m10300.c:2151 elf32-avr.c:1514 elf32-bfin.c:3131 -#: elf32-cr16.c:1468 elf32-cr16c.c:787 elf32-cris.c:2037 elf32-crx.c:929 -#: elf32-d10v.c:516 elf32-fr30.c:598 elf32-frv.c:4053 elf32-ft32.c:498 -#: elf32-h8300.c:527 elf32-iq2000.c:697 elf32-lm32.c:1116 elf32-m32c.c:628 -#: elf32-m32r.c:3049 elf32-m68hc1x.c:1270 elf32-mep.c:530 elf32-metag.c:1994 -#: elf32-microblaze.c:1635 elf32-moxie.c:292 elf32-msp430.c:1362 -#: elf32-nds32.c:6193 elf32-or1k.c:1763 elf32-score.c:2737 elf32-score7.c:2546 -#: elf32-spu.c:5087 elf32-tilepro.c:3510 elf32-v850.c:2295 elf32-visium.c:685 -#: elf32-xstormy16.c:935 elf64-mmix.c:1545 elfxx-mips.c:10469 -#: elfxx-tilegx.c:3874 +#: elf-m10200.c:438 elf-m10300.c:2149 elf32-avr.c:1512 elf32-bfin.c:3130 +#: elf32-cr16.c:1468 elf32-cris.c:2037 elf32-crx.c:924 elf32-d10v.c:514 +#: elf32-fr30.c:598 elf32-frv.c:4052 elf32-ft32.c:498 elf32-h8300.c:527 +#: elf32-iq2000.c:695 elf32-lm32.c:1073 elf32-m32c.c:628 elf32-m32r.c:2864 +#: elf32-m68hc1x.c:1276 elf32-mep.c:530 elf32-metag.c:1990 +#: elf32-microblaze.c:1631 elf32-moxie.c:292 elf32-msp430.c:1371 +#: elf32-nds32.c:6052 elf32-or1k.c:1821 elf32-score.c:2738 elf32-score7.c:2547 +#: elf32-spu.c:5087 elf32-tilepro.c:3384 elf32-v850.c:2294 elf32-visium.c:684 +#: elf32-xstormy16.c:933 elf64-mmix.c:1545 elfxx-mips.c:10576 +#: elfxx-tilegx.c:3748 msgid "internal error: unsupported relocation error" msgstr "внутреннÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ°: ошибка неподдерживаемого перемещениÑ" -#: elf-m10200.c:442 elf32-cr16.c:1472 elf32-cr16c.c:791 elf32-crx.c:933 -#: elf32-d10v.c:520 elf32-h8300.c:531 elf32-lm32.c:1120 elf32-m32r.c:3053 -#: elf32-m68hc1x.c:1274 elf32-microblaze.c:1639 elf32-nds32.c:6197 -#: elf32-score.c:2741 elf32-score7.c:2550 elf32-spu.c:5091 +#: elf-m10200.c:442 elf32-cr16.c:1472 elf32-crx.c:928 elf32-d10v.c:518 +#: elf32-h8300.c:531 elf32-lm32.c:1077 elf32-m32r.c:2868 elf32-m68hc1x.c:1280 +#: elf32-microblaze.c:1635 elf32-nds32.c:6056 elf32-score.c:2742 +#: elf32-score7.c:2551 elf32-spu.c:5091 msgid "internal error: dangerous error" msgstr "внутреннÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ°: опаÑÐ½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°" -#: elf-m10200.c:446 elf-m10300.c:2168 elf32-avr.c:1522 elf32-bfin.c:3139 -#: elf32-cr16.c:1476 elf32-cr16c.c:795 elf32-cris.c:2045 elf32-crx.c:937 -#: elf32-d10v.c:524 elf32-epiphany.c:581 elf32-fr30.c:606 elf32-frv.c:4061 -#: elf32-ft32.c:506 elf32-h8300.c:535 elf32-ip2k.c:1497 elf32-iq2000.c:705 -#: elf32-lm32.c:1124 elf32-m32c.c:636 elf32-m32r.c:3057 elf32-m68hc1x.c:1278 -#: elf32-mep.c:538 elf32-metag.c:2002 elf32-microblaze.c:1643 -#: elf32-moxie.c:300 elf32-msp430.c:1370 elf32-mt.c:410 elf32-nds32.c:6201 -#: elf32-or1k.c:1771 elf32-score.c:2750 elf32-score7.c:2554 elf32-spu.c:5095 -#: elf32-tilepro.c:3518 elf32-v850.c:2315 elf32-visium.c:693 -#: elf32-xstormy16.c:943 elf64-mmix.c:1553 elfxx-tilegx.c:3882 +#: elf-m10200.c:446 elf-m10300.c:2166 elf32-avr.c:1520 elf32-bfin.c:3138 +#: elf32-cr16.c:1476 elf32-cris.c:2045 elf32-crx.c:932 elf32-d10v.c:522 +#: elf32-epiphany.c:577 elf32-fr30.c:606 elf32-frv.c:4060 elf32-ft32.c:506 +#: elf32-h8300.c:535 elf32-ip2k.c:1492 elf32-iq2000.c:703 elf32-lm32.c:1081 +#: elf32-m32c.c:636 elf32-m32r.c:2872 elf32-m68hc1x.c:1284 elf32-mep.c:538 +#: elf32-metag.c:1998 elf32-microblaze.c:1639 elf32-moxie.c:300 +#: elf32-msp430.c:1379 elf32-mt.c:410 elf32-nds32.c:6060 elf32-or1k.c:1829 +#: elf32-score.c:2751 elf32-score7.c:2555 elf32-spu.c:5095 +#: elf32-tilepro.c:3392 elf32-v850.c:2314 elf32-visium.c:692 +#: elf32-xstormy16.c:941 elf64-bpf.c:525 elf64-mmix.c:1553 elfxx-tilegx.c:3756 msgid "internal error: unknown error" msgstr "внутреннÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ°: неизвеÑÑ‚Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°" @@ -881,38 +892,35 @@ msgid "%pB: unsupported transition from %s to %s" msgstr "%pB: неподдерживаемый переход из %s в %s" -#: elf-m10300.c:1198 +#: elf-m10300.c:1196 #, c-format msgid "%pB: %s' accessed both as normal and thread local symbol" msgstr "%pB: «%s» доÑтупен как обычный и как локальный Ñимвол нити" -#: elf-m10300.c:2094 elf32-arm.c:13246 elf32-i386.c:3409 elf32-m32r.c:2539 -#: elf32-m68k.c:3899 elf32-s390.c:3211 elf32-sh.c:3800 elf32-tilepro.c:3409 -#: elf32-xtensa.c:2965 elf64-s390.c:3161 elf64-x86-64.c:3846 -#: elfxx-sparc.c:3906 elfxx-tilegx.c:3793 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:5261 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:6807 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2279 +#: elf-m10300.c:2092 elf32-arm.c:13400 elf32-i386.c:3403 elf32-m32r.c:2354 +#: elf32-m68k.c:3931 elf32-s390.c:3082 elf32-sh.c:3677 elf32-tilepro.c:3283 +#: elf32-xtensa.c:3023 elf64-s390.c:3031 elf64-x86-64.c:4062 +#: elfxx-sparc.c:3795 elfxx-tilegx.c:3667 elfnn-aarch64.c:5505 +#: elfnn-aarch64.c:7102 #, c-format msgid "%pB(%pA+%#): unresolvable %s relocation against symbol `%s'" msgstr "%pB(%pA+%#): неразрешимое перемещение %s отноÑительно Ñимвола «%s»" -#: elf-m10300.c:2156 +#: elf-m10300.c:2154 msgid "error: inappropriate relocation type for shared library (did you forget -fpic?)" msgstr "ошибка: неподходÑщий тип Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð¾Ð±Ñ‰ÐµÐ¹ библиотеки (не указан -fpic?)" -#: elf-m10300.c:2160 +#: elf-m10300.c:2158 #, c-format msgid "%pB: taking the address of protected function '%s' cannot be done when making a shared library" msgstr "%pB: получение адреÑа защищённой функции «%s» не может быть выполнено при Ñоздании общей библиотеки" -#: elf-m10300.c:2163 +#: elf-m10300.c:2161 msgid "internal error: suspicious relocation type used in shared library" msgstr "внутреннÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ°: подозрительный тип Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð² общей библиотеке" -#: elf-m10300.c:2649 elf32-avr.c:2492 elf32-frv.c:5641 elf64-ia64-vms.c:364 -#: elfxx-sparc.c:2795 reloc.c:8185 reloc16.c:155 elf32-ia64.c:361 -#: elf64-ia64.c:361 +#: elf-m10300.c:2647 elf32-avr.c:2489 elf32-frv.c:5620 elf64-ia64-vms.c:364 +#: elfxx-sparc.c:2683 reloc.c:8244 reloc16.c:155 elfnn-ia64.c:364 msgid "%P%F: --relax and -r may not be used together\n" msgstr "%P%F: --relax и -r Ð½ÐµÐ»ÑŒÐ·Ñ Ð¸Ñпользовать вмеÑте\n" @@ -954,7 +962,7 @@ msgid "Removed property %W to merge %pB (0x%v) and %pB (not found)\n" msgstr "Удалено ÑвойÑтво %W при объединении %pB (0x%v) и %pB (не найдено)\n" -#: elf-properties.c:316 elf-properties.c:396 +#: elf-properties.c:316 elf-properties.c:394 msgid "Removed property %W to merge %pB and %pB\n" msgstr "Удалено ÑвойÑтво %W при объединении %pB и %pB\n" @@ -962,115 +970,110 @@ msgid "Removed property %W to merge %pB and %pB (not found)\n" msgstr "Удалено ÑвойÑтво %W при объединении %pB и %pB (не найдено)\n" -#: elf-properties.c:339 +#: elf-properties.c:337 msgid "Updated property %W (0x%v) to merge %pB (0x%v) and %pB (0x%v)\n" msgstr "Обновлено ÑвойÑтво %W (0x%v) при объединении %pB (0x%v) и %pB (0x%v)\n" -#: elf-properties.c:348 +#: elf-properties.c:346 msgid "Updated property %W (%v) to merge %pB (0x%v) and %pB (not found)\n" msgstr "Обновлено ÑвойÑтво %W (%v) при объединении %pB (0x%v) и %pB (не найдено)\n" -#: elf-properties.c:390 +#: elf-properties.c:388 msgid "Removed property %W to merge %pB (not found) and %pB (0x%v)\n" msgstr "Удалено ÑвойÑтво %W при объединении %pB (не найдено) и %pB (0x%v)\n" #. Merge .note.gnu.property sections. -#: elf-properties.c:552 elf-properties.c:554 +#: elf-properties.c:550 elf-properties.c:552 msgid "\n" msgstr "\n" -#: elf-properties.c:553 +#: elf-properties.c:551 msgid "Merging program properties\n" msgstr "Объединение программных ÑвойÑтв\n" #. PR 17512: file: f057ec89. -#: elf.c:345 +#: elf.c:336 #, c-format msgid "%pB: attempt to load strings from a non-string section (number %d)" msgstr "%pB: попытка загрузить Ñтроки из не Ñтрокового раздела (номер %d)" -#: elf.c:360 +#: elf.c:361 #, c-format msgid "%pB: invalid string offset %u >= % for section `%s'" msgstr "%pB: недопуÑтимое Ñмещение Ñтроки %u >= % Ð´Ð»Ñ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° «%s»" -#: elf.c:499 /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:7891 +#: elf.c:513 elfnn-aarch64.c:8096 #, c-format msgid "%pB symbol number %lu references nonexistent SHT_SYMTAB_SHNDX section" msgstr "%pB: Ñимвольный номер %lu ÑÑылаетÑÑ Ð½Ð° неÑущеÑтвующий раздел SHT_SYMTAB_SHNDX" -#: elf.c:664 -#, c-format -msgid "%pB: corrupt size field in group section header: %#" -msgstr "%pB: повреждённое поле размера в заголовке раздела групп: %#" - -#: elf.c:680 +#: elf.c:675 #, c-format msgid "%pB: invalid size field in group section header: %#" msgstr "%pB: некорректное поле размера в заголовке раздела групп: %#" -#: elf.c:728 +#: elf.c:720 #, c-format msgid "%pB: invalid entry in SHT_GROUP section [%u]" msgstr "%pB: некорректный Ñлемент в разделе SHT_GROUP [%u]" -#: elf.c:747 +#: elf.c:739 #, c-format msgid "%pB: no valid group sections found" msgstr "%pB: не найдено корректных разделов групп" #. See PR 21957 for a reproducer. -#: elf.c:776 +#: elf.c:768 #, c-format msgid "%pB: group section '%pA' has no contents" msgstr "%pB: раздел групп «%pA» не имеет Ñодержимого" -#: elf.c:837 +#: elf.c:829 #, c-format msgid "%pB: no group info for section '%pA'" msgstr "%pB: нет информации о группе Ð´Ð»Ñ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° «%pA»" -#: elf.c:868 elf.c:3886 elflink.c:11403 +#: elf.c:859 elf.c:3955 #, c-format msgid "%pB: warning: sh_link not set for section `%pA'" msgstr "%pB: предупреждение: не задан sh_link Ð´Ð»Ñ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° «%pA»" -#: elf.c:888 +#: elf.c:879 #, c-format msgid "%pB: sh_link [%d] in section `%pA' is incorrect" msgstr "%pB: некорректный sh_link [%d] в разделе «%pA»" -#: elf.c:901 +#: elf.c:892 #, c-format msgid "%pB: SHT_GROUP section [index %d] has no SHF_GROUP sections" msgstr "%pB: раздел SHT_GROUP [Ð¸Ð½Ð´ÐµÐºÑ %d] не Ñодержит разделов SHF_GROUP" -#: elf.c:922 +#: elf.c:913 #, c-format msgid "%pB: section group entry number %u is corrupt" msgstr "%pB: номер Ñлемента группы разделов %u повреждён" -#: elf.c:945 +#: elf.c:936 #, c-format msgid "%pB: unknown type [%#x] section `%s' in group [%pA]" msgstr "%pB: неизвеÑтный тип [%#x] раздела «%s» в группе [%pA]" -#: elf.c:1408 +#: elf.c:1438 #, c-format msgid "%pB: invalid sh_link field (%d) in section number %d" msgstr "%pB: некорректное поле sh_link (%d) в номере раздела %d" -#: elf.c:1424 +#: elf.c:1454 #, c-format msgid "%pB: failed to find link section for section %d" msgstr "%pB: не удалоÑÑŒ найти раздел ÑÑылок Ð´Ð»Ñ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %d" -#: elf.c:1451 +#: elf.c:1481 #, c-format msgid "%pB: failed to find info section for section %d" msgstr "%pB: не удалоÑÑŒ найти информационный раздел Ð´Ð»Ñ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %d" -#: elf.c:1623 +#: elf.c:1653 #, c-format msgid "" "\n" @@ -1079,7 +1082,7 @@ "\n" "Заголовок программы:\n" -#: elf.c:1665 +#: elf.c:1695 #, c-format msgid "" "\n" @@ -1088,7 +1091,7 @@ "\n" "ДинамичеÑкий раздел:\n" -#: elf.c:1806 +#: elf.c:1836 #, c-format msgid "" "\n" @@ -1097,7 +1100,7 @@ "\n" "ОбъÑÐ²Ð»ÐµÐ½Ð¸Ñ Ð²ÐµÑ€Ñий:\n" -#: elf.c:1831 +#: elf.c:1861 #, c-format msgid "" "\n" @@ -1106,577 +1109,678 @@ "\n" "ВерÑии ÑÑылок:\n" -#: elf.c:1836 +#: elf.c:1866 #, c-format msgid " required from %s:\n" msgstr " требуетÑÑ Ð¸Ð· %s:\n" -#: elf.c:2037 +#: elf.c:2082 #, c-format msgid "%pB: warning: loop in section dependencies detected" msgstr "%pB: предупреждение: обнаружено зацикливание в завиÑимоÑÑ‚ÑÑ… разделов" -#: elf.c:2145 +#: elf.c:2190 #, c-format msgid "%pB: warning: multiple symbol tables detected - ignoring the table in section %u" msgstr "%pB: предупреждение: обнаружена пуÑÑ‚Ð°Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ñимволов — игнорируетÑÑ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° в разделе %u" -#: elf.c:2229 +#: elf.c:2274 #, c-format msgid "%pB: warning: multiple dynamic symbol tables detected - ignoring the table in section %u" msgstr "%pB: предупреждение: обнаружена пуÑÑ‚Ð°Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° динамичеÑких Ñимволов — игнорируетÑÑ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° в разделе %u" -#: elf.c:2342 +#: elf.c:2387 #, c-format msgid "%pB: invalid link %u for reloc section %s (index %u)" msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð°Ñ ÑÑылка %u Ð´Ð»Ñ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° перемещений %s (Ð¸Ð½Ð´ÐµÐºÑ %u)" -#: elf.c:2504 elf.c:2519 elf.c:2530 elf.c:2543 +#: elf.c:2478 +#, c-format +msgid "%pB: warning: secondary relocation section '%s' for section %pA found - ignoring" +msgstr "%pB: предупреждение: обнаружен вторичный раздел перемещений «%s» Ð´Ð»Ñ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %pA — игнорируетÑÑ" + +#: elf.c:2562 elf.c:2577 elf.c:2588 elf.c:2601 #, c-format msgid "%pB: unknown type [%#x] section `%s'" msgstr "%pB: неизвеÑтный тип [%#x] раздела «%s»" -#: elf.c:3248 +#: elf.c:3308 #, c-format msgid "%pB: error: alignment power %d of section `%pA' is too big" msgstr "%pB: ошибка: кратноÑÑ‚ÑŒ Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ñ %d раздела «%pA» Ñлишком велика" -#: elf.c:3278 +#: elf.c:3341 #, c-format msgid "warning: section `%pA' type changed to PROGBITS" msgstr "предупреждение: тип раздела «%pA» изменён на PROGBITS" -#: elf.c:3754 +#: elf.c:3824 #, c-format msgid "%pB: too many sections: %u" msgstr "%pB: Ñлишком много разделов: %u" -#: elf.c:3839 +#: elf.c:3909 #, c-format msgid "%pB: sh_link of section `%pA' points to discarded section `%pA' of `%pB'" msgstr "%pB: sh_link раздела «%pA» указывает на отброшенный раздел «%pA» из «%pB»" -#: elf.c:3864 +#: elf.c:3934 #, c-format msgid "%pB: sh_link of section `%pA' points to removed section `%pA' of `%pB'" msgstr "%pB: sh_link раздела «%pA» указывает на удалённый раздел «%pA» из «%pB»" -#: elf.c:4430 +#: elf.c:4495 #, c-format -msgid "%pB: GNU_MBIN section `%pA' has invalid sh_info field: %d" -msgstr "%pB: GNU_MBIN раздела «%pA» Ñодержит некорректное поле sh_info: %d" +msgid "%pB: GNU_MBIND section `%pA' has invalid sh_info field: %d" +msgstr "%pB: GNU_MBIND раздела «%pA» Ñодержит некорректное поле sh_info: %d" -#: elf.c:5013 +#: elf.c:5086 #, c-format msgid "%pB: TLS sections are not adjacent:" msgstr "%pB: разделы TLS находÑÑ‚ÑÑ Ð½Ðµ Ñ€Ñдом:" -#: elf.c:5020 +#: elf.c:5093 #, c-format msgid "\t TLS: %pA" msgstr "\t TLS: %pA" -#: elf.c:5024 +#: elf.c:5097 #, c-format msgid "\tnon-TLS: %pA" msgstr "\t не-TLS: %pA" -#: elf.c:5538 +#: elf.c:5687 #, c-format msgid "%pB: The first section in the PT_DYNAMIC segment is not the .dynamic section" msgstr "%pB: первый раздел в Ñегменте PT_DYNAMIC не ÑвлÑетÑÑ Ñ€Ð°Ð·Ð´ÐµÐ»Ð¾Ð¼ .dynamic" -#: elf.c:5566 +#: elf.c:5713 #, c-format msgid "%pB: not enough room for program headers, try linking with -N" msgstr "%pB: недоÑтаточно меÑта Ð´Ð»Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ¾Ð² программы, попытайтеÑÑŒ Ñкомпоновать Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ -N" -#: elf.c:5654 +#: elf.c:5830 #, c-format msgid "%pB: section %pA lma %# adjusted to %#" msgstr "%pB: у раздела %pA lma %# подогнано к %#" -#: elf.c:5791 +#. The fix for this error is usually to edit the linker script being +#. used and set up the program headers manually. Either that or +#. leave room for the headers at the start of the SECTIONS. +#: elf.c:5967 +#, c-format +msgid "%pB: error: PHDR segment not covered by LOAD segment" +msgstr "%pB: ошибка: Ñегмент PHDR не покрываетÑÑ Ñегментом LOAD" + +#: elf.c:6007 #, c-format msgid "%pB: section `%pA' can't be allocated in segment %d" msgstr "%pB: раздел «%pA» не может быть выделен в Ñегменте %d" -#: elf.c:5839 +#: elf.c:6139 #, c-format msgid "%pB: warning: allocated section `%s' not in segment" msgstr "%pB: предупреждение: раздел «%s» выделен не в Ñегменте" -#: elf.c:6072 +#: elf.c:6300 #, c-format msgid "%pB: error: non-load segment %d includes file header and/or program header" msgstr "%pB: ошибка: незагружаемый Ñегмент %d включает файловый заголовок и/или программный заголовок" -#. The fix for this error is usually to edit the linker script being -#. used and set up the program headers manually. Either that or -#. leave room for the headers at the start of the SECTIONS. -#: elf.c:6249 -#, c-format -msgid "%pB: error: PHDR segment not covered by LOAD segment" -msgstr "%pB: ошибка: Ñегмент PHDR не покрываетÑÑ Ñегментом LOAD" - -#: elf.c:6606 +#: elf.c:6804 #, c-format msgid "%pB: symbol `%s' required but not present" msgstr "%pB: требуетÑÑ Ñимвол «%s», но он отÑутÑтвует" -#: elf.c:6949 +#: elf.c:7147 #, c-format msgid "%pB: warning: empty loadable segment detected at vaddr=%#, is this intentional?" msgstr "%pB: предупреждение: обнаружен пуÑтой загружаемый Ñегмент по vaddr=%#, Ñто так задумывалоÑÑŒ?" -#: elf.c:7574 +#: elf.c:7773 #, c-format msgid "%pB: warning: segment alignment of %# is too large" msgstr "%pB: предупреждение: Ñлишком большое выравнивание Ñегмента %#" -#: elf.c:8073 +#: elf.c:8286 +#, c-format +msgid "%pB: Unable to handle section index %x in ELF symbol. Using ABS instead." +msgstr "%pB: невозможно обработать Ð¸Ð½Ð´ÐµÐºÑ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %x в Ñимволе ELF. ВмеÑто него иÑпользуем ABS." + +#: elf.c:8316 #, c-format msgid "unable to find equivalent output section for symbol '%s' from section '%s'" msgstr "невозможно найти подходÑщее меÑто вывода Ð´Ð»Ñ Ñимвола «%s» из раздела «%s»" -#: elf.c:8421 +#: elf.c:8703 #, c-format msgid "%pB: .gnu.version_r invalid entry" msgstr "%pB: некорректный Ñлемент .gnu.version_r" -#: elf.c:8548 +#: elf.c:8836 #, c-format msgid "%pB: .gnu.version_d invalid entry" msgstr "%pB: некорректный Ñлемент .gnu.version_d" -#: elf32-arc.c:440 elf32-frv.c:6630 elf32-iq2000.c:870 elf32-m32c.c:914 -#: elf32-mt.c:562 elf32-rl78.c:1260 elf32-rx.c:3199 elf32-visium.c:841 -#: elf64-ppc.c:4950 +#: elf.c:9293 +#, c-format +msgid "%pB:%pA: error: attempting to write into an unallocated compressed section" +msgstr "%pB:%pA: ошибка: попытка запиÑи в невыделенный Ñжатый раздел" + +#: elf.c:9302 +#, c-format +msgid "%pB:%pA: error: attempting to write over the end of the section" +msgstr "%pB:%pA: ошибка: попытка запиÑи за конец раздела" + +#: elf.c:9313 +#, c-format +msgid "%pB:%pA: error: attempting to write section into an empty buffer" +msgstr "%pB:%pA: ошибка: попытка запиÑи раздела в пуÑтой буфер" + +#: elf.c:12430 +msgid "GNU_MBIND section is unsupported" +msgstr "раздел GNU_MBIND не поддерживаетÑÑ" + +#: elf.c:12432 +msgid "symbol type STT_GNU_IFUNC is unsupported" +msgstr "Ñимвольный тип STT_GNU_IFUNC не поддерживаетÑÑ" + +#: elf.c:12434 +msgid "symbol binding STB_GNU_UNIQUE is unsupported" +msgstr "ÑÐ¸Ð¼Ð²Ð¾Ð»ÑŒÐ½Ð°Ñ Ð¿Ñ€Ð¸Ð²Ñзка STB_GNU_UNIQUE не поддерживаетÑÑ" + +#: elf.c:12618 elf64-sparc.c:123 elfcode.h:1482 +#, c-format +msgid "%pB(%pA): relocation %d has invalid symbol index %ld" +msgstr "%pB(%pA): перемещение %d имеет некорректный Ð¸Ð½Ð´ÐµÐºÑ Ñимвола %ld" + +#: elf.c:12692 +#, c-format +msgid "%pB(%pA): link section cannot be set because the output file does not have a symbol table" +msgstr "%pB(%pA): Ð½ÐµÐ»ÑŒÐ·Ñ Ð·Ð°Ð´Ð°Ñ‚ÑŒ раздел ÑÑылок, так как выходной файл не Ñодержит таблицу Ñимволов" + +#: elf.c:12704 +#, c-format +msgid "%pB(%pA): info section index is invalid" +msgstr "%pB(%pA): некорректный Ð¸Ð½Ð´ÐµÐºÑ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° информации" + +#: elf.c:12718 +#, c-format +msgid "%pB(%pA): info section index cannot be set because the section is not in the output" +msgstr "%pB(%pA): Ð½ÐµÐ»ÑŒÐ·Ñ Ð·Ð°Ð´Ð°Ñ‚ÑŒ Ð¸Ð½Ð´ÐµÐºÑ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° информации, так как раздел отÑутÑтвует в результате" + +#: elf.c:12784 +#, c-format +msgid "%pB(%pA): error: secondary reloc section processed twice" +msgstr "%pB(%pA): ошибка: вторичный раздел перемещений обработан дважды" + +#: elf.c:12796 +#, c-format +msgid "%pB(%pA): error: secondary reloc section is empty!" +msgstr "%pB(%pA): ошибка: вторичный раздел перемещений пуÑÑ‚!" + +#: elf.c:12819 +#, c-format +msgid "%pB(%pA): error: internal relocs missing for secondary reloc section" +msgstr "%pB(%pA): ошибка: внутренние Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð¾Ñ‚ÑутÑтвуют Ð´Ð»Ñ Ð²Ñ‚Ð¾Ñ€Ð¸Ñ‡Ð½Ð¾Ð³Ð¾ раздела перемещений" + +#: elf.c:12838 +#, c-format +msgid "%pB(%pA): error: reloc table entry %u is empty" +msgstr "%pB:%pA: ошибка: Ñлемент таблицы перемещений %u пуÑÑ‚" + +#: elf.c:12863 +#, c-format +msgid "%pB(%pA): error: secondary reloc %u references a missing symbol" +msgstr "%pB(%pA): ошибка: вторичный раздел %u ÑÑылаетÑÑ Ð½Ð° отÑутÑтвующий Ñимвол" + +#: elf.c:12880 +#, c-format +msgid "%pB(%pA): error: secondary reloc %u references a deleted symbol" +msgstr "%pB(%pA): ошибка: вторичный раздел %u ÑÑылаетÑÑ Ð½Ð° удалённый Ñимвол" + +#: elf.c:12893 +#, c-format +msgid "%pB(%pA): error: secondary reloc %u is of an unknown type" +msgstr "%pB(%pA): ошибка: вторичный раздел %u неизвеÑтного типа" + +#: elf32-arc.c:455 elf32-frv.c:6611 elf32-iq2000.c:868 elf32-m32c.c:914 +#: elf32-mt.c:562 elf32-rl78.c:1260 elf32-rx.c:3205 elf32-visium.c:844 +#: elf64-ppc.c:5291 #, c-format msgid "private flags = 0x%lx:" msgstr "ÑобÑтвенные флаги = 0x%lx:" -#: elf32-arc.c:627 +#: elf32-arc.c:642 #, c-format msgid "warning: %pB: conflicting platform configuration %s with %s" msgstr "предупреждение: %pB: противоречивые наÑтройки платформы %s Ñ %s" -#: elf32-arc.c:646 +#: elf32-arc.c:661 #, c-format msgid "error: %pB: unable to merge CPU base attributes %s with %s" msgstr "ошибка: %pB: не удалоÑÑŒ объединить оÑновные атрибуты ЦП %s Ñ %s" -#: elf32-arc.c:683 +#: elf32-arc.c:698 #, c-format msgid "error: %pB: unable to merge ISA extension attributes %s" msgstr "ошибка: %pB: не удалоÑÑŒ объединить атрибуты %s раÑÑˆÐ¸Ñ€ÐµÐ½Ð¸Ñ ISA" -#: elf32-arc.c:707 +#: elf32-arc.c:722 #, c-format msgid "error: %pB: conflicting ISA extension attributes %s with %s" msgstr "ошибка: %pB: не ÑоглаÑующиеÑÑ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ñ‹ %s Ñ %s раÑÑˆÐ¸Ñ€ÐµÐ½Ð¸Ñ ISA" -#: elf32-arc.c:747 +#: elf32-arc.c:762 #, c-format msgid "error: %pB: cannot mix rf16 with full register set %pB" msgstr "error: %pB: Ð½ÐµÐ»ÑŒÐ·Ñ Ñмешивать rf16 Ñ Ð¿Ð¾Ð»Ð½Ñ‹Ð¼ набором региÑтров %pB" -#: elf32-arc.c:775 +#: elf32-arc.c:790 #, c-format msgid "error: %pB: conflicting attributes %s: %s with %s" msgstr "ошибка: %pB: неÑоглаÑующиеÑÑ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ñ‹ %s: %s Ñ %s" -#: elf32-arc.c:802 +#: elf32-arc.c:817 #, c-format msgid "error: %pB: conflicting attributes %s" msgstr "ошибка: %pB: неÑоглаÑующиеÑÑ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ñ‹ %s" -#: elf32-arc.c:907 +#: elf32-arc.c:922 #, c-format msgid "error: attempting to link %pB with a binary %pB of different architecture" msgstr "ошибка: попытка компоновки %pB Ñ Ð´Ð²Ð¾Ð¸Ñ‡Ð½Ñ‹Ð¼ файлом %pB другой архитектуры" -#: elf32-arc.c:923 elf32-iq2000.c:846 elf32-m32c.c:889 elf32-m68hc1x.c:1385 -#: elf32-ppc.c:3865 elf64-sparc.c:711 elfxx-mips.c:15354 +#: elf32-arc.c:938 elf32-iq2000.c:844 elf32-m32c.c:889 elf32-m68hc1x.c:1391 +#: elf32-ppc.c:3867 elf64-sparc.c:722 elfxx-mips.c:15513 #, c-format msgid "%pB: uses different e_flags (%#x) fields than previous modules (%#x)" msgstr "%pB: иÑпользующиеÑÑ Ð¿Ð¾Ð»Ñ e_flags (%#x) отличаютÑÑ Ð¾Ñ‚ иÑпользованных в предыдущих модулÑÑ… (%#x)" -#: elf32-arc.c:1012 +#: elf32-arc.c:1027 msgid "error: the ARC4 architecture is no longer supported" msgstr "ошибка: архитектура ARC4 больше не поддерживаетÑÑ" -#: elf32-arc.c:1018 +#: elf32-arc.c:1033 msgid "warning: unset or old architecture flags; use default machine" msgstr "предупреждение: не заданы или уÑтарели флаги архитектуры; иÑпользуетÑÑ Ð¼Ð°ÑˆÐ¸Ð½Ð° по умолчанию" -#: elf32-arc.c:1151 +#: elf32-arc.c:1159 #, c-format msgid "%pB(%pA+%#): CMEM relocation to `%s' is invalid, 16 MSB should be %#x (value is %#)" msgstr "%pB(%pA+%#): некорректное перемещение CMEM в «%s», 16 MSB должно быть %#x (значение равно %#)" -#: elf32-arc.c:1162 +#: elf32-arc.c:1170 #, c-format msgid "%pB(%pA+%#): CMEM relocation to `%s+%#' is invalid, 16 MSB should be %#x (value is %#)" msgstr "%pB(%pA+%#): некорректное перемещение CMEM в «%s+%#», 16 MSB должно быть %#x (значение равно %#)" -#: elf32-arc.c:1876 +#: elf32-arc.c:1885 msgid "GOT and PLT relocations cannot be fixed with a non dynamic linker" msgstr "Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ GOT и PLT не могут быть поÑтоÑнными Ñ Ð½Ðµ динамичеÑким компоновщиком" -#: elf32-arc.c:1900 elf32-rl78.c:1098 elf32-rx.c:1470 +#: elf32-arc.c:1909 elf32-rl78.c:1098 elf32-rx.c:1475 #, c-format msgid "%pB(%pA): warning: unaligned access to symbol '%s' in the small data area" msgstr "%pB(%pA): предупреждение: невыровненный доÑтуп к Ñимволу «%s» в малой облаÑти данных" -#: elf32-arc.c:1905 elf32-rl78.c:1103 elf32-rx.c:1475 +#: elf32-arc.c:1914 elf32-rl78.c:1103 elf32-rx.c:1480 #, c-format msgid "%pB(%pA): internal error: out of range error" msgstr "%pB(%pA): внутреннÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ°: ошибка выхода из диапазона" -#: elf32-arc.c:1910 elf32-rl78.c:1108 elf32-rx.c:1480 +#: elf32-arc.c:1919 elf32-rl78.c:1108 elf32-rx.c:1485 #, c-format msgid "%pB(%pA): internal error: unsupported relocation error" msgstr "%pB(%pA): внутреннÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ°: ошибка неподдерживаемого перемещениÑ" -#: elf32-arc.c:1915 elf32-rl78.c:1113 elf32-rx.c:1485 +#: elf32-arc.c:1924 elf32-rl78.c:1113 elf32-rx.c:1490 #, c-format msgid "%pB(%pA): internal error: dangerous relocation" msgstr "%pB(%pA): внутреннÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ°: опаÑное перемещение" -#: elf32-arc.c:1920 elf32-rl78.c:1118 elf32-rx.c:1490 +#: elf32-arc.c:1929 elf32-rl78.c:1118 elf32-rx.c:1495 #, c-format msgid "%pB(%pA): internal error: unknown error" msgstr "%pB(%pA): внутреннÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ°: неизвеÑÑ‚Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°" -#: elf32-arc.c:2013 elf32-arc.c:2081 elf32-arm.c:15323 elf32-metag.c:2257 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:7462 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:497 +#: elf32-arc.c:2022 elf32-arc.c:2090 elf32-arm.c:15513 elf32-metag.c:2253 +#: elf32-nds32.c:5498 elfnn-aarch64.c:7739 elfnn-riscv.c:483 #, c-format msgid "%pB: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC" msgstr "%pB: перемещение %s Ð´Ð»Ñ Â«%s» не может иÑпользоватьÑÑ Ð¿Ñ€Ð¸ Ñоздании общего объекта; перекомпилируйте Ñ -fPIC" -#: elf32-arc.c:2949 +#: elf32-arc.c:2909 #, c-format msgid "%pB: unknown mandatory ARC object attribute %d" msgstr "%pB: неизвеÑтный обÑзательный атрибут объекта ARC %d" -#: elf32-arc.c:2957 +#: elf32-arc.c:2917 #, c-format msgid "warning: %pB: unknown ARC object attribute %d" msgstr "предупреждение: %pB: неизвеÑтный атрибут объекта ARC %d" -#: elf32-arm.c:4304 elf32-arm.c:4338 elf32-arm.c:4357 elf32-arm.c:4409 +#: elf32-arm.c:4307 elf32-arm.c:4341 elf32-arm.c:4360 elf32-arm.c:4412 #, c-format msgid "%pB(%pA): warning: long branch veneers used in section with SHF_ARM_PURECODE section attribute is only supported for M-profile targets that implement the movw instruction" msgstr "%pB(%pA): предупреждение: Ñклейки длинных ветвей, иÑпользованных в разделе Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð¾Ð¼ раздела SHF_ARM_PURECODE, поддерживаютÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð´Ð»Ñ Ñ†ÐµÐ»ÐµÐ¹ M-профилÑ, который реализован инÑтрукцией movw" -#: elf32-arm.c:4369 elf32-arm.c:4423 elf32-arm.c:9093 elf32-arm.c:9183 +#: elf32-arm.c:4372 elf32-arm.c:4426 elf32-arm.c:9116 elf32-arm.c:9206 #, c-format msgid "%pB(%s): warning: interworking not enabled; first occurrence: %pB: %s call to %s" msgstr "%pB(%s): предупреждение: ÑовмеÑÑ‚Ð½Ð°Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ð° не включена; первое упоминание: %pB: вызов %s в %s" -#: elf32-arm.c:4697 +#: elf32-arm.c:4552 +#, c-format +msgid "ERROR: CMSE stub (%s section) too far (%#) from destination (%#)" +msgstr "ОШИБКÐ: заглушка CMSE (раздел %s) Ñлишком далеко (%#) от Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ (%#)" + +#: elf32-arm.c:4721 #, c-format msgid "no address assigned to the veneers output section %s" msgstr "не назначен Ð°Ð´Ñ€ÐµÑ Ñклейкам в выходном разделе %s" -#: elf32-arm.c:4772 elf32-arm.c:6909 elf32-csky.c:3287 elf32-hppa.c:579 -#: elf32-m68hc1x.c:165 elf32-metag.c:1186 elf32-nios2.c:2208 elf64-ppc.c:3501 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:3098 +#: elf32-arm.c:4796 elf32-arm.c:6943 elf32-csky.c:3172 elf32-hppa.c:584 +#: elf32-m68hc1x.c:165 elf32-metag.c:1182 elf32-nios2.c:2204 elf64-ppc.c:3775 +#: elfnn-aarch64.c:3190 #, c-format msgid "%pB: cannot create stub entry %s" msgstr "%pB: невозможно Ñоздать Ñлемент заглушки %s" -#: elf32-arm.c:5957 +#: elf32-arm.c:5017 elf32-csky.c:3514 elf32-hppa.c:734 elf32-m68hc11.c:422 +#: elf32-m68hc12.c:542 elf32-metag.c:3347 elf32-nios2.c:2497 elf64-ppc.c:11315 +#: elfnn-aarch64.c:3259 +msgid "%F%P: Could not assign '%pA' to an output section. Retry without --enable-non-contiguous-regions.\n" +msgstr "%F%P: Ðевозможно назначить «%pA» выходному разделу. Повторите без --enable-non-contiguous-regions.\n" + +#: elf32-arm.c:5987 #, c-format msgid "%pB: special symbol `%s' only allowed for ARMv8-M architecture or later" msgstr "%pB: Ñпециальный Ñимвол «%s» разрешён только Ð´Ð»Ñ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ñ‹ ARMv8-M и новее" -#: elf32-arm.c:5966 +#: elf32-arm.c:5996 #, c-format msgid "%pB: invalid special symbol `%s'; it must be a global or weak function symbol" msgstr "%pB: некорректный Ñпециальный Ñимвол «%s»; Ñто должен быть глобальный или Ñлабый Ñимвол функции" -#: elf32-arm.c:6005 +#: elf32-arm.c:6035 #, c-format msgid "%pB: invalid standard symbol `%s'; it must be a global or weak function symbol" msgstr "%pB: некорректный Ñтандартный Ñимвол «%s»; Ñто должен быть глобальный или Ñлабый Ñимвол функции" -#: elf32-arm.c:6011 +#: elf32-arm.c:6041 #, c-format msgid "%pB: absent standard symbol `%s'" msgstr "%pB: отÑутÑтвует Ñтандартный Ñимвол «%s»" -#: elf32-arm.c:6023 +#: elf32-arm.c:6053 #, c-format msgid "%pB: `%s' and its special symbol are in different sections" msgstr "%pB: «%s» и его Ñпециальный Ñимвол находÑÑ‚ÑÑ Ð² разных разделах" -#: elf32-arm.c:6035 +#: elf32-arm.c:6065 #, c-format msgid "%pB: entry function `%s' not output" msgstr "%pB: Ð²Ñ…Ð¾Ð´Ð½Ð°Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Â«%s» отÑутÑтвует в выводе" -#: elf32-arm.c:6042 +#: elf32-arm.c:6072 #, c-format msgid "%pB: entry function `%s' is empty" msgstr "%pB: Ð²Ñ…Ð¾Ð´Ð½Ð°Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Â«%s» пуÑта" -#: elf32-arm.c:6171 +#: elf32-arm.c:6201 #, c-format msgid "%pB: --in-implib only supported for Secure Gateway import libraries" msgstr "%pB: --in-implib поддерживаетÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð´Ð»Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐº импорта Secure Gateway" -#: elf32-arm.c:6217 +#: elf32-arm.c:6250 #, c-format msgid "%pB: invalid import library entry: `%s'; symbol should be absolute, global and refer to Thumb functions" msgstr "%pB: некорректный Ñлемент импортируемой библиотеки: «%s»; Ñимвол должен быть абÑолютным, глобальным или ÑÑылатьÑÑ Ð½Ð° функции Thumb" -#: elf32-arm.c:6239 +#: elf32-arm.c:6272 #, c-format msgid "entry function `%s' disappeared from secure code" msgstr "Ð²Ñ…Ð¾Ð´Ð½Ð°Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Â«%s» иÑчезла из безопаÑного кода" -#: elf32-arm.c:6263 +#: elf32-arm.c:6296 #, c-format msgid "`%s' refers to a non entry function" msgstr "«%s» ÑÑылаетÑÑ Ð½Ð° не пуÑтую входную функцию" -#: elf32-arm.c:6278 +#: elf32-arm.c:6311 #, c-format msgid "%pB: visibility of symbol `%s' has changed" msgstr "%pB: изменилаÑÑŒ видимоÑÑ‚ÑŒ Ñимвола «%s»" -#: elf32-arm.c:6287 +#: elf32-arm.c:6320 #, c-format msgid "%pB: incorrect size for symbol `%s'" msgstr "%pB: некорректный размер Ñимвола «%s»" -#: elf32-arm.c:6306 +#: elf32-arm.c:6339 #, c-format msgid "offset of veneer for entry function `%s' not a multiple of its size" msgstr "Ñмещение Ñклейки входной функции «%s» не кратно её размеру" -#: elf32-arm.c:6326 +#: elf32-arm.c:6359 msgid "new entry function(s) introduced but no output import library specified:" msgstr "поÑвилаÑÑŒ Ð½Ð¾Ð²Ð°Ñ Ð²Ñ…Ð¾Ð´Ð½Ð°Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ(и), но не указан вывод импортируемой библиотеки:" -#: elf32-arm.c:6334 +#: elf32-arm.c:6367 #, c-format msgid "start address of `%s' is different from previous link" msgstr "начальный Ð°Ð´Ñ€ÐµÑ Â«%s» отличаетÑÑ Ð¾Ñ‚ предыдущей ÑÑылки" -#: elf32-arm.c:7042 elf32-arm.c:7078 +#: elf32-arm.c:7076 elf32-arm.c:7111 #, c-format msgid "unable to find %s glue '%s' for '%s'" msgstr "не удалоÑÑŒ найти Ñклейку %s «%s» Ð´Ð»Ñ Â«%s»" -#: elf32-arm.c:7793 +#: elf32-arm.c:7822 #, c-format msgid "%pB: BE8 images only valid in big-endian mode" msgstr "%pB: образы BE8 разрешены только в режиме big-endian" #. Give a warning, but do as the user requests anyway. -#: elf32-arm.c:8024 +#: elf32-arm.c:8049 #, c-format msgid "%pB: warning: selected VFP11 erratum workaround is not necessary for target architecture" msgstr "%pB: предупреждение: выбранный обход ошибки VFP11 не требуетÑÑ Ð´Ð»Ñ Ñ†ÐµÐ»ÐµÐ²Ð¾Ð¹ архитектуры" -#: elf32-arm.c:8051 +#: elf32-arm.c:8076 #, c-format msgid "%pB: warning: selected STM32L4XX erratum workaround is not necessary for target architecture" msgstr "%pB: предупреждение: выбранный обход ошибки STM32L4XX не требуетÑÑ Ð´Ð»Ñ Ñ†ÐµÐ»ÐµÐ²Ð¾Ð¹ архитектуры" -#: elf32-arm.c:8588 elf32-arm.c:8608 elf32-arm.c:8674 elf32-arm.c:8693 +#: elf32-arm.c:8612 elf32-arm.c:8632 elf32-arm.c:8699 elf32-arm.c:8718 #, c-format msgid "%pB: unable to find %s veneer `%s'" msgstr "%pB: невозможно найти Ñклейку %s «%s»" -#: elf32-arm.c:8900 +#: elf32-arm.c:8925 #, c-format msgid "%pB(%pA+%#x): error: multiple load detected in non-last IT block instruction: STM32L4XX veneer cannot be generated; use gcc option -mrestrict-it to generate only one instruction per IT block" msgstr "%pB(%pA+%#x): ошибка: обнаружено неÑколько инÑтрукций загрузок в не поÑледнем блоке IT: невозможно Ñгенерировать Ñклейку STM32L4XX; иÑпользуйте параметр gcc -mrestrict-it Ð´Ð»Ñ Ð³ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ð¸ только одной инÑтрукции в блоке IT" -#: elf32-arm.c:9000 +#: elf32-arm.c:9023 #, c-format msgid "invalid TARGET2 relocation type '%s'" msgstr "недопуÑтимый TARGET2 тип Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Â«%s»" #. FIXME: We ought to be able to generate thumb-1 PLT #. instructions... -#: elf32-arm.c:9802 +#: elf32-arm.c:9825 #, c-format msgid "%pB: warning: thumb-1 mode PLT generation not currently supported" msgstr "%pB: предупреждение: Ð³ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ñ PLT в режиме thumb-1 пока не поддерживаетÑÑ" -#: elf32-arm.c:10106 elf32-arm.c:10148 +#: elf32-arm.c:10135 elf32-arm.c:10177 #, c-format msgid "%pB(%pA+%#): unexpected %s instruction '%#lx' in TLS trampoline" msgstr "%pB(%pA+%#): Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°ÐµÐ¼Ð°Ñ Ð¸Ð½ÑÑ‚Ñ€ÑƒÐºÑ†Ð¸Ñ %s «%#lx» в трамплине TLS" -#: elf32-arm.c:10492 +#: elf32-arm.c:10521 msgid "shared object" msgstr "общий объект" -#: elf32-arm.c:10495 +#: elf32-arm.c:10524 msgid "PIE executable" msgstr "иÑполнÑемый PIE" -#: elf32-arm.c:10498 +#: elf32-arm.c:10527 #, c-format msgid "%pB: relocation %s against external or undefined symbol `%s' can not be used when making a %s; recompile with -fPIC" msgstr "%pB: перемещение %s Ð´Ð»Ñ Ð²Ð½ÐµÑˆÐ½ÐµÐ³Ð¾ или неопределённого Ñимвола «%s» не может иÑпользоватьÑÑ Ð¿Ñ€Ð¸ Ñоздании %s; перекомпилируйте Ñ -fPIC" -#: elf32-arm.c:10635 elf32-arm.c:11062 +#: elf32-arm.c:10664 elf32-arm.c:11091 #, c-format msgid "%pB: warning: %s BLX instruction targets %s function '%s'" msgstr "%pB: предупреждение: инÑÑ‚Ñ€ÑƒÐºÑ†Ð¸Ñ BLX %s указывает на функцию %s «%s»" -#: elf32-arm.c:11975 elf32-arm.c:12001 +#: elf32-arm.c:12003 elf32-arm.c:12029 #, c-format msgid "%pB(%pA+%#): unexpected %s instruction '%#lx' referenced by TLS_GOTDESC" msgstr "%pB(%pA+%#): Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°ÐµÐ¼Ð°Ñ Ð¸Ð½ÑÑ‚Ñ€ÑƒÐºÑ†Ð¸Ñ %s «%#lx», на которую ÑÑылаетÑÑ TLS_GOTDESC" -#: elf32-arm.c:12047 elf32-csky.c:4853 elf32-m68k.c:3703 elf32-metag.c:1919 -#: elf32-nios2.c:4366 +#: elf32-arm.c:12075 elf32-csky.c:4746 elf32-m68k.c:3735 elf32-metag.c:1915 +#: elf32-nios2.c:4385 #, c-format msgid "%pB(%pA+%#): %s relocation not permitted in shared object" msgstr "%pB(%pA+%#): перемещение %s не разрешено в общем объекте" -#: elf32-arm.c:12261 +#: elf32-arm.c:12289 #, c-format msgid "%pB(%pA+%#): only ADD or SUB instructions are allowed for ALU group relocations" msgstr "%pB(%pA+%#): в группе перемещений ALU разрешены только инÑтрукции ADD или SUB" -#: elf32-arm.c:12302 elf32-arm.c:12394 elf32-arm.c:12482 elf32-arm.c:12572 +#: elf32-arm.c:12330 elf32-arm.c:12422 elf32-arm.c:12510 elf32-arm.c:12600 #, c-format msgid "%pB(%pA+%#): overflow whilst splitting %# for group relocation %s" msgstr "%pB(%pA+%#): переполнение во Ð²Ñ€ÐµÐ¼Ñ Ñ€Ð°Ð·Ð´ÐµÐ»ÐµÐ½Ð¸Ñ %# Ð´Ð»Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹ перемещений %s" -#: elf32-arm.c:13078 elf32-sh.c:3689 +#: elf32-arm.c:13232 elf32-sh.c:3571 #, c-format msgid "%pB(%pA+%#): %s relocation against SEC_MERGE section" msgstr "%pB(%pA+%#): перемещение %s в разделе SEC_MERGE" -#: elf32-arm.c:13191 elf32-m68k.c:3936 elf32-xtensa.c:2703 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:6534 +#: elf32-arm.c:13345 elf32-m68k.c:3968 elf32-xtensa.c:2761 +#: elfnn-aarch64.c:6829 #, c-format msgid "%pB(%pA+%#): %s used with TLS symbol %s" msgstr "%pB(%pA+%#): %s иÑпользуетÑÑ Ñ TLS-Ñимволом %s" -#: elf32-arm.c:13193 elf32-m68k.c:3938 elf32-xtensa.c:2705 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:6536 +#: elf32-arm.c:13347 elf32-m68k.c:3970 elf32-xtensa.c:2763 +#: elfnn-aarch64.c:6831 #, c-format msgid "%pB(%pA+%#): %s used with non-TLS symbol %s" msgstr "%pB(%pA+%#): %s иÑпользуетÑÑ Ñ Ð½Ðµ TLS-Ñимволом %s" -#: elf32-arm.c:13276 elf32-tic6x.c:2708 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:6871 +#: elf32-arm.c:13430 elf32-tic6x.c:2649 elfnn-aarch64.c:7166 msgid "out of range" msgstr "вне диапазона" -#: elf32-arm.c:13280 elf32-nios2.c:4500 elf32-pru.c:933 elf32-tic6x.c:2712 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:6875 +#: elf32-arm.c:13434 elf32-nios2.c:4519 elf32-pru.c:936 elf32-tic6x.c:2653 +#: elfnn-aarch64.c:7170 msgid "unsupported relocation" msgstr "неподдерживаемое перемещение" -#: elf32-arm.c:13288 elf32-nios2.c:4510 elf32-pru.c:943 elf32-tic6x.c:2720 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:6883 +#: elf32-arm.c:13442 elf32-nios2.c:4529 elf32-pru.c:946 elf32-tic6x.c:2661 +#: elfnn-aarch64.c:7178 msgid "unknown error" msgstr "неизвеÑÑ‚Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°" -#: elf32-arm.c:13764 +#: elf32-arm.c:13920 #, c-format msgid "warning: not setting interworking flag of %pB since it has already been specified as non-interworking" msgstr "предупреждение: флаг ÑовмеÑтной работы Ð´Ð»Ñ %pB не уÑтанавливаетÑÑ, так как он уже указывает на неÑовмеÑтную работу" -#: elf32-arm.c:13768 +#: elf32-arm.c:13924 #, c-format msgid "warning: clearing the interworking flag of %pB due to outside request" msgstr "предупреждение: очищаетÑÑ Ñ„Ð»Ð°Ð³ ÑовмеÑтной работы Ð´Ð»Ñ %pB из-за внешнего запроÑа" -#: elf32-arm.c:13813 +#: elf32-arm.c:13969 #, c-format msgid "warning: clearing the interworking flag of %pB because non-interworking code in %pB has been linked with it" msgstr "предупреждение: ÑÐ±Ñ€Ð¾Ñ Ñ„Ð»Ð°Ð³Ð° ÑовмеÑтной работы %pB, так как Ñ Ð½Ð¸Ð¼ был Ñкомпонован код без ÑовмеÑтной работы из %pB" -#: elf32-arm.c:13900 +#: elf32-arm.c:14056 #, c-format msgid "%pB: unknown mandatory EABI object attribute %d" msgstr "%pB: неизвеÑтный обÑзательный атрибут EABI-объекта %d" -#: elf32-arm.c:13908 +#: elf32-arm.c:14064 #, c-format msgid "warning: %pB: unknown EABI object attribute %d" msgstr "предупреждение: %pB: неизвеÑтный атрибут EABI-объекта %d" -#: elf32-arm.c:14175 +#: elf32-arm.c:14364 #, c-format msgid "error: %pB: unknown CPU architecture" msgstr "ошибка: %pB: неизвеÑÑ‚Ð½Ð°Ñ Ð¿Ñ€Ð¾Ñ†ÐµÑÑÐ¾Ñ€Ð½Ð°Ñ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð°" -#: elf32-arm.c:14213 elf32-nios2.c:2946 +#: elf32-arm.c:14402 elf32-nios2.c:2953 #, c-format msgid "error: %pB: conflicting CPU architectures %d/%d" msgstr "ошибка: %pB: противоречащие архитектурные профили %d/%d" -#: elf32-arm.c:14310 +#: elf32-arm.c:14499 #, c-format msgid "Error: %pB has both the current and legacy Tag_MPextension_use attributes" msgstr "ошибка: %pB Ñодержит одновременно и текущий и уÑтаревший атрибут Tag_MPextension_use" -#: elf32-arm.c:14339 +#: elf32-arm.c:14528 #, c-format msgid "error: %pB uses VFP register arguments, %pB does not" msgstr "ошибка: %pB иÑпользует региÑтровые аргументы VFP, а %pB нет" -#: elf32-arm.c:14497 +#: elf32-arm.c:14687 #, c-format msgid "error: %pB: unable to merge virtualization attributes with %pB" msgstr "ошибка: %pB: не удалоÑÑŒ объединить атрибуты виртуализации Ñ %pB" -#: elf32-arm.c:14523 +#: elf32-arm.c:14713 #, c-format msgid "error: %pB: conflicting architecture profiles %c/%c" msgstr "ошибка: %pB: противоречащие архитектурные профили %c/%c" -#: elf32-arm.c:14662 +#: elf32-arm.c:14852 #, c-format msgid "warning: %pB: conflicting platform configuration" msgstr "предупреждение: %pB: противоречивые наÑтройки платформы" -#: elf32-arm.c:14671 +#: elf32-arm.c:14861 #, c-format msgid "error: %pB: conflicting use of R9" msgstr "ошибка: %pB: противоречащее иÑпользование R9" -#: elf32-arm.c:14683 +#: elf32-arm.c:14873 #, c-format msgid "error: %pB: SB relative addressing conflicts with use of R9" msgstr "ошибка: %pB: противоречащее иÑпользование отноÑительной адреÑации SB и R9" -#: elf32-arm.c:14696 +#: elf32-arm.c:14886 #, c-format msgid "warning: %pB uses %u-byte wchar_t yet the output is to use %u-byte wchar_t; use of wchar_t values across objects may fail" msgstr "предупреждение: %pB иÑпользует %u-байтовый wchar_t, Ñ…Ð¾Ñ‚Ñ ÑƒÐ¶Ðµ иÑпользовалÑÑ %u-байтовый wchar_t; иÑпользование значений wchar_t в разных объектах может привеÑти к ошибке" -#: elf32-arm.c:14727 +#: elf32-arm.c:14917 #, c-format msgid "warning: %pB uses %s enums yet the output is to use %s enums; use of enum values across objects may fail" msgstr "предупреждение: %pB иÑпользует %s enum, Ñ…Ð¾Ñ‚Ñ ÑƒÐ¶Ðµ иÑпользовалÑÑ %s enum; иÑпользование значений enum в разных объектах может привеÑти к ошибке" -#: elf32-arm.c:14739 +#: elf32-arm.c:14929 #, c-format msgid "error: %pB uses iWMMXt register arguments, %pB does not" msgstr "ошибка: %pB иÑпользует региÑтровые аргументы iWMMXt, а %pB нет" -#: elf32-arm.c:14756 +#: elf32-arm.c:14946 #, c-format msgid "error: fp16 format mismatch between %pB and %pB" msgstr "ошибка: формат fp16 раÑходитÑÑ Ð² %pB и %pB" -#: elf32-arm.c:14792 +#: elf32-arm.c:14982 #, c-format msgid "%pB has both the current and legacy Tag_MPextension_use attributes" msgstr "%pB Ñодержит одновременно и текущий и уÑтаревший атрибут Tag_MPextension_use" @@ -1686,345 +1790,330 @@ #. Ignore init flag - it may not be set, despite the flags field containing valid data. #. Ignore init flag - it may not be set, despite the flags field #. containing valid data. -#: elf32-arm.c:14879 elf32-bfin.c:4740 elf32-cris.c:3908 elf32-m68hc1x.c:1410 -#: elf32-m68k.c:1201 elf32-score.c:4000 elf32-score7.c:3805 elf32-vax.c:537 -#: elf32-xgate.c:494 elfxx-mips.c:16037 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:7037 +#: elf32-arm.c:15069 elf32-bfin.c:4719 elf32-cris.c:3861 elf32-m68hc1x.c:1416 +#: elf32-m68k.c:1267 elf32-score.c:4000 elf32-score7.c:3805 elf32-vax.c:537 +#: elf32-xgate.c:494 elfxx-mips.c:16199 elfnn-aarch64.c:7332 #, c-format msgid "private flags = %lx:" msgstr "ÑобÑтвенные флаги = %lx:" -#: elf32-arm.c:14888 +#: elf32-arm.c:15078 #, c-format msgid " [interworking enabled]" msgstr " [ÑовмеÑÑ‚Ð½Ð°Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ð° включена]" -#: elf32-arm.c:14896 +#: elf32-arm.c:15086 #, c-format msgid " [VFP float format]" msgstr " [VFP формат плавающей точки]" -#: elf32-arm.c:14898 +#: elf32-arm.c:15088 #, c-format msgid " [Maverick float format]" msgstr " [Maverick формат плавающей точки]" -#: elf32-arm.c:14900 +#: elf32-arm.c:15090 #, c-format msgid " [FPA float format]" msgstr " [FPA формат плавающей точки]" -#: elf32-arm.c:14903 +#: elf32-arm.c:15093 #, c-format msgid " [floats passed in float registers]" msgstr " [чиÑла Ñ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ точкой передаютÑÑ Ð² региÑтрах Ñ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ точкой]" -#: elf32-arm.c:14906 elf32-arm.c:14992 +#: elf32-arm.c:15096 elf32-arm.c:15182 #, c-format msgid " [position independent]" msgstr " [позиционно-незавиÑимый]" -#: elf32-arm.c:14909 +#: elf32-arm.c:15099 #, c-format msgid " [new ABI]" msgstr " [новый ABI]" -#: elf32-arm.c:14912 +#: elf32-arm.c:15102 #, c-format msgid " [old ABI]" msgstr " [Ñтарый ABI]" -#: elf32-arm.c:14915 +#: elf32-arm.c:15105 #, c-format msgid " [software FP]" msgstr " [Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð½Ð°Ñ FP]" -#: elf32-arm.c:14924 +#: elf32-arm.c:15114 #, c-format msgid " [Version1 EABI]" msgstr " [ВерÑиÑ1 EABI]" -#: elf32-arm.c:14927 elf32-arm.c:14938 +#: elf32-arm.c:15117 elf32-arm.c:15128 #, c-format msgid " [sorted symbol table]" msgstr " [отÑÐ¾Ñ€Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ð°Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ñимволов]" -#: elf32-arm.c:14929 elf32-arm.c:14940 +#: elf32-arm.c:15119 elf32-arm.c:15130 #, c-format msgid " [unsorted symbol table]" msgstr " [неÑÐ¾Ñ€Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ð°Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ñимволов]" -#: elf32-arm.c:14935 +#: elf32-arm.c:15125 #, c-format msgid " [Version2 EABI]" msgstr " [ВерÑиÑ2 EABI]" -#: elf32-arm.c:14943 +#: elf32-arm.c:15133 #, c-format msgid " [dynamic symbols use segment index]" msgstr " [динамичеÑкие Ñимволы иÑпользуют Ñегментный индекÑ]" -#: elf32-arm.c:14946 +#: elf32-arm.c:15136 #, c-format msgid " [mapping symbols precede others]" msgstr " [проецируемые Ñимволы указываютÑÑ Ñ€Ð°Ð½ÑŒÑˆÐµ]" -#: elf32-arm.c:14953 +#: elf32-arm.c:15143 #, c-format msgid " [Version3 EABI]" msgstr " [ВерÑиÑ3 EABI]" -#: elf32-arm.c:14957 +#: elf32-arm.c:15147 #, c-format msgid " [Version4 EABI]" msgstr " [ВерÑиÑ4 EABI]" -#: elf32-arm.c:14961 +#: elf32-arm.c:15151 #, c-format msgid " [Version5 EABI]" msgstr " [ВерÑиÑ5 EABI]" -#: elf32-arm.c:14964 +#: elf32-arm.c:15154 #, c-format msgid " [soft-float ABI]" msgstr " [soft-float ABI]" -#: elf32-arm.c:14967 +#: elf32-arm.c:15157 #, c-format msgid " [hard-float ABI]" msgstr " [hard-float ABI]" -#: elf32-arm.c:14973 +#: elf32-arm.c:15163 #, c-format msgid " [BE8]" msgstr " [BE8]" -#: elf32-arm.c:14976 +#: elf32-arm.c:15166 #, c-format msgid " [LE8]" msgstr " [LE8]" -#: elf32-arm.c:14982 +#: elf32-arm.c:15172 #, c-format msgid " " msgstr " <нераÑÐ¿Ð¾Ð·Ð½Ð°Ð½Ð½Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ EABI>" -#: elf32-arm.c:14989 +#: elf32-arm.c:15179 #, c-format msgid " [relocatable executable]" msgstr " [перемещаемый иÑполнÑемый]" -#: elf32-arm.c:14995 +#: elf32-arm.c:15185 #, c-format msgid " [FDPIC ABI supplement]" msgstr " [дополнительный FDPIC ABI]" -#: elf32-arm.c:15000 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:7040 +#: elf32-arm.c:15190 elfnn-aarch64.c:7335 #, c-format msgid "" msgstr "<ÐераÑпознанный набор битов флага>" -#: elf32-arm.c:15117 elf32-i386.c:1529 elf32-s390.c:960 elf32-tic6x.c:2783 -#: elf32-tilepro.c:1479 elf32-xtensa.c:1029 elf64-s390.c:882 -#: elf64-x86-64.c:1865 elfxx-sparc.c:1422 elfxx-tilegx.c:1700 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:7329 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:539 +#: elf32-arm.c:15307 elf32-i386.c:1524 elf32-s390.c:925 elf32-tic6x.c:2724 +#: elf32-tilepro.c:1443 elf32-xtensa.c:1093 elf64-s390.c:847 +#: elf64-x86-64.c:1902 elfxx-sparc.c:1386 elfxx-tilegx.c:1664 +#: elfnn-aarch64.c:7606 elfnn-riscv.c:525 #, c-format msgid "%pB: bad symbol index: %d" msgstr "%pB: неправильный Ñимвольный индекÑ: %d" -#: elf32-arm.c:15508 +#: elf32-arm.c:15696 #, c-format msgid "FDPIC does not yet support %s relocation to become dynamic for executable" msgstr "FDPIC пока не поддерживает Ñоздание динамичеÑких перемещений %s Ð´Ð»Ñ Ð¸ÑполнÑемых файлов" -#: elf32-arm.c:16558 elf32-csky.c:1931 elf32-hppa.c:2090 elf32-lm32.c:1998 -#: elf32-m32r.c:2110 elf32-metag.c:2797 elf32-nds32.c:4330 elf32-or1k.c:2858 -#: elf32-ppc.c:5469 elf32-s390.c:1854 elf32-sh.c:2975 elf32-tic6x.c:3252 -#: elf32-tilepro.c:2245 elf64-ppc.c:9023 elf64-s390.c:1791 elfxx-sparc.c:2435 -#: elfxx-tilegx.c:2491 elfxx-x86.c:571 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:8677 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:1142 -#, c-format -msgid "%pB: dynamic relocation against `%pT' in read-only section `%pA'\n" -msgstr "%pB: динамичеÑкое перемещение Ñ Â«%pT» в разделе только Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Â«%pA»\n" - -#: elf32-arm.c:16854 +#: elf32-arm.c:16939 #, c-format msgid "errors encountered processing file %pB" msgstr "при обработке файла %pB обнаружены ошибки" -#: elf32-arm.c:17301 elflink.c:12556 elflink.c:12603 +#: elf32-arm.c:17326 elflink.c:12818 elflink.c:12865 #, c-format msgid "could not find section %s" msgstr "невозможно найти раздел %s" -#: elf32-arm.c:18512 +#: elf32-arm.c:18550 #, c-format msgid "%pB: error: Cortex-A8 erratum stub is allocated in unsafe location" msgstr "%pB: ошибка: заглушка Ð´Ð»Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ¸ Cortex-A8 раÑположена в небезопаÑном меÑте" #. There's not much we can do apart from complain if this #. happens. -#: elf32-arm.c:18539 +#: elf32-arm.c:18577 #, c-format msgid "%pB: error: Cortex-A8 erratum stub out of range (input file too large)" msgstr "%pB: ошибка: заглушка Ð´Ð»Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ¸ Cortex-A8 находитÑÑ Ð²Ð½Ðµ диапазона (Ñлишком большой входной файл)" -#: elf32-arm.c:19366 elf32-arm.c:19388 +#: elf32-arm.c:19404 elf32-arm.c:19426 #, c-format msgid "%pB: error: VFP11 veneer out of range" msgstr "%pB: ошибка: Ñклейка VFP11 вне диапазона" -#: elf32-arm.c:19439 +#: elf32-arm.c:19477 #, c-format msgid "%pB(%#): error: cannot create STM32L4XX veneer; jump out of range by % bytes; cannot encode branch instruction" msgstr "%pB(%#): ошибка: невозможно Ñоздать Ñклейку STM32L4XX; прыжок выходит за диапазон % байт; невозможно закодировать инÑтрукцию ветвлениÑ" -#: elf32-arm.c:19478 +#: elf32-arm.c:19516 #, c-format msgid "%pB: error: cannot create STM32L4XX veneer" msgstr "%pB: ошибка: невозможно Ñоздать Ñклейку STM32L4XX" -#: elf32-arm.c:20567 +#: elf32-arm.c:20600 #, c-format msgid "error: %pB is already in final BE8 format" msgstr "ошибка: %pB уже в конечном формате BE8" -#: elf32-arm.c:20643 +#: elf32-arm.c:20676 #, c-format msgid "error: source object %pB has EABI version %d, but target %pB has EABI version %d" msgstr "ошибка: объект-иÑточник %pB имеет верÑию EABI %d, а цель %pB имеет верÑию EABI %d" -#: elf32-arm.c:20658 +#: elf32-arm.c:20691 #, c-format msgid "error: %pB is compiled for APCS-%d, whereas target %pB uses APCS-%d" msgstr "ошибка: %pB Ñкомпилирован Ð´Ð»Ñ APCS-%d, в то Ð²Ñ€ÐµÐ¼Ñ ÐºÐ°Ðº цель %pB иÑпользует APCS-%d" -#: elf32-arm.c:20668 +#: elf32-arm.c:20701 #, c-format msgid "error: %pB passes floats in float registers, whereas %pB passes them in integer registers" msgstr "ошибка: %pB передаёт чиÑла Ñ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ точкой в региÑтрах Ñ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ точкой, в то Ð²Ñ€ÐµÐ¼Ñ ÐºÐ°Ðº %pB передаёт их в целочиÑленных региÑтрах" -#: elf32-arm.c:20672 +#: elf32-arm.c:20705 #, c-format msgid "error: %pB passes floats in integer registers, whereas %pB passes them in float registers" msgstr "ошибка: %pB передаёт чиÑла в целочиÑленных региÑтрах, в то Ð²Ñ€ÐµÐ¼Ñ ÐºÐ°Ðº %pB передаёт их в региÑтрах Ñ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ точкой" -#: elf32-arm.c:20682 elf32-arm.c:20686 elf32-arm.c:20696 +#: elf32-arm.c:20715 elf32-arm.c:20719 elf32-arm.c:20729 #, c-format msgid "error: %pB uses %s instructions, whereas %pB does not" msgstr "ошибка: %pB иÑпользует инÑтрукции %s, в то Ð²Ñ€ÐµÐ¼Ñ ÐºÐ°Ðº %pB нет" -#: elf32-arm.c:20700 +#: elf32-arm.c:20733 #, c-format msgid "error: %pB does not use %s instructions, whereas %pB does" msgstr "ошибка: %pB не иÑпользует инÑтрукции %s, в то Ð²Ñ€ÐµÐ¼Ñ ÐºÐ°Ðº %pB иÑпользует" -#: elf32-arm.c:20719 +#: elf32-arm.c:20752 #, c-format msgid "error: %pB uses software FP, whereas %pB uses hardware FP" msgstr "ошибка: %pB иÑпользует программную FP, в то Ð²Ñ€ÐµÐ¼Ñ ÐºÐ°Ðº %pB иÑпользует аппаратную FP" -#: elf32-arm.c:20723 +#: elf32-arm.c:20756 #, c-format msgid "error: %pB uses hardware FP, whereas %pB uses software FP" msgstr "ошибка: %pB иÑпользует аппаратную FP, в то Ð²Ñ€ÐµÐ¼Ñ ÐºÐ°Ðº %pB иÑпользует программную FP" -#: elf32-arm.c:20737 +#: elf32-arm.c:20770 #, c-format msgid "warning: %pB supports interworking, whereas %pB does not" msgstr "предупреждение: %pB поддерживает ÑовмеÑтную работу, в то Ð²Ñ€ÐµÐ¼Ñ ÐºÐ°Ðº %pB нет" -#: elf32-arm.c:20743 +#: elf32-arm.c:20776 #, c-format msgid "warning: %pB does not support interworking, whereas %pB does" msgstr "предупреждение: %pB не поддерживает ÑовмеÑтную работу, в то Ð²Ñ€ÐµÐ¼Ñ ÐºÐ°Ðº %pB поддерживает" -#: elf32-avr.c:1518 elf32-bfin.c:3135 elf32-cris.c:2041 elf32-epiphany.c:577 -#: elf32-fr30.c:602 elf32-frv.c:4057 elf32-ft32.c:502 elf32-ip2k.c:1493 -#: elf32-iq2000.c:701 elf32-m32c.c:632 elf32-mep.c:534 elf32-metag.c:1998 -#: elf32-moxie.c:296 elf32-msp430.c:1366 elf32-mt.c:406 elf32-or1k.c:1767 -#: elf32-tilepro.c:3514 elf32-v850.c:2299 elf32-visium.c:689 -#: elf32-xstormy16.c:939 elf64-mmix.c:1549 elfxx-tilegx.c:3878 +#: elf32-avr.c:1516 elf32-bfin.c:3134 elf32-cris.c:2041 elf32-epiphany.c:573 +#: elf32-fr30.c:602 elf32-frv.c:4056 elf32-ft32.c:502 elf32-ip2k.c:1488 +#: elf32-iq2000.c:699 elf32-m32c.c:632 elf32-mep.c:534 elf32-metag.c:1994 +#: elf32-moxie.c:296 elf32-msp430.c:1375 elf32-mt.c:406 elf32-or1k.c:1825 +#: elf32-tilepro.c:3388 elf32-v850.c:2298 elf32-visium.c:688 +#: elf32-xstormy16.c:937 elf64-bpf.c:521 elf64-mmix.c:1549 elfxx-tilegx.c:3752 msgid "internal error: dangerous relocation" msgstr "внутреннÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ°: опаÑное перемещение" -#: elf32-avr.c:3327 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:3126 +#: elf32-avr.c:3327 elfnn-aarch64.c:3221 #, c-format msgid "cannot create stub entry %s" msgstr "невозможно Ñоздать Ñлемент заглушки %s" -#: elf32-bfin.c:106 elf32-bfin.c:362 +#: elf32-bfin.c:107 elf32-bfin.c:363 msgid "relocation should be even number" msgstr "значение Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ð¾ быть чётным чиÑлом" -#: elf32-bfin.c:1585 +#: elf32-bfin.c:1584 #, c-format msgid "%pB(%pA+%#): unresolvable relocation against symbol `%s'" msgstr "%pB(%pA+%#): неразрешимое перемещение Ñ Ñимволом «%s»" -#: elf32-bfin.c:1617 elf32-i386.c:3449 elf32-m68k.c:3976 elf32-s390.c:3269 -#: elf64-s390.c:3219 elf64-x86-64.c:3896 +#: elf32-bfin.c:1616 elf32-i386.c:3443 elf32-m68k.c:4008 elf32-s390.c:3140 +#: elf64-s390.c:3089 elf64-x86-64.c:4112 #, c-format msgid "%pB(%pA+%#): reloc against `%s': error %d" msgstr "%pB(%pA+%#): перемещение Ñ Â«%s»: ошибка %d" -#: elf32-bfin.c:2638 +#: elf32-bfin.c:2641 #, c-format msgid "%pB: relocation at `%pA+%#' references symbol `%s' with nonzero addend" msgstr "%pB: перемещение по адреÑу «%pA+%#» ÑÑылаетÑÑ Ð½Ð° Ñимвол «%s» Ñ Ð½ÐµÐ½ÑƒÐ»ÐµÐ²Ñ‹Ð¼ добавлением" -#: elf32-bfin.c:2655 +#: elf32-bfin.c:2658 msgid "relocation references symbol not defined in the module" msgstr "перемещение указывает на неопределённый Ñимвол в модуле" -#: elf32-bfin.c:2752 +#: elf32-bfin.c:2755 msgid "R_BFIN_FUNCDESC references dynamic symbol with nonzero addend" msgstr "R_BFIN_FUNCDESC указывает на динамичеÑкий Ñимвол Ñ Ð½ÐµÐ½ÑƒÐ»ÐµÐ²Ñ‹Ð¼ добавлением" -#: elf32-bfin.c:2793 elf32-bfin.c:2916 +#: elf32-bfin.c:2795 elf32-bfin.c:2916 msgid "cannot emit fixups in read-only section" msgstr "невозможно Ñгенерировать меÑÑ‚Ð¾Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð² разделе только Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ" -#: elf32-bfin.c:2824 elf32-bfin.c:2954 elf32-lm32.c:1049 elf32-sh.c:4511 +#: elf32-bfin.c:2825 elf32-bfin.c:2953 elf32-lm32.c:1006 elf32-sh.c:4389 msgid "cannot emit dynamic relocations in read-only section" msgstr "невозможно Ñгенерировать динамичеÑкие Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð² разделе только Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ" -#: elf32-bfin.c:2874 +#: elf32-bfin.c:2875 msgid "R_BFIN_FUNCDESC_VALUE references dynamic symbol with nonzero addend" msgstr "R_BFIN_FUNCDESC_VALUE указывает на динамичеÑкий Ñимвол Ñ Ð½ÐµÐ½ÑƒÐ»ÐµÐ²Ñ‹Ð¼ добавлением" -#: elf32-bfin.c:3039 +#: elf32-bfin.c:3038 msgid "relocations between different segments are not supported" msgstr "Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð¼ÐµÐ¶Ð´Ñƒ различными Ñегментами не поддерживаютÑÑ" -#: elf32-bfin.c:3040 +#: elf32-bfin.c:3039 msgid "warning: relocation references a different segment" msgstr "предупреждение: перемещение ÑÑылаетÑÑ Ð½Ð° другой Ñегмент" -#: elf32-bfin.c:4787 elf32-frv.c:6603 +#: elf32-bfin.c:4770 elf32-frv.c:6584 #, c-format msgid "%pB: cannot link non-fdpic object file into fdpic executable" msgstr "%pB: невозможно Ñкомпоновать объектный файл, не ÑвлÑющийÑÑ fdpic, в иÑполнÑемый fdpic" -#: elf32-bfin.c:4791 elf32-frv.c:6607 +#: elf32-bfin.c:4774 elf32-frv.c:6588 #, c-format msgid "%pB: cannot link fdpic object file into non-fdpic executable" msgstr "%pB: невозможно Ñкомпоновать объектный файл, ÑвлÑющийÑÑ fdpic, в иÑполнÑемый не fdpic" -#: elf32-bfin.c:4941 +#: elf32-bfin.c:4924 #, c-format msgid "*** check this relocation %s" msgstr "*** проверьте Ñто перемещение %s" -#: elf32-bfin.c:5057 +#: elf32-bfin.c:5040 msgid "the bfin target does not currently support the generation of copy relocations" msgstr "Ð´Ð»Ñ Ñ†ÐµÐ»Ð¸ bfin пока не поддерживаетÑÑ Ð³ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ñ ÐºÐ¾Ð¿Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¹" -#: elf32-bfin.c:5351 elf32-cr16.c:2803 elf32-m68k.c:4390 +#: elf32-bfin.c:5334 elf32-cr16.c:2731 elf32-m68k.c:4422 msgid "unsupported relocation type" msgstr "неподдерживаемый тип перемещениÑ" @@ -2044,16 +2133,16 @@ msgstr "%pB, раздел %pA: нет PLT Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ %s у Ñимвола «%s»" #: elf32-cris.c:1193 elf32-cris.c:1326 elf32-cris.c:1591 elf32-cris.c:1674 -#: elf32-cris.c:1827 elf32-tic6x.c:2619 +#: elf32-cris.c:1827 elf32-tic6x.c:2560 msgid "[whose name is lost]" msgstr "[чьё Ð¸Ð¼Ñ Ð¿Ð¾Ñ‚ÐµÑ€Ñно]" -#: elf32-cris.c:1311 elf32-tic6x.c:2603 +#: elf32-cris.c:1311 elf32-tic6x.c:2544 #, c-format msgid "%pB, section %pA: relocation %s with non-zero addend % against local symbol" msgstr "%pB, раздел %pA: перемещение %s Ñ Ð½ÐµÐ½ÑƒÐ»ÐµÐ²Ñ‹Ð¼ добавлением % у локального Ñимвола" -#: elf32-cris.c:1320 elf32-cris.c:1668 elf32-cris.c:1821 elf32-tic6x.c:2612 +#: elf32-cris.c:1320 elf32-cris.c:1668 elf32-cris.c:1821 elf32-tic6x.c:2553 #, c-format msgid "%pB, section %pA: relocation %s with non-zero addend % against symbol `%s'" msgstr "%pB, раздел %pA: перемещение %s Ñ Ð½ÐµÐ½ÑƒÐ»ÐµÐ²Ñ‹Ð¼ добавлением % у Ñимвола «%s»" @@ -2109,71 +2198,71 @@ msgid "%pB, section %pA: relocation %s should not be used in a shared object; recompile with -fPIC" msgstr "%pB, раздел %pA: перемещение %s не должно иÑпользоватьÑÑ Ð² общем объекте; перекомпилируйте Ñ -fPIC" -#: elf32-cris.c:3747 +#: elf32-cris.c:3700 #, c-format msgid "%pB, section `%pA', to symbol `%s': relocation %s should not be used in a shared object; recompile with -fPIC" msgstr "%pB, раздел «%pA», к Ñимволу «%s»: перемещение %s не должно иÑпользоватьÑÑ Ð² общем объекте; перекомпилируйте Ñ -fPIC" -#: elf32-cris.c:3860 +#: elf32-cris.c:3812 msgid "unexpected machine number" msgstr "неожидаемое машинное чиÑло" -#: elf32-cris.c:3911 +#: elf32-cris.c:3864 #, c-format msgid " [symbols have a _ prefix]" msgstr " [Ñимволы Ñодержат Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ _]" -#: elf32-cris.c:3914 +#: elf32-cris.c:3867 #, c-format msgid " [v10 and v32]" msgstr " [v10 и v32]" -#: elf32-cris.c:3917 +#: elf32-cris.c:3870 #, c-format msgid " [v32]" msgstr " [v32]" -#: elf32-cris.c:3961 +#: elf32-cris.c:3914 #, c-format msgid "%pB: uses _-prefixed symbols, but writing file with non-prefixed symbols" msgstr "%pB: иÑпользуютÑÑ Ñимволы Ñ Ð¿Ñ€ÐµÑ„Ð¸ÐºÑом _, но в файл запиÑываютÑÑ Ñимволы без префикÑов" -#: elf32-cris.c:3962 +#: elf32-cris.c:3915 #, c-format msgid "%pB: uses non-prefixed symbols, but writing file with _-prefixed symbols" msgstr "%pB: иÑпользуютÑÑ Ñимволы без префикÑа _, но в файл запиÑываютÑÑ Ñимволы Ñ Ð¿Ñ€ÐµÑ„Ð¸ÐºÑом _" -#: elf32-cris.c:3981 +#: elf32-cris.c:3934 #, c-format msgid "%pB contains CRIS v32 code, incompatible with previous objects" msgstr "%pB Ñодержит код CRIS v32, который не ÑовмеÑтим Ñ Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ð¼Ð¸ объектами" -#: elf32-cris.c:3983 +#: elf32-cris.c:3936 #, c-format msgid "%pB contains non-CRIS-v32 code, incompatible with previous objects" msgstr "%pB Ñодержит код не CRIS v32, который не ÑовмеÑтим Ñ Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ð¼Ð¸ объектами" -#: elf32-csky.c:2066 +#: elf32-csky.c:2022 msgid "GOT table size out of range" msgstr "размер таблицы GOT выходит за границы" -#: elf32-csky.c:2917 +#: elf32-csky.c:2802 #, c-format msgid "warning: unrecognized arch eflag '%#lx'" msgstr "предупреждение: нераÑпознанный архитектурный eflag «%#lx»" -#: elf32-csky.c:2977 +#: elf32-csky.c:2862 #, c-format msgid "%pB: machine flag conflict with target" msgstr "%pB: машинный флаг конфликтует Ñ Ñ†ÐµÐ»ÑŒÑŽ" -#: elf32-csky.c:2990 +#: elf32-csky.c:2875 #, c-format msgid "warning: file %pB's arch flag ck%s conflicts with target ck%s, using ck%s" msgstr "предупреждение: файловый флаг %pB архитектуры ck%s конфликтует Ñ ck%s цели, иÑпользуем ck%s" #. The r_type is error, not support it. -#: elf32-csky.c:4225 elf32-i386.c:351 +#: elf32-csky.c:4118 elf32-i386.c:350 #, c-format msgid "%pB: unsupported relocation type: %#x" msgstr "%pB: неподдерживаемый тип Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ : %#x" @@ -2189,7 +2278,7 @@ msgstr "прыжок (PC rel26) в раздел (%s) не поддерживаетÑÑ" #. Only if it's not an unresolved symbol. -#: elf32-epiphany.c:573 elf32-ip2k.c:1489 +#: elf32-epiphany.c:569 elf32-ip2k.c:1484 msgid "unsupported relocation between data/insn address spaces" msgstr "неподдерживаемое перемещение между адреÑным проÑтранÑтвом данных/инÑтрукций" @@ -2197,96 +2286,96 @@ msgid "relocation requires zero addend" msgstr "Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ñ‚Ñ€ÐµÐ±ÑƒÐµÑ‚ÑÑ Ð½ÑƒÐ»ÐµÐ²Ð¾Ðµ добавление" -#: elf32-frv.c:2829 +#: elf32-frv.c:2832 #, c-format msgid "%H: relocation to `%s+%v' may have caused the error above\n" msgstr "%H: перемещение в «%s+%v» может быть вызвано предыдущей ошибкой\n" -#: elf32-frv.c:2846 +#: elf32-frv.c:2849 msgid "%H: relocation references symbol not defined in the module\n" msgstr "%H: перемещение указывает на неопределённый Ñимвол в модуле\n" -#: elf32-frv.c:2922 +#: elf32-frv.c:2925 msgid "%H: R_FRV_GETTLSOFF not applied to a call instruction\n" msgstr "%H: R_FRV_GETTLSOFF не применимо Ð´Ð»Ñ Ð¸Ð½Ñтрукции call\n" -#: elf32-frv.c:2963 +#: elf32-frv.c:2966 msgid "%H: R_FRV_GOTTLSDESC12 not applied to an lddi instruction\n" msgstr "%H R_FRV_GOTTLSDESC12 не применимо Ð´Ð»Ñ Ð¸Ð½Ñтрукции lddi\n" -#: elf32-frv.c:3034 +#: elf32-frv.c:3037 msgid "%H: R_FRV_GOTTLSDESCHI not applied to a sethi instruction\n" msgstr "%H: R_FRV_GOTTLSDESCHI не применимо Ð´Ð»Ñ Ð¸Ð½Ñтрукции sethi\n" -#: elf32-frv.c:3071 +#: elf32-frv.c:3074 msgid "%H: R_FRV_GOTTLSDESCLO not applied to a setlo or setlos instruction\n" msgstr "%H: R_FRV_GOTTLSDESCLO не применимо Ð´Ð»Ñ Ð¸Ð½Ñтрукции setlo или setlos\n" -#: elf32-frv.c:3118 +#: elf32-frv.c:3121 msgid "%H: R_FRV_TLSDESC_RELAX not applied to an ldd instruction\n" msgstr "%H: R_FRV_TLSDESC_RELAX не применимо Ð´Ð»Ñ Ð¸Ð½Ñтрукции ldd\n" -#: elf32-frv.c:3202 +#: elf32-frv.c:3205 msgid "%H: R_FRV_GETTLSOFF_RELAX not applied to a calll instruction\n" msgstr "%H: R_FRV_GETTLSOFF_RELAX не применимо Ð´Ð»Ñ Ð¸Ð½Ñтрукции calll\n" -#: elf32-frv.c:3256 +#: elf32-frv.c:3259 msgid "%H: R_FRV_GOTTLSOFF12 not applied to an ldi instruction\n" msgstr "%H: R_FRV_GOTTLSOFF12 не применимо Ð´Ð»Ñ Ð¸Ð½Ñтрукции ldi\n" -#: elf32-frv.c:3286 +#: elf32-frv.c:3289 msgid "%H: R_FRV_GOTTLSOFFHI not applied to a sethi instruction\n" msgstr "%H: R_FRV_GOTTLSOFFHI не применимо Ð´Ð»Ñ Ð¸Ð½Ñтрукции sethi\n" -#: elf32-frv.c:3315 +#: elf32-frv.c:3318 msgid "%H: R_FRV_GOTTLSOFFLO not applied to a setlo or setlos instruction\n" msgstr "%H: R_FRV_GOTTLSOFFLO не применимо Ð´Ð»Ñ Ð¸Ð½Ñтрукции setlo или setlos\n" -#: elf32-frv.c:3345 +#: elf32-frv.c:3348 msgid "%H: R_FRV_TLSOFF_RELAX not applied to an ld instruction\n" msgstr "%H: R_FRV_TLSOFF_RELAX не применимо Ð´Ð»Ñ Ð¸Ð½Ñтрукции ld\n" -#: elf32-frv.c:3390 +#: elf32-frv.c:3393 msgid "%H: R_FRV_TLSMOFFHI not applied to a sethi instruction\n" msgstr "%H: R_FRV_TLSMOFFHI не применимо Ð´Ð»Ñ Ð¸Ð½Ñтрукции sethi\n" -#: elf32-frv.c:3417 +#: elf32-frv.c:3420 msgid "R_FRV_TLSMOFFLO not applied to a setlo or setlos instruction\n" msgstr "R_FRV_TLSMOFFLO не применимо Ð´Ð»Ñ Ð¸Ð½Ñтрукции setlo или setlos\n" -#: elf32-frv.c:3538 elf32-frv.c:3660 +#: elf32-frv.c:3541 elf32-frv.c:3661 msgid "%H: %s references dynamic symbol with nonzero addend\n" msgstr "%H: %s указывает на динамичеÑкий Ñимвол Ñ Ð½ÐµÐ½ÑƒÐ»ÐµÐ²Ñ‹Ð¼ добавлением\n" -#: elf32-frv.c:3580 elf32-frv.c:3703 +#: elf32-frv.c:3582 elf32-frv.c:3703 msgid "%H: cannot emit fixups in read-only section\n" msgstr "%H: невозможно Ñгенерировать меÑÑ‚Ð¾Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð² разделе только Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ\n" -#: elf32-frv.c:3611 elf32-frv.c:3746 +#: elf32-frv.c:3612 elf32-frv.c:3745 msgid "%H: cannot emit dynamic relocations in read-only section\n" msgstr "%H: невозможно Ñгенерировать динамичеÑкие Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð² разделе только Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ\n" -#: elf32-frv.c:3918 +#: elf32-frv.c:3917 #, c-format msgid "%H: reloc against `%s' references a different segment\n" msgstr "%H: перемещение указывает на ÑÑылки «%s» другого Ñегмента\n" -#: elf32-frv.c:4069 +#: elf32-frv.c:4068 #, c-format msgid "%H: reloc against `%s': %s\n" msgstr "%H: перемещение указывает на «%s»: %s\n" -#: elf32-frv.c:6514 +#: elf32-frv.c:6495 #, c-format msgid "%pB: compiled with %s and linked with modules that use non-pic relocations" msgstr "%pB: Ñкомпилирован Ñ %s и Ñкомпонован Ñ Ð¼Ð¾Ð´ÑƒÐ»Ñми, в которых иÑпользуютÑÑ Ð½Ðµ-pic перемещениÑ" -#: elf32-frv.c:6568 elf32-iq2000.c:832 elf32-m32c.c:876 +#: elf32-frv.c:6549 elf32-iq2000.c:830 elf32-m32c.c:876 #, c-format msgid "%pB: compiled with %s and linked with modules compiled with %s" msgstr "%pB: Ñкомпилирован Ñ %s и Ñкомпонован Ñ Ð¼Ð¾Ð´ÑƒÐ»Ñми, Ñкомпилированными Ñ %s" -#: elf32-frv.c:6581 +#: elf32-frv.c:6562 #, c-format msgid "%pB: uses different unknown e_flags (%#x) fields than previous modules (%#x)" msgstr "%pB: иÑпользуютÑÑ Ð½ÐµÐ¸Ð·Ð²ÐµÑтные Ð¿Ð¾Ð»Ñ e_flags (%#x), отличающиеÑÑ Ð¾Ñ‚ иÑпользованных в предыдущих модулÑÑ… (%#x)" @@ -2296,137 +2385,140 @@ msgid "%pB: relocations in generic ELF (EM: %d)" msgstr "%pB: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð² универÑальном ELF (EM: %d)" -#: elf32-hppa.c:834 elf32-hppa.c:3511 +#: elf32-hppa.c:763 elf32-hppa.c:844 elf64-ppc.c:11859 +msgid "%F%P: Could not assign %pA to an output section. Retry without --enable-non-contiguous-regions.\n" +msgstr "%F%P: Ðевозможно назначить %pA выходному разделу. Повторите без --enable-non-contiguous-regions.\n" + +#: elf32-hppa.c:865 elf32-hppa.c:3407 #, c-format msgid "%pB(%pA+%#): cannot reach %s, recompile with -ffunction-sections" msgstr "%pB(%pA+%#): невозможно доÑтичь %s, перекомпилируйте Ñ -ffunction-sections" -#: elf32-hppa.c:1248 +#: elf32-hppa.c:1243 #, c-format msgid "%pB: relocation %s can not be used when making a shared object; recompile with -fPIC" msgstr "%pB: перемещение %s не может иÑпользоватьÑÑ Ð¿Ñ€Ð¸ Ñоздании общего объекта; перекомпилируйте Ñ -fPIC" -#: elf32-hppa.c:2688 +#: elf32-hppa.c:2584 #, c-format msgid "%pB: duplicate export stub %s" msgstr "%pB: повторный ÑкÑпорт заглушки %s" -#: elf32-hppa.c:3344 +#: elf32-hppa.c:3240 #, c-format msgid "%pB(%pA+%#): %s fixup for insn %#x is not supported in a non-shared link" msgstr "%pB(%pA+%#): меÑтоположение %s Ð´Ð»Ñ Ð¸Ð½Ñтрукции %#x не поддерживаетÑÑ Ð² не общей ÑÑылке" -#: elf32-hppa.c:4140 +#: elf32-hppa.c:4036 #, c-format msgid "%s has both normal and TLS relocs" msgstr "%s Ñодержит обычные Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð¸ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ TLS" -#: elf32-hppa.c:4158 +#: elf32-hppa.c:4054 #, c-format msgid "%pB:%s has both normal and TLS relocs" msgstr "%pB:%s Ñодержит обычные Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð¸ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ TLS" -#: elf32-hppa.c:4217 +#: elf32-hppa.c:4113 #, c-format msgid "%pB(%pA+%#): cannot handle %s for %s" msgstr "%pB(%pA+%#): невозможно обработать %s Ð´Ð»Ñ %s" -#: elf32-hppa.c:4521 +#: elf32-hppa.c:4417 msgid ".got section not immediately after .plt section" msgstr "раздел .got не может ÑтоÑÑ‚ÑŒ Ñразу поÑле раздела .plt" -#: elf32-i386.c:1178 elf64-x86-64.c:1377 +#: elf32-i386.c:1169 elf64-x86-64.c:1382 #, c-format msgid "%pB: TLS transition from %s to %s against `%s' at %# in section `%pA' failed" msgstr "%pB: TLS-переход из %s в %s Ð´Ð»Ñ Â«%s» по адреÑу %# в разделе «%pA» завершилÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ¾Ð¹" -#: elf32-i386.c:1269 +#: elf32-i386.c:1272 #, c-format msgid "%pB: direct GOT relocation R_386_GOT32X against `%s' without base register can not be used when making a shared object" msgstr "%pB: прÑмое GOT перемещение R_386_GOT32X c «%s» без базового региÑтра не может иÑпользоватьÑÑ Ð¿Ñ€Ð¸ Ñоздании общего объекта" -#: elf32-i386.c:1726 elf32-s390.c:1188 elf32-sh.c:5662 elf32-tilepro.c:1592 -#: elf32-xtensa.c:1203 elf64-s390.c:1120 elfxx-sparc.c:1591 -#: elfxx-tilegx.c:1805 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:451 +#: elf32-i386.c:1721 elf32-s390.c:1153 elf32-sh.c:5494 elf32-tilepro.c:1556 +#: elf32-xtensa.c:1265 elf64-s390.c:1085 elfxx-sparc.c:1555 +#: elfxx-tilegx.c:1769 elfnn-riscv.c:437 #, c-format msgid "%pB: `%s' accessed both as normal and thread local symbol" msgstr "%pB: «%s» доÑтупен как обычный и как локальный Ð´Ð»Ñ Ð½Ð¸Ñ‚Ð¸ Ñимвол" -#: elf32-i386.c:1798 +#: elf32-i386.c:1793 #, c-format msgid "%pB: unsupported non-PIC call to IFUNC `%s'" msgstr "%pB: неподдерживаемый не PIC вызов IFUNC «%s»" -#: elf32-i386.c:2379 elf64-x86-64.c:2670 +#: elf32-i386.c:2373 elf64-x86-64.c:2721 #, c-format msgid "%pB: relocation %s against STT_GNU_IFUNC symbol `%s' isn't supported" msgstr "%pB: перемещение %s Ñ STT_GNU_IFUNC Ñимволом «%s» не поддерживаетÑÑ" -#: elf32-i386.c:2412 elf32-i386.c:3660 elf32-i386.c:3801 elf64-x86-64.c:2727 -#: elf64-x86-64.c:4069 elf64-x86-64.c:4225 +#: elf32-i386.c:2406 elf32-i386.c:3654 elf32-i386.c:3795 elf64-x86-64.c:2778 +#: elf64-x86-64.c:4285 elf64-x86-64.c:4441 #, c-format msgid "Local IFUNC function `%s' in %pB\n" msgstr "Ð›Ð¾ÐºÐ°Ð»ÑŒÐ½Ð°Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ IFUNC «%s» в %pB\n" -#: elf32-i386.c:2569 +#: elf32-i386.c:2563 #, c-format msgid "%pB: direct GOT relocation %s against `%s' without base register can not be used when making a shared object" msgstr "%pB: прÑмое GOT перемещение %s c «%s» без базового региÑтра не может иÑпользоватьÑÑ Ð¿Ñ€Ð¸ Ñоздании общего объекта" -#: elf32-i386.c:2604 elf64-x86-64.c:2919 +#: elf32-i386.c:2598 elf64-x86-64.c:2977 msgid "hidden symbol" msgstr "Ñкрытый Ñимвол" -#: elf32-i386.c:2607 elf64-x86-64.c:2922 +#: elf32-i386.c:2601 elf64-x86-64.c:2980 msgid "internal symbol" msgstr "внутренний Ñимвол" -#: elf32-i386.c:2610 elf64-x86-64.c:2925 +#: elf32-i386.c:2604 elf64-x86-64.c:2983 msgid "protected symbol" msgstr "защищённый Ñимвол" -#: elf32-i386.c:2613 elf64-x86-64.c:2928 +#: elf32-i386.c:2607 elf64-x86-64.c:2986 msgid "symbol" msgstr "Ñимвол" -#: elf32-i386.c:2619 +#: elf32-i386.c:2613 #, c-format msgid "%pB: relocation R_386_GOTOFF against undefined %s `%s' can not be used when making a shared object" msgstr "%pB: перемещение R_386_GOTOFF Ð´Ð»Ñ Ð½ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ð¾Ð³Ð¾ %s «%s» не может иÑпользоватьÑÑ Ð¿Ñ€Ð¸ Ñоздании общего объекта" -#: elf32-i386.c:2632 +#: elf32-i386.c:2626 #, c-format msgid "%pB: relocation R_386_GOTOFF against protected %s `%s' can not be used when making a shared object" msgstr "%pB: перемещение R_386_GOTOFF Ð´Ð»Ñ Ð·Ð°Ñ‰Ð¸Ñ‰Ñ‘Ð½Ð½Ð¾Ð¹ %s «%s» не может иÑпользоватьÑÑ Ð¿Ñ€Ð¸ Ñоздании общего объекта" -#: elf32-ip2k.c:856 elf32-ip2k.c:862 elf32-ip2k.c:929 elf32-ip2k.c:935 +#: elf32-ip2k.c:855 elf32-ip2k.c:861 elf32-ip2k.c:928 elf32-ip2k.c:934 msgid "ip2k relaxer: switch table without complete matching relocation information." msgstr "ip2k relaxer: таблица переключений без полного ÑÐ¾Ð²Ð¿Ð°Ð´ÐµÐ½Ð¸Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ о перемещении." -#: elf32-ip2k.c:879 elf32-ip2k.c:962 +#: elf32-ip2k.c:878 elf32-ip2k.c:961 msgid "ip2k relaxer: switch table header corrupt." msgstr "ip2k relaxer: иÑпорчен заголовок у таблицы переключений." -#: elf32-ip2k.c:1302 +#: elf32-ip2k.c:1297 #, c-format msgid "ip2k linker: missing page instruction at %# (dest = %#)" msgstr "компоновщик ip2k: отÑутÑтвует Ñтраница инÑтрукций по адреÑу %# (назнач = %#)" -#: elf32-ip2k.c:1321 +#: elf32-ip2k.c:1316 #, c-format msgid "ip2k linker: redundant page instruction at %# (dest = %#)" msgstr "компоновщик ip2k: повторÑющаÑÑÑ Ñтраница инÑтрукций по адреÑу %# (назнач = %#)" -#: elf32-lm32.c:651 elf32-nios2.c:3141 +#: elf32-lm32.c:608 elf32-nios2.c:3148 msgid "global pointer relative relocation when _gp not defined" msgstr "глобальный указатель отноÑительно перемещениÑ, но _gp не определена" -#: elf32-lm32.c:706 elf32-nios2.c:3578 +#: elf32-lm32.c:663 elf32-nios2.c:3585 msgid "global pointer relative address out of range" msgstr "глобальный указатель отноÑительно адреÑа вне диапазона" -#: elf32-lm32.c:1002 +#: elf32-lm32.c:959 #, c-format msgid "internal error: addend should be zero for %s" msgstr "внутреннÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ°: добавление должно быть нулём Ð´Ð»Ñ %s" @@ -2435,136 +2527,141 @@ msgid "SDA relocation when _SDA_BASE_ not defined" msgstr "перемещение SDA, но _SDA_BASE_ не определена" -#: elf32-m32r.c:2984 elf32-microblaze.c:1101 elf32-microblaze.c:1149 +#: elf32-m32r.c:2799 elf32-microblaze.c:1097 elf32-microblaze.c:1145 #, c-format msgid "%pB: the target (%s) of an %s relocation is in the wrong section (%pA)" msgstr "%pB: цель (%s) Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ %s в ошибочном разделе (%pA)" -#: elf32-m32r.c:3487 +#: elf32-m32r.c:3302 #, c-format msgid "%pB: instruction set mismatch with previous modules" msgstr "%pB: набор инÑтрукций не Ñовпадает Ñ Ð½Ð°Ð±Ð¾Ñ€Ð¾Ð¼ у предыдущих модулей" -#: elf32-m32r.c:3508 elf32-nds32.c:6992 +#: elf32-m32r.c:3323 elf32-nds32.c:6855 #, c-format msgid "private flags = %lx" msgstr "ÑобÑтвенные флаги = %lx" -#: elf32-m32r.c:3513 +#: elf32-m32r.c:3328 #, c-format msgid ": m32r instructions" msgstr ": инÑтрукции m32r" -#: elf32-m32r.c:3514 +#: elf32-m32r.c:3329 #, c-format msgid ": m32rx instructions" msgstr ": инÑтрукции m32rx" -#: elf32-m32r.c:3515 +#: elf32-m32r.c:3330 #, c-format msgid ": m32r2 instructions" msgstr ": инÑтрукции m32r2" -#: elf32-m68hc1x.c:1116 +#: elf32-m68hc1x.c:1136 #, c-format msgid "reference to the far symbol `%s' using a wrong relocation may result in incorrect execution" msgstr "ÑÑылка на дальний Ñимвол «%s» Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ ошибочного Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð¶ÐµÑ‚ привеÑти к неправильному выполнению" -#: elf32-m68hc1x.c:1150 +#: elf32-m68hc1x.c:1167 #, c-format msgid "XGATE address (%lx) is not within shared RAM(0xE000-0xFFFF), therefore you must manually offset the address, and possibly manage the page, in your code." msgstr "ÐÐ´Ñ€ÐµÑ XGATE (%lx) находитÑÑ Ð²Ð½Ðµ общей оперативной памÑти (0xE000-0xFFFF), поÑтому вы должны вручную указывать Ð°Ð´Ñ€ÐµÑ ÑÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð¸, возможно, управлÑÑ‚ÑŒ Ñтраницей в коде." -#: elf32-m68hc1x.c:1168 +#: elf32-m68hc1x.c:1183 #, c-format msgid "banked address [%lx:%04lx] (%lx) is not in the same bank as current banked address [%lx:%04lx] (%lx)" msgstr "банкируемый Ð°Ð´Ñ€ÐµÑ [%lx:%04lx] (%lx) не Ñовпадает Ñ Ð±Ð°Ð½ÐºÐ¾Ð¼ текущего банкируемого адреÑа [%lx:%04lx] (%lx)" -#: elf32-m68hc1x.c:1184 +#: elf32-m68hc1x.c:1198 #, c-format msgid "reference to a banked address [%lx:%04lx] in the normal address space at %04lx" msgstr "ÑÑылка на банкируемый Ð°Ð´Ñ€ÐµÑ [%lx:%04lx] в обычном адреÑном проÑтранÑтве по адреÑу %04lx" -#: elf32-m68hc1x.c:1225 +#: elf32-m68hc1x.c:1234 #, c-format msgid "S12 address (%lx) is not within shared RAM(0x2000-0x4000), therefore you must manually offset the address in your code" msgstr "ÐÐ´Ñ€ÐµÑ S12 (%lx) находитÑÑ Ð²Ð½Ðµ общей оперативной памÑти (0x2000-0x4000), поÑтому вы должны вручную указывать Ð°Ð´Ñ€ÐµÑ ÑÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð² коде" -#: elf32-m68hc1x.c:1352 +#: elf32-m68hc1x.c:1358 #, c-format msgid "%pB: linking files compiled for 16-bit integers (-mshort) and others for 32-bit integers" msgstr "%pB: компоновка файлов, Ñкомпилированных Ð´Ð»Ñ 16-битных целых (-mshort), Ñ Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸, Ñкомпилированными Ð´Ð»Ñ 32-битных целых" -#: elf32-m68hc1x.c:1359 +#: elf32-m68hc1x.c:1365 #, c-format msgid "%pB: linking files compiled for 32-bit double (-fshort-double) and others for 64-bit double" msgstr "%pB: компоновка файлов, Ñкомпилированных Ð´Ð»Ñ 32-битных double (-fshort-double), Ñ Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸, Ñкомпилированными Ð´Ð»Ñ 64-битных double" -#: elf32-m68hc1x.c:1368 +#: elf32-m68hc1x.c:1374 #, c-format msgid "%pB: linking files compiled for HCS12 with others compiled for HC12" msgstr "%pB: компоновка файлов, Ñкомпилированных Ð´Ð»Ñ HCS12, Ñ Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸, Ñкомпилированными Ð´Ð»Ñ HC12" -#: elf32-m68hc1x.c:1413 elf32-xgate.c:497 +#: elf32-m68hc1x.c:1419 elf32-xgate.c:497 #, c-format msgid "[abi=32-bit int, " msgstr "[abi=32-битное int, " -#: elf32-m68hc1x.c:1415 elf32-xgate.c:499 +#: elf32-m68hc1x.c:1421 elf32-xgate.c:499 #, c-format msgid "[abi=16-bit int, " msgstr "[abi=16-битное int, " -#: elf32-m68hc1x.c:1418 elf32-xgate.c:502 +#: elf32-m68hc1x.c:1424 elf32-xgate.c:502 #, c-format msgid "64-bit double, " msgstr "64-битное double, " -#: elf32-m68hc1x.c:1420 elf32-xgate.c:504 +#: elf32-m68hc1x.c:1426 elf32-xgate.c:504 #, c-format msgid "32-bit double, " msgstr "32-битное double, " -#: elf32-m68hc1x.c:1423 +#: elf32-m68hc1x.c:1429 #, c-format msgid "cpu=HC11]" msgstr "ЦП=HC11]" -#: elf32-m68hc1x.c:1425 +#: elf32-m68hc1x.c:1431 #, c-format msgid "cpu=HCS12]" msgstr "ЦП=HCS12]" -#: elf32-m68hc1x.c:1427 +#: elf32-m68hc1x.c:1433 #, c-format msgid "cpu=HC12]" msgstr "ЦП=HC12]" -#: elf32-m68hc1x.c:1430 +#: elf32-m68hc1x.c:1436 #, c-format msgid " [memory=bank-model]" msgstr " [памÑÑ‚ÑŒ=модель Ñ Ð±Ð°Ð½ÐºÐ°Ð¼Ð¸]" -#: elf32-m68hc1x.c:1432 +#: elf32-m68hc1x.c:1438 #, c-format msgid " [memory=flat]" msgstr " [памÑÑ‚ÑŒ=плоÑкаÑ]" -#: elf32-m68hc1x.c:1435 +#: elf32-m68hc1x.c:1441 #, c-format msgid " [XGATE RAM offsetting]" msgstr " [Ñмещение XGATE памÑти]" -#: elf32-m68k.c:1216 elf32-m68k.c:1217 vms-alpha.c:7484 vms-alpha.c:7500 +#: elf32-m68k.c:1159 elf32-m68k.c:1167 elf32-ppc.c:3583 elf32-ppc.c:3591 +#, c-format +msgid "%pB uses hard float, %pB uses soft float" +msgstr "%pB иÑпользует аппаратную плавающую точку, %pB иÑпользует программную плавающую точку" + +#: elf32-m68k.c:1282 elf32-m68k.c:1283 vms-alpha.c:7664 vms-alpha.c:7680 msgid "unknown" msgstr "неизвеÑтно" -#: elf32-m68k.c:1660 +#: elf32-m68k.c:1733 #, c-format msgid "%pB: GOT overflow: number of relocations with 8-bit offset > %d" msgstr "%pB: переполнение GOT: количеÑтво перемещений Ñ 8-битным Ñмещением > %d" -#: elf32-m68k.c:1667 +#: elf32-m68k.c:1740 #, c-format msgid "%pB: GOT overflow: number of relocations with 8- or 16-bit offset > %d" msgstr "%pB: переполнение GOT: количеÑтво перемещений Ñ 8-ми или 16-битным Ñмещением > %d" @@ -2595,18 +2692,18 @@ msgid "private flags = 0x%lx" msgstr "ÑобÑтвенные флаги = 0x%lx" -#: elf32-metag.c:1863 +#: elf32-metag.c:1859 #, c-format msgid "%pB(%pA): multiple TLS models are not supported" msgstr "%pB(%pA): неÑколько моделей TLS не поддерживаетÑÑ" -#: elf32-metag.c:1866 +#: elf32-metag.c:1862 #, c-format msgid "%pB(%pA): shared library symbol %s encountered whilst performing a static link" msgstr "%pB(%pA): при выполнении ÑтатичеÑкой компоновки обнаружен Ñимвол %s общей библиотеки" -#: elf32-microblaze.c:1544 elf32-tilepro.c:3155 elfxx-sparc.c:3538 -#: elfxx-tilegx.c:3543 +#: elf32-microblaze.c:1540 elf32-tilepro.c:3029 elfxx-sparc.c:3427 +#: elfxx-tilegx.c:3417 #, c-format msgid "%pB: probably compiled without -fPIC?" msgstr "%pB: вероÑтно, компилÑÑ†Ð¸Ñ Ð±ÐµÐ· -fPIC?" @@ -2620,320 +2717,315 @@ msgid "32bits gp relative relocation occurs for an external symbol" msgstr "Ð´Ð»Ñ Ð²Ð½ÐµÑˆÐ½ÐµÐ³Ð¾ Ñимвола обнаружено 32—битное отноÑительное перемещение" -#: elf32-msp430.c:837 elf32-msp430.c:1151 +#: elf32-msp430.c:846 elf32-msp430.c:1160 msgid "try enabling relaxation to avoid relocation truncations" msgstr "попробуйте включить оÑлабление, чтобы избежать Ð¾Ð±Ñ€ÐµÐ·Ð°Ð½Ð¸Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¹" -#: elf32-msp430.c:1358 +#: elf32-msp430.c:1367 msgid "internal error: branch/jump to an odd address detected" msgstr "внутреннÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ°: обнаружено ветвление/прыжок по Ñтранному адреÑу" -#: elf32-msp430.c:2357 +#: elf32-msp430.c:2532 #, c-format msgid "warning: %pB: unknown MSPABI object attribute %d" msgstr "предупреждение: %pB: неизвеÑтный атрибут MSPABI-объекта %d" -#: elf32-msp430.c:2456 +#: elf32-msp430.c:2633 #, c-format msgid "error: %pB uses %s instructions but %pB uses %s" msgstr "ошибка: %pB иÑпользует инÑтрукции %s, в то Ð²Ñ€ÐµÐ¼Ñ ÐºÐ°Ðº %pB иÑпользует %s" -#: elf32-msp430.c:2468 +#: elf32-msp430.c:2645 #, c-format msgid "error: %pB uses the %s code model whereas %pB uses the %s code model" msgstr "ошибка: %pB иÑпользует модель кода %s, в то Ð²Ñ€ÐµÐ¼Ñ ÐºÐ°Ðº %pB иÑпользует модель кода %s" -#: elf32-msp430.c:2480 +#: elf32-msp430.c:2658 #, c-format msgid "error: %pB uses the large code model but %pB uses MSP430 instructions" msgstr "ошибка: %pB иÑпользует огромную модель кода, в то Ð²Ñ€ÐµÐ¼Ñ ÐºÐ°Ðº %pB иÑпользует инÑтрукции MSP430" -#: elf32-msp430.c:2491 +#: elf32-msp430.c:2669 #, c-format msgid "error: %pB uses the %s data model whereas %pB uses the %s data model" msgstr "ошибка: %pB иÑпользует модель данных %s, в то Ð²Ñ€ÐµÐ¼Ñ ÐºÐ°Ðº %pB иÑпользует модель данных %s" -#: elf32-msp430.c:2503 +#: elf32-msp430.c:2682 #, c-format msgid "error: %pB uses the small code model but %pB uses the %s data model" msgstr "ошибка: %pB иÑпользует малую модель данных, в то Ð²Ñ€ÐµÐ¼Ñ ÐºÐ°Ðº %pB иÑпользует модель данных %s" -#: elf32-msp430.c:2515 +#: elf32-msp430.c:2694 #, c-format msgid "error: %pB uses the %s data model but %pB only uses MSP430 instructions" msgstr "ошибка: %pB иÑпользует модель данных %s, в то Ð²Ñ€ÐµÐ¼Ñ ÐºÐ°Ðº %pB иÑпользует только инÑтрукции MSP430" -#: elf32-nds32.c:3624 +#: elf32-msp430.c:2719 #, c-format -msgid "error: can't find symbol: %s" -msgstr "ошибка: невозможно найти Ñимвол: %s" +msgid "error: %pB can use the upper region for data, but %pB assumes data is exclusively in lower memory" +msgstr "ошибка: %pB может иÑпользовать верхнюю облаÑÑ‚ÑŒ Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ…, но %pB предполагает, что данные находÑÑ‚ÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ в нижней облаÑти памÑти" -#: elf32-nds32.c:5639 +#: elf32-nds32.c:3625 #, c-format -msgid "%pB: relocation %s against `%s' can not be used whenmaking a shared object; recompile with -fPIC" -msgstr "%pB: перемещение %s Ð´Ð»Ñ Â«%s» не может иÑпользоватьÑÑ Ð¿Ñ€Ð¸ Ñоздании общего объекта; перекомпилируйте Ñ -fPIC" +msgid "error: can't find symbol: %s" +msgstr "ошибка: невозможно найти Ñимвол: %s" -#: elf32-nds32.c:5669 +#: elf32-nds32.c:5528 #, c-format msgid "%pB: warning: %s unsupported in shared mode" msgstr "%pB: предупреждение: %s не поддерживаетÑÑ Ð² общем режиме" -#: elf32-nds32.c:5795 +#: elf32-nds32.c:5654 #, c-format msgid "%pB: warning: unaligned access to GOT entry" msgstr "%pB: предупреждение: невыровненный доÑтуп к Ñлементу GOT" -#: elf32-nds32.c:5836 +#: elf32-nds32.c:5695 #, c-format msgid "%pB: warning: relocate SDA_BASE failed" msgstr "%pB: предупреждение: не удалоÑÑŒ выполнить перемещение SDA_BASE" -#: elf32-nds32.c:5858 +#: elf32-nds32.c:5717 #, c-format msgid "%pB(%pA): warning: unaligned small data access of type %d" msgstr "%pB(%pA): предупреждение: невыровненный доÑтуп к малым данным Ñ Ñ‚Ð¸Ð¿Ð¾Ð¼ %d" -#: elf32-nds32.c:6784 +#: elf32-nds32.c:6643 #, c-format msgid "%pB: ISR vector size mismatch with previous modules, previous %u-byte, current %u-byte" msgstr "%pB: размер вектора ISR не Ñовпадает Ñ Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ð¼Ð¸ модулÑми, был %u-байтовый, Ñтал %u-байтовый" -#: elf32-nds32.c:6828 +#: elf32-nds32.c:6691 #, c-format msgid "%pB: warning: endian mismatch with previous modules" msgstr "%pB: предупреждение: порÑдок байт не Ñовпадает Ñ Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ð¼Ð¸ модулÑми" -#: elf32-nds32.c:6842 +#: elf32-nds32.c:6705 #, c-format msgid "%pB: warning: older version of object file encountered, please recompile with current tool chain" msgstr "%pB: предупреждение: обнаружена ÑÑ‚Ð°Ñ€Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ Ð¾Ð±ÑŠÐµÐºÑ‚Ð½Ð¾Ð³Ð¾ файла, перекомпилируйте текущим набором инÑтрументов" -#: elf32-nds32.c:6930 +#: elf32-nds32.c:6793 #, c-format msgid "%pB: error: ABI mismatch with previous modules" msgstr "%pB: ошибка: ABI не Ñовпадает Ñ Ð¸Ñпользованным в предыдущих модулÑÑ…" -#: elf32-nds32.c:6940 +#: elf32-nds32.c:6803 #, c-format msgid "%pB: error: instruction set mismatch with previous modules" msgstr "%pB: ошибка: набор инÑтрукций не Ñовпадает Ñ Ð¸Ñпользованным в предыдущих модулÑÑ…" -#: elf32-nds32.c:6967 +#: elf32-nds32.c:6830 #, c-format msgid "%pB: warning: incompatible elf-versions %s and %s" msgstr "%pB: предупреждение: неÑовмеÑтимые верÑии elf %s и %s" -#: elf32-nds32.c:6998 +#: elf32-nds32.c:6861 #, c-format msgid ": n1 instructions" msgstr ": инÑтрукции n1" -#: elf32-nds32.c:7001 +#: elf32-nds32.c:6864 #, c-format msgid ": n1h instructions" msgstr ": инÑтрукции n1h" -#: elf32-nds32.c:9462 +#: elf32-nds32.c:9316 #, c-format msgid "%pB: error: search_nds32_elf_blank reports wrong node" msgstr "%pB: ошибка: search_nds32_elf_blank Ñообщает о неверном узле" -#: elf32-nds32.c:9722 +#: elf32-nds32.c:9576 #, c-format msgid "%pB: warning: %s points to unrecognized reloc at %#" msgstr "%pB: предупреждение: %s указывает на нераÑпознанное перемещение по адреÑу %#" -#: elf32-nds32.c:12975 +#: elf32-nds32.c:12839 #, c-format msgid "%pB: nested OMIT_FP in %pA" msgstr "%pB: вложенные OMIT_FP в %pA" -#: elf32-nds32.c:12994 +#: elf32-nds32.c:12858 #, c-format msgid "%pB: unmatched OMIT_FP in %pA" msgstr "%pB: неÑовпадение OMIT_FP в %pA" -#: elf32-nds32.c:13275 reloc.c:8410 +#: elf32-nds32.c:13140 reloc.c:8470 #, c-format msgid "%X%P: %pB(%pA): relocation \"%pR\" goes out of range\n" msgstr "%X%P: %pB(%pA): перемещение «%R» выходит за диапазон\n" -#: elf32-nios2.c:2930 +#: elf32-nios2.c:2937 #, c-format msgid "error: %pB: big-endian R2 is not supported" msgstr "ошибка: %pB: порÑдок от Ñтаршего к младшему R2 не поддерживаетÑÑ" -#: elf32-nios2.c:3822 +#: elf32-nios2.c:3829 #, c-format -msgid "global pointer relative relocation at address 0x%08x when _gp not defined\n" -msgstr "глобальный указатель отноÑительного Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð¿Ð¾ адреÑу 0x%08x, но _gp не определена\n" +msgid "global pointer relative relocation at address %# when _gp not defined\n" +msgstr "глобальный указатель отноÑительного Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð¿Ð¾ адреÑу %#, но _gp не определена\n" -#: elf32-nios2.c:3842 +#: elf32-nios2.c:3859 #, c-format -msgid "unable to reach %s (at 0x%08x) from the global pointer (at 0x%08x) because the offset (%d) is out of the allowed range, -32678 to 32767\n" -msgstr "невозможно доÑтичь %s (по адреÑу 0x%08x) из глобального ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»Ñ (по адреÑу 0x%08x), так как Ñмещение (%d) выходит из разрешённого диапазона -32678—32767\n" +msgid "unable to reach %s (at %#) from the global pointer (at %#) because the offset (%) is out of the allowed range, -32678 to 32767\n" +msgstr "невозможно доÑтичь %s (по адреÑу %#) из глобального ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»Ñ (%#), так как Ñмещение (%) выходит из разрешённого диапазона -32678—32767\n" -#: elf32-nios2.c:4495 elf32-pru.c:928 +#: elf32-nios2.c:4514 elf32-pru.c:931 msgid "relocation out of range" msgstr "перемещение выходит за диапазон" -#: elf32-nios2.c:4505 elf32-pru.c:938 elf32-tic6x.c:2716 +#: elf32-nios2.c:4524 elf32-pru.c:941 elf32-tic6x.c:2657 msgid "dangerous relocation" msgstr "опаÑное перемещение" -#: elf32-nios2.c:5378 +#: elf32-nios2.c:5367 #, c-format msgid "dynamic variable `%s' is zero size" msgstr "динамичеÑÐºÐ°Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ Â«%s» имеет нулевой размер" -#: elf32-or1k.c:1177 +#: elf32-or1k.c:1210 #, c-format msgid "%pB: Cannot handle relocation value size of %d" msgstr "%pB: невозможно обработать размер Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ %d" -#: elf32-or1k.c:1286 +#: elf32-or1k.c:1317 #, c-format msgid "%pB: unknown relocation type %d" msgstr "%pB: неизвеÑтный тип Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ %d" -#: elf32-or1k.c:1340 +#: elf32-or1k.c:1371 #, c-format msgid "%pB: addend should be zero for plt relocations" msgstr "%pB: добавление должно быть нулём Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¹ plt" -#: elf32-or1k.c:1445 +#: elf32-or1k.c:1476 #, c-format msgid "%pB: addend should be zero for got relocations" msgstr "%pB: добавление должно быть нулём Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ð¹ got" -#: elf32-or1k.c:1462 +#: elf32-or1k.c:1493 #, c-format msgid "%pB: gotoff relocation against dynamic symbol %s" msgstr "%pB: перемещение gotoff Ð´Ð»Ñ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑкого Ñимвола %s" -#: elf32-or1k.c:1479 elf64-alpha.c:4455 elf64-alpha.c:4599 +#: elf32-or1k.c:1510 elf64-alpha.c:4421 elf64-alpha.c:4565 #, c-format msgid "%pB: pc-relative relocation against dynamic symbol %s" msgstr "%pB: pc-отноÑительное перемещение Ð´Ð»Ñ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑкого Ñимвола %s" -#: elf32-or1k.c:1493 +#: elf32-or1k.c:1524 #, c-format msgid "%pB: non-pic relocation against symbol %s" msgstr "%pB: не-pic перемещение Ð´Ð»Ñ Ñимвола %s" -#: elf32-or1k.c:1577 +#: elf32-or1k.c:1608 #, c-format msgid "%pB: support for local dynamic not implemented" msgstr "%pB: поддержка локальных динамичеÑких Ñлементов не реализована" -#: elf32-or1k.c:1729 +#: elf32-or1k.c:1787 #, c-format msgid "%pB: will not resolve runtime TLS relocation" msgstr "%pB: перемещение TLS времени Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð½Ðµ будет решено" -#: elf32-or1k.c:2074 +#: elf32-or1k.c:2120 #, c-format msgid "%pB: bad relocation section name `%s'" msgstr "%pB: неправильное Ð¸Ð¼Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰Ð°ÐµÐ¼Ð¾Ð³Ð¾ раздела «%s»" -#: elf32-or1k.c:3218 +#: elf32-or1k.c:3181 #, c-format msgid "%pB: %s flag mismatch with previous modules" msgstr "%pB: флаг %s не Ñовпадает Ñ Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ð¼Ð¸ модулÑми" -#: elf32-ppc.c:986 +#: elf32-ppc.c:989 #, c-format msgid "generic linker can't handle %s" msgstr "универÑальный компоновщик не Ñмог обработать %s" -#: elf32-ppc.c:1617 +#: elf32-ppc.c:1628 #, c-format msgid "corrupt %s section in %pB" msgstr "повреждённый раздел %s в %pB" -#: elf32-ppc.c:1637 +#: elf32-ppc.c:1647 #, c-format msgid "unable to read in %s section from %pB" msgstr "не удалоÑÑŒ прочитать раздел %s из %pB" -#: elf32-ppc.c:1679 +#: elf32-ppc.c:1689 #, c-format msgid "warning: unable to set size of %s section in %pB" msgstr "предупреждение: не удалоÑÑŒ задать размер раздела %s в %pB" -#: elf32-ppc.c:1729 +#: elf32-ppc.c:1738 msgid "failed to allocate space for new APUinfo section" msgstr "не удалоÑÑŒ выделить меÑто Ð´Ð»Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ раздела APUinfo" -#: elf32-ppc.c:1748 +#: elf32-ppc.c:1757 msgid "failed to compute new APUinfo section" msgstr "не удалоÑÑŒ вычиÑлить новый раздел APUinfo" -#: elf32-ppc.c:1751 +#: elf32-ppc.c:1760 msgid "failed to install new APUinfo section" msgstr "не удалоÑÑŒ уÑтановить новый раздел APUinfo" -#: elf32-ppc.c:2853 +#: elf32-ppc.c:2861 #, c-format msgid "%pB: relocation %s cannot be used when making a shared object" msgstr "%pB: перемещение %s не может иÑпользоватьÑÑ Ð¿Ñ€Ð¸ Ñоздании общего объекта" -#: elf32-ppc.c:3587 elf32-ppc.c:3595 -#, c-format -msgid "%pB uses hard float, %pB uses soft float" -msgstr "%pB иÑпользует аппаратную плавающую точку, %pB иÑпользует программную плавающую точку" - -#: elf32-ppc.c:3603 elf32-ppc.c:3611 +#: elf32-ppc.c:3599 elf32-ppc.c:3607 #, c-format msgid "%pB uses double-precision hard float, %pB uses single-precision hard float" msgstr "%pB иÑпользует аппаратную плавающую точку двойной точноÑти, %pB иÑпользует аппаратную плавающую точку одинарной точноÑти" -#: elf32-ppc.c:3630 elf32-ppc.c:3638 +#: elf32-ppc.c:3629 elf32-ppc.c:3637 #, c-format msgid "%pB uses 64-bit long double, %pB uses 128-bit long double" msgstr "%pB иÑпользует 64-битный long double, %pB иÑпользует 128-битный long double" -#: elf32-ppc.c:3646 elf32-ppc.c:3654 +#: elf32-ppc.c:3645 elf32-ppc.c:3653 #, c-format msgid "%pB uses IBM long double, %pB uses IEEE long double" msgstr "%pB иÑпользует long double в формате IBM, %pB иÑпользует long double в формате IEEE" -#: elf32-ppc.c:3721 elf32-ppc.c:3730 +#: elf32-ppc.c:3720 elf32-ppc.c:3729 #, c-format msgid "%pB uses AltiVec vector ABI, %pB uses SPE vector ABI" msgstr "%pB иÑпользует ABI векторов AltiVec, %pB иÑпользует ABI векторов SPE" -#: elf32-ppc.c:3759 elf32-ppc.c:3768 +#: elf32-ppc.c:3758 elf32-ppc.c:3767 #, c-format msgid "%pB uses r3/r4 for small structure returns, %pB uses memory" msgstr "%pB иÑпользует r3/r4 Ð´Ð»Ñ Ð²Ð¾Ð·Ð²Ñ€Ð°Ñ‚Ð° маленькой Ñтруктуры, %pB иÑпользует памÑÑ‚ÑŒ" -#: elf32-ppc.c:3829 +#: elf32-ppc.c:3831 #, c-format msgid "%pB: compiled with -mrelocatable and linked with modules compiled normally" msgstr "%pB: Ñкомпилирована Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ -mrelocatable и нормально Ñкомпонована Ñо Ñкомпилированными модулÑми" -#: elf32-ppc.c:3837 +#: elf32-ppc.c:3839 #, c-format msgid "%pB: compiled normally and linked with modules compiled with -mrelocatable" msgstr "%pB: нормально Ñкомпилирована и Ñкомпонована Ñ Ð¼Ð¾Ð´ÑƒÐ»Ñми, Ñкомпилированными Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ -mrelocatable" -#: elf32-ppc.c:3906 +#: elf32-ppc.c:3908 #, c-format msgid "%pB(%pA+0x%lx): expected 16A style relocation on 0x%08x insn" msgstr "%pB(%pA+0x%lx): ожидаетÑÑ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ в формате 16A по адреÑу 0x%08x insn" -#: elf32-ppc.c:3925 +#: elf32-ppc.c:3927 #, c-format msgid "%pB(%pA+0x%lx): expected 16D style relocation on 0x%08x insn" msgstr "%pB(%pA+0x%lx): ожидаетÑÑ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ в формате 16D по адреÑу 0x%08x insn" -#: elf32-ppc.c:4028 +#: elf32-ppc.c:4030 #, c-format msgid "bss-plt forced due to %pB" msgstr "принудительно иÑпользуетÑÑ bss-plt из-за %pB" -#: elf32-ppc.c:4030 +#: elf32-ppc.c:4032 msgid "bss-plt forced by profiling" msgstr "принудительно иÑпользуетÑÑ bss-plt из-за профилированиÑ" @@ -2941,40 +3033,40 @@ #. could just mark this symbol to exclude it #. from tls optimization but it's safer to skip #. the entire optimization. -#: elf32-ppc.c:4606 elf64-ppc.c:7724 +#: elf32-ppc.c:4606 elf64-ppc.c:8252 #, c-format msgid "%H arg lost __tls_get_addr, TLS optimization disabled\n" msgstr "%H аргумент lost __tls_get_addr, Ð¾Ð¿Ñ‚Ð¸Ð¼Ð¸Ð·Ð°Ñ†Ð¸Ñ TLS выключена\n" -#: elf32-ppc.c:5577 elf32-sh.c:3078 elf32-tilepro.c:2339 elfxx-sparc.c:2534 -#: elfxx-tilegx.c:2579 +#: elf32-ppc.c:5513 elf32-sh.c:3023 elf32-tilepro.c:2256 elfxx-sparc.c:2453 +#: elfxx-tilegx.c:2496 #, c-format msgid "%pB: dynamic relocation in read-only section `%pA'\n" msgstr "%pB: динамичеÑкое перемещение в разделе только Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Â«%pA»\n" -#: elf32-ppc.c:7457 +#: elf32-ppc.c:7356 msgid "%P: %H: error: %s with unexpected instruction %x\n" msgstr "%P: %H: ошибка: %s Ñ Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð¾Ð¹ инÑтрукцией %x\n" -#: elf32-ppc.c:7494 +#: elf32-ppc.c:7393 msgid "%H: fixup branch overflow\n" msgstr "%H: переполнение ветви меÑтоположений\n" -#: elf32-ppc.c:7534 elf32-ppc.c:7570 +#: elf32-ppc.c:7433 elf32-ppc.c:7469 #, c-format msgid "%pB(%pA+%#): error: %s with unexpected instruction %#x" msgstr "%pB(%pA+%#): ошибка: %s Ñ Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð¾Ð¹ инÑтрукцией %#x" -#: elf32-ppc.c:7634 +#: elf32-ppc.c:7533 #, c-format msgid "%X%H: unsupported bss-plt -fPIC ifunc %s\n" msgstr "%X%H: Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ð°Ñ bss-plt -fPIC ifunc %s\n" -#: elf32-ppc.c:7673 elf64-ppc.c:15220 +#: elf32-ppc.c:7572 elf64-ppc.c:16848 msgid "%H: warning: %s unexpected insn %#x.\n" msgstr "%H: предупреждение: в %s не ожидалоÑÑŒ insn %#x.\n" -#: elf32-ppc.c:7985 +#: elf32-ppc.c:7881 #, c-format msgid "%H: non-zero addend on %s reloc against `%s'\n" msgstr "%H: ненулевое добавление в перемещении %s Ð´Ð»Ñ Â«%s»\n" @@ -2987,54 +3079,54 @@ #. local won't have the +32k reloc addend trick marking #. -fPIC code, so the linker won't know whether r30 is #. _GLOBAL_OFFSET_TABLE_ or pointing into a .got2 section. -#: elf32-ppc.c:8017 +#: elf32-ppc.c:7913 #, c-format msgid "%X%H: @local call to ifunc %s\n" msgstr "%X%H: @local вызов ifunc %s\n" -#: elf32-ppc.c:8187 +#: elf32-ppc.c:8091 #, c-format msgid "%H: relocation %s for indirect function %s unsupported\n" msgstr "%H: перемещение %s Ð´Ð»Ñ Ð½ÐµÑвного вызова функции %s не поддерживаетÑÑ\n" -#: elf32-ppc.c:8515 elf32-ppc.c:8546 elf32-ppc.c:8637 elf32-ppc.c:8725 +#: elf32-ppc.c:8425 elf32-ppc.c:8456 elf32-ppc.c:8547 elf32-ppc.c:8643 #, c-format msgid "%pB: the target (%s) of a %s relocation is in the wrong output section (%s)" msgstr "%pB: назначение (%s) Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ %s в ошибочный выходной раздел (%s)" -#: elf32-ppc.c:8855 elf32-ppc.c:8873 -msgid "%P: %H: %s relocation unsupported for bss-plt\n" -msgstr "%P: %H: перемещение %s не поддерживаетÑÑ Ð´Ð»Ñ bss-plt\n" +#: elf32-ppc.c:8773 elf32-ppc.c:8791 +msgid "%X%P: %H: %s relocation unsupported for bss-plt\n" +msgstr "%X%P: %H: перемещение %s не поддерживаетÑÑ Ð´Ð»Ñ bss-plt\n" -#: elf32-ppc.c:8954 +#: elf32-ppc.c:8872 #, c-format msgid "%H: error: %s against `%s' not a multiple of %u\n" msgstr "%H: ошибка: %s в «%s» не кратно %u\n" -#: elf32-ppc.c:8983 +#: elf32-ppc.c:8901 #, c-format msgid "%H: unresolvable %s relocation against symbol `%s'\n" msgstr "%H: неразрешимое перемещение %s Ð´Ð»Ñ Ñимвола «%s»\n" -#: elf32-ppc.c:9064 +#: elf32-ppc.c:8982 #, c-format msgid "%H: %s reloc against `%s': error %d\n" msgstr "%H: перемещение %s Ð´Ð»Ñ Â«%s»: ошибка %d\n" -#: elf32-ppc.c:9959 elf64-ppc.c:15715 +#: elf32-ppc.c:9872 msgid "%X%P: text relocations and GNU indirect functions will result in a segfault at runtime\n" msgstr "%X%P: текÑтовые Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð¸ неÑвные функции GNU приведут к ошибке ÑÐµÐ³Ð¼ÐµÐ½Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð²Ð¾ Ð²Ñ€ÐµÐ¼Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ\n" -#: elf32-ppc.c:9963 elf64-ppc.c:15719 +#: elf32-ppc.c:9876 elf64-ppc.c:17398 msgid "%P: warning: text relocations and GNU indirect functions may result in a segfault at runtime\n" msgstr "%P: предупреждение: текÑтовые Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð¸ неÑвные функции GNU могут привеÑти к ошибке ÑÐµÐ³Ð¼ÐµÐ½Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð²Ð¾ Ð²Ñ€ÐµÐ¼Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ\n" -#: elf32-ppc.c:10008 +#: elf32-ppc.c:9921 #, c-format msgid "%s not defined in linker created %pA" msgstr "%s не определено в компоновщике, Ñозданном %pA" -#: elf32-pru.c:579 elf32-pru.c:1472 +#: elf32-pru.c:582 elf32-pru.c:1475 #, c-format msgid "error: %pB: old incompatible object file detected" msgstr "ошибка: %pB: обнаружен Ñтарый неÑовмеÑтимый объектный файл" @@ -3051,7 +3143,7 @@ msgid "warning: RL78_SYM reloc with an unknown symbol" msgstr "предупреждение: перемещение RL78_SYM Ñ Ð½ÐµÐ¸Ð·Ð²ÐµÑтным Ñимволом" -#: elf32-rl78.c:1084 elf32-rx.c:1456 +#: elf32-rl78.c:1084 elf32-rx.c:1461 #, c-format msgid "%pB(%pA): error: call to undefined function '%s'" msgstr "%pB(%pA): ошибка: вызов неопределённой функции «%s»" @@ -3080,17 +3172,17 @@ msgid " [64-bit doubles]" msgstr "[64-битные double]" -#: elf32-rx.c:605 +#: elf32-rx.c:607 #, c-format msgid "%pB:%pA: table entry %s outside table" msgstr "%pB:%pA: Ñлемент таблицы %s находитÑÑ Ð²Ð½Ðµ таблицы" -#: elf32-rx.c:612 +#: elf32-rx.c:614 #, c-format msgid "%pB:%pA: table entry %s not word-aligned within table" msgstr "%pB:%pA: Ñлемент таблицы %s не выровнен в таблице по границе Ñлова" -#: elf32-rx.c:684 +#: elf32-rx.c:689 #, c-format msgid "%pB:%pA: warning: deprecated Red Hat reloc %s detected against: %s" msgstr "%pB:%pA: предупреждение: обнаружено уÑтаревшее перемещение Red Hat %s длÑ: %s" @@ -3099,59 +3191,59 @@ #. an absolute address is being computed. There are special cases #. for relocs against symbols that are known to be referenced in #. crt0.o before the PID base address register has been initialised. -#: elf32-rx.c:704 +#: elf32-rx.c:709 #, c-format msgid "%pB(%pA): unsafe PID relocation %s at %# (against %s in %s)" msgstr "%pB(%pA): небезопаÑное перемещение PID %s по адреÑу %# (Ð´Ð»Ñ %s в %s)" -#: elf32-rx.c:1288 +#: elf32-rx.c:1293 msgid "warning: RX_SYM reloc with an unknown symbol" msgstr "предупреждение: перемещение RX_SYM Ñ Ð½ÐµÐ¸Ð·Ð²ÐµÑтным Ñимволом" -#: elf32-rx.c:3167 +#: elf32-rx.c:3173 #, c-format msgid "there is a conflict merging the ELF header flags from %pB" msgstr "возник конфликт Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ñ„Ð»Ð°Ð³Ð¾Ð² заголовка ELF из %pB" -#: elf32-rx.c:3170 +#: elf32-rx.c:3176 #, c-format msgid " the input file's flags: %s" msgstr " флаги входного файла: %s" -#: elf32-rx.c:3172 +#: elf32-rx.c:3178 #, c-format msgid " the output file's flags: %s" msgstr " флаги выходного файла: %s" -#: elf32-rx.c:3792 +#: elf32-rx.c:3784 #, c-format msgid "%pB:%pA: table %s missing corresponding %s" msgstr "%pB:%pA: отÑутÑтвует таблица %s, ÑоответÑÑ‚Ð²ÑƒÑŽÑ‰Ð°Ñ %s" -#: elf32-rx.c:3800 +#: elf32-rx.c:3792 #, c-format msgid "%pB:%pA: %s and %s must be in the same input section" msgstr "%pB:%pA: %s и %s должны быть в одном входном разделе" -#: elf32-s390.c:2140 elf64-s390.c:2095 +#: elf32-s390.c:2011 elf64-s390.c:1965 #, c-format msgid "%pB(%pA+%#): invalid instruction for TLS relocation %s" msgstr "%pB(%pA+%#): недопуÑÑ‚Ð¸Ð¼Ð°Ñ Ð¸Ð½ÑÑ‚Ñ€ÑƒÐºÑ†Ð¸Ñ Ð´Ð»Ñ TLS-Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ %s" -#: elf32-score.c:1521 elf32-score7.c:1382 elfxx-mips.c:3754 +#: elf32-score.c:1521 elf32-score7.c:1382 elfxx-mips.c:3800 msgid "not enough GOT space for local GOT entries" msgstr "недоÑтаточно проÑтранÑтва GOT Ð´Ð»Ñ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ñ‹Ñ… Ñлементов GOT" -#: elf32-score.c:2746 +#: elf32-score.c:2747 msgid "address not word aligned" msgstr "Ð°Ð´Ñ€ÐµÑ Ð½Ðµ выровнен по границе Ñлова" -#: elf32-score.c:2827 elf32-score7.c:2632 +#: elf32-score.c:2828 elf32-score7.c:2633 #, c-format msgid "%pB: malformed reloc detected for section %pA" msgstr "%pB: обнаружено иÑкажённое перемещение в разделе %pA" -#: elf32-score.c:2881 elf32-score7.c:2686 +#: elf32-score.c:2882 elf32-score7.c:2687 #, c-format msgid "%pB: CALL15 reloc at %# not against global symbol" msgstr "%pB: перемещение CALL15 по адреÑу %# не Ð´Ð»Ñ Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñимвола" @@ -3166,7 +3258,7 @@ msgid " [fix dep]" msgstr " [fix dep]" -#: elf32-score.c:4050 elf32-score7.c:3855 +#: elf32-score.c:4054 elf32-score7.c:3859 #, c-format msgid "%pB: warning: linking PIC files with non-PIC files" msgstr "%pB: предупреждение: выполнÑетÑÑ ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ° PIC-файлов Ñ Ð½Ðµ-PIC файлами" @@ -3176,152 +3268,148 @@ msgid "%pB: %#: warning: R_SH_USES points to unrecognized insn 0x%x" msgstr "%pB: %#: предупреждение: R_SH_USES указывает на нераÑпознанную инÑтрукцию 0x%x" -#: elf32-sh.c:3633 -msgid "unexpected STO_SH5_ISA32 on local symbol is not handled" -msgstr "неожиданное STO_SH5_ISA32 локального Ñимвола не обрабатываетÑÑ" - -#: elf32-sh.c:3880 +#: elf32-sh.c:3758 #, c-format msgid "%pB: %#: fatal: unaligned branch target for relax-support relocation" msgstr "%pB: %#: оÑтанов: невыровненное назначение Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¾Ð¹ оÑлаблениÑ" -#: elf32-sh.c:3910 elf32-sh.c:3926 +#: elf32-sh.c:3788 elf32-sh.c:3804 #, c-format msgid "%pB: %#: fatal: unaligned %s relocation %#" msgstr "%pB: %#: оÑтанов: невыровненное перемещение %s (%#)" -#: elf32-sh.c:3942 +#: elf32-sh.c:3820 #, c-format msgid "%pB: %#: fatal: R_SH_PSHA relocation % not in range -32..32" msgstr "%pB: %#: оÑтанов: перемещение R_SH_PSHA %# вне диапазона -32..32" -#: elf32-sh.c:3958 +#: elf32-sh.c:3836 #, c-format msgid "%pB: %#: fatal: R_SH_PSHL relocation % not in range -32..32" msgstr "%pB: %#: оÑтанов: перемещение R_SH_PSHL %# вне диапазона -32..32" -#: elf32-sh.c:4088 elf32-sh.c:4483 +#: elf32-sh.c:3966 elf32-sh.c:4361 #, c-format msgid "%pB(%pA+%#): cannot emit fixup to `%s' in read-only section" msgstr "%pB(%pA+%#): невозможно Ñгенерировать меÑтоположение к «%s» в разделе только Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ" -#: elf32-sh.c:4586 +#: elf32-sh.c:4464 #, c-format msgid "%pB(%pA+%#): %s relocation against external symbol \"%s\"" msgstr "%pB(%pA+%#): перемещение %s Ð´Ð»Ñ Ð²Ð½ÐµÑˆÐ½ÐµÐ³Ð¾ Ñимвола «%s»" -#: elf32-sh.c:4705 +#: elf32-sh.c:4583 #, c-format msgid "%pB(%pA): offset in relocation for GD->LE translation is too small: %#" msgstr "%pB(%pA): Ñмещение в перемещении Ð´Ð»Ñ Ñ‚Ñ€Ð°Ð½ÑлÑции GD->LE Ñлишком мало: %#" #. The backslash is to prevent bogus trigraph detection. -#: elf32-sh.c:4723 +#: elf32-sh.c:4601 #, c-format msgid "%pB(%pA+%#): unexpected instruction %#04X (expected 0xd4??)" msgstr "%pB(%pA+%#): Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð°Ñ Ð¸Ð½ÑÑ‚Ñ€ÑƒÐºÑ†Ð¸Ñ %#04X (ожидалаÑÑŒ 0xd4??)" -#: elf32-sh.c:4731 +#: elf32-sh.c:4609 #, c-format msgid "%pB(%pA+%#): unexpected instruction %#04X (expected 0xc7??)" msgstr "%pB(%pA+%#): Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð°Ñ Ð¸Ð½ÑÑ‚Ñ€ÑƒÐºÑ†Ð¸Ñ %#04X (ожидалаÑÑŒ 0xc7??)" -#: elf32-sh.c:4738 +#: elf32-sh.c:4616 #, c-format msgid "%pB(%pA+%#): unexpected instruction %#04X (expected 0xd1??)" msgstr "%pB(%pA+%#): Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð°Ñ Ð¸Ð½ÑÑ‚Ñ€ÑƒÐºÑ†Ð¸Ñ %#04X (ожидалаÑÑŒ 0xd1??)" -#: elf32-sh.c:4745 +#: elf32-sh.c:4623 #, c-format msgid "%pB(%pA+%#): unexpected instruction %#04X (expected 0x310c)" msgstr "%pB(%pA+%#): Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð°Ñ Ð¸Ð½ÑÑ‚Ñ€ÑƒÐºÑ†Ð¸Ñ %#04X (ожидалаÑÑŒ 0x310c)" -#: elf32-sh.c:4752 +#: elf32-sh.c:4630 #, c-format msgid "%pB(%pA+%#): unexpected instruction %#04X (expected 0x410b)" msgstr "%pB(%pA+%#): Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð°Ñ Ð¸Ð½ÑÑ‚Ñ€ÑƒÐºÑ†Ð¸Ñ %#04X (ожидалаÑÑŒ 0x410b)" -#: elf32-sh.c:4759 +#: elf32-sh.c:4637 #, c-format msgid "%pB(%pA+%#): unexpected instruction %#04X (expected 0x34cc)" msgstr "%pB(%pA+%#): Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð°Ñ Ð¸Ð½ÑÑ‚Ñ€ÑƒÐºÑ†Ð¸Ñ %#04X (ожидалаÑÑŒ 0x34cc)" -#: elf32-sh.c:4794 +#: elf32-sh.c:4672 #, c-format msgid "%pB(%pA): offset in relocation for IE->LE translation is too small: %#" msgstr "%pB(%pA): Ñмещение в перемещении Ð´Ð»Ñ Ñ‚Ñ€Ð°Ð½ÑлÑции IE->LE Ñлишком мало: %#" -#: elf32-sh.c:4812 +#: elf32-sh.c:4690 #, c-format msgid "%pB(%pA+%#): unexpected instruction %#04X (expected 0xd0??: mov.l)" msgstr "%pB(%pA+%#): Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð°Ñ Ð¸Ð½ÑÑ‚Ñ€ÑƒÐºÑ†Ð¸Ñ %#04X (ожидалаÑÑŒ 0xd0??: mov.l)" -#: elf32-sh.c:4821 +#: elf32-sh.c:4699 #, c-format msgid "%pB(%pA+%#): unexpected instruction %#04X (expected 0x0?12: stc)" msgstr "%pB(%pA+%#): Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð°Ñ Ð¸Ð½ÑÑ‚Ñ€ÑƒÐºÑ†Ð¸Ñ %#04X (ожидалаÑÑŒ 0x0?12: stc)" -#: elf32-sh.c:4828 +#: elf32-sh.c:4706 #, c-format msgid "%pB(%pA+%#): unexpected instruction %#04X (expected 0x0?ce: mov.l)" msgstr "%pB(%pA+%#): Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð°Ñ Ð¸Ð½ÑÑ‚Ñ€ÑƒÐºÑ†Ð¸Ñ %#04X (ожидалаÑÑŒ 0x0?ce: mov.l)" -#: elf32-sh.c:4943 +#: elf32-sh.c:4821 #, c-format msgid "%pB(%pA): offset in relocation for GD->IE translation is too small: %#" msgstr "%pB(%pA): Ñмещение в перемещении Ð´Ð»Ñ Ñ‚Ñ€Ð°Ð½ÑлÑции GD->IE Ñлишком мало: %#" -#: elf32-sh.c:5011 +#: elf32-sh.c:4889 #, c-format msgid "%pB(%pA): offset in relocation for LD->LE translation is too small: %#" msgstr "%pB(%pA): Ñмещение в перемещении Ð´Ð»Ñ Ñ‚Ñ€Ð°Ð½ÑлÑции LD->LE Ñлишком мало: %#" -#: elf32-sh.c:5139 +#: elf32-sh.c:5017 #, c-format msgid "%X%C: relocation to \"%s\" references a different segment\n" msgstr "%X%C: перемещение указывает на ÑÑылки «%s» другого Ñегмента\n" -#: elf32-sh.c:5146 +#: elf32-sh.c:5024 #, c-format msgid "%C: warning: relocation to \"%s\" references a different segment\n" msgstr "%C: предупреждение: перемещение указывает на ÑÑылки «%s» другого Ñегмента\n" -#: elf32-sh.c:5651 elf32-sh.c:5733 +#: elf32-sh.c:5483 elf32-sh.c:5565 #, c-format msgid "%pB: `%s' accessed both as normal and FDPIC symbol" msgstr "%pB: «%s» доÑтупен как обычный и как FDPIC Ñимвол" -#: elf32-sh.c:5657 elf32-sh.c:5738 +#: elf32-sh.c:5489 elf32-sh.c:5570 #, c-format msgid "%pB: `%s' accessed both as FDPIC and thread local symbol" msgstr "%pB: «%s» доÑтупен как FDPIC и как локальный Ñимвол нити" -#: elf32-sh.c:5688 +#: elf32-sh.c:5520 #, c-format msgid "%pB: Function descriptor relocation with non-zero addend" msgstr "%pB: перемещение деÑкриптора функции Ñ Ð½ÐµÐ½ÑƒÐ»ÐµÐ²Ñ‹Ð¼ добавлением" -#: elf32-sh.c:5895 elf64-alpha.c:4691 +#: elf32-sh.c:5727 elf64-alpha.c:4657 #, c-format msgid "%pB: TLS local exec code cannot be linked into shared objects" msgstr "%pB: локальный иÑполнÑемый код TLS не может быть Ñкомпонован Ñ Ð¾Ð±Ñ‰Ð¸Ð¼Ð¸ объектами" -#: elf32-sh.c:6010 +#: elf32-sh.c:5842 #, c-format msgid "%pB: uses %s instructions while previous modules use %s instructions" msgstr "%pB: иÑпользуютÑÑ Ð¸Ð½Ñтрукции %s, Ñ…Ð¾Ñ‚Ñ Ð² предыдущих модулÑÑ… иÑпользовалиÑÑŒ инÑтрукции %s" -#: elf32-sh.c:6022 +#: elf32-sh.c:5854 #, c-format msgid "internal error: merge of architecture '%s' with architecture '%s' produced unknown architecture" msgstr "внутреннÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ°: объединение архитектуры «%s» Ñ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¾Ð¹ «%s» Ñоздаёт неизвеÑтную архитектуру" -#: elf32-sh.c:6059 +#: elf32-sh.c:5895 #, c-format msgid "%pB: uses instructions which are incompatible with instructions used in previous modules" msgstr "%pB: иÑпользуютÑÑ Ð¸Ð½Ñтрукции, не ÑовмеÑтимые Ñ Ð¸Ð½ÑтрукциÑми, иÑпользовавшимиÑÑ Ð² предыдущих модулÑÑ…" -#: elf32-sh.c:6072 +#: elf32-sh.c:5908 #, c-format msgid "%pB: attempt to mix FDPIC and non-FDPIC objects" msgstr "%pB: попытка Ñмешать объекты FDPIC и не FDPIC" @@ -3336,118 +3424,123 @@ msgid "%pB: linking little endian files with big endian files" msgstr "%pB: производитÑÑ ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ° файлов Ñ Ð¾Ð±Ñ€Ð°Ñ‚Ð½Ñ‹Ð¼ порÑдком байт Ñ Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸ Ñ Ð¿Ñ€Ñмым порÑдком байт" -#: elf32-spu.c:732 +#: elf32-sparc.c:157 +#, c-format +msgid "%pB: unhandled sparc machine value '%lu' detected during write processing" +msgstr "%pB: во Ð²Ñ€ÐµÐ¼Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð·Ð°Ð¿Ð¸Ñи обнаружено необработанное машинное значение sparc «%lu»" + +#: elf32-spu.c:735 msgid "%X%P: overlay section %pA does not start on a cache line\n" msgstr "%X%P: раздел Ð¾Ð²ÐµÑ€Ð»ÐµÑ %pA не начинаетÑÑ Ñо Ñтроки кÑша\n" -#: elf32-spu.c:740 +#: elf32-spu.c:743 msgid "%X%P: overlay section %pA is larger than a cache line\n" msgstr "%X%P: раздел Ð¾Ð²ÐµÑ€Ð»ÐµÑ %pA больше Ñтроки кÑша\n" -#: elf32-spu.c:760 +#: elf32-spu.c:763 msgid "%X%P: overlay section %pA is not in cache area\n" msgstr "%X%P: раздел Ð¾Ð²ÐµÑ€Ð»ÐµÑ %pA не в облаÑти кÑша\n" -#: elf32-spu.c:801 +#: elf32-spu.c:804 #, c-format msgid "%X%P: overlay sections %pA and %pA do not start at the same address\n" msgstr "%X%P: разделы оверлеев %pA и %pA не начинаютÑÑ Ñ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ð¾Ð³Ð¾ адреÑа\n" -#: elf32-spu.c:1027 +#: elf32-spu.c:1030 #, c-format msgid "warning: call to non-function symbol %s defined in %pB" msgstr "предупреждение: вызов Ñимвола не-функции %s, определённой в %pB" -#: elf32-spu.c:1377 +#: elf32-spu.c:1380 #, c-format msgid "%pA:0x%v lrlive .brinfo (%u) differs from analysis (%u)\n" msgstr "%pA:0x%v lrlive .brinfo (%u) отличаетÑÑ Ð¾Ñ‚ анализируемого (%u)\n" -#: elf32-spu.c:1909 +#: elf32-spu.c:1910 #, c-format msgid "%pB is not allowed to define %s" msgstr "%pB не разрешено определÑÑ‚ÑŒ %s" -#: elf32-spu.c:1917 +#: elf32-spu.c:1918 #, c-format msgid "you are not allowed to define %s in a script" msgstr "вам не разрешено определÑÑ‚ÑŒ %s в Ñценарии" -#: elf32-spu.c:1951 +#: elf32-spu.c:1952 #, c-format msgid "%s in overlay section" msgstr "%s в разделе оверлеев" -#: elf32-spu.c:1980 +#: elf32-spu.c:1981 msgid "overlay stub relocation overflow" msgstr "переполнение оверлейной заглушки перемещениÑ" -#: elf32-spu.c:1989 elf64-ppc.c:13230 +#: elf32-spu.c:1990 elf64-ppc.c:14496 msgid "stubs don't match calculated size" msgstr "заглушка не ÑоответÑтвует вычиÑленному размеру" -#: elf32-spu.c:2572 +#: elf32-spu.c:2573 #, c-format msgid "warning: %s overlaps %s\n" msgstr "предупреждение: %s перекрываетÑÑ Ñ %s\n" -#: elf32-spu.c:2588 +#: elf32-spu.c:2589 #, c-format msgid "warning: %s exceeds section size\n" msgstr "предупреждение: %s превышает размер раздела\n" -#: elf32-spu.c:2620 +#: elf32-spu.c:2621 #, c-format msgid "%pA:0x%v not found in function table\n" msgstr "%pA:0x%v не найдена в таблице функций\n" -#: elf32-spu.c:2761 +#: elf32-spu.c:2762 #, c-format msgid "%pB(%pA+0x%v): call to non-code section %pB(%pA), analysis incomplete\n" msgstr "%pB(%pA+0x%v): вызов не кодового раздела %pB(%pA), анализ не полон\n" -#: elf32-spu.c:3330 +#: elf32-spu.c:3328 #, c-format msgid "stack analysis will ignore the call from %s to %s\n" msgstr "в анализе Ñтека будет игнорироватьÑÑ Ð²Ñ‹Ð·Ð¾Ð² из %s в %s\n" -#: elf32-spu.c:4027 +#: elf32-spu.c:4025 msgid " calls:\n" msgstr " вызовы:\n" -#: elf32-spu.c:4341 +#: elf32-spu.c:4340 #, c-format msgid "%s duplicated in %s\n" msgstr "%s повторÑетÑÑ Ð² %s\n" -#: elf32-spu.c:4345 +#: elf32-spu.c:4344 #, c-format msgid "%s duplicated\n" msgstr "%s повторÑетÑÑ\n" -#: elf32-spu.c:4352 +#: elf32-spu.c:4351 msgid "sorry, no support for duplicate object files in auto-overlay script\n" msgstr "поддержка повторÑющихÑÑ Ð¾Ð±ÑŠÐµÐºÑ‚Ð½Ñ‹Ñ… файлов в Ñценарии auto-overlay пока не Ñделана\n" -#: elf32-spu.c:4394 +#: elf32-spu.c:4393 #, c-format msgid "non-overlay size of 0x%v plus maximum overlay size of 0x%v exceeds local store\n" msgstr "не оверлейный размер 0x%v Ð¿Ð»ÑŽÑ Ð¼Ð°ÐºÑимальный размер Ð¾Ð²ÐµÑ€Ð»ÐµÑ 0x%v превышает локальное хранилище\n" -#: elf32-spu.c:4550 +#: elf32-spu.c:4549 #, c-format msgid "%pB:%pA%s exceeds overlay size\n" msgstr "%pB:%pA%s превышает размер оверлеÑ\n" -#: elf32-spu.c:4691 +#: elf32-spu.c:4690 msgid "%F%P: auto overlay error: %E\n" msgstr "%F%P: ошибка автоматичеÑкого оверлеÑ: %E\n" -#: elf32-spu.c:4712 +#: elf32-spu.c:4711 msgid "Stack size for call graph root nodes.\n" msgstr "Размер Ñтека Ð´Ð»Ñ Ð²Ñ‹Ð·Ð¾Ð²Ð° графа корневых узлов.\n" -#: elf32-spu.c:4713 +#: elf32-spu.c:4712 msgid "" "\n" "Stack size for functions. Annotations: '*' max stack, 't' tail call\n" @@ -3455,19 +3548,19 @@ "\n" "Размер Ñтека Ð´Ð»Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¹. ПримечаниÑ: '*' Ð¼Ð°ÐºÑ Ñтек, 't' хвоÑтовой вызов\n" -#: elf32-spu.c:4723 +#: elf32-spu.c:4722 msgid "Maximum stack required is 0x%v\n" msgstr "Ð”Ð»Ñ Ð¼Ð°ÐºÑимального Ñтека требуетÑÑ 0x%v\n" -#: elf32-spu.c:4742 +#: elf32-spu.c:4741 msgid "%X%P: stack/lrlive analysis error: %E\n" msgstr "%X%P: ошибка при анализе Ñтека/lrlive: %E\n" -#: elf32-spu.c:4745 +#: elf32-spu.c:4744 msgid "%F%P: can not build overlay stubs: %E\n" msgstr "%F%P: невозможно Ñобрать заглушки оверлеÑ: %E\n" -#: elf32-spu.c:4814 +#: elf32-spu.c:4813 msgid "fatal error while creating .fixup" msgstr "неиÑÐ¿Ñ€Ð°Ð²Ð¸Ð¼Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° при Ñоздании .fixup" @@ -3476,275 +3569,274 @@ msgid "%pB(%s+%#): unresolvable %s relocation against symbol `%s'" msgstr "%pB(%s+%#): неразрешимое перемещение %s Ð´Ð»Ñ Ñимвола «%s»" -#: elf32-tic6x.c:1628 +#: elf32-tic6x.c:1588 msgid "warning: generating a shared library containing non-PIC code" msgstr "предупреждение: Ð³ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ñ Ð¾Ð±Ñ‰ÐµÐ¹ библиотеки Ñодержащей не-PIC код" -#: elf32-tic6x.c:1633 +#: elf32-tic6x.c:1593 msgid "warning: generating a shared library containing non-PID code" msgstr "предупреждение: Ð³ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ñ Ð¾Ð±Ñ‰ÐµÐ¹ библиотеки Ñодержащей не-PID код" -#: elf32-tic6x.c:2493 +#: elf32-tic6x.c:2434 #, c-format msgid "%pB: SB-relative relocation but __c6xabi_DSBT_BASE not defined" msgstr "%pB: отноÑительное перемещение SB, но __c6xabi_DSBT_BASE не определён" -#: elf32-tic6x.c:3629 +#: elf32-tic6x.c:3511 #, c-format msgid "%pB: error: unknown mandatory EABI object attribute %d" msgstr "%pB: ошибка: неизвеÑтный обÑзательный атрибут EABI-объекта %d" -#: elf32-tic6x.c:3638 +#: elf32-tic6x.c:3520 #, c-format msgid "%pB: warning: unknown EABI object attribute %d" msgstr "%pB: предупреждение: неизвеÑтный атрибут EABI-объекта %d" -#: elf32-tic6x.c:3752 elf32-tic6x.c:3761 +#: elf32-tic6x.c:3638 elf32-tic6x.c:3647 #, c-format msgid "error: %pB requires more stack alignment than %pB preserves" msgstr "ошибка: Ð´Ð»Ñ %pB требуетÑÑ Ð±Ð¾Ð»ÑŒÑˆÐµÐµ выравнивание Ñтека, чем Ñохранено в %pB" -#: elf32-tic6x.c:3771 elf32-tic6x.c:3780 +#: elf32-tic6x.c:3657 elf32-tic6x.c:3666 #, c-format msgid "error: unknown Tag_ABI_array_object_alignment value in %pB" msgstr "ошибка: неизвеÑтное значение Tag_ABI_array_object_alignment в %pB" -#: elf32-tic6x.c:3789 elf32-tic6x.c:3798 +#: elf32-tic6x.c:3675 elf32-tic6x.c:3684 #, c-format msgid "error: unknown Tag_ABI_array_object_align_expected value in %pB" msgstr "ошибка: неизвеÑтное значение Tag_ABI_array_object_align_expected в %pB" -#: elf32-tic6x.c:3807 elf32-tic6x.c:3815 +#: elf32-tic6x.c:3693 elf32-tic6x.c:3701 #, c-format msgid "error: %pB requires more array alignment than %pB preserves" msgstr "ошибка: Ð´Ð»Ñ %pB требуетÑÑ Ð±Ð¾Ð»ÑŒÑˆÐµÐµ выравнивание маÑÑива, чем Ñохранено в %pB" -#: elf32-tic6x.c:3838 +#: elf32-tic6x.c:3724 #, c-format msgid "warning: %pB and %pB differ in wchar_t size" msgstr "предупреждение: в %pB и %pB различаетÑÑ Ñ€Ð°Ð·Ð¼ÐµÑ€ wchar_t" -#: elf32-tic6x.c:3857 +#: elf32-tic6x.c:3743 #, c-format msgid "warning: %pB and %pB differ in whether code is compiled for DSBT" msgstr "предупреждение: в %pB и %pB по-разному Ñкомпилирован код Ð´Ð»Ñ DSBT" -#: elf32-tilepro.c:3761 elfxx-tilegx.c:4145 elfxx-x86.c:1432 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:9530 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2579 +#: elf32-tilepro.c:3635 elfxx-tilegx.c:4019 elfxx-x86.c:1393 +#: elfnn-aarch64.c:9704 elfnn-riscv.c:2522 #, c-format msgid "discarded output section: `%pA'" msgstr "отброшенный выходной раздел: «%pA»" -#: elf32-v850.c:153 +#: elf32-v850.c:152 #, c-format msgid "variable `%s' cannot occupy in multiple small data regions" msgstr "Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ Â«%s» не может занимать неÑколько маленьких облаÑтей данных" -#: elf32-v850.c:156 +#: elf32-v850.c:155 #, c-format msgid "variable `%s' can only be in one of the small, zero, and tiny data regions" msgstr "Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ Â«%s» может быть только в одном из маленьких, нулевых и крошечных облаÑтей данных" -#: elf32-v850.c:159 +#: elf32-v850.c:158 #, c-format msgid "variable `%s' cannot be in both small and zero data regions simultaneously" msgstr "Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ Â«%s» не может быть в маленьких и нулевых облаÑÑ‚ÑÑ… данных одновременно" -#: elf32-v850.c:162 +#: elf32-v850.c:161 #, c-format msgid "variable `%s' cannot be in both small and tiny data regions simultaneously" msgstr "Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ Â«%s» не может быть в маленьких и крошечных облаÑÑ‚ÑÑ… данных одновременно" -#: elf32-v850.c:165 +#: elf32-v850.c:164 #, c-format msgid "variable `%s' cannot be in both zero and tiny data regions simultaneously" msgstr "Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ Â«%s» не может быть в нулевых и крошечных облаÑÑ‚ÑÑ… данных одновременно" -#: elf32-v850.c:463 +#: elf32-v850.c:462 msgid "failed to find previous HI16 reloc" msgstr "не удалоÑÑŒ найти предыдущее перемещение HI16" -#: elf32-v850.c:2303 +#: elf32-v850.c:2302 msgid "could not locate special linker symbol __gp" msgstr "невозможно отыÑкать Ñпециальный Ñимвол компоновки __gp" -#: elf32-v850.c:2307 +#: elf32-v850.c:2306 msgid "could not locate special linker symbol __ep" msgstr "невозможно отыÑкать Ñпециальный Ñимвол компоновки __ep" -#: elf32-v850.c:2311 +#: elf32-v850.c:2310 msgid "could not locate special linker symbol __ctbp" msgstr "невозможно отыÑкать Ñпециальный Ñимвол компоновки __ctbp" -#: elf32-v850.c:2532 +#: elf32-v850.c:2531 #, c-format msgid "error: %pB needs 8-byte alignment but %pB is set for 4-byte alignment" msgstr "ошибка: Ð´Ð»Ñ %pB требуетÑÑ 8-байтовое выравнивание, но Ð´Ð»Ñ %pB задано 4-байтовое выравнивание" -#: elf32-v850.c:2548 +#: elf32-v850.c:2547 #, c-format msgid "error: %pB uses 64-bit doubles but %pB uses 32-bit doubles" msgstr "ошибка: в %pB иÑпользуютÑÑ 64-битные double, но в %pB иÑпользуют 32-битные double" -#: elf32-v850.c:2563 +#: elf32-v850.c:2562 #, c-format msgid "error: %pB uses FPU-3.0 but %pB only supports FPU-2.0" msgstr "ошибка: в %pB иÑпользуетÑÑ FPU-3.0, в то Ð²Ñ€ÐµÐ¼Ñ ÐºÐ°Ðº %pB поддерживает только FPU-2.0" -#: elf32-v850.c:2595 +#: elf32-v850.c:2594 #, c-format msgid " alignment of 8-byte entities: " msgstr " выравнивание 8-байтовых Ñлементов: " -#: elf32-v850.c:2598 +#: elf32-v850.c:2597 #, c-format msgid "4-byte" msgstr "4-байтовое" -#: elf32-v850.c:2599 +#: elf32-v850.c:2598 #, c-format msgid "8-byte" msgstr "8-байтовое" -#: elf32-v850.c:2600 elf32-v850.c:2612 +#: elf32-v850.c:2599 elf32-v850.c:2611 #, c-format msgid "not set" msgstr " [не задано]" -#: elf32-v850.c:2601 elf32-v850.c:2613 elf32-v850.c:2625 elf32-v850.c:2636 -#: elf32-v850.c:2647 elf32-v850.c:2658 +#: elf32-v850.c:2600 elf32-v850.c:2612 elf32-v850.c:2624 elf32-v850.c:2635 +#: elf32-v850.c:2646 elf32-v850.c:2657 #, c-format msgid "unknown: %x" msgstr "неизвеÑтно: %x" -#: elf32-v850.c:2607 +#: elf32-v850.c:2606 #, c-format msgid " size of doubles: " msgstr " размер double: " -#: elf32-v850.c:2610 +#: elf32-v850.c:2609 #, c-format msgid "4-bytes" msgstr "4-байтовые" -#: elf32-v850.c:2611 +#: elf32-v850.c:2610 #, c-format msgid "8-bytes" msgstr "8-байтовые" -#: elf32-v850.c:2619 +#: elf32-v850.c:2618 #, c-format msgid " FPU support required: " msgstr " Ñ‚Ñ€ÐµÐ±ÑƒÐµÐ¼Ð°Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ° FPU: " -#: elf32-v850.c:2622 +#: elf32-v850.c:2621 #, c-format msgid "FPU-2.0" msgstr "FPU-2.0" -#: elf32-v850.c:2623 +#: elf32-v850.c:2622 #, c-format msgid "FPU-3.0" msgstr "FPU-3.0" -#: elf32-v850.c:2624 +#: elf32-v850.c:2623 #, c-format msgid "none" msgstr "не требуетÑÑ" -#: elf32-v850.c:2631 +#: elf32-v850.c:2630 #, c-format msgid "SIMD use: " msgstr "ИÑпользование SIMD: " -#: elf32-v850.c:2634 elf32-v850.c:2645 elf32-v850.c:2656 +#: elf32-v850.c:2633 elf32-v850.c:2644 elf32-v850.c:2655 #, c-format msgid "yes" msgstr "да" -#: elf32-v850.c:2635 elf32-v850.c:2646 elf32-v850.c:2657 +#: elf32-v850.c:2634 elf32-v850.c:2645 elf32-v850.c:2656 #, c-format msgid "no" msgstr "нет" -#: elf32-v850.c:2642 +#: elf32-v850.c:2641 #, c-format msgid "CACHE use: " msgstr "ИÑпользование CACHE: " -#: elf32-v850.c:2653 +#: elf32-v850.c:2652 #, c-format msgid "MMU use: " msgstr "ИÑпользование MMU: " -#: elf32-v850.c:2820 elf32-v850.c:2876 +#: elf32-v850.c:2819 elf32-v850.c:2875 #, c-format msgid "%pB: architecture mismatch with previous modules" msgstr "%pB: архитектура не Ñовпадает Ñ Ð¸Ñпользованной в предыдущих модулÑÑ…" #. xgettext:c-format. -#: elf32-v850.c:2894 +#: elf32-v850.c:2893 #, c-format msgid "private flags = %lx: " msgstr "ÑобÑтвенные флаги = %lx: " -#: elf32-v850.c:2899 +#: elf32-v850.c:2898 #, c-format msgid "unknown v850 architecture" msgstr "неизвеÑÑ‚Ð½Ð°Ñ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° v850" -#: elf32-v850.c:2901 +#: elf32-v850.c:2900 #, c-format msgid "v850 E3 architecture" msgstr "архитектура v850 E3" -#: elf32-v850.c:2903 elf32-v850.c:2910 +#: elf32-v850.c:2902 elf32-v850.c:2909 #, c-format msgid "v850 architecture" msgstr "архитектура v850" -#: elf32-v850.c:2911 +#: elf32-v850.c:2910 #, c-format msgid "v850e architecture" msgstr "архитектура v850e" -#: elf32-v850.c:2912 +#: elf32-v850.c:2911 #, c-format msgid "v850e1 architecture" msgstr "архитектура v850e1" -#: elf32-v850.c:2913 +#: elf32-v850.c:2912 #, c-format msgid "v850e2 architecture" msgstr "архитектура v850e2" -#: elf32-v850.c:2914 +#: elf32-v850.c:2913 #, c-format msgid "v850e2v3 architecture" msgstr "архитектура v850e2v3" -#: elf32-v850.c:2915 +#: elf32-v850.c:2914 #, c-format msgid "v850e3v5 architecture" msgstr "архитектура v850e3v5" -#: elf32-v850.c:3609 elf32-v850.c:3848 +#: elf32-v850.c:3612 elf32-v850.c:3851 #, c-format msgid "%pB: %#: warning: %s points to unrecognized insns" msgstr "%pB: %#: предупреждение: %s указывает на нераÑпознанные инÑтрукции" -#: elf32-v850.c:3619 elf32-v850.c:3858 +#: elf32-v850.c:3622 elf32-v850.c:3861 #, c-format msgid "%pB: %#: warning: %s points to unrecognized insn %#x" msgstr "%pB: %#: предупреждение: %s указывает на нераÑпознанную инÑтрукцию %#x" -#: elf32-v850.c:3665 elf32-v850.c:3893 +#: elf32-v850.c:3668 elf32-v850.c:3896 #, c-format msgid "%pB: %#: warning: %s points to unrecognized reloc" msgstr "%pB: %#: предупреждение: %s указывает на нераÑпознанное перемещение" -#: elf32-v850.c:3705 +#: elf32-v850.c:3708 #, c-format msgid "%pB: %#: warning: %s points to unrecognized reloc %#" msgstr "%pB: %#: предупреждение: %s указывает на нераÑпознанное перемещение по адреÑу %#" @@ -3769,22 +3861,22 @@ msgid "%pB: warning: GOT addend of % to `%s' does not match previous GOT addend of %" msgstr "%pB: предупреждение: добавление GOT из % к «%s» не Ñовпадает Ñ Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ð¼ добавлением GOT из %" -#: elf32-vax.c:1446 +#: elf32-vax.c:1389 #, c-format msgid "%pB: warning: PLT addend of % to `%s' from %pA section ignored" msgstr "%pB: предупреждение: добавление PLT из % к «%s» из раздела %pA игнорируетÑÑ" -#: elf32-vax.c:1572 +#: elf32-vax.c:1515 #, c-format msgid "%pB: warning: %s relocation against symbol `%s' from %pA section" msgstr "%pB: предупреждение: перемещение %s Ð´Ð»Ñ Ñимвола «%s» из раздела %pA" -#: elf32-vax.c:1579 +#: elf32-vax.c:1522 #, c-format msgid "%pB: warning: %s relocation to %# from %pA section" msgstr "%pB: предупреждение: перемещение %s к % из раздела %pA" -#: elf32-visium.c:821 +#: elf32-visium.c:824 #, c-format msgid "%pB: compiled %s -mtune=%s and linked with modules compiled %s -mtune=%s" msgstr "%pB: компилируетÑÑ Ñ %s -mtune=%s и компонуетÑÑ Ñ Ð¼Ð¾Ð´ÑƒÐ»Ñми, Ñкомпилированными Ñ %s -mtune=%s" @@ -3799,238 +3891,261 @@ msgid "error reading cpu type from elf private data" msgstr "ошибка Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ñ‚Ð¸Ð¿Ð° процеÑÑора из закрытых данных elf" -#: elf32-xstormy16.c:457 elf64-ia64-vms.c:2085 elf32-ia64.c:2353 -#: elf64-ia64.c:2353 +#: elf32-xstormy16.c:457 elf64-ia64-vms.c:2074 elfnn-ia64.c:2343 msgid "non-zero addend in @fptr reloc" msgstr "ненулевое добавление в перемещение @fptr" -#: elf32-xtensa.c:937 +#: elf32-xtensa.c:1001 #, c-format msgid "%pB(%pA): invalid property table" msgstr "%pB(%pA): Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð°Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° ÑвойÑтв" -#: elf32-xtensa.c:2675 +#: elf32-xtensa.c:2733 #, c-format msgid "%pB(%pA+%#): relocation offset out of range (size=%#)" msgstr "%pB(%pA+%): Ñмещение Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð²Ð½Ðµ диапазона (размер=%)" -#: elf32-xtensa.c:2758 elf32-xtensa.c:2881 +#: elf32-xtensa.c:2816 elf32-xtensa.c:2939 msgid "dynamic relocation in read-only section" msgstr "динамичеÑкое перемещение в разделе только Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ" -#: elf32-xtensa.c:2858 +#: elf32-xtensa.c:2916 msgid "TLS relocation invalid without dynamic sections" msgstr "TLS-перемещение недопуÑтимо без динамичеÑких разделов" -#: elf32-xtensa.c:3070 +#: elf32-xtensa.c:3126 msgid "internal inconsistency in size of .got.loc section" msgstr "внутреннÑÑ Ð½ÐµÑоглаÑованноÑÑ‚ÑŒ размера раздела .got.loc" -#: elf32-xtensa.c:3377 +#: elf32-xtensa.c:3432 #, c-format msgid "%pB: incompatible machine type; output is 0x%x; input is 0x%x" msgstr "%pB: неÑовмеÑтимый машинный тип; выходной 0x%x; входной 0x%x" -#: elf32-xtensa.c:4608 elf32-xtensa.c:4616 +#: elf32-xtensa.c:4726 elf32-xtensa.c:4734 msgid "attempt to convert L32R/CALLX to CALL failed" msgstr "попытка Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ L32R/CALLX в CALL завершилаÑÑŒ неудачно" -#: elf32-xtensa.c:6444 elf32-xtensa.c:6523 elf32-xtensa.c:7899 +#: elf32-xtensa.c:6559 elf32-xtensa.c:6638 elf32-xtensa.c:8064 #, c-format msgid "%pB(%pA+%#): could not decode instruction; possible configuration mismatch" msgstr "%pB(%pA+%#): невозможно декодировать инÑтрукцию; возможно неÑовпадение конфигурации" -#: elf32-xtensa.c:7638 +#: elf32-xtensa.c:7805 #, c-format msgid "%pB(%pA+%#): could not decode instruction for XTENSA_ASM_SIMPLIFY relocation; possible configuration mismatch" msgstr "%pB(%pA+%#): невозможно декодировать инÑтрукцию Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ XTENSA_ASM_SIMPLIFY; возможно неÑовпадение конфигурации" -#: elf32-xtensa.c:9493 +#: elf32-xtensa.c:9663 msgid "invalid relocation address" msgstr "недопуÑтимый Ð°Ð´Ñ€ÐµÑ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ" -#: elf32-xtensa.c:9543 +#: elf32-xtensa.c:9754 msgid "overflow after relaxation" msgstr "переполнение поÑле оÑлаблениÑ" -#: elf32-xtensa.c:10689 +#: elf32-xtensa.c:10900 #, c-format msgid "%pB(%pA+%#): unexpected fix for %s relocation" msgstr "%pB(%pA+%#): неожиданное назначение Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ %s" -#: elf64-alpha.c:472 +#: elf32-z80.c:473 +#, c-format +msgid "%pB: unsupported bfd mach %#lx" +msgstr "%pB: неподдерживаемое машинное bfd %#lx" + +#: elf32-z80.c:518 +#, c-format +msgid "%pB: unsupported mach %#x" +msgstr "%pB: Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ð°Ñ Ð¼Ð°ÑˆÐ¸Ð½Ð° %#x" + +#: elf32-z80.c:546 +#, c-format +msgid "%pB: unsupported arch %#x" +msgstr "%pB: Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ð°Ñ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° %#x" + +#: elf64-alpha.c:473 msgid "GPDISP relocation did not find ldah and lda instructions" msgstr "Ðе найдены инÑтрукции ldah и lda Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ GPDISP" -#: elf64-alpha.c:2463 +#: elf64-alpha.c:1999 elf64-alpha.c:2694 elflink.c:14885 +#, c-format +msgid "%pB: dynamic relocation against `%pT' in read-only section `%pA'\n" +msgstr "%pB: динамичеÑкое перемещение Ñ Â«%pT» в разделе только Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Â«%pA»\n" + +#: elf64-alpha.c:2451 #, c-format msgid "%pB: .got subsegment exceeds 64K (size %d)" msgstr "%pB: подраздел .got превышает 64K (размер %d)" -#: elf64-alpha.c:3018 elf64-alpha.c:3214 +#: elf64-alpha.c:2989 elf64-alpha.c:3183 #, c-format msgid "%pB: %pA+%#: warning: %s relocation against unexpected insn" msgstr "%pB: %pA+%#: предупреждение: перемещение %s Ñ Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð¾Ð¹ инÑтрукцией" -#: elf64-alpha.c:4415 elf64-alpha.c:4428 +#: elf64-alpha.c:4381 elf64-alpha.c:4394 #, c-format msgid "%pB: gp-relative relocation against dynamic symbol %s" msgstr "%pB: gp-отноÑительное перемещение Ð´Ð»Ñ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑкого Ñимвола %s" -#: elf64-alpha.c:4484 +#: elf64-alpha.c:4450 #, c-format msgid "%pB: change in gp: BRSGP %s" msgstr "%pB: изменение в gp: BRSGP %s" -#: elf64-alpha.c:4509 mach-o.c:615 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:499 +#: elf64-alpha.c:4475 mach-o.c:616 elfnn-riscv.c:485 msgid "" msgstr "<неизвеÑтно>" -#: elf64-alpha.c:4515 +#: elf64-alpha.c:4481 #, c-format msgid "%pB: !samegp reloc against symbol without .prologue: %s" msgstr "%pB: перемещение !samegp Ð´Ð»Ñ Ñимвола без .prologue: %s" -#: elf64-alpha.c:4573 +#: elf64-alpha.c:4539 #, c-format msgid "%pB: unhandled dynamic relocation against %s" msgstr "%pB: необработанное динамичеÑкое перемещение Ð´Ð»Ñ %s" -#: elf64-alpha.c:4608 +#: elf64-alpha.c:4574 #, c-format msgid "%pB: pc-relative relocation against undefined weak symbol %s" msgstr "%pB: pc-отноÑительное перемещение Ð´Ð»Ñ Ð½ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ð¾Ð³Ð¾ Ñлабого Ñимвола %s" -#: elf64-alpha.c:4674 +#: elf64-alpha.c:4640 #, c-format msgid "%pB: dtp-relative relocation against dynamic symbol %s" msgstr "%pB: dtp-отноÑительное перемещение Ð´Ð»Ñ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑкого Ñимвола %s" -#: elf64-alpha.c:4699 +#: elf64-alpha.c:4665 #, c-format msgid "%pB: tp-relative relocation against dynamic symbol %s" msgstr "%pB: tp-отноÑительное перемещение Ð´Ð»Ñ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑкого Ñимвола %s" +#. Only if it's not an unresolved symbol. +#: elf64-bpf.c:517 +msgid "internal error: relocation not supported" +msgstr "внутреннÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ°: перемещение не поддерживаетÑÑ" + #: elf64-gen.c:71 #, c-format msgid "%pB: Relocations in generic ELF (EM: %d)" msgstr "%pB: ÐŸÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð² универÑальном ELF (EM: %d)" -#: elf64-hppa.c:2081 +#: elf64-hppa.c:2032 #, c-format msgid "stub entry for %s cannot load .plt, dp offset = %" msgstr "Ñлемент заглушки Ð´Ð»Ñ %s не может загрузить .plt, Ñмещение dp = %#" -#: elf64-hppa.c:3286 +#: elf64-hppa.c:3236 #, c-format msgid "%pB(%pA+%#): cannot reach %s" msgstr "%pB(%pA+%#): невозможно добратьÑÑ Ð´Ð¾ %s" -#: elf64-ia64-vms.c:598 elf32-ia64.c:636 elf64-ia64.c:636 +#: elf64-ia64-vms.c:598 elfnn-ia64.c:639 #, c-format msgid "%pB: can't relax br at %# in section `%pA'; please use brl or indirect branch" msgstr "%pB: невозможно оÑлабить br по адреÑу %# в разделе «%pA»; иÑпользуйте brl или коÑвенное ветвление" -#: elf64-ia64-vms.c:2040 elf32-ia64.c:2301 elf64-ia64.c:2301 +#: elf64-ia64-vms.c:2029 elfnn-ia64.c:2291 msgid "@pltoff reloc against local symbol" msgstr "перемещение @pltoff Ð´Ð»Ñ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñимвола" -#: elf64-ia64-vms.c:3292 elf32-ia64.c:3712 elf64-ia64.c:3712 +#: elf64-ia64-vms.c:3281 elfnn-ia64.c:3674 #, c-format msgid "%pB: short data segment overflowed (%# >= 0x400000)" msgstr "%pB: переполнение короткого Ñегмента данных (%# >= 0x400000)" -#: elf64-ia64-vms.c:3302 elf32-ia64.c:3722 elf64-ia64.c:3722 +#: elf64-ia64-vms.c:3291 elfnn-ia64.c:3684 #, c-format msgid "%pB: __gp does not cover short data segment" msgstr "%pB: __gp не покрывает короткий Ñегмент данных" -#: elf64-ia64-vms.c:3572 elf32-ia64.c:3996 elf64-ia64.c:3996 +#: elf64-ia64-vms.c:3561 elfnn-ia64.c:3958 #, c-format msgid "%pB: non-pic code with imm relocation against dynamic symbol `%s'" msgstr "%pB: не-pic код Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸ÐµÐ¼ imm Ð´Ð»Ñ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑкого Ñимвола «%s»" -#: elf64-ia64-vms.c:3636 elf32-ia64.c:4064 elf64-ia64.c:4064 +#: elf64-ia64-vms.c:3625 elfnn-ia64.c:4026 #, c-format msgid "%pB: @gprel relocation against dynamic symbol %s" msgstr "%pB: перемещение @gprel Ð´Ð»Ñ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑкого Ñимвола %s" -#: elf64-ia64-vms.c:3695 elf32-ia64.c:4127 elf64-ia64.c:4127 +#: elf64-ia64-vms.c:3684 elfnn-ia64.c:4089 #, c-format msgid "%pB: linking non-pic code in a position independent executable" msgstr "%pB: компоновка не-pic кода в позиционно-незавиÑимый иÑполнÑемый" -#: elf64-ia64-vms.c:3797 elf32-ia64.c:4265 elf64-ia64.c:4265 +#: elf64-ia64-vms.c:3786 elfnn-ia64.c:4227 #, c-format msgid "%pB: @internal branch to dynamic symbol %s" msgstr "%pB: ветвление @internal к динамичеÑкому Ñимволу %s" -#: elf64-ia64-vms.c:3800 elf32-ia64.c:4268 elf64-ia64.c:4268 +#: elf64-ia64-vms.c:3789 elfnn-ia64.c:4230 #, c-format msgid "%pB: speculation fixup to dynamic symbol %s" msgstr "%pB: догадка меÑÑ‚Ð¾Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑкого Ñимвола %s" -#: elf64-ia64-vms.c:3803 elf32-ia64.c:4271 elf64-ia64.c:4271 +#: elf64-ia64-vms.c:3792 elfnn-ia64.c:4233 #, c-format msgid "%pB: @pcrel relocation against dynamic symbol %s" msgstr "%pB: перемещение @pcrel Ð´Ð»Ñ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑкого Ñимвола %s" -#: elf64-ia64-vms.c:3927 elf32-ia64.c:4468 elf64-ia64.c:4468 +#: elf64-ia64-vms.c:3916 elfnn-ia64.c:4430 msgid "unsupported reloc" msgstr "неподдерживаемое перемещение" -#: elf64-ia64-vms.c:3964 elf32-ia64.c:4506 elf64-ia64.c:4506 +#: elf64-ia64-vms.c:3953 elfnn-ia64.c:4468 #, c-format msgid "%pB: missing TLS section for relocation %s against `%s' at %# in section `%pA'." msgstr "%pB: отÑутÑтвует TLS-раздел Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ %s Ð´Ð»Ñ Â«%s» по адреÑу %# в разделе «%pA»." -#: elf64-ia64-vms.c:3981 elf32-ia64.c:4523 elf64-ia64.c:4523 +#: elf64-ia64-vms.c:3970 elfnn-ia64.c:4485 #, c-format msgid "%pB: Can't relax br (%s) to `%s' at %# in section `%pA' with size %# (> 0x1000000)." msgstr "%pB: Ðевозможно оÑлабить br (%s) до «%s» по адреÑу %# в разделе «%pA» Ñ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð¾Ð¼ %# (> 0x1000000)." -#: elf64-ia64-vms.c:4273 elf32-ia64.c:4781 elf64-ia64.c:4781 +#: elf64-ia64-vms.c:4266 elfnn-ia64.c:4746 #, c-format msgid "%pB: linking trap-on-NULL-dereference with non-trapping files" msgstr "%pB: компоновка trap-on-NULL-dereference Ñ Ð½Ðµ-trapping файлами" -#: elf64-ia64-vms.c:4282 elf32-ia64.c:4790 elf64-ia64.c:4790 +#: elf64-ia64-vms.c:4275 elfnn-ia64.c:4755 #, c-format msgid "%pB: linking big-endian files with little-endian files" msgstr "%pB: компоновка файлов Ñ Ð¿Ñ€Ñмым порÑдком байт Ñ Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸ Ñ Ð¾Ð±Ñ€Ð°Ñ‚Ð½Ñ‹Ð¼ порÑдком байт" -#: elf64-ia64-vms.c:4291 elf32-ia64.c:4799 elf64-ia64.c:4799 +#: elf64-ia64-vms.c:4284 elfnn-ia64.c:4764 #, c-format msgid "%pB: linking 64-bit files with 32-bit files" msgstr "%pB: компоновка 64-битных файлов Ñ 32-битными файлами" -#: elf64-ia64-vms.c:4300 elf32-ia64.c:4808 elf64-ia64.c:4808 +#: elf64-ia64-vms.c:4293 elfnn-ia64.c:4773 #, c-format msgid "%pB: linking constant-gp files with non-constant-gp files" msgstr "%pB: компоновка constant-gp файлов Ñ Ð½Ðµ-constant-gp файлами" -#: elf64-ia64-vms.c:4310 elf32-ia64.c:4818 elf64-ia64.c:4818 +#: elf64-ia64-vms.c:4303 elfnn-ia64.c:4783 #, c-format msgid "%pB: linking auto-pic files with non-auto-pic files" msgstr "%pB: компоновка auto-pic файлов Ñ Ð½Ðµ-auto-pic файлами" -#: elf64-ia64-vms.c:5153 elflink.c:4894 +#: elf64-ia64-vms.c:5150 elflink.c:5072 #, c-format msgid "warning: alignment %u of common symbol `%s' in %pB is greater than the alignment (%u) of its section %pA" msgstr "предупреждение: выравнивание %u общего Ñимвола «%s» в %pB больше, чем выравнивание (%u) его раздела %pA" -#: elf64-ia64-vms.c:5160 elflink.c:4901 +#: elf64-ia64-vms.c:5157 elflink.c:5079 #, c-format msgid "warning: alignment %u of symbol `%s' in %pB is smaller than %u in %pB" msgstr "предупреждение: выравнивание %u Ñимвола «%s» в %pB меньше, чем %u в %pB" -#: elf64-ia64-vms.c:5176 elflink.c:4918 +#: elf64-ia64-vms.c:5173 elflink.c:5096 #, c-format msgid "warning: size of symbol `%s' changed from % in %pB to % in %pB" msgstr "предупреждение: размер Ñимвола «%s» изменилÑÑ Ñ % в %pB на % в %pB" -#: elf64-mips.c:4098 +#: elf64-mips.c:4095 #, c-format msgid "%pB(%pA): relocation % has invalid symbol index %ld" msgstr "%pB(%pA): перемещение % имеет некорректный Ð¸Ð½Ð´ÐµÐºÑ Ñимвола %ld" @@ -4077,147 +4192,160 @@ msgid "%pB: directive LOCAL valid only with a register or absolute value" msgstr "%pB: директива LOCAL разрешена только Ñ Ñ€ÐµÐ³Ð¸Ñтром или абÑолютным значением" -#: elf64-mmix.c:1744 +#: elf64-mmix.c:1742 #, c-format msgid "%pB: LOCAL directive: register $% is not a local register; first global register is $%" msgstr "%pB: директива LOCAL: региÑÑ‚Ñ€ $% не ÑвлÑетÑÑ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ñ‹Ð¼ региÑтром; первый глобальный региÑÑ‚Ñ€: $%" -#: elf64-mmix.c:2173 +#: elf64-mmix.c:2167 #, c-format msgid "%pB: error: multiple definition of `%s'; start of %s is set in a earlier linked file" msgstr "%pB: ошибка: множеÑтвенные объÑÐ²Ð»ÐµÐ½Ð¸Ñ Â«%s»; начало %s уÑтановлено в ранее Ñкомпонованном файле" -#: elf64-mmix.c:2228 +#: elf64-mmix.c:2222 msgid "register section has contents\n" msgstr "в региÑтровом разделе имеетÑÑ Ñодержимое\n" -#: elf64-mmix.c:2418 +#: elf64-mmix.c:2412 #, c-format msgid "internal inconsistency: remaining %lu != max %lu; please report this bug" msgstr "внутреннее противоречие: оÑтаётÑÑ %lu != Ð¼Ð°ÐºÑ %lu; Ñообщите об Ñтом дефекте" -#: elf64-ppc.c:3827 +#: elf64-ppc.c:1342 +#, c-format +msgid "warning: %s should be used rather than %s" +msgstr "предупреждение: нужно иÑпользовать %s, а не %s" + +#: elf64-ppc.c:4101 #, c-format msgid "symbol '%s' has invalid st_other for ABI version 1" msgstr "Ñимвол «%s» Ñодержит некорректное st_other Ð´Ð»Ñ ABI верÑии 1" -#: elf64-ppc.c:4002 +#: elf64-ppc.c:4281 #, c-format msgid "%pB .opd not allowed in ABI version %d" msgstr "%pB .opd запрещено в ABI верÑии %d" -#: elf64-ppc.c:4523 +#: elf64-ppc.c:4852 #, c-format msgid "%H: %s reloc unsupported in shared libraries and PIEs\n" msgstr "%H: перемещение %s не поддерживаетÑÑ Ð² общих библиотеках и PIE\n" -#: elf64-ppc.c:4919 +#: elf64-ppc.c:5260 #, c-format msgid "%pB uses unknown e_flags 0x%lx" msgstr "%pB иÑпользует неизвеÑтное значение e_flags 0x%lx" -#: elf64-ppc.c:4927 +#: elf64-ppc.c:5268 #, c-format msgid "%pB: ABI version %ld is not compatible with ABI version %ld output" msgstr "%pB: ABI верÑии %ld не ÑовмеÑтимо Ñ Ð²Ñ‹Ð²Ð¾Ð´Ð¾Ð¼ Ñ ABI верÑии %ld" -#: elf64-ppc.c:4954 +#: elf64-ppc.c:5295 #, c-format msgid " [abiv%ld]" msgstr " [abiv%ld]" -#: elf64-ppc.c:6145 +#: elf64-ppc.c:6574 msgid "%P: copy reloc against `%pT' requires lazy plt linking; avoid setting LD_BIND_NOW=1 or upgrade gcc\n" msgstr "%P: копирование Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Â«%pT» требует ленивой plt-компоновки; не задавайте LD_BIND_NOW=1 или обновите gcc\n" -#: elf64-ppc.c:6417 +#: elf64-ppc.c:6841 #, c-format msgid "%pB: undefined symbol on R_PPC64_TOCSAVE relocation" msgstr "%pB: неопределённый Ñимвол по перемещению R_PPC64_TOCSAVE" -#: elf64-ppc.c:6644 +#: elf64-ppc.c:7089 #, c-format msgid "dynreloc miscount for %pB, section %pA" msgstr "ошибка в вычиÑлении dynreloc %pB, раздел %pA" -#: elf64-ppc.c:6733 +#: elf64-ppc.c:7178 #, c-format msgid "%pB: .opd is not a regular array of opd entries" msgstr "%pB: .opd не ÑвлÑетÑÑ Ð¾Ð±Ñ‹Ñ‡Ð½Ñ‹Ð¼ маÑÑивом Ñлементов opd" -#: elf64-ppc.c:6743 +#: elf64-ppc.c:7188 #, c-format msgid "%pB: unexpected reloc type %u in .opd section" msgstr "%pB: неожиданный тип Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ %u в разделе .opd" -#: elf64-ppc.c:6765 +#: elf64-ppc.c:7210 #, c-format msgid "%pB: undefined sym `%s' in .opd section" msgstr "%pB: неопределённый Ñимвол «%s» в разделе .opd" -#: elf64-ppc.c:7249 +#: elf64-ppc.c:7697 msgid "warning: --plt-localentry is especially dangerous without ld.so support to detect ABI violations" msgstr "предупреждение: --plt-localentry оÑобенно опаÑно без поддержки в ld.so Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð½Ð°Ñ€ÑƒÑˆÐµÐ½Ð¸Ð¹ ABI" -#: elf64-ppc.c:7499 +#: elf64-ppc.c:8017 msgid "%H __tls_get_addr lost arg, TLS optimization disabled\n" msgstr "%H __tls_get_addr без аргумента, Ð¾Ð¿Ñ‚Ð¸Ð¼Ð¸Ð·Ð°Ñ†Ð¸Ñ TLS выключена\n" -#: elf64-ppc.c:7876 elf64-ppc.c:8513 +#: elf64-ppc.c:8417 elf64-ppc.c:9130 #, c-format msgid "%s defined on removed toc entry" msgstr "%s определён на удалённом Ñлементе toc" -#: elf64-ppc.c:8241 -#, c-format -msgid "%H: toc optimization is not supported for %s instruction\n" -msgstr "%H: Ð¾Ð¿Ñ‚Ð¸Ð¼Ð¸Ð·Ð°Ñ†Ð¸Ñ toc не поддерживаетÑÑ Ð´Ð»Ñ Ð¸Ð½Ñтрукции %s\n" - -#: elf64-ppc.c:8470 +#: elf64-ppc.c:9087 #, c-format msgid "%H: %s references optimized away TOC entry\n" msgstr "%H: %s ÑÑылаетÑÑ Ð½Ð° удалённый оптимизатором Ñлемент TOC\n" -#: elf64-ppc.c:9301 +#: elf64-ppc.c:9308 +#, c-format +msgid "%H: got/toc optimization is not supported for %s instruction\n" +msgstr "%H: Ð¾Ð¿Ñ‚Ð¸Ð¼Ð¸Ð·Ð°Ñ†Ð¸Ñ got/toc не поддерживаетÑÑ Ð´Ð»Ñ Ð¸Ð½Ñтрукции %s\n" + +#: elf64-ppc.c:10135 #, c-format msgid "warning: discarding dynamic section %s" msgstr "предупреждение: отбраÑываетÑÑ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑкий раздел %s" -#: elf64-ppc.c:10215 +#: elf64-ppc.c:11277 msgid "%P: cannot find opd entry toc for `%pT'\n" msgstr "%P: не удалоÑÑŒ найти opd у Ñлемента toc Ð´Ð»Ñ Â«%pT»\n" -#: elf64-ppc.c:10303 +#: elf64-ppc.c:11323 elf64-ppc.c:11867 +msgid "%F%P: Could not assign group %pA target %pA to an output section. Retry without --enable-non-contiguous-regions.\n" +msgstr "%F%P: Ðевозможно назначить группу %pA цели %pA выходному разделу. Повторите без --enable-non-contiguous-regions.\n" + +#: elf64-ppc.c:11385 #, c-format msgid "long branch stub `%s' offset overflow" msgstr "переполнение ÑÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð·Ð°Ð³Ð»ÑƒÑˆÐºÐ¸ длинного Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ñ Â«%s»" -#: elf64-ppc.c:10330 +#: elf64-ppc.c:11412 #, c-format msgid "can't find branch stub `%s'" msgstr "не найдена заглушка Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ñ Â«%s»" -#: elf64-ppc.c:10394 elf64-ppc.c:10642 elf64-ppc.c:12791 +#: elf64-ppc.c:11476 elf64-ppc.c:11743 elf64-ppc.c:13972 #, c-format msgid "%P: linkage table error against `%pT'\n" msgstr "%P: ошибка в таблице компоновки Ð´Ð»Ñ Â«%pT»\n" -#: elf64-ppc.c:10820 +#: elf64-ppc.c:11939 #, c-format msgid "can't build branch stub `%s'" msgstr "невозможно Ñобрать заглушку Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ñ Â«%s»" -#: elf64-ppc.c:11779 +#: elf64-ppc.c:12920 #, c-format msgid "%pB section %pA exceeds stub group size" msgstr "%pB раздела %pA превышает групповой размер заглушки" -#: elf64-ppc.c:13189 elf64-ppc.c:13208 +#: elf64-ppc.c:14153 +msgid "__tls_get_addr call offset overflow" +msgstr "__tls_get_addr вызвала перемещение ÑмещениÑ" + +#: elf64-ppc.c:14455 elf64-ppc.c:14474 #, c-format msgid "%s offset too large for .eh_frame sdata4 encoding" msgstr "Ñмещение %s Ñлишком больше Ð´Ð»Ñ ÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ sdata4 в .eh_frame" -#: elf64-ppc.c:13244 +#: elf64-ppc.c:14506 #, c-format msgid "linker stubs in %u group\n" msgid_plural "linker stubs in %u groups\n" @@ -4225,10 +4353,10 @@ msgstr[1] "заглушки компоновщика в %u группах\n" msgstr[2] "заглушки компоновщика в %u группах\n" -#: elf64-ppc.c:13248 +#: elf64-ppc.c:14513 #, c-format msgid "" -" branch %lu\n" +"%s branch %lu\n" " branch toc adj %lu\n" " branch notoc %lu\n" " branch both %lu\n" @@ -4242,7 +4370,7 @@ " plt call both %lu\n" " global entry %lu" msgstr "" -" ветвление %lu\n" +"%s ветвление %lu\n" " иÑправление Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ñ toc %lu\n" " ветвление не toc %lu\n" " оба Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ñ %lu\n" @@ -4256,178 +4384,185 @@ " оба plt-вызова %lu\n" " глобальный Ñлемент %lu" -#: elf64-ppc.c:13583 +#: elf64-ppc.c:14913 #, c-format msgid "%H: %s used with TLS symbol `%pT'\n" msgstr "%H: %s иÑпользуетÑÑ Ñ TLS-Ñимволом «%pT»\n" -#: elf64-ppc.c:13585 +#: elf64-ppc.c:14915 #, c-format msgid "%H: %s used with non-TLS symbol `%pT'\n" msgstr "%H: %s иÑпользуетÑÑ Ñ Ð½Ðµ TLS-Ñимволом «%pT»\n" -#: elf64-ppc.c:14245 +#: elf64-ppc.c:15670 #, c-format msgid "%H: call to `%pT' lacks nop, can't restore toc; (plt call stub)\n" msgstr "%H: вызов «%pT» указывает на не nop, невозможно воÑÑтановить toc; (вызов заглушки plt)\n" -#: elf64-ppc.c:14251 +#: elf64-ppc.c:15676 #, c-format msgid "%H: call to `%pT' lacks nop, can't restore toc; (toc save/adjust stub)\n" msgstr "%H: вызов «%pT» указывает на не nop, невозможно воÑÑтановить toc; (заглушка ÑохранениÑ/иÑÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ toc)\n" -#: elf64-ppc.c:14985 +#: elf64-ppc.c:16564 #, c-format msgid "%H: %s for indirect function `%pT' unsupported\n" msgstr "%H: %s Ð´Ð»Ñ Ð½ÐµÑвного вызова функции «%pT» не поддерживаетÑÑ\n" -#: elf64-ppc.c:15097 +#: elf64-ppc.c:16649 +#, c-format +msgid "%X%P: %pB: %s against %pT is not supported by glibc as a dynamic relocation\n" +msgstr "%X%P: %pB: %s Ñ %pT не поддерживаетÑÑ Ð² glibc как динамичеÑкое перемещение\n" + +#: elf64-ppc.c:16704 #, c-format msgid "%P: %pB: %s is not supported for `%pT'\n" msgstr "%P: %pB: %s не поддерживаетÑÑ Ð´Ð»Ñ Â«%pT»\n" -#: elf64-ppc.c:15326 +#: elf64-ppc.c:16963 #, c-format msgid "%H: error: %s not a multiple of %u\n" msgstr "%H: ошибка: %s не кратно %u\n" -#: elf64-ppc.c:15349 +#: elf64-ppc.c:16986 #, c-format msgid "%H: unresolvable %s against `%pT'\n" msgstr "%H: неразрешимое %s Ð´Ð»Ñ Ñимвола «%pT»\n" -#: elf64-ppc.c:15446 +#: elf64-ppc.c:17131 #, c-format msgid "%H: %s against `%pT': error %d\n" msgstr "%H: %s Ð´Ð»Ñ Â«%pT»: ошибка %d\n" -#: elf64-s390.c:2576 +#: elf64-s390.c:2446 #, c-format msgid "%pB: `%s' non-PLT reloc for symbol defined in shared library and accessed from executable (rebuild file with -fPIC ?)" msgstr "%pB: не PLT перемещение «%s» Ð´Ð»Ñ Ñимвола, определённого в общей библиотеке, к которому обращаютÑÑ Ð¸Ð· иÑполнÑемого файла (переÑоберите файл Ñ -fPIC ?)" -#: elf64-sparc.c:109 elfcode.h:1471 -#, c-format -msgid "%pB(%pA): relocation %d has invalid symbol index %ld" -msgstr "%pB(%pA): перемещение %d имеет некорректный Ð¸Ð½Ð´ÐµÐºÑ Ñимвола %ld" - -#: elf64-sparc.c:467 +#: elf64-sparc.c:478 #, c-format msgid "%pB: only registers %%g[2367] can be declared using STT_REGISTER" msgstr "%pB: только региÑтры %%g[2367] могут объÑвлÑÑ‚ÑŒÑÑ Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ STT_REGISTER" -#: elf64-sparc.c:488 +#: elf64-sparc.c:499 #, c-format msgid "register %%g%d used incompatibly: %s in %pB, previously %s in %pB" msgstr "неÑовмеÑтимое иÑпользование региÑтра %%g%d: %s в %pB, ранее %s в %pB" -#: elf64-sparc.c:512 +#: elf64-sparc.c:523 #, c-format msgid "symbol `%s' has differing types: REGISTER in %pB, previously %s in %pB" msgstr "Ñимвол «%s» имеет различные типы: REGISTER в %pB, ранее %s в %pB" -#: elf64-sparc.c:559 +#: elf64-sparc.c:570 #, c-format msgid "Symbol `%s' has differing types: %s in %pB, previously REGISTER in %pB" msgstr "Ñимвол «%s» имеет различные типы: %s в %pB, ранее REGISTER в %pB" -#: elf64-sparc.c:691 +#: elf64-sparc.c:702 #, c-format msgid "%pB: linking UltraSPARC specific with HAL specific code" msgstr "%pB: UltraSPARC-ÑÐ¿ÐµÑ†Ð¸Ñ„Ð¸Ñ‡Ð½Ð°Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ° Ñ HAL-Ñпецифичным кодом" -#: elf64-x86-64.c:1412 +#: elf64-x86-64.c:1417 msgid "hidden symbol " msgstr "Ñкрытый Ñимвол " -#: elf64-x86-64.c:1415 +#: elf64-x86-64.c:1420 msgid "internal symbol " msgstr "внутренний Ñимвол " -#: elf64-x86-64.c:1418 elf64-x86-64.c:1422 +#: elf64-x86-64.c:1423 elf64-x86-64.c:1427 msgid "protected symbol " msgstr "защищённый Ñимвол " -#: elf64-x86-64.c:1424 +#: elf64-x86-64.c:1429 msgid "symbol " msgstr "Ñимвол " -#: elf64-x86-64.c:1425 elf64-x86-64.c:1435 -msgid "; recompile with -fPIC" -msgstr "; перекомпилируйте Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ -fPIC" - -#: elf64-x86-64.c:1430 +#: elf64-x86-64.c:1435 msgid "undefined " msgstr "не определено " -#: elf64-x86-64.c:1439 +#: elf64-x86-64.c:1445 msgid "a shared object" msgstr "общий объект" -#: elf64-x86-64.c:1441 +#: elf64-x86-64.c:1447 +msgid "; recompile with -fPIC" +msgstr "; перекомпилируйте Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ -fPIC" + +#: elf64-x86-64.c:1452 msgid "a PIE object" msgstr "объект PIE" -#: elf64-x86-64.c:1443 +#: elf64-x86-64.c:1454 msgid "a PDE object" msgstr "объект PDE" -#: elf64-x86-64.c:1446 +#: elf64-x86-64.c:1456 +msgid "; recompile with -fPIE" +msgstr "; перекомпилируйте Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ -fPIE" + +#: elf64-x86-64.c:1460 #, c-format msgid "%pB: relocation %s against %s%s`%s' can not be used when making %s%s" msgstr "%pB: перемещение %s Ð´Ð»Ñ %s%s«%s» не может иÑпользоватьÑÑ Ð¿Ñ€Ð¸ Ñоздании %s%s" -#: elf64-x86-64.c:1931 +#: elf64-x86-64.c:1968 #, c-format msgid "%pB: relocation %s against symbol `%s' isn't supported in x32 mode" msgstr "%pB: перемещение %s Ð´Ð»Ñ Ñимвола «%s» не поддерживаетÑÑ Ð² режиме x32" -#: elf64-x86-64.c:2073 +#: elf64-x86-64.c:2124 #, c-format msgid "%pB: '%s' accessed both as normal and thread local symbol" msgstr "%pB: «%s» доÑтупен как обычный и как локальный Ð´Ð»Ñ Ð½Ð¸Ñ‚Ð¸ Ñимвол" -#: elf64-x86-64.c:2696 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:5302 +#: elf64-x86-64.c:2747 elfnn-aarch64.c:5546 #, c-format msgid "%pB: relocation %s against STT_GNU_IFUNC symbol `%s' has non-zero addend: %" msgstr "%pB: перемещение %s вмеÑте Ñ STT_GNU_IFUNC Ñимволом «%s» имеет ненулевое добавление: %" -#: elf64-x86-64.c:2934 +#: elf64-x86-64.c:2992 #, c-format msgid "%pB: relocation R_X86_64_GOTOFF64 against undefined %s `%s' can not be used when making a shared object" msgstr "%pB: перемещение R_X86_64_GOTOFF64 Ð´Ð»Ñ Ð½ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ð¾Ð³Ð¾ %s «%s» не может иÑпользоватьÑÑ Ð¿Ñ€Ð¸ Ñоздании общего объекта" -#: elf64-x86-64.c:2948 +#: elf64-x86-64.c:3006 #, c-format msgid "%pB: relocation R_X86_64_GOTOFF64 against protected %s `%s' can not be used when making a shared object" msgstr "%pB: перемещение R_X86_64_GOTOFF64 Ð´Ð»Ñ Ð·Ð°Ñ‰Ð¸Ñ‰Ñ‘Ð½Ð½Ð¾Ð³Ð¾ %s «%s» не может иÑпользоватьÑÑ Ð¿Ñ€Ð¸ Ñоздании общего объекта" -#: elf64-x86-64.c:3208 +#: elf64-x86-64.c:3283 #, c-format msgid "%pB: addend %s%#x in relocation %s against symbol `%s' at %# in section `%pA' is out of range" msgstr "%pB: добавление %s%#x в перемещении %s Ð´Ð»Ñ Ñимвола «%s» по адреÑу %# разделе «%pA»." -#: elf64-x86-64.c:3885 +#: elf64-x86-64.c:3417 elflink.c:13267 +msgid "%F%P: corrupt input: %pB\n" +msgstr "%F%P: повреждённый ввод: %pB\n" + +#: elf64-x86-64.c:4101 msgid "%F%P: failed to convert GOTPCREL relocation; relink with --no-relax\n" msgstr "%F%P: не удалоÑÑŒ преобразовать перемещение GOTPCREL; перекомпонуйте Ñ --no-relax\n" -#: elf64-x86-64.c:4043 +#: elf64-x86-64.c:4259 #, c-format msgid "%F%pB: PC-relative offset overflow in PLT entry for `%s'\n" msgstr "%F%pB: переполнение отноÑительного PC Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð² Ñлементе PLT Ð´Ð»Ñ Â«%s»\n" -#: elf64-x86-64.c:4106 +#: elf64-x86-64.c:4322 #, c-format msgid "%F%pB: branch displacement overflow in PLT entry for `%s'\n" msgstr "%F%pB: переполнение ветви переÑтановки в Ñлементе PLT Ð´Ð»Ñ Â«%s»\n" -#: elf64-x86-64.c:4159 +#: elf64-x86-64.c:4375 #, c-format msgid "%F%pB: PC-relative offset overflow in GOT PLT entry for `%s'\n" msgstr "%F%pB: переполнение отноÑительного PC Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð² Ñлементе GOT PLT Ð´Ð»Ñ Â«%s»\n" -#: elfcode.h:323 +#: elfcode.h:326 msgid "warning: %pB has a corrupt section with a size (%" msgstr "предупреждение: у %pB повреждён раздел размером (%" @@ -4436,656 +4571,813 @@ msgid "warning: %pB has a corrupt string table index - ignoring" msgstr "предупреждение: у %pB повреждена таблица индекÑов Ñтрок — игнорируетÑÑ" -#: elfcode.h:1212 +#: elfcode.h:1228 #, c-format msgid "%pB: version count (%) does not match symbol count (%ld)" msgstr "%pB: Ñчётчик верÑии (%) не Ñовпадает Ñо Ñчётчиком Ñимвола (%ld)" -#: elfcore.h:300 +#: elfcore.h:308 #, c-format msgid "warning: %pB is truncated: expected core file size >= %, found: %" msgstr "предупреждение: %pB уÑечён: ожидалÑÑ Ñ€Ð°Ð·Ð¼ÐµÑ€ файла core >= %, найдено: %" -#: elflink.c:1367 +#: elflink.c:1362 #, c-format msgid "%s: TLS definition in %pB section %pA mismatches non-TLS definition in %pB section %pA" msgstr "%s: TLS-определение в %pB раздела %pA не Ñовпадает Ñ Ð½Ðµ-TLS определением в %pB раздела %pA" -#: elflink.c:1373 +#: elflink.c:1368 #, c-format msgid "%s: TLS reference in %pB mismatches non-TLS reference in %pB" msgstr "%s: TLS-ÑÑылка в %pB не Ñовпадает Ñ Ð½Ðµ-TLS ÑÑылкой в %pB" -#: elflink.c:1379 +#: elflink.c:1374 #, c-format msgid "%s: TLS definition in %pB section %pA mismatches non-TLS reference in %pB" msgstr "%s: TLS-определение в %pB раздела %pA не Ñовпадает Ñ Ð½Ðµ-TLS ÑÑылкой в %pB" -#: elflink.c:1385 +#: elflink.c:1380 #, c-format msgid "%s: TLS reference in %pB mismatches non-TLS definition in %pB section %pA" msgstr "%s: TLS-ÑÑылка в %pB не Ñовпадает Ñ Ð½Ðµ-TLS определением в %pB раздела %pA" -#: elflink.c:2075 +#: elflink.c:2071 #, c-format msgid "%pB: unexpected redefinition of indirect versioned symbol `%s'" msgstr "%pB: неожиданное переопределение коÑвенного верÑионного Ñимвола «%s»" -#: elflink.c:2452 +#: elflink.c:2448 #, c-format msgid "%pB: version node not found for symbol %s" msgstr "%pB: верÑÐ¸Ñ ÑƒÐ·Ð»Ð° не найдена Ð´Ð»Ñ Ñимвола %s" -#: elflink.c:2541 +#: elflink.c:2539 #, c-format msgid "%pB: bad reloc symbol index (%# >= %#lx) for offset %# in section `%pA'" msgstr "%pB: неправильный Ð¸Ð½Ð´ÐµÐºÑ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰Ð°ÐµÐ¼Ð¾Ð³Ð¾ Ñимвола (%# >= %#lx) Ð´Ð»Ñ ÑÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ %# в разделе «%pA»" -#: elflink.c:2553 +#: elflink.c:2551 #, c-format msgid "%pB: non-zero symbol index (%#) for offset %# in section `%pA' when the object file has no symbol table" msgstr "%pB: ненулевой Ð¸Ð½Ð´ÐµÐºÑ Ñимвола (%#) Ð´Ð»Ñ ÑÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ %# в разделе «%pA», в то Ð²Ñ€ÐµÐ¼Ñ ÐºÐ°Ðº в объектном файле нет таблицы Ñимволов" -#: elflink.c:2744 +#: elflink.c:2740 #, c-format msgid "%pB: relocation size mismatch in %pB section %pA" msgstr "%pB: размер Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð½Ðµ Ñовпадает в %pB раздела %pA" -#: elflink.c:3066 +#: elflink.c:3069 #, c-format msgid "warning: type and size of dynamic symbol `%s' are not defined" msgstr "предупреждение: тип и размер динамичеÑкого Ñимвола «%s» не определён" -#: elflink.c:3128 +#: elflink.c:3129 msgid "%P: copy reloc against protected `%pT' is dangerous\n" msgstr "%P: копирование Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ñ Ð·Ð°Ñ‰Ð¸Ñ‰Ñ‘Ð½Ð½Ñ‹Ð¼ «%pT» опаÑно\n" -#: elflink.c:3932 +#: elflink.c:4064 #, c-format msgid "alternate ELF machine code found (%d) in %pB, expecting %d" msgstr "обнаружен альтернативный машинный код ELF (%d) в %pB, ожидаетÑÑ %d" -#: elflink.c:4598 +#: elflink.c:4534 +#, c-format +msgid "%pB: invalid version offset %lx (max %lx)" +msgstr "%pB: недопуÑтимое Ñмещение верÑии %lx (Ð¼Ð°ÐºÑ %lx)" + +#: elflink.c:4602 +#, c-format +msgid "%pB: %s local symbol at index %lu (>= sh_info of %lu)" +msgstr "%pB: локальный Ñимвол %s Ñ Ð¸Ð½Ð´ÐµÐºÑом %lu (>= sh_info Ñ %lu)" + +#: elflink.c:4750 +#, c-format +msgid "%pB: not enough version information" +msgstr "%pB: недоÑтаточно информации о верÑии" + +#: elflink.c:4788 #, c-format msgid "%pB: %s: invalid version %u (max %d)" msgstr "%pB: %s: недопуÑÑ‚Ð¸Ð¼Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ %u (Ð¼Ð°ÐºÑ %d)" -#: elflink.c:4635 +#: elflink.c:4825 #, c-format msgid "%pB: %s: invalid needed version %d" msgstr "%pB: %s: недопуÑÑ‚Ð¸Ð¼Ð°Ñ Ð½ÐµÐ¾Ð±Ñ…Ð¾Ð´Ð¸Ð¼Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ %d" -#: elflink.c:5054 +#: elflink.c:5231 #, c-format msgid "%pB: undefined reference to symbol '%s'" msgstr "%pB: Ð½ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ð°Ñ ÑÑылка на Ñимвол «%s»" -#: elflink.c:6130 +#: elflink.c:6315 #, c-format msgid "%pB: stack size specified and %s set" msgstr "%pB: указан и задан размер Ñтека %s" -#: elflink.c:6134 +#: elflink.c:6319 #, c-format msgid "%pB: %s not absolute" msgstr "%pB: %s не ÑвлÑетÑÑ Ð°Ð±Ñолютным" -#: elflink.c:6331 +#: elflink.c:6516 #, c-format msgid "%s: undefined version: %s" msgstr "%s: Ð½ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ð°Ñ Ð²ÐµÑ€ÑиÑ: %s" -#: elflink.c:6902 +#: elflink.c:7088 #, c-format msgid "%pB: .preinit_array section is not allowed in DSO" msgstr "%pB: раздел .preinit_array не разрешаетÑÑ Ð² DSO" -#: elflink.c:8359 +#: elflink.c:8602 #, c-format msgid "undefined %s reference in complex symbol: %s" msgstr "Ð½ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ð°Ñ ÑÑылка %s в Ñложном Ñимволе: %s" -#: elflink.c:8514 +#: elflink.c:8757 #, c-format msgid "unknown operator '%c' in complex symbol" msgstr "неизвеÑтный оператор '%c' в Ñложном Ñимволе" #. PR 21524: Let the user know if a symbol was removed by garbage collection. -#: elflink.c:8852 +#: elflink.c:9095 #, c-format msgid "%pB:%pA: error: relocation references symbol %s which was removed by garbage collection" msgstr "%pB:%pA: ошибка: перемещение ÑÑылаетÑÑ Ð½Ð° Ñимвол %s, который был удалён Ñборщиком муÑора" -#: elflink.c:8855 +#: elflink.c:9098 #, c-format msgid "%pB:%pA: error: try relinking with --gc-keep-exported enabled" msgstr "%pB:%pA: ошибка: попробуйте перекомпоновать Ñ Ð²ÐºÐ»ÑŽÑ‡Ñ‘Ð½Ð½Ñ‹Ð¼ --gc-keep-exported" -#: elflink.c:9091 elflink.c:9109 elflink.c:9148 elflink.c:9166 +#: elflink.c:9343 elflink.c:9361 elflink.c:9400 elflink.c:9418 #, c-format msgid "%pB: unable to sort relocs - they are in more than one size" msgstr "%pB: невозможно отÑортировать Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ â€” они разных размеров" #. The section size is not divisible by either - #. something is wrong. -#: elflink.c:9125 elflink.c:9182 +#: elflink.c:9377 elflink.c:9434 #, c-format msgid "%pB: unable to sort relocs - they are of an unknown size" msgstr "%pB: невозможно отÑортировать Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ â€” они неизвеÑтного размера" -#: elflink.c:9234 +#: elflink.c:9486 msgid "not enough memory to sort relocations" msgstr "недоÑтаточно памÑти Ð´Ð»Ñ Ñортировки перемещений" -#: elflink.c:9502 +#: elflink.c:9767 #, c-format msgid "%pB: too many sections: %d (>= %d)" msgstr "%pB: Ñлишком много разделов: %d (>= %d)" -#: elflink.c:9782 +#: elflink.c:10043 #, c-format msgid "%pB: internal symbol `%s' in %pB is referenced by DSO" msgstr "%pB: на внутренний Ñимвол «%s» из %pB ÑÑылаютÑÑ Ð¸Ð· DSO" -#: elflink.c:9785 +#: elflink.c:10046 #, c-format msgid "%pB: hidden symbol `%s' in %pB is referenced by DSO" msgstr "%pB: на Ñкрытый Ñимвол «%s» из %pB ÑÑылаютÑÑ Ð¸Ð· DSO" -#: elflink.c:9788 +#: elflink.c:10049 #, c-format msgid "%pB: local symbol `%s' in %pB is referenced by DSO" msgstr "%pB: на локальный Ñимвол «%s» из %pB ÑÑылаютÑÑ Ð¸Ð· DSO" -#: elflink.c:9874 +#: elflink.c:10135 #, c-format msgid "%pB: could not find output section %pA for input section %pA" msgstr "%pB: невозможно найти выходной раздел %pA Ð´Ð»Ñ Ð²Ñ…Ð¾Ð´Ð½Ð¾Ð³Ð¾ раздела %pA" -#: elflink.c:10028 +#: elflink.c:10289 #, c-format msgid "%pB: protected symbol `%s' isn't defined" msgstr "%pB: защищённый Ñимвол «%s» не определён" -#: elflink.c:10031 +#: elflink.c:10292 #, c-format msgid "%pB: internal symbol `%s' isn't defined" msgstr "%pB: внутренний Ñимвол «%s» не определён" -#: elflink.c:10034 +#: elflink.c:10295 #, c-format msgid "%pB: hidden symbol `%s' isn't defined" msgstr "%pB: Ñкрытый Ñимвол «%s» не определён" -#: elflink.c:10066 +#: elflink.c:10327 #, c-format msgid "%pB: no symbol version section for versioned symbol `%s'" msgstr "%pB: отÑутÑтвует раздел верÑий Ñимволов Ð´Ð»Ñ Ð²ÐµÑ€Ñионного Ñимвола «%s»" -#: elflink.c:10679 +#: elflink.c:10699 +#, c-format +msgid "warning: --enable-non-contiguous-regions discards section `%s' from '%s'\n" +msgstr "предупреждение: --enable-non-contiguous-regions отбраÑывает раздел «%s» из «%s»\n" + +#: elflink.c:10951 #, c-format msgid "error: %pB: size of section %pA is not multiple of address size" msgstr "ошибка: %pB: размер раздела %pA не кратен размеру адреÑа" -#: elflink.c:10724 +#: elflink.c:10996 #, c-format msgid "error: %pB contains a reloc (%#) for section %pA that references a non-existent global symbol" msgstr "ошибка: %pB Ñодержит перемещение (%#) Ð´Ð»Ñ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° %pA, который ÑÑылаетÑÑ Ð½Ð° неÑущеÑтвующий глобальный Ñимвол" -#: elflink.c:11484 +#: elflink.c:11739 #, c-format msgid "%pA has both ordered [`%pA' in %pB] and unordered [`%pA' in %pB] sections" msgstr "%pA Ñодержит упорÑдоченные [«%pA» в %pB] и неупорÑдоченные [«%pA» в %pB] разделы" -#: elflink.c:11490 +#: elflink.c:11745 #, c-format msgid "%pA has both ordered and unordered sections" msgstr "%pA Ñодержит упорÑдоченные и неупорÑдоченные разделы" -#: elflink.c:11592 +#: elflink.c:11851 #, c-format msgid "%pB: no symbol found for import library" msgstr "%pB: не найден Ñимвол импортируемой библиотеки" -#: elflink.c:12225 +#: elflink.c:12488 #, c-format msgid "%pB: file class %s incompatible with %s" msgstr "%pB: файловый клаÑÑ %s неÑовмеÑтим Ñ %s" -#: elflink.c:12442 +#: elflink.c:12704 #, c-format msgid "%pB: failed to generate import library" msgstr "%pB: не удалоÑÑŒ Ñгенерировать импортируемую библиотеку" -#: elflink.c:12561 +#: elflink.c:12823 #, c-format msgid "warning: %s section has zero size" msgstr "предупреждение: раздел %s имеет нулевой размер" -#: elflink.c:12609 +#: elflink.c:12871 #, c-format msgid "warning: section '%s' is being made into a note" msgstr "предупреждение: раздел «%s» преобразуетÑÑ Ð² примечание" -#: elflink.c:12701 +#: elflink.c:12964 msgid "%P%X: read-only segment has dynamic relocations\n" msgstr "%P%X: в Ñегменте, доÑтупном только Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ, ÑодержатÑÑ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑкие перемещениÑ\n" -#: elflink.c:12704 -msgid "%P: warning: creating a DT_TEXTREL in a shared object\n" +#: elflink.c:12967 +msgid "%P: warning: creating DT_TEXTREL in a shared object\n" msgstr "%P: предупреждение: ÑоздаётÑÑ DT_TEXTREL в общем объекте\n" -#: elflink.c:12829 +#: elflink.c:12970 +msgid "%P: warning: creating DT_TEXTREL in a PIE\n" +msgstr "%P: предупреждение: ÑоздаётÑÑ DT_TEXTREL в PIE\n" + +#: elflink.c:13095 msgid "%P%X: can not read symbols: %E\n" msgstr "%P%X: невозможно прочитать Ñимволы: %E\n" -#: elflink.c:13002 -msgid "%F%P: corrupt input: %pB\n" -msgstr "%F%P: повреждённый ввод: %pB\n" +#: elflink.c:13500 +msgid "%F%P: %pB(%pA): error: need linked-to section for --gc-sections\n" +msgstr "%F%P: %pB(%pA): ошибка: Ð´Ð»Ñ --gc-sections необходим раздел linked-to\n" -#: elflink.c:13668 +#: elflink.c:13961 #, c-format msgid "%pB: %pA+%#: no symbol found for INHERIT" msgstr "%pB: %pA+%#: не найден Ñимвол Ð´Ð»Ñ INHERIT" -#: elflink.c:13844 +#: elflink.c:14002 +#, c-format +msgid "%pB: section '%pA': corrupt VTENTRY entry" +msgstr "%pB: раздел «%pA:» повреждённый Ñлемент VTENTRY" + +#: elflink.c:14145 #, c-format msgid "unrecognized INPUT_SECTION_FLAG %s\n" msgstr "нераÑпознанный INPUT_SECTION_FLAG %s\n" -#: elfxx-mips.c:1450 +#: elflink.c:14891 +#, c-format +msgid "%P: %pB: warning: relocation against `%s' in read-only section `%pA'\n" +msgstr "%P: %pB: предупреждение: перемещение указывает на «%s» из раздела только Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Â«%pA»\n" + +#: elflink.c:14980 +msgid "%P: warning: GNU indirect functions with DT_TEXTREL may result in a segfault at runtime; recompile with %s\n" +msgstr "%P: предупреждение: неÑвные функции GNU Ñ DT_TEXTREL могут привеÑти к ошибке ÑÐµÐ³Ð¼ÐµÐ½Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð²Ð¾ Ð²Ñ€ÐµÐ¼Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ; перекомпилируйте Ñ %s\n" + +#: elfxx-aarch64.c:477 +#, c-format +msgid "%pB: warning: Weak TLS is implementation defined and may not work as expected" +msgstr "%pB: предупреждение: Ñлабый TLS определÑетÑÑ Ñ€ÐµÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸ÐµÐ¹ и может не работать как ожидаетÑÑ" + +#: elfxx-aarch64.c:738 elfnn-aarch64.c:9902 elfnn-aarch64.c:9909 +#, c-format +msgid "%pB: warning: BTI turned on by -z force-bti when all inputs do not have BTI in NOTE section." +msgstr "%pB: предупреждение: BTI включён параметром -z force-bti, но вÑе входные данные не имеют BTI в разделе NOTE." + +#: elfxx-aarch64.c:758 elfxx-x86.c:2554 +msgid "%F%P: failed to create GNU property section\n" +msgstr "%F%P: не удалоÑÑŒ Ñоздать раздел ÑвойÑтв GNU\n" + +#: elfxx-aarch64.c:762 elfxx-x86.c:2559 +#, c-format +msgid "%F%pA: failed to align section\n" +msgstr "%F%pA: не удалоÑÑŒ выровнÑÑ‚ÑŒ раздел\n" + +#: elfxx-aarch64.c:812 +#, c-format +msgid "error: %pB: " +msgstr "ошибка: %pB: <повреждение иÑпользуемого размера AArch64: 0x%x>" + +#: elfxx-mips.c:1507 msgid "static procedure (no name)" msgstr "ÑтатичеÑÐºÐ°Ñ Ð¿Ñ€Ð¾Ñ†ÐµÐ´ÑƒÑ€Ð° (без имени)" -#: elfxx-mips.c:5718 +#: elfxx-mips.c:5782 msgid "MIPS16 and microMIPS functions cannot call each other" msgstr "Функции MIPS16 и microMIPS не могут вызывать друг друга" -#: elfxx-mips.c:6485 +#: elfxx-mips.c:6547 msgid "%X%H: unsupported JALX to the same ISA mode\n" msgstr "%X%H: неподдерживаемый JALX Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾ же режима ISA\n" -#: elfxx-mips.c:6518 +#: elfxx-mips.c:6580 msgid "%X%H: unsupported jump between ISA modes; consider recompiling with interlinking enabled\n" msgstr "%X%H: неподдерживаемый прыжок между режимами ISA; попробуйте перекомпилировать Ñ Ð²ÐºÐ»ÑŽÑ‡Ñ‘Ð½Ð½Ð¾Ð¹ увÑзкой\n" -#: elfxx-mips.c:6563 +#: elfxx-mips.c:6625 msgid "%X%H: cannot convert branch between ISA modes to JALX: relocation out of range\n" msgstr "%X%H: невозможно преобразовать ветвление между режимами ISA в JALX: перемещение выходит за диапазон\n" -#: elfxx-mips.c:6575 +#: elfxx-mips.c:6637 msgid "%X%H: unsupported branch between ISA modes\n" msgstr "%X%H: неподдерживаемое ветвление между режимами ISA\n" -#: elfxx-mips.c:7223 +#: elfxx-mips.c:7286 #, c-format msgid "%pB: incorrect `.reginfo' section size; expected %, got %" msgstr "%pB: некорректный размер раздела «.reginfo»; ожидалÑÑ %, получен %" -#: elfxx-mips.c:7267 elfxx-mips.c:7502 +#: elfxx-mips.c:7330 elfxx-mips.c:7567 #, c-format msgid "%pB: warning: bad `%s' option size %u smaller than its header" msgstr "%pB: предупреждение: размер параметра «%s» (%u) меньше, чем его заголовок" -#: elfxx-mips.c:8300 elfxx-mips.c:8426 +#: elfxx-mips.c:8374 elfxx-mips.c:8500 #, c-format msgid "%pB: warning: cannot determine the target function for stub section `%s'" msgstr "%pB: предупреждение: невозможно определить функцию Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° заглушки «%s»" -#: elfxx-mips.c:8558 +#: elfxx-mips.c:8632 #, c-format msgid "%pB: malformed reloc detected for section %s" msgstr "%pB: обнаружено иÑкажённое перемещение в разделе %s" -#: elfxx-mips.c:8658 +#: elfxx-mips.c:8731 #, c-format msgid "%pB: GOT reloc at %# not expected in executables" msgstr "%pB: перемещение GOT по адреÑу %# не ожидаетÑÑ Ð² иÑполнÑемых файлах" -#: elfxx-mips.c:8796 +#: elfxx-mips.c:8871 #, c-format msgid "%pB: CALL16 reloc at %# not against global symbol" msgstr "%pB: перемещение CALL16 по адреÑу %# не Ð´Ð»Ñ Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñимвола" -#: elfxx-mips.c:9086 +#: elfxx-mips.c:9174 #, c-format msgid "%X%H: relocation %s against `%s' cannot be used when making a shared object; recompile with -fPIC\n" msgstr "%X%H: перемещение %s Ð´Ð»Ñ Â«%s» Ð½ÐµÐ»ÑŒÐ·Ñ Ð¸Ñпользовать при Ñоздании общего объекта; перекомпилируйте Ñ -fPIC\n" -#: elfxx-mips.c:9422 +#: elfxx-mips.c:9300 +#, c-format +msgid "IFUNC symbol %s in dynamic symbol table - IFUNCS are not supported" +msgstr "Символ IFUNC %s в таблице динамичеÑких Ñимволов — IFUNCS не поддерживаетÑÑ" + +#: elfxx-mips.c:9303 +#, c-format +msgid "non-dynamic symbol %s in dynamic symbol table" +msgstr "не динамичеÑкий Ñимвол %s в таблице динамичеÑких Ñимволов" + +#: elfxx-mips.c:9523 #, c-format msgid "non-dynamic relocations refer to dynamic symbol %s" msgstr "не-динамичеÑкие Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÑŽÑ‚ на динамичеÑкий Ñимвол %s" -#: elfxx-mips.c:10350 +#: elfxx-mips.c:10457 #, c-format msgid "%pB: can't find matching LO16 reloc against `%s' for %s at %# in section `%pA'" msgstr "%pB: невозможно найти подходÑщее LO16 перемещение у «%s» Ð´Ð»Ñ %s по адреÑу %# в разделе «%pA»" -#: elfxx-mips.c:10490 +#: elfxx-mips.c:10597 msgid "small-data section exceeds 64KB; lower small-data size limit (see option -G)" msgstr "раздел small-data превышает 64КБ — нижний предел small-data (Ñм. параметр -G)" -#: elfxx-mips.c:10509 +#: elfxx-mips.c:10616 msgid "cannot convert a jump to JALX for a non-word-aligned address" msgstr "невозможно преобразовать прыжок к JALX Ð´Ð»Ñ Ð½Ðµ выровненного по границе Ñлова адреÑа" -#: elfxx-mips.c:10512 +#: elfxx-mips.c:10619 msgid "jump to a non-word-aligned address" msgstr "прыжок по не выровненному по границе Ñлова адреÑу" -#: elfxx-mips.c:10513 +#: elfxx-mips.c:10620 msgid "jump to a non-instruction-aligned address" msgstr "прыжок по не выровненному по границе инÑтрукции адреÑу" -#: elfxx-mips.c:10516 +#: elfxx-mips.c:10623 msgid "cannot convert a branch to JALX for a non-word-aligned address" msgstr "невозможно преобразовать ветвление к JALX Ð´Ð»Ñ Ð½Ðµ выровненного по границе Ñлова адреÑа" -#: elfxx-mips.c:10518 +#: elfxx-mips.c:10625 msgid "branch to a non-instruction-aligned address" msgstr "ветвление по не выровненному по границе инÑтрукции адреÑу" -#: elfxx-mips.c:10520 +#: elfxx-mips.c:10627 msgid "PC-relative load from unaligned address" msgstr "загрузка отноÑительно PC из не выровненного адреÑа" -#: elfxx-mips.c:10798 +#: elfxx-mips.c:10927 #, c-format msgid "%pB: `%pA' entry VMA of %# outside the 32-bit range supported; consider using `-Ttext-segment=...'" msgstr "%pB: VMA Ñлемент «%pA» по адреÑу %# выходит за поддерживаемые границы 32-битного диапазона; попробуйте иÑпользовать «-Ttext-segment=…»" -#: elfxx-mips.c:10911 elfxx-mips.c:11484 +#: elfxx-mips.c:11042 elfxx-mips.c:11629 #, c-format msgid "%pB: `%pA' offset of % from `%pA' beyond the range of ADDIUPC" msgstr "%pB: Ñмещение «%pA» Ð´Ð»Ñ % из «%pA» вне диапазона ADDIUPC" -#: elfxx-mips.c:11456 +#: elfxx-mips.c:11601 #, c-format msgid "%pB: `%pA' start VMA of %# outside the 32-bit range supported; consider using `-Ttext-segment=...'" msgstr "%pB: Ñтартовый VMA Ñлемент «%pA» по адреÑу %# выходит за поддерживаемые границы 32-битного диапазона; попробуйте иÑпользовать «-Ttext-segment=…»" -#: elfxx-mips.c:14397 +#: elfxx-mips.c:14556 #, c-format msgid "%pB: unknown architecture %s" msgstr "%pB: неизвеÑÑ‚Ð½Ð°Ñ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° %s" -#: elfxx-mips.c:14931 +#: elfxx-mips.c:15090 #, c-format msgid "%pB: illegal section name `%pA'" msgstr "%pB: недопуÑтимое Ð¸Ð¼Ñ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° «%pA»" -#: elfxx-mips.c:15208 +#: elfxx-mips.c:15367 #, c-format msgid "%pB: warning: linking abicalls files with non-abicalls files" msgstr "%pB: предупреждение: компоновка файлов abicalls Ñ Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸ не-abicalls" -#: elfxx-mips.c:15225 +#: elfxx-mips.c:15384 #, c-format msgid "%pB: linking 32-bit code with 64-bit code" msgstr "%pB: компоновка 32-битного кода Ñ 64-битным кодом" -#: elfxx-mips.c:15257 elfxx-mips.c:15323 elfxx-mips.c:15338 +#: elfxx-mips.c:15416 elfxx-mips.c:15482 elfxx-mips.c:15497 #, c-format msgid "%pB: linking %s module with previous %s modules" msgstr "%pB: компоновка Ð¼Ð¾Ð´ÑƒÐ»Ñ %s Ñ Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ð¼Ð¸ модулÑми %s" -#: elfxx-mips.c:15281 +#: elfxx-mips.c:15440 #, c-format msgid "%pB: ABI mismatch: linking %s module with previous %s modules" msgstr "%pB: неÑовпадение ABI: компоновка Ð¼Ð¾Ð´ÑƒÐ»Ñ %s Ñ Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ð¼Ð¸ модулÑми %s" -#: elfxx-mips.c:15306 +#: elfxx-mips.c:15465 #, c-format msgid "%pB: ASE mismatch: linking %s module with previous %s modules" msgstr "%pB: неÑовпадение ASE: компоновка Ð¼Ð¾Ð´ÑƒÐ»Ñ %s Ñ Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ð¼Ð¸ модулÑми %s" -#: elfxx-mips.c:15440 +#: elfxx-mips.c:15599 #, c-format msgid "warning: %pB uses unknown floating point ABI %d (set by %pB), %pB uses unknown floating point ABI %d" msgstr "предупреждение: %pB иÑпользует неизвеÑтный ABI плавающей точки %d (заданный %pB), %pB иÑпользует неизвеÑтный ABI плавающей точки %d" -#: elfxx-mips.c:15446 +#: elfxx-mips.c:15605 #, c-format msgid "warning: %pB uses unknown floating point ABI %d (set by %pB), %pB uses %s" msgstr "предупреждение: %pB иÑпользует неизвеÑтный ABI плавающей точки %d (заданный %pB), %pB иÑпользует %s" -#: elfxx-mips.c:15452 +#: elfxx-mips.c:15611 #, c-format msgid "warning: %pB uses %s (set by %pB), %pB uses unknown floating point ABI %d" msgstr "предупреждение: %pB иÑпользует %s (заданный %pB), %pB иÑпользует неизвеÑтный ABI плавающей точки %d" -#: elfxx-mips.c:15466 +#: elfxx-mips.c:15625 #, c-format msgid "warning: %pB uses %s (set by %pB), %pB uses %s" msgstr "предупреждение: %pB иÑпользует %s (заданный %pB), %pB иÑпользует %s" -#: elfxx-mips.c:15485 +#: elfxx-mips.c:15644 #, c-format msgid "warning: %pB uses %s (set by %pB), %pB uses unknown MSA ABI %d" msgstr "предупреждение: %pB иÑпользует %s (заданный %pB), %pB иÑпользует неизвеÑтный ABI MSA %d" -#: elfxx-mips.c:15497 +#: elfxx-mips.c:15656 #, c-format msgid "warning: %pB uses unknown MSA ABI %d (set by %pB), %pB uses %s" msgstr "предупреждение: %pB иÑпользует неизвеÑтный ABI MSA %d (заданный %pB), %pB иÑпользует %s" -#: elfxx-mips.c:15506 +#: elfxx-mips.c:15665 #, c-format msgid "warning: %pB uses unknown MSA ABI %d (set by %pB), %pB uses unknown MSA ABI %d" msgstr "предупреждение: %pB иÑпользует неизвеÑтный ABI MSA %d (заданный %pB), %pB иÑпользует неизвеÑтный ABI MSA %d" -#: elfxx-mips.c:15568 +#: elfxx-mips.c:15727 #, c-format msgid "%pB: endianness incompatible with that of the selected emulation" msgstr "%pB: порÑдок байт не ÑовмеÑтим Ñ Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ð¾Ð¹ ÑмулÑцией" -#: elfxx-mips.c:15582 +#: elfxx-mips.c:15741 #, c-format msgid "%pB: ABI is incompatible with that of the selected emulation" msgstr "%pB: ABI не ÑовмеÑтим Ñ Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ð¾Ð¹ ÑмулÑцией" -#: elfxx-mips.c:15634 +#: elfxx-mips.c:15794 #, c-format msgid "%pB: warning: inconsistent ISA between e_flags and .MIPS.abiflags" msgstr "%pB: предупреждение: неÑоглаÑованноÑÑ‚ÑŒ ISA между e_flags и .MIPS.abiflags" -#: elfxx-mips.c:15639 +#: elfxx-mips.c:15799 #, c-format msgid "%pB: warning: inconsistent FP ABI between .gnu.attributes and .MIPS.abiflags" msgstr "%pB: предупреждение: неÑоглаÑованноÑÑ‚ÑŒ FP ABI между .gnu.attributes и .MIPS.abiflags" -#: elfxx-mips.c:15643 +#: elfxx-mips.c:15803 #, c-format msgid "%pB: warning: inconsistent ASEs between e_flags and .MIPS.abiflags" msgstr "%pB: предупреждение: неÑоглаÑованноÑÑ‚ÑŒ ASE между e_flags и .MIPS.abiflags" -#: elfxx-mips.c:15650 +#: elfxx-mips.c:15810 #, c-format msgid "%pB: warning: inconsistent ISA extensions between e_flags and .MIPS.abiflags" msgstr "%pB: предупреждение: неÑоглаÑованноÑÑ‚ÑŒ раÑширений ISA между e_flags и .MIPS.abiflags" -#: elfxx-mips.c:15654 +#: elfxx-mips.c:15814 #, c-format msgid "%pB: warning: unexpected flag in the flags2 field of .MIPS.abiflags (0x%lx)" msgstr "%pB: предупреждение: неожидаемый флаг в поле flags2 у .MIPS.abiflags (0x%lx)" -#: elfxx-mips.c:15843 +#: elfxx-mips.c:16005 msgid "-mips32r2 -mfp64 (12 callee-saved)" msgstr "-mips32r2 -mfp64 (12 ÑохранÑÑŽÑ‚ÑÑ Ð²Ñ‹Ð·Ñ‹Ð²Ð°ÐµÐ¼Ñ‹Ð¼)" -#: elfxx-mips.c:15905 elfxx-mips.c:15916 +#: elfxx-mips.c:16067 elfxx-mips.c:16078 msgid "None" msgstr "ОтÑутÑтвует" -#: elfxx-mips.c:15907 elfxx-mips.c:15976 +#: elfxx-mips.c:16069 elfxx-mips.c:16138 msgid "Unknown" msgstr "ÐеизвеÑтно" -#: elfxx-mips.c:15987 +#: elfxx-mips.c:16149 #, c-format msgid "Hard or soft float\n" msgstr "ÐÐ¿Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ð°Ñ Ð¸Ð»Ð¸ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð½Ð°Ñ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰Ð°Ñ Ð·Ð°Ð¿ÑтаÑ\n" -#: elfxx-mips.c:15990 +#: elfxx-mips.c:16152 #, c-format msgid "Hard float (double precision)\n" msgstr "ÐÐ¿Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ð°Ñ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰Ð°Ñ Ð·Ð°Ð¿ÑÑ‚Ð°Ñ (Ð´Ð²Ð¾Ð¹Ð½Ð°Ñ Ñ‚Ð¾Ñ‡Ð½Ð¾ÑÑ‚ÑŒ)\n" -#: elfxx-mips.c:15993 +#: elfxx-mips.c:16155 #, c-format msgid "Hard float (single precision)\n" msgstr "ÐÐ¿Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ð°Ñ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰Ð°Ñ Ð·Ð°Ð¿ÑÑ‚Ð°Ñ (Ð¾Ð´Ð¸Ð½Ð°Ñ€Ð½Ð°Ñ Ñ‚Ð¾Ñ‡Ð½Ð¾ÑÑ‚ÑŒ)\n" -#: elfxx-mips.c:15996 +#: elfxx-mips.c:16158 #, c-format msgid "Soft float\n" msgstr "ÐŸÑ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð½Ð°Ñ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰Ð°Ñ Ð·Ð°Ð¿ÑтаÑ\n" -#: elfxx-mips.c:15999 +#: elfxx-mips.c:16161 #, c-format msgid "Hard float (MIPS32r2 64-bit FPU 12 callee-saved)\n" msgstr "ÐÐ¿Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ð°Ñ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰Ð°Ñ Ð·Ð°Ð¿ÑÑ‚Ð°Ñ (MIPS32r2 64-bit FPU 12 ÑохранÑÑŽÑ‚ÑÑ Ð²Ñ‹Ð·Ñ‹Ð²Ð°ÐµÐ¼Ñ‹Ð¼)\n" -#: elfxx-mips.c:16002 +#: elfxx-mips.c:16164 #, c-format msgid "Hard float (32-bit CPU, Any FPU)\n" msgstr "ÐÐ¿Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ð°Ñ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰Ð°Ñ Ð·Ð°Ð¿ÑÑ‚Ð°Ñ (32-битный ЦП, любой FPU)\n" -#: elfxx-mips.c:16005 +#: elfxx-mips.c:16167 #, c-format msgid "Hard float (32-bit CPU, 64-bit FPU)\n" msgstr "ÐÐ¿Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ð°Ñ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰Ð°Ñ Ð·Ð°Ð¿ÑÑ‚Ð°Ñ (32-битный ЦП, 64-битный FPU)\n" -#: elfxx-mips.c:16008 +#: elfxx-mips.c:16170 #, c-format msgid "Hard float compat (32-bit CPU, 64-bit FPU)\n" msgstr "СовмеÑÑ‚Ð¸Ð¼Ð°Ñ Ð°Ð¿Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ð°Ñ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰Ð°Ñ Ð·Ð°Ð¿ÑÑ‚Ð°Ñ (32-битный ЦП, 64-битный FPU)\n" -#: elfxx-mips.c:16040 +#: elfxx-mips.c:16202 #, c-format msgid " [abi=O32]" msgstr " [abi=O32]" -#: elfxx-mips.c:16042 +#: elfxx-mips.c:16204 #, c-format msgid " [abi=O64]" msgstr " [abi=O64]" -#: elfxx-mips.c:16044 +#: elfxx-mips.c:16206 #, c-format msgid " [abi=EABI32]" msgstr " [abi=EABI32]" -#: elfxx-mips.c:16046 +#: elfxx-mips.c:16208 #, c-format msgid " [abi=EABI64]" msgstr " [abi=EABI64]" -#: elfxx-mips.c:16048 +#: elfxx-mips.c:16210 #, c-format msgid " [abi unknown]" msgstr " [abi неизвеÑтен]" -#: elfxx-mips.c:16050 +#: elfxx-mips.c:16212 #, c-format msgid " [abi=N32]" msgstr " [abi=N32]" -#: elfxx-mips.c:16052 +#: elfxx-mips.c:16214 #, c-format msgid " [abi=64]" msgstr " [abi=64]" -#: elfxx-mips.c:16054 +#: elfxx-mips.c:16216 #, c-format msgid " [no abi set]" msgstr " [abi не задан]" -#: elfxx-mips.c:16079 +#: elfxx-mips.c:16241 #, c-format msgid " [unknown ISA]" msgstr " [неизвеÑтный ISA]" -#: elfxx-mips.c:16099 +#: elfxx-mips.c:16261 #, c-format msgid " [not 32bitmode]" msgstr " [не 32-битный режим]" -#: elfxx-sparc.c:3113 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:5286 +#: elfxx-riscv.c:1063 +#, c-format +msgid "-march=%s: Expect number after `%dp'." +msgstr "-march=%s: ожидаетÑÑ Ñ‡Ð¸Ñло поÑле «%dp»." + +#: elfxx-riscv.c:1174 +#, c-format +msgid "-march=%s: rv%de is not a valid base ISA" +msgstr "-march=%s: rv%de Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ Ð±Ð°Ð·Ð° ISA" + +#: elfxx-riscv.c:1214 +#, c-format +msgid "-march=%s: first ISA subset must be `e', `i' or `g'" +msgstr "-march=%s: первый поднабор ISA должен быть «e», «i» или «g»" + +#: elfxx-riscv.c:1242 +#, c-format +msgid "-march=%s: unsupported ISA subset `%c'" +msgstr "-march=%s: неподдерживаемый поднабор ISA «%c»" + +#: elfxx-riscv.c:1245 +#, c-format +msgid "-march=%s: ISA string is not in canonical order. `%c'" +msgstr "-march=%s: Ñтрока ISA не в каноничном порÑдке. «%c»" + +#: elfxx-riscv.c:1364 +#, c-format +msgid "-march=%s: Invalid or unknown %s ISA extension: '%s'" +msgstr "-march=%s: некорректное или неизвеÑтно раÑширение ISA %s: «%s»" + +#: elfxx-riscv.c:1375 +#, c-format +msgid "-march=%s: Duplicate %s ISA extension: '%s'" +msgstr "-march=%s: повтор раÑÑˆÐ¸Ñ€ÐµÐ½Ð¸Ñ %s ISA: «%s»" + +#: elfxx-riscv.c:1386 +#, c-format +msgid "-march=%s: %s ISA extension not in alphabetical order: '%s' must come before '%s'." +msgstr "-march=%s: %s раÑширение ISA не в алфавитном порÑдке: «%s» должно идти перед «%s»." + +#: elfxx-riscv.c:1407 +#, c-format +msgid "-march=%s: %s must separate with _" +msgstr "-march=%s: %s должно отделÑÑ‚ÑŒÑÑ _" + +#: elfxx-riscv.c:1523 +#, c-format +msgid "-march=%s: ISA string must begin with rv32 or rv64" +msgstr "-march=%s: Ñтрока ISA должна начинатьÑÑ Ñ rv32 или rv64" + +#: elfxx-riscv.c:1544 +#, c-format +msgid "-march=%s: unexpected ISA string at end: %s" +msgstr "-march=%s: Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð°Ñ Ñтрока ISA в конце: %s" + +#: elfxx-riscv.c:1553 +#, c-format +msgid "-march=%s: rv32e does not support the `f' extension" +msgstr "-march=%s: rv32e не поддерживает раÑширение «f»" + +#: elfxx-riscv.c:1562 +#, c-format +msgid "-march=%s: `d' extension requires `f' extension" +msgstr "-march=%s: раÑширению «d» необходимо раÑширение «f»" + +#: elfxx-riscv.c:1571 +#, c-format +msgid "-march=%s: `q' extension requires `d' extension" +msgstr "-march=%s: раÑширению «q» необходимо раÑширение «d»" + +#: elfxx-riscv.c:1579 +#, c-format +msgid "-march=%s: rv32 does not support the `q' extension" +msgstr "-march=%s: rv32 не поддерживает раÑширение «q»" + +#: elfxx-sparc.c:3002 elfnn-aarch64.c:5530 #, c-format msgid "%pB: relocation %s against STT_GNU_IFUNC symbol `%s' isn't handled by %s" msgstr "%pB: перемещение %s вмеÑте Ñ STT_GNU_IFUNC Ñимволом «%s» не обрабатываетÑÑ %s" -#: elfxx-tilegx.c:4254 +#: elfxx-tilegx.c:4128 #, c-format msgid "%pB: cannot link together %s and %s objects" msgstr "%pB: невозможно Ñкомпоновать объекты %s и %s вмеÑте" -#: elfxx-x86.c:578 +#: elfxx-x86.c:976 #, c-format -msgid "%P: %pB: warning: relocation against `%s' in read-only section `%pA'\n" -msgstr "%P: %pB: предупреждение: перемещение указывает на «%s» из раздела только Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Â«%pA»\n" +msgid "%F%P: %pB: relocation %s against absolute symbol `%s' in section `%pA' is disallowed\n" +msgstr "%F%P: %pB: перемещение %s абÑолютного Ñимвола «%s» в разделе «%pA» запрещено\n" -#: elfxx-x86.c:1027 +#: elfxx-x86.c:1058 msgid "%P: %pB: warning: relocation in read-only section `%pA'\n" msgstr "%P: %pB: предупреждение: перемещение в разделе только Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Â«%pA»\n" -#: elfxx-x86.c:1383 -msgid "%P%X: read-only segment has dynamic IFUNC relocations; recompile with -fPIC\n" -msgstr "%P%X: в Ñегменте, доÑтупном только Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ, ÑодержатÑÑ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑкие Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ IFUNC; перекомпилируйте Ñ -fPIC\n" - -#: elfxx-x86.c:2384 +#: elfxx-x86.c:2314 #, c-format msgid "error: %pB: " msgstr "ошибка: %pB: <повреждение размера ÑвойÑтва x86 (0x%x): 0x%x>" -#: elfxx-x86.c:2609 -msgid "%F%P: failed to create GNU property section\n" -msgstr "%F%P: не удалоÑÑŒ Ñоздать раздел ÑвойÑтв GNU\n" +#: elfxx-x86.c:2580 +msgid "%P: %pB: warning: missing %s\n" +msgstr "%P: %pB: предупреждение: отÑутÑтвует %s\n" + +#: elfxx-x86.c:2582 +msgid "%X%P: %pB: error: missing %s\n" +msgstr "%X%P: %pB: ошибка: отÑутÑтвует %s\n" + +#: elfxx-x86.c:2605 +msgid "IBT and SHSTK properties" +msgstr "СвойÑтва IBT и SHSTK" + +#: elfxx-x86.c:2607 +msgid "IBT property" +msgstr "СвойÑтво IBT" -#: elfxx-x86.c:2614 -#, c-format -msgid "%F%pA: failed to align section\n" -msgstr "%F%pA: не удалоÑÑŒ выровнÑÑ‚ÑŒ раздел\n" +#: elfxx-x86.c:2609 +msgid "SHSTK property" +msgstr "СвойÑтво SHSTK" -#: elfxx-x86.c:2760 +#: elfxx-x86.c:2753 msgid "%F%P: failed to create VxWorks dynamic sections\n" msgstr "%F%P: не удалоÑÑŒ Ñоздать динамичеÑкие разделы VxWorks\n" -#: elfxx-x86.c:2769 +#: elfxx-x86.c:2762 msgid "%F%P: failed to create GOT sections\n" msgstr "%F%P: не удалоÑÑŒ Ñоздать разделы GOT\n" -#: elfxx-x86.c:2787 +#: elfxx-x86.c:2780 msgid "%F%P: failed to create ifunc sections\n" msgstr "%F%P: не удалоÑÑŒ Ñоздать разделы ifunc\n" -#: elfxx-x86.c:2828 +#: elfxx-x86.c:2817 msgid "%F%P: failed to create GOT PLT section\n" msgstr "%F%P: не удалоÑÑŒ Ñоздать раздел GOT PLT\n" -#: elfxx-x86.c:2849 +#: elfxx-x86.c:2836 msgid "%F%P: failed to create IBT-enabled PLT section\n" msgstr "%F%P: не удалоÑÑŒ Ñоздать раздел PLT Ñ Ð²ÐºÐ»ÑŽÑ‡Ñ‘Ð½Ð½Ñ‹Ð¼ IBT\n" -#: elfxx-x86.c:2864 +#: elfxx-x86.c:2850 msgid "%F%P: failed to create BND PLT section\n" msgstr "%F%P: не удалоÑÑŒ Ñоздать раздел BND PLT\n" -#: elfxx-x86.c:2885 +#: elfxx-x86.c:2870 msgid "%F%P: failed to create PLT .eh_frame section\n" msgstr "%F%P: не удалоÑÑŒ Ñоздать раздел PLT .eh_frame\n" -#: elfxx-x86.c:2898 +#: elfxx-x86.c:2883 msgid "%F%P: failed to create GOT PLT .eh_frame section\n" msgstr "%F%P: не удалоÑÑŒ Ñоздать раздел GOT PLT .eh_frame\n" -#: elfxx-x86.c:2912 +#: elfxx-x86.c:2897 msgid "%F%P: failed to create the second PLT .eh_frame section\n" msgstr "%F%P: не удалоÑÑŒ Ñоздать второй раздел PLT .eh_frame\n" +#: elfxx-x86.c:2939 +msgid "%X%P: attempted static link of dynamic object `%pB'\n" +msgstr "%X%P: попытка ÑтатичеÑкой компоновки динамичеÑкого объекта «%pB»\n" + #: ihex.c:230 #, c-format msgid "%pB:%d: unexpected character `%s' in Intel Hex file" @@ -5096,67 +5388,67 @@ msgid "%pB:%u: bad checksum in Intel Hex file (expected %u, found %u)" msgstr "%pB:%u: Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»ÑŒÐ½Ð°Ñ Ñумма в Intel Hex файле (должна быть %u, получена %u)" -#: ihex.c:394 +#: ihex.c:393 #, c-format msgid "%pB:%u: bad extended address record length in Intel Hex file" msgstr "%pB:%u: Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ Ð´Ð»Ð¸Ð½Ð° запиÑи раÑширенного адреÑа в Intel Hex файле" -#: ihex.c:412 +#: ihex.c:411 #, c-format msgid "%pB:%u: bad extended start address length in Intel Hex file" msgstr "%pB:%u: Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ Ð´Ð»Ð¸Ð½Ð° раÑширенного начального адреÑа в Intel Hex файле" -#: ihex.c:430 +#: ihex.c:429 #, c-format msgid "%pB:%u: bad extended linear address record length in Intel Hex file" msgstr "%pB:%u: Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ Ð´Ð»Ð¸Ð½Ð° запиÑи раÑширенного прÑмолинейного адреÑа в Intel Hex файле" -#: ihex.c:448 +#: ihex.c:447 #, c-format msgid "%pB:%u: bad extended linear start address length in Intel Hex file" msgstr "%pB:%u: Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ Ð´Ð»Ð¸Ð½Ð° раÑширенного прÑмолинейного начального адреÑа в Intel Hex файле" -#: ihex.c:466 +#: ihex.c:465 #, c-format msgid "%pB:%u: unrecognized ihex type %u in Intel Hex file" msgstr "%pB:%u: нераÑпознанный ihex-тип %u в Intel Hex файле" -#: ihex.c:585 +#: ihex.c:581 #, c-format msgid "%pB: internal error in ihex_read_section" msgstr "%pB: внутреннÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ° в ihex_read_section" -#: ihex.c:619 +#: ihex.c:614 #, c-format msgid "%pB: bad section length in ihex_read_section" msgstr "%pB: Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ Ð´Ð»Ð¸Ð½Ð° раздела в ihex_read_section" -#: ihex.c:793 +#: ihex.c:785 #, c-format msgid "%pB 64-bit address %# out of range for Intel Hex file" msgstr "%pB: 64-битный Ð°Ð´Ñ€ÐµÑ %# вне диапазона Intel Hex файла" -#: ihex.c:852 +#: ihex.c:843 #, c-format msgid "%pB: address %# out of range for Intel Hex file" msgstr "%pB: Ð°Ð´Ñ€ÐµÑ %# вне диапазона Intel Hex файла" -#: libbfd.c:937 +#: libbfd.c:884 #, c-format msgid "%pB: unable to get decompressed section %pA" msgstr "%pB: не удалоÑÑŒ получить раÑжатый раздел %pA" -#: libbfd.c:1101 +#: libbfd.c:1048 #, c-format msgid "Deprecated %s called at %s line %d in %s\n" msgstr "Вызван нерекомендуемый %s Ñ€Ñдом Ñ %s в Ñтроке %d в %s\n" -#: libbfd.c:1104 +#: libbfd.c:1051 #, c-format msgid "Deprecated %s called\n" msgstr "Вызван нерекомендуемый %s\n" -#: linker.c:1697 +#: linker.c:1696 #, c-format msgid "%pB: indirect symbol `%s' to `%s' is a loop" msgstr "%pB: коÑвенный Ñимвол «%s» к «%s» Ñоздаёт зацикливание" @@ -5166,179 +5458,213 @@ msgid "attempt to do relocatable link with %s input and %s output" msgstr "попытка Ñделать перемещаемую ÑÑылку Ñ Ð²Ñ…Ð¾Ð´Ð¾Ð¼ %s и выходом %s" -#: linker.c:2853 +#: linker.c:2852 #, c-format msgid "%pB: ignoring duplicate section `%pA'\n" msgstr "%pB: игнорируетÑÑ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€ÑющийÑÑ Ñ€Ð°Ð·Ð´ÐµÐ» «%pA»\n" -#: linker.c:2863 linker.c:2873 +#: linker.c:2862 linker.c:2872 #, c-format msgid "%pB: duplicate section `%pA' has different size\n" msgstr "%pB: повторÑющийÑÑ Ñ€Ð°Ð·Ð´ÐµÐ» «%pA» имеет другой размер\n" -#: linker.c:2882 linker.c:2888 +#: linker.c:2881 linker.c:2887 #, c-format msgid "%pB: could not read contents of section `%pA'\n" msgstr "%pB: предупреждение: невозможно прочитать Ñодержимое раздела «%pA»\n" -#: linker.c:2893 +#: linker.c:2892 #, c-format msgid "%pB: duplicate section `%pA' has different contents\n" msgstr "%pB: предупреждение: повторÑющийÑÑ Ñ€Ð°Ð·Ð´ÐµÐ» «%pA» имеет другое Ñодержимое\n" -#: linker.c:3407 +#: linker.c:3404 #, c-format msgid "%pB: compiled for a big endian system and target is little endian" msgstr "%pB: Ñкомпилировано Ð´Ð»Ñ ÑиÑтемы Ñ Ð¿Ñ€Ñмым порÑдком байт, а цель Ñ Ð¾Ð±Ñ€Ð°Ñ‚Ð½Ñ‹Ð¼ порÑдком байт" -#: linker.c:3410 +#: linker.c:3407 #, c-format msgid "%pB: compiled for a little endian system and target is big endian" msgstr "%pB: Ñкомпилировано Ð´Ð»Ñ ÑиÑтемы Ñ Ð¾Ð±Ñ€Ð°Ñ‚Ð½Ñ‹Ð¼ порÑдком байт, а цель Ñ Ð¿Ñ€Ñмым порÑдком байт" -#: mach-o.c:632 +#: mach-o-arm.c:172 +msgid "malformed mach-o ARM reloc pair: reloc is first reloc" +msgstr "иÑÐºÐ°Ð¶Ñ‘Ð½Ð½Ð°Ñ Ð¿Ð°Ñ€Ð° Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ mach-o ARM: перемещение ÑвлÑетÑÑ Ð¿ÐµÑ€Ð²Ñ‹Ð¼ перемещением" + +#: mach-o-arm.c:188 +#, c-format +msgid "malformed mach-o ARM reloc pair: invalid length: %d" +msgstr "иÑÐºÐ°Ð¶Ñ‘Ð½Ð½Ð°Ñ Ð¿Ð°Ñ€Ð° Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ mach-o ARM: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð°Ñ Ð´Ð»Ð¸Ð½Ð°: %d" + +#: mach-o-arm.c:203 +#, c-format +msgid "malformed mach-o ARM sectdiff reloc: invalid length: %d" +msgstr "иÑкажённое перемещение sectdiff mach-o ARM: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð°Ñ Ð´Ð»Ð¸Ð½Ð°: %d" + +#: mach-o-arm.c:218 +#, c-format +msgid "malformed mach-o ARM local sectdiff reloc: invalid length: %d" +msgstr "иÑкажённое локальное перемещение sectdiff mach-o ARM: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð°Ñ Ð´Ð»Ð¸Ð½Ð°: %d" + +#: mach-o-arm.c:233 +#, c-format +msgid "malformed mach-o ARM half sectdiff reloc: invalid length: %d" +msgstr "иÑкажённое перемещение half sectdiff mach-o ARM: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð°Ñ Ð´Ð»Ð¸Ð½Ð°: %d" + +#: mach-o-arm.c:265 +#, c-format +msgid "malformed mach-o ARM vanilla reloc: invalid length: %d (pcrel: %d)" +msgstr "иÑкажённое перемещение vanilla mach-o ARM: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð°Ñ Ð´Ð»Ð¸Ð½Ð°: %d (pcrel: %d)" + +#: mach-o-arm.c:329 +#, c-format +msgid "malformed mach-o ARM reloc: unknown reloc type: %d" +msgstr "иÑкажённое перемещение mach-o ARM: неизвеÑтный тип перемещениÑ: %d" + +#: mach-o.c:633 #, c-format msgid "" msgstr "<неизвеÑтный флаги маÑки>" -#: mach-o.c:687 +#: mach-o.c:688 msgid " ()" msgstr " (неизвеÑтно)" -#: mach-o.c:698 +#: mach-o.c:699 #, c-format msgid " MACH-O header:\n" msgstr " заголовок Mach-O:\n" -#: mach-o.c:699 +#: mach-o.c:700 #, c-format msgid " magic: %#lx\n" msgstr " отл.призн: %#lx\n" -#: mach-o.c:700 +#: mach-o.c:701 #, c-format msgid " cputype: %#lx (%s)\n" msgstr " тип ЦП: %#lx (%s)\n" -#: mach-o.c:702 +#: mach-o.c:703 #, c-format msgid " cpusubtype: %#lx%s\n" msgstr " подтип ЦП: %#lx%s\n" -#: mach-o.c:704 +#: mach-o.c:705 #, c-format msgid " filetype: %#lx\n" msgstr " тип файла: %#lx\n" -#: mach-o.c:705 +#: mach-o.c:706 #, c-format msgid " ncmds: %#lx\n" msgstr " ч_кмнд: %#lx\n" -#: mach-o.c:706 +#: mach-o.c:707 #, c-format msgid " sizeocmds: %#lx\n" msgstr " разм_кмнд: %#lx\n" -#: mach-o.c:707 +#: mach-o.c:708 #, c-format msgid " flags: %#lx\n" msgstr " флаги: %#lx\n" -#: mach-o.c:708 +#: mach-o.c:709 #, c-format msgid " version: %x\n" msgstr " маÑка верÑии: %x\n" #. Urg - what has happened ? -#: mach-o.c:743 +#: mach-o.c:744 #, c-format msgid "incompatible cputypes in mach-o files: %ld vs %ld" msgstr "неÑовмеÑтимые типы ЦП в файлах mach-o: %ld и %ld" -#: mach-o.c:912 +#: mach-o.c:913 msgid "bfd_mach_o_canonicalize_symtab: unable to load symbols" msgstr "bfd_mach_o_canonicalize_symtab: невозможно загрузить Ñимволы" -#: mach-o.c:2108 +#: mach-o.c:1505 +msgid "malformed mach-o reloc: section index is greater than the number of sections" +msgstr "иÑкажённое перемещение mach-o: Ð¸Ð½Ð´ÐµÐºÑ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° больше количеÑтва разделов" + +#: mach-o.c:2139 msgid "sorry: modtab, toc and extrefsyms are not yet implemented for dysymtab commands." msgstr "Извините: modtab, toc и extrefsyms пока не реализованы Ð´Ð»Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´ dysymtab." -#: mach-o.c:2554 +#: mach-o.c:2587 #, c-format msgid "mach-o: there are too many sections (%u) maximum is 255,\n" msgstr "mach-o: Ñлишком много разделов (%u), должно быть не более 255,\n" -#: mach-o.c:2661 +#: mach-o.c:2694 #, c-format msgid "unable to allocate data for load command %#x" msgstr "не удалоÑÑŒ выделить данные Ð´Ð»Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ‹ загрузки %#x" -#: mach-o.c:2766 +#: mach-o.c:2799 #, c-format msgid "unable to write unknown load command %#x" msgstr "невозможно запиÑать неизвеÑтную команду загрузки %#x" -#: mach-o.c:2950 +#: mach-o.c:2983 #, c-format msgid "section address (%#) below start of segment (%#)" msgstr "Ð°Ð´Ñ€ÐµÑ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° (%#) меньше начала Ñегмента (%#)" -#: mach-o.c:3092 +#: mach-o.c:3125 #, c-format msgid "unable to layout unknown load command %#x" msgstr "невозможно запланировать неизвеÑтную команду загрузки %#x" -#: mach-o.c:3628 +#: mach-o.c:3660 #, c-format msgid "bfd_mach_o_read_section_32: overlarge alignment value: %#lx, using 32 instead" msgstr "bfd_mach_o_read_section_32: Ñлишком большое значение выравниваниÑ: %#lx, иÑпользуетÑÑ 32" -#: mach-o.c:3671 +#: mach-o.c:3703 #, c-format msgid "bfd_mach_o_read_section_64: overlarge alignment value: %#lx, using 32 instead" msgstr "bfd_mach_o_read_section_64: Ñлишком большое значение выравниваниÑ: %#lx, иÑпользуетÑÑ 32" -#: mach-o.c:3722 +#: mach-o.c:3754 #, c-format msgid "bfd_mach_o_read_symtab_symbol: unable to read %d bytes at %u" msgstr "bfd_mach_o_read_symtab_symbol: невозможно прочитать %d байт по адреÑу %u" -#: mach-o.c:3741 +#: mach-o.c:3773 #, c-format msgid "bfd_mach_o_read_symtab_symbol: name out of range (%lu >= %u)" msgstr "bfd_mach_o_read_symtab_symbol: Ð¸Ð¼Ñ Ð²Ð½Ðµ диапазона (%lu >= %u)" -#: mach-o.c:3824 +#: mach-o.c:3856 #, c-format msgid "bfd_mach_o_read_symtab_symbol: symbol \"%s\" specified invalid section %d (max %lu): setting to undefined" msgstr "bfd_mach_o_read_symtab_symbol: Ñимвол «%s» указывает на неверный раздел %d (макÑимальное значение %lu): наÑтройка не определена" -#: mach-o.c:3843 +#: mach-o.c:3875 #, c-format msgid "bfd_mach_o_read_symtab_symbol: symbol \"%s\" specified invalid type field 0x%x: setting to undefined" msgstr "bfd_mach_o_read_symtab_symbol: Ñимвол «%s» указывает на неверный тип Ð¿Ð¾Ð»Ñ 0x%x: наÑтройка не определена" -#: mach-o.c:3920 -msgid "bfd_mach_o_read_symtab_symbols: unable to allocate memory for symbols" -msgstr "bfd_mach_o_read_symtab_symbols: невозможно выделить памÑÑ‚ÑŒ Ð´Ð»Ñ Ñимволов" - -#: mach-o.c:4931 +#: mach-o.c:5064 #, c-format msgid "%pB: unknown load command %#x" msgstr "%pB: неизвеÑÑ‚Ð½Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ‹ загрузки %#x" -#: mach-o.c:5122 +#: mach-o.c:5263 #, c-format msgid "bfd_mach_o_scan: unknown architecture 0x%lx/0x%lx" msgstr "bfd_mach_o_scan: неизвеÑÑ‚Ð½Ð°Ñ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° 0x%lx/0x%lx" -#: mach-o.c:5227 +#: mach-o.c:5385 #, c-format msgid "unknown header byte-order value %#x" msgstr "неизвеÑтное значение порÑдка байт в заголовке %#x" -#: merge.c:878 +#: merge.c:895 #, c-format msgid "%pB: access beyond end of merged section (%)" msgstr "%pB: доÑтуп за конец объединённого раздела (%)" @@ -5353,122 +5679,122 @@ msgid "%pB: no core to allocate a symbol %d bytes long" msgstr "%pB: нет core Ð´Ð»Ñ Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ %d байт Ñимвола" -#: mmo.c:955 +#: mmo.c:952 #, c-format msgid "%pB: attempt to emit contents at non-multiple-of-4 address %#" msgstr "%pB: попытка выпуÑтить Ñодержимое по адреÑу не кратному 4 (%#)" -#: mmo.c:1252 +#: mmo.c:1248 #, c-format msgid "%pB: invalid mmo file: initialization value for $255 is not `Main'\n" msgstr "%pB: некорректный mmo-файл: инициализационное значение Ð´Ð»Ñ $255 не равно «Main»\n" -#: mmo.c:1399 +#: mmo.c:1395 #, c-format msgid "%pB: unsupported wide character sequence 0x%02X 0x%02X after symbol name starting with `%s'\n" msgstr "%pB: Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ð°Ñ Ð¿Ð¾ÑледовательноÑÑ‚ÑŒ широких Ñимволов 0x%02X 0x%02X поÑле имени Ñимвола, Ð½Ð°Ñ‡Ð¸Ð½Ð°Ñ Ñ Â«%s»\n" -#: mmo.c:1633 +#: mmo.c:1628 #, c-format msgid "%pB: invalid mmo file: unsupported lopcode `%d'\n" msgstr "%pB: некорректный mmo-файл: неподдерживаемый lopcode «%d»\n" -#: mmo.c:1644 +#: mmo.c:1639 #, c-format msgid "%pB: invalid mmo file: expected YZ = 1 got YZ = %d for lop_quote\n" msgstr "%pB: некорректный mmo-файл: Ð´Ð»Ñ lop_quote ожидалоÑÑŒ YZ = 1, получено YZ = %d\n" -#: mmo.c:1682 +#: mmo.c:1679 #, c-format msgid "%pB: invalid mmo file: expected z = 1 or z = 2, got z = %d for lop_loc\n" msgstr "%pB: некорректный mmo-файл: Ð´Ð»Ñ lop_loc ожидалоÑÑŒ z = 1 или z = 2, получено z = %d\n" -#: mmo.c:1733 +#: mmo.c:1730 #, c-format msgid "%pB: invalid mmo file: expected z = 1 or z = 2, got z = %d for lop_fixo\n" msgstr "%pB: некорректный mmo-файл: Ð´Ð»Ñ lop_fixo ожидалоÑÑŒ z = 1 или z = 2, получено z = %d\n" -#: mmo.c:1774 +#: mmo.c:1771 #, c-format msgid "%pB: invalid mmo file: expected y = 0, got y = %d for lop_fixrx\n" msgstr "%pB: некорректный mmo-файл: Ð´Ð»Ñ lop_fixrx ожидалоÑÑŒ y = 0, получено y = %d\n" -#: mmo.c:1785 +#: mmo.c:1782 #, c-format msgid "%pB: invalid mmo file: expected z = 16 or z = 24, got z = %d for lop_fixrx\n" msgstr "%pB: некорректный mmo-файл: Ð´Ð»Ñ lop_fixrx ожидалоÑÑŒ z = 16 или z = 24, получено z = %d\n" -#: mmo.c:1810 +#: mmo.c:1807 #, c-format msgid "%pB: invalid mmo file: leading byte of operand word must be 0 or 1, got %d for lop_fixrx\n" msgstr "%pB: некорректный mmo-файл: Ð´Ð»Ñ lop_fixrx начальный байт Ñлова операнда должен быть равен 0 или 1, получено %d\n" -#: mmo.c:1835 +#: mmo.c:1832 #, c-format msgid "%pB: cannot allocate file name for file number %d, %d bytes\n" msgstr "%pB: невозможно выделить меÑто Ð´Ð»Ñ Ð¸Ð¼ÐµÐ½Ð¸ файла файлу Ñ Ð½Ð¾Ð¼ÐµÑ€Ð¾Ð¼ %d, %d байт\n" -#: mmo.c:1857 +#: mmo.c:1854 #, c-format msgid "%pB: invalid mmo file: file number %d `%s', was already entered as `%s'\n" msgstr "%pB: некорректный mmo-файл: номер файла %d «%s» был уже введён как «%s»\n" -#: mmo.c:1871 +#: mmo.c:1868 #, c-format msgid "%pB: invalid mmo file: file name for number %d was not specified before use\n" msgstr "%pB: некорректный mmo-файл: Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° Ð´Ð»Ñ Ð½Ð¾Ð¼ÐµÑ€Ð° %d не указано перед иÑпользованием\n" -#: mmo.c:1978 +#: mmo.c:1975 #, c-format msgid "%pB: invalid mmo file: fields y and z of lop_stab non-zero, y: %d, z: %d\n" msgstr "%pB: некорректный mmo-файл: Ð¿Ð¾Ð»Ñ y и z в lop_stab не равны нулю, y: %d, z: %d\n" -#: mmo.c:2015 +#: mmo.c:2012 #, c-format msgid "%pB: invalid mmo file: lop_end not last item in file\n" msgstr "%pB: некорректный mmo-файл: lop_end не поÑледний Ñлемент в файле\n" -#: mmo.c:2029 +#: mmo.c:2026 #, c-format msgid "%pB: invalid mmo file: YZ of lop_end (%ld) not equal to the number of tetras to the preceding lop_stab (%ld)\n" msgstr "%pB: некорректный mmo-файл: YZ в lop_end (%ld) не равно чиÑлу тетрад в указанной ранее lop_stab (%ld)\n" -#: mmo.c:2740 +#: mmo.c:2735 #, c-format msgid "%pB: invalid symbol table: duplicate symbol `%s'\n" msgstr "%pB: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð°Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ñимволов: повторÑющийÑÑ Ñимвол «%s»\n" -#: mmo.c:2983 +#: mmo.c:2978 #, c-format msgid "%pB: bad symbol definition: `Main' set to %s rather than the start address %s\n" msgstr "%pB: неверное определение Ñимвола: «Main» равен %s, а не начальному адреÑу %s\n" -#: mmo.c:3082 +#: mmo.c:3077 #, c-format msgid "%pB: warning: symbol table too large for mmo, larger than 65535 32-bit words: %d. Only `Main' will be emitted.\n" msgstr "%pB: предупреждение: таблица Ñимволов Ñлишком Ð±Ð¾Ð»ÑŒÑˆÐ°Ñ Ð´Ð»Ñ mmo, больше чем 65535 32-битных Ñлов: %d. Будет выдана только «Main».\n" -#: mmo.c:3128 +#: mmo.c:3123 #, c-format msgid "%pB: internal error, symbol table changed size from %d to %d words\n" msgstr "%pB: внутреннÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ°, у таблицы Ñимволов изменилÑÑ Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ %d Ñлов до %d\n" -#: mmo.c:3181 +#: mmo.c:3176 #, c-format msgid "%pB: internal error, internal register section %pA had contents\n" msgstr "%pB: внутреннÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ°, внутренний раздел региÑтров %pA Ñодержит данные\n" -#: mmo.c:3232 +#: mmo.c:3227 #, c-format msgid "%pB: no initialized registers; section length 0\n" msgstr "%pB: нет инициализированных региÑтров; длина раздела равна 0\n" -#: mmo.c:3239 +#: mmo.c:3234 #, c-format msgid "%pB: too many initialized registers; section length %" msgstr "%pB: Ñлишком много инициализированных региÑтров; длина раздела равна %" -#: mmo.c:3244 +#: mmo.c:3239 #, c-format msgid "%pB: invalid start address for initialized registers of length %: %#" msgstr "%pB: недопуÑтимый начальный Ð°Ð´Ñ€ÐµÑ Ð´Ð»Ñ Ð¸Ð½Ð¸Ñ†Ð¸Ð°Ð»Ð¸Ð·Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ñ‹Ñ… региÑтров длины %: %#" @@ -5478,48 +5804,55 @@ msgid "unhandled OSF/1 core file section type %d" msgstr "необработанный файл Ñдра OSF/1 раздела Ñ Ñ‚Ð¸Ð¿Ð¾Ð¼ %d" -#: pef.c:527 +#: pdp11.c:1588 +#, c-format +msgid "%pB: symbol indicates overlay (not supported)" +msgstr "%pB: Ñимвол указывает на оверлей (не поддерживаетÑÑ)" + +#: pef.c:530 #, c-format msgid "bfd_pef_scan: unknown architecture 0x%lx" msgstr "bfd_pef_scan: неизвеÑÑ‚Ð½Ð°Ñ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° 0x%lx" -#: pei-x86_64.c:177 pei-x86_64.c:191 pei-x86_64.c:220 +#: pei-x86_64.c:177 pei-x86_64.c:191 pei-x86_64.c:220 pei-x86_64.c:243 +#: pei-x86_64.c:253 pei-x86_64.c:278 pei-x86_64.c:290 pei-x86_64.c:304 +#: pei-x86_64.c:322 pei-x86_64.c:334 pei-x86_64.c:346 #, c-format msgid "warning: corrupt unwind data\n" msgstr "предупреждение: повреждён раздел развёртки\n" #. PR 17512: file: 2245-7442-0.004. -#: pei-x86_64.c:315 +#: pei-x86_64.c:367 #, c-format msgid "Unknown: %x" msgstr "ÐеизвеÑтно: %x" -#: pei-x86_64.c:365 pei-x86_64.c:375 pei-x86_64.c:384 +#: pei-x86_64.c:418 pei-x86_64.c:428 pei-x86_64.c:437 #, c-format msgid "warning: xdata section corrupt\n" msgstr "предупреждение: повреждён раздел xdata\n" -#: pei-x86_64.c:439 +#: pei-x86_64.c:492 #, c-format msgid "Too many unwind codes (%ld)\n" msgstr "Слишком много раÑкрываемого кода (%ld)\n" -#: pei-x86_64.c:529 +#: pei-x86_64.c:582 #, c-format msgid "Warning: %s section size (%ld) is not a multiple of %d\n" msgstr "Предупреждение: размер раздела %s (%ld) не кратен %d\n" -#: pei-x86_64.c:536 +#: pei-x86_64.c:589 #, c-format msgid "Warning: %s section size is zero\n" msgstr "Предупреждение: размер раздела %s равен нулю\n" -#: pei-x86_64.c:551 +#: pei-x86_64.c:604 #, c-format msgid "Warning: %s section size (%ld) is smaller than virtual size (%ld)\n" msgstr "Предупреждение: размер раздела %s (%ld) меньше виртуального размера (%ld)\n" -#: pei-x86_64.c:560 +#: pei-x86_64.c:613 #, c-format msgid "" "\n" @@ -5528,12 +5861,12 @@ "\n" "Таблица функций (обработано Ñодержимое раздела %s)\n" -#: pei-x86_64.c:563 +#: pei-x86_64.c:616 #, c-format msgid "vma:\t\t\tBeginAddress\t EndAddress\t UnwindData\n" msgstr "vma:\t\t\tÐач Ð°Ð´Ñ€ÐµÑ \t Кон адреÑ\t РаÑкр данные\n" -#: pei-x86_64.c:692 +#: pei-x86_64.c:745 #, c-format msgid "" "\n" @@ -5543,42 +5876,42 @@ "Дамп %s\n" #. XXX code yet to be written. -#: peicode.h:775 +#: peicode.h:796 #, c-format msgid "%pB: unhandled import type; %x" msgstr "%pB: необработанный тип импорта; %x" -#: peicode.h:781 +#: peicode.h:802 #, c-format msgid "%pB: unrecognized import type; %x" msgstr "%pB: нераÑпознанный тип импорта; %x" -#: peicode.h:796 +#: peicode.h:817 #, c-format msgid "%pB: unrecognized import name type; %x" msgstr "%pB: нераÑпознанный именной тип импорта; %x" -#: peicode.h:1211 +#: peicode.h:1225 #, c-format msgid "%pB: unrecognised machine type (0x%x) in Import Library Format archive" msgstr "%pB: нераÑпознанный машинный тип (0x%x) в архиве Import Library Format" -#: peicode.h:1224 +#: peicode.h:1238 #, c-format msgid "%pB: recognised but unhandled machine type (0x%x) in Import Library Format archive" msgstr "%pB: раÑпознан, но не обработан машинный тип (0x%x) в архиве Import Library Format" -#: peicode.h:1242 +#: peicode.h:1256 #, c-format msgid "%pB: size field is zero in Import Library Format header" msgstr "%pB: размер Ð¿Ð¾Ð»Ñ Ñ€Ð°Ð²ÐµÐ½ нулю в заголовке Import Library Format" -#: peicode.h:1274 +#: peicode.h:1282 #, c-format msgid "%pB: string not null terminated in ILF object file" msgstr "%pB: Ñтрока не заканчиваетÑÑ Ð½ÑƒÐ»Ñ‘Ð¼ в объектном файле ILF" -#: peicode.h:1330 +#: peicode.h:1338 #, c-format msgid "%pB: error: debug data ends beyond end of debug directory" msgstr "%pB: ошибка: конец отладочных данных за окончанием отладочного каталога" @@ -5636,32 +5969,32 @@ msgid "Partition[%d] length = 0x%.8lx (%ld)\n" msgstr "Длина раздела[%d] = 0x%.8lx (%ld)\n" -#: reloc.c:8232 +#: reloc.c:8291 msgid "INPUT_SECTION_FLAGS are not supported" msgstr "INPUT_SECTION_FLAGS не поддерживаетÑÑ" -#: reloc.c:8333 +#: reloc.c:8392 #, c-format msgid "%X%P: %pB(%pA): error: relocation for offset %V has no value\n" msgstr "%X%P: %pB(%pA): ошибка: отÑутÑтвует значение Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð´Ð»Ñ ÑÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ %V\n" -#: reloc.c:8420 +#: reloc.c:8480 #, c-format msgid "%X%P: %pB(%pA): relocation \"%pR\" is not supported\n" msgstr "%X%P: %pB(%pA): перемещение «%pR» не поддерживаетÑÑ\n" -#: reloc.c:8429 +#: reloc.c:8489 #, c-format msgid "%X%P: %pB(%pA): relocation \"%pR\" returns an unrecognized value %x\n" msgstr "%X%P: %pB(%pA): перемещение «%pR» возвратило нераÑпознанное значение %x\n" -#: reloc.c:8491 +#: reloc.c:8551 #, c-format msgid "%pB: unrecognized relocation type %#x in section `%pA'" msgstr "%pB: нераÑпознанное перемещение %#x в разделе «%pA»" #. PR 21803: Suggest the most likely cause of this error. -#: reloc.c:8495 +#: reloc.c:8555 #, c-format msgid "is this version of the linker - %s - out of date ?" msgstr "Ð´Ð°Ð½Ð½Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ñ‰Ð¸ÐºÐ° — %s — уÑтарела?" @@ -5671,7 +6004,7 @@ msgid "%pB: warning core file truncated" msgstr "%pB: предупреждение: файл core уÑечён" -#: som.c:5478 +#: som.c:5497 #, c-format msgid "" "\n" @@ -5680,7 +6013,7 @@ "\n" "Ð’Ñпомогательный заголовок Exec\n" -#: som.c:5787 +#: som.c:5806 msgid "som_sizeof_headers unimplemented" msgstr "som_sizeof_headers не реализован" @@ -5694,7 +6027,7 @@ msgid "%pB:%d: byte count %d too small" msgstr "%pB:%d: Ñчётчик байт %d Ñлишком мал" -#: srec.c:581 srec.c:615 +#: srec.c:580 srec.c:614 #, c-format msgid "%pB:%d: bad checksum in S-record file" msgstr "%pB:%d: Ð½ÐµÐ²ÐµÑ€Ð½Ð°Ñ ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»ÑŒÐ½Ð°Ñ Ñумма в файле S-record" @@ -5704,73 +6037,82 @@ msgid "%pB(%pA+%#lx): stabs entry has invalid string index" msgstr "%pB(%pA+%#lx): Ñлемент stabs имеет недопуÑтимый Ð¸Ð½Ð´ÐµÐºÑ Ñтроки" -#: syms.c:1091 +#: syms.c:1085 msgid "unsupported .stab relocation" msgstr "неподдерживаемое перемещение .stab" -#: vms-alpha.c:479 +#: vms-alpha.c:480 msgid "corrupt EIHD record - size is too small" msgstr "запиÑÑŒ EIHD повреждена — размер Ñлишком мал" -#: vms-alpha.c:660 +#: vms-alpha.c:666 #, c-format msgid "unable to read EIHS record at offset %#x" msgstr "невозможно прочитать запиÑÑŒ EIHS по Ñмещению %#x" -#: vms-alpha.c:1173 +#: vms-alpha.c:1158 +msgid "record is too small for symbol name length" +msgstr "запиÑÑŒ Ñлишком мала Ð´Ð»Ñ Ð´Ð»Ð¸Ð½Ñ‹ имени Ñимвола" + +#: vms-alpha.c:1191 #, c-format msgid "corrupt EGSD record: its size (%#x) is too small" msgstr "запиÑÑŒ EGSD повреждена: её размер (%#x) Ñлишком мал" -#: vms-alpha.c:1197 +#: vms-alpha.c:1215 #, c-format -msgid "corrupt EGSD record: size (%#x) is larger than remaining space (%#x)" -msgstr "запиÑÑŒ EGSD повреждена: размер (%#x) больше оÑтавшегоÑÑ Ð¿Ñ€Ð¾ÑтранÑтва (%#x)" +msgid "corrupt EGSD record type %d: size (%#x) is larger than remaining space (%#x)" +msgstr "запиÑÑŒ EGSD Ñ Ñ‚Ð¸Ð¿Ð¾Ð¼ %d повреждена: размер (%#x) больше оÑтавшегоÑÑ Ð¿Ñ€Ð¾ÑтранÑтва (%#x)" -#: vms-alpha.c:1205 +#: vms-alpha.c:1225 #, c-format -msgid "corrupt EGSD record: size (%#x) is too small" -msgstr "запиÑÑŒ EGSD повреждена: размер (%#x) Ñлишком мал" +msgid "corrupt EGSD record type %d: size (%#x) is too small" +msgstr "запиÑÑŒ EGSD Ñ Ñ‚Ð¸Ð¿Ð¾Ð¼ %d повреждена: размер (%#x) Ñлишком мал" -#: vms-alpha.c:1334 vms-alpha.c:1350 vms-alpha.c:1390 +#: vms-alpha.c:1367 #, c-format msgid "corrupt EGSD record: its psindx field is too big (%#lx)" msgstr "запиÑÑŒ EGSD повреждена: её поле psindx Ñлишком велико (%#lx)" -#: vms-alpha.c:1419 +#: vms-alpha.c:1443 #, c-format msgid "unknown EGSD subtype %d" msgstr "неизвеÑтный подтип EGSD %d" -#: vms-alpha.c:1452 +#: vms-alpha.c:1476 #, c-format msgid "stack overflow (%d) in _bfd_vms_push" msgstr "переполнение Ñтека (%d) в _bfd_vms_push" -#: vms-alpha.c:1465 +#: vms-alpha.c:1490 msgid "stack underflow in _bfd_vms_pop" msgstr "выход за нижнюю границу Ñтека в _bfd_vms_pop" +#: vms-alpha.c:1564 +#, c-format +msgid "dst_define_location %u too large" +msgstr "dst_define_location %u Ñлишком большое" + #. These names have not yet been added to this switch statement. -#: vms-alpha.c:1707 +#: vms-alpha.c:1765 #, c-format msgid "unknown ETIR command %d" msgstr "неизвеÑÑ‚Ð½Ð°Ñ ETIR команда %d" -#: vms-alpha.c:1738 +#: vms-alpha.c:1796 msgid "corrupt vms value" msgstr "значение vms повреждено" -#: vms-alpha.c:1866 +#: vms-alpha.c:1927 msgid "corrupt ETIR record encountered" msgstr "обнаружена Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´Ñ‘Ð½Ð½Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ ETIR" -#: vms-alpha.c:1923 +#: vms-alpha.c:1989 #, c-format msgid "bad section index in %s" msgstr "неверный Ð¸Ð½Ð´ÐµÐºÑ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° в %s" -#: vms-alpha.c:1936 +#: vms-alpha.c:2003 #, c-format msgid "unsupported STA cmd %s" msgstr "неподдерживаемый STA cmd %s" @@ -5780,1468 +6122,1480 @@ #. Rotate. #. Redefine symbol to current location. #. Define a literal. -#: vms-alpha.c:2116 vms-alpha.c:2147 vms-alpha.c:2238 vms-alpha.c:2396 +#: vms-alpha.c:2211 vms-alpha.c:2242 vms-alpha.c:2337 vms-alpha.c:2557 #, c-format msgid "%s: not supported" msgstr "%s: не поддерживаетÑÑ" -#: vms-alpha.c:2122 +#: vms-alpha.c:2217 #, c-format msgid "%s: not implemented" msgstr "%s: не реализовано" -#: vms-alpha.c:2380 +#: vms-alpha.c:2382 vms-alpha.c:2397 +#, c-format +msgid "invalid %s" +msgstr "неверный %s" + +#. Divide by zero is supposed to give a result of zero, +#. and a non-fatal warning message. +#: vms-alpha.c:2457 +#, c-format +msgid "%s divide by zero" +msgstr "%s делитÑÑ Ð½Ð° ноль" + +#: vms-alpha.c:2523 #, c-format msgid "invalid use of %s with contexts" msgstr "неправильное иÑпользование %s Ñ ÐºÐ¾Ð½Ñ‚ÐµÐºÑтами" -#: vms-alpha.c:2414 +#: vms-alpha.c:2581 #, c-format msgid "reserved cmd %d" msgstr "зарезервированный cmd %d" -#: vms-alpha.c:2498 +#: vms-alpha.c:2665 msgid "corrupt EEOM record - size is too small" msgstr "запиÑÑŒ EEOM повреждена — размер Ñлишком мал" -#: vms-alpha.c:2507 +#: vms-alpha.c:2674 msgid "object module not error-free !" msgstr "объектный модуль ÐЕ error-free !" -#: vms-alpha.c:3831 +#: vms-alpha.c:4001 #, c-format msgid "SEC_RELOC with no relocs in section %pA" msgstr "SEC_RELOC без перемещений в разделе %pA" -#: vms-alpha.c:3883 vms-alpha.c:4097 +#: vms-alpha.c:4053 vms-alpha.c:4268 #, c-format msgid "size error in section %pA" msgstr "ошибка размера в разделе %pA" -#: vms-alpha.c:4043 +#: vms-alpha.c:4213 msgid "spurious ALPHA_R_BSR reloc" msgstr "нетипичное перемещение ALPHA_R_BSR" -#: vms-alpha.c:4084 +#: vms-alpha.c:4254 #, c-format msgid "unhandled relocation %s" msgstr "необработанное перемещение %s" -#: vms-alpha.c:4377 +#: vms-alpha.c:4551 #, c-format msgid "unknown source command %d" msgstr "неизвеÑÑ‚Ð½Ð°Ñ Ð¸ÑÑ…Ð¾Ð´Ð½Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° %d" -#: vms-alpha.c:4438 vms-alpha.c:4444 vms-alpha.c:4450 vms-alpha.c:4456 -#: vms-alpha.c:4462 vms-alpha.c:4489 vms-alpha.c:4495 vms-alpha.c:4501 -#: vms-alpha.c:4507 +#: vms-alpha.c:4612 vms-alpha.c:4618 vms-alpha.c:4624 vms-alpha.c:4630 +#: vms-alpha.c:4636 vms-alpha.c:4663 vms-alpha.c:4669 vms-alpha.c:4675 +#: vms-alpha.c:4681 #, c-format msgid "%s not implemented" msgstr "%s не реализовано" -#: vms-alpha.c:4550 +#: vms-alpha.c:4724 #, c-format msgid "unknown line command %d" msgstr "неизвеÑÑ‚Ð½Ð°Ñ Ñтрока команды %d" -#: vms-alpha.c:5010 vms-alpha.c:5028 vms-alpha.c:5043 vms-alpha.c:5059 -#: vms-alpha.c:5072 vms-alpha.c:5084 vms-alpha.c:5097 +#: vms-alpha.c:5188 vms-alpha.c:5206 vms-alpha.c:5221 vms-alpha.c:5237 +#: vms-alpha.c:5250 vms-alpha.c:5262 vms-alpha.c:5275 #, c-format msgid "unknown reloc %s + %s" msgstr "неизвеÑтное перемещение %s + %s" -#: vms-alpha.c:5152 +#: vms-alpha.c:5330 #, c-format msgid "unknown reloc %s" msgstr "неизвеÑтное перемещение %s" -#: vms-alpha.c:5166 +#: vms-alpha.c:5344 msgid "invalid section index in ETIR" msgstr "неверный Ð¸Ð½Ð´ÐµÐºÑ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° в ETIR" -#: vms-alpha.c:5175 +#: vms-alpha.c:5353 msgid "relocation for non-REL psect" msgstr "перемещение Ð´Ð»Ñ Ð½Ðµ-REL psect" -#: vms-alpha.c:5222 +#: vms-alpha.c:5402 #, c-format msgid "unknown symbol in command %s" msgstr "неизвеÑтный Ñимвол в команде %s" -#: vms-alpha.c:5636 +#: vms-alpha.c:5816 #, c-format msgid "reloc (%d) is *UNKNOWN*" msgstr "перемещение (%d) *ÐЕИЗВЕСТÐО*" -#: vms-alpha.c:5752 +#: vms-alpha.c:5932 #, c-format msgid " EMH %u (len=%u): " msgstr " EMH %u (len=%u): " -#: vms-alpha.c:5757 +#: vms-alpha.c:5937 #, c-format msgid " Error: The length is less than the length of an EMH record\n" msgstr " Ошибка: длина меньше длины запиÑи EMH\n" -#: vms-alpha.c:5774 +#: vms-alpha.c:5954 #, c-format msgid " Error: The record length is less than the size of an EMH_MHD record\n" msgstr " Ошибка: длина запиÑи меньше размера запиÑи EMH_MHD\n" -#: vms-alpha.c:5777 +#: vms-alpha.c:5957 #, c-format msgid "Module header\n" msgstr "Заголовок модулÑ\n" -#: vms-alpha.c:5778 +#: vms-alpha.c:5958 #, c-format msgid " structure level: %u\n" msgstr " уровень Ñтруктуры : %u\n" -#: vms-alpha.c:5779 +#: vms-alpha.c:5959 #, c-format msgid " max record size: %u\n" msgstr " макÑ. размер запиÑи: %u\n" -#: vms-alpha.c:5785 +#: vms-alpha.c:5965 #, c-format msgid " Error: The module name is missing\n" msgstr " Ошибка: отÑутÑтвует Ð¸Ð¼Ñ Ð¼Ð¾Ð´ÑƒÐ»Ñ\n" -#: vms-alpha.c:5791 +#: vms-alpha.c:5971 #, c-format msgid " Error: The module name is too long\n" msgstr " Ошибка: Ñлишком длинное Ð¸Ð¼Ñ Ð¼Ð¾Ð´ÑƒÐ»Ñ\n" -#: vms-alpha.c:5794 +#: vms-alpha.c:5974 #, c-format msgid " module name : %.*s\n" msgstr " Ð¸Ð¼Ñ Ð¼Ð¾Ð´ÑƒÐ»Ñ : %.*s\n" -#: vms-alpha.c:5798 +#: vms-alpha.c:5978 #, c-format msgid " Error: The module version is missing\n" msgstr " Ошибка: отÑутÑтвует верÑÐ¸Ñ Ð¼Ð¾Ð´ÑƒÐ»Ñ\n" -#: vms-alpha.c:5804 +#: vms-alpha.c:5984 #, c-format msgid " Error: The module version is too long\n" msgstr " Ошибка: Ñлишком Ð´Ð»Ð¸Ð½Ð½Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ Ð¼Ð¾Ð´ÑƒÐ»Ñ\n" -#: vms-alpha.c:5807 +#: vms-alpha.c:5987 #, c-format msgid " module version : %.*s\n" msgstr " верÑÐ¸Ñ Ð¼Ð¾Ð´ÑƒÐ»Ñ : %.*s\n" -#: vms-alpha.c:5810 +#: vms-alpha.c:5990 #, c-format msgid " Error: The compile date is truncated\n" msgstr " Ошибка: обрезана дата компилÑции\n" -#: vms-alpha.c:5812 +#: vms-alpha.c:5992 #, c-format msgid " compile date : %.17s\n" msgstr " дата компилÑции : %.17s\n" -#: vms-alpha.c:5817 +#: vms-alpha.c:5997 #, c-format msgid "Language Processor Name\n" msgstr "Ðазвание процеÑÑорного Ñзыка\n" -#: vms-alpha.c:5818 +#: vms-alpha.c:5998 #, c-format msgid " language name: %.*s\n" msgstr " название Ñзыка : %.*s\n" -#: vms-alpha.c:5822 +#: vms-alpha.c:6002 #, c-format msgid "Source Files Header\n" msgstr "Заголовок иÑходных файлов\n" -#: vms-alpha.c:5823 +#: vms-alpha.c:6003 #, c-format msgid " file: %.*s\n" msgstr " файл: %.*s\n" -#: vms-alpha.c:5827 +#: vms-alpha.c:6007 #, c-format msgid "Title Text Header\n" msgstr "Заголовок Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ Ñ‚ÐµÐºÑта\n" -#: vms-alpha.c:5828 +#: vms-alpha.c:6008 #, c-format msgid " title: %.*s\n" msgstr " название : %.*s\n" -#: vms-alpha.c:5832 +#: vms-alpha.c:6012 #, c-format msgid "Copyright Header\n" msgstr "Заголовок авторÑкого права\n" -#: vms-alpha.c:5833 +#: vms-alpha.c:6013 #, c-format msgid " copyright: %.*s\n" msgstr " авторÑкое право: %.*s\n" -#: vms-alpha.c:5837 +#: vms-alpha.c:6017 #, c-format msgid "unhandled emh subtype %u\n" msgstr "необработанный подтип emh %u\n" -#: vms-alpha.c:5847 +#: vms-alpha.c:6027 #, c-format msgid " EEOM (len=%u):\n" msgstr " EEOM (len=%u):\n" -#: vms-alpha.c:5852 +#: vms-alpha.c:6032 #, c-format msgid " Error: The length is less than the length of an EEOM record\n" msgstr " Ошибка: длина меньше длины запиÑи EEOM\n" -#: vms-alpha.c:5856 +#: vms-alpha.c:6036 #, c-format msgid " number of cond linkage pairs: %u\n" msgstr " кол-во уÑловно компонуемых пар: %u\n" -#: vms-alpha.c:5858 +#: vms-alpha.c:6038 #, c-format msgid " completion code: %u\n" msgstr " завершённый код: %u\n" -#: vms-alpha.c:5862 +#: vms-alpha.c:6042 #, c-format msgid " transfer addr flags: 0x%02x\n" msgstr " адреÑа передачи flags: 0x%02x\n" -#: vms-alpha.c:5863 +#: vms-alpha.c:6043 #, c-format msgid " transfer addr psect: %u\n" msgstr " Ð°Ð´Ñ€ÐµÑ Ð¿ÐµÑ€ÐµÐ´Ð°Ñ‡Ð¸ psect: %u\n" -#: vms-alpha.c:5865 +#: vms-alpha.c:6045 #, c-format msgid " transfer address : 0x%08x\n" msgstr " Ð°Ð´Ñ€ÐµÑ Ð¿ÐµÑ€ÐµÐ´Ð°Ñ‡Ð¸ : 0x%08x\n" -#: vms-alpha.c:5874 +#: vms-alpha.c:6054 msgid " WEAK" msgstr " WEAK" -#: vms-alpha.c:5876 +#: vms-alpha.c:6056 msgid " DEF" msgstr " DEF" -#: vms-alpha.c:5878 +#: vms-alpha.c:6058 msgid " UNI" msgstr " UNI" -#: vms-alpha.c:5880 vms-alpha.c:5901 +#: vms-alpha.c:6060 vms-alpha.c:6081 msgid " REL" msgstr " REL" -#: vms-alpha.c:5882 +#: vms-alpha.c:6062 msgid " COMM" msgstr " COMM" -#: vms-alpha.c:5884 +#: vms-alpha.c:6064 msgid " VECEP" msgstr " VECEP" -#: vms-alpha.c:5886 +#: vms-alpha.c:6066 msgid " NORM" msgstr " NORM" -#: vms-alpha.c:5888 +#: vms-alpha.c:6068 msgid " QVAL" msgstr " QVAL" -#: vms-alpha.c:5895 +#: vms-alpha.c:6075 msgid " PIC" msgstr " PIC" -#: vms-alpha.c:5897 +#: vms-alpha.c:6077 msgid " LIB" msgstr " LIB" -#: vms-alpha.c:5899 +#: vms-alpha.c:6079 msgid " OVR" msgstr " OVR" -#: vms-alpha.c:5903 +#: vms-alpha.c:6083 msgid " GBL" msgstr " GBL" -#: vms-alpha.c:5905 +#: vms-alpha.c:6085 msgid " SHR" msgstr " SHR" -#: vms-alpha.c:5907 +#: vms-alpha.c:6087 msgid " EXE" msgstr " EXE" -#: vms-alpha.c:5909 +#: vms-alpha.c:6089 msgid " RD" msgstr " RD" -#: vms-alpha.c:5911 +#: vms-alpha.c:6091 msgid " WRT" msgstr " WRT" -#: vms-alpha.c:5913 +#: vms-alpha.c:6093 msgid " VEC" msgstr " VEC" -#: vms-alpha.c:5915 +#: vms-alpha.c:6095 msgid " NOMOD" msgstr " NOMOD" -#: vms-alpha.c:5917 +#: vms-alpha.c:6097 msgid " COM" msgstr " COM" -#: vms-alpha.c:5919 +#: vms-alpha.c:6099 msgid " 64B" msgstr " 64B" -#: vms-alpha.c:5928 +#: vms-alpha.c:6108 #, c-format msgid " EGSD (len=%u):\n" msgstr " EGSD (len=%u):\n" -#: vms-alpha.c:5941 +#: vms-alpha.c:6121 #, c-format msgid " EGSD entry %2u (type: %u, len: %u): " msgstr " запиÑÑŒ EGSD %2u (тип: %u, длина: %u): " -#: vms-alpha.c:5947 vms-alpha.c:6198 +#: vms-alpha.c:6127 vms-alpha.c:6378 #, c-format msgid " Error: length larger than remaining space in record\n" msgstr " Ошибка: длина больше оÑтавшегоÑÑ Ð¿Ñ€Ð¾ÑтранÑтва в запиÑи\n" -#: vms-alpha.c:5959 +#: vms-alpha.c:6139 #, c-format msgid "PSC - Program section definition\n" msgstr "PSC - определение программного раздела\n" -#: vms-alpha.c:5960 vms-alpha.c:5977 +#: vms-alpha.c:6140 vms-alpha.c:6157 #, c-format msgid " alignment : 2**%u\n" msgstr " выравнивание : 2**%u\n" -#: vms-alpha.c:5961 vms-alpha.c:5978 +#: vms-alpha.c:6141 vms-alpha.c:6158 #, c-format msgid " flags : 0x%04x" msgstr " флаги : 0x%04x" -#: vms-alpha.c:5965 +#: vms-alpha.c:6145 #, c-format msgid " alloc (len): %u (0x%08x)\n" msgstr " alloc (len): %u (0x%08x)\n" -#: vms-alpha.c:5966 vms-alpha.c:6023 vms-alpha.c:6072 +#: vms-alpha.c:6146 vms-alpha.c:6203 vms-alpha.c:6252 #, c-format msgid " name : %.*s\n" msgstr " Ð¸Ð¼Ñ : %.*s\n" -#: vms-alpha.c:5976 +#: vms-alpha.c:6156 #, c-format msgid "SPSC - Shared Image Program section def\n" msgstr "SPSC — определение программного раздела общего образа\n" -#: vms-alpha.c:5982 +#: vms-alpha.c:6162 #, c-format msgid " alloc (len) : %u (0x%08x)\n" msgstr " alloc (len) : %u (0x%08x)\n" -#: vms-alpha.c:5983 +#: vms-alpha.c:6163 #, c-format msgid " image offset : 0x%08x\n" msgstr " Ñмещение образа : 0x%08x\n" -#: vms-alpha.c:5985 +#: vms-alpha.c:6165 #, c-format msgid " symvec offset : 0x%08x\n" msgstr " Ñмещение symvec: 0x%08x\n" -#: vms-alpha.c:5987 +#: vms-alpha.c:6167 #, c-format msgid " name : %.*s\n" msgstr " Ð¸Ð¼Ñ : %.*s\n" -#: vms-alpha.c:6000 +#: vms-alpha.c:6180 #, c-format msgid "SYM - Global symbol definition\n" msgstr "SYM - определение глобальных Ñимволов\n" -#: vms-alpha.c:6001 vms-alpha.c:6061 vms-alpha.c:6082 vms-alpha.c:6101 +#: vms-alpha.c:6181 vms-alpha.c:6241 vms-alpha.c:6262 vms-alpha.c:6281 #, c-format msgid " flags: 0x%04x" msgstr " флаги: 0x%04x" -#: vms-alpha.c:6004 +#: vms-alpha.c:6184 #, c-format msgid " psect offset: 0x%08x\n" msgstr " Ñмещение psect: 0x%08x\n" -#: vms-alpha.c:6008 +#: vms-alpha.c:6188 #, c-format msgid " code address: 0x%08x\n" msgstr " Ð°Ð´Ñ€ÐµÑ ÐºÐ¾Ð´Ð°: 0x%08x\n" -#: vms-alpha.c:6010 +#: vms-alpha.c:6190 #, c-format msgid " psect index for entry point : %u\n" msgstr " Ð¸Ð½Ð´ÐµÐºÑ psect Ð´Ð»Ñ Ñ‚Ð¾Ñ‡ÐºÐ¸ входа: %u\n" -#: vms-alpha.c:6013 vms-alpha.c:6089 vms-alpha.c:6108 +#: vms-alpha.c:6193 vms-alpha.c:6269 vms-alpha.c:6288 #, c-format msgid " psect index : %u\n" msgstr " Ð¸Ð½Ð´ÐµÐºÑ psect: %u\n" -#: vms-alpha.c:6015 vms-alpha.c:6091 vms-alpha.c:6110 +#: vms-alpha.c:6195 vms-alpha.c:6271 vms-alpha.c:6290 #, c-format msgid " name : %.*s\n" msgstr " Ð¸Ð¼Ñ : %.*s\n" -#: vms-alpha.c:6022 +#: vms-alpha.c:6202 #, c-format msgid "SYM - Global symbol reference\n" msgstr "SYM - ÑÑылки глобальных Ñимволов\n" -#: vms-alpha.c:6034 +#: vms-alpha.c:6214 #, c-format msgid "IDC - Ident Consistency check\n" msgstr "IDC - проверка идентификатора целоÑтноÑти\n" -#: vms-alpha.c:6035 +#: vms-alpha.c:6215 #, c-format msgid " flags : 0x%08x" msgstr " флаги : 0x%08x" -#: vms-alpha.c:6039 +#: vms-alpha.c:6219 #, c-format msgid " id match : %x\n" msgstr " id ÑоответÑÑ‚Ð²Ð¸Ñ : %x\n" -#: vms-alpha.c:6041 +#: vms-alpha.c:6221 #, c-format msgid " error severity: %x\n" msgstr " ÑерьёзноÑÑ‚ÑŒ ошибки: %x\n" -#: vms-alpha.c:6044 +#: vms-alpha.c:6224 #, c-format msgid " entity name : %.*s\n" msgstr " название категории: %.*s\n" -#: vms-alpha.c:6046 +#: vms-alpha.c:6226 #, c-format msgid " object name : %.*s\n" msgstr " Ð¸Ð¼Ñ Ð¾Ð±ÑŠÐµÐºÑ‚Ð°: %.*s\n" -#: vms-alpha.c:6049 +#: vms-alpha.c:6229 #, c-format msgid " binary ident : 0x%08x\n" msgstr " двоичный идентификатор: 0x%08x\n" -#: vms-alpha.c:6052 +#: vms-alpha.c:6232 #, c-format msgid " ascii ident : %.*s\n" msgstr " ascii-идентификатор: %.*s\n" -#: vms-alpha.c:6060 +#: vms-alpha.c:6240 #, c-format msgid "SYMG - Universal symbol definition\n" msgstr "SYMG - определение универÑальных Ñимволов\n" -#: vms-alpha.c:6064 +#: vms-alpha.c:6244 #, c-format msgid " symbol vector offset: 0x%08x\n" msgstr " Ñмещение Ñимвольного вектора: 0x%08x\n" -#: vms-alpha.c:6066 +#: vms-alpha.c:6246 #, c-format msgid " entry point: 0x%08x\n" msgstr " точка входа: 0x%08x\n" -#: vms-alpha.c:6068 +#: vms-alpha.c:6248 #, c-format msgid " proc descr : 0x%08x\n" msgstr " proc descr : 0x%08x\n" -#: vms-alpha.c:6070 +#: vms-alpha.c:6250 #, c-format msgid " psect index: %u\n" msgstr " Ð¸Ð½Ð´ÐµÐºÑ psect: %u\n" -#: vms-alpha.c:6081 +#: vms-alpha.c:6261 #, c-format msgid "SYMV - Vectored symbol definition\n" msgstr "SYMV - определение векторных Ñимволов\n" -#: vms-alpha.c:6085 +#: vms-alpha.c:6265 #, c-format msgid " vector : 0x%08x\n" msgstr " вектор : 0x%08x\n" -#: vms-alpha.c:6087 vms-alpha.c:6106 +#: vms-alpha.c:6267 vms-alpha.c:6286 #, c-format msgid " psect offset: %u\n" msgstr " Ñмещение psect: %u\n" -#: vms-alpha.c:6100 +#: vms-alpha.c:6280 #, c-format msgid "SYMM - Global symbol definition with version\n" msgstr "SYMM - определение глобальных Ñимволов Ñ Ð²ÐµÑ€Ñией\n" -#: vms-alpha.c:6104 +#: vms-alpha.c:6284 #, c-format msgid " version mask: 0x%08x\n" msgstr " маÑка верÑии: 0x%08x\n" -#: vms-alpha.c:6115 +#: vms-alpha.c:6295 #, c-format msgid "unhandled egsd entry type %u\n" msgstr "необработанный egsd-Ñлемент типа %u\n" -#: vms-alpha.c:6150 +#: vms-alpha.c:6330 #, c-format msgid " linkage index: %u, replacement insn: 0x%08x\n" msgstr " Ð¸Ð½Ð´ÐµÐºÑ ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ¸: %u, заменитель insn: 0x%08x\n" -#: vms-alpha.c:6154 +#: vms-alpha.c:6334 #, c-format msgid " psect idx 1: %u, offset 1: 0x%08x %08x\n" msgstr " 1-й Ð¸Ð½Ð´ÐµÐºÑ psect: %u, 1-е Ñмещение: 0x%08x %08x\n" -#: vms-alpha.c:6159 +#: vms-alpha.c:6339 #, c-format msgid " psect idx 2: %u, offset 2: 0x%08x %08x\n" msgstr " 2-й Ð¸Ð½Ð´ÐµÐºÑ psect: %u, 2-е Ñмещение: 0x%08x %08x\n" -#: vms-alpha.c:6165 +#: vms-alpha.c:6345 #, c-format msgid " psect idx 3: %u, offset 3: 0x%08x %08x\n" msgstr " 3-й Ð¸Ð½Ð´ÐµÐºÑ psect: %u, 3-е Ñмещение: 0x%08x %08x\n" -#: vms-alpha.c:6170 +#: vms-alpha.c:6350 #, c-format msgid " global name: %.*s\n" msgstr " глобальное имÑ: %.*s\n" -#: vms-alpha.c:6181 +#: vms-alpha.c:6361 #, c-format msgid " %s (len=%u+%u):\n" msgstr " %s (len=%u+%u):\n" -#: vms-alpha.c:6203 +#: vms-alpha.c:6383 #, c-format msgid " (type: %3u, size: 4+%3u): " msgstr " (тип: %3u, размер: 4+%3u): " -#: vms-alpha.c:6207 +#: vms-alpha.c:6387 #, c-format msgid "STA_GBL (stack global) %.*s\n" msgstr "STA_GBL (глобальный Ñтек) %.*s\n" -#: vms-alpha.c:6211 +#: vms-alpha.c:6391 #, c-format msgid "STA_LW (stack longword) 0x%08x\n" msgstr "STA_LW (Ñтек длинных Ñлов) 0x%08x\n" -#: vms-alpha.c:6215 +#: vms-alpha.c:6395 #, c-format msgid "STA_QW (stack quadword) 0x%08x %08x\n" msgstr "STA_QW (Ñтек четверных Ñлов) 0x%08x %08x\n" -#: vms-alpha.c:6220 +#: vms-alpha.c:6400 #, c-format msgid "STA_PQ (stack psect base + offset)\n" msgstr "STA_PQ (Ñтек psect база + Ñмещение)\n" -#: vms-alpha.c:6222 +#: vms-alpha.c:6402 #, c-format msgid " psect: %u, offset: 0x%08x %08x\n" msgstr " psect: %u, Ñмещение: 0x%08x %08x\n" -#: vms-alpha.c:6228 +#: vms-alpha.c:6408 #, c-format msgid "STA_LI (stack literal)\n" msgstr "STA_LI (Ñтек литерала)\n" -#: vms-alpha.c:6231 +#: vms-alpha.c:6411 #, c-format msgid "STA_MOD (stack module)\n" msgstr "STA_MOD (Ñтек модулей)\n" -#: vms-alpha.c:6234 +#: vms-alpha.c:6414 #, c-format msgid "STA_CKARG (compare procedure argument)\n" msgstr "STA_CKARG (аргумент процедуры ÑравнениÑ)\n" -#: vms-alpha.c:6238 +#: vms-alpha.c:6418 #, c-format msgid "STO_B (store byte)\n" msgstr "STO_B (хранимый байт)\n" -#: vms-alpha.c:6241 +#: vms-alpha.c:6421 #, c-format msgid "STO_W (store word)\n" msgstr "STO_W (хранимое Ñлово)\n" -#: vms-alpha.c:6244 +#: vms-alpha.c:6424 #, c-format msgid "STO_LW (store longword)\n" msgstr "STO_LW (хранимое длинное Ñлово)\n" -#: vms-alpha.c:6247 +#: vms-alpha.c:6427 #, c-format msgid "STO_QW (store quadword)\n" msgstr "STO_QW (хранимое учетверённое Ñлово)\n" -#: vms-alpha.c:6253 +#: vms-alpha.c:6433 #, c-format msgid "STO_IMMR (store immediate repeat) %u bytes\n" msgstr "STO_IMMR (хранимый непоÑредÑтвенный повтор) %u байт\n" -#: vms-alpha.c:6260 +#: vms-alpha.c:6440 #, c-format msgid "STO_GBL (store global) %.*s\n" msgstr "STO_GBL (Ñ…Ñ€Ð°Ð½Ð¸Ð¼Ð°Ñ Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ð°Ñ) %.*s\n" -#: vms-alpha.c:6264 +#: vms-alpha.c:6444 #, c-format msgid "STO_CA (store code address) %.*s\n" msgstr "STO_CA (хранимый Ð°Ð´Ñ€ÐµÑ ÐºÐ¾Ð´Ð°) %.*s\n" -#: vms-alpha.c:6268 +#: vms-alpha.c:6448 #, c-format msgid "STO_RB (store relative branch)\n" msgstr "STO_RB (хранимое отноÑительное ветвление)\n" -#: vms-alpha.c:6271 +#: vms-alpha.c:6451 #, c-format msgid "STO_AB (store absolute branch)\n" msgstr "STO_AB (хранимое абÑолютное ветвление)\n" -#: vms-alpha.c:6274 +#: vms-alpha.c:6454 #, c-format msgid "STO_OFF (store offset to psect)\n" msgstr "STO_OFF (хранимое Ñмещение на psect)\n" -#: vms-alpha.c:6280 +#: vms-alpha.c:6460 #, c-format msgid "STO_IMM (store immediate) %u bytes\n" msgstr "STO_IMM (Ñ…Ñ€Ð°Ð½Ð¸Ð¼Ð°Ñ Ð½ÐµÐ¿Ð¾ÑредÑтвенно) %u байт\n" -#: vms-alpha.c:6287 +#: vms-alpha.c:6467 #, c-format msgid "STO_GBL_LW (store global longword) %.*s\n" msgstr "STO_GBL_LW (хранимое глобальное длинное Ñлово) %.*s\n" -#: vms-alpha.c:6291 +#: vms-alpha.c:6471 #, c-format msgid "STO_OFF (store LP with procedure signature)\n" msgstr "STO_OFF (хранимый LP Ñ Ñигнатурой процедуры)\n" -#: vms-alpha.c:6294 +#: vms-alpha.c:6474 #, c-format msgid "STO_BR_GBL (store branch global) *todo*\n" msgstr "STO_BR_GBL (хранимое глобальное ветвление) *todo*\n" -#: vms-alpha.c:6297 +#: vms-alpha.c:6477 #, c-format msgid "STO_BR_PS (store branch psect + offset) *todo*\n" msgstr "STO_BR_PS (хранимое ветвление psect + Ñмещение) *todo*\n" -#: vms-alpha.c:6301 +#: vms-alpha.c:6481 #, c-format msgid "OPR_NOP (no-operation)\n" msgstr "OPR_NOP (нет операции)\n" -#: vms-alpha.c:6304 +#: vms-alpha.c:6484 #, c-format msgid "OPR_ADD (add)\n" msgstr "OPR_ADD (Ñложение)\n" -#: vms-alpha.c:6307 +#: vms-alpha.c:6487 #, c-format msgid "OPR_SUB (subtract)\n" msgstr "OPR_SUB (вычитание)\n" -#: vms-alpha.c:6310 +#: vms-alpha.c:6490 #, c-format msgid "OPR_MUL (multiply)\n" msgstr "OPR_MUL (умножение)\n" -#: vms-alpha.c:6313 +#: vms-alpha.c:6493 #, c-format msgid "OPR_DIV (divide)\n" msgstr "OPR_DIV (деление)\n" -#: vms-alpha.c:6316 +#: vms-alpha.c:6496 #, c-format msgid "OPR_AND (logical and)\n" msgstr "OPR_AND (логичеÑкое и)\n" -#: vms-alpha.c:6319 +#: vms-alpha.c:6499 #, c-format msgid "OPR_IOR (logical inclusive or)\n" msgstr "OPR_IOR (логичеÑкое включающее или)\n" -#: vms-alpha.c:6322 +#: vms-alpha.c:6502 #, c-format msgid "OPR_EOR (logical exclusive or)\n" msgstr "OPR_EOR (логичеÑкое не включающее или)\n" -#: vms-alpha.c:6325 +#: vms-alpha.c:6505 #, c-format msgid "OPR_NEG (negate)\n" msgstr "OPR_NEG (инверÑиÑ)\n" -#: vms-alpha.c:6328 +#: vms-alpha.c:6508 #, c-format msgid "OPR_COM (complement)\n" msgstr "OPR_COM (дополнение)\n" -#: vms-alpha.c:6331 +#: vms-alpha.c:6511 #, c-format msgid "OPR_INSV (insert field)\n" msgstr "OPR_INSV (поле вÑтавки)\n" -#: vms-alpha.c:6334 +#: vms-alpha.c:6514 #, c-format msgid "OPR_ASH (arithmetic shift)\n" msgstr "OPR_ASH (арифметичеÑкий Ñдвиг)\n" -#: vms-alpha.c:6337 +#: vms-alpha.c:6517 #, c-format msgid "OPR_USH (unsigned shift)\n" msgstr "OPR_USH (беззнаковый Ñдвиг)\n" -#: vms-alpha.c:6340 +#: vms-alpha.c:6520 #, c-format msgid "OPR_ROT (rotate)\n" msgstr "OPR_ROT (цикличеÑкий Ñдвиг)\n" -#: vms-alpha.c:6343 +#: vms-alpha.c:6523 #, c-format msgid "OPR_SEL (select)\n" msgstr "OPR_SEL (выбор)\n" -#: vms-alpha.c:6346 +#: vms-alpha.c:6526 #, c-format msgid "OPR_REDEF (redefine symbol to curr location)\n" msgstr "OPR_REDEF (переопределение Ñимвола в текущей позиции)\n" -#: vms-alpha.c:6349 +#: vms-alpha.c:6529 #, c-format msgid "OPR_REDEF (define a literal)\n" msgstr "OPR_REDEF (определение литерала)\n" -#: vms-alpha.c:6353 +#: vms-alpha.c:6533 #, c-format msgid "STC_LP (store cond linkage pair)\n" msgstr "STC_LP (Ñ…Ñ€Ð°Ð½Ð¸Ð¼Ð°Ñ ÑƒÑловно ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐµÐ¼Ð°Ñ Ð¿Ð°Ñ€Ð°)\n" -#: vms-alpha.c:6357 +#: vms-alpha.c:6537 #, c-format msgid "STC_LP_PSB (store cond linkage pair + signature)\n" msgstr "STC_LP_PSB (Ñ…Ñ€Ð°Ð½Ð¸Ð¼Ð°Ñ ÑƒÑловно ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐµÐ¼Ð°Ñ Ð¿Ð°Ñ€Ð° + Ñигнатура)\n" -#: vms-alpha.c:6359 +#: vms-alpha.c:6539 #, c-format msgid " linkage index: %u, procedure: %.*s\n" msgstr " Ð¸Ð½Ð´ÐµÐºÑ ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ¸: %u, процедура: %.*s\n" -#: vms-alpha.c:6362 +#: vms-alpha.c:6542 #, c-format msgid " signature: %.*s\n" msgstr " Ñигнатура: %.*s\n" -#: vms-alpha.c:6365 +#: vms-alpha.c:6545 #, c-format msgid "STC_GBL (store cond global)\n" msgstr "STC_GBL (Ñ…Ñ€Ð°Ð½Ð¸Ð¼Ð°Ñ Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ð¾Ðµ уÑловие)\n" -#: vms-alpha.c:6367 +#: vms-alpha.c:6547 #, c-format msgid " linkage index: %u, global: %.*s\n" msgstr " Ð¸Ð½Ð´ÐµÐºÑ ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ¸: %u, глобальный: %.*s\n" -#: vms-alpha.c:6371 +#: vms-alpha.c:6551 #, c-format msgid "STC_GCA (store cond code address)\n" msgstr "STC_GCA (хранимый Ð°Ð´Ñ€ÐµÑ ÑƒÑловного кода)\n" -#: vms-alpha.c:6373 +#: vms-alpha.c:6553 #, c-format msgid " linkage index: %u, procedure name: %.*s\n" msgstr " Ð¸Ð½Ð´ÐµÐºÑ ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ¸: %u, Ð¸Ð¼Ñ Ð¿Ñ€Ð¾Ñ†ÐµÐ´ÑƒÑ€Ñ‹: %.*s\n" -#: vms-alpha.c:6377 +#: vms-alpha.c:6557 #, c-format msgid "STC_PS (store cond psect + offset)\n" msgstr "STC_PS (хранимое уÑловие psect + Ñмещение)\n" -#: vms-alpha.c:6380 +#: vms-alpha.c:6560 #, c-format msgid " linkage index: %u, psect: %u, offset: 0x%08x %08x\n" msgstr " Ð¸Ð½Ð´ÐµÐºÑ ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ¸: %u, psect: %u, Ñмещение: 0x%08x %08x\n" -#: vms-alpha.c:6387 +#: vms-alpha.c:6567 #, c-format msgid "STC_NOP_GBL (store cond NOP at global addr)\n" msgstr "STC_NOP_GBL (хранимое уÑловие NOP по глобальному адреÑу)\n" -#: vms-alpha.c:6391 +#: vms-alpha.c:6571 #, c-format msgid "STC_NOP_PS (store cond NOP at psect + offset)\n" msgstr "STC_NOP_PS (хранимое уÑловие NOP по psect + Ñмещение)\n" -#: vms-alpha.c:6395 +#: vms-alpha.c:6575 #, c-format msgid "STC_BSR_GBL (store cond BSR at global addr)\n" msgstr "STC_BSR_GBL (хранимое уÑловие BSR по глобальному адреÑу)\n" -#: vms-alpha.c:6399 +#: vms-alpha.c:6579 #, c-format msgid "STC_BSR_PS (store cond BSR at psect + offset)\n" msgstr "STC_BSR_PS (хранимое уÑловие BSR по psect + Ñмещение)\n" -#: vms-alpha.c:6403 +#: vms-alpha.c:6583 #, c-format msgid "STC_LDA_GBL (store cond LDA at global addr)\n" msgstr "STC_LDA_GBL (хранимое уÑловие LDA по глобальному адреÑу)\n" -#: vms-alpha.c:6407 +#: vms-alpha.c:6587 #, c-format msgid "STC_LDA_PS (store cond LDA at psect + offset)\n" msgstr "STC_LDA_PS (хранимое уÑловие LDA по psect + Ñмещение)\n" -#: vms-alpha.c:6411 +#: vms-alpha.c:6591 #, c-format msgid "STC_BOH_GBL (store cond BOH at global addr)\n" msgstr "STC_BOH_GBL (хранимое уÑловие BOH по глобальному адреÑу)\n" -#: vms-alpha.c:6415 +#: vms-alpha.c:6595 #, c-format msgid "STC_BOH_PS (store cond BOH at psect + offset)\n" msgstr "STC_BOH_PS (хранимое уÑловие BOH по psect + Ñмещение)\n" -#: vms-alpha.c:6420 +#: vms-alpha.c:6600 #, c-format msgid "STC_NBH_GBL (store cond or hint at global addr)\n" msgstr "STC_NBH_GBL (хранимое уÑловие или указание по глобальному адреÑу)\n" -#: vms-alpha.c:6424 +#: vms-alpha.c:6604 #, c-format msgid "STC_NBH_PS (store cond or hint at psect + offset)\n" msgstr "STC_NBH_PS (хранимое уÑловие или указание по psect + Ñмещение)\n" -#: vms-alpha.c:6428 +#: vms-alpha.c:6608 #, c-format msgid "CTL_SETRB (set relocation base)\n" msgstr "CTL_SETRB (уÑтановка базы перемещениÑ)\n" -#: vms-alpha.c:6434 +#: vms-alpha.c:6614 #, c-format msgid "CTL_AUGRB (augment relocation base) %u\n" msgstr "CTL_AUGRB (дополнение базы перемещениÑ) %u\n" -#: vms-alpha.c:6438 +#: vms-alpha.c:6618 #, c-format msgid "CTL_DFLOC (define location)\n" msgstr "CTL_DFLOC (определение положениÑ)\n" -#: vms-alpha.c:6441 +#: vms-alpha.c:6621 #, c-format msgid "CTL_STLOC (set location)\n" msgstr "CTL_STLOC (задание положениÑ)\n" -#: vms-alpha.c:6444 +#: vms-alpha.c:6624 #, c-format msgid "CTL_STKDL (stack defined location)\n" msgstr "CTL_STKDL (положение определÑемое Ñтеком)\n" -#: vms-alpha.c:6447 vms-alpha.c:6871 vms-alpha.c:6997 +#: vms-alpha.c:6627 vms-alpha.c:7051 vms-alpha.c:7177 #, c-format msgid "*unhandled*\n" msgstr "*не обработано*\n" -#: vms-alpha.c:6477 vms-alpha.c:6516 +#: vms-alpha.c:6657 vms-alpha.c:6696 #, c-format msgid "cannot read GST record length\n" msgstr "не удалоÑÑŒ прочитать длину запиÑи GST\n" #. Ill-formed. -#: vms-alpha.c:6498 +#: vms-alpha.c:6678 #, c-format msgid "cannot find EMH in first GST record\n" msgstr "не удалоÑÑŒ найти EMH в первой запиÑи GST\n" -#: vms-alpha.c:6524 +#: vms-alpha.c:6704 #, c-format msgid "cannot read GST record header\n" msgstr "не удалоÑÑŒ прочитать заголовок запиÑи GST\n" -#: vms-alpha.c:6537 +#: vms-alpha.c:6717 #, c-format msgid " corrupted GST\n" msgstr " повреждённый GST\n" -#: vms-alpha.c:6545 +#: vms-alpha.c:6725 #, c-format msgid "cannot read GST record\n" msgstr "не удалоÑÑŒ прочитать запиÑÑŒ GST\n" -#: vms-alpha.c:6574 +#: vms-alpha.c:6754 #, c-format msgid " unhandled EOBJ record type %u\n" msgstr " необработанный тип запиÑи EOBJ %u\n" -#: vms-alpha.c:6598 +#: vms-alpha.c:6778 #, c-format msgid " bitcount: %u, base addr: 0x%08x\n" msgstr " Ñчётчик бит: %u, базовый адреÑ: 0x%08x\n" -#: vms-alpha.c:6612 +#: vms-alpha.c:6792 #, c-format msgid " bitmap: 0x%08x (count: %u):\n" msgstr " bitmap: 0x%08x (Ñчётчик: %u):\n" -#: vms-alpha.c:6619 +#: vms-alpha.c:6799 #, c-format msgid " %08x" msgstr " %08x" -#: vms-alpha.c:6645 +#: vms-alpha.c:6825 #, c-format msgid " image %u (%u entries)\n" msgstr " образ %u (%u Ñлементов)\n" -#: vms-alpha.c:6651 +#: vms-alpha.c:6831 #, c-format msgid " offset: 0x%08x, val: 0x%08x\n" msgstr " Ñмещение: 0x%08x, значение: 0x%08x\n" -#: vms-alpha.c:6673 +#: vms-alpha.c:6853 #, c-format msgid " image %u (%u entries), offsets:\n" msgstr " образ %u (%u Ñлементов), ÑмещениÑ:\n" -#: vms-alpha.c:6680 +#: vms-alpha.c:6860 #, c-format msgid " 0x%08x" msgstr " 0x%08x" #. 64 bits. -#: vms-alpha.c:6802 +#: vms-alpha.c:6982 #, c-format msgid "64 bits *unhandled*\n" msgstr "64 бита *не обработано*\n" -#: vms-alpha.c:6807 +#: vms-alpha.c:6987 #, c-format msgid "class: %u, dtype: %u, length: %u, pointer: 0x%08x\n" msgstr "клаÑÑ: %u, dtype: %u, длина: %u, указатель: 0x%08x\n" -#: vms-alpha.c:6818 +#: vms-alpha.c:6998 #, c-format msgid "non-contiguous array of %s\n" msgstr "неÑвÑзный маÑÑив %s\n" -#: vms-alpha.c:6823 +#: vms-alpha.c:7003 #, c-format msgid "dimct: %u, aflags: 0x%02x, digits: %u, scale: %u\n" msgstr "dimct: %u, aflags: 0x%02x, цифр: %u, шкала: %u\n" -#: vms-alpha.c:6828 +#: vms-alpha.c:7008 #, c-format msgid "arsize: %u, a0: 0x%08x\n" msgstr "arsize: %u, a0: 0x%08x\n" -#: vms-alpha.c:6832 +#: vms-alpha.c:7012 #, c-format msgid "Strides:\n" msgstr "Шаги:\n" -#: vms-alpha.c:6842 +#: vms-alpha.c:7022 #, c-format msgid "Bounds:\n" msgstr "Границы:\n" -#: vms-alpha.c:6848 +#: vms-alpha.c:7028 #, c-format msgid "[%u]: Lower: %u, upper: %u\n" msgstr "[%u]: нижнÑÑ: %u, верхнÑÑ: %u\n" -#: vms-alpha.c:6860 +#: vms-alpha.c:7040 #, c-format msgid "unaligned bit-string of %s\n" msgstr "Ð½ÐµÐ²Ñ‹Ñ€Ð¾Ð²Ð½ÐµÐ½Ð½Ð°Ñ Ñтрока бит %s\n" -#: vms-alpha.c:6865 +#: vms-alpha.c:7045 #, c-format msgid "base: %u, pos: %u\n" msgstr "база: %u, позициÑ: %u\n" -#: vms-alpha.c:6886 +#: vms-alpha.c:7066 #, c-format msgid "vflags: 0x%02x, value: 0x%08x " msgstr "vflags: 0x%02x, значение: 0x%08x " -#: vms-alpha.c:6892 +#: vms-alpha.c:7072 #, c-format msgid "(no value)\n" msgstr "(нет значениÑ)\n" -#: vms-alpha.c:6895 +#: vms-alpha.c:7075 #, c-format msgid "(not active)\n" msgstr "(не активно)\n" -#: vms-alpha.c:6898 +#: vms-alpha.c:7078 #, c-format msgid "(not allocated)\n" msgstr "(не выделено)\n" -#: vms-alpha.c:6901 +#: vms-alpha.c:7081 #, c-format msgid "(descriptor)\n" msgstr "(деÑкриптор)\n" -#: vms-alpha.c:6905 +#: vms-alpha.c:7085 #, c-format msgid "(trailing value)\n" msgstr "(конечное значение)\n" -#: vms-alpha.c:6908 +#: vms-alpha.c:7088 #, c-format msgid "(value spec follows)\n" msgstr "(далее значение Ñпецификации)\n" -#: vms-alpha.c:6911 +#: vms-alpha.c:7091 #, c-format msgid "(at bit offset %u)\n" msgstr "(по битовому Ñмещению %u)\n" -#: vms-alpha.c:6915 +#: vms-alpha.c:7095 #, c-format msgid "(reg: %u, disp: %u, indir: %u, kind: " msgstr "(reg: %u, disp: %u, indir: %u, kind: " -#: vms-alpha.c:6922 +#: vms-alpha.c:7102 msgid "literal" msgstr "литерал" -#: vms-alpha.c:6925 +#: vms-alpha.c:7105 msgid "address" msgstr "адреÑ" -#: vms-alpha.c:6928 +#: vms-alpha.c:7108 msgid "desc" msgstr "опиÑ" -#: vms-alpha.c:6931 +#: vms-alpha.c:7111 msgid "reg" msgstr "рег" -#: vms-alpha.c:6948 +#: vms-alpha.c:7128 #, c-format msgid "len: %2u, kind: %2u " msgstr "len: %2u, kind: %2u " -#: vms-alpha.c:6954 +#: vms-alpha.c:7134 #, c-format msgid "atomic, type=0x%02x %s\n" msgstr "атомарно, тип=0x%02x %s\n" -#: vms-alpha.c:6958 +#: vms-alpha.c:7138 #, c-format msgid "indirect, defined at 0x%08x\n" msgstr "коÑвенно, определено по адреÑу 0x%08x\n" -#: vms-alpha.c:6962 +#: vms-alpha.c:7142 #, c-format msgid "typed pointer\n" msgstr "типизированный указатель\n" -#: vms-alpha.c:6966 +#: vms-alpha.c:7146 #, c-format msgid "pointer\n" msgstr "указатель\n" -#: vms-alpha.c:6974 +#: vms-alpha.c:7154 #, c-format msgid "array, dim: %u, bitmap: " msgstr "маÑÑив, размер: %u, bitmap: " -#: vms-alpha.c:6981 +#: vms-alpha.c:7161 #, c-format msgid "array descriptor:\n" msgstr "опиÑатель маÑÑива:\n" -#: vms-alpha.c:6988 +#: vms-alpha.c:7168 #, c-format msgid "type spec for element:\n" msgstr "ÑÐ¿ÐµÑ†Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ñ Ñ‚Ð¸Ð¿Ð° Ð´Ð»Ñ Ñлемента:\n" -#: vms-alpha.c:6990 +#: vms-alpha.c:7170 #, c-format msgid "type spec for subscript %u:\n" msgstr "ÑÐ¿ÐµÑ†Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ñ Ñ‚Ð¸Ð¿Ð° Ð´Ð»Ñ subscript %u:\n" -#: vms-alpha.c:7008 +#: vms-alpha.c:7188 #, c-format msgid "Debug symbol table:\n" msgstr "Таблица Ñимволов отладки:\n" -#: vms-alpha.c:7019 +#: vms-alpha.c:7199 #, c-format msgid "cannot read DST header\n" msgstr "не удалоÑÑŒ прочитать заголовок DST\n" -#: vms-alpha.c:7025 +#: vms-alpha.c:7205 #, c-format msgid " type: %3u, len: %3u (at 0x%08x): " msgstr " тип: %3u, длина: %3u (по 0x%08x): " -#: vms-alpha.c:7039 +#: vms-alpha.c:7219 #, c-format msgid "cannot read DST symbol\n" msgstr "не удалоÑÑŒ прочитать Ñимвол DST\n" -#: vms-alpha.c:7082 +#: vms-alpha.c:7262 #, c-format msgid "standard data: %s\n" msgstr "Ñтандартные данные: %s\n" -#: vms-alpha.c:7085 vms-alpha.c:7173 +#: vms-alpha.c:7265 vms-alpha.c:7353 #, c-format msgid " name: %.*s\n" msgstr " имÑ: %.*s\n" -#: vms-alpha.c:7092 +#: vms-alpha.c:7272 #, c-format msgid "modbeg\n" msgstr "modbeg\n" -#: vms-alpha.c:7094 +#: vms-alpha.c:7274 #, c-format msgid " flags: %d, language: %u, major: %u, minor: %u\n" msgstr " флаги: %d, Ñзык: %u, Ñтарший: %u, младший: %u\n" -#: vms-alpha.c:7100 vms-alpha.c:7374 +#: vms-alpha.c:7280 vms-alpha.c:7554 #, c-format msgid " module name: %.*s\n" msgstr " Ð¸Ð¼Ñ Ð¼Ð¾Ð´ÑƒÐ»Ñ: %.*s\n" -#: vms-alpha.c:7103 +#: vms-alpha.c:7283 #, c-format msgid " compiler : %.*s\n" msgstr " компилÑтор : %.*s\n" -#: vms-alpha.c:7108 +#: vms-alpha.c:7288 #, c-format msgid "modend\n" msgstr "modend\n" -#: vms-alpha.c:7115 +#: vms-alpha.c:7295 msgid "rtnbeg\n" msgstr "rtnbeg\n" -#: vms-alpha.c:7117 +#: vms-alpha.c:7297 #, c-format msgid " flags: %u, address: 0x%08x, pd-address: 0x%08x\n" msgstr " флаги: %u, адреÑ: 0x%08x, pd-адреÑ: 0x%08x\n" -#: vms-alpha.c:7122 +#: vms-alpha.c:7302 #, c-format msgid " routine name: %.*s\n" msgstr " Ð¸Ð¼Ñ Ð¿Ñ€Ð¾Ñ†ÐµÐ´ÑƒÑ€Ñ‹: %.*s\n" -#: vms-alpha.c:7130 +#: vms-alpha.c:7310 #, c-format msgid "rtnend: size 0x%08x\n" msgstr "rtnend: размер 0x%08x\n" -#: vms-alpha.c:7138 +#: vms-alpha.c:7318 #, c-format msgid "prolog: bkpt address 0x%08x\n" msgstr "пролог: Ð°Ð´Ñ€ÐµÑ bkpt 0x%08x\n" -#: vms-alpha.c:7147 +#: vms-alpha.c:7327 #, c-format msgid "epilog: flags: %u, count: %u\n" msgstr "Ñпилог: флаги: %u, Ñчётчик: %u\n" -#: vms-alpha.c:7157 +#: vms-alpha.c:7337 #, c-format msgid "blkbeg: address: 0x%08x, name: %.*s\n" msgstr "blkbeg: адреÑ: 0x%08x, имÑ: %.*s\n" -#: vms-alpha.c:7166 +#: vms-alpha.c:7346 #, c-format msgid "blkend: size: 0x%08x\n" msgstr "blkend: размер: 0x%08x\n" -#: vms-alpha.c:7172 +#: vms-alpha.c:7352 #, c-format msgid "typspec (len: %u)\n" msgstr "typspec (длина: %u)\n" -#: vms-alpha.c:7179 +#: vms-alpha.c:7359 #, c-format msgid "septyp, name: %.*s\n" msgstr "septyp, имÑ: %.*s\n" -#: vms-alpha.c:7188 +#: vms-alpha.c:7368 #, c-format msgid "recbeg: name: %.*s\n" msgstr "recbeg: имÑ: %.*s\n" -#: vms-alpha.c:7190 +#: vms-alpha.c:7370 #, c-format msgid " len: %u bits\n" msgstr " длина: %u бит\n" -#: vms-alpha.c:7195 +#: vms-alpha.c:7375 #, c-format msgid "recend\n" msgstr "recend\n" -#: vms-alpha.c:7199 +#: vms-alpha.c:7379 #, c-format msgid "enumbeg, len: %u, name: %.*s\n" msgstr "enumbeg, длина: %u, имÑ: %.*s\n" -#: vms-alpha.c:7203 +#: vms-alpha.c:7383 #, c-format msgid "enumelt, name: %.*s\n" msgstr "enumelt, имÑ: %.*s\n" -#: vms-alpha.c:7207 +#: vms-alpha.c:7387 #, c-format msgid "enumend\n" msgstr "enumend\n" -#: vms-alpha.c:7212 +#: vms-alpha.c:7392 #, c-format msgid "label, name: %.*s\n" msgstr "метка, имÑ: %.*s\n" -#: vms-alpha.c:7214 +#: vms-alpha.c:7394 #, c-format msgid " address: 0x%08x\n" msgstr " адреÑ: 0x%08x\n" -#: vms-alpha.c:7224 +#: vms-alpha.c:7404 #, c-format msgid "discontiguous range (nbr: %u)\n" msgstr "неÑмежный диапазон (nbr: %u)\n" -#: vms-alpha.c:7227 +#: vms-alpha.c:7407 #, c-format msgid " address: 0x%08x, size: %u\n" msgstr " адреÑ: 0x%08x, размер: %u\n" -#: vms-alpha.c:7237 +#: vms-alpha.c:7417 #, c-format msgid "line num (len: %u)\n" msgstr "номер Ñтроки (длина: %u)\n" -#: vms-alpha.c:7254 +#: vms-alpha.c:7434 #, c-format msgid "delta_pc_w %u\n" msgstr "delta_pc_w %u\n" -#: vms-alpha.c:7261 +#: vms-alpha.c:7441 #, c-format msgid "incr_linum(b): +%u\n" msgstr "incr_linum(b): +%u\n" -#: vms-alpha.c:7267 +#: vms-alpha.c:7447 #, c-format msgid "incr_linum_w: +%u\n" msgstr "incr_linum_w: +%u\n" -#: vms-alpha.c:7273 +#: vms-alpha.c:7453 #, c-format msgid "incr_linum_l: +%u\n" msgstr "incr_linum_l: +%u\n" -#: vms-alpha.c:7279 +#: vms-alpha.c:7459 #, c-format msgid "set_line_num(w) %u\n" msgstr "set_line_num(w) %u\n" -#: vms-alpha.c:7284 +#: vms-alpha.c:7464 #, c-format msgid "set_line_num_b %u\n" msgstr "set_line_num_b %u\n" -#: vms-alpha.c:7289 +#: vms-alpha.c:7469 #, c-format msgid "set_line_num_l %u\n" msgstr "set_line_num_l %u\n" -#: vms-alpha.c:7294 +#: vms-alpha.c:7474 #, c-format msgid "set_abs_pc: 0x%08x\n" msgstr "set_abs_pc: 0x%08x\n" -#: vms-alpha.c:7298 +#: vms-alpha.c:7478 #, c-format msgid "delta_pc_l: +0x%08x\n" msgstr "delta_pc_l: +0x%08x\n" -#: vms-alpha.c:7303 +#: vms-alpha.c:7483 #, c-format msgid "term(b): 0x%02x" msgstr "term(b): 0x%02x" -#: vms-alpha.c:7305 +#: vms-alpha.c:7485 #, c-format msgid " pc: 0x%08x\n" msgstr " pc: 0x%08x\n" -#: vms-alpha.c:7310 +#: vms-alpha.c:7490 #, c-format msgid "term_w: 0x%04x" msgstr "term_w: 0x%04x" -#: vms-alpha.c:7312 +#: vms-alpha.c:7492 #, c-format msgid " pc: 0x%08x\n" msgstr " pc: 0x%08x\n" -#: vms-alpha.c:7318 +#: vms-alpha.c:7498 #, c-format msgid "delta pc +%-4d" msgstr "delta pc +%-4d" -#: vms-alpha.c:7322 +#: vms-alpha.c:7502 #, c-format msgid " pc: 0x%08x line: %5u\n" msgstr " pc: 0x%08x Ñтрока: %5u\n" -#: vms-alpha.c:7327 +#: vms-alpha.c:7507 #, c-format msgid " *unhandled* cmd %u\n" msgstr " *необработаннаÑ* команда %u\n" -#: vms-alpha.c:7342 +#: vms-alpha.c:7522 #, c-format msgid "source (len: %u)\n" msgstr "иÑточник (длина: %u)\n" -#: vms-alpha.c:7357 +#: vms-alpha.c:7537 #, c-format msgid " declfile: len: %u, flags: %u, fileid: %u\n" msgstr " declfile: длина: %u, флаги: %u, fileid: %u\n" -#: vms-alpha.c:7362 +#: vms-alpha.c:7542 #, c-format msgid " rms: cdt: 0x%08x %08x, ebk: 0x%08x, ffb: 0x%04x, rfo: %u\n" msgstr " rms: cdt: 0x%08x %08x, ebk: 0x%08x, ffb: 0x%04x, rfo: %u\n" -#: vms-alpha.c:7371 +#: vms-alpha.c:7551 #, c-format msgid " filename : %.*s\n" msgstr " Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° : %.*s\n" -#: vms-alpha.c:7380 +#: vms-alpha.c:7560 #, c-format msgid " setfile %u\n" msgstr " setfile %u\n" -#: vms-alpha.c:7385 vms-alpha.c:7390 +#: vms-alpha.c:7565 vms-alpha.c:7570 #, c-format msgid " setrec %u\n" msgstr " setrec %u\n" -#: vms-alpha.c:7395 vms-alpha.c:7400 +#: vms-alpha.c:7575 vms-alpha.c:7580 #, c-format msgid " setlnum %u\n" msgstr " setlnum %u\n" -#: vms-alpha.c:7405 vms-alpha.c:7410 +#: vms-alpha.c:7585 vms-alpha.c:7590 #, c-format msgid " deflines %u\n" msgstr " deflines %u\n" -#: vms-alpha.c:7414 +#: vms-alpha.c:7594 #, c-format msgid " formfeed\n" msgstr " formfeed\n" -#: vms-alpha.c:7418 +#: vms-alpha.c:7598 #, c-format msgid " *unhandled* cmd %u\n" msgstr " *необработаннаÑ* команда %u\n" -#: vms-alpha.c:7430 +#: vms-alpha.c:7610 #, c-format msgid "*unhandled* dst type %u\n" msgstr "*необработанный* тип Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ %u\n" -#: vms-alpha.c:7462 +#: vms-alpha.c:7642 #, c-format msgid "cannot read EIHD\n" msgstr "не удалоÑÑŒ прочитать EIHD\n" -#: vms-alpha.c:7466 +#: vms-alpha.c:7646 #, c-format msgid "EIHD: (size: %u, nbr blocks: %u)\n" msgstr "EIHD: (размер: %u, nbr блоков: %u)\n" -#: vms-alpha.c:7470 +#: vms-alpha.c:7650 #, c-format msgid " majorid: %u, minorid: %u\n" msgstr " majorid: %u, minorid: %u\n" -#: vms-alpha.c:7478 +#: vms-alpha.c:7658 msgid "executable" msgstr "иÑполнÑемый" -#: vms-alpha.c:7481 +#: vms-alpha.c:7661 msgid "linkable image" msgstr "компонуемый образ" -#: vms-alpha.c:7488 +#: vms-alpha.c:7668 #, c-format msgid " image type: %u (%s)" msgstr " тип образа: %u (%s)" -#: vms-alpha.c:7494 +#: vms-alpha.c:7674 msgid "native" msgstr "родной" -#: vms-alpha.c:7497 +#: vms-alpha.c:7677 msgid "CLI" msgstr "CLI" -#: vms-alpha.c:7504 +#: vms-alpha.c:7684 #, c-format msgid ", subtype: %u (%s)\n" msgstr ", подтип: %u (%s)\n" -#: vms-alpha.c:7511 +#: vms-alpha.c:7691 #, c-format msgid " offsets: isd: %u, activ: %u, symdbg: %u, imgid: %u, patch: %u\n" msgstr " ÑмещениÑ: isd: %u, activ: %u, symdbg: %u, imgid: %u, patch: %u\n" -#: vms-alpha.c:7515 +#: vms-alpha.c:7695 #, c-format msgid " fixup info rva: " msgstr " fixup info rva: " -#: vms-alpha.c:7517 +#: vms-alpha.c:7697 #, c-format msgid ", symbol vector rva: " msgstr ", Ñимвольный вектор rva: " -#: vms-alpha.c:7520 +#: vms-alpha.c:7700 #, c-format msgid "" "\n" @@ -7250,474 +7604,474 @@ "\n" " Ñмещение маÑÑива верÑий: %u\n" -#: vms-alpha.c:7525 +#: vms-alpha.c:7705 #, c-format msgid " img I/O count: %u, nbr channels: %u, req pri: %08x%08x\n" msgstr " img I/O count: %u, nbr channels: %u, req pri: %08x%08x\n" -#: vms-alpha.c:7531 +#: vms-alpha.c:7711 #, c-format msgid " linker flags: %08x:" msgstr " флаги компоновщика: %08x:" -#: vms-alpha.c:7562 +#: vms-alpha.c:7742 #, c-format msgid " ident: 0x%08x, sysver: 0x%08x, match ctrl: %u, symvect_size: %u\n" msgstr " ident: 0x%08x, sysver: 0x%08x, match ctrl: %u, symvect_size: %u\n" -#: vms-alpha.c:7568 +#: vms-alpha.c:7748 #, c-format msgid " BPAGE: %u" msgstr " BPAGE: %u" -#: vms-alpha.c:7575 +#: vms-alpha.c:7755 #, c-format msgid ", ext fixup offset: %u, no_opt psect off: %u" msgstr ", ext fixup offset: %u, no_opt psect off: %u" -#: vms-alpha.c:7578 +#: vms-alpha.c:7758 #, c-format msgid ", alias: %u\n" msgstr ", пÑевдоним: %u\n" -#: vms-alpha.c:7586 +#: vms-alpha.c:7766 #, c-format msgid "system version array information:\n" msgstr "маÑÑив информации верÑии ÑиÑтемы:\n" -#: vms-alpha.c:7590 +#: vms-alpha.c:7770 #, c-format msgid "cannot read EIHVN header\n" msgstr "не удалоÑÑŒ прочитать заголовок EIHVN\n" -#: vms-alpha.c:7600 +#: vms-alpha.c:7780 #, c-format msgid "cannot read EIHVN version\n" msgstr "не удалоÑÑŒ прочитать верÑию EIHVN\n" -#: vms-alpha.c:7603 +#: vms-alpha.c:7783 #, c-format msgid " %02u " msgstr " %02u " -#: vms-alpha.c:7607 +#: vms-alpha.c:7787 msgid "BASE_IMAGE " msgstr "BASE_IMAGE " -#: vms-alpha.c:7610 +#: vms-alpha.c:7790 msgid "MEMORY_MANAGEMENT" msgstr "MEMORY_MANAGEMENT" -#: vms-alpha.c:7613 +#: vms-alpha.c:7793 msgid "IO " msgstr "IO " -#: vms-alpha.c:7616 +#: vms-alpha.c:7796 msgid "FILES_VOLUMES " msgstr "FILES_VOLUMES " -#: vms-alpha.c:7619 +#: vms-alpha.c:7799 msgid "PROCESS_SCHED " msgstr "PROCESS_SCHED " -#: vms-alpha.c:7622 +#: vms-alpha.c:7802 msgid "SYSGEN " msgstr "SYSGEN " -#: vms-alpha.c:7625 +#: vms-alpha.c:7805 msgid "CLUSTERS_LOCKMGR " msgstr "CLUSTERS_LOCKMGR " -#: vms-alpha.c:7628 +#: vms-alpha.c:7808 msgid "LOGICAL_NAMES " msgstr "LOGICAL_NAMES " -#: vms-alpha.c:7631 +#: vms-alpha.c:7811 msgid "SECURITY " msgstr "SECURITY " -#: vms-alpha.c:7634 +#: vms-alpha.c:7814 msgid "IMAGE_ACTIVATOR " msgstr "IMAGE_ACTIVATOR " -#: vms-alpha.c:7637 +#: vms-alpha.c:7817 msgid "NETWORKS " msgstr "NETWORKS " -#: vms-alpha.c:7640 +#: vms-alpha.c:7820 msgid "COUNTERS " msgstr "COUNTERS " -#: vms-alpha.c:7643 +#: vms-alpha.c:7823 msgid "STABLE " msgstr "STABLE " -#: vms-alpha.c:7646 +#: vms-alpha.c:7826 msgid "MISC " msgstr "MISC " -#: vms-alpha.c:7649 +#: vms-alpha.c:7829 msgid "CPU " msgstr "CPU " -#: vms-alpha.c:7652 +#: vms-alpha.c:7832 msgid "VOLATILE " msgstr "VOLATILE " -#: vms-alpha.c:7655 +#: vms-alpha.c:7835 msgid "SHELL " msgstr "SHELL " -#: vms-alpha.c:7658 +#: vms-alpha.c:7838 msgid "POSIX " msgstr "POSIX " -#: vms-alpha.c:7661 +#: vms-alpha.c:7841 msgid "MULTI_PROCESSING " msgstr "MULTI_PROCESSING " -#: vms-alpha.c:7664 +#: vms-alpha.c:7844 msgid "GALAXY " msgstr "GALAXY " -#: vms-alpha.c:7667 +#: vms-alpha.c:7847 msgid "*unknown* " msgstr "*неизвеÑтно* " -#: vms-alpha.c:7683 vms-alpha.c:7958 +#: vms-alpha.c:7863 vms-alpha.c:8137 #, c-format msgid "cannot read EIHA\n" msgstr "не удалоÑÑŒ прочитать EIHA\n" -#: vms-alpha.c:7686 +#: vms-alpha.c:7866 #, c-format msgid "Image activation: (size=%u)\n" msgstr "ÐÐºÑ‚Ð¸Ð²Ð°Ñ†Ð¸Ñ Ð¾Ð±Ñ€Ð°Ð·Ð°: (размер=%u)\n" -#: vms-alpha.c:7689 +#: vms-alpha.c:7869 #, c-format msgid " First address : 0x%08x 0x%08x\n" msgstr " Первый адреÑ: 0x%08x 0x%08x\n" -#: vms-alpha.c:7693 +#: vms-alpha.c:7873 #, c-format msgid " Second address: 0x%08x 0x%08x\n" msgstr " Второй адреÑ: 0x%08x 0x%08x\n" -#: vms-alpha.c:7697 +#: vms-alpha.c:7877 #, c-format msgid " Third address : 0x%08x 0x%08x\n" msgstr " Третий адреÑ: 0x%08x 0x%08x\n" -#: vms-alpha.c:7701 +#: vms-alpha.c:7881 #, c-format msgid " Fourth address: 0x%08x 0x%08x\n" msgstr " Четвёртый адреÑ: 0x%08x 0x%08x\n" -#: vms-alpha.c:7705 +#: vms-alpha.c:7885 #, c-format msgid " Shared image : 0x%08x 0x%08x\n" msgstr " Общий образ: 0x%08x 0x%08x\n" -#: vms-alpha.c:7716 +#: vms-alpha.c:7896 #, c-format msgid "cannot read EIHI\n" msgstr "не удалоÑÑŒ прочитать EIHI\n" -#: vms-alpha.c:7720 +#: vms-alpha.c:7900 #, c-format msgid "Image identification: (major: %u, minor: %u)\n" msgstr "Ð˜Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ñ Ð¾Ð±Ñ€Ð°Ð·Ð°: (Ñтарший: %u, младший: %u)\n" -#: vms-alpha.c:7723 +#: vms-alpha.c:7903 #, c-format msgid " image name : %.*s\n" msgstr " Ð¸Ð¼Ñ Ð¾Ð±Ñ€Ð°Ð·Ð° : %.*s\n" -#: vms-alpha.c:7725 +#: vms-alpha.c:7905 #, c-format msgid " link time : %s\n" msgstr " Ð²Ñ€ÐµÐ¼Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ¸ : %s\n" -#: vms-alpha.c:7727 +#: vms-alpha.c:7907 #, c-format msgid " image ident : %.*s\n" msgstr " идент-Ñ€ образа : %.*s\n" -#: vms-alpha.c:7729 +#: vms-alpha.c:7909 #, c-format msgid " linker ident : %.*s\n" msgstr " идент-Ñ€ компоновщика: %.*s\n" -#: vms-alpha.c:7731 +#: vms-alpha.c:7911 #, c-format msgid " image build ident: %.*s\n" msgstr " идент-Ñ€ Ñборки образа: %.*s\n" -#: vms-alpha.c:7741 +#: vms-alpha.c:7921 #, c-format msgid "cannot read EIHS\n" msgstr "не удалоÑÑŒ прочитать EIHS\n" -#: vms-alpha.c:7745 +#: vms-alpha.c:7925 #, c-format msgid "Image symbol & debug table: (major: %u, minor: %u)\n" msgstr "Таблица Ñимволов & отладки образа: (Ñтарший: %u, младший: %u)\n" -#: vms-alpha.c:7751 +#: vms-alpha.c:7931 #, c-format msgid " debug symbol table : vbn: %u, size: %u (0x%x)\n" msgstr " таблица отладочных Ñимволов: vbn: %u, размер: %u (0x%x)\n" -#: vms-alpha.c:7756 +#: vms-alpha.c:7936 #, c-format msgid " global symbol table: vbn: %u, records: %u\n" msgstr " Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ð°Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ñимволов: vbn: %u, запиÑей: %u\n" -#: vms-alpha.c:7761 +#: vms-alpha.c:7941 #, c-format msgid " debug module table : vbn: %u, size: %u\n" msgstr " таблица отладочных модулей: vbn: %u, размер: %u\n" -#: vms-alpha.c:7774 +#: vms-alpha.c:7954 #, c-format msgid "cannot read EISD\n" msgstr "не удалоÑÑŒ прочитать EISD\n" -#: vms-alpha.c:7785 +#: vms-alpha.c:7965 #, c-format msgid "Image section descriptor: (major: %u, minor: %u, size: %u, offset: %u)\n" msgstr "ДеÑкриптор раздела образа: (Ñтарший: %u, младший: %u, размер: %u, Ñмещение: %u)\n" -#: vms-alpha.c:7793 +#: vms-alpha.c:7973 #, c-format msgid " section: base: 0x%08x%08x size: 0x%08x\n" msgstr " раздел: база: 0x%08x%08x размер: 0x%08x\n" -#: vms-alpha.c:7798 +#: vms-alpha.c:7978 #, c-format msgid " flags: 0x%04x" msgstr " флаги: 0x%04x" -#: vms-alpha.c:7836 +#: vms-alpha.c:8016 #, c-format msgid " vbn: %u, pfc: %u, matchctl: %u type: %u (" msgstr " vbn: %u, pfc: %u, matchctl: %u тип: %u (" -#: vms-alpha.c:7842 +#: vms-alpha.c:8022 msgid "NORMAL" msgstr "NORMAL" -#: vms-alpha.c:7845 +#: vms-alpha.c:8025 msgid "SHRFXD" msgstr "SHRFXD" -#: vms-alpha.c:7848 +#: vms-alpha.c:8028 msgid "PRVFXD" msgstr "PRVFXD" -#: vms-alpha.c:7851 +#: vms-alpha.c:8031 msgid "SHRPIC" msgstr "SHRPIC" -#: vms-alpha.c:7854 +#: vms-alpha.c:8034 msgid "PRVPIC" msgstr "PRVPIC" -#: vms-alpha.c:7857 +#: vms-alpha.c:8037 msgid "USRSTACK" msgstr "USRSTACK" -#: vms-alpha.c:7863 +#: vms-alpha.c:8043 msgid ")\n" msgstr ")\n" -#: vms-alpha.c:7866 +#: vms-alpha.c:8046 #, c-format msgid " ident: 0x%08x, name: %.*s\n" msgstr " иден-Ñ€: 0x%08x, имÑ: %.*s\n" -#: vms-alpha.c:7876 +#: vms-alpha.c:8056 #, c-format msgid "cannot read DMT\n" msgstr "не удалоÑÑŒ прочитать DMT\n" -#: vms-alpha.c:7880 +#: vms-alpha.c:8060 #, c-format msgid "Debug module table:\n" msgstr "Таблица отладочных модулей:\n" -#: vms-alpha.c:7889 +#: vms-alpha.c:8069 #, c-format msgid "cannot read DMT header\n" msgstr "не удалоÑÑŒ прочитать заголовок DMT\n" -#: vms-alpha.c:7895 +#: vms-alpha.c:8075 #, c-format msgid " module offset: 0x%08x, size: 0x%08x, (%u psects)\n" msgstr " Ñмещение модулÑ: 0x%08x, размер: 0x%08x, (%u psects)\n" -#: vms-alpha.c:7905 +#: vms-alpha.c:8085 #, c-format msgid "cannot read DMT psect\n" msgstr "не удалоÑÑŒ прочитать DMT psect\n" -#: vms-alpha.c:7909 +#: vms-alpha.c:8089 #, c-format msgid " psect start: 0x%08x, length: %u\n" msgstr " начало psect: 0x%08x, длина: %u\n" -#: vms-alpha.c:7922 +#: vms-alpha.c:8102 #, c-format msgid "cannot read DST\n" msgstr "не удалоÑÑŒ прочитать DST\n" -#: vms-alpha.c:7932 +#: vms-alpha.c:8112 #, c-format msgid "cannot read GST\n" msgstr "не удалоÑÑŒ прочитать GST\n" -#: vms-alpha.c:7936 +#: vms-alpha.c:8116 #, c-format msgid "Global symbol table:\n" msgstr "Таблица глобальных Ñимволов:\n" -#: vms-alpha.c:7965 +#: vms-alpha.c:8143 #, c-format msgid "Image activator fixup: (major: %u, minor: %u)\n" msgstr "Ðктиватор меÑÑ‚Ð¾Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¾Ð±Ñ€Ð°Ð·Ð°: (Ñтарший: %u, младший: %u)\n" -#: vms-alpha.c:7969 +#: vms-alpha.c:8147 #, c-format msgid " iaflink : 0x%08x %08x\n" msgstr " iaflink : 0x%08x %08x\n" -#: vms-alpha.c:7973 +#: vms-alpha.c:8151 #, c-format msgid " fixuplnk: 0x%08x %08x\n" msgstr " fixuplnk: 0x%08x %08x\n" -#: vms-alpha.c:7976 +#: vms-alpha.c:8154 #, c-format msgid " size : %u\n" msgstr " размер: %u\n" -#: vms-alpha.c:7978 +#: vms-alpha.c:8156 #, c-format msgid " flags: 0x%08x\n" msgstr " флаги: 0x%08x\n" -#: vms-alpha.c:7983 +#: vms-alpha.c:8161 #, c-format msgid " qrelfixoff: %5u, lrelfixoff: %5u\n" msgstr " qrelfixoff: %5u, lrelfixoff: %5u\n" -#: vms-alpha.c:7988 +#: vms-alpha.c:8166 #, c-format msgid " qdotadroff: %5u, ldotadroff: %5u\n" msgstr " qdotadroff: %5u, ldotadroff: %5u\n" -#: vms-alpha.c:7993 +#: vms-alpha.c:8171 #, c-format msgid " codeadroff: %5u, lpfixoff : %5u\n" msgstr " codeadroff: %5u, lpfixoff : %5u\n" -#: vms-alpha.c:7996 +#: vms-alpha.c:8174 #, c-format msgid " chgprtoff : %5u\n" msgstr " chgprtoff : %5u\n" -#: vms-alpha.c:8000 +#: vms-alpha.c:8178 #, c-format msgid " shlstoff : %5u, shrimgcnt : %5u\n" msgstr " shlstoff : %5u, shrimgcnt : %5u\n" -#: vms-alpha.c:8003 +#: vms-alpha.c:8181 #, c-format msgid " shlextra : %5u, permctx : %5u\n" msgstr " shlextra : %5u, permctx : %5u\n" -#: vms-alpha.c:8006 +#: vms-alpha.c:8184 #, c-format msgid " base_va : 0x%08x\n" msgstr " base_va : 0x%08x\n" -#: vms-alpha.c:8008 +#: vms-alpha.c:8186 #, c-format msgid " lppsbfixoff: %5u\n" msgstr " lppsbfixoff: %5u\n" -#: vms-alpha.c:8016 +#: vms-alpha.c:8194 #, c-format msgid " Shareable images:\n" msgstr " Общие образы:\n" -#: vms-alpha.c:8021 +#: vms-alpha.c:8199 #, c-format msgid " %u: size: %u, flags: 0x%02x, name: %.*s\n" msgstr " %u: размер: %u, флаги: 0x%02x, имÑ: %.*s\n" -#: vms-alpha.c:8028 +#: vms-alpha.c:8206 #, c-format msgid " quad-word relocation fixups:\n" msgstr " четверное Ñлово перемещаемых меÑтоположений:\n" -#: vms-alpha.c:8033 +#: vms-alpha.c:8211 #, c-format msgid " long-word relocation fixups:\n" msgstr " длинное Ñлово перемещаемых меÑтоположений:\n" -#: vms-alpha.c:8038 +#: vms-alpha.c:8216 #, c-format msgid " quad-word .address reference fixups:\n" msgstr " четверное Ñлово ÑÑылочных меÑтоположений .address:\n" -#: vms-alpha.c:8043 +#: vms-alpha.c:8221 #, c-format msgid " long-word .address reference fixups:\n" msgstr " длинное Ñлово ÑÑылочных меÑтоположений .address:\n" -#: vms-alpha.c:8048 +#: vms-alpha.c:8226 #, c-format msgid " Code Address Reference Fixups:\n" msgstr " СÑылочные меÑÑ‚Ð¾Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð°Ð´Ñ€ÐµÑа кода:\n" -#: vms-alpha.c:8053 +#: vms-alpha.c:8231 #, c-format msgid " Linkage Pairs Reference Fixups:\n" msgstr " СÑылочные меÑÑ‚Ð¾Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐµÐ¼Ñ‹Ñ… пар:\n" -#: vms-alpha.c:8062 +#: vms-alpha.c:8240 #, c-format msgid " Change Protection (%u entries):\n" msgstr " Изменение защиты (%u Ñлементов):\n" -#: vms-alpha.c:8068 +#: vms-alpha.c:8246 #, c-format msgid " base: 0x%08x %08x, size: 0x%08x, prot: 0x%08x " msgstr " база: 0x%08x %08x, размер: 0x%08x, prot: 0x%08x " #. FIXME: we do not yet support relocatable link. It is not obvious #. how to do it for debug infos. -#: vms-alpha.c:8908 +#: vms-alpha.c:9123 msgid "%P: relocatable link is not supported\n" msgstr "%P: Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰Ð°ÐµÐ¼Ð°Ñ ÑÑылка не поддерживаетÑÑ\n" -#: vms-alpha.c:8979 +#: vms-alpha.c:9194 #, c-format msgid "%P: multiple entry points: in modules %pB and %pB\n" msgstr "%P: неÑколько точек входа: в модулÑÑ… %pB и %pB\n" -#: vms-lib.c:1445 +#: vms-lib.c:1525 #, c-format msgid "could not open shared image '%s' from '%s'" msgstr "не удалоÑÑŒ открыть общий образ «%s» из «%s»" -#: vms-misc.c:361 +#: vms-misc.c:367 msgid "_bfd_vms_output_counted called with zero bytes" msgstr "Вызов _bfd_vms_output_counted Ñ Ð½ÑƒÐ»ÐµÐ²Ñ‹Ð¼ количеÑтвом байт" -#: vms-misc.c:366 +#: vms-misc.c:372 msgid "_bfd_vms_output_counted called with too many bytes" msgstr "Вызов _bfd_vms_output_counted Ñо Ñлишком большим количеÑтвом байт" @@ -7731,172 +8085,209 @@ msgid "%pB: dynamic object with no .loader section" msgstr "%pB: динамичеÑкий объект без раздела .loader" -#: xcofflink.c:1413 +#: xcofflink.c:1417 #, c-format msgid "%pB: `%s' has line numbers but no enclosing section" msgstr "%pB: «%s» Ñодержит номера Ñтрок, но в обрамлÑющем разделе" -#: xcofflink.c:1466 +#: xcofflink.c:1470 #, c-format msgid "%pB: class %d symbol `%s' has no aux entries" msgstr "%pB: клаÑÑ %d Ñимвола «%s» не имеет Ñлементов aux" -#: xcofflink.c:1489 +#: xcofflink.c:1493 #, c-format msgid "%pB: symbol `%s' has unrecognized csect type %d" msgstr "%pB: Ñимвол «%s» имеет нераÑпознанный тип csect: %d" -#: xcofflink.c:1502 +#: xcofflink.c:1506 #, c-format msgid "%pB: bad XTY_ER symbol `%s': class %d scnum %d scnlen %" msgstr "%pB: неверный Ñимвол XTY_ER «%s»: клаÑÑ %d scnum %d scnlen %" -#: xcofflink.c:1533 +#: xcofflink.c:1537 #, c-format msgid "%pB: XMC_TC0 symbol `%s' is class %d scnlen %" msgstr "%pB: Ñимвол XMC_TC0 «%s» ÑвлÑетÑÑ ÐºÐ»Ð°ÑÑом %d scnlen %" -#: xcofflink.c:1680 +#: xcofflink.c:1684 #, c-format msgid "%pB: csect `%s' not in enclosing section" msgstr "%pB: csect «%s» не в обрамлÑющем разделе" -#: xcofflink.c:1788 +#: xcofflink.c:1792 #, c-format msgid "%pB: misplaced XTY_LD `%s'" msgstr "%pB: неправильно раÑположенный XTY_LD «%s»" -#: xcofflink.c:2109 +#: xcofflink.c:2113 #, c-format msgid "%pB: reloc %s:% not in csect" msgstr "%pB: перемещение %s:% не в csect" -#: xcofflink.c:3196 +#: xcofflink.c:3193 #, c-format msgid "%s: no such symbol" msgstr "%s: нет такого Ñимвола" -#: xcofflink.c:3301 +#: xcofflink.c:3298 #, c-format msgid "warning: attempt to export undefined symbol `%s'" msgstr "предупреждение: попытка ÑкÑпортировать неопределённый Ñимвол «%s»" -#: xcofflink.c:3680 +#: xcofflink.c:3677 msgid "error: undefined symbol __rtinit" msgstr "ошибка: неопределённый Ñимвол __rtinit" -#: xcofflink.c:4060 +#: xcofflink.c:4055 #, c-format msgid "%pB: loader reloc in unrecognized section `%s'" msgstr "%pB: перемещение загрузчика в нераÑпознанном разделе «%s»" -#: xcofflink.c:4072 +#: xcofflink.c:4067 #, c-format msgid "%pB: `%s' in loader reloc but not loader sym" msgstr "%pB: «%s» в перемещении загрузчика, но не Ñимволе загрузчика" -#: xcofflink.c:4089 +#: xcofflink.c:4084 #, c-format msgid "%pB: loader reloc in read-only section %pA" msgstr "%pB: перемещение загрузчика в разделе %pA, доÑтупном только Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ" -#: xcofflink.c:5113 +#: xcofflink.c:5112 #, c-format msgid "TOC overflow: %# > 0x10000; try -mminimal-toc when compiling" msgstr "переполнение TOC: % > 0x10000; попробуйте Ñкомпилировать Ñ -mminimal-toc" -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:5031 +#. Not fatal, this callback cannot fail. +#: elfnn-aarch64.c:2872 +#, c-format +msgid "unknown attribute for symbol `%s': 0x%02x" +msgstr "неизвеÑтный атрибут Ñимвола «%s»: 0x%02x" + +#: elfnn-aarch64.c:5246 #, c-format msgid "%pB: error: erratum 835769 stub out of range (input file too large)" msgstr "%pB: ошибка: заглушка Ð´Ð»Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ¸ 835769 находитÑÑ Ð²Ð½Ðµ диапазона (Ñлишком большой входной файл)" -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:5112 +#: elfnn-aarch64.c:5338 #, c-format msgid "%pB: error: erratum 843419 stub out of range (input file too large)" msgstr "%pB: ошибка: заглушка Ð´Ð»Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ¸ 843419 находитÑÑ Ð²Ð½Ðµ диапазона (Ñлишком большой входной файл)" -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:5641 +#: elfnn-aarch64.c:5351 +msgid "%pB: error: erratum 843419 immediate 0x%" +msgstr "%pB: ошибка: заглушка Ð´Ð»Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ¸ 843419 в 0x%" + +#: elfnn-aarch64.c:5899 #, c-format msgid "%pB: relocation %s against symbol `%s' which may bind externally can not be used when making a shared object; recompile with -fPIC" msgstr "%pB: перемещение %s Ð´Ð»Ñ Â«%s», который может быть привÑзан извне, не может иÑпользоватьÑÑ Ð¿Ñ€Ð¸ Ñоздании общего объекта; перекомпилируйте Ñ -fPIC" -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:5732 +#: elfnn-aarch64.c:5990 #, c-format msgid "%pB: local symbol descriptor table be NULL when applying relocation %s against local symbol" msgstr "%pB: таблица опиÑателей локальных Ñимволов будет равна NULL, еÑли применить перемещение %s Ñ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ñ‹Ð¼ Ñимволом" -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:6830 +#: elfnn-aarch64.c:6103 elfnn-aarch64.c:6140 +#, c-format +msgid "%pB: TLS relocation %s against undefined symbol `%s'" +msgstr "%pB: перемещение TLS %s Ð´Ð»Ñ Ð½ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ð¾Ð³Ð¾ Ñимвола «%s»" + +#: elfnn-aarch64.c:7125 msgid "too many GOT entries for -fpic, please recompile with -fPIC" msgstr "Ñлишком много Ñлементов GOT Ð´Ð»Ñ -fpic: перекомпилируйте Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ -fPIC" -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:6858 +#: elfnn-aarch64.c:7153 msgid "one possible cause of this error is that the symbol is being referenced in the indicated code as if it had a larger alignment than was declared where it was defined" msgstr "одной из возможных причин Ñтой ошибки ÑвлÑетÑÑ Ñ‚Ð¾, что в указанном коде на Ñимвол ÑÑылаютÑÑ Ñ Ð±Ð¾Ð»ÑŒÑˆÐ¸Ð¼ выравниванием, чем было объÑвлено в его меÑте определениÑ" -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:7443 +#: elfnn-aarch64.c:7720 #, c-format msgid "%pB: relocation %s against `%s' can not be used when making a shared object" msgstr "%pB: перемещение %s Ð´Ð»Ñ Â«%s» не может иÑпользоватьÑÑ Ð¿Ñ€Ð¸ Ñоздании общего объекта" -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:182 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:217 +#: elfnn-riscv.c:187 elfnn-riscv.c:222 #, c-format msgid "%pB: warning: RVE PLT generation not supported" msgstr "%pB: предупреждение: Ð³ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ñ RVE PLT не поддерживаетÑÑ" -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2311 +#: elfnn-riscv.c:1977 +#, c-format +msgid "%pcrel_lo section symbol with an addend" +msgstr "Ñимвол раздела %pcrel_lo Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸ÐµÐ¼" + +#: elfnn-riscv.c:2198 +#, c-format +msgid "%%X%%P: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC\n" +msgstr "%%X%%P: перемещение %s Ð´Ð»Ñ Â«%s» Ð½ÐµÐ»ÑŒÐ·Ñ Ð¸Ñпользовать при Ñоздании общего объекта; перекомпилируйте Ñ -fPIC\n" + +#: elfnn-riscv.c:2208 +#, c-format +msgid "%%X%%P: unresolvable %s relocation against symbol `%s'\n" +msgstr "%%X%%P: неразрешимое перемещение %s Ð´Ð»Ñ Ñимвола «%s»\n" + +#: elfnn-riscv.c:2247 msgid "%X%P: internal error: out of range error\n" msgstr "%X%P: внутреннÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ°: ошибка выхода из диапазона\n" -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2315 +#: elfnn-riscv.c:2252 msgid "%X%P: internal error: unsupported relocation error\n" msgstr "%X%P: внутреннÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ°: ошибка неподдерживаемого перемещениÑ\n" -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2325 +#: elfnn-riscv.c:2258 +msgid "dangerous relocation error" +msgstr "ошибка опаÑного перемещениÑ" + +#: elfnn-riscv.c:2264 msgid "%X%P: internal error: unknown error\n" msgstr "%X%P: внутреннÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ°: неизвеÑÑ‚Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°\n" -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2711 +#: elfnn-riscv.c:2630 #, c-format -msgid "error: %pB: Mis-matched ISA version for '%s' exetension. %d.%d vs %d.%d" -msgstr "ошибка: %pB: неÑовпадение верÑии ISA раÑÑˆÐ¸Ñ€ÐµÐ½Ð¸Ñ Â«%s». %d.%d vs %d.%d" +msgid "error: %pB: Mis-matched ISA version for '%s' extension. %d.%d vs %d.%d" +msgstr "ошибка: %pB: неÑовпадение верÑии ISA раÑÑˆÐ¸Ñ€ÐµÐ½Ð¸Ñ Â«%s». %d.%d и %d.%d" -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2729 +#: elfnn-riscv.c:2648 #, c-format -msgid "error: %pB: corrupted ISA string '%s'.first letter should be 'i' or 'e' but got '%s'." +msgid "error: %pB: corrupted ISA string '%s'. First letter should be 'i' or 'e' but got '%s'." msgstr "ошибка: %pB: повреждена Ñтрока ISA «%s». Первым Ñимволом должен быть «i» или «e», но имеем «%s»." -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2773 +#: elfnn-riscv.c:2692 #, c-format msgid "error: %pB: Mis-matched ISA string to merge '%s' and '%s'." msgstr "ошибка: %pB: неÑовпадение Ñтроки ISA Ð´Ð»Ñ Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Â«%s» и «%s»." -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2921 +#: elfnn-riscv.c:2893 #, c-format msgid "error: %pB: ISA string of input (%s) doesn't match output (%s)." msgstr "ошибка: %pB: Ð²Ñ…Ð¾Ð´Ð½Ð°Ñ Ñтрока ISA (%s) не Ñовпадает Ñ Ð²Ñ‹Ñ…Ð¾Ð´Ð½Ð¾Ð¹ (%s)." -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2946 +#: elfnn-riscv.c:2913 #, c-format msgid "error: %pB: XLEN of input (%u) doesn't match output (%u)." msgstr "ошибка: %pB: XLEN входных данных (%u) не Ñовпадает Ñ Ð²Ñ‹Ñ…Ð¾Ð´Ð½Ñ‹Ð¼Ð¸ (%u)." -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2954 +#: elfnn-riscv.c:2921 #, c-format -msgid "error: %pB: Unspported XLEN (%u), you mightusing wrong emulation." -msgstr "ошибка: %pB: неподдерживаемый XLEN (%u), выроÑтно, иÑпользуетÑÑ Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ ÑмулÑциÑ." +msgid "error: %pB: Unsupported XLEN (%u), you might be using wrong emulation." +msgstr "ошибка: %pB: неподдерживаемый XLEN (%u), вероÑтно, иÑпользуетÑÑ Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ ÑмулÑциÑ." -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:3039 +#: elfnn-riscv.c:3035 #, c-format -msgid "error: %pB: conflicting priv spec version (major/minor/revision)." -msgstr "ошибка: %pB: неÑоглаÑующаÑÑÑ Ð²ÐµÑ€ÑÐ¸Ñ priv spec (ÑтаршаÑ/младшаÑ/изменение)." +msgid "warning: %pB use privilege spec version %u.%u.%u but the output use version %u.%u.%u." +msgstr "предупреждение: %pB иÑпользует привилегированную верÑию Ñпецификации %u.%u.%u, но Ð´Ð»Ñ Ð²Ñ‹Ð²Ð¾Ð´Ð° иÑпользуетÑÑ Ð²ÐµÑ€ÑÐ¸Ñ %u.%u.%u." + +#: elfnn-riscv.c:3053 +msgid "warning: privilege spec version 1.9.1 can not be linked with other spec versions." +msgstr "предупреждение: Ð¿Ñ€Ð¸Ð²Ð¸Ð»ÐµÐ³Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ Ñпецификации 1.9.1 не может быть Ñкомпонована Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼Ð¸ верÑиÑми Ñпецификаций." -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:3055 +#: elfnn-riscv.c:3081 #, c-format msgid "error: %pB use %u-byte stack aligned but the output use %u-byte stack aligned." msgstr "ошибка: Ð´Ð»Ñ %pB требуетÑÑ %u-байтовое выравнивание Ñтека, но Ð´Ð»Ñ Ñ€ÐµÐ·ÑƒÐ»ÑŒÑ‚Ð°Ñ‚Ð° иÑпользуетÑÑ %u-байтовое выравнивание Ñтека." -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:3096 +#: elfnn-riscv.c:3122 #, c-format msgid "" "%pB: ABI is incompatible with that of the selected emulation:\n" @@ -7905,111 +8296,111 @@ "%pB: ABI не ÑовмеÑтим Ñ Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ñ‹Ð¼ в ÑмулÑции:\n" " цель ÑмулÑции «%s» не Ñовпадает Ñ Â«%s»" -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:3119 +#: elfnn-riscv.c:3176 #, c-format msgid "%pB: can't link %s modules with %s modules" msgstr "%pB: компоновка Ð¼Ð¾Ð´ÑƒÐ»Ñ %s Ñ Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ð¼Ð¸ модулÑми %s невозможна" -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:3129 +#: elfnn-riscv.c:3186 #, c-format msgid "%pB: can't link RVE with other target" msgstr "%pB: невозможно Ñкомпоновать RVE Ñ Ð´Ñ€ÑƒÐ³Ð¾Ð¹ целью" -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:3630 +#: elfnn-riscv.c:3724 #, c-format msgid "%pB(%pA+%#): % bytes required for alignment to %-byte boundary, but only % present" msgstr "%pB(%pA+%#): требуетÑÑ % байт Ð´Ð»Ñ Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¾ %-байтной границе, но еÑÑ‚ÑŒ только %" -#: peigen.c:157 pepigen.c:157 pex64igen.c:157 +#: peXXigen.c:164 #, c-format msgid "%pB: unable to find name for empty section" msgstr "%pB: не удалоÑÑŒ найти Ð¸Ð¼Ñ Ð¿ÑƒÑтого раздела" -#: peigen.c:183 pepigen.c:183 pex64igen.c:183 +#: peXXigen.c:191 #, c-format msgid "%pB: out of memory creating name for empty section" msgstr "%pB: не хватает памÑти Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¸Ð¼ÐµÐ½Ð¸ пуÑтого раздела" -#: peigen.c:194 pepigen.c:194 pex64igen.c:194 +#: peXXigen.c:201 #, c-format msgid "%pB: unable to create fake empty section" msgstr "%pB: невозможно Ñоздать фиктивный пуÑтой раздел" -#: peigen.c:532 pepigen.c:532 pex64igen.c:532 +#: peXXigen.c:539 #, c-format -msgid "%pB: aout header specifies an invalid number of data-directory entries: %ld" -msgstr "%pB: в заголовке aout указан некорректный номер Ñлементов каталога данных: %ld" +msgid "%pB: aout header specifies an invalid number of data-directory entries: %u" +msgstr "%pB: в заголовке aout указан некорректный номер Ñлементов каталога данных: %u" -#: peigen.c:1091 pepigen.c:1091 pex64igen.c:1091 +#: peXXigen.c:1088 #, c-format msgid "%pB: line number overflow: 0x%lx > 0xffff" msgstr "%pB: переполнение нумерации Ñтрок: 0x%lx > 0xffff" -#: peigen.c:1235 pepigen.c:1235 pex64igen.c:1235 +#: peXXigen.c:1241 msgid "Export Directory [.edata (or where ever we found it)]" msgstr "Каталог ÑкÑпорта [.edata (или где он нашёлÑÑ)]" -#: peigen.c:1236 pepigen.c:1236 pex64igen.c:1236 +#: peXXigen.c:1242 msgid "Import Directory [parts of .idata]" msgstr "Каталог импорта [чаÑÑ‚ÑŒ .idata]" -#: peigen.c:1237 pepigen.c:1237 pex64igen.c:1237 +#: peXXigen.c:1243 msgid "Resource Directory [.rsrc]" msgstr "Каталог реÑурÑов [.rsrc]" -#: peigen.c:1238 pepigen.c:1238 pex64igen.c:1238 +#: peXXigen.c:1244 msgid "Exception Directory [.pdata]" msgstr "Каталог иÑключений [.pdata]" -#: peigen.c:1239 pepigen.c:1239 pex64igen.c:1239 +#: peXXigen.c:1245 msgid "Security Directory" msgstr "Каталог безопаÑноÑти" -#: peigen.c:1240 pepigen.c:1240 pex64igen.c:1240 +#: peXXigen.c:1246 msgid "Base Relocation Directory [.reloc]" msgstr "Каталог базового Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ [.reloc]" -#: peigen.c:1241 pepigen.c:1241 pex64igen.c:1241 +#: peXXigen.c:1247 msgid "Debug Directory" msgstr "Каталог отладки" -#: peigen.c:1242 pepigen.c:1242 pex64igen.c:1242 +#: peXXigen.c:1248 msgid "Description Directory" msgstr "Каталог опиÑаний" -#: peigen.c:1243 pepigen.c:1243 pex64igen.c:1243 +#: peXXigen.c:1249 msgid "Special Directory" msgstr "Специальный каталог" -#: peigen.c:1244 pepigen.c:1244 pex64igen.c:1244 +#: peXXigen.c:1250 msgid "Thread Storage Directory [.tls]" msgstr "Каталог хранилища нитей [.tls]" -#: peigen.c:1245 pepigen.c:1245 pex64igen.c:1245 +#: peXXigen.c:1251 msgid "Load Configuration Directory" msgstr "Каталог загрузки конфигурации" -#: peigen.c:1246 pepigen.c:1246 pex64igen.c:1246 +#: peXXigen.c:1252 msgid "Bound Import Directory" msgstr "Каталог обÑзательного импорта" -#: peigen.c:1247 pepigen.c:1247 pex64igen.c:1247 +#: peXXigen.c:1253 msgid "Import Address Table Directory" msgstr "Каталог таблицы импорта адреÑов" -#: peigen.c:1248 pepigen.c:1248 pex64igen.c:1248 +#: peXXigen.c:1254 msgid "Delay Import Directory" msgstr "Каталог отложенного импорта" -#: peigen.c:1249 pepigen.c:1249 pex64igen.c:1249 +#: peXXigen.c:1255 msgid "CLR Runtime Header" msgstr "Заголовок времени Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ CLR" -#: peigen.c:1250 pepigen.c:1250 pex64igen.c:1250 +#: peXXigen.c:1256 msgid "Reserved" msgstr "Зарезервировано" -#: peigen.c:1310 pepigen.c:1310 pex64igen.c:1310 +#: peXXigen.c:1316 #, c-format msgid "" "\n" @@ -8018,7 +8409,7 @@ "\n" "СущеÑтвует таблица импорта, но не найден раздел, в котором она ÑодержитÑÑ\n" -#: peigen.c:1316 pepigen.c:1316 pex64igen.c:1316 +#: peXXigen.c:1322 #, c-format msgid "" "\n" @@ -8027,7 +8418,7 @@ "\n" "СущеÑтвует таблица импорта в %s, но Ñтот раздел без Ñодержимого\n" -#: peigen.c:1323 pepigen.c:1323 pex64igen.c:1323 +#: peXXigen.c:1329 #, c-format msgid "" "\n" @@ -8036,7 +8427,7 @@ "\n" "Ð’ %s имеетÑÑ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° импорта по адреÑу 0x%lx\n" -#: peigen.c:1365 pepigen.c:1365 pex64igen.c:1365 +#: peXXigen.c:1369 #, c-format msgid "" "\n" @@ -8045,12 +8436,12 @@ "\n" "Ðачальный Ð°Ð´Ñ€ÐµÑ Ð¾Ð¿Ð¸ÑÐ°Ñ‚ÐµÐ»Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸: %04lx\n" -#: peigen.c:1369 pepigen.c:1369 pex64igen.c:1369 +#: peXXigen.c:1373 #, c-format msgid "\tcode-base %08lx toc (loadable/actual) %08lx/%08lx\n" msgstr "\tcode-base %08lx toc (загружаемый/реальный) %08lx/%08lx\n" -#: peigen.c:1377 pepigen.c:1377 pex64igen.c:1377 +#: peXXigen.c:1380 #, c-format msgid "" "\n" @@ -8059,7 +8450,7 @@ "\n" "Ðет раздела reldata! ОпиÑатель функции не раÑшифрован.\n" -#: peigen.c:1382 pepigen.c:1382 pex64igen.c:1382 +#: peXXigen.c:1385 #, c-format msgid "" "\n" @@ -8068,7 +8459,7 @@ "\n" "Таблицы импорта (обработан раздел %s)\n" -#: peigen.c:1385 pepigen.c:1385 pex64igen.c:1385 +#: peXXigen.c:1388 #, c-format msgid "" " vma: Hint Time Forward DLL First\n" @@ -8077,7 +8468,7 @@ " vma: Таблица Отметка Цепочка Ð˜Ð¼Ñ ÐŸÐµÑ€Ð²Ñ‹Ð¹\n" " Указаний Времени ПереÑылки DLL Шлюз\n" -#: peigen.c:1435 pepigen.c:1435 pex64igen.c:1435 +#: peXXigen.c:1437 #, c-format msgid "" "\n" @@ -8086,12 +8477,12 @@ "\n" "\tÐ˜Ð¼Ñ DLL: %.*s\n" -#: peigen.c:1451 pepigen.c:1451 pex64igen.c:1451 +#: peXXigen.c:1453 #, c-format msgid "\tvma: Hint/Ord Member-Name Bound-To\n" msgstr "\tvma: Hint/Ord ИмÑ-Ñлемента ПривÑзан-к\n" -#: peigen.c:1476 pepigen.c:1476 pex64igen.c:1476 +#: peXXigen.c:1478 #, c-format msgid "" "\n" @@ -8100,13 +8491,12 @@ "\n" "СущеÑтвует первый шлюз, но не найден раздел, в котором он ÑодержитÑÑ\n" -#: peigen.c:1520 peigen.c:1559 pepigen.c:1520 pepigen.c:1559 pex64igen.c:1520 -#: pex64igen.c:1559 +#: peXXigen.c:1522 peXXigen.c:1561 #, c-format msgid "\t" msgstr "\t<повреждено: 0x%04lx>" -#: peigen.c:1652 pepigen.c:1652 pex64igen.c:1652 +#: peXXigen.c:1654 #, c-format msgid "" "\n" @@ -8115,7 +8505,7 @@ "\n" "СущеÑтвует таблица ÑкÑпорта, но не найден раздел, в котором она ÑодержитÑÑ\n" -#: peigen.c:1658 pepigen.c:1658 pex64igen.c:1658 +#: peXXigen.c:1660 #, c-format msgid "" "\n" @@ -8124,7 +8514,7 @@ "\n" "СущеÑтвует таблица ÑкÑпорта в %s, но Ñтот раздел без Ñодержимого\n" -#: peigen.c:1669 pepigen.c:1669 pex64igen.c:1669 +#: peXXigen.c:1671 #, c-format msgid "" "\n" @@ -8133,7 +8523,7 @@ "\n" "СущеÑтвует таблица ÑкÑпорта в %s, но она не помещаетÑÑ Ð² Ñтот раздел\n" -#: peigen.c:1680 pepigen.c:1680 pex64igen.c:1680 +#: peXXigen.c:1682 #, c-format msgid "" "\n" @@ -8142,7 +8532,7 @@ "\n" "СущеÑтвует таблица ÑкÑпорта в %s, но она Ñлишком Ð¼Ð°Ð»ÐµÐ½ÑŒÐºÐ°Ñ (%d)\n" -#: peigen.c:1686 pepigen.c:1686 pex64igen.c:1686 +#: peXXigen.c:1688 #, c-format msgid "" "\n" @@ -8151,7 +8541,7 @@ "\n" "СущеÑтвует таблица ÑкÑпорта в %s по адреÑу 0x%lx\n" -#: peigen.c:1714 pepigen.c:1714 pex64igen.c:1714 +#: peXXigen.c:1716 #, c-format msgid "" "\n" @@ -8162,67 +8552,67 @@ "Таблицы ÑкÑпорта (обработан раздел %s)\n" "\n" -#: peigen.c:1718 pepigen.c:1718 pex64igen.c:1718 +#: peXXigen.c:1720 #, c-format msgid "Export Flags \t\t\t%lx\n" msgstr "Флаги ÑкÑпорта \t\t\t%lx\n" -#: peigen.c:1721 pepigen.c:1721 pex64igen.c:1721 +#: peXXigen.c:1723 #, c-format msgid "Time/Date stamp \t\t%lx\n" msgstr "Метка времени/даты \t\t%lx\n" -#: peigen.c:1725 pepigen.c:1725 pex64igen.c:1725 +#: peXXigen.c:1727 #, c-format msgid "Major/Minor \t\t\t%d/%d\n" msgstr "Старший/Младший \t\t\t%d/%d\n" -#: peigen.c:1728 pepigen.c:1728 pex64igen.c:1728 +#: peXXigen.c:1730 #, c-format msgid "Name \t\t\t\t" msgstr "Ð˜Ð¼Ñ \t\t\t\t" -#: peigen.c:1739 pepigen.c:1739 pex64igen.c:1739 +#: peXXigen.c:1741 #, c-format msgid "Ordinal Base \t\t\t%ld\n" msgstr "Ðачальный порÑдковый номер \t\t\t%ld\n" -#: peigen.c:1742 pepigen.c:1742 pex64igen.c:1742 +#: peXXigen.c:1744 #, c-format msgid "Number in:\n" msgstr "Ðомер в:\n" -#: peigen.c:1745 pepigen.c:1745 pex64igen.c:1745 +#: peXXigen.c:1747 #, c-format msgid "\tExport Address Table \t\t%08lx\n" msgstr "\tТаблица ÑкÑпортируемых адреÑов \t\t%08lx\n" -#: peigen.c:1749 pepigen.c:1749 pex64igen.c:1749 +#: peXXigen.c:1751 #, c-format msgid "\t[Name Pointer/Ordinal] Table\t%08lx\n" msgstr "\tТаблица [указателей имён/порÑдковых номеров]\t%08lx\n" -#: peigen.c:1752 pepigen.c:1752 pex64igen.c:1752 +#: peXXigen.c:1754 #, c-format msgid "Table Addresses\n" msgstr "Таблица адреÑов\n" -#: peigen.c:1755 pepigen.c:1755 pex64igen.c:1755 +#: peXXigen.c:1757 #, c-format msgid "\tExport Address Table \t\t" msgstr "\tТаблица ÑкÑпортируемых адреÑов \t\t" -#: peigen.c:1760 pepigen.c:1760 pex64igen.c:1760 +#: peXXigen.c:1762 #, c-format msgid "\tName Pointer Table \t\t" msgstr "\tТаблица указателей имён \t\t" -#: peigen.c:1765 pepigen.c:1765 pex64igen.c:1765 +#: peXXigen.c:1767 #, c-format msgid "\tOrdinal Table \t\t\t" msgstr "\tТаблица порÑдковых номеров \t\t\t" -#: peigen.c:1779 pepigen.c:1779 pex64igen.c:1779 +#: peXXigen.c:1781 #, c-format msgid "" "\n" @@ -8231,20 +8621,20 @@ "\n" "Таблица ÑкÑпортируемых адреÑов -- Ðачальный порÑдковый номер %ld\n" -#: peigen.c:1788 pepigen.c:1788 pex64igen.c:1788 +#: peXXigen.c:1790 #, c-format msgid "\tInvalid Export Address Table rva (0x%lx) or entry count (0x%lx)\n" msgstr "\tÐÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð°Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° ÑкÑпортируемых адреÑов rva (0x%lx) или Ñчётчик Ñлементов (0x%lx)\n" -#: peigen.c:1807 pepigen.c:1807 pex64igen.c:1807 +#: peXXigen.c:1809 msgid "Forwarder RVA" msgstr "ПереадреÑуемый RVA" -#: peigen.c:1819 pepigen.c:1819 pex64igen.c:1819 +#: peXXigen.c:1821 msgid "Export RVA" msgstr "ЭкÑпортируемый RVA" -#: peigen.c:1826 pepigen.c:1826 pex64igen.c:1826 +#: peXXigen.c:1828 #, c-format msgid "" "\n" @@ -8253,29 +8643,27 @@ "\n" "Таблица [порÑдковых номеров/указателей имён]\n" -#: peigen.c:1834 pepigen.c:1834 pex64igen.c:1834 +#: peXXigen.c:1836 #, c-format msgid "\tInvalid Name Pointer Table rva (0x%lx) or entry count (0x%lx)\n" msgstr "\tÐÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð°Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° указателей имён (0x%lx) или Ñчётчик Ñлементов (0x%lx)\n" -#: peigen.c:1841 pepigen.c:1841 pex64igen.c:1841 +#: peXXigen.c:1843 #, c-format msgid "\tInvalid Ordinal Table rva (0x%lx) or entry count (0x%lx)\n" msgstr "\tÐÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð°Ñ Ð¾Ð±Ñ‹Ñ‡Ð½Ð°Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° rva (0x%lx) или Ñчётчик Ñлементов (0x%lx)\n" -#: peigen.c:1855 pepigen.c:1855 pex64igen.c:1855 +#: peXXigen.c:1857 #, c-format msgid "\t[%4ld] \n" msgstr "\t[%4ld] <повреждёно Ñмещение: %lx>\n" -#: peigen.c:1909 peigen.c:2106 pepigen.c:1909 pepigen.c:2106 pex64igen.c:1909 -#: pex64igen.c:2106 +#: peXXigen.c:1911 peXXigen.c:2107 #, c-format msgid "warning, .pdata section size (%ld) is not a multiple of %d\n" msgstr "предупреждение, размер раздела .pdata (%ld) не кратен %d\n" -#: peigen.c:1913 peigen.c:2110 pepigen.c:1913 pepigen.c:2110 pex64igen.c:1913 -#: pex64igen.c:2110 +#: peXXigen.c:1915 peXXigen.c:2111 #, c-format msgid "" "\n" @@ -8284,12 +8672,12 @@ "\n" "Таблица функций (обработан раздел .pdata)\n" -#: peigen.c:1916 pepigen.c:1916 pex64igen.c:1916 +#: peXXigen.c:1918 #, c-format msgid " vma:\t\t\tBegin Address End Address Unwind Info\n" msgstr " vma:\t\t\tÐачальный Ð°Ð´Ñ€ÐµÑ ÐšÐ¾Ð½ÐµÑ‡Ð½Ñ‹Ð¹ Ð°Ð´Ñ€ÐµÑ Ð Ð°ÑÐºÑ€Ñ‹Ð²Ð°ÑŽÑ‰Ð°Ñ Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ\n" -#: peigen.c:1918 pepigen.c:1918 pex64igen.c:1918 +#: peXXigen.c:1920 #, c-format msgid "" " vma:\t\tBegin End EH EH PrologEnd Exception\n" @@ -8298,27 +8686,27 @@ " vma:\t\tÐачальный Конечный EH EH ÐÐ´Ñ€ÐµÑ ÐœÐ°Ñка\n" " \t\tÐÐ´Ñ€ÐµÑ ÐÐ´Ñ€ÐµÑ ÐžÐ±Ñ€Ð°Ð±Ð¾Ñ‚Ñ‡Ð¸Ðº Данные КонцаПролога ИÑключениÑ\n" -#: peigen.c:1931 pepigen.c:1931 pex64igen.c:1931 +#: peXXigen.c:1933 #, c-format msgid "Virtual size of .pdata section (%ld) larger than real size (%ld)\n" msgstr "Виртуальный размер раздела .pdata (%ld) больше чем реальный размер (%ld)\n" -#: peigen.c:2001 pepigen.c:2001 pex64igen.c:2001 +#: peXXigen.c:2002 #, c-format msgid " Register save millicode" msgstr " Милликод ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ñ€ÐµÐ³Ð¸Ñтра" -#: peigen.c:2004 pepigen.c:2004 pex64igen.c:2004 +#: peXXigen.c:2005 #, c-format msgid " Register restore millicode" msgstr " Милликод воÑÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ñ€ÐµÐ³Ð¸Ñтра" -#: peigen.c:2007 pepigen.c:2007 pex64igen.c:2007 +#: peXXigen.c:2008 #, c-format msgid " Glue code sequence" msgstr " ПоÑледовательноÑÑ‚ÑŒ ÑвÑзующего кода" -#: peigen.c:2112 pepigen.c:2112 pex64igen.c:2112 +#: peXXigen.c:2113 #, c-format msgid "" " vma:\t\tBegin Prolog Function Flags Exception EH\n" @@ -8327,7 +8715,7 @@ " vma:\t\tÐачальный Длина Длина Флаги Обработчик EH\n" " \t\tÐÐ´Ñ€ÐµÑ ÐŸÑ€Ð¾Ð»Ð¾Ð³Ð° Функции 32b exc ИÑключений Данные\n" -#: peigen.c:2234 pepigen.c:2234 pex64igen.c:2234 +#: peXXigen.c:2234 #, c-format msgid "" "\n" @@ -8338,7 +8726,7 @@ "\n" "Ðачало перемещений в PE-файле (обработан раздел .reloc)\n" -#: peigen.c:2264 pepigen.c:2264 pex64igen.c:2264 +#: peXXigen.c:2263 #, c-format msgid "" "\n" @@ -8347,62 +8735,62 @@ "\n" "Виртуальный адреÑ: %08lx Размер блока %ld (0x%lx) ЧиÑло меÑтоположений %ld\n" -#: peigen.c:2282 pepigen.c:2282 pex64igen.c:2282 +#: peXXigen.c:2281 #, c-format msgid "\treloc %4d offset %4x [%4lx] %s" msgstr "\tперемещение %4d Ñмещение %4x [%4lx] %s" -#: peigen.c:2343 pepigen.c:2343 pex64igen.c:2343 +#: peXXigen.c:2342 #, c-format msgid "%03x %*.s Entry: " msgstr "%03x %*.s Элемент: " -#: peigen.c:2367 pepigen.c:2367 pex64igen.c:2367 +#: peXXigen.c:2366 #, c-format msgid "name: [val: %08lx len %d]: " msgstr "имÑ: [значение: %08lx длина %d]: " -#: peigen.c:2387 pepigen.c:2387 pex64igen.c:2387 +#: peXXigen.c:2386 #, c-format msgid "\n" msgstr "<повреждена длина Ñтроки: %#x>\n" -#: peigen.c:2397 pepigen.c:2397 pex64igen.c:2397 +#: peXXigen.c:2396 #, c-format msgid "\n" msgstr "<повреждено Ñмещение Ñтроки: %#lx>\n" -#: peigen.c:2402 pepigen.c:2402 pex64igen.c:2402 +#: peXXigen.c:2401 #, c-format msgid "ID: %#08lx" msgstr "ID: %#08lx" -#: peigen.c:2405 pepigen.c:2405 pex64igen.c:2405 +#: peXXigen.c:2404 #, c-format msgid ", Value: %#08lx\n" msgstr ", значение: %#08lx\n" -#: peigen.c:2427 pepigen.c:2427 pex64igen.c:2427 +#: peXXigen.c:2426 #, c-format msgid "%03x %*.s Leaf: Addr: %#08lx, Size: %#08lx, Codepage: %d\n" msgstr "%03x %*.s лиÑÑ‚: адреÑ: %#08lx, размер: %#08lx, ÐºÐ¾Ð´Ð¾Ð²Ð°Ñ Ñтраница: %d\n" -#: peigen.c:2469 pepigen.c:2469 pex64igen.c:2469 +#: peXXigen.c:2468 #, c-format msgid "\n" msgstr "<неизвеÑтный тип каталога: %d>\n" -#: peigen.c:2477 pepigen.c:2477 pex64igen.c:2477 +#: peXXigen.c:2476 #, c-format msgid " Table: Char: %d, Time: %08lx, Ver: %d/%d, Num Names: %d, IDs: %d\n" msgstr " Таблица: Символ: %d, ВремÑ: %08lx, ВерÑиÑ: %d/%d, Кол-во имён: %d, ID: %d\n" -#: peigen.c:2566 pepigen.c:2566 pex64igen.c:2566 +#: peXXigen.c:2564 #, c-format msgid "Corrupt .rsrc section detected!\n" msgstr "Обнаружен повреждённый раздел .rsrc!\n" -#: peigen.c:2590 pepigen.c:2590 pex64igen.c:2590 +#: peXXigen.c:2588 #, c-format msgid "" "\n" @@ -8411,17 +8799,17 @@ "\n" "ПРЕДУПРЕЖДЕÐИЕ: дополнительные данные в разделе .rsrc — будут проигнорированы Windows:\n" -#: peigen.c:2596 pepigen.c:2596 pex64igen.c:2596 +#: peXXigen.c:2594 #, c-format msgid " String table starts at offset: %#03x\n" msgstr " Таблица Ñтрок начинаетÑÑ Ñо ÑмещениÑ: %#03x\n" -#: peigen.c:2599 pepigen.c:2599 pex64igen.c:2599 +#: peXXigen.c:2597 #, c-format msgid " Resources start at offset: %#03x\n" msgstr " РеÑурÑÑ‹ начинаютÑÑ Ñо ÑмещениÑ: %#03x\n" -#: peigen.c:2651 pepigen.c:2651 pex64igen.c:2651 +#: peXXigen.c:2654 #, c-format msgid "" "\n" @@ -8430,7 +8818,7 @@ "\n" "СущеÑтвует отладочный каталог, но не найден раздел, в котором он ÑодержитÑÑ\n" -#: peigen.c:2657 pepigen.c:2657 pex64igen.c:2657 +#: peXXigen.c:2660 #, c-format msgid "" "\n" @@ -8439,7 +8827,7 @@ "\n" "СущеÑтвует отладочный каталог в %s, но Ñтот раздел без Ñодержимого\n" -#: peigen.c:2664 pepigen.c:2664 pex64igen.c:2664 +#: peXXigen.c:2667 #, c-format msgid "" "\n" @@ -8448,7 +8836,7 @@ "\n" "Ошибка: раздел %s Ñодержит отладочные данные, Ð½Ð°Ñ‡Ð¸Ð½Ð°Ñ Ñ Ð°Ð´Ñ€ÐµÑа, который Ñлишком мал\n" -#: peigen.c:2669 pepigen.c:2669 pex64igen.c:2669 +#: peXXigen.c:2672 #, c-format msgid "" "\n" @@ -8459,22 +8847,22 @@ "Ð’ %s имеетÑÑ Ð¾Ñ‚Ð»Ð°Ð´Ð¾Ñ‡Ð½Ñ‹Ð¹ каталог по адреÑу 0x%lx\n" "\n" -#: peigen.c:2676 pepigen.c:2676 pex64igen.c:2676 +#: peXXigen.c:2679 #, c-format msgid "The debug data size field in the data directory is too big for the section" msgstr "Поле размера отладочных данных в каталоге данных Ñлишком большое Ð´Ð»Ñ Ñ€Ð°Ð·Ð´ÐµÐ»Ð°" -#: peigen.c:2681 pepigen.c:2681 pex64igen.c:2681 +#: peXXigen.c:2684 #, c-format msgid "Type Size Rva Offset\n" msgstr "Тип Размер Rva Смещение\n" -#: peigen.c:2729 pepigen.c:2729 pex64igen.c:2729 +#: peXXigen.c:2731 #, c-format msgid "(format %c%c%c%c signature %s age %ld)\n" msgstr "(формат %c%c%c%c подпиÑÑŒ %s возраÑÑ‚ %ld)\n" -#: peigen.c:2737 pepigen.c:2737 pex64igen.c:2737 +#: peXXigen.c:2741 #, c-format msgid "The debug directory size is not a multiple of the debug directory entry size\n" msgstr "Размер отладочного каталога не кратен размеру Ñлемента отладочного каталога\n" @@ -8482,7 +8870,7 @@ #. The MS dumpbin program reportedly ands with 0xff0f before #. printing the characteristics field. Not sure why. No reason to #. emulate it here. -#: peigen.c:2757 pepigen.c:2757 pex64igen.c:2757 +#: peXXigen.c:2825 #, c-format msgid "" "\n" @@ -8491,97 +8879,124 @@ "\n" "ХарактериÑтики 0x%x\n" -#: peigen.c:2993 pepigen.c:2993 pex64igen.c:2993 +#: peXXigen.c:3072 #, c-format msgid "%pB: Data Directory size (%lx) exceeds space left in section (%)" msgstr "%pB: размер каталога данных (%lx) превышает оÑтавшееÑÑ Ð¼ÐµÑто в разделе (%)" -#: peigen.c:3025 pepigen.c:3025 pex64igen.c:3025 +#: peXXigen.c:3104 msgid "failed to update file offsets in debug directory" msgstr "не удалоÑÑŒ обновить файловые ÑÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð² отладочном каталоге" -#: peigen.c:3033 pepigen.c:3033 pex64igen.c:3033 +#: peXXigen.c:3112 #, c-format msgid "%pB: failed to read debug data section" msgstr "%pB: не удалоÑÑŒ прочитать раздел отладочных данных" -#: peigen.c:3849 pepigen.c:3849 pex64igen.c:3849 +#: peXXigen.c:3928 #, c-format msgid ".rsrc merge failure: duplicate string resource: %d" msgstr "ошибка при ÑлиÑнии .rsrc: Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð°Ñ Ñтрока реÑурÑа: %d" -#: peigen.c:3984 pepigen.c:3984 pex64igen.c:3984 +#: peXXigen.c:4063 msgid ".rsrc merge failure: multiple non-default manifests" msgstr "ошибка при ÑлиÑнии .rsrc: неÑколько манифеÑтов не по умолчанию" -#: peigen.c:4002 pepigen.c:4002 pex64igen.c:4002 +#: peXXigen.c:4081 msgid ".rsrc merge failure: a directory matches a leaf" msgstr "ошибка при ÑлиÑнии .rsrc: каталог Ñовпадает Ñ Ð»Ð¸Ñтом" -#: peigen.c:4044 pepigen.c:4044 pex64igen.c:4044 +#: peXXigen.c:4123 msgid ".rsrc merge failure: duplicate leaf" msgstr "ошибка при ÑлиÑнии .rsrc: повторÑющийÑÑ Ð»Ð¸ÑÑ‚" -#: peigen.c:4046 pepigen.c:4046 pex64igen.c:4046 +#: peXXigen.c:4125 #, c-format msgid ".rsrc merge failure: duplicate leaf: %s" msgstr "ошибка при ÑлиÑнии .rsrc: повторÑющийÑÑ Ð»Ð¸ÑÑ‚: %s" -#: peigen.c:4112 pepigen.c:4112 pex64igen.c:4112 +#: peXXigen.c:4191 msgid ".rsrc merge failure: dirs with differing characteristics" msgstr "ошибка при ÑлиÑнии .rsrc: каталоги Ñ Ñ€Ð°Ð·Ð½Ñ‹Ð¼ характериÑтиками" -#: peigen.c:4119 pepigen.c:4119 pex64igen.c:4119 +#: peXXigen.c:4198 msgid ".rsrc merge failure: differing directory versions" msgstr "ошибка при ÑлиÑнии .rsrc: верÑии каталогов отличаютÑÑ" #. Corrupted .rsrc section - cannot merge. -#: peigen.c:4236 pepigen.c:4236 pex64igen.c:4236 +#: peXXigen.c:4315 #, c-format msgid "%pB: .rsrc merge failure: corrupt .rsrc section" msgstr "%pB: ошибка при ÑлиÑнии .rsrc: раздел .rsrc повреждён" -#: peigen.c:4244 pepigen.c:4244 pex64igen.c:4244 +#: peXXigen.c:4323 #, c-format msgid "%pB: .rsrc merge failure: unexpected .rsrc size" msgstr "%pB: ошибка при ÑлиÑнии rsrc: неожиданный размер раздела .rsrc" -#: peigen.c:4383 pepigen.c:4383 pex64igen.c:4383 +#: peXXigen.c:4462 #, c-format msgid "%pB: unable to fill in DataDictionary[1] because .idata$2 is missing" msgstr "%pB: невозможно заполнить DataDictionary[1], так как отÑутÑтвует .idata$2" -#: peigen.c:4403 pepigen.c:4403 pex64igen.c:4403 +#: peXXigen.c:4482 #, c-format msgid "%pB: unable to fill in DataDictionary[1] because .idata$4 is missing" msgstr "%pB: невозможно заполнить DataDictionary[1], так как отÑутÑтвует .idata$4" -#: peigen.c:4424 pepigen.c:4424 pex64igen.c:4424 +#: peXXigen.c:4503 #, c-format msgid "%pB: unable to fill in DataDictionary[12] because .idata$5 is missing" msgstr "%pB: невозможно заполнить DataDictionary[12], так как отÑутÑтвует .idata$5" -#: peigen.c:4444 pepigen.c:4444 pex64igen.c:4444 +#: peXXigen.c:4523 #, c-format msgid "%pB: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE (12)] because .idata$6 is missing" msgstr "%pB: невозможно заполнить DataDictionary[PE_IMPORT_ADDRESS_TABLE (12)], так как отÑутÑтвует .idata$6" -#: peigen.c:4486 pepigen.c:4486 pex64igen.c:4486 +#: peXXigen.c:4565 #, c-format msgid "%pB: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE(12)] because .idata$6 is missing" msgstr "%pB: невозможно заполнить DataDictionary[PE_IMPORT_ADDRESS_TABLE(12)], так как отÑутÑтвует .idata$6" -#: peigen.c:4511 pepigen.c:4511 pex64igen.c:4511 +#: peXXigen.c:4590 #, c-format msgid "%pB: unable to fill in DataDictionary[9] because __tls_used is missing" msgstr "%pB: невозможно заполнить DataDictionary[9], так как отÑутÑтвует __tls_used" +#~ msgid "%pB: corrupt symbol count: %#" +#~ msgstr "%pB: повреждён Ñчётчик Ñимволов: %#" + +#~ msgid "%pB: not enough memory to allocate space for %# symbols of size %#" +#~ msgstr "%pB: недоÑтаточно памÑти Ð´Ð»Ñ Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¼ÐµÑта Ð´Ð»Ñ %# Ñимволов размером %#" + +#~ msgid "%pB: corrupt size field in group section header: %#" +#~ msgstr "%pB: повреждённое поле размера в заголовке раздела групп: %#" + +#~ msgid "error: %pB version reference section is too large (%# bytes)" +#~ msgstr "ошибка: раздел верÑий ÑÑылок %pB Ñлишком велик (%# байт)" + +#~ msgid "unexpected STO_SH5_ISA32 on local symbol is not handled" +#~ msgstr "неожиданное STO_SH5_ISA32 локального Ñимвола не обрабатываетÑÑ" + +#~ msgid "%P%X: read-only segment has dynamic IFUNC relocations; recompile with %s\n" +#~ msgstr "%P%X: в Ñегменте, доÑтупном только Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ, ÑодержатÑÑ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑкие Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ IFUNC; перекомпилируйте Ñ %s\n" + +#~ msgid "bfd_mach_o_read_symtab_symbols: unable to allocate memory for symbols" +#~ msgstr "bfd_mach_o_read_symtab_symbols: невозможно выделить памÑÑ‚ÑŒ Ð´Ð»Ñ Ñимволов" + +#~ msgid "error: %pB: conflicting priv spec version (major/minor/revision)." +#~ msgstr "ошибка: %pB: неÑоглаÑующаÑÑÑ Ð²ÐµÑ€ÑÐ¸Ñ priv spec (ÑтаршаÑ/младшаÑ/изменение)." + +#~ msgid "unsupported relocation type %#x" +#~ msgstr "неподдерживаемый тип Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ %#x" + +#~ msgid "%pB: relocation %s against `%s' can not be used whenmaking a shared object; recompile with -fPIC" +#~ msgstr "%pB: перемещение %s Ð´Ð»Ñ Â«%s» не может иÑпользоватьÑÑ Ð¿Ñ€Ð¸ Ñоздании общего объекта; перекомпилируйте Ñ -fPIC" + #~ msgid "%H: call to `%pT' lacks nop, can't restore toc; recompile with -fPIC\n" #~ msgstr "%H: вызов «%pT» указывает на не nop, невозможно воÑÑтановить toc; перекомпилируйте Ñ -fPIC\n" -#~ msgid "error: %pB: " -#~ msgstr "ошибка: %pB: <повреждение иÑпользуемого размера x86 ISA: 0x%x>" - #~ msgid "error: %pB: " #~ msgstr "ошибка: %pB: <повреждение необходимого размера x86 ISA: 0x%x>" @@ -8672,9 +9087,6 @@ #~ msgid "unsupported reloc type" #~ msgstr "неподдерживаемый тип перемещениÑ" -#~ msgid "SH Error: unknown reloc type %d" -#~ msgstr "Ошибка SH: неизвеÑтный тип Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ %d" - #~ msgid "Unrecognized reloc type 0x%x" #~ msgstr "ÐераÑпознанный тип Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ 0x%x" @@ -8731,9 +9143,6 @@ #~ msgid "%B: invalid AVR reloc number: %d" #~ msgstr "%B: некорректный номер Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ AVR: %d" -#~ msgid "%B: unsupported relocation type %d" -#~ msgstr "%B: неподдерживаемый тип Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ %d" - #~ msgid "Unsupported CR16 relocation type: 0x%x\n" #~ msgstr "Ðеподдерживаемый тип Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ CR16: 0x%x\n" @@ -8776,9 +9185,6 @@ #~ msgid "%B: unrecognised I370 reloc number: %d" #~ msgstr "%B: нераÑпознанный номер Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ I370: %d" -#~ msgid "%B: unknown relocation type %d for symbol %s" -#~ msgstr "%B: неизвеÑтный тип Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ %d Ð´Ð»Ñ Ñимвола %s" - #~ msgid "%B: Relocation %s is not yet supported for symbol %s." #~ msgstr "%B: перемещение %s пока не поддерживаетÑÑ Ð´Ð»Ñ Ñимвола %s." diff -Nru gdb-9.1/bfd/po/SRC-POTFILES.in gdb-10.2/bfd/po/SRC-POTFILES.in --- gdb-9.1/bfd/po/SRC-POTFILES.in 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/po/SRC-POTFILES.in 2021-04-25 04:06:26.000000000 +0000 @@ -3,7 +3,6 @@ aout-cris.c aout-ns32k.c aout-target.h -aout-tic30.c aout32.c aout64.c aoutx.h @@ -32,7 +31,6 @@ coff-tic30.c coff-tic4x.c coff-tic54x.c -coff-tic80.c coff-x86_64.c coff-z80.c coff-z8k.c @@ -100,7 +98,6 @@ cpu-or1k.c cpu-pdp11.c cpu-pj.c -cpu-plugin.c cpu-powerpc.c cpu-pru.c cpu-riscv.c @@ -117,7 +114,6 @@ cpu-tic4x.c cpu-tic54x.c cpu-tic6x.c -cpu-tic80.c cpu-tilegx.c cpu-tilepro.c cpu-v850.c @@ -238,6 +234,7 @@ elf32-xgate.c elf32-xstormy16.c elf32-xtensa.c +elf32-z80.c elf32.c elf64-alpha.c elf64-bpf.c @@ -317,7 +314,6 @@ pe-arm.c pe-i386.c pe-mcore.c -pe-ppc.c pe-sh.c pe-x86_64.c pef-traceback.h @@ -328,7 +324,6 @@ pei-i386.c pei-ia64.c pei-mcore.c -pei-ppc.c pei-sh.c pei-x86_64.c peicode.h Binary files /tmp/tmpwlqmdap4/HCMjq_z_kj/gdb-9.1/bfd/po/sr.gmo and /tmp/tmpwlqmdap4/bi0oNuAXeo/gdb-10.2/bfd/po/sr.gmo differ diff -Nru gdb-9.1/bfd/po/sr.po gdb-10.2/bfd/po/sr.po --- gdb-9.1/bfd/po/sr.po 2018-04-25 16:41:17.000000000 +0000 +++ gdb-10.2/bfd/po/sr.po 2021-04-25 04:06:26.000000000 +0000 @@ -1,594 +1,694 @@ -# Messages français pour GNU concernant bfd. -# Copyright (C) 2014 Free Software Foundation, Inc. +# Serbian translation of bfd. +# Copyright © 2014 Free Software Foundation, Inc. # This file is distributed under the same license as the binutils package. -# МироÑлав Ðиколић , 2016. +# МироÑлав Ðиколић , 2016–2020. msgid "" msgstr "" -"Project-Id-Version: bfd-2.24.90\n" +"Project-Id-Version: bfd-2.34.90\n" "Report-Msgid-Bugs-To: bug-binutils@gnu.org\n" -"POT-Creation-Date: 2014-02-10 09:42+1030\n" -"PO-Revision-Date: 2016-05-29 17:48+0200\n" +"POT-Creation-Date: 2020-07-04 10:26+0100\n" +"PO-Revision-Date: 2020-07-30 10:38+0200\n" "Last-Translator: МироÑлав Ðиколић \n" "Language-Team: Serbian <(nothing)>\n" "Language: sr\n" -"X-Bugs: Report translation errors to the Language-Team address.\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Virtaal 0.7.1\n" +"X-Bugs: Report translation errors to the Language-Team address.\n" + +#: aout-cris.c:196 +#, c-format +msgid "%pB: unsupported relocation type exported: %#x" +msgstr "%pB: неподржана врÑта премештања је извезена: %#x" -#: aout-adobe.c:127 -msgid "%B: Unknown section type in a.out.adobe file: %x\n" -msgstr "%B: Ðепозната врÑта одељка у датотеци „a.out.adobe“: %x\n" - -#: aout-cris.c:200 -#, c-format -msgid "%s: Invalid relocation type exported: %d" -msgstr "%s: Извезена је неиÑправна врÑта премештања: %d" - -#: aout-cris.c:243 -msgid "%B: Invalid relocation type imported: %d" -msgstr "%B: Увезена је неиÑправна врÑта премештања: %d" +#: aout-cris.c:242 +#, c-format +msgid "%pB: unsupported relocation type imported: %#x" +msgstr "%pB: неподржана врÑта премештања је увезена: %#x" #: aout-cris.c:254 -msgid "%B: Bad relocation record imported: %d" -msgstr "%B: Увезен је лош Ñнимак премештања: %d" +#, c-format +msgid "%pB: bad relocation record imported: %d" +msgstr "%pB: увезен је лош Ñнимак премештања: %d" -#: aoutx.h:1273 aoutx.h:1611 +#: aoutx.h:1265 aoutx.h:1613 pdp11.c:1236 pdp11.c:1510 #, c-format -msgid "%s: can not represent section `%s' in a.out object file format" -msgstr "%s: не могу да предÑтавим одељак „%s“ у „a.out“ запиÑу датотеке објекта" +msgid "%pB: can not represent section `%pA' in a.out object file format" +msgstr "%pB: не могу да предÑтавим одељак „%pA“ у „a.out“ запиÑу датотеке објекта" -#: aoutx.h:1577 +#: aoutx.h:1577 pdp11.c:1482 #, c-format -msgid "%s: can not represent section for symbol `%s' in a.out object file format" -msgstr "%s: не могу да предÑтавим одељак за Ñимбол „%s“ у „a.out“ запиÑу датотеке објекта" +msgid "%pB: can not represent section for symbol `%s' in a.out object file format" +msgstr "%pB: не могу да предÑтавим одељак за Ñимбол „%s“ у „a.out“ запиÑу датотеке објекта" -#: aoutx.h:1579 vms-alpha.c:7564 +#: aoutx.h:1580 vms-alpha.c:8040 msgid "*unknown*" msgstr "*непознато*" -#: aoutx.h:4018 aoutx.h:4344 -msgid "%P: %B: unexpected relocation type\n" -msgstr "%P: %B: неочекивана врÑта премештања\n" +#: aoutx.h:1716 pdp11.c:1578 +#, c-format +msgid "%pB: invalid string offset % >= %" +msgstr "%pB: неиÑправан померај ниÑке „% >= %“" + +#: aoutx.h:1963 +#, c-format +msgid "%pB: unsupported AOUT relocation size: %d" +msgstr "%pB: неподржана величина „AOUT“ премештања: %d" + +#: aoutx.h:2412 aoutx.h:2430 pdp11.c:2058 +#, c-format +msgid "%pB: attempt to write out unknown reloc type" +msgstr "%pB: покушавам да запишем непознату врÑту премештања" + +#: aoutx.h:4087 pdp11.c:3441 +#, c-format +msgid "%pB: unsupported relocation type" +msgstr "%pB: врÑта премештања није подржана" + +#. Unknown relocation. +#: aoutx.h:4408 coff-alpha.c:601 coff-alpha.c:1512 coff-rs6000.c:2758 +#: coff-sh.c:504 coff-tic4x.c:184 coff-tic54x.c:279 elf-hppa.h:798 +#: elf-hppa.h:826 elf-m10200.c:226 elf-m10300.c:812 elf32-arc.c:532 +#: elf32-arm.c:1985 elf32-avr.c:962 elf32-bfin.c:1062 elf32-bfin.c:4677 +#: elf32-cr16.c:654 elf32-cr16.c:684 elf32-cris.c:467 elf32-crx.c:429 +#: elf32-csky.c:990 elf32-d10v.c:234 elf32-d30v.c:522 elf32-d30v.c:544 +#: elf32-dlx.c:546 elf32-epiphany.c:372 elf32-fr30.c:381 elf32-frv.c:2558 +#: elf32-frv.c:6239 elf32-ft32.c:306 elf32-h8300.c:302 elf32-i386.c:400 +#: elf32-ip2k.c:1240 elf32-iq2000.c:442 elf32-lm32.c:495 elf32-m32c.c:305 +#: elf32-m32r.c:1286 elf32-m32r.c:1311 elf32-m32r.c:2232 elf32-m68hc11.c:390 +#: elf32-m68hc12.c:510 elf32-m68k.c:354 elf32-mcore.c:354 elf32-mcore.c:440 +#: elf32-mep.c:389 elf32-metag.c:874 elf32-microblaze.c:692 +#: elf32-microblaze.c:965 elf32-mips.c:2229 elf32-moxie.c:137 +#: elf32-msp430.c:653 elf32-msp430.c:663 elf32-mt.c:241 elf32-nds32.c:3237 +#: elf32-nds32.c:3263 elf32-nds32.c:5033 elf32-nios2.c:3022 elf32-or1k.c:1040 +#: elf32-pj.c:326 elf32-ppc.c:901 elf32-ppc.c:914 elf32-pru.c:423 +#: elf32-rl78.c:291 elf32-rx.c:313 elf32-rx.c:322 elf32-s12z.c:296 +#: elf32-s390.c:347 elf32-sh.c:438 elf32-spu.c:163 elf32-tic6x.c:1498 +#: elf32-tic6x.c:1508 elf32-tic6x.c:1527 elf32-tic6x.c:1537 elf32-tic6x.c:2583 +#: elf32-tilepro.c:800 elf32-v850.c:1898 elf32-v850.c:1920 elf32-v850.c:4270 +#: elf32-vax.c:290 elf32-visium.c:481 elf32-wasm32.c:105 elf32-xc16x.c:250 +#: elf32-xgate.c:418 elf32-xstormy16.c:395 elf32-xtensa.c:522 +#: elf32-xtensa.c:556 elf32-z80.c:331 elf64-alpha.c:1113 elf64-alpha.c:4067 +#: elf64-alpha.c:4215 elf64-bpf.c:322 elf64-ia64-vms.c:254 +#: elf64-ia64-vms.c:3429 elf64-mips.c:3958 elf64-mips.c:3974 elf64-mmix.c:1264 +#: elf64-nfp.c:238 elf64-ppc.c:1014 elf64-ppc.c:1366 elf64-ppc.c:1375 +#: elf64-s390.c:328 elf64-s390.c:378 elf64-x86-64.c:281 elfn32-mips.c:3786 +#: elfxx-ia64.c:324 elfxx-riscv.c:954 elfxx-sparc.c:589 elfxx-sparc.c:639 +#: elfxx-tilegx.c:909 elfxx-tilegx.c:949 elfnn-aarch64.c:2215 +#: elfnn-aarch64.c:2313 elfnn-ia64.c:213 elfnn-ia64.c:3824 +#, c-format +msgid "%pB: unsupported relocation type %#x" +msgstr "%pB: врÑта премештања није подржана „%#x“" + +#: aoutx.h:5435 pdp11.c:3864 +#, c-format +msgid "%pB: relocatable link from %s to %s not supported" +msgstr "%pB: премеÑтива веза Ñа „%s“ на „%s“ није подржана" -#: aoutx.h:5375 +#: arc-got.h:69 #, c-format -msgid "%s: relocatable link from %s to %s not supported" -msgstr "%s: премеÑтива веза Ñа „%s“ на „%s“ није подржана" +msgid "%pB: cannot allocate memory for local GOT entries" +msgstr "%pB: не могу да доделим меморију за локалне „GOT“ уноÑи" #: archive.c:2249 -msgid "Warning: writing archive was slow: rewriting timestamp\n" -msgstr "Упозорење: ÑƒÐ¿Ð¸Ñ Ñƒ архиву је Ñпор: поново упиÑујем време\n" +msgid "warning: writing archive was slow: rewriting timestamp" +msgstr "упозорење: ÑƒÐ¿Ð¸Ñ Ñƒ архиву је Ñпор: поново упиÑујем време" -#: archive.c:2549 +#: archive.c:2316 archive.c:2376 elflink.c:4545 linker.c:1428 +#, c-format +msgid "%pB: plugin needed to handle lto object" +msgstr "%pB: потребан је прикључак за руковање „lto“ објектом" + +#: archive.c:2602 msgid "Reading archive file mod timestamp" msgstr "Читам време режима датотеке архиве" -#: archive.c:2573 +#: archive.c:2626 msgid "Writing updated armap timestamp" msgstr "УпиÑујем оÑвежено време армапа" -#: bfd.c:411 -msgid "No error" -msgstr "Ðема грешке" - -#: bfd.c:412 -msgid "System call error" -msgstr "Грешка ÑиÑтемÑког позива" - -#: bfd.c:413 -msgid "Invalid bfd target" -msgstr "ÐеиÑправан циљ бфд-а" - -#: bfd.c:414 -msgid "File in wrong format" -msgstr "Датотека је у погрешном запиÑу" - -#: bfd.c:415 -msgid "Archive object file in wrong format" -msgstr "Датотека објекта архиве је у погрешном запиÑу" - -#: bfd.c:416 -msgid "Invalid operation" -msgstr "ÐеиÑправна операција" - -#: bfd.c:417 -msgid "Memory exhausted" -msgstr "Меморија је иÑцрпљена" - -#: bfd.c:418 -msgid "No symbols" -msgstr "Ðема Ñимбола" - -#: bfd.c:419 -msgid "Archive has no index; run ranlib to add one" -msgstr "Ðрхива нема индекÑ; покрените „ranlib“ да га додате" - -#: bfd.c:420 -msgid "No more archived files" -msgstr "Ðема више архивираних датотека" - -#: bfd.c:421 -msgid "Malformed archive" -msgstr "Лоша архива" +#: bfd.c:677 +msgid "no error" +msgstr "нема грешке" + +#: bfd.c:678 +msgid "system call error" +msgstr "грешка ÑиÑтемÑког позива" + +#: bfd.c:679 +msgid "invalid bfd target" +msgstr "неиÑправан циљ бфд-а" + +#: bfd.c:680 +msgid "file in wrong format" +msgstr "датотека је у погрешном запиÑу" + +#: bfd.c:681 +msgid "archive object file in wrong format" +msgstr "датотека објекта архиве је у погрешном запиÑу" + +#: bfd.c:682 +msgid "invalid operation" +msgstr "неиÑправна операција" + +#: bfd.c:683 +msgid "memory exhausted" +msgstr "меморија је иÑцрпљена" + +#: bfd.c:684 +msgid "no symbols" +msgstr "нема Ñимбола" + +#: bfd.c:685 +msgid "archive has no index; run ranlib to add one" +msgstr "архива нема индекÑ; покрените „ranlib“ да га додате" + +#: bfd.c:686 +msgid "no more archived files" +msgstr "нема више архивираних датотека" + +#: bfd.c:687 +msgid "malformed archive" +msgstr "лоша архива" -#: bfd.c:422 +#: bfd.c:688 msgid "DSO missing from command line" -msgstr "ДСО недоÑтаје на линији наредби" +msgstr "„DSO“ недоÑтаје на линији наредби" -#: bfd.c:423 -msgid "File format not recognized" -msgstr "Ð—Ð°Ð¿Ð¸Ñ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ није препознат" +#: bfd.c:689 +msgid "file format not recognized" +msgstr "Ð·Ð°Ð¿Ð¸Ñ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ није препознат" -#: bfd.c:424 -msgid "File format is ambiguous" -msgstr "Ð—Ð°Ð¿Ð¸Ñ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ је нејаÑан" +#: bfd.c:690 +msgid "file format is ambiguous" +msgstr "Ð·Ð°Ð¿Ð¸Ñ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ је нејаÑан" -#: bfd.c:425 -msgid "Section has no contents" -msgstr "Одељак нема Ñадржаје" +#: bfd.c:691 +msgid "section has no contents" +msgstr "одељак нема Ñадржаје" -#: bfd.c:426 -msgid "Nonrepresentable section on output" -msgstr "Ðа излазу је одељак који Ñе не може приказати" +#: bfd.c:692 +msgid "nonrepresentable section on output" +msgstr "на излазу је одељак који Ñе не може приказати" -#: bfd.c:427 -msgid "Symbol needs debug section which does not exist" -msgstr "Симболу је потребан одељак за уклањање грешака који не поÑтоји" +#: bfd.c:693 +msgid "symbol needs debug section which does not exist" +msgstr "Ñимболу је потребан одељак за уклањање грешака који не поÑтоји" -#: bfd.c:428 -msgid "Bad value" -msgstr "Погрешна вредноÑÑ‚" +#: bfd.c:694 +msgid "bad value" +msgstr "погрешна вредноÑÑ‚" -#: bfd.c:429 -msgid "File truncated" -msgstr "Датотека је окрњена" +#: bfd.c:695 +msgid "file truncated" +msgstr "датотека је окрњена" -#: bfd.c:430 -msgid "File too big" -msgstr "Датотека је превелика" +#: bfd.c:696 +msgid "file too big" +msgstr "датотека је превелика" -#: bfd.c:431 +#: bfd.c:697 +msgid "sorry, cannot handle this file" +msgstr "извините, не могу да радим Ñа овом датотеком" + +#: bfd.c:698 #, c-format -msgid "Error reading %s: %s" -msgstr "Грешка читања „%s“: %s" +msgid "error reading %s: %s" +msgstr "грешка читања „%s“: %s" -#: bfd.c:432 -msgid "#" -msgstr "#<ÐеиÑправан код грешке>" +#: bfd.c:699 +msgid "#" +msgstr "#<неиÑправан код грешке>" -#: bfd.c:1046 +#: bfd.c:1658 #, c-format msgid "BFD %s assertion fail %s:%d" msgstr "„BFD“ „%s“ тврдња није уÑпела „%s“:%d" -#: bfd.c:1058 +#: bfd.c:1671 #, c-format -msgid "BFD %s internal error, aborting at %s line %d in %s\n" -msgstr "Унутрашња грешка БФД-а %s, прекидам при „%s“ %d. реду у „%s“\n" +msgid "BFD %s internal error, aborting at %s:%d in %s\n" +msgstr "Унутрашња грешка „BFD“ %s, прекидам на „%s“ %d. реду у „%s“\n" -#: bfd.c:1062 +#: bfd.c:1676 #, c-format -msgid "BFD %s internal error, aborting at %s line %d\n" -msgstr "Унутрашња грешка БФД-а %s, прекидам при „%s“ %d. реду\n" +msgid "BFD %s internal error, aborting at %s:%d\n" +msgstr "Унутрашња грешка „BFD“ %s, прекидам при „%s“ %d. реду\n" -#: bfd.c:1064 +#: bfd.c:1678 msgid "Please report this bug.\n" msgstr "Пријавите ову грешку.\n" -#: bfdwin.c:206 +#: bfdwin.c:207 #, c-format msgid "not mapping: data=%lx mapped=%d\n" -msgstr "не мапирам: податак=%lx мапиран=%d\n" +msgstr "не мапирам: податак=%lx мапиран=%d\n" -#: bfdwin.c:209 +#: bfdwin.c:210 #, c-format msgid "not mapping: env var not set\n" msgstr "не мапирам: променљива окружења није поÑтављена\n" -#: binary.c:271 +#: binary.c:276 #, c-format -msgid "Warning: Writing section `%s' to huge (ie negative) file offset 0x%lx." -msgstr "Упозорење: Ð£Ð¿Ð¸Ñ Ð¾Ð´ÐµÑ™ÐºÐ° „%s“ има превелик (нпр. негативан) померај датотеке 0x%lx." - -#: bout.c:1146 elf-m10300.c:2665 elf32-avr.c:1706 elf32-frv.c:5641 -#: elf64-ia64-vms.c:354 elfxx-sparc.c:2869 reloc.c:7324 reloc16.c:160 -#: elf32-ia64.c:351 elf64-ia64.c:351 -msgid "%P%F: --relax and -r may not be used together\n" -msgstr "%P%F: „--relax“ и „-r“ Ñе не могу кориÑтити заједно\n" +msgid "warning: writing section `%pA' at huge (ie negative) file offset" +msgstr "упозорење: одељак упиÑивања „%pA“ на превеликом (нпр. негативан) померају датотеке" -#: cache.c:253 -msgid "reopening %B: %s\n" -msgstr "поново отварам „%B“: %s\n" - -#: coff-alpha.c:452 -msgid "" -"%B: Cannot handle compressed Alpha binaries.\n" -" Use compiler flags, or objZ, to generate uncompressed binaries." -msgstr "" -"%B: Ðе могу да радим Ñа Ñажетим бинарним Ðлфа датотекама.\n" -" КориÑтите заÑтавице преводиоца, или „objZ“, да Ñтворите неÑажете бинарне датотеке." +#: cache.c:271 +#, c-format +msgid "reopening %pB: %s\n" +msgstr "поново отварам „%pB“: %s\n" -#: coff-alpha.c:603 -msgid "%B: unknown/unsupported relocation type %d" -msgstr "%B: непозната/неподржана врÑта премештања „%d“" +#: coff-alpha.c:450 +#, c-format +msgid "%pB: cannot handle compressed Alpha binaries; use compiler flags, or objZ, to generate uncompressed binaries" +msgstr "%pB: не могу да радим Ñа Ñажетим бинарним Ðлфа датотекама; кориÑтите заÑтавице преводиоца, или „objZ“, да Ñтворите неÑажете бинарне датотеке" -#: coff-alpha.c:852 coff-alpha.c:889 coff-alpha.c:1973 coff-mips.c:946 +#: coff-alpha.c:850 coff-alpha.c:887 coff-alpha.c:1954 coff-mips.c:953 msgid "GP relative relocation used when GP not defined" -msgstr "Употребљено је релативно премештање општег показивача када није дефиниÑан" +msgstr "употребљено је релативно премештање општег показивача када није дефиниÑан" -#: coff-alpha.c:1450 +#: coff-alpha.c:1441 msgid "using multiple gp values" msgstr "кориÑтим неколико вредноÑти општег показивача" -#: coff-alpha.c:1509 -msgid "%B: unsupported relocation: ALPHA_R_GPRELHIGH" -msgstr "%B: неподржано премештање: „ALPHA_R_GRELHIGH“" +#: coff-alpha.c:1499 coff-alpha.c:1505 elf.c:9431 elf32-mcore.c:100 +#: elf32-mcore.c:455 elf32-ppc.c:7596 elf32-ppc.c:8747 elf64-ppc.c:15962 +#, c-format +msgid "%pB: %s unsupported" +msgstr "%pB: „%s“ није подржано" -#: coff-alpha.c:1516 -msgid "%B: unsupported relocation: ALPHA_R_GPRELLOW" -msgstr "%B: неподржано премештање: „ALPHA_R_GRELLOW“" +#: coff-go32.c:156 coffswap.h:785 +#, c-format +msgid "%pB: warning: %s: line number overflow: 0x%lx > 0xffff" +msgstr "%pB: упозорење: %s: прекорачење броја редова: 0x%lx > 0xffff" -#: coff-alpha.c:1523 elf32-m32r.c:2443 elf64-alpha.c:4083 elf64-alpha.c:4233 -#: elf64-ia64-vms.c:3429 elf32-ia64.c:3836 elf64-ia64.c:3836 -msgid "%B: unknown relocation type %d" -msgstr "%B: непозната врÑта премештања „%d“" +#: coff-mips.c:643 elf32-mips.c:1742 elf32-score.c:430 elf32-score7.c:330 +#: elf64-mips.c:3451 elfn32-mips.c:3276 +msgid "GP relative relocation when _gp not defined" +msgstr "Релативно премештање општег показивача када „_gp“ није дефиниÑано" -#: coff-arm.c:1034 +#: coff-rs6000.c:2844 #, c-format -msgid "%B: unable to find THUMB glue '%s' for `%s'" -msgstr "%B: не могу да пронађем „THUMB“ лепак „%s“ за „%s“" +msgid "%pB: TOC reloc at %# to symbol `%s' with no TOC entry" +msgstr "%pB: премештање табеле Ñадржаја Ñа „%#“ на Ñимбол „%s“ без уноÑа табеле Ñадржаја" -#: coff-arm.c:1063 +#: coff-rs6000.c:3607 coff64-rs6000.c:2153 #, c-format -msgid "%B: unable to find ARM glue '%s' for `%s'" -msgstr "%B: не могу да пронађем „ARM“ лепак „%s“ за „%s“" +msgid "%pB: symbol `%s' has unrecognized smclas %d" +msgstr "%pB: Ñимбол „%s“ има непознату клаÑу Ñимбола „%d“" -#: coff-arm.c:1365 elf32-arm.c:7141 +#: coff-sh.c:778 elf32-sh.c:521 #, c-format -msgid "" -"%B(%s): warning: interworking not enabled.\n" -" first occurrence: %B: arm call to thumb" -msgstr "" -"%B(%s): упозорење: међудејÑтво није укључено.\n" -" прво појављивање: %B: „arm“ позива „thumb“" +msgid "%pB: %#: warning: bad R_SH_USES offset" +msgstr "%pB: %#: упозорење: лош „R_SH_USES“ померај" -#: coff-arm.c:1455 +#: coff-sh.c:789 #, c-format -msgid "" -"%B(%s): warning: interworking not enabled.\n" -" first occurrence: %B: thumb call to arm\n" -" consider relinking with --support-old-code enabled" -msgstr "" -"%B(%s): упозорење: међудејÑтво није укључено.\n" -" прво појављивање: %B: „thumb“ позива „arm“\n" -" размотрите поновно повезивање Ñа укљученим „--support-old-code“" +msgid "%pB: %#: warning: R_SH_USES points to unrecognized insn %#x" +msgstr "%pB: %#: упозорење: „R_SH_USES“ показује на непознат „insn“ %#x" -#: coff-arm.c:1750 coff-tic80.c:673 cofflink.c:3168 -msgid "%B: bad reloc address 0x%lx in section `%A'" -msgstr "%B: погрешна адреÑа премештања 0x%lx у одељку „%A“" +#: coff-sh.c:807 elf32-sh.c:552 +#, c-format +msgid "%pB: %#: warning: bad R_SH_USES load offset" +msgstr "%pB: %#: упозорење: лош померај учитавања „R_SH_USES“" -#: coff-arm.c:2075 -msgid "%B: illegal symbol index in reloc: %d" -msgstr "%B: недозвољен Ð¸Ð½Ð´ÐµÐºÑ Ñимбола у премештању: %d" +#: coff-sh.c:832 elf32-sh.c:568 +#, c-format +msgid "%pB: %#: warning: could not find expected reloc" +msgstr "%pB: %#: упозорење: не могу да нађем очекивано премештање" -#: coff-arm.c:2206 +#: coff-sh.c:849 elf32-sh.c:597 #, c-format -msgid "error: %B is compiled for APCS-%d, whereas %B is compiled for APCS-%d" -msgstr "грешка: „%B“ је преведен за ÐПЦС-%d, док је „%B“ преведен за ÐПЦС-%d" +msgid "%pB: %#: warning: symbol in unexpected section" +msgstr "%pB: %#: упозорење: Ñимбол је у неочекиваном одељку" -#: coff-arm.c:2222 elf32-arm.c:16123 +#: coff-sh.c:975 elf32-sh.c:727 #, c-format -msgid "error: %B passes floats in float registers, whereas %B passes them in integer registers" -msgstr "грешка: „%B“ проÑлеђује децималне вредноÑти у региÑтре децималних, док их „%B“ проÑлеђује у региÑтре целих вредноÑти" +msgid "%pB: %#: warning: could not find expected COUNT reloc" +msgstr "%pB: %#: упозорење: не могу да нађем очекивано премештање „COUNT“" -#: coff-arm.c:2225 elf32-arm.c:16127 +#: coff-sh.c:985 elf32-sh.c:738 #, c-format -msgid "error: %B passes floats in integer registers, whereas %B passes them in float registers" -msgstr "грешка: „%B“ проÑлеђује децималне вредноÑти у региÑтре целих, док их „%B“ проÑлеђује у региÑтре децималних вредноÑти" +msgid "%pB: %#: warning: bad count" +msgstr "%pB: %#: упозорење: лош број" -#: coff-arm.c:2239 +#: coff-sh.c:1356 coff-sh.c:2644 elf32-sh.c:1138 elf32-sh.c:1505 #, c-format -msgid "error: %B is compiled as position independent code, whereas target %B is absolute position" -msgstr "грешка: „%B“ је преведен као код незавиÑан од положаја, док је циљ „%B“ апÑолутни положај" +msgid "%pB: %#: fatal: reloc overflow while relaxing" +msgstr "%pB: %#: кобна грешка: прекорачење премештања приликом опуштања" -#: coff-arm.c:2242 +#: coff-sh.c:1451 #, c-format -msgid "error: %B is compiled as absolute position code, whereas target %B is position independent" -msgstr "грешка: „%B“ је преведен као код апÑолутног положаја, док је циљ „%B“ незавиÑтан од положаја" +msgid "%pB: fatal: generic symbols retrieved before relaxing" +msgstr "%pB: кобно: општи Ñимболи Ñу пронађени пре опуштања" -#: coff-arm.c:2270 elf32-arm.c:16192 +#: coff-sh.c:2781 cofflink.c:2948 #, c-format -msgid "Warning: %B supports interworking, whereas %B does not" -msgstr "УПОЗОРЕЊЕ: „%B“ подржава међудејÑтво, док га „%B“ не подржава" +msgid "%pB: illegal symbol index %ld in relocs" +msgstr "%pB: неиÑправан Ð¸Ð½Ð´ÐµÐºÑ Ñимбола %ld у премештањима" -#: coff-arm.c:2273 elf32-arm.c:16198 +#: coff-tic4x.c:228 coff-tic54x.c:366 coffcode.h:5085 #, c-format -msgid "Warning: %B does not support interworking, whereas %B does" -msgstr "УПОЗОРЕЊЕ: „%B“ не подржава међудејÑтво, док га „%B“ подржава" +msgid "%pB: warning: illegal symbol index %ld in relocs" +msgstr "%pB: упозорење: неиÑправан Ð¸Ð½Ð´ÐµÐºÑ Ñимбола %ld у премештањима" -#: coff-arm.c:2297 +#: coffcode.h:961 #, c-format -msgid "private flags = %x:" -msgstr "приватне заÑтавице =%x:" +msgid "%pB: unable to load COMDAT section name" +msgstr "%pB: не могу да учитам „COMDAT“ назив одељка" -#: coff-arm.c:2305 elf32-arm.c:12119 +#. Malformed input files can trigger this test. +#. cf PR 21781. +#: coffcode.h:996 #, c-format -msgid " [floats passed in float registers]" -msgstr " [децималне вредноÑти Ñу проÑлеђене у региÑтре децималних вредноÑти]" +msgid "%pB: error: unexpected symbol '%s' in COMDAT section" +msgstr "%pB: грешка: неочекивани Ñимбол „%s“ у „COMDAT“ одељку" -#: coff-arm.c:2307 +#: coffcode.h:1008 #, c-format -msgid " [floats passed in integer registers]" -msgstr " [децималне вредноÑти Ñу проÑлеђене у региÑтре целих вредноÑти]" +msgid "%pB: warning: COMDAT symbol '%s' does not match section name '%s'" +msgstr "%pB: упозорење: „COMDAT“ Ñимбол „%s“ Ñе не подудара Ñа називом одељка „%s“" -#: coff-arm.c:2310 elf32-arm.c:12122 +#: coffcode.h:1018 #, c-format -msgid " [position independent]" -msgstr " [незавиÑтан од положаја]" +msgid "%pB: warning: no symbol for section '%s' found" +msgstr "%pB: упозорење: ниÑам нашао никакав Ñимбол за одељак „%s“" -#: coff-arm.c:2312 +#. Generate a warning message rather using the 'unhandled' +#. variable as this will allow some .sys files generate by +#. other toolchains to be processed. See bugzilla issue 196. +#: coffcode.h:1249 #, c-format -msgid " [absolute position]" -msgstr " [апÑолутни положај]" +msgid "%pB: warning: ignoring section flag %s in section %s" +msgstr "%pB: упозорење: занемарујем заÑтавицу одељка „%s“ у одељку „%s“" -#: coff-arm.c:2316 +#: coffcode.h:1318 #, c-format -msgid " [interworking flag not initialised]" -msgstr " [заÑтавица међудејÑтва није покренута]" +msgid "%pB (%s): section flag %s (%#lx) ignored" +msgstr "%pB (%s): заÑтавица одељка „%s“ (%#lx) је занемарена" -#: coff-arm.c:2318 +#: coffcode.h:1934 coffcode.h:1999 #, c-format -msgid " [interworking supported]" -msgstr " [међудејÑтво је подржано]" +msgid "%pB: warning: claims to have 0xffff relocs, without overflow" +msgstr "%pB: упозорење: потврђујем 0xffff премештања, без прекорачења" -#: coff-arm.c:2320 +#: coffcode.h:2365 #, c-format -msgid " [interworking not supported]" -msgstr " [међудејÑтво није подржано]" +msgid "unrecognized TI COFF target id '0x%x'" +msgstr "непознат ид „TI COFF“ циља „0x%x“" -#: coff-arm.c:2366 elf32-arm.c:11104 +#: coffcode.h:2643 #, c-format -msgid "Warning: Not setting interworking flag of %B since it has already been specified as non-interworking" -msgstr "Упозорење: ÐиÑам подеÑио заÑтавицу међудејÑтва за „%B“ пошто је већ наведен као немеђудејÑтвено" +msgid "%pB: reloc against a non-existent symbol index: %ld" +msgstr "%pB: премештање наÑпрам непоÑтојећег индекÑа Ñимбола: %ld" -#: coff-arm.c:2370 elf32-arm.c:11108 +#: coffcode.h:2951 #, c-format -msgid "Warning: Clearing the interworking flag of %B due to outside request" -msgstr "Упозорење: Уклањам заÑтавицу међудејÑтва за „%B“ уÑлед захтева Ñпоља" +msgid "%pB: page size is too large (0x%x)" +msgstr "%pB: величина Ñтранице је превелика (0x%x)" -#: coff-h8300.c:1096 +#: coffcode.h:3111 #, c-format -msgid "cannot handle R_MEM_INDIRECT reloc when using %s output" -msgstr "не могу да радим Ñа „R_MEM_INDIRECT“ премештањем када кориÑтим „%s“ излаз" +msgid "%pB: too many sections (%d)" +msgstr "%pB: превише одељака (%d)" -#: coff-i860.c:147 +#: coffcode.h:3530 #, c-format -msgid "relocation `%s' not yet implemented" -msgstr "премештање „%s“ још није примењено" +msgid "%pB: section %pA: string table overflow at offset %ld" +msgstr "%pB: одељак „%pA“: прекорачење табеле ниÑки на померају %ld" -#: coff-i860.c:605 coff-tic54x.c:365 coffcode.h:5209 -msgid "%B: warning: illegal symbol index %ld in relocs" -msgstr "%B: упозорење: неиÑправан Ð¸Ð½Ð´ÐµÐºÑ Ñимбола %ld у премештањима" +#: coffcode.h:3630 +#, c-format +msgid "%pB:%s section %s: alignment 2**%u not representable" +msgstr "%pB:%s одељак %s: поравнање 2**%u Ñе не може предÑтавити" -#: coff-i960.c:124 coff-i960.c:480 -msgid "uncertain calling convention for non-COFF symbol" -msgstr "неÑигуран договор позива за не-„COFF“ Ñимбол" +#: coffcode.h:4329 +#, c-format +msgid "%pB: warning: line number count (%#lx) exceeds section size (%#lx)" +msgstr "%pB: упозорење: број редова (%#lx) превазилази величину одељка (%#lx)" -#: coff-m68k.c:484 elf32-bfin.c:5556 elf32-cr16.c:2853 elf32-m68k.c:4632 -msgid "unsupported reloc type" -msgstr "неподржана врÑта премештања" +#: coffcode.h:4349 +#, c-format +msgid "%pB: warning: line number table read failed" +msgstr "%pB: упозорење: није уÑпело читање броја реда табеле" -#: coff-mips.c:636 elf32-mips.c:1637 elf32-score.c:431 elf32-score7.c:330 -#: elf64-mips.c:2925 elfn32-mips.c:2737 -msgid "GP relative relocation when _gp not defined" -msgstr "Релативно ГП премештање када „_gp“ није дефиниÑано" +#: coffcode.h:4383 coffcode.h:4397 +#, c-format +msgid "%pB: warning: illegal symbol index 0x%lx in line number entry %d" +msgstr "%pB: упозорење: неиÑправан Ð¸Ð½Ð´ÐµÐºÑ Ñимбола 0x%lx у уноÑу броја реда %d" -#: coff-or32.c:216 -msgid "Unrecognized reloc" -msgstr "Ðепознато премештање" +#: coffcode.h:4411 +#, c-format +msgid "%pB: warning: illegal symbol in line number entry %d" +msgstr "%pB: упозорење: неиÑправан Ð¸Ð½Ð´ÐµÐºÑ Ñимбола у уноÑу броја реда %d" -#: coff-rs6000.c:2802 +#: coffcode.h:4424 #, c-format -msgid "%s: unsupported relocation type 0x%02x" -msgstr "%s: неподржана врÑта премештања 0x%02x" +msgid "%pB: warning: duplicate line number information for `%s'" +msgstr "%pB: упозорење: удвоÑтручени податак о броју реда за „%s“" -#: coff-rs6000.c:2887 +#: coffcode.h:4845 #, c-format -msgid "%s: TOC reloc at 0x%x to symbol `%s' with no TOC entry" -msgstr "%s: премештање табеле Ñадржаја на 0x%x за Ñимбол „%s“ који не Ñадржи никакав уноÑ" +msgid "%pB: unrecognized storage class %d for %s symbol `%s'" +msgstr "%pB: непозната клаÑа Ñмештаја „%d“ за „%s“ Ñимбол „%s“" -#: coff-rs6000.c:3638 coff64-rs6000.c:2117 -msgid "%B: symbol `%s' has unrecognized smclas %d" -msgstr "%B: Ñимбол „%s“ има непознату клаÑу Ñимбола „%d“" +#: coffcode.h:4975 +#, c-format +msgid "warning: %pB: local symbol `%s' has no section" +msgstr "упозорење: %pB: локални Ñимбол „%s“ нема одељак" -#: coff-sh.c:506 +#: coffcode.h:5125 #, c-format -msgid "SH Error: unknown reloc type %d" -msgstr "Грешка шкољке: непозната врÑта премештања „%d“" +msgid "%pB: illegal relocation type %d at address %#" +msgstr "%pB: неиÑправна врÑта премештања %d на адреÑи %#" -#: coff-tic4x.c:184 coff-tic54x.c:279 coff-tic80.c:440 +#: coffgen.c:179 elf.c:1236 #, c-format -msgid "Unrecognized reloc type 0x%x" -msgstr "Ðепозната врÑта премештања 0x%x" +msgid "%pB: unable to initialize compress status for section %s" +msgstr "%pB: не могу да започнем Ñтање Ñажимања за одељак „%s“" -#: coff-tic4x.c:227 +#: coffgen.c:203 elf.c:1247 #, c-format -msgid "%s: warning: illegal symbol index %ld in relocs" -msgstr "%s: упозорење: неиÑправан Ð¸Ð½Ð´ÐµÐºÑ Ñимбола %ld у премештањима" +msgid "%pB: unable to initialize decompress status for section %s" +msgstr "%pB: не могу да започнем Ñтање раÑпакивања за одељак „%s“" -#: coff-w65.c:355 +#: coffgen.c:1704 #, c-format -msgid "ignoring reloc %s\n" -msgstr "занемарујем премештање „%s“\n" +msgid "%pB: bad string table size %" +msgstr "%pB: лоша величина табеле низа %" -#: coffcode.h:1005 -msgid "%B: warning: COMDAT symbol '%s' does not match section name '%s'" -msgstr "%B: упозорење: „COMDAT“ Ñимбол „%s“ Ñе не подудара Ñа називом одељка „%s“" +#: coffgen.c:1876 coffgen.c:1936 coffgen.c:1954 cofflink.c:2024 elf.c:1921 +#: xcofflink.c:4500 +msgid "" +msgstr "<оштећење>" -#. Generate a warning message rather using the 'unhandled' -#. variable as this will allow some .sys files generate by -#. other toolchains to be processed. See bugzilla issue 196. -#: coffcode.h:1230 -msgid "%B: Warning: Ignoring section flag IMAGE_SCN_MEM_NOT_PAGED in section %s" -msgstr "%B: Упозорење: Занемарујем заÑтавицу одељка „IMAGE_SCN_MEM_NOT_PAGED“ у одељку „%s“" +#: coffgen.c:2085 +#, c-format +msgid " %s" +msgstr "<оштећени подаци> %s" -#: coffcode.h:1297 -msgid "%B (%s): Section flag %s (0x%x) ignored" -msgstr "%B (%s): ЗаÑтавица одељка „%s“ (0x%x) је занемарена" +#: coffgen.c:2675 elflink.c:14624 linker.c:2956 +msgid "%F%P: already_linked_table: %E\n" +msgstr "%F%P: већ_повезана_табела: %E\n" -#: coffcode.h:2439 +#: coffgen.c:3016 elflink.c:13617 #, c-format -msgid "Unrecognized TI COFF target id '0x%x'" -msgstr "Ðепознат ид „TI COFF“ циља „0x%x“" +msgid "removing unused section '%pA' in file '%pB'" +msgstr "уклањам некоришћени одељак „%pA“ у датотеци „%pB“" -#: coffcode.h:2753 -msgid "%B: reloc against a non-existant symbol index: %ld" -msgstr "%B: премештање наÑпрам непоÑтојећег индекÑа Ñимбола: %ld" +#: coffgen.c:3093 elflink.c:13835 +msgid "warning: gc-sections option ignored" +msgstr "упозорење: опција „gc“ одељака је занемарена" -#: coffcode.h:3311 -msgid "%B: too many sections (%d)" -msgstr "%B: превише одељака (%d)" +#: cofflink.c:366 +#, c-format +msgid "warning: symbol `%s' is both section and non-section" +msgstr "упозорење: Ñимбол „%s“ је и одељак и није одељак" -#: coffcode.h:3729 -msgid "%B: section %s: string table overflow at offset %ld" -msgstr "%B: одељак „%s“: прекорачење табеле ниÑки на померају %ld" +#: cofflink.c:471 elf64-ia64-vms.c:5200 elflink.c:5131 +#, c-format +msgid "warning: type of symbol `%s' changed from %d to %d in %pB" +msgstr "упозорење: врÑта Ñимбола „%s“ је измењена из „%d“ у „%d“ за „%pB“" -#: coffcode.h:4534 -msgid "%B: warning: line number table read failed" -msgstr "%B: упозорење: није уÑпело читање броја реда табеле" +#: cofflink.c:2352 +#, c-format +msgid "%pB: relocs in section `%pA', but it has no contents" +msgstr "%pB: премештања у одељку „%pA“, али нема никаквог Ñадржаја" -#: coffcode.h:4564 -msgid "%B: warning: illegal symbol index %ld in line numbers" -msgstr "%B: упозорење: неиÑправан Ð¸Ð½Ð´ÐµÐºÑ Ñимбола %ld у бројевима редова" +#: cofflink.c:2415 elflink.c:11082 +#, c-format +msgid "%X`%s' referenced in section `%pA' of %pB: defined in discarded section `%pA' of %pB\n" +msgstr "%X„%s“ је упутно у одељку „%pA“ од „%pB“: дефиниÑано је у одбаченом одељку „%pA“ од „%pB“\n" -#: coffcode.h:4578 -msgid "%B: warning: duplicate line number information for `%s'" -msgstr "%B: упозорење: удвоÑтручени податак о броју реда за „%s“" +#: cofflink.c:2717 +#, c-format +msgid "%pB: %pA: reloc overflow: %#x > 0xffff" +msgstr "%pB: %pA: прекорачење премештања: %#x > 0xffff" -#: coffcode.h:4978 -msgid "%B: Unrecognized storage class %d for %s symbol `%s'" -msgstr "%B: Ðепозната клаÑа Ñмештаја „%d“ за „%s“ Ñимбол „%s“" +#: cofflink.c:2725 +#, c-format +msgid "%pB: warning: %pA: line number overflow: %#x > 0xffff" +msgstr "%pB: упозорење: %pA: прекорачење броја редова: %#x > 0xffff" -#: coffcode.h:5104 -msgid "warning: %B: local symbol `%s' has no section" -msgstr "упозорење: %B: локални Ñимбол „%s“ нема одељак" +#: cofflink.c:3110 +#, c-format +msgid "%pB: bad reloc address %# in section `%pA'" +msgstr "%pB: погрешна адреÑа премештања %# у одељку „%pA“" -#: coffcode.h:5248 -msgid "%B: illegal relocation type %d at address 0x%lx" -msgstr "%B: неиÑправна врÑта премештања %d на адреÑи 0x%lx" +#: coffswap.h:799 +#, c-format +msgid "%pB: %s: reloc overflow: 0x%lx > 0xffff" +msgstr "%pB: %s: прекорачење премештања: 0x%lx > 0xffff" -#: coffgen.c:179 elf.c:1030 -msgid "%B: unable to initialize compress status for section %s" -msgstr "%B: не могу да започнем Ñтање Ñажимања за одељак „%s“" +#: compress.c:271 +#, c-format +msgid "error: %pB(%pA) section size (%# bytes) is larger than file size (%# bytes)" +msgstr "грешка: %pB(%pA) величина одељка (%# бајтова) је већа од величине датотеке (%# бајта)" -#: coffgen.c:199 elf.c:1050 -msgid "%B: unable to initialize decompress status for section %s" -msgstr "%B: не могу да започнем Ñтање раÑпакивања за одељак „%s“" +#: compress.c:282 +#, c-format +msgid "error: %pB(%pA) is too large (%# bytes)" +msgstr "грешка: %pB(%pA) је превелико (%# бајта)" -#: coffgen.c:1685 -msgid "%B: bad string table size %lu" -msgstr "%B: лоша величина табеле низа %lu" +#: cpu-arm.c:303 cpu-arm.c:315 +#, c-format +msgid "error: %pB is compiled for the EP9312, whereas %pB is compiled for XScale" +msgstr "грешка: %pB је преведен за EP9312, док је %pB преведен за „XScale“" -#: coffgen.c:2608 elflink.c:12906 linker.c:3136 -msgid "%F%P: already_linked_table: %E\n" -msgstr "%F%P: већ_повезана_табела: %E\n" +#: cpu-arm.c:451 +#, c-format +msgid "warning: unable to update contents of %s section in %pB" +msgstr "упозорење: не могу да оÑвежим Ñадржај „%s“ одељка у %pB" -#: cofflink.c:533 elf64-ia64-vms.c:5173 elflink.c:4356 -msgid "Warning: type of symbol `%s' changed from %d to %d in %B" -msgstr "Упозорење: врÑта Ñимбола „%s“ је измењена из „%d“ у „%d“ за „%B“" +#: dwarf2.c:543 +#, c-format +msgid "DWARF error: can't find %s section." +msgstr "„DWARF“ грешка: не могу да нађем одељак „%s“." -#: cofflink.c:2416 -msgid "%B: relocs in section `%A', but it has no contents" -msgstr "%B: премештања у одељку „%A“, али нема никаквог Ñадржаја" +#: dwarf2.c:578 +#, c-format +msgid "DWARF error: offset (%) greater than or equal to %s size (%)" +msgstr "„DWARF“ грешка: померај (%) је већи или једнак величини %s (%)" -#: cofflink.c:2478 elflink.c:9711 -msgid "%X`%s' referenced in section `%A' of %B: defined in discarded section `%A' of %B\n" -msgstr "%X„%s“ је упутно у одељку „%A“ од „%B“: дефиниÑано је у одбаченом одељку „%A“ од „%B“\n" +#: dwarf2.c:1165 +msgid "DWARF error: info pointer extends beyond end of attributes" +msgstr "„DWARF“ грешка: инфо указивач превазилази крај атрибута" -#: cofflink.c:2777 coffswap.h:826 +#: dwarf2.c:1333 #, c-format -msgid "%s: %s: reloc overflow: 0x%lx > 0xffff" -msgstr "%s: %s: прекорачење премештања: 0x%lx > 0xffff" +msgid "DWARF error: invalid or unhandled FORM value: %#x" +msgstr "„DWARF“ грешка: неиÑправна или непозната вредноÑÑ‚ „FORM“: %#x" -#: cofflink.c:2786 coffswap.h:812 -#, c-format -msgid "%s: warning: %s: line number overflow: 0x%lx > 0xffff" -msgstr "%s: упозорење: %s: прекорачење броја редова: 0x%lx > 0xffff" +#: dwarf2.c:1646 +msgid "DWARF error: mangled line number section (bad file number)" +msgstr "„DWARF“ грешка: број реда одељка је одÑечен (лош број датотеке)" -#: cpu-arm.c:190 cpu-arm.c:201 -msgid "error: %B is compiled for the EP9312, whereas %B is compiled for XScale" -msgstr "грешка: „%B“ је преведен за EP9312, док је „%B“ преведен за XScale" +#: dwarf2.c:1994 +msgid "DWARF error: zero format count" +msgstr "„DWARF“ грешка: нулти број запиÑа" -#: cpu-arm.c:334 +#: dwarf2.c:2004 #, c-format -msgid "warning: unable to update contents of %s section in %s" -msgstr "упозорење: не могу да оÑвежим Ñадржај „%s“ одељка у „%s“" +msgid "DWARF error: data count (%) larger than buffer size" +msgstr "„DWARF“ грешка: број података (%) је већи од величине међумеморије" -#: dwarf2.c:514 +#: dwarf2.c:2045 #, c-format -msgid "Dwarf Error: Can't find %s section." -msgstr "„DWARF“ грешка: не могу да нађем одељак „%s“." +msgid "DWARF error: unknown format content type %" +msgstr "„DWARF“ грешка: непозната врÑта Ñадржаја запиÑа „%“" -#: dwarf2.c:543 +#: dwarf2.c:2112 +#, c-format +msgid "DWARF error: line info section is too small (%)" +msgstr "„DWARF“ грешка: одељак података реда је премали (%)" + +#: dwarf2.c:2142 #, c-format -msgid "Dwarf Error: Offset (%lu) greater than or equal to %s size (%lu)." -msgstr "„DWARF“ грешка: Померај (%lu) је >= величини %s (%lu)." +msgid "DWARF error: line info data is bigger (%#) than the space remaining in the section (%#lx)" +msgstr "„DWARF“ грешка: одељак података реда је већи (%#) од проÑтора преоÑталог у одељку (%#lx)" -#: dwarf2.c:1071 +#: dwarf2.c:2155 #, c-format -msgid "Dwarf Error: Invalid or unhandled FORM value: %#x." -msgstr "„DWARF“ грешка: ÐеиÑправна или непозната вредноÑÑ‚ „FORM“: %#x." +msgid "DWARF error: unhandled .debug_line version %d" +msgstr "„DWARF“ грешка: необрађено „.debug_line“ издање %d" -#: dwarf2.c:1332 -msgid "Dwarf Error: mangled line number section (bad file number)." -msgstr "„DWARF“ грешка: Број реда одељка је одÑечен (лош број датотеке)." +#: dwarf2.c:2165 +msgid "DWARF error: ran out of room reading prologue" +msgstr "„DWARFд грешка: пнеÑтало је проÑтора читајући пролог" -#: dwarf2.c:1590 +#: dwarf2.c:2183 #, c-format -msgid "Dwarf Error: Unhandled .debug_line version %d." -msgstr "„DWARF“ грешка: Ðеобрађено „.debug_line“ издање %d." +msgid "DWARF error: line info unsupported segment selector size %u" +msgstr "„DWARF“ грешка: неподржана величина избирача подеока података реда %u" -#: dwarf2.c:1612 -msgid "Dwarf Error: Invalid maximum operations per instruction." -msgstr "„DWARF“ грешка: ÐеиÑправан највећи број операција по инÑтрукцији." +#: dwarf2.c:2210 +msgid "DWARF error: invalid maximum operations per instruction" +msgstr "„DWARF“ грешка: ÐеиÑправан највећи број операција по инÑтрукцији" -#: dwarf2.c:1807 -msgid "Dwarf Error: mangled line number section." -msgstr "„DWARF“ грешка: Број реда одељка је одÑечен." +#: dwarf2.c:2229 +msgid "DWARF error: ran out of room reading opcodes" +msgstr "„DWARFд грешка: пнеÑтало је проÑтора читајући опкодове" -#: dwarf2.c:2160 +#: dwarf2.c:2420 +msgid "DWARF error: mangled line number section" +msgstr "„DWARF“ грешка: број реда одељка је одÑечен" + +#: dwarf2.c:2905 +msgid "DWARF error: abstract instance recursion detected" +msgstr "„DWARF“ грешка: дубачење апÑтрактног примерка је откривено" + +#: dwarf2.c:2939 dwarf2.c:3033 +msgid "DWARF error: invalid abstract instance DIE ref" +msgstr "„DWARF“ грешка: неиÑправан апÑтрактан примерак „DIE“ упуте" + +#: dwarf2.c:2955 +#, c-format +msgid "DWARF error: unable to read alt ref %" +msgstr "„DWARF“ грешка: не могу да прочитам „alt“ упуту %" + +#: dwarf2.c:3011 +#, c-format +msgid "DWARF error: unable to locate abstract instance DIE ref %" +msgstr "„DWARF“ грешка: не могу да пронађем апÑтрактни примерак „DIE“ упуте %" + +#: dwarf2.c:3050 dwarf2.c:3232 dwarf2.c:3618 #, c-format -msgid "Dwarf Error: Unable to read alt ref %u." -msgstr "„DWARF“ грешка: Ðе могу да прочитам „alt“ упуту %u." +msgid "DWARF error: could not find abbrev number %u" +msgstr "„DWARF“ грешка: не могу да нађем Ñкраћени број %u" -#: dwarf2.c:2179 dwarf2.c:2299 dwarf2.c:2595 +#: dwarf2.c:3381 #, c-format -msgid "Dwarf Error: Could not find abbrev number %u." -msgstr "„DWARF“ грешка: Ðе могу да нађем Ñкраћени број %u." +msgid "DWARF error: could not find variable specification at offset %lx" +msgstr "„DWARF“ грешка: не могу да нађем одредбу променљиве на померају %lx" -#: dwarf2.c:2551 +#: dwarf2.c:3537 #, c-format -msgid "Dwarf Error: found dwarf version '%u', this reader only handles version 2, 3 and 4 information." -msgstr "„DWARF“ грешка: Ðађох „DWARF“ издање „%u“, овај читач ради Ñамо Ñа подацима издања 2, 3 и 4." +msgid "DWARF error: found dwarf version '%u', this reader only handles version 2, 3, 4 and 5 information" +msgstr "„DWARF“ грешка: нађох „DWARF“ издање „%u“, овај читач ради Ñамо Ñа подацима издања 2, 3, 4 и 5" -#: dwarf2.c:2560 +#: dwarf2.c:3581 #, c-format -msgid "Dwarf Error: found address size '%u', this reader can not handle sizes greater than '%u'." -msgstr "„DWARF“ грешка: Ðађох величину адреÑе „%u“, овај читач не може да ради Ñа величинама већим од „%u“." +msgid "DWARF error: found address size '%u', this reader can not handle sizes greater than '%u'" +msgstr "„DWARF“ грешка: нађох величину адреÑе „%u“, овај читач не може да ради Ñа величинама већим од „%u“" + +#: dwarf2.c:3685 +msgid "DWARF error: DW_AT_comp_dir attribute encountered with a non-string form" +msgstr "„DWARF“ грешка: оÑобина „DW_AT_comp_dir“ је нађена Ñа запиÑом не-ниÑке" -#: dwarf2.c:2586 +#: ecoff.c:982 #, c-format -msgid "Dwarf Error: Bad abbrev number: %u." -msgstr "„DWARF“ грешка: Лош Ñкраћени број: %u." +msgid "%pB: warning: isymMax (%ld) is greater than ifdMax (%ld)" +msgstr "%pB: упозорење: „isymMax“ (%ld) је веће од „ifdMax“ (%ld)" -#: ecoff.c:1233 +#: ecoff.c:1279 #, c-format -msgid "Unknown basic type %d" -msgstr "Ðепозната оÑновна врÑта „%d“" +msgid "unknown basic type %d" +msgstr "непозната оÑновна врÑта „%d“" -#: ecoff.c:1490 +#: ecoff.c:1536 #, c-format msgid "" "\n" @@ -597,7 +697,7 @@ "\n" " ПоÑледњи+1 Ñимбол: %ld" -#: ecoff.c:1497 ecoff.c:1500 +#: ecoff.c:1543 ecoff.c:1546 #, c-format msgid "" "\n" @@ -606,7 +706,7 @@ "\n" " Први Ñимбол: %ld" -#: ecoff.c:1512 +#: ecoff.c:1559 #, c-format msgid "" "\n" @@ -615,7 +715,7 @@ "\n" " ПоÑледњи+1 Ñимбол: %-7ld Ð’Ñ€Ñта: %s" -#: ecoff.c:1519 +#: ecoff.c:1566 #, c-format msgid "" "\n" @@ -624,7 +724,7 @@ "\n" " Локални Ñимбол: %ld" -#: ecoff.c:1527 +#: ecoff.c:1574 #, c-format msgid "" "\n" @@ -633,7 +733,7 @@ "\n" " struct; ПоÑледњи+1 Ñимбол: %ld" -#: ecoff.c:1532 +#: ecoff.c:1579 #, c-format msgid "" "\n" @@ -642,7 +742,7 @@ "\n" " union; ПоÑледњи+1 Ñимбол: %ld" -#: ecoff.c:1537 +#: ecoff.c:1584 #, c-format msgid "" "\n" @@ -651,7 +751,7 @@ "\n" " enum; ПоÑледњи+1 Ñимбол: %ld" -#: ecoff.c:1543 +#: ecoff.c:1590 #, c-format msgid "" "\n" @@ -660,138 +760,319 @@ "\n" " Ð’Ñ€Ñта: %s" -#: elf-attrs.c:573 -msgid "error: %B: Object has vendor-specific contents that must be processed by the '%s' toolchain" -msgstr "грешка: %B: Објекат има Ñадржај продавцу Ñпецифичан који мора бити обрађен алатним ланцем „%s“" - -#: elf-attrs.c:582 -msgid "error: %B: Object tag '%d, %s' is incompatible with tag '%d, %s'" -msgstr "грешка: %B: Ознака објекта „%d, %s“ није ÑаглаÑна Ñа ознаком „%d, %s“" - -#: elf-eh-frame.c:921 -msgid "%P: error in %B(%A); no .eh_frame_hdr table will be created.\n" -msgstr "%P: грешка у „%B(%A)“; неће бити направљена ниједна „.eh_frame_hdr“ табела.\n" - -#: elf-eh-frame.c:1193 -msgid "%P: fde encoding in %B(%A) prevents .eh_frame_hdr table being created.\n" -msgstr "%P: фде кодирање у „%B(%A)“ Ñпречава Ñтварање „.eh_frame_hdr“ табеле.\n" - -#: elf-eh-frame.c:1612 -msgid "%P: DW_EH_PE_datarel unspecified for this architecture.\n" -msgstr "%P: „DW_EH_PE_datarel“ није одређено за ову архитектуру.\n" - -#: elf-ifunc.c:135 -msgid "%F%P: dynamic STT_GNU_IFUNC symbol `%s' with pointer equality in `%B' can not be used when making an executable; recompile with -fPIE and relink with -pie\n" -msgstr "%F%P: динамички „STT_GNU_IFUNC“ Ñимбол „%s“ Ñа једнакошћу показивача у „%B“ Ñе не може кориÑтити приликом Ñтварања извршне; преведите поново Ñа „-fPIE“ и повежите поново Ñа „-pie“\n" - -#: elf-m10200.c:430 elf-m10300.c:2164 elf32-avr.c:1256 elf32-bfin.c:3220 -#: elf32-cr16.c:1484 elf32-cr16c.c:780 elf32-cris.c:2016 elf32-crx.c:922 -#: elf32-d10v.c:513 elf32-epiphany.c:557 elf32-fr30.c:589 elf32-frv.c:4039 -#: elf32-h8300.c:525 elf32-i860.c:1212 elf32-ip2k.c:1468 elf32-iq2000.c:688 -#: elf32-lm32.c:1160 elf32-m32c.c:553 elf32-m32r.c:3066 elf32-m68hc1x.c:1283 -#: elf32-mep.c:535 elf32-metag.c:1992 elf32-microblaze.c:1560 -#: elf32-moxie.c:282 elf32-mt.c:395 elf32-nds32.c:4910 elf32-openrisc.c:404 -#: elf32-score.c:2729 elf32-score7.c:2537 elf32-spu.c:5041 -#: elf32-tilepro.c:3666 elf32-v850.c:2281 elf32-xstormy16.c:936 -#: elf64-mmix.c:1538 elfxx-tilegx.c:4051 +#: elf-attrs.c:449 +#, c-format +msgid "%pB: error: attribute section '%pA' too big: %#llx" +msgstr "%pB: грешка: одељак оÑобине „%pA“ је превелик: %#llx" + +#: elf-attrs.c:490 +#, c-format +msgid "%pB: error: attribute section length too small: %" +msgstr "%pB: грешка: величина одељка оÑобине је премала: %" + +#: elf-attrs.c:618 +#, c-format +msgid "error: %pB: object has vendor-specific contents that must be processed by the '%s' toolchain" +msgstr "грешка: %pB: објекат има Ñадржај продавцу Ñпецифичан који мора бити обрађен алатним ланцем „%s“" + +#: elf-attrs.c:628 +#, c-format +msgid "error: %pB: object tag '%d, %s' is incompatible with tag '%d, %s'" +msgstr "грешка: %pB: ознака објекта „%d, %s“ није ÑаглаÑна Ñа ознаком „%d, %s“" + +#: elf-eh-frame.c:944 +#, c-format +msgid "discarding zero address range FDE in %pB(%pA).\n" +msgstr "одбацујем нулти опÑег адреÑе „FDE“ у „%pB(%pA)“.\n" + +#: elf-eh-frame.c:1049 +#, c-format +msgid "error in %pB(%pA); no .eh_frame_hdr table will be created" +msgstr "грешка у „%pB(%pA)“; неће бити направљена ниједна „.eh_frame_hdr“ табела" + +#: elf-eh-frame.c:1539 +#, c-format +msgid "FDE encoding in %pB(%pA) prevents .eh_frame_hdr table being created" +msgstr "„FDE“ кодирање у „%pB(%pA)“ Ñпречава Ñтварање „.eh_frame_hdr“ табеле" + +#: elf-eh-frame.c:1546 +msgid "further warnings about FDE encoding preventing .eh_frame_hdr generation dropped" +msgstr "будућа упозорења о „FDE“ кодирању Ñпречава одбацивање „.eh_frame_hdr“ генерације" + +#: elf-eh-frame.c:1866 +#, c-format +msgid "%pB: %pA not in order" +msgstr "%pB: „%pA“ није у поретку" + +#: elf-eh-frame.c:1880 +#, c-format +msgid "%pB: %pA invalid input section size" +msgstr "%pB: „%pA“ неиÑправна величина одељак улаза" + +#: elf-eh-frame.c:1888 +#, c-format +msgid "%pB: %pA points past end of text section" +msgstr "%pB: „%pA“ тачака прелази крај одељка текÑта" + +#: elf-eh-frame.c:2141 +msgid "DW_EH_PE_datarel unspecified for this architecture" +msgstr "„DW_EH_PE_datarel“ није одређено за ову архитектуру" + +#: elf-eh-frame.c:2312 +#, c-format +msgid "invalid output section for .eh_frame_entry: %pA" +msgstr "неиÑправан одељак излаза за „.eh_frame_entry“: %pA" + +#: elf-eh-frame.c:2335 +#, c-format +msgid "invalid contents in %pA section" +msgstr "неиÑправан Ñадржај у одељку „%pA“" + +#: elf-eh-frame.c:2491 +msgid ".eh_frame_hdr entry overflow" +msgstr "прекорачење „.eh_frame_hdr“ уноÑа" + +#: elf-eh-frame.c:2493 +msgid ".eh_frame_hdr refers to overlapping FDEs" +msgstr "„.eh_frame_hdr“ упућује на преклапајуће „FDE“-ове" + +#: elf-ifunc.c:144 +#, c-format +msgid "%F%P: dynamic STT_GNU_IFUNC symbol `%s' with pointer equality in `%pB' can not be used when making an executable; recompile with -fPIE and relink with -pie\n" +msgstr "%F%P: динамички „STT_GNU_IFUNC“ Ñимбол „%s“ Ñа једнакошћу показивача у „%pB“ Ñе не може кориÑтити приликом Ñтварања извршне; преведите поново Ñа „-fPIE“ и повежите поново Ñа „-pie“\n" + +#: elf-m10200.c:434 elf-m10300.c:2145 elf32-avr.c:1508 elf32-bfin.c:3126 +#: elf32-cr16.c:1464 elf32-cris.c:2033 elf32-crx.c:920 elf32-d10v.c:510 +#: elf32-epiphany.c:562 elf32-fr30.c:594 elf32-frv.c:4048 elf32-ft32.c:494 +#: elf32-h8300.c:523 elf32-ip2k.c:1477 elf32-iq2000.c:691 elf32-lm32.c:1069 +#: elf32-m32c.c:624 elf32-m32r.c:2860 elf32-m68hc1x.c:1272 elf32-mep.c:526 +#: elf32-metag.c:1986 elf32-microblaze.c:1627 elf32-moxie.c:288 elf32-mt.c:402 +#: elf32-nds32.c:6048 elf32-or1k.c:1817 elf32-score.c:2734 elf32-score7.c:2543 +#: elf32-spu.c:5083 elf32-tilepro.c:3380 elf32-v850.c:2290 elf32-visium.c:680 +#: elf32-xstormy16.c:929 elf64-bpf.c:512 elf64-mmix.c:1541 elfxx-tilegx.c:3744 msgid "internal error: out of range error" msgstr "унутрашња грешка: изван опÑега" -#: elf-m10200.c:434 elf-m10300.c:2168 elf32-avr.c:1260 elf32-bfin.c:3224 -#: elf32-cr16.c:1488 elf32-cr16c.c:784 elf32-cris.c:2020 elf32-crx.c:926 -#: elf32-d10v.c:517 elf32-fr30.c:593 elf32-frv.c:4043 elf32-h8300.c:529 -#: elf32-i860.c:1216 elf32-iq2000.c:692 elf32-lm32.c:1164 elf32-m32c.c:557 -#: elf32-m32r.c:3070 elf32-m68hc1x.c:1287 elf32-mep.c:539 elf32-metag.c:1996 -#: elf32-microblaze.c:1564 elf32-moxie.c:286 elf32-msp430.c:1321 -#: elf32-nds32.c:4914 elf32-openrisc.c:408 elf32-score.c:2733 -#: elf32-score7.c:2541 elf32-spu.c:5045 elf32-tilepro.c:3670 elf32-v850.c:2285 -#: elf32-xstormy16.c:940 elf64-mmix.c:1542 elfxx-mips.c:9995 -#: elfxx-tilegx.c:4055 +#: elf-m10200.c:438 elf-m10300.c:2149 elf32-avr.c:1512 elf32-bfin.c:3130 +#: elf32-cr16.c:1468 elf32-cris.c:2037 elf32-crx.c:924 elf32-d10v.c:514 +#: elf32-fr30.c:598 elf32-frv.c:4052 elf32-ft32.c:498 elf32-h8300.c:527 +#: elf32-iq2000.c:695 elf32-lm32.c:1073 elf32-m32c.c:628 elf32-m32r.c:2864 +#: elf32-m68hc1x.c:1276 elf32-mep.c:530 elf32-metag.c:1990 +#: elf32-microblaze.c:1631 elf32-moxie.c:292 elf32-msp430.c:1371 +#: elf32-nds32.c:6052 elf32-or1k.c:1821 elf32-score.c:2738 elf32-score7.c:2547 +#: elf32-spu.c:5087 elf32-tilepro.c:3384 elf32-v850.c:2294 elf32-visium.c:684 +#: elf32-xstormy16.c:933 elf64-mmix.c:1545 elfxx-mips.c:10576 +#: elfxx-tilegx.c:3748 msgid "internal error: unsupported relocation error" msgstr "унутрашња грешка: премештање није подржано" -#: elf-m10200.c:438 elf32-cr16.c:1492 elf32-cr16c.c:788 elf32-crx.c:930 -#: elf32-d10v.c:521 elf32-h8300.c:533 elf32-lm32.c:1168 elf32-m32r.c:3074 -#: elf32-m68hc1x.c:1291 elf32-microblaze.c:1568 elf32-nds32.c:4918 -#: elf32-score.c:2737 elf32-score7.c:2545 elf32-spu.c:5049 +#: elf-m10200.c:442 elf32-cr16.c:1472 elf32-crx.c:928 elf32-d10v.c:518 +#: elf32-h8300.c:531 elf32-lm32.c:1077 elf32-m32r.c:2868 elf32-m68hc1x.c:1280 +#: elf32-microblaze.c:1635 elf32-nds32.c:6056 elf32-score.c:2742 +#: elf32-score7.c:2551 elf32-spu.c:5091 msgid "internal error: dangerous error" msgstr "унутрашња грешка: грешка опаÑноÑти" -#: elf-m10200.c:442 elf-m10300.c:2184 elf32-avr.c:1268 elf32-bfin.c:3232 -#: elf32-cr16.c:1496 elf32-cr16c.c:792 elf32-cris.c:2028 elf32-crx.c:934 -#: elf32-d10v.c:525 elf32-epiphany.c:572 elf32-fr30.c:601 elf32-frv.c:4051 -#: elf32-h8300.c:537 elf32-i860.c:1224 elf32-ip2k.c:1483 elf32-iq2000.c:700 -#: elf32-lm32.c:1172 elf32-m32c.c:565 elf32-m32r.c:3078 elf32-m68hc1x.c:1295 -#: elf32-mep.c:547 elf32-metag.c:2004 elf32-microblaze.c:1572 -#: elf32-moxie.c:294 elf32-msp430.c:1329 elf32-mt.c:403 elf32-nds32.c:4922 -#: elf32-openrisc.c:416 elf32-score.c:2746 elf32-score7.c:2549 -#: elf32-spu.c:5053 elf32-tilepro.c:3678 elf32-v850.c:2305 -#: elf32-xstormy16.c:948 elf64-mmix.c:1550 elfxx-tilegx.c:4063 +#: elf-m10200.c:446 elf-m10300.c:2166 elf32-avr.c:1520 elf32-bfin.c:3138 +#: elf32-cr16.c:1476 elf32-cris.c:2045 elf32-crx.c:932 elf32-d10v.c:522 +#: elf32-epiphany.c:577 elf32-fr30.c:606 elf32-frv.c:4060 elf32-ft32.c:506 +#: elf32-h8300.c:535 elf32-ip2k.c:1492 elf32-iq2000.c:703 elf32-lm32.c:1081 +#: elf32-m32c.c:636 elf32-m32r.c:2872 elf32-m68hc1x.c:1284 elf32-mep.c:538 +#: elf32-metag.c:1998 elf32-microblaze.c:1639 elf32-moxie.c:300 +#: elf32-msp430.c:1379 elf32-mt.c:410 elf32-nds32.c:6060 elf32-or1k.c:1829 +#: elf32-score.c:2751 elf32-score7.c:2555 elf32-spu.c:5095 +#: elf32-tilepro.c:3392 elf32-v850.c:2314 elf32-visium.c:692 +#: elf32-xstormy16.c:941 elf64-bpf.c:525 elf64-mmix.c:1553 elfxx-tilegx.c:3756 msgid "internal error: unknown error" msgstr "унутрашња грешка: непозната грешка" -#: elf-m10300.c:1021 +#: elf-m10300.c:1029 +#, c-format +msgid "%pB: unsupported transition from %s to %s" +msgstr "%pB: неподржан прелазак Ñа „%s“ на „%s“" + +#: elf-m10300.c:1196 #, c-format -msgid "%s: Unsupported transition from %s to %s" -msgstr "%s: Прелазак Ñа „%s“ на „%s“ није подржан" +msgid "%pB: %s' accessed both as normal and thread local symbol" +msgstr "%pB: „%s“ Ñе приÑтупило и као нормалном и као Ñимболу локалне нити" -#: elf-m10300.c:1213 -msgid "%B: %s' accessed both as normal and thread local symbol" -msgstr "%B: „%s“ Ñе приÑтупило и као нормалном и као Ñимболу локалне нити" - -#: elf-m10300.c:2108 elf32-arm.c:10632 elf32-i386.c:4363 elf32-m32r.c:2558 -#: elf32-m68k.c:4120 elf32-s390.c:3303 elf32-sh.c:4109 elf32-tilepro.c:3569 -#: elf32-xtensa.c:3063 elf64-s390.c:3229 elf64-sh64.c:1640 elf64-x86-64.c:4463 -#: elfxx-sparc.c:3904 elfxx-tilegx.c:3974 -#: /src/binutils-gdb/bfd/elfnn-aarch64.c:4450 -msgid "%B(%A+0x%lx): unresolvable %s relocation against symbol `%s'" -msgstr "%B(%A+0x%lx): нерешиво „%s“ премештање наÑпрам Ñимбола „%s“" +#: elf-m10300.c:2092 elf32-arm.c:13400 elf32-i386.c:3403 elf32-m32r.c:2354 +#: elf32-m68k.c:3931 elf32-s390.c:3082 elf32-sh.c:3677 elf32-tilepro.c:3283 +#: elf32-xtensa.c:3023 elf64-s390.c:3031 elf64-x86-64.c:4062 +#: elfxx-sparc.c:3795 elfxx-tilegx.c:3667 elfnn-aarch64.c:5505 +#: elfnn-aarch64.c:7102 +#, c-format +msgid "%pB(%pA+%#): unresolvable %s relocation against symbol `%s'" +msgstr "%pB(%pA+%#): нерешиво „%s“ премештање наÑпрам Ñимбола „%s“" -#: elf-m10300.c:2173 +#: elf-m10300.c:2154 msgid "error: inappropriate relocation type for shared library (did you forget -fpic?)" msgstr "грешка: врÑта премештања није одговарајућа за дељену библиотеку (да ли Ñте заборавили „-fpic“?)" -#: elf-m10300.c:2176 -msgid "%B: taking the address of protected function '%s' cannot be done when making a shared library" -msgstr "%B: узимање адреÑе заштићене функције „%s“ не може бити обављено приликом Ñтварања дељене библиотеке" +#: elf-m10300.c:2158 +#, c-format +msgid "%pB: taking the address of protected function '%s' cannot be done when making a shared library" +msgstr "%pB: узимање адреÑе заштићене функције „%s“ не може бити обављено приликом Ñтварања дељене библиотеке" -#: elf-m10300.c:2179 +#: elf-m10300.c:2161 msgid "internal error: suspicious relocation type used in shared library" msgstr "унутрашња грешка: Ñумњива врÑта премештања је коришћена у дељеној библиотеци" -#: elf.c:343 -msgid "%B: invalid string offset %u >= %lu for section `%s'" -msgstr "%B: неиÑправан померај ниÑке „%u >= %lu“ за одељак „%s“" - -#: elf.c:455 -msgid "%B symbol number %lu references nonexistent SHT_SYMTAB_SHNDX section" -msgstr "„%B“ Ñимбол број %lu упућује на непоÑтојећи одељак „SHT_SYMTAB_SHNDX“" - -#: elf.c:611 -msgid "%B: Corrupt size field in group section header: 0x%lx" -msgstr "%B: Оштећено је поље величине у заглављу одељка групе: 0x%lx" - -#: elf.c:647 -msgid "%B: invalid SHT_GROUP entry" -msgstr "%B: неиÑправан ÑƒÐ½Ð¾Ñ â€žSHT_GROUP“" - -#: elf.c:717 -msgid "%B: no group info for section %A" -msgstr "%B: нема података групе за одељак „%A“" - -#: elf.c:746 elf.c:3144 elflink.c:10290 -msgid "%B: warning: sh_link not set for section `%A'" -msgstr "%B: упозорење: „sh_link“ није поÑтављено за одељак „%A“" - -#: elf.c:765 -msgid "%B: sh_link [%d] in section `%A' is incorrect" -msgstr "%B: „sh_link [%d]“ у одељку „%A“ није иÑправно" - -#: elf.c:800 -msgid "%B: unknown [%d] section `%s' in group [%s]" -msgstr "%B: [%d] непознат одељак „%s“ у групи [%s]" +#: elf-m10300.c:2647 elf32-avr.c:2489 elf32-frv.c:5620 elf64-ia64-vms.c:364 +#: elfxx-sparc.c:2683 reloc.c:8244 reloc16.c:155 elfnn-ia64.c:364 +msgid "%P%F: --relax and -r may not be used together\n" +msgstr "%P%F: „--relax“ и „-r“ Ñе не могу кориÑтити заједно\n" + +#: elf-properties.c:65 +#, c-format +msgid "%pB: out of memory in _bfd_elf_get_property" +msgstr "%pB: нема више меморије у „_bfd_elf_get_property“" + +#: elf-properties.c:91 +#, c-format +msgid "warning: %pB: corrupt GNU_PROPERTY_TYPE (%ld) size: %#lx" +msgstr "упозорење: %pB: оштећено „GNU_PROPERTY_TYPE“ (%ld) величине: %#lx" + +#: elf-properties.c:112 +#, c-format +msgid "warning: %pB: corrupt GNU_PROPERTY_TYPE (%ld) type (0x%x) datasz: 0x%x" +msgstr "упозорење: %pB: оштећено „GNU_PROPERTY_TYPE“ (%ld) врÑта (0x%x) величина података: 0x%x" + +#: elf-properties.c:151 +#, c-format +msgid "warning: %pB: corrupt stack size: 0x%x" +msgstr "упозорење: %pB: оштећена величина Ñпремника: 0x%x" + +#: elf-properties.c:169 +#, c-format +msgid "warning: %pB: corrupt no copy on protected size: 0x%x" +msgstr "упозорење: %pB: оштећење не умножава на заштићеној величине: 0x%x" + +#: elf-properties.c:186 +#, c-format +msgid "warning: %pB: unsupported GNU_PROPERTY_TYPE (%ld) type: 0x%x" +msgstr "упозорење: %pB: неподржано „GNU_PROPERTY_TYPE“ (%ld) врÑта: 0x%x" + +#: elf-properties.c:301 +msgid "Removed property %W to merge %pB (0x%v) and %pB (0x%v)\n" +msgstr "Уклоњено ÑвојÑтво „%W“ за Ñтапање „%pB“ (0x%v) и „%pB“ (0x%v)\n" + +#: elf-properties.c:307 +msgid "Removed property %W to merge %pB (0x%v) and %pB (not found)\n" +msgstr "Уклоњено ÑвојÑтво „%W“ за Ñтапање „%pB“ (0x%v) и „%pB“ (ниÑам нашао)\n" + +#: elf-properties.c:316 elf-properties.c:394 +msgid "Removed property %W to merge %pB and %pB\n" +msgstr "Уклоњено ÑвојÑтво „%W“ за Ñтапање „%pB“ и „%pB“\n" + +#: elf-properties.c:320 +msgid "Removed property %W to merge %pB and %pB (not found)\n" +msgstr "Уклоњено ÑвојÑтво „%W“ за Ñтапање „%pB“ и „%pB“ (ниÑам нашао)\n" + +#: elf-properties.c:337 +msgid "Updated property %W (0x%v) to merge %pB (0x%v) and %pB (0x%v)\n" +msgstr "ОÑвежено ÑвојÑтво „%W“ (0x%v) за Ñтапање „%pB“ (0x%v) и „%pB“ (0x%v)\n" + +#: elf-properties.c:346 +msgid "Updated property %W (%v) to merge %pB (0x%v) and %pB (not found)\n" +msgstr "ОÑвежено ÑвојÑтво „%W“ (%v) за Ñтапање „%pB“ (0x%v) и „%pB“ (ниÑам нашао)\n" + +#: elf-properties.c:388 +msgid "Removed property %W to merge %pB (not found) and %pB (0x%v)\n" +msgstr "Уклоњено ÑвојÑтво „%W“ за Ñтапање „%pB“ (ниÑам нашао) и „%pB“ (0x%v)\n" + +#. Merge .note.gnu.property sections. +#: elf-properties.c:550 elf-properties.c:552 +msgid "\n" +msgstr "\n" + +#: elf-properties.c:551 +msgid "Merging program properties\n" +msgstr "Стапам ÑвојÑтва програма\n" + +#. PR 17512: file: f057ec89. +#: elf.c:336 +#, c-format +msgid "%pB: attempt to load strings from a non-string section (number %d)" +msgstr "%pB: покушавам да учитам ниÑке из одељка не-ниÑке (број %d)" + +#: elf.c:361 +#, c-format +msgid "%pB: invalid string offset %u >= % for section `%s'" +msgstr "%pB: неиÑправан померај ниÑке „%u >= %“ за одељак „%s“" + +#: elf.c:513 elfnn-aarch64.c:8096 +#, c-format +msgid "%pB symbol number %lu references nonexistent SHT_SYMTAB_SHNDX section" +msgstr "„%pB“ Ñимбол број %lu упућује на непоÑтојећи одељак „SHT_SYMTAB_SHNDX“" + +#: elf.c:675 +#, c-format +msgid "%pB: invalid size field in group section header: %#" +msgstr "%pB: неиÑправно поље величине у заглављу одељка групе: %#" + +#: elf.c:720 +#, c-format +msgid "%pB: invalid entry in SHT_GROUP section [%u]" +msgstr "%pB: неиÑправан ÑƒÐ½Ð¾Ñ Ñƒ „SHT_GROUP“ одељку [%u]" + +#: elf.c:739 +#, c-format +msgid "%pB: no valid group sections found" +msgstr "%pB: ниÑам нашао иÑправне одељке групе" + +#. See PR 21957 for a reproducer. +#: elf.c:768 +#, c-format +msgid "%pB: group section '%pA' has no contents" +msgstr "%pB: одељак групе „%pA“ нема никаквог Ñадржаја" + +#: elf.c:829 +#, c-format +msgid "%pB: no group info for section '%pA'" +msgstr "%pB: нема података групе за одељак „%pA“" + +#: elf.c:859 elf.c:3955 +#, c-format +msgid "%pB: warning: sh_link not set for section `%pA'" +msgstr "%pB: упозорење: „sh_link“ није поÑтављено за одељак „%pA“" + +#: elf.c:879 +#, c-format +msgid "%pB: sh_link [%d] in section `%pA' is incorrect" +msgstr "%pB: „sh_link [%d]“ у одељку „%pA“ није иÑправно" + +#: elf.c:892 +#, c-format +msgid "%pB: SHT_GROUP section [index %d] has no SHF_GROUP sections" +msgstr "%pB: „SHT_GROUP“ одељак [Ð¸Ð½Ð´ÐµÐºÑ %d] нема „SHF_GROUP“ одељке" + +#: elf.c:913 +#, c-format +msgid "%pB: section group entry number %u is corrupt" +msgstr "%pB: број одељка уноÑа групе %u је оштећен" + +#: elf.c:936 +#, c-format +msgid "%pB: unknown type [%#x] section `%s' in group [%pA]" +msgstr "%pB: непозната врÑта [%#x] одељак „%s“ у групи [%pA]" + +#: elf.c:1438 +#, c-format +msgid "%pB: invalid sh_link field (%d) in section number %d" +msgstr "%pB: неиÑправно „sh_link“ поље (%d) у броју одељка %d" + +#: elf.c:1454 +#, c-format +msgid "%pB: failed to find link section for section %d" +msgstr "%pB: ниÑам уÑпео да нађем одељак везе за одељак %d" + +#: elf.c:1481 +#, c-format +msgid "%pB: failed to find info section for section %d" +msgstr "%pB: ниÑам уÑпео да нађем одељак података за одељак %d" -#: elf.c:1174 +#: elf.c:1653 #, c-format msgid "" "\n" @@ -800,7 +1081,7 @@ "\n" "Заглавље програма:\n" -#: elf.c:1216 +#: elf.c:1695 #, c-format msgid "" "\n" @@ -809,7 +1090,7 @@ "\n" "Динамички одељак:\n" -#: elf.c:1352 +#: elf.c:1836 #, c-format msgid "" "\n" @@ -818,7 +1099,7 @@ "\n" "Дефиниција издања:\n" -#: elf.c:1377 +#: elf.c:1861 #, c-format msgid "" "\n" @@ -827,3275 +1108,4816 @@ "\n" "Упута издања:\n" -#: elf.c:1382 +#: elf.c:1866 #, c-format msgid " required from %s:\n" msgstr " захтевано из „%s“:\n" -#: elf.c:1807 -msgid "%B: invalid link %lu for reloc section %s (index %u)" -msgstr "%B: неиÑправна веза „%lu“ за одељак премештања „%s“ (Ð¸Ð½Ð´ÐµÐºÑ â€ž%u“)" +#: elf.c:2082 +#, c-format +msgid "%pB: warning: loop in section dependencies detected" +msgstr "%pB: упозорење: петља у завиÑноÑтима одељка је откривена" + +#: elf.c:2190 +#, c-format +msgid "%pB: warning: multiple symbol tables detected - ignoring the table in section %u" +msgstr "%pB: упозорење: откривено је више табела Ñимбола – занемарујем табелу у одељку %u" + +#: elf.c:2274 +#, c-format +msgid "%pB: warning: multiple dynamic symbol tables detected - ignoring the table in section %u" +msgstr "%pB: упозорење: откривено је више динамичких табела Ñимбола – занемарујем табелу у одељку %u" + +#: elf.c:2387 +#, c-format +msgid "%pB: invalid link %u for reloc section %s (index %u)" +msgstr "%pB: неиÑправна веза „%u“ за одељак премештања „%s“ (Ð¸Ð½Ð´ÐµÐºÑ â€ž%u“)" -#: elf.c:1977 -msgid "%B: don't know how to handle allocated, application specific section `%s' [0x%8x]" -msgstr "%B: не знам како да обрадим додељен, програму Ñпецифичан одељак „%s“ [0x%8x]" +#: elf.c:2478 +#, c-format +msgid "%pB: warning: secondary relocation section '%s' for section %pA found - ignoring" +msgstr "%pB: упозорење: нађох Ñекундарни одељак премештања „%s“ за одељак „%pA“ – занемарујем" -#: elf.c:1989 -msgid "%B: don't know how to handle processor specific section `%s' [0x%8x]" -msgstr "%B: не знам како да обрадим процеÑору Ñпецифичан одељак „%s“ [0x%8x]" +#: elf.c:2562 elf.c:2577 elf.c:2588 elf.c:2601 +#, c-format +msgid "%pB: unknown type [%#x] section `%s'" +msgstr "%pB: непозната врÑта [%#x] одељак „%s“" -#: elf.c:2000 -msgid "%B: don't know how to handle OS specific section `%s' [0x%8x]" -msgstr "%B: не знам како да обрадим ÑиÑтему Ñпецифичан одељак „%s“ [0x%8x]" +#: elf.c:3308 +#, c-format +msgid "%pB: error: alignment power %d of section `%pA' is too big" +msgstr "%pB: грешка: Ñнага поравнања %d одељка „%pA“ је превелика" -#: elf.c:2010 -msgid "%B: don't know how to handle section `%s' [0x%8x]" -msgstr "%B: не знам како да обрадим одељак „%s“ [0x%8x]" +#: elf.c:3341 +#, c-format +msgid "warning: section `%pA' type changed to PROGBITS" +msgstr "упозорење: врÑта „%pA“ одељка је измењена у „PROGBITS“" -#: elf.c:2648 +#: elf.c:3824 #, c-format -msgid "warning: section `%A' type changed to PROGBITS" -msgstr "упозорење: врÑта „%A“ одељка је измењена у „PROGBITS“" +msgid "%pB: too many sections: %u" +msgstr "%pB: превише одељака: %u" -#: elf.c:3015 -msgid "%B: too many sections: %u" -msgstr "%B: превише одељака: %u" +#: elf.c:3909 +#, c-format +msgid "%pB: sh_link of section `%pA' points to discarded section `%pA' of `%pB'" +msgstr "%pB: „sh_link“ одељка „%pA“ указује на одбачени одељак „%pA“ од „%pB“" -#: elf.c:3101 -msgid "%B: sh_link of section `%A' points to discarded section `%A' of `%B'" -msgstr "%B: „sh_link“ одељка „%A“ указује на одбачени одељак „%A“ од „%B“" +#: elf.c:3934 +#, c-format +msgid "%pB: sh_link of section `%pA' points to removed section `%pA' of `%pB'" +msgstr "%pB: „sh_link“ одељка „%pA“ указује на уклоњени одељак „%pA“ од „%pB“" -#: elf.c:3124 -msgid "%B: sh_link of section `%A' points to removed section `%A' of `%B'" -msgstr "%B: „sh_link“ одељка „%A“ указује на уклоњени одељак „%A“ од „%B“" +#: elf.c:4495 +#, c-format +msgid "%pB: GNU_MBIND section `%pA' has invalid sh_info field: %d" +msgstr "%pB: „GNU_MBIND“ одељак „%pA“ има неиÑправно „sh_info“ поље: %d" -#: elf.c:4126 -msgid "%B: TLS sections are not adjacent:" -msgstr "%B: ТЛС одељци ниÑу ÑуÑедни:" +#: elf.c:5086 +#, c-format +msgid "%pB: TLS sections are not adjacent:" +msgstr "%pB: ТЛС одељци ниÑу ÑуÑедни:" -#: elf.c:4133 +#: elf.c:5093 #, c-format -msgid "\t TLS: %A" -msgstr "\t ТЛС: %A" +msgid "\t TLS: %pA" +msgstr "\t ТЛС: %pA" -#: elf.c:4137 +#: elf.c:5097 #, c-format -msgid "\tnon-TLS: %A" -msgstr "\tне-ТЛС: %A" +msgid "\tnon-TLS: %pA" +msgstr "\tне-ТЛС: %pA" -#: elf.c:4596 -msgid "%B: The first section in the PT_DYNAMIC segment is not the .dynamic section" -msgstr "%B: Први одељак у подеоку „PT_DYNAMIC“ није „.dynamic“ одељак" +#: elf.c:5687 +#, c-format +msgid "%pB: The first section in the PT_DYNAMIC segment is not the .dynamic section" +msgstr "%pB: Први одељак у подеоку „PT_DYNAMIC“ није „.dynamic“ одељак" -#: elf.c:4621 -msgid "%B: Not enough room for program headers, try linking with -N" -msgstr "%B: Ðема довољно меÑта за заглавље програм, пробајте да повежете Ñа „-N“" +#: elf.c:5713 +#, c-format +msgid "%pB: not enough room for program headers, try linking with -N" +msgstr "%pB: нема довољно меÑта за заглавље програм, пробајте да повежете Ñа „-N“" -#: elf.c:4707 -msgid "%B: section %A lma %#lx adjusted to %#lx" -msgstr "%B: одељак „%A lma %#lx“ је дотеран на %#lx" +#: elf.c:5830 +#, c-format +msgid "%pB: section %pA lma %# adjusted to %#" +msgstr "%pB: одељак „%pA lma %#“ је дотеран на %#" -#: elf.c:4843 -msgid "%B: section `%A' can't be allocated in segment %d" -msgstr "%B: одељак „%A“ Ñе не може доделити у подеоку %d" +#. The fix for this error is usually to edit the linker script being +#. used and set up the program headers manually. Either that or +#. leave room for the headers at the start of the SECTIONS. +#: elf.c:5967 +#, c-format +msgid "%pB: error: PHDR segment not covered by LOAD segment" +msgstr "%pB: грешка: „PHDR“ подеок није покривен „LOAD“ подеоком" -#: elf.c:4892 -msgid "%B: warning: allocated section `%s' not in segment" -msgstr "%B: упозорење: додељени одељак „%s“ није у подеоку" +#: elf.c:6007 +#, c-format +msgid "%pB: section `%pA' can't be allocated in segment %d" +msgstr "%pB: одељак „%pA“ Ñе не може доделити у подеоку %d" -#: elf.c:5473 -msgid "%B: symbol `%s' required but not present" -msgstr "%B: Ñимбол „%s“ је потребан али није приÑутан" +#: elf.c:6139 +#, c-format +msgid "%pB: warning: allocated section `%s' not in segment" +msgstr "%pB: упозорење: додељени одељак „%s“ није у подеоку" -#: elf.c:5811 -msgid "%B: warning: Empty loadable segment detected, is this intentional ?\n" -msgstr "%B: упозорење: Откривен је празан подеок који Ñе може учитати, да ли је то намеравано ?\n" +#: elf.c:6300 +#, c-format +msgid "%pB: error: non-load segment %d includes file header and/or program header" +msgstr "%pB: грешка: подеок не-учитавања %d укључује заглавље датотеке и/или заглавље програма" -#: elf.c:6867 +#: elf.c:6804 #, c-format -msgid "Unable to find equivalent output section for symbol '%s' from section '%s'" -msgstr "Ðе могу да нађем еквивалентан одељак излаза за Ñимбол „%s“ из одељка „%s“" +msgid "%pB: symbol `%s' required but not present" +msgstr "%pB: Ñимбол „%s“ је потребан али није приÑутан" -#: elf.c:7915 -msgid "%B: unsupported relocation type %s" -msgstr "%B: врÑта премештања %s није подржана" +#: elf.c:7147 +#, c-format +msgid "%pB: warning: empty loadable segment detected at vaddr=%#, is this intentional?" +msgstr "%pB: упозорење: празан подеок који Ñе може учитати откривен је на „vaddr=%#“, да ли је то намеравано?" -#: elf32-arm.c:3722 elf32-arm.c:7051 -msgid "" -"%B(%s): warning: interworking not enabled.\n" -" first occurrence: %B: Thumb call to ARM" -msgstr "" -"%B(%s): упозорење: међудејÑтво није укључено.\n" -" прво појављивање: %B: „Thumb“ позива на „ARM“" +#: elf.c:7773 +#, c-format +msgid "%pB: warning: segment alignment of %# is too large" +msgstr "%pB: упозорење: поравнање подеока за „%#“ је превелико" -#: elf32-arm.c:3769 -msgid "" -"%B(%s): warning: interworking not enabled.\n" -" first occurrence: %B: ARM call to Thumb" -msgstr "" -"%B(%s): упозорење: међудејÑтво није укључено.\n" -" прво појављивање: %B: „ARM“ позива на „Thumb“" +#: elf.c:8286 +#, c-format +msgid "%pB: Unable to handle section index %x in ELF symbol. Using ABS instead." +msgstr "%pB: Ðе могу да рукујем Ñа индекÑом одељка %x у ЕЛФ Ñимболу. КориÑтићу „ABS“." -#: elf32-arm.c:3988 elf32-arm.c:5433 -#: /src/binutils-gdb/bfd/elfnn-aarch64.c:2324 +#: elf.c:8316 #, c-format -msgid "%s: cannot create stub entry %s" -msgstr "%s: не могу да Ñтворим привидни ÑƒÐ½Ð¾Ñ â€ž%s“" +msgid "unable to find equivalent output section for symbol '%s' from section '%s'" +msgstr "не могу да нађем еквивалентан одељак излаза за Ñимбол „%s“ из одељка „%s“" -#: elf32-arm.c:5549 +#: elf.c:8703 #, c-format -msgid "unable to find THUMB glue '%s' for '%s'" -msgstr "не могу да пронађем „THUMB“ лепак „%s“ за „%s“" +msgid "%pB: .gnu.version_r invalid entry" +msgstr "%pB: „.gnu.version_r“ неиÑправан уноÑ" -#: elf32-arm.c:5585 +#: elf.c:8836 #, c-format -msgid "unable to find ARM glue '%s' for '%s'" -msgstr "не могу да пронађем „ARM“ лепак „%s“ за „%s“" +msgid "%pB: .gnu.version_d invalid entry" +msgstr "%pB: „.gnu.version_d“ неиÑправан уноÑ" -#: elf32-arm.c:6123 -msgid "%B: BE8 images only valid in big-endian mode." -msgstr "%B: „BE8“ Ñлике Ñу иÑправне Ñамо у режиму велике крајњоÑти." +#: elf.c:9293 +#, c-format +msgid "%pB:%pA: error: attempting to write into an unallocated compressed section" +msgstr "%pB:%pA: грешка: покушавам да пишем у недодељеном Ñажетом одељку" -#. Give a warning, but do as the user requests anyway. -#: elf32-arm.c:6353 -msgid "%B: warning: selected VFP11 erratum workaround is not necessary for target architecture" -msgstr "%B: упозорење: изабрано решење „VFP11“ грешака није потребно за циљну архитектуру" - -#: elf32-arm.c:6897 elf32-arm.c:6917 -msgid "%B: unable to find VFP11 veneer `%s'" -msgstr "%B: не могу да нађем „VFP11“ превлаку „%s“" - -#: elf32-arm.c:6966 -#, c-format -msgid "Invalid TARGET2 relocation type '%s'." -msgstr "ÐеиÑправна врÑта „TARGET2“ премештања „%s“." - -#. PR ld/16017: Do not generate ARM instructions for -#. the PLT if compiling for a thumb-only target. -#. -#. FIXME: We ought to be able to generate thumb PLT instructions... -#: elf32-arm.c:7696 -msgid "%B: Warning: thumb mode PLT generation not currently supported" -msgstr "%B: Упозорење: „PLT“ Ñтварање у „thumb“ режиму тренутно није подржано" - -#: elf32-arm.c:7909 -msgid "%B(%A+0x%lx):unexpected Thumb instruction '0x%x' in TLS trampoline" -msgstr "%B(%A+0x%lx): неочекивана „Thumb“ инÑтрукција „0x%x“ у „TLS“ трамбулини" - -#: elf32-arm.c:7948 -msgid "%B(%A+0x%lx):unexpected ARM instruction '0x%x' in TLS trampoline" -msgstr "%B(%A+0x%lx): неочекивана „ARM“ инÑтрукција „0x%x“ у „TLS“ трамбулини" - -#: elf32-arm.c:8412 -msgid "\\%B: Warning: Arm BLX instruction targets Arm function '%s'." -msgstr "\\%B: Упозорење: инÑтрукција „Arm BLX“ циља на Ðрм функцију „%s“." - -#: elf32-arm.c:8831 -msgid "%B: Warning: Thumb BLX instruction targets thumb function '%s'." -msgstr "%B: Упозорење: „Thumb BLX“ инÑтрукција циља на „thumb“ функцију „%s“." - -#: elf32-arm.c:9672 -msgid "%B(%A+0x%lx):unexpected Thumb instruction '0x%x' referenced by TLS_GOTDESC" -msgstr "%B(%A+0x%lx): неочекивана „Thumb“ инÑтрукција „0x%x“ на коју упућује „TLS_GOTDESC“" - -#: elf32-arm.c:9695 -msgid "%B(%A+0x%lx):unexpected ARM instruction '0x%x' referenced by TLS_GOTDESC" -msgstr "%B(%A+0x%lx): неочекивана „ARM“ инÑтрукција „0x%x“ на коју упућује „TLS_GOTDESC“" - -#: elf32-arm.c:9724 -msgid "%B(%A+0x%lx): R_ARM_TLS_LE32 relocation not permitted in shared object" -msgstr "%B(%A+0x%lx): „R_ARM_TLS_LE32“ премештање није допуштено у дељеним објектима" - -#: elf32-arm.c:9937 -msgid "%B(%A+0x%lx): Only ADD or SUB instructions are allowed for ALU group relocations" -msgstr "%B(%A+0x%lx): Дозвољене Ñу Ñамо „ADD“ или „SUB“ инÑтрукције за премештања „ALU“ групе" - -#: elf32-arm.c:9977 elf32-arm.c:10065 elf32-arm.c:10149 elf32-arm.c:10235 -msgid "%B(%A+0x%lx): Overflow whilst splitting 0x%lx for group relocation %s" -msgstr "%B(%A+0x%lx): Прекорачење за време дељења 0x%lx за премештање групе „%s“" - -#: elf32-arm.c:10474 elf32-sh.c:3994 elf64-sh64.c:1544 -msgid "%B(%A+0x%lx): %s relocation against SEC_MERGE section" -msgstr "%B(%A+0x%lx): „%s“ премештање наÑпрам „SEC_MERGE“ одељка" - -#: elf32-arm.c:10585 elf32-m68k.c:4155 elf32-xtensa.c:2799 -#: /src/binutils-gdb/bfd/elfnn-aarch64.c:4192 -msgid "%B(%A+0x%lx): %s used with TLS symbol %s" -msgstr "%B(%A+0x%lx): „%s“ је употребљено Ñа „TLS“ Ñимболом „%s“" - -#: elf32-arm.c:10586 elf32-m68k.c:4156 elf32-xtensa.c:2800 -#: /src/binutils-gdb/bfd/elfnn-aarch64.c:4193 -msgid "%B(%A+0x%lx): %s used with non-TLS symbol %s" -msgstr "%B(%A+0x%lx): „%s“ је употребљено Ñа „не-TLS“ Ñимболом „%s“" +#: elf.c:9302 +#, c-format +msgid "%pB:%pA: error: attempting to write over the end of the section" +msgstr "%pB:%pA: грешка: покушавам да пишем преко краја одељка" -#: elf32-arm.c:10666 elf32-tic6x.c:2736 -#: /src/binutils-gdb/bfd/elfnn-aarch64.c:4481 -msgid "out of range" -msgstr "изван опÑега" +#: elf.c:9313 +#, c-format +msgid "%pB:%pA: error: attempting to write section into an empty buffer" +msgstr "%pB:%pA: грешка: покушавам да упишем одељак у празну међумеморију" -#: elf32-arm.c:10670 elf32-nios2.c:3525 elf32-tic6x.c:2740 -#: /src/binutils-gdb/bfd/elfnn-aarch64.c:4485 -msgid "unsupported relocation" -msgstr "неподржано премештање" +#: elf.c:12430 +msgid "GNU_MBIND section is unsupported" +msgstr "„GNU_MBIND“ одељак је неподржан" -#: elf32-arm.c:10678 elf32-nios2.c:3535 elf32-tic6x.c:2748 -#: /src/binutils-gdb/bfd/elfnn-aarch64.c:4493 -msgid "unknown error" -msgstr "непозната грешка" +#: elf.c:12432 +msgid "symbol type STT_GNU_IFUNC is unsupported" +msgstr "врÑта Ñимбола „STT_GNU_IFUNC“ је неподржано" -#: elf32-arm.c:11153 -msgid "Warning: Clearing the interworking flag of %B because non-interworking code in %B has been linked with it" -msgstr "Упозорење: ЧиÑтим заÑтавицу међудејÑтва за „%B“ зато што је немеђудејÑтвени код у „%B“ повезан Ñа њим" - -#: elf32-arm.c:11240 -msgid "%B: Unknown mandatory EABI object attribute %d" -msgstr "%B: Обавезан „%d“ атрибут „EABI“ објекта није познат" - -#: elf32-arm.c:11248 -msgid "Warning: %B: Unknown EABI object attribute %d" -msgstr "Упозорење: %B: „%d“ атрибут „EABI“ објекта није познат" - -#: elf32-arm.c:11449 -msgid "error: %B: Unknown CPU architecture" -msgstr "грешка: %B: Ðепозната архитектура процеÑора" - -#: elf32-arm.c:11487 -msgid "error: %B: Conflicting CPU architectures %d/%d" -msgstr "грешка: %B: Ðрхитектуре процеÑора %d/%d Ñу у Ñукобу" - -#: elf32-arm.c:11576 -msgid "Error: %B has both the current and legacy Tag_MPextension_use attributes" -msgstr "грешка: „%B“ поÑедује и тренутни и Ñтари „Tag_MPextension_use“ атрибут" - -#: elf32-arm.c:11601 -msgid "error: %B uses VFP register arguments, %B does not" -msgstr "грешка: „%B“ кориÑти аргументе „VFP“ региÑтра, а „%B“ не" - -#: elf32-arm.c:11747 -msgid "error: %B: unable to merge virtualization attributes with %B" -msgstr "грешка: %B: не могу да Ñпојим атрибуте виртуелизације Ñа „%B“" - -#: elf32-arm.c:11773 -msgid "error: %B: Conflicting architecture profiles %c/%c" -msgstr "грешка: %B: У Ñукобу Ñу профили архитектуре „%c/%c“" - -#: elf32-arm.c:11877 -msgid "Warning: %B: Conflicting platform configuration" -msgstr "Упозорење: %B: Подешавање платформе је у Ñукобу" - -#: elf32-arm.c:11886 -msgid "error: %B: Conflicting use of R9" -msgstr "грешка: %B: У Ñикобу је коришћење „R9“" - -#: elf32-arm.c:11898 -msgid "error: %B: SB relative addressing conflicts with use of R9" -msgstr "грешка: %B: Релативно „SB“ адреÑирање је у Ñукобу Ñа коришћењем „R9“" - -#: elf32-arm.c:11911 -msgid "warning: %B uses %u-byte wchar_t yet the output is to use %u-byte wchar_t; use of wchar_t values across objects may fail" -msgstr "упозорење: „%B“ кориÑти %u-бајтни „wchar_t“ онда ће излаз да кориÑти %u-бајтни „wchar_t“. Коришћење „wchar_t“ вредноÑти кроз објекте можда неће уÑпети" - -#: elf32-arm.c:11942 -msgid "warning: %B uses %s enums yet the output is to use %s enums; use of enum values across objects may fail" -msgstr "упозорење: „%B“ кориÑти %s набрајања онда ће излаз да кориÑти %s набрајања. Коришћење вредноÑти набрајања кроз објекте можда неће уÑпети" - -#: elf32-arm.c:11954 -msgid "error: %B uses iWMMXt register arguments, %B does not" -msgstr "грешка: „%B“ кориÑти аргументе „iWMMXt“ региÑтра, а „%B“ не" - -#: elf32-arm.c:11971 -msgid "error: fp16 format mismatch between %B and %B" -msgstr "грешка: „fp16“ Ð·Ð°Ð¿Ð¸Ñ Ð½Ð¸Ñ˜Ðµ иÑти за „%B“ и „%B“" - -#: elf32-arm.c:12007 -msgid "%B has has both the current and legacy Tag_MPextension_use attributes" -msgstr "„%B“ поÑедује и тренутни и Ñтари „Tag_MPextension_use“ атрибут" +#: elf.c:12434 +msgid "symbol binding STB_GNU_UNIQUE is unsupported" +msgstr "Ñвеза Ñимбола „STB_GNU_UNIQUE“ је неподржана" -#. Ignore init flag - it may not be set, despite the flags field -#. containing valid data. -#. Ignore init flag - it may not be set, despite the flags field containing valid data. -#. Ignore init flag - it may not be set, despite the flags field -#. containing valid data. -#: elf32-arm.c:12095 elf32-bfin.c:4949 elf32-cris.c:4139 elf32-m68hc1x.c:1427 -#: elf32-m68k.c:1195 elf32-score.c:4004 elf32-score7.c:3808 elf32-vax.c:529 -#: elf32-xgate.c:674 elfxx-mips.c:14955 -#: /src/binutils-gdb/bfd/elfnn-aarch64.c:4645 +#: elf.c:12618 elf64-sparc.c:123 elfcode.h:1482 #, c-format -msgid "private flags = %lx:" -msgstr "приватне заÑтавице = %lx:" +msgid "%pB(%pA): relocation %d has invalid symbol index %ld" +msgstr "%pB(%pA): премештање „%d“ има неиÑправан Ð¸Ð½Ð´ÐµÐºÑ Ñимбола %ld" -#: elf32-arm.c:12104 +#: elf.c:12692 #, c-format -msgid " [interworking enabled]" -msgstr " [међудејÑтво је укључено]" +msgid "%pB(%pA): link section cannot be set because the output file does not have a symbol table" +msgstr "%pB(%pA): одељак везе Ñе не може подеÑити зато што излазна датотека нема табелу Ñимбола" -#: elf32-arm.c:12112 +#: elf.c:12704 #, c-format -msgid " [VFP float format]" -msgstr " [„VFP“ Ð·Ð°Ð¿Ð¸Ñ Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¾Ð³ броја]" +msgid "%pB(%pA): info section index is invalid" +msgstr "%pB(%pA): Ð¸Ð½Ð´ÐµÐºÑ Ð¾Ð´ÐµÑ™ÐºÐ° података није иÑправан" -#: elf32-arm.c:12114 +#: elf.c:12718 #, c-format -msgid " [Maverick float format]" -msgstr " [„Maverick“ Ð·Ð°Ð¿Ð¸Ñ Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¾Ð³ броја]" +msgid "%pB(%pA): info section index cannot be set because the section is not in the output" +msgstr "%pB(%pA): Ð¸Ð½Ð´ÐµÐºÑ Ð¾Ð´ÐµÑ™ÐºÐ° података Ñе не може подеÑити зато што одељак није у излазу" -#: elf32-arm.c:12116 +#: elf.c:12784 #, c-format -msgid " [FPA float format]" -msgstr " [„FPA“ Ð·Ð°Ð¿Ð¸Ñ Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¾Ð³ броја]" +msgid "%pB(%pA): error: secondary reloc section processed twice" +msgstr "%pB(%pA): грешка: Ñекундарни одељак премештаја је обрађен два пута" -#: elf32-arm.c:12125 +#: elf.c:12796 #, c-format -msgid " [new ABI]" -msgstr " [нови „ABI“]" +msgid "%pB(%pA): error: secondary reloc section is empty!" +msgstr "%pB(%pA): грешка: Ñекундарни одељак премештаја је празан!" -#: elf32-arm.c:12128 +#: elf.c:12819 #, c-format -msgid " [old ABI]" -msgstr " [Ñтари „ABI“]" +msgid "%pB(%pA): error: internal relocs missing for secondary reloc section" +msgstr "%pB(%pA): грешка: унутрашњи премештаји недоÑтају за Ñекундарни одељак премештаја" -#: elf32-arm.c:12131 +#: elf.c:12838 #, c-format -msgid " [software FP]" -msgstr " [логички покретни зарез]" +msgid "%pB(%pA): error: reloc table entry %u is empty" +msgstr "%pB(%pA): грешка: ÑƒÐ½Ð¾Ñ Ñ‚Ð°Ð±ÐµÐ»Ðµ премештаја %u је празан" -#: elf32-arm.c:12140 +#: elf.c:12863 #, c-format -msgid " [Version1 EABI]" -msgstr " [Издање1 „EABI“]" +msgid "%pB(%pA): error: secondary reloc %u references a missing symbol" +msgstr "%pB(%pA): грешка: Ñекундарни премштај %u упућује на недоÑтајући Ñимбол" -#: elf32-arm.c:12143 elf32-arm.c:12154 +#: elf.c:12880 #, c-format -msgid " [sorted symbol table]" -msgstr " [табела Ñређених Ñимбола]" +msgid "%pB(%pA): error: secondary reloc %u references a deleted symbol" +msgstr "%pB(%pA): грешка: Ñекундарни премштај %u упућује на обриÑан Ñимбол" -#: elf32-arm.c:12145 elf32-arm.c:12156 +#: elf.c:12893 #, c-format -msgid " [unsorted symbol table]" -msgstr " [табела неÑређених Ñимбола]" +msgid "%pB(%pA): error: secondary reloc %u is of an unknown type" +msgstr "%pB(%pA): грешка: Ñекундарни премештај %u је непознате врÑте" -#: elf32-arm.c:12151 +#: elf32-arc.c:455 elf32-frv.c:6611 elf32-iq2000.c:868 elf32-m32c.c:914 +#: elf32-mt.c:562 elf32-rl78.c:1260 elf32-rx.c:3205 elf32-visium.c:844 +#: elf64-ppc.c:5291 #, c-format -msgid " [Version2 EABI]" -msgstr " [Издање2 „EABI“]" +msgid "private flags = 0x%lx:" +msgstr "приватне заÑтавице = 0x%lx:" -#: elf32-arm.c:12159 +#: elf32-arc.c:642 #, c-format -msgid " [dynamic symbols use segment index]" -msgstr " [динамички Ñимболи кориÑте Ð¸Ð½Ð´ÐµÐºÑ Ñегмента]" +msgid "warning: %pB: conflicting platform configuration %s with %s" +msgstr "упозорење: %pB: подешавање платформе „%s“ је у Ñукобу Ñа „%s“" -#: elf32-arm.c:12162 +#: elf32-arc.c:661 #, c-format -msgid " [mapping symbols precede others]" -msgstr " [мапирање Ñимбола претходи другима]" +msgid "error: %pB: unable to merge CPU base attributes %s with %s" +msgstr "грешка: %pB: не могу да Ñпојим оÑновне атрибуте процеÑора „%s“ Ñа „%s“" -#: elf32-arm.c:12169 +#: elf32-arc.c:698 #, c-format -msgid " [Version3 EABI]" -msgstr " [Издање3 „EABI“]" +msgid "error: %pB: unable to merge ISA extension attributes %s" +msgstr "грешка: %pB: не могу да Ñпојим атрибуте „ISA“ проширења „%s“" -#: elf32-arm.c:12173 +#: elf32-arc.c:722 #, c-format -msgid " [Version4 EABI]" -msgstr " [Издање4 „EABI“]" +msgid "error: %pB: conflicting ISA extension attributes %s with %s" +msgstr "грешка: %pB: у Ñукобу Ñу атрибути „ISA“ проширења „%s“ Ñа „%s“" -#: elf32-arm.c:12177 +#: elf32-arc.c:762 #, c-format -msgid " [Version5 EABI]" -msgstr " [Издање5 „EABI“]" +msgid "error: %pB: cannot mix rf16 with full register set %pB" +msgstr "грешка: %pB: не могу да помешам „rf16“ Ñа пуним Ñкупом региÑтра „%pB“" -#: elf32-arm.c:12180 +#: elf32-arc.c:790 #, c-format -msgid " [soft-float ABI]" -msgstr " [„ABI“ ÑофтверÑког покретног зареза]" +msgid "error: %pB: conflicting attributes %s: %s with %s" +msgstr "грешка: %pB: Ñукоб атрибута „%s“: „%s“ Ñа „%s“" -#: elf32-arm.c:12183 +#: elf32-arc.c:817 #, c-format -msgid " [hard-float ABI]" -msgstr " [„ABI“ хардверÑког покретног зареза]" +msgid "error: %pB: conflicting attributes %s" +msgstr "грешка: %pB: Ñукоб атрибута „%s“" -#: elf32-arm.c:12189 +#: elf32-arc.c:922 #, c-format -msgid " [BE8]" -msgstr " [BE8]" +msgid "error: attempting to link %pB with a binary %pB of different architecture" +msgstr "грешка: покушавам да увежем „%pB“ Ñа извршном „%pB“ другачије архитектуре" -#: elf32-arm.c:12192 +#: elf32-arc.c:938 elf32-iq2000.c:844 elf32-m32c.c:889 elf32-m68hc1x.c:1391 +#: elf32-ppc.c:3867 elf64-sparc.c:722 elfxx-mips.c:15513 #, c-format -msgid " [LE8]" -msgstr " [LE8]" +msgid "%pB: uses different e_flags (%#x) fields than previous modules (%#x)" +msgstr "%pB: кориÑти другачија поља „e_flags“ (%#x) него претходни модули (%#x)" -#: elf32-arm.c:12198 -#, c-format -msgid " " -msgstr " <Ðепознато „EABI“ издање>" +#: elf32-arc.c:1027 +msgid "error: the ARC4 architecture is no longer supported" +msgstr "грешка: „ARC4“ архитектура више није подржана" -#: elf32-arm.c:12205 -#, c-format -msgid " [relocatable executable]" -msgstr " [премеÑтива извршна]" +#: elf32-arc.c:1033 +msgid "warning: unset or old architecture flags; use default machine" +msgstr "упозорење: неподешене или Ñтаре заÑтавице архитектуре; кориÑтим оÑновну машину" -#: elf32-arm.c:12208 +#: elf32-arc.c:1159 #, c-format -msgid " [has entry point]" -msgstr " [има тачку улаза]" +msgid "%pB(%pA+%#): CMEM relocation to `%s' is invalid, 16 MSB should be %#x (value is %#)" +msgstr "%pB(%pA+%#): „CMEM“ премештање на „%s“ је неиÑправно, „16 MSB“ треба да буде „%#x“ (вредноÑÑ‚ је %#)" -#: elf32-arm.c:12213 /src/binutils-gdb/bfd/elfnn-aarch64.c:4648 +#: elf32-arc.c:1170 #, c-format -msgid "" -msgstr "<Ðепознат Ñкуп битова заÑтавице>" - -#: elf32-arm.c:12522 elf32-i386.c:1452 elf32-s390.c:1005 elf32-tic6x.c:2812 -#: elf32-tilepro.c:1511 elf32-xtensa.c:999 elf64-s390.c:927 -#: elf64-x86-64.c:1467 elfxx-sparc.c:1415 elfxx-tilegx.c:1728 -#: /src/binutils-gdb/bfd/elfnn-aarch64.c:5038 -msgid "%B: bad symbol index: %d" -msgstr "%B: лош Ð¸Ð½Ð´ÐµÐºÑ Ñимбола: %d" - -#: elf32-arm.c:12674 elf32-metag.c:2283 elf64-x86-64.c:1593 -#: elf64-x86-64.c:1771 elfxx-mips.c:8482 -msgid "%B: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC" -msgstr "%B: премештање „%s“ наÑпрам „%s“ Ñе не може кориÑтити приликом Ñтварања дељеног објекта; поново преведите Ñа „-fPIC“" - -#: elf32-arm.c:13796 -#, c-format -msgid "Errors encountered processing file %s" -msgstr "Ðаиђох на грешке током обраде датотеке „%s“" - -#: elf32-arm.c:14230 -#, c-format -msgid "error: required section '%s' not found in the linker script" -msgstr "грешка: ниÑам нашао тражени одељак „%s“ у Ñкрипти повезивача" - -#: elf32-arm.c:15252 -msgid "%B: error: Cortex-A8 erratum stub is allocated in unsafe location" -msgstr "%B: грешка: Окрајак грешке КортекÑа Ð8 је додељен небезбедној локацији" - -#. There's not much we can do apart from complain if this -#. happens. -#: elf32-arm.c:15279 -msgid "%B: error: Cortex-A8 erratum stub out of range (input file too large)" -msgstr "%B: грешка: Окрајак грешке КортекÑа Ð8 је ван опÑега (улазна датотека је превелика)" - -#: elf32-arm.c:15373 elf32-arm.c:15395 -msgid "%B: error: VFP11 veneer out of range" -msgstr "%B: грешка: „VFP11“ превлака је ван опÑега" - -#: elf32-arm.c:16020 -msgid "error: %B is already in final BE8 format" -msgstr "грешка: „%B“ је већ у завршном запиÑу „BE8“" - -#: elf32-arm.c:16096 -msgid "error: Source object %B has EABI version %d, but target %B has EABI version %d" -msgstr "грешка: Изворни објекат „%B“ Ñадржи „EABI“ издање %d, али циљни „%B“ има „EABI“ издање %d" - -#: elf32-arm.c:16112 -msgid "error: %B is compiled for APCS-%d, whereas target %B uses APCS-%d" -msgstr "грешка: „%B“ је преведен за „APCS-%d“, док циљни „%B“ кориÑти „APCS-%d“" - -#: elf32-arm.c:16137 -msgid "error: %B uses VFP instructions, whereas %B does not" -msgstr "грешка: „%B“ кориÑти „VFP“ инÑтрукције, али „%B“ не" - -#: elf32-arm.c:16141 -msgid "error: %B uses FPA instructions, whereas %B does not" -msgstr "грешка: „%B“ кориÑти „FPA“ инÑтрукције, али „%B“ не" - -#: elf32-arm.c:16151 -msgid "error: %B uses Maverick instructions, whereas %B does not" -msgstr "грешка: „%B“ кориÑти „Maverick“ инÑтрукције, али „%B“ не" - -#: elf32-arm.c:16155 -msgid "error: %B does not use Maverick instructions, whereas %B does" -msgstr "грешка: „%B“ не кориÑти „Maverick“ инÑтрукције, али „%B“ да" - -#: elf32-arm.c:16174 -msgid "error: %B uses software FP, whereas %B uses hardware FP" -msgstr "грешка: „%B“ кориÑти ÑофтверÑки покретни зарез, док „%B“ кориÑти хардверÑки" - -#: elf32-arm.c:16178 -msgid "error: %B uses hardware FP, whereas %B uses software FP" -msgstr "грешка: „%B“ кориÑти хардверÑки покретни зарез, док „%B“ кориÑти ÑофтверÑки" - -#: elf32-avr.c:1264 elf32-bfin.c:3228 elf32-cris.c:2024 elf32-epiphany.c:568 -#: elf32-fr30.c:597 elf32-frv.c:4047 elf32-i860.c:1220 elf32-ip2k.c:1479 -#: elf32-iq2000.c:696 elf32-m32c.c:561 elf32-mep.c:543 elf32-metag.c:2000 -#: elf32-moxie.c:290 elf32-msp430.c:1325 elf32-mt.c:399 elf32-openrisc.c:412 -#: elf32-tilepro.c:3674 elf32-v850.c:2289 elf32-xstormy16.c:944 -#: elf64-mmix.c:1546 elfxx-tilegx.c:4059 -msgid "internal error: dangerous relocation" -msgstr "унутрашња грешка: опаÑно премештање" - -#: elf32-avr.c:2476 elf32-hppa.c:578 elf32-m68hc1x.c:160 elf32-metag.c:1197 -#: elf32-nios2.c:1357 -msgid "%B: cannot create stub entry %s" -msgstr "%B: не могу да Ñтворим ÑƒÐ½Ð¾Ñ Ð¾ÐºÑ€Ð°Ñ˜ÐºÐ° „%s“" - -#: elf32-bfin.c:107 elf32-bfin.c:363 -msgid "relocation should be even number" -msgstr "премештање треба бити паран број" - -#: elf32-bfin.c:1601 -msgid "%B(%A+0x%lx): unresolvable relocation against symbol `%s'" -msgstr "%B(%A+0x%lx): нерешиво премештање наÑпрам Ñимбола „%s“" - -#: elf32-bfin.c:1634 elf32-i386.c:4406 elf32-m68k.c:4197 elf32-s390.c:3364 -#: elf64-s390.c:3290 elf64-x86-64.c:4506 -msgid "%B(%A+0x%lx): reloc against `%s': error %d" -msgstr "%B(%A+0x%lx): премештање наÑпрам „%s“: грешка %d" - -#: elf32-bfin.c:2732 -msgid "%B: relocation at `%A+0x%x' references symbol `%s' with nonzero addend" -msgstr "%B: премештање на „%A+0x%x“ Ñтвара упуту Ñимбола „%s“ Ñа не-нултим Ñабирком" - -#: elf32-bfin.c:2748 -msgid "relocation references symbol not defined in the module" -msgstr "премештање упућује на Ñимбол који није дефиниÑан у модулу" +msgid "%pB(%pA+%#): CMEM relocation to `%s+%#' is invalid, 16 MSB should be %#x (value is %#)" +msgstr "%pB(%pA+%#): „CMEM“ премештање на „%s+%#“ је неиÑправно, „16 MSB“ треба да буде „%#x“ (вредноÑÑ‚ је %#)" -#: elf32-bfin.c:2845 -msgid "R_BFIN_FUNCDESC references dynamic symbol with nonzero addend" -msgstr "„R_BFIN_FUNCDESC“ Ñтвара упуту динамичког Ñимбола Ñа не-нултим Ñабирком" - -#: elf32-bfin.c:2886 elf32-bfin.c:3009 -msgid "cannot emit fixups in read-only section" -msgstr "не могу да пошаљем иÑправке у одељку Ñамо за читање" - -#: elf32-bfin.c:2917 elf32-bfin.c:3047 elf32-lm32.c:1095 elf32-sh.c:4913 -msgid "cannot emit dynamic relocations in read-only section" -msgstr "не могу да пошаљем динамичка премештања у одељку Ñамо за читање" +#: elf32-arc.c:1885 +msgid "GOT and PLT relocations cannot be fixed with a non dynamic linker" +msgstr "„GOT“ и „PLT“ премештања Ñе не могу поправити Ñа не динамичким увезивачем" -#: elf32-bfin.c:2967 -msgid "R_BFIN_FUNCDESC_VALUE references dynamic symbol with nonzero addend" -msgstr "„R_BFIN_FUNCDESC_VALUE“ Ñтвара упуту динамичког Ñимбола Ñа не-нултим Ñабирком" - -#: elf32-bfin.c:3132 -msgid "relocations between different segments are not supported" -msgstr "премештања између различитих Ñегмената ниÑу подржана" +#: elf32-arc.c:1909 elf32-rl78.c:1098 elf32-rx.c:1475 +#, c-format +msgid "%pB(%pA): warning: unaligned access to symbol '%s' in the small data area" +msgstr "%pB(%pA): упозорење: непоравнати приÑтуп ка Ñимболу „%s“ облаÑти малих података" -#: elf32-bfin.c:3133 -msgid "warning: relocation references a different segment" -msgstr "упозорење: премештање упућује на другачији Ñегмент" +#: elf32-arc.c:1914 elf32-rl78.c:1103 elf32-rx.c:1480 +#, c-format +msgid "%pB(%pA): internal error: out of range error" +msgstr "%pB(%pA): унутрашња грешка: изван опÑега" -#: elf32-bfin.c:4907 -msgid "%B: unsupported relocation type %i" -msgstr "%B: врÑта премештања „%i“ није подржана" +#: elf32-arc.c:1919 elf32-rl78.c:1108 elf32-rx.c:1485 +#, c-format +msgid "%pB(%pA): internal error: unsupported relocation error" +msgstr "%pB(%pA): унутрашња грешка: премештање није подржано" -#: elf32-bfin.c:4995 elf32-frv.c:6600 +#: elf32-arc.c:1924 elf32-rl78.c:1113 elf32-rx.c:1490 #, c-format -msgid "%s: cannot link non-fdpic object file into fdpic executable" -msgstr "%s: не могу да повежем датотеку не-„fdpic“ објекта у „fdpic“ извршну" +msgid "%pB(%pA): internal error: dangerous relocation" +msgstr "%pB(%pA): унутрашња грешка: опаÑно премештање" -#: elf32-bfin.c:4999 elf32-frv.c:6604 +#: elf32-arc.c:1929 elf32-rl78.c:1118 elf32-rx.c:1495 #, c-format -msgid "%s: cannot link fdpic object file into non-fdpic executable" -msgstr "%s: не могу да повежем датотеку „fdpic“ објекта у не-„fdpic“ извршну" +msgid "%pB(%pA): internal error: unknown error" +msgstr "%pB(%pA): унутрашња грешка: непозната грешка" -#: elf32-bfin.c:5153 +#: elf32-arc.c:2022 elf32-arc.c:2090 elf32-arm.c:15513 elf32-metag.c:2253 +#: elf32-nds32.c:5498 elfnn-aarch64.c:7739 elfnn-riscv.c:483 #, c-format -msgid "*** check this relocation %s" -msgstr "*** проверава ово премештање „%s“" +msgid "%pB: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC" +msgstr "%pB: премештање „%s“ наÑпрам „%s“ Ñе не може кориÑтити приликом Ñтварања дељеног објекта; поново преведите Ñа „-fPIC“" -#: elf32-cris.c:1110 -msgid "%B, section %A: unresolvable relocation %s against symbol `%s'" -msgstr "„%B“, одељак „%A“: нерешиво премештање „%s“ наÑпрам Ñимбола „%s“" - -#: elf32-cris.c:1172 -msgid "%B, section %A: No PLT nor GOT for relocation %s against symbol `%s'" -msgstr "„%B“, одељак „%A“: Ðема ни „PLT“ ни „GOT“ за премештање „%s“ наÑпрам Ñимбола „%s“" - -#: elf32-cris.c:1174 -msgid "%B, section %A: No PLT for relocation %s against symbol `%s'" -msgstr "„%B“, одељак „%A“: Ðема „PLT“ за премештање „%s“ наÑпрам Ñимбола „%s“" +#: elf32-arc.c:2909 +#, c-format +msgid "%pB: unknown mandatory ARC object attribute %d" +msgstr "%pB: непознат атрибут „%d“ обавезног „ARC“ објекта" -#: elf32-cris.c:1180 elf32-cris.c:1313 elf32-cris.c:1573 elf32-cris.c:1656 -#: elf32-cris.c:1809 elf32-tic6x.c:2645 -msgid "[whose name is lost]" -msgstr "[чији назив је изгубљен]" +#: elf32-arc.c:2917 +#, c-format +msgid "warning: %pB: unknown ARC object attribute %d" +msgstr "упозорење: %pB: непознат атрибут „%d“ објекта „ARC“" -#: elf32-cris.c:1299 elf32-tic6x.c:2630 -msgid "%B, section %A: relocation %s with non-zero addend %d against local symbol" -msgstr "„%B“, одељак „%A“: премештање „%s“ Ñа не-нултим Ñабирком %d наÑпрам локалног Ñимбола" - -#: elf32-cris.c:1307 elf32-cris.c:1650 elf32-cris.c:1803 elf32-tic6x.c:2638 -msgid "%B, section %A: relocation %s with non-zero addend %d against symbol `%s'" -msgstr "„%B“, одељак „%A“: премештање „%s“ Ñа не-нултим Ñабирком %d наÑпрам Ñимбола „%s“" - -#: elf32-cris.c:1333 -msgid "%B, section %A: relocation %s is not allowed for global symbol: `%s'" -msgstr "„%B“, одељак „%A“: премештање „%s“ није дозвољено за општи Ñимбол: „%s“" - -#: elf32-cris.c:1349 -msgid "%B, section %A: relocation %s with no GOT created" -msgstr "„%B“, одељак „%A“: премештање „%s“ без Ñтвореног „GOT“" +#: elf32-arm.c:4307 elf32-arm.c:4341 elf32-arm.c:4360 elf32-arm.c:4412 +#, c-format +msgid "%pB(%pA): warning: long branch veneers used in section with SHF_ARM_PURECODE section attribute is only supported for M-profile targets that implement the movw instruction" +msgstr "%pB(%pA): упозорење: дуге превлаке гране коришћене Ñу у одељку Ñа атрибутом „SHF_ARM_PURECODE“ одељком је подржана Ñамо за циљеве M-профила које примењују „movw“ инÑтрукцију" -#. We shouldn't get here for GCC-emitted code. -#: elf32-cris.c:1564 -msgid "%B, section %A: relocation %s has an undefined reference to `%s', perhaps a declaration mixup?" -msgstr "„%B“, одељак „%A“: премештање „%s“ Ñадржи недефиниÑану упуту ка „%s“, можда је дошло до мешања декларације?" - -#: elf32-cris.c:1937 -msgid "%B, section %A: relocation %s is not allowed for symbol: `%s' which is defined outside the program, perhaps a declaration mixup?" -msgstr "„%B“, одељак „%A“: премештање „%s“ није дозвољено за Ñимбол „%s“, који је дефиниÑан изван програма, можда је дошло до мешања декларације?" +#: elf32-arm.c:4372 elf32-arm.c:4426 elf32-arm.c:9116 elf32-arm.c:9206 +#, c-format +msgid "%pB(%s): warning: interworking not enabled; first occurrence: %pB: %s call to %s" +msgstr "%pB(%s): упозорење: међудејÑтво није укључено; прво појављивање: %pB: „%s“ позива „%s“" -#: elf32-cris.c:1990 -msgid "(too many global variables for -fpic: recompile with -fPIC)" -msgstr "(превише општих променљивих за „-fpic“: поново преведите Ñа „-fPIC“)" +#: elf32-arm.c:4552 +#, c-format +msgid "ERROR: CMSE stub (%s section) too far (%#) from destination (%#)" +msgstr "ГРЕШКÐ: „CMSE“ окрајак (одељак „%s“) је превише далеко (%#) од пдредишта (%#)" -#: elf32-cris.c:1997 -msgid "(thread-local data too big for -fpic or -msmall-tls: recompile with -fPIC or -mno-small-tls)" -msgstr "(локални подаци нити Ñу превелики за „-fpic“ или „-msmall-tls“: поново преведите Ñа „-fPIC“ или „-mno-small-tls“)" +#: elf32-arm.c:4721 +#, c-format +msgid "no address assigned to the veneers output section %s" +msgstr "ниједна адреÑа није додељена излазу превлаке одељка „%s“" -#: elf32-cris.c:3234 -msgid "" -"%B, section %A:\n" -" v10/v32 compatible object %s must not contain a PIC relocation" -msgstr "" -"„%B“, одељак „%A“:\n" -" v10/v32 ÑаглаÑан објекат „%s“ не Ñме да Ñадржи „PIC“ премештање" +#: elf32-arm.c:4796 elf32-arm.c:6943 elf32-csky.c:3172 elf32-hppa.c:584 +#: elf32-m68hc1x.c:165 elf32-metag.c:1182 elf32-nios2.c:2204 elf64-ppc.c:3775 +#: elfnn-aarch64.c:3190 +#, c-format +msgid "%pB: cannot create stub entry %s" +msgstr "%pB: не могу да Ñтворим ÑƒÐ½Ð¾Ñ Ð¾ÐºÑ€Ð°Ñ˜ÐºÐ° „%s“" -#: elf32-cris.c:3342 -msgid "" -"%B, section %A:\n" -" relocation %s not valid in a shared object; typically an option mixup, recompile with -fPIC" -msgstr "" -"„%B“, одељак „%A“:\n" -" премештање „%s“ није иÑправно у дељеном објекту; типично мешање опција, поново преведите Ñа „-fPIC“" +#: elf32-arm.c:5017 elf32-csky.c:3514 elf32-hppa.c:734 elf32-m68hc11.c:422 +#: elf32-m68hc12.c:542 elf32-metag.c:3347 elf32-nios2.c:2497 elf64-ppc.c:11315 +#: elfnn-aarch64.c:3259 +msgid "%F%P: Could not assign '%pA' to an output section. Retry without --enable-non-contiguous-regions.\n" +msgstr "%F%P: Ðе могу да доделим „%pA“ излазном одељку. Покушајте без „--enable-non-contiguous-regions“.\n" -#: elf32-cris.c:3556 -msgid "" -"%B, section %A:\n" -" relocation %s should not be used in a shared object; recompile with -fPIC" -msgstr "" -"„%B“, одељак „%A“:\n" -" премештање „%s“ не треба да Ñе кориÑти у дељеном објекту; поново преведите Ñа „-fPIC“" +#: elf32-arm.c:5987 +#, c-format +msgid "%pB: special symbol `%s' only allowed for ARMv8-M architecture or later" +msgstr "%pB: Ñпецијални Ñимбол „%s“ је дозвољен Ñамо за „ARMv8-M“ архитектуру или новију" -#: elf32-cris.c:3978 -msgid "" -"%B, section `%A', to symbol `%s':\n" -" relocation %s should not be used in a shared object; recompile with -fPIC" -msgstr "" -"„%B“, одељак „%A“, ка Ñимболу „%s“:\n" -" премештање „%s“ не треба да Ñе кориÑти у дељеном објекту; поново преведите Ñа „-fPIC“" +#: elf32-arm.c:5996 +#, c-format +msgid "%pB: invalid special symbol `%s'; it must be a global or weak function symbol" +msgstr "%pB: неиÑправан Ñпецијални Ñимбол „%s“; мора бити општи или Ñимбол Ñлабе функције" -#: elf32-cris.c:4091 -msgid "Unexpected machine number" -msgstr "Ðеочекивани машинÑки број" +#: elf32-arm.c:6035 +#, c-format +msgid "%pB: invalid standard symbol `%s'; it must be a global or weak function symbol" +msgstr "%pB: неиÑправан Ñтандардни Ñимбол „%s“; мора бити општи или Ñимбол Ñлабе функције" -#: elf32-cris.c:4142 +#: elf32-arm.c:6041 #, c-format -msgid " [symbols have a _ prefix]" -msgstr " [Ñимболи Ñадрже префикÑе „ _ “]" +msgid "%pB: absent standard symbol `%s'" +msgstr "%pB: недоÑтаје Ñтандардни Ñимбол „%s“" -#: elf32-cris.c:4145 +#: elf32-arm.c:6053 #, c-format -msgid " [v10 and v32]" -msgstr " [v10 и v32]" +msgid "%pB: `%s' and its special symbol are in different sections" +msgstr "%pB: „%s“ и њен Ñпецијални Ñимбол Ñу у различитим одељцима" -#: elf32-cris.c:4148 +#: elf32-arm.c:6065 #, c-format -msgid " [v32]" -msgstr " [v32]" +msgid "%pB: entry function `%s' not output" +msgstr "%pB: функцја уноÑа „%s“ није излаз" -#: elf32-cris.c:4191 -msgid "%B: uses _-prefixed symbols, but writing file with non-prefixed symbols" -msgstr "%B: кориÑти Ñимболе Ñа префикÑом „_“, али запиÑује датотеку Ñа Ñимболима без префикÑа" - -#: elf32-cris.c:4192 -msgid "%B: uses non-prefixed symbols, but writing file with _-prefixed symbols" -msgstr "%B: кориÑти Ñимболе без префикÑа, али запиÑује датотеку Ñа Ñимболима Ñа префикÑом „_“" - -#: elf32-cris.c:4211 -msgid "%B contains CRIS v32 code, incompatible with previous objects" -msgstr "„%B„ Ñадржи „CRIS v32“ код који није ÑаглаÑан Ñа претходним објектима" - -#: elf32-cris.c:4213 -msgid "%B contains non-CRIS-v32 code, incompatible with previous objects" -msgstr "„%B„ Ñадржи не-„CRIS-v32“ код који није ÑаглаÑан Ñа претходним објектима" +#: elf32-arm.c:6072 +#, c-format +msgid "%pB: entry function `%s' is empty" +msgstr "%pB: функцја уноÑа „%s“ је празна" -#: elf32-dlx.c:142 +#: elf32-arm.c:6201 #, c-format -msgid "BFD Link Error: branch (PC rel16) to section (%s) not supported" -msgstr "грешка БФД везе: гранање (PC rel16) у одељак (%s) није подржано" +msgid "%pB: --in-implib only supported for Secure Gateway import libraries" +msgstr "%pB: „--in-implib“ је подржана Ñамо за „Secure Gateway“ библиотеке уноÑа" -#: elf32-dlx.c:204 +#: elf32-arm.c:6250 #, c-format -msgid "BFD Link Error: jump (PC rel26) to section (%s) not supported" -msgstr "грешка БФД везе: уÑкакање (PC rel26) у одељак (%s) није подржано" +msgid "%pB: invalid import library entry: `%s'; symbol should be absolute, global and refer to Thumb functions" +msgstr "%pB: неиÑправан ÑƒÐ½Ð¾Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐµ уноÑа: „%s“; Ñимбол треба да буде апÑолутни, општи и да Ñе одноÑи на „Thumb“ функције" -#. Only if it's not an unresolved symbol. -#: elf32-epiphany.c:564 elf32-ip2k.c:1475 -msgid "unsupported relocation between data/insn address spaces" -msgstr "није подржано премештање између размака адреÑе „data/insn“" +#: elf32-arm.c:6272 +#, c-format +msgid "entry function `%s' disappeared from secure code" +msgstr "функција уноÑа „%s“ је неÑтала из безбедног кода" -#: elf32-frv.c:1460 elf32-frv.c:1609 -msgid "relocation requires zero addend" -msgstr "премештање захтева нулти Ñабирак" +#: elf32-arm.c:6296 +#, c-format +msgid "`%s' refers to a non entry function" +msgstr "„%s“ упућује на не улазну функцију" -#: elf32-frv.c:2822 -msgid "%H: relocation to `%s+%v' may have caused the error above\n" -msgstr "%H: „премештање у „%s+%v“ је можда проузроковало горњу грешку\n" +#: elf32-arm.c:6311 +#, c-format +msgid "%pB: visibility of symbol `%s' has changed" +msgstr "%pB: видљивоÑÑ‚ Ñимбола „%s“ је измењена" -#: elf32-frv.c:2839 -msgid "%H: relocation references symbol not defined in the module\n" -msgstr "%H: „премештање упућује на Ñимбол који није дефиниÑан у модулу\n" +#: elf32-arm.c:6320 +#, c-format +msgid "%pB: incorrect size for symbol `%s'" +msgstr "%pB: неиÑправна величина за Ñимбол „%s“" -#: elf32-frv.c:2915 -msgid "%H: R_FRV_GETTLSOFF not applied to a call instruction\n" -msgstr "%H: „R_FRV_GETTLSOFF“ није примењено на инÑтрукцију позива\n" +#: elf32-arm.c:6339 +#, c-format +msgid "offset of veneer for entry function `%s' not a multiple of its size" +msgstr "померај превлаке за функцију уноÑа „%s“ није умножак величине" -#: elf32-frv.c:2956 -msgid "%H: R_FRV_GOTTLSDESC12 not applied to an lddi instruction\n" -msgstr "%H: „R_FRV_GOTTLSDESC12“ није примењено на инÑтрукцију „lddi“\n" +#: elf32-arm.c:6359 +msgid "new entry function(s) introduced but no output import library specified:" +msgstr "нова функција уноÑа је приÑтигла али није наведена излазно улазна библиотека:" -#: elf32-frv.c:3027 -msgid "%H: R_FRV_GOTTLSDESCHI not applied to a sethi instruction\n" -msgstr "%H: „R_FRV_GOTTLSDESCHI“ није примењено на инÑтрукцију „sethi“\n" +#: elf32-arm.c:6367 +#, c-format +msgid "start address of `%s' is different from previous link" +msgstr "почетна адреÑа за „%s“ Ñе разликује од претходне везе" -#: elf32-frv.c:3064 -msgid "%H: R_FRV_GOTTLSDESCLO not applied to a setlo or setlos instruction\n" -msgstr "%H: „R_FRV_GOTTLSDESCLO“ није примењено на инÑтрукцију „setlo“ или „setlos“\n" +#: elf32-arm.c:7076 elf32-arm.c:7111 +#, c-format +msgid "unable to find %s glue '%s' for '%s'" +msgstr "не могу да нађем „%s“ лепак „%s“ за „%s“" -#: elf32-frv.c:3111 -msgid "%H: R_FRV_TLSDESC_RELAX not applied to an ldd instruction\n" -msgstr "%H: „R_FRV_TLSDESC_RELAX“ није примењено на инÑтрукцију „ldd“\n" +#: elf32-arm.c:7822 +#, c-format +msgid "%pB: BE8 images only valid in big-endian mode" +msgstr "%pB: „BE8“ Ñлике Ñу иÑправне Ñамо у режиму велике крајњоÑти" -#: elf32-frv.c:3195 -msgid "%H: R_FRV_GETTLSOFF_RELAX not applied to a calll instruction\n" -msgstr "%H: „R_FRV_GETTLSOFF_RELAX“ није примењено на инÑтрукцију „calll“\n" +#. Give a warning, but do as the user requests anyway. +#: elf32-arm.c:8049 +#, c-format +msgid "%pB: warning: selected VFP11 erratum workaround is not necessary for target architecture" +msgstr "%pB: упозорење: изабрано решење „VFP11“ грешака није потребно за циљну архитектуру" -#: elf32-frv.c:3249 -msgid "%H: R_FRV_GOTTLSOFF12 not applied to an ldi instruction\n" -msgstr "%H: „R_FRV_GOTTLSOFF12“ није примењено на инÑтрукцију „ldi“\n" +#: elf32-arm.c:8076 +#, c-format +msgid "%pB: warning: selected STM32L4XX erratum workaround is not necessary for target architecture" +msgstr "%pB: упозорење: изабрано решење „STM32L4XX“ грешака није потребно за циљну архитектуру" -#: elf32-frv.c:3279 -msgid "%H: R_FRV_GOTTLSOFFHI not applied to a sethi instruction\n" -msgstr "%H: „R_FRV_GOTTLSOFFHI“ није примењено на инÑтрукцију „sethi“\n" +#: elf32-arm.c:8612 elf32-arm.c:8632 elf32-arm.c:8699 elf32-arm.c:8718 +#, c-format +msgid "%pB: unable to find %s veneer `%s'" +msgstr "%pB: не могу да нађем „%s“ превлаку „%s“" -#: elf32-frv.c:3308 -msgid "%H: R_FRV_GOTTLSOFFLO not applied to a setlo or setlos instruction\n" -msgstr "%H: „R_FRV_GOTTLSOFFLO“ није примењено на инÑтрукцију „setlo“ или „setlos“\n" +#: elf32-arm.c:8925 +#, c-format +msgid "%pB(%pA+%#x): error: multiple load detected in non-last IT block instruction: STM32L4XX veneer cannot be generated; use gcc option -mrestrict-it to generate only one instruction per IT block" +msgstr "%pB(%pA+%#x): грешка: вишеÑтруко учитавање је откривено у не-поÑледњој инÑтрукцији „IT“ блока: „STM32L4XX“ превлака Ñе не може Ñтворити; кориÑтите „gcc“ опцију „-mrestrict-it“ за Ñтварање Ñамо једне инÑтрукције по „IT“ блоку" -#: elf32-frv.c:3338 -msgid "%H: R_FRV_TLSOFF_RELAX not applied to an ld instruction\n" -msgstr "%H: „R_FRV_TLSOFF_RELAX“ није примењено на инÑтрукцију „ld“\n" +#: elf32-arm.c:9023 +#, c-format +msgid "invalid TARGET2 relocation type '%s'" +msgstr "неиÑправна врÑта „TARGET2“ премештања „%s“" -#: elf32-frv.c:3383 -msgid "%H: R_FRV_TLSMOFFHI not applied to a sethi instruction\n" -msgstr "%H: „R_FRV_TLSMOFFHI“ није примењено на инÑтрукцију „sethi“\n" +#. FIXME: We ought to be able to generate thumb-1 PLT +#. instructions... +#: elf32-arm.c:9825 +#, c-format +msgid "%pB: warning: thumb-1 mode PLT generation not currently supported" +msgstr "%pB: упозорење: „PLT“ Ñтварање у „thumb-1“ режиму тренутно није подржано" -#: elf32-frv.c:3410 -msgid "R_FRV_TLSMOFFLO not applied to a setlo or setlos instruction\n" -msgstr "R_FRV_TLSMOFFLO“ није примењено на инÑтрукцију „setlo“ или „setlos“\n" +#: elf32-arm.c:10135 elf32-arm.c:10177 +#, c-format +msgid "%pB(%pA+%#): unexpected %s instruction '%#lx' in TLS trampoline" +msgstr "%pB(%pA+%#): неочекивана „%s“ инÑтрукција „%#lx“ у „TLS“ трамбулини" -#: elf32-frv.c:3531 -msgid "%H: R_FRV_FUNCDESC references dynamic symbol with nonzero addend\n" -msgstr "%H: „R_FRV_FUNCDESC“ Ñтвара упуту динамичког Ñимбола Ñа не-нултим Ñабирком\n" +#: elf32-arm.c:10521 +msgid "shared object" +msgstr "дељени објекат" -#: elf32-frv.c:3572 elf32-frv.c:3694 -msgid "%H: cannot emit fixups in read-only section\n" -msgstr "%H: не могу да пошаљем иÑправке у одељку који је Ñамо за читање\n" +#: elf32-arm.c:10524 +msgid "PIE executable" +msgstr "„PIE“ извршна" -#: elf32-frv.c:3603 elf32-frv.c:3737 -msgid "%H: cannot emit dynamic relocations in read-only section\n" -msgstr "%H: не могу да пошаљем динамичка премештања у одељку Ñамо за читање\n" +#: elf32-arm.c:10527 +#, c-format +msgid "%pB: relocation %s against external or undefined symbol `%s' can not be used when making a %s; recompile with -fPIC" +msgstr "%pB: премештање „%s“ наÑпрам Ñпољног или неодређеног Ñимбола „%s“ Ñе не може кориÑтити приликом Ñтварања „%s“; поново преведите Ñа „-fPIC“" -#: elf32-frv.c:3652 -msgid "%H: R_FRV_FUNCDESC_VALUE references dynamic symbol with nonzero addend\n" -msgstr "%H: „R_FRV_FUNCDESC_VALUE“ Ñтвара упуту динамичког Ñимбола Ñа не-нултим Ñабирком\n" +#: elf32-arm.c:10664 elf32-arm.c:11091 +#, c-format +msgid "%pB: warning: %s BLX instruction targets %s function '%s'" +msgstr "%pB: упозорење: инÑтрукција „%s BLX“ циља на „%s“ функцију „%s“" -#: elf32-frv.c:3908 -msgid "%H: reloc against `%s' references a different segment\n" -msgstr "%H: премештање наÑпрам „%s“ Ñтвара упуту другог Ñегмента\n" +#: elf32-arm.c:12003 elf32-arm.c:12029 +#, c-format +msgid "%pB(%pA+%#): unexpected %s instruction '%#lx' referenced by TLS_GOTDESC" +msgstr "%pB(%pA+%#): неочекивана „%s“ инÑтрукција „%#lx“ на коју упућује „TLS_GOTDESC“" -#: elf32-frv.c:4058 -msgid "%H: reloc against `%s': %s\n" -msgstr "%H: премештање наÑпрам „%s“: %s\n" +#: elf32-arm.c:12075 elf32-csky.c:4746 elf32-m68k.c:3735 elf32-metag.c:1915 +#: elf32-nios2.c:4385 +#, c-format +msgid "%pB(%pA+%#): %s relocation not permitted in shared object" +msgstr "%pB(%pA+%#): „%s“ премештање није допуштено у дељеним објектима" -#: elf32-frv.c:6265 -msgid "%B: unsupported relocation type %i\n" -msgstr "%B: врÑта премештања „%i“ није подржана\n" +#: elf32-arm.c:12289 +#, c-format +msgid "%pB(%pA+%#): only ADD or SUB instructions are allowed for ALU group relocations" +msgstr "%pB(%pA+%#): дозвољене Ñу Ñамо „ADD“ или „SUB“ инÑтрукције за премештања „ALU“ групе" -#: elf32-frv.c:6514 +#: elf32-arm.c:12330 elf32-arm.c:12422 elf32-arm.c:12510 elf32-arm.c:12600 #, c-format -msgid "%s: compiled with %s and linked with modules that use non-pic relocations" -msgstr "%s: преведено Ñа „%s“ и повезано Ñа модулима који кориÑте не-„PIC“ премештања" +msgid "%pB(%pA+%#): overflow whilst splitting %# for group relocation %s" +msgstr "%pB(%pA+%#): прекорачење за време дељења %# за премештање групе „%s“" -#: elf32-frv.c:6567 elf32-iq2000.c:828 elf32-m32c.c:812 +#: elf32-arm.c:13232 elf32-sh.c:3571 #, c-format -msgid "%s: compiled with %s and linked with modules compiled with %s" -msgstr "%s: преведено Ñа „%s“ и повезано Ñа модулима који Ñу преведени Ñа „%s“" +msgid "%pB(%pA+%#): %s relocation against SEC_MERGE section" +msgstr "%pB(%pA+%#): „%s“ премештање наÑпрам „SEC_MERGE“ одељка" -#: elf32-frv.c:6579 +#: elf32-arm.c:13345 elf32-m68k.c:3968 elf32-xtensa.c:2761 +#: elfnn-aarch64.c:6829 #, c-format -msgid "%s: uses different unknown e_flags (0x%lx) fields than previous modules (0x%lx)" -msgstr "%s: кориÑти другачија непозната поља „e_flags“ (0x%lx) него претходни модули (0x%lx)" +msgid "%pB(%pA+%#): %s used with TLS symbol %s" +msgstr "%pB(%pA+%#): „%s“ је употребљено Ñа „TLS“ Ñимболом „%s“" -#: elf32-frv.c:6627 elf32-iq2000.c:865 elf32-m32c.c:848 elf32-mt.c:561 -#: elf32-rl78.c:1069 elf32-rx.c:3040 elf64-ppc.c:5839 +#: elf32-arm.c:13347 elf32-m68k.c:3970 elf32-xtensa.c:2763 +#: elfnn-aarch64.c:6831 #, c-format -msgid "private flags = 0x%lx:" -msgstr "приватне заÑтавице = 0x%lx:" +msgid "%pB(%pA+%#): %s used with non-TLS symbol %s" +msgstr "%pB(%pA+%#): „%s“ је употребљено Ñа „не-TLS“ Ñимболом „%s“" -#: elf32-gen.c:69 elf64-gen.c:69 -msgid "%B: Relocations in generic ELF (EM: %d)" -msgstr "%B: Премештања у општем „ELF“-у (EM: %d)" - -#: elf32-hppa.c:830 elf32-hppa.c:3592 -msgid "%B(%A+0x%lx): cannot reach %s, recompile with -ffunction-sections" -msgstr "%B(%A+0x%lx): не могу да доÑтигнем „%s“, поново преведите Ñа „-ffunction-sections“" - -#: elf32-hppa.c:1268 -msgid "%B: relocation %s can not be used when making a shared object; recompile with -fPIC" -msgstr "%B: премештање „%s“ Ñе не може кориÑтити приликом Ñтварања дељеног објекта; поново преведите Ñа „-fPIC“" - -#: elf32-hppa.c:2781 -msgid "%B: duplicate export stub %s" -msgstr "%B: удвоÑтручи окрајак извоза „%s“" - -#: elf32-hppa.c:3427 -msgid "%B(%A+0x%lx): %s fixup for insn 0x%x is not supported in a non-shared link" -msgstr "%B(%A+0x%lx): иÑправка „%s“ за „insn 0x%x“ није подржана у не-дељеној вези" - -#: elf32-hppa.c:4279 -msgid "%B(%A+0x%lx): cannot handle %s for %s" -msgstr "%B(%A+0x%lx): не могу да радим Ñа „%s“ за „%s“" +#: elf32-arm.c:13430 elf32-tic6x.c:2649 elfnn-aarch64.c:7166 +msgid "out of range" +msgstr "изван опÑега" -#: elf32-hppa.c:4598 -msgid ".got section not immediately after .plt section" -msgstr "одељак „.got“ није одмах након одељка „.plt“" +#: elf32-arm.c:13434 elf32-nios2.c:4519 elf32-pru.c:936 elf32-tic6x.c:2653 +#: elfnn-aarch64.c:7170 +msgid "unsupported relocation" +msgstr "неподржано премештање" -#. Unknown relocation. -#: elf32-i386.c:380 elf32-m68k.c:353 elf32-ppc.c:2035 elf32-s390.c:345 -#: elf32-tic6x.c:2667 elf64-ppc.c:2427 elf64-s390.c:371 elf64-x86-64.c:281 -msgid "%B: invalid relocation type %d" -msgstr "%B: неиÑправна врÑта премештања „%d“" - -#: elf32-i386.c:1394 elf64-x86-64.c:1410 -msgid "%B: TLS transition from %s to %s against `%s' at 0x%lx in section `%A' failed" -msgstr "%B: Ðије уÑпео „TLS“ прелаз Ñа „%s“ на „%s“ наÑпрам „%s“ при 0x%lx у одељку „%A“" - -#: elf32-i386.c:1642 elf32-s390.c:1233 elf32-sh.c:6263 elf32-tilepro.c:1627 -#: elf32-xtensa.c:1176 elf64-s390.c:1166 elfxx-sparc.c:1596 -#: elfxx-tilegx.c:1836 -msgid "%B: `%s' accessed both as normal and thread local symbol" -msgstr "%B: „%s“ Ñе приÑтупило и као нормалном и као Ñимболу локалне нити" - -#: elf32-i386.c:2500 elf64-x86-64.c:2582 -msgid "%P: %B: warning: relocation against `%s' in readonly section `%A'.\n" -msgstr "%P: %B: упозорење: премештање наÑпрам „%s“ у одељку „%A“ који је Ñамо за читање.\n" - -#: elf32-i386.c:2740 elf64-x86-64.c:2820 -msgid "%P: %B: warning: relocation in readonly section `%A'.\n" -msgstr "%P: %B: упозорење: премештање у одељку „%A“ који је Ñамо за читање.\n" - -#: elf32-i386.c:3207 elf32-tilepro.c:2873 elf64-x86-64.c:3275 -#: elfxx-tilegx.c:3172 /src/binutils-gdb/bfd/elfnn-aarch64.c:4099 -msgid "%B: unrecognized relocation (0x%x) in section `%A'" -msgstr "%B: непознато премештање (0x%x) у одељку „%A“" - -#: elf32-i386.c:3368 elf64-x86-64.c:3380 elfxx-sparc.c:3150 -#: /src/binutils-gdb/bfd/elfnn-aarch64.c:3496 -msgid "%B: relocation %s against STT_GNU_IFUNC symbol `%s' isn't handled by %s" -msgstr "%B: премештање „%s“ наÑпрам „STT_GNU_IFUNC“ Ñимбола „%s“ „%s“ не може да одради" +#: elf32-arm.c:13442 elf32-nios2.c:4529 elf32-pru.c:946 elf32-tic6x.c:2661 +#: elfnn-aarch64.c:7178 +msgid "unknown error" +msgstr "непозната грешка" -#: elf32-i386.c:3610 elf64-x86-64.c:3777 -msgid "hidden symbol" -msgstr "Ñкривени Ñимбол" +#: elf32-arm.c:13920 +#, c-format +msgid "warning: not setting interworking flag of %pB since it has already been specified as non-interworking" +msgstr "упозорење: ниÑам подеÑио заÑтавицу међудејÑтва за „%pB“ пошто је већ наведен као не-међудејÑтвено" -#: elf32-i386.c:3613 elf64-x86-64.c:3780 -msgid "internal symbol" -msgstr "унутрашњи Ñимбол" +#: elf32-arm.c:13924 +#, c-format +msgid "warning: clearing the interworking flag of %pB due to outside request" +msgstr "упозорење: уклањам заÑтавицу међудејÑтва за „%pB“ уÑлед захтева Ñпоља" -#: elf32-i386.c:3616 elf64-x86-64.c:3783 -msgid "protected symbol" -msgstr "заштићени Ñимбол" +#: elf32-arm.c:13969 +#, c-format +msgid "warning: clearing the interworking flag of %pB because non-interworking code in %pB has been linked with it" +msgstr "упозорење: чиÑтим заÑтавицу међудејÑтва за „%pB“ зато што је немеђудејÑтвени код у „%pB“ повезан Ñа њим" -#: elf32-i386.c:3619 elf64-x86-64.c:3786 -msgid "symbol" -msgstr "Ñимбол" +#: elf32-arm.c:14056 +#, c-format +msgid "%pB: unknown mandatory EABI object attribute %d" +msgstr "%pB: обавезан „%d“ атрибут „EABI“ објекта није познат" -#: elf32-i386.c:3624 -msgid "%B: relocation R_386_GOTOFF against undefined %s `%s' can not be used when making a shared object" -msgstr "%B: премештање „R_386_GOTOFF“ наÑпрам недефиниÑаног %s „%s“ Ñе не може кориÑтити када Ñе Ñтвара дељени објекат" +#: elf32-arm.c:14064 +#, c-format +msgid "warning: %pB: unknown EABI object attribute %d" +msgstr "упозорење: %pB: „%d“ атрибут „EABI“ објекта није познат" -#: elf32-i386.c:3635 -msgid "%B: relocation R_386_GOTOFF against protected function `%s' can not be used when making a shared object" -msgstr "%B: премештање „R_386_GOTOFF“ наÑпрам заштићене функције „%s“ Ñе не може кориÑтити када Ñе Ñтвара дељени објекат" +#: elf32-arm.c:14364 +#, c-format +msgid "error: %pB: unknown CPU architecture" +msgstr "грешка: %pB: непозната архитектура процеÑора" -#: elf32-i386.c:4923 elf32-tilepro.c:3923 elf64-x86-64.c:4964 -#: elfxx-tilegx.c:4326 /src/binutils-gdb/bfd/elfnn-aarch64.c:7105 +#: elf32-arm.c:14402 elf32-nios2.c:2953 #, c-format -msgid "discarded output section: `%A'" -msgstr "одбачени одељак излаза: „%A“" +msgid "error: %pB: conflicting CPU architectures %d/%d" +msgstr "грешка: %pB: архитектуре процеÑора %d/%d Ñу у Ñукобу" -#: elf32-ip2k.c:857 elf32-ip2k.c:863 elf32-ip2k.c:930 elf32-ip2k.c:936 -msgid "ip2k relaxer: switch table without complete matching relocation information." -msgstr "релакÑер „ip2k“: пребацивање табеле без потпуног подударања података о премештању." +#: elf32-arm.c:14499 +#, c-format +msgid "Error: %pB has both the current and legacy Tag_MPextension_use attributes" +msgstr "Грешка: „%pB“ поÑедује и тренутни и Ñтари „Tag_MPextension_use“ атрибут" -#: elf32-ip2k.c:880 elf32-ip2k.c:963 -msgid "ip2k relaxer: switch table header corrupt." -msgstr "релакÑер „ip2k“: оштећено је заглавље табеле пребацивача." +#: elf32-arm.c:14528 +#, c-format +msgid "error: %pB uses VFP register arguments, %pB does not" +msgstr "грешка: „%pB“ кориÑти аргументе „VFP“ региÑтра, а „%pB“ не" -#: elf32-ip2k.c:1292 +#: elf32-arm.c:14687 #, c-format -msgid "ip2k linker: missing page instruction at 0x%08lx (dest = 0x%08lx)." -msgstr "увезивач „ip2k“: недоÑтаје инÑтрукција Ñтранице на 0x%08lx (циљ = 0x%08lx)." +msgid "error: %pB: unable to merge virtualization attributes with %pB" +msgstr "грешка: %pB: не могу да Ñпојим атрибуте виртуелизације Ñа „%pB“" -#: elf32-ip2k.c:1308 +#: elf32-arm.c:14713 #, c-format -msgid "ip2k linker: redundant page instruction at 0x%08lx (dest = 0x%08lx)." -msgstr "увезивач „ip2k“: Ñувишна инÑтрукција Ñтранице на 0x%08lx (циљ = 0x%08lx)." +msgid "error: %pB: conflicting architecture profiles %c/%c" +msgstr "грешка: %pB: У Ñукобу Ñу профили архитектуре „%c/%c“" -#: elf32-iq2000.c:841 elf32-m32c.c:824 +#: elf32-arm.c:14852 #, c-format -msgid "%s: uses different e_flags (0x%lx) fields than previous modules (0x%lx)" -msgstr "%s: кориÑти другачија поља „e_flags“ (0x%lx) него претходни модули (0x%lx)" +msgid "warning: %pB: conflicting platform configuration" +msgstr "упозорење: %pB: подешавање платформе је у Ñукобу" -#: elf32-lm32.c:698 elf32-nios2.c:2191 -msgid "global pointer relative relocation when _gp not defined" -msgstr "релативно премештање општег показивача када „_gp“ није дефиниÑано" +#: elf32-arm.c:14861 +#, c-format +msgid "error: %pB: conflicting use of R9" +msgstr "грешка: %pB: у Ñукобу је коришћење „R9“" -#: elf32-lm32.c:753 elf32-nios2.c:2623 -msgid "global pointer relative address out of range" -msgstr "релативна адреÑа општег показивача је ван опÑега" +#: elf32-arm.c:14873 +#, c-format +msgid "error: %pB: SB relative addressing conflicts with use of R9" +msgstr "грешка: %pB: релативно „SB“ адреÑирање је у Ñукобу Ñа коришћењем „R9“" -#: elf32-lm32.c:1049 -msgid "internal error: addend should be zero for R_LM32_16_GOT" -msgstr "унутрашња грешка: Ñабирак треба да буде нула за „R_LM32_16_GOT“" +#: elf32-arm.c:14886 +#, c-format +msgid "warning: %pB uses %u-byte wchar_t yet the output is to use %u-byte wchar_t; use of wchar_t values across objects may fail" +msgstr "упозорење: „%pB“ кориÑти %u-бајтни „wchar_t“ онда ће излаз да кориÑти %u-бајтни „wchar_t“; коришћење „wchar_t“ вредноÑти кроз објекте можда неће уÑпети" -#: elf32-m32r.c:1453 -msgid "SDA relocation when _SDA_BASE_ not defined" -msgstr "СДРпремештање када „_SDA_BASE_“ није дефиниÑано" +#: elf32-arm.c:14917 +#, c-format +msgid "warning: %pB uses %s enums yet the output is to use %s enums; use of enum values across objects may fail" +msgstr "упозорење: „%pB“ кориÑти %s набрајања онда ће излаз да кориÑти %s набрајања; коришћење вредноÑти набрајања кроз објекте можда неће уÑпети" -#: elf32-m32r.c:3003 -msgid "%B: The target (%s) of an %s relocation is in the wrong section (%A)" -msgstr "%B: Мета (%s) премештања „%s“ је у погрешном одељку (%A)" +#: elf32-arm.c:14929 +#, c-format +msgid "error: %pB uses iWMMXt register arguments, %pB does not" +msgstr "грешка: „%pB“ кориÑти аргументе „iWMMXt“ региÑтра, а „%pB“ не" -#: elf32-m32r.c:3529 -msgid "%B: Instruction set mismatch with previous modules" -msgstr "%B: Скуп инÑтрукција Ñе разликује од претходних модула" +#: elf32-arm.c:14946 +#, c-format +msgid "error: fp16 format mismatch between %pB and %pB" +msgstr "грешка: „fp16“ Ð·Ð°Ð¿Ð¸Ñ Ð½Ð¸Ñ˜Ðµ иÑти за „%pB“ и „%pB“" -#: elf32-m32r.c:3550 elf32-nds32.c:5636 +#: elf32-arm.c:14982 #, c-format -msgid "private flags = %lx" -msgstr "приватне заÑтавице = %lx" +msgid "%pB has both the current and legacy Tag_MPextension_use attributes" +msgstr "„%pB“ поÑедује и тренутни и Ñтари „Tag_MPextension_use“ атрибут" -#: elf32-m32r.c:3555 +#. Ignore init flag - it may not be set, despite the flags field +#. containing valid data. +#. Ignore init flag - it may not be set, despite the flags field containing valid data. +#. Ignore init flag - it may not be set, despite the flags field +#. containing valid data. +#: elf32-arm.c:15069 elf32-bfin.c:4719 elf32-cris.c:3861 elf32-m68hc1x.c:1416 +#: elf32-m68k.c:1267 elf32-score.c:4000 elf32-score7.c:3805 elf32-vax.c:537 +#: elf32-xgate.c:494 elfxx-mips.c:16199 elfnn-aarch64.c:7332 #, c-format -msgid ": m32r instructions" -msgstr ": инÑтрукције „m32r“" +msgid "private flags = %lx:" +msgstr "приватне заÑтавице = %lx:" -#: elf32-m32r.c:3556 +#: elf32-arm.c:15078 #, c-format -msgid ": m32rx instructions" -msgstr ": инÑтрукције „m32rx“" +msgid " [interworking enabled]" +msgstr " [међудејÑтво је укључено]" -#: elf32-m32r.c:3557 +#: elf32-arm.c:15086 #, c-format -msgid ": m32r2 instructions" -msgstr ": инÑтрукције „m32r2“" +msgid " [VFP float format]" +msgstr " [„VFP“ Ð·Ð°Ð¿Ð¸Ñ Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¾Ð³ броја]" -#: elf32-m68hc1x.c:1114 +#: elf32-arm.c:15088 #, c-format -msgid "Reference to the far symbol `%s' using a wrong relocation may result in incorrect execution" -msgstr "Упућивање на далеки Ñимбол „%s“ употребом погрешног премештања може довеÑти до нетачног извршавања" +msgid " [Maverick float format]" +msgstr " [„Maverick“ Ð·Ð°Ð¿Ð¸Ñ Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¾Ð³ броја]" -#: elf32-m68hc1x.c:1150 +#: elf32-arm.c:15090 #, c-format -msgid "XGATE address (%lx) is not within shared RAM(0xE000-0xFFFF), therefore you must manually offset the address, and possibly manage the page, in your code." -msgstr "ÐдреÑа „XGATE“ (%lx) није унутар дељене меморије (0xE000-0xFFFF), Ñтога морате ручно да померите адреÑу, и по могућÑтву да радите Ñа Ñтраницом у вашем коду." +msgid " [FPA float format]" +msgstr " [„FPA“ Ð·Ð°Ð¿Ð¸Ñ Ð´ÐµÑ†Ð¸Ð¼Ð°Ð»Ð½Ð¾Ð³ броја]" -#: elf32-m68hc1x.c:1170 +#: elf32-arm.c:15093 #, c-format -msgid "banked address [%lx:%04lx] (%lx) is not in the same bank as current banked address [%lx:%04lx] (%lx)" -msgstr "групиÑана адреÑа [%lx:%04lx] (%lx) није у иÑтој групи као тренутна групиÑана адреÑа [%lx:%04lx] (%lx)" +msgid " [floats passed in float registers]" +msgstr " [децималне вредноÑти Ñу проÑлеђене у региÑтре децималних вредноÑти]" -#: elf32-m68hc1x.c:1190 +#: elf32-arm.c:15096 elf32-arm.c:15182 #, c-format -msgid "reference to a banked address [%lx:%04lx] in the normal address space at %04lx" -msgstr "упута на групиÑану адреÑу [%lx:%04lx] у обичном проÑтору адреÑе на %04lx" +msgid " [position independent]" +msgstr " [незавиÑтан од положаја]" -#: elf32-m68hc1x.c:1237 +#: elf32-arm.c:15099 #, c-format -msgid "S12 address (%lx) is not within shared RAM(0x2000-0x4000), therefore you must manually offset the address in your code" -msgstr "ÐдреÑа „S12“ (%lx) није унутар дељене меморије (0x2000-0x4000), Ñтога морате ручно да померите адреÑу у вашем коду" +msgid " [new ABI]" +msgstr " [нови „ABI“]" -#: elf32-m68hc1x.c:1370 -msgid "%B: linking files compiled for 16-bit integers (-mshort) and others for 32-bit integers" -msgstr "%B: Ñвезујуће датотеке Ñу преведене за целе бројеве од 16 бита (-mshort) а друге за целе бројеве од 32 бита" - -#: elf32-m68hc1x.c:1377 -msgid "%B: linking files compiled for 32-bit double (-fshort-double) and others for 64-bit double" -msgstr "%B: Ñвезујуће датотеке Ñу преведене за целе бројеве од 32 бита (-fshort-double) а друге за целе бројеве од 64 бита" - -#: elf32-m68hc1x.c:1386 -msgid "%B: linking files compiled for HCS12 with others compiled for HC12" -msgstr "%B: Ñвезујуће датотеке Ñу преведене за „HCS12“ Ñа другима преведеним за „HC12“" - -#: elf32-m68hc1x.c:1402 elf32-ppc.c:4776 elf64-sparc.c:706 elfxx-mips.c:14817 -msgid "%B: uses different e_flags (0x%lx) fields than previous modules (0x%lx)" -msgstr "%B: кориÑти другачија поља „e_flags“ (0x%lx) него претходни модули (0x%lx)" +#: elf32-arm.c:15102 +#, c-format +msgid " [old ABI]" +msgstr " [Ñтари „ABI“]" -#: elf32-m68hc1x.c:1430 elf32-xgate.c:677 +#: elf32-arm.c:15105 #, c-format -msgid "[abi=32-bit int, " -msgstr "[аби=32-битни цео број, " +msgid " [software FP]" +msgstr " [логички покретни зарез]" -#: elf32-m68hc1x.c:1432 elf32-xgate.c:679 +#: elf32-arm.c:15114 #, c-format -msgid "[abi=16-bit int, " -msgstr "[аби=16-битни цео број, " +msgid " [Version1 EABI]" +msgstr " [Издање1 „EABI“]" -#: elf32-m68hc1x.c:1435 elf32-xgate.c:682 +#: elf32-arm.c:15117 elf32-arm.c:15128 #, c-format -msgid "64-bit double, " -msgstr "64-битни мешовити, " +msgid " [sorted symbol table]" +msgstr " [табела Ñређених Ñимбола]" -#: elf32-m68hc1x.c:1437 elf32-xgate.c:684 +#: elf32-arm.c:15119 elf32-arm.c:15130 #, c-format -msgid "32-bit double, " -msgstr "32-битни мешовити, " +msgid " [unsorted symbol table]" +msgstr " [табела неÑређених Ñимбола]" -#: elf32-m68hc1x.c:1440 +#: elf32-arm.c:15125 #, c-format -msgid "cpu=HC11]" -msgstr "процеÑор=HC11]" +msgid " [Version2 EABI]" +msgstr " [Издање2 „EABI“]" -#: elf32-m68hc1x.c:1442 +#: elf32-arm.c:15133 #, c-format -msgid "cpu=HCS12]" -msgstr "процеÑор=HCS12]" +msgid " [dynamic symbols use segment index]" +msgstr " [динамички Ñимболи кориÑте Ð¸Ð½Ð´ÐµÐºÑ Ñегмента]" + +#: elf32-arm.c:15136 +#, c-format +msgid " [mapping symbols precede others]" +msgstr " [мапирање Ñимбола претходи другима]" + +#: elf32-arm.c:15143 +#, c-format +msgid " [Version3 EABI]" +msgstr " [Издање3 „EABI“]" + +#: elf32-arm.c:15147 +#, c-format +msgid " [Version4 EABI]" +msgstr " [Издање4 „EABI“]" + +#: elf32-arm.c:15151 +#, c-format +msgid " [Version5 EABI]" +msgstr " [Издање5 „EABI“]" + +#: elf32-arm.c:15154 +#, c-format +msgid " [soft-float ABI]" +msgstr " [„ABI“ ÑофтверÑког покретног зареза]" + +#: elf32-arm.c:15157 +#, c-format +msgid " [hard-float ABI]" +msgstr " [„ABI“ хардверÑког покретног зареза]" + +#: elf32-arm.c:15163 +#, c-format +msgid " [BE8]" +msgstr " [BE8]" + +#: elf32-arm.c:15166 +#, c-format +msgid " [LE8]" +msgstr " [LE8]" + +#: elf32-arm.c:15172 +#, c-format +msgid " " +msgstr " <Ðепознато „EABI“ издање>" + +#: elf32-arm.c:15179 +#, c-format +msgid " [relocatable executable]" +msgstr " [премеÑтива извршна]" + +#: elf32-arm.c:15185 +#, c-format +msgid " [FDPIC ABI supplement]" +msgstr " [„FDPIC ABI“ додатак]" + +#: elf32-arm.c:15190 elfnn-aarch64.c:7335 +#, c-format +msgid "" +msgstr "<Ðепознат Ñкуп битова заÑтавице>" + +#: elf32-arm.c:15307 elf32-i386.c:1524 elf32-s390.c:925 elf32-tic6x.c:2724 +#: elf32-tilepro.c:1443 elf32-xtensa.c:1093 elf64-s390.c:847 +#: elf64-x86-64.c:1902 elfxx-sparc.c:1386 elfxx-tilegx.c:1664 +#: elfnn-aarch64.c:7606 elfnn-riscv.c:525 +#, c-format +msgid "%pB: bad symbol index: %d" +msgstr "%pB: лош Ð¸Ð½Ð´ÐµÐºÑ Ñимбола: %d" + +#: elf32-arm.c:15696 +#, c-format +msgid "FDPIC does not yet support %s relocation to become dynamic for executable" +msgstr "„FDPIC“ још увек не подржава „%s“ премештање да би поÑтао динамички за извршне" + +#: elf32-arm.c:16939 +#, c-format +msgid "errors encountered processing file %pB" +msgstr "наиђох на грешке током обраде датотеке „%pB“" + +#: elf32-arm.c:17326 elflink.c:12818 elflink.c:12865 +#, c-format +msgid "could not find section %s" +msgstr "не могу да нађем одељак „%s“" + +#: elf32-arm.c:18550 +#, c-format +msgid "%pB: error: Cortex-A8 erratum stub is allocated in unsafe location" +msgstr "%pB: грешка: окрајак грешке КортекÑа Ð8 је додељен небезбедној локацији" + +#. There's not much we can do apart from complain if this +#. happens. +#: elf32-arm.c:18577 +#, c-format +msgid "%pB: error: Cortex-A8 erratum stub out of range (input file too large)" +msgstr "%pB: грешка: окрајак грешке КортекÑа Ð8 је ван опÑега (улазна датотека је превелика)" + +#: elf32-arm.c:19404 elf32-arm.c:19426 +#, c-format +msgid "%pB: error: VFP11 veneer out of range" +msgstr "%pB: грешка: „VFP11“ превлака је ван опÑега" + +#: elf32-arm.c:19477 +#, c-format +msgid "%pB(%#): error: cannot create STM32L4XX veneer; jump out of range by % bytes; cannot encode branch instruction" +msgstr "%pB(%#): грешка: не могу да Ñтворим „STM32L4XX“ превлаку; иÑкочих из опÑега за % бајта; не могу да декодирам инÑтрукцију гране" + +#: elf32-arm.c:19516 +#, c-format +msgid "%pB: error: cannot create STM32L4XX veneer" +msgstr "%pB: грешка: не могу да Ñтворим „STM32L4XX“ превлаку" + +#: elf32-arm.c:20600 +#, c-format +msgid "error: %pB is already in final BE8 format" +msgstr "грешка: „%pB“ је већ у завршном запиÑу „BE8“" + +#: elf32-arm.c:20676 +#, c-format +msgid "error: source object %pB has EABI version %d, but target %pB has EABI version %d" +msgstr "грешка: изворни објекат „%pB“ Ñадржи „EABI“ издање %d, али циљни „%pB“ има „EABI“ издање %d" + +#: elf32-arm.c:20691 +#, c-format +msgid "error: %pB is compiled for APCS-%d, whereas target %pB uses APCS-%d" +msgstr "грешка: „%pB“ је преведен за „APCS-%d“, док циљни „%pB“ кориÑти „APCS-%d“" + +#: elf32-arm.c:20701 +#, c-format +msgid "error: %pB passes floats in float registers, whereas %pB passes them in integer registers" +msgstr "грешка: „%pB“ проÑлеђује децималне вредноÑти у региÑтре децималних, док их „%pB“ проÑлеђује у региÑтре целих вредноÑти" + +#: elf32-arm.c:20705 +#, c-format +msgid "error: %pB passes floats in integer registers, whereas %pB passes them in float registers" +msgstr "грешка: „%pB“ проÑлеђује децималне вредноÑти у региÑтре целих, док их „%pB“ проÑлеђује у региÑтре децималних вредноÑти" + +#: elf32-arm.c:20715 elf32-arm.c:20719 elf32-arm.c:20729 +#, c-format +msgid "error: %pB uses %s instructions, whereas %pB does not" +msgstr "грешка: „%pB“ кориÑти „%s“ инÑтрукције, али „%pB“ не" + +#: elf32-arm.c:20733 +#, c-format +msgid "error: %pB does not use %s instructions, whereas %pB does" +msgstr "грешка: „%pB“ не кориÑти „%s“ инÑтрукције, али „%pB“ да" + +#: elf32-arm.c:20752 +#, c-format +msgid "error: %pB uses software FP, whereas %pB uses hardware FP" +msgstr "грешка: „%pB“ кориÑти ÑофтверÑки покретни зарез, док „%pB“ кориÑти хардверÑки" + +#: elf32-arm.c:20756 +#, c-format +msgid "error: %pB uses hardware FP, whereas %pB uses software FP" +msgstr "грешка: „%pB“ кориÑти хардверÑки покретни зарез, док „%pB“ кориÑти ÑофтверÑки" + +#: elf32-arm.c:20770 +#, c-format +msgid "warning: %pB supports interworking, whereas %pB does not" +msgstr "упозорење: „%pB“ подржава међудејÑтво, док га „%pB“ не подржава" + +#: elf32-arm.c:20776 +#, c-format +msgid "warning: %pB does not support interworking, whereas %pB does" +msgstr "упозорење: „%pB“ не подржава међудејÑтво, док га „%pB“ подржава" + +#: elf32-avr.c:1516 elf32-bfin.c:3134 elf32-cris.c:2041 elf32-epiphany.c:573 +#: elf32-fr30.c:602 elf32-frv.c:4056 elf32-ft32.c:502 elf32-ip2k.c:1488 +#: elf32-iq2000.c:699 elf32-m32c.c:632 elf32-mep.c:534 elf32-metag.c:1994 +#: elf32-moxie.c:296 elf32-msp430.c:1375 elf32-mt.c:406 elf32-or1k.c:1825 +#: elf32-tilepro.c:3388 elf32-v850.c:2298 elf32-visium.c:688 +#: elf32-xstormy16.c:937 elf64-bpf.c:521 elf64-mmix.c:1549 elfxx-tilegx.c:3752 +msgid "internal error: dangerous relocation" +msgstr "унутрашња грешка: опаÑно премештање" + +#: elf32-avr.c:3327 elfnn-aarch64.c:3221 +#, c-format +msgid "cannot create stub entry %s" +msgstr "не могу да Ñтворим ÑƒÐ½Ð¾Ñ Ð¾ÐºÑ€Ð°Ñ˜ÐºÐ° „%s“" + +#: elf32-bfin.c:107 elf32-bfin.c:363 +msgid "relocation should be even number" +msgstr "премештање треба бити паран број" + +#: elf32-bfin.c:1584 +#, c-format +msgid "%pB(%pA+%#): unresolvable relocation against symbol `%s'" +msgstr "%pB(%pA+%#): нерешиво премештање наÑпрам Ñимбола „%s“" + +#: elf32-bfin.c:1616 elf32-i386.c:3443 elf32-m68k.c:4008 elf32-s390.c:3140 +#: elf64-s390.c:3089 elf64-x86-64.c:4112 +#, c-format +msgid "%pB(%pA+%#): reloc against `%s': error %d" +msgstr "%pB(%pA+%#): премештање наÑпрам „%s“: грешка %d" + +#: elf32-bfin.c:2641 +#, c-format +msgid "%pB: relocation at `%pA+%#' references symbol `%s' with nonzero addend" +msgstr "%pB: премештање на „%pA+%#“ Ñтвара упуту Ñимбола „%s“ Ñа не-нултим Ñабирком" + +#: elf32-bfin.c:2658 +msgid "relocation references symbol not defined in the module" +msgstr "премештање упућује на Ñимбол који није дефиниÑан у модулу" + +#: elf32-bfin.c:2755 +msgid "R_BFIN_FUNCDESC references dynamic symbol with nonzero addend" +msgstr "„R_BFIN_FUNCDESC“ Ñтвара упуту динамичког Ñимбола Ñа не-нултим Ñабирком" + +#: elf32-bfin.c:2795 elf32-bfin.c:2916 +msgid "cannot emit fixups in read-only section" +msgstr "не могу да пошаљем иÑправке у одељку Ñамо за читање" + +#: elf32-bfin.c:2825 elf32-bfin.c:2953 elf32-lm32.c:1006 elf32-sh.c:4389 +msgid "cannot emit dynamic relocations in read-only section" +msgstr "не могу да пошаљем динамичка премештања у одељку Ñамо за читање" + +#: elf32-bfin.c:2875 +msgid "R_BFIN_FUNCDESC_VALUE references dynamic symbol with nonzero addend" +msgstr "„R_BFIN_FUNCDESC_VALUE“ Ñтвара упуту динамичког Ñимбола Ñа не-нултим Ñабирком" + +#: elf32-bfin.c:3038 +msgid "relocations between different segments are not supported" +msgstr "премештања између различитих Ñегмената ниÑу подржана" + +#: elf32-bfin.c:3039 +msgid "warning: relocation references a different segment" +msgstr "упозорење: премештање упућује на другачији Ñегмент" + +#: elf32-bfin.c:4770 elf32-frv.c:6584 +#, c-format +msgid "%pB: cannot link non-fdpic object file into fdpic executable" +msgstr "%pB: не могу да повежем датотеку не-„fdpic“ објекта у „fdpic“ извршну" + +#: elf32-bfin.c:4774 elf32-frv.c:6588 +#, c-format +msgid "%pB: cannot link fdpic object file into non-fdpic executable" +msgstr "%pB: не могу да повежем датотеку „fdpic“ објекта у не-„fdpic“ извршну" + +#: elf32-bfin.c:4924 +#, c-format +msgid "*** check this relocation %s" +msgstr "*** проверава ово премештање „%s“" + +#: elf32-bfin.c:5040 +msgid "the bfin target does not currently support the generation of copy relocations" +msgstr "„bfin“ циљ тренутно не подржава Ñтварање премештања умножавања" + +#: elf32-bfin.c:5334 elf32-cr16.c:2731 elf32-m68k.c:4422 +msgid "unsupported relocation type" +msgstr "неподржана врÑта премештања" + +#: elf32-cris.c:1119 +#, c-format +msgid "%pB, section %pA: unresolvable relocation %s against symbol `%s'" +msgstr "„%pB“, одељак „%pA“: нерешиво премештање „%s“ наÑпрам Ñимбола „%s“" + +#: elf32-cris.c:1184 +#, c-format +msgid "%pB, section %pA: no PLT nor GOT for relocation %s against symbol `%s'" +msgstr "„%pB“, одељак „%pA“: нема ни „PLT“ ни „GOT“ за премештање „%s“ наÑпрам Ñимбола „%s“" + +#: elf32-cris.c:1187 +#, c-format +msgid "%pB, section %pA: no PLT for relocation %s against symbol `%s'" +msgstr "„%pB“, одељак „%pA“: нема „PLT“ за премештање „%s“ наÑпрам Ñимбола „%s“" + +#: elf32-cris.c:1193 elf32-cris.c:1326 elf32-cris.c:1591 elf32-cris.c:1674 +#: elf32-cris.c:1827 elf32-tic6x.c:2560 +msgid "[whose name is lost]" +msgstr "[чији назив је изгубљен]" + +#: elf32-cris.c:1311 elf32-tic6x.c:2544 +#, c-format +msgid "%pB, section %pA: relocation %s with non-zero addend % against local symbol" +msgstr "„%pB“, одељак „%pA“: премештање „%s“ Ñа не-нултим Ñабирком % наÑпрам локалног Ñимбола" + +#: elf32-cris.c:1320 elf32-cris.c:1668 elf32-cris.c:1821 elf32-tic6x.c:2553 +#, c-format +msgid "%pB, section %pA: relocation %s with non-zero addend % against symbol `%s'" +msgstr "„%pB“, одељак „%pA“: премештање „%s“ Ñа не-нултим Ñабирком % наÑпрам Ñимбола „%s“" + +#: elf32-cris.c:1347 +#, c-format +msgid "%pB, section %pA: relocation %s is not allowed for global symbol: `%s'" +msgstr "„%pB“, одељак „%pA“: премештање „%s“ није дозвољено за општи Ñимбол: „%s“" + +#: elf32-cris.c:1364 +#, c-format +msgid "%pB, section %pA: relocation %s with no GOT created" +msgstr "„%pB“, одељак „%pA“: премештање „%s“ без Ñтвореног „GOT“" + +#. We shouldn't get here for GCC-emitted code. +#: elf32-cris.c:1581 +#, c-format +msgid "%pB, section %pA: relocation %s has an undefined reference to `%s', perhaps a declaration mixup?" +msgstr "„%pB“, одељак „%pA“: премештање „%s“ Ñадржи недефиниÑану упуту ка „%s“, можда је дошло до мешања декларације?" + +#: elf32-cris.c:1584 +#, c-format +msgid "%pB, section %pA: relocation %s is not allowed for `%s', a global symbol with default visibility, perhaps a declaration mixup?" +msgstr "„%pB“, одељак „%pA“: премештање „%s“ није дозвољено за Ñимбол „%s“, који је дефиниÑан изван програма, можда је дошло до мешања декларације?" + +#: elf32-cris.c:1955 +#, c-format +msgid "%pB, section %pA: relocation %s is not allowed for symbol: `%s' which is defined outside the program, perhaps a declaration mixup?" +msgstr "„%pB“, одељак „%pA“: премештање „%s“ није дозвољено за Ñимбол „%s“, који је дефиниÑан изван програма, можда је дошло до мешања декларације?" + +#: elf32-cris.c:2008 +msgid "(too many global variables for -fpic: recompile with -fPIC)" +msgstr "(превише општих променљивих за „-fpic“: поново преведите Ñа „-fPIC“)" + +#: elf32-cris.c:2015 +msgid "(thread-local data too big for -fpic or -msmall-tls: recompile with -fPIC or -mno-small-tls)" +msgstr "(локални подаци нити Ñу превелики за „-fpic“ или „-msmall-tls“: поново преведите Ñа „-fPIC“ или „-mno-small-tls“)" + +#: elf32-cris.c:3050 +#, c-format +msgid "%pB, section %pA: v10/v32 compatible object must not contain a PIC relocation" +msgstr "„%pB“, одељак „%pA“: v10/v32 ÑаглаÑан објекат не Ñме да Ñадржи „PIC“ премештање" + +#: elf32-cris.c:3104 +#, c-format +msgid "" +"%pB, section %pA:\n" +" relocation %s not valid in a shared object; typically an option mixup, recompile with -fPIC" +msgstr "" +"„%pB“, одељак „%pA“:\n" +" премештање „%s“ није иÑправно у дељеном објекту; типично мешање опција, поново преведите Ñа „-fPIC“" + +#: elf32-cris.c:3322 +#, c-format +msgid "%pB, section %pA: relocation %s should not be used in a shared object; recompile with -fPIC" +msgstr "„%pB“, одељак „%pA“: премештање „%s“ не треба да Ñе кориÑти у дељеном објекту; поново преведите Ñа „-fPIC“" + +#: elf32-cris.c:3700 +#, c-format +msgid "%pB, section `%pA', to symbol `%s': relocation %s should not be used in a shared object; recompile with -fPIC" +msgstr "„%pB“, одељак „%pA“, ка Ñимболу „%s“: премештање „%s“ не треба да Ñе кориÑти у дељеном објекту; поново преведите Ñа „-fPIC“" + +#: elf32-cris.c:3812 +msgid "unexpected machine number" +msgstr "неочекивани број машине" + +#: elf32-cris.c:3864 +#, c-format +msgid " [symbols have a _ prefix]" +msgstr " [Ñимболи Ñадрже префикÑе „ _ “]" + +#: elf32-cris.c:3867 +#, c-format +msgid " [v10 and v32]" +msgstr " [v10 и v32]" + +#: elf32-cris.c:3870 +#, c-format +msgid " [v32]" +msgstr " [v32]" + +#: elf32-cris.c:3914 +#, c-format +msgid "%pB: uses _-prefixed symbols, but writing file with non-prefixed symbols" +msgstr "%pB: кориÑти Ñимболе Ñа префикÑом „_“, али запиÑује датотеку Ñа Ñимболима без префикÑа" + +#: elf32-cris.c:3915 +#, c-format +msgid "%pB: uses non-prefixed symbols, but writing file with _-prefixed symbols" +msgstr "%pB: кориÑти Ñимболе без префикÑа, али запиÑује датотеку Ñа Ñимболима Ñа префикÑом „_“" + +#: elf32-cris.c:3934 +#, c-format +msgid "%pB contains CRIS v32 code, incompatible with previous objects" +msgstr "„%pB„ Ñадржи „CRIS v32“ код који није ÑаглаÑан Ñа претходним објектима" + +#: elf32-cris.c:3936 +#, c-format +msgid "%pB contains non-CRIS-v32 code, incompatible with previous objects" +msgstr "„%pB„ Ñадржи не-„CRIS-v32“ код који није ÑаглаÑан Ñа претходним објектима" + +#: elf32-csky.c:2022 +msgid "GOT table size out of range" +msgstr "величина „GOT“ табеле је ван опÑега" + +#: elf32-csky.c:2802 +#, c-format +msgid "warning: unrecognized arch eflag '%#lx'" +msgstr "упозорење: непрепозната „e“-заÑтавица архитектуре „%#lx“" + +#: elf32-csky.c:2862 +#, c-format +msgid "%pB: machine flag conflict with target" +msgstr "%pB: заÑтавица машине је у Ñукобу Ñа циљем" + +#: elf32-csky.c:2875 +#, c-format +msgid "warning: file %pB's arch flag ck%s conflicts with target ck%s, using ck%s" +msgstr "упозорење: заÑтавица архитектуре “%pB“-а датотеке „ck%s“ је у Ñукобу Ñа циљним „ck%s“, кориÑтим „ck%s“" + +#. The r_type is error, not support it. +#: elf32-csky.c:4118 elf32-i386.c:350 +#, c-format +msgid "%pB: unsupported relocation type: %#x" +msgstr "%pB: неподржана врÑта премештања: %#x" + +#: elf32-dlx.c:141 +#, c-format +msgid "branch (PC rel16) to section (%s) not supported" +msgstr "гранање (PC rel16) у одељак (%s) није подржано" + +#: elf32-dlx.c:204 +#, c-format +msgid "jump (PC rel26) to section (%s) not supported" +msgstr "уÑкакање (PC rel26) у одељак (%s) није подржано" + +#. Only if it's not an unresolved symbol. +#: elf32-epiphany.c:569 elf32-ip2k.c:1484 +msgid "unsupported relocation between data/insn address spaces" +msgstr "није подржано премештање између размака адреÑе „data/insn“" + +#: elf32-frv.c:1452 elf32-frv.c:1603 +msgid "relocation requires zero addend" +msgstr "премештање захтева нулти Ñабирак" + +#: elf32-frv.c:2832 +#, c-format +msgid "%H: relocation to `%s+%v' may have caused the error above\n" +msgstr "%H: „премештање у „%s+%v“ је можда проузроковало горњу грешку\n" + +#: elf32-frv.c:2849 +msgid "%H: relocation references symbol not defined in the module\n" +msgstr "%H: „премештање упућује на Ñимбол који није дефиниÑан у модулу\n" + +#: elf32-frv.c:2925 +msgid "%H: R_FRV_GETTLSOFF not applied to a call instruction\n" +msgstr "%H: „R_FRV_GETTLSOFF“ није примењено на инÑтрукцију позива\n" + +#: elf32-frv.c:2966 +msgid "%H: R_FRV_GOTTLSDESC12 not applied to an lddi instruction\n" +msgstr "%H: „R_FRV_GOTTLSDESC12“ није примењено на инÑтрукцију „lddi“\n" + +#: elf32-frv.c:3037 +msgid "%H: R_FRV_GOTTLSDESCHI not applied to a sethi instruction\n" +msgstr "%H: „R_FRV_GOTTLSDESCHI“ није примењено на инÑтрукцију „sethi“\n" + +#: elf32-frv.c:3074 +msgid "%H: R_FRV_GOTTLSDESCLO not applied to a setlo or setlos instruction\n" +msgstr "%H: „R_FRV_GOTTLSDESCLO“ није примењено на инÑтрукцију „setlo“ или „setlos“\n" + +#: elf32-frv.c:3121 +msgid "%H: R_FRV_TLSDESC_RELAX not applied to an ldd instruction\n" +msgstr "%H: „R_FRV_TLSDESC_RELAX“ није примењено на инÑтрукцију „ldd“\n" + +#: elf32-frv.c:3205 +msgid "%H: R_FRV_GETTLSOFF_RELAX not applied to a calll instruction\n" +msgstr "%H: „R_FRV_GETTLSOFF_RELAX“ није примењено на инÑтрукцију „calll“\n" + +#: elf32-frv.c:3259 +msgid "%H: R_FRV_GOTTLSOFF12 not applied to an ldi instruction\n" +msgstr "%H: „R_FRV_GOTTLSOFF12“ није примењено на инÑтрукцију „ldi“\n" + +#: elf32-frv.c:3289 +msgid "%H: R_FRV_GOTTLSOFFHI not applied to a sethi instruction\n" +msgstr "%H: „R_FRV_GOTTLSOFFHI“ није примењено на инÑтрукцију „sethi“\n" + +#: elf32-frv.c:3318 +msgid "%H: R_FRV_GOTTLSOFFLO not applied to a setlo or setlos instruction\n" +msgstr "%H: „R_FRV_GOTTLSOFFLO“ није примењено на инÑтрукцију „setlo“ или „setlos“\n" + +#: elf32-frv.c:3348 +msgid "%H: R_FRV_TLSOFF_RELAX not applied to an ld instruction\n" +msgstr "%H: „R_FRV_TLSOFF_RELAX“ није примењено на инÑтрукцију „ld“\n" + +#: elf32-frv.c:3393 +msgid "%H: R_FRV_TLSMOFFHI not applied to a sethi instruction\n" +msgstr "%H: „R_FRV_TLSMOFFHI“ није примењено на инÑтрукцију „sethi“\n" + +#: elf32-frv.c:3420 +msgid "R_FRV_TLSMOFFLO not applied to a setlo or setlos instruction\n" +msgstr "R_FRV_TLSMOFFLO“ није примењено на инÑтрукцију „setlo“ или „setlos“\n" + +#: elf32-frv.c:3541 elf32-frv.c:3661 +msgid "%H: %s references dynamic symbol with nonzero addend\n" +msgstr "%H: „%s“ Ñтвара упуту динамичког Ñимбола Ñа не-нултим Ñабирком\n" + +#: elf32-frv.c:3582 elf32-frv.c:3703 +msgid "%H: cannot emit fixups in read-only section\n" +msgstr "%H: не могу да пошаљем иÑправке у одељку који је Ñамо за читање\n" + +#: elf32-frv.c:3612 elf32-frv.c:3745 +msgid "%H: cannot emit dynamic relocations in read-only section\n" +msgstr "%H: не могу да пошаљем динамичка премештања у одељку Ñамо за читање\n" + +#: elf32-frv.c:3917 +#, c-format +msgid "%H: reloc against `%s' references a different segment\n" +msgstr "%H: премештање наÑпрам „%s“ Ñтвара упуту другог Ñегмента\n" + +#: elf32-frv.c:4068 +#, c-format +msgid "%H: reloc against `%s': %s\n" +msgstr "%H: премештање наÑпрам „%s“: %s\n" + +#: elf32-frv.c:6495 +#, c-format +msgid "%pB: compiled with %s and linked with modules that use non-pic relocations" +msgstr "%pB: преведено Ñа „%s“ и повезано Ñа модулима који кориÑте не-„pic“ премештања" + +#: elf32-frv.c:6549 elf32-iq2000.c:830 elf32-m32c.c:876 +#, c-format +msgid "%pB: compiled with %s and linked with modules compiled with %s" +msgstr "%pB: преведено Ñа „%s“ и повезано Ñа модулима који Ñу преведени Ñа „%s“" + +#: elf32-frv.c:6562 +#, c-format +msgid "%pB: uses different unknown e_flags (%#x) fields than previous modules (%#x)" +msgstr "%pB: кориÑти другачија непозната поља „e_flags“ (%#x) него претходни модули (%#x)" + +#: elf32-gen.c:71 +#, c-format +msgid "%pB: relocations in generic ELF (EM: %d)" +msgstr "%pB: премештања у општем „ELF“-у (EM: %d)" + +#: elf32-hppa.c:763 elf32-hppa.c:844 elf64-ppc.c:11859 +msgid "%F%P: Could not assign %pA to an output section. Retry without --enable-non-contiguous-regions.\n" +msgstr "%F%P: Ðе могу да доделим „%pA“ излазном одељку. Покушајте без „--enable-non-contiguous-regions“.\n" + +#: elf32-hppa.c:865 elf32-hppa.c:3407 +#, c-format +msgid "%pB(%pA+%#): cannot reach %s, recompile with -ffunction-sections" +msgstr "%pB(%pA+%#): не могу да доÑтигнем „%s“, поново преведите Ñа „-ffunction-sections“" + +#: elf32-hppa.c:1243 +#, c-format +msgid "%pB: relocation %s can not be used when making a shared object; recompile with -fPIC" +msgstr "%pB: премештање „%s“ Ñе не може кориÑтити приликом Ñтварања дељеног објекта; поново преведите Ñа „-fPIC“" + +#: elf32-hppa.c:2584 +#, c-format +msgid "%pB: duplicate export stub %s" +msgstr "%pB: удвоÑтручени окрајак извоза „%s“" + +#: elf32-hppa.c:3240 +#, c-format +msgid "%pB(%pA+%#): %s fixup for insn %#x is not supported in a non-shared link" +msgstr "%pB(%pA+%#): иÑправка „%s“ за „insn %#x“ није подржана у не-дељеној вези" + +#: elf32-hppa.c:4036 +#, c-format +msgid "%s has both normal and TLS relocs" +msgstr "„%s“ има и нормално и „TLS“ премештање" + +#: elf32-hppa.c:4054 +#, c-format +msgid "%pB:%s has both normal and TLS relocs" +msgstr "%pB: „%s“ има и нормално и „TLS“ премештање" + +#: elf32-hppa.c:4113 +#, c-format +msgid "%pB(%pA+%#): cannot handle %s for %s" +msgstr "%pB(%pA+%#): не могу да радим Ñа „%s“ за „%s“" + +#: elf32-hppa.c:4417 +msgid ".got section not immediately after .plt section" +msgstr "одељак „.got“ није одмах након одељка „.plt“" + +#: elf32-i386.c:1169 elf64-x86-64.c:1382 +#, c-format +msgid "%pB: TLS transition from %s to %s against `%s' at %# in section `%pA' failed" +msgstr "%pB: није уÑпео „TLS“ прелаз Ñа „%s“ на „%s“ наÑпрам „%s“ при %# у одељку „%pA“" + +#: elf32-i386.c:1272 +#, c-format +msgid "%pB: direct GOT relocation R_386_GOT32X against `%s' without base register can not be used when making a shared object" +msgstr "%pB: директно „GOT“ премештање „R_386_GOT32X“ наÑпрам „%s“ без региÑтра оÑнове Ñе не може кориÑтити када Ñе Ñтвара дељени објекат" + +#: elf32-i386.c:1721 elf32-s390.c:1153 elf32-sh.c:5494 elf32-tilepro.c:1556 +#: elf32-xtensa.c:1265 elf64-s390.c:1085 elfxx-sparc.c:1555 +#: elfxx-tilegx.c:1769 elfnn-riscv.c:437 +#, c-format +msgid "%pB: `%s' accessed both as normal and thread local symbol" +msgstr "%pB: „%s“ Ñе приÑтупило и као нормалном и као Ñимболу локалне нити" + +#: elf32-i386.c:1793 +#, c-format +msgid "%pB: unsupported non-PIC call to IFUNC `%s'" +msgstr "%pB: неподржани не-„PIC“ позив за „IFUNC“ „%s“" + +#: elf32-i386.c:2373 elf64-x86-64.c:2721 +#, c-format +msgid "%pB: relocation %s against STT_GNU_IFUNC symbol `%s' isn't supported" +msgstr "%pB: премештање „%s“ наÑпрам „STT_GNU_IFUNC“ Ñимбола „%s“ није подржано" + +#: elf32-i386.c:2406 elf32-i386.c:3654 elf32-i386.c:3795 elf64-x86-64.c:2778 +#: elf64-x86-64.c:4285 elf64-x86-64.c:4441 +#, c-format +msgid "Local IFUNC function `%s' in %pB\n" +msgstr "Локална „IFUNC“ функција „%s“ у „%pB“\n" + +#: elf32-i386.c:2563 +#, c-format +msgid "%pB: direct GOT relocation %s against `%s' without base register can not be used when making a shared object" +msgstr "%pB: директно „GOT“ премештање „%s“ наÑпрам „%s“ без региÑтра оÑнове Ñе не може кориÑтити када Ñе Ñтвара дељени објекат" + +#: elf32-i386.c:2598 elf64-x86-64.c:2977 +msgid "hidden symbol" +msgstr "Ñкривени Ñимбол" + +#: elf32-i386.c:2601 elf64-x86-64.c:2980 +msgid "internal symbol" +msgstr "унутрашњи Ñимбол" + +#: elf32-i386.c:2604 elf64-x86-64.c:2983 +msgid "protected symbol" +msgstr "заштићени Ñимбол" + +#: elf32-i386.c:2607 elf64-x86-64.c:2986 +msgid "symbol" +msgstr "Ñимбол" + +#: elf32-i386.c:2613 +#, c-format +msgid "%pB: relocation R_386_GOTOFF against undefined %s `%s' can not be used when making a shared object" +msgstr "%pB: премештање „R_386_GOTOFF“ наÑпрам недефиниÑаног %s „%s“ Ñе не може кориÑтити када Ñе Ñтвара дељени објекат" + +#: elf32-i386.c:2626 +#, c-format +msgid "%pB: relocation R_386_GOTOFF against protected %s `%s' can not be used when making a shared object" +msgstr "%pB: премештање „R_386_GOTOFF“ наÑпрам заштићеног %s „%s“ Ñе не може кориÑтити када Ñе Ñтвара дељени објекат" + +#: elf32-ip2k.c:855 elf32-ip2k.c:861 elf32-ip2k.c:928 elf32-ip2k.c:934 +msgid "ip2k relaxer: switch table without complete matching relocation information." +msgstr "релакÑер „ip2k“: пребацивање табеле без потпуног подударања података о премештању." + +#: elf32-ip2k.c:878 elf32-ip2k.c:961 +msgid "ip2k relaxer: switch table header corrupt." +msgstr "релакÑер „ip2k“: оштећено је заглавље табеле пребацивача." + +#: elf32-ip2k.c:1297 +#, c-format +msgid "ip2k linker: missing page instruction at %# (dest = %#)" +msgstr "увезивач „ip2k“: недоÑтаје инÑтрукција Ñтранице на %# (циљ = %#)" + +#: elf32-ip2k.c:1316 +#, c-format +msgid "ip2k linker: redundant page instruction at %# (dest = %#)" +msgstr "увезивач „ip2k“: Ñувишна инÑтрукција Ñтранице на %# (циљ = %#)" + +#: elf32-lm32.c:608 elf32-nios2.c:3148 +msgid "global pointer relative relocation when _gp not defined" +msgstr "релативно премештање општег показивача када „_gp“ није дефиниÑано" + +#: elf32-lm32.c:663 elf32-nios2.c:3585 +msgid "global pointer relative address out of range" +msgstr "релативна адреÑа општег показивача је ван опÑега" + +#: elf32-lm32.c:959 +#, c-format +msgid "internal error: addend should be zero for %s" +msgstr "унутрашња грешка: Ñабирак треба да буде нула за „%s“" + +#: elf32-m32r.c:1471 +msgid "SDA relocation when _SDA_BASE_ not defined" +msgstr "„SDA“ премештање када „_SDA_BASE_“ није дефиниÑано" + +#: elf32-m32r.c:2799 elf32-microblaze.c:1097 elf32-microblaze.c:1145 +#, c-format +msgid "%pB: the target (%s) of an %s relocation is in the wrong section (%pA)" +msgstr "%pB: мета (%s) премештања „%s“ је у погрешном одељку (%pA)" + +#: elf32-m32r.c:3302 +#, c-format +msgid "%pB: instruction set mismatch with previous modules" +msgstr "%pB: Ñкуп инÑтрукција Ñе разликује од претходних модула" + +#: elf32-m32r.c:3323 elf32-nds32.c:6855 +#, c-format +msgid "private flags = %lx" +msgstr "приватне заÑтавице = %lx" + +#: elf32-m32r.c:3328 +#, c-format +msgid ": m32r instructions" +msgstr ": инÑтрукције „m32r“" + +#: elf32-m32r.c:3329 +#, c-format +msgid ": m32rx instructions" +msgstr ": инÑтрукције „m32rx“" + +#: elf32-m32r.c:3330 +#, c-format +msgid ": m32r2 instructions" +msgstr ": инÑтрукције „m32r2“" + +#: elf32-m68hc1x.c:1136 +#, c-format +msgid "reference to the far symbol `%s' using a wrong relocation may result in incorrect execution" +msgstr "упућивање на далеки Ñимбол „%s“ употребом погрешног премештања може довеÑти до нетачног извршавања" + +#: elf32-m68hc1x.c:1167 +#, c-format +msgid "XGATE address (%lx) is not within shared RAM(0xE000-0xFFFF), therefore you must manually offset the address, and possibly manage the page, in your code." +msgstr "ÐдреÑа „XGATE“ (%lx) није унутар дељене меморије (0xE000-0xFFFF), Ñтога морате ручно да померите адреÑу, и по могућÑтву да радите Ñа Ñтраницом у вашем коду." + +#: elf32-m68hc1x.c:1183 +#, c-format +msgid "banked address [%lx:%04lx] (%lx) is not in the same bank as current banked address [%lx:%04lx] (%lx)" +msgstr "групиÑана адреÑа [%lx:%04lx] (%lx) није у иÑтој групи као тренутна групиÑана адреÑа [%lx:%04lx] (%lx)" + +#: elf32-m68hc1x.c:1198 +#, c-format +msgid "reference to a banked address [%lx:%04lx] in the normal address space at %04lx" +msgstr "упута на групиÑану адреÑу [%lx:%04lx] у обичном проÑтору адреÑе на %04lx" + +#: elf32-m68hc1x.c:1234 +#, c-format +msgid "S12 address (%lx) is not within shared RAM(0x2000-0x4000), therefore you must manually offset the address in your code" +msgstr "ÐдреÑа „S12“ (%lx) није унутар дељене меморије (0x2000-0x4000), Ñтога морате ручно да померите адреÑу у вашем коду" + +#: elf32-m68hc1x.c:1358 +#, c-format +msgid "%pB: linking files compiled for 16-bit integers (-mshort) and others for 32-bit integers" +msgstr "%pB: Ñвезујуће датотеке Ñу преведене за целе бројеве од 16 бита (-mshort) а друге за целе бројеве од 32 бита" + +#: elf32-m68hc1x.c:1365 +#, c-format +msgid "%pB: linking files compiled for 32-bit double (-fshort-double) and others for 64-bit double" +msgstr "%pB: Ñвезујуће датотеке Ñу преведене за целе бројеве од 32 бита (-fshort-double) а друге за целе бројеве од 64 бита" + +#: elf32-m68hc1x.c:1374 +#, c-format +msgid "%pB: linking files compiled for HCS12 with others compiled for HC12" +msgstr "%pB: Ñвезујуће датотеке Ñу преведене за „HCS12“ Ñа другима преведеним за „HC12“" + +#: elf32-m68hc1x.c:1419 elf32-xgate.c:497 +#, c-format +msgid "[abi=32-bit int, " +msgstr "[аби=32-битни цео број, " + +#: elf32-m68hc1x.c:1421 elf32-xgate.c:499 +#, c-format +msgid "[abi=16-bit int, " +msgstr "[аби=16-битни цео број, " + +#: elf32-m68hc1x.c:1424 elf32-xgate.c:502 +#, c-format +msgid "64-bit double, " +msgstr "64-битни мешовити, " + +#: elf32-m68hc1x.c:1426 elf32-xgate.c:504 +#, c-format +msgid "32-bit double, " +msgstr "32-битни мешовити, " + +#: elf32-m68hc1x.c:1429 +#, c-format +msgid "cpu=HC11]" +msgstr "процеÑор=HC11]" + +#: elf32-m68hc1x.c:1431 +#, c-format +msgid "cpu=HCS12]" +msgstr "процеÑор=HCS12]" + +#: elf32-m68hc1x.c:1433 +#, c-format +msgid "cpu=HC12]" +msgstr "процеÑор=HC12]" + +#: elf32-m68hc1x.c:1436 +#, c-format +msgid " [memory=bank-model]" +msgstr " [меморија=модел-групе]" + +#: elf32-m68hc1x.c:1438 +#, c-format +msgid " [memory=flat]" +msgstr " [меморија=обично]" + +#: elf32-m68hc1x.c:1441 +#, c-format +msgid " [XGATE RAM offsetting]" +msgstr " [XGATE RAM померај]" + +#: elf32-m68k.c:1159 elf32-m68k.c:1167 elf32-ppc.c:3583 elf32-ppc.c:3591 +#, c-format +msgid "%pB uses hard float, %pB uses soft float" +msgstr "„%pB“ кориÑти хардверÑки покретни зарез, „%pB“ кориÑти ÑофтверÑки покретни зарез" + +#: elf32-m68k.c:1282 elf32-m68k.c:1283 vms-alpha.c:7664 vms-alpha.c:7680 +msgid "unknown" +msgstr "непознато" + +#: elf32-m68k.c:1733 +#, c-format +msgid "%pB: GOT overflow: number of relocations with 8-bit offset > %d" +msgstr "%pB: прекорачење „GOT“: број премештања Ñа 8-битним померајем > %d" + +#: elf32-m68k.c:1740 +#, c-format +msgid "%pB: GOT overflow: number of relocations with 8- or 16-bit offset > %d" +msgstr "%pB: прекорачење „GOT“: број премештања Ñа 8- или 16-битним померајем > %d" + +#. Pacify gcc -Wall. +#: elf32-mep.c:139 +#, c-format +msgid "mep: no reloc for code %d" +msgstr "mep: нема премештања за код „%d“" + +#: elf32-mep.c:146 +#, c-format +msgid "MeP: howto %d has type %d" +msgstr "MeP: „howto“ „%d“ има врÑту „%d“" + +#: elf32-mep.c:622 +#, c-format +msgid "%pB and %pB are for different cores" +msgstr "„%pB“ и „%pB“ Ñу за различита језгра" + +#: elf32-mep.c:641 +#, c-format +msgid "%pB and %pB are for different configurations" +msgstr "„%pB“ и „%pB“ Ñу за различита подешавања" + +#: elf32-mep.c:679 +#, c-format +msgid "private flags = 0x%lx" +msgstr "приватне заÑтавице = 0x%lx" + +#: elf32-metag.c:1859 +#, c-format +msgid "%pB(%pA): multiple TLS models are not supported" +msgstr "%pB(%pA): више „TLS“ модела није подржано" + +#: elf32-metag.c:1862 +#, c-format +msgid "%pB(%pA): shared library symbol %s encountered whilst performing a static link" +msgstr "%pB(%pA): наиђох на Ñимбол дељене библиотеке „%s“ за време обављања Ñтатичке везе" + +#: elf32-microblaze.c:1540 elf32-tilepro.c:3029 elfxx-sparc.c:3427 +#: elfxx-tilegx.c:3417 +#, c-format +msgid "%pB: probably compiled without -fPIC?" +msgstr "%pB: вероватно је преведено без „-fPIC“?" + +#: elf32-mips.c:1775 elf64-mips.c:3516 elfn32-mips.c:3332 +msgid "literal relocation occurs for an external symbol" +msgstr "дошло је до доÑловног премештања Ñпољног Ñимбола" + +#: elf32-mips.c:1822 elf32-score.c:569 elf32-score7.c:469 elf64-mips.c:3559 +#: elfn32-mips.c:3373 +msgid "32bits gp relative relocation occurs for an external symbol" +msgstr "дошло је до 32-битног гп релативног премештања Ñпољног Ñимбола" + +#: elf32-msp430.c:846 elf32-msp430.c:1160 +msgid "try enabling relaxation to avoid relocation truncations" +msgstr "покушајте да укључите опуштање да биÑте избегли Ñкраћивања премештања" + +#: elf32-msp430.c:1367 +msgid "internal error: branch/jump to an odd address detected" +msgstr "унутрашња грешка: откривено је гранање/Ñкок на непарну адреÑу" + +#: elf32-msp430.c:2532 +#, c-format +msgid "warning: %pB: unknown MSPABI object attribute %d" +msgstr "упозорење: %pB: „%d“ атрибут „MSPABI“ објекта није познат" + +#: elf32-msp430.c:2633 +#, c-format +msgid "error: %pB uses %s instructions but %pB uses %s" +msgstr "грешка: „%pB“ кориÑти инÑтрукције „%s“ али „%pB“ кориÑти „%s“" + +#: elf32-msp430.c:2645 +#, c-format +msgid "error: %pB uses the %s code model whereas %pB uses the %s code model" +msgstr "грешка: „%pB“ кориÑти модел „%s“ кода док „%pB“ кориÑти модел „%s“ кода" + +#: elf32-msp430.c:2658 +#, c-format +msgid "error: %pB uses the large code model but %pB uses MSP430 instructions" +msgstr "грешка: „%pB“ кориÑти велики модел кода али „%pB“ кориÑти инÑтрукције „MSP430“" + +#: elf32-msp430.c:2669 +#, c-format +msgid "error: %pB uses the %s data model whereas %pB uses the %s data model" +msgstr "грешка: „%pB“ кориÑти модел „%s“ података док „%pB“ кориÑти модел „%s“ података" + +#: elf32-msp430.c:2682 +#, c-format +msgid "error: %pB uses the small code model but %pB uses the %s data model" +msgstr "грешка: „%pB“ кориÑти мали модел кода али „%pB“ кориÑти модел „%s“ података" + +#: elf32-msp430.c:2694 +#, c-format +msgid "error: %pB uses the %s data model but %pB only uses MSP430 instructions" +msgstr "грешка: „%pB“ кориÑти модел „%s“ података али „%pB“ кориÑти инÑтрукције „MSP430“" + +#: elf32-msp430.c:2719 +#, c-format +msgid "error: %pB can use the upper region for data, but %pB assumes data is exclusively in lower memory" +msgstr "грешка: „%pB“ може да кориÑти горњу облаÑÑ‚ за податке, али „%pB“ подразумева да Ñу подаци иÑкључиво у доњој меморији" + +#: elf32-nds32.c:3625 +#, c-format +msgid "error: can't find symbol: %s" +msgstr "грешка: не могу да нађем Ñимбол: %s" + +#: elf32-nds32.c:5528 +#, c-format +msgid "%pB: warning: %s unsupported in shared mode" +msgstr "%pB: упозорење: „%s“ није подржано у дељеном режиму" + +#: elf32-nds32.c:5654 +#, c-format +msgid "%pB: warning: unaligned access to GOT entry" +msgstr "%pB: упозорење: непоравнат приÑтуп уноÑу „GOT“" + +#: elf32-nds32.c:5695 +#, c-format +msgid "%pB: warning: relocate SDA_BASE failed" +msgstr "%pB: упозорење: није уÑпело премештање „SDA_BASE“" + +#: elf32-nds32.c:5717 +#, c-format +msgid "%pB(%pA): warning: unaligned small data access of type %d" +msgstr "%pB(%pA): упозорење: приÑтуп непоравнатим малим подацима врÑте „%d“" + +#: elf32-nds32.c:6643 +#, c-format +msgid "%pB: ISR vector size mismatch with previous modules, previous %u-byte, current %u-byte" +msgstr "%pB: величина вектора „ISR“ Ñе разликује од претходних модула: претходна %u бајта; текућа %u бајта" + +#: elf32-nds32.c:6691 +#, c-format +msgid "%pB: warning: endian mismatch with previous modules" +msgstr "%pB: упозорење: крајњоÑÑ‚ Ñе разликује од претходних модула" + +#: elf32-nds32.c:6705 +#, c-format +msgid "%pB: warning: older version of object file encountered, please recompile with current tool chain" +msgstr "%pB: упозорење: наишао Ñам на Ñтарије издање датотеке објекта, преведите поново Ñа текућим ланцем алата" + +#: elf32-nds32.c:6793 +#, c-format +msgid "%pB: error: ABI mismatch with previous modules" +msgstr "%pB: грешка: „ABI“ Ñе разликује од претходних модула" + +#: elf32-nds32.c:6803 +#, c-format +msgid "%pB: error: instruction set mismatch with previous modules" +msgstr "%pB: грешка: Ñкуп инÑтрукција Ñе разликује од претходних модула" + +#: elf32-nds32.c:6830 +#, c-format +msgid "%pB: warning: incompatible elf-versions %s and %s" +msgstr "%pB: упозорење: елф издања %s и %s ниÑу ÑаглаÑна" + +#: elf32-nds32.c:6861 +#, c-format +msgid ": n1 instructions" +msgstr ": инÑтрукције „n1“" + +#: elf32-nds32.c:6864 +#, c-format +msgid ": n1h instructions" +msgstr ": инÑтрукције „n1h“" + +#: elf32-nds32.c:9316 +#, c-format +msgid "%pB: error: search_nds32_elf_blank reports wrong node" +msgstr "%pB: грешка: „search_nds32_elf_blank“ извештава о погрешном чвору" + +#: elf32-nds32.c:9576 +#, c-format +msgid "%pB: warning: %s points to unrecognized reloc at %#" +msgstr "%pB: упозорење: „%s“ показује на непознато премештање на %#" + +#: elf32-nds32.c:12839 +#, c-format +msgid "%pB: nested OMIT_FP in %pA" +msgstr "%pB: угнежђено „OMIT_FP“ у „%pA“" + +#: elf32-nds32.c:12858 +#, c-format +msgid "%pB: unmatched OMIT_FP in %pA" +msgstr "%pB: неодговарајуће „OMIT_FP“ у „%pA“" + +#: elf32-nds32.c:13140 reloc.c:8470 +#, c-format +msgid "%X%P: %pB(%pA): relocation \"%pR\" goes out of range\n" +msgstr "%X%P: %pB(%pA): премештање „%pR“ иде ван опÑега\n" + +#: elf32-nios2.c:2937 +#, c-format +msgid "error: %pB: big-endian R2 is not supported" +msgstr "грешка: %pB: велика крајњоÑÑ‚ „R2“ није подржана" + +#: elf32-nios2.c:3829 +#, c-format +msgid "global pointer relative relocation at address %# when _gp not defined\n" +msgstr "релативно премештање општег показивача на адреÑи %# када „_gp“ није дефиниÑано\n" + +#: elf32-nios2.c:3859 +#, c-format +msgid "unable to reach %s (at %#) from the global pointer (at %#) because the offset (%) is out of the allowed range, -32678 to 32767\n" +msgstr "не могу да доÑтигнем „%s“ (на %#) из општег показивача (на %#) зато што је померај (%) изван допуштеног опÑега, од -32678 до 32767\n" + +#: elf32-nios2.c:4514 elf32-pru.c:931 +msgid "relocation out of range" +msgstr "премештање је ван опÑега" + +#: elf32-nios2.c:4524 elf32-pru.c:941 elf32-tic6x.c:2657 +msgid "dangerous relocation" +msgstr "опаÑно премештање" + +#: elf32-nios2.c:5367 +#, c-format +msgid "dynamic variable `%s' is zero size" +msgstr "динамичка променљива „%s“ је нулте величине" + +#: elf32-or1k.c:1210 +#, c-format +msgid "%pB: Cannot handle relocation value size of %d" +msgstr "%pB: не могу да радим Ñа величином вредноÑти премештања од %d" + +#: elf32-or1k.c:1317 +#, c-format +msgid "%pB: unknown relocation type %d" +msgstr "%pB: непозната врÑта премештања „%d“" + +#: elf32-or1k.c:1371 +#, c-format +msgid "%pB: addend should be zero for plt relocations" +msgstr "%pB: Ñабирак треба да буде нула за „plt“ премештања" + +#: elf32-or1k.c:1476 +#, c-format +msgid "%pB: addend should be zero for got relocations" +msgstr "%pB: Ñабирак треба да буде нула за „got“ премештања" + +#: elf32-or1k.c:1493 +#, c-format +msgid "%pB: gotoff relocation against dynamic symbol %s" +msgstr "%pB: „gotoff“ премештање наÑпрам динамичког Ñимбола „%s“" + +#: elf32-or1k.c:1510 elf64-alpha.c:4421 elf64-alpha.c:4565 +#, c-format +msgid "%pB: pc-relative relocation against dynamic symbol %s" +msgstr "%pB: „pc“-одноÑно премештање наÑпрам динамичког Ñимбола „%s“" + +#: elf32-or1k.c:1524 +#, c-format +msgid "%pB: non-pic relocation against symbol %s" +msgstr "%pB: „non-pic“ премештање наÑпрам Ñимбола „%s“" + +#: elf32-or1k.c:1608 +#, c-format +msgid "%pB: support for local dynamic not implemented" +msgstr "%pB: подршка за локално динамичко није примењена" + +#: elf32-or1k.c:1787 +#, c-format +msgid "%pB: will not resolve runtime TLS relocation" +msgstr "%pB: нећу решити време покретања „TLS“ премештања" + +#: elf32-or1k.c:2120 +#, c-format +msgid "%pB: bad relocation section name `%s'" +msgstr "%pB: лош назив одељка премештања „%s“" + +#: elf32-or1k.c:3181 +#, c-format +msgid "%pB: %s flag mismatch with previous modules" +msgstr "%pB: „%s“ заÑтавица Ñе разликује од претходних модула" + +#: elf32-ppc.c:989 +#, c-format +msgid "generic linker can't handle %s" +msgstr "општи повезивач не може да ради Ñа „%s“" + +#: elf32-ppc.c:1628 +#, c-format +msgid "corrupt %s section in %pB" +msgstr "оштећен „%s“ одељак у „%pB“" + +#: elf32-ppc.c:1647 +#, c-format +msgid "unable to read in %s section from %pB" +msgstr "не могу да читам у одељку „%s“ из „%pB“" + +#: elf32-ppc.c:1689 +#, c-format +msgid "warning: unable to set size of %s section in %pB" +msgstr "упозорење: не могу да поÑтавим величину одељка „%s“ у „%pB“" + +#: elf32-ppc.c:1738 +msgid "failed to allocate space for new APUinfo section" +msgstr "ниÑам уÑпео да доделим проÑтор за нови одељак „APUinfo“" + +#: elf32-ppc.c:1757 +msgid "failed to compute new APUinfo section" +msgstr "ниÑам уÑпео да израчунам нови одељак „APUinfo“" + +#: elf32-ppc.c:1760 +msgid "failed to install new APUinfo section" +msgstr "ниÑам уÑпео да инÑталирам нови одељак „APUinfo“" + +#: elf32-ppc.c:2861 +#, c-format +msgid "%pB: relocation %s cannot be used when making a shared object" +msgstr "%pB: премештање „%s“ Ñе не може кориÑтити приликом Ñтварања дељеног објекта" + +#: elf32-ppc.c:3599 elf32-ppc.c:3607 +#, c-format +msgid "%pB uses double-precision hard float, %pB uses single-precision hard float" +msgstr "„%pB“ кориÑти хардверÑки покретни зарез двоÑтруке тачноÑти, „%pB“ кориÑти хардверÑки покретни зарез једне тачноÑти" + +#: elf32-ppc.c:3629 elf32-ppc.c:3637 +#, c-format +msgid "%pB uses 64-bit long double, %pB uses 128-bit long double" +msgstr "„%pB“ кориÑти 64-битни дуги дубл, „%pB“ кориÑти 128-битни дуги дубл" + +#: elf32-ppc.c:3645 elf32-ppc.c:3653 +#, c-format +msgid "%pB uses IBM long double, %pB uses IEEE long double" +msgstr "„%pB“ кориÑти „IBM“ дуги дубл, „%pB“ кориÑти „IEEE“ дуги дубл" + +#: elf32-ppc.c:3720 elf32-ppc.c:3729 +#, c-format +msgid "%pB uses AltiVec vector ABI, %pB uses SPE vector ABI" +msgstr "„%pB“ кориÑти „AltiVec“ вектор „ABI“, „%pB“ кориÑти „SPE“ вектор „ABI“" + +#: elf32-ppc.c:3758 elf32-ppc.c:3767 +#, c-format +msgid "%pB uses r3/r4 for small structure returns, %pB uses memory" +msgstr "„%pB“ кориÑти „r3/r4“ за мале резултате Ñтруктуре, „%pB“ кориÑти меморију" + +#: elf32-ppc.c:3831 +#, c-format +msgid "%pB: compiled with -mrelocatable and linked with modules compiled normally" +msgstr "%pB: преведено Ñа „-mrelocatable“ и повезано Ñа модулима који Ñу преведени уобичајеним путем" + +#: elf32-ppc.c:3839 +#, c-format +msgid "%pB: compiled normally and linked with modules compiled with -mrelocatable" +msgstr "%pB: преведено уобичајеним путем и повезано Ñа модулима који Ñу преведени Ñа „-mrelocatable“" + +#: elf32-ppc.c:3908 +#, c-format +msgid "%pB(%pA+0x%lx): expected 16A style relocation on 0x%08x insn" +msgstr "%pB(%pA+0x%lx): очекивах премештање „16A“ Ñтила на „0x%08x insn“" + +#: elf32-ppc.c:3927 +#, c-format +msgid "%pB(%pA+0x%lx): expected 16D style relocation on 0x%08x insn" +msgstr "%pB(%pA+0x%lx): очекивах премештање „16D“ Ñтила на „0x%08x insn“" + +#: elf32-ppc.c:4030 +#, c-format +msgid "bss-plt forced due to %pB" +msgstr "„bss-plt“ је приÑиљено због „%pB“" + +#: elf32-ppc.c:4032 +msgid "bss-plt forced by profiling" +msgstr "„bss-plt“ је приÑиљено профилиÑањем" + +#. Uh oh, we didn't find the expected call. We +#. could just mark this symbol to exclude it +#. from tls optimization but it's safer to skip +#. the entire optimization. +#: elf32-ppc.c:4606 elf64-ppc.c:8252 +#, c-format +msgid "%H arg lost __tls_get_addr, TLS optimization disabled\n" +msgstr "Ðргумент „%H“ је изгубио „__tls_get_addr“, „TLS“ оптимизација је иÑкључена\n" + +#: elf32-ppc.c:5513 elf32-sh.c:3023 elf32-tilepro.c:2256 elfxx-sparc.c:2453 +#: elfxx-tilegx.c:2496 +#, c-format +msgid "%pB: dynamic relocation in read-only section `%pA'\n" +msgstr "%pB: динамичко премештање у одељку Ñамо за читање %pA\n" + +#: elf32-ppc.c:7356 +msgid "%P: %H: error: %s with unexpected instruction %x\n" +msgstr "%P: %H: грешка: „%s“ Ñа неочекиваном инÑтрукцијом „%x“\n" + +#: elf32-ppc.c:7393 +msgid "%H: fixup branch overflow\n" +msgstr "%H: прекорачење „fixup“ гране\n" + +#: elf32-ppc.c:7433 elf32-ppc.c:7469 +#, c-format +msgid "%pB(%pA+%#): error: %s with unexpected instruction %#x" +msgstr "%pB(%pA+%#): грешка: „%s“ Ñа неочекиваном инÑтрукцијом „%#x“" + +#: elf32-ppc.c:7533 +#, c-format +msgid "%X%H: unsupported bss-plt -fPIC ifunc %s\n" +msgstr "%X%H: неподржано „bss-plt“ „-fPIC“ „ifunc“ „%s“\n" + +#: elf32-ppc.c:7572 elf64-ppc.c:16848 +msgid "%H: warning: %s unexpected insn %#x.\n" +msgstr "%H: упозорење: „%s“ неочекивани улазни знак „%#x“.\n" + +#: elf32-ppc.c:7881 +#, c-format +msgid "%H: non-zero addend on %s reloc against `%s'\n" +msgstr "%H: не нулти Ñабирак на „%s“ премештању наÑпрам „%s“\n" + +#. @local on an ifunc does not really make sense since +#. the ifunc resolver can take you anywhere. More +#. seriously, calls to ifuncs must go through a plt call +#. stub, and for pic the plt call stubs uses r30 to +#. access the PLT. The problem is that a call that is +#. local won't have the +32k reloc addend trick marking +#. -fPIC code, so the linker won't know whether r30 is +#. _GLOBAL_OFFSET_TABLE_ or pointing into a .got2 section. +#: elf32-ppc.c:7913 +#, c-format +msgid "%X%H: @local call to ifunc %s\n" +msgstr "%X%H: позив „@local“ за i-функцију „%s“\n" + +#: elf32-ppc.c:8091 +#, c-format +msgid "%H: relocation %s for indirect function %s unsupported\n" +msgstr "%H: „%s“ премештање за индиректну функцију „%s“ није подржано\n" + +#: elf32-ppc.c:8425 elf32-ppc.c:8456 elf32-ppc.c:8547 elf32-ppc.c:8643 +#, c-format +msgid "%pB: the target (%s) of a %s relocation is in the wrong output section (%s)" +msgstr "%pB: мета (%s) премештања „%s“ је у погрешном излазном одељку (%s)" + +#: elf32-ppc.c:8773 elf32-ppc.c:8791 +msgid "%X%P: %H: %s relocation unsupported for bss-plt\n" +msgstr "%X%P: %H: „%s“ премештање није подржано за „bss-plt“\n" + +#: elf32-ppc.c:8872 +#, c-format +msgid "%H: error: %s against `%s' not a multiple of %u\n" +msgstr "%H: грешка: „%s“ наÑпрам „%s“ није производ „%u“\n" + +#: elf32-ppc.c:8901 +#, c-format +msgid "%H: unresolvable %s relocation against symbol `%s'\n" +msgstr "%H: нерешиво „%s“ премештање наÑпрам Ñимбола „%s“\n" + +#: elf32-ppc.c:8982 +#, c-format +msgid "%H: %s reloc against `%s': error %d\n" +msgstr "%H: „%s“ премештање наÑпрам „%s“: грешка %d\n" + +#: elf32-ppc.c:9872 +msgid "%X%P: text relocations and GNU indirect functions will result in a segfault at runtime\n" +msgstr "%X%P: премештање текÑта и ГÐУ-ове индиректне функције ће резултирати неуÑпехом Ñегментације у време извршавања\n" + +#: elf32-ppc.c:9876 elf64-ppc.c:17398 +msgid "%P: warning: text relocations and GNU indirect functions may result in a segfault at runtime\n" +msgstr "%P: упозорење: премештање текÑта и ГÐУ-ове индиректне функције могу резултирати неуÑпехом Ñегментације у време извршавања\n" + +#: elf32-ppc.c:9921 +#, c-format +msgid "%s not defined in linker created %pA" +msgstr "„%s“ није дефиниÑано у повезивачу Ñтвореном „%pA“" + +#: elf32-pru.c:582 elf32-pru.c:1475 +#, c-format +msgid "error: %pB: old incompatible object file detected" +msgstr "грешка: %pB: Ñтара неÑаглаÑна датотека објекта је откривена" + +#: elf32-rl78.c:372 +msgid "internal error: RL78 reloc stack overflow" +msgstr "унутрашња грешка: прекорачење „RL78“ премештања Ñпремника" + +#: elf32-rl78.c:383 +msgid "internal error: RL78 reloc stack underflow" +msgstr "унутрашња грешка: подкорачење „RL78“ премештања Ñпремника" + +#: elf32-rl78.c:1053 +msgid "warning: RL78_SYM reloc with an unknown symbol" +msgstr "упозорење: „RL78_SYM“ премештање Ñа непознатим Ñимболом" + +#: elf32-rl78.c:1084 elf32-rx.c:1461 +#, c-format +msgid "%pB(%pA): error: call to undefined function '%s'" +msgstr "%pB(%pA): грешка: позив за недефиниÑану функцију „%s“" + +#: elf32-rl78.c:1205 +#, c-format +msgid "RL78 ABI conflict: G10 file %pB cannot be linked with %s file %pB" +msgstr "„RL78 ABI“ Ñукоб: „G10“ датотека „%pB“ Ñе не може увезати Ñа „%s“ датотеком „%pB“" + +#: elf32-rl78.c:1222 +#, c-format +msgid "RL78 ABI conflict: cannot link %s file %pB with %s file %pB" +msgstr "„ABI RL78“ Ñукоб: не могу да повежем „%s“ датотеку „%pB“ Ñа „%s“ датотеком „%pB“" + +#: elf32-rl78.c:1231 +msgid "RL78 merge conflict: cannot link 32-bit and 64-bit objects together" +msgstr "„RL78“ Ñукоб Ñтапања: не могу да повежем заједно 32-битне и 64-битне објекте" + +#: elf32-rl78.c:1235 elf32-rl78.c:1239 +#, c-format +msgid "- %pB is 64-bit, %pB is not" +msgstr "— „%pB“ је 64-битно, „%pB“ није" + +#: elf32-rl78.c:1266 +#, c-format +msgid " [64-bit doubles]" +msgstr " [doubles de 64 bits]" + +#: elf32-rx.c:607 +#, c-format +msgid "%pB:%pA: table entry %s outside table" +msgstr "%pB:%pA: ÑƒÐ½Ð¾Ñ Ñ‚Ð°Ð±ÐµÐ»Ðµ „%s“ је ван табеле" + +#: elf32-rx.c:614 +#, c-format +msgid "%pB:%pA: table entry %s not word-aligned within table" +msgstr "%pB:%pA: ÑƒÐ½Ð¾Ñ Ñ‚Ð°Ð±ÐµÐ»Ðµ „%s“ није Ñа поравнањм речи унутар табеле" + +#: elf32-rx.c:689 +#, c-format +msgid "%pB:%pA: warning: deprecated Red Hat reloc %s detected against: %s" +msgstr "%pB:%pA: упозорење: заÑтарело премештање Ред Хета „%s“ је откривено у: %s" + +#. Check for unsafe relocs in PID mode. These are any relocs where +#. an absolute address is being computed. There are special cases +#. for relocs against symbols that are known to be referenced in +#. crt0.o before the PID base address register has been initialised. +#: elf32-rx.c:709 +#, c-format +msgid "%pB(%pA): unsafe PID relocation %s at %# (against %s in %s)" +msgstr "%pB(%pA): неÑигурно „PID“ премештање „%s“ на %# (наÑпрам „%s“ у „%s“)" + +#: elf32-rx.c:1293 +msgid "warning: RX_SYM reloc with an unknown symbol" +msgstr "упозорење: „RX_SYM“ премештање Ñа непознатим Ñимболом" + +#: elf32-rx.c:3173 +#, c-format +msgid "there is a conflict merging the ELF header flags from %pB" +msgstr "Ñукоб Ñтапања заÑтавица „ELF“ заглавља из „%pB“" + +#: elf32-rx.c:3176 +#, c-format +msgid " the input file's flags: %s" +msgstr " заÑтавице улазне датотеке: %s" + +#: elf32-rx.c:3178 +#, c-format +msgid " the output file's flags: %s" +msgstr " заÑтавице излазне датотеке: %s" + +#: elf32-rx.c:3784 +#, c-format +msgid "%pB:%pA: table %s missing corresponding %s" +msgstr "%pB:%pA: табели „%s“ недоÑтаје одговарајуће „%s“" + +#: elf32-rx.c:3792 +#, c-format +msgid "%pB:%pA: %s and %s must be in the same input section" +msgstr "%pB:%pA: „%s“ и „%s“ морају бити у иÑтом улазном одељку" + +#: elf32-s390.c:2011 elf64-s390.c:1965 +#, c-format +msgid "%pB(%pA+%#): invalid instruction for TLS relocation %s" +msgstr "%pB(%pA+%#): неиÑправна инÑтрукција за „TLS“ премештање „%s“" + +#: elf32-score.c:1521 elf32-score7.c:1382 elfxx-mips.c:3800 +msgid "not enough GOT space for local GOT entries" +msgstr "нема довољно „GOT“ проÑтора за меÑне уноÑе „GOT“" + +#: elf32-score.c:2747 +msgid "address not word aligned" +msgstr "адреÑа није поравната по речи" + +#: elf32-score.c:2828 elf32-score7.c:2633 +#, c-format +msgid "%pB: malformed reloc detected for section %pA" +msgstr "%pB: откривено је лоше премештање за одељак „%pA“" + +#: elf32-score.c:2882 elf32-score7.c:2687 +#, c-format +msgid "%pB: CALL15 reloc at %# not against global symbol" +msgstr "%pB: „CALL15“ премештање на %# није наÑпрам општег Ñимбола" + +#: elf32-score.c:4003 elf32-score7.c:3808 +#, c-format +msgid " [pic]" +msgstr " [пик]" + +#: elf32-score.c:4007 elf32-score7.c:3812 +#, c-format +msgid " [fix dep]" +msgstr " [Ñ„Ð¸ÐºÑ Ð´ÑƒÐ±]" + +#: elf32-score.c:4054 elf32-score7.c:3859 +#, c-format +msgid "%pB: warning: linking PIC files with non-PIC files" +msgstr "%pB: упозорење: повезујем „PIC“ датотеке Ñа не-„PIC“ датотекама" + +#: elf32-sh.c:533 +#, c-format +msgid "%pB: %#: warning: R_SH_USES points to unrecognized insn 0x%x" +msgstr "%pB: %#: упозорење: „R_SH_USES“ показује на непознат улазни злак 0x%x" + +#: elf32-sh.c:3758 +#, c-format +msgid "%pB: %#: fatal: unaligned branch target for relax-support relocation" +msgstr "%pB: %#: кобна грешка: непоравнат циљ гране за премештање подршке опуштања" + +#: elf32-sh.c:3788 elf32-sh.c:3804 +#, c-format +msgid "%pB: %#: fatal: unaligned %s relocation %#" +msgstr "%pB: %#: кобна грешка: непоравнато премештање „%s“ %#" + +#: elf32-sh.c:3820 +#, c-format +msgid "%pB: %#: fatal: R_SH_PSHA relocation % not in range -32..32" +msgstr "%pB: %#: кобна грешка: „R_SH_PSHA“ премештање „%#“ није у опÑегу -32..32" + +#: elf32-sh.c:3836 +#, c-format +msgid "%pB: %#: fatal: R_SH_PSHL relocation % not in range -32..32" +msgstr "%pB: %#: кобна грешка: „R_SH_PSHL“ премештање „%#“ није у опÑегу -32..32" + +#: elf32-sh.c:3966 elf32-sh.c:4361 +#, c-format +msgid "%pB(%pA+%#): cannot emit fixup to `%s' in read-only section" +msgstr "%pB(%pA+%#): не могу да унеÑем иÑправке у „%s“ у одељку Ñамо за читање" + +#: elf32-sh.c:4464 +#, c-format +msgid "%pB(%pA+%#): %s relocation against external symbol \"%s\"" +msgstr "%pB(%pA+%#): „%s“ премештање наÑпрам Ñпољног Ñимбола „%s“" + +#: elf32-sh.c:4583 +#, c-format +msgid "%pB(%pA): offset in relocation for GD->LE translation is too small: %#" +msgstr "%pB(%pA): померај у премештању за „GD->LE“ превод је премали: %#" + +#. The backslash is to prevent bogus trigraph detection. +#: elf32-sh.c:4601 +#, c-format +msgid "%pB(%pA+%#): unexpected instruction %#04X (expected 0xd4??)" +msgstr "%pB(%pA+%#): неочекивана инÑтрукција „%#04X“ (очекивах 0xd4??)" + +#: elf32-sh.c:4609 +#, c-format +msgid "%pB(%pA+%#): unexpected instruction %#04X (expected 0xc7??)" +msgstr "%pB(%pA+%#): неочекивана инÑтрукција „%#04X“ (очекивах 0xc7??)" + +#: elf32-sh.c:4616 +#, c-format +msgid "%pB(%pA+%#): unexpected instruction %#04X (expected 0xd1??)" +msgstr "%pB(%pA+%#): неочекивана инÑтрукција „%#04X“ (очекивах 0xd1??)" + +#: elf32-sh.c:4623 +#, c-format +msgid "%pB(%pA+%#): unexpected instruction %#04X (expected 0x310c)" +msgstr "%pB(%pA+%#): неочекивана инÑтрукција „%#04X“ (очекивах 0x310c??)" + +#: elf32-sh.c:4630 +#, c-format +msgid "%pB(%pA+%#): unexpected instruction %#04X (expected 0x410b)" +msgstr "%pB(%pA+%#): неочекивана инÑтрукција „%#04X“ (очекивах 0x410b??)" + +#: elf32-sh.c:4637 +#, c-format +msgid "%pB(%pA+%#): unexpected instruction %#04X (expected 0x34cc)" +msgstr "%pB(%pA+%#): неочекивана инÑтрукција „%#04X“ (очекивах 0x34cc??)" + +#: elf32-sh.c:4672 +#, c-format +msgid "%pB(%pA): offset in relocation for IE->LE translation is too small: %#" +msgstr "%pB(%pA): померај у премештању за „IE->LE“ превод је премали: %#" + +#: elf32-sh.c:4690 +#, c-format +msgid "%pB(%pA+%#): unexpected instruction %#04X (expected 0xd0??: mov.l)" +msgstr "%pB(%pA+%#): неочекивана инÑтрукција „%#04X“ (очекивах 0xd0??: mov.l)" + +#: elf32-sh.c:4699 +#, c-format +msgid "%pB(%pA+%#): unexpected instruction %#04X (expected 0x0?12: stc)" +msgstr "%pB(%pA+%#): неочекивана инÑтрукција „%#04X“ (очекивах 0x0?12: stc)" + +#: elf32-sh.c:4706 +#, c-format +msgid "%pB(%pA+%#): unexpected instruction %#04X (expected 0x0?ce: mov.l)" +msgstr "%pB(%pA+%#): неочекивана инÑтрукција „%#04X“ (очекивах 0x0?ce: mov.l)" + +#: elf32-sh.c:4821 +#, c-format +msgid "%pB(%pA): offset in relocation for GD->IE translation is too small: %#" +msgstr "%pB(%pA): померај у премештању за „GD->IE“ превод је премали: %#" + +#: elf32-sh.c:4889 +#, c-format +msgid "%pB(%pA): offset in relocation for LD->LE translation is too small: %#" +msgstr "%pB(%pA): померај у премештању за „LD->LE“ превод је премали: %#" + +#: elf32-sh.c:5017 +#, c-format +msgid "%X%C: relocation to \"%s\" references a different segment\n" +msgstr "%X%C: премештање у „%s“ Ñтвара упуту другог Ñегмента\n" + +#: elf32-sh.c:5024 +#, c-format +msgid "%C: warning: relocation to \"%s\" references a different segment\n" +msgstr "%C: упозорење: премештање у „%s“ Ñтвара упуту другог Ñегмента\n" + +#: elf32-sh.c:5483 elf32-sh.c:5565 +#, c-format +msgid "%pB: `%s' accessed both as normal and FDPIC symbol" +msgstr "%pB: „%s“ Ñе приÑтупило и као нормалном и као Ñимболу „FDPIC“" + +#: elf32-sh.c:5489 elf32-sh.c:5570 +#, c-format +msgid "%pB: `%s' accessed both as FDPIC and thread local symbol" +msgstr "%pB: „%s“ Ñе приÑтупило и као „FDPIC“-у и као Ñимболу локалне нити" + +#: elf32-sh.c:5520 +#, c-format +msgid "%pB: Function descriptor relocation with non-zero addend" +msgstr "%pB: Премештање опиÑника функције Ñа не-нултим Ñабирком" + +#: elf32-sh.c:5727 elf64-alpha.c:4657 +#, c-format +msgid "%pB: TLS local exec code cannot be linked into shared objects" +msgstr "%pB: „TLS“ меÑни извршни код не може бити повезан у дељеним објектима" + +#: elf32-sh.c:5842 +#, c-format +msgid "%pB: uses %s instructions while previous modules use %s instructions" +msgstr "%pB: кориÑти „%s“ инÑтрукције док претходни модули кориÑте „%s“ инÑтрукције" + +#: elf32-sh.c:5854 +#, c-format +msgid "internal error: merge of architecture '%s' with architecture '%s' produced unknown architecture" +msgstr "унутрашња грешка: Ñтапање архитектуре „%s“ Ñа архитектуром „%s“ је дало непознату архитектуру" + +#: elf32-sh.c:5895 +#, c-format +msgid "%pB: uses instructions which are incompatible with instructions used in previous modules" +msgstr "%pB: кориÑти инÑтрукције које ниÑу ÑаглаÑне Ñа инÑтрукцијама коришћеним у претходним модулима" + +#: elf32-sh.c:5908 +#, c-format +msgid "%pB: attempt to mix FDPIC and non-FDPIC objects" +msgstr "%pB: покушавам да помешам „FDPIC“ и не-„FDPIC“ објекте" + +#: elf32-sparc.c:89 +#, c-format +msgid "%pB: compiled for a 64 bit system and target is 32 bit" +msgstr "%pB: преведено за 64-битни ÑиÑтем а циљ је 32-битни" + +#: elf32-sparc.c:102 +#, c-format +msgid "%pB: linking little endian files with big endian files" +msgstr "%pB: повезујем датотеке мале крајњоÑти Ñа датотекама велике крајњоÑти" + +#: elf32-sparc.c:157 +#, c-format +msgid "%pB: unhandled sparc machine value '%lu' detected during write processing" +msgstr "%pB: необрадива вредноÑÑ‚ „sparc“ машине „%lu“ је откривена за време обрађивања пиÑања" + +#: elf32-spu.c:735 +msgid "%X%P: overlay section %pA does not start on a cache line\n" +msgstr "%X%P: одељак преклапања „%pA“ не почиње у реду оÑтаве\n" + +#: elf32-spu.c:743 +msgid "%X%P: overlay section %pA is larger than a cache line\n" +msgstr "%X%P: одељак преклапања „%pA“ је већи од реда оÑтаве\n" + +#: elf32-spu.c:763 +msgid "%X%P: overlay section %pA is not in cache area\n" +msgstr "%X%P: одељак преклапања „%pA“ није у реду оÑтаве\n" + +#: elf32-spu.c:804 +#, c-format +msgid "%X%P: overlay sections %pA and %pA do not start at the same address\n" +msgstr "%X%P: одељци преклапања „%pA“ и „%pA“ не почињу на иÑтој адреÑи\n" + +#: elf32-spu.c:1030 +#, c-format +msgid "warning: call to non-function symbol %s defined in %pB" +msgstr "упозорење: позив не-функцијÑком Ñимболу „%s“ је дефиниÑан у „%pB“" + +#: elf32-spu.c:1380 +#, c-format +msgid "%pA:0x%v lrlive .brinfo (%u) differs from analysis (%u)\n" +msgstr "%pA:0x%v „lrlive .brinfo“ (%u) Ñе разликује од анализе (%u)\n" + +#: elf32-spu.c:1910 +#, c-format +msgid "%pB is not allowed to define %s" +msgstr "„%pB“ нема дозволу да дефинише „%s“" + +#: elf32-spu.c:1918 +#, c-format +msgid "you are not allowed to define %s in a script" +msgstr "ви немате дозволу да дефинишете „%s“ у Ñкрипти" + +#: elf32-spu.c:1952 +#, c-format +msgid "%s in overlay section" +msgstr "„%s“ у одељку преклапања" + +#: elf32-spu.c:1981 +msgid "overlay stub relocation overflow" +msgstr "прекорачење премештања окрајка прекривања" + +#: elf32-spu.c:1990 elf64-ppc.c:14496 +msgid "stubs don't match calculated size" +msgstr "окрајци не одговарају израчунатој величини" + +#: elf32-spu.c:2573 +#, c-format +msgid "warning: %s overlaps %s\n" +msgstr "упозорење: „%s“ преклапа „%s“\n" + +#: elf32-spu.c:2589 +#, c-format +msgid "warning: %s exceeds section size\n" +msgstr "упозорење: „%s“ превазилази величину одељка\n" + +#: elf32-spu.c:2621 +#, c-format +msgid "%pA:0x%v not found in function table\n" +msgstr "„%pA:0x%v“ ниÑам нашао у табели функције\n" + +#: elf32-spu.c:2762 +#, c-format +msgid "%pB(%pA+0x%v): call to non-code section %pB(%pA), analysis incomplete\n" +msgstr "%pB(%pA+0x%v): позив не-кодном одељку „%pB(%pA)“, анализа је непотпуна\n" + +#: elf32-spu.c:3328 +#, c-format +msgid "stack analysis will ignore the call from %s to %s\n" +msgstr "анализа Ñпремника ће занемарити позив од „%s“ до „%s“\n" + +#: elf32-spu.c:4025 +msgid " calls:\n" +msgstr " позиви:\n" + +#: elf32-spu.c:4340 +#, c-format +msgid "%s duplicated in %s\n" +msgstr "„%s“ је удвоÑтручено у „%s“\n" + +#: elf32-spu.c:4344 +#, c-format +msgid "%s duplicated\n" +msgstr "„%s“ је удвоÑтручено\n" + +#: elf32-spu.c:4351 +msgid "sorry, no support for duplicate object files in auto-overlay script\n" +msgstr "извините, нема подршке за удвоÑтручене датотеке објекта у Ñкрипти Ñамо-преклапања\n" + +#: elf32-spu.c:4393 +#, c-format +msgid "non-overlay size of 0x%v plus maximum overlay size of 0x%v exceeds local store\n" +msgstr "не-преклапајућа величина 0x%v Ð¿Ð»ÑƒÑ Ð½Ð°Ñ˜Ð²ÐµÑ›Ð° величина преклапања 0x%v превазилазе меÑно Ñпремиште\n" + +#: elf32-spu.c:4549 +#, c-format +msgid "%pB:%pA%s exceeds overlay size\n" +msgstr "„%pB:%pA%s“ превазилази величину преклапања\n" + +#: elf32-spu.c:4690 +msgid "%F%P: auto overlay error: %E\n" +msgstr "%F%P: грешка Ñамопреклапања: %E\n" + +#: elf32-spu.c:4711 +msgid "Stack size for call graph root nodes.\n" +msgstr "Величина Ñпремника за позив чворова корена графика.\n" + +#: elf32-spu.c:4712 +msgid "" +"\n" +"Stack size for functions. Annotations: '*' max stack, 't' tail call\n" +msgstr "" +"\n" +"Величина Ñпремника за функције. Ðапомене: „*“ највећи Ñпремник, „t“ позив оÑтатка\n" + +#: elf32-spu.c:4722 +msgid "Maximum stack required is 0x%v\n" +msgstr "Ðајвећи потребан Ñпремник је 0x%v\n" + +#: elf32-spu.c:4741 +msgid "%X%P: stack/lrlive analysis error: %E\n" +msgstr "%X%P: грешка „stack/lrlive“ анализе: %E\n" + +#: elf32-spu.c:4744 +msgid "%F%P: can not build overlay stubs: %E\n" +msgstr "%F%P: не могу да изградим окрајке преклапања „%E“\n" + +#: elf32-spu.c:4813 +msgid "fatal error while creating .fixup" +msgstr "кобна грешка приликом Ñтварања „.fixup“-а" + +#: elf32-spu.c:5049 +#, c-format +msgid "%pB(%s+%#): unresolvable %s relocation against symbol `%s'" +msgstr "%pB(%s+%#): нерешиво „%s“ премештање наÑпрам Ñимбола „%s“" + +#: elf32-tic6x.c:1588 +msgid "warning: generating a shared library containing non-PIC code" +msgstr "упозорење: Ñтварам дељену библиотеку која Ñадржи не-ПИЦ код" + +#: elf32-tic6x.c:1593 +msgid "warning: generating a shared library containing non-PID code" +msgstr "упозорење: Ñтварам дељену библиотеку која Ñадржи не-ПИД код" + +#: elf32-tic6x.c:2434 +#, c-format +msgid "%pB: SB-relative relocation but __c6xabi_DSBT_BASE not defined" +msgstr "%pB: премештање Ñе одноÑи на „SB“ али „__c6xabi_DSBT_BASE“ није дефиниÑано" + +#: elf32-tic6x.c:3511 +#, c-format +msgid "%pB: error: unknown mandatory EABI object attribute %d" +msgstr "%pB: грешка: обавезан „%d“ атрибут „EABI“ објекта није познат" + +#: elf32-tic6x.c:3520 +#, c-format +msgid "%pB: warning: unknown EABI object attribute %d" +msgstr "%pB: упозорење: „%d“ атрибут „EABI“ објекта није познат" + +#: elf32-tic6x.c:3638 elf32-tic6x.c:3647 +#, c-format +msgid "error: %pB requires more stack alignment than %pB preserves" +msgstr "грешка: „%pB“ захтева веће поравнање Ñпремника него што „%pB“ Ñадржи" + +#: elf32-tic6x.c:3657 elf32-tic6x.c:3666 +#, c-format +msgid "error: unknown Tag_ABI_array_object_alignment value in %pB" +msgstr "грешка: непозната вредноÑÑ‚ „Tag_ABI_array_object_alignment“ у „%pB“" + +#: elf32-tic6x.c:3675 elf32-tic6x.c:3684 +#, c-format +msgid "error: unknown Tag_ABI_array_object_align_expected value in %pB" +msgstr "грешка: непозната вредноÑÑ‚ „Tag_ABI_array_object_align_expected“ у „%pB“" + +#: elf32-tic6x.c:3693 elf32-tic6x.c:3701 +#, c-format +msgid "error: %pB requires more array alignment than %pB preserves" +msgstr "грешка: „%pB“ захтева веће поравнање низа него што „%pB“ Ñадржи" + +#: elf32-tic6x.c:3724 +#, c-format +msgid "warning: %pB and %pB differ in wchar_t size" +msgstr "упозорење: „%pB“ и „%pB“ имају различите „wchar_t“" + +#: elf32-tic6x.c:3743 +#, c-format +msgid "warning: %pB and %pB differ in whether code is compiled for DSBT" +msgstr "упозорење: „%pB“ и „%pB“ Ñе разликују по томе да ли је код преведен за „DSBT“" + +#: elf32-tilepro.c:3635 elfxx-tilegx.c:4019 elfxx-x86.c:1393 +#: elfnn-aarch64.c:9704 elfnn-riscv.c:2522 +#, c-format +msgid "discarded output section: `%pA'" +msgstr "одбачени одељак излаза: „%pA“" + +#: elf32-v850.c:152 +#, c-format +msgid "variable `%s' cannot occupy in multiple small data regions" +msgstr "променљива „%s“ не може да заузме неколико облаÑти малих података" + +#: elf32-v850.c:155 +#, c-format +msgid "variable `%s' can only be in one of the small, zero, and tiny data regions" +msgstr "променљива „%s“ може бити Ñамо у једном од облаÑти малих, нултих и мајушних података" + +#: elf32-v850.c:158 +#, c-format +msgid "variable `%s' cannot be in both small and zero data regions simultaneously" +msgstr "променљива „%s“ не може бити иÑтовремено у облаÑтима малих и нултих података" + +#: elf32-v850.c:161 +#, c-format +msgid "variable `%s' cannot be in both small and tiny data regions simultaneously" +msgstr "променљива „%s“ не може бити иÑтовремено у облаÑтима малих и мајушних података" + +#: elf32-v850.c:164 +#, c-format +msgid "variable `%s' cannot be in both zero and tiny data regions simultaneously" +msgstr "променљива „%s“ не може бити иÑтовремено у облаÑтима нултих и мајушних података" + +#: elf32-v850.c:462 +msgid "failed to find previous HI16 reloc" +msgstr "ниÑам уÑпео да нађем претходно „HI16“ премештање" + +#: elf32-v850.c:2302 +msgid "could not locate special linker symbol __gp" +msgstr "не могу да нађем нарочит „__gp“ Ñимбол повезивача" + +#: elf32-v850.c:2306 +msgid "could not locate special linker symbol __ep" +msgstr "не могу да нађем нарочит „__ep“ Ñимбол повезивача" + +#: elf32-v850.c:2310 +msgid "could not locate special linker symbol __ctbp" +msgstr "не могу да нађем нарочит „__ctbp“ Ñимбол повезивача" + +#: elf32-v850.c:2531 +#, c-format +msgid "error: %pB needs 8-byte alignment but %pB is set for 4-byte alignment" +msgstr "грешка: „%pBд захтева 8-битно поравнање али је „%pB“ подешено на 4-битно" + +#: elf32-v850.c:2547 +#, c-format +msgid "error: %pB uses 64-bit doubles but %pB uses 32-bit doubles" +msgstr "грешка: „%pB“ кориÑти 64-битне дублере али „%pB“ кориÑти 32-битне" + +#: elf32-v850.c:2562 +#, c-format +msgid "error: %pB uses FPU-3.0 but %pB only supports FPU-2.0" +msgstr "грешка: „%pB“ кориÑти „FPU-3.0“ али „%pB“ подржава Ñамо „FPU-2.0“" + +#: elf32-v850.c:2594 +#, c-format +msgid " alignment of 8-byte entities: " +msgstr " поравнање 8-битних ентитета: " + +#: elf32-v850.c:2597 +#, c-format +msgid "4-byte" +msgstr "4-бита" + +#: elf32-v850.c:2598 +#, c-format +msgid "8-byte" +msgstr "8-бита" + +#: elf32-v850.c:2599 elf32-v850.c:2611 +#, c-format +msgid "not set" +msgstr "није подешено" + +#: elf32-v850.c:2600 elf32-v850.c:2612 elf32-v850.c:2624 elf32-v850.c:2635 +#: elf32-v850.c:2646 elf32-v850.c:2657 +#, c-format +msgid "unknown: %x" +msgstr "непознато: %x" + +#: elf32-v850.c:2606 +#, c-format +msgid " size of doubles: " +msgstr " величина дублера: " + +#: elf32-v850.c:2609 +#, c-format +msgid "4-bytes" +msgstr "4-бајта" + +#: elf32-v850.c:2610 +#, c-format +msgid "8-bytes" +msgstr "8-бајта" + +#: elf32-v850.c:2618 +#, c-format +msgid " FPU support required: " +msgstr " „FPU“ подршка је потребна: " + +#: elf32-v850.c:2621 +#, c-format +msgid "FPU-2.0" +msgstr "FPU-2.0" + +#: elf32-v850.c:2622 +#, c-format +msgid "FPU-3.0" +msgstr "FPU-3.0" + +#: elf32-v850.c:2623 +#, c-format +msgid "none" +msgstr "ништа" + +#: elf32-v850.c:2630 +#, c-format +msgid "SIMD use: " +msgstr "„SIMD“ коришћење: " + +#: elf32-v850.c:2633 elf32-v850.c:2644 elf32-v850.c:2655 +#, c-format +msgid "yes" +msgstr "да" + +#: elf32-v850.c:2634 elf32-v850.c:2645 elf32-v850.c:2656 +#, c-format +msgid "no" +msgstr "не" + +#: elf32-v850.c:2641 +#, c-format +msgid "CACHE use: " +msgstr "„CACHE“ коришћење: " + +#: elf32-v850.c:2652 +#, c-format +msgid "MMU use: " +msgstr "„MMU“ коришћење: " + +#: elf32-v850.c:2819 elf32-v850.c:2875 +#, c-format +msgid "%pB: architecture mismatch with previous modules" +msgstr "%pB: архитектура Ñе разликује од претходних модула" + +#. xgettext:c-format. +#: elf32-v850.c:2893 +#, c-format +msgid "private flags = %lx: " +msgstr "приватне заÑтавице = %lx: " + +#: elf32-v850.c:2898 +#, c-format +msgid "unknown v850 architecture" +msgstr "непозната архитектура „v850“" + +#: elf32-v850.c:2900 +#, c-format +msgid "v850 E3 architecture" +msgstr "архитектура „v850 E3“" + +#: elf32-v850.c:2902 elf32-v850.c:2909 +#, c-format +msgid "v850 architecture" +msgstr "архитектура „v850“" + +#: elf32-v850.c:2910 +#, c-format +msgid "v850e architecture" +msgstr "архитектура „v850e“" + +#: elf32-v850.c:2911 +#, c-format +msgid "v850e1 architecture" +msgstr "архитектура „v850e1“" + +#: elf32-v850.c:2912 +#, c-format +msgid "v850e2 architecture" +msgstr "архитектура „v850e2“" + +#: elf32-v850.c:2913 +#, c-format +msgid "v850e2v3 architecture" +msgstr "архитектура „v850e2v3“" + +#: elf32-v850.c:2914 +#, c-format +msgid "v850e3v5 architecture" +msgstr "архитектура „v850e3v5“" + +#: elf32-v850.c:3612 elf32-v850.c:3851 +#, c-format +msgid "%pB: %#: warning: %s points to unrecognized insns" +msgstr "%pB: %#: упозорење: „%s“ показује на непознат улазни знак" + +#: elf32-v850.c:3622 elf32-v850.c:3861 +#, c-format +msgid "%pB: %#: warning: %s points to unrecognized insn %#x" +msgstr "%pB: %#: упозорење: „%s“ показује на непознат улазни знак „%#x“" + +#: elf32-v850.c:3668 elf32-v850.c:3896 +#, c-format +msgid "%pB: %#: warning: %s points to unrecognized reloc" +msgstr "%pB: %#: упозорење: „%s“ показује на непознато премештање" + +#: elf32-v850.c:3708 +#, c-format +msgid "%pB: %#: warning: %s points to unrecognized reloc %#" +msgstr "%pB: %#: упозорење: „%s“ показује на непознато премештање „%#“" + +#: elf32-vax.c:540 +#, c-format +msgid " [nonpic]" +msgstr " [не-пиц]" + +#: elf32-vax.c:543 +#, c-format +msgid " [d-float]" +msgstr " [d-покретни зарез]" + +#: elf32-vax.c:546 +#, c-format +msgid " [g-float]" +msgstr " [g-покретни зарез]" + +#: elf32-vax.c:632 +#, c-format +msgid "%pB: warning: GOT addend of % to `%s' does not match previous GOT addend of %" +msgstr "%pB: упозорење: „GOT“ Ñабирак „%“-а за „%s“ не одговара претходном „GOT“ Ñабирку „%“-а" + +#: elf32-vax.c:1389 +#, c-format +msgid "%pB: warning: PLT addend of % to `%s' from %pA section ignored" +msgstr "%pB: упозорење: „PLT“ Ñабирак „%“-а за „%s“ из одељка „%pA“ је занемарен" + +#: elf32-vax.c:1515 +#, c-format +msgid "%pB: warning: %s relocation against symbol `%s' from %pA section" +msgstr "%pB: упозорење: „%s“ премештање наÑпрам Ñимбола „%s“ из одељка „%pA“" + +#: elf32-vax.c:1522 +#, c-format +msgid "%pB: warning: %s relocation to %# from %pA section" +msgstr "%pB: упозорење: „%s“ премештање у %# из одељка „%pA“" + +#: elf32-visium.c:824 +#, c-format +msgid "%pB: compiled %s -mtune=%s and linked with modules compiled %s -mtune=%s" +msgstr "%pB: преведено Ñа „%s -mtune=%s“ и повезано Ñа модулима који Ñу преведени Ñа „%s -mtune=%s“" + +#: elf32-xgate.c:506 +#, c-format +msgid "cpu=XGATE]" +msgstr "процеÑор=XGATE]" + +#: elf32-xgate.c:508 +#, c-format +msgid "error reading cpu type from elf private data" +msgstr "грешка читања врÑте процеÑора из личних података елф-а" + +#: elf32-xstormy16.c:457 elf64-ia64-vms.c:2074 elfnn-ia64.c:2343 +msgid "non-zero addend in @fptr reloc" +msgstr "не-нулти Ñабирак у „@fptr“ премештању" + +#: elf32-xtensa.c:1001 +#, c-format +msgid "%pB(%pA): invalid property table" +msgstr "%pB(%pA): неиÑправна табела влаÑништва" + +#: elf32-xtensa.c:2733 +#, c-format +msgid "%pB(%pA+%#): relocation offset out of range (size=%#)" +msgstr "%pB(%pA+%#): померај премештања је ван опÑега (величина=%#)" + +#: elf32-xtensa.c:2816 elf32-xtensa.c:2939 +msgid "dynamic relocation in read-only section" +msgstr "динамичко премештање у одељку Ñамо за читање" + +#: elf32-xtensa.c:2916 +msgid "TLS relocation invalid without dynamic sections" +msgstr "ТЛС премештање је неиÑправно без динамичких одељака" + +#: elf32-xtensa.c:3126 +msgid "internal inconsistency in size of .got.loc section" +msgstr "унутрашња недоÑледноÑÑ‚ у величини одељка „.got.loc“" + +#: elf32-xtensa.c:3432 +#, c-format +msgid "%pB: incompatible machine type; output is 0x%x; input is 0x%x" +msgstr "%pB: неÑаглаÑна врÑта машине; излаз је 0x%x, а улаз 0x%x" + +#: elf32-xtensa.c:4726 elf32-xtensa.c:4734 +msgid "attempt to convert L32R/CALLX to CALL failed" +msgstr "покушај претварања „L32R/CALLX“ у „CALL“ није уÑпео" + +#: elf32-xtensa.c:6559 elf32-xtensa.c:6638 elf32-xtensa.c:8064 +#, c-format +msgid "%pB(%pA+%#): could not decode instruction; possible configuration mismatch" +msgstr "%pB(%pA+%#): не могу да декодирам инÑтрукцију; вероватно је подешавање погрешно" + +#: elf32-xtensa.c:7805 +#, c-format +msgid "%pB(%pA+%#): could not decode instruction for XTENSA_ASM_SIMPLIFY relocation; possible configuration mismatch" +msgstr "%pB(%pA+%#): не могу да декодирам инÑтрукцију за „XTENSA_ASM_SIMPLIFY“ премештање; вероватно је подешавање погрешно" + +#: elf32-xtensa.c:9663 +msgid "invalid relocation address" +msgstr "неиÑправна адреÑа премештања" + +#: elf32-xtensa.c:9754 +msgid "overflow after relaxation" +msgstr "прекорачење након опуштања" -#: elf32-m68hc1x.c:1444 +#: elf32-xtensa.c:10900 #, c-format -msgid "cpu=HC12]" -msgstr "процеÑор=HC12]" +msgid "%pB(%pA+%#): unexpected fix for %s relocation" +msgstr "%pB(%pA+%#): неочекивана иÑправка за „%s“ премештање" -#: elf32-m68hc1x.c:1447 +#: elf32-z80.c:473 #, c-format -msgid " [memory=bank-model]" -msgstr " [меморија=модел-групе]" +msgid "%pB: unsupported bfd mach %#lx" +msgstr "%pB: неподржано бфд поклапање „%#lx“" -#: elf32-m68hc1x.c:1449 +#: elf32-z80.c:518 #, c-format -msgid " [memory=flat]" -msgstr " [меморија=обично]" +msgid "%pB: unsupported mach %#x" +msgstr "%pB: неподржано поклапање „%#x“" -#: elf32-m68hc1x.c:1452 +#: elf32-z80.c:546 #, c-format -msgid " [XGATE RAM offsetting]" -msgstr " [XGATE RAM померај]" +msgid "%pB: unsupported arch %#x" +msgstr "%pB: неподржана архитектура „%#x“" -#: elf32-m68k.c:1210 elf32-m68k.c:1211 vms-alpha.c:7207 vms-alpha.c:7222 -msgid "unknown" -msgstr "непознато" +#: elf64-alpha.c:473 +msgid "GPDISP relocation did not find ldah and lda instructions" +msgstr "„GPDISP“ премештање није нашло инÑтрукције „ldah“ и „lda“" -#: elf32-m68k.c:1674 -msgid "%B: GOT overflow: Number of relocations with 8-bit offset > %d" -msgstr "%B: прекорачење „GOT“: Број премештања Ñа 8-битним померајем > %d" - -#: elf32-m68k.c:1680 -msgid "%B: GOT overflow: Number of relocations with 8- or 16-bit offset > %d" -msgstr "%B: прекорачење „GOT“: Број премештања Ñа 8- или 16-битним померајем > %d" - -#: elf32-m68k.c:3921 -msgid "%B(%A+0x%lx): R_68K_TLS_LE32 relocation not permitted in shared object" -msgstr "%B(%A+0x%lx): „R_68K_TLS_LE32“ премештање није допуштено у дељеним објектима" - -#: elf32-mcore.c:99 elf32-mcore.c:442 -msgid "%B: Relocation %s (%d) is not currently supported.\n" -msgstr "%B: Премештање „%s“ (%d) тренутно није подржано.\n" - -#: elf32-mcore.c:428 -msgid "%B: Unknown relocation type %d\n" -msgstr "%B: Ðепозната врÑта премештања „%d“\n" +#: elf64-alpha.c:1999 elf64-alpha.c:2694 elflink.c:14885 +#, c-format +msgid "%pB: dynamic relocation against `%pT' in read-only section `%pA'\n" +msgstr "%pB: премештање наÑпрам „%pT“ у одељку „%pA“ који је Ñамо за читање\n" -#. Pacify gcc -Wall. -#: elf32-mep.c:157 +#: elf64-alpha.c:2451 #, c-format -msgid "mep: no reloc for code %d" -msgstr "mep: нема премештања за код „%d“" +msgid "%pB: .got subsegment exceeds 64K (size %d)" +msgstr "%pB: под-подеок „.got“ превазилази 64K (величина је %d)" -#: elf32-mep.c:163 +#: elf64-alpha.c:2989 elf64-alpha.c:3183 #, c-format -msgid "MeP: howto %d has type %d" -msgstr "MeP: „howto“ „%d“ има врÑту „%d“" +msgid "%pB: %pA+%#: warning: %s relocation against unexpected insn" +msgstr "%pB: %pA+%#: упозорење: „%s“ премештање неочекиваног улазног знака" -#: elf32-mep.c:632 -msgid "%B and %B are for different cores" -msgstr "„%B“ и „%B“ Ñу за различита језгра" - -#: elf32-mep.c:649 -msgid "%B and %B are for different configurations" -msgstr "„%B“ и „%B“ Ñу за различита подешавања" +#: elf64-alpha.c:4381 elf64-alpha.c:4394 +#, c-format +msgid "%pB: gp-relative relocation against dynamic symbol %s" +msgstr "%pB: „gp“-одноÑно премештање наÑпрам динамичког Ñимбола „%s“" -#: elf32-mep.c:686 +#: elf64-alpha.c:4450 #, c-format -msgid "private flags = 0x%lx" -msgstr "приватне заÑтавице = 0x%lx" +msgid "%pB: change in gp: BRSGP %s" +msgstr "%pB: измена у „gp“-у: BRSGP %s" -#: elf32-metag.c:1921 -msgid "%B(%A+0x%lx): R_METAG_TLS_LE/IENONPIC relocation not permitted in shared object" -msgstr "%B(%A+0x%lx): „R_METAG_TLS_LE/IENONPIC“ премештање није допуштено у дељеним објектима" +#: elf64-alpha.c:4475 mach-o.c:616 elfnn-riscv.c:485 +msgid "" +msgstr "<непознато>" -#: elf32-microblaze.c:950 +#: elf64-alpha.c:4481 #, c-format -msgid "%s: unknown relocation type %d" -msgstr "%s: непозната врÑта премештања „%d“" +msgid "%pB: !samegp reloc against symbol without .prologue: %s" +msgstr "%pB: „!samegp“ премештање наÑпрам Ñимбола без „.prologue“-а: %s" -#: elf32-microblaze.c:1076 elf32-microblaze.c:1121 +#: elf64-alpha.c:4539 #, c-format -msgid "%s: The target (%s) of an %s relocation is in the wrong section (%s)" -msgstr "%s: Мета (%s) премештања „%s“ је у погрешном одељку (%s)" +msgid "%pB: unhandled dynamic relocation against %s" +msgstr "%pB: необрађено динамичко премештање наÑпрам „%s“" -#: elf32-microblaze.c:1484 elf32-tilepro.c:3320 elfxx-sparc.c:3526 -#: elfxx-tilegx.c:3729 -msgid "%B: probably compiled without -fPIC?" -msgstr "%B: вероватно је преведено без „-fPIC“?" +#: elf64-alpha.c:4574 +#, c-format +msgid "%pB: pc-relative relocation against undefined weak symbol %s" +msgstr "%pB: „pc“-одноÑно премештање наÑпрам недефиниÑаног Ñлабог Ñимбола „%s“" -#: elf32-mips.c:1670 elf64-mips.c:2990 elfn32-mips.c:2793 -msgid "literal relocation occurs for an external symbol" -msgstr "дошло је до доÑловног премештања Ñпољног Ñимбола" +#: elf64-alpha.c:4640 +#, c-format +msgid "%pB: dtp-relative relocation against dynamic symbol %s" +msgstr "%pB: „dtp“-одноÑно премештање наÑпрам динамичког Ñимбола „%s“" -#: elf32-mips.c:1717 elf32-score.c:570 elf32-score7.c:469 elf64-mips.c:3033 -#: elfn32-mips.c:2834 -msgid "32bits gp relative relocation occurs for an external symbol" -msgstr "дошло је до 32-битног гп релативног премештања Ñпољног Ñимбола" +#: elf64-alpha.c:4665 +#, c-format +msgid "%pB: tp-relative relocation against dynamic symbol %s" +msgstr "%pB: „tp“-одноÑно премештање наÑпрам динамичког Ñимбола „%s“" -#: elf32-msp430.c:801 elf32-msp430.c:1109 -msgid "Try enabling relaxation to avoid relocation truncations" -msgstr "Покушајте да укључите опуштање да биÑте избегли Ñкраћивања премештања" +#. Only if it's not an unresolved symbol. +#: elf64-bpf.c:517 +msgid "internal error: relocation not supported" +msgstr "унутрашња грешка: премештање није подржано" -#: elf32-msp430.c:1317 -msgid "internal error: branch/jump to an odd address detected" -msgstr "унутрашња грешка: откривено је гранање/Ñкок на непарну адреÑу" +#: elf64-gen.c:71 +#, c-format +msgid "%pB: Relocations in generic ELF (EM: %d)" +msgstr "%pB: Премештања у општем „ELF“-у (EM: %d)" -#: elf32-msp430.c:2221 -msgid "Warning: %B: Unknown MSPABI object attribute %d" -msgstr "Упозорење: %B: „%d“ атрибут „MSPABI“ објекта није познат" +#: elf64-hppa.c:2032 +#, c-format +msgid "stub entry for %s cannot load .plt, dp offset = %" +msgstr "ÑƒÐ½Ð¾Ñ Ð¾ÐºÑ€Ð°Ñ˜ÐºÐ° за „%s“ не може да учита „.plt“, померај „dp“ = %" -#: elf32-msp430.c:2312 -msgid "error: %B uses %s instructions but %B uses %s" -msgstr "грешка: „%B“ кориÑти инÑтрукције „%s“ али „%B“ кориÑти „%s“" +#: elf64-hppa.c:3236 +#, c-format +msgid "%pB(%pA+%#): cannot reach %s" +msgstr "%pB(%pA+%#): не може доÑтићи „%s“" -#: elf32-msp430.c:2324 -msgid "error: %B uses the %s code model whereas %B uses the %s code model" -msgstr "грешка: „%B“ кориÑти модел „%s“ кода док „%B“ кориÑти модел „%s“ кода" +#: elf64-ia64-vms.c:598 elfnn-ia64.c:639 +#, c-format +msgid "%pB: can't relax br at %# in section `%pA'; please use brl or indirect branch" +msgstr "%pB: не могу да опуÑтим „br“ на %# у одељку „%pA“; кориÑтите „brl“ или индиректну грану" -#: elf32-msp430.c:2336 -msgid "error: %B uses the large code model but %B uses MSP430 instructions" -msgstr "грешка: „%B“ кориÑти велики модел кода али „%B“ кориÑти инÑтрукције „MSP430“" +#: elf64-ia64-vms.c:2029 elfnn-ia64.c:2291 +msgid "@pltoff reloc against local symbol" +msgstr "„@pltoff“ премештање наÑпрам локалног Ñимбола" -#: elf32-msp430.c:2346 -msgid "error: %B uses the %s data model whereas %B uses the %s data model" -msgstr "грешка: „%B“ кориÑти модел „%s“ података док „%B“ кориÑти модел „%s“ података" +#: elf64-ia64-vms.c:3281 elfnn-ia64.c:3674 +#, c-format +msgid "%pB: short data segment overflowed (%# >= 0x400000)" +msgstr "%pB: прекорачење Ñегмента кратких података (%# >= 0x400000)" -#: elf32-msp430.c:2358 -msgid "error: %B uses the small code model but %B uses the %s data model" -msgstr "грешка: „%B“ кориÑти мали модел кода али „%B“ кориÑти модел „%s“ података" +#: elf64-ia64-vms.c:3291 elfnn-ia64.c:3684 +#, c-format +msgid "%pB: __gp does not cover short data segment" +msgstr "%pB: „__gp“ не покрива Ñегмент кратких података" -#: elf32-msp430.c:2369 -msgid "error: %B uses the %s data model but %B only uses MSP430 instructions" -msgstr "грешка: „%B“ кориÑти модел „%s“ података али „%B“ кориÑти инÑтрукције „MSP430“" +#: elf64-ia64-vms.c:3561 elfnn-ia64.c:3958 +#, c-format +msgid "%pB: non-pic code with imm relocation against dynamic symbol `%s'" +msgstr "%pB: не-„pic“ код Ñа „imm“ премештањем наÑпрам динамичког Ñимбола „%s“" -#: elf32-nds32.c:2921 -msgid "error: Can't find symbol: _SDA_BASE_." -msgstr "грешка: Ðе могу да нађем Ñимбол: _SDA_BASE_." +#: elf64-ia64-vms.c:3625 elfnn-ia64.c:4026 +#, c-format +msgid "%pB: @gprel relocation against dynamic symbol %s" +msgstr "%pB: „@gprel“ премештање наÑпрам динамичког Ñимбола „%s“" -#: elf32-nds32.c:4142 -msgid "%B: error: unknown relocation type %d." -msgstr "%B: грешка: непозната врÑта премештања „%d“." +#: elf64-ia64-vms.c:3684 elfnn-ia64.c:4089 +#, c-format +msgid "%pB: linking non-pic code in a position independent executable" +msgstr "%pB: повезујем не-„pic“ код у извршном незавиÑном од положаја" -#: elf32-nds32.c:4584 +#: elf64-ia64-vms.c:3786 elfnn-ia64.c:4227 #, c-format -msgid "%s: warning: cannot deal R_NDS32_25_ABS_RELA in shared mode." -msgstr "%s: упозорење: не могу да радим Ñа „R_NDS32_25_ABS_RELA“ у дељеном режиму." +msgid "%pB: @internal branch to dynamic symbol %s" +msgstr "%pB: „@internal“ грана ка динамичком Ñимболу „%s“" -#: elf32-nds32.c:4716 -msgid "%B: warning: unaligned access to GOT entry." -msgstr "%B: упозорење: непоравнат приÑтуп уноÑу „GOT“." +#: elf64-ia64-vms.c:3789 elfnn-ia64.c:4230 +#, c-format +msgid "%pB: speculation fixup to dynamic symbol %s" +msgstr "%pB: разматрам иÑправку динамичког Ñимбола „%s“" -#: elf32-nds32.c:4758 -msgid "%B: warning: relocate SDA_BASE failed." -msgstr "%B: упозорење: није уÑпело премештање „SDA_BASE“." +#: elf64-ia64-vms.c:3792 elfnn-ia64.c:4233 +#, c-format +msgid "%pB: @pcrel relocation against dynamic symbol %s" +msgstr "%pB: „@pcrel“ премештање наÑпрам динамичког Ñимбола „%s“" -#: elf32-nds32.c:4779 -msgid "%B(%A): warning: unaligned small data access of type %d." -msgstr "%B(%A): упозорење: приÑтуп непоравнатим малим подацима врÑте „%d“." +#: elf64-ia64-vms.c:3916 elfnn-ia64.c:4430 +msgid "unsupported reloc" +msgstr "неподржано премештање" -#: elf32-nds32.c:5446 -msgid "%B: ISR vector size mismatch with previous modules, previous %u-byte, current %u-byte" -msgstr "%B: Величина вектора „ISR“ Ñе разликује од претходних модула: претходна %u бајта; текућа %u бајта" +#: elf64-ia64-vms.c:3953 elfnn-ia64.c:4468 +#, c-format +msgid "%pB: missing TLS section for relocation %s against `%s' at %# in section `%pA'." +msgstr "%pB: недоÑтаје „TLS“ одељак за „%s“ премештање наÑпрам „%s“ на %# у одељку „%pA“." -#: elf32-nds32.c:5489 -msgid "%B: warning: Endian mismatch with previous modules." -msgstr "%B: упозорење: КрајњоÑÑ‚ Ñе разликује од претходних модула." +#: elf64-ia64-vms.c:3970 elfnn-ia64.c:4485 +#, c-format +msgid "%pB: Can't relax br (%s) to `%s' at %# in section `%pA' with size %# (> 0x1000000)." +msgstr "%pB: Ðе могу да опуÑтим „br“ (%s) у „%s“ на %# у одељку „%pA“ Ñа величином %# (> 0x1000000)." -#: elf32-nds32.c:5499 -msgid "%B: warning: Older version of object file encountered, Please recompile with current tool chain." -msgstr "%B: упозорење: Ðаишао Ñам на Ñтарије издање датотеке објекта, преведите поново Ñа текућим ланцем алата." +#: elf64-ia64-vms.c:4266 elfnn-ia64.c:4746 +#, c-format +msgid "%pB: linking trap-on-NULL-dereference with non-trapping files" +msgstr "%pB: повезујем захват-на-ÐИШТÐÐ’ÐОЈ-дереференци Ñа не-захватним датотекама" -#: elf32-nds32.c:5577 -msgid "%B: error: ABI mismatch with previous modules." -msgstr "%B: грешка: ÐБИ Ñе разликује од претходних модула." +#: elf64-ia64-vms.c:4275 elfnn-ia64.c:4755 +#, c-format +msgid "%pB: linking big-endian files with little-endian files" +msgstr "%pB: повезујем датотеке велике крајњоÑти Ñа датотекама мале крајњоÑти" -#: elf32-nds32.c:5588 -msgid "%B: error: Instruction set mismatch with previous modules." -msgstr "%B: грешка: Скуп инÑтрукција Ñе разликује од претходних модула." +#: elf64-ia64-vms.c:4284 elfnn-ia64.c:4764 +#, c-format +msgid "%pB: linking 64-bit files with 32-bit files" +msgstr "%pB: повезујем 64-битне датотеке Ñа 32-битним датотекама" -#: elf32-nds32.c:5612 -msgid "%B: warning: Incompatible elf-versions %s and %s." -msgstr "%B: упозорење: елф издања %s и %s ниÑу ÑаглаÑна." +#: elf64-ia64-vms.c:4293 elfnn-ia64.c:4773 +#, c-format +msgid "%pB: linking constant-gp files with non-constant-gp files" +msgstr "%pB: повезујем датотеке „конÑтантног-гп“-а Ñа датотекама „не-конÑтантног-гп“-а" -#: elf32-nds32.c:5642 +#: elf64-ia64-vms.c:4303 elfnn-ia64.c:4783 #, c-format -msgid ": n1 instructions" -msgstr ": инÑтрукције „n1“" +msgid "%pB: linking auto-pic files with non-auto-pic files" +msgstr "%pB: повезујем датотеке ауто-„pic“-а Ñа датотекама не-ауто-„pic“" -#: elf32-nds32.c:5645 +#: elf64-ia64-vms.c:5150 elflink.c:5072 #, c-format -msgid ": n1h instructions" -msgstr ": инÑтрукције „n1h“" +msgid "warning: alignment %u of common symbol `%s' in %pB is greater than the alignment (%u) of its section %pA" +msgstr "упозорење: „%u“ поравнање општег Ñимбола „%s“ у „%pB“ је веће од поравнања (%u) његовог одељка „%pA“" -#: elf32-nds32.c:8147 -msgid "%B: %s\n" -msgstr "%B: %s\n" +#: elf64-ia64-vms.c:5157 elflink.c:5079 +#, c-format +msgid "warning: alignment %u of symbol `%s' in %pB is smaller than %u in %pB" +msgstr "упозорење: „%u“ поравнање Ñимбола „%s“ у „%pB“ је мање од „%u“ у „%pB“" -#: elf32-nds32.c:8449 -msgid "%B(%A): warning: relax is suppressed for sections of alignment %d-bytes > 4-byte." -msgstr "%B(%A): упозорење: опуштање је потиÑнуто за одељке поравнања %d-бајта > 4-бајта." +#: elf64-ia64-vms.c:5173 elflink.c:5096 +#, c-format +msgid "warning: size of symbol `%s' changed from % in %pB to % in %pB" +msgstr "упозорење: величина Ñимбола „%s“ је измењена из „%“ у „%pB“ у „%“ у „%pB“" -#: elf32-nds32.c:8502 -msgid "%B: error: Cannot set _ITB_BASE_" -msgstr "%B: грешка: Ðе могу да подеÑим „_ITB_BASE_“" +#: elf64-mips.c:4095 +#, c-format +msgid "%pB(%pA): relocation % has invalid symbol index %ld" +msgstr "%pB(%pA): премештање „%“ има неиÑправан Ð¸Ð½Ð´ÐµÐºÑ Ñимбола %ld" -#: elf32-nds32.c:11384 -msgid "%B: Nested OMIT_FP in %A." -msgstr "%B: Угнежђено „OMIT_FP“ у „%A“." +#: elf64-mmix.c:984 +msgid "invalid input relocation when producing non-ELF, non-mmo format output; please use the objcopy program to convert from ELF or mmo, or assemble using \"-no-expand\" (for gcc, \"-Wa,-no-expand\"" +msgstr "неиÑправно премештање улаза приликом давања не-„ELF“, не-„mmo“ запиÑа излаза; кориÑтите програм „objcopy“ да претворите из „ELF“-а или „mmo“-а, или ÑаÑтавите кориÑтећи „-no-expand“ (за гцц, „-Wa,-no-expand“)" -#: elf32-nds32.c:11401 -msgid "%B: Unmatched OMIT_FP in %A." -msgstr "%B: Ðеодговарајуће „OMIT_FP“ у „%A“." +#: elf64-mmix.c:1168 +msgid "invalid input relocation when producing non-ELF, non-mmo format output; please use the objcopy program to convert from ELF or mmo, or compile using the gcc-option \"-mno-base-addresses\"." +msgstr "неиÑправно премештање улаза приликом давања не-„ELF“, не-„mmo“ запиÑа излаза; кориÑтите програм „objcopy“ да претворите из „ELF“-а или „mmo“-а, или преведите кориÑтећи гцц-опцију „-mno-base-addresses“." -#: elf32-nds32.c:13357 -msgid "Linker: cannot init ex9 hash table error \n" -msgstr "Повезивач: не могу да започнем грешку „ex9“ хеш табеле \n" +#: elf64-mmix.c:1195 +#, c-format +msgid "" +"%pB: Internal inconsistency error for value for\n" +" linker-allocated global register: linked: %# != relaxed: %#" +msgstr "" +"%pB: Унутрашња грешка недоÑледноÑти за вредноÑÑ‚ за\n" +" општи региÑтар додељен повезивачем: повезано: %# != опуштено: %#" -#: elf32-nds32.c:13790 elf32-nds32.c:13804 -msgid "Linker: error cannot fixed ex9 relocation \n" -msgstr "Повезивач: грешка не може да поправи „ex9“ премештање \n" +#: elf64-mmix.c:1619 +#, c-format +msgid "%pB: base-plus-offset relocation against register symbol: (unknown) in %pA" +msgstr "%pB: премештање оÑнове Ð¿Ð»ÑƒÑ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ наÑпрам Ñимбола региÑтра: (непознато) у „%pA“" -#: elf32-nds32.c:14015 +#: elf64-mmix.c:1625 #, c-format -msgid "%s: warning: unaligned small data access. For entry: {%d, %d, %d}, addr = 0x%x, align = 0x%x." -msgstr "%s: упозорење: није поравнат приÑтуп малих података. За уноÑ: {%d, %d, %d}, адреÑа = 0x%x, поравнање = 0x%x." +msgid "%pB: base-plus-offset relocation against register symbol: %s in %pA" +msgstr "%pB: премештање оÑнове Ð¿Ð»ÑƒÑ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ наÑпрам Ñимбола региÑтра: „%s“ у „%pA“" -#: elf32-nds32.c:14047 -msgid "%P%F: failed creating ex9.it %s hash table: %E\n" -msgstr "%P%F: ниÑам уÑпео да направим „ex9.it %s“ хеш табелу: %E\n" +#: elf64-mmix.c:1670 +#, c-format +msgid "%pB: register relocation against non-register symbol: (unknown) in %pA" +msgstr "%pB: премештање региÑтра наÑпрам Ñимбола не-региÑтра: (непознато) у „%pA“" -#: elf32-nios2.c:2861 +#: elf64-mmix.c:1676 #, c-format -msgid "global pointer relative relocation at address 0x%08x when _gp not defined\n" -msgstr "релативно премештање општег показивача на адреÑи 0x%08x када „_gp“ није дефиниÑано\n" +msgid "%pB: register relocation against non-register symbol: %s in %pA" +msgstr "%pB: премештање региÑтра наÑпрам Ñимбола не-региÑтра: „%s“ у „%pA“" -#: elf32-nios2.c:2878 +#: elf64-mmix.c:1713 #, c-format -msgid "Unable to reach %s (at 0x%08x) from the global pointer (at 0x%08x) because the offset (%d) is out of the allowed range, -32678 to 32767.\n" -msgstr "Ðе могу да доÑтигнем „%s“ (на 0x%08x) из општег показивача (на 0x%08x) зато што је померај (%d) изван допуштеног опÑега, од -32678 до 32767.\n" +msgid "%pB: directive LOCAL valid only with a register or absolute value" +msgstr "%pB: директива „LOCAL“ је иÑправна Ñамо Ñа региÑтром или апÑолутном вредношћу" -#: elf32-nios2.c:3392 -msgid "%B(%A+0x%lx): R_NIOS2_TLS_LE16 relocation not permitted in shared object" -msgstr "%B(%A+0x%lx): „R_NIOS2_TLS_LE16“ премештање није допуштено у дељеним објектима" +#: elf64-mmix.c:1742 +#, c-format +msgid "%pB: LOCAL directive: register $% is not a local register; first global register is $%" +msgstr "%pB: директива „LOCAL“: региÑтар „$%“ није меÑни региÑтар; први општи региÑтар је „$%“" -#: elf32-nios2.c:3520 -msgid "relocation out of range" -msgstr "премештање је ван опÑега" +#: elf64-mmix.c:2167 +#, c-format +msgid "%pB: error: multiple definition of `%s'; start of %s is set in a earlier linked file" +msgstr "%pB: грешка: неколико дефиниција за „%s“; почетак „%s“ је подешен у раније повезаној датотеци" -#: elf32-nios2.c:3530 elf32-tic6x.c:2744 -msgid "dangerous relocation" -msgstr "опаÑно премештање" +#: elf64-mmix.c:2222 +msgid "register section has contents\n" +msgstr "одељак региÑтра има Ñадржај\n" -#: elf32-nios2.c:4529 +#: elf64-mmix.c:2412 #, c-format -msgid "dynamic variable `%s' is zero size" -msgstr "динамичка променљива „%s“ је нулте величине" +msgid "internal inconsistency: remaining %lu != max %lu; please report this bug" +msgstr "унутрашња недоÑледноÑÑ‚: преоÑтаје %lu != max %lu; пријавите ову грешку" -#: elf32-ppc.c:2100 +#: elf64-ppc.c:1342 #, c-format -msgid "generic linker can't handle %s" -msgstr "општи повезивач не може да ради Ñа „%s“" +msgid "warning: %s should be used rather than %s" +msgstr "упозорење: „%s“ Ñе треба кориÑтити умеÑто „%s“" -#: elf32-ppc.c:2642 -msgid "corrupt %s section in %B" -msgstr "оштећен „%s“ одељак у „%B“" - -#: elf32-ppc.c:2661 -msgid "unable to read in %s section from %B" -msgstr "не могу да читам у одељку „%s“ из „%B“" - -#: elf32-ppc.c:2702 -msgid "warning: unable to set size of %s section in %B" -msgstr "упозорење: не могу да поÑтавим величину одељка „%s“ у „%B“" - -#: elf32-ppc.c:2752 -msgid "failed to allocate space for new APUinfo section." -msgstr "ниÑам уÑпео да доделим проÑтор за нови одељак „APUinfo“." - -#: elf32-ppc.c:2771 -msgid "failed to compute new APUinfo section." -msgstr "ниÑам уÑпео да израчунам нови одељак „APUinfo“." - -#: elf32-ppc.c:2774 -msgid "failed to install new APUinfo section." -msgstr "ниÑам уÑпео да инÑталирам нови одељак „APUinfo“." - -#: elf32-ppc.c:3844 -msgid "%B: relocation %s cannot be used when making a shared object" -msgstr "%B: премештање „%s“ Ñе не може кориÑтити приликом Ñтварања дељеног објекта" - -#. It does not make sense to have a procedure linkage -#. table entry for a local symbol. -#: elf32-ppc.c:4218 -msgid "%P: %H: %s reloc against local symbol\n" -msgstr "%P: %H: „%s“ премештање наÑпрам локалног Ñимбола\n" - -#: elf32-ppc.c:4299 -msgid "%P: %H: @local call to ifunc %s\n" -msgstr "%P: %H: позив „@local“ за i-функцију „%s“\n" - -#: elf32-ppc.c:4588 elf32-ppc.c:4603 -msgid "Warning: %B uses hard float, %B uses soft float" -msgstr "Упозорење: „%B“ кориÑти хардверÑки покретни зарез, „%B“ кориÑти ÑофтверÑки покретни зарез" - -#: elf32-ppc.c:4591 elf32-ppc.c:4595 -msgid "Warning: %B uses double-precision hard float, %B uses single-precision hard float" -msgstr "Упозорење: „%B“ кориÑти хардверÑки покретни зарез двоÑтруке тачноÑти, „%B“ кориÑти хардверÑки покретни зарез једне тачноÑти" - -#: elf32-ppc.c:4599 -msgid "Warning: %B uses soft float, %B uses single-precision hard float" -msgstr "Упозорење: „%B“ кориÑти ÑофтверÑки покретни зарез, „%B“ кориÑти хардверÑки покретни зарез једне тачноÑти" - -#: elf32-ppc.c:4606 elf32-ppc.c:4610 -msgid "Warning: %B uses unknown floating point ABI %d" -msgstr "Упозорење: „%B“ кориÑти непознати ÐБИ „%d“ покретног зареза" - -#: elf32-ppc.c:4652 elf32-ppc.c:4656 -msgid "Warning: %B uses unknown vector ABI %d" -msgstr "Упозорење: „%B“ кориÑти непознати ÐБИ „%d“ вектора" - -#: elf32-ppc.c:4660 -msgid "Warning: %B uses vector ABI \"%s\", %B uses \"%s\"" -msgstr "Упозорење: „%B“ кориÑти ÐБИ „%s“ вектора, „%B“ кориÑти „%s“" - -#: elf32-ppc.c:4677 elf32-ppc.c:4680 -msgid "Warning: %B uses r3/r4 for small structure returns, %B uses memory" -msgstr "Упозорење: „%B“ кориÑти „r3/r4“ за мале резултате Ñтруктуре, „%B“ кориÑти меморију" - -#: elf32-ppc.c:4683 elf32-ppc.c:4687 -msgid "Warning: %B uses unknown small structure return convention %d" -msgstr "Упозорење: „%B“ кориÑти непознати одговор малог резултата Ñтруктуре „%d“" - -#: elf32-ppc.c:4741 -msgid "%B: compiled with -mrelocatable and linked with modules compiled normally" -msgstr "%B: преведено Ñа „-mrelocatable“ и повезано Ñа модулима који Ñу преведени уобичајеним путем" - -#: elf32-ppc.c:4749 -msgid "%B: compiled normally and linked with modules compiled with -mrelocatable" -msgstr "%B: преведено уобичајеним путем и повезано Ñа модулима који Ñу преведени Ñа „-mrelocatable“" - -#: elf32-ppc.c:4872 -msgid "%P: bss-plt forced due to %B\n" -msgstr "%P: „bss-plt“ је приÑиљено због „%B“\n" - -#: elf32-ppc.c:4875 -msgid "%P: bss-plt forced by profiling\n" -msgstr "%P: „bss-plt“ је приÑиљено профилиÑањем\n" +#: elf64-ppc.c:4101 +#, c-format +msgid "symbol '%s' has invalid st_other for ABI version 1" +msgstr "Ñимбол „%s“ има неиÑправан „st_other“ за ÐБИ издање 1" -#. Uh oh, we didn't find the expected call. We -#. could just mark this symbol to exclude it -#. from tls optimization but it's safer to skip -#. the entire optimization. -#: elf32-ppc.c:5369 elf64-ppc.c:8371 -msgid "%H arg lost __tls_get_addr, TLS optimization disabled\n" -msgstr "Ðргумент „%H“ је изгубио „__tls_get_addr“, ТЛС оптимизација је иÑкључена\n" +#: elf64-ppc.c:4281 +#, c-format +msgid "%pB .opd not allowed in ABI version %d" +msgstr "%pB: „.opd“ није допуштен у „ABI“ издање %d" -#: elf32-ppc.c:7927 -msgid "%P: %B: unknown relocation type %d for symbol %s\n" -msgstr "%P: %B: непозната врÑта премештања „%d“ за Ñимбол „%s“\n" +#: elf64-ppc.c:4852 +#, c-format +msgid "%H: %s reloc unsupported in shared libraries and PIEs\n" +msgstr "%H: „%s“ премештање није подржано у дељеним библиотекама и „PIE“-има\n" -#: elf32-ppc.c:8191 -msgid "%P: %H: non-zero addend on %s reloc against `%s'\n" -msgstr "%P: %H: не нулти Ñабирак на „%s“ премештању наÑпрам „%s“\n" +#: elf64-ppc.c:5260 +#, c-format +msgid "%pB uses unknown e_flags 0x%lx" +msgstr "„%pB“ кориÑти непознато „e_flags“ 0x%lx" -#: elf32-ppc.c:8389 -msgid "%P: %H: relocation %s for indirect function %s unsupported\n" -msgstr "%P: %H: „%s“ премештање за индиректну функцију „%s“ није подржано\n" +#: elf64-ppc.c:5268 +#, c-format +msgid "%pB: ABI version %ld is not compatible with ABI version %ld output" +msgstr "%pB: „ABI“ издање %ld није ÑаглаÑно Ñа „ABI“ издања %ld" -#: elf32-ppc.c:8646 elf32-ppc.c:8676 elf32-ppc.c:8767 -msgid "%P: %B: the target (%s) of a %s relocation is in the wrong output section (%s)\n" -msgstr "%P: %B: мета (%s) премештања „%s“ је у погрешном излазном одељку (%s)\n" +#: elf64-ppc.c:5295 +#, c-format +msgid " [abiv%ld]" +msgstr " [abiv%ld]" -#: elf32-ppc.c:8854 -msgid "%B: the target (%s) of a %s relocation is in the wrong output section (%s)" -msgstr "%B: мета (%s) премештања „%s“ је у погрешном излазном одељку (%s)" +#: elf64-ppc.c:6574 +msgid "%P: copy reloc against `%pT' requires lazy plt linking; avoid setting LD_BIND_NOW=1 or upgrade gcc\n" +msgstr "%P: премештање умножавања наÑпрам „%pT“ захтева лењо „plt“ повезивање; избегавајте подешавање „LD_BIND_NOW=1“ или надоградите гцц\n" -#: elf32-ppc.c:8958 -msgid "%P: %B: relocation %s is not yet supported for symbol %s\n" -msgstr "%P: %B: премештање „%s“ још није подржано за Ñимбол „%s“\n" +#: elf64-ppc.c:6841 +#, c-format +msgid "%pB: undefined symbol on R_PPC64_TOCSAVE relocation" +msgstr "%pB: неодређени Ñимбол на „R_PPC64_TOCSAVE“ премештању" -#: elf32-ppc.c:9038 -msgid "%P: %H: error: %s against `%s' not a multiple of %u\n" -msgstr "%P: %H: грешка: „%s“ наÑпрам „%s“ није производ „%u“\n" +#: elf64-ppc.c:7089 +#, c-format +msgid "dynreloc miscount for %pB, section %pA" +msgstr "грешка бројања динамичког премештања за „%pB“, одељак „%pA“" -#: elf32-ppc.c:9067 -msgid "%P: %H: unresolvable %s relocation against symbol `%s'\n" -msgstr "%P: %H: нерешиво „%s“ премештање наÑпрам Ñимбола „%s“\n" +#: elf64-ppc.c:7178 +#, c-format +msgid "%pB: .opd is not a regular array of opd entries" +msgstr "%pB: „.opd“ није регуларан низ уноÑа операнда" -#: elf32-ppc.c:9114 -msgid "%P: %H: %s reloc against `%s': error %d\n" -msgstr "%P: %H: „%s“ премештање наÑпрам „%s“: грешка %d\n" +#: elf64-ppc.c:7188 +#, c-format +msgid "%pB: unexpected reloc type %u in .opd section" +msgstr "%pB: неочекивана врÑта премештања „%u“ у „.opd“ одељку" -#: elf32-ppc.c:9750 -msgid "%P: %s not defined in linker created %s\n" -msgstr "%P: „%s“ није дефиниÑано у повезивачу Ñтвореном „%s“\n" +#: elf64-ppc.c:7210 +#, c-format +msgid "%pB: undefined sym `%s' in .opd section" +msgstr "%pB: неодређени Ñимбол „%s“ у „.opd“ одељку" -#: elf32-rl78.c:784 -msgid "Warning: RL78_SYM reloc with an unknown symbol" -msgstr "Упозорење: „RL78_SYM“ премештање Ñа непознатим Ñимболом" +#: elf64-ppc.c:7697 +msgid "warning: --plt-localentry is especially dangerous without ld.so support to detect ABI violations" +msgstr "упозорење: „--plt-localentry“ је нарочито опаÑно без „ld.so“ подршке за откривање „ABI“ преÑтупа" -#: elf32-rl78.c:952 elf32-rx.c:1324 -msgid "%B(%A): error: call to undefined function '%s'" -msgstr "%B(%A): грешка: позив за недефиниÑану функцију „%s“" +#: elf64-ppc.c:8017 +msgid "%H __tls_get_addr lost arg, TLS optimization disabled\n" +msgstr "„%H“ „__tls_get_addr“ је изгубио аргумент, ТЛС оптимизација је иÑкључена\n" -#: elf32-rl78.c:966 elf32-rx.c:1338 -msgid "%B(%A): warning: unaligned access to symbol '%s' in the small data area" -msgstr "%B(%A): упозорење: непоравнати приÑтуп ка Ñимболу „%s“ облаÑти малих података" +#: elf64-ppc.c:8417 elf64-ppc.c:9130 +#, c-format +msgid "%s defined on removed toc entry" +msgstr "„%s“ је дефиниÑано на уклоњеном уноÑу табеле Ñадржаја" -#: elf32-rl78.c:970 elf32-rx.c:1342 -msgid "%B(%A): internal error: out of range error" -msgstr "%B(%A): унутрашња грешка: изван опÑега" +#: elf64-ppc.c:9087 +#, c-format +msgid "%H: %s references optimized away TOC entry\n" +msgstr "%H: „%s“ упућује на оптимизацијом одÑтрањени ÑƒÐ½Ð¾Ñ Ñ‚Ð°Ð±ÐµÐ»Ðµ Ñадржаја\n" -#: elf32-rl78.c:974 elf32-rx.c:1346 -msgid "%B(%A): internal error: unsupported relocation error" -msgstr "%B(%A): унутрашња грешка: премештање није подржано" +#: elf64-ppc.c:9308 +#, c-format +msgid "%H: got/toc optimization is not supported for %s instruction\n" +msgstr "%H: оптимизација табеле Ñадржаја није подржана за инÑтрукцију „%s“\n" -#: elf32-rl78.c:978 elf32-rx.c:1350 -msgid "%B(%A): internal error: dangerous relocation" -msgstr "%B(%A): унутрашња грешка: опаÑно премештање" +#: elf64-ppc.c:10135 +#, c-format +msgid "warning: discarding dynamic section %s" +msgstr "упозорење: одбацујем динамички одељак „%s“" -#: elf32-rl78.c:982 elf32-rx.c:1354 -msgid "%B(%A): internal error: unknown error" -msgstr "%B(%A): унутрашња грешка: непозната грешка" +#: elf64-ppc.c:11277 +msgid "%P: cannot find opd entry toc for `%pT'\n" +msgstr "%P: не могу да нађем табелу Ñадржаја уноÑа операнда за „%pT“\n" -#: elf32-rl78.c:1043 -msgid "RL78/G10 ABI conflict: cannot link G10 and non-G10 objects together" -msgstr "„ABI RL78/G10“ Ñукоб: не могу да повежем заједно Г10 и не-Г10 објекте" +#: elf64-ppc.c:11323 elf64-ppc.c:11867 +msgid "%F%P: Could not assign group %pA target %pA to an output section. Retry without --enable-non-contiguous-regions.\n" +msgstr "%F%P: Ðе могу да доделим групе „%pA“ мету „%pA“ излазном одељку. Покушајте без „--enable-non-contiguous-regions“.\n" -#: elf32-rl78.c:1046 elf32-rl78.c:1049 +#: elf64-ppc.c:11385 #, c-format -msgid "- %s is G10, %s is not" -msgstr "— „%s“ је Г10, „%s“ није" +msgid "long branch stub `%s' offset overflow" +msgstr "прекорачење помераја дугог окрајка гране „%s“" -#: elf32-rl78.c:1072 +#: elf64-ppc.c:11412 #, c-format -msgid " [G10]" -msgstr " [Г10]" +msgid "can't find branch stub `%s'" +msgstr "не могу да нађем окрајак гране „%s“" -#: elf32-rx.c:563 -msgid "%B:%A: Warning: deprecated Red Hat reloc " -msgstr "%B:%A: Упозорење: заÑтарело премештање Ред Хета " - -#. Check for unsafe relocs in PID mode. These are any relocs where -#. an absolute address is being computed. There are special cases -#. for relocs against symbols that are known to be referenced in -#. crt0.o before the PID base address register has been initialised. -#: elf32-rx.c:581 -msgid "%B(%A): unsafe PID relocation %s at 0x%08lx (against %s in %s)" -msgstr "%B(%A): неÑигурно ПИД премештање „%s“ на 0x%08lx (наÑпрам „%s“ у „%s“)" - -#: elf32-rx.c:1157 -msgid "Warning: RX_SYM reloc with an unknown symbol" -msgstr "Упозорење: „RX_SYM“ премештање Ñа непознатим Ñимболом" - -#: elf32-s390.c:2292 elf64-s390.c:2244 -msgid "%B(%A+0x%lx): invalid instruction for TLS relocation %s" -msgstr "%B(%A+0x%lx): неиÑправна инÑтрукција за ТЛС премештање „%s“" - -#: elf32-score.c:1520 elf32-score7.c:1379 elfxx-mips.c:3642 -msgid "not enough GOT space for local GOT entries" -msgstr "нема довољно „GOT“ проÑтора за меÑне уноÑе „GOT“" +#: elf64-ppc.c:11476 elf64-ppc.c:11743 elf64-ppc.c:13972 +#, c-format +msgid "%P: linkage table error against `%pT'\n" +msgstr "%P: грешка табеле повезивања наÑпрам „%pT“\n" -#: elf32-score.c:2742 -msgid "address not word align" -msgstr "адреÑа није поравната по речи" +#: elf64-ppc.c:11939 +#, c-format +msgid "can't build branch stub `%s'" +msgstr "не могу да изградим окрајак гране „%s“" -#: elf32-score.c:2827 elf32-score7.c:2631 +#: elf64-ppc.c:12920 #, c-format -msgid "%s: Malformed reloc detected for section %s" -msgstr "%s: Откривено је лоше премештање за одељак „%s“" +msgid "%pB section %pA exceeds stub group size" +msgstr "„%pB“ одељак „%pA“ превазилази величину групе окрајка" -#: elf32-score.c:2882 elf32-score7.c:2686 -msgid "%B: CALL15 reloc at 0x%lx not against global symbol" -msgstr "%B: „CALL15“ премештање на 0x%lx није наÑпрам општег Ñимбола" +#: elf64-ppc.c:14153 +msgid "__tls_get_addr call offset overflow" +msgstr "прекорачење помераја „__tls_get_addr“ позива" -#: elf32-score.c:4007 elf32-score7.c:3811 +#: elf64-ppc.c:14455 elf64-ppc.c:14474 #, c-format -msgid " [pic]" -msgstr " [пик]" +msgid "%s offset too large for .eh_frame sdata4 encoding" +msgstr "„%s“ померај је превелик за „.eh_frame sdata4“ кодирање" -#: elf32-score.c:4011 elf32-score7.c:3815 +#: elf64-ppc.c:14506 #, c-format -msgid " [fix dep]" -msgstr " [Ñ„Ð¸ÐºÑ Ð´ÑƒÐ±]" +msgid "linker stubs in %u group\n" +msgid_plural "linker stubs in %u groups\n" +msgstr[0] "окрајци повезивача у %u групи\n" +msgstr[1] "окрајци повезивача у %u групе\n" +msgstr[2] "окрајци повезивача у %u група\n" -#: elf32-score.c:4053 elf32-score7.c:3857 -msgid "%B: warning: linking PIC files with non-PIC files" -msgstr "%B: упозорење: повезујем „PIC“ датотеке Ñа не-„PIC“ датотекама" - -#: elf32-sh-symbian.c:130 -msgid "%B: IMPORT AS directive for %s conceals previous IMPORT AS" -msgstr "%B: директива УВЕЗИ КÐО за „%s“ заÑењује претходно УВЕЗИ КÐО" - -#: elf32-sh-symbian.c:383 -msgid "%B: Unrecognised .directive command: %s" -msgstr "%B: Ðепозната наредба „.directive“: %s" - -#: elf32-sh-symbian.c:500 -msgid "%B: Failed to add renamed symbol %s" -msgstr "%B: ÐиÑам уÑпео да додам преименовани Ñимбол „%s“" - -#: elf32-sh.c:569 -msgid "%B: 0x%lx: warning: bad R_SH_USES offset" -msgstr "%B: 0x%lx: упозорење: лош померај „R_SH_USES“" - -#: elf32-sh.c:581 -msgid "%B: 0x%lx: warning: R_SH_USES points to unrecognized insn 0x%x" -msgstr "%B: 0x%lx: упозорење: „R_SH_USES“ показује на непознат „insn“ 0x%x" - -#: elf32-sh.c:598 -msgid "%B: 0x%lx: warning: bad R_SH_USES load offset" -msgstr "%B: 0x%lx: упозорење: лош померај учитавања „R_SH_USES“" - -#: elf32-sh.c:613 -msgid "%B: 0x%lx: warning: could not find expected reloc" -msgstr "%B: 0x%lx: упозорење: не могу да нађем очекивано премештање" - -#: elf32-sh.c:641 -msgid "%B: 0x%lx: warning: symbol in unexpected section" -msgstr "%B: 0x%lx: упозорење: Ñимбол је у неочекиваном одељку" - -#: elf32-sh.c:767 -msgid "%B: 0x%lx: warning: could not find expected COUNT reloc" -msgstr "%B: 0x%lx: упозорење: не могу да нађем очекивано премештање „COUNT“" - -#: elf32-sh.c:776 -msgid "%B: 0x%lx: warning: bad count" -msgstr "%B: 0x%lx: упозорење: лош број" - -#: elf32-sh.c:1180 elf32-sh.c:1550 -msgid "%B: 0x%lx: fatal: reloc overflow while relaxing" -msgstr "%B: 0x%lx: кобна грешка: прекорачење премештања приликом опуштања" - -#: elf32-sh.c:3939 elf64-sh64.c:1514 -msgid "Unexpected STO_SH5_ISA32 on local symbol is not handled" -msgstr "Ðеочекивано „STO_SH5_ISA32“ на меÑном Ñимболу није одрађено" - -#: elf32-sh.c:4190 -msgid "%B: 0x%lx: fatal: unaligned branch target for relax-support relocation" -msgstr "%B: 0x%lx: кобна грешка: непоравнат циљ гране за премештање подршке опуштања" - -#: elf32-sh.c:4223 elf32-sh.c:4238 -msgid "%B: 0x%lx: fatal: unaligned %s relocation 0x%lx" -msgstr "%B: 0x%lx: кобна грешка: непоравнато премештање „%s“ 0x%lx" - -#: elf32-sh.c:4252 -msgid "%B: 0x%lx: fatal: R_SH_PSHA relocation %d not in range -32..32" -msgstr "%B: 0x%lx: кобна грешка: „R_SH_PSHA“ премештање „%d“ није у опÑегу -32..32" - -#: elf32-sh.c:4266 -msgid "%B: 0x%lx: fatal: R_SH_PSHL relocation %d not in range -32..32" -msgstr "%B: 0x%lx: кобна грешка: „R_SH_PSHL“ премештање „%d“ није у опÑегу -32..32" - -#: elf32-sh.c:4410 elf32-sh.c:4886 -msgid "%B(%A+0x%lx): cannot emit fixup to `%s' in read-only section" -msgstr "%B(%A+0x%lx): не могу да унеÑем иÑправке у „%s“ у одељку Ñамо за читање" - -#: elf32-sh.c:4993 -msgid "%B(%A+0x%lx): %s relocation against external symbol \"%s\"" -msgstr "%B(%A+0x%lx): „%s“ премештање наÑпрам Ñпољног Ñимбола „%s“" +#: elf64-ppc.c:14513 +#, c-format +msgid "" +"%s branch %lu\n" +" branch toc adj %lu\n" +" branch notoc %lu\n" +" branch both %lu\n" +" long branch %lu\n" +" long toc adj %lu\n" +" long notoc %lu\n" +" long both %lu\n" +" plt call %lu\n" +" plt call save %lu\n" +" plt call notoc %lu\n" +" plt call both %lu\n" +" global entry %lu" +msgstr "" +"%s грана %lu\n" +" грана Ñадр. порав. %lu\n" +" грана не-Ñадр. %lu\n" +" грана оба %lu\n" +" дуго грана %lu\n" +" дуго Ñадр. порав. %lu\n" +" дуго не-Ñадр. %lu\n" +" дуго оба %lu\n" +" плт позив %lu\n" +" плт позив Ñачувај %lu\n" +" плт позив не-Ñадр. %lu\n" +" плт позив оба %lu\n" +" општи ÑƒÐ½Ð¾Ñ %lu" -#: elf32-sh.c:5466 +#: elf64-ppc.c:14913 #, c-format -msgid "%X%C: relocation to \"%s\" references a different segment\n" -msgstr "%X%C: премештање у „%s“ Ñтвара упуту другог Ñегмента\n" +msgid "%H: %s used with TLS symbol `%pT'\n" +msgstr "%H: „%s“ је коришћено Ñа „TLS“ Ñимболом „%pT“\n" -#: elf32-sh.c:5472 +#: elf64-ppc.c:14915 #, c-format -msgid "%C: warning: relocation to \"%s\" references a different segment\n" -msgstr "%C: упозорење: премештање у „%s“ Ñтвара упуту другог Ñегмента\n" +msgid "%H: %s used with non-TLS symbol `%pT'\n" +msgstr "%H: „%s“ је коришћено Ñа не-„TLS“ Ñимболом „%pT“\n" -#: elf32-sh.c:6254 elf32-sh.c:6337 -msgid "%B: `%s' accessed both as normal and FDPIC symbol" -msgstr "%B: „%s“ Ñе приÑтупило и као нормалном и као Ñимболу „FDPIC“" +#: elf64-ppc.c:15670 +#, c-format +msgid "%H: call to `%pT' lacks nop, can't restore toc; (plt call stub)\n" +msgstr "%H: позиву за „%pT“ недоÑтаје „nop“, не могу да вратим табелу Ñадржаја; (plt call stub)\n" -#: elf32-sh.c:6259 elf32-sh.c:6341 -msgid "%B: `%s' accessed both as FDPIC and thread local symbol" -msgstr "%B: „%s“ Ñе приÑтупило и као „FDPIC“-у и као Ñимболу локалне нити" +#: elf64-ppc.c:15676 +#, c-format +msgid "%H: call to `%pT' lacks nop, can't restore toc; (toc save/adjust stub)\n" +msgstr "%H: позиву за „%pT“ недоÑтаје „nop“, не могу да вратим табелу Ñадржаја; (toc save/adjust stub)\n" -#: elf32-sh.c:6289 -msgid "%B: Function descriptor relocation with non-zero addend" -msgstr "%B: Премештање опиÑника функције Ñа не-нултим Ñабирком" +#: elf64-ppc.c:16564 +#, c-format +msgid "%H: %s for indirect function `%pT' unsupported\n" +msgstr "%H: „%s“ за индиректну функцију „%pT“ није подржано\n" -#: elf32-sh.c:6525 elf64-alpha.c:4661 -msgid "%B: TLS local exec code cannot be linked into shared objects" -msgstr "%B: ТЛС меÑни извршни код не може бити повезан у дељеним објектима" +#: elf64-ppc.c:16649 +#, c-format +msgid "%X%P: %pB: %s against %pT is not supported by glibc as a dynamic relocation\n" +msgstr "%X%P: %pB: „%s“ наÑпрам „%pT“ није подржано „glibc“-ом као динамичко премештање\n" -#: elf32-sh64.c:224 elf64-sh64.c:2318 +#: elf64-ppc.c:16704 #, c-format -msgid "%s: compiled as 32-bit object and %s is 64-bit" -msgstr "%s: преведен је као 32-битни објекат а „%s“ је 64-битни" +msgid "%P: %pB: %s is not supported for `%pT'\n" +msgstr "%P: %pB: „%s“ није подржано за „%pT“\n" -#: elf32-sh64.c:227 elf64-sh64.c:2321 +#: elf64-ppc.c:16963 #, c-format -msgid "%s: compiled as 64-bit object and %s is 32-bit" -msgstr "%s: преведен је као 64-битни објекат а „%s“ је 32-битни" +msgid "%H: error: %s not a multiple of %u\n" +msgstr "%H: грешка: „%s“ није производ „%u“\n" -#: elf32-sh64.c:229 elf64-sh64.c:2323 +#: elf64-ppc.c:16986 #, c-format -msgid "%s: object size does not match that of target %s" -msgstr "%s: величина објекта не одговара величини циља „%s“" +msgid "%H: unresolvable %s against `%pT'\n" +msgstr "%H: „%s“ је нерешиво наÑпрам „%pT“\n" -#: elf32-sh64.c:452 elf64-sh64.c:2839 +#: elf64-ppc.c:17131 #, c-format -msgid "%s: encountered datalabel symbol in input" -msgstr "%s: наишао Ñам на Ñимбол натпиÑа датума у улазу" +msgid "%H: %s against `%pT': error %d\n" +msgstr "%H: „%s“ наÑпрам „%pT“: грешка %d\n" -#: elf32-sh64.c:529 -msgid "PTB mismatch: a SHmedia address (bit 0 == 1)" -msgstr "ПТБ не одговара: адреÑа „SHmedia“ (бит 0 == 1)" +#: elf64-s390.c:2446 +#, c-format +msgid "%pB: `%s' non-PLT reloc for symbol defined in shared library and accessed from executable (rebuild file with -fPIC ?)" +msgstr "%pB: „%s“ не-„PLT“ премештање за Ñимбол дефиниÑан у дељеној библиотеци и коме је приÑтупљено из извршног (да поново изградим датотеку Ñа „-fPIC“ ?)" -#: elf32-sh64.c:532 -msgid "PTA mismatch: a SHcompact address (bit 0 == 0)" -msgstr "ПТРне одговара: адреÑа „SHcompact“ (бит 0 == 0)" +#: elf64-sparc.c:478 +#, c-format +msgid "%pB: only registers %%g[2367] can be declared using STT_REGISTER" +msgstr "%pB: Ñамо региÑтри „%%g[2367]“ могу бити деклариÑани коришћењем „STT_REGISTER“" -#: elf32-sh64.c:550 +#: elf64-sparc.c:499 #, c-format -msgid "%s: GAS error: unexpected PTB insn with R_SH_PT_16" -msgstr "%s: ГÐС грешка: неочекивано ПТБ „insn“ Ñа „R_SH_PT_16“" +msgid "register %%g%d used incompatibly: %s in %pB, previously %s in %pB" +msgstr "региÑтар „%%g%d“ је коришћен неÑаглаÑно: „%s“ у „%pB“, претходно „%s“ у „%pB“" -#: elf32-sh64.c:599 -msgid "%B: error: unaligned relocation type %d at %08x reloc %p\n" -msgstr "%B: грешка: непоравната врÑта премештања „%d“ на %08x премештања „%p“\n" +#: elf64-sparc.c:523 +#, c-format +msgid "symbol `%s' has differing types: REGISTER in %pB, previously %s in %pB" +msgstr "Ñимбол „%s“ има другачије врÑте: „REGISTER“ у „%pB“, претходно „%s“ у „%pB“" -#: elf32-sh64.c:675 +#: elf64-sparc.c:570 #, c-format -msgid "%s: could not write out added .cranges entries" -msgstr "%s: не могу да запишем додате „.cranges“ уноÑе" +msgid "Symbol `%s' has differing types: %s in %pB, previously REGISTER in %pB" +msgstr "Ñимбол „%s“ има другачије врÑте: „%s“ у „%pB“, претходно „REGISTER“ у „%pB“" -#: elf32-sh64.c:735 +#: elf64-sparc.c:702 #, c-format -msgid "%s: could not write out sorted .cranges entries" -msgstr "%s: не могу да запишем поређане „.cranges“ уноÑе" +msgid "%pB: linking UltraSPARC specific with HAL specific code" +msgstr "%pB: повезујем код Ñпецифичан „UltraSPARC“-у Ñа кодом Ñпецифичним „HAL“-у" + +#: elf64-x86-64.c:1417 +msgid "hidden symbol " +msgstr "Ñкривени Ñимбол " -#: elf32-sparc.c:90 -msgid "%B: compiled for a 64 bit system and target is 32 bit" -msgstr "%B: преведено за 64-битни ÑиÑтем а циљ је 32-битни" +#: elf64-x86-64.c:1420 +msgid "internal symbol " +msgstr "унутрашњи Ñимбол " -#: elf32-sparc.c:103 -msgid "%B: linking little endian files with big endian files" -msgstr "%B: повезујем датотеке мале крајњоÑти Ñа датотекама велике крајњоÑти" +#: elf64-x86-64.c:1423 elf64-x86-64.c:1427 +msgid "protected symbol " +msgstr "заштићени Ñимбол " -#: elf32-spu.c:716 -msgid "%X%P: overlay section %A does not start on a cache line.\n" -msgstr "%X%P: одељак преклапања „%A“ не почиње у реду оÑтаве.\n" +#: elf64-x86-64.c:1429 +msgid "symbol " +msgstr "Ñимбол " -#: elf32-spu.c:724 -msgid "%X%P: overlay section %A is larger than a cache line.\n" -msgstr "%X%P: одељак преклапања „%A“ је већи од реда оÑтаве.\n" +#: elf64-x86-64.c:1435 +msgid "undefined " +msgstr "неодређено " -#: elf32-spu.c:744 -msgid "%X%P: overlay section %A is not in cache area.\n" -msgstr "%X%P: одељак преклапања „%A“ није у реду оÑтаве.\n" +#: elf64-x86-64.c:1445 +msgid "a shared object" +msgstr "дељени објекат" -#: elf32-spu.c:784 -msgid "%X%P: overlay sections %A and %A do not start at the same address.\n" -msgstr "%X%P: одељци преклапања „%A“ и „%A“ не почињу на иÑтој адреÑи.\n" +#: elf64-x86-64.c:1447 +msgid "; recompile with -fPIC" +msgstr "; поново преведите Ñа „-fPIC“" -#: elf32-spu.c:1008 -msgid "warning: call to non-function symbol %s defined in %B" -msgstr "упозорење: позив не-функцијÑком Ñимболу „%s“ је дефиниÑан у „%B“" +#: elf64-x86-64.c:1452 +msgid "a PIE object" +msgstr "„PIE“ објекат" -#: elf32-spu.c:1358 -msgid "%A:0x%v lrlive .brinfo (%u) differs from analysis (%u)\n" -msgstr "%A:0x%v „lrlive .brinfo“ (%u) Ñе разликује од анализе (%u)\n" +#: elf64-x86-64.c:1454 +msgid "a PDE object" +msgstr "„PDE“ објекат" -#: elf32-spu.c:1877 -msgid "%B is not allowed to define %s" -msgstr "„%B“ нема дозволу да дефинише „%s“" +#: elf64-x86-64.c:1456 +msgid "; recompile with -fPIE" +msgstr "; поново преведите Ñа „-fPIE“" -#: elf32-spu.c:1885 +#: elf64-x86-64.c:1460 #, c-format -msgid "you are not allowed to define %s in a script" -msgstr "ви немате дозволу да дефинишете „%s“ у Ñкрипти" +msgid "%pB: relocation %s against %s%s`%s' can not be used when making %s%s" +msgstr "%pB: премештање „%s“ наÑпрам „%s%s“ „%s“ Ñе не може кориÑтити приликом Ñтварања „%s%s“" -#: elf32-spu.c:1919 +#: elf64-x86-64.c:1968 #, c-format -msgid "%s in overlay section" -msgstr "„%s“ у одељку преклапања" +msgid "%pB: relocation %s against symbol `%s' isn't supported in x32 mode" +msgstr "%pB: „%s“ премештање наÑпрам Ñимбола „%s“ није подржано у режиму x32" -#: elf32-spu.c:1948 -msgid "overlay stub relocation overflow" -msgstr "прекорачење премештања окрајка прекривања" +#: elf64-x86-64.c:2124 +#, c-format +msgid "%pB: '%s' accessed both as normal and thread local symbol" +msgstr "%pB: „%s“ Ñе приÑтупило и као нормалном и као Ñимболу локалне нити" -#: elf32-spu.c:1957 -msgid "stubs don't match calculated size" -msgstr "окрајци не одговарају израчунатој величини" +#: elf64-x86-64.c:2747 elfnn-aarch64.c:5546 +#, c-format +msgid "%pB: relocation %s against STT_GNU_IFUNC symbol `%s' has non-zero addend: %" +msgstr "%pB: премештање „%s“ наÑпрам „STT_GNU_IFUNC“ Ñимбола „%s“ има не-нулти Ñабирак: %" -#: elf32-spu.c:2539 +#: elf64-x86-64.c:2992 #, c-format -msgid "warning: %s overlaps %s\n" -msgstr "упозорење: „%s“ преклапа „%s“\n" +msgid "%pB: relocation R_X86_64_GOTOFF64 against undefined %s `%s' can not be used when making a shared object" +msgstr "%pB: премештање „R_X86_64_GOTOFF64“ наÑпрам недефиниÑаног %s „%s“ Ñе не може кориÑтити када Ñе Ñтвара дељени објекат" -#: elf32-spu.c:2555 +#: elf64-x86-64.c:3006 #, c-format -msgid "warning: %s exceeds section size\n" -msgstr "упозорење: „%s“ превазилази величину одељка\n" +msgid "%pB: relocation R_X86_64_GOTOFF64 against protected %s `%s' can not be used when making a shared object" +msgstr "%pB: премештање „R_X86_64_GOTOFF64“ наÑпрам заштићеног %s „%s“ Ñе не може кориÑтити када Ñе Ñтвара дељени објекат" + +#: elf64-x86-64.c:3283 +#, c-format +msgid "%pB: addend %s%#x in relocation %s against symbol `%s' at %# in section `%pA' is out of range" +msgstr "%pB: Ñабирак %s%#x у премештању „%s“ наÑпрам Ñимбола „%s“ на %# у одељку „%pA“ је ван опÑега" -#: elf32-spu.c:2586 -msgid "%A:0x%v not found in function table\n" -msgstr "„%A:0x%v“ ниÑам нашао у табели функције\n" +#: elf64-x86-64.c:3417 elflink.c:13267 +msgid "%F%P: corrupt input: %pB\n" +msgstr "%F%P: оштећени уноÑ: %pB\n" -#: elf32-spu.c:2726 -msgid "%B(%A+0x%v): call to non-code section %B(%A), analysis incomplete\n" -msgstr "%B(%A+0x%v): позив не-кодном одељку „%B(%A)“, анализа је непотпуна\n" +#: elf64-x86-64.c:4101 +msgid "%F%P: failed to convert GOTPCREL relocation; relink with --no-relax\n" +msgstr "%F%P: ниÑам уÑпео да претворим „GOTPCREL“ премештање; поново повежите Ñа „--no-relax“\n" -#: elf32-spu.c:3294 +#: elf64-x86-64.c:4259 #, c-format -msgid "Stack analysis will ignore the call from %s to %s\n" -msgstr "Ðнализа Ñпремника ће занемарити позив од „%s“ до „%s“\n" +msgid "%F%pB: PC-relative offset overflow in PLT entry for `%s'\n" +msgstr "%F%pB: прекорачење „PC“-одноÑног помераја у „PLT“ уноÑу за „%s“\n" -#: elf32-spu.c:3985 -msgid " %s: 0x%v\n" -msgstr " %s: 0x%v\n" +#: elf64-x86-64.c:4322 +#, c-format +msgid "%F%pB: branch displacement overflow in PLT entry for `%s'\n" +msgstr "%F%pB: прекорачење размештаја гране у „PLT“ уноÑу за „%s“\n" -#: elf32-spu.c:3986 -msgid "%s: 0x%v 0x%v\n" -msgstr "%s: 0x%v 0x%v\n" +#: elf64-x86-64.c:4375 +#, c-format +msgid "%F%pB: PC-relative offset overflow in GOT PLT entry for `%s'\n" +msgstr "%F%pB: прекорачење „PC“-одноÑног помераја у „GOT PLT“ уноÑу за „%s“\n" -#: elf32-spu.c:3991 -msgid " calls:\n" -msgstr " позиви:\n" +#: elfcode.h:326 +msgid "warning: %pB has a corrupt section with a size (%" +msgstr "упозорење: „%pB“ има оштећен одељак Ñа величином (%" -#: elf32-spu.c:3999 +#: elfcode.h:768 #, c-format -msgid " %s%s %s\n" -msgstr " %s%s %s\n" +msgid "warning: %pB has a corrupt string table index - ignoring" +msgstr "упозорење: „%pB“ има оштећен Ð¸Ð½Ð´ÐµÐºÑ Ñ‚Ð°Ð±ÐµÐ»Ðµ ниÑке — занемарујем" -#: elf32-spu.c:4304 +#: elfcode.h:1228 #, c-format -msgid "%s duplicated in %s\n" -msgstr "„%s“ је удвоÑтручено у „%s“\n" +msgid "%pB: version count (%) does not match symbol count (%ld)" +msgstr "%pB: број издања (%) не одговара броју Ñимбола (%ld)" -#: elf32-spu.c:4308 +#: elfcore.h:308 #, c-format -msgid "%s duplicated\n" -msgstr "„%s“ је удвоÑтручено\n" +msgid "warning: %pB is truncated: expected core file size >= %, found: %" +msgstr "упозорење: „%pB“ је Ñкраћено: очекивах величину датотеке језгра >= %, нађох: %" -#: elf32-spu.c:4315 -msgid "sorry, no support for duplicate object files in auto-overlay script\n" -msgstr "извините, нема подршке за удвоÑтручене датотеке објекта у Ñкрипти Ñамо-преклапања\n" +#: elflink.c:1362 +#, c-format +msgid "%s: TLS definition in %pB section %pA mismatches non-TLS definition in %pB section %pA" +msgstr "%s: „TLS“ дефиниција у „%pB“ одељак „%pA“ не одговара не-„TLS“ дефиницији у „%pB“ одељак „%pA“" -#: elf32-spu.c:4356 -msgid "non-overlay size of 0x%v plus maximum overlay size of 0x%v exceeds local store\n" -msgstr "не-преклапајућа величина 0x%v Ð¿Ð»ÑƒÑ Ð½Ð°Ñ˜Ð²ÐµÑ›Ð° величина преклапања 0x%v превазилазе меÑно Ñпремиште\n" +#: elflink.c:1368 +#, c-format +msgid "%s: TLS reference in %pB mismatches non-TLS reference in %pB" +msgstr "%s: „TLS“ упута у „%pB“ не одговара не-„TLS“ упути у „%pB“" -#: elf32-spu.c:4511 -msgid "%B:%A%s exceeds overlay size\n" -msgstr "„%B:%A%s“ превазилази величину преклапања\n" +#: elflink.c:1374 +#, c-format +msgid "%s: TLS definition in %pB section %pA mismatches non-TLS reference in %pB" +msgstr "%s: „TLS“ дефиниција у „%pB“ одељак „%pA“ не одговара не-„TLS“ упути у „%pB“" -#: elf32-spu.c:4673 -msgid "Stack size for call graph root nodes.\n" -msgstr "Величина Ñпремника за позив чворова корена графика.\n" +#: elflink.c:1380 +#, c-format +msgid "%s: TLS reference in %pB mismatches non-TLS definition in %pB section %pA" +msgstr "%s: „TLS“ упута у „%pB“ не одговара не-„TLS“ дефиницији у „%pB“ одељак „%pA“" -#: elf32-spu.c:4674 -msgid "" -"\n" -"Stack size for functions. Annotations: '*' max stack, 't' tail call\n" -msgstr "" -"\n" -"Величина Ñпремника за функције. Ðапомене: „*“ највећи Ñпремник, „t“ позив оÑтатка\n" +#: elflink.c:2071 +#, c-format +msgid "%pB: unexpected redefinition of indirect versioned symbol `%s'" +msgstr "%pB: неочекивано поновно дефиниÑање индиректно верзиониÑаног Ñимбола „%s“" -#: elf32-spu.c:4684 -msgid "Maximum stack required is 0x%v\n" -msgstr "Ðајвећи потребан Ñпремник је 0x%v\n" +#: elflink.c:2448 +#, c-format +msgid "%pB: version node not found for symbol %s" +msgstr "%pB: ниÑам нашао чвор издања за Ñимбол „%s“" -#: elf32-spu.c:4775 -msgid "fatal error while creating .fixup" -msgstr "кобна грешка приликом Ñтварања „.fixup“-а" +#: elflink.c:2539 +#, c-format +msgid "%pB: bad reloc symbol index (%# >= %#lx) for offset %# in section `%pA'" +msgstr "%pB: лош Ð¸Ð½Ð´ÐµÐºÑ Ñимбола премештања (%# >= %#lx) за померај %# у одељку „%pA“" -#: elf32-spu.c:5005 -msgid "%B(%s+0x%lx): unresolvable %s relocation against symbol `%s'" -msgstr "%B(%s+0x%lx): нерешиво „%s“ премештање наÑпрам Ñимбола „%s“" +#: elflink.c:2551 +#, c-format +msgid "%pB: non-zero symbol index (%#) for offset %# in section `%pA' when the object file has no symbol table" +msgstr "%pB: не-нулти Ð¸Ð½Ð´ÐµÐºÑ Ñимбола (%#) за померај %# у одељку „%pA“ када датотека објекта нема табелу Ñимбола" -#: elf32-tic6x.c:1600 -msgid "warning: generating a shared library containing non-PIC code" -msgstr "упозорење: Ñтварам дељену библиотеку која Ñадржи не-ПИЦ код" +#: elflink.c:2740 +#, c-format +msgid "%pB: relocation size mismatch in %pB section %pA" +msgstr "%pB: величина премештања не одговара у „%pB“ одељак „%pA“" -#: elf32-tic6x.c:1605 -msgid "warning: generating a shared library containing non-PID code" -msgstr "упозорење: Ñтварам дељену библиотеку која Ñадржи не-ПИД код" +#: elflink.c:3069 +#, c-format +msgid "warning: type and size of dynamic symbol `%s' are not defined" +msgstr "упозорење: врÑта и величина динамичког Ñимбола „%s“ ниÑу дефиниÑане" -#: elf32-tic6x.c:2524 -msgid "%B: SB-relative relocation but __c6xabi_DSBT_BASE not defined" -msgstr "%B: премештање Ñе одноÑи на „SB“ али „__c6xabi_DSBT_BASE“ није дефиниÑано" +#: elflink.c:3129 +msgid "%P: copy reloc against protected `%pT' is dangerous\n" +msgstr "%P: умножи премештање наÑпрам заштићеног „%pT“ је опаÑно\n" -#: elf32-tic6x.c:3648 -msgid "%B: error: unknown mandatory EABI object attribute %d" -msgstr "%B: грешка: обавезан „%d“ атрибут „EABI“ објекта није познат" +#: elflink.c:4064 +#, c-format +msgid "alternate ELF machine code found (%d) in %pB, expecting %d" +msgstr "нађох измењени „ELF“ машинÑки код (%d) у „%pB“, очекивах „%d“" -#: elf32-tic6x.c:3656 -msgid "%B: warning: unknown EABI object attribute %d" -msgstr "%B: упозорење: „%d“ атрибут „EABI“ објекта није познат" +#: elflink.c:4534 +#, c-format +msgid "%pB: invalid version offset %lx (max %lx)" +msgstr "%pB: неиÑправан померај издања %lx (најв. %lx)" -#: elf32-tic6x.c:3768 elf32-tic6x.c:3776 -msgid "error: %B requires more stack alignment than %B preserves" -msgstr "грешка: „%B“ захтева веће поравнање Ñпремника него што „%B“ Ñадржи" +#: elflink.c:4602 +#, c-format +msgid "%pB: %s local symbol at index %lu (>= sh_info of %lu)" +msgstr "%pB: „%s“ локални Ñимбол у индекÑу %lu (>= sh_info %lu)" -#: elf32-tic6x.c:3786 elf32-tic6x.c:3795 -msgid "error: unknown Tag_ABI_array_object_alignment value in %B" -msgstr "грешка: непозната вредноÑÑ‚ „Tag_ABI_array_object_alignment“ у „%B“" +#: elflink.c:4750 +#, c-format +msgid "%pB: not enough version information" +msgstr "%pB: нема довољно података о издању" -#: elf32-tic6x.c:3804 elf32-tic6x.c:3813 -msgid "error: unknown Tag_ABI_array_object_align_expected value in %B" -msgstr "грешка: непозната вредноÑÑ‚ „Tag_ABI_array_object_align_expected“ у „%B“" +#: elflink.c:4788 +#, c-format +msgid "%pB: %s: invalid version %u (max %d)" +msgstr "%pB: %s: неиÑправно издање %u (најв. %d)" -#: elf32-tic6x.c:3821 elf32-tic6x.c:3828 -msgid "error: %B requires more array alignment than %B preserves" -msgstr "грешка: „%B“ захтева веће поравнање низа него што „%B“ Ñадржи" +#: elflink.c:4825 +#, c-format +msgid "%pB: %s: invalid needed version %d" +msgstr "%pB: %s: неиÑправно потребно издање %d" -#: elf32-tic6x.c:3850 -msgid "warning: %B and %B differ in wchar_t size" -msgstr "упозорење: „%B“ и „%B“ имају различите „wchar_t“" +#: elflink.c:5231 +#, c-format +msgid "%pB: undefined reference to symbol '%s'" +msgstr "%pB: недефиниÑана упута ка Ñимболу „%s“" -#: elf32-tic6x.c:3868 -msgid "warning: %B and %B differ in whether code is compiled for DSBT" -msgstr "упозорење: „%B“ и „%B“ Ñе разликују по томе да ли је код преведен за „DSBT“" +#: elflink.c:6315 +#, c-format +msgid "%pB: stack size specified and %s set" +msgstr "%pB: величина Ñпремника је наведена и „%s“ подешена" -#: elf32-v850.c:157 +#: elflink.c:6319 #, c-format -msgid "Variable `%s' cannot occupy in multiple small data regions" -msgstr "ВредноÑÑ‚ „%s“ не може да заузме неколико облаÑти малих података" +msgid "%pB: %s not absolute" +msgstr "%pB: „%s“ није апÑолутно" -#: elf32-v850.c:160 +#: elflink.c:6516 #, c-format -msgid "Variable `%s' can only be in one of the small, zero, and tiny data regions" -msgstr "ВредноÑÑ‚ „%s“ може бити Ñамо у једном од облаÑти малих, нултих и мајушних података" +msgid "%s: undefined version: %s" +msgstr "%s: недефиниÑано издање: %s" -#: elf32-v850.c:163 +#: elflink.c:7088 #, c-format -msgid "Variable `%s' cannot be in both small and zero data regions simultaneously" -msgstr "ВредноÑÑ‚ „%s“ не може бити иÑтовремено у облаÑтима малих и нултих података" +msgid "%pB: .preinit_array section is not allowed in DSO" +msgstr "%pB: одељак „.preinit_array“ није дозвољен у „DSO“-у" -#: elf32-v850.c:166 +#: elflink.c:8602 #, c-format -msgid "Variable `%s' cannot be in both small and tiny data regions simultaneously" -msgstr "ВредноÑÑ‚ „%s“ не може бити иÑтовремено у облаÑтима малих и мајушних података" +msgid "undefined %s reference in complex symbol: %s" +msgstr "недефиниÑана „%s“ упута у Ñложеном Ñимболу: %s" -#: elf32-v850.c:169 +#: elflink.c:8757 #, c-format -msgid "Variable `%s' cannot be in both zero and tiny data regions simultaneously" -msgstr "ВредноÑÑ‚ „%s“ не може бити иÑтовремено у облаÑтима нултих и мајушних података" +msgid "unknown operator '%c' in complex symbol" +msgstr "непознат оператор „%c“ у Ñложеном Ñимболу" -#: elf32-v850.c:467 -msgid "FAILED to find previous HI16 reloc" -msgstr "ÐИСÐÐœ УСПЕО да нађем претходно „HI16“ премештање" +#. PR 21524: Let the user know if a symbol was removed by garbage collection. +#: elflink.c:9095 +#, c-format +msgid "%pB:%pA: error: relocation references symbol %s which was removed by garbage collection" +msgstr "%pB:%pA: грешка: Ñимбол упута премештања „%s“ који је уклоњен Ñкупљањем отпада" -#: elf32-v850.c:2293 -msgid "could not locate special linker symbol __gp" -msgstr "не могу да нађем нарочит „__gp“ Ñимбол повезивача" +#: elflink.c:9098 +#, c-format +msgid "%pB:%pA: error: try relinking with --gc-keep-exported enabled" +msgstr "%pB:%pA: грешка: покушајте поновно повезивање Ñа укљученим „--gc-keep-exported“" -#: elf32-v850.c:2297 -msgid "could not locate special linker symbol __ep" -msgstr "не могу да нађем нарочит „__ep“ Ñимбол повезивача" +#: elflink.c:9343 elflink.c:9361 elflink.c:9400 elflink.c:9418 +#, c-format +msgid "%pB: unable to sort relocs - they are in more than one size" +msgstr "%pB: не могу да поређам премештања — имају више од једне величине" -#: elf32-v850.c:2301 -msgid "could not locate special linker symbol __ctbp" -msgstr "не могу да нађем нарочит „__ctbp“ Ñимбол повезивача" +#. The section size is not divisible by either - +#. something is wrong. +#: elflink.c:9377 elflink.c:9434 +#, c-format +msgid "%pB: unable to sort relocs - they are of an unknown size" +msgstr "%pB: не могу да поређам премештања — непознате Ñу величине" -#: elf32-v850.c:2471 elf32-v850.c:2534 -msgid "%B: Architecture mismatch with previous modules" -msgstr "%B: Ðрхитектура Ñе разликује од претходних модула" - -#: elf32-v850.c:2478 -msgid "%B: Alignment mismatch with previous modules" -msgstr "%B: Поравнање Ñе разликује од претходних модула" +#: elflink.c:9486 +msgid "not enough memory to sort relocations" +msgstr "нема довољно меморије за ређање премештања" -#. xgettext:c-format. -#: elf32-v850.c:2553 +#: elflink.c:9767 #, c-format -msgid "private flags = %lx: " -msgstr "приватне заÑтавице = %lx: " +msgid "%pB: too many sections: %d (>= %d)" +msgstr "%pB: превише одељака: %d (>= %d)" -#: elf32-v850.c:2558 +#: elflink.c:10043 #, c-format -msgid "unknown v850 architecture" -msgstr "непозната архитектура „v850“" +msgid "%pB: internal symbol `%s' in %pB is referenced by DSO" +msgstr "%pB: на унутрашњи Ñимбол „%s“ у „%pB“ упућује „DSO“" -#: elf32-v850.c:2560 +#: elflink.c:10046 #, c-format -msgid "v850 E3 architecture" -msgstr "архитектура „v850 E3“" +msgid "%pB: hidden symbol `%s' in %pB is referenced by DSO" +msgstr "%pB: на Ñкривени Ñимбол „%s“ у „%pB“ упућује „DSO“" -#: elf32-v850.c:2562 elf32-v850.c:2572 +#: elflink.c:10049 #, c-format -msgid "v850 architecture" -msgstr "архитектура „v850“" +msgid "%pB: local symbol `%s' in %pB is referenced by DSO" +msgstr "%pB: на локални Ñимбол „%s“ у „%pB“ упућује „DSO“" -#: elf32-v850.c:2565 +#: elflink.c:10135 #, c-format -msgid ", 8-byte data alignment" -msgstr ", 8-битно поравнање података" +msgid "%pB: could not find output section %pA for input section %pA" +msgstr "%pB: не могу да нађем излазни одељак „%pA“ за улазни одељак „%pA“" -#: elf32-v850.c:2573 +#: elflink.c:10289 #, c-format -msgid "v850e architecture" -msgstr "архитектура „v850e“" +msgid "%pB: protected symbol `%s' isn't defined" +msgstr "%pB: заштићени Ñимбол „%s“ није дефиниÑан" -#: elf32-v850.c:2574 +#: elflink.c:10292 #, c-format -msgid "v850e1 architecture" -msgstr "архитектура „v850e1“" +msgid "%pB: internal symbol `%s' isn't defined" +msgstr "%pB: унутрашњи Ñимбол „%s“ није дефиниÑан" -#: elf32-v850.c:2575 +#: elflink.c:10295 #, c-format -msgid "v850e2 architecture" -msgstr "архитектура „v850e2“" +msgid "%pB: hidden symbol `%s' isn't defined" +msgstr "%pB: Ñкривени Ñимбол „%s“ није дефиниÑан" -#: elf32-v850.c:2576 +#: elflink.c:10327 #, c-format -msgid "v850e2v3 architecture" -msgstr "архитектура „v850e2v3“" +msgid "%pB: no symbol version section for versioned symbol `%s'" +msgstr "%pB: нема одељка издања Ñимбола за верзиониÑани Ñимбол „%s“" -#: elf32-v850.c:2577 +#: elflink.c:10699 #, c-format -msgid "v850e3v5 architecture" -msgstr "архитектура „v850e3v5“" +msgid "warning: --enable-non-contiguous-regions discards section `%s' from '%s'\n" +msgstr "упозорење: „--enable-non-contiguous-regions“ одбацује одељак „%s“ из „%s“\n" -#: elf32-vax.c:532 +#: elflink.c:10951 #, c-format -msgid " [nonpic]" -msgstr " [не-пиц]" +msgid "error: %pB: size of section %pA is not multiple of address size" +msgstr "грешка: %pB: величина одељка „%pA“ није производ величине адреÑе" -#: elf32-vax.c:535 +#: elflink.c:10996 #, c-format -msgid " [d-float]" -msgstr " [d-покретни зарез]" +msgid "error: %pB contains a reloc (%#) for section %pA that references a non-existent global symbol" +msgstr "грешка: „%pB“ Ñадржи премештање (%#) за одељак „%pA“ који упућује на не-поÑтојећи општи Ñимбол" -#: elf32-vax.c:538 +#: elflink.c:11739 #, c-format -msgid " [g-float]" -msgstr " [g-покретни зарез]" +msgid "%pA has both ordered [`%pA' in %pB] and unordered [`%pA' in %pB] sections" +msgstr "„%pA“ има и уређени [„%pA“ у „%pB“] и неуређени [„%pA“ у „%pB“] одељак" + +#: elflink.c:11745 +#, c-format +msgid "%pA has both ordered and unordered sections" +msgstr "„%pA“ има и уређени и неуређени одељак" + +#: elflink.c:11851 +#, c-format +msgid "%pB: no symbol found for import library" +msgstr "%pB: ниÑам нашао никакав Ñимбол за увозну библиотеку" + +#: elflink.c:12488 +#, c-format +msgid "%pB: file class %s incompatible with %s" +msgstr "%pB: клаÑа датотеке „%s“ није ÑаглаÑна Ñа „%s“" + +#: elflink.c:12704 +#, c-format +msgid "%pB: failed to generate import library" +msgstr "%pB: ниÑам уÑпео да направим увозну библиотеку" + +#: elflink.c:12823 +#, c-format +msgid "warning: %s section has zero size" +msgstr "упозорење: одељак „%s“ је нулте величине" + +#: elflink.c:12871 +#, c-format +msgid "warning: section '%s' is being made into a note" +msgstr "упозорење: одељак „%s“ је претворен у белешку" -#: elf32-vax.c:656 -#, c-format -msgid "%s: warning: GOT addend of %ld to `%s' does not match previous GOT addend of %ld" -msgstr "%s: упозорење: „GOT“ Ñабирак „%ld“-а за „%s“ не одговара претходном „GOT“ Ñабирку „%ld“-а" +#: elflink.c:12964 +msgid "%P%X: read-only segment has dynamic relocations\n" +msgstr "%P%X: одељак Ñамо за читање има динамичка премештања\n" + +#: elflink.c:12967 +msgid "%P: warning: creating DT_TEXTREL in a shared object\n" +msgstr "%P: упозорење: Ñтварам „DT_TEXTREL“ у дељеном објекту\n" + +#: elflink.c:12970 +msgid "%P: warning: creating DT_TEXTREL in a PIE\n" +msgstr "%P: упозорење: Ñтварам „DT_TEXTREL“ у „PIE“\n" -#: elf32-vax.c:1543 -#, c-format -msgid "%s: warning: PLT addend of %d to `%s' from %s section ignored" -msgstr "%s: упозорење: „PLT“ Ñабирак „%d“-а за „%s“ из одељка „%s“ је занемарен" +#: elflink.c:13095 +msgid "%P%X: can not read symbols: %E\n" +msgstr "%P%X: не може да чита Ñимболе: %E\n" + +#: elflink.c:13500 +msgid "%F%P: %pB(%pA): error: need linked-to section for --gc-sections\n" +msgstr "%F%P: %pB(%pA): грешка: потребан је повезан-на одељак за „--gc-sections“\n" -#: elf32-vax.c:1668 +#: elflink.c:13961 #, c-format -msgid "%s: warning: %s relocation against symbol `%s' from %s section" -msgstr "%s: упозорење: „%s“ премештање наÑпрам Ñимбола „%s“ из одељка „%s“" +msgid "%pB: %pA+%#: no symbol found for INHERIT" +msgstr "%pB: %pA+%#: ниÑам нашао никакав Ñимбол за „INHERIT“" -#: elf32-vax.c:1674 +#: elflink.c:14002 #, c-format -msgid "%s: warning: %s relocation to 0x%x from %s section" -msgstr "%s: упозорење: „%s“ премештање у 0x%x из одељка „%s“" +msgid "%pB: section '%pA': corrupt VTENTRY entry" +msgstr "%pB: одељак „%pA“: оштећен „VTENTRY“ уноÑ" -#: elf32-xgate.c:686 +#: elflink.c:14145 #, c-format -msgid "cpu=XGATE]" -msgstr "процеÑор=XGATE]" +msgid "unrecognized INPUT_SECTION_FLAG %s\n" +msgstr "непознато „INPUT_SECTION_FLAG %s“\n" -#: elf32-xgate.c:688 +#: elflink.c:14891 #, c-format -msgid "error reading cpu type from elf private data" -msgstr "грешка читања врÑте процеÑора из личних података елф-а" +msgid "%P: %pB: warning: relocation against `%s' in read-only section `%pA'\n" +msgstr "%P: %pB: упозорење: премештање наÑпрам „%s“ у одељку „%pA“ који је Ñамо за читање\n" -#: elf32-xstormy16.c:455 elf64-ia64-vms.c:2072 elf32-ia64.c:2330 -#: elf64-ia64.c:2330 -msgid "non-zero addend in @fptr reloc" -msgstr "не-нулти Ñабирак у „@fptr“ премештању" +#: elflink.c:14980 +msgid "%P: warning: GNU indirect functions with DT_TEXTREL may result in a segfault at runtime; recompile with %s\n" +msgstr "%P: упозорење: ГÐУ-ове индиректне функције Ñа „DT_TEXTREL“ могу резултирати неуÑпехом Ñегментације у време извршавања; поново преведите Ñа „%s“\n" -#: elf32-xtensa.c:908 -msgid "%B(%A): invalid property table" -msgstr "%B(%A): неиÑправна табела влаÑништва" - -#: elf32-xtensa.c:2774 -msgid "%B(%A+0x%lx): relocation offset out of range (size=0x%x)" -msgstr "%B(%A+0x%lx): померај премештања је ван опÑега (величина=0x%x)" +#: elfxx-aarch64.c:477 +#, c-format +msgid "%pB: warning: Weak TLS is implementation defined and may not work as expected" +msgstr "%pB: упозорење: Ñлабо „TLS“ је дефиниÑана примена и можда неће радити као што Ñе очекује" -#: elf32-xtensa.c:2853 elf32-xtensa.c:2974 -msgid "dynamic relocation in read-only section" -msgstr "динамичко премештање у одељку Ñамо за читање" +#: elfxx-aarch64.c:738 elfnn-aarch64.c:9902 elfnn-aarch64.c:9909 +#, c-format +msgid "%pB: warning: BTI turned on by -z force-bti when all inputs do not have BTI in NOTE section." +msgstr "%pB: упозорење: „BTI“ је укључено „-z force-bti“-јем када Ñви уноÑи немају „BTI“ у „NOTE“ одељку." -#: elf32-xtensa.c:2950 -msgid "TLS relocation invalid without dynamic sections" -msgstr "ТЛС премештање је неиÑправно без динамичких одељака" +#: elfxx-aarch64.c:758 elfxx-x86.c:2554 +msgid "%F%P: failed to create GNU property section\n" +msgstr "%F%P: ниÑам уÑпео да направим одељак ГÐУ ÑвојÑтва\n" -#: elf32-xtensa.c:3169 -msgid "internal inconsistency in size of .got.loc section" -msgstr "унутрашња недоÑледноÑÑ‚ у величини одељка „.got.loc“" +#: elfxx-aarch64.c:762 elfxx-x86.c:2559 +#, c-format +msgid "%F%pA: failed to align section\n" +msgstr "%F%pA: ниÑам уÑпео да поравнам одељак\n" -#: elf32-xtensa.c:3482 -msgid "%B: incompatible machine type. Output is 0x%x. Input is 0x%x" -msgstr "%B: неÑаглаÑна врÑта машине. Излаз је 0x%x, а улаз 0x%x" - -#: elf32-xtensa.c:4713 elf32-xtensa.c:4721 -msgid "Attempt to convert L32R/CALLX to CALL failed" -msgstr "Покушај претварања „L32R/CALLX“ у „CALL“ није уÑпело" - -#: elf32-xtensa.c:6330 elf32-xtensa.c:6406 elf32-xtensa.c:7522 -msgid "%B(%A+0x%lx): could not decode instruction; possible configuration mismatch" -msgstr "%B(%A+0x%lx): не могу да декодирам инÑтрукцију; вероватно је подешавање погрешно" - -#: elf32-xtensa.c:7262 -msgid "%B(%A+0x%lx): could not decode instruction for XTENSA_ASM_SIMPLIFY relocation; possible configuration mismatch" -msgstr "%B(%A+0x%lx): не могу да декодирам инÑтрукцију за „XTENSA_ASM_SIMPLIFY“ премештање; вероватно је подешавање погрешно" +#: elfxx-aarch64.c:812 +#, c-format +msgid "error: %pB: " +msgstr "грешка: %pB: <оштећена „AArch64“ коришћена величина: 0x%x>" -#: elf32-xtensa.c:9022 -msgid "invalid relocation address" -msgstr "неиÑправна адреÑа премештања" +#: elfxx-mips.c:1507 +msgid "static procedure (no name)" +msgstr "Ñтатички поÑтупак (без назива)" -#: elf32-xtensa.c:9071 -msgid "overflow after relaxation" -msgstr "прекорачење након опуштања" +#: elfxx-mips.c:5782 +msgid "MIPS16 and microMIPS functions cannot call each other" +msgstr "Функције „MIPS16“ и „microMIPS“ не могу да позивају једна другу" -#: elf32-xtensa.c:10203 -msgid "%B(%A+0x%lx): unexpected fix for %s relocation" -msgstr "%B(%A+0x%lx): неочекивана иÑправка за „%s“ премештање" +#: elfxx-mips.c:6547 +msgid "%X%H: unsupported JALX to the same ISA mode\n" +msgstr "%X%H: неподржано „JALX“ у иÑтом „ISA“ режиму\n" -#: elf64-alpha.c:474 -msgid "GPDISP relocation did not find ldah and lda instructions" -msgstr "„GPDISP“ премештање није нашло инÑтрукције „ldah“ и „lda“" +#: elfxx-mips.c:6580 +msgid "%X%H: unsupported jump between ISA modes; consider recompiling with interlinking enabled\n" +msgstr "%X%H: неподржан Ñкок између „ISA“ режима; размотрите поновно превођење Ñа укљученим међуповезивањем\n" -#: elf64-alpha.c:2503 -msgid "%B: .got subsegment exceeds 64K (size %d)" -msgstr "%B: под-подеок „.got“ превазилази 64K (величина је %d)" - -#: elf64-alpha.c:4396 elf64-alpha.c:4408 -msgid "%B: gp-relative relocation against dynamic symbol %s" -msgstr "%B: „gp“-одноÑно премештање наÑпрам динамичког Ñимбола „%s“" - -#: elf64-alpha.c:4434 elf64-alpha.c:4574 -msgid "%B: pc-relative relocation against dynamic symbol %s" -msgstr "%B: „pc“-одноÑно премештање наÑпрам динамичког Ñимбола „%s“" - -#: elf64-alpha.c:4462 -msgid "%B: change in gp: BRSGP %s" -msgstr "%B: измена у „gp“-у: BRSGP %s" +#: elfxx-mips.c:6625 +msgid "%X%H: cannot convert branch between ISA modes to JALX: relocation out of range\n" +msgstr "%X%H: не могу да претворим гране између „ISA“ режима у „JALX“: премештање је ван опÑега\n" -#: elf64-alpha.c:4487 -msgid "" -msgstr "<непознато>" +#: elfxx-mips.c:6637 +msgid "%X%H: unsupported branch between ISA modes\n" +msgstr "%X%H: неподржана грана између „ISA“ режима\n" -#: elf64-alpha.c:4492 -msgid "%B: !samegp reloc against symbol without .prologue: %s" -msgstr "%B: „!samegp“ премештање наÑпрам Ñимбола без „.prologue“-а: %s" +#: elfxx-mips.c:7286 +#, c-format +msgid "%pB: incorrect `.reginfo' section size; expected %, got %" +msgstr "%pB: нетачна величина „.reginfo“ одељка; очекивах %, али добих %" -#: elf64-alpha.c:4549 -msgid "%B: unhandled dynamic relocation against %s" -msgstr "%B: необрађено динамичко премештање наÑпрам „%s“" +#: elfxx-mips.c:7330 elfxx-mips.c:7567 +#, c-format +msgid "%pB: warning: bad `%s' option size %u smaller than its header" +msgstr "%pB: упозорење: лоша величина опције „%s“ %u мања од заглавља" -#: elf64-alpha.c:4581 -msgid "%B: pc-relative relocation against undefined weak symbol %s" -msgstr "%B: „pc“-одноÑно премештање наÑпрам недефиниÑаног Ñлабог Ñимбола „%s“" +#: elfxx-mips.c:8374 elfxx-mips.c:8500 +#, c-format +msgid "%pB: warning: cannot determine the target function for stub section `%s'" +msgstr "%pB: упозорење: не могу да одредим циљну функцију за одељак окрајка „%s“" -#: elf64-alpha.c:4645 -msgid "%B: dtp-relative relocation against dynamic symbol %s" -msgstr "%B: „dtp“-одноÑно премештање наÑпрам динамичког Ñимбола „%s“" +#: elfxx-mips.c:8632 +#, c-format +msgid "%pB: malformed reloc detected for section %s" +msgstr "%pB: откривено је лоше премештање за одељак „%s“" -#: elf64-alpha.c:4668 -msgid "%B: tp-relative relocation against dynamic symbol %s" -msgstr "%B: „tp“-одноÑно премештање наÑпрам динамичког Ñимбола „%s“" +#: elfxx-mips.c:8731 +#, c-format +msgid "%pB: GOT reloc at %# not expected in executables" +msgstr "%pB: „GOT“ премештање на %# није очекивано у извршним" -#: elf64-hppa.c:2084 +#: elfxx-mips.c:8871 #, c-format -msgid "stub entry for %s cannot load .plt, dp offset = %ld" -msgstr "ÑƒÐ½Ð¾Ñ Ð¾ÐºÑ€Ð°Ñ˜ÐºÐ° за „%s“ не може да учита „.plt“, померај „dp“ = %ld" +msgid "%pB: CALL16 reloc at %# not against global symbol" +msgstr "%pB: „CALL16“ премештање на %# није наÑпрам општег Ñимбола" -#: elf64-hppa.c:3280 -msgid "%B(%A+0x%" -msgstr "%B(%A+0x%" +#: elfxx-mips.c:9174 +#, c-format +msgid "%X%H: relocation %s against `%s' cannot be used when making a shared object; recompile with -fPIC\n" +msgstr "%X%H: премештање „%s“ наÑпрам „%s“ Ñе не може кориÑтити приликом Ñтварања дељеног објекта; поново преведите Ñа „-fPIC“\n" -#: elf64-ia64-vms.c:587 elf32-ia64.c:619 elf64-ia64.c:619 -msgid "%B: Can't relax br at 0x%lx in section `%A'. Please use brl or indirect branch." -msgstr "%B: Ðе могу да опуÑтим „br“ на 0x%lx у одељку „%A“. КориÑтите „brl“ или индиректну грану." +#: elfxx-mips.c:9300 +#, c-format +msgid "IFUNC symbol %s in dynamic symbol table - IFUNCS are not supported" +msgstr "„IFUNC„ Ñимбол „%s“ у табели динамичког Ñимбола – „IFUNCS“ ниÑу подржане" -#: elf64-ia64-vms.c:2027 elf32-ia64.c:2278 elf64-ia64.c:2278 -msgid "@pltoff reloc against local symbol" -msgstr "„@pltoff“ премештање наÑпрам локалног Ñимбола" +#: elfxx-mips.c:9303 +#, c-format +msgid "non-dynamic symbol %s in dynamic symbol table" +msgstr "не-динамички Ñимбол „%s“ у табели динамичког Ñимбола" -#: elf64-ia64-vms.c:3279 elf32-ia64.c:3684 elf64-ia64.c:3684 +#: elfxx-mips.c:9523 #, c-format -msgid "%s: short data segment overflowed (0x%lx >= 0x400000)" -msgstr "%s: прекорачење Ñегмента кратких података (0x%lx >= 0x400000)" +msgid "non-dynamic relocations refer to dynamic symbol %s" +msgstr "не-динамичка премештања упућују на динамички Ñимбол „%s“" -#: elf64-ia64-vms.c:3290 elf32-ia64.c:3695 elf64-ia64.c:3695 +#: elfxx-mips.c:10457 #, c-format -msgid "%s: __gp does not cover short data segment" -msgstr "%s: „__gp“ не покрива Ñегмент кратких података" +msgid "%pB: can't find matching LO16 reloc against `%s' for %s at %# in section `%pA'" +msgstr "%pB: не могу да нађем упоређујуће „LO16“ премештање наÑпрам „%s“ за „%s“ на %# у одељку „%pA“" -#: elf64-ia64-vms.c:3555 elf32-ia64.c:3962 elf64-ia64.c:3962 -msgid "%B: non-pic code with imm relocation against dynamic symbol `%s'" -msgstr "%B: не-пик код Ñа „imm“ премештањем наÑпрам динамичког Ñимбола „%s“" +#: elfxx-mips.c:10597 +msgid "small-data section exceeds 64KB; lower small-data size limit (see option -G)" +msgstr "одељак малих података превазилази 64KB; доња граница величине малих података (видите опцију „-G“)" -#: elf64-ia64-vms.c:3617 elf32-ia64.c:4029 elf64-ia64.c:4029 -msgid "%B: @gprel relocation against dynamic symbol %s" -msgstr "%B: „@gprel“-одноÑно премештање наÑпрам динамичког Ñимбола „%s“" +#: elfxx-mips.c:10616 +msgid "cannot convert a jump to JALX for a non-word-aligned address" +msgstr "не могу да претворим Ñкок у „JALX“ за адреÑу поравнату не-речју" -#: elf64-ia64-vms.c:3676 elf32-ia64.c:4092 elf64-ia64.c:4092 -msgid "%B: linking non-pic code in a position independent executable" -msgstr "%B: повезујем не-пик код у извршном незавиÑном од положаја" +#: elfxx-mips.c:10619 +msgid "jump to a non-word-aligned address" +msgstr "Ñкок на адреÑу поравнату не-речју" -#: elf64-ia64-vms.c:3777 elf32-ia64.c:4229 elf64-ia64.c:4229 -msgid "%B: @internal branch to dynamic symbol %s" -msgstr "%B: „@internal“ грана ка динамичком Ñимболу „%s“" +#: elfxx-mips.c:10620 +msgid "jump to a non-instruction-aligned address" +msgstr "Ñкок на адреÑу поравнату не-инÑтрукцијом" -#: elf64-ia64-vms.c:3779 elf32-ia64.c:4231 elf64-ia64.c:4231 -msgid "%B: speculation fixup to dynamic symbol %s" -msgstr "%B: разматрам иÑправку динамичког Ñимбола „%s“" +#: elfxx-mips.c:10623 +msgid "cannot convert a branch to JALX for a non-word-aligned address" +msgstr "не могу да претворим грану у „JALX“ за адреÑу поравнату не-речју" -#: elf64-ia64-vms.c:3781 elf32-ia64.c:4233 elf64-ia64.c:4233 -msgid "%B: @pcrel relocation against dynamic symbol %s" -msgstr "%B: „@pcrel“-одноÑно премештање наÑпрам динамичког Ñимбола „%s“" +#: elfxx-mips.c:10625 +msgid "branch to a non-instruction-aligned address" +msgstr "грана на адреÑу поравнату не-инÑтрукцијом" -#: elf64-ia64-vms.c:3905 elf32-ia64.c:4430 elf64-ia64.c:4430 -msgid "unsupported reloc" -msgstr "неподржано премештање" +#: elfxx-mips.c:10627 +msgid "PC-relative load from unaligned address" +msgstr "„PC“-одноÑни утовар из непоравнате адреÑе" -#: elf64-ia64-vms.c:3942 elf32-ia64.c:4468 elf64-ia64.c:4468 -msgid "%B: missing TLS section for relocation %s against `%s' at 0x%lx in section `%A'." -msgstr "%B: недоÑтаје ТЛС одељак за „%s“ премештање наÑпрам „%s“ на 0x%lx у одељку „%A“." +#: elfxx-mips.c:10927 +#, c-format +msgid "%pB: `%pA' entry VMA of %# outside the 32-bit range supported; consider using `-Ttext-segment=...'" +msgstr "%pB: „%pA“ ÑƒÐ½Ð¾Ñ â€žVMA“ од %# ван 32-битног опÑега је подржано; кориÑтите „-Ttext-segment=...“" -#: elf64-ia64-vms.c:3957 elf32-ia64.c:4483 elf64-ia64.c:4483 -msgid "%B: Can't relax br (%s) to `%s' at 0x%lx in section `%A' with size 0x%lx (> 0x1000000)." -msgstr "%B: Ðе могу да опуÑтим „br“ (%s) у „%s“ на 0x%lx у одељку „%A“ Ñа величином 0x%lx (> 0x1000000)." +#: elfxx-mips.c:11042 elfxx-mips.c:11629 +#, c-format +msgid "%pB: `%pA' offset of % from `%pA' beyond the range of ADDIUPC" +msgstr "%pB: „%pA“ померај % из „%pA“ иза опÑега „ADDIUPC“" -#: elf64-ia64-vms.c:4246 elf32-ia64.c:4745 elf64-ia64.c:4745 -msgid "%B: linking trap-on-NULL-dereference with non-trapping files" -msgstr "%B: повезујем захват-на-ÐИШТÐÐ’ÐОЈ-дереференциÑа не-захватним датотекама" +#: elfxx-mips.c:11601 +#, c-format +msgid "%pB: `%pA' start VMA of %# outside the 32-bit range supported; consider using `-Ttext-segment=...'" +msgstr "%pB: „%pA“ почетак „VMA“ од %# ван 32-битног опÑега је подржано; кориÑтите „-Ttext-segment=...“" -#: elf64-ia64-vms.c:4255 elf32-ia64.c:4754 elf64-ia64.c:4754 -msgid "%B: linking big-endian files with little-endian files" -msgstr "%B: повезујем датотеке велике крајњоÑти Ñа датотекама мале крајњоÑти" +#: elfxx-mips.c:14556 +#, c-format +msgid "%pB: unknown architecture %s" +msgstr "%pB: непозната архитектура „%s“" -#: elf64-ia64-vms.c:4264 elf32-ia64.c:4763 elf64-ia64.c:4763 -msgid "%B: linking 64-bit files with 32-bit files" -msgstr "%B: повезујем 64-битне датотеке Ñа 32-битним датотекама" +#: elfxx-mips.c:15090 +#, c-format +msgid "%pB: illegal section name `%pA'" +msgstr "%pB: неиÑправан назив одељка „%pA“" -#: elf64-ia64-vms.c:4273 elf32-ia64.c:4772 elf64-ia64.c:4772 -msgid "%B: linking constant-gp files with non-constant-gp files" -msgstr "%B: повезујем датотеке „конÑтантног-гп“-а Ñа датотекама „не-конÑтантног-гп“-а" +#: elfxx-mips.c:15367 +#, c-format +msgid "%pB: warning: linking abicalls files with non-abicalls files" +msgstr "%pB: упозорење: повезујем датотеке абипозива Ñа датотекама не-абипозива" -#: elf64-ia64-vms.c:4283 elf32-ia64.c:4782 elf64-ia64.c:4782 -msgid "%B: linking auto-pic files with non-auto-pic files" -msgstr "%B: повезујем датотеке „ауто-пик“-а Ñа датотекама „не-ауто-пик“-а" +#: elfxx-mips.c:15384 +#, c-format +msgid "%pB: linking 32-bit code with 64-bit code" +msgstr "%pB: повезујем 32-битни код Ñа 64-битним кодом" -#: elf64-ia64-vms.c:5125 elflink.c:4299 -msgid "Warning: alignment %u of common symbol `%s' in %B is greater than the alignment (%u) of its section %A" -msgstr "Упозорење: „%u“ поравнање општег Ñимбола „%s“ у „%B“ је веће од поравнања (%u) његовог одељка „%A“" +#: elfxx-mips.c:15416 elfxx-mips.c:15482 elfxx-mips.c:15497 +#, c-format +msgid "%pB: linking %s module with previous %s modules" +msgstr "%pB: повезујем „%s“ модул Ñа претходним „%s“ модулима" -#: elf64-ia64-vms.c:5131 elflink.c:4305 -msgid "Warning: alignment %u of symbol `%s' in %B is smaller than %u in %B" -msgstr "Упозорење: „%u“ поравнање Ñимбола „%s“ у „%B“ је мање од „%u“ у „%B“" +#: elfxx-mips.c:15440 +#, c-format +msgid "%pB: ABI mismatch: linking %s module with previous %s modules" +msgstr "%pB: „ABI“ не одговара: повезујем „%s“ модул Ñа претходним „%s“ модулима" -#: elf64-ia64-vms.c:5146 elflink.c:4321 -msgid "Warning: size of symbol `%s' changed from %lu in %B to %lu in %B" -msgstr "Упозорење: величина Ñимбола „%s“ је измењена из „%lu“ у „%B“ у „%lu“ у „%B“" +#: elfxx-mips.c:15465 +#, c-format +msgid "%pB: ASE mismatch: linking %s module with previous %s modules" +msgstr "%pB: „ASE“ не одговара: повезујем „%s“ модул Ñа претходним „%s“ модулима" -#: elf64-mmix.c:986 -msgid "" -"invalid input relocation when producing non-ELF, non-mmo format output.\n" -" Please use the objcopy program to convert from ELF or mmo,\n" -" or assemble using \"-no-expand\" (for gcc, \"-Wa,-no-expand\"" -msgstr "" -"неиÑправно премештање улаза приликом давања не-„ELF“, не-„mmo“ запиÑа излаза.\n" -" КориÑтите програм „objcopy“ да претворите из „ELF“-а или „mmo“-а,\n" -" или ÑаÑтавите кориÑтећи „-no-expand“ (за гцц, „-Wa,-no-expand“)" +#: elfxx-mips.c:15599 +#, c-format +msgid "warning: %pB uses unknown floating point ABI %d (set by %pB), %pB uses unknown floating point ABI %d" +msgstr "упозорење: „%pB“ кориÑти непознату „ABI“ тачку покретног зареза „%d“ (подешено Ñа „%pB“), „%pB“ кориÑти непознату „ABI“ тачку покретног зареза „%d“" -#: elf64-mmix.c:1170 -msgid "" -"invalid input relocation when producing non-ELF, non-mmo format output.\n" -" Please use the objcopy program to convert from ELF or mmo,\n" -" or compile using the gcc-option \"-mno-base-addresses\"." -msgstr "" -"неиÑправно премештање улаза приликом давања не-„ELF“, не-„mmo“ запиÑа излаза.\n" -" КориÑтите програм „objcopy“ да претворите из „ELF“-а или „mmo“-а,\n" -" или преведите кориÑтећи гцц-опцију „-mno-base-addresses“." +#: elfxx-mips.c:15605 +#, c-format +msgid "warning: %pB uses unknown floating point ABI %d (set by %pB), %pB uses %s" +msgstr "упозорење: „%pB“ кориÑти непознату „ABI“ тачку покретног зареза „%d“ (подешено Ñа „%pB“), „%pB“ кориÑти „%s“" -#: elf64-mmix.c:1196 +#: elfxx-mips.c:15611 #, c-format -msgid "" -"%s: Internal inconsistency error for value for\n" -" linker-allocated global register: linked: 0x%lx%08lx != relaxed: 0x%lx%08lx\n" -msgstr "" -"%s: Унутрашња грешка недоÑледноÑти за вредноÑÑ‚ за\n" -" општи региÑтар додељен повезивачем: повезано: 0x%lx%08lx != опуштено: 0x%lx%08lx\n" +msgid "warning: %pB uses %s (set by %pB), %pB uses unknown floating point ABI %d" +msgstr "упозорење: „%pB“ кориÑти „%s“ (подешено Ñа „%pB“), „%pB“ кориÑти непознату „ABI“ тачку покретног зареза „%d“" -#: elf64-mmix.c:1618 +#: elfxx-mips.c:15625 #, c-format -msgid "%s: base-plus-offset relocation against register symbol: (unknown) in %s" -msgstr "%s: премештање оÑнове Ð¿Ð»ÑƒÑ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ наÑпрам Ñимбола региÑтра: (непознато) у „%s“" +msgid "warning: %pB uses %s (set by %pB), %pB uses %s" +msgstr "упозорење: „%pB“ кориÑти „%s“ (подешено Ñа „%pB“), „%pB“ кориÑти „%s“" -#: elf64-mmix.c:1623 +#: elfxx-mips.c:15644 #, c-format -msgid "%s: base-plus-offset relocation against register symbol: %s in %s" -msgstr "%s: премештање оÑнове Ð¿Ð»ÑƒÑ Ð¿Ð¾Ð¼ÐµÑ€Ð°Ñ˜ наÑпрам Ñимбола региÑтра: „%s“ у „%s“" +msgid "warning: %pB uses %s (set by %pB), %pB uses unknown MSA ABI %d" +msgstr "упозорење: „%pB“ кориÑти „%s“ (подешено Ñа „%pB“), „%pB“ кориÑти непознато „MSA ABI“ „%d“" -#: elf64-mmix.c:1667 +#: elfxx-mips.c:15656 #, c-format -msgid "%s: register relocation against non-register symbol: (unknown) in %s" -msgstr "%s: премештање региÑтра наÑпрам Ñимбола не-региÑтра: (непознато) у „%s“" +msgid "warning: %pB uses unknown MSA ABI %d (set by %pB), %pB uses %s" +msgstr "упозорење: „%pB“ кориÑти непознато „MSA ABI“ „%d“ (подешено Ñа „%pB“), „%pB“ кориÑти „%s“" -#: elf64-mmix.c:1672 +#: elfxx-mips.c:15665 #, c-format -msgid "%s: register relocation against non-register symbol: %s in %s" -msgstr "%s: премештање региÑтра наÑпрам Ñимбола не-региÑтра: „%s“ у „%s“" +msgid "warning: %pB uses unknown MSA ABI %d (set by %pB), %pB uses unknown MSA ABI %d" +msgstr "упозорење: „%pB“ кориÑти непознато „MSA ABI“ „%d“ (подешено Ñа „%pB“), „%pB“ кориÑти непознато „MSA ABI %d“" -#: elf64-mmix.c:1709 +#: elfxx-mips.c:15727 #, c-format -msgid "%s: directive LOCAL valid only with a register or absolute value" -msgstr "%s: директива „LOCAL“ је иÑправна Ñамо Ñа региÑтром или апÑолутном вредношћу" +msgid "%pB: endianness incompatible with that of the selected emulation" +msgstr "%pB: крајњоÑÑ‚ није ÑаглаÑна Ñа оном изабране емулације" -#: elf64-mmix.c:1739 +#: elfxx-mips.c:15741 #, c-format -msgid "%s: LOCAL directive: Register $%ld is not a local register. First global register is $%ld." -msgstr "%s: директива „LOCAL“: РегиÑтар „$%ld“ није меÑни региÑтар. Први општи региÑтар је „$%ld“." +msgid "%pB: ABI is incompatible with that of the selected emulation" +msgstr "%pB: „ABI“ није ÑаглаÑна Ñа оном изабране емулације" -#: elf64-mmix.c:2198 +#: elfxx-mips.c:15794 #, c-format -msgid "%s: Error: multiple definition of `%s'; start of %s is set in a earlier linked file\n" -msgstr "%s: Грешка: неколико дефиниција за „%s“; почетак „%s“ је подешен у раније повезаној датотеци\n" +msgid "%pB: warning: inconsistent ISA between e_flags and .MIPS.abiflags" +msgstr "%pB: упозорење: недоÑледно „ISA“ између „e_flags“ и „.MIPS.abiflags“" -#: elf64-mmix.c:2252 -msgid "Register section has contents\n" -msgstr "Одељак региÑтра има Ñадржај\n" +#: elfxx-mips.c:15799 +#, c-format +msgid "%pB: warning: inconsistent FP ABI between .gnu.attributes and .MIPS.abiflags" +msgstr "%pB: упозорење: недоÑледно „FP ABI“ између „.gnu.attributes“ и „.MIPS.abiflags“" -#: elf64-mmix.c:2441 +#: elfxx-mips.c:15803 #, c-format -msgid "" -"Internal inconsistency: remaining %u != max %u.\n" -" Please report this bug." -msgstr "" -"Унутрашња недоÑледноÑÑ‚: преоÑтаје %u != најв. %u.\n" -" Пријавите ову грешку." +msgid "%pB: warning: inconsistent ASEs between e_flags and .MIPS.abiflags" +msgstr "%pB: упозорење: недоÑледно „ASE“ између „e_flags“ и „.MIPS.abiflags“" -#: elf64-ppc.c:4463 -msgid "%P: %B: cannot create stub entry %s\n" -msgstr "%P: %B: не могу да Ñтворим ÑƒÐ½Ð¾Ñ Ð¾ÐºÑ€Ð°Ñ˜ÐºÐ° „%s“\n" +#: elfxx-mips.c:15810 +#, c-format +msgid "%pB: warning: inconsistent ISA extensions between e_flags and .MIPS.abiflags" +msgstr "%pB: упозорење: недоÑледна „ISA“ проширења између „e_flags“ и „.MIPS.abiflags“" -#: elf64-ppc.c:4810 -msgid "%P: symbol '%s' has invalid st_other for ABI version 1\n" -msgstr "%P: Ñимбол „%s“ има неиÑправан „st_other“ за ÐБИ издање 1\n" +#: elfxx-mips.c:15814 +#, c-format +msgid "%pB: warning: unexpected flag in the flags2 field of .MIPS.abiflags (0x%lx)" +msgstr "%pB: упозорење: неочекивана заÑтавица у „flags2“ пољу „.MIPS.abiflags“-а (0x%lx)" -#: elf64-ppc.c:5170 -msgid "%P: .opd not allowed in ABI version %d\n" -msgstr "%P: „.opd“ није допуштен у ÐБИ-ју издање %d\n" +#: elfxx-mips.c:16005 +msgid "-mips32r2 -mfp64 (12 callee-saved)" +msgstr "-mips32r2 -mfp64 (12 позиваоца-Ñачувано)" -#: elf64-ppc.c:5809 -msgid "%B uses unknown e_flags 0x%lx" -msgstr "„%B“ кориÑти непознато „e_flags“ 0x%lx" +#: elfxx-mips.c:16067 elfxx-mips.c:16078 +msgid "None" +msgstr "Ðишта" -#: elf64-ppc.c:5816 -msgid "%B: ABI version %ld is not compatible with ABI version %ld output" -msgstr "%B: ÐБИ издање %ld није ÑаглаÑно Ñа ÐБИ-јем издања %ld" +#: elfxx-mips.c:16069 elfxx-mips.c:16138 +msgid "Unknown" +msgstr "Ðепознато" -#: elf64-ppc.c:5843 +#: elfxx-mips.c:16149 #, c-format -msgid " [abiv%ld]" -msgstr " [abiv%ld]" +msgid "Hard or soft float\n" +msgstr "ХардверÑки или ÑофтверÑки покретни зарез\n" -#: elf64-ppc.c:7007 -msgid "%P: copy reloc against `%T' requires lazy plt linking; avoid setting LD_BIND_NOW=1 or upgrade gcc\n" -msgstr "%P: премештање умножавања наÑпрам „%T“ захтева лењо „plt“ повезивање; избегавајте подешавање „LD_BIND_NOW=1“ или надоградите гцц\n" - -#: elf64-ppc.c:7270 -msgid "%B: undefined symbol on R_PPC64_TOCSAVE relocation" -msgstr "%B: неодређени Ñимбол на „R_PPC64_TOCSAVE“ премештању" - -#: elf64-ppc.c:7499 -msgid "%P: dynreloc miscount for %B, section %A\n" -msgstr "%P: грешка бројања динамичког премештања за „%B“, одељак „%A“\n" - -#: elf64-ppc.c:7583 -msgid "%B: .opd is not a regular array of opd entries" -msgstr "%B: „.opd“ није регуларан низ уноÑа операнда" - -#: elf64-ppc.c:7592 -msgid "%B: unexpected reloc type %u in .opd section" -msgstr "%B: неочекивана врÑта премештања „%u“ у „.opd“ одељку" - -#: elf64-ppc.c:7613 -msgid "%B: undefined sym `%s' in .opd section" -msgstr "%B: неодређени Ñимбол „%s“ у „.opd“ одељку" +#: elfxx-mips.c:16152 +#, c-format +msgid "Hard float (double precision)\n" +msgstr "ХардверÑки покретни зарез (двоÑтрука тачноÑÑ‚)\n" -#: elf64-ppc.c:8177 -msgid "%H __tls_get_addr lost arg, TLS optimization disabled\n" -msgstr "„%H“ „__tls_get_addr“ је изгубио аргумент, ТЛС оптимизација је иÑкључена\n" +#: elfxx-mips.c:16155 +#, c-format +msgid "Hard float (single precision)\n" +msgstr "ХардверÑки покретни зарез (једноÑтрука тачноÑÑ‚)\n" -#: elf64-ppc.c:8516 elf64-ppc.c:9139 +#: elfxx-mips.c:16158 #, c-format -msgid "%s defined on removed toc entry" -msgstr "„%s“ је дефиниÑано на уклоњеном уноÑу табеле Ñадржаја" +msgid "Soft float\n" +msgstr "СофтверÑки покретни зарез\n" -#: elf64-ppc.c:8868 -msgid "%P: %H: toc optimization is not supported for %s instruction.\n" -msgstr "%P: %H: оптимизација табеле Ñадржаја није подржана за инÑтрукцију „%s“.\n" - -#: elf64-ppc.c:9096 -msgid "%P: %H: %s references optimized away TOC entry\n" -msgstr "%P: %H: „%s“ упућује на оптимизацијом одÑтрањени ÑƒÐ½Ð¾Ñ Ñ‚Ð°Ð±ÐµÐ»Ðµ Ñадржаја\n" - -#: elf64-ppc.c:10394 -msgid "%P: cannot find opd entry toc for `%T'\n" -msgstr "%P: не могу да нађем табелу Ñадржаја уноÑа операнда за „%T“\n" - -#: elf64-ppc.c:10479 -msgid "%P: long branch stub `%s' offset overflow\n" -msgstr "%P: прекорачење помераја дугог окрајка гране „%s“\n" - -#: elf64-ppc.c:10538 -msgid "%P: can't find branch stub `%s'\n" -msgstr "%P: не могу да нађем окрајак гране „%s“\n" - -#: elf64-ppc.c:10602 elf64-ppc.c:10749 elf64-ppc.c:12416 -msgid "%P: linkage table error against `%T'\n" -msgstr "%P: грешка табеле повезивања наÑпрам „%T“\n" - -#: elf64-ppc.c:10940 -msgid "%P: can't build branch stub `%s'\n" -msgstr "%P: не могу да изградим окрајак гране „%s“\n" - -#: elf64-ppc.c:11748 -msgid "%B section %A exceeds stub group size" -msgstr "„%B“ одељак „%A“ превазилази величину групе окрајка" - -#: elf64-ppc.c:12662 elf64-ppc.c:12697 -msgid "%P: %s offset too large for .eh_frame sdata4 encoding" -msgstr "%P: „%s“ померај је превелик за „.eh_frame sdata4“ кодирање" - -#: elf64-ppc.c:12758 -msgid "%P: stubs don't match calculated size\n" -msgstr "%P: окрајци не одговарају израчунатој величини\n" - -#: elf64-ppc.c:12770 -#, c-format -msgid "" -"linker stubs in %u group%s\n" -" branch %lu\n" -" toc adjust %lu\n" -" long branch %lu\n" -" long toc adj %lu\n" -" plt call %lu\n" -" plt call toc %lu" -msgstr "" -"окрајци повезивача у „%u“ група „%s“\n" -" грана %lu\n" -" Ñ‚Ð°Ñ ÑƒÑ€ÐµÑ’ÐµÑšÐµ %lu\n" -" дуга брана %lu\n" -" уређење дуге Ñ‚Ð°Ñ %lu\n" -" плт позив %lu\n" -" плт позива Ñ‚Ð°Ñ %lu" - -#: elf64-ppc.c:13096 -msgid "%P: %H: %s used with TLS symbol `%T'\n" -msgstr "%P: %H: „%s“ је коришћено Ñа ТЛС Ñимболом „%T“\n" - -#: elf64-ppc.c:13097 -msgid "%P: %H: %s used with non-TLS symbol `%T'\n" -msgstr "%P: %H: „%s“ је коришћено Ñа не-ТЛС Ñимболом „%T“\n" - -#: elf64-ppc.c:13675 -msgid "%P: %H: call to `%T' lacks nop, can't restore toc; recompile with -fPIC\n" -msgstr "%P: %H: позиву за „%T“ недоÑтаје „nop“, не могу да вратим табелу Ñадржаја; поново преведите Ñа „-fPIC“\n" - -#: elf64-ppc.c:13793 -msgid "%P: %B: unknown relocation type %d for `%T'\n" -msgstr "%P: %B: непозната врÑта премештања „%d“ за „%T“\n" - -#: elf64-ppc.c:14310 -msgid "%P: %H: %s for indirect function `%T' unsupported\n" -msgstr "%P: %H: „%s“ за индиректну функцију „%T“ није подржано\n" - -#: elf64-ppc.c:14417 -msgid "%P: %B: %s is not supported for `%T'\n" -msgstr "%P: %B: „%s“ није подржано за Ñимбол „%T“\n" - -#: elf64-ppc.c:14565 -msgid "%P: %H: error: %s not a multiple of %u\n" -msgstr "%P: %H: грешка: „%s“ није производ „%u“\n" - -#: elf64-ppc.c:14586 -msgid "%P: %H: unresolvable %s against `%T'\n" -msgstr "%P: %H: „%s“ је нерешиво наÑпрам „%T“\n" - -#: elf64-ppc.c:14644 -msgid "%P: %H: %s against `%T': error %d\n" -msgstr "%P: %H: „%s“ наÑпрам „%T“: грешка %d\n" - -#: elf64-sh64.c:1686 -#, c-format -msgid "%s: error: unaligned relocation type %d at %08x reloc %08x\n" -msgstr "%s: грешка: непоравната врÑта премештања „%d“ на %08x премештање %08x\n" - -#: elf64-sparc.c:446 -msgid "%B: Only registers %%g[2367] can be declared using STT_REGISTER" -msgstr "%B: Само региÑтри „%%g[2367]“ могу бити деклариÑани коришћењем „STT_REGISTER“" - -#: elf64-sparc.c:466 -msgid "Register %%g%d used incompatibly: %s in %B, previously %s in %B" -msgstr "РегиÑтар „%%g%d“ је коришћен неÑаглаÑно: „%s“ у „%B“, претходно „%s“ у „%B“" - -#: elf64-sparc.c:489 -msgid "Symbol `%s' has differing types: REGISTER in %B, previously %s in %B" -msgstr "Симбол „%s“ има другачије врÑте: „REGISTER“ у „%B“, претходно „%s“ у „%B“" - -#: elf64-sparc.c:534 -msgid "Symbol `%s' has differing types: %s in %B, previously REGISTER in %B" -msgstr "Симбол „%s“ има другачије врÑте: „%s“ у „%B“, претходно „REGISTER“ у „%B“" - -#: elf64-sparc.c:687 -msgid "%B: linking UltraSPARC specific with HAL specific code" -msgstr "%B: повезујем код Ñпецифичан „UltraSPARC“-у Ñа кодом Ñпецифичним „HAL“-у" - -#: elf64-x86-64.c:1530 -msgid "%B: relocation %s against symbol `%s' isn't supported in x32 mode" -msgstr "%B: „%s“ премештање наÑпрам Ñимбола „%s“ није подржано у режиму x32" - -#: elf64-x86-64.c:1688 -msgid "%B: '%s' accessed both as normal and thread local symbol" -msgstr "%B: „%s“ Ñе приÑтупило и као нормалном и као Ñимболу локалне нити" - -#: elf64-x86-64.c:3405 /src/binutils-gdb/bfd/elfnn-aarch64.c:3511 -msgid "%B: relocation %s against STT_GNU_IFUNC symbol `%s' has non-zero addend: %d" -msgstr "%B: премештање „%s“ наÑпрам „STT_GNU_IFUNC“ Ñимбола „%s“ има не-нулти Ñабирак: %d" - -#: elf64-x86-64.c:3667 -msgid "%B: relocation R_X86_64_GOTOFF64 against protected function `%s' can not be used when making a shared object" -msgstr "%B: премештање „R_X86_64_GOTOFF64“ наÑпрам заштићене функције „%s“ Ñе не може кориÑтити када Ñе Ñтвара дељени објекат" +#: elfxx-mips.c:16161 +#, c-format +msgid "Hard float (MIPS32r2 64-bit FPU 12 callee-saved)\n" +msgstr "ХардверÑки покретни зарез („MIPS32r2“ 64-бита „FPU 12 callee-saved“)\n" -#: elf64-x86-64.c:3787 -msgid "; recompile with -fPIC" -msgstr "; поново преведите Ñа „-fPIC“" +#: elfxx-mips.c:16164 +#, c-format +msgid "Hard float (32-bit CPU, Any FPU)\n" +msgstr "ХардверÑки покретни зарез (32-битни процеÑор, било који „FPU“)\n" -#: elf64-x86-64.c:3792 -msgid "%B: relocation %s against %s `%s' can not be used when making a shared object%s" -msgstr "%B: премештање „%s“ наÑпрам „%s“ „%s“ Ñе не може кориÑтити приликом Ñтварања дељеног објекта%s" +#: elfxx-mips.c:16167 +#, c-format +msgid "Hard float (32-bit CPU, 64-bit FPU)\n" +msgstr "ХардверÑки покретни зарез (32-битни процеÑор, 64-битни „FPU“)\n" -#: elf64-x86-64.c:3794 -msgid "%B: relocation %s against undefined %s `%s' can not be used when making a shared object%s" -msgstr "%B: премештање „%s“ наÑпрам недефиниÑаног „%s“ „%s“ Ñе не може кориÑтити приликом Ñтварања дељеног објекта%s" +#: elfxx-mips.c:16170 +#, c-format +msgid "Hard float compat (32-bit CPU, 64-bit FPU)\n" +msgstr "ХардверÑко покретном зарезу ÑаглаÑно (32-битни процеÑор, 64-битни „FPU“)\n" -#: elf64-x86-64.c:3900 -msgid "%B: addend -0x%x in relocation %s against symbol `%s' at 0x%lx in section `%A' is out of range" -msgstr "%B: Ñабирак -0x%x у премештању „%s“ наÑпрам Ñимбола „%s“ на 0x%lx у одељку „%A“ је ван опÑега" +#: elfxx-mips.c:16202 +#, c-format +msgid " [abi=O32]" +msgstr " [аби=O32]" -#: elf64-x86-64.c:3908 -msgid "%B: addend 0x%x in relocation %s against symbol `%s' at 0x%lx in section `%A' is out of range" -msgstr "%B: Ñабирак 0x%x у премештању „%s“ наÑпрам Ñимбола „%s“ на 0x%lx у одељку „%A“ је ван опÑега" +#: elfxx-mips.c:16204 +#, c-format +msgid " [abi=O64]" +msgstr " [аби=O64]" -#: elfcode.h:760 +#: elfxx-mips.c:16206 #, c-format -msgid "warning: %s has a corrupt string table index - ignoring" -msgstr "упозорење: „%s“ има оштећен Ð¸Ð½Ð´ÐµÐºÑ Ñ‚Ð°Ð±ÐµÐ»Ðµ ниÑке — занемарујем" +msgid " [abi=EABI32]" +msgstr " [аби=EABI32]" -#: elfcode.h:1186 +#: elfxx-mips.c:16208 #, c-format -msgid "%s: version count (%ld) does not match symbol count (%ld)" -msgstr "%s: број издања (%ld) не одговара броју Ñимбола (%ld)" +msgid " [abi=EABI64]" +msgstr " [аби=EABI64]" -#: elfcode.h:1440 +#: elfxx-mips.c:16210 #, c-format -msgid "%s(%s): relocation %d has invalid symbol index %ld" -msgstr "%s(%s): премештање „%d“ има неиÑправан Ð¸Ð½Ð´ÐµÐºÑ Ñимбола %ld" +msgid " [abi unknown]" +msgstr " [аби није познато]" -#: elfcore.h:305 -msgid "Warning: %B is truncated: expected core file size >= %lu, found: %lu." -msgstr "Упозорење: „%B“ је Ñкраћено: очекивах величину датотеке језгра >= %lu, нађох: %lu." +#: elfxx-mips.c:16212 +#, c-format +msgid " [abi=N32]" +msgstr " [аби=N32]" -#: elflink.c:1143 -msgid "%s: TLS definition in %B section %A mismatches non-TLS definition in %B section %A" -msgstr "%s: ТЛС дефиниција у „%B“ одељак „%A“ не одговара не-ТЛС дефиницији у „%B“ одељак „%A“" +#: elfxx-mips.c:16214 +#, c-format +msgid " [abi=64]" +msgstr " [аби=64]" -#: elflink.c:1148 -msgid "%s: TLS reference in %B mismatches non-TLS reference in %B" -msgstr "%s: ТЛС упута у „%B“ не одговара не-ТЛС упути у „%B“" +#: elfxx-mips.c:16216 +#, c-format +msgid " [no abi set]" +msgstr " [аби није подешено]" -#: elflink.c:1153 -msgid "%s: TLS definition in %B section %A mismatches non-TLS reference in %B" -msgstr "%s: ТЛС дефиниција у „%B“ одељак „%A“ не одговара не-ТЛС упути у „%B“" +#: elfxx-mips.c:16241 +#, c-format +msgid " [unknown ISA]" +msgstr " [непознато ИСÐ]" -#: elflink.c:1158 -msgid "%s: TLS reference in %B mismatches non-TLS definition in %B section %A" -msgstr "%s: ТЛС упута у „%B“ не одговара не-ТЛС дефиницији у „%B“ одељак „%A“" +#: elfxx-mips.c:16261 +#, c-format +msgid " [not 32bitmode]" +msgstr " [није 32-битни режим]" -#: elflink.c:1763 -msgid "%B: unexpected redefinition of indirect versioned symbol `%s'" -msgstr "%B: неочекивано поновно дефиниÑање индиректно верзиониÑаног Ñимбола „%s“" +#: elfxx-riscv.c:1063 +#, c-format +msgid "-march=%s: Expect number after `%dp'." +msgstr "-march=%s: Очекујем број након „%dp“." -#: elflink.c:2066 -msgid "%B: version node not found for symbol %s" -msgstr "%B: ниÑам нашао чвор издања за Ñимбол „%s“" +#: elfxx-riscv.c:1174 +#, c-format +msgid "-march=%s: rv%de is not a valid base ISA" +msgstr "-march=%s: „rv%de“ није иÑправна база „ISA“" -#: elflink.c:2157 -msgid "%B: bad reloc symbol index (0x%lx >= 0x%lx) for offset 0x%lx in section `%A'" -msgstr "%B: лош Ð¸Ð½Ð´ÐµÐºÑ Ñимбола премештања (0x%lx >= 0x%lx) за померај 0x%lx у одељку „%A“" +#: elfxx-riscv.c:1214 +#, c-format +msgid "-march=%s: first ISA subset must be `e', `i' or `g'" +msgstr "-march=%s: први „ISA“ подÑкуп мора бити „e“, „i“ или „g“" -#: elflink.c:2168 -msgid "%B: non-zero symbol index (0x%lx) for offset 0x%lx in section `%A' when the object file has no symbol table" -msgstr "%B: не-нулти Ð¸Ð½Ð´ÐµÐºÑ Ñимбола (0x%lx) за померај 0x%lx у одељку „%A“ када датотека објекта нема табелу Ñимбола" +#: elfxx-riscv.c:1242 +#, c-format +msgid "-march=%s: unsupported ISA subset `%c'" +msgstr "-march=%s: неподржан „ISA“ подÑкуп „%c“" -#: elflink.c:2358 -msgid "%B: relocation size mismatch in %B section %A" -msgstr "%B: величина премештања не одговара у „%B“ одељак „%A“" +#: elfxx-riscv.c:1245 +#, c-format +msgid "-march=%s: ISA string is not in canonical order. `%c'" +msgstr "-march=%s: „ISA“ ниÑка није у канонÑком поретку. „%c“" -#: elflink.c:2640 +#: elfxx-riscv.c:1364 #, c-format -msgid "warning: type and size of dynamic symbol `%s' are not defined" -msgstr "упозорење: врÑта и величина динамичког Ñимбола „%s“ ниÑу дефиниÑане" +msgid "-march=%s: Invalid or unknown %s ISA extension: '%s'" +msgstr "-march=%s: ÐеиÑправно или непознато „%s ISA“ проширење: „%s“" -#: elflink.c:3403 -msgid "%P: alternate ELF machine code found (%d) in %B, expecting %d\n" -msgstr "%P: нађох измењени „ELF“ машинÑки код (%d) у „%B“, очекивах „%d“\n" - -#: elflink.c:4032 -msgid "%B: %s: invalid version %u (max %d)" -msgstr "%B: %s: неиÑправно издање %u (најв. %d)" - -#: elflink.c:4068 -msgid "%B: %s: invalid needed version %d" -msgstr "%B: %s: неиÑправно потребно издање %d" - -#: elflink.c:4452 -msgid "%B: undefined reference to symbol '%s'" -msgstr "%B: недефиниÑана упута ка Ñимболу „%s“" - -#: elflink.c:5523 -msgid "%B: stack size specified and %s set" -msgstr "%B: величина Ñпремника је наведена и „%s“ подешена" - -#: elflink.c:5526 -msgid "%B: %s not absolute" -msgstr "%B: „%s“ није апÑолутно" +#: elfxx-riscv.c:1375 +#, c-format +msgid "-march=%s: Duplicate %s ISA extension: '%s'" +msgstr "-march=%s: ДвоÑтруко „%s ISA“ проширење: „%s“" -#: elflink.c:5824 +#: elfxx-riscv.c:1386 #, c-format -msgid "%s: undefined version: %s" -msgstr "%s: недефиниÑано издање: %s" +msgid "-march=%s: %s ISA extension not in alphabetical order: '%s' must come before '%s'." +msgstr "-march=%s: „%s ISA“ проширење није азбучним редом: „%s“ мора бити пре „%s“." -#: elflink.c:5892 -msgid "%B: .preinit_array section is not allowed in DSO" -msgstr "%B: одељак „.preinit_array“ није дозвољен у „DSO“-у" +#: elfxx-riscv.c:1407 +#, c-format +msgid "-march=%s: %s must separate with _" +msgstr "-march=%s: „%s“ Ñе мора раздвојити _" -#: elflink.c:7657 +#: elfxx-riscv.c:1523 #, c-format -msgid "undefined %s reference in complex symbol: %s" -msgstr "недефиниÑана „%s“ упута у Ñложеном Ñимболу: %s" +msgid "-march=%s: ISA string must begin with rv32 or rv64" +msgstr "-march=%s: „ISA“ ниÑка мора почети Ñа „rv32“ или „rv64“" -#: elflink.c:7811 +#: elfxx-riscv.c:1544 #, c-format -msgid "unknown operator '%c' in complex symbol" -msgstr "непознат оператор „%c“ у Ñложеном Ñимболу" +msgid "-march=%s: unexpected ISA string at end: %s" +msgstr "-march=%s: неочекивана „ISA“ ниÑка на крају: %s" -#: elflink.c:8165 elflink.c:8182 elflink.c:8219 elflink.c:8236 -msgid "%B: Unable to sort relocs - they are in more than one size" -msgstr "%B: Ðе могу да поређам премештања — имају више од једне величине" +#: elfxx-riscv.c:1553 +#, c-format +msgid "-march=%s: rv32e does not support the `f' extension" +msgstr "-march=%s: „rv32e“ не подржава проширење „f“" -#: elflink.c:8196 elflink.c:8250 -msgid "%B: Unable to sort relocs - they are of an unknown size" -msgstr "%B: Ðе могу да поређам премештања — непознате Ñу величине" +#: elfxx-riscv.c:1562 +#, c-format +msgid "-march=%s: `d' extension requires `f' extension" +msgstr "-march=%s: „d“ проширење захтева проширење „f“" -#: elflink.c:8301 -msgid "Not enough memory to sort relocations" -msgstr "Ðема довољно меморије за ређање премештања" +#: elfxx-riscv.c:1571 +#, c-format +msgid "-march=%s: `q' extension requires `d' extension" +msgstr "-march=%s: „q“ проширење захтева проширење „d“" -#: elflink.c:8494 -msgid "%B: Too many sections: %d (>= %d)" -msgstr "%B: Превише одељака: %d (>= %d)" +#: elfxx-riscv.c:1579 +#, c-format +msgid "-march=%s: rv32 does not support the `q' extension" +msgstr "-march=%s: „rv32“ не подржава проширење „q“" -#: elflink.c:8775 -msgid "%B: internal symbol `%s' in %B is referenced by DSO" -msgstr "%B: на унутрашњи Ñимбол „%s“ у „%B“ упућује „DSO“" +#: elfxx-sparc.c:3002 elfnn-aarch64.c:5530 +#, c-format +msgid "%pB: relocation %s against STT_GNU_IFUNC symbol `%s' isn't handled by %s" +msgstr "%pB: премештање „%s“ наÑпрам „STT_GNU_IFUNC“ Ñимбола „%s“ „%s“ не може да одради" -#: elflink.c:8777 -msgid "%B: hidden symbol `%s' in %B is referenced by DSO" -msgstr "%B: на Ñкривени Ñимбол „%s“ у „%B“ упућује „DSO“" +#: elfxx-tilegx.c:4128 +#, c-format +msgid "%pB: cannot link together %s and %s objects" +msgstr "%pB: не могу да повежем заједно објекте „%s“ и „%s“" -#: elflink.c:8779 -msgid "%B: local symbol `%s' in %B is referenced by DSO" -msgstr "%B: на локални Ñимбол „%s“ у „%B“ упућује „DSO“" +#: elfxx-x86.c:976 +#, c-format +msgid "%F%P: %pB: relocation %s against absolute symbol `%s' in section `%pA' is disallowed\n" +msgstr "%F%P: %pB: премештај „%s“ наÑпрам апÑолутног Ñимбола „%s“ у одељку „%pA“ је иÑкључен\n" -#: elflink.c:8890 -msgid "%B: could not find output section %A for input section %A" -msgstr "%B: не могу да нађем излазни одељак „%A“ за улазни одељак „%A“" +#: elfxx-x86.c:1058 +msgid "%P: %pB: warning: relocation in read-only section `%pA'\n" +msgstr "%P: %pB: упозорење: премештање у одељку „%pA“ који је Ñамо за читање\n" -#: elflink.c:9013 -msgid "%B: protected symbol `%s' isn't defined" -msgstr "%B: заштићени Ñимбол „%s“ није дефиниÑан" +#: elfxx-x86.c:2314 +#, c-format +msgid "error: %pB: " +msgstr "грешка: %pB: <оштећено x86 ÑвојÑтво (0x%x) величине: 0x%x>" -#: elflink.c:9015 -msgid "%B: internal symbol `%s' isn't defined" -msgstr "%B: унутрашњи Ñимбол „%s“ није дефиниÑан" +#: elfxx-x86.c:2580 +msgid "%P: %pB: warning: missing %s\n" +msgstr "%P: %pB: упозорење: недоÑтаје „%s“\n" -#: elflink.c:9017 -msgid "%B: hidden symbol `%s' isn't defined" -msgstr "%B: Ñкривени Ñимбол „%s“ није дефиниÑан" +#: elfxx-x86.c:2582 +msgid "%X%P: %pB: error: missing %s\n" +msgstr "%X%P: %pB: грешка: недоÑтаје „%s“\n" -#: elflink.c:9043 -msgid "%B: No symbol version section for versioned symbol `%s'" -msgstr "%B: Ðема одељка издања Ñимбола за верзиониÑани Ñимбол „%s“" +#: elfxx-x86.c:2605 +msgid "IBT and SHSTK properties" +msgstr "„IBT“ и „SHSTK“ ÑвојÑтва" -#: elflink.c:9598 -msgid "error: %B: size of section %A is not multiple of address size" -msgstr "грешка: %B: величина одељка „%A“ није производ величине адреÑе" +#: elfxx-x86.c:2607 +msgid "IBT property" +msgstr "„IBT“ ÑвојÑтво" -#: elflink.c:9645 -msgid "error: %B contains a reloc (0x%s) for section %A that references a non-existent global symbol" -msgstr "грешка: „%B“ Ñадржи премештање (0x%s) за одељак „%A“ који упућује на не-поÑтојећи општи Ñимбол" +#: elfxx-x86.c:2609 +msgid "SHSTK property" +msgstr "„SHSTK“ ÑвојÑтво" -#: elflink.c:10369 -msgid "%A has both ordered [`%A' in %B] and unordered [`%A' in %B] sections" -msgstr "„%A“ има и уређени [„%A“ у „%B“] и неуређени [„%A“ у „%B“] одељак" +#: elfxx-x86.c:2753 +msgid "%F%P: failed to create VxWorks dynamic sections\n" +msgstr "%F%P: ниÑам уÑпео да Ñтворим „VxWorks“ динамичке одељке\n" -#: elflink.c:10374 -#, c-format -msgid "%A has both ordered and unordered sections" -msgstr "„%A“ има и уређени и неуређени одељак" +#: elfxx-x86.c:2762 +msgid "%F%P: failed to create GOT sections\n" +msgstr "%F%P: ниÑам уÑпео да направим „GOT“ одељке\n" -#: elflink.c:10982 -msgid "%B: file class %s incompatible with %s" -msgstr "%B: клаÑа датотеке „%s“ није ÑаглаÑна Ñа „%s“" +#: elfxx-x86.c:2780 +msgid "%F%P: failed to create ifunc sections\n" +msgstr "%F%P: ниÑам уÑпео да направим „ifunc“ одељке\n" -#: elflink.c:11303 elflink.c:11347 -msgid "%B: could not find output section %s" -msgstr "%B: не могу да нађем излазни одељак „%s“" +#: elfxx-x86.c:2817 +msgid "%F%P: failed to create GOT PLT section\n" +msgstr "%F%P: ниÑам уÑпео да направим „GOT PLT“ одељак\n" -#: elflink.c:11308 -#, c-format -msgid "warning: %s section has zero size" -msgstr "упозорење: одељак „%s“ је нулте величине" +#: elfxx-x86.c:2836 +msgid "%F%P: failed to create IBT-enabled PLT section\n" +msgstr "%F%P: ниÑам уÑпео да направим „IBT“-ом укључен „PLT“ одељак\n" -#: elflink.c:11353 -#, c-format -msgid "warning: section '%s' is being made into a note" -msgstr "упозорење: одељак „%s“ је претворен у белешку" +#: elfxx-x86.c:2850 +msgid "%F%P: failed to create BND PLT section\n" +msgstr "%F%P: ниÑам уÑпео да направим „BND PLT“ одељак\n" -#: elflink.c:11419 -msgid "%P%X: read-only segment has dynamic relocations.\n" -msgstr "%P%X: одељак Ñамо за читање има динамичка премештања.\n" - -#: elflink.c:11422 -msgid "%P: warning: creating a DT_TEXTREL in a shared object.\n" -msgstr "%P: упозорење: Ñтварам „DT_TEXTREL“ у дељеном објекту.\n" +#: elfxx-x86.c:2870 +msgid "%F%P: failed to create PLT .eh_frame section\n" +msgstr "%F%P: ниÑам уÑпео да направим „PLT .eh_frame“ одељак\n" -#: elflink.c:11545 -msgid "%P%X: can not read symbols: %E\n" -msgstr "%P%X: не може да чита Ñимболе: %E\n" +#: elfxx-x86.c:2883 +msgid "%F%P: failed to create GOT PLT .eh_frame section\n" +msgstr "%F%P: ниÑам уÑпео да направим „GOT .eh_frame“ одељак\n" -#: elflink.c:11989 -msgid "Removing unused section '%s' in file '%B'" -msgstr "Уклањам некоришћени одељак „%s“ у датотеци „%B“" +#: elfxx-x86.c:2897 +msgid "%F%P: failed to create the second PLT .eh_frame section\n" +msgstr "%F%P: ниÑам уÑпео да направим други „PLT .eh_frame“ одељак\n" -#: elflink.c:12200 -msgid "Warning: gc-sections option ignored" -msgstr "Упозорење: опција „gc“ одељака је занемарена" +#: elfxx-x86.c:2939 +msgid "%X%P: attempted static link of dynamic object `%pB'\n" +msgstr "%X%P: покушах Ñтатичку везу динамичког објекта „%pB“\n" -#: elflink.c:12489 +#: ihex.c:230 #, c-format -msgid "Unrecognized INPUT_SECTION_FLAG %s\n" -msgstr "„INPUT_SECTION_FLAG %s“ није познато\n" - -#: elfxx-mips.c:1419 -msgid "static procedure (no name)" -msgstr "Ñтатички поÑтупак (без назива)" +msgid "%pB:%d: unexpected character `%s' in Intel Hex file" +msgstr "%pB:%d: неочекивани знак „%s“ у Интеловој хекÑадецималној датотеци" -#: elfxx-mips.c:5476 -msgid "MIPS16 and microMIPS functions cannot call each other" -msgstr "Функције „MIPS16“ и „microMIPS“ не могу да позивају једна другу" +#: ihex.c:338 +#, c-format +msgid "%pB:%u: bad checksum in Intel Hex file (expected %u, found %u)" +msgstr "%pB:%u: лоша Ñума провере у Интеловој хекÑадецималној датотеци (очекивах %u, нађох %u)" -#: elfxx-mips.c:6087 -msgid "%B: %A+0x%lx: Unsupported jump between ISA modes; consider recompiling with interlinking enabled." -msgstr "%B: %A+0x%lx: Ðеподржан Ñкок између ИСРрежима; размотрите поновно превођење Ñа укљученим међуповезивањем." - -#: elfxx-mips.c:6756 elfxx-mips.c:6979 -msgid "%B: Warning: bad `%s' option size %u smaller than its header" -msgstr "%B: Упозорење: лоша величина опције „%s“ %u мања од заглавља" - -#: elfxx-mips.c:7734 elfxx-mips.c:7859 -msgid "%B: Warning: cannot determine the target function for stub section `%s'" -msgstr "%B: Упозорење: не могу да одредим циљну функцију за одељак окрајка „%s“" - -#: elfxx-mips.c:7990 -msgid "%B: Malformed reloc detected for section %s" -msgstr "%B: Откривено је лоше премештање за одељак „%s“" - -#: elfxx-mips.c:8065 -msgid "%B: GOT reloc at 0x%lx not expected in executables" -msgstr "%B: „GOT“ премештање на 0x%lx није очекивано у извршним" - -#: elfxx-mips.c:8199 -msgid "%B: CALL16 reloc at 0x%lx not against global symbol" -msgstr "%B: „CALL16“ премештање на 0x%lx није наÑпрам општег Ñимбола" +#: ihex.c:393 +#, c-format +msgid "%pB:%u: bad extended address record length in Intel Hex file" +msgstr "%pB:%u: лоша дужина запиÑа проширене адреÑе у Интеловој хекÑадецималној датотеци" -#: elfxx-mips.c:8977 +#: ihex.c:411 #, c-format -msgid "non-dynamic relocations refer to dynamic symbol %s" -msgstr "не-динамичка премештања упућују на динамички Ñимбол „%s“" +msgid "%pB:%u: bad extended start address length in Intel Hex file" +msgstr "%pB:%u: лоша дужина запиÑа проширене почетне адреÑе у Интеловој хекÑадецималној датотеци" -#: elfxx-mips.c:9877 -msgid "%B: Can't find matching LO16 reloc against `%s' for %s at 0x%lx in section `%A'" -msgstr "%B: Ðе могу да нађем упоређујуће „LO16“ премештање наÑпрам „%s“ за „%s“ на 0x%lx у одељку „%A“" +#: ihex.c:429 +#, c-format +msgid "%pB:%u: bad extended linear address record length in Intel Hex file" +msgstr "%pB:%u: лоша дужина запиÑа проширене линеарне адреÑе у Интеловој хекÑадецималној датотеци" -#: elfxx-mips.c:10016 -msgid "small-data section exceeds 64KB; lower small-data size limit (see option -G)" -msgstr "одељак малих података превазилази 64KB; доња граница величине малих података (видите опцију „-G“)" +#: ihex.c:447 +#, c-format +msgid "%pB:%u: bad extended linear start address length in Intel Hex file" +msgstr "%pB:%u: лоша дужина запиÑа проширене линеарне почетне адреÑе у Интеловој хекÑадецималној датотеци" -#: elfxx-mips.c:10035 -msgid "JALX to a non-word-aligned address" -msgstr "„JALX“ на адреÑу поравнату не-речју" - -#: elfxx-mips.c:10402 elfxx-mips.c:10966 -msgid "%B: `%A' offset of %ld from `%A' beyond the range of ADDIUPC" -msgstr "%B: „%A“ померај %ld из „%A“ иза опÑега „ADDIUPC“" - -#: elfxx-mips.c:13990 -#, c-format -msgid "%s: illegal section name `%s'" -msgstr "%s: неиÑправан назив одељка „%s“" - -#: elfxx-mips.c:14375 elfxx-mips.c:14381 elfxx-mips.c:14387 elfxx-mips.c:14407 -#: elfxx-mips.c:14413 elfxx-mips.c:14419 elfxx-mips.c:14441 elfxx-mips.c:14460 -#: elfxx-mips.c:14467 elfxx-mips.c:14474 -msgid "Warning: %B uses %s (set by %B), %B uses %s" -msgstr "Упозорење: „%B“ кориÑти „%s“ (подешено Ñа „%B“), „%B“ кориÑти „%s“" - -#: elfxx-mips.c:14394 elfxx-mips.c:14426 elfxx-mips.c:14447 elfxx-mips.c:14480 -msgid "Warning: %B uses %s (set by %B), %B uses unknown floating point ABI %d" -msgstr "Упозорење: „%B“ кориÑти „%s“ (подешено Ñа „%B“), „%B“ кориÑти непознату ÐБИ тачку покретног зареза „%d“" - -#: elfxx-mips.c:14493 elfxx-mips.c:14501 elfxx-mips.c:14509 elfxx-mips.c:14517 -msgid "Warning: %B uses unknown floating point ABI %d (set by %B), %B uses %s" -msgstr "Упозорење: „%B“ кориÑти непознату ÐБИ тачку покретног зареза „%d“ (подешено Ñа „%B“), „%B“ кориÑти „%s“" - -#: elfxx-mips.c:14525 -msgid "Warning: %B uses unknown floating point ABI %d (set by %B), %B uses unknown floating point ABI %d" -msgstr "Упозорење: „%B“ кориÑти непознату ÐБИ тачку покретног зареза „%d“ (подешено Ñа „%B“), „%B“ кориÑти непознату ÐБИ тачку покретног зареза „%d“" - -#: elfxx-mips.c:14548 -msgid "Warning: %B uses %s (set by %B), %B uses unknown MSA ABI %d" -msgstr "Упозорење: „%B“ кориÑти „%s“ (подешено Ñа „%B“), „%B“ кориÑти непознато МСРÐБИ „%d“" - -#: elfxx-mips.c:14559 -msgid "Warning: %B uses unknown MSA ABI %d (set by %B), %B uses %s" -msgstr "Упозорење: „%B“ кориÑти непознато МСРÐБИ „%d“ (подешено Ñа „%B“), „%B“ кориÑти „%s“" - -#: elfxx-mips.c:14567 -msgid "Warning: %B uses unknown MSA ABI %d (set by %B), %B uses unknown MSA ABI %d" -msgstr "Упозорење: „%B“ кориÑти непознато МСРÐБИ „%d“ (подешено Ñа „%B“), „%B“ кориÑти непознато МСРÐБИ „%d“" - -#: elfxx-mips.c:14599 -msgid "%B: endianness incompatible with that of the selected emulation" -msgstr "%B: крајњоÑÑ‚ није ÑаглаÑна Ñа оном изабране емулације" - -#: elfxx-mips.c:14610 -msgid "%B: ABI is incompatible with that of the selected emulation" -msgstr "%B: ÐБИ није ÑаглаÑна Ñа оном изабране емулације" - -#: elfxx-mips.c:14694 -msgid "%B: warning: linking abicalls files with non-abicalls files" -msgstr "%B: упозорење: повезујем датотеке абипозива Ñа датотекама не-абипозива" - -#: elfxx-mips.c:14711 -msgid "%B: linking 32-bit code with 64-bit code" -msgstr "%B: повезујем 32-битни код Ñа 64-битним кодом" - -#: elfxx-mips.c:14739 elfxx-mips.c:14802 -msgid "%B: linking %s module with previous %s modules" -msgstr "%B: повезујем „%s“ модул Ñа претходним „%s“ модулима" - -#: elfxx-mips.c:14762 -msgid "%B: ABI mismatch: linking %s module with previous %s modules" -msgstr "%B: ÐБИ не одговара: повезујем „%s“ модул Ñа претходним „%s“ модулима" - -#: elfxx-mips.c:14786 -msgid "%B: ASE mismatch: linking %s module with previous %s modules" -msgstr "%B: ÐСЕ не одговара: повезујем „%s“ модул Ñа претходним „%s“ модулима" +#: ihex.c:465 +#, c-format +msgid "%pB:%u: unrecognized ihex type %u in Intel Hex file" +msgstr "%pB:%u: непозната „ihex“ врÑта „%u“ у Интеловој хекÑадецималној датотеци" -#: elfxx-mips.c:14958 +#: ihex.c:581 #, c-format -msgid " [abi=O32]" -msgstr " [аби=O32]" +msgid "%pB: internal error in ihex_read_section" +msgstr "%pB: унутрашња грешка у „ihex_одељак_читања“" -#: elfxx-mips.c:14960 +#: ihex.c:614 #, c-format -msgid " [abi=O64]" -msgstr " [аби=O64]" +msgid "%pB: bad section length in ihex_read_section" +msgstr "%pB: лоша дужина одељка у „ihex_одељак_читања“" -#: elfxx-mips.c:14962 +#: ihex.c:785 #, c-format -msgid " [abi=EABI32]" -msgstr " [аби=EABI32]" +msgid "%pB 64-bit address %# out of range for Intel Hex file" +msgstr "%pB 64-битна адреÑа %# је ван опÑега за Интелову хекÑадецималну датотеку" -#: elfxx-mips.c:14964 +#: ihex.c:843 #, c-format -msgid " [abi=EABI64]" -msgstr " [аби=EABI64]" +msgid "%pB: address %# out of range for Intel Hex file" +msgstr "%pB: адреÑа %# је ван опÑега за Интелову хекÑадецималну датотеку" -#: elfxx-mips.c:14966 +#: libbfd.c:884 #, c-format -msgid " [abi unknown]" -msgstr " [аби није познато]" +msgid "%pB: unable to get decompressed section %pA" +msgstr "%pB: не могу да добавим раÑпаковани одељак „%pA“" -#: elfxx-mips.c:14968 +#: libbfd.c:1048 #, c-format -msgid " [abi=N32]" -msgstr " [аби=N32]" +msgid "Deprecated %s called at %s line %d in %s\n" +msgstr "ЗаÑтарело „%s“ је позвано у „%s“ %d. ред у „%s“\n" -#: elfxx-mips.c:14970 +#: libbfd.c:1051 #, c-format -msgid " [abi=64]" -msgstr " [аби=64]" +msgid "Deprecated %s called\n" +msgstr "ЗаÑтарело „%s“ је позвано\n" -#: elfxx-mips.c:14972 +#: linker.c:1696 #, c-format -msgid " [no abi set]" -msgstr " [аби није подешено]" +msgid "%pB: indirect symbol `%s' to `%s' is a loop" +msgstr "%pB: индиректни Ñимбол „%s“ ка „%s“ је петља" -#: elfxx-mips.c:14993 +#: linker.c:2567 #, c-format -msgid " [unknown ISA]" -msgstr " [непознато ИСÐ]" +msgid "attempt to do relocatable link with %s input and %s output" +msgstr "покушавам да одрадим премеÑтиву везу Ñа „%s“ улазом и „%s“ излазом" -#: elfxx-mips.c:15013 +#: linker.c:2852 #, c-format -msgid " [not 32bitmode]" -msgstr " [није 32-битни режим]" +msgid "%pB: ignoring duplicate section `%pA'\n" +msgstr "%pB: занемарујем удвоÑтручени одељак „%pA“\n" -#: elfxx-sparc.c:640 +#: linker.c:2862 linker.c:2872 #, c-format -msgid "invalid relocation type %d" -msgstr "неиÑправна врÑта премештања „%d“" +msgid "%pB: duplicate section `%pA' has different size\n" +msgstr "%pB: удвоÑтручени одељак „%pA“ има другачију величину\n" -#: elfxx-tilegx.c:4433 -msgid "%B: Cannot link together %s and %s objects." -msgstr "%B: Ðе могу да повежем заједно објекте „%s“ и „%s“." +#: linker.c:2881 linker.c:2887 +#, c-format +msgid "%pB: could not read contents of section `%pA'\n" +msgstr "%pB: не могу да прочитам Ñадржај одељка „%pA“\n" -#: i386linux.c:418 m68klinux.c:421 sparclinux.c:414 +#: linker.c:2892 #, c-format -msgid "Output file requires shared library `%s'\n" -msgstr "Излазна датотека захтева дељену библиотеку „%s“\n" +msgid "%pB: duplicate section `%pA' has different contents\n" +msgstr "%pB: удвоÑтручени одељак „%pA“ има другачији Ñадржај\n" -#: i386linux.c:426 m68klinux.c:429 sparclinux.c:422 +#: linker.c:3404 #, c-format -msgid "Output file requires shared library `%s.so.%s'\n" -msgstr "Излазна датотека захтева дељену библиотеку „%s.so.%s“\n" +msgid "%pB: compiled for a big endian system and target is little endian" +msgstr "%pB: преведено за ÑиÑтем велике крајноÑти а циљ је мала крајноÑÑ‚" -#: i386linux.c:613 i386linux.c:663 m68klinux.c:618 m68klinux.c:666 -#: sparclinux.c:609 sparclinux.c:659 +#: linker.c:3407 #, c-format -msgid "Symbol %s not defined for fixups\n" -msgstr "Симбол „%s“ није дефиниÑан за иÑправке\n" +msgid "%pB: compiled for a little endian system and target is big endian" +msgstr "%pB: преведено за ÑиÑтем мале крајноÑти а циљ је велика крајноÑÑ‚" -#: i386linux.c:687 m68klinux.c:690 sparclinux.c:683 -msgid "Warning: fixup count mismatch\n" -msgstr "Упозорење: број иÑправки не одговара\n" +#: mach-o-arm.c:172 +msgid "malformed mach-o ARM reloc pair: reloc is first reloc" +msgstr "лош „mach-o ARM“ пар премештања: премештање је прво премештање" -#: ieee.c:158 +#: mach-o-arm.c:188 #, c-format -msgid "%s: string too long (%d chars, max 65535)" -msgstr "%s: ниÑка је предуга (%d знака, најв. 65535)" +msgid "malformed mach-o ARM reloc pair: invalid length: %d" +msgstr "лош „mach-o ARM“ пар премештања: неиÑправна дужина: %d" -#: ieee.c:285 +#: mach-o-arm.c:203 #, c-format -msgid "%s: unrecognized symbol `%s' flags 0x%x" -msgstr "%s: непознат Ñимбол „%s“ заÑтавице 0x%x" - -#: ieee.c:791 -msgid "%B: unimplemented ATI record %u for symbol %u" -msgstr "%B: непримењени ÐТИ Ð·Ð°Ð¿Ð¸Ñ â€ž%u“ за Ñимбол „%u“" - -#: ieee.c:815 -msgid "%B: unexpected ATN type %d in external part" -msgstr "%B: неочекивана ÐТРврÑта „%d“ у Ñпољном делу" +msgid "malformed mach-o ARM sectdiff reloc: invalid length: %d" +msgstr "лош „mach-o ARM“ Ñектор разлика премештања: неиÑправна дужина: %d" -#: ieee.c:837 -msgid "%B: unexpected type after ATN" -msgstr "%B: неочекивана врÑта након ÐТÐ-а" +#: mach-o-arm.c:218 +#, c-format +msgid "malformed mach-o ARM local sectdiff reloc: invalid length: %d" +msgstr "лош „mach-o ARM“ локални Ñектор разлика премештања: неиÑправна дужина: %d" -#: ihex.c:230 -msgid "%B:%d: unexpected character `%s' in Intel Hex file" -msgstr "%B:%d: неочекивани знак „%s“ у Интеловој хекÑадецималној датотеци" +#: mach-o-arm.c:233 +#, c-format +msgid "malformed mach-o ARM half sectdiff reloc: invalid length: %d" +msgstr "лош „mach-o ARM“ полуÑектор разлика премештања: неиÑправна дужина: %d" -#: ihex.c:337 -msgid "%B:%u: bad checksum in Intel Hex file (expected %u, found %u)" -msgstr "%B:%u: лоша Ñума провере у Интеловој хекÑадецималној датотеци (очекивах %u, нађох %u)" +#: mach-o-arm.c:265 +#, c-format +msgid "malformed mach-o ARM vanilla reloc: invalid length: %d (pcrel: %d)" +msgstr "лоше „mach-o ARM“ ванила премештање: неиÑправна дужина: %d (pcrel: %d)" -#: ihex.c:392 -msgid "%B:%u: bad extended address record length in Intel Hex file" -msgstr "%B:%u: лоша дужина запиÑа проширене адреÑе у Интеловој хекÑадецималној датотеци" +#: mach-o-arm.c:329 +#, c-format +msgid "malformed mach-o ARM reloc: unknown reloc type: %d" +msgstr "лоше „mach-o ARM“ премештање: непозната врÑта премештања: %d" -#: ihex.c:409 -msgid "%B:%u: bad extended start address length in Intel Hex file" -msgstr "%B:%u: лоша дужина запиÑа проширене почетне адреÑе у Интеловој хекÑадецималној датотеци" +#: mach-o.c:633 +#, c-format +msgid "" +msgstr "<непознате заÑтавице маÑке>" -#: ihex.c:426 -msgid "%B:%u: bad extended linear address record length in Intel Hex file" -msgstr "%B:%u: лоша дужина запиÑа проширене линеарне адреÑе у Интеловој хекÑадецималној датотеци" +#: mach-o.c:688 +msgid " ()" +msgstr " (<непознато>)" -#: ihex.c:443 -msgid "%B:%u: bad extended linear start address length in Intel Hex file" -msgstr "%B:%u: лоша дужина запиÑа проширене линеарне почетне адреÑе у Интеловој хекÑадецималној датотеци" +#: mach-o.c:699 +#, c-format +msgid " MACH-O header:\n" +msgstr " „MACH-O“ заглавље:\n" -#: ihex.c:460 -msgid "%B:%u: unrecognized ihex type %u in Intel Hex file" -msgstr "%B:%u: непозната „ihex“ врÑта „%u“ у Интеловој хекÑадецималној датотеци" +#: mach-o.c:700 +#, c-format +msgid " magic: %#lx\n" +msgstr " магија: %#lx\n" -#: ihex.c:579 -msgid "%B: internal error in ihex_read_section" -msgstr "%B: унутрашња грешка у „ihex_одељак_читања“" +#: mach-o.c:701 +#, c-format +msgid " cputype: %#lx (%s)\n" +msgstr " врÑта цпј: %#lx (%s)\n" -#: ihex.c:613 -msgid "%B: bad section length in ihex_read_section" -msgstr "%B: лоша дужина одељка у „ihex_одељак_читања“" +#: mach-o.c:703 +#, c-format +msgid " cpusubtype: %#lx%s\n" +msgstr " подврÑта цпј: %#lx%s\n" -#: ihex.c:826 +#: mach-o.c:705 #, c-format -msgid "%s: address 0x%s out of range for Intel Hex file" -msgstr "%s: адреÑа 0x%s је ван опÑега за Интелову хекÑадецималну датотеку" +msgid " filetype: %#lx\n" +msgstr " врÑта датотеке: %#lx\n" -#: libbfd.c:863 -msgid "%B: unable to get decompressed section %A" -msgstr "%B: не могу да добавим раÑпаковани одељак „%A“" +#: mach-o.c:706 +#, c-format +msgid " ncmds: %#lx\n" +msgstr " брнаредби: %#lx\n" -#: libbfd.c:1012 -msgid "%B: compiled for a big endian system and target is little endian" -msgstr "%B: преведено за ÑиÑтем велике крајноÑти а циљ је мала крајноÑÑ‚" +#: mach-o.c:707 +#, c-format +msgid " sizeocmds: %#lx\n" +msgstr " велнаредби: %#lx\n" -#: libbfd.c:1014 -msgid "%B: compiled for a little endian system and target is big endian" -msgstr "%B: преведено за ÑиÑтем мале крајноÑти а циљ је велика крајноÑÑ‚" +#: mach-o.c:708 +#, c-format +msgid " flags: %#lx\n" +msgstr " заÑтавице: %#lx\n" -#: libbfd.c:1043 +#: mach-o.c:709 #, c-format -msgid "Deprecated %s called at %s line %d in %s\n" -msgstr "ЗаÑтарело „%s“ је позвано у „%s“ %d. ред у „%s“\n" +msgid " version: %x\n" +msgstr " издање: %x\n" -#: libbfd.c:1046 +#. Urg - what has happened ? +#: mach-o.c:744 #, c-format -msgid "Deprecated %s called\n" -msgstr "ЗаÑтарело „%s“ је позвано\n" +msgid "incompatible cputypes in mach-o files: %ld vs %ld" +msgstr "неÑаглаÑне врÑте процеÑора у „mach-o“ датотекама: „%ld“ наÑпрам „%ld“" -#: linker.c:1873 -msgid "%B: indirect symbol `%s' to `%s' is a loop" -msgstr "%B: индиректни Ñимбол „%s“ ка „%s“ је петља" +#: mach-o.c:913 +msgid "bfd_mach_o_canonicalize_symtab: unable to load symbols" +msgstr "bfd_mach_o_canonicalize_symtab: не могу да прочитам Ñимболе" -#: linker.c:2750 -#, c-format -msgid "Attempt to do relocatable link with %s input and %s output" -msgstr "Покушавам да одрадим премеÑтиву везу Ñа „%s“ улазом и „%s“ излазом" +#: mach-o.c:1505 +msgid "malformed mach-o reloc: section index is greater than the number of sections" +msgstr "лоше „mach-o“ премештање: Ð¸Ð½Ð´ÐµÐºÑ Ð¾Ð´ÐµÑ™ÐºÐ° је већи од броја одељака" -#: linker.c:3035 -msgid "%B: ignoring duplicate section `%A'\n" -msgstr "%B: занемарујем удвоÑтручени одељак „%A“\n" +#: mach-o.c:2139 +msgid "sorry: modtab, toc and extrefsyms are not yet implemented for dysymtab commands." +msgstr "извините: „modtab“, „toc“ и „extrefsyms“ још ниÑу примењени за наредбе „dysymtab“." -#: linker.c:3044 linker.c:3053 -msgid "%B: duplicate section `%A' has different size\n" -msgstr "%B: удвоÑтручени одељак „%A“ има другачију величину\n" +#: mach-o.c:2587 +#, c-format +msgid "mach-o: there are too many sections (%u) maximum is 255,\n" +msgstr "mach-o: има превише одељака (%u) највише је 255,\n" -#: linker.c:3061 linker.c:3066 -msgid "%B: could not read contents of section `%A'\n" -msgstr "%B: не могу да прочитам Ñадржај одељка „%A“\n" +#: mach-o.c:2694 +#, c-format +msgid "unable to allocate data for load command %#x" +msgstr "не могу да доделим податке за наредбу учитавања „%#x“" -#: linker.c:3070 -msgid "%B: duplicate section `%A' has different contents\n" -msgstr "%B: удвоÑтручени одељак „%A“ има другачији Ñадржај\n" +#: mach-o.c:2799 +#, c-format +msgid "unable to write unknown load command %#x" +msgstr "не могу да запишем непознату наредбу учитавања „%#x“" -#: mach-o.c:648 -msgid "bfd_mach_o_canonicalize_symtab: unable to load symbols" -msgstr "bfd_mach_o_canonicalize_symtab: не могу да прочитам Ñимболе" +#: mach-o.c:2983 +#, c-format +msgid "section address (%#) below start of segment (%#)" +msgstr "адреÑа подеока (%#) је иÑпод почетка подеока (%#)" -#: mach-o.c:1918 +#: mach-o.c:3125 #, c-format -msgid "mach-o: there are too many sections (%d) maximum is 255,\n" -msgstr "mach-o: има превише одељака (%d) највише је 255,\n" +msgid "unable to layout unknown load command %#x" +msgstr "не могу да прикажем непознату наредбу учитавања „%#x“" -#: mach-o.c:2017 +#: mach-o.c:3660 #, c-format -msgid "unable to write unknown load command 0x%lx" -msgstr "не могу да запишем непознату наредбу учитавања 0x%lx" +msgid "bfd_mach_o_read_section_32: overlarge alignment value: %#lx, using 32 instead" +msgstr "bfd_mach_o_read_section_32: превелика вредноÑÑ‚ поравања: %#lx, кориÑтим 32 умеÑто тога" -#: mach-o.c:2272 -msgid "sorry: modtab, toc and extrefsyms are not yet implemented for dysymtab commands." -msgstr "извините: „modtab“, „toc“ и „extrefsyms“ још ниÑу примењени за наредбе „dysymtab“." +#: mach-o.c:3703 +#, c-format +msgid "bfd_mach_o_read_section_64: overlarge alignment value: %#lx, using 32 instead" +msgstr "bfd_mach_o_read_section_64: превелика вредноÑÑ‚ поравања: %#lx, кориÑтим 32 умеÑто тога" -#: mach-o.c:2898 +#: mach-o.c:3754 #, c-format -msgid "bfd_mach_o_read_symtab_symbol: unable to read %d bytes at %lu" -msgstr "bfd_mach_o_read_symtab_symbol: не могу да прочитам %d бајта на %lu" +msgid "bfd_mach_o_read_symtab_symbol: unable to read %d bytes at %u" +msgstr "bfd_mach_o_read_symtab_symbol: не могу да прочитам %d бајта на %u" -#: mach-o.c:2916 +#: mach-o.c:3773 #, c-format -msgid "bfd_mach_o_read_symtab_symbol: name out of range (%lu >= %lu)" -msgstr "bfd_mach_o_read_symtab_symbol: назив је ван опÑега (%lu >= %lu)" +msgid "bfd_mach_o_read_symtab_symbol: name out of range (%lu >= %u)" +msgstr "bfd_mach_o_read_symtab_symbol: назив је ван опÑега (%lu >= %u)" -#: mach-o.c:2997 +#: mach-o.c:3856 #, c-format msgid "bfd_mach_o_read_symtab_symbol: symbol \"%s\" specified invalid section %d (max %lu): setting to undefined" msgstr "bfd_mach_o_read_symtab_symbol: Ñимбол „%s“ је навео неиÑправан одељак „%d“ (најв. %lu): поÑтављам на недефиниÑано" -#: mach-o.c:3013 +#: mach-o.c:3875 #, c-format msgid "bfd_mach_o_read_symtab_symbol: symbol \"%s\" specified invalid type field 0x%x: setting to undefined" msgstr "bfd_mach_o_read_symtab_symbol: Ñимбол „%s“ је навео неиÑправно поље врÑте 0x%x: поÑтављам на недефиниÑано" -#: mach-o.c:3085 -msgid "bfd_mach_o_read_symtab_symbols: unable to allocate memory for symbols" -msgstr "bfd_mach_o_read_symtab_symbols: не могу да доделим меморију за Ñимболе" - -#: mach-o.c:3915 -msgid "%B: unknown load command 0x%lx" -msgstr "%B: непозната наредба учитавања 0x%lx" +#: mach-o.c:5064 +#, c-format +msgid "%pB: unknown load command %#x" +msgstr "%pB: непозната наредба учитавања „%#x“" -#: mach-o.c:4107 +#: mach-o.c:5263 #, c-format msgid "bfd_mach_o_scan: unknown architecture 0x%lx/0x%lx" msgstr "bfd_mach_o_scan: непозната архитектура 0x%lx/0x%lx" -#: mach-o.c:4204 +#: mach-o.c:5385 +#, c-format +msgid "unknown header byte-order value %#x" +msgstr "непозната вредноÑÑ‚ поретка бајта заглавља „%#x“" + +#: merge.c:895 +#, c-format +msgid "%pB: access beyond end of merged section (%)" +msgstr "%pB: приÑтуп иза краја Ñтопљеног одељка (%)" + +#: mmo.c:476 #, c-format -msgid "unknown header byte-order value 0x%lx" -msgstr "непозната вредноÑÑ‚ поретка бајта заглавља 0x%lx" +msgid "%pB: no core to allocate section name %s" +msgstr "%pB: нема језгра за додељивање назива одељка „%s“" -#: merge.c:832 +#: mmo.c:541 #, c-format -msgid "%s: access beyond end of merged section (%ld)" -msgstr "%s: приÑтуп иза краја Ñтопљеног одељка (%ld)" +msgid "%pB: no core to allocate a symbol %d bytes long" +msgstr "%pB: нема језгра за додељивање Ñимбола дугог %d бајта" -#: mmo.c:455 +#: mmo.c:952 #, c-format -msgid "%s: No core to allocate section name %s\n" -msgstr "%s: Ðема језгра за додељивање назива одељка „%s“\n" +msgid "%pB: attempt to emit contents at non-multiple-of-4 address %#" +msgstr "%pB: покушах да емитујем Ñадржај на адреÑи која није производ 4 „%#“" -#: mmo.c:530 +#: mmo.c:1248 #, c-format -msgid "%s: No core to allocate a symbol %d bytes long\n" -msgstr "%s: Ðема језгра за додељивање Ñимбола дугог %d бајта\n" +msgid "%pB: invalid mmo file: initialization value for $255 is not `Main'\n" +msgstr "%pB: неиÑправна „mmo“ датотека: вредноÑÑ‚ покретања за $255 није „Main“\n" -#: mmo.c:1189 +#: mmo.c:1395 #, c-format -msgid "%s: invalid mmo file: initialization value for $255 is not `Main'\n" -msgstr "%s: неиÑправна „mmo“ датотека: вредноÑÑ‚ покретања за $255 није „Main“\n" +msgid "%pB: unsupported wide character sequence 0x%02X 0x%02X after symbol name starting with `%s'\n" +msgstr "%pB: неподржан широки низ знака 0x%02X 0x%02X након назива Ñимбола који почиње Ñа „%s“\n" -#: mmo.c:1334 +#: mmo.c:1628 #, c-format -msgid "%s: unsupported wide character sequence 0x%02X 0x%02X after symbol name starting with `%s'\n" -msgstr "%s: неподржан широки низ знака 0x%02X 0x%02X након назива Ñимбола који почиње Ñа „%s“\n" +msgid "%pB: invalid mmo file: unsupported lopcode `%d'\n" +msgstr "%pB: неиÑправна „mmo“ датотека: лопкод „%d“ није подржан\n" -#: mmo.c:1568 +#: mmo.c:1639 #, c-format -msgid "%s: invalid mmo file: unsupported lopcode `%d'\n" -msgstr "%s: неиÑправна „mmo“ датотека: лопкод „%d“ није подржан\n" +msgid "%pB: invalid mmo file: expected YZ = 1 got YZ = %d for lop_quote\n" +msgstr "%pB: неиÑправна „mmo“ датотека: очекивах YZ = 1 добих YZ = %d за „lop_quote“\n" -#: mmo.c:1578 +#: mmo.c:1679 #, c-format -msgid "%s: invalid mmo file: expected YZ = 1 got YZ = %d for lop_quote\n" -msgstr "%s: неиÑправна „mmo“ датотека: очекивах YZ = 1 добих YZ = %d за „lop_quote“\n" +msgid "%pB: invalid mmo file: expected z = 1 or z = 2, got z = %d for lop_loc\n" +msgstr "%pB: неиÑправна „mmo“ датотека: очекивах z = 1 или z = 2, добих z = %d за „lop_loc“\n" -#: mmo.c:1614 +#: mmo.c:1730 #, c-format -msgid "%s: invalid mmo file: expected z = 1 or z = 2, got z = %d for lop_loc\n" -msgstr "%s: неиÑправна „mmo“ датотека: очекивах z = 1 или z = 2, добих z = %d за „lop_loc“\n" +msgid "%pB: invalid mmo file: expected z = 1 or z = 2, got z = %d for lop_fixo\n" +msgstr "%pB: неиÑправна „mmo“ датотека: очекивах z = 1 или z = 2, добих z = %d за „lop_fixo“\n" -#: mmo.c:1660 +#: mmo.c:1771 #, c-format -msgid "%s: invalid mmo file: expected z = 1 or z = 2, got z = %d for lop_fixo\n" -msgstr "%s: неиÑправна „mmo“ датотека: очекивах z = 1 или z = 2, добих z = %d за „lop_fixo“\n" +msgid "%pB: invalid mmo file: expected y = 0, got y = %d for lop_fixrx\n" +msgstr "%pB: неиÑправна „mmo“ датотека: очекивах y = 0 добих y = %d за „lop_fixrx“\n" -#: mmo.c:1699 +#: mmo.c:1782 #, c-format -msgid "%s: invalid mmo file: expected y = 0, got y = %d for lop_fixrx\n" -msgstr "%s: неиÑправна „mmo“ датотека: очекивах y = 0 добих y = %d за „lop_fixrx“\n" +msgid "%pB: invalid mmo file: expected z = 16 or z = 24, got z = %d for lop_fixrx\n" +msgstr "%pB: неиÑправна „mmo“ датотека: очекивах z = 16 или z = 24, добих z = %d за „lop_fixrx“\n" -#: mmo.c:1708 +#: mmo.c:1807 #, c-format -msgid "%s: invalid mmo file: expected z = 16 or z = 24, got z = %d for lop_fixrx\n" -msgstr "%s: неиÑправна „mmo“ датотека: очекивах z = 16 или z = 24, добих z = %d за „lop_fixrx“\n" +msgid "%pB: invalid mmo file: leading byte of operand word must be 0 or 1, got %d for lop_fixrx\n" +msgstr "%pB: неиÑправна „mmo“ датотека: водећи бајт речи операнда мора бити 0 или 1, добих %d за „lop_fixrx“\n" -#: mmo.c:1731 +#: mmo.c:1832 #, c-format -msgid "%s: invalid mmo file: leading byte of operand word must be 0 or 1, got %d for lop_fixrx\n" -msgstr "%s: неиÑправна „mmo“ датотека: водећи бајт речи операнда мора бити 0 или 1, добих %d за „lop_fixrx“\n" +msgid "%pB: cannot allocate file name for file number %d, %d bytes\n" +msgstr "%pB: не могу да доделим назив датотеке за број датотеке %d, %d бајта\n" -#: mmo.c:1754 +#: mmo.c:1854 #, c-format -msgid "%s: cannot allocate file name for file number %d, %d bytes\n" -msgstr "%s: не могу да доделим назив датотеке за број датотеке %d, %d бајта\n" +msgid "%pB: invalid mmo file: file number %d `%s', was already entered as `%s'\n" +msgstr "%pB: неиÑправна „mmo“ датотека: број датотеке %d „%s“, је већ унешен као „%s“\n" -#: mmo.c:1774 +#: mmo.c:1868 #, c-format -msgid "%s: invalid mmo file: file number %d `%s', was already entered as `%s'\n" -msgstr "%s: неиÑправна „mmo“ датотека: број датотеке %d „%s“, је већ унешен као „%s“\n" +msgid "%pB: invalid mmo file: file name for number %d was not specified before use\n" +msgstr "%pB: неиÑправна „mmo“ датотека: назив датотеке за број %d није наведен пре употребе\n" -#: mmo.c:1787 +#: mmo.c:1975 #, c-format -msgid "%s: invalid mmo file: file name for number %d was not specified before use\n" -msgstr "%s: неиÑправна „mmo“ датотека: назив датотеке за број %d није наведен пре употребе\n" +msgid "%pB: invalid mmo file: fields y and z of lop_stab non-zero, y: %d, z: %d\n" +msgstr "%pB: неиÑправна „mmo“ датотека: поље y и z „lop_stab“-а није нула, y: %d, z: %d\n" -#: mmo.c:1893 +#: mmo.c:2012 #, c-format -msgid "%s: invalid mmo file: fields y and z of lop_stab non-zero, y: %d, z: %d\n" -msgstr "%s: неиÑправна „mmo“ датотека: поље y и z „lop_stab“-а није нула, y: %d, z: %d\n" +msgid "%pB: invalid mmo file: lop_end not last item in file\n" +msgstr "%pB: неиÑправна „mmo“ датотека: „lop_end“ није поÑледња Ñтавка у датотеци\n" -#: mmo.c:1929 +#: mmo.c:2026 #, c-format -msgid "%s: invalid mmo file: lop_end not last item in file\n" -msgstr "%s: неиÑправна „mmo“ датотека: „lop_end“ није поÑледња Ñтавка у датотеци\n" +msgid "%pB: invalid mmo file: YZ of lop_end (%ld) not equal to the number of tetras to the preceding lop_stab (%ld)\n" +msgstr "%pB: неиÑправна „mmo“ датотека: YZ „lop_end“-а (%ld) није једнако Ñа бројем тетраÑа до претходног „lop_stab“-а (%ld)\n" -#: mmo.c:1942 +#: mmo.c:2735 #, c-format -msgid "%s: invalid mmo file: YZ of lop_end (%ld) not equal to the number of tetras to the preceding lop_stab (%ld)\n" -msgstr "%s: неиÑправна „mmo“ датотека: YZ „lop_end“-а (%ld) није једнако Ñа бројем тетраÑа до претходног „lop_stab“-а (%ld)\n" +msgid "%pB: invalid symbol table: duplicate symbol `%s'\n" +msgstr "%pB: неиÑправна табела Ñимбола: удвоÑтручени Ñимбол „%s“\n" -#: mmo.c:2652 +#: mmo.c:2978 #, c-format -msgid "%s: invalid symbol table: duplicate symbol `%s'\n" -msgstr "%s: неиÑправна табела Ñимбола: удвоÑтручени Ñимбол „%s“\n" +msgid "%pB: bad symbol definition: `Main' set to %s rather than the start address %s\n" +msgstr "%pB: лоша дефиниција Ñимбола: „Main“ је поÑтављено на „%s“ умеÑто почетне адреÑе „%s“\n" -#: mmo.c:2892 +#: mmo.c:3077 #, c-format -msgid "%s: Bad symbol definition: `Main' set to %s rather than the start address %s\n" -msgstr "%s: Лоша дефиниција Ñимбола: „Main“ је поÑтављено на „%s“ умеÑто почетне адреÑе „%s“\n" +msgid "%pB: warning: symbol table too large for mmo, larger than 65535 32-bit words: %d. Only `Main' will be emitted.\n" +msgstr "%pB: упозорење: табела Ñимбола је превише велика за „mmo“, већа од 65535 32-битних речи: %d. Само „Main“ биће дато.\n" -#: mmo.c:2984 +#: mmo.c:3123 #, c-format -msgid "%s: warning: symbol table too large for mmo, larger than 65535 32-bit words: %d. Only `Main' will be emitted.\n" -msgstr "%s: упозорење: табела Ñимбола је превише велика за „mmo“, већа од 65535 32-битних речи: %d. Само „Main“ биће дато.\n" +msgid "%pB: internal error, symbol table changed size from %d to %d words\n" +msgstr "%pB: унутрашња грешка, табела Ñимбола је изменила величину из %d у %d речи\n" -#: mmo.c:3029 +#: mmo.c:3176 #, c-format -msgid "%s: internal error, symbol table changed size from %d to %d words\n" -msgstr "%s: унутрашња грешка, табела Ñимбола је изменила величину из %d у %d речи\n" +msgid "%pB: internal error, internal register section %pA had contents\n" +msgstr "%pB: унутрашња грешка, унутрашњи одељак региÑтра „%pA“ има Ñадржај\n" -#: mmo.c:3081 +#: mmo.c:3227 #, c-format -msgid "%s: internal error, internal register section %s had contents\n" -msgstr "%s: унутрашња грешка, унутрашњи одељак региÑтра „%s“ има Ñадржај\n" +msgid "%pB: no initialized registers; section length 0\n" +msgstr "%pB: нема покренутих региÑтара; дужина одељка 0\n" -#: mmo.c:3132 +#: mmo.c:3234 #, c-format -msgid "%s: no initialized registers; section length 0\n" -msgstr "%s: нема покренутих региÑтара; дужина одељка 0\n" +msgid "%pB: too many initialized registers; section length %" +msgstr "%pB: превише покренутих региÑтара; дужина одељка %" -#: mmo.c:3138 +#: mmo.c:3239 #, c-format -msgid "%s: too many initialized registers; section length %ld\n" -msgstr "%s: превише покренутих региÑтара; дужина одељка %ld\n" +msgid "%pB: invalid start address for initialized registers of length %: %#" +msgstr "%pB: неиÑправна почетна адреÑа за покренуте региÑтре дужине %: %#" -#: mmo.c:3143 +#: osf-core.c:127 #, c-format -msgid "%s: invalid start address for initialized registers of length %ld: 0x%lx%08lx\n" -msgstr "%s: неиÑправна почетна адреÑа за покренуте региÑтре дужине %ld: 0x%lx%08lx\n" +msgid "unhandled OSF/1 core file section type %d" +msgstr "не могу да радим Ñа врÑтом одељка %d датотеке OSF/1 језгра" -#: oasys.c:881 +#: pdp11.c:1588 #, c-format -msgid "%s: can not represent section `%s' in oasys" -msgstr "%s: не могу да предÑтавим одељак „%s“ у „oasys“" +msgid "%pB: symbol indicates overlay (not supported)" +msgstr "%pB: Ñимбол означава прекорачење (није подржано)" -#: osf-core.c:128 +#: pef.c:530 #, c-format -msgid "Unhandled OSF/1 core file section type %d\n" -msgstr "Ðе могу да радим Ñа врÑтом одељка %d датотеке OSF/1 језгра\n" +msgid "bfd_pef_scan: unknown architecture 0x%lx" +msgstr "bfd_pef_scan: непозната архитектура 0x%lx" -#: pe-mips.c:607 -msgid "%B: `ld -r' not supported with PE MIPS objects\n" -msgstr "%B: „ld -r“ није подржан Ñа објектима „PE MIPS“\n" +#: pei-x86_64.c:177 pei-x86_64.c:191 pei-x86_64.c:220 pei-x86_64.c:243 +#: pei-x86_64.c:253 pei-x86_64.c:278 pei-x86_64.c:290 pei-x86_64.c:304 +#: pei-x86_64.c:322 pei-x86_64.c:334 pei-x86_64.c:346 +#, c-format +msgid "warning: corrupt unwind data\n" +msgstr "упозорење: оштећени изложени подаци\n" -#. OK, at this point the following variables are set up: -#. src = VMA of the memory we're fixing up -#. mem = pointer to memory we're fixing up -#. val = VMA of what we need to refer to. -#: pe-mips.c:719 -msgid "%B: unimplemented %s\n" -msgstr "%B: није примењено „%s“\n" +#. PR 17512: file: 2245-7442-0.004. +#: pei-x86_64.c:367 +#, c-format +msgid "Unknown: %x" +msgstr "Ðепознато: %x" -#: pe-mips.c:745 -msgid "%B: jump too far away\n" -msgstr "%B: Ñкок је превише далеко\n" +#: pei-x86_64.c:418 pei-x86_64.c:428 pei-x86_64.c:437 +#, c-format +msgid "warning: xdata section corrupt\n" +msgstr "упозорење: оштећен одељак Ñ…-података\n" -#: pe-mips.c:771 -msgid "%B: bad pair/reflo after refhi\n" -msgstr "%B: лоше „pair/reflo“ након „refhi“\n" +#: pei-x86_64.c:492 +#, c-format +msgid "Too many unwind codes (%ld)\n" +msgstr "Превише изложених кодова (%ld)\n" -#: pef.c:522 +#: pei-x86_64.c:582 #, c-format -msgid "bfd_pef_scan: unknown architecture 0x%lx" -msgstr "bfd_pef_scan: непозната архитектура 0x%lx" +msgid "Warning: %s section size (%ld) is not a multiple of %d\n" +msgstr "упозорење: величина одељка „%s“ (%ld) није производ од %d\n" -#: pei-x86_64.c:469 +#: pei-x86_64.c:589 #, c-format -msgid "warning: .pdata section size (%ld) is not a multiple of %d\n" -msgstr "упозорење: величина одељка „.pdata“ (%ld) није производ од %d\n" +msgid "Warning: %s section size is zero\n" +msgstr "упозорење: одељак „%s“ је нулте величине\n" -#: pei-x86_64.c:474 peigen.c:1626 peigen.c:1809 pepigen.c:1626 pepigen.c:1809 -#: pex64igen.c:1626 pex64igen.c:1809 +#: pei-x86_64.c:604 +#, c-format +msgid "Warning: %s section size (%ld) is smaller than virtual size (%ld)\n" +msgstr "упозорење: величина одељка „%s“ (%ld) је мања од виртуелне величине (%ld)\n" + +#: pei-x86_64.c:613 #, c-format msgid "" "\n" -"The Function Table (interpreted .pdata section contents)\n" +"The Function Table (interpreted %s section contents)\n" msgstr "" "\n" -"Табела функција (протумачени Ñадржај одељка „.pdata“)\n" +"Табела функција (протумачени Ñадржај одељка „%s“)\n" -#: pei-x86_64.c:476 +#: pei-x86_64.c:616 #, c-format msgid "vma:\t\t\tBeginAddress\t EndAddress\t UnwindData\n" msgstr "vma:\t\t\tÐдреÑа почетка\t ÐдреÑа краја\t Изложени подаци\n" -#. XXX code yet to be written. -#: peicode.h:758 -msgid "%B: Unhandled import type; %x" -msgstr "%B: Ðеобрадива врÑта увоза; %x" - -#: peicode.h:763 -msgid "%B: Unrecognised import type; %x" -msgstr "%B: Ðепозната врÑта увоза; %x" - -#: peicode.h:777 -msgid "%B: Unrecognised import name type; %x" -msgstr "%B: Ðепознат назив врÑте увоза; %x" - -#: peicode.h:1173 -msgid "%B: Unrecognised machine type (0x%x) in Import Library Format archive" -msgstr "%B: Ðепозната врÑта машине (0x%x) у архиви запиÑа библиотеке увоза" - -#: peicode.h:1185 -msgid "%B: Recognised but unhandled machine type (0x%x) in Import Library Format archive" -msgstr "%B: Позната али необрадива врÑта машине (0x%x) у архиви запиÑа библиотеке увоза" - -#: peicode.h:1203 -msgid "%B: size field is zero in Import Library Format header" -msgstr "%B: оље величине је нула у заглављу запиÑа библиотеке увоза" - -#: peicode.h:1234 -msgid "%B: string not null terminated in ILF object file." -msgstr "%B: ниÑка Ñе не завршава нулом у датотеци ИЛФ објекта." +#: pei-x86_64.c:745 +#, c-format +msgid "" +"\n" +"Dump of %s\n" +msgstr "" +"\n" +"Излаз за „%s“\n" + +#. XXX code yet to be written. +#: peicode.h:796 +#, c-format +msgid "%pB: unhandled import type; %x" +msgstr "%pB: необрадива врÑта увоза; %x" + +#: peicode.h:802 +#, c-format +msgid "%pB: unrecognized import type; %x" +msgstr "%pB: непозната врÑта увоза; %x" + +#: peicode.h:817 +#, c-format +msgid "%pB: unrecognized import name type; %x" +msgstr "%pB: непознат назив врÑте увоза; %x" + +#: peicode.h:1225 +#, c-format +msgid "%pB: unrecognised machine type (0x%x) in Import Library Format archive" +msgstr "%pB: непозната врÑта машине (0x%x) у архиви запиÑа библиотеке увоза" + +#: peicode.h:1238 +#, c-format +msgid "%pB: recognised but unhandled machine type (0x%x) in Import Library Format archive" +msgstr "%pB: позната али необрадива врÑта машине (0x%x) у архиви запиÑа библиотеке увоза" + +#: peicode.h:1256 +#, c-format +msgid "%pB: size field is zero in Import Library Format header" +msgstr "%pB: поље величине је нула у заглављу запиÑа библиотеке увоза" + +#: peicode.h:1282 +#, c-format +msgid "%pB: string not null terminated in ILF object file" +msgstr "%pB: ниÑка Ñе не завршава нулом у датотеци „ILF“ објекта" + +#: peicode.h:1338 +#, c-format +msgid "%pB: error: debug data ends beyond end of debug directory" +msgstr "%pB: грешка: подаци прочишћавања Ñе завршавају изван краја директоријума прочишћавања" -#: ppcboot.c:391 +#: ppcboot.c:392 #, c-format msgid "" "\n" @@ -4104,64 +5926,86 @@ "\n" "заглавље „ppcboot“:\n" -#: ppcboot.c:392 +#: ppcboot.c:393 #, c-format msgid "Entry offset = 0x%.8lx (%ld)\n" -msgstr "Померај уноÑа = 0x%.8lx (%ld)\n" +msgstr "Померај уноÑа = 0x%.8lx (%ld)\n" -#: ppcboot.c:394 +#: ppcboot.c:395 #, c-format msgid "Length = 0x%.8lx (%ld)\n" -msgstr "Дужина = 0x%.8lx (%ld)\n" +msgstr "Дужина = 0x%.8lx (%ld)\n" -#: ppcboot.c:398 +#: ppcboot.c:399 #, c-format msgid "Flag field = 0x%.2x\n" -msgstr "Поље заÑтавице = 0x%.2x\n" +msgstr "Поље заÑтавице = 0x%.2x\n" -#: ppcboot.c:404 +#: ppcboot.c:405 #, c-format msgid "Partition name = \"%s\"\n" -msgstr "Ðазив партиције = „%s“\n" +msgstr "Ðазив партиције = „%s“\n" -#: ppcboot.c:423 +#: ppcboot.c:425 #, c-format msgid "" "\n" "Partition[%d] start = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }\n" msgstr "" "\n" -"Почетак партиције[%d] = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }\n" +"Почетак партиције[%d] = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }\n" -#: ppcboot.c:429 +#: ppcboot.c:432 #, c-format msgid "Partition[%d] end = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }\n" msgstr "Крај партиције[%d] = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }\n" -#: ppcboot.c:435 +#: ppcboot.c:439 #, c-format msgid "Partition[%d] sector = 0x%.8lx (%ld)\n" msgstr "Одељак партиције[%d] = 0x%.8lx (%ld)\n" -#: ppcboot.c:437 +#: ppcboot.c:443 #, c-format msgid "Partition[%d] length = 0x%.8lx (%ld)\n" msgstr "Дужина партиције[%d] = 0x%.8lx (%ld)\n" -#: reloc.c:7371 -msgid "INPUT_SECTION_FLAGS are not supported.\n" -msgstr "„INPUT_SECTION_FLAGS“ није подржано.\n" +#: reloc.c:8291 +msgid "INPUT_SECTION_FLAGS are not supported" +msgstr "„INPUT_SECTION_FLAGS“ није подржано" + +#: reloc.c:8392 +#, c-format +msgid "%X%P: %pB(%pA): error: relocation for offset %V has no value\n" +msgstr "%X%P: %pB(%pA): грешка: премештање за померај „%V“ нема вредноÑÑ‚\n" + +#: reloc.c:8480 +#, c-format +msgid "%X%P: %pB(%pA): relocation \"%pR\" is not supported\n" +msgstr "%X%P: %pB(%pA): премештање „%pR“ није подржано\n" + +#: reloc.c:8489 +#, c-format +msgid "%X%P: %pB(%pA): relocation \"%pR\" returns an unrecognized value %x\n" +msgstr "%X%P: %pB(%pA): премештање „%pR“ је вратило непознату вредноÑÑ‚ „%x“\n" + +#: reloc.c:8551 +#, c-format +msgid "%pB: unrecognized relocation type %#x in section `%pA'" +msgstr "%pB: непозната врÑта премештања %#x у одељку „%pA“" -#: reloc.c:7526 -msgid "%X%P: %B(%A): relocation \"%R\" goes out of range\n" -msgstr "%X%P: %B(%A): премештање „%R“ иде ван опÑега\n" +#. PR 21803: Suggest the most likely cause of this error. +#: reloc.c:8555 +#, c-format +msgid "is this version of the linker - %s - out of date ?" +msgstr "да није ово издање повезивача – %s – мало заÑтарело ?" -#: rs6000-core.c:448 +#: rs6000-core.c:471 #, c-format -msgid "%s: warning core file truncated" -msgstr "%s: упозорење Ñкраћене датотеке језгра" +msgid "%pB: warning core file truncated" +msgstr "%pB: упозорење Ñкраћене датотеке језгра" -#: som.c:5471 +#: som.c:5497 #, c-format msgid "" "\n" @@ -4170,52 +6014,106 @@ "\n" "Помоћно заглавље извршне\n" -#: som.c:5776 +#: som.c:5806 msgid "som_sizeof_headers unimplemented" msgstr "„som_sizeof_headers“ није примењено" -#: srec.c:261 -msgid "%B:%d: Unexpected character `%s' in S-record file\n" -msgstr "%B:%d: Ðеочекивани знак „%s“ у датотеци С-запиÑа\n" - -#: srec.c:567 srec.c:600 -msgid "%B:%d: Bad checksum in S-record file\n" -msgstr "%B:%d: Лоша Ñума провере у датотеци С-запиÑа\n" +#: srec.c:260 +#, c-format +msgid "%pB:%d: unexpected character `%s' in S-record file" +msgstr "%pB:%d: неочекивани знак „%s“ у датотеци S-запиÑа" + +#: srec.c:488 +#, c-format +msgid "%pB:%d: byte count %d too small" +msgstr "%pB:%d: број бајта „%d“ је премали" + +#: srec.c:580 srec.c:614 +#, c-format +msgid "%pB:%d: bad checksum in S-record file" +msgstr "%pB:%d: лоша Ñума провере у датотеци S-запиÑа" #: stabs.c:279 -msgid "%B(%A+0x%lx): Stabs entry has invalid string index." -msgstr "%B(%A+0x%lx): Ð£Ð½Ð¾Ñ Ð¾ÐºÑ€ÑšÐ°ÐºÐ° има неиÑправан Ð¸Ð½Ð´ÐµÐºÑ Ð½Ð¸Ñке." +#, c-format +msgid "%pB(%pA+%#lx): stabs entry has invalid string index" +msgstr "%pB(%pA+%#lx): ÑƒÐ½Ð¾Ñ Ð¾ÐºÑ€ÑšÐ°ÐºÐ° има неиÑправан Ð¸Ð½Ð´ÐµÐºÑ Ð½Ð¸Ñке" + +#: syms.c:1085 +msgid "unsupported .stab relocation" +msgstr "неподржано „.stab“ премештање" + +#: vms-alpha.c:480 +msgid "corrupt EIHD record - size is too small" +msgstr "оштећен „EIHD“ Ñнимак – величина је премала" + +#: vms-alpha.c:666 +#, c-format +msgid "unable to read EIHS record at offset %#x" +msgstr "не могу да читам „EIHS“ Ñнимак на померају „%#x“" -#: syms.c:1079 -msgid "Unsupported .stab relocation" -msgstr "Премештање „.stab“ није подржано" +#: vms-alpha.c:1158 +msgid "record is too small for symbol name length" +msgstr "Ñнимак је премали за дужину назива Ñимбола" + +#: vms-alpha.c:1191 +#, c-format +msgid "corrupt EGSD record: its size (%#x) is too small" +msgstr "оштећен „EGSD“ Ñнимак: његова величина (%#x) је премала" + +#: vms-alpha.c:1215 +#, c-format +msgid "corrupt EGSD record type %d: size (%#x) is larger than remaining space (%#x)" +msgstr "оштећена врÑта „EGSD“ Ñнимка %d: величина (%#x) је већа од преоÑталог проÑтора (%#x)" + +#: vms-alpha.c:1225 +#, c-format +msgid "corrupt EGSD record type %d: size (%#x) is too small" +msgstr "оштећена врÑта „EGSD“ Ñнимка %d: величина (%#x) је премала" + +#: vms-alpha.c:1367 +#, c-format +msgid "corrupt EGSD record: its psindx field is too big (%#lx)" +msgstr "оштећени „EGSD“ Ñнимак: његово „psindx“ поље је превелико (%#lx)" -#: vms-alpha.c:1294 +#: vms-alpha.c:1443 #, c-format -msgid "Unknown EGSD subtype %d" -msgstr "Ðепозната EGSD подврÑта %d" +msgid "unknown EGSD subtype %d" +msgstr "непозната „EGSD“ подврÑта %d" -#: vms-alpha.c:1325 +#: vms-alpha.c:1476 #, c-format -msgid "Stack overflow (%d) in _bfd_vms_push" -msgstr "Прекорачење Ñпремника (%d) у „_bfd_vms_push“-у" +msgid "stack overflow (%d) in _bfd_vms_push" +msgstr "прекорачење Ñпремника (%d) у „_bfd_vms_push“-у" -#: vms-alpha.c:1338 -msgid "Stack underflow in _bfd_vms_pop" -msgstr "Прекорачење Ñпремника у „_bfd_vms_pop“-у" +#: vms-alpha.c:1490 +msgid "stack underflow in _bfd_vms_pop" +msgstr "прекорачење Ñпремника у „_bfd_vms_pop“-у" + +#: vms-alpha.c:1564 +#, c-format +msgid "dst_define_location %u too large" +msgstr "„dst_define_location %u“ је превелико" #. These names have not yet been added to this switch statement. -#: vms-alpha.c:1575 +#: vms-alpha.c:1765 #, c-format msgid "unknown ETIR command %d" msgstr "непозната „ETIR“ наредба %d" -#: vms-alpha.c:1762 +#: vms-alpha.c:1796 +msgid "corrupt vms value" +msgstr "оштећена „vms“ вредноÑÑ‚" + +#: vms-alpha.c:1927 +msgid "corrupt ETIR record encountered" +msgstr "наиђох на оштећени „ETIR“ Ñнимак" + +#: vms-alpha.c:1989 #, c-format msgid "bad section index in %s" msgstr "лош Ð¸Ð½Ð´ÐµÐºÑ Ð¾Ð´ÐµÑ™ÐºÐ° у „%s“" -#: vms-alpha.c:1775 +#: vms-alpha.c:2003 #, c-format msgid "unsupported STA cmd %s" msgstr "неподржана „STA“ наредба „%s“" @@ -4225,1388 +6123,1480 @@ #. Rotate. #. Redefine symbol to current location. #. Define a literal. -#: vms-alpha.c:1951 vms-alpha.c:1982 vms-alpha.c:2229 +#: vms-alpha.c:2211 vms-alpha.c:2242 vms-alpha.c:2337 vms-alpha.c:2557 #, c-format msgid "%s: not supported" msgstr "%s: није подржано" -#: vms-alpha.c:1957 +#: vms-alpha.c:2217 #, c-format msgid "%s: not implemented" msgstr "%s: није примењено" -#: vms-alpha.c:2213 +#: vms-alpha.c:2382 vms-alpha.c:2397 +#, c-format +msgid "invalid %s" +msgstr "неиÑправно „%s“" + +#. Divide by zero is supposed to give a result of zero, +#. and a non-fatal warning message. +#: vms-alpha.c:2457 +#, c-format +msgid "%s divide by zero" +msgstr "%s дели нулом" + +#: vms-alpha.c:2523 #, c-format msgid "invalid use of %s with contexts" msgstr "неиÑправна употреба „%s“ Ñа контекÑтом" -#: vms-alpha.c:2247 +#: vms-alpha.c:2581 #, c-format msgid "reserved cmd %d" msgstr "резервиÑана наредба „%d“" -#: vms-alpha.c:2332 -msgid "Object module NOT error-free !\n" -msgstr "Модул објекта ÐИЈЕ без грешака !\n" +#: vms-alpha.c:2665 +msgid "corrupt EEOM record - size is too small" +msgstr "оштећен „EEOM“ Ñнимак – величина је премала" + +#: vms-alpha.c:2674 +msgid "object module not error-free !" +msgstr "модул објекта није без грешака !" -#: vms-alpha.c:3657 +#: vms-alpha.c:4001 #, c-format -msgid "SEC_RELOC with no relocs in section %s" -msgstr "„SEC_RELOC“ нема премештања у одељку „%s“" +msgid "SEC_RELOC with no relocs in section %pA" +msgstr "„SEC_RELOC“ је без премештања у одељку „%pA“" -#: vms-alpha.c:3709 vms-alpha.c:3922 +#: vms-alpha.c:4053 vms-alpha.c:4268 #, c-format -msgid "Size error in section %s" -msgstr "Грешка величине у одељку „%s“" +msgid "size error in section %pA" +msgstr "грешка величине у одељку „%pA“" -#: vms-alpha.c:3868 -msgid "Spurious ALPHA_R_BSR reloc" -msgstr "Привидно „ALPHA_R_BSR“ премештање" +#: vms-alpha.c:4213 +msgid "spurious ALPHA_R_BSR reloc" +msgstr "привидно „ALPHA_R_BSR“ премештање" -#: vms-alpha.c:3909 +#: vms-alpha.c:4254 #, c-format -msgid "Unhandled relocation %s" -msgstr "Ðеобрадиво премештање „%s“" +msgid "unhandled relocation %s" +msgstr "необрадиво премештање „%s“" -#: vms-alpha.c:4199 +#: vms-alpha.c:4551 #, c-format msgid "unknown source command %d" msgstr "непозната наредба извора „%d“" -#: vms-alpha.c:4260 -msgid "DST__K_SET_LINUM_INCR not implemented" -msgstr "„DST__K_SET_LINUM_INCR“ није примењено" - -#: vms-alpha.c:4266 -msgid "DST__K_SET_LINUM_INCR_W not implemented" -msgstr "„DST__K_SET_LINUM_INCR_W“ није примењено" - -#: vms-alpha.c:4272 -msgid "DST__K_RESET_LINUM_INCR not implemented" -msgstr "„DST__K_RESET_LINUM_INCR“ није примењено" - -#: vms-alpha.c:4278 -msgid "DST__K_BEG_STMT_MODE not implemented" -msgstr "„DST__K_BEG_STMT_MODE“ није примењено" - -#: vms-alpha.c:4284 -msgid "DST__K_END_STMT_MODE not implemented" -msgstr "„DST__K_END_STMT_MODE“ није примењено" - -#: vms-alpha.c:4311 -msgid "DST__K_SET_PC not implemented" -msgstr "„DST__K_SET_PC“ није примењено" - -#: vms-alpha.c:4317 -msgid "DST__K_SET_PC_W not implemented" -msgstr "„DST__K_SET_PC_W“ није примењено" - -#: vms-alpha.c:4323 -msgid "DST__K_SET_PC_L not implemented" -msgstr "„DST__K_SET_PC_L“ није примењено" - -#: vms-alpha.c:4329 -msgid "DST__K_SET_STMTNUM not implemented" -msgstr "„DST__K_SET_STMTNUM“ није примењено" +#: vms-alpha.c:4612 vms-alpha.c:4618 vms-alpha.c:4624 vms-alpha.c:4630 +#: vms-alpha.c:4636 vms-alpha.c:4663 vms-alpha.c:4669 vms-alpha.c:4675 +#: vms-alpha.c:4681 +#, c-format +msgid "%s not implemented" +msgstr "„%s“ није примењено" -#: vms-alpha.c:4372 +#: vms-alpha.c:4724 #, c-format msgid "unknown line command %d" msgstr "непозната редна наредба „%d“" -#: vms-alpha.c:4846 vms-alpha.c:4863 vms-alpha.c:4877 vms-alpha.c:4892 -#: vms-alpha.c:4904 vms-alpha.c:4915 vms-alpha.c:4927 +#: vms-alpha.c:5188 vms-alpha.c:5206 vms-alpha.c:5221 vms-alpha.c:5237 +#: vms-alpha.c:5250 vms-alpha.c:5262 vms-alpha.c:5275 #, c-format -msgid "Unknown reloc %s + %s" -msgstr "Ðепознато премештање „%s + %s“" +msgid "unknown reloc %s + %s" +msgstr "непознато премештање „%s + %s“" -#: vms-alpha.c:4982 +#: vms-alpha.c:5330 #, c-format -msgid "Unknown reloc %s" -msgstr "Ðепознато премештање „%s“" +msgid "unknown reloc %s" +msgstr "непознато премештање „%s“" + +#: vms-alpha.c:5344 +msgid "invalid section index in ETIR" +msgstr "неиÑправан Ð¸Ð½Ð´ÐµÐºÑ Ð¾Ð´ÐµÑ™ÐºÐ° у „ETIR“-у" -#: vms-alpha.c:4995 -msgid "Invalid section index in ETIR" -msgstr "ÐеиÑправан Ð¸Ð½Ð´ÐµÐºÑ Ð¾Ð´ÐµÑ™ÐºÐ° у „ETIR“-у" +#: vms-alpha.c:5353 +msgid "relocation for non-REL psect" +msgstr "премештање за не-„REL“ п-одељак" -#: vms-alpha.c:5002 -msgid "Relocation for non-REL psect" -msgstr "Премештање за не-РЕЛ п-одељак" +#: vms-alpha.c:5402 +#, c-format +msgid "unknown symbol in command %s" +msgstr "непознати Ñимбол у наредби „%s“" -#: vms-alpha.c:5049 +#: vms-alpha.c:5816 #, c-format -msgid "Unknown symbol in command %s" -msgstr "Ðепознати Ñимбол у наредби „%s“" +msgid "reloc (%d) is *UNKNOWN*" +msgstr "премештање (%d) је *ÐЕПОЗÐÐТО*" -#: vms-alpha.c:5564 +#: vms-alpha.c:5932 #, c-format msgid " EMH %u (len=%u): " msgstr " EMH %u (дужина=%u): " -#: vms-alpha.c:5573 +#: vms-alpha.c:5937 +#, c-format +msgid " Error: The length is less than the length of an EMH record\n" +msgstr " Грешка: дужина је мања од дужине „EMH“ Ñнимка\n" + +#: vms-alpha.c:5954 +#, c-format +msgid " Error: The record length is less than the size of an EMH_MHD record\n" +msgstr " Грешка: дужина Ñнимка је мања од величине „EMH_MHD“ Ñнимка\n" + +#: vms-alpha.c:5957 #, c-format msgid "Module header\n" msgstr "Заглавље модула\n" -#: vms-alpha.c:5574 +#: vms-alpha.c:5958 #, c-format msgid " structure level: %u\n" msgstr " ниво Ñтруктуре : %u\n" -#: vms-alpha.c:5575 +#: vms-alpha.c:5959 #, c-format msgid " max record size: %u\n" msgstr " најв. величина бележења: %u\n" -#: vms-alpha.c:5578 +#: vms-alpha.c:5965 +#, c-format +msgid " Error: The module name is missing\n" +msgstr " Грешка: Ðазив модула недоÑтаје\n" + +#: vms-alpha.c:5971 +#, c-format +msgid " Error: The module name is too long\n" +msgstr " Грешка: Ðазив модула је предуг\n" + +#: vms-alpha.c:5974 #, c-format msgid " module name : %.*s\n" msgstr " назив модула : %.*s\n" -#: vms-alpha.c:5580 +#: vms-alpha.c:5978 +#, c-format +msgid " Error: The module version is missing\n" +msgstr " Грешка: Издање модула недоÑтаје\n" + +#: vms-alpha.c:5984 +#, c-format +msgid " Error: The module version is too long\n" +msgstr " Грешка: Издање модула је предуго\n" + +#: vms-alpha.c:5987 #, c-format msgid " module version : %.*s\n" msgstr " издање модула : %.*s\n" -#: vms-alpha.c:5582 +#: vms-alpha.c:5990 +#, c-format +msgid " Error: The compile date is truncated\n" +msgstr " Грешка: Датум превођења је Ñкраћен\n" + +#: vms-alpha.c:5992 #, c-format msgid " compile date : %.17s\n" msgstr " датум превођења : %.17s\n" -#: vms-alpha.c:5587 +#: vms-alpha.c:5997 #, c-format msgid "Language Processor Name\n" msgstr "Ðазив језика процеÑора\n" -#: vms-alpha.c:5588 +#: vms-alpha.c:5998 #, c-format msgid " language name: %.*s\n" msgstr " назив језика: %.*s\n" -#: vms-alpha.c:5595 +#: vms-alpha.c:6002 #, c-format msgid "Source Files Header\n" msgstr "Заглавље датотека извора\n" -#: vms-alpha.c:5596 +#: vms-alpha.c:6003 #, c-format msgid " file: %.*s\n" msgstr " датотека: %.*s\n" -#: vms-alpha.c:5603 +#: vms-alpha.c:6007 #, c-format msgid "Title Text Header\n" msgstr "Заглавље текÑта наÑлова\n" -#: vms-alpha.c:5604 +#: vms-alpha.c:6008 #, c-format msgid " title: %.*s\n" msgstr " наÑлов: %.*s\n" -#: vms-alpha.c:5611 +#: vms-alpha.c:6012 #, c-format msgid "Copyright Header\n" msgstr "Заглавље ауторÑких права\n" -#: vms-alpha.c:5612 +#: vms-alpha.c:6013 #, c-format msgid " copyright: %.*s\n" msgstr " ауторÑка права: %.*s\n" -#: vms-alpha.c:5618 +#: vms-alpha.c:6017 #, c-format msgid "unhandled emh subtype %u\n" msgstr "необрадива emh подврÑта „%u“\n" -#: vms-alpha.c:5628 +#: vms-alpha.c:6027 #, c-format msgid " EEOM (len=%u):\n" msgstr " EEOM (дужина=%u):\n" -#: vms-alpha.c:5629 +#: vms-alpha.c:6032 +#, c-format +msgid " Error: The length is less than the length of an EEOM record\n" +msgstr " Грешка: дужина је мања од дужине „EEOM“ Ñнимка\n" + +#: vms-alpha.c:6036 #, c-format msgid " number of cond linkage pairs: %u\n" msgstr " број „cond“ парова повезивања: %u\n" -#: vms-alpha.c:5631 +#: vms-alpha.c:6038 #, c-format msgid " completion code: %u\n" msgstr " довршавање кода: %u\n" -#: vms-alpha.c:5635 +#: vms-alpha.c:6042 #, c-format msgid " transfer addr flags: 0x%02x\n" msgstr " заÑтавице адреÑе преноÑа: 0x%02x\n" -#: vms-alpha.c:5636 +#: vms-alpha.c:6043 #, c-format msgid " transfer addr psect: %u\n" msgstr " п-одељак адреÑе преноÑа : %u\n" -#: vms-alpha.c:5638 +#: vms-alpha.c:6045 #, c-format msgid " transfer address : 0x%08x\n" msgstr " адреÑа преноÑа : 0x%08x\n" -#: vms-alpha.c:5647 +#: vms-alpha.c:6054 msgid " WEAK" msgstr " WEAK" -#: vms-alpha.c:5649 +#: vms-alpha.c:6056 msgid " DEF" msgstr " DEF" -#: vms-alpha.c:5651 +#: vms-alpha.c:6058 msgid " UNI" msgstr " UNI" -#: vms-alpha.c:5653 vms-alpha.c:5674 +#: vms-alpha.c:6060 vms-alpha.c:6081 msgid " REL" msgstr " REL" -#: vms-alpha.c:5655 +#: vms-alpha.c:6062 msgid " COMM" msgstr " COMM" -#: vms-alpha.c:5657 +#: vms-alpha.c:6064 msgid " VECEP" msgstr " VECEP" -#: vms-alpha.c:5659 +#: vms-alpha.c:6066 msgid " NORM" msgstr " NORM" -#: vms-alpha.c:5661 +#: vms-alpha.c:6068 msgid " QVAL" msgstr " QVAL" -#: vms-alpha.c:5668 +#: vms-alpha.c:6075 msgid " PIC" msgstr " PIC" -#: vms-alpha.c:5670 +#: vms-alpha.c:6077 msgid " LIB" msgstr " LIB" -#: vms-alpha.c:5672 +#: vms-alpha.c:6079 msgid " OVR" msgstr " OVR" -#: vms-alpha.c:5676 +#: vms-alpha.c:6083 msgid " GBL" msgstr " GBL" -#: vms-alpha.c:5678 +#: vms-alpha.c:6085 msgid " SHR" msgstr " SHR" -#: vms-alpha.c:5680 +#: vms-alpha.c:6087 msgid " EXE" msgstr " EXE" -#: vms-alpha.c:5682 +#: vms-alpha.c:6089 msgid " RD" msgstr " RD" -#: vms-alpha.c:5684 +#: vms-alpha.c:6091 msgid " WRT" msgstr " WRT" -#: vms-alpha.c:5686 +#: vms-alpha.c:6093 msgid " VEC" msgstr " VEC" -#: vms-alpha.c:5688 +#: vms-alpha.c:6095 msgid " NOMOD" msgstr " NOMOD" -#: vms-alpha.c:5690 +#: vms-alpha.c:6097 msgid " COM" msgstr " COM" -#: vms-alpha.c:5692 +#: vms-alpha.c:6099 msgid " 64B" msgstr " 64B" -#: vms-alpha.c:5701 +#: vms-alpha.c:6108 #, c-format msgid " EGSD (len=%u):\n" msgstr " EGSD (дужина=%u):\n" -#: vms-alpha.c:5713 +#: vms-alpha.c:6121 #, c-format msgid " EGSD entry %2u (type: %u, len: %u): " msgstr " „EGSD“ ÑƒÐ½Ð¾Ñ â€ž%2u“ (врÑтаype: %u, дужина: %u): " -#: vms-alpha.c:5725 +#: vms-alpha.c:6127 vms-alpha.c:6378 +#, c-format +msgid " Error: length larger than remaining space in record\n" +msgstr " Грешка: дужина је већа од преоÑталог проÑтора у Ñнимку\n" + +#: vms-alpha.c:6139 #, c-format msgid "PSC - Program section definition\n" msgstr "PSC — Дефиниција одељка програма\n" -#: vms-alpha.c:5726 vms-alpha.c:5743 +#: vms-alpha.c:6140 vms-alpha.c:6157 #, c-format msgid " alignment : 2**%u\n" msgstr " поравнање : 2**%u\n" -#: vms-alpha.c:5727 vms-alpha.c:5744 +#: vms-alpha.c:6141 vms-alpha.c:6158 #, c-format msgid " flags : 0x%04x" msgstr " заÑтавице : 0x%04x" -#: vms-alpha.c:5731 +#: vms-alpha.c:6145 #, c-format msgid " alloc (len): %u (0x%08x)\n" msgstr " додела (дужина): %u (0x%08x)\n" -#: vms-alpha.c:5732 vms-alpha.c:5789 vms-alpha.c:5838 +#: vms-alpha.c:6146 vms-alpha.c:6203 vms-alpha.c:6252 #, c-format msgid " name : %.*s\n" msgstr " назив : %.*s\n" -#: vms-alpha.c:5742 +#: vms-alpha.c:6156 #, c-format msgid "SPSC - Shared Image Program section def\n" msgstr "SPSC — Дефиниција одељка програма дељене Ñлике\n" -#: vms-alpha.c:5748 +#: vms-alpha.c:6162 #, c-format msgid " alloc (len) : %u (0x%08x)\n" msgstr " додела (дужина) : %u (0x%08x)\n" -#: vms-alpha.c:5749 +#: vms-alpha.c:6163 #, c-format msgid " image offset : 0x%08x\n" msgstr " померај Ñлике: 0x%08x\n" -#: vms-alpha.c:5751 +#: vms-alpha.c:6165 #, c-format msgid " symvec offset : 0x%08x\n" msgstr " померај Ñимвек-а : 0x%08x\n" -#: vms-alpha.c:5753 +#: vms-alpha.c:6167 #, c-format msgid " name : %.*s\n" msgstr " назив : %.*s\n" -#: vms-alpha.c:5766 +#: vms-alpha.c:6180 #, c-format msgid "SYM - Global symbol definition\n" msgstr "SYM — Дефиниција општег Ñимбола\n" -#: vms-alpha.c:5767 vms-alpha.c:5827 vms-alpha.c:5848 vms-alpha.c:5867 +#: vms-alpha.c:6181 vms-alpha.c:6241 vms-alpha.c:6262 vms-alpha.c:6281 #, c-format msgid " flags: 0x%04x" msgstr " заÑтавице : 0x%04x" -#: vms-alpha.c:5770 +#: vms-alpha.c:6184 #, c-format msgid " psect offset: 0x%08x\n" msgstr " померај п-одељка: 0x%08x\n" -#: vms-alpha.c:5774 +#: vms-alpha.c:6188 #, c-format msgid " code address: 0x%08x\n" msgstr " адреÑа кода: 0x%08x\n" -#: vms-alpha.c:5776 +#: vms-alpha.c:6190 #, c-format msgid " psect index for entry point : %u\n" msgstr " Ð¸Ð½Ð´ÐµÐºÑ Ð¿-одељка за тачку уноÑа: %u\n" -#: vms-alpha.c:5779 vms-alpha.c:5855 vms-alpha.c:5874 +#: vms-alpha.c:6193 vms-alpha.c:6269 vms-alpha.c:6288 #, c-format msgid " psect index : %u\n" msgstr " Ð¸Ð½Ð´ÐµÐºÑ Ð¿-одељка : %u\n" -#: vms-alpha.c:5781 vms-alpha.c:5857 vms-alpha.c:5876 +#: vms-alpha.c:6195 vms-alpha.c:6271 vms-alpha.c:6290 #, c-format msgid " name : %.*s\n" msgstr " назив : %.*s\n" -#: vms-alpha.c:5788 +#: vms-alpha.c:6202 #, c-format msgid "SYM - Global symbol reference\n" msgstr "SYM — Упута општег Ñимбола\n" -#: vms-alpha.c:5800 +#: vms-alpha.c:6214 #, c-format msgid "IDC - Ident Consistency check\n" msgstr "IDC — Провера доÑледноÑти увлачења\n" -#: vms-alpha.c:5801 +#: vms-alpha.c:6215 #, c-format msgid " flags : 0x%08x" msgstr " заÑтавице : 0x%08x" -#: vms-alpha.c:5805 +#: vms-alpha.c:6219 #, c-format msgid " id match : %x\n" msgstr " подударање ид-а : %x\n" -#: vms-alpha.c:5807 +#: vms-alpha.c:6221 #, c-format msgid " error severity: %x\n" msgstr " озбиљноÑÑ‚ грешке: %x\n" -#: vms-alpha.c:5810 +#: vms-alpha.c:6224 #, c-format msgid " entity name : %.*s\n" msgstr " назив ентитета : %.*s\n" -#: vms-alpha.c:5812 +#: vms-alpha.c:6226 #, c-format msgid " object name : %.*s\n" msgstr " назив објекта : %.*s\n" -#: vms-alpha.c:5815 +#: vms-alpha.c:6229 #, c-format msgid " binary ident : 0x%08x\n" msgstr " увлачење бинарног : 0x%08x\n" -#: vms-alpha.c:5818 +#: vms-alpha.c:6232 #, c-format msgid " ascii ident : %.*s\n" msgstr " аÑкри увлачење : %.*s\n" -#: vms-alpha.c:5826 +#: vms-alpha.c:6240 #, c-format msgid "SYMG - Universal symbol definition\n" msgstr "SYMG — Дефиниција универзалног Ñимбола\n" -#: vms-alpha.c:5830 +#: vms-alpha.c:6244 #, c-format msgid " symbol vector offset: 0x%08x\n" msgstr " померај вектора Ñимбола: 0x%08x\n" -#: vms-alpha.c:5832 +#: vms-alpha.c:6246 #, c-format msgid " entry point: 0x%08x\n" msgstr " тачка уноÑа: 0x%08x\n" -#: vms-alpha.c:5834 +#: vms-alpha.c:6248 #, c-format msgid " proc descr : 0x%08x\n" msgstr " опиÑник процеÑа : 0x%08x\n" -#: vms-alpha.c:5836 +#: vms-alpha.c:6250 #, c-format msgid " psect index: %u\n" msgstr " Ð¸Ð½Ð´ÐµÐºÑ Ð¿-одељка: %u\n" -#: vms-alpha.c:5847 +#: vms-alpha.c:6261 #, c-format msgid "SYMV - Vectored symbol definition\n" msgstr "SYMV — Дефиниција векториÑаног Ñимбола\n" -#: vms-alpha.c:5851 +#: vms-alpha.c:6265 #, c-format msgid " vector : 0x%08x\n" msgstr " вектор : 0x%08x\n" -#: vms-alpha.c:5853 vms-alpha.c:5872 +#: vms-alpha.c:6267 vms-alpha.c:6286 #, c-format msgid " psect offset: %u\n" msgstr " померај п-одељка: %u\n" -#: vms-alpha.c:5866 +#: vms-alpha.c:6280 #, c-format msgid "SYMM - Global symbol definition with version\n" msgstr "SYMM — Општа дефиниција Ñимбола Ñа верзијом\n" -#: vms-alpha.c:5870 +#: vms-alpha.c:6284 #, c-format msgid " version mask: 0x%08x\n" msgstr " маÑка верзије: 0x%08x\n" -#: vms-alpha.c:5881 +#: vms-alpha.c:6295 #, c-format msgid "unhandled egsd entry type %u\n" msgstr "необрадив „egsd“ ÑƒÐ½Ð¾Ñ Ð²Ñ€Ñте %u\n" -#: vms-alpha.c:5915 +#: vms-alpha.c:6330 #, c-format msgid " linkage index: %u, replacement insn: 0x%08x\n" msgstr " Ð¸Ð½Ð´ÐµÐºÑ Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°ÑšÐ°: %u, инÑтрукција премештања: 0x%08x\n" -#: vms-alpha.c:5918 +#: vms-alpha.c:6334 #, c-format msgid " psect idx 1: %u, offset 1: 0x%08x %08x\n" msgstr " Ð¸Ð½Ð´ÐµÐºÑ Ð¿-одељка 1: %u, померај 1: 0x%08x %08x\n" -#: vms-alpha.c:5922 +#: vms-alpha.c:6339 #, c-format msgid " psect idx 2: %u, offset 2: 0x%08x %08x\n" msgstr " Ð¸Ð½Ð´ÐµÐºÑ Ð¿-одељка 2: %u, померај 2: 0x%08x %08x\n" -#: vms-alpha.c:5927 +#: vms-alpha.c:6345 #, c-format msgid " psect idx 3: %u, offset 3: 0x%08x %08x\n" msgstr " Ð¸Ð½Ð´ÐµÐºÑ Ð¿-одељка 3: %u, померај 3: 0x%08x %08x\n" -#: vms-alpha.c:5932 +#: vms-alpha.c:6350 #, c-format msgid " global name: %.*s\n" msgstr " општи назив: %.*s\n" -#: vms-alpha.c:5942 +#: vms-alpha.c:6361 #, c-format msgid " %s (len=%u+%u):\n" msgstr " %s (дужина=%u+%u):\n" -#: vms-alpha.c:5957 +#: vms-alpha.c:6383 #, c-format msgid " (type: %3u, size: 4+%3u): " msgstr " (врÑта: %3u, величина: 4+%3u): " -#: vms-alpha.c:5961 +#: vms-alpha.c:6387 #, c-format msgid "STA_GBL (stack global) %.*s\n" msgstr "STA_GBL (општоÑÑ‚ Ñпремника) %.*s\n" -#: vms-alpha.c:5965 +#: vms-alpha.c:6391 #, c-format msgid "STA_LW (stack longword) 0x%08x\n" msgstr "STA_LW (дуга реч Ñпремника) 0x%08x\n" -#: vms-alpha.c:5969 +#: vms-alpha.c:6395 #, c-format msgid "STA_QW (stack quadword) 0x%08x %08x\n" msgstr "STA_QW (четворореч Ñпремника) 0x%08x %08x\n" -#: vms-alpha.c:5974 +#: vms-alpha.c:6400 #, c-format msgid "STA_PQ (stack psect base + offset)\n" msgstr "STA_PQ (оÑнова п-одељка Ñпремника + померај)\n" -#: vms-alpha.c:5975 +#: vms-alpha.c:6402 #, c-format msgid " psect: %u, offset: 0x%08x %08x\n" msgstr " п-одељак: %u, померај: 0x%08x %08x\n" -#: vms-alpha.c:5981 +#: vms-alpha.c:6408 #, c-format msgid "STA_LI (stack literal)\n" msgstr "STA_LI (доÑловноÑÑ‚ Ñпремника)\n" -#: vms-alpha.c:5984 +#: vms-alpha.c:6411 #, c-format msgid "STA_MOD (stack module)\n" msgstr "STA_MOD (модул Ñпремника)\n" -#: vms-alpha.c:5987 +#: vms-alpha.c:6414 #, c-format msgid "STA_CKARG (compare procedure argument)\n" msgstr "STA_CKARG (аргумент поÑтупка поређења)\n" -#: vms-alpha.c:5991 +#: vms-alpha.c:6418 #, c-format msgid "STO_B (store byte)\n" msgstr "STO_B (Ñмешта бајт)\n" -#: vms-alpha.c:5994 +#: vms-alpha.c:6421 #, c-format msgid "STO_W (store word)\n" msgstr "STO_W (Ñмешта реч)\n" -#: vms-alpha.c:5997 +#: vms-alpha.c:6424 #, c-format msgid "STO_LW (store longword)\n" msgstr "STO_LW (Ñмешта дугу реч)\n" -#: vms-alpha.c:6000 +#: vms-alpha.c:6427 #, c-format msgid "STO_QW (store quadword)\n" msgstr "STO_QW (Ñмешта четворореч)\n" -#: vms-alpha.c:6006 +#: vms-alpha.c:6433 #, c-format msgid "STO_IMMR (store immediate repeat) %u bytes\n" msgstr "STO_IMMR (Ñмешта моментално понављање) %u бајта\n" -#: vms-alpha.c:6013 +#: vms-alpha.c:6440 #, c-format msgid "STO_GBL (store global) %.*s\n" msgstr "STO_GBL (Ñмешта опште) %.*s\n" -#: vms-alpha.c:6017 +#: vms-alpha.c:6444 #, c-format msgid "STO_CA (store code address) %.*s\n" msgstr "STO_CA (Ñмешта адреÑу кода) %.*s\n" -#: vms-alpha.c:6021 +#: vms-alpha.c:6448 #, c-format msgid "STO_RB (store relative branch)\n" msgstr "STO_RB (Ñмешта релативну грану)\n" -#: vms-alpha.c:6024 +#: vms-alpha.c:6451 #, c-format msgid "STO_AB (store absolute branch)\n" msgstr "STO_AB (Ñмешта апÑолутну грану)\n" -#: vms-alpha.c:6027 +#: vms-alpha.c:6454 #, c-format msgid "STO_OFF (store offset to psect)\n" msgstr "STO_OFF (Ñмешта померај у п-одељак)\n" -#: vms-alpha.c:6033 +#: vms-alpha.c:6460 #, c-format msgid "STO_IMM (store immediate) %u bytes\n" msgstr "STO_IMM (Ñмешта моментално) %u бајта\n" -#: vms-alpha.c:6040 +#: vms-alpha.c:6467 #, c-format msgid "STO_GBL_LW (store global longword) %.*s\n" msgstr "STO_GBL_LW (Ñмешта општу дугу реч) %.*s\n" -#: vms-alpha.c:6044 +#: vms-alpha.c:6471 #, c-format msgid "STO_OFF (store LP with procedure signature)\n" msgstr "STO_OFF (Ñмешта ЛП Ñа потпиÑом поÑтупка)\n" -#: vms-alpha.c:6047 +#: vms-alpha.c:6474 #, c-format msgid "STO_BR_GBL (store branch global) *todo*\n" msgstr "STO_BR_GBL (Ñмешта општоÑÑ‚ гране) *урадити*\n" -#: vms-alpha.c:6050 +#: vms-alpha.c:6477 #, c-format msgid "STO_BR_PS (store branch psect + offset) *todo*\n" msgstr "STO_BR_PS (Ñмешта п-одељак + померај гране) *урадити*\n" -#: vms-alpha.c:6054 +#: vms-alpha.c:6481 #, c-format msgid "OPR_NOP (no-operation)\n" msgstr "OPR_NOP (без радње)\n" -#: vms-alpha.c:6057 +#: vms-alpha.c:6484 #, c-format msgid "OPR_ADD (add)\n" msgstr "OPR_ADD (збраја)\n" -#: vms-alpha.c:6060 +#: vms-alpha.c:6487 #, c-format -msgid "OPR_SUB (substract)\n" +msgid "OPR_SUB (subtract)\n" msgstr "OPR_SUB (одузима)\n" -#: vms-alpha.c:6063 +#: vms-alpha.c:6490 #, c-format msgid "OPR_MUL (multiply)\n" msgstr "OPR_MUL (множи)\n" -#: vms-alpha.c:6066 +#: vms-alpha.c:6493 #, c-format msgid "OPR_DIV (divide)\n" msgstr "OPR_DIV (дели)\n" -#: vms-alpha.c:6069 +#: vms-alpha.c:6496 #, c-format msgid "OPR_AND (logical and)\n" msgstr "OPR_AND (логичко И)\n" -#: vms-alpha.c:6072 +#: vms-alpha.c:6499 #, c-format msgid "OPR_IOR (logical inclusive or)\n" msgstr "OPR_IOR (логичко укључиво ИЛИ)\n" -#: vms-alpha.c:6075 +#: vms-alpha.c:6502 #, c-format msgid "OPR_EOR (logical exclusive or)\n" msgstr "OPR_EOR (логичко иÑкључиво ИЛИ)\n" -#: vms-alpha.c:6078 +#: vms-alpha.c:6505 #, c-format msgid "OPR_NEG (negate)\n" msgstr "OPR_NEG (негација)\n" -#: vms-alpha.c:6081 +#: vms-alpha.c:6508 #, c-format msgid "OPR_COM (complement)\n" msgstr "OPR_COM (комплемент)\n" -#: vms-alpha.c:6084 +#: vms-alpha.c:6511 #, c-format msgid "OPR_INSV (insert field)\n" msgstr "OPR_INSV (умеће поље)\n" -#: vms-alpha.c:6087 +#: vms-alpha.c:6514 #, c-format msgid "OPR_ASH (arithmetic shift)\n" msgstr "OPR_ASH (аритметички помак)\n" -#: vms-alpha.c:6090 +#: vms-alpha.c:6517 #, c-format msgid "OPR_USH (unsigned shift)\n" msgstr "OPR_USH (помак без знака)\n" -#: vms-alpha.c:6093 +#: vms-alpha.c:6520 #, c-format msgid "OPR_ROT (rotate)\n" msgstr "OPR_ROT (окреће)\n" -#: vms-alpha.c:6096 +#: vms-alpha.c:6523 #, c-format msgid "OPR_SEL (select)\n" msgstr "OPR_SEL (бира)\n" -#: vms-alpha.c:6099 +#: vms-alpha.c:6526 #, c-format msgid "OPR_REDEF (redefine symbol to curr location)\n" msgstr "OPR_REDEF (поново дефинише Ñимбол текуће локације)\n" -#: vms-alpha.c:6102 +#: vms-alpha.c:6529 #, c-format msgid "OPR_REDEF (define a literal)\n" msgstr "OPR_REDEF (дефинише доÑловноÑÑ‚)\n" -#: vms-alpha.c:6106 +#: vms-alpha.c:6533 #, c-format msgid "STC_LP (store cond linkage pair)\n" msgstr "STC_LP (Ñмешта пар повезивања уÑлова)\n" -#: vms-alpha.c:6110 +#: vms-alpha.c:6537 #, c-format msgid "STC_LP_PSB (store cond linkage pair + signature)\n" msgstr "STC_LP_PSB (Ñмешта пар повезивања уÑлова + потпиÑ)\n" -#: vms-alpha.c:6111 +#: vms-alpha.c:6539 #, c-format msgid " linkage index: %u, procedure: %.*s\n" msgstr " Ð¸Ð½Ð´ÐµÐºÑ Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°ÑšÐ°: %u, поÑтупак: %.*s\n" -#: vms-alpha.c:6114 +#: vms-alpha.c:6542 #, c-format msgid " signature: %.*s\n" msgstr " потпиÑ: %.*s\n" -#: vms-alpha.c:6117 +#: vms-alpha.c:6545 #, c-format msgid "STC_GBL (store cond global)\n" msgstr "STC_GBL (Ñмешта општоÑÑ‚ уÑлова)\n" -#: vms-alpha.c:6118 +#: vms-alpha.c:6547 #, c-format msgid " linkage index: %u, global: %.*s\n" msgstr " Ð¸Ð½Ð´ÐµÐºÑ Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°ÑšÐ°: %u, опште: %.*s\n" -#: vms-alpha.c:6122 +#: vms-alpha.c:6551 #, c-format msgid "STC_GCA (store cond code address)\n" msgstr "STC_GCA (Ñмешта адреÑу кода уÑлова)\n" -#: vms-alpha.c:6123 +#: vms-alpha.c:6553 #, c-format msgid " linkage index: %u, procedure name: %.*s\n" msgstr " Ð¸Ð½Ð´ÐµÐºÑ Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°ÑšÐ°: %u, назив поÑтупка: %.*s\n" -#: vms-alpha.c:6127 +#: vms-alpha.c:6557 #, c-format msgid "STC_PS (store cond psect + offset)\n" msgstr "STC_PS (Ñмешта п-одељак + померај уÑлова)\n" -#: vms-alpha.c:6129 +#: vms-alpha.c:6560 #, c-format msgid " linkage index: %u, psect: %u, offset: 0x%08x %08x\n" msgstr " Ð¸Ð½Ð´ÐµÐºÑ Ð¿Ð¾Ð²ÐµÐ·Ð¸Ð²Ð°ÑšÐ°: %u, п-одељак: %u, померај: 0x%08x %08x\n" -#: vms-alpha.c:6136 +#: vms-alpha.c:6567 #, c-format msgid "STC_NOP_GBL (store cond NOP at global addr)\n" msgstr "STC_NOP_GBL (Ñмешта „NOP“ уÑлова на општој адреÑи)\n" -#: vms-alpha.c:6140 +#: vms-alpha.c:6571 #, c-format msgid "STC_NOP_PS (store cond NOP at psect + offset)\n" msgstr "STC_NOP_PS (Ñмешта „NOP“ уÑлова на п-одељку + померај)\n" -#: vms-alpha.c:6144 +#: vms-alpha.c:6575 #, c-format msgid "STC_BSR_GBL (store cond BSR at global addr)\n" msgstr "STC_BSR_GBL (Ñмешта „BSR“ уÑлова на општој адреÑи)\n" -#: vms-alpha.c:6148 +#: vms-alpha.c:6579 #, c-format msgid "STC_BSR_PS (store cond BSR at psect + offset)\n" msgstr "STC_BSR_PS (Ñмешта „BSR“ уÑлова на п-одељку + померај)\n" -#: vms-alpha.c:6152 +#: vms-alpha.c:6583 #, c-format msgid "STC_LDA_GBL (store cond LDA at global addr)\n" msgstr "STC_LDA_GBL (Ñмешта „LDA“ уÑлова на општој адреÑи)\n" -#: vms-alpha.c:6156 +#: vms-alpha.c:6587 #, c-format msgid "STC_LDA_PS (store cond LDA at psect + offset)\n" msgstr "STC_LDA_PS (Ñмешта „LDA“ уÑлова на п-одељку + померај)\n" -#: vms-alpha.c:6160 +#: vms-alpha.c:6591 #, c-format msgid "STC_BOH_GBL (store cond BOH at global addr)\n" msgstr "STC_BOH_GBL (Ñмешта „BOH“ уÑлова на општој адреÑи)\n" -#: vms-alpha.c:6164 +#: vms-alpha.c:6595 #, c-format msgid "STC_BOH_PS (store cond BOH at psect + offset)\n" msgstr "STC_BOH_PS (Ñмешта „BOH“ уÑлова на п-одељку + померај)\n" -#: vms-alpha.c:6169 +#: vms-alpha.c:6600 #, c-format msgid "STC_NBH_GBL (store cond or hint at global addr)\n" msgstr "STC_NBH_GBL (Ñмешта уÑлов или најаву на општој адреÑи)\n" -#: vms-alpha.c:6173 +#: vms-alpha.c:6604 #, c-format msgid "STC_NBH_PS (store cond or hint at psect + offset)\n" msgstr "STC_NBH_PS (Ñмешта уÑлов или најаву на п-одељку + померај)\n" -#: vms-alpha.c:6177 +#: vms-alpha.c:6608 #, c-format msgid "CTL_SETRB (set relocation base)\n" msgstr "CTL_SETRB (поÑтавља оÑнову премештања)\n" -#: vms-alpha.c:6183 +#: vms-alpha.c:6614 #, c-format msgid "CTL_AUGRB (augment relocation base) %u\n" msgstr "CTL_AUGRB (повећава оÑнову премештања) %u\n" -#: vms-alpha.c:6187 +#: vms-alpha.c:6618 #, c-format msgid "CTL_DFLOC (define location)\n" msgstr "CTL_DFLOC (дефинише меÑто)\n" -#: vms-alpha.c:6190 +#: vms-alpha.c:6621 #, c-format msgid "CTL_STLOC (set location)\n" msgstr "CTL_STLOC (поÑтавља меÑто)\n" -#: vms-alpha.c:6193 +#: vms-alpha.c:6624 #, c-format msgid "CTL_STKDL (stack defined location)\n" msgstr "CTL_STKDL (Ñпремником дефиниÑано меÑто)\n" -#: vms-alpha.c:6196 vms-alpha.c:6610 +#: vms-alpha.c:6627 vms-alpha.c:7051 vms-alpha.c:7177 #, c-format msgid "*unhandled*\n" msgstr "*необрадиво*\n" -#: vms-alpha.c:6226 vms-alpha.c:6265 +#: vms-alpha.c:6657 vms-alpha.c:6696 #, c-format msgid "cannot read GST record length\n" msgstr "не могу да читам дужину „GST“ запиÑа\n" #. Ill-formed. -#: vms-alpha.c:6247 +#: vms-alpha.c:6678 #, c-format msgid "cannot find EMH in first GST record\n" msgstr "не могу да нађем „EMH“ у првом „GST“ запиÑу\n" -#: vms-alpha.c:6273 +#: vms-alpha.c:6704 #, c-format msgid "cannot read GST record header\n" msgstr "не могу да прочитам заглавље „GST“ запиÑа\n" -#: vms-alpha.c:6286 +#: vms-alpha.c:6717 #, c-format msgid " corrupted GST\n" msgstr " оштећено „GST“\n" -#: vms-alpha.c:6294 +#: vms-alpha.c:6725 #, c-format msgid "cannot read GST record\n" msgstr "не могу да читам „GST“ запиÑ\n" -#: vms-alpha.c:6323 +#: vms-alpha.c:6754 #, c-format msgid " unhandled EOBJ record type %u\n" msgstr " необрадив „EOBJ“ ÑƒÐ½Ð¾Ñ Ð²Ñ€Ñте %u\n" -#: vms-alpha.c:6346 +#: vms-alpha.c:6778 #, c-format msgid " bitcount: %u, base addr: 0x%08x\n" msgstr " број бита: %u, оÑновна адреÑа: 0x%08x\n" -#: vms-alpha.c:6359 +#: vms-alpha.c:6792 #, c-format msgid " bitmap: 0x%08x (count: %u):\n" msgstr " мапа бита: 0x%08x (укупно: %u):\n" -#: vms-alpha.c:6366 +#: vms-alpha.c:6799 #, c-format msgid " %08x" msgstr " %08x" -#: vms-alpha.c:6391 +#: vms-alpha.c:6825 #, c-format msgid " image %u (%u entries)\n" msgstr " Ñлика %u (%u уноÑа)\n" -#: vms-alpha.c:6396 +#: vms-alpha.c:6831 #, c-format msgid " offset: 0x%08x, val: 0x%08x\n" msgstr " померај: 0x%08x, вредноÑÑ‚: 0x%08x\n" -#: vms-alpha.c:6417 +#: vms-alpha.c:6853 #, c-format msgid " image %u (%u entries), offsets:\n" msgstr " Ñлика %u (%u уноÑа), померај:\n" -#: vms-alpha.c:6424 +#: vms-alpha.c:6860 #, c-format msgid " 0x%08x" msgstr " 0x%08x" #. 64 bits. -#: vms-alpha.c:6546 +#: vms-alpha.c:6982 #, c-format msgid "64 bits *unhandled*\n" msgstr "64 бита *није подржано*\n" -#: vms-alpha.c:6550 +#: vms-alpha.c:6987 #, c-format msgid "class: %u, dtype: %u, length: %u, pointer: 0x%08x\n" msgstr "клаÑа: %u, д-врÑта: %u, дужина: %u, показивач: 0x%08x\n" -#: vms-alpha.c:6561 +#: vms-alpha.c:6998 #, c-format msgid "non-contiguous array of %s\n" msgstr "низ „%s“ није непрекидан\n" -#: vms-alpha.c:6565 +#: vms-alpha.c:7003 #, c-format msgid "dimct: %u, aflags: 0x%02x, digits: %u, scale: %u\n" msgstr "димцт: %u, а-заÑтавице: 0x%02x, цифре: %u, размера: %u\n" -#: vms-alpha.c:6569 +#: vms-alpha.c:7008 #, c-format msgid "arsize: %u, a0: 0x%08x\n" msgstr "ар-величина: %u, a0: 0x%08x\n" -#: vms-alpha.c:6573 +#: vms-alpha.c:7012 #, c-format msgid "Strides:\n" msgstr "Кораци:\n" -#: vms-alpha.c:6578 -#, c-format -msgid "[%u]: %u\n" -msgstr "[%u]: %u\n" - -#: vms-alpha.c:6583 +#: vms-alpha.c:7022 #, c-format msgid "Bounds:\n" msgstr "Границе:\n" -#: vms-alpha.c:6588 +#: vms-alpha.c:7028 #, c-format msgid "[%u]: Lower: %u, upper: %u\n" msgstr "[%u]: Доња: %u, горња: %u\n" -#: vms-alpha.c:6600 +#: vms-alpha.c:7040 #, c-format msgid "unaligned bit-string of %s\n" msgstr "ниÑка бита „%s“ није поравната\n" -#: vms-alpha.c:6604 +#: vms-alpha.c:7045 #, c-format msgid "base: %u, pos: %u\n" msgstr "оÑнова: %u, положај: %u\n" -#: vms-alpha.c:6624 +#: vms-alpha.c:7066 #, c-format msgid "vflags: 0x%02x, value: 0x%08x " msgstr "в-заÑтавице: 0x%02x, вредноÑÑ‚: 0x%08x " -#: vms-alpha.c:6630 +#: vms-alpha.c:7072 #, c-format msgid "(no value)\n" msgstr "(без вредноÑти)\n" -#: vms-alpha.c:6633 +#: vms-alpha.c:7075 #, c-format msgid "(not active)\n" msgstr "(није активно)\n" -#: vms-alpha.c:6636 +#: vms-alpha.c:7078 #, c-format msgid "(not allocated)\n" msgstr "(није додељено)\n" -#: vms-alpha.c:6639 +#: vms-alpha.c:7081 #, c-format msgid "(descriptor)\n" msgstr "(опиÑник)\n" -#: vms-alpha.c:6643 +#: vms-alpha.c:7085 #, c-format msgid "(trailing value)\n" msgstr "(пратећа вредноÑÑ‚)\n" -#: vms-alpha.c:6646 +#: vms-alpha.c:7088 #, c-format msgid "(value spec follows)\n" msgstr "(Ñпецификација Ñледеће вредноÑти)\n" -#: vms-alpha.c:6649 +#: vms-alpha.c:7091 #, c-format msgid "(at bit offset %u)\n" msgstr "(померај бита %u)\n" -#: vms-alpha.c:6652 +#: vms-alpha.c:7095 #, c-format msgid "(reg: %u, disp: %u, indir: %u, kind: " msgstr "(региÑтар: %u, размештај: %u, индиректно: %u, врÑта: " -#: vms-alpha.c:6659 +#: vms-alpha.c:7102 msgid "literal" msgstr "доÑловноÑÑ‚" -#: vms-alpha.c:6662 +#: vms-alpha.c:7105 msgid "address" msgstr "адреÑа" -#: vms-alpha.c:6665 +#: vms-alpha.c:7108 msgid "desc" msgstr "опиÑ" -#: vms-alpha.c:6668 +#: vms-alpha.c:7111 msgid "reg" msgstr "рег" -#: vms-alpha.c:6743 +#: vms-alpha.c:7128 +#, c-format +msgid "len: %2u, kind: %2u " +msgstr "дужина: %2u, врÑта: %2u " + +#: vms-alpha.c:7134 +#, c-format +msgid "atomic, type=0x%02x %s\n" +msgstr "атомÑки, врÑта=0x%02x %s\n" + +#: vms-alpha.c:7138 +#, c-format +msgid "indirect, defined at 0x%08x\n" +msgstr "непоÑредно, одређено на 0x%08x\n" + +#: vms-alpha.c:7142 +#, c-format +msgid "typed pointer\n" +msgstr "укуцани показивач\n" + +#: vms-alpha.c:7146 +#, c-format +msgid "pointer\n" +msgstr "показивач\n" + +#: vms-alpha.c:7154 +#, c-format +msgid "array, dim: %u, bitmap: " +msgstr "низ, величина: %u, битмапа: " + +#: vms-alpha.c:7161 +#, c-format +msgid "array descriptor:\n" +msgstr "опиÑник низа:\n" + +#: vms-alpha.c:7168 +#, c-format +msgid "type spec for element:\n" +msgstr "одредба врÑте за елемент:\n" + +#: vms-alpha.c:7170 +#, c-format +msgid "type spec for subscript %u:\n" +msgstr "одредба врÑте за подÑкрипту „%u“:\n" + +#: vms-alpha.c:7188 #, c-format msgid "Debug symbol table:\n" msgstr "Табела Ñимбола прочишћавања:\n" -#: vms-alpha.c:6754 +#: vms-alpha.c:7199 #, c-format msgid "cannot read DST header\n" msgstr "не могу да читам „GST“ заглавље\n" -#: vms-alpha.c:6759 +#: vms-alpha.c:7205 #, c-format msgid " type: %3u, len: %3u (at 0x%08x): " msgstr " врÑта: %3u, дужина: %3u (при 0x%08x): " -#: vms-alpha.c:6773 +#: vms-alpha.c:7219 #, c-format msgid "cannot read DST symbol\n" msgstr "не могу да читам „DST“ Ñимбол\n" -#: vms-alpha.c:6816 +#: vms-alpha.c:7262 #, c-format msgid "standard data: %s\n" msgstr "Ñтандардни подаци: %s\n" -#: vms-alpha.c:6819 vms-alpha.c:6903 +#: vms-alpha.c:7265 vms-alpha.c:7353 #, c-format msgid " name: %.*s\n" msgstr " назив: %.*s\n" -#: vms-alpha.c:6826 +#: vms-alpha.c:7272 #, c-format msgid "modbeg\n" msgstr "почетак модула\n" -#: vms-alpha.c:6827 +#: vms-alpha.c:7274 #, c-format msgid " flags: %d, language: %u, major: %u, minor: %u\n" msgstr " заÑтавице: %d, језик: %u, већи: %u, мањи: %u\n" -#: vms-alpha.c:6833 vms-alpha.c:7099 +#: vms-alpha.c:7280 vms-alpha.c:7554 #, c-format msgid " module name: %.*s\n" msgstr " назив модула : %.*s\n" -#: vms-alpha.c:6836 +#: vms-alpha.c:7283 #, c-format msgid " compiler : %.*s\n" msgstr " преводилац : %.*s\n" -#: vms-alpha.c:6841 +#: vms-alpha.c:7288 #, c-format msgid "modend\n" msgstr "крај модула\n" -#: vms-alpha.c:6848 +#: vms-alpha.c:7295 msgid "rtnbeg\n" msgstr "почетак рутине\n" -#: vms-alpha.c:6849 +#: vms-alpha.c:7297 #, c-format msgid " flags: %u, address: 0x%08x, pd-address: 0x%08x\n" msgstr " заÑтавице: %u, адреÑа: 0x%08x, пд-адреÑа: 0x%08x\n" -#: vms-alpha.c:6854 +#: vms-alpha.c:7302 #, c-format msgid " routine name: %.*s\n" msgstr " назив рутине : %.*s\n" -#: vms-alpha.c:6862 +#: vms-alpha.c:7310 #, c-format msgid "rtnend: size 0x%08x\n" msgstr "крај рутине: величина 0x%08x\n" -#: vms-alpha.c:6870 +#: vms-alpha.c:7318 #, c-format msgid "prolog: bkpt address 0x%08x\n" msgstr "пролог: бкпт адреÑа 0x%08x\n" -#: vms-alpha.c:6878 +#: vms-alpha.c:7327 #, c-format msgid "epilog: flags: %u, count: %u\n" msgstr "епилог: заÑтавице: %u, број: %u\n" -#: vms-alpha.c:6887 +#: vms-alpha.c:7337 #, c-format msgid "blkbeg: address: 0x%08x, name: %.*s\n" msgstr "блк почетак: адреÑа: 0x%08x, назив: %.*s\n" -#: vms-alpha.c:6896 +#: vms-alpha.c:7346 #, c-format msgid "blkend: size: 0x%08x\n" msgstr "блк крај: величина: 0x%08x\n" -#: vms-alpha.c:6902 +#: vms-alpha.c:7352 #, c-format msgid "typspec (len: %u)\n" msgstr "одредба врÑте (дужина: %u)\n" -#: vms-alpha.c:6909 +#: vms-alpha.c:7359 #, c-format msgid "septyp, name: %.*s\n" msgstr "врÑта поÑтавке, назив: %.*s\n" -#: vms-alpha.c:6918 +#: vms-alpha.c:7368 #, c-format msgid "recbeg: name: %.*s\n" msgstr "почетак запиÑа: назив: %.*s\n" -#: vms-alpha.c:6925 +#: vms-alpha.c:7370 +#, c-format +msgid " len: %u bits\n" +msgstr " дужина: %u бита\n" + +#: vms-alpha.c:7375 #, c-format msgid "recend\n" msgstr "крај запиÑа\n" -#: vms-alpha.c:6928 +#: vms-alpha.c:7379 #, c-format msgid "enumbeg, len: %u, name: %.*s\n" msgstr "почетак бројања, дужина: %u, назив: %.*s\n" -#: vms-alpha.c:6932 +#: vms-alpha.c:7383 #, c-format msgid "enumelt, name: %.*s\n" msgstr "елементи бројања, назив: %.*s\n" -#: vms-alpha.c:6936 +#: vms-alpha.c:7387 #, c-format msgid "enumend\n" msgstr "крај бројања\n" -#: vms-alpha.c:6953 +#: vms-alpha.c:7392 +#, c-format +msgid "label, name: %.*s\n" +msgstr "натпиÑ, назив: %.*s\n" + +#: vms-alpha.c:7394 +#, c-format +msgid " address: 0x%08x\n" +msgstr " адреÑа: 0x%08x\n" + +#: vms-alpha.c:7404 #, c-format msgid "discontiguous range (nbr: %u)\n" msgstr "непрекидни опÑег (бр.: %u)\n" -#: vms-alpha.c:6955 +#: vms-alpha.c:7407 #, c-format msgid " address: 0x%08x, size: %u\n" msgstr " адреÑа: 0x%08x, величина: %u\n" -#: vms-alpha.c:6965 +#: vms-alpha.c:7417 #, c-format msgid "line num (len: %u)\n" msgstr "број реда (дужина: %u)\n" -#: vms-alpha.c:6982 +#: vms-alpha.c:7434 #, c-format msgid "delta_pc_w %u\n" msgstr "delta_pc_w %u\n" -#: vms-alpha.c:6989 +#: vms-alpha.c:7441 #, c-format msgid "incr_linum(b): +%u\n" msgstr "incr_linum(b): +%u\n" -#: vms-alpha.c:6995 +#: vms-alpha.c:7447 #, c-format msgid "incr_linum_w: +%u\n" msgstr "incr_linum_w: +%u\n" -#: vms-alpha.c:7001 +#: vms-alpha.c:7453 #, c-format msgid "incr_linum_l: +%u\n" msgstr "incr_linum_l: +%u\n" -#: vms-alpha.c:7007 +#: vms-alpha.c:7459 #, c-format msgid "set_line_num(w) %u\n" msgstr "set_line_num(w) %u\n" -#: vms-alpha.c:7012 +#: vms-alpha.c:7464 #, c-format msgid "set_line_num_b %u\n" msgstr "set_line_num_b %u\n" -#: vms-alpha.c:7017 +#: vms-alpha.c:7469 #, c-format msgid "set_line_num_l %u\n" msgstr "set_line_num_l %u\n" -#: vms-alpha.c:7022 +#: vms-alpha.c:7474 #, c-format msgid "set_abs_pc: 0x%08x\n" msgstr "set_abs_pc: 0x%08x\n" -#: vms-alpha.c:7026 +#: vms-alpha.c:7478 #, c-format msgid "delta_pc_l: +0x%08x\n" msgstr "delta_pc_l: +0x%08x\n" -#: vms-alpha.c:7031 +#: vms-alpha.c:7483 #, c-format msgid "term(b): 0x%02x" msgstr "term(b): 0x%02x" -#: vms-alpha.c:7033 +#: vms-alpha.c:7485 #, c-format msgid " pc: 0x%08x\n" msgstr " pc: 0x%08x\n" -#: vms-alpha.c:7038 +#: vms-alpha.c:7490 #, c-format msgid "term_w: 0x%04x" msgstr "term_w: 0x%04x" -#: vms-alpha.c:7040 +#: vms-alpha.c:7492 #, c-format msgid " pc: 0x%08x\n" msgstr " pc: 0x%08x\n" -#: vms-alpha.c:7046 +#: vms-alpha.c:7498 #, c-format msgid "delta pc +%-4d" msgstr "delta pc +%-4d" -#: vms-alpha.c:7049 +#: vms-alpha.c:7502 #, c-format msgid " pc: 0x%08x line: %5u\n" msgstr " pc: 0x%08x ред: %5u\n" -#: vms-alpha.c:7054 +#: vms-alpha.c:7507 #, c-format msgid " *unhandled* cmd %u\n" msgstr " *необрадива* наредба „%u“\n" -#: vms-alpha.c:7069 +#: vms-alpha.c:7522 #, c-format msgid "source (len: %u)\n" msgstr "извор (дужина: %u)\n" -#: vms-alpha.c:7083 +#: vms-alpha.c:7537 #, c-format msgid " declfile: len: %u, flags: %u, fileid: %u\n" msgstr " declfile: дужина: %u, заÑтавице: %u, ид поља: %u\n" -#: vms-alpha.c:7087 +#: vms-alpha.c:7542 #, c-format msgid " rms: cdt: 0x%08x %08x, ebk: 0x%08x, ffb: 0x%04x, rfo: %u\n" msgstr " rms: cdt: 0x%08x %08x, ebk: 0x%08x, ffb: 0x%04x, rfo: %u\n" -#: vms-alpha.c:7096 +#: vms-alpha.c:7551 #, c-format msgid " filename : %.*s\n" msgstr " назив датотеке: %.*s\n" -#: vms-alpha.c:7105 +#: vms-alpha.c:7560 #, c-format msgid " setfile %u\n" msgstr " setfile %u\n" -#: vms-alpha.c:7110 vms-alpha.c:7115 +#: vms-alpha.c:7565 vms-alpha.c:7570 #, c-format msgid " setrec %u\n" msgstr " setrec %u\n" -#: vms-alpha.c:7120 vms-alpha.c:7125 +#: vms-alpha.c:7575 vms-alpha.c:7580 #, c-format msgid " setlnum %u\n" msgstr " setlnum %u\n" -#: vms-alpha.c:7130 vms-alpha.c:7135 +#: vms-alpha.c:7585 vms-alpha.c:7590 #, c-format msgid " deflines %u\n" msgstr " deflines %u\n" -#: vms-alpha.c:7139 +#: vms-alpha.c:7594 #, c-format msgid " formfeed\n" msgstr " formfeed\n" -#: vms-alpha.c:7143 +#: vms-alpha.c:7598 #, c-format msgid " *unhandled* cmd %u\n" msgstr " *необрадива* наредба „%u“\n" -#: vms-alpha.c:7155 +#: vms-alpha.c:7610 #, c-format msgid "*unhandled* dst type %u\n" msgstr "*необрадива* дÑÑ‚ врÑта „%u“\n" -#: vms-alpha.c:7187 +#: vms-alpha.c:7642 #, c-format msgid "cannot read EIHD\n" msgstr "не могу да читам „EIHD“\n" -#: vms-alpha.c:7190 +#: vms-alpha.c:7646 #, c-format msgid "EIHD: (size: %u, nbr blocks: %u)\n" msgstr "EIHD: (величина: %u, број блокова: %u)\n" -#: vms-alpha.c:7193 +#: vms-alpha.c:7650 #, c-format msgid " majorid: %u, minorid: %u\n" msgstr " већи ид: %u, мањи ид: %u\n" -#: vms-alpha.c:7201 +#: vms-alpha.c:7658 msgid "executable" msgstr "извршна" -#: vms-alpha.c:7204 +#: vms-alpha.c:7661 msgid "linkable image" msgstr "повезива Ñлика" -#: vms-alpha.c:7210 +#: vms-alpha.c:7668 #, c-format msgid " image type: %u (%s)" msgstr " врÑта Ñлике: %u (%s)" -#: vms-alpha.c:7216 +#: vms-alpha.c:7674 msgid "native" msgstr "изворна" -#: vms-alpha.c:7219 +#: vms-alpha.c:7677 msgid "CLI" -msgstr "КЛИ" +msgstr "CLI" -#: vms-alpha.c:7225 +#: vms-alpha.c:7684 #, c-format msgid ", subtype: %u (%s)\n" msgstr ", подврÑта: %u (%s)\n" -#: vms-alpha.c:7231 +#: vms-alpha.c:7691 #, c-format msgid " offsets: isd: %u, activ: %u, symdbg: %u, imgid: %u, patch: %u\n" msgstr " помераји: иÑд: %u, активно: %u, проч Ñимб: %u, ид Ñлике: %u, закрпа: %u\n" -#: vms-alpha.c:7235 +#: vms-alpha.c:7695 #, c-format msgid " fixup info rva: " msgstr " поправка инфо рва: " -#: vms-alpha.c:7237 +#: vms-alpha.c:7697 #, c-format msgid ", symbol vector rva: " msgstr ", вектор Ñимбола рва: " -#: vms-alpha.c:7240 +#: vms-alpha.c:7700 #, c-format msgid "" "\n" @@ -5615,624 +7605,803 @@ "\n" " померај низа верзије: %u\n" -#: vms-alpha.c:7244 +#: vms-alpha.c:7705 #, c-format msgid " img I/O count: %u, nbr channels: %u, req pri: %08x%08x\n" msgstr " број У/И Ñлике: %u, бр. канала: %u, рек при: %08x%08x\n" -#: vms-alpha.c:7250 +#: vms-alpha.c:7711 #, c-format msgid " linker flags: %08x:" msgstr " заÑтавице повезивача: %08x:" -#: vms-alpha.c:7280 +#: vms-alpha.c:7742 #, c-format msgid " ident: 0x%08x, sysver: 0x%08x, match ctrl: %u, symvect_size: %u\n" msgstr " увлачење: 0x%08x, верзија ÑиÑтема: 0x%08x, поклопљено ктрл: %u, величина Ñимвектора: %u\n" -#: vms-alpha.c:7286 +#: vms-alpha.c:7748 #, c-format msgid " BPAGE: %u" msgstr " БСТРÐÐИЦÐ: %u" -#: vms-alpha.c:7292 +#: vms-alpha.c:7755 #, c-format msgid ", ext fixup offset: %u, no_opt psect off: %u" msgstr ", померај Ñпољне иÑправке: %u, померај п-одељка „no_opt“-а: %u" -#: vms-alpha.c:7295 +#: vms-alpha.c:7758 #, c-format msgid ", alias: %u\n" msgstr ", алијаÑ: %u\n" -#: vms-alpha.c:7303 +#: vms-alpha.c:7766 #, c-format msgid "system version array information:\n" msgstr "низ података верзије ÑиÑтема:\n" -#: vms-alpha.c:7307 +#: vms-alpha.c:7770 #, c-format msgid "cannot read EIHVN header\n" msgstr "не могу да читам „EIHVN“ заглавље\n" -#: vms-alpha.c:7317 +#: vms-alpha.c:7780 #, c-format msgid "cannot read EIHVN version\n" msgstr "не могу да читам „EIHVN“ издање\n" -#: vms-alpha.c:7320 +#: vms-alpha.c:7783 #, c-format msgid " %02u " msgstr " %02u " -#: vms-alpha.c:7324 +#: vms-alpha.c:7787 msgid "BASE_IMAGE " msgstr "СЛИКÐ_ОСÐОВЕ " -#: vms-alpha.c:7327 +#: vms-alpha.c:7790 msgid "MEMORY_MANAGEMENT" msgstr "УПРÐВЉÐЊЕ_МЕМОРИЈОМ" -#: vms-alpha.c:7330 +#: vms-alpha.c:7793 msgid "IO " msgstr "УИ " -#: vms-alpha.c:7333 +#: vms-alpha.c:7796 msgid "FILES_VOLUMES " msgstr "ВОЛУМЕÐИ_ДÐТОТЕКР" -#: vms-alpha.c:7336 +#: vms-alpha.c:7799 msgid "PROCESS_SCHED " msgstr "ЗÐКÐЗÐÐИ_ПРОЦЕСИ " -#: vms-alpha.c:7339 +#: vms-alpha.c:7802 msgid "SYSGEN " msgstr "СТВÐРÐЊЕ_СИСТЕМР" -#: vms-alpha.c:7342 +#: vms-alpha.c:7805 msgid "CLUSTERS_LOCKMGR " msgstr "МГРЗÐКЉУЧÐÐ’ÐЊЕ_КЛÐСТЕРР" -#: vms-alpha.c:7345 +#: vms-alpha.c:7808 msgid "LOGICAL_NAMES " msgstr "ЛОГИЧКИ_ÐÐЗИВИ " -#: vms-alpha.c:7348 +#: vms-alpha.c:7811 msgid "SECURITY " msgstr "БЕЗБЕДÐОСТ " -#: vms-alpha.c:7351 +#: vms-alpha.c:7814 msgid "IMAGE_ACTIVATOR " msgstr "ПОКРЕТÐЧ_СЛИКЕ " -#: vms-alpha.c:7354 +#: vms-alpha.c:7817 msgid "NETWORKS " msgstr "МРЕЖЕ " -#: vms-alpha.c:7357 +#: vms-alpha.c:7820 msgid "COUNTERS " msgstr "БРОЈÐЧИ " -#: vms-alpha.c:7360 +#: vms-alpha.c:7823 msgid "STABLE " msgstr "СТÐБИЛÐО " -#: vms-alpha.c:7363 +#: vms-alpha.c:7826 msgid "MISC " msgstr "РÐЗÐО " -#: vms-alpha.c:7366 +#: vms-alpha.c:7829 msgid "CPU " -msgstr "ЦПУ " +msgstr "ЦПЈ " -#: vms-alpha.c:7369 +#: vms-alpha.c:7832 msgid "VOLATILE " msgstr "ПРОМЕÐЉИВО " -#: vms-alpha.c:7372 +#: vms-alpha.c:7835 msgid "SHELL " msgstr "ШКОЉКР" -#: vms-alpha.c:7375 +#: vms-alpha.c:7838 msgid "POSIX " msgstr "ПОСИКС " -#: vms-alpha.c:7378 +#: vms-alpha.c:7841 msgid "MULTI_PROCESSING " msgstr "ВИШЕ_ОБРÐДÐО " -#: vms-alpha.c:7381 +#: vms-alpha.c:7844 msgid "GALAXY " msgstr "ГÐЛÐКСИЈР" -#: vms-alpha.c:7384 +#: vms-alpha.c:7847 msgid "*unknown* " msgstr "*непознато* " -#: vms-alpha.c:7387 -#, c-format -msgid ": %u.%u\n" -msgstr ": %u.%u\n" - -#: vms-alpha.c:7400 vms-alpha.c:7659 +#: vms-alpha.c:7863 vms-alpha.c:8137 #, c-format msgid "cannot read EIHA\n" msgstr "не могу да читам „EIHA“\n" -#: vms-alpha.c:7403 +#: vms-alpha.c:7866 #, c-format msgid "Image activation: (size=%u)\n" msgstr "Ðктивирање Ñлике: (величина=%u)\n" -#: vms-alpha.c:7405 +#: vms-alpha.c:7869 #, c-format msgid " First address : 0x%08x 0x%08x\n" msgstr " Прва адреÑа : 0x%08x 0x%08x\n" -#: vms-alpha.c:7408 +#: vms-alpha.c:7873 #, c-format msgid " Second address: 0x%08x 0x%08x\n" msgstr " Друга адреÑа : 0x%08x 0x%08x\n" -#: vms-alpha.c:7411 +#: vms-alpha.c:7877 #, c-format msgid " Third address : 0x%08x 0x%08x\n" msgstr " Трећа адреÑа : 0x%08x 0x%08x\n" -#: vms-alpha.c:7414 +#: vms-alpha.c:7881 #, c-format msgid " Fourth address: 0x%08x 0x%08x\n" msgstr " Четврта адреÑа : 0x%08x 0x%08x\n" -#: vms-alpha.c:7417 +#: vms-alpha.c:7885 #, c-format msgid " Shared image : 0x%08x 0x%08x\n" msgstr " Дељена Ñлика : 0x%08x 0x%08x\n" -#: vms-alpha.c:7428 +#: vms-alpha.c:7896 #, c-format msgid "cannot read EIHI\n" msgstr "не могу да читам „EIHI“\n" -#: vms-alpha.c:7431 +#: vms-alpha.c:7900 #, c-format msgid "Image identification: (major: %u, minor: %u)\n" msgstr "Препознавање Ñлике: (веће: %u, мање: %u)\n" -#: vms-alpha.c:7434 +#: vms-alpha.c:7903 #, c-format msgid " image name : %.*s\n" msgstr " назив Ñлике : %.*s\n" -#: vms-alpha.c:7436 +#: vms-alpha.c:7905 #, c-format msgid " link time : %s\n" msgstr " време везивања : %s\n" -#: vms-alpha.c:7438 +#: vms-alpha.c:7907 #, c-format msgid " image ident : %.*s\n" msgstr " увлачење Ñлике : %.*s\n" -#: vms-alpha.c:7440 +#: vms-alpha.c:7909 #, c-format msgid " linker ident : %.*s\n" msgstr " увлачење повезивача : %.*s\n" -#: vms-alpha.c:7442 +#: vms-alpha.c:7911 #, c-format msgid " image build ident: %.*s\n" msgstr " увлачење изградње Ñлике: %.*s\n" -#: vms-alpha.c:7452 +#: vms-alpha.c:7921 #, c-format msgid "cannot read EIHS\n" msgstr "не могу да читам „EIHS“\n" -#: vms-alpha.c:7455 +#: vms-alpha.c:7925 #, c-format msgid "Image symbol & debug table: (major: %u, minor: %u)\n" msgstr "Симбол Ñлике и табела прочишћавања: (веће: %u, мање: %u)\n" -#: vms-alpha.c:7460 +#: vms-alpha.c:7931 #, c-format msgid " debug symbol table : vbn: %u, size: %u (0x%x)\n" msgstr " табела Ñимбола прочишћавања : вбн: %u, величина: %u (0x%x)\n" -#: vms-alpha.c:7464 +#: vms-alpha.c:7936 #, c-format msgid " global symbol table: vbn: %u, records: %u\n" msgstr " табела општег Ñимбола: вбн: %u, запиÑи: %u\n" -#: vms-alpha.c:7468 +#: vms-alpha.c:7941 #, c-format msgid " debug module table : vbn: %u, size: %u\n" msgstr " табела модула прочишћавања: вбн: %u, величина: %u\n" -#: vms-alpha.c:7481 +#: vms-alpha.c:7954 #, c-format msgid "cannot read EISD\n" msgstr "не могу да читам „EISD“\n" -#: vms-alpha.c:7491 +#: vms-alpha.c:7965 #, c-format msgid "Image section descriptor: (major: %u, minor: %u, size: %u, offset: %u)\n" msgstr "ОпиÑник одељка Ñлике: (већи: %u, мањи: %u, величина: %u, померај: %u)\n" -#: vms-alpha.c:7498 +#: vms-alpha.c:7973 #, c-format msgid " section: base: 0x%08x%08x size: 0x%08x\n" msgstr " одељак: оÑнова: 0x%08x%08x величина: 0x%08x\n" -#: vms-alpha.c:7503 +#: vms-alpha.c:7978 #, c-format msgid " flags: 0x%04x" msgstr " заÑтавице : 0x%04x" -#: vms-alpha.c:7540 +#: vms-alpha.c:8016 #, c-format msgid " vbn: %u, pfc: %u, matchctl: %u type: %u (" msgstr " вбн: %u, пфц: %u, пореди_цтл: %u врÑта: %u (" -#: vms-alpha.c:7546 +#: vms-alpha.c:8022 msgid "NORMAL" msgstr "NORMAL" -#: vms-alpha.c:7549 +#: vms-alpha.c:8025 msgid "SHRFXD" msgstr "SHRFXD" -#: vms-alpha.c:7552 +#: vms-alpha.c:8028 msgid "PRVFXD" msgstr "PRVFXD" -#: vms-alpha.c:7555 +#: vms-alpha.c:8031 msgid "SHRPIC" msgstr "SHRPIC" -#: vms-alpha.c:7558 +#: vms-alpha.c:8034 msgid "PRVPIC" msgstr "PRVPIC" -#: vms-alpha.c:7561 +#: vms-alpha.c:8037 msgid "USRSTACK" msgstr "USRSTACK" -#: vms-alpha.c:7567 +#: vms-alpha.c:8043 msgid ")\n" msgstr ")\n" -#: vms-alpha.c:7569 +#: vms-alpha.c:8046 #, c-format msgid " ident: 0x%08x, name: %.*s\n" msgstr " увлачење: 0x%08x, назив: %.*s\n" -#: vms-alpha.c:7579 +#: vms-alpha.c:8056 #, c-format msgid "cannot read DMT\n" msgstr "не могу да читам „DMT“\n" -#: vms-alpha.c:7583 +#: vms-alpha.c:8060 #, c-format msgid "Debug module table:\n" msgstr "Табела модула прочишћавања:\n" -#: vms-alpha.c:7592 +#: vms-alpha.c:8069 #, c-format msgid "cannot read DMT header\n" msgstr "не могу да читам „DMT“ заглавље\n" -#: vms-alpha.c:7597 +#: vms-alpha.c:8075 #, c-format msgid " module offset: 0x%08x, size: 0x%08x, (%u psects)\n" msgstr " померај модула: 0x%08x, величина: 0x%08x, (%u п-одељака)\n" -#: vms-alpha.c:7607 +#: vms-alpha.c:8085 #, c-format msgid "cannot read DMT psect\n" msgstr "не могу да читам „DMT“ п-одељак\n" -#: vms-alpha.c:7610 +#: vms-alpha.c:8089 #, c-format msgid " psect start: 0x%08x, length: %u\n" msgstr " почетак п-одељка: 0x%08x, дужина: %u\n" -#: vms-alpha.c:7623 +#: vms-alpha.c:8102 #, c-format msgid "cannot read DST\n" msgstr "не могу да читам „DST“\n" -#: vms-alpha.c:7633 +#: vms-alpha.c:8112 #, c-format msgid "cannot read GST\n" msgstr "не могу да читам „GST“\n" -#: vms-alpha.c:7637 +#: vms-alpha.c:8116 #, c-format msgid "Global symbol table:\n" msgstr "Табела општих Ñимбола:\n" -#: vms-alpha.c:7665 +#: vms-alpha.c:8143 #, c-format msgid "Image activator fixup: (major: %u, minor: %u)\n" msgstr "ИÑправка покретача Ñлике: (већи: %u, мањи: %u)\n" -#: vms-alpha.c:7668 +#: vms-alpha.c:8147 #, c-format msgid " iaflink : 0x%08x %08x\n" msgstr " иаф веза : 0x%08x %08x\n" -#: vms-alpha.c:7671 +#: vms-alpha.c:8151 #, c-format msgid " fixuplnk: 0x%08x %08x\n" msgstr " веза иÑправке: 0x%08x %08x\n" -#: vms-alpha.c:7674 +#: vms-alpha.c:8154 #, c-format msgid " size : %u\n" msgstr " величина : %u\n" -#: vms-alpha.c:7676 +#: vms-alpha.c:8156 #, c-format msgid " flags: 0x%08x\n" msgstr " заÑтавице : 0x%08x\n" -#: vms-alpha.c:7680 +#: vms-alpha.c:8161 #, c-format msgid " qrelfixoff: %5u, lrelfixoff: %5u\n" msgstr " qrelfixoff: %5u, lrelfixoff: %5u\n" -#: vms-alpha.c:7684 +#: vms-alpha.c:8166 #, c-format msgid " qdotadroff: %5u, ldotadroff: %5u\n" msgstr " qdotadroff: %5u, ldotadroff: %5u\n" -#: vms-alpha.c:7688 +#: vms-alpha.c:8171 #, c-format msgid " codeadroff: %5u, lpfixoff : %5u\n" msgstr " codeadroff: %5u, lpfixoff : %5u\n" -#: vms-alpha.c:7691 +#: vms-alpha.c:8174 #, c-format msgid " chgprtoff : %5u\n" msgstr " chgprtoff : %5u\n" -#: vms-alpha.c:7694 +#: vms-alpha.c:8178 #, c-format msgid " shlstoff : %5u, shrimgcnt : %5u\n" msgstr " shlstoff : %5u, shrimgcnt : %5u\n" -#: vms-alpha.c:7696 +#: vms-alpha.c:8181 #, c-format msgid " shlextra : %5u, permctx : %5u\n" msgstr " shlextra : %5u, permctx : %5u\n" -#: vms-alpha.c:7699 +#: vms-alpha.c:8184 #, c-format msgid " base_va : 0x%08x\n" msgstr " base_va : 0x%08x\n" -#: vms-alpha.c:7701 +#: vms-alpha.c:8186 #, c-format msgid " lppsbfixoff: %5u\n" msgstr " lppsbfixoff: %5u\n" -#: vms-alpha.c:7709 +#: vms-alpha.c:8194 #, c-format msgid " Shareable images:\n" msgstr " Дељиве Ñлике:\n" -#: vms-alpha.c:7713 +#: vms-alpha.c:8199 #, c-format msgid " %u: size: %u, flags: 0x%02x, name: %.*s\n" msgstr " %u: величина: %u, заÑтавице: 0x%02x, назив: %.*s\n" -#: vms-alpha.c:7720 +#: vms-alpha.c:8206 #, c-format msgid " quad-word relocation fixups:\n" msgstr " иÑправке премештања четворо-речи:\n" -#: vms-alpha.c:7725 +#: vms-alpha.c:8211 #, c-format msgid " long-word relocation fixups:\n" msgstr " иÑправке премештања дуге-речи:\n" -#: vms-alpha.c:7730 +#: vms-alpha.c:8216 #, c-format msgid " quad-word .address reference fixups:\n" msgstr " иÑправке „.address“ упуте четворо-речи:\n" -#: vms-alpha.c:7735 +#: vms-alpha.c:8221 #, c-format msgid " long-word .address reference fixups:\n" msgstr " иÑправке „.address“ упуте дуге-речи:\n" -#: vms-alpha.c:7740 +#: vms-alpha.c:8226 #, c-format msgid " Code Address Reference Fixups:\n" msgstr " ИÑправке упуте адреÑе кода:\n" -#: vms-alpha.c:7745 +#: vms-alpha.c:8231 #, c-format msgid " Linkage Pairs Reference Fixups:\n" msgstr " ИÑправке упуте парова повезивања:\n" -#: vms-alpha.c:7754 +#: vms-alpha.c:8240 #, c-format msgid " Change Protection (%u entries):\n" msgstr " Промена заштите (%u уноÑа):\n" -#: vms-alpha.c:7759 +#: vms-alpha.c:8246 #, c-format msgid " base: 0x%08x %08x, size: 0x%08x, prot: 0x%08x " msgstr " оÑнова: 0x%08x %08x, величина: 0x%08x, заштита: 0x%08x " #. FIXME: we do not yet support relocatable link. It is not obvious #. how to do it for debug infos. -#: vms-alpha.c:8599 +#: vms-alpha.c:9123 msgid "%P: relocatable link is not supported\n" msgstr "%P: премеÑтива веза није подржана\n" -#: vms-alpha.c:8669 -msgid "%P: multiple entry points: in modules %B and %B\n" -msgstr "%P: тачке више уноÑа: у модулима „%B“ и „%B“\n" +#: vms-alpha.c:9194 +#, c-format +msgid "%P: multiple entry points: in modules %pB and %pB\n" +msgstr "%P: тачке више уноÑа: у модулима „%pB“ и „%pB“\n" -#: vms-lib.c:1444 +#: vms-lib.c:1525 #, c-format msgid "could not open shared image '%s' from '%s'" msgstr "не могу да отворим дељену Ñлику „%s“ из „%s“" -#: vms-misc.c:360 +#: vms-misc.c:367 msgid "_bfd_vms_output_counted called with zero bytes" msgstr "„_bfd_vms_output_counted“ је позвано Ñа нула бајтова" -#: vms-misc.c:365 +#: vms-misc.c:372 msgid "_bfd_vms_output_counted called with too many bytes" msgstr "„_bfd_vms_output_counted“ је позвано Ñа превише бајтова" -#: xcofflink.c:824 +#: xcofflink.c:832 +#, c-format +msgid "%pB: XCOFF shared object when not producing XCOFF output" +msgstr "%pB: „XCOFF“ дељени објекат када Ñе не производи „XCOFF“ излаз" + +#: xcofflink.c:853 +#, c-format +msgid "%pB: dynamic object with no .loader section" +msgstr "%pB: динамички објекат без „.loader“ одељка" + +#: xcofflink.c:1417 +#, c-format +msgid "%pB: `%s' has line numbers but no enclosing section" +msgstr "%pB: „%s“ има бројеве редова али не и затварајући одељак" + +#: xcofflink.c:1470 +#, c-format +msgid "%pB: class %d symbol `%s' has no aux entries" +msgstr "%pB: клаÑа %d Ñимбола „%s“ нема помоћних уноÑа" + +#: xcofflink.c:1493 +#, c-format +msgid "%pB: symbol `%s' has unrecognized csect type %d" +msgstr "%pB: Ñимбол „%s“ има непознату врÑту цÑектора „%d“" + +#: xcofflink.c:1506 +#, c-format +msgid "%pB: bad XTY_ER symbol `%s': class %d scnum %d scnlen %" +msgstr "%pB: лош „XTY_ER“ Ñимбол „%s“: клаÑа %d Ñцброј %d Ñцндужине %" + +#: xcofflink.c:1537 +#, c-format +msgid "%pB: XMC_TC0 symbol `%s' is class %d scnlen %" +msgstr "%pB: „XMC_TC0“ Ñимбол „%s“ је клаÑа %d Ñцндужине %" + +#: xcofflink.c:1684 #, c-format -msgid "%s: XCOFF shared object when not producing XCOFF output" -msgstr "%s: „XCOFF“ дељени објекат када Ñе не производи „XCOFF“ излаз" +msgid "%pB: csect `%s' not in enclosing section" +msgstr "%pB: ц-одељак „%s“ није у затварајућем одељку" -#: xcofflink.c:845 +#: xcofflink.c:1792 #, c-format -msgid "%s: dynamic object with no .loader section" -msgstr "%s: динамички објекат без „.loader“ одељка" +msgid "%pB: misplaced XTY_LD `%s'" +msgstr "%pB: лоше поÑтављено „XTY_LD“ „%s“" -#: xcofflink.c:1404 -msgid "%B: `%s' has line numbers but no enclosing section" -msgstr "%B: „%s“ има бројеве редова али не и затварајући одељак" +#: xcofflink.c:2113 +#, c-format +msgid "%pB: reloc %s:% not in csect" +msgstr "%pB: премештање „%s:%“ није у ц-одељку" + +#: xcofflink.c:3193 +#, c-format +msgid "%s: no such symbol" +msgstr "%s: нема таквог Ñимбола" + +#: xcofflink.c:3298 +#, c-format +msgid "warning: attempt to export undefined symbol `%s'" +msgstr "упозорење: покушај извоза недефиниÑаног Ñимбола „%s“" + +#: xcofflink.c:3677 +msgid "error: undefined symbol __rtinit" +msgstr "грешка: Ñимбол „__rtinit“ није дефиниÑан" + +#: xcofflink.c:4055 +#, c-format +msgid "%pB: loader reloc in unrecognized section `%s'" +msgstr "%pB: премештање утоваривача у непознатом одељку „%s“" + +#: xcofflink.c:4067 +#, c-format +msgid "%pB: `%s' in loader reloc but not loader sym" +msgstr "%pB: „%s“ је у премештању утоваривача али није Ñимбол утоваривача" + +#: xcofflink.c:4084 +#, c-format +msgid "%pB: loader reloc in read-only section %pA" +msgstr "%pB: премештање утоваривача у одељку Ñамо за читање „%pA“" + +#: xcofflink.c:5112 +#, c-format +msgid "TOC overflow: %# > 0x10000; try -mminimal-toc when compiling" +msgstr "Прекорачење табеле Ñадржаја: %# > 0x10000; пробајте Ñа „-mminimal-toc“ приликом превођења" + +#. Not fatal, this callback cannot fail. +#: elfnn-aarch64.c:2872 +#, c-format +msgid "unknown attribute for symbol `%s': 0x%02x" +msgstr "непознат атрибут за Ñимбол „%s“: 0x%02x" + +#: elfnn-aarch64.c:5246 +#, c-format +msgid "%pB: error: erratum 835769 stub out of range (input file too large)" +msgstr "%pB: грешка: окрајак грешке 835769 је ван опÑега (улазна датотека је превелика)" + +#: elfnn-aarch64.c:5338 +#, c-format +msgid "%pB: error: erratum 843419 stub out of range (input file too large)" +msgstr "%pB: грешка: окрајак грешке 843419 је ван опÑега (улазна датотека је превелика)" + +#: elfnn-aarch64.c:5351 +msgid "%pB: error: erratum 843419 immediate 0x%" +msgstr "%pB: грешка: грешка 843419 изравно 0x%" + +#: elfnn-aarch64.c:5899 +#, c-format +msgid "%pB: relocation %s against symbol `%s' which may bind externally can not be used when making a shared object; recompile with -fPIC" +msgstr "%pB: премештање „%s“ наÑпрам Ñимбола „%s“ која Ñе може Ñвезати Ñпоља не може Ñе кориÑтити приликом Ñтварања дељеног објекта; поново преведите Ñа „-fPIC“" + +#: elfnn-aarch64.c:5990 +#, c-format +msgid "%pB: local symbol descriptor table be NULL when applying relocation %s against local symbol" +msgstr "%pB: табела опиÑника локалног Ñимбола биће „NULL“ приликом примене премештања „%s“ наÑпрам локалног Ñимбола" + +#: elfnn-aarch64.c:6103 elfnn-aarch64.c:6140 +#, c-format +msgid "%pB: TLS relocation %s against undefined symbol `%s'" +msgstr "%pB: „TLS“ премештање „%s“ наÑпрам недефиниÑаног Ñимбола „%s“" + +#: elfnn-aarch64.c:7125 +msgid "too many GOT entries for -fpic, please recompile with -fPIC" +msgstr "превише „GOT“ уноÑа за „-fpic“, поново преведите Ñа „-fPIC“" + +#: elfnn-aarch64.c:7153 +msgid "one possible cause of this error is that the symbol is being referenced in the indicated code as if it had a larger alignment than was declared where it was defined" +msgstr "један од могућих разлога ове грешке може бити да Ñимбол упутан у назначеном коду има веће поравнање него што је објављено тамо где је дефиниÑан" + +#: elfnn-aarch64.c:7720 +#, c-format +msgid "%pB: relocation %s against `%s' can not be used when making a shared object" +msgstr "%pB: премештање „%s“ наÑпрам „%s“ Ñе не може кориÑтити приликом Ñтварања дељеног објекта" + +#: elfnn-riscv.c:187 elfnn-riscv.c:222 +#, c-format +msgid "%pB: warning: RVE PLT generation not supported" +msgstr "%pB: упозорење: „RVE PLT“ Ñтварање није подржано" + +#: elfnn-riscv.c:1977 +#, c-format +msgid "%pcrel_lo section symbol with an addend" +msgstr "Ñимбол „%pcrel_lo“ одељка Ñа Ñабирком" + +#: elfnn-riscv.c:2198 +#, c-format +msgid "%%X%%P: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC\n" +msgstr "%%X%%P: премештање „%s“ наÑпрам „%s“ Ñе не може кориÑтити приликом Ñтварања дељеног објекта; поново преведите Ñа „-fPIC“\n" + +#: elfnn-riscv.c:2208 +#, c-format +msgid "%%X%%P: unresolvable %s relocation against symbol `%s'\n" +msgstr "%%X%%P: нерешиво „%s“ премештање наÑпрам Ñимбола „%s“\n" + +#: elfnn-riscv.c:2247 +msgid "%X%P: internal error: out of range error\n" +msgstr "%X%P: унутрашња грешка: изван опÑега\n" + +#: elfnn-riscv.c:2252 +msgid "%X%P: internal error: unsupported relocation error\n" +msgstr "%X%P: унутрашња грешка: премештање није подржано\n" + +#: elfnn-riscv.c:2258 +msgid "dangerous relocation error" +msgstr "опаÑно премештање" + +#: elfnn-riscv.c:2264 +msgid "%X%P: internal error: unknown error\n" +msgstr "%X%P: унутрашња грешка: непозната грешка\n" + +#: elfnn-riscv.c:2630 +#, c-format +msgid "error: %pB: Mis-matched ISA version for '%s' extension. %d.%d vs %d.%d" +msgstr "грешка: %pB: неодговарајуће „ISA“ издање за „%s“ проширење. %d.%d vs %d.%d" + +#: elfnn-riscv.c:2648 +#, c-format +msgid "error: %pB: corrupted ISA string '%s'. First letter should be 'i' or 'e' but got '%s'." +msgstr "грешка: %pB: оштећена „ISA“ ниÑка „%s“. Прво Ñлово треба да буде „i“ или „e“ али добих „%s“." + +#: elfnn-riscv.c:2692 +#, c-format +msgid "error: %pB: Mis-matched ISA string to merge '%s' and '%s'." +msgstr "грешка: %pB: неодговарајућа „ISA“ ниÑка за Ñтапање „%s“ и „%s“." -#: xcofflink.c:1456 -msgid "%B: class %d symbol `%s' has no aux entries" -msgstr "%B: клаÑа %d Ñимбола „%s“ нема помоћних уноÑа" +#: elfnn-riscv.c:2893 +#, c-format +msgid "error: %pB: ISA string of input (%s) doesn't match output (%s)." +msgstr "грешка: %pB: „ISA“ ниÑка улаза (%s) не одговара излазу (%s)." -#: xcofflink.c:1478 -msgid "%B: symbol `%s' has unrecognized csect type %d" -msgstr "%B: Ñимбол „%s“ има непознату врÑту цÑектора „%d“" +#: elfnn-riscv.c:2913 +#, c-format +msgid "error: %pB: XLEN of input (%u) doesn't match output (%u)." +msgstr "грешка: %pB: „XLEN“ ниÑка улаза (%u) не одговара излазу (%u)." -#: xcofflink.c:1490 -msgid "%B: bad XTY_ER symbol `%s': class %d scnum %d scnlen %d" -msgstr "%B: лош „XTY_ER“ Ñимбол „%s“: клаÑа %d Ñцброј %d Ñцндужине %d" +#: elfnn-riscv.c:2921 +#, c-format +msgid "error: %pB: Unsupported XLEN (%u), you might be using wrong emulation." +msgstr "грешка: %pB: неподржано „XLEN“ (%u), можда кориÑтите погрешну емулацију." -#: xcofflink.c:1519 -msgid "%B: XMC_TC0 symbol `%s' is class %d scnlen %d" -msgstr "%B: „XMC_TC0“ Ñимбол „%s“ је клаÑа %d Ñцндужине %d" +#: elfnn-riscv.c:3035 +#, c-format +msgid "warning: %pB use privilege spec version %u.%u.%u but the output use version %u.%u.%u." +msgstr "упозорење: „%pB“ кориÑти привилеговано Ñпец издање „%u.%u.%u“ али излаз кориÑти издање „%u.%u.%u“." -#: xcofflink.c:1665 -msgid "%B: csect `%s' not in enclosing section" -msgstr "%B: ц-одељак „%s“ није у затварајућем одељку" +#: elfnn-riscv.c:3053 +msgid "warning: privilege spec version 1.9.1 can not be linked with other spec versions." +msgstr "упозорење: привилеговано Ñпец издање 1.9.1 Ñе не може повезати Ñа другим Ñпец издањима." -#: xcofflink.c:1772 -msgid "%B: misplaced XTY_LD `%s'" -msgstr "%B: лоше поÑтављено „XTY_LD“ „%s“" +#: elfnn-riscv.c:3081 +#, c-format +msgid "error: %pB use %u-byte stack aligned but the output use %u-byte stack aligned." +msgstr "грешка: „%pB“ кориÑти %u-бајтно поравнан Ñпремник али излаз кориÑти %u-бајтно поравнан Ñпремник." -#: xcofflink.c:2091 -msgid "%B: reloc %s:%d not in csect" -msgstr "%B: премештање „%s:%d“ није у ц-одељку" +#: elfnn-riscv.c:3122 +#, c-format +msgid "" +"%pB: ABI is incompatible with that of the selected emulation:\n" +" target emulation `%s' does not match `%s'" +msgstr "" +"%pB: „ABI“ није ÑаглаÑно Ñа оним из изабране емулације:\n" +" циљна емулација „%s“ Ñе не подудара Ñа „%s“" -#: xcofflink.c:3182 +#: elfnn-riscv.c:3176 #, c-format -msgid "%s: no such symbol" -msgstr "%s: нема таквог Ñимбола" +msgid "%pB: can't link %s modules with %s modules" +msgstr "%pB: не могу да повежем „%s“ модуле Ñа „%s“ модулима" -#: xcofflink.c:3287 +#: elfnn-riscv.c:3186 #, c-format -msgid "warning: attempt to export undefined symbol `%s'" -msgstr "упозорење: покушај извоза недефиниÑаног Ñимбола „%s“" +msgid "%pB: can't link RVE with other target" +msgstr "%pB: не могу да повежем „RVE“ Ñа другом метом" -#: xcofflink.c:3666 -msgid "error: undefined symbol __rtinit" -msgstr "грешка: Ñимбол „__rtinit“ није дефиниÑан" +#: elfnn-riscv.c:3724 +#, c-format +msgid "%pB(%pA+%#): % bytes required for alignment to %-byte boundary, but only % present" +msgstr "%pB(%pA+%#): % бајта је потребно за поравнање на %-бајтну границу, али Ñамо % је приÑутно" -#: xcofflink.c:4045 -msgid "%B: loader reloc in unrecognized section `%s'" -msgstr "%B: премештање утоваривача у непознатом одељку „%s“" +#: peXXigen.c:164 +#, c-format +msgid "%pB: unable to find name for empty section" +msgstr "%pB: не могу да нађем назив за празан одељак" -#: xcofflink.c:4056 -msgid "%B: `%s' in loader reloc but not loader sym" -msgstr "%B: „%s“ је у премештању утоваривача али није Ñимбол утоваривача" +#: peXXigen.c:191 +#, c-format +msgid "%pB: out of memory creating name for empty section" +msgstr "%pB: понеÑтало је меморије при Ñтварању назива за празан одељак" -#: xcofflink.c:4072 -msgid "%B: loader reloc in read-only section %A" -msgstr "%B: премештање утоваривача у одељку Ñамо за читање „%A“" +#: peXXigen.c:201 +#, c-format +msgid "%pB: unable to create fake empty section" +msgstr "%pB: не могу да направим лажни празан одељак" -#: xcofflink.c:5094 +#: peXXigen.c:539 #, c-format -msgid "TOC overflow: 0x%lx > 0x10000; try -mminimal-toc when compiling" -msgstr "Прекорачење табеле Ñадржаја: 0x%lx > 0x10000; пробајте Ñа „-mminimal-toc“ приликом превођења" +msgid "%pB: aout header specifies an invalid number of data-directory entries: %u" +msgstr "%pB: „aout“ заглавље наводи погрешан број уноÑа директоријума података: %u" -#: peigen.c:1009 pepigen.c:1009 pex64igen.c:1009 +#: peXXigen.c:1088 #, c-format -msgid "%s: line number overflow: 0x%lx > 0xffff" -msgstr "%s: прекорачење броја редова: 0x%lx > 0xffff" +msgid "%pB: line number overflow: 0x%lx > 0xffff" +msgstr "%pB: прекорачење броја редова: 0x%lx > 0xffff" -#: peigen.c:1036 pepigen.c:1036 pex64igen.c:1036 +#: peXXigen.c:1241 msgid "Export Directory [.edata (or where ever we found it)]" msgstr "Директоријум извоза [„.edata“ (или тамо где Ñмо га нашли)]" -#: peigen.c:1037 pepigen.c:1037 pex64igen.c:1037 +#: peXXigen.c:1242 msgid "Import Directory [parts of .idata]" msgstr "Директоријум увоза [део „.idata“]" -#: peigen.c:1038 pepigen.c:1038 pex64igen.c:1038 +#: peXXigen.c:1243 msgid "Resource Directory [.rsrc]" msgstr "Директоријум изворишта [.rsrc]" -#: peigen.c:1039 pepigen.c:1039 pex64igen.c:1039 +#: peXXigen.c:1244 msgid "Exception Directory [.pdata]" msgstr "Директоријум изузетака [.pdata]" -#: peigen.c:1040 pepigen.c:1040 pex64igen.c:1040 +#: peXXigen.c:1245 msgid "Security Directory" msgstr "Директоријум безбедноÑти" -#: peigen.c:1041 pepigen.c:1041 pex64igen.c:1041 +#: peXXigen.c:1246 msgid "Base Relocation Directory [.reloc]" msgstr "Директоријум премештања оÑнове [.reloc]" -#: peigen.c:1042 pepigen.c:1042 pex64igen.c:1042 +#: peXXigen.c:1247 msgid "Debug Directory" msgstr "Директоријум прочишћавања" -#: peigen.c:1043 pepigen.c:1043 pex64igen.c:1043 +#: peXXigen.c:1248 msgid "Description Directory" msgstr "Директоријум опиÑа" -#: peigen.c:1044 pepigen.c:1044 pex64igen.c:1044 +#: peXXigen.c:1249 msgid "Special Directory" msgstr "Директоријум поÑебноÑти" -#: peigen.c:1045 pepigen.c:1045 pex64igen.c:1045 +#: peXXigen.c:1250 msgid "Thread Storage Directory [.tls]" msgstr "Директоријум Ñмештаја нити [.tls]" -#: peigen.c:1046 pepigen.c:1046 pex64igen.c:1046 +#: peXXigen.c:1251 msgid "Load Configuration Directory" msgstr "Директоријум подешавања учитавања" -#: peigen.c:1047 pepigen.c:1047 pex64igen.c:1047 +#: peXXigen.c:1252 msgid "Bound Import Directory" msgstr "Директоријум увоза Ñвеза" -#: peigen.c:1048 pepigen.c:1048 pex64igen.c:1048 +#: peXXigen.c:1253 msgid "Import Address Table Directory" msgstr "Директоријум табеле увоза адреÑе" -#: peigen.c:1049 pepigen.c:1049 pex64igen.c:1049 +#: peXXigen.c:1254 msgid "Delay Import Directory" msgstr "Директоријум заÑтоја увоза" -#: peigen.c:1050 pepigen.c:1050 pex64igen.c:1050 +#: peXXigen.c:1255 msgid "CLR Runtime Header" msgstr "Заглавље ЦЛР извршавања" -#: peigen.c:1051 pepigen.c:1051 pex64igen.c:1051 +#: peXXigen.c:1256 msgid "Reserved" msgstr "РезервиÑано" -#: peigen.c:1111 pepigen.c:1111 pex64igen.c:1111 +#: peXXigen.c:1316 #, c-format msgid "" "\n" @@ -6241,7 +8410,16 @@ "\n" "ПоÑтоји табела увоза, али не могу да нађем одељак који је Ñадржи\n" -#: peigen.c:1116 pepigen.c:1116 pex64igen.c:1116 +#: peXXigen.c:1322 +#, c-format +msgid "" +"\n" +"There is an import table in %s, but that section has no contents\n" +msgstr "" +"\n" +"ПоÑтоји табела увоза у „%s“, али одељак нема Ñадржај\n" + +#: peXXigen.c:1329 #, c-format msgid "" "\n" @@ -6250,7 +8428,7 @@ "\n" "ПоÑтоји табела увоза у „%s“ на 0x%lx\n" -#: peigen.c:1158 pepigen.c:1158 pex64igen.c:1158 +#: peXXigen.c:1369 #, c-format msgid "" "\n" @@ -6259,12 +8437,12 @@ "\n" "ОпиÑник функције је откривен на почетној адреÑи: %04lx\n" -#: peigen.c:1161 pepigen.c:1161 pex64igen.c:1161 +#: peXXigen.c:1373 #, c-format msgid "\tcode-base %08lx toc (loadable/actual) %08lx/%08lx\n" msgstr "\tтабела Ñадржаја %08lx кодне оÑнове (учитљива/актуелна) %08lx/%08lx\n" -#: peigen.c:1169 pepigen.c:1169 pex64igen.c:1169 +#: peXXigen.c:1380 #, c-format msgid "" "\n" @@ -6273,7 +8451,7 @@ "\n" "Ðема одељка података премештања! ОпиÑник функције није декодиран.\n" -#: peigen.c:1174 pepigen.c:1174 pex64igen.c:1174 +#: peXXigen.c:1385 #, c-format msgid "" "\n" @@ -6282,7 +8460,7 @@ "\n" "Табеле увоза (протумачени Ñадржај одељка „%s“)\n" -#: peigen.c:1177 pepigen.c:1177 pex64igen.c:1177 +#: peXXigen.c:1388 #, c-format msgid "" " vma: Hint Time Forward DLL First\n" @@ -6291,21 +8469,21 @@ " vma: Ðајава Време Ðапред ДЛЛ Први\n" " Табела ОтиÑак Ланац Ðазив Потпрограм\n" -#: peigen.c:1225 pepigen.c:1225 pex64igen.c:1225 +#: peXXigen.c:1437 #, c-format msgid "" "\n" -"\tDLL Name: %s\n" +"\tDLL Name: %.*s\n" msgstr "" "\n" -"\tДЛЛ назив: %s\n" +"\t„DLL“ назив: %.*s\n" -#: peigen.c:1236 pepigen.c:1236 pex64igen.c:1236 +#: peXXigen.c:1453 #, c-format msgid "\tvma: Hint/Ord Member-Name Bound-To\n" msgstr "\tvma: Ðајава/Редни Ðазив члана Свезан-за\n" -#: peigen.c:1261 pepigen.c:1261 pex64igen.c:1261 +#: peXXigen.c:1478 #, c-format msgid "" "\n" @@ -6314,7 +8492,12 @@ "\n" "ПоÑтоји први потпрограм, али не могу да нађем одељак који га Ñадржи\n" -#: peigen.c:1423 pepigen.c:1423 pex64igen.c:1423 +#: peXXigen.c:1522 peXXigen.c:1561 +#, c-format +msgid "\t" +msgstr "\t<оштећење: 0x%04lx>" + +#: peXXigen.c:1654 #, c-format msgid "" "\n" @@ -6323,7 +8506,16 @@ "\n" "ПоÑтоји табела извоза, али не могу да нађем одељак који је Ñадржи\n" -#: peigen.c:1432 pepigen.c:1432 pex64igen.c:1432 +#: peXXigen.c:1660 +#, c-format +msgid "" +"\n" +"There is an export table in %s, but that section has no contents\n" +msgstr "" +"\n" +"ПоÑтоји табела извоза у „%s“, али одељак нема Ñадржај\n" + +#: peXXigen.c:1671 #, c-format msgid "" "\n" @@ -6332,7 +8524,16 @@ "\n" "ПоÑтоји табела извоза у „%s“, али не може да Ñтане у тај одељак\n" -#: peigen.c:1438 pepigen.c:1438 pex64igen.c:1438 +#: peXXigen.c:1682 +#, c-format +msgid "" +"\n" +"There is an export table in %s, but it is too small (%d)\n" +msgstr "" +"\n" +"ПоÑтоји табела извоза у „%s“, али је премала (%d)\n" + +#: peXXigen.c:1688 #, c-format msgid "" "\n" @@ -6341,7 +8542,7 @@ "\n" "ПоÑтоји табела извоза у „%s“ на 0x%lx\n" -#: peigen.c:1466 pepigen.c:1466 pex64igen.c:1466 +#: peXXigen.c:1716 #, c-format msgid "" "\n" @@ -6352,67 +8553,67 @@ "Табеле извоза (протумачени Ñадржај одељка „%s“)\n" "\n" -#: peigen.c:1470 pepigen.c:1470 pex64igen.c:1470 +#: peXXigen.c:1720 #, c-format msgid "Export Flags \t\t\t%lx\n" msgstr "ЗаÑтавице извоза \t\t%lx\n" -#: peigen.c:1473 pepigen.c:1473 pex64igen.c:1473 +#: peXXigen.c:1723 #, c-format msgid "Time/Date stamp \t\t%lx\n" msgstr "ОтиÑак времена/датума \t\t%lx\n" -#: peigen.c:1476 pepigen.c:1476 pex64igen.c:1476 +#: peXXigen.c:1727 #, c-format msgid "Major/Minor \t\t\t%d/%d\n" msgstr "Већи/Мањи \t\t\t%d/%d\n" -#: peigen.c:1479 pepigen.c:1479 pex64igen.c:1479 +#: peXXigen.c:1730 #, c-format msgid "Name \t\t\t\t" msgstr "Ðазив \t\t\t\t" -#: peigen.c:1485 pepigen.c:1485 pex64igen.c:1485 +#: peXXigen.c:1741 #, c-format msgid "Ordinal Base \t\t\t%ld\n" msgstr "ÑОÑнова редног броја\t\t%ld\n" -#: peigen.c:1488 pepigen.c:1488 pex64igen.c:1488 +#: peXXigen.c:1744 #, c-format msgid "Number in:\n" msgstr "Број улаза:\n" -#: peigen.c:1491 pepigen.c:1491 pex64igen.c:1491 +#: peXXigen.c:1747 #, c-format msgid "\tExport Address Table \t\t%08lx\n" msgstr "\tТабела адреÑа извоза \t\t%08lx\n" -#: peigen.c:1495 pepigen.c:1495 pex64igen.c:1495 +#: peXXigen.c:1751 #, c-format msgid "\t[Name Pointer/Ordinal] Table\t%08lx\n" msgstr "\tТабела [Ðазив показивача/редног броја]\t%08lx\n" -#: peigen.c:1498 pepigen.c:1498 pex64igen.c:1498 +#: peXXigen.c:1754 #, c-format msgid "Table Addresses\n" msgstr "Табела адреÑа\n" -#: peigen.c:1501 pepigen.c:1501 pex64igen.c:1501 +#: peXXigen.c:1757 #, c-format msgid "\tExport Address Table \t\t" msgstr "\tТабела адреÑа извоза \t\t" -#: peigen.c:1506 pepigen.c:1506 pex64igen.c:1506 +#: peXXigen.c:1762 #, c-format msgid "\tName Pointer Table \t\t" msgstr "\tТабела назива показивача \t\t" -#: peigen.c:1511 pepigen.c:1511 pex64igen.c:1511 +#: peXXigen.c:1767 #, c-format msgid "\tOrdinal Table \t\t\t" msgstr "\tТабела редних бројева \t\t\t" -#: peigen.c:1525 pepigen.c:1525 pex64igen.c:1525 +#: peXXigen.c:1781 #, c-format msgid "" "\n" @@ -6421,15 +8622,20 @@ "\n" "Табела адреÑе извоза —— ОÑнова редних бројева %ld\n" -#: peigen.c:1544 pepigen.c:1544 pex64igen.c:1544 +#: peXXigen.c:1790 +#, c-format +msgid "\tInvalid Export Address Table rva (0x%lx) or entry count (0x%lx)\n" +msgstr "\tÐеиÑправна табела адреÑе извоза „rva“ (0x%lx) или број уноÑа (0x%lx)\n" + +#: peXXigen.c:1809 msgid "Forwarder RVA" -msgstr "RVA преоÑлеђивача" +msgstr "„RVA“ проÑлеђивача" -#: peigen.c:1555 pepigen.c:1555 pex64igen.c:1555 +#: peXXigen.c:1821 msgid "Export RVA" -msgstr "RVA извоза" +msgstr "„RVA“ извоза" -#: peigen.c:1562 pepigen.c:1562 pex64igen.c:1562 +#: peXXigen.c:1828 #, c-format msgid "" "\n" @@ -6438,18 +8644,41 @@ "\n" "Табела [Редни/Ðазив показивача]\n" -#: peigen.c:1622 peigen.c:1805 pepigen.c:1622 pepigen.c:1805 pex64igen.c:1622 -#: pex64igen.c:1805 +#: peXXigen.c:1836 #, c-format -msgid "Warning, .pdata section size (%ld) is not a multiple of %d\n" -msgstr "Упозорење, величина одељка „.pdata“ (%ld) није производ од %d\n" +msgid "\tInvalid Name Pointer Table rva (0x%lx) or entry count (0x%lx)\n" +msgstr "\tÐеиÑправна табела назива показивача „rva“ (0x%lx) или број уноÑа (0x%lx)\n" -#: peigen.c:1629 pepigen.c:1629 pex64igen.c:1629 +#: peXXigen.c:1843 +#, c-format +msgid "\tInvalid Ordinal Table rva (0x%lx) or entry count (0x%lx)\n" +msgstr "\tÐеиÑправна табела редног „rva“ (0x%lx) или број уноÑа (0x%lx)\n" + +#: peXXigen.c:1857 +#, c-format +msgid "\t[%4ld] \n" +msgstr "\t[%4ld] <оштећен померај: %lx>\n" + +#: peXXigen.c:1911 peXXigen.c:2107 +#, c-format +msgid "warning, .pdata section size (%ld) is not a multiple of %d\n" +msgstr "упозорење, величина одељка „.pdata“ (%ld) није производ од %d\n" + +#: peXXigen.c:1915 peXXigen.c:2111 +#, c-format +msgid "" +"\n" +"The Function Table (interpreted .pdata section contents)\n" +msgstr "" +"\n" +"Табела функција (протумачени Ñадржај одељка „.pdata“)\n" + +#: peXXigen.c:1918 #, c-format msgid " vma:\t\t\tBegin Address End Address Unwind Info\n" msgstr " vma:\t\t\tÐдреÑа почетка\t ÐдреÑа краја\t\tИзложени подаци\n" -#: peigen.c:1631 pepigen.c:1631 pex64igen.c:1631 +#: peXXigen.c:1920 #, c-format msgid "" " vma:\t\tBegin End EH EH PrologEnd Exception\n" @@ -6458,22 +8687,27 @@ " vma:\t\tПочетак Крај EH EH Крај пролога Изузетак\n" " \t\tÐдреÑа ÐдреÑа Руковалац Подаци ÐдреÑа МаÑка\n" -#: peigen.c:1705 pepigen.c:1705 pex64igen.c:1705 +#: peXXigen.c:1933 +#, c-format +msgid "Virtual size of .pdata section (%ld) larger than real size (%ld)\n" +msgstr "Виртуелна величина „.pdata“ одељка (%ld) је већа од Ñтварне величине (%ld)\n" + +#: peXXigen.c:2002 #, c-format msgid " Register save millicode" msgstr " РегиÑтар чува миликод" -#: peigen.c:1708 pepigen.c:1708 pex64igen.c:1708 +#: peXXigen.c:2005 #, c-format msgid " Register restore millicode" msgstr " РегиÑтар враћа миликод" -#: peigen.c:1711 pepigen.c:1711 pex64igen.c:1711 +#: peXXigen.c:2008 #, c-format msgid " Glue code sequence" msgstr " Ðиз кода лепка" -#: peigen.c:1811 pepigen.c:1811 pex64igen.c:1811 +#: peXXigen.c:2113 #, c-format msgid "" " vma:\t\tBegin Prolog Function Flags Exception EH\n" @@ -6482,7 +8716,7 @@ " vma:\t\tПочетак Пролог Функција ЗаÑтавице Изузетак ЕХ\n" " \t\tÐдреÑа Дужина Дужина 32b извр Руковлац Подаци\n" -#: peigen.c:1937 pepigen.c:1937 pex64igen.c:1937 +#: peXXigen.c:2234 #, c-format msgid "" "\n" @@ -6493,7 +8727,7 @@ "\n" "Премештање оÑнове ПЕ датотеке (протумачени Ñадржај „.reloc“ одељка)\n" -#: peigen.c:1966 pepigen.c:1966 pex64igen.c:1966 +#: peXXigen.c:2263 #, c-format msgid "" "\n" @@ -6502,57 +8736,62 @@ "\n" "Виртуелна адреÑа: %08lx величина одломка %ld (0x%lx) Број иÑправки %ld\n" -#: peigen.c:1979 pepigen.c:1979 pex64igen.c:1979 +#: peXXigen.c:2281 #, c-format msgid "\treloc %4d offset %4x [%4lx] %s" msgstr "\tпремештање %4d померај %4x [%4lx] %s" -#: peigen.c:2023 pepigen.c:2023 pex64igen.c:2023 +#: peXXigen.c:2342 #, c-format -msgid "%*.s Entry: " -msgstr "%*.s уноÑ: " +msgid "%03x %*.s Entry: " +msgstr "„%03x %*.s“ уноÑ: " -#: peigen.c:2043 pepigen.c:2043 pex64igen.c:2043 +#: peXXigen.c:2366 #, c-format msgid "name: [val: %08lx len %d]: " msgstr "назив: [вредноÑÑ‚: %08lx дужина %d]: " -#: peigen.c:2054 pepigen.c:2054 pex64igen.c:2054 +#: peXXigen.c:2386 #, c-format -msgid "" -msgstr "<оштећена дужина ниÑке: %#x>" +msgid "\n" +msgstr "<оштећена дужина ниÑке: %#x>\n" -#: peigen.c:2057 pepigen.c:2057 pex64igen.c:2057 +#: peXXigen.c:2396 #, c-format -msgid "" -msgstr "<оштећен померај ниÑке: %#lx>" +msgid "\n" +msgstr "<оштећен померај ниÑке: %#lx>\n" -#: peigen.c:2060 pepigen.c:2060 pex64igen.c:2060 +#: peXXigen.c:2401 #, c-format msgid "ID: %#08lx" msgstr "ИД: %#08lx" -#: peigen.c:2063 pepigen.c:2063 pex64igen.c:2063 +#: peXXigen.c:2404 #, c-format msgid ", Value: %#08lx\n" msgstr ", ВредноÑÑ‚: %#08lx\n" -#: peigen.c:2074 pepigen.c:2074 pex64igen.c:2074 +#: peXXigen.c:2426 #, c-format -msgid "%*.s Leaf: Addr: %#08lx, Size: %#08lx, Codepage: %d\n" -msgstr "%*.s ЛиÑÑ‚: ÐдреÑа: %#08lx, Величина: %#08lx, Кодна Ñтраница: %d\n" +msgid "%03x %*.s Leaf: Addr: %#08lx, Size: %#08lx, Codepage: %d\n" +msgstr "%03x%*.s ЛиÑÑ‚: ÐдреÑа: %#08lx, Величина: %#08lx, Кодна Ñтраница: %d\n" -#: peigen.c:2116 pepigen.c:2116 pex64igen.c:2116 +#: peXXigen.c:2468 +#, c-format +msgid "\n" +msgstr "<непозната врÑта директоријума: %d>\n" + +#: peXXigen.c:2476 #, c-format msgid " Table: Char: %d, Time: %08lx, Ver: %d/%d, Num Names: %d, IDs: %d\n" msgstr " Табела: Знак: %d, Време: %08lx, Изд: %d/%d, Број назива: %d, ИД-ови: %d\n" -#: peigen.c:2204 pepigen.c:2204 pex64igen.c:2204 +#: peXXigen.c:2564 #, c-format msgid "Corrupt .rsrc section detected!\n" msgstr "Откривен је оштећени „.rsrc“ одељак!\n" -#: peigen.c:2220 pepigen.c:2220 pex64igen.c:2220 +#: peXXigen.c:2588 #, c-format msgid "" "\n" @@ -6561,10 +8800,78 @@ "\n" "УПОЗОРЕЊЕ: Вишак података у „.rsrc“ одељку – Виндоуз ће их занемарити:\n" +#: peXXigen.c:2594 +#, c-format +msgid " String table starts at offset: %#03x\n" +msgstr " Табела ниÑке почиње на померају: %#03x\n" + +#: peXXigen.c:2597 +#, c-format +msgid " Resources start at offset: %#03x\n" +msgstr " Изворишта почињу на померају: %#03x\n" + +#: peXXigen.c:2654 +#, c-format +msgid "" +"\n" +"There is a debug directory, but the section containing it could not be found\n" +msgstr "" +"\n" +"ПоÑтоји директоријум прочишћавања, али не могу да нађем одељак који га Ñадржи\n" + +#: peXXigen.c:2660 +#, c-format +msgid "" +"\n" +"There is a debug directory in %s, but that section has no contents\n" +msgstr "" +"\n" +"ПоÑтоји директоријум прочишћавања у „%s“, али тај одељак нема Ñадржаја\n" + +#: peXXigen.c:2667 +#, c-format +msgid "" +"\n" +"Error: section %s contains the debug data starting address but it is too small\n" +msgstr "" +"\n" +"Грешка: одељак „%s“ Ñадржи почетну адреÑу података прочишћавања али је премали\n" + +#: peXXigen.c:2672 +#, c-format +msgid "" +"\n" +"There is a debug directory in %s at 0x%lx\n" +"\n" +msgstr "" +"\n" +"ПоÑтоји директоријум прочишћавања у „%s“ на 0x%lx\n" +"\n" + +#: peXXigen.c:2679 +#, c-format +msgid "The debug data size field in the data directory is too big for the section" +msgstr "Поље величине података прочишћавања у директоријуму података је превелико за одељак" + +#: peXXigen.c:2684 +#, c-format +msgid "Type Size Rva Offset\n" +msgstr "Ð’Ñ€Ñта Величина Rva Померај\n" + +#: peXXigen.c:2731 +#, c-format +msgid "(format %c%c%c%c signature %s age %ld)\n" +msgstr "(Ð·Ð°Ð¿Ð¸Ñ %c%c%c%c Ð¿Ð¾Ñ‚Ð¿Ð¸Ñ %s ÑтароÑÑ‚ %ld)\n" + +#: peXXigen.c:2741 +#, c-format +msgid "The debug directory size is not a multiple of the debug directory entry size\n" +msgstr "Величина директоријума прочишћавања није производ величине уноÑа директоријума прочишћавања\n" + #. The MS dumpbin program reportedly ands with 0xff0f before #. printing the characteristics field. Not sure why. No reason to #. emulate it here. -#: peigen.c:2243 pepigen.c:2243 pex64igen.c:2243 +#: peXXigen.c:2825 #, c-format msgid "" "\n" @@ -6573,65 +8880,502 @@ "\n" "ОÑобеноÑти 0x%x\n" -#: peigen.c:3194 pepigen.c:3194 pex64igen.c:3194 +#: peXXigen.c:3072 +#, c-format +msgid "%pB: Data Directory size (%lx) exceeds space left in section (%)" +msgstr "%pB: Величина директоријума података (%lx) превазилази проÑтор преоÑтао у одељку (%)" + +#: peXXigen.c:3104 +msgid "failed to update file offsets in debug directory" +msgstr "ниÑам уÑпео да оÑвежим помераје датотеке у директоријуму прочишћавања" + +#: peXXigen.c:3112 +#, c-format +msgid "%pB: failed to read debug data section" +msgstr "%pB: ниÑам уÑпео да читам одељак података прочишћавања" + +#: peXXigen.c:3928 #, c-format msgid ".rsrc merge failure: duplicate string resource: %d" -msgstr "Ðије уÑпело „.rsrc“ Ñтапање: извориште удвоÑтручене ниÑке: %d" +msgstr "неуÑпело „.rsrc“ Ñтапање: извориште удвоÑтручене ниÑке: %d" -#: peigen.c:3329 pepigen.c:3329 pex64igen.c:3329 +#: peXXigen.c:4063 msgid ".rsrc merge failure: multiple non-default manifests" -msgstr "Ðије уÑпело „.rsrc“ Ñтапање: неколико не-подразумеваних иÑпољавања" +msgstr "неуÑпело „.rsrc“ Ñтапање: неколико не-подразумеваних иÑпољавања" -#: peigen.c:3347 pepigen.c:3347 pex64igen.c:3347 +#: peXXigen.c:4081 msgid ".rsrc merge failure: a directory matches a leaf" -msgstr "Ðије уÑпело „.rsrc“ Ñтапање: директоријум одговара лиÑту" +msgstr "неуÑпело „.rsrc“ Ñтапање: директоријум одговара лиÑту" -#: peigen.c:3389 pepigen.c:3389 pex64igen.c:3389 +#: peXXigen.c:4123 msgid ".rsrc merge failure: duplicate leaf" -msgstr "Ðије уÑпело „.rsrc“ Ñтапање: удвоÑтручени лиÑÑ‚" +msgstr "неуÑпело „.rsrc“ Ñтапање: удвоÑтручени лиÑÑ‚" -#: peigen.c:3391 pepigen.c:3391 pex64igen.c:3391 +#: peXXigen.c:4125 #, c-format msgid ".rsrc merge failure: duplicate leaf: %s" -msgstr "Ðије уÑпело „.rsrc“ Ñтапање: удвоÑтручени лиÑÑ‚: %s" +msgstr "неуÑпело „.rsrc“ Ñтапање: удвоÑтручени лиÑÑ‚: %s" -#: peigen.c:3457 pepigen.c:3457 pex64igen.c:3457 -msgid ".rsrc merge failure: dirs with differing characteristics\n" -msgstr "Ðије уÑпело „.rsrc“ Ñтапање: директоријуми Ñа различитим оÑобеноÑтима\n" - -#: peigen.c:3464 pepigen.c:3464 pex64igen.c:3464 -msgid ".rsrc merge failure: differing directory versions\n" -msgstr "Ðије уÑпело „.rsrc“ Ñтапање: издања директоријума Ñе разликују\n" +#: peXXigen.c:4191 +msgid ".rsrc merge failure: dirs with differing characteristics" +msgstr "неуÑпело „.rsrc“ Ñтапање: директоријуми Ñа различитим оÑобеноÑтима" + +#: peXXigen.c:4198 +msgid ".rsrc merge failure: differing directory versions" +msgstr "неуÑпело „.rsrc“ Ñтапање: издања директоријума Ñе разликују" #. Corrupted .rsrc section - cannot merge. -#: peigen.c:3537 pepigen.c:3537 pex64igen.c:3537 +#: peXXigen.c:4315 +#, c-format +msgid "%pB: .rsrc merge failure: corrupt .rsrc section" +msgstr "%pB: неуÑпело „.rsrc“ Ñтапање: оштећени „.rsrc“ одељак" + +#: peXXigen.c:4323 +#, c-format +msgid "%pB: .rsrc merge failure: unexpected .rsrc size" +msgstr "%pB: неуÑпело „.rsrc“ Ñтапање: оштећени „.rsrc“ одељак" + +#: peXXigen.c:4462 +#, c-format +msgid "%pB: unable to fill in DataDictionary[1] because .idata$2 is missing" +msgstr "%pB: не могу да попуним речник података[1] зато што недоÑтаје „.idata$2“" + +#: peXXigen.c:4482 +#, c-format +msgid "%pB: unable to fill in DataDictionary[1] because .idata$4 is missing" +msgstr "%pB: не могу да попуним речник података[1] зато што недоÑтаје „.idata$4“" + +#: peXXigen.c:4503 +#, c-format +msgid "%pB: unable to fill in DataDictionary[12] because .idata$5 is missing" +msgstr "%pB: не могу да попуним речник података[12] зато што недоÑтаје „.idata$5“" + +#: peXXigen.c:4523 +#, c-format +msgid "%pB: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE (12)] because .idata$6 is missing" +msgstr "%pB: не могу да попуним речник података[PE_IMPORT_ADDRESS_TABLE (12)] зато што недоÑтаје „.idata$6“" + +#: peXXigen.c:4565 +#, c-format +msgid "%pB: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE(12)] because .idata$6 is missing" +msgstr "%pB: не могу да попуним речник података[PE_IMPORT_ADDRESS_TABLE(12)] зато што недоÑтаје „.idata$6“" + +#: peXXigen.c:4590 #, c-format -msgid "%s: .rsrc merge failure: corrupt .rsrc section" -msgstr "%s: Ðије уÑпело „.rsrc“ Ñтапање: оштећени „.rsrc“ одељак" +msgid "%pB: unable to fill in DataDictionary[9] because __tls_used is missing" +msgstr "%pB: не могу да попуним речник података[9] зато што недоÑтаје „__tls_used“" + +#~ msgid "%pB: corrupt symbol count: %#" +#~ msgstr "%pB: оштећен број Ñимбола: %#" + +#~ msgid "%pB: not enough memory to allocate space for %# symbols of size %#" +#~ msgstr "%pB: нема довољно меморије за додељивање проÑтора за %# Ñимбола величине %#" + +#~ msgid "%pB: corrupt size field in group section header: %#" +#~ msgstr "%pB: оштећено поље величине у заглављу одељка групе: %#" + +#~ msgid "error: %pB version reference section is too large (%# bytes)" +#~ msgstr "грешка: „%pB“ одељак упуте издања је превелик (%# бајта)" + +#~ msgid "unexpected STO_SH5_ISA32 on local symbol is not handled" +#~ msgstr "неочекивано „STO_SH5_ISA32“ на меÑном Ñимболу није одрађено" + +#~ msgid "%P%X: read-only segment has dynamic IFUNC relocations; recompile with %s\n" +#~ msgstr "%P%X: одељак Ñамо за читање има динамичка „IFUNC“ премештања; поново преведите Ñа „%s“\n" + +#~ msgid "bfd_mach_o_read_symtab_symbols: unable to allocate memory for symbols" +#~ msgstr "bfd_mach_o_read_symtab_symbols: не могу да доделим меморију за Ñимболе" + +#~ msgid "error: %pB: conflicting priv spec version (major/minor/revision)." +#~ msgstr "грешка: %pB: Ñукобљавајуће лично издање одредбе (major/minor/revision)." + +#~ msgid "%B: Unknown section type in a.out.adobe file: %x\n" +#~ msgstr "%B: Ðепозната врÑта одељка у датотеци „a.out.adobe“: %x\n" + +#~ msgid "%s: Invalid relocation type exported: %d" +#~ msgstr "%s: Извезена је неиÑправна врÑта премештања: %d" + +#~ msgid "%B: Invalid relocation type imported: %d" +#~ msgstr "%B: Увезена је неиÑправна врÑта премештања: %d" + +#~ msgid "%P: %B: unexpected relocation type\n" +#~ msgstr "%P: %B: неочекивана врÑта премештања\n" + +#~ msgid "%B: unknown/unsupported relocation type %d" +#~ msgstr "%B: непозната/неподржана врÑта премештања „%d“" + +#~ msgid "%B: unsupported relocation: ALPHA_R_GPRELHIGH" +#~ msgstr "%B: неподржано премештање: „ALPHA_R_GRELHIGH“" + +#~ msgid "%B: unsupported relocation: ALPHA_R_GPRELLOW" +#~ msgstr "%B: неподржано премештање: „ALPHA_R_GRELLOW“" + +#~ msgid "%B: unable to find THUMB glue '%s' for `%s'" +#~ msgstr "%B: не могу да пронађем „THUMB“ лепак „%s“ за „%s“" + +#~ msgid "%B: unable to find ARM glue '%s' for `%s'" +#~ msgstr "%B: не могу да пронађем „ARM“ лепак „%s“ за „%s“" + +#~ msgid "" +#~ "%B(%s): warning: interworking not enabled.\n" +#~ " first occurrence: %B: thumb call to arm\n" +#~ " consider relinking with --support-old-code enabled" +#~ msgstr "" +#~ "%B(%s): упозорење: међудејÑтво није укључено.\n" +#~ " прво појављивање: %B: „thumb“ позива „arm“\n" +#~ " размотрите поновно повезивање Ñа укљученим „--support-old-code“" -#: peigen.c:3673 pepigen.c:3673 pex64igen.c:3673 -msgid "%B: unable to fill in DataDictionary[1] because .idata$2 is missing" -msgstr "%B: не могу да попуним речник података[1] зато што недоÑтаје „.idata$2“" - -#: peigen.c:3693 pepigen.c:3693 pex64igen.c:3693 -msgid "%B: unable to fill in DataDictionary[1] because .idata$4 is missing" -msgstr "%B: не могу да попуним речник података[1] зато што недоÑтаје „.idata$4“" - -#: peigen.c:3714 pepigen.c:3714 pex64igen.c:3714 -msgid "%B: unable to fill in DataDictionary[12] because .idata$5 is missing" -msgstr "%B: не могу да попуним речник података[12] зато што недоÑтаје „.idata$5“" - -#: peigen.c:3734 pepigen.c:3734 pex64igen.c:3734 -msgid "%B: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE (12)] because .idata$6 is missing" -msgstr "%B: не могу да попуним речник података[PE_IMPORT_ADDRESS_TABLE (12)] зато што недоÑтаје „.idata$6“" - -#: peigen.c:3776 pepigen.c:3776 pex64igen.c:3776 -msgid "%B: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE(12)] because .idata$6 is missing" -msgstr "%B: не могу да попуним речник података[PE_IMPORT_ADDRESS_TABLE(12)] зато што недоÑтаје „.idata$6“" - -#: peigen.c:3801 pepigen.c:3801 pex64igen.c:3801 -msgid "%B: unable to fill in DataDictionary[9] because __tls_used is missing" -msgstr "%B: не могу да попуним речник података[9] зато што недоÑтаје „__tls_used“" +#~ msgid "error: %B is compiled for APCS-%d, whereas %B is compiled for APCS-%d" +#~ msgstr "грешка: „%B“ је преведен за ÐПЦС-%d, док је „%B“ преведен за ÐПЦС-%d" + +#~ msgid "error: %B is compiled as position independent code, whereas target %B is absolute position" +#~ msgstr "грешка: „%B“ је преведен као код незавиÑан од положаја, док је циљ „%B“ апÑолутни положај" + +#~ msgid "error: %B is compiled as absolute position code, whereas target %B is position independent" +#~ msgstr "грешка: „%B“ је преведен као код апÑолутног положаја, док је циљ „%B“ незавиÑтан од положаја" + +#~ msgid "private flags = %x:" +#~ msgstr "приватне заÑтавице =%x:" + +#~ msgid " [floats passed in integer registers]" +#~ msgstr " [децималне вредноÑти Ñу проÑлеђене у региÑтре целих вредноÑти]" + +#~ msgid " [absolute position]" +#~ msgstr " [апÑолутни положај]" + +#~ msgid " [interworking flag not initialised]" +#~ msgstr " [заÑтавица међудејÑтва није покренута]" + +#~ msgid " [interworking supported]" +#~ msgstr " [међудејÑтво је подржано]" + +#~ msgid " [interworking not supported]" +#~ msgstr " [међудејÑтво није подржано]" + +#~ msgid "cannot handle R_MEM_INDIRECT reloc when using %s output" +#~ msgstr "не могу да радим Ñа „R_MEM_INDIRECT“ премештањем када кориÑтим „%s“ излаз" + +#~ msgid "relocation `%s' not yet implemented" +#~ msgstr "премештање „%s“ још није примењено" + +#~ msgid "uncertain calling convention for non-COFF symbol" +#~ msgstr "неÑигуран договор позива за не-„COFF“ Ñимбол" + +#~ msgid "unsupported reloc type" +#~ msgstr "неподржана врÑта премештања" + +#~ msgid "Unrecognized reloc" +#~ msgstr "Ðепознато премештање" + +#~ msgid "%s: unsupported relocation type 0x%02x" +#~ msgstr "%s: неподржана врÑта премештања 0x%02x" + +#~ msgid "Unrecognized reloc type 0x%x" +#~ msgstr "Ðепозната врÑта премештања 0x%x" + +#~ msgid "%s: warning: illegal symbol index %ld in relocs" +#~ msgstr "%s: упозорење: неиÑправан Ð¸Ð½Ð´ÐµÐºÑ Ñимбола %ld у премештањима" + +#~ msgid "ignoring reloc %s\n" +#~ msgstr "занемарујем премештање „%s“\n" + +#~ msgid "Dwarf Error: Bad abbrev number: %u." +#~ msgstr "„DWARF“ грешка: Лош Ñкраћени број: %u." + +#~ msgid "%B: don't know how to handle allocated, application specific section `%s' [0x%8x]" +#~ msgstr "%B: не знам како да обрадим додељен, програму Ñпецифичан одељак „%s“ [0x%8x]" + +#~ msgid "%B: don't know how to handle processor specific section `%s' [0x%8x]" +#~ msgstr "%B: не знам како да обрадим процеÑору Ñпецифичан одељак „%s“ [0x%8x]" + +#~ msgid "%B: don't know how to handle OS specific section `%s' [0x%8x]" +#~ msgstr "%B: не знам како да обрадим ÑиÑтему Ñпецифичан одељак „%s“ [0x%8x]" + +#~ msgid "%B: don't know how to handle section `%s' [0x%8x]" +#~ msgstr "%B: не знам како да обрадим одељак „%s“ [0x%8x]" + +#~ msgid "" +#~ "%B(%s): warning: interworking not enabled.\n" +#~ " first occurrence: %B: Thumb call to ARM" +#~ msgstr "" +#~ "%B(%s): упозорење: међудејÑтво није укључено.\n" +#~ " прво појављивање: %B: „Thumb“ позива на „ARM“" + +#~ msgid "" +#~ "%B(%s): warning: interworking not enabled.\n" +#~ " first occurrence: %B: ARM call to Thumb" +#~ msgstr "" +#~ "%B(%s): упозорење: међудејÑтво није укључено.\n" +#~ " прво појављивање: %B: „ARM“ позива на „Thumb“" + +#~ msgid "unable to find THUMB glue '%s' for '%s'" +#~ msgstr "не могу да пронађем „THUMB“ лепак „%s“ за „%s“" + +#~ msgid "%B(%A+0x%lx):unexpected Thumb instruction '0x%x' in TLS trampoline" +#~ msgstr "%B(%A+0x%lx): неочекивана „Thumb“ инÑтрукција „0x%x“ у „TLS“ трамбулини" + +#~ msgid "%B: Warning: Thumb BLX instruction targets thumb function '%s'." +#~ msgstr "%B: Упозорење: „Thumb BLX“ инÑтрукција циља на „thumb“ функцију „%s“." + +#~ msgid "%B(%A+0x%lx):unexpected Thumb instruction '0x%x' referenced by TLS_GOTDESC" +#~ msgstr "%B(%A+0x%lx): неочекивана „Thumb“ инÑтрукција „0x%x“ на коју упућује „TLS_GOTDESC“" + +#~ msgid " [has entry point]" +#~ msgstr " [има тачку улаза]" + +#~ msgid "error: required section '%s' not found in the linker script" +#~ msgstr "грешка: ниÑам нашао тражени одељак „%s“ у Ñкрипти повезивача" + +#~ msgid "error: %B uses FPA instructions, whereas %B does not" +#~ msgstr "грешка: „%B“ кориÑти „FPA“ инÑтрукције, али „%B“ не" + +#~ msgid "error: %B uses Maverick instructions, whereas %B does not" +#~ msgstr "грешка: „%B“ кориÑти „Maverick“ инÑтрукције, али „%B“ не" + +#~ msgid "%B: unsupported relocation type %i" +#~ msgstr "%B: врÑта премештања „%i“ није подржана" + +#~ msgid "%H: R_FRV_FUNCDESC_VALUE references dynamic symbol with nonzero addend\n" +#~ msgstr "%H: „R_FRV_FUNCDESC_VALUE“ Ñтвара упуту динамичког Ñимбола Ñа не-нултим Ñабирком\n" + +#~ msgid "%B: unsupported relocation type %i\n" +#~ msgstr "%B: врÑта премештања „%i“ није подржана\n" + +#~ msgid "%B: invalid relocation type %d" +#~ msgstr "%B: неиÑправна врÑта премештања „%d“" + +#~ msgid "%s: uses different e_flags (0x%lx) fields than previous modules (0x%lx)" +#~ msgstr "%s: кориÑти другачија поља „e_flags“ (0x%lx) него претходни модули (0x%lx)" + +#~ msgid "%B(%A+0x%lx): R_68K_TLS_LE32 relocation not permitted in shared object" +#~ msgstr "%B(%A+0x%lx): „R_68K_TLS_LE32“ премештање није допуштено у дељеним објектима" + +#~ msgid "%B: Relocation %s (%d) is not currently supported.\n" +#~ msgstr "%B: Премештање „%s“ (%d) тренутно није подржано.\n" + +#~ msgid "%B: Unknown relocation type %d\n" +#~ msgstr "%B: Ðепозната врÑта премештања „%d“\n" + +#~ msgid "%B(%A+0x%lx): R_METAG_TLS_LE/IENONPIC relocation not permitted in shared object" +#~ msgstr "%B(%A+0x%lx): „R_METAG_TLS_LE/IENONPIC“ премештање није допуштено у дељеним објектима" + +#~ msgid "%s: unknown relocation type %d" +#~ msgstr "%s: непозната врÑта премештања „%d“" + +#~ msgid "%s: The target (%s) of an %s relocation is in the wrong section (%s)" +#~ msgstr "%s: Мета (%s) премештања „%s“ је у погрешном одељку (%s)" + +#~ msgid "%B: %s\n" +#~ msgstr "%B: %s\n" + +#~ msgid "%B(%A): warning: relax is suppressed for sections of alignment %d-bytes > 4-byte." +#~ msgstr "%B(%A): упозорење: опуштање је потиÑнуто за одељке поравнања %d-бајта > 4-бајта." + +#~ msgid "%B: error: Cannot set _ITB_BASE_" +#~ msgstr "%B: грешка: Ðе могу да подеÑим „_ITB_BASE_“" + +#~ msgid "Linker: cannot init ex9 hash table error \n" +#~ msgstr "Повезивач: не могу да започнем грешку „ex9“ хеш табеле \n" + +#~ msgid "Linker: error cannot fixed ex9 relocation \n" +#~ msgstr "Повезивач: грешка не може да поправи „ex9“ премештање \n" + +#~ msgid "%s: warning: unaligned small data access. For entry: {%d, %d, %d}, addr = 0x%x, align = 0x%x." +#~ msgstr "%s: упозорење: није поравнат приÑтуп малих података. За уноÑ: {%d, %d, %d}, адреÑа = 0x%x, поравнање = 0x%x." + +#~ msgid "%P%F: failed creating ex9.it %s hash table: %E\n" +#~ msgstr "%P%F: ниÑам уÑпео да направим „ex9.it %s“ хеш табелу: %E\n" + +#~ msgid "%B(%A+0x%lx): R_NIOS2_TLS_LE16 relocation not permitted in shared object" +#~ msgstr "%B(%A+0x%lx): „R_NIOS2_TLS_LE16“ премештање није допуштено у дељеним објектима" + +#~ msgid "%P: %H: %s reloc against local symbol\n" +#~ msgstr "%P: %H: „%s“ премештање наÑпрам локалног Ñимбола\n" + +#~ msgid "Warning: %B uses soft float, %B uses single-precision hard float" +#~ msgstr "Упозорење: „%B“ кориÑти ÑофтверÑки покретни зарез, „%B“ кориÑти хардверÑки покретни зарез једне тачноÑти" + +#~ msgid "Warning: %B uses unknown floating point ABI %d" +#~ msgstr "Упозорење: „%B“ кориÑти непознати ÐБИ „%d“ покретног зареза" + +#~ msgid "Warning: %B uses unknown vector ABI %d" +#~ msgstr "Упозорење: „%B“ кориÑти непознати ÐБИ „%d“ вектора" + +#~ msgid "Warning: %B uses vector ABI \"%s\", %B uses \"%s\"" +#~ msgstr "Упозорење: „%B“ кориÑти ÐБИ „%s“ вектора, „%B“ кориÑти „%s“" + +#~ msgid "Warning: %B uses unknown small structure return convention %d" +#~ msgstr "Упозорење: „%B“ кориÑти непознати одговор малог резултата Ñтруктуре „%d“" + +#~ msgid "%P: %B: the target (%s) of a %s relocation is in the wrong output section (%s)\n" +#~ msgstr "%P: %B: мета (%s) премештања „%s“ је у погрешном излазном одељку (%s)\n" + +#~ msgid " [G10]" +#~ msgstr " [Г10]" + +#~ msgid "%s: Malformed reloc detected for section %s" +#~ msgstr "%s: Откривено је лоше премештање за одељак „%s“" + +#~ msgid "%B: IMPORT AS directive for %s conceals previous IMPORT AS" +#~ msgstr "%B: директива УВЕЗИ КÐО за „%s“ заÑењује претходно УВЕЗИ КÐО" + +#~ msgid "%B: Unrecognised .directive command: %s" +#~ msgstr "%B: Ðепозната наредба „.directive“: %s" + +#~ msgid "%s: compiled as 32-bit object and %s is 64-bit" +#~ msgstr "%s: преведен је као 32-битни објекат а „%s“ је 64-битни" + +#~ msgid "%s: compiled as 64-bit object and %s is 32-bit" +#~ msgstr "%s: преведен је као 64-битни објекат а „%s“ је 32-битни" + +#~ msgid "%s: object size does not match that of target %s" +#~ msgstr "%s: величина објекта не одговара величини циља „%s“" + +#~ msgid "%s: encountered datalabel symbol in input" +#~ msgstr "%s: наишао Ñам на Ñимбол натпиÑа датума у улазу" + +#~ msgid "PTB mismatch: a SHmedia address (bit 0 == 1)" +#~ msgstr "ПТБ не одговара: адреÑа „SHmedia“ (бит 0 == 1)" + +#~ msgid "PTA mismatch: a SHcompact address (bit 0 == 0)" +#~ msgstr "ПТРне одговара: адреÑа „SHcompact“ (бит 0 == 0)" + +#~ msgid "%s: GAS error: unexpected PTB insn with R_SH_PT_16" +#~ msgstr "%s: ГÐС грешка: неочекивано ПТБ „insn“ Ñа „R_SH_PT_16“" + +#~ msgid "%B: error: unaligned relocation type %d at %08x reloc %p\n" +#~ msgstr "%B: грешка: непоравната врÑта премештања „%d“ на %08x премештања „%p“\n" + +#~ msgid "%s: could not write out added .cranges entries" +#~ msgstr "%s: не могу да запишем додате „.cranges“ уноÑе" + +#~ msgid "%s: could not write out sorted .cranges entries" +#~ msgstr "%s: не могу да запишем поређане „.cranges“ уноÑе" + +#~ msgid " %s: 0x%v\n" +#~ msgstr " %s: 0x%v\n" + +#~ msgid "%s: 0x%v 0x%v\n" +#~ msgstr "%s: 0x%v 0x%v\n" + +#~ msgid " %s%s %s\n" +#~ msgstr " %s%s %s\n" + +#~ msgid ", 8-byte data alignment" +#~ msgstr ", 8-битно поравнање података" + +#~ msgid "%B(%A+0x%" +#~ msgstr "%B(%A+0x%" + +#~ msgid "%P: %B: cannot create stub entry %s\n" +#~ msgstr "%P: %B: не могу да Ñтворим ÑƒÐ½Ð¾Ñ Ð¾ÐºÑ€Ð°Ñ˜ÐºÐ° „%s“\n" + +#~ msgid "%P: stubs don't match calculated size\n" +#~ msgstr "%P: окрајци не одговарају израчунатој величини\n" + +#~ msgid "" +#~ "linker stubs in %u group%s\n" +#~ " branch %lu\n" +#~ " toc adjust %lu\n" +#~ " long branch %lu\n" +#~ " long toc adj %lu\n" +#~ " plt call %lu\n" +#~ " plt call toc %lu" +#~ msgstr "" +#~ "окрајци повезивача у „%u“ група „%s“\n" +#~ " грана %lu\n" +#~ " Ñ‚Ð°Ñ ÑƒÑ€ÐµÑ’ÐµÑšÐµ %lu\n" +#~ " дуга брана %lu\n" +#~ " уређење дуге Ñ‚Ð°Ñ %lu\n" +#~ " плт позив %lu\n" +#~ " плт позива Ñ‚Ð°Ñ %lu" + +#~ msgid "%P: %B: unknown relocation type %d for `%T'\n" +#~ msgstr "%P: %B: непозната врÑта премештања „%d“ за „%T“\n" + +#~ msgid "%s: error: unaligned relocation type %d at %08x reloc %08x\n" +#~ msgstr "%s: грешка: непоравната врÑта премештања „%d“ на %08x премештање %08x\n" + +#~ msgid "%B: relocation %s against undefined %s `%s' can not be used when making a shared object%s" +#~ msgstr "%B: премештање „%s“ наÑпрам недефиниÑаног „%s“ „%s“ Ñе не може кориÑтити приликом Ñтварања дељеног објекта%s" + +#~ msgid "invalid relocation type %d" +#~ msgstr "неиÑправна врÑта премештања „%d“" + +#~ msgid "Output file requires shared library `%s'\n" +#~ msgstr "Излазна датотека захтева дељену библиотеку „%s“\n" + +#~ msgid "Output file requires shared library `%s.so.%s'\n" +#~ msgstr "Излазна датотека захтева дељену библиотеку „%s.so.%s“\n" + +#~ msgid "Symbol %s not defined for fixups\n" +#~ msgstr "Симбол „%s“ није дефиниÑан за иÑправке\n" + +#~ msgid "Warning: fixup count mismatch\n" +#~ msgstr "Упозорење: број иÑправки не одговара\n" + +#~ msgid "%s: string too long (%d chars, max 65535)" +#~ msgstr "%s: ниÑка је предуга (%d знака, најв. 65535)" + +#~ msgid "%s: unrecognized symbol `%s' flags 0x%x" +#~ msgstr "%s: непознат Ñимбол „%s“ заÑтавице 0x%x" + +#~ msgid "%B: unimplemented ATI record %u for symbol %u" +#~ msgstr "%B: непримењени ÐТИ Ð·Ð°Ð¿Ð¸Ñ â€ž%u“ за Ñимбол „%u“" + +#~ msgid "%B: unexpected ATN type %d in external part" +#~ msgstr "%B: неочекивана ÐТРврÑта „%d“ у Ñпољном делу" + +#~ msgid "%B: unexpected type after ATN" +#~ msgstr "%B: неочекивана врÑта након ÐТÐ-а" + +#~ msgid "%s: can not represent section `%s' in oasys" +#~ msgstr "%s: не могу да предÑтавим одељак „%s“ у „oasys“" + +#~ msgid "%B: `ld -r' not supported with PE MIPS objects\n" +#~ msgstr "%B: „ld -r“ није подржан Ñа објектима „PE MIPS“\n" + +#~ msgid "%B: unimplemented %s\n" +#~ msgstr "%B: није примењено „%s“\n" + +#~ msgid "%B: jump too far away\n" +#~ msgstr "%B: Ñкок је превише далеко\n" + +#~ msgid "%B: bad pair/reflo after refhi\n" +#~ msgstr "%B: лоше „pair/reflo“ након „refhi“\n" + +#~ msgid "DST__K_SET_LINUM_INCR not implemented" +#~ msgstr "„DST__K_SET_LINUM_INCR“ није примењено" + +#~ msgid "DST__K_SET_LINUM_INCR_W not implemented" +#~ msgstr "„DST__K_SET_LINUM_INCR_W“ није примењено" + +#~ msgid "DST__K_RESET_LINUM_INCR not implemented" +#~ msgstr "„DST__K_RESET_LINUM_INCR“ није примењено" + +#~ msgid "DST__K_BEG_STMT_MODE not implemented" +#~ msgstr "„DST__K_BEG_STMT_MODE“ није примењено" + +#~ msgid "DST__K_END_STMT_MODE not implemented" +#~ msgstr "„DST__K_END_STMT_MODE“ није примењено" + +#~ msgid "DST__K_SET_PC not implemented" +#~ msgstr "„DST__K_SET_PC“ није примењено" + +#~ msgid "DST__K_SET_PC_W not implemented" +#~ msgstr "„DST__K_SET_PC_W“ није примењено" + +#~ msgid "DST__K_SET_PC_L not implemented" +#~ msgstr "„DST__K_SET_PC_L“ није примењено" + +#~ msgid "DST__K_SET_STMTNUM not implemented" +#~ msgstr "„DST__K_SET_STMTNUM“ није примењено" + +#~ msgid "[%u]: %u\n" +#~ msgstr "[%u]: %u\n" + +#~ msgid ": %u.%u\n" +#~ msgstr ": %u.%u\n" #~ msgid "" #~ "%B(%s): warning: interworking not enabled.\n" @@ -6643,15 +9387,9 @@ #~ msgid "DIV usage mismatch between %B and %B" #~ msgstr "incohérence d'utilisation de DIV entre %B et %B" -#~ msgid "%B: bad relocation section name `%s'" -#~ msgstr "%B: nom de section de réadressage erroné « %s »" - #~ msgid "%P: dynamic variable `%s' is zero size\n" #~ msgstr "%P: la variable dynamique « %s » a une taille nulle\n" -#~ msgid " [64-bit doubles]" -#~ msgstr " [doubles de 64 bits]" - #~ msgid " [dsp]" #~ msgstr " [dsp]" @@ -6679,24 +9417,6 @@ #~ msgid "bfd_mach_o_read_dysymtab_symbol: unable to read %lu bytes at %lu" #~ msgstr "bfd_mach_o_read_dysymtab_symbol: impossible de lire %lu octets à %lu" -#~ msgid "Mach-O header:\n" -#~ msgstr "En-tête Mach-O:\n" - -#~ msgid " magic : %08lx\n" -#~ msgstr " magique : %08lx\n" - -#~ msgid " cputype : %08lx (%s)\n" -#~ msgstr " typecpu : %08lx (%s)\n" - -#~ msgid " filetype : %08lx (%s)\n" -#~ msgstr " typefichier: %08lx (%s)\n" - -#~ msgid " ncmds : %08lx (%lu)\n" -#~ msgstr " ncmds : %08lx (%lu)\n" - -#~ msgid " sizeofcmds: %08lx\n" -#~ msgstr " taillecmds: %08lx\n" - #~ msgid " flags : %08lx (" #~ msgstr " fanions : %08lx (" @@ -6712,21 +9432,12 @@ #~ msgid "Symbol %s replaced by %s\n" #~ msgstr "Symbole %s remplacé par %s\n" -#~ msgid "%B(%A+0x%lx): cannot reach %s" -#~ msgstr "%B(%A+0x%lx): ne peut atteindre %s" - -#~ msgid "%B: warning: ignoring duplicate section `%A'\n" -#~ msgstr "%B: attention: ignore la section dupliquée «%A»\n" - #~ msgid "%B: warning: duplicate section `%A' has different size\n" #~ msgstr "%B: attention: section dupliquée «%A» avec des tailles différentes\n" #~ msgid "relocation references a different segment" #~ msgstr "la relocalisation fait référence à un segment différent" -#~ msgid "%B: relocation type %d not implemented" -#~ msgstr "%B: relocalisation de type %d pas implémentée" - #~ msgid "warning: %B and %B differ in position-dependence of data addressing" #~ msgstr "attention: %B et %B divergent sur la dépendance de la position de l'adressage des données" Binary files /tmp/tmpwlqmdap4/HCMjq_z_kj/gdb-9.1/bfd/po/uk.gmo and /tmp/tmpwlqmdap4/bi0oNuAXeo/gdb-10.2/bfd/po/uk.gmo differ diff -Nru gdb-9.1/bfd/po/uk.po gdb-10.2/bfd/po/uk.po --- gdb-9.1/bfd/po/uk.po 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/po/uk.po 2021-04-25 04:06:26.000000000 +0000 @@ -2,239 +2,252 @@ # Copyright (C) 2012 Free Software Foundation, Inc. # This file is distributed under the same license as the binutils package. # -# Yuri Chornoivan , 2012, 2014, 2017, 2018, 2019. +# Yuri Chornoivan , 2012, 2014, 2017, 2018, 2019, 2020. msgid "" msgstr "" -"Project-Id-Version: bfd 2.31.90\n" +"Project-Id-Version: bfd 2.34.90\n" "Report-Msgid-Bugs-To: bug-binutils@gnu.org\n" -"POT-Creation-Date: 2019-01-19 16:30+0000\n" -"PO-Revision-Date: 2019-01-20 11:34+0200\n" +"POT-Creation-Date: 2020-07-04 10:26+0100\n" +"PO-Revision-Date: 2020-07-04 18:20+0300\n" "Last-Translator: Yuri Chornoivan \n" -"Language-Team: Ukrainian \n" +"Language-Team: Ukrainian \n" "Language: uk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" "Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -"X-Generator: Lokalize 2.0\n" +"X-Generator: Lokalize 20.07.70\n" -#: aout-cris.c:200 +#: aout-cris.c:196 #, c-format msgid "%pB: unsupported relocation type exported: %#x" msgstr "%pB: екÑпортовано непідтримуваний тип переÑуваннÑ: %#x" -#: aout-cris.c:244 +#: aout-cris.c:242 #, c-format msgid "%pB: unsupported relocation type imported: %#x" msgstr "%pB: імпортовано непідтримуваний тип переÑуваннÑ: %#x" -#: aout-cris.c:256 +#: aout-cris.c:254 #, c-format msgid "%pB: bad relocation record imported: %d" msgstr "%pB: імпортовано помилковий Ð·Ð°Ð¿Ð¸Ñ Ð¿ÐµÑ€ÐµÑуваннÑ: %d" -#: aoutx.h:1265 aoutx.h:1618 pdp11.c:1138 pdp11.c:1399 +#: aoutx.h:1265 aoutx.h:1613 pdp11.c:1236 pdp11.c:1510 #, c-format msgid "%pB: can not represent section `%pA' in a.out object file format" msgstr "%pB: Ð²Ñ–Ð´Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ «%pA» у форматі об’єктних файлів a.out неможливе" -#: aoutx.h:1582 pdp11.c:1371 +#: aoutx.h:1577 pdp11.c:1482 #, c-format msgid "%pB: can not represent section for symbol `%s' in a.out object file format" msgstr "%pB: Ð²Ñ–Ð´Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ð´Ð»Ñ Ñимволу «%s» у форматі об’єктних файлів a.out неможливе" -#: aoutx.h:1585 vms-alpha.c:7860 +#: aoutx.h:1580 vms-alpha.c:8040 msgid "*unknown*" msgstr "*невідомо*" -#: aoutx.h:1721 +#: aoutx.h:1716 pdp11.c:1578 #, c-format msgid "%pB: invalid string offset % >= %" msgstr "%pB: некоректний зÑув Ñ€Ñдка, % >= %" -#: aoutx.h:2412 aoutx.h:2430 +#: aoutx.h:1963 +#, c-format +msgid "%pB: unsupported AOUT relocation size: %d" +msgstr "%pB: непідтримуваний розмір переÑÑƒÐ²Ð°Ð½Ð½Ñ AOUT: %d" + +#: aoutx.h:2412 aoutx.h:2430 pdp11.c:2058 #, c-format msgid "%pB: attempt to write out unknown reloc type" msgstr "%pB: Ñпроба випиÑати невідомий тип переÑуваннÑ" -#: aoutx.h:4086 +#: aoutx.h:4087 pdp11.c:3441 #, c-format msgid "%pB: unsupported relocation type" msgstr "%pB: непідтримуваний тип переÑуваннÑ" #. Unknown relocation. -#: aoutx.h:4407 coff-alpha.c:601 coff-alpha.c:1514 coff-rs6000.c:2772 +#: aoutx.h:4408 coff-alpha.c:601 coff-alpha.c:1512 coff-rs6000.c:2758 #: coff-sh.c:504 coff-tic4x.c:184 coff-tic54x.c:279 elf-hppa.h:798 -#: elf-hppa.h:826 elf-m10200.c:226 elf-m10300.c:812 elf32-arc.c:517 -#: elf32-arm.c:1943 elf32-avr.c:964 elf32-bfin.c:1061 elf32-bfin.c:4698 -#: elf32-cr16.c:653 elf32-cr16.c:683 elf32-cr16c.c:186 elf32-cris.c:467 -#: elf32-crx.c:429 elf32-csky.c:989 elf32-d10v.c:234 elf32-d30v.c:522 -#: elf32-d30v.c:544 elf32-dlx.c:548 elf32-epiphany.c:376 elf32-fr30.c:381 -#: elf32-frv.c:2558 elf32-frv.c:6262 elf32-ft32.c:306 elf32-h8300.c:302 -#: elf32-i386.c:401 elf32-ip2k.c:1245 elf32-iq2000.c:442 elf32-lm32.c:539 -#: elf32-m32c.c:305 elf32-m32r.c:1286 elf32-m32r.c:1311 elf32-m32r.c:2417 -#: elf32-m68hc11.c:390 elf32-m68hc12.c:510 elf32-m68k.c:352 elf32-mcore.c:354 -#: elf32-mcore.c:440 elf32-mep.c:389 elf32-metag.c:878 elf32-microblaze.c:692 -#: elf32-microblaze.c:969 elf32-mips.c:2229 elf32-moxie.c:137 -#: elf32-msp430.c:648 elf32-msp430.c:658 elf32-mt.c:241 elf32-nds32.c:3236 -#: elf32-nds32.c:3262 elf32-nds32.c:5173 elf32-nios2.c:3015 elf32-or1k.c:1037 -#: elf32-pj.c:325 elf32-ppc.c:898 elf32-ppc.c:911 elf32-pru.c:420 -#: elf32-rl78.c:291 elf32-rx.c:313 elf32-rx.c:322 elf32-s12z.c:292 -#: elf32-s390.c:347 elf32-sh.c:438 elf32-spu.c:160 elf32-tic6x.c:1508 -#: elf32-tic6x.c:1518 elf32-tic6x.c:1537 elf32-tic6x.c:1547 elf32-tic6x.c:2642 -#: elf32-tilepro.c:803 elf32-v850.c:1899 elf32-v850.c:1921 elf32-v850.c:4270 -#: elf32-vax.c:290 elf32-visium.c:482 elf32-wasm32.c:105 elf32-xc16x.c:250 -#: elf32-xgate.c:418 elf32-xstormy16.c:395 elf32-xtensa.c:459 -#: elf32-xtensa.c:493 elf64-alpha.c:1112 elf64-alpha.c:4101 elf64-alpha.c:4249 -#: elf64-ia64-vms.c:254 elf64-ia64-vms.c:3440 elf64-mips.c:3958 -#: elf64-mips.c:3974 elf64-mmix.c:1264 elf64-nfp.c:238 elf64-ppc.c:921 -#: elf64-ppc.c:1209 elf64-ppc.c:1218 elf64-s390.c:328 elf64-s390.c:378 -#: elf64-x86-64.c:285 elfn32-mips.c:3786 elfxx-ia64.c:324 elfxx-riscv.c:955 -#: elfxx-sparc.c:589 elfxx-sparc.c:639 elfxx-tilegx.c:912 elfxx-tilegx.c:952 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:2125 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:2223 -#: elf32-ia64.c:210 elf32-ia64.c:3862 elf64-ia64.c:210 elf64-ia64.c:3862 +#: elf-hppa.h:826 elf-m10200.c:226 elf-m10300.c:812 elf32-arc.c:532 +#: elf32-arm.c:1985 elf32-avr.c:962 elf32-bfin.c:1062 elf32-bfin.c:4677 +#: elf32-cr16.c:654 elf32-cr16.c:684 elf32-cris.c:467 elf32-crx.c:429 +#: elf32-csky.c:990 elf32-d10v.c:234 elf32-d30v.c:522 elf32-d30v.c:544 +#: elf32-dlx.c:546 elf32-epiphany.c:372 elf32-fr30.c:381 elf32-frv.c:2558 +#: elf32-frv.c:6239 elf32-ft32.c:306 elf32-h8300.c:302 elf32-i386.c:400 +#: elf32-ip2k.c:1240 elf32-iq2000.c:442 elf32-lm32.c:495 elf32-m32c.c:305 +#: elf32-m32r.c:1286 elf32-m32r.c:1311 elf32-m32r.c:2232 elf32-m68hc11.c:390 +#: elf32-m68hc12.c:510 elf32-m68k.c:354 elf32-mcore.c:354 elf32-mcore.c:440 +#: elf32-mep.c:389 elf32-metag.c:874 elf32-microblaze.c:692 +#: elf32-microblaze.c:965 elf32-mips.c:2229 elf32-moxie.c:137 +#: elf32-msp430.c:653 elf32-msp430.c:663 elf32-mt.c:241 elf32-nds32.c:3237 +#: elf32-nds32.c:3263 elf32-nds32.c:5033 elf32-nios2.c:3022 elf32-or1k.c:1040 +#: elf32-pj.c:326 elf32-ppc.c:901 elf32-ppc.c:914 elf32-pru.c:423 +#: elf32-rl78.c:291 elf32-rx.c:313 elf32-rx.c:322 elf32-s12z.c:296 +#: elf32-s390.c:347 elf32-sh.c:438 elf32-spu.c:163 elf32-tic6x.c:1498 +#: elf32-tic6x.c:1508 elf32-tic6x.c:1527 elf32-tic6x.c:1537 elf32-tic6x.c:2583 +#: elf32-tilepro.c:800 elf32-v850.c:1898 elf32-v850.c:1920 elf32-v850.c:4270 +#: elf32-vax.c:290 elf32-visium.c:481 elf32-wasm32.c:105 elf32-xc16x.c:250 +#: elf32-xgate.c:418 elf32-xstormy16.c:395 elf32-xtensa.c:522 +#: elf32-xtensa.c:556 elf32-z80.c:331 elf64-alpha.c:1113 elf64-alpha.c:4067 +#: elf64-alpha.c:4215 elf64-bpf.c:322 elf64-ia64-vms.c:254 +#: elf64-ia64-vms.c:3429 elf64-mips.c:3958 elf64-mips.c:3974 elf64-mmix.c:1264 +#: elf64-nfp.c:238 elf64-ppc.c:1014 elf64-ppc.c:1366 elf64-ppc.c:1375 +#: elf64-s390.c:328 elf64-s390.c:378 elf64-x86-64.c:281 elfn32-mips.c:3786 +#: elfxx-ia64.c:324 elfxx-riscv.c:954 elfxx-sparc.c:589 elfxx-sparc.c:639 +#: elfxx-tilegx.c:909 elfxx-tilegx.c:949 elfnn-aarch64.c:2215 +#: elfnn-aarch64.c:2313 elfnn-ia64.c:213 elfnn-ia64.c:3824 #, c-format msgid "%pB: unsupported relocation type %#x" msgstr "%pB: непідтримуваний тип переÑÑƒÐ²Ð°Ð½Ð½Ñ %#x" -#: aoutx.h:5434 pdp11.c:3694 +#: aoutx.h:5435 pdp11.c:3864 #, c-format msgid "%pB: relocatable link from %s to %s not supported" msgstr "%pB: підтримки придатних до переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ñилань з %s до %s не передбачено" -#: archive.c:2214 +#: arc-got.h:69 +#, c-format +msgid "%pB: cannot allocate memory for local GOT entries" +msgstr "%pB: не вдалоÑÑ Ñ€Ð¾Ð·Ð¼Ñ–Ñтити у пам'ÑÑ‚Ñ– локальні запиÑи GOT" + +#: archive.c:2249 msgid "warning: writing archive was slow: rewriting timestamp" msgstr "попередженнÑ: запиÑÑƒÐ²Ð°Ð½Ð½Ñ Ð°Ñ€Ñ…Ñ–Ð²Ñƒ було повільним: перезапиÑуємо чаÑову позначку" -#: archive.c:2330 linker.c:1429 +#: archive.c:2316 archive.c:2376 elflink.c:4545 linker.c:1428 #, c-format msgid "%pB: plugin needed to handle lto object" msgstr "%pB: Ð´Ð»Ñ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ об'єкта lto потрібен додаток" -#: archive.c:2559 +#: archive.c:2602 msgid "Reading archive file mod timestamp" msgstr "Ð§Ð¸Ñ‚Ð°Ð½Ð½Ñ Ñ‡Ð°Ñової позначки mod архівного файла" -#: archive.c:2583 +#: archive.c:2626 msgid "Writing updated armap timestamp" msgstr "ЗапиÑÑƒÐ²Ð°Ð½Ð½Ñ Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð¾Ñ— чаÑової позначки armap" -#: bfd.c:449 +#: bfd.c:677 msgid "no error" msgstr "без помилок" -#: bfd.c:450 +#: bfd.c:678 msgid "system call error" msgstr "помилка ÑиÑтемного виклику" -#: bfd.c:451 +#: bfd.c:679 msgid "invalid bfd target" msgstr "некоректне Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ bfd" -#: bfd.c:452 +#: bfd.c:680 msgid "file in wrong format" msgstr "файл у помилковому форматі" -#: bfd.c:453 +#: bfd.c:681 msgid "archive object file in wrong format" msgstr "архівний об’єктний файл у помилковому форматі" -#: bfd.c:454 +#: bfd.c:682 msgid "invalid operation" msgstr "некоректна діÑ" -#: bfd.c:455 +#: bfd.c:683 msgid "memory exhausted" msgstr "пам'ÑÑ‚ÑŒ вичерпано" -#: bfd.c:456 +#: bfd.c:684 msgid "no symbols" msgstr "немає Ñимволів" -#: bfd.c:457 +#: bfd.c:685 msgid "archive has no index; run ranlib to add one" msgstr "у архіві немає покажчика; запуÑÑ‚Ñ–Ñ‚ÑŒ ranlib, щоб його додати" -#: bfd.c:458 +#: bfd.c:686 msgid "no more archived files" msgstr "більше архівованих файлів немає" -#: bfd.c:459 +#: bfd.c:687 msgid "malformed archive" msgstr "архів з пошкодженим форматуваннÑм" -#: bfd.c:460 +#: bfd.c:688 msgid "DSO missing from command line" msgstr "у командному Ñ€Ñдку пропущено DSO" -#: bfd.c:461 +#: bfd.c:689 msgid "file format not recognized" msgstr "формат файла не розпізнано" -#: bfd.c:462 +#: bfd.c:690 msgid "file format is ambiguous" msgstr "формат файла Ñ” неоднозначним" -#: bfd.c:463 +#: bfd.c:691 msgid "section has no contents" msgstr "розділ не має вміÑту" -#: bfd.c:464 +#: bfd.c:692 msgid "nonrepresentable section on output" msgstr "розділ, непридатний Ð´Ð»Ñ Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ…" -#: bfd.c:465 +#: bfd.c:693 msgid "symbol needs debug section which does not exist" msgstr "Ñимвол потребує розділу діагноÑтики, Ñкого не Ñ–Ñнує" -#: bfd.c:466 +#: bfd.c:694 msgid "bad value" msgstr "помилкове значеннÑ" -#: bfd.c:467 +#: bfd.c:695 msgid "file truncated" msgstr "файл обрізано" -#: bfd.c:468 +#: bfd.c:696 msgid "file too big" msgstr "файл Ñ” надто великим" -#: bfd.c:469 +#: bfd.c:697 +msgid "sorry, cannot handle this file" +msgstr "вибачте, не вдалоÑÑ Ð¾Ð±Ñ€Ð¾Ð±Ð¸Ñ‚Ð¸ цей файл" + +#: bfd.c:698 #, c-format msgid "error reading %s: %s" msgstr "помилка під Ñ‡Ð°Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ %s: %s" -#: bfd.c:470 +#: bfd.c:699 msgid "#" msgstr "#<некоректний код помилки>" -#: bfd.c:1429 +#: bfd.c:1658 #, c-format msgid "BFD %s assertion fail %s:%d" msgstr "Оператором контролю BFD %s виÑвлено помилку %s:%d" -#: bfd.c:1442 +#: bfd.c:1671 #, c-format msgid "BFD %s internal error, aborting at %s:%d in %s\n" msgstr "Ð’Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° BFD %s, перериваємо роботу у %s:%d у %s\n" -#: bfd.c:1447 +#: bfd.c:1676 #, c-format msgid "BFD %s internal error, aborting at %s:%d\n" msgstr "Ð’Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° BFD %s, перериваємо роботу у %s:%d\n" -#: bfd.c:1449 +#: bfd.c:1678 msgid "Please report this bug.\n" msgstr "Будь лаÑка, повідомте про цю ваду.\n" -#: bfdwin.c:206 +#: bfdwin.c:207 #, c-format msgid "not mapping: data=%lx mapped=%d\n" msgstr "не відображено: дані=%lx відображено=%d\n" -#: bfdwin.c:209 +#: bfdwin.c:210 #, c-format msgid "not mapping: env var not set\n" msgstr "не відображено: не вÑтановлено змінну Ñередовища var\n" @@ -254,118 +267,113 @@ msgid "%pB: cannot handle compressed Alpha binaries; use compiler flags, or objZ, to generate uncompressed binaries" msgstr "%pB: обробка ÑтиÑнутих двійкових файлів Alpha неможлива. СкориÑтайтеÑÑ Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñми компілÑтора або objZ Ð´Ð»Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð½ÐµÑтиÑнених двійкових файлів." -#: coff-alpha.c:850 coff-alpha.c:887 coff-alpha.c:1957 coff-mips.c:950 +#: coff-alpha.c:850 coff-alpha.c:887 coff-alpha.c:1954 coff-mips.c:953 msgid "GP relative relocation used when GP not defined" msgstr "ВикориÑтано відноÑне переÑÑƒÐ²Ð°Ð½Ð½Ñ GP, втім, GP не визначено" -#: coff-alpha.c:1443 +#: coff-alpha.c:1441 msgid "using multiple gp values" msgstr "викориÑтовуєтьÑÑ Ð´ÐµÐºÑ–Ð»ÑŒÐºÐ° значень gp" -#: coff-alpha.c:1501 coff-alpha.c:1507 elf.c:9100 elf32-mcore.c:100 -#: elf32-mcore.c:455 elf32-ppc.c:7697 elf32-ppc.c:8829 elf64-ppc.c:14411 +#: coff-alpha.c:1499 coff-alpha.c:1505 elf.c:9431 elf32-mcore.c:100 +#: elf32-mcore.c:455 elf32-ppc.c:7596 elf32-ppc.c:8747 elf64-ppc.c:15962 #, c-format msgid "%pB: %s unsupported" msgstr "%pB: підтримки %s не передбачено" -#: coff-mips.c:640 elf32-mips.c:1742 elf32-score.c:430 elf32-score7.c:330 +#: coff-go32.c:156 coffswap.h:785 +#, c-format +msgid "%pB: warning: %s: line number overflow: 0x%lx > 0xffff" +msgstr "%pB: попередженнÑ: %s: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð½Ð¾Ð¼ÐµÑ€Ð° Ñ€Ñдка: 0x%lx > 0xffff" + +#: coff-mips.c:643 elf32-mips.c:1742 elf32-score.c:430 elf32-score7.c:330 #: elf64-mips.c:3451 elfn32-mips.c:3276 msgid "GP relative relocation when _gp not defined" msgstr "відноÑне переÑÑƒÐ²Ð°Ð½Ð½Ñ GP, але _gp не визначено" -#: coff-rs6000.c:2858 +#: coff-rs6000.c:2844 #, c-format msgid "%pB: TOC reloc at %# to symbol `%s' with no TOC entry" msgstr "%pB: переÑÑƒÐ²Ð°Ð½Ð½Ñ TOC за адреÑою %# до Ñимволу «%s», Ñкий немає запиÑу у TOC" -#: coff-rs6000.c:3620 coff64-rs6000.c:2145 +#: coff-rs6000.c:3607 coff64-rs6000.c:2153 #, c-format msgid "%pB: symbol `%s' has unrecognized smclas %d" msgstr "%pB: Ñимвол «%s» належить до нерозпізнаного smclas %d" -#: coff-sh.c:780 elf32-sh.c:521 +#: coff-sh.c:778 elf32-sh.c:521 #, c-format msgid "%pB: %#: warning: bad R_SH_USES offset" msgstr "%pB: %#: попередженнÑ: помилковий відÑтуп R_SH_USES" -#: coff-sh.c:791 +#: coff-sh.c:789 #, c-format msgid "%pB: %#: warning: R_SH_USES points to unrecognized insn %#x" msgstr "%pB: %#: попередженнÑ: R_SH_USES вказує на нерозпізнану інÑтрукцію %#x" -#: coff-sh.c:809 elf32-sh.c:552 +#: coff-sh.c:807 elf32-sh.c:552 #, c-format msgid "%pB: %#: warning: bad R_SH_USES load offset" msgstr "%pB: %#: попередженнÑ: помилковий відÑтуп Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ R_SH_USES" -#: coff-sh.c:834 elf32-sh.c:568 +#: coff-sh.c:832 elf32-sh.c:568 #, c-format msgid "%pB: %#: warning: could not find expected reloc" msgstr "%pB: %#: попередженнÑ: не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ очікуване переÑуваннÑ" -#: coff-sh.c:851 elf32-sh.c:597 +#: coff-sh.c:849 elf32-sh.c:597 #, c-format msgid "%pB: %#: warning: symbol in unexpected section" msgstr "%pB: %#: попередженнÑ: Ñимвол у неочікуваному розділі" -#: coff-sh.c:977 elf32-sh.c:727 +#: coff-sh.c:975 elf32-sh.c:727 #, c-format msgid "%pB: %#: warning: could not find expected COUNT reloc" msgstr "%pB: %#: попередженнÑ: не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ очікуване переÑÑƒÐ²Ð°Ð½Ð½Ñ COUNT" -#: coff-sh.c:987 elf32-sh.c:738 +#: coff-sh.c:985 elf32-sh.c:738 #, c-format msgid "%pB: %#: warning: bad count" msgstr "%pB: %#: попередженнÑ: помилковий лічильник" -#: coff-sh.c:1359 coff-sh.c:2647 elf32-sh.c:1142 elf32-sh.c:1512 +#: coff-sh.c:1356 coff-sh.c:2644 elf32-sh.c:1138 elf32-sh.c:1505 #, c-format msgid "%pB: %#: fatal: reloc overflow while relaxing" msgstr "%pB: %#: критична помилка: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð¿ÐµÑ€ÐµÑÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ñ–Ð´ Ñ‡Ð°Ñ Ð¾Ð¿Ñ‚Ð¸Ð¼Ñ–Ð·Ð°Ñ†Ñ–Ñ— розміру" -#: coff-sh.c:1454 +#: coff-sh.c:1451 #, c-format msgid "%pB: fatal: generic symbols retrieved before relaxing" msgstr "%pB: критична помилка: отримано загальні Ñимволи до оптимізації розміру" -#: coff-sh.c:2785 cofflink.c:2965 +#: coff-sh.c:2781 cofflink.c:2948 #, c-format msgid "%pB: illegal symbol index %ld in relocs" msgstr "%pB: некоректний Ñ–Ð½Ð´ÐµÐºÑ Ñимволу %ld у переÑуваннÑÑ…" -#: coff-tic4x.c:228 coff-tic54x.c:366 coffcode.h:5010 +#: coff-tic4x.c:228 coff-tic54x.c:366 coffcode.h:5085 #, c-format msgid "%pB: warning: illegal symbol index %ld in relocs" msgstr "%pB: попередженнÑ: некоректний Ñ–Ð½Ð´ÐµÐºÑ Ñимволу %ld у переÑуваннÑÑ…" -#: coff-tic80.c:441 -#, c-format -msgid "unsupported relocation type %#x" -msgstr "непідтримуваний тип переÑÑƒÐ²Ð°Ð½Ð½Ñ %#x" - -#: coff-tic80.c:672 cofflink.c:3127 -#, c-format -msgid "%pB: bad reloc address %# in section `%pA'" -msgstr "%pB: помилкова адреÑа переÑÑƒÐ²Ð°Ð½Ð½Ñ %# у розділі «%pA»" - -#: coffcode.h:954 +#: coffcode.h:961 #, c-format msgid "%pB: unable to load COMDAT section name" msgstr "%pB: не вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ назву розділу COMDAT" #. Malformed input files can trigger this test. #. cf PR 21781. -#: coffcode.h:989 +#: coffcode.h:996 #, c-format msgid "%pB: error: unexpected symbol '%s' in COMDAT section" msgstr "%pB: помилка: неочікуваний Ñимвол «%s» у розділі COMDAT" -#: coffcode.h:1001 +#: coffcode.h:1008 #, c-format msgid "%pB: warning: COMDAT symbol '%s' does not match section name '%s'" msgstr "%pB: попередженнÑ: Ñимвол COMDAT «%s» не відповідає назві розділу «%s»" -#: coffcode.h:1011 +#: coffcode.h:1018 #, c-format msgid "%pB: warning: no symbol for section '%s' found" msgstr "%pB: попередженнÑ: не знайдено Ñимволу Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ «%s»" @@ -373,311 +381,315 @@ #. Generate a warning message rather using the 'unhandled' #. variable as this will allow some .sys files generate by #. other toolchains to be processed. See bugzilla issue 196. -#: coffcode.h:1237 +#: coffcode.h:1249 #, c-format msgid "%pB: warning: ignoring section flag %s in section %s" msgstr "%pB: попередженнÑ: ігноруємо прапорець розділу %s у розділі %s" -#: coffcode.h:1306 +#: coffcode.h:1318 #, c-format msgid "%pB (%s): section flag %s (%#lx) ignored" msgstr "%pB (%s): прапорець розділу %s (%#lx) проігноровано" -#: coffcode.h:1917 +#: coffcode.h:1934 coffcode.h:1999 #, c-format msgid "%pB: warning: claims to have 0xffff relocs, without overflow" msgstr "%pB: попередженнÑ: вимога щодо 0xffff переÑувань без переповненнÑ" -#: coffcode.h:2315 +#: coffcode.h:2365 #, c-format msgid "unrecognized TI COFF target id '0x%x'" msgstr "нерозпізнаний ідентифікатор Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ TI COFF, «0x%x»" -#: coffcode.h:2599 +#: coffcode.h:2643 #, c-format msgid "%pB: reloc against a non-existent symbol index: %ld" msgstr "%pB: переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð° неÑтвореним індекÑом Ñимволу: %ld" -#: coffcode.h:2910 +#: coffcode.h:2951 #, c-format msgid "%pB: page size is too large (0x%x)" msgstr "%pB: надто великий розмір Ñторінки (0x%x)" -#: coffcode.h:3070 +#: coffcode.h:3111 #, c-format msgid "%pB: too many sections (%d)" msgstr "%pB: занадто багато розділів (%d)" -#: coffcode.h:3489 +#: coffcode.h:3530 #, c-format msgid "%pB: section %pA: string table overflow at offset %ld" msgstr "%pB: розділ %pA: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– Ñ€Ñдків за відÑтупом %ld" -#: coffcode.h:3589 +#: coffcode.h:3630 #, c-format msgid "%pB:%s section %s: alignment 2**%u not representable" msgstr "%pB:%s розділ %s: Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ 2**%u не придатне Ð´Ð»Ñ Ð¿Ñ€ÐµÐ´ÑтавленнÑ" -#: coffcode.h:4276 +#: coffcode.h:4329 #, c-format msgid "%pB: warning: line number count (%#lx) exceeds section size (%#lx)" msgstr "%pB: попередженнÑ: лічильник кількоÑÑ‚Ñ– Ñ€Ñдків (%#lx) вказує на міÑце за межами розмірів розділу (%#lx)" -#: coffcode.h:4291 +#: coffcode.h:4349 #, c-format msgid "%pB: warning: line number table read failed" msgstr "%pB: попередженнÑ: помилка Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð· таблиці номерів Ñ€Ñдків" -#: coffcode.h:4325 coffcode.h:4339 +#: coffcode.h:4383 coffcode.h:4397 #, c-format msgid "%pB: warning: illegal symbol index 0x%lx in line number entry %d" msgstr "%pB: попередженнÑ: некоректний Ñ–Ð½Ð´ÐµÐºÑ Ñимволу 0x%lx у запиÑÑ– номера Ñ€Ñдка %d" -#: coffcode.h:4353 +#: coffcode.h:4411 #, c-format msgid "%pB: warning: illegal symbol in line number entry %d" msgstr "%pB: попередженнÑ: некоректний Ñимвол у запиÑÑ– номера Ñ€Ñдка %d" -#: coffcode.h:4366 +#: coffcode.h:4424 #, c-format msgid "%pB: warning: duplicate line number information for `%s'" msgstr "%pB: попередженнÑ: Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… щодо номерів Ñ€Ñдків Ð´Ð»Ñ Â«%s»" -#: coffcode.h:4774 +#: coffcode.h:4845 #, c-format msgid "%pB: unrecognized storage class %d for %s symbol `%s'" msgstr "%pB: невідомий ÐºÐ»Ð°Ñ Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ð½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… %d Ð´Ð»Ñ Ñимволу %s «%s»" -#: coffcode.h:4904 +#: coffcode.h:4975 #, c-format msgid "warning: %pB: local symbol `%s' has no section" msgstr "попередженнÑ: %pB: локальний Ñимвол «%s» не має розділу" -#: coffcode.h:5050 +#: coffcode.h:5125 #, c-format msgid "%pB: illegal relocation type %d at address %#" msgstr "%pB: некоректний тип переÑÑƒÐ²Ð°Ð½Ð½Ñ %d за адреÑою %#" -#: coffgen.c:178 elf.c:1216 +#: coffgen.c:179 elf.c:1236 #, c-format msgid "%pB: unable to initialize compress status for section %s" msgstr "%pB: не вдалоÑÑ Ñ–Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·ÑƒÐ²Ð°Ñ‚Ð¸ Ñтан ÑтиÑÐºÐ°Ð½Ð½Ñ Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %s" -#: coffgen.c:202 elf.c:1227 +#: coffgen.c:203 elf.c:1247 #, c-format msgid "%pB: unable to initialize decompress status for section %s" msgstr "%pB: не вдалоÑÑ Ñ–Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·ÑƒÐ²Ð°Ñ‚Ð¸ Ñтан Ñ€Ð¾Ð·Ð¿Ð°ÐºÐ¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %s" -#: coffgen.c:1657 -#, c-format -msgid "%pB: corrupt symbol count: %#" -msgstr "%pB: пошкоджено лічильник Ñимволів: %#" - -#. PR 21013: Provide an error message when the alloc fails. -#: coffgen.c:1666 -#, c-format -msgid "%pB: not enough memory to allocate space for %# symbols of size %#" -msgstr "%pB: недоÑтатньо пам'ÑÑ‚Ñ– Ð´Ð»Ñ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð¼Ñ–ÑÑ†Ñ Ð´Ð»Ñ %# Ñимволів розміру %#" - -#: coffgen.c:1735 +#: coffgen.c:1704 #, c-format msgid "%pB: bad string table size %" msgstr "%pB: помилковий розмір таблиці Ñ€Ñдків %" -#: coffgen.c:1912 coffgen.c:1972 coffgen.c:1990 cofflink.c:2045 elf.c:1882 -#: xcofflink.c:4505 +#: coffgen.c:1876 coffgen.c:1936 coffgen.c:1954 cofflink.c:2024 elf.c:1921 +#: xcofflink.c:4500 msgid "" msgstr "<пошкоджено>" -#: coffgen.c:2114 +#: coffgen.c:2085 #, c-format msgid " %s" msgstr "<пошкоджені дані> %s" -#: coffgen.c:2693 elflink.c:14322 linker.c:2959 +#: coffgen.c:2675 elflink.c:14624 linker.c:2956 msgid "%F%P: already_linked_table: %E\n" msgstr "%F%P: already_linked_table: %E\n" -#: coffgen.c:3034 elflink.c:13324 +#: coffgen.c:3016 elflink.c:13617 #, c-format msgid "removing unused section '%pA' in file '%pB'" msgstr "вилучаємо невикориÑтовуваний розділ «%pA» у файлі «%pB»" -#: coffgen.c:3111 elflink.c:13542 +#: coffgen.c:3093 elflink.c:13835 msgid "warning: gc-sections option ignored" msgstr "попередженнÑ: параметр gc-sections проігноровано" -#: cofflink.c:352 +#: cofflink.c:366 #, c-format msgid "warning: symbol `%s' is both section and non-section" msgstr "попередженнÑ: Ñимвол «%s» Ñ” у розділі Ñ– поза розділом" -#: cofflink.c:454 elf64-ia64-vms.c:5203 elflink.c:4953 +#: cofflink.c:471 elf64-ia64-vms.c:5200 elflink.c:5131 #, c-format msgid "warning: type of symbol `%s' changed from %d to %d in %pB" msgstr "попередженнÑ: тип Ñимволу «%s» змінено з %d на %d у %pB" -#: cofflink.c:2373 +#: cofflink.c:2352 #, c-format msgid "%pB: relocs in section `%pA', but it has no contents" msgstr "%pB: переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñƒ розділі «%pA», але у цьому розділі немає зміÑту" -#: cofflink.c:2436 elflink.c:10810 +#: cofflink.c:2415 elflink.c:11082 #, c-format msgid "%X`%s' referenced in section `%pA' of %pB: defined in discarded section `%pA' of %pB\n" msgstr "Ðа %X«%s» поÑилаєтьÑÑ Ñ€Ð¾Ð·Ð´Ñ–Ð» «%pA» %pB: визначено у відкинутому розділі «%pA» %pB\n" -#: cofflink.c:2734 +#: cofflink.c:2717 #, c-format msgid "%pB: %pA: reloc overflow: %#x > 0xffff" msgstr "%pB: %pA: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð¿Ñ–Ð´ Ñ‡Ð°Ñ Ð¿ÐµÑ€ÐµÑуваннÑ: %#x > 0xffff" -#: cofflink.c:2742 +#: cofflink.c:2725 #, c-format msgid "%pB: warning: %pA: line number overflow: %#x > 0xffff" msgstr "%pB: попередженнÑ: %pA: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð½Ð¾Ð¼ÐµÑ€Ð° Ñ€Ñдка: %#x > 0xffff" -#: coffswap.h:789 +#: cofflink.c:3110 #, c-format -msgid "%pB: warning: %s: line number overflow: 0x%lx > 0xffff" -msgstr "%pB: попередженнÑ: %s: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð½Ð¾Ð¼ÐµÑ€Ð° Ñ€Ñдка: 0x%lx > 0xffff" +msgid "%pB: bad reloc address %# in section `%pA'" +msgstr "%pB: помилкова адреÑа переÑÑƒÐ²Ð°Ð½Ð½Ñ %# у розділі «%pA»" -#: coffswap.h:803 +#: coffswap.h:799 #, c-format msgid "%pB: %s: reloc overflow: 0x%lx > 0xffff" msgstr "%pB: %s: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð¿Ñ–Ð´ Ñ‡Ð°Ñ Ð¿ÐµÑ€ÐµÑуваннÑ: 0x%lx > 0xffff" -#: compress.c:260 +#: compress.c:271 +#, c-format +msgid "error: %pB(%pA) section size (%# bytes) is larger than file size (%# bytes)" +msgstr "помилка: розмір розділу %pB(%pA) (%# байтів) перевищує розмір файла (%# байтів)" + +#: compress.c:282 #, c-format msgid "error: %pB(%pA) is too large (%# bytes)" msgstr "помилка: %pB(%pA) Ñ” надто великим (%# байтів)" -#: cpu-arm.c:298 cpu-arm.c:310 +#: cpu-arm.c:303 cpu-arm.c:315 #, c-format msgid "error: %pB is compiled for the EP9312, whereas %pB is compiled for XScale" msgstr "помилка: %pB зібрано Ð´Ð»Ñ EP9312, а %pB зібрано Ð´Ð»Ñ XScale" -#: cpu-arm.c:446 +#: cpu-arm.c:451 #, c-format msgid "warning: unable to update contents of %s section in %pB" msgstr "попередженнÑ: не вдалоÑÑ Ð¾Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ зміÑÑ‚ розділу %s у %pB" -#: dwarf2.c:544 +#: dwarf2.c:543 #, c-format msgid "DWARF error: can't find %s section." msgstr "Помилка DWARF: не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ розділ %s." -#: dwarf2.c:579 +#: dwarf2.c:578 #, c-format msgid "DWARF error: offset (%) greater than or equal to %s size (%)" msgstr "Помилка DWARF: відÑтуп (%) Ñ” більшим або рівним за розмір %s (%)." -#: dwarf2.c:1107 +#: dwarf2.c:1165 msgid "DWARF error: info pointer extends beyond end of attributes" msgstr "Помилка DWARF: вказівник на дані виходить за кінець атрибутів" -#: dwarf2.c:1275 +#: dwarf2.c:1333 #, c-format msgid "DWARF error: invalid or unhandled FORM value: %#x" msgstr "Помилка DWARF: некоректне або непридатне до обробки Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ FORM: %#x" -#: dwarf2.c:1581 +#: dwarf2.c:1646 msgid "DWARF error: mangled line number section (bad file number)" msgstr "Помилка DWARF: пошкоджений розділ номерів Ñ€Ñдків (помилковий номер файла)" -#: dwarf2.c:1926 +#: dwarf2.c:1994 msgid "DWARF error: zero format count" msgstr "Помилка DWARF: нульовий лічильник формату" -#: dwarf2.c:1936 +#: dwarf2.c:2004 #, c-format msgid "DWARF error: data count (%) larger than buffer size" msgstr "Помилка DWARF: Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð»Ñ–Ñ‡Ð¸Ð»ÑŒÐ½Ð¸ÐºÐ° даних (%) перевищує розмір буфера" -#: dwarf2.c:1977 +#: dwarf2.c:2045 #, c-format msgid "DWARF error: unknown format content type %" msgstr "Помилка DWARF: невідомий тип вміÑту формату %" -#: dwarf2.c:2057 +#: dwarf2.c:2112 #, c-format msgid "DWARF error: line info section is too small (%)" msgstr "Помилка DWARF: розділ даних щодо Ñ€Ñдків Ñ” надто малим (%)" -#: dwarf2.c:2087 +#: dwarf2.c:2142 #, c-format msgid "DWARF error: line info data is bigger (%#) than the space remaining in the section (%#lx)" msgstr "Помилка DWARF: дані щодо Ñ€Ñдків Ñ” більшими (%#) за міÑце, Ñке лишилоÑÑ Ñƒ розділі (%#lx)" -#: dwarf2.c:2100 +#: dwarf2.c:2155 #, c-format msgid "DWARF error: unhandled .debug_line version %d" msgstr "Помилка DWARF: непридатна до обробки верÑÑ–Ñ .debug_line, %d" -#: dwarf2.c:2110 +#: dwarf2.c:2165 msgid "DWARF error: ran out of room reading prologue" msgstr "Помилка DWARF: вихід за межі облаÑÑ‚Ñ– під Ñ‡Ð°Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð²Ñтупу" -#: dwarf2.c:2128 +#: dwarf2.c:2183 #, c-format msgid "DWARF error: line info unsupported segment selector size %u" msgstr "Помилка DWARF: непідтримуваний розмір варіанта Ñегментів %u у даних щодо Ñ€Ñдка" -#: dwarf2.c:2155 +#: dwarf2.c:2210 msgid "DWARF error: invalid maximum operations per instruction" msgstr "Помилка DWARF: некоректна макÑимальна кількіÑÑ‚ÑŒ дій на команду" -#: dwarf2.c:2174 +#: dwarf2.c:2229 msgid "DWARF error: ran out of room reading opcodes" msgstr "Помилка DWARF: вихід за межі облаÑÑ‚Ñ– під Ñ‡Ð°Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ ÐºÐ¾Ð´Ñ–Ð² операцій" -#: dwarf2.c:2347 +#: dwarf2.c:2420 msgid "DWARF error: mangled line number section" msgstr "Помилка DWARF: пошкоджений розділ номерів Ñ€Ñдків" -#: dwarf2.c:2852 dwarf2.c:2913 +#: dwarf2.c:2905 +msgid "DWARF error: abstract instance recursion detected" +msgstr "Помилка DWARF: виÑвлено рекурÑÑ–ÑŽ абÑтрактним екземплÑром" + +#: dwarf2.c:2939 dwarf2.c:3033 msgid "DWARF error: invalid abstract instance DIE ref" msgstr "Помилка DWARF: некоректне поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° абÑтрактний екземплÑÑ€ DIE" -#: dwarf2.c:2889 +#: dwarf2.c:2955 #, c-format msgid "DWARF error: unable to read alt ref %" msgstr "Помилка DWARF: не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ альтернативне поÑÐ¸Ð»Ð°Ð½Ð½Ñ %" -#: dwarf2.c:2930 dwarf2.c:3103 dwarf2.c:3457 +#: dwarf2.c:3011 +#, c-format +msgid "DWARF error: unable to locate abstract instance DIE ref %" +msgstr "Помилка DWARF: не вдалоÑÑ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ Ñ€Ð¾Ð·Ñ‚Ð°ÑˆÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾ÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° абÑтрактний екземплÑÑ€ DIE %" + +#: dwarf2.c:3050 dwarf2.c:3232 dwarf2.c:3618 #, c-format msgid "DWARF error: could not find abbrev number %u" msgstr "Помилка DWARF: не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñкорочений номер %u" -#: dwarf2.c:2947 -msgid "DWARF error: abstract instance recursion detected" -msgstr "Помилка DWARF: виÑвлено рекурÑÑ–ÑŽ абÑтрактним екземплÑром" +#: dwarf2.c:3381 +#, c-format +msgid "DWARF error: could not find variable specification at offset %lx" +msgstr "Помилка DWARF: не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñпецифікацію змінних зі зÑувом %lx" -#: dwarf2.c:3376 +#: dwarf2.c:3537 #, c-format msgid "DWARF error: found dwarf version '%u', this reader only handles version 2, 3, 4 and 5 information" msgstr "Помилка DWARF: виÑвлено верÑÑ–ÑŽ DWARF «%u», але у цій функції Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð¿ÐµÑ€ÐµÐ´Ð±Ð°Ñ‡ÐµÐ½Ð¾ обробку лише верÑій даних 2, 3 Ñ– 4" -#: dwarf2.c:3420 +#: dwarf2.c:3581 #, c-format msgid "DWARF error: found address size '%u', this reader can not handle sizes greater than '%u'" msgstr "Помилка у DWARF: виÑвлено розмір адреÑи «%u», втім у функції Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð½Ðµ передбачено розмірів, що перевищують «%u»" -#: dwarf2.c:3523 +#: dwarf2.c:3685 msgid "DWARF error: DW_AT_comp_dir attribute encountered with a non-string form" msgstr "Помилка DWARF: виÑвлено атрибут DW_AT_comp_dir із нерÑдковою формою" -#: ecoff.c:971 +#: ecoff.c:982 #, c-format msgid "%pB: warning: isymMax (%ld) is greater than ifdMax (%ld)" msgstr "%pB: попередженнÑ: isymMax (%ld) перевищує ifdMax (%ld)" -#: ecoff.c:1268 +#: ecoff.c:1279 #, c-format msgid "unknown basic type %d" msgstr "невідомий оÑновний тип %d" -#: ecoff.c:1525 +#: ecoff.c:1536 #, c-format msgid "" "\n" @@ -686,7 +698,7 @@ "\n" " Символ за кінцем: %ld" -#: ecoff.c:1532 ecoff.c:1535 +#: ecoff.c:1543 ecoff.c:1546 #, c-format msgid "" "\n" @@ -695,7 +707,7 @@ "\n" " Перший Ñимвол: %ld" -#: ecoff.c:1548 +#: ecoff.c:1559 #, c-format msgid "" "\n" @@ -704,7 +716,7 @@ "\n" " Символ за кінцем: %-7ld Тип: %s" -#: ecoff.c:1555 +#: ecoff.c:1566 #, c-format msgid "" "\n" @@ -713,7 +725,7 @@ "\n" " Локальний Ñимвол: %ld" -#: ecoff.c:1563 +#: ecoff.c:1574 #, c-format msgid "" "\n" @@ -722,7 +734,7 @@ "\n" " struct; Ñимвол за кінцем: %ld" -#: ecoff.c:1568 +#: ecoff.c:1579 #, c-format msgid "" "\n" @@ -731,7 +743,7 @@ "\n" " union; Ñимвол за кінцем: %ld" -#: ecoff.c:1573 +#: ecoff.c:1584 #, c-format msgid "" "\n" @@ -740,7 +752,7 @@ "\n" " enum; Ñимвол за кінцем: %ld" -#: ecoff.c:1579 +#: ecoff.c:1590 #, c-format msgid "" "\n" @@ -749,22 +761,22 @@ "\n" " Тип: %s" -#: elf-attrs.c:446 +#: elf-attrs.c:449 #, c-format msgid "%pB: error: attribute section '%pA' too big: %#llx" msgstr "%pB: помилка: довжина розділу атрибутів «%pA» Ñ” надто великою: %#llx" -#: elf-attrs.c:487 +#: elf-attrs.c:490 #, c-format msgid "%pB: error: attribute section length too small: %" msgstr "%pB: помилка: довжина розділу атрибутів Ñ” надто малою: %" -#: elf-attrs.c:615 +#: elf-attrs.c:618 #, c-format msgid "error: %pB: object has vendor-specific contents that must be processed by the '%s' toolchain" msgstr "помилка: %pB: у об’єкті міÑÑ‚ÑÑ‚ÑŒÑÑ Ð´Ð°Ð½Ñ– у Ñпецифічному форматі, ці дані має бути оброблено набором інÑтрументів «%s»" -#: elf-attrs.c:625 +#: elf-attrs.c:628 #, c-format msgid "error: %pB: object tag '%d, %s' is incompatible with tag '%d, %s'" msgstr "помилка: %pB: мітка об’єкта «%d, %s» неÑуміÑна з міткою «%d, %s»" @@ -788,91 +800,90 @@ msgid "further warnings about FDE encoding preventing .eh_frame_hdr generation dropped" msgstr "подальші Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ Ñ‰Ð¾Ð´Ð¾ ÐºÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ FDE, Ñке заважає Ñтворенню .eh_frame_hdr, пропущено" -#: elf-eh-frame.c:1868 +#: elf-eh-frame.c:1866 #, c-format msgid "%pB: %pA not in order" msgstr "%pB: %pA Ñ” невпорÑдкованим" -#: elf-eh-frame.c:1882 +#: elf-eh-frame.c:1880 #, c-format msgid "%pB: %pA invalid input section size" msgstr "%pB: %pA некоректних розмір розділу вхідних даних" -#: elf-eh-frame.c:1890 +#: elf-eh-frame.c:1888 #, c-format msgid "%pB: %pA points past end of text section" msgstr "%pB: %pA вказує на адреÑу за кінцем текÑтового розділу" -#: elf-eh-frame.c:2139 +#: elf-eh-frame.c:2141 msgid "DW_EH_PE_datarel unspecified for this architecture" msgstr "DW_EH_PE_datarel не визначено Ð´Ð»Ñ Ñ†Ñ–Ñ”Ñ— архітектури" -#: elf-eh-frame.c:2309 +#: elf-eh-frame.c:2312 #, c-format msgid "invalid output section for .eh_frame_entry: %pA" msgstr "некоректний розділ Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñу .eh_frame_entry: %pA" -#: elf-eh-frame.c:2332 +#: elf-eh-frame.c:2335 #, c-format msgid "invalid contents in %pA section" msgstr "некоректний вміÑÑ‚ у розділі %pA" -#: elf-eh-frame.c:2488 +#: elf-eh-frame.c:2491 msgid ".eh_frame_hdr entry overflow" msgstr "Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð·Ð°Ð¿Ð¸Ñу .eh_frame_hdr" -#: elf-eh-frame.c:2490 +#: elf-eh-frame.c:2493 msgid ".eh_frame_hdr refers to overlapping FDEs" msgstr ".eh_frame_hdr поÑилаєтьÑÑ Ð½Ð° FDE, Ñкі перекриваютьÑÑ" -#: elf-ifunc.c:149 +#: elf-ifunc.c:144 #, c-format msgid "%F%P: dynamic STT_GNU_IFUNC symbol `%s' with pointer equality in `%pB' can not be used when making an executable; recompile with -fPIE and relink with -pie\n" msgstr "%F%P: динамічний Ñимвол STT_GNU_IFUNC «%s» з рівніÑÑ‚ÑŽ вказівників у «%pB» не можна викориÑтовувати під Ñ‡Ð°Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð²Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ð½Ð¾Ð³Ð¾ файла; виконайте повторну компілÑцію з -fPIE Ñ– повторне ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ -pie\n" -#: elf-m10200.c:434 elf-m10300.c:2147 elf32-avr.c:1510 elf32-bfin.c:3127 -#: elf32-cr16.c:1464 elf32-cr16c.c:783 elf32-cris.c:2033 elf32-crx.c:925 -#: elf32-d10v.c:512 elf32-epiphany.c:566 elf32-fr30.c:594 elf32-frv.c:4049 -#: elf32-ft32.c:494 elf32-h8300.c:523 elf32-ip2k.c:1482 elf32-iq2000.c:693 -#: elf32-lm32.c:1112 elf32-m32c.c:624 elf32-m32r.c:3045 elf32-m68hc1x.c:1266 -#: elf32-mep.c:526 elf32-metag.c:1990 elf32-microblaze.c:1631 -#: elf32-moxie.c:288 elf32-mt.c:402 elf32-nds32.c:6189 elf32-or1k.c:1759 -#: elf32-score.c:2733 elf32-score7.c:2542 elf32-spu.c:5083 -#: elf32-tilepro.c:3506 elf32-v850.c:2291 elf32-visium.c:681 -#: elf32-xstormy16.c:931 elf64-mmix.c:1541 elfxx-tilegx.c:3870 +#: elf-m10200.c:434 elf-m10300.c:2145 elf32-avr.c:1508 elf32-bfin.c:3126 +#: elf32-cr16.c:1464 elf32-cris.c:2033 elf32-crx.c:920 elf32-d10v.c:510 +#: elf32-epiphany.c:562 elf32-fr30.c:594 elf32-frv.c:4048 elf32-ft32.c:494 +#: elf32-h8300.c:523 elf32-ip2k.c:1477 elf32-iq2000.c:691 elf32-lm32.c:1069 +#: elf32-m32c.c:624 elf32-m32r.c:2860 elf32-m68hc1x.c:1272 elf32-mep.c:526 +#: elf32-metag.c:1986 elf32-microblaze.c:1627 elf32-moxie.c:288 elf32-mt.c:402 +#: elf32-nds32.c:6048 elf32-or1k.c:1817 elf32-score.c:2734 elf32-score7.c:2543 +#: elf32-spu.c:5083 elf32-tilepro.c:3380 elf32-v850.c:2290 elf32-visium.c:680 +#: elf32-xstormy16.c:929 elf64-bpf.c:512 elf64-mmix.c:1541 elfxx-tilegx.c:3744 msgid "internal error: out of range error" msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: вихід за межі діапазону" -#: elf-m10200.c:438 elf-m10300.c:2151 elf32-avr.c:1514 elf32-bfin.c:3131 -#: elf32-cr16.c:1468 elf32-cr16c.c:787 elf32-cris.c:2037 elf32-crx.c:929 -#: elf32-d10v.c:516 elf32-fr30.c:598 elf32-frv.c:4053 elf32-ft32.c:498 -#: elf32-h8300.c:527 elf32-iq2000.c:697 elf32-lm32.c:1116 elf32-m32c.c:628 -#: elf32-m32r.c:3049 elf32-m68hc1x.c:1270 elf32-mep.c:530 elf32-metag.c:1994 -#: elf32-microblaze.c:1635 elf32-moxie.c:292 elf32-msp430.c:1362 -#: elf32-nds32.c:6193 elf32-or1k.c:1763 elf32-score.c:2737 elf32-score7.c:2546 -#: elf32-spu.c:5087 elf32-tilepro.c:3510 elf32-v850.c:2295 elf32-visium.c:685 -#: elf32-xstormy16.c:935 elf64-mmix.c:1545 elfxx-mips.c:10469 -#: elfxx-tilegx.c:3874 +#: elf-m10200.c:438 elf-m10300.c:2149 elf32-avr.c:1512 elf32-bfin.c:3130 +#: elf32-cr16.c:1468 elf32-cris.c:2037 elf32-crx.c:924 elf32-d10v.c:514 +#: elf32-fr30.c:598 elf32-frv.c:4052 elf32-ft32.c:498 elf32-h8300.c:527 +#: elf32-iq2000.c:695 elf32-lm32.c:1073 elf32-m32c.c:628 elf32-m32r.c:2864 +#: elf32-m68hc1x.c:1276 elf32-mep.c:530 elf32-metag.c:1990 +#: elf32-microblaze.c:1631 elf32-moxie.c:292 elf32-msp430.c:1371 +#: elf32-nds32.c:6052 elf32-or1k.c:1821 elf32-score.c:2738 elf32-score7.c:2547 +#: elf32-spu.c:5087 elf32-tilepro.c:3384 elf32-v850.c:2294 elf32-visium.c:684 +#: elf32-xstormy16.c:933 elf64-mmix.c:1545 elfxx-mips.c:10576 +#: elfxx-tilegx.c:3748 msgid "internal error: unsupported relocation error" msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: непідтримувана помилка переÑуваннÑ" -#: elf-m10200.c:442 elf32-cr16.c:1472 elf32-cr16c.c:791 elf32-crx.c:933 -#: elf32-d10v.c:520 elf32-h8300.c:531 elf32-lm32.c:1120 elf32-m32r.c:3053 -#: elf32-m68hc1x.c:1274 elf32-microblaze.c:1639 elf32-nds32.c:6197 -#: elf32-score.c:2741 elf32-score7.c:2550 elf32-spu.c:5091 +#: elf-m10200.c:442 elf32-cr16.c:1472 elf32-crx.c:928 elf32-d10v.c:518 +#: elf32-h8300.c:531 elf32-lm32.c:1077 elf32-m32r.c:2868 elf32-m68hc1x.c:1280 +#: elf32-microblaze.c:1635 elf32-nds32.c:6056 elf32-score.c:2742 +#: elf32-score7.c:2551 elf32-spu.c:5091 msgid "internal error: dangerous error" msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: небезпечна помилка" -#: elf-m10200.c:446 elf-m10300.c:2168 elf32-avr.c:1522 elf32-bfin.c:3139 -#: elf32-cr16.c:1476 elf32-cr16c.c:795 elf32-cris.c:2045 elf32-crx.c:937 -#: elf32-d10v.c:524 elf32-epiphany.c:581 elf32-fr30.c:606 elf32-frv.c:4061 -#: elf32-ft32.c:506 elf32-h8300.c:535 elf32-ip2k.c:1497 elf32-iq2000.c:705 -#: elf32-lm32.c:1124 elf32-m32c.c:636 elf32-m32r.c:3057 elf32-m68hc1x.c:1278 -#: elf32-mep.c:538 elf32-metag.c:2002 elf32-microblaze.c:1643 -#: elf32-moxie.c:300 elf32-msp430.c:1370 elf32-mt.c:410 elf32-nds32.c:6201 -#: elf32-or1k.c:1771 elf32-score.c:2750 elf32-score7.c:2554 elf32-spu.c:5095 -#: elf32-tilepro.c:3518 elf32-v850.c:2315 elf32-visium.c:693 -#: elf32-xstormy16.c:943 elf64-mmix.c:1553 elfxx-tilegx.c:3882 +#: elf-m10200.c:446 elf-m10300.c:2166 elf32-avr.c:1520 elf32-bfin.c:3138 +#: elf32-cr16.c:1476 elf32-cris.c:2045 elf32-crx.c:932 elf32-d10v.c:522 +#: elf32-epiphany.c:577 elf32-fr30.c:606 elf32-frv.c:4060 elf32-ft32.c:506 +#: elf32-h8300.c:535 elf32-ip2k.c:1492 elf32-iq2000.c:703 elf32-lm32.c:1081 +#: elf32-m32c.c:636 elf32-m32r.c:2872 elf32-m68hc1x.c:1284 elf32-mep.c:538 +#: elf32-metag.c:1998 elf32-microblaze.c:1639 elf32-moxie.c:300 +#: elf32-msp430.c:1379 elf32-mt.c:410 elf32-nds32.c:6060 elf32-or1k.c:1829 +#: elf32-score.c:2751 elf32-score7.c:2555 elf32-spu.c:5095 +#: elf32-tilepro.c:3392 elf32-v850.c:2314 elf32-visium.c:692 +#: elf32-xstormy16.c:941 elf64-bpf.c:525 elf64-mmix.c:1553 elfxx-tilegx.c:3756 msgid "internal error: unknown error" msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: невідома помилка" @@ -881,38 +892,35 @@ msgid "%pB: unsupported transition from %s to %s" msgstr "%pB: непідтримуваний перехід з %s до %s" -#: elf-m10300.c:1198 +#: elf-m10300.c:1196 #, c-format msgid "%pB: %s' accessed both as normal and thread local symbol" msgstr "%pB: доÑтуп до «%s» виконуєтьÑÑ Ñк до звичайного Ñимволу та локального Ð´Ð»Ñ Ð¿Ð¾Ñ‚Ð¾ÐºÑƒ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ñимволу" -#: elf-m10300.c:2094 elf32-arm.c:13246 elf32-i386.c:3409 elf32-m32r.c:2539 -#: elf32-m68k.c:3899 elf32-s390.c:3211 elf32-sh.c:3800 elf32-tilepro.c:3409 -#: elf32-xtensa.c:2965 elf64-s390.c:3161 elf64-x86-64.c:3846 -#: elfxx-sparc.c:3906 elfxx-tilegx.c:3793 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:5261 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:6807 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2279 +#: elf-m10300.c:2092 elf32-arm.c:13400 elf32-i386.c:3403 elf32-m32r.c:2354 +#: elf32-m68k.c:3931 elf32-s390.c:3082 elf32-sh.c:3677 elf32-tilepro.c:3283 +#: elf32-xtensa.c:3023 elf64-s390.c:3031 elf64-x86-64.c:4062 +#: elfxx-sparc.c:3795 elfxx-tilegx.c:3667 elfnn-aarch64.c:5505 +#: elfnn-aarch64.c:7102 #, c-format msgid "%pB(%pA+%#): unresolvable %s relocation against symbol `%s'" msgstr "%pB(%pA+%#): нерозв’Ñзне переÑÑƒÐ²Ð°Ð½Ð½Ñ %s щодо Ñимволу «%s»" -#: elf-m10300.c:2156 +#: elf-m10300.c:2154 msgid "error: inappropriate relocation type for shared library (did you forget -fpic?)" msgstr "помилка: невідповідний тип переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ð±Ñ–Ð±Ð»Ñ–Ð¾Ñ‚ÐµÐºÐ¸ Ñпільного викориÑÑ‚Ð°Ð½Ð½Ñ (забули -fpic?)" -#: elf-m10300.c:2160 +#: elf-m10300.c:2158 #, c-format msgid "%pB: taking the address of protected function '%s' cannot be done when making a shared library" msgstr "%pB: не можна виконувати Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð°Ð´Ñ€ÐµÑи захищеної функції «%s» під Ñ‡Ð°Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð±Ñ–Ð±Ð»Ñ–Ð¾Ñ‚ÐµÐºÐ¸ Ñпільного викориÑтаннÑ" -#: elf-m10300.c:2163 +#: elf-m10300.c:2161 msgid "internal error: suspicious relocation type used in shared library" msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: підозріливий тип переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñƒ бібліотеці Ñпільного викориÑтаннÑ" -#: elf-m10300.c:2649 elf32-avr.c:2492 elf32-frv.c:5641 elf64-ia64-vms.c:364 -#: elfxx-sparc.c:2795 reloc.c:8185 reloc16.c:155 elf32-ia64.c:361 -#: elf64-ia64.c:361 +#: elf-m10300.c:2647 elf32-avr.c:2489 elf32-frv.c:5620 elf64-ia64-vms.c:364 +#: elfxx-sparc.c:2683 reloc.c:8244 reloc16.c:155 elfnn-ia64.c:364 msgid "%P%F: --relax and -r may not be used together\n" msgstr "%P%F: --relax Ñ– -r не можна викориÑтовувати одночаÑно\n" @@ -954,7 +962,7 @@ msgid "Removed property %W to merge %pB (0x%v) and %pB (not found)\n" msgstr "Вилучено влаÑтивіÑÑ‚ÑŒ %W Ð´Ð»Ñ Ð¾Ð±'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ %pB (0x%v) з %pB (не знайдено)\n" -#: elf-properties.c:316 elf-properties.c:396 +#: elf-properties.c:316 elf-properties.c:394 msgid "Removed property %W to merge %pB and %pB\n" msgstr "Вилучено влаÑтивіÑÑ‚ÑŒ %W Ð´Ð»Ñ Ð¾Ð±'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ %pB з %pB\n" @@ -962,115 +970,110 @@ msgid "Removed property %W to merge %pB and %pB (not found)\n" msgstr "Вилучено влаÑтивіÑÑ‚ÑŒ %W Ð´Ð»Ñ Ð¾Ð±'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ %pB з %pB (не знайдено)\n" -#: elf-properties.c:339 +#: elf-properties.c:337 msgid "Updated property %W (0x%v) to merge %pB (0x%v) and %pB (0x%v)\n" msgstr "Оновлено влаÑтивіÑÑ‚ÑŒ %W (0x%v) Ð´Ð»Ñ Ð¾Ð±'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ %pB (0x%v) з %pB (0x%v)\n" -#: elf-properties.c:348 +#: elf-properties.c:346 msgid "Updated property %W (%v) to merge %pB (0x%v) and %pB (not found)\n" msgstr "Оновлено влаÑтивіÑÑ‚ÑŒ %W (%v) Ð´Ð»Ñ Ð¾Ð±'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ %pB (0x%v) з %pB (не знайдено)\n" -#: elf-properties.c:390 +#: elf-properties.c:388 msgid "Removed property %W to merge %pB (not found) and %pB (0x%v)\n" msgstr "Вилучено влаÑтивіÑÑ‚ÑŒ %W Ð´Ð»Ñ Ð¾Ð±'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ %pB (не знайдено) з %pB (0x%v)\n" #. Merge .note.gnu.property sections. -#: elf-properties.c:552 elf-properties.c:554 +#: elf-properties.c:550 elf-properties.c:552 msgid "\n" msgstr "\n" -#: elf-properties.c:553 +#: elf-properties.c:551 msgid "Merging program properties\n" msgstr "ВлаÑтивоÑÑ‚Ñ– програми об'єднаннÑ\n" #. PR 17512: file: f057ec89. -#: elf.c:345 +#: elf.c:336 #, c-format msgid "%pB: attempt to load strings from a non-string section (number %d)" msgstr "%pB: Ñпроба Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñ€Ñдків із нерÑдкового розділу (номер %d)" -#: elf.c:360 +#: elf.c:361 #, c-format msgid "%pB: invalid string offset %u >= % for section `%s'" msgstr "%pB: некоректний відÑтуп Ñ€Ñдка, %u >= %, Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ «%s»" -#: elf.c:499 /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:7891 +#: elf.c:513 elfnn-aarch64.c:8096 #, c-format msgid "%pB symbol number %lu references nonexistent SHT_SYMTAB_SHNDX section" msgstr "%pB номер Ñимволу %lu поÑилаєтьÑÑ Ð½Ð° розділ SHT_SYMTAB_SHNDX, Ñкого не Ñ–Ñнує" -#: elf.c:664 -#, c-format -msgid "%pB: corrupt size field in group section header: %#" -msgstr "%pB: пошкоджені дані Ð¿Ð¾Ð»Ñ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ у заголовку розділу груп: %#" - -#: elf.c:680 +#: elf.c:675 #, c-format msgid "%pB: invalid size field in group section header: %#" msgstr "%pB: некоректні дані Ð¿Ð¾Ð»Ñ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ у заголовку розділу груп: %#" -#: elf.c:728 +#: elf.c:720 #, c-format msgid "%pB: invalid entry in SHT_GROUP section [%u]" msgstr "%pB: некоректний Ð·Ð°Ð¿Ð¸Ñ Ñƒ розділі SHT_GROUP [%u]" -#: elf.c:747 +#: elf.c:739 #, c-format msgid "%pB: no valid group sections found" msgstr "%pB: не знайдено коректних розділів групи" #. See PR 21957 for a reproducer. -#: elf.c:776 +#: elf.c:768 #, c-format msgid "%pB: group section '%pA' has no contents" msgstr "%pB: груповий розділ «%pA» не міÑтить даних" -#: elf.c:837 +#: elf.c:829 #, c-format msgid "%pB: no group info for section '%pA'" msgstr "%pB: немає даних щодо групи Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ «%pA»" -#: elf.c:868 elf.c:3886 elflink.c:11403 +#: elf.c:859 elf.c:3955 #, c-format msgid "%pB: warning: sh_link not set for section `%pA'" msgstr "%pB: попередженнÑ: не вÑтановлено sh_link Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ «%pA»" -#: elf.c:888 +#: elf.c:879 #, c-format msgid "%pB: sh_link [%d] in section `%pA' is incorrect" msgstr "%pB: sh_link [%d] у розділі «%pA» Ñ” некоректним" -#: elf.c:901 +#: elf.c:892 #, c-format msgid "%pB: SHT_GROUP section [index %d] has no SHF_GROUP sections" msgstr "%pB: розділ SHT_GROUP [Ñ–Ð½Ð´ÐµÐºÑ %d] не має розділів SHF_GROUP" -#: elf.c:922 +#: elf.c:913 #, c-format msgid "%pB: section group entry number %u is corrupt" msgstr "%pB: Ð·Ð°Ð¿Ð¸Ñ Ð³Ñ€ÑƒÐ¿Ð¸ розділів із номером %u пошкоджено" -#: elf.c:945 +#: elf.c:936 #, c-format msgid "%pB: unknown type [%#x] section `%s' in group [%pA]" msgstr "%pB: невідомий тип, [%#x], розділу «%s» у групі [%pA]" -#: elf.c:1408 +#: elf.c:1438 #, c-format msgid "%pB: invalid sh_link field (%d) in section number %d" msgstr "%pB: некоректне поле sh_link (%d) у розділі з номером %d" -#: elf.c:1424 +#: elf.c:1454 #, c-format msgid "%pB: failed to find link section for section %d" msgstr "%pB: не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ розділ зв’Ñзків Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %d" -#: elf.c:1451 +#: elf.c:1481 #, c-format msgid "%pB: failed to find info section for section %d" msgstr "%pB: не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ інформації Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %d" -#: elf.c:1623 +#: elf.c:1653 #, c-format msgid "" "\n" @@ -1079,7 +1082,7 @@ "\n" "Заголовок програми:\n" -#: elf.c:1665 +#: elf.c:1695 #, c-format msgid "" "\n" @@ -1088,7 +1091,7 @@ "\n" "Динамічний розділ:\n" -#: elf.c:1806 +#: elf.c:1836 #, c-format msgid "" "\n" @@ -1097,7 +1100,7 @@ "\n" "Ð’Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²ÐµÑ€Ñій:\n" -#: elf.c:1831 +#: elf.c:1861 #, c-format msgid "" "\n" @@ -1106,577 +1109,678 @@ "\n" "ПоÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° верÑÑ–Ñ—:\n" -#: elf.c:1836 +#: elf.c:1866 #, c-format msgid " required from %s:\n" msgstr " потрібні %s:\n" -#: elf.c:2037 +#: elf.c:2082 #, c-format msgid "%pB: warning: loop in section dependencies detected" msgstr "%pB: попередженнÑ: виÑвлено зацикленіÑÑ‚ÑŒ залежноÑтей розділу" -#: elf.c:2145 +#: elf.c:2190 #, c-format msgid "%pB: warning: multiple symbol tables detected - ignoring the table in section %u" msgstr "%pB: попередженнÑ: виÑвлено декілька таблиць Ñимволів — ігноруємо таблицю у розділі %u" -#: elf.c:2229 +#: elf.c:2274 #, c-format msgid "%pB: warning: multiple dynamic symbol tables detected - ignoring the table in section %u" msgstr "%pB: попередженнÑ: виÑвлено декілька таблиць динамічних Ñимволів — ігноруємо таблицю у розділі %u" -#: elf.c:2342 +#: elf.c:2387 #, c-format msgid "%pB: invalid link %u for reloc section %s (index %u)" msgstr "%pB: некоректне поÑÐ¸Ð»Ð°Ð½Ð½Ñ %u Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ переÑÑƒÐ²Ð°Ð½Ð½Ñ %s (Ñ–Ð½Ð´ÐµÐºÑ %u)" -#: elf.c:2504 elf.c:2519 elf.c:2530 elf.c:2543 +#: elf.c:2478 +#, c-format +msgid "%pB: warning: secondary relocation section '%s' for section %pA found - ignoring" +msgstr "%pB: попередженнÑ: знайдено розділ вторинних переÑувань «%s» Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %pA — ігноруємо" + +#: elf.c:2562 elf.c:2577 elf.c:2588 elf.c:2601 #, c-format msgid "%pB: unknown type [%#x] section `%s'" msgstr "%pB: розділ невідомого типу [%#x], «%s»" -#: elf.c:3248 +#: elf.c:3308 #, c-format msgid "%pB: error: alignment power %d of section `%pA' is too big" msgstr "%pB: помилка: Ñтепінь Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ %d розділу «%pA» Ñ” надто великою" -#: elf.c:3278 +#: elf.c:3341 #, c-format msgid "warning: section `%pA' type changed to PROGBITS" msgstr "попередженнÑ: тип розділу «%pA» змінено на PROGBITS" -#: elf.c:3754 +#: elf.c:3824 #, c-format msgid "%pB: too many sections: %u" msgstr "%pB: занадто багато розділів %u" -#: elf.c:3839 +#: elf.c:3909 #, c-format msgid "%pB: sh_link of section `%pA' points to discarded section `%pA' of `%pB'" msgstr "%pB: sh_link розділу «%pA» вказує на відкинутий розділ «%pA» «%pB»" -#: elf.c:3864 +#: elf.c:3934 #, c-format msgid "%pB: sh_link of section `%pA' points to removed section `%pA' of `%pB'" msgstr "%pB: sh_link розділу «%pA» вказує на вилучений розділ «%pA» «%pB»" -#: elf.c:4430 +#: elf.c:4495 #, c-format -msgid "%pB: GNU_MBIN section `%pA' has invalid sh_info field: %d" -msgstr "%pB: у розділі GNU_MBIN «%pA» міÑтитьÑÑ Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ðµ поле sh_info: %d" +msgid "%pB: GNU_MBIND section `%pA' has invalid sh_info field: %d" +msgstr "%pB: у розділі GNU_MBIND «%pA» міÑтитьÑÑ Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ðµ поле sh_info: %d" -#: elf.c:5013 +#: elf.c:5086 #, c-format msgid "%pB: TLS sections are not adjacent:" msgstr "%pB: розділи TLS не Ñ” ÑуÑідніми:" -#: elf.c:5020 +#: elf.c:5093 #, c-format msgid "\t TLS: %pA" msgstr "\t TLS: %pA" -#: elf.c:5024 +#: elf.c:5097 #, c-format msgid "\tnon-TLS: %pA" msgstr "\tне-TLS: %pA" -#: elf.c:5538 +#: elf.c:5687 #, c-format msgid "%pB: The first section in the PT_DYNAMIC segment is not the .dynamic section" msgstr "%pB: перший розділ у Ñегменті PT_DYNAMIC не Ñ” розділом .dynamic" -#: elf.c:5566 +#: elf.c:5713 #, c-format msgid "%pB: not enough room for program headers, try linking with -N" msgstr "%pB: недоÑтатньо міÑÑ†Ñ Ð´Ð»Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÑ–Ð² програми, Ñпробуйте виконати ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ð· -N" -#: elf.c:5654 +#: elf.c:5830 #, c-format msgid "%pB: section %pA lma %# adjusted to %#" msgstr "%pB: (розділ %pA) lma %# Ñкориговано до %#" -#: elf.c:5791 +#. The fix for this error is usually to edit the linker script being +#. used and set up the program headers manually. Either that or +#. leave room for the headers at the start of the SECTIONS. +#: elf.c:5967 +#, c-format +msgid "%pB: error: PHDR segment not covered by LOAD segment" +msgstr "%pB: помилка: Ñегмент PHDR не покриваєтьÑÑ Ñегментом LOAD" + +#: elf.c:6007 #, c-format msgid "%pB: section `%pA' can't be allocated in segment %d" msgstr "%pB: розділ «%pA» не може бути розподілено у Ñегменті %d" -#: elf.c:5839 +#: elf.c:6139 #, c-format msgid "%pB: warning: allocated section `%s' not in segment" msgstr "%pB: попередженнÑ: розподілений розділ «%s» перебуває за межами Ñегмента" -#: elf.c:6072 +#: elf.c:6300 #, c-format msgid "%pB: error: non-load segment %d includes file header and/or program header" msgstr "%pB: помилка: незавантажуваний Ñегмент %d включає заголовок файла Ñ–/або заголовок програми" -#. The fix for this error is usually to edit the linker script being -#. used and set up the program headers manually. Either that or -#. leave room for the headers at the start of the SECTIONS. -#: elf.c:6249 -#, c-format -msgid "%pB: error: PHDR segment not covered by LOAD segment" -msgstr "%pB: помилка: Ñегмент PHDR не покриваєтьÑÑ Ñегментом LOAD" - -#: elf.c:6606 +#: elf.c:6804 #, c-format msgid "%pB: symbol `%s' required but not present" msgstr "%pB: потрібен Ñимвол «%s», але його немає" -#: elf.c:6949 +#: elf.c:7147 #, c-format msgid "%pB: warning: empty loadable segment detected at vaddr=%#, is this intentional?" msgstr "%pB: попередженнÑ: виÑвлено порожній завантажувальний Ñегмент за vaddr=%#, так Ñ– треба?" -#: elf.c:7574 +#: elf.c:7773 #, c-format msgid "%pB: warning: segment alignment of %# is too large" msgstr "%pB: попередженнÑ: Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ Ñегмента %# Ñ” надто великим" -#: elf.c:8073 +#: elf.c:8286 +#, c-format +msgid "%pB: Unable to handle section index %x in ELF symbol. Using ABS instead." +msgstr "%pB: не вдалоÑÑ Ð¾Ð±Ñ€Ð¾Ð±Ð¸Ñ‚Ð¸ Ñ–Ð½Ð´ÐµÐºÑ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %x у Ñимволі ELF. ВикориÑтовуємо заміÑÑ‚ÑŒ нього ABS." + +#: elf.c:8316 #, c-format msgid "unable to find equivalent output section for symbol '%s' from section '%s'" msgstr "не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ рівноцінний розділ Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… Ð´Ð»Ñ Ñимволу «%s» з розділу «%s»" -#: elf.c:8421 +#: elf.c:8703 #, c-format msgid "%pB: .gnu.version_r invalid entry" msgstr "%pB: некоректний Ð·Ð°Ð¿Ð¸Ñ .gnu.version_r" -#: elf.c:8548 +#: elf.c:8836 #, c-format msgid "%pB: .gnu.version_d invalid entry" msgstr "%pB: некоректний Ð·Ð°Ð¿Ð¸Ñ .gnu.version_d" -#: elf32-arc.c:440 elf32-frv.c:6630 elf32-iq2000.c:870 elf32-m32c.c:914 -#: elf32-mt.c:562 elf32-rl78.c:1260 elf32-rx.c:3199 elf32-visium.c:841 -#: elf64-ppc.c:4950 +#: elf.c:9293 +#, c-format +msgid "%pB:%pA: error: attempting to write into an unallocated compressed section" +msgstr "%pB:%pA: помилка: Ñпроба запиÑу до нерозподіленого ÑтиÑненого розділу" + +#: elf.c:9302 +#, c-format +msgid "%pB:%pA: error: attempting to write over the end of the section" +msgstr "%pB:%pA: помилка: Ñпроба запиÑу за кінцем розділу" + +#: elf.c:9313 +#, c-format +msgid "%pB:%pA: error: attempting to write section into an empty buffer" +msgstr "%pB:%pA: помилка: Ñпроба запиÑу розділу до порожнього буфера" + +#: elf.c:12430 +msgid "GNU_MBIND section is unsupported" +msgstr "підтримки розділу GNU_MBIND не передбачено" + +#: elf.c:12432 +msgid "symbol type STT_GNU_IFUNC is unsupported" +msgstr "підтримки типу Ñимволів STT_GNU_IFUNC не передбачено" + +#: elf.c:12434 +msgid "symbol binding STB_GNU_UNIQUE is unsupported" +msgstr "підтримки прив'Ñзки Ñимволів до STB_GNU_UNIQUE не передбачено" + +#: elf.c:12618 elf64-sparc.c:123 elfcode.h:1482 +#, c-format +msgid "%pB(%pA): relocation %d has invalid symbol index %ld" +msgstr "%pB(%pA): переÑÑƒÐ²Ð°Ð½Ð½Ñ %d міÑтить некоректний Ñ–Ð½Ð´ÐµÐºÑ Ñимволу, %ld" + +#: elf.c:12692 +#, c-format +msgid "%pB(%pA): link section cannot be set because the output file does not have a symbol table" +msgstr "%pB(%pA): не можна вÑтановлювати розділ компонуваннÑ, оÑкільки у файлі результатів немає таблиці Ñимволів" + +#: elf.c:12704 +#, c-format +msgid "%pB(%pA): info section index is invalid" +msgstr "%pB(%pA): покажчик розділу info Ñ” некоректним" + +#: elf.c:12718 +#, c-format +msgid "%pB(%pA): info section index cannot be set because the section is not in the output" +msgstr "%pB(%pA): не можна вÑтановлювати Ñ–Ð½Ð´ÐµÐºÑ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ info, оÑкільки цього розділу немає у виведенні" + +#: elf.c:12784 +#, c-format +msgid "%pB(%pA): error: secondary reloc section processed twice" +msgstr "%pB(%pA): помилка: розділ вторинних переÑувань оброблено двічі" + +#: elf.c:12796 +#, c-format +msgid "%pB(%pA): error: secondary reloc section is empty!" +msgstr "%pB(%pA): помилка: розділ вторинних переÑувань Ñ” порожнім!" + +#: elf.c:12819 +#, c-format +msgid "%pB(%pA): error: internal relocs missing for secondary reloc section" +msgstr "%pB(%pA): помилка: пропущено внутрішні переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ вторинних переÑувань" + +#: elf.c:12838 +#, c-format +msgid "%pB(%pA): error: reloc table entry %u is empty" +msgstr "%pB(%pA): помилка: Ð·Ð°Ð¿Ð¸Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– переÑувань %u Ñ” порожнім" + +#: elf.c:12863 +#, c-format +msgid "%pB(%pA): error: secondary reloc %u references a missing symbol" +msgstr "%pB(%pA): помилка: вторинне переÑÑƒÐ²Ð°Ð½Ð½Ñ %u поÑилаєтьÑÑ Ð½Ð° Ñимвол, Ñкого немає" + +#: elf.c:12880 +#, c-format +msgid "%pB(%pA): error: secondary reloc %u references a deleted symbol" +msgstr "%pB(%pA): помилка: вторинне переÑÑƒÐ²Ð°Ð½Ð½Ñ %u поÑилаєтьÑÑ Ð½Ð° Ñимвол, Ñкий вилучено" + +#: elf.c:12893 +#, c-format +msgid "%pB(%pA): error: secondary reloc %u is of an unknown type" +msgstr "%pB(%pA): помилка: вторинне переÑÑƒÐ²Ð°Ð½Ð½Ñ %u належить до невідомого типу" + +#: elf32-arc.c:455 elf32-frv.c:6611 elf32-iq2000.c:868 elf32-m32c.c:914 +#: elf32-mt.c:562 elf32-rl78.c:1260 elf32-rx.c:3205 elf32-visium.c:844 +#: elf64-ppc.c:5291 #, c-format msgid "private flags = 0x%lx:" msgstr "закриті прапорці = 0x%lx:" -#: elf32-arc.c:627 +#: elf32-arc.c:642 #, c-format msgid "warning: %pB: conflicting platform configuration %s with %s" msgstr "попередженнÑ: %pB: конфлікт налаштувань платформ, %s з %s" -#: elf32-arc.c:646 +#: elf32-arc.c:661 #, c-format msgid "error: %pB: unable to merge CPU base attributes %s with %s" msgstr "помилка: %pB: не вдалоÑÑ Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ñ‚Ð¸ базові атрибути процеÑора %s з %s" -#: elf32-arc.c:683 +#: elf32-arc.c:698 #, c-format msgid "error: %pB: unable to merge ISA extension attributes %s" msgstr "помилка: %pB: не вдалоÑÑ Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ñ‚Ð¸ атрибути Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ ISA %s" -#: elf32-arc.c:707 +#: elf32-arc.c:722 #, c-format msgid "error: %pB: conflicting ISA extension attributes %s with %s" msgstr "помилка: %pB: конфлікт атрибутів Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ ISA, %s з %s" -#: elf32-arc.c:747 +#: elf32-arc.c:762 #, c-format msgid "error: %pB: cannot mix rf16 with full register set %pB" msgstr "помилка: %pB: не можна одночаÑно викориÑтовувати rf16 Ñ– повний набір регіÑтрів %pB" -#: elf32-arc.c:775 +#: elf32-arc.c:790 #, c-format msgid "error: %pB: conflicting attributes %s: %s with %s" msgstr "помилка: %pB: конфлікт атрибутів %s: %s з %s" -#: elf32-arc.c:802 +#: elf32-arc.c:817 #, c-format msgid "error: %pB: conflicting attributes %s" msgstr "помилка: %pB: конфлікт атрибутів %s" -#: elf32-arc.c:907 +#: elf32-arc.c:922 #, c-format msgid "error: attempting to link %pB with a binary %pB of different architecture" msgstr "помилка: Ñпроба ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ %pB зі виконуваним файлом %pB іншої архітектури" -#: elf32-arc.c:923 elf32-iq2000.c:846 elf32-m32c.c:889 elf32-m68hc1x.c:1385 -#: elf32-ppc.c:3865 elf64-sparc.c:711 elfxx-mips.c:15354 +#: elf32-arc.c:938 elf32-iq2000.c:844 elf32-m32c.c:889 elf32-m68hc1x.c:1391 +#: elf32-ppc.c:3867 elf64-sparc.c:722 elfxx-mips.c:15513 #, c-format msgid "%pB: uses different e_flags (%#x) fields than previous modules (%#x)" msgstr "%pB: викориÑтовуютьÑÑ Ñ–Ð½ÑˆÑ– Ð¿Ð¾Ð»Ñ e_flags (%#x) ніж у попередніх модулÑÑ… (%#x)" -#: elf32-arc.c:1012 +#: elf32-arc.c:1027 msgid "error: the ARC4 architecture is no longer supported" msgstr "помилка: підтримку архітектури ARC4 припинено" -#: elf32-arc.c:1018 +#: elf32-arc.c:1033 msgid "warning: unset or old architecture flags; use default machine" msgstr "попередженнÑ: не вÑтановлено прапорці архітектури або вÑтановлено заÑтарілі; викориÑтовуємо типову архітектуру" -#: elf32-arc.c:1151 +#: elf32-arc.c:1159 #, c-format msgid "%pB(%pA+%#): CMEM relocation to `%s' is invalid, 16 MSB should be %#x (value is %#)" msgstr "%pB(%pA+%#): переÑÑƒÐ²Ð°Ð½Ð½Ñ CMEM до «%s» Ñ” некоректним, 16 MSB має бути %#x (Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ %#)" -#: elf32-arc.c:1162 +#: elf32-arc.c:1170 #, c-format msgid "%pB(%pA+%#): CMEM relocation to `%s+%#' is invalid, 16 MSB should be %#x (value is %#)" msgstr "%pB(%pA+%#): переÑÑƒÐ²Ð°Ð½Ð½Ñ CMEM до «%s+%#» Ñ” некоректним, 16 MSB має бути %#x (Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ %#)" -#: elf32-arc.c:1876 +#: elf32-arc.c:1885 msgid "GOT and PLT relocations cannot be fixed with a non dynamic linker" msgstr "ПереÑÑƒÐ²Ð°Ð½Ð½Ñ GOT Ñ– PLT не може бути виправлено, Ñкщо компонувальник Ñ” нединамічним" -#: elf32-arc.c:1900 elf32-rl78.c:1098 elf32-rx.c:1470 +#: elf32-arc.c:1909 elf32-rl78.c:1098 elf32-rx.c:1475 #, c-format msgid "%pB(%pA): warning: unaligned access to symbol '%s' in the small data area" msgstr "%pB(%pA): попередженнÑ: невирівнÑний доÑтуп до Ñимволу «%s» у малій облаÑÑ‚Ñ– даних" -#: elf32-arc.c:1905 elf32-rl78.c:1103 elf32-rx.c:1475 +#: elf32-arc.c:1914 elf32-rl78.c:1103 elf32-rx.c:1480 #, c-format msgid "%pB(%pA): internal error: out of range error" msgstr "%pB(%pA): Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: вихід за межі діапазону" -#: elf32-arc.c:1910 elf32-rl78.c:1108 elf32-rx.c:1480 +#: elf32-arc.c:1919 elf32-rl78.c:1108 elf32-rx.c:1485 #, c-format msgid "%pB(%pA): internal error: unsupported relocation error" msgstr "%pB(%pA): Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: непідтримувана помилка переÑуваннÑ" -#: elf32-arc.c:1915 elf32-rl78.c:1113 elf32-rx.c:1485 +#: elf32-arc.c:1924 elf32-rl78.c:1113 elf32-rx.c:1490 #, c-format msgid "%pB(%pA): internal error: dangerous relocation" msgstr "%pB(%pA): Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: небезпечне переÑуваннÑ" -#: elf32-arc.c:1920 elf32-rl78.c:1118 elf32-rx.c:1490 +#: elf32-arc.c:1929 elf32-rl78.c:1118 elf32-rx.c:1495 #, c-format msgid "%pB(%pA): internal error: unknown error" msgstr "%pB(%pA): Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: невідома помилка" -#: elf32-arc.c:2013 elf32-arc.c:2081 elf32-arm.c:15323 elf32-metag.c:2257 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:7462 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:497 +#: elf32-arc.c:2022 elf32-arc.c:2090 elf32-arm.c:15513 elf32-metag.c:2253 +#: elf32-nds32.c:5498 elfnn-aarch64.c:7739 elfnn-riscv.c:483 #, c-format msgid "%pB: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC" msgstr "%pB: переÑÑƒÐ²Ð°Ð½Ð½Ñ %s щодо «%s» не можна викориÑтовувати під Ñ‡Ð°Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° Ñпільного викориÑтаннÑ; повторно зберіть з -fPIC" -#: elf32-arc.c:2949 +#: elf32-arc.c:2909 #, c-format msgid "%pB: unknown mandatory ARC object attribute %d" msgstr "%pB: невідомий обов’Ñзковий атрибути об’єкта ARC %d" -#: elf32-arc.c:2957 +#: elf32-arc.c:2917 #, c-format msgid "warning: %pB: unknown ARC object attribute %d" msgstr "попередженнÑ: %pB: невідомий атрибут об’єкта ARC %d" -#: elf32-arm.c:4304 elf32-arm.c:4338 elf32-arm.c:4357 elf32-arm.c:4409 +#: elf32-arm.c:4307 elf32-arm.c:4341 elf32-arm.c:4360 elf32-arm.c:4412 #, c-format msgid "%pB(%pA): warning: long branch veneers used in section with SHF_ARM_PURECODE section attribute is only supported for M-profile targets that implement the movw instruction" msgstr "%pB(%pA): попередженнÑ: викориÑÑ‚Ð°Ð½Ð½Ñ Ð´Ð¾Ð²Ð³Ð¸Ñ… зовнішніх гілок у розділах із атрибутом розділу SHF_ARM_PURECODE передбачено лише Ð´Ð»Ñ Ñ†Ñ–Ð»ÐµÐ¹ з профілем M, у Ñких реалізовано інÑтрукцію movw." -#: elf32-arm.c:4369 elf32-arm.c:4423 elf32-arm.c:9093 elf32-arm.c:9183 +#: elf32-arm.c:4372 elf32-arm.c:4426 elf32-arm.c:9116 elf32-arm.c:9206 #, c-format msgid "%pB(%s): warning: interworking not enabled; first occurrence: %pB: %s call to %s" msgstr "%pB(%s): попередженнÑ: ÑуміÑну роботу не увімкнено; перша згадка: %pB: виклик %s до %s" -#: elf32-arm.c:4697 +#: elf32-arm.c:4552 +#, c-format +msgid "ERROR: CMSE stub (%s section) too far (%#) from destination (%#)" +msgstr "Помилка: замінник CMSE (розділ %s) Ñ” надто далеким (%#) від Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ (%#)" + +#: elf32-arm.c:4721 #, c-format msgid "no address assigned to the veneers output section %s" msgstr "із розділом Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð½Ð°Ð·Ð¾Ð²Ð½Ñ– %s не пов’Ñзано адреÑи" -#: elf32-arm.c:4772 elf32-arm.c:6909 elf32-csky.c:3287 elf32-hppa.c:579 -#: elf32-m68hc1x.c:165 elf32-metag.c:1186 elf32-nios2.c:2208 elf64-ppc.c:3501 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:3098 +#: elf32-arm.c:4796 elf32-arm.c:6943 elf32-csky.c:3172 elf32-hppa.c:584 +#: elf32-m68hc1x.c:165 elf32-metag.c:1182 elf32-nios2.c:2204 elf64-ppc.c:3775 +#: elfnn-aarch64.c:3190 #, c-format msgid "%pB: cannot create stub entry %s" msgstr "%pB: не вдалоÑÑ Ñтворити шаблонний Ð·Ð°Ð¿Ð¸Ñ %s" -#: elf32-arm.c:5957 +#: elf32-arm.c:5017 elf32-csky.c:3514 elf32-hppa.c:734 elf32-m68hc11.c:422 +#: elf32-m68hc12.c:542 elf32-metag.c:3347 elf32-nios2.c:2497 elf64-ppc.c:11315 +#: elfnn-aarch64.c:3259 +msgid "%F%P: Could not assign '%pA' to an output section. Retry without --enable-non-contiguous-regions.\n" +msgstr "%F%P: не вдалоÑÑ Ð¿Ð¾Ð²'Ñзати «%pA» із розділом виведеннÑ. Повторіть без --enable-non-contiguous-regions.\n" + +#: elf32-arm.c:5987 #, c-format msgid "%pB: special symbol `%s' only allowed for ARMv8-M architecture or later" msgstr "%pB: Ñпеціальний Ñимвол «%s» можна викориÑтовувати лише Ð´Ð»Ñ Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ ARMv8-M Ñ– новіших архітектур" -#: elf32-arm.c:5966 +#: elf32-arm.c:5996 #, c-format msgid "%pB: invalid special symbol `%s'; it must be a global or weak function symbol" msgstr "%pB: некоректний Ñпеціальний Ñимвол «%s»; це має бути Ñимвол загальної або Ñлабкої функції" -#: elf32-arm.c:6005 +#: elf32-arm.c:6035 #, c-format msgid "%pB: invalid standard symbol `%s'; it must be a global or weak function symbol" msgstr "%pB: некоректний Ñтандартний Ñимвол «%s»; це має бути загальний (global) або Ñлабкий (weak) Ñимвол функції." -#: elf32-arm.c:6011 +#: elf32-arm.c:6041 #, c-format msgid "%pB: absent standard symbol `%s'" msgstr "%pB: немає Ñтандартного Ñимволу «%s»." -#: elf32-arm.c:6023 +#: elf32-arm.c:6053 #, c-format msgid "%pB: `%s' and its special symbol are in different sections" msgstr "%pB: «%s» Ñ– Ñ—Ñ— Ñпеціальний Ñимвол перебувають у різних розділах." -#: elf32-arm.c:6035 +#: elf32-arm.c:6065 #, c-format msgid "%pB: entry function `%s' not output" msgstr "%pB: вхідна Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ Â«%s» не виводить даних" -#: elf32-arm.c:6042 +#: elf32-arm.c:6072 #, c-format msgid "%pB: entry function `%s' is empty" msgstr "%pB: вхідна Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ Â«%s» Ñ” порожньою" -#: elf32-arm.c:6171 +#: elf32-arm.c:6201 #, c-format msgid "%pB: --in-implib only supported for Secure Gateway import libraries" msgstr "%pB: підтримку --in-implib передбачено лише Ð´Ð»Ñ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð±Ñ–Ð±Ð»Ñ–Ð¾Ñ‚ÐµÐº Secure Gateway" -#: elf32-arm.c:6217 +#: elf32-arm.c:6250 #, c-format msgid "%pB: invalid import library entry: `%s'; symbol should be absolute, global and refer to Thumb functions" msgstr "%pB: некоректний Ð·Ð°Ð¿Ð¸Ñ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð±Ñ–Ð±Ð»Ñ–Ð¾Ñ‚ÐµÐºÐ¸: «%s»; Ñимвол має бути абÑолютним, загальним Ñ– поÑилатиÑÑ Ð½Ð° функції Thumb." -#: elf32-arm.c:6239 +#: elf32-arm.c:6272 #, c-format msgid "entry function `%s' disappeared from secure code" msgstr "вхідна Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ Â«%s» зникла з безпечного коду" -#: elf32-arm.c:6263 +#: elf32-arm.c:6296 #, c-format msgid "`%s' refers to a non entry function" msgstr "«%s» поÑилаєтьÑÑ Ð½Ð° функцію без входу" -#: elf32-arm.c:6278 +#: elf32-arm.c:6311 #, c-format msgid "%pB: visibility of symbol `%s' has changed" msgstr "%pB: змінено видиміÑÑ‚ÑŒ Ñимволу «%s»" -#: elf32-arm.c:6287 +#: elf32-arm.c:6320 #, c-format msgid "%pB: incorrect size for symbol `%s'" msgstr "%pB: некоректний розмір Ñимволу «%s»" -#: elf32-arm.c:6306 +#: elf32-arm.c:6339 #, c-format msgid "offset of veneer for entry function `%s' not a multiple of its size" msgstr "зÑув обгортки Ð´Ð»Ñ Ð²Ñ…Ñ–Ð´Ð½Ð¾Ñ— функції «%s» не Ñ” кратним до Ñ—Ñ— розміру" -#: elf32-arm.c:6326 +#: elf32-arm.c:6359 msgid "new entry function(s) introduced but no output import library specified:" msgstr "впроваджено нові вхідні функції, але не вказано бібліотеки Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ…:" -#: elf32-arm.c:6334 +#: elf32-arm.c:6367 #, c-format msgid "start address of `%s' is different from previous link" msgstr "початкова адреÑа «%s» Ñ” іншою з попереднього поÑиланнÑ" -#: elf32-arm.c:7042 elf32-arm.c:7078 +#: elf32-arm.c:7076 elf32-arm.c:7111 #, c-format msgid "unable to find %s glue '%s' for '%s'" msgstr "не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñклейку %s «%s» Ð´Ð»Ñ Â«%s»" -#: elf32-arm.c:7793 +#: elf32-arm.c:7822 #, c-format msgid "%pB: BE8 images only valid in big-endian mode" msgstr "%pB: образи BE8 Ñ” чинними лише у режимі big-endian" #. Give a warning, but do as the user requests anyway. -#: elf32-arm.c:8024 +#: elf32-arm.c:8049 #, c-format msgid "%pB: warning: selected VFP11 erratum workaround is not necessary for target architecture" msgstr "%pB: попередженнÑ: вибраний ÑпоÑіб ÑƒÐ½Ð¸ÐºÐ½ÐµÐ½Ð½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸ VFP11 не Ñ” необхідним Ð´Ð»Ñ Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ призначеннÑ" -#: elf32-arm.c:8051 +#: elf32-arm.c:8076 #, c-format msgid "%pB: warning: selected STM32L4XX erratum workaround is not necessary for target architecture" msgstr "%pB: попередженнÑ: вибраний ÑпоÑіб ÑƒÐ½Ð¸ÐºÐ½ÐµÐ½Ð½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸ STM32L4XX не Ñ” необхідним Ð´Ð»Ñ Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ призначеннÑ" -#: elf32-arm.c:8588 elf32-arm.c:8608 elf32-arm.c:8674 elf32-arm.c:8693 +#: elf32-arm.c:8612 elf32-arm.c:8632 elf32-arm.c:8699 elf32-arm.c:8718 #, c-format msgid "%pB: unable to find %s veneer `%s'" msgstr "%pB: не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ обгортку %s «%s»" -#: elf32-arm.c:8900 +#: elf32-arm.c:8925 #, c-format msgid "%pB(%pA+%#x): error: multiple load detected in non-last IT block instruction: STM32L4XX veneer cannot be generated; use gcc option -mrestrict-it to generate only one instruction per IT block" msgstr "%pB(%pA+%#x): помилка: виÑвлено декілька завантажень у неоÑтанній інÑтрукції блоку IT: обгортку STM32L4XX не може бути Ñтворено. СкориÑтайтеÑÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ gcc -mrestrict-it, щоб Ñтворювати лише одну інÑтрукцію на блок IT." -#: elf32-arm.c:9000 +#: elf32-arm.c:9023 #, c-format msgid "invalid TARGET2 relocation type '%s'" msgstr "некоректний тип переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñƒ TARGET2, «%s»" #. FIXME: We ought to be able to generate thumb-1 PLT #. instructions... -#: elf32-arm.c:9802 +#: elf32-arm.c:9825 #, c-format msgid "%pB: warning: thumb-1 mode PLT generation not currently supported" msgstr "%pB: попередженнÑ: у поточній верÑÑ–Ñ— не передбачено підтримки ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ PLT у режимі thumb-1" -#: elf32-arm.c:10106 elf32-arm.c:10148 +#: elf32-arm.c:10135 elf32-arm.c:10177 #, c-format msgid "%pB(%pA+%#): unexpected %s instruction '%#lx' in TLS trampoline" msgstr "%pB(%pA+%#): неочікувана команда %s, «%#lx», у трампліні TLS" -#: elf32-arm.c:10492 +#: elf32-arm.c:10521 msgid "shared object" msgstr "Ñпільний об'єкт" -#: elf32-arm.c:10495 +#: elf32-arm.c:10524 msgid "PIE executable" msgstr "Виконуваний файл PIE" -#: elf32-arm.c:10498 +#: elf32-arm.c:10527 #, c-format msgid "%pB: relocation %s against external or undefined symbol `%s' can not be used when making a %s; recompile with -fPIC" msgstr "%pB: переÑÑƒÐ²Ð°Ð½Ð½Ñ %s щодо зовнішнього або невизначено Ñимволу «%s» не можна викориÑтовувати під Ñ‡Ð°Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ %s; повторно зберіть з -fPIC" -#: elf32-arm.c:10635 elf32-arm.c:11062 +#: elf32-arm.c:10664 elf32-arm.c:11091 #, c-format msgid "%pB: warning: %s BLX instruction targets %s function '%s'" msgstr "%pB: попередженнÑ: команда %s BLX вказує на функцію %s «%s»." -#: elf32-arm.c:11975 elf32-arm.c:12001 +#: elf32-arm.c:12003 elf32-arm.c:12029 #, c-format msgid "%pB(%pA+%#): unexpected %s instruction '%#lx' referenced by TLS_GOTDESC" msgstr "%pB(%pA+%#): неочікувана команда %s, «%#lx», на Ñку поÑилаєтьÑÑ TLS_GOTDESC" -#: elf32-arm.c:12047 elf32-csky.c:4853 elf32-m68k.c:3703 elf32-metag.c:1919 -#: elf32-nios2.c:4366 +#: elf32-arm.c:12075 elf32-csky.c:4746 elf32-m68k.c:3735 elf32-metag.c:1915 +#: elf32-nios2.c:4385 #, c-format msgid "%pB(%pA+%#): %s relocation not permitted in shared object" msgstr "%pB(%pA+%#): переÑÑƒÐ²Ð°Ð½Ð½Ñ %s у об’єкті Ñпільного викориÑÑ‚Ð°Ð½Ð½Ñ Ð·Ð°Ð±Ð¾Ñ€Ð¾Ð½ÐµÐ½Ð¾" -#: elf32-arm.c:12261 +#: elf32-arm.c:12289 #, c-format msgid "%pB(%pA+%#): only ADD or SUB instructions are allowed for ALU group relocations" msgstr "%pB(%pA+%#): Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÑувань груп ALU можна викориÑтовувати лише команди ADD або SUB" -#: elf32-arm.c:12302 elf32-arm.c:12394 elf32-arm.c:12482 elf32-arm.c:12572 +#: elf32-arm.c:12330 elf32-arm.c:12422 elf32-arm.c:12510 elf32-arm.c:12600 #, c-format msgid "%pB(%pA+%#): overflow whilst splitting %# for group relocation %s" msgstr "%pB(%pA+%#): Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð¿Ñ–Ð´ Ñ‡Ð°Ñ Ñпроби поділу %# з метою групового переÑÑƒÐ²Ð°Ð½Ð½Ñ %s" -#: elf32-arm.c:13078 elf32-sh.c:3689 +#: elf32-arm.c:13232 elf32-sh.c:3571 #, c-format msgid "%pB(%pA+%#): %s relocation against SEC_MERGE section" msgstr "%pB(%pA+%#): переÑÑƒÐ²Ð°Ð½Ð½Ñ %s щодо розділу SEC_MERGE" -#: elf32-arm.c:13191 elf32-m68k.c:3936 elf32-xtensa.c:2703 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:6534 +#: elf32-arm.c:13345 elf32-m68k.c:3968 elf32-xtensa.c:2761 +#: elfnn-aarch64.c:6829 #, c-format msgid "%pB(%pA+%#): %s used with TLS symbol %s" msgstr "%pB(%pA+%#): %s викориÑтовуєтьÑÑ Ð· Ñимволом TLS %s" -#: elf32-arm.c:13193 elf32-m68k.c:3938 elf32-xtensa.c:2705 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:6536 +#: elf32-arm.c:13347 elf32-m68k.c:3970 elf32-xtensa.c:2763 +#: elfnn-aarch64.c:6831 #, c-format msgid "%pB(%pA+%#): %s used with non-TLS symbol %s" msgstr "%pB(%pA+%#): %s викориÑтовуєтьÑÑ Ð· Ñимволом поза TLS %s" -#: elf32-arm.c:13276 elf32-tic6x.c:2708 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:6871 +#: elf32-arm.c:13430 elf32-tic6x.c:2649 elfnn-aarch64.c:7166 msgid "out of range" msgstr "поза діапазоном" -#: elf32-arm.c:13280 elf32-nios2.c:4500 elf32-pru.c:933 elf32-tic6x.c:2712 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:6875 +#: elf32-arm.c:13434 elf32-nios2.c:4519 elf32-pru.c:936 elf32-tic6x.c:2653 +#: elfnn-aarch64.c:7170 msgid "unsupported relocation" msgstr "непідтримуване переÑуваннÑ" -#: elf32-arm.c:13288 elf32-nios2.c:4510 elf32-pru.c:943 elf32-tic6x.c:2720 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:6883 +#: elf32-arm.c:13442 elf32-nios2.c:4529 elf32-pru.c:946 elf32-tic6x.c:2661 +#: elfnn-aarch64.c:7178 msgid "unknown error" msgstr "невідома помилка" -#: elf32-arm.c:13764 +#: elf32-arm.c:13920 #, c-format msgid "warning: not setting interworking flag of %pB since it has already been specified as non-interworking" msgstr "попередженнÑ: прапорець ÑуміÑної роботи у %pB не вÑтановлено, оÑкільки його вже було визначено так, щоб він заборонÑв ÑуміÑну роботу" -#: elf32-arm.c:13768 +#: elf32-arm.c:13924 #, c-format msgid "warning: clearing the interworking flag of %pB due to outside request" msgstr "попередженнÑ: знÑто прапорець ÑуміÑної роботи у %pB у відповідь на запит ззовні" -#: elf32-arm.c:13813 +#: elf32-arm.c:13969 #, c-format msgid "warning: clearing the interworking flag of %pB because non-interworking code in %pB has been linked with it" msgstr "попередженнÑ: знÑто прапорець ÑуміÑної роботи у %pB, оÑкільки з ним компонуєтьÑÑ ÐºÐ¾Ð´, Ñкий непридатний до Ñпільної роботи, у %pB" -#: elf32-arm.c:13900 +#: elf32-arm.c:14056 #, c-format msgid "%pB: unknown mandatory EABI object attribute %d" msgstr "%pB: невідомий обов’Ñзковий атрибути об’єкта EABI %d" -#: elf32-arm.c:13908 +#: elf32-arm.c:14064 #, c-format msgid "warning: %pB: unknown EABI object attribute %d" msgstr "попередженнÑ: %pB: невідомий атрибут об’єкта EABI %d" -#: elf32-arm.c:14175 +#: elf32-arm.c:14364 #, c-format msgid "error: %pB: unknown CPU architecture" msgstr "помилка: %pB: невідома архітектура процеÑора" -#: elf32-arm.c:14213 elf32-nios2.c:2946 +#: elf32-arm.c:14402 elf32-nios2.c:2953 #, c-format msgid "error: %pB: conflicting CPU architectures %d/%d" msgstr "помилка: %pB: конфлікт архітектур процеÑорів %d/%d" -#: elf32-arm.c:14310 +#: elf32-arm.c:14499 #, c-format msgid "Error: %pB has both the current and legacy Tag_MPextension_use attributes" msgstr "Помилка: Ð´Ð»Ñ %pB визначено одразу обидва атрибути Tag_MPextension_use, current Ñ– legacy" -#: elf32-arm.c:14339 +#: elf32-arm.c:14528 #, c-format msgid "error: %pB uses VFP register arguments, %pB does not" msgstr "помилка: у %pB викориÑтовуютьÑÑ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ð¸ регіÑтри VFP, а у %pB — ні" -#: elf32-arm.c:14497 +#: elf32-arm.c:14687 #, c-format msgid "error: %pB: unable to merge virtualization attributes with %pB" msgstr "помилка: %pB: Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ñ–Ð² віртуалізації з %pB неможливе" -#: elf32-arm.c:14523 +#: elf32-arm.c:14713 #, c-format msgid "error: %pB: conflicting architecture profiles %c/%c" msgstr "помилка: %pB: конфлікт профілів архітектур, %c/%c" -#: elf32-arm.c:14662 +#: elf32-arm.c:14852 #, c-format msgid "warning: %pB: conflicting platform configuration" msgstr "попередженнÑ: %pB: конфлікт налаштувань платформ" -#: elf32-arm.c:14671 +#: elf32-arm.c:14861 #, c-format msgid "error: %pB: conflicting use of R9" msgstr "помилка: %pB: конфлікт у викориÑтанні R9" -#: elf32-arm.c:14683 +#: elf32-arm.c:14873 #, c-format msgid "error: %pB: SB relative addressing conflicts with use of R9" msgstr "помилка: %pB: викориÑÑ‚Ð°Ð½Ð½Ñ Ð²Ñ–Ð´Ð½Ð¾Ñної адреÑації SB конфліктує з викориÑтаннÑм R9" -#: elf32-arm.c:14696 +#: elf32-arm.c:14886 #, c-format msgid "warning: %pB uses %u-byte wchar_t yet the output is to use %u-byte wchar_t; use of wchar_t values across objects may fail" msgstr "попередженнÑ: у %pB викориÑтовуєтьÑÑ %u-байтовий wchar_t, хоча у виведенні викориÑтовуєтьÑÑ %u-байтовий wchar_t; викориÑÑ‚Ð°Ð½Ð½Ñ Ð·Ð½Ð°Ñ‡ÐµÐ½ÑŒ wchar_t між об’єктами може зазнати невдачі" -#: elf32-arm.c:14727 +#: elf32-arm.c:14917 #, c-format msgid "warning: %pB uses %s enums yet the output is to use %s enums; use of enum values across objects may fail" msgstr "попередженнÑ: у %pB викориÑтовуютьÑÑ Ð¿ÐµÑ€ÐµÐ»Ñ–ÐºÐ¸ %s, хоча у виведенні викориÑтовуютьÑÑ Ð¿ÐµÑ€ÐµÐ»Ñ–ÐºÐ¸ %s; викориÑÑ‚Ð°Ð½Ð½Ñ Ð·Ð½Ð°Ñ‡ÐµÐ½ÑŒ переліків між об’єктами може зазнати невдачі" -#: elf32-arm.c:14739 +#: elf32-arm.c:14929 #, c-format msgid "error: %pB uses iWMMXt register arguments, %pB does not" msgstr "помилка: у %pB викориÑтовуютьÑÑ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ð¸-регіÑтри iWMMXt, а у %pB — ні" -#: elf32-arm.c:14756 +#: elf32-arm.c:14946 #, c-format msgid "error: fp16 format mismatch between %pB and %pB" msgstr "помилка: розбіжноÑÑ‚Ñ– у визначенні Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ fp16 між %pB та %pB" -#: elf32-arm.c:14792 +#: elf32-arm.c:14982 #, c-format msgid "%pB has both the current and legacy Tag_MPextension_use attributes" msgstr "Ð´Ð»Ñ %pB визначено одразу обидва атрибути Tag_MPextension_use, current Ñ– legacy" @@ -1686,345 +1790,330 @@ #. Ignore init flag - it may not be set, despite the flags field containing valid data. #. Ignore init flag - it may not be set, despite the flags field #. containing valid data. -#: elf32-arm.c:14879 elf32-bfin.c:4740 elf32-cris.c:3908 elf32-m68hc1x.c:1410 -#: elf32-m68k.c:1201 elf32-score.c:4000 elf32-score7.c:3805 elf32-vax.c:537 -#: elf32-xgate.c:494 elfxx-mips.c:16037 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:7037 +#: elf32-arm.c:15069 elf32-bfin.c:4719 elf32-cris.c:3861 elf32-m68hc1x.c:1416 +#: elf32-m68k.c:1267 elf32-score.c:4000 elf32-score7.c:3805 elf32-vax.c:537 +#: elf32-xgate.c:494 elfxx-mips.c:16199 elfnn-aarch64.c:7332 #, c-format msgid "private flags = %lx:" msgstr "закриті прапорці = %lx:" -#: elf32-arm.c:14888 +#: elf32-arm.c:15078 #, c-format msgid " [interworking enabled]" msgstr " [увімкнено ÑуміÑну роботу]" -#: elf32-arm.c:14896 +#: elf32-arm.c:15086 #, c-format msgid " [VFP float format]" msgstr " [формат float VFP]" -#: elf32-arm.c:14898 +#: elf32-arm.c:15088 #, c-format msgid " [Maverick float format]" msgstr " [формат float Maverick]" -#: elf32-arm.c:14900 +#: elf32-arm.c:15090 #, c-format msgid " [FPA float format]" msgstr " [формат float FPA]" -#: elf32-arm.c:14903 +#: elf32-arm.c:15093 #, c-format msgid " [floats passed in float registers]" msgstr " [чиÑла з рухомою комою передано до регіÑтрів чиÑел з рухомою комою]" -#: elf32-arm.c:14906 elf32-arm.c:14992 +#: elf32-arm.c:15096 elf32-arm.c:15182 #, c-format msgid " [position independent]" msgstr " [незалежний від позиції]" -#: elf32-arm.c:14909 +#: elf32-arm.c:15099 #, c-format msgid " [new ABI]" msgstr " [новий ABI]" -#: elf32-arm.c:14912 +#: elf32-arm.c:15102 #, c-format msgid " [old ABI]" msgstr " [Ñтарий ABI]" -#: elf32-arm.c:14915 +#: elf32-arm.c:15105 #, c-format msgid " [software FP]" msgstr " [програмна FP]" -#: elf32-arm.c:14924 +#: elf32-arm.c:15114 #, c-format msgid " [Version1 EABI]" msgstr " [ВерÑÑ–Ñ1 EABI]" -#: elf32-arm.c:14927 elf32-arm.c:14938 +#: elf32-arm.c:15117 elf32-arm.c:15128 #, c-format msgid " [sorted symbol table]" msgstr " [впорÑдкована Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ Ñимволів]" -#: elf32-arm.c:14929 elf32-arm.c:14940 +#: elf32-arm.c:15119 elf32-arm.c:15130 #, c-format msgid " [unsorted symbol table]" msgstr " [невпорÑдкована Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ Ñимволів]" -#: elf32-arm.c:14935 +#: elf32-arm.c:15125 #, c-format msgid " [Version2 EABI]" msgstr " [ВерÑÑ–Ñ2 EABI]" -#: elf32-arm.c:14943 +#: elf32-arm.c:15133 #, c-format msgid " [dynamic symbols use segment index]" msgstr " [динамічні Ñимволи викориÑтовують Ñ–Ð½Ð´ÐµÐºÑ Ñегмента]" -#: elf32-arm.c:14946 +#: elf32-arm.c:15136 #, c-format msgid " [mapping symbols precede others]" msgstr " [Ñимволи Ð²Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð¿ÐµÑ€ÐµÐ´ÑƒÑŽÑ‚ÑŒ іншим]" -#: elf32-arm.c:14953 +#: elf32-arm.c:15143 #, c-format msgid " [Version3 EABI]" msgstr " [ВерÑÑ–Ñ3 EABI]" -#: elf32-arm.c:14957 +#: elf32-arm.c:15147 #, c-format msgid " [Version4 EABI]" msgstr " [ВерÑÑ–Ñ4 EABI]" -#: elf32-arm.c:14961 +#: elf32-arm.c:15151 #, c-format msgid " [Version5 EABI]" msgstr " [ВерÑÑ–Ñ5 EABI]" -#: elf32-arm.c:14964 +#: elf32-arm.c:15154 #, c-format msgid " [soft-float ABI]" msgstr " [ABI програмної рухомої крапки]" -#: elf32-arm.c:14967 +#: elf32-arm.c:15157 #, c-format msgid " [hard-float ABI]" msgstr " [ABI апаратної рухомої крапки]" -#: elf32-arm.c:14973 +#: elf32-arm.c:15163 #, c-format msgid " [BE8]" msgstr " [BE8]" -#: elf32-arm.c:14976 +#: elf32-arm.c:15166 #, c-format msgid " [LE8]" msgstr " [LE8]" -#: elf32-arm.c:14982 +#: elf32-arm.c:15172 #, c-format msgid " " msgstr " <нерозпізнана верÑÑ–Ñ EABI>" -#: elf32-arm.c:14989 +#: elf32-arm.c:15179 #, c-format msgid " [relocatable executable]" msgstr " [придатний до переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ð½Ð¸Ð¹ файл]" -#: elf32-arm.c:14995 +#: elf32-arm.c:15185 #, c-format msgid " [FDPIC ABI supplement]" msgstr " [Ð´Ð¾Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ ABI FDPIC]" -#: elf32-arm.c:15000 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:7040 +#: elf32-arm.c:15190 elfnn-aarch64.c:7335 #, c-format msgid "" msgstr "<Ðерозпізнаний набір бітів прапорців>" -#: elf32-arm.c:15117 elf32-i386.c:1529 elf32-s390.c:960 elf32-tic6x.c:2783 -#: elf32-tilepro.c:1479 elf32-xtensa.c:1029 elf64-s390.c:882 -#: elf64-x86-64.c:1865 elfxx-sparc.c:1422 elfxx-tilegx.c:1700 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:7329 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:539 +#: elf32-arm.c:15307 elf32-i386.c:1524 elf32-s390.c:925 elf32-tic6x.c:2724 +#: elf32-tilepro.c:1443 elf32-xtensa.c:1093 elf64-s390.c:847 +#: elf64-x86-64.c:1902 elfxx-sparc.c:1386 elfxx-tilegx.c:1664 +#: elfnn-aarch64.c:7606 elfnn-riscv.c:525 #, c-format msgid "%pB: bad symbol index: %d" msgstr "%pB: помилковий Ñ–Ð½Ð´ÐµÐºÑ Ñимволу: %d" -#: elf32-arm.c:15508 +#: elf32-arm.c:15696 #, c-format msgid "FDPIC does not yet support %s relocation to become dynamic for executable" msgstr "У FDPIC ще не передбачено підтримки Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð¿ÐµÑ€ÐµÑÑƒÐ²Ð°Ð½Ð½Ñ %s на динамічне Ð´Ð»Ñ Ð²Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ð½Ð¸Ñ… файлів" -#: elf32-arm.c:16558 elf32-csky.c:1931 elf32-hppa.c:2090 elf32-lm32.c:1998 -#: elf32-m32r.c:2110 elf32-metag.c:2797 elf32-nds32.c:4330 elf32-or1k.c:2858 -#: elf32-ppc.c:5469 elf32-s390.c:1854 elf32-sh.c:2975 elf32-tic6x.c:3252 -#: elf32-tilepro.c:2245 elf64-ppc.c:9023 elf64-s390.c:1791 elfxx-sparc.c:2435 -#: elfxx-tilegx.c:2491 elfxx-x86.c:571 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:8677 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:1142 -#, c-format -msgid "%pB: dynamic relocation against `%pT' in read-only section `%pA'\n" -msgstr "%pB: динамічне переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ‰Ð¾Ð´Ð¾ «%pT» у розділі «%pA», призначеному лише Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ\n" - -#: elf32-arm.c:16854 +#: elf32-arm.c:16939 #, c-format msgid "errors encountered processing file %pB" msgstr "під Ñ‡Ð°Ñ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ файла ÑталиÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸, %pB" -#: elf32-arm.c:17301 elflink.c:12556 elflink.c:12603 +#: elf32-arm.c:17326 elflink.c:12818 elflink.c:12865 #, c-format msgid "could not find section %s" msgstr "не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ розділ %s" -#: elf32-arm.c:18512 +#: elf32-arm.c:18550 #, c-format msgid "%pB: error: Cortex-A8 erratum stub is allocated in unsafe location" msgstr "%pB: помилка: замінник Ð´Ð»Ñ Ð¾Ð±Ñ€Ð¾Ð±Ð½Ð¸ÐºÐ° помилки Cortex-A8 розташовано за небезпечною адреÑою" #. There's not much we can do apart from complain if this #. happens. -#: elf32-arm.c:18539 +#: elf32-arm.c:18577 #, c-format msgid "%pB: error: Cortex-A8 erratum stub out of range (input file too large)" msgstr "%pB: помилка: замінник Ð´Ð»Ñ Ð¾Ð±Ñ€Ð¾Ð±Ð½Ð¸ÐºÐ° помилки Cortex-A8 перебуває поза доÑтупним діапазоном (файл вхідних даних Ñ” надто великим)" -#: elf32-arm.c:19366 elf32-arm.c:19388 +#: elf32-arm.c:19404 elf32-arm.c:19426 #, c-format msgid "%pB: error: VFP11 veneer out of range" msgstr "%pB: помилка: обгортка VFP11 поза діапазоном" -#: elf32-arm.c:19439 +#: elf32-arm.c:19477 #, c-format msgid "%pB(%#): error: cannot create STM32L4XX veneer; jump out of range by % bytes; cannot encode branch instruction" msgstr "%pB(%#): помилка: не вдалоÑÑ Ñтворити обгортку STM32L4XX. Перехід за межі припуÑтимого діапазону на % байтів. ÐšÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ Ñ–Ð½Ñтрукції Ñ€Ð¾Ð·Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ðµ." -#: elf32-arm.c:19478 +#: elf32-arm.c:19516 #, c-format msgid "%pB: error: cannot create STM32L4XX veneer" msgstr "%pB: помилка: не вдалоÑÑ Ñтворити обгортку STM32L4XX" -#: elf32-arm.c:20567 +#: elf32-arm.c:20600 #, c-format msgid "error: %pB is already in final BE8 format" msgstr "помилка: %pB вже зберігаєтьÑÑ Ñƒ оÑтаточному форматі BE8" -#: elf32-arm.c:20643 +#: elf32-arm.c:20676 #, c-format msgid "error: source object %pB has EABI version %d, but target %pB has EABI version %d" msgstr "помилка: об’єкт-джерело, %pB, викориÑтовує верÑÑ–ÑŽ EABI %d, а призначеннÑ, %pB, викориÑтовує верÑÑ–ÑŽ EABI %d" -#: elf32-arm.c:20658 +#: elf32-arm.c:20691 #, c-format msgid "error: %pB is compiled for APCS-%d, whereas target %pB uses APCS-%d" msgstr "помилка: %pB зібрано Ð´Ð»Ñ APCS-%d, тоді Ñк %pB викориÑтовує APCS-%d" -#: elf32-arm.c:20668 +#: elf32-arm.c:20701 #, c-format msgid "error: %pB passes floats in float registers, whereas %pB passes them in integer registers" msgstr "помилка: %pB передає чиÑла з рухомою комою до регіÑтрів, а %pB передає Ñ—Ñ… у цілочиÑельні регіÑтри" -#: elf32-arm.c:20672 +#: elf32-arm.c:20705 #, c-format msgid "error: %pB passes floats in integer registers, whereas %pB passes them in float registers" msgstr "помилка: %pB передає цілі чиÑла до регіÑтрів, а %pB передає Ñ—Ñ… у регіÑтри чиÑел з рухомою комою" -#: elf32-arm.c:20682 elf32-arm.c:20686 elf32-arm.c:20696 +#: elf32-arm.c:20715 elf32-arm.c:20719 elf32-arm.c:20729 #, c-format msgid "error: %pB uses %s instructions, whereas %pB does not" msgstr "помилка: у %pB викориÑтовуютьÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸ %s, а у %pB — ні" -#: elf32-arm.c:20700 +#: elf32-arm.c:20733 #, c-format msgid "error: %pB does not use %s instructions, whereas %pB does" msgstr "помилка: у %pB не викориÑтовуютьÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸ %s, а у %pB — так" -#: elf32-arm.c:20719 +#: elf32-arm.c:20752 #, c-format msgid "error: %pB uses software FP, whereas %pB uses hardware FP" msgstr "помилка: у %pB викориÑтовуютьÑÑ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð½Ñ– FP, а у %pB — апаратні FP" -#: elf32-arm.c:20723 +#: elf32-arm.c:20756 #, c-format msgid "error: %pB uses hardware FP, whereas %pB uses software FP" msgstr "помилка: у %pB викориÑтовуютьÑÑ Ð°Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ñ– FP, а у %pB — програмні FP" -#: elf32-arm.c:20737 +#: elf32-arm.c:20770 #, c-format msgid "warning: %pB supports interworking, whereas %pB does not" msgstr "попередженнÑ: у %pB передбачено ÑуміÑну роботу, а у %pB не передбачено" -#: elf32-arm.c:20743 +#: elf32-arm.c:20776 #, c-format msgid "warning: %pB does not support interworking, whereas %pB does" msgstr "попередженнÑ: у %pB не передбачено ÑуміÑної роботи, а у %pB передбачено" -#: elf32-avr.c:1518 elf32-bfin.c:3135 elf32-cris.c:2041 elf32-epiphany.c:577 -#: elf32-fr30.c:602 elf32-frv.c:4057 elf32-ft32.c:502 elf32-ip2k.c:1493 -#: elf32-iq2000.c:701 elf32-m32c.c:632 elf32-mep.c:534 elf32-metag.c:1998 -#: elf32-moxie.c:296 elf32-msp430.c:1366 elf32-mt.c:406 elf32-or1k.c:1767 -#: elf32-tilepro.c:3514 elf32-v850.c:2299 elf32-visium.c:689 -#: elf32-xstormy16.c:939 elf64-mmix.c:1549 elfxx-tilegx.c:3878 +#: elf32-avr.c:1516 elf32-bfin.c:3134 elf32-cris.c:2041 elf32-epiphany.c:573 +#: elf32-fr30.c:602 elf32-frv.c:4056 elf32-ft32.c:502 elf32-ip2k.c:1488 +#: elf32-iq2000.c:699 elf32-m32c.c:632 elf32-mep.c:534 elf32-metag.c:1994 +#: elf32-moxie.c:296 elf32-msp430.c:1375 elf32-mt.c:406 elf32-or1k.c:1825 +#: elf32-tilepro.c:3388 elf32-v850.c:2298 elf32-visium.c:688 +#: elf32-xstormy16.c:937 elf64-bpf.c:521 elf64-mmix.c:1549 elfxx-tilegx.c:3752 msgid "internal error: dangerous relocation" msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: небезпечне переÑуваннÑ" -#: elf32-avr.c:3327 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:3126 +#: elf32-avr.c:3327 elfnn-aarch64.c:3221 #, c-format msgid "cannot create stub entry %s" msgstr "не вдалоÑÑ Ñтворити шаблонний Ð·Ð°Ð¿Ð¸Ñ %s" -#: elf32-bfin.c:106 elf32-bfin.c:362 +#: elf32-bfin.c:107 elf32-bfin.c:363 msgid "relocation should be even number" msgstr "переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð¼Ð°Ñ” бути вказано парним чиÑлом" -#: elf32-bfin.c:1585 +#: elf32-bfin.c:1584 #, c-format msgid "%pB(%pA+%#): unresolvable relocation against symbol `%s'" msgstr "%pB(%pA+%#): нерозв’Ñзне переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ‰Ð¾Ð´Ð¾ Ñимволу «%s»" -#: elf32-bfin.c:1617 elf32-i386.c:3449 elf32-m68k.c:3976 elf32-s390.c:3269 -#: elf64-s390.c:3219 elf64-x86-64.c:3896 +#: elf32-bfin.c:1616 elf32-i386.c:3443 elf32-m68k.c:4008 elf32-s390.c:3140 +#: elf64-s390.c:3089 elf64-x86-64.c:4112 #, c-format msgid "%pB(%pA+%#): reloc against `%s': error %d" msgstr "%pB(%pA+%#): переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ‰Ð¾Ð´Ð¾ «%s»: помилка %d" -#: elf32-bfin.c:2638 +#: elf32-bfin.c:2641 #, c-format msgid "%pB: relocation at `%pA+%#' references symbol `%s' with nonzero addend" msgstr "%pB: переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñƒ «%pA+%#» поÑилаєтьÑÑ Ð½Ð° Ñимвол «%s» з ненульовим доданком" -#: elf32-bfin.c:2655 +#: elf32-bfin.c:2658 msgid "relocation references symbol not defined in the module" msgstr "переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾ÑилаєтьÑÑ Ð½Ð° Ñимвол, Ñкий не визначено у модулі" -#: elf32-bfin.c:2752 +#: elf32-bfin.c:2755 msgid "R_BFIN_FUNCDESC references dynamic symbol with nonzero addend" msgstr "R_BFIN_FUNCDESC поÑилаєтьÑÑ Ð½Ð° динамічний Ñимвол з ненульовим доданком" -#: elf32-bfin.c:2793 elf32-bfin.c:2916 +#: elf32-bfin.c:2795 elf32-bfin.c:2916 msgid "cannot emit fixups in read-only section" msgstr "не можна викориÑтовувати адреÑну прив’Ñзку у розділі, придатному лише Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ" -#: elf32-bfin.c:2824 elf32-bfin.c:2954 elf32-lm32.c:1049 elf32-sh.c:4511 +#: elf32-bfin.c:2825 elf32-bfin.c:2953 elf32-lm32.c:1006 elf32-sh.c:4389 msgid "cannot emit dynamic relocations in read-only section" msgstr "не можна викориÑтовувати динамічні переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñƒ розділі, призначеному лише Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ" -#: elf32-bfin.c:2874 +#: elf32-bfin.c:2875 msgid "R_BFIN_FUNCDESC_VALUE references dynamic symbol with nonzero addend" msgstr "R_BFIN_FUNCDESC_VALUE поÑилаєтьÑÑ Ð½Ð° динамічний Ñимвол з ненульовим доданком" -#: elf32-bfin.c:3039 +#: elf32-bfin.c:3038 msgid "relocations between different segments are not supported" msgstr "підтримки переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð¼Ñ–Ð¶ різними Ñегментами не передбачено" -#: elf32-bfin.c:3040 +#: elf32-bfin.c:3039 msgid "warning: relocation references a different segment" msgstr "попередженнÑ: у переÑуванні виÑвлено поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° інший Ñегмент" -#: elf32-bfin.c:4787 elf32-frv.c:6603 +#: elf32-bfin.c:4770 elf32-frv.c:6584 #, c-format msgid "%pB: cannot link non-fdpic object file into fdpic executable" msgstr "%pB: не можна компонувати об’єктний файл не-fdpic до виконуваного файла fdpic" -#: elf32-bfin.c:4791 elf32-frv.c:6607 +#: elf32-bfin.c:4774 elf32-frv.c:6588 #, c-format msgid "%pB: cannot link fdpic object file into non-fdpic executable" msgstr "%pB: не можна компонувати об’єктний файл fdpic до виконуваного файла не-fdpic" -#: elf32-bfin.c:4941 +#: elf32-bfin.c:4924 #, c-format msgid "*** check this relocation %s" msgstr "*** перевірте це переÑуваннÑ: %s" -#: elf32-bfin.c:5057 +#: elf32-bfin.c:5040 msgid "the bfin target does not currently support the generation of copy relocations" msgstr "у поточній верÑÑ–Ñ— не передбачено Ð´Ð»Ñ Ñ†Ñ–Ð»Ñ– bfin ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð¿ÐµÑ€ÐµÑувань копіюваннÑ" -#: elf32-bfin.c:5351 elf32-cr16.c:2803 elf32-m68k.c:4390 +#: elf32-bfin.c:5334 elf32-cr16.c:2731 elf32-m68k.c:4422 msgid "unsupported relocation type" msgstr "непідтримуваний тип переÑуваннÑ" @@ -2044,16 +2133,16 @@ msgstr "%pB, розділ %pA: немає PLT Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÑÑƒÐ²Ð°Ð½Ð½Ñ %s щодо Ñимволу «%s»" #: elf32-cris.c:1193 elf32-cris.c:1326 elf32-cris.c:1591 elf32-cris.c:1674 -#: elf32-cris.c:1827 elf32-tic6x.c:2619 +#: elf32-cris.c:1827 elf32-tic6x.c:2560 msgid "[whose name is lost]" msgstr "[чию назву втрачено]" -#: elf32-cris.c:1311 elf32-tic6x.c:2603 +#: elf32-cris.c:1311 elf32-tic6x.c:2544 #, c-format msgid "%pB, section %pA: relocation %s with non-zero addend % against local symbol" msgstr "%pB, розділ %pA: переÑÑƒÐ²Ð°Ð½Ð½Ñ %s з ненульовим доданком, %, щодо локального Ñимволу" -#: elf32-cris.c:1320 elf32-cris.c:1668 elf32-cris.c:1821 elf32-tic6x.c:2612 +#: elf32-cris.c:1320 elf32-cris.c:1668 elf32-cris.c:1821 elf32-tic6x.c:2553 #, c-format msgid "%pB, section %pA: relocation %s with non-zero addend % against symbol `%s'" msgstr "%pB, розділ %pA: переÑÑƒÐ²Ð°Ð½Ð½Ñ %s з ненульовим доданком, %, щодо Ñимволу «%s»" @@ -2113,71 +2202,71 @@ "%pB, розділ %pA:\n" " переÑÑƒÐ²Ð°Ð½Ð½Ñ %s не Ñлід викориÑтовувати у Ñпільному об’єкті; перекомпілюйте з -fPIC" -#: elf32-cris.c:3747 +#: elf32-cris.c:3700 #, c-format msgid "%pB, section `%pA', to symbol `%s': relocation %s should not be used in a shared object; recompile with -fPIC" msgstr "%pB, розділ «%pA» до Ñимволу «%s»: переÑÑƒÐ²Ð°Ð½Ð½Ñ %s не Ñлід викориÑтовувати у Ñпільному об’єкті; перекомпілюйте з -fPIC" -#: elf32-cris.c:3860 +#: elf32-cris.c:3812 msgid "unexpected machine number" msgstr "неочікуваний номер машини" -#: elf32-cris.c:3911 +#: elf32-cris.c:3864 #, c-format msgid " [symbols have a _ prefix]" msgstr " [Ñимволи міÑÑ‚ÑÑ‚ÑŒ Ð¿Ñ€ÐµÑ„Ñ–ÐºÑ _]" -#: elf32-cris.c:3914 +#: elf32-cris.c:3867 #, c-format msgid " [v10 and v32]" msgstr " [v10 та v32]" -#: elf32-cris.c:3917 +#: elf32-cris.c:3870 #, c-format msgid " [v32]" msgstr " [v32]" -#: elf32-cris.c:3961 +#: elf32-cris.c:3914 #, c-format msgid "%pB: uses _-prefixed symbols, but writing file with non-prefixed symbols" msgstr "%pB: викориÑтовуютьÑÑ Ñимволи з префікÑом «_», але виконуєтьÑÑ Ð·Ð°Ð¿Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð° з Ñимволами без префікÑів" -#: elf32-cris.c:3962 +#: elf32-cris.c:3915 #, c-format msgid "%pB: uses non-prefixed symbols, but writing file with _-prefixed symbols" msgstr "%pB: викориÑтовуютьÑÑ Ñимволи без префікÑа «_», але виконуєтьÑÑ Ð·Ð°Ð¿Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð° з Ñимволами з префікÑами «_»" -#: elf32-cris.c:3981 +#: elf32-cris.c:3934 #, c-format msgid "%pB contains CRIS v32 code, incompatible with previous objects" msgstr "у %pB міÑтитьÑÑ ÐºÐ¾Ð´ v32 CRIS, неÑуміÑний з попередніми об’єктами" -#: elf32-cris.c:3983 +#: elf32-cris.c:3936 #, c-format msgid "%pB contains non-CRIS-v32 code, incompatible with previous objects" msgstr "у %pB міÑтитьÑÑ ÐºÐ¾Ð´, Ñкий не Ñ” кодом v32 CRIS, неÑуміÑний з попередніми об’єктами" -#: elf32-csky.c:2066 +#: elf32-csky.c:2022 msgid "GOT table size out of range" msgstr "Розмір таблиці GOT поза межами припуÑтимого діапазону" -#: elf32-csky.c:2917 +#: elf32-csky.c:2802 #, c-format msgid "warning: unrecognized arch eflag '%#lx'" msgstr "попередженнÑ: нерозпізнаний e-прапорець архітектури, «%#lx»" -#: elf32-csky.c:2977 +#: elf32-csky.c:2862 #, c-format msgid "%pB: machine flag conflict with target" msgstr "%pB: конфлікт Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ із призначеннÑм" -#: elf32-csky.c:2990 +#: elf32-csky.c:2875 #, c-format msgid "warning: file %pB's arch flag ck%s conflicts with target ck%s, using ck%s" msgstr "попередженнÑ: прапорець архітектури файла %pB ck%s конфліктує із прапорцем Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ ck%s, викориÑтовуємо ck%s" #. The r_type is error, not support it. -#: elf32-csky.c:4225 elf32-i386.c:351 +#: elf32-csky.c:4118 elf32-i386.c:350 #, c-format msgid "%pB: unsupported relocation type: %#x" msgstr "%pB: непідтримуваний тип переÑÑƒÐ²Ð°Ð½Ð½Ñ %#x" @@ -2193,7 +2282,7 @@ msgstr "не передбачено підтримки переходу (PC rel26) до розділу (%s)" #. Only if it's not an unresolved symbol. -#: elf32-epiphany.c:573 elf32-ip2k.c:1489 +#: elf32-epiphany.c:569 elf32-ip2k.c:1484 msgid "unsupported relocation between data/insn address spaces" msgstr "непідтримуване переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð¼Ñ–Ð¶ проÑторами Ð°Ð´Ñ€ÐµÑ data та insn" @@ -2201,96 +2290,96 @@ msgid "relocation requires zero addend" msgstr "Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÑÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ñ‚Ñ€Ñ–Ð±ÐµÐ½ нульовий доданок" -#: elf32-frv.c:2829 +#: elf32-frv.c:2832 #, c-format msgid "%H: relocation to `%s+%v' may have caused the error above\n" msgstr "%H: Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾ помилку, наведене вище, можливо Ñпричинене переÑуваннÑм до «%s+%v»\n" -#: elf32-frv.c:2846 +#: elf32-frv.c:2849 msgid "%H: relocation references symbol not defined in the module\n" msgstr "%H: переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾ÑилаєтьÑÑ Ð½Ð° Ñимвол, Ñкий не визначено у модулі\n" -#: elf32-frv.c:2922 +#: elf32-frv.c:2925 msgid "%H: R_FRV_GETTLSOFF not applied to a call instruction\n" msgstr "%H: R_FRV_GETTLSOFF Ñ” незаÑтоÑовним до команди виклику (call)\n" -#: elf32-frv.c:2963 +#: elf32-frv.c:2966 msgid "%H: R_FRV_GOTTLSDESC12 not applied to an lddi instruction\n" msgstr "%H: R_FRV_GOTTLSDESC12 Ñ” незаÑтоÑовним до команди lddi\n" -#: elf32-frv.c:3034 +#: elf32-frv.c:3037 msgid "%H: R_FRV_GOTTLSDESCHI not applied to a sethi instruction\n" msgstr "%H: R_FRV_GOTTLSDESCHI Ñ” незаÑтоÑовним до команди sethi\n" -#: elf32-frv.c:3071 +#: elf32-frv.c:3074 msgid "%H: R_FRV_GOTTLSDESCLO not applied to a setlo or setlos instruction\n" msgstr "%H: R_FRV_GOTTLSDESCLO Ñ” незаÑтоÑовним до команди setlo або setlos\n" -#: elf32-frv.c:3118 +#: elf32-frv.c:3121 msgid "%H: R_FRV_TLSDESC_RELAX not applied to an ldd instruction\n" msgstr "%H: R_FRV_TLSDESC_RELAX Ñ” незаÑтоÑовним до команди ldd\n" -#: elf32-frv.c:3202 +#: elf32-frv.c:3205 msgid "%H: R_FRV_GETTLSOFF_RELAX not applied to a calll instruction\n" msgstr "%H: R_FRV_GETTLSOFF_RELAX Ñ” незаÑтоÑовним до команди calll\n" -#: elf32-frv.c:3256 +#: elf32-frv.c:3259 msgid "%H: R_FRV_GOTTLSOFF12 not applied to an ldi instruction\n" msgstr "%H: R_FRV_GOTTLSOFF12 Ñ” незаÑтоÑовним до команди ldi\n" -#: elf32-frv.c:3286 +#: elf32-frv.c:3289 msgid "%H: R_FRV_GOTTLSOFFHI not applied to a sethi instruction\n" msgstr "%H: R_FRV_GOTTLSOFFHI Ñ” незаÑтоÑовним до команди sethi\n" -#: elf32-frv.c:3315 +#: elf32-frv.c:3318 msgid "%H: R_FRV_GOTTLSOFFLO not applied to a setlo or setlos instruction\n" msgstr "%H: R_FRV_GOTTLSOFFLO Ñ” незаÑтоÑовним до команди setlo або setlos\n" -#: elf32-frv.c:3345 +#: elf32-frv.c:3348 msgid "%H: R_FRV_TLSOFF_RELAX not applied to an ld instruction\n" msgstr "%H: R_FRV_TLSOFF_RELAX Ñ” незаÑтоÑовним до команди ld\n" -#: elf32-frv.c:3390 +#: elf32-frv.c:3393 msgid "%H: R_FRV_TLSMOFFHI not applied to a sethi instruction\n" msgstr "%H: R_FRV_TLSMOFFHI Ñ” незаÑтоÑовним до команди sethi\n" -#: elf32-frv.c:3417 +#: elf32-frv.c:3420 msgid "R_FRV_TLSMOFFLO not applied to a setlo or setlos instruction\n" msgstr "R_FRV_TLSMOFFLO Ñ” незаÑтоÑовним до команди setlo або setlos\n" -#: elf32-frv.c:3538 elf32-frv.c:3660 +#: elf32-frv.c:3541 elf32-frv.c:3661 msgid "%H: %s references dynamic symbol with nonzero addend\n" msgstr "%H: %s поÑилаєтьÑÑ Ð½Ð° динамічний Ñимвол з ненульовим доданком\n" -#: elf32-frv.c:3580 elf32-frv.c:3703 +#: elf32-frv.c:3582 elf32-frv.c:3703 msgid "%H: cannot emit fixups in read-only section\n" msgstr "%H: не можна викориÑтовувати адреÑну прив’Ñзку у розділі, придатному лише Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ\n" -#: elf32-frv.c:3611 elf32-frv.c:3746 +#: elf32-frv.c:3612 elf32-frv.c:3745 msgid "%H: cannot emit dynamic relocations in read-only section\n" msgstr "%H: не можна викориÑтовувати динамічні переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñƒ розділі, призначеному лише Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ\n" -#: elf32-frv.c:3918 +#: elf32-frv.c:3917 #, c-format msgid "%H: reloc against `%s' references a different segment\n" msgstr "%H: переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ‰Ð¾Ð´Ð¾ «%s» поÑилаєтьÑÑ Ð½Ð° інший Ñегмент\n" -#: elf32-frv.c:4069 +#: elf32-frv.c:4068 #, c-format msgid "%H: reloc against `%s': %s\n" msgstr "%H: переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ‰Ð¾Ð´Ð¾ «%s»: %s\n" -#: elf32-frv.c:6514 +#: elf32-frv.c:6495 #, c-format msgid "%pB: compiled with %s and linked with modules that use non-pic relocations" msgstr "%pB: зібрано з %s Ñ– Ñкомпоновано з модулÑми, у Ñких викориÑтовуютьÑÑ Ð¿ÐµÑ€ÐµÑÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ðµ-pic" -#: elf32-frv.c:6568 elf32-iq2000.c:832 elf32-m32c.c:876 +#: elf32-frv.c:6549 elf32-iq2000.c:830 elf32-m32c.c:876 #, c-format msgid "%pB: compiled with %s and linked with modules compiled with %s" msgstr "%pB: зібрано з %s Ñ– Ñкомпоновано з модулÑми, зібраними з %s" -#: elf32-frv.c:6581 +#: elf32-frv.c:6562 #, c-format msgid "%pB: uses different unknown e_flags (%#x) fields than previous modules (%#x)" msgstr "%pB: викориÑтовуютьÑÑ Ñ–Ð½ÑˆÑ– невідомі Ð¿Ð¾Ð»Ñ e_flags (%#x) ніж у попередніх модулÑÑ… (%#x)" @@ -2300,137 +2389,140 @@ msgid "%pB: relocations in generic ELF (EM: %d)" msgstr "%pB: переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñƒ типовому ELF (EM: %d)" -#: elf32-hppa.c:834 elf32-hppa.c:3511 +#: elf32-hppa.c:763 elf32-hppa.c:844 elf64-ppc.c:11859 +msgid "%F%P: Could not assign %pA to an output section. Retry without --enable-non-contiguous-regions.\n" +msgstr "%F%P: не вдалоÑÑ Ð¿Ð¾Ð²'Ñзати %pA із розділом виведеннÑ. Повторіть без --enable-non-contiguous-regions.\n" + +#: elf32-hppa.c:865 elf32-hppa.c:3407 #, c-format msgid "%pB(%pA+%#): cannot reach %s, recompile with -ffunction-sections" msgstr "%pB(%pA+%#): не вдалоÑÑ Ð´Ð¾ÑÑгти %s, повторно зберіть з -ffunction-sections" -#: elf32-hppa.c:1248 +#: elf32-hppa.c:1243 #, c-format msgid "%pB: relocation %s can not be used when making a shared object; recompile with -fPIC" msgstr "%pB: переÑÑƒÐ²Ð°Ð½Ð½Ñ %s не можна викориÑтовувати під Ñ‡Ð°Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° Ñпільного викориÑтаннÑ; повторно зберіть з -fPIC" -#: elf32-hppa.c:2688 +#: elf32-hppa.c:2584 #, c-format msgid "%pB: duplicate export stub %s" msgstr "%pB: Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ ÑˆÐ°Ð±Ð»Ð¾Ð½Ð° екÑÐ¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ %s" -#: elf32-hppa.c:3344 +#: elf32-hppa.c:3240 #, c-format msgid "%pB(%pA+%#): %s fixup for insn %#x is not supported in a non-shared link" msgstr "%pB(%pA+%#): підтримки адреÑної прив’Ñзки %s Ð´Ð»Ñ Ñ–Ð½Ñтрукції %#x не передбачено у поÑиланні неÑпільного викориÑтаннÑ" -#: elf32-hppa.c:4140 +#: elf32-hppa.c:4036 #, c-format msgid "%s has both normal and TLS relocs" msgstr "%s міÑтить одразу звичайні переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ– переÑÑƒÐ²Ð°Ð½Ð½Ñ TLS" -#: elf32-hppa.c:4158 +#: elf32-hppa.c:4054 #, c-format msgid "%pB:%s has both normal and TLS relocs" msgstr "%pB:%s міÑтить одразу звичайні переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ– переÑÑƒÐ²Ð°Ð½Ð½Ñ TLS" -#: elf32-hppa.c:4217 +#: elf32-hppa.c:4113 #, c-format msgid "%pB(%pA+%#): cannot handle %s for %s" msgstr "%pB(%pA+%#): не вдалоÑÑ Ð¾Ð±Ñ€Ð¾Ð±Ð¸Ñ‚Ð¸ %s Ð´Ð»Ñ %s" -#: elf32-hppa.c:4521 +#: elf32-hppa.c:4417 msgid ".got section not immediately after .plt section" msgstr "Розділ .got не перебуває одразу за розділом .plt" -#: elf32-i386.c:1178 elf64-x86-64.c:1377 +#: elf32-i386.c:1169 elf64-x86-64.c:1382 #, c-format msgid "%pB: TLS transition from %s to %s against `%s' at %# in section `%pA' failed" msgstr "%pB: перенеÑÐµÐ½Ð½Ñ TLS з %s до %s щодо «%s» у %# у розділі «%pA» зазнало невдачі" -#: elf32-i386.c:1269 +#: elf32-i386.c:1272 #, c-format msgid "%pB: direct GOT relocation R_386_GOT32X against `%s' without base register can not be used when making a shared object" msgstr "%pB: безпоÑереднє переÑÑƒÐ²Ð°Ð½Ð½Ñ GOT R_386_GOT32X щодо «%s» без базового регіÑтра не можна викориÑтовувати під Ñ‡Ð°Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° Ñпільного викориÑтаннÑ" -#: elf32-i386.c:1726 elf32-s390.c:1188 elf32-sh.c:5662 elf32-tilepro.c:1592 -#: elf32-xtensa.c:1203 elf64-s390.c:1120 elfxx-sparc.c:1591 -#: elfxx-tilegx.c:1805 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:451 +#: elf32-i386.c:1721 elf32-s390.c:1153 elf32-sh.c:5494 elf32-tilepro.c:1556 +#: elf32-xtensa.c:1265 elf64-s390.c:1085 elfxx-sparc.c:1555 +#: elfxx-tilegx.c:1769 elfnn-riscv.c:437 #, c-format msgid "%pB: `%s' accessed both as normal and thread local symbol" msgstr "%pB: доÑтуп до «%s» виконуєтьÑÑ Ñк до звичайного Ñимволу, так Ñ– до локального Ð´Ð»Ñ Ð¿Ð¾Ñ‚Ð¾ÐºÑƒ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ñимволу" -#: elf32-i386.c:1798 +#: elf32-i386.c:1793 #, c-format msgid "%pB: unsupported non-PIC call to IFUNC `%s'" msgstr "%pB: непідтримуваний виклик без PIC IFUNC «%s»" -#: elf32-i386.c:2379 elf64-x86-64.c:2670 +#: elf32-i386.c:2373 elf64-x86-64.c:2721 #, c-format msgid "%pB: relocation %s against STT_GNU_IFUNC symbol `%s' isn't supported" msgstr "%pB: підтримки переÑÑƒÐ²Ð°Ð½Ð½Ñ %s щодо Ñимволу STT_GNU_IFUNC «%s» не передбачено" -#: elf32-i386.c:2412 elf32-i386.c:3660 elf32-i386.c:3801 elf64-x86-64.c:2727 -#: elf64-x86-64.c:4069 elf64-x86-64.c:4225 +#: elf32-i386.c:2406 elf32-i386.c:3654 elf32-i386.c:3795 elf64-x86-64.c:2778 +#: elf64-x86-64.c:4285 elf64-x86-64.c:4441 #, c-format msgid "Local IFUNC function `%s' in %pB\n" msgstr "Локальна Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ IFUNC «%s» у %pB\n" -#: elf32-i386.c:2569 +#: elf32-i386.c:2563 #, c-format msgid "%pB: direct GOT relocation %s against `%s' without base register can not be used when making a shared object" msgstr "%pB: безпоÑереднє переÑÑƒÐ²Ð°Ð½Ð½Ñ %s щодо «%s» без базового регіÑтра не можна викориÑтовувати під Ñ‡Ð°Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° Ñпільного викориÑтаннÑ" -#: elf32-i386.c:2604 elf64-x86-64.c:2919 +#: elf32-i386.c:2598 elf64-x86-64.c:2977 msgid "hidden symbol" msgstr "прихованого Ñимволу" -#: elf32-i386.c:2607 elf64-x86-64.c:2922 +#: elf32-i386.c:2601 elf64-x86-64.c:2980 msgid "internal symbol" msgstr "внутрішнього Ñимволу" -#: elf32-i386.c:2610 elf64-x86-64.c:2925 +#: elf32-i386.c:2604 elf64-x86-64.c:2983 msgid "protected symbol" msgstr "захищеного Ñимволу" -#: elf32-i386.c:2613 elf64-x86-64.c:2928 +#: elf32-i386.c:2607 elf64-x86-64.c:2986 msgid "symbol" msgstr "Ñимволу" -#: elf32-i386.c:2619 +#: elf32-i386.c:2613 #, c-format msgid "%pB: relocation R_386_GOTOFF against undefined %s `%s' can not be used when making a shared object" msgstr "%pB: переÑÑƒÐ²Ð°Ð½Ð½Ñ R_386_GOTOFF щодо невизначеного %s, «%s», не можна викориÑтовувати під Ñ‡Ð°Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° Ñпільного викориÑтаннÑ" -#: elf32-i386.c:2632 +#: elf32-i386.c:2626 #, c-format msgid "%pB: relocation R_386_GOTOFF against protected %s `%s' can not be used when making a shared object" msgstr "%pB: не можна викориÑтовувати R_386_GOTOFF переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ‰Ð¾Ð´Ð¾ захищеної %s «%s» під Ñ‡Ð°Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° Ñпільного викориÑтаннÑ" -#: elf32-ip2k.c:856 elf32-ip2k.c:862 elf32-ip2k.c:929 elf32-ip2k.c:935 +#: elf32-ip2k.c:855 elf32-ip2k.c:861 elf32-ip2k.c:928 elf32-ip2k.c:934 msgid "ip2k relaxer: switch table without complete matching relocation information." msgstr "Оптимізатор розміру ip2k: Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ Ð¿ÐµÑ€ÐµÐ¼Ð¸ÐºÐ°Ð½ÑŒ без повних даних щодо відповідноÑÑ‚Ñ– переÑувань." -#: elf32-ip2k.c:879 elf32-ip2k.c:962 +#: elf32-ip2k.c:878 elf32-ip2k.c:961 msgid "ip2k relaxer: switch table header corrupt." msgstr "Оптимізатор розміру ip2k: пошкоджено заголовок таблиці перемикань" -#: elf32-ip2k.c:1302 +#: elf32-ip2k.c:1297 #, c-format msgid "ip2k linker: missing page instruction at %# (dest = %#)" msgstr "компонувальник ip2k: не виÑтачає інÑтрукції щодо Ñторінки у %# (Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ = %#)." -#: elf32-ip2k.c:1321 +#: elf32-ip2k.c:1316 #, c-format msgid "ip2k linker: redundant page instruction at %# (dest = %#)" msgstr "компонувальник ip2k: зайва інÑÑ‚Ñ€ÑƒÐºÑ†Ñ–Ñ Ñ‰Ð¾Ð´Ð¾ Ñторінки у %# (Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ = %#)." -#: elf32-lm32.c:651 elf32-nios2.c:3141 +#: elf32-lm32.c:608 elf32-nios2.c:3148 msgid "global pointer relative relocation when _gp not defined" msgstr "відноÑне перенеÑÐµÐ½Ð½Ñ Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ вказівника без Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ _gp" -#: elf32-lm32.c:706 elf32-nios2.c:3578 +#: elf32-lm32.c:663 elf32-nios2.c:3585 msgid "global pointer relative address out of range" msgstr "відноÑна адреÑа загального вказівника лежить за межами дозволеного діапазону" -#: elf32-lm32.c:1002 +#: elf32-lm32.c:959 #, c-format msgid "internal error: addend should be zero for %s" msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: доданок має бути нульовим Ð´Ð»Ñ %s" @@ -2439,136 +2531,141 @@ msgid "SDA relocation when _SDA_BASE_ not defined" msgstr "перенеÑÐµÐ½Ð½Ñ SDA без Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ _SDA_BASE_" -#: elf32-m32r.c:2984 elf32-microblaze.c:1101 elf32-microblaze.c:1149 +#: elf32-m32r.c:2799 elf32-microblaze.c:1097 elf32-microblaze.c:1145 #, c-format msgid "%pB: the target (%s) of an %s relocation is in the wrong section (%pA)" msgstr "%pB: Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ (%s) переÑÑƒÐ²Ð°Ð½Ð½Ñ %s перебуває у помилковому розділі (%pA)" -#: elf32-m32r.c:3487 +#: elf32-m32r.c:3302 #, c-format msgid "%pB: instruction set mismatch with previous modules" msgstr "%pB: невідповідніÑÑ‚ÑŒ набору команду цього Ð¼Ð¾Ð´ÑƒÐ»Ñ Ð½Ð°Ð±Ð¾Ñ€Ð°Ð¼ команд попередніх модулів" -#: elf32-m32r.c:3508 elf32-nds32.c:6992 +#: elf32-m32r.c:3323 elf32-nds32.c:6855 #, c-format msgid "private flags = %lx" msgstr "закриті прапорці = %lx" -#: elf32-m32r.c:3513 +#: elf32-m32r.c:3328 #, c-format msgid ": m32r instructions" msgstr ": команди m32r" -#: elf32-m32r.c:3514 +#: elf32-m32r.c:3329 #, c-format msgid ": m32rx instructions" msgstr ": команди m32rx" -#: elf32-m32r.c:3515 +#: elf32-m32r.c:3330 #, c-format msgid ": m32r2 instructions" msgstr ": команди m32r2" -#: elf32-m68hc1x.c:1116 +#: elf32-m68hc1x.c:1136 #, c-format msgid "reference to the far symbol `%s' using a wrong relocation may result in incorrect execution" msgstr "поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° віддалений Ñимвол «%s», що викориÑтовує помилкове переÑуваннÑ, може призвеÑти до помилок у виконанні." -#: elf32-m68hc1x.c:1150 +#: elf32-m68hc1x.c:1167 #, c-format msgid "XGATE address (%lx) is not within shared RAM(0xE000-0xFFFF), therefore you must manually offset the address, and possibly manage the page, in your code." msgstr "ÐдреÑа XGATE (%lx) розташована поза RAM Ñпільного викориÑÑ‚Ð°Ð½Ð½Ñ (0xE000-0xFFFF), тому вам Ñлід вручну вÑтановити відÑтуп адреÑи Ñ–, ймовірно, керувати Ñторінкою пам’ÑÑ‚Ñ– у вашому коді." -#: elf32-m68hc1x.c:1168 +#: elf32-m68hc1x.c:1183 #, c-format msgid "banked address [%lx:%04lx] (%lx) is not in the same bank as current banked address [%lx:%04lx] (%lx)" msgstr "занеÑена до банку адреÑа [%lx:%04lx] (%lx) не перебуває у одному банку з поточною адреÑою, занеÑеною до банку, [%lx:%04lx] (%lx)" -#: elf32-m68hc1x.c:1184 +#: elf32-m68hc1x.c:1198 #, c-format msgid "reference to a banked address [%lx:%04lx] in the normal address space at %04lx" msgstr "поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° занеÑену до банку адреÑу [%lx:%04lx] у звичайному проÑторі адреÑ, %04lx" -#: elf32-m68hc1x.c:1225 +#: elf32-m68hc1x.c:1234 #, c-format msgid "S12 address (%lx) is not within shared RAM(0x2000-0x4000), therefore you must manually offset the address in your code" msgstr "ÐдреÑа S12 (%lx) розташована поза RAM Ñпільного викориÑÑ‚Ð°Ð½Ð½Ñ (0x2000-x4000), тому вам Ñлід вручну вÑтановити відÑтуп адреÑи у вашому коді" -#: elf32-m68hc1x.c:1352 +#: elf32-m68hc1x.c:1358 #, c-format msgid "%pB: linking files compiled for 16-bit integers (-mshort) and others for 32-bit integers" msgstr "%pB: компоновані файли зібрано Ð´Ð»Ñ 16-бітових цілих (-mshort), а решту файлів — Ð´Ð»Ñ 32-бітових цілих чиÑел" -#: elf32-m68hc1x.c:1359 +#: elf32-m68hc1x.c:1365 #, c-format msgid "%pB: linking files compiled for 32-bit double (-fshort-double) and others for 64-bit double" msgstr "%pB: компоновані файли зібрано Ð´Ð»Ñ 32-бітових дійÑних чиÑел з подвійною точніÑÑ‚ÑŽ (-fshort-double), а інші — Ð´Ð»Ñ 64-бітових дійÑних чиÑел з подвійною точніÑÑ‚ÑŽ." -#: elf32-m68hc1x.c:1368 +#: elf32-m68hc1x.c:1374 #, c-format msgid "%pB: linking files compiled for HCS12 with others compiled for HC12" msgstr "%pB: компоновані файли зібрано Ð´Ð»Ñ HCS12, інші ж — Ð´Ð»Ñ HC12" -#: elf32-m68hc1x.c:1413 elf32-xgate.c:497 +#: elf32-m68hc1x.c:1419 elf32-xgate.c:497 #, c-format msgid "[abi=32-bit int, " msgstr "[abi=32-бітове ціле, " -#: elf32-m68hc1x.c:1415 elf32-xgate.c:499 +#: elf32-m68hc1x.c:1421 elf32-xgate.c:499 #, c-format msgid "[abi=16-bit int, " msgstr "[abi=16-бітове ціле, " -#: elf32-m68hc1x.c:1418 elf32-xgate.c:502 +#: elf32-m68hc1x.c:1424 elf32-xgate.c:502 #, c-format msgid "64-bit double, " msgstr "64-бітове double, " -#: elf32-m68hc1x.c:1420 elf32-xgate.c:504 +#: elf32-m68hc1x.c:1426 elf32-xgate.c:504 #, c-format msgid "32-bit double, " msgstr "32-бітове double, " -#: elf32-m68hc1x.c:1423 +#: elf32-m68hc1x.c:1429 #, c-format msgid "cpu=HC11]" msgstr "процеÑор=HC11]" -#: elf32-m68hc1x.c:1425 +#: elf32-m68hc1x.c:1431 #, c-format msgid "cpu=HCS12]" msgstr "процеÑор=HCS12]" -#: elf32-m68hc1x.c:1427 +#: elf32-m68hc1x.c:1433 #, c-format msgid "cpu=HC12]" msgstr "процеÑор=HC12]" -#: elf32-m68hc1x.c:1430 +#: elf32-m68hc1x.c:1436 #, c-format msgid " [memory=bank-model]" msgstr " [пам’ÑÑ‚ÑŒ=модель з банками]" -#: elf32-m68hc1x.c:1432 +#: elf32-m68hc1x.c:1438 #, c-format msgid " [memory=flat]" msgstr " [пам’ÑÑ‚ÑŒ=плоÑка модель]" -#: elf32-m68hc1x.c:1435 +#: elf32-m68hc1x.c:1441 #, c-format msgid " [XGATE RAM offsetting]" msgstr " [вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð²Ñ–Ð´Ñтупу RAM XGATE]" -#: elf32-m68k.c:1216 elf32-m68k.c:1217 vms-alpha.c:7484 vms-alpha.c:7500 +#: elf32-m68k.c:1159 elf32-m68k.c:1167 elf32-ppc.c:3583 elf32-ppc.c:3591 +#, c-format +msgid "%pB uses hard float, %pB uses soft float" +msgstr "у %pB викориÑтовуєтьÑÑ Ð°Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ð° підтримка дійÑних чиÑел, а у %pB — програмна" + +#: elf32-m68k.c:1282 elf32-m68k.c:1283 vms-alpha.c:7664 vms-alpha.c:7680 msgid "unknown" msgstr "невідомо" -#: elf32-m68k.c:1660 +#: elf32-m68k.c:1733 #, c-format msgid "%pB: GOT overflow: number of relocations with 8-bit offset > %d" msgstr "%pB: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ GOT: кількіÑÑ‚ÑŒ переÑувань з 8-бітовим відÑтупом > %d" -#: elf32-m68k.c:1667 +#: elf32-m68k.c:1740 #, c-format msgid "%pB: GOT overflow: number of relocations with 8- or 16-bit offset > %d" msgstr "%pB: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ GOT: кількіÑÑ‚ÑŒ переÑувань з 8- або 16-бітовим відÑтупом > %d" @@ -2599,18 +2696,18 @@ msgid "private flags = 0x%lx" msgstr "закриті прапорці = 0x%lx" -#: elf32-metag.c:1863 +#: elf32-metag.c:1859 #, c-format msgid "%pB(%pA): multiple TLS models are not supported" msgstr "%pB(%pA): підтримки декількох моделей TLS не передбачено" -#: elf32-metag.c:1866 +#: elf32-metag.c:1862 #, c-format msgid "%pB(%pA): shared library symbol %s encountered whilst performing a static link" msgstr "%pB(%pA): під Ñ‡Ð°Ñ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ñтатичного ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð¸Ñвлено Ñимвол бібліотеки Ñпільного викориÑÑ‚Ð°Ð½Ð½Ñ %s" -#: elf32-microblaze.c:1544 elf32-tilepro.c:3155 elfxx-sparc.c:3538 -#: elfxx-tilegx.c:3543 +#: elf32-microblaze.c:1540 elf32-tilepro.c:3029 elfxx-sparc.c:3427 +#: elfxx-tilegx.c:3417 #, c-format msgid "%pB: probably compiled without -fPIC?" msgstr "%pB: ймовірно зібрано без -fPIC?" @@ -2624,320 +2721,315 @@ msgid "32bits gp relative relocation occurs for an external symbol" msgstr "відбуваєтьÑÑ 32-бітове відноÑне gp-переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ð·Ð¾Ð²Ð½Ñ–ÑˆÐ½ÑŒÐ¾Ð³Ð¾ Ñимволу" -#: elf32-msp430.c:837 elf32-msp430.c:1151 +#: elf32-msp430.c:846 elf32-msp430.c:1160 msgid "try enabling relaxation to avoid relocation truncations" msgstr "Ñпробуйте увімкнути оптимізацію розміру Ð´Ð»Ñ ÑƒÐ½Ð¸ÐºÐ½ÐµÐ½Ð½Ñ Ð¾Ð±Ñ€Ñ–Ð·Ð°Ð½Ð½Ñ Ð¿ÐµÑ€ÐµÑувань" -#: elf32-msp430.c:1358 +#: elf32-msp430.c:1367 msgid "internal error: branch/jump to an odd address detected" msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: виÑвлено Ð²Ñ–Ð´Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ Ð°Ð±Ð¾ перехід до непарної адреÑи" -#: elf32-msp430.c:2357 +#: elf32-msp430.c:2532 #, c-format msgid "warning: %pB: unknown MSPABI object attribute %d" msgstr "попередженнÑ: %pB: невідомий атрибут об’єкта MSPABI %d" -#: elf32-msp430.c:2456 +#: elf32-msp430.c:2633 #, c-format msgid "error: %pB uses %s instructions but %pB uses %s" msgstr "помилка: %pB викориÑтовує інÑтрукції %s, але %pB викориÑтовує %s" -#: elf32-msp430.c:2468 +#: elf32-msp430.c:2645 #, c-format msgid "error: %pB uses the %s code model whereas %pB uses the %s code model" msgstr "помилка: %pB викориÑтовує модель коду %s, тоді Ñк %pB викориÑтовує модель коду %s" -#: elf32-msp430.c:2480 +#: elf32-msp430.c:2658 #, c-format msgid "error: %pB uses the large code model but %pB uses MSP430 instructions" msgstr "помилка: %pB викориÑтовує модель великого коду, а %pB викориÑтовує інÑтрукції MSP430" -#: elf32-msp430.c:2491 +#: elf32-msp430.c:2669 #, c-format msgid "error: %pB uses the %s data model whereas %pB uses the %s data model" msgstr "помилка: %pB викориÑтовує модель даних %s, тоді Ñк %pB викориÑтовує модель даних %s" -#: elf32-msp430.c:2503 +#: elf32-msp430.c:2682 #, c-format msgid "error: %pB uses the small code model but %pB uses the %s data model" msgstr "помилка: %pB викориÑтовує модель малого коду, а %pB викориÑтовує модель даних %s" -#: elf32-msp430.c:2515 +#: elf32-msp430.c:2694 #, c-format msgid "error: %pB uses the %s data model but %pB only uses MSP430 instructions" msgstr "помилка: %pB викориÑтовує модель даних %s, а у %pB викориÑтовуютьÑÑ Ð»Ð¸ÑˆÐµ інÑтрукції MSP430" -#: elf32-nds32.c:3624 +#: elf32-msp430.c:2719 #, c-format -msgid "error: can't find symbol: %s" -msgstr "помилка: не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñимвол: %s" +msgid "error: %pB can use the upper region for data, but %pB assumes data is exclusively in lower memory" +msgstr "помилка: %pB може викориÑтовувати верхню ділÑнку даних, але %pB вказує на те, що дані розташовано лише у нижній ділÑнці пам'ÑÑ‚Ñ–" -#: elf32-nds32.c:5639 +#: elf32-nds32.c:3625 #, c-format -msgid "%pB: relocation %s against `%s' can not be used whenmaking a shared object; recompile with -fPIC" -msgstr "%pB: переÑÑƒÐ²Ð°Ð½Ð½Ñ %s щодо «%s» не можна викориÑтовувати під Ñ‡Ð°Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° Ñпільного викориÑтаннÑ; повторно зберіть з -fPIC" +msgid "error: can't find symbol: %s" +msgstr "помилка: не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñимвол: %s" -#: elf32-nds32.c:5669 +#: elf32-nds32.c:5528 #, c-format msgid "%pB: warning: %s unsupported in shared mode" msgstr "%pB: попередженнÑ: підтримки %s у Ñпільному режимі не передбачено" -#: elf32-nds32.c:5795 +#: elf32-nds32.c:5654 #, c-format msgid "%pB: warning: unaligned access to GOT entry" msgstr "%pB: попередженнÑ: невирівнÑний доÑтуп до запиÑу GOT" -#: elf32-nds32.c:5836 +#: elf32-nds32.c:5695 #, c-format msgid "%pB: warning: relocate SDA_BASE failed" msgstr "%pB: попередженнÑ: помилка переÑÑƒÐ²Ð°Ð½Ð½Ñ SDA_BASE" -#: elf32-nds32.c:5858 +#: elf32-nds32.c:5717 #, c-format msgid "%pB(%pA): warning: unaligned small data access of type %d" msgstr "%pB(%pA): попередженнÑ: невирівнÑний доÑтуп до малих даних типу %d" -#: elf32-nds32.c:6784 +#: elf32-nds32.c:6643 #, c-format msgid "%pB: ISR vector size mismatch with previous modules, previous %u-byte, current %u-byte" msgstr "%pB: невідповідніÑÑ‚ÑŒ розмірів векторів ISR із попередніми модулÑми, попередні Ñ” %u-байтовими, поточні Ñ” %u-байтовими" -#: elf32-nds32.c:6828 +#: elf32-nds32.c:6691 #, c-format msgid "%pB: warning: endian mismatch with previous modules" msgstr "%pB: попередженнÑ: невідповідніÑÑ‚ÑŒ порÑдку байтів із попередніми модулÑми" -#: elf32-nds32.c:6842 +#: elf32-nds32.c:6705 #, c-format msgid "%pB: warning: older version of object file encountered, please recompile with current tool chain" msgstr "%pB: попередженнÑ: виÑвлено Ñтарішу верÑÑ–ÑŽ об’єктного файла. Будь лаÑка, виконайте повторне Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ Ð· поточним набором інÑтрументів." -#: elf32-nds32.c:6930 +#: elf32-nds32.c:6793 #, c-format msgid "%pB: error: ABI mismatch with previous modules" msgstr "%pB: помилка: невідповідніÑÑ‚ÑŒ ABI з попередніми модулÑми" -#: elf32-nds32.c:6940 +#: elf32-nds32.c:6803 #, c-format msgid "%pB: error: instruction set mismatch with previous modules" msgstr "%pB: помилка: невідповідніÑÑ‚ÑŒ набору команду цього Ð¼Ð¾Ð´ÑƒÐ»Ñ Ð½Ð°Ð±Ð¾Ñ€Ð°Ð¼ команд попередніх модулів" -#: elf32-nds32.c:6967 +#: elf32-nds32.c:6830 #, c-format msgid "%pB: warning: incompatible elf-versions %s and %s" msgstr "%pB: попередженнÑ: неÑуміÑні верÑÑ–Ñ— elf, %s та %s" -#: elf32-nds32.c:6998 +#: elf32-nds32.c:6861 #, c-format msgid ": n1 instructions" msgstr ": інÑтрукції n1" -#: elf32-nds32.c:7001 +#: elf32-nds32.c:6864 #, c-format msgid ": n1h instructions" msgstr ": інÑтрукції n1h" -#: elf32-nds32.c:9462 +#: elf32-nds32.c:9316 #, c-format msgid "%pB: error: search_nds32_elf_blank reports wrong node" msgstr "%pB: помилка: search_nds32_elf_blank повідомлÑÑ” про помилковий вузол" -#: elf32-nds32.c:9722 +#: elf32-nds32.c:9576 #, c-format msgid "%pB: warning: %s points to unrecognized reloc at %#" msgstr "%pB: попередженнÑ: %s вказує на невідоме переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð¾ %#." -#: elf32-nds32.c:12975 +#: elf32-nds32.c:12839 #, c-format msgid "%pB: nested OMIT_FP in %pA" msgstr "%pB: вкладене OMIT_FP у %pA." -#: elf32-nds32.c:12994 +#: elf32-nds32.c:12858 #, c-format msgid "%pB: unmatched OMIT_FP in %pA" msgstr "%pB: OMIT_FP без відповідника у %pA." -#: elf32-nds32.c:13275 reloc.c:8410 +#: elf32-nds32.c:13140 reloc.c:8470 #, c-format msgid "%X%P: %pB(%pA): relocation \"%pR\" goes out of range\n" msgstr "%X%P: %pB(%pA): переÑÑƒÐ²Ð°Ð½Ð½Ñ Â«%pR» виводить за межі припуÑтимого діапазону\n" -#: elf32-nios2.c:2930 +#: elf32-nios2.c:2937 #, c-format msgid "error: %pB: big-endian R2 is not supported" msgstr "помилка: %pB: підтримки зворотного порÑдку байтів R2 не передбачено" -#: elf32-nios2.c:3822 +#: elf32-nios2.c:3829 #, c-format -msgid "global pointer relative relocation at address 0x%08x when _gp not defined\n" -msgstr "відноÑне переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ вказівника за адреÑою 0x%08x, втім, _gp не визначено\n" +msgid "global pointer relative relocation at address %# when _gp not defined\n" +msgstr "відноÑне переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ вказівника за адреÑою %#, втім, _gp не визначено\n" -#: elf32-nios2.c:3842 +#: elf32-nios2.c:3859 #, c-format -msgid "unable to reach %s (at 0x%08x) from the global pointer (at 0x%08x) because the offset (%d) is out of the allowed range, -32678 to 32767\n" -msgstr "неможливо доÑÑгти %s (за адреÑою 0x%08x) із загального вказівника (за адреÑою 0x%08x), оÑкільки Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ (%d) лежить поза межами дозволеного діапазону, від -32678 до 32767.\n" +msgid "unable to reach %s (at %#) from the global pointer (at %#) because the offset (%) is out of the allowed range, -32678 to 32767\n" +msgstr "неможливо доÑÑгти %s (за адреÑою %#) із загального вказівника (за адреÑою %#), оÑкільки Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ (%#) лежить поза межами дозволеного діапазону, від -32678 до 32767.\n" -#: elf32-nios2.c:4495 elf32-pru.c:928 +#: elf32-nios2.c:4514 elf32-pru.c:931 msgid "relocation out of range" msgstr "переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð° межі діапазону" -#: elf32-nios2.c:4505 elf32-pru.c:938 elf32-tic6x.c:2716 +#: elf32-nios2.c:4524 elf32-pru.c:941 elf32-tic6x.c:2657 msgid "dangerous relocation" msgstr "небезпечне переÑуваннÑ" -#: elf32-nios2.c:5378 +#: elf32-nios2.c:5367 #, c-format msgid "dynamic variable `%s' is zero size" msgstr "динамічна змінна «%s» має нульовий розмір" -#: elf32-or1k.c:1177 +#: elf32-or1k.c:1210 #, c-format msgid "%pB: Cannot handle relocation value size of %d" msgstr "%pB: неможливо обробити розмір Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿ÐµÑ€ÐµÑÑƒÐ²Ð°Ð½Ð½Ñ Ñƒ %d" -#: elf32-or1k.c:1286 +#: elf32-or1k.c:1317 #, c-format msgid "%pB: unknown relocation type %d" msgstr "%pB: невідомий тип переÑÑƒÐ²Ð°Ð½Ð½Ñ %d" -#: elf32-or1k.c:1340 +#: elf32-or1k.c:1371 #, c-format msgid "%pB: addend should be zero for plt relocations" msgstr "%pB: Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÑувань plt доданок має бути нульовим" -#: elf32-or1k.c:1445 +#: elf32-or1k.c:1476 #, c-format msgid "%pB: addend should be zero for got relocations" msgstr "%pB: Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÑувань got доданок має бути нульовим" -#: elf32-or1k.c:1462 +#: elf32-or1k.c:1493 #, c-format msgid "%pB: gotoff relocation against dynamic symbol %s" msgstr "%pB: переÑÑƒÐ²Ð°Ð½Ð½Ñ gotoff щодо динамічного Ñимволу %s" -#: elf32-or1k.c:1479 elf64-alpha.c:4455 elf64-alpha.c:4599 +#: elf32-or1k.c:1510 elf64-alpha.c:4421 elf64-alpha.c:4565 #, c-format msgid "%pB: pc-relative relocation against dynamic symbol %s" msgstr "%pB: pc-відноÑне переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ‰Ð¾Ð´Ð¾ динамічного Ñимволу %s" -#: elf32-or1k.c:1493 +#: elf32-or1k.c:1524 #, c-format msgid "%pB: non-pic relocation against symbol %s" msgstr "%pB: переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ðµ-pic щодо динамічного Ñимволу %s" -#: elf32-or1k.c:1577 +#: elf32-or1k.c:1608 #, c-format msgid "%pB: support for local dynamic not implemented" msgstr "%pB: підтримку Ð´Ð»Ñ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ñ— динаміки не реалізовано" -#: elf32-or1k.c:1729 +#: elf32-or1k.c:1787 #, c-format msgid "%pB: will not resolve runtime TLS relocation" msgstr "%pB: не буде визначено переÑÑƒÐ²Ð°Ð½Ð½Ñ TLS у динамічному режимі" -#: elf32-or1k.c:2074 +#: elf32-or1k.c:2120 #, c-format msgid "%pB: bad relocation section name `%s'" msgstr "%pB: помилкова назва розділу Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÑÑƒÐ²Ð°Ð½Ð½Ñ Â«%s»" -#: elf32-or1k.c:3218 +#: elf32-or1k.c:3181 #, c-format msgid "%pB: %s flag mismatch with previous modules" msgstr "%pB: невідповідніÑÑ‚ÑŒ Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ %s попереднім модулÑм" -#: elf32-ppc.c:986 +#: elf32-ppc.c:989 #, c-format msgid "generic linker can't handle %s" msgstr "типовий компонувальник не може оброблÑти %s" -#: elf32-ppc.c:1617 +#: elf32-ppc.c:1628 #, c-format msgid "corrupt %s section in %pB" msgstr "пошкоджений розділ %s у %pB" -#: elf32-ppc.c:1637 +#: elf32-ppc.c:1647 #, c-format msgid "unable to read in %s section from %pB" msgstr "Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ñƒ розділі %s неможливе з %pB" -#: elf32-ppc.c:1679 +#: elf32-ppc.c:1689 #, c-format msgid "warning: unable to set size of %s section in %pB" msgstr "попередженнÑ: не вдалоÑÑ Ð²Ñтановити Ð´Ð»Ñ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ розділу %s Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ %pB" -#: elf32-ppc.c:1729 +#: elf32-ppc.c:1738 msgid "failed to allocate space for new APUinfo section" msgstr "не вдалоÑÑ Ñ€Ð¾Ð·Ð¼Ñ–Ñтити новий розділ APUinfo" -#: elf32-ppc.c:1748 +#: elf32-ppc.c:1757 msgid "failed to compute new APUinfo section" msgstr "не вдалоÑÑ Ð¾Ð±Ñ‡Ð¸Ñлити новий розділ APUinfo" -#: elf32-ppc.c:1751 +#: elf32-ppc.c:1760 msgid "failed to install new APUinfo section" msgstr "не вдалоÑÑ Ð²Ñтановити новий розділ APUinfo" -#: elf32-ppc.c:2853 +#: elf32-ppc.c:2861 #, c-format msgid "%pB: relocation %s cannot be used when making a shared object" msgstr "%pB: переÑÑƒÐ²Ð°Ð½Ð½Ñ %s не можна викориÑтовувати під Ñ‡Ð°Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° Ñпільного викориÑтаннÑ" -#: elf32-ppc.c:3587 elf32-ppc.c:3595 -#, c-format -msgid "%pB uses hard float, %pB uses soft float" -msgstr "у %pB викориÑтовуєтьÑÑ Ð°Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ð° підтримка дійÑних чиÑел, а у %pB — програмна" - -#: elf32-ppc.c:3603 elf32-ppc.c:3611 +#: elf32-ppc.c:3599 elf32-ppc.c:3607 #, c-format msgid "%pB uses double-precision hard float, %pB uses single-precision hard float" msgstr "у %pB викориÑтовуєтьÑÑ Ð°Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ð° підтримка дійÑних чиÑел з подвійною точніÑÑ‚ÑŽ, а у %pB — апаратна підтримка Ð´Ð»Ñ Ð´Ñ–Ð¹Ñних чиÑел з одинарною точніÑÑ‚ÑŽ" -#: elf32-ppc.c:3630 elf32-ppc.c:3638 +#: elf32-ppc.c:3629 elf32-ppc.c:3637 #, c-format msgid "%pB uses 64-bit long double, %pB uses 128-bit long double" msgstr "у %pB викориÑтано 64-бітові довгі цілі Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ–Ð· подвійною точніÑÑ‚ÑŽ, а у %pB — 128-бітові" -#: elf32-ppc.c:3646 elf32-ppc.c:3654 +#: elf32-ppc.c:3645 elf32-ppc.c:3653 #, c-format msgid "%pB uses IBM long double, %pB uses IEEE long double" msgstr "у %pB викориÑтано довгі цілі Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ–Ð· подвійною точніÑÑ‚ÑŽ IBM, а у %pB — IEEE" -#: elf32-ppc.c:3721 elf32-ppc.c:3730 +#: elf32-ppc.c:3720 elf32-ppc.c:3729 #, c-format msgid "%pB uses AltiVec vector ABI, %pB uses SPE vector ABI" msgstr "%pB викориÑтовує векторний ABI AltiVec, %pB викориÑтовує векторний ABI SPE" -#: elf32-ppc.c:3759 elf32-ppc.c:3768 +#: elf32-ppc.c:3758 elf32-ppc.c:3767 #, c-format msgid "%pB uses r3/r4 for small structure returns, %pB uses memory" msgstr "у %pB r3/r4 викориÑтовуєтьÑÑ Ð´Ð»Ñ Ð¿Ð¾Ð²ÐµÑ€Ð½ÐµÐ½Ð½Ñ Ð¼Ð°Ð»Ð¸Ñ… Ñтруктур, а у %pB Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ викориÑтовуєтьÑÑ Ð¿Ð°Ð¼â€™ÑÑ‚ÑŒ" -#: elf32-ppc.c:3829 +#: elf32-ppc.c:3831 #, c-format msgid "%pB: compiled with -mrelocatable and linked with modules compiled normally" msgstr "%pB: зібрано з -mrelocatable Ñ– Ñкомпоновано з модулÑми, зібраними у звичайному режимі" -#: elf32-ppc.c:3837 +#: elf32-ppc.c:3839 #, c-format msgid "%pB: compiled normally and linked with modules compiled with -mrelocatable" msgstr "%pB: зібрано у звичайному режимі Ñ– Ñкомпоновано з модулÑми, зібраними з -mrelocatable" -#: elf32-ppc.c:3906 +#: elf32-ppc.c:3908 #, c-format msgid "%pB(%pA+0x%lx): expected 16A style relocation on 0x%08x insn" msgstr "%pB(%pA+0x%lx): очікувалоÑÑ Ð¿ÐµÑ€ÐµÑÑƒÐ²Ð°Ð½Ð½Ñ Ñтилю 16A на інÑтрукції 0x%08x" -#: elf32-ppc.c:3925 +#: elf32-ppc.c:3927 #, c-format msgid "%pB(%pA+0x%lx): expected 16D style relocation on 0x%08x insn" msgstr "%pB(%pA+0x%lx): очікувалоÑÑ Ð¿ÐµÑ€ÐµÑÑƒÐ²Ð°Ð½Ð½Ñ Ñтилю 16D на інÑтрукції 0x%08x" -#: elf32-ppc.c:4028 +#: elf32-ppc.c:4030 #, c-format msgid "bss-plt forced due to %pB" msgstr "примуÑово викориÑтано bss-plt через %pB" -#: elf32-ppc.c:4030 +#: elf32-ppc.c:4032 msgid "bss-plt forced by profiling" msgstr "профілюваннÑм примуÑово визначено bss-plt" @@ -2945,40 +3037,40 @@ #. could just mark this symbol to exclude it #. from tls optimization but it's safer to skip #. the entire optimization. -#: elf32-ppc.c:4606 elf64-ppc.c:7724 +#: elf32-ppc.c:4606 elf64-ppc.c:8252 #, c-format msgid "%H arg lost __tls_get_addr, TLS optimization disabled\n" msgstr "%H: у аргументів не виÑтачає __tls_get_addr, оптимізацію TLS вимкнено.\n" -#: elf32-ppc.c:5577 elf32-sh.c:3078 elf32-tilepro.c:2339 elfxx-sparc.c:2534 -#: elfxx-tilegx.c:2579 +#: elf32-ppc.c:5513 elf32-sh.c:3023 elf32-tilepro.c:2256 elfxx-sparc.c:2453 +#: elfxx-tilegx.c:2496 #, c-format msgid "%pB: dynamic relocation in read-only section `%pA'\n" msgstr "%pB: динамічне переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñƒ розділі «%pA», призначеному лише Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ\n" -#: elf32-ppc.c:7457 +#: elf32-ppc.c:7356 msgid "%P: %H: error: %s with unexpected instruction %x\n" msgstr "%P: %H: помилка: %s із неочікуваною інÑтрукцією %x\n" -#: elf32-ppc.c:7494 +#: elf32-ppc.c:7393 msgid "%H: fixup branch overflow\n" msgstr "%H: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ñ€Ð¾Ð·Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ Ñ–Ð· адреÑною прив’Ñзкою\n" -#: elf32-ppc.c:7534 elf32-ppc.c:7570 +#: elf32-ppc.c:7433 elf32-ppc.c:7469 #, c-format msgid "%pB(%pA+%#): error: %s with unexpected instruction %#x" msgstr "%pB(%pA+%#): помилка: %s із неочікуваною інÑтрукцією %#x" -#: elf32-ppc.c:7634 +#: elf32-ppc.c:7533 #, c-format msgid "%X%H: unsupported bss-plt -fPIC ifunc %s\n" msgstr "%X%H: непідтримувана bss-plt -fPIC ifunc %s\n" -#: elf32-ppc.c:7673 elf64-ppc.c:15220 +#: elf32-ppc.c:7572 elf64-ppc.c:16848 msgid "%H: warning: %s unexpected insn %#x.\n" msgstr "%H: попередженнÑ: %s, неочікувана інÑÑ‚Ñ€ÑƒÐºÑ†Ñ–Ñ %#x.\n" -#: elf32-ppc.c:7985 +#: elf32-ppc.c:7881 #, c-format msgid "%H: non-zero addend on %s reloc against `%s'\n" msgstr "%H: ненульовий додаток до переÑÑƒÐ²Ð°Ð½Ð½Ñ %s щодо «%s»\n" @@ -2991,54 +3083,54 @@ #. local won't have the +32k reloc addend trick marking #. -fPIC code, so the linker won't know whether r30 is #. _GLOBAL_OFFSET_TABLE_ or pointing into a .got2 section. -#: elf32-ppc.c:8017 +#: elf32-ppc.c:7913 #, c-format msgid "%X%H: @local call to ifunc %s\n" msgstr "%X%H: виклик @local ifunc %s\n" -#: elf32-ppc.c:8187 +#: elf32-ppc.c:8091 #, c-format msgid "%H: relocation %s for indirect function %s unsupported\n" msgstr "%H: підтримки переÑÑƒÐ²Ð°Ð½Ð½Ñ %s опоÑередкованої функції %s не передбачено\n" -#: elf32-ppc.c:8515 elf32-ppc.c:8546 elf32-ppc.c:8637 elf32-ppc.c:8725 +#: elf32-ppc.c:8425 elf32-ppc.c:8456 elf32-ppc.c:8547 elf32-ppc.c:8643 #, c-format msgid "%pB: the target (%s) of a %s relocation is in the wrong output section (%s)" msgstr "%pB: Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ (%s) переÑÑƒÐ²Ð°Ð½Ð½Ñ %s перебуває у помилковому розділі Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ (%s)" -#: elf32-ppc.c:8855 elf32-ppc.c:8873 -msgid "%P: %H: %s relocation unsupported for bss-plt\n" -msgstr "%P: %H: підтримки переÑÑƒÐ²Ð°Ð½Ð½Ñ %s Ð´Ð»Ñ bss-plt не передбачено\n" +#: elf32-ppc.c:8773 elf32-ppc.c:8791 +msgid "%X%P: %H: %s relocation unsupported for bss-plt\n" +msgstr "%X%P: %H: підтримки переÑÑƒÐ²Ð°Ð½Ð½Ñ %s Ð´Ð»Ñ bss-plt не передбачено\n" -#: elf32-ppc.c:8954 +#: elf32-ppc.c:8872 #, c-format msgid "%H: error: %s against `%s' not a multiple of %u\n" msgstr "%H: помилка: %s Ð´Ð»Ñ Â«%s» не Ñ” кратним до %u\n" -#: elf32-ppc.c:8983 +#: elf32-ppc.c:8901 #, c-format msgid "%H: unresolvable %s relocation against symbol `%s'\n" msgstr "%H: нерозв’Ñзне переÑÑƒÐ²Ð°Ð½Ð½Ñ %s щодо Ñимволу «%s»\n" -#: elf32-ppc.c:9064 +#: elf32-ppc.c:8982 #, c-format msgid "%H: %s reloc against `%s': error %d\n" msgstr "%H: переÑÑƒÐ²Ð°Ð½Ð½Ñ %s щодо «%s»: помилка %d\n" -#: elf32-ppc.c:9959 elf64-ppc.c:15715 +#: elf32-ppc.c:9872 msgid "%X%P: text relocations and GNU indirect functions will result in a segfault at runtime\n" msgstr "%X%P: Ð¿Ð¾Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð¿ÐµÑ€ÐµÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ‚ÐµÐºÑту Ñ– опоÑередкованих функцій GNU призведе до помилки Ñегментації під Ñ‡Ð°Ñ Ð·Ð°Ð¿ÑƒÑку\n" -#: elf32-ppc.c:9963 elf64-ppc.c:15719 +#: elf32-ppc.c:9876 elf64-ppc.c:17398 msgid "%P: warning: text relocations and GNU indirect functions may result in a segfault at runtime\n" msgstr "%P: попередженнÑ: Ð¿Ð¾Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð¿ÐµÑ€ÐµÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ‚ÐµÐºÑту Ñ– опоÑередкованих функцій GNU може призвеÑти до помилки Ñегментації під Ñ‡Ð°Ñ Ð·Ð°Ð¿ÑƒÑку\n" -#: elf32-ppc.c:10008 +#: elf32-ppc.c:9921 #, c-format msgid "%s not defined in linker created %pA" msgstr "%s не визначено у компонувальнику, Ñтвореному %pA" -#: elf32-pru.c:579 elf32-pru.c:1472 +#: elf32-pru.c:582 elf32-pru.c:1475 #, c-format msgid "error: %pB: old incompatible object file detected" msgstr "помилка: %pB: виÑвлено заÑтарілий неÑуміÑний об'єктний файл" @@ -3055,7 +3147,7 @@ msgid "warning: RL78_SYM reloc with an unknown symbol" msgstr "попередженнÑ: переÑÑƒÐ²Ð°Ð½Ð½Ñ RL78_SYM з невідомим Ñимволом" -#: elf32-rl78.c:1084 elf32-rx.c:1456 +#: elf32-rl78.c:1084 elf32-rx.c:1461 #, c-format msgid "%pB(%pA): error: call to undefined function '%s'" msgstr "%pB(%pA): помилка: виклик невизначеної функції «%s»" @@ -3084,17 +3176,17 @@ msgid " [64-bit doubles]" msgstr " [64-бітові double]" -#: elf32-rx.c:605 +#: elf32-rx.c:607 #, c-format msgid "%pB:%pA: table entry %s outside table" msgstr "%pB:%pA: Ð·Ð°Ð¿Ð¸Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– %s поза таблицею" -#: elf32-rx.c:612 +#: elf32-rx.c:614 #, c-format msgid "%pB:%pA: table entry %s not word-aligned within table" msgstr "%pB:%pA: Ð·Ð°Ð¿Ð¸Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– %s не вирівнÑно на межу Ñлова вÑередині таблиці" -#: elf32-rx.c:684 +#: elf32-rx.c:689 #, c-format msgid "%pB:%pA: warning: deprecated Red Hat reloc %s detected against: %s" msgstr "%pB:%pA: попередженнÑ: заÑтарілий формат переÑÑƒÐ²Ð°Ð½Ð½Ñ Red Hat %s, виÑвлено Ð´Ð»Ñ %s" @@ -3103,59 +3195,59 @@ #. an absolute address is being computed. There are special cases #. for relocs against symbols that are known to be referenced in #. crt0.o before the PID base address register has been initialised. -#: elf32-rx.c:704 +#: elf32-rx.c:709 #, c-format msgid "%pB(%pA): unsafe PID relocation %s at %# (against %s in %s)" msgstr "%pB(%pA): небезпечне переÑÑƒÐ²Ð°Ð½Ð½Ñ PID %s до %# (щодо %s у %s)" -#: elf32-rx.c:1288 +#: elf32-rx.c:1293 msgid "warning: RX_SYM reloc with an unknown symbol" msgstr "попередженнÑ: переÑÑƒÐ²Ð°Ð½Ð½Ñ RX_SYM з невідомим Ñимволом" -#: elf32-rx.c:3167 +#: elf32-rx.c:3173 #, c-format msgid "there is a conflict merging the ELF header flags from %pB" msgstr "під Ñ‡Ð°Ñ Ñпроби Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ–Ð² заголовка ELF з %pB виник конфлікт" -#: elf32-rx.c:3170 +#: elf32-rx.c:3176 #, c-format msgid " the input file's flags: %s" msgstr " прапорці файла вхідних даних: %s" -#: elf32-rx.c:3172 +#: elf32-rx.c:3178 #, c-format msgid " the output file's flags: %s" msgstr " прапорці файла результатів: %s" -#: elf32-rx.c:3792 +#: elf32-rx.c:3784 #, c-format msgid "%pB:%pA: table %s missing corresponding %s" msgstr "%pB:%pA: у таблиці %s немає відповідного %s" -#: elf32-rx.c:3800 +#: elf32-rx.c:3792 #, c-format msgid "%pB:%pA: %s and %s must be in the same input section" msgstr "%pB:%pA: %s Ñ– %s мають перебувати у одному розділі вхідних даних" -#: elf32-s390.c:2140 elf64-s390.c:2095 +#: elf32-s390.c:2011 elf64-s390.c:1965 #, c-format msgid "%pB(%pA+%#): invalid instruction for TLS relocation %s" msgstr "%pB(%pA+%#): некоректна інÑÑ‚Ñ€ÑƒÐºÑ†Ñ–Ñ Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÑÑƒÐ²Ð°Ð½Ð½Ñ TLS %s" -#: elf32-score.c:1521 elf32-score7.c:1382 elfxx-mips.c:3754 +#: elf32-score.c:1521 elf32-score7.c:1382 elfxx-mips.c:3800 msgid "not enough GOT space for local GOT entries" msgstr "недоÑтатньо проÑтору GOT Ð´Ð»Ñ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¸Ñ… запиÑів GOT" -#: elf32-score.c:2746 +#: elf32-score.c:2747 msgid "address not word aligned" msgstr "адреÑу не вирівнÑно за межею Ñлова" -#: elf32-score.c:2827 elf32-score7.c:2632 +#: elf32-score.c:2828 elf32-score7.c:2633 #, c-format msgid "%pB: malformed reloc detected for section %pA" msgstr "%pB: Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %pA виÑвлено помилку у форматуванні перенеÑеннÑ" -#: elf32-score.c:2881 elf32-score7.c:2686 +#: elf32-score.c:2882 elf32-score7.c:2687 #, c-format msgid "%pB: CALL15 reloc at %# not against global symbol" msgstr "%pB: переÑÑƒÐ²Ð°Ð½Ð½Ñ CALL15 у %# не відноÑно загального Ñимволу" @@ -3170,7 +3262,7 @@ msgid " [fix dep]" msgstr " [фікÑ. розт.]" -#: elf32-score.c:4050 elf32-score7.c:3855 +#: elf32-score.c:4054 elf32-score7.c:3859 #, c-format msgid "%pB: warning: linking PIC files with non-PIC files" msgstr "%pB: попередженнÑ: ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñ–Ð² PIC з файлами, Ñкі не Ñ” файлами PIC" @@ -3180,152 +3272,148 @@ msgid "%pB: %#: warning: R_SH_USES points to unrecognized insn 0x%x" msgstr "%pB: %#: попередженнÑ: R_SH_USES вказує на нерозпізнану інÑтрукцію 0x%x" -#: elf32-sh.c:3633 -msgid "unexpected STO_SH5_ISA32 on local symbol is not handled" -msgstr "неочікувану команду STO_SH5_ISA32 над локальним Ñимволом не оброблено" - -#: elf32-sh.c:3880 +#: elf32-sh.c:3758 #, c-format msgid "%pB: %#: fatal: unaligned branch target for relax-support relocation" msgstr "%pB: %#: критична помилка: невирівнÑне розгалужене Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÑÑƒÐ²Ð°Ð½Ð½Ñ Ð· підтримкою оптимізації розміру" -#: elf32-sh.c:3910 elf32-sh.c:3926 +#: elf32-sh.c:3788 elf32-sh.c:3804 #, c-format msgid "%pB: %#: fatal: unaligned %s relocation %#" msgstr "%pB: %#: критична помилка: невирівнÑне переÑÑƒÐ²Ð°Ð½Ð½Ñ %s, %#" -#: elf32-sh.c:3942 +#: elf32-sh.c:3820 #, c-format msgid "%pB: %#: fatal: R_SH_PSHA relocation % not in range -32..32" msgstr "%pB: %#: критична помилка: переÑÑƒÐ²Ð°Ð½Ð½Ñ R_SH_PSHA % не у діапазоні -32..32" -#: elf32-sh.c:3958 +#: elf32-sh.c:3836 #, c-format msgid "%pB: %#: fatal: R_SH_PSHL relocation % not in range -32..32" msgstr "%pB: %#: критична помилка: переÑÑƒÐ²Ð°Ð½Ð½Ñ R_SH_PSHL % не у діапазоні -32..32" -#: elf32-sh.c:4088 elf32-sh.c:4483 +#: elf32-sh.c:3966 elf32-sh.c:4361 #, c-format msgid "%pB(%pA+%#): cannot emit fixup to `%s' in read-only section" msgstr "%pB(%pA+%#): не можна викориÑтовувати адреÑну прив’Ñзку до «%s» у розділі, придатному лише Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ" -#: elf32-sh.c:4586 +#: elf32-sh.c:4464 #, c-format msgid "%pB(%pA+%#): %s relocation against external symbol \"%s\"" msgstr "%pB(%pA+%#): переÑÑƒÐ²Ð°Ð½Ð½Ñ %s за зовнішнім Ñимволом «%s»" -#: elf32-sh.c:4705 +#: elf32-sh.c:4583 #, c-format msgid "%pB(%pA): offset in relocation for GD->LE translation is too small: %#" msgstr "%pB(%pA): відÑтуп у переÑуванні Ð´Ð»Ñ Ñ‚Ñ€Ð°Ð½ÑлÑції GD->LE Ñ” надто малим: %#" #. The backslash is to prevent bogus trigraph detection. -#: elf32-sh.c:4723 +#: elf32-sh.c:4601 #, c-format msgid "%pB(%pA+%#): unexpected instruction %#04X (expected 0xd4??)" msgstr "%pB(%pA+%#): неочікувана інÑÑ‚Ñ€ÑƒÐºÑ†Ñ–Ñ %#04X (мало бути 0xd4??)" -#: elf32-sh.c:4731 +#: elf32-sh.c:4609 #, c-format msgid "%pB(%pA+%#): unexpected instruction %#04X (expected 0xc7??)" msgstr "%pB(%pA+%#): неочікувана інÑÑ‚Ñ€ÑƒÐºÑ†Ñ–Ñ %#04X (мало бути 0xc7??)" -#: elf32-sh.c:4738 +#: elf32-sh.c:4616 #, c-format msgid "%pB(%pA+%#): unexpected instruction %#04X (expected 0xd1??)" msgstr "%pB(%pA+%#): неочікувана інÑÑ‚Ñ€ÑƒÐºÑ†Ñ–Ñ %#04X (мало бути 0xd1??)" -#: elf32-sh.c:4745 +#: elf32-sh.c:4623 #, c-format msgid "%pB(%pA+%#): unexpected instruction %#04X (expected 0x310c)" msgstr "%pB(%pA+%#): неочікувана інÑÑ‚Ñ€ÑƒÐºÑ†Ñ–Ñ %#04X (мало бути 0x310c)" -#: elf32-sh.c:4752 +#: elf32-sh.c:4630 #, c-format msgid "%pB(%pA+%#): unexpected instruction %#04X (expected 0x410b)" msgstr "%pB(%pA+%#): неочікувана інÑÑ‚Ñ€ÑƒÐºÑ†Ñ–Ñ %#04X (мало бути 0x410b)" -#: elf32-sh.c:4759 +#: elf32-sh.c:4637 #, c-format msgid "%pB(%pA+%#): unexpected instruction %#04X (expected 0x34cc)" msgstr "%pB(%pA+%#): неочікувана інÑÑ‚Ñ€ÑƒÐºÑ†Ñ–Ñ %#04X (мало бути 0x34cc)" -#: elf32-sh.c:4794 +#: elf32-sh.c:4672 #, c-format msgid "%pB(%pA): offset in relocation for IE->LE translation is too small: %#" msgstr "%pB(%pA): відÑтуп у переÑуванні Ð´Ð»Ñ Ñ‚Ñ€Ð°Ð½ÑлÑції IE->LE Ñ” надто малим: %#" -#: elf32-sh.c:4812 +#: elf32-sh.c:4690 #, c-format msgid "%pB(%pA+%#): unexpected instruction %#04X (expected 0xd0??: mov.l)" msgstr "%pB(%pA+%#): неочікувана інÑÑ‚Ñ€ÑƒÐºÑ†Ñ–Ñ %#04X (мало бути 0xd0??: mov.l)" -#: elf32-sh.c:4821 +#: elf32-sh.c:4699 #, c-format msgid "%pB(%pA+%#): unexpected instruction %#04X (expected 0x0?12: stc)" msgstr "%pB(%pA+%#): неочікувана інÑÑ‚Ñ€ÑƒÐºÑ†Ñ–Ñ %#04X (мало бути 0x0?12: stc)" -#: elf32-sh.c:4828 +#: elf32-sh.c:4706 #, c-format msgid "%pB(%pA+%#): unexpected instruction %#04X (expected 0x0?ce: mov.l)" msgstr "%pB(%pA+%#): неочікувана інÑÑ‚Ñ€ÑƒÐºÑ†Ñ–Ñ %#04X (мало бути 0x0?ce: mov.l)" -#: elf32-sh.c:4943 +#: elf32-sh.c:4821 #, c-format msgid "%pB(%pA): offset in relocation for GD->IE translation is too small: %#" msgstr "%pB(%pA): відÑтуп у переÑуванні Ð´Ð»Ñ Ñ‚Ñ€Ð°Ð½ÑлÑції GD->IE Ñ” надто малим: %#" -#: elf32-sh.c:5011 +#: elf32-sh.c:4889 #, c-format msgid "%pB(%pA): offset in relocation for LD->LE translation is too small: %#" msgstr "%pB(%pA): відÑтуп у переÑуванні Ð´Ð»Ñ Ñ‚Ñ€Ð°Ð½ÑлÑції LD->LE Ñ” надто малим: %#" -#: elf32-sh.c:5139 +#: elf32-sh.c:5017 #, c-format msgid "%X%C: relocation to \"%s\" references a different segment\n" msgstr "%X%C: переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð° «%s» поÑилаєтьÑÑ Ð½Ð° інший Ñегмент\n" -#: elf32-sh.c:5146 +#: elf32-sh.c:5024 #, c-format msgid "%C: warning: relocation to \"%s\" references a different segment\n" msgstr "%C: попередженнÑ: переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð° «%s» поÑилаєтьÑÑ Ð½Ð° інший Ñегмент\n" -#: elf32-sh.c:5651 elf32-sh.c:5733 +#: elf32-sh.c:5483 elf32-sh.c:5565 #, c-format msgid "%pB: `%s' accessed both as normal and FDPIC symbol" msgstr "%pB: доÑтуп до «%s» виконуєтьÑÑ Ñк до звичайного Ñимволу та Ñимволу FDPIC" -#: elf32-sh.c:5657 elf32-sh.c:5738 +#: elf32-sh.c:5489 elf32-sh.c:5570 #, c-format msgid "%pB: `%s' accessed both as FDPIC and thread local symbol" msgstr "%pB: доÑтуп до «%s» виконуєтьÑÑ Ñк до Ñимволу FDPIC, так Ñ– до локального Ð´Ð»Ñ Ð¿Ð¾Ñ‚Ð¾ÐºÑƒ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ñимволу" -#: elf32-sh.c:5688 +#: elf32-sh.c:5520 #, c-format msgid "%pB: Function descriptor relocation with non-zero addend" msgstr "%pB: переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð´ÐµÑкриптора функції з ненульовим доданком" -#: elf32-sh.c:5895 elf64-alpha.c:4691 +#: elf32-sh.c:5727 elf64-alpha.c:4657 #, c-format msgid "%pB: TLS local exec code cannot be linked into shared objects" msgstr "%pB: виконуваний код локального TLS не можна компонувати у об’єкти Ñпільного викориÑтаннÑ" -#: elf32-sh.c:6010 +#: elf32-sh.c:5842 #, c-format msgid "%pB: uses %s instructions while previous modules use %s instructions" msgstr "%pB: викориÑтовує інÑтрукції %s, хоча у попередніх модулÑÑ… викориÑтовуютьÑÑ Ñ–Ð½Ñтрукції %s" -#: elf32-sh.c:6022 +#: elf32-sh.c:5854 #, c-format msgid "internal error: merge of architecture '%s' with architecture '%s' produced unknown architecture" msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ «%s» з архітектурою «%s» призвело до ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð¾Ñ— архітектури" -#: elf32-sh.c:6059 +#: elf32-sh.c:5895 #, c-format msgid "%pB: uses instructions which are incompatible with instructions used in previous modules" msgstr "%pB: викориÑтовуютьÑÑ Ñ–Ð½Ñтрукції, Ñкі неÑуміÑні із інÑтрукціÑми, викориÑтаними у попередніх модулÑÑ…" -#: elf32-sh.c:6072 +#: elf32-sh.c:5908 #, c-format msgid "%pB: attempt to mix FDPIC and non-FDPIC objects" msgstr "%pB: Ñпроба Ñтворити Ñуміш об’єктів FDPIC Ñ– не-FDPIC" @@ -3340,118 +3428,123 @@ msgid "%pB: linking little endian files with big endian files" msgstr "%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñ–Ð² зі зворотним порÑдком байтів з файлами з прÑмим порÑдком байтів" -#: elf32-spu.c:732 +#: elf32-sparc.c:157 +#, c-format +msgid "%pB: unhandled sparc machine value '%lu' detected during write processing" +msgstr "%pB: під Ñ‡Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð¸Ñвлено непридатне до обробки Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð°Ñ€Ñ…Ñ–Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð¸ sparc «%lu»" + +#: elf32-spu.c:735 msgid "%X%P: overlay section %pA does not start on a cache line\n" msgstr "%X%P: розділ накладки %pA не починаєтьÑÑ Ð· Ñ€Ñдка кешуваннÑ\n" -#: elf32-spu.c:740 +#: elf32-spu.c:743 msgid "%X%P: overlay section %pA is larger than a cache line\n" msgstr "%X%P: розділ накладки %pA Ñ” більшим за Ñ€Ñдок кешуваннÑ\n" -#: elf32-spu.c:760 +#: elf32-spu.c:763 msgid "%X%P: overlay section %pA is not in cache area\n" msgstr "%X%P: розділ накладки %pA не перебуває у облаÑÑ‚Ñ– кешуваннÑ\n" -#: elf32-spu.c:801 +#: elf32-spu.c:804 #, c-format msgid "%X%P: overlay sections %pA and %pA do not start at the same address\n" msgstr "%X%P: розділи, що накладаютьÑÑ, %pA Ñ– %pA, не починаютьÑÑ Ð·Ð° одною адреÑою\n" -#: elf32-spu.c:1027 +#: elf32-spu.c:1030 #, c-format msgid "warning: call to non-function symbol %s defined in %pB" msgstr "попередженнÑ: виклик нефункціонального Ñимволу, %s, визначеного у %pB" -#: elf32-spu.c:1377 +#: elf32-spu.c:1380 #, c-format msgid "%pA:0x%v lrlive .brinfo (%u) differs from analysis (%u)\n" msgstr "%pA:0x%v .brinfo lrlive (%u) відрізнÑєтьÑÑ Ð²Ñ–Ð´ визначеного шлÑхом аналізу (%u)\n" -#: elf32-spu.c:1909 +#: elf32-spu.c:1910 #, c-format msgid "%pB is not allowed to define %s" msgstr "%pB не може визначати %s" -#: elf32-spu.c:1917 +#: elf32-spu.c:1918 #, c-format msgid "you are not allowed to define %s in a script" msgstr "не можна визначати %s у Ñкрипті" -#: elf32-spu.c:1951 +#: elf32-spu.c:1952 #, c-format msgid "%s in overlay section" msgstr "%s у розділі накладки" -#: elf32-spu.c:1980 +#: elf32-spu.c:1981 msgid "overlay stub relocation overflow" msgstr "Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð¿Ñ–Ð´ Ñ‡Ð°Ñ Ð¿ÐµÑ€ÐµÑÑƒÐ²Ð°Ð½Ð½Ñ ÑˆÐ°Ð±Ð»Ð¾Ð½Ð° накладки" -#: elf32-spu.c:1989 elf64-ppc.c:13230 +#: elf32-spu.c:1990 elf64-ppc.c:14496 msgid "stubs don't match calculated size" msgstr "шаблони не відповідають обчиÑленому розміру" -#: elf32-spu.c:2572 +#: elf32-spu.c:2573 #, c-format msgid "warning: %s overlaps %s\n" msgstr "попередженнÑ: %s перекриває %s\n" -#: elf32-spu.c:2588 +#: elf32-spu.c:2589 #, c-format msgid "warning: %s exceeds section size\n" msgstr "попередженнÑ: %s перевищує розмір розділу\n" -#: elf32-spu.c:2620 +#: elf32-spu.c:2621 #, c-format msgid "%pA:0x%v not found in function table\n" msgstr "%pA:0x%v не знайдено у таблиці функцій\n" -#: elf32-spu.c:2761 +#: elf32-spu.c:2762 #, c-format msgid "%pB(%pA+0x%v): call to non-code section %pB(%pA), analysis incomplete\n" msgstr "%pB(%pA+0x%v): виклик розділу, Ñкий не міÑтить код, %pB(%pA), аналіз Ñ” неповним\n" -#: elf32-spu.c:3330 +#: elf32-spu.c:3328 #, c-format msgid "stack analysis will ignore the call from %s to %s\n" msgstr "під Ñ‡Ð°Ñ Ð°Ð½Ð°Ð»Ñ–Ð·Ñƒ Ñтека буде проігноровано виклик з %s до %s\n" -#: elf32-spu.c:4027 +#: elf32-spu.c:4025 msgid " calls:\n" msgstr " виклики:\n" -#: elf32-spu.c:4341 +#: elf32-spu.c:4340 #, c-format msgid "%s duplicated in %s\n" msgstr "%s повторюєтьÑÑ Ñƒ %s\n" -#: elf32-spu.c:4345 +#: elf32-spu.c:4344 #, c-format msgid "%s duplicated\n" msgstr "%s дубльовано\n" -#: elf32-spu.c:4352 +#: elf32-spu.c:4351 msgid "sorry, no support for duplicate object files in auto-overlay script\n" msgstr "вибачте, у Ñкрипті автоматичного Ð½Ð°ÐºÐ»Ð°Ð´Ð°Ð½Ð½Ñ Ð½Ðµ передбачено підтримки Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð½Ð¸Ñ… файлів.\n" -#: elf32-spu.c:4394 +#: elf32-spu.c:4393 #, c-format msgid "non-overlay size of 0x%v plus maximum overlay size of 0x%v exceeds local store\n" msgstr "Ñума розміру 0x%v без оверлею та макÑимального розміру оверлею 0x%v перевищують міÑткіÑÑ‚ÑŒ локального Ñховища даних\n" -#: elf32-spu.c:4550 +#: elf32-spu.c:4549 #, c-format msgid "%pB:%pA%s exceeds overlay size\n" msgstr "%pB:%pA%s перевищує розмір накладки\n" -#: elf32-spu.c:4691 +#: elf32-spu.c:4690 msgid "%F%P: auto overlay error: %E\n" msgstr "%F%P: помилка автонакладаннÑ: %E\n" -#: elf32-spu.c:4712 +#: elf32-spu.c:4711 msgid "Stack size for call graph root nodes.\n" msgstr "Розмір Ñтека Ð´Ð»Ñ ÐºÐ¾Ñ€ÐµÐ½ÐµÐ²Ð¸Ñ… вузлів графу викликів.\n" -#: elf32-spu.c:4713 +#: elf32-spu.c:4712 msgid "" "\n" "Stack size for functions. Annotations: '*' max stack, 't' tail call\n" @@ -3459,19 +3552,19 @@ "\n" "Розмір Ñтека Ð´Ð»Ñ Ñ„ÑƒÐ½ÐºÑ†Ñ–Ð¹. ПозначеннÑ: «*» макÑимальна Ð¿Ð¾Ð·Ð¸Ñ†Ñ–Ñ Ñƒ Ñтеку, «t» хвоÑтовий виклик\n" -#: elf32-spu.c:4723 +#: elf32-spu.c:4722 msgid "Maximum stack required is 0x%v\n" msgstr "МакÑимальний потрібний розмір Ñтека — 0x%v\n" -#: elf32-spu.c:4742 +#: elf32-spu.c:4741 msgid "%X%P: stack/lrlive analysis error: %E\n" msgstr "%X%P: помилка аналізу Ñтека/lrlive: %E\n" -#: elf32-spu.c:4745 +#: elf32-spu.c:4744 msgid "%F%P: can not build overlay stubs: %E\n" msgstr "%F%P: не вдалоÑÑ Ð·Ñ–Ð±Ñ€Ð°Ñ‚Ð¸ накладні шаблони: %E\n" -#: elf32-spu.c:4814 +#: elf32-spu.c:4813 msgid "fatal error while creating .fixup" msgstr "критична помилка під Ñ‡Ð°Ñ Ñпроби ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ .fixup" @@ -3480,275 +3573,274 @@ msgid "%pB(%s+%#): unresolvable %s relocation against symbol `%s'" msgstr "%pB(%s+%#): нерозв’Ñзне переÑÑƒÐ²Ð°Ð½Ð½Ñ %s щодо Ñимволу «%s»" -#: elf32-tic6x.c:1628 +#: elf32-tic6x.c:1588 msgid "warning: generating a shared library containing non-PIC code" msgstr "попередженнÑ: ÑтворюєтьÑÑ Ð±Ñ–Ð±Ð»Ñ–Ð¾Ñ‚ÐµÐºÐ° Ñпільного викориÑтаннÑ, Ñка міÑтить код, неÑуміÑний з PIC" -#: elf32-tic6x.c:1633 +#: elf32-tic6x.c:1593 msgid "warning: generating a shared library containing non-PID code" msgstr "попередженнÑ: ÑтворюєтьÑÑ Ð±Ñ–Ð±Ð»Ñ–Ð¾Ñ‚ÐµÐºÐ° Ñпільного викориÑтаннÑ, Ñка міÑтить код, неÑуміÑний з PID" -#: elf32-tic6x.c:2493 +#: elf32-tic6x.c:2434 #, c-format msgid "%pB: SB-relative relocation but __c6xabi_DSBT_BASE not defined" msgstr "%pB: переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ñ–Ð´Ð½Ð¾Ñно SB, але __c6xabi_DSBT_BASE не визначено" -#: elf32-tic6x.c:3629 +#: elf32-tic6x.c:3511 #, c-format msgid "%pB: error: unknown mandatory EABI object attribute %d" msgstr "%pB: помилка: невідомий обов’Ñзковий атрибути об’єкта EABI, %d" -#: elf32-tic6x.c:3638 +#: elf32-tic6x.c:3520 #, c-format msgid "%pB: warning: unknown EABI object attribute %d" msgstr "%pB: попередженнÑ: невідомий атрибут об’єкта EABI, %d" -#: elf32-tic6x.c:3752 elf32-tic6x.c:3761 +#: elf32-tic6x.c:3638 elf32-tic6x.c:3647 #, c-format msgid "error: %pB requires more stack alignment than %pB preserves" msgstr "помилка: %pB потребує більшого Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ Ñтека, ніж збережено у %pB" -#: elf32-tic6x.c:3771 elf32-tic6x.c:3780 +#: elf32-tic6x.c:3657 elf32-tic6x.c:3666 #, c-format msgid "error: unknown Tag_ABI_array_object_alignment value in %pB" msgstr "помилка: невідоме Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Tag_ABI_array_object_alignment у %pB" -#: elf32-tic6x.c:3789 elf32-tic6x.c:3798 +#: elf32-tic6x.c:3675 elf32-tic6x.c:3684 #, c-format msgid "error: unknown Tag_ABI_array_object_align_expected value in %pB" msgstr "помилка: невідоме Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Tag_ABI_array_object_align_expected у %pB" -#: elf32-tic6x.c:3807 elf32-tic6x.c:3815 +#: elf32-tic6x.c:3693 elf32-tic6x.c:3701 #, c-format msgid "error: %pB requires more array alignment than %pB preserves" msgstr "помилка: %pB потребує більшого Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ Ð¼Ð°Ñиву, ніж збережено у %pB" -#: elf32-tic6x.c:3838 +#: elf32-tic6x.c:3724 #, c-format msgid "warning: %pB and %pB differ in wchar_t size" msgstr "попередженнÑ: %pB Ñ– %pB відрізнÑÑŽÑ‚ÑŒÑÑ Ð·Ð° розміром wchar_t" -#: elf32-tic6x.c:3857 +#: elf32-tic6x.c:3743 #, c-format msgid "warning: %pB and %pB differ in whether code is compiled for DSBT" msgstr "попередженнÑ: %pB Ñ– %pB відрізнÑÑŽÑ‚ÑŒÑÑ Ð·Ð° тим, чи було Ñ—Ñ… зібрано Ð´Ð»Ñ DSBT" -#: elf32-tilepro.c:3761 elfxx-tilegx.c:4145 elfxx-x86.c:1432 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:9530 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2579 +#: elf32-tilepro.c:3635 elfxx-tilegx.c:4019 elfxx-x86.c:1393 +#: elfnn-aarch64.c:9704 elfnn-riscv.c:2522 #, c-format msgid "discarded output section: `%pA'" msgstr "відкинуто розділ Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ…: «%pA»" -#: elf32-v850.c:153 +#: elf32-v850.c:152 #, c-format msgid "variable `%s' cannot occupy in multiple small data regions" msgstr "змінна «%s» не може займати декілька малих облаÑтей даних" -#: elf32-v850.c:156 +#: elf32-v850.c:155 #, c-format msgid "variable `%s' can only be in one of the small, zero, and tiny data regions" msgstr "змінну «%s» можна зберігати лише у одній з малих, нульових Ñ– малюÑіньких облаÑтей даних" -#: elf32-v850.c:159 +#: elf32-v850.c:158 #, c-format msgid "variable `%s' cannot be in both small and zero data regions simultaneously" msgstr "змінна «%s» не може зберігатиÑÑ Ñƒ малій Ñ– нульовій облаÑÑ‚Ñ– даних одночаÑно" -#: elf32-v850.c:162 +#: elf32-v850.c:161 #, c-format msgid "variable `%s' cannot be in both small and tiny data regions simultaneously" msgstr "змінна «%s» не може зберігатиÑÑ Ñƒ малій Ñ– малюÑінькій облаÑÑ‚Ñ– даних одночаÑно" -#: elf32-v850.c:165 +#: elf32-v850.c:164 #, c-format msgid "variable `%s' cannot be in both zero and tiny data regions simultaneously" msgstr "змінна «%s» не може зберігатиÑÑ Ñƒ нульовій Ñ– малюÑінькій облаÑÑ‚Ñ– даних одночаÑно" -#: elf32-v850.c:463 +#: elf32-v850.c:462 msgid "failed to find previous HI16 reloc" msgstr "не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ попереднє переÑÑƒÐ²Ð°Ð½Ð½Ñ HI16" -#: elf32-v850.c:2303 +#: elf32-v850.c:2302 msgid "could not locate special linker symbol __gp" msgstr "не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñпеціальний Ñимвол компонувальника __gp" -#: elf32-v850.c:2307 +#: elf32-v850.c:2306 msgid "could not locate special linker symbol __ep" msgstr "не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñпеціальний Ñимвол компонувальника __ep" -#: elf32-v850.c:2311 +#: elf32-v850.c:2310 msgid "could not locate special linker symbol __ctbp" msgstr "не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñпеціальний Ñимвол компонувальника __ctbp" -#: elf32-v850.c:2532 +#: elf32-v850.c:2531 #, c-format msgid "error: %pB needs 8-byte alignment but %pB is set for 4-byte alignment" msgstr "помилка: %pB потребує 8-байтового вирівнюваннÑ, але %pB налаштовано на 4-байтове вирівнюваннÑ" -#: elf32-v850.c:2548 +#: elf32-v850.c:2547 #, c-format msgid "error: %pB uses 64-bit doubles but %pB uses 32-bit doubles" msgstr "помилка: у %pB викориÑтано 64-бітові дійÑні чиÑла подвійної точноÑÑ‚Ñ–, а у %pB — 32-бітові" -#: elf32-v850.c:2563 +#: elf32-v850.c:2562 #, c-format msgid "error: %pB uses FPU-3.0 but %pB only supports FPU-2.0" msgstr "помилка: у %pB викориÑтано FPU-3.0, але у %pB викориÑтовуєтьÑÑ Ð»Ð¸ÑˆÐµ FPU-2.0" -#: elf32-v850.c:2595 +#: elf32-v850.c:2594 #, c-format msgid " alignment of 8-byte entities: " msgstr " Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ 8-байтових запиÑів: " -#: elf32-v850.c:2598 +#: elf32-v850.c:2597 #, c-format msgid "4-byte" msgstr "4-байтовий" -#: elf32-v850.c:2599 +#: elf32-v850.c:2598 #, c-format msgid "8-byte" msgstr "8-байтовий" -#: elf32-v850.c:2600 elf32-v850.c:2612 +#: elf32-v850.c:2599 elf32-v850.c:2611 #, c-format msgid "not set" msgstr "не вÑтановлено" -#: elf32-v850.c:2601 elf32-v850.c:2613 elf32-v850.c:2625 elf32-v850.c:2636 -#: elf32-v850.c:2647 elf32-v850.c:2658 +#: elf32-v850.c:2600 elf32-v850.c:2612 elf32-v850.c:2624 elf32-v850.c:2635 +#: elf32-v850.c:2646 elf32-v850.c:2657 #, c-format msgid "unknown: %x" msgstr "невідомо: %x" -#: elf32-v850.c:2607 +#: elf32-v850.c:2606 #, c-format msgid " size of doubles: " msgstr " розмір double: " -#: elf32-v850.c:2610 +#: elf32-v850.c:2609 #, c-format msgid "4-bytes" msgstr "4-байтові" -#: elf32-v850.c:2611 +#: elf32-v850.c:2610 #, c-format msgid "8-bytes" msgstr "8-байтові" -#: elf32-v850.c:2619 +#: elf32-v850.c:2618 #, c-format msgid " FPU support required: " msgstr " Потрібна підтримка FPU: " -#: elf32-v850.c:2622 +#: elf32-v850.c:2621 #, c-format msgid "FPU-2.0" msgstr "FPU-2.0" -#: elf32-v850.c:2623 +#: elf32-v850.c:2622 #, c-format msgid "FPU-3.0" msgstr "FPU-3.0" -#: elf32-v850.c:2624 +#: elf32-v850.c:2623 #, c-format msgid "none" msgstr "немає" -#: elf32-v850.c:2631 +#: elf32-v850.c:2630 #, c-format msgid "SIMD use: " msgstr "ВикориÑÑ‚Ð°Ð½Ð½Ñ SIMD: " -#: elf32-v850.c:2634 elf32-v850.c:2645 elf32-v850.c:2656 +#: elf32-v850.c:2633 elf32-v850.c:2644 elf32-v850.c:2655 #, c-format msgid "yes" msgstr "так" -#: elf32-v850.c:2635 elf32-v850.c:2646 elf32-v850.c:2657 +#: elf32-v850.c:2634 elf32-v850.c:2645 elf32-v850.c:2656 #, c-format msgid "no" msgstr "ні" -#: elf32-v850.c:2642 +#: elf32-v850.c:2641 #, c-format msgid "CACHE use: " msgstr "ВикориÑÑ‚Ð°Ð½Ð½Ñ CACHE: " -#: elf32-v850.c:2653 +#: elf32-v850.c:2652 #, c-format msgid "MMU use: " msgstr "ВикориÑÑ‚Ð°Ð½Ð½Ñ MMU: " -#: elf32-v850.c:2820 elf32-v850.c:2876 +#: elf32-v850.c:2819 elf32-v850.c:2875 #, c-format msgid "%pB: architecture mismatch with previous modules" msgstr "%pB: невідповідніÑÑ‚ÑŒ архітектур з попередніми модулÑми" #. xgettext:c-format. -#: elf32-v850.c:2894 +#: elf32-v850.c:2893 #, c-format msgid "private flags = %lx: " msgstr "закриті прапорці = %lx: " -#: elf32-v850.c:2899 +#: elf32-v850.c:2898 #, c-format msgid "unknown v850 architecture" msgstr "невідома архітектура v850" -#: elf32-v850.c:2901 +#: elf32-v850.c:2900 #, c-format msgid "v850 E3 architecture" msgstr "архітектура v850 E3" -#: elf32-v850.c:2903 elf32-v850.c:2910 +#: elf32-v850.c:2902 elf32-v850.c:2909 #, c-format msgid "v850 architecture" msgstr "архітектура v850" -#: elf32-v850.c:2911 +#: elf32-v850.c:2910 #, c-format msgid "v850e architecture" msgstr "архітектура v850e" -#: elf32-v850.c:2912 +#: elf32-v850.c:2911 #, c-format msgid "v850e1 architecture" msgstr "архітектура v850e1" -#: elf32-v850.c:2913 +#: elf32-v850.c:2912 #, c-format msgid "v850e2 architecture" msgstr "архітектура v850e2" -#: elf32-v850.c:2914 +#: elf32-v850.c:2913 #, c-format msgid "v850e2v3 architecture" msgstr "архітектура v850e2v3" -#: elf32-v850.c:2915 +#: elf32-v850.c:2914 #, c-format msgid "v850e3v5 architecture" msgstr "архітектура v850e3v5" -#: elf32-v850.c:3609 elf32-v850.c:3848 +#: elf32-v850.c:3612 elf32-v850.c:3851 #, c-format msgid "%pB: %#: warning: %s points to unrecognized insns" msgstr "%pB: %#: попередженнÑ: %s вказує на нерозпізнані інÑтрукції" -#: elf32-v850.c:3619 elf32-v850.c:3858 +#: elf32-v850.c:3622 elf32-v850.c:3861 #, c-format msgid "%pB: %#: warning: %s points to unrecognized insn %#x" msgstr "%pB: %#: попередженнÑ: %s вказує на нерозпізнану інÑтрукцію %#x" -#: elf32-v850.c:3665 elf32-v850.c:3893 +#: elf32-v850.c:3668 elf32-v850.c:3896 #, c-format msgid "%pB: %#: warning: %s points to unrecognized reloc" msgstr "%pB: %#: попередженнÑ: %s вказує на невідоме переÑуваннÑ" -#: elf32-v850.c:3705 +#: elf32-v850.c:3708 #, c-format msgid "%pB: %#: warning: %s points to unrecognized reloc %#" msgstr "%pB: %#: попередженнÑ: %s вказує на невідоме переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð¾ %#" @@ -3773,22 +3865,22 @@ msgid "%pB: warning: GOT addend of % to `%s' does not match previous GOT addend of %" msgstr "%pB: попередженнÑ: доданок GOT % до «%s» не відповідає попередньому доданку GOT %" -#: elf32-vax.c:1446 +#: elf32-vax.c:1389 #, c-format msgid "%pB: warning: PLT addend of % to `%s' from %pA section ignored" msgstr "%pB: попередженнÑ: доданок PLT % до «%s» з розділу %pA проігноровано" -#: elf32-vax.c:1572 +#: elf32-vax.c:1515 #, c-format msgid "%pB: warning: %s relocation against symbol `%s' from %pA section" msgstr "%pB: попередженнÑ: переÑÑƒÐ²Ð°Ð½Ð½Ñ %s відноÑно Ñимволу «%s» з розділу %pA" -#: elf32-vax.c:1579 +#: elf32-vax.c:1522 #, c-format msgid "%pB: warning: %s relocation to %# from %pA section" msgstr "%pB: попередженнÑ: переÑÑƒÐ²Ð°Ð½Ð½Ñ %s до %# з розділу %pA" -#: elf32-visium.c:821 +#: elf32-visium.c:824 #, c-format msgid "%pB: compiled %s -mtune=%s and linked with modules compiled %s -mtune=%s" msgstr "%pB: зібрано %s -mtune=%s Ñ– Ñкомпоновано з модулÑми, зібраними %s -mtune=%s" @@ -3803,238 +3895,261 @@ msgid "error reading cpu type from elf private data" msgstr "помилка під Ñ‡Ð°Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… щодо типу процеÑора з приватних даних elf" -#: elf32-xstormy16.c:457 elf64-ia64-vms.c:2085 elf32-ia64.c:2353 -#: elf64-ia64.c:2353 +#: elf32-xstormy16.c:457 elf64-ia64-vms.c:2074 elfnn-ia64.c:2343 msgid "non-zero addend in @fptr reloc" msgstr "ненульовий доданок у переÑуванні @fptr" -#: elf32-xtensa.c:937 +#: elf32-xtensa.c:1001 #, c-format msgid "%pB(%pA): invalid property table" msgstr "%pB(%pA): некоректна Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ Ð²Ð»Ð°ÑтивоÑтей" -#: elf32-xtensa.c:2675 +#: elf32-xtensa.c:2733 #, c-format msgid "%pB(%pA+%#): relocation offset out of range (size=%#)" msgstr "%pB(%pA+%#): відÑтуп переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ð·Ð° діапазоном (розмір=%#)" -#: elf32-xtensa.c:2758 elf32-xtensa.c:2881 +#: elf32-xtensa.c:2816 elf32-xtensa.c:2939 msgid "dynamic relocation in read-only section" msgstr "динамічне переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñƒ розділі, призначеному лише Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ" -#: elf32-xtensa.c:2858 +#: elf32-xtensa.c:2916 msgid "TLS relocation invalid without dynamic sections" msgstr "ПереÑÑƒÐ²Ð°Ð½Ð½Ñ TLS Ñ” некоректним без динамічних розділів" -#: elf32-xtensa.c:3070 +#: elf32-xtensa.c:3126 msgid "internal inconsistency in size of .got.loc section" msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð½ÐµÐ¿Ð¾ÑлідовніÑÑ‚ÑŒ у розмірах розділу .got.loc" -#: elf32-xtensa.c:3377 +#: elf32-xtensa.c:3432 #, c-format msgid "%pB: incompatible machine type; output is 0x%x; input is 0x%x" msgstr "%pB: неÑуміÑні типи архітектур. Ð’Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ â€” 0x%x. Вхідні дані — 0x%x" -#: elf32-xtensa.c:4608 elf32-xtensa.c:4616 +#: elf32-xtensa.c:4726 elf32-xtensa.c:4734 msgid "attempt to convert L32R/CALLX to CALL failed" msgstr "Ñпроба Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ L32R/CALLX на CALL зазнала невдачі" -#: elf32-xtensa.c:6444 elf32-xtensa.c:6523 elf32-xtensa.c:7899 +#: elf32-xtensa.c:6559 elf32-xtensa.c:6638 elf32-xtensa.c:8064 #, c-format msgid "%pB(%pA+%#): could not decode instruction; possible configuration mismatch" msgstr "%pB(%pA+%#): не вдалоÑÑ Ð´ÐµÐºÐ¾Ð´ÑƒÐ²Ð°Ñ‚Ð¸ інÑтрукцію, можлива невідповідніÑÑ‚ÑŒ конфігурацій" -#: elf32-xtensa.c:7638 +#: elf32-xtensa.c:7805 #, c-format msgid "%pB(%pA+%#): could not decode instruction for XTENSA_ASM_SIMPLIFY relocation; possible configuration mismatch" msgstr "%pB(%pA+%#): не вдалоÑÑ Ð´ÐµÐºÐ¾Ð´ÑƒÐ²Ð°Ñ‚Ð¸ інÑтрукцію Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÑÑƒÐ²Ð°Ð½Ð½Ñ XTENSA_ASM_SIMPLIFY, можлива невідповідніÑÑ‚ÑŒ конфігурацій" -#: elf32-xtensa.c:9493 +#: elf32-xtensa.c:9663 msgid "invalid relocation address" msgstr "некоректна адреÑа переÑуваннÑ" -#: elf32-xtensa.c:9543 +#: elf32-xtensa.c:9754 msgid "overflow after relaxation" msgstr "Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð¿Ñ–ÑÐ»Ñ Ð¾Ð¿Ñ‚Ð¸Ð¼Ñ–Ð·Ð°Ñ†Ñ–Ñ— розміру" -#: elf32-xtensa.c:10689 +#: elf32-xtensa.c:10900 #, c-format msgid "%pB(%pA+%#): unexpected fix for %s relocation" msgstr "%pB(%pA+%#): неочікуване Ð²Ð¸Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÑÑƒÐ²Ð°Ð½Ð½Ñ %s" -#: elf64-alpha.c:472 +#: elf32-z80.c:473 +#, c-format +msgid "%pB: unsupported bfd mach %#lx" +msgstr "%pB: непідтримуване Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ mach bfd %#lx" + +#: elf32-z80.c:518 +#, c-format +msgid "%pB: unsupported mach %#x" +msgstr "%pB: напідтримуване Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ mach %#x" + +#: elf32-z80.c:546 +#, c-format +msgid "%pB: unsupported arch %#x" +msgstr "%pB: непідтримувана архітектура %#x" + +#: elf64-alpha.c:473 msgid "GPDISP relocation did not find ldah and lda instructions" msgstr "ПереÑуваннÑм GPDISP не знайдено інÑтрукції ldah Ñ– lda" -#: elf64-alpha.c:2463 +#: elf64-alpha.c:1999 elf64-alpha.c:2694 elflink.c:14885 +#, c-format +msgid "%pB: dynamic relocation against `%pT' in read-only section `%pA'\n" +msgstr "%pB: динамічне переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ‰Ð¾Ð´Ð¾ «%pT» у розділі «%pA», призначеному лише Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ\n" + +#: elf64-alpha.c:2451 #, c-format msgid "%pB: .got subsegment exceeds 64K (size %d)" msgstr "%pB: розмір підÑегмента .got перевищує 64кБ (розмір — %d)" -#: elf64-alpha.c:3018 elf64-alpha.c:3214 +#: elf64-alpha.c:2989 elf64-alpha.c:3183 #, c-format msgid "%pB: %pA+%#: warning: %s relocation against unexpected insn" msgstr "%pB: %pA+%#: попередженнÑ: переÑÑƒÐ²Ð°Ð½Ð½Ñ %s щодо неочікуваної інÑтрукції" -#: elf64-alpha.c:4415 elf64-alpha.c:4428 +#: elf64-alpha.c:4381 elf64-alpha.c:4394 #, c-format msgid "%pB: gp-relative relocation against dynamic symbol %s" msgstr "%pB: gp-відноÑне переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ‰Ð¾Ð´Ð¾ динамічного Ñимволу %s" -#: elf64-alpha.c:4484 +#: elf64-alpha.c:4450 #, c-format msgid "%pB: change in gp: BRSGP %s" msgstr "%pB: зміна у gp: BRSGP %s" -#: elf64-alpha.c:4509 mach-o.c:615 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:499 +#: elf64-alpha.c:4475 mach-o.c:616 elfnn-riscv.c:485 msgid "" msgstr "<невідома>" -#: elf64-alpha.c:4515 +#: elf64-alpha.c:4481 #, c-format msgid "%pB: !samegp reloc against symbol without .prologue: %s" msgstr "%pB: переÑÑƒÐ²Ð°Ð½Ð½Ñ !samegp щодо Ñимволу без .prologue: %s" -#: elf64-alpha.c:4573 +#: elf64-alpha.c:4539 #, c-format msgid "%pB: unhandled dynamic relocation against %s" msgstr "%pB: непридатне до обробки динамічне переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ‰Ð¾Ð´Ð¾ %s" -#: elf64-alpha.c:4608 +#: elf64-alpha.c:4574 #, c-format msgid "%pB: pc-relative relocation against undefined weak symbol %s" msgstr "%pB: pc-відноÑне переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ‰Ð¾Ð´Ð¾ невизначеного Ñлабкого Ñимволу %s" -#: elf64-alpha.c:4674 +#: elf64-alpha.c:4640 #, c-format msgid "%pB: dtp-relative relocation against dynamic symbol %s" msgstr "%pB: dtp-відноÑне переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ‰Ð¾Ð´Ð¾ динамічного Ñимволу %s" -#: elf64-alpha.c:4699 +#: elf64-alpha.c:4665 #, c-format msgid "%pB: tp-relative relocation against dynamic symbol %s" msgstr "%pB: tp-відноÑне переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ‰Ð¾Ð´Ð¾ динамічного Ñимволу %s" +#. Only if it's not an unresolved symbol. +#: elf64-bpf.c:517 +msgid "internal error: relocation not supported" +msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: підтримки переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ðµ передбачено" + #: elf64-gen.c:71 #, c-format msgid "%pB: Relocations in generic ELF (EM: %d)" msgstr "%pB: переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñƒ типовому ELF (EM: %d)" -#: elf64-hppa.c:2081 +#: elf64-hppa.c:2032 #, c-format msgid "stub entry for %s cannot load .plt, dp offset = %" msgstr "шаблон запиÑу Ð´Ð»Ñ %s не можна завантажувати .plt, відÑтуп dp = %" -#: elf64-hppa.c:3286 +#: elf64-hppa.c:3236 #, c-format msgid "%pB(%pA+%#): cannot reach %s" msgstr "%pB(%pA+%#): не вдалоÑÑ Ð´Ð¾ÑÑгти %s" -#: elf64-ia64-vms.c:598 elf32-ia64.c:636 elf64-ia64.c:636 +#: elf64-ia64-vms.c:598 elfnn-ia64.c:639 #, c-format msgid "%pB: can't relax br at %# in section `%pA'; please use brl or indirect branch" msgstr "%pB: не вдалоÑÑ Ð¾Ð¿Ñ‚Ð¸Ð¼Ñ–Ð·ÑƒÐ²Ð°Ñ‚Ð¸ br за адреÑою %# у розділі «%pA». Будь лаÑка, ÑкориÑтайтеÑÑ brl або непрÑмим відгалуженнÑм." -#: elf64-ia64-vms.c:2040 elf32-ia64.c:2301 elf64-ia64.c:2301 +#: elf64-ia64-vms.c:2029 elfnn-ia64.c:2291 msgid "@pltoff reloc against local symbol" msgstr "переÑÑƒÐ²Ð°Ð½Ð½Ñ @pltoff щодо локального Ñимволу" -#: elf64-ia64-vms.c:3292 elf32-ia64.c:3712 elf64-ia64.c:3712 +#: elf64-ia64-vms.c:3281 elfnn-ia64.c:3674 #, c-format msgid "%pB: short data segment overflowed (%# >= 0x400000)" msgstr "%pB: переповнено короткий Ñегмент даних (%# >= 0x400000)" -#: elf64-ia64-vms.c:3302 elf32-ia64.c:3722 elf64-ia64.c:3722 +#: elf64-ia64-vms.c:3291 elfnn-ia64.c:3684 #, c-format msgid "%pB: __gp does not cover short data segment" msgstr "%pB: __gp не вкриває короткого Ñегмента даних" -#: elf64-ia64-vms.c:3572 elf32-ia64.c:3996 elf64-ia64.c:3996 +#: elf64-ia64-vms.c:3561 elfnn-ia64.c:3958 #, c-format msgid "%pB: non-pic code with imm relocation against dynamic symbol `%s'" msgstr "%pB: не-pic код з переÑуваннÑм imm щодо динамічного Ñимволу «%s»" -#: elf64-ia64-vms.c:3636 elf32-ia64.c:4064 elf64-ia64.c:4064 +#: elf64-ia64-vms.c:3625 elfnn-ia64.c:4026 #, c-format msgid "%pB: @gprel relocation against dynamic symbol %s" msgstr "%pB: переÑÑƒÐ²Ð°Ð½Ð½Ñ @gprel щодо динамічного Ñимволу %s" -#: elf64-ia64-vms.c:3695 elf32-ia64.c:4127 elf64-ia64.c:4127 +#: elf64-ia64-vms.c:3684 elfnn-ia64.c:4089 #, c-format msgid "%pB: linking non-pic code in a position independent executable" msgstr "%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ðµ-pic коду у виконуваному файлі з незалежним позиціюваннÑм" -#: elf64-ia64-vms.c:3797 elf32-ia64.c:4265 elf64-ia64.c:4265 +#: elf64-ia64-vms.c:3786 elfnn-ia64.c:4227 #, c-format msgid "%pB: @internal branch to dynamic symbol %s" msgstr "%pB: Ð²Ñ–Ð´Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ @internal до динамічного Ñимволу %s" -#: elf64-ia64-vms.c:3800 elf32-ia64.c:4268 elf64-ia64.c:4268 +#: elf64-ia64-vms.c:3789 elfnn-ia64.c:4230 #, c-format msgid "%pB: speculation fixup to dynamic symbol %s" msgstr "%pB: здогадка щодо адреÑної прив’Ñзки до динамічного Ñимволу %s" -#: elf64-ia64-vms.c:3803 elf32-ia64.c:4271 elf64-ia64.c:4271 +#: elf64-ia64-vms.c:3792 elfnn-ia64.c:4233 #, c-format msgid "%pB: @pcrel relocation against dynamic symbol %s" msgstr "%pB: переÑÑƒÐ²Ð°Ð½Ð½Ñ @pcrel щодо динамічного Ñимволу %s" -#: elf64-ia64-vms.c:3927 elf32-ia64.c:4468 elf64-ia64.c:4468 +#: elf64-ia64-vms.c:3916 elfnn-ia64.c:4430 msgid "unsupported reloc" msgstr "непідтримуване переÑуваннÑ" -#: elf64-ia64-vms.c:3964 elf32-ia64.c:4506 elf64-ia64.c:4506 +#: elf64-ia64-vms.c:3953 elfnn-ia64.c:4468 #, c-format msgid "%pB: missing TLS section for relocation %s against `%s' at %# in section `%pA'." msgstr "%pB: не виÑтачає розділу TLS Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÑÑƒÐ²Ð°Ð½Ð½Ñ %s щодо «%s» за адреÑою %# у розділі «%pA»." -#: elf64-ia64-vms.c:3981 elf32-ia64.c:4523 elf64-ia64.c:4523 +#: elf64-ia64-vms.c:3970 elfnn-ia64.c:4485 #, c-format msgid "%pB: Can't relax br (%s) to `%s' at %# in section `%pA' with size %# (> 0x1000000)." msgstr "%pB: не вдалоÑÑ Ð¾Ð¿Ñ‚Ð¸Ð¼Ñ–Ð·ÑƒÐ²Ð°Ñ‚Ð¸ br (%s) до «%s» за адреÑою %# у розділі «%pA» з розміром %# (> 0x1000000)." -#: elf64-ia64-vms.c:4273 elf32-ia64.c:4781 elf64-ia64.c:4781 +#: elf64-ia64-vms.c:4266 elfnn-ia64.c:4746 #, c-format msgid "%pB: linking trap-on-NULL-dereference with non-trapping files" msgstr "%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ trap-on-NULL-dereference з файлами без Ð·Ð°Ñ…Ð¾Ð¿Ð»ÐµÐ½Ð½Ñ (trapping)" -#: elf64-ia64-vms.c:4282 elf32-ia64.c:4790 elf64-ia64.c:4790 +#: elf64-ia64-vms.c:4275 elfnn-ia64.c:4755 #, c-format msgid "%pB: linking big-endian files with little-endian files" msgstr "%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñ–Ð² зі прÑмим порÑдком байтів з файлами зі зворотним порÑдком байтів" -#: elf64-ia64-vms.c:4291 elf32-ia64.c:4799 elf64-ia64.c:4799 +#: elf64-ia64-vms.c:4284 elfnn-ia64.c:4764 #, c-format msgid "%pB: linking 64-bit files with 32-bit files" msgstr "%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ 64-бітових файлів з 32-бітовими файлами" -#: elf64-ia64-vms.c:4300 elf32-ia64.c:4808 elf64-ia64.c:4808 +#: elf64-ia64-vms.c:4293 elfnn-ia64.c:4773 #, c-format msgid "%pB: linking constant-gp files with non-constant-gp files" msgstr "%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñ–Ð² зі Ñталим gp з файлами зі змінним gp" -#: elf64-ia64-vms.c:4310 elf32-ia64.c:4818 elf64-ia64.c:4818 +#: elf64-ia64-vms.c:4303 elfnn-ia64.c:4783 #, c-format msgid "%pB: linking auto-pic files with non-auto-pic files" msgstr "%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñ–Ð² з автоматичним pic з файлами без автоматичного pic" -#: elf64-ia64-vms.c:5153 elflink.c:4894 +#: elf64-ia64-vms.c:5150 elflink.c:5072 #, c-format msgid "warning: alignment %u of common symbol `%s' in %pB is greater than the alignment (%u) of its section %pA" msgstr "попередженнÑ: Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ %u загального Ñимволу «%s» у %pB перевищує Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ (%u) його розділу %pA" -#: elf64-ia64-vms.c:5160 elflink.c:4901 +#: elf64-ia64-vms.c:5157 elflink.c:5079 #, c-format msgid "warning: alignment %u of symbol `%s' in %pB is smaller than %u in %pB" msgstr "попередженнÑ: Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ %u Ñимволу «%s» у %pB Ñ” меншим за %u у %pB" -#: elf64-ia64-vms.c:5176 elflink.c:4918 +#: elf64-ia64-vms.c:5173 elflink.c:5096 #, c-format msgid "warning: size of symbol `%s' changed from % in %pB to % in %pB" msgstr "попередженнÑ: розмір Ñимволу «%s» змінено з % у %pB на % у %pB" -#: elf64-mips.c:4098 +#: elf64-mips.c:4095 #, c-format msgid "%pB(%pA): relocation % has invalid symbol index %ld" msgstr "%pB(%pA): переÑÑƒÐ²Ð°Ð½Ð½Ñ % міÑтить некоректний Ñ–Ð½Ð´ÐµÐºÑ Ñимволу, %ld" @@ -4081,147 +4196,160 @@ msgid "%pB: directive LOCAL valid only with a register or absolute value" msgstr "%pB: директиву LOCAL можна викориÑтовувати лише зі значеннÑми у регіÑтрах або абÑолютними значеннÑми" -#: elf64-mmix.c:1744 +#: elf64-mmix.c:1742 #, c-format msgid "%pB: LOCAL directive: register $% is not a local register; first global register is $%" msgstr "%pB: директива LOCAL: регіÑÑ‚Ñ€ $% не Ñ” локальним регіÑтром. Першим загальним регіÑтром Ñ” $%." -#: elf64-mmix.c:2173 +#: elf64-mmix.c:2167 #, c-format msgid "%pB: error: multiple definition of `%s'; start of %s is set in a earlier linked file" msgstr "%pB: помилка: декілька визначень «%s»; початок %s вÑтановлено у раніше Ñкомпонований файл" -#: elf64-mmix.c:2228 +#: elf64-mmix.c:2222 msgid "register section has contents\n" msgstr "у розділі регіÑтрів міÑÑ‚ÑÑ‚ÑŒÑÑ Ð´Ð°Ð½Ñ–\n" -#: elf64-mmix.c:2418 +#: elf64-mmix.c:2412 #, c-format msgid "internal inconsistency: remaining %lu != max %lu; please report this bug" msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð½ÐµÑƒÐ·Ð³Ð¾Ð´Ð¶ÐµÐ½Ñ–ÑÑ‚ÑŒ: залишилоÑÑ %lu != макÑ. %lu; будь лаÑка, повідомте про цю ваду" -#: elf64-ppc.c:3827 +#: elf64-ppc.c:1342 +#, c-format +msgid "warning: %s should be used rather than %s" +msgstr "попередженнÑ: Ñлід викориÑтовувати %s, а не %s" + +#: elf64-ppc.c:4101 #, c-format msgid "symbol '%s' has invalid st_other for ABI version 1" msgstr "Ñимвол «%s» має некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ st_other Ð´Ð»Ñ Ð²ÐµÑ€ÑÑ–Ñ— ABI 1" -#: elf64-ppc.c:4002 +#: elf64-ppc.c:4281 #, c-format msgid "%pB .opd not allowed in ABI version %d" msgstr ".opd %pB не можна викориÑтовувати у верÑÑ–Ñ— ABI %d" -#: elf64-ppc.c:4523 +#: elf64-ppc.c:4852 #, c-format msgid "%H: %s reloc unsupported in shared libraries and PIEs\n" msgstr "%H: підтримки переÑÑƒÐ²Ð°Ð½Ð½Ñ %s не передбачено у бібліотеках Ñпільного кориÑÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ– PIE\n" -#: elf64-ppc.c:4919 +#: elf64-ppc.c:5260 #, c-format msgid "%pB uses unknown e_flags 0x%lx" msgstr "%pB викориÑтовує невідоме Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ e_flags 0x%lx" -#: elf64-ppc.c:4927 +#: elf64-ppc.c:5268 #, c-format msgid "%pB: ABI version %ld is not compatible with ABI version %ld output" msgstr "%pB: верÑÑ–Ñ ABI %ld Ñ” неÑуміÑною з верÑією ABI %ld результату" -#: elf64-ppc.c:4954 +#: elf64-ppc.c:5295 #, c-format msgid " [abiv%ld]" msgstr " [abiv%ld]" -#: elf64-ppc.c:6145 +#: elf64-ppc.c:6574 msgid "%P: copy reloc against `%pT' requires lazy plt linking; avoid setting LD_BIND_NOW=1 or upgrade gcc\n" msgstr "%P: ÐºÐ¾Ð¿Ñ–ÑŽÐ²Ð°Ð½Ð½Ñ Ð¿ÐµÑ€ÐµÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ‰Ð¾Ð´Ð¾ «%pT» потребує відкладеного ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ plt; не вÑтановлюйте LD_BIND_NOW=1 або оновіть gcc\n" -#: elf64-ppc.c:6417 +#: elf64-ppc.c:6841 #, c-format msgid "%pB: undefined symbol on R_PPC64_TOCSAVE relocation" msgstr "%pB: невизначений Ñимвол у переÑуванні R_PPC64_TOCSAVE" -#: elf64-ppc.c:6644 +#: elf64-ppc.c:7089 #, c-format msgid "dynreloc miscount for %pB, section %pA" msgstr "помилки у обчиÑленні динамічного переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ %pB, розділ %pA" -#: elf64-ppc.c:6733 +#: elf64-ppc.c:7178 #, c-format msgid "%pB: .opd is not a regular array of opd entries" msgstr "%pB: .opd не Ñ” звичайним маÑивом запиÑів opd" -#: elf64-ppc.c:6743 +#: elf64-ppc.c:7188 #, c-format msgid "%pB: unexpected reloc type %u in .opd section" msgstr "%pB: неочікуваний тип переÑуваннÑ, %u, у розділі .opd" -#: elf64-ppc.c:6765 +#: elf64-ppc.c:7210 #, c-format msgid "%pB: undefined sym `%s' in .opd section" msgstr "%pB: невизначений Ñимвол, «%s» у розділі .opd" -#: elf64-ppc.c:7249 +#: elf64-ppc.c:7697 msgid "warning: --plt-localentry is especially dangerous without ld.so support to detect ABI violations" msgstr "попередженнÑ: --plt-localentry оÑобливо небезпечний, Ñкщо у ld.so не передбачено підтримки виÑÐ²Ð»ÐµÐ½Ð½Ñ Ð¿Ð¾Ñ€ÑƒÑˆÐµÐ½ÑŒ ABI" -#: elf64-ppc.c:7499 +#: elf64-ppc.c:8017 msgid "%H __tls_get_addr lost arg, TLS optimization disabled\n" msgstr "%H __tls_get_addr втрачено аргумент, оптимізацію TLS вимкнено\n" -#: elf64-ppc.c:7876 elf64-ppc.c:8513 +#: elf64-ppc.c:8417 elf64-ppc.c:9130 #, c-format msgid "%s defined on removed toc entry" msgstr "%s визначено у вилученому запиÑÑ– toc" -#: elf64-ppc.c:8241 -#, c-format -msgid "%H: toc optimization is not supported for %s instruction\n" -msgstr "%H: Ð´Ð»Ñ Ñ–Ð½Ñтрукції %s не передбачено підтримки оптимізації toc\n" - -#: elf64-ppc.c:8470 +#: elf64-ppc.c:9087 #, c-format msgid "%H: %s references optimized away TOC entry\n" msgstr "%H: %s поÑилаєтьÑÑ Ð½Ð° уÑунутий у результаті оптимізації Ð·Ð°Ð¿Ð¸Ñ TOC\n" -#: elf64-ppc.c:9301 +#: elf64-ppc.c:9308 +#, c-format +msgid "%H: got/toc optimization is not supported for %s instruction\n" +msgstr "%H: Ð´Ð»Ñ Ñ–Ð½Ñтрукції %s не передбачено підтримки оптимізації got/toc\n" + +#: elf64-ppc.c:10135 #, c-format msgid "warning: discarding dynamic section %s" msgstr "попередженнÑ: відкидаємо динамічний розділ %s" -#: elf64-ppc.c:10215 +#: elf64-ppc.c:11277 msgid "%P: cannot find opd entry toc for `%pT'\n" msgstr "`%P: не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ð·Ð°Ð¿Ð¸Ñ opd у toc Ð´Ð»Ñ Â«%pT»\n" -#: elf64-ppc.c:10303 +#: elf64-ppc.c:11323 elf64-ppc.c:11867 +msgid "%F%P: Could not assign group %pA target %pA to an output section. Retry without --enable-non-contiguous-regions.\n" +msgstr "F%P: не вдалоÑÑ Ð¿Ð¾Ð²'Ñзати групу %pA Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ %pA із розділом виведеннÑ. Повторіть без --enable-non-contiguous-regions.\n" + +#: elf64-ppc.c:11385 #, c-format msgid "long branch stub `%s' offset overflow" msgstr "Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð²Ñ–Ð´Ñтупу шаблона довгої гілки, «%s»" -#: elf64-ppc.c:10330 +#: elf64-ppc.c:11412 #, c-format msgid "can't find branch stub `%s'" msgstr "не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ шаблон Ñ€Ð¾Ð·Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ Â«%s»" -#: elf64-ppc.c:10394 elf64-ppc.c:10642 elf64-ppc.c:12791 +#: elf64-ppc.c:11476 elf64-ppc.c:11743 elf64-ppc.c:13972 #, c-format msgid "%P: linkage table error against `%pT'\n" msgstr "%P: помилка у таблиці ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ñ‰Ð¾Ð´Ð¾ «%pT»\n" -#: elf64-ppc.c:10820 +#: elf64-ppc.c:11939 #, c-format msgid "can't build branch stub `%s'" msgstr "не вдалоÑÑ Ð¿Ð¾Ð±ÑƒÐ´ÑƒÐ²Ð°Ñ‚Ð¸ шаблон Ñ€Ð¾Ð·Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ Â«%s»" -#: elf64-ppc.c:11779 +#: elf64-ppc.c:12920 #, c-format msgid "%pB section %pA exceeds stub group size" msgstr "Розділ %pB, %pA, перевищує розміри групи шаблонів" -#: elf64-ppc.c:13189 elf64-ppc.c:13208 +#: elf64-ppc.c:14153 +msgid "__tls_get_addr call offset overflow" +msgstr "виклик __tls_get_addr призводить до Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð·Ñуву" + +#: elf64-ppc.c:14455 elf64-ppc.c:14474 #, c-format msgid "%s offset too large for .eh_frame sdata4 encoding" msgstr "відÑтуп %s Ñ” надто великим Ð´Ð»Ñ ÐºÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ sdata4 .eh_frame" -#: elf64-ppc.c:13244 +#: elf64-ppc.c:14506 #, c-format msgid "linker stubs in %u group\n" msgid_plural "linker stubs in %u groups\n" @@ -4230,10 +4358,10 @@ msgstr[2] "компонувальник не зміг виконати роботу у %u групах\n" msgstr[3] "компонувальник не зміг виконати роботу у %u групі\n" -#: elf64-ppc.c:13248 +#: elf64-ppc.c:14513 #, c-format msgid "" -" branch %lu\n" +"%s branch %lu\n" " branch toc adj %lu\n" " branch notoc %lu\n" " branch both %lu\n" @@ -4247,7 +4375,7 @@ " plt call both %lu\n" " global entry %lu" msgstr "" -" гілка %lu\n" +"%s гілка %lu\n" " toc adj гілки %lu\n" " notoc гілки %lu\n" " both гілки %lu\n" @@ -4261,178 +4389,185 @@ " plt call both %lu\n" " заг. Ð·Ð°Ð¿Ð¸Ñ %lu" -#: elf64-ppc.c:13583 +#: elf64-ppc.c:14913 #, c-format msgid "%H: %s used with TLS symbol `%pT'\n" msgstr "%H: %s викориÑтовуєтьÑÑ Ð· Ñимволом TLS «%pT»\n" -#: elf64-ppc.c:13585 +#: elf64-ppc.c:14915 #, c-format msgid "%H: %s used with non-TLS symbol `%pT'\n" msgstr "%H: %s викориÑтовуєтьÑÑ Ð· Ñимволом поза TLS «%pT»\n" -#: elf64-ppc.c:14245 +#: elf64-ppc.c:15670 #, c-format msgid "%H: call to `%pT' lacks nop, can't restore toc; (plt call stub)\n" msgstr "%P: %H: у виклику «%pT» не виÑтачає nop, Ð²Ñ–Ð´Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ toc неможливе (фіктивний виклик plt)\n" -#: elf64-ppc.c:14251 +#: elf64-ppc.c:15676 #, c-format msgid "%H: call to `%pT' lacks nop, can't restore toc; (toc save/adjust stub)\n" msgstr "%P: %H: у виклику «%pT» не виÑтачає nop, Ð²Ñ–Ð´Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ toc неможливе (фіктивне save/adjust toc)\n" -#: elf64-ppc.c:14985 +#: elf64-ppc.c:16564 #, c-format msgid "%H: %s for indirect function `%pT' unsupported\n" msgstr "%H: підтримки %s Ð´Ð»Ñ Ð¾Ð¿Ð¾Ñередкованої функції «%pT» не передбачено\n" -#: elf64-ppc.c:15097 +#: elf64-ppc.c:16649 +#, c-format +msgid "%X%P: %pB: %s against %pT is not supported by glibc as a dynamic relocation\n" +msgstr "%X%P: %pB: підтримки %s щодо %pT Ñк динамічного переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ðµ передбачено у glibc\n" + +#: elf64-ppc.c:16704 #, c-format msgid "%P: %pB: %s is not supported for `%pT'\n" msgstr "%P: %pB: підтримки %s Ð´Ð»Ñ Â«%pT» не передбачено\n" -#: elf64-ppc.c:15326 +#: elf64-ppc.c:16963 #, c-format msgid "%H: error: %s not a multiple of %u\n" msgstr "%H: помилка: %s не Ñ” кратним до %u\n" -#: elf64-ppc.c:15349 +#: elf64-ppc.c:16986 #, c-format msgid "%H: unresolvable %s against `%pT'\n" msgstr "%H: нерозв’Ñзне %s щодо «%pT»\n" -#: elf64-ppc.c:15446 +#: elf64-ppc.c:17131 #, c-format msgid "%H: %s against `%pT': error %d\n" msgstr "%H: %s щодо «%pT»: помилка %d\n" -#: elf64-s390.c:2576 +#: elf64-s390.c:2446 #, c-format msgid "%pB: `%s' non-PLT reloc for symbol defined in shared library and accessed from executable (rebuild file with -fPIC ?)" msgstr "%pB: переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ðµ-PLT «%s» Ð´Ð»Ñ Ñимволу, визначеного у бібліотеці Ñпільного викориÑтаннÑ, Ñ– доÑтупного з виконуваного файла (Ñлід повторно зібрати файл із -fPIC ?)" -#: elf64-sparc.c:109 elfcode.h:1471 -#, c-format -msgid "%pB(%pA): relocation %d has invalid symbol index %ld" -msgstr "%pB(%pA): переÑÑƒÐ²Ð°Ð½Ð½Ñ %d міÑтить некоректний Ñ–Ð½Ð´ÐµÐºÑ Ñимволу, %ld" - -#: elf64-sparc.c:467 +#: elf64-sparc.c:478 #, c-format msgid "%pB: only registers %%g[2367] can be declared using STT_REGISTER" msgstr "%pB: за допомогою STT_REGISTER можна оголошувати лише регіÑтри %%g[2367]" -#: elf64-sparc.c:488 +#: elf64-sparc.c:499 #, c-format msgid "register %%g%d used incompatibly: %s in %pB, previously %s in %pB" msgstr "неÑуміÑне викориÑÑ‚Ð°Ð½Ð½Ñ Ñ€ÐµÐ³Ñ–Ñтру %%g%d: %s у %pB, раніше викориÑтано %s у %pB" -#: elf64-sparc.c:512 +#: elf64-sparc.c:523 #, c-format msgid "symbol `%s' has differing types: REGISTER in %pB, previously %s in %pB" msgstr "Ñимвол «%s» належить до різних типів: REGISTER у %pB Ñ– %s раніше у %pB" -#: elf64-sparc.c:559 +#: elf64-sparc.c:570 #, c-format msgid "Symbol `%s' has differing types: %s in %pB, previously REGISTER in %pB" msgstr "Символ «%s» належить до різних типів: %s у %pB Ñ– REGISTER раніше у %pB" -#: elf64-sparc.c:691 +#: elf64-sparc.c:702 #, c-format msgid "%pB: linking UltraSPARC specific with HAL specific code" msgstr "%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ UltraSPARC-Ñпецифічного та HAL-Ñпецифічного коду" -#: elf64-x86-64.c:1412 +#: elf64-x86-64.c:1417 msgid "hidden symbol " msgstr "прихований Ñимвол " -#: elf64-x86-64.c:1415 +#: elf64-x86-64.c:1420 msgid "internal symbol " msgstr "внутрішній Ñимвол " -#: elf64-x86-64.c:1418 elf64-x86-64.c:1422 +#: elf64-x86-64.c:1423 elf64-x86-64.c:1427 msgid "protected symbol " msgstr "захищений Ñимвол " -#: elf64-x86-64.c:1424 +#: elf64-x86-64.c:1429 msgid "symbol " msgstr "Ñимвол " -#: elf64-x86-64.c:1425 elf64-x86-64.c:1435 -msgid "; recompile with -fPIC" -msgstr "; виконайте повторне Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ Ð· -fPIC" - -#: elf64-x86-64.c:1430 +#: elf64-x86-64.c:1435 msgid "undefined " msgstr "невизначений " -#: elf64-x86-64.c:1439 +#: elf64-x86-64.c:1445 msgid "a shared object" msgstr "Ñпільний об'єкт" -#: elf64-x86-64.c:1441 +#: elf64-x86-64.c:1447 +msgid "; recompile with -fPIC" +msgstr "; виконайте повторне Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ Ð· -fPIC" + +#: elf64-x86-64.c:1452 msgid "a PIE object" msgstr "об'єкт PIE" -#: elf64-x86-64.c:1443 +#: elf64-x86-64.c:1454 msgid "a PDE object" msgstr "об'єкт PDE" -#: elf64-x86-64.c:1446 +#: elf64-x86-64.c:1456 +msgid "; recompile with -fPIE" +msgstr "; виконайте повторне Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ Ð· -fPIE" + +#: elf64-x86-64.c:1460 #, c-format msgid "%pB: relocation %s against %s%s`%s' can not be used when making %s%s" msgstr "%pB: переÑÑƒÐ²Ð°Ð½Ð½Ñ %s щодо %s%s«%s», не можна викориÑтовувати під Ñ‡Ð°Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ %s%s" -#: elf64-x86-64.c:1931 +#: elf64-x86-64.c:1968 #, c-format msgid "%pB: relocation %s against symbol `%s' isn't supported in x32 mode" msgstr "%pB: підтримки переÑÑƒÐ²Ð°Ð½Ð½Ñ %s щодо Ñимволу «%s» у режимі x32 не передбачено" -#: elf64-x86-64.c:2073 +#: elf64-x86-64.c:2124 #, c-format msgid "%pB: '%s' accessed both as normal and thread local symbol" msgstr "'%pB: доÑтуп до «%s» виконуєтьÑÑ Ñк до звичайного Ñимволу та локального Ð´Ð»Ñ Ð¿Ð¾Ñ‚Ð¾ÐºÑƒ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ñимволу" -#: elf64-x86-64.c:2696 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:5302 +#: elf64-x86-64.c:2747 elfnn-aarch64.c:5546 #, c-format msgid "%pB: relocation %s against STT_GNU_IFUNC symbol `%s' has non-zero addend: %" msgstr "%pB: переÑÑƒÐ²Ð°Ð½Ð½Ñ %s щодо Ñимволу STT_GNU_IFUNC, «%s», міÑтить ненульовий доданок: %" -#: elf64-x86-64.c:2934 +#: elf64-x86-64.c:2992 #, c-format msgid "%pB: relocation R_X86_64_GOTOFF64 against undefined %s `%s' can not be used when making a shared object" msgstr "%pB: переÑÑƒÐ²Ð°Ð½Ð½Ñ R_X86_64_GOTOFF64 щодо невизначеного %s, «%s», не можна викориÑтовувати під Ñ‡Ð°Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° Ñпільного викориÑтаннÑ" -#: elf64-x86-64.c:2948 +#: elf64-x86-64.c:3006 #, c-format msgid "%pB: relocation R_X86_64_GOTOFF64 against protected %s `%s' can not be used when making a shared object" msgstr "%pB: не можна викориÑтовувати R_X86_64_GOTOFF64 переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ‰Ð¾Ð´Ð¾ захищеної %s «%s» під Ñ‡Ð°Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° Ñпільного викориÑтаннÑ" -#: elf64-x86-64.c:3208 +#: elf64-x86-64.c:3283 #, c-format msgid "%pB: addend %s%#x in relocation %s against symbol `%s' at %# in section `%pA' is out of range" msgstr "%pB: доданок %s%#x у переÑуванні %s щодо Ñимволу «%s» за адреÑою %# у розділі «%pA» перебуває поза межами припуÑтимого діапазону" -#: elf64-x86-64.c:3885 +#: elf64-x86-64.c:3417 elflink.c:13267 +msgid "%F%P: corrupt input: %pB\n" +msgstr "%F%P: пошкоджені вхідні дані: %pB\n" + +#: elf64-x86-64.c:4101 msgid "%F%P: failed to convert GOTPCREL relocation; relink with --no-relax\n" msgstr "%F%P: не вдалоÑÑ Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ переÑÑƒÐ²Ð°Ð½Ð½Ñ GOTPCREL; повторно Ñкомпонуйте з --no-relax\n" -#: elf64-x86-64.c:4043 +#: elf64-x86-64.c:4259 #, c-format msgid "%F%pB: PC-relative offset overflow in PLT entry for `%s'\n" msgstr "%F%pB: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð·Ñуву відноÑно PC у запиÑÑ– PLT Ð´Ð»Ñ Â«%s»\n" -#: elf64-x86-64.c:4106 +#: elf64-x86-64.c:4322 #, c-format msgid "%F%pB: branch displacement overflow in PLT entry for `%s'\n" msgstr "%F%pB: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð¿ÐµÑ€ÐµÐ¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð³Ñ–Ð»Ð¾Ðº у запиÑÑ– PLT Ð´Ð»Ñ Â«%s»\n" -#: elf64-x86-64.c:4159 +#: elf64-x86-64.c:4375 #, c-format msgid "%F%pB: PC-relative offset overflow in GOT PLT entry for `%s'\n" msgstr "%F%pB: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð·Ñуву відноÑно PC у запиÑÑ– PLT GOT Ð´Ð»Ñ Â«%s»\n" -#: elfcode.h:323 +#: elfcode.h:326 msgid "warning: %pB has a corrupt section with a size (%" msgstr "попередженнÑ: %pB міÑтить пошкоджений розділ розміру (%" @@ -4441,656 +4576,813 @@ msgid "warning: %pB has a corrupt string table index - ignoring" msgstr "попередженнÑ: покажчик таблиці Ñ€Ñдків %pB пошкоджено — ігноруєтьÑÑ" -#: elfcode.h:1212 +#: elfcode.h:1228 #, c-format msgid "%pB: version count (%) does not match symbol count (%ld)" msgstr "%pB: лічильник верÑÑ–Ñ— (%) не збігаєтьÑÑ Ð· лічильником Ñимволу (%ld)" -#: elfcore.h:300 +#: elfcore.h:308 #, c-format msgid "warning: %pB is truncated: expected core file size >= %, found: %" msgstr "попередженнÑ: %pB обрізано: очікуваний розмір оÑновного файла >= %, виÑвлено: %." -#: elflink.c:1367 +#: elflink.c:1362 #, c-format msgid "%s: TLS definition in %pB section %pA mismatches non-TLS definition in %pB section %pA" msgstr "%s: Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ TLS у %pB, розділ %pA, не збігаєтьÑÑ Ð· визначеннÑм не-TLS у розділі %pB %pA" -#: elflink.c:1373 +#: elflink.c:1368 #, c-format msgid "%s: TLS reference in %pB mismatches non-TLS reference in %pB" msgstr "%s: поÑÐ¸Ð»Ð°Ð½Ð½Ñ TLS у %pB не збігаєтьÑÑ Ð· поÑиланнÑм не-TLS у %pB" -#: elflink.c:1379 +#: elflink.c:1374 #, c-format msgid "%s: TLS definition in %pB section %pA mismatches non-TLS reference in %pB" msgstr "%s: Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ TLS у %pB, розділ %pA, не збігаєтьÑÑ Ð· поÑиланнÑм не-TLS у %pB" -#: elflink.c:1385 +#: elflink.c:1380 #, c-format msgid "%s: TLS reference in %pB mismatches non-TLS definition in %pB section %pA" msgstr "%s: поÑÐ¸Ð»Ð°Ð½Ð½Ñ TLS у %pB не збігаєтьÑÑ Ð· визначеннÑм не-TLS у розділі %pB %pA" -#: elflink.c:2075 +#: elflink.c:2071 #, c-format msgid "%pB: unexpected redefinition of indirect versioned symbol `%s'" msgstr "%pB: неочікуване Ð¿ÐµÑ€ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñимволу з непрÑмим визначеннÑм верÑÑ–Ñ—, «%s»" -#: elflink.c:2452 +#: elflink.c:2448 #, c-format msgid "%pB: version node not found for symbol %s" msgstr "%pB: не знайдено вузла верÑÑ–Ñ— Ð´Ð»Ñ Ñимволу %s" -#: elflink.c:2541 +#: elflink.c:2539 #, c-format msgid "%pB: bad reloc symbol index (%# >= %#lx) for offset %# in section `%pA'" msgstr "%pB: помилковий Ñ–Ð½Ð´ÐµÐºÑ Ñимволу переÑÑƒÐ²Ð°Ð½Ð½Ñ (%# >= %#lx) Ð´Ð»Ñ Ð²Ñ–Ð´Ñтупу %# у розділі «%pA»" -#: elflink.c:2553 +#: elflink.c:2551 #, c-format msgid "%pB: non-zero symbol index (%#) for offset %# in section `%pA' when the object file has no symbol table" msgstr "%pB: ненульовий Ñ–Ð½Ð´ÐµÐºÑ Ñимволу (%#) Ð´Ð»Ñ Ð²Ñ–Ð´Ñтупу %# у розділі «%pA», але у об’єктному файлі немає таблиці Ñимволів" -#: elflink.c:2744 +#: elflink.c:2740 #, c-format msgid "%pB: relocation size mismatch in %pB section %pA" msgstr "%pB: невідповідніÑÑ‚ÑŒ розміру переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñƒ розділі %pB %pA" -#: elflink.c:3066 +#: elflink.c:3069 #, c-format msgid "warning: type and size of dynamic symbol `%s' are not defined" msgstr "попередженнÑ: тип Ñ– розмір динамічного Ñимволу «%s» не визначено" -#: elflink.c:3128 +#: elflink.c:3129 msgid "%P: copy reloc against protected `%pT' is dangerous\n" msgstr "%P: переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð· копіюваннÑм щодо захищеного «%pT» Ñ” небезпечним\n" -#: elflink.c:3932 +#: elflink.c:4064 #, c-format msgid "alternate ELF machine code found (%d) in %pB, expecting %d" msgstr "виÑвлено альтернативний машинний код ELF (%d) у %pB, очікувалоÑÑ %d" -#: elflink.c:4598 +#: elflink.c:4534 +#, c-format +msgid "%pB: invalid version offset %lx (max %lx)" +msgstr "%pB: некоректний зÑув верÑÑ–Ñ— %lx (макÑимально можливий — %lx)" + +#: elflink.c:4602 +#, c-format +msgid "%pB: %s local symbol at index %lu (>= sh_info of %lu)" +msgstr "%pB: локальний Ñимвол %s із індекÑом %lu (>= sh_info %lu)" + +#: elflink.c:4750 +#, c-format +msgid "%pB: not enough version information" +msgstr "%pB: недоÑтатні відомоÑÑ‚Ñ– щодо верÑÑ–Ñ—" + +#: elflink.c:4788 #, c-format msgid "%pB: %s: invalid version %u (max %d)" msgstr "%pB: %s: некоректна верÑÑ–Ñ, %u (макÑимум — %d)" -#: elflink.c:4635 +#: elflink.c:4825 #, c-format msgid "%pB: %s: invalid needed version %d" msgstr "%pB: %s: некоректний Ð·Ð°Ð¿Ð¸Ñ Ð¿Ð¾Ñ‚Ñ€Ñ–Ð±Ð½Ð¾Ñ— верÑÑ–Ñ— %d" -#: elflink.c:5054 +#: elflink.c:5231 #, c-format msgid "%pB: undefined reference to symbol '%s'" msgstr "%pB: невизначене поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° Ñимвол «%s»" -#: elflink.c:6130 +#: elflink.c:6315 #, c-format msgid "%pB: stack size specified and %s set" msgstr "%pB: вказано розміри Ñтека Ñ– вÑтановлено %s" -#: elflink.c:6134 +#: elflink.c:6319 #, c-format msgid "%pB: %s not absolute" msgstr "%pB: %s не Ñ” абÑолютним" -#: elflink.c:6331 +#: elflink.c:6516 #, c-format msgid "%s: undefined version: %s" msgstr "%s: невизначена верÑÑ–Ñ: %s" -#: elflink.c:6902 +#: elflink.c:7088 #, c-format msgid "%pB: .preinit_array section is not allowed in DSO" msgstr "%pB: не можна викориÑтовувати розділ .preinit_array у DSO" -#: elflink.c:8359 +#: elflink.c:8602 #, c-format msgid "undefined %s reference in complex symbol: %s" msgstr "невизначене поÑиланнÑ, %s, у Ñкладеному Ñимволі: %s" -#: elflink.c:8514 +#: elflink.c:8757 #, c-format msgid "unknown operator '%c' in complex symbol" msgstr "невідомий оператор, «%c», у Ñкладеному Ñимволі" #. PR 21524: Let the user know if a symbol was removed by garbage collection. -#: elflink.c:8852 +#: elflink.c:9095 #, c-format msgid "%pB:%pA: error: relocation references symbol %s which was removed by garbage collection" msgstr "%pB:%pA: помилка: переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾ÑилаєтьÑÑ Ð½Ð° Ñимвол %s, Ñкий було вилучено заÑобом Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ ÑміттÑ" -#: elflink.c:8855 +#: elflink.c:9098 #, c-format msgid "%pB:%pA: error: try relinking with --gc-keep-exported enabled" msgstr "%pB:%pA: помилка: Ñпробуйте виконати повторне ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ð· увімкненим --gc-keep-exported" -#: elflink.c:9091 elflink.c:9109 elflink.c:9148 elflink.c:9166 +#: elflink.c:9343 elflink.c:9361 elflink.c:9400 elflink.c:9418 #, c-format msgid "%pB: unable to sort relocs - they are in more than one size" msgstr "%pB: не вдалоÑÑ Ð²Ð¿Ð¾Ñ€Ñдкувати переÑуваннÑ: їхні розміри не Ñ” однаковими" #. The section size is not divisible by either - #. something is wrong. -#: elflink.c:9125 elflink.c:9182 +#: elflink.c:9377 elflink.c:9434 #, c-format msgid "%pB: unable to sort relocs - they are of an unknown size" msgstr "%pB: не вдалоÑÑ Ð²Ð¿Ð¾Ñ€Ñдкувати переÑуваннÑ: їхні розміри невідомі" -#: elflink.c:9234 +#: elflink.c:9486 msgid "not enough memory to sort relocations" msgstr "недоÑтатньо пам’ÑÑ‚Ñ– Ð´Ð»Ñ Ð²Ð¿Ð¾Ñ€ÑÐ´ÐºÐ¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿ÐµÑ€ÐµÑувань" -#: elflink.c:9502 +#: elflink.c:9767 #, c-format msgid "%pB: too many sections: %d (>= %d)" msgstr "%pB: забагато розділів: %d (>= %d)" -#: elflink.c:9782 +#: elflink.c:10043 #, c-format msgid "%pB: internal symbol `%s' in %pB is referenced by DSO" msgstr "%pB: на внутрішній Ñимвол «%s» у %pB Ñ–Ñнує поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð· DSO" -#: elflink.c:9785 +#: elflink.c:10046 #, c-format msgid "%pB: hidden symbol `%s' in %pB is referenced by DSO" msgstr "%pB: на прихований Ñимвол «%s» у %pB Ñ–Ñнує поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð· DSO" -#: elflink.c:9788 +#: elflink.c:10049 #, c-format msgid "%pB: local symbol `%s' in %pB is referenced by DSO" msgstr "%pB: на локальний Ñимвол «%s» у %pB Ñ–Ñнує поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð· DSO" -#: elflink.c:9874 +#: elflink.c:10135 #, c-format msgid "%pB: could not find output section %pA for input section %pA" msgstr "%pB: не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ розділ Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… %pA Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ Ð²Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… %pA" -#: elflink.c:10028 +#: elflink.c:10289 #, c-format msgid "%pB: protected symbol `%s' isn't defined" msgstr "%pB: захищений Ñимвол «%s» не визначено" -#: elflink.c:10031 +#: elflink.c:10292 #, c-format msgid "%pB: internal symbol `%s' isn't defined" msgstr "%pB: внутрішній Ñимвол «%s» не визначено" -#: elflink.c:10034 +#: elflink.c:10295 #, c-format msgid "%pB: hidden symbol `%s' isn't defined" msgstr "%pB: прихований Ñимвол «%s» не визначено" -#: elflink.c:10066 +#: elflink.c:10327 #, c-format msgid "%pB: no symbol version section for versioned symbol `%s'" msgstr "%pB: немає розділу верÑÑ–Ñ— Ñимволів Ð´Ð»Ñ Ñимволу з верÑією «%s»" -#: elflink.c:10679 +#: elflink.c:10699 +#, c-format +msgid "warning: --enable-non-contiguous-regions discards section `%s' from '%s'\n" +msgstr "попередженнÑ: --enable-non-contiguous-regions відкидає розділ «%s» з «%s»\n" + +#: elflink.c:10951 #, c-format msgid "error: %pB: size of section %pA is not multiple of address size" msgstr "помилка: %pB: розмір розділу %pA не Ñ” кратним до розміру адреÑи" -#: elflink.c:10724 +#: elflink.c:10996 #, c-format msgid "error: %pB contains a reloc (%#) for section %pA that references a non-existent global symbol" msgstr "помилка: %pB міÑтить переÑÑƒÐ²Ð°Ð½Ð½Ñ (%#) Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %pA, Ñке поÑилаєтьÑÑ Ð½Ð° загальний Ñимвол, Ñкого не Ñ–Ñнує" -#: elflink.c:11484 +#: elflink.c:11739 #, c-format msgid "%pA has both ordered [`%pA' in %pB] and unordered [`%pA' in %pB] sections" msgstr "%pA міÑтить одразу впорÑдкований [«%pA» у %pB] Ñ– невпорÑдкований [«%pA» у %pB] розділи" -#: elflink.c:11490 +#: elflink.c:11745 #, c-format msgid "%pA has both ordered and unordered sections" msgstr "%pA міÑтить одразу впорÑдкований Ñ– невпорÑдкований розділи" -#: elflink.c:11592 +#: elflink.c:11851 #, c-format msgid "%pB: no symbol found for import library" msgstr "%pB: не знайдено Ñимволів Ð´Ð»Ñ Ð±Ñ–Ð±Ð»Ñ–Ð¾Ñ‚ÐµÐºÐ¸ імпортуваннÑ" -#: elflink.c:12225 +#: elflink.c:12488 #, c-format msgid "%pB: file class %s incompatible with %s" msgstr "%pB: ÐºÐ»Ð°Ñ Ñ„Ð°Ð¹Ð»Ñ–Ð² %s Ñ” неÑуміÑним з %s" -#: elflink.c:12442 +#: elflink.c:12704 #, c-format msgid "%pB: failed to generate import library" msgstr "%pB: не вдалоÑÑ Ñтворити бібліотеку імпортуваннÑ" -#: elflink.c:12561 +#: elflink.c:12823 #, c-format msgid "warning: %s section has zero size" msgstr "попередженнÑ: розмір розділу %s Ñ” нульовим" -#: elflink.c:12609 +#: elflink.c:12871 #, c-format msgid "warning: section '%s' is being made into a note" msgstr "попередженнÑ: розділ «%s» перетворено на нотатку" -#: elflink.c:12701 +#: elflink.c:12964 msgid "%P%X: read-only segment has dynamic relocations\n" msgstr "%P%X: Ñегмент, призначений лише Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ, міÑтить динамічні переÑуваннÑ\n" -#: elflink.c:12704 -msgid "%P: warning: creating a DT_TEXTREL in a shared object\n" +#: elflink.c:12967 +msgid "%P: warning: creating DT_TEXTREL in a shared object\n" msgstr "%P: попередженнÑ: Ñтворюємо DT_TEXTREL у об’єкті Ñпільного викориÑтаннÑ\n" -#: elflink.c:12829 +#: elflink.c:12970 +msgid "%P: warning: creating DT_TEXTREL in a PIE\n" +msgstr "%P: попередженнÑ: Ñтворюємо DT_TEXTREL у PIE\n" + +#: elflink.c:13095 msgid "%P%X: can not read symbols: %E\n" msgstr "%P%X: не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ Ñимволи: %E\n" -#: elflink.c:13002 -msgid "%F%P: corrupt input: %pB\n" -msgstr "%F%P: пошкоджені вхідні дані: %pB\n" +#: elflink.c:13500 +msgid "%F%P: %pB(%pA): error: need linked-to section for --gc-sections\n" +msgstr "%F%P: %pB(%pA): помилка: Ð´Ð»Ñ --gc-sections потрібен приєднаний (linked-to) розділ\n" -#: elflink.c:13668 +#: elflink.c:13961 #, c-format msgid "%pB: %pA+%#: no symbol found for INHERIT" msgstr "%pB: %pA+%#: не знайдено Ñимволу Ð´Ð»Ñ INHERIT" -#: elflink.c:13844 +#: elflink.c:14002 +#, c-format +msgid "%pB: section '%pA': corrupt VTENTRY entry" +msgstr "%pB: розділ «%pA»: пошкоджений Ð·Ð°Ð¿Ð¸Ñ VTENTRY" + +#: elflink.c:14145 #, c-format msgid "unrecognized INPUT_SECTION_FLAG %s\n" msgstr "нерозпізнаний INPUT_SECTION_FLAG, %s\n" -#: elfxx-mips.c:1450 +#: elflink.c:14891 +#, c-format +msgid "%P: %pB: warning: relocation against `%s' in read-only section `%pA'\n" +msgstr "%P: %pB: попередженнÑ: переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ‰Ð¾Ð´Ð¾ «%s» у придатному лише Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– «%pA»\n" + +#: elflink.c:14980 +msgid "%P: warning: GNU indirect functions with DT_TEXTREL may result in a segfault at runtime; recompile with %s\n" +msgstr "%P: попередженнÑ: Ð¿Ð¾Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð¾Ð¿Ð¾Ñередкованих функцій GNU із DT_TEXTREL може призвеÑти до помилки Ñегментації під Ñ‡Ð°Ñ Ð·Ð°Ð¿ÑƒÑку; повторно зберіть з %s\n" + +#: elfxx-aarch64.c:477 +#, c-format +msgid "%pB: warning: Weak TLS is implementation defined and may not work as expected" +msgstr "%pB: попередженнÑ: Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñлабких TLS залежить від реалізації Ñ– може не працювати так, Ñк ви на те ÑподіваєтеÑÑ" + +#: elfxx-aarch64.c:738 elfnn-aarch64.c:9902 elfnn-aarch64.c:9909 +#, c-format +msgid "%pB: warning: BTI turned on by -z force-bti when all inputs do not have BTI in NOTE section." +msgstr "%pB: попередженнÑ: BTI вмикаєтьÑÑ -z force-bti, Ñкщо уÑÑ– вхідні дані не мають BTI у розділі NOTE." + +#: elfxx-aarch64.c:758 elfxx-x86.c:2554 +msgid "%F%P: failed to create GNU property section\n" +msgstr "%F%P: не вдалоÑÑ Ñтворити розділ влаÑтивоÑтей GNU\n" + +#: elfxx-aarch64.c:762 elfxx-x86.c:2559 +#, c-format +msgid "%F%pA: failed to align section\n" +msgstr "%F%pA: не вдалоÑÑ Ð²Ð¸Ñ€Ñ–Ð²Ð½Ñти розмір\n" + +#: elfxx-aarch64.c:812 +#, c-format +msgid "error: %pB: " +msgstr "помилка: %pB: <пошкоджений розмір викориÑтаного AArch64: 0x%x>" + +#: elfxx-mips.c:1507 msgid "static procedure (no name)" msgstr "Ñтатична процедура (без назви)" -#: elfxx-mips.c:5718 +#: elfxx-mips.c:5782 msgid "MIPS16 and microMIPS functions cannot call each other" msgstr "Функції MIPS16 Ñ– microMIPS не можуть викликати одна одну" -#: elfxx-mips.c:6485 +#: elfxx-mips.c:6547 msgid "%X%H: unsupported JALX to the same ISA mode\n" msgstr "%X%H: непідтримуваний JALX до того Ñамого режиму ISA\n" -#: elfxx-mips.c:6518 +#: elfxx-mips.c:6580 msgid "%X%H: unsupported jump between ISA modes; consider recompiling with interlinking enabled\n" msgstr "%X%H: непідтримуваний перехід між режимами ISA; Ñпробуйте повторно зібрати з увімкненим взаємним компонуваннÑм\n" -#: elfxx-mips.c:6563 +#: elfxx-mips.c:6625 msgid "%X%H: cannot convert branch between ISA modes to JALX: relocation out of range\n" msgstr "%X%H: не можна перетворювати Ñ€Ð¾Ð·Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ Ð¼Ñ–Ð¶ режимами ISA на JALX: переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð° межі припуÑтимого діапазону\n" -#: elfxx-mips.c:6575 +#: elfxx-mips.c:6637 msgid "%X%H: unsupported branch between ISA modes\n" msgstr "%X%H: непідтримуване Ñ€Ð¾Ð·Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ Ð¼Ñ–Ð¶ режимами ISA\n" -#: elfxx-mips.c:7223 +#: elfxx-mips.c:7286 #, c-format msgid "%pB: incorrect `.reginfo' section size; expected %, got %" msgstr "%pB: помилковий розмір розділу «.reginfo»; мав бути %, маємо %" -#: elfxx-mips.c:7267 elfxx-mips.c:7502 +#: elfxx-mips.c:7330 elfxx-mips.c:7567 #, c-format msgid "%pB: warning: bad `%s' option size %u smaller than its header" msgstr "%pB: попередженнÑ: помилковий розмір «%s», %u, менший за його заголовок" -#: elfxx-mips.c:8300 elfxx-mips.c:8426 +#: elfxx-mips.c:8374 elfxx-mips.c:8500 #, c-format msgid "%pB: warning: cannot determine the target function for stub section `%s'" msgstr "%pB: попередженнÑ: не вдалоÑÑ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ функцію Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ шаблона, «%s»" -#: elfxx-mips.c:8558 +#: elfxx-mips.c:8632 #, c-format msgid "%pB: malformed reloc detected for section %s" msgstr "%pB: Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ %s виÑвлено помилку у форматуванні перенеÑеннÑ" -#: elfxx-mips.c:8658 +#: elfxx-mips.c:8731 #, c-format msgid "%pB: GOT reloc at %# not expected in executables" msgstr "%pB: переÑÑƒÐ²Ð°Ð½Ð½Ñ GOT у %# Ñ” неочікуваним у виконуваних файлах" -#: elfxx-mips.c:8796 +#: elfxx-mips.c:8871 #, c-format msgid "%pB: CALL16 reloc at %# not against global symbol" msgstr "%pB: переÑÑƒÐ²Ð°Ð½Ð½Ñ CALL16 у %# не відноÑно загального Ñимволу" -#: elfxx-mips.c:9086 +#: elfxx-mips.c:9174 #, c-format msgid "%X%H: relocation %s against `%s' cannot be used when making a shared object; recompile with -fPIC\n" msgstr "%X%H: переÑÑƒÐ²Ð°Ð½Ð½Ñ %s щодо «%s» не можна викориÑтовувати під Ñ‡Ð°Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° Ñпільного викориÑтаннÑ; повторно зберіть з -fPIC\n" -#: elfxx-mips.c:9422 +#: elfxx-mips.c:9300 +#, c-format +msgid "IFUNC symbol %s in dynamic symbol table - IFUNCS are not supported" +msgstr "Символ IFUNC %s у таблиці динамічних Ñимволів — підтримки IFUNCS не передбачено" + +#: elfxx-mips.c:9303 +#, c-format +msgid "non-dynamic symbol %s in dynamic symbol table" +msgstr "нединамічний Ñимвол %s у таблиці динамічних Ñимволів" + +#: elfxx-mips.c:9523 #, c-format msgid "non-dynamic relocations refer to dynamic symbol %s" msgstr "нединамічні переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾ÑилаютьÑÑ Ð½Ð° динамічний Ñимвол, %s" -#: elfxx-mips.c:10350 +#: elfxx-mips.c:10457 #, c-format msgid "%pB: can't find matching LO16 reloc against `%s' for %s at %# in section `%pA'" msgstr "%pB: не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ відповідне переÑÑƒÐ²Ð°Ð½Ð½Ñ LO16 щодо «%s» Ð´Ð»Ñ %s у %# у розділі «%pA»" -#: elfxx-mips.c:10490 +#: elfxx-mips.c:10597 msgid "small-data section exceeds 64KB; lower small-data size limit (see option -G)" msgstr "розділ малих даних перевищує 64 кБ; нижчий за Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ малих даних (див. параметр -G)" -#: elfxx-mips.c:10509 +#: elfxx-mips.c:10616 msgid "cannot convert a jump to JALX for a non-word-aligned address" msgstr "неможливо перетворити перехід на JALX Ð´Ð»Ñ Ð°Ð´Ñ€ÐµÑи, Ñку не вирівнÑно на межу Ñлова" -#: elfxx-mips.c:10512 +#: elfxx-mips.c:10619 msgid "jump to a non-word-aligned address" msgstr "перехід до не вирівнÑної за Ñловом адреÑи" -#: elfxx-mips.c:10513 +#: elfxx-mips.c:10620 msgid "jump to a non-instruction-aligned address" msgstr "перехід до не вирівнÑної за інÑтрукцією адреÑи" -#: elfxx-mips.c:10516 +#: elfxx-mips.c:10623 msgid "cannot convert a branch to JALX for a non-word-aligned address" msgstr "неможливо перетворити Ñ€Ð¾Ð·Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ Ð½Ð° JALX Ð´Ð»Ñ Ð°Ð´Ñ€ÐµÑи, Ñку не вирівнÑно на межу Ñлова" -#: elfxx-mips.c:10518 +#: elfxx-mips.c:10625 msgid "branch to a non-instruction-aligned address" msgstr "Ñ€Ð¾Ð·Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ Ð´Ð¾ не вирівнÑної за інÑтрукцією адреÑи" -#: elfxx-mips.c:10520 +#: elfxx-mips.c:10627 msgid "PC-relative load from unaligned address" msgstr "Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð²Ñ–Ð´Ð½Ð¾Ñно PC з невирівнÑної адреÑи" -#: elfxx-mips.c:10798 +#: elfxx-mips.c:10927 #, c-format msgid "%pB: `%pA' entry VMA of %# outside the 32-bit range supported; consider using `-Ttext-segment=...'" msgstr "%pB: Ð·Ð°Ð¿Ð¸Ñ Â«%pA» VMA %# лежить поза підтримуваним 32-бітовим діапазоном; Ñпробуйте ÑкориÑтатиÑÑ Â«-Ttext-segment=...»" -#: elfxx-mips.c:10911 elfxx-mips.c:11484 +#: elfxx-mips.c:11042 elfxx-mips.c:11629 #, c-format msgid "%pB: `%pA' offset of % from `%pA' beyond the range of ADDIUPC" msgstr "%pB: Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Â«%pA» % з «%pA» перебуває поза межами діапазону ADDIUPC" -#: elfxx-mips.c:11456 +#: elfxx-mips.c:11601 #, c-format msgid "%pB: `%pA' start VMA of %# outside the 32-bit range supported; consider using `-Ttext-segment=...'" msgstr "%pB: початок «%pA» VMA %# лежить поза підтримуваним 32-бітовим діапазоном; Ñпробуйте ÑкориÑтатиÑÑ Â«-Ttext-segment=...»" -#: elfxx-mips.c:14397 +#: elfxx-mips.c:14556 #, c-format msgid "%pB: unknown architecture %s" msgstr "%pB: невідома архітектура %s" -#: elfxx-mips.c:14931 +#: elfxx-mips.c:15090 #, c-format msgid "%pB: illegal section name `%pA'" msgstr "%pB: некоректна назва розділу, «%pA»" -#: elfxx-mips.c:15208 +#: elfxx-mips.c:15367 #, c-format msgid "%pB: warning: linking abicalls files with non-abicalls files" msgstr "%pB: попередженнÑ: ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñ–Ð² abicalls з файлами без abicalls" -#: elfxx-mips.c:15225 +#: elfxx-mips.c:15384 #, c-format msgid "%pB: linking 32-bit code with 64-bit code" msgstr "%pB: ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ 32-бітового коду з 64-бітовим кодом" -#: elfxx-mips.c:15257 elfxx-mips.c:15323 elfxx-mips.c:15338 +#: elfxx-mips.c:15416 elfxx-mips.c:15482 elfxx-mips.c:15497 #, c-format msgid "%pB: linking %s module with previous %s modules" msgstr "%pB: компонуємо модуль %s з попередніми модулÑми %s" -#: elfxx-mips.c:15281 +#: elfxx-mips.c:15440 #, c-format msgid "%pB: ABI mismatch: linking %s module with previous %s modules" msgstr "%pB: невідповідніÑÑ‚ÑŒ ABI: ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ð¼Ð¾Ð´ÑƒÐ»Ñ %s з попередніми модулÑми %s" -#: elfxx-mips.c:15306 +#: elfxx-mips.c:15465 #, c-format msgid "%pB: ASE mismatch: linking %s module with previous %s modules" msgstr "%pB: невідповідніÑÑ‚ÑŒ ASE: ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ð¼Ð¾Ð´ÑƒÐ»Ñ %s з попередніми модулÑми %s" -#: elfxx-mips.c:15440 +#: elfxx-mips.c:15599 #, c-format msgid "warning: %pB uses unknown floating point ABI %d (set by %pB), %pB uses unknown floating point ABI %d" msgstr "попередженнÑ: %pB викориÑтовує невідомий ABI роботи з чиÑлами з рухомою крапкою, %d, (вÑтановлено %pB), а %pB викориÑтовує невідомий ABI Ð´Ð»Ñ Ñ‡Ð¸Ñел з рухомою крапкою, %d" -#: elfxx-mips.c:15446 +#: elfxx-mips.c:15605 #, c-format msgid "warning: %pB uses unknown floating point ABI %d (set by %pB), %pB uses %s" msgstr "попередженнÑ: %pB викориÑтовує невідомий ABI роботи з чиÑлами з рухомою крапкою, %d, (вÑтановлено %pB), а %pB викориÑтовує %s" -#: elfxx-mips.c:15452 +#: elfxx-mips.c:15611 #, c-format msgid "warning: %pB uses %s (set by %pB), %pB uses unknown floating point ABI %d" msgstr "попередженнÑ: %pB викориÑтовує %s (вÑтановлено %pB), а %pB викориÑтовує невідомий ABI Ð´Ð»Ñ Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸ з чиÑлами з рухомою крапкою, %d" -#: elfxx-mips.c:15466 +#: elfxx-mips.c:15625 #, c-format msgid "warning: %pB uses %s (set by %pB), %pB uses %s" msgstr "попередженнÑ: %pB викориÑтовує %s (вÑтановлено %pB), а %pB викориÑтовує %s" -#: elfxx-mips.c:15485 +#: elfxx-mips.c:15644 #, c-format msgid "warning: %pB uses %s (set by %pB), %pB uses unknown MSA ABI %d" msgstr "попередженнÑ: %pB викориÑтовує %s (вÑтановлено %pB), а %pB викориÑтовує невідомий ABI MSA, %d" -#: elfxx-mips.c:15497 +#: elfxx-mips.c:15656 #, c-format msgid "warning: %pB uses unknown MSA ABI %d (set by %pB), %pB uses %s" msgstr "попередженнÑ: %pB викориÑтовує невідомий ABI MSA, %d, (вÑтановлено %pB), а %pB викориÑтовує %s" -#: elfxx-mips.c:15506 +#: elfxx-mips.c:15665 #, c-format msgid "warning: %pB uses unknown MSA ABI %d (set by %pB), %pB uses unknown MSA ABI %d" msgstr "попередженнÑ: %pB викориÑтовує невідомий ABI MSA %d (вÑтановлено %pB), а %pB викориÑтовує невідомий ABI MSA, %d" -#: elfxx-mips.c:15568 +#: elfxx-mips.c:15727 #, c-format msgid "%pB: endianness incompatible with that of the selected emulation" msgstr "%pB: порÑдок байтів Ñ” неÑуміÑним з порÑдком байтів вибраної емулÑції" -#: elfxx-mips.c:15582 +#: elfxx-mips.c:15741 #, c-format msgid "%pB: ABI is incompatible with that of the selected emulation" msgstr "%pB: ABI Ñ” неÑуміÑним з ABI вибраної емулÑції" -#: elfxx-mips.c:15634 +#: elfxx-mips.c:15794 #, c-format msgid "%pB: warning: inconsistent ISA between e_flags and .MIPS.abiflags" msgstr "%pB: попередженнÑ: неÑуміÑніÑÑ‚ÑŒ ISA між e_flags Ñ– .MIPS.abiflags" -#: elfxx-mips.c:15639 +#: elfxx-mips.c:15799 #, c-format msgid "%pB: warning: inconsistent FP ABI between .gnu.attributes and .MIPS.abiflags" msgstr "%pB: попередженнÑ: неÑуміÑніÑÑ‚ÑŒ ABI FP між .gnu.attributes Ñ– .MIPS.abiflags" -#: elfxx-mips.c:15643 +#: elfxx-mips.c:15803 #, c-format msgid "%pB: warning: inconsistent ASEs between e_flags and .MIPS.abiflags" msgstr "%pB: попередженнÑ: неÑуміÑніÑÑ‚ÑŒ ASE між e_flags Ñ– .MIPS.abiflags" -#: elfxx-mips.c:15650 +#: elfxx-mips.c:15810 #, c-format msgid "%pB: warning: inconsistent ISA extensions between e_flags and .MIPS.abiflags" msgstr "%pB: попередженнÑ: неÑуміÑніÑÑ‚ÑŒ розширень ISA між e_flags Ñ– .MIPS.abiflags" -#: elfxx-mips.c:15654 +#: elfxx-mips.c:15814 #, c-format msgid "%pB: warning: unexpected flag in the flags2 field of .MIPS.abiflags (0x%lx)" msgstr "%pB: попередженнÑ: неочікуваний прапорець у полі flags2 .MIPS.abiflags (0x%lx)" -#: elfxx-mips.c:15843 +#: elfxx-mips.c:16005 msgid "-mips32r2 -mfp64 (12 callee-saved)" msgstr "-mips32r2 -mfp64 (12 безпечних Ð´Ð»Ñ Ð²Ð¸ÐºÐ»Ð¸ÐºÑ–Ð² регіÑтрів)" -#: elfxx-mips.c:15905 elfxx-mips.c:15916 +#: elfxx-mips.c:16067 elfxx-mips.c:16078 msgid "None" msgstr "Ðемає" -#: elfxx-mips.c:15907 elfxx-mips.c:15976 +#: elfxx-mips.c:16069 elfxx-mips.c:16138 msgid "Unknown" msgstr "Ðевідомий" -#: elfxx-mips.c:15987 +#: elfxx-mips.c:16149 #, c-format msgid "Hard or soft float\n" msgstr "Ðпаратна або програмна рухома крапка\n" -#: elfxx-mips.c:15990 +#: elfxx-mips.c:16152 #, c-format msgid "Hard float (double precision)\n" msgstr "Ðпаратна рухома крапка (подвійна точніÑÑ‚ÑŒ)\n" -#: elfxx-mips.c:15993 +#: elfxx-mips.c:16155 #, c-format msgid "Hard float (single precision)\n" msgstr "Ðпаратна рухома крапка (одинарна точніÑÑ‚ÑŒ)\n" -#: elfxx-mips.c:15996 +#: elfxx-mips.c:16158 #, c-format msgid "Soft float\n" msgstr "Програма рухома крапка\n" -#: elfxx-mips.c:15999 +#: elfxx-mips.c:16161 #, c-format msgid "Hard float (MIPS32r2 64-bit FPU 12 callee-saved)\n" msgstr "Ðпаратна рухома крапка (64-бітовий ÑпівпроцеÑор MIPS32r2, 12 безпечних Ð´Ð»Ñ Ð²Ð¸ÐºÐ»Ð¸ÐºÑ–Ð² регіÑтрів)\n" -#: elfxx-mips.c:16002 +#: elfxx-mips.c:16164 #, c-format msgid "Hard float (32-bit CPU, Any FPU)\n" msgstr "Ðпаратна рухома крапка (32-бітовий процеÑор, будь-Ñкий FPU)\n" -#: elfxx-mips.c:16005 +#: elfxx-mips.c:16167 #, c-format msgid "Hard float (32-bit CPU, 64-bit FPU)\n" msgstr "Ðпаратна рухома крапка (32-бітовий процеÑор, 64-бітовий FPU)\n" -#: elfxx-mips.c:16008 +#: elfxx-mips.c:16170 #, c-format msgid "Hard float compat (32-bit CPU, 64-bit FPU)\n" msgstr "СуміÑніÑÑ‚ÑŒ апаратної рухомої крапки (32-бітовий процеÑор, 64-бітовий FPU)\n" -#: elfxx-mips.c:16040 +#: elfxx-mips.c:16202 #, c-format msgid " [abi=O32]" msgstr " [abi=O32]" -#: elfxx-mips.c:16042 +#: elfxx-mips.c:16204 #, c-format msgid " [abi=O64]" msgstr " [abi=O64]" -#: elfxx-mips.c:16044 +#: elfxx-mips.c:16206 #, c-format msgid " [abi=EABI32]" msgstr " [abi=EABI32]" -#: elfxx-mips.c:16046 +#: elfxx-mips.c:16208 #, c-format msgid " [abi=EABI64]" msgstr " [abi=EABI64]" -#: elfxx-mips.c:16048 +#: elfxx-mips.c:16210 #, c-format msgid " [abi unknown]" msgstr " [невідомий abi]" -#: elfxx-mips.c:16050 +#: elfxx-mips.c:16212 #, c-format msgid " [abi=N32]" msgstr " [abi=N32]" -#: elfxx-mips.c:16052 +#: elfxx-mips.c:16214 #, c-format msgid " [abi=64]" msgstr " [abi=64]" -#: elfxx-mips.c:16054 +#: elfxx-mips.c:16216 #, c-format msgid " [no abi set]" msgstr " [не вÑтановлено abi]" -#: elfxx-mips.c:16079 +#: elfxx-mips.c:16241 #, c-format msgid " [unknown ISA]" msgstr " [невідомий ISA]" -#: elfxx-mips.c:16099 +#: elfxx-mips.c:16261 #, c-format msgid " [not 32bitmode]" msgstr " [не 32-біт.режим]" -#: elfxx-sparc.c:3113 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:5286 +#: elfxx-riscv.c:1063 +#, c-format +msgid "-march=%s: Expect number after `%dp'." +msgstr "-march=%s: мало бути чиÑло піÑÐ»Ñ Â«%dp»." + +#: elfxx-riscv.c:1174 +#, c-format +msgid "-march=%s: rv%de is not a valid base ISA" +msgstr "-march=%s: rv%de не Ñ” коректним ISA оÑнови" + +#: elfxx-riscv.c:1214 +#, c-format +msgid "-march=%s: first ISA subset must be `e', `i' or `g'" +msgstr "-march=%s: першою підмножиною ISA має бути «e», «i» або «g»" + +#: elfxx-riscv.c:1242 +#, c-format +msgid "-march=%s: unsupported ISA subset `%c'" +msgstr "-march=%s: непідтримувана підмножина ISA «%c»" + +#: elfxx-riscv.c:1245 +#, c-format +msgid "-march=%s: ISA string is not in canonical order. `%c'" +msgstr "-march=%s: Ñ€Ñдок ISA запиÑано не у канонічному порÑдку. «%c»" + +#: elfxx-riscv.c:1364 +#, c-format +msgid "-march=%s: Invalid or unknown %s ISA extension: '%s'" +msgstr "-march=%s: некоректне або невідоме Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ ISA %s: «%s»" + +#: elfxx-riscv.c:1375 +#, c-format +msgid "-march=%s: Duplicate %s ISA extension: '%s'" +msgstr "-march=%s: Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ ISA %s: «%s»" + +#: elfxx-riscv.c:1386 +#, c-format +msgid "-march=%s: %s ISA extension not in alphabetical order: '%s' must come before '%s'." +msgstr "-march=%s: Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ ISA %s не у порÑдку за абеткою: «%s» має бути перед «%s»." + +#: elfxx-riscv.c:1407 +#, c-format +msgid "-march=%s: %s must separate with _" +msgstr "-march=%s: %s Ñлід відокремлювати за допомогою _" + +#: elfxx-riscv.c:1523 +#, c-format +msgid "-march=%s: ISA string must begin with rv32 or rv64" +msgstr "-march=%s: Ñ€Ñдок ISA має починатиÑÑ Ð· rv32 або rv64" + +#: elfxx-riscv.c:1544 +#, c-format +msgid "-march=%s: unexpected ISA string at end: %s" +msgstr "-march=%s: неочікуваний Ñ€Ñдок ISA наприкінці: %s" + +#: elfxx-riscv.c:1553 +#, c-format +msgid "-march=%s: rv32e does not support the `f' extension" +msgstr "-march=%s: у rv32e не передбачено підтримки Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ Â«f»" + +#: elfxx-riscv.c:1562 +#, c-format +msgid "-march=%s: `d' extension requires `f' extension" +msgstr "-march=%s: Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ Â«d» потребує Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ Â«f»" + +#: elfxx-riscv.c:1571 +#, c-format +msgid "-march=%s: `q' extension requires `d' extension" +msgstr "-march=%s: Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ Â«q» потребує Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ Â«d»" + +#: elfxx-riscv.c:1579 +#, c-format +msgid "-march=%s: rv32 does not support the `q' extension" +msgstr "-march=%s: у rv32 не передбачено підтримки Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ Â«q»" + +#: elfxx-sparc.c:3002 elfnn-aarch64.c:5530 #, c-format msgid "%pB: relocation %s against STT_GNU_IFUNC symbol `%s' isn't handled by %s" msgstr "%pB: переÑÑƒÐ²Ð°Ð½Ð½Ñ %s щодо Ñимволу STT_GNU_IFUNC «%s» не оброблÑєтьÑÑ %s" -#: elfxx-tilegx.c:4254 +#: elfxx-tilegx.c:4128 #, c-format msgid "%pB: cannot link together %s and %s objects" msgstr "%pB: не вдалоÑÑ Ñкомпонувати об’єкти %s та %s" -#: elfxx-x86.c:578 +#: elfxx-x86.c:976 #, c-format -msgid "%P: %pB: warning: relocation against `%s' in read-only section `%pA'\n" -msgstr "%P: %pB: попередженнÑ: переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ‰Ð¾Ð´Ð¾ «%s» у придатному лише Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ– «%pA»\n" +msgid "%F%P: %pB: relocation %s against absolute symbol `%s' in section `%pA' is disallowed\n" +msgstr "%F%P: %pB: переÑÑƒÐ²Ð°Ð½Ð½Ñ %s щодо абÑолютного Ñимволу «%s» у розділі «%pA» заборонено\n" -#: elfxx-x86.c:1027 +#: elfxx-x86.c:1058 msgid "%P: %pB: warning: relocation in read-only section `%pA'\n" msgstr "%P: %pB: попередженнÑ: переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñƒ розділі, придатному лише Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Â«%pA»\n" -#: elfxx-x86.c:1383 -msgid "%P%X: read-only segment has dynamic IFUNC relocations; recompile with -fPIC\n" -msgstr "%P%X: Ñегмент, призначений лише Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ, міÑтить динамічні переÑÑƒÐ²Ð°Ð½Ð½Ñ IFUNC. Спробуйте зібрати з -fPIC\n" - -#: elfxx-x86.c:2384 +#: elfxx-x86.c:2314 #, c-format msgid "error: %pB: " msgstr "помилка: %pB: <пошкоджений розмір можливоÑÑ‚Ñ– (0x%x) x86: 0x%x>" -#: elfxx-x86.c:2609 -msgid "%F%P: failed to create GNU property section\n" -msgstr "%F%P: не вдалоÑÑ Ñтворити розділ влаÑтивоÑтей GNU\n" +#: elfxx-x86.c:2580 +msgid "%P: %pB: warning: missing %s\n" +msgstr "%P: %pB: попередженнÑ: пропущено %s\n" + +#: elfxx-x86.c:2582 +msgid "%X%P: %pB: error: missing %s\n" +msgstr "%X%P: %pB: помилка: пропущено %s\n" + +#: elfxx-x86.c:2605 +msgid "IBT and SHSTK properties" +msgstr "влаÑтивоÑÑ‚Ñ– IBT Ñ– SHSTK" + +#: elfxx-x86.c:2607 +msgid "IBT property" +msgstr "влаÑтивіÑÑ‚ÑŒ IBT" -#: elfxx-x86.c:2614 -#, c-format -msgid "%F%pA: failed to align section\n" -msgstr "%F%pA: не вдалоÑÑ Ð²Ð¸Ñ€Ñ–Ð²Ð½Ñти розмір\n" +#: elfxx-x86.c:2609 +msgid "SHSTK property" +msgstr "влаÑтивіÑÑ‚ÑŒ SHSTK" -#: elfxx-x86.c:2760 +#: elfxx-x86.c:2753 msgid "%F%P: failed to create VxWorks dynamic sections\n" msgstr "%F%P: не вдалоÑÑ Ñтворити динамічні розділи VxWorks\n" -#: elfxx-x86.c:2769 +#: elfxx-x86.c:2762 msgid "%F%P: failed to create GOT sections\n" msgstr "%F%P: не вдалоÑÑ Ñтворити розділи GOT\n" -#: elfxx-x86.c:2787 +#: elfxx-x86.c:2780 msgid "%F%P: failed to create ifunc sections\n" msgstr "%F%P: не вдалоÑÑ Ñтворити розділи ifunc\n" -#: elfxx-x86.c:2828 +#: elfxx-x86.c:2817 msgid "%F%P: failed to create GOT PLT section\n" msgstr "%F%P: не вдалоÑÑ Ñтворити розділ PLT GOT\n" -#: elfxx-x86.c:2849 +#: elfxx-x86.c:2836 msgid "%F%P: failed to create IBT-enabled PLT section\n" msgstr "%F%P: не вдалоÑÑ Ñтворити розділ PLT із увімкненим IBT\n" -#: elfxx-x86.c:2864 +#: elfxx-x86.c:2850 msgid "%F%P: failed to create BND PLT section\n" msgstr "%F%P: не вдалоÑÑ Ñтворити розділ PLT BND\n" -#: elfxx-x86.c:2885 +#: elfxx-x86.c:2870 msgid "%F%P: failed to create PLT .eh_frame section\n" msgstr "%F%P: не вдалоÑÑ Ñтворити розділ .eh_frame PLT\n" -#: elfxx-x86.c:2898 +#: elfxx-x86.c:2883 msgid "%F%P: failed to create GOT PLT .eh_frame section\n" msgstr "%F%P: не вдалоÑÑ Ñтворити розділ .eh_frame PLT GOT\n" -#: elfxx-x86.c:2912 +#: elfxx-x86.c:2897 msgid "%F%P: failed to create the second PLT .eh_frame section\n" msgstr "%F%P: не вдалоÑÑ Ñтворити другий розділ .eh_frame PLT\n" +#: elfxx-x86.c:2939 +msgid "%X%P: attempted static link of dynamic object `%pB'\n" +msgstr "%X%P: Ñпроба Ñтатичного ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð¸Ð½Ð°Ð¼Ñ–Ñ‡Ð½Ð¾Ð³Ð¾ об'єкта «%pB»\n" + #: ihex.c:230 #, c-format msgid "%pB:%d: unexpected character `%s' in Intel Hex file" @@ -5101,67 +5393,67 @@ msgid "%pB:%u: bad checksum in Intel Hex file (expected %u, found %u)" msgstr "%pB:%u: помилкова контрольна Ñума у шіÑтнадцÑтковому файлі Intel (очікувалоÑÑ %u, виÑвлено %u)" -#: ihex.c:394 +#: ihex.c:393 #, c-format msgid "%pB:%u: bad extended address record length in Intel Hex file" msgstr "%pB:%u: помилкова довжина запиÑу розширеної адреÑи у шіÑтнадцÑтковому файлі Intel" -#: ihex.c:412 +#: ihex.c:411 #, c-format msgid "%pB:%u: bad extended start address length in Intel Hex file" msgstr "%pB:%u: помилкова довжина розширеної початкової адреÑи у шіÑтнадцÑтковому файлі Intel" -#: ihex.c:430 +#: ihex.c:429 #, c-format msgid "%pB:%u: bad extended linear address record length in Intel Hex file" msgstr "%pB:%u: помилкова довжина запиÑу розширеної лінійної адреÑи у шіÑтнадцÑтковому файлі Intel" -#: ihex.c:448 +#: ihex.c:447 #, c-format msgid "%pB:%u: bad extended linear start address length in Intel Hex file" msgstr "%pB:%u: помилкова довжина розширеної лінійної початкової адреÑи у шіÑтнадцÑтковому файлі Intel" -#: ihex.c:466 +#: ihex.c:465 #, c-format msgid "%pB:%u: unrecognized ihex type %u in Intel Hex file" msgstr "%pB:%u: невідомий тип ihex %u у шіÑтнадцÑтковому файлі Intel" -#: ihex.c:585 +#: ihex.c:581 #, c-format msgid "%pB: internal error in ihex_read_section" msgstr "%pB: Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° у ihex_read_section" -#: ihex.c:619 +#: ihex.c:614 #, c-format msgid "%pB: bad section length in ihex_read_section" msgstr "%pB: помилкова довжина розділу у ihex_read_section" -#: ihex.c:793 +#: ihex.c:785 #, c-format msgid "%pB 64-bit address %# out of range for Intel Hex file" msgstr "%pB: 64-бітова адреÑа %# перебуває за межами шіÑтнадцÑткового файла Intel" -#: ihex.c:852 +#: ihex.c:843 #, c-format msgid "%pB: address %# out of range for Intel Hex file" msgstr "%pB: адреÑа %# перебуває за межами шіÑтнадцÑткового файла Intel" -#: libbfd.c:937 +#: libbfd.c:884 #, c-format msgid "%pB: unable to get decompressed section %pA" msgstr "%pB: не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ розпакований розділ %pA" -#: libbfd.c:1101 +#: libbfd.c:1048 #, c-format msgid "Deprecated %s called at %s line %d in %s\n" msgstr "Викликано заÑтарілу %s у %s, Ñ€Ñдок %d у %s\n" -#: libbfd.c:1104 +#: libbfd.c:1051 #, c-format msgid "Deprecated %s called\n" msgstr "Викликано заÑтарілу %s\n" -#: linker.c:1697 +#: linker.c:1696 #, c-format msgid "%pB: indirect symbol `%s' to `%s' is a loop" msgstr "%pB: опоÑередкований Ñимвол «%s» Ð´Ð»Ñ Â«%s» Ñ” циклом" @@ -5171,179 +5463,213 @@ msgid "attempt to do relocatable link with %s input and %s output" msgstr "Ñпроба ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð·Ð²â€™Ñзку переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð· вхідним %s Ñ– вихідним %s" -#: linker.c:2853 +#: linker.c:2852 #, c-format msgid "%pB: ignoring duplicate section `%pA'\n" msgstr "%pB: ігноруємо дублікат розділу «%pA»\n" -#: linker.c:2863 linker.c:2873 +#: linker.c:2862 linker.c:2872 #, c-format msgid "%pB: duplicate section `%pA' has different size\n" msgstr "%pB: дублікат розділу «%pA» має інший розмір\n" -#: linker.c:2882 linker.c:2888 +#: linker.c:2881 linker.c:2887 #, c-format msgid "%pB: could not read contents of section `%pA'\n" msgstr "%pB: не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ вміÑÑ‚ розділу «%pA»\n" -#: linker.c:2893 +#: linker.c:2892 #, c-format msgid "%pB: duplicate section `%pA' has different contents\n" msgstr "%pB: дублікат розділу «%pA» має інший вміÑÑ‚\n" -#: linker.c:3407 +#: linker.c:3404 #, c-format msgid "%pB: compiled for a big endian system and target is little endian" msgstr "%pB: зібрано Ð´Ð»Ñ ÑиÑтеми з прÑмим порÑдком байтів, а призначеннÑм Ñ” ÑиÑтема зі зворотним порÑдком байтів" -#: linker.c:3410 +#: linker.c:3407 #, c-format msgid "%pB: compiled for a little endian system and target is big endian" msgstr "%pB: зібрано Ð´Ð»Ñ ÑиÑтеми зі зворотним порÑдком байтів, а призначеннÑм Ñ” ÑиÑтема зі прÑмим порÑдком байтів" -#: mach-o.c:632 +#: mach-o-arm.c:172 +msgid "malformed mach-o ARM reloc pair: reloc is first reloc" +msgstr "помилкове Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð°Ñ€Ð¸ переÑувань mach-o ARM: reloc Ñ” першим reloc" + +#: mach-o-arm.c:188 +#, c-format +msgid "malformed mach-o ARM reloc pair: invalid length: %d" +msgstr "помилкове Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð°Ñ€Ð¸ переÑувань mach-o ARM: некоректна довжина: %d" + +#: mach-o-arm.c:203 +#, c-format +msgid "malformed mach-o ARM sectdiff reloc: invalid length: %d" +msgstr "помилкове Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿ÐµÑ€ÐµÑÑƒÐ²Ð°Ð½Ð½Ñ sectdiff mach-o ARM: некоректна довжина: %d" + +#: mach-o-arm.c:218 +#, c-format +msgid "malformed mach-o ARM local sectdiff reloc: invalid length: %d" +msgstr "помилкове Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ переÑÑƒÐ²Ð°Ð½Ð½Ñ sectdiff mach-o ARM: некоректна довжина: %d" + +#: mach-o-arm.c:233 +#, c-format +msgid "malformed mach-o ARM half sectdiff reloc: invalid length: %d" +msgstr "помилкове Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ð»Ð¾Ð²Ð¸Ð½Ð½Ð¾Ð³Ð¾ переÑÑƒÐ²Ð°Ð½Ð½Ñ sectdiff mach-o ARM: некоректна довжина: %d" + +#: mach-o-arm.c:265 +#, c-format +msgid "malformed mach-o ARM vanilla reloc: invalid length: %d (pcrel: %d)" +msgstr "помилкове Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ñ€Ð¾Ñтого переÑÑƒÐ²Ð°Ð½Ð½Ñ mach-o ARM: некоректна довжина: %d (pcrel: %d)" + +#: mach-o-arm.c:329 +#, c-format +msgid "malformed mach-o ARM reloc: unknown reloc type: %d" +msgstr "помилкове Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿ÐµÑ€ÐµÑÑƒÐ²Ð°Ð½Ð½Ñ mach-o ARM: невідомий тип переÑуваннÑ: %d" + +#: mach-o.c:633 #, c-format msgid "" msgstr "<невідомі прапорці маÑкуваннÑ>" -#: mach-o.c:687 +#: mach-o.c:688 msgid " ()" msgstr " (<невідомо>)" -#: mach-o.c:698 +#: mach-o.c:699 #, c-format msgid " MACH-O header:\n" msgstr "заголовок MACH-O:\n" -#: mach-o.c:699 +#: mach-o.c:700 #, c-format msgid " magic: %#lx\n" msgstr " magic: %#lx\n" -#: mach-o.c:700 +#: mach-o.c:701 #, c-format msgid " cputype: %#lx (%s)\n" msgstr " тип проц. : %#lx (%s)\n" -#: mach-o.c:702 +#: mach-o.c:703 #, c-format msgid " cpusubtype: %#lx%s\n" msgstr " підтип проц.: %#lx (%s)\n" -#: mach-o.c:704 +#: mach-o.c:705 #, c-format msgid " filetype: %#lx\n" msgstr " тип файла : %#lx\n" -#: mach-o.c:705 +#: mach-o.c:706 #, c-format msgid " ncmds: %#lx\n" msgstr " кть_команд: %#lx\n" -#: mach-o.c:706 +#: mach-o.c:707 #, c-format msgid " sizeocmds: %#lx\n" msgstr " розмір_кмд: %#lx\n" -#: mach-o.c:707 +#: mach-o.c:708 #, c-format msgid " flags: %#lx\n" msgstr " прапорці: %lx\n" -#: mach-o.c:708 +#: mach-o.c:709 #, c-format msgid " version: %x\n" msgstr " верÑÑ–Ñ: %x\n" #. Urg - what has happened ? -#: mach-o.c:743 +#: mach-o.c:744 #, c-format msgid "incompatible cputypes in mach-o files: %ld vs %ld" msgstr "неÑуміÑні типи процеÑорів у файлах mach-o: %ld Ñ– %ld" -#: mach-o.c:912 +#: mach-o.c:913 msgid "bfd_mach_o_canonicalize_symtab: unable to load symbols" msgstr "bfd_mach_o_canonicalize_symtab: не вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ Ñимволи" -#: mach-o.c:2108 +#: mach-o.c:1505 +msgid "malformed mach-o reloc: section index is greater than the number of sections" +msgstr "помилкове Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿ÐµÑ€ÐµÑÑƒÐ²Ð°Ð½Ð½Ñ mach-o: Ñ–Ð½Ð´ÐµÐºÑ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ перевищує кількіÑÑ‚ÑŒ розділів" + +#: mach-o.c:2139 msgid "sorry: modtab, toc and extrefsyms are not yet implemented for dysymtab commands." msgstr "вибечте, modtab, toc та extrefsyms Ð´Ð»Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´ dysymtab у поточній верÑÑ–Ñ— ще не реалізовано." -#: mach-o.c:2554 +#: mach-o.c:2587 #, c-format msgid "mach-o: there are too many sections (%u) maximum is 255,\n" msgstr "mach-o: надто багато розділів (%u), макÑимальна кількіÑÑ‚ÑŒ розділів дорівнює 255,\n" -#: mach-o.c:2661 +#: mach-o.c:2694 #, c-format msgid "unable to allocate data for load command %#x" msgstr "не вдалоÑÑ Ñ€Ð¾Ð·Ð¼Ñ–Ñтити дані Ð´Ð»Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ %#x" -#: mach-o.c:2766 +#: mach-o.c:2799 #, c-format msgid "unable to write unknown load command %#x" msgstr "не вдалоÑÑ Ð·Ð°Ð¿Ð¸Ñати невідому команду завантаженнÑ, %#x" -#: mach-o.c:2950 +#: mach-o.c:2983 #, c-format msgid "section address (%#) below start of segment (%#)" msgstr "адреÑа розділу (%) нижче за початок Ñегмента (%)" -#: mach-o.c:3092 +#: mach-o.c:3125 #, c-format msgid "unable to layout unknown load command %#x" msgstr "не вдалоÑÑ Ñ€Ð¾Ð·Ñ‚Ð°ÑˆÑƒÐ²Ð°Ñ‚Ð¸ невідому команду завантаженнÑ, %#x" -#: mach-o.c:3628 +#: mach-o.c:3660 #, c-format msgid "bfd_mach_o_read_section_32: overlarge alignment value: %#lx, using 32 instead" msgstr "bfd_mach_o_read_section_32: надто велике Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ: %#lx, викориÑтовуємо заміÑÑ‚ÑŒ нього 32" -#: mach-o.c:3671 +#: mach-o.c:3703 #, c-format msgid "bfd_mach_o_read_section_64: overlarge alignment value: %#lx, using 32 instead" msgstr "bfd_mach_o_read_section_32: надто велике Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ: %#lx, викориÑтовуємо заміÑÑ‚ÑŒ нього 32" -#: mach-o.c:3722 +#: mach-o.c:3754 #, c-format msgid "bfd_mach_o_read_symtab_symbol: unable to read %d bytes at %u" msgstr "bfd_mach_o_read_symtab_symbol: не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ %d байтів у %u" -#: mach-o.c:3741 +#: mach-o.c:3773 #, c-format msgid "bfd_mach_o_read_symtab_symbol: name out of range (%lu >= %u)" msgstr "bfd_mach_o_read_symtab_symbol: назва за межами доÑтупного діапазону (%lu >= %u)" -#: mach-o.c:3824 +#: mach-o.c:3856 #, c-format msgid "bfd_mach_o_read_symtab_symbol: symbol \"%s\" specified invalid section %d (max %lu): setting to undefined" msgstr "bfd_mach_o_read_symtab_symbol: Ñимвол «%s» визначає некоректний розділ %d (max %lu): вÑтановлюємо у невизначене значеннÑ" -#: mach-o.c:3843 +#: mach-o.c:3875 #, c-format msgid "bfd_mach_o_read_symtab_symbol: symbol \"%s\" specified invalid type field 0x%x: setting to undefined" msgstr "bfd_mach_o_read_symtab_symbol: Ñимвол «%s» визначає некоректний тип Ð¿Ð¾Ð»Ñ 0x%x: вÑтановлюємо у невизначене значеннÑ" -#: mach-o.c:3920 -msgid "bfd_mach_o_read_symtab_symbols: unable to allocate memory for symbols" -msgstr "bfd_mach_o_read_symtab_symbols: не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ облаÑÑ‚ÑŒ пам’ÑÑ‚Ñ– Ð´Ð»Ñ Ñимволів" - -#: mach-o.c:4931 +#: mach-o.c:5064 #, c-format msgid "%pB: unknown load command %#x" msgstr "%pB: невідома команда завантаженнÑ, %#x" -#: mach-o.c:5122 +#: mach-o.c:5263 #, c-format msgid "bfd_mach_o_scan: unknown architecture 0x%lx/0x%lx" msgstr "bfd_mach_o_scan: невідома архітектура, 0x%lx/0x%lx" -#: mach-o.c:5227 +#: mach-o.c:5385 #, c-format msgid "unknown header byte-order value %#x" msgstr "невідоме Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð¾Ñ€Ñдку байтів у заголовку, %#x" -#: merge.c:878 +#: merge.c:895 #, c-format msgid "%pB: access beyond end of merged section (%)" msgstr "%pB: доÑтуп за кінцем об’єднаного розділу (%)" @@ -5358,122 +5684,122 @@ msgid "%pB: no core to allocate a symbol %d bytes long" msgstr "%pB: немає оÑнови Ð´Ð»Ñ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ñимволу довжиною %d байтів" -#: mmo.c:955 +#: mmo.c:952 #, c-format msgid "%pB: attempt to emit contents at non-multiple-of-4 address %#" msgstr "%pB: Ñпроба надіÑлати дані на некратну до 4 адреÑу %#" -#: mmo.c:1252 +#: mmo.c:1248 #, c-format msgid "%pB: invalid mmo file: initialization value for $255 is not `Main'\n" msgstr "%pB: некоректний файл mmo: Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ–Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·Ð°Ñ†Ñ–Ñ— Ð´Ð»Ñ $255 не дорівнює «Main»\n" -#: mmo.c:1399 +#: mmo.c:1395 #, c-format msgid "%pB: unsupported wide character sequence 0x%02X 0x%02X after symbol name starting with `%s'\n" msgstr "%pB: непідтримувана широка поÑлідовніÑÑ‚ÑŒ Ñимволів 0x%02X 0x%02X піÑÐ»Ñ Ð½Ð°Ð·Ð²Ð¸ Ñимволу, починаючи з «%s»\n" -#: mmo.c:1633 +#: mmo.c:1628 #, c-format msgid "%pB: invalid mmo file: unsupported lopcode `%d'\n" msgstr "%pB: некоректний файл mmo: непідтримуване Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ lopcode, «%d»\n" -#: mmo.c:1644 +#: mmo.c:1639 #, c-format msgid "%pB: invalid mmo file: expected YZ = 1 got YZ = %d for lop_quote\n" msgstr "%pB: некоректний файл mmo: очікувалоÑÑ YZ = 1, отримано YZ = %d Ð´Ð»Ñ lop_quote\n" -#: mmo.c:1682 +#: mmo.c:1679 #, c-format msgid "%pB: invalid mmo file: expected z = 1 or z = 2, got z = %d for lop_loc\n" msgstr "%pB: некоректний файл mmo: очікувалоÑÑ z = 1 або z = 2, отримано z = %d Ð´Ð»Ñ lop_loc\n" -#: mmo.c:1733 +#: mmo.c:1730 #, c-format msgid "%pB: invalid mmo file: expected z = 1 or z = 2, got z = %d for lop_fixo\n" msgstr "%pB: некоректний файл mmo: очікувалоÑÑ z = 1 або z = 2, отримано z = %d Ð´Ð»Ñ lop_fixo\n" -#: mmo.c:1774 +#: mmo.c:1771 #, c-format msgid "%pB: invalid mmo file: expected y = 0, got y = %d for lop_fixrx\n" msgstr "%pB: некоректний файл mmo: очікувалоÑÑ y=0, отримано y = %d Ð´Ð»Ñ lop_fixrx\n" -#: mmo.c:1785 +#: mmo.c:1782 #, c-format msgid "%pB: invalid mmo file: expected z = 16 or z = 24, got z = %d for lop_fixrx\n" msgstr "%pB: некоректний файл mmo: очікувалоÑÑ z = 16 або z = 24, отримано z = %d Ð´Ð»Ñ lop_fixrx\n" -#: mmo.c:1810 +#: mmo.c:1807 #, c-format msgid "%pB: invalid mmo file: leading byte of operand word must be 0 or 1, got %d for lop_fixrx\n" msgstr "%pB: некоректний файл mmo: початковим байтом Ñлова оператора має бути 0 або 1, отримано ж %d Ð´Ð»Ñ lop_fixrx\n" -#: mmo.c:1835 +#: mmo.c:1832 #, c-format msgid "%pB: cannot allocate file name for file number %d, %d bytes\n" msgstr "%pB: не вдалоÑÑ Ñ€Ð¾Ð·Ð¼Ñ–Ñтити назву файла Ð´Ð»Ñ Ñ„Ð°Ð¹Ð»Ð° з номером %d, %d байтів\n" -#: mmo.c:1857 +#: mmo.c:1854 #, c-format msgid "%pB: invalid mmo file: file number %d `%s', was already entered as `%s'\n" msgstr "%pB: некоректний файл mmo: номер файла %d, «%s», уже здійÑнено вхід Ñк у «%s»\n" -#: mmo.c:1871 +#: mmo.c:1868 #, c-format msgid "%pB: invalid mmo file: file name for number %d was not specified before use\n" msgstr "%pB: некоректний файл mmo: назву файла Ð´Ð»Ñ Ð½Ð¾Ð¼ÐµÑ€Ð° %d не було вказано до викориÑтаннÑ\n" -#: mmo.c:1978 +#: mmo.c:1975 #, c-format msgid "%pB: invalid mmo file: fields y and z of lop_stab non-zero, y: %d, z: %d\n" msgstr "%pB: некоректний файл mmo: Ð¿Ð¾Ð»Ñ y Ñ– z lop_stab Ñ” ненульовими, y: %d, z: %d\n" -#: mmo.c:2015 +#: mmo.c:2012 #, c-format msgid "%pB: invalid mmo file: lop_end not last item in file\n" msgstr "%pB: некоректний файл mmo: lop_end не Ñ” оÑтаннім запиÑом у файлі\n" -#: mmo.c:2029 +#: mmo.c:2026 #, c-format msgid "%pB: invalid mmo file: YZ of lop_end (%ld) not equal to the number of tetras to the preceding lop_stab (%ld)\n" msgstr "%pB: некоректний файл mmo: YZ lop_end (%ld) не дорівнює кількоÑÑ‚Ñ– тетрад до попереднього lop_stab (%ld)\n" -#: mmo.c:2740 +#: mmo.c:2735 #, c-format msgid "%pB: invalid symbol table: duplicate symbol `%s'\n" msgstr "%pB: некоректна Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ Ñимволів: Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ñимволу «%s»\n" -#: mmo.c:2983 +#: mmo.c:2978 #, c-format msgid "%pB: bad symbol definition: `Main' set to %s rather than the start address %s\n" msgstr "%pB: помилкове Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñимволу: «Main» вÑтановлено у %s, а не у початкову адреÑу %s\n" -#: mmo.c:3082 +#: mmo.c:3077 #, c-format msgid "%pB: warning: symbol table too large for mmo, larger than 65535 32-bit words: %d. Only `Main' will be emitted.\n" msgstr "%pB: попередженнÑ: Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ Ñимволів Ñ” надто великою Ð´Ð»Ñ mmo, Ñ—Ñ— розмір перевищує 65535 32-бітових Ñлова: %d. Буде випущено лише «Main».\n" -#: mmo.c:3128 +#: mmo.c:3123 #, c-format msgid "%pB: internal error, symbol table changed size from %d to %d words\n" msgstr "%pB: Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°, змінено розмір таблиці Ñимволів з %d до %d Ñлів\n" -#: mmo.c:3181 +#: mmo.c:3176 #, c-format msgid "%pB: internal error, internal register section %pA had contents\n" msgstr "%pB: Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°, внутрішній розділ регіÑтрів, %pA, міÑтив дані\n" -#: mmo.c:3232 +#: mmo.c:3227 #, c-format msgid "%pB: no initialized registers; section length 0\n" msgstr "%pB: немає ініціалізованих регіÑтрів, довжина розділу дорівнює 0\n" -#: mmo.c:3239 +#: mmo.c:3234 #, c-format msgid "%pB: too many initialized registers; section length %" msgstr "%pB: занадто багато ініціалізованих регіÑтрів; довжина розділу — %" -#: mmo.c:3244 +#: mmo.c:3239 #, c-format msgid "%pB: invalid start address for initialized registers of length %: %#" msgstr "%pB: некоректна початкова адреÑа Ð´Ð»Ñ Ñ–Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ… регіÑтрів довжини %: %#" @@ -5483,48 +5809,55 @@ msgid "unhandled OSF/1 core file section type %d" msgstr "непридатний до обробки тип розділу файла core OSF/1, %d" -#: pef.c:527 +#: pdp11.c:1588 +#, c-format +msgid "%pB: symbol indicates overlay (not supported)" +msgstr "%pB: Ñимвол вказує на накладку (немає підтримки накладок)" + +#: pef.c:530 #, c-format msgid "bfd_pef_scan: unknown architecture 0x%lx" msgstr "bfd_pef_scan: невідома архітектура, 0x%lx" -#: pei-x86_64.c:177 pei-x86_64.c:191 pei-x86_64.c:220 +#: pei-x86_64.c:177 pei-x86_64.c:191 pei-x86_64.c:220 pei-x86_64.c:243 +#: pei-x86_64.c:253 pei-x86_64.c:278 pei-x86_64.c:290 pei-x86_64.c:304 +#: pei-x86_64.c:322 pei-x86_64.c:334 pei-x86_64.c:346 #, c-format msgid "warning: corrupt unwind data\n" msgstr "попередженнÑ: пошкоджено дані розгортаннÑ\n" #. PR 17512: file: 2245-7442-0.004. -#: pei-x86_64.c:315 +#: pei-x86_64.c:367 #, c-format msgid "Unknown: %x" msgstr "Ðевідомий: %x" -#: pei-x86_64.c:365 pei-x86_64.c:375 pei-x86_64.c:384 +#: pei-x86_64.c:418 pei-x86_64.c:428 pei-x86_64.c:437 #, c-format msgid "warning: xdata section corrupt\n" msgstr "попередженнÑ: пошкоджено розділ xdata\n" -#: pei-x86_64.c:439 +#: pei-x86_64.c:492 #, c-format msgid "Too many unwind codes (%ld)\n" msgstr "Забагато кодів Ñ€Ð¾Ð·Ð³Ð¾Ñ€Ñ‚Ð°Ð½Ð½Ñ (%ld)\n" -#: pei-x86_64.c:529 +#: pei-x86_64.c:582 #, c-format msgid "Warning: %s section size (%ld) is not a multiple of %d\n" msgstr "ПопередженнÑ: розмір розділу %s (%ld) не Ñ” кратним до %d\n" -#: pei-x86_64.c:536 +#: pei-x86_64.c:589 #, c-format msgid "Warning: %s section size is zero\n" msgstr "ПопередженнÑ: розмір розділу %s Ñ” нульовим\n" -#: pei-x86_64.c:551 +#: pei-x86_64.c:604 #, c-format msgid "Warning: %s section size (%ld) is smaller than virtual size (%ld)\n" msgstr "ПопередженнÑ: розмір розділу %s (%ld) Ñ” меншим за віртуальний розмір (%ld)\n" -#: pei-x86_64.c:560 +#: pei-x86_64.c:613 #, c-format msgid "" "\n" @@ -5533,12 +5866,12 @@ "\n" "Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ Ñ„ÑƒÐ½ÐºÑ†Ñ–Ð¹ (оброблений вміÑÑ‚ розділу %s)\n" -#: pei-x86_64.c:563 +#: pei-x86_64.c:616 #, c-format msgid "vma:\t\t\tBeginAddress\t EndAddress\t UnwindData\n" msgstr "vma:\t\t\tПочаткÐдреÑа\t КінцÐдреÑаs\t ДаніUnwind\n" -#: pei-x86_64.c:692 +#: pei-x86_64.c:745 #, c-format msgid "" "\n" @@ -5548,42 +5881,42 @@ "Дамп %s\n" #. XXX code yet to be written. -#: peicode.h:775 +#: peicode.h:796 #, c-format msgid "%pB: unhandled import type; %x" msgstr "%pB: непридатний до обробки тип імпортуваннÑ; %x" -#: peicode.h:781 +#: peicode.h:802 #, c-format msgid "%pB: unrecognized import type; %x" msgstr "%pB: нерозпізнаний тип імпортуваннÑ; %x" -#: peicode.h:796 +#: peicode.h:817 #, c-format msgid "%pB: unrecognized import name type; %x" msgstr "%pB: нерозпізнана назва імпортуваннÑ; %x" -#: peicode.h:1211 +#: peicode.h:1225 #, c-format msgid "%pB: unrecognised machine type (0x%x) in Import Library Format archive" msgstr "%pB: нерозпізнаний тип архітектури (0x%x) у архіві Import Library Format" -#: peicode.h:1224 +#: peicode.h:1238 #, c-format msgid "%pB: recognised but unhandled machine type (0x%x) in Import Library Format archive" msgstr "%pB: розпізнаний, але непридатний до обробки тип архітектури (0x%x) у архіві Import Library Format" -#: peicode.h:1242 +#: peicode.h:1256 #, c-format msgid "%pB: size field is zero in Import Library Format header" msgstr "%pB: у заголовку Import Library Format поле розміру Ñ” нульовим" -#: peicode.h:1274 +#: peicode.h:1282 #, c-format msgid "%pB: string not null terminated in ILF object file" msgstr "%pB: у об’єктному файлі ILF Ñ€Ñдок не завершуєтьÑÑ Ð½ÑƒÐ»ÑŒÐ¾Ð²Ð¸Ð¼ Ñимволом" -#: peicode.h:1330 +#: peicode.h:1338 #, c-format msgid "%pB: error: debug data ends beyond end of debug directory" msgstr "%pB: помилка: діагноÑтичні дані завершуютьÑÑ Ð·Ð° кінцем діагноÑтичного каталогу" @@ -5641,32 +5974,32 @@ msgid "Partition[%d] length = 0x%.8lx (%ld)\n" msgstr "Довжина розділу[%d] = 0x%.8lx (%ld)\n" -#: reloc.c:8232 +#: reloc.c:8291 msgid "INPUT_SECTION_FLAGS are not supported" msgstr "Підтримки INPUT_SECTION_FLAGS не передбачено" -#: reloc.c:8333 +#: reloc.c:8392 #, c-format msgid "%X%P: %pB(%pA): error: relocation for offset %V has no value\n" msgstr "%X%P: %pB(%pA): помилка: переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ð·Ñуву %V не має значеннÑ\n" -#: reloc.c:8420 +#: reloc.c:8480 #, c-format msgid "%X%P: %pB(%pA): relocation \"%pR\" is not supported\n" msgstr "%X%P: %pB(%pA): підтримки переÑÑƒÐ²Ð°Ð½Ð½Ñ Â«%pR» не передбачено\n" -#: reloc.c:8429 +#: reloc.c:8489 #, c-format msgid "%X%P: %pB(%pA): relocation \"%pR\" returns an unrecognized value %x\n" msgstr "%X%P: %pB(%pA): переÑÑƒÐ²Ð°Ð½Ð½Ñ Â«%pR» повертає нерозпізнане Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ %x\n" -#: reloc.c:8491 +#: reloc.c:8551 #, c-format msgid "%pB: unrecognized relocation type %#x in section `%pA'" msgstr "%pB: нерозпізнане переÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ‚Ð¸Ð¿Ñƒ %#x у розділі «%pA»" #. PR 21803: Suggest the most likely cause of this error. -#: reloc.c:8495 +#: reloc.c:8555 #, c-format msgid "is this version of the linker - %s - out of date ?" msgstr "можливо, Ñ†Ñ Ð²ÐµÑ€ÑÑ–Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¸ÐºÐ° - %s - Ñ” заÑтарілою?" @@ -5676,7 +6009,7 @@ msgid "%pB: warning core file truncated" msgstr "%pB: попередженнÑ: файл core обрізано" -#: som.c:5478 +#: som.c:5497 #, c-format msgid "" "\n" @@ -5685,7 +6018,7 @@ "\n" "Допоміжний заголовок виконаннÑ\n" -#: som.c:5787 +#: som.c:5806 msgid "som_sizeof_headers unimplemented" msgstr "som_sizeof_headers не реалізовано" @@ -5699,7 +6032,7 @@ msgid "%pB:%d: byte count %d too small" msgstr "%pB:%d: кількіÑÑ‚ÑŒ байтів %d Ñ” надто малою" -#: srec.c:581 srec.c:615 +#: srec.c:580 srec.c:614 #, c-format msgid "%pB:%d: bad checksum in S-record file" msgstr "%pB:%d: помилкова контрольна Ñума у файлі запиÑів S" @@ -5709,73 +6042,82 @@ msgid "%pB(%pA+%#lx): stabs entry has invalid string index" msgstr "%pB(%pA+%#lx): Ð·Ð°Ð¿Ð¸Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– stabs міÑтить некоректний Ñ–Ð½Ð´ÐµÐºÑ Ñ€Ñдка" -#: syms.c:1091 +#: syms.c:1085 msgid "unsupported .stab relocation" msgstr "непідтримуване переÑÑƒÐ²Ð°Ð½Ð½Ñ .stab" -#: vms-alpha.c:479 +#: vms-alpha.c:480 msgid "corrupt EIHD record - size is too small" msgstr "пошкоджений Ð·Ð°Ð¿Ð¸Ñ EIHD: розмір Ñ” надто малим" -#: vms-alpha.c:660 +#: vms-alpha.c:666 #, c-format msgid "unable to read EIHS record at offset %#x" msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ Ð·Ð°Ð¿Ð¸Ñ EIHS зі зÑувом %#x" -#: vms-alpha.c:1173 +#: vms-alpha.c:1158 +msgid "record is too small for symbol name length" +msgstr "Ð·Ð°Ð¿Ð¸Ñ Ñ” надто малим Ð´Ð»Ñ Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð¸ назви Ñимволу" + +#: vms-alpha.c:1191 #, c-format msgid "corrupt EGSD record: its size (%#x) is too small" msgstr "пошкоджений Ð·Ð°Ð¿Ð¸Ñ EGSD: його розмір (%#x) Ñ” надто малим" -#: vms-alpha.c:1197 +#: vms-alpha.c:1215 #, c-format -msgid "corrupt EGSD record: size (%#x) is larger than remaining space (%#x)" -msgstr "пошкоджений Ð·Ð°Ð¿Ð¸Ñ EGSD: розмір (%#x) Ñ” більшим за залишок міÑÑ†Ñ (%#x)" +msgid "corrupt EGSD record type %d: size (%#x) is larger than remaining space (%#x)" +msgstr "пошкоджений Ð·Ð°Ð¿Ð¸Ñ Ñ‚Ð¸Ð¿Ñƒ %d EGSD: розмір (%#x) Ñ” більшим за залишок міÑÑ†Ñ (%#x)" -#: vms-alpha.c:1205 +#: vms-alpha.c:1225 #, c-format -msgid "corrupt EGSD record: size (%#x) is too small" -msgstr "пошкоджений Ð·Ð°Ð¿Ð¸Ñ EGSD: розмір (%#x) Ñ” надто малим" +msgid "corrupt EGSD record type %d: size (%#x) is too small" +msgstr "пошкоджений Ð·Ð°Ð¿Ð¸Ñ Ñ‚Ð¸Ð¿Ñƒ %d EGSD: розмір (%#x) Ñ” надто малим" -#: vms-alpha.c:1334 vms-alpha.c:1350 vms-alpha.c:1390 +#: vms-alpha.c:1367 #, c-format msgid "corrupt EGSD record: its psindx field is too big (%#lx)" msgstr "пошкоджений Ð·Ð°Ð¿Ð¸Ñ EGSD: вміÑÑ‚ його Ð¿Ð¾Ð»Ñ psindx Ñ” надто великим (%#lx)" -#: vms-alpha.c:1419 +#: vms-alpha.c:1443 #, c-format msgid "unknown EGSD subtype %d" msgstr "невідомий підтип EGSD, %d" -#: vms-alpha.c:1452 +#: vms-alpha.c:1476 #, c-format msgid "stack overflow (%d) in _bfd_vms_push" msgstr "Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ñтека (%d) у _bfd_vms_push" -#: vms-alpha.c:1465 +#: vms-alpha.c:1490 msgid "stack underflow in _bfd_vms_pop" msgstr "Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ñтека у _bfd_vms_pop" +#: vms-alpha.c:1564 +#, c-format +msgid "dst_define_location %u too large" +msgstr "dst_define_location %u Ñ” надто великим" + #. These names have not yet been added to this switch statement. -#: vms-alpha.c:1707 +#: vms-alpha.c:1765 #, c-format msgid "unknown ETIR command %d" msgstr "невідома команда ETIR, %d" -#: vms-alpha.c:1738 +#: vms-alpha.c:1796 msgid "corrupt vms value" msgstr "пошкоджене Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ vms" -#: vms-alpha.c:1866 +#: vms-alpha.c:1927 msgid "corrupt ETIR record encountered" msgstr "виÑвлено пошкоджений Ð·Ð°Ð¿Ð¸Ñ ETIR" -#: vms-alpha.c:1923 +#: vms-alpha.c:1989 #, c-format msgid "bad section index in %s" msgstr "помилковий номер розділу у %s" -#: vms-alpha.c:1936 +#: vms-alpha.c:2003 #, c-format msgid "unsupported STA cmd %s" msgstr "непідтримувана команда STA, %s" @@ -5785,1468 +6127,1480 @@ #. Rotate. #. Redefine symbol to current location. #. Define a literal. -#: vms-alpha.c:2116 vms-alpha.c:2147 vms-alpha.c:2238 vms-alpha.c:2396 +#: vms-alpha.c:2211 vms-alpha.c:2242 vms-alpha.c:2337 vms-alpha.c:2557 #, c-format msgid "%s: not supported" msgstr "%s: підтримки не передбачено" -#: vms-alpha.c:2122 +#: vms-alpha.c:2217 #, c-format msgid "%s: not implemented" msgstr "%s: не реалізовано" -#: vms-alpha.c:2380 +#: vms-alpha.c:2382 vms-alpha.c:2397 +#, c-format +msgid "invalid %s" +msgstr "некоректний %s" + +#. Divide by zero is supposed to give a result of zero, +#. and a non-fatal warning message. +#: vms-alpha.c:2457 +#, c-format +msgid "%s divide by zero" +msgstr "%s Ð´Ñ–Ð»ÐµÐ½Ð½Ñ Ð½Ð° нуль" + +#: vms-alpha.c:2523 #, c-format msgid "invalid use of %s with contexts" msgstr "некоректне викориÑÑ‚Ð°Ð½Ð½Ñ %s з контекÑтами" -#: vms-alpha.c:2414 +#: vms-alpha.c:2581 #, c-format msgid "reserved cmd %d" msgstr "зарезервована команда %d" -#: vms-alpha.c:2498 +#: vms-alpha.c:2665 msgid "corrupt EEOM record - size is too small" msgstr "пошкоджений Ð·Ð°Ð¿Ð¸Ñ EEOM: розмір Ñ” надто малим" -#: vms-alpha.c:2507 +#: vms-alpha.c:2674 msgid "object module not error-free !" msgstr "у об’єктному модулі міÑÑ‚ÑÑ‚ÑŒÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸!" -#: vms-alpha.c:3831 +#: vms-alpha.c:4001 #, c-format msgid "SEC_RELOC with no relocs in section %pA" msgstr "SEC_RELOC без переÑувань у розділі %pA" -#: vms-alpha.c:3883 vms-alpha.c:4097 +#: vms-alpha.c:4053 vms-alpha.c:4268 #, c-format msgid "size error in section %pA" msgstr "помилка у розмірі у розділі %pA" -#: vms-alpha.c:4043 +#: vms-alpha.c:4213 msgid "spurious ALPHA_R_BSR reloc" msgstr "фальшиве переÑÑƒÐ²Ð°Ð½Ð½Ñ ALPHA_R_BSR" -#: vms-alpha.c:4084 +#: vms-alpha.c:4254 #, c-format msgid "unhandled relocation %s" msgstr "непридатне до обробки переÑÑƒÐ²Ð°Ð½Ð½Ñ %s" -#: vms-alpha.c:4377 +#: vms-alpha.c:4551 #, c-format msgid "unknown source command %d" msgstr "невідома початкова команда %d" -#: vms-alpha.c:4438 vms-alpha.c:4444 vms-alpha.c:4450 vms-alpha.c:4456 -#: vms-alpha.c:4462 vms-alpha.c:4489 vms-alpha.c:4495 vms-alpha.c:4501 -#: vms-alpha.c:4507 +#: vms-alpha.c:4612 vms-alpha.c:4618 vms-alpha.c:4624 vms-alpha.c:4630 +#: vms-alpha.c:4636 vms-alpha.c:4663 vms-alpha.c:4669 vms-alpha.c:4675 +#: vms-alpha.c:4681 #, c-format msgid "%s not implemented" msgstr "%s не реалізовано" -#: vms-alpha.c:4550 +#: vms-alpha.c:4724 #, c-format msgid "unknown line command %d" msgstr "невідома Ñ€Ñдкова команда %d" -#: vms-alpha.c:5010 vms-alpha.c:5028 vms-alpha.c:5043 vms-alpha.c:5059 -#: vms-alpha.c:5072 vms-alpha.c:5084 vms-alpha.c:5097 +#: vms-alpha.c:5188 vms-alpha.c:5206 vms-alpha.c:5221 vms-alpha.c:5237 +#: vms-alpha.c:5250 vms-alpha.c:5262 vms-alpha.c:5275 #, c-format msgid "unknown reloc %s + %s" msgstr "невідоме переÑÑƒÐ²Ð°Ð½Ð½Ñ %s + %s" -#: vms-alpha.c:5152 +#: vms-alpha.c:5330 #, c-format msgid "unknown reloc %s" msgstr "невідоме переÑÑƒÐ²Ð°Ð½Ð½Ñ %s" -#: vms-alpha.c:5166 +#: vms-alpha.c:5344 msgid "invalid section index in ETIR" msgstr "некоректний номер розділу у ETIR" -#: vms-alpha.c:5175 +#: vms-alpha.c:5353 msgid "relocation for non-REL psect" msgstr "переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ psect, Ñкий не Ñ” REL" -#: vms-alpha.c:5222 +#: vms-alpha.c:5402 #, c-format msgid "unknown symbol in command %s" msgstr "невідомий Ñимвол у команді %s" -#: vms-alpha.c:5636 +#: vms-alpha.c:5816 #, c-format msgid "reloc (%d) is *UNKNOWN*" msgstr "переÑÑƒÐ²Ð°Ð½Ð½Ñ (%d) Ñ” *ÐЕВІДОМИМ*" -#: vms-alpha.c:5752 +#: vms-alpha.c:5932 #, c-format msgid " EMH %u (len=%u): " msgstr " EMH %u (довж=%u): " -#: vms-alpha.c:5757 +#: vms-alpha.c:5937 #, c-format msgid " Error: The length is less than the length of an EMH record\n" msgstr " Помилка: довжина Ñ” меншою за довжину запиÑу EMH\n" -#: vms-alpha.c:5774 +#: vms-alpha.c:5954 #, c-format msgid " Error: The record length is less than the size of an EMH_MHD record\n" msgstr " Помилка: довжина запиÑу Ñ” меншою за розмір запиÑу EMH_MHD\n" -#: vms-alpha.c:5777 +#: vms-alpha.c:5957 #, c-format msgid "Module header\n" msgstr "Заголовок модулÑ\n" -#: vms-alpha.c:5778 +#: vms-alpha.c:5958 #, c-format msgid " structure level: %u\n" msgstr " рівень Ñтрукт. : %u\n" -#: vms-alpha.c:5779 +#: vms-alpha.c:5959 #, c-format msgid " max record size: %u\n" msgstr " макÑ. розм. запиÑу: %u\n" -#: vms-alpha.c:5785 +#: vms-alpha.c:5965 #, c-format msgid " Error: The module name is missing\n" msgstr " Помилка: не вказано назви модулÑ\n" -#: vms-alpha.c:5791 +#: vms-alpha.c:5971 #, c-format msgid " Error: The module name is too long\n" msgstr " Помилка: назва Ð¼Ð¾Ð´ÑƒÐ»Ñ Ñ” надто довгою\n" -#: vms-alpha.c:5794 +#: vms-alpha.c:5974 #, c-format msgid " module name : %.*s\n" msgstr " назва Ð¼Ð¾Ð´ÑƒÐ»Ñ : %.*s\n" -#: vms-alpha.c:5798 +#: vms-alpha.c:5978 #, c-format msgid " Error: The module version is missing\n" msgstr " Помилка: не вказано верÑÑ–ÑŽ модулÑ\n" -#: vms-alpha.c:5804 +#: vms-alpha.c:5984 #, c-format msgid " Error: The module version is too long\n" msgstr " Помилка: верÑÑ–Ñ Ð¼Ð¾Ð´ÑƒÐ»Ñ Ñ” надто довгою\n" -#: vms-alpha.c:5807 +#: vms-alpha.c:5987 #, c-format msgid " module version : %.*s\n" msgstr " верÑÑ–Ñ Ð¼Ð¾Ð´ÑƒÐ»Ñ : %.*s\n" -#: vms-alpha.c:5810 +#: vms-alpha.c:5990 #, c-format msgid " Error: The compile date is truncated\n" msgstr " Помилка: дату Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ Ð¾Ð±Ñ€Ñ–Ð·Ð°Ð½Ð¾\n" -#: vms-alpha.c:5812 +#: vms-alpha.c:5992 #, c-format msgid " compile date : %.17s\n" msgstr " дата Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ : %.17s\n" -#: vms-alpha.c:5817 +#: vms-alpha.c:5997 #, c-format msgid "Language Processor Name\n" msgstr "Ðазва обробника мови\n" -#: vms-alpha.c:5818 +#: vms-alpha.c:5998 #, c-format msgid " language name: %.*s\n" msgstr " назва мови : %.*s\n" -#: vms-alpha.c:5822 +#: vms-alpha.c:6002 #, c-format msgid "Source Files Header\n" msgstr "Заголовок файлів коду\n" -#: vms-alpha.c:5823 +#: vms-alpha.c:6003 #, c-format msgid " file: %.*s\n" msgstr " файл: %.*s\n" -#: vms-alpha.c:5827 +#: vms-alpha.c:6007 #, c-format msgid "Title Text Header\n" msgstr "Заголовок титульного текÑту\n" -#: vms-alpha.c:5828 +#: vms-alpha.c:6008 #, c-format msgid " title: %.*s\n" msgstr " заголовок: %.*s\n" -#: vms-alpha.c:5832 +#: vms-alpha.c:6012 #, c-format msgid "Copyright Header\n" msgstr "Заголовок авторÑьких прав\n" -#: vms-alpha.c:5833 +#: vms-alpha.c:6013 #, c-format msgid " copyright: %.*s\n" msgstr " авторÑькі права: %.*s\n" -#: vms-alpha.c:5837 +#: vms-alpha.c:6017 #, c-format msgid "unhandled emh subtype %u\n" msgstr "непридатний до обробки підтип emh, %u\n" -#: vms-alpha.c:5847 +#: vms-alpha.c:6027 #, c-format msgid " EEOM (len=%u):\n" msgstr " EEOM (довж=%u):\n" -#: vms-alpha.c:5852 +#: vms-alpha.c:6032 #, c-format msgid " Error: The length is less than the length of an EEOM record\n" msgstr " Помилка: довжина Ñ” меншою за довжину запиÑу EEOM\n" -#: vms-alpha.c:5856 +#: vms-alpha.c:6036 #, c-format msgid " number of cond linkage pairs: %u\n" msgstr " кількіÑÑ‚ÑŒ пар умовного компонуваннÑ: %u\n" -#: vms-alpha.c:5858 +#: vms-alpha.c:6038 #, c-format msgid " completion code: %u\n" msgstr " код завершеннÑ: %u\n" -#: vms-alpha.c:5862 +#: vms-alpha.c:6042 #, c-format msgid " transfer addr flags: 0x%02x\n" msgstr " прапорці Ð¿ÐµÑ€ÐµÐ´Ð°Ð²Ð°Ð½Ð½Ñ Ð°Ð´Ñ€ÐµÑи: 0x%02x\n" -#: vms-alpha.c:5863 +#: vms-alpha.c:6043 #, c-format msgid " transfer addr psect: %u\n" msgstr " psect Ð¿ÐµÑ€ÐµÐ´Ð°Ð²Ð°Ð½Ð½Ñ Ð°Ð´Ñ€ÐµÑи: %u\n" -#: vms-alpha.c:5865 +#: vms-alpha.c:6045 #, c-format msgid " transfer address : 0x%08x\n" msgstr " адреÑа перенеÑÐµÐ½Ð½Ñ : 0x%08x\n" -#: vms-alpha.c:5874 +#: vms-alpha.c:6054 msgid " WEAK" msgstr " WEAK" -#: vms-alpha.c:5876 +#: vms-alpha.c:6056 msgid " DEF" msgstr " DEF" -#: vms-alpha.c:5878 +#: vms-alpha.c:6058 msgid " UNI" msgstr " UNI" -#: vms-alpha.c:5880 vms-alpha.c:5901 +#: vms-alpha.c:6060 vms-alpha.c:6081 msgid " REL" msgstr " REL" -#: vms-alpha.c:5882 +#: vms-alpha.c:6062 msgid " COMM" msgstr " COMM" -#: vms-alpha.c:5884 +#: vms-alpha.c:6064 msgid " VECEP" msgstr " VECEP" -#: vms-alpha.c:5886 +#: vms-alpha.c:6066 msgid " NORM" msgstr " NORM" -#: vms-alpha.c:5888 +#: vms-alpha.c:6068 msgid " QVAL" msgstr " QVAL" -#: vms-alpha.c:5895 +#: vms-alpha.c:6075 msgid " PIC" msgstr " PIC" -#: vms-alpha.c:5897 +#: vms-alpha.c:6077 msgid " LIB" msgstr " LIB" -#: vms-alpha.c:5899 +#: vms-alpha.c:6079 msgid " OVR" msgstr " OVR" -#: vms-alpha.c:5903 +#: vms-alpha.c:6083 msgid " GBL" msgstr " GBL" -#: vms-alpha.c:5905 +#: vms-alpha.c:6085 msgid " SHR" msgstr " SHR" -#: vms-alpha.c:5907 +#: vms-alpha.c:6087 msgid " EXE" msgstr " EXE" -#: vms-alpha.c:5909 +#: vms-alpha.c:6089 msgid " RD" msgstr " RD" -#: vms-alpha.c:5911 +#: vms-alpha.c:6091 msgid " WRT" msgstr " WRT" -#: vms-alpha.c:5913 +#: vms-alpha.c:6093 msgid " VEC" msgstr " VEC" -#: vms-alpha.c:5915 +#: vms-alpha.c:6095 msgid " NOMOD" msgstr " NOMOD" -#: vms-alpha.c:5917 +#: vms-alpha.c:6097 msgid " COM" msgstr " COM" -#: vms-alpha.c:5919 +#: vms-alpha.c:6099 msgid " 64B" msgstr " 64B" -#: vms-alpha.c:5928 +#: vms-alpha.c:6108 #, c-format msgid " EGSD (len=%u):\n" msgstr " EGSD (довж=%u):\n" -#: vms-alpha.c:5941 +#: vms-alpha.c:6121 #, c-format msgid " EGSD entry %2u (type: %u, len: %u): " msgstr " Ð·Ð°Ð¿Ð¸Ñ EGSD %2u (тип: %u, довж: %u): " -#: vms-alpha.c:5947 vms-alpha.c:6198 +#: vms-alpha.c:6127 vms-alpha.c:6378 #, c-format msgid " Error: length larger than remaining space in record\n" msgstr " Помилка: довжина перевищує міÑце, Ñке лишилоÑÑ Ñƒ запиÑÑ–\n" -#: vms-alpha.c:5959 +#: vms-alpha.c:6139 #, c-format msgid "PSC - Program section definition\n" msgstr "PSC — Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ програми\n" -#: vms-alpha.c:5960 vms-alpha.c:5977 +#: vms-alpha.c:6140 vms-alpha.c:6157 #, c-format msgid " alignment : 2**%u\n" msgstr " вирівнюваннÑ: 2**%u\n" -#: vms-alpha.c:5961 vms-alpha.c:5978 +#: vms-alpha.c:6141 vms-alpha.c:6158 #, c-format msgid " flags : 0x%04x" msgstr " прапорці : 0x%04x" -#: vms-alpha.c:5965 +#: vms-alpha.c:6145 #, c-format msgid " alloc (len): %u (0x%08x)\n" msgstr " alloc (довжина): %u (0x%08x)\n" -#: vms-alpha.c:5966 vms-alpha.c:6023 vms-alpha.c:6072 +#: vms-alpha.c:6146 vms-alpha.c:6203 vms-alpha.c:6252 #, c-format msgid " name : %.*s\n" msgstr " назва : %.*s\n" -#: vms-alpha.c:5976 +#: vms-alpha.c:6156 #, c-format msgid "SPSC - Shared Image Program section def\n" msgstr "SPSC — Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð½Ð¾Ð³Ð¾ розділу Ñпільного образу\n" -#: vms-alpha.c:5982 +#: vms-alpha.c:6162 #, c-format msgid " alloc (len) : %u (0x%08x)\n" msgstr " alloc (довжина): %u (0x%08x)\n" -#: vms-alpha.c:5983 +#: vms-alpha.c:6163 #, c-format msgid " image offset : 0x%08x\n" msgstr " відÑтуп образу: 0x%08x\n" -#: vms-alpha.c:5985 +#: vms-alpha.c:6165 #, c-format msgid " symvec offset : 0x%08x\n" msgstr " зÑув symvec : 0x%08x\n" -#: vms-alpha.c:5987 +#: vms-alpha.c:6167 #, c-format msgid " name : %.*s\n" msgstr " назва : %.*s\n" -#: vms-alpha.c:6000 +#: vms-alpha.c:6180 #, c-format msgid "SYM - Global symbol definition\n" msgstr "SYM — Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¸Ñ… Ñимволів\n" -#: vms-alpha.c:6001 vms-alpha.c:6061 vms-alpha.c:6082 vms-alpha.c:6101 +#: vms-alpha.c:6181 vms-alpha.c:6241 vms-alpha.c:6262 vms-alpha.c:6281 #, c-format msgid " flags: 0x%04x" msgstr " прапорці: 0x%04x" -#: vms-alpha.c:6004 +#: vms-alpha.c:6184 #, c-format msgid " psect offset: 0x%08x\n" msgstr " відÑтуп psect: 0x%08x\n" -#: vms-alpha.c:6008 +#: vms-alpha.c:6188 #, c-format msgid " code address: 0x%08x\n" msgstr " адреÑа коду: 0x%08x\n" -#: vms-alpha.c:6010 +#: vms-alpha.c:6190 #, c-format msgid " psect index for entry point : %u\n" msgstr " Ñ–Ð½Ð´ÐµÐºÑ psect Ð´Ð»Ñ Ñ‚Ð¾Ñ‡ÐºÐ¸ входженнÑ: %u\n" -#: vms-alpha.c:6013 vms-alpha.c:6089 vms-alpha.c:6108 +#: vms-alpha.c:6193 vms-alpha.c:6269 vms-alpha.c:6288 #, c-format msgid " psect index : %u\n" msgstr " Ñ–Ð½Ð´ÐµÐºÑ psect: %u\n" -#: vms-alpha.c:6015 vms-alpha.c:6091 vms-alpha.c:6110 +#: vms-alpha.c:6195 vms-alpha.c:6271 vms-alpha.c:6290 #, c-format msgid " name : %.*s\n" msgstr " назва : %.*s\n" -#: vms-alpha.c:6022 +#: vms-alpha.c:6202 #, c-format msgid "SYM - Global symbol reference\n" msgstr "SYM — поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° загальні Ñимволи\n" -#: vms-alpha.c:6034 +#: vms-alpha.c:6214 #, c-format msgid "IDC - Ident Consistency check\n" msgstr "IDC — перевірка коректноÑÑ‚Ñ– ідентифікаторів\n" -#: vms-alpha.c:6035 +#: vms-alpha.c:6215 #, c-format msgid " flags : 0x%08x" msgstr " прапорці : 0x%08x" -#: vms-alpha.c:6039 +#: vms-alpha.c:6219 #, c-format msgid " id match : %x\n" msgstr " ід. відповідноÑÑ‚Ñ–: %x\n" -#: vms-alpha.c:6041 +#: vms-alpha.c:6221 #, c-format msgid " error severity: %x\n" msgstr " критичніÑÑ‚ÑŒ помилки: %x\n" -#: vms-alpha.c:6044 +#: vms-alpha.c:6224 #, c-format msgid " entity name : %.*s\n" msgstr " назва елемента: %.*s\n" -#: vms-alpha.c:6046 +#: vms-alpha.c:6226 #, c-format msgid " object name : %.*s\n" msgstr " назва об’єкта : %.*s\n" -#: vms-alpha.c:6049 +#: vms-alpha.c:6229 #, c-format msgid " binary ident : 0x%08x\n" msgstr " двійк. ідент. : 0x%08x\n" -#: vms-alpha.c:6052 +#: vms-alpha.c:6232 #, c-format msgid " ascii ident : %.*s\n" msgstr " ідент. ascii : %.*s\n" -#: vms-alpha.c:6060 +#: vms-alpha.c:6240 #, c-format msgid "SYMG - Universal symbol definition\n" msgstr "SYMG — УніверÑальне Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñимволів\n" -#: vms-alpha.c:6064 +#: vms-alpha.c:6244 #, c-format msgid " symbol vector offset: 0x%08x\n" msgstr " зÑув вектора Ñимволів: 0x%08x\n" -#: vms-alpha.c:6066 +#: vms-alpha.c:6246 #, c-format msgid " entry point: 0x%08x\n" msgstr " точка входу: 0x%08x\n" -#: vms-alpha.c:6068 +#: vms-alpha.c:6248 #, c-format msgid " proc descr : 0x%08x\n" msgstr " деÑкр. процеÑу: 0x%08x\n" -#: vms-alpha.c:6070 +#: vms-alpha.c:6250 #, c-format msgid " psect index: %u\n" msgstr " Ñ–Ð½Ð´ÐµÐºÑ psect: %u\n" -#: vms-alpha.c:6081 +#: vms-alpha.c:6261 #, c-format msgid "SYMV - Vectored symbol definition\n" msgstr "SYMV — Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²ÐµÐºÑ‚Ð¾Ñ€Ð¸Ð·Ð¾Ð²Ð°Ð½Ð¾Ð³Ð¾ Ñимволу\n" -#: vms-alpha.c:6085 +#: vms-alpha.c:6265 #, c-format msgid " vector : 0x%08x\n" msgstr " вектор : 0x%08x\n" -#: vms-alpha.c:6087 vms-alpha.c:6106 +#: vms-alpha.c:6267 vms-alpha.c:6286 #, c-format msgid " psect offset: %u\n" msgstr " відÑтуп psect: %u\n" -#: vms-alpha.c:6100 +#: vms-alpha.c:6280 #, c-format msgid "SYMM - Global symbol definition with version\n" msgstr "SYMM — Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñимволу з верÑією\n" -#: vms-alpha.c:6104 +#: vms-alpha.c:6284 #, c-format msgid " version mask: 0x%08x\n" msgstr " маÑка верÑÑ–Ñ—: 0x%08x\n" -#: vms-alpha.c:6115 +#: vms-alpha.c:6295 #, c-format msgid "unhandled egsd entry type %u\n" msgstr "непридатний до обробки тип запиÑу egsd, %u\n" -#: vms-alpha.c:6150 +#: vms-alpha.c:6330 #, c-format msgid " linkage index: %u, replacement insn: 0x%08x\n" msgstr " Ñ–Ð½Ð´ÐµÐºÑ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ: %u, інÑтрукціÑ-замінник: 0x%08x\n" -#: vms-alpha.c:6154 +#: vms-alpha.c:6334 #, c-format msgid " psect idx 1: %u, offset 1: 0x%08x %08x\n" msgstr " інд. psect 1: %u, відÑтуп 1: 0x%08x %08x\n" -#: vms-alpha.c:6159 +#: vms-alpha.c:6339 #, c-format msgid " psect idx 2: %u, offset 2: 0x%08x %08x\n" msgstr " інд. psect 2: %u, відÑтуп 2: 0x%08x %08x\n" -#: vms-alpha.c:6165 +#: vms-alpha.c:6345 #, c-format msgid " psect idx 3: %u, offset 3: 0x%08x %08x\n" msgstr " інд. psect 3: %u, відÑтуп 3: 0x%08x %08x\n" -#: vms-alpha.c:6170 +#: vms-alpha.c:6350 #, c-format msgid " global name: %.*s\n" msgstr " загальна назва: %.*s\n" -#: vms-alpha.c:6181 +#: vms-alpha.c:6361 #, c-format msgid " %s (len=%u+%u):\n" msgstr " %s (довж=%u+%u):\n" -#: vms-alpha.c:6203 +#: vms-alpha.c:6383 #, c-format msgid " (type: %3u, size: 4+%3u): " msgstr " (тип: %3u, розмір: 4+%3u): " -#: vms-alpha.c:6207 +#: vms-alpha.c:6387 #, c-format msgid "STA_GBL (stack global) %.*s\n" msgstr "STA_GBL (загальний Ñтек) %.*s\n" -#: vms-alpha.c:6211 +#: vms-alpha.c:6391 #, c-format msgid "STA_LW (stack longword) 0x%08x\n" msgstr "STA_LW (Ñтек довгих Ñлів) 0x%08x\n" -#: vms-alpha.c:6215 +#: vms-alpha.c:6395 #, c-format msgid "STA_QW (stack quadword) 0x%08x %08x\n" msgstr "STA_QW (Ñтек четверних Ñлів) 0x%08x %08x\n" -#: vms-alpha.c:6220 +#: vms-alpha.c:6400 #, c-format msgid "STA_PQ (stack psect base + offset)\n" msgstr "STA_PQ (Ñтек оÑнови psect + зÑув)\n" -#: vms-alpha.c:6222 +#: vms-alpha.c:6402 #, c-format msgid " psect: %u, offset: 0x%08x %08x\n" msgstr " psect: %u, зÑув: 0x%08x %08x\n" -#: vms-alpha.c:6228 +#: vms-alpha.c:6408 #, c-format msgid "STA_LI (stack literal)\n" msgstr "STA_LI (Ñтек літералів)\n" -#: vms-alpha.c:6231 +#: vms-alpha.c:6411 #, c-format msgid "STA_MOD (stack module)\n" msgstr "STA_MOD (Ñтек модулів)\n" -#: vms-alpha.c:6234 +#: vms-alpha.c:6414 #, c-format msgid "STA_CKARG (compare procedure argument)\n" msgstr "STA_CKARG (аргумент процедури порівнÑннÑ)\n" -#: vms-alpha.c:6238 +#: vms-alpha.c:6418 #, c-format msgid "STO_B (store byte)\n" msgstr "STO_B (збережений байт)\n" -#: vms-alpha.c:6241 +#: vms-alpha.c:6421 #, c-format msgid "STO_W (store word)\n" msgstr "STO_W (збережене Ñлово)\n" -#: vms-alpha.c:6244 +#: vms-alpha.c:6424 #, c-format msgid "STO_LW (store longword)\n" msgstr "STO_LW (збережене longword)\n" -#: vms-alpha.c:6247 +#: vms-alpha.c:6427 #, c-format msgid "STO_QW (store quadword)\n" msgstr "STO_QW (збережене quadword)\n" -#: vms-alpha.c:6253 +#: vms-alpha.c:6433 #, c-format msgid "STO_IMMR (store immediate repeat) %u bytes\n" msgstr "STO_IMMR (збережене негайне повтореннÑ) %u байтів\n" -#: vms-alpha.c:6260 +#: vms-alpha.c:6440 #, c-format msgid "STO_GBL (store global) %.*s\n" msgstr "STO_GBL (загальне збереженнÑ) %.*s\n" -#: vms-alpha.c:6264 +#: vms-alpha.c:6444 #, c-format msgid "STO_CA (store code address) %.*s\n" msgstr "STO_CA (збережена адреÑа коду) %.*s\n" -#: vms-alpha.c:6268 +#: vms-alpha.c:6448 #, c-format msgid "STO_RB (store relative branch)\n" msgstr "STO_RB (збережене відноÑне відгалуженнÑ)\n" -#: vms-alpha.c:6271 +#: vms-alpha.c:6451 #, c-format msgid "STO_AB (store absolute branch)\n" msgstr "STO_AB (збережене абÑолютне відгалуженнÑ)\n" -#: vms-alpha.c:6274 +#: vms-alpha.c:6454 #, c-format msgid "STO_OFF (store offset to psect)\n" msgstr "STO_OFF (збережений зÑув щодо psect)\n" -#: vms-alpha.c:6280 +#: vms-alpha.c:6460 #, c-format msgid "STO_IMM (store immediate) %u bytes\n" msgstr "STO_IMM (негайне збереженнÑ) %u байт\n" -#: vms-alpha.c:6287 +#: vms-alpha.c:6467 #, c-format msgid "STO_GBL_LW (store global longword) %.*s\n" msgstr "STO_GBL_LW (збережене загальне longword) %.*s\n" -#: vms-alpha.c:6291 +#: vms-alpha.c:6471 #, c-format msgid "STO_OFF (store LP with procedure signature)\n" msgstr "STO_OFF (Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ LP з підпиÑом підпрограми)\n" -#: vms-alpha.c:6294 +#: vms-alpha.c:6474 #, c-format msgid "STO_BR_GBL (store branch global) *todo*\n" msgstr "STO_BR_GBL (збережене загальне відгалуженнÑ) *ще не реалізовано*\n" -#: vms-alpha.c:6297 +#: vms-alpha.c:6477 #, c-format msgid "STO_BR_PS (store branch psect + offset) *todo*\n" msgstr "STO_BR_PS (збережений psect Ð²Ñ–Ð´Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ + зÑув) *ще не реалізовано*\n" -#: vms-alpha.c:6301 +#: vms-alpha.c:6481 #, c-format msgid "OPR_NOP (no-operation)\n" msgstr "OPR_NOP (без операції)\n" -#: vms-alpha.c:6304 +#: vms-alpha.c:6484 #, c-format msgid "OPR_ADD (add)\n" msgstr "OPR_ADD (додаваннÑ)\n" -#: vms-alpha.c:6307 +#: vms-alpha.c:6487 #, c-format msgid "OPR_SUB (subtract)\n" msgstr "OPR_SUB (відніманнÑ)\n" -#: vms-alpha.c:6310 +#: vms-alpha.c:6490 #, c-format msgid "OPR_MUL (multiply)\n" msgstr "OPR_MUL (множеннÑ)\n" -#: vms-alpha.c:6313 +#: vms-alpha.c:6493 #, c-format msgid "OPR_DIV (divide)\n" msgstr "OPR_DIV (діленнÑ)\n" -#: vms-alpha.c:6316 +#: vms-alpha.c:6496 #, c-format msgid "OPR_AND (logical and)\n" msgstr "OPR_AND (логічне «І»)\n" -#: vms-alpha.c:6319 +#: vms-alpha.c:6499 #, c-format msgid "OPR_IOR (logical inclusive or)\n" msgstr "OPR_IOR (логічне включне «ÐБО»)\n" -#: vms-alpha.c:6322 +#: vms-alpha.c:6502 #, c-format msgid "OPR_EOR (logical exclusive or)\n" msgstr "OPR_EOR (логічне виключне «ÐБО»)\n" -#: vms-alpha.c:6325 +#: vms-alpha.c:6505 #, c-format msgid "OPR_NEG (negate)\n" msgstr "OPR_NEG (запереченнÑ)\n" -#: vms-alpha.c:6328 +#: vms-alpha.c:6508 #, c-format msgid "OPR_COM (complement)\n" msgstr "OPR_COM (доповненнÑ)\n" -#: vms-alpha.c:6331 +#: vms-alpha.c:6511 #, c-format msgid "OPR_INSV (insert field)\n" msgstr "OPR_INSV (вÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ð¾Ð»Ñ)\n" -#: vms-alpha.c:6334 +#: vms-alpha.c:6514 #, c-format msgid "OPR_ASH (arithmetic shift)\n" msgstr "OPR_ASH (арифметичний зÑув)\n" -#: vms-alpha.c:6337 +#: vms-alpha.c:6517 #, c-format msgid "OPR_USH (unsigned shift)\n" msgstr "OPR_USH (беззнаковий зÑув)\n" -#: vms-alpha.c:6340 +#: vms-alpha.c:6520 #, c-format msgid "OPR_ROT (rotate)\n" msgstr "OPR_ROT (циклічний зÑув)\n" -#: vms-alpha.c:6343 +#: vms-alpha.c:6523 #, c-format msgid "OPR_SEL (select)\n" msgstr "OPR_SEL (вибір)\n" -#: vms-alpha.c:6346 +#: vms-alpha.c:6526 #, c-format msgid "OPR_REDEF (redefine symbol to curr location)\n" msgstr "OPR_REDEF (Ð¿ÐµÑ€ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñимволу до поточної позиції)\n" -#: vms-alpha.c:6349 +#: vms-alpha.c:6529 #, c-format msgid "OPR_REDEF (define a literal)\n" msgstr "OPR_REDEF (Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð»Ñ–Ñ‚ÐµÑ€Ð°Ð»Ð°)\n" -#: vms-alpha.c:6353 +#: vms-alpha.c:6533 #, c-format msgid "STC_LP (store cond linkage pair)\n" msgstr "STC_LP (збережена пара умовного компонуваннÑ)\n" -#: vms-alpha.c:6357 +#: vms-alpha.c:6537 #, c-format msgid "STC_LP_PSB (store cond linkage pair + signature)\n" msgstr "STC_LP_PSB (збережена пара умовного ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ + підпиÑ)\n" -#: vms-alpha.c:6359 +#: vms-alpha.c:6539 #, c-format msgid " linkage index: %u, procedure: %.*s\n" msgstr " Ñ–Ð½Ð´ÐµÐºÑ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ: %u, процедура: %.*s\n" -#: vms-alpha.c:6362 +#: vms-alpha.c:6542 #, c-format msgid " signature: %.*s\n" msgstr " підпиÑ: %.*s\n" -#: vms-alpha.c:6365 +#: vms-alpha.c:6545 #, c-format msgid "STC_GBL (store cond global)\n" msgstr "STC_GBL (збережена загальна умова)\n" -#: vms-alpha.c:6367 +#: vms-alpha.c:6547 #, c-format msgid " linkage index: %u, global: %.*s\n" msgstr " Ñ–Ð½Ð´ÐµÐºÑ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ: %u, загальний: %.*s\n" -#: vms-alpha.c:6371 +#: vms-alpha.c:6551 #, c-format msgid "STC_GCA (store cond code address)\n" msgstr "STC_GCA (збережена адреÑа умовного коду)\n" -#: vms-alpha.c:6373 +#: vms-alpha.c:6553 #, c-format msgid " linkage index: %u, procedure name: %.*s\n" msgstr " Ñ–Ð½Ð´ÐµÐºÑ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ: %u, назва підпрограми: %.*s\n" -#: vms-alpha.c:6377 +#: vms-alpha.c:6557 #, c-format msgid "STC_PS (store cond psect + offset)\n" msgstr "STC_PS (збережений умовний psect + зÑув)\n" -#: vms-alpha.c:6380 +#: vms-alpha.c:6560 #, c-format msgid " linkage index: %u, psect: %u, offset: 0x%08x %08x\n" msgstr " Ñ–Ð½Ð´ÐµÐºÑ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ: %u, psect: %u, зÑув: 0x%08x %08x\n" -#: vms-alpha.c:6387 +#: vms-alpha.c:6567 #, c-format msgid "STC_NOP_GBL (store cond NOP at global addr)\n" msgstr "STC_NOP_GBL (збережений умовний NOP за загальною адреÑою)\n" -#: vms-alpha.c:6391 +#: vms-alpha.c:6571 #, c-format msgid "STC_NOP_PS (store cond NOP at psect + offset)\n" msgstr "STC_NOP_PS (збережений умовний NOP за psect + зÑув)\n" -#: vms-alpha.c:6395 +#: vms-alpha.c:6575 #, c-format msgid "STC_BSR_GBL (store cond BSR at global addr)\n" msgstr "STC_BSR_GBL (збережений умовний BSR за загальною адреÑою)\n" -#: vms-alpha.c:6399 +#: vms-alpha.c:6579 #, c-format msgid "STC_BSR_PS (store cond BSR at psect + offset)\n" msgstr "STC_BSR_PS (збережений умовний BSR за psect + зÑув)\n" -#: vms-alpha.c:6403 +#: vms-alpha.c:6583 #, c-format msgid "STC_LDA_GBL (store cond LDA at global addr)\n" msgstr "STC_LDA_GBL (збережений умовний LDA за загальною адреÑою)\n" -#: vms-alpha.c:6407 +#: vms-alpha.c:6587 #, c-format msgid "STC_LDA_PS (store cond LDA at psect + offset)\n" msgstr "STC_LDA_PS (збережена умовна LDA за psect + зÑув)\n" -#: vms-alpha.c:6411 +#: vms-alpha.c:6591 #, c-format msgid "STC_BOH_GBL (store cond BOH at global addr)\n" msgstr "STC_BOH_GBL (збережений умовний BOH за загальною адреÑою)\n" -#: vms-alpha.c:6415 +#: vms-alpha.c:6595 #, c-format msgid "STC_BOH_PS (store cond BOH at psect + offset)\n" msgstr "STC_BOH_PS (збережений умовний BOH за psect + зÑув)\n" -#: vms-alpha.c:6420 +#: vms-alpha.c:6600 #, c-format msgid "STC_NBH_GBL (store cond or hint at global addr)\n" msgstr "STC_NBH_GBL (збережена умова або вказівка за загальною адреÑою)\n" -#: vms-alpha.c:6424 +#: vms-alpha.c:6604 #, c-format msgid "STC_NBH_PS (store cond or hint at psect + offset)\n" msgstr "STC_NBH_PS (збережена умова або вказівка за psect + зÑув)\n" -#: vms-alpha.c:6428 +#: vms-alpha.c:6608 #, c-format msgid "CTL_SETRB (set relocation base)\n" msgstr "CTL_SETRB (вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¾Ñнови переÑуваннÑ)\n" -#: vms-alpha.c:6434 +#: vms-alpha.c:6614 #, c-format msgid "CTL_AUGRB (augment relocation base) %u\n" msgstr "CTL_AUGRB (Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ Ð¾Ñнови переÑуваннÑ) %u\n" -#: vms-alpha.c:6438 +#: vms-alpha.c:6618 #, c-format msgid "CTL_DFLOC (define location)\n" msgstr "CTL_DFLOC (визначити розташуваннÑ)\n" -#: vms-alpha.c:6441 +#: vms-alpha.c:6621 #, c-format msgid "CTL_STLOC (set location)\n" msgstr "CTL_STLOC (вказати розташуваннÑ)\n" -#: vms-alpha.c:6444 +#: vms-alpha.c:6624 #, c-format msgid "CTL_STKDL (stack defined location)\n" msgstr "CTL_STKDL (розташуваннÑ, визначене Ñтеком)\n" -#: vms-alpha.c:6447 vms-alpha.c:6871 vms-alpha.c:6997 +#: vms-alpha.c:6627 vms-alpha.c:7051 vms-alpha.c:7177 #, c-format msgid "*unhandled*\n" msgstr "*не оброблено*\n" -#: vms-alpha.c:6477 vms-alpha.c:6516 +#: vms-alpha.c:6657 vms-alpha.c:6696 #, c-format msgid "cannot read GST record length\n" msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ довжину запиÑу GST\n" #. Ill-formed. -#: vms-alpha.c:6498 +#: vms-alpha.c:6678 #, c-format msgid "cannot find EMH in first GST record\n" msgstr "не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ EMH у першому запиÑÑ– GST\n" -#: vms-alpha.c:6524 +#: vms-alpha.c:6704 #, c-format msgid "cannot read GST record header\n" msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ заголовок запиÑу GST\n" -#: vms-alpha.c:6537 +#: vms-alpha.c:6717 #, c-format msgid " corrupted GST\n" msgstr " пошкоджений GST\n" -#: vms-alpha.c:6545 +#: vms-alpha.c:6725 #, c-format msgid "cannot read GST record\n" msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ Ð·Ð°Ð¿Ð¸Ñ GST\n" -#: vms-alpha.c:6574 +#: vms-alpha.c:6754 #, c-format msgid " unhandled EOBJ record type %u\n" msgstr " непридатний до обробки тип запиÑу EOBJ, %u\n" -#: vms-alpha.c:6598 +#: vms-alpha.c:6778 #, c-format msgid " bitcount: %u, base addr: 0x%08x\n" msgstr " кількіÑÑ‚ÑŒ бітів: %u, базова адреÑа: 0x%08x\n" -#: vms-alpha.c:6612 +#: vms-alpha.c:6792 #, c-format msgid " bitmap: 0x%08x (count: %u):\n" msgstr " бітовий образ: 0x%08x (лічильник: %u):\n" -#: vms-alpha.c:6619 +#: vms-alpha.c:6799 #, c-format msgid " %08x" msgstr " %08x" -#: vms-alpha.c:6645 +#: vms-alpha.c:6825 #, c-format msgid " image %u (%u entries)\n" msgstr " образ %u (%u запиÑів)\n" -#: vms-alpha.c:6651 +#: vms-alpha.c:6831 #, c-format msgid " offset: 0x%08x, val: 0x%08x\n" msgstr " відÑтуп: 0x%08x, значеннÑ: 0x%08x\n" -#: vms-alpha.c:6673 +#: vms-alpha.c:6853 #, c-format msgid " image %u (%u entries), offsets:\n" msgstr " образ %u (%u запиÑів), відÑтупи:\n" -#: vms-alpha.c:6680 +#: vms-alpha.c:6860 #, c-format msgid " 0x%08x" msgstr " 0x%08x" #. 64 bits. -#: vms-alpha.c:6802 +#: vms-alpha.c:6982 #, c-format msgid "64 bits *unhandled*\n" msgstr "64 біти *не оброблÑєтьÑÑ*\n" -#: vms-alpha.c:6807 +#: vms-alpha.c:6987 #, c-format msgid "class: %u, dtype: %u, length: %u, pointer: 0x%08x\n" msgstr "клаÑ: %u, dtype: %u, довжина: %u, вказівник: 0x%08x\n" -#: vms-alpha.c:6818 +#: vms-alpha.c:6998 #, c-format msgid "non-contiguous array of %s\n" msgstr "розривний маÑив %s\n" -#: vms-alpha.c:6823 +#: vms-alpha.c:7003 #, c-format msgid "dimct: %u, aflags: 0x%02x, digits: %u, scale: %u\n" msgstr "dimct: %u, aflags: 0x%02x, цифр: %u, шкала: %u\n" -#: vms-alpha.c:6828 +#: vms-alpha.c:7008 #, c-format msgid "arsize: %u, a0: 0x%08x\n" msgstr "arsize: %u, a0: 0x%08x\n" -#: vms-alpha.c:6832 +#: vms-alpha.c:7012 #, c-format msgid "Strides:\n" msgstr "Кроки:\n" -#: vms-alpha.c:6842 +#: vms-alpha.c:7022 #, c-format msgid "Bounds:\n" msgstr "Межі:\n" -#: vms-alpha.c:6848 +#: vms-alpha.c:7028 #, c-format msgid "[%u]: Lower: %u, upper: %u\n" msgstr "[%u]: нижнÑ: %u, верхнÑ: %u\n" -#: vms-alpha.c:6860 +#: vms-alpha.c:7040 #, c-format msgid "unaligned bit-string of %s\n" msgstr "невирівнÑний бітовий Ñ€Ñдок %s\n" -#: vms-alpha.c:6865 +#: vms-alpha.c:7045 #, c-format msgid "base: %u, pos: %u\n" msgstr "оÑнова: %u, позиціÑ: %u\n" -#: vms-alpha.c:6886 +#: vms-alpha.c:7066 #, c-format msgid "vflags: 0x%02x, value: 0x%08x " msgstr "vflags: 0x%02x, значеннÑ: 0x%08x " -#: vms-alpha.c:6892 +#: vms-alpha.c:7072 #, c-format msgid "(no value)\n" msgstr "(нема значеннÑ)\n" -#: vms-alpha.c:6895 +#: vms-alpha.c:7075 #, c-format msgid "(not active)\n" msgstr "(неактивне)\n" -#: vms-alpha.c:6898 +#: vms-alpha.c:7078 #, c-format msgid "(not allocated)\n" msgstr "(не розміщено)\n" -#: vms-alpha.c:6901 +#: vms-alpha.c:7081 #, c-format msgid "(descriptor)\n" msgstr "(деÑкриптор)\n" -#: vms-alpha.c:6905 +#: vms-alpha.c:7085 #, c-format msgid "(trailing value)\n" msgstr "(хвоÑтове значеннÑ)\n" -#: vms-alpha.c:6908 +#: vms-alpha.c:7088 #, c-format msgid "(value spec follows)\n" msgstr "(далі ÑÐ¿ÐµÑ†Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ Ð·Ð½Ð°Ñ‡ÐµÐ½ÑŒ)\n" -#: vms-alpha.c:6911 +#: vms-alpha.c:7091 #, c-format msgid "(at bit offset %u)\n" msgstr "(за відÑтупом у бітах %u)\n" -#: vms-alpha.c:6915 +#: vms-alpha.c:7095 #, c-format msgid "(reg: %u, disp: %u, indir: %u, kind: " msgstr "(рег: %u, disp: %u, indir: %u, тип: " -#: vms-alpha.c:6922 +#: vms-alpha.c:7102 msgid "literal" msgstr "літерал" -#: vms-alpha.c:6925 +#: vms-alpha.c:7105 msgid "address" msgstr "адреÑа" -#: vms-alpha.c:6928 +#: vms-alpha.c:7108 msgid "desc" msgstr "деÑк" -#: vms-alpha.c:6931 +#: vms-alpha.c:7111 msgid "reg" msgstr "рег" -#: vms-alpha.c:6948 +#: vms-alpha.c:7128 #, c-format msgid "len: %2u, kind: %2u " msgstr "довж.: %2u, тип: %2u " -#: vms-alpha.c:6954 +#: vms-alpha.c:7134 #, c-format msgid "atomic, type=0x%02x %s\n" msgstr "атомарний, тип=0x%02x %s\n" -#: vms-alpha.c:6958 +#: vms-alpha.c:7138 #, c-format msgid "indirect, defined at 0x%08x\n" msgstr "опоÑередкований, визначено тут: 0x%08x\n" -#: vms-alpha.c:6962 +#: vms-alpha.c:7142 #, c-format msgid "typed pointer\n" msgstr "типізований вказівник\n" -#: vms-alpha.c:6966 +#: vms-alpha.c:7146 #, c-format msgid "pointer\n" msgstr "вказівник\n" -#: vms-alpha.c:6974 +#: vms-alpha.c:7154 #, c-format msgid "array, dim: %u, bitmap: " msgstr "маÑив, розмірніÑÑ‚ÑŒ: %u, бітова карта: " -#: vms-alpha.c:6981 +#: vms-alpha.c:7161 #, c-format msgid "array descriptor:\n" msgstr "деÑкриптор маÑиву:\n" -#: vms-alpha.c:6988 +#: vms-alpha.c:7168 #, c-format msgid "type spec for element:\n" msgstr "ÑÐ¿ÐµÑ†Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ Ñ‚Ð¸Ð¿Ñƒ елемента:\n" -#: vms-alpha.c:6990 +#: vms-alpha.c:7170 #, c-format msgid "type spec for subscript %u:\n" msgstr "ÑÐ¿ÐµÑ†Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ Ñ‚Ð¸Ð¿Ñƒ Ð´Ð»Ñ ÑпиÑку індекÑів %u:\n" -#: vms-alpha.c:7008 +#: vms-alpha.c:7188 #, c-format msgid "Debug symbol table:\n" msgstr "Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ Ñимволів зневаджуваннÑ:\n" -#: vms-alpha.c:7019 +#: vms-alpha.c:7199 #, c-format msgid "cannot read DST header\n" msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ заголовок DST\n" -#: vms-alpha.c:7025 +#: vms-alpha.c:7205 #, c-format msgid " type: %3u, len: %3u (at 0x%08x): " msgstr " тип: %3u, довжина: %3u (за 0x%08x): " -#: vms-alpha.c:7039 +#: vms-alpha.c:7219 #, c-format msgid "cannot read DST symbol\n" msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ Ñимвол DST\n" -#: vms-alpha.c:7082 +#: vms-alpha.c:7262 #, c-format msgid "standard data: %s\n" msgstr "Ñтандартні дані: %s\n" -#: vms-alpha.c:7085 vms-alpha.c:7173 +#: vms-alpha.c:7265 vms-alpha.c:7353 #, c-format msgid " name: %.*s\n" msgstr " назва: %.*s\n" -#: vms-alpha.c:7092 +#: vms-alpha.c:7272 #, c-format msgid "modbeg\n" msgstr "modbeg\n" -#: vms-alpha.c:7094 +#: vms-alpha.c:7274 #, c-format msgid " flags: %d, language: %u, major: %u, minor: %u\n" msgstr " прапорці: %d, мова: %u, Ñтарший: %u, молодший: %u\n" -#: vms-alpha.c:7100 vms-alpha.c:7374 +#: vms-alpha.c:7280 vms-alpha.c:7554 #, c-format msgid " module name: %.*s\n" msgstr " назва модулÑ: %.*s\n" -#: vms-alpha.c:7103 +#: vms-alpha.c:7283 #, c-format msgid " compiler : %.*s\n" msgstr " компілÑтор : %.*s\n" -#: vms-alpha.c:7108 +#: vms-alpha.c:7288 #, c-format msgid "modend\n" msgstr "modend\n" -#: vms-alpha.c:7115 +#: vms-alpha.c:7295 msgid "rtnbeg\n" msgstr "rtnbeg\n" -#: vms-alpha.c:7117 +#: vms-alpha.c:7297 #, c-format msgid " flags: %u, address: 0x%08x, pd-address: 0x%08x\n" msgstr " прапорці: %u, адреÑа: 0x%08x, pd-адреÑа: 0x%08x\n" -#: vms-alpha.c:7122 +#: vms-alpha.c:7302 #, c-format msgid " routine name: %.*s\n" msgstr " назва процедури: %.*s\n" -#: vms-alpha.c:7130 +#: vms-alpha.c:7310 #, c-format msgid "rtnend: size 0x%08x\n" msgstr "rtnend: розмір 0x%08x\n" -#: vms-alpha.c:7138 +#: vms-alpha.c:7318 #, c-format msgid "prolog: bkpt address 0x%08x\n" msgstr "пролог: адреÑа bkpt 0x%08x\n" -#: vms-alpha.c:7147 +#: vms-alpha.c:7327 #, c-format msgid "epilog: flags: %u, count: %u\n" msgstr "епілог: прапорці: %u, лічильник: %u\n" -#: vms-alpha.c:7157 +#: vms-alpha.c:7337 #, c-format msgid "blkbeg: address: 0x%08x, name: %.*s\n" msgstr "blkbeg: адреÑа: 0x%08x, назва: %.*s\n" -#: vms-alpha.c:7166 +#: vms-alpha.c:7346 #, c-format msgid "blkend: size: 0x%08x\n" msgstr "blkend: розмір: 0x%08x\n" -#: vms-alpha.c:7172 +#: vms-alpha.c:7352 #, c-format msgid "typspec (len: %u)\n" msgstr "typspec (довж.: %u)\n" -#: vms-alpha.c:7179 +#: vms-alpha.c:7359 #, c-format msgid "septyp, name: %.*s\n" msgstr "septyp, назва: %.*s\n" -#: vms-alpha.c:7188 +#: vms-alpha.c:7368 #, c-format msgid "recbeg: name: %.*s\n" msgstr "recbeg: назва: %.*s\n" -#: vms-alpha.c:7190 +#: vms-alpha.c:7370 #, c-format msgid " len: %u bits\n" msgstr " довжина: %u бітів\n" -#: vms-alpha.c:7195 +#: vms-alpha.c:7375 #, c-format msgid "recend\n" msgstr "recend\n" -#: vms-alpha.c:7199 +#: vms-alpha.c:7379 #, c-format msgid "enumbeg, len: %u, name: %.*s\n" msgstr "enumbeg, довжина: %u, назва: %.*s\n" -#: vms-alpha.c:7203 +#: vms-alpha.c:7383 #, c-format msgid "enumelt, name: %.*s\n" msgstr "enumelt, назва: %.*s\n" -#: vms-alpha.c:7207 +#: vms-alpha.c:7387 #, c-format msgid "enumend\n" msgstr "enumend\n" -#: vms-alpha.c:7212 +#: vms-alpha.c:7392 #, c-format msgid "label, name: %.*s\n" msgstr "мітка, назва: %.*s\n" -#: vms-alpha.c:7214 +#: vms-alpha.c:7394 #, c-format msgid " address: 0x%08x\n" msgstr " адреÑа: 0x%08x\n" -#: vms-alpha.c:7224 +#: vms-alpha.c:7404 #, c-format msgid "discontiguous range (nbr: %u)\n" msgstr "розривний діапазон (nbr: %u)\n" -#: vms-alpha.c:7227 +#: vms-alpha.c:7407 #, c-format msgid " address: 0x%08x, size: %u\n" msgstr " адреÑа: 0x%08x, розмір: %u\n" -#: vms-alpha.c:7237 +#: vms-alpha.c:7417 #, c-format msgid "line num (len: %u)\n" msgstr "номер Ñ€Ñдка (довжина: %u)\n" -#: vms-alpha.c:7254 +#: vms-alpha.c:7434 #, c-format msgid "delta_pc_w %u\n" msgstr "delta_pc_w %u\n" -#: vms-alpha.c:7261 +#: vms-alpha.c:7441 #, c-format msgid "incr_linum(b): +%u\n" msgstr "incr_linum(b): +%u\n" -#: vms-alpha.c:7267 +#: vms-alpha.c:7447 #, c-format msgid "incr_linum_w: +%u\n" msgstr "incr_linum_w: +%u\n" -#: vms-alpha.c:7273 +#: vms-alpha.c:7453 #, c-format msgid "incr_linum_l: +%u\n" msgstr "incr_linum_l: +%u\n" -#: vms-alpha.c:7279 +#: vms-alpha.c:7459 #, c-format msgid "set_line_num(w) %u\n" msgstr "set_line_num(w) %u\n" -#: vms-alpha.c:7284 +#: vms-alpha.c:7464 #, c-format msgid "set_line_num_b %u\n" msgstr "set_line_num_b %u\n" -#: vms-alpha.c:7289 +#: vms-alpha.c:7469 #, c-format msgid "set_line_num_l %u\n" msgstr "set_line_num_l %u\n" -#: vms-alpha.c:7294 +#: vms-alpha.c:7474 #, c-format msgid "set_abs_pc: 0x%08x\n" msgstr "set_abs_pc: 0x%08x\n" -#: vms-alpha.c:7298 +#: vms-alpha.c:7478 #, c-format msgid "delta_pc_l: +0x%08x\n" msgstr "delta_pc_l: +0x%08x\n" -#: vms-alpha.c:7303 +#: vms-alpha.c:7483 #, c-format msgid "term(b): 0x%02x" msgstr "term(b): 0x%02x" -#: vms-alpha.c:7305 +#: vms-alpha.c:7485 #, c-format msgid " pc: 0x%08x\n" msgstr " pc: 0x%08x\n" -#: vms-alpha.c:7310 +#: vms-alpha.c:7490 #, c-format msgid "term_w: 0x%04x" msgstr "term_w: 0x%04x" -#: vms-alpha.c:7312 +#: vms-alpha.c:7492 #, c-format msgid " pc: 0x%08x\n" msgstr " pc: 0x%08x\n" -#: vms-alpha.c:7318 +#: vms-alpha.c:7498 #, c-format msgid "delta pc +%-4d" msgstr "приріÑÑ‚ pc +%-4d" -#: vms-alpha.c:7322 +#: vms-alpha.c:7502 #, c-format msgid " pc: 0x%08x line: %5u\n" msgstr " pc: 0x%08x Ñ€Ñдок: %5u\n" -#: vms-alpha.c:7327 +#: vms-alpha.c:7507 #, c-format msgid " *unhandled* cmd %u\n" msgstr " *непридатна* команда %u\n" -#: vms-alpha.c:7342 +#: vms-alpha.c:7522 #, c-format msgid "source (len: %u)\n" msgstr "джерело (довжина: %u)\n" -#: vms-alpha.c:7357 +#: vms-alpha.c:7537 #, c-format msgid " declfile: len: %u, flags: %u, fileid: %u\n" msgstr " declfile: довжина: %u, прапорці: %u, ід. файла: %u\n" -#: vms-alpha.c:7362 +#: vms-alpha.c:7542 #, c-format msgid " rms: cdt: 0x%08x %08x, ebk: 0x%08x, ffb: 0x%04x, rfo: %u\n" msgstr " rms: cdt: 0x%08x %08x, ebk: 0x%08x, ffb: 0x%04x, rfo: %u\n" -#: vms-alpha.c:7371 +#: vms-alpha.c:7551 #, c-format msgid " filename : %.*s\n" msgstr " назва файла: %.*s\n" -#: vms-alpha.c:7380 +#: vms-alpha.c:7560 #, c-format msgid " setfile %u\n" msgstr " setfile %u\n" -#: vms-alpha.c:7385 vms-alpha.c:7390 +#: vms-alpha.c:7565 vms-alpha.c:7570 #, c-format msgid " setrec %u\n" msgstr " setrec %u\n" -#: vms-alpha.c:7395 vms-alpha.c:7400 +#: vms-alpha.c:7575 vms-alpha.c:7580 #, c-format msgid " setlnum %u\n" msgstr " setlnum %u\n" -#: vms-alpha.c:7405 vms-alpha.c:7410 +#: vms-alpha.c:7585 vms-alpha.c:7590 #, c-format msgid " deflines %u\n" msgstr " deflines %u\n" -#: vms-alpha.c:7414 +#: vms-alpha.c:7594 #, c-format msgid " formfeed\n" msgstr " formfeed\n" -#: vms-alpha.c:7418 +#: vms-alpha.c:7598 #, c-format msgid " *unhandled* cmd %u\n" msgstr " *непридатна* команда %u\n" -#: vms-alpha.c:7430 +#: vms-alpha.c:7610 #, c-format msgid "*unhandled* dst type %u\n" msgstr "*непридатний* тип призначеннÑ, %u\n" -#: vms-alpha.c:7462 +#: vms-alpha.c:7642 #, c-format msgid "cannot read EIHD\n" msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ EIHD\n" -#: vms-alpha.c:7466 +#: vms-alpha.c:7646 #, c-format msgid "EIHD: (size: %u, nbr blocks: %u)\n" msgstr "EIHD: (розмір: %u, кількіÑÑ‚ÑŒ блоків: %u)\n" -#: vms-alpha.c:7470 +#: vms-alpha.c:7650 #, c-format msgid " majorid: %u, minorid: %u\n" msgstr " majorid: %u, minorid: %u\n" -#: vms-alpha.c:7478 +#: vms-alpha.c:7658 msgid "executable" msgstr "виконуваний" -#: vms-alpha.c:7481 +#: vms-alpha.c:7661 msgid "linkable image" msgstr "компонований образ" -#: vms-alpha.c:7488 +#: vms-alpha.c:7668 #, c-format msgid " image type: %u (%s)" msgstr " тип образу: %u (%s)" -#: vms-alpha.c:7494 +#: vms-alpha.c:7674 msgid "native" msgstr "Ñтандартний" -#: vms-alpha.c:7497 +#: vms-alpha.c:7677 msgid "CLI" msgstr "CLI" -#: vms-alpha.c:7504 +#: vms-alpha.c:7684 #, c-format msgid ", subtype: %u (%s)\n" msgstr ", підтип: %u (%s)\n" -#: vms-alpha.c:7511 +#: vms-alpha.c:7691 #, c-format msgid " offsets: isd: %u, activ: %u, symdbg: %u, imgid: %u, patch: %u\n" msgstr " зÑуви: isd: %u, activ: %u, symdbg: %u, imgid: %u, patch: %u\n" -#: vms-alpha.c:7515 +#: vms-alpha.c:7695 #, c-format msgid " fixup info rva: " msgstr " дані щодо прив’Ñзки rva: " -#: vms-alpha.c:7517 +#: vms-alpha.c:7697 #, c-format msgid ", symbol vector rva: " msgstr ", вектор Ñимволів rva: " -#: vms-alpha.c:7520 +#: vms-alpha.c:7700 #, c-format msgid "" "\n" @@ -7255,474 +7609,474 @@ "\n" " відÑтуп маÑиву верÑÑ–Ñ—: %u\n" -#: vms-alpha.c:7525 +#: vms-alpha.c:7705 #, c-format msgid " img I/O count: %u, nbr channels: %u, req pri: %08x%08x\n" msgstr " лічильник введеннÑ-Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð¾Ð±Ñ€Ð°Ð·Ñƒ: %u, к-Ñ‚ÑŒ каналів: %u, пріоритетніÑÑ‚ÑŒ: %08x%08x\n" -#: vms-alpha.c:7531 +#: vms-alpha.c:7711 #, c-format msgid " linker flags: %08x:" msgstr " прапорці компонувальника: %08x:" -#: vms-alpha.c:7562 +#: vms-alpha.c:7742 #, c-format msgid " ident: 0x%08x, sysver: 0x%08x, match ctrl: %u, symvect_size: %u\n" msgstr " ident: 0x%08x, sysver: 0x%08x, match ctrl: %u, symvect_size: %u\n" -#: vms-alpha.c:7568 +#: vms-alpha.c:7748 #, c-format msgid " BPAGE: %u" msgstr " BPAGE: %u" -#: vms-alpha.c:7575 +#: vms-alpha.c:7755 #, c-format msgid ", ext fixup offset: %u, no_opt psect off: %u" msgstr ", зÑув розшир. прив’зÑки: %u, зÑув psect no_opt: %u" -#: vms-alpha.c:7578 +#: vms-alpha.c:7758 #, c-format msgid ", alias: %u\n" msgstr ", пÑевдонім: %u\n" -#: vms-alpha.c:7586 +#: vms-alpha.c:7766 #, c-format msgid "system version array information:\n" msgstr "маÑив даних щодо верÑÑ–Ñ— ÑиÑтеми:\n" -#: vms-alpha.c:7590 +#: vms-alpha.c:7770 #, c-format msgid "cannot read EIHVN header\n" msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ заголовок EIHVN\n" -#: vms-alpha.c:7600 +#: vms-alpha.c:7780 #, c-format msgid "cannot read EIHVN version\n" msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ верÑÑ–ÑŽ EIHVN\n" -#: vms-alpha.c:7603 +#: vms-alpha.c:7783 #, c-format msgid " %02u " msgstr " %02u " -#: vms-alpha.c:7607 +#: vms-alpha.c:7787 msgid "BASE_IMAGE " msgstr "BASE_IMAGE " -#: vms-alpha.c:7610 +#: vms-alpha.c:7790 msgid "MEMORY_MANAGEMENT" msgstr "MEMORY_MANAGEMENT" -#: vms-alpha.c:7613 +#: vms-alpha.c:7793 msgid "IO " msgstr "IO " -#: vms-alpha.c:7616 +#: vms-alpha.c:7796 msgid "FILES_VOLUMES " msgstr "FILES_VOLUMES " -#: vms-alpha.c:7619 +#: vms-alpha.c:7799 msgid "PROCESS_SCHED " msgstr "PROCESS_SCHED " -#: vms-alpha.c:7622 +#: vms-alpha.c:7802 msgid "SYSGEN " msgstr "SYSGEN " -#: vms-alpha.c:7625 +#: vms-alpha.c:7805 msgid "CLUSTERS_LOCKMGR " msgstr "CLUSTERS_LOCKMGR " -#: vms-alpha.c:7628 +#: vms-alpha.c:7808 msgid "LOGICAL_NAMES " msgstr "LOGICAL_NAMES " -#: vms-alpha.c:7631 +#: vms-alpha.c:7811 msgid "SECURITY " msgstr "SECURITY " -#: vms-alpha.c:7634 +#: vms-alpha.c:7814 msgid "IMAGE_ACTIVATOR " msgstr "IMAGE_ACTIVATOR " -#: vms-alpha.c:7637 +#: vms-alpha.c:7817 msgid "NETWORKS " msgstr "NETWORKS " -#: vms-alpha.c:7640 +#: vms-alpha.c:7820 msgid "COUNTERS " msgstr "COUNTERS " -#: vms-alpha.c:7643 +#: vms-alpha.c:7823 msgid "STABLE " msgstr "STABLE " -#: vms-alpha.c:7646 +#: vms-alpha.c:7826 msgid "MISC " msgstr "MISC " -#: vms-alpha.c:7649 +#: vms-alpha.c:7829 msgid "CPU " msgstr "CPU " -#: vms-alpha.c:7652 +#: vms-alpha.c:7832 msgid "VOLATILE " msgstr "VOLATILE " -#: vms-alpha.c:7655 +#: vms-alpha.c:7835 msgid "SHELL " msgstr "SHELL " -#: vms-alpha.c:7658 +#: vms-alpha.c:7838 msgid "POSIX " msgstr "POSIX " -#: vms-alpha.c:7661 +#: vms-alpha.c:7841 msgid "MULTI_PROCESSING " msgstr "MULTI_PROCESSING " -#: vms-alpha.c:7664 +#: vms-alpha.c:7844 msgid "GALAXY " msgstr "GALAXY " -#: vms-alpha.c:7667 +#: vms-alpha.c:7847 msgid "*unknown* " msgstr "*невідомо* " -#: vms-alpha.c:7683 vms-alpha.c:7958 +#: vms-alpha.c:7863 vms-alpha.c:8137 #, c-format msgid "cannot read EIHA\n" msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ EIHA\n" -#: vms-alpha.c:7686 +#: vms-alpha.c:7866 #, c-format msgid "Image activation: (size=%u)\n" msgstr "ÐÐºÑ‚Ð¸Ð²Ð°Ñ†Ñ–Ñ Ð¾Ð±Ñ€Ð°Ð·Ñƒ: (розмір=%u)\n" -#: vms-alpha.c:7689 +#: vms-alpha.c:7869 #, c-format msgid " First address : 0x%08x 0x%08x\n" msgstr " Перша адреÑа: 0x%08x 0x%08x\n" -#: vms-alpha.c:7693 +#: vms-alpha.c:7873 #, c-format msgid " Second address: 0x%08x 0x%08x\n" msgstr " Друга адреÑа: 0x%08x 0x%08x\n" -#: vms-alpha.c:7697 +#: vms-alpha.c:7877 #, c-format msgid " Third address : 0x%08x 0x%08x\n" msgstr " Ð¢Ñ€ÐµÑ‚Ñ Ð°Ð´Ñ€ÐµÑа: 0x%08x 0x%08x\n" -#: vms-alpha.c:7701 +#: vms-alpha.c:7881 #, c-format msgid " Fourth address: 0x%08x 0x%08x\n" msgstr " Четверта адреÑа: 0x%08x 0x%08x\n" -#: vms-alpha.c:7705 +#: vms-alpha.c:7885 #, c-format msgid " Shared image : 0x%08x 0x%08x\n" msgstr " Спільний образ: 0x%08x 0x%08x\n" -#: vms-alpha.c:7716 +#: vms-alpha.c:7896 #, c-format msgid "cannot read EIHI\n" msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ EIHI\n" -#: vms-alpha.c:7720 +#: vms-alpha.c:7900 #, c-format msgid "Image identification: (major: %u, minor: %u)\n" msgstr "Ð†Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ Ð¾Ð±Ñ€Ð°Ð·Ñƒ: (Ñтарший: %u, молодший: %u)\n" -#: vms-alpha.c:7723 +#: vms-alpha.c:7903 #, c-format msgid " image name : %.*s\n" msgstr " назва образу : %.*s\n" -#: vms-alpha.c:7725 +#: vms-alpha.c:7905 #, c-format msgid " link time : %s\n" msgstr " Ñ‡Ð°Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ : %s\n" -#: vms-alpha.c:7727 +#: vms-alpha.c:7907 #, c-format msgid " image ident : %.*s\n" msgstr " ід. образу : %.*s\n" -#: vms-alpha.c:7729 +#: vms-alpha.c:7909 #, c-format msgid " linker ident : %.*s\n" msgstr " ід. компонувальника: %.*s\n" -#: vms-alpha.c:7731 +#: vms-alpha.c:7911 #, c-format msgid " image build ident: %.*s\n" msgstr " ідентифікатор Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ Ð¾Ð±Ñ€Ð°Ð·Ñƒ: %.*s\n" -#: vms-alpha.c:7741 +#: vms-alpha.c:7921 #, c-format msgid "cannot read EIHS\n" msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ EIHS\n" -#: vms-alpha.c:7745 +#: vms-alpha.c:7925 #, c-format msgid "Image symbol & debug table: (major: %u, minor: %u)\n" msgstr "Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ Ñимволів Ñ– діагноÑтики образу (оÑновна: %u, модифікаціÑ: %u)\n" -#: vms-alpha.c:7751 +#: vms-alpha.c:7931 #, c-format msgid " debug symbol table : vbn: %u, size: %u (0x%x)\n" msgstr " Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ Ð´Ñ–Ð°Ð³Ð½Ð¾Ñтичних Ñимволів: vbn: %u, розмір: %u (0x%x)\n" -#: vms-alpha.c:7756 +#: vms-alpha.c:7936 #, c-format msgid " global symbol table: vbn: %u, records: %u\n" msgstr " Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¸Ñ… Ñимволів: vbn: %u, запиÑів: %u\n" -#: vms-alpha.c:7761 +#: vms-alpha.c:7941 #, c-format msgid " debug module table : vbn: %u, size: %u\n" msgstr " Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ Ð´Ñ–Ð°Ð³Ð½Ð¾Ñтики модулів: vbn: %u, розмір: %u\n" -#: vms-alpha.c:7774 +#: vms-alpha.c:7954 #, c-format msgid "cannot read EISD\n" msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ EISD\n" -#: vms-alpha.c:7785 +#: vms-alpha.c:7965 #, c-format msgid "Image section descriptor: (major: %u, minor: %u, size: %u, offset: %u)\n" msgstr "ДеÑкриптор розділу образу: (оÑновна: %u, модифікаціÑ: %u, розмір: %u, відÑтуп: %u)\n" -#: vms-alpha.c:7793 +#: vms-alpha.c:7973 #, c-format msgid " section: base: 0x%08x%08x size: 0x%08x\n" msgstr " розділ: оÑнова: 0x%08x%08x розмір: 0x%08x\n" -#: vms-alpha.c:7798 +#: vms-alpha.c:7978 #, c-format msgid " flags: 0x%04x" msgstr " прапорці: 0x%04x" -#: vms-alpha.c:7836 +#: vms-alpha.c:8016 #, c-format msgid " vbn: %u, pfc: %u, matchctl: %u type: %u (" msgstr " vbn: %u, pfc: %u, matchctl: %u тип: %u (" -#: vms-alpha.c:7842 +#: vms-alpha.c:8022 msgid "NORMAL" msgstr "NORMAL" -#: vms-alpha.c:7845 +#: vms-alpha.c:8025 msgid "SHRFXD" msgstr "SHRFXD" -#: vms-alpha.c:7848 +#: vms-alpha.c:8028 msgid "PRVFXD" msgstr "PRVFXD" -#: vms-alpha.c:7851 +#: vms-alpha.c:8031 msgid "SHRPIC" msgstr "SHRPIC" -#: vms-alpha.c:7854 +#: vms-alpha.c:8034 msgid "PRVPIC" msgstr "PRVPIC" -#: vms-alpha.c:7857 +#: vms-alpha.c:8037 msgid "USRSTACK" msgstr "USRSTACK" -#: vms-alpha.c:7863 +#: vms-alpha.c:8043 msgid ")\n" msgstr ")\n" -#: vms-alpha.c:7866 +#: vms-alpha.c:8046 #, c-format msgid " ident: 0x%08x, name: %.*s\n" msgstr " ідентифікатор: 0x%08x, назва: %.*s\n" -#: vms-alpha.c:7876 +#: vms-alpha.c:8056 #, c-format msgid "cannot read DMT\n" msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ DMT\n" -#: vms-alpha.c:7880 +#: vms-alpha.c:8060 #, c-format msgid "Debug module table:\n" msgstr "Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ Ð´Ñ–Ð°Ð³Ð½Ð¾Ñтичних Ñимволів:\n" -#: vms-alpha.c:7889 +#: vms-alpha.c:8069 #, c-format msgid "cannot read DMT header\n" msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ заголовок DMT\n" -#: vms-alpha.c:7895 +#: vms-alpha.c:8075 #, c-format msgid " module offset: 0x%08x, size: 0x%08x, (%u psects)\n" msgstr " відÑтуп модулÑ: 0x%08x, розмір: 0x%08x, (%u psect)\n" -#: vms-alpha.c:7905 +#: vms-alpha.c:8085 #, c-format msgid "cannot read DMT psect\n" msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ psect DMT\n" -#: vms-alpha.c:7909 +#: vms-alpha.c:8089 #, c-format msgid " psect start: 0x%08x, length: %u\n" msgstr " початок psect: 0x%08x, довжина: %u\n" -#: vms-alpha.c:7922 +#: vms-alpha.c:8102 #, c-format msgid "cannot read DST\n" msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ DST\n" -#: vms-alpha.c:7932 +#: vms-alpha.c:8112 #, c-format msgid "cannot read GST\n" msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ GST\n" -#: vms-alpha.c:7936 +#: vms-alpha.c:8116 #, c-format msgid "Global symbol table:\n" msgstr "Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¸Ñ… Ñимволів:\n" -#: vms-alpha.c:7965 +#: vms-alpha.c:8143 #, c-format msgid "Image activator fixup: (major: %u, minor: %u)\n" msgstr "Прив’Ñзка адреÑи активатора образу: (оÑновна: %u, модифікаціÑ: %u)\n" -#: vms-alpha.c:7969 +#: vms-alpha.c:8147 #, c-format msgid " iaflink : 0x%08x %08x\n" msgstr " iaflink : 0x%08x %08x\n" -#: vms-alpha.c:7973 +#: vms-alpha.c:8151 #, c-format msgid " fixuplnk: 0x%08x %08x\n" msgstr " fixuplnk: 0x%08x %08x\n" -#: vms-alpha.c:7976 +#: vms-alpha.c:8154 #, c-format msgid " size : %u\n" msgstr " розмір: %u\n" -#: vms-alpha.c:7978 +#: vms-alpha.c:8156 #, c-format msgid " flags: 0x%08x\n" msgstr " прапорці: 0x%08x\n" -#: vms-alpha.c:7983 +#: vms-alpha.c:8161 #, c-format msgid " qrelfixoff: %5u, lrelfixoff: %5u\n" msgstr " qrelfixoff: %5u, lrelfixoff: %5u\n" -#: vms-alpha.c:7988 +#: vms-alpha.c:8166 #, c-format msgid " qdotadroff: %5u, ldotadroff: %5u\n" msgstr " qdotadroff: %5u, ldotadroff: %5u\n" -#: vms-alpha.c:7993 +#: vms-alpha.c:8171 #, c-format msgid " codeadroff: %5u, lpfixoff : %5u\n" msgstr " codeadroff: %5u, lpfixoff : %5u\n" -#: vms-alpha.c:7996 +#: vms-alpha.c:8174 #, c-format msgid " chgprtoff : %5u\n" msgstr " chgprtoff : %5u\n" -#: vms-alpha.c:8000 +#: vms-alpha.c:8178 #, c-format msgid " shlstoff : %5u, shrimgcnt : %5u\n" msgstr " shlstoff : %5u, shrimgcnt : %5u\n" -#: vms-alpha.c:8003 +#: vms-alpha.c:8181 #, c-format msgid " shlextra : %5u, permctx : %5u\n" msgstr " shlextra : %5u, permctx : %5u\n" -#: vms-alpha.c:8006 +#: vms-alpha.c:8184 #, c-format msgid " base_va : 0x%08x\n" msgstr " base_va : 0x%08x\n" -#: vms-alpha.c:8008 +#: vms-alpha.c:8186 #, c-format msgid " lppsbfixoff: %5u\n" msgstr " lppsbfixoff: %5u\n" -#: vms-alpha.c:8016 +#: vms-alpha.c:8194 #, c-format msgid " Shareable images:\n" msgstr " Образи Ñпільного викориÑтаннÑ:\n" -#: vms-alpha.c:8021 +#: vms-alpha.c:8199 #, c-format msgid " %u: size: %u, flags: 0x%02x, name: %.*s\n" msgstr " %u: розмір: %u, прапорці: 0x%02x, назва: %.*s\n" -#: vms-alpha.c:8028 +#: vms-alpha.c:8206 #, c-format msgid " quad-word relocation fixups:\n" msgstr " прив’Ñзки переÑувань у чотири Ñлова:\n" -#: vms-alpha.c:8033 +#: vms-alpha.c:8211 #, c-format msgid " long-word relocation fixups:\n" msgstr " прив’Ñзки переÑувань у довге Ñлово:\n" -#: vms-alpha.c:8038 +#: vms-alpha.c:8216 #, c-format msgid " quad-word .address reference fixups:\n" msgstr " прив’Ñзки поÑилань .address у чотири Ñлова:\n" -#: vms-alpha.c:8043 +#: vms-alpha.c:8221 #, c-format msgid " long-word .address reference fixups:\n" msgstr " прив’Ñзки поÑилань .address у довге Ñлово:\n" -#: vms-alpha.c:8048 +#: vms-alpha.c:8226 #, c-format msgid " Code Address Reference Fixups:\n" msgstr " Прив’Ñзки Ð°Ð´Ñ€ÐµÑ ÐºÐ¾Ð´Ñƒ:\n" -#: vms-alpha.c:8053 +#: vms-alpha.c:8231 #, c-format msgid " Linkage Pairs Reference Fixups:\n" msgstr " Прив’Ñзки поÑилань на пари компонуваннÑ:\n" -#: vms-alpha.c:8062 +#: vms-alpha.c:8240 #, c-format msgid " Change Protection (%u entries):\n" msgstr " Зміна захиÑту (%u запиÑи):\n" -#: vms-alpha.c:8068 +#: vms-alpha.c:8246 #, c-format msgid " base: 0x%08x %08x, size: 0x%08x, prot: 0x%08x " msgstr " оÑн.: 0x%08x %08x, розм: 0x%08x, зах.: 0x%08x " #. FIXME: we do not yet support relocatable link. It is not obvious #. how to do it for debug infos. -#: vms-alpha.c:8908 +#: vms-alpha.c:9123 msgid "%P: relocatable link is not supported\n" msgstr "%P: підтримки ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ð· можливіÑÑ‚ÑŽ переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ðµ передбачено\n" -#: vms-alpha.c:8979 +#: vms-alpha.c:9194 #, c-format msgid "%P: multiple entry points: in modules %pB and %pB\n" msgstr "%P: декілька точок входженнÑ: у модулÑÑ… %pB Ñ– %pB\n" -#: vms-lib.c:1445 +#: vms-lib.c:1525 #, c-format msgid "could not open shared image '%s' from '%s'" msgstr "не вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ образ Ñпільного викориÑÑ‚Ð°Ð½Ð½Ñ Â«%s» з «%s»" -#: vms-misc.c:361 +#: vms-misc.c:367 msgid "_bfd_vms_output_counted called with zero bytes" msgstr "_bfd_vms_output_counted викликано Ð´Ð»Ñ Ð½ÑƒÐ»ÑŒÐ¾Ð²Ð¾Ñ— кількоÑÑ‚Ñ– байтів" -#: vms-misc.c:366 +#: vms-misc.c:372 msgid "_bfd_vms_output_counted called with too many bytes" msgstr "_bfd_vms_output_counted викликано Ð´Ð»Ñ Ð·Ð°Ð½Ð°Ð´Ñ‚Ð¾ великої кількоÑÑ‚Ñ– байтів" @@ -7736,172 +8090,209 @@ msgid "%pB: dynamic object with no .loader section" msgstr "%pB: динамічний об’єкт без розділу .loader" -#: xcofflink.c:1413 +#: xcofflink.c:1417 #, c-format msgid "%pB: `%s' has line numbers but no enclosing section" msgstr "%pB: «%s» міÑтить номери Ñ€Ñдків, але не міÑтить завершального розділу" -#: xcofflink.c:1466 +#: xcofflink.c:1470 #, c-format msgid "%pB: class %d symbol `%s' has no aux entries" msgstr "%pB: ÐºÐ»Ð°Ñ %d, Ñимвол «%s» не має допоміжних запиÑів" -#: xcofflink.c:1489 +#: xcofflink.c:1493 #, c-format msgid "%pB: symbol `%s' has unrecognized csect type %d" msgstr "%pB: Ñимвол «%s» належить до нерозпізнаного типу csect %d" -#: xcofflink.c:1502 +#: xcofflink.c:1506 #, c-format msgid "%pB: bad XTY_ER symbol `%s': class %d scnum %d scnlen %" msgstr "%pB: помилковий Ñимвол XTY_ER «%s»: ÐºÐ»Ð°Ñ %d, номер розділу %d, довжина розділу %" -#: xcofflink.c:1533 +#: xcofflink.c:1537 #, c-format msgid "%pB: XMC_TC0 symbol `%s' is class %d scnlen %" msgstr "%pB: Ñимвол XMC_TC0 «%s» Ñ” клаÑом %d, довжина розділу %" -#: xcofflink.c:1680 +#: xcofflink.c:1684 #, c-format msgid "%pB: csect `%s' not in enclosing section" msgstr "%pB: csect «%s» не у завершальному розділі" -#: xcofflink.c:1788 +#: xcofflink.c:1792 #, c-format msgid "%pB: misplaced XTY_LD `%s'" msgstr "%pB: помилкове Ñ€Ð¾Ð·Ñ‚Ð°ÑˆÑƒÐ²Ð°Ð½Ð½Ñ XTY_LD «%s»" -#: xcofflink.c:2109 +#: xcofflink.c:2113 #, c-format msgid "%pB: reloc %s:% not in csect" msgstr "%pB: переÑÑƒÐ²Ð°Ð½Ð½Ñ %s:% не у csect" -#: xcofflink.c:3196 +#: xcofflink.c:3193 #, c-format msgid "%s: no such symbol" msgstr "%s: немає такого Ñимволу" -#: xcofflink.c:3301 +#: xcofflink.c:3298 #, c-format msgid "warning: attempt to export undefined symbol `%s'" msgstr "попередженнÑ: Ñпроба екÑÐ¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð½ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ð³Ð¾ Ñимволу «%s»" -#: xcofflink.c:3680 +#: xcofflink.c:3677 msgid "error: undefined symbol __rtinit" msgstr "помилка: невизначений Ñимвол __rtinit" -#: xcofflink.c:4060 +#: xcofflink.c:4055 #, c-format msgid "%pB: loader reloc in unrecognized section `%s'" msgstr "%pB: переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÑƒÐ²Ð°Ñ‡Ð° у нерозпізнаному розділі «%s»" -#: xcofflink.c:4072 +#: xcofflink.c:4067 #, c-format msgid "%pB: `%s' in loader reloc but not loader sym" msgstr "%pB: «%s» у переÑуванні завантажувача, але не у Ñимволах завантаженнÑ" -#: xcofflink.c:4089 +#: xcofflink.c:4084 #, c-format msgid "%pB: loader reloc in read-only section %pA" msgstr "%pB: переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÑƒÐ²Ð°Ñ‡Ð° у розділі, призначеному лише Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ, %pA" -#: xcofflink.c:5113 +#: xcofflink.c:5112 #, c-format msgid "TOC overflow: %# > 0x10000; try -mminimal-toc when compiling" msgstr "ÐŸÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ TOC: %# > 0x10000; Ñпробуйте параметр -mminimal-toc під Ñ‡Ð°Ñ Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ" -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:5031 +#. Not fatal, this callback cannot fail. +#: elfnn-aarch64.c:2872 +#, c-format +msgid "unknown attribute for symbol `%s': 0x%02x" +msgstr "невідомий атрибути Ñимволу «%s»: 0x%02x" + +#: elfnn-aarch64.c:5246 #, c-format msgid "%pB: error: erratum 835769 stub out of range (input file too large)" msgstr "%pB: помилка: замінник Ð´Ð»Ñ Ð¾Ð±Ñ€Ð¾Ð±Ð½Ð¸ÐºÐ° помилки 835769 перебуває поза доÑтупним діапазоном (файл вхідних даних Ñ” надто великим)" -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:5112 +#: elfnn-aarch64.c:5338 #, c-format msgid "%pB: error: erratum 843419 stub out of range (input file too large)" msgstr "%pB: помилка: замінник Ð´Ð»Ñ Ð¾Ð±Ñ€Ð¾Ð±Ð½Ð¸ÐºÐ° помилки 843419 перебуває поза доÑтупним діапазоном (файл вхідних даних Ñ” надто великим)" -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:5641 +#: elfnn-aarch64.c:5351 +msgid "%pB: error: erratum 843419 immediate 0x%" +msgstr "%pB: помилка: проміжна адреÑа Ð´Ð»Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸ 843419 0x%" + +#: elfnn-aarch64.c:5899 #, c-format msgid "%pB: relocation %s against symbol `%s' which may bind externally can not be used when making a shared object; recompile with -fPIC" msgstr "%pB: переÑÑƒÐ²Ð°Ð½Ð½Ñ %s щодо Ñимволу «%s», Ñкий може прив’ÑзуватиÑÑ Ð·Ð·Ð¾Ð²Ð½Ñ–, не можна викориÑтовувати під Ñ‡Ð°Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° Ñпільного викориÑтаннÑ; повторно зберіть з -fPIC" -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:5732 +#: elfnn-aarch64.c:5990 #, c-format msgid "%pB: local symbol descriptor table be NULL when applying relocation %s against local symbol" msgstr "%pB: локальна Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ Ð´ÐµÑкрипторів Ñимволів Ñ” NULL під Ñ‡Ð°Ñ Ð·Ð°ÑтоÑÑƒÐ²Ð°Ð½Ð½Ñ Ð¿ÐµÑ€ÐµÑÑƒÐ²Ð°Ð½Ð½Ñ %s щодо локального Ñимволу" -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:6830 +#: elfnn-aarch64.c:6103 elfnn-aarch64.c:6140 +#, c-format +msgid "%pB: TLS relocation %s against undefined symbol `%s'" +msgstr "%pB: переÑÑƒÐ²Ð°Ð½Ð½Ñ TLS %s щодо невизначеного Ñлабкого Ñимволу «%s»" + +#: elfnn-aarch64.c:7125 msgid "too many GOT entries for -fpic, please recompile with -fPIC" msgstr "забагато запиÑів GOT Ð´Ð»Ñ -fpic. Будь лаÑка, зберіть повторно з -fPIC" -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:6858 +#: elfnn-aarch64.c:7153 msgid "one possible cause of this error is that the symbol is being referenced in the indicated code as if it had a larger alignment than was declared where it was defined" msgstr "однією із можливих причин цієї помилки Ñ” те, що поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° Ñимвол у коді виконуєтьÑÑ Ñ‚Ð°Ðº, наче Ñимвол має більше вирівнюваннÑ, ніж було оголошено там, де його було визначено" -#: /work/sources/binutils/branches//2.32/bfd/elfnn-aarch64.c:7443 +#: elfnn-aarch64.c:7720 #, c-format msgid "%pB: relocation %s against `%s' can not be used when making a shared object" msgstr "%pB: переÑÑƒÐ²Ð°Ð½Ð½Ñ %s щодо «%s», не можна викориÑтовувати під Ñ‡Ð°Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° Ñпільного викориÑтаннÑ" -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:182 -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:217 +#: elfnn-riscv.c:187 elfnn-riscv.c:222 #, c-format msgid "%pB: warning: RVE PLT generation not supported" msgstr "%pB: попередженнÑ: підтримки ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ PLT RVE не передбачено" -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2311 +#: elfnn-riscv.c:1977 +#, c-format +msgid "%pcrel_lo section symbol with an addend" +msgstr "Ñимвол розділу %pcrel_lo із доданком" + +#: elfnn-riscv.c:2198 +#, c-format +msgid "%%X%%P: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC\n" +msgstr "%%X%%P: переÑÑƒÐ²Ð°Ð½Ð½Ñ %s щодо «%s» не можна викориÑтовувати під Ñ‡Ð°Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° Ñпільного викориÑтаннÑ; повторно зберіть з -fPIC\n" + +#: elfnn-riscv.c:2208 +#, c-format +msgid "%%X%%P: unresolvable %s relocation against symbol `%s'\n" +msgstr "%%X%%P: нерозв’Ñзне переÑÑƒÐ²Ð°Ð½Ð½Ñ %s щодо Ñимволу «%s»\n" + +#: elfnn-riscv.c:2247 msgid "%X%P: internal error: out of range error\n" msgstr "%X%P: Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: вихід за межі діапазону\n" -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2315 +#: elfnn-riscv.c:2252 msgid "%X%P: internal error: unsupported relocation error\n" msgstr "%X%P: Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: непідтримувана помилка переÑуваннÑ\n" -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2325 +#: elfnn-riscv.c:2258 +msgid "dangerous relocation error" +msgstr "небезпечна помилка переÑуваннÑ" + +#: elfnn-riscv.c:2264 msgid "%X%P: internal error: unknown error\n" msgstr "%X%P: Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: невідома помилка\n" -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2711 +#: elfnn-riscv.c:2630 #, c-format -msgid "error: %pB: Mis-matched ISA version for '%s' exetension. %d.%d vs %d.%d" +msgid "error: %pB: Mis-matched ISA version for '%s' extension. %d.%d vs %d.%d" msgstr "помилка: %pB: невідповідніÑÑ‚ÑŒ верÑÑ–Ñ— ISA Ð´Ð»Ñ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ Â«%s». %d.%d, а не %d.%d" -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2729 +#: elfnn-riscv.c:2648 #, c-format -msgid "error: %pB: corrupted ISA string '%s'.first letter should be 'i' or 'e' but got '%s'." +msgid "error: %pB: corrupted ISA string '%s'. First letter should be 'i' or 'e' but got '%s'." msgstr "помилка: %pB: пошкоджений Ñ€Ñдок ISA «%s». Першою літерою має бути «i» або «e», а маємо «%s»." -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2773 +#: elfnn-riscv.c:2692 #, c-format msgid "error: %pB: Mis-matched ISA string to merge '%s' and '%s'." msgstr "помилка: %pB: розбіжніÑÑ‚ÑŒ у Ñ€Ñдках ISA заважає об'єднанню «%s» з «%s»." -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2921 +#: elfnn-riscv.c:2893 #, c-format msgid "error: %pB: ISA string of input (%s) doesn't match output (%s)." msgstr "помилка: %pB: Ñ€Ñдок ISA вхідних даних (%s) не збігаєтьÑÑ Ñ–Ð· Ñ€Ñдком вихідних даних (%s)." -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2946 +#: elfnn-riscv.c:2913 #, c-format msgid "error: %pB: XLEN of input (%u) doesn't match output (%u)." msgstr "помилка: %pB: XLEN вхідних даних (%u) не збігаєтьÑÑ Ð·Ñ– значеннÑм Ð´Ð»Ñ Ð²Ð¸Ñ…Ñ–Ð´Ð½Ð¸Ñ… даних (%u)." -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:2954 +#: elfnn-riscv.c:2921 #, c-format -msgid "error: %pB: Unspported XLEN (%u), you mightusing wrong emulation." +msgid "error: %pB: Unsupported XLEN (%u), you might be using wrong emulation." msgstr "помилка: %pB: непідтримуване Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ XLEN (%u). Ймовірно, ви викориÑтовуєте помилкову емулÑцію." -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:3039 +#: elfnn-riscv.c:3035 #, c-format -msgid "error: %pB: conflicting priv spec version (major/minor/revision)." -msgstr "помилка: %pB: конфлікт верÑій Ñпецифікації priv (оÑновна/проміжна/модифікаціÑ)." +msgid "warning: %pB use privilege spec version %u.%u.%u but the output use version %u.%u.%u." +msgstr "попередженнÑ: %pB викориÑтовує верÑÑ–ÑŽ Ñпецифікації прав доÑтупу %u.%u.%u, але у виведених даних викориÑтовуєтьÑÑ Ð²ÐµÑ€ÑÑ–Ñ %u.%u.%u." + +#: elfnn-riscv.c:3053 +msgid "warning: privilege spec version 1.9.1 can not be linked with other spec versions." +msgstr "попередженнÑ: верÑÑ–ÑŽ Ñпецифікації прав доÑтупу 1.9.1 не можна компонувати із іншими верÑÑ–Ñми Ñпецифікацій." -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:3055 +#: elfnn-riscv.c:3081 #, c-format msgid "error: %pB use %u-byte stack aligned but the output use %u-byte stack aligned." msgstr "помилка: у %pB викориÑтано %u-байтову із вирівнюваннÑм Ñтека, а у виведенні викориÑтано %u-байтову із вирівнюваннÑм Ñтека." -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:3096 +#: elfnn-riscv.c:3122 #, c-format msgid "" "%pB: ABI is incompatible with that of the selected emulation:\n" @@ -7910,111 +8301,111 @@ "%pB: ABI Ñ” неÑуміÑним із вибраною емулÑцією:\n" " ціль емулÑції, «%s», не відповідає «%s»" -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:3119 +#: elfnn-riscv.c:3176 #, c-format msgid "%pB: can't link %s modules with %s modules" msgstr "%pB: неможливо компонувати модулі %s з модулÑми %s" -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:3129 +#: elfnn-riscv.c:3186 #, c-format msgid "%pB: can't link RVE with other target" msgstr "%pB: не можна компонувати RVE із іншою ціллю" -#: /work/sources/binutils/branches//2.32/bfd/elfnn-riscv.c:3630 +#: elfnn-riscv.c:3724 #, c-format msgid "%pB(%pA+%#): % bytes required for alignment to %-byte boundary, but only % present" msgstr "%pB(%pA+%#): потрібні % байтів Ð´Ð»Ñ Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ Ð½Ð° %-байтову межу, втім, маємо лише %" -#: peigen.c:157 pepigen.c:157 pex64igen.c:157 +#: peXXigen.c:164 #, c-format msgid "%pB: unable to find name for empty section" msgstr "%pB: не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ назву порожнього розділу" -#: peigen.c:183 pepigen.c:183 pex64igen.c:183 +#: peXXigen.c:191 #, c-format msgid "%pB: out of memory creating name for empty section" msgstr "%pB: вихід за межі облаÑÑ‚Ñ– пам’ÑÑ‚Ñ– під Ñ‡Ð°Ñ Ñпроби Ñтворити назву Ð´Ð»Ñ Ð¿Ð¾Ñ€Ð¾Ð¶Ð½ÑŒÐ¾Ð³Ð¾ розділу" -#: peigen.c:194 pepigen.c:194 pex64igen.c:194 +#: peXXigen.c:201 #, c-format msgid "%pB: unable to create fake empty section" msgstr "%pB: не вдалоÑÑ Ñтворити фіктивний порожній розділ" -#: peigen.c:532 pepigen.c:532 pex64igen.c:532 +#: peXXigen.c:539 #, c-format -msgid "%pB: aout header specifies an invalid number of data-directory entries: %ld" -msgstr "%pB: заголовок aout вказує некоректну кількіÑÑ‚ÑŒ запиÑів каталогу даних: %ld" +msgid "%pB: aout header specifies an invalid number of data-directory entries: %u" +msgstr "%pB: заголовок aout вказує некоректну кількіÑÑ‚ÑŒ запиÑів каталогу даних: %u" -#: peigen.c:1091 pepigen.c:1091 pex64igen.c:1091 +#: peXXigen.c:1088 #, c-format msgid "%pB: line number overflow: 0x%lx > 0xffff" msgstr "%pB: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð½Ð¾Ð¼ÐµÑ€Ñ–Ð² Ñ€Ñдків; 0x%lx > 0xffff" -#: peigen.c:1235 pepigen.c:1235 pex64igen.c:1235 +#: peXXigen.c:1241 msgid "Export Directory [.edata (or where ever we found it)]" msgstr "Каталог екÑÐ¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ [.edata (або інше міÑце, де його знайдено)]" -#: peigen.c:1236 pepigen.c:1236 pex64igen.c:1236 +#: peXXigen.c:1242 msgid "Import Directory [parts of .idata]" msgstr "Каталог Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ [чаÑтини .idata]" -#: peigen.c:1237 pepigen.c:1237 pex64igen.c:1237 +#: peXXigen.c:1243 msgid "Resource Directory [.rsrc]" msgstr "Каталог реÑурÑів [.rsrc]" -#: peigen.c:1238 pepigen.c:1238 pex64igen.c:1238 +#: peXXigen.c:1244 msgid "Exception Directory [.pdata]" msgstr "Каталог виключень [.pdata]" -#: peigen.c:1239 pepigen.c:1239 pex64igen.c:1239 +#: peXXigen.c:1245 msgid "Security Directory" msgstr "Каталог захиÑту" -#: peigen.c:1240 pepigen.c:1240 pex64igen.c:1240 +#: peXXigen.c:1246 msgid "Base Relocation Directory [.reloc]" msgstr "Каталог базового переÑÑƒÐ²Ð°Ð½Ð½Ñ [.reloc]" -#: peigen.c:1241 pepigen.c:1241 pex64igen.c:1241 +#: peXXigen.c:1247 msgid "Debug Directory" msgstr "Каталог діагноÑтики" -#: peigen.c:1242 pepigen.c:1242 pex64igen.c:1242 +#: peXXigen.c:1248 msgid "Description Directory" msgstr "Каталог опиÑів" -#: peigen.c:1243 pepigen.c:1243 pex64igen.c:1243 +#: peXXigen.c:1249 msgid "Special Directory" msgstr "ОÑобливий каталог" -#: peigen.c:1244 pepigen.c:1244 pex64igen.c:1244 +#: peXXigen.c:1250 msgid "Thread Storage Directory [.tls]" msgstr "Каталог Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ð½Ð½Ñ Ð¿Ð¾Ñ‚Ð¾ÐºÑ–Ð² [.tls]" -#: peigen.c:1245 pepigen.c:1245 pex64igen.c:1245 +#: peXXigen.c:1251 msgid "Load Configuration Directory" msgstr "Каталог Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½ÑŒ" -#: peigen.c:1246 pepigen.c:1246 pex64igen.c:1246 +#: peXXigen.c:1252 msgid "Bound Import Directory" msgstr "Каталог вимушеного імпортуваннÑ" -#: peigen.c:1247 pepigen.c:1247 pex64igen.c:1247 +#: peXXigen.c:1253 msgid "Import Address Table Directory" msgstr "Каталог Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– адреÑ" -#: peigen.c:1248 pepigen.c:1248 pex64igen.c:1248 +#: peXXigen.c:1254 msgid "Delay Import Directory" msgstr "Каталог відкладеного імпортуваннÑ" -#: peigen.c:1249 pepigen.c:1249 pex64igen.c:1249 +#: peXXigen.c:1255 msgid "CLR Runtime Header" msgstr "Динамічний заголовок CLR" -#: peigen.c:1250 pepigen.c:1250 pex64igen.c:1250 +#: peXXigen.c:1256 msgid "Reserved" msgstr "Зарезервовано" -#: peigen.c:1310 pepigen.c:1310 pex64igen.c:1310 +#: peXXigen.c:1316 #, c-format msgid "" "\n" @@ -8023,7 +8414,7 @@ "\n" "ІÑнує Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ, але розділу, що Ñ—Ñ— міÑтить не знайдено\n" -#: peigen.c:1316 pepigen.c:1316 pex64igen.c:1316 +#: peXXigen.c:1322 #, c-format msgid "" "\n" @@ -8032,7 +8423,7 @@ "\n" "У %s Ñ” Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ, але у цьому розділі немає даних\n" -#: peigen.c:1323 pepigen.c:1323 pex64igen.c:1323 +#: peXXigen.c:1329 #, c-format msgid "" "\n" @@ -8041,7 +8432,7 @@ "\n" "У %s зберігаєтьÑÑ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñƒ 0x%lx\n" -#: peigen.c:1365 pepigen.c:1365 pex64igen.c:1365 +#: peXXigen.c:1369 #, c-format msgid "" "\n" @@ -8050,12 +8441,12 @@ "\n" "ДеÑкриптор функції розташовано за початковою адреÑою %04lx\n" -#: peigen.c:1369 pepigen.c:1369 pex64igen.c:1369 +#: peXXigen.c:1373 #, c-format msgid "\tcode-base %08lx toc (loadable/actual) %08lx/%08lx\n" msgstr "\ttoc оÑнови коду %08lx (завантажуваний/дійÑний) %08lx/%08lx\n" -#: peigen.c:1377 pepigen.c:1377 pex64igen.c:1377 +#: peXXigen.c:1380 #, c-format msgid "" "\n" @@ -8064,7 +8455,7 @@ "\n" "Ðемає розділу reldata! ДеÑкриптор функції не розшифровано.\n" -#: peigen.c:1382 pepigen.c:1382 pex64igen.c:1382 +#: peXXigen.c:1385 #, c-format msgid "" "\n" @@ -8073,7 +8464,7 @@ "\n" "Таблиці Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ (оброблений вміÑÑ‚ розділу %s)\n" -#: peigen.c:1385 pepigen.c:1385 pex64igen.c:1385 +#: peXXigen.c:1388 #, c-format msgid "" " vma: Hint Time Forward DLL First\n" @@ -8082,7 +8473,7 @@ " vma: Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ Ð§Ð°Ñова Ланцюжок Ðазва Перший\n" " вказ. Позначка ÑпрÑм. DLL шлюз\n" -#: peigen.c:1435 pepigen.c:1435 pex64igen.c:1435 +#: peXXigen.c:1437 #, c-format msgid "" "\n" @@ -8091,12 +8482,12 @@ "\n" "\tÐазва DLL: %.*s\n" -#: peigen.c:1451 pepigen.c:1451 pex64igen.c:1451 +#: peXXigen.c:1453 #, c-format msgid "\tvma: Hint/Ord Member-Name Bound-To\n" msgstr "\tvma: Вказ/Пор Ðазва-елемента Прив’Ñзано-до\n" -#: peigen.c:1476 pepigen.c:1476 pex64igen.c:1476 +#: peXXigen.c:1478 #, c-format msgid "" "\n" @@ -8105,13 +8496,12 @@ "\n" "ІÑнує Ð·Ð°Ð¿Ð¸Ñ Ð¿ÐµÑ€ÑˆÐ¾Ð³Ð¾ переходу, але розділу, що його міÑтить не знайдено\n" -#: peigen.c:1520 peigen.c:1559 pepigen.c:1520 pepigen.c:1559 pex64igen.c:1520 -#: pex64igen.c:1559 +#: peXXigen.c:1522 peXXigen.c:1561 #, c-format msgid "\t" msgstr "\t<пошкоджено: 0x%04lx>" -#: peigen.c:1652 pepigen.c:1652 pex64igen.c:1652 +#: peXXigen.c:1654 #, c-format msgid "" "\n" @@ -8120,7 +8510,7 @@ "\n" "ІÑнує Ð·Ð°Ð¿Ð¸Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– екÑпортуваннÑ, але розділу, що Ñ—Ñ— міÑтить не знайдено\n" -#: peigen.c:1658 pepigen.c:1658 pex64igen.c:1658 +#: peXXigen.c:1660 #, c-format msgid "" "\n" @@ -8129,7 +8519,7 @@ "\n" "У %s Ñ” Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ ÐµÐºÑпортуваннÑ, але у цьому розділі немає даних\n" -#: peigen.c:1669 pepigen.c:1669 pex64igen.c:1669 +#: peXXigen.c:1671 #, c-format msgid "" "\n" @@ -8138,7 +8528,7 @@ "\n" "У %s зберігаєтьÑÑ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ ÐµÐºÑпортуваннÑ, але Ñ—Ñ— не можна вміÑтити у цьому розділі\n" -#: peigen.c:1680 pepigen.c:1680 pex64igen.c:1680 +#: peXXigen.c:1682 #, c-format msgid "" "\n" @@ -8147,7 +8537,7 @@ "\n" "У %s зберігаєтьÑÑ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ ÐµÐºÑпортуваннÑ, але вона Ñ” надто малою (%d)\n" -#: peigen.c:1686 pepigen.c:1686 pex64igen.c:1686 +#: peXXigen.c:1688 #, c-format msgid "" "\n" @@ -8156,7 +8546,7 @@ "\n" "У %s зберігаєтьÑÑ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ ÐµÐºÑÐ¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñƒ 0x%lx\n" -#: peigen.c:1714 pepigen.c:1714 pex64igen.c:1714 +#: peXXigen.c:1716 #, c-format msgid "" "\n" @@ -8166,67 +8556,67 @@ "\n" "Таблиці екÑÐ¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ (оброблений вміÑÑ‚ розділу %s)\n" -#: peigen.c:1718 pepigen.c:1718 pex64igen.c:1718 +#: peXXigen.c:1720 #, c-format msgid "Export Flags \t\t\t%lx\n" msgstr "Прапорці екÑпортуваннÑ\t\t%lx\n" -#: peigen.c:1721 pepigen.c:1721 pex64igen.c:1721 +#: peXXigen.c:1723 #, c-format msgid "Time/Date stamp \t\t%lx\n" msgstr "Позначка чаÑу/дати\t\t%lx\n" -#: peigen.c:1725 pepigen.c:1725 pex64igen.c:1725 +#: peXXigen.c:1727 #, c-format msgid "Major/Minor \t\t\t%d/%d\n" msgstr "ОÑновна/ÐœÐ¾Ð´Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ \t\t\t%d/%d\n" -#: peigen.c:1728 pepigen.c:1728 pex64igen.c:1728 +#: peXXigen.c:1730 #, c-format msgid "Name \t\t\t\t" msgstr "Ðазва\t\t\t\t" -#: peigen.c:1739 pepigen.c:1739 pex64igen.c:1739 +#: peXXigen.c:1741 #, c-format msgid "Ordinal Base \t\t\t%ld\n" msgstr "ОÑнова впорÑдковуваннÑ\t\t%ld\n" -#: peigen.c:1742 pepigen.c:1742 pex64igen.c:1742 +#: peXXigen.c:1744 #, c-format msgid "Number in:\n" msgstr "Ðомер у:\n" -#: peigen.c:1745 pepigen.c:1745 pex64igen.c:1745 +#: peXXigen.c:1747 #, c-format msgid "\tExport Address Table \t\t%08lx\n" msgstr "\tÐ¢Ð°Ð±Ð»Ð¸Ñ†Ñ ÐµÐºÑпортованих Ð°Ð´Ñ€ÐµÑ \t\t%08lx\n" -#: peigen.c:1749 pepigen.c:1749 pex64igen.c:1749 +#: peXXigen.c:1751 #, c-format msgid "\t[Name Pointer/Ordinal] Table\t%08lx\n" msgstr "\tÐ¢Ð°Ð±Ð»Ð¸Ñ†Ñ [вказівників назв/порÑдкових номерів]\t%08lx\n" -#: peigen.c:1752 pepigen.c:1752 pex64igen.c:1752 +#: peXXigen.c:1754 #, c-format msgid "Table Addresses\n" msgstr "Табличні адреÑи\n" -#: peigen.c:1755 pepigen.c:1755 pex64igen.c:1755 +#: peXXigen.c:1757 #, c-format msgid "\tExport Address Table \t\t" msgstr "\tÐ¢Ð°Ð±Ð»Ð¸Ñ†Ñ ÐµÐºÑпортованих Ð°Ð´Ñ€ÐµÑ \t\t" -#: peigen.c:1760 pepigen.c:1760 pex64igen.c:1760 +#: peXXigen.c:1762 #, c-format msgid "\tName Pointer Table \t\t" msgstr "\tÐ¢Ð°Ð±Ð»Ð¸Ñ†Ñ Ð²ÐºÐ°Ð·Ñ–Ð²Ð½Ð¸ÐºÑ–Ð² на назви \t\t" -#: peigen.c:1765 pepigen.c:1765 pex64igen.c:1765 +#: peXXigen.c:1767 #, c-format msgid "\tOrdinal Table \t\t\t" msgstr "\tÐ¢Ð°Ð±Ð»Ð¸Ñ†Ñ Ð½Ð¾Ð¼ÐµÑ€Ñ–Ð² \t\t\t" -#: peigen.c:1779 pepigen.c:1779 pex64igen.c:1779 +#: peXXigen.c:1781 #, c-format msgid "" "\n" @@ -8235,20 +8625,20 @@ "\n" "Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ ÐµÐºÑпортованих Ð°Ð´Ñ€ÐµÑ â€” оÑнова порÑдкових номерів: %ld\n" -#: peigen.c:1788 pepigen.c:1788 pex64igen.c:1788 +#: peXXigen.c:1790 #, c-format msgid "\tInvalid Export Address Table rva (0x%lx) or entry count (0x%lx)\n" msgstr "\tÐекоректне rva (0x%lx) або кількіÑÑ‚ÑŒ запиÑів (0x%lx) таблиці Ð°Ð´Ñ€ÐµÑ ÐµÐºÑпортуваннÑ\n" -#: peigen.c:1807 pepigen.c:1807 pex64igen.c:1807 +#: peXXigen.c:1809 msgid "Forwarder RVA" msgstr "ПереÑпрÑмовний RVA" -#: peigen.c:1819 pepigen.c:1819 pex64igen.c:1819 +#: peXXigen.c:1821 msgid "Export RVA" msgstr "ЕкÑпортований RVA" -#: peigen.c:1826 pepigen.c:1826 pex64igen.c:1826 +#: peXXigen.c:1828 #, c-format msgid "" "\n" @@ -8257,29 +8647,27 @@ "\n" "Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ [порÑдкових номерів/вказівників на назви]\n" -#: peigen.c:1834 pepigen.c:1834 pex64igen.c:1834 +#: peXXigen.c:1836 #, c-format msgid "\tInvalid Name Pointer Table rva (0x%lx) or entry count (0x%lx)\n" msgstr "\tÐекоректне rva (0x%lx) або кількіÑÑ‚ÑŒ запиÑів (0x%lx) таблиці вказівників на назви\n" -#: peigen.c:1841 pepigen.c:1841 pex64igen.c:1841 +#: peXXigen.c:1843 #, c-format msgid "\tInvalid Ordinal Table rva (0x%lx) or entry count (0x%lx)\n" msgstr "\tÐекоректне rva (0x%lx) або кількіÑÑ‚ÑŒ запиÑів (0x%lx) таблиці порÑдкових даних\n" -#: peigen.c:1855 pepigen.c:1855 pex64igen.c:1855 +#: peXXigen.c:1857 #, c-format msgid "\t[%4ld] \n" msgstr "\t[%4ld] <пошкоджений зÑув: %lx>\n" -#: peigen.c:1909 peigen.c:2106 pepigen.c:1909 pepigen.c:2106 pex64igen.c:1909 -#: pex64igen.c:2106 +#: peXXigen.c:1911 peXXigen.c:2107 #, c-format msgid "warning, .pdata section size (%ld) is not a multiple of %d\n" msgstr "попередженнÑ: розмір розділу .pdata (%ld) не Ñ” кратним до %d\n" -#: peigen.c:1913 peigen.c:2110 pepigen.c:1913 pepigen.c:2110 pex64igen.c:1913 -#: pex64igen.c:2110 +#: peXXigen.c:1915 peXXigen.c:2111 #, c-format msgid "" "\n" @@ -8288,12 +8676,12 @@ "\n" "Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ Ñ„ÑƒÐ½ÐºÑ†Ñ–Ð¹ (оброблений вміÑÑ‚ розділу .pdata)\n" -#: peigen.c:1916 pepigen.c:1916 pex64igen.c:1916 +#: peXXigen.c:1918 #, c-format msgid " vma:\t\t\tBegin Address End Address Unwind Info\n" msgstr " vma:\t\t\tПочат. адреÑа Кінц. адреÑа Дані unwind\n" -#: peigen.c:1918 pepigen.c:1918 pex64igen.c:1918 +#: peXXigen.c:1920 #, c-format msgid "" " vma:\t\tBegin End EH EH PrologEnd Exception\n" @@ -8302,27 +8690,27 @@ " vma:\t\tПоч. Кінц. Обробник Дані ÐдреÑа МаÑка\n" " \t\tадреÑа адреÑа EH EH кінц. прол.виключеннÑ\n" -#: peigen.c:1931 pepigen.c:1931 pex64igen.c:1931 +#: peXXigen.c:1933 #, c-format msgid "Virtual size of .pdata section (%ld) larger than real size (%ld)\n" msgstr "Віртуальний розмір розділу .pdata (%ld) перевищує реальний розмір (%ld)\n" -#: peigen.c:2001 pepigen.c:2001 pex64igen.c:2001 +#: peXXigen.c:2002 #, c-format msgid " Register save millicode" msgstr " Мілікод Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ñ€ÐµÐ³Ñ–Ñтра" -#: peigen.c:2004 pepigen.c:2004 pex64igen.c:2004 +#: peXXigen.c:2005 #, c-format msgid " Register restore millicode" msgstr " Мілікод Ð²Ñ–Ð´Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ñ€ÐµÐ³Ñ–Ñтра" -#: peigen.c:2007 pepigen.c:2007 pex64igen.c:2007 +#: peXXigen.c:2008 #, c-format msgid " Glue code sequence" msgstr " ПоÑлідовніÑÑ‚ÑŒ з’єднувального коду" -#: peigen.c:2112 pepigen.c:2112 pex64igen.c:2112 +#: peXXigen.c:2113 #, c-format msgid "" " vma:\t\tBegin Prolog Function Flags Exception EH\n" @@ -8331,7 +8719,7 @@ " vma:\t\tПоч. Довжина Довжина Прапорці Обробник Дані\n" " \t\tадреÑа прологу функції 32б вик. виключень EH\n" -#: peigen.c:2234 pepigen.c:2234 pex64igen.c:2234 +#: peXXigen.c:2234 #, c-format msgid "" "\n" @@ -8342,7 +8730,7 @@ "\n" "ПереÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ‰Ð¾Ð´Ð¾ оÑнови файла PE (оброблений вміÑÑ‚ розділу .reloc)\n" -#: peigen.c:2264 pepigen.c:2264 pex64igen.c:2264 +#: peXXigen.c:2263 #, c-format msgid "" "\n" @@ -8351,62 +8739,62 @@ "\n" "Віртуальна адреÑа: %08lx, розмір фрагмента: %ld (0x%lx), кількіÑÑ‚ÑŒ прив’Ñзок: %ld\n" -#: peigen.c:2282 pepigen.c:2282 pex64igen.c:2282 +#: peXXigen.c:2281 #, c-format msgid "\treloc %4d offset %4x [%4lx] %s" msgstr "\tпереÑÑƒÐ²Ð°Ð½Ð½Ñ %4d відÑтуп %4x [%4lx] %s" -#: peigen.c:2343 pepigen.c:2343 pex64igen.c:2343 +#: peXXigen.c:2342 #, c-format msgid "%03x %*.s Entry: " msgstr "Вхід до %03x %*.s: " -#: peigen.c:2367 pepigen.c:2367 pex64igen.c:2367 +#: peXXigen.c:2366 #, c-format msgid "name: [val: %08lx len %d]: " msgstr "назва: [значеннÑ: %08lx довжина %d]: " -#: peigen.c:2387 pepigen.c:2387 pex64igen.c:2387 +#: peXXigen.c:2386 #, c-format msgid "\n" msgstr "<довжина пошкодженого Ñ€Ñдка: %#x>\n" -#: peigen.c:2397 pepigen.c:2397 pex64igen.c:2397 +#: peXXigen.c:2396 #, c-format msgid "\n" msgstr "<відÑтуп пошкодженого Ñ€Ñдка: %#lx>\n" -#: peigen.c:2402 pepigen.c:2402 pex64igen.c:2402 +#: peXXigen.c:2401 #, c-format msgid "ID: %#08lx" msgstr "Ід.: %#08lx" -#: peigen.c:2405 pepigen.c:2405 pex64igen.c:2405 +#: peXXigen.c:2404 #, c-format msgid ", Value: %#08lx\n" msgstr ", ЗначеннÑ: %#08lx\n" -#: peigen.c:2427 pepigen.c:2427 pex64igen.c:2427 +#: peXXigen.c:2426 #, c-format msgid "%03x %*.s Leaf: Addr: %#08lx, Size: %#08lx, Codepage: %d\n" msgstr "%03x ЛиÑток %*.s: адреÑа: %#08lx, розмір: %#08lx, кодова Ñторінка: %d\n" -#: peigen.c:2469 pepigen.c:2469 pex64igen.c:2469 +#: peXXigen.c:2468 #, c-format msgid "\n" msgstr "<невідомий тип каталогу: %d>\n" -#: peigen.c:2477 pepigen.c:2477 pex64igen.c:2477 +#: peXXigen.c:2476 #, c-format msgid " Table: Char: %d, Time: %08lx, Ver: %d/%d, Num Names: %d, IDs: %d\n" msgstr " ТаблицÑ: хар.: %d, чаÑ: %08lx, верÑÑ–Ñ: %d/%d, чиÑлові назви: %d, ід.: %d\n" -#: peigen.c:2566 pepigen.c:2566 pex64igen.c:2566 +#: peXXigen.c:2564 #, c-format msgid "Corrupt .rsrc section detected!\n" msgstr "ВиÑвлено пошкоджений розділ .rsrc!\n" -#: peigen.c:2590 pepigen.c:2590 pex64igen.c:2590 +#: peXXigen.c:2588 #, c-format msgid "" "\n" @@ -8415,17 +8803,17 @@ "\n" "ПОПЕРЕДЖЕÐÐЯ: зайві дані у розділі .rsrc — Ñ—Ñ… буде проігноровано Windows:\n" -#: peigen.c:2596 pepigen.c:2596 pex64igen.c:2596 +#: peXXigen.c:2594 #, c-format msgid " String table starts at offset: %#03x\n" msgstr " Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ Ñ€Ñдків починаєтьÑÑ Ð· таким зÑувом: %#03x\n" -#: peigen.c:2599 pepigen.c:2599 pex64igen.c:2599 +#: peXXigen.c:2597 #, c-format msgid " Resources start at offset: %#03x\n" msgstr " РеÑурÑи починаютьÑÑ Ð· таким зÑувом: %#03x\n" -#: peigen.c:2651 pepigen.c:2651 pex64igen.c:2651 +#: peXXigen.c:2654 #, c-format msgid "" "\n" @@ -8434,7 +8822,7 @@ "\n" "ІÑнує каталог діагноÑтики, але розділу, що його міÑтить не знайдено\n" -#: peigen.c:2657 pepigen.c:2657 pex64igen.c:2657 +#: peXXigen.c:2660 #, c-format msgid "" "\n" @@ -8443,7 +8831,7 @@ "\n" "У %s Ñ” каталог діагноÑтики, але у цьому розділі немає даних\n" -#: peigen.c:2664 pepigen.c:2664 pex64igen.c:2664 +#: peXXigen.c:2667 #, c-format msgid "" "\n" @@ -8452,7 +8840,7 @@ "\n" "Помилка: у розділі %s міÑтитьÑÑ Ð¿Ð¾Ñ‡Ð°Ñ‚ÐºÐ¾Ð²Ð° адреÑа діагноÑтичних даних, але вона Ñ” надто малою\n" -#: peigen.c:2669 pepigen.c:2669 pex64igen.c:2669 +#: peXXigen.c:2672 #, c-format msgid "" "\n" @@ -8463,22 +8851,22 @@ "ВиÑвлено каталог діагноÑтики у %s за адреÑою 0x%lx\n" "\n" -#: peigen.c:2676 pepigen.c:2676 pex64igen.c:2676 +#: peXXigen.c:2679 #, c-format msgid "The debug data size field in the data directory is too big for the section" msgstr "Поле розміру діагноÑтичних даних у каталозі діагноÑтики Ñ” надто великим Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ розділу" -#: peigen.c:2681 pepigen.c:2681 pex64igen.c:2681 +#: peXXigen.c:2684 #, c-format msgid "Type Size Rva Offset\n" msgstr "Тип Розм Rva ЗÑув\n" -#: peigen.c:2729 pepigen.c:2729 pex64igen.c:2729 +#: peXXigen.c:2731 #, c-format msgid "(format %c%c%c%c signature %s age %ld)\n" msgstr "(формат %c%c%c%c Ð¿Ñ–Ð´Ð¿Ð¸Ñ %s вік %ld)\n" -#: peigen.c:2737 pepigen.c:2737 pex64igen.c:2737 +#: peXXigen.c:2741 #, c-format msgid "The debug directory size is not a multiple of the debug directory entry size\n" msgstr "Розмір каталогу діагноÑтики не Ñ” кратним до розміру запиÑу каталогу діагноÑтики\n" @@ -8486,7 +8874,7 @@ #. The MS dumpbin program reportedly ands with 0xff0f before #. printing the characteristics field. Not sure why. No reason to #. emulate it here. -#: peigen.c:2757 pepigen.c:2757 pex64igen.c:2757 +#: peXXigen.c:2825 #, c-format msgid "" "\n" @@ -8495,105 +8883,87 @@ "\n" "ХарактериÑтики 0x%x\n" -#: peigen.c:2993 pepigen.c:2993 pex64igen.c:2993 +#: peXXigen.c:3072 #, c-format msgid "%pB: Data Directory size (%lx) exceeds space left in section (%)" msgstr "%pB: розмір каталогу даних (%lx) перевищує розмір міÑцÑ, Ñке лишилоÑÑ Ñƒ розділі (%)" -#: peigen.c:3025 pepigen.c:3025 pex64igen.c:3025 +#: peXXigen.c:3104 msgid "failed to update file offsets in debug directory" msgstr "не вдалоÑÑ Ð¾Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ зÑуви файлів у каталозі діагноÑтики" -#: peigen.c:3033 pepigen.c:3033 pex64igen.c:3033 +#: peXXigen.c:3112 #, c-format msgid "%pB: failed to read debug data section" msgstr "%pB: не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ розділ діагноÑтичних даних" -#: peigen.c:3849 pepigen.c:3849 pex64igen.c:3849 +#: peXXigen.c:3928 #, c-format msgid ".rsrc merge failure: duplicate string resource: %d" msgstr "не вдалоÑÑ Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ñ‚Ð¸ .rsrc: реÑÑƒÑ€Ñ Ð· дублюваннÑм Ñ€Ñдків: %d" -#: peigen.c:3984 pepigen.c:3984 pex64igen.c:3984 +#: peXXigen.c:4063 msgid ".rsrc merge failure: multiple non-default manifests" msgstr "не вдалоÑÑ Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ñ‚Ð¸ .rsrc: декілька нетипових маніфеÑтів" -#: peigen.c:4002 pepigen.c:4002 pex64igen.c:4002 +#: peXXigen.c:4081 msgid ".rsrc merge failure: a directory matches a leaf" msgstr "не вдалоÑÑ Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ñ‚Ð¸ .rsrc: каталогу відповідає лиÑток" -#: peigen.c:4044 pepigen.c:4044 pex64igen.c:4044 +#: peXXigen.c:4123 msgid ".rsrc merge failure: duplicate leaf" msgstr "не вдалоÑÑ Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ñ‚Ð¸ .rsrc: Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ð»Ð¸Ñтків" -#: peigen.c:4046 pepigen.c:4046 pex64igen.c:4046 +#: peXXigen.c:4125 #, c-format msgid ".rsrc merge failure: duplicate leaf: %s" msgstr "не вдалоÑÑ Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ñ‚Ð¸ .rsrc: Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ð»Ð¸Ñтків: %s" -#: peigen.c:4112 pepigen.c:4112 pex64igen.c:4112 +#: peXXigen.c:4191 msgid ".rsrc merge failure: dirs with differing characteristics" msgstr "не вдалоÑÑ Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ñ‚Ð¸ .rsrc: каталоги з різними характериÑтиками" -#: peigen.c:4119 pepigen.c:4119 pex64igen.c:4119 +#: peXXigen.c:4198 msgid ".rsrc merge failure: differing directory versions" msgstr "не вдалоÑÑ Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ñ‚Ð¸ .rsrc: відмінноÑÑ‚Ñ– у верÑÑ–ÑÑ… каталогів" #. Corrupted .rsrc section - cannot merge. -#: peigen.c:4236 pepigen.c:4236 pex64igen.c:4236 +#: peXXigen.c:4315 #, c-format msgid "%pB: .rsrc merge failure: corrupt .rsrc section" msgstr "%pB: не вдалоÑÑ Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ñ‚Ð¸ .rsrc: пошкоджений розділ .rsrc" -#: peigen.c:4244 pepigen.c:4244 pex64igen.c:4244 +#: peXXigen.c:4323 #, c-format msgid "%pB: .rsrc merge failure: unexpected .rsrc size" msgstr "%pB: не вдалоÑÑ Ð¾Ð±â€™Ñ”Ð´Ð½Ð°Ñ‚Ð¸ .rsrc: неочікуваний розмір .rsrc" -#: peigen.c:4383 pepigen.c:4383 pex64igen.c:4383 +#: peXXigen.c:4462 #, c-format msgid "%pB: unable to fill in DataDictionary[1] because .idata$2 is missing" msgstr "%pB: не вдалоÑÑ Ð·Ð°Ð¿Ð¾Ð²Ð½Ð¸Ñ‚Ð¸ DataDictionary[1], оÑкільки не виÑтачає .idata$2" -#: peigen.c:4403 pepigen.c:4403 pex64igen.c:4403 +#: peXXigen.c:4482 #, c-format msgid "%pB: unable to fill in DataDictionary[1] because .idata$4 is missing" msgstr "%pB: не вдалоÑÑ Ð·Ð°Ð¿Ð¾Ð²Ð½Ð¸Ñ‚Ð¸ DataDictionary[1], оÑкільки не виÑтачає .idata$4" -#: peigen.c:4424 pepigen.c:4424 pex64igen.c:4424 +#: peXXigen.c:4503 #, c-format msgid "%pB: unable to fill in DataDictionary[12] because .idata$5 is missing" msgstr "%pB: не вдалоÑÑ Ð·Ð°Ð¿Ð¾Ð²Ð½Ð¸Ñ‚Ð¸ DataDictionary[12], оÑкільки не виÑтачає .idata$5" -#: peigen.c:4444 pepigen.c:4444 pex64igen.c:4444 +#: peXXigen.c:4523 #, c-format msgid "%pB: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE (12)] because .idata$6 is missing" msgstr "%pB: не вдалоÑÑ Ð·Ð°Ð¿Ð¾Ð²Ð½Ð¸Ñ‚Ð¸ DataDictionary[PE_IMPORT_ADDRESS_TABLE (12)], оÑкільки не виÑтачає .idata$6" -#: peigen.c:4486 pepigen.c:4486 pex64igen.c:4486 +#: peXXigen.c:4565 #, c-format msgid "%pB: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE(12)] because .idata$6 is missing" msgstr "%pB: не вдалоÑÑ Ð·Ð°Ð¿Ð¾Ð²Ð½Ð¸Ñ‚Ð¸ DataDictionary[PE_IMPORT_ADDRESS_TABLE(12)], оÑкільки .idata$6 не виÑтачає" -#: peigen.c:4511 pepigen.c:4511 pex64igen.c:4511 +#: peXXigen.c:4590 #, c-format msgid "%pB: unable to fill in DataDictionary[9] because __tls_used is missing" msgstr "%pB: не вдалоÑÑ Ð·Ð°Ð¿Ð¾Ð²Ð½Ð¸Ñ‚Ð¸ DataDictionary[9], оÑкільки не виÑтачає __tls_used" - -#~ msgid "%H: call to `%pT' lacks nop, can't restore toc; recompile with -fPIC\n" -#~ msgstr "%H: у виклику «%pT» не виÑтачає nop, Ð²Ñ–Ð´Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ toc неможливе; зберіть повторно з -fPIC\n" - -#~ msgid "error: %pB: " -#~ msgstr "помилка: %pB: <пошкоджений розмір викориÑтаного ISA x86: 0x%x>" - -#~ msgid "error: %pB: " -#~ msgstr "помилка: %pB: <пошкоджений розмір потрібного ISA x86: 0x%x>" - -#~ msgid "%pB: can't link hard-float modules with soft-float modules" -#~ msgstr "%pB: не можна компонувати модулі із апаратною рухомою крапкою із модулÑми із програмною рухомою крапкою" - -#~ msgid "%pB(%pA+%#): Unable to clear RISCV_PCREL_HI20 reloc for corresponding RISCV_PCREL_LO12 reloc" -#~ msgstr "%pB(%pA+%#): не вдалоÑÑ Ð¾Ñ‡Ð¸Ñтити RISCV_PCREL_HI20 relocfor, що відповідає переміщенню RISCV_PCREL_LO12" - -#~ msgid "%pB: Data Directory size (%#lx) is negative" -#~ msgstr "%pB: розмір каталогу даних (%#lx) Ñ” від'ємним" diff -Nru gdb-9.1/bfd/PORTING gdb-10.2/bfd/PORTING --- gdb-9.1/bfd/PORTING 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/PORTING 2021-04-25 04:06:26.000000000 +0000 @@ -82,7 +82,7 @@ The name of the target, for run-time lookups. Usually "a.out-" -Copyright (C) 2012-2019 Free Software Foundation, Inc. +Copyright (C) 2012-2020 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/bfd/ppcboot.c gdb-10.2/bfd/ppcboot.c --- gdb-9.1/bfd/ppcboot.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/ppcboot.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD back-end for PPCbug boot records. - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. Written by Michael Meissner, Cygnus Support, This file is part of BFD, the Binary File Descriptor library. @@ -102,7 +102,7 @@ { if (!ppcboot_get_tdata (abfd)) { - bfd_size_type amt = sizeof (ppcboot_data_t); + size_t amt = sizeof (ppcboot_data_t); ppcboot_set_tdata (abfd, bfd_zalloc (abfd, amt)); } @@ -130,7 +130,7 @@ was not defaulted. That is, it must be explicitly specified as being ppcboot. */ -static const bfd_target * +static bfd_cleanup ppcboot_object_p (bfd *abfd) { struct stat statbuf; @@ -207,7 +207,7 @@ memcpy (&tdata->header, &hdr, sizeof (ppcboot_hdr_t)); ppcboot_set_arch_mach (abfd, bfd_arch_powerpc, 0L); - return abfd->xvec; + return _bfd_no_cleanup; } #define ppcboot_close_and_cleanup _bfd_generic_close_and_cleanup @@ -276,7 +276,7 @@ asection *sec = ppcboot_get_tdata (abfd)->sec; asymbol *syms; unsigned int i; - bfd_size_type amt = PPCBOOT_SYMS * sizeof (asymbol); + size_t amt = PPCBOOT_SYMS * sizeof (asymbol); syms = (asymbol *) bfd_alloc (abfd, amt); if (syms == NULL) diff -Nru gdb-9.1/bfd/ptrace-core.c gdb-10.2/bfd/ptrace-core.c --- gdb-9.1/bfd/ptrace-core.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/ptrace-core.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD backend for core files which use the ptrace_user structure - Copyright (C) 1993-2019 Free Software Foundation, Inc. + Copyright (C) 1993-2020 Free Software Foundation, Inc. The structure of this file is based on trad-core.c written by John Gilmore of Cygnus Support. Modified to work with the ptrace_user structure by Kevin A. Buettner. @@ -55,13 +55,13 @@ #define ptrace_unix_core_file_pid _bfd_nocore_core_file_pid static void swap_abort (void); -const bfd_target * +bfd_cleanup ptrace_unix_core_file_p (bfd *abfd) { int val; struct ptrace_user u; struct trad_core_struct *rawptr; - bfd_size_type amt; + size_t amt; flagword flags; val = bfd_bread ((void *)&u, (bfd_size_type) sizeof u, abfd); @@ -124,7 +124,7 @@ core_datasec (abfd)->alignment_power = 2; core_regsec (abfd)->alignment_power = 2; - return abfd->xvec; + return _bfd_no_cleanup; fail: bfd_release (abfd, abfd->tdata.any); diff -Nru gdb-9.1/bfd/README gdb-10.2/bfd/README --- gdb-9.1/bfd/README 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/README 2021-04-25 04:06:26.000000000 +0000 @@ -48,7 +48,7 @@ Bug reports without patches will be remembered, but they may never get fixed until somebody volunteers to fix them. -Copyright (C) 2012-2019 Free Software Foundation, Inc. +Copyright (C) 2012-2020 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/bfd/reloc16.c gdb-10.2/bfd/reloc16.c --- gdb-9.1/bfd/reloc16.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/reloc16.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* 8 and 16 bit COFF relocation functions, for BFD. - Copyright (C) 1990-2019 Free Software Foundation, Inc. + Copyright (C) 1990-2020 Free Software Foundation, Inc. Written by Cygnus Support. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/reloc.c gdb-10.2/bfd/reloc.c --- gdb-9.1/bfd/reloc.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/reloc.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD support for handling relocation entries. - Copyright (C) 1990-2019 Free Software Foundation, Inc. + Copyright (C) 1990-2020 Free Software Foundation, Inc. Written by Cygnus Support. This file is part of BFD, the Binary File Descriptor library. @@ -432,8 +432,9 @@ . */ -/* N_ONES produces N one bits, without overflowing machine arithmetic. */ -#define N_ONES(n) (((((bfd_vma) 1 << ((n) - 1)) - 1) << 1) | 1) +/* N_ONES produces N one bits, without undefined behaviour for N + between zero and the number of bits in a bfd_vma. */ +#define N_ONES(n) ((n) == 0 ? 0 : ((bfd_vma) 1 << ((n) - 1) << 1) - 1) /* FUNCTION @@ -466,6 +467,9 @@ bfd_vma fieldmask, addrmask, signmask, ss, a; bfd_reloc_status_type flag = bfd_reloc_ok; + if (bitsize == 0) + return flag; + /* Note: BITSIZE should always be <= ADDRSIZE, but in case it's not, we'll be permissive: extra bits in the field mask will automatically extend the address mask for purposes of the @@ -3025,13 +3029,13 @@ ENUMX BFD_RELOC_PPC64_DTPREL34 ENUMX - BFD_RELOC_PPC64_GOT_TLSGD34 + BFD_RELOC_PPC64_GOT_TLSGD_PCREL34 ENUMX - BFD_RELOC_PPC64_GOT_TLSLD34 + BFD_RELOC_PPC64_GOT_TLSLD_PCREL34 ENUMX - BFD_RELOC_PPC64_GOT_TPREL34 + BFD_RELOC_PPC64_GOT_TPREL_PCREL34 ENUMX - BFD_RELOC_PPC64_GOT_DTPREL34 + BFD_RELOC_PPC64_GOT_DTPREL_PCREL34 ENUMX BFD_RELOC_PPC64_TLS_PCREL ENUMDOC @@ -6363,6 +6367,11 @@ BFD_RELOC_MSP430_PREL31 ENUMX BFD_RELOC_MSP430_SYM_DIFF +ENUMX + BFD_RELOC_MSP430_SET_ULEB128 +ENUMX + BFD_RELOC_MSP430_SUB_ULEB128 + ENUMDOC msp430 specific relocation codes @@ -6556,6 +6565,8 @@ ENUMX BFD_RELOC_XTENSA_DIFF32 ENUMDOC + Xtensa relocations for backward compatibility. These have been replaced + by BFD_RELOC_XTENSA_PDIFF and BFD_RELOC_XTENSA_NDIFF. Xtensa relocations to mark the difference of two local symbols. These are only needed to support linker relaxation and can be ignored when not relaxing. The field is set to the value of the difference @@ -6668,11 +6679,61 @@ BFD_RELOC_XTENSA_TLS_CALL ENUMDOC Xtensa TLS relocations. +ENUM + BFD_RELOC_XTENSA_PDIFF8 +ENUMX + BFD_RELOC_XTENSA_PDIFF16 +ENUMX + BFD_RELOC_XTENSA_PDIFF32 +ENUMX + BFD_RELOC_XTENSA_NDIFF8 +ENUMX + BFD_RELOC_XTENSA_NDIFF16 +ENUMX + BFD_RELOC_XTENSA_NDIFF32 +ENUMDOC + Xtensa relocations to mark the difference of two local symbols. + These are only needed to support linker relaxation and can be ignored + when not relaxing. The field is set to the value of the difference + assuming no relaxation. The relocation encodes the position of the + subtracted symbol so the linker can determine whether to adjust the field + value. PDIFF relocations are used for positive differences, NDIFF + relocations are used for negative differences. The difference value + is treated as unsigned with these relocation types, giving full + 8/16 value ranges. ENUM BFD_RELOC_Z80_DISP8 ENUMDOC 8 bit signed offset in (ix+d) or (iy+d). +ENUM + BFD_RELOC_Z80_BYTE0 +ENUMDOC + First 8 bits of multibyte (32, 24 or 16 bit) value. +ENUM + BFD_RELOC_Z80_BYTE1 +ENUMDOC + Second 8 bits of multibyte (32, 24 or 16 bit) value. +ENUM + BFD_RELOC_Z80_BYTE2 +ENUMDOC + Third 8 bits of multibyte (32 or 24 bit) value. +ENUM + BFD_RELOC_Z80_BYTE3 +ENUMDOC + Fourth 8 bits of multibyte (32 bit) value. +ENUM + BFD_RELOC_Z80_WORD0 +ENUMDOC + Lowest 16 bits of multibyte (32 or 24 bit) value. +ENUM + BFD_RELOC_Z80_WORD1 +ENUMDOC + Highest 16 bits of multibyte (32 or 24 bit) value. +ENUM + BFD_RELOC_Z80_16_BE +ENUMDOC + Like BFD_RELOC_16 but big-endian. ENUM BFD_RELOC_Z8K_DISP7 @@ -8446,7 +8507,7 @@ free (reloc_vector); return data; -error_return: + error_return: free (reloc_vector); return NULL; } diff -Nru gdb-9.1/bfd/rs6000-core.c gdb-10.2/bfd/rs6000-core.c --- gdb-9.1/bfd/rs6000-core.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/rs6000-core.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* IBM RS/6000 "XCOFF" back-end for BFD. - Copyright (C) 1990-2019 Free Software Foundation, Inc. + Copyright (C) 1990-2020 Free Software Foundation, Inc. Written by Metin G. Ozisik, Mimi Phuong-Thao Vo, and John Gilmore. Archive support from Damon A. Permezel. Contributed by IBM Corporation and Cygnus Support. @@ -277,7 +277,7 @@ /* Define prototypes for certain functions, to avoid a compiler warning saying that they are missing. */ -const bfd_target * rs6000coff_core_p (bfd *abfd); +const bfd_cleanup rs6000coff_core_p (bfd *abfd); bfd_boolean rs6000coff_core_file_matches_executable_p (bfd *core_bfd, bfd *exec_bfd); char * rs6000coff_core_file_failing_command (bfd *abfd); @@ -332,7 +332,7 @@ /* Decide if a given bfd represents a `core' file or not. There really is no magic number or anything like, in rs6000coff. */ -const bfd_target * +bfd_cleanup rs6000coff_core_p (bfd *abfd) { CoreHdr core; @@ -686,7 +686,7 @@ } #endif - return abfd->xvec; /* This is garbage for now. */ + return _bfd_no_cleanup; fail: bfd_release (abfd, abfd->tdata.any); @@ -759,11 +759,11 @@ } str1 = strrchr (path, '/'); - str2 = strrchr (exec_bfd->filename, '/'); + str2 = strrchr (bfd_get_filename (exec_bfd), '/'); /* step over character '/' */ str1 = str1 != NULL ? str1 + 1 : path; - str2 = str2 != NULL ? str2 + 1 : exec_bfd->filename; + str2 = str2 != NULL ? str2 + 1 : bfd_get_filename (exec_bfd); if (strcmp (str1, str2) == 0) ret = TRUE; diff -Nru gdb-9.1/bfd/sco5-core.c gdb-10.2/bfd/sco5-core.c --- gdb-9.1/bfd/sco5-core.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/sco5-core.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD back end for SCO5 core files (U-area and raw sections) - Copyright (C) 1998-2019 Free Software Foundation, Inc. + Copyright (C) 1998-2020 Free Software Foundation, Inc. Written by Jouke Numan This file is part of BFD, the Binary File Descriptor library. @@ -71,7 +71,7 @@ read_uarea (bfd *abfd, int filepos) { struct sco5_core_struct *rawptr; - bfd_size_type amt = sizeof (struct sco5_core_struct); + size_t amt = sizeof (struct sco5_core_struct); rawptr = (struct sco5_core_struct *) bfd_zmalloc (amt); if (rawptr == NULL) @@ -101,7 +101,7 @@ return &rawptr->u; } -const bfd_target * +bfd_cleanup sco5_core_file_p (bfd *abfd) { int coffset_siz, val, nsecs, cheadoffs; @@ -172,7 +172,7 @@ (file_ptr) coffsets.u_stack)) goto fail; - return abfd->xvec; /* Done for version 1 */ + return _bfd_no_cleanup; /* Done for version 1 */ } /* Immediately before coreoffsets region is a long with offset in core @@ -300,7 +300,7 @@ } - return abfd->xvec; + return _bfd_no_cleanup; fail: if (abfd->tdata.any) @@ -372,12 +372,16 @@ sco5_core_file_p /* a core file */ }, { /* bfd_set_format */ - _bfd_bool_bfd_false_error, bfd_false, - _bfd_bool_bfd_false_error, bfd_false + _bfd_bool_bfd_false_error, + _bfd_bool_bfd_false_error, + _bfd_bool_bfd_false_error, + _bfd_bool_bfd_false_error }, { /* bfd_write_contents */ - _bfd_bool_bfd_false_error, bfd_false, - _bfd_bool_bfd_false_error, bfd_false + _bfd_bool_bfd_false_error, + _bfd_bool_bfd_false_error, + _bfd_bool_bfd_false_error, + _bfd_bool_bfd_false_error }, BFD_JUMP_TABLE_GENERIC (_bfd_generic), diff -Nru gdb-9.1/bfd/section.c gdb-10.2/bfd/section.c --- gdb-9.1/bfd/section.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/section.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Object file "section" support for the BFD library. - Copyright (C) 1990-2019 Free Software Foundation, Inc. + Copyright (C) 1990-2020 Free Software Foundation, Inc. Written by Cygnus Support. This file is part of BFD, the Binary File Descriptor library. @@ -154,6 +154,10 @@ . {* A unique sequence number. *} . unsigned int id; . +. {* A unique section number which can be used by assembler to +. distinguish different sections with the same section name. *} +. unsigned int section_id; +. . {* Which section in the bfd; 0..n-1 as sections are created in a bfd. *} . unsigned int index; . @@ -287,6 +291,10 @@ . else up the line will take care of it later. *} .#define SEC_LINKER_CREATED 0x100000 . +. {* This section contains a section ID to distinguish different +. sections with the same section name. *} +.#define SEC_ASSEMBLER_SECTION_ID 0x100000 +. . {* This section should not be subject to garbage collection. . Also set to inform the linker that this section should not be . listed in the link map as discarded. *} @@ -536,11 +544,17 @@ . {* Early in the link process, map_head and map_tail are used to build . a list of input sections attached to an output section. Later, . output sections use these fields for a list of bfd_link_order -. structs. *} +. structs. The linked_to_symbol_name field is for ELF assembler +. internal use. *} . union { . struct bfd_link_order *link_order; . struct bfd_section *s; +. const char *linked_to_symbol_name; . } map_head, map_tail; +. {* Points to the output section this section is already assigned to, if any. +. This is used when support for non-contiguous memory regions is enabled. *} +. struct bfd_section *already_assigned; +. .} asection; . .{* Relax table contains information about instructions which can @@ -674,7 +688,9 @@ .static inline bfd_boolean .bfd_is_const_section (const asection *sec) .{ -. return sec >= bfd_abs_section_ptr && sec <= bfd_ind_section_ptr; +. return (sec >= _bfd_std_section +. && sec < _bfd_std_section + (sizeof (_bfd_std_section) +. / sizeof (_bfd_std_section[0]))); .} . .{* Return TRUE if input section SEC has been discarded. *} @@ -688,41 +704,42 @@ .} . .#define BFD_FAKE_SECTION(SEC, SYM, NAME, IDX, FLAGS) \ -. {* name, id, index, next, prev, flags, user_set_vma, *} \ -. { NAME, IDX, 0, NULL, NULL, FLAGS, 0, \ +. {* name, id, section_id, index, next, prev, flags, user_set_vma, *} \ +. { NAME, IDX, 0, 0, NULL, NULL, FLAGS, 0, \ . \ -. {* linker_mark, linker_has_input, gc_mark, decompress_status, *} \ +. {* linker_mark, linker_has_input, gc_mark, decompress_status, *} \ . 0, 0, 1, 0, \ . \ -. {* segment_mark, sec_info_type, use_rela_p, *} \ +. {* segment_mark, sec_info_type, use_rela_p, *} \ . 0, 0, 0, \ . \ -. {* sec_flg0, sec_flg1, sec_flg2, sec_flg3, sec_flg4, sec_flg5, *} \ +. {* sec_flg0, sec_flg1, sec_flg2, sec_flg3, sec_flg4, sec_flg5, *} \ . 0, 0, 0, 0, 0, 0, \ . \ -. {* vma, lma, size, rawsize, compressed_size, relax, relax_count, *} \ +. {* vma, lma, size, rawsize, compressed_size, relax, relax_count, *} \ . 0, 0, 0, 0, 0, 0, 0, \ . \ -. {* output_offset, output_section, alignment_power, *} \ +. {* output_offset, output_section, alignment_power, *} \ . 0, &SEC, 0, \ . \ -. {* relocation, orelocation, reloc_count, filepos, rel_filepos, *} \ +. {* relocation, orelocation, reloc_count, filepos, rel_filepos, *} \ . NULL, NULL, 0, 0, 0, \ . \ -. {* line_filepos, userdata, contents, lineno, lineno_count, *} \ +. {* line_filepos, userdata, contents, lineno, lineno_count, *} \ . 0, NULL, NULL, NULL, 0, \ . \ -. {* entsize, kept_section, moving_line_filepos, *} \ -. 0, NULL, 0, \ +. {* entsize, kept_section, moving_line_filepos, *} \ +. 0, NULL, 0, \ . \ -. {* target_index, used_by_bfd, constructor_chain, owner, *} \ +. {* target_index, used_by_bfd, constructor_chain, owner, *} \ . 0, NULL, NULL, NULL, \ . \ -. {* symbol, symbol_ptr_ptr, *} \ +. {* symbol, symbol_ptr_ptr, *} \ . (struct bfd_symbol *) SYM, &SEC.symbol, \ . \ -. {* map_head, map_tail *} \ -. { NULL }, { NULL } \ +. {* map_head, map_tail, already_assigned *} \ +. { NULL }, { NULL }, NULL \ +. \ . } . .{* We use a macro to initialize the static asymbol structures because diff -Nru gdb-9.1/bfd/simple.c gdb-10.2/bfd/simple.c --- gdb-9.1/bfd/simple.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/simple.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* simple.c -- BFD simple client routines - Copyright (C) 2002-2019 Free Software Foundation, Inc. + Copyright (C) 2002-2020 Free Software Foundation, Inc. Contributed by MontaVista Software, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -242,8 +242,7 @@ * saved_offsets.section_count); if (saved_offsets.sections == NULL) { - if (data) - free (data); + free (data); _bfd_generic_link_hash_table_free (abfd); abfd->link.next = link_next; return NULL; @@ -267,7 +266,7 @@ outbuf, 0, symbol_table); - if (contents == NULL && data != NULL) + if (contents == NULL) free (data); bfd_map_over_sections (abfd, simple_restore_output_info, &saved_offsets); diff -Nru gdb-9.1/bfd/som.c gdb-10.2/bfd/som.c --- gdb-9.1/bfd/som.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/som.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* bfd back-end for HP PA-RISC SOM objects. - Copyright (C) 1990-2019 Free Software Foundation, Inc. + Copyright (C) 1990-2020 Free Software Foundation, Inc. Contributed by the Center for Software Science at the University of Utah. @@ -37,7 +37,7 @@ static bfd_boolean som_is_space (asection *); static bfd_boolean som_is_subspace (asection *); static int compare_subspaces (const void *, const void *); -static unsigned long som_compute_checksum (struct som_external_header *); +static uint32_t som_compute_checksum (struct som_external_header *); static bfd_boolean som_build_and_write_symbol_table (bfd *); static unsigned int som_slurp_symbol_table (bfd *); @@ -1425,7 +1425,7 @@ /* The difference of two symbols needs *very* special handling. */ if (sym_diff) { - bfd_size_type amt = sizeof (int); + size_t amt = sizeof (int); final_types[0] = bfd_alloc (abfd, amt); final_types[1] = bfd_alloc (abfd, amt); @@ -1509,7 +1509,7 @@ /* The difference of two symbols needs *very* special handling. */ if (sym_diff) { - bfd_size_type amt = sizeof (int); + size_t amt = sizeof (int); final_types[0] = bfd_alloc (abfd, amt); final_types[1] = bfd_alloc (abfd, amt); @@ -1548,7 +1548,7 @@ /* If we have short and long pcrel modes, then generate the proper mode selector, then the pcrel relocation. Redundant selectors will be eliminated as the relocs are sized and emitted. */ - bfd_size_type amt = sizeof (int); + size_t amt = sizeof (int); final_types[0] = bfd_alloc (abfd, amt); if (!final_types[0]) @@ -1945,7 +1945,7 @@ /* Perform some initialization for an object. Save results of this initialization in the BFD. */ -static const bfd_target * +static bfd_cleanup som_object_setup (bfd *abfd, struct som_header *file_hdrp, struct som_exec_auxhdr *aux_hdrp, @@ -2060,7 +2060,7 @@ + current_offset); obj_som_exec_data (abfd)->system_id = file_hdrp->system_id; - return abfd->xvec; + return _bfd_no_cleanup; } /* Convert all of the space and subspace info into BFD sections. Each space @@ -2074,23 +2074,25 @@ struct som_header *file_hdr, unsigned long current_offset) { - char *space_strings; + char *space_strings = NULL; unsigned int space_index, i; unsigned int total_subspaces = 0; asection **subspace_sections = NULL; asection *section; - bfd_size_type amt; + size_t amt; /* First, read in space names. */ amt = file_hdr->space_strings_size; - space_strings = bfd_malloc (amt + 1); - if (space_strings == NULL && amt != 0) - goto error_return; - + if (amt == (size_t) -1) + { + bfd_set_error (bfd_error_no_memory); + goto error_return; + } if (bfd_seek (abfd, current_offset + file_hdr->space_strings_location, SEEK_SET) != 0) goto error_return; - if (bfd_bread (space_strings, amt, abfd) != amt) + space_strings = (char *) _bfd_malloc_and_read (abfd, amt + 1, amt); + if (space_strings == NULL) goto error_return; /* Make sure that the string table is NUL terminated. */ space_strings[amt] = 0; @@ -2195,6 +2197,9 @@ som_swap_subspace_dictionary_in (&ext_subspace, &subspace); /* Setup the subspace name string. */ + if (subspace.name >= file_hdr->space_strings_size) + goto error_return; + subspace_name = subspace.name + space_strings; amt = strlen (subspace_name) + 1; @@ -2339,8 +2344,11 @@ } /* Now that we've read in all the subspace records, we need to assign a target index to each subspace. */ - amt = total_subspaces; - amt *= sizeof (asection *); + if (_bfd_mul_overflow (total_subspaces, sizeof (asection *), &amt)) + { + bfd_set_error (bfd_error_file_too_big); + goto error_return; + } subspace_sections = bfd_malloc (amt); if (subspace_sections == NULL) goto error_return; @@ -2361,27 +2369,20 @@ for (i = 0; i < total_subspaces; i++) subspace_sections[i]->target_index = i; - if (space_strings != NULL) - free (space_strings); - - if (subspace_sections != NULL) - free (subspace_sections); - + free (space_strings); + free (subspace_sections); return TRUE; error_return: - if (space_strings != NULL) - free (space_strings); - - if (subspace_sections != NULL) - free (subspace_sections); + free (space_strings); + free (subspace_sections); return FALSE; } /* Read in a SOM object and make it into a BFD. */ -static const bfd_target * +static bfd_cleanup som_object_p (bfd *abfd) { struct som_external_header ext_file_hdr; @@ -2390,7 +2391,7 @@ unsigned long current_offset = 0; struct som_external_lst_header ext_lst_header; struct som_external_som_entry ext_som_entry; - bfd_size_type amt; + size_t amt; unsigned int loc; #define ENTRY_SIZE sizeof (struct som_external_som_entry) @@ -2545,7 +2546,7 @@ { struct som_header *file_hdr; asection *section; - bfd_size_type amt = sizeof (struct som_header); + size_t amt = sizeof (struct som_header); /* Make and attach a file header to the BFD. */ file_hdr = bfd_zalloc (abfd, amt); @@ -2795,13 +2796,16 @@ /* Perform various work in preparation for emitting the fixup stream. */ -static void +static bfd_boolean som_prep_for_fixups (bfd *abfd, asymbol **syms, unsigned long num_syms) { unsigned long i; asection *section; asymbol **sorted_syms; - bfd_size_type amt; + size_t amt; + + if (num_syms == 0) + return TRUE; /* Most SOM relocations involving a symbol have a length which is dependent on the index of the symbol. So symbols which are @@ -2873,9 +2877,14 @@ /* Sort a copy of the symbol table, rather than the canonical output symbol table. */ - amt = num_syms; - amt *= sizeof (asymbol *); + if (_bfd_mul_overflow (num_syms, sizeof (asymbol *), &amt)) + { + bfd_set_error (bfd_error_no_memory); + return FALSE; + } sorted_syms = bfd_zalloc (abfd, amt); + if (sorted_syms == NULL) + return FALSE; memcpy (sorted_syms, syms, num_syms * sizeof (asymbol *)); qsort (sorted_syms, num_syms, sizeof (asymbol *), compare_syms); obj_som_sorted_syms (abfd) = sorted_syms; @@ -2891,6 +2900,7 @@ else som_symbol_data (sorted_syms[i])->index = i; } + return TRUE; } static bfd_boolean @@ -2907,7 +2917,7 @@ unsigned int subspace_reloc_size = 0; unsigned int num_spaces = obj_som_file_hdr (abfd)->space_total; asection *section = abfd->sections; - bfd_size_type amt; + size_t amt; memset (tmp_space, 0, SOM_TMP_BUFSIZE); p = tmp_space; @@ -3313,7 +3323,7 @@ char *p = tmp_space; unsigned int strings_size = 0; asection *section; - bfd_size_type amt; + size_t amt; bfd_size_type res; if (tmp_space == NULL) @@ -3425,7 +3435,7 @@ char *tmp_space = bfd_malloc (tmp_space_size); char *p = tmp_space; unsigned int strings_size = 0; - bfd_size_type amt; + size_t amt; bfd_size_type res; if (tmp_space == NULL) @@ -3955,7 +3965,7 @@ asection *section; unsigned long current_offset; unsigned int strings_size, total_reloc_size; - bfd_size_type amt; + size_t amt; struct som_external_header ext_header; /* We must set up the version identifier here as objcopy/strip copy @@ -4009,9 +4019,10 @@ current_offset += strings_size; /* Do prep work before handling fixups. */ - som_prep_for_fixups (abfd, - bfd_get_outsymbols (abfd), - bfd_get_symcount (abfd)); + if (!som_prep_for_fixups (abfd, + bfd_get_outsymbols (abfd), + bfd_get_symcount (abfd))) + return FALSE; /* At the end of the file is the fixup stream which starts on a word boundary. */ @@ -4273,14 +4284,15 @@ /* Compute and return the checksum for a SOM file header. */ -static unsigned long +static uint32_t som_compute_checksum (struct som_external_header *hdr) { - unsigned long checksum, count, i; - unsigned long *buffer = (unsigned long *) hdr; + size_t count, i; + uint32_t checksum; + uint32_t *buffer = (uint32_t *) hdr; checksum = 0; - count = sizeof (struct som_external_header) / 4; + count = sizeof (*hdr) / sizeof (*buffer); for (i = 0; i < count; i++) checksum ^= *(buffer + i); @@ -4456,13 +4468,19 @@ struct som_external_symbol_dictionary_record *som_symtab = NULL; unsigned int i; bfd_size_type symtab_size; + size_t amt; /* Compute total symbol table size and allocate a chunk of memory to hold the symbol table as we build it. */ - symtab_size = num_syms; - symtab_size *= sizeof (struct som_external_symbol_dictionary_record); - som_symtab = bfd_zmalloc (symtab_size); - if (som_symtab == NULL && symtab_size != 0) + if (_bfd_mul_overflow (num_syms, + sizeof (struct som_external_symbol_dictionary_record), + &amt)) + { + bfd_set_error (bfd_error_no_memory); + return FALSE; + } + som_symtab = bfd_zmalloc (amt); + if (som_symtab == NULL && num_syms != 0) goto error_return; /* Walk over each symbol. */ @@ -4500,17 +4518,18 @@ /* Everything is ready, seek to the right location and scribble out the symbol table. */ if (bfd_seek (abfd, symtab_location, SEEK_SET) != 0) - return FALSE; + goto error_return; + symtab_size = num_syms; + symtab_size *= sizeof (struct som_external_symbol_dictionary_record); if (bfd_bwrite ((void *) som_symtab, symtab_size, abfd) != symtab_size) goto error_return; - if (som_symtab != NULL) - free (som_symtab); + free (som_symtab); return TRUE; + error_return: - if (som_symtab != NULL) - free (som_symtab); + free (som_symtab); return FALSE; } @@ -4555,15 +4574,11 @@ } /* Allocate and read in the string table. */ - amt = obj_som_stringtab_size (abfd); - stringtab = bfd_zmalloc (amt); - if (stringtab == NULL) - return FALSE; - if (bfd_seek (abfd, obj_som_str_filepos (abfd), SEEK_SET) != 0) return FALSE; - - if (bfd_bread (stringtab, amt, abfd) != amt) + amt = obj_som_stringtab_size (abfd); + stringtab = (char *) _bfd_malloc_and_read (abfd, amt, amt); + if (stringtab == NULL) return FALSE; /* Save our results and return success. */ @@ -4632,12 +4647,12 @@ static unsigned int som_slurp_symbol_table (bfd *abfd) { - int symbol_count = bfd_get_symcount (abfd); - int symsize = sizeof (struct som_external_symbol_dictionary_record); + unsigned int symbol_count = bfd_get_symcount (abfd); + size_t symsize = sizeof (struct som_external_symbol_dictionary_record); char *stringtab; struct som_external_symbol_dictionary_record *buf = NULL, *bufp, *endbufp; - som_symbol_type *sym, *symbase; - bfd_size_type amt; + som_symbol_type *sym, *symbase = NULL; + size_t amt; /* Return saved value if it exists. */ if (obj_som_symtab (abfd) != NULL) @@ -4652,21 +4667,26 @@ stringtab = obj_som_stringtab (abfd); - amt = symbol_count; - amt *= sizeof (som_symbol_type); - symbase = bfd_zmalloc (amt); - if (symbase == NULL) - goto error_return; - /* Read in the external SOM representation. */ - amt = symbol_count; - amt *= symsize; - buf = bfd_malloc (amt); - if (buf == NULL && amt != 0) - goto error_return; + if (_bfd_mul_overflow (symbol_count, symsize, &amt)) + { + bfd_set_error (bfd_error_file_too_big); + goto error_return; + } if (bfd_seek (abfd, obj_som_sym_filepos (abfd), SEEK_SET) != 0) goto error_return; - if (bfd_bread (buf, amt, abfd) != amt) + buf = (struct som_external_symbol_dictionary_record *) + _bfd_malloc_and_read (abfd, amt, amt); + if (buf == NULL) + goto error_return; + + if (_bfd_mul_overflow (symbol_count, sizeof (som_symbol_type), &amt)) + { + bfd_set_error (bfd_error_file_too_big); + goto error_return; + } + symbase = bfd_zmalloc (amt); + if (symbase == NULL) goto error_return; /* Iterate over all the symbols and internalize them. */ @@ -4803,13 +4823,12 @@ /* Save our results and return success. */ obj_som_symtab (abfd) = symbase; successful_return: - if (buf != NULL) - free (buf); + free (buf); return (TRUE); error_return: - if (buf != NULL) - free (buf); + free (symbase); + free (buf); return FALSE; } @@ -4841,7 +4860,7 @@ static asymbol * som_make_empty_symbol (bfd *abfd) { - bfd_size_type amt = sizeof (som_symbol_type); + size_t amt = sizeof (som_symbol_type); som_symbol_type *new_symbol_type = bfd_zalloc (abfd, amt); if (new_symbol_type == NULL) @@ -5204,8 +5223,7 @@ if (!bfd_malloc_and_get_section (section->owner, section, &contents)) { - if (contents != NULL) - free (contents); + free (contents); return (unsigned) -1; } section->contents = contents; @@ -5255,7 +5273,7 @@ unsigned int fixup_stream_size; arelent *internal_relocs; unsigned int num_relocs; - bfd_size_type amt; + size_t amt; fixup_stream_size = som_section_data (section)->reloc_size; /* If there were no relocations, then there is nothing to do. */ @@ -5266,17 +5284,13 @@ parsed. We must do so now to know how many relocations exist. */ if (section->reloc_count == (unsigned) -1) { - amt = fixup_stream_size; - external_relocs = bfd_malloc (amt); - if (external_relocs == NULL) - return FALSE; /* Read in the external forms. */ - if (bfd_seek (abfd, - obj_som_reloc_filepos (abfd) + section->rel_filepos, - SEEK_SET) - != 0) + if (bfd_seek (abfd, obj_som_reloc_filepos (abfd) + section->rel_filepos, + SEEK_SET) != 0) return FALSE; - if (bfd_bread (external_relocs, amt, abfd) != amt) + amt = fixup_stream_size; + external_relocs = _bfd_malloc_and_read (abfd, amt, amt); + if (external_relocs == NULL) return FALSE; /* Let callers know how many relocations found. @@ -5299,9 +5313,12 @@ if (section->relocation != NULL) return TRUE; - amt = num_relocs; - amt *= sizeof (arelent); - internal_relocs = bfd_zalloc (abfd, (amt)); + if (_bfd_mul_overflow (num_relocs, sizeof (arelent), &amt)) + { + bfd_set_error (bfd_error_file_too_big); + return FALSE; + } + internal_relocs = bfd_zalloc (abfd, amt); if (internal_relocs == NULL) return FALSE; @@ -5373,7 +5390,7 @@ { if (!newsect->used_by_bfd) { - bfd_size_type amt = sizeof (struct som_section_data_struct); + size_t amt = sizeof (struct som_section_data_struct); newsect->used_by_bfd = bfd_zalloc (abfd, amt); if (!newsect->used_by_bfd) @@ -5419,7 +5436,7 @@ bfd *obfd, asection *osection) { - bfd_size_type amt; + size_t amt; /* One day we may try to grok other private data. */ if (ibfd->xvec->flavour != bfd_target_som_flavour @@ -5438,8 +5455,18 @@ /* Reparent if necessary. */ if (som_section_data (osection)->copy_data->container) - som_section_data (osection)->copy_data->container = - som_section_data (osection)->copy_data->container->output_section; + { + if (som_section_data (osection)->copy_data->container->output_section) + som_section_data (osection)->copy_data->container = + som_section_data (osection)->copy_data->container->output_section; + else + { + /* User has specified a subspace without its containing space. */ + _bfd_error_handler (_("%pB[%pA]: no output section for space %pA"), + obfd, osection, som_section_data (osection)->copy_data->container); + return FALSE; + } + } return TRUE; } @@ -5527,7 +5554,7 @@ /* Allocate memory to hold the magic information. */ if (som_section_data (section)->copy_data == NULL) { - bfd_size_type amt = sizeof (struct som_copyable_section_data_struct); + size_t amt = sizeof (struct som_copyable_section_data_struct); som_section_data (section)->copy_data = bfd_zalloc (section->owner, amt); if (som_section_data (section)->copy_data == NULL) @@ -5557,7 +5584,7 @@ /* Allocate memory to hold the magic information. */ if (som_section_data (section)->copy_data == NULL) { - bfd_size_type amt = sizeof (struct som_copyable_section_data_struct); + size_t amt = sizeof (struct som_copyable_section_data_struct); som_section_data (section)->copy_data = bfd_zalloc (section->owner, amt); if (som_section_data (section)->copy_data == NULL) @@ -5591,7 +5618,7 @@ bfd_boolean bfd_som_attach_aux_hdr (bfd *abfd, int type, char *string) { - bfd_size_type amt; + size_t amt; if (type == VERSION_AUX_ID) { @@ -5612,7 +5639,7 @@ } else if (type == COPYRIGHT_AUX_ID) { - int len = strlen (string); + size_t len = strlen (string); int pad = 0; if (len % 4) @@ -5882,24 +5909,25 @@ { unsigned int i; unsigned char *hash_table; - bfd_size_type amt; + size_t amt; file_ptr lst_filepos; lst_filepos = bfd_tell (abfd) - sizeof (struct som_external_lst_header); - amt = lst_header->hash_size * 4; - hash_table = bfd_malloc (amt); - if (hash_table == NULL && amt != 0) + /* Read in the hash table. The hash table is an array of 32-bit + file offsets which point to the hash chains. */ + if (_bfd_mul_overflow (lst_header->hash_size, 4, &amt)) + { + bfd_set_error (bfd_error_file_too_big); + return FALSE; + } + hash_table = _bfd_malloc_and_read (abfd, amt, amt); + if (hash_table == NULL && lst_header->hash_size != 0) goto error_return; /* Don't forget to initialize the counter! */ *count = 0; - /* Read in the hash table. The has table is an array of 32bit file offsets - which point to the hash chains. */ - if (bfd_bread ((void *) hash_table, amt, abfd) != amt) - goto error_return; - /* Walk each chain counting the number of symbols found on that particular chain. */ for (i = 0; i < lst_header->hash_size; i++) @@ -5930,6 +5958,15 @@ if (next_entry == 0) break; + /* Assume symbols on a chain are in increasing file offset + order. Otherwise we can loop here with fuzzed input. */ + if (next_entry < hash_val + sizeof (ext_lst_symbol)) + { + bfd_set_error (bfd_error_bad_value); + goto error_return; + } + hash_val = next_entry; + /* Seek to the next symbol. */ if (bfd_seek (abfd, lst_filepos + next_entry, SEEK_SET) != 0) goto error_return; @@ -5942,13 +5979,11 @@ (*count)++; } } - if (hash_table != NULL) - free (hash_table); + free (hash_table); return TRUE; error_return: - if (hash_table != NULL) - free (hash_table); + free (hash_table); return FALSE; } @@ -5964,19 +5999,21 @@ carsym *set = syms[0]; unsigned char *hash_table; struct som_external_som_entry *som_dict = NULL; - bfd_size_type amt; + size_t amt; file_ptr lst_filepos; unsigned int string_loc; lst_filepos = bfd_tell (abfd) - sizeof (struct som_external_lst_header); - amt = lst_header->hash_size * 4; - hash_table = bfd_malloc (amt); - if (hash_table == NULL && amt != 0) - goto error_return; /* Read in the hash table. The has table is an array of 32bit file offsets which point to the hash chains. */ - if (bfd_bread ((void *) hash_table, amt, abfd) != amt) + if (_bfd_mul_overflow (lst_header->hash_size, 4, &amt)) + { + bfd_set_error (bfd_error_file_too_big); + return FALSE; + } + hash_table = _bfd_malloc_and_read (abfd, amt, amt); + if (hash_table == NULL && lst_header->hash_size != 0) goto error_return; /* Seek to and read in the SOM dictionary. We will need this to fill @@ -5984,12 +6021,15 @@ if (bfd_seek (abfd, lst_filepos + lst_header->dir_loc, SEEK_SET) != 0) goto error_return; - amt = lst_header->module_count * sizeof (struct som_external_som_entry); - som_dict = bfd_malloc (amt); - if (som_dict == NULL && amt != 0) - goto error_return; - - if (bfd_bread ((void *) som_dict, amt, abfd) != amt) + if (_bfd_mul_overflow (lst_header->module_count, + sizeof (struct som_external_som_entry), &amt)) + { + bfd_set_error (bfd_error_file_too_big); + goto error_return; + } + som_dict = (struct som_external_som_entry *) + _bfd_malloc_and_read (abfd, amt, amt); + if (som_dict == NULL && lst_header->module_count != 0) goto error_return; string_loc = lst_header->string_loc; @@ -5999,9 +6039,10 @@ { struct som_external_lst_symbol_record lst_symbol; unsigned int hash_val; - unsigned int len; + size_t len; unsigned char ext_len[4]; char *name; + unsigned int ndx; /* An empty chain has zero as it's file offset. */ hash_val = bfd_getb32 (hash_table + 4 * i); @@ -6032,20 +6073,27 @@ len = bfd_getb32 (ext_len); /* Allocate space for the name and null terminate it too. */ - name = bfd_zalloc (abfd, (bfd_size_type) len + 1); + if (len == (size_t) -1) + { + bfd_set_error (bfd_error_no_memory); + goto error_return; + } + name = (char *) _bfd_alloc_and_read (abfd, len + 1, len); if (!name) goto error_return; - if (bfd_bread (name, (bfd_size_type) len, abfd) != len) - goto error_return; - name[len] = 0; set->name = name; /* Fill in the file offset. Note that the "location" field points to the SOM itself, not the ar_hdr in front of it. */ - set->file_offset = - bfd_getb32 (som_dict[bfd_getb32 (lst_symbol.som_index)].location) - - sizeof (struct ar_hdr); + ndx = bfd_getb32 (lst_symbol.som_index); + if (ndx >= lst_header->module_count) + { + bfd_set_error (bfd_error_bad_value); + goto error_return; + } + set->file_offset + = bfd_getb32 (som_dict[ndx].location) - sizeof (struct ar_hdr); /* Go to the next symbol. */ set++; @@ -6076,20 +6124,27 @@ len = bfd_getb32 (ext_len); /* Allocate space for the name and null terminate it too. */ - name = bfd_zalloc (abfd, (bfd_size_type) len + 1); + if (len == (size_t) -1) + { + bfd_set_error (bfd_error_no_memory); + goto error_return; + } + name = (char *) _bfd_alloc_and_read (abfd, len + 1, len); if (!name) goto error_return; - - if (bfd_bread (name, (bfd_size_type) len, abfd) != len) - goto error_return; name[len] = 0; set->name = name; /* Fill in the file offset. Note that the "location" field points to the SOM itself, not the ar_hdr in front of it. */ - set->file_offset = - bfd_getb32 (som_dict[bfd_getb32 (lst_symbol.som_index)].location) - - sizeof (struct ar_hdr); + ndx = bfd_getb32 (lst_symbol.som_index); + if (ndx >= lst_header->module_count) + { + bfd_set_error (bfd_error_bad_value); + goto error_return; + } + set->file_offset + = bfd_getb32 (som_dict[ndx].location) - sizeof (struct ar_hdr); /* Go on to the next symbol. */ set++; @@ -6097,17 +6152,13 @@ } /* If we haven't died by now, then we successfully read the entire archive symbol table. */ - if (hash_table != NULL) - free (hash_table); - if (som_dict != NULL) - free (som_dict); + free (hash_table); + free (som_dict); return TRUE; error_return: - if (hash_table != NULL) - free (hash_table); - if (som_dict != NULL) - free (som_dict); + free (hash_table); + free (som_dict); return FALSE; } @@ -6122,7 +6173,7 @@ unsigned int parsed_size; struct artdata *ardata = bfd_ardata (abfd); char nextname[17]; - bfd_size_type amt = 16; + size_t amt = 16; int i = bfd_bread ((void *) nextname, amt, abfd); /* Special cases. */ @@ -6191,8 +6242,11 @@ /* Initialize the cache and allocate space for the library symbols. */ ardata->cache = 0; - amt = ardata->symdef_count; - amt *= sizeof (carsym); + if (_bfd_mul_overflow (ardata->symdef_count, sizeof (carsym), &amt)) + { + bfd_set_error (bfd_error_file_too_big); + return FALSE; + } ardata->symdefs = bfd_alloc (abfd, amt); if (!ardata->symdefs) return FALSE; @@ -6320,23 +6374,38 @@ struct som_external_som_entry *som_dict = NULL; struct som_external_lst_symbol_record **last_hash_entry = NULL; unsigned int curr_som_offset, som_index = 0; - bfd_size_type amt; + size_t amt; unsigned int module_count; unsigned int hash_size; hash_size = bfd_getb32 (lst.hash_size); - amt = hash_size * 4; + if (_bfd_mul_overflow (hash_size, 4, &amt)) + { + bfd_set_error (bfd_error_no_memory); + return FALSE; + } hash_table = bfd_zmalloc (amt); if (hash_table == NULL && hash_size != 0) goto error_return; module_count = bfd_getb32 (lst.module_count); - amt = module_count * sizeof (struct som_external_som_entry); + if (_bfd_mul_overflow (module_count, + sizeof (struct som_external_som_entry), &amt)) + { + bfd_set_error (bfd_error_no_memory); + goto error_return; + } som_dict = bfd_zmalloc (amt); if (som_dict == NULL && module_count != 0) goto error_return; - amt = hash_size * sizeof (struct som_external_lst_symbol_record *); + if (_bfd_mul_overflow (hash_size, + sizeof (struct som_external_lst_symbol_record *), + &amt)) + { + bfd_set_error (bfd_error_no_memory); + goto error_return; + } last_hash_entry = bfd_zmalloc (amt); if (last_hash_entry == NULL && hash_size != 0) goto error_return; @@ -6365,12 +6434,16 @@ curr_som_offset = (curr_som_offset + 0x1) & ~0x1; /* FIXME should be done with buffers just like everything else... */ - amt = nsyms; - amt *= sizeof (struct som_external_lst_symbol_record); + if (_bfd_mul_overflow (nsyms, + sizeof (struct som_external_lst_symbol_record), &amt)) + { + bfd_set_error (bfd_error_no_memory); + goto error_return; + } lst_syms = bfd_malloc (amt); if (lst_syms == NULL && nsyms != 0) goto error_return; - strings = bfd_malloc ((bfd_size_type) string_size); + strings = bfd_malloc (string_size); if (strings == NULL && string_size != 0) goto error_return; @@ -6515,17 +6588,17 @@ } /* Now scribble out the hash table. */ - amt = hash_size * 4; + amt = (size_t) hash_size * 4; if (bfd_bwrite ((void *) hash_table, amt, abfd) != amt) goto error_return; /* Then the SOM dictionary. */ - amt = module_count * sizeof (struct som_external_som_entry); + amt = (size_t) module_count * sizeof (struct som_external_som_entry); if (bfd_bwrite ((void *) som_dict, amt, abfd) != amt) goto error_return; /* The library symbols. */ - amt = nsyms * sizeof (struct som_external_lst_symbol_record); + amt = (size_t) nsyms * sizeof (struct som_external_lst_symbol_record); if (bfd_bwrite ((void *) lst_syms, amt, abfd) != amt) goto error_return; @@ -6534,29 +6607,19 @@ if (bfd_bwrite ((void *) strings, amt, abfd) != amt) goto error_return; - if (hash_table != NULL) - free (hash_table); - if (som_dict != NULL) - free (som_dict); - if (last_hash_entry != NULL) - free (last_hash_entry); - if (lst_syms != NULL) - free (lst_syms); - if (strings != NULL) - free (strings); + free (hash_table); + free (som_dict); + free (last_hash_entry); + free (lst_syms); + free (strings); return TRUE; error_return: - if (hash_table != NULL) - free (hash_table); - if (som_dict != NULL) - free (som_dict); - if (last_hash_entry != NULL) - free (last_hash_entry); - if (lst_syms != NULL) - free (lst_syms); - if (strings != NULL) - free (strings); + free (hash_table); + free (som_dict); + free (last_hash_entry); + free (lst_syms); + free (strings); return FALSE; } @@ -6578,12 +6641,12 @@ struct ar_hdr hdr; struct som_external_lst_header lst; unsigned char *p; - bfd_size_type amt; + size_t amt; unsigned int csum; unsigned int module_count; /* We'll use this for the archive's date and mode later. */ - if (stat (abfd->filename, &statbuf) != 0) + if (stat (bfd_get_filename (abfd), &statbuf) != 0) { bfd_set_error (bfd_error_system_call); return FALSE; @@ -6708,7 +6771,7 @@ { asection *o; -#define FREE(x) if (x != NULL) { free (x); x = NULL; } +#define FREE(x) do { free (x); x = NULL; } while (0) /* Free the native string and symbol tables. */ FREE (obj_som_symtab (abfd)); FREE (obj_som_stringtab (abfd)); diff -Nru gdb-9.1/bfd/som.h gdb-10.2/bfd/som.h --- gdb-9.1/bfd/som.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/som.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* HP PA-RISC SOM object file format: definitions internal to BFD. - Copyright (C) 1990-2019 Free Software Foundation, Inc. + Copyright (C) 1990-2020 Free Software Foundation, Inc. Contributed by the Center for Software Science at the University of Utah (pa-gdb-bugs@cs.utah.edu). diff -Nru gdb-9.1/bfd/srec.c gdb-10.2/bfd/srec.c --- gdb-9.1/bfd/srec.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/srec.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD back-end for s-record objects. - Copyright (C) 1990-2019 Free Software Foundation, Inc. + Copyright (C) 1990-2020 Free Software Foundation, Inc. Written by Steve Chamberlain of Cygnus Support . This file is part of BFD, the Binary File Descriptor library. @@ -493,8 +493,7 @@ if (bytes * 2 > bufsize) { - if (buf != NULL) - free (buf); + free (buf); buf = (bfd_byte *) bfd_malloc ((bfd_size_type) bytes * 2); if (buf == NULL) goto error_return; @@ -550,7 +549,7 @@ { char secbuf[20]; char *secname; - bfd_size_type amt; + size_t amt; flagword flags; sprintf (secbuf, ".sec%d", bfd_count_sections (abfd) + 1); @@ -618,9 +617,7 @@ goto error_return; } - if (buf != NULL) - free (buf); - + free (buf); return TRUE; } } @@ -631,22 +628,18 @@ if (error) goto error_return; - if (buf != NULL) - free (buf); - + free (buf); return TRUE; error_return: - if (symbuf != NULL) - free (symbuf); - if (buf != NULL) - free (buf); + free (symbuf); + free (buf); return FALSE; } /* Check whether an existing file is an S-record file. */ -static const bfd_target * +static bfd_cleanup srec_object_p (bfd *abfd) { void * tdata_save; @@ -676,12 +669,12 @@ if (abfd->symcount > 0) abfd->flags |= HAS_SYMS; - return abfd->xvec; + return _bfd_no_cleanup; } /* Check whether an existing file is an S-record file with symbols. */ -static const bfd_target * +static bfd_cleanup symbolsrec_object_p (bfd *abfd) { void * tdata_save; @@ -711,7 +704,7 @@ if (abfd->symcount > 0) abfd->flags |= HAS_SYMS; - return abfd->xvec; + return _bfd_no_cleanup; } /* Read in the contents of a section in an S-record file. */ @@ -751,8 +744,7 @@ if (bytes * 2 > bufsize) { - if (buf != NULL) - free (buf); + free (buf); buf = (bfd_byte *) bfd_malloc ((bfd_size_type) bytes * 2); if (buf == NULL) goto error_return; @@ -768,8 +760,7 @@ { default: BFD_ASSERT (sofar == section->size); - if (buf != NULL) - free (buf); + free (buf); return TRUE; case '3': @@ -793,8 +784,7 @@ { /* We've come to the end of this section. */ BFD_ASSERT (sofar == section->size); - if (buf != NULL) - free (buf); + free (buf); return TRUE; } @@ -817,14 +807,11 @@ BFD_ASSERT (sofar == section->size); - if (buf != NULL) - free (buf); - + free (buf); return TRUE; error_return: - if (buf != NULL) - free (buf); + free (buf); return FALSE; } @@ -1015,15 +1002,15 @@ static bfd_boolean srec_write_header (bfd *abfd) { - unsigned int len = strlen (abfd->filename); + unsigned int len = strlen (bfd_get_filename (abfd)); /* I'll put an arbitrary 40 char limit on header size. */ if (len > 40) len = 40; return srec_write_record (abfd, 0, (bfd_vma) 0, - (bfd_byte *) abfd->filename, - (bfd_byte *) abfd->filename + len); + (bfd_byte *) bfd_get_filename (abfd), + (bfd_byte *) bfd_get_filename (abfd) + len); } static bfd_boolean @@ -1089,9 +1076,9 @@ bfd_size_type len; asymbol **table = bfd_get_outsymbols (abfd); - len = strlen (abfd->filename); + len = strlen (bfd_get_filename (abfd)); if (bfd_bwrite ("$$ ", (bfd_size_type) 3, abfd) != 3 - || bfd_bwrite (abfd->filename, len, abfd) != len + || bfd_bwrite (bfd_get_filename (abfd), len, abfd) != len || bfd_bwrite ("\r\n", (bfd_size_type) 2, abfd) != 2) return FALSE; diff -Nru gdb-9.1/bfd/stabs.c gdb-10.2/bfd/stabs.c --- gdb-9.1/bfd/stabs.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/stabs.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Stabs in sections linking support. - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. Written by Ian Lance Taylor, Cygnus Support. This file is part of BFD, the Binary File Descriptor library. @@ -494,10 +494,8 @@ return TRUE; error_return: - if (stabbuf != NULL) - free (stabbuf); - if (stabstrbuf != NULL) - free (stabstrbuf); + free (stabbuf); + free (stabstrbuf); return FALSE; } @@ -648,8 +646,7 @@ return skip > 0; error_return: - if (stabbuf != NULL) - free (stabbuf); + free (stabbuf); return FALSE; } diff -Nru gdb-9.1/bfd/stab-syms.c gdb-10.2/bfd/stab-syms.c --- gdb-9.1/bfd/stab-syms.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/stab-syms.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Table of stab names for the BFD library. - Copyright (C) 1990-2019 Free Software Foundation, Inc. + Copyright (C) 1990-2020 Free Software Foundation, Inc. Written by Cygnus Support. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/syms.c gdb-10.2/bfd/syms.c --- gdb-9.1/bfd/syms.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/syms.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Generic symbol-table support for the BFD library. - Copyright (C) 1990-2019 Free Software Foundation, Inc. + Copyright (C) 1990-2020 Free Software Foundation, Inc. Written by Cygnus Support. This file is part of BFD, the Binary File Descriptor library. @@ -538,7 +538,7 @@ asymbol * _bfd_generic_make_empty_symbol (bfd *abfd) { - bfd_size_type amt = sizeof (asymbol); + size_t amt = sizeof (asymbol); asymbol *new_symbol = (asymbol *) bfd_zalloc (abfd, amt); if (new_symbol) new_symbol->the_bfd = abfd; @@ -565,30 +565,15 @@ char type; }; -/* Map section names to POSIX/BSD single-character symbol types. +/* Map special section names to POSIX/BSD single-character symbol types. This table is probably incomplete. It is sorted for convenience of adding entries. Since it is so short, a linear search is used. */ static const struct section_to_type stt[] = { - {".bss", 'b'}, - {"code", 't'}, /* MRI .text */ - {".data", 'd'}, - {"*DEBUG*", 'N'}, - {".debug", 'N'}, /* MSVC's .debug (non-standard debug syms) */ {".drectve", 'i'}, /* MSVC's .drective section */ {".edata", 'e'}, /* MSVC's .edata (export) section */ - {".fini", 't'}, /* ELF fini section */ {".idata", 'i'}, /* MSVC's .idata (import) section */ - {".init", 't'}, /* ELF init section */ {".pdata", 'p'}, /* MSVC's .pdata (stack unwind) section */ - {".rdata", 'r'}, /* Read only data. */ - {".rodata", 'r'}, /* Read only data. */ - {".sbss", 's'}, /* Small BSS (uninitialized data). */ - {".scommon", 'c'}, /* Small common. */ - {".sdata", 'g'}, /* Small initialized data. */ - {".text", 't'}, - {"vars", 'd'}, /* MRI .data */ - {"zerovars", 'b'}, /* MRI .bss */ {0, 0} }; @@ -596,8 +581,7 @@ section S, or '?' for an unknown COFF section. Check for leading strings which match, followed by a number, '.', - or '$' so .text5 matches the .text entry, but .init_array doesn't - match the .init entry. */ + or '$' so .idata5 matches the .idata entry. */ static char coff_section_type (const char *s) @@ -619,7 +603,7 @@ SECTION, or '?' for an unknown section. This uses section flags to identify sections. - FIXME These types are unhandled: c, i, e, p. If we handled these also, + FIXME These types are unhandled: e, i, p. If we handled these also, we could perhaps obsolete coff_section_type. */ static char @@ -668,7 +652,12 @@ char c; if (symbol->section && bfd_is_com_section (symbol->section)) - return 'C'; + { + if (symbol->section->flags & SEC_SMALL_DATA) + return 'c'; + else + return 'C'; + } if (bfd_is_und_section (symbol->section)) { if (symbol->flags & BSF_WEAK) @@ -705,9 +694,9 @@ c = 'a'; else if (symbol->section) { - c = decode_section_type (symbol->section); + c = coff_section_type (symbol->section->name); if (c == '?') - c = coff_section_type (symbol->section->name); + c = decode_section_type (symbol->section); } else return '?'; @@ -841,8 +830,7 @@ error_return: bfd_set_error (bfd_error_no_symbols); - if (syms != NULL) - free (syms); + free (syms); return -1; } @@ -1065,8 +1053,7 @@ symbols); if (reloc_count < 0) { - if (reloc_vector != NULL) - free (reloc_vector); + free (reloc_vector); return FALSE; } if (reloc_count > 0) @@ -1097,8 +1084,7 @@ _bfd_error_handler (_("unsupported .stab relocation")); bfd_set_error (bfd_error_invalid_operation); - if (reloc_vector != NULL) - free (reloc_vector); + free (reloc_vector); return FALSE; } @@ -1110,8 +1096,7 @@ } } - if (reloc_vector != NULL) - free (reloc_vector); + free (reloc_vector); /* First time through this function, build a table matching function VM addresses to stabs, then sort based on starting @@ -1479,6 +1464,7 @@ const char * _bfd_nosymbols_get_symbol_version_string (bfd *abfd, asymbol *symbol ATTRIBUTE_UNUSED, + bfd_boolean base_p ATTRIBUTE_UNUSED, bfd_boolean *hidden ATTRIBUTE_UNUSED) { return (const char *) _bfd_ptr_bfd_null_error (abfd); diff -Nru gdb-9.1/bfd/sysdep.h gdb-10.2/bfd/sysdep.h --- gdb-9.1/bfd/sysdep.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/sysdep.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* sysdep.h -- handle host dependencies for the BFD library - Copyright (C) 1995-2019 Free Software Foundation, Inc. + Copyright (C) 1995-2020 Free Software Foundation, Inc. Written by Cygnus Support. This file is part of BFD, the Binary File Descriptor library. @@ -187,7 +187,7 @@ This is because the code in this directory is used to build a library which will be linked with code in other directories to form - programs. We want to maintain a seperate translation file for this + programs. We want to maintain a separate translation file for this directory however, rather than being forced to merge it with that of any program linked to libbfd. This is a library, so it cannot depend on the catalog currently loaded. diff -Nru gdb-9.1/bfd/targets.c gdb-10.2/bfd/targets.c --- gdb-9.1/bfd/targets.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/targets.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Generic target-file-type support for the BFD library. - Copyright (C) 1990-2019 Free Software Foundation, Inc. + Copyright (C) 1990-2020 Free Software Foundation, Inc. Written by Cygnus Support. This file is part of BFD, the Binary File Descriptor library. @@ -176,6 +176,8 @@ .{* Forward declaration. *} .typedef struct flag_info flag_info; . +.typedef void (*bfd_cleanup) (bfd *); +. .typedef struct bfd_target .{ . {* Identifies the kind of target, e.g., SunOS4, Ultrix, etc. *} @@ -240,9 +242,9 @@ . {* Format dependent routines: these are vectors of entry points . within the target vector structure, one for each format to check. *} . -. {* Check the format of a file being read. Return a <> or zero. *} -. const struct bfd_target * -. (*_bfd_check_format[bfd_type_end]) (bfd *); +. {* Check the format of a file being read. Return a <> on +. success or zero on failure. *} +. bfd_cleanup (*_bfd_check_format[bfd_type_end]) (bfd *); . . {* Set the format of a file being written. *} . bfd_boolean (*_bfd_set_format[bfd_type_end]) (bfd *); @@ -390,9 +392,10 @@ .#define bfd_get_symbol_info(b,p,e) \ . BFD_SEND (b, _bfd_get_symbol_info, (b,p,e)) . const char *(*_bfd_get_symbol_version_string) (bfd *, struct bfd_symbol *, +. bfd_boolean, . bfd_boolean *); -.#define bfd_get_symbol_version_string(b,s,h) \ -. BFD_SEND (b, _bfd_get_symbol_version_string, (b,s,h)) +.#define bfd_get_symbol_version_string(b,s,p,h) \ +. BFD_SEND (b, _bfd_get_symbol_version_string, (b,s,p,h)) . bfd_boolean (*_bfd_is_local_label_name) (bfd *, const char *); . bfd_boolean (*_bfd_is_target_special_symbol) (bfd *, asymbol *); . alent * (*_get_lineno) (bfd *, struct bfd_symbol *); @@ -733,12 +736,12 @@ extern const bfd_target i386_coff_lynx_vec; extern const bfd_target i386_elf32_vec; extern const bfd_target i386_elf32_fbsd_vec; -extern const bfd_target i386_elf32_nacl_vec; extern const bfd_target i386_elf32_sol2_vec; extern const bfd_target i386_elf32_vxworks_vec; extern const bfd_target i386_mach_o_vec; extern const bfd_target i386_msdos_vec; extern const bfd_target i386_pe_vec; +extern const bfd_target i386_pe_big_vec; extern const bfd_target i386_pei_vec; extern const bfd_target iamcu_elf32_vec; extern const bfd_target ia64_elf32_be_vec; @@ -835,10 +838,6 @@ extern const bfd_target powerpc_elf64_vec; extern const bfd_target powerpc_elf64_le_vec; extern const bfd_target powerpc_elf64_fbsd_vec; -extern const bfd_target powerpc_pe_vec; -extern const bfd_target powerpc_pe_le_vec; -extern const bfd_target powerpc_pei_vec; -extern const bfd_target powerpc_pei_le_vec; extern const bfd_target powerpc_xcoff_vec; extern const bfd_target pru_elf32_vec; extern const bfd_target riscv_elf32_vec; @@ -879,7 +878,6 @@ extern const bfd_target sparc_elf64_sol2_vec; extern const bfd_target spu_elf32_vec; extern const bfd_target sym_vec; -extern const bfd_target tic30_aout_vec; extern const bfd_target tic30_coff_vec; extern const bfd_target tic4x_coff0_vec; extern const bfd_target tic4x_coff0_beh_vec; @@ -899,7 +897,6 @@ extern const bfd_target tic6x_elf32_c6000_le_vec; extern const bfd_target tic6x_elf32_linux_be_vec; extern const bfd_target tic6x_elf32_linux_le_vec; -extern const bfd_target tic80_coff_vec; extern const bfd_target tilegx_elf32_be_vec; extern const bfd_target tilegx_elf32_le_vec; extern const bfd_target tilegx_elf64_be_vec; @@ -916,15 +913,13 @@ extern const bfd_target wasm32_elf32_vec; extern const bfd_target x86_64_coff_vec; extern const bfd_target x86_64_elf32_vec; -extern const bfd_target x86_64_elf32_nacl_vec; extern const bfd_target x86_64_elf64_vec; extern const bfd_target x86_64_elf64_cloudabi_vec; extern const bfd_target x86_64_elf64_fbsd_vec; -extern const bfd_target x86_64_elf64_nacl_vec; extern const bfd_target x86_64_elf64_sol2_vec; extern const bfd_target x86_64_mach_o_vec; extern const bfd_target x86_64_pe_vec; -extern const bfd_target x86_64_pe_be_vec; +extern const bfd_target x86_64_pe_big_vec; extern const bfd_target x86_64_pei_vec; extern const bfd_target xc16x_elf32_vec; extern const bfd_target xgate_elf32_vec; @@ -932,6 +927,7 @@ extern const bfd_target xtensa_elf32_be_vec; extern const bfd_target xtensa_elf32_le_vec; extern const bfd_target z80_coff_vec; +extern const bfd_target z80_elf32_vec; extern const bfd_target z8k_coff_vec; /* These are always included. */ @@ -1082,12 +1078,12 @@ &i386_coff_lynx_vec, &i386_elf32_vec, &i386_elf32_fbsd_vec, - &i386_elf32_nacl_vec, &i386_elf32_sol2_vec, &i386_elf32_vxworks_vec, &i386_mach_o_vec, &i386_msdos_vec, &i386_pe_vec, + &i386_pe_big_vec, &i386_pei_vec, &iamcu_elf32_vec, @@ -1229,10 +1225,6 @@ &powerpc_elf64_le_vec, &powerpc_elf64_fbsd_vec, #endif - &powerpc_pe_vec, - &powerpc_pe_le_vec, - &powerpc_pei_vec, - &powerpc_pei_le_vec, #if 0 /* This has the same magic number as RS/6000. */ &powerpc_xcoff_vec, @@ -1296,7 +1288,6 @@ &sym_vec, - &tic30_aout_vec, &tic30_coff_vec, &tic54x_coff0_beh_vec, &tic54x_coff0_vec, @@ -1306,7 +1297,6 @@ &tic54x_coff2_vec, &tic6x_elf32_be_vec, &tic6x_elf32_le_vec, - &tic80_coff_vec, &tilegx_elf32_be_vec, &tilegx_elf32_le_vec, @@ -1333,15 +1323,13 @@ #ifdef BFD64 &x86_64_coff_vec, &x86_64_elf32_vec, - &x86_64_elf32_nacl_vec, &x86_64_elf64_vec, &x86_64_elf64_cloudabi_vec, &x86_64_elf64_fbsd_vec, - &x86_64_elf64_nacl_vec, &x86_64_elf64_sol2_vec, &x86_64_mach_o_vec, &x86_64_pe_vec, - &x86_64_pe_be_vec, + &x86_64_pe_big_vec, &x86_64_pei_vec, #endif @@ -1355,6 +1343,7 @@ &xtensa_elf32_le_vec, &z80_coff_vec, + &z80_elf32_vec, &z8k_coff_vec, #endif /* not SELECT_VECS */ @@ -1687,8 +1676,7 @@ _bfd_find_arch_match (tname, arches, def_target_arch); } - if (arches) - free (arches); + free (arches); } return target_vec; } @@ -1711,7 +1699,7 @@ bfd_target_list (void) { int vec_length = 0; - bfd_size_type amt; + size_t amt; const bfd_target * const *target; const char **name_list, **name_ptr; diff -Nru gdb-9.1/bfd/tekhex.c gdb-10.2/bfd/tekhex.c --- gdb-9.1/bfd/tekhex.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/tekhex.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD backend for Extended Tektronix Hex Format objects. - Copyright (C) 1992-2019 Free Software Foundation, Inc. + Copyright (C) 1992-2020 Free Software Foundation, Inc. Written by Steve Chamberlain of Cygnus Support . This file is part of BFD, the Binary File Descriptor library. @@ -428,7 +428,7 @@ case '8': /* Symbols, add to section. */ { - bfd_size_type amt = sizeof (tekhex_symbol_type); + size_t amt = sizeof (tekhex_symbol_type); tekhex_symbol_type *new_symbol = (tekhex_symbol_type *) bfd_alloc (abfd, amt); char stype = (*src); @@ -525,7 +525,7 @@ /* Find first '%'. */ is_eof = (bfd_boolean) (bfd_bread (src, (bfd_size_type) 1, abfd) != 1); - while (*src != '%' && !is_eof) + while (!is_eof && *src != '%') is_eof = (bfd_boolean) (bfd_bread (src, (bfd_size_type) 1, abfd) != 1); if (is_eof) @@ -600,7 +600,7 @@ /* Return TRUE if the file looks like it's in TekHex format. Just look for a percent sign and some hex digits. */ -static const bfd_target * +static bfd_cleanup tekhex_object_p (bfd *abfd) { char b[4]; @@ -619,7 +619,7 @@ if (!pass_over (abfd, first_phase)) return NULL; - return abfd->xvec; + return _bfd_no_cleanup; } static void @@ -912,7 +912,7 @@ static asymbol * tekhex_make_empty_symbol (bfd *abfd) { - bfd_size_type amt = sizeof (struct tekhex_symbol_struct); + size_t amt = sizeof (struct tekhex_symbol_struct); tekhex_symbol_type *new_symbol = (tekhex_symbol_type *) bfd_zalloc (abfd, amt); diff -Nru gdb-9.1/bfd/TODO gdb-10.2/bfd/TODO --- gdb-9.1/bfd/TODO 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/TODO 2021-04-25 04:06:26.000000000 +0000 @@ -20,7 +20,7 @@ o - upgrade the reloc handling as per Steve's suggestion. -Copyright (C) 2012-2019 Free Software Foundation, Inc. +Copyright (C) 2012-2020 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/bfd/trad-core.c gdb-10.2/bfd/trad-core.c --- gdb-9.1/bfd/trad-core.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/trad-core.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD back end for traditional Unix core files (U-area and raw sections) - Copyright (C) 1988-2019 Free Software Foundation, Inc. + Copyright (C) 1988-2020 Free Software Foundation, Inc. Written by John Gilmore of Cygnus Support. This file is part of BFD, the Binary File Descriptor library. @@ -71,13 +71,13 @@ /* Handle 4.2-style (and perhaps also sysV-style) core dump file. */ -static const bfd_target * +static bfd_cleanup trad_unix_core_file_p (bfd *abfd) { int val; struct user u; struct trad_core_struct *rawptr; - bfd_size_type amt; + size_t amt; flagword flags; #ifdef TRAD_CORE_USER_OFFSET @@ -220,7 +220,7 @@ core_datasec (abfd)->alignment_power = 2; core_regsec (abfd)->alignment_power = 2; - return abfd->xvec; + return _bfd_no_cleanup; fail: bfd_release (abfd, abfd->tdata.any); diff -Nru gdb-9.1/bfd/vax1knetbsd.c gdb-10.2/bfd/vax1knetbsd.c --- gdb-9.1/bfd/vax1knetbsd.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/vax1knetbsd.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD back-end for NetBSD/VAX (1K page size) a.out-ish binaries. - Copyright (C) 1998-2019 Free Software Foundation, Inc. + Copyright (C) 1998-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/vaxnetbsd.c gdb-10.2/bfd/vaxnetbsd.c --- gdb-9.1/bfd/vaxnetbsd.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/vaxnetbsd.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD back-end for NetBSD/VAX (4K page size) a.out-ish binaries. - Copyright (C) 1998-2019 Free Software Foundation, Inc. + Copyright (C) 1998-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/verilog.c gdb-10.2/bfd/verilog.c --- gdb-9.1/bfd/verilog.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/verilog.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD back-end for verilog hex memory dump files. - Copyright (C) 2009-2019 Free Software Foundation, Inc. + Copyright (C) 2009-2020 Free Software Foundation, Inc. Written by Anthony Green This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/version.h gdb-10.2/bfd/version.h --- gdb-9.1/bfd/version.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/bfd/version.h 2021-04-25 04:04:34.000000000 +0000 @@ -16,7 +16,7 @@ In releases, the date is not included in either version strings or sonames. */ -#define BFD_VERSION_DATE 20200208 +#define BFD_VERSION_DATE 20210425 #define BFD_VERSION @bfd_version@ #define BFD_VERSION_STRING @bfd_version_package@ @bfd_version_string@ #define REPORT_BUGS_TO @report_bugs_to@ diff -Nru gdb-9.1/bfd/version.m4 gdb-10.2/bfd/version.m4 --- gdb-9.1/bfd/version.m4 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/version.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1 +1 @@ -m4_define([BFD_VERSION], [2.33.50]) +m4_define([BFD_VERSION], [2.35.50]) diff -Nru gdb-9.1/bfd/vms-alpha.c gdb-10.2/bfd/vms-alpha.c --- gdb-9.1/bfd/vms-alpha.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/vms-alpha.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* vms.c -- BFD back-end for EVAX (openVMS/Alpha) files. - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. Initial version written by Klaus Kaempf (kkaempf@rmi.de) Major rewrite by Adacore. @@ -34,6 +34,7 @@ */ #include "sysdep.h" +#include #include "bfd.h" #include "bfdlink.h" #include "libbfd.h" @@ -71,6 +72,9 @@ #define MIN(a,b) ((a) < (b) ? (a) : (b)) +#ifndef CHAR_BIT +#define CHAR_BIT 8 +#endif /* The r_type field in a reloc is one of the following values. */ #define ALPHA_R_IGNORE 0 @@ -368,14 +372,16 @@ static int vms_get_remaining_object_record (bfd *, unsigned int); static bfd_boolean _bfd_vms_slurp_object_records (bfd * abfd); -static void alpha_vms_add_fixup_lp (struct bfd_link_info *, bfd *, bfd *); -static void alpha_vms_add_fixup_ca (struct bfd_link_info *, bfd *, bfd *); -static void alpha_vms_add_fixup_qr (struct bfd_link_info *, bfd *, bfd *, - bfd_vma); -static void alpha_vms_add_fixup_lr (struct bfd_link_info *, unsigned int, - bfd_vma); -static void alpha_vms_add_lw_reloc (struct bfd_link_info *); -static void alpha_vms_add_qw_reloc (struct bfd_link_info *); +static bfd_boolean alpha_vms_add_fixup_lp (struct bfd_link_info *, + bfd *, bfd *); +static bfd_boolean alpha_vms_add_fixup_ca (struct bfd_link_info *, + bfd *, bfd *); +static bfd_boolean alpha_vms_add_fixup_qr (struct bfd_link_info *, + bfd *, bfd *, bfd_vma); +static bfd_boolean alpha_vms_add_fixup_lr (struct bfd_link_info *, + unsigned int, bfd_vma); +static bfd_boolean alpha_vms_add_lw_reloc (struct bfd_link_info *); +static bfd_boolean alpha_vms_add_qw_reloc (struct bfd_link_info *); struct vector_type { @@ -401,17 +407,12 @@ /* Be sure there is room for a new element. */ -static void vector_grow1 (struct vector_type *vec, size_t elsz); +static void *vector_grow1 (struct vector_type *vec, size_t elsz); /* Allocate room for a new element and return its address. */ #define VEC_APPEND(VEC, TYPE) \ - (vector_grow1 (&VEC, sizeof (TYPE)), &VEC_EL(VEC, TYPE, (VEC).nbr_el++)) - -/* Append an element. */ - -#define VEC_APPEND_EL(VEC, TYPE, EL) \ - (*(VEC_APPEND (VEC, TYPE)) = EL) + ((TYPE *) vector_grow1 (&VEC, sizeof (TYPE))) struct alpha_vms_vma_ref { @@ -503,6 +504,7 @@ vms_debug2 ((4, "EIHD size %d imgtype %d symvva 0x%lx eisd %d eihs %d\n", size, imgtype, (unsigned long)symvva, *eisd_offset, *eihs_offset)); + (void) size; return TRUE; } @@ -529,12 +531,12 @@ asection *section; flagword bfd_flags; - /* PR 17512: file: 3d9e9fe9. - 12 is the offset of the eisdsize field from the start of the record (8) - plus the size of the eisdsize field (4). */ - if (offset >= PRIV (recrd.rec_size) - 12) + /* PR 17512: file: 3d9e9fe9. */ + if (offset > PRIV (recrd.rec_size) + || (PRIV (recrd.rec_size) - offset + < offsetof (struct vms_eisd, eisdsize) + 4)) return FALSE; - eisd = (struct vms_eisd *)(PRIV (recrd.rec) + offset); + eisd = (struct vms_eisd *) (PRIV (recrd.rec) + offset); rec_size = bfd_getl32 (eisd->eisdsize); if (rec_size == 0) break; @@ -547,11 +549,10 @@ } /* Make sure that there is enough data present in the record. */ - /* FIXME: Should we use sizeof (struct vms_eisd) rather than just 32 here ? */ - if (rec_size < 32) + if (rec_size < offsetof (struct vms_eisd, type) + 1) return FALSE; /* Make sure that the record is not too big either. */ - if (offset + rec_size >= PRIV (recrd.rec_size)) + if (rec_size > PRIV (recrd.rec_size) - offset) return FALSE; offset += rec_size; @@ -592,13 +593,16 @@ if (flags & EISD__M_GBL) { - if (rec_size < offsetof (struct vms_eisd, gblnam)) + if (rec_size <= offsetof (struct vms_eisd, gblnam)) return FALSE; else if (rec_size < sizeof (struct vms_eisd)) - name = _bfd_vms_save_counted_string (eisd->gblnam, + name = _bfd_vms_save_counted_string (abfd, eisd->gblnam, rec_size - offsetof (struct vms_eisd, gblnam)); else - name = _bfd_vms_save_counted_string (eisd->gblnam, EISD__K_GBLNAMLEN); + name = _bfd_vms_save_counted_string (abfd, eisd->gblnam, + EISD__K_GBLNAMLEN); + if (name == NULL || name[0] == 0) + return FALSE; bfd_flags |= SEC_COFF_SHARED_LIBRARY; bfd_flags &= ~(SEC_ALLOC | SEC_LOAD); } @@ -610,7 +614,9 @@ { const char *pfx; - name = (char*) bfd_alloc (abfd, 32); + name = (char *) bfd_alloc (abfd, 32); + if (name == NULL) + return FALSE; if (flags & EISD__M_DZRO) pfx = "BSS"; else if (flags & EISD__M_EXE) @@ -861,7 +867,7 @@ if (to_read > PRIV (recrd.buf_size)) { PRIV (recrd.buf) - = (unsigned char *) bfd_realloc (PRIV (recrd.buf), to_read); + = (unsigned char *) bfd_realloc_or_free (PRIV (recrd.buf), to_read); if (PRIV (recrd.buf) == NULL) return 0; PRIV (recrd.buf_size) = to_read; @@ -924,36 +930,39 @@ PRIV (hdr_data).hdr_l_recsiz = bfd_getl32 (vms_rec + 16); if ((vms_rec + 20 + vms_rec[20] + 1) >= end) goto fail; - PRIV (hdr_data).hdr_t_name = _bfd_vms_save_counted_string (vms_rec + 20, vms_rec[20]); + PRIV (hdr_data).hdr_t_name + = _bfd_vms_save_counted_string (abfd, vms_rec + 20, vms_rec[20]); ptr = vms_rec + 20 + vms_rec[20] + 1; if ((ptr + *ptr + 1) >= end) goto fail; - PRIV (hdr_data).hdr_t_version =_bfd_vms_save_counted_string (ptr, *ptr); + PRIV (hdr_data).hdr_t_version + = _bfd_vms_save_counted_string (abfd, ptr, *ptr); ptr += *ptr + 1; if (ptr + 17 >= end) goto fail; - PRIV (hdr_data).hdr_t_date = _bfd_vms_save_sized_string (ptr, 17); + PRIV (hdr_data).hdr_t_date + = _bfd_vms_save_sized_string (abfd, ptr, 17); break; case EMH__C_LNM: if (vms_rec + PRIV (recrd.rec_size - 6) > end) goto fail; - PRIV (hdr_data).hdr_c_lnm = - _bfd_vms_save_sized_string (vms_rec, PRIV (recrd.rec_size - 6)); + PRIV (hdr_data).hdr_c_lnm + = _bfd_vms_save_sized_string (abfd, vms_rec, PRIV (recrd.rec_size - 6)); break; case EMH__C_SRC: if (vms_rec + PRIV (recrd.rec_size - 6) > end) goto fail; - PRIV (hdr_data).hdr_c_src = - _bfd_vms_save_sized_string (vms_rec, PRIV (recrd.rec_size - 6)); + PRIV (hdr_data).hdr_c_src + = _bfd_vms_save_sized_string (abfd, vms_rec, PRIV (recrd.rec_size - 6)); break; case EMH__C_TTL: if (vms_rec + PRIV (recrd.rec_size - 6) > end) goto fail; - PRIV (hdr_data).hdr_c_ttl = - _bfd_vms_save_sized_string (vms_rec, PRIV (recrd.rec_size - 6)); + PRIV (hdr_data).hdr_c_ttl + = _bfd_vms_save_sized_string (abfd, vms_rec, PRIV (recrd.rec_size - 6)); break; case EMH__C_CPR: @@ -1121,7 +1130,7 @@ else { PRIV (max_sym_count) *= 2; - PRIV (syms) = bfd_realloc + PRIV (syms) = bfd_realloc_or_free (PRIV (syms), (PRIV (max_sym_count) * sizeof (struct vms_symbol_entry *))); } @@ -1137,12 +1146,20 @@ Return NULL in case of error. */ static struct vms_symbol_entry * -add_symbol (bfd *abfd, const unsigned char *ascic) +add_symbol (bfd *abfd, const unsigned char *ascic, unsigned int max) { struct vms_symbol_entry *entry; - int len; + unsigned int len; len = *ascic++; + max -= 1; + if (len > max) + { + _bfd_error_handler (_("record is too small for symbol name length")); + bfd_set_error (bfd_error_bad_value); + return NULL; + } + entry = (struct vms_symbol_entry *)bfd_zalloc (abfd, sizeof (*entry) + len); if (entry == NULL) return NULL; @@ -1164,7 +1181,8 @@ int gsd_type; unsigned int gsd_size; unsigned char *vms_rec; - unsigned long base_addr; + bfd_vma base_addr; + long psindx; vms_debug2 ((2, "EGSD\n")); @@ -1180,7 +1198,7 @@ PRIV (recrd.rec_size) -= 8; /* Calculate base address for each section. */ - base_addr = 0L; + base_addr = 0; while (PRIV (recrd.rec_size) > 4) { @@ -1194,16 +1212,19 @@ /* PR 21615: Check for size overflow. */ if (PRIV (recrd.rec_size) < gsd_size) { - _bfd_error_handler (_("corrupt EGSD record: size (%#x) is larger than remaining space (%#x)"), - gsd_size, PRIV (recrd.rec_size)); + _bfd_error_handler (_("corrupt EGSD record type %d: size (%#x) " + "is larger than remaining space (%#x)"), + gsd_type, gsd_size, PRIV (recrd.rec_size)); bfd_set_error (bfd_error_bad_value); return FALSE; } if (gsd_size < 4) { - _bfd_error_handler (_("corrupt EGSD record: size (%#x) is too small"), - gsd_size); + too_small: + _bfd_error_handler (_("corrupt EGSD record type %d: size (%#x) " + "is too small"), + gsd_type, gsd_size); bfd_set_error (bfd_error_bad_value); return FALSE; } @@ -1213,10 +1234,12 @@ case EGSD__C_PSC: /* Program section definition. */ { - struct vms_egps *egps = (struct vms_egps *)vms_rec; + struct vms_egps *egps = (struct vms_egps *) vms_rec; flagword new_flags, vms_flags; asection *section; + if (offsetof (struct vms_egps, flags) + 2 > gsd_size) + goto too_small; vms_flags = bfd_getl16 (egps->flags); if ((vms_flags & EGPS__V_REL) == 0) @@ -1228,9 +1251,15 @@ else { char *name; - unsigned long align_addr; + bfd_vma align_addr; + size_t left; - name = _bfd_vms_save_counted_string (&egps->namlng, gsd_size - 4); + if (offsetof (struct vms_egps, namlng) >= gsd_size) + goto too_small; + left = gsd_size - offsetof (struct vms_egps, namlng); + name = _bfd_vms_save_counted_string (abfd, &egps->namlng, left); + if (name == NULL || name[0] == 0) + return FALSE; section = bfd_make_section (abfd, name); if (!section) @@ -1238,12 +1267,13 @@ section->filepos = 0; section->size = bfd_getl32 (egps->alloc); - section->alignment_power = egps->align; + section->alignment_power = egps->align & 31; vms_section_data (section)->flags = vms_flags; vms_section_data (section)->no_flags = 0; - new_flags = vms_secflag_by_name (evax_section_flags, name, + new_flags = vms_secflag_by_name (evax_section_flags, + section->name, section->size > 0); if (section->size > 0) new_flags |= SEC_LOAD; @@ -1265,10 +1295,9 @@ return FALSE; /* Give a non-overlapping vma to non absolute sections. */ - align_addr = (1 << section->alignment_power); - if ((base_addr % align_addr) != 0) - base_addr += (align_addr - (base_addr % align_addr)); - section->vma = (bfd_vma)base_addr; + align_addr = (bfd_vma) 1 << section->alignment_power; + base_addr = (base_addr + align_addr - 1) & -align_addr; + section->vma = base_addr; base_addr += section->size; } @@ -1292,18 +1321,22 @@ case EGSD__C_SYM: { - int nameoff; + unsigned int nameoff; struct vms_symbol_entry *entry; struct vms_egsy *egsy = (struct vms_egsy *) vms_rec; flagword old_flags; + if (offsetof (struct vms_egsy, flags) + 2 > gsd_size) + goto too_small; old_flags = bfd_getl16 (egsy->flags); if (old_flags & EGSY__V_DEF) nameoff = ESDF__B_NAMLNG; else nameoff = ESRF__B_NAMLNG; - entry = add_symbol (abfd, vms_rec + nameoff); + if (nameoff >= gsd_size) + goto too_small; + entry = add_symbol (abfd, vms_rec + nameoff, gsd_size - nameoff); if (entry == NULL) return FALSE; @@ -1320,8 +1353,7 @@ if (old_flags & EGSY__V_DEF) { - struct vms_esdf *esdf = (struct vms_esdf *)vms_rec; - long psindx; + struct vms_esdf *esdf = (struct vms_esdf *) vms_rec; entry->value = bfd_getl64 (esdf->value); if (PRIV (sections) == NULL) @@ -1331,7 +1363,9 @@ /* PR 21813: Check for an out of range index. */ if (psindx < 0 || psindx >= (int) PRIV (section_count)) { - _bfd_error_handler (_("corrupt EGSD record: its psindx field is too big (%#lx)"), + bad_psindx: + _bfd_error_handler (_("corrupt EGSD record: its psindx " + "field is too big (%#lx)"), psindx); bfd_set_error (bfd_error_bad_value); return FALSE; @@ -1344,14 +1378,9 @@ entry->code_value = bfd_getl64 (esdf->code_address); psindx = bfd_getl32 (esdf->ca_psindx); - /* PR 21813: Check for an out of range index. */ + /* PR 21813: Check for an out of range index. */ if (psindx < 0 || psindx >= (int) PRIV (section_count)) - { - _bfd_error_handler (_("corrupt EGSD record: its psindx field is too big (%#lx)"), - psindx); - bfd_set_error (bfd_error_bad_value); - return FALSE; - } + goto bad_psindx; entry->code_section = PRIV (sections)[psindx]; } } @@ -1363,11 +1392,13 @@ struct vms_symbol_entry *entry; struct vms_egst *egst = (struct vms_egst *)vms_rec; flagword old_flags; + unsigned int nameoff = offsetof (struct vms_egst, namlng); old_flags = bfd_getl16 (egst->header.flags); - entry = add_symbol (abfd, &egst->namlng); - + if (nameoff >= gsd_size) + goto too_small; + entry = add_symbol (abfd, &egst->namlng, gsd_size - nameoff); if (entry == NULL) return FALSE; @@ -1379,19 +1410,12 @@ if (old_flags & EGSY__V_REL) { - long psindx; - if (PRIV (sections) == NULL) return FALSE; psindx = bfd_getl32 (egst->psindx); /* PR 21813: Check for an out of range index. */ if (psindx < 0 || psindx >= (int) PRIV (section_count)) - { - _bfd_error_handler (_("corrupt EGSD record: its psindx field is too big (%#lx)"), - psindx); - bfd_set_error (bfd_error_bad_value); - return FALSE; - } + goto bad_psindx; entry->section = PRIV (sections)[psindx]; } else @@ -1437,7 +1461,7 @@ /* Push value and section index. */ -static void +static bfd_boolean _bfd_vms_push (bfd *abfd, bfd_vma val, unsigned int reloc) { vms_debug2 ((4, "\n", @@ -1450,26 +1474,28 @@ { bfd_set_error (bfd_error_bad_value); _bfd_error_handler (_("stack overflow (%d) in _bfd_vms_push"), PRIV (stackptr)); - exit (1); + return FALSE; } + return TRUE; } /* Pop value and section index. */ -static void +static bfd_boolean _bfd_vms_pop (bfd *abfd, bfd_vma *val, unsigned int *rel) { if (PRIV (stackptr) == 0) { bfd_set_error (bfd_error_bad_value); _bfd_error_handler (_("stack underflow in _bfd_vms_pop")); - exit (1); + return FALSE; } PRIV (stackptr)--; *val = PRIV (stack[PRIV (stackptr)]).value; *rel = PRIV (stack[PRIV (stackptr)]).reloc; vms_debug2 ((4, "\n", (unsigned long)*val, *rel)); + return TRUE; } /* Routines to fill sections contents during tir/etir read. */ @@ -1526,40 +1552,62 @@ /* Save current DST location counter under specified index. */ -static void +static bfd_boolean dst_define_location (bfd *abfd, unsigned int loc) { vms_debug2 ((4, "dst_define_location (%d)\n", (int)loc)); + if (loc > 1 << 24) + { + /* 16M entries ought to be plenty. */ + bfd_set_error (bfd_error_bad_value); + _bfd_error_handler (_("dst_define_location %u too large"), loc); + return FALSE; + } + /* Grow the ptr offset table if necessary. */ if (loc + 1 > PRIV (dst_ptr_offsets_count)) { - PRIV (dst_ptr_offsets) = bfd_realloc (PRIV (dst_ptr_offsets), - (loc + 1) * sizeof (unsigned int)); + PRIV (dst_ptr_offsets) + = bfd_realloc_or_free (PRIV (dst_ptr_offsets), + (loc + 1) * sizeof (unsigned int)); + if (PRIV (dst_ptr_offsets) == NULL) + return FALSE; PRIV (dst_ptr_offsets_count) = loc + 1; } PRIV (dst_ptr_offsets)[loc] = PRIV (image_offset); + return TRUE; } /* Restore saved DST location counter from specified index. */ -static void +static bfd_boolean dst_restore_location (bfd *abfd, unsigned int loc) { vms_debug2 ((4, "dst_restore_location (%d)\n", (int)loc)); - PRIV (image_offset) = PRIV (dst_ptr_offsets)[loc]; + if (loc < PRIV (dst_ptr_offsets_count)) + { + PRIV (image_offset) = PRIV (dst_ptr_offsets)[loc]; + return TRUE; + } + return FALSE; } /* Retrieve saved DST location counter from specified index. */ -static unsigned int -dst_retrieve_location (bfd *abfd, unsigned int loc) +static bfd_boolean +dst_retrieve_location (bfd *abfd, bfd_vma *loc) { - vms_debug2 ((4, "dst_retrieve_location (%d)\n", (int)loc)); + vms_debug2 ((4, "dst_retrieve_location (%d)\n", (int) *loc)); - return PRIV (dst_ptr_offsets)[loc]; + if (*loc < PRIV (dst_ptr_offsets_count)) + { + *loc = PRIV (dst_ptr_offsets)[*loc]; + return TRUE; + } + return FALSE; } /* Write multiple bytes to section image. */ @@ -1567,29 +1615,39 @@ static bfd_boolean image_write (bfd *abfd, unsigned char *ptr, unsigned int size) { + asection *sec = PRIV (image_section); + size_t off = PRIV (image_offset); + + /* Check bounds. */ + if (off > sec->size + || size > sec->size - off) + { + bfd_set_error (bfd_error_bad_value); + return FALSE; + } + #if VMS_DEBUG _bfd_vms_debug (8, "image_write from (%p, %d) to (%ld)\n", ptr, size, - (long)PRIV (image_offset)); - _bfd_hexdump (9, ptr, size, 0); + (long) off)); #endif if (PRIV (image_section)->contents != NULL) + memcpy (sec->contents + off, ptr, size); + else { - asection *sec = PRIV (image_section); - file_ptr off = PRIV (image_offset); - - /* Check bounds. */ - if (off > (file_ptr)sec->size - || size > (file_ptr)sec->size - || off + size > (file_ptr)sec->size) - { - bfd_set_error (bfd_error_bad_value); - return FALSE; - } - - memcpy (sec->contents + off, ptr, size); + unsigned int i; + for (i = 0; i < size; i++) + if (ptr[i] != 0) + { + bfd_set_error (bfd_error_bad_value); + return FALSE; + } } +#if VMS_DEBUG + _bfd_hexdump (9, ptr, size, 0); +#endif + PRIV (image_offset) += size; return TRUE; } @@ -1837,10 +1895,10 @@ unsigned char *ptr; unsigned int length; unsigned char *maxptr; - bfd_vma op1; - bfd_vma op2; - unsigned int rel1; - unsigned int rel2; + bfd_vma op1 = 0; + bfd_vma op2 = 0; + unsigned int rel1 = RELC_NONE; + unsigned int rel2 = RELC_NONE; struct alpha_vms_link_hash_entry *h; PRIV (recrd.rec) += ETIR__C_HEADER_SIZE; @@ -1854,24 +1912,29 @@ while (ptr < maxptr) { - int cmd = bfd_getl16 (ptr); - int cmd_length = bfd_getl16 (ptr + 2); + int cmd, cmd_length; - ptr += 4; + if (ptr + 4 > maxptr) + goto corrupt_etir; + + cmd = bfd_getl16 (ptr); + cmd_length = bfd_getl16 (ptr + 2); /* PR 21589 and 21579: Check for a corrupt ETIR record. */ - if (cmd_length < 4 || (ptr + cmd_length > maxptr + 4)) + if (cmd_length < 4 || ptr + cmd_length > maxptr) { corrupt_etir: _bfd_error_handler (_("corrupt ETIR record encountered")); bfd_set_error (bfd_error_bad_value); return FALSE; } + ptr += 4; + cmd_length -= 4; #if VMS_DEBUG _bfd_vms_debug (4, "etir: %s(%d)\n", _bfd_vms_etir_name (cmd), cmd); - _bfd_hexdump (8, ptr, cmd_length - 4, 0); + _bfd_hexdump (8, ptr, cmd_length, 0); #endif switch (cmd) @@ -1881,8 +1944,9 @@ stack 32 bit value of symbol (high bits set to 0). */ case ETIR__C_STA_GBL: - _bfd_vms_get_value (abfd, ptr, maxptr, info, &op1, &h); - _bfd_vms_push (abfd, op1, alpha_vms_sym_to_ctxt (h)); + _bfd_vms_get_value (abfd, ptr, ptr + cmd_length, info, &op1, &h); + if (!_bfd_vms_push (abfd, op1, alpha_vms_sym_to_ctxt (h))) + return FALSE; break; /* Stack longword @@ -1890,9 +1954,10 @@ stack 32 bit value, sign extend to 64 bit. */ case ETIR__C_STA_LW: - if (ptr + 4 >= maxptr) + if (cmd_length < 4) goto corrupt_etir; - _bfd_vms_push (abfd, bfd_getl32 (ptr), RELC_NONE); + if (!_bfd_vms_push (abfd, bfd_getl32 (ptr), RELC_NONE)) + return FALSE; break; /* Stack quadword @@ -1900,9 +1965,10 @@ stack 64 bit value of symbol. */ case ETIR__C_STA_QW: - if (ptr + 8 >= maxptr) + if (cmd_length < 8) goto corrupt_etir; - _bfd_vms_push (abfd, bfd_getl64 (ptr), RELC_NONE); + if (!_bfd_vms_push (abfd, bfd_getl64 (ptr), RELC_NONE)) + return FALSE; break; /* Stack psect base plus quadword offset @@ -1915,7 +1981,7 @@ { int psect; - if (ptr + 12 >= maxptr) + if (cmd_length < 12) goto corrupt_etir; psect = bfd_getl32 (ptr); if ((unsigned int) psect >= PRIV (section_count)) @@ -1926,7 +1992,8 @@ return FALSE; } op1 = bfd_getl64 (ptr + 4); - _bfd_vms_push (abfd, op1, psect | RELC_SEC_BASE); + if (!_bfd_vms_push (abfd, op1, psect | RELC_SEC_BASE)) + return FALSE; } break; @@ -1941,25 +2008,30 @@ /* Store byte: pop stack, write byte arg: -. */ case ETIR__C_STO_B: - _bfd_vms_pop (abfd, &op1, &rel1); + if (!_bfd_vms_pop (abfd, &op1, &rel1)) + return FALSE; if (rel1 != RELC_NONE) goto bad_context; - image_write_b (abfd, (unsigned int) op1 & 0xff); + if (!image_write_b (abfd, (unsigned int) op1 & 0xff)) + return FALSE; break; /* Store word: pop stack, write word arg: -. */ case ETIR__C_STO_W: - _bfd_vms_pop (abfd, &op1, &rel1); + if (!_bfd_vms_pop (abfd, &op1, &rel1)) + return FALSE; if (rel1 != RELC_NONE) goto bad_context; - image_write_w (abfd, (unsigned int) op1 & 0xffff); + if (!image_write_w (abfd, (unsigned int) op1 & 0xffff)) + return FALSE; break; /* Store longword: pop stack, write longword arg: -. */ case ETIR__C_STO_LW: - _bfd_vms_pop (abfd, &op1, &rel1); + if (!_bfd_vms_pop (abfd, &op1, &rel1)) + return FALSE; if (rel1 & RELC_SEC_BASE) { op1 = alpha_vms_fix_sec_rel (abfd, info, rel1, op1); @@ -1967,22 +2039,26 @@ } else if (rel1 & RELC_SHR_BASE) { - alpha_vms_add_fixup_lr (info, rel1 & RELC_MASK, op1); + if (!alpha_vms_add_fixup_lr (info, rel1 & RELC_MASK, op1)) + return FALSE; rel1 = RELC_NONE; } if (rel1 != RELC_NONE) { if (rel1 != RELC_REL) abort (); - alpha_vms_add_lw_reloc (info); + if (!alpha_vms_add_lw_reloc (info)) + return FALSE; } - image_write_l (abfd, op1); + if (!image_write_l (abfd, op1)) + return FALSE; break; /* Store quadword: pop stack, write quadword arg: -. */ case ETIR__C_STO_QW: - _bfd_vms_pop (abfd, &op1, &rel1); + if (!_bfd_vms_pop (abfd, &op1, &rel1)) + return FALSE; if (rel1 & RELC_SEC_BASE) { op1 = alpha_vms_fix_sec_rel (abfd, info, rel1, op1); @@ -1994,9 +2070,11 @@ { if (rel1 != RELC_REL) abort (); - alpha_vms_add_qw_reloc (info); + if (!alpha_vms_add_qw_reloc (info)) + return FALSE; } - image_write_q (abfd, op1); + if (!image_write_q (abfd, op1)) + return FALSE; break; /* Store immediate repeated: pop stack for repeat count @@ -2006,43 +2084,53 @@ { int size; - if (ptr + 4 >= maxptr) + if (cmd_length < 4) goto corrupt_etir; size = bfd_getl32 (ptr); - _bfd_vms_pop (abfd, &op1, &rel1); + if (size > cmd_length - 4) + goto corrupt_etir; + if (!_bfd_vms_pop (abfd, &op1, &rel1)) + return FALSE; if (rel1 != RELC_NONE) goto bad_context; + if (size == 0) + break; + op1 &= 0xffffffff; while (op1-- > 0) - image_write (abfd, ptr + 4, size); + if (!image_write (abfd, ptr + 4, size)) + return FALSE; } break; /* Store global: write symbol value arg: cs global symbol name. */ case ETIR__C_STO_GBL: - _bfd_vms_get_value (abfd, ptr, maxptr, info, &op1, &h); + _bfd_vms_get_value (abfd, ptr, ptr + cmd_length, info, &op1, &h); if (h && h->sym) { if (h->sym->typ == EGSD__C_SYMG) { - alpha_vms_add_fixup_qr - (info, abfd, h->sym->owner, h->sym->symbol_vector); + if (!alpha_vms_add_fixup_qr (info, abfd, h->sym->owner, + h->sym->symbol_vector)) + return FALSE; op1 = 0; } else { op1 = alpha_vms_get_sym_value (h->sym->section, h->sym->value); - alpha_vms_add_qw_reloc (info); + if (!alpha_vms_add_qw_reloc (info)) + return FALSE; } } - image_write_q (abfd, op1); + if (!image_write_q (abfd, op1)) + return FALSE; break; /* Store code address: write address of entry point arg: cs global symbol name (procedure). */ case ETIR__C_STO_CA: - _bfd_vms_get_value (abfd, ptr, maxptr, info, &op1, &h); + _bfd_vms_get_value (abfd, ptr, ptr + cmd_length, info, &op1, &h); if (h && h->sym) { if (h->sym->flags & EGSY__V_NORM) @@ -2050,14 +2138,16 @@ /* That's really a procedure. */ if (h->sym->typ == EGSD__C_SYMG) { - alpha_vms_add_fixup_ca (info, abfd, h->sym->owner); + if (!alpha_vms_add_fixup_ca (info, abfd, h->sym->owner)) + return FALSE; op1 = h->sym->symbol_vector; } else { op1 = alpha_vms_get_sym_value (h->sym->code_section, h->sym->code_value); - alpha_vms_add_qw_reloc (info); + if (!alpha_vms_add_qw_reloc (info)) + return FALSE; } } else @@ -2066,20 +2156,23 @@ abort (); } } - image_write_q (abfd, op1); + if (!image_write_q (abfd, op1)) + return FALSE; break; /* Store offset to psect: pop stack, add low 32 bits to base of psect arg: none. */ case ETIR__C_STO_OFF: - _bfd_vms_pop (abfd, &op1, &rel1); + if (!_bfd_vms_pop (abfd, &op1, &rel1)) + return FALSE; if (!(rel1 & RELC_SEC_BASE)) abort (); op1 = alpha_vms_fix_sec_rel (abfd, info, rel1, op1); rel1 = RELC_REL; - image_write_q (abfd, op1); + if (!image_write_q (abfd, op1)) + return FALSE; break; /* Store immediate @@ -2089,10 +2182,11 @@ { unsigned int size; - if (ptr + 4 >= maxptr) + if (cmd_length < 4) goto corrupt_etir; size = bfd_getl32 (ptr); - image_write (abfd, ptr + 4, size); + if (!image_write (abfd, ptr + 4, size)) + return FALSE; } break; @@ -2103,11 +2197,12 @@ store global longword: store 32bit value of symbol arg: cs symbol name. */ case ETIR__C_STO_GBL_LW: - _bfd_vms_get_value (abfd, ptr, maxptr, info, &op1, &h); + _bfd_vms_get_value (abfd, ptr, ptr + cmd_length, info, &op1, &h); #if 0 abort (); #endif - image_write_l (abfd, op1); + if (!image_write_l (abfd, op1)) + return FALSE; break; case ETIR__C_STO_RB: @@ -2156,12 +2251,15 @@ da signature. */ case ETIR__C_STC_LP_PSB: - _bfd_vms_get_value (abfd, ptr + 4, maxptr, info, &op1, &h); + if (cmd_length < 4) + goto corrupt_etir; + _bfd_vms_get_value (abfd, ptr + 4, ptr + cmd_length, info, &op1, &h); if (h && h->sym) { if (h->sym->typ == EGSD__C_SYMG) { - alpha_vms_add_fixup_lp (info, abfd, h->sym->owner); + if (!alpha_vms_add_fixup_lp (info, abfd, h->sym->owner)) + return FALSE; op1 = h->sym->symbol_vector; op2 = 0; } @@ -2179,8 +2277,9 @@ op1 = 0; op2 = 0; } - image_write_q (abfd, op1); - image_write_q (abfd, op2); + if (!image_write_q (abfd, op1) + || !image_write_q (abfd, op2)) + return FALSE; break; /* 205 Store-conditional NOP at address of global @@ -2243,7 +2342,8 @@ /* Det relocation base: pop stack, set image location counter arg: none. */ case ETIR__C_CTL_SETRB: - _bfd_vms_pop (abfd, &op1, &rel1); + if (!_bfd_vms_pop (abfd, &op1, &rel1)) + return FALSE; if (!(rel1 & RELC_SEC_BASE)) abort (); image_set_ptr (abfd, op1, rel1 & RELC_MASK, info); @@ -2252,7 +2352,7 @@ /* Augment relocation base: increment image location counter by offset arg: lw offset value. */ case ETIR__C_CTL_AUGRB: - if (ptr + 4 >= maxptr) + if (cmd_length < 4) goto corrupt_etir; op1 = bfd_getl32 (ptr); image_inc_ptr (abfd, op1); @@ -2261,46 +2361,65 @@ /* Define location: pop index, save location counter under index arg: none. */ case ETIR__C_CTL_DFLOC: - _bfd_vms_pop (abfd, &op1, &rel1); + if (!_bfd_vms_pop (abfd, &op1, &rel1)) + return FALSE; if (rel1 != RELC_NONE) goto bad_context; - dst_define_location (abfd, op1); + if (!dst_define_location (abfd, op1)) + return FALSE; break; /* Set location: pop index, restore location counter from index arg: none. */ case ETIR__C_CTL_STLOC: - _bfd_vms_pop (abfd, &op1, &rel1); + if (!_bfd_vms_pop (abfd, &op1, &rel1)) + return FALSE; if (rel1 != RELC_NONE) goto bad_context; - dst_restore_location (abfd, op1); + if (!dst_restore_location (abfd, op1)) + { + bfd_set_error (bfd_error_bad_value); + _bfd_error_handler (_("invalid %s"), "ETIR__C_CTL_STLOC"); + return FALSE; + } break; /* Stack defined location: pop index, push location counter from index arg: none. */ case ETIR__C_CTL_STKDL: - _bfd_vms_pop (abfd, &op1, &rel1); + if (!_bfd_vms_pop (abfd, &op1, &rel1)) + return FALSE; if (rel1 != RELC_NONE) goto bad_context; - _bfd_vms_push (abfd, dst_retrieve_location (abfd, op1), RELC_NONE); + if (!dst_retrieve_location (abfd, &op1)) + { + bfd_set_error (bfd_error_bad_value); + _bfd_error_handler (_("invalid %s"), "ETIR__C_CTL_STKDL"); + return FALSE; + } + if (!_bfd_vms_push (abfd, op1, RELC_NONE)) + return FALSE; break; case ETIR__C_OPR_NOP: /* No-op. */ break; case ETIR__C_OPR_ADD: /* Add. */ - _bfd_vms_pop (abfd, &op1, &rel1); - _bfd_vms_pop (abfd, &op2, &rel2); + if (!_bfd_vms_pop (abfd, &op1, &rel1) + || !_bfd_vms_pop (abfd, &op2, &rel2)) + return FALSE; if (rel1 == RELC_NONE && rel2 != RELC_NONE) rel1 = rel2; else if (rel1 != RELC_NONE && rel2 != RELC_NONE) goto bad_context; - _bfd_vms_push (abfd, op1 + op2, rel1); + if (!_bfd_vms_push (abfd, op1 + op2, rel1)) + return FALSE; break; case ETIR__C_OPR_SUB: /* Subtract. */ - _bfd_vms_pop (abfd, &op1, &rel1); - _bfd_vms_pop (abfd, &op2, &rel2); + if (!_bfd_vms_pop (abfd, &op1, &rel1) + || !_bfd_vms_pop (abfd, &op2, &rel2)) + return FALSE; if (rel1 == RELC_NONE && rel2 != RELC_NONE) rel1 = rel2; else if ((rel1 & RELC_SEC_BASE) && (rel2 & RELC_SEC_BASE)) @@ -2311,69 +2430,93 @@ } else if (rel1 != RELC_NONE && rel2 != RELC_NONE) goto bad_context; - _bfd_vms_push (abfd, op2 - op1, rel1); + if (!_bfd_vms_push (abfd, op2 - op1, rel1)) + return FALSE; break; case ETIR__C_OPR_MUL: /* Multiply. */ - _bfd_vms_pop (abfd, &op1, &rel1); - _bfd_vms_pop (abfd, &op2, &rel2); + if (!_bfd_vms_pop (abfd, &op1, &rel1) + || !_bfd_vms_pop (abfd, &op2, &rel2)) + return FALSE; if (rel1 != RELC_NONE || rel2 != RELC_NONE) goto bad_context; - _bfd_vms_push (abfd, op1 * op2, RELC_NONE); + if (!_bfd_vms_push (abfd, op1 * op2, RELC_NONE)) + return FALSE; break; case ETIR__C_OPR_DIV: /* Divide. */ - _bfd_vms_pop (abfd, &op1, &rel1); - _bfd_vms_pop (abfd, &op2, &rel2); + if (!_bfd_vms_pop (abfd, &op1, &rel1) + || !_bfd_vms_pop (abfd, &op2, &rel2)) + return FALSE; if (rel1 != RELC_NONE || rel2 != RELC_NONE) goto bad_context; - if (op2 == 0) - _bfd_vms_push (abfd, 0, RELC_NONE); + if (op1 == 0) + { + /* Divide by zero is supposed to give a result of zero, + and a non-fatal warning message. */ + _bfd_error_handler (_("%s divide by zero"), "ETIR__C_OPR_DIV"); + if (!_bfd_vms_push (abfd, 0, RELC_NONE)) + return FALSE; + } else - _bfd_vms_push (abfd, op2 / op1, RELC_NONE); + { + if (!_bfd_vms_push (abfd, op2 / op1, RELC_NONE)) + return FALSE; + } break; case ETIR__C_OPR_AND: /* Logical AND. */ - _bfd_vms_pop (abfd, &op1, &rel1); - _bfd_vms_pop (abfd, &op2, &rel2); + if (!_bfd_vms_pop (abfd, &op1, &rel1) + || !_bfd_vms_pop (abfd, &op2, &rel2)) + return FALSE; if (rel1 != RELC_NONE || rel2 != RELC_NONE) goto bad_context; - _bfd_vms_push (abfd, op1 & op2, RELC_NONE); + if (!_bfd_vms_push (abfd, op1 & op2, RELC_NONE)) + return FALSE; break; case ETIR__C_OPR_IOR: /* Logical inclusive OR. */ - _bfd_vms_pop (abfd, &op1, &rel1); - _bfd_vms_pop (abfd, &op2, &rel2); + if (!_bfd_vms_pop (abfd, &op1, &rel1) + || !_bfd_vms_pop (abfd, &op2, &rel2)) + return FALSE; if (rel1 != RELC_NONE || rel2 != RELC_NONE) goto bad_context; - _bfd_vms_push (abfd, op1 | op2, RELC_NONE); + if (!_bfd_vms_push (abfd, op1 | op2, RELC_NONE)) + return FALSE; break; case ETIR__C_OPR_EOR: /* Logical exclusive OR. */ - _bfd_vms_pop (abfd, &op1, &rel1); - _bfd_vms_pop (abfd, &op2, &rel2); + if (!_bfd_vms_pop (abfd, &op1, &rel1) + || !_bfd_vms_pop (abfd, &op2, &rel2)) + return FALSE; if (rel1 != RELC_NONE || rel2 != RELC_NONE) goto bad_context; - _bfd_vms_push (abfd, op1 ^ op2, RELC_NONE); + if (!_bfd_vms_push (abfd, op1 ^ op2, RELC_NONE)) + return FALSE; break; case ETIR__C_OPR_NEG: /* Negate. */ - _bfd_vms_pop (abfd, &op1, &rel1); + if (!_bfd_vms_pop (abfd, &op1, &rel1)) + return FALSE; if (rel1 != RELC_NONE) goto bad_context; - _bfd_vms_push (abfd, -op1, RELC_NONE); + if (!_bfd_vms_push (abfd, -op1, RELC_NONE)) + return FALSE; break; case ETIR__C_OPR_COM: /* Complement. */ - _bfd_vms_pop (abfd, &op1, &rel1); + if (!_bfd_vms_pop (abfd, &op1, &rel1)) + return FALSE; if (rel1 != RELC_NONE) goto bad_context; - _bfd_vms_push (abfd, ~op1, RELC_NONE); + if (!_bfd_vms_push (abfd, ~op1, RELC_NONE)) + return FALSE; break; case ETIR__C_OPR_ASH: /* Arithmetic shift. */ - _bfd_vms_pop (abfd, &op1, &rel1); - _bfd_vms_pop (abfd, &op2, &rel2); + if (!_bfd_vms_pop (abfd, &op1, &rel1) + || !_bfd_vms_pop (abfd, &op2, &rel2)) + return FALSE; if (rel1 != RELC_NONE || rel2 != RELC_NONE) { bad_context: @@ -2381,11 +2524,29 @@ _bfd_vms_etir_name (cmd)); return FALSE; } - if ((int)op2 < 0) /* Shift right. */ - op1 >>= -(int)op2; - else /* Shift left. */ - op1 <<= (int)op2; - _bfd_vms_push (abfd, op1, RELC_NONE); /* FIXME: sym. */ + if ((bfd_signed_vma) op2 < 0) + { + /* Shift right. */ + bfd_vma sign; + op2 = -op2; + if (op2 >= CHAR_BIT * sizeof (op1)) + op2 = CHAR_BIT * sizeof (op1) - 1; + /* op1 = (bfd_signed_vma) op1 >> op2; */ + sign = op1 & ((bfd_vma) 1 << (CHAR_BIT * sizeof (op1) - 1)); + op1 >>= op2; + sign >>= op2; + op1 = (op1 ^ sign) - sign; + } + else + { + /* Shift left. */ + if (op2 >= CHAR_BIT * sizeof (op1)) + op1 = 0; + else + op1 <<= op2; + } + if (!_bfd_vms_push (abfd, op1, RELC_NONE)) /* FIXME: sym. */ + return FALSE; break; case ETIR__C_OPR_INSV: /* Insert field. */ @@ -2399,14 +2560,20 @@ break; case ETIR__C_OPR_SEL: /* Select. */ - _bfd_vms_pop (abfd, &op1, &rel1); + if (!_bfd_vms_pop (abfd, &op1, &rel1)) + return FALSE; if (op1 & 0x01L) - _bfd_vms_pop (abfd, &op1, &rel1); + { + if (!_bfd_vms_pop (abfd, &op1, &rel1)) + return FALSE; + } else { - _bfd_vms_pop (abfd, &op1, &rel1); - _bfd_vms_pop (abfd, &op2, &rel2); - _bfd_vms_push (abfd, op1, rel1); + if (!_bfd_vms_pop (abfd, &op1, &rel1) + || !_bfd_vms_pop (abfd, &op2, &rel2)) + return FALSE; + if (!_bfd_vms_push (abfd, op1, rel1)) + return FALSE; } break; @@ -2416,7 +2583,7 @@ break; } - ptr += cmd_length - 4; + ptr += cmd_length; } return TRUE; @@ -2527,7 +2694,7 @@ static bfd_boolean _bfd_vms_slurp_object_records (bfd * abfd) { - bfd_boolean err; + bfd_boolean ok; int type; do @@ -2544,27 +2711,27 @@ switch (type) { case EOBJ__C_EMH: - err = _bfd_vms_slurp_ehdr (abfd); + ok = _bfd_vms_slurp_ehdr (abfd); break; case EOBJ__C_EEOM: - err = _bfd_vms_slurp_eeom (abfd); + ok = _bfd_vms_slurp_eeom (abfd); break; case EOBJ__C_EGSD: - err = _bfd_vms_slurp_egsd (abfd); + ok = _bfd_vms_slurp_egsd (abfd); break; case EOBJ__C_ETIR: - err = TRUE; /* _bfd_vms_slurp_etir (abfd); */ + ok = TRUE; /* _bfd_vms_slurp_etir (abfd); */ break; case EOBJ__C_EDBG: - err = _bfd_vms_slurp_edbg (abfd); + ok = _bfd_vms_slurp_edbg (abfd); break; case EOBJ__C_ETBT: - err = _bfd_vms_slurp_etbt (abfd); + ok = _bfd_vms_slurp_etbt (abfd); break; default: - err = FALSE; + ok = FALSE; } - if (!err) + if (!ok) { vms_debug2 ((2, "slurp type %d failed\n", type)); return FALSE; @@ -2579,7 +2746,7 @@ static bfd_boolean vms_initialize (bfd * abfd) { - bfd_size_type amt; + size_t amt; amt = sizeof (struct vms_private_data_struct); abfd->tdata.any = bfd_zalloc (abfd, amt); @@ -2601,10 +2768,26 @@ return FALSE; } +/* Free malloc'd memory. */ + +static void +alpha_vms_free_private (bfd *abfd) +{ + struct module *module; + + free (PRIV (recrd.buf)); + free (PRIV (sections)); + free (PRIV (syms)); + free (PRIV (dst_ptr_offsets)); + + for (module = PRIV (modules); module; module = module->next) + free (module->file_table); +} + /* Check the format for a file being read. Return a (bfd_target *) if it's an object file or zero if not. */ -static const struct bfd_target * +static bfd_cleanup alpha_vms_object_p (bfd *abfd) { void *tdata_save = abfd->tdata.any; @@ -2615,10 +2798,13 @@ /* Allocate alpha-vms specific data. */ if (!vms_initialize (abfd)) - goto error_ret; + { + abfd->tdata.any = tdata_save; + return NULL; + } if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET)) - goto err_wrong_format; + goto error_ret; /* The first challenge with VMS is to discover the kind of the file. @@ -2637,27 +2823,17 @@ 2 bytes size repeated) and 12 bytes for images (4 bytes major id, 4 bytes minor id, 4 bytes length). */ test_len = 12; - - /* Size the main buffer. */ - buf = (unsigned char *) bfd_malloc (test_len); + buf = _bfd_malloc_and_read (abfd, test_len, test_len); if (buf == NULL) goto error_ret; PRIV (recrd.buf) = buf; PRIV (recrd.buf_size) = test_len; - - /* Initialize the record pointer. */ PRIV (recrd.rec) = buf; - if (bfd_bread (buf, test_len, abfd) != test_len) - goto err_wrong_format; - /* Is it an image? */ if ((bfd_getl32 (buf) == EIHD__K_MAJORID) && (bfd_getl32 (buf + 4) == EIHD__K_MINORID)) { - unsigned int to_read; - unsigned int read_so_far; - unsigned int remaining; unsigned int eisd_offset, eihs_offset; /* Extract the header size. */ @@ -2667,44 +2843,25 @@ if (PRIV (recrd.rec_size) == 0) PRIV (recrd.rec_size) = sizeof (struct vms_eihd); - if (PRIV (recrd.rec_size) > PRIV (recrd.buf_size)) - { - buf = bfd_realloc_or_free (buf, PRIV (recrd.rec_size)); - - if (buf == NULL) - { - PRIV (recrd.buf) = NULL; - goto error_ret; - } - PRIV (recrd.buf) = buf; - PRIV (recrd.buf_size) = PRIV (recrd.rec_size); - } - /* PR 21813: Check for a truncated record. */ - if (PRIV (recrd.rec_size < test_len)) - goto error_ret; - /* Read the remaining record. */ - remaining = PRIV (recrd.rec_size) - test_len; - to_read = MIN (VMS_BLOCK_SIZE - test_len, remaining); - read_so_far = test_len; - - while (remaining > 0) - { - if (bfd_bread (buf + read_so_far, to_read, abfd) != to_read) - goto err_wrong_format; + /* PR 17512: file: 7d7c57c2. */ + if (PRIV (recrd.rec_size) < sizeof (struct vms_eihd)) + goto err_wrong_format; - read_so_far += to_read; - remaining -= to_read; + if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET)) + goto error_ret; - to_read = MIN (VMS_BLOCK_SIZE, remaining); - } + free (PRIV (recrd.buf)); + PRIV (recrd.buf) = NULL; + buf = _bfd_malloc_and_read (abfd, PRIV (recrd.rec_size), + PRIV (recrd.rec_size)); + if (buf == NULL) + goto error_ret; - /* Reset the record pointer. */ + PRIV (recrd.buf) = buf; + PRIV (recrd.buf_size) = PRIV (recrd.rec_size); PRIV (recrd.rec) = buf; - /* PR 17512: file: 7d7c57c2. */ - if (PRIV (recrd.rec_size) < sizeof (struct vms_eihd)) - goto error_ret; vms_debug2 ((2, "file type is image\n")); if (!_bfd_vms_slurp_eihd (abfd, &eisd_offset, &eihs_offset)) @@ -2749,14 +2906,13 @@ if (! bfd_default_set_arch_mach (abfd, bfd_arch_alpha, 0)) goto err_wrong_format; - return abfd->xvec; + return alpha_vms_free_private; err_wrong_format: bfd_set_error (bfd_error_wrong_format); error_ret: - if (PRIV (recrd.buf)) - free (PRIV (recrd.buf)); + alpha_vms_free_private (abfd); if (abfd->tdata.any != tdata_save && abfd->tdata.any != NULL) bfd_release (abfd, abfd->tdata.any); abfd->tdata.any = tdata_save; @@ -2855,22 +3011,36 @@ return TRUE; } -static void +static void * vector_grow1 (struct vector_type *vec, size_t elsz) { - if (vec->nbr_el + 1 < vec->max_el) - return; - - if (vec->max_el == 0) + if (vec->nbr_el >= vec->max_el) { - vec->max_el = 16; - vec->els = bfd_malloc2 (vec->max_el, elsz); - } - else - { - vec->max_el *= 2; - vec->els = bfd_realloc2 (vec->els, vec->max_el, elsz); + if (vec->max_el == 0) + { + vec->max_el = 16; + vec->els = bfd_malloc (vec->max_el * elsz); + } + else + { + size_t amt; + if (vec->max_el > -1u / 2) + { + bfd_set_error (bfd_error_file_too_big); + return NULL; + } + vec->max_el *= 2; + if (_bfd_mul_overflow (vec->max_el, elsz, &amt)) + { + bfd_set_error (bfd_error_file_too_big); + return NULL; + } + vec->els = bfd_realloc_or_free (vec->els, amt); + } } + if (vec->els == NULL) + return NULL; + return (char *) vec->els + elsz * vec->nbr_el++; } /* Bump ABFD file position to next block. */ @@ -4170,7 +4340,7 @@ /* Parse debug info for a module and internalize it. */ -static void +static bfd_boolean parse_module (bfd *abfd, struct module *module, unsigned char *ptr, int length) { @@ -4204,7 +4374,7 @@ { case DST__K_MODBEG: module->name - = _bfd_vms_save_counted_string (ptr + DST_S_B_MODBEG_NAME, + = _bfd_vms_save_counted_string (abfd, ptr + DST_S_B_MODBEG_NAME, maxptr - (ptr + DST_S_B_MODBEG_NAME)); curr_pc = 0; @@ -4222,7 +4392,7 @@ funcinfo = (struct funcinfo *) bfd_zalloc (abfd, sizeof (struct funcinfo)); funcinfo->name - = _bfd_vms_save_counted_string (ptr + DST_S_B_RTNBEG_NAME, + = _bfd_vms_save_counted_string (abfd, ptr + DST_S_B_RTNBEG_NAME, maxptr - (ptr + DST_S_B_RTNBEG_NAME)); funcinfo->low = bfd_getl32 (ptr + DST_S_L_RTNBEG_ADDRESS); funcinfo->next = module->func_table; @@ -4273,19 +4443,20 @@ { unsigned int fileid = bfd_getl16 (src_ptr + DST_S_W_SRC_DF_FILEID); - char *filename - = _bfd_vms_save_counted_string (src_ptr + DST_S_B_SRC_DF_FILENAME, - (ptr + rec_length) - - (src_ptr + DST_S_B_SRC_DF_FILENAME) - ); + char *filename = _bfd_vms_save_counted_string + (abfd, + src_ptr + DST_S_B_SRC_DF_FILENAME, + ptr + rec_length - (src_ptr + DST_S_B_SRC_DF_FILENAME)); while (fileid >= module->file_table_count) { module->file_table_count *= 2; module->file_table - = bfd_realloc (module->file_table, - module->file_table_count - * sizeof (struct fileinfo)); + = bfd_realloc_or_free (module->file_table, + module->file_table_count + * sizeof (struct fileinfo)); + if (module->file_table == NULL) + return FALSE; } module->file_table [fileid].name = filename; @@ -4607,6 +4778,7 @@ because parsing can be either performed at module creation or deferred until debug info is consumed. */ SET_MODULE_PARSED (module); + return TRUE; } /* Build the list of modules for the specified BFD. */ @@ -4684,7 +4856,8 @@ return NULL; module = new_module (abfd); - parse_module (abfd, module, PRIV (dst_section)->contents, -1); + if (!parse_module (abfd, module, PRIV (dst_section)->contents, -1)) + return NULL; list = module; } @@ -4709,17 +4882,19 @@ { unsigned int size = module->size; unsigned int modbeg = PRIV (dst_section)->filepos + module->modbeg; - unsigned char *buffer = (unsigned char *) bfd_malloc (module->size); + unsigned char *buffer; if (bfd_seek (abfd, modbeg, SEEK_SET) != 0 - || bfd_bread (buffer, size, abfd) != size) + || (buffer = _bfd_malloc_and_read (abfd, size, size)) == NULL) { bfd_set_error (bfd_error_no_debug_section); return FALSE; } - parse_module (abfd, module, buffer, size); + ret = parse_module (abfd, module, buffer, size); free (buffer); + if (!ret) + return ret; } /* Find out the function (if any) that contains the address. */ @@ -5193,8 +5368,10 @@ else { vms_sec->reloc_max *= 2; - sec->relocation = bfd_realloc + sec->relocation = bfd_realloc_or_free (sec->relocation, vms_sec->reloc_max * sizeof (arelent)); + if (sec->relocation == NULL) + return FALSE; } } reloc = &sec->relocation[sec->reloc_count]; @@ -6615,7 +6792,7 @@ fprintf (file, _(" bitmap: 0x%08x (count: %u):\n"), val, count); for (k = 0; k < 32; k++) - if (val & (1 << k)) + if (val & (1u << k)) { if (n == 0) fputs (" ", file); @@ -7036,8 +7213,8 @@ dst_size -= len; off += len; len -= sizeof (dsth); - buf = bfd_malloc (len); - if (bfd_bread (buf, len, abfd) != len) + buf = _bfd_malloc_and_read (abfd, len, len); + if (buf == NULL) { fprintf (file, _("cannot read DST symbol\n")); return; @@ -7952,14 +8129,12 @@ unsigned int codeadroff; unsigned int lpfixoff; unsigned int chgprtoff; + file_ptr f_off = (file_ptr) (eiaf_vbn - 1) * VMS_BLOCK_SIZE; - buf = bfd_malloc (eiaf_size); - - if (bfd_seek (abfd, (file_ptr) (eiaf_vbn - 1) * VMS_BLOCK_SIZE, SEEK_SET) - || bfd_bread (buf, eiaf_size, abfd) != eiaf_size) + if (bfd_seek (abfd, f_off, SEEK_SET) != 0 + || (buf = _bfd_malloc_and_read (abfd, eiaf_size, eiaf_size)) == NULL) { fprintf (file, _("cannot read EIHA\n")); - free (buf); return; } eiaf = (struct vms_eiaf *)buf; @@ -8236,41 +8411,49 @@ /* Add a linkage pair fixup at address SECT + OFFSET to SHLIB. */ -static void +static bfd_boolean alpha_vms_add_fixup_lp (struct bfd_link_info *info, bfd *src, bfd *shlib) { struct alpha_vms_shlib_el *sl; asection *sect = PRIV2 (src, image_section); file_ptr offset = PRIV2 (src, image_offset); + bfd_vma *p; sl = &VEC_EL (alpha_vms_link_hash (info)->shrlibs, struct alpha_vms_shlib_el, PRIV2 (shlib, shr_index)); sl->has_fixups = TRUE; - VEC_APPEND_EL (sl->lp, bfd_vma, - sect->output_section->vma + sect->output_offset + offset); + p = VEC_APPEND (sl->lp, bfd_vma); + if (p == NULL) + return FALSE; + *p = sect->output_section->vma + sect->output_offset + offset; sect->output_section->flags |= SEC_RELOC; + return TRUE; } /* Add a code address fixup at address SECT + OFFSET to SHLIB. */ -static void +static bfd_boolean alpha_vms_add_fixup_ca (struct bfd_link_info *info, bfd *src, bfd *shlib) { struct alpha_vms_shlib_el *sl; asection *sect = PRIV2 (src, image_section); file_ptr offset = PRIV2 (src, image_offset); + bfd_vma *p; sl = &VEC_EL (alpha_vms_link_hash (info)->shrlibs, struct alpha_vms_shlib_el, PRIV2 (shlib, shr_index)); sl->has_fixups = TRUE; - VEC_APPEND_EL (sl->ca, bfd_vma, - sect->output_section->vma + sect->output_offset + offset); + p = VEC_APPEND (sl->ca, bfd_vma); + if (p == NULL) + return FALSE; + *p = sect->output_section->vma + sect->output_offset + offset; sect->output_section->flags |= SEC_RELOC; + return TRUE; } /* Add a quad word relocation fixup at address SECT + OFFSET to SHLIB. */ -static void +static bfd_boolean alpha_vms_add_fixup_qr (struct bfd_link_info *info, bfd *src, bfd *shlib, bfd_vma vec) { @@ -8283,30 +8466,35 @@ struct alpha_vms_shlib_el, PRIV2 (shlib, shr_index)); sl->has_fixups = TRUE; r = VEC_APPEND (sl->qr, struct alpha_vms_vma_ref); + if (r == NULL) + return FALSE; r->vma = sect->output_section->vma + sect->output_offset + offset; r->ref = vec; sect->output_section->flags |= SEC_RELOC; + return TRUE; } -static void +static bfd_boolean alpha_vms_add_fixup_lr (struct bfd_link_info *info ATTRIBUTE_UNUSED, unsigned int shr ATTRIBUTE_UNUSED, bfd_vma vec ATTRIBUTE_UNUSED) { /* Not yet supported. */ - abort (); + return FALSE; } /* Add relocation. FIXME: Not yet emitted. */ -static void +static bfd_boolean alpha_vms_add_lw_reloc (struct bfd_link_info *info ATTRIBUTE_UNUSED) { + return FALSE; } -static void +static bfd_boolean alpha_vms_add_qw_reloc (struct bfd_link_info *info ATTRIBUTE_UNUSED) { + return FALSE; } static struct bfd_hash_entry * @@ -8336,13 +8524,34 @@ return (struct bfd_hash_entry *) ret; } +static void +alpha_vms_bfd_link_hash_table_free (bfd *abfd) +{ + struct alpha_vms_link_hash_table *t; + unsigned i; + + t = (struct alpha_vms_link_hash_table *) abfd->link.hash; + for (i = 0; i < VEC_COUNT (t->shrlibs); i++) + { + struct alpha_vms_shlib_el *shlib; + + shlib = &VEC_EL (t->shrlibs, struct alpha_vms_shlib_el, i); + free (&VEC_EL (shlib->ca, bfd_vma, 0)); + free (&VEC_EL (shlib->lp, bfd_vma, 0)); + free (&VEC_EL (shlib->qr, struct alpha_vms_vma_ref, 0)); + } + free (&VEC_EL (t->shrlibs, struct alpha_vms_shlib_el, 0)); + + _bfd_generic_link_hash_table_free (abfd); +} + /* Create an Alpha/VMS link hash table. */ static struct bfd_link_hash_table * alpha_vms_bfd_link_hash_table_create (bfd *abfd) { struct alpha_vms_link_hash_table *ret; - bfd_size_type amt = sizeof (struct alpha_vms_link_hash_table); + size_t amt = sizeof (struct alpha_vms_link_hash_table); ret = (struct alpha_vms_link_hash_table *) bfd_malloc (amt); if (ret == NULL) @@ -8357,6 +8566,7 @@ VEC_INIT (ret->shrlibs); ret->fixup = NULL; + ret->root.hash_table_free = alpha_vms_bfd_link_hash_table_free; return &ret->root; } @@ -8411,6 +8621,8 @@ shlib = VEC_APPEND (alpha_vms_link_hash (info)->shrlibs, struct alpha_vms_shlib_el); + if (shlib == NULL) + return FALSE; shlib->abfd = abfd; VEC_INIT (shlib->ca); VEC_INIT (shlib->lp); @@ -9283,35 +9495,24 @@ if (abfd == NULL || abfd->tdata.any == NULL) return TRUE; - if (abfd->format == bfd_archive) + if (abfd->format == bfd_object) { - bfd_release (abfd, abfd->tdata.any); - abfd->tdata.any = NULL; - return TRUE; - } - - if (PRIV (recrd.buf) != NULL) - free (PRIV (recrd.buf)); - - if (PRIV (sections) != NULL) - free (PRIV (sections)); - - bfd_release (abfd, abfd->tdata.any); - abfd->tdata.any = NULL; + alpha_vms_free_private (abfd); #ifdef VMS - if (abfd->direction == write_direction) - { - /* Last step on VMS is to convert the file to variable record length - format. */ - if (!bfd_cache_close (abfd)) - return FALSE; - if (!_bfd_vms_convert_to_var_unix_filename (abfd->filename)) - return FALSE; - } + if (abfd->direction == write_direction) + { + /* Last step on VMS is to convert the file to variable record length + format. */ + if (!bfd_cache_close (abfd)) + return FALSE; + if (!_bfd_vms_convert_to_var_unix_filename (abfd->filename)) + return FALSE; + } #endif + } - return TRUE; + return _bfd_generic_close_and_cleanup (abfd); } /* Called when a new section is created. */ @@ -9319,7 +9520,7 @@ static bfd_boolean vms_new_section_hook (bfd * abfd, asection *section) { - bfd_size_type amt; + size_t amt; vms_debug2 ((1, "vms_new_section_hook (%p, [%u]%s)\n", abfd, section->index, section->name)); diff -Nru gdb-9.1/bfd/vms.h gdb-10.2/bfd/vms.h --- gdb-9.1/bfd/vms.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/vms.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* vms.h -- Header file for VMS (Alpha and Vax) support. - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. Main header file. @@ -98,7 +98,7 @@ /* vms-misc.c. */ -#define VMS_DEBUG 1 +#define VMS_DEBUG 0 #if VMS_DEBUG extern void _bfd_vms_debug (int, char *, ...) ATTRIBUTE_PRINTF_2; @@ -118,8 +118,8 @@ extern void vms_get_time (unsigned int *hi, unsigned int *lo); extern void vms_raw_get_time (unsigned char *buf); -extern char * _bfd_vms_save_sized_string (unsigned char *, unsigned); -extern char * _bfd_vms_save_counted_string (unsigned char *, unsigned); +extern char * _bfd_vms_save_sized_string (bfd *, unsigned char *, size_t); +extern char * _bfd_vms_save_counted_string (bfd *, unsigned char *, size_t); extern void _bfd_vms_output_begin (struct vms_rec_wr *, int); extern void _bfd_vms_output_alignment (struct vms_rec_wr *, int); extern void _bfd_vms_output_begin_subrec (struct vms_rec_wr *, int); diff -Nru gdb-9.1/bfd/vms-lib.c gdb-10.2/bfd/vms-lib.c --- gdb-9.1/bfd/vms-lib.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/vms-lib.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* BFD back-end for VMS archive files. - Copyright (C) 2010-2019 Free Software Foundation, Inc. + Copyright (C) 2010-2020 Free Software Foundation, Inc. Written by Tristan Gingold , AdaCore. This file is part of BFD, the Binary File Descriptor library. @@ -120,6 +120,9 @@ /* Maximum number of entries. */ unsigned int max; + /* Do not allocate more that this number of entries. */ + unsigned int limit; + /* If true, the table was reallocated on the heap. If false, it is still in the BFD's objalloc. */ bfd_boolean realloced; @@ -134,12 +137,25 @@ if (cs->nbr == cs->max) { struct carsym *n; + size_t amt; + if (cs->max > -33u / 2 || cs->max >= cs->limit) + { + bfd_set_error (bfd_error_file_too_big); + return FALSE; + } cs->max = 2 * cs->max + 32; + if (cs->max > cs->limit) + cs->max = cs->limit; + if (_bfd_mul_overflow (cs->max, sizeof (struct carsym), &amt)) + { + bfd_set_error (bfd_error_file_too_big); + return FALSE; + } if (!cs->realloced) { - n = bfd_malloc2 (cs->max, sizeof (struct carsym)); + n = bfd_malloc (amt); if (n == NULL) return FALSE; memcpy (n, cs->idx, cs->nbr * sizeof (struct carsym)); @@ -147,7 +163,7 @@ } else { - n = bfd_realloc_or_free (cs->idx, cs->nbr * sizeof (struct carsym)); + n = bfd_realloc_or_free (cs->idx, amt); if (n == NULL) return FALSE; } @@ -226,12 +242,20 @@ If the entry is indirect, recurse. */ static bfd_boolean -vms_traverse_index (bfd *abfd, unsigned int vbn, struct carsym_mem *cs) +vms_traverse_index (bfd *abfd, unsigned int vbn, struct carsym_mem *cs, + unsigned int recur_count) { struct vms_indexdef indexdef; file_ptr off; unsigned char *p; unsigned char *endp; + unsigned int n; + + if (recur_count == 100) + { + bfd_set_error (bfd_error_bad_value); + return FALSE; + } /* Read the index block. */ BFD_ASSERT (sizeof (indexdef) == VMS_BLOCK_SIZE); @@ -240,7 +264,10 @@ /* Traverse it. */ p = &indexdef.keys[0]; - endp = p + bfd_getl16 (indexdef.used); + n = bfd_getl16 (indexdef.used); + if (n > sizeof (indexdef.keys)) + return FALSE; + endp = p + n; while (p < endp) { unsigned int idx_vbn; @@ -250,7 +277,8 @@ unsigned int flags; /* Extract key length. */ - if (bfd_libdata (abfd)->ver == LBR_MAJORID) + if (bfd_libdata (abfd)->ver == LBR_MAJORID + && offsetof (struct vms_idx, keyname) <= (size_t) (endp - p)) { struct vms_idx *ridx = (struct vms_idx *)p; @@ -261,7 +289,8 @@ flags = 0; keyname = ridx->keyname; } - else if (bfd_libdata (abfd)->ver == LBR_ELFMAJORID) + else if (bfd_libdata (abfd)->ver == LBR_ELFMAJORID + && offsetof (struct vms_elfidx, keyname) <= (size_t) (endp - p)) { struct vms_elfidx *ridx = (struct vms_elfidx *)p; @@ -281,11 +310,13 @@ /* Point to the next index entry. */ p = keyname + keylen; + if (p > endp) + return FALSE; if (idx_off == RFADEF__C_INDEX) { /* Indirect entry. Recurse. */ - if (!vms_traverse_index (abfd, idx_vbn, cs)) + if (!vms_traverse_index (abfd, idx_vbn, cs, recur_count + 1)) return FALSE; } else @@ -322,11 +353,17 @@ if (!vms_read_block (abfd, kvbn, kblk)) return FALSE; + if (koff > sizeof (kblk) - sizeof (struct vms_kbn)) + return FALSE; kbn = (struct vms_kbn *)(kblk + koff); klen = bfd_getl16 (kbn->keylen); + if (klen > sizeof (kblk) - koff) + return FALSE; kvbn = bfd_getl32 (kbn->rfa.vbn); koff = bfd_getl16 (kbn->rfa.offset); + if (noff + klen > keylen) + return FALSE; memcpy (name + noff, kbn + 1, klen); noff += klen; } @@ -357,7 +394,7 @@ || bfd_bread (&lhs, sizeof (lhs), abfd) != sizeof (lhs)) return FALSE; - /* FIXME: this adds extra entries that were not accounted. */ + /* These extra entries may cause reallocation of CS. */ if (!vms_add_indexes_from_list (abfd, cs, name, &lhs.ng_g_rfa)) return FALSE; if (!vms_add_indexes_from_list (abfd, cs, name, &lhs.ng_wk_rfa)) @@ -386,6 +423,8 @@ struct vms_idd idd; unsigned int flags; unsigned int vbn; + ufile_ptr filesize; + size_t amt; struct carsym *csbuf; struct carsym_mem csm; @@ -400,20 +439,33 @@ || !(flags & IDD__FLAGS_VARLENIDX)) return NULL; - csbuf = bfd_alloc (abfd, *nbrel * sizeof (struct carsym)); - if (csbuf == NULL) - return NULL; - - csm.max = *nbrel; + filesize = bfd_get_file_size (abfd); csm.nbr = 0; + csm.max = *nbrel; + csm.limit = -1u; csm.realloced = FALSE; - csm.idx = csbuf; + if (filesize != 0) + { + /* Put an upper bound based on a file full of single char keys. + This is to prevent fuzzed binary silliness. It is easily + possible to set up loops over file blocks that add syms + without end. */ + if (filesize / (sizeof (struct vms_rfa) + 2) <= -1u) + csm.limit = filesize / (sizeof (struct vms_rfa) + 2); + } + if (csm.max > csm.limit) + csm.max = csm.limit; + if (_bfd_mul_overflow (csm.max, sizeof (struct carsym), &amt)) + return NULL; + csm.idx = csbuf = bfd_alloc (abfd, amt); + if (csm.idx == NULL) + return NULL; /* Note: if the index is empty, there is no block to traverse. */ vbn = bfd_getl32 (idd.vbn); - if (vbn != 0 && !vms_traverse_index (abfd, vbn, &csm)) + if (vbn != 0 && !vms_traverse_index (abfd, vbn, &csm, 0)) { - if (csm.realloced && csm.idx != NULL) + if (csm.realloced) free (csm.idx); /* Note: in case of error, we can free what was allocated on the @@ -431,14 +483,15 @@ return NULL; memcpy (csbuf, csm.idx, csm.nbr * sizeof (struct carsym)); free (csm.idx); - *nbrel = csm.nbr; + csm.idx = csbuf; } - return csbuf; + *nbrel = csm.nbr; + return csm.idx; } /* Standard function. */ -static const bfd_target * +static bfd_cleanup _bfd_vms_lib_archive_p (bfd *abfd, enum vms_lib_kind kind) { struct vms_lhd lhd; @@ -557,14 +610,11 @@ != sizeof (buf_reclen)) goto err; reclen = bfd_getl32 (buf_reclen); - buf = bfd_malloc (reclen); + if (reclen < sizeof (struct vms_dcxmap)) + goto err; + buf = _bfd_malloc_and_read (abfd, reclen, reclen); if (buf == NULL) goto err; - if (bfd_bread (buf, reclen, abfd) != reclen) - { - free (buf); - goto err; - } map = (struct vms_dcxmap *)buf; tdata->nbr_dcxsbm = bfd_getl16 (map->nsubs); sbm_off = bfd_getl16 (map->sub0); @@ -572,39 +622,57 @@ (abfd, tdata->nbr_dcxsbm * sizeof (struct dcxsbm_desc)); for (i = 0; i < tdata->nbr_dcxsbm; i++) { - struct vms_dcxsbm *sbm = (struct vms_dcxsbm *) (buf + sbm_off); + struct vms_dcxsbm *sbm; struct dcxsbm_desc *sbmdesc = &tdata->dcxsbm[i]; unsigned int sbm_len; unsigned int sbm_sz; unsigned int off; - unsigned char *data = (unsigned char *)sbm; unsigned char *buf1; unsigned int l, j; + if (sbm_off > reclen + || reclen - sbm_off < sizeof (struct vms_dcxsbm)) + { + err_free_buf: + free (buf); + goto err; + } + sbm = (struct vms_dcxsbm *) (buf + sbm_off); sbm_sz = bfd_getl16 (sbm->size); sbm_off += sbm_sz; - BFD_ASSERT (sbm_off <= reclen); + if (sbm_off > reclen) + goto err_free_buf; sbmdesc->min_char = sbm->min_char; BFD_ASSERT (sbmdesc->min_char == 0); sbmdesc->max_char = sbm->max_char; sbm_len = sbmdesc->max_char - sbmdesc->min_char + 1; l = (2 * sbm_len + 7) / 8; - BFD_ASSERT - (sbm_sz >= sizeof (struct vms_dcxsbm) + l + 3 * sbm_len - || (tdata->nbr_dcxsbm == 1 - && sbm_sz >= sizeof (struct vms_dcxsbm) + l + sbm_len)); + if (sbm_sz < sizeof (struct vms_dcxsbm) + l + sbm_len + || (tdata->nbr_dcxsbm > 1 + && sbm_sz < sizeof (struct vms_dcxsbm) + l + 3 * sbm_len)) + goto err_free_buf; sbmdesc->flags = (unsigned char *)bfd_alloc (abfd, l); - memcpy (sbmdesc->flags, data + bfd_getl16 (sbm->flags), l); + off = bfd_getl16 (sbm->flags); + if (off > sbm_sz + || sbm_sz - off < l) + goto err_free_buf; + memcpy (sbmdesc->flags, (bfd_byte *) sbm + off, l); sbmdesc->nodes = (unsigned char *)bfd_alloc (abfd, 2 * sbm_len); - memcpy (sbmdesc->nodes, data + bfd_getl16 (sbm->nodes), 2 * sbm_len); + off = bfd_getl16 (sbm->nodes); + if (off > sbm_sz + || sbm_sz - off < 2 * sbm_len) + goto err_free_buf; + memcpy (sbmdesc->nodes, (bfd_byte *) sbm + off, 2 * sbm_len); off = bfd_getl16 (sbm->next); if (off != 0) { + if (off > sbm_sz + || sbm_sz - off < 2 * sbm_len) + goto err_free_buf; /* Read the 'next' array. */ - sbmdesc->next = (unsigned short *)bfd_alloc - (abfd, sbm_len * sizeof (unsigned short)); - buf1 = data + off; + sbmdesc->next = (unsigned short *) bfd_alloc (abfd, 2 * sbm_len); + buf1 = (bfd_byte *) sbm + off; for (j = 0; j < sbm_len; j++) sbmdesc->next[j] = bfd_getl16 (buf1 + j * 2); } @@ -627,7 +695,7 @@ if (tdata->type == LBR__C_TYP_ESHSTB || tdata->type == LBR__C_TYP_ISHSTB) abfd->is_thin_archive = TRUE; - return abfd->xvec; + return _bfd_no_cleanup; err: bfd_release (abfd, tdata); @@ -637,7 +705,7 @@ /* Standard function for alpha libraries. */ -const bfd_target * +bfd_cleanup _bfd_vms_lib_alpha_archive_p (bfd *abfd) { return _bfd_vms_lib_archive_p (abfd, vms_lib_alpha); @@ -645,7 +713,7 @@ /* Standard function for ia64 libraries. */ -const bfd_target * +bfd_cleanup _bfd_vms_lib_ia64_archive_p (bfd *abfd) { return _bfd_vms_lib_archive_p (abfd, vms_lib_ia64); @@ -653,7 +721,7 @@ /* Standard function for text libraries. */ -static const bfd_target * +static bfd_cleanup _bfd_vms_lib_txt_archive_p (bfd *abfd) { return _bfd_vms_lib_archive_p (abfd, vms_lib_txt); @@ -1386,6 +1454,12 @@ break; } bfd_set_filename (res, newname); + free (newname); + if (bfd_get_filename (res) == NULL) + { + bfd_close (res); + return NULL; + } tdata->cache[modidx] = res; @@ -1425,7 +1499,7 @@ _bfd_vms_lib_get_imagelib_file (bfd *el) { bfd *archive = el->my_archive; - const char *modname = el->filename; + const char *modname = bfd_get_filename (el); int modlen = strlen (modname); char *filename; int j; @@ -1451,7 +1525,7 @@ { /* xgettext:c-format */ _bfd_error_handler(_("could not open shared image '%s' from '%s'"), - filename, archive->filename); + filename, bfd_get_filename (archive)); bfd_release (archive, filename); return NULL; } @@ -1973,8 +2047,7 @@ { if (storage > syms_max) { - if (syms_max > 0) - free (syms); + free (syms); syms_max = storage; syms = (asymbol **) bfd_malloc (syms_max); if (syms == NULL) @@ -2025,10 +2098,8 @@ return TRUE; error_return: - if (syms_max > 0) - free (syms); - if (map != NULL) - free (map); + free (syms); + free (map); return FALSE; } @@ -2086,7 +2157,7 @@ unsigned int nl; modules[i].abfd = current; - modules[i].name = vms_get_module_name (current->filename, FALSE); + modules[i].name = vms_get_module_name (bfd_get_filename (current), FALSE); modules[i].ref = 1; /* FIXME: silently truncate long names ? */ diff -Nru gdb-9.1/bfd/vms-misc.c gdb-10.2/bfd/vms-misc.c --- gdb-9.1/bfd/vms-misc.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/vms-misc.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* vms-misc.c -- BFD back-end for VMS/VAX (openVMS/VAX) and EVAX (openVMS/Alpha) files. - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. Miscellaneous functions. @@ -139,13 +139,19 @@ Size is string size (size of record). */ char * -_bfd_vms_save_sized_string (unsigned char *str, unsigned int size) +_bfd_vms_save_sized_string (bfd *abfd, unsigned char *str, size_t size) { - char *newstr = bfd_malloc ((bfd_size_type) size + 1); + char *newstr; + if (size == (size_t) -1) + { + bfd_set_error (bfd_error_no_memory); + return NULL; + } + newstr = bfd_alloc (abfd, size + 1); if (newstr == NULL) return NULL; - memcpy (newstr, (char *) str, (size_t) size); + memcpy (newstr, str, size); newstr[size] = 0; return newstr; @@ -155,13 +161,13 @@ PTR points to size byte on entry. */ char * -_bfd_vms_save_counted_string (unsigned char *ptr, unsigned int maxlen) +_bfd_vms_save_counted_string (bfd *abfd, unsigned char *ptr, size_t maxlen) { unsigned int len = *ptr++; if (len > maxlen) return NULL; - return _bfd_vms_save_sized_string (ptr, len); + return _bfd_vms_save_sized_string (abfd, ptr, len); } /* Object output routines. */ @@ -586,8 +592,8 @@ void vms_time_t_to_vms_time (time_t ut, unsigned int *hi, unsigned int *lo) { - unsigned short val[4]; - unsigned short tmp[4]; + unsigned int val[4]; + unsigned int tmp[4]; unsigned int carry; int i; diff -Nru gdb-9.1/bfd/warning.m4 gdb-10.2/bfd/warning.m4 --- gdb-9.1/bfd/warning.m4 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/warning.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ dnl Common configure.ac fragment dnl -dnl Copyright (C) 2012-2019 Free Software Foundation, Inc. +dnl Copyright (C) 2012-2020 Free Software Foundation, Inc. dnl dnl This file is free software; you can redistribute it and/or modify dnl it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/bfd/wasm-module.c gdb-10.2/bfd/wasm-module.c --- gdb-9.1/bfd/wasm-module.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/wasm-module.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD back-end for WebAssembly modules. - Copyright (C) 2017-2019 Free Software Foundation, Inc. + Copyright (C) 2017-2020 Free Software Foundation, Inc. Based on srec.c, mmo.c, and binary.c @@ -111,18 +111,28 @@ unsigned int num_read = 0; unsigned int shift = 0; unsigned char byte = 0; - bfd_boolean success = FALSE; + int status = 1; while (bfd_bread (&byte, 1, abfd) == 1) { num_read++; - result |= ((bfd_vma) (byte & 0x7f)) << shift; + if (shift < sizeof (result) * 8) + { + result |= ((bfd_vma) (byte & 0x7f)) << shift; + if ((result >> shift) != (byte & 0x7f)) + /* Overflow. */ + status |= 2; + shift += 7; + } + else if ((byte & 0x7f) != 0) + status |= 2; - shift += 7; if ((byte & 0x80) == 0) { - success = TRUE; + status &= ~1; + if (sign && (shift < 8 * sizeof (result)) && (byte & 0x40)) + result |= -((bfd_vma) 1 << shift); break; } } @@ -130,10 +140,7 @@ if (length_return != NULL) *length_return = num_read; if (error_return != NULL) - *error_return = ! success; - - if (sign && (shift < 8 * sizeof (result)) && (byte & 0x40)) - result |= -((bfd_vma) 1 << shift); + *error_return = status != 0; return result; } @@ -238,17 +245,12 @@ tdata_type *tdata = abfd->tdata.any; asymbol *symbols = NULL; sec_ptr space_function_index; - - if (! asect) - return FALSE; - - if (strcmp (asect->name, WASM_NAME_SECTION) != 0) - return FALSE; + size_t amt; p = asect->contents; end = asect->contents + asect->size; - if (! p) + if (!p) return FALSE; while (p < end) @@ -265,7 +267,7 @@ READ_LEB128 (payload_size, p, end); - if (p > p + payload_size) + if (payload_size > (size_t) (end - p)) return FALSE; p += payload_size; @@ -276,10 +278,7 @@ READ_LEB128 (payload_size, p, end); - if (p > p + payload_size) - return FALSE; - - if (p + payload_size > end) + if (payload_size > (size_t) (end - p)) return FALSE; end = p + payload_size; @@ -287,22 +286,29 @@ READ_LEB128 (symcount, p, end); /* Sanity check: each symbol has at least two bytes. */ - if (symcount > payload_size/2) + if (symcount > payload_size / 2) return FALSE; tdata->symcount = symcount; - space_function_index = bfd_make_section_with_flags - (abfd, WASM_SECTION_FUNCTION_INDEX, SEC_READONLY | SEC_CODE); + space_function_index + = bfd_make_section_with_flags (abfd, WASM_SECTION_FUNCTION_INDEX, + SEC_READONLY | SEC_CODE); - if (! space_function_index) - space_function_index = bfd_get_section_by_name (abfd, WASM_SECTION_FUNCTION_INDEX); + if (!space_function_index) + space_function_index + = bfd_get_section_by_name (abfd, WASM_SECTION_FUNCTION_INDEX); - if (! space_function_index) + if (!space_function_index) return FALSE; - symbols = bfd_zalloc (abfd, tdata->symcount * sizeof (asymbol)); - if (! symbols) + if (_bfd_mul_overflow (tdata->symcount, sizeof (asymbol), &amt)) + { + bfd_set_error (bfd_error_file_too_big); + return FALSE; + } + symbols = bfd_alloc (abfd, amt); + if (!symbols) return FALSE; for (symcount = 0; p < end && symcount < tdata->symcount; symcount++) @@ -315,14 +321,15 @@ READ_LEB128 (idx, p, end); READ_LEB128 (len, p, end); - if (p + len < p || p + len > end) + if (len > (size_t) (end - p)) goto error_return; - name = bfd_zalloc (abfd, len + 1); - if (! name) + name = bfd_alloc (abfd, len + 1); + if (!name) goto error_return; memcpy (name, p, len); + name[len] = 0; p += len; sym = &symbols[symcount]; @@ -343,8 +350,6 @@ return TRUE; error_return: - while (symcount) - bfd_release (abfd, (void *)symbols[--symcount].name); bfd_release (abfd, symbols); return FALSE; } @@ -379,13 +384,12 @@ bfd_vma vma = 0x80000000; int section_code; unsigned int bytes_read; - char *name = NULL; asection *bfdsec; if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0) goto error_return; - if (! wasm_read_header (abfd, &error)) + if (!wasm_read_header (abfd, &error)) goto error_return; while ((section_code = wasm_read_byte (abfd, &error)) != EOF) @@ -394,69 +398,66 @@ { const char *sname = wasm_section_code_to_name (section_code); - if (! sname) + if (!sname) goto error_return; - name = strdup (sname); - bfdsec = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS); + bfdsec = bfd_make_section_anyway_with_flags (abfd, sname, + SEC_HAS_CONTENTS); if (bfdsec == NULL) goto error_return; - name = NULL; - bfdsec->vma = vma; - bfdsec->lma = vma; bfdsec->size = wasm_read_leb128 (abfd, &error, &bytes_read, FALSE); if (error) goto error_return; - bfdsec->filepos = bfd_tell (abfd); - bfdsec->alignment_power = 0; } else { bfd_vma payload_len; - file_ptr section_start; bfd_vma namelen; + char *name; char *prefix = WASM_SECTION_PREFIX; - char *p; - int ret; + size_t prefixlen = strlen (prefix); + ufile_ptr filesize; payload_len = wasm_read_leb128 (abfd, &error, &bytes_read, FALSE); if (error) goto error_return; - section_start = bfd_tell (abfd); namelen = wasm_read_leb128 (abfd, &error, &bytes_read, FALSE); - if (error || namelen > payload_len) - goto error_return; - name = bfd_zmalloc (namelen + strlen (prefix) + 1); - if (! name) + if (error || bytes_read > payload_len + || namelen > payload_len - bytes_read) goto error_return; - p = name; - ret = sprintf (p, "%s", prefix); - if (ret < 0 || (bfd_vma) ret != strlen (prefix)) + payload_len -= namelen + bytes_read; + filesize = bfd_get_file_size (abfd); + if (filesize != 0 && namelen > filesize) + { + bfd_set_error (bfd_error_file_truncated); + return FALSE; + } + name = bfd_alloc (abfd, namelen + prefixlen + 1); + if (!name) goto error_return; - p += ret; - if (bfd_bread (p, namelen, abfd) != namelen) + memcpy (name, prefix, prefixlen); + if (bfd_bread (name + prefixlen, namelen, abfd) != namelen) goto error_return; + name[prefixlen + namelen] = 0; - bfdsec = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS); + bfdsec = bfd_make_section_anyway_with_flags (abfd, name, + SEC_HAS_CONTENTS); if (bfdsec == NULL) goto error_return; - name = NULL; - bfdsec->vma = vma; - bfdsec->lma = vma; - bfdsec->filepos = bfd_tell (abfd); - bfdsec->size = section_start + payload_len - bfdsec->filepos; - bfdsec->alignment_power = 0; + bfdsec->size = payload_len; } + bfdsec->vma = vma; + bfdsec->lma = vma; + bfdsec->alignment_power = 0; + bfdsec->filepos = bfd_tell (abfd); if (bfdsec->size != 0) { - bfdsec->contents = bfd_zalloc (abfd, bfdsec->size); - if (! bfdsec->contents) - goto error_return; - - if (bfd_bread (bfdsec->contents, bfdsec->size, abfd) != bfdsec->size) + bfdsec->contents = _bfd_alloc_and_read (abfd, bfdsec->size, + bfdsec->size); + if (!bfdsec->contents) goto error_return; } @@ -471,12 +472,6 @@ return TRUE; error_return: - if (name) - free (name); - - for (bfdsec = abfd->sections; bfdsec; bfdsec = bfdsec->next) - free ((void *) bfdsec->name); - return FALSE; } @@ -700,7 +695,7 @@ static asymbol * wasm_make_empty_symbol (bfd *abfd) { - bfd_size_type amt = sizeof (asymbol); + size_t amt = sizeof (asymbol); asymbol *new_symbol = (asymbol *) bfd_zalloc (abfd, amt); if (! new_symbol) @@ -739,30 +734,37 @@ /* Check whether ABFD is a WebAssembly module; if so, scan it. */ -static const bfd_target * +static bfd_cleanup wasm_object_p (bfd *abfd) { bfd_boolean error; + asection *s; if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0) return NULL; - if (! wasm_read_header (abfd, &error)) + if (!wasm_read_header (abfd, &error)) { bfd_set_error (bfd_error_wrong_format); return NULL; } - if (! wasm_mkobject (abfd) || ! wasm_scan (abfd)) + if (!wasm_mkobject (abfd)) return NULL; - if (! bfd_default_set_arch_mach (abfd, bfd_arch_wasm32, 0)) - return NULL; + if (!wasm_scan (abfd) + || !bfd_default_set_arch_mach (abfd, bfd_arch_wasm32, 0)) + { + bfd_release (abfd, abfd->tdata.any); + abfd->tdata.any = NULL; + return NULL; + } - if (wasm_scan_name_function_section (abfd, bfd_get_section_by_name (abfd, WASM_NAME_SECTION))) + s = bfd_get_section_by_name (abfd, WASM_NAME_SECTION); + if (s != NULL && wasm_scan_name_function_section (abfd, s)) abfd->flags |= HAS_SYMS; - return abfd->xvec; + return _bfd_no_cleanup; } /* BFD_JUMP_TABLE_WRITE */ diff -Nru gdb-9.1/bfd/wasm-module.h gdb-10.2/bfd/wasm-module.h --- gdb-9.1/bfd/wasm-module.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/wasm-module.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* BFD back-end for WebAssembly modules. - Copyright (C) 2017-2019 Free Software Foundation, Inc. + Copyright (C) 2017-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/xcofflink.c gdb-10.2/bfd/xcofflink.c --- gdb-9.1/bfd/xcofflink.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/xcofflink.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* POWER/PowerPC XCOFF linker support. - Copyright (C) 1995-2019 Free Software Foundation, Inc. + Copyright (C) 1995-2020 Free Software Foundation, Inc. Written by Ian Lance Taylor , Cygnus Support. This file is part of BFD, the Binary File Descriptor library. @@ -214,7 +214,7 @@ { if (coff_section_data (abfd, sec) == NULL) { - bfd_size_type amt = sizeof (struct coff_section_tdata); + size_t amt = sizeof (struct coff_section_tdata); sec->used_by_bfd = bfd_zalloc (abfd, amt); if (sec->used_by_bfd == NULL) @@ -227,8 +227,7 @@ if (! bfd_malloc_and_get_section (abfd, sec, &contents)) { - if (contents != NULL) - free (contents); + free (contents); return FALSE; } coff_section_data (abfd, sec)->contents = contents; @@ -526,7 +525,7 @@ entryp = *slot; if (!entryp) { - entryp = bfd_zalloc (archive, sizeof (entry)); + entryp = bfd_zalloc (info->output_bfd, sizeof (entry)); if (!entryp) return NULL; @@ -593,7 +592,7 @@ _bfd_xcoff_bfd_link_hash_table_create (bfd *abfd) { struct xcoff_link_hash_table *ret; - bfd_size_type amt = sizeof (* ret); + size_t amt = sizeof (* ret); ret = bfd_zmalloc (amt); if (ret == NULL) @@ -764,7 +763,7 @@ if (*pp == NULL) { struct xcoff_import_file *n; - bfd_size_type amt = sizeof (* n); + size_t amt = sizeof (*n); n = bfd_alloc (info->output_bfd, amt); if (n == NULL) @@ -1000,7 +999,7 @@ if (abfd->my_archive == NULL || bfd_is_thin_archive (abfd->my_archive)) { - if (!bfd_xcoff_split_import_path (abfd, abfd->filename, + if (!bfd_xcoff_split_import_path (abfd, bfd_get_filename (abfd), &n->path, &n->file)) return FALSE; n->member = ""; @@ -1013,7 +1012,8 @@ if (!archive_info->impfile) { if (!bfd_xcoff_split_import_path (archive_info->archive, - archive_info->archive->filename, + bfd_get_filename (archive_info + ->archive), &archive_info->imppath, &archive_info->impfile)) return FALSE; @@ -1317,14 +1317,17 @@ { bfd_byte *linenos; - amt = linesz * o->lineno_count; - linenos = bfd_malloc (amt); + if (bfd_seek (abfd, o->line_filepos, SEEK_SET) != 0) + goto error_return; + if (_bfd_mul_overflow (linesz, o->lineno_count, &amt)) + { + bfd_set_error (bfd_error_file_too_big); + goto error_return; + } + linenos = _bfd_malloc_and_read (abfd, amt, amt); if (linenos == NULL) goto error_return; reloc_info[o->target_index].linenos = linenos; - if (bfd_seek (abfd, o->line_filepos, SEEK_SET) != 0 - || bfd_bread (linenos, amt, abfd) != amt) - goto error_return; } } @@ -2175,7 +2178,6 @@ /* If we are not keeping memory, free the reloc information. */ if (! info->keep_memory && coff_section_data (abfd, o) != NULL - && coff_section_data (abfd, o)->relocs != NULL && ! coff_section_data (abfd, o)->keep_relocs) { free (coff_section_data (abfd, o)->relocs); @@ -2185,11 +2187,8 @@ /* Free up the line numbers. FIXME: We could cache these somewhere for the final link, to avoid reading them again. */ - if (reloc_info[o->target_index].linenos != NULL) - { - free (reloc_info[o->target_index].linenos); - reloc_info[o->target_index].linenos = NULL; - } + free (reloc_info[o->target_index].linenos); + reloc_info[o->target_index].linenos = NULL; } free (reloc_info); @@ -2203,10 +2202,8 @@ { for (o = abfd->sections; o != NULL; o = o->next) { - if (reloc_info[o->target_index].csects != NULL) - free (reloc_info[o->target_index].csects); - if (reloc_info[o->target_index].linenos != NULL) - free (reloc_info[o->target_index].linenos); + free (reloc_info[o->target_index].csects); + free (reloc_info[o->target_index].linenos); } free (reloc_info); } @@ -2520,7 +2517,7 @@ { char *fnname; struct xcoff_link_hash_entry *hfn; - bfd_size_type amt; + size_t amt; amt = strlen (h->root.root.string) + 2; fnname = bfd_malloc (amt); @@ -2688,9 +2685,17 @@ case R_RLA: /* Absolute relocations against absolute symbols can be resolved statically. */ - if (h != NULL && bfd_is_abs_symbol (&h->root)) - return FALSE; - + if (h != NULL + && (h->root.type == bfd_link_hash_defined + || h->root.type == bfd_link_hash_defweak) + && !h->root.rel_from_abs) + { + asection *sec = h->root.u.def.section; + if (bfd_is_abs_section (sec) + || (sec != NULL + && bfd_is_abs_section (sec->output_section))) + return FALSE; + } return TRUE; } } @@ -2901,7 +2906,7 @@ static bfd_boolean xcoff_mark (struct bfd_link_info *info, asection *sec) { - if (bfd_is_abs_section (sec) + if (bfd_is_const_section (sec) || (sec->flags & SEC_MARK) != 0) return TRUE; @@ -2981,7 +2986,6 @@ if (! info->keep_memory && coff_section_data (sec->owner, sec) != NULL - && coff_section_data (sec->owner, sec)->relocs != NULL && ! coff_section_data (sec->owner, sec)->keep_relocs) { free (coff_section_data (sec->owner, sec)->relocs); @@ -3044,7 +3048,7 @@ { struct xcoff_link_hash_entry *h = (struct xcoff_link_hash_entry *) harg; struct xcoff_link_size_list *n; - bfd_size_type amt; + size_t amt; if (bfd_get_flavour (output_bfd) != bfd_target_xcoff_flavour) return TRUE; @@ -3122,9 +3126,7 @@ if (val != (bfd_vma) -1) { - if (h->root.type == bfd_link_hash_defined - && (!bfd_is_abs_symbol (&h->root) - || h->root.u.def.value != val)) + if (h->root.type == bfd_link_hash_defined) (*info->callbacks->multiple_definition) (info, &h->root, output_bfd, bfd_abs_section_ptr, val); @@ -3214,7 +3216,13 @@ } /* This function is called for each symbol to which the linker script - assigns a value. */ + assigns a value. + FIXME: In cases like the linker test ld-scripts/defined5 where a + symbol is defined both by an input object file and the script, + the script definition doesn't override the object file definition + as is usual for other targets. At least not when the symbol is + output. Other uses of the symbol value by the linker do use the + script value. */ bfd_boolean bfd_xcoff_record_link_assignment (bfd *output_bfd, @@ -3292,7 +3300,7 @@ xcoff_build_ldsym (struct xcoff_loader_info *ldinfo, struct xcoff_link_hash_entry *h) { - bfd_size_type amt; + size_t amt; /* Warn if this symbol is exported but not defined. */ if ((h->flags & XCOFF_EXPORT) != 0 @@ -3640,7 +3648,7 @@ bfd *sub; struct bfd_strtab_hash *debug_strtab; bfd_byte *debug_contents = NULL; - bfd_size_type amt; + size_t amt; if (bfd_get_flavour (output_bfd) != bfd_target_xcoff_flavour) { @@ -3967,10 +3975,8 @@ return TRUE; error_return: - if (ldinfo.strings != NULL) - free (ldinfo.strings); - if (debug_contents != NULL) - free (debug_contents); + free (ldinfo.strings); + free (debug_contents); return FALSE; } @@ -4782,7 +4788,7 @@ { bfd_size_type sz = o->rawsize ? o->rawsize : o->size; if (!bfd_get_section_contents (input_bfd, o, flinfo->contents, 0, sz)) - return FALSE; + goto err_out; contents = flinfo->contents; } @@ -4804,7 +4810,7 @@ (flinfo->section_info[target_index].relocs + o->output_section->reloc_count))); if (internal_relocs == NULL) - return FALSE; + goto err_out; /* Call processor specific code to relocate the section contents. */ @@ -4814,7 +4820,7 @@ internal_relocs, flinfo->internal_syms, xcoff_data (input_bfd)->csects)) - return FALSE; + goto err_out; offset = o->output_section->vma + o->output_offset - o->vma; irel = internal_relocs; @@ -4861,12 +4867,12 @@ { struct xcoff_toc_rel_hash *n; struct xcoff_link_section_info *si; - bfd_size_type amt; + size_t amt; amt = sizeof (* n); n = bfd_alloc (flinfo->output_bfd, amt); if (n == NULL) - return FALSE; + goto err_out; si = flinfo->section_info + target_index; n->next = si->toc_rel_hashes; n->h = h; @@ -4948,7 +4954,7 @@ (input_bfd, is, buf)); if (name == NULL) - return FALSE; + goto err_out; (*flinfo->info->callbacks->unattached_reloc) (flinfo->info, name, @@ -4972,7 +4978,7 @@ if (!xcoff_create_ldrel (output_bfd, flinfo, o->output_section, input_bfd, irel, sec, h)) - return FALSE; + goto err_out; } } @@ -4983,7 +4989,7 @@ if (! bfd_set_section_contents (output_bfd, o->output_section, contents, (file_ptr) o->output_offset, o->size)) - return FALSE; + goto err_out; } obj_coff_keep_syms (input_bfd) = keep_syms; @@ -4995,6 +5001,10 @@ } return TRUE; + + err_out: + obj_coff_keep_syms (input_bfd) = keep_syms; + return FALSE; } #undef N_TMASK @@ -6199,31 +6209,16 @@ } /* Free up the buffers used by xcoff_link_input_bfd. */ - if (flinfo.internal_syms != NULL) - { - free (flinfo.internal_syms); - flinfo.internal_syms = NULL; - } - if (flinfo.sym_indices != NULL) - { - free (flinfo.sym_indices); - flinfo.sym_indices = NULL; - } - if (flinfo.linenos != NULL) - { - free (flinfo.linenos); - flinfo.linenos = NULL; - } - if (flinfo.contents != NULL) - { - free (flinfo.contents); - flinfo.contents = NULL; - } - if (flinfo.external_relocs != NULL) - { - free (flinfo.external_relocs); - flinfo.external_relocs = NULL; - } + free (flinfo.internal_syms); + flinfo.internal_syms = NULL; + free (flinfo.sym_indices); + flinfo.sym_indices = NULL; + free (flinfo.linenos); + flinfo.linenos = NULL; + free (flinfo.contents); + flinfo.contents = NULL; + free (flinfo.external_relocs); + flinfo.external_relocs = NULL; /* The value of the last C_FILE symbol is supposed to be -1. Write it out again. */ @@ -6242,11 +6237,8 @@ input files. */ bfd_hash_traverse (&info->hash->table, xcoff_write_global_symbol, &flinfo); - if (flinfo.outsyms != NULL) - { - free (flinfo.outsyms); - flinfo.outsyms = NULL; - } + free (flinfo.outsyms); + flinfo.outsyms = NULL; /* Now that we have written out all the global symbols, we know the symbol indices to use for relocs against them, and we can finally @@ -6328,11 +6320,8 @@ goto error_return; } - if (external_relocs != NULL) - { - free (external_relocs); - external_relocs = NULL; - } + free (external_relocs); + external_relocs = NULL; /* Free up the section information. */ if (flinfo.section_info != NULL) @@ -6341,10 +6330,8 @@ for (i = 0; i < abfd->section_count; i++) { - if (flinfo.section_info[i].relocs != NULL) - free (flinfo.section_info[i].relocs); - if (flinfo.section_info[i].rel_hashes != NULL) - free (flinfo.section_info[i].rel_hashes); + free (flinfo.section_info[i].relocs); + free (flinfo.section_info[i].rel_hashes); } free (flinfo.section_info); flinfo.section_info = NULL; @@ -6352,7 +6339,9 @@ /* Write out the loader section contents. */ o = xcoff_hash_table (info)->loader_section; - if (o) + if (o != NULL + && o->size != 0 + && o->output_section != bfd_abs_section_ptr) { BFD_ASSERT ((bfd_byte *) flinfo.ldrel == (xcoff_hash_table (info)->loader_section->contents @@ -6364,19 +6353,25 @@ /* Write out the magic sections. */ o = xcoff_hash_table (info)->linkage_section; - if (o->size > 0 + if (o != NULL + && o->size != 0 + && o->output_section != bfd_abs_section_ptr && ! bfd_set_section_contents (abfd, o->output_section, o->contents, (file_ptr) o->output_offset, o->size)) goto error_return; o = xcoff_hash_table (info)->toc_section; - if (o->size > 0 + if (o != NULL + && o->size != 0 + && o->output_section != bfd_abs_section_ptr && ! bfd_set_section_contents (abfd, o->output_section, o->contents, (file_ptr) o->output_offset, o->size)) goto error_return; o = xcoff_hash_table (info)->descriptor_section; - if (o->size > 0 + if (o != NULL + && o->size != 0 + && o->output_section != bfd_abs_section_ptr && ! bfd_set_section_contents (abfd, o->output_section, o->contents, (file_ptr) o->output_offset, o->size)) @@ -6399,7 +6394,9 @@ /* Write out the debugging string table. */ o = xcoff_hash_table (info)->debug_section; - if (o != NULL) + if (o != NULL + && o->size != 0 + && o->output_section != bfd_abs_section_ptr) { struct bfd_strtab_hash *debug_strtab; @@ -6429,27 +6426,18 @@ for (i = 0; i < abfd->section_count; i++) { - if (flinfo.section_info[i].relocs != NULL) - free (flinfo.section_info[i].relocs); - if (flinfo.section_info[i].rel_hashes != NULL) - free (flinfo.section_info[i].rel_hashes); + free (flinfo.section_info[i].relocs); + free (flinfo.section_info[i].rel_hashes); } free (flinfo.section_info); } - if (flinfo.internal_syms != NULL) - free (flinfo.internal_syms); - if (flinfo.sym_indices != NULL) - free (flinfo.sym_indices); - if (flinfo.outsyms != NULL) - free (flinfo.outsyms); - if (flinfo.linenos != NULL) - free (flinfo.linenos); - if (flinfo.contents != NULL) - free (flinfo.contents); - if (flinfo.external_relocs != NULL) - free (flinfo.external_relocs); - if (external_relocs != NULL) - free (external_relocs); + free (flinfo.internal_syms); + free (flinfo.sym_indices); + free (flinfo.outsyms); + free (flinfo.linenos); + free (flinfo.contents); + free (flinfo.external_relocs); + free (external_relocs); return FALSE; } diff -Nru gdb-9.1/bfd/xcofflink.h gdb-10.2/bfd/xcofflink.h --- gdb-9.1/bfd/xcofflink.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/xcofflink.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* POWER/PowerPC XCOFF linker support. - Copyright (C) 2019 Free Software Foundation, Inc. + Copyright (C) 2019-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/bfd/xsym.c gdb-10.2/bfd/xsym.c --- gdb-9.1/bfd/xsym.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/xsym.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* xSYM symbol-file support for BFD. - Copyright (C) 1999-2019 Free Software Foundation, Inc. + Copyright (C) 1999-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -127,24 +127,12 @@ unsigned char * bfd_sym_read_name_table (bfd *abfd, bfd_sym_header_block *dshb) { - unsigned char *rstr; - long ret; size_t table_size = dshb->dshb_nte.dti_page_count * dshb->dshb_page_size; size_t table_offset = dshb->dshb_nte.dti_first_page * dshb->dshb_page_size; - rstr = bfd_alloc (abfd, table_size); - if (rstr == NULL) - return rstr; - - bfd_seek (abfd, table_offset, SEEK_SET); - ret = bfd_bread (rstr, table_size, abfd); - if (ret < 0 || (unsigned long) ret != table_size) - { - bfd_release (abfd, rstr); - return NULL; - } - - return rstr; + if (bfd_seek (abfd, table_offset, SEEK_SET) != 0) + return FALSE; + return _bfd_alloc_and_read (abfd, table_size, table_size); } void @@ -1808,22 +1796,11 @@ fprintf (f, "\n "); - buf = malloc (entry->physical_size); - if (buf == NULL) - { - fprintf (f, "[ERROR]\n"); - return; - } - if (bfd_seek (abfd, entry->offset, SEEK_SET) < 0) - { - fprintf (f, "[ERROR]\n"); - free (buf); - return; - } - if (bfd_bread (buf, entry->physical_size, abfd) != entry->physical_size) + if (bfd_seek (abfd, entry->offset, SEEK_SET) != 0 + || (buf = _bfd_malloc_and_read (abfd, entry->physical_size, + entry->physical_size)) == NULL) { fprintf (f, "[ERROR]\n"); - free (buf); return; } @@ -2253,7 +2230,7 @@ return 0; } -const bfd_target * +bfd_cleanup bfd_sym_object_p (bfd *abfd) { bfd_sym_version version = -1; @@ -2270,7 +2247,7 @@ if (bfd_sym_scan (abfd, version, mdata) != 0) goto wrong; - return abfd->xvec; + return _bfd_no_cleanup; wrong: bfd_set_error (bfd_error_wrong_format); diff -Nru gdb-9.1/bfd/xsym.h gdb-10.2/bfd/xsym.h --- gdb-9.1/bfd/xsym.h 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/xsym.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* xSYM symbol-file support for BFD. - Copyright (C) 1999-2019 Free Software Foundation, Inc. + Copyright (C) 1999-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -686,7 +686,7 @@ (bfd *, FILE *); extern int bfd_sym_scan (bfd *, bfd_sym_version, bfd_sym_data_struct *); -extern const bfd_target * bfd_sym_object_p +extern bfd_cleanup bfd_sym_object_p (bfd *); extern void bfd_sym_get_symbol_info (bfd *, asymbol *, symbol_info *); diff -Nru gdb-9.1/bfd/xtensa-isa.c gdb-10.2/bfd/xtensa-isa.c --- gdb-9.1/bfd/xtensa-isa.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/xtensa-isa.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Configurable Xtensa ISA support. - Copyright (C) 2003-2019 Free Software Foundation, Inc. + Copyright (C) 2003-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -223,7 +223,7 @@ int word_inx = byte_to_word_index (i); int bit_inx = byte_to_bit_index (i); - insn[word_inx] |= (*cp & 0xff) << bit_inx; + insn[word_inx] |= (unsigned) (*cp & 0xff) << bit_inx; } } @@ -340,43 +340,26 @@ the memory allocated by xtensa_isa_init and restore the xtensa_isa structure to its initial state. */ - if (intisa->opname_lookup_table) - { - free (intisa->opname_lookup_table); - intisa->opname_lookup_table = 0; - } + free (intisa->opname_lookup_table); + intisa->opname_lookup_table = 0; - if (intisa->state_lookup_table) - { - free (intisa->state_lookup_table); - intisa->state_lookup_table = 0; - } + free (intisa->state_lookup_table); + intisa->state_lookup_table = 0; + + free (intisa->sysreg_lookup_table); + intisa->sysreg_lookup_table = 0; - if (intisa->sysreg_lookup_table) - { - free (intisa->sysreg_lookup_table); - intisa->sysreg_lookup_table = 0; - } for (n = 0; n < 2; n++) { - if (intisa->sysreg_table[n]) - { - free (intisa->sysreg_table[n]); - intisa->sysreg_table[n] = 0; - } + free (intisa->sysreg_table[n]); + intisa->sysreg_table[n] = 0; } - if (intisa->interface_lookup_table) - { - free (intisa->interface_lookup_table); - intisa->interface_lookup_table = 0; - } + free (intisa->interface_lookup_table); + intisa->interface_lookup_table = 0; - if (intisa->funcUnit_lookup_table) - { - free (intisa->funcUnit_lookup_table); - intisa->funcUnit_lookup_table = 0; - } + free (intisa->funcUnit_lookup_table); + intisa->funcUnit_lookup_table = 0; } diff -Nru gdb-9.1/bfd/xtensa-modules.c gdb-10.2/bfd/xtensa-modules.c --- gdb-9.1/bfd/xtensa-modules.c 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/bfd/xtensa-modules.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Xtensa configuration-specific ISA information. - Copyright (C) 2003-2019 Free Software Foundation, Inc. + Copyright (C) 2003-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/ChangeLog gdb-10.2/ChangeLog --- gdb-9.1/ChangeLog 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/ChangeLog 2021-04-25 04:06:26.000000000 +0000 @@ -1,16 +1,158 @@ -2020-02-01 Sergio Durigan Junior +2020-07-24 Aaron Merey - * configure.ac: Don't abort the build if trying to build GDB in tree - _and_ invoking with '--enable-src-release-build'. - * configure: Regenerate. - * src-release.sh (do_proto_toplev): Invoke 'configure' using - '--enable-src-release-build'. - -2020-01-17 Joel Brobecker - - * configure.ac: Abort the build with an error if trying to build - GDB in tree. - * configure: Regenerate. + * configure: Rebuild. + * configure.ac: Remove AC_DEBUGINFOD. + +2020-07-04 Nick Clifton + + Binutils 2.35 branch created. + +2020-04-21 Stephen Casner + + PR 25830 + * configure.ac (noconfigdirs): Exclude gdb & gprof for pdp11. + * configure: Rebuild. + +2020-03-12 Tom Tromey + + * Makefile.in: Rebuild. + * Makefile.def (gdbserver): Depend on gdbsupport. + +2020-03-12 Tom Tromey + + * Makefile.in: Rebuild. + * Makefile.def (gdbsupport): Don't depend on bfd. + +2020-03-12 Tom Tromey + + * Makefile.in: Rebuild. + * Makefile.def (gdbsupport): Depend on intl. + +2020-02-17 Tom Tromey + + * configure: Rebuild. + * configure.ac (configdirs): Add gnulib and gdbsupport when building + gdbserver. + +2020-02-14 Tom Tromey + + * Makefile.in: Rebuild. + * Makefile.def: Make gdbserver require gnulib and libiberty. + +2020-02-07 Tom Tromey + Pedro Alves + + * src-release.sh (GDB_SUPPORT_DIRS): Add gdbserver. + * gdbserver: New directory, moved from gdb/gdbserver. + * configure.ac (host_tools): Add gdbserver. + Only build gdbserver on certain systems. + * Makefile.in, configure: Rebuild. + * Makefile.def (host_modules, dependencies): Add gdbserver. + * MAINTAINERS: Add gdbserver. + +2020-01-28 Sergio Durigan Junior + + * src-release.sh (getver): Look for gdbsupport's + create-version.sh script at the current directory if tool is + "gdb". + +2020-01-19 Simon Marchi + + * remote-sim.c (gdbsim_target::wait): Return + sim_data->remote_sim_ptid instead of inferior_ptid. + +2020-01-18 Nick Clifton + + Binutils 2.34 branch created. + +2020-01-18 Nick Clifton + + Synchronize top level configure files with master version: + + 2020-01-01 Ben Elliston + + * config.guess: Update copyright years. + * config.sub: Likewise. + + 2019-12-21 Ben Elliston + + * config.guess (set_cc_for_build): Prevent multiple calls by + checking if $tmp is already set. We can't check CC_FOR_BUILD as + the user may set it externally. Thanks to Torbjörn Granlund for + the bug report. + + 2019-12-21 Torbjörn Granlund + + * config.guess (alpha:Linux:*:*): Guard against missing + /proc/cpuinfo by redirecting standard error to /dev/null. + + 2019-09-12 Daniel Bittman + + * config.guess (*:Twizzler:*:*): New. + * config.sub (-twizzler*): New. + + 2019-07-24 Ben Elliston + + * config.guess (mips:OSF1:*.*): Whitespace cleanup. + + 2019-06-30 Ben Elliston + + * config.sub (case $os): Match nsk* and powerunix. Don't later + match nsk* and set os=nsk which removes the OS version number. + + 2019-06-30 Ben Elliston + + * config.sub: Recognise os108*. + + 2019-06-26 Ben Elliston + + * config.sub (hp300): Set $os to hpux. + + 2019-06-26 Ben Elliston + + * config.sub (vsta): Move into alphabetical order. + + 2019-06-10 Ben Elliston + + * config.guess (*:OS108:*:*): Recognise new OS. + + 2019-05-28 Ben Elliston + + * config.guess (*:Darwin:*:*): Run xcode-select to determine if a + system compiler is installed. If not, do not run set_cc_for_build, + as the default cc will open a dialog box asking to install + Xcode. If no C compiler is available, guess based on uname -p and + uname -m. + + 2019-05-28 Ben Elliston + + * config.guess (*:Darwin:*:*): Simplify UNAME_PROCESSOR. + +2020-01-17 Simon Marchi + + * Makefile.def: Add dependencies of all-gdbsupport on all-bfd. + * Makefile.in: Re-generate. + +2020-01-14 Tom Tromey + + * src-release.sh (GDB_SUPPORT_DIRS): Add gdbsupport. + * MAINTAINERS: Add gdbsupport. + * configure: Rebuild. + * configure.ac (configdirs): Add gdbsupport. + * gdbsupport: New directory, move from gdb/gdbsupport. + * Makefile.def (host_modules, dependencies): Add gnulib. + * Makefile.in: Rebuild. + +2020-01-09 Aaron Merey + + * config/debuginfod.m4: New file. Add macro AC_DEBUGINFOD. Adds + new configure option --with-debuginfod. + * configure: Regenerate. + * configure.ac: Call AC_DEBUGINFOD. + +2019-12-26 Christian Biesinger + + * .gitignore: Add perf.data and perf.data.old. 2019-10-17 Sergio Durigan Junior diff -Nru gdb-9.1/config/ax_count_cpus.m4 gdb-10.2/config/ax_count_cpus.m4 --- gdb-9.1/config/ax_count_cpus.m4 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/config/ax_count_cpus.m4 2020-09-13 02:33:40.000000000 +0000 @@ -0,0 +1,101 @@ +# =========================================================================== +# https://www.gnu.org/software/autoconf-archive/ax_count_cpus.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_COUNT_CPUS([ACTION-IF-DETECTED],[ACTION-IF-NOT-DETECTED]) +# +# DESCRIPTION +# +# Attempt to count the number of logical processor cores (including +# virtual and HT cores) currently available to use on the machine and +# place detected value in CPU_COUNT variable. +# +# On successful detection, ACTION-IF-DETECTED is executed if present. If +# the detection fails, then ACTION-IF-NOT-DETECTED is triggered. The +# default ACTION-IF-NOT-DETECTED is to set CPU_COUNT to 1. +# +# LICENSE +# +# Copyright (c) 2014,2016 Karlson2k (Evgeny Grin) +# Copyright (c) 2012 Brian Aker +# Copyright (c) 2008 Michael Paul Bailey +# Copyright (c) 2008 Christophe Tournayre +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. + +#serial 22 + + AC_DEFUN([AX_COUNT_CPUS],[dnl + AC_REQUIRE([AC_CANONICAL_HOST])dnl + AC_REQUIRE([AC_PROG_EGREP])dnl + AC_MSG_CHECKING([the number of available CPUs]) + CPU_COUNT="0" + + # Try generic methods + + # 'getconf' is POSIX utility, but '_NPROCESSORS_ONLN' and + # 'NPROCESSORS_ONLN' are platform-specific + command -v getconf >/dev/null 2>&1 && \ + CPU_COUNT=`getconf _NPROCESSORS_ONLN 2>/dev/null || getconf NPROCESSORS_ONLN 2>/dev/null` || CPU_COUNT="0" + AS_IF([[test "$CPU_COUNT" -gt "0" 2>/dev/null || ! command -v nproc >/dev/null 2>&1]],[[: # empty]],[dnl + # 'nproc' is part of GNU Coreutils and is widely available + CPU_COUNT=`OMP_NUM_THREADS='' nproc 2>/dev/null` || CPU_COUNT=`nproc 2>/dev/null` || CPU_COUNT="0" + ])dnl + + AS_IF([[test "$CPU_COUNT" -gt "0" 2>/dev/null]],[[: # empty]],[dnl + # Try platform-specific preferred methods + AS_CASE([[$host_os]],dnl + [[*linux*]],[[CPU_COUNT=`lscpu -p 2>/dev/null | $EGREP -e '^@<:@0-9@:>@+,' -c` || CPU_COUNT="0"]],dnl + [[*darwin*]],[[CPU_COUNT=`sysctl -n hw.logicalcpu 2>/dev/null` || CPU_COUNT="0"]],dnl + [[freebsd*]],[[command -v sysctl >/dev/null 2>&1 && CPU_COUNT=`sysctl -n kern.smp.cpus 2>/dev/null` || CPU_COUNT="0"]],dnl + [[netbsd*]], [[command -v sysctl >/dev/null 2>&1 && CPU_COUNT=`sysctl -n hw.ncpuonline 2>/dev/null` || CPU_COUNT="0"]],dnl + [[solaris*]],[[command -v psrinfo >/dev/null 2>&1 && CPU_COUNT=`psrinfo 2>/dev/null | $EGREP -e '^@<:@0-9@:>@.*on-line' -c 2>/dev/null` || CPU_COUNT="0"]],dnl + [[mingw*]],[[CPU_COUNT=`ls -qpU1 /proc/registry/HKEY_LOCAL_MACHINE/HARDWARE/DESCRIPTION/System/CentralProcessor/ 2>/dev/null | $EGREP -e '^@<:@0-9@:>@+/' -c` || CPU_COUNT="0"]],dnl + [[msys*]],[[CPU_COUNT=`ls -qpU1 /proc/registry/HKEY_LOCAL_MACHINE/HARDWARE/DESCRIPTION/System/CentralProcessor/ 2>/dev/null | $EGREP -e '^@<:@0-9@:>@+/' -c` || CPU_COUNT="0"]],dnl + [[cygwin*]],[[CPU_COUNT=`ls -qpU1 /proc/registry/HKEY_LOCAL_MACHINE/HARDWARE/DESCRIPTION/System/CentralProcessor/ 2>/dev/null | $EGREP -e '^@<:@0-9@:>@+/' -c` || CPU_COUNT="0"]]dnl + )dnl + ])dnl + + AS_IF([[test "$CPU_COUNT" -gt "0" 2>/dev/null || ! command -v sysctl >/dev/null 2>&1]],[[: # empty]],[dnl + # Try less preferred generic method + # 'hw.ncpu' exist on many platforms, but not on GNU/Linux + CPU_COUNT=`sysctl -n hw.ncpu 2>/dev/null` || CPU_COUNT="0" + ])dnl + + AS_IF([[test "$CPU_COUNT" -gt "0" 2>/dev/null]],[[: # empty]],[dnl + # Try platform-specific fallback methods + # They can be less accurate and slower then preferred methods + AS_CASE([[$host_os]],dnl + [[*linux*]],[[CPU_COUNT=`$EGREP -e '^processor' -c /proc/cpuinfo 2>/dev/null` || CPU_COUNT="0"]],dnl + [[*darwin*]],[[CPU_COUNT=`system_profiler SPHardwareDataType 2>/dev/null | $EGREP -i -e 'number of cores:'|cut -d : -f 2 -s|tr -d ' '` || CPU_COUNT="0"]],dnl + [[freebsd*]],[[CPU_COUNT=`dmesg 2>/dev/null| $EGREP -e '^cpu@<:@0-9@:>@+: '|sort -u|$EGREP -e '^' -c` || CPU_COUNT="0"]],dnl + [[netbsd*]], [[CPU_COUNT=`command -v cpuctl >/dev/null 2>&1 && cpuctl list 2>/dev/null| $EGREP -e '^@<:@0-9@:>@+ .* online ' -c` || \ + CPU_COUNT=`dmesg 2>/dev/null| $EGREP -e '^cpu@<:@0-9@:>@+ at'|sort -u|$EGREP -e '^' -c` || CPU_COUNT="0"]],dnl + [[solaris*]],[[command -v kstat >/dev/null 2>&1 && CPU_COUNT=`kstat -m cpu_info -s state -p 2>/dev/null | $EGREP -c -e 'on-line'` || \ + CPU_COUNT=`kstat -m cpu_info 2>/dev/null | $EGREP -c -e 'module: cpu_info'` || CPU_COUNT="0"]],dnl + [[mingw*]],[AS_IF([[CPU_COUNT=`reg query 'HKLM\\Hardware\\Description\\System\\CentralProcessor' 2>/dev/null | $EGREP -e '\\\\@<:@0-9@:>@+$' -c`]],dnl + [[: # empty]],[[test "$NUMBER_OF_PROCESSORS" -gt "0" 2>/dev/null && CPU_COUNT="$NUMBER_OF_PROCESSORS"]])],dnl + [[msys*]],[[test "$NUMBER_OF_PROCESSORS" -gt "0" 2>/dev/null && CPU_COUNT="$NUMBER_OF_PROCESSORS"]],dnl + [[cygwin*]],[[test "$NUMBER_OF_PROCESSORS" -gt "0" 2>/dev/null && CPU_COUNT="$NUMBER_OF_PROCESSORS"]]dnl + )dnl + ])dnl + + AS_IF([[test "x$CPU_COUNT" != "x0" && test "$CPU_COUNT" -gt 0 2>/dev/null]],[dnl + AC_MSG_RESULT([[$CPU_COUNT]]) + m4_ifvaln([$1],[$1],)dnl + ],[dnl + m4_ifval([$2],[dnl + AS_UNSET([[CPU_COUNT]]) + AC_MSG_RESULT([[unable to detect]]) + $2 + ], [dnl + CPU_COUNT="1" + AC_MSG_RESULT([[unable to detect (assuming 1)]]) + ])dnl + ])dnl + ])dnl diff -Nru gdb-9.1/config/bootstrap-lto-lean.mk gdb-10.2/config/bootstrap-lto-lean.mk --- gdb-9.1/config/bootstrap-lto-lean.mk 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/config/bootstrap-lto-lean.mk 2020-09-13 02:33:40.000000000 +0000 @@ -0,0 +1,17 @@ +# This option enables LTO for stage4 and LTO for generators in stage3 with profiledbootstrap. +# Otherwise, LTO is used in only stage3. + +STAGE3_CFLAGS += -flto=jobserver +override STAGEtrain_CFLAGS := $(filter-out -flto=jobserver,$(STAGEtrain_CFLAGS)) +STAGEtrain_GENERATOR_CFLAGS += -flto=jobserver +STAGEfeedback_CFLAGS += -flto=jobserver + +# assumes the host supports the linker plugin +LTO_AR = $$r/$(HOST_SUBDIR)/prev-gcc/gcc-ar$(exeext) -B$$r/$(HOST_SUBDIR)/prev-gcc/ +LTO_RANLIB = $$r/$(HOST_SUBDIR)/prev-gcc/gcc-ranlib$(exeext) -B$$r/$(HOST_SUBDIR)/prev-gcc/ + +LTO_EXPORTS = AR="$(LTO_AR)"; export AR; \ + RANLIB="$(LTO_RANLIB)"; export RANLIB; +LTO_FLAGS_TO_PASS = AR="$(LTO_AR)" RANLIB="$(LTO_RANLIB)" + +do-compare = /bin/true diff -Nru gdb-9.1/config/bootstrap-lto.mk gdb-10.2/config/bootstrap-lto.mk --- gdb-9.1/config/bootstrap-lto.mk 2018-06-26 21:37:28.000000000 +0000 +++ gdb-10.2/config/bootstrap-lto.mk 2020-09-13 02:33:40.000000000 +0000 @@ -15,3 +15,4 @@ LTO_FLAGS_TO_PASS = AR="$(LTO_AR)" RANLIB="$(LTO_RANLIB)" do-compare = $(SHELL) $(srcdir)/contrib/compare-lto $$f1 $$f2 +extra-compare = gcc/lto1$(exeext) diff -Nru gdb-9.1/config/bootstrap-Og.mk gdb-10.2/config/bootstrap-Og.mk --- gdb-9.1/config/bootstrap-Og.mk 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/config/bootstrap-Og.mk 2020-09-13 02:33:40.000000000 +0000 @@ -0,0 +1 @@ +BOOT_CFLAGS := -Og $(filter-out -O%, $(BOOT_CFLAGS)) diff -Nru gdb-9.1/config/cet.m4 gdb-10.2/config/cet.m4 --- gdb-9.1/config/cet.m4 2018-06-26 21:37:28.000000000 +0000 +++ gdb-10.2/config/cet.m4 2021-04-25 04:06:26.000000000 +0000 @@ -3,16 +3,19 @@ dnl (SHELL-CODE_HANDLER) dnl AC_DEFUN([GCC_CET_FLAGS],[dnl -GCC_ENABLE(cet, no, ,[enable Intel CET in target libraries], +GCC_ENABLE(cet, auto, ,[enable Intel CET in target libraries], permit yes|no|auto) AC_MSG_CHECKING([for CET support]) +# NB: Avoid nested save_CFLAGS and save_LDFLAGS. case "$host" in i[[34567]]86-*-linux* | x86_64-*-linux*) case "$enable_cet" in auto) # Check if target supports multi-byte NOPs - # and if assembler supports CET insn. + # and if compiler and assembler support CET insn. + cet_save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -fcf-protection" AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [], @@ -25,6 +28,7 @@ ])], [enable_cet=yes], [enable_cet=no]) + CFLAGS="$cet_save_CFLAGS" ;; yes) # Check if assembler supports CET. @@ -48,3 +52,127 @@ AC_MSG_RESULT([no]) fi ]) + +dnl +dnl GCC_CET_HOST_FLAGS +dnl (SHELL-CODE_HANDLER) +dnl +AC_DEFUN([GCC_CET_HOST_FLAGS],[dnl +GCC_ENABLE(cet, auto, ,[enable Intel CET in host libraries], + permit yes|no|auto) +AC_MSG_CHECKING([for CET support]) + +case "$host" in + i[[34567]]86-*-linux* | x86_64-*-linux*) + may_have_cet=yes + cet_save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -fcf-protection" + case "$enable_cet" in + auto) + # Check if target supports multi-byte NOPs + # and if compiler and assembler support CET. + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [], + [ +#if !defined(__SSE2__) +#error target does not support multi-byte NOPs +#else +asm ("setssbsy"); +#endif + ])], + [enable_cet=yes], + [enable_cet=no]) + ;; + yes) + # Check if compiler and assembler support CET. + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [], + [asm ("setssbsy");])], + [support_cet=yes], + [support_cet=no]) + if test $support_cet = "no"; then + if test x$enable_bootstrap != xno \ + && test -z "${with_build_subdir}" \ + && (test ! -f ../stage_current \ + || test `cat ../stage_current` != "stage1"); then + # Require CET support only for the final GCC build. + AC_MSG_ERROR([compiler and assembler with CET support are required for --enable-cet]) + else + # Don't enable CET without CET support for non-bootstrap + # build, in stage1 nor for build support. + enable_cet=no + fi + fi + ;; + esac + CFLAGS="$cet_save_CFLAGS" + ;; + *) + may_have_cet=no + enable_cet=no + ;; +esac + +cet_save_CFLAGS="$CFLAGS" +CFLAGS="$CFLAGS -fcf-protection=none" +cet_save_LDFLAGS="$LDFLAGS" +LDFLAGS="$LDFLAGS -Wl,-z,ibt,-z,shstk" +if test x$may_have_cet = xyes; then + # Check whether -fcf-protection=none -Wl,-z,ibt,-z,shstk work. + AC_TRY_LINK( + [],[return 0;], + [may_have_cet=yes], + [may_have_cet=no]) +fi + +if test x$may_have_cet = xyes; then + if test x$cross_compiling = xno; then + AC_TRY_RUN([ +static void +foo (void) +{ +} + +static void +__attribute__ ((noinline, noclone)) +xxx (void (*f) (void)) +{ + f (); +} + +static void +__attribute__ ((noinline, noclone)) +bar (void) +{ + xxx (foo); +} + +int +main () +{ + bar (); + return 0; +} + ], + [have_cet=no], + [have_cet=yes]) + if test x$enable_cet = xno -a x$have_cet = xyes; then + AC_MSG_ERROR([Intel CET must be enabled on Intel CET enabled host]) + fi + fi +else + # Enable CET in cross compiler if possible so that it will run on both + # CET and non-CET hosts. + have_cet=yes +fi +if test x$enable_cet = xyes; then + $1="-fcf-protection" + AC_MSG_RESULT([yes]) +else + AC_MSG_RESULT([no]) +fi +CFLAGS="$cet_save_CFLAGS" +LDFLAGS="$cet_save_LDFLAGS" +]) diff -Nru gdb-9.1/config/ChangeLog gdb-10.2/config/ChangeLog --- gdb-9.1/config/ChangeLog 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/config/ChangeLog 2021-04-25 04:06:26.000000000 +0000 @@ -1,3 +1,111 @@ +2020-09-08 Alan Modra + + Sync from gcc + 2020-07-15 H.J. Lu + PR bootstrap/96202 + * cet.m4 (GCC_CET_HOST_FLAGS): Don't enable CET without CET + support in stage1 nor for build support. + +2020-07-30 Rainer Orth + + * largefile.m4 (ACX_LARGEFILE) : + Check for incompatilibity with large-file support + on Solaris. + Only disable large-file support and perhaps plugins if needed. + Set, substitute LARGEFILE_CPPFLAGS if so. + +2020-07-28 H.J. Lu + + PR binutils/26301 + * pkg.m4 (PKG_CHECK_MODULES): Use AC_TRY_LINK only if + $pkg_failed = no. + +2020-07-28 H.J. Lu + + PR binutils/26301 + * pkg.m4 (PKG_CHECK_MODULES): Add AC_TRY_LINK to check if + $pkg_cv_[]$1[]_LIBS works. + +2020-07-24 Aaron Merey + + * debuginfod.m4: use PKG_CHECK_MODULES. + * pkg.m4: New file. + +2020-07-04 Nick Clifton + + Binutils 2.35 branch created. + +2020-06-24 H.J. Lu + + Sync with GCC + 2020-05-29 H.J. Lu + + PR bootstrap/95413 + * cet.m4: Replace save_CFLAGS and save_LDFLAGS with + cet_save_CFLAGS and cet_save_LDFLAGS. + +2020-05-16 H.J. Lu + + Sync with GCC + 2020-05-15 H.J. Lu + + PR bootstrap/95147 + * cet.m4 (GCC_CET_FLAGS): Also check if -fcf-protection works + when defaulting to auto. + + 2020-05-14 H.J. Lu + + * cet.m4 (GCC_CET_FLAGS): Change default to auto. + +2020-05-12 H.J. Lu + + Sync with GCC + 2020-05-12 H.J. Lu + + PR bootstrap/94998 + * cet.m4 (GCC_CET_HOST_FLAGS): Enable CET in cross compiler if + possible. + +2020-04-29 H.J. Lu + + Sync with GCC + 2020-04-28 H.J. Lu + + PR bootstrap/94739 + * cet.m4 (GCC_CET_HOST_FLAGS): Add -fcf-protection=none to + -Wl,-z,ibt,-z,shstk. Check whether -fcf-protection=none + -Wl,-z,ibt,-z,shstk works first. + + 2020-04-25 H.J. Lu + + PR bootstrap/94739 + * cet.m4 (GCC_CET_HOST_FLAGS): New. + + 2020-04-22 Jakub Jelinek + + PR libfortran/94694 + PR libfortran/94586 + * math.m4 (GCC_CHECK_MATH_INLINE_BUILTIN_FALLBACK1, + GCC_CHECK_MATH_INLINE_BUILTIN_FALLBACK2): New. + +2020-02-19 Andrew Burgess + + * ax_count_cpus.m4: New file, backported from GCC. + * bootstrap-Og.mk: New file, backported from GCC. + * bootstrap-lto-lean.mk: New file, backported from GCC. + * bootstrap-lto.mk: Changes backported from GCC. + * futex.m4: Changes backported from GCC. + * gthr.m4: Changes backported from GCC. + * lib-link.m4: Changes backported from GCC. + * mh-mingw: Changes backported from GCC. + * no-executables.m4: Changes backported from GCC. + * tls.m4: Changes backported from GCC. + * toolexeclibdir.m4: New file, backported from GCC. + +2020-01-18 Nick Clifton + + Binutils 2.34 branch created. + 2019-09-09 Phil Blundell binutils 2.33 branch created. diff -Nru gdb-9.1/config/debuginfod.m4 gdb-10.2/config/debuginfod.m4 --- gdb-9.1/config/debuginfod.m4 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/config/debuginfod.m4 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,30 @@ +dnl Copyright (C) 1997-2020 Free Software Foundation, Inc. +dnl This file is free software, distributed under the terms of the GNU +dnl General Public License. As a special exception to the GNU General +dnl Public License, this file may be distributed as part of a program +dnl that contains a configuration script generated by Autoconf, under +dnl the same distribution terms as the rest of that program. + +m4_include([../config/pkg.m4]) + +AC_DEFUN([AC_DEBUGINFOD], +[ +# Handle optional debuginfod support +AC_ARG_WITH([debuginfod], + AC_HELP_STRING([--with-debuginfod], [Enable debuginfo lookups with debuginfod (auto/yes/no)]), + [], [with_debuginfod=auto]) +AC_MSG_CHECKING([whether to use debuginfod]) +AC_MSG_RESULT([$with_debuginfod]) + +if test "x$with_debuginfod" != xno; then + PKG_CHECK_MODULES([DEBUGINFOD], [libdebuginfod >= 0.179], + [AC_DEFINE([HAVE_LIBDEBUGINFOD], [1], [Define to 1 if debuginfod is enabled.])], + [if test "x$with_debuginfod" = xyes; then + AC_MSG_ERROR(["--with-debuginfod was given, but libdebuginfod is missing or unusable."]) + else + AC_MSG_WARN([libdebuginfod is missing or unusable; some features may be unavailable.]) + fi]) +else + AC_MSG_WARN([debuginfod support disabled; some features may be unavailable.]) +fi +]) diff -Nru gdb-9.1/config/futex.m4 gdb-10.2/config/futex.m4 --- gdb-9.1/config/futex.m4 2013-12-22 10:09:55.000000000 +0000 +++ gdb-10.2/config/futex.m4 2020-09-13 02:33:40.000000000 +0000 @@ -9,7 +9,7 @@ GCC_ENABLE(linux-futex,default, ,[use the Linux futex system call], permit yes|no|default) case "$target" in - *-linux*) + *-linux* | *-uclinux*) case "$enable_linux_futex" in default) # If headers don't have gettid/futex syscalls definition, then @@ -22,6 +22,7 @@ AC_LINK_IFELSE( [AC_LANG_PROGRAM( [#include + #include int lk;], [syscall (SYS_gettid); syscall (SYS_futex, &lk, 0, 0, 0);])], [save_LIBS="$LIBS" @@ -48,6 +49,7 @@ AC_LINK_IFELSE( [AC_LANG_PROGRAM( [#include + #include int lk;], [syscall (SYS_gettid); syscall (SYS_futex, &lk, 0, 0, 0);])],[], [AC_MSG_ERROR([SYS_gettid and SYS_futex required for --enable-linux-futex])]) diff -Nru gdb-9.1/config/gthr.m4 gdb-10.2/config/gthr.m4 --- gdb-9.1/config/gthr.m4 2013-12-26 07:21:50.000000000 +0000 +++ gdb-10.2/config/gthr.m4 2020-09-13 02:33:40.000000000 +0000 @@ -13,6 +13,7 @@ case $1 in aix) thread_header=config/rs6000/gthr-aix.h ;; dce) thread_header=config/pa/gthr-dce.h ;; + gcn) thread_header=config/gcn/gthr-gcn.h ;; lynx) thread_header=config/gthr-lynx.h ;; mipssde) thread_header=config/mips/gthr-mipssde.h ;; posix) thread_header=gthr-posix.h ;; diff -Nru gdb-9.1/config/largefile.m4 gdb-10.2/config/largefile.m4 --- gdb-9.1/config/largefile.m4 2013-12-22 10:09:55.000000000 +0000 +++ gdb-10.2/config/largefile.m4 2020-09-13 02:33:40.000000000 +0000 @@ -1,5 +1,5 @@ # This macro wraps AC_SYS_LARGEFILE with one exception for Solaris. -# PR 9992/binutils: We have to replicate everywhere the behaviour of +# PR binutils/9992: We have to replicate everywhere the behaviour of # bfd's configure script so that all the directories agree on the size # of structures used to describe files. @@ -16,17 +16,38 @@ AC_PLUGINS case "${host}" in -changequote(,)dnl - sparc-*-solaris*|i[3-7]86-*-solaris*) -changequote([,])dnl - # On native 32bit sparc and ia32 solaris, large-file and procfs support - # are mutually exclusive; and without procfs support, the bfd/ elf module - # cannot provide certain routines such as elfcore_write_prpsinfo - # or elfcore_write_prstatus. So unless the user explicitly requested - # large-file support through the --enable-largefile switch, disable - # large-file support in favor of procfs support. - test "${target}" = "${host}" -a "x$plugins" = xno \ - && : ${enable_largefile="no"} + sparc-*-solaris*|i?86-*-solaris*) + # On native 32-bit Solaris/SPARC and x86, large-file and procfs support + # were mutually exclusive until Solaris 11.3. Without procfs support, + # the bfd/ elf module cannot provide certain routines such as + # elfcore_write_prpsinfo or elfcore_write_prstatus. So unless the user + # explicitly requested large-file support through the + # --enable-largefile switch, disable large-file support in favor of + # procfs support. + # + # Check if is incompatible with large-file support. + AC_TRY_COMPILE([#define _FILE_OFFSET_BITS 64 +#define _STRUCTURED_PROC 1 +#include ], , acx_cv_procfs_lfs=yes, acx_cv_procfs_lfs=no) + # + # Forcefully disable large-file support only if necessary, gdb is in + # tree and enabled. + if test "${target}" = "${host}" -a "$acx_cv_procfs_lfs" = no \ + -a -d $srcdir/../gdb -a "$enable_gdb" != no; then + : ${enable_largefile="no"} + if test "$plugins" = yes; then + AC_MSG_WARN([ +plugin support disabled; require large-file support which is incompatible with GDB.]) + plugins=no + fi + fi + # + # Explicitly undef _FILE_OFFSET_BITS if enable_largefile=no for the + # benefit of g++ 9+ which predefines it on Solaris. + if test "$enable_largefile" = no; then + LARGEFILE_CPPFLAGS="-U_FILE_OFFSET_BITS" + AC_SUBST(LARGEFILE_CPPFLAGS) + fi ;; esac diff -Nru gdb-9.1/config/lib-link.m4 gdb-10.2/config/lib-link.m4 --- gdb-9.1/config/lib-link.m4 2013-10-28 03:21:20.000000000 +0000 +++ gdb-10.2/config/lib-link.m4 2020-09-13 02:33:40.000000000 +0000 @@ -150,6 +150,11 @@ fi fi ]) + AC_LIB_ARG_WITH([lib$1-type], +[ --with-lib$1-type=TYPE type of library to search for (auto/static/shared) ], + [ with_lib$1_type=$withval ], [ with_lib$1_type=auto ]) + lib_type=`eval echo \$with_lib$1_type` + dnl Search the library and its dependencies in $additional_libdir and dnl $LDFLAGS. Using breadth-first-seach. LIB[]NAME= @@ -195,13 +200,13 @@ found_so= found_a= if test $use_additional = yes; then - if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then + if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext" && test x$lib_type != xstatic; then found_dir="$additional_libdir" found_so="$additional_libdir/lib$name.$shlibext" if test -f "$additional_libdir/lib$name.la"; then found_la="$additional_libdir/lib$name.la" fi - else + elif test x$lib_type != xshared; then if test -f "$additional_libdir/lib$name.$libext"; then found_dir="$additional_libdir" found_a="$additional_libdir/lib$name.$libext" @@ -217,13 +222,13 @@ case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` - if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then + if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext" && test x$lib_type != xstatic; then found_dir="$dir" found_so="$dir/lib$name.$shlibext" if test -f "$dir/lib$name.la"; then found_la="$dir/lib$name.la" fi - else + elif test x$lib_type != xshared; then if test -f "$dir/lib$name.$libext"; then found_dir="$dir" found_a="$dir/lib$name.$libext" @@ -487,8 +492,13 @@ dnl known to the linker and runtime loader. (All the system dnl directories known to the linker should also be known to the dnl runtime loader, otherwise the system is severely misconfigured.) - LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" - LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name" + if test "x$lib_type" = "xauto" || test "x$lib_type" = "xshared"; then + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name" + else + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l:lib$name.$libext" + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l:lib$name.$libext" + fi fi fi fi diff -Nru gdb-9.1/config/math.m4 gdb-10.2/config/math.m4 --- gdb-9.1/config/math.m4 2018-11-07 19:00:24.000000000 +0000 +++ gdb-10.2/config/math.m4 2020-09-13 02:33:40.000000000 +0000 @@ -48,3 +48,67 @@ [Define to 1 if you have the `$1' function.]) fi ]) + +dnl GCC_CHECK_MATH_INLINE_BUILTIN_FALLBACK1([name], [type]) +dnl +dnl Check if math function NAME fallback for function with single +dnl TYPE argument and TYPE result can be implemented using +dnl __builtin_NAME expanded inline without needing unavailable math +dnl library function. +AC_DEFUN([GCC_CHECK_MATH_INLINE_BUILTIN_FALLBACK1], +[ + AC_REQUIRE([GCC_CHECK_LIBM]) +if test $gcc_cv_math_func_$1 = no; then + AC_CACHE_CHECK([for inline __builtin_$1], [gcc_cv_math_inline_builtin_$1], + [AC_LINK_IFELSE([AC_LANG_SOURCE([ +$2 +$1_fallback ($2 x) +{ + return __builtin_$1 (x); +} + +int +main () +{ + return 0; +} +])], +[gcc_cv_math_inline_builtin_$1=yes], +[gcc_cv_math_inline_builtin_$1=no])]) + if test $gcc_cv_math_inline_builtin_$1 = yes; then + AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_INLINE_BUILTIN_$1),[1], + [Define to 1 if `__builtin_$1' is expanded inline.]) + fi +fi]) + +dnl GCC_CHECK_MATH_INLINE_BUILTIN_FALLBACK2([name], [type]) +dnl +dnl Check if math function NAME fallback for function with two +dnl TYPE arguments and TYPE result can be implemented using +dnl __builtin_NAME expanded inline without needing unavailable math +dnl library function. +AC_DEFUN([GCC_CHECK_MATH_INLINE_BUILTIN_FALLBACK2], +[ + AC_REQUIRE([GCC_CHECK_LIBM]) +if test $gcc_cv_math_func_$1 = no; then + AC_CACHE_CHECK([for inline __builtin_$1], [gcc_cv_math_inline_builtin_$1], + [AC_LINK_IFELSE([AC_LANG_SOURCE([ +$2 +$1_fallback ($2 x, $2 y) +{ + return __builtin_$1 (x, y); +} + +int +main () +{ + return 0; +} +])], +[gcc_cv_math_inline_builtin_$1=yes], +[gcc_cv_math_inline_builtin_$1=no])]) + if test $gcc_cv_math_inline_builtin_$1 = yes; then + AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_INLINE_BUILTIN_$1),[1], + [Define to 1 if `__builtin_$1' is expanded inline.]) + fi +fi]) diff -Nru gdb-9.1/config/mh-mingw gdb-10.2/config/mh-mingw --- gdb-9.1/config/mh-mingw 2013-12-22 10:09:55.000000000 +0000 +++ gdb-10.2/config/mh-mingw 2020-09-13 02:33:40.000000000 +0000 @@ -2,6 +2,11 @@ # Vista (see PR33281 for details). BOOT_CFLAGS += -D__USE_MINGW_ACCESS -Wno-pedantic-ms-format CFLAGS += -D__USE_MINGW_ACCESS +STAGE1_CXXFLAGS += -D__USE_MINGW_ACCESS +STAGE2_CXXFLAGS += -D__USE_MINGW_ACCESS +STAGE3_CXXFLAGS += -D__USE_MINGW_ACCESS +STAGE4_CXXFLAGS += -D__USE_MINGW_ACCESS + # Increase stack limit to a figure based on the Linux default, with 4MB added # as GCC turns out to need that much more to pass all the limits-* tests. LDFLAGS += -Wl,--stack,12582912 diff -Nru gdb-9.1/config/no-executables.m4 gdb-10.2/config/no-executables.m4 --- gdb-9.1/config/no-executables.m4 2013-12-22 10:09:55.000000000 +0000 +++ gdb-10.2/config/no-executables.m4 2020-09-13 02:33:40.000000000 +0000 @@ -25,7 +25,9 @@ AC_BEFORE([$0], [AC_LINK_IFELSE]) m4_define([_AC_COMPILER_EXEEXT], -[AC_LANG_CONFTEST([AC_LANG_PROGRAM()]) +[AC_LANG_CONFTEST([AC_LANG_PROGRAM( + [#include ], + [printf ("hello world\n");])]) # FIXME: Cleanup? AS_IF([AC_TRY_EVAL(ac_link)], [gcc_no_link=no], [gcc_no_link=yes]) if test x$gcc_no_link = xyes; then diff -Nru gdb-9.1/config/pkg.m4 gdb-10.2/config/pkg.m4 --- gdb-9.1/config/pkg.m4 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/config/pkg.m4 2020-09-13 02:33:40.000000000 +0000 @@ -0,0 +1,283 @@ +# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- +# serial 12 (pkg-config-0.29.2) + +dnl Copyright © 2004 Scott James Remnant . +dnl Copyright © 2012-2015 Dan Nicholson +dnl +dnl This program is free software; you can redistribute it and/or modify +dnl it under the terms of the GNU General Public License as published by +dnl the Free Software Foundation; either version 2 of the License, or +dnl (at your option) any later version. +dnl +dnl This program is distributed in the hope that it will be useful, but +dnl WITHOUT ANY WARRANTY; without even the implied warranty of +dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +dnl General Public License for more details. +dnl +dnl You should have received a copy of the GNU General Public License +dnl along with this program; if not, write to the Free Software +dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +dnl 02111-1307, USA. +dnl +dnl As a special exception to the GNU General Public License, if you +dnl distribute this file as part of a program that contains a +dnl configuration script generated by Autoconf, you may include it under +dnl the same distribution terms that you use for the rest of that +dnl program. + +dnl PKG_PREREQ(MIN-VERSION) +dnl ----------------------- +dnl Since: 0.29 +dnl +dnl Verify that the version of the pkg-config macros are at least +dnl MIN-VERSION. Unlike PKG_PROG_PKG_CONFIG, which checks the user's +dnl installed version of pkg-config, this checks the developer's version +dnl of pkg.m4 when generating configure. +dnl +dnl To ensure that this macro is defined, also add: +dnl m4_ifndef([PKG_PREREQ], +dnl [m4_fatal([must install pkg-config 0.29 or later before running autoconf/autogen])]) +dnl +dnl See the "Since" comment for each macro you use to see what version +dnl of the macros you require. +m4_defun([PKG_PREREQ], +[m4_define([PKG_MACROS_VERSION], [0.29.2]) +m4_if(m4_version_compare(PKG_MACROS_VERSION, [$1]), -1, + [m4_fatal([pkg.m4 version $1 or higher is required but ]PKG_MACROS_VERSION[ found])]) +])dnl PKG_PREREQ + +dnl PKG_PROG_PKG_CONFIG([MIN-VERSION]) +dnl ---------------------------------- +dnl Since: 0.16 +dnl +dnl Search for the pkg-config tool and set the PKG_CONFIG variable to +dnl first found in the path. Checks that the version of pkg-config found +dnl is at least MIN-VERSION. If MIN-VERSION is not specified, 0.9.0 is +dnl used since that's the first version where most current features of +dnl pkg-config existed. +AC_DEFUN([PKG_PROG_PKG_CONFIG], +[m4_pattern_forbid([^_?PKG_[A-Z_]+$]) +m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) +m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) +AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) +AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) +AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) + +if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then + AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) +fi +if test -n "$PKG_CONFIG"; then + _pkg_min_version=m4_default([$1], [0.9.0]) + AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) + if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + PKG_CONFIG="" + fi +fi[]dnl +])dnl PKG_PROG_PKG_CONFIG + +dnl PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +dnl ------------------------------------------------------------------- +dnl Since: 0.18 +dnl +dnl Check to see whether a particular set of modules exists. Similar to +dnl PKG_CHECK_MODULES(), but does not set variables or print errors. +dnl +dnl Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) +dnl only at the first occurence in configure.ac, so if the first place +dnl it's called might be skipped (such as if it is within an "if", you +dnl have to call PKG_CHECK_EXISTS manually +AC_DEFUN([PKG_CHECK_EXISTS], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +if test -n "$PKG_CONFIG" && \ + AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then + m4_default([$2], [:]) +m4_ifvaln([$3], [else + $3])dnl +fi]) + +dnl _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) +dnl --------------------------------------------- +dnl Internal wrapper calling pkg-config via PKG_CONFIG and setting +dnl pkg_failed based on the result. +m4_define([_PKG_CONFIG], +[if test -n "$$1"; then + pkg_cv_[]$1="$$1" + elif test -n "$PKG_CONFIG"; then + PKG_CHECK_EXISTS([$3], + [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes ], + [pkg_failed=yes]) + else + pkg_failed=untried +fi[]dnl +])dnl _PKG_CONFIG + +dnl _PKG_SHORT_ERRORS_SUPPORTED +dnl --------------------------- +dnl Internal check to see if pkg-config supports short errors. +AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG]) +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi[]dnl +])dnl _PKG_SHORT_ERRORS_SUPPORTED + + +dnl PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], +dnl [ACTION-IF-NOT-FOUND]) +dnl -------------------------------------------------------------- +dnl Since: 0.4.0 +dnl +dnl Note that if there is a possibility the first call to +dnl PKG_CHECK_MODULES might not happen, you should be sure to include an +dnl explicit call to PKG_PROG_PKG_CONFIG in your configure.ac +AC_DEFUN([PKG_CHECK_MODULES], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl +AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl + +pkg_failed=no +AC_MSG_CHECKING([for $2]) + +_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) +_PKG_CONFIG([$1][_LIBS], [libs], [$2]) + +dnl Check whether $pkg_cv_[]$1[]_LIBS works. +if test $pkg_failed = no; then + pkg_save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $pkg_cv_[]$1[]_LIBS" + AC_TRY_LINK([],[], [], [pkg_failed=yes]) + LDFLAGS=$pkg_save_LDFLAGS +fi + +m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS +and $1[]_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details.]) + +if test $pkg_failed = yes; then + AC_MSG_RESULT([no]) + _PKG_SHORT_ERRORS_SUPPORTED + if test $_pkg_short_errors_supported = yes; then + $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1` + else + $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD + + m4_default([$4], [AC_MSG_ERROR( +[Package requirements ($2) were not met: + +$$1_PKG_ERRORS + +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +_PKG_TEXT])[]dnl + ]) +elif test $pkg_failed = untried; then + AC_MSG_RESULT([no]) + m4_default([$4], [AC_MSG_FAILURE( +[The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +_PKG_TEXT + +To get pkg-config, see .])[]dnl + ]) +else + $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS + $1[]_LIBS=$pkg_cv_[]$1[]_LIBS + AC_MSG_RESULT([yes]) + $3 +fi[]dnl +])dnl PKG_CHECK_MODULES + + +dnl PKG_CHECK_MODULES_STATIC(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], +dnl [ACTION-IF-NOT-FOUND]) +dnl --------------------------------------------------------------------- +dnl Since: 0.29 +dnl +dnl Checks for existence of MODULES and gathers its build flags with +dnl static libraries enabled. Sets VARIABLE-PREFIX_CFLAGS from --cflags +dnl and VARIABLE-PREFIX_LIBS from --libs. +dnl +dnl Note that if there is a possibility the first call to +dnl PKG_CHECK_MODULES_STATIC might not happen, you should be sure to +dnl include an explicit call to PKG_PROG_PKG_CONFIG in your +dnl configure.ac. +AC_DEFUN([PKG_CHECK_MODULES_STATIC], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +_save_PKG_CONFIG=$PKG_CONFIG +PKG_CONFIG="$PKG_CONFIG --static" +PKG_CHECK_MODULES($@) +PKG_CONFIG=$_save_PKG_CONFIG[]dnl +])dnl PKG_CHECK_MODULES_STATIC + + +dnl PKG_INSTALLDIR([DIRECTORY]) +dnl ------------------------- +dnl Since: 0.27 +dnl +dnl Substitutes the variable pkgconfigdir as the location where a module +dnl should install pkg-config .pc files. By default the directory is +dnl $libdir/pkgconfig, but the default can be changed by passing +dnl DIRECTORY. The user can override through the --with-pkgconfigdir +dnl parameter. +AC_DEFUN([PKG_INSTALLDIR], +[m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])]) +m4_pushdef([pkg_description], + [pkg-config installation directory @<:@]pkg_default[@:>@]) +AC_ARG_WITH([pkgconfigdir], + [AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],, + [with_pkgconfigdir=]pkg_default) +AC_SUBST([pkgconfigdir], [$with_pkgconfigdir]) +m4_popdef([pkg_default]) +m4_popdef([pkg_description]) +])dnl PKG_INSTALLDIR + + +dnl PKG_NOARCH_INSTALLDIR([DIRECTORY]) +dnl -------------------------------- +dnl Since: 0.27 +dnl +dnl Substitutes the variable noarch_pkgconfigdir as the location where a +dnl module should install arch-independent pkg-config .pc files. By +dnl default the directory is $datadir/pkgconfig, but the default can be +dnl changed by passing DIRECTORY. The user can override through the +dnl --with-noarch-pkgconfigdir parameter. +AC_DEFUN([PKG_NOARCH_INSTALLDIR], +[m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])]) +m4_pushdef([pkg_description], + [pkg-config arch-independent installation directory @<:@]pkg_default[@:>@]) +AC_ARG_WITH([noarch-pkgconfigdir], + [AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],, + [with_noarch_pkgconfigdir=]pkg_default) +AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir]) +m4_popdef([pkg_default]) +m4_popdef([pkg_description]) +])dnl PKG_NOARCH_INSTALLDIR + + +dnl PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE, +dnl [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +dnl ------------------------------------------- +dnl Since: 0.28 +dnl +dnl Retrieves the value of the pkg-config variable for the given module. +AC_DEFUN([PKG_CHECK_VAR], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl + +_PKG_CONFIG([$1], [variable="][$3]["], [$2]) +AS_VAR_COPY([$1], [pkg_cv_][$1]) + +AS_VAR_IF([$1], [""], [$5], [$4])dnl +])dnl PKG_CHECK_VAR diff -Nru gdb-9.1/config/tls.m4 gdb-10.2/config/tls.m4 --- gdb-9.1/config/tls.m4 2018-11-07 19:00:24.000000000 +0000 +++ gdb-10.2/config/tls.m4 2020-09-13 02:33:40.000000000 +0000 @@ -76,7 +76,7 @@ dnl Shared library options may depend on the host; this check dnl is only known to be needed for GNU/Linux. case $host in - *-*-linux*) + *-*-linux* | -*-uclinuxfdpic*) LDFLAGS="-shared -Wl,--no-undefined $LDFLAGS" ;; esac diff -Nru gdb-9.1/config/toolexeclibdir.m4 gdb-10.2/config/toolexeclibdir.m4 --- gdb-9.1/config/toolexeclibdir.m4 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/config/toolexeclibdir.m4 2020-09-13 02:33:40.000000000 +0000 @@ -0,0 +1,31 @@ +dnl toolexeclibdir override support. +dnl Copyright (C) 2020 Free Software Foundation, Inc. +dnl +dnl This program is free software; you can redistribute it and/or modify +dnl it under the terms of the GNU General Public License as published by +dnl the Free Software Foundation; either version 3, or (at your option) +dnl any later version. +dnl +dnl This program is distributed in the hope that it will be useful, +dnl but WITHOUT ANY WARRANTY; without even the implied warranty of +dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +dnl GNU General Public License for more details. +dnl +dnl You should have received a copy of the GNU General Public License +dnl along with this program; see the file COPYING3. If not see +dnl . + +AC_DEFUN([GCC_WITH_TOOLEXECLIBDIR], +[AC_ARG_WITH(toolexeclibdir, + [AS_HELP_STRING([--with-toolexeclibdir=DIR], + [install libraries built with a cross compiler within DIR])], + [dnl +case ${with_toolexeclibdir} in + /) + ;; + */) + with_toolexeclibdir=`echo $with_toolexeclibdir | sed 's,/$,,'` + ;; +esac], + [with_toolexeclibdir=no]) +]) diff -Nru gdb-9.1/config.guess gdb-10.2/config.guess --- gdb-9.1/config.guess 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/config.guess 2021-04-25 04:06:26.000000000 +0000 @@ -1,8 +1,8 @@ #! /bin/sh # Attempt to guess a canonical system name. -# Copyright 1992-2019 Free Software Foundation, Inc. +# Copyright 1992-2020 Free Software Foundation, Inc. -timestamp='2019-04-28' +timestamp='2020-01-01' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -50,7 +50,7 @@ GNU config.guess ($timestamp) Originally written by Per Bothner. -Copyright 1992-2019 Free Software Foundation, Inc. +Copyright 1992-2020 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -99,6 +99,8 @@ trap 'test -z "$tmp" || rm -fr "$tmp"' 0 1 2 13 15 set_cc_for_build() { + # prevent multiple calls if $tmp is already set + test "$tmp" && return 0 : "${TMPDIR=/tmp}" # shellcheck disable=SC2039 { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || @@ -262,6 +264,9 @@ *:SolidBSD:*:*) echo "$UNAME_MACHINE"-unknown-solidbsd"$UNAME_RELEASE" exit ;; + *:OS108:*:*) + echo "$UNAME_MACHINE"-unknown-os108_"$UNAME_RELEASE" + exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd"$UNAME_RELEASE" exit ;; @@ -271,12 +276,15 @@ *:Sortix:*:*) echo "$UNAME_MACHINE"-unknown-sortix exit ;; + *:Twizzler:*:*) + echo "$UNAME_MACHINE"-unknown-twizzler + exit ;; *:Redox:*:*) echo "$UNAME_MACHINE"-unknown-redox exit ;; mips:OSF1:*.*) - echo mips-dec-osf1 - exit ;; + echo mips-dec-osf1 + exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) @@ -918,7 +926,7 @@ echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; alpha:Linux:*:*) - case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' /proc/cpuinfo 2>/dev/null` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; @@ -1325,38 +1333,39 @@ echo "$UNAME_MACHINE"-apple-rhapsody"$UNAME_RELEASE" exit ;; *:Darwin:*:*) - UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown - set_cc_for_build - if test "$UNAME_PROCESSOR" = unknown ; then - UNAME_PROCESSOR=powerpc + UNAME_PROCESSOR=`uname -p` + case $UNAME_PROCESSOR in + unknown) UNAME_PROCESSOR=powerpc ;; + esac + if command -v xcode-select > /dev/null 2> /dev/null && \ + ! xcode-select --print-path > /dev/null 2> /dev/null ; then + # Avoid executing cc if there is no toolchain installed as + # cc will be a stub that puts up a graphical alert + # prompting the user to install developer tools. + CC_FOR_BUILD=no_compiler_found + else + set_cc_for_build fi - if test "`echo "$UNAME_RELEASE" | sed -e 's/\..*//'`" -le 10 ; then - if [ "$CC_FOR_BUILD" != no_compiler_found ]; then - if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ - (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ - grep IS_64BIT_ARCH >/dev/null - then - case $UNAME_PROCESSOR in - i386) UNAME_PROCESSOR=x86_64 ;; - powerpc) UNAME_PROCESSOR=powerpc64 ;; - esac - fi - # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc - if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \ - (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ - grep IS_PPC >/dev/null - then - UNAME_PROCESSOR=powerpc - fi + if [ "$CC_FOR_BUILD" != no_compiler_found ]; then + if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + case $UNAME_PROCESSOR in + i386) UNAME_PROCESSOR=x86_64 ;; + powerpc) UNAME_PROCESSOR=powerpc64 ;; + esac + fi + # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc + if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_PPC >/dev/null + then + UNAME_PROCESSOR=powerpc fi elif test "$UNAME_PROCESSOR" = i386 ; then - # Avoid executing cc on OS X 10.9, as it ships with a stub - # that puts up a graphical alert prompting to install - # developer tools. Any system running Mac OS X 10.7 or - # later (Darwin 11 and later) is required to have a 64-bit - # processor. This is not true of the ARM version of Darwin - # that Apple uses in portable devices. - UNAME_PROCESSOR=x86_64 + # uname -m returns i386 or x86_64 + UNAME_PROCESSOR=$UNAME_MACHINE fi echo "$UNAME_PROCESSOR"-apple-darwin"$UNAME_RELEASE" exit ;; diff -Nru gdb-9.1/config.sub gdb-10.2/config.sub --- gdb-9.1/config.sub 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/config.sub 2021-04-25 04:06:26.000000000 +0000 @@ -1,8 +1,8 @@ #! /bin/sh # Configuration validation subroutine script. -# Copyright 1992-2019 Free Software Foundation, Inc. +# Copyright 1992-2020 Free Software Foundation, Inc. -timestamp='2019-05-23' +timestamp='2020-01-01' # 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 @@ -67,7 +67,7 @@ version="\ GNU config.sub ($timestamp) -Copyright 1992-2019 Free Software Foundation, Inc. +Copyright 1992-2020 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -337,17 +337,14 @@ basic_machine=m88k-harris os=sysv3 ;; - hp300) + hp300 | hp300hpux) basic_machine=m68k-hp + os=hpux ;; hp300bsd) basic_machine=m68k-hp os=bsd ;; - hp300hpux) - basic_machine=m68k-hp - os=hpux - ;; hppaosf) basic_machine=hppa1.1-hp os=osf @@ -360,10 +357,6 @@ basic_machine=i386-mach os=mach ;; - vsta) - basic_machine=i386-pc - os=vsta - ;; isi68 | isi) basic_machine=m68k-isi os=sysv @@ -612,6 +605,10 @@ basic_machine=vax-dec os=vms ;; + vsta) + basic_machine=i386-pc + os=vsta + ;; vxworks960) basic_machine=i960-wrs os=vxworks @@ -1346,11 +1343,11 @@ | hpux* | unos* | osf* | luna* | dgux* | auroraux* | solaris* \ | sym* | kopensolaris* | plan9* \ | amigaos* | amigados* | msdos* | newsos* | unicos* | aof* \ - | aos* | aros* | cloudabi* | sortix* \ + | aos* | aros* | cloudabi* | sortix* | twizzler* \ | nindy* | vxsim* | vxworks* | ebmon* | hms* | mvs* \ | clix* | riscos* | uniplus* | iris* | isc* | rtu* | xenix* \ | knetbsd* | mirbsd* | netbsd* \ - | bitrig* | openbsd* | solidbsd* | libertybsd* \ + | bitrig* | openbsd* | solidbsd* | libertybsd* | os108* \ | ekkobsd* | kfreebsd* | freebsd* | riscix* | lynxos* \ | bosx* | nextstep* | cxux* | aout* | elf* | oabi* \ | ptx* | coff* | ecoff* | winnt* | domain* | vsta* \ @@ -1368,7 +1365,8 @@ | powermax* | dnix* | nx6 | nx7 | sei* | dragonfly* \ | skyos* | haiku* | rdos* | toppers* | drops* | es* \ | onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \ - | midnightbsd* | amdhsa* | unleashed* | emscripten* | wasi*) + | midnightbsd* | amdhsa* | unleashed* | emscripten* | wasi* \ + | nsk* | powerunix) # Remember, each alternative MUST END IN *, to match a version number. ;; qnx*) @@ -1452,9 +1450,6 @@ ns2) os=nextstep2 ;; - nsk*) - os=nsk - ;; # Preserve the version number of sinix5. sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` diff -Nru gdb-9.1/configure gdb-10.2/configure --- gdb-9.1/configure 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/configure 2021-04-25 04:06:26.000000000 +0000 @@ -2279,23 +2279,6 @@ -if test x"${enable_gdb}" != x"no" -a x"${enable_src_release_build}" != x"yes"; then - # For this branch, we do not support building GDB in-tree. - # Try to detect whether we are in this situation or not by - # searching for a couple of known files in the source directory. - if test -f gnulib/update-gnulib.sh -a -f gdb/ChangeLog; then - as_fn_error $? "GDB must be configured and built in a directory separate from its sources. - -To do so, create a dedicated directory for your GDB build and invoke -the configure script from that directory: - - $ mkdir build - $ cd build - $ /gdb-VERSION/configure [etc...] - $ make" "$LINENO" 5 - fi -fi - progname=$0 # if PWD already has a value, it is probably wrong. if test -n "$PWD" ; then PWD=`${PWDCMD-pwd}`; fi @@ -2798,7 +2781,7 @@ # 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="texinfo flex bison binutils gas ld fixincludes gcc cgen sid sim gdb gprof etc expect dejagnu m4 utils guile fastjar gnattools libcc1 gotools" +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" # 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) @@ -3505,6 +3488,25 @@ ;; esac +# Only allow gdbserver on some systems. +if test -d ${srcdir}/gdbserver; then + if test x$enable_gdbserver = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gdbserver support" >&5 +$as_echo_n "checking for gdbserver support... " >&6; } + if (srcdir=${srcdir}/gdbserver; \ + . ${srcdir}/configure.srv; \ + test -n "$UNSUPPORTED") + then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + noconfigdirs="$noconfigdirs gdbserver" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + fi + fi +fi + # Disable libgo for some systems where it is known to not work. # For testing, you can easily override this with --enable-libgo. if test x$enable_libgo = x; then @@ -3824,6 +3826,9 @@ noconfigdirs="$noconfigdirs ld gas gdb gprof sim" noconfigdirs="$noconfigdirs $target_libraries" ;; + pdp11-*-*) + noconfigdirs="$noconfigdirs gdb gprof" + ;; powerpc-*-aix*) # copied from rs6000-*-* entry noconfigdirs="$noconfigdirs gprof" @@ -7223,13 +7228,17 @@ CONFIGURE_GDB_TK=`echo ${GDB_TK} | sed s/-all-/-configure-/g` INSTALL_GDB_TK=`echo ${GDB_TK} | sed s/-all-/-install-/g` -# gdb depends on gnulib, but as nothing else does, only include it if -# gdb is built. -if echo " ${configdirs} " | grep " gdb " > /dev/null 2>&1 ; then - # The Makefile provides the ordering, so it's enough here to add - # gnulib to the list. - configdirs="${configdirs} gnulib" -fi +# gdb and gdbserver depend on gnulib and gdbsupport, but as nothing +# else does, only include them if one of these is built. The Makefile +# provides the ordering, so it's enough here to add to the list. +case " ${configdirs} " in + *\ gdb\ *) + configdirs="${configdirs} gnulib gdbsupport" + ;; + *\ gdbserver\ *) + configdirs="${configdirs} gnulib gdbsupport" + ;; +esac # Strip out unwanted targets. diff -Nru gdb-9.1/configure.ac gdb-10.2/configure.ac --- gdb-9.1/configure.ac 2020-02-08 12:54:22.000000000 +0000 +++ gdb-10.2/configure.ac 2021-04-25 04:10:47.000000000 +0000 @@ -1,6 +1,6 @@ # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, # 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, -# 2014, 2015, 2016, 2019 Free Software Foundation, Inc. +# 2014, 2015, 2016, 2019, 2020 Free Software Foundation, Inc. # # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -33,23 +33,6 @@ AC_INIT(move-if-change) AC_DISABLE_OPTION_CHECKING -if test x"${enable_gdb}" != x"no" -a x"${enable_src_release_build}" != x"yes"; then - # For this branch, we do not support building GDB in-tree. - # Try to detect whether we are in this situation or not by - # searching for a couple of known files in the source directory. - if test -f gnulib/update-gnulib.sh -a -f gdb/ChangeLog; then - AC_MSG_ERROR([GDB must be configured and built in a directory separate from its sources. - -To do so, create a dedicated directory for your GDB build and invoke -the configure script from that directory: - - $ mkdir build - $ cd build - $ /gdb-VERSION/configure [[etc...]] - $ make]) - fi -fi - progname=$0 # if PWD already has a value, it is probably wrong. if test -n "$PWD" ; then PWD=`${PWDCMD-pwd}`; fi @@ -156,7 +139,7 @@ # 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 gprof etc expect dejagnu m4 utils guile fastjar gnattools libcc1 gotools" +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" # 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) @@ -798,6 +781,22 @@ ;; esac +# Only allow gdbserver on some systems. +if test -d ${srcdir}/gdbserver; then + if test x$enable_gdbserver = x; then + AC_MSG_CHECKING([for gdbserver support]) + if (srcdir=${srcdir}/gdbserver; \ + . ${srcdir}/configure.srv; \ + test -n "$UNSUPPORTED") + then + AC_MSG_RESULT([no]) + noconfigdirs="$noconfigdirs gdbserver" + else + AC_MSG_RESULT([yes]) + fi + fi +fi + # Disable libgo for some systems where it is known to not work. # For testing, you can easily override this with --enable-libgo. if test x$enable_libgo = x; then @@ -1117,6 +1116,9 @@ noconfigdirs="$noconfigdirs ld gas gdb gprof sim" noconfigdirs="$noconfigdirs $target_libraries" ;; + pdp11-*-*) + noconfigdirs="$noconfigdirs gdb gprof" + ;; powerpc-*-aix*) # copied from rs6000-*-* entry noconfigdirs="$noconfigdirs gprof" @@ -2743,13 +2745,17 @@ CONFIGURE_GDB_TK=`echo ${GDB_TK} | sed s/-all-/-configure-/g` INSTALL_GDB_TK=`echo ${GDB_TK} | sed s/-all-/-install-/g` -# gdb depends on gnulib, but as nothing else does, only include it if -# gdb is built. -if echo " ${configdirs} " | grep " gdb " > /dev/null 2>&1 ; then - # The Makefile provides the ordering, so it's enough here to add - # gnulib to the list. - configdirs="${configdirs} gnulib" -fi +# gdb and gdbserver depend on gnulib and gdbsupport, but as nothing +# else does, only include them if one of these is built. The Makefile +# provides the ordering, so it's enough here to add to the list. +case " ${configdirs} " in + *\ gdb\ *) + configdirs="${configdirs} gnulib gdbsupport" + ;; + *\ gdbserver\ *) + configdirs="${configdirs} gnulib gdbsupport" + ;; +esac # Strip out unwanted targets. diff -Nru gdb-9.1/contrib/ChangeLog gdb-10.2/contrib/ChangeLog --- gdb-9.1/contrib/ChangeLog 2019-11-19 01:10:41.000000000 +0000 +++ gdb-10.2/contrib/ChangeLog 2021-04-25 04:06:26.000000000 +0000 @@ -1,3 +1,8 @@ +2020-05-15 Andrew Burgess + + * dg-extract-results.py: Update from gcc repo. + * dg-extract-results.sh: Likewise. + 2019-10-21 Andrew Burgess * dg-extract-results.py: Update from gcc repo. diff -Nru gdb-9.1/contrib/dg-extract-results.py gdb-10.2/contrib/dg-extract-results.py --- gdb-9.1/contrib/dg-extract-results.py 2019-11-19 01:10:41.000000000 +0000 +++ gdb-10.2/contrib/dg-extract-results.py 2020-09-13 02:33:40.000000000 +0000 @@ -117,7 +117,7 @@ self.tool_re = re.compile (r'^\t\t=== (.*) tests ===$') self.result_re = re.compile (r'^(PASS|XPASS|FAIL|XFAIL|UNRESOLVED' r'|WARNING|ERROR|UNSUPPORTED|UNTESTED' - r'|KFAIL|KPASS):\s*(.+)') + r'|KFAIL|KPASS|PATH|DUPLICATE):\s*(.+)') self.completed_re = re.compile (r'.* completed at (.*)') # Pieces of text to write at the head of the output. # start_line is a pair in which the first element is a datetime @@ -143,7 +143,9 @@ '# of known failures\t\t', '# of untested testcases\t\t', '# of unresolved testcases\t', - '# of unsupported tests\t\t' + '# of unsupported tests\t\t', + '# of paths in test names\t', + '# of duplicate test names\t' ] self.runs = dict() diff -Nru gdb-9.1/contrib/dg-extract-results.sh gdb-10.2/contrib/dg-extract-results.sh --- gdb-9.1/contrib/dg-extract-results.sh 2019-11-19 01:10:41.000000000 +0000 +++ gdb-10.2/contrib/dg-extract-results.sh 2020-09-13 02:33:40.000000000 +0000 @@ -326,7 +326,7 @@ } } /^\t\t=== .* ===$/ { curvar = ""; next } -/^(PASS|XPASS|FAIL|XFAIL|UNRESOLVED|WARNING|ERROR|UNSUPPORTED|UNTESTED|KFAIL|KPASS):/ { +/^(PASS|XPASS|FAIL|XFAIL|UNRESOLVED|WARNING|ERROR|UNSUPPORTED|UNTESTED|KFAIL|KPASS|PATH|DUPLICATE):/ { testname=\$2 # Ugly hack for gfortran.dg/dg.exp if ("$TOOL" == "gfortran" && testname ~ /^gfortran.dg\/g77\//) @@ -400,6 +400,7 @@ variant="$VAR" tool="$TOOL" passcnt=0; failcnt=0; untstcnt=0; xpasscnt=0; xfailcnt=0; kpasscnt=0; kfailcnt=0; unsupcnt=0; unrescnt=0; dgerrorcnt=0; + pathcnt=0; dupcnt=0 curvar=""; insummary=0 } /^Running target / { curvar = \$3; next } @@ -414,6 +415,8 @@ /^# of untested testcases/ { if (insummary == 1) untstcnt += \$5; next; } /^# of unresolved testcases/ { if (insummary == 1) unrescnt += \$5; next; } /^# of unsupported tests/ { if (insummary == 1) unsupcnt += \$5; next; } +/^# of paths in test names/ { if (insummary == 1) pathcnt += \$7; next; } +/^# of duplicate test names/ { if (insummary == 1) dupcnt += \$6; next; } /^$/ { if (insummary == 1) { insummary = 0; curvar = "" } next @@ -431,6 +434,8 @@ if (untstcnt != 0) printf ("# of untested testcases\t\t%d\n", untstcnt) if (unrescnt != 0) printf ("# of unresolved testcases\t%d\n", unrescnt) if (unsupcnt != 0) printf ("# of unsupported tests\t\t%d\n", unsupcnt) + if (pathcnt != 0) printf ("# of paths in test names\t%d\n", pathcnt) + if (dupcnt != 0) printf ("# of duplicate test names\t%d\n", dupcnt) } EOF @@ -452,6 +457,7 @@ BEGIN { tool="$TOOL" passcnt=0; failcnt=0; untstcnt=0; xpasscnt=0; xfailcnt=0; kfailcnt=0; unsupcnt=0; unrescnt=0; dgerrorcnt=0 + pathcnt=0; dupcnt=0 } /^# of DejaGnu errors/ { dgerrorcnt += \$5 } /^# of expected passes/ { passcnt += \$5 } @@ -463,6 +469,8 @@ /^# of untested testcases/ { untstcnt += \$5 } /^# of unresolved testcases/ { unrescnt += \$5 } /^# of unsupported tests/ { unsupcnt += \$5 } +/^# of paths in test names/ { pathcnt += \$7 } +/^# of duplicate test names/ { dupcnt += \$6 } END { printf ("\n\t\t=== %s Summary ===\n\n", tool) if (dgerrorcnt != 0) printf ("# of DejaGnu errors\t\t%d\n", dgerrorcnt) @@ -475,6 +483,8 @@ if (untstcnt != 0) printf ("# of untested testcases\t\t%d\n", untstcnt) if (unrescnt != 0) printf ("# of unresolved testcases\t%d\n", unrescnt) if (unsupcnt != 0) printf ("# of unsupported tests\t\t%d\n", unsupcnt) + if (pathcnt != 0) printf ("# of paths in test names\t%d\n", pathcnt) + if (dupcnt != 0) printf ("# of duplicate test names\t%d\n", dupcnt) } EOF diff -Nru gdb-9.1/cpu/bpf.cpu gdb-10.2/cpu/bpf.cpu --- gdb-9.1/cpu/bpf.cpu 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/cpu/bpf.cpu 2021-04-25 04:06:26.000000000 +0000 @@ -32,8 +32,12 @@ (name bpf) (comment "Linux kernel BPF") (insn-lsb0? #t) - (machs bpf) - (isas ebpfle ebpfbe)) + ;; XXX explain the default-alignment setting is for the simulator. + ;; It is confusing that the simulator follows the emulated memory + ;; access conventions for fetching instructions by pieces... + (default-alignment unaligned) + (machs bpf xbpf) + (isas ebpfle ebpfbe xbpfle xbpfbe)) ;;;; The ISAs @@ -94,34 +98,46 @@ ;; Length of an unknown instruction. Used by disassembly and by the ;; simulator's invalid insn handler. (default-insn-bitsize 64) - ;; Number of bits of insn that can be initially fetched. XXX this - ;; should be 64 (the size of the smallest insn) but until CGEN - ;; gets fixed to place constant fields in their own words, we have - ;; to use this workaround to avoid the opcode byte to be placed at - ;; the wrong side of the instruction when assembling in - ;; big-endian. - (base-insn-bitsize 8))) + ;; Number of bits of insn that can be initially fetched. This is + ;; the size of the smallest insn. + (base-insn-bitsize 64))) (define-bpf-isa le) (define-bpf-isa be) -(define-pmacro all-isas () (ISA ebpfle,ebpfbe)) +(define-pmacro (define-xbpf-isa x-endian) + (define-isa + (name (.sym xbpf x-endian)) + (comment "The xBPF instruction set") + (default-insn-word-bitsize 64) + (default-insn-bitsize 64) + (base-insn-bitsize 64))) + +(define-xbpf-isa le) +(define-xbpf-isa be) + +(define-pmacro all-isas () (ISA ebpfle,ebpfbe,xbpfle,xbpfbe)) +(define-pmacro xbpf-isas () (ISA xbpfle,xbpfbe)) + +(define-pmacro (endian-isas x-endian) + ((ISA (.sym ebpf x-endian) (.sym xbpf x-endian)))) ;;;; Hardware Hierarchy ;; -;; bpf architecture -;; | -;; bpfbf cpu-family -;; | -;; bpf machine -;; | -;; bpf-def model +;; bpf architecture +;; | +;; bpfbf cpu-family +;; / \ +;; bpf xbpf machine +;; | | +;; bpf-def xbpf-def model (define-cpu (name bpfbf) (comment "Linux kernel eBPF virtual CPU") - (word-bitsize 32)) + (insn-endian big) + (word-bitsize 64)) (define-mach (name bpf) @@ -142,6 +158,25 @@ () ; profile action (default) )) +(define-mach + (name xbpf) + (comment "Experimental BPF") + (cpu bpfbf) + (isas ebpfle ebpfbe xbpfle xbpfbe)) + +(define-model + (name xbpf-def) + (comment "xBPF default model") + (mach xbpf) + (unit u-exec "execution unit" () + 1 ; issue + 1 ; done + () ; state + () ; inputs + () ; outputs + () ; profile action (default) + )) + ;;;; Hardware Elements ;; eBPF programs can access 10 general-purpose registers which are @@ -150,7 +185,7 @@ (define-hardware (name h-gpr) (comment "General Purpose Registers") - (attrs all-isas (MACH bpf)) + (attrs all-isas (MACH bpf xbpf)) (type register DI (16)) (indices keyword "%" ;; XXX the frame pointer fp is read-only, so it should @@ -159,13 +194,19 @@ (r0 0) (r1 1) (r2 2) (r3 3) (r4 4) (r5 5) (r6 6) (r7 7) (r8 8) (r9 9) (fp 10) ;; Additional names recognized when assembling. - (a 0) (ctx 6) (r10 10)))) + (r0 0) (r6 6) (r10 10)))) ;; The program counter. CGEN requires it, even if it is not visible ;; to eBPF programs. -(dnh h-pc "program counter" (PC PROFILE) (pc) () () ()) - +(define-hardware + (name h-pc) + (comment "program counter") + (attrs PC PROFILE all-isas) + (type pc UDI) + (get () (raw-reg h-pc)) + (set (newval) (set (raw-reg h-pc) newval))) + ;; A 64-bit h-sint to be used by the imm64 operand below. XXX this ;; shouldn't be needed, as h-sint is supposed to be able to hold ;; 64-bit values. However, in practice CGEN limits h-sint to 32 bits @@ -222,7 +263,7 @@ (define-normal-insn-enum insn-op-class "eBPF instruction class" (all-isas) OP_CLASS_ f-op-class ((LD #b000) (LDX #b001) (ST #b010) (STX #b011) - (ALU #b100) (JMP #b101) (ALU64 #b111))) + (ALU #b100) (JMP #b101) (JMP32 #b110) (ALU64 #b111))) ;; For load/store instructions, the 8-bit code field is subdivided in: ;; @@ -252,11 +293,11 @@ ;; NOT use registers, where endianness is irrelevant i.e. f-regs is a ;; constant 0 opcode. -(dwf f-dstle "eBPF dst register field" ((ISA ebpfle)) 8 8 3 4 UINT) -(dwf f-srcle "eBPF source register field" ((ISA ebpfle)) 8 8 7 4 UINT) +(dwf f-dstle "eBPF dst register field" ((ISA ebpfle xbpfle)) 8 8 3 4 UINT) +(dwf f-srcle "eBPF source register field" ((ISA ebpfle xbpfle)) 8 8 7 4 UINT) -(dwf f-dstbe "eBPF dst register field" ((ISA ebpfbe)) 8 8 7 4 UINT) -(dwf f-srcbe "eBPF source register field" ((ISA ebpfbe)) 8 8 3 4 UINT) +(dwf f-dstbe "eBPF dst register field" ((ISA ebpfbe xbpfbe)) 8 8 7 4 UINT) +(dwf f-srcbe "eBPF source register field" ((ISA ebpfbe xbpfbe)) 8 8 3 4 UINT) (dwf f-regs "eBPF registers field" (all-isas) 8 8 7 8 UINT) @@ -266,7 +307,7 @@ ;; difficulty: we put them in their own instruction word so the ;; byte-endianness will be properly applied. -(dwf f-offset16 "eBPF offset field" (all-isas) 16 16 15 16 INT) +(dwf f-offset16 "eBPF offset field" (all-isas) 16 16 15 16 HI) (dwf f-imm32 "eBPF 32-bit immediate field" (all-isas) 32 32 31 32 INT) ;; For the disjoint 64-bit signed immediate, however, we need to use a @@ -288,19 +329,19 @@ (set (ifield f-imm64-a) (and (ifield f-imm64) (const #xffffffff))))) (extract (sequence () (set (ifield f-imm64) - (or (sll DI (zext DI (ifield f-imm64-c)) (const 32)) - (zext DI (ifield f-imm64-a))))))) + (or (sll UDI (zext UDI (ifield f-imm64-c)) (const 32)) + (zext UDI (ifield f-imm64-a))))))) ;;; Operands ;; A couple of source and destination register operands are defined ;; for each ISA: ebpfle and ebpfbe. -(dno dstle "destination register" ((ISA ebpfle)) h-gpr f-dstle) -(dno srcle "source register" ((ISA ebpfle)) h-gpr f-srcle) +(dno dstle "destination register" ((ISA ebpfle xbpfle)) h-gpr f-dstle) +(dno srcle "source register" ((ISA ebpfle xbpfle)) h-gpr f-srcle) -(dno dstbe "destination register" ((ISA ebpfbe)) h-gpr f-dstbe) -(dno srcbe "source register" ((ISA ebpfbe)) h-gpr f-srcbe) +(dno dstbe "destination register" ((ISA ebpfbe xbpfbe)) h-gpr f-dstbe) +(dno srcbe "source register" ((ISA ebpfbe xbpfbe)) h-gpr f-srcbe) ;; Jump instructions have a 16-bit PC-relative address. ;; CALL instructions have a 32-bit PC-relative address. @@ -361,60 +402,101 @@ ;; ADD[32]{i,r}le for the little-endian ISA ;; ADD[32]{i,r}be for the big-endian ISA ;; -;; The `i' variants perform `src OP dst -> dst' operations. -;; The `r' variants perform `dst OP imm32 -> dst' operations. +;; The `i' variants perform `dst OP imm32 -> dst' operations. +;; The `r' variants perform `dst OP src -> dst' operations. ;; ;; The variants with 32 in their name are of ALU class. Otherwise ;; they are ALU64 class. -(define-pmacro (define-alu-insn-un x-basename x-suffix x-op-class x-op-code x-endian) +(define-pmacro (define-alu-insn-un x-basename x-suffix x-op-class x-op-code + x-endian x-mode x-semop) (dni (.sym x-basename x-suffix x-endian) (.str x-basename x-suffix) - ((ISA (.sym ebpf x-endian))) + (endian-isas x-endian) (.str x-basename x-suffix " $dst" x-endian) (+ (f-imm32 0) (f-offset16 0) ((.sym f-src x-endian) 0) (.sym dst x-endian) - x-op-class OP_SRC_X x-op-code) () ())) + x-op-class OP_SRC_K x-op-code) + (set x-mode (.sym dst x-endian) (x-semop x-mode (.sym dst x-endian))) + ())) -(define-pmacro (define-alu-insn-bin x-basename x-suffix x-op-class x-op-code x-endian) +(define-pmacro (define-alu-insn-bin x-basename x-suffix x-op-class x-op-code + x-endian x-mode x-semop) (begin + ;; dst = dst OP immediate (dni (.sym x-basename x-suffix "i" x-endian) (.str x-basename x-suffix " immediate") - ((ISA (.sym ebpf x-endian))) + (endian-isas x-endian) (.str x-basename x-suffix " $dst" x-endian ",$imm32") (+ imm32 (f-offset16 0) ((.sym f-src x-endian) 0) (.sym dst x-endian) - x-op-class OP_SRC_K x-op-code) () ()) + x-op-class OP_SRC_K x-op-code) + (set x-mode (.sym dst x-endian) (x-semop x-mode (.sym dst x-endian) imm32)) + ()) + ;; dst = dst OP src (dni (.sym x-basename x-suffix "r" x-endian) (.str x-basename x-suffix " register") - ((ISA (.sym ebpf x-endian))) + (endian-isas x-endian) (.str x-basename x-suffix " $dst" x-endian ",$src" x-endian) (+ (f-imm32 0) (f-offset16 0) (.sym src x-endian) (.sym dst x-endian) - x-op-class OP_SRC_X x-op-code) () ()))) + x-op-class OP_SRC_X x-op-code) + (set x-mode (.sym dst x-endian) + (x-semop x-mode (.sym dst x-endian) (.sym src x-endian))) + ()))) -(define-pmacro (daiu x-basename x-op-code x-endian) +(define-pmacro (define-alu-insn-mov x-basename x-suffix x-op-class x-op-code + x-endian x-mode) (begin - (define-alu-insn-un x-basename "" OP_CLASS_ALU64 x-op-code x-endian) - (define-alu-insn-un x-basename "32" OP_CLASS_ALU x-op-code x-endian))) + (dni (.sym mov x-suffix "i" x-endian) + (.str mov x-suffix " immediate") + (endian-isas x-endian) + (.str x-basename x-suffix " $dst" x-endian ",$imm32") + (+ imm32 (f-offset16 0) ((.sym f-src x-endian) 0) (.sym dst x-endian) + x-op-class OP_SRC_K x-op-code) + (set x-mode (.sym dst x-endian) imm32) + ()) + (dni (.sym mov x-suffix "r" x-endian) + (.str mov x-suffix " register") + (endian-isas x-endian) + (.str x-basename x-suffix " $dst" x-endian ",$src" x-endian) + (+ (f-imm32 0) (f-offset16 0) (.sym src x-endian) (.sym dst x-endian) + x-op-class OP_SRC_X x-op-code) + (set x-mode (.sym dst x-endian) (.sym src x-endian)) + ()))) + -(define-pmacro (daib x-basename x-op-code x-endian) +;; Unary ALU instructions (neg) +(define-pmacro (daiu x-basename x-op-code x-endian x-semop) (begin - (define-alu-insn-bin x-basename "" OP_CLASS_ALU64 x-op-code x-endian) - (define-alu-insn-bin x-basename "32" OP_CLASS_ALU x-op-code x-endian))) + (define-alu-insn-un x-basename "" OP_CLASS_ALU64 x-op-code x-endian DI x-semop) + (define-alu-insn-un x-basename "32" OP_CLASS_ALU x-op-code x-endian USI x-semop))) + +;; Binary ALU instructions (all the others) +;; For ALU32: DST = (u32) DST OP (u32) SRC is correct semantics +(define-pmacro (daib x-basename x-op-code x-endian x-semop) + (begin + (define-alu-insn-bin x-basename "" OP_CLASS_ALU64 x-op-code x-endian DI x-semop) + (define-alu-insn-bin x-basename "32" OP_CLASS_ALU x-op-code x-endian USI x-semop))) + +;; Move ALU instructions (mov) +(define-pmacro (daim x-basename x-op-code x-endian) + (begin + (define-alu-insn-mov x-basename "" OP_CLASS_ALU64 x-op-code x-endian DI) + (define-alu-insn-mov x-basename "32" OP_CLASS_ALU x-op-code x-endian USI))) (define-pmacro (define-alu-instructions x-endian) (begin - (daib add OP_CODE_ADD x-endian) - (daib sub OP_CODE_SUB x-endian) - (daib mul OP_CODE_MUL x-endian) - (daib div OP_CODE_DIV x-endian) - (daib or OP_CODE_OR x-endian) - (daib and OP_CODE_AND x-endian) - (daib lsh OP_CODE_LSH x-endian) - (daib rsh OP_CODE_RSH x-endian) - (daib mod OP_CODE_MOD x-endian) - (daib xor OP_CODE_XOR x-endian) - (daib mov OP_CODE_MOV x-endian) - (daib arsh OP_CODE_ARSH x-endian) - (daiu neg OP_CODE_NEG x-endian))) + (daib add OP_CODE_ADD x-endian add) + (daib sub OP_CODE_SUB x-endian sub) + (daib mul OP_CODE_MUL x-endian mul) + (daib div OP_CODE_DIV x-endian udiv) + (daib or OP_CODE_OR x-endian or) + (daib and OP_CODE_AND x-endian and) + (daib lsh OP_CODE_LSH x-endian sll) + (daib rsh OP_CODE_RSH x-endian srl) + (daib mod OP_CODE_MOD x-endian umod) + (daib xor OP_CODE_XOR x-endian xor) + (daib arsh OP_CODE_ARSH x-endian sra) + (daiu neg OP_CODE_NEG x-endian neg) + (daim mov OP_CODE_MOV x-endian))) (define-alu-instructions le) (define-alu-instructions be) @@ -435,10 +517,13 @@ (define-pmacro (define-endian-insn x-suffix x-op-src x-endian) (dni (.sym "end" x-suffix x-endian) (.str "end" x-suffix " register") - ((ISA (.sym ebpf x-endian))) + (endian-isas x-endian) (.str "end" x-suffix " $dst" x-endian ",$endsize") (+ (f-offset16 0) ((.sym f-src x-endian) 0) (.sym dst x-endian) endsize - OP_CLASS_ALU x-op-src OP_CODE_END) () ())) + OP_CLASS_ALU x-op-src OP_CODE_END) + (set (.sym dst x-endian) + (c-call DI (.str "bpfbf_end" x-suffix) (.sym dst x-endian) endsize)) + ())) (define-endian-insn "le" OP_SRC_K le) (define-endian-insn "be" OP_SRC_X le) @@ -457,11 +542,13 @@ (define-pmacro (define-lddw x-endian) (dni (.sym lddw x-endian) (.str "lddw" x-endian) - ((ISA (.sym ebpf x-endian))) + (endian-isas x-endian) (.str "lddw $dst" x-endian ",$imm64") (+ imm64 (f-offset16 0) ((.sym f-src x-endian) 0) (.sym dst x-endian) - OP_CLASS_LD OP_SIZE_DW OP_MODE_IMM) () ())) + OP_CLASS_LD OP_SIZE_DW OP_MODE_IMM) + (set DI (.sym dst x-endian) imm64) + ())) (define-lddw le) (define-lddw be) @@ -471,19 +558,29 @@ ;; ;; LDABS{w,h,b,dw} -(define-pmacro (dlabs x-suffix x-size) +(define-pmacro (dlabs x-suffix x-size x-smode) (dni (.sym "ldabs" x-suffix) (.str "ldabs" x-suffix) (all-isas) (.str "ldabs" x-suffix " $imm32") (+ imm32 (f-offset16 0) (f-regs 0) OP_CLASS_LD OP_MODE_ABS (.sym OP_SIZE_ x-size)) - () ())) - -(dlabs "w" W) -(dlabs "h" H) -(dlabs "b" B) -(dlabs "dw" DW) + (set x-smode + (reg x-smode h-gpr 0) + (mem x-smode + (add DI + (mem DI + (add DI + (reg DI h-gpr 6) ;; Pointer to struct sk_buff + (c-call "bpfbf_skb_data_offset"))) + imm32))) + ;; XXX this clobbers R1-R5 + ())) + +(dlabs "w" W SI) +(dlabs "h" H HI) +(dlabs "b" B QI) +(dlabs "dw" DW DI) ;; The indirect load instructions are non-generic loads designed to be ;; used in socket filters. They come in several variants: @@ -491,21 +588,33 @@ ;; LDIND{w,h,b,dw}le for the little-endian ISA ;; LDIND[w,h,b,dw}be for the big-endian ISA -(define-pmacro (dlind x-suffix x-size x-endian) +(define-pmacro (dlind x-suffix x-size x-endian x-smode) (dni (.sym "ldind" x-suffix x-endian) (.str "ldind" x-suffix) - ((ISA (.sym ebpf x-endian))) + (endian-isas x-endian) (.str "ldind" x-suffix " $src" x-endian ",$imm32") (+ imm32 (f-offset16 0) ((.sym f-dst x-endian) 0) (.sym src x-endian) OP_CLASS_LD OP_MODE_IND (.sym OP_SIZE_ x-size)) - () ())) + (set x-smode + (reg x-smode h-gpr 0) + (mem x-smode + (add DI + (mem DI + (add DI + (reg DI h-gpr 6) ;; Pointer to struct sk_buff + (c-call "bpfbf_skb_data_offset"))) + (add DI + (.sym src x-endian) + imm32)))) + ;; XXX this clobbers R1-R5 + ())) (define-pmacro (define-ldind x-endian) (begin - (dlind "w" W x-endian) - (dlind "h" H x-endian) - (dlind "b" B x-endian) - (dlind "dw" DW x-endian))) + (dlind "w" W x-endian SI) + (dlind "h" H x-endian HI) + (dlind "b" B x-endian QI) + (dlind "dw" DW x-endian DI))) (define-ldind le) (define-ldind be) @@ -520,35 +629,41 @@ ;; Loads operate on [$SRC+-OFFSET] -> $DST ;; Stores operate on $SRC -> [$DST+-OFFSET] -(define-pmacro (dxli x-basename x-suffix x-size x-endian) +(define-pmacro (dxli x-basename x-suffix x-size x-endian x-mode) (dni (.sym x-basename x-suffix x-endian) (.str x-basename x-suffix) - ((ISA (.sym ebpf x-endian))) + (endian-isas x-endian) (.str x-basename x-suffix " $dst" x-endian ",[$src" x-endian "+$offset16]") (+ (f-imm32 0) offset16 (.sym src x-endian) (.sym dst x-endian) OP_CLASS_LDX (.sym OP_SIZE_ x-size) OP_MODE_MEM) - () ())) + (set x-mode + (.sym dst x-endian) + (mem x-mode (add DI (.sym src x-endian) offset16))) + ())) -(define-pmacro (dxsi x-basename x-suffix x-size x-endian) +(define-pmacro (dxsi x-basename x-suffix x-size x-endian x-mode) (dni (.sym x-basename x-suffix x-endian) (.str x-basename x-suffix) - ((ISA (.sym ebpf x-endian))) + (endian-isas x-endian) (.str x-basename x-suffix " [$dst" x-endian "+$offset16],$src" x-endian) (+ (f-imm32 0) offset16 (.sym src x-endian) (.sym dst x-endian) OP_CLASS_STX (.sym OP_SIZE_ x-size) OP_MODE_MEM) - () ())) + (set x-mode + (mem x-mode (add DI (.sym dst x-endian) offset16)) + (.sym src x-endian)) ;; XXX address is section-relative + ())) (define-pmacro (define-ldstx-insns x-endian) (begin - (dxli "ldx" "w" W x-endian) - (dxli "ldx" "h" H x-endian) - (dxli "ldx" "b" B x-endian) - (dxli "ldx" "dw" DW x-endian) - - (dxsi "stx" "w" W x-endian) - (dxsi "stx" "h" H x-endian) - (dxsi "stx" "b" B x-endian) - (dxsi "stx" "dw" DW x-endian))) + (dxli "ldx" "w" W x-endian SI) + (dxli "ldx" "h" H x-endian HI) + (dxli "ldx" "b" B x-endian QI) + (dxli "ldx" "dw" DW x-endian DI) + + (dxsi "stx" "w" W x-endian SI) + (dxsi "stx" "h" H x-endian HI) + (dxsi "stx" "b" B x-endian QI) + (dxsi "stx" "dw" DW x-endian DI))) (define-ldstx-insns le) (define-ldstx-insns be) @@ -559,20 +674,24 @@ ;; ST{b,h,w,dw}le for the little-endian ISA ;; ST{b,h,w,dw}be for the big-endian ISA -(define-pmacro (dsti x-suffix x-size x-endian) +(define-pmacro (dsti x-suffix x-size x-endian x-mode) (dni (.sym "st" x-suffix x-endian) (.str "st" x-suffix) - ((ISA (.sym ebpf x-endian))) + (endian-isas x-endian) (.str "st" x-suffix " [$dst" x-endian "+$offset16],$imm32") (+ imm32 offset16 ((.sym f-src x-endian) 0) (.sym dst x-endian) - OP_CLASS_ST (.sym OP_SIZE_ x-size) OP_MODE_MEM) () ())) + OP_CLASS_ST (.sym OP_SIZE_ x-size) OP_MODE_MEM) + (set x-mode + (mem x-mode (add DI (.sym dst x-endian) offset16)) + imm32) ;; XXX address is section-relative + ())) (define-pmacro (define-st-insns x-endian) (begin - (dsti "b" B x-endian) - (dsti "h" H x-endian) - (dsti "w" W x-endian) - (dsti "dw" DW x-endian))) + (dsti "b" B x-endian QI) + (dsti "h" H x-endian HI) + (dsti "w" W x-endian SI) + (dsti "dw" DW x-endian DI))) (define-st-insns le) (define-st-insns be) @@ -583,78 +702,150 @@ ;; registers. Therefore, we need to define several variants in both ;; ISAs: ;; -;; J{eq,gt,ge,lt,le,set,ne,sgt,sge,slt,sle}{i,r}le for the +;; J{eq,gt,ge,lt,le,set,ne,sgt,sge,slt,sle}[32]{i,r}le for the ;; little-endian ISA. -;; J{eq,gt,ge,lt,le,set,ne.sgt,sge,slt,sle}{i,r}be for the +;; J{eq,gt,ge,lt,le,set,ne.sgt,sge,slt,sle}[32]{i,r}be for the ;; big-endian ISA. -(define-pmacro (dcji x-cond x-op-code x-endian) +(define-pmacro (define-cond-jump-insn x-cond x-suffix x-op-class x-op-code x-endian x-mode x-semop) (begin - (dni (.sym j x-cond i x-endian) - (.str j x-cond "i") - ((ISA (.sym ebpf x-endian))) - (.str "j" x-cond " $dst" x-endian ",$imm32,$disp16") + (dni (.sym j x-cond x-suffix i x-endian) + (.str j x-cond x-suffix " i") + (endian-isas x-endian) + (.str "j" x-cond x-suffix " $dst" x-endian ",$imm32,$disp16") (+ imm32 disp16 ((.sym f-src x-endian) 0) (.sym dst x-endian) - OP_CLASS_JMP OP_SRC_K (.sym OP_CODE_ x-op-code)) () ()) - (dni (.sym j x-cond r x-endian) - (.str j x-cond "r") - ((ISA (.sym ebpf x-endian))) - (.str "j" x-cond " $dst" x-endian ",$src" x-endian ",$disp16") + x-op-class OP_SRC_K (.sym OP_CODE_ x-op-code)) + (if VOID (x-semop x-mode (.sym dst x-endian) imm32) + (set DI + (reg DI h-pc) (add DI (reg DI h-pc) + (mul DI (add HI disp16 1) 8)))) + ()) + (dni (.sym j x-cond x-suffix r x-endian) + (.str j x-cond x-suffix " r") + (endian-isas x-endian) + (.str "j" x-cond x-suffix " $dst" x-endian ",$src" x-endian ",$disp16") (+ (f-imm32 0) disp16 (.sym src x-endian) (.sym dst x-endian) - OP_CLASS_JMP OP_SRC_X (.sym OP_CODE_ x-op-code)) () ()))) + x-op-class OP_SRC_X (.sym OP_CODE_ x-op-code)) + (if VOID (x-semop x-mode (.sym dst x-endian) (.sym src x-endian)) + (set DI + (reg DI h-pc) (add DI (reg DI h-pc) + (mul DI (add HI disp16 1) 8)))) + ()))) + +(define-pmacro (dcji x-cond x-op-code x-endian x-semop) + (begin + (define-cond-jump-insn x-cond "" OP_CLASS_JMP x-op-code x-endian DI x-semop) + (define-cond-jump-insn x-cond "32" OP_CLASS_JMP32 x-op-code x-endian SI x-semop ))) (define-pmacro (define-condjump-insns x-endian) (begin - (dcji "eq" JEQ x-endian) - (dcji "gt" JGT x-endian) - (dcji "ge" JGE x-endian) - (dcji "lt" JLT x-endian) - (dcji "le" JLE x-endian) - (dcji "set" JSET x-endian) - (dcji "ne" JNE x-endian) - (dcji "sgt" JSGT x-endian) - (dcji "sge" JSGE x-endian) - (dcji "slt" JSLT x-endian) - (dcji "sle" JSLE x-endian))) + (dcji "eq" JEQ x-endian eq) + (dcji "gt" JGT x-endian gtu) + (dcji "ge" JGE x-endian geu) + (dcji "lt" JLT x-endian ltu) + (dcji "le" JLE x-endian leu) + (dcji "set" JSET x-endian and) + (dcji "ne" JNE x-endian ne) + (dcji "sgt" JSGT x-endian gt) + (dcji "sge" JSGE x-endian ge) + (dcji "slt" JSLT x-endian lt) + (dcji "sle" JSLE x-endian le))) (define-condjump-insns le) (define-condjump-insns be) -;; The jump-always, `call' and `exit' instructions dont make use of -;; either source nor destination registers, so only one variant per +;; The `call' instruction doesn't make use of registers, but the +;; semantic routine should have access to the src register in order to +;; properly interpret the meaning of disp32. Therefore we need one +;; version per ISA. + +(define-pmacro (define-call-insn x-endian) + (dni (.sym call x-endian) + "call" + (endian-isas x-endian) + "call $disp32" + (+ disp32 (f-offset16 0) (f-regs 0) + OP_CLASS_JMP OP_SRC_K OP_CODE_CALL) + (c-call VOID + "bpfbf_call" disp32 (ifield (.sym f-src x-endian))) + ())) + +(define-call-insn le) +(define-call-insn be) + +(define-pmacro (define-callr-insn x-endian) + (dni (.sym callr x-endian) + "callr" + ((ISA (.sym xbpf x-endian))) + (.str "call $dst" x-endian) + (+ (f-imm32 0) (f-offset16 0) ((.sym f-src x-endian) 0) (.sym dst x-endian) + OP_CLASS_JMP OP_SRC_X OP_CODE_CALL) + (c-call VOID + "bpfbf_callr" (ifield (.sym f-dst x-endian))) + ())) + +(define-callr-insn le) +(define-callr-insn be) + +;; The jump-always and `exit' instructions dont make use of either +;; source nor destination registers, so only one variant per ;; instruction is defined. (dni ja "ja" (all-isas) "ja $disp16" (+ (f-imm32 0) disp16 (f-regs 0) - OP_CLASS_JMP OP_SRC_K OP_CODE_JA) () ()) - -(dni call "call" (all-isas) "call $disp32" - (+ disp32 (f-offset16 0) (f-regs 0) - OP_CLASS_JMP OP_SRC_K OP_CODE_CALL) () ()) + OP_CLASS_JMP OP_SRC_K OP_CODE_JA) + (set DI (reg DI h-pc) (add DI (reg DI h-pc) + (mul DI (add HI disp16 1) 8))) + ()) (dni "exit" "exit" (all-isas) "exit" (+ (f-imm32 0) (f-offset16 0) (f-regs 0) - OP_CLASS_JMP (f-op-src 0) OP_CODE_EXIT) () ()) + OP_CLASS_JMP (f-op-src 0) OP_CODE_EXIT) + (c-call VOID "bpfbf_exit") + ()) ;;; Atomic instructions ;; The atomic exchange-and-add instructions come in two flavors: one ;; for swapping 64-bit quantities and another for 32-bit quantities. +(define-pmacro (sem-exchange-and-add x-endian x-mode) + (sequence VOID ((x-mode tmp)) + ;; XXX acquire lock in simulator... as a hardware element? + (set x-mode tmp (mem x-mode (add DI (.sym dst x-endian) offset16))) + (set x-mode + (mem x-mode (add DI (.sym dst x-endian) offset16)) + (add x-mode tmp (.sym src x-endian))))) + (define-pmacro (define-atomic-insns x-endian) (begin (dni (.str "xadddw" x-endian) "xadddw" - ((ISA (.sym ebpf x-endian))) + (endian-isas x-endian) (.str "xadddw [$dst" x-endian "+$offset16],$src" x-endian) (+ (f-imm32 0) (.sym src x-endian) (.sym dst x-endian) - offset16 OP_MODE_XADD OP_SIZE_DW OP_CLASS_STX) () ()) + offset16 OP_MODE_XADD OP_SIZE_DW OP_CLASS_STX) + (sem-exchange-and-add x-endian DI) + ()) (dni (.str "xaddw" x-endian) "xaddw" - ((ISA (.sym ebpf x-endian))) + (endian-isas x-endian) (.str "xaddw [$dst" x-endian "+$offset16],$src" x-endian) (+ (f-imm32 0) (.sym src x-endian) (.sym dst x-endian) - offset16 OP_MODE_XADD OP_SIZE_W OP_CLASS_STX) () ()))) + offset16 OP_MODE_XADD OP_SIZE_W OP_CLASS_STX) + (sem-exchange-and-add x-endian SI) + ()))) (define-atomic-insns le) (define-atomic-insns be) + +;;; Breakpoint instruction + +;; The brkpt instruction is used by the BPF simulator and it doesn't +;; really belong to the eBPF instruction set. + +(dni "brkpt" "brkpt" (all-isas) "brkpt" + (+ (f-imm32 0) (f-offset16 0) (f-regs 0) + OP_CLASS_ALU OP_SRC_X OP_CODE_NEG) + (c-call VOID "bpfbf_breakpoint") + ()) diff -Nru gdb-9.1/cpu/ChangeLog gdb-10.2/cpu/ChangeLog --- gdb-9.1/cpu/ChangeLog 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/cpu/ChangeLog 2021-04-25 04:06:26.000000000 +0000 @@ -1,3 +1,174 @@ +2020-09-08 David Faust + + * bpf.cpu (define-alu-instructions): Correct semantic operators + for div, mod to unsigned versions. + +2020-09-01 Alan Modra + + * mep-core.cpu (f-8s8a2, f-12s4a2, f-17s16a2): Multiply signed + value by two rather than shifting left. + (f-24s5a2n): Similarly multiply signed f-24s5a2n-hi to extract. + +2020-08-26 David Faust + + * bpf.cpu (arch bpf): Add xbpf mach and isas. + (define-xbpf-isa) New pmacro. + (all-isas) Add xbpfle,xbpfbe. + (endian-isas): New pmacro. + (mach xbpf): New. + (model xbpf-def): Likewise. + (h-gpr): Add xbpf mach. + (f-dstle, f-srcle, dstle, srcle): Add xbpfle isa. + (f-dstbe, f-srcbe, dstbe, srcbe): Add xbpfbe isa. + (define-alu-insn-un): Use new endian-isas pmacro. + (define-alu-insn-bin, define-alu-insn-mov): Likewise. + (define-endian-insn, define-lddw): Likewise. + (dlind, dxli, dxsi, dsti): Likewise. + (define-cond-jump-insn, define-call-insn): Likewise. + (define-atomic-insns): Likewise. + +2020-07-04 Nick Clifton + + Binutils 2.35 branch created. + +2020-06-25 David Faust + + * bpf.cpu (f-offset16): Change type from INT to HI. + (dxli): Simplify memory access. + (dxsi): Likewise. + (define-endian-insn): Update c-call in semantics. + (dlabs) Likewise. + (dlind) Likewise. + +2020-06-02 Jose E. Marchesi + + * bpf.cpu (define-bpf-isa): Set base-insn-bitsize to 64. + * bpf.opc (bpf_print_insn): Do not set endian_code here. + +2020-06-02 Jose E. Marchesi + + * mep.opc (print_slot_insn): Pass the insn endianness to + cgen_get_insn_value. + +2020-05-28 Jose E. Marchesi + David Faust + + * bpf.cpu (define-alu-insn-un): Add definitions of semantics. + (define-alu-insn-mov): Likewise. + (daib): Likewise. + (define-alu-instructions): Likewise. + (define-endian-insn): Likewise. + (define-lddw): Likewise. + (dlabs): Likewise. + (dlind): Likewise. + (dxli): Likewise. + (dxsi): Likewise. + (dsti): Likewise. + (define-ldstx-insns): Likewise. + (define-st-insns): Likewise. + (define-cond-jump-insn): Likewise. + (dcji): Likewise. + (define-condjump-insns): Likewise. + (define-call-insn): Likewise. + (ja): Likewise. + ("exit"): Likewise. + (define-atomic-insns): Likewise. + (sem-exchange-and-add): New macro. + * bpf.cpu ("brkpt"): New instruction. + (bpfbf): Set word-bitsize to 32 and insn-endian big. + (h-gpr): Prefer r0 to `a' and r6 to `ctx'. + (h-pc): Expand definition. + * bpf.opc (bpf_print_insn): Set endian_code to BIG. + +2020-05-21 Alan Modra + + * mep.opc (mep_cgen_expand_macros_and_parse_operand): Replace + "if (x) free (x)" with "free (x)". + +2020-05-19 Stafford Horne + + PR 25184 + * or1k.cpu (arch or1k): Remove or64 and or64nd machs. + (ORBIS-MACHS, ORFPX32-MACHS): Remove pmacros. + (cpu or1k64bf, mach or64, mach or64nd): Remove definitions. + * or1kcommon.cpu (h-fdr): Remove hardware. + * or1korfpx.cpu (rDDF, rADF, rBDF): Remove operand definitions. + (float-regreg-insn): Remove lf- mnemonic -d instruction pattern. + (float-setflag-insn-base): Remove lf-sf mnemonic -d pattern. + (float-cust-insn): Remove "lf-cust" cust-num "-d" pattern. + (lf-rem-d, lf-itof-d, lf-ftoi-d, lf-madd-d): Remove. + +2020-02-16 David Faust + + * bpf.cpu (define-cond-jump-insn): Renamed from djci. + (dcji) New version with support for JMP32 + +2020-02-03 Alan Modra + + * m32c.cpu (f-dsp-64-s16): Mask before shifting signed value. + +2020-02-01 Alan Modra + + * frv.cpu (f-u12): Multiply rather than left shift signed values. + (f-label16, f-label24): Likewise. + +2020-01-30 Alan Modra + + * m32c.cpu (f-src32-rn-unprefixed-QI): Shift before inverting. + (f-src32-rn-prefixed-QI, f-dst32-rn-unprefixed-QI): Likewise. + (f-dst32-rn-prefixed-QI): Likewise. + (f-dsp-32-s32): Mask before shifting left. + (f-dsp-48-u32, f-dsp-48-s32): Likewise. + (f-bitbase32-16-s11-unprefixed): Multiply signed field rather than + shifting left. + (f-bitbase32-24-s11-prefixed, f-bitbase32-24-s19-prefixed): Likewise. + (h-gr-SI): Mask before shifting. + +2020-01-30 Jose E. Marchesi + + * bpf.cpu (define-alu-insn-un): The unary BPF instructions + (neg and neg32) use OP_SRC_K even if they operate only in + registers. + +2020-01-18 Nick Clifton + + Binutils 2.34 branch created. + +2020-01-13 Alan Modra + + * fr30.cpu (f-disp9, f-disp10, f-s10, f-rel9, f-rel12): Don't + left shift signed values. + +2020-01-06 Alan Modra + + * m32c.cpu (f-dsp-8-u16, f-dsp-8-s16): Rearrange to mask any sign + bits before shifting rather than masking after shifting. + (f-dsp-16-u16, f-dsp-16-s16, f-dsp-32-u16, f-dsp-32-s16): Likewise. + (f-dsp-40-u16, f-dsp-40-s16, f-dsp-48-u16, f-dsp-48-s16): Likewise. + (f-dsp-64-u16, f-dsp-8-s24): Likewise. + (f-bitbase32-16-s19-unprefixed): Avoid signed left shift. + +2020-01-04 Alan Modra + + * m32r.cpu (f-disp8): Avoid left shift of negative values. + (f-disp16, f-disp24): Likewise. + +2019-12-23 Alan Modra + + * iq2000.cpu (f-offset): Avoid left shift of negative values. + +2019-12-20 Alan Modra + + * or1korbis.cpu (f-disp26, f-disp21): Don't left shift negative values. + +2019-12-17 Alan Modra + + * bpf.cpu (f-imm64): Avoid signed overflow. + +2019-12-16 Alan Modra + + * xstormy16.cpu (f-rel12a): Avoid signed overflow. + 2019-12-11 Alan Modra * epiphany.cpu (f-sdisp11): Don't sign extend with shifts. diff -Nru gdb-9.1/cpu/fr30.cpu gdb-10.2/cpu/fr30.cpu --- gdb-9.1/cpu/fr30.cpu 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/cpu/fr30.cpu 2020-09-13 02:33:40.000000000 +0000 @@ -193,15 +193,15 @@ (df f-disp8 "8 bit signed offset" () 4 8 INT #f #f) (df f-disp9 "9 bit signed offset" () 4 8 INT ((value pc) (sra WI value (const 1))) - ((value pc) (sll WI value (const 1))) + ((value pc) (mul WI value (const 2))) ) (df f-disp10 "10 bit signed offset" () 4 8 INT ((value pc) (sra WI value (const 2))) - ((value pc) (sll WI value (const 2))) + ((value pc) (mul WI value (const 4))) ) (df f-s10 "10 bit signed offset" () 8 8 INT ((value pc) (sra WI value (const 2))) - ((value pc) (sll WI value (const 2))) + ((value pc) (mul WI value (const 4))) ) (df f-u10 "10 bit unsigned offset" () 8 8 UINT ((value pc) (srl UWI value (const 2))) @@ -209,7 +209,7 @@ ) (df f-rel9 "9 pc relative signed offset" (PCREL-ADDR) 8 8 INT ((value pc) (sra WI (sub WI value (add WI pc (const 2))) (const 1))) - ((value pc) (add WI (sll WI value (const 1)) (add WI pc (const 2)))) + ((value pc) (add WI (mul WI value (const 2)) (add WI pc (const 2)))) ) (dnf f-dir8 "8 bit direct address" () 8 8) (df f-dir9 "9 bit direct address" () 8 8 UINT @@ -222,7 +222,7 @@ ) (df f-rel12 "12 bit pc relative signed offset" (PCREL-ADDR) 5 11 INT ((value pc) (sra WI (sub WI value (add WI pc (const 2))) (const 1))) - ((value pc) (add WI (sll WI value (const 1)) (add WI pc (const 2)))) + ((value pc) (add WI (mul WI value (const 2)) (add WI pc (const 2)))) ) (dnf f-reglist_hi_st "8 bit register mask for stm" () 8 8) diff -Nru gdb-9.1/cpu/frv.cpu gdb-10.2/cpu/frv.cpu --- gdb-9.1/cpu/frv.cpu 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/cpu/frv.cpu 2020-09-13 02:33:40.000000000 +0000 @@ -1984,7 +1984,7 @@ (set (ifield f-u12-l) (and (ifield f-u12) #x3f)) ) (sequence () ; extract - (set (ifield f-u12) (or (sll (ifield f-u12-h) 6) + (set (ifield f-u12) (or (mul (ifield f-u12-h) 64) (ifield f-u12-l))) ) ) @@ -2016,7 +2016,7 @@ (df f-label16 "18 bit pc relative signed offset" (PCREL-ADDR) 15 16 INT ((value pc) (sra WI (sub WI value pc) (const 2))) - ((value pc) (add WI (sll WI value (const 2)) pc)) + ((value pc) (add WI (mul WI value (const 4)) pc)) ) (df f-labelH6 "upper 6 bits of label24" () 30 6 INT #f #f) @@ -2034,9 +2034,9 @@ ; extract (sequence () (set (ifield f-label24) - (add (sll (or (sll (ifield f-labelH6) (const 18)) + (add (mul (or (mul (ifield f-labelH6) (sll 1 18)) (ifield f-labelL18)) - (const 2)) + (const 4)) pc))) ) diff -Nru gdb-9.1/cpu/iq2000.cpu gdb-10.2/cpu/iq2000.cpu --- gdb-9.1/cpu/iq2000.cpu 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/cpu/iq2000.cpu 2020-09-13 02:33:40.000000000 +0000 @@ -207,7 +207,7 @@ (df f-offset "pc offset field" (PCREL-ADDR) 15 16 INT ; Actually, this is relative to the address of the delay slot. ((value pc) (sra SI (sub SI value pc) 2)) - ((value pc) (add SI (sll SI value 2) (add pc 4)))) + ((value pc) (add SI (mul SI value 4) (add pc 4)))) ; Instruction fields that scarcely appear in instructions. diff -Nru gdb-9.1/cpu/m32c.cpu gdb-10.2/cpu/m32c.cpu --- gdb-9.1/cpu/m32c.cpu 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/cpu/m32c.cpu 2020-09-13 02:33:40.000000000 +0000 @@ -240,7 +240,7 @@ ; r1l 10'b 11'b ; r1h 11'b 01'b (df f-src32-rn-unprefixed-QI "source Rn QI for m32c" (MACH32 m32c-isa) 10 2 UINT - ((value pc) (or USI (and (sll (inv value) 1) 2) (and (srl value 1) 1))) ; insert + ((value pc) (or USI (and (inv (sll value 1)) 2) (and (srl value 1) 1))) ; insert ((value pc) (or USI (and (inv (srl value 1)) 1) (and (sll value 1) 2))) ; extract ) ; QI mode gr encoding for m32c is different than for m16c. The hardware @@ -252,7 +252,7 @@ ; r1l 10'b 11'b ; r1h 11'b 01'b (df f-src32-rn-prefixed-QI "source Rn QI for m32c" (MACH32 m32c-isa) 18 2 UINT - ((value pc) (or USI (and (sll (inv value) 1) 2) (and (srl value 1) 1))) ; insert + ((value pc) (or USI (and (inv (sll value 1)) 2) (and (srl value 1) 1))) ; insert ((value pc) (or USI (and (inv (srl value 1)) 1) (and (sll value 1) 2))) ; extract ) ; HI mode gr encoding for m32c is different than for m16c. The hardware @@ -316,11 +316,11 @@ ; r1l 10'b 11'b ; r1h 11'b 01'b (df f-dst32-rn-unprefixed-QI "destination Rn QI for m32c" (MACH32 m32c-isa) 8 2 UINT - ((value pc) (or USI (and (sll (inv value) 1) 2) (and (srl value 1) 1))) ; insert + ((value pc) (or USI (and (inv (sll value 1)) 2) (and (srl value 1) 1))) ; insert ((value pc) (or USI (and (inv (srl value 1)) 1) (and (sll value 1) 2))) ; extract ) (df f-dst32-rn-prefixed-QI "destination Rn QI for m32c" (MACH32 m32c-isa) 16 2 UINT - ((value pc) (or USI (and (sll (inv value) 1) 2) (and (srl value 1) 1))) ; insert + ((value pc) (or USI (and (inv (sll value 1)) 2) (and (srl value 1) 1))) ; insert ((value pc) (or USI (and (inv (srl value 1)) 1) (and (sll value 1) 2))) ; extract ) ; HI mode gr encoding for m32c is different than for m16c. The hardware @@ -436,42 +436,42 @@ (df f-dsp-8-u16 "16 bit unsigned" (all-isas) 8 16 UINT ((value pc) (or UHI - (and (srl value 8) #x00ff) - (and (sll value 8) #xff00))) ; insert + (and (srl value 8) #xff) + (sll (and value #xff) 8))) ; insert ((value pc) (or UHI - (and UHI (srl UHI value 8) #x00ff) - (and UHI (sll UHI value 8) #xff00))) ; extract + (and UHI (srl UHI value 8) #xff) + (sll UHI (and UHI value #xff) 8))) ; extract ) (df f-dsp-8-s16 "8 bit signed" (all-isas) 8 16 INT ((value pc) (ext INT (trunc HI - (or (and (srl value 8) #x00ff) - (and (sll value 8) #xff00))))) ; insert + (or (and (srl value 8) #xff) + (sll (and value #xff) 8))))) ; insert ((value pc) (ext INT (trunc HI - (or (and (srl value 8) #x00ff) - (and (sll value 8) #xff00))))) ; extract + (or (and (srl value 8) #xff) + (sll (and value #xff) 8))))) ; extract ) (df f-dsp-16-u16 "16 bit unsigned" (all-isas) 16 16 UINT ((value pc) (or UHI - (and (srl value 8) #x00ff) - (and (sll value 8) #xff00))) ; insert + (and (srl value 8) #xff) + (sll (and value #xff) 8))) ; insert ((value pc) (or UHI - (and UHI (srl UHI value 8) #x00ff) - (and UHI (sll UHI value 8) #xff00))) ; extract + (and UHI (srl UHI value 8) #xff) + (sll UHI (and UHI value #xff) 8))) ; extract ) (df f-dsp-16-s16 "16 bit signed" (all-isas) 16 16 INT ((value pc) (ext INT (trunc HI - (or (and (srl value 8) #x00ff) - (and (sll value 8) #xff00))))) ; insert + (or (and (srl value 8) #xff) + (sll (and value #xff) 8))))) ; insert ((value pc) (ext INT (trunc HI - (or (and (srl value 8) #x00ff) - (and (sll value 8) #xff00))))) ; extract + (or (and (srl value 8) #xff) + (sll (and value #xff) 8))))) ; extract ) (dnmf f-dsp-24-u16 "16 bit unsigned" (all-isas) UINT @@ -504,79 +504,82 @@ (df f-dsp-32-u16 "16 bit unsigned" (all-isas) 32 16 UINT ((value pc) (or UHI - (and (srl value 8) #x00ff) - (and (sll value 8) #xff00))) ; insert + (and (srl value 8) #xff) + (sll (and value #xff) 8))) ; insert ((value pc) (or UHI - (and UHI (srl UHI value 8) #x00ff) - (and UHI (sll UHI value 8) #xff00))) ; extract + (and UHI (srl UHI value 8) #xff) + (sll UHI (and UHI value #xff) 8))) ; extract ) (df f-dsp-32-s16 "16 bit signed" (all-isas) 32 16 INT ((value pc) (ext INT (trunc HI - (or (and (srl value 8) #x00ff) - (and (sll value 8) #xff00))))) ; insert + (or (and (srl value 8) #xff) + (sll (and value #xff) 8))))) ; insert ((value pc) (ext INT (trunc HI - (or (and (srl value 8) #x00ff) - (and (sll value 8) #xff00))))) ; extract + (or (and (srl value 8) #xff) + (sll (and value #xff) 8))))) ; extract ) (df f-dsp-40-u16 "16 bit unsigned" (all-isas) 40 16 UINT ((value pc) (or UHI - (and (srl value 8) #x00ff) - (and (sll value 8) #xff00))) ; insert + (and (srl value 8) #xff) + (sll (and value #xff) 8))) ; insert ((value pc) (or UHI - (and UHI (srl UHI value 8) #x00ff) - (and UHI (sll UHI value 8) #xff00))) ; extract + (and UHI (srl UHI value 8) #xff) + (sll UHI (and UHI value #xff) 8))) ; extract ) (df f-dsp-40-s16 "16 bit signed" (all-isas) 40 16 INT ((value pc) (ext INT (trunc HI - (or (and (srl value 8) #x00ff) - (and (sll value 8) #xff00))))) ; insert + (or (and (srl value 8) #xff) + (sll (and value #xff) 8))))) ; insert ((value pc) (ext INT (trunc HI - (or (and (srl value 8) #x00ff) - (and (sll value 8) #xff00))))) ; extract + (or (and (srl value 8) #xff) + (sll (and value #xff) 8))))) ; extract ) (df f-dsp-48-u16 "16 bit unsigned" (all-isas) 48 16 UINT ((value pc) (or UHI - (and (srl value 8) #x00ff) - (and (sll value 8) #xff00))) ; insert + (and (srl value 8) #xff) + (sll (and value #xff) 8))) ; insert ((value pc) (or UHI - (and UHI (srl UHI value 8) #x00ff) - (and UHI (sll UHI value 8) #xff00))) ; extract + (and UHI (srl UHI value 8) #xff) + (sll UHI (and UHI value #xff) 8))) ; extract ) (df f-dsp-48-s16 "16 bit signed" (all-isas) 48 16 INT ((value pc) (ext INT (trunc HI - (or (and (srl value 8) #x00ff) - (and (sll value 8) #xff00))))) ; insert + (or (and (srl value 8) #xff) + (sll (and value #xff) 8))))) ; insert ((value pc) (ext INT (trunc HI - (or (and (srl value 8) #x00ff) - (and (sll value 8) #xff00))))) ; extract + (or (and (srl value 8) #xff) + (sll (and value #xff) 8))))) ; extract ) (df f-dsp-64-u16 "16 bit unsigned" (all-isas) 64 16 UINT ((value pc) (or UHI - (and (srl value 8) #x00ff) - (and (sll value 8) #xff00))) ; insert + (and (srl value 8) #xff) + (sll (and value #xff) 8))) ; insert ((value pc) (or UHI - (and UHI (srl UHI value 8) #x00ff) - (and UHI (sll UHI value 8) #xff00))) ; extract + (and UHI (srl UHI value 8) #xff) + (sll UHI (and UHI value #xff) 8))) ; extract ) (df f-dsp-8-s24 "24 bit signed" (all-isas) 8 24 INT - ((value pc) (or SI - (or (and (srl value 16) #xff) (and value #xff00)) - (sll (ext INT (trunc QI (and value #xff))) 16))) - ((value pc) (or SI - (or (and (srl value 16) #xff) (and value #xff00)) - (sll (ext INT (trunc QI (and value #xff))) 16))) + ((value pc) (sub SI (xor (or SI (or (and (srl value 16) #xff) + (and value #xff00)) + (sll (and value #xff) 16)) + #x800000) #x800000)) + ((value pc) (sub SI (xor (or SI + (or (and (srl value 16) #xff) + (and value #xff00)) + (sll (and value #xff) 16)) + #x800000) #x800000)) ) (df f-dsp-8-u24 "24 bit unsigned" (all-isas) 8 24 UINT @@ -717,22 +720,22 @@ (ext INT (or SI (or SI - (and (srl value 24) #x000000ff) - (and (srl value 8) #x0000ff00)) + (and (srl value 24) #x00ff) + (and (srl value 8) #xff00)) (or SI - (and (sll value 8) #x00ff0000) - (and (sll value 24) #xff000000))))) + (sll (and value #xff00) 8) + (sll (and value #x00ff) 24))))) ;; extract ((value pc) (ext INT (or SI (or SI - (and (srl value 24) #x000000ff) - (and (srl value 8) #x0000ff00)) + (and (srl value 24) #x00ff) + (and (srl value 8) #xff00)) (or SI - (and (sll value 8) #x00ff0000) - (and (sll value 24) #xff000000))))) + (sll (and value #xff00) 8) + (sll (and value #x00ff) 24))))) ) (dnmf f-dsp-48-u32 "32 bit unsigned" (all-isas) UINT @@ -743,7 +746,7 @@ ) (sequence () ; extract (set (ifield f-dsp-48-u32) (or (and (ifield f-dsp-48-u16) #xffff) - (and (sll (ifield f-dsp-64-u16) 16) #xffff0000))) + (sll (and (ifield f-dsp-64-u16) #xffff) 16))) ) ) @@ -755,7 +758,7 @@ ) (sequence () ; extract (set (ifield f-dsp-48-s32) (or (and (ifield f-dsp-48-u16) #xffff) - (and (sll (ifield f-dsp-64-u16) 16) #xffff0000))) + (sll (and (ifield f-dsp-64-u16) #xffff) 16))) ) ) @@ -778,12 +781,12 @@ (df f-dsp-64-s16 " 16 bit signed" (all-isas) 64 16 INT ((value pc) (ext INT (trunc HI - (or (and (srl value 8) #x00ff) - (and (sll value 8) #xff00))))) ; insert + (or (and (srl value 8) #xff) + (sll (and value #xff) 8))))) ; insert ((value pc) (ext INT (trunc HI - (or (and (srl value 8) #x00ff) - (and (sll value 8) #xff00))))) ; extract + (or (and (srl value 8) #xff) + (sll (and value #xff) 8))))) ; extract ) ;------------------------------------------------------------- @@ -824,7 +827,7 @@ (set (ifield f-dsp-16-s8) (sra INT (ifield f-bitbase32-16-s11-unprefixed) 3)) ) (sequence () ; extract - (set (ifield f-bitbase32-16-s11-unprefixed) (or (sll (ifield f-dsp-16-s8) 3) + (set (ifield f-bitbase32-16-s11-unprefixed) (or (mul (ifield f-dsp-16-s8) 8) (ifield f-bitno32-unprefixed))) ) ) @@ -846,7 +849,7 @@ (set (ifield f-dsp-16-s16) (sra INT (ifield f-bitbase32-16-s19-unprefixed) 3)) ) (sequence () ; extract - (set (ifield f-bitbase32-16-s19-unprefixed) (or (sll (ifield f-dsp-16-s16) 3) + (set (ifield f-bitbase32-16-s19-unprefixed) (or (mul (ifield f-dsp-16-s16) 8) (ifield f-bitno32-unprefixed))) ) ) @@ -882,7 +885,7 @@ (set (ifield f-dsp-24-s8) (sra INT (ifield f-bitbase32-24-s11-prefixed) 3)) ) (sequence () ; extract - (set (ifield f-bitbase32-24-s11-prefixed) (or (sll (ifield f-dsp-24-s8) 3) + (set (ifield f-bitbase32-24-s11-prefixed) (or (mul (ifield f-dsp-24-s8) 8) (ifield f-bitno32-prefixed))) ) ) @@ -910,7 +913,7 @@ ) (sequence () ; extract (set (ifield f-bitbase32-24-s19-prefixed) (or (sll (ifield f-dsp-24-u8) 3) - (or (sll (ifield f-dsp-32-s8) 11) + (or (mul (ifield f-dsp-32-s8) 2048) (ifield f-bitno32-prefixed)))) ) ) @@ -1072,7 +1075,7 @@ (indices keyword "" (("r2r0" 0) ("r3r1" 1))) (get (index) (or SI (and (reg h-gr index) #xffff) - (and (sll (reg h-gr (add index 2)) 16) #xffff0000))) + (sll (and (reg h-gr (add index 2)) #xffff) 16))) (set (index newval) (sequence () (set (reg h-gr index) (and newval #xffff)) (set (reg h-gr (add index 2)) (srl newval 16))))) diff -Nru gdb-9.1/cpu/m32r.cpu gdb-10.2/cpu/m32r.cpu --- gdb-9.1/cpu/m32r.cpu 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/cpu/m32r.cpu 2021-04-25 04:06:26.000000000 +0000 @@ -478,13 +478,13 @@ (dnf f-hi16 "high 16 bits" (SIGN-OPT) 16 16) (df f-disp8 "disp8, slot unknown" (PCREL-ADDR RELOC) 8 8 INT ((value pc) (sra WI (sub WI value (and WI pc (const -4))) (const 2))) - ((value pc) (add WI (sll WI value (const 2)) (and WI pc (const -4))))) + ((value pc) (add WI (mul WI value (const 4)) (and WI pc (const -4))))) (df f-disp16 "disp16" (PCREL-ADDR RELOC) 16 16 INT ((value pc) (sra WI (sub WI value pc) (const 2))) - ((value pc) (add WI (sll WI value (const 2)) pc))) + ((value pc) (add WI (mul WI value (const 4)) pc))) (df f-disp24 "disp24" (PCREL-ADDR RELOC) 8 24 INT ((value pc) (sra WI (sub WI value pc) (const 2))) - ((value pc) (add WI (sll WI value (const 2)) pc))) + ((value pc) (add WI (mul WI value (const 4)) pc))) (dnf f-op23 "op2.3" () 9 3) (dnf f-op3 "op3" () 14 2) diff -Nru gdb-9.1/cpu/mep-core.cpu gdb-10.2/cpu/mep-core.cpu --- gdb-9.1/cpu/mep-core.cpu 2013-12-22 10:09:55.000000000 +0000 +++ gdb-10.2/cpu/mep-core.cpu 2020-09-13 02:33:40.000000000 +0000 @@ -430,15 +430,15 @@ (df f-8s8a2 "pc-rel addr (8 bits)" (all-mep-core-isas PCREL-ADDR) 8 7 INT ((value pc) (sra SI (sub SI value pc) 1)) - ((value pc) (add SI (sll SI value 1) pc))) + ((value pc) (add SI (mul SI value 2) pc))) (df f-12s4a2 "pc-rel addr (12 bits)" (all-mep-core-isas PCREL-ADDR) 4 11 INT ((value pc) (sra SI (sub SI value pc) 1)) - ((value pc) (add SI (sll SI value 1) pc))) + ((value pc) (add SI (mul SI value 2) pc))) (df f-17s16a2 "pc-rel addr (17 bits)" (all-mep-core-isas PCREL-ADDR) 16 16 INT ((value pc) (sra SI (sub SI value pc) 1)) - ((value pc) (add SI (sll SI value 1) pc))) + ((value pc) (add SI (mul SI value 2) pc))) (df f-24s5a2n-hi "24s5a2n hi 16s16" (all-mep-core-isas PCREL-ADDR) 16 16 INT #f #f) (df f-24s5a2n-lo "24s5a2n lo 7s5a2" (all-mep-core-isas PCREL-ADDR) 5 7 UINT #f #f) @@ -456,7 +456,7 @@ (set (ifield f-24s5a2n-hi) (sra INT (ifield f-24s5a2n) 8)))) (extract (set (ifield f-24s5a2n) - (add SI (or (sll (ifield f-24s5a2n-hi) 8) + (add SI (or (mul (ifield f-24s5a2n-hi) 256) (sll (ifield f-24s5a2n-lo) 1)) pc))) ) @@ -486,7 +486,7 @@ (df f-7u9 "tp-rel b (7 bits)" (all-mep-core-isas) 9 7 UINT #f #f) (df f-7u9a2 "tp-rel h (7 bits)" (all-mep-core-isas) 9 6 UINT ((value pc) (srl SI value 1)) - ((value pc) (sll SI value 1))) + ((value pc) (mul SI value 2))) (df f-7u9a4 "tp/sp-rel w (7 bits)" (all-mep-core-isas) 9 5 UINT ((value pc) (srl SI value 2)) ((value pc) (sll SI value 2))) diff -Nru gdb-9.1/cpu/mep.opc gdb-10.2/cpu/mep.opc --- gdb-9.1/cpu/mep.opc 2018-04-13 13:24:31.000000000 +0000 +++ gdb-10.2/cpu/mep.opc 2020-09-13 02:33:40.000000000 +0000 @@ -855,8 +855,7 @@ *strp_in += (str - hold); } - if (hold) - free (hold); + free (hold); return errmsg; } @@ -1272,7 +1271,7 @@ CGEN_INSN_INT insn_value; CGEN_EXTRACT_INFO ex_info; - insn_value = cgen_get_insn_value (cd, buf, 32); + insn_value = cgen_get_insn_value (cd, buf, 32, 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 diff -Nru gdb-9.1/cpu/or1kcommon.cpu gdb-10.2/cpu/or1kcommon.cpu --- gdb-9.1/cpu/or1kcommon.cpu 2019-09-20 21:58:17.000000000 +0000 +++ gdb-10.2/cpu/or1kcommon.cpu 2020-09-13 02:33:40.000000000 +0000 @@ -115,20 +115,6 @@ ) ; -; Hardware: virtual registerts for FPU (double precision) -; mapped to GPRs -; -(define-hardware - (name h-fdr) - (comment "or64 floating point registers (double, virtual)") - (attrs VIRTUAL (MACH ORFPX64-MACHS)) - (type register DF (32)) - (indices keyword "" REG-INDICES) - (get (index) (subword DF (trunc DI (reg h-gpr index)) 0)) - (set (index newval) (set UDI (reg h-gpr index) (zext UDI (subword DI newval 0)))) - ) - -; ; Register pairs are offset by 2 for registers r16 and above. This is to ; be able to allow registers to be call saved in GCC across function calls. ; diff -Nru gdb-9.1/cpu/or1k.cpu gdb-10.2/cpu/or1k.cpu --- gdb-9.1/cpu/or1k.cpu 2019-09-20 21:58:17.000000000 +0000 +++ gdb-10.2/cpu/or1k.cpu 2020-09-13 02:33:40.000000000 +0000 @@ -31,7 +31,7 @@ (comment "OpenRISC 1000") (default-alignment aligned) (insn-lsb0? #t) - (machs or32 or32nd or64 or64nd) + (machs or32 or32nd) (isas openrisc) ) @@ -44,10 +44,8 @@ ) (define-pmacro OR32-MACHS or32,or32nd) -(define-pmacro OR64-MACHS or64,or64nd) -(define-pmacro ORBIS-MACHS or32,or32nd,or64,or64nd) -(define-pmacro ORFPX32-MACHS or32,or32nd,or64,or64nd) -(define-pmacro ORFPX64-MACHS or64,or64nd) +(define-pmacro ORBIS-MACHS or32,or32nd) +(define-pmacro ORFPX32-MACHS or32,or32nd) (define-pmacro ORFPX64A32-MACHS or32,or32nd) ; float64 for 32-bit machs (define-attr @@ -99,33 +97,6 @@ ) ) ) - -(if (keep-mach? (or64 or64nd)) - (begin - (define-cpu - (name or1k64bf) - (comment "OpenRISC 1000 64-bit CPU family") - (insn-endian big) - (data-endian big) - (word-bitsize 64) - (file-transform "64") - ) - - (define-mach - (name or64) - (comment "Generic OpenRISC 1000 64-bit CPU") - (cpu or1k64bf) - (bfd-name "or1k64") - ) - - (define-mach - (name or64nd) - (comment "Generic OpenRISC 1000 ND 64-bit CPU with no branch delay slot") - (cpu or1k64bf) - (bfd-name "or1k64nd") - ) - ) - ) (include "or1kcommon.cpu") (include "or1korbis.cpu") diff -Nru gdb-9.1/cpu/or1korbis.cpu gdb-10.2/cpu/or1korbis.cpu --- gdb-9.1/cpu/or1korbis.cpu 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/cpu/or1korbis.cpu 2020-09-13 02:33:40.000000000 +0000 @@ -76,7 +76,7 @@ 26 INT ((value pc) (sra IAI (sub IAI value pc) (const 2))) - ((value pc) (add IAI (sll IAI value (const 2)) pc)) + ((value pc) (add IAI (mul IAI value (const 4)) pc)) ) ; PC relative, 21-bit, 13 shifted to right, aligned. @@ -91,7 +91,7 @@ ((value pc) (sub IAI (sra IAI value (const 13)) (sra IAI pc (const 13)))) ((value pc) - (sll IAI (add IAI value (sra IAI pc (const 13))) (const 13))) + (mul IAI (add IAI value (sra IAI pc (const 13))) (const 8192))) ) ; Immediates. diff -Nru gdb-9.1/cpu/or1korfpx.cpu gdb-10.2/cpu/or1korfpx.cpu --- gdb-9.1/cpu/or1korfpx.cpu 2019-09-20 21:58:17.000000000 +0000 +++ gdb-10.2/cpu/or1korfpx.cpu 2020-09-13 02:33:40.000000000 +0000 @@ -84,10 +84,6 @@ (dnop rASF "source register A (single floating point mode)" ((MACH ORFPX32-MACHS)) h-fsr f-r2) (dnop rBSF "source register B (single floating point mode)" ((MACH ORFPX32-MACHS)) h-fsr f-r3) -(dnop rDDF "or64 destination register (double floating point mode)" ((MACH ORFPX64-MACHS)) h-fdr f-r1) -(dnop rADF "or64 source register A (double floating point mode)" ((MACH ORFPX64-MACHS)) h-fdr f-r2) -(dnop rBDF "or64 source register B (double floating point mode)" ((MACH ORFPX64-MACHS)) h-fdr f-r3) - (define-pmacro (double-field-and-ops mnemonic reg offbit op-comment) (begin (define-multi-ifield @@ -152,14 +148,6 @@ (set SF rDSF (mnemonic SF rASF rBSF)) () ) - (dni (.sym lf- mnemonic -d) - (.str "lf." mnemonic ".d reg/reg/reg") - ((MACH ORFPX64-MACHS)) - (.str "lf." mnemonic ".d $rDDF,$rADF,$rBDF") - (+ OPC_FLOAT rDDF rADF rBDF (f-resv-10-3 0) (.sym OPC_FLOAT_REGREG_ (.upcase mnemonic) _D)) - (set DF rDDF (mnemonic DF rADF rBDF)) - () - ) (dni (.sym lf- mnemonic -d32) (.str "lf." mnemonic ".d regpair/regpair/regpair") ((MACH ORFPX64A32-MACHS)) @@ -185,15 +173,6 @@ () ) -(dni lf-rem-d - "lf.rem.d reg/reg/reg" - ((MACH ORFPX64-MACHS)) - "lf.rem.d $rDDF,$rADF,$rBDF" - (+ OPC_FLOAT rDDF rADF rBDF (f-resv-10-3 0) OPC_FLOAT_REGREG_REM_D) - (set DF rDDF (rem DF rADF rBDF)) - () - ) - (dni lf-rem-d32 "lf.rem.d regpair/regpair/regpair" ((MACH ORFPX64A32-MACHS)) @@ -221,15 +200,6 @@ () ) -(dni lf-itof-d - "lf.itof.d reg/reg" - ((MACH ORFPX64-MACHS)) - "lf.itof.d $rDDF,$rA" - (+ OPC_FLOAT rDDF rA (f-r3 0) (f-resv-10-3 0) OPC_FLOAT_REGREG_ITOF_D) - (set DF rDDF (float DF (get-rounding-mode) rA)) - () - ) - (dni lf-itof-d32 "lf.itof.d regpair/regpair" ((MACH ORFPX64A32-MACHS)) @@ -248,15 +218,6 @@ () ) -(dni lf-ftoi-d - "lf.ftoi.d reg/reg" - ((MACH ORFPX64-MACHS)) - "lf.ftoi.d $rD,$rADF" - (+ OPC_FLOAT rD rADF (f-r3 0) (f-resv-10-3 0) OPC_FLOAT_REGREG_FTOI_D) - (set WI rD (fix WI (get-rounding-mode) rADF)) - () - ) - (dni lf-ftoi-d32 "lf.ftoi.d regpair/regpair" ((MACH ORFPX64A32-MACHS)) @@ -276,14 +237,6 @@ (symantics rtx-mnemonic SF rASF rBSF) () ) - (dni (.sym lf-sf mnemonic -d) - (.str "lf.sf" mnemonic ".d reg/reg") - ((MACH ORFPX64-MACHS)) - (.str "lf.sf" mnemonic ".d $rADF,$rBDF") - (+ OPC_FLOAT (f-r1 0) rADF rBDF (f-resv-10-3 0) (.sym OPC_FLOAT_REGREG_SF (.upcase mnemonic) _D)) - (symantics rtx-mnemonic DF rADF rBDF) - () - ) (dni (.sym lf-sf mnemonic -d32) (.str "lf.sf" mnemonic ".d regpair/regpair") ((MACH ORFPX64A32-MACHS)) @@ -336,15 +289,6 @@ () ) -(dni lf-madd-d - "lf.madd.d reg/reg/reg" - ((MACH ORFPX64-MACHS)) - "lf.madd.d $rDDF,$rADF,$rBDF" - (+ OPC_FLOAT rDDF rADF rBDF (f-resv-10-3 0) OPC_FLOAT_REGREG_MADD_D) - (set DF rDDF (add DF (mul DF rADF rBDF) rDDF)) - () - ) - (dni lf-madd-d32 "lf.madd.d regpair/regpair/regpair" ((MACH ORFPX64A32-MACHS)) @@ -364,14 +308,6 @@ (nop) () ) - (dni (.sym "lf-cust" cust-num "-d") - (.str "lf.cust" cust-num ".d") - ((MACH ORFPX64-MACHS)) - (.str "lf.cust" cust-num ".d") - (+ OPC_FLOAT (f-resv-25-5 0) rADF rBDF (f-resv-10-3 0) (.sym "OPC_FLOAT_REGREG_CUST" cust-num "_D")) - (nop) - () - ) (dni (.sym "lf-cust" cust-num "-d32") (.str "lf.cust" cust-num ".d") ((MACH ORFPX64A32-MACHS)) diff -Nru gdb-9.1/cpu/xstormy16.cpu gdb-10.2/cpu/xstormy16.cpu --- gdb-9.1/cpu/xstormy16.cpu 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/cpu/xstormy16.cpu 2020-09-13 02:33:40.000000000 +0000 @@ -393,7 +393,7 @@ (length 11) (mode INT) (encode (value pc) (sra SI (sub SI value (add SI pc 2)) 1)) - (decode (value pc) (add SI (sll value 1) (add SI pc 2))) + (decode (value pc) (add SI (mul value 2) (add SI pc 2))) ) (dnop rel12a "12 bit relative address" () h-uint f-rel12a) diff -Nru gdb-9.1/debian/changelog gdb-10.2/debian/changelog --- gdb-9.1/debian/changelog 2020-02-11 07:11:47.000000000 +0000 +++ gdb-10.2/debian/changelog 2021-04-28 08:22:22.000000000 +0000 @@ -1,3 +1,157 @@ +gdb (10.2-0ubuntu1~20.04~1) focal; urgency=medium + + * PPA upload. + + -- Matthias Klose Wed, 28 Apr 2021 10:22:22 +0200 + +gdb (10.2-0ubuntu1) impish; urgency=medium + + * gdb 10.2 release. Changes compared to 10.1-2ubuntu2: + - Fix getting range of flexible array member in Python. + + -- Matthias Klose Mon, 26 Apr 2021 15:26:04 +0200 + +gdb (10.1-2ubuntu2) hirsute; urgency=medium + + * Update from the gdb-10-branch: + - Fix PR gdb/27541, PR threads/27239, PR symtab/27341, PR build/27536, + PR build/27535, PR symtab/27333, PR gdb/27147, PR gdb/26861, + PR gdb/26828, PR gdb/27435, PR build/27385, PR tdep/27369, + PR breakpoints/27330, PR gdb/26813, PR gdb/26881, PR remote/26614. + + -- Matthias Klose Sun, 11 Apr 2021 12:32:56 +0200 + +gdb (10.1-2ubuntu1) hirsute; urgency=medium + + * Merge with Debian; remaining changes: + - Build from the upstream source tarball. + - Regenerate the control file. + - Apply patches gdb-strings and ptrace-error-verbosity. + - Don't use libsource-highlight-dev on i386. + - Skip tests on armhf, hanging on the buildds. + + -- Matthias Klose Fri, 05 Mar 2021 18:48:32 +0100 + +gdb (10.1-2) unstable; urgency=high + + * Acknowledge past contributions from Matthias and Samuel. + * Sync latest updates from 10.1 branch + + -- Héctor Orón Martínez Thu, 04 Mar 2021 19:37:19 +0100 + +gdb (10.1-1.7+hurd.1) unreleased; urgency=high + + * patches/fork-inferior-fix: fix missing fork-inferior.c file. + * patches/vm_min_max_address: fix missing VM_MIN/MAX_ADDRESS macros. + + -- Samuel Thibault Sun, 24 Jan 2021 10:40:47 +0000 + +gdb (10.1-1.7) unstable; urgency=high + + * Non-maintainer upload. + * Update to the gdb-10-branch 20210103 (copyright updates). + * Fix building the gdb-source package. Closes: #978391. + * Call dh_dwz before dh_strip. + * Add x86_64-linux-gnux32 as a target for gdb-multiarch. + + -- Matthias Klose Sun, 03 Jan 2021 12:07:38 +0100 + +gdb (10.1-1.6ubuntu1) hirsute; urgency=medium + + * Merge with Debian; remaining changes: + - Build from the upstream source tarball. + - Regenerate the control file. + - Apply patches gdb-strings and ptrace-error-verbosity. + - Don't use libsource-highlight-dev on i386. + - Skip tests on armhf, hanging on the buildds. + + -- Matthias Klose Sun, 03 Jan 2021 11:06:40 +0100 + +gdb (10.1-1.6) unstable; urgency=high + + * Non-maintainer upload. + * Update to the gdb-10-branch 20210103 (copyright updates). + * Fix building the gdb-source package. Closes: #978391. + * Call dh_dwz before dh_strip. + * Add x86_64-linux-gnux32 as a target for gdb-multiarch. + + -- Matthias Klose Sun, 03 Jan 2021 11:03:21 +0100 + +gdb (10.1-1.5ubuntu2) hirsute; urgency=medium + + * Merge with Debian; remaining changes: + - Build from the upstream source tarball. + - Regenerate the control file. + - Apply patches gdb-strings and ptrace-error-verbosity. + - Don't use libsource-highlight-dev on i386. + * Skip tests on armhf, hanging on the buildds. + + -- Matthias Klose Thu, 17 Dec 2020 10:08:08 +0100 + +gdb (10.1-1.5) unstable; urgency=medium + + * Non-maintainer upload. + * Don't build gdb-source when only building architecture dependent packages. + * Don't run the tests when only building arch-indep packages. + * Support the nodoc profile. Closes: #870646. + + -- Matthias Klose Thu, 17 Dec 2020 10:06:12 +0100 + +gdb (10.1-1.4ubuntu2) hirsute; urgency=medium + + * Merge with Debian; remaining changes: + - Build from the upstream source tarball. + - Regenerate the control file. + - Apply patches gdb-strings and ptrace-error-verbosity. + * Don't use libsource-highlight-dev on i386. + + -- Matthias Klose Sat, 12 Dec 2020 12:06:12 +0100 + +gdb (10.1-1.4) unstable; urgency=medium + + * Non-maintainer upload. + * Update to the gdb-10-branch 20201212. + * debian/rules: Get rid off the cdbs named macro names. Addresses: #973355. + * gdb-multiarch: Don't call install with -s, build a proper dbgsym package. + Closes: #968533. + * gdb-source: Compress with xz instead of bz2. + * Make the build of the minimal variant optional (built by default). + * Allow building a gdb-doc package (disabled by default). + * Build with babeltrace everywhere. + * Also build gdbserver on riscv64. + * Bump standards version. + + -- Matthias Klose Sat, 12 Dec 2020 10:23:22 +0100 + +gdb (10.1-1.3) unstable; urgency=medium + + * Non-maintainer upload. + * Convert to debhelper v10, not using the sequencer. Addresses: #973355. + * Search for DWZ files in debug-file-directories as well, patch taken + from the trunk. + * Only build with debuginfod on linux targets. + + -- Matthias Klose Sun, 06 Dec 2020 22:42:31 +0100 + +gdb (10.1-1) unstable; urgency=medium + + * New upstream release. + * bump debhelper compat to 10 + + -- Héctor Orón Martínez Sun, 08 Nov 2020 16:34:21 +0100 + +gdb (10.1-0ubuntu1) hirsute; urgency=medium + + * New upstream version. + + -- Matthias Klose Thu, 29 Oct 2020 10:14:31 +0100 + +gdb (9.2-0ubuntu1) groovy; urgency=medium + + * New upstream version (bug fix release). + + -- Matthias Klose Tue, 02 Jun 2020 11:43:50 +0200 + gdb (9.1-0ubuntu1) focal; urgency=medium * New upstream version. diff -Nru gdb-9.1/debian/compat gdb-10.2/debian/compat --- gdb-9.1/debian/compat 2014-11-09 15:22:58.000000000 +0000 +++ gdb-10.2/debian/compat 2020-11-08 15:33:52.000000000 +0000 @@ -1 +1 @@ -9 +10 diff -Nru gdb-9.1/debian/control gdb-10.2/debian/control --- gdb-9.1/debian/control 2018-09-26 08:43:44.000000000 +0000 +++ gdb-10.2/debian/control 2021-04-28 08:22:22.000000000 +0000 @@ -1,62 +1,64 @@ Source: gdb -Maintainer: Ubuntu Developers -XSBC-Original-Maintainer: Héctor Orón Martínez -Uploaders: Luca Bruno , Samuel Bronson +Maintainer: Héctor Orón Martínez +Uploaders: Riku Voipio , + Sergio Durigan Junior Section: devel Priority: optional -Standards-Version: 4.2.1 +Standards-Version: 4.5.1 +Rules-Requires-Root: binary-targets Build-Depends: # Packaging deps - cdbs (>= 0.4.90), - debhelper (>= 9), + debhelper (>= 10), lsb-release, - bzip2, + xz-utils, # Other tool deps autoconf, libtool, gettext, bison, dejagnu, - flex | flex-old, + flex, procps, - g++-multilib [i386 powerpc s390 sparc], gobjc, - gccgo, mig [hurd-any], +# GNU/kFreeBSD deps + libutil-freebsd-dev [kfreebsd-any], # TeX[info] deps texinfo (>= 4.7-2.2), - texlive-base, + texlive-base , # Libdev deps libexpat1-dev, - libncursesw5-dev, lib64ncurses5-dev [i386 powerpc s390 sparc], - libreadline-dev, lib64readline-dev [i386 powerpc s390 sparc], + libncurses5-dev, + libreadline-dev, zlib1g-dev, liblzma-dev, libbabeltrace-dev, - libbabeltrace-ctf-dev, + libipt-dev [amd64 i386 x32], + libsource-highlight-dev [!i386], + libxxhash-dev, + libmpfr-dev, + pkg-config, +# Python build python3-dev, libkvm-dev [kfreebsd-any], - libunwind7-dev [ia64], - libmpfr-dev, -# gdb-doc - texlive-latex-base, texlive-fonts-recommended, cm-super, -Vcs-Git: git://anonscm.debian.org/pkg-gdb/gdb.git -Vcs-Browser: http://anonscm.debian.org/gitweb/?p=pkg-gdb/gdb.git -Homepage: http://www.gnu.org/s/gdb/ + libunwind-dev [ia64], +# debuginfod +# libdebuginfod-dev [linux-any], +Vcs-Git: https://salsa.debian.org/gdb-team/gdb.git +Vcs-Browser: https://salsa.debian.org/gdb-team/gdb +Homepage: https://www.gnu.org/s/gdb/ Package: gdb Architecture: any -Multi-Arch: allowed Depends: ${misc:Depends}, ${shlibs:Depends}, ${python3:Depends} -Recommends: libc-dbg, - libcc1-0, - gdbserver [amd64 armel armhf arm64 i386 ia64 m32r m68k mips mipsel powerpc powerpcspe ppc64 ppc64el s390 s390x x32] -Suggests: gdb-doc +Recommends: libc-dbg +Suggests: gdb-doc, + gdbserver [linux-any] Conflicts: gdb -Replaces: gdb, gdb-doc (<< 7.8-1~) -Provides: gdb-minimal (= ${binary:Version}) +Replaces: gdb +Provides: ${gdb:minimal} Description: GNU Debugger GDB is a source-level debugger, capable of breaking programs at any specific line, displaying variable values, and determining @@ -67,6 +69,9 @@ Package: gdb-multiarch Architecture: any Depends: gdb (= ${binary:Version}), ${misc:Depends}, ${shlibs:Depends} +Conflicts: gdb-arm-none-eabi +Breaks: gdb-arm-none-eabi +Provides: gdb-arm-none-eabi Description: GNU Debugger (with support for multiple architectures) GDB is a source-level debugger, capable of breaking programs at any specific line, displaying variable values, and determining @@ -78,7 +83,7 @@ target architectures. Package: gdbserver -Architecture: amd64 armel armhf arm64 i386 ia64 m32r m68k mips mipsel powerpc powerpcspe ppc64 ppc64el s390 s390x x32 +Architecture: amd64 armel armhf arm64 i386 ia64 m32r m68k mips mipsel mips64el powerpc powerpcspe ppc64 ppc64el riscv64 s390 s390x x32 Depends: ${misc:Depends}, ${shlibs:Depends} Replaces: gdb (<< 7.0.1-1) Description: GNU Debugger (remote server) @@ -104,21 +109,6 @@ This package contains the sources and patches which are needed to build GDB. -Package: gdb-dbg -Section: debug -Priority: extra -Architecture: any -Depends: ${misc:Depends}, gdb (= ${binary:Version}) -Description: GNU Debugger (debug package) - GDB is a source-level debugger, capable of breaking programs at - any specific line, displaying variable values, and determining - where errors occurred. Currently, gdb supports C, C++, D, - Objective-C, Fortran, Java, OpenCL C, Pascal, assembly, Modula-2, - Go, and Ada. A must-have for any serious programmer. - . - This package contains the detached debugging symbols for the GNU - GDB. - Package: gdb-doc Architecture: all Section: doc diff -Nru gdb-9.1/debian/control.doc gdb-10.2/debian/control.doc --- gdb-9.1/debian/control.doc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/debian/control.doc 2020-12-29 22:13:25.000000000 +0000 @@ -0,0 +1,15 @@ + +Package: gdb-doc +Architecture: all +Section: doc +Depends: ${misc:Depends} +Breaks: gdb (<< 7.8), gdbserver (<< 7.8) +Replaces: gdb (<< 7.8), gdbserver (<< 7.8) +Description: The GNU Debugger Documentation + GDB is a source-level debugger, capable of breaking programs at + any specific line, displaying variable values, and determining + where errors occurred. Currently, it works for C, C++, Fortran, + Modula 2 and Java programs. A must-have for any serious + programmer. + . + This package contains the GDB manual. diff -Nru gdb-9.1/debian/control.in gdb-10.2/debian/control.in --- gdb-9.1/debian/control.in 2018-09-26 08:43:40.000000000 +0000 +++ gdb-10.2/debian/control.in 2021-04-28 08:22:22.000000000 +0000 @@ -1,62 +1,64 @@ Source: gdb -Maintainer: Ubuntu Developers -XSBC-Original-Maintainer: Héctor Orón Martínez -Uploaders: Luca Bruno , Samuel Bronson +Maintainer: Héctor Orón Martínez +Uploaders: Riku Voipio , + Sergio Durigan Junior Section: devel Priority: optional -Standards-Version: 4.2.1 +Standards-Version: 4.5.1 +Rules-Requires-Root: binary-targets Build-Depends: # Packaging deps - cdbs (>= 0.4.90), - debhelper (>= 9), + debhelper (>= 10), lsb-release, - bzip2, + xz-utils, # Other tool deps autoconf, libtool, gettext, bison, dejagnu, - flex | flex-old, + flex, procps, - g++-multilib [i386 powerpc s390 sparc], gobjc, - gccgo, mig [hurd-any], +# GNU/kFreeBSD deps + libutil-freebsd-dev [kfreebsd-any], # TeX[info] deps texinfo (>= 4.7-2.2), - texlive-base, + texlive-base , # Libdev deps libexpat1-dev, - libncursesw5-dev, lib64ncurses5-dev [i386 powerpc s390 sparc], - libreadline-dev, lib64readline-dev [i386 powerpc s390 sparc], + libncurses5-dev, + libreadline-dev, zlib1g-dev, liblzma-dev, libbabeltrace-dev, - libbabeltrace-ctf-dev, + libipt-dev [amd64 i386 x32], + libsource-highlight-dev [!i386], + libxxhash-dev, + libmpfr-dev, + pkg-config, +# Python build python3-dev, libkvm-dev [kfreebsd-any], - libunwind7-dev [ia64], - libmpfr-dev, -# gdb-doc - texlive-latex-base, texlive-fonts-recommended, cm-super, -Vcs-Git: git://anonscm.debian.org/pkg-gdb/gdb.git -Vcs-Browser: http://anonscm.debian.org/gitweb/?p=pkg-gdb/gdb.git -Homepage: http://www.gnu.org/s/gdb/ + libunwind-dev [ia64], +# debuginfod +# libdebuginfod-dev [linux-any], +Vcs-Git: https://salsa.debian.org/gdb-team/gdb.git +Vcs-Browser: https://salsa.debian.org/gdb-team/gdb +Homepage: https://www.gnu.org/s/gdb/ Package: gdb@TS@ Architecture: any -Multi-Arch: allowed Depends: ${misc:Depends}, ${shlibs:Depends}, ${python3:Depends} -Recommends: libc-dbg, - libcc1-0, - gdbserver [amd64 armel armhf arm64 i386 ia64 m32r m68k mips mipsel powerpc powerpcspe ppc64 ppc64el s390 s390x x32] -Suggests: gdb-doc +Recommends: libc-dbg +Suggests: gdb-doc, + gdbserver [linux-any] Conflicts: gdb -Replaces: gdb, gdb-doc (<< 7.8-1~) -Provides: gdb-minimal (= ${binary:Version}) +Replaces: gdb +Provides: ${gdb:minimal} Description: GNU Debugger GDB is a source-level debugger, capable of breaking programs at any specific line, displaying variable values, and determining @@ -67,6 +69,9 @@ Package: gdb-multiarch Architecture: any Depends: gdb (= ${binary:Version}), ${misc:Depends}, ${shlibs:Depends} +Conflicts: gdb-arm-none-eabi +Breaks: gdb-arm-none-eabi +Provides: gdb-arm-none-eabi Description: GNU Debugger (with support for multiple architectures) GDB is a source-level debugger, capable of breaking programs at any specific line, displaying variable values, and determining @@ -78,7 +83,7 @@ target architectures. Package: gdbserver -Architecture: amd64 armel armhf arm64 i386 ia64 m32r m68k mips mipsel powerpc powerpcspe ppc64 ppc64el s390 s390x x32 +Architecture: amd64 armel armhf arm64 i386 ia64 m32r m68k mips mipsel mips64el powerpc powerpcspe ppc64 ppc64el riscv64 s390 s390x x32 Depends: ${misc:Depends}, ${shlibs:Depends} Replaces: gdb (<< 7.0.1-1) Description: GNU Debugger (remote server) @@ -103,33 +108,3 @@ . This package contains the sources and patches which are needed to build GDB. - -Package: gdb-dbg -Section: debug -Priority: extra -Architecture: any -Depends: ${misc:Depends}, gdb (= ${binary:Version}) -Description: GNU Debugger (debug package) - GDB is a source-level debugger, capable of breaking programs at - any specific line, displaying variable values, and determining - where errors occurred. Currently, gdb supports C, C++, D, - Objective-C, Fortran, Java, OpenCL C, Pascal, assembly, Modula-2, - Go, and Ada. A must-have for any serious programmer. - . - This package contains the detached debugging symbols for the GNU - GDB. - -Package: gdb-doc -Architecture: all -Section: doc -Depends: ${misc:Depends} -Breaks: gdb (<< 7.8), gdbserver (<< 7.8) -Replaces: gdb (<< 7.8), gdbserver (<< 7.8) -Description: The GNU Debugger Documentation - GDB is a source-level debugger, capable of breaking programs at - any specific line, displaying variable values, and determining - where errors occurred. Currently, it works for C, C++, Fortran, - Modula 2 and Java programs. A must-have for any serious - programmer. - . - This package contains the GDB manual. diff -Nru gdb-9.1/debian/control.minimal gdb-10.2/debian/control.minimal --- gdb-9.1/debian/control.minimal 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/debian/control.minimal 2020-12-29 22:13:25.000000000 +0000 @@ -0,0 +1,16 @@ + +Package: gdb-minimal +Architecture: any +Depends: ${misc:Depends}, ${shlibs:Depends} +Provides: gdb +Conflicts: gdb +Replaces: gdb +Description: GNU Debugger (minimal version) + GDB is a source-level debugger, capable of breaking programs at + any specific line, displaying variable values, and determining + where errors occurred. Currently, gdb supports C, C++, D, + Objective-C, Fortran, Java, OpenCL C, Pascal, assembly, Modula-2, + Go, and Ada. A must-have for any serious programmer. + . + This package contains a minimal version of GDB with optional features + disabled. diff -Nru gdb-9.1/debian/copyright gdb-10.2/debian/copyright --- gdb-9.1/debian/copyright 2014-11-09 15:22:58.000000000 +0000 +++ gdb-10.2/debian/copyright 2020-09-19 19:55:03.000000000 +0000 @@ -1,20 +1,20 @@ -Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: GDB: The GNU Project Debugger Upstream-Contact: gdb@sourceware.org -Source: http://www.gnu.org/software/gdb/download/ w/ GFDL'd files stripped +Source: https://www.gnu.org/software/gdb/download/ w/ GFDL'd files stripped Disclaimer: Autogenerated by CDBS Some gross errors corrected, but not yet checked in detail +Files: * +Copyright: 1984-2014, Free Software Foundation, Inc +License: GPL-3+ + Files: debian/* Copyright: 2011-2014, Héctor Orón Martínez 2013-2014, Samuel Bronson 2002-2010, Daniel Jacobowitz License: LGPL-2.1+ -Files: * -Copyright: 1984-2014, Free Software Foundation, Inc -License: GPL-3+ - Files: include/leb128.h include/safe-ctype.h include/timeval-utils.h @@ -374,7 +374,7 @@ GNU General Public License for more details. . You should have received a copy of the GNU General Public License - along with this program. If not, see . + along with this program. If not, see . . On Debian systems, the full text of the GNU General Public License version 3 can be found in the file @@ -400,7 +400,7 @@ You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see - . + . . On Debian systems, the full text of the GNU General Public License version 3 can be found in the file @@ -410,7 +410,7 @@ . Version 3.1, 31 March 2009 . - Copyright (C) 2009 Free Software Foundation, Inc. + Copyright (C) 2009 Free Software Foundation, Inc. . Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. diff -Nru gdb-9.1/debian/gbp.conf gdb-10.2/debian/gbp.conf --- gdb-9.1/debian/gbp.conf 2014-11-09 15:22:58.000000000 +0000 +++ gdb-10.2/debian/gbp.conf 2020-09-19 19:55:03.000000000 +0000 @@ -1,2 +1,4 @@ [DEFAULT] -debian-branch=master +debian-branch=debian/unstable +upstream-branch=upstream/tarballs +pristine-tar = True diff -Nru gdb-9.1/debian/gcore.1 gdb-10.2/debian/gcore.1 --- gdb-9.1/debian/gcore.1 2014-11-09 15:22:58.000000000 +0000 +++ gdb-10.2/debian/gcore.1 2020-09-19 19:55:03.000000000 +0000 @@ -1,20 +1,26 @@ -.TH gcore "1" "May 2007" "gdb 6.8" "GNU Tools" +.TH gcore "1" "Feb 2020" "gdb 9.1" "GNU Tools" .SH NAME -gcore \- Generate a core file for a running process +gcore \- Generate core files for running processes .SH SYNOPSIS .B gcore -[-o \fIfilename\fR] \fIpid\fR +[-a] [-o \fIfilename\fR] \fIpid[s]\fR .SH DESCRIPTION .\" Add any additional description here .PP -gcore generates a core file for the process specified by its process ID, -\fIpid\fR. By default, the core file is written to core.\fIpid\fR, in the +gcore generates a core file for the process(es) specified by process IDs, +\fIpid[s]\fR. By default, each core file is written to core.\fIpid\fR, in the current directory. .TP +\fB\-a\fR +(Linux only) ignore /proc/PID/coredump_filter and also dump memory mappings +marked with the 'VM_DONTDUMP' flag. See info node Core File Generation for +longer explanation. +.TP \fB\-o\fR \fIfilename\fR -write core file to \fIfilename\fR instead of core.\fIpid\fR +write core file to \fIfilename\fR if one PID, or \fIfilename.pid\fR if +multiple PIDs, instead of default core.\fIpid\fR .SH COPYING -Copyright \(co 2003, 2005, 2007, 2008 Free Software Foundation, Inc. +Copyright \(co 2003, 2005, 2007, 2008, 2018, 2020 Free Software Foundation, Inc. .PP Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on diff -Nru gdb-9.1/debian/gdb-doc.doc-base.gdb gdb-10.2/debian/gdb-doc.doc-base.gdb --- gdb-9.1/debian/gdb-doc.doc-base.gdb 2016-02-17 13:31:06.000000000 +0000 +++ gdb-10.2/debian/gdb-doc.doc-base.gdb 1970-01-01 00:00:00.000000000 +0000 @@ -1,15 +0,0 @@ -Document: gdb -Title: Debugging with GDB -Abstract: This manual describes GDB, the GNU symbolic debugger. -Section: Programming - -Format: Info -Index: /usr/share/info/gdb.info.gz -Files: /usr/share/info/gdb.info* - -Format: HTML -Index: /usr/share/doc/gdb-doc/html/gdb/index.html -Files: /usr/share/doc/gdb-doc/html/gdb/*.html - -Format: PDF -Files: /usr/share/doc/gdb-doc/pdf/gdb.pdf.gz diff -Nru gdb-9.1/debian/gdb-doc.doc-base.stabs gdb-10.2/debian/gdb-doc.doc-base.stabs --- gdb-9.1/debian/gdb-doc.doc-base.stabs 2016-02-17 13:31:06.000000000 +0000 +++ gdb-10.2/debian/gdb-doc.doc-base.stabs 1970-01-01 00:00:00.000000000 +0000 @@ -1,15 +0,0 @@ -Document: stabs -Title: The "stabs" debugging format. -Abstract: This document describes the stabs debugging format. -Section: Programming - -Format: Info -Index: /usr/share/info/stabs.info.gz -Files: /usr/share/info/stabs.info* - -Format: HTML -Index: /usr/share/doc/gdb-doc/html/stabs/index.html -Files: /usr/share/doc/gdb-doc/html/stabs/*.html - -Format: PDF -Files: /usr/share/doc/gdb-doc/pdf/stabs.pdf.gz diff -Nru gdb-9.1/debian/gdb-doc.info gdb-10.2/debian/gdb-doc.info --- gdb-9.1/debian/gdb-doc.info 2014-11-20 09:37:42.000000000 +0000 +++ gdb-10.2/debian/gdb-doc.info 1970-01-01 00:00:00.000000000 +0000 @@ -1,2 +0,0 @@ -objdir/gdb.info* -objdir/stabs.info* diff -Nru gdb-9.1/debian/gdb-doc.lintian-overrides gdb-10.2/debian/gdb-doc.lintian-overrides --- gdb-9.1/debian/gdb-doc.lintian-overrides 2014-11-20 09:37:42.000000000 +0000 +++ gdb-10.2/debian/gdb-doc.lintian-overrides 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -gdb-doc: description-synopsis-starts-with-article diff -Nru gdb-9.1/debian/gdb.install gdb-10.2/debian/gdb.install --- gdb-9.1/debian/gdb.install 2014-11-09 15:22:58.000000000 +0000 +++ gdb-10.2/debian/gdb.install 2020-12-29 22:11:30.000000000 +0000 @@ -1,3 +1,7 @@ usr/bin/gdb usr/bin/gcore usr/share/gdb +usr/include/gdb/jit-reader.h +# usr/share/man/man1/gdb.1 +# usr/share/man/man1/gdb-add-index.1 +# usr/share/man/man5/gdbinit.5 diff -Nru gdb-9.1/debian/gdb-minimal/etc/gdb/gdbinit gdb-10.2/debian/gdb-minimal/etc/gdb/gdbinit --- gdb-9.1/debian/gdb-minimal/etc/gdb/gdbinit 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/debian/gdb-minimal/etc/gdb/gdbinit 2021-04-28 08:22:22.000000000 +0000 @@ -0,0 +1 @@ +# System-wide GDB initialization file. diff -Nru gdb-9.1/debian/gdbserver.install gdb-10.2/debian/gdbserver.install --- gdb-9.1/debian/gdbserver.install 2014-11-09 15:22:58.000000000 +0000 +++ gdb-10.2/debian/gdbserver.install 2020-12-29 22:11:30.000000000 +0000 @@ -1 +1,3 @@ usr/bin/gdbserver +# usr/share/man/man1/gdbserver.1 + diff -Nru gdb-9.1/debian/NEWS gdb-10.2/debian/NEWS --- gdb-9.1/debian/NEWS 2014-11-09 15:22:58.000000000 +0000 +++ gdb-10.2/debian/NEWS 2020-09-19 19:55:03.000000000 +0000 @@ -1,3 +1,9 @@ +gdb (8.2-1) unstable; urgency=medium + + gdb-python2 package has been removed, starting with GDB 8.2. + + -- Héctor Orón Martínez Fri, 23 Nov 2018 22:56:43 +0100 + gdb (7.8-1) experimental; urgency=medium WARNING: gdb now uses Python 3 by default. diff -Nru gdb-9.1/debian/patches/2bf3b79d05bf85e41cbdcb020bd1cc424f59dd9a.diff gdb-10.2/debian/patches/2bf3b79d05bf85e41cbdcb020bd1cc424f59dd9a.diff --- gdb-9.1/debian/patches/2bf3b79d05bf85e41cbdcb020bd1cc424f59dd9a.diff 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/debian/patches/2bf3b79d05bf85e41cbdcb020bd1cc424f59dd9a.diff 2021-03-04 18:37:08.000000000 +0000 @@ -0,0 +1,156 @@ +gdb/ + +2020-12-01 Sergio Durigan Junior + + * dwarf2/read.c (dwz_search_other_debugdirs): New function. + (dwarf2_get_dwz_file): Convert 'filename' to a + std::string. Use dwz_search_other_debugdirs to search for DWZ + files in the debug-file-directories provided by the user as well. + + +diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c +index 601a571943..9468b9144e 100644 +--- a/gdb/dwarf2/read.c ++++ b/gdb/dwarf2/read.c +@@ -2185,12 +2185,100 @@ locate_dwz_sections (bfd *abfd, asection *sectp, dwz_file *dwz_file) + } + } + ++/* Attempt to find a .dwz file (whose full path is represented by ++ FILENAME) in all of the specified debug file directories provided. ++ ++ Return the equivalent gdb_bfd_ref_ptr of the .dwz file found, or ++ nullptr if it could not find anything. */ ++ ++static gdb_bfd_ref_ptr ++dwz_search_other_debugdirs (std::string &filename, bfd_byte *buildid, ++ size_t buildid_len) ++{ ++ /* Let's assume that the path represented by FILENAME has the ++ "/.dwz/" subpath in it. This is what (most) GNU/Linux ++ distributions do, anyway. */ ++ size_t dwz_pos = filename.find ("/.dwz/"); ++ ++ if (dwz_pos == std::string::npos) ++ return nullptr; ++ ++ /* This is an obvious assertion, but it's here more to educate ++ future readers of this code that FILENAME at DWZ_POS *must* ++ contain a directory separator. */ ++ gdb_assert (IS_DIR_SEPARATOR (filename[dwz_pos])); ++ ++ gdb_bfd_ref_ptr dwz_bfd; ++ std::vector> debugdir_vec ++ = dirnames_to_char_ptr_vec (debug_file_directory); ++ ++ for (const gdb::unique_xmalloc_ptr &debugdir : debugdir_vec) ++ { ++ /* The idea is to iterate over the ++ debug file directories provided by the user and ++ replace the hard-coded path in the "filename" by each ++ debug-file-directory. ++ ++ For example, suppose that filename is: ++ ++ /usr/lib/debug/.dwz/foo.dwz ++ ++ And suppose that we have "$HOME/bar" as the ++ debug-file-directory. We would then adjust filename ++ to look like: ++ ++ $HOME/bar/.dwz/foo.dwz ++ ++ which would hopefully allow us to find the alt debug ++ file. */ ++ std::string ddir = debugdir.get (); ++ ++ if (ddir.empty ()) ++ continue; ++ ++ /* Make sure the current debug-file-directory ends with a ++ directory separator. This is needed because, if FILENAME ++ contains something like "/usr/lib/abcde/.dwz/foo.dwz" and ++ DDIR is "/usr/lib/abc", then could wrongfully skip it ++ below. */ ++ if (!IS_DIR_SEPARATOR (ddir.back ())) ++ ddir += SLASH_STRING; ++ ++ /* Check whether the beginning of FILENAME is DDIR. If it is, ++ then we are dealing with a file which we already attempted to ++ open before, so we just skip it and continue processing the ++ remaining debug file directories. */ ++ if (filename.size () > ddir.size () ++ && filename.compare (0, ddir.size (), ddir) == 0) ++ continue; ++ ++ /* Replace FILENAME's default debug-file-directory with ++ DDIR. */ ++ std::string new_filename = ddir + &filename[dwz_pos + 1]; ++ ++ dwz_bfd = gdb_bfd_open (new_filename.c_str (), gnutarget); ++ ++ if (dwz_bfd == nullptr) ++ continue; ++ ++ if (!build_id_verify (dwz_bfd.get (), buildid_len, buildid)) ++ { ++ dwz_bfd.reset (nullptr); ++ continue; ++ } ++ ++ /* Found it. */ ++ break; ++ } ++ ++ return dwz_bfd; ++} ++ + /* See dwarf2read.h. */ + + struct dwz_file * + dwarf2_get_dwz_file (dwarf2_per_bfd *per_bfd) + { +- const char *filename; + bfd_size_type buildid_len_arg; + size_t buildid_len; + bfd_byte *buildid; +@@ -2214,21 +2302,19 @@ dwarf2_get_dwz_file (dwarf2_per_bfd *per_bfd) + + buildid_len = (size_t) buildid_len_arg; + +- filename = data.get (); ++ std::string filename = data.get (); + +- std::string abs_storage; +- if (!IS_ABSOLUTE_PATH (filename)) ++ if (!IS_ABSOLUTE_PATH (filename.c_str ())) + { + gdb::unique_xmalloc_ptr abs + = gdb_realpath (bfd_get_filename (per_bfd->obfd)); + +- abs_storage = ldirname (abs.get ()) + SLASH_STRING + filename; +- filename = abs_storage.c_str (); ++ filename = ldirname (abs.get ()) + SLASH_STRING + filename; + } + + /* First try the file name given in the section. If that doesn't + work, try to use the build-id instead. */ +- gdb_bfd_ref_ptr dwz_bfd (gdb_bfd_open (filename, gnutarget)); ++ gdb_bfd_ref_ptr dwz_bfd (gdb_bfd_open (filename.c_str (), gnutarget)); + if (dwz_bfd != NULL) + { + if (!build_id_verify (dwz_bfd.get (), buildid_len, buildid)) +@@ -2238,6 +2324,13 @@ dwarf2_get_dwz_file (dwarf2_per_bfd *per_bfd) + if (dwz_bfd == NULL) + dwz_bfd = build_id_to_debug_bfd (buildid_len, buildid); + ++ if (dwz_bfd == nullptr) ++ { ++ /* If the user has provided us with different ++ debug file directories, we can try them in order. */ ++ dwz_bfd = dwz_search_other_debugdirs (filename, buildid, buildid_len); ++ } ++ + if (dwz_bfd == nullptr) + { + gdb::unique_xmalloc_ptr alt_filename; diff -Nru gdb-9.1/debian/patches/branch-doc-updates.diff gdb-10.2/debian/patches/branch-doc-updates.diff --- gdb-9.1/debian/patches/branch-doc-updates.diff 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/debian/patches/branch-doc-updates.diff 2021-04-26 13:27:04.000000000 +0000 @@ -0,0 +1,2 @@ +git diff 1510de429446e47cb01d6030c1c172d71f9d43f6 fbbdd14038851a20775e2430f15e1a1c4512eeb3 + diff -Nru gdb-9.1/debian/patches/branch-updates.diff gdb-10.2/debian/patches/branch-updates.diff --- gdb-9.1/debian/patches/branch-updates.diff 2018-09-04 14:42:40.000000000 +0000 +++ gdb-10.2/debian/patches/branch-updates.diff 2021-04-26 13:26:57.000000000 +0000 @@ -1,2 +1,2 @@ -git diff b755db3c98137baaff8a154d936d326d9a9c72a7 001bcd07e0cea1fd8b996e10f91325831db029c3 +git diff 1510de429446e47cb01d6030c1c172d71f9d43f6 37e43ac47b40854760c336c66ef8e05fd248f58f diff -Nru gdb-9.1/debian/patches/disable-multi-term-settings-test.diff gdb-10.2/debian/patches/disable-multi-term-settings-test.diff --- gdb-9.1/debian/patches/disable-multi-term-settings-test.diff 2020-01-25 05:36:37.000000000 +0000 +++ gdb-10.2/debian/patches/disable-multi-term-settings-test.diff 1970-01-01 00:00:00.000000000 +0000 @@ -1,300 +0,0 @@ ---- a/gdb/testsuite/gdb.multi.orig/multi-term-settings.c -+++ b/gdb/testsuite/gdb.multi/multi-term-settings.c -@@ -1,52 +0,0 @@ --/* This testcase is part of GDB, the GNU debugger. -- -- Copyright 2017-2020 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by -- the Free Software Foundation; either version 3 of the License, or -- (at your option) any later version. -- -- This program is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU General Public License for more details. -- -- You should have received a copy of the GNU General Public License -- along with this program. If not, see . */ -- --/* This program is intended to be started outside of gdb, and then -- attached to by gdb. It loops for a while, but not forever. */ -- --#include --#include --#include --#include --#include --#include -- --int --main () --{ -- /* In case we inherit SIG_IGN. */ -- signal (SIGTTOU, SIG_DFL); -- -- alarm (240); -- -- int count = 0; -- while (1) -- { -- struct termios termios; -- -- printf ("pid=%ld, count=%d\n", (long) getpid (), count++); -- -- /* This generates a SIGTTOU if our progress group is not in the -- foreground. */ -- tcgetattr (0, &termios); -- tcsetattr (0, TCSANOW, &termios); -- -- usleep (100000); -- } -- -- return 0; --} ---- a/gdb/testsuite/gdb.multi.orig/multi-term-settings.exp -+++ b/gdb/testsuite/gdb.multi/multi-term-settings.exp -@@ -1,242 +0,0 @@ --# This testcase is part of GDB, the GNU debugger. -- --# Copyright 2017-2020 Free Software Foundation, Inc. -- --# This program is free software; you can redistribute it and/or modify --# it under the terms of the GNU General Public License as published by --# the Free Software Foundation; either version 3 of the License, or --# (at your option) any later version. --# --# This program is distributed in the hope that it will be useful, --# but WITHOUT ANY WARRANTY; without even the implied warranty of --# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --# GNU General Public License for more details. --# --# You should have received a copy of the GNU General Public License --# along with this program. If not, see . -- --# This testcase exercises GDB's terminal ownership management --# (terminal_ours/terminal_inferior, etc.) when debugging multiple --# inferiors. It tests debugging multiple inferiors started with --# different combinations of 'run'/'run+tty'/'attach', and ensures that --# the process that is sharing GDB's terminal/session is properly made --# the GDB terminal's foregound process group (i.e., "given the --# terminal"). -- --standard_testfile -- --if ![can_spawn_for_attach] { -- return 0 --} -- --if [build_executable "failed to prepare" $testfile $srcfile {debug}] { -- return -1 --} -- --# Start the programs running and then wait for a bit, to be sure that --# they can be attached to. We start these processes upfront in order --# to reuse them for the different iterations. This makes the testcase --# faster, compared to calling spawn_wait_for_attach for each iteration --# in the testing matrix. -- --set spawn_id_list [spawn_wait_for_attach [list $binfile $binfile]] --set attach_spawn_id1 [lindex $spawn_id_list 0] --set attach_spawn_id2 [lindex $spawn_id_list 1] --set attach_pid1 [spawn_id_get_pid $attach_spawn_id1] --set attach_pid2 [spawn_id_get_pid $attach_spawn_id2] -- --# Create inferior WHICH_INF. INF_HOW is how to create it. This can --# be one of: --# --# - "run" - for "run" command. --# - "tty" - for "run" + "tty TTY". --# - "attach" - for attaching to an existing process. --proc create_inferior {which_inf inf_how} { -- global binfile -- -- # Run to main and delete breakpoints. -- proc my_runto_main {} { -- if ![runto_main] { -- fail "run to main" -- return 0 -- } else { -- # Delete breakpoints otherwise GDB would try to step over -- # the breakpoint at 'main' without resuming the other -- # inferior, possibly masking the issue we're trying to -- # test. -- delete_breakpoints -- return 1 -- } -- } -- -- if {$inf_how == "run"} { -- if [my_runto_main] { -- global inferior_spawn_id -- return $inferior_spawn_id -- } -- } elseif {$inf_how == "tty"} { -- # Create the new PTY for the inferior. -- spawn -pty -- set inf_spawn_id $spawn_id -- set inf_tty_name $spawn_out(slave,name) -- gdb_test_no_output "tty $inf_tty_name" "tty TTY" -- -- if [my_runto_main] { -- return $inf_spawn_id -- } -- } elseif {$inf_how == "attach"} { -- -- # Reuse the inferiors spawned at the start of the testcase (to -- # avoid having to wait the delay imposed by -- # spawn_wait_for_attach). -- global attach_spawn_id$which_inf -- set test_spawn_id [set attach_spawn_id$which_inf] -- set testpid [spawn_id_get_pid $test_spawn_id] -- if {[gdb_test "attach $testpid" \ -- "Attaching to program: .*, process $testpid.*(in|at).*" \ -- "attach"] == 0} { -- return $test_spawn_id -- } -- } else { -- error "unhandled inf_how: $inf_how" -- } -- -- return "" --} -- --# Print debug output. -- --proc send_debug {str} { -- # Uncomment for debugging. -- #send_user $str --} -- --# The core of the testcase. See intro. Creates two inferiors that --# both loop changing their terminal's settings and printing output, --# and checks whether they receive SIGTTOU. INF1_HOW and INF2_HOW --# indicate how inferiors 1 and 2 should be created, respectively. See --# 'create_inferior' above for what arguments these parameters accept. -- --proc coretest {inf1_how inf2_how} { -- global binfile -- global inferior_spawn_id -- global gdb_spawn_id -- global decimal -- -- clean_restart $binfile -- -- set inf1_spawn_id [create_inferior 1 $inf1_how] -- -- set num 2 -- gdb_test "add-inferior" "Added inferior $num.*" \ -- "add empty inferior $num" -- gdb_test "inferior $num" "Switching to inferior $num.*" \ -- "switch to inferior $num" -- gdb_file_cmd ${binfile} -- -- set inf2_spawn_id [create_inferior 2 $inf2_how] -- -- gdb_test_no_output "set schedule-multiple on" -- -- # "run" makes each inferior be a process group leader. When we -- # run both inferiors in GDB's terminal/session, only one can end -- # up as the terminal's foreground process group, so it's expected -- # that the other receives a SIGTTOU. -- set expect_ttou [expr {$inf1_how == "run" && $inf2_how == "run"}] -- -- global gdb_prompt -- -- set any "\[^\r\n\]*" -- -- set pid1 -1 -- set pid2 -1 -- -- set test "info inferiors" -- gdb_test_multiple $test $test { -- -re "1${any}process ($decimal)${any}\r\n" { -- set pid1 $expect_out(1,string) -- send_debug "pid1=$pid1\n" -- exp_continue -- } -- -re "2${any}process ($decimal)${any}\r\n" { -- set pid2 $expect_out(1,string) -- send_debug "pid2=$pid2\n" -- exp_continue -- } -- -re "$gdb_prompt $" { -- pass $test -- } -- } -- -- # Helper for the gdb_test_multiple call below. Issues a PASS if -- # we've seen each inferior print at least 3 times, otherwise -- # continues waiting for inferior output. -- proc pass_or_exp_continue {} { -- uplevel 1 { -- if {$count1 >= 3 && $count2 >= 3} { -- if $expect_ttou { -- fail "$test (expected SIGTTOU)" -- } else { -- pass $test -- } -- } else { -- exp_continue -- } -- } -- } -- -- set infs_spawn_ids [list $inf1_spawn_id $inf2_spawn_id] -- send_debug "infs_spawn_ids=$infs_spawn_ids\n" -- -- set count1 0 -- set count2 0 -- -- set test "continue" -- gdb_test_multiple $test $test { -- -i $infs_spawn_ids -re "pid=$pid1, count=" { -- incr count1 -- pass_or_exp_continue -- } -- -i $infs_spawn_ids -re "pid=$pid2, count=" { -- incr count2 -- pass_or_exp_continue -- } -- -i $gdb_spawn_id -re "received signal SIGTTOU.*$gdb_prompt " { -- if $expect_ttou { -- pass "$test (expected SIGTTOU)" -- } else { -- fail "$test (SIGTTOU)" -- } -- } -- } -- -- send_gdb "\003" -- if {$expect_ttou} { -- gdb_test "" "Quit" "stop with control-c (Quit)" -- } else { -- gdb_test "" "received signal SIGINT.*" "stop with control-c (SIGINT)" -- } -- -- # Useful for debugging in case the Ctrl-C above fails. -- gdb_test "info inferiors" -- gdb_test "info threads" --} -- --set how_modes {"run" "attach" "tty"} -- --foreach_with_prefix inf1_how $how_modes { -- foreach_with_prefix inf2_how $how_modes { -- if {($inf1_how == "tty" || $inf2_how == "tty") -- && [target_info gdb_protocol] == "extended-remote"} { -- # No way to specify the inferior's tty in the remote -- # protocol. -- unsupported "no support for \"tty\" in the RSP" -- continue -- } -- -- coretest $inf1_how $inf2_how -- } --} -- --kill_wait_spawned_process $attach_spawn_id1 --kill_wait_spawned_process $attach_spawn_id2 diff -Nru gdb-9.1/debian/patches/elf-auxv-diff gdb-10.2/debian/patches/elf-auxv-diff --- gdb-9.1/debian/patches/elf-auxv-diff 2014-11-20 09:37:42.000000000 +0000 +++ gdb-10.2/debian/patches/elf-auxv-diff 1970-01-01 00:00:00.000000000 +0000 @@ -1,37 +0,0 @@ -Index: b/gdb/auxv.c -=================================================================== ---- a/gdb/auxv.c -+++ b/gdb/auxv.c -@@ -30,6 +30,7 @@ - - #include "auxv.h" - #include "elf/common.h" -+#include - - #include - #include -Index: b/gdb/gdbserver/linux-low.c -=================================================================== ---- a/gdb/gdbserver/linux-low.c -+++ b/gdb/gdbserver/linux-low.c -@@ -39,6 +39,7 @@ - #include - #include - #include -+#include - #include - #include - #include -Index: b/gdb/solib-svr4.c -=================================================================== ---- a/gdb/solib-svr4.c -+++ b/gdb/solib-svr4.c -@@ -48,6 +48,8 @@ - #include "gdb_bfd.h" - #include "probe.h" - -+#include -+ - static struct link_map_offsets *svr4_fetch_link_map_offsets (void); - static int svr4_have_link_map_offsets (void); - static void svr4_relocate_main_executable (void); diff -Nru gdb-9.1/debian/patches/fork-inferior-fix gdb-10.2/debian/patches/fork-inferior-fix --- gdb-9.1/debian/patches/fork-inferior-fix 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/debian/patches/fork-inferior-fix 2021-03-04 18:21:03.000000000 +0000 @@ -0,0 +1,13 @@ +Index: gdb-9.2/gdb/configure.nat +=================================================================== +--- gdb-9.2.orig/gdb/configure.nat ++++ gdb-9.2/gdb/configure.nat +@@ -214,7 +214,7 @@ case ${gdb_host} in + i386) + # Host: Intel 386 running the GNU Hurd + NATDEPFILES='i386-gnu-nat.o gnu-nat.o \ +- x86-nat.o nat/x86-dregs.o fork-child.o fork-inferior.o \ ++ x86-nat.o nat/x86-dregs.o fork-child.o \ + nat/fork-inferior.o \ + notify_S.o process_reply_S.o msg_reply_S.o \ + msg_U.o exc_request_U.o exc_request_S.o' diff -Nru gdb-9.1/debian/patches/gdb-6.5-bz185337-resolve-tls-without-debuginfo-v2.patch gdb-10.2/debian/patches/gdb-6.5-bz185337-resolve-tls-without-debuginfo-v2.patch --- gdb-9.1/debian/patches/gdb-6.5-bz185337-resolve-tls-without-debuginfo-v2.patch 2019-08-28 18:18:38.000000000 +0000 +++ gdb-10.2/debian/patches/gdb-6.5-bz185337-resolve-tls-without-debuginfo-v2.patch 2020-09-19 19:55:31.000000000 +0000 @@ -1,7 +1,12 @@ +From: Jan Kratochvil +Date: Wed, 20 Feb 2019 13:25:36 +0100 +Subject: gdb-6.5-bz185337-resolve-tls-without-debuginfo-v2 + Bug-Debian: http://bugs.debian.org/581707 Bug-Redhat: https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=185337 -Author: Jan Kratochvil -Origin: vendor, http://pkgs.fedoraproject.org/cgit/gdb.git/tree/gdb-6.5-bz185337-resolve-tls-without-debuginfo-v2.patch?id=e6e9cf3987dc51070b7b58db9967209f23a8c3d3 +Origin: vendor, http://pkgs.fedoraproject.org/cgit/gdb.git/tree/gdb-6.5-bz185337-resolve-tls-without-debuginfo-v2.patch + +https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=185337 2008-02-24 Jan Kratochvil @@ -25,6 +30,8 @@ Original patch hooked into target_translate_tls_address. But its inferior call invalidates `struct frame *' in the callers - RH BZ 690908. +https://bugzilla.redhat.com/show_bug.cgi?id=1166549 + 2007-11-03 Jan Kratochvil @@ -34,24 +41,37 @@ glibc-debuginfo-2.7-2.x86_64: /usr/lib/debug/lib64/libc.so.6.debug: <81a2> DW_AT_name : (indirect string, offset: 0x280e): __errno_location <81a8> DW_AT_MIPS_linkage_name: (indirect string, offset: 0x2808): *__GI___errno_location - ---- a/gdb/printcmd.c -+++ b/gdb/printcmd.c -@@ -1202,7 +1202,11 @@ print_command_1 (const char *args, int v +--- + gdb/printcmd.c | 6 ++- + gdb/testsuite/gdb.dwarf2/dw2-errno.c | 28 +++++++++++++ + gdb/testsuite/gdb.dwarf2/dw2-errno.exp | 60 ++++++++++++++++++++++++++++ + gdb/testsuite/gdb.dwarf2/dw2-errno2.c | 28 +++++++++++++ + gdb/testsuite/gdb.dwarf2/dw2-errno2.exp | 71 +++++++++++++++++++++++++++++++++ + 5 files changed, 192 insertions(+), 1 deletion(-) + create mode 100644 gdb/testsuite/gdb.dwarf2/dw2-errno.c + create mode 100644 gdb/testsuite/gdb.dwarf2/dw2-errno.exp + create mode 100644 gdb/testsuite/gdb.dwarf2/dw2-errno2.c + create mode 100644 gdb/testsuite/gdb.dwarf2/dw2-errno2.exp + +Index: gdb/gdb/printcmd.c +=================================================================== +--- gdb.orig/gdb/printcmd.c ++++ gdb/gdb/printcmd.c +@@ -1210,6 +1210,10 @@ print_command_1 (const char *args, int v if (exp != nullptr && *exp) { -- expression_up expr = parse_expression (exp); -+ expression_up expr; -+ -+ if (strcmp (exp, "errno") == 0) -+ exp = "*((int *(*) (void)) __errno_location) ()"; -+ expr = parse_expression (exp); ++ /* '*((int *(*) (void)) __errno_location) ()' is incompatible with ++ function descriptors. */ ++ if (target_has_execution && strcmp (exp, "errno") == 0) ++ exp = "*(*(int *(*)(void)) __errno_location) ()"; + expression_up expr = parse_expression (exp); val = evaluate_expression (expr.get ()); } - else +Index: gdb/gdb/testsuite/gdb.dwarf2/dw2-errno.c +=================================================================== --- /dev/null -+++ b/gdb/testsuite/gdb.dwarf2/dw2-errno.c ++++ gdb/gdb/testsuite/gdb.dwarf2/dw2-errno.c @@ -0,0 +1,28 @@ +/* This testcase is part of GDB, the GNU debugger. + @@ -81,8 +101,10 @@ + + return 0; /* breakpoint */ +} +Index: gdb/gdb/testsuite/gdb.dwarf2/dw2-errno.exp +=================================================================== --- /dev/null -+++ b/gdb/testsuite/gdb.dwarf2/dw2-errno.exp ++++ gdb/gdb/testsuite/gdb.dwarf2/dw2-errno.exp @@ -0,0 +1,60 @@ +# Copyright 2007 Free Software Foundation, Inc. + @@ -101,7 +123,7 @@ + +set testfile dw2-errno +set srcfile ${testfile}.c -+set binfile ${objdir}/${subdir}/${testfile} ++set binfile [standard_output_file ${testfile}] + +proc prep {} { + global srcdir subdir binfile @@ -144,3 +166,112 @@ + +# TODO: Test the error on resolving ERRNO with only libc loaded. +# Just how to find the current libc filename? +Index: gdb/gdb/testsuite/gdb.dwarf2/dw2-errno2.c +=================================================================== +--- /dev/null ++++ gdb/gdb/testsuite/gdb.dwarf2/dw2-errno2.c +@@ -0,0 +1,28 @@ ++/* This testcase is part of GDB, the GNU debugger. ++ ++ Copyright 2005, 2007 Free Software Foundation, Inc. ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 3 of the License, or ++ (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program. If not, see . ++ ++ Please email any bugs, comments, and/or additions to this file to: ++ bug-gdb@prep.ai.mit.edu */ ++ ++#include ++ ++int main() ++{ ++ errno = 42; ++ ++ return 0; /* breakpoint */ ++} +Index: gdb/gdb/testsuite/gdb.dwarf2/dw2-errno2.exp +=================================================================== +--- /dev/null ++++ gdb/gdb/testsuite/gdb.dwarf2/dw2-errno2.exp +@@ -0,0 +1,71 @@ ++# Copyright 2007 Free Software Foundation, Inc. ++ ++# This program is free software; you can redistribute it and/or modify ++# it under the terms of the GNU General Public License as published by ++# the Free Software Foundation; either version 3 of the License, or ++# (at your option) any later version. ++# ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++# GNU General Public License for more details. ++# ++# You should have received a copy of the GNU General Public License ++# along with this program. If not, see . ++ ++set testfile dw2-errno2 ++set srcfile ${testfile}.c ++set binfile [standard_output_file ${testfile}] ++ ++proc prep { message {do_xfail 0} } { with_test_prefix $message { ++ global srcdir subdir binfile variant ++ gdb_exit ++ gdb_start ++ gdb_reinitialize_dir $srcdir/$subdir ++ gdb_load ${binfile}${variant} ++ ++ runto_main ++ ++ gdb_breakpoint [gdb_get_line_number "breakpoint"] ++ gdb_continue_to_breakpoint "breakpoint" ++ ++ gdb_test "gcore ${binfile}${variant}.core" "\r\nSaved corefile .*" "gcore $variant" ++ ++ gdb_test "print errno" ".* = 42" ++ ++ gdb_test "kill" ".*" "kill" {Kill the program being debugged\? \(y or n\) } "y" ++ gdb_test "core-file ${binfile}${variant}.core" "\r\nCore was generated by .*" "core-file" ++ if $do_xfail { ++ setup_xfail "*-*-*" ++ } ++ gdb_test "print errno" ".* = 42" "print errno for core" ++}} ++ ++set variant g2thrN ++if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}${variant}" executable "additional_flags=-g2"] != "" } { ++ untested "Couldn't compile test program" ++ return -1 ++} ++prep "macros=N threads=N" 1 ++ ++set variant g3thrN ++if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}${variant}" executable "additional_flags=-g3"] != "" } { ++ untested "Couldn't compile test program" ++ return -1 ++} ++prep "macros=Y threads=N" 1 ++ ++set variant g2thrY ++if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}${variant}" executable "additional_flags=-g2"] != "" } { ++ return -1 ++} ++prep "macros=N threads=Y" ++ ++set variant g3thrY ++if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}${variant}" executable "additional_flags=-g3"] != "" } { ++ return -1 ++} ++prep "macros=Y threads=Y" 1 ++ ++# TODO: Test the error on resolving ERRNO with only libc loaded. ++# Just how to find the current libc filename? diff -Nru gdb-9.1/debian/patches/gdb_bsd-kvm.c.diff gdb-10.2/debian/patches/gdb_bsd-kvm.c.diff --- gdb-9.1/debian/patches/gdb_bsd-kvm.c.diff 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/debian/patches/gdb_bsd-kvm.c.diff 2020-09-19 19:55:03.000000000 +0000 @@ -0,0 +1,31 @@ +Index: gdb/gdb/bsd-kvm.c +=================================================================== +--- gdb.orig/gdb/bsd-kvm.c 2019-02-22 11:36:33.514594292 +0100 ++++ gdb/gdb/bsd-kvm.c 2019-02-22 11:36:33.514594292 +0100 +@@ -238,7 +238,7 @@ + /* On dumping core, BSD kernels store the faulting context (PCB) + in the variable "dumppcb". */ + memset (nl, 0, sizeof nl); +- nl[0].n_name = "_dumppcb"; ++ nl[0].n_un.n_name = (char *)"_dumppcb"; + + if (kvm_nlist (core_kd, nl) == -1) + error (("%s"), kvm_geterr (core_kd)); +@@ -256,7 +256,7 @@ + "proc0paddr". */ + + memset (nl, 0, sizeof nl); +- nl[0].n_name = "_proc0paddr"; ++ nl[0].n_un.n_name = (char *)"_proc0paddr"; + + if (kvm_nlist (core_kd, nl) == -1) + error (("%s"), kvm_geterr (core_kd)); +@@ -280,7 +280,7 @@ + variable "thread0". */ + + memset (nl, 0, sizeof nl); +- nl[0].n_name = "_thread0"; ++ nl[0].n_un.n_name = (char *)"_thread0"; + + if (kvm_nlist (core_kd, nl) == -1) + error (("%s"), kvm_geterr (core_kd)); diff -Nru gdb-9.1/debian/patches/gdb_configure.nat.patch gdb-10.2/debian/patches/gdb_configure.nat.patch --- gdb-9.1/debian/patches/gdb_configure.nat.patch 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/debian/patches/gdb_configure.nat.patch 2020-09-19 19:55:03.000000000 +0000 @@ -0,0 +1,22 @@ +From: =?utf-8?b?SMOpY3RvciBPcsOzbiBNYXJ0w61uZXo=?= +Date: Wed, 20 Feb 2019 13:25:36 +0100 +Subject: gdb_configure.nat + +=================================================================== +--- + gdb/configure.nat | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Index: gdb/gdb/configure.nat +=================================================================== +--- gdb.orig/gdb/configure.nat 2019-02-22 11:22:25.383811537 +0100 ++++ gdb/gdb/configure.nat 2019-02-22 11:23:41.284731325 +0100 +@@ -214,7 +214,7 @@ + i386) + # Host: Intel 386 running the GNU Hurd + NATDEPFILES='i386-gnu-nat.o gnu-nat.o \ +- x86-nat.o nat/x86-dregs.o fork-child.o \ ++ x86-nat.o nat/x86-dregs.o fork-child.o fork-inferior.o \ + nat/fork-inferior.o \ + notify_S.o process_reply_S.o msg_reply_S.o \ + msg_U.o exc_request_U.o exc_request_S.o' diff -Nru gdb-9.1/debian/patches/gdb-fortran-main.patch gdb-10.2/debian/patches/gdb-fortran-main.patch --- gdb-9.1/debian/patches/gdb-fortran-main.patch 2019-08-28 18:17:59.000000000 +0000 +++ gdb-10.2/debian/patches/gdb-fortran-main.patch 2020-09-19 19:55:31.000000000 +0000 @@ -1,3 +1,7 @@ +From: =?utf-8?b?SMOpY3RvciBPcsOzbiBNYXJ0w61uZXo=?= +Date: Wed, 20 Feb 2019 13:25:36 +0100 +Subject: gdb-fortran-main + Daniel, Although the proper way of adding case insensitivity to symbol lookup is @@ -15,21 +19,22 @@ P.S: if there is a symbol named "MAIN__" in sources of other languages, it might disturb the debugging. But I am not sure how much it is. --- - gdb/symtab.c | 8 ++++++-- + gdb/symtab.c | 9 +++++++-- gdb/testsuite/gdb.fortran/lang.exp | 40 ++++++++++++++++++++++++++++++++++++++ - 2 files changed, 46 insertions(+), 2 deletions(-) + 2 files changed, 47 insertions(+), 2 deletions(-) create mode 100644 gdb/testsuite/gdb.fortran/lang.exp ---- a/gdb/symtab.c -+++ b/gdb/symtab.c -@@ -6015,8 +6015,13 @@ find_main_name (void) +Index: gdb/gdb/symtab.c +=================================================================== +--- gdb.orig/gdb/symtab.c ++++ gdb/gdb/symtab.c +@@ -6156,7 +6156,13 @@ find_main_name (void) + return; } - /* The languages above didn't identify the name of the main procedure. -- Fallback to "main". */ - set_main_name ("main", language_unknown); -+ Fallback to "MAIN__" (g77 and gfortran) if we can find it in the -+ minimal symtab, to "main" otherwise. */ ++/* Fallback to "MAIN__" (g77 and gfortran) if we can find it in the ++ * minimal symtab, to "main" otherwise. */ + struct bound_minimal_symbol msym = lookup_minimal_symbol ("MAIN__", NULL, NULL); + if (msym.minsym) + set_main_name ("MAIN__", language_fortran); @@ -38,8 +43,10 @@ } /* See symtab.h. */ +Index: gdb/gdb/testsuite/gdb.fortran/lang.exp +=================================================================== --- /dev/null -+++ b/gdb/testsuite/gdb.fortran/lang.exp ++++ gdb/gdb/testsuite/gdb.fortran/lang.exp @@ -0,0 +1,40 @@ +# Copyright 2005 Free Software Foundation, Inc. + diff -Nru gdb-9.1/debian/patches/gdb-glibc-vdso-workaround.patch gdb-10.2/debian/patches/gdb-glibc-vdso-workaround.patch --- gdb-9.1/debian/patches/gdb-glibc-vdso-workaround.patch 2019-08-28 18:18:46.000000000 +0000 +++ gdb-10.2/debian/patches/gdb-glibc-vdso-workaround.patch 2020-09-19 19:55:31.000000000 +0000 @@ -1,4 +1,5 @@ -http://sourceware.org/ml/gdb-patches/2011-08/msg00331.html +From: =?utf-8?b?SMOpY3RvciBPcsOzbiBNYXJ0w61uZXo=?= +Date: Wed, 20 Feb 2019 13:25:36 +0100 Subject: [RFC] Work around PR libc/13097 "linux-vdso.so.1" #2 Hi, @@ -10,10 +11,15 @@ Work around PR libc/13097. * solib.c (update_solib_list): Ignore "linux-vdso.so.1". +--- + gdb/solib.c | 7 +++++-- + 1 file changed, 5 insertions(+), 2 deletions(-) ---- a/gdb/solib.c -+++ b/gdb/solib.c -@@ -868,8 +868,11 @@ update_solib_list (int from_tty) +Index: gdb/gdb/solib.c +=================================================================== +--- gdb.orig/gdb/solib.c ++++ gdb/gdb/solib.c +@@ -859,8 +859,11 @@ update_solib_list (int from_tty) try { diff -Nru gdb-9.1/debian/patches/infinity-notes.diff gdb-10.2/debian/patches/infinity-notes.diff --- gdb-9.1/debian/patches/infinity-notes.diff 2018-01-06 14:08:13.000000000 +0000 +++ gdb-10.2/debian/patches/infinity-notes.diff 1970-01-01 00:00:00.000000000 +0000 @@ -1,327 +0,0 @@ -# git clone https://gitlab.com/gbenson/binutils-gdb.git gdb/src -# git diff 1f1c02597cc199227226251a2ea51fe5f44b4d6d ec7642f5d7ba9bdbc35f08f3ffa3c360bd4618d0 - -gdb/ - -2017-06-06 Gary Benson - - * proc-service.c (ps_get_register): New function. - (ps_foreach_infinity_note): Likewise. - (ps_infinity_relocate_addr): New static function. - * proc-service.list: Add ps_get_register and - ps_foreach_infinity_note. - -2017-06-06 Gary Benson - - * gdb_proc_service.h (ps_infinity_reloc_f): New typedef. - (ps_visit_infinity_note_f): Likewise. - (ps_get_register): New declaration. - (ps_foreach_infinity_note): Likewise. - -2017-06-06 Gary Benson - - * amd64-tdep.c (amd64_dwarf_regmap): Add AMD64_FSBASE_REGNUM - and AMD64_GSBASE_REGNUM. - -bfd/ - -2017-06-06 Gary Benson - - * elf-bfd.h (struct elf_infinity_note): New structure. - (struct elf_obj_tdata): Add new field infinity_note_head. - * elf.c (elfobj_grok_gnu_infinity): New function. - (elfobj_grok_gnu_note): Call the above. - -include/ - -2017-06-06 Gary Benson - - * elf/common.h: Add NT_GNU_INFINITY. - -Index: b/bfd/elf-bfd.h -=================================================================== ---- a/bfd/elf-bfd.h -+++ b/bfd/elf-bfd.h -@@ -1744,6 +1744,15 @@ struct sdt_note - bfd_byte data[1]; - }; - -+/* An Infinity note. */ -+struct elf_infinity_note -+{ -+ struct elf_infinity_note *next; -+ bfd_vma fileoffset; -+ size_t size; -+ bfd_byte data[0]; -+}; -+ - /* tdata information grabbed from an elf core file. */ - struct core_elf_obj_tdata - { -@@ -1906,6 +1915,11 @@ struct elf_obj_tdata - in the list. */ - struct sdt_note *sdt_note_head; - -+ /* Linked list containing information about every Infinity note -+ found in the object file. Each note corresponds to one entry -+ in the list. */ -+ struct elf_infinity_note *infinity_note_head; -+ - Elf_Internal_Shdr **group_sect_ptr; - int num_group; - -Index: b/bfd/elf.c -=================================================================== ---- a/bfd/elf.c -+++ b/bfd/elf.c -@@ -9814,6 +9814,26 @@ elfobj_grok_gnu_build_id (bfd *abfd, Elf - } - - static bfd_boolean -+elfobj_grok_gnu_infinity (bfd *abfd, Elf_Internal_Note *note) -+{ -+ struct elf_infinity_note *cur; -+ -+ if (note->descsz == 0) -+ return FALSE; -+ -+ cur = bfd_alloc (abfd, sizeof (struct elf_infinity_note) + note->descsz); -+ -+ cur->next = elf_tdata (abfd)->infinity_note_head; -+ cur->fileoffset = note->descpos; -+ cur->size = note->descsz; -+ memcpy (cur->data, note->descdata, note->descsz); -+ -+ elf_tdata (abfd)->infinity_note_head = cur; -+ -+ return TRUE; -+} -+ -+static bfd_boolean - elfobj_grok_gnu_note (bfd *abfd, Elf_Internal_Note *note) - { - switch (note->type) -@@ -9826,6 +9846,9 @@ elfobj_grok_gnu_note (bfd *abfd, Elf_Int - - case NT_GNU_BUILD_ID: - return elfobj_grok_gnu_build_id (abfd, note); -+ -+ case NT_GNU_INFINITY: -+ return elfobj_grok_gnu_infinity (abfd, note); - } - } - -Index: b/gdb/amd64-tdep.c -=================================================================== ---- a/gdb/amd64-tdep.c -+++ b/gdb/amd64-tdep.c -@@ -220,8 +220,8 @@ static int amd64_dwarf_regmap[] = - -1, - - /* Segment Base Address Registers. */ -- -1, -- -1, -+ AMD64_FSBASE_REGNUM, -+ AMD64_GSBASE_REGNUM, - -1, - -1, - -Index: b/gdb/gdb_proc_service.h -=================================================================== ---- a/gdb/gdb_proc_service.h -+++ b/gdb/gdb_proc_service.h -@@ -175,6 +175,52 @@ typedef gdb_fpregset_t gdb_prfpregset_t; - typedef prfpregset_t gdb_prfpregset_t; - #endif - -+/* XXX need to check for ps_get_register and ps_foreach_infinity_note -+ in ./configure if HAVE_PROC_SERVICE_H and only define them here if -+ we don't already have them. */ -+ -+EXTERN_C_PUSH -+ -+/* Get the contents of a single register. */ -+extern ps_err_e ps_get_register (struct ps_prochandle *ph, -+ lwpid_t lwpid, int dwarf_regnum, -+ psaddr_t *result); -+ -+/* Callback to relocate addresses in Infinity notes. */ -+typedef ps_err_e ps_infinity_reloc_f (void *rf_arg, -+ psaddr_t unrelocated, -+ psaddr_t *result); -+ -+/* Callback for iteration over Infinity notes. Should return PS_OK to -+ indicate success, or any other value to indicate failure. CB_ARG -+ is whatever was passed as CB_ARG to ps_foreach_infinity_note. BUF -+ is is a pointer to a buffer of BUFSIZ bytes containing the encoded -+ note. SRCNAME is an identifier used to construct error messages, -+ typically a filename, and may be NULL if unset. SRCOFFSET is the -+ offset into SRCNAME of the start of BUF, and may be -1 if unset. -+ RF is a function that should be used to relocate addresses in this -+ notes, and RF_ARG is an argument that should be passed as to RF. */ -+typedef ps_err_e ps_visit_infinity_note_f (void *cb_arg, -+ const char *buf, -+ size_t bufsiz, -+ const char *srcname, -+ ssize_t srcoffset, -+ ps_infinity_reloc_f *rf, -+ void *rf_arg); -+ -+/* Call the callback CB for each Infinity note in the process. The -+ callback should return PS_OK to indicate that iteration should -+ continue, or any other value to indicate that iteration should stop -+ and that ps_foreach_infinity_note should return the non-PS_OK value -+ that the callback returned. Return PS_OK if the callback returned -+ PS_OK for all Infinity notes, or if there are no Infinity notes in -+ the process. */ -+extern ps_err_e ps_foreach_infinity_note (struct ps_prochandle *ph, -+ ps_visit_infinity_note_f *cb, -+ void *cb_arg); -+ -+EXTERN_C_POP -+ - /* GDB specific structure that identifies the target process. */ - struct ps_prochandle - { -Index: b/gdb/proc-service.c -=================================================================== ---- a/gdb/proc-service.c -+++ b/gdb/proc-service.c -@@ -25,6 +25,7 @@ - #include "target.h" - #include "regcache.h" - #include "objfiles.h" -+#include "elf-bfd.h" - - #include "gdb_proc_service.h" - -@@ -190,6 +191,31 @@ ps_lsetfpregs (struct ps_prochandle *ph, - return PS_OK; - } - -+/* See gdb_proc_service.h. */ -+ -+ps_err_e -+ps_get_register (struct ps_prochandle *ph, lwpid_t lwpid, -+ int dwarf_reg, psaddr_t *result) -+{ -+ struct gdbarch *gdbarch = target_gdbarch (); -+ ptid_t lwp_ptid; -+ struct regcache *regcache; -+ int reg;enum register_status status; -+ -+ reg = gdbarch_dwarf2_reg_to_regnum (gdbarch, dwarf_reg); -+ if (reg == -1) -+ { -+ warning (_("Bad DWARF register number %d"), dwarf_reg); -+ return PS_ERR; -+ } -+ -+ lwp_ptid = ptid_build (ptid_get_pid (ph->ptid), lwpid, 0); -+ regcache = get_thread_arch_regcache (lwp_ptid, gdbarch); -+ status = regcache_raw_read (regcache, reg, (gdb_byte *) result); -+ -+ return status == REG_VALID ? PS_OK : PS_ERR; -+} -+ - /* Return overall process id of the target PH. Special for GNU/Linux - -- not used on Solaris. */ - -@@ -199,6 +225,74 @@ ps_getpid (struct ps_prochandle *ph) - return ptid_get_pid (ph->ptid); - } - -+/* Callback for ps_foreach_infinity_note to relocate addresses in -+ Infinity notes. */ -+ -+static ps_err_e -+ps_infinity_relocate_addr (void *objfile_p, psaddr_t unrelocated_p, -+ psaddr_t *result_p) -+{ -+ struct objfile *objfile = (struct objfile *) objfile_p; -+ CORE_ADDR unrelocated = ps_addr_to_core_addr (unrelocated_p); -+ struct obj_section *osect; -+ -+ ALL_OBJFILE_OSECTIONS (objfile, osect) -+ { -+ struct bfd_section *sect = osect->the_bfd_section; -+ bfd_vma section_vma = bfd_get_section_vma (objfile->obfd, sect); -+ -+ if (unrelocated < section_vma -+ || unrelocated >= (section_vma + bfd_get_section_size (sect))) -+ continue; -+ -+ *result_p = core_addr_to_ps_addr (unrelocated - section_vma -+ + obj_section_addr (osect)); -+ -+ return PS_OK; -+ } -+ -+ return PS_ERR; -+} -+ -+/* See gdb_proc_service.h. */ -+ -+ps_err_e -+ps_foreach_infinity_note (struct ps_prochandle *ph, -+ ps_visit_infinity_note_f *callback, -+ void *cb_arg) -+{ -+ struct cleanup *old_chain = save_current_program_space (); -+ struct inferior *inf = find_inferior_ptid (ph->ptid); -+ struct objfile *objfile; -+ ps_err_e result = PS_OK; -+ -+ set_current_program_space (inf->pspace); -+ -+ ALL_OBJFILES (objfile) -+ { -+ struct elf_infinity_note *note; -+ -+ if (objfile->obfd == NULL -+ || bfd_get_flavour (objfile->obfd) != bfd_target_elf_flavour) -+ continue; -+ -+ for (note = elf_tdata (objfile->obfd)->infinity_note_head; -+ note != NULL; note = note->next) -+ { -+ result = callback (cb_arg, -+ (const char *) note->data, note->size, -+ objfile_name (objfile), note->fileoffset, -+ ps_infinity_relocate_addr, objfile); -+ -+ if (result != PS_OK) -+ break; -+ } -+ } -+ -+ do_cleanups (old_chain); -+ return result; -+} -+ - void - _initialize_proc_service (void) - { -Index: b/gdb/proc-service.list -=================================================================== ---- a/gdb/proc-service.list -+++ b/gdb/proc-service.list -@@ -37,4 +37,6 @@ - ps_pstop; - ps_ptread; - ps_ptwrite; -+ ps_foreach_infinity_note; -+ ps_get_register; - }; -Index: b/include/elf/common.h -=================================================================== ---- a/include/elf/common.h -+++ b/include/elf/common.h -@@ -704,6 +704,7 @@ - #define NT_GNU_BUILD_ID 3 /* Generated by ld --build-id. */ - #define NT_GNU_GOLD_VERSION 4 /* Generated by gold. */ - #define NT_GNU_PROPERTY_TYPE_0 5 /* Generated by gcc. */ -+#define NT_GNU_INFINITY 8995 /* Generated by i8c. */ - - #define NT_GNU_BUILD_ATTRIBUTE_OPEN 0x100 - #define NT_GNU_BUILD_ATTRIBUTE_FUNC 0x101 diff -Nru gdb-9.1/debian/patches/linuxthreads_signal_handling.patch gdb-10.2/debian/patches/linuxthreads_signal_handling.patch --- gdb-9.1/debian/patches/linuxthreads_signal_handling.patch 2016-08-24 12:59:37.000000000 +0000 +++ gdb-10.2/debian/patches/linuxthreads_signal_handling.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,45 +0,0 @@ -Description: Temporary support for LinuxThreads signal handling on GNU/kFreeBSD - -Author: Robert Millan -Bug-Debian: http://bugs.debian.org/550361 -Bug-Debian: http://bugs.debian.org/669043 -Bug-Debian: http://bugs.debian.org/698200 -Origin: vendor, http://bugs.debian.org/669043 - -Index: b/gdb/common/signals.c -=================================================================== ---- a/gdb/common/signals.c -+++ b/gdb/common/signals.c -@@ -336,6 +336,15 @@ gdb_signal_from_host (int hostsig) - return GDB_SIGNAL_LIBRT; - #endif - -+#if defined(__GLIBC__) && defined(__FreeBSD_kernel__) -+ if (hostsig == 32) -+ return TARGET_SIGNAL_LINUXTHREADS_RESTART; -+ if (hostsig == 33) -+ return TARGET_SIGNAL_LINUXTHREADS_CANCEL; -+ if (hostsig == 34) -+ return TARGET_SIGNAL_LINUXTHREADS_DEBUG; -+#endif -+ - #if defined (REALTIME_LO) - if (hostsig >= REALTIME_LO && hostsig < REALTIME_HI) - { -Index: b/include/gdb/signals.def -=================================================================== ---- a/include/gdb/signals.def -+++ b/include/gdb/signals.def -@@ -196,7 +196,11 @@ SET (GDB_EXC_BREAKPOINT, 150, "EXC_BREAK - - SET (GDB_SIGNAL_LIBRT, 151, "SIGLIBRT", "librt internal signal") - -+SET (TARGET_SIGNAL_LINUXTHREADS_RESTART, 152, "32", "LinuxThreads restart signal") -+SET (TARGET_SIGNAL_LINUXTHREADS_CANCEL, 153, "33", "LinuxThreads cancel signal") -+SET (TARGET_SIGNAL_LINUXTHREADS_DEBUG, 154, "34", "LinuxThreads debug signal") -+ - /* If you are adding a new signal, add it just above this comment. */ - - /* Last and unused enum value, for sizing arrays, etc. */ --SET (GDB_SIGNAL_LAST, 152, NULL, "GDB_SIGNAL_LAST") -+SET (GDB_SIGNAL_LAST, 155, NULL, "GDB_SIGNAL_LAST") diff -Nru gdb-9.1/debian/patches/load-versioned-libcc1.patch gdb-10.2/debian/patches/load-versioned-libcc1.patch --- gdb-9.1/debian/patches/load-versioned-libcc1.patch 2018-01-06 14:04:44.000000000 +0000 +++ gdb-10.2/debian/patches/load-versioned-libcc1.patch 2020-09-19 19:55:03.000000000 +0000 @@ -1,20 +1,19 @@ +From: Hector Oron +Date: Wed, 20 Feb 2019 13:25:36 +0100 +Subject: load-versioned-libcc1 + * d/p/load-versioned-libcc1.patch: - load libcc1.so.0 instead unversioned file. -Author: Hector Oron +Author: Hector Oron --- -The information above should follow the Patch Tagging Guidelines, please -checkout http://dep.debian.net/deps/dep3/ to learn about the format. Here -are templates for supplementary fields that you might want to add: + include/gcc-c-interface.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) -Origin: Debian -Forwarded: not-needed -Last-Update: <2015-03-23> - -Index: b/include/gcc-c-interface.h +Index: gdb/include/gcc-c-interface.h =================================================================== ---- a/include/gcc-c-interface.h -+++ b/include/gcc-c-interface.h +--- gdb.orig/include/gcc-c-interface.h ++++ gdb/include/gcc-c-interface.h @@ -188,7 +188,7 @@ struct gcc_c_context /* The name of the .so that the compiler builds. We dlopen this later. */ @@ -24,3 +23,16 @@ /* The compiler exports a single initialization function. This macro holds its name as a symbol. */ +Index: gdb/include/gcc-cp-interface.h +=================================================================== +--- gdb.orig/include/gcc-cp-interface.h ++++ gdb/include/gcc-cp-interface.h +@@ -473,7 +473,7 @@ struct gcc_cp_context + /* The name of the .so that the compiler builds. We dlopen this + later. */ + +-#define GCC_CP_FE_LIBCC libcc1.so ++#define GCC_CP_FE_LIBCC libcc1.so.0 + + /* The compiler exports a single initialization function. This macro + holds its name as a symbol. */ diff -Nru gdb-9.1/debian/patches/python3.8.diff gdb-10.2/debian/patches/python3.8.diff --- gdb-9.1/debian/patches/python3.8.diff 2020-01-25 05:39:14.000000000 +0000 +++ gdb-10.2/debian/patches/python3.8.diff 1970-01-01 00:00:00.000000000 +0000 @@ -1,26 +0,0 @@ -Index: b/gdb/configure.ac -=================================================================== ---- a/gdb/configure.ac -+++ b/gdb/configure.ac -@@ -833,7 +833,7 @@ else - AC_ERROR(failure running ${python_config} --includes) - fi - fi -- python_libs=`${python_config} --ldflags` -+ python_libs=`${python_config} --ldflags --embed` - if test $? != 0; then - have_python_config=failed - if test "${with_python}" != auto; then -Index: b/gdb/configure -=================================================================== ---- a/gdb/configure -+++ b/gdb/configure -@@ -10587,7 +10587,7 @@ fi - as_fn_error $? "failure running ${python_config} --includes" "$LINENO" 5 - fi - fi -- python_libs=`${python_config} --ldflags` -+ python_libs=`${python_config} --ldflags --embed` - if test $? != 0; then - have_python_config=failed - if test "${with_python}" != auto; then diff -Nru gdb-9.1/debian/patches/python-config.patch gdb-10.2/debian/patches/python-config.patch --- gdb-9.1/debian/patches/python-config.patch 2018-09-04 14:44:22.000000000 +0000 +++ gdb-10.2/debian/patches/python-config.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,295 +0,0 @@ -Description: Use system python-config if available -Author: Matthias Klose -Forwarded: https://sourceware.org/ml/gdb-patches/2012-12/msg00751.html - ---- - gdb/configure | 106 +++++++++++++++++++++++++++++++++++++++++++++++++++---- - gdb/configure.ac | 14 ++++---- - 2 files changed, 108 insertions(+), 12 deletions(-) - -Index: b/gdb/configure -=================================================================== ---- a/gdb/configure -+++ b/gdb/configure -@@ -713,6 +713,7 @@ HAVE_PYTHON_TRUE - PYTHON_LIBS - PYTHON_CPPFLAGS - PYTHON_CFLAGS -+python_config - python_prog_path - LTLIBMPFR - LIBMPFR -@@ -823,6 +824,7 @@ infodir - docdir - oldincludedir - includedir -+runstatedir - localstatedir - sharedstatedir - sysconfdir -@@ -956,6 +958,7 @@ datadir='${datarootdir}' - sysconfdir='${prefix}/etc' - sharedstatedir='${prefix}/com' - localstatedir='${prefix}/var' -+runstatedir='${localstatedir}/run' - includedir='${prefix}/include' - oldincludedir='/usr/include' - docdir='${datarootdir}/doc/${PACKAGE}' -@@ -1208,6 +1211,15 @@ do - | -silent | --silent | --silen | --sile | --sil) - silent=yes ;; - -+ -runstatedir | --runstatedir | --runstatedi | --runstated \ -+ | --runstate | --runstat | --runsta | --runst | --runs \ -+ | --run | --ru | --r) -+ ac_prev=runstatedir ;; -+ -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ -+ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ -+ | --run=* | --ru=* | --r=*) -+ runstatedir=$ac_optarg ;; -+ - -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) - ac_prev=sbindir ;; - -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ -@@ -1345,7 +1357,7 @@ fi - for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ - datadir sysconfdir sharedstatedir localstatedir includedir \ - oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ -- libdir localedir mandir -+ libdir localedir mandir runstatedir - do - eval ac_val=\$$ac_var - # Remove trailing slashes. -@@ -1498,6 +1510,7 @@ Fine tuning of the installation director - --sysconfdir=DIR read-only single-machine data [PREFIX/etc] - --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] - --localstatedir=DIR modifiable single-machine data [PREFIX/var] -+ --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] - --libdir=DIR object code libraries [EPREFIX/lib] - --includedir=DIR C header files [PREFIX/include] - --oldincludedir=DIR C header files for non-gcc [/usr/include] -@@ -4635,7 +4648,7 @@ else - We can't simply define LARGE_OFF_T to be 9223372036854775807, - since some C++ compilers masquerading as C compilers - incorrectly reject 9223372036854775807. */ --#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) -+#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) - int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 - && LARGE_OFF_T % 2147483647 == 1) - ? 1 : -1]; -@@ -4681,7 +4694,7 @@ else - We can't simply define LARGE_OFF_T to be 9223372036854775807, - since some C++ compilers masquerading as C compilers - incorrectly reject 9223372036854775807. */ --#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) -+#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) - int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 - && LARGE_OFF_T % 2147483647 == 1) - ? 1 : -1]; -@@ -4705,7 +4718,7 @@ rm -f core conftest.err conftest.$ac_obj - We can't simply define LARGE_OFF_T to be 9223372036854775807, - since some C++ compilers masquerading as C compilers - incorrectly reject 9223372036854775807. */ --#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) -+#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) - int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 - && LARGE_OFF_T % 2147483647 == 1) - ? 1 : -1]; -@@ -4750,7 +4763,7 @@ else - We can't simply define LARGE_OFF_T to be 9223372036854775807, - since some C++ compilers masquerading as C compilers - incorrectly reject 9223372036854775807. */ --#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) -+#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) - int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 - && LARGE_OFF_T % 2147483647 == 1) - ? 1 : -1]; -@@ -4774,7 +4787,7 @@ rm -f core conftest.err conftest.$ac_obj - We can't simply define LARGE_OFF_T to be 9223372036854775807, - since some C++ compilers masquerading as C compilers - incorrectly reject 9223372036854775807. */ --#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) -+#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) - int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 - && LARGE_OFF_T % 2147483647 == 1) - ? 1 : -1]; -@@ -10456,29 +10469,122 @@ fi - esac - esac - -+ python_config= - if test "${python_prog}" != missing; then -+ if test -n "$ac_tool_prefix"; then -+ # Extract the first word of "${ac_tool_prefix}${python_prog}-config", so it can be a program name with args. -+set dummy ${ac_tool_prefix}${python_prog}-config; ac_word=$2 -+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -+$as_echo_n "checking for $ac_word... " >&6; } -+if ${ac_cv_prog_python_config+:} false; then : -+ $as_echo_n "(cached) " >&6 -+else -+ if test -n "$python_config"; then -+ ac_cv_prog_python_config="$python_config" # Let the user override the test. -+else -+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -+for as_dir in $PATH -+do -+ IFS=$as_save_IFS -+ test -z "$as_dir" && as_dir=. -+ for ac_exec_ext in '' $ac_executable_extensions; do -+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -+ ac_cv_prog_python_config="${ac_tool_prefix}${python_prog}-config" -+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 -+ break 2 -+ fi -+done -+ done -+IFS=$as_save_IFS -+ -+fi -+fi -+python_config=$ac_cv_prog_python_config -+if test -n "$python_config"; then -+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $python_config" >&5 -+$as_echo "$python_config" >&6; } -+else -+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -+$as_echo "no" >&6; } -+fi -+ -+ -+fi -+if test -z "$ac_cv_prog_python_config"; then -+ ac_ct_python_config=$python_config -+ # Extract the first word of "${python_prog}-config", so it can be a program name with args. -+set dummy ${python_prog}-config; ac_word=$2 -+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -+$as_echo_n "checking for $ac_word... " >&6; } -+if ${ac_cv_prog_ac_ct_python_config+:} false; then : -+ $as_echo_n "(cached) " >&6 -+else -+ if test -n "$ac_ct_python_config"; then -+ ac_cv_prog_ac_ct_python_config="$ac_ct_python_config" # Let the user override the test. -+else -+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -+for as_dir in $PATH -+do -+ IFS=$as_save_IFS -+ test -z "$as_dir" && as_dir=. -+ for ac_exec_ext in '' $ac_executable_extensions; do -+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -+ ac_cv_prog_ac_ct_python_config="${python_prog}-config" -+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 -+ break 2 -+ fi -+done -+ done -+IFS=$as_save_IFS -+ -+fi -+fi -+ac_ct_python_config=$ac_cv_prog_ac_ct_python_config -+if test -n "$ac_ct_python_config"; then -+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_python_config" >&5 -+$as_echo "$ac_ct_python_config" >&6; } -+else -+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -+$as_echo "no" >&6; } -+fi -+ -+ if test "x$ac_ct_python_config" = x; then -+ python_config="${python_prog} ${srcdir}/python/python-config.py" -+ else -+ case $cross_compiling:$ac_tool_warned in -+yes:) -+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -+ac_tool_warned=yes ;; -+esac -+ python_config=$ac_ct_python_config -+ fi -+else -+ python_config="$ac_cv_prog_python_config" -+fi -+ - # We have a python program to use, but it may be too old. - # Don't flag an error for --with-python=auto (the default). - have_python_config=yes -- python_includes=`${python_prog} ${srcdir}/python/python-config.py --includes` -+ python_includes=`${python_config} --includes` - if test $? != 0; then - have_python_config=failed - if test "${with_python}" != auto; then -- as_fn_error $? "failure running python-config --includes" "$LINENO" 5 -+ as_fn_error $? "failure running ${python_config} --includes" "$LINENO" 5 - fi - fi -- python_libs=`${python_prog} ${srcdir}/python/python-config.py --ldflags` -+ python_libs=`${python_config} --ldflags` - if test $? != 0; then - have_python_config=failed - if test "${with_python}" != auto; then -- as_fn_error $? "failure running python-config --ldflags" "$LINENO" 5 -+ as_fn_error $? "failure running ${python_config} --ldflags" "$LINENO" 5 - fi - fi -- python_prefix=`${python_prog} ${srcdir}/python/python-config.py --exec-prefix` -+ python_prefix=`${python_config} --exec-prefix` - if test $? != 0; then - have_python_config=failed - if test "${with_python}" != auto; then -- as_fn_error $? "failure running python-config --exec-prefix" "$LINENO" 5 -+ as_fn_error $? "failure running ${python_config} --exec-prefix" "$LINENO" 5 - fi - fi - else -@@ -13074,6 +13180,8 @@ main () - if (*(data + i) != *(data3 + i)) - return 14; - close (fd); -+ free (data); -+ free (data3); - return 0; - } - _ACEOF -Index: b/gdb/configure.ac -=================================================================== ---- a/gdb/configure.ac -+++ b/gdb/configure.ac -@@ -857,29 +857,31 @@ else - esac - esac - -+ python_config= - if test "${python_prog}" != missing; then -+ AC_CHECK_TOOL(python_config,[${python_prog}-config],[${python_prog} ${srcdir}/python/python-config.py]) - # We have a python program to use, but it may be too old. - # Don't flag an error for --with-python=auto (the default). - have_python_config=yes -- python_includes=`${python_prog} ${srcdir}/python/python-config.py --includes` -+ python_includes=`${python_config} --includes` - if test $? != 0; then - have_python_config=failed - if test "${with_python}" != auto; then -- AC_ERROR(failure running python-config --includes) -+ AC_ERROR(failure running ${python_config} --includes) - fi - fi -- python_libs=`${python_prog} ${srcdir}/python/python-config.py --ldflags` -+ python_libs=`${python_config} --ldflags` - if test $? != 0; then - have_python_config=failed - if test "${with_python}" != auto; then -- AC_ERROR(failure running python-config --ldflags) -+ AC_ERROR(failure running ${python_config} --ldflags) - fi - fi -- python_prefix=`${python_prog} ${srcdir}/python/python-config.py --exec-prefix` -+ python_prefix=`${python_config} --exec-prefix` - if test $? != 0; then - have_python_config=failed - if test "${with_python}" != auto; then -- AC_ERROR(failure running python-config --exec-prefix) -+ AC_ERROR(failure running ${python_config} --exec-prefix) - fi - fi - else diff -Nru gdb-9.1/debian/patches/renesas-sh-native-support.patch gdb-10.2/debian/patches/renesas-sh-native-support.patch --- gdb-9.1/debian/patches/renesas-sh-native-support.patch 2014-11-09 15:22:58.000000000 +0000 +++ gdb-10.2/debian/patches/renesas-sh-native-support.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,1353 +0,0 @@ -Description: Add Renesas SH (sh4) support - Add support for Renesas SH (sh4) architecture. - . - gdb (7.4-1~cvs20111117.2) experimental; urgency=low - . - * Add Renesas SH (sh4) support (Closes: #576242) - - Thanks Nobuhiro Iwamatsu, Takashi Yoshii. -Author: Hector Oron -Bug-Debian: http://bugs.debian.org/576242 - ---- -The information above should follow the Patch Tagging Guidelines, please -checkout http://dep.debian.net/deps/dep3/ to learn about the format. Here -are templates for supplementary fields that you might want to add: - -Forwarded: -Last-Update: <2011-11-17> - ---- gdb-7.4.orig/gdb/configure.host -+++ gdb-7.4/gdb/configure.host -@@ -139,6 +139,7 @@ powerpc64-*-linux*) gdb_host=ppc64-l - - s390*-*-*) gdb_host=s390 ;; - -+sh*-*-linux*) gdb_host=linux ;; - sh*-*-netbsdelf* | sh*-*-knetbsd*-gnu) - gdb_host=nbsd ;; - sh*-*-openbsd*) gdb_host=nbsd ;; ---- gdb-7.4.orig/gdb/Makefile.in -+++ gdb-7.4/gdb/Makefile.in -@@ -1538,6 +1538,7 @@ ALLDEPFILES = \ - score-tdep.c \ - ser-go32.c ser-pipe.c ser-tcp.c ser-mingw.c \ - sh-tdep.c sh64-tdep.c shnbsd-tdep.c shnbsd-nat.c \ -+ sh-linux-tdep.c sh-linux-nat.c \ - sol2-tdep.c \ - solib-irix.c solib-svr4.c solib-sunos.c \ - sparc-linux-nat.c sparc-linux-tdep.c \ ---- gdb-7.4.orig/gdb/sh-linux-tdep.c -+++ gdb-7.4/gdb/sh-linux-tdep.c -@@ -19,11 +19,34 @@ - along with this program. If not, see . */ - - #include "defs.h" -+#include "gdbcore.h" -+#include "frame.h" -+#include "frame-base.h" -+#include "frame-unwind.h" -+#include "dwarf2-frame.h" -+#include "value.h" -+#include "regcache.h" -+#include "inferior.h" - #include "osabi.h" - -+#include "reggroups.h" -+#include "arch-utils.h" -+#include "floatformat.h" - #include "solib-svr4.h" - #include "symtab.h" -+#include "gdb_string.h" -+#include "command.h" -+#include "gdb_assert.h" - -+#include -+#include -+#include -+#include -+#include -+ -+#include -+ -+#include "regset.h" - #include "glibc-tdep.h" - #include "sh-tdep.h" - #include "linux-tdep.h" -@@ -71,9 +94,505 @@ static const struct sh_corefile_regmap f - {-1 /* Terminator. */, 0} - }; - -+/* Recognizing signal handler frames. */ -+ -+/* GNU/Linux has two flavors of signals. Normal signal handlers, and -+ "realtime" (RT) signals. The RT signals can provide additional -+ information to the signal handler if the SA_SIGINFO flag is set -+ when establishing a signal handler using `sigaction'. It is not -+ unlikely that future versions of GNU/Linux will support SA_SIGINFO -+ for normal signals too. */ -+ -+/* When the SH Linux kernel calls a signal handler and the -+ SA_RESTORER flag isn't set, the return address points to a bit of -+ code on the stack. This function returns whether the PC appears to -+ be within this bit of code. -+ -+ The instruction sequence for normal signals is -+ mov.w 1f,r3 -+ trapa #16 -+ or r0, r0 -+ or r0, r0 -+ or r0, r0 -+ or r0, r0 -+ or r0, r0 -+ 1: .word __NR_sigreturn -+ or 0x9305 0xc310 0x200b 0x200b 0x200b 0x200b 0x200b 0x0077. -+ -+ Checking for the code sequence should be somewhat reliable, because -+ the effect is to call the system call sigreturn. This is unlikely -+ to occur anywhere other than a signal trampoline. -+ -+ It kind of sucks that we have to read memory from the process in -+ order to identify a signal trampoline, but there doesn't seem to be -+ any other way. The PC_IN_SIGTRAMP macro in tm-linux.h arranges to -+ only call us if no function name could be identified, which should -+ be the case since the code is on the stack. -+ -+ Detection of signal trampolines for handlers that set the -+ SA_RESTORER flag is in general not possible. Unfortunately this is -+ what the GNU C Library has been doing for quite some time now. -+ However, as of version 2.1.2, the GNU C Library uses signal -+ trampolines (named __restore and __restore_rt) that are identical -+ to the ones used by the kernel. Therefore, these trampolines are -+ supported too. */ -+ -+#define MOVW(n) (0x9300|((n)-2)) /* Move mem word at PC+n to R3 */ -+#define TRAP16 0xc310 /* Syscall w/no args (NR in R3) */ -+#define OR_R0_R0 0x200b /* or r0,r0 (insert to avoid hardware bug) */ -+ -+#define LINUX_SIGTRAMP_INSN0 MOVW(7) /* Move mem word at PC+7 to R3 */ -+#define LINUX_SIGTRAMP_INSN1 TRAP16 /* Syscall w/no args (NR in R3) */ -+#define LINUX_SIGTRAMP_INSN2 OR_R0_R0 /* or r0,r0 (insert to avoid hardware bug) */ -+ -+static const unsigned short linux_sigtramp_code[] = -+{ -+ LINUX_SIGTRAMP_INSN0, -+ LINUX_SIGTRAMP_INSN1, -+ LINUX_SIGTRAMP_INSN2, -+ LINUX_SIGTRAMP_INSN2, -+ LINUX_SIGTRAMP_INSN2, -+ LINUX_SIGTRAMP_INSN2, -+ LINUX_SIGTRAMP_INSN2, -+ __NR_sigreturn -+}; -+ -+#define LINUX_SIGTRAMP_LEN (sizeof linux_sigtramp_code) -+ -+/* If PC is in a sigtramp routine, return the address of the start of -+ the routine. Otherwise, return 0. */ -+ -+static CORE_ADDR -+sh_linux_sigtramp_start (struct frame_info *next_frame) -+{ -+ CORE_ADDR pc = get_frame_pc (next_frame); -+ gdb_byte buf[LINUX_SIGTRAMP_LEN]; -+ -+ /* We only recognize a signal trampoline if PC is at the start of -+ one of the three instructions. We optimize for finding the PC at -+ the start, as will be the case when the trampoline is not the -+ first frame on the stack. We assume that in the case where the -+ PC is not at the start of the instruction sequence, there will be -+ a few trailing readable bytes on the stack. */ -+ -+ if (!safe_frame_unwind_memory (next_frame, pc, buf, LINUX_SIGTRAMP_LEN)) -+ return 0; -+ -+ if (buf[0] != LINUX_SIGTRAMP_INSN0) -+ { -+ if (buf[0] != LINUX_SIGTRAMP_INSN1) -+ return 0; -+ -+ pc -= 2; -+ -+ if (!safe_frame_unwind_memory (next_frame, pc, buf, LINUX_SIGTRAMP_LEN)) -+ return 0; -+ } -+ -+ if (memcmp (buf, linux_sigtramp_code, LINUX_SIGTRAMP_LEN) != 0) -+ return 0; -+ -+ return pc; -+} -+ -+/* This function does the same for RT signals. Here the instruction -+ sequence is -+ mov.w 1f,r3 -+ trapa #16 -+ or r0, r0 -+ or r0, r0 -+ or r0, r0 -+ or r0, r0 -+ or r0, r0 -+ 1: .word __NR_rt_sigreturn -+ or 0x9305 0xc310 0x200b 0x200b 0x200b 0x200b 0x200b 0x00ad. -+ -+ The effect is to call the system call rt_sigreturn. */ -+ -+#define LINUX_RT_SIGTRAMP_INSN0 MOVW(7) /* Move mem word at PC+7 to R3 */ -+#define LINUX_RT_SIGTRAMP_INSN1 TRAP16 /* Syscall w/no args (NR in R3) */ -+#define LINUX_RT_SIGTRAMP_INSN2 OR_R0_R0 /* or r0,r0 (insert to avoid hardware bug) */ -+ -+static const unsigned short linux_rt_sigtramp_code[] = -+{ -+ LINUX_RT_SIGTRAMP_INSN0, -+ LINUX_RT_SIGTRAMP_INSN1, -+ LINUX_RT_SIGTRAMP_INSN2, -+ LINUX_RT_SIGTRAMP_INSN2, -+ LINUX_RT_SIGTRAMP_INSN2, -+ LINUX_RT_SIGTRAMP_INSN2, -+ LINUX_RT_SIGTRAMP_INSN2, -+ __NR_rt_sigreturn -+}; -+ -+#define LINUX_RT_SIGTRAMP_LEN (sizeof linux_rt_sigtramp_code) -+ -+/* If PC is in a RT sigtramp routine, return the address of the start -+ of the routine. Otherwise, return 0. */ -+ -+static CORE_ADDR -+sh_linux_rt_sigtramp_start (struct frame_info *next_frame) -+{ -+ CORE_ADDR pc = get_frame_pc (next_frame); -+ gdb_byte buf[LINUX_RT_SIGTRAMP_LEN]; -+ -+ /* We only recognize a signal trampoline if PC is at the start of -+ one of the two instructions. We optimize for finding the PC at -+ the start, as will be the case when the trampoline is not the -+ first frame on the stack. We assume that in the case where the -+ PC is not at the start of the instruction sequence, there will be -+ a few trailing readable bytes on the stack. */ -+ -+ if (!safe_frame_unwind_memory (next_frame, pc, buf, LINUX_RT_SIGTRAMP_LEN)) -+ return 0; -+ -+ if (buf[0] != LINUX_RT_SIGTRAMP_INSN0) -+ { -+ if (buf[0] != LINUX_RT_SIGTRAMP_INSN1) -+ return 0; -+ -+ pc -= 2; -+ -+ if (!safe_frame_unwind_memory (next_frame, pc, buf, -+ LINUX_RT_SIGTRAMP_LEN)) -+ return 0; -+ } -+ -+ if (memcmp (buf, linux_rt_sigtramp_code, LINUX_RT_SIGTRAMP_LEN) != 0) -+ return 0; -+ -+ return pc; -+} -+ -+/* Return whether PC is in a GNU/Linux sigtramp routine. */ -+ -+static int -+sh_linux_sigtramp_p (struct frame_info *this_frame) -+{ -+ CORE_ADDR pc = get_frame_pc (this_frame); -+ char *name; -+ -+ find_pc_partial_function (pc, &name, NULL, NULL); -+ -+ /* If we have NAME, we can optimize the search. The trampolines are -+ named __restore and __restore_rt. However, they aren't dynamically -+ exported from the shared C library, so the trampoline may appear to -+ be part of the preceding function. This should always be sigaction, -+ __sigaction, or __libc_sigaction (all aliases to the same function). */ -+ if (name == NULL || strstr (name, "sigaction") != NULL) -+ return (sh_linux_sigtramp_start (this_frame) != 0 -+ || sh_linux_rt_sigtramp_start (this_frame) != 0); -+ -+ return (strcmp ("__restore", name) == 0 -+ || strcmp ("__restore_rt", name) == 0); -+} -+ -+/* Offset to struct sigcontext in ucontext, from . */ -+#define SH_LINUX_UCONTEXT_SIGCONTEXT_OFFSET 12 -+ -+ -+/* Assuming NEXT_FRAME is a frame following a GNU/Linux sigtramp -+ routine, return the address of the associated sigcontext structure. */ -+ -+static CORE_ADDR -+sh_linux_sigcontext_addr (struct frame_info *this_frame) -+{ -+ CORE_ADDR pc; -+ CORE_ADDR sp; -+ -+ sp = get_frame_register_unsigned (this_frame, SP_REGNUM); -+ -+ pc = sh_linux_sigtramp_start (this_frame); -+ if (pc) -+ { -+ return sp; -+ } -+ -+ pc = sh_linux_rt_sigtramp_start (this_frame); -+ if (pc) -+ { -+ CORE_ADDR ucontext_addr; -+ -+ /* The sigcontext structure is part of the user context. A -+ pointer to the user context is passed as the third argument -+ to the signal handler. */ -+ ucontext_addr = get_frame_register_unsigned (this_frame, ARG0_REGNUM+2); -+ return ucontext_addr + SH_LINUX_UCONTEXT_SIGCONTEXT_OFFSET; -+ } -+ -+ error ("Couldn't recognize signal trampoline."); -+ return 0; -+} -+ -+/* Signal trampolines. */ -+extern struct sh_frame_cache *sh_alloc_frame_cache (void); -+ -+static struct sh_frame_cache * -+sh_linux_sigtramp_frame_cache (struct frame_info *this_frame, void **this_cache) -+{ -+ struct sh_frame_cache *cache; -+ struct gdbarch_tdep *tdep = gdbarch_tdep (get_current_arch ()); -+ CORE_ADDR sigcontext_addr; -+ -+ if (*this_cache) -+ return *this_cache; -+ -+ cache = sh_alloc_frame_cache (); -+ -+ cache->base = get_frame_register_unsigned (this_frame, SP_REGNUM); -+ sigcontext_addr = tdep->sigcontext_addr (this_frame); -+ if (tdep->sc_reg_offset) -+ { -+ int i; -+ -+ gdb_assert (tdep->sc_num_regs <= SH_NUM_REGS); -+ -+ for (i = 0; i < tdep->sc_num_regs; i++) -+ if (tdep->sc_reg_offset[i] != -1) -+ cache->saved_regs[i] = sigcontext_addr + tdep->sc_reg_offset[i]; -+ } -+ -+ *this_cache = cache; -+ return cache; -+} -+ -+static void -+sh_linux_sigtramp_frame_this_id (struct frame_info *this_frame, void **this_cache, -+ struct frame_id *this_id) -+{ -+ struct sh_frame_cache *cache = -+ sh_linux_sigtramp_frame_cache (this_frame, this_cache); -+ -+ (*this_id) = frame_id_build (cache->base + 64, cache->pc); -+} -+ -+extern struct value * sh_frame_prev_register (); -+static struct value * -+sh_linux_sigtramp_frame_prev_register (struct frame_info *this_frame, -+ void **this_cache, int regnum) -+{ -+ sh_linux_sigtramp_frame_cache (this_frame, this_cache); -+ -+ return sh_frame_prev_register (this_frame, this_cache, regnum); -+} -+ -+static int -+sh_linux_sigtramp_frame_sniffer (const struct frame_unwind *self, -+ struct frame_info *this_frame, -+ void **this_prologue_cache) -+{ -+ struct gdbarch_tdep *tdep = gdbarch_tdep (get_frame_arch (this_frame)); -+ -+ /* We shouldn't even bother if we don't have a sigcontext_addr -+ handler. */ -+ if (tdep->sigcontext_addr == NULL) -+ return 0; -+ -+ if (tdep->sigtramp_p != NULL) -+ { -+ if (tdep->sigtramp_p (this_frame)) -+ return 1; -+ } -+ -+ return 0; -+} -+ -+static const struct frame_unwind sh_linux_sigtramp_frame_unwind = -+{ -+ SIGTRAMP_FRAME, -+ sh_linux_sigtramp_frame_this_id, -+ sh_linux_sigtramp_frame_prev_register, -+ NULL, -+ sh_linux_sigtramp_frame_sniffer -+}; -+ -+/* Supply register REGNUM from the buffer specified by GREGS and LEN -+ in the general-purpose register set REGSET to register cache -+ REGCACHE. If REGNUM is -1, do this for all registers in REGSET. */ -+ -+void -+sh_supply_gregset (const struct regset *regset, struct regcache *regcache, -+ int regnum, const void *gregs, size_t len) -+{ -+ const struct gdbarch_tdep *tdep = gdbarch_tdep (regset->arch); -+ const char *regs = gregs; -+ int i; -+ -+ gdb_assert (len == tdep->sizeof_gregset); -+ -+ for (i = 0; i < tdep->gregset_num_regs; i++) -+ { -+ if ((regnum == i || regnum == -1) -+ && tdep->gregset_reg_offset[i] != -1) -+ regcache_raw_supply (regcache, i, regs + tdep->gregset_reg_offset[i]); -+ } -+} -+ -+/* Collect register REGNUM from the register cache REGCACHE and store -+ it in the buffer specified by GREGS and LEN as described by the -+ general-purpose register set REGSET. If REGNUM is -1, do this for -+ all registers in REGSET. */ -+ -+void -+sh_collect_gregset (const struct regset *regset, -+ const struct regcache *regcache, -+ int regnum, void *gregs, size_t len) -+{ -+ const struct gdbarch_tdep *tdep = gdbarch_tdep (regset->arch); -+ char *regs = gregs; -+ int i; -+ -+ gdb_assert (len == tdep->sizeof_gregset); -+ -+ for (i = 0; i < tdep->gregset_num_regs; i++) -+ { -+ if ((regnum == i || regnum == -1) -+ && tdep->gregset_reg_offset[i] != -1) -+ regcache_raw_collect (regcache, i, regs + tdep->gregset_reg_offset[i]); -+ } -+} -+ -+/* Supply register REGNUM from the buffer specified by FPREGS and LEN -+ in the floating-point register set REGSET to register cache -+ REGCACHE. If REGNUM is -1, do this for all registers in REGSET. */ -+ -+static void -+sh_supply_fpregset (const struct regset *regset, struct regcache *regcache, -+ int regnum, const void *fpregs, size_t len) -+{ -+ const struct gdbarch_tdep *tdep = gdbarch_tdep (regset->arch); -+ const char *regs = fpregs; -+ int i; -+ -+ gdb_assert (len == tdep->sizeof_fpregset); -+ for (i = 0; i < 16; i++) -+ { -+ if (regnum == i+25 || regnum == -1) -+ regcache_raw_supply (regcache, i+25, regs + i*4); -+ } -+ if (regnum == FPSCR_REGNUM || regnum == -1) -+ regcache_raw_supply (regcache, FPSCR_REGNUM, regs + 32*4); -+ if (regnum == FPUL_REGNUM || regnum == -1) -+ regcache_raw_supply (regcache, FPUL_REGNUM, regs + 33*4); -+} -+ -+/* Collect register REGNUM from the register cache REGCACHE and store -+ it in the buffer specified by FPREGS and LEN as described by the -+ floating-point register set REGSET. If REGNUM is -1, do this for -+ all registers in REGSET. */ -+ -+static void -+sh_collect_fpregset (const struct regset *regset, -+ const struct regcache *regcache, -+ int regnum, void *fpregs, size_t len) -+{ -+ const struct gdbarch_tdep *tdep = gdbarch_tdep (regset->arch); -+ char *regs = fpregs; -+ int i; -+ -+ gdb_assert (len == tdep->sizeof_fpregset); -+ for (i = 0; i < 16; i++) -+ { -+ if (regnum == i+25 || regnum == -1) -+ regcache_raw_collect (regcache, i+25, regs + i*4); -+ } -+ if (regnum == FPSCR_REGNUM || regnum == -1) -+ regcache_raw_collect (regcache, FPSCR_REGNUM, regs + 32*4); -+ if (regnum == FPUL_REGNUM || regnum == -1) -+ regcache_raw_collect (regcache, FPUL_REGNUM, regs + 33*4); -+} -+ -+/* Return the appropriate register set for the core section identified -+ by SECT_NAME and SECT_SIZE. */ -+ -+const struct regset * -+sh_linux_regset_from_core_section (struct gdbarch *gdbarch, -+ const char *sect_name, size_t sect_size) -+{ -+ struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); -+ -+ if (strcmp (sect_name, ".reg") == 0 && sect_size == tdep->sizeof_gregset) -+ { -+ if (tdep->gregset == NULL) -+ tdep->gregset = regset_alloc (gdbarch, sh_supply_gregset, -+ sh_collect_gregset); -+ return tdep->gregset; -+ } -+ -+ if ((strcmp (sect_name, ".reg2") == 0 && sect_size == tdep->sizeof_fpregset)) -+ { -+ if (tdep->fpregset == NULL) -+ tdep->fpregset = regset_alloc (gdbarch, sh_supply_fpregset, -+ sh_collect_fpregset); -+ return tdep->fpregset; -+ } -+ -+ return NULL; -+} -+ -+/* The register sets used in GNU/Linux ELF core-dumps are identical to -+ the register sets in `struct user' that are used for a.out -+ core-dumps. These are also used by ptrace(2). The corresponding -+ types are `elf_gregset_t' for the general-purpose registers (with -+ `elf_greg_t' the type of a single GP register) and `elf_fpregset_t' -+ for the floating-point registers. -+ -+ Those types used to be available under the names `gregset_t' and -+ `fpregset_t' too, and GDB used those names in the past. But those -+ names are now used for the register sets used in the `mcontext_t' -+ type, which have a different size and layout. */ -+ -+/* Mapping between the general-purpose registers in `struct user' -+ format and GDB's register cache layout. */ -+ -+/* From . */ -+static int sh_linux_gregset_reg_offset[] = -+{ -+ 0, 4, 8, 12, 16, 20, 24, 28, -+ 32, 36, 40, 44, 48, 52, 56, 60, -+ -+ REG_PC*4, REG_PR*4, REG_GBR*4, -1, -+ REG_MACH*4, REG_MACL*4, REG_SR*4, -+}; -+ -+/* Mapping between the general-purpose registers in `struct -+ sigcontext' format and GDB's register cache layout. */ -+ -+/* From . */ -+static int sh_linux_sc_reg_offset[] = -+{ -+ 4, 8, 12, 16, 20, 24, 28, 32, -+ 36, 40, 44, 48, 52, 56, 60, 64, -+ 68, 72, 80, -1, -+ 84, 88, 76 -+}; -+ - static void - sh_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) - { -+ struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); -+ bfd abfd; -+ -+ tdep->gregset_reg_offset = sh_linux_gregset_reg_offset; -+ tdep->gregset_num_regs = ARRAY_SIZE (sh_linux_gregset_reg_offset); -+ tdep->sizeof_gregset = 23 * 4; -+ -+ tdep->jb_pc_offset = 32; /* From . */ -+ -+ tdep->sigtramp_p = sh_linux_sigtramp_p; -+ tdep->sigcontext_addr = sh_linux_sigcontext_addr; -+ tdep->sc_reg_offset = sh_linux_sc_reg_offset; -+ tdep->sc_num_regs = ARRAY_SIZE (sh_linux_sc_reg_offset); -+ -+ frame_unwind_append_unwinder(gdbarch, &sh_linux_sigtramp_frame_unwind); -+ -+ /* If we have a register mapping, enable the generic core file -+ support, unless it has already been enabled. */ -+ if (tdep->gregset_reg_offset -+ && !gdbarch_regset_from_core_section_p (gdbarch)) -+ set_gdbarch_regset_from_core_section (gdbarch, -+ sh_linux_regset_from_core_section); -+ - linux_init_abi (info, gdbarch); - - /* GNU/Linux uses SVR4-style shared libraries. */ ---- gdb-7.4.orig/gdb/sh-tdep.h -+++ gdb-7.4/gdb/sh-tdep.h -@@ -22,6 +22,12 @@ - - /* Contributed by Steve Chamberlain sac@cygnus.com. */ - -+struct frame_info; -+struct gdbarch; -+struct reggroup; -+struct regset; -+struct regcache; -+ - /* Registers for all SH variants. Used also by sh3-rom.c. */ - enum - { -@@ -30,6 +36,7 @@ enum - ARG0_REGNUM = 4, - ARGLAST_REGNUM = 7, - FP_REGNUM = 14, -+ SP_REGNUM = 15, - PC_REGNUM = 16, - PR_REGNUM = 17, - GBR_REGNUM = 18, -@@ -83,8 +90,26 @@ enum - FV_LAST_REGNUM = 79 - }; - -+#define SH_NUM_REGS 67 -+ -+struct sh_frame_cache -+{ -+ /* Base address. */ -+ CORE_ADDR base; -+ LONGEST sp_offset; -+ CORE_ADDR pc; -+ -+ /* Flag showing that a frame has been created in the prologue code. */ -+ int uses_fp; -+ -+ /* Saved registers. */ -+ CORE_ADDR saved_regs[SH_NUM_REGS]; -+ CORE_ADDR saved_sp; -+}; -+ - extern gdbarch_init_ftype sh64_gdbarch_init; - extern void sh64_show_regs (struct frame_info *); -+extern struct sh_frame_cache *sh_frame_cache (struct frame_info *next_frame, void **this_cache); - - /* This structure describes a register in a core-file. */ - struct sh_corefile_regmap -@@ -93,8 +118,32 @@ struct sh_corefile_regmap - unsigned int offset; - }; - -+/* sh architecture specific information. */ - struct gdbarch_tdep - { -+ /* General-purpose registers. */ -+ struct regset *gregset; -+ int *gregset_reg_offset; -+ int gregset_num_regs; -+ size_t sizeof_gregset; -+ -+ /* Floating-point registers. */ -+ struct regset *fpregset; -+ size_t sizeof_fpregset; -+ -+ /* Offset of saved PC in jmp_buf. */ -+ int jb_pc_offset; -+ -+ /* Detect sigtramp. */ -+ int (*sigtramp_p) (struct frame_info *); -+ -+ /* Get address of sigcontext for sigtramp. */ -+ CORE_ADDR (*sigcontext_addr) (struct frame_info *); -+ -+ /* Offset of registers in `struct sigcontext'. */ -+ int *sc_reg_offset; -+ int sc_num_regs; -+ - /* Non-NULL when debugging from a core file. Provides the offset - where each general-purpose register is stored inside the associated - core file section. */ ---- /dev/null -+++ gdb-7.4/gdb/sh-linux-nat.c -@@ -0,0 +1,269 @@ -+/* Low level SH interface to ptrace, for GDB when running native. -+ Copyright (C) 2002, 2004 Free Software Foundation, Inc. -+ -+This file is part of GDB. -+ -+This program is free software; you can redistribute it and/or modify -+it under the terms of the GNU General Public License as published by -+the Free Software Foundation; either version 2 of the License, or -+(at your option) any later version. -+ -+This program is distributed in the hope that it will be useful, -+but WITHOUT ANY WARRANTY; without even the implied warranty of -+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+GNU General Public License for more details. -+ -+You should have received a copy of the GNU General Public License -+along with this program; if not, write to the Free Software -+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -+ -+#include "defs.h" -+#include "inferior.h" -+#include "gdbcore.h" -+#include "regcache.h" -+#include "linux-nat.h" -+#include "target.h" -+#include "arch-utils.h" -+ -+#include "gdb_assert.h" -+#include "gdb_string.h" -+#include -+#include -+#include -+#include -+ -+/* Prototypes for supply_gregset etc. */ -+#include "gregset.h" -+#include "sh-tdep.h" -+ -+/* Defines ps_err_e, struct ps_prochandle. */ -+#include "gdb_proc_service.h" -+ -+//#include -+ -+#define SH_LINUX_NUM_REGS 40 -+/* This table must line up with REGISTER_NAME in "sh-tdep.c". */ -+static const int regmap[] = -+{ -+ /* general registers 0-15 */ -+ REG_REG0 , REG_REG0+1 , REG_REG0+2 , REG_REG0+3, -+ REG_REG0+4 , REG_REG0+5 , REG_REG0+6 , REG_REG0+7, -+ REG_REG0+8 , REG_REG0+9 , REG_REG0+10, REG_REG0+11, -+ REG_REG0+12, REG_REG0+13, REG_REG0+14, REG_REG0+15, -+ /* 16 - 22 */ -+ REG_PC, REG_PR, REG_GBR, -1, REG_MACH, REG_MACL, REG_SR, -+ /* 23, 24 */ -+ REG_FPUL, REG_FPSCR, -+ /* floating point registers 25 - 40 */ -+ REG_FPREG0 , REG_FPREG0+1 , REG_FPREG0+2 , REG_FPREG0+3 , -+ REG_FPREG0+4 , REG_FPREG0+5 , REG_FPREG0+6 , REG_FPREG0+7 , -+ REG_FPREG0+8 , REG_FPREG0+9 , REG_FPREG0+10, REG_FPREG0+11, -+ REG_FPREG0+12, REG_FPREG0+13, REG_FPREG0+14, REG_FPREG0+15, -+}; -+ -+CORE_ADDR -+register_u_addr (CORE_ADDR blockend, int regnum) -+{ -+ if (regnum < 0 || regnum >= sizeof regmap/sizeof regmap[0]) -+ return (CORE_ADDR)-1; -+ return (blockend + 4 * regmap[regnum]); -+} -+ -+ -+/* Return the address in the core dump or inferior of register REGNO. -+ BLOCKEND is the address of the end of the user structure. */ -+ -+CORE_ADDR -+register_addr (int regno, CORE_ADDR blockend) -+{ -+ CORE_ADDR addr; -+ -+ if (regno < 0 || regno >= SH_LINUX_NUM_REGS) { -+ internal_error (__FILE__, __LINE__, -+ _("Got request for bad register number %d."), regno); -+ } -+ -+ REGISTER_U_ADDR (addr, blockend, regno); -+ -+ return addr; -+} -+ -+/* Fetch one register. */ -+ -+static void -+fetch_register (struct regcache *regcache, int tid, int regno) -+{ -+ int val; -+ -+ if (cannot_fetch_register (regno)) -+ { -+ regcache_raw_supply (regcache, regno, NULL); -+ return; -+ } -+ -+ errno = 0; -+ val = ptrace (PTRACE_PEEKUSER, tid, register_addr (regno, 0), 0); -+ if (errno != 0) -+ perror_with_name (_("Couldn't get registers")); -+ -+ regcache_raw_supply (regcache, regno, &val); -+} -+ -+/* Store one register. */ -+ -+static void -+store_register (struct regcache *regcache, int tid, int regno) -+{ -+ int val; -+ -+ if (cannot_store_register (regno)) -+ return; -+ -+ errno = 0; -+ regcache_raw_collect (regcache, regno, &val); -+ ptrace (PTRACE_POKEUSER, tid, register_addr (regno, 0), val); -+ if (errno != 0) -+ perror_with_name (_("Couldn't write registers")); -+} -+ -+/* Transfering the general-purpose registers between GDB, inferiors -+ and core files. */ -+ -+/* Fill GDB's register array with the general-purpose register values -+ in *GREGSETP. */ -+ -+void -+supply_gregset (struct regcache *regcache, const elf_gregset_t *gregsetp) -+{ -+ elf_greg_t *regp = (elf_greg_t *) gregsetp; -+ int i; -+ -+ for (i = 0; i < 23; i++) -+ if (regmap[i] == -1) -+ regcache_raw_supply (regcache, i, NULL); -+ else -+ regcache_raw_supply (regcache, i, (char *) (regp + regmap[i])); -+} -+ -+/* Fill register REGNO (if it is a general-purpose register) in -+ *GREGSETPS with the value in GDB's register array. If REGNO is -1, -+ do this for all registers. */ -+ -+void -+fill_gregset (const struct regcache *regcache, elf_gregset_t *gregsetp, int regno) -+{ -+ elf_greg_t *regp = (elf_greg_t *) gregsetp; -+ int i; -+ -+ for (i = 0; i < 23; i++) -+ if (regmap[i] != -1 && (regno == -1 || regno == i)) -+ regcache_raw_collect (regcache, i, (char *) (regp + regmap[i])); -+} -+ -+/* Transfering floating-point registers between GDB, inferiors and cores. */ -+ -+/* Fill GDB's register array with the floating-point register values in -+ *FPREGSETP. */ -+ -+void -+supply_fpregset (struct regcache *regcache, const elf_fpregset_t *fpregsetp) -+{ -+ int i; -+ long *regp = (long *)fpregsetp; -+ -+ for (i = 0; i < 16; i++) -+ regcache_raw_supply (regcache, 25 + i, (char *) (regp + i)); -+ regcache_raw_supply (regcache, FPUL_REGNUM, (char *) (regp + REG_FPUL - REG_FPREG0)); -+ regcache_raw_supply (regcache, FPSCR_REGNUM, (char *) (regp + REG_FPSCR - REG_FPREG0)); -+} -+ -+/* Fill register REGNO (if it is a floating-point register) in -+ *FPREGSETP with the value in GDB's register array. If REGNO is -1, -+ do this for all registers. */ -+ -+void -+fill_fpregset (const struct regcache *regcache, elf_fpregset_t *fpregsetp, int regno) -+{ -+ int i; -+ long *regp = (long *)fpregsetp; -+ -+ for (i = 0; i < 16; i++) -+ if ((regno == -1) || (regno == i)) -+ regcache_raw_collect (regcache, 25 + i, (char *) (regp + i)); -+ if ((regno == -1) || regno == FPSCR_REGNUM) -+ regcache_raw_collect (regcache, FPSCR_REGNUM, (char *) (regp + REG_FPSCR - REG_FPREG0)); -+ if ((regno == -1) || regno == FPUL_REGNUM) -+ regcache_raw_collect (regcache, FPUL_REGNUM, (char *) (regp + REG_FPUL - REG_FPREG0)); -+} -+ -+/* Transferring arbitrary registers between GDB and inferior. */ -+ -+/* Check if register REGNO in the child process is accessible. -+ If we are accessing registers directly via the U area, only the -+ general-purpose registers are available. -+ All registers should be accessible if we have GETREGS support. */ -+ -+int -+cannot_fetch_register (int regno) -+{ -+ return (regno < 0 || regno >= sizeof regmap / sizeof regmap[0] || regmap[regno] == -1); -+} -+ -+int -+cannot_store_register (int regno) -+{ -+ return (regno < 0 || regno >= sizeof regmap / sizeof regmap[0] || regmap[regno] == -1); -+} -+ -+/* Fetch register values from the inferior. -+ If REGNO is negative, do this for all registers. -+ Otherwise, REGNO specifies which register (so we can save time). */ -+ -+static void -+sh_linux_fetch_inferior_registers (struct target_ops *ops, struct regcache *regcache, int regno) -+{ -+ int i; -+ int tid; -+ -+ /* GNU/Linux LWP ID's are process ID's. */ -+ if ((tid = TIDGET (inferior_ptid)) == 0) -+ tid = PIDGET (inferior_ptid); /* Not a threaded program. */ -+ -+ for (i = 0; i < SH_LINUX_NUM_REGS; i++) -+ if (regno == -1 || regno == i) -+ fetch_register (regcache, tid, i); -+} -+/* Store our register values back into the inferior. -+ If REGNO is negative, do this for all registers. -+ Otherwise, REGNO specifies which register (so we can save time). */ -+ -+static void -+sh_linux_store_inferior_registers (struct target_ops *ops, struct regcache *regcache, int regno) -+{ -+ int i; -+ int tid; -+ -+ /* GNU/Linux LWP ID's are process ID's. */ -+ if ((tid = TIDGET (inferior_ptid)) == 0) -+ tid = PIDGET (inferior_ptid); /* Not a threaded program. */ -+ -+ for (i = 0; i < SH_LINUX_NUM_REGS; i++) -+ if (regno == -1 || regno == i) -+ store_register (regcache, tid, i); -+} -+ -+void -+_initialize_sh_linux_nat (void) -+{ -+ struct target_ops *t; -+ -+ /* Fill in the generic GNU/Linux methods. */ -+ t = linux_target (); -+ -+ /* Add our register access methods. */ -+ t->to_fetch_registers = sh_linux_fetch_inferior_registers; -+ t->to_store_registers = sh_linux_store_inferior_registers; -+ -+ /* Register the target. */ -+ linux_nat_add_target (t); -+} ---- gdb-7.4.orig/gdb/sh-tdep.c -+++ gdb-7.4/gdb/sh-tdep.c -@@ -23,6 +23,9 @@ - sac@cygnus.com. */ - - #include "defs.h" -+#include "arch-utils.h" -+#include "command.h" -+#include "dummy-frame.h" - #include "frame.h" - #include "frame-base.h" - #include "frame-unwind.h" -@@ -39,6 +42,7 @@ - #include "arch-utils.h" - #include "floatformat.h" - #include "regcache.h" -+#include "regset.h" - #include "doublest.h" - #include "osabi.h" - #include "reggroups.h" -@@ -71,23 +75,6 @@ static const char *sh_active_calling_con - - static void (*sh_show_regs) (struct frame_info *); - --#define SH_NUM_REGS 67 -- --struct sh_frame_cache --{ -- /* Base address. */ -- CORE_ADDR base; -- LONGEST sp_offset; -- CORE_ADDR pc; -- -- /* Flag showing that a frame has been created in the prologue code. */ -- int uses_fp; -- -- /* Saved registers. */ -- CORE_ADDR saved_regs[SH_NUM_REGS]; -- CORE_ADDR saved_sp; --}; -- - static int - sh_is_renesas_calling_convention (struct type *func_type) - { -@@ -1042,7 +1029,7 @@ sh_treat_as_flt_p (struct type *type) - return 0; - /* Otherwise if the type of that member is float, the whole type is - treated as float. */ -- if (TYPE_CODE (TYPE_FIELD_TYPE (type, 0)) == TYPE_CODE_FLT) -+ if (TYPE_CODE (check_typedef (TYPE_FIELD_TYPE (type, 0))) == TYPE_CODE_FLT) - return 1; - /* Otherwise it's not treated as float. */ - return 0; -@@ -1092,7 +1079,7 @@ sh_push_dummy_call_fpu (struct gdbarch * - in four registers available. Loop thru args from first to last. */ - for (argnum = 0; argnum < nargs; argnum++) - { -- type = value_type (args[argnum]); -+ type = check_typedef (value_type (args[argnum])); - len = TYPE_LENGTH (type); - val = sh_justify_value_in_reg (gdbarch, args[argnum], len); - -@@ -2510,7 +2497,7 @@ sh_dwarf2_frame_init_reg (struct gdbarch - reg->how = DWARF2_FRAME_REG_UNDEFINED; - } - --static struct sh_frame_cache * -+struct sh_frame_cache * - sh_alloc_frame_cache (void) - { - struct sh_frame_cache *cache; -@@ -2537,7 +2524,7 @@ sh_alloc_frame_cache (void) - return cache; - } - --static struct sh_frame_cache * -+struct sh_frame_cache * - sh_frame_cache (struct frame_info *this_frame, void **this_cache) - { - struct gdbarch *gdbarch = get_frame_arch (this_frame); -@@ -2595,9 +2582,9 @@ sh_frame_cache (struct frame_info *this_ - return cache; - } - --static struct value * --sh_frame_prev_register (struct frame_info *this_frame, -- void **this_cache, int regnum) -+struct value * -+sh_frame_prev_register (struct frame_info *this_frame, void **this_cache, -+ int regnum) - { - struct gdbarch *gdbarch = get_frame_arch (this_frame); - struct sh_frame_cache *cache = sh_frame_cache (this_frame, this_cache); -@@ -2611,7 +2598,7 @@ sh_frame_prev_register (struct frame_inf - the current frame. Frob regnum so that we pull the value from - the correct place. */ - if (regnum == gdbarch_pc_regnum (gdbarch)) -- regnum = PR_REGNUM; -+ regnum = PR_REGNUM; /* XXX: really? */ - - if (regnum < SH_NUM_REGS && cache->saved_regs[regnum] != -1) - return frame_unwind_got_memory (this_frame, regnum, -@@ -2855,8 +2842,8 @@ sh_regset_from_core_section (struct gdba - static struct gdbarch * - sh_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) - { -- struct gdbarch *gdbarch; - struct gdbarch_tdep *tdep; -+ struct gdbarch *gdbarch; - - sh_show_regs = sh_generic_show_regs; - switch (info.bfd_arch_info->mach) -@@ -2919,6 +2906,18 @@ sh_gdbarch_init (struct gdbarch_info inf - tdep = XZALLOC (struct gdbarch_tdep); - gdbarch = gdbarch_alloc (&info, tdep); - -+ /* General-purpose registers. */ -+ tdep->gregset = NULL; -+ tdep->gregset_reg_offset = NULL; -+ tdep->gregset_num_regs = 23; -+ tdep->sizeof_gregset = 0; -+ -+ /* Floating-point registers. */ -+ tdep->fpregset = NULL; -+ tdep->sizeof_fpregset = 34*4; -+ -+ tdep->jb_pc_offset = -1; -+ - set_gdbarch_short_bit (gdbarch, 2 * TARGET_CHAR_BIT); - set_gdbarch_int_bit (gdbarch, 4 * TARGET_CHAR_BIT); - set_gdbarch_long_bit (gdbarch, 4 * TARGET_CHAR_BIT); -@@ -3064,10 +3063,11 @@ sh_gdbarch_init (struct gdbarch_info inf - break; - } - -+ dwarf2_append_unwinders (gdbarch); -+ - /* Hook in ABI-specific overrides, if they have been registered. */ - gdbarch_init_osabi (info, gdbarch); - -- dwarf2_append_unwinders (gdbarch); - frame_unwind_append_unwinder (gdbarch, &sh_frame_unwind); - - return gdbarch; ---- /dev/null -+++ gdb-7.4/gdb/testsuite/gdb.asm/sh-linux.inc -@@ -0,0 +1,78 @@ -+# You'll find a bunch of nop opcodes in the below macros. They are -+# there to keep the code correctly aligned. Be careful to maintain -+# them when changing the code. -+ -+ comment "subroutine declare" -+ .purgem gdbasm_declare -+ .macro gdbasm_declare name -+ .align 1 -+ .global \name -+\name: -+ .endm -+ -+ comment "subroutine prologue" -+ .macro gdbasm_enter -+ mov.l r14,@-r15 -+ sts.l pr,@-r15 -+ mov r15,r14 -+ nop -+ .endm -+ -+ comment "subroutine epilogue" -+ .macro gdbasm_leave -+ mov r14,r15 -+ lds.l @r15+,pr -+ mov.l @r15+,r14 -+ rts -+ nop -+ nop -+ .endm -+ -+ comment "subroutine end" -+ .purgem gdbasm_end -+ .macro gdbasm_end name -+ .size \name, .-_foo1 -+ .align 1 -+ .endm -+ -+ comment "subroutine call" -+ .macro gdbasm_call subr -+ mov.l .Lconst\@,r1 -+ bra .Lafterconst\@ -+ nop -+ .align 2 -+.Lconst\@: -+ .long \subr -+.Lafterconst\@: -+ jsr @r1 -+ nop -+ .endm -+ -+ .macro gdbasm_several_nops -+ nop -+ nop -+ nop -+ nop -+ .endm -+ -+ comment "exit (0)" -+ .macro gdbasm_exit0 -+ sleep -+ nop -+ .endm -+ -+ comment "crt0 startup" -+ .macro gdbasm_startup -+ mov #0,r14 -+ .endm -+ -+ comment "Declare a data variable" -+ .purgem gdbasm_datavar -+ .macro gdbasm_datavar name value -+ .data -+ .align 2 -+ .type \name, @object -+ .size \name, 4 -+\name: -+ .long \value -+ .endm ---- gdb-7.4.orig/gdb/testsuite/gdb.asm/sh.inc -+++ gdb-7.4/gdb/testsuite/gdb.asm/sh.inc -@@ -40,9 +40,8 @@ - mov.l .Lconst\@,r1 - bra .Lafterconst\@ - nop -- nop --.Lconst\@: - .align 2 -+.Lconst\@: - .long \subr - .align 1 - .Lafterconst\@: ---- gdb-7.4.orig/gdb/testsuite/gdb.asm/asm-source.exp -+++ gdb-7.4/gdb/testsuite/gdb.asm/asm-source.exp -@@ -111,6 +111,11 @@ switch -glob -- [istarget] { - append link-flags " -m elf32ppc" - } - } -+ "sh*-linux*" { -+ set asm-arch sh-linux -+ set asm-flags "-I${srcdir}/${subdir} -I${objdir}/${subdir}" -+ set debug-flags "-gdwarf-2" -+ } - "sh*-*-*" { - set asm-arch sh - set debug-flags "-gdwarf-2" ---- gdb-7.4.orig/gdb/testsuite/gdb.base/sigall.c -+++ gdb-7.4/gdb/testsuite/gdb.base/sigall.c -@@ -1,9 +1,9 @@ - #include - #include - --#ifdef __sh__ --#define signal(a,b) /* Signals not supported on this target - make them go away */ --#endif -+ -+ -+ - - /* Signal handlers, we set breakpoints in them to make sure that the - signals really get delivered. */ ---- gdb-7.4.orig/gdb/testsuite/gdb.base/signals.c -+++ gdb-7.4/gdb/testsuite/gdb.base/signals.c -@@ -3,10 +3,10 @@ - #include - #include - --#ifdef __sh__ --#define signal(a,b) /* Signals not supported on this target - make them go away */ --#define alarm(a) /* Ditto for alarm() */ --#endif -+ -+ -+ -+ - - static int count = 0; - ---- gdb-7.4.orig/gdb/testsuite/gdb.base/annota1.c -+++ gdb-7.4/gdb/testsuite/gdb.base/annota1.c -@@ -1,9 +1,9 @@ - #include - #include - --#ifdef __sh__ --#define signal(a,b) /* Signals not supported on this target - make them go away */ --#endif -+ -+ -+ - - - #ifdef PROTOTYPES ---- gdb-7.4.orig/gdb/testsuite/gdb.base/annota3.c -+++ gdb-7.4/gdb/testsuite/gdb.base/annota3.c -@@ -1,9 +1,9 @@ - #include - #include - --#ifdef __sh__ --#define signal(a,b) /* Signals not supported on this target - make them go away */ --#endif -+ -+ -+ - - - #ifdef PROTOTYPES ---- /dev/null -+++ gdb-7.4/gdb/config/sh/xm-linux.h -@@ -0,0 +1,32 @@ -+/* Native support for GNU/Linux, for GDB, the GNU debugger. -+ Copyright (C) 2000 Free Software Foundation, Inc. -+ -+This file is part of GDB. -+ -+This program is free software; you can redistribute it and/or modify -+it under the terms of the GNU General Public License as published by -+the Free Software Foundation; either version 2 of the License, or -+(at your option) any later version. -+ -+This program is distributed in the hope that it will be useful, -+but WITHOUT ANY WARRANTY; without even the implied warranty of -+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+GNU General Public License for more details. -+ -+You should have received a copy of the GNU General Public License -+along with this program; if not, write to the Free Software -+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -+ -+#ifndef XM_LINUX_H -+#define XM_LINUX_H -+ -+#define HOST_BYTE_ORDER LITTLE_ENDIAN -+ -+#define HAVE_TERMIOS -+ -+#define NEED_POSIX_SETPGID -+ -+/* Need R_OK etc, but USG isn't defined. */ -+#include -+ -+#endif /* #ifndef XM_LINUX_H */ ---- /dev/null -+++ gdb-7.4/gdb/config/sh/nm-linux.h -@@ -0,0 +1,54 @@ -+/* Native-dependent definitions for SuperH running Linux, for GDB. -+ Copyright 2004 Free Software Foundation, Inc. -+ -+ This file is part of GDB. -+ -+ This program is free software; you can redistribute it and/or modify -+ it under the terms of the GNU General Public License as published by -+ the Free Software Foundation; either version 2 of the License, or -+ (at your option) any later version. -+ -+ This program is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ GNU General Public License for more details. -+ -+ You should have received a copy of the GNU General Public License -+ along with this program; if not, write to the Free Software -+ Foundation, Inc., 59 Temple Place - Suite 330, -+ Boston, MA 02111-1307, USA. */ -+ -+#ifndef NM_LINUX_H -+#define NM_LINUX_H -+ -+/* Get generic Linux native definitions. */ -+#include "config/nm-linux.h" -+/* Support for the user area. */ -+ -+/* Return the size of the user struct. */ -+extern int kernel_u_size (void); -+#define KERNEL_U_SIZE kernel_u_size() -+ -+/* This is the amount to substract from u.u_ar0 to get the offset in -+ the core file of the register values. */ -+#define KERNEL_U_ADDR 0 -+ -+#define U_REGS_OFFSET 0 -+ -+extern CORE_ADDR register_u_addr (CORE_ADDR blockend, int regnum); -+#define REGISTER_U_ADDR(addr, blockend, regnum) \ -+ (addr) = register_u_addr (blockend, regnum) -+ -+/* Override copies of {fetch,store}_inferior_registers in `infptrace.c'. */ -+#define FETCH_INFERIOR_REGISTERS -+ -+/* Nevertheless, define CANNOT_{FETCH,STORE}_REGISTER, because we -+ might fall back on the code `infptrace.c' (well a copy of that code -+ in `sh-linux-nat.c' for now) and we can access only the -+ general-purpose registers in that way. */ -+extern int cannot_fetch_register (int regno); -+extern int cannot_store_register (int regno); -+#define CANNOT_FETCH_REGISTER(regno) cannot_fetch_register (regno) -+#define CANNOT_STORE_REGISTER(regno) cannot_store_register (regno) -+ -+#endif /* NM_LINUX_H */ ---- /dev/null -+++ gdb-7.4/gdb/config/sh/linux.mh -@@ -0,0 +1,8 @@ -+# Host: Renesas Super-H running GNU/Linux -+NAT_FILE= nm-linux.h -+NATDEPFILES= inf-ptrace.o fork-child.o corelow.o \ -+ sh-linux-nat.o \ -+ proc-service.o linux-thread-db.o gcore.o \ -+ linux-nat.o linux-fork.o -+ -+LOADLIBES= -ldl -rdynamic diff -Nru gdb-9.1/debian/patches/series gdb-10.2/debian/patches/series --- gdb-9.1/debian/patches/series 2020-01-25 05:32:25.000000000 +0000 +++ gdb-10.2/debian/patches/series 2021-04-26 13:27:11.000000000 +0000 @@ -1,19 +1,17 @@ #branch-updates.diff +#branch-doc-updates.diff gdb-fortran-main.patch -#linuxthreads_signal_handling.patch solve_PATH_MAX_issue.patch gdb-6.5-bz185337-resolve-tls-without-debuginfo-v2.patch -python-config.patch gdb-glibc-vdso-workaround.patch load-versioned-libcc1.patch +gdb_configure.nat.patch +struct-thread_info.patch +gdb_bsd-kvm.c.diff +2bf3b79d05bf85e41cbdcb020bd1cc424f59dd9a.diff +fork-inferior-fix +vm_min_max_address # Ubuntu/Linaro gdb-strings.patch ptrace-error-verbosity.patch -#elf-auxv-diff - -# experimental -#infinity-notes.diff -disable-multi-term-settings-test.diff - -python3.8.diff diff -Nru gdb-9.1/debian/patches/solve_PATH_MAX_issue.patch gdb-10.2/debian/patches/solve_PATH_MAX_issue.patch --- gdb-9.1/debian/patches/solve_PATH_MAX_issue.patch 2017-02-07 05:04:26.000000000 +0000 +++ gdb-10.2/debian/patches/solve_PATH_MAX_issue.patch 2020-09-19 19:55:03.000000000 +0000 @@ -1,16 +1,24 @@ -Description: Patch out a PATH_MAX usage, for Hurd's benefit +From: =?utf-8?b?SMOpY3RvciBPcsOzbiBNYXJ0w61uZXo=?= +Date: Wed, 20 Feb 2019 13:25:36 +0100 +Subject: Patch out a PATH_MAX usage, for Hurd's benefit +MIME-Version: 1.0 +Content-Type: text/plain; charset="utf-8" +Content-Transfer-Encoding: 8bit Author: Svante Signell Bug-Debian: http://bugs.debian.org/709508 Forwarded: http://sourceware.org/ml/gdb-patches/2013-05/msg00878.html Reviewed-By: Héctor Orón Martínez Last-Update: 2013-06-08 +--- + gdb/nto-tdep.c | 12 +++++++++--- + 1 file changed, 9 insertions(+), 3 deletions(-) -Index: b/gdb/nto-tdep.c +Index: gdb/gdb/nto-tdep.c =================================================================== ---- a/gdb/nto-tdep.c -+++ b/gdb/nto-tdep.c -@@ -153,10 +153,12 @@ nto_find_and_open_solib (const char *sol +--- gdb.orig/gdb/nto-tdep.c ++++ gdb/gdb/nto-tdep.c +@@ -156,10 +156,12 @@ nto_find_and_open_solib (const char *sol void nto_init_solib_absolute_prefix (void) { @@ -24,7 +32,7 @@ nto_root = nto_target (); if (strcmp (gdbarch_bfd_arch_info (target_gdbarch ())->arch_name, "i386") == 0) -@@ -179,9 +181,13 @@ nto_init_solib_absolute_prefix (void) +@@ -182,9 +184,13 @@ nto_init_solib_absolute_prefix (void) == BFD_ENDIAN_BIG ? "be" : "le"; } diff -Nru gdb-9.1/debian/patches/struct-thread_info.patch gdb-10.2/debian/patches/struct-thread_info.patch --- gdb-9.1/debian/patches/struct-thread_info.patch 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/debian/patches/struct-thread_info.patch 2021-03-04 18:37:08.000000000 +0000 @@ -0,0 +1,249 @@ +From: =?utf-8?b?SMOpY3RvciBPcsOzbiBNYXJ0w61uZXo=?= +Date: Wed, 20 Feb 2019 13:25:36 +0100 +Subject: struct-thread_info + +=================================================================== +--- + gdb/breakpoint.c | 2 +- + gdb/infcmd.c | 4 ++-- + gdb/linux-tdep.c | 2 +- + gdb/mi/mi-main.c | 2 +- + gdb/progspace-and-thread.c | 2 +- + gdb/python/py-record-btrace.c | 8 ++++---- + gdb/remote.c | 6 +++--- + gdb/thread.c | 22 +++++++++++----------- + 8 files changed, 24 insertions(+), 24 deletions(-) + +Index: gdb/gdb/breakpoint.c +=================================================================== +--- gdb.orig/gdb/breakpoint.c ++++ gdb/gdb/breakpoint.c +@@ -12684,7 +12684,7 @@ momentary_bkpt_print_mention (struct bre + + longjmp_breakpoint::~longjmp_breakpoint () + { +- thread_info *tp = find_thread_global_id (this->thread); ++ struct thread_info *tp = find_thread_global_id (this->thread); + + if (tp != NULL) + tp->initiating_frame = null_frame_id; +Index: gdb/gdb/infcmd.c +=================================================================== +--- gdb.orig/gdb/infcmd.c ++++ gdb/gdb/infcmd.c +@@ -525,7 +525,7 @@ run_command_1 (const char *args, int fro + /* Queue a pending event so that the program stops immediately. */ + if (run_how == RUN_STOP_AT_FIRST_INSN) + { +- thread_info *thr = inferior_thread (); ++ struct thread_info *thr = inferior_thread (); + thr->suspend.waitstatus_pending_p = 1; + thr->suspend.waitstatus.kind = TARGET_WAITKIND_STOPPED; + thr->suspend.waitstatus.value.sig = GDB_SIGNAL_0; +Index: gdb/gdb/linux-tdep.c +=================================================================== +--- gdb.orig/gdb/linux-tdep.c ++++ gdb/gdb/linux-tdep.c +@@ -1693,7 +1693,7 @@ linux_collect_thread_registers (const st + buffer. */ + + static gdb::byte_vector +-linux_get_siginfo_data (thread_info *thread, struct gdbarch *gdbarch) ++linux_get_siginfo_data (struct thread_info *thread, struct gdbarch *gdbarch) + { + struct type *siginfo_type; + LONGEST bytes_read; +Index: gdb/gdb/mi/mi-main.c +=================================================================== +--- gdb.orig/gdb/mi/mi-main.c ++++ gdb/gdb/mi/mi-main.c +@@ -545,7 +545,7 @@ mi_cmd_thread_select (const char *comman + error (_("-thread-select: USAGE: threadnum.")); + + int num = value_as_long (parse_and_eval (argv[0])); +- thread_info *thr = find_thread_global_id (num); ++ struct thread_info *thr = find_thread_global_id (num); + if (thr == NULL) + error (_("Thread ID %d not known."), num); + +Index: gdb/gdb/progspace-and-thread.c +=================================================================== +--- gdb.orig/gdb/progspace-and-thread.c ++++ gdb/gdb/progspace-and-thread.c +@@ -29,7 +29,7 @@ switch_to_program_space_and_thread (prog + + if (inf->pid != 0) + { +- thread_info *tp = any_live_thread_of_inferior (inf); ++ struct thread_info *tp = any_live_thread_of_inferior (inf); + + if (tp != NULL) + { +Index: gdb/gdb/python/py-record-btrace.c +=================================================================== +--- gdb.orig/gdb/python/py-record-btrace.c ++++ gdb/gdb/python/py-record-btrace.c +@@ -73,7 +73,7 @@ btrace_insn_from_recpy_insn (const PyObj + { + const btrace_insn *insn; + const recpy_element_object *obj; +- thread_info *tinfo; ++ struct thread_info *tinfo; + btrace_insn_iterator iter; + + if (Py_TYPE (pyobject) != &recpy_insn_type) +@@ -116,7 +116,7 @@ btrace_func_from_recpy_func (const PyObj + { + const btrace_function *func; + const recpy_element_object *obj; +- thread_info *tinfo; ++ struct thread_info *tinfo; + btrace_call_iterator iter; + + if (Py_TYPE (pyobject) != &recpy_func_type) +@@ -154,7 +154,7 @@ btrace_func_from_recpy_func (const PyObj + gdb.RecordInstruction or gdb.RecordGap object for it accordingly. */ + + static PyObject * +-btpy_insn_or_gap_new (thread_info *tinfo, Py_ssize_t number) ++btpy_insn_or_gap_new (struct thread_info *tinfo, Py_ssize_t number) + { + btrace_insn_iterator iter; + int err_code; +@@ -336,7 +336,7 @@ PyObject * + recpy_bt_func_level (PyObject *self, void *closure) + { + const btrace_function * const func = btrace_func_from_recpy_func (self); +- thread_info *tinfo; ++ struct thread_info *tinfo; + + if (func == NULL) + return NULL; +Index: gdb/gdb/remote.c +=================================================================== +--- gdb.orig/gdb/remote.c ++++ gdb/gdb/remote.c +@@ -2418,7 +2418,7 @@ remote_target::remote_add_inferior (bool + return inf; + } + +-static remote_thread_info *get_remote_thread_info (thread_info *thread); ++static remote_thread_info *get_remote_thread_info (struct thread_info *thread); + static remote_thread_info *get_remote_thread_info (remote_target *target, + ptid_t ptid); + +@@ -2545,7 +2545,7 @@ remote_target::remote_notice_new_inferio + /* Return THREAD's private thread data, creating it if necessary. */ + + static remote_thread_info * +-get_remote_thread_info (thread_info *thread) ++get_remote_thread_info (struct thread_info *thread) + { + gdb_assert (thread != NULL); + +@@ -4373,7 +4373,7 @@ remote_target::add_current_inferior_and_ + /* Add the main thread and switch to it. Don't try reading + registers yet, since we haven't fetched the target description + yet. */ +- thread_info *tp = add_thread_silent (this, curr_ptid); ++ struct thread_info *tp = add_thread_silent (this, curr_ptid); + switch_to_thread_no_regs (tp); + } + +Index: gdb/gdb/thread.c +=================================================================== +--- gdb.orig/gdb/thread.c ++++ gdb/gdb/thread.c +@@ -64,21 +64,21 @@ static thread_info *current_thread_; + class scoped_inc_dec_ref + { + public: +- explicit scoped_inc_dec_ref (const std::vector &thrds) ++ explicit scoped_inc_dec_ref (const std::vector &thrds) + : m_thrds (thrds) + { +- for (thread_info *thr : m_thrds) ++ for (struct thread_info *thr : m_thrds) + thr->incref (); + } + + ~scoped_inc_dec_ref () + { +- for (thread_info *thr : m_thrds) ++ for (struct thread_info *thr : m_thrds) + thr->decref (); + } + + private: +- const std::vector &m_thrds; ++ const std::vector &m_thrds; + }; + + /* Returns true if THR is the current thread. */ +@@ -203,7 +203,7 @@ clear_thread_inferior_resources (struct + /* Set the TP's state as exited. */ + + static void +-set_thread_exited (thread_info *tp, bool silent) ++set_thread_exited (struct thread_info *tp, bool silent) + { + /* Dead threads don't need to step-over. Remove from queue. */ + if (tp->step_over_next != NULL) +@@ -245,7 +245,7 @@ init_thread_list (void) + static struct thread_info * + new_thread (struct inferior *inf, ptid_t ptid) + { +- thread_info *tp = new thread_info (inf, ptid); ++ struct thread_info *tp = new struct thread_info (inf, ptid); + + if (inf->thread_list == NULL) + inf->thread_list = tp; +@@ -1505,7 +1505,7 @@ print_thread_id (struct thread_info *thr + ascending order. */ + + static bool +-tp_array_compar_ascending (const thread_info *a, const thread_info *b) ++tp_array_compar_ascending (const struct thread_info *a, const struct thread_info *b) + { + if (a->inf->num != b->inf->num) + return a->inf->num < b->inf->num; +@@ -1518,7 +1518,7 @@ tp_array_compar_ascending (const thread_ + descending order. */ + + static bool +-tp_array_compar_descending (const thread_info *a, const thread_info *b) ++tp_array_compar_descending (const struct thread_info *a, const struct thread_info *b) + { + if (a->inf->num != b->inf->num) + return a->inf->num > b->inf->num; +@@ -1656,10 +1656,10 @@ thread_apply_all_command (const char *cm + thread, in case the command is one that wipes threads. E.g., + detach, kill, disconnect, etc., or even normally continuing + over an inferior or thread exit. */ +- std::vector thr_list_cpy; ++ std::vector thr_list_cpy; + thr_list_cpy.reserve (tc); + +- for (thread_info *tp : all_non_exited_threads ()) ++ for (struct thread_info *tp : all_non_exited_threads ()) + thr_list_cpy.push_back (tp); + gdb_assert (thr_list_cpy.size () == tc); + +@@ -1674,7 +1674,7 @@ thread_apply_all_command (const char *cm + + scoped_restore_current_thread restore_thread; + +- for (thread_info *thr : thr_list_cpy) ++ for (struct thread_info *thr : thr_list_cpy) + if (switch_to_thread_if_alive (thr)) + thr_try_catch_cmd (thr, cmd, from_tty, flags); + } +@@ -1998,7 +1998,7 @@ show_print_thread_events (struct ui_file + /* See gdbthread.h. */ + + void +-thread_select (const char *tidstr, thread_info *tp) ++thread_select (const char *tidstr, struct thread_info *tp) + { + if (!switch_to_thread_if_alive (tp)) + error (_("Thread ID %s has terminated."), tidstr); diff -Nru gdb-9.1/debian/patches/vm_min_max_address gdb-10.2/debian/patches/vm_min_max_address --- gdb-9.1/debian/patches/vm_min_max_address 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/debian/patches/vm_min_max_address 2021-03-04 18:37:08.000000000 +0000 @@ -0,0 +1,12 @@ +Index: gdb-9.2/gdb/gnu-nat.c +=================================================================== +--- gdb-9.2.orig/gdb/gnu-nat.c ++++ gdb-9.2/gdb/gnu-nat.c +@@ -32,6 +32,7 @@ extern "C" + #include + #include + #include ++#include + + #include + #include diff -Nru gdb-9.1/debian/README.python_switch gdb-10.2/debian/README.python_switch --- gdb-9.1/debian/README.python_switch 2015-03-21 16:11:19.000000000 +0000 +++ gdb-10.2/debian/README.python_switch 1970-01-01 00:00:00.000000000 +0000 @@ -1,87 +0,0 @@ -# -*- mode: org; -*- - -#+STARTUP: showall - -For jessie, GDB uses Python 3 by default. - -* Users - - For the time being, you may switch back to Python 2 by installing - gdb-python2. The gdb-python2 package is likely to be dropped before - , assuming we don't hit any really serious problems. - - Please report bugs for any problems we might care about, whether in - or out of Debian, so we can track the impact and assist in dealing - with any issues. (Include "python" in the subject.) - - - If the problem is with a script from a package that's in Debian - (even if the Debian package does not install that script) please - report a bug against the package and [X-Debbugs-]CC us: - - + Run "reportbug --list-cc=gdb@packages.debian.org - " and follow the prompts. - - - If the problem is with scripts from packages that aren't in Debian - but are in free software, report a bug against gdb: - - + Run "reportbug gdb" and follow the prompts. - - + Tell us (1) where to get the software and (2) how to get in - touch with upstream (preferably in the form of a link to a - report about it in the upstream bugtracker). - - If the project doesn't welcome contributions, please let us know - so we don't waste time writing patches. - - We don't *promise* to fix such problems, but we still want to know - about them, and we're likely to take a stab at them if it doesn't - take too long to get from initiating a VCS checkout to having the - software built. - - - If the problem is with private scripts but you think it's because - of a deficiency in GDB, please construct a minimal example of the - issue and report that to us, too: - - + Run "reportbug gdb" and follow the prompts. - + Include your example in the email. - + Links to any relevant bug reports/discussion are appreciated (as - always). - -* Packagers - - - Packages will be considered *buggy* if their GDB scripts do not - work with *both* Python 2 *and* Python 3. - - + This is partly so that things will work for users of both gdb and - gdb-python2, and partly because it is the only sane way to do - things upstream: GDB can only be built with one version of Python - at a time, and not all distributions, users, etc. have/are/will - switch(ed/ing/) at the same time (or even in the same direction). - - - Packages will be considered *RC buggy* if they conflict with, - break, or depend on either gdb or gdb-python2 just because of such - broken scripts. - - + It is, after all, better to have scripts that don't work than to - be unable to even install the package it is in. Also, users - could have other builds of GDB around to use such scripts with. - - The "six" module may be useful for reference/inspiration here: - - as might these pages: - - - - If you would like us to make each gdb package pull in the - appropriate "six" package, we would be happy to do that; just file a - bug and/or prod SamB on IRC. - - - The motivation being to prevent lib or -dbg packages (wherever you - ship you scripts) needing to either reinvent pieces of the "six" - package or pull in python-six *and* python3-six (thus keeping both - versions of python installed) when the user may not even have or - want to use gdb: there *are* other uses for -dbg packages, and - some scripts are shipped in lib packages anyway. - - - However, this probably won't be too helpful from an upstream PoV - unless we can get this to happen on other distros as well. diff -Nru gdb-9.1/debian/README.source gdb-10.2/debian/README.source --- gdb-9.1/debian/README.source 2014-11-09 15:22:58.000000000 +0000 +++ gdb-10.2/debian/README.source 2020-09-19 19:55:03.000000000 +0000 @@ -3,7 +3,7 @@ must go in the Debian non-free section. To produce the necessary tarballs, download an official GDB release as -.tar.bz2 from the FSF. Run debian/sanitize-gdb.sh on it. That +.tar.xz from the FSF. Run debian/sanitize-gdb.sh on it. That will produce a gdb .orig.tar.xz and a gdb-doc .orig.tar.xz -- Samuel Bronson , Sat, 3 May 2014 17:22:31 -0400 diff -Nru gdb-9.1/debian/rules gdb-10.2/debian/rules --- gdb-9.1/debian/rules 2019-09-10 09:10:23.000000000 +0000 +++ gdb-10.2/debian/rules 2021-04-28 08:22:22.000000000 +0000 @@ -1,28 +1,17 @@ #!/usr/bin/make -f -ALL_BUILDDIR := $(shell pwd)/build +SPACE := $(EMPTY) $(EMPTY) +COMMA := , -DEB_BUILDDIR := $(ALL_BUILDDIR)/objdir -DEB_DH_INSTALL_SOURCEDIR := $(shell pwd)/debian/tmp -DEB_DH_STRIP_ARGS_GDB := --dbg-package=gdb-dbg - -# Override CDBS's default CFLAGS, which also includes -Wall; gdb -# does not handle -Wunused well with -Werror, but defaults to -# -Werror. -DEB_WARNING_FLAGS := +include /usr/share/dpkg/architecture.mk -# This implements the .deb package creation using debhelper. -include /usr/share/cdbs/1/rules/debhelper.mk - -# This implements building using a configure script and Makefile. -include /usr/share/cdbs/1/class/python-autotools.mk +SOURCE_DATE_EPOCH ?= $(shell dpkg-parsechangelog -SDate | date -f- +%s) +deb_version := $(shell dpkg-parsechangelog | awk '/^Version:/ {print $$2}') # The top-level configure script fails to pass these down properly ... export CPPFLAGS export LDFLAGS - -# Always install into debian/tmp, even if we are only building one package. -DEB_DESTDIR := $(shell pwd)/debian/tmp +CPPFLAGS += -fPIC install = /usr/bin/install -p @@ -30,18 +19,37 @@ # untested command fails. SHELL += -e -DEB_BUILD_GNU_TYPE := $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE) -DEB_HOST_GNU_SYSTEM := $(shell dpkg-architecture -qDEB_HOST_GNU_SYSTEM) -DEB_HOST_GNU_CPU := $(shell dpkg-architecture -qDEB_HOST_GNU_CPU) -DEB_HOST_GNU_TYPE := $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE) -DEB_HOST_ARCH := $(shell dpkg-architecture -qDEB_HOST_ARCH) -DEB_TARGET_ARCH := $(shell dpkg-architecture -qDEB_TARGET_ARCH) -DEB_TARGET_GNU_TYPE := $(shell dpkg-architecture -qDEB_TARGET_GNU_TYPE) -ifeq (,$(DEB_TARGET_ARCH)) - DEB_TARGET_ARCH := $(DEB_HOST_ARCH) - DEB_TARGET_GNU_TYPE := $(DEB_HOST_GNU_TYPE) +INSTALL = $(install) +export INSTALL + +distribution := $(shell lsb_release -is) +derivative := $(shell if dpkg-vendor --derives-from Ubuntu; then echo Ubuntu; \ + elif dpkg-vendor --derives-from Debian; then echo Debian; \ + else echo Unknown; fi) + +# Support parallel= in DEB_BUILD_OPTIONS (see #209008) +ifneq (,$(filter parallel=%,$(subst $(COMMA), ,$(DEB_BUILD_OPTIONS)))) + NJOBS := -j $(subst parallel=,,$(filter parallel=%,$(subst $(COMMA), ,$(DEB_BUILD_OPTIONS)))) endif +ifneq (,$(filter nodoc, $(DEB_BUILD_PROFILES))) + nodoc_profile = yes +endif + +# Don't include docs with GFDL invariant sections +GFDL_INVARIANT_FREE := yes +ifeq ($(derivative),Ubuntu) + GFDL_INVARIANT_FREE := no + FORCE_CONTROL = FORCE +endif +ifneq ($(GFDL_INVARIANT_FREE),yes) + ifneq ($(nodoc_profile),yes) + with_doc := yes + endif +endif + +# ---------- settings for cross builds ---------- + # Cross configuration support. Check for an environment variable # $GDB_TARGET, or a file debian/target. ifndef GDB_TARGET @@ -54,8 +62,7 @@ DEB_TARGET_ALIAS ?= $(DEB_TARGET_GNU_TYPE) ifneq ($(GDB_TARGET),) -DEB_CONFIGURE_GDB_DATADIR := "\$${prefix}/share/gdb-$(DEB_TARGET_GNU_TYPE)" -DEB_CONFIGURE_PATH_ARGS += --with-gdb-datadir=$(DEB_CONFIGURE_GDB_DATADIR) + configure_target_args = --with-gdb-datadir="\$${prefix}/share/gdb-$(DEB_TARGET_GNU_TYPE)" endif ifeq ($(DEB_TARGET_ARCH),) @@ -70,28 +77,10 @@ # package names (e.g. gcc-powerpc). TP = $(DEB_TARGET_ALIAS)- TS = -$(DEB_TARGET_ALIAS) - CROSS_FORCE = FORCE -endif - -distribution := $(shell lsb_release -is) -deb_version := $(shell dpkg-parsechangelog | awk '/^Version:/ {print $$2}') - -BUILDDIRMULTIARCH = $(ALL_BUILDDIR)/objdir-multiarch - -run_tests := yes - -# timeouts on the buildd -ifneq (,$(filter armhf, $(DEB_HOST_ARCH))) - run_tests := no -endif - -ifneq (,$(filter nocheck, $(DEB_BUILD_OPTIONS))) - run_tests := no + FORCE_CONTROL = FORCE endif -ifeq (,$(findstring linux, $(DEB_HOST_GNU_SYSTEM))) - run_tests := no -endif +# ---------- configure options, architecture specific ---------- ifeq ($(DEB_HOST_GNU_CPU),ia64) arch_config_args := --with-libunwind-ia64 @@ -100,39 +89,77 @@ arch_config_args += --with-babeltrace # Enable Intel Processor Trace (PT) on Linux x86 platform -#ifneq (,$(filter $(DEB_HOST_ARCH),amd64 i386)) -# arch_config_args += --with-intel-pt -#endif +ifneq (,$(filter $(DEB_HOST_ARCH),amd64 i386)) + arch_config_args += --with-intel-pt +endif ifdef GDB_TARGET - run_tests := no - arch_config_args += --program-prefix=$(TP) \ --target=$(DEB_TARGET_ALIAS) --with-sysroot=/usr/$(DEB_TARGET_ALIAS) else # To avoid file conflicts, only enable the global gdbinit file for native # debuggers. - arch_config_args += --with-system-gdbinit=/etc/gdb/gdbinit + arch_config_args += --with-system-gdbinit=/etc/gdb/gdbinit --with-system-gdbinit-dir=/etc/gdb/gdbinit.d endif -INSTALL = $(install) -export INSTALL +# ---------- running tests? ---------- + +run_tests := yes +ifneq (,$(filter nocheck, $(DEB_BUILD_OPTIONS))) + run_tests := disabled by DEB_BUILD_OPTIONS +endif + +ifeq (,$(findstring linux, $(DEB_HOST_GNU_SYSTEM))) + run_tests := only enabled for linux targets +endif + +ifneq (,$(filter armhf, $(DEB_HOST_ARCH))) + run_tests := not enabled for $(DEB_HOST_ARCH) +endif + +ifdef GDB_TARGET + run_tests := disabled for cross builds +endif + +# ---------- configure options, for all variants ---------- + +variants = default multiarch minimal +ifeq ($(derivative),Ubuntu) + variants = default multiarch +endif # We pass srcdir explicitly to avoid an extra '/.' at the end of it. That # causes a harmless, but ugly, testsuite failure in maint.exp. -EXTRA_FLAGS := --disable-gdbtk --disable-shared \ - --with-pkgversion='$(distribution) $(deb_version)' \ - --srcdir=$(shell pwd) \ - --disable-readline --with-system-readline --with-expat \ - --with-system-zlib --without-lzma \ - --without-guile --without-babeltrace \ - --disable-werror \ - $(arch_config_args) --build=$(DEB_BUILD_GNU_TYPE) - -# Debian does not include 64-bit Python packages, so --with-python -# is here rather than in EXTRA_FLAGS. -DEB_CONFIGURE_EXTRA_FLAGS := --host=$(DEB_HOST_GNU_TYPE) $(EXTRA_FLAGS) \ - --enable-tui --with-lzma --with-python=python3 +common_configure_args = \ + --build=$(DEB_BUILD_GNU_TYPE) \ + --host=$(DEB_HOST_GNU_TYPE) \ + --prefix=/usr \ + --libexecdir="\$${prefix}/lib/gdb" \ + --disable-maintainer-mode \ + --disable-dependency-tracking \ + --disable-silent-rules \ + --disable-gdbtk \ + --disable-shared \ + --with-pkgversion='$(distribution)___$(deb_version)' \ + --srcdir=$(CURDIR) \ + --disable-readline \ + --with-system-readline \ + --with-expat \ + --with-system-zlib \ + --without-guile \ + --without-babeltrace \ + $(arch_config_args) \ + +# $(if $(filter linux, $(DEB_HOST_ARCH_OS)),--with-debuginfod) \ + +default_configure_args = \ + $(common_configure_args) \ + $(configure_target_args) \ + --enable-tui \ + --with-lzma \ + --with-python=python3 \ + --with-xxhash \ + --with-mpfr \ # multiarch targets; this is taken from the binutils-multiarch package but # doesn't seem like a terribly nice list; see @@ -143,6 +170,7 @@ arm-linux-gnu \ arm-linux-gnueabi \ arm-linux-gnueabihf \ + arm-none-eabi \ hppa-linux-gnu \ i686-linux-gnu \ ia64-linux-gnu \ @@ -156,6 +184,7 @@ powerpc-linux-gnuspe \ powerpc64le-linux-gnu \ powerpc64-linux-gnu \ + ppc64-linux-gnu \ riscv32-linux-gnu \ riscv64-linux-gnu \ s390-linux-gnu \ @@ -164,71 +193,74 @@ sparc-linux-gnu \ sparc64-linux-gnu \ x86_64-linux-gnu \ + x86_64-linux-gnux32 \ m32r-linux-gnu # broken, see https://launchpad.net/bugs/1233185 #MULTIARCH_TARGETS := all # --enable-targets=$(MULTIARCH_TARGETS) \ # multiarch flags -DEB_CONFIGURE_FLAGS_MULTIARCH := $(DEB_CONFIGURE_EXTRA_FLAGS) \ + +multiarch_configure_args = \ + $(default_configure_args) \ --enable-64-bit-bfd \ - --enable-targets=`set -- $(MULTIARCH_TARGETS); IFS=,; echo "$$*"` \ - --disable-sim + --enable-targets=$(subst $(SPACE),$(COMMA),$(MULTIARCH_TARGETS)) \ + --disable-sim \ + --enable-obsolete # Minimal flags -DEB_CONFIGURE_FLAGS_MIN := --host=$(DEB_HOST_GNU_TYPE) $(EXTRA_FLAGS) \ - --disable-tui --without-python --without-babeltrace - -# Support parallel= in DEB_BUILD_OPTIONS (see #209008) -COMMA = , -ifneq (,$(filter parallel=%,$(subst $(COMMA), ,$(DEB_BUILD_OPTIONS)))) - NJOBS := -j $(subst parallel=,,$(filter parallel=%,$(subst $(COMMA), ,$(DEB_BUILD_OPTIONS)))) -endif - -DEB_MAKE_BUILD_TARGET = $(NJOBS) all - -BUILDDIRSOURCE := $(ALL_BUILDDIR)/gdb -BUILDDIRMIN := $(ALL_BUILDDIR)/gdb-minimal - -# This should probably be common-post-build-arch, but that runs during -# install, under fakeroot, in CDBS 0.4.21. -build/gdb$(TS):: check-stamp - $(MAKE) -C $(DEB_BUILDDIR) info - $(MAKE) -C $(DEB_BUILDDIR)/gdb/doc refcard.dvi refcard.ps - -build/gdb-doc:: check-stamp - $(MAKE) -C $(DEB_BUILDDIR)/gdb/doc pdf html - -build/gdb-multiarch:: build-multiarch-stamp -build-multiarch-stamp: - mkdir -p $(BUILDDIRMULTIARCH) - cd $(BUILDDIRMULTIARCH) && CFLAGS="$(CFLAGS)" \ - $(shell pwd)/configure $(DEB_CONFIGURE_NORMAL_ARGS) $(DEB_CONFIGURE_DEBUG_ARGS) $(DEB_CONFIGURE_FLAGS_MULTIARCH) - cd $(BUILDDIRMULTIARCH) && $(DEB_MAKE_ENVVARS) $(MAKE) $(NJOBS) +minimal_configure_args = \ + $(common_configure_args) \ + --disable-tui \ + --without-python \ + --without-babeltrace \ + --disable-source-highlight \ + --without-mpfr \ + +# ---------- configure and build targets ---------- + +builddir_default = build/default +builddir_minimal = build/minimal +builddir_multiarch = build/multiarch +builddir_source = build/gdb + +stamps/configure-%: + @mkdir -p stamps + rm -rf $(builddir_$*) + mkdir -p $(builddir_$*) + @echo "gdb-$*: configured with: $(subst ___, ,$(foreach i,$($*_configure_args),$(i)\n\t))" + cd $(builddir_$*) && CFLAGS="$(CFLAGS)" \ + ../../configure $(subst ___,$(SPACE),$($*_configure_args)) touch $@ -build/gdb-minimal:: build-minimal-stamp -build-minimal-stamp: - mkdir -p $(BUILDDIRMIN) - cd $(BUILDDIRMIN) && CFLAGS="$(CFLAGS)" \ - $(shell pwd)/configure $(DEB_CONFIGURE_NORMAL_ARGS) $(DEB_CONFIGURE_DEBUG_ARGS) $(DEB_CONFIGURE_FLAGS_MIN) - cd $(BUILDDIRMIN) && $(DEB_MAKE_ENVVARS) $(MAKE) $(NJOBS) +stamps/build-%: stamps/configure-% + V=1 $(MAKE) -C $(builddir_$*) $(NJOBS) + $(if $(filter yes, $(nodoc_profile)),, \ + $(if $(filter default, $*), \ + $(MAKE) -C $(builddir_default) info)) + $(if $(filter yes, $(nodoc_profile)),, \ + $(if $(filter default, $*), \ + $(MAKE) -C $(builddir_$*)/gdb/doc refcard.dvi refcard.ps)) touch $@ -check-stamp: +stamps/check: stamps/build-default ifeq ($(run_tests),yes) - $(MAKE) $(NJOBS) -C $(DEB_BUILDDIR)/gdb check \ - || echo "**Tests failed, of course.**" - -ps ux - -kill $$(ps x|grep -v awk | awk '/interrupt-daemon/ {print $$1}') - sleep 5 - -kill -9 $$(ps x|grep -v awk | awk '/interrupt-daemon/ {print $$1}') + $(MAKE) $(NJOBS) -C $(builddir_default)/gdb check \ + || echo "*** Tests failed, of course. ***" +else + @echo "***Tests disabled: $(run_tests) ***" endif touch $@ -clean:: - rm -f check-stamp build-multiarch-stamp - rm -rf $(ALL_BUILDDIR) +stamps/build-doc: stamps/build-default + $(MAKE) -C $(builddir_default)/gdb/doc pdf html + +# ---------- installation and packaging targets ---------- + +clean: debian/control + dh_clean + rm -rf stamps build + rm -f debian/files if test -f gdb/version.in.backup; then \ mv -f gdb/version.in.backup gdb/version.in; \ @@ -242,41 +274,96 @@ # updates the copy in the source directory. find bfd -name bfd.info\* | xargs --no-run-if-empty touch -binary-post-install/gdb$(TS) :: - if [ -x debian/tmp/usr/bin/run ]; then \ - mv debian/tmp/usr/bin/run \ - debian/gdb$(TS)/usr/bin/$(DEB_TARGET_ALIAS)-run; \ +install-pre: + dh_prep + +install: install-pre + : # gdb install + $(MAKE) -C $(builddir_default) install DESTDIR=$(CURDIR)/debian/tmp + rm -rf debian/gdb-doc/usr/share/man + + dh_install + + install -d debian/gdb$(TS)/usr/share/man/man1; \ + install -m 644 debian/gcore.1 debian/gdb$(TS)/usr/share/man/man1/. + + if [ -x debian/tmp/usr/bin/run ]; then \ + mv debian/tmp/usr/bin/run \ + debian/gdb$(TS)/usr/bin/$(DEB_TARGET_ALIAS)-run; \ fi - if [ -x debian/tmp/usr/share/man/man1/run.1 ]; then \ - mv debian/tmp/usr/share/man/man1/run.1 \ - debian/gdb$(TS)/usr/share/man/man1/$(DEB_TARGET_ALIAS)-run.1; \ + if [ -r debian/tmp/usr/share/man/man1/run.1 ]; then \ + mv debian/tmp/usr/share/man/man1/run.1 \ + debian/gdb$(TS)/usr/share/man/man1/$(DEB_TARGET_ALIAS)-run.1; \ fi +ifneq ($(GFDL_INVARIANT_FREE),yes) + install -d debian/gdb$(TS)/usr/share/man/man5 + install -m 644 $(builddir_default)/gdb/doc/gdbinit.5 \ + debian/gdb$(TS)/usr/share/man/man5/. + install -m 644 $(builddir_default)/gdb/doc/gdb.1 \ + debian/gdb$(TS)/usr/share/man/man1/. + install -m 644 $(builddir_default)/gdb/doc/gdb-add-index.1 \ + debian/gdb$(TS)/usr/share/man/man1/. +endif + ifeq ($(run_tests),yes) + ifneq (,$(wildcard $(builddir_default)/gdb/testsuite/gdb.sum)) install -d debian/gdb$(TS)/usr/share/doc/gdb - install -m 644 $(DEB_BUILDDIR)/gdb/testsuite/gdb.sum \ + install -m 644 $(builddir_default)/gdb/testsuite/gdb.sum \ debian/gdb$(TS)/usr/share/doc/gdb/check.log + endif endif ifneq ($(DEB_CROSS),yes) - # Only ship a global gdbinit for the native GDB. + : # Only ship a global gdbinit for the native GDB. install -d debian/gdb$(TS)/etc/gdb + install -d debian/gdb$(TS)/etc/gdb/gdbinit.d install -m 644 debian/gdbinit debian/gdb$(TS)/etc/gdb/ - # Likewise gdb-add-index + : # Likewise gdb-add-index install -m 755 gdb/contrib/gdb-add-index.sh debian/gdb$(TS)/usr/bin/gdb-add-index endif rm -f debian/gdb$(TS)/usr/bin/$(TP)gdbtui install -m 755 debian/gdbtui debian/gdb$(TS)/usr/bin/$(TP)gdbtui -binary-post-install/gdb-doc :: + : # gdb-multiarch install + install -d debian/gdb-multiarch/usr/bin + install -m 755 $(builddir_multiarch)/gdb/gdb debian/gdb-multiarch/usr/bin/gdb-multiarch + + : # gdbserver install + install -d debian/gdbserver/usr/lib + : # This file is only built on some arches (x86 ones, so far) + -install debian/tmp/usr/lib/libinproctrace.so debian/gdbserver/usr/lib/ +ifneq ($(GFDL_INVARIANT_FREE),yes) + install -d debian/gdbserver/usr/share/man/man1 + install -m 644 $(builddir_default)/gdb/doc/gdbserver.1 \ + debian/gdbserver/usr/share/man/man1/. +endif + +ifneq (,$(filter minimal, $(variants))) + : # gdb-minimal install + install -d debian/gdb-minimal/usr/bin + $(INSTALL) -m 755 -o root -g root \ + $(builddir_minimal)/gdb/gdb debian/gdb-minimal/usr/bin/gdb + + $(INSTALL) -m 755 -o root -g root \ + $(builddir_minimal)/gdb/gcore debian/gdb-minimal/usr/bin/gcore +endif + + : # Only ship a global gdbinit for the native GDB. + install -d debian/gdb-minimal/etc/gdb + install -d debian/gdb-minimal/etc/gdb/gdbinit.d + install -m 644 debian/gdbinit debian/gdb-minimal/etc/gdb/ + +ifeq ($(with_doc),yes) install -d debian/gdb-doc/usr/share/info install -m 644 debian/tmp/usr/share/info/gdb.info debian/gdb-doc/usr/share/info/. install -m 644 debian/tmp/usr/share/info/stabs.info debian/gdb-doc/usr/share/info/. - $(MAKE) -C $(DEB_BUILDDIR)/gdb/doc DESTDIR=$(CURDIR)/debian/gdb-doc \ + $(MAKE) -C $(builddir_default)/gdb/doc DESTDIR=$(CURDIR)/debian/gdb-doc \ pdfdir=/usr/share/doc/gdb-doc/pdf \ htmldir=/usr/share/doc/gdb-doc/html \ install-html install-pdf + : # This manual documents a long-obsolete facility rm -f debian/gdb-doc/usr/share/info/annota* rm -rf debian/gdb-doc/usr/share/doc/gdb-doc/*/annota* @@ -287,75 +374,100 @@ install -d debian/gdb-doc/usr/share/doc/gdb ln -s ../gdb-doc/html debian/gdb-doc/usr/share/doc/gdb/html ln -s ../gdb-doc/pdf debian/gdb-doc/usr/share/doc/gdb/pdf +endif -binary-post-install/gdb-multiarch :: - install -d debian/gdb-multiarch/usr/bin - install -s -m 755 $(BUILDDIRMULTIARCH)/gdb/gdb debian/gdb-multiarch/usr/bin/gdb-multiarch - rm -rf debian/gdb-multiarch/usr/share/doc/gdb-multiarch - ln -s gdb debian/gdb-multiarch/usr/share/doc/gdb-multiarch - -binary-post-install/gdbserver :: - install -d debian/gdbserver/usr/lib - # This file is only built on some arches (x86 ones, so far) - if [ -f debian/tmp/usr/lib/libinproctrace.so ]; then \ - mkdir -p debian/gdbserver/usr/lib/$(DEB_HOST_MULTIARCH); \ - install debian/tmp/usr/lib/libinproctrace.so debian/gdbserver/usr/lib/$(DEB_HOST_MULTIARCH); \ - fi - -binary-post-install/gdb-minimal :: - install -d debian/gdb-minimal/usr/bin - $(INSTALL) -m 755 -o root -g root \ - $(BUILDDIRMIN)/gdb/gdb debian/gdb-minimal/usr/bin/gdb - - $(INSTALL) -m 755 -o root -g root \ - $(BUILDDIRMIN)/gdb/gcore debian/gdb-minimal/usr/bin/gcore - - # Only ship a global gdbinit for the native GDB. - install -d debian/gdb-minimal/etc/gdb - install -m 644 debian/gdbinit debian/gdb-minimal/etc/gdb/ - -binary-post-install/gdb-source :: +install-indep: install-pre + : # gdb-source install install -d debian/gdb-source/usr/src - mkdir -p $(BUILDDIRSOURCE) - tar --exclude build --exclude .git -cf - . \ - | (cd $(BUILDDIRSOURCE) && tar -xf -) - cd $(BUILDDIRSOURCE) && debian/rules clean - cd $(dir $(BUILDDIRSOURCE)) \ - && tar -cjf $(shell pwd)/debian/gdb-source/usr/src/gdb.tar.bz2 \ - $(notdir $(BUILDDIRSOURCE)) + mkdir -p $(builddir_source) + tar --exclude build --exclude stamps --exclude .git -cf - . \ + | (cd $(builddir_source) && tar -xf -) + cd $(builddir_source) && debian/rules clean + cd $(dir $(builddir_source)) \ + && tar cfJ $(CURDIR)/debian/gdb-source/usr/src/gdb.tar.xz \ + --format=gnu \ + --mode=755 \ + --mtime="@$(SOURCE_DATE_EPOCH)" --clamp-mtime \ + --numeric-owner --owner=0 --group=0 \ + --sort=name \ + $(notdir $(builddir_source)) -debian/control:: debian/control.in $(CROSS_FORCE) + +debian/control: debian/control.in debian/control.minimal debian/control.doc $(FORCE_CONTROL) cat debian/control.in \ | sed "s/@TS@/$(TS)/g" \ > debian/control +ifneq (,$(filter minimal, $(variants))) + cat debian/control.minimal >> debian/control +endif +ifeq ($(with_doc),yes) + cat debian/control.doc >> debian/control +endif ifeq ($(DEB_CROSS),yes) - sed -i "/Package: gdb64/,\$$ d" -i "/Package: gdb-multiarch/,\$$ d" debian/control + sed -i "/Package: gdb-multiarch/,\$$ d" debian/control sed "s+/gdb+/$(TP)gdb+g; s+usr/share/$(TP)gdb+usr/share/gdb$(TS)+g" \ debian/gdb.install > debian/gdb$(TS).install endif -# The default changelog is the top level one, which is useless. -DEB_INSTALL_CHANGELOGS_ALL = - -DEB_INSTALL_DOCS_gdb$(TS) = gdb/NEWS gdb/README gdb/doc/refcard.tex \ - $(DEB_BUILDDIR)/gdb/doc/refcard.dvi \ - $(DEB_BUILDDIR)/gdb/doc/refcard.ps \ - debian/README.python_switch \ - gdb/contrib/ -DEB_INSTALL_CHANGELOGS_gdb$(TS) = gdb/ChangeLog -ifneq ($(DEB_CROSS),yes) -DEB_INSTALL_MANPAGES_gdb$(TS) = $(DEB_BUILDDIR)/gdb/doc/gdb.1 \ - $(DEB_BUILDDIR)/gdb/doc/gcore.1 +gdb_substvars = +ifeq (,$(filter minimal, $(variants))) + gdb_substvars = -Vgdb:minimal='gdb-minimal (= $${binary:Version})' +endif + +build-indep: $(foreach v,$(variants),stamps/build-$(v)) $(if $(filter yes,$(with_doc)),stamps/build-doc) +build-arch: $(foreach v,$(variants),stamps/build-$(v)) stamps/check +build: build-arch build-indep + +binary-indep: build-indep install install-indep + dh_installdocs -i + dh_installchangelogs -i + dh_strip -i + dh_compress -i -X.pdf + dh_fixperms -i + dh_installdeb -i + dh_shlibdeps -i + dh_gencontrol -i + dh_md5sums -i + dh_builddeb -i + +binary-arch: build-arch install + dh_installdocs -pgdb$(TS) \ + gdb/NEWS gdb/README gdb/doc/refcard.tex \ + $(if $(filter yes, $(nodoc_profile)),, \ + $(builddir_default)/gdb/doc/refcard.dvi \ + $(builddir_default)/gdb/doc/refcard.ps) \ + gdb/contrib/ + dh_installchangelogs -pgdb$(TS) gdb/ChangeLog + +ifneq (,$(filter minimal, $(variants))) + dh_installdocs -pgdb-minimal \ + gdb/NEWS gdb/README gdb/doc/refcard.tex \ + $(if $(filter yes, $(nodoc_profile)),, \ + $(builddir_default)/gdb/doc/refcard.dvi \ + $(builddir_default)/gdb/doc/refcard.ps) + dh_installchangelogs -pgdb-minimal -XChangeLog endif -DEB_INSTALL_DOCS_gdbserver = gdb/gdbserver/README -DEB_INSTALL_CHANGELOGS_gdbserver = gdb/gdbserver/ChangeLog -ifneq ($(DEB_CROSS),yes) -DEB_INSTALL_MANPAGES_gdbserver = $(DEB_BUILDDIR)/gdb/doc/gdbserver.1 -endif + dh_installdocs -pgdbserver gdbserver/README + dh_installchangelogs -pgdbserver gdbserver/ChangeLog + + install -d debian/gdb-multiarch/usr/share/doc + ln -s gdb debian/gdb-multiarch/usr/share/doc/gdb-multiarch + + dh_dwz -a + dh_strip -pgdb$(TS) --dbgsym-migration='gdb-dbg (<< 7.12-1~)' + dh_strip -a -Ngdb$(TS) + dh_compress -a + dh_fixperms -a + dh_installdeb -a + dh_shlibdeps -a + dh_gencontrol -a -- $(gdb_substvars) + dh_md5sums -a + dh_builddeb -a + +binary: binary-indep binary-arch -DEB_INSTALL_DOCS_gdb-minimal = $(DEB_INSTALL_DOCS_gdb$(TS)) -DEB_INSTALL_CHANGELOGS_gdb-minimal = -XChangeLog +.PHONY: build build-arch build-indep clean binary-indep binary-arch binary install .PHONY: FORCE FORCE: diff -Nru gdb-9.1/debian/salsa-ci.yml gdb-10.2/debian/salsa-ci.yml --- gdb-9.1/debian/salsa-ci.yml 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/debian/salsa-ci.yml 2020-09-19 19:55:03.000000000 +0000 @@ -0,0 +1,7 @@ +--- +include: + - https://salsa.debian.org/salsa-ci-team/pipeline/raw/master/salsa-ci.yml + - https://salsa.debian.org/salsa-ci-team/pipeline/raw/master/pipeline-jobs.yml + +variables: + DEB_BUILD_OPTIONS: 'nocheck' diff -Nru gdb-9.1/debian/sanitize-gdb.sh gdb-10.2/debian/sanitize-gdb.sh --- gdb-9.1/debian/sanitize-gdb.sh 2015-09-13 11:58:25.000000000 +0000 +++ gdb-10.2/debian/sanitize-gdb.sh 2020-09-19 19:55:03.000000000 +0000 @@ -29,6 +29,7 @@ src=src/gdb-$version dest=gdb-$debversion +destdoc=gdb-doc-$debversion if ! test -d "$src"; then echo "Could not find source directory $src" @@ -43,6 +44,8 @@ src=`cd "$src" && pwd` cp -a "$src" "$dest" +cp -a "$src" "$destdoc" + pushd "$dest" > /dev/null # All of the gdb manpages are GFDL'd now @@ -70,14 +73,11 @@ tar --auto-compress -cf "$dfsg" gdb-$debversion -case "$tarball" in - *.xz) cp "$tarball" "$doc" ;; - *.bz2) bzcat "$tarball" | xz > "$doc" ;; - *.gz) zcat "$tarball" | xz > "$doc" ;; - *) - echo "wtf is: $tarball" - ;; -esac +pushd "$destdoc" > /dev/null +rm -f $(find . \( -name \*.chm \)) +popd > /dev/null + +tar --auto-compress -cf "$doc" gdb-doc-$debversion # XXX maybe we should install this as an exit handler? cd "$olddir" diff -Nru gdb-9.1/debian/source/lintian-overrides gdb-10.2/debian/source/lintian-overrides --- gdb-9.1/debian/source/lintian-overrides 2014-11-20 09:37:42.000000000 +0000 +++ gdb-10.2/debian/source/lintian-overrides 2020-09-19 19:55:03.000000000 +0000 @@ -1,6 +1,3 @@ # We do not use the included readline. gdb source: outdated-autotools-helper-file readline/support/config.guess * gdb source: outdated-autotools-helper-file readline/support/config.sub * - -# fine for Ubuntu -gdb source: license-problem-gfdl-invariants diff -Nru gdb-9.1/debian/upstream/signing-key.asc gdb-10.2/debian/upstream/signing-key.asc --- gdb-9.1/debian/upstream/signing-key.asc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/debian/upstream/signing-key.asc 2020-09-19 19:55:03.000000000 +0000 @@ -0,0 +1,30 @@ +-----BEGIN PGP ARMORED FILE----- +Comment: Use "gpg --dearmor" for unpacking + +mQGiBENhPS0RBACoqcuAmCbDDjWxpxdGc6Jgc4IEselZDipRXC1gH8ahJ0Z5xs8Y +b8oD/mp3RkE3vM9Q4GfhPTWmcqHonIYXZdn4//eZm20D7m2hAhIMrwBSSGA/EBZT +UNqT7qXkWk/71JHJHmVx2GbTfIripzssQ//uoB0DhXaZNFaXI283yp5pwwCgrZH/ +M+10BH2QmQfbcERSEvYpSLkD/RWh3clEnckDTLMCqLWyzr67YOvGMzgv4W+hxa8A +EmMBsCqSUmgHp4jwnJmGEKUoPFgU/16+TahaOG2g5YQ4efCSSolQUzJ7laK2QZff +wCCgemz2tjeyJh+OwVo13Uq7x53KOmwCaMZzACVjPbW00U986agXrvj/GIy55+0S +/AJsA/9aw+K9BJ9HPIPAZwryP6kksOQwXfnDerla1Xwe0C1xr8BUOHUzTk23ioK+ +t9G6u6bcXF7Gz/dHzi/8D6HcxEK6bt4P+O9Rju1f/a3qcQr17KZokEI+L5Yb3Qvx +DcRfQnkEMOzgcZnVnIrWLPLe655EhrGRTYADA9t5vask7qF0abQmSm9lbCBCcm9i +ZWNrZXIgPGJyb2JlY2tlckBhZGFjb3JlLmNvbT6IXgQTEQIAHgUCQ2E9LQIbAwYL +CQgHAwIDFQIDAxYCAQIeAQIXgAAKCRCS7bBL/zJc81VRAKCodhMgu1Qg/PEZ5XLA +HSqdIhRFWACeI2X+ZmeWUF3oGXhfRi/iZpMsxfq5Ag0EQ2E9NhAIAIVJxexoQ4S7 +3FMpd6niMh8ASbxd0ZfcgZOAH55r0YEKN0WBEsrECnF0ntCbiwDSJGFU/jO/TCOE +xGAhW/ogRMSqitqiLl9t7lB0pDmHZ7AAeOF1iYODP6/em3AHTMyEQZYEqEq9LrGl +kXyZWm15WLZEfxYPDrTHUP0D6yOR66Kkm2dsQfkIHO/EuDaKtoqtLLz5xBcTHJPV +mP6mY4Gi8RDh3XwsHzKn4LZe6GLbXLGYFRy3gNSQqgadWzXm9P+avzaCn1arbn1B +ZHdq9ZjE0OFt9gbC/ZhPEj8609py1+j16IRGiQlFOt5O9jQ31WyEDx3FGK1ja+9G +vX2OdAPv+hcAAwcH/jUXmRczmM9QAPGpT/rhSEokVqfH7ZWthkA9R+4cLIw4Eeyx +yNz4PUc53GYDfAgp2lFdxOb6Z/ODmMowDC/cHBWO4/UbnlbK8c2Z9jDIPsaXSjMS +ea0ugp11GCuBvlMbm7Hr/kqzIWCgHPfs2IjJQuzbUhUv8vLzbnaJF46h3A9ZdYih +VcMpIRaxp5og2zB/FZYTKXjmkby5CIOFc0rP2M9lpGLZUSFRFn3/kc4TULKoBMth +UhcTsfQ8U5KIF/R/rFFypuWRRZhnMr2wLrJmoMu3+zeKsrkOnn5S/gljFIMDqMaG +AScFcUkFflc7sk+3eWvxrw0Mj+7Brm+R3AMPVQWISQQYEQIACQUCQ2E9NgIbDAAK +CRCS7bBL/zJc87q8AJ98YZ0C4dERrs3wdVCAu2lQjDg+vACeKigwTyMS8NQctwHH +sbhLkW5Yfyk= +=teew +-----END PGP ARMORED FILE----- diff -Nru gdb-9.1/debian/watch gdb-10.2/debian/watch --- gdb-9.1/debian/watch 2014-11-09 15:22:58.000000000 +0000 +++ gdb-10.2/debian/watch 2020-09-19 19:55:03.000000000 +0000 @@ -1,3 +1,3 @@ # See uscan(1) for format version=3 -opts=pgpsigurlmangle=s/$/.sig/ http://ftp.gnu.org/gnu/gdb/gdb-(.*)\.tar\.(?:gz|bz2|xz) +opts=pgpsigurlmangle=s/$/.sig/ https://ftp.gnu.org/gnu/gdb/gdb-(.*)\.tar\.(?:gz|bz2|xz) diff -Nru gdb-9.1/djunpack.bat gdb-10.2/djunpack.bat --- gdb-9.1/djunpack.bat 2020-02-08 12:54:26.000000000 +0000 +++ gdb-10.2/djunpack.bat 2021-04-25 04:10:51.000000000 +0000 @@ -17,8 +17,8 @@ Rem The following 2 lines need to be changed with each new GDB release, to Rem be identical to the name of the top-level directory where the GDB Rem distribution unpacks itself. -set GDBVER=$package-9.1 -if "%GDBVER%"=="$package-9.1" GoTo EnvOk +set GDBVER=$package-10.2 +if "%GDBVER%"=="$package-10.2" GoTo EnvOk Rem If their environment space is too small, re-exec with a larger one command.com /e:4096 /c %0 %1 GoTo End diff -Nru gdb-9.1/etc/ChangeLog gdb-10.2/etc/ChangeLog --- gdb-9.1/etc/ChangeLog 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/etc/ChangeLog 2021-04-25 04:06:26.000000000 +0000 @@ -1,3 +1,7 @@ +2020-01-15 Simon Marchi + + * texi2pod.pl: Handle @t{...} tags. + 2018-06-19 Simon Marchi * configure.in: Remove AC_PREREQ. diff -Nru gdb-9.1/etc/texi2pod.pl gdb-10.2/etc/texi2pod.pl --- gdb-9.1/etc/texi2pod.pl 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/etc/texi2pod.pl 2021-04-25 04:06:26.000000000 +0000 @@ -381,6 +381,7 @@ s/\@file\{([^\}]*)\}/F<$1>/g; s/\@w\{([^\}]*)\}/S<$1>/g; s/\@(?:dmn|math)\{([^\}]*)\}/$1/g; + s/\@t\{([^\}]*)\}/$1/g; # keep references of the form @ref{...}, print them bold s/\@(?:ref)\{([^\}]*)\}/B<$1>/g; diff -Nru gdb-9.1/gdb/aarch32-linux-nat.c gdb-10.2/gdb/aarch32-linux-nat.c --- gdb-9.1/gdb/aarch32-linux-nat.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/aarch32-linux-nat.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 1999-2020 Free Software Foundation, Inc. +/* Copyright (C) 1999-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/aarch32-linux-nat.h gdb-10.2/gdb/aarch32-linux-nat.h --- gdb-9.1/gdb/aarch32-linux-nat.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/aarch32-linux-nat.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 1999-2020 Free Software Foundation, Inc. +/* Copyright (C) 1999-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/aarch32-tdep.c gdb-10.2/gdb/aarch32-tdep.c --- gdb-9.1/gdb/aarch32-tdep.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/aarch32-tdep.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2019-2020 Free Software Foundation, Inc. +/* Copyright (C) 2019-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/aarch32-tdep.h gdb-10.2/gdb/aarch32-tdep.h --- gdb-9.1/gdb/aarch32-tdep.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/aarch32-tdep.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2019-2020 Free Software Foundation, Inc. +/* Copyright (C) 2019-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/aarch64-fbsd-nat.c gdb-10.2/gdb/aarch64-fbsd-nat.c --- gdb-9.1/gdb/aarch64-fbsd-nat.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/aarch64-fbsd-nat.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Native-dependent code for FreeBSD/aarch64. - Copyright (C) 2017-2020 Free Software Foundation, Inc. + Copyright (C) 2017-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -124,8 +124,9 @@ } } +void _initialize_aarch64_fbsd_nat (); void -_initialize_aarch64_fbsd_nat (void) +_initialize_aarch64_fbsd_nat () { add_inf_child_target (&the_aarch64_fbsd_nat_target); } diff -Nru gdb-9.1/gdb/aarch64-fbsd-tdep.c gdb-10.2/gdb/aarch64-fbsd-tdep.c --- gdb-9.1/gdb/aarch64-fbsd-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/aarch64-fbsd-tdep.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for FreeBSD/aarch64. - Copyright (C) 2017-2020 Free Software Foundation, Inc. + Copyright (C) 2017-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -134,7 +134,7 @@ regcache_supply_regset, regcache_collect_regset }; -/* Implement the "regset_from_core_section" gdbarch method. */ +/* Implement the "iterate_over_regset_sections" gdbarch method. */ static void aarch64_fbsd_iterate_over_regset_sections (struct gdbarch *gdbarch, @@ -170,8 +170,9 @@ (gdbarch, aarch64_fbsd_iterate_over_regset_sections); } +void _initialize_aarch64_fbsd_tdep (); void -_initialize_aarch64_fbsd_tdep (void) +_initialize_aarch64_fbsd_tdep () { gdbarch_register_osabi (bfd_arch_aarch64, 0, GDB_OSABI_FREEBSD, aarch64_fbsd_init_abi); diff -Nru gdb-9.1/gdb/aarch64-fbsd-tdep.h gdb-10.2/gdb/aarch64-fbsd-tdep.h --- gdb-9.1/gdb/aarch64-fbsd-tdep.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/aarch64-fbsd-tdep.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* FreeBSD/aarch64 target support, prototypes. - Copyright (C) 2017-2020 Free Software Foundation, Inc. + Copyright (C) 2017-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/aarch64-linux-nat.c gdb-10.2/gdb/aarch64-linux-nat.c --- gdb-9.1/gdb/aarch64-linux-nat.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/aarch64-linux-nat.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Native-dependent code for GNU/Linux AArch64. - Copyright (C) 2011-2020 Free Software Foundation, Inc. + Copyright (C) 2011-2021 Free Software Foundation, Inc. Contributed by ARM Ltd. This file is part of GDB. @@ -959,7 +959,7 @@ /* Find the current gdbarch the same way as process_stratum_target. Only return it if the current vector length matches the one in the tdep. */ - inferior *inf = find_inferior_ptid (ptid); + inferior *inf = find_inferior_ptid (this, ptid); gdb_assert (inf != NULL); if (vq == gdbarch_tdep (inf->gdbarch)->vq) return inf->gdbarch; @@ -970,7 +970,7 @@ unavailable, to distinguish from an unset value of 0. */ struct gdbarch_info info; gdbarch_info_init (&info); - info.bfd_arch_info = bfd_lookup_arch (bfd_arch_spu, bfd_mach_spu); + 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); } @@ -996,8 +996,9 @@ &maintenance_show_cmdlist); } +void _initialize_aarch64_linux_nat (); void -_initialize_aarch64_linux_nat (void) +_initialize_aarch64_linux_nat () { add_show_debug_regs_command (); diff -Nru gdb-9.1/gdb/aarch64-linux-tdep.c gdb-10.2/gdb/aarch64-linux-tdep.c --- gdb-9.1/gdb/aarch64-linux-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/aarch64-linux-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for GNU/Linux AArch64. - Copyright (C) 2009-2020 Free Software Foundation, Inc. + Copyright (C) 2009-2021 Free Software Foundation, Inc. Contributed by ARM Ltd. This file is part of GDB. @@ -582,7 +582,7 @@ size - SVE_HEADER_SIZE); } -/* Implement the "regset_from_core_section" gdbarch method. */ +/* Implement the "iterate_over_regset_sections" gdbarch method. */ static void aarch64_linux_iterate_over_regset_sections (struct gdbarch *gdbarch, @@ -1665,8 +1665,9 @@ set_gdbarch_gcc_target_options (gdbarch, aarch64_linux_gcc_target_options); } +void _initialize_aarch64_linux_tdep (); void -_initialize_aarch64_linux_tdep (void) +_initialize_aarch64_linux_tdep () { gdbarch_register_osabi (bfd_arch_aarch64, 0, GDB_OSABI_LINUX, aarch64_linux_init_abi); diff -Nru gdb-9.1/gdb/aarch64-linux-tdep.h gdb-10.2/gdb/aarch64-linux-tdep.h --- gdb-9.1/gdb/aarch64-linux-tdep.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/aarch64-linux-tdep.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* GNU/Linux on AArch64 target support, prototypes. - Copyright (C) 2012-2020 Free Software Foundation, Inc. + Copyright (C) 2012-2021 Free Software Foundation, Inc. Contributed by ARM Ltd. This file is part of GDB. diff -Nru gdb-9.1/gdb/aarch64-newlib-tdep.c gdb-10.2/gdb/aarch64-newlib-tdep.c --- gdb-9.1/gdb/aarch64-newlib-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/aarch64-newlib-tdep.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for Newlib AArch64. - Copyright (C) 2011-2020 Free Software Foundation, Inc. + Copyright (C) 2011-2021 Free Software Foundation, Inc. Contributed by ARM Ltd. This file is part of GDB. @@ -36,8 +36,9 @@ tdep->jb_pc = 11; } +void _initialize_aarch64_newlib_tdep (); void -_initialize_aarch64_newlib_tdep (void) +_initialize_aarch64_newlib_tdep () { gdbarch_register_osabi (bfd_arch_aarch64, 0, GDB_OSABI_NEWLIB, aarch64_newlib_init_abi); diff -Nru gdb-9.1/gdb/aarch64-ravenscar-thread.c gdb-10.2/gdb/aarch64-ravenscar-thread.c --- gdb-9.1/gdb/aarch64-ravenscar-thread.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/aarch64-ravenscar-thread.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Ravenscar Aarch64 target support. - Copyright (C) 2017-2020 Free Software Foundation, Inc. + Copyright (C) 2017-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/aarch64-ravenscar-thread.h gdb-10.2/gdb/aarch64-ravenscar-thread.h --- gdb-9.1/gdb/aarch64-ravenscar-thread.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/aarch64-ravenscar-thread.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Ravenscar Aarch64 target support. - Copyright (C) 2017-2020 Free Software Foundation, Inc. + Copyright (C) 2017-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/aarch64-tdep.c gdb-10.2/gdb/aarch64-tdep.c --- gdb-9.1/gdb/aarch64-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/aarch64-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Common target dependent code for GDB on AArch64 systems. - Copyright (C) 2009-2020 Free Software Foundation, Inc. + Copyright (C) 2009-2021 Free Software Foundation, Inc. Contributed by ARM Ltd. This file is part of GDB. @@ -34,7 +34,7 @@ #include "trad-frame.h" #include "objfiles.h" #include "dwarf2.h" -#include "dwarf2-frame.h" +#include "dwarf2/frame.h" #include "gdbtypes.h" #include "prologue-value.h" #include "target-descriptions.h" @@ -287,6 +287,12 @@ { enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch); int i; + + /* Whether the stack has been set. This should be true when we notice a SP + to FP move or if we are using the SP as the base register for storing + data, in case the FP is ommitted. */ + bool seen_stack_set = false; + /* Track X registers and D registers in prologue. */ pv_t regs[AARCH64_X_REGISTER_COUNT + AARCH64_D_REGISTER_COUNT]; @@ -326,6 +332,10 @@ regs[rd] = pv_add_constant (regs[rn], -inst.operands[2].imm.value); } + + /* Did we move SP to FP? */ + if (rn == AARCH64_SP_REGNUM && rd == AARCH64_FP_REGNUM) + seen_stack_set = true; } else if (inst.opcode->iclass == pcreladdr && inst.operands[1].type == AARCH64_OPND_ADDR_ADRP) @@ -358,6 +368,12 @@ else if (inst.opcode->op == OP_MOVZ) { gdb_assert (inst.operands[0].type == AARCH64_OPND_Rd); + + /* If this shows up before we set the stack, keep going. Otherwise + stop the analysis. */ + if (seen_stack_set) + break; + regs[inst.operands[0].reg.regno] = pv_unknown (); } else if (inst.opcode->iclass == log_shift @@ -399,6 +415,10 @@ stack.store (pv_add_constant (regs[rn], inst.operands[1].addr.offset.imm), size, regs[rt]); + + /* Are we storing with SP as a base? */ + if (rn == AARCH64_SP_REGNUM) + seen_stack_set = true; } else if ((inst.opcode->iclass == ldstpair_off || (inst.opcode->iclass == ldstpair_indexed @@ -442,6 +462,10 @@ if (inst.operands[2].addr.writeback) regs[rn] = pv_add_constant (regs[rn], imm); + /* Ignore the instruction that allocates stack space and sets + the SP. */ + if (rn == AARCH64_SP_REGNUM && !inst.operands[2].addr.writeback) + seen_stack_set = true; } else if ((inst.opcode->iclass == ldst_imm9 /* Signed immediate. */ || (inst.opcode->iclass == ldst_pos /* Unsigned immediate. */ @@ -464,6 +488,10 @@ stack.store (pv_add_constant (regs[rn], imm), size, regs[rt]); if (inst.operands[1].addr.writeback) regs[rn] = pv_add_constant (regs[rn], imm); + + /* Are we storing with SP as a base? */ + if (rn == AARCH64_SP_REGNUM) + seen_stack_set = true; } else if (inst.opcode->iclass == testbranch) { @@ -690,6 +718,117 @@ } } + /* Test handling of movz before setting the frame pointer. */ + { + static const uint32_t insns[] = { + 0xa9bf7bfd, /* stp x29, x30, [sp, #-16]! */ + 0x52800020, /* mov w0, #0x1 */ + 0x910003fd, /* mov x29, sp */ + 0x528000a2, /* mov w2, #0x5 */ + 0x97fffff8, /* bl 6e4 */ + }; + + instruction_reader_test reader (insns); + + trad_frame_reset_saved_regs (gdbarch, cache.saved_regs); + CORE_ADDR end = aarch64_analyze_prologue (gdbarch, 0, 128, &cache, reader); + + /* We should stop at the 4th instruction. */ + SELF_CHECK (end == (4 - 1) * 4); + SELF_CHECK (cache.framereg == AARCH64_FP_REGNUM); + SELF_CHECK (cache.framesize == 16); + } + + /* Test handling of movz/stp when using the stack pointer as frame + pointer. */ + { + static const uint32_t insns[] = { + 0xa9bc7bfd, /* stp x29, x30, [sp, #-64]! */ + 0x52800020, /* mov w0, #0x1 */ + 0x290207e0, /* stp w0, w1, [sp, #16] */ + 0xa9018fe2, /* stp x2, x3, [sp, #24] */ + 0x528000a2, /* mov w2, #0x5 */ + 0x97fffff8, /* bl 6e4 */ + }; + + instruction_reader_test reader (insns); + + trad_frame_reset_saved_regs (gdbarch, cache.saved_regs); + CORE_ADDR end = aarch64_analyze_prologue (gdbarch, 0, 128, &cache, reader); + + /* We should stop at the 5th instruction. */ + SELF_CHECK (end == (5 - 1) * 4); + SELF_CHECK (cache.framereg == AARCH64_SP_REGNUM); + SELF_CHECK (cache.framesize == 64); + } + + /* Test handling of movz/str when using the stack pointer as frame + pointer */ + { + static const uint32_t insns[] = { + 0xa9bc7bfd, /* stp x29, x30, [sp, #-64]! */ + 0x52800020, /* mov w0, #0x1 */ + 0xb9002be4, /* str w4, [sp, #40] */ + 0xf9001be5, /* str x5, [sp, #48] */ + 0x528000a2, /* mov w2, #0x5 */ + 0x97fffff8, /* bl 6e4 */ + }; + + instruction_reader_test reader (insns); + + trad_frame_reset_saved_regs (gdbarch, cache.saved_regs); + CORE_ADDR end = aarch64_analyze_prologue (gdbarch, 0, 128, &cache, reader); + + /* We should stop at the 5th instruction. */ + SELF_CHECK (end == (5 - 1) * 4); + SELF_CHECK (cache.framereg == AARCH64_SP_REGNUM); + SELF_CHECK (cache.framesize == 64); + } + + /* Test handling of movz/stur when using the stack pointer as frame + pointer. */ + { + static const uint32_t insns[] = { + 0xa9bc7bfd, /* stp x29, x30, [sp, #-64]! */ + 0x52800020, /* mov w0, #0x1 */ + 0xb80343e6, /* stur w6, [sp, #52] */ + 0xf80383e7, /* stur x7, [sp, #56] */ + 0x528000a2, /* mov w2, #0x5 */ + 0x97fffff8, /* bl 6e4 */ + }; + + instruction_reader_test reader (insns); + + trad_frame_reset_saved_regs (gdbarch, cache.saved_regs); + CORE_ADDR end = aarch64_analyze_prologue (gdbarch, 0, 128, &cache, reader); + + /* We should stop at the 5th instruction. */ + SELF_CHECK (end == (5 - 1) * 4); + SELF_CHECK (cache.framereg == AARCH64_SP_REGNUM); + SELF_CHECK (cache.framesize == 64); + } + + /* Test handling of movz when there is no frame pointer set or no stack + pointer used. */ + { + static const uint32_t insns[] = { + 0xa9bf7bfd, /* stp x29, x30, [sp, #-16]! */ + 0x52800020, /* mov w0, #0x1 */ + 0x528000a2, /* mov w2, #0x5 */ + 0x97fffff8, /* bl 6e4 */ + }; + + instruction_reader_test reader (insns); + + trad_frame_reset_saved_regs (gdbarch, cache.saved_regs); + CORE_ADDR end = aarch64_analyze_prologue (gdbarch, 0, 128, &cache, reader); + + /* We should stop at the 4th instruction. */ + SELF_CHECK (end == (4 - 1) * 4); + SELF_CHECK (cache.framereg == AARCH64_SP_REGNUM); + SELF_CHECK (cache.framesize == 16); + } + /* Test a prologue in which there is a return address signing instruction. */ if (tdep->has_pauth ()) { @@ -1201,6 +1340,39 @@ return false; } +/* Used for matching BRK instructions for AArch64. */ +static constexpr uint32_t BRK_INSN_MASK = 0xffe0001f; +static constexpr uint32_t BRK_INSN_BASE = 0xd4200000; + +/* Implementation of gdbarch_program_breakpoint_here_p for aarch64. */ + +static bool +aarch64_program_breakpoint_here_p (gdbarch *gdbarch, CORE_ADDR address) +{ + const uint32_t insn_len = 4; + gdb_byte target_mem[4]; + + /* Enable the automatic memory restoration from breakpoints while + we read the memory. Otherwise we may find temporary breakpoints, ones + inserted by GDB, and flag them as permanent breakpoints. */ + scoped_restore restore_memory + = make_scoped_restore_show_memory_breakpoints (0); + + if (target_read_memory (address, target_mem, insn_len) == 0) + { + uint32_t insn = + (uint32_t) extract_unsigned_integer (target_mem, insn_len, + gdbarch_byte_order_for_code (gdbarch)); + + /* Check if INSN is a BRK instruction pattern. There are multiple choices + of such instructions with different immediate values. Different OS' + may use a different variation, but they have the same outcome. */ + return ((insn & BRK_INSN_MASK) == BRK_INSN_BASE); + } + + return false; +} + /* When arguments must be pushed onto the stack, they go on in reverse order. The code below implements a FILO (stack) to do this. */ @@ -1221,7 +1393,7 @@ aarch64_type_align (gdbarch *gdbarch, struct type *t) { t = check_typedef (t); - if (TYPE_CODE (t) == TYPE_CODE_ARRAY && TYPE_VECTOR (t)) + if (t->code () == TYPE_CODE_ARRAY && TYPE_VECTOR (t)) { /* Use the natural alignment for vector types (the same for scalar type), but the maximum alignment is 128-bit. */ @@ -1250,7 +1422,7 @@ if (type == nullptr) return -1; - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_FLT: if (TYPE_LENGTH (type) > 16) @@ -1259,7 +1431,7 @@ if (*fundamental_type == nullptr) *fundamental_type = type; else if (TYPE_LENGTH (type) != TYPE_LENGTH (*fundamental_type) - || TYPE_CODE (type) != TYPE_CODE (*fundamental_type)) + || type->code () != (*fundamental_type)->code ()) return -1; return 1; @@ -1273,7 +1445,7 @@ if (*fundamental_type == nullptr) *fundamental_type = target_type; else if (TYPE_LENGTH (target_type) != TYPE_LENGTH (*fundamental_type) - || TYPE_CODE (target_type) != TYPE_CODE (*fundamental_type)) + || target_type->code () != (*fundamental_type)->code ()) return -1; return 2; @@ -1289,7 +1461,7 @@ if (*fundamental_type == nullptr) *fundamental_type = type; else if (TYPE_LENGTH (type) != TYPE_LENGTH (*fundamental_type) - || TYPE_CODE (type) != TYPE_CODE (*fundamental_type)) + || type->code () != (*fundamental_type)->code ()) return -1; return 1; @@ -1313,13 +1485,13 @@ { int count = 0; - for (int i = 0; i < TYPE_NFIELDS (type); i++) + for (int i = 0; i < type->num_fields (); i++) { /* Ignore any static fields. */ - if (field_is_static (&TYPE_FIELD (type, i))) + if (field_is_static (&type->field (i))) continue; - struct type *member = check_typedef (TYPE_FIELD_TYPE (type, i)); + struct type *member = check_typedef (type->field (i).type ()); int sub_count = aapcs_is_vfp_call_or_return_candidate_1 (member, fundamental_type); @@ -1416,7 +1588,7 @@ { enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); int len = TYPE_LENGTH (type); - enum type_code typecode = TYPE_CODE (type); + enum type_code typecode = type->code (); int regnum = AARCH64_X0_REGNUM + info->ngrn; const bfd_byte *buf = value_contents (arg); @@ -1567,7 +1739,7 @@ struct aarch64_call_info *info, struct type *arg_type, struct value *arg) { - switch (TYPE_CODE (arg_type)) + switch (arg_type->code ()) { case TYPE_CODE_FLT: return pass_in_v (gdbarch, regcache, info, TYPE_LENGTH (arg_type), @@ -1595,10 +1767,10 @@ case TYPE_CODE_STRUCT: case TYPE_CODE_UNION: - for (int i = 0; i < TYPE_NFIELDS (arg_type); i++) + for (int i = 0; i < arg_type->num_fields (); i++) { /* Don't include static fields. */ - if (field_is_static (&TYPE_FIELD (arg_type, i))) + if (field_is_static (&arg_type->field (i))) continue; struct value *field = value_primitive_field (arg, 0, i, arg_type); @@ -1703,7 +1875,7 @@ continue; } - switch (TYPE_CODE (arg_type)) + switch (arg_type->code ()) { case TYPE_CODE_INT: case TYPE_CODE_BOOL: @@ -1934,7 +2106,7 @@ if (tdep->vnv_type == NULL) { - /* The other AArch64 psuedo registers (Q,D,H,S,B) refer to a single value + /* The other AArch64 pseudo registers (Q,D,H,S,B) refer to a single value slice from the non-pseudo vector registers. However NEON V registers are always vector registers, and need constructing as such. */ const struct builtin_type *bt = builtin_type (gdbarch); @@ -2087,12 +2259,12 @@ valbuf += len; } } - else if (TYPE_CODE (type) == TYPE_CODE_INT - || TYPE_CODE (type) == TYPE_CODE_CHAR - || TYPE_CODE (type) == TYPE_CODE_BOOL - || TYPE_CODE (type) == TYPE_CODE_PTR + else if (type->code () == TYPE_CODE_INT + || type->code () == TYPE_CODE_CHAR + || type->code () == TYPE_CODE_BOOL + || type->code () == TYPE_CODE_PTR || TYPE_IS_REFERENCE (type) - || TYPE_CODE (type) == TYPE_CODE_ENUM) + || type->code () == TYPE_CODE_ENUM) { /* If the type is a plain integer, then the access is straight-forward. Otherwise we have to play around a bit @@ -2200,12 +2372,12 @@ valbuf += len; } } - else if (TYPE_CODE (type) == TYPE_CODE_INT - || TYPE_CODE (type) == TYPE_CODE_CHAR - || TYPE_CODE (type) == TYPE_CODE_BOOL - || TYPE_CODE (type) == TYPE_CODE_PTR + else if (type->code () == TYPE_CODE_INT + || type->code () == TYPE_CODE_CHAR + || type->code () == TYPE_CODE_BOOL + || type->code () == TYPE_CODE_PTR || TYPE_IS_REFERENCE (type) - || TYPE_CODE (type) == TYPE_CODE_ENUM) + || type->code () == TYPE_CODE_ENUM) { if (TYPE_LENGTH (type) <= X_REGISTER_SIZE) { @@ -2261,9 +2433,9 @@ gdb_byte *readbuf, const gdb_byte *writebuf) { - if (TYPE_CODE (valtype) == TYPE_CODE_STRUCT - || TYPE_CODE (valtype) == TYPE_CODE_UNION - || TYPE_CODE (valtype) == TYPE_CODE_ARRAY) + if (valtype->code () == TYPE_CODE_STRUCT + || valtype->code () == TYPE_CODE_UNION + || valtype->code () == TYPE_CODE_ARRAY) { if (aarch64_return_in_memory (gdbarch, valtype)) { @@ -2735,9 +2907,10 @@ { /* It is true when condition instruction, such as B.CON, TBZ, etc, is being displaced stepping. */ - int cond = 0; + bool cond = false; - /* PC adjustment offset after displaced stepping. */ + /* PC adjustment offset after displaced stepping. If 0, then we don't + write the PC back, assuming the PC is already the right address. */ int32_t pc_adjust = 0; }; @@ -2815,7 +2988,7 @@ */ emit_bcond (dsd->insn_buf, cond, 8); - dsd->dsc->cond = 1; + dsd->dsc->cond = true; dsd->dsc->pc_adjust = offset; dsd->insn_count = 1; } @@ -2850,7 +3023,7 @@ */ emit_cb (dsd->insn_buf, is_cbnz, aarch64_register (rn, is64), 8); dsd->insn_count = 1; - dsd->dsc->cond = 1; + dsd->dsc->cond = true; dsd->dsc->pc_adjust = offset; } @@ -2875,7 +3048,7 @@ */ emit_tb (dsd->insn_buf, is_tbnz, bit, aarch64_register (rt, 1), 8); dsd->insn_count = 1; - dsd->dsc->cond = 1; + dsd->dsc->cond = true; dsd->dsc->pc_adjust = offset; } @@ -2965,7 +3138,7 @@ /* Implement the "displaced_step_copy_insn" gdbarch method. */ -struct displaced_step_closure * +displaced_step_closure_up aarch64_displaced_step_copy_insn (struct gdbarch *gdbarch, CORE_ADDR from, CORE_ADDR to, struct regcache *regs) @@ -3019,7 +3192,8 @@ dsc = NULL; } - return dsc.release (); + /* This is a work around for a problem with g++ 4.8. */ + return displaced_step_closure_up (dsc.release ()); } /* Implement the "displaced_step_fixup" gdbarch method. */ @@ -3032,11 +3206,20 @@ { aarch64_displaced_step_closure *dsc = (aarch64_displaced_step_closure *) dsc_; + ULONGEST pc; + + regcache_cooked_read_unsigned (regs, AARCH64_PC_REGNUM, &pc); + + if (debug_displaced) + debug_printf ("Displaced: PC after stepping: %s (was %s).\n", + paddress (gdbarch, pc), paddress (gdbarch, to)); + if (dsc->cond) { - ULONGEST pc; + if (debug_displaced) + debug_printf ("Displaced: [Conditional] pc_adjust before: %d\n", + dsc->pc_adjust); - regcache_cooked_read_unsigned (regs, AARCH64_PC_REGNUM, &pc); if (pc - to == 8) { /* Condition is true. */ @@ -3048,13 +3231,35 @@ } else gdb_assert_not_reached ("Unexpected PC value after displaced stepping"); + + if (debug_displaced) + debug_printf ("Displaced: [Conditional] pc_adjust after: %d\n", + dsc->pc_adjust); } + if (debug_displaced) + debug_printf ("Displaced: %s PC by %d\n", + dsc->pc_adjust? "adjusting" : "not adjusting", + dsc->pc_adjust); + + if (dsc->pc_adjust != 0) { + /* Make sure the previous instruction was executed (that is, the PC + has changed). If the PC didn't change, then discard the adjustment + offset. Otherwise we may skip an instruction before its execution + took place. */ + if ((pc - to) == 0) + { + if (debug_displaced) + debug_printf ("Displaced: PC did not move. Discarding PC " + "adjustment.\n"); + dsc->pc_adjust = 0; + } + if (debug_displaced) { - debug_printf ("displaced: fixup: set PC to %s:%d\n", + debug_printf ("Displaced: fixup: set PC to %s:%d\n", paddress (gdbarch, from), dsc->pc_adjust); } regcache_cooked_write_unsigned (regs, AARCH64_PC_REGNUM, @@ -3357,6 +3562,10 @@ set_gdbarch_execute_dwarf_cfa_vendor_op (gdbarch, aarch64_execute_dwarf_cfa_vendor_op); + /* Permanent/Program breakpoint handling. */ + set_gdbarch_program_breakpoint_here_p (gdbarch, + aarch64_program_breakpoint_here_p); + /* Add some default predicates. */ frame_unwind_append_unwinder (gdbarch, &aarch64_stub_unwind); dwarf2_append_unwinders (gdbarch); @@ -3406,8 +3615,9 @@ } #endif +void _initialize_aarch64_tdep (); void -_initialize_aarch64_tdep (void) +_initialize_aarch64_tdep () { gdbarch_register (bfd_arch_aarch64, aarch64_gdbarch_init, aarch64_dump_tdep); diff -Nru gdb-9.1/gdb/aarch64-tdep.h gdb-10.2/gdb/aarch64-tdep.h --- gdb-9.1/gdb/aarch64-tdep.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/aarch64-tdep.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Common target dependent code for GDB on AArch64 systems. - Copyright (C) 2009-2020 Free Software Foundation, Inc. + Copyright (C) 2009-2021 Free Software Foundation, Inc. Contributed by ARM Ltd. This file is part of GDB. @@ -23,6 +23,7 @@ #define AARCH64_TDEP_H #include "arch/aarch64.h" +#include "infrun.h" /* Forward declarations. */ struct gdbarch; @@ -106,7 +107,7 @@ extern int aarch64_process_record (struct gdbarch *gdbarch, struct regcache *regcache, CORE_ADDR addr); -struct displaced_step_closure * +displaced_step_closure_up aarch64_displaced_step_copy_insn (struct gdbarch *gdbarch, CORE_ADDR from, CORE_ADDR to, struct regcache *regs); diff -Nru gdb-9.1/gdb/acinclude.m4 gdb-10.2/gdb/acinclude.m4 --- gdb-9.1/gdb/acinclude.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/acinclude.m4 2021-04-25 04:06:26.000000000 +0000 @@ -10,13 +10,13 @@ m4_include(transform.m4) # This gets AM_GDB_WARNINGS. -m4_include(warning.m4) +m4_include(../gdbsupport/warning.m4) # AM_GDB_UBSAN m4_include(sanitize.m4) # This gets GDB_AC_SELFTEST. -m4_include(selftest.m4) +m4_include(../gdbsupport/selftest.m4) dnl gdb/configure.in uses BFD_NEED_DECLARATION, so get its definition. m4_include(../bfd/bfd.m4) @@ -24,6 +24,9 @@ dnl This gets the standard macros. m4_include(../config/acinclude.m4) +dnl This gets GCC_ENABLE. +sinclude(../config/enable.m4) + dnl This gets AC_PLUGINS, needed by ACX_LARGEFILE. m4_include(../config/plugins.m4) @@ -63,7 +66,7 @@ m4_include([../config/zlib.m4]) -m4_include([gdbsupport/common.m4]) +m4_include([../gdbsupport/common.m4]) dnl For libiberty_INIT. m4_include(libiberty.m4) @@ -80,7 +83,7 @@ ## From Franc,ois Pinard ## ## ----------------------------------------- ## -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/acx_configure_dir.m4 gdb-10.2/gdb/acx_configure_dir.m4 --- gdb-9.1/gdb/acx_configure_dir.m4 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/acx_configure_dir.m4 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 1992-2020 Free Software Foundation, Inc. +# Copyright (C) 1992-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without diff -Nru gdb-9.1/gdb/ada-exp.c gdb-10.2/gdb/ada-exp.c --- gdb-9.1/gdb/ada-exp.c 2020-02-08 12:54:10.000000000 +0000 +++ gdb-10.2/gdb/ada-exp.c 2021-04-25 04:10:36.000000000 +0000 @@ -1,8 +1,9 @@ -/* A Bison parser, made by GNU Bison 3.0.4. */ +/* A Bison parser, made by GNU Bison 3.5.1. */ /* Bison implementation for Yacc-like parsers in C - Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc. + Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2020 Free Software Foundation, + Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -40,11 +41,14 @@ define necessary library symbols; they are noted "INFRINGES ON USER NAME SPACE" below. */ +/* Undocumented macros, especially those whose name start with YY_, + are private implementation details. Do not rely on them. */ + /* Identify Bison output. */ #define YYBISON 1 /* Bison version. */ -#define YYBISON_VERSION "3.0.4" +#define YYBISON_VERSION "3.5.1" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" @@ -61,8 +65,8 @@ -/* Copy the first part of user declarations. */ -#line 36 "ada-exp.y" /* yacc.c:339 */ +/* First part of user prologue. */ +#line 36 "ada-exp.y" #include "defs.h" @@ -145,13 +149,26 @@ static struct type *type_system_address (struct parser_state *); -#line 149 "ada-exp.c.tmp" /* yacc.c:339 */ +#line 153 "ada-exp.c.tmp" +# ifndef YY_CAST +# ifdef __cplusplus +# define YY_CAST(Type, Val) static_cast (Val) +# define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast (Val) +# else +# define YY_CAST(Type, Val) ((Type) (Val)) +# define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val)) +# endif +# endif # ifndef YY_NULLPTRPTR -# if defined __cplusplus && 201103L <= __cplusplus -# define YY_NULLPTRPTR nullptr +# if defined __cplusplus +# if 201103L <= __cplusplus +# define YY_NULLPTRPTR nullptr +# else +# define YY_NULLPTRPTR 0 +# endif # else -# define YY_NULLPTRPTR 0 +# define YY_NULLPTRPTR ((void*)0) # endif # endif @@ -275,10 +292,9 @@ /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED - union YYSTYPE { -#line 120 "ada-exp.y" /* yacc.c:355 */ +#line 120 "ada-exp.y" LONGEST lval; struct { @@ -295,9 +311,9 @@ struct internalvar *ivar; -#line 299 "ada-exp.c.tmp" /* yacc.c:355 */ -}; +#line 315 "ada-exp.c.tmp" +}; typedef union YYSTYPE YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define YYSTYPE_IS_DECLARED 1 @@ -310,36 +326,81 @@ -/* Copy the second part of user declarations. */ -#line 316 "ada-exp.c.tmp" /* yacc.c:358 */ #ifdef short # undef short #endif -#ifdef YYTYPE_UINT8 -typedef YYTYPE_UINT8 yytype_uint8; -#else -typedef unsigned char yytype_uint8; +/* On compilers that do not define __PTRDIFF_MAX__ etc., make sure + and (if available) are included + so that the code can choose integer types of a good width. */ + +#ifndef __PTRDIFF_MAX__ +# include /* INFRINGES ON USER NAME SPACE */ +# if defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__ +# include /* INFRINGES ON USER NAME SPACE */ +# define YY_STDINT_H +# endif #endif -#ifdef YYTYPE_INT8 -typedef YYTYPE_INT8 yytype_int8; +/* Narrow types that promote to a signed type and that can represent a + signed or unsigned integer of at least N bits. In tables they can + save space and decrease cache pressure. Promoting to a signed type + helps avoid bugs in integer arithmetic. */ + +#ifdef __INT_LEAST8_MAX__ +typedef __INT_LEAST8_TYPE__ yytype_int8; +#elif defined YY_STDINT_H +typedef int_least8_t yytype_int8; #else typedef signed char yytype_int8; #endif -#ifdef YYTYPE_UINT16 -typedef YYTYPE_UINT16 yytype_uint16; +#ifdef __INT_LEAST16_MAX__ +typedef __INT_LEAST16_TYPE__ yytype_int16; +#elif defined YY_STDINT_H +typedef int_least16_t yytype_int16; #else -typedef unsigned short int yytype_uint16; +typedef short yytype_int16; #endif -#ifdef YYTYPE_INT16 -typedef YYTYPE_INT16 yytype_int16; +#if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__ +typedef __UINT_LEAST8_TYPE__ yytype_uint8; +#elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \ + && UINT_LEAST8_MAX <= INT_MAX) +typedef uint_least8_t yytype_uint8; +#elif !defined __UINT_LEAST8_MAX__ && UCHAR_MAX <= INT_MAX +typedef unsigned char yytype_uint8; #else -typedef short int yytype_int16; +typedef short yytype_uint8; +#endif + +#if defined __UINT_LEAST16_MAX__ && __UINT_LEAST16_MAX__ <= __INT_MAX__ +typedef __UINT_LEAST16_TYPE__ yytype_uint16; +#elif (!defined __UINT_LEAST16_MAX__ && defined YY_STDINT_H \ + && UINT_LEAST16_MAX <= INT_MAX) +typedef uint_least16_t yytype_uint16; +#elif !defined __UINT_LEAST16_MAX__ && USHRT_MAX <= INT_MAX +typedef unsigned short yytype_uint16; +#else +typedef int yytype_uint16; +#endif + +#ifndef YYPTRDIFF_T +# if defined __PTRDIFF_TYPE__ && defined __PTRDIFF_MAX__ +# define YYPTRDIFF_T __PTRDIFF_TYPE__ +# define YYPTRDIFF_MAXIMUM __PTRDIFF_MAX__ +# elif defined PTRDIFF_MAX +# ifndef ptrdiff_t +# include /* INFRINGES ON USER NAME SPACE */ +# endif +# define YYPTRDIFF_T ptrdiff_t +# define YYPTRDIFF_MAXIMUM PTRDIFF_MAX +# else +# define YYPTRDIFF_T long +# define YYPTRDIFF_MAXIMUM LONG_MAX +# endif #endif #ifndef YYSIZE_T @@ -347,15 +408,27 @@ # define YYSIZE_T __SIZE_TYPE__ # elif defined size_t # define YYSIZE_T size_t -# elif ! defined YYSIZE_T +# elif defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__ # include /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # else -# define YYSIZE_T unsigned int +# define YYSIZE_T unsigned # endif #endif -#define YYSIZE_MAXIMUM ((YYSIZE_T) -1) +#define YYSIZE_MAXIMUM \ + YY_CAST (YYPTRDIFF_T, \ + (YYPTRDIFF_MAXIMUM < YY_CAST (YYSIZE_T, -1) \ + ? YYPTRDIFF_MAXIMUM \ + : YY_CAST (YYSIZE_T, -1))) + +#define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X)) + +/* Stored state numbers (used for stacks). */ +typedef yytype_uint8 yy_state_t; + +/* State numbers in computations. */ +typedef int yy_state_fast_t; #ifndef YY_ # if defined YYENABLE_NLS && YYENABLE_NLS @@ -369,30 +442,19 @@ # endif #endif -#ifndef YY_ATTRIBUTE -# if (defined __GNUC__ \ - && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__))) \ - || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C -# define YY_ATTRIBUTE(Spec) __attribute__(Spec) +#ifndef YY_ATTRIBUTE_PURE +# if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__) +# define YY_ATTRIBUTE_PURE __attribute__ ((__pure__)) # else -# define YY_ATTRIBUTE(Spec) /* empty */ +# define YY_ATTRIBUTE_PURE # endif #endif -#ifndef YY_ATTRIBUTE_PURE -# define YY_ATTRIBUTE_PURE YY_ATTRIBUTE ((__pure__)) -#endif - #ifndef YY_ATTRIBUTE_UNUSED -# define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__)) -#endif - -#if !defined _Noreturn \ - && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112) -# if defined _MSC_VER && 1200 <= _MSC_VER -# define _Noreturn __declspec (noreturn) +# if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__) +# define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__)) # else -# define _Noreturn YY_ATTRIBUTE ((__noreturn__)) +# define YY_ATTRIBUTE_UNUSED # endif #endif @@ -403,13 +465,13 @@ # define YYUSE(E) /* empty */ #endif -#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ +#if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ /* Suppress an incorrect diagnostic about yylval being uninitialized. */ -# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ - _Pragma ("GCC diagnostic push") \ - _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\ +# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ + _Pragma ("GCC diagnostic push") \ + _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \ _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") -# define YY_IGNORE_MAYBE_UNINITIALIZED_END \ +# define YY_IGNORE_MAYBE_UNINITIALIZED_END \ _Pragma ("GCC diagnostic pop") #else # define YY_INITIAL_VALUE(Value) Value @@ -422,6 +484,20 @@ # define YY_INITIAL_VALUE(Value) /* Nothing. */ #endif +#if defined __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__ +# define YY_IGNORE_USELESS_CAST_BEGIN \ + _Pragma ("GCC diagnostic push") \ + _Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"") +# define YY_IGNORE_USELESS_CAST_END \ + _Pragma ("GCC diagnostic pop") +#endif +#ifndef YY_IGNORE_USELESS_CAST_BEGIN +# define YY_IGNORE_USELESS_CAST_BEGIN +# define YY_IGNORE_USELESS_CAST_END +#endif + + +#define YY_ASSERT(E) ((void) (0 && (E))) #if ! defined yyoverflow || YYERROR_VERBOSE @@ -497,17 +573,17 @@ /* A type that is properly aligned for any stack member. */ union yyalloc { - yytype_int16 yyss_alloc; + yy_state_t yyss_alloc; YYSTYPE yyvs_alloc; }; /* The size of the maximum gap between one aligned stack and the next. */ -# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) +# define YYSTACK_GAP_MAXIMUM (YYSIZEOF (union yyalloc) - 1) /* The size of an array large to enough to hold all stacks, each with N elements. */ # define YYSTACK_BYTES(N) \ - ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ + ((N) * (YYSIZEOF (yy_state_t) + YYSIZEOF (YYSTYPE)) \ + YYSTACK_GAP_MAXIMUM) # define YYCOPY_NEEDED 1 @@ -520,11 +596,11 @@ # define YYSTACK_RELOCATE(Stack_alloc, Stack) \ do \ { \ - YYSIZE_T yynewbytes; \ + YYPTRDIFF_T yynewbytes; \ YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ Stack = &yyptr->Stack_alloc; \ - yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ - yyptr += yynewbytes / sizeof (*yyptr); \ + yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \ + yyptr += yynewbytes / YYSIZEOF (*yyptr); \ } \ while (0) @@ -536,12 +612,12 @@ # ifndef YYCOPY # if defined __GNUC__ && 1 < __GNUC__ # define YYCOPY(Dst, Src, Count) \ - __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src))) + __builtin_memcpy (Dst, Src, YY_CAST (YYSIZE_T, (Count)) * sizeof (*(Src))) # else # define YYCOPY(Dst, Src, Count) \ do \ { \ - YYSIZE_T yyi; \ + YYPTRDIFF_T yyi; \ for (yyi = 0; yyi < (Count); yyi++) \ (Dst)[yyi] = (Src)[yyi]; \ } \ @@ -564,17 +640,18 @@ /* YYNSTATES -- Number of states. */ #define YYNSTATES 233 -/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned - by yylex, with out-of-bounds checking. */ #define YYUNDEFTOK 2 #define YYMAXUTOK 303 + +/* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM + as returned by yylex, with out-of-bounds checking. */ #define YYTRANSLATE(YYX) \ - ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) + (0 <= (YYX) && (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) /* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM - as returned by yylex, without out-of-bounds checking. */ -static const yytype_uint8 yytranslate[] = + as returned by yylex. */ +static const yytype_int8 yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -611,7 +688,7 @@ #if YYDEBUG /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ -static const yytype_uint16 yyrline[] = +static const yytype_int16 yyrline[] = { 0, 185, 185, 189, 190, 192, 197, 201, 206, 212, 231, 231, 243, 247, 249, 257, 268, 278, 282, 285, @@ -656,7 +733,7 @@ # ifdef YYPRINT /* YYTOKNUM[NUM] -- (External) token number corresponding to the (internal) symbol number NUM (which must be that of a token). */ -static const yytype_uint16 yytoknum[] = +static const yytype_int16 yytoknum[] = { 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, @@ -668,14 +745,14 @@ }; # endif -#define YYPACT_NINF -104 +#define YYPACT_NINF (-104) -#define yypact_value_is_default(Yystate) \ - (!!((Yystate) == (-104))) +#define yypact_value_is_default(Yyn) \ + ((Yyn) == YYPACT_NINF) -#define YYTABLE_NINF -83 +#define YYTABLE_NINF (-83) -#define yytable_value_is_error(Yytable_value) \ +#define yytable_value_is_error(Yyn) \ 0 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing @@ -711,7 +788,7 @@ /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. Performed when YYTABLE does not specify something else to do. Zero means the default is an error. */ -static const yytype_uint8 yydefact[] = +static const yytype_int8 yydefact[] = { 84, 85, 88, 86, 87, 90, 91, 89, 93, 17, 84, 84, 84, 84, 84, 84, 84, 0, 0, 0, @@ -920,7 +997,7 @@ /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ -static const yytype_uint8 yystos[] = +static const yytype_int8 yystos[] = { 0, 3, 4, 5, 6, 7, 8, 10, 11, 14, 30, 31, 32, 34, 39, 40, 58, 60, 66, 70, @@ -949,7 +1026,7 @@ }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ -static const yytype_uint8 yyr1[] = +static const yytype_int8 yyr1[] = { 0, 69, 70, 71, 71, 71, 72, 72, 72, 72, 73, 72, 74, 72, 72, 72, 72, 72, 72, 75, @@ -967,7 +1044,7 @@ }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ -static const yytype_uint8 yyr2[] = +static const yytype_int8 yyr2[] = { 0, 2, 1, 1, 3, 3, 2, 2, 4, 4, 0, 7, 0, 6, 6, 3, 1, 1, 1, 1, @@ -997,22 +1074,22 @@ #define YYRECOVERING() (!!yyerrstatus) -#define YYBACKUP(Token, Value) \ -do \ - if (yychar == YYEMPTY) \ - { \ - yychar = (Token); \ - yylval = (Value); \ - YYPOPSTACK (yylen); \ - yystate = *yyssp; \ - goto yybackup; \ - } \ - else \ - { \ - yyerror (YY_("syntax error: cannot back up")); \ - YYERROR; \ - } \ -while (0) +#define YYBACKUP(Token, Value) \ + do \ + if (yychar == YYEMPTY) \ + { \ + yychar = (Token); \ + yylval = (Value); \ + YYPOPSTACK (yylen); \ + yystate = *yyssp; \ + goto yybackup; \ + } \ + else \ + { \ + yyerror (YY_("syntax error: cannot back up")); \ + YYERROR; \ + } \ + while (0) /* Error token number */ #define YYTERROR 1 @@ -1052,37 +1129,39 @@ } while (0) -/*----------------------------------------. -| Print this symbol's value on YYOUTPUT. | -`----------------------------------------*/ +/*-----------------------------------. +| Print this symbol's value on YYO. | +`-----------------------------------*/ static void -yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) +yy_symbol_value_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep) { - FILE *yyo = yyoutput; - YYUSE (yyo); + FILE *yyoutput = yyo; + YYUSE (yyoutput); if (!yyvaluep) return; # ifdef YYPRINT if (yytype < YYNTOKENS) - YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); + YYPRINT (yyo, yytoknum[yytype], *yyvaluep); # endif + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN YYUSE (yytype); + YY_IGNORE_MAYBE_UNINITIALIZED_END } -/*--------------------------------. -| Print this symbol on YYOUTPUT. | -`--------------------------------*/ +/*---------------------------. +| Print this symbol on YYO. | +`---------------------------*/ static void -yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) +yy_symbol_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep) { - YYFPRINTF (yyoutput, "%s %s (", + YYFPRINTF (yyo, "%s %s (", yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]); - yy_symbol_value_print (yyoutput, yytype, yyvaluep); - YYFPRINTF (yyoutput, ")"); + yy_symbol_value_print (yyo, yytype, yyvaluep); + YYFPRINTF (yyo, ")"); } /*------------------------------------------------------------------. @@ -1091,7 +1170,7 @@ `------------------------------------------------------------------*/ static void -yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop) +yy_stack_print (yy_state_t *yybottom, yy_state_t *yytop) { YYFPRINTF (stderr, "Stack now"); for (; yybottom <= yytop; yybottom++) @@ -1114,20 +1193,20 @@ `------------------------------------------------*/ static void -yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule) +yy_reduce_print (yy_state_t *yyssp, YYSTYPE *yyvsp, int yyrule) { - unsigned long int yylno = yyrline[yyrule]; + int yylno = yyrline[yyrule]; int yynrhs = yyr2[yyrule]; int yyi; - YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", + YYFPRINTF (stderr, "Reducing stack by rule %d (line %d):\n", yyrule - 1, yylno); /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { YYFPRINTF (stderr, " $%d = ", yyi + 1); yy_symbol_print (stderr, - yystos[yyssp[yyi + 1 - yynrhs]], - &(yyvsp[(yyi + 1) - (yynrhs)]) + yystos[+yyssp[yyi + 1 - yynrhs]], + &yyvsp[(yyi + 1) - (yynrhs)] ); YYFPRINTF (stderr, "\n"); } @@ -1171,13 +1250,13 @@ # ifndef yystrlen # if defined __GLIBC__ && defined _STRING_H -# define yystrlen strlen +# define yystrlen(S) (YY_CAST (YYPTRDIFF_T, strlen (S))) # else /* Return the length of YYSTR. */ -static YYSIZE_T +static YYPTRDIFF_T yystrlen (const char *yystr) { - YYSIZE_T yylen; + YYPTRDIFF_T yylen; for (yylen = 0; yystr[yylen]; yylen++) continue; return yylen; @@ -1213,12 +1292,12 @@ backslash-backslash). YYSTR is taken from yytname. If YYRES is null, do not copy; instead, return the length of what the result would have been. */ -static YYSIZE_T +static YYPTRDIFF_T yytnamerr (char *yyres, const char *yystr) { if (*yystr == '"') { - YYSIZE_T yyn = 0; + YYPTRDIFF_T yyn = 0; char const *yyp = yystr; for (;;) @@ -1231,7 +1310,10 @@ case '\\': if (*++yyp != '\\') goto do_not_strip_quotes; - /* Fall through. */ + else + goto append; + + append: default: if (yyres) yyres[yyn] = *yyp; @@ -1246,10 +1328,10 @@ do_not_strip_quotes: ; } - if (! yyres) + if (yyres) + return yystpcpy (yyres, yystr) - yyres; + else return yystrlen (yystr); - - return yystpcpy (yyres, yystr) - yyres; } # endif @@ -1262,19 +1344,19 @@ *YYMSG_ALLOC to the required number of bytes. Return 2 if the required number of bytes is too large to store. */ static int -yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, - yytype_int16 *yyssp, int yytoken) +yysyntax_error (YYPTRDIFF_T *yymsg_alloc, char **yymsg, + yy_state_t *yyssp, int yytoken) { - YYSIZE_T yysize0 = yytnamerr (YY_NULLPTRPTR, yytname[yytoken]); - YYSIZE_T yysize = yysize0; enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; /* Internationalized format string. */ const char *yyformat = YY_NULLPTRPTR; - /* Arguments of yyformat. */ + /* Arguments of yyformat: reported tokens (one for the "unexpected", + one per "expected"). */ char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; - /* Number of reported tokens (one for the "unexpected", one per - "expected"). */ + /* Actual size of YYARG. */ int yycount = 0; + /* Cumulated lengths of YYARG. */ + YYPTRDIFF_T yysize = 0; /* There are many possibilities here to consider: - If this state is a consistent state with a default action, then @@ -1301,7 +1383,9 @@ */ if (yytoken != YYEMPTY) { - int yyn = yypact[*yyssp]; + int yyn = yypact[+*yyssp]; + YYPTRDIFF_T yysize0 = yytnamerr (YY_NULLPTRPTR, yytname[yytoken]); + yysize = yysize0; yyarg[yycount++] = yytname[yytoken]; if (!yypact_value_is_default (yyn)) { @@ -1326,11 +1410,12 @@ } yyarg[yycount++] = yytname[yyx]; { - YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTRPTR, yytname[yyx]); - if (! (yysize <= yysize1 - && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) + YYPTRDIFF_T yysize1 + = yysize + yytnamerr (YY_NULLPTRPTR, yytname[yyx]); + if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM) + yysize = yysize1; + else return 2; - yysize = yysize1; } } } @@ -1342,6 +1427,7 @@ case N: \ yyformat = S; \ break + default: /* Avoid compiler warnings. */ YYCASE_(0, YY_("syntax error")); YYCASE_(1, YY_("syntax error, unexpected %s")); YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); @@ -1352,10 +1438,13 @@ } { - YYSIZE_T yysize1 = yysize + yystrlen (yyformat); - if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) + /* Don't count the "%s"s in the final size, but reserve room for + the terminator. */ + YYPTRDIFF_T yysize1 = yysize + (yystrlen (yyformat) - 2 * yycount) + 1; + if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM) + yysize = yysize1; + else return 2; - yysize = yysize1; } if (*yymsg_alloc < yysize) @@ -1381,8 +1470,8 @@ } else { - yyp++; - yyformat++; + ++yyp; + ++yyformat; } } return 0; @@ -1425,7 +1514,7 @@ int yyparse (void) { - int yystate; + yy_state_fast_t yystate; /* Number of tokens to shift before error messages enabled. */ int yyerrstatus; @@ -1437,16 +1526,16 @@ to xreallocate them elsewhere. */ /* The state stack. */ - yytype_int16 yyssa[YYINITDEPTH]; - yytype_int16 *yyss; - yytype_int16 *yyssp; + yy_state_t yyssa[YYINITDEPTH]; + yy_state_t *yyss; + yy_state_t *yyssp; /* The semantic value stack. */ YYSTYPE yyvsa[YYINITDEPTH]; YYSTYPE *yyvs; YYSTYPE *yyvsp; - YYSIZE_T yystacksize; + YYPTRDIFF_T yystacksize; int yyn; int yyresult; @@ -1460,7 +1549,7 @@ /* Buffer for error messages, and its allocated size. */ char yymsgbuf[128]; char *yymsg = yymsgbuf; - YYSIZE_T yymsg_alloc = sizeof yymsgbuf; + YYPTRDIFF_T yymsg_alloc = sizeof yymsgbuf; #endif #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) @@ -1481,46 +1570,54 @@ yychar = YYEMPTY; /* Cause a token to be read. */ goto yysetstate; + /*------------------------------------------------------------. -| yynewstate -- Push a new state, which is found in yystate. | +| yynewstate -- push a new state, which is found in yystate. | `------------------------------------------------------------*/ - yynewstate: +yynewstate: /* In all cases, when you get here, the value and location stacks have just been pushed. So pushing a state here evens the stacks. */ yyssp++; - yysetstate: - *yyssp = yystate; + +/*--------------------------------------------------------------------. +| yysetstate -- set current state (the top of the stack) to yystate. | +`--------------------------------------------------------------------*/ +yysetstate: + YYDPRINTF ((stderr, "Entering state %d\n", yystate)); + YY_ASSERT (0 <= yystate && yystate < YYNSTATES); + YY_IGNORE_USELESS_CAST_BEGIN + *yyssp = YY_CAST (yy_state_t, yystate); + YY_IGNORE_USELESS_CAST_END if (yyss + yystacksize - 1 <= yyssp) +#if !defined yyoverflow && !defined YYSTACK_RELOCATE + goto yyexhaustedlab; +#else { /* Get the current used size of the three stacks, in elements. */ - YYSIZE_T yysize = yyssp - yyss + 1; + YYPTRDIFF_T yysize = yyssp - yyss + 1; -#ifdef yyoverflow +# if defined yyoverflow { /* Give user a chance to xreallocate the stack. Use copies of these so that the &'s don't force the real ones into memory. */ + yy_state_t *yyss1 = yyss; YYSTYPE *yyvs1 = yyvs; - yytype_int16 *yyss1 = yyss; /* Each stack pointer address is followed by the size of the data in use in that stack, in bytes. This used to be a conditional around just the two extra args, but that might be undefined if yyoverflow is a macro. */ yyoverflow (YY_("memory exhausted"), - &yyss1, yysize * sizeof (*yyssp), - &yyvs1, yysize * sizeof (*yyvsp), + &yyss1, yysize * YYSIZEOF (*yyssp), + &yyvs1, yysize * YYSIZEOF (*yyvsp), &yystacksize); - yyss = yyss1; yyvs = yyvs1; } -#else /* no yyoverflow */ -# ifndef YYSTACK_RELOCATE - goto yyexhaustedlab; -# else +# else /* defined YYSTACK_RELOCATE */ /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) goto yyexhaustedlab; @@ -1529,42 +1626,43 @@ yystacksize = YYMAXDEPTH; { - yytype_int16 *yyss1 = yyss; + yy_state_t *yyss1 = yyss; union yyalloc *yyptr = - (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); + YY_CAST (union yyalloc *, + YYSTACK_ALLOC (YY_CAST (YYSIZE_T, YYSTACK_BYTES (yystacksize)))); if (! yyptr) goto yyexhaustedlab; YYSTACK_RELOCATE (yyss_alloc, yyss); YYSTACK_RELOCATE (yyvs_alloc, yyvs); -# undef YYSTACK_RELOCATE +# undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); } # endif -#endif /* no yyoverflow */ yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; - YYDPRINTF ((stderr, "Stack size increased to %lu\n", - (unsigned long int) yystacksize)); + YY_IGNORE_USELESS_CAST_BEGIN + YYDPRINTF ((stderr, "Stack size increased to %ld\n", + YY_CAST (long, yystacksize))); + YY_IGNORE_USELESS_CAST_END if (yyss + yystacksize - 1 <= yyssp) YYABORT; } - - YYDPRINTF ((stderr, "Entering state %d\n", yystate)); +#endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */ if (yystate == YYFINAL) YYACCEPT; goto yybackup; + /*-----------. | yybackup. | `-----------*/ yybackup: - /* Do appropriate processing given the current state. Read a lookahead token if we need one and don't already have one. */ @@ -1614,15 +1712,13 @@ /* Shift the lookahead token. */ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); - - /* Discard the shifted token. */ - yychar = YYEMPTY; - yystate = yyn; YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; YY_IGNORE_MAYBE_UNINITIALIZED_END + /* Discard the shifted token. */ + yychar = YYEMPTY; goto yynewstate; @@ -1637,7 +1733,7 @@ /*-----------------------------. -| yyreduce -- Do a reduction. | +| yyreduce -- do a reduction. | `-----------------------------*/ yyreduce: /* yyn is the number of a rule to reduce with. */ @@ -1657,44 +1753,44 @@ YY_REDUCE_PRINT (yyn); switch (yyn) { - case 4: -#line 191 "ada-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_COMMA); } -#line 1665 "ada-exp.c.tmp" /* yacc.c:1646 */ + case 4: +#line 191 "ada-exp.y" + { write_exp_elt_opcode (pstate, BINOP_COMMA); } +#line 1761 "ada-exp.c.tmp" break; case 5: -#line 193 "ada-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_ASSIGN); } -#line 1671 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 193 "ada-exp.y" + { write_exp_elt_opcode (pstate, BINOP_ASSIGN); } +#line 1767 "ada-exp.c.tmp" break; case 6: -#line 198 "ada-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_IND); } -#line 1677 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 198 "ada-exp.y" + { write_exp_elt_opcode (pstate, UNOP_IND); } +#line 1773 "ada-exp.c.tmp" break; case 7: -#line 202 "ada-exp.y" /* yacc.c:1646 */ - { write_exp_op_with_string (pstate, STRUCTOP_STRUCT, +#line 202 "ada-exp.y" + { write_exp_op_with_string (pstate, STRUCTOP_STRUCT, (yyvsp[0].sval)); } -#line 1684 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 1780 "ada-exp.c.tmp" break; case 8: -#line 207 "ada-exp.y" /* yacc.c:1646 */ - { +#line 207 "ada-exp.y" + { write_exp_elt_opcode (pstate, OP_FUNCALL); write_exp_elt_longcst (pstate, (yyvsp[-1].lval)); write_exp_elt_opcode (pstate, OP_FUNCALL); } -#line 1694 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 1790 "ada-exp.c.tmp" break; case 9: -#line 213 "ada-exp.y" /* yacc.c:1646 */ - { +#line 213 "ada-exp.y" + { if ((yyvsp[-3].tval) != NULL) { if ((yyvsp[-1].lval) != 1) @@ -1710,18 +1806,18 @@ write_exp_elt_opcode (pstate, OP_FUNCALL); } } -#line 1715 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 1811 "ada-exp.c.tmp" break; case 10: -#line 231 "ada-exp.y" /* yacc.c:1646 */ - { type_qualifier = (yyvsp[-2].tval); } -#line 1721 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 231 "ada-exp.y" + { type_qualifier = (yyvsp[-2].tval); } +#line 1817 "ada-exp.c.tmp" break; case 11: -#line 233 "ada-exp.y" /* yacc.c:1646 */ - { +#line 233 "ada-exp.y" + { if ((yyvsp[-6].tval) == NULL) error (_("Type required for qualification")); write_exp_elt_opcode (pstate, UNOP_QUAL); @@ -1729,241 +1825,241 @@ write_exp_elt_opcode (pstate, UNOP_QUAL); type_qualifier = (yyvsp[-4].tval); } -#line 1734 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 1830 "ada-exp.c.tmp" break; case 12: -#line 243 "ada-exp.y" /* yacc.c:1646 */ - { (yyval.tval) = type_qualifier; } -#line 1740 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 243 "ada-exp.y" + { (yyval.tval) = type_qualifier; } +#line 1836 "ada-exp.c.tmp" break; case 13: -#line 248 "ada-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, TERNOP_SLICE); } -#line 1746 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 248 "ada-exp.y" + { write_exp_elt_opcode (pstate, TERNOP_SLICE); } +#line 1842 "ada-exp.c.tmp" break; case 14: -#line 250 "ada-exp.y" /* yacc.c:1646 */ - { if ((yyvsp[-5].tval) == NULL) +#line 250 "ada-exp.y" + { if ((yyvsp[-5].tval) == NULL) write_exp_elt_opcode (pstate, TERNOP_SLICE); else error (_("Cannot slice a type")); } -#line 1756 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 1852 "ada-exp.c.tmp" break; case 15: -#line 257 "ada-exp.y" /* yacc.c:1646 */ - { } -#line 1762 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 257 "ada-exp.y" + { } +#line 1858 "ada-exp.c.tmp" break; case 16: -#line 269 "ada-exp.y" /* yacc.c:1646 */ - { if ((yyvsp[0].tval) != NULL) +#line 269 "ada-exp.y" + { if ((yyvsp[0].tval) != NULL) { write_exp_elt_opcode (pstate, OP_TYPE); write_exp_elt_type (pstate, (yyvsp[0].tval)); write_exp_elt_opcode (pstate, OP_TYPE); } } -#line 1774 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 1870 "ada-exp.c.tmp" break; case 17: -#line 279 "ada-exp.y" /* yacc.c:1646 */ - { write_dollar_variable (pstate, (yyvsp[0].sval)); } -#line 1780 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 279 "ada-exp.y" + { write_dollar_variable (pstate, (yyvsp[0].sval)); } +#line 1876 "ada-exp.c.tmp" break; case 20: -#line 289 "ada-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_NEG); } -#line 1786 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 289 "ada-exp.y" + { write_exp_elt_opcode (pstate, UNOP_NEG); } +#line 1882 "ada-exp.c.tmp" break; case 21: -#line 293 "ada-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_PLUS); } -#line 1792 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 293 "ada-exp.y" + { write_exp_elt_opcode (pstate, UNOP_PLUS); } +#line 1888 "ada-exp.c.tmp" break; case 22: -#line 297 "ada-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_LOGICAL_NOT); } -#line 1798 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 297 "ada-exp.y" + { write_exp_elt_opcode (pstate, UNOP_LOGICAL_NOT); } +#line 1894 "ada-exp.c.tmp" break; case 23: -#line 301 "ada-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_ABS); } -#line 1804 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 301 "ada-exp.y" + { write_exp_elt_opcode (pstate, UNOP_ABS); } +#line 1900 "ada-exp.c.tmp" break; case 24: -#line 304 "ada-exp.y" /* yacc.c:1646 */ - { (yyval.lval) = 0; } -#line 1810 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 304 "ada-exp.y" + { (yyval.lval) = 0; } +#line 1906 "ada-exp.c.tmp" break; case 25: -#line 308 "ada-exp.y" /* yacc.c:1646 */ - { (yyval.lval) = 1; } -#line 1816 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 308 "ada-exp.y" + { (yyval.lval) = 1; } +#line 1912 "ada-exp.c.tmp" break; case 26: -#line 310 "ada-exp.y" /* yacc.c:1646 */ - { (yyval.lval) = 1; } -#line 1822 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 310 "ada-exp.y" + { (yyval.lval) = 1; } +#line 1918 "ada-exp.c.tmp" break; case 27: -#line 312 "ada-exp.y" /* yacc.c:1646 */ - { (yyval.lval) = (yyvsp[-2].lval) + 1; } -#line 1828 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 312 "ada-exp.y" + { (yyval.lval) = (yyvsp[-2].lval) + 1; } +#line 1924 "ada-exp.c.tmp" break; case 28: -#line 314 "ada-exp.y" /* yacc.c:1646 */ - { (yyval.lval) = (yyvsp[-4].lval) + 1; } -#line 1834 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 314 "ada-exp.y" + { (yyval.lval) = (yyvsp[-4].lval) + 1; } +#line 1930 "ada-exp.c.tmp" break; case 29: -#line 319 "ada-exp.y" /* yacc.c:1646 */ - { +#line 319 "ada-exp.y" + { if ((yyvsp[-2].tval) == NULL) error (_("Type required within braces in coercion")); write_exp_elt_opcode (pstate, UNOP_MEMVAL); write_exp_elt_type (pstate, (yyvsp[-2].tval)); write_exp_elt_opcode (pstate, UNOP_MEMVAL); } -#line 1846 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 1942 "ada-exp.c.tmp" break; case 30: -#line 331 "ada-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_EXP); } -#line 1852 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 331 "ada-exp.y" + { write_exp_elt_opcode (pstate, BINOP_EXP); } +#line 1948 "ada-exp.c.tmp" break; case 31: -#line 335 "ada-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_MUL); } -#line 1858 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 335 "ada-exp.y" + { write_exp_elt_opcode (pstate, BINOP_MUL); } +#line 1954 "ada-exp.c.tmp" break; case 32: -#line 339 "ada-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_DIV); } -#line 1864 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 339 "ada-exp.y" + { write_exp_elt_opcode (pstate, BINOP_DIV); } +#line 1960 "ada-exp.c.tmp" break; case 33: -#line 343 "ada-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_REM); } -#line 1870 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 343 "ada-exp.y" + { write_exp_elt_opcode (pstate, BINOP_REM); } +#line 1966 "ada-exp.c.tmp" break; case 34: -#line 347 "ada-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_MOD); } -#line 1876 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 347 "ada-exp.y" + { write_exp_elt_opcode (pstate, BINOP_MOD); } +#line 1972 "ada-exp.c.tmp" break; case 35: -#line 351 "ada-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_REPEAT); } -#line 1882 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 351 "ada-exp.y" + { write_exp_elt_opcode (pstate, BINOP_REPEAT); } +#line 1978 "ada-exp.c.tmp" break; case 36: -#line 355 "ada-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_ADD); } -#line 1888 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 355 "ada-exp.y" + { write_exp_elt_opcode (pstate, BINOP_ADD); } +#line 1984 "ada-exp.c.tmp" break; case 37: -#line 359 "ada-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_CONCAT); } -#line 1894 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 359 "ada-exp.y" + { write_exp_elt_opcode (pstate, BINOP_CONCAT); } +#line 1990 "ada-exp.c.tmp" break; case 38: -#line 363 "ada-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_SUB); } -#line 1900 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 363 "ada-exp.y" + { write_exp_elt_opcode (pstate, BINOP_SUB); } +#line 1996 "ada-exp.c.tmp" break; case 40: -#line 370 "ada-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_EQUAL); } -#line 1906 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 370 "ada-exp.y" + { write_exp_elt_opcode (pstate, BINOP_EQUAL); } +#line 2002 "ada-exp.c.tmp" break; case 41: -#line 374 "ada-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_NOTEQUAL); } -#line 1912 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 374 "ada-exp.y" + { write_exp_elt_opcode (pstate, BINOP_NOTEQUAL); } +#line 2008 "ada-exp.c.tmp" break; case 42: -#line 378 "ada-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_LEQ); } -#line 1918 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 378 "ada-exp.y" + { write_exp_elt_opcode (pstate, BINOP_LEQ); } +#line 2014 "ada-exp.c.tmp" break; case 43: -#line 382 "ada-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, TERNOP_IN_RANGE); } -#line 1924 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 382 "ada-exp.y" + { write_exp_elt_opcode (pstate, TERNOP_IN_RANGE); } +#line 2020 "ada-exp.c.tmp" break; case 44: -#line 384 "ada-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_IN_BOUNDS); +#line 384 "ada-exp.y" + { write_exp_elt_opcode (pstate, BINOP_IN_BOUNDS); write_exp_elt_longcst (pstate, (LONGEST) (yyvsp[0].lval)); write_exp_elt_opcode (pstate, BINOP_IN_BOUNDS); } -#line 1933 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 2029 "ada-exp.c.tmp" break; case 45: -#line 389 "ada-exp.y" /* yacc.c:1646 */ - { +#line 389 "ada-exp.y" + { if ((yyvsp[0].tval) == NULL) error (_("Right operand of 'in' must be type")); write_exp_elt_opcode (pstate, UNOP_IN_RANGE); write_exp_elt_type (pstate, (yyvsp[0].tval)); write_exp_elt_opcode (pstate, UNOP_IN_RANGE); } -#line 1945 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 2041 "ada-exp.c.tmp" break; case 46: -#line 397 "ada-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, TERNOP_IN_RANGE); +#line 397 "ada-exp.y" + { write_exp_elt_opcode (pstate, TERNOP_IN_RANGE); write_exp_elt_opcode (pstate, UNOP_LOGICAL_NOT); } -#line 1953 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 2049 "ada-exp.c.tmp" break; case 47: -#line 401 "ada-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_IN_BOUNDS); +#line 401 "ada-exp.y" + { write_exp_elt_opcode (pstate, BINOP_IN_BOUNDS); write_exp_elt_longcst (pstate, (LONGEST) (yyvsp[0].lval)); write_exp_elt_opcode (pstate, BINOP_IN_BOUNDS); write_exp_elt_opcode (pstate, UNOP_LOGICAL_NOT); } -#line 1963 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 2059 "ada-exp.c.tmp" break; case 48: -#line 407 "ada-exp.y" /* yacc.c:1646 */ - { +#line 407 "ada-exp.y" + { if ((yyvsp[0].tval) == NULL) error (_("Right operand of 'in' must be type")); write_exp_elt_opcode (pstate, UNOP_IN_RANGE); @@ -1971,474 +2067,475 @@ write_exp_elt_opcode (pstate, UNOP_IN_RANGE); write_exp_elt_opcode (pstate, UNOP_LOGICAL_NOT); } -#line 1976 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 2072 "ada-exp.c.tmp" break; case 49: -#line 418 "ada-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_GEQ); } -#line 1982 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 418 "ada-exp.y" + { write_exp_elt_opcode (pstate, BINOP_GEQ); } +#line 2078 "ada-exp.c.tmp" break; case 50: -#line 422 "ada-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_LESS); } -#line 1988 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 422 "ada-exp.y" + { write_exp_elt_opcode (pstate, BINOP_LESS); } +#line 2084 "ada-exp.c.tmp" break; case 51: -#line 426 "ada-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_GTR); } -#line 1994 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 426 "ada-exp.y" + { write_exp_elt_opcode (pstate, BINOP_GTR); } +#line 2090 "ada-exp.c.tmp" break; case 58: -#line 439 "ada-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_BITWISE_AND); } -#line 2000 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 439 "ada-exp.y" + { write_exp_elt_opcode (pstate, BINOP_BITWISE_AND); } +#line 2096 "ada-exp.c.tmp" break; case 59: -#line 441 "ada-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_BITWISE_AND); } -#line 2006 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 441 "ada-exp.y" + { write_exp_elt_opcode (pstate, BINOP_BITWISE_AND); } +#line 2102 "ada-exp.c.tmp" break; case 60: -#line 446 "ada-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_LOGICAL_AND); } -#line 2012 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 446 "ada-exp.y" + { write_exp_elt_opcode (pstate, BINOP_LOGICAL_AND); } +#line 2108 "ada-exp.c.tmp" break; case 61: -#line 448 "ada-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_LOGICAL_AND); } -#line 2018 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 448 "ada-exp.y" + { write_exp_elt_opcode (pstate, BINOP_LOGICAL_AND); } +#line 2114 "ada-exp.c.tmp" break; case 62: -#line 453 "ada-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_BITWISE_IOR); } -#line 2024 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 453 "ada-exp.y" + { write_exp_elt_opcode (pstate, BINOP_BITWISE_IOR); } +#line 2120 "ada-exp.c.tmp" break; case 63: -#line 455 "ada-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_BITWISE_IOR); } -#line 2030 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 455 "ada-exp.y" + { write_exp_elt_opcode (pstate, BINOP_BITWISE_IOR); } +#line 2126 "ada-exp.c.tmp" break; case 64: -#line 460 "ada-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_LOGICAL_OR); } -#line 2036 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 460 "ada-exp.y" + { write_exp_elt_opcode (pstate, BINOP_LOGICAL_OR); } +#line 2132 "ada-exp.c.tmp" break; case 65: -#line 462 "ada-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_LOGICAL_OR); } -#line 2042 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 462 "ada-exp.y" + { write_exp_elt_opcode (pstate, BINOP_LOGICAL_OR); } +#line 2138 "ada-exp.c.tmp" break; case 66: -#line 466 "ada-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_BITWISE_XOR); } -#line 2048 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 466 "ada-exp.y" + { write_exp_elt_opcode (pstate, BINOP_BITWISE_XOR); } +#line 2144 "ada-exp.c.tmp" break; case 67: -#line 468 "ada-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_BITWISE_XOR); } -#line 2054 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 468 "ada-exp.y" + { write_exp_elt_opcode (pstate, BINOP_BITWISE_XOR); } +#line 2150 "ada-exp.c.tmp" break; case 68: -#line 480 "ada-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_ADDR); } -#line 2060 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 480 "ada-exp.y" + { write_exp_elt_opcode (pstate, UNOP_ADDR); } +#line 2156 "ada-exp.c.tmp" break; case 69: -#line 482 "ada-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_ADDR); +#line 482 "ada-exp.y" + { write_exp_elt_opcode (pstate, UNOP_ADDR); write_exp_elt_opcode (pstate, UNOP_CAST); write_exp_elt_type (pstate, type_system_address (pstate)); write_exp_elt_opcode (pstate, UNOP_CAST); } -#line 2071 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 2167 "ada-exp.c.tmp" break; case 70: -#line 489 "ada-exp.y" /* yacc.c:1646 */ - { write_int (pstate, (yyvsp[0].lval), type_int (pstate)); +#line 489 "ada-exp.y" + { write_int (pstate, (yyvsp[0].lval), type_int (pstate)); write_exp_elt_opcode (pstate, OP_ATR_FIRST); } -#line 2078 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 2174 "ada-exp.c.tmp" break; case 71: -#line 492 "ada-exp.y" /* yacc.c:1646 */ - { write_int (pstate, (yyvsp[0].lval), type_int (pstate)); +#line 492 "ada-exp.y" + { write_int (pstate, (yyvsp[0].lval), type_int (pstate)); write_exp_elt_opcode (pstate, OP_ATR_LAST); } -#line 2085 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 2181 "ada-exp.c.tmp" break; case 72: -#line 495 "ada-exp.y" /* yacc.c:1646 */ - { write_int (pstate, (yyvsp[0].lval), type_int (pstate)); +#line 495 "ada-exp.y" + { write_int (pstate, (yyvsp[0].lval), type_int (pstate)); write_exp_elt_opcode (pstate, OP_ATR_LENGTH); } -#line 2092 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 2188 "ada-exp.c.tmp" break; case 73: -#line 498 "ada-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, OP_ATR_SIZE); } -#line 2098 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 498 "ada-exp.y" + { write_exp_elt_opcode (pstate, OP_ATR_SIZE); } +#line 2194 "ada-exp.c.tmp" break; case 74: -#line 500 "ada-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, OP_ATR_TAG); } -#line 2104 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 500 "ada-exp.y" + { write_exp_elt_opcode (pstate, OP_ATR_TAG); } +#line 2200 "ada-exp.c.tmp" break; case 75: -#line 502 "ada-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, OP_ATR_MIN); } -#line 2110 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 502 "ada-exp.y" + { write_exp_elt_opcode (pstate, OP_ATR_MIN); } +#line 2206 "ada-exp.c.tmp" break; case 76: -#line 504 "ada-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, OP_ATR_MAX); } -#line 2116 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 504 "ada-exp.y" + { write_exp_elt_opcode (pstate, OP_ATR_MAX); } +#line 2212 "ada-exp.c.tmp" break; case 77: -#line 506 "ada-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, OP_ATR_POS); } -#line 2122 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 506 "ada-exp.y" + { write_exp_elt_opcode (pstate, OP_ATR_POS); } +#line 2218 "ada-exp.c.tmp" break; case 78: -#line 508 "ada-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, OP_ATR_VAL); } -#line 2128 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 508 "ada-exp.y" + { write_exp_elt_opcode (pstate, OP_ATR_VAL); } +#line 2224 "ada-exp.c.tmp" break; case 79: -#line 510 "ada-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, OP_ATR_MODULUS); } -#line 2134 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 510 "ada-exp.y" + { write_exp_elt_opcode (pstate, OP_ATR_MODULUS); } +#line 2230 "ada-exp.c.tmp" break; case 80: -#line 514 "ada-exp.y" /* yacc.c:1646 */ - { (yyval.lval) = 1; } -#line 2140 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 514 "ada-exp.y" + { (yyval.lval) = 1; } +#line 2236 "ada-exp.c.tmp" break; case 81: -#line 516 "ada-exp.y" /* yacc.c:1646 */ - { (yyval.lval) = (yyvsp[-1].typed_val).val; } -#line 2146 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 516 "ada-exp.y" + { (yyval.lval) = (yyvsp[-1].typed_val).val; } +#line 2242 "ada-exp.c.tmp" break; case 82: -#line 521 "ada-exp.y" /* yacc.c:1646 */ - { +#line 521 "ada-exp.y" + { if ((yyvsp[0].tval) == NULL) error (_("Prefix must be type")); write_exp_elt_opcode (pstate, OP_TYPE); write_exp_elt_type (pstate, (yyvsp[0].tval)); write_exp_elt_opcode (pstate, OP_TYPE); } -#line 2157 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 2253 "ada-exp.c.tmp" break; case 84: -#line 532 "ada-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, OP_TYPE); +#line 532 "ada-exp.y" + { write_exp_elt_opcode (pstate, OP_TYPE); write_exp_elt_type (pstate, parse_type (pstate)->builtin_void); write_exp_elt_opcode (pstate, OP_TYPE); } -#line 2166 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 2262 "ada-exp.c.tmp" break; case 85: -#line 540 "ada-exp.y" /* yacc.c:1646 */ - { write_int (pstate, (LONGEST) (yyvsp[0].typed_val).val, (yyvsp[0].typed_val).type); } -#line 2172 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 540 "ada-exp.y" + { write_int (pstate, (LONGEST) (yyvsp[0].typed_val).val, (yyvsp[0].typed_val).type); } +#line 2268 "ada-exp.c.tmp" break; case 86: -#line 544 "ada-exp.y" /* yacc.c:1646 */ - { write_int (pstate, +#line 544 "ada-exp.y" + { write_int (pstate, convert_char_literal (type_qualifier, (yyvsp[0].typed_val).val), (type_qualifier == NULL) ? (yyvsp[0].typed_val).type : type_qualifier); } -#line 2182 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 2278 "ada-exp.c.tmp" break; case 87: -#line 552 "ada-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, OP_FLOAT); +#line 552 "ada-exp.y" + { write_exp_elt_opcode (pstate, OP_FLOAT); write_exp_elt_type (pstate, (yyvsp[0].typed_val_float).type); write_exp_elt_floatcst (pstate, (yyvsp[0].typed_val_float).val); write_exp_elt_opcode (pstate, OP_FLOAT); } -#line 2192 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 2288 "ada-exp.c.tmp" break; case 88: -#line 560 "ada-exp.y" /* yacc.c:1646 */ - { write_int (pstate, 0, type_int (pstate)); } -#line 2198 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 560 "ada-exp.y" + { write_int (pstate, 0, type_int (pstate)); } +#line 2294 "ada-exp.c.tmp" break; case 89: -#line 564 "ada-exp.y" /* yacc.c:1646 */ - { +#line 564 "ada-exp.y" + { write_exp_op_with_string (pstate, OP_STRING, (yyvsp[0].sval)); } -#line 2206 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 2302 "ada-exp.c.tmp" break; case 90: -#line 570 "ada-exp.y" /* yacc.c:1646 */ - { write_int (pstate, 1, type_boolean (pstate)); } -#line 2212 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 570 "ada-exp.y" + { write_int (pstate, 1, type_boolean (pstate)); } +#line 2308 "ada-exp.c.tmp" break; case 91: -#line 572 "ada-exp.y" /* yacc.c:1646 */ - { write_int (pstate, 0, type_boolean (pstate)); } -#line 2218 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 572 "ada-exp.y" + { write_int (pstate, 0, type_boolean (pstate)); } +#line 2314 "ada-exp.c.tmp" break; case 92: -#line 576 "ada-exp.y" /* yacc.c:1646 */ - { error (_("NEW not implemented.")); } -#line 2224 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 576 "ada-exp.y" + { error (_("NEW not implemented.")); } +#line 2320 "ada-exp.c.tmp" break; case 93: -#line 580 "ada-exp.y" /* yacc.c:1646 */ - { (yyval.tval) = write_var_or_type (pstate, NULL, (yyvsp[0].sval)); } -#line 2230 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 580 "ada-exp.y" + { (yyval.tval) = write_var_or_type (pstate, NULL, (yyvsp[0].sval)); } +#line 2326 "ada-exp.c.tmp" break; case 94: -#line 582 "ada-exp.y" /* yacc.c:1646 */ - { (yyval.tval) = write_var_or_type (pstate, (yyvsp[-1].bval), (yyvsp[0].sval)); } -#line 2236 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 582 "ada-exp.y" + { (yyval.tval) = write_var_or_type (pstate, (yyvsp[-1].bval), (yyvsp[0].sval)); } +#line 2332 "ada-exp.c.tmp" break; case 95: -#line 584 "ada-exp.y" /* yacc.c:1646 */ - { +#line 584 "ada-exp.y" + { (yyval.tval) = write_var_or_type (pstate, NULL, (yyvsp[-1].sval)); if ((yyval.tval) == NULL) write_exp_elt_opcode (pstate, UNOP_ADDR); else (yyval.tval) = lookup_pointer_type ((yyval.tval)); } -#line 2248 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 2344 "ada-exp.c.tmp" break; case 96: -#line 592 "ada-exp.y" /* yacc.c:1646 */ - { +#line 592 "ada-exp.y" + { (yyval.tval) = write_var_or_type (pstate, (yyvsp[-2].bval), (yyvsp[-1].sval)); if ((yyval.tval) == NULL) write_exp_elt_opcode (pstate, UNOP_ADDR); else (yyval.tval) = lookup_pointer_type ((yyval.tval)); } -#line 2260 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 2356 "ada-exp.c.tmp" break; case 97: -#line 603 "ada-exp.y" /* yacc.c:1646 */ - { (yyval.bval) = block_lookup (NULL, (yyvsp[-1].sval).ptr); } -#line 2266 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 603 "ada-exp.y" + { (yyval.bval) = block_lookup (NULL, (yyvsp[-1].sval).ptr); } +#line 2362 "ada-exp.c.tmp" break; case 98: -#line 605 "ada-exp.y" /* yacc.c:1646 */ - { (yyval.bval) = block_lookup ((yyvsp[-2].bval), (yyvsp[-1].sval).ptr); } -#line 2272 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 605 "ada-exp.y" + { (yyval.bval) = block_lookup ((yyvsp[-2].bval), (yyvsp[-1].sval).ptr); } +#line 2368 "ada-exp.c.tmp" break; case 99: -#line 610 "ada-exp.y" /* yacc.c:1646 */ - { +#line 610 "ada-exp.y" + { write_exp_elt_opcode (pstate, OP_AGGREGATE); write_exp_elt_longcst (pstate, (yyvsp[-1].lval)); write_exp_elt_opcode (pstate, OP_AGGREGATE); } -#line 2282 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 2378 "ada-exp.c.tmp" break; case 100: -#line 618 "ada-exp.y" /* yacc.c:1646 */ - { (yyval.lval) = (yyvsp[0].lval); } -#line 2288 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 618 "ada-exp.y" + { (yyval.lval) = (yyvsp[0].lval); } +#line 2384 "ada-exp.c.tmp" break; case 101: -#line 620 "ada-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, OP_POSITIONAL); +#line 620 "ada-exp.y" + { write_exp_elt_opcode (pstate, OP_POSITIONAL); write_exp_elt_longcst (pstate, (yyvsp[-1].lval)); write_exp_elt_opcode (pstate, OP_POSITIONAL); (yyval.lval) = (yyvsp[-1].lval) + 1; } -#line 2298 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 2394 "ada-exp.c.tmp" break; case 102: -#line 626 "ada-exp.y" /* yacc.c:1646 */ - { (yyval.lval) = (yyvsp[-1].lval) + (yyvsp[0].lval); } -#line 2304 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 626 "ada-exp.y" + { (yyval.lval) = (yyvsp[-1].lval) + (yyvsp[0].lval); } +#line 2400 "ada-exp.c.tmp" break; case 103: -#line 631 "ada-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, OP_POSITIONAL); +#line 631 "ada-exp.y" + { write_exp_elt_opcode (pstate, OP_POSITIONAL); write_exp_elt_longcst (pstate, 0); write_exp_elt_opcode (pstate, OP_POSITIONAL); (yyval.lval) = 1; } -#line 2314 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 2410 "ada-exp.c.tmp" break; case 104: -#line 637 "ada-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, OP_POSITIONAL); +#line 637 "ada-exp.y" + { write_exp_elt_opcode (pstate, OP_POSITIONAL); write_exp_elt_longcst (pstate, (yyvsp[-2].lval)); write_exp_elt_opcode (pstate, OP_POSITIONAL); (yyval.lval) = (yyvsp[-2].lval) + 1; } -#line 2324 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 2420 "ada-exp.c.tmp" break; case 105: -#line 645 "ada-exp.y" /* yacc.c:1646 */ - { (yyval.lval) = 1; } -#line 2330 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 645 "ada-exp.y" + { (yyval.lval) = 1; } +#line 2426 "ada-exp.c.tmp" break; case 106: -#line 646 "ada-exp.y" /* yacc.c:1646 */ - { (yyval.lval) = 1; } -#line 2336 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 646 "ada-exp.y" + { (yyval.lval) = 1; } +#line 2432 "ada-exp.c.tmp" break; case 107: -#line 648 "ada-exp.y" /* yacc.c:1646 */ - { (yyval.lval) = (yyvsp[0].lval) + 1; } -#line 2342 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 648 "ada-exp.y" + { (yyval.lval) = (yyvsp[0].lval) + 1; } +#line 2438 "ada-exp.c.tmp" break; case 108: -#line 652 "ada-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, OP_OTHERS); } -#line 2348 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 652 "ada-exp.y" + { write_exp_elt_opcode (pstate, OP_OTHERS); } +#line 2444 "ada-exp.c.tmp" break; case 109: -#line 657 "ada-exp.y" /* yacc.c:1646 */ - { +#line 657 "ada-exp.y" + { write_exp_elt_opcode (pstate, OP_CHOICES); write_exp_elt_longcst (pstate, (yyvsp[0].lval)); write_exp_elt_opcode (pstate, OP_CHOICES); } -#line 2358 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 2454 "ada-exp.c.tmp" break; case 110: -#line 671 "ada-exp.y" /* yacc.c:1646 */ - { write_name_assoc (pstate, (yyvsp[-1].sval)); } -#line 2364 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 671 "ada-exp.y" + { write_name_assoc (pstate, (yyvsp[-1].sval)); } +#line 2460 "ada-exp.c.tmp" break; case 111: -#line 672 "ada-exp.y" /* yacc.c:1646 */ - { (yyval.lval) = 1; } -#line 2370 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 672 "ada-exp.y" + { (yyval.lval) = 1; } +#line 2466 "ada-exp.c.tmp" break; case 112: -#line 674 "ada-exp.y" /* yacc.c:1646 */ - { (yyval.lval) = 1; } -#line 2376 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 674 "ada-exp.y" + { (yyval.lval) = 1; } +#line 2472 "ada-exp.c.tmp" break; case 113: -#line 676 "ada-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, OP_DISCRETE_RANGE); +#line 676 "ada-exp.y" + { write_exp_elt_opcode (pstate, OP_DISCRETE_RANGE); write_exp_op_with_string (pstate, OP_NAME, empty_stoken); } -#line 2385 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 2481 "ada-exp.c.tmp" break; case 114: -#line 680 "ada-exp.y" /* yacc.c:1646 */ - { (yyval.lval) = 1; } -#line 2391 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 680 "ada-exp.y" + { (yyval.lval) = 1; } +#line 2487 "ada-exp.c.tmp" break; case 115: -#line 682 "ada-exp.y" /* yacc.c:1646 */ - { write_name_assoc (pstate, (yyvsp[-1].sval)); } -#line 2397 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 682 "ada-exp.y" + { write_name_assoc (pstate, (yyvsp[-1].sval)); } +#line 2493 "ada-exp.c.tmp" break; case 116: -#line 683 "ada-exp.y" /* yacc.c:1646 */ - { (yyval.lval) = (yyvsp[0].lval) + 1; } -#line 2403 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 683 "ada-exp.y" + { (yyval.lval) = (yyvsp[0].lval) + 1; } +#line 2499 "ada-exp.c.tmp" break; case 117: -#line 685 "ada-exp.y" /* yacc.c:1646 */ - { (yyval.lval) = (yyvsp[0].lval) + 1; } -#line 2409 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 685 "ada-exp.y" + { (yyval.lval) = (yyvsp[0].lval) + 1; } +#line 2505 "ada-exp.c.tmp" break; case 118: -#line 687 "ada-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, OP_DISCRETE_RANGE); } -#line 2415 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 687 "ada-exp.y" + { write_exp_elt_opcode (pstate, OP_DISCRETE_RANGE); } +#line 2511 "ada-exp.c.tmp" break; case 119: -#line 688 "ada-exp.y" /* yacc.c:1646 */ - { (yyval.lval) = (yyvsp[0].lval) + 1; } -#line 2421 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 688 "ada-exp.y" + { (yyval.lval) = (yyvsp[0].lval) + 1; } +#line 2517 "ada-exp.c.tmp" break; case 120: -#line 695 "ada-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_IND); } -#line 2427 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 695 "ada-exp.y" + { write_exp_elt_opcode (pstate, UNOP_IND); } +#line 2523 "ada-exp.c.tmp" break; case 121: -#line 697 "ada-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_ADDR); } -#line 2433 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 697 "ada-exp.y" + { write_exp_elt_opcode (pstate, UNOP_ADDR); } +#line 2529 "ada-exp.c.tmp" break; case 122: -#line 699 "ada-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_SUBSCRIPT); } -#line 2439 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 699 "ada-exp.y" + { write_exp_elt_opcode (pstate, BINOP_SUBSCRIPT); } +#line 2535 "ada-exp.c.tmp" break; -#line 2443 "ada-exp.c.tmp" /* yacc.c:1646 */ +#line 2539 "ada-exp.c.tmp" + default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -2463,14 +2560,13 @@ /* Now 'shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ - - yyn = yyr1[yyn]; - - yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; - if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) - yystate = yytable[yystate]; - else - yystate = yydefgoto[yyn - YYNTOKENS]; + { + const int yylhs = yyr1[yyn] - YYNTOKENS; + const int yyi = yypgoto[yylhs] + *yyssp; + yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp + ? yytable[yyi] + : yydefgoto[yylhs]); + } goto yynewstate; @@ -2502,7 +2598,7 @@ { if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); - yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc); + yymsg = YY_CAST (char *, YYSTACK_ALLOC (YY_CAST (YYSIZE_T, yymsg_alloc))); if (!yymsg) { yymsg = yymsgbuf; @@ -2553,12 +2649,10 @@ | yyerrorlab -- error raised explicitly by YYERROR. | `---------------------------------------------------*/ yyerrorlab: - - /* Pacify compilers like GCC when the user code never invokes - YYERROR and the label yyerrorlab therefore never appears in user - code. */ - if (/*CONSTCOND*/ 0) - goto yyerrorlab; + /* Pacify compilers when the user code never invokes YYERROR and the + label yyerrorlab therefore never appears in user code. */ + if (0) + YYERROR; /* Do not reclaim the symbols of the rule whose action triggered this YYERROR. */ @@ -2620,6 +2714,7 @@ yyresult = 0; goto yyreturn; + /*-----------------------------------. | yyabortlab -- YYABORT comes here. | `-----------------------------------*/ @@ -2627,6 +2722,7 @@ yyresult = 1; goto yyreturn; + #if !defined yyoverflow || YYERROR_VERBOSE /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | @@ -2637,6 +2733,10 @@ /* Fall through. */ #endif + +/*-----------------------------------------------------. +| yyreturn -- parsing is finished, return the result. | +`-----------------------------------------------------*/ yyreturn: if (yychar != YYEMPTY) { @@ -2653,7 +2753,7 @@ while (yyssp != yyss) { yydestruct ("Cleanup: popping", - yystos[*yyssp], yyvsp); + yystos[+*yyssp], yyvsp); YYPOPSTACK (1); } #ifndef yyoverflow @@ -2666,7 +2766,7 @@ #endif return yyresult; } -#line 702 "ada-exp.y" /* yacc.c:1906 */ +#line 702 "ada-exp.y" /* yylex defined in ada-lex.c: Reads one token, getting characters */ @@ -3074,7 +3174,7 @@ SYMBOL_DOMAIN (sym) = UNDEF_DOMAIN; sym->set_linkage_name (obstack_strndup (&temp_parse_space, name, len)); - SYMBOL_LANGUAGE (sym) = language_ada; + sym->set_language (language_ada, nullptr); write_exp_elt_opcode (par_state, OP_VAR_VALUE); write_exp_elt_block (par_state, block); @@ -3126,7 +3226,7 @@ fieldno = ada_get_field_index (type, field_name, 1); if (fieldno >= 0) - return TYPE_FIELD_TYPE (type, fieldno); + return type->field (fieldno).type (); subfield_name = field_name; while (*subfield_name != '\0' && *subfield_name != '.' @@ -3141,7 +3241,7 @@ if (fieldno < 0) return NULL; - type = TYPE_FIELD_TYPE (type, fieldno); + type = type->field (fieldno).type (); field_name = subfield_name; } @@ -3354,7 +3454,7 @@ if (type == NULL) return val; type = check_typedef (type); - if (TYPE_CODE (type) != TYPE_CODE_ENUM) + if (type->code () != TYPE_CODE_ENUM) return val; if ((val >= 'a' && val <= 'z') || (val >= '0' && val <= '9')) @@ -3362,7 +3462,7 @@ else xsnprintf (name, sizeof (name), "QU%02x", (int) val); size_t len = strlen (name); - for (f = 0; f < TYPE_NFIELDS (type); f += 1) + for (f = 0; f < type->num_fields (); f += 1) { /* Check the suffix because an enum constant in a package will have a name like "pkg__QUxx". This is safe enough because we @@ -3424,8 +3524,9 @@ return type != NULL ? type : parse_type (par_state)->builtin_data_ptr; } +void _initialize_ada_exp (); void -_initialize_ada_exp (void) +_initialize_ada_exp () { obstack_init (&temp_parse_space); } diff -Nru gdb-9.1/gdb/ada-exp.y gdb-10.2/gdb/ada-exp.y --- gdb-9.1/gdb/ada-exp.y 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/ada-exp.y 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* YACC parser for Ada expressions, for GDB. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -1106,7 +1106,7 @@ SYMBOL_DOMAIN (sym) = UNDEF_DOMAIN; sym->set_linkage_name (obstack_strndup (&temp_parse_space, name, len)); - SYMBOL_LANGUAGE (sym) = language_ada; + sym->set_language (language_ada, nullptr); write_exp_elt_opcode (par_state, OP_VAR_VALUE); write_exp_elt_block (par_state, block); @@ -1158,7 +1158,7 @@ fieldno = ada_get_field_index (type, field_name, 1); if (fieldno >= 0) - return TYPE_FIELD_TYPE (type, fieldno); + return type->field (fieldno).type (); subfield_name = field_name; while (*subfield_name != '\0' && *subfield_name != '.' @@ -1173,7 +1173,7 @@ if (fieldno < 0) return NULL; - type = TYPE_FIELD_TYPE (type, fieldno); + type = type->field (fieldno).type (); field_name = subfield_name; } @@ -1386,7 +1386,7 @@ if (type == NULL) return val; type = check_typedef (type); - if (TYPE_CODE (type) != TYPE_CODE_ENUM) + if (type->code () != TYPE_CODE_ENUM) return val; if ((val >= 'a' && val <= 'z') || (val >= '0' && val <= '9')) @@ -1394,7 +1394,7 @@ else xsnprintf (name, sizeof (name), "QU%02x", (int) val); size_t len = strlen (name); - for (f = 0; f < TYPE_NFIELDS (type); f += 1) + for (f = 0; f < type->num_fields (); f += 1) { /* Check the suffix because an enum constant in a package will have a name like "pkg__QUxx". This is safe enough because we @@ -1456,8 +1456,9 @@ return type != NULL ? type : parse_type (par_state)->builtin_data_ptr; } +void _initialize_ada_exp (); void -_initialize_ada_exp (void) +_initialize_ada_exp () { obstack_init (&temp_parse_space); } diff -Nru gdb-9.1/gdb/ada-lang.c gdb-10.2/gdb/ada-lang.c --- gdb-9.1/gdb/ada-lang.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/ada-lang.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Ada language support routines for GDB, the GNU debugger. - Copyright (C) 1992-2020 Free Software Foundation, Inc. + Copyright (C) 1992-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -196,6 +196,8 @@ static struct value *value_pos_atr (struct type *, struct value *); +static struct value *val_atr (struct type *, LONGEST); + static struct value *value_val_atr (struct type *, struct value *); static struct symbol *standard_lookup (const char *, const struct block *, @@ -204,9 +206,6 @@ static struct value *ada_search_struct_field (const char *, struct value *, int, struct type *); -static struct value *ada_value_primitive_field (struct value *, int, int, - struct type *); - static int find_struct_field (const char *, struct type *, int, struct type **, int *, int *, int *, int *); @@ -216,9 +215,6 @@ static int ada_is_direct_array_type (struct type *); -static void ada_language_arch_info (struct gdbarch *, - struct language_arch_info *); - static struct value *ada_index_struct_field (int, struct value *, int, struct type *); @@ -332,23 +328,6 @@ static struct cmd_list_element *maint_set_ada_cmdlist; static struct cmd_list_element *maint_show_ada_cmdlist; -/* Implement the "maintenance set ada" (prefix) command. */ - -static void -maint_set_ada_cmd (const char *args, int from_tty) -{ - help_list (maint_set_ada_cmdlist, "maintenance set ada ", all_commands, - gdb_stdout); -} - -/* Implement the "maintenance show ada" (prefix) command. */ - -static void -maint_show_ada_cmd (const char *args, int from_tty) -{ - cmd_show_list (maint_show_ada_cmdlist, from_tty, ""); -} - /* The "maintenance ada set/show ignore-descriptive-type" value. */ static bool ada_ignore_descriptive_types_p = false; @@ -471,7 +450,7 @@ static struct type * ada_typedef_target_type (struct type *type) { - while (TYPE_CODE (type) == TYPE_CODE_TYPEDEF) + while (type->code () == TYPE_CODE_TYPEDEF) type = TYPE_TARGET_TYPE (type); return type; } @@ -509,33 +488,6 @@ return string_printf ("<%s>", str); } -static const char * -ada_get_gdb_completer_word_break_characters (void) -{ - return ada_completer_word_break_characters; -} - -/* Print an array element index using the Ada syntax. */ - -static void -ada_print_array_index (struct value *index_value, struct ui_file *stream, - const struct value_print_options *options) -{ - LA_VALUE_PRINT (index_value, stream, options); - fprintf_filtered (stream, " => "); -} - -/* la_watch_location_expression for Ada. */ - -static gdb::unique_xmalloc_ptr -ada_watch_location_expression (struct type *type, CORE_ADDR addr) -{ - type = check_typedef (TYPE_TARGET_TYPE (check_typedef (type))); - std::string name = type_to_string (type); - return gdb::unique_xmalloc_ptr - (xstrprintf ("{%s} %s", name.c_str (), core_addr_to_string (addr))); -} - /* Assuming V points to an array of S objects, make sure that it contains at least M objects, updating V and S as necessary. */ @@ -591,13 +543,13 @@ int fieldno; struct type *struct_type = check_typedef ((struct type *) type); - for (fieldno = 0; fieldno < TYPE_NFIELDS (struct_type); fieldno++) + for (fieldno = 0; fieldno < struct_type->num_fields (); fieldno++) if (field_name_match (TYPE_FIELD_NAME (struct_type, fieldno), field_name)) return fieldno; if (!maybe_missing) error (_("Unable to find field %s in struct %s. Aborting"), - field_name, TYPE_NAME (struct_type)); + field_name, struct_type->name ()); return -1; } @@ -769,13 +721,27 @@ LONGEST ada_discrete_type_high_bound (struct type *type) { - type = resolve_dynamic_type (type, NULL, 0); - switch (TYPE_CODE (type)) + type = resolve_dynamic_type (type, {}, 0); + switch (type->code ()) { case TYPE_CODE_RANGE: - return TYPE_HIGH_BOUND (type); + { + const dynamic_prop &high = type->bounds ()->high; + + if (high.kind () == PROP_CONST) + return high.const_val (); + else + { + gdb_assert (high.kind () == PROP_UNDEFINED); + + /* This happens when trying to evaluate a type's dynamic bound + without a live target. There is nothing relevant for us to + return here, so return 0. */ + return 0; + } + } case TYPE_CODE_ENUM: - return TYPE_FIELD_ENUMVAL (type, TYPE_NFIELDS (type) - 1); + return TYPE_FIELD_ENUMVAL (type, type->num_fields () - 1); case TYPE_CODE_BOOL: return 1; case TYPE_CODE_CHAR: @@ -790,11 +756,25 @@ LONGEST ada_discrete_type_low_bound (struct type *type) { - type = resolve_dynamic_type (type, NULL, 0); - switch (TYPE_CODE (type)) + type = resolve_dynamic_type (type, {}, 0); + switch (type->code ()) { case TYPE_CODE_RANGE: - return TYPE_LOW_BOUND (type); + { + const dynamic_prop &low = type->bounds ()->low; + + if (low.kind () == PROP_CONST) + return low.const_val (); + else + { + gdb_assert (low.kind () == PROP_UNDEFINED); + + /* This happens when trying to evaluate a type's dynamic bound + without a live target. There is nothing relevant for us to + return here, so return 0. */ + return 0; + } + } case TYPE_CODE_ENUM: return TYPE_FIELD_ENUMVAL (type, 0); case TYPE_CODE_BOOL: @@ -813,7 +793,7 @@ static struct type * get_base_type (struct type *type) { - while (type != NULL && TYPE_CODE (type) == TYPE_CODE_RANGE) + while (type != NULL && type->code () == TYPE_CODE_RANGE) { if (type == TYPE_TARGET_TYPE (type) || TYPE_TARGET_TYPE (type) == NULL) return type; @@ -834,9 +814,9 @@ if (ada_is_array_descriptor_type (type) || (ada_is_constrained_packed_array_type (type) - && TYPE_CODE (type) != TYPE_CODE_PTR)) + && type->code () != TYPE_CODE_PTR)) { - if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF) /* array access type. */ + if (type->code () == TYPE_CODE_TYPEDEF) /* array access type. */ value = ada_coerce_to_simple_array_ptr (value); else value = ada_coerce_to_simple_array (value); @@ -896,18 +876,11 @@ if (msym.minsym != NULL) { - CORE_ADDR main_program_name_addr; - int err_code; - - main_program_name_addr = BMSYMBOL_VALUE_ADDRESS (msym); + CORE_ADDR main_program_name_addr = BMSYMBOL_VALUE_ADDRESS (msym); if (main_program_name_addr == 0) error (_("Invalid address for Ada main program name.")); - target_read_string (main_program_name_addr, &main_program_name, - 1024, &err_code); - - if (err_code != 0) - return NULL; + main_program_name = target_read_string (main_program_name_addr, 1024); return main_program_name.get (); } @@ -1016,17 +989,17 @@ to next call. */ static char * -ada_fold_name (const char *name) +ada_fold_name (gdb::string_view name) { static char *fold_buffer = NULL; static size_t fold_buffer_size = 0; - int len = strlen (name); + int len = name.size (); GROW_VECT (fold_buffer, fold_buffer_size, len + 1); if (name[0] == '\'') { - strncpy (fold_buffer, name + 1, len - 2); + strncpy (fold_buffer, name.data () + 1, len - 2); fold_buffer[len - 2] = '\000'; } else @@ -1376,7 +1349,7 @@ if (!gsymbol->ada_mangled) { - std::string decoded = ada_decode (gsymbol->name); + std::string decoded = ada_decode (gsymbol->linkage_name ()); struct obstack *obstack = gsymbol->language_specific.obstack; gsymbol->ada_mangled = 1; @@ -1408,45 +1381,6 @@ return xstrdup (ada_decode (encoded).c_str ()); } -/* Implement la_sniff_from_mangled_name for Ada. */ - -static int -ada_sniff_from_mangled_name (const char *mangled, char **out) -{ - std::string demangled = ada_decode (mangled); - - *out = NULL; - - if (demangled != mangled && demangled[0] != '<') - { - /* Set the gsymbol language to Ada, but still return 0. - Two reasons for that: - - 1. For Ada, we prefer computing the symbol's decoded name - on the fly rather than pre-compute it, in order to save - memory (Ada projects are typically very large). - - 2. There are some areas in the definition of the GNAT - encoding where, with a bit of bad luck, we might be able - to decode a non-Ada symbol, generating an incorrect - demangled name (Eg: names ending with "TB" for instance - are identified as task bodies and so stripped from - the decoded name returned). - - Returning 1, here, but not setting *DEMANGLED, helps us get a - little bit of the best of both worlds. Because we're last, - we should not affect any of the other languages that were - able to demangle the symbol before us; we get to correctly - tag Ada symbols as such; and even if we incorrectly tagged a - non-Ada symbol, which should be rare, any routing through the - Ada language should be transparent (Ada tries to behave much - like C/C++ with non-Ada symbols). */ - return 1; - } - - return 0; -} - /* Arrays */ @@ -1481,7 +1415,7 @@ if (index_desc_type == NULL) return; - gdb_assert (TYPE_NFIELDS (index_desc_type) > 0); + gdb_assert (index_desc_type->num_fields () > 0); /* Check if INDEX_DESC_TYPE follows the older encoding (it is sufficient to check one field only, no need to check them all). If not, return @@ -1490,34 +1424,22 @@ If our INDEX_DESC_TYPE was generated using the older encoding, the field type should be a meaningless integer type whose name is not equal to the field name. */ - if (TYPE_NAME (TYPE_FIELD_TYPE (index_desc_type, 0)) != NULL - && strcmp (TYPE_NAME (TYPE_FIELD_TYPE (index_desc_type, 0)), + if (index_desc_type->field (0).type ()->name () != NULL + && strcmp (index_desc_type->field (0).type ()->name (), TYPE_FIELD_NAME (index_desc_type, 0)) == 0) return; /* Fixup each field of INDEX_DESC_TYPE. */ - for (i = 0; i < TYPE_NFIELDS (index_desc_type); i++) + for (i = 0; i < index_desc_type->num_fields (); i++) { const char *name = TYPE_FIELD_NAME (index_desc_type, i); struct type *raw_type = ada_check_typedef (ada_find_any_type (name)); if (raw_type) - TYPE_FIELD_TYPE (index_desc_type, i) = raw_type; + index_desc_type->field (i).set_type (raw_type); } } -/* Names of MAX_ADA_DIMENS bounds in P_BOUNDS fields of array descriptors. */ - -static const char *bound_name[] = { - "LB0", "UB0", "LB1", "UB1", "LB2", "UB2", "LB3", "UB3", - "LB4", "UB4", "LB5", "UB5", "LB6", "UB6", "LB7", "UB7" -}; - -/* Maximum number of array dimensions we are prepared to handle. */ - -#define MAX_ADA_DIMENS (sizeof(bound_name) / (2*sizeof(char *))) - - /* The desc_* routines return primitive portions of array descriptors (fat pointers). */ @@ -1530,12 +1452,12 @@ if (type == NULL) return NULL; type = ada_check_typedef (type); - if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF) + if (type->code () == TYPE_CODE_TYPEDEF) type = ada_typedef_target_type (type); if (type != NULL - && (TYPE_CODE (type) == TYPE_CODE_PTR - || TYPE_CODE (type) == TYPE_CODE_REF)) + && (type->code () == TYPE_CODE_PTR + || type->code () == TYPE_CODE_REF)) return ada_check_typedef (TYPE_TARGET_TYPE (type)); else return type; @@ -1583,7 +1505,7 @@ data_type = lookup_pointer_type (data_type); - if (TYPE_CODE (type) == TYPE_CODE_PTR) + if (type->code () == TYPE_CODE_PTR) return value_cast (data_type, value_copy (val)); else return value_from_longest (data_type, value_address (val)); @@ -1595,7 +1517,7 @@ is_thick_pntr (struct type *type) { type = desc_base_type (type); - return (type != NULL && TYPE_CODE (type) == TYPE_CODE_STRUCT + return (type != NULL && type->code () == TYPE_CODE_STRUCT && lookup_struct_elt_type (type, "P_BOUNDS", 1) != NULL); } @@ -1620,7 +1542,7 @@ if (r != NULL) return ada_check_typedef (r); } - else if (TYPE_CODE (type) == TYPE_CODE_STRUCT) + else if (type->code () == TYPE_CODE_STRUCT) { r = lookup_struct_elt_type (type, "P_BOUNDS", 1); if (r != NULL) @@ -1649,7 +1571,7 @@ /* NOTE: The following calculation is not really kosher, but since desc_type is an XVE-encoded type (and shouldn't be), the correct calculation is a real pain. FIXME (and fix GCC). */ - if (TYPE_CODE (type) == TYPE_CODE_PTR) + if (type->code () == TYPE_CODE_PTR) addr = value_as_long (arr); else addr = value_address (arr); @@ -1666,7 +1588,7 @@ struct type *p_bounds_type = value_type (p_bounds); if (p_bounds_type - && TYPE_CODE (p_bounds_type) == TYPE_CODE_PTR) + && p_bounds_type->code () == TYPE_CODE_PTR) { struct type *target_type = TYPE_TARGET_TYPE (p_bounds_type); @@ -1704,7 +1626,7 @@ if (TYPE_FIELD_BITSIZE (type, 1) > 0) return TYPE_FIELD_BITSIZE (type, 1); else - return 8 * TYPE_LENGTH (ada_check_typedef (TYPE_FIELD_TYPE (type, 1))); + return 8 * TYPE_LENGTH (ada_check_typedef (type->field (1).type ())); } /* If TYPE is the type of an array descriptor (fat or thin pointer) or a @@ -1719,13 +1641,13 @@ /* NOTE: The following is bogus; see comment in desc_bounds. */ if (is_thin_pntr (type)) - return desc_base_type (TYPE_FIELD_TYPE (thin_descriptor_type (type), 1)); + return desc_base_type (thin_descriptor_type (type)->field (1).type ()); else if (is_thick_pntr (type)) { struct type *data_type = lookup_struct_elt_type (type, "P_ARRAY", 1); if (data_type - && TYPE_CODE (ada_check_typedef (data_type)) == TYPE_CODE_PTR) + && ada_check_typedef (data_type)->code () == TYPE_CODE_PTR) return ada_check_typedef (TYPE_TARGET_TYPE (data_type)); } @@ -1770,7 +1692,7 @@ if (TYPE_FIELD_BITSIZE (type, 0) > 0) return TYPE_FIELD_BITSIZE (type, 0); else - return TARGET_CHAR_BIT * TYPE_LENGTH (TYPE_FIELD_TYPE (type, 0)); + return TARGET_CHAR_BIT * TYPE_LENGTH (type->field (0).type ()); } /* If BOUNDS is an array-bounds structure (or pointer to one), return @@ -1780,7 +1702,10 @@ static struct value * desc_one_bound (struct value *bounds, int i, int which) { - return value_struct_elt (&bounds, NULL, bound_name[2 * i + which - 2], NULL, + char bound_name[20]; + xsnprintf (bound_name, sizeof (bound_name), "%cB%d", + which ? 'U' : 'L', i - 1); + return value_struct_elt (&bounds, NULL, bound_name, NULL, _("Bad GNAT array descriptor bounds")); } @@ -1806,7 +1731,7 @@ if (TYPE_FIELD_BITSIZE (type, 2 * i + which - 2) > 0) return TYPE_FIELD_BITSIZE (type, 2 * i + which - 2); else - return 8 * TYPE_LENGTH (TYPE_FIELD_TYPE (type, 2 * i + which - 2)); + return 8 * TYPE_LENGTH (type->field (2 * i + which - 2).type ()); } /* If TYPE is the type of an array-bounds structure, the type of its @@ -1817,8 +1742,12 @@ { type = desc_base_type (type); - if (TYPE_CODE (type) == TYPE_CODE_STRUCT) - return lookup_struct_elt_type (type, bound_name[2 * i - 2], 1); + if (type->code () == TYPE_CODE_STRUCT) + { + char bound_name[20]; + xsnprintf (bound_name, sizeof (bound_name), "LB%d", i - 1); + return lookup_struct_elt_type (type, bound_name, 1); + } else return NULL; } @@ -1832,7 +1761,7 @@ type = desc_base_type (type); if (type != NULL) - return TYPE_NFIELDS (type) / 2; + return type->num_fields () / 2; return 0; } @@ -1846,7 +1775,7 @@ if (type == NULL) return 0; type = ada_check_typedef (type); - return (TYPE_CODE (type) == TYPE_CODE_ARRAY + return (type->code () == TYPE_CODE_ARRAY || ada_is_array_descriptor_type (type)); } @@ -1856,9 +1785,9 @@ static int ada_is_array_type (struct type *type) { - while (type != NULL - && (TYPE_CODE (type) == TYPE_CODE_PTR - || TYPE_CODE (type) == TYPE_CODE_REF)) + while (type != NULL + && (type->code () == TYPE_CODE_PTR + || type->code () == TYPE_CODE_REF)) type = TYPE_TARGET_TYPE (type); return ada_is_direct_array_type (type); } @@ -1871,10 +1800,10 @@ if (type == NULL) return 0; type = ada_check_typedef (type); - return (TYPE_CODE (type) == TYPE_CODE_ARRAY - || (TYPE_CODE (type) == TYPE_CODE_PTR - && TYPE_CODE (ada_check_typedef (TYPE_TARGET_TYPE (type))) - == TYPE_CODE_ARRAY)); + return (type->code () == TYPE_CODE_ARRAY + || (type->code () == TYPE_CODE_PTR + && (ada_check_typedef (TYPE_TARGET_TYPE (type))->code () + == TYPE_CODE_ARRAY))); } /* Non-zero iff TYPE belongs to a GNAT array descriptor. */ @@ -1888,7 +1817,7 @@ return 0; type = ada_check_typedef (type); return (data_type != NULL - && TYPE_CODE (data_type) == TYPE_CODE_ARRAY + && data_type->code () == TYPE_CODE_ARRAY && desc_arity (desc_bounds_type (type)) > 0); } @@ -1902,7 +1831,7 @@ { return type != NULL - && TYPE_CODE (type) == TYPE_CODE_STRUCT + && type->code () == TYPE_CODE_STRUCT && (lookup_struct_elt_type (type, "P_BOUNDS", 1) != NULL || lookup_struct_elt_type (type, "P_ARRAY", 1) != NULL) && !ada_is_array_descriptor_type (type); @@ -2098,7 +2027,7 @@ /* Access to arrays implemented as fat pointers are encoded as a typedef of the fat pointer type. We need the name of the fat pointer type to do the decoding, so strip the typedef layer. */ - if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF) + if (type->code () == TYPE_CODE_TYPEDEF) type = ada_typedef_target_type (type); raw_name = ada_type_name (ada_check_typedef (type)); @@ -2148,15 +2077,15 @@ LONGEST low_bound, high_bound; type = ada_check_typedef (type); - if (TYPE_CODE (type) != TYPE_CODE_ARRAY) + if (type->code () != TYPE_CODE_ARRAY) return type; index_type_desc = ada_find_parallel_type (type, "___XA"); if (index_type_desc) - index_type = to_fixed_range_type (TYPE_FIELD_TYPE (index_type_desc, 0), + index_type = to_fixed_range_type (index_type_desc->field (0).type (), NULL); else - index_type = TYPE_INDEX_TYPE (type); + index_type = type->index_type (); new_type = alloc_type_copy (type); new_elt_type = @@ -2164,11 +2093,11 @@ elt_bits); create_array_type (new_type, new_elt_type, index_type); TYPE_FIELD_BITSIZE (new_type, 0) = *elt_bits; - TYPE_NAME (new_type) = ada_type_name (type); + new_type->set_name (ada_type_name (type)); - if ((TYPE_CODE (check_typedef (index_type)) == TYPE_CODE_RANGE + if ((check_typedef (index_type)->code () == TYPE_CODE_RANGE && is_dynamic_type (check_typedef (index_type))) - || get_discrete_bounds (index_type, &low_bound, &high_bound) < 0) + || !get_discrete_bounds (index_type, &low_bound, &high_bound)) low_bound = high_bound = 0; if (high_bound < low_bound) *elt_bits = TYPE_LENGTH (new_type) = 0; @@ -2217,7 +2146,7 @@ } shadow_type = check_typedef (shadow_type); - if (TYPE_CODE (shadow_type) != TYPE_CODE_ARRAY) + if (shadow_type->code () != TYPE_CODE_ARRAY) { lim_warning (_("could not understand bounds " "information on packed array")); @@ -2247,7 +2176,7 @@ and "value_ind" routines to perform the dereferencing, as opposed to using "ada_coerce_ref" or "ada_value_ind". */ arr = coerce_ref (arr); - if (TYPE_CODE (ada_check_typedef (value_type (arr))) == TYPE_CODE_PTR) + if (ada_check_typedef (value_type (arr))->code () == TYPE_CODE_PTR) arr = value_ind (arr); type = decode_constrained_packed_array_type (value_type (arr)); @@ -2303,18 +2232,18 @@ elt_type = ada_check_typedef (value_type (arr)); for (i = 0; i < arity; i += 1) { - if (TYPE_CODE (elt_type) != TYPE_CODE_ARRAY + if (elt_type->code () != TYPE_CODE_ARRAY || TYPE_FIELD_BITSIZE (elt_type, 0) == 0) error (_("attempt to do packed indexing of " "something other than a packed array")); else { - struct type *range_type = TYPE_INDEX_TYPE (elt_type); + struct type *range_type = elt_type->index_type (); LONGEST lowerbound, upperbound; LONGEST idx; - if (get_discrete_bounds (range_type, &lowerbound, &upperbound) < 0) + if (!get_discrete_bounds (range_type, &lowerbound, &upperbound)) { lim_warning (_("don't know bounds of array")); lowerbound = upperbound = 0; @@ -2342,14 +2271,14 @@ static int has_negatives (struct type *type) { - switch (TYPE_CODE (type)) + switch (type->code ()) { default: return 0; case TYPE_CODE_INT: return !TYPE_UNSIGNED (type); case TYPE_CODE_RANGE: - return TYPE_LOW_BOUND (type) - TYPE_RANGE_DATA (type)->bias < 0; + return type->bounds ()->low.const_val () - type->bounds ()->bias < 0; } } @@ -2525,7 +2454,7 @@ staging.data (), staging.size (), is_big_endian, has_negatives (type), is_scalar); - type = resolve_dynamic_type (type, staging.data (), 0); + type = resolve_dynamic_type (type, staging, 0); if (TYPE_LENGTH (type) < (bit_size + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT) { /* This happens when the length of the object is dynamic, @@ -2627,8 +2556,8 @@ if (VALUE_LVAL (toval) == lval_memory && bits > 0 - && (TYPE_CODE (type) == TYPE_CODE_FLT - || TYPE_CODE (type) == TYPE_CODE_STRUCT)) + && (type->code () == TYPE_CODE_FLT + || type->code () == TYPE_CODE_STRUCT)) { int len = (value_bitpos (toval) + bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT; @@ -2637,7 +2566,7 @@ struct value *val; CORE_ADDR to_addr = value_address (toval); - if (TYPE_CODE (type) == TYPE_CODE_FLT) + if (type->code () == TYPE_CODE_FLT) fromval = value_cast (type, fromval); read_memory (to_addr, buffer, len); @@ -2718,7 +2647,7 @@ bool ada_is_access_to_unconstrained_array (struct type *type) { - return (TYPE_CODE (type) == TYPE_CODE_TYPEDEF + return (type->code () == TYPE_CODE_TYPEDEF && is_thick_pntr (ada_typedef_target_type (type))); } @@ -2736,7 +2665,7 @@ elt = ada_coerce_to_simple_array (arr); elt_type = ada_check_typedef (value_type (elt)); - if (TYPE_CODE (elt_type) == TYPE_CODE_ARRAY + if (elt_type->code () == TYPE_CODE_ARRAY && TYPE_FIELD_BITSIZE (elt_type, 0) > 0) return value_subscript_packed (elt, arity, ind); @@ -2744,13 +2673,13 @@ { struct type *saved_elt_type = TYPE_TARGET_TYPE (elt_type); - if (TYPE_CODE (elt_type) != TYPE_CODE_ARRAY) + if (elt_type->code () != TYPE_CODE_ARRAY) error (_("too many subscripts (%d expected)"), k); elt = value_subscript (elt, pos_atr (ind[k])); if (ada_is_access_to_unconstrained_array (saved_elt_type) - && TYPE_CODE (value_type (elt)) != TYPE_CODE_TYPEDEF) + && value_type (elt)->code () != TYPE_CODE_TYPEDEF) { /* The element is a typedef to an unconstrained array, except that the value_subscript call stripped the @@ -2793,22 +2722,20 @@ struct type *type = check_typedef (value_enclosing_type (array_ind)); - if (TYPE_CODE (type) == TYPE_CODE_ARRAY + if (type->code () == TYPE_CODE_ARRAY && TYPE_FIELD_BITSIZE (type, 0) > 0) return value_subscript_packed (array_ind, arity, ind); for (k = 0; k < arity; k += 1) { LONGEST lwb, upb; - struct value *lwb_value; - if (TYPE_CODE (type) != TYPE_CODE_ARRAY) + if (type->code () != TYPE_CODE_ARRAY) error (_("too many subscripts (%d expected)"), k); arr = value_cast (lookup_pointer_type (TYPE_TARGET_TYPE (type)), value_copy (arr)); - get_discrete_bounds (TYPE_INDEX_TYPE (type), &lwb, &upb); - lwb_value = value_from_longest (value_type(ind[k]), lwb); - arr = value_ptradd (arr, pos_atr (ind[k]) - pos_atr (lwb_value)); + get_discrete_bounds (type->index_type (), &lwb, &upb); + arr = value_ptradd (arr, pos_atr (ind[k]) - lwb); type = TYPE_TARGET_TYPE (type); } @@ -2824,19 +2751,21 @@ int low, int high) { struct type *type0 = ada_check_typedef (type); - struct type *base_index_type = TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (type0)); + struct type *base_index_type = TYPE_TARGET_TYPE (type0->index_type ()); struct type *index_type = create_static_range_type (NULL, base_index_type, low, high); struct type *slice_type = create_array_type_with_stride (NULL, TYPE_TARGET_TYPE (type0), index_type, - get_dyn_prop (DYN_PROP_BYTE_STRIDE, type0), + type0->dyn_prop (DYN_PROP_BYTE_STRIDE), TYPE_FIELD_BITSIZE (type0, 0)); - int base_low = ada_discrete_type_low_bound (TYPE_INDEX_TYPE (type0)); - LONGEST base_low_pos, low_pos; + int base_low = ada_discrete_type_low_bound (type0->index_type ()); + gdb::optional base_low_pos, low_pos; CORE_ADDR base; - if (!discrete_position (base_index_type, low, &low_pos) - || !discrete_position (base_index_type, base_low, &base_low_pos)) + low_pos = discrete_position (base_index_type, low); + base_low_pos = discrete_position (base_index_type, base_low); + + if (!low_pos.has_value () || !base_low_pos.has_value ()) { warning (_("unable to get positions in slice, use bounds instead")); low_pos = low; @@ -2844,7 +2773,7 @@ } base = value_as_address (array_ptr) - + ((low_pos - base_low_pos) + + ((*low_pos - *base_low_pos) * TYPE_LENGTH (TYPE_TARGET_TYPE (type0))); return value_at_lazy (slice_type, base); } @@ -2854,17 +2783,20 @@ ada_value_slice (struct value *array, int low, int high) { struct type *type = ada_check_typedef (value_type (array)); - struct type *base_index_type = TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (type)); + struct type *base_index_type = TYPE_TARGET_TYPE (type->index_type ()); struct type *index_type - = create_static_range_type (NULL, TYPE_INDEX_TYPE (type), low, high); + = create_static_range_type (NULL, type->index_type (), low, high); struct type *slice_type = create_array_type_with_stride (NULL, TYPE_TARGET_TYPE (type), index_type, - get_dyn_prop (DYN_PROP_BYTE_STRIDE, type), + type->dyn_prop (DYN_PROP_BYTE_STRIDE), TYPE_FIELD_BITSIZE (type, 0)); - LONGEST low_pos, high_pos; + gdb::optional low_pos, high_pos; - if (!discrete_position (base_index_type, low, &low_pos) - || !discrete_position (base_index_type, high, &high_pos)) + + low_pos = discrete_position (base_index_type, low); + high_pos = discrete_position (base_index_type, high); + + if (!low_pos.has_value () || !high_pos.has_value ()) { warning (_("unable to get positions in slice, use bounds instead")); low_pos = low; @@ -2872,7 +2804,7 @@ } return value_cast (slice_type, - value_slice (array, low, high_pos - low_pos + 1)); + value_slice (array, low, *high_pos - *low_pos + 1)); } /* If type is a record type in the form of a standard GNAT array @@ -2891,10 +2823,10 @@ type = desc_base_type (type); arity = 0; - if (TYPE_CODE (type) == TYPE_CODE_STRUCT) + if (type->code () == TYPE_CODE_STRUCT) return desc_arity (desc_bounds_type (type)); else - while (TYPE_CODE (type) == TYPE_CODE_ARRAY) + while (type->code () == TYPE_CODE_ARRAY) { arity += 1; type = ada_check_typedef (TYPE_TARGET_TYPE (type)); @@ -2913,7 +2845,7 @@ { type = desc_base_type (type); - if (TYPE_CODE (type) == TYPE_CODE_STRUCT) + if (type->code () == TYPE_CODE_STRUCT) { int k; struct type *p_array_type; @@ -2934,9 +2866,9 @@ } return p_array_type; } - else if (TYPE_CODE (type) == TYPE_CODE_ARRAY) + else if (type->code () == TYPE_CODE_ARRAY) { - while (nindices != 0 && TYPE_CODE (type) == TYPE_CODE_ARRAY) + while (nindices != 0 && type->code () == TYPE_CODE_ARRAY) { type = TYPE_TARGET_TYPE (type); nindices -= 1; @@ -2969,11 +2901,11 @@ for (i = 1; i < n; i += 1) type = TYPE_TARGET_TYPE (type); - result_type = TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (type)); + result_type = TYPE_TARGET_TYPE (type->index_type ()); /* FIXME: The stabs type r(0,0);bound;bound in an array type has a target type of TYPE_CODE_UNDEF. We compensate here, but perhaps stabsread.c would make more sense. */ - if (result_type && TYPE_CODE (result_type) == TYPE_CODE_UNDEF) + if (result_type && result_type->code () == TYPE_CODE_UNDEF) result_type = NULL; } else @@ -3006,7 +2938,7 @@ if (arr_type == NULL || !ada_is_simple_array_type (arr_type)) return (LONGEST) - which; - if (TYPE_CODE (arr_type) == TYPE_CODE_PTR) + if (arr_type->code () == TYPE_CODE_PTR) type = TYPE_TARGET_TYPE (arr_type); else type = arr_type; @@ -3025,7 +2957,7 @@ } if (index_type_desc != NULL) - index_type = to_fixed_range_type (TYPE_FIELD_TYPE (index_type_desc, n - 1), + index_type = to_fixed_range_type (index_type_desc->field (n - 1).type (), NULL); else { @@ -3034,7 +2966,7 @@ for (i = 1; i < n; i++) elt_type = check_typedef (TYPE_TARGET_TYPE (elt_type)); - index_type = TYPE_INDEX_TYPE (elt_type); + index_type = elt_type->index_type (); } return @@ -3053,7 +2985,7 @@ { struct type *arr_type; - if (TYPE_CODE (check_typedef (value_type (arr))) == TYPE_CODE_PTR) + if (check_typedef (value_type (arr))->code () == TYPE_CODE_PTR) arr = value_ind (arr); arr_type = value_enclosing_type (arr); @@ -3077,7 +3009,7 @@ struct type *arr_type, *index_type; int low, high; - if (TYPE_CODE (check_typedef (value_type (arr))) == TYPE_CODE_PTR) + if (check_typedef (value_type (arr))->code () == TYPE_CODE_PTR) arr = value_ind (arr); arr_type = value_enclosing_type (arr); @@ -3100,7 +3032,7 @@ if (index_type != NULL) { struct type *base_type; - if (TYPE_CODE (index_type) == TYPE_CODE_RANGE) + if (index_type->code () == TYPE_CODE_RANGE) base_type = TYPE_TARGET_TYPE (index_type); else base_type = index_type; @@ -3121,7 +3053,7 @@ struct type *arr_type0 = ada_check_typedef (arr_type); struct type *index_type = create_static_range_type - (NULL, TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (arr_type0)), low, + (NULL, TYPE_TARGET_TYPE (arr_type0->index_type ()), low, high < low ? low - 1 : high); struct type *elt_type = ada_array_element_type (arr_type0, 1); @@ -3228,25 +3160,25 @@ fprintf_filtered (stream, "%s", sym->print_name ()); if (!print_signatures || type == NULL - || TYPE_CODE (type) != TYPE_CODE_FUNC) + || type->code () != TYPE_CODE_FUNC) return; - if (TYPE_NFIELDS (type) > 0) + if (type->num_fields () > 0) { int i; fprintf_filtered (stream, " ("); - for (i = 0; i < TYPE_NFIELDS (type); ++i) + for (i = 0; i < type->num_fields (); ++i) { if (i > 0) fprintf_filtered (stream, "; "); - ada_print_type (TYPE_FIELD_TYPE (type, i), NULL, stream, -1, 0, + ada_print_type (type->field (i).type (), NULL, stream, -1, 0, flags); } fprintf_filtered (stream, ")"); } if (TYPE_TARGET_TYPE (type) != NULL - && TYPE_CODE (TYPE_TARGET_TYPE (type)) != TYPE_CODE_VOID) + && TYPE_TARGET_TYPE (type)->code () != TYPE_CODE_VOID) { fprintf_filtered (stream, " return "); ada_print_type (TYPE_TARGET_TYPE (type), NULL, stream, -1, 0, flags); @@ -3409,7 +3341,7 @@ int is_enumeral = (SYMBOL_CLASS (syms[i].symbol) == LOC_CONST && SYMBOL_TYPE (syms[i].symbol) != NULL - && TYPE_CODE (SYMBOL_TYPE (syms[i].symbol)) == TYPE_CODE_ENUM); + && SYMBOL_TYPE (syms[i].symbol)->code () == TYPE_CODE_ENUM); struct symtab *symtab = NULL; if (SYMBOL_OBJFILE_OWNED (syms[i].symbol)) @@ -3425,7 +3357,7 @@ SYMBOL_LINE (syms[i].symbol)); } else if (is_enumeral - && TYPE_NAME (SYMBOL_TYPE (syms[i].symbol)) != NULL) + && SYMBOL_TYPE (syms[i].symbol)->name () != NULL) { printf_filtered (("[%d] "), i + first_choice); ada_print_type (SYMBOL_TYPE (syms[i].symbol), NULL, @@ -3461,28 +3393,6 @@ return n_chosen; } -/* Same as evaluate_type (*EXP), but resolves ambiguous symbol - references (marked by OP_VAR_VALUE nodes in which the symbol has an - undefined namespace) and converts operators that are - user-defined into appropriate function calls. If CONTEXT_TYPE is - non-null, it provides a preferred result type [at the moment, only - type void has any effect---causing procedures to be preferred over - functions in calls]. A null CONTEXT_TYPE indicates that a non-void - return type is preferred. May change (expand) *EXP. */ - -static void -resolve (expression_up *expp, int void_context_p, int parse_completion, - innermost_block_tracker *tracker) -{ - struct type *context_type = NULL; - int pc = 0; - - if (void_context_p) - context_type = builtin_type ((*expp)->gdbarch)->builtin_void; - - resolve_subexp (expp, &pc, 1, context_type, parse_completion, tracker); -} - /* Resolve the operator of the subexpression beginning at position *POS of *EXPP. "Resolving" consists of replacing the symbols that have undefined namespaces in OP_VAR_VALUE nodes @@ -3745,7 +3655,7 @@ } if (deprocedure_p - && (TYPE_CODE (SYMBOL_TYPE (exp->elts[pc + 2].symbol)) + && (SYMBOL_TYPE (exp->elts[pc + 2].symbol)->code () == TYPE_CODE_FUNC)) { replace_operator_with_call (expp, pc, 0, 4, @@ -3858,17 +3768,17 @@ ftype = ada_check_typedef (ftype); atype = ada_check_typedef (atype); - if (TYPE_CODE (ftype) == TYPE_CODE_REF) + if (ftype->code () == TYPE_CODE_REF) ftype = TYPE_TARGET_TYPE (ftype); - if (TYPE_CODE (atype) == TYPE_CODE_REF) + if (atype->code () == TYPE_CODE_REF) atype = TYPE_TARGET_TYPE (atype); - switch (TYPE_CODE (ftype)) + switch (ftype->code ()) { default: - return TYPE_CODE (ftype) == TYPE_CODE (atype); + return ftype->code () == atype->code (); case TYPE_CODE_PTR: - if (TYPE_CODE (atype) == TYPE_CODE_PTR) + if (atype->code () == TYPE_CODE_PTR) return ada_type_match (TYPE_TARGET_TYPE (ftype), TYPE_TARGET_TYPE (atype), 0); else @@ -3877,7 +3787,7 @@ case TYPE_CODE_INT: case TYPE_CODE_ENUM: case TYPE_CODE_RANGE: - switch (TYPE_CODE (atype)) + switch (atype->code ()) { case TYPE_CODE_INT: case TYPE_CODE_ENUM: @@ -3888,20 +3798,20 @@ } case TYPE_CODE_ARRAY: - return (TYPE_CODE (atype) == TYPE_CODE_ARRAY + return (atype->code () == TYPE_CODE_ARRAY || ada_is_array_descriptor_type (atype)); case TYPE_CODE_STRUCT: if (ada_is_array_descriptor_type (ftype)) - return (TYPE_CODE (atype) == TYPE_CODE_ARRAY + return (atype->code () == TYPE_CODE_ARRAY || ada_is_array_descriptor_type (atype)); else - return (TYPE_CODE (atype) == TYPE_CODE_STRUCT + return (atype->code () == TYPE_CODE_STRUCT && !ada_is_array_descriptor_type (atype)); case TYPE_CODE_UNION: case TYPE_CODE_FLT: - return (TYPE_CODE (atype) == TYPE_CODE (ftype)); + return (atype->code () == ftype->code ()); } } @@ -3917,12 +3827,12 @@ struct type *func_type = SYMBOL_TYPE (func); if (SYMBOL_CLASS (func) == LOC_CONST - && TYPE_CODE (func_type) == TYPE_CODE_ENUM) + && func_type->code () == TYPE_CODE_ENUM) return (n_actuals == 0); - else if (func_type == NULL || TYPE_CODE (func_type) != TYPE_CODE_FUNC) + else if (func_type == NULL || func_type->code () != TYPE_CODE_FUNC) return 0; - if (TYPE_NFIELDS (func_type) != n_actuals) + if (func_type->num_fields () != n_actuals) return 0; for (i = 0; i < n_actuals; i += 1) @@ -3931,8 +3841,7 @@ return 0; else { - struct type *ftype = ada_check_typedef (TYPE_FIELD_TYPE (func_type, - i)); + struct type *ftype = ada_check_typedef (func_type->field (i).type ()); struct type *atype = ada_check_typedef (value_type (actuals[i])); if (!ada_type_match (ftype, atype, 1)) @@ -3955,7 +3864,7 @@ if (func_type == NULL) return 1; - if (TYPE_CODE (func_type) == TYPE_CODE_FUNC) + if (func_type->code () == TYPE_CODE_FUNC) return_type = get_base_type (TYPE_TARGET_TYPE (func_type)); else return_type = get_base_type (func_type); @@ -3964,12 +3873,12 @@ context_type = get_base_type (context_type); - if (TYPE_CODE (return_type) == TYPE_CODE_ENUM) + if (return_type->code () == TYPE_CODE_ENUM) return context_type == NULL || return_type == context_type; else if (context_type == NULL) - return TYPE_CODE (return_type) != TYPE_CODE_VOID; + return return_type->code () != TYPE_CODE_VOID; else - return TYPE_CODE (return_type) == TYPE_CODE (context_type); + return return_type->code () == context_type->code (); } @@ -4074,7 +3983,7 @@ return 0; else { - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_INT: case TYPE_CODE_FLT: @@ -4097,7 +4006,7 @@ return 0; else { - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_INT: return 1; @@ -4119,7 +4028,7 @@ return 0; else { - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_INT: case TYPE_CODE_RANGE: @@ -4141,7 +4050,7 @@ return 0; else { - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_INT: case TYPE_CODE_RANGE: @@ -4362,26 +4271,26 @@ v = NULL; t1 = t = ada_check_typedef (value_type (arg)); - if (TYPE_CODE (t) == TYPE_CODE_REF) + if (t->code () == TYPE_CODE_REF) { t1 = TYPE_TARGET_TYPE (t); if (t1 == NULL) goto BadValue; t1 = ada_check_typedef (t1); - if (TYPE_CODE (t1) == TYPE_CODE_PTR) + if (t1->code () == TYPE_CODE_PTR) { arg = coerce_ref (arg); t = t1; } } - while (TYPE_CODE (t) == TYPE_CODE_PTR) + while (t->code () == TYPE_CODE_PTR) { t1 = TYPE_TARGET_TYPE (t); if (t1 == NULL) goto BadValue; t1 = ada_check_typedef (t1); - if (TYPE_CODE (t1) == TYPE_CODE_PTR) + if (t1->code () == TYPE_CODE_PTR) { arg = value_ind (arg); t = t1; @@ -4390,7 +4299,7 @@ break; } - if (TYPE_CODE (t1) != TYPE_CODE_STRUCT && TYPE_CODE (t1) != TYPE_CODE_UNION) + if (t1->code () != TYPE_CODE_STRUCT && t1->code () != TYPE_CODE_UNION) goto BadValue; if (t1 == t) @@ -4401,7 +4310,7 @@ struct type *field_type; CORE_ADDR address; - if (TYPE_CODE (t) == TYPE_CODE_PTR) + if (t->code () == TYPE_CODE_PTR) address = value_address (ada_value_ind (arg)); else address = value_address (ada_coerce_ref (arg)); @@ -4413,7 +4322,7 @@ a reference should mostly be transparent to the user. */ if (ada_is_tagged_type (t1, 0) - || (TYPE_CODE (t1) == TYPE_CODE_REF + || (t1->code () == TYPE_CODE_REF && ada_is_tagged_type (TYPE_TARGET_TYPE (t1), 0))) { /* We first try to find the searched field in the current type. @@ -4440,7 +4349,7 @@ { if (bit_size != 0) { - if (TYPE_CODE (t) == TYPE_CODE_REF) + if (t->code () == TYPE_CODE_REF) arg = ada_coerce_ref (arg); else arg = ada_value_ind (arg); @@ -4477,24 +4386,24 @@ struct type *actual_type = ada_check_typedef (value_type (actual)); struct type *formal_type = ada_check_typedef (formal_type0); struct type *formal_target = - TYPE_CODE (formal_type) == TYPE_CODE_PTR + formal_type->code () == TYPE_CODE_PTR ? ada_check_typedef (TYPE_TARGET_TYPE (formal_type)) : formal_type; struct type *actual_target = - TYPE_CODE (actual_type) == TYPE_CODE_PTR + actual_type->code () == TYPE_CODE_PTR ? ada_check_typedef (TYPE_TARGET_TYPE (actual_type)) : actual_type; if (ada_is_array_descriptor_type (formal_target) - && TYPE_CODE (actual_target) == TYPE_CODE_ARRAY) + && actual_target->code () == TYPE_CODE_ARRAY) return make_array_descriptor (formal_type, actual); - else if (TYPE_CODE (formal_type) == TYPE_CODE_PTR - || TYPE_CODE (formal_type) == TYPE_CODE_REF) + else if (formal_type->code () == TYPE_CODE_PTR + || formal_type->code () == TYPE_CODE_REF) { struct value *result; - if (TYPE_CODE (formal_target) == TYPE_CODE_ARRAY + if (formal_target->code () == TYPE_CODE_ARRAY && ada_is_array_descriptor_type (actual_target)) result = desc_data (actual); - else if (TYPE_CODE (formal_type) != TYPE_CODE_PTR) + else if (formal_type->code () != TYPE_CODE_PTR) { if (VALUE_LVAL (actual) != lval_memory) { @@ -4513,7 +4422,7 @@ return actual; return value_cast_pointers (formal_type, result, 0); } - else if (TYPE_CODE (actual_type) == TYPE_CODE_PTR) + else if (actual_type->code () == TYPE_CODE_PTR) return ada_value_ind (actual); else if (ada_is_aligner_type (formal_type)) { @@ -4582,20 +4491,20 @@ modify_field (value_type (descriptor), value_contents_writeable (descriptor), value_pointer (ensure_lval (arr), - TYPE_FIELD_TYPE (desc_type, 0)), + desc_type->field (0).type ()), fat_pntr_data_bitpos (desc_type), fat_pntr_data_bitsize (desc_type)); modify_field (value_type (descriptor), value_contents_writeable (descriptor), value_pointer (bounds, - TYPE_FIELD_TYPE (desc_type, 1)), + desc_type->field (1).type ()), fat_pntr_bounds_bitpos (desc_type), fat_pntr_bounds_bitsize (desc_type)); descriptor = ensure_lval (descriptor); - if (TYPE_CODE (type) == TYPE_CODE_PTR) + if (type->code () == TYPE_CODE_PTR) return value_addr (descriptor); else return descriptor; @@ -4710,7 +4619,6 @@ struct ada_symbol_cache *sym_cache = ada_get_symbol_cache (current_program_space); int h; - char *copy; struct cache_entry *e; /* Symbols for builtin types don't have a block. @@ -4733,9 +4641,7 @@ e = XOBNEW (&sym_cache->cache_space, cache_entry); e->next = sym_cache->root[h]; sym_cache->root[h] = e; - e->name = copy - = (char *) obstack_alloc (&sym_cache->cache_space, strlen (name) + 1); - strcpy (copy, name); + e->name = obstack_strdup (&sym_cache->cache_space, name); e->sym = sym; e->domain = domain; e->block = block; @@ -4784,8 +4690,8 @@ int i; for (i = 0; i < n; i += 1) - if (TYPE_CODE (SYMBOL_TYPE (syms[i].symbol)) != TYPE_CODE_FUNC - && (TYPE_CODE (SYMBOL_TYPE (syms[i].symbol)) != TYPE_CODE_ENUM + if (SYMBOL_TYPE (syms[i].symbol)->code () != TYPE_CODE_FUNC + && (SYMBOL_TYPE (syms[i].symbol)->code () != TYPE_CODE_ENUM || SYMBOL_CLASS (syms[i].symbol) != LOC_CONST)) return 1; @@ -4801,10 +4707,10 @@ if (type0 == type1) return 1; if (type0 == NULL || type1 == NULL - || TYPE_CODE (type0) != TYPE_CODE (type1)) + || type0->code () != type1->code ()) return 0; - if ((TYPE_CODE (type0) == TYPE_CODE_STRUCT - || TYPE_CODE (type0) == TYPE_CODE_ENUM) + if ((type0->code () == TYPE_CODE_STRUCT + || type0->code () == TYPE_CODE_ENUM) && ada_type_name (type0) != NULL && ada_type_name (type1) != NULL && strcmp (ada_type_name (type0), ada_type_name (type1)) == 0) return 1; @@ -4837,7 +4743,7 @@ int len0 = strlen (name0); return - TYPE_CODE (type0) == TYPE_CODE (type1) + type0->code () == type1->code () && (equiv_types (type0, type1) || (len0 < strlen (name1) && strncmp (name0, name1, len0) == 0 && startswith (name1 + len0, "___XV"))); @@ -4986,7 +4892,7 @@ This function assumes that TYPE1 and TYPE2 are both TYPE_CODE_ENUM types and that their number of enumerals is identical (in other - words, TYPE_NFIELDS (type1) == TYPE_NFIELDS (type2)). */ + words, type1->num_fields () == type2->num_fields ()). */ static int ada_identical_enum_types_p (struct type *type1, struct type *type2) @@ -4999,13 +4905,13 @@ underlying value and name. */ /* All enums in the type should have an identical underlying value. */ - for (i = 0; i < TYPE_NFIELDS (type1); i++) + for (i = 0; i < type1->num_fields (); i++) if (TYPE_FIELD_ENUMVAL (type1, i) != TYPE_FIELD_ENUMVAL (type2, i)) return 0; /* All enumerals should also have the same name (modulo any numerical suffix). */ - for (i = 0; i < TYPE_NFIELDS (type1); i++) + for (i = 0; i < type1->num_fields (); i++) { const char *name_1 = TYPE_FIELD_NAME (type1, i); const char *name_2 = TYPE_FIELD_NAME (type2, i); @@ -5058,7 +4964,7 @@ /* Quick check: All symbols should have an enum type. */ for (i = 0; i < syms.size (); i++) - if (TYPE_CODE (SYMBOL_TYPE (syms[i].symbol)) != TYPE_CODE_ENUM) + if (SYMBOL_TYPE (syms[i].symbol)->code () != TYPE_CODE_ENUM) return 0; /* Quick check: They should all have the same value. */ @@ -5068,8 +4974,8 @@ /* Quick check: They should all have the same number of enumerals. */ for (i = 1; i < syms.size (); i++) - if (TYPE_NFIELDS (SYMBOL_TYPE (syms[i].symbol)) - != TYPE_NFIELDS (SYMBOL_TYPE (syms[0].symbol))) + if (SYMBOL_TYPE (syms[i].symbol)->num_fields () + != SYMBOL_TYPE (syms[0].symbol)->num_fields ()) return 0; /* All the sanity checks passed, so we might have a set of @@ -5146,8 +5052,8 @@ if (remove_p) syms->erase (syms->begin () + i); - - i += 1; + else + i += 1; } /* If all the remaining symbols are identical enumerals, then @@ -5181,7 +5087,7 @@ So, to extract the scope, we search for the "___XR" extension, and then backtrack until we find the first "__". */ - const char *name = TYPE_NAME (renaming_type); + const char *name = renaming_type->name (); const char *suffix = strstr (name, "___XR"); const char *last; @@ -5660,8 +5566,8 @@ if (num_defns_collected (obstackp) == 0 && global && !is_wild_match) { const char *name = ada_lookup_name (lookup_name); - lookup_name_info name1 (std::string ("<_ada_") + name + '>', - symbol_name_match_type::FULL); + std::string bracket_name = std::string ("<_ada_") + name + '>'; + lookup_name_info name1 (bracket_name, symbol_name_match_type::FULL); for (objfile *objfile : current_program_space->objfiles ()) { @@ -5722,7 +5628,7 @@ else { /* In the !full_search case we're are being called by - ada_iterate_over_symbols, and we don't want to search + iterate_over_symbols, and we don't want to search superblocks. */ ada_add_block_symbols (obstackp, block, lookup_name, domain, NULL); } @@ -5823,28 +5729,6 @@ return ada_lookup_symbol_list_worker (lookup_name, block, domain, results, 1); } -/* Implementation of the la_iterate_over_symbols method. */ - -static bool -ada_iterate_over_symbols - (const struct block *block, const lookup_name_info &name, - domain_enum domain, - gdb::function_view callback) -{ - int ndefs, i; - std::vector results; - - ndefs = ada_lookup_symbol_list_worker (name, block, domain, &results, 0); - - for (i = 0; i < ndefs; ++i) - { - if (!callback (&results[i])) - return false; - } - - return true; -} - /* The result is as for ada_lookup_symbol_list with FULL_SEARCH set to 1, but choosing the first symbol found if there are multiple choices. @@ -5891,46 +5775,6 @@ return info; } -static struct block_symbol -ada_lookup_symbol_nonlocal (const struct language_defn *langdef, - const char *name, - const struct block *block, - const domain_enum domain) -{ - struct block_symbol sym; - - sym = ada_lookup_symbol (name, block_static_block (block), domain); - if (sym.symbol != NULL) - return sym; - - /* If we haven't found a match at this point, try the primitive - types. In other languages, this search is performed before - searching for global symbols in order to short-circuit that - global-symbol search if it happens that the name corresponds - to a primitive type. But we cannot do the same in Ada, because - it is perfectly legitimate for a program to declare a type which - has the same name as a standard type. If looking up a type in - that situation, we have traditionally ignored the primitive type - in favor of user-defined types. This is why, unlike most other - languages, we search the primitive types this late and only after - having searched the global symbols without success. */ - - if (domain == VAR_DOMAIN) - { - struct gdbarch *gdbarch; - - if (block == NULL) - gdbarch = target_gdbarch (); - else - gdbarch = block_gdbarch (block); - sym.symbol = language_lookup_primitive_type_as_symbol (langdef, gdbarch, name); - if (sym.symbol != NULL) - return sym; - } - - return {}; -} - /* True iff STR is a possible encoded suffix of a normal Ada name that is to be ignored for matching purposes. Suffixes of parallel @@ -6220,8 +6064,7 @@ sym != NULL; sym = block_iter_match_next (lookup_name, &iter)) { - if (symbol_matches_domain (SYMBOL_LANGUAGE (sym), - SYMBOL_DOMAIN (sym), domain)) + if (symbol_matches_domain (sym->language (), SYMBOL_DOMAIN (sym), domain)) { if (SYMBOL_CLASS (sym) != LOC_UNRESOLVED) { @@ -6260,7 +6103,7 @@ ALL_BLOCK_SYMBOLS (block, iter, sym) { - if (symbol_matches_domain (SYMBOL_LANGUAGE (sym), + if (symbol_matches_domain (sym->language (), SYMBOL_DOMAIN (sym), domain)) { int cmp; @@ -6389,134 +6232,6 @@ return true; } -/* Add the list of possible symbol names completing TEXT to TRACKER. - WORD is the entire command on which completion is made. */ - -static void -ada_collect_symbol_completion_matches (completion_tracker &tracker, - complete_symbol_mode mode, - symbol_name_match_type name_match_type, - const char *text, const char *word, - enum type_code code) -{ - struct symbol *sym; - const struct block *b, *surrounding_static_block = 0; - struct block_iterator iter; - - gdb_assert (code == TYPE_CODE_UNDEF); - - lookup_name_info lookup_name (text, name_match_type, true); - - /* First, look at the partial symtab symbols. */ - expand_symtabs_matching (NULL, - lookup_name, - NULL, - NULL, - ALL_DOMAIN); - - /* At this point scan through the misc symbol vectors and add each - symbol you find to the list. Eventually we want to ignore - anything that isn't a text symbol (everything else will be - handled by the psymtab code above). */ - - for (objfile *objfile : current_program_space->objfiles ()) - { - for (minimal_symbol *msymbol : objfile->msymbols ()) - { - QUIT; - - if (completion_skip_symbol (mode, msymbol)) - continue; - - language symbol_language = MSYMBOL_LANGUAGE (msymbol); - - /* Ada minimal symbols won't have their language set to Ada. If - we let completion_list_add_name compare using the - default/C-like matcher, then when completing e.g., symbols in a - package named "pck", we'd match internal Ada symbols like - "pckS", which are invalid in an Ada expression, unless you wrap - them in '<' '>' to request a verbatim match. - - Unfortunately, some Ada encoded names successfully demangle as - C++ symbols (using an old mangling scheme), such as "name__2Xn" - -> "Xn::name(void)" and thus some Ada minimal symbols end up - with the wrong language set. Paper over that issue here. */ - if (symbol_language == language_auto - || symbol_language == language_cplus) - symbol_language = language_ada; - - completion_list_add_name (tracker, - symbol_language, - msymbol->linkage_name (), - lookup_name, text, word); - } - } - - /* Search upwards from currently selected frame (so that we can - complete on local vars. */ - - for (b = get_selected_block (0); b != NULL; b = BLOCK_SUPERBLOCK (b)) - { - if (!BLOCK_SUPERBLOCK (b)) - surrounding_static_block = b; /* For elmin of dups */ - - ALL_BLOCK_SYMBOLS (b, iter, sym) - { - if (completion_skip_symbol (mode, sym)) - continue; - - completion_list_add_name (tracker, - SYMBOL_LANGUAGE (sym), - sym->linkage_name (), - lookup_name, text, word); - } - } - - /* Go through the symtabs and check the externs and statics for - symbols which match. */ - - for (objfile *objfile : current_program_space->objfiles ()) - { - for (compunit_symtab *s : objfile->compunits ()) - { - QUIT; - b = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (s), GLOBAL_BLOCK); - ALL_BLOCK_SYMBOLS (b, iter, sym) - { - if (completion_skip_symbol (mode, sym)) - continue; - - completion_list_add_name (tracker, - SYMBOL_LANGUAGE (sym), - sym->linkage_name (), - lookup_name, text, word); - } - } - } - - for (objfile *objfile : current_program_space->objfiles ()) - { - for (compunit_symtab *s : objfile->compunits ()) - { - QUIT; - b = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (s), STATIC_BLOCK); - /* Don't do this block twice. */ - if (b == surrounding_static_block) - continue; - ALL_BLOCK_SYMBOLS (b, iter, sym) - { - if (completion_skip_symbol (mode, sym)) - continue; - - completion_list_add_name (tracker, - SYMBOL_LANGUAGE (sym), - sym->linkage_name (), - lookup_name, text, word); - } - } - } -} - /* Field Access */ /* Return non-zero if TYPE is a pointer to the GNAT dispatch table used @@ -6527,10 +6242,10 @@ { const char *name; - if (TYPE_CODE (type) != TYPE_CODE_PTR) + if (type->code () != TYPE_CODE_PTR) return 0; - name = TYPE_NAME (TYPE_TARGET_TYPE (type)); + name = TYPE_TARGET_TYPE (type)->name (); if (name == NULL) return 0; @@ -6542,7 +6257,7 @@ static int ada_is_interface_tag (struct type *type) { - const char *name = TYPE_NAME (type); + const char *name = type->name (); if (name == NULL) return 0; @@ -6556,7 +6271,7 @@ int ada_is_ignored_field (struct type *type, int field_num) { - if (field_num < 0 || field_num > TYPE_NFIELDS (type)) + if (field_num < 0 || field_num > type->num_fields ()) return 1; /* Check the name of that field. */ @@ -6583,8 +6298,8 @@ /* If this is the dispatch table of a tagged type or an interface tag, then ignore. */ if (ada_is_tagged_type (type, 1) - && (ada_is_dispatch_table_ptr_type (TYPE_FIELD_TYPE (type, field_num)) - || ada_is_interface_tag (TYPE_FIELD_TYPE (type, field_num)))) + && (ada_is_dispatch_table_ptr_type (type->field (field_num).type ()) + || ada_is_interface_tag (type->field (field_num).type ()))) return 1; /* Not a special field, so it should not be ignored. */ @@ -6607,7 +6322,7 @@ { type = ada_check_typedef (type); - if (type == NULL || TYPE_CODE (type) != TYPE_CODE_PTR) + if (type == NULL || type->code () != TYPE_CODE_PTR) return 0; else { @@ -6671,10 +6386,10 @@ static struct type * type_from_tag (struct value *tag) { - const char *type_name = ada_tag_name (tag); + gdb::unique_xmalloc_ptr type_name = ada_tag_name (tag); if (type_name != NULL) - return ada_find_any_type (ada_encode (type_name)); + return ada_find_any_type (ada_encode (type_name.get ())); return NULL; } @@ -6697,8 +6412,7 @@ /* It is the responsability of the caller to deref pointers. */ - if (TYPE_CODE (obj_type) == TYPE_CODE_PTR - || TYPE_CODE (obj_type) == TYPE_CODE_REF) + if (obj_type->code () == TYPE_CODE_PTR || obj_type->code () == TYPE_CODE_REF) return obj; tag = ada_value_tag (obj); @@ -6823,37 +6537,41 @@ /* Given the TSD of a tag (type-specific data), return a string containing the name of the associated type. - The returned value is good until the next call. May return NULL - if we are unable to determine the tag name. */ + May return NULL if we are unable to determine the tag name. */ -static char * +static gdb::unique_xmalloc_ptr ada_tag_name_from_tsd (struct value *tsd) { - static char name[1024]; char *p; struct value *val; val = ada_value_struct_elt (tsd, "expanded_name", 1); if (val == NULL) return NULL; - read_memory_string (value_as_address (val), name, sizeof (name) - 1); - for (p = name; *p != '\0'; p += 1) - if (isalpha (*p)) - *p = tolower (*p); - return name; + gdb::unique_xmalloc_ptr buffer + = target_read_string (value_as_address (val), INT_MAX); + if (buffer == nullptr) + return nullptr; + + for (p = buffer.get (); *p != '\0'; ++p) + { + if (isalpha (*p)) + *p = tolower (*p); + } + + return buffer; } /* The type name of the dynamic type denoted by the 'tag value TAG, as a C string. Return NULL if the TAG is not an Ada tag, or if we were unable to - determine the name of that tag. The result is good until the next - call. */ + determine the name of that tag. */ -const char * +gdb::unique_xmalloc_ptr ada_tag_name (struct value *tag) { - char *name = NULL; + gdb::unique_xmalloc_ptr name; if (!ada_is_tag_type (value_type (tag))) return NULL; @@ -6890,16 +6608,16 @@ type = ada_check_typedef (type); - if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT) + if (type == NULL || type->code () != TYPE_CODE_STRUCT) return NULL; - for (i = 0; i < TYPE_NFIELDS (type); i += 1) + for (i = 0; i < type->num_fields (); i += 1) if (ada_is_parent_field (type, i)) { - struct type *parent_type = TYPE_FIELD_TYPE (type, i); + struct type *parent_type = type->field (i).type (); /* If the _parent field is a pointer, then dereference it. */ - if (TYPE_CODE (parent_type) == TYPE_CODE_PTR) + if (parent_type->code () == TYPE_CODE_PTR) parent_type = TYPE_TARGET_TYPE (parent_type); /* If there is a parallel XVS type, get the actual base type. */ parent_type = ada_get_base_type (parent_type); @@ -6964,11 +6682,11 @@ if (!ADA_TYPE_P (type)) return 0; - struct type *field_type = TYPE_FIELD_TYPE (type, field_num); + struct type *field_type = type->field (field_num).type (); - return (TYPE_CODE (field_type) == TYPE_CODE_UNION - || (is_dynamic_field (type, field_num) - && (TYPE_CODE (TYPE_TARGET_TYPE (field_type)) + return (field_type->code () == TYPE_CODE_UNION + || (is_dynamic_field (type, field_num) + && (TYPE_TARGET_TYPE (field_type)->code () == TYPE_CODE_UNION))); } @@ -7011,7 +6729,7 @@ const char *discrim_end; const char *discrim_start; - if (TYPE_CODE (type0) == TYPE_CODE_PTR) + if (type0->code () == TYPE_CODE_PTR) type = TYPE_TARGET_TYPE (type0); else type = type0; @@ -7146,14 +6864,14 @@ fields. FIELDNO says which field. Differs from value_primitive_field only in that it can handle packed values of arbitrary type. */ -static struct value * +struct value * ada_value_primitive_field (struct value *arg1, int offset, int fieldno, struct type *arg_type) { struct type *type; arg_type = ada_check_typedef (arg_type); - type = TYPE_FIELD_TYPE (arg_type, fieldno); + type = arg_type->field (fieldno).type (); /* Handle packed fields. It might be that the field is not packed relative to its containing structure, but the structure itself is @@ -7256,7 +6974,7 @@ if (bit_size_p != NULL) *bit_size_p = 0; - for (i = 0; i < TYPE_NFIELDS (type); i += 1) + for (i = 0; i < type->num_fields (); i += 1) { int bit_pos = TYPE_FIELD_BITPOS (type, i); int fld_offset = offset + bit_pos / 8; @@ -7284,7 +7002,7 @@ int bit_size = TYPE_FIELD_BITSIZE (type, i); if (field_type_p != NULL) - *field_type_p = TYPE_FIELD_TYPE (type, i); + *field_type_p = type->field (i).type (); if (byte_offset_p != NULL) *byte_offset_p = fld_offset; if (bit_offset_p != NULL) @@ -7295,7 +7013,7 @@ } else if (ada_is_wrapper_field (type, i)) { - if (find_struct_field (name, TYPE_FIELD_TYPE (type, i), fld_offset, + if (find_struct_field (name, type->field (i).type (), fld_offset, field_type_p, byte_offset_p, bit_offset_p, bit_size_p, index_p)) return 1; @@ -7306,11 +7024,11 @@ fixed type?? */ int j; struct type *field_type - = ada_check_typedef (TYPE_FIELD_TYPE (type, i)); + = ada_check_typedef (type->field (i).type ()); - for (j = 0; j < TYPE_NFIELDS (field_type); j += 1) + for (j = 0; j < field_type->num_fields (); j += 1) { - if (find_struct_field (name, TYPE_FIELD_TYPE (field_type, j), + if (find_struct_field (name, field_type->field (j).type (), fld_offset + TYPE_FIELD_BITPOS (field_type, j) / 8, field_type_p, byte_offset_p, @@ -7330,7 +7048,7 @@ int bit_pos = TYPE_FIELD_BITPOS (type, parent_offset); int fld_offset = offset + bit_pos / 8; - if (find_struct_field (name, TYPE_FIELD_TYPE (type, parent_offset), + if (find_struct_field (name, type->field (parent_offset).type (), fld_offset, field_type_p, byte_offset_p, bit_offset_p, bit_size_p, index_p)) return 1; @@ -7368,7 +7086,7 @@ int parent_offset = -1; type = ada_check_typedef (type); - for (i = 0; i < TYPE_NFIELDS (type); i += 1) + for (i = 0; i < type->num_fields (); i += 1) { const char *t_field_name = TYPE_FIELD_NAME (type, i); @@ -7397,7 +7115,7 @@ struct value *v = /* Do not let indent join lines here. */ ada_search_struct_field (name, arg, offset + TYPE_FIELD_BITPOS (type, i) / 8, - TYPE_FIELD_TYPE (type, i)); + type->field (i).type ()); if (v != NULL) return v; @@ -7407,17 +7125,16 @@ { /* PNH: Do we ever get here? See find_struct_field. */ int j; - struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type, - i)); + struct type *field_type = ada_check_typedef (type->field (i).type ()); int var_offset = offset + TYPE_FIELD_BITPOS (type, i) / 8; - for (j = 0; j < TYPE_NFIELDS (field_type); j += 1) + for (j = 0; j < field_type->num_fields (); j += 1) { struct value *v = ada_search_struct_field /* Force line break. */ (name, arg, var_offset + TYPE_FIELD_BITPOS (field_type, j) / 8, - TYPE_FIELD_TYPE (field_type, j)); + field_type->field (j).type ()); if (v != NULL) return v; @@ -7432,7 +7149,7 @@ { struct value *v = ada_search_struct_field ( name, arg, offset + TYPE_FIELD_BITPOS (type, parent_offset) / 8, - TYPE_FIELD_TYPE (type, parent_offset)); + type->field (parent_offset).type ()); if (v != NULL) return v; @@ -7469,7 +7186,7 @@ int i; type = ada_check_typedef (type); - for (i = 0; i < TYPE_NFIELDS (type); i += 1) + for (i = 0; i < type->num_fields (); i += 1) { if (TYPE_FIELD_NAME (type, i) == NULL) continue; @@ -7478,7 +7195,7 @@ struct value *v = /* Do not let indent join lines here. */ ada_index_struct_field_1 (index_p, arg, offset + TYPE_FIELD_BITPOS (type, i) / 8, - TYPE_FIELD_TYPE (type, i)); + type->field (i).type ()); if (v != NULL) return v; @@ -7544,15 +7261,14 @@ while (1) { type = ada_check_typedef (type); - if (TYPE_CODE (type) != TYPE_CODE_PTR - && TYPE_CODE (type) != TYPE_CODE_REF) + if (type->code () != TYPE_CODE_PTR && type->code () != TYPE_CODE_REF) break; type = TYPE_TARGET_TYPE (type); } if (type == NULL - || (TYPE_CODE (type) != TYPE_CODE_STRUCT - && TYPE_CODE (type) != TYPE_CODE_UNION)) + || (type->code () != TYPE_CODE_STRUCT + && type->code () != TYPE_CODE_UNION)) { if (noerr) return NULL; @@ -7563,7 +7279,7 @@ type = to_static_fixed_type (type); - for (i = 0; i < TYPE_NFIELDS (type); i += 1) + for (i = 0; i < type->num_fields (); i += 1) { const char *t_field_name = TYPE_FIELD_NAME (type, i); struct type *t; @@ -7586,11 +7302,11 @@ } else if (field_name_match (t_field_name, name)) - return TYPE_FIELD_TYPE (type, i); + return type->field (i).type (); else if (ada_is_wrapper_field (type, i)) { - t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (type, i), name, + t = ada_lookup_struct_elt_type (type->field (i).type (), name, 0, 1); if (t != NULL) return t; @@ -7599,10 +7315,9 @@ else if (ada_is_variant_part (type, i)) { int j; - struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type, - i)); + struct type *field_type = ada_check_typedef (type->field (i).type ()); - for (j = TYPE_NFIELDS (field_type) - 1; j >= 0; j -= 1) + for (j = field_type->num_fields () - 1; j >= 0; j -= 1) { /* FIXME pnh 2008/01/26: We check for a field that is NOT wrapped in a struct, since the compiler sometimes @@ -7612,10 +7327,9 @@ if (v_field_name != NULL && field_name_match (v_field_name, name)) - t = TYPE_FIELD_TYPE (field_type, j); + t = field_type->field (j).type (); else - t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (field_type, - j), + t = ada_lookup_struct_elt_type (field_type->field (j).type (), name, 0, 1); if (t != NULL) @@ -7632,7 +7346,7 @@ { struct type *t; - t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (type, parent_offset), + t = ada_lookup_struct_elt_type (type->field (parent_offset).type (), name, 0, 1); if (t != NULL) return t; @@ -7665,33 +7379,28 @@ /* Assuming that VAR_TYPE is the type of a variant part of a record (a union), - within a value of type OUTER_TYPE that is stored in GDB at - OUTER_VALADDR, determine which variant clause (field number in VAR_TYPE, + within OUTER, determine which variant clause (field number in VAR_TYPE, numbering from 0) is applicable. Returns -1 if none are. */ int -ada_which_variant_applies (struct type *var_type, struct type *outer_type, - const gdb_byte *outer_valaddr) +ada_which_variant_applies (struct type *var_type, struct value *outer) { int others_clause; int i; const char *discrim_name = ada_variant_discrim_name (var_type); - struct value *outer; struct value *discrim; LONGEST discrim_val; /* Using plain value_from_contents_and_address here causes problems because we will end up trying to resolve a type that is currently being constructed. */ - outer = value_from_contents_and_address_unresolved (outer_type, - outer_valaddr, 0); discrim = ada_value_struct_elt (outer, discrim_name, 1); if (discrim == NULL) return -1; discrim_val = value_as_long (discrim); others_clause = -1; - for (i = 0; i < TYPE_NFIELDS (var_type); i += 1) + for (i = 0; i < var_type->num_fields (); i += 1) { if (ada_is_others_clause (var_type, i)) others_clause = i; @@ -7760,7 +7469,7 @@ static struct value * ada_coerce_ref (struct value *val0) { - if (TYPE_CODE (value_type (val0)) == TYPE_CODE_REF) + if (value_type (val0)->code () == TYPE_CODE_REF) { struct value *val = val0; @@ -7775,15 +7484,6 @@ return val0; } -/* Return OFF rounded upward if necessary to a multiple of - ALIGNMENT (a power of 2). */ - -static unsigned int -align_value (unsigned int off, unsigned int alignment) -{ - return (off + alignment - 1) & ~(alignment - 1); -} - /* Return the bit alignment required for field #F of template type TYPE. */ static unsigned int @@ -7870,11 +7570,11 @@ return 1; else if (type0 == NULL) return 0; - else if (TYPE_CODE (type1) == TYPE_CODE_VOID) + else if (type1->code () == TYPE_CODE_VOID) return 1; - else if (TYPE_CODE (type0) == TYPE_CODE_VOID) + else if (type0->code () == TYPE_CODE_VOID) return 0; - else if (TYPE_NAME (type1) == NULL && TYPE_NAME (type0) != NULL) + else if (type1->name () == NULL && type0->name () != NULL) return 1; else if (ada_is_constrained_packed_array_type (type0)) return 1; @@ -7883,8 +7583,8 @@ return 1; else { - const char *type0_name = TYPE_NAME (type0); - const char *type1_name = TYPE_NAME (type1); + const char *type0_name = type0->name (); + const char *type1_name = type1->name (); if (type0_name != NULL && strstr (type0_name, "___XR") != NULL && (type1_name == NULL || strstr (type1_name, "___XR") == NULL)) @@ -7901,7 +7601,7 @@ { if (type == NULL) return NULL; - return TYPE_NAME (type); + return type->name (); } /* Search the list of "descriptive" types associated to TYPE for a type @@ -8012,7 +7712,7 @@ { type = ada_check_typedef (type); - if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT + if (type == NULL || type->code () != TYPE_CODE_STRUCT || ada_type_name (type) == NULL) return NULL; else @@ -8035,7 +7735,7 @@ const char *name = TYPE_FIELD_NAME (templ_type, field_num); return name != NULL - && TYPE_CODE (TYPE_FIELD_TYPE (templ_type, field_num)) == TYPE_CODE_PTR + && templ_type->field (field_num).type ()->code () == TYPE_CODE_PTR && strstr (name, "___XVL") != NULL; } @@ -8047,10 +7747,10 @@ { int f; - if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT) + if (type == NULL || type->code () != TYPE_CODE_STRUCT) return -1; - for (f = 0; f < TYPE_NFIELDS (type); f += 1) + for (f = 0; f < type->num_fields (); f += 1) { if (ada_is_variant_part (type, f)) return f; @@ -8065,11 +7765,9 @@ { struct type *type = alloc_type_copy (templ); - TYPE_CODE (type) = TYPE_CODE_STRUCT; - TYPE_NFIELDS (type) = 0; - TYPE_FIELDS (type) = NULL; + type->set_code (TYPE_CODE_STRUCT); INIT_NONE_SPECIFIC (type); - TYPE_NAME (type) = ""; + type->set_name (""); TYPE_LENGTH (type) = 0; return type; } @@ -8110,24 +7808,23 @@ to be processed: unless keep_dynamic_fields, this includes only fields whose position and length are static will be processed. */ if (keep_dynamic_fields) - nfields = TYPE_NFIELDS (type); + nfields = type->num_fields (); else { nfields = 0; - while (nfields < TYPE_NFIELDS (type) + while (nfields < type->num_fields () && !ada_is_variant_part (type, nfields) && !is_dynamic_field (type, nfields)) nfields++; } rtype = alloc_type_copy (type); - TYPE_CODE (rtype) = TYPE_CODE_STRUCT; + rtype->set_code (TYPE_CODE_STRUCT); INIT_NONE_SPECIFIC (rtype); - TYPE_NFIELDS (rtype) = nfields; - TYPE_FIELDS (rtype) = (struct field *) - TYPE_ALLOC (rtype, nfields * sizeof (struct field)); - memset (TYPE_FIELDS (rtype), 0, sizeof (struct field) * nfields); - TYPE_NAME (rtype) = ada_type_name (type); + rtype->set_num_fields (nfields); + rtype->set_fields + ((struct field *) TYPE_ZALLOC (rtype, nfields * sizeof (struct field))); + rtype->set_name (ada_type_name (type)); TYPE_FIXED_INSTANCE (rtype) = 1; off = 0; @@ -8136,9 +7833,9 @@ for (f = 0; f < nfields; f += 1) { - off = align_value (off, field_alignment (type, f)) + off = align_up (off, field_alignment (type, f)) + TYPE_FIELD_BITPOS (type, f); - SET_FIELD_BITPOS (TYPE_FIELD (rtype, f), off); + SET_FIELD_BITPOS (rtype->field (f), off); TYPE_FIELD_BITSIZE (rtype, f) = 0; if (ada_is_variant_part (type, f)) @@ -8151,7 +7848,7 @@ const gdb_byte *field_valaddr = valaddr; CORE_ADDR field_address = address; struct type *field_type = - TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (type, f)); + TYPE_TARGET_TYPE (type->field (f).type ()); if (dval0 == NULL) { @@ -8210,7 +7907,7 @@ record size. */ ada_ensure_varsize_limit (field_type); - TYPE_FIELD_TYPE (rtype, f) = field_type; + rtype->field (f).set_type (field_type); TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f); /* The multiplication can potentially overflow. But because the field length has been size-checked just above, and @@ -8219,7 +7916,7 @@ adding overflow recovery code to this already complex code, we just assume that it's not going to happen. */ fld_bit_len = - TYPE_LENGTH (TYPE_FIELD_TYPE (rtype, f)) * TARGET_CHAR_BIT; + TYPE_LENGTH (rtype->field (f).type ()) * TARGET_CHAR_BIT; } else { @@ -8233,20 +7930,20 @@ structure, the typedef is the only clue which allows us to distinguish between the two options. Stripping it would prevent us from printing this field appropriately. */ - TYPE_FIELD_TYPE (rtype, f) = TYPE_FIELD_TYPE (type, f); + rtype->field (f).set_type (type->field (f).type ()); TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f); if (TYPE_FIELD_BITSIZE (type, f) > 0) fld_bit_len = TYPE_FIELD_BITSIZE (rtype, f) = TYPE_FIELD_BITSIZE (type, f); else { - struct type *field_type = TYPE_FIELD_TYPE (type, f); + struct type *field_type = type->field (f).type (); /* We need to be careful of typedefs when computing the length of our field. If this is a typedef, get the length of the target type, not the length of the typedef. */ - if (TYPE_CODE (field_type) == TYPE_CODE_TYPEDEF) + if (field_type->code () == TYPE_CODE_TYPEDEF) field_type = ada_typedef_target_type (field_type); fld_bit_len = @@ -8257,7 +7954,7 @@ bit_len = off + fld_bit_len; off += fld_bit_len; TYPE_LENGTH (rtype) = - align_value (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT; + align_up (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT; } /* We handle the variant part, if any, at the end because of certain @@ -8284,26 +7981,26 @@ branch_type = to_fixed_variant_branch_type - (TYPE_FIELD_TYPE (type, variant_field), + (type->field (variant_field).type (), cond_offset_host (valaddr, off / TARGET_CHAR_BIT), cond_offset_target (address, off / TARGET_CHAR_BIT), dval); if (branch_type == NULL) { - for (f = variant_field + 1; f < TYPE_NFIELDS (rtype); f += 1) - TYPE_FIELDS (rtype)[f - 1] = TYPE_FIELDS (rtype)[f]; - TYPE_NFIELDS (rtype) -= 1; + for (f = variant_field + 1; f < rtype->num_fields (); f += 1) + rtype->field (f - 1) = rtype->field (f); + rtype->set_num_fields (rtype->num_fields () - 1); } else { - TYPE_FIELD_TYPE (rtype, variant_field) = branch_type; + rtype->field (variant_field).set_type (branch_type); TYPE_FIELD_NAME (rtype, variant_field) = "S"; fld_bit_len = - TYPE_LENGTH (TYPE_FIELD_TYPE (rtype, variant_field)) * + TYPE_LENGTH (rtype->field (variant_field).type ()) * TARGET_CHAR_BIT; if (off + fld_bit_len > bit_len) bit_len = off + fld_bit_len; TYPE_LENGTH (rtype) = - align_value (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT; + align_up (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT; } } @@ -8315,17 +8012,17 @@ the current RTYPE length might be good enough for our purposes. */ if (TYPE_LENGTH (type) <= 0) { - if (TYPE_NAME (rtype)) + if (rtype->name ()) warning (_("Invalid type size for `%s' detected: %s."), - TYPE_NAME (rtype), pulongest (TYPE_LENGTH (type))); + rtype->name (), pulongest (TYPE_LENGTH (type))); else warning (_("Invalid type size for detected: %s."), pulongest (TYPE_LENGTH (type))); } else { - TYPE_LENGTH (rtype) = align_value (TYPE_LENGTH (rtype), - TYPE_LENGTH (type)); + TYPE_LENGTH (rtype) = align_up (TYPE_LENGTH (rtype), + TYPE_LENGTH (type)); } value_free_to_mark (mark); @@ -8371,7 +8068,7 @@ /* Don't clone TYPE0 until we are sure we are going to need a copy. */ type = type0; - nfields = TYPE_NFIELDS (type0); + nfields = type0->num_fields (); /* Whether or not we cloned TYPE0, cache the result so that we don't do recompute all over next time. */ @@ -8379,7 +8076,7 @@ for (f = 0; f < nfields; f += 1) { - struct type *field_type = TYPE_FIELD_TYPE (type0, f); + struct type *field_type = type0->field (f).type (); struct type *new_type; if (is_dynamic_field (type0, f)) @@ -8396,18 +8093,22 @@ if (type == type0) { TYPE_TARGET_TYPE (type0) = type = alloc_type_copy (type0); - TYPE_CODE (type) = TYPE_CODE (type0); + type->set_code (type0->code ()); INIT_NONE_SPECIFIC (type); - TYPE_NFIELDS (type) = nfields; - TYPE_FIELDS (type) = (struct field *) - TYPE_ALLOC (type, nfields * sizeof (struct field)); - memcpy (TYPE_FIELDS (type), TYPE_FIELDS (type0), + type->set_num_fields (nfields); + + field *fields = + ((struct field *) + TYPE_ALLOC (type, nfields * sizeof (struct field))); + memcpy (fields, type0->fields (), sizeof (struct field) * nfields); - TYPE_NAME (type) = ada_type_name (type0); + type->set_fields (fields); + + type->set_name (ada_type_name (type0)); TYPE_FIXED_INSTANCE (type) = 1; TYPE_LENGTH (type) = 0; } - TYPE_FIELD_TYPE (type, f) = new_type; + type->field (f).set_type (new_type); TYPE_FIELD_NAME (type, f) = TYPE_FIELD_NAME (type0, f); } } @@ -8430,7 +8131,7 @@ struct value *dval; struct type *rtype; struct type *branch_type; - int nfields = TYPE_NFIELDS (type); + int nfields = type->num_fields (); int variant_field = variant_field_index (type); if (variant_field == -1) @@ -8445,19 +8146,21 @@ dval = dval0; rtype = alloc_type_copy (type); - TYPE_CODE (rtype) = TYPE_CODE_STRUCT; + rtype->set_code (TYPE_CODE_STRUCT); INIT_NONE_SPECIFIC (rtype); - TYPE_NFIELDS (rtype) = nfields; - TYPE_FIELDS (rtype) = + rtype->set_num_fields (nfields); + + field *fields = (struct field *) TYPE_ALLOC (rtype, nfields * sizeof (struct field)); - memcpy (TYPE_FIELDS (rtype), TYPE_FIELDS (type), - sizeof (struct field) * nfields); - TYPE_NAME (rtype) = ada_type_name (type); + memcpy (fields, type->fields (), sizeof (struct field) * nfields); + rtype->set_fields (fields); + + rtype->set_name (ada_type_name (type)); TYPE_FIXED_INSTANCE (rtype) = 1; TYPE_LENGTH (rtype) = TYPE_LENGTH (type); branch_type = to_fixed_variant_branch_type - (TYPE_FIELD_TYPE (type, variant_field), + (type->field (variant_field).type (), cond_offset_host (valaddr, TYPE_FIELD_BITPOS (type, variant_field) / TARGET_CHAR_BIT), @@ -8469,17 +8172,17 @@ int f; for (f = variant_field + 1; f < nfields; f += 1) - TYPE_FIELDS (rtype)[f - 1] = TYPE_FIELDS (rtype)[f]; - TYPE_NFIELDS (rtype) -= 1; + rtype->field (f - 1) = rtype->field (f); + rtype->set_num_fields (rtype->num_fields () - 1); } else { - TYPE_FIELD_TYPE (rtype, variant_field) = branch_type; + rtype->field (variant_field).set_type (branch_type); TYPE_FIELD_NAME (rtype, variant_field) = "S"; TYPE_FIELD_BITSIZE (rtype, variant_field) = 0; TYPE_LENGTH (rtype) += TYPE_LENGTH (branch_type); } - TYPE_LENGTH (rtype) -= TYPE_LENGTH (TYPE_FIELD_TYPE (type, variant_field)); + TYPE_LENGTH (rtype) -= TYPE_LENGTH (type->field (variant_field).type ()); value_free_to_mark (mark); return rtype; @@ -8547,7 +8250,7 @@ struct type *templ_type; struct type *var_type; - if (TYPE_CODE (var_type0) == TYPE_CODE_PTR) + if (var_type0->code () == TYPE_CODE_PTR) var_type = TYPE_TARGET_TYPE (var_type0); else var_type = var_type0; @@ -8559,22 +8262,20 @@ if (is_unchecked_variant (var_type, value_type (dval))) return var_type0; - which = - ada_which_variant_applies (var_type, - value_type (dval), value_contents (dval)); + which = ada_which_variant_applies (var_type, dval); if (which < 0) return empty_record (var_type); else if (is_dynamic_field (var_type, which)) return to_fixed_record_type - (TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (var_type, which)), + (TYPE_TARGET_TYPE (var_type->field (which).type ()), valaddr, address, dval); - else if (variant_field_index (TYPE_FIELD_TYPE (var_type, which)) >= 0) + else if (variant_field_index (var_type->field (which).type ()) >= 0) return to_fixed_record_type - (TYPE_FIELD_TYPE (var_type, which), valaddr, address, dval); + (var_type->field (which).type (), valaddr, address, dval); else - return TYPE_FIELD_TYPE (var_type, which); + return var_type->field (which).type (); } /* Assuming RANGE_TYPE is a TYPE_CODE_RANGE, return nonzero if @@ -8589,10 +8290,10 @@ int n; LONGEST lo, hi; - gdb_assert (TYPE_CODE (range_type) == TYPE_CODE_RANGE); + gdb_assert (range_type->code () == TYPE_CODE_RANGE); - if (TYPE_CODE (get_base_type (range_type)) - != TYPE_CODE (get_base_type (encoding_type))) + if (get_base_type (range_type)->code () + != get_base_type (encoding_type)->code ()) { /* The compiler probably used a simple base type to describe the range type instead of the range's actual base type, @@ -8605,23 +8306,23 @@ if (is_dynamic_type (range_type)) return 0; - if (TYPE_NAME (encoding_type) == NULL) + if (encoding_type->name () == NULL) return 0; - bounds_str = strstr (TYPE_NAME (encoding_type), "___XDLU_"); + bounds_str = strstr (encoding_type->name (), "___XDLU_"); if (bounds_str == NULL) return 0; n = 8; /* Skip "___XDLU_". */ if (!ada_scan_number (bounds_str, n, &lo, &n)) return 0; - if (TYPE_LOW_BOUND (range_type) != lo) + if (range_type->bounds ()->low.const_val () != lo) return 0; n += 2; /* Skip the "__" separator between the two bounds. */ if (!ada_scan_number (bounds_str, n, &hi, &n)) return 0; - if (TYPE_HIGH_BOUND (range_type) != hi) + if (range_type->bounds ()->high.const_val () != hi) return 0; return 1; @@ -8638,10 +8339,10 @@ struct type *this_layer = check_typedef (array_type); int i; - for (i = 0; i < TYPE_NFIELDS (desc_type); i++) + for (i = 0; i < desc_type->num_fields (); i++) { - if (!ada_is_redundant_range_encoding (TYPE_INDEX_TYPE (this_layer), - TYPE_FIELD_TYPE (desc_type, i))) + if (!ada_is_redundant_range_encoding (this_layer->index_type (), + desc_type->field (i).type ())) return 0; this_layer = check_typedef (TYPE_TARGET_TYPE (this_layer)); } @@ -8734,7 +8435,7 @@ result = type0; else result = create_array_type (alloc_type_copy (type0), - elt_type, TYPE_INDEX_TYPE (type0)); + elt_type, type0->index_type ()); } else { @@ -8742,7 +8443,7 @@ struct type *elt_type0; elt_type0 = type0; - for (i = TYPE_NFIELDS (index_type_desc); i > 0; i -= 1) + for (i = index_type_desc->num_fields (); i > 0; i -= 1) elt_type0 = TYPE_TARGET_TYPE (elt_type0); /* NOTE: result---the fixed version of elt_type0---should never @@ -8760,10 +8461,10 @@ ada_to_fixed_type (ada_check_typedef (elt_type0), 0, 0, dval, 1); elt_type0 = type0; - for (i = TYPE_NFIELDS (index_type_desc) - 1; i >= 0; i -= 1) + for (i = index_type_desc->num_fields () - 1; i >= 0; i -= 1) { struct type *range_type = - to_fixed_range_type (TYPE_FIELD_TYPE (index_type_desc, i), dval); + to_fixed_range_type (index_type_desc->field (i).type (), dval); result = create_array_type (alloc_type_copy (elt_type0), result, range_type); @@ -8776,7 +8477,7 @@ /* We want to preserve the type name. This can be useful when trying to get the type name of a value that has already been printed (for instance, if the user did "print VAR; whatis $". */ - TYPE_NAME (result) = TYPE_NAME (type0); + result->set_name (type0->name ()); if (constrained_packed_array_p) { @@ -8820,7 +8521,7 @@ if (!HAVE_GNAT_AUX_INFO (type)) return type; - switch (TYPE_CODE (type)) + switch (type->code ()) { default: return type; @@ -8968,7 +8669,7 @@ only in that situation. But this seems unnecessary so far, probably because we call check_typedef/ada_check_typedef pretty much everywhere. */ - if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF + if (type->code () == TYPE_CODE_TYPEDEF && (TYPE_MAIN_TYPE (ada_typedef_target_type (type)) == TYPE_MAIN_TYPE (fixed_type))) return type; @@ -8992,7 +8693,7 @@ type0 = ada_check_typedef (type0); - switch (TYPE_CODE (type0)) + switch (type0->code ()) { default: return type0; @@ -9018,9 +8719,9 @@ { if (ada_is_aligner_type (type)) { - struct type *type1 = TYPE_FIELD_TYPE (ada_check_typedef (type), 0); + struct type *type1 = ada_check_typedef (type)->field (0).type (); if (ada_type_name (type1) == NULL) - TYPE_NAME (type1) = ada_type_name (type); + type1->set_name (ada_type_name (type)); return static_unwrap_type (type1); } @@ -9065,13 +8766,13 @@ return type; type = check_typedef (type); - if (type == NULL || TYPE_CODE (type) != TYPE_CODE_ENUM + if (type == NULL || type->code () != TYPE_CODE_ENUM || !TYPE_STUB (type) - || TYPE_NAME (type) == NULL) + || type->name () == NULL) return type; else { - const char *name = TYPE_NAME (type); + const char *name = type->name (); struct type *type1 = ada_find_any_type (name); if (type1 == NULL) @@ -9081,7 +8782,7 @@ stubs pointing to arrays, as we don't create symbols for array types, only for the typedef-to-array types). If that's the case, strip the typedef layer. */ - if (TYPE_CODE (type1) == TYPE_CODE_TYPEDEF) + if (type1->code () == TYPE_CODE_TYPEDEF) type1 = ada_check_typedef (type1); return type1; @@ -9165,15 +8866,15 @@ { struct value *val = coerce_ref (arg); struct type *type = value_type (val); - LONGEST result; if (!discrete_type_p (type)) error (_("'POS only defined on discrete types")); - if (!discrete_position (type, value_as_long (val), &result)) + gdb::optional result = discrete_position (type, value_as_long (val)); + if (!result.has_value ()) error (_("enumeration value is invalid: can't find 'POS")); - return result; + return *result; } static struct value * @@ -9185,6 +8886,21 @@ /* Evaluate the TYPE'VAL attribute applied to ARG. */ static struct value * +val_atr (struct type *type, LONGEST val) +{ + gdb_assert (discrete_type_p (type)); + if (type->code () == TYPE_CODE_RANGE) + type = TYPE_TARGET_TYPE (type); + if (type->code () == TYPE_CODE_ENUM) + { + if (val < 0 || val >= type->num_fields ()) + error (_("argument to 'VAL out of range")); + val = TYPE_FIELD_ENUMVAL (type, val); + } + return value_from_longest (type, val); +} + +static struct value * value_val_atr (struct type *type, struct value *arg) { if (!discrete_type_p (type)) @@ -9192,16 +8908,7 @@ if (!integer_type_p (value_type (arg))) error (_("'VAL requires integral argument")); - if (TYPE_CODE (type) == TYPE_CODE_ENUM) - { - long pos = value_as_long (arg); - - if (pos < 0 || pos >= TYPE_NFIELDS (type)) - error (_("argument to 'VAL out of range")); - return value_from_longest (type, TYPE_FIELD_ENUMVAL (type, pos)); - } - else - return value_from_longest (type, value_as_long (arg)); + return val_atr (type, value_as_long (arg)); } @@ -9218,15 +8925,15 @@ /* If the type code says it's a character, then assume it really is, and don't check any further. */ - if (TYPE_CODE (type) == TYPE_CODE_CHAR) + if (type->code () == TYPE_CODE_CHAR) return true; /* Otherwise, assume it's a character type iff it is a discrete type with a known character type name. */ name = ada_type_name (type); return (name != NULL - && (TYPE_CODE (type) == TYPE_CODE_INT - || TYPE_CODE (type) == TYPE_CODE_RANGE) + && (type->code () == TYPE_CODE_INT + || type->code () == TYPE_CODE_RANGE) && (strcmp (name, "character") == 0 || strcmp (name, "wide_character") == 0 || strcmp (name, "wide_wide_character") == 0 @@ -9240,7 +8947,7 @@ { type = ada_check_typedef (type); if (type != NULL - && TYPE_CODE (type) != TYPE_CODE_PTR + && type->code () != TYPE_CODE_PTR && (ada_is_simple_array_type (type) || ada_is_array_descriptor_type (type)) && ada_array_arity (type) == 1) @@ -9276,8 +8983,8 @@ if (!trust_pad_over_xvs && ada_find_parallel_type (type, "___XVS") != NULL) return 0; - return (TYPE_CODE (type) == TYPE_CODE_STRUCT - && TYPE_NFIELDS (type) == 1 + return (type->code () == TYPE_CODE_STRUCT + && type->num_fields () == 1 && strcmp (TYPE_FIELD_NAME (type, 0), "F") == 0); } @@ -9290,7 +8997,7 @@ struct type *real_type_namer; struct type *raw_real_type; - if (raw_type == NULL || TYPE_CODE (raw_type) != TYPE_CODE_STRUCT) + if (raw_type == NULL || raw_type->code () != TYPE_CODE_STRUCT) return raw_type; if (ada_is_aligner_type (raw_type)) @@ -9310,11 +9017,11 @@ real_type_namer = ada_find_parallel_type (raw_type, "___XVS"); if (real_type_namer == NULL - || TYPE_CODE (real_type_namer) != TYPE_CODE_STRUCT - || TYPE_NFIELDS (real_type_namer) != 1) + || real_type_namer->code () != TYPE_CODE_STRUCT + || real_type_namer->num_fields () != 1) return raw_type; - if (TYPE_CODE (TYPE_FIELD_TYPE (real_type_namer, 0)) != TYPE_CODE_REF) + if (real_type_namer->field (0).type ()->code () != TYPE_CODE_REF) { /* This is an older encoding form where the base type needs to be looked up by name. We prefer the newer encoding because it is @@ -9327,7 +9034,7 @@ } /* The field in our XVS type is a reference to the base type. */ - return TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (real_type_namer, 0)); + return TYPE_TARGET_TYPE (real_type_namer->field (0).type ()); } /* The type of value designated by TYPE, with all aligners removed. */ @@ -9336,7 +9043,7 @@ ada_aligned_type (struct type *type) { if (ada_is_aligner_type (type)) - return ada_aligned_type (TYPE_FIELD_TYPE (type, 0)); + return ada_aligned_type (type->field (0).type ()); else return ada_get_base_type (type); } @@ -9349,7 +9056,7 @@ ada_aligned_value_addr (struct type *type, const gdb_byte *valaddr) { if (ada_is_aligner_type (type)) - return ada_aligned_value_addr (TYPE_FIELD_TYPE (type, 0), + return ada_aligned_value_addr (type->field (0).type (), valaddr + TYPE_FIELD_BITPOS (type, 0) / TARGET_CHAR_BIT); @@ -9445,7 +9152,7 @@ static struct value * evaluate_subexp_type (struct expression *exp, int *pos) { - return evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS); + return evaluate_subexp (nullptr, exp, pos, EVAL_AVOID_SIDE_EFFECTS); } /* If VAL is wrapped in an aligner or subtype wrapper, return the @@ -9462,7 +9169,7 @@ struct type *val_type = ada_check_typedef (value_type (v)); if (ada_type_name (val_type) == NULL) - TYPE_NAME (val_type) = ada_type_name (type); + val_type->set_name (ada_type_name (type)); return unwrap_value (v); } @@ -9502,7 +9209,7 @@ return arg; struct value *scale = ada_scaling_factor (type); - if (ada_is_fixed_point_type (value_type (arg))) + if (ada_is_gnat_encoded_fixed_point_type (value_type (arg))) arg = cast_from_fixed (value_type (scale), arg); else arg = value_cast (value_type (scale), arg); @@ -9553,9 +9260,9 @@ /* Verify that both val and type are arrays of scalars, and that the size of val's elements is smaller than the size of type's element. */ - gdb_assert (TYPE_CODE (type) == TYPE_CODE_ARRAY); + gdb_assert (type->code () == TYPE_CODE_ARRAY); gdb_assert (is_integral_type (TYPE_TARGET_TYPE (type))); - gdb_assert (TYPE_CODE (value_type (val)) == TYPE_CODE_ARRAY); + gdb_assert (value_type (val)->code () == TYPE_CODE_ARRAY); gdb_assert (is_integral_type (TYPE_TARGET_TYPE (value_type (val)))); gdb_assert (TYPE_LENGTH (TYPE_TARGET_TYPE (type)) > TYPE_LENGTH (TYPE_TARGET_TYPE (value_type (val)))); @@ -9591,15 +9298,15 @@ type2 = ada_check_typedef (type2); type = ada_check_typedef (type); - if (TYPE_CODE (type2) == TYPE_CODE_PTR - && TYPE_CODE (type) == TYPE_CODE_ARRAY) + if (type2->code () == TYPE_CODE_PTR + && type->code () == TYPE_CODE_ARRAY) { val = ada_value_ind (val); type2 = value_type (val); } - if (TYPE_CODE (type2) == TYPE_CODE_ARRAY - && TYPE_CODE (type) == TYPE_CODE_ARRAY) + if (type2->code () == TYPE_CODE_ARRAY + && type->code () == TYPE_CODE_ARRAY) { if (!ada_same_array_size_p (type, type2)) error (_("cannot assign arrays of different length")); @@ -9634,8 +9341,8 @@ type1 = get_base_type (ada_check_typedef (value_type (arg1))); type2 = get_base_type (ada_check_typedef (value_type (arg2))); - if (TYPE_CODE (type1) != TYPE_CODE_INT - || TYPE_CODE (type2) != TYPE_CODE_INT) + if (type1->code () != TYPE_CODE_INT + || type2->code () != TYPE_CODE_INT) return value_binop (arg1, arg2, op); switch (op) @@ -9699,8 +9406,8 @@ arg1_type = ada_check_typedef (value_type (arg1)); arg2_type = ada_check_typedef (value_type (arg2)); - if (TYPE_CODE (arg1_type) != TYPE_CODE_ARRAY - || TYPE_CODE (arg2_type) != TYPE_CODE_ARRAY) + if (arg1_type->code () != TYPE_CODE_ARRAY + || arg2_type->code () != TYPE_CODE_ARRAY) error (_("Attempt to compare array with non-array")); /* FIXME: The following works only for types whose representations use all bits (no padding or undefined bits) @@ -9754,7 +9461,7 @@ struct value *elt; struct type *lhs_type = check_typedef (value_type (lhs)); - if (TYPE_CODE (lhs_type) == TYPE_CODE_ARRAY) + if (lhs_type->code () == TYPE_CODE_ARRAY) { struct type *index_type = builtin_type (exp->gdbarch)->builtin_int; struct value *index_val = value_from_longest (index_type, index); @@ -9818,10 +9525,10 @@ { lhs = ada_coerce_to_simple_array (lhs); lhs_type = check_typedef (value_type (lhs)); - low_index = TYPE_ARRAY_LOWER_BOUND_VALUE (lhs_type); - high_index = TYPE_ARRAY_UPPER_BOUND_VALUE (lhs_type); + low_index = lhs_type->bounds ()->low.const_val (); + high_index = lhs_type->bounds ()->high.const_val (); } - else if (TYPE_CODE (lhs_type) == TYPE_CODE_STRUCT) + else if (lhs_type->code () == TYPE_CODE_STRUCT) { low_index = 0; high_index = num_visible_fields (lhs_type) - 1; @@ -10050,10 +9757,10 @@ if (type == ada_check_typedef (value_type (arg2))) return arg2; - if (ada_is_fixed_point_type (type)) + if (ada_is_gnat_encoded_fixed_point_type (type)) return cast_to_fixed (type, arg2); - if (ada_is_fixed_point_type (value_type (arg2))) + if (ada_is_gnat_encoded_fixed_point_type (value_type (arg2))) return cast_from_fixed (type, arg2); return value_cast (type, arg2); @@ -10415,8 +10122,8 @@ result = evaluate_subexp_standard (expect_type, exp, pos, noside); /* The result type will have code OP_STRING, bashed there from OP_ARRAY. Bash it back. */ - if (TYPE_CODE (value_type (result)) == TYPE_CODE_STRING) - TYPE_CODE (value_type (result)) = TYPE_CODE_ARRAY; + if (value_type (result)->code () == TYPE_CODE_STRING) + value_type (result)->set_code (TYPE_CODE_ARRAY); return result; } @@ -10431,7 +10138,7 @@ return ada_evaluate_subexp (type, exp, pos, noside); case BINOP_ASSIGN: - arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside); + arg1 = evaluate_subexp (nullptr, exp, pos, noside); if (exp->elts[*pos].opcode == OP_AGGREGATE) { arg1 = assign_aggregate (arg1, arg1, exp, pos, noside); @@ -10453,9 +10160,9 @@ { /* Nothing. */ } - else if (ada_is_fixed_point_type (value_type (arg1))) + else if (ada_is_gnat_encoded_fixed_point_type (value_type (arg1))) arg2 = cast_to_fixed (value_type (arg1), arg2); - else if (ada_is_fixed_point_type (value_type (arg2))) + else if (ada_is_gnat_encoded_fixed_point_type (value_type (arg2))) error (_("Fixed-point values must be assigned to fixed-point variables")); else @@ -10467,23 +10174,23 @@ arg2 = evaluate_subexp_with_coercion (exp, pos, noside); if (noside == EVAL_SKIP) goto nosideret; - if (TYPE_CODE (value_type (arg1)) == TYPE_CODE_PTR) + if (value_type (arg1)->code () == TYPE_CODE_PTR) return (value_from_longest (value_type (arg1), value_as_long (arg1) + value_as_long (arg2))); - if (TYPE_CODE (value_type (arg2)) == TYPE_CODE_PTR) + if (value_type (arg2)->code () == TYPE_CODE_PTR) return (value_from_longest (value_type (arg2), value_as_long (arg1) + value_as_long (arg2))); - if ((ada_is_fixed_point_type (value_type (arg1)) - || ada_is_fixed_point_type (value_type (arg2))) + if ((ada_is_gnat_encoded_fixed_point_type (value_type (arg1)) + || ada_is_gnat_encoded_fixed_point_type (value_type (arg2))) && value_type (arg1) != value_type (arg2)) error (_("Operands of fixed-point addition must have the same type")); /* Do the addition, and cast the result to the type of the first argument. We cannot cast the result to a reference type, so if ARG1 is a reference type, find its underlying type. */ type = value_type (arg1); - while (TYPE_CODE (type) == TYPE_CODE_REF) + while (type->code () == TYPE_CODE_REF) type = TYPE_TARGET_TYPE (type); binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2); return value_cast (type, value_binop (arg1, arg2, BINOP_ADD)); @@ -10493,16 +10200,16 @@ arg2 = evaluate_subexp_with_coercion (exp, pos, noside); if (noside == EVAL_SKIP) goto nosideret; - if (TYPE_CODE (value_type (arg1)) == TYPE_CODE_PTR) + if (value_type (arg1)->code () == TYPE_CODE_PTR) return (value_from_longest (value_type (arg1), value_as_long (arg1) - value_as_long (arg2))); - if (TYPE_CODE (value_type (arg2)) == TYPE_CODE_PTR) + if (value_type (arg2)->code () == TYPE_CODE_PTR) return (value_from_longest (value_type (arg2), value_as_long (arg1) - value_as_long (arg2))); - if ((ada_is_fixed_point_type (value_type (arg1)) - || ada_is_fixed_point_type (value_type (arg2))) + if ((ada_is_gnat_encoded_fixed_point_type (value_type (arg1)) + || ada_is_gnat_encoded_fixed_point_type (value_type (arg2))) && value_type (arg1) != value_type (arg2)) error (_("Operands of fixed-point subtraction " "must have the same type")); @@ -10510,7 +10217,7 @@ argument. We cannot cast the result to a reference type, so if ARG1 is a reference type, find its underlying type. */ type = value_type (arg1); - while (TYPE_CODE (type) == TYPE_CODE_REF) + while (type->code () == TYPE_CODE_REF) type = TYPE_TARGET_TYPE (type); binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2); return value_cast (type, value_binop (arg1, arg2, BINOP_SUB)); @@ -10519,8 +10226,8 @@ case BINOP_DIV: case BINOP_REM: case BINOP_MOD: - arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside); - arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside); + arg1 = evaluate_subexp (nullptr, exp, pos, noside); + arg2 = evaluate_subexp (nullptr, exp, pos, noside); if (noside == EVAL_SKIP) goto nosideret; else if (noside == EVAL_AVOID_SIDE_EFFECTS) @@ -10531,9 +10238,9 @@ else { type = builtin_type (exp->gdbarch)->builtin_double; - if (ada_is_fixed_point_type (value_type (arg1))) + if (ada_is_gnat_encoded_fixed_point_type (value_type (arg1))) arg1 = cast_from_fixed (type, arg1); - if (ada_is_fixed_point_type (value_type (arg2))) + if (ada_is_gnat_encoded_fixed_point_type (value_type (arg2))) arg2 = cast_from_fixed (type, arg2); binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2); return ada_value_binop (arg1, arg2, op); @@ -10541,7 +10248,7 @@ case BINOP_EQUAL: case BINOP_NOTEQUAL: - arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside); + arg1 = evaluate_subexp (nullptr, exp, pos, noside); arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside); if (noside == EVAL_SKIP) goto nosideret; @@ -10558,10 +10265,10 @@ return value_from_longest (type, (LONGEST) tem); case UNOP_NEG: - arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside); + arg1 = evaluate_subexp (nullptr, exp, pos, noside); if (noside == EVAL_SKIP) goto nosideret; - else if (ada_is_fixed_point_type (value_type (arg1))) + else if (ada_is_gnat_encoded_fixed_point_type (value_type (arg1))) return value_cast (value_type (arg1), value_neg (arg1)); else { @@ -10587,8 +10294,8 @@ { struct value *val; - arg1 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS); - *pos = pc; + arg1 = evaluate_subexp (nullptr, exp, pos, EVAL_AVOID_SIDE_EFFECTS); + *pos = pc; val = evaluate_subexp_standard (expect_type, exp, pos, noside); return value_cast (value_type (arg1), val); @@ -10619,7 +10326,7 @@ The latter should be shown as usual (as a pointer), whereas a reference should mostly be transparent to the user. */ if (ada_is_tagged_type (type, 0) - || (TYPE_CODE (type) == TYPE_CODE_REF + || (type->code () == TYPE_CODE_REF && ada_is_tagged_type (TYPE_TARGET_TYPE (type), 0))) { /* Tagged types are a little special in the fact that the real @@ -10639,9 +10346,9 @@ a fixed type would result in the loss of that type name, thus preventing us from printing the name of the ancestor type in the type description. */ - arg1 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_NORMAL); + arg1 = evaluate_subexp (nullptr, exp, pos, EVAL_NORMAL); - if (TYPE_CODE (type) != TYPE_CODE_REF) + if (type->code () != TYPE_CODE_REF) { struct type *actual_type; @@ -10674,9 +10381,9 @@ For instance, a case statement in a variant record would be replaced by the relevant components based on the actual value of the discriminants. */ - if ((TYPE_CODE (type) == TYPE_CODE_STRUCT + if ((type->code () == TYPE_CODE_STRUCT && dynamic_template_type (type) != NULL) - || (TYPE_CODE (type) == TYPE_CODE_UNION + || (type->code () == TYPE_CODE_UNION && ada_find_parallel_type (type, "___XVU") != NULL)) { *pos += 4; @@ -10702,8 +10409,8 @@ else { for (tem = 0; tem <= nargs; tem += 1) - argvec[tem] = evaluate_subexp (NULL_TYPE, exp, pos, noside); - argvec[tem] = 0; + argvec[tem] = evaluate_subexp (nullptr, exp, pos, noside); + argvec[tem] = 0; if (noside == EVAL_SKIP) goto nosideret; @@ -10712,13 +10419,13 @@ if (ada_is_constrained_packed_array_type (desc_base_type (value_type (argvec[0])))) argvec[0] = ada_coerce_to_simple_array (argvec[0]); - else if (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_ARRAY + else if (value_type (argvec[0])->code () == TYPE_CODE_ARRAY && TYPE_FIELD_BITSIZE (value_type (argvec[0]), 0) != 0) /* This is a packed array that has already been fixed, and therefore already coerced to a simple array. Nothing further to do. */ ; - else if (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_REF) + else if (value_type (argvec[0])->code () == TYPE_CODE_REF) { /* Make sure we dereference references so that all the code below feels like it's really handling the referenced value. Wrapping @@ -10726,7 +10433,7 @@ well. */ argvec[0] = ada_to_fixed_value (coerce_ref (argvec[0])); } - else if (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_ARRAY + else if (value_type (argvec[0])->code () == TYPE_CODE_ARRAY && VALUE_LVAL (argvec[0]) == lval_memory) argvec[0] = value_addr (argvec[0]); @@ -10735,12 +10442,12 @@ /* Ada allows us to implicitly dereference arrays when subscripting them. So, if this is an array typedef (encoding use for array access types encoded as fat pointers), strip it now. */ - if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF) + if (type->code () == TYPE_CODE_TYPEDEF) type = ada_typedef_target_type (type); - if (TYPE_CODE (type) == TYPE_CODE_PTR) + if (type->code () == TYPE_CODE_PTR) { - switch (TYPE_CODE (ada_check_typedef (TYPE_TARGET_TYPE (type)))) + switch (ada_check_typedef (TYPE_TARGET_TYPE (type))->code ()) { case TYPE_CODE_FUNC: type = ada_check_typedef (TYPE_TARGET_TYPE (type)); @@ -10759,7 +10466,7 @@ } } - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_FUNC: if (noside == EVAL_AVOID_SIDE_EFFECTS) @@ -10832,12 +10539,12 @@ case TERNOP_SLICE: { - struct value *array = evaluate_subexp (NULL_TYPE, exp, pos, noside); - struct value *low_bound_val = - evaluate_subexp (NULL_TYPE, exp, pos, noside); - struct value *high_bound_val = - evaluate_subexp (NULL_TYPE, exp, pos, noside); - LONGEST low_bound; + struct value *array = evaluate_subexp (nullptr, exp, pos, noside); + struct value *low_bound_val + = evaluate_subexp (nullptr, exp, pos, noside); + struct value *high_bound_val + = evaluate_subexp (nullptr, exp, pos, noside); + LONGEST low_bound; LONGEST high_bound; low_bound_val = coerce_ref (low_bound_val); @@ -10850,7 +10557,7 @@ /* If this is a reference to an aligner type, then remove all the aligners. */ - if (TYPE_CODE (value_type (array)) == TYPE_CODE_REF + if (value_type (array)->code () == TYPE_CODE_REF && ada_is_aligner_type (TYPE_TARGET_TYPE (value_type (array)))) TYPE_TARGET_TYPE (value_type (array)) = ada_aligned_type (TYPE_TARGET_TYPE (value_type (array))); @@ -10860,8 +10567,8 @@ /* If this is a reference to an array or an array lvalue, convert to a pointer. */ - if (TYPE_CODE (value_type (array)) == TYPE_CODE_REF - || (TYPE_CODE (value_type (array)) == TYPE_CODE_ARRAY + if (value_type (array)->code () == TYPE_CODE_REF + || (value_type (array)->code () == TYPE_CODE_ARRAY && VALUE_LVAL (array) == lval_memory)) array = value_addr (array); @@ -10875,8 +10582,8 @@ /* If we have more than one level of pointer indirection, dereference the value until we get only one level. */ - while (TYPE_CODE (value_type (array)) == TYPE_CODE_PTR - && (TYPE_CODE (TYPE_TARGET_TYPE (value_type (array))) + while (value_type (array)->code () == TYPE_CODE_PTR + && (TYPE_TARGET_TYPE (value_type (array))->code () == TYPE_CODE_PTR)) array = value_ind (array); @@ -10887,7 +10594,7 @@ if (!ada_is_simple_array_type (value_type (array))) error (_("cannot take slice of non-array")); - if (TYPE_CODE (ada_check_typedef (value_type (array))) + if (ada_check_typedef (value_type (array))->code () == TYPE_CODE_PTR) { struct type *type0 = ada_check_typedef (value_type (array)); @@ -10915,13 +10622,13 @@ case UNOP_IN_RANGE: (*pos) += 2; - arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside); + arg1 = evaluate_subexp (nullptr, exp, pos, noside); type = check_typedef (exp->elts[pc + 1].type); if (noside == EVAL_SKIP) goto nosideret; - switch (TYPE_CODE (type)) + switch (type->code ()) { default: lim_warning (_("Membership test incompletely implemented; " @@ -10930,8 +10637,10 @@ return value_from_longest (type, (LONGEST) 1); case TYPE_CODE_RANGE: - arg2 = value_from_longest (type, TYPE_LOW_BOUND (type)); - arg3 = value_from_longest (type, TYPE_HIGH_BOUND (type)); + arg2 = value_from_longest (type, + type->bounds ()->low.const_val ()); + arg3 = value_from_longest (type, + type->bounds ()->high.const_val ()); binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2); binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3); type = language_bool_type (exp->language_defn, exp->gdbarch); @@ -10945,8 +10654,8 @@ case BINOP_IN_BOUNDS: (*pos) += 2; - arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside); - arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside); + arg1 = evaluate_subexp (nullptr, exp, pos, noside); + arg2 = evaluate_subexp (nullptr, exp, pos, noside); if (noside == EVAL_SKIP) goto nosideret; @@ -10977,9 +10686,9 @@ || value_equal (arg2, arg1))); case TERNOP_IN_RANGE: - arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside); - arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside); - arg3 = evaluate_subexp (NULL_TYPE, exp, pos, noside); + arg1 = evaluate_subexp (nullptr, exp, pos, noside); + arg2 = evaluate_subexp (nullptr, exp, pos, noside); + arg3 = evaluate_subexp (nullptr, exp, pos, noside); if (noside == EVAL_SKIP) goto nosideret; @@ -11002,14 +10711,14 @@ if (exp->elts[*pos].opcode == OP_TYPE) { - evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP); - arg1 = NULL; + evaluate_subexp (nullptr, exp, pos, EVAL_SKIP); + arg1 = NULL; type_arg = check_typedef (exp->elts[pc + 2].type); } else { - arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside); - type_arg = NULL; + arg1 = evaluate_subexp (nullptr, exp, pos, noside); + type_arg = NULL; } if (exp->elts[*pos].opcode != OP_LONG) @@ -11084,7 +10793,7 @@ const char *name = ada_type_name (type_arg); range_type = NULL; - if (name != NULL && TYPE_CODE (type_arg) != TYPE_CODE_ENUM) + if (name != NULL && type_arg->code () != TYPE_CODE_ENUM) range_type = to_fixed_range_type (type_arg, NULL); if (range_type == NULL) range_type = type_arg; @@ -11102,7 +10811,7 @@ error (_("the 'length attribute applies only to array types")); } } - else if (TYPE_CODE (type_arg) == TYPE_CODE_FLT) + else if (type_arg->code () == TYPE_CODE_FLT) error (_("unimplemented type attribute")); else { @@ -11139,7 +10848,7 @@ } case OP_ATR_TAG: - arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside); + arg1 = evaluate_subexp (nullptr, exp, pos, noside); if (noside == EVAL_SKIP) goto nosideret; @@ -11150,9 +10859,9 @@ case OP_ATR_MIN: case OP_ATR_MAX: - evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP); - arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside); - arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside); + evaluate_subexp (nullptr, exp, pos, EVAL_SKIP); + arg1 = evaluate_subexp (nullptr, exp, pos, noside); + arg2 = evaluate_subexp (nullptr, exp, pos, noside); if (noside == EVAL_SKIP) goto nosideret; else if (noside == EVAL_AVOID_SIDE_EFFECTS) @@ -11168,8 +10877,8 @@ { struct type *type_arg = check_typedef (exp->elts[pc + 2].type); - evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP); - if (noside == EVAL_SKIP) + evaluate_subexp (nullptr, exp, pos, EVAL_SKIP); + if (noside == EVAL_SKIP) goto nosideret; if (!ada_is_modular_type (type_arg)) @@ -11181,8 +10890,8 @@ case OP_ATR_POS: - evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP); - arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside); + evaluate_subexp (nullptr, exp, pos, EVAL_SKIP); + arg1 = evaluate_subexp (nullptr, exp, pos, noside); if (noside == EVAL_SKIP) goto nosideret; type = builtin_type (exp->gdbarch)->builtin_int; @@ -11192,13 +10901,13 @@ return value_pos_atr (type, arg1); case OP_ATR_SIZE: - arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside); + arg1 = evaluate_subexp (nullptr, exp, pos, noside); type = value_type (arg1); /* If the argument is a reference, then dereference its type, since the user is really asking for the size of the actual object, not the size of the pointer. */ - if (TYPE_CODE (type) == TYPE_CODE_REF) + if (type->code () == TYPE_CODE_REF) type = TYPE_TARGET_TYPE (type); if (noside == EVAL_SKIP) @@ -11210,8 +10919,8 @@ TARGET_CHAR_BIT * TYPE_LENGTH (type)); case OP_ATR_VAL: - evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP); - arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside); + evaluate_subexp (nullptr, exp, pos, EVAL_SKIP); + arg1 = evaluate_subexp (nullptr, exp, pos, noside); type = exp->elts[pc + 2].type; if (noside == EVAL_SKIP) goto nosideret; @@ -11221,8 +10930,8 @@ return value_val_atr (type, arg1); case BINOP_EXP: - arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside); - arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside); + arg1 = evaluate_subexp (nullptr, exp, pos, noside); + arg2 = evaluate_subexp (nullptr, exp, pos, noside); if (noside == EVAL_SKIP) goto nosideret; else if (noside == EVAL_AVOID_SIDE_EFFECTS) @@ -11240,14 +10949,14 @@ } case UNOP_PLUS: - arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside); + arg1 = evaluate_subexp (nullptr, exp, pos, noside); if (noside == EVAL_SKIP) goto nosideret; else return arg1; case UNOP_ABS: - arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside); + arg1 = evaluate_subexp (nullptr, exp, pos, noside); if (noside == EVAL_SKIP) goto nosideret; unop_promote (exp->language_defn, exp->gdbarch, &arg1); @@ -11258,7 +10967,7 @@ case UNOP_IND: preeval_pos = *pos; - arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside); + arg1 = evaluate_subexp (nullptr, exp, pos, noside); if (noside == EVAL_SKIP) goto nosideret; type = ada_check_typedef (value_type (arg1)); @@ -11273,22 +10982,22 @@ error (_("Attempt to dereference null array pointer.")); return value_at_lazy (arrType, 0); } - else if (TYPE_CODE (type) == TYPE_CODE_PTR - || TYPE_CODE (type) == TYPE_CODE_REF + else if (type->code () == TYPE_CODE_PTR + || type->code () == TYPE_CODE_REF /* In C you can dereference an array to get the 1st elt. */ - || TYPE_CODE (type) == TYPE_CODE_ARRAY) + || type->code () == TYPE_CODE_ARRAY) { /* As mentioned in the OP_VAR_VALUE case, tagged types can only be determined by inspecting the object's tag. This means that we need to evaluate completely the expression in order to get its type. */ - if ((TYPE_CODE (type) == TYPE_CODE_REF - || TYPE_CODE (type) == TYPE_CODE_PTR) + if ((type->code () == TYPE_CODE_REF + || type->code () == TYPE_CODE_PTR) && ada_is_tagged_type (TYPE_TARGET_TYPE (type), 0)) { - arg1 = evaluate_subexp (NULL_TYPE, exp, &preeval_pos, - EVAL_NORMAL); + arg1 + = evaluate_subexp (nullptr, exp, &preeval_pos, EVAL_NORMAL); type = value_type (ada_value_ind (arg1)); } else @@ -11300,7 +11009,7 @@ ada_ensure_varsize_limit (type); return value_zero (type, lval_memory); } - else if (TYPE_CODE (type) == TYPE_CODE_INT) + else if (type->code () == TYPE_CODE_INT) { /* GDB allows dereferencing an int. */ if (expect_type == NULL) @@ -11319,7 +11028,7 @@ arg1 = ada_coerce_ref (arg1); /* FIXME: What is this for?? */ type = ada_check_typedef (value_type (arg1)); - if (TYPE_CODE (type) == TYPE_CODE_INT) + if (type->code () == TYPE_CODE_INT) /* GDB allows dereferencing an int. If we were given the expect_type, then use that as the target type. Otherwise, assume that the target type is an int. */ @@ -11342,7 +11051,7 @@ tem = longest_to_int (exp->elts[pc + 1].longconst); (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1); preeval_pos = *pos; - arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside); + arg1 = evaluate_subexp (nullptr, exp, pos, noside); if (noside == EVAL_SKIP) goto nosideret; if (noside == EVAL_AVOID_SIDE_EFFECTS) @@ -11361,8 +11070,8 @@ if (type == NULL) { - arg1 = evaluate_subexp (NULL_TYPE, exp, &preeval_pos, - EVAL_NORMAL); + arg1 + = evaluate_subexp (nullptr, exp, &preeval_pos, EVAL_NORMAL); arg1 = ada_value_struct_elt (arg1, &exp->elts[pc + 2].string, 0); @@ -11433,10 +11142,10 @@ Otherwise, return NULL. */ static const char * -fixed_type_info (struct type *type) +gnat_encoded_fixed_type_info (struct type *type) { const char *name = ada_type_name (type); - enum type_code code = (type == NULL) ? TYPE_CODE_UNDEF : TYPE_CODE (type); + enum type_code code = (type == NULL) ? TYPE_CODE_UNDEF : type->code (); if ((code == TYPE_CODE_INT || code == TYPE_CODE_RANGE) && name != NULL) { @@ -11448,7 +11157,7 @@ return tail + 5; } else if (code == TYPE_CODE_RANGE && TYPE_TARGET_TYPE (type) != type) - return fixed_type_info (TYPE_TARGET_TYPE (type)); + return gnat_encoded_fixed_type_info (TYPE_TARGET_TYPE (type)); else return NULL; } @@ -11456,9 +11165,9 @@ /* Returns non-zero iff TYPE represents an Ada fixed-point type. */ int -ada_is_fixed_point_type (struct type *type) +ada_is_gnat_encoded_fixed_point_type (struct type *type) { - return fixed_type_info (type) != NULL; + return gnat_encoded_fixed_type_info (type) != NULL; } /* Return non-zero iff TYPE represents a System.Address type. */ @@ -11466,8 +11175,7 @@ int ada_is_system_address_type (struct type *type) { - return (TYPE_NAME (type) - && strcmp (TYPE_NAME (type), "system__address") == 0); + return (type->name () && strcmp (type->name (), "system__address") == 0); } /* Assuming that TYPE is the representation of an Ada fixed-point @@ -11485,9 +11193,9 @@ delta cannot be determined. */ struct value * -ada_delta (struct type *type) +gnat_encoded_fixed_point_delta (struct type *type) { - const char *encoding = fixed_type_info (type); + const char *encoding = gnat_encoded_fixed_type_info (type); struct type *scale_type = ada_scaling_type (type); long long num, den; @@ -11499,13 +11207,13 @@ value_from_longest (scale_type, den), BINOP_DIV); } -/* Assuming that ada_is_fixed_point_type (TYPE), return the scaling - factor ('SMALL value) associated with the type. */ +/* Assuming that ada_is_gnat_encoded_fixed_point_type (TYPE), return + the scaling factor ('SMALL value) associated with the type. */ struct value * ada_scaling_factor (struct type *type) { - const char *encoding = fixed_type_info (type); + const char *encoding = gnat_encoded_fixed_type_info (type); struct type *scale_type = ada_scaling_type (type); long long num0, den0, num1, den1; @@ -11635,14 +11343,14 @@ const char *subtype_info; gdb_assert (raw_type != NULL); - gdb_assert (TYPE_NAME (raw_type) != NULL); + gdb_assert (raw_type->name () != NULL); - if (TYPE_CODE (raw_type) == TYPE_CODE_RANGE) + if (raw_type->code () == TYPE_CODE_RANGE) base_type = TYPE_TARGET_TYPE (raw_type); else base_type = raw_type; - name = TYPE_NAME (raw_type); + name = raw_type->name (); subtype_info = strstr (name, "___XD"); if (subtype_info == NULL) { @@ -11716,7 +11424,7 @@ to match the size of the base_type, which is not what we want. Set it back to the original range type's length. */ TYPE_LENGTH (type) = TYPE_LENGTH (raw_type); - TYPE_NAME (type) = name; + type->set_name (name); return type; } } @@ -11739,8 +11447,8 @@ { struct type *subranged_type = get_base_type (type); - return (subranged_type != NULL && TYPE_CODE (type) == TYPE_CODE_RANGE - && TYPE_CODE (subranged_type) == TYPE_CODE_INT + return (subranged_type != NULL && type->code () == TYPE_CODE_RANGE + && subranged_type->code () == TYPE_CODE_INT && TYPE_UNSIGNED (subranged_type)); } @@ -11749,7 +11457,14 @@ ULONGEST ada_modulus (struct type *type) { - return (ULONGEST) TYPE_HIGH_BOUND (type) + 1; + const dynamic_prop &high = type->bounds ()->high; + + if (high.kind () == PROP_CONST) + return (ULONGEST) high.const_val () + 1; + + /* If TYPE is unresolved, the high bound might be a location list. Return + 0, for lack of a better value to return. */ + return 0; } @@ -12222,7 +11937,8 @@ return NULL; gdb::unique_xmalloc_ptr e_msg ((char *) xmalloc (e_msg_len + 1)); - read_memory_string (value_address (e_msg_val), e_msg.get (), e_msg_len + 1); + read_memory (value_address (e_msg_val), (gdb_byte *) e_msg.get (), + e_msg_len); e_msg.get ()[e_msg_len] = '\0'; return e_msg; @@ -13117,7 +12833,7 @@ static int ada_is_exception_sym (struct symbol *sym) { - const char *type_name = TYPE_NAME (SYMBOL_TYPE (sym)); + const char *type_name = SYMBOL_TYPE (sym)->name (); return (SYMBOL_CLASS (sym) != LOC_TYPEDEF && SYMBOL_CLASS (sym) != LOC_BLOCK @@ -13702,7 +13418,7 @@ case OP_ATR_VAL: if (exp->elts[*pos].opcode == OP_TYPE) { - if (TYPE_CODE (exp->elts[*pos + 1].type) != TYPE_CODE_VOID) + if (exp->elts[*pos + 1].type->code () != TYPE_CODE_VOID) LA_PRINT_TYPE (exp->elts[*pos + 1].type, "", stream, 0, 0, &type_print_raw_options); *pos += 3; @@ -13832,88 +13548,9 @@ nr_ada_primitive_types }; -static void -ada_language_arch_info (struct gdbarch *gdbarch, - struct language_arch_info *lai) -{ - const struct builtin_type *builtin = builtin_type (gdbarch); - - lai->primitive_type_vector - = GDBARCH_OBSTACK_CALLOC (gdbarch, nr_ada_primitive_types + 1, - struct type *); - - lai->primitive_type_vector [ada_primitive_type_int] - = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch), - 0, "integer"); - lai->primitive_type_vector [ada_primitive_type_long] - = arch_integer_type (gdbarch, gdbarch_long_bit (gdbarch), - 0, "long_integer"); - lai->primitive_type_vector [ada_primitive_type_short] - = arch_integer_type (gdbarch, gdbarch_short_bit (gdbarch), - 0, "short_integer"); - lai->string_char_type - = lai->primitive_type_vector [ada_primitive_type_char] - = arch_character_type (gdbarch, TARGET_CHAR_BIT, 0, "character"); - lai->primitive_type_vector [ada_primitive_type_float] - = arch_float_type (gdbarch, gdbarch_float_bit (gdbarch), - "float", gdbarch_float_format (gdbarch)); - lai->primitive_type_vector [ada_primitive_type_double] - = arch_float_type (gdbarch, gdbarch_double_bit (gdbarch), - "long_float", gdbarch_double_format (gdbarch)); - lai->primitive_type_vector [ada_primitive_type_long_long] - = arch_integer_type (gdbarch, gdbarch_long_long_bit (gdbarch), - 0, "long_long_integer"); - lai->primitive_type_vector [ada_primitive_type_long_double] - = arch_float_type (gdbarch, gdbarch_long_double_bit (gdbarch), - "long_long_float", gdbarch_long_double_format (gdbarch)); - lai->primitive_type_vector [ada_primitive_type_natural] - = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch), - 0, "natural"); - lai->primitive_type_vector [ada_primitive_type_positive] - = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch), - 0, "positive"); - lai->primitive_type_vector [ada_primitive_type_void] - = builtin->builtin_void; - - lai->primitive_type_vector [ada_primitive_type_system_address] - = lookup_pointer_type (arch_type (gdbarch, TYPE_CODE_VOID, TARGET_CHAR_BIT, - "void")); - TYPE_NAME (lai->primitive_type_vector [ada_primitive_type_system_address]) - = "system__address"; - - /* Create the equivalent of the System.Storage_Elements.Storage_Offset - type. This is a signed integral type whose size is the same as - the size of addresses. */ - { - unsigned int addr_length = TYPE_LENGTH - (lai->primitive_type_vector [ada_primitive_type_system_address]); - - lai->primitive_type_vector [ada_primitive_type_storage_offset] - = arch_integer_type (gdbarch, addr_length * HOST_CHAR_BIT, 0, - "storage_offset"); - } - - lai->bool_type_symbol = NULL; - lai->bool_type_default = builtin->builtin_bool; -} /* Language vector */ -/* Not really used, but needed in the ada_language_defn. */ - -static void -emit_char (int c, struct type *type, struct ui_file *stream, int quoter) -{ - ada_emit_char (c, type, stream, quoter, 1); -} - -static int -parse (struct parser_state *ps) -{ - warnings_issued = 0; - return ada_parse (ps); -} - static const struct exp_descriptor ada_exp_descriptor = { ada_print_subexp, ada_operator_length, @@ -13957,14 +13594,16 @@ ada_lookup_name_info::ada_lookup_name_info (const lookup_name_info &lookup_name) { - const std::string &user_name = lookup_name.name (); + gdb::string_view user_name = lookup_name.name (); if (user_name[0] == '<') { if (user_name.back () == '>') - m_encoded_name = user_name.substr (1, user_name.size () - 2); + m_encoded_name + = gdb::to_string (user_name.substr (1, user_name.size () - 2)); else - m_encoded_name = user_name.substr (1, user_name.size () - 1); + m_encoded_name + = gdb::to_string (user_name.substr (1, user_name.size () - 1)); m_encoded_p = true; m_verbatim_p = true; m_wild_match_p = false; @@ -13974,19 +13613,19 @@ { m_verbatim_p = false; - m_encoded_p = user_name.find ("__") != std::string::npos; + m_encoded_p = user_name.find ("__") != gdb::string_view::npos; if (!m_encoded_p) { - const char *folded = ada_fold_name (user_name.c_str ()); + const char *folded = ada_fold_name (user_name); const char *encoded = ada_encode_1 (folded, false); if (encoded != NULL) m_encoded_name = encoded; else - m_encoded_name = user_name; + m_encoded_name = gdb::to_string (user_name); } else - m_encoded_name = user_name; + m_encoded_name = gdb::to_string (user_name); /* Handle the 'package Standard' special case. See description of m_standard_p. */ @@ -14033,12 +13672,12 @@ const lookup_name_info &lookup_name, completion_match_result *comp_match_res) { - const std::string &name = lookup_name.name (); + gdb::string_view name_view = lookup_name.name (); - int cmp = (lookup_name.completion_mode () - ? strncmp (symbol_search_name, name.c_str (), name.size ()) - : strcmp (symbol_search_name, name.c_str ())); - if (cmp == 0) + if (lookup_name.completion_mode () + ? (strncmp (symbol_search_name, name_view.data (), + name_view.size ()) == 0) + : symbol_search_name == name_view) { if (comp_match_res != NULL) comp_match_res->set_match (symbol_search_name); @@ -14048,7 +13687,7 @@ return false; } -/* Implement the "la_get_symbol_name_matcher" language_defn method for +/* Implement the "get_symbol_name_matcher" language_defn method for Ada. */ static symbol_name_matcher_ftype * @@ -14070,32 +13709,15 @@ } } -/* Implement the "la_read_var_value" language_defn method for Ada. */ - -static struct value * -ada_read_var_value (struct symbol *var, const struct block *var_block, - struct frame_info *frame) -{ - /* The only case where default_read_var_value is not sufficient - is when VAR is a renaming... */ - if (frame != nullptr) - { - const struct block *frame_block = get_frame_block (frame, NULL); - if (frame_block != nullptr && ada_is_renaming_symbol (var)) - return ada_read_renaming_var_value (var, frame_block); - } - - /* This is a typical case where we expect the default_read_var_value - function to work. */ - return default_read_var_value (var, var_block, frame); -} - static const char *ada_extensions[] = { ".adb", ".ads", ".a", ".ada", ".dg", NULL }; -extern const struct language_defn ada_language_defn = { +/* Constant data that describes the Ada language. */ + +extern const struct language_data ada_language_data = +{ "ada", /* Language name */ "Ada", language_ada, @@ -14106,65 +13728,488 @@ macro_expansion_no, ada_extensions, &ada_exp_descriptor, - parse, - resolve, - ada_printchar, /* Print a character constant */ - ada_printstr, /* Function to print string constant */ - emit_char, /* Function to print single char (not used) */ - ada_print_type, /* Print a type using appropriate syntax */ - ada_print_typedef, /* Print a typedef using appropriate syntax */ - ada_val_print, /* Print a value using appropriate syntax */ - ada_value_print, /* Print a top-level value */ - ada_read_var_value, /* la_read_var_value */ - NULL, /* Language specific skip_trampoline */ NULL, /* name_of_this */ true, /* la_store_sym_names_in_linkage_form_p */ - ada_lookup_symbol_nonlocal, /* Looking up non-local symbols. */ - basic_lookup_transparent_type, /* lookup_transparent_type */ - ada_la_decode, /* Language specific symbol demangler */ - ada_sniff_from_mangled_name, - NULL, /* Language specific - class_name_from_physname */ ada_op_print_tab, /* expression operators for printing */ 0, /* c-style arrays */ 1, /* String lower bound */ - ada_get_gdb_completer_word_break_characters, - ada_collect_symbol_completion_matches, - ada_language_arch_info, - ada_print_array_index, - default_pass_by_reference, - ada_watch_location_expression, - ada_get_symbol_name_matcher, /* la_get_symbol_name_matcher */ - ada_iterate_over_symbols, - default_search_name_hash, &ada_varobj_ops, - NULL, - NULL, - ada_is_string_type, "(...)" /* la_struct_too_deep_ellipsis */ }; -/* Command-list for the "set/show ada" prefix command. */ -static struct cmd_list_element *set_ada_list; -static struct cmd_list_element *show_ada_list; - -/* Implement the "set ada" prefix command. */ +/* Class representing the Ada language. */ -static void -set_ada_command (const char *arg, int from_tty) +class ada_language : public language_defn { - printf_unfiltered (_(\ -"\"set ada\" must be followed by the name of a setting.\n")); - help_list (set_ada_list, "set ada ", all_commands, gdb_stdout); -} +public: + ada_language () + : language_defn (language_ada, ada_language_data) + { /* Nothing. */ } + + /* Print an array element index using the Ada syntax. */ + + void print_array_index (struct type *index_type, + LONGEST index, + struct ui_file *stream, + const value_print_options *options) const override + { + struct value *index_value = val_atr (index_type, index); -/* Implement the "show ada" prefix command. */ + LA_VALUE_PRINT (index_value, stream, options); + fprintf_filtered (stream, " => "); + } -static void -show_ada_command (const char *args, int from_tty) -{ - cmd_show_list (show_ada_list, from_tty, ""); -} + /* Implement the "read_var_value" language_defn method for Ada. */ + + struct value *read_var_value (struct symbol *var, + const struct block *var_block, + struct frame_info *frame) const override + { + /* The only case where default_read_var_value is not sufficient + is when VAR is a renaming... */ + if (frame != nullptr) + { + const struct block *frame_block = get_frame_block (frame, NULL); + if (frame_block != nullptr && ada_is_renaming_symbol (var)) + return ada_read_renaming_var_value (var, frame_block); + } + + /* This is a typical case where we expect the default_read_var_value + function to work. */ + return language_defn::read_var_value (var, var_block, frame); + } + + /* See language.h. */ + void language_arch_info (struct gdbarch *gdbarch, + struct language_arch_info *lai) const override + { + const struct builtin_type *builtin = builtin_type (gdbarch); + + lai->primitive_type_vector + = GDBARCH_OBSTACK_CALLOC (gdbarch, nr_ada_primitive_types + 1, + struct type *); + + lai->primitive_type_vector [ada_primitive_type_int] + = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch), + 0, "integer"); + lai->primitive_type_vector [ada_primitive_type_long] + = arch_integer_type (gdbarch, gdbarch_long_bit (gdbarch), + 0, "long_integer"); + lai->primitive_type_vector [ada_primitive_type_short] + = arch_integer_type (gdbarch, gdbarch_short_bit (gdbarch), + 0, "short_integer"); + lai->string_char_type + = lai->primitive_type_vector [ada_primitive_type_char] + = arch_character_type (gdbarch, TARGET_CHAR_BIT, 0, "character"); + lai->primitive_type_vector [ada_primitive_type_float] + = arch_float_type (gdbarch, gdbarch_float_bit (gdbarch), + "float", gdbarch_float_format (gdbarch)); + lai->primitive_type_vector [ada_primitive_type_double] + = arch_float_type (gdbarch, gdbarch_double_bit (gdbarch), + "long_float", gdbarch_double_format (gdbarch)); + lai->primitive_type_vector [ada_primitive_type_long_long] + = arch_integer_type (gdbarch, gdbarch_long_long_bit (gdbarch), + 0, "long_long_integer"); + lai->primitive_type_vector [ada_primitive_type_long_double] + = arch_float_type (gdbarch, gdbarch_long_double_bit (gdbarch), + "long_long_float", gdbarch_long_double_format (gdbarch)); + lai->primitive_type_vector [ada_primitive_type_natural] + = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch), + 0, "natural"); + lai->primitive_type_vector [ada_primitive_type_positive] + = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch), + 0, "positive"); + lai->primitive_type_vector [ada_primitive_type_void] + = builtin->builtin_void; + + lai->primitive_type_vector [ada_primitive_type_system_address] + = lookup_pointer_type (arch_type (gdbarch, TYPE_CODE_VOID, TARGET_CHAR_BIT, + "void")); + lai->primitive_type_vector [ada_primitive_type_system_address] + ->set_name ("system__address"); + + /* Create the equivalent of the System.Storage_Elements.Storage_Offset + type. This is a signed integral type whose size is the same as + the size of addresses. */ + { + unsigned int addr_length = TYPE_LENGTH + (lai->primitive_type_vector [ada_primitive_type_system_address]); + + lai->primitive_type_vector [ada_primitive_type_storage_offset] + = arch_integer_type (gdbarch, addr_length * HOST_CHAR_BIT, 0, + "storage_offset"); + } + + lai->bool_type_symbol = NULL; + lai->bool_type_default = builtin->builtin_bool; + } + + /* See language.h. */ + + bool iterate_over_symbols + (const struct block *block, const lookup_name_info &name, + domain_enum domain, + gdb::function_view callback) const override + { + std::vector results; + + ada_lookup_symbol_list_worker (name, block, domain, &results, 0); + for (block_symbol &sym : results) + { + if (!callback (&sym)) + return false; + } + + return true; + } + + /* See language.h. */ + bool sniff_from_mangled_name (const char *mangled, + char **out) const override + { + std::string demangled = ada_decode (mangled); + + *out = NULL; + + if (demangled != mangled && demangled[0] != '<') + { + /* Set the gsymbol language to Ada, but still return 0. + Two reasons for that: + + 1. For Ada, we prefer computing the symbol's decoded name + on the fly rather than pre-compute it, in order to save + memory (Ada projects are typically very large). + + 2. There are some areas in the definition of the GNAT + encoding where, with a bit of bad luck, we might be able + to decode a non-Ada symbol, generating an incorrect + demangled name (Eg: names ending with "TB" for instance + are identified as task bodies and so stripped from + the decoded name returned). + + Returning true, here, but not setting *DEMANGLED, helps us get + a little bit of the best of both worlds. Because we're last, + we should not affect any of the other languages that were + able to demangle the symbol before us; we get to correctly + tag Ada symbols as such; and even if we incorrectly tagged a + non-Ada symbol, which should be rare, any routing through the + Ada language should be transparent (Ada tries to behave much + like C/C++ with non-Ada symbols). */ + return true; + } + + return false; + } + + /* See language.h. */ + + char *demangle (const char *mangled, int options) const override + { + return ada_la_decode (mangled, options); + } + + /* See language.h. */ + + void print_type (struct type *type, const char *varstring, + struct ui_file *stream, int show, int level, + const struct type_print_options *flags) const override + { + ada_print_type (type, varstring, stream, show, level, flags); + } + + /* See language.h. */ + + const char *word_break_characters (void) const override + { + return ada_completer_word_break_characters; + } + + /* See language.h. */ + + void collect_symbol_completion_matches (completion_tracker &tracker, + complete_symbol_mode mode, + symbol_name_match_type name_match_type, + const char *text, const char *word, + enum type_code code) const override + { + struct symbol *sym; + const struct block *b, *surrounding_static_block = 0; + struct block_iterator iter; + + gdb_assert (code == TYPE_CODE_UNDEF); + + lookup_name_info lookup_name (text, name_match_type, true); + + /* First, look at the partial symtab symbols. */ + expand_symtabs_matching (NULL, + lookup_name, + NULL, + NULL, + ALL_DOMAIN); + + /* At this point scan through the misc symbol vectors and add each + symbol you find to the list. Eventually we want to ignore + anything that isn't a text symbol (everything else will be + handled by the psymtab code above). */ + + for (objfile *objfile : current_program_space->objfiles ()) + { + for (minimal_symbol *msymbol : objfile->msymbols ()) + { + QUIT; + + if (completion_skip_symbol (mode, msymbol)) + continue; + + language symbol_language = msymbol->language (); + + /* Ada minimal symbols won't have their language set to Ada. If + we let completion_list_add_name compare using the + default/C-like matcher, then when completing e.g., symbols in a + package named "pck", we'd match internal Ada symbols like + "pckS", which are invalid in an Ada expression, unless you wrap + them in '<' '>' to request a verbatim match. + + Unfortunately, some Ada encoded names successfully demangle as + C++ symbols (using an old mangling scheme), such as "name__2Xn" + -> "Xn::name(void)" and thus some Ada minimal symbols end up + with the wrong language set. Paper over that issue here. */ + if (symbol_language == language_auto + || symbol_language == language_cplus) + symbol_language = language_ada; + + completion_list_add_name (tracker, + symbol_language, + msymbol->linkage_name (), + lookup_name, text, word); + } + } + + /* Search upwards from currently selected frame (so that we can + complete on local vars. */ + + for (b = get_selected_block (0); b != NULL; b = BLOCK_SUPERBLOCK (b)) + { + if (!BLOCK_SUPERBLOCK (b)) + surrounding_static_block = b; /* For elmin of dups */ + + ALL_BLOCK_SYMBOLS (b, iter, sym) + { + if (completion_skip_symbol (mode, sym)) + continue; + + completion_list_add_name (tracker, + sym->language (), + sym->linkage_name (), + lookup_name, text, word); + } + } + + /* Go through the symtabs and check the externs and statics for + symbols which match. */ + + for (objfile *objfile : current_program_space->objfiles ()) + { + for (compunit_symtab *s : objfile->compunits ()) + { + QUIT; + b = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (s), GLOBAL_BLOCK); + ALL_BLOCK_SYMBOLS (b, iter, sym) + { + if (completion_skip_symbol (mode, sym)) + continue; + + completion_list_add_name (tracker, + sym->language (), + sym->linkage_name (), + lookup_name, text, word); + } + } + } + + for (objfile *objfile : current_program_space->objfiles ()) + { + for (compunit_symtab *s : objfile->compunits ()) + { + QUIT; + b = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (s), STATIC_BLOCK); + /* Don't do this block twice. */ + if (b == surrounding_static_block) + continue; + ALL_BLOCK_SYMBOLS (b, iter, sym) + { + if (completion_skip_symbol (mode, sym)) + continue; + + completion_list_add_name (tracker, + sym->language (), + sym->linkage_name (), + lookup_name, text, word); + } + } + } + } + + /* See language.h. */ + + gdb::unique_xmalloc_ptr watch_location_expression + (struct type *type, CORE_ADDR addr) const override + { + type = check_typedef (TYPE_TARGET_TYPE (check_typedef (type))); + std::string name = type_to_string (type); + return gdb::unique_xmalloc_ptr + (xstrprintf ("{%s} %s", name.c_str (), core_addr_to_string (addr))); + } + + /* See language.h. */ + + void value_print (struct value *val, struct ui_file *stream, + const struct value_print_options *options) const override + { + return ada_value_print (val, stream, options); + } + + /* See language.h. */ + + void value_print_inner + (struct value *val, struct ui_file *stream, int recurse, + const struct value_print_options *options) const override + { + return ada_value_print_inner (val, stream, recurse, options); + } + + /* See language.h. */ + + struct block_symbol lookup_symbol_nonlocal + (const char *name, const struct block *block, + const domain_enum domain) const override + { + struct block_symbol sym; + + sym = ada_lookup_symbol (name, block_static_block (block), domain); + if (sym.symbol != NULL) + return sym; + + /* If we haven't found a match at this point, try the primitive + types. In other languages, this search is performed before + searching for global symbols in order to short-circuit that + global-symbol search if it happens that the name corresponds + to a primitive type. But we cannot do the same in Ada, because + it is perfectly legitimate for a program to declare a type which + has the same name as a standard type. If looking up a type in + that situation, we have traditionally ignored the primitive type + in favor of user-defined types. This is why, unlike most other + languages, we search the primitive types this late and only after + having searched the global symbols without success. */ + + if (domain == VAR_DOMAIN) + { + struct gdbarch *gdbarch; + + if (block == NULL) + gdbarch = target_gdbarch (); + else + gdbarch = block_gdbarch (block); + sym.symbol + = language_lookup_primitive_type_as_symbol (this, gdbarch, name); + if (sym.symbol != NULL) + return sym; + } + + return {}; + } + + /* See language.h. */ + + int parser (struct parser_state *ps) const override + { + warnings_issued = 0; + return ada_parse (ps); + } + + /* See language.h. + + Same as evaluate_type (*EXP), but resolves ambiguous symbol references + (marked by OP_VAR_VALUE nodes in which the symbol has an undefined + namespace) and converts operators that are user-defined into + appropriate function calls. If CONTEXT_TYPE is non-null, it provides + a preferred result type [at the moment, only type void has any + effect---causing procedures to be preferred over functions in calls]. + A null CONTEXT_TYPE indicates that a non-void return type is + preferred. May change (expand) *EXP. */ + + void post_parser (expression_up *expp, int void_context_p, int completing, + innermost_block_tracker *tracker) const override + { + struct type *context_type = NULL; + int pc = 0; + + if (void_context_p) + context_type = builtin_type ((*expp)->gdbarch)->builtin_void; + + resolve_subexp (expp, &pc, 1, context_type, completing, tracker); + } + + /* See language.h. */ + + void emitchar (int ch, struct type *chtype, + struct ui_file *stream, int quoter) const override + { + ada_emit_char (ch, chtype, stream, quoter, 1); + } + + /* See language.h. */ + + void printchar (int ch, struct type *chtype, + struct ui_file *stream) const override + { + ada_printchar (ch, chtype, stream); + } + + /* See language.h. */ + + void printstr (struct ui_file *stream, struct type *elttype, + const gdb_byte *string, unsigned int length, + const char *encoding, int force_ellipses, + const struct value_print_options *options) const override + { + ada_printstr (stream, elttype, string, length, encoding, + force_ellipses, options); + } + + /* See language.h. */ + + void print_typedef (struct type *type, struct symbol *new_symbol, + struct ui_file *stream) const override + { + ada_print_typedef (type, new_symbol, stream); + } + + /* See language.h. */ + + bool is_string_type_p (struct type *type) const override + { + return ada_is_string_type (type); + } + + +protected: + /* See language.h. */ + + symbol_name_matcher_ftype *get_symbol_name_matcher_inner + (const lookup_name_info &lookup_name) const override + { + return ada_get_symbol_name_matcher (lookup_name); + } +}; + +/* Single instance of the Ada language class. */ + +static ada_language ada_language_defn; + +/* Command-list for the "set/show ada" prefix command. */ +static struct cmd_list_element *set_ada_list; +static struct cmd_list_element *show_ada_list; static void initialize_ada_catchpoint_ops (void) @@ -14230,18 +14275,19 @@ ada_clear_symbol_cache (); } +void _initialize_ada_language (); void -_initialize_ada_language (void) +_initialize_ada_language () { initialize_ada_catchpoint_ops (); - add_prefix_cmd ("ada", no_class, set_ada_command, - _("Prefix command for changing Ada-specific settings."), - &set_ada_list, "set ada ", 0, &setlist); - - add_prefix_cmd ("ada", no_class, show_ada_command, - _("Generic command for showing Ada-specific settings."), - &show_ada_list, "show ada ", 0, &showlist); + add_basic_prefix_cmd ("ada", no_class, + _("Prefix command for changing Ada-specific settings."), + &set_ada_list, "set ada ", 0, &setlist); + + add_show_prefix_cmd ("ada", no_class, + _("Generic command for showing Ada-specific settings."), + &show_ada_list, "show ada ", 0, &showlist); add_setshow_boolean_cmd ("trust-PAD-over-XVS", class_obscure, &trust_pad_over_xvs, _("\ @@ -14318,15 +14364,15 @@ If a regular expression is passed as an argument, only those matching\n\ the regular expression are listed.")); - add_prefix_cmd ("ada", class_maintenance, maint_set_ada_cmd, - _("Set Ada maintenance-related variables."), - &maint_set_ada_cmdlist, "maintenance set ada ", - 0/*allow-unknown*/, &maintenance_set_cmdlist); - - add_prefix_cmd ("ada", class_maintenance, maint_show_ada_cmd, - _("Show Ada maintenance-related variables."), - &maint_show_ada_cmdlist, "maintenance show ada ", - 0/*allow-unknown*/, &maintenance_show_cmdlist); + add_basic_prefix_cmd ("ada", class_maintenance, + _("Set Ada maintenance-related variables."), + &maint_set_ada_cmdlist, "maintenance set ada ", + 0/*allow-unknown*/, &maintenance_set_cmdlist); + + add_show_prefix_cmd ("ada", class_maintenance, + _("Show Ada maintenance-related variables."), + &maint_show_ada_cmdlist, "maintenance show ada ", + 0/*allow-unknown*/, &maintenance_show_cmdlist); add_setshow_boolean_cmd ("ignore-descriptive-types", class_maintenance, diff -Nru gdb-9.1/gdb/ada-lang.h gdb-10.2/gdb/ada-lang.h --- gdb-9.1/gdb/ada-lang.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/ada-lang.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Ada language support definitions for GDB, the GNU debugger. - Copyright (C) 1992-2020 Free Software Foundation, Inc. + Copyright (C) 1992-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -164,10 +164,10 @@ extern void ada_print_typedef (struct type *type, struct symbol *new_symbol, struct ui_file *stream); -extern void ada_val_print (struct type *, int, CORE_ADDR, - struct ui_file *, int, - struct value *, - const struct value_print_options *); +/* Implement la_value_print_inner for Ada. */ + +extern void ada_value_print_inner (struct value *, struct ui_file *, int, + const struct value_print_options *); extern void ada_value_print (struct value *, struct ui_file *, const struct value_print_options *); @@ -234,6 +234,11 @@ extern int ada_scan_number (const char *, int, LONGEST *, int *); +extern struct value *ada_value_primitive_field (struct value *arg1, + int offset, + int fieldno, + struct type *arg_type); + extern struct type *ada_parent_type (struct type *); extern int ada_is_ignored_field (struct type *, int); @@ -255,7 +260,7 @@ extern int ada_is_tag_type (struct type *); -extern const char *ada_tag_name (struct value *); +extern gdb::unique_xmalloc_ptr ada_tag_name (struct value *); extern struct value *ada_tag_value_at_base_address (struct value *obj); @@ -276,16 +281,15 @@ extern const gdb_byte *ada_aligned_value_addr (struct type *, const gdb_byte *); -extern int ada_is_fixed_point_type (struct type *); +extern int ada_is_gnat_encoded_fixed_point_type (struct type *); extern int ada_is_system_address_type (struct type *); -extern struct value *ada_delta (struct type *); +extern struct value *gnat_encoded_fixed_point_delta (struct type *); extern struct value *ada_scaling_factor (struct type *); -extern int ada_which_variant_applies (struct type *, struct type *, - const gdb_byte *); +extern int ada_which_variant_applies (struct type *, struct value *); extern struct type *ada_to_fixed_type (struct type *, const gdb_byte *, CORE_ADDR, struct value *, @@ -371,9 +375,10 @@ extern int ada_get_task_number (thread_info *thread); -typedef void (ada_task_list_iterator_ftype) (struct ada_task_info *task); +typedef gdb::function_view + ada_task_list_iterator_ftype; extern void iterate_over_live_ada_tasks - (ada_task_list_iterator_ftype *iterator); + (ada_task_list_iterator_ftype iterator); extern const char *ada_get_tcb_types_info (void); diff -Nru gdb-9.1/gdb/ada-lex.c gdb-10.2/gdb/ada-lex.c --- gdb-9.1/gdb/ada-lex.c 2020-02-08 12:54:10.000000000 +0000 +++ gdb-10.2/gdb/ada-lex.c 2021-04-25 04:10:36.000000000 +0000 @@ -805,7 +805,7 @@ char *yytext; #line 1 "ada-lex.l" /* FLEX lexer for Ada expressions, for GDB. - Copyright (C) 1994-2020 Free Software Foundation, Inc. + Copyright (C) 1994-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -833,7 +833,9 @@ /* Some old versions of flex generate code that uses the "register" keyword, which clang warns about. This was observed for example with flex 2.5.35, - as shipped with macOS 10.12. */ + as shipped with macOS 10.12. The same happens with flex 2.5.37 and g++ 11 + which defaults to ISO C++17, that does not allow register storage class + specifiers. */ DIAGNOSTIC_PUSH DIAGNOSTIC_IGNORE_DEPRECATED_REGISTER @@ -875,10 +877,10 @@ /* Depth of parentheses. */ static int paren_depth; -#line 879 "" - #line 881 "" +#line 883 "" + #define INITIAL 0 #define BEFORE_QUAL_QUOTE 1 @@ -1095,10 +1097,10 @@ } { -#line 96 "ada-lex.l" +#line 98 "ada-lex.l" -#line 1102 "" +#line 1104 "" while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { @@ -1158,17 +1160,17 @@ case 1: /* rule 1 can match eol */ YY_RULE_SETUP -#line 98 "ada-lex.l" +#line 100 "ada-lex.l" { } YY_BREAK case 2: YY_RULE_SETUP -#line 100 "ada-lex.l" +#line 102 "ada-lex.l" { yyterminate(); } YY_BREAK case 3: YY_RULE_SETUP -#line 102 "ada-lex.l" +#line 104 "ada-lex.l" { canonicalizeNumeral (numbuf, yytext); return processInt (pstate, NULL, numbuf, @@ -1177,7 +1179,7 @@ YY_BREAK case 4: YY_RULE_SETUP -#line 108 "ada-lex.l" +#line 110 "ada-lex.l" { canonicalizeNumeral (numbuf, yytext); return processInt (pstate, NULL, numbuf, NULL); @@ -1185,7 +1187,7 @@ YY_BREAK case 5: YY_RULE_SETUP -#line 113 "ada-lex.l" +#line 115 "ada-lex.l" { canonicalizeNumeral (numbuf, yytext); return processInt (pstate, numbuf, @@ -1195,7 +1197,7 @@ YY_BREAK case 6: YY_RULE_SETUP -#line 120 "ada-lex.l" +#line 122 "ada-lex.l" { canonicalizeNumeral (numbuf, yytext); return processInt (pstate, numbuf, strchr (numbuf, '#') + 1, @@ -1204,7 +1206,7 @@ YY_BREAK case 7: YY_RULE_SETUP -#line 126 "ada-lex.l" +#line 128 "ada-lex.l" { canonicalizeNumeral (numbuf, yytext+2); return processInt (pstate, "16#", numbuf, NULL); @@ -1212,7 +1214,7 @@ YY_BREAK case 8: YY_RULE_SETUP -#line 132 "ada-lex.l" +#line 134 "ada-lex.l" { canonicalizeNumeral (numbuf, yytext); return processReal (pstate, numbuf); @@ -1220,7 +1222,7 @@ YY_BREAK case 9: YY_RULE_SETUP -#line 137 "ada-lex.l" +#line 139 "ada-lex.l" { canonicalizeNumeral (numbuf, yytext); return processReal (pstate, numbuf); @@ -1228,21 +1230,21 @@ YY_BREAK case 10: YY_RULE_SETUP -#line 142 "ada-lex.l" +#line 144 "ada-lex.l" { error (_("Based real literals not implemented yet.")); } YY_BREAK case 11: YY_RULE_SETUP -#line 146 "ada-lex.l" +#line 148 "ada-lex.l" { error (_("Based real literals not implemented yet.")); } YY_BREAK case 12: YY_RULE_SETUP -#line 150 "ada-lex.l" +#line 152 "ada-lex.l" { yylval.typed_val.type = type_char (pstate); yylval.typed_val.val = yytext[1]; @@ -1251,7 +1253,7 @@ YY_BREAK case 13: YY_RULE_SETUP -#line 156 "ada-lex.l" +#line 158 "ada-lex.l" { int v; yylval.typed_val.type = type_char (pstate); @@ -1262,7 +1264,7 @@ YY_BREAK case 14: YY_RULE_SETUP -#line 164 "ada-lex.l" +#line 166 "ada-lex.l" { yylval.sval = processString (yytext+1, yyleng-2); return STRING; @@ -1270,14 +1272,14 @@ YY_BREAK case 15: YY_RULE_SETUP -#line 169 "ada-lex.l" +#line 171 "ada-lex.l" { error (_("ill-formed or non-terminated string literal")); } YY_BREAK case 16: YY_RULE_SETUP -#line 174 "ada-lex.l" +#line 176 "ada-lex.l" { rewind_to_char ('i'); return 0; @@ -1285,7 +1287,7 @@ YY_BREAK case 17: YY_RULE_SETUP -#line 179 "ada-lex.l" +#line 181 "ada-lex.l" { rewind_to_char ('t'); return 0; @@ -1294,7 +1296,7 @@ case 18: /* rule 18 can match eol */ YY_RULE_SETUP -#line 184 "ada-lex.l" +#line 186 "ada-lex.l" { /* This keyword signals the end of the expression and will be processed separately. */ @@ -1305,67 +1307,67 @@ /* ADA KEYWORDS */ case 19: YY_RULE_SETUP -#line 193 "ada-lex.l" +#line 195 "ada-lex.l" { return ABS; } YY_BREAK case 20: YY_RULE_SETUP -#line 194 "ada-lex.l" +#line 196 "ada-lex.l" { return _AND_; } YY_BREAK case 21: YY_RULE_SETUP -#line 195 "ada-lex.l" +#line 197 "ada-lex.l" { return ELSE; } YY_BREAK case 22: YY_RULE_SETUP -#line 196 "ada-lex.l" +#line 198 "ada-lex.l" { return IN; } YY_BREAK case 23: YY_RULE_SETUP -#line 197 "ada-lex.l" +#line 199 "ada-lex.l" { return MOD; } YY_BREAK case 24: YY_RULE_SETUP -#line 198 "ada-lex.l" +#line 200 "ada-lex.l" { return NEW; } YY_BREAK case 25: YY_RULE_SETUP -#line 199 "ada-lex.l" +#line 201 "ada-lex.l" { return NOT; } YY_BREAK case 26: YY_RULE_SETUP -#line 200 "ada-lex.l" +#line 202 "ada-lex.l" { return NULL_PTR; } YY_BREAK case 27: YY_RULE_SETUP -#line 201 "ada-lex.l" +#line 203 "ada-lex.l" { return OR; } YY_BREAK case 28: YY_RULE_SETUP -#line 202 "ada-lex.l" +#line 204 "ada-lex.l" { return OTHERS; } YY_BREAK case 29: YY_RULE_SETUP -#line 203 "ada-lex.l" +#line 205 "ada-lex.l" { return REM; } YY_BREAK case 30: YY_RULE_SETUP -#line 204 "ada-lex.l" +#line 206 "ada-lex.l" { return THEN; } YY_BREAK case 31: YY_RULE_SETUP -#line 205 "ada-lex.l" +#line 207 "ada-lex.l" { return XOR; } YY_BREAK /* BOOLEAN "KEYWORDS" */ @@ -1375,70 +1377,70 @@ making them keywords (when bare). */ case 32: YY_RULE_SETUP -#line 214 "ada-lex.l" +#line 216 "ada-lex.l" { return TRUEKEYWORD; } YY_BREAK case 33: YY_RULE_SETUP -#line 215 "ada-lex.l" +#line 217 "ada-lex.l" { return FALSEKEYWORD; } YY_BREAK /* ATTRIBUTES */ case 34: /* rule 34 can match eol */ YY_RULE_SETUP -#line 219 "ada-lex.l" +#line 221 "ada-lex.l" { BEGIN INITIAL; return processAttribute (yytext+1); } YY_BREAK /* PUNCTUATION */ case 35: YY_RULE_SETUP -#line 223 "ada-lex.l" +#line 225 "ada-lex.l" { return ARROW; } YY_BREAK case 36: YY_RULE_SETUP -#line 224 "ada-lex.l" +#line 226 "ada-lex.l" { return DOTDOT; } YY_BREAK case 37: YY_RULE_SETUP -#line 225 "ada-lex.l" +#line 227 "ada-lex.l" { return STARSTAR; } YY_BREAK case 38: YY_RULE_SETUP -#line 226 "ada-lex.l" +#line 228 "ada-lex.l" { return ASSIGN; } YY_BREAK case 39: YY_RULE_SETUP -#line 227 "ada-lex.l" +#line 229 "ada-lex.l" { return NOTEQUAL; } YY_BREAK case 40: YY_RULE_SETUP -#line 228 "ada-lex.l" +#line 230 "ada-lex.l" { return LEQ; } YY_BREAK case 41: YY_RULE_SETUP -#line 229 "ada-lex.l" +#line 231 "ada-lex.l" { return GEQ; } YY_BREAK case 42: YY_RULE_SETUP -#line 231 "ada-lex.l" +#line 233 "ada-lex.l" { BEGIN INITIAL; return '\''; } YY_BREAK case 43: YY_RULE_SETUP -#line 233 "ada-lex.l" +#line 235 "ada-lex.l" { return yytext[0]; } YY_BREAK case 44: YY_RULE_SETUP -#line 235 "ada-lex.l" +#line 237 "ada-lex.l" { if (paren_depth == 0 && pstate->comma_terminates) { rewind_to_char (','); @@ -1450,12 +1452,12 @@ YY_BREAK case 45: YY_RULE_SETUP -#line 244 "ada-lex.l" +#line 246 "ada-lex.l" { paren_depth += 1; return '('; } YY_BREAK case 46: YY_RULE_SETUP -#line 245 "ada-lex.l" +#line 247 "ada-lex.l" { if (paren_depth == 0) { rewind_to_char (')'); @@ -1471,13 +1473,13 @@ case 47: /* rule 47 can match eol */ YY_RULE_SETUP -#line 257 "ada-lex.l" +#line 259 "ada-lex.l" { return DOT_ALL; } YY_BREAK case 48: /* rule 48 can match eol */ YY_RULE_SETUP -#line 259 "ada-lex.l" +#line 261 "ada-lex.l" { yylval.sval = processId (yytext+1, yyleng-1); return DOT_ID; @@ -1486,7 +1488,7 @@ case 49: /* rule 49 can match eol */ YY_RULE_SETUP -#line 264 "ada-lex.l" +#line 266 "ada-lex.l" { int all_posn = find_dot_all (yytext); @@ -1505,7 +1507,7 @@ case 50: /* rule 50 can match eol */ YY_RULE_SETUP -#line 281 "ada-lex.l" +#line 283 "ada-lex.l" { yyless (yyleng - 2); yylval.sval = processId (yytext, yyleng); @@ -1514,18 +1516,18 @@ YY_BREAK case 51: YY_RULE_SETUP -#line 287 "ada-lex.l" +#line 289 "ada-lex.l" { return COLONCOLON; } YY_BREAK case 52: YY_RULE_SETUP -#line 289 "ada-lex.l" +#line 291 "ada-lex.l" { return yytext[0]; } YY_BREAK /* REGISTERS AND GDB CONVENIENCE VARIABLES */ case 53: YY_RULE_SETUP -#line 293 "ada-lex.l" +#line 295 "ada-lex.l" { yylval.sval.ptr = yytext; yylval.sval.length = yyleng; @@ -1535,15 +1537,15 @@ /* CATCH-ALL ERROR CASE */ case 54: YY_RULE_SETUP -#line 301 "ada-lex.l" +#line 303 "ada-lex.l" { error (_("Invalid character '%s' in expression."), yytext); } YY_BREAK case 55: YY_RULE_SETUP -#line 302 "ada-lex.l" +#line 304 "ada-lex.l" YY_FATAL_ERROR( "flex scanner jammed" ); YY_BREAK -#line 1547 "" +#line 1549 "" case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(BEFORE_QUAL_QUOTE): yyterminate(); @@ -2549,7 +2551,7 @@ #define YYTABLES_NAME "yytables" -#line 302 "ada-lex.l" +#line 304 "ada-lex.l" #include diff -Nru gdb-9.1/gdb/ada-lex.l gdb-10.2/gdb/ada-lex.l --- gdb-9.1/gdb/ada-lex.l 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/ada-lex.l 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* FLEX lexer for Ada expressions, for GDB. - Copyright (C) 1994-2020 Free Software Foundation, Inc. + Copyright (C) 1994-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -45,7 +45,9 @@ /* Some old versions of flex generate code that uses the "register" keyword, which clang warns about. This was observed for example with flex 2.5.35, - as shipped with macOS 10.12. */ + as shipped with macOS 10.12. The same happens with flex 2.5.37 and g++ 11 + which defaults to ISO C++17, that does not allow register storage class + specifiers. */ DIAGNOSTIC_PUSH DIAGNOSTIC_IGNORE_DEPRECATED_REGISTER diff -Nru gdb-9.1/gdb/ada-operator.def gdb-10.2/gdb/ada-operator.def --- gdb-9.1/gdb/ada-operator.def 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/ada-operator.def 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Ada language operator definitions for GDB, the GNU debugger. - Copyright (C) 1992-2020 Free Software Foundation, Inc. + Copyright (C) 1992-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/ada-tasks.c gdb-10.2/gdb/ada-tasks.c --- gdb-9.1/gdb/ada-tasks.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/ada-tasks.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 1992-2020 Free Software Foundation, Inc. +/* Copyright (C) 1992-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -376,7 +376,7 @@ terminated yet. */ void -iterate_over_live_ada_tasks (ada_task_list_iterator_ftype *iterator) +iterate_over_live_ada_tasks (ada_task_list_iterator_ftype iterator) { struct ada_tasks_inferior_data *data; @@ -430,10 +430,10 @@ array_fieldno = ada_get_field_index (type, "P_ARRAY", 0); bounds_fieldno = ada_get_field_index (type, "P_BOUNDS", 0); - bounds_type = TYPE_FIELD_TYPE (type, bounds_fieldno); - if (TYPE_CODE (bounds_type) == TYPE_CODE_PTR) + bounds_type = type->field (bounds_fieldno).type (); + if (bounds_type->code () == TYPE_CODE_PTR) bounds_type = TYPE_TARGET_TYPE (bounds_type); - if (TYPE_CODE (bounds_type) != TYPE_CODE_STRUCT) + if (bounds_type->code () != TYPE_CODE_STRUCT) error (_("Unknown task name format. Aborting")); upper_bound_fieldno = ada_get_field_index (bounds_type, "UB0", 0); @@ -679,7 +679,8 @@ task_name = p + 2; /* Copy the task name. */ - strncpy (task_info->name, task_name, sizeof (task_info->name)); + strncpy (task_info->name, task_name, + sizeof (task_info->name) - 1); task_info->name[sizeof (task_info->name) - 1] = 0; } else @@ -889,18 +890,19 @@ struct type *eltype = NULL; struct type *idxtype = NULL; - if (TYPE_CODE (type) == TYPE_CODE_ARRAY) + if (type->code () == TYPE_CODE_ARRAY) eltype = check_typedef (TYPE_TARGET_TYPE (type)); if (eltype != NULL - && TYPE_CODE (eltype) == TYPE_CODE_PTR) - idxtype = check_typedef (TYPE_INDEX_TYPE (type)); + && eltype->code () == TYPE_CODE_PTR) + idxtype = check_typedef (type->index_type ()); if (idxtype != NULL - && !TYPE_LOW_BOUND_UNDEFINED (idxtype) - && !TYPE_HIGH_BOUND_UNDEFINED (idxtype)) + && idxtype->bounds ()->low.kind () != PROP_UNDEFINED + && idxtype->bounds ()->high.kind () != PROP_UNDEFINED) { data->known_tasks_element = eltype; data->known_tasks_length = - TYPE_HIGH_BOUND (idxtype) - TYPE_LOW_BOUND (idxtype) + 1; + (idxtype->bounds ()->high.const_val () + - idxtype->bounds ()->low.const_val () + 1); return; } } @@ -932,7 +934,7 @@ /* Validate. */ struct type *type = check_typedef (SYMBOL_TYPE (sym)); - if (TYPE_CODE (type) == TYPE_CODE_PTR) + if (type->code () == TYPE_CODE_PTR) { data->known_tasks_element = type; return; @@ -1128,7 +1130,7 @@ if (uiout->is_mi_like_p ()) { thread_info *thread = (ada_task_is_alive (task_info) - ? find_thread_ptid (task_info->ptid) + ? find_thread_ptid (inf, task_info->ptid) : nullptr); if (thread != NULL) @@ -1343,7 +1345,7 @@ computed if target_get_ada_task_ptid has not been implemented for our target (yet). Rather than cause an assertion error in that case, it's nicer for the user to just refuse to perform the task switch. */ - thread_info *tp = find_thread_ptid (task_info->ptid); + thread_info *tp = find_thread_ptid (inf, task_info->ptid); if (tp == NULL) error (_("Unable to compute thread ID for task %s.\n" "Cannot switch to this task."), @@ -1432,9 +1434,7 @@ { /* All objfiles are being cleared, so we should clear all our caches for all program spaces. */ - struct program_space *pspace; - - for (pspace = program_spaces; pspace != NULL; pspace = pspace->next) + for (struct program_space *pspace : program_spaces) ada_tasks_invalidate_pspace_data (pspace); } else @@ -1455,8 +1455,9 @@ ada_tasks_invalidate_inferior_data (inf); } +void _initialize_tasks (); void -_initialize_tasks (void) +_initialize_tasks () { /* Attach various observers. */ gdb::observers::normal_stop.attach (ada_tasks_normal_stop_observer); diff -Nru gdb-9.1/gdb/ada-typeprint.c gdb-10.2/gdb/ada-typeprint.c --- gdb-9.1/gdb/ada-typeprint.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/ada-typeprint.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Support for printing Ada types for GDB, the GNU debugger. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -101,7 +101,7 @@ { struct type *subtype; - if (TYPE_CODE (type) != TYPE_CODE_RANGE) + if (type->code () != TYPE_CODE_RANGE) return 0; subtype = TYPE_TARGET_TYPE (type); @@ -146,7 +146,7 @@ type = TYPE_TARGET_TYPE (type); } - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_RANGE: case TYPE_CODE_ENUM: @@ -180,8 +180,8 @@ break; default: fprintf_filtered (stream, "%.*s", - ada_name_prefix_len (TYPE_NAME (type)), - TYPE_NAME (type)); + ada_name_prefix_len (type->name ()), + type->name ()); break; } } @@ -208,7 +208,7 @@ to indicate default output when we detect that the bound is negative, and the type is a TYPE_CODE_INT. The bound is negative when 'm' is the last character of the number scanned in BOUNDS. */ - if (bounds[*n - 1] == 'm' && TYPE_CODE (type) == TYPE_CODE_INT) + if (bounds[*n - 1] == 'm' && type->code () == TYPE_CODE_INT) type = NULL; ada_print_scalar (type, B, stream); if (bounds[*n] == '_') @@ -267,10 +267,10 @@ const char *subtype_info; gdb_assert (raw_type != NULL); - name = TYPE_NAME (raw_type); + name = raw_type->name (); gdb_assert (name != NULL); - if (TYPE_CODE (raw_type) == TYPE_CODE_RANGE) + if (raw_type->code () == TYPE_CODE_RANGE) base_type = TYPE_TARGET_TYPE (raw_type); else base_type = raw_type; @@ -312,7 +312,7 @@ static void print_enum_type (struct type *type, struct ui_file *stream) { - int len = TYPE_NFIELDS (type); + int len = type->num_fields (); int i; LONGEST lastval; @@ -326,7 +326,8 @@ if (i) fprintf_filtered (stream, ", "); wrap_here (" "); - fputs_filtered (ada_enum_name (TYPE_FIELD_NAME (type, i)), stream); + fputs_styled (ada_enum_name (TYPE_FIELD_NAME (type, i)), + variable_name_style.style (), stream); if (lastval != TYPE_FIELD_ENUMVAL (type, i)) { fprintf_filtered (stream, " => %s", @@ -341,9 +342,9 @@ /* Print representation of Ada fixed-point type TYPE on STREAM. */ static void -print_fixed_point_type (struct type *type, struct ui_file *stream) +print_gnat_encoded_fixed_point_type (struct type *type, struct ui_file *stream) { - struct value *delta = ada_delta (type); + struct value *delta = gnat_encoded_fixed_point_delta (type); struct value *small = ada_scaling_factor (type); if (delta == nullptr) @@ -401,12 +402,12 @@ bitsize = 0; if (range_desc_type == NULL) { - for (arr_type = type; TYPE_CODE (arr_type) == TYPE_CODE_ARRAY; + for (arr_type = type; arr_type->code () == TYPE_CODE_ARRAY; arr_type = TYPE_TARGET_TYPE (arr_type)) { if (arr_type != type) fprintf_filtered (stream, ", "); - print_range (TYPE_INDEX_TYPE (arr_type), stream, + print_range (arr_type->index_type (), stream, 0 /* bounds_prefered_p */); if (TYPE_FIELD_BITSIZE (arr_type, 0) > 0) bitsize = TYPE_FIELD_BITSIZE (arr_type, 0); @@ -416,14 +417,14 @@ { int k; - n_indices = TYPE_NFIELDS (range_desc_type); + n_indices = range_desc_type->num_fields (); for (k = 0, arr_type = type; k < n_indices; k += 1, arr_type = TYPE_TARGET_TYPE (arr_type)) { if (k > 0) fprintf_filtered (stream, ", "); - print_range_type (TYPE_FIELD_TYPE (range_desc_type, k), + print_range_type (range_desc_type->field (k).type (), stream, 0 /* bounds_prefered_p */); if (TYPE_FIELD_BITSIZE (arr_type, 0) > 0) bitsize = TYPE_FIELD_BITSIZE (arr_type, 0); @@ -455,7 +456,7 @@ values. Return non-zero if the field is an encoding of discriminant values, as in a standard variant record, and 0 if the field is not so encoded (as happens with single-component variants - in types annotated with pragma Unchecked_Variant). */ + in types annotated with pragma Unchecked_Union). */ static int print_choices (struct type *type, int field_num, struct ui_file *stream, @@ -548,13 +549,13 @@ struct type *var_type, *par_type; struct type *discr_type; - var_type = TYPE_FIELD_TYPE (type, field_num); + var_type = type->field (field_num).type (); discr_type = ada_variant_discrim_type (var_type, outer_type); - if (TYPE_CODE (var_type) == TYPE_CODE_PTR) + if (var_type->code () == TYPE_CODE_PTR) { var_type = TYPE_TARGET_TYPE (var_type); - if (var_type == NULL || TYPE_CODE (var_type) != TYPE_CODE_UNION) + if (var_type == NULL || var_type->code () != TYPE_CODE_UNION) return; } @@ -562,12 +563,12 @@ if (par_type != NULL) var_type = par_type; - for (i = 0; i < TYPE_NFIELDS (var_type); i += 1) + for (i = 0; i < var_type->num_fields (); i += 1) { fprintf_filtered (stream, "\n%*swhen ", level + 4, ""); if (print_choices (var_type, i, stream, discr_type)) { - if (print_record_field_types (TYPE_FIELD_TYPE (var_type, i), + if (print_record_field_types (var_type->field (i).type (), outer_type, stream, show, level + 4, flags) <= 0) @@ -593,7 +594,7 @@ const struct type_print_options *flags) { const char *variant - = ada_variant_discrim_name (TYPE_FIELD_TYPE (type, field_num)); + = ada_variant_discrim_name (type->field (field_num).type ()); if (*variant == '\0') variant = "?"; @@ -632,7 +633,7 @@ if (ada_is_parent_field (type, i) || ada_is_ignored_field (type, i)) ; else if (ada_is_wrapper_field (type, i)) - flds += print_record_field_types (TYPE_FIELD_TYPE (type, i), type, + flds += print_record_field_types (type->field (i).type (), type, stream, show, level, flags); else if (ada_is_variant_part (type, i)) { @@ -643,7 +644,7 @@ { flds += 1; fprintf_filtered (stream, "\n%*s", level + 4, ""); - ada_print_type (TYPE_FIELD_TYPE (type, i), + ada_print_type (type->field (i).type (), TYPE_FIELD_NAME (type, i), stream, show - 1, level + 4, flags); fprintf_filtered (stream, ";"); @@ -653,6 +654,120 @@ return flds; } +static void print_record_field_types_dynamic + (const gdb::array_view &parts, + int from, int to, struct type *type, struct ui_file *stream, + int show, int level, const struct type_print_options *flags); + +/* Print the choices encoded by VARIANT on STREAM. LEVEL is the + indentation level. The type of the discriminant for VARIANT is + given by DISR_TYPE. */ + +static void +print_choices (struct type *discr_type, const variant &variant, + struct ui_file *stream, int level) +{ + fprintf_filtered (stream, "\n%*swhen ", level, ""); + if (variant.is_default ()) + fprintf_filtered (stream, "others"); + else + { + bool first = true; + for (const discriminant_range &range : variant.discriminants) + { + if (!first) + fprintf_filtered (stream, " | "); + first = false; + + ada_print_scalar (discr_type, range.low, stream); + if (range.low != range.high) + ada_print_scalar (discr_type, range.high, stream); + } + } + + fprintf_filtered (stream, " =>"); +} + +/* Print a single variant part, PART, on STREAM. TYPE is the + enclosing type. SHOW, LEVEL, and FLAGS are the usual type-printing + settings. This prints information about PART and the fields it + controls. It returns the index of the next field that should be + shown -- that is, one after the last field printed by this + call. */ + +static int +print_variant_part (const variant_part &part, + struct type *type, struct ui_file *stream, + int show, int level, + const struct type_print_options *flags) +{ + struct type *discr_type = nullptr; + const char *name; + if (part.discriminant_index == -1) + name = "?"; + else + { + name = TYPE_FIELD_NAME (type, part.discriminant_index); + discr_type = type->field (part.discriminant_index).type (); + } + + fprintf_filtered (stream, "\n%*scase %s is", level + 4, "", name); + + int last_field = -1; + for (const variant &variant : part.variants) + { + print_choices (discr_type, variant, stream, level + 8); + + if (variant.first_field == variant.last_field) + fprintf_filtered (stream, " null;"); + else + { + print_record_field_types_dynamic (variant.parts, + variant.first_field, + variant.last_field, type, stream, + show, level + 8, flags); + last_field = variant.last_field; + } + } + + fprintf_filtered (stream, "\n%*send case;", level + 4, ""); + + return last_field; +} + +/* Print some fields of TYPE to STREAM. SHOW, LEVEL, and FLAGS are + the usual type-printing settings. PARTS is the array of variant + parts that correspond to the range of fields to be printed. FROM + and TO are the range of fields to print. */ + +static void +print_record_field_types_dynamic (const gdb::array_view &parts, + int from, int to, + struct type *type, struct ui_file *stream, + int show, int level, + const struct type_print_options *flags) +{ + int field = from; + + for (const variant_part &part : parts) + { + if (part.variants.empty ()) + continue; + + /* Print any non-varying fields. */ + int first_varying = part.variants[0].first_field; + print_selected_record_field_types (type, type, field, + first_varying - 1, stream, + show, level, flags); + + field = print_variant_part (part, type, stream, show, level, flags); + } + + /* Print any trailing fields that we were asked to print. */ + print_selected_record_field_types (type, type, field, to - 1, stream, show, + level, flags); +} + /* Print a description on STREAM of all fields of record or union type TYPE, as for print_selected_record_field_types, above. */ @@ -661,8 +776,23 @@ struct ui_file *stream, int show, int level, const struct type_print_options *flags) { + struct dynamic_prop *prop = type->dyn_prop (DYN_PROP_VARIANT_PARTS); + if (prop != nullptr) + { + if (prop->kind () == PROP_TYPE) + { + type = prop->original_type (); + prop = type->dyn_prop (DYN_PROP_VARIANT_PARTS); + } + gdb_assert (prop->kind () == PROP_VARIANT_PARTS); + print_record_field_types_dynamic (*prop->variant_parts (), + 0, type->num_fields (), + type, stream, show, level, flags); + return type->num_fields (); + } + return print_selected_record_field_types (type, outer_type, - 0, TYPE_NFIELDS (type) - 1, + 0, type->num_fields () - 1, stream, show, level, flags); } @@ -733,7 +863,7 @@ { if (show < 0) fprintf_filtered (stream, "record (?) is ... end record"); - else if (TYPE_NFIELDS (type) == 0) + else if (type->num_fields () == 0) fprintf_filtered (stream, "record (?) is null; end record"); else { @@ -741,11 +871,11 @@ fprintf_filtered (stream, "record (?) is\n%*scase ? is", level + 4, ""); - for (i = 0; i < TYPE_NFIELDS (type); i += 1) + for (i = 0; i < type->num_fields (); i += 1) { fprintf_filtered (stream, "\n%*swhen ? =>\n%*s", level + 8, "", level + 12, ""); - ada_print_type (TYPE_FIELD_TYPE (type, i), + ada_print_type (type->field (i).type (), TYPE_FIELD_NAME (type, i), stream, show - 1, level + 12, flags); fprintf_filtered (stream, ";"); @@ -765,10 +895,10 @@ print_func_type (struct type *type, struct ui_file *stream, const char *name, const struct type_print_options *flags) { - int i, len = TYPE_NFIELDS (type); + int i, len = type->num_fields (); if (TYPE_TARGET_TYPE (type) != NULL - && TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_VOID) + && TYPE_TARGET_TYPE (type)->code () == TYPE_CODE_VOID) fprintf_filtered (stream, "procedure"); else fprintf_filtered (stream, "function"); @@ -790,7 +920,7 @@ wrap_here (" "); } fprintf_filtered (stream, "a%d: ", i + 1); - ada_print_type (TYPE_FIELD_TYPE (type, i), "", stream, -1, 0, + ada_print_type (type->field (i).type (), "", stream, -1, 0, flags); } fprintf_filtered (stream, ")"); @@ -798,7 +928,7 @@ if (TYPE_TARGET_TYPE (type) == NULL) fprintf_filtered (stream, " return "); - else if (TYPE_CODE (TYPE_TARGET_TYPE (type)) != TYPE_CODE_VOID) + else if (TYPE_TARGET_TYPE (type)->code () != TYPE_CODE_VOID) { fprintf_filtered (stream, " return "); ada_print_type (TYPE_TARGET_TYPE (type), "", stream, 0, 0, flags); @@ -840,7 +970,7 @@ if (show > 0) type = ada_check_typedef (type); - if (is_var_decl && TYPE_CODE (type) != TYPE_CODE_FUNC) + if (is_var_decl && type->code () != TYPE_CODE_FUNC) fprintf_filtered (stream, "%.*s: ", ada_name_prefix_len (varstring), varstring); @@ -854,10 +984,10 @@ if (ada_is_aligner_type (type)) ada_print_type (ada_aligned_type (type), "", stream, show, level, flags); else if (ada_is_constrained_packed_array_type (type) - && TYPE_CODE (type) != TYPE_CODE_PTR) + && type->code () != TYPE_CODE_PTR) print_array_type (type, stream, show, level, flags); else - switch (TYPE_CODE (type)) + switch (type->code ()) { default: fprintf_filtered (stream, "<"); @@ -882,8 +1012,8 @@ fprintf_filtered (stream, "(false, true)"); break; case TYPE_CODE_INT: - if (ada_is_fixed_point_type (type)) - print_fixed_point_type (type, stream); + if (ada_is_gnat_encoded_fixed_point_type (type)) + print_gnat_encoded_fixed_point_type (type, stream); else { const char *name = ada_type_name (type); @@ -900,8 +1030,8 @@ } break; case TYPE_CODE_RANGE: - if (ada_is_fixed_point_type (type)) - print_fixed_point_type (type, stream); + if (ada_is_gnat_encoded_fixed_point_type (type)) + print_gnat_encoded_fixed_point_type (type, stream); else if (ada_is_modular_type (type)) fprintf_filtered (stream, "mod %s", int_string (ada_modulus (type), 10, 0, 0, 1)); diff -Nru gdb-9.1/gdb/ada-valprint.c gdb-10.2/gdb/ada-valprint.c --- gdb-9.1/gdb/ada-valprint.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/ada-valprint.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Support for printing Ada values for GDB, the GNU debugger. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -30,21 +30,19 @@ #include "cli/cli-style.h" #include "gdbarch.h" -static int print_field_values (struct type *, const gdb_byte *, - int, +static int print_field_values (struct value *, struct value *, struct ui_file *, int, - struct value *, const struct value_print_options *, - int, struct type *, int, - const struct language_defn *); + int, const struct language_defn *); + /* Make TYPE unsigned if its range of values includes no negatives. */ static void adjust_type_signedness (struct type *type) { - if (type != NULL && TYPE_CODE (type) == TYPE_CODE_RANGE - && TYPE_LOW_BOUND (type) >= 0) + if (type != NULL && type->code () == TYPE_CODE_RANGE + && type->bounds ()->low.const_val () >= 0) TYPE_UNSIGNED (type) = 1; } @@ -73,9 +71,9 @@ if (low_bound > high_bound) return 0; - index_type = TYPE_INDEX_TYPE (type); + index_type = type->index_type (); - while (TYPE_CODE (index_type) == TYPE_CODE_RANGE) + while (index_type->code () == TYPE_CODE_RANGE) { /* We need to know what the base type is, in order to do the appropriate check below. Otherwise, if this is a subrange @@ -86,7 +84,7 @@ } /* Don't print the lower bound if it's the default one. */ - switch (TYPE_CODE (index_type)) + switch (index_type->code ()) { case TYPE_CODE_BOOL: case TYPE_CODE_CHAR: @@ -94,8 +92,9 @@ return 0; break; case TYPE_CODE_ENUM: - if (low_bound == TYPE_FIELD_ENUMVAL (index_type, 0)) + if (low_bound == 0) return 0; + low_bound = TYPE_FIELD_ENUMVAL (index_type, low_bound); break; case TYPE_CODE_UNDEF: index_type = NULL; @@ -112,17 +111,15 @@ } /* Version of val_print_array_elements for GNAT-style packed arrays. - Prints elements of packed array of type TYPE at bit offset - BITOFFSET from VALADDR on STREAM. Formats according to OPTIONS and - separates with commas. RECURSE is the recursion (nesting) level. - TYPE must have been decoded (as by ada_coerce_to_simple_array). */ + Prints elements of packed array of type TYPE from VALADDR on + STREAM. Formats according to OPTIONS and separates with commas. + RECURSE is the recursion (nesting) level. TYPE must have been + decoded (as by ada_coerce_to_simple_array). */ static void val_print_packed_array_elements (struct type *type, const gdb_byte *valaddr, - int offset, - int bitoffset, struct ui_file *stream, + int offset, struct ui_file *stream, int recurse, - struct value *val, const struct value_print_options *options) { unsigned int i; @@ -134,51 +131,28 @@ LONGEST low = 0; elttype = TYPE_TARGET_TYPE (type); - index_type = TYPE_INDEX_TYPE (type); + index_type = type->index_type (); { LONGEST high; - struct type *base_index_type; - if (get_discrete_bounds (index_type, &low, &high) < 0) + if (!get_discrete_bounds (index_type, &low, &high)) len = 1; - else - len = high - low + 1; - - if (TYPE_CODE (index_type) == TYPE_CODE_RANGE) - base_index_type = TYPE_TARGET_TYPE (index_type); - else - base_index_type = index_type; - - if (TYPE_CODE (base_index_type) == TYPE_CODE_ENUM) + else if (low > high) { - LONGEST low_pos, high_pos; - - /* Non-contiguous enumerations types can by used as index types - so the array length is computed from the positions of the - first and last literal in the enumeration type, and not from - the values of these literals. */ - - if (!discrete_position (base_index_type, low, &low_pos) - || !discrete_position (base_index_type, high, &high_pos)) - { - warning (_("unable to get positions in array, use bounds instead")); - low_pos = low; - high_pos = high; - } - /* The array length should normally be HIGH_POS - LOW_POS + 1. But in Ada we allow LOW_POS to be greater than HIGH_POS for empty arrays. In that situation, the array length is just zero, not negative! */ - - if (low_pos > high_pos) - len = 0; - else - len = high_pos - low_pos + 1; + len = 0; } + else + len = high - low + 1; } + if (index_type->code () == TYPE_CODE_RANGE) + index_type = TYPE_TARGET_TYPE (index_type); + i = 0; annotate_array_section_begin (i, elttype); @@ -199,6 +173,11 @@ fprintf_filtered (stream, ", "); } } + else if (options->prettyformat_arrays) + { + fprintf_filtered (stream, "\n"); + print_spaces_filtered (2 + 2 * recurse, stream); + } wrap_here (n_spaces (2 + 2 * recurse)); maybe_print_array_index (index_type, i + low, stream, options); @@ -230,9 +209,7 @@ struct value_print_options opts = *options; opts.deref_ref = 0; - val_print (elttype, - value_embedded_offset (v0), 0, stream, - recurse + 1, v0, &opts, current_language); + common_val_print (v0, stream, recurse + 1, &opts, current_language); annotate_elt_rep (i - i0); fprintf_filtered (stream, _(" %p[%p]"), metadata_style.style ().ptr (), i - i0, nullptr); @@ -262,9 +239,8 @@ maybe_print_array_index (index_type, j + low, stream, options); } - val_print (elttype, - value_embedded_offset (v0), 0, stream, - recurse + 1, v0, &opts, current_language); + common_val_print (v0, stream, recurse + 1, &opts, + current_language); annotate_elt (); } } @@ -279,12 +255,6 @@ value_free_to_mark (mark); } -static struct type * -printable_val_type (struct type *type, const gdb_byte *valaddr) -{ - return ada_to_fixed_type (ada_aligned_type (type), valaddr, 0, NULL, 1); -} - /* Print the character C on STREAM as part of the contents of a literal string whose delimiter is QUOTER. TYPE_LEN is the length in bytes of the character. */ @@ -404,11 +374,11 @@ type = ada_check_typedef (type); - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_ENUM: - len = TYPE_NFIELDS (type); + len = type->num_fields (); for (i = 0; i < len; i++) { if (TYPE_FIELD_ENUMVAL (type, i) == val) @@ -418,7 +388,8 @@ } if (i < len) { - fputs_filtered (ada_enum_name (TYPE_FIELD_NAME (type, i)), stream); + fputs_styled (ada_enum_name (TYPE_FIELD_NAME (type, i)), + variable_name_style.style (), stream); } else { @@ -563,39 +534,33 @@ } static int -print_variant_part (struct type *type, int field_num, - const gdb_byte *valaddr, int offset, +print_variant_part (struct value *value, int field_num, + struct value *outer_value, struct ui_file *stream, int recurse, - struct value *val, const struct value_print_options *options, int comma_needed, - struct type *outer_type, int outer_offset, const struct language_defn *language) { - struct type *var_type = TYPE_FIELD_TYPE (type, field_num); - int which = ada_which_variant_applies (var_type, outer_type, - valaddr + outer_offset); + struct type *type = value_type (value); + struct type *var_type = type->field (field_num).type (); + int which = ada_which_variant_applies (var_type, outer_value); if (which < 0) return 0; - else - return print_field_values - (TYPE_FIELD_TYPE (var_type, which), - valaddr, - offset + TYPE_FIELD_BITPOS (type, field_num) / HOST_CHAR_BIT - + TYPE_FIELD_BITPOS (var_type, which) / HOST_CHAR_BIT, - stream, recurse, val, options, - comma_needed, outer_type, outer_offset, language); -} - -/* Print out fields of value at VALADDR + OFFSET having structure type TYPE. - - TYPE, VALADDR, OFFSET, STREAM, RECURSE, and OPTIONS have the same - meanings as in ada_print_value and ada_val_print. - - OUTER_TYPE and OUTER_OFFSET give type and address of enclosing - record (used to get discriminant values when printing variant - parts). + + struct value *variant_field = value_field (value, field_num); + struct value *active_component = value_field (variant_field, which); + return print_field_values (active_component, outer_value, stream, recurse, + options, comma_needed, language); +} + +/* Print out fields of VALUE. + + STREAM, RECURSE, and OPTIONS have the same meanings as in + ada_print_value and ada_value_print. + + OUTER_VALUE gives the enclosing record (used to get discriminant + values when printing variant parts). COMMA_NEEDED is 1 if fields have been printed at the current recursion level, so that a comma is needed before any field printed by this @@ -604,17 +569,16 @@ Returns 1 if COMMA_NEEDED or any fields were printed. */ static int -print_field_values (struct type *type, const gdb_byte *valaddr, - int offset, struct ui_file *stream, int recurse, - struct value *val, +print_field_values (struct value *value, struct value *outer_value, + struct ui_file *stream, int recurse, const struct value_print_options *options, int comma_needed, - struct type *outer_type, int outer_offset, const struct language_defn *language) { int i, len; - len = TYPE_NFIELDS (type); + struct type *type = value_type (value); + len = type->num_fields (); for (i = 0; i < len; i += 1) { @@ -623,22 +587,19 @@ if (ada_is_wrapper_field (type, i)) { + struct value *field_val = ada_value_primitive_field (value, 0, + i, type); comma_needed = - print_field_values (TYPE_FIELD_TYPE (type, i), - valaddr, - (offset - + TYPE_FIELD_BITPOS (type, i) / HOST_CHAR_BIT), - stream, recurse, val, options, - comma_needed, type, offset, language); + print_field_values (field_val, field_val, + stream, recurse, options, + comma_needed, language); continue; } else if (ada_is_variant_part (type, i)) { comma_needed = - print_variant_part (type, i, valaddr, - offset, stream, recurse, val, - options, comma_needed, - outer_type, outer_offset, language); + print_variant_part (value, i, outer_value, stream, recurse, + options, comma_needed, language); continue; } @@ -656,7 +617,7 @@ wrap_here (n_spaces (2 + 2 * recurse)); } - annotate_field_begin (TYPE_FIELD_TYPE (type, i)); + annotate_field_begin (type->field (i).type ()); fprintf_filtered (stream, "%.*s", ada_name_prefix_len (TYPE_FIELD_NAME (type, i)), TYPE_FIELD_NAME (type, i)); @@ -680,18 +641,15 @@ int bit_size = TYPE_FIELD_BITSIZE (type, i); struct value_print_options opts; - adjust_type_signedness (TYPE_FIELD_TYPE (type, i)); + adjust_type_signedness (type->field (i).type ()); v = ada_value_primitive_packed_val - (NULL, valaddr, - offset + bit_pos / HOST_CHAR_BIT, + (value, nullptr, + bit_pos / HOST_CHAR_BIT, bit_pos % HOST_CHAR_BIT, - bit_size, TYPE_FIELD_TYPE (type, i)); + bit_size, type->field (i).type ()); opts = *options; opts.deref_ref = 0; - val_print (TYPE_FIELD_TYPE (type, i), - value_embedded_offset (v), 0, - stream, recurse + 1, v, - &opts, language); + common_val_print (v, stream, recurse + 1, &opts, language); } } else @@ -699,9 +657,9 @@ struct value_print_options opts = *options; opts.deref_ref = 0; - val_print (TYPE_FIELD_TYPE (type, i), - (offset + TYPE_FIELD_BITPOS (type, i) / HOST_CHAR_BIT), - 0, stream, recurse + 1, val, &opts, language); + + struct value *v = value_field (value, i); + common_val_print (v, stream, recurse + 1, &opts, language); } annotate_field_end (); } @@ -714,9 +672,8 @@ static void ada_val_print_string (struct type *type, const gdb_byte *valaddr, - int offset, int offset_aligned, CORE_ADDR address, + int offset_aligned, struct ui_file *stream, int recurse, - struct value *original_value, const struct value_print_options *options) { enum bfd_endian byte_order = type_byte_order (type); @@ -734,9 +691,6 @@ eltlen = TYPE_LENGTH (elttype); len = TYPE_LENGTH (type) / eltlen; - if (options->prettyformat_arrays) - print_spaces_filtered (2 + 2 * recurse, stream); - /* If requested, look for the first null char and only print elements up to it. */ if (options->stop_print_at_null) @@ -761,60 +715,49 @@ thin pointers, etc). */ static void -ada_val_print_gnat_array (struct type *type, const gdb_byte *valaddr, - int offset, CORE_ADDR address, +ada_val_print_gnat_array (struct value *val, struct ui_file *stream, int recurse, - struct value *original_value, const struct value_print_options *options) { - struct value *mark = value_mark (); - struct value *val; + scoped_value_mark free_values; + + struct type *type = ada_check_typedef (value_type (val)); - val = value_from_contents_and_address (type, valaddr + offset, address); /* If this is a reference, coerce it now. This helps taking care of the case where ADDRESS is meaningless because original_value was not an lval. */ val = coerce_ref (val); - if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF) /* array access type. */ + if (type->code () == TYPE_CODE_TYPEDEF) /* array access type. */ val = ada_coerce_to_simple_array_ptr (val); else val = ada_coerce_to_simple_array (val); if (val == NULL) { - gdb_assert (TYPE_CODE (type) == TYPE_CODE_TYPEDEF); + gdb_assert (type->code () == TYPE_CODE_TYPEDEF); fprintf_filtered (stream, "0x0"); } else - val_print (value_type (val), - value_embedded_offset (val), value_address (val), - stream, recurse, val, options, - language_def (language_ada)); - value_free_to_mark (mark); + common_val_print (val, stream, recurse, options, + language_def (language_ada)); } -/* Implement Ada val_print'ing for the case where TYPE is - a TYPE_CODE_PTR. */ +/* Implement Ada value_print'ing for the case where TYPE is a + TYPE_CODE_PTR. */ static void -ada_val_print_ptr (struct type *type, const gdb_byte *valaddr, - int offset, int offset_aligned, CORE_ADDR address, - struct ui_file *stream, int recurse, - struct value *original_value, - const struct value_print_options *options) +ada_value_print_ptr (struct value *val, + struct ui_file *stream, int recurse, + const struct value_print_options *options) { - val_print (type, offset, address, stream, recurse, - original_value, options, language_def (language_c)); + common_val_print (val, stream, recurse, options, language_def (language_c)); + struct type *type = ada_check_typedef (value_type (val)); if (ada_is_tag_type (type)) { - struct value *val = - value_from_contents_and_address (type, - valaddr + offset_aligned, - address + offset_aligned); - const char *name = ada_tag_name (val); + gdb::unique_xmalloc_ptr name = ada_tag_name (val); if (name != NULL) - fprintf_filtered (stream, " (%s)", name); + fprintf_filtered (stream, " (%s)", name.get ()); } } @@ -822,55 +765,37 @@ a TYPE_CODE_INT or TYPE_CODE_RANGE. */ static void -ada_val_print_num (struct type *type, const gdb_byte *valaddr, - int offset, int offset_aligned, CORE_ADDR address, - struct ui_file *stream, int recurse, - struct value *original_value, - const struct value_print_options *options) +ada_value_print_num (struct value *val, struct ui_file *stream, int recurse, + const struct value_print_options *options) { - if (ada_is_fixed_point_type (type)) + struct type *type = ada_check_typedef (value_type (val)); + const gdb_byte *valaddr = value_contents_for_printing (val); + + if (ada_is_gnat_encoded_fixed_point_type (type)) { struct value *scale = ada_scaling_factor (type); - struct value *v = value_from_contents (type, valaddr + offset_aligned); - v = value_cast (value_type (scale), v); - v = value_binop (v, scale, BINOP_MUL); + val = value_cast (value_type (scale), val); + val = value_binop (val, scale, BINOP_MUL); const char *fmt = TYPE_LENGTH (type) < 4 ? "%.11g" : "%.17g"; std::string str - = target_float_to_string (value_contents (v), value_type (v), fmt); + = target_float_to_string (value_contents (val), value_type (val), fmt); fputs_filtered (str.c_str (), stream); return; } - else if (TYPE_CODE (type) == TYPE_CODE_RANGE - && (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_ENUM - || TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_BOOL - || TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_CHAR)) + else if (type->code () == TYPE_CODE_RANGE + && (TYPE_TARGET_TYPE (type)->code () == TYPE_CODE_ENUM + || TYPE_TARGET_TYPE (type)->code () == TYPE_CODE_BOOL + || TYPE_TARGET_TYPE (type)->code () == TYPE_CODE_CHAR)) { /* For enum-valued ranges, we want to recurse, because we'll end up printing the constant's name rather than its numeric value. Character and fixed-point types are also printed differently, so recuse for those as well. */ struct type *target_type = TYPE_TARGET_TYPE (type); - - if (TYPE_LENGTH (type) != TYPE_LENGTH (target_type)) - { - /* Obscure case of range type that has different length from - its base type. Perform a conversion, or we will get a - nonsense value. Actually, we could use the same - code regardless of lengths; I'm just avoiding a cast. */ - struct value *v1 - = value_from_contents_and_address (type, valaddr + offset, 0); - struct value *v = value_cast (target_type, v1); - - val_print (target_type, - value_embedded_offset (v), 0, stream, - recurse + 1, v, options, - language_def (language_ada)); - } - else - val_print (TYPE_TARGET_TYPE (type), offset, - address, stream, recurse, original_value, - options, language_def (language_ada)); + val = value_cast (target_type, val); + common_val_print (val, stream, recurse + 1, options, + language_def (language_ada)); return; } else @@ -883,8 +808,7 @@ struct value_print_options opts = *options; opts.format = format; - val_print_scalar_formatted (type, offset_aligned, - original_value, &opts, 0, stream); + value_print_scalar_formatted (val, &opts, 0, stream); } else if (ada_is_system_address_type (type)) { @@ -896,8 +820,7 @@ struct gdbarch *gdbarch = get_type_arch (type); struct type *ptr_type = builtin_type (gdbarch)->builtin_data_ptr; - CORE_ADDR addr = extract_typed_address (valaddr + offset_aligned, - ptr_type); + CORE_ADDR addr = extract_typed_address (valaddr, ptr_type); fprintf_filtered (stream, "("); type_print (type, "", stream, -1); @@ -906,14 +829,13 @@ } else { - val_print_scalar_formatted (type, offset_aligned, - original_value, options, 0, stream); + value_print_scalar_formatted (val, options, 0, stream); if (ada_is_character_type (type)) { LONGEST c; fputs_filtered (" ", stream); - c = unpack_long (type, valaddr + offset_aligned); + c = unpack_long (type, valaddr); ada_printchar (c, type, stream); } } @@ -925,10 +847,7 @@ a TYPE_CODE_ENUM. */ static void -ada_val_print_enum (struct type *type, const gdb_byte *valaddr, - int offset, int offset_aligned, CORE_ADDR address, - struct ui_file *stream, int recurse, - struct value *original_value, +ada_val_print_enum (struct value *value, struct ui_file *stream, int recurse, const struct value_print_options *options) { int i; @@ -937,12 +856,15 @@ if (options->format) { - val_print_scalar_formatted (type, offset_aligned, - original_value, options, 0, stream); + value_print_scalar_formatted (value, options, 0, stream); return; } - len = TYPE_NFIELDS (type); + struct type *type = ada_check_typedef (value_type (value)); + const gdb_byte *valaddr = value_contents_for_printing (value); + int offset_aligned = ada_aligned_value_addr (type, valaddr) - valaddr; + + len = type->num_fields (); val = unpack_long (type, valaddr + offset_aligned); for (i = 0; i < len; i++) { @@ -956,45 +878,26 @@ const char *name = ada_enum_name (TYPE_FIELD_NAME (type, i)); if (name[0] == '\'') - fprintf_filtered (stream, "%ld %s", (long) val, name); + fprintf_filtered (stream, "%ld %ps", (long) val, + styled_string (variable_name_style.style (), + name)); else - fputs_filtered (name, stream); + fputs_styled (name, variable_name_style.style (), stream); } else print_longest (stream, 'd', 0, val); } -/* Implement Ada val_print'ing for the case where TYPE is - a TYPE_CODE_FLT. */ - -static void -ada_val_print_flt (struct type *type, const gdb_byte *valaddr, - int offset, int offset_aligned, CORE_ADDR address, - struct ui_file *stream, int recurse, - struct value *original_value, - const struct value_print_options *options) -{ - if (options->format) - { - val_print (type, offset, address, stream, recurse, - original_value, options, language_def (language_c)); - return; - } - - ada_print_floating (valaddr + offset, type, stream); -} - -/* Implement Ada val_print'ing for the case where TYPE is - a TYPE_CODE_STRUCT or TYPE_CODE_UNION. */ +/* Implement Ada val_print'ing for the case where the type is + TYPE_CODE_STRUCT or TYPE_CODE_UNION. */ static void -ada_val_print_struct_union - (struct type *type, const gdb_byte *valaddr, int offset, - int offset_aligned, CORE_ADDR address, struct ui_file *stream, - int recurse, struct value *original_value, - const struct value_print_options *options) +ada_val_print_struct_union (struct value *value, + struct ui_file *stream, + int recurse, + const struct value_print_options *options) { - if (ada_is_bogus_array_descriptor (type)) + if (ada_is_bogus_array_descriptor (value_type (value))) { fprintf_filtered (stream, "(...?)"); return; @@ -1002,10 +905,8 @@ fprintf_filtered (stream, "("); - if (print_field_values (type, valaddr, offset_aligned, - stream, recurse, original_value, options, - 0, type, offset_aligned, - language_def (language_ada)) != 0 + if (print_field_values (value, value, stream, recurse, options, + 0, language_def (language_ada)) != 0 && options->prettyformat) { fprintf_filtered (stream, "\n"); @@ -1015,22 +916,23 @@ fprintf_filtered (stream, ")"); } -/* Implement Ada val_print'ing for the case where TYPE is - a TYPE_CODE_ARRAY. */ +/* Implement Ada value_print'ing for the case where TYPE is a + TYPE_CODE_ARRAY. */ static void -ada_val_print_array (struct type *type, const gdb_byte *valaddr, - int offset, int offset_aligned, CORE_ADDR address, - struct ui_file *stream, int recurse, - struct value *original_value, - const struct value_print_options *options) +ada_value_print_array (struct value *val, struct ui_file *stream, int recurse, + const struct value_print_options *options) { + struct type *type = ada_check_typedef (value_type (val)); + /* For an array of characters, print with string syntax. */ if (ada_is_string_type (type) && (options->format == 0 || options->format == 's')) { - ada_val_print_string (type, valaddr, offset, offset_aligned, - address, stream, recurse, original_value, + const gdb_byte *valaddr = value_contents_for_printing (val); + int offset_aligned = ada_aligned_value_addr (type, valaddr) - valaddr; + + ada_val_print_string (type, valaddr, offset_aligned, stream, recurse, options); return; } @@ -1038,13 +940,14 @@ fprintf_filtered (stream, "("); print_optional_low_bound (stream, type, options); if (TYPE_FIELD_BITSIZE (type, 0) > 0) - val_print_packed_array_elements (type, valaddr, offset_aligned, - 0, stream, recurse, - original_value, options); + { + const gdb_byte *valaddr = value_contents_for_printing (val); + int offset_aligned = ada_aligned_value_addr (type, valaddr) - valaddr; + val_print_packed_array_elements (type, valaddr, offset_aligned, + stream, recurse, options); + } else - val_print_array_elements (type, offset_aligned, address, - stream, recurse, original_value, - options, 0); + value_print_array_elements (val, stream, recurse, options, 0); fprintf_filtered (stream, ")"); } @@ -1067,7 +970,7 @@ struct value *deref_val; CORE_ADDR deref_val_int; - if (TYPE_CODE (elttype) == TYPE_CODE_UNDEF) + if (elttype->code () == TYPE_CODE_UNDEF) { fputs_styled ("", metadata_style.style (), stream); @@ -1107,109 +1010,101 @@ if (value_lazy (deref_val)) value_fetch_lazy (deref_val); - val_print (value_type (deref_val), - value_embedded_offset (deref_val), - value_address (deref_val), stream, recurse + 1, - deref_val, options, language_def (language_ada)); + common_val_print (deref_val, stream, recurse + 1, + options, language_def (language_ada)); } -/* See the comment on ada_val_print. This function differs in that it - does not catch evaluation errors (leaving that to ada_val_print). */ +/* See the comment on ada_value_print. This function differs in that + it does not catch evaluation errors (leaving that to + ada_value_print). */ static void -ada_val_print_1 (struct type *type, - int offset, CORE_ADDR address, - struct ui_file *stream, int recurse, - struct value *original_value, - const struct value_print_options *options) +ada_value_print_1 (struct value *val, struct ui_file *stream, int recurse, + const struct value_print_options *options) { - int offset_aligned; - const gdb_byte *valaddr = value_contents_for_printing (original_value); - - type = ada_check_typedef (type); + struct type *type = ada_check_typedef (value_type (val)); if (ada_is_array_descriptor_type (type) || (ada_is_constrained_packed_array_type (type) - && TYPE_CODE (type) != TYPE_CODE_PTR)) + && type->code () != TYPE_CODE_PTR)) { - ada_val_print_gnat_array (type, valaddr, offset, address, - stream, recurse, original_value, - options); + ada_val_print_gnat_array (val, stream, recurse, options); return; } - offset_aligned = offset + ada_aligned_value_addr (type, valaddr) - valaddr; - type = printable_val_type (type, valaddr + offset_aligned); - type = resolve_dynamic_type (type, valaddr + offset_aligned, - address + offset_aligned); + val = ada_to_fixed_value (val); + type = value_type (val); + struct type *saved_type = type; - switch (TYPE_CODE (type)) + const gdb_byte *valaddr = value_contents_for_printing (val); + CORE_ADDR address = value_address (val); + gdb::array_view view + = gdb::make_array_view (valaddr, TYPE_LENGTH (type)); + type = ada_check_typedef (resolve_dynamic_type (type, view, address)); + if (type != saved_type) + { + val = value_copy (val); + deprecated_set_value_type (val, type); + } + + switch (type->code ()) { default: - val_print (type, offset, address, stream, recurse, - original_value, options, language_def (language_c)); + common_val_print (val, stream, recurse, options, + language_def (language_c)); break; case TYPE_CODE_PTR: - ada_val_print_ptr (type, valaddr, offset, offset_aligned, - address, stream, recurse, original_value, - options); + ada_value_print_ptr (val, stream, recurse, options); break; case TYPE_CODE_INT: case TYPE_CODE_RANGE: - ada_val_print_num (type, valaddr, offset, offset_aligned, - address, stream, recurse, original_value, - options); + ada_value_print_num (val, stream, recurse, options); break; case TYPE_CODE_ENUM: - ada_val_print_enum (type, valaddr, offset, offset_aligned, - address, stream, recurse, original_value, - options); + ada_val_print_enum (val, stream, recurse, options); break; case TYPE_CODE_FLT: - ada_val_print_flt (type, valaddr, offset, offset_aligned, - address, stream, recurse, original_value, - options); + if (options->format) + { + common_val_print (val, stream, recurse, options, + language_def (language_c)); + break; + } + + ada_print_floating (valaddr, type, stream); break; case TYPE_CODE_UNION: case TYPE_CODE_STRUCT: - ada_val_print_struct_union (type, valaddr, offset, offset_aligned, - address, stream, recurse, - original_value, options); + ada_val_print_struct_union (val, stream, recurse, options); break; case TYPE_CODE_ARRAY: - ada_val_print_array (type, valaddr, offset, offset_aligned, - address, stream, recurse, original_value, - options); + ada_value_print_array (val, stream, recurse, options); return; case TYPE_CODE_REF: - ada_val_print_ref (type, valaddr, offset, offset_aligned, - address, stream, recurse, original_value, + ada_val_print_ref (type, valaddr, 0, 0, + address, stream, recurse, val, options); break; } } -/* See val_print for a description of the various parameters of this - function; they are identical. */ +/* See ada-lang.h. */ void -ada_val_print (struct type *type, - int embedded_offset, CORE_ADDR address, - struct ui_file *stream, int recurse, - struct value *val, - const struct value_print_options *options) +ada_value_print_inner (struct value *val, struct ui_file *stream, + int recurse, + const struct value_print_options *options) { try { - ada_val_print_1 (type, embedded_offset, address, - stream, recurse, val, options); + ada_value_print_1 (val, stream, recurse, options); } catch (const gdb_exception_error &except) { @@ -1224,17 +1119,16 @@ const struct value_print_options *options) { struct value *val = ada_to_fixed_value (val0); - CORE_ADDR address = value_address (val); struct type *type = ada_check_typedef (value_type (val)); struct value_print_options opts; /* If it is a pointer, indicate what it points to. */ - if (TYPE_CODE (type) == TYPE_CODE_PTR) + if (type->code () == TYPE_CODE_PTR) { /* Hack: don't print (char *) for char strings. Their type is indicated by the quoted string anyway. */ if (TYPE_LENGTH (TYPE_TARGET_TYPE (type)) != sizeof (char) - || TYPE_CODE (TYPE_TARGET_TYPE (type)) != TYPE_CODE_INT + || TYPE_TARGET_TYPE (type)->code () != TYPE_CODE_INT || TYPE_UNSIGNED (TYPE_TARGET_TYPE (type))) { fprintf_filtered (stream, "("); @@ -1247,7 +1141,7 @@ /* We do not print the type description unless TYPE is an array access type (this is encoded by the compiler as a typedef to a fat pointer - hence the check against TYPE_CODE_TYPEDEF). */ - if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF) + if (type->code () == TYPE_CODE_TYPEDEF) { fprintf_filtered (stream, "("); type_print (type, "", stream, -1); @@ -1264,7 +1158,5 @@ opts = *options; opts.deref_ref = 1; - val_print (type, - value_embedded_offset (val), address, - stream, 0, val, &opts, current_language); + common_val_print (val, stream, 0, &opts, current_language); } diff -Nru gdb-9.1/gdb/ada-varobj.c gdb-10.2/gdb/ada-varobj.c --- gdb-9.1/gdb/ada-varobj.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/ada-varobj.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* varobj support for Ada. - Copyright (C) 2012-2020 Free Software Foundation, Inc. + Copyright (C) 2012-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -63,10 +63,10 @@ ada_varobj_decode_var (struct value **value_ptr, struct type **type_ptr) { if (*value_ptr) - { - *value_ptr = ada_get_decoded_value (*value_ptr); - *type_ptr = ada_check_typedef (value_type (*value_ptr)); - } + *value_ptr = ada_get_decoded_value (*value_ptr); + + if (*value_ptr != nullptr) + *type_ptr = ada_check_typedef (value_type (*value_ptr)); else *type_ptr = ada_get_decoded_type (*type_ptr); } @@ -105,7 +105,7 @@ type = value_type (value); } else - type = TYPE_FIELD_TYPE (parent_type, fieldno); + type = parent_type->field (fieldno).type (); if (child_value) *child_value = value; @@ -132,11 +132,11 @@ ada_get_decoded_value would have transformed our parent_type into a simple array pointer type. */ gdb_assert (parent_value == NULL); - gdb_assert (TYPE_CODE (parent_type) == TYPE_CODE_TYPEDEF); + gdb_assert (parent_type->code () == TYPE_CODE_TYPEDEF); /* Decode parent_type by the equivalent pointer to (decoded) array. */ - while (TYPE_CODE (parent_type) == TYPE_CODE_TYPEDEF) + while (parent_type->code () == TYPE_CODE_TYPEDEF) parent_type = TYPE_TARGET_TYPE (parent_type); parent_type = ada_coerce_to_simple_array_type (parent_type); parent_type = lookup_pointer_type (parent_type); @@ -178,7 +178,7 @@ if (parent_value) { struct value *index_value = - value_from_longest (TYPE_INDEX_TYPE (parent_type), elt_index); + value_from_longest (parent_type->index_type (), elt_index); value = ada_value_subscript (parent_value, 1, &index_value); type = value_type (value); @@ -206,9 +206,11 @@ one child (the struct), their children are the components of the struct/union type. We handle this situation by dereferencing the (value, type) couple. */ - if (TYPE_CODE (*type) == TYPE_CODE_PTR - && (TYPE_CODE (TYPE_TARGET_TYPE (*type)) == TYPE_CODE_STRUCT - || TYPE_CODE (TYPE_TARGET_TYPE (*type)) == TYPE_CODE_UNION) + if ((*type)->code () == TYPE_CODE_PTR + && (TYPE_TARGET_TYPE (*type)->code () == TYPE_CODE_STRUCT + || TYPE_TARGET_TYPE (*type)->code () == TYPE_CODE_UNION) + && *value != nullptr + && value_as_address (*value) != 0 && !ada_is_array_descriptor_type (TYPE_TARGET_TYPE (*type)) && !ada_is_constrained_packed_array_type (TYPE_TARGET_TYPE (*type))) ada_varobj_ind (*value, *type, value, type); @@ -234,7 +236,7 @@ LONGEST lo, hi; if (parent_value == NULL - && is_dynamic_type (TYPE_INDEX_TYPE (parent_type))) + && is_dynamic_type (parent_type->index_type ())) { /* This happens when listing the children of an object which does not exist in memory (Eg: when requesting @@ -270,10 +272,10 @@ int n_children = 0; int i; - gdb_assert (TYPE_CODE (parent_type) == TYPE_CODE_STRUCT - || TYPE_CODE (parent_type) == TYPE_CODE_UNION); + gdb_assert (parent_type->code () == TYPE_CODE_STRUCT + || parent_type->code () == TYPE_CODE_UNION); - for (i = 0; i < TYPE_NFIELDS (parent_type); i++) + for (i = 0; i < parent_type->num_fields (); i++) { if (ada_is_ignored_field (parent_type, i)) continue; @@ -329,8 +331,12 @@ /* Pointer to functions and to void do not have a child, since you cannot print what they point to. */ - if (TYPE_CODE (child_type) == TYPE_CODE_FUNC - || TYPE_CODE (child_type) == TYPE_CODE_VOID) + if (child_type->code () == TYPE_CODE_FUNC + || child_type->code () == TYPE_CODE_VOID) + return 0; + + /* Only show children for non-null pointers. */ + if (parent_value == nullptr || value_as_address (parent_value) == 0) return 0; /* All other types have 1 child. */ @@ -353,16 +359,16 @@ if (ada_is_access_to_unconstrained_array (parent_type)) return 1; - if (TYPE_CODE (parent_type) == TYPE_CODE_ARRAY) + if (parent_type->code () == TYPE_CODE_ARRAY) return ada_varobj_get_array_number_of_children (parent_value, parent_type); - if (TYPE_CODE (parent_type) == TYPE_CODE_STRUCT - || TYPE_CODE (parent_type) == TYPE_CODE_UNION) + if (parent_type->code () == TYPE_CODE_STRUCT + || parent_type->code () == TYPE_CODE_UNION) return ada_varobj_get_struct_number_of_children (parent_value, parent_type); - if (TYPE_CODE (parent_type) == TYPE_CODE_PTR) + if (parent_type->code () == TYPE_CODE_PTR) return ada_varobj_get_ptr_number_of_children (parent_value, parent_type); @@ -418,10 +424,10 @@ int fieldno; int childno = 0; - gdb_assert (TYPE_CODE (parent_type) == TYPE_CODE_STRUCT - || TYPE_CODE (parent_type) == TYPE_CODE_UNION); + gdb_assert (parent_type->code () == TYPE_CODE_STRUCT + || parent_type->code () == TYPE_CODE_UNION); - for (fieldno = 0; fieldno < TYPE_NFIELDS (parent_type); fieldno++) + for (fieldno = 0; fieldno < parent_type->num_fields (); fieldno++) { if (ada_is_ignored_field (parent_type, fieldno)) continue; @@ -587,9 +593,9 @@ struct type *index_type; int real_index; - gdb_assert (TYPE_CODE (parent_type) == TYPE_CODE_ARRAY); + gdb_assert (parent_type->code () == TYPE_CODE_ARRAY); - index_type = TYPE_INDEX_TYPE (parent_type); + index_type = parent_type->index_type (); real_index = child_index + ada_discrete_type_low_bound (index_type); if (child_name) @@ -627,11 +633,11 @@ std::string decoded; /* If the index type is a range type, find the base type. */ - while (TYPE_CODE (index_type) == TYPE_CODE_RANGE) + while (index_type->code () == TYPE_CODE_RANGE) index_type = TYPE_TARGET_TYPE (index_type); - if (TYPE_CODE (index_type) == TYPE_CODE_ENUM - || TYPE_CODE (index_type) == TYPE_CODE_BOOL) + if (index_type->code () == TYPE_CODE_ENUM + || index_type->code () == TYPE_CODE_BOOL) { index_type_name = ada_type_name (index_type); if (index_type_name) @@ -693,7 +699,7 @@ return; } - if (TYPE_CODE (parent_type) == TYPE_CODE_ARRAY) + if (parent_type->code () == TYPE_CODE_ARRAY) { ada_varobj_describe_simple_array_child (parent_value, parent_type, parent_name, parent_path_expr, @@ -702,8 +708,8 @@ return; } - if (TYPE_CODE (parent_type) == TYPE_CODE_STRUCT - || TYPE_CODE (parent_type) == TYPE_CODE_UNION) + if (parent_type->code () == TYPE_CODE_STRUCT + || parent_type->code () == TYPE_CODE_UNION) { ada_varobj_describe_struct_child (parent_value, parent_type, parent_name, parent_path_expr, @@ -713,7 +719,7 @@ return; } - if (TYPE_CODE (parent_type) == TYPE_CODE_PTR) + if (parent_type->code () == TYPE_CODE_PTR) { ada_varobj_describe_ptr_child (parent_value, parent_type, parent_name, parent_path_expr, @@ -856,7 +862,7 @@ { ada_varobj_decode_var (&value, &type); - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_STRUCT: case TYPE_CODE_UNION: @@ -939,7 +945,7 @@ struct type *type = (var->value != nullptr ? value_type (var->value.get ()) : var->type); - if (TYPE_CODE (type) == TYPE_CODE_REF) + if (type->code () == TYPE_CODE_REF) type = TYPE_TARGET_TYPE (type); if (ada_is_access_to_unconstrained_array (type)) diff -Nru gdb-9.1/gdb/addrmap.c gdb-10.2/gdb/addrmap.c --- gdb-9.1/gdb/addrmap.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/addrmap.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* addrmap.c --- implementation of address map data structure. - Copyright (C) 2007-2020 Free Software Foundation, Inc. + Copyright (C) 2007-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/addrmap.h gdb-10.2/gdb/addrmap.h --- gdb-9.1/gdb/addrmap.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/addrmap.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* addrmap.h --- interface to address map data structure. - Copyright (C) 2007-2020 Free Software Foundation, Inc. + Copyright (C) 2007-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/agent.c gdb-10.2/gdb/agent.c --- gdb-9.1/gdb/agent.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/agent.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2012-2020 Free Software Foundation, Inc. +/* Copyright (C) 2012-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -74,8 +74,9 @@ agent_look_up_symbols (objfile); } +void _initialize_agent (); void -_initialize_agent (void) +_initialize_agent () { gdb::observers::new_objfile.attach (agent_new_objfile); diff -Nru gdb-9.1/gdb/aix-thread.c gdb-10.2/gdb/aix-thread.c --- gdb-9.1/gdb/aix-thread.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/aix-thread.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Low level interface for debugging AIX 4.3+ pthreads. - Copyright (C) 1999-2020 Free Software Foundation, Inc. + Copyright (C) 1999-2021 Free Software Foundation, Inc. Written by Nick Duffek . This file is part of GDB. @@ -805,7 +805,11 @@ priv->pdtid = pbuf[pi].pdtid; priv->tid = pbuf[pi].tid; - thread = add_thread_with_info (ptid_t (infpid, 0, pbuf[pi].pthid), priv); + process_stratum_target *proc_target + = current_inferior ()->process_target (); + thread = add_thread_with_info (proc_target, + ptid_t (infpid, 0, pbuf[pi].pthid), + priv); pi++; } @@ -837,7 +841,9 @@ } else { - thread = add_thread (pptid); + process_stratum_target *proc_target + = current_inferior ()->process_target (); + thread = add_thread (proc_target, pptid); aix_thread_info *priv = new aix_thread_info; thread->priv.reset (priv); @@ -896,7 +902,7 @@ { ptid = thread->ptid; if (set_infpid) - inferior_ptid = ptid; + switch_to_thread (thread); } return ptid; } @@ -1043,7 +1049,7 @@ } else { - thread = find_thread_ptid (ptid); + thread = find_thread_ptid (current_inferior (), ptid); if (!thread) error (_("aix-thread resume: unknown pthread %ld"), ptid.lwp ()); @@ -1089,7 +1095,9 @@ if (!pd_active && status->kind == TARGET_WAITKIND_STOPPED && status->value.sig == GDB_SIGNAL_TRAP) { - struct regcache *regcache = get_thread_regcache (ptid); + process_stratum_target *proc_target + = current_inferior ()->process_target (); + struct regcache *regcache = get_thread_regcache (proc_target, ptid); struct gdbarch *gdbarch = regcache->arch (); if (regcache_read_pc (regcache) @@ -1354,7 +1362,7 @@ beneath ()->fetch_registers (regcache, regno); else { - thread = find_thread_ptid (regcache->ptid ()); + thread = find_thread_ptid (current_inferior (), regcache->ptid ()); aix_thread_info *priv = get_aix_thread_info (thread); tid = priv->tid; @@ -1692,7 +1700,7 @@ beneath ()->store_registers (regcache, regno); else { - thread = find_thread_ptid (regcache->ptid ()); + thread = find_thread_ptid (current_inferior (), regcache->ptid ()); aix_thread_info *priv = get_aix_thread_info (thread); tid = priv->tid; @@ -1740,7 +1748,9 @@ /* We update the thread list every time the child stops, so all valid threads should be in the thread list. */ - return in_thread_list (ptid); + process_stratum_target *proc_target + = current_inferior ()->process_target (); + return in_thread_list (proc_target, ptid); } /* Return a printable representation of composite PID for use in @@ -1824,8 +1834,9 @@ /* Module startup initialization function, automagically called by init.c. */ +void _initialize_aix_thread (); void -_initialize_aix_thread (void) +_initialize_aix_thread () { /* Notice when object files get loaded and unloaded. */ gdb::observers::new_objfile.attach (new_objfile); diff -Nru gdb-9.1/gdb/alloc.c gdb-10.2/gdb/alloc.c --- gdb-9.1/gdb/alloc.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/alloc.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Shared allocation functions for GDB, the GNU debugger. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/alpha-bsd-nat.c gdb-10.2/gdb/alpha-bsd-nat.c --- gdb-9.1/gdb/alpha-bsd-nat.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/alpha-bsd-nat.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Native-dependent code for Alpha BSD's. - Copyright (C) 2000-2020 Free Software Foundation, Inc. + Copyright (C) 2000-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -17,6 +17,8 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ +/* We define this to get types like register_t. */ +#define _KERNTYPES #include "defs.h" #include "inferior.h" #include "regcache.h" @@ -24,26 +26,13 @@ #include "alpha-tdep.h" #include "alpha-bsd-tdep.h" #include "inf-ptrace.h" +#include "nbsd-nat.h" #include #include #include -#ifdef HAVE_SYS_PROCFS_H -#include -#endif - -#ifndef HAVE_GREGSET_T -typedef struct reg gregset_t; -#endif - -#ifndef HAVE_FPREGSET_T -typedef struct fpreg fpregset_t; -#endif - -#include "gregset.h" - -struct alpha_bsd_nat_target final : public inf_ptrace_target +struct alpha_bsd_nat_target final : public nbsd_nat_target { void fetch_registers (struct regcache *, int) override; void store_registers (struct regcache *, int) override; @@ -51,34 +40,6 @@ static alpha_bsd_nat_target the_alpha_bsd_nat_target; -/* Provide *regset() wrappers around the generic Alpha BSD register - supply/fill routines. */ - -void -supply_gregset (struct regcache *regcache, const gregset_t *gregsetp) -{ - alphabsd_supply_reg (regcache, (const char *) gregsetp, -1); -} - -void -fill_gregset (const struct regcache *regcache, gregset_t *gregsetp, int regno) -{ - alphabsd_fill_reg (regcache, (char *) gregsetp, regno); -} - -void -supply_fpregset (struct regcache *regcache, const fpregset_t *fpregsetp) -{ - alphabsd_supply_fpreg (regcache, (const char *) fpregsetp, -1); -} - -void -fill_fpregset (const struct regcache *regcache, - fpregset_t *fpregsetp, int regno) -{ - alphabsd_fill_fpreg (regcache, (char *) fpregsetp, regno); -} - /* Determine if PT_GETREGS fetches this register. */ static int @@ -94,12 +55,14 @@ void alpha_bsd_nat_target::fetch_registers (struct regcache *regcache, int regno) { + int lwp = regcache->ptid ().lwp (); + if (regno == -1 || getregs_supplies (regno)) { struct reg gregs; if (ptrace (PT_GETREGS, regcache->ptid ().pid (), - (PTRACE_TYPE_ARG3) &gregs, 0) == -1) + (PTRACE_TYPE_ARG3) &gregs, lwp) == -1) perror_with_name (_("Couldn't get registers")); alphabsd_supply_reg (regcache, (char *) &gregs, regno); @@ -113,7 +76,7 @@ struct fpreg fpregs; if (ptrace (PT_GETFPREGS, regcache->ptid ().pid (), - (PTRACE_TYPE_ARG3) &fpregs, 0) == -1) + (PTRACE_TYPE_ARG3) &fpregs, lwp) == -1) perror_with_name (_("Couldn't get floating point status")); alphabsd_supply_fpreg (regcache, (char *) &fpregs, regno); @@ -126,17 +89,19 @@ void alpha_bsd_nat_target::store_registers (struct regcache *regcache, int regno) { + int lwp = regcache->ptid ().lwp (); + if (regno == -1 || getregs_supplies (regno)) { struct reg gregs; if (ptrace (PT_GETREGS, regcache->ptid ().pid (), - (PTRACE_TYPE_ARG3) &gregs, 0) == -1) + (PTRACE_TYPE_ARG3) &gregs, lwp) == -1) perror_with_name (_("Couldn't get registers")); alphabsd_fill_reg (regcache, (char *) &gregs, regno); if (ptrace (PT_SETREGS, regcache->ptid ().pid (), - (PTRACE_TYPE_ARG3) &gregs, 0) == -1) + (PTRACE_TYPE_ARG3) &gregs, lwp) == -1) perror_with_name (_("Couldn't write registers")); if (regno != -1) @@ -149,13 +114,13 @@ struct fpreg fpregs; if (ptrace (PT_GETFPREGS, regcache->ptid ().pid (), - (PTRACE_TYPE_ARG3) &fpregs, 0) == -1) + (PTRACE_TYPE_ARG3) &fpregs, lwp) == -1) perror_with_name (_("Couldn't get floating point status")); alphabsd_fill_fpreg (regcache, (char *) &fpregs, regno); if (ptrace (PT_SETFPREGS, regcache->ptid ().pid (), - (PTRACE_TYPE_ARG3) &fpregs, 0) == -1) + (PTRACE_TYPE_ARG3) &fpregs, lwp) == -1) perror_with_name (_("Couldn't write floating point status")); } } @@ -192,8 +157,9 @@ } +void _initialize_alphabsd_nat (); void -_initialize_alphabsd_nat (void) +_initialize_alphabsd_nat () { add_inf_child_target (&the_alpha_bsd_nat_target); diff -Nru gdb-9.1/gdb/alpha-bsd-tdep.c gdb-10.2/gdb/alpha-bsd-tdep.c --- gdb-9.1/gdb/alpha-bsd-tdep.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/alpha-bsd-tdep.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Common target dependent code Alpha BSD's. - Copyright (C) 2000-2020 Free Software Foundation, Inc. + Copyright (C) 2000-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/alpha-bsd-tdep.h gdb-10.2/gdb/alpha-bsd-tdep.h --- gdb-9.1/gdb/alpha-bsd-tdep.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/alpha-bsd-tdep.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Common target dependent code for Alpha BSD's. - Copyright (C) 2002-2020 Free Software Foundation, Inc. + Copyright (C) 2002-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/alpha-linux-nat.c gdb-10.2/gdb/alpha-linux-nat.c --- gdb-9.1/gdb/alpha-linux-nat.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/alpha-linux-nat.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Low level Alpha GNU/Linux interface, for GDB when running native. - Copyright (C) 2005-2020 Free Software Foundation, Inc. + Copyright (C) 2005-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -101,8 +101,9 @@ return FPR_BASE + regno - gdbarch_fp0_regnum (gdbarch); } +void _initialize_alpha_linux_nat (); void -_initialize_alpha_linux_nat (void) +_initialize_alpha_linux_nat () { linux_target = &the_alpha_linux_nat_target; add_inf_child_target (&the_alpha_linux_nat_target); diff -Nru gdb-9.1/gdb/alpha-linux-tdep.c gdb-10.2/gdb/alpha-linux-tdep.c --- gdb-9.1/gdb/alpha-linux-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/alpha-linux-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Target-dependent code for GNU/Linux on Alpha. - Copyright (C) 2002-2020 Free Software Foundation, Inc. + Copyright (C) 2002-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -389,8 +389,9 @@ alpha_linux_gdb_signal_to_target); } +void _initialize_alpha_linux_tdep (); void -_initialize_alpha_linux_tdep (void) +_initialize_alpha_linux_tdep () { gdbarch_register_osabi (bfd_arch_alpha, 0, GDB_OSABI_LINUX, alpha_linux_init_abi); diff -Nru gdb-9.1/gdb/alpha-mdebug-tdep.c gdb-10.2/gdb/alpha-mdebug-tdep.c --- gdb-9.1/gdb/alpha-mdebug-tdep.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/alpha-mdebug-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Target-dependent mdebug code for the ALPHA architecture. - Copyright (C) 1993-2020 Free Software Foundation, Inc. + Copyright (C) 1993-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/alpha-nbsd-tdep.c gdb-10.2/gdb/alpha-nbsd-tdep.c --- gdb-9.1/gdb/alpha-nbsd-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/alpha-nbsd-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for NetBSD/alpha. - Copyright (C) 2002-2020 Free Software Foundation, Inc. + Copyright (C) 2002-2021 Free Software Foundation, Inc. Contributed by Wasabi Systems, Inc. @@ -258,6 +258,8 @@ /* Hook into the MDEBUG frame unwinder. */ alpha_mdebug_init_abi (info, gdbarch); + nbsd_init_abi (info, gdbarch); + /* NetBSD/alpha does not provide single step support via ptrace(2); we must use software single-stepping. */ set_gdbarch_software_single_step (gdbarch, alpha_software_single_step); @@ -278,8 +280,9 @@ } +void _initialize_alphanbsd_tdep (); void -_initialize_alphanbsd_tdep (void) +_initialize_alphanbsd_tdep () { /* Even though NetBSD/alpha used ELF since day one, it used the traditional a.out-style core dump format before NetBSD 1.6, but diff -Nru gdb-9.1/gdb/alpha-obsd-tdep.c gdb-10.2/gdb/alpha-obsd-tdep.c --- gdb-9.1/gdb/alpha-obsd-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/alpha-obsd-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for OpenBSD/alpha. - Copyright (C) 2006-2020 Free Software Foundation, Inc. + Copyright (C) 2006-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -126,8 +126,9 @@ } +void _initialize_alphaobsd_tdep (); void -_initialize_alphaobsd_tdep (void) +_initialize_alphaobsd_tdep () { gdbarch_register_osabi (bfd_arch_alpha, 0, GDB_OSABI_OPENBSD, alphaobsd_init_abi); diff -Nru gdb-9.1/gdb/alpha-tdep.c gdb-10.2/gdb/alpha-tdep.c --- gdb-9.1/gdb/alpha-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/alpha-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for the ALPHA architecture, for GDB, the GNU Debugger. - Copyright (C) 1993-2020 Free Software Foundation, Inc. + Copyright (C) 1993-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -21,7 +21,7 @@ #include "frame.h" #include "frame-unwind.h" #include "frame-base.h" -#include "dwarf2-frame.h" +#include "dwarf2/frame.h" #include "inferior.h" #include "symtab.h" #include "value.h" @@ -327,7 +327,7 @@ struct type *arg_type = check_typedef (value_type (arg)); /* Cast argument to long if necessary as the compiler does it too. */ - switch (TYPE_CODE (arg_type)) + switch (arg_type->code ()) { case TYPE_CODE_INT: case TYPE_CODE_BOOL: @@ -478,7 +478,7 @@ gdb_byte raw_buffer[ALPHA_REGISTER_SIZE]; ULONGEST l; - switch (TYPE_CODE (valtype)) + switch (valtype->code ()) { case TYPE_CODE_FLT: switch (TYPE_LENGTH (valtype)) @@ -546,7 +546,7 @@ gdb_byte raw_buffer[ALPHA_REGISTER_SIZE]; ULONGEST l; - switch (TYPE_CODE (valtype)) + switch (valtype->code ()) { case TYPE_CODE_FLT: switch (TYPE_LENGTH (valtype)) @@ -614,7 +614,7 @@ struct type *type, struct regcache *regcache, gdb_byte *readbuf, const gdb_byte *writebuf) { - enum type_code code = TYPE_CODE (type); + enum type_code code = type->code (); if ((code == TYPE_CODE_STRUCT || code == TYPE_CODE_UNION @@ -1821,8 +1821,9 @@ frame_base_append_sniffer (gdbarch, dwarf2_frame_base_sniffer); } +void _initialize_alpha_tdep (); void -_initialize_alpha_tdep (void) +_initialize_alpha_tdep () { gdbarch_register (bfd_arch_alpha, alpha_gdbarch_init, NULL); diff -Nru gdb-9.1/gdb/alpha-tdep.h gdb-10.2/gdb/alpha-tdep.h --- gdb-9.1/gdb/alpha-tdep.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/alpha-tdep.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Common target dependent code for GDB on Alpha systems. - Copyright (C) 1993-2020 Free Software Foundation, Inc. + Copyright (C) 1993-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/amd64-bsd-nat.c gdb-10.2/gdb/amd64-bsd-nat.c --- gdb-9.1/gdb/amd64-bsd-nat.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/amd64-bsd-nat.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Native-dependent code for AMD64 BSD's. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -33,8 +33,24 @@ #include "amd64-nat.h" #include "x86-bsd-nat.h" #include "inf-ptrace.h" +#include "amd64-bsd-nat.h" +static PTRACE_TYPE_RET +gdb_ptrace (PTRACE_TYPE_ARG1 request, ptid_t ptid, PTRACE_TYPE_ARG3 addr, + PTRACE_TYPE_ARG4 data) +{ +#ifdef __NetBSD__ + gdb_assert (data == 0); + /* Support for NetBSD threads: unlike other ptrace implementations in this + file, NetBSD requires that we pass both the pid and lwp. */ + return ptrace (request, ptid.pid (), addr, ptid.lwp ()); +#else + pid_t pid = get_ptrace_pid (ptid); + return ptrace (request, pid, addr, data); +#endif +} + /* Fetch register REGNUM from the inferior. If REGNUM is -1, do this for all registers (including the floating-point registers). */ @@ -42,7 +58,7 @@ amd64bsd_fetch_inferior_registers (struct regcache *regcache, int regnum) { struct gdbarch *gdbarch = regcache->arch (); - pid_t pid = get_ptrace_pid (regcache->ptid ()); + ptid_t ptid = regcache->ptid (); #if defined(PT_GETFSBASE) || defined(PT_GETGSBASE) const struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); #endif @@ -51,7 +67,7 @@ { struct reg regs; - if (ptrace (PT_GETREGS, pid, (PTRACE_TYPE_ARG3) ®s, 0) == -1) + if (gdb_ptrace (PT_GETREGS, ptid, (PTRACE_TYPE_ARG3) ®s, 0) == -1) perror_with_name (_("Couldn't get registers")); amd64_supply_native_gregset (regcache, ®s, -1); @@ -64,7 +80,7 @@ { register_t base; - if (ptrace (PT_GETFSBASE, pid, (PTRACE_TYPE_ARG3) &base, 0) == -1) + if (gdb_ptrace (PT_GETFSBASE, ptid, (PTRACE_TYPE_ARG3) &base, 0) == -1) perror_with_name (_("Couldn't get segment register fs_base")); regcache->raw_supply (tdep->fsbase_regnum, &base); @@ -77,7 +93,7 @@ { register_t base; - if (ptrace (PT_GETGSBASE, pid, (PTRACE_TYPE_ARG3) &base, 0) == -1) + if (gdb_ptrace (PT_GETGSBASE, ptid, (PTRACE_TYPE_ARG3) &base, 0) == -1) perror_with_name (_("Couldn't get segment register gs_base")); regcache->raw_supply (tdep->fsbase_regnum + 1, &base); @@ -95,7 +111,7 @@ if (x86bsd_xsave_len != 0) { xstateregs = alloca (x86bsd_xsave_len); - if (ptrace (PT_GETXSTATE, pid, (PTRACE_TYPE_ARG3) xstateregs, 0) + if (gdb_ptrace (PT_GETXSTATE, ptid, (PTRACE_TYPE_ARG3) xstateregs, 0) == -1) perror_with_name (_("Couldn't get extended state status")); @@ -104,7 +120,7 @@ } #endif - if (ptrace (PT_GETFPREGS, pid, (PTRACE_TYPE_ARG3) &fpregs, 0) == -1) + if (gdb_ptrace (PT_GETFPREGS, ptid, (PTRACE_TYPE_ARG3) &fpregs, 0) == -1) perror_with_name (_("Couldn't get floating point status")); amd64_supply_fxsave (regcache, -1, &fpregs); @@ -118,7 +134,7 @@ amd64bsd_store_inferior_registers (struct regcache *regcache, int regnum) { struct gdbarch *gdbarch = regcache->arch (); - pid_t pid = get_ptrace_pid (regcache->ptid ()); + ptid_t ptid = regcache->ptid (); #if defined(PT_SETFSBASE) || defined(PT_SETGSBASE) const struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); #endif @@ -127,12 +143,12 @@ { struct reg regs; - if (ptrace (PT_GETREGS, pid, (PTRACE_TYPE_ARG3) ®s, 0) == -1) + if (gdb_ptrace (PT_GETREGS, ptid, (PTRACE_TYPE_ARG3) ®s, 0) == -1) perror_with_name (_("Couldn't get registers")); amd64_collect_native_gregset (regcache, ®s, regnum); - if (ptrace (PT_SETREGS, pid, (PTRACE_TYPE_ARG3) ®s, 0) == -1) + if (gdb_ptrace (PT_SETREGS, ptid, (PTRACE_TYPE_ARG3) ®s, 0) == -1) perror_with_name (_("Couldn't write registers")); if (regnum != -1) @@ -148,7 +164,7 @@ base = 0; regcache->raw_collect (tdep->fsbase_regnum, &base); - if (ptrace (PT_SETFSBASE, pid, (PTRACE_TYPE_ARG3) &base, 0) == -1) + if (gdb_ptrace (PT_SETFSBASE, ptid, (PTRACE_TYPE_ARG3) &base, 0) == -1) perror_with_name (_("Couldn't write segment register fs_base")); if (regnum != -1) return; @@ -163,7 +179,7 @@ base = 0; regcache->raw_collect (tdep->fsbase_regnum + 1, &base); - if (ptrace (PT_SETGSBASE, pid, (PTRACE_TYPE_ARG3) &base, 0) == -1) + if (gdb_ptrace (PT_SETGSBASE, ptid, (PTRACE_TYPE_ARG3) &base, 0) == -1) perror_with_name (_("Couldn't write segment register gs_base")); if (regnum != -1) return; @@ -179,25 +195,25 @@ if (x86bsd_xsave_len != 0) { xstateregs = alloca (x86bsd_xsave_len); - if (ptrace (PT_GETXSTATE, pid, (PTRACE_TYPE_ARG3) xstateregs, 0) + if (gdb_ptrace (PT_GETXSTATE, ptid, (PTRACE_TYPE_ARG3) xstateregs, 0) == -1) perror_with_name (_("Couldn't get extended state status")); amd64_collect_xsave (regcache, regnum, xstateregs, 0); - if (ptrace (PT_SETXSTATE, pid, (PTRACE_TYPE_ARG3) xstateregs, - x86bsd_xsave_len) == -1) + if (gdb_ptrace (PT_SETXSTATE, ptid, (PTRACE_TYPE_ARG3) xstateregs, + x86bsd_xsave_len) == -1) perror_with_name (_("Couldn't write extended state status")); return; } #endif - if (ptrace (PT_GETFPREGS, pid, (PTRACE_TYPE_ARG3) &fpregs, 0) == -1) + if (gdb_ptrace (PT_GETFPREGS, ptid, (PTRACE_TYPE_ARG3) &fpregs, 0) == -1) perror_with_name (_("Couldn't get floating point status")); amd64_collect_fxsave (regcache, regnum, &fpregs); - if (ptrace (PT_SETFPREGS, pid, (PTRACE_TYPE_ARG3) &fpregs, 0) == -1) + if (gdb_ptrace (PT_SETFPREGS, ptid, (PTRACE_TYPE_ARG3) &fpregs, 0) == -1) perror_with_name (_("Couldn't write floating point status")); } } diff -Nru gdb-9.1/gdb/amd64-bsd-nat.h gdb-10.2/gdb/amd64-bsd-nat.h --- gdb-9.1/gdb/amd64-bsd-nat.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/amd64-bsd-nat.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Native-dependent code for modern AMD64 BSD's. - Copyright (C) 2018-2020 Free Software Foundation, Inc. + Copyright (C) 2018-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/amd64-darwin-tdep.c gdb-10.2/gdb/amd64-darwin-tdep.c --- gdb-9.1/gdb/amd64-darwin-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/amd64-darwin-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Darwin support for GDB, the GNU debugger. - Copyright (C) 1997-2020 Free Software Foundation, Inc. + Copyright (C) 1997-2021 Free Software Foundation, Inc. Contributed by Apple Computer, Inc. @@ -36,7 +36,7 @@ #include "i386-darwin-tdep.h" #include "solib.h" #include "solib-darwin.h" -#include "dwarf2-frame.h" +#include "dwarf2/frame.h" /* Offsets into the struct x86_thread_state64 where we'll find the saved regs. From and amd64-tdep.h. */ @@ -116,8 +116,9 @@ set_solib_ops (gdbarch, &darwin_so_ops); } +void _initialize_amd64_darwin_tdep (); void -_initialize_amd64_darwin_tdep (void) +_initialize_amd64_darwin_tdep () { gdbarch_register_osabi (bfd_arch_i386, bfd_mach_x86_64, GDB_OSABI_DARWIN, x86_darwin_init_abi_64); diff -Nru gdb-9.1/gdb/amd64-darwin-tdep.h gdb-10.2/gdb/amd64-darwin-tdep.h --- gdb-9.1/gdb/amd64-darwin-tdep.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/amd64-darwin-tdep.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for Darwin x86-64. - Copyright (C) 2009-2020 Free Software Foundation, Inc. + Copyright (C) 2009-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/amd64-dicos-tdep.c gdb-10.2/gdb/amd64-dicos-tdep.c --- gdb-9.1/gdb/amd64-dicos-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/amd64-dicos-tdep.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for DICOS running on x86-64's, for GDB. - Copyright (C) 2009-2020 Free Software Foundation, Inc. + Copyright (C) 2009-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -46,8 +46,9 @@ return GDB_OSABI_UNKNOWN; } +void _initialize_amd64_dicos_tdep (); void -_initialize_amd64_dicos_tdep (void) +_initialize_amd64_dicos_tdep () { gdbarch_register_osabi_sniffer (bfd_arch_i386, bfd_target_elf_flavour, amd64_dicos_osabi_sniffer); diff -Nru gdb-9.1/gdb/amd64-fbsd-nat.c gdb-10.2/gdb/amd64-fbsd-nat.c --- gdb-9.1/gdb/amd64-fbsd-nat.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/amd64-fbsd-nat.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Native-dependent code for FreeBSD/amd64. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -209,8 +209,9 @@ } #endif +void _initialize_amd64fbsd_nat (); void -_initialize_amd64fbsd_nat (void) +_initialize_amd64fbsd_nat () { int offset; diff -Nru gdb-9.1/gdb/amd64-fbsd-tdep.c gdb-10.2/gdb/amd64-fbsd-tdep.c --- gdb-9.1/gdb/amd64-fbsd-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/amd64-fbsd-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for FreeBSD/amd64. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -30,6 +30,7 @@ #include "amd64-tdep.h" #include "fbsd-tdep.h" #include "solib-svr4.h" +#include "inferior.h" /* Support for signal handlers. */ @@ -212,7 +213,8 @@ { struct regcache *regcache; - regcache = get_thread_arch_regcache (ptid, gdbarch); + regcache = get_thread_arch_regcache (current_inferior ()->process_target (), + ptid, gdbarch); target_fetch_registers (regcache, AMD64_FSBASE_REGNUM); @@ -268,8 +270,9 @@ amd64fbsd_get_thread_local_address); } +void _initialize_amd64fbsd_tdep (); void -_initialize_amd64fbsd_tdep (void) +_initialize_amd64fbsd_tdep () { gdbarch_register_osabi (bfd_arch_i386, bfd_mach_x86_64, GDB_OSABI_FREEBSD, amd64fbsd_init_abi); diff -Nru gdb-9.1/gdb/amd64-linux-nat.c gdb-10.2/gdb/amd64-linux-nat.c --- gdb-9.1/gdb/amd64-linux-nat.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/amd64-linux-nat.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Native-dependent code for GNU/Linux x86-64. - Copyright (C) 2001-2020 Free Software Foundation, Inc. + Copyright (C) 2001-2021 Free Software Foundation, Inc. Contributed by Jiri Smid, SuSE Labs. This file is part of GDB. @@ -259,30 +259,6 @@ amd64_supply_fxsave (regcache, -1, &fpregs); } -#ifndef HAVE_STRUCT_USER_REGS_STRUCT_FS_BASE - { - /* PTRACE_ARCH_PRCTL is obsolete since 2.6.25, where the - fs_base and gs_base fields of user_regs_struct can be - used directly. */ - unsigned long base; - - if (regnum == -1 || regnum == AMD64_FSBASE_REGNUM) - { - if (ptrace (PTRACE_ARCH_PRCTL, tid, &base, ARCH_GET_FS) < 0) - perror_with_name (_("Couldn't get segment register fs_base")); - - regcache->raw_supply (AMD64_FSBASE_REGNUM, &base); - } - - if (regnum == -1 || regnum == AMD64_GSBASE_REGNUM) - { - if (ptrace (PTRACE_ARCH_PRCTL, tid, &base, ARCH_GET_GS) < 0) - perror_with_name (_("Couldn't get segment register gs_base")); - - regcache->raw_supply (AMD64_GSBASE_REGNUM, &base); - } - } -#endif } } @@ -348,30 +324,6 @@ if (ptrace (PTRACE_SETFPREGS, tid, 0, (long) &fpregs) < 0) perror_with_name (_("Couldn't write floating point status")); } - -#ifndef HAVE_STRUCT_USER_REGS_STRUCT_FS_BASE - { - /* PTRACE_ARCH_PRCTL is obsolete since 2.6.25, where the - fs_base and gs_base fields of user_regs_struct can be - used directly. */ - void *base; - - if (regnum == -1 || regnum == AMD64_FSBASE_REGNUM) - { - regcache->raw_collect (AMD64_FSBASE_REGNUM, &base); - - if (ptrace (PTRACE_ARCH_PRCTL, tid, base, ARCH_SET_FS) < 0) - perror_with_name (_("Couldn't write segment register fs_base")); - } - if (regnum == -1 || regnum == AMD64_GSBASE_REGNUM) - { - - regcache->raw_collect (AMD64_GSBASE_REGNUM, &base); - if (ptrace (PTRACE_ARCH_PRCTL, tid, base, ARCH_SET_GS) < 0) - perror_with_name (_("Couldn't write segment register gs_base")); - } - } -#endif } } @@ -383,7 +335,7 @@ ps_get_thread_area (struct ps_prochandle *ph, lwpid_t lwpid, int idx, void **base) { - if (gdbarch_bfd_arch_info (target_gdbarch ())->bits_per_word == 32) + if (gdbarch_bfd_arch_info (ph->thread->inf->gdbarch)->bits_per_word == 32) { unsigned int base_addr; ps_err_e result; @@ -408,11 +360,7 @@ switch (idx) { case FS: -#ifdef HAVE_STRUCT_USER_REGS_STRUCT_FS_BASE { - /* PTRACE_ARCH_PRCTL is obsolete since 2.6.25, where the - fs_base and gs_base fields of user_regs_struct can be - used directly. */ unsigned long fs; errno = 0; fs = ptrace (PTRACE_PEEKUSER, lwpid, @@ -423,12 +371,10 @@ return PS_OK; } } -#endif - if (ptrace (PTRACE_ARCH_PRCTL, lwpid, base, ARCH_GET_FS) == 0) - return PS_OK; + break; + case GS: -#ifdef HAVE_STRUCT_USER_REGS_STRUCT_GS_BASE { unsigned long gs; errno = 0; @@ -440,10 +386,8 @@ return PS_OK; } } -#endif - if (ptrace (PTRACE_ARCH_PRCTL, lwpid, base, ARCH_GET_GS) == 0) - return PS_OK; break; + default: /* Should not happen. */ return PS_BADADDR; } @@ -478,8 +422,9 @@ return false; } +void _initialize_amd64_linux_nat (); void -_initialize_amd64_linux_nat (void) +_initialize_amd64_linux_nat () { amd64_native_gregset32_reg_offset = amd64_linux_gregset32_reg_offset; amd64_native_gregset32_num_regs = I386_LINUX_NUM_REGS; diff -Nru gdb-9.1/gdb/amd64-linux-tdep.c gdb-10.2/gdb/amd64-linux-tdep.c --- gdb-9.1/gdb/amd64-linux-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/amd64-linux-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for GNU/Linux x86-64. - Copyright (C) 2001-2020 Free Software Foundation, Inc. + Copyright (C) 2001-2021 Free Software Foundation, Inc. Contributed by Jiri Smid, SuSE Labs. This file is part of GDB. @@ -1846,8 +1846,7 @@ set_gdbarch_process_record_signal (gdbarch, amd64_linux_record_signal); set_gdbarch_get_siginfo_type (gdbarch, x86_linux_get_siginfo_type); - set_gdbarch_handle_segmentation_fault (gdbarch, - i386_linux_handle_segmentation_fault); + set_gdbarch_report_signal_info (gdbarch, i386_linux_report_signal_info); } static void @@ -2272,8 +2271,9 @@ (gdbarch, svr4_ilp32_fetch_link_map_offsets); } +void _initialize_amd64_linux_tdep (); void -_initialize_amd64_linux_tdep (void) +_initialize_amd64_linux_tdep () { gdbarch_register_osabi (bfd_arch_i386, bfd_mach_x86_64, GDB_OSABI_LINUX, amd64_linux_init_abi); diff -Nru gdb-9.1/gdb/amd64-linux-tdep.h gdb-10.2/gdb/amd64-linux-tdep.h --- gdb-9.1/gdb/amd64-linux-tdep.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/amd64-linux-tdep.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for GNU/Linux AMD64. - Copyright (C) 2006-2020 Free Software Foundation, Inc. + Copyright (C) 2006-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/amd64-nat.c gdb-10.2/gdb/amd64-nat.c --- gdb-9.1/gdb/amd64-nat.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/amd64-nat.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Native-dependent code for AMD64. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -68,13 +68,6 @@ if (regnum >= num_regs) return -1; - /* Kernels that predate Linux 2.6.25 don't provide access to - these segment registers in user_regs_struct. */ -#ifndef HAVE_STRUCT_USER_REGS_STRUCT_FS_BASE - if (regnum == AMD64_FSBASE_REGNUM || regnum == AMD64_GSBASE_REGNUM) - return -1; -#endif - return reg_offset[regnum]; } diff -Nru gdb-9.1/gdb/amd64-nat.h gdb-10.2/gdb/amd64-nat.h --- gdb-9.1/gdb/amd64-nat.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/amd64-nat.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Native-dependent code for AMD64. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/amd64-nbsd-nat.c gdb-10.2/gdb/amd64-nbsd-nat.c --- gdb-9.1/gdb/amd64-nbsd-nat.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/amd64-nbsd-nat.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Native-dependent code for NetBSD/amd64. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -56,8 +56,9 @@ static amd64_bsd_nat_target the_amd64_nbsd_nat_target; +void _initialize_amd64nbsd_nat (); void -_initialize_amd64nbsd_nat (void) +_initialize_amd64nbsd_nat () { amd64_native_gregset32_reg_offset = amd64nbsd32_r_reg_offset; amd64_native_gregset32_num_regs = ARRAY_SIZE (amd64nbsd32_r_reg_offset); diff -Nru gdb-9.1/gdb/amd64-nbsd-tdep.c gdb-10.2/gdb/amd64-nbsd-tdep.c --- gdb-9.1/gdb/amd64-nbsd-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/amd64-nbsd-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for NetBSD/amd64. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -106,6 +106,7 @@ amd64_init_abi (info, gdbarch, amd64_target_description (X86_XSTATE_SSE_MASK, true)); + nbsd_init_abi (info, gdbarch); tdep->jb_pc_offset = 7 * 8; @@ -120,8 +121,9 @@ (gdbarch, svr4_lp64_fetch_link_map_offsets); } +void _initialize_amd64nbsd_tdep (); void -_initialize_amd64nbsd_tdep (void) +_initialize_amd64nbsd_tdep () { /* The NetBSD/amd64 native dependent code makes this assumption. */ gdb_assert (ARRAY_SIZE (amd64nbsd_r_reg_offset) == AMD64_NUM_GREGS); diff -Nru gdb-9.1/gdb/amd64-obsd-nat.c gdb-10.2/gdb/amd64-obsd-nat.c --- gdb-9.1/gdb/amd64-obsd-nat.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/amd64-obsd-nat.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Native-dependent code for OpenBSD/amd64. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -128,8 +128,9 @@ static amd64_bsd_nat_target the_amd64_obsd_nat_target; +void _initialize_amd64obsd_nat (); void -_initialize_amd64obsd_nat (void) +_initialize_amd64obsd_nat () { amd64_native_gregset32_reg_offset = amd64obsd32_r_reg_offset; amd64_native_gregset32_num_regs = ARRAY_SIZE (amd64obsd32_r_reg_offset); diff -Nru gdb-9.1/gdb/amd64-obsd-tdep.c gdb-10.2/gdb/amd64-obsd-tdep.c --- gdb-9.1/gdb/amd64-obsd-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/amd64-obsd-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for OpenBSD/amd64. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -448,8 +448,9 @@ frame_unwind_prepend_unwinder (gdbarch, &amd64obsd_trapframe_unwind); } +void _initialize_amd64obsd_tdep (); void -_initialize_amd64obsd_tdep (void) +_initialize_amd64obsd_tdep () { /* The OpenBSD/amd64 native dependent code makes this assumption. */ gdb_assert (ARRAY_SIZE (amd64obsd_r_reg_offset) == AMD64_NUM_GREGS); diff -Nru gdb-9.1/gdb/amd64-sol2-tdep.c gdb-10.2/gdb/amd64-sol2-tdep.c --- gdb-9.1/gdb/amd64-sol2-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/amd64-sol2-tdep.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for AMD64 Solaris. - Copyright (C) 2001-2020 Free Software Foundation, Inc. + Copyright (C) 2001-2021 Free Software Foundation, Inc. Contributed by Joseph Myers, CodeSourcery, LLC. @@ -63,21 +63,6 @@ }; -/* Return whether THIS_FRAME corresponds to a Solaris sigtramp - routine. */ - -static int -amd64_sol2_sigtramp_p (struct frame_info *this_frame) -{ - CORE_ADDR pc = get_frame_pc (this_frame); - const char *name; - - find_pc_partial_function (pc, &name, NULL, NULL); - return (name && (strcmp ("sigacthandler", name) == 0 - || strcmp (name, "ucbsigvechandler") == 0 - || strcmp (name, "__sighndlr") == 0)); -} - /* Solaris doesn't have a 'struct sigcontext', but it does have a 'mcontext_t' that contains the saved set of machine registers. */ @@ -104,22 +89,21 @@ amd64_init_abi (info, gdbarch, amd64_target_description (X86_XSTATE_SSE_MASK, true)); - tdep->sigtramp_p = amd64_sol2_sigtramp_p; + sol2_init_abi (info, gdbarch); + + tdep->sigtramp_p = sol2_sigtramp_p; tdep->sigcontext_addr = amd64_sol2_mcontext_addr; tdep->sc_reg_offset = tdep->gregset_reg_offset; tdep->sc_num_regs = tdep->gregset_num_regs; /* Solaris uses SVR4-style shared libraries. */ - set_gdbarch_skip_solib_resolver (gdbarch, sol2_skip_solib_resolver); set_solib_svr4_fetch_link_map_offsets (gdbarch, svr4_lp64_fetch_link_map_offsets); - - /* How to print LWP PTIDs from core files. */ - set_gdbarch_core_pid_to_str (gdbarch, sol2_core_pid_to_str); } +void _initialize_amd64_sol2_tdep (); void -_initialize_amd64_sol2_tdep (void) +_initialize_amd64_sol2_tdep () { gdbarch_register_osabi (bfd_arch_i386, bfd_mach_x86_64, GDB_OSABI_SOLARIS, amd64_sol2_init_abi); diff -Nru gdb-9.1/gdb/amd64-tdep.c gdb-10.2/gdb/amd64-tdep.c --- gdb-9.1/gdb/amd64-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/amd64-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for AMD64. - Copyright (C) 2001-2020 Free Software Foundation, Inc. + Copyright (C) 2001-2021 Free Software Foundation, Inc. Contributed by Jiri Smid, SuSE Labs. @@ -546,19 +546,19 @@ static bool amd64_has_unaligned_fields (struct type *type) { - if (TYPE_CODE (type) == TYPE_CODE_STRUCT - || TYPE_CODE (type) == TYPE_CODE_UNION) + if (type->code () == TYPE_CODE_STRUCT + || type->code () == TYPE_CODE_UNION) { - for (int i = 0; i < TYPE_NFIELDS (type); i++) + for (int i = 0; i < type->num_fields (); i++) { - struct type *subtype = check_typedef (TYPE_FIELD_TYPE (type, i)); + struct type *subtype = check_typedef (type->field (i).type ()); int bitpos = TYPE_FIELD_BITPOS (type, i); int align = type_align(subtype); /* Ignore static fields, empty fields (for example nested empty structures), and bitfields (these are handled by the caller). */ - if (field_is_static (&TYPE_FIELD (type, i)) + if (field_is_static (&type->field (i)) || (TYPE_FIELD_BITSIZE (type, i) == 0 && TYPE_LENGTH (subtype) == 0) || TYPE_FIELD_PACKED (type, i)) @@ -587,7 +587,7 @@ enum amd64_reg_class theclass[2], unsigned int bitoffset) { - struct type *subtype = check_typedef (TYPE_FIELD_TYPE (type, i)); + struct type *subtype = check_typedef (type->field (i).type ()); int bitpos = bitoffset + TYPE_FIELD_BITPOS (type, i); int pos = bitpos / 64; enum amd64_reg_class subclass[2]; @@ -600,15 +600,15 @@ /* Ignore static fields, or empty fields, for example nested empty structures.*/ - if (field_is_static (&TYPE_FIELD (type, i)) || bitsize == 0) + if (field_is_static (&type->field (i)) || bitsize == 0) return; - if (TYPE_CODE (subtype) == TYPE_CODE_STRUCT - || TYPE_CODE (subtype) == TYPE_CODE_UNION) + if (subtype->code () == TYPE_CODE_STRUCT + || subtype->code () == TYPE_CODE_UNION) { /* Each field of an object is classified recursively. */ int j; - for (j = 0; j < TYPE_NFIELDS (subtype); j++) + for (j = 0; j < subtype->num_fields (); j++) amd64_classify_aggregate_field (subtype, j, theclass, bitpos); return; } @@ -667,7 +667,7 @@ calculated according to the classes of the fields in the eightbyte: */ - if (TYPE_CODE (type) == TYPE_CODE_ARRAY) + if (type->code () == TYPE_CODE_ARRAY) { struct type *subtype = check_typedef (TYPE_TARGET_TYPE (type)); @@ -681,10 +681,10 @@ int i; /* Structure or union. */ - gdb_assert (TYPE_CODE (type) == TYPE_CODE_STRUCT - || TYPE_CODE (type) == TYPE_CODE_UNION); + gdb_assert (type->code () == TYPE_CODE_STRUCT + || type->code () == TYPE_CODE_UNION); - for (i = 0; i < TYPE_NFIELDS (type); i++) + for (i = 0; i < type->num_fields (); i++) amd64_classify_aggregate_field (type, i, theclass, 0); } @@ -708,7 +708,7 @@ static void amd64_classify (struct type *type, enum amd64_reg_class theclass[2]) { - enum type_code code = TYPE_CODE (type); + enum type_code code = type->code (); int len = TYPE_LENGTH (type); theclass[0] = theclass[1] = AMD64_NO_CLASS; @@ -1465,7 +1465,7 @@ } } -struct displaced_step_closure * +displaced_step_closure_up amd64_displaced_step_copy_insn (struct gdbarch *gdbarch, CORE_ADDR from, CORE_ADDR to, struct regcache *regs) @@ -1474,8 +1474,8 @@ /* Extra space for sentinels so fixup_{riprel,displaced_copy} don't have to continually watch for running off the end of the buffer. */ int fixup_sentinel_space = len; - amd64_displaced_step_closure *dsc - = new amd64_displaced_step_closure (len + fixup_sentinel_space); + std::unique_ptr dsc + (new amd64_displaced_step_closure (len + fixup_sentinel_space)); gdb_byte *buf = &dsc->insn_buf[0]; struct amd64_insn *details = &dsc->insn_details; @@ -1500,7 +1500,7 @@ /* Modify the insn to cope with the address where it will be executed from. In particular, handle any rip-relative addressing. */ - fixup_displaced_copy (gdbarch, dsc, from, to, regs); + fixup_displaced_copy (gdbarch, dsc.get (), from, to, regs); write_memory (to, buf, len); @@ -1511,7 +1511,8 @@ displaced_step_dump_bytes (gdb_stdlog, buf, len); } - return dsc; + /* This is a work around for a problem with g++ 4.8. */ + return displaced_step_closure_up (dsc.release ()); } static int @@ -2361,6 +2362,9 @@ pushq %rbp 0x55 movl %esp, %ebp 0x89 0xe5 (or 0x8b 0xec) + The `endbr64` instruction can be found before these sequences, and will be + skipped if found. + Any function that doesn't start with one of these sequences will be assumed to have no prologue and thus no valid frame pointer in %rbp. */ @@ -2371,6 +2375,8 @@ struct amd64_frame_cache *cache) { enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); + /* The `endbr64` instruction. */ + static const gdb_byte endbr64[4] = { 0xf3, 0x0f, 0x1e, 0xfa }; /* There are two variations of movq %rsp, %rbp. */ static const gdb_byte mov_rsp_rbp_1[3] = { 0x48, 0x89, 0xe5 }; static const gdb_byte mov_rsp_rbp_2[3] = { 0x48, 0x8b, 0xec }; @@ -2391,6 +2397,20 @@ op = read_code_unsigned_integer (pc, 1, byte_order); + /* Check for the `endbr64` instruction, skip it if found. */ + if (op == endbr64[0]) + { + read_code (pc + 1, buf, 3); + + if (memcmp (buf, &endbr64[1], 3) == 0) + pc += 4; + + op = read_code_unsigned_integer (pc, 1, byte_order); + } + + if (current_pc <= pc) + return current_pc; + if (op == 0x55) /* pushq %rbp */ { /* Take into account that we've executed the `pushq %rbp' that @@ -2413,7 +2433,7 @@ return pc + 4; } - /* For X32, also check for `movq %esp, %ebp'. */ + /* For X32, also check for `movl %esp, %ebp'. */ if (gdbarch_ptr_bit (gdbarch) == 32) { if (memcmp (buf, mov_esp_ebp_1, 2) == 0 @@ -2527,12 +2547,13 @@ = skip_prologue_using_sal (gdbarch, func_addr); struct compunit_symtab *cust = find_pc_compunit_symtab (func_addr); - /* Clang always emits a line note before the prologue and another - one after. We trust clang to emit usable line notes. */ + /* LLVM backend (Clang/Flang) always emits a line note before the + prologue and another one after. We trust clang to emit usable + line notes. */ if (post_prologue_pc && (cust != NULL && COMPUNIT_PRODUCER (cust) != NULL - && startswith (COMPUNIT_PRODUCER (cust), "clang "))) + && producer_is_llvm (COMPUNIT_PRODUCER (cust)))) return std::max (start_pc, post_prologue_pc); } @@ -3334,8 +3355,9 @@ return *tdesc; } +void _initialize_amd64_tdep (); void -_initialize_amd64_tdep (void) +_initialize_amd64_tdep () { gdbarch_register_osabi (bfd_arch_i386, bfd_mach_x86_64, GDB_OSABI_NONE, amd64_none_init_abi); diff -Nru gdb-9.1/gdb/amd64-tdep.h gdb-10.2/gdb/amd64-tdep.h --- gdb-9.1/gdb/amd64-tdep.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/amd64-tdep.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent definitions for AMD64. - Copyright (C) 2001-2020 Free Software Foundation, Inc. + Copyright (C) 2001-2021 Free Software Foundation, Inc. Contributed by Jiri Smid, SuSE Labs. This file is part of GDB. @@ -26,6 +26,7 @@ struct regcache; #include "i386-tdep.h" +#include "infrun.h" /* Register numbers of various important registers. */ @@ -87,7 +88,7 @@ #define AMD64_NUM_REGS (AMD64_GSBASE_REGNUM + 1) -extern struct displaced_step_closure *amd64_displaced_step_copy_insn +extern displaced_step_closure_up amd64_displaced_step_copy_insn (struct gdbarch *gdbarch, CORE_ADDR from, CORE_ADDR to, struct regcache *regs); extern void amd64_displaced_step_fixup (struct gdbarch *gdbarch, diff -Nru gdb-9.1/gdb/amd64-windows-nat.c gdb-10.2/gdb/amd64-windows-nat.c --- gdb-9.1/gdb/amd64-windows-nat.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/amd64-windows-nat.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2008-2020 Free Software Foundation, Inc. +/* Copyright (C) 2008-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -23,7 +23,7 @@ #include #define context_offset(x) (offsetof (CONTEXT, x)) -static const int mappings[] = +const int amd64_mappings[] = { context_offset (Rax), context_offset (Rbx), @@ -89,16 +89,15 @@ /* segment_register_p_ftype implementation for amd64. */ -static int +int amd64_windows_segment_register_p (int regnum) { return regnum >= AMD64_CS_REGNUM && regnum <= AMD64_GS_REGNUM; } +void _initialize_amd64_windows_nat (); void -_initialize_amd64_windows_nat (void) +_initialize_amd64_windows_nat () { - windows_set_context_register_offsets (mappings); - windows_set_segment_register_p (amd64_windows_segment_register_p); x86_set_debug_register_length (8); } diff -Nru gdb-9.1/gdb/amd64-windows-tdep.c gdb-10.2/gdb/amd64-windows-tdep.c --- gdb-9.1/gdb/amd64-windows-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/amd64-windows-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2009-2020 Free Software Foundation, Inc. +/* Copyright (C) 2009-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -48,7 +48,7 @@ static int amd64_windows_passed_by_integer_register (struct type *type) { - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_INT: case TYPE_CODE_ENUM: @@ -76,8 +76,8 @@ static int amd64_windows_passed_by_xmm_register (struct type *type) { - return ((TYPE_CODE (type) == TYPE_CODE_FLT - || TYPE_CODE (type) == TYPE_CODE_DECFLOAT) + return ((type->code () == TYPE_CODE_FLT + || type->code () == TYPE_CODE_DECFLOAT) && (TYPE_LENGTH (type) == 4 || TYPE_LENGTH (type) == 8)); } @@ -296,7 +296,7 @@ /* See if our value is returned through a register. If it is, then store the associated register number in REGNUM. */ - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_FLT: case TYPE_CODE_DECFLOAT: @@ -953,8 +953,7 @@ pe = pe_data (sec->objfile->obfd); dir = &pe->pe_opthdr.DataDirectory[PE_EXCEPTION_TABLE]; - base = pe->pe_opthdr.ImageBase - + ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile)); + base = pe->pe_opthdr.ImageBase + objfile->text_section_offset (); *image_base = base; /* Find the entry. @@ -1209,8 +1208,10 @@ return "UTF-16"; } +/* Common parts for gdbarch initialization for Windows and Cygwin on AMD64. */ + static void -amd64_windows_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) +amd64_windows_init_abi_common (gdbarch_info info, struct gdbarch *gdbarch) { /* The dwarf2 unwinder (appended very early by i386_gdbarch_init) is preferred over the SEH one. The reasons are: @@ -1228,11 +1229,6 @@ amd64_init_abi (info, gdbarch, amd64_target_description (X86_XSTATE_SSE_MASK, false)); - windows_init_abi (info, gdbarch); - - /* On Windows, "long"s are only 32bit. */ - set_gdbarch_long_bit (gdbarch, 32); - /* Function calls. */ set_gdbarch_push_dummy_call (gdbarch, amd64_windows_push_dummy_call); set_gdbarch_return_value (gdbarch, amd64_windows_return_value); @@ -1245,9 +1241,50 @@ set_gdbarch_auto_wide_charset (gdbarch, amd64_windows_auto_wide_charset); } +/* gdbarch initialization for Windows on AMD64. */ + +static void +amd64_windows_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) +{ + amd64_windows_init_abi_common (info, gdbarch); + windows_init_abi (info, gdbarch); + + /* On Windows, "long"s are only 32bit. */ + set_gdbarch_long_bit (gdbarch, 32); +} + +/* gdbarch initialization for Cygwin on AMD64. */ + +static void +amd64_cygwin_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) +{ + amd64_windows_init_abi_common (info, gdbarch); + cygwin_init_abi (info, gdbarch); +} + +static gdb_osabi +amd64_windows_osabi_sniffer (bfd *abfd) +{ + const char *target_name = bfd_get_target (abfd); + + if (!streq (target_name, "pei-x86-64")) + return GDB_OSABI_UNKNOWN; + + if (is_linked_with_cygwin_dll (abfd)) + return GDB_OSABI_CYGWIN; + + return GDB_OSABI_WINDOWS; +} + +void _initialize_amd64_windows_tdep (); void -_initialize_amd64_windows_tdep (void) +_initialize_amd64_windows_tdep () { - gdbarch_register_osabi (bfd_arch_i386, bfd_mach_x86_64, GDB_OSABI_CYGWIN, + gdbarch_register_osabi (bfd_arch_i386, bfd_mach_x86_64, GDB_OSABI_WINDOWS, amd64_windows_init_abi); + gdbarch_register_osabi (bfd_arch_i386, bfd_mach_x86_64, GDB_OSABI_CYGWIN, + amd64_cygwin_init_abi); + + gdbarch_register_osabi_sniffer (bfd_arch_i386, bfd_target_coff_flavour, + amd64_windows_osabi_sniffer); } diff -Nru gdb-9.1/gdb/annotate.c gdb-10.2/gdb/annotate.c --- gdb-9.1/gdb/annotate.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/annotate.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Annotation routines for GDB. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -435,7 +435,7 @@ /* See annotate.h. */ -void +bool annotate_source_line (struct symtab *s, int line, int mid_statement, CORE_ADDR pc) { @@ -443,16 +443,25 @@ { const std::vector *offsets; if (!g_source_cache.get_line_charpos (s, &offsets)) - return; - - /* Don't index off the end of the line_charpos array. */ + return false; if (line > offsets->size ()) - return; + return false; annotate_source (s->fullname, line, (int) (*offsets)[line - 1], - mid_statement, get_objfile_arch (SYMTAB_OBJFILE (s)), + mid_statement, SYMTAB_OBJFILE (s)->arch (), pc); + + /* Update the current symtab and line. */ + symtab_and_line sal; + sal.pspace = SYMTAB_PSPACE (s); + sal.symtab = s; + sal.line = line; + set_current_source_symtab_and_line (sal); + + return true; } + + return false; } @@ -614,8 +623,9 @@ annotate_breakpoints_invalid (); } +void _initialize_annotate (); void -_initialize_annotate (void) +_initialize_annotate () { gdb::observers::breakpoint_created.attach (breakpoint_changed); gdb::observers::breakpoint_deleted.attach (breakpoint_changed); diff -Nru gdb-9.1/gdb/annotate.h gdb-10.2/gdb/annotate.h --- gdb-9.1/gdb/annotate.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/annotate.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Annotation routines for GDB. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -92,8 +92,20 @@ character position. MID_STATEMENT is nonzero if the PC is not at the beginning of that - line. */ -extern void annotate_source_line (struct symtab *s, int line, + line. + + The current symtab and line is updated to reflect S and LINE. + + Return true if the annotation was printed and the current symtab and + line were updated, otherwise return false, which can happen if the + source file for S can't be found, or LINE is out of range. + + This does leave GDB in the weird situation where, even when annotations + are on, we only sometimes print the annotation, and only sometimes + update the current symtab and line. However, this particular annotation + has behaved this way for some time, and front ends that still use + annotations now depend on this behaviour. */ +extern bool annotate_source_line (struct symtab *s, int line, int mid_statement, CORE_ADDR pc); extern void annotate_frame_begin (int, struct gdbarch *, CORE_ADDR); diff -Nru gdb-9.1/gdb/arch/aarch32.c gdb-10.2/gdb/arch/aarch32.c --- gdb-9.1/gdb/arch/aarch32.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/arch/aarch32.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2019-2020 Free Software Foundation, Inc. +/* Copyright (C) 2019-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/arch/aarch32.h gdb-10.2/gdb/arch/aarch32.h --- gdb-9.1/gdb/arch/aarch32.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/arch/aarch32.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2019-2020 Free Software Foundation, Inc. +/* Copyright (C) 2019-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/arch/aarch64.c gdb-10.2/gdb/arch/aarch64.c --- gdb-9.1/gdb/arch/aarch64.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/arch/aarch64.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2017-2020 Free Software Foundation, Inc. +/* Copyright (C) 2017-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/arch/aarch64.h gdb-10.2/gdb/arch/aarch64.h --- gdb-9.1/gdb/arch/aarch64.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/arch/aarch64.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Common target-dependent functionality for AArch64. - Copyright (C) 2017-2020 Free Software Foundation, Inc. + Copyright (C) 2017-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/arch/aarch64-insn.c gdb-10.2/gdb/arch/aarch64-insn.c --- gdb-9.1/gdb/arch/aarch64-insn.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/arch/aarch64-insn.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2009-2020 Free Software Foundation, Inc. +/* Copyright (C) 2009-2021 Free Software Foundation, Inc. Contributed by ARM Ltd. This file is part of GDB. diff -Nru gdb-9.1/gdb/arch/aarch64-insn.h gdb-10.2/gdb/arch/aarch64-insn.h --- gdb-9.1/gdb/arch/aarch64-insn.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/arch/aarch64-insn.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2009-2020 Free Software Foundation, Inc. +/* Copyright (C) 2009-2021 Free Software Foundation, Inc. Contributed by ARM Ltd. This file is part of GDB. diff -Nru gdb-9.1/gdb/arch/amd64.c gdb-10.2/gdb/arch/amd64.c --- gdb-9.1/gdb/arch/amd64.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/arch/amd64.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2017-2020 Free Software Foundation, Inc. +/* Copyright (C) 2017-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/arch/amd64.h gdb-10.2/gdb/arch/amd64.h --- gdb-9.1/gdb/arch/amd64.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/arch/amd64.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2017-2020 Free Software Foundation, Inc. +/* Copyright (C) 2017-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/arch/arc.c gdb-10.2/gdb/arch/arc.c --- gdb-9.1/gdb/arch/arc.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/arch/arc.c 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,123 @@ +/* Copyright (C) 2017-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + + +#include "gdbsupport/common-defs.h" +#include "arc.h" +#include +#include +#include + +/* Target description features. */ +#include "features/arc/v1-core.c" +#include "features/arc/v1-aux.c" +#include "features/arc/v2-core.c" +#include "features/arc/v2-aux.c" + +#ifndef GDBSERVER +#define STATIC_IN_GDB static +#else +#define STATIC_IN_GDB +#endif + +STATIC_IN_GDB target_desc * +arc_create_target_description (const struct arc_arch_features &features) +{ + /* Create a new target description. */ + target_desc *tdesc = allocate_target_description (); + +#ifndef IN_PROCESS_AGENT + std::string arch_name; + + /* Architecture names here must match the ones in + ARCH_INFO_STRUCT in bfd/cpu-arc.c. */ + if (features.isa == ARC_ISA_ARCV1 && features.reg_size == 4) + arch_name = "arc:ARC700"; + else if (features.isa == ARC_ISA_ARCV2 && features.reg_size == 4) + arch_name = "arc:ARCv2"; + else + { + std::string msg = string_printf + ("Cannot determine architecture: ISA=%d; bitness=%d", + features.isa, 8 * features.reg_size); + gdb_assert_not_reached (msg.c_str ()); + } + + set_tdesc_architecture (tdesc, arch_name.c_str ()); +#endif + + long regnum = 0; + + switch (features.isa) + { + case ARC_ISA_ARCV1: + regnum = create_feature_arc_v1_core (tdesc, regnum); + regnum = create_feature_arc_v1_aux (tdesc, regnum); + break; + case ARC_ISA_ARCV2: + regnum = create_feature_arc_v2_core (tdesc, regnum); + regnum = create_feature_arc_v2_aux (tdesc, regnum); + break; + default: + std::string msg = string_printf + ("Cannot choose target description XML: %d", features.isa); + gdb_assert_not_reached (msg.c_str ()); + } + + return tdesc; +} + +#ifndef GDBSERVER + +/* Wrapper used by std::unordered_map to generate hash for features set. */ +struct arc_arch_features_hasher +{ + std::size_t + operator() (const arc_arch_features &features) const noexcept + { + return features.hash (); + } +}; + +/* Cache of previously created target descriptions, indexed by the hash + of the features set used to create them. */ +static std::unordered_map arc_tdesc_cache; + +/* See arch/arc.h. */ + +const target_desc * +arc_lookup_target_description (const struct arc_arch_features &features) +{ + /* Lookup in the cache first. If found, return the pointer from the + "target_desc_up" type which is a "unique_ptr". This should be fine + as the "arc_tdesc_cache" will persist until GDB terminates. */ + const auto it = arc_tdesc_cache.find (features); + if (it != arc_tdesc_cache.end ()) + return it->second.get (); + + target_desc *tdesc = arc_create_target_description (features); + + /* Add the newly created target description to the repertoire. + PR build/27385: Use "target_desc_up ()" ctor explicitly. */ + arc_tdesc_cache.emplace (features, target_desc_up (tdesc)); + + return tdesc; +} + +#endif /* !GDBSERVER */ diff -Nru gdb-9.1/gdb/arch/arc.h gdb-10.2/gdb/arch/arc.h --- gdb-9.1/gdb/arch/arc.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/arch/arc.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,87 @@ +/* Copyright (C) 2017-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifndef ARCH_ARC_H +#define ARCH_ARC_H + +#include "gdbsupport/tdesc.h" + +/* Supported ARC ISAs. */ +enum arc_isa +{ + ARC_ISA_ARCV1 = 1, /* a.k.a. ARCompact (ARC600, ARC700) */ + ARC_ISA_ARCV2 /* such as ARC EM and ARC HS */ +}; + +struct arc_arch_features +{ + arc_arch_features (int reg_size, arc_isa isa) + : reg_size (reg_size), isa (isa) + {} + + /* Register size in bytes. Possible values are 4, and 8. A 0 indicates + an uninitialised value. */ + const int reg_size; + + /* See ARC_ISA enum. */ + const arc_isa isa; + + /* Equality operator. */ + bool operator== (const struct arc_arch_features &rhs) const + { + return (reg_size == rhs.reg_size && isa == rhs.isa); + } + + /* Inequality operator. */ + bool operator!= (const struct arc_arch_features &rhs) const + { + return !(*this == rhs); + } + + /* Used by std::unordered_map to hash the feature sets. The hash is + calculated in the manner below: + REG_SIZE | ISA + 5-bits | 4-bits */ + + std::size_t hash () const noexcept + { + std::size_t val = ((reg_size & 0x1f) << 8 | (isa & 0xf) << 0); + return val; + } +}; + +#ifdef GDBSERVER + +/* Create and return a target description that is compatible with FEATURES. + The only external client of this must be the gdbserver which manipulates + the returned data. */ + +target_desc *arc_create_target_description + (const struct arc_arch_features &features); + +#else + +/* Lookup the cache for a target description matching the FEATURES. + If nothing is found, then create one and return it. */ + +const target_desc *arc_lookup_target_description + (const struct arc_arch_features &features); + +#endif /* GDBSERVER */ + + +#endif /* ARCH_ARC_H */ diff -Nru gdb-9.1/gdb/arch/arm.c gdb-10.2/gdb/arch/arm.c --- gdb-9.1/gdb/arch/arm.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/arch/arm.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Common target dependent code for GDB on ARM systems. - Copyright (C) 1988-2020 Free Software Foundation, Inc. + Copyright (C) 1988-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -40,17 +40,6 @@ } /* See arm.h. */ - -int -bitcount (unsigned long val) -{ - int nbits; - for (nbits = 0; val != 0; nbits++) - val &= val - 1; /* Delete rightmost 1-bit in val. */ - return nbits; -} - -/* See arm.h. */ int condition_true (unsigned long cond, unsigned long status_reg) diff -Nru gdb-9.1/gdb/arch/arm-get-next-pcs.c gdb-10.2/gdb/arch/arm-get-next-pcs.c --- gdb-9.1/gdb/arch/arm-get-next-pcs.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/arch/arm-get-next-pcs.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Common code for ARM software single stepping support. - Copyright (C) 1988-2020 Free Software Foundation, Inc. + Copyright (C) 1988-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -22,6 +22,7 @@ #include "gdbsupport/common-regcache.h" #include "arm.h" #include "arm-get-next-pcs.h" +#include "count-one-bits.h" /* See arm-get-next-pcs.h. */ @@ -408,8 +409,8 @@ /* Fetch the saved PC from the stack. It's stored above all of the other registers. */ - unsigned long offset = bitcount (bits (inst1, 0, 7)) - * ARM_INT_REGISTER_SIZE; + unsigned long offset + = count_one_bits (bits (inst1, 0, 7)) * ARM_INT_REGISTER_SIZE; sp = regcache_raw_get_unsigned (regcache, ARM_SP_REGNUM); nextpc = self->ops->read_mem_uint (sp + offset, 4, byte_order); } @@ -496,7 +497,7 @@ /* LDMIA or POP */ if (!bit (inst2, 15)) load_pc = 0; - offset = bitcount (inst2) * 4 - 4; + offset = count_one_bits (inst2) * 4 - 4; } else if (!bit (inst1, 7) && bit (inst1, 8)) { @@ -864,7 +865,7 @@ { /* up */ unsigned long reglist = bits (this_instr, 0, 14); - offset = bitcount (reglist) * 4; + offset = count_one_bits_l (reglist) * 4; if (bit (this_instr, 24)) /* pre */ offset += 4; } diff -Nru gdb-9.1/gdb/arch/arm-get-next-pcs.h gdb-10.2/gdb/arch/arm-get-next-pcs.h --- gdb-9.1/gdb/arch/arm-get-next-pcs.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/arch/arm-get-next-pcs.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Common code for ARM software single stepping support. - Copyright (C) 1988-2020 Free Software Foundation, Inc. + Copyright (C) 1988-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/arch/arm.h gdb-10.2/gdb/arch/arm.h --- gdb-9.1/gdb/arch/arm.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/arch/arm.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Common target dependent code for GDB on ARM systems. - Copyright (C) 1988-2020 Free Software Foundation, Inc. + Copyright (C) 1988-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -31,6 +31,7 @@ ARM_SP_REGNUM = 13, /* Contains address of top of stack */ ARM_LR_REGNUM = 14, /* address to return to from a function call */ ARM_PC_REGNUM = 15, /* Contains program counter */ + /* F0..F7 are the fp registers for the (obsolete) FPA architecture. */ ARM_F0_REGNUM = 16, /* first floating point register */ ARM_F3_REGNUM = 19, /* last floating point argument register */ ARM_F7_REGNUM = 23, /* last floating point register */ @@ -159,9 +160,6 @@ /* Returns true if the condition evaluates to true. */ int condition_true (unsigned long cond, unsigned long status_reg); -/* Return number of 1-bits in VAL. */ -int bitcount (unsigned long val); - /* Return 1 if THIS_INSTR might change control flow, 0 otherwise. */ int arm_instruction_changes_pc (uint32_t this_instr); diff -Nru gdb-9.1/gdb/arch/arm-linux.c gdb-10.2/gdb/arch/arm-linux.c --- gdb-9.1/gdb/arch/arm-linux.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/arch/arm-linux.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Common target dependent code for GNU/Linux on ARM systems. - Copyright (C) 1999-2020 Free Software Foundation, Inc. + Copyright (C) 1999-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/arch/arm-linux.h gdb-10.2/gdb/arch/arm-linux.h --- gdb-9.1/gdb/arch/arm-linux.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/arch/arm-linux.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Common target dependent code for GNU/Linux on ARM systems. - Copyright (C) 1999-2020 Free Software Foundation, Inc. + Copyright (C) 1999-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/arch/i386.c gdb-10.2/gdb/arch/i386.c --- gdb-9.1/gdb/arch/i386.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/arch/i386.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2017-2020 Free Software Foundation, Inc. +/* Copyright (C) 2017-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/arch/i386.h gdb-10.2/gdb/arch/i386.h --- gdb-9.1/gdb/arch/i386.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/arch/i386.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2017-2020 Free Software Foundation, Inc. +/* Copyright (C) 2017-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/arch/ppc-linux-common.c gdb-10.2/gdb/arch/ppc-linux-common.c --- gdb-9.1/gdb/arch/ppc-linux-common.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/arch/ppc-linux-common.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Common target dependent code for GNU/Linux on PPC systems. - Copyright (C) 2018-2020 Free Software Foundation, Inc. + Copyright (C) 2018-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/arch/ppc-linux-common.h gdb-10.2/gdb/arch/ppc-linux-common.h --- gdb-9.1/gdb/arch/ppc-linux-common.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/arch/ppc-linux-common.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Common target dependent code for GNU/Linux on PPC systems. - Copyright (C) 2018-2020 Free Software Foundation, Inc. + Copyright (C) 2018-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/arch/ppc-linux-tdesc.h gdb-10.2/gdb/arch/ppc-linux-tdesc.h --- gdb-9.1/gdb/arch/ppc-linux-tdesc.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/arch/ppc-linux-tdesc.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Target description declarations shared between gdb, gdbserver and IPA. - Copyright (C) 2018-2020 Free Software Foundation, Inc. + Copyright (C) 2018-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/arch/riscv.c gdb-10.2/gdb/arch/riscv.c --- gdb-9.1/gdb/arch/riscv.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/arch/riscv.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2018-2020 Free Software Foundation, Inc. +/* Copyright (C) 2018-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -25,37 +25,17 @@ #include "../features/riscv/32bit-fpu.c" #include "../features/riscv/64bit-fpu.c" -/* Wrapper used by std::unordered_map to generate hash for feature set. */ -struct riscv_gdbarch_features_hasher -{ - std::size_t - operator() (const riscv_gdbarch_features &features) const noexcept - { - return features.hash (); - } -}; - -/* Cache of previously seen target descriptions, indexed by the feature set - that created them. */ -static std::unordered_map riscv_tdesc_cache; +#ifndef GDBSERVER +#define STATIC_IN_GDB static +#else +#define STATIC_IN_GDB +#endif /* See arch/riscv.h. */ -const target_desc * -riscv_create_target_description (struct riscv_gdbarch_features features) +STATIC_IN_GDB target_desc * +riscv_create_target_description (const struct riscv_gdbarch_features features) { - /* Have we seen this feature set before? If we have return the same - target description. GDB expects that if two target descriptions are - the same (in content terms) then they will actually be the same - instance. This is important when trying to lookup gdbarch objects as - GDBARCH_LIST_LOOKUP_BY_INFO performs a pointer comparison on target - descriptions to find candidate gdbarch objects. */ - const auto it = riscv_tdesc_cache.find (features); - if (it != riscv_tdesc_cache.end ()) - return it->second; - /* Now we should create a new target description. */ target_desc *tdesc = allocate_target_description (); @@ -93,8 +73,46 @@ else if (features.flen == 8) regnum = create_feature_riscv_64bit_fpu (tdesc, regnum); - /* Add to the cache. */ - riscv_tdesc_cache.emplace (features, tdesc); + return tdesc; +} + +#ifndef GDBSERVER + +/* Wrapper used by std::unordered_map to generate hash for feature set. */ +struct riscv_gdbarch_features_hasher +{ + std::size_t + operator() (const riscv_gdbarch_features &features) const noexcept + { + return features.hash (); + } +}; + +/* Cache of previously seen target descriptions, indexed by the feature set + that created them. */ +static std::unordered_map riscv_tdesc_cache; + +/* See arch/riscv.h. */ + +const target_desc * +riscv_lookup_target_description (const struct riscv_gdbarch_features features) +{ + /* Lookup in the cache. If we find it then return the pointer out of + the target_desc_up (which is a unique_ptr). This is safe as the + riscv_tdesc_cache will exist until GDB exits. */ + const auto it = riscv_tdesc_cache.find (features); + if (it != riscv_tdesc_cache.end ()) + return it->second.get (); + + target_desc *tdesc = riscv_create_target_description (features); + + /* Add to the cache. Work around a problem with g++ 4.8 (PR96537): + Call the target_desc_up constructor explictly instead of implicitly. */ + riscv_tdesc_cache.emplace (features, target_desc_up (tdesc)); return tdesc; } + +#endif /* !GDBSERVER */ diff -Nru gdb-9.1/gdb/arch/riscv.h gdb-10.2/gdb/arch/riscv.h --- gdb-9.1/gdb/arch/riscv.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/arch/riscv.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Common target-dependent functionality for RISC-V - Copyright (C) 2018-2020 Free Software Foundation, Inc. + Copyright (C) 2018-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -66,10 +66,28 @@ } }; -/* Create and return a target description that is compatible with - FEATURES. */ +#ifdef GDBSERVER + +/* Create and return a target description that is compatible with FEATURES. + This is only used directly from the gdbserver where the created target + description is modified after it is return. */ + +target_desc *riscv_create_target_description + (const struct riscv_gdbarch_features features); + +#else + +/* Lookup an already existing target description matching FEATURES, or + create a new target description if this is the first time we have seen + FEATURES. For the same FEATURES the same target_desc is always + returned. This is important when trying to lookup gdbarch objects as + GDBARCH_LIST_LOOKUP_BY_INFO performs a pointer comparison on target + descriptions to find candidate gdbarch objects. */ + +const target_desc *riscv_lookup_target_description + (const struct riscv_gdbarch_features features); + +#endif /* GDBSERVER */ -const target_desc *riscv_create_target_description - (struct riscv_gdbarch_features features); #endif /* ARCH_RISCV_H */ diff -Nru gdb-9.1/gdb/arch/tic6x.c gdb-10.2/gdb/arch/tic6x.c --- gdb-9.1/gdb/arch/tic6x.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/arch/tic6x.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2017-2020 Free Software Foundation, Inc. +/* Copyright (C) 2017-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/arch/tic6x.h gdb-10.2/gdb/arch/tic6x.h --- gdb-9.1/gdb/arch/tic6x.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/arch/tic6x.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2017-2020 Free Software Foundation, Inc. +/* Copyright (C) 2017-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/arch/xtensa.h gdb-10.2/gdb/arch/xtensa.h --- gdb-9.1/gdb/arch/xtensa.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/arch/xtensa.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Common Target-dependent code for the Xtensa port of GDB, the GNU debugger. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/arch-utils.c gdb-10.2/gdb/arch-utils.c --- gdb-9.1/gdb/arch-utils.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/arch-utils.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Dynamic architecture support for GDB, the GNU debugger. - Copyright (C) 1998-2020 Free Software Foundation, Inc. + Copyright (C) 1998-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -317,17 +317,17 @@ if (target_byte_order_user == BFD_ENDIAN_UNKNOWN) if (gdbarch_byte_order (get_current_arch ()) == BFD_ENDIAN_BIG) fprintf_unfiltered (file, _("The target endianness is set automatically " - "(currently big endian)\n")); + "(currently big endian).\n")); else fprintf_unfiltered (file, _("The target endianness is set automatically " - "(currently little endian)\n")); + "(currently little endian).\n")); else if (target_byte_order_user == BFD_ENDIAN_BIG) fprintf_unfiltered (file, - _("The target is assumed to be big endian\n")); + _("The target is set to big endian.\n")); else fprintf_unfiltered (file, - _("The target is assumed to be little endian\n")); + _("The target is set to little endian.\n")); } static void @@ -476,11 +476,11 @@ struct cmd_list_element *c, const char *value) { if (target_architecture_user == NULL) - fprintf_filtered (file, _("The target architecture is set " - "automatically (currently %s)\n"), + fprintf_filtered (file, _("The target architecture is set to " + "\"auto\" (currently \"%s\").\n"), gdbarch_bfd_arch_info (get_current_arch ())->printable_name); else - fprintf_filtered (file, _("The target architecture is assumed to be %s\n"), + fprintf_filtered (file, _("The target architecture is set to \"%s\".\n"), set_architecture_string); } @@ -858,7 +858,7 @@ /* Usually, the return value's address is stored the in the "first hidden" parameter if the return value should be passed by reference, as specified in ABI. */ - return language_pass_by_reference (type); + return !(language_pass_by_reference (type).trivially_copyable); } int default_insn_is_call (struct gdbarch *gdbarch, CORE_ADDR addr) @@ -876,6 +876,38 @@ return 0; } +/* See arch-utils.h. */ + +bool +default_program_breakpoint_here_p (struct gdbarch *gdbarch, + CORE_ADDR address) +{ + int len; + const gdb_byte *bpoint = gdbarch_breakpoint_from_pc (gdbarch, &address, &len); + + /* Software breakpoints unsupported? */ + if (bpoint == nullptr) + return false; + + gdb_byte *target_mem = (gdb_byte *) alloca (len); + + /* Enable the automatic memory restoration from breakpoints while + we read the memory. Otherwise we may find temporary breakpoints, ones + inserted by GDB, and flag them as permanent breakpoints. */ + scoped_restore restore_memory + = make_scoped_restore_show_memory_breakpoints (0); + + if (target_read_memory (address, target_mem, len) == 0) + { + /* Check if this is a breakpoint instruction for this architecture, + including ones used by GDB. */ + if (memcmp (target_mem, bpoint, len) == 0) + return true; + } + + return false; +} + void default_skip_permanent_breakpoint (struct regcache *regcache) { @@ -1004,8 +1036,25 @@ return ""; } +/* See arch-utils.h. */ +void +default_read_core_file_mappings (struct gdbarch *gdbarch, + struct bfd *cbfd, + gdb::function_view + pre_loop_cb, + gdb::function_view + loop_cb) +{ +} + +void _initialize_gdbarch_utils (); void -_initialize_gdbarch_utils (void) +_initialize_gdbarch_utils () { add_setshow_enum_cmd ("endian", class_support, endian_enum, &set_endian_string, diff -Nru gdb-9.1/gdb/arch-utils.h gdb-10.2/gdb/arch-utils.h --- gdb-9.1/gdb/arch-utils.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/arch-utils.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Dynamic architecture support for GDB, the GNU debugger. - Copyright (C) 1998-2020 Free Software Foundation, Inc. + Copyright (C) 1998-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -228,6 +228,10 @@ extern int default_insn_is_ret (struct gdbarch *, CORE_ADDR); extern int default_insn_is_jump (struct gdbarch *, CORE_ADDR); +/* Default implementation of gdbarch_program_breakpoint_here_p. */ +extern bool default_program_breakpoint_here_p (struct gdbarch *gdbarch, + CORE_ADDR addr); + /* Do-nothing version of vsyscall_range. Returns false. */ extern int default_vsyscall_range (struct gdbarch *gdbarch, struct mem_range *range); @@ -276,4 +280,16 @@ extern std::string default_get_pc_address_flags (frame_info *frame, CORE_ADDR pc); +/* Default implementation of gdbarch read_core_file_mappings method. */ +extern void default_read_core_file_mappings (struct gdbarch *gdbarch, + struct bfd *cbfd, + gdb::function_view + pre_loop_cb, + gdb::function_view + loop_cb); #endif /* ARCH_UTILS_H */ diff -Nru gdb-9.1/gdb/arc-linux-tdep.c gdb-10.2/gdb/arc-linux-tdep.c --- gdb-9.1/gdb/arc-linux-tdep.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/arc-linux-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,548 @@ +/* Target dependent code for GNU/Linux ARC. + + Copyright 2020-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* GDB header files. */ +#include "defs.h" +#include "linux-tdep.h" +#include "objfiles.h" +#include "opcode/arc.h" +#include "osabi.h" +#include "solib-svr4.h" + +/* ARC header files. */ +#include "opcodes/arc-dis.h" +#include "arc-linux-tdep.h" +#include "arc-tdep.h" +#include "arch/arc.h" + +#define REGOFF(offset) (offset * ARC_REGISTER_SIZE) + +/* arc_linux_core_reg_offsets[i] is the offset in the .reg section of GDB + regnum i. Array index is an internal GDB register number, as defined in + arc-tdep.h:arc_regnum. + + From include/uapi/asm/ptrace.h in the ARC Linux sources. */ + +/* The layout of this struct is tightly bound to "arc_regnum" enum + in arc-tdep.h. Any change of order in there, must be reflected + here as well. */ +static const int arc_linux_core_reg_offsets[] = { + /* R0 - R12. */ + REGOFF (22), REGOFF (21), REGOFF (20), REGOFF (19), + REGOFF (18), REGOFF (17), REGOFF (16), REGOFF (15), + REGOFF (14), REGOFF (13), REGOFF (12), REGOFF (11), + REGOFF (10), + + /* R13 - R25. */ + REGOFF (37), REGOFF (36), REGOFF (35), REGOFF (34), + REGOFF (33), REGOFF (32), REGOFF (31), REGOFF (30), + REGOFF (29), REGOFF (28), REGOFF (27), REGOFF (26), + REGOFF (25), + + REGOFF (9), /* R26 (GP) */ + REGOFF (8), /* FP */ + REGOFF (23), /* SP */ + ARC_OFFSET_NO_REGISTER, /* ILINK */ + ARC_OFFSET_NO_REGISTER, /* R30 */ + REGOFF (7), /* BLINK */ + + /* R32 - R59. */ + ARC_OFFSET_NO_REGISTER, ARC_OFFSET_NO_REGISTER, ARC_OFFSET_NO_REGISTER, + ARC_OFFSET_NO_REGISTER, ARC_OFFSET_NO_REGISTER, ARC_OFFSET_NO_REGISTER, + ARC_OFFSET_NO_REGISTER, ARC_OFFSET_NO_REGISTER, ARC_OFFSET_NO_REGISTER, + ARC_OFFSET_NO_REGISTER, ARC_OFFSET_NO_REGISTER, ARC_OFFSET_NO_REGISTER, + ARC_OFFSET_NO_REGISTER, ARC_OFFSET_NO_REGISTER, ARC_OFFSET_NO_REGISTER, + ARC_OFFSET_NO_REGISTER, ARC_OFFSET_NO_REGISTER, ARC_OFFSET_NO_REGISTER, + ARC_OFFSET_NO_REGISTER, ARC_OFFSET_NO_REGISTER, ARC_OFFSET_NO_REGISTER, + ARC_OFFSET_NO_REGISTER, ARC_OFFSET_NO_REGISTER, ARC_OFFSET_NO_REGISTER, + ARC_OFFSET_NO_REGISTER, ARC_OFFSET_NO_REGISTER, ARC_OFFSET_NO_REGISTER, + ARC_OFFSET_NO_REGISTER, + + REGOFF (4), /* LP_COUNT */ + ARC_OFFSET_NO_REGISTER, /* RESERVED */ + ARC_OFFSET_NO_REGISTER, /* LIMM */ + ARC_OFFSET_NO_REGISTER, /* PCL */ + + REGOFF (39), /* PC */ + REGOFF (5), /* STATUS32 */ + REGOFF (2), /* LP_START */ + REGOFF (3), /* LP_END */ + REGOFF (1), /* BTA */ + REGOFF (6) /* ERET */ +}; + +/* Implement the "cannot_fetch_register" gdbarch method. */ + +static int +arc_linux_cannot_fetch_register (struct gdbarch *gdbarch, int regnum) +{ + /* Assume that register is readable if it is unknown. */ + switch (regnum) + { + case ARC_ILINK_REGNUM: + case ARC_RESERVED_REGNUM: + case ARC_LIMM_REGNUM: + return true; + case ARC_R30_REGNUM: + case ARC_R58_REGNUM: + case ARC_R59_REGNUM: + return !arc_mach_is_arcv2 (gdbarch); + } + return (regnum > ARC_BLINK_REGNUM) && (regnum < ARC_LP_COUNT_REGNUM); +} + +/* Implement the "cannot_store_register" gdbarch method. */ + +static int +arc_linux_cannot_store_register (struct gdbarch *gdbarch, int regnum) +{ + /* Assume that register is writable if it is unknown. */ + switch (regnum) + { + case ARC_ILINK_REGNUM: + case ARC_RESERVED_REGNUM: + case ARC_LIMM_REGNUM: + case ARC_PCL_REGNUM: + return true; + case ARC_R30_REGNUM: + case ARC_R58_REGNUM: + case ARC_R59_REGNUM: + return !arc_mach_is_arcv2 (gdbarch); + } + return (regnum > ARC_BLINK_REGNUM) && (regnum < ARC_LP_COUNT_REGNUM); +} + +/* For ARC Linux, breakpoints use the 16-bit TRAP_S 1 instruction, which + is 0x3e78 (little endian) or 0x783e (big endian). */ + +static const gdb_byte arc_linux_trap_s_be[] = { 0x78, 0x3e }; +static const gdb_byte arc_linux_trap_s_le[] = { 0x3e, 0x78 }; +static const int trap_size = 2; /* Number of bytes to insert "trap". */ + +/* Implement the "breakpoint_kind_from_pc" gdbarch method. */ + +static int +arc_linux_breakpoint_kind_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr) +{ + return trap_size; +} + +/* Implement the "sw_breakpoint_from_kind" gdbarch method. */ + +static const gdb_byte * +arc_linux_sw_breakpoint_from_kind (struct gdbarch *gdbarch, + int kind, int *size) +{ + *size = kind; + return ((gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG) + ? arc_linux_trap_s_be + : arc_linux_trap_s_le); +} + +/* Check for an atomic sequence of instructions beginning with an + LLOCK instruction and ending with a SCOND instruction. + + These patterns are hand coded in libc's (glibc and uclibc). Take + a look at [1] for instance: + + main+14: llock r2,[r0] + main+18: brne.nt r2,0,main+30 + main+22: scond r3,[r0] + main+26: bne main+14 + main+30: mov_s r0,0 + + If such a sequence is found, attempt to step over it. + A breakpoint is placed at the end of the sequence. + + This function expects the INSN to be a "llock(d)" instruction. + + [1] + https://cgit.uclibc-ng.org/cgi/cgit/uclibc-ng.git/tree/libc/ \ + sysdeps/linux/arc/bits/atomic.h#n46 + */ + +static std::vector +handle_atomic_sequence (arc_instruction insn, disassemble_info &di) +{ + const int atomic_seq_len = 24; /* Instruction sequence length. */ + std::vector next_pcs; + + /* Sanity check. */ + gdb_assert (insn.insn_class == LLOCK); + + /* Data size we are dealing with: LLOCK vs. LLOCKD */ + arc_ldst_data_size llock_data_size_mode = insn.data_size_mode; + /* Indicator if any conditional branch is found in the sequence. */ + bool found_bc = false; + /* Becomes true if "LLOCK(D) .. SCOND(D)" sequence is found. */ + bool is_pattern_valid = false; + + for (int insn_count = 0; insn_count < atomic_seq_len; ++insn_count) + { + arc_insn_decode (arc_insn_get_linear_next_pc (insn), + &di, arc_delayed_print_insn, &insn); + + if (insn.insn_class == BRCC) + { + /* If more than one conditional branch is found, this is not + the pattern we are interested in. */ + if (found_bc) + break; + found_bc = true; + continue; + } + + /* This is almost a happy ending. */ + if (insn.insn_class == SCOND) + { + /* SCOND should match the LLOCK's data size. */ + if (insn.data_size_mode == llock_data_size_mode) + is_pattern_valid = true; + break; + } + } + + if (is_pattern_valid) + { + /* Get next instruction after scond(d). There is no limm. */ + next_pcs.push_back (insn.address + insn.length); + } + + return next_pcs; +} + +/* Implement the "software_single_step" gdbarch method. */ + +static std::vector +arc_linux_software_single_step (struct regcache *regcache) +{ + struct gdbarch *gdbarch = regcache->arch (); + struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); + struct disassemble_info di = arc_disassemble_info (gdbarch); + + /* Read current instruction. */ + struct arc_instruction curr_insn; + arc_insn_decode (regcache_read_pc (regcache), &di, arc_delayed_print_insn, + &curr_insn); + + if (curr_insn.insn_class == LLOCK) + return handle_atomic_sequence (curr_insn, di); + + CORE_ADDR next_pc = arc_insn_get_linear_next_pc (curr_insn); + std::vector next_pcs; + + /* For instructions with delay slots, the fall thru is not the + instruction immediately after the current instruction, but the one + after that. */ + if (curr_insn.has_delay_slot) + { + struct arc_instruction next_insn; + arc_insn_decode (next_pc, &di, arc_delayed_print_insn, &next_insn); + next_pcs.push_back (arc_insn_get_linear_next_pc (next_insn)); + } + else + next_pcs.push_back (next_pc); + + ULONGEST status32; + regcache_cooked_read_unsigned (regcache, gdbarch_ps_regnum (gdbarch), + &status32); + + if (curr_insn.is_control_flow) + { + CORE_ADDR branch_pc = arc_insn_get_branch_target (curr_insn); + if (branch_pc != next_pc) + next_pcs.push_back (branch_pc); + } + /* Is current instruction the last in a loop body? */ + else if (tdep->has_hw_loops) + { + /* If STATUS32.L is 1, then ZD-loops are disabled. */ + if ((status32 & ARC_STATUS32_L_MASK) == 0) + { + ULONGEST lp_end, lp_start, lp_count; + regcache_cooked_read_unsigned (regcache, ARC_LP_START_REGNUM, + &lp_start); + regcache_cooked_read_unsigned (regcache, ARC_LP_END_REGNUM, &lp_end); + regcache_cooked_read_unsigned (regcache, ARC_LP_COUNT_REGNUM, + &lp_count); + + if (arc_debug) + { + debug_printf ("arc-linux: lp_start = %s, lp_end = %s, " + "lp_count = %s, next_pc = %s\n", + paddress (gdbarch, lp_start), + paddress (gdbarch, lp_end), + pulongest (lp_count), + paddress (gdbarch, next_pc)); + } + + if (next_pc == lp_end && lp_count > 1) + { + /* The instruction is in effect a jump back to the start of + the loop. */ + next_pcs.push_back (lp_start); + } + } + } + + /* Is this a delay slot? Then next PC is in BTA register. */ + if ((status32 & ARC_STATUS32_DE_MASK) != 0) + { + ULONGEST bta; + regcache_cooked_read_unsigned (regcache, ARC_BTA_REGNUM, &bta); + next_pcs.push_back (bta); + } + + return next_pcs; +} + +/* Implement the "skip_solib_resolver" gdbarch method. + + See glibc_skip_solib_resolver for details. */ + +static CORE_ADDR +arc_linux_skip_solib_resolver (struct gdbarch *gdbarch, CORE_ADDR pc) +{ + /* For uClibc 0.9.26+. + + An unresolved PLT entry points to "__dl_linux_resolve", which calls + "_dl_linux_resolver" to do the resolving and then eventually jumps to + the function. + + So we look for the symbol `_dl_linux_resolver', and if we are there, + gdb sets a breakpoint at the return address, and continues. */ + struct bound_minimal_symbol resolver + = lookup_minimal_symbol ("_dl_linux_resolver", NULL, NULL); + + if (arc_debug) + { + if (resolver.minsym != nullptr) + { + CORE_ADDR res_addr = BMSYMBOL_VALUE_ADDRESS (resolver); + debug_printf ("arc-linux: skip_solib_resolver (): " + "pc = %s, resolver at %s\n", + print_core_address (gdbarch, pc), + print_core_address (gdbarch, res_addr)); + } + else + { + debug_printf ("arc-linux: skip_solib_resolver (): " + "pc = %s, no resolver found\n", + print_core_address (gdbarch, pc)); + } + } + + if (resolver.minsym != nullptr && BMSYMBOL_VALUE_ADDRESS (resolver) == pc) + { + /* Find the return address. */ + return frame_unwind_caller_pc (get_current_frame ()); + } + else + { + /* No breakpoint required. */ + return 0; + } +} + +void +arc_linux_supply_gregset (const struct regset *regset, + struct regcache *regcache, + int regnum, const void *gregs, size_t size) +{ + gdb_static_assert (ARC_LAST_REGNUM + < ARRAY_SIZE (arc_linux_core_reg_offsets)); + + const bfd_byte *buf = (const bfd_byte *) gregs; + + for (int reg = 0; reg <= ARC_LAST_REGNUM; reg++) + if (arc_linux_core_reg_offsets[reg] != ARC_OFFSET_NO_REGISTER) + regcache->raw_supply (reg, buf + arc_linux_core_reg_offsets[reg]); +} + +void +arc_linux_supply_v2_regset (const struct regset *regset, + struct regcache *regcache, int regnum, + const void *v2_regs, size_t size) +{ + const bfd_byte *buf = (const bfd_byte *) v2_regs; + + /* user_regs_arcv2 is defined in linux arch/arc/include/uapi/asm/ptrace.h. */ + regcache->raw_supply (ARC_R30_REGNUM, buf); + regcache->raw_supply (ARC_R58_REGNUM, buf + REGOFF (1)); + regcache->raw_supply (ARC_R59_REGNUM, buf + REGOFF (2)); +} + +/* Populate BUF with register REGNUM from the REGCACHE. */ + +static void +collect_register (const struct regcache *regcache, struct gdbarch *gdbarch, + int regnum, gdb_byte *buf) +{ + int offset; + + /* Skip non-existing registers. */ + if (arc_linux_core_reg_offsets[regnum] == ARC_OFFSET_NO_REGISTER) + return; + + /* The address where the execution has stopped is in pseudo-register + STOP_PC. However, when kernel code is returning from the exception, + it uses the value from ERET register. Since, TRAP_S (the breakpoint + instruction) commits, the ERET points to the next instruction. In + other words: ERET != STOP_PC. To jump back from the kernel code to + the correct address, ERET must be overwritten by GDB's STOP_PC. Else, + the program will continue at the address after the current instruction. + */ + if (regnum == gdbarch_pc_regnum (gdbarch)) + offset = arc_linux_core_reg_offsets[ARC_ERET_REGNUM]; + else + offset = arc_linux_core_reg_offsets[regnum]; + regcache->raw_collect (regnum, buf + offset); +} + +void +arc_linux_collect_gregset (const struct regset *regset, + const struct regcache *regcache, + int regnum, void *gregs, size_t size) +{ + gdb_static_assert (ARC_LAST_REGNUM + < ARRAY_SIZE (arc_linux_core_reg_offsets)); + + gdb_byte *buf = (gdb_byte *) gregs; + struct gdbarch *gdbarch = regcache->arch (); + + /* regnum == -1 means writing all the registers. */ + if (regnum == -1) + for (int reg = 0; reg <= ARC_LAST_REGNUM; reg++) + collect_register (regcache, gdbarch, reg, buf); + else if (regnum <= ARC_LAST_REGNUM) + collect_register (regcache, gdbarch, regnum, buf); + else + gdb_assert_not_reached ("Invalid regnum in arc_linux_collect_gregset."); +} + +void +arc_linux_collect_v2_regset (const struct regset *regset, + const struct regcache *regcache, int regnum, + void *v2_regs, size_t size) +{ + bfd_byte *buf = (bfd_byte *) v2_regs; + + regcache->raw_collect (ARC_R30_REGNUM, buf); + regcache->raw_collect (ARC_R58_REGNUM, buf + REGOFF (1)); + regcache->raw_collect (ARC_R59_REGNUM, buf + REGOFF (2)); +} + +/* Linux regset definitions. */ + +static const struct regset arc_linux_gregset = { + arc_linux_core_reg_offsets, + arc_linux_supply_gregset, + arc_linux_collect_gregset, +}; + +static const struct regset arc_linux_v2_regset = { + NULL, + arc_linux_supply_v2_regset, + arc_linux_collect_v2_regset, +}; + +/* Implement the `iterate_over_regset_sections` gdbarch method. */ + +static void +arc_linux_iterate_over_regset_sections (struct gdbarch *gdbarch, + iterate_over_regset_sections_cb *cb, + void *cb_data, + const struct regcache *regcache) +{ + /* There are 40 registers in Linux user_regs_struct, although some of + them are now just a mere paddings, kept to maintain binary + compatibility with older tools. */ + const int sizeof_gregset = 40 * ARC_REGISTER_SIZE; + + cb (".reg", sizeof_gregset, sizeof_gregset, &arc_linux_gregset, NULL, + cb_data); + cb (".reg-arc-v2", ARC_LINUX_SIZEOF_V2_REGSET, ARC_LINUX_SIZEOF_V2_REGSET, + &arc_linux_v2_regset, NULL, cb_data); +} + +/* Implement the `core_read_description` gdbarch method. */ + +static const struct target_desc * +arc_linux_core_read_description (struct gdbarch *gdbarch, + struct target_ops *target, + bfd *abfd) +{ + arc_arch_features features + = arc_arch_features_create (abfd, + gdbarch_bfd_arch_info (gdbarch)->mach); + return arc_lookup_target_description (features); +} + +/* Initialization specific to Linux environment. */ + +static void +arc_linux_init_osabi (struct gdbarch_info info, struct gdbarch *gdbarch) +{ + struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); + + if (arc_debug) + debug_printf ("arc-linux: GNU/Linux OS/ABI initialization.\n"); + + /* If we are using Linux, we have in uClibc + (libc/sysdeps/linux/arc/bits/setjmp.h): + + typedef int __jmp_buf[13+1+1+1]; //r13-r25, fp, sp, blink + + Where "blink" is a stored PC of a caller function. + */ + tdep->jb_pc = 15; + + linux_init_abi (info, gdbarch); + + /* Set up target dependent GDB architecture entries. */ + set_gdbarch_cannot_fetch_register (gdbarch, arc_linux_cannot_fetch_register); + set_gdbarch_cannot_store_register (gdbarch, arc_linux_cannot_store_register); + set_gdbarch_breakpoint_kind_from_pc (gdbarch, + arc_linux_breakpoint_kind_from_pc); + set_gdbarch_sw_breakpoint_from_kind (gdbarch, + arc_linux_sw_breakpoint_from_kind); + set_gdbarch_fetch_tls_load_module_address (gdbarch, + svr4_fetch_objfile_link_map); + set_gdbarch_software_single_step (gdbarch, arc_linux_software_single_step); + set_gdbarch_skip_trampoline_code (gdbarch, find_solib_trampoline_target); + set_gdbarch_skip_solib_resolver (gdbarch, arc_linux_skip_solib_resolver); + set_gdbarch_iterate_over_regset_sections + (gdbarch, arc_linux_iterate_over_regset_sections); + set_gdbarch_core_read_description (gdbarch, arc_linux_core_read_description); + + /* GNU/Linux uses SVR4-style shared libraries, with 32-bit ints, longs + and pointers (ILP32). */ + set_solib_svr4_fetch_link_map_offsets (gdbarch, + svr4_ilp32_fetch_link_map_offsets); +} + +/* Suppress warning from -Wmissing-prototypes. */ +extern initialize_file_ftype _initialize_arc_linux_tdep; + +void +_initialize_arc_linux_tdep () +{ + gdbarch_register_osabi (bfd_arch_arc, 0, GDB_OSABI_LINUX, + arc_linux_init_osabi); +} diff -Nru gdb-9.1/gdb/arc-linux-tdep.h gdb-10.2/gdb/arc-linux-tdep.h --- gdb-9.1/gdb/arc-linux-tdep.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/arc-linux-tdep.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,52 @@ +/* Target dependent code for GNU/Linux ARC. + + Copyright 2020-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifndef ARC_LINUX_TDEP_H +#define ARC_LINUX_TDEP_H + +#include "gdbarch.h" +#include "regset.h" + +#define ARC_LINUX_SIZEOF_V2_REGSET (3 * ARC_REGISTER_SIZE) + +/* Reads registers from the NT_PRSTATUS data array into the regcache. */ + +void arc_linux_supply_gregset (const struct regset *regset, + struct regcache *regcache, int regnum, + const void *gregs, size_t size); + +/* Reads regsiters from the NT_ARC_V2 data array into the regcache. */ + +void arc_linux_supply_v2_regset (const struct regset *regset, + struct regcache *regcache, int regnum, + const void *v2_regs, size_t size); + +/* Writes registers from the regcache into the NT_PRSTATUS data array. */ + +void arc_linux_collect_gregset (const struct regset *regset, + const struct regcache *regcache, + int regnum, void *gregs, size_t size); + +/* Writes registers from the regcache into the NT_ARC_V2 data array. */ + +void arc_linux_collect_v2_regset (const struct regset *regset, + const struct regcache *regcache, + int regnum, void *v2_regs, size_t size); + +#endif /* ARC_LINUX_TDEP_H */ diff -Nru gdb-9.1/gdb/arc-newlib-tdep.c gdb-10.2/gdb/arc-newlib-tdep.c --- gdb-9.1/gdb/arc-newlib-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/arc-newlib-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for Newlib ARC. - Copyright (C) 2016-2020 Free Software Foundation, Inc. + Copyright (C) 2016-2021 Free Software Foundation, Inc. Contributed by Synopsys Inc. This file is part of GDB. @@ -56,8 +56,9 @@ return GDB_OSABI_UNKNOWN; } +void _initialize_arc_newlib_tdep (); void -_initialize_arc_newlib_tdep (void) +_initialize_arc_newlib_tdep () { gdbarch_register_osabi_sniffer (bfd_arch_arc, bfd_target_elf_flavour, arc_newlib_osabi_sniffer); diff -Nru gdb-9.1/gdb/arc-tdep.c gdb-10.2/gdb/arc-tdep.c --- gdb-9.1/gdb/arc-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/arc-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target dependent code for ARC architecture, for GDB. - Copyright 2005-2020 Free Software Foundation, Inc. + Copyright 2005-2021 Free Software Foundation, Inc. Contributed by Synopsys Inc. This file is part of GDB. @@ -21,27 +21,28 @@ /* GDB header files. */ #include "defs.h" #include "arch-utils.h" +#include "elf-bfd.h" #include "disasm.h" -#include "dwarf2-frame.h" +#include "dwarf2/frame.h" #include "frame-base.h" #include "frame-unwind.h" #include "gdbcore.h" #include "gdbcmd.h" #include "objfiles.h" +#include "osabi.h" #include "prologue-value.h" +#include "target-descriptions.h" #include "trad-frame.h" /* ARC header files. */ #include "opcode/arc.h" #include "opcodes/arc-dis.h" #include "arc-tdep.h" +#include "arch/arc.h" /* Standard headers. */ #include - -/* Default target descriptions. */ -#include "features/arc-v2.c" -#include "features/arc-arcompact.c" +#include /* The frame unwind cache for ARC. */ @@ -92,57 +93,208 @@ static struct cmd_list_element *maintenance_print_arc_list = NULL; -/* XML target description features. */ +/* A set of registers that we expect to find in a tdesc_feature. These + are used in ARC_TDESC_INIT when processing the target description. */ -static const char core_v2_feature_name[] = "org.gnu.gdb.arc.core.v2"; -static const char - core_reduced_v2_feature_name[] = "org.gnu.gdb.arc.core-reduced.v2"; -static const char - core_arcompact_feature_name[] = "org.gnu.gdb.arc.core.arcompact"; -static const char aux_minimal_feature_name[] = "org.gnu.gdb.arc.aux-minimal"; - -/* XML target description known registers. */ - -static const char *const core_v2_register_names[] = { - "r0", "r1", "r2", "r3", - "r4", "r5", "r6", "r7", - "r8", "r9", "r10", "r11", - "r12", "r13", "r14", "r15", - "r16", "r17", "r18", "r19", - "r20", "r21", "r22", "r23", - "r24", "r25", "gp", "fp", - "sp", "ilink", "r30", "blink", - "r32", "r33", "r34", "r35", - "r36", "r37", "r38", "r39", - "r40", "r41", "r42", "r43", - "r44", "r45", "r46", "r47", - "r48", "r49", "r50", "r51", - "r52", "r53", "r54", "r55", - "r56", "r57", "accl", "acch", - "lp_count", "reserved", "limm", "pcl", +struct arc_register_feature +{ + /* Information for a single register. */ + struct register_info + { + /* The GDB register number for this register. */ + int regnum; + + /* List of names for this register. The first name in this list is the + preferred name, the name GDB will use when describing this register. */ + std::vector names; + + /* When true, this register must be present in this feature set. */ + bool required_p; + }; + + /* The name for this feature. This is the name used to find this feature + within the target description. */ + const char *name; + + /* List of all the registers that we expect to encounter in this register + set. */ + std::vector registers; }; -static const char *const aux_minimal_register_names[] = { - "pc", "status32", +/* Obsolete feature names for backward compatibility. */ +static const char *ARC_CORE_V1_OBSOLETE_FEATURE_NAME + = "org.gnu.gdb.arc.core.arcompact"; +static const char *ARC_CORE_V2_OBSOLETE_FEATURE_NAME + = "org.gnu.gdb.arc.core.v2"; +static const char *ARC_CORE_V2_REDUCED_OBSOLETE_FEATURE_NAME + = "org.gnu.gdb.arc.core-reduced.v2"; +static const char *ARC_AUX_OBSOLETE_FEATURE_NAME + = "org.gnu.gdb.arc.aux-minimal"; +/* Modern feature names. */ +static const char *ARC_CORE_FEATURE_NAME = "org.gnu.gdb.arc.core"; +static const char *ARC_AUX_FEATURE_NAME = "org.gnu.gdb.arc.aux"; + +/* ARCv1 (ARC600, ARC601, ARC700) general core registers feature set. + See also arc_update_acc_reg_names() for "accl/acch" names. */ + +static struct arc_register_feature arc_v1_core_reg_feature = +{ + ARC_CORE_FEATURE_NAME, + { + { ARC_R0_REGNUM + 0, { "r0" }, true }, + { ARC_R0_REGNUM + 1, { "r1" }, true }, + { ARC_R0_REGNUM + 2, { "r2" }, true }, + { ARC_R0_REGNUM + 3, { "r3" }, true }, + { ARC_R0_REGNUM + 4, { "r4" }, false }, + { ARC_R0_REGNUM + 5, { "r5" }, false }, + { ARC_R0_REGNUM + 6, { "r6" }, false }, + { ARC_R0_REGNUM + 7, { "r7" }, false }, + { ARC_R0_REGNUM + 8, { "r8" }, false }, + { ARC_R0_REGNUM + 9, { "r9" }, false }, + { ARC_R0_REGNUM + 10, { "r10" }, true }, + { ARC_R0_REGNUM + 11, { "r11" }, true }, + { ARC_R0_REGNUM + 12, { "r12" }, true }, + { ARC_R0_REGNUM + 13, { "r13" }, true }, + { ARC_R0_REGNUM + 14, { "r14" }, true }, + { ARC_R0_REGNUM + 15, { "r15" }, true }, + { ARC_R0_REGNUM + 16, { "r16" }, false }, + { ARC_R0_REGNUM + 17, { "r17" }, false }, + { ARC_R0_REGNUM + 18, { "r18" }, false }, + { ARC_R0_REGNUM + 19, { "r19" }, false }, + { ARC_R0_REGNUM + 20, { "r20" }, false }, + { ARC_R0_REGNUM + 21, { "r21" }, false }, + { ARC_R0_REGNUM + 22, { "r22" }, false }, + { ARC_R0_REGNUM + 23, { "r23" }, false }, + { ARC_R0_REGNUM + 24, { "r24" }, false }, + { ARC_R0_REGNUM + 25, { "r25" }, false }, + { ARC_R0_REGNUM + 26, { "gp" }, true }, + { ARC_R0_REGNUM + 27, { "fp" }, true }, + { ARC_R0_REGNUM + 28, { "sp" }, true }, + { ARC_R0_REGNUM + 29, { "ilink1" }, false }, + { ARC_R0_REGNUM + 30, { "ilink2" }, false }, + { ARC_R0_REGNUM + 31, { "blink" }, true }, + { ARC_R0_REGNUM + 32, { "r32" }, false }, + { ARC_R0_REGNUM + 33, { "r33" }, false }, + { ARC_R0_REGNUM + 34, { "r34" }, false }, + { ARC_R0_REGNUM + 35, { "r35" }, false }, + { ARC_R0_REGNUM + 36, { "r36" }, false }, + { ARC_R0_REGNUM + 37, { "r37" }, false }, + { ARC_R0_REGNUM + 38, { "r38" }, false }, + { ARC_R0_REGNUM + 39, { "r39" }, false }, + { ARC_R0_REGNUM + 40, { "r40" }, false }, + { ARC_R0_REGNUM + 41, { "r41" }, false }, + { ARC_R0_REGNUM + 42, { "r42" }, false }, + { ARC_R0_REGNUM + 43, { "r43" }, false }, + { ARC_R0_REGNUM + 44, { "r44" }, false }, + { ARC_R0_REGNUM + 45, { "r45" }, false }, + { ARC_R0_REGNUM + 46, { "r46" }, false }, + { ARC_R0_REGNUM + 47, { "r47" }, false }, + { ARC_R0_REGNUM + 48, { "r48" }, false }, + { ARC_R0_REGNUM + 49, { "r49" }, false }, + { ARC_R0_REGNUM + 50, { "r50" }, false }, + { ARC_R0_REGNUM + 51, { "r51" }, false }, + { ARC_R0_REGNUM + 52, { "r52" }, false }, + { ARC_R0_REGNUM + 53, { "r53" }, false }, + { ARC_R0_REGNUM + 54, { "r54" }, false }, + { ARC_R0_REGNUM + 55, { "r55" }, false }, + { ARC_R0_REGNUM + 56, { "r56" }, false }, + { ARC_R0_REGNUM + 57, { "r57" }, false }, + { ARC_R0_REGNUM + 58, { "r58", "accl" }, false }, + { ARC_R0_REGNUM + 59, { "r59", "acch" }, false }, + { ARC_R0_REGNUM + 60, { "lp_count" }, false }, + { ARC_R0_REGNUM + 61, { "reserved" }, false }, + { ARC_R0_REGNUM + 62, { "limm" }, false }, + { ARC_R0_REGNUM + 63, { "pcl" }, true } + } }; -static const char *const core_arcompact_register_names[] = { - "r0", "r1", "r2", "r3", - "r4", "r5", "r6", "r7", - "r8", "r9", "r10", "r11", - "r12", "r13", "r14", "r15", - "r16", "r17", "r18", "r19", - "r20", "r21", "r22", "r23", - "r24", "r25", "gp", "fp", - "sp", "ilink1", "ilink2", "blink", - "r32", "r33", "r34", "r35", - "r36", "r37", "r38", "r39", - "r40", "r41", "r42", "r43", - "r44", "r45", "r46", "r47", - "r48", "r49", "r50", "r51", - "r52", "r53", "r54", "r55", - "r56", "r57", "r58", "r59", - "lp_count", "reserved", "limm", "pcl", +/* ARCv2 (ARCHS) general core registers feature set. See also + arc_update_acc_reg_names() for "accl/acch" names. */ + +static struct arc_register_feature arc_v2_core_reg_feature = +{ + ARC_CORE_FEATURE_NAME, + { + { ARC_R0_REGNUM + 0, { "r0" }, true }, + { ARC_R0_REGNUM + 1, { "r1" }, true }, + { ARC_R0_REGNUM + 2, { "r2" }, true }, + { ARC_R0_REGNUM + 3, { "r3" }, true }, + { ARC_R0_REGNUM + 4, { "r4" }, false }, + { ARC_R0_REGNUM + 5, { "r5" }, false }, + { ARC_R0_REGNUM + 6, { "r6" }, false }, + { ARC_R0_REGNUM + 7, { "r7" }, false }, + { ARC_R0_REGNUM + 8, { "r8" }, false }, + { ARC_R0_REGNUM + 9, { "r9" }, false }, + { ARC_R0_REGNUM + 10, { "r10" }, true }, + { ARC_R0_REGNUM + 11, { "r11" }, true }, + { ARC_R0_REGNUM + 12, { "r12" }, true }, + { ARC_R0_REGNUM + 13, { "r13" }, true }, + { ARC_R0_REGNUM + 14, { "r14" }, true }, + { ARC_R0_REGNUM + 15, { "r15" }, true }, + { ARC_R0_REGNUM + 16, { "r16" }, false }, + { ARC_R0_REGNUM + 17, { "r17" }, false }, + { ARC_R0_REGNUM + 18, { "r18" }, false }, + { ARC_R0_REGNUM + 19, { "r19" }, false }, + { ARC_R0_REGNUM + 20, { "r20" }, false }, + { ARC_R0_REGNUM + 21, { "r21" }, false }, + { ARC_R0_REGNUM + 22, { "r22" }, false }, + { ARC_R0_REGNUM + 23, { "r23" }, false }, + { ARC_R0_REGNUM + 24, { "r24" }, false }, + { ARC_R0_REGNUM + 25, { "r25" }, false }, + { ARC_R0_REGNUM + 26, { "gp" }, true }, + { ARC_R0_REGNUM + 27, { "fp" }, true }, + { ARC_R0_REGNUM + 28, { "sp" }, true }, + { ARC_R0_REGNUM + 29, { "ilink" }, false }, + { ARC_R0_REGNUM + 30, { "r30" }, true }, + { ARC_R0_REGNUM + 31, { "blink" }, true }, + { ARC_R0_REGNUM + 32, { "r32" }, false }, + { ARC_R0_REGNUM + 33, { "r33" }, false }, + { ARC_R0_REGNUM + 34, { "r34" }, false }, + { ARC_R0_REGNUM + 35, { "r35" }, false }, + { ARC_R0_REGNUM + 36, { "r36" }, false }, + { ARC_R0_REGNUM + 37, { "r37" }, false }, + { ARC_R0_REGNUM + 38, { "r38" }, false }, + { ARC_R0_REGNUM + 39, { "r39" }, false }, + { ARC_R0_REGNUM + 40, { "r40" }, false }, + { ARC_R0_REGNUM + 41, { "r41" }, false }, + { ARC_R0_REGNUM + 42, { "r42" }, false }, + { ARC_R0_REGNUM + 43, { "r43" }, false }, + { ARC_R0_REGNUM + 44, { "r44" }, false }, + { ARC_R0_REGNUM + 45, { "r45" }, false }, + { ARC_R0_REGNUM + 46, { "r46" }, false }, + { ARC_R0_REGNUM + 47, { "r47" }, false }, + { ARC_R0_REGNUM + 48, { "r48" }, false }, + { ARC_R0_REGNUM + 49, { "r49" }, false }, + { ARC_R0_REGNUM + 50, { "r50" }, false }, + { ARC_R0_REGNUM + 51, { "r51" }, false }, + { ARC_R0_REGNUM + 52, { "r52" }, false }, + { ARC_R0_REGNUM + 53, { "r53" }, false }, + { ARC_R0_REGNUM + 54, { "r54" }, false }, + { ARC_R0_REGNUM + 55, { "r55" }, false }, + { ARC_R0_REGNUM + 56, { "r56" }, false }, + { ARC_R0_REGNUM + 57, { "r57" }, false }, + { ARC_R0_REGNUM + 58, { "r58", "accl" }, false }, + { ARC_R0_REGNUM + 59, { "r59", "acch" }, false }, + { ARC_R0_REGNUM + 60, { "lp_count" }, false }, + { ARC_R0_REGNUM + 61, { "reserved" }, false }, + { ARC_R0_REGNUM + 62, { "limm" }, false }, + { ARC_R0_REGNUM + 63, { "pcl" }, true } + } +}; + +/* The common auxiliary registers feature set. The REGNUM field + must match the ARC_REGNUM enum in arc-tdep.h. */ + +static const struct arc_register_feature arc_common_aux_reg_feature = +{ + ARC_AUX_FEATURE_NAME, + { + { ARC_FIRST_AUX_REGNUM + 0, { "pc" }, true }, + { ARC_FIRST_AUX_REGNUM + 1, { "status32" }, true }, + { ARC_FIRST_AUX_REGNUM + 2, { "lp_start" }, false }, + { ARC_FIRST_AUX_REGNUM + 3, { "lp_end" }, false }, + { ARC_FIRST_AUX_REGNUM + 4, { "bta" }, false } + } }; static char *arc_disassembler_options = NULL; @@ -460,8 +612,7 @@ regcache_cooked_read_unsigned (regcache, gdbarch_ps_regnum (gdbarch), &status32); - /* Mask for DE bit is 0x40. */ - if (status32 & 0x40) + if ((status32 & ARC_STATUS32_DE_MASK) != 0) { if (arc_debug) { @@ -891,8 +1042,8 @@ function passes a hidden first parameter to the callee (in R0). That parameter is the address at which the value being returned should be stored. Otherwise, the result is returned in registers. */ - int is_struct_return = (TYPE_CODE (valtype) == TYPE_CODE_STRUCT - || TYPE_CODE (valtype) == TYPE_CODE_UNION + int is_struct_return = (valtype->code () == TYPE_CODE_STRUCT + || valtype->code () == TYPE_CODE_UNION || TYPE_LENGTH (valtype) > 2 * ARC_REGISTER_SIZE); if (arc_debug) @@ -1715,200 +1866,282 @@ arc_frame_base_address }; -/* Initialize target description for the ARC. - - Returns TRUE if input tdesc was valid and in this case it will assign TDESC - and TDESC_DATA output parameters. */ - -static bool -arc_tdesc_init (struct gdbarch_info info, const struct target_desc **tdesc, - struct tdesc_arch_data **tdesc_data) +static enum arc_isa +mach_type_to_arc_isa (const unsigned long mach) { - if (arc_debug) - debug_printf ("arc: Target description initialization.\n"); + switch (mach) + { + case bfd_mach_arc_arc600: + case bfd_mach_arc_arc601: + case bfd_mach_arc_arc700: + return ARC_ISA_ARCV1; + case bfd_mach_arc_arcv2: + return ARC_ISA_ARCV2; + default: + internal_error (__FILE__, __LINE__, + _("unknown machine id %lu"), mach); + } +} - const struct target_desc *tdesc_loc = info.target_desc; +/* See arc-tdep.h. */ - /* Depending on whether this is ARCompact or ARCv2 we will assign - different default registers sets (which will differ in exactly two core - registers). GDB will also refuse to accept register feature from invalid - ISA - v2 features can be used only with v2 ARChitecture. We read - bfd_arch_info, which looks like to be a safe bet here, as it looks like it - is always initialized even when we don't pass any elf file to GDB at all - (it uses default arch in this case). Also GDB will call this function - multiple times, and if XML target description file contains architecture - specifications, then GDB will set this architecture to info.bfd_arch_info, - overriding value from ELF file if they are different. That means that, - where matters, this value is always our best guess on what CPU we are - debugging. It has been noted that architecture specified in tdesc file - has higher precedence over ELF and even "set architecture" - that is, - using "set architecture" command will have no effect when tdesc has "arch" - tag. */ - /* Cannot use arc_mach_is_arcv2 (), because gdbarch is not created yet. */ - const int is_arcv2 = (info.bfd_arch_info->mach == bfd_mach_arc_arcv2); - bool is_reduced_rf; - const char *const *core_regs; - const char *core_feature_name; +arc_arch_features +arc_arch_features_create (const bfd *abfd, const unsigned long mach) +{ + /* Use 4 as a fallback value. */ + int reg_size = 4; - /* If target doesn't provide a description - use default one. */ - if (!tdesc_has_registers (tdesc_loc)) + /* Try to guess the features parameters by looking at the binary to be + executed. If the user is providing a binary that does not match the + target, then tough luck. This is the last effort to makes sense of + what's going on. */ + if (abfd != nullptr && bfd_get_flavour (abfd) == bfd_target_elf_flavour) { - if (is_arcv2) - { - tdesc_loc = tdesc_arc_v2; - if (arc_debug) - debug_printf ("arc: Using default register set for ARC v2.\n"); - } + unsigned char eclass = elf_elfheader (abfd)->e_ident[EI_CLASS]; + + if (eclass == ELFCLASS32) + reg_size = 4; + else if (eclass == ELFCLASS64) + reg_size = 8; else - { - tdesc_loc = tdesc_arc_arcompact; - if (arc_debug) - debug_printf ("arc: Using default register set for ARCompact.\n"); - } - } - else - { - if (arc_debug) - debug_printf ("arc: Using provided register set.\n"); + internal_error (__FILE__, __LINE__, + _("unknown ELF header class %d"), eclass); } - gdb_assert (tdesc_loc != NULL); - /* Now we can search for base registers. Core registers can be either full - or reduced. Summary: + /* MACH from a bfd_arch_info struct is used here. It should be a safe + bet, as it looks like the struct is always initialized even when we + don't pass any elf file to GDB at all (it uses default arch in that + case). */ + arc_isa isa = mach_type_to_arc_isa (mach); - - core.v2 + aux-minimal - - core-reduced.v2 + aux-minimal - - core.arcompact + aux-minimal + return arc_arch_features (reg_size, isa); +} - NB: It is entirely feasible to have ARCompact with reduced core regs, but - we ignore that because GCC doesn't support that and at the same time - ARCompact is considered obsolete, so there is not much reason to support - that. */ - const struct tdesc_feature *feature - = tdesc_find_feature (tdesc_loc, core_v2_feature_name); - if (feature != NULL) - { - /* Confirm that register and architecture match, to prevent accidents in - some situations. This code will trigger an error if: +/* Look for obsolete core feature names in TDESC. */ - 1. XML tdesc doesn't specify arch explicitly, registers are for arch - X, but ELF specifies arch Y. +static const struct tdesc_feature * +find_obsolete_core_names (const struct target_desc *tdesc) +{ + const struct tdesc_feature *feat = nullptr; - 2. XML tdesc specifies arch X, but contains registers for arch Y. + feat = tdesc_find_feature (tdesc, ARC_CORE_V1_OBSOLETE_FEATURE_NAME); - It will not protect from case where XML or ELF specify arch X, - registers are for the same arch X, but the real target is arch Y. To - detect this case we need to check IDENTITY register. */ - if (!is_arcv2) - { - arc_print (_("Error: ARC v2 target description supplied for " - "non-ARCv2 target.\n")); - return false; - } + if (feat == nullptr) + feat = tdesc_find_feature (tdesc, ARC_CORE_V2_OBSOLETE_FEATURE_NAME); + + if (feat == nullptr) + feat = tdesc_find_feature + (tdesc, ARC_CORE_V2_REDUCED_OBSOLETE_FEATURE_NAME); - is_reduced_rf = false; - core_feature_name = core_v2_feature_name; - core_regs = core_v2_register_names; + return feat; +} + +/* Look for obsolete aux feature names in TDESC. */ + +static const struct tdesc_feature * +find_obsolete_aux_names (const struct target_desc *tdesc) +{ + return tdesc_find_feature (tdesc, ARC_AUX_OBSOLETE_FEATURE_NAME); +} + +/* Based on the MACH value, determines which core register features set + must be used. */ + +static arc_register_feature * +determine_core_reg_feature_set (const unsigned long mach) +{ + switch (mach_type_to_arc_isa (mach)) + { + case ARC_ISA_ARCV1: + return &arc_v1_core_reg_feature; + case ARC_ISA_ARCV2: + return &arc_v2_core_reg_feature; + default: + gdb_assert_not_reached + ("Unknown machine type to determine the core feature set."); } - else +} + +/* At the moment, there is only 1 auxiliary register features set. + This is a place holder for future extendability. */ + +static const arc_register_feature * +determine_aux_reg_feature_set () +{ + return &arc_common_aux_reg_feature; +} + +/* Update accumulator register names (ACCH/ACCL) for r58 and r59 in the + register sets. The endianness determines the assignment: + + ,------.------. + | acch | accl | + ,----|------+------| + | LE | r59 | r58 | + | BE | r58 | r59 | + `----^------^------' */ + +static void +arc_update_acc_reg_names (const int byte_order) +{ + const char *r58_alias + = byte_order == BFD_ENDIAN_LITTLE ? "accl" : "acch"; + const char *r59_alias + = byte_order == BFD_ENDIAN_LITTLE ? "acch" : "accl"; + + /* Subscript 1 must be OK because those registers have 2 names. */ + arc_v1_core_reg_feature.registers[ARC_R58_REGNUM].names[1] = r58_alias; + arc_v1_core_reg_feature.registers[ARC_R59_REGNUM].names[1] = r59_alias; + arc_v2_core_reg_feature.registers[ARC_R58_REGNUM].names[1] = r58_alias; + arc_v2_core_reg_feature.registers[ARC_R59_REGNUM].names[1] = r59_alias; +} + +/* Go through all the registers in REG_SET and check if they exist + in FEATURE. The TDESC_DATA is updated with the register number + in REG_SET if it is found in the feature. If a required register + is not found, this function returns false. */ + +static bool +arc_check_tdesc_feature (struct tdesc_arch_data *tdesc_data, + const struct tdesc_feature *feature, + const struct arc_register_feature *reg_set) +{ + for (const auto ® : reg_set->registers) { - feature = tdesc_find_feature (tdesc_loc, core_reduced_v2_feature_name); - if (feature != NULL) + bool found = false; + + for (const char *name : reg.names) { - if (!is_arcv2) - { - arc_print (_("Error: ARC v2 target description supplied for " - "non-ARCv2 target.\n")); - return false; - } + found + = tdesc_numbered_register (feature, tdesc_data, reg.regnum, name); - is_reduced_rf = true; - core_feature_name = core_reduced_v2_feature_name; - core_regs = core_v2_register_names; + if (found) + break; } - else + + if (!found && reg.required_p) { - feature = tdesc_find_feature (tdesc_loc, - core_arcompact_feature_name); - if (feature != NULL) - { - if (is_arcv2) - { - arc_print (_("Error: ARCompact target description supplied " - "for non-ARCompact target.\n")); - return false; - } - - is_reduced_rf = false; - core_feature_name = core_arcompact_feature_name; - core_regs = core_arcompact_register_names; - } - else + std::ostringstream reg_names; + for (std::size_t i = 0; i < reg.names.size(); ++i) { - arc_print (_("Error: Couldn't find core register feature in " - "supplied target description.")); - return false; + if (i == 0) + reg_names << "'" << reg.names[0] << "'"; + else + reg_names << " or '" << reg.names[0] << "'"; } + arc_print (_("Error: Cannot find required register(s) %s " + "in feature '%s'.\n"), reg_names.str ().c_str (), + feature->name.c_str ()); + return false; } } - struct tdesc_arch_data *tdesc_data_loc = tdesc_data_alloc (); + return true; +} - gdb_assert (feature != NULL); - int valid_p = 1; +/* Check for the existance of "lp_start" and "lp_end" in target description. + If both are present, assume there is hardware loop support in the target. + This can be improved by looking into "lpc_size" field of "isa_config" + auxiliary register. */ - for (int i = 0; i <= ARC_LAST_CORE_REGNUM; i++) +static bool +arc_check_for_hw_loops (const struct target_desc *tdesc, + struct tdesc_arch_data *data) +{ + const auto feature_aux = tdesc_find_feature (tdesc, ARC_AUX_FEATURE_NAME); + const auto aux_regset = determine_aux_reg_feature_set (); + + if (feature_aux == nullptr) + return false; + + bool hw_loop_p = false; + const auto lp_start_name = + aux_regset->registers[ARC_LP_START_REGNUM - ARC_FIRST_AUX_REGNUM].names[0]; + const auto lp_end_name = + aux_regset->registers[ARC_LP_END_REGNUM - ARC_FIRST_AUX_REGNUM].names[0]; + + hw_loop_p = tdesc_numbered_register (feature_aux, data, + ARC_LP_START_REGNUM, lp_start_name); + hw_loop_p &= tdesc_numbered_register (feature_aux, data, + ARC_LP_END_REGNUM, lp_end_name); + + return hw_loop_p; +} + +/* Initialize target description for the ARC. + + Returns true if input TDESC was valid and in this case it will assign TDESC + and TDESC_DATA output parameters. */ + +static bool +arc_tdesc_init (struct gdbarch_info info, const struct target_desc **tdesc, + struct tdesc_arch_data **tdesc_data) +{ + const struct target_desc *tdesc_loc = info.target_desc; + if (arc_debug) + debug_printf ("arc: Target description initialization.\n"); + + /* If target doesn't provide a description, use the default ones. */ + if (!tdesc_has_registers (tdesc_loc)) { - /* If rf16, then skip extra registers. */ - if (is_reduced_rf && ((i >= ARC_R4_REGNUM && i <= ARC_R9_REGNUM) - || (i >= ARC_R16_REGNUM && i <= ARC_R25_REGNUM))) - continue; - - valid_p = tdesc_numbered_register (feature, tdesc_data_loc, i, - core_regs[i]); - - /* - Ignore errors in extension registers - they are optional. - - Ignore missing ILINK because it doesn't make sense for Linux. - - Ignore missing ILINK2 when architecture is ARCompact, because it - doesn't make sense for Linux targets. - - In theory those optional registers should be in separate features, but - that would create numerous but tiny features, which looks like an - overengineering of a rather simple task. */ - if (!valid_p && (i <= ARC_SP_REGNUM || i == ARC_BLINK_REGNUM - || i == ARC_LP_COUNT_REGNUM || i == ARC_PCL_REGNUM - || (i == ARC_R30_REGNUM && is_arcv2))) - { - arc_print (_("Error: Cannot find required register `%s' in " - "feature `%s'.\n"), core_regs[i], core_feature_name); - tdesc_data_cleanup (tdesc_data_loc); - return false; - } + arc_arch_features features + = arc_arch_features_create (info.abfd, + info.bfd_arch_info->mach); + tdesc_loc = arc_lookup_target_description (features); } + gdb_assert (tdesc_loc != nullptr); + + if (arc_debug) + debug_printf ("arc: Have got a target description\n"); - /* Mandatory AUX registers are intentionally few and are common between - ARCompact and ARC v2, so same code can be used for both. */ - feature = tdesc_find_feature (tdesc_loc, aux_minimal_feature_name); - if (feature == NULL) + const struct tdesc_feature *feature_core + = tdesc_find_feature (tdesc_loc, ARC_CORE_FEATURE_NAME); + const struct tdesc_feature *feature_aux + = tdesc_find_feature (tdesc_loc, ARC_AUX_FEATURE_NAME); + + /* Maybe there still is a chance to salvage the input. */ + if (feature_core == nullptr) + feature_core = find_obsolete_core_names (tdesc_loc); + if (feature_aux == nullptr) + feature_aux = find_obsolete_aux_names (tdesc_loc); + + if (feature_core == nullptr) { - arc_print (_("Error: Cannot find required feature `%s' in supplied " - "target description.\n"), aux_minimal_feature_name); - tdesc_data_cleanup (tdesc_data_loc); + arc_print (_("Error: Cannot find required feature '%s' in supplied " + "target description.\n"), ARC_CORE_FEATURE_NAME); return false; } - for (int i = ARC_FIRST_AUX_REGNUM; i <= ARC_LAST_AUX_REGNUM; i++) + if (feature_aux == nullptr) { - const char *name = aux_minimal_register_names[i - ARC_FIRST_AUX_REGNUM]; - valid_p = tdesc_numbered_register (feature, tdesc_data_loc, i, name); - if (!valid_p) - { - arc_print (_("Error: Cannot find required register `%s' " - "in feature `%s'.\n"), - name, tdesc_feature_name (feature)); - tdesc_data_cleanup (tdesc_data_loc); - return false; - } + arc_print (_("Error: Cannot find required feature '%s' in supplied " + "target description.\n"), ARC_AUX_FEATURE_NAME); + return false; + } + + const arc_register_feature *arc_core_reg_feature + = determine_core_reg_feature_set (info.bfd_arch_info->mach); + const arc_register_feature *arc_aux_reg_feature + = determine_aux_reg_feature_set (); + + struct tdesc_arch_data *tdesc_data_loc = tdesc_data_alloc (); + + arc_update_acc_reg_names (info.byte_order); + + bool valid_p = arc_check_tdesc_feature (tdesc_data_loc, + feature_core, + arc_core_reg_feature); + + valid_p &= arc_check_tdesc_feature (tdesc_data_loc, + feature_aux, + arc_aux_reg_feature); + + if (!valid_p) + { + if (arc_debug) + debug_printf ("arc: Target description is not valid\n"); + tdesc_data_cleanup (tdesc_data_loc); + return false; } *tdesc = tdesc_loc; @@ -1922,7 +2155,7 @@ static ULONGEST arc_type_align (struct gdbarch *gdbarch, struct type *type) { - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_PTR: case TYPE_CODE_FUNC: @@ -1957,13 +2190,15 @@ debug_printf ("arc: Architecture initialization.\n"); if (!arc_tdesc_init (info, &tdesc, &tdesc_data)) - return NULL; + return nullptr; /* Allocate the ARC-private target-dependent information structure, and the GDB target-independent information structure. */ - struct gdbarch_tdep *tdep = XCNEW (struct gdbarch_tdep); + gdb::unique_xmalloc_ptr tdep + (XCNEW (struct gdbarch_tdep)); tdep->jb_pc = -1; /* No longjmp support by default. */ - struct gdbarch *gdbarch = gdbarch_alloc (&info, tdep); + tdep->has_hw_loops = arc_check_for_hw_loops (tdesc, tdesc_data); + struct gdbarch *gdbarch = gdbarch_alloc (&info, tdep.release ()); /* Data types. */ set_gdbarch_short_bit (gdbarch, 16); @@ -2044,7 +2279,7 @@ It can override functions set earlier. */ gdbarch_init_osabi (info, gdbarch); - if (tdep->jb_pc >= 0) + if (gdbarch_tdep (gdbarch)->jb_pc >= 0) set_gdbarch_get_longjmp_target (gdbarch, arc_get_longjmp_target); /* Disassembler options. Enforce CPU if it was specified in XML target @@ -2117,14 +2352,6 @@ fprintf_unfiltered (file, "arc_dump_tdep: jb_pc = %i\n", tdep->jb_pc); } -/* Wrapper for "maintenance print arc" list of commands. */ - -static void -maintenance_print_arc_command (const char *args, int from_tty) -{ - cmd_show_list (maintenance_print_arc_list, from_tty, ""); -} - /* This command accepts single argument - address of instruction to disassemble. */ @@ -2145,22 +2372,20 @@ arc_insn_dump (insn); } +void _initialize_arc_tdep (); void -_initialize_arc_tdep (void) +_initialize_arc_tdep () { gdbarch_register (bfd_arch_arc, arc_gdbarch_init, arc_dump_tdep); - initialize_tdesc_arc_v2 (); - initialize_tdesc_arc_arcompact (); - /* Register ARC-specific commands with gdb. */ /* Add root prefix command for "maintenance print arc" commands. */ - add_prefix_cmd ("arc", class_maintenance, maintenance_print_arc_command, - _("ARC-specific maintenance commands for printing GDB " - "internal state."), - &maintenance_print_arc_list, "maintenance print arc ", 0, - &maintenanceprintlist); + add_show_prefix_cmd ("arc", class_maintenance, + _("ARC-specific maintenance commands for printing GDB " + "internal state."), + &maintenance_print_arc_list, "maintenance print arc ", + 0, &maintenanceprintlist); add_cmd ("arc-instruction", class_maintenance, dump_arc_instruction_command, diff -Nru gdb-9.1/gdb/arc-tdep.h gdb-10.2/gdb/arc-tdep.h --- gdb-9.1/gdb/arc-tdep.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/arc-tdep.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target dependent code for ARC architecture, for GDB. - Copyright 2005-2020 Free Software Foundation, Inc. + Copyright 2005-2021 Free Software Foundation, Inc. Contributed by Synopsys Inc. This file is part of GDB. @@ -23,6 +23,8 @@ /* Need disassemble_info. */ #include "dis-asm.h" +#include "gdbarch.h" +#include "arch/arc.h" /* To simplify GDB code this enum assumes that internal regnums should be same as architectural register numbers, i.e. PCL regnum is 63. This allows to @@ -34,7 +36,6 @@ { /* Core registers. */ ARC_R0_REGNUM = 0, - ARC_FIRST_CORE_REGNUM = ARC_R0_REGNUM, ARC_R1_REGNUM = 1, ARC_R4_REGNUM = 4, ARC_R7_REGNUM = 7, @@ -53,6 +54,9 @@ ARC_R30_REGNUM, /* Return address from function. */ ARC_BLINK_REGNUM, + /* Accumulator registers. */ + ARC_R58_REGNUM = 58, + ARC_R59_REGNUM, /* Zero-delay loop counter. */ ARC_LP_COUNT_REGNUM = 60, /* Reserved register number. There should never be a register with such @@ -68,14 +72,23 @@ /* Program counter, aligned to 4-bytes, read-only. */ ARC_PCL_REGNUM, ARC_LAST_CORE_REGNUM = ARC_PCL_REGNUM, + /* AUX registers. */ /* Actual program counter. */ ARC_PC_REGNUM, ARC_FIRST_AUX_REGNUM = ARC_PC_REGNUM, /* Status register. */ ARC_STATUS32_REGNUM, - ARC_LAST_REGNUM = ARC_STATUS32_REGNUM, - ARC_LAST_AUX_REGNUM = ARC_STATUS32_REGNUM, + /* Zero-delay loop start instruction. */ + ARC_LP_START_REGNUM, + /* Zero-delay loop next-after-last instruction. */ + ARC_LP_END_REGNUM, + /* Branch target address. */ + ARC_BTA_REGNUM, + /* Exception return address. */ + ARC_ERET_REGNUM, + ARC_LAST_AUX_REGNUM = ARC_ERET_REGNUM, + ARC_LAST_REGNUM = ARC_LAST_AUX_REGNUM, /* Additional ABI constants. */ ARC_FIRST_ARG_REGNUM = ARC_R0_REGNUM, @@ -89,6 +102,14 @@ Longer registers are represented as pairs of 32-bit registers. */ #define ARC_REGISTER_SIZE 4 +/* STATUS32 register: hardware loops disabled bit. */ +#define ARC_STATUS32_L_MASK (1 << 12) +/* STATUS32 register: current instruction is a delay slot. */ +#define ARC_STATUS32_DE_MASK (1 << 6) + +/* Special value for register offset arrays. */ +#define ARC_OFFSET_NO_REGISTER (-1) + #define arc_print(fmt, args...) fprintf_unfiltered (gdb_stdlog, fmt, ##args) extern int arc_debug; @@ -100,6 +121,9 @@ /* Offset to PC value in jump buffer. If this is negative, longjmp support will be disabled. */ int jb_pc; + + /* Whether target has hardware (aka zero-delay) loops. */ + bool has_hw_loops; }; /* Utility functions used by other ARC-specific modules. */ @@ -163,4 +187,9 @@ CORE_ADDR arc_insn_get_linear_next_pc (const struct arc_instruction &insn); +/* Create an arc_arch_features instance from the provided data. */ + +arc_arch_features arc_arch_features_create (const bfd *abfd, + const unsigned long mach); + #endif /* ARC_TDEP_H */ diff -Nru gdb-9.1/gdb/arm-bsd-tdep.c gdb-10.2/gdb/arm-bsd-tdep.c --- gdb-9.1/gdb/arm-bsd-tdep.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/arm-bsd-tdep.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for ARM BSD's. - Copyright (C) 2006-2020 Free Software Foundation, Inc. + Copyright (C) 2006-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/arm-fbsd-nat.c gdb-10.2/gdb/arm-fbsd-nat.c --- gdb-9.1/gdb/arm-fbsd-nat.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/arm-fbsd-nat.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Native-dependent code for FreeBSD/arm. - Copyright (C) 2017-2020 Free Software Foundation, Inc. + Copyright (C) 2017-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -143,8 +143,9 @@ return desc; } +void _initialize_arm_fbsd_nat (); void -_initialize_arm_fbsd_nat (void) +_initialize_arm_fbsd_nat () { add_inf_child_target (&the_arm_fbsd_nat_target); } diff -Nru gdb-9.1/gdb/arm-fbsd-tdep.c gdb-10.2/gdb/arm-fbsd-tdep.c --- gdb-9.1/gdb/arm-fbsd-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/arm-fbsd-tdep.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for FreeBSD/arm. - Copyright (C) 2017-2020 Free Software Foundation, Inc. + Copyright (C) 2017-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -150,7 +150,7 @@ regcache_supply_regset, regcache_collect_regset }; -/* Implement the "regset_from_core_section" gdbarch method. */ +/* Implement the "iterate_over_regset_sections" gdbarch method. */ static void arm_fbsd_iterate_over_regset_sections (struct gdbarch *gdbarch, @@ -235,8 +235,9 @@ set_gdbarch_software_single_step (gdbarch, arm_software_single_step); } +void _initialize_arm_fbsd_tdep (); void -_initialize_arm_fbsd_tdep (void) +_initialize_arm_fbsd_tdep () { gdbarch_register_osabi (bfd_arch_arm, 0, GDB_OSABI_FREEBSD, arm_fbsd_init_abi); diff -Nru gdb-9.1/gdb/arm-fbsd-tdep.h gdb-10.2/gdb/arm-fbsd-tdep.h --- gdb-9.1/gdb/arm-fbsd-tdep.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/arm-fbsd-tdep.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* FreeBSD/arm target support, prototypes. - Copyright (C) 2017-2020 Free Software Foundation, Inc. + Copyright (C) 2017-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/arm-linux-nat.c gdb-10.2/gdb/arm-linux-nat.c --- gdb-9.1/gdb/arm-linux-nat.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/arm-linux-nat.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* GNU/Linux on ARM native support. - Copyright (C) 1999-2020 Free Software Foundation, Inc. + Copyright (C) 1999-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -1299,8 +1299,9 @@ *child_state = *parent_state; } +void _initialize_arm_linux_nat (); void -_initialize_arm_linux_nat (void) +_initialize_arm_linux_nat () { /* Register the target. */ linux_target = &the_arm_linux_nat_target; diff -Nru gdb-9.1/gdb/arm-linux-tdep.c gdb-10.2/gdb/arm-linux-tdep.c --- gdb-9.1/gdb/arm-linux-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/arm-linux-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* GNU/Linux on ARM target support. - Copyright (C) 1999-2020 Free Software Foundation, Inc. + Copyright (C) 1999-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -1103,12 +1103,13 @@ the program has stepped into a Linux kernel helper routine (which must be handled as a special case). */ -static struct displaced_step_closure * +static displaced_step_closure_up arm_linux_displaced_step_copy_insn (struct gdbarch *gdbarch, CORE_ADDR from, CORE_ADDR to, struct regcache *regs) { - arm_displaced_step_closure *dsc = new arm_displaced_step_closure; + std::unique_ptr dsc + (new arm_displaced_step_closure); /* Detect when we enter an (inaccessible by GDB) Linux kernel helper, and stop at the return location. */ @@ -1118,19 +1119,20 @@ fprintf_unfiltered (gdb_stdlog, "displaced: detected kernel helper " "at %.8lx\n", (unsigned long) from); - arm_catch_kernel_helper_return (gdbarch, from, to, regs, dsc); + arm_catch_kernel_helper_return (gdbarch, from, to, regs, dsc.get ()); } else { /* Override the default handling of SVC instructions. */ dsc->u.svc.copy_svc_os = arm_linux_copy_svc; - arm_process_displaced_insn (gdbarch, from, to, regs, dsc); + arm_process_displaced_insn (gdbarch, from, to, regs, dsc.get ()); } - arm_displaced_init_closure (gdbarch, from, to, dsc); + arm_displaced_init_closure (gdbarch, from, to, dsc.get ()); - return dsc; + /* This is a work around for a problem with g++ 4.8. */ + return displaced_step_closure_up (dsc.release ()); } /* Implementation of `gdbarch_stap_is_single_operand', as defined in @@ -2001,8 +2003,9 @@ set_gdbarch_gcc_target_options (gdbarch, arm_linux_gcc_target_options); } +void _initialize_arm_linux_tdep (); void -_initialize_arm_linux_tdep (void) +_initialize_arm_linux_tdep () { gdbarch_register_osabi (bfd_arch_arm, 0, GDB_OSABI_LINUX, arm_linux_init_abi); diff -Nru gdb-9.1/gdb/arm-linux-tdep.h gdb-10.2/gdb/arm-linux-tdep.h --- gdb-9.1/gdb/arm-linux-tdep.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/arm-linux-tdep.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* GNU/Linux on ARM target support, prototypes. - Copyright (C) 2006-2020 Free Software Foundation, Inc. + Copyright (C) 2006-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/arm-nbsd-nat.c gdb-10.2/gdb/arm-nbsd-nat.c --- gdb-9.1/gdb/arm-nbsd-nat.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/arm-nbsd-nat.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Native-dependent code for BSD Unix running on ARM's, for GDB. - Copyright (C) 1988-2020 Free Software Foundation, Inc. + Copyright (C) 1988-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -17,6 +17,8 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ +/* We define this to get types like register_t. */ +#define _KERNTYPES #include "defs.h" #include "gdbcore.h" #include "inferior.h" @@ -24,54 +26,39 @@ #include "target.h" #include #include +#include #include #include #include "arm-tdep.h" +#include "arm-nbsd-tdep.h" +#include "aarch32-tdep.h" #include "inf-ptrace.h" +#include "nbsd-nat.h" -class arm_netbsd_nat_target final : public inf_ptrace_target +class arm_netbsd_nat_target final : public nbsd_nat_target { public: /* Add our register access methods. */ void fetch_registers (struct regcache *, int) override; void store_registers (struct regcache *, int) override; + const struct target_desc *read_description () override; }; static arm_netbsd_nat_target the_arm_netbsd_nat_target; static void -arm_supply_gregset (struct regcache *regcache, struct reg *gregset) +arm_supply_vfpregset (struct regcache *regcache, struct fpreg *fpregset) { - int regno; - CORE_ADDR r_pc; - - /* Integer registers. */ - for (regno = ARM_A1_REGNUM; regno < ARM_SP_REGNUM; regno++) - regcache->raw_supply (regno, (char *) &gregset->r[regno]); - - regcache->raw_supply (ARM_SP_REGNUM, (char *) &gregset->r_sp); - regcache->raw_supply (ARM_LR_REGNUM, (char *) &gregset->r_lr); - /* This is ok: we're running native... */ - r_pc = gdbarch_addr_bits_remove (regcache->arch (), gregset->r_pc); - regcache->raw_supply (ARM_PC_REGNUM, (char *) &r_pc); - - if (arm_apcs_32) - regcache->raw_supply (ARM_PS_REGNUM, (char *) &gregset->r_cpsr); - else - regcache->raw_supply (ARM_PS_REGNUM, (char *) &gregset->r_pc); -} - -static void -arm_supply_fparegset (struct regcache *regcache, struct fpreg *fparegset) -{ - int regno; + struct gdbarch_tdep *tdep = gdbarch_tdep (regcache->arch ()); + if (tdep->vfp_register_count == 0) + return; - for (regno = ARM_F0_REGNUM; regno <= ARM_F7_REGNUM; regno++) - regcache->raw_supply (regno, - (char *) &fparegset->fpr[regno - ARM_F0_REGNUM]); + struct vfpreg &vfp = fpregset->fpr_vfp; + for (int regno = 0; regno <= tdep->vfp_register_count; regno++) + regcache->raw_supply (regno + ARM_D0_REGNUM, (char *) &vfp.vfp_regs[regno]); - regcache->raw_supply (ARM_FPS_REGNUM, (char *) &fparegset->fpr_fpsr); + regcache->raw_supply (ARM_FPSCR_REGNUM, (char *) &vfp.vfp_fpscr); } static void @@ -79,76 +66,30 @@ { struct reg inferior_registers; int ret; + int lwp = regcache->ptid ().lwp (); ret = ptrace (PT_GETREGS, regcache->ptid ().pid (), - (PTRACE_TYPE_ARG3) &inferior_registers, 0); + (PTRACE_TYPE_ARG3) &inferior_registers, lwp); if (ret < 0) { warning (_("unable to fetch general register")); return; } - - switch (regno) - { - case ARM_SP_REGNUM: - regcache->raw_supply (ARM_SP_REGNUM, (char *) &inferior_registers.r_sp); - break; - - case ARM_LR_REGNUM: - regcache->raw_supply (ARM_LR_REGNUM, (char *) &inferior_registers.r_lr); - break; - - case ARM_PC_REGNUM: - /* This is ok: we're running native... */ - inferior_registers.r_pc = gdbarch_addr_bits_remove - (regcache->arch (), - inferior_registers.r_pc); - regcache->raw_supply (ARM_PC_REGNUM, (char *) &inferior_registers.r_pc); - break; - - case ARM_PS_REGNUM: - if (arm_apcs_32) - regcache->raw_supply (ARM_PS_REGNUM, - (char *) &inferior_registers.r_cpsr); - else - regcache->raw_supply (ARM_PS_REGNUM, - (char *) &inferior_registers.r_pc); - break; - - default: - regcache->raw_supply (regno, (char *) &inferior_registers.r[regno]); - break; - } -} - -static void -fetch_regs (struct regcache *regcache) -{ - struct reg inferior_registers; - int ret; - int regno; - - ret = ptrace (PT_GETREGS, regcache->ptid ().pid (), - (PTRACE_TYPE_ARG3) &inferior_registers, 0); - - if (ret < 0) - { - warning (_("unable to fetch general registers")); - return; - } - - arm_supply_gregset (regcache, &inferior_registers); + arm_nbsd_supply_gregset (nullptr, regcache, regno, &inferior_registers, + sizeof (inferior_registers)); } static void fetch_fp_register (struct regcache *regcache, int regno) { struct fpreg inferior_fp_registers; - int ret; + int lwp = regcache->ptid ().lwp (); - ret = ptrace (PT_GETFPREGS, regcache->ptid ().pid (), - (PTRACE_TYPE_ARG3) &inferior_fp_registers, 0); + int ret = ptrace (PT_GETFPREGS, regcache->ptid ().pid (), + (PTRACE_TYPE_ARG3) &inferior_fp_registers, lwp); + + struct vfpreg &vfp = inferior_fp_registers.fpr_vfp; if (ret < 0) { @@ -156,29 +97,29 @@ return; } - switch (regno) + struct gdbarch_tdep *tdep = gdbarch_tdep (regcache->arch ()); + if (regno == ARM_FPSCR_REGNUM && tdep->vfp_register_count != 0) + regcache->raw_supply (ARM_FPSCR_REGNUM, (char *) &vfp.vfp_fpscr); + else if (regno >= ARM_D0_REGNUM + && regno <= ARM_D0_REGNUM + tdep->vfp_register_count) { - case ARM_FPS_REGNUM: - regcache->raw_supply (ARM_FPS_REGNUM, - (char *) &inferior_fp_registers.fpr_fpsr); - break; - - default: - regcache->raw_supply - (regno, (char *) &inferior_fp_registers.fpr[regno - ARM_F0_REGNUM]); - break; + regcache->raw_supply (regno, + (char *) &vfp.vfp_regs[regno - ARM_D0_REGNUM]); } + else + warning (_("Invalid register number.")); } static void fetch_fp_regs (struct regcache *regcache) { struct fpreg inferior_fp_registers; + int lwp = regcache->ptid ().lwp (); int ret; int regno; ret = ptrace (PT_GETFPREGS, regcache->ptid ().pid (), - (PTRACE_TYPE_ARG3) &inferior_fp_registers, 0); + (PTRACE_TYPE_ARG3) &inferior_fp_registers, lwp); if (ret < 0) { @@ -186,11 +127,11 @@ return; } - arm_supply_fparegset (regcache, &inferior_fp_registers); + arm_supply_vfpregset (regcache, &inferior_fp_registers); } void -arm_nbsd_nat_target::fetch_registers (struct regcache *regcache, int regno) +arm_netbsd_nat_target::fetch_registers (struct regcache *regcache, int regno) { if (regno >= 0) { @@ -201,7 +142,7 @@ } else { - fetch_regs (regcache); + fetch_register (regcache, -1); fetch_fp_regs (regcache); } } @@ -212,10 +153,11 @@ { struct gdbarch *gdbarch = regcache->arch (); struct reg inferior_registers; + int lwp = regcache->ptid ().lwp (); int ret; ret = ptrace (PT_GETREGS, regcache->ptid ().pid (), - (PTRACE_TYPE_ARG3) &inferior_registers, 0); + (PTRACE_TYPE_ARG3) &inferior_registers, lwp); if (ret < 0) { @@ -273,7 +215,7 @@ } ret = ptrace (PT_SETREGS, regcache->ptid ().pid (), - (PTRACE_TYPE_ARG3) &inferior_registers, 0); + (PTRACE_TYPE_ARG3) &inferior_registers, lwp); if (ret < 0) warning (_("unable to write register %d to inferior"), regno); @@ -284,6 +226,7 @@ { struct gdbarch *gdbarch = regcache->arch (); struct reg inferior_registers; + int lwp = regcache->ptid ().lwp (); int ret; int regno; @@ -315,7 +258,7 @@ } ret = ptrace (PT_SETREGS, regcache->ptid ().pid (), - (PTRACE_TYPE_ARG3) &inferior_registers, 0); + (PTRACE_TYPE_ARG3) &inferior_registers, lwp); if (ret < 0) warning (_("unable to store general registers")); @@ -325,10 +268,10 @@ store_fp_register (const struct regcache *regcache, int regno) { struct fpreg inferior_fp_registers; - int ret; - - ret = ptrace (PT_GETFPREGS, regcache->ptid ().pid (), - (PTRACE_TYPE_ARG3) &inferior_fp_registers, 0); + int lwp = regcache->ptid ().lwp (); + int ret = ptrace (PT_GETFPREGS, regcache->ptid ().pid (), + (PTRACE_TYPE_ARG3) &inferior_fp_registers, lwp); + struct vfpreg &vfp = inferior_fp_registers.fpr_vfp; if (ret < 0) { @@ -336,21 +279,20 @@ return; } - switch (regno) + struct gdbarch_tdep *tdep = gdbarch_tdep (regcache->arch ()); + if (regno == ARM_FPSCR_REGNUM && tdep->vfp_register_count != 0) + regcache->raw_collect (ARM_FPSCR_REGNUM, (char *) &vfp.vfp_fpscr); + else if (regno >= ARM_D0_REGNUM + && regno <= ARM_D0_REGNUM + tdep->vfp_register_count) { - case ARM_FPS_REGNUM: - regcache->raw_collect (ARM_FPS_REGNUM, - (char *) &inferior_fp_registers.fpr_fpsr); - break; - - default: - regcache->raw_collect - (regno, (char *) &inferior_fp_registers.fpr[regno - ARM_F0_REGNUM]); - break; + regcache->raw_collect (regno, + (char *) &vfp.vfp_regs[regno - ARM_D0_REGNUM]); } + else + warning (_("Invalid register number.")); ret = ptrace (PT_SETFPREGS, regcache->ptid ().pid (), - (PTRACE_TYPE_ARG3) &inferior_fp_registers, 0); + (PTRACE_TYPE_ARG3) &inferior_fp_registers, lwp); if (ret < 0) warning (_("unable to write register %d to inferior"), regno); @@ -359,27 +301,28 @@ static void store_fp_regs (const struct regcache *regcache) { - struct fpreg inferior_fp_registers; - int ret; - int regno; - + struct gdbarch_tdep *tdep = gdbarch_tdep (regcache->arch ()); + int lwp = regcache->ptid ().lwp (); + if (tdep->vfp_register_count == 0) + return; - for (regno = ARM_F0_REGNUM; regno <= ARM_F7_REGNUM; regno++) + struct fpreg fpregs; + for (int regno = 0; regno <= tdep->vfp_register_count; regno++) regcache->raw_collect - (regno, (char *) &inferior_fp_registers.fpr[regno - ARM_F0_REGNUM]); + (regno + ARM_D0_REGNUM, (char *) &fpregs.fpr_vfp.vfp_regs[regno]); - regcache->raw_collect (ARM_FPS_REGNUM, - (char *) &inferior_fp_registers.fpr_fpsr); + regcache->raw_collect (ARM_FPSCR_REGNUM, + (char *) &fpregs.fpr_vfp.vfp_fpscr); - ret = ptrace (PT_SETFPREGS, regcache->ptid ().pid (), - (PTRACE_TYPE_ARG3) &inferior_fp_registers, 0); + int ret = ptrace (PT_SETFPREGS, regcache->ptid ().pid (), + (PTRACE_TYPE_ARG3) &fpregs, lwp); if (ret < 0) warning (_("unable to store floating-point registers")); } void -arm_nbsd_nat_target::store_registers (struct regcache *regcache, int regno) +arm_netbsd_nat_target::store_registers (struct regcache *regcache, int regno) { if (regno >= 0) { @@ -395,59 +338,26 @@ } } -static void -fetch_elfcore_registers (struct regcache *regcache, - char *core_reg_sect, unsigned core_reg_size, - int which, CORE_ADDR ignore) -{ - struct reg gregset; - struct fpreg fparegset; - - switch (which) - { - case 0: /* Integer registers. */ - if (core_reg_size != sizeof (struct reg)) - warning (_("wrong size of register set in core file")); - else - { - /* The memcpy may be unnecessary, but we can't really be sure - of the alignment of the data in the core file. */ - memcpy (&gregset, core_reg_sect, sizeof (gregset)); - arm_supply_gregset (regcache, &gregset); - } - break; +const struct target_desc * +arm_netbsd_nat_target::read_description () +{ + int flag; + size_t len = sizeof (flag); - case 2: - if (core_reg_size != sizeof (struct fpreg)) - warning (_("wrong size of FPA register set in core file")); - else - { - /* The memcpy may be unnecessary, but we can't really be sure - of the alignment of the data in the core file. */ - memcpy (&fparegset, core_reg_sect, sizeof (fparegset)); - arm_supply_fparegset (regcache, &fparegset); - } - break; + if (sysctlbyname("machdep.fpu_present", &flag, &len, NULL, 0) != 0 + || !flag) + return arm_read_description (ARM_FP_TYPE_NONE); - default: - /* Don't know what kind of register request this is; just ignore it. */ - break; - } -} + len = sizeof(flag); + if (sysctlbyname("machdep.neon_present", &flag, &len, NULL, 0) == 0 && flag) + return aarch32_read_description (); -static struct core_fns arm_netbsd_elfcore_fns = -{ - bfd_target_elf_flavour, /* core_flavour. */ - default_check_format, /* check_format. */ - default_core_sniffer, /* core_sniffer. */ - fetch_elfcore_registers, /* core_read_registers. */ - NULL -}; + return arm_read_description (ARM_FP_TYPE_VFPV3); +} +void _initialize_arm_netbsd_nat (); void -_initialize_arm_netbsd_nat (void) +_initialize_arm_netbsd_nat () { add_inf_child_target (&the_arm_netbsd_nat_target); - - deprecated_add_core_fns (&arm_netbsd_elfcore_fns); } diff -Nru gdb-9.1/gdb/arm-nbsd-tdep.c gdb-10.2/gdb/arm-nbsd-tdep.c --- gdb-9.1/gdb/arm-nbsd-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/arm-nbsd-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for NetBSD/arm. - Copyright (C) 2002-2020 Free Software Foundation, Inc. + Copyright (C) 2002-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -21,7 +21,10 @@ #include "osabi.h" #include "arch/arm.h" +#include "arm-nbsd-tdep.h" +#include "nbsd-tdep.h" #include "arm-tdep.h" +#include "regset.h" #include "solib-svr4.h" /* Description of the longjmp buffer. */ @@ -35,6 +38,75 @@ static const gdb_byte arm_nbsd_thumb_le_breakpoint[] = {0xfe, 0xde}; static const gdb_byte arm_nbsd_thumb_be_breakpoint[] = {0xde, 0xfe}; +/* This matches struct reg from NetBSD's sys/arch/arm/include/reg.h: + https://github.com/NetBSD/src/blob/7c13e6e6773bb171f4ed3ed53013e9d24b3c1eac/sys/arch/arm/include/reg.h#L39 + */ +struct arm_nbsd_reg +{ + uint32_t reg[13]; + uint32_t sp; + uint32_t lr; + uint32_t pc; + uint32_t cpsr; +}; + +void +arm_nbsd_supply_gregset (const struct regset *regset, struct regcache *regcache, + int regnum, const void *gregs, size_t len) +{ + const arm_nbsd_reg *gregset = static_cast(gregs); + gdb_assert (len >= sizeof (arm_nbsd_reg)); + + /* Integer registers. */ + for (int i = ARM_A1_REGNUM; i < ARM_SP_REGNUM; i++) + if (regnum == -1 || regnum == i) + regcache->raw_supply (i, (char *) &gregset->reg[i]); + + if (regnum == -1 || regnum == ARM_SP_REGNUM) + regcache->raw_supply (ARM_SP_REGNUM, (char *) &gregset->sp); + + if (regnum == -1 || regnum == ARM_LR_REGNUM) + regcache->raw_supply (ARM_LR_REGNUM, (char *) &gregset->lr); + + if (regnum == -1 || regnum == ARM_PC_REGNUM) + { + CORE_ADDR r_pc = gdbarch_addr_bits_remove (regcache->arch (), gregset->pc); + regcache->raw_supply (ARM_PC_REGNUM, (char *) &r_pc); + } + + if (regnum == -1 || regnum == ARM_PS_REGNUM) + { + if (arm_apcs_32) + regcache->raw_supply (ARM_PS_REGNUM, (char *) &gregset->cpsr); + else + regcache->raw_supply (ARM_PS_REGNUM, (char *) &gregset->pc); + } +} + +static const struct regset arm_nbsd_regset = { + nullptr, + arm_nbsd_supply_gregset, + /* We don't need a collect function because we only use this reading registers + (via iterate_over_regset_sections and fetch_regs/fetch_register). */ + nullptr, + 0 +}; + +static void +arm_nbsd_iterate_over_regset_sections (struct gdbarch *gdbarch, + iterate_over_regset_sections_cb *cb, + void *cb_data, + const struct regcache *regcache) +{ + cb (".reg", sizeof (arm_nbsd_reg), sizeof (arm_nbsd_reg), &arm_nbsd_regset, + NULL, cb_data); + /* cbiesinger/2020-02-12 -- as far as I can tell, ARM/NetBSD does + not write any floating point registers into the core file (tested + with NetBSD 9.1_RC1). When it does, this function will need to read them, + and the arm-netbsd gdbarch will need a core_read_description function + to return the right description for them. */ +} + static void arm_netbsd_init_abi_common (struct gdbarch_info info, struct gdbarch *gdbarch) @@ -66,10 +138,12 @@ tdep->jb_pc = ARM_NBSD_JB_PC; tdep->jb_elt_size = ARM_NBSD_JB_ELEMENT_SIZE; + set_gdbarch_iterate_over_regset_sections + (gdbarch, arm_nbsd_iterate_over_regset_sections); /* Single stepping. */ set_gdbarch_software_single_step (gdbarch, arm_software_single_step); } - + static void arm_netbsd_elf_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) @@ -77,6 +151,9 @@ struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); arm_netbsd_init_abi_common (info, gdbarch); + + nbsd_init_abi (info, gdbarch); + if (tdep->fp_model == ARM_FLOAT_AUTO) tdep->fp_model = ARM_FLOAT_SOFT_VFP; @@ -85,8 +162,9 @@ (gdbarch, svr4_ilp32_fetch_link_map_offsets); } +void _initialize_arm_netbsd_tdep (); void -_initialize_arm_netbsd_tdep (void) +_initialize_arm_netbsd_tdep () { gdbarch_register_osabi (bfd_arch_arm, 0, GDB_OSABI_NETBSD, arm_netbsd_elf_init_abi); diff -Nru gdb-9.1/gdb/arm-nbsd-tdep.h gdb-10.2/gdb/arm-nbsd-tdep.h --- gdb-9.1/gdb/arm-nbsd-tdep.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/arm-nbsd-tdep.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,27 @@ +/* NetBSD/ARM support. + + Copyright (C) 2020-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifndef ARM_NBSD_TDEP_H +#define ARM_NBSD_TDEP_H + +void arm_nbsd_supply_gregset + (const struct regset *regset, struct regcache *regcache, + int regnum, const void *gregs, size_t len); + +#endif diff -Nru gdb-9.1/gdb/arm-obsd-tdep.c gdb-10.2/gdb/arm-obsd-tdep.c --- gdb-9.1/gdb/arm-obsd-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/arm-obsd-tdep.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for OpenBSD/arm. - Copyright (C) 2006-2020 Free Software Foundation, Inc. + Copyright (C) 2006-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -115,8 +115,9 @@ } } +void _initialize_armobsd_tdep (); void -_initialize_armobsd_tdep (void) +_initialize_armobsd_tdep () { gdbarch_register_osabi (bfd_arch_arm, 0, GDB_OSABI_OPENBSD, armobsd_init_abi); diff -Nru gdb-9.1/gdb/arm-pikeos-tdep.c gdb-10.2/gdb/arm-pikeos-tdep.c --- gdb-9.1/gdb/arm-pikeos-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/arm-pikeos-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2016-2020 Free Software Foundation, Inc. +/* Copyright (C) 2016-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -81,8 +81,9 @@ return GDB_OSABI_UNKNOWN; } +void _initialize_arm_pikeos_tdep (); void -_initialize_arm_pikeos_tdep (void) +_initialize_arm_pikeos_tdep () { /* Register the sniffer for the PikeOS targets. */ gdbarch_register_osabi_sniffer (bfd_arch_arm, bfd_target_elf_flavour, diff -Nru gdb-9.1/gdb/arm-symbian-tdep.c gdb-10.2/gdb/arm-symbian-tdep.c --- gdb-9.1/gdb/arm-symbian-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/arm-symbian-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* ARM Symbian OS target support. - Copyright (C) 2008-2020 Free Software Foundation, Inc. + Copyright (C) 2008-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -119,8 +119,9 @@ return GDB_OSABI_SYMBIAN; } +void _initialize_arm_symbian_tdep (); void -_initialize_arm_symbian_tdep (void) +_initialize_arm_symbian_tdep () { gdbarch_register_osabi_sniffer (bfd_arch_arm, bfd_target_elf_flavour, diff -Nru gdb-9.1/gdb/arm-tdep.c gdb-10.2/gdb/arm-tdep.c --- gdb-9.1/gdb/arm-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/arm-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Common target dependent code for GDB on ARM systems. - Copyright (C) 1988-2020 Free Software Foundation, Inc. + Copyright (C) 1988-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -38,13 +38,14 @@ #include "frame-base.h" #include "trad-frame.h" #include "objfiles.h" -#include "dwarf2-frame.h" +#include "dwarf2/frame.h" #include "gdbtypes.h" #include "prologue-value.h" #include "remote.h" #include "target-descriptions.h" #include "user-regs.h" #include "observable.h" +#include "count-one-bits.h" #include "arch/arm.h" #include "arch/arm-get-next-pcs.h" @@ -59,6 +60,8 @@ #include "record-full.h" #include +#include "producer.h" + #if GDB_SELF_TEST #include "gdbsupport/selftest.h" #endif @@ -80,7 +83,7 @@ struct arm_mapping_symbol { - bfd_vma value; + CORE_ADDR value; char type; bool operator< (const arm_mapping_symbol &other) const @@ -466,7 +469,7 @@ } /* Determine if the address specified equals any of these magic return - values, called EXC_RETURN, defined by the ARM v6-M and v7-M + values, called EXC_RETURN, defined by the ARM v6-M, v7-M and v8-M architectures. From ARMv6-M Reference Manual B1.5.8 @@ -497,13 +500,25 @@ 0xFFFFFFFD Thread mode Process Basic For more details see "B1.5.8 Exception return behavior" - in both ARMv6-M and ARMv7-M Architecture Reference Manuals. */ + in both ARMv6-M and ARMv7-M Architecture Reference Manuals. + + In the ARMv8-M Architecture Technical Reference also adds + for implementations without the Security Extension: + + EXC_RETURN Condition + 0xFFFFFFB0 Return to Handler mode. + 0xFFFFFFB8 Return to Thread mode using the main stack. + 0xFFFFFFBC Return to Thread mode using the process stack. */ static int arm_m_addr_is_magic (CORE_ADDR addr) { switch (addr) { + /* Values from ARMv8-M Architecture Technical Reference. */ + case 0xffffffb0: + case 0xffffffb8: + case 0xffffffbc: /* Values from Tables in B1.5.8 the EXC_RETURN definitions of the exception return behavior. */ case 0xffffffe1: @@ -930,7 +945,7 @@ parameters from memory. */ ; - else if ((insn & 0xffb0) == 0xe950 /* ldrd Rt, Rt2, + else if ((insn & 0xff70) == 0xe950 /* ldrd Rt, Rt2, [Rn, #+/-imm] */ && pv_is_register (regs[bits (insn, 0, 3)], ARM_SP_REGNUM)) /* Similarly ignore dual loads from the stack. */ @@ -1350,7 +1365,7 @@ && (cust == NULL || COMPUNIT_PRODUCER (cust) == NULL || startswith (COMPUNIT_PRODUCER (cust), "GNU ") - || startswith (COMPUNIT_PRODUCER (cust), "clang "))) + || producer_is_llvm (COMPUNIT_PRODUCER (cust)))) return post_prologue_pc; if (post_prologue_pc != 0) @@ -1985,7 +2000,7 @@ struct arm_exidx_entry { - bfd_vma addr; + CORE_ADDR addr; gdb_byte *entry; bool operator< (const arm_exidx_entry &other) const @@ -2920,14 +2935,64 @@ struct gdbarch *gdbarch = get_frame_arch (this_frame); enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); struct arm_prologue_cache *cache; + CORE_ADDR lr; + CORE_ADDR sp; CORE_ADDR unwound_sp; LONGEST xpsr; + uint32_t exc_return; + uint32_t process_stack_used; + uint32_t extended_frame_used; + uint32_t secure_stack_used; cache = FRAME_OBSTACK_ZALLOC (struct arm_prologue_cache); cache->saved_regs = trad_frame_alloc_saved_regs (this_frame); - unwound_sp = get_frame_register_unsigned (this_frame, - ARM_SP_REGNUM); + /* ARMv7-M Architecture Reference "B1.5.6 Exception entry behavior" + describes which bits in LR that define which stack was used prior + to the exception and if FPU is used (causing extended stack frame). */ + + lr = get_frame_register_unsigned (this_frame, ARM_LR_REGNUM); + sp = get_frame_register_unsigned (this_frame, ARM_SP_REGNUM); + + /* Check EXC_RETURN indicator bits. */ + exc_return = (((lr >> 28) & 0xf) == 0xf); + + /* Check EXC_RETURN bit SPSEL if Main or Thread (process) stack used. */ + process_stack_used = ((lr & (1 << 2)) != 0); + if (exc_return && process_stack_used) + { + /* Thread (process) stack used. + Potentially this could be other register defined by target, but PSP + can be considered a standard name for the "Process Stack Pointer". + To be fully aware of system registers like MSP and PSP, these could + be added to a separate XML arm-m-system-profile that is valid for + ARMv6-M and ARMv7-M architectures. Also to be able to debug eg a + corefile off-line, then these registers must be defined by GDB, + and also be included in the corefile regsets. */ + + int psp_regnum = user_reg_map_name_to_regnum (gdbarch, "psp", -1); + if (psp_regnum == -1) + { + /* Thread (process) stack could not be fetched, + give warning and exit. */ + + warning (_("no PSP thread stack unwinding supported.")); + + /* Terminate any further stack unwinding by refer to self. */ + cache->prev_sp = sp; + return cache; + } + else + { + /* Thread (process) stack used, use PSP as SP. */ + unwound_sp = get_frame_register_unsigned (this_frame, psp_regnum); + } + } + else + { + /* Main stack used, use MSP as SP. */ + unwound_sp = sp; + } /* The hardware saves eight 32-bit words, comprising xPSR, ReturnAddress, LR (R14), R12, R3, R2, R1, R0. See details in @@ -2937,15 +3002,62 @@ cache->saved_regs[1].addr = unwound_sp + 4; cache->saved_regs[2].addr = unwound_sp + 8; cache->saved_regs[3].addr = unwound_sp + 12; - cache->saved_regs[12].addr = unwound_sp + 16; - cache->saved_regs[14].addr = unwound_sp + 20; - cache->saved_regs[15].addr = unwound_sp + 24; + cache->saved_regs[ARM_IP_REGNUM].addr = unwound_sp + 16; + cache->saved_regs[ARM_LR_REGNUM].addr = unwound_sp + 20; + cache->saved_regs[ARM_PC_REGNUM].addr = unwound_sp + 24; cache->saved_regs[ARM_PS_REGNUM].addr = unwound_sp + 28; + /* Check EXC_RETURN bit FTYPE if extended stack frame (FPU regs stored) + type used. */ + extended_frame_used = ((lr & (1 << 4)) == 0); + if (exc_return && extended_frame_used) + { + int i; + int fpu_regs_stack_offset; + + /* This code does not take into account the lazy stacking, see "Lazy + context save of FP state", in B1.5.7, also ARM AN298, supported + by Cortex-M4F architecture. + To fully handle this the FPCCR register (Floating-point Context + Control Register) needs to be read out and the bits ASPEN and LSPEN + could be checked to setup correct lazy stacked FP registers. + This register is located at address 0xE000EF34. */ + + /* Extended stack frame type used. */ + fpu_regs_stack_offset = unwound_sp + 0x20; + for (i = 0; i < 16; i++) + { + cache->saved_regs[ARM_D0_REGNUM + i].addr = fpu_regs_stack_offset; + fpu_regs_stack_offset += 4; + } + cache->saved_regs[ARM_FPSCR_REGNUM].addr = unwound_sp + 0x60; + + /* Offset 0x64 is reserved. */ + cache->prev_sp = unwound_sp + 0x68; + } + else + { + /* Standard stack frame type used. */ + cache->prev_sp = unwound_sp + 0x20; + } + + /* Check EXC_RETURN bit S if Secure or Non-secure stack used. */ + secure_stack_used = ((lr & (1 << 6)) != 0); + if (exc_return && secure_stack_used) + { + /* ARMv8-M Exception and interrupt handling is not considered here. + In the ARMv8-M architecture also EXC_RETURN bit S is controlling if + the Secure or Non-secure stack was used. To separate Secure and + Non-secure stacks, processors that are based on the ARMv8-M + architecture support 4 stack pointers: MSP_S, PSP_S, MSP_NS, PSP_NS. + In addition, a stack limit feature is provided using stack limit + registers (accessible using MSR and MRS instructions) in Privileged + level. */ + } + /* If bit 9 of the saved xPSR is set, then there is a four-byte aligner between the top of the 32-byte stack frame and the previous context's stack pointer. */ - cache->prev_sp = unwound_sp + 32; if (safe_read_memory_integer (unwound_sp + 28, 4, byte_order, &xpsr) && (xpsr & (1 << 9)) != 0) cache->prev_sp += 4; @@ -3305,7 +3417,7 @@ arm_type_align (gdbarch *gdbarch, struct type *t) { t = check_typedef (t); - if (TYPE_CODE (t) == TYPE_CODE_ARRAY && TYPE_VECTOR (t)) + if (t->code () == TYPE_CODE_ARRAY && TYPE_VECTOR (t)) { /* Use the natural alignment for vector types (the same for scalar type), but the maximum alignment is 64-bit. */ @@ -3392,7 +3504,7 @@ enum arm_vfp_cprc_base_type *base_type) { t = check_typedef (t); - switch (TYPE_CODE (t)) + switch (t->code ()) { case TYPE_CODE_FLT: switch (TYPE_LENGTH (t)) @@ -3496,12 +3608,12 @@ int count = 0; unsigned unitlen; int i; - for (i = 0; i < TYPE_NFIELDS (t); i++) + for (i = 0; i < t->num_fields (); i++) { int sub_count = 0; - if (!field_is_static (&TYPE_FIELD (t, i))) - sub_count = arm_vfp_cprc_sub_candidate (TYPE_FIELD_TYPE (t, i), + if (!field_is_static (&t->field (i))) + sub_count = arm_vfp_cprc_sub_candidate (t->field (i).type (), base_type); if (sub_count == -1) return -1; @@ -3525,9 +3637,9 @@ int count = 0; unsigned unitlen; int i; - for (i = 0; i < TYPE_NFIELDS (t); i++) + for (i = 0; i < t->num_fields (); i++) { - int sub_count = arm_vfp_cprc_sub_candidate (TYPE_FIELD_TYPE (t, i), + int sub_count = arm_vfp_cprc_sub_candidate (t->field (i).type (), base_type); if (sub_count == -1) return -1; @@ -3614,7 +3726,7 @@ /* Determine the type of this function and whether the VFP ABI applies. */ ftype = check_typedef (value_type (function)); - if (TYPE_CODE (ftype) == TYPE_CODE_PTR) + if (ftype->code () == TYPE_CODE_PTR) ftype = check_typedef (TYPE_TARGET_TYPE (ftype)); use_vfp_abi = arm_vfp_abi_for_function (gdbarch, ftype); @@ -3659,7 +3771,7 @@ arg_type = check_typedef (value_type (args[argnum])); len = TYPE_LENGTH (arg_type); target_type = TYPE_TARGET_TYPE (arg_type); - typecode = TYPE_CODE (arg_type); + typecode = arg_type->code (); val = value_contents (args[argnum]); align = type_align (arg_type); @@ -3757,7 +3869,7 @@ the THUMB bit in it. */ if (TYPE_CODE_PTR == typecode && target_type != NULL - && TYPE_CODE_FUNC == TYPE_CODE (check_typedef (target_type))) + && TYPE_CODE_FUNC == check_typedef (target_type)->code ()) { CORE_ADDR regval = extract_unsigned_integer (val, len, byte_order); if (arm_pc_is_thumb (gdbarch, regval)) @@ -3919,7 +4031,7 @@ append_composite_type_field (t, "f64", elem); TYPE_VECTOR (t) = 1; - TYPE_NAME (t) = "neon_d"; + t->set_name ("neon_d"); tdep->neon_double_type = t; } @@ -3958,7 +4070,7 @@ append_composite_type_field (t, "f64", init_vector_type (elem, 2)); TYPE_VECTOR (t) = 1; - TYPE_NAME (t) = "neon_q"; + t->set_name ("neon_q"); tdep->neon_quad_type = t; } @@ -3989,7 +4101,7 @@ struct type *t = tdesc_register_type (gdbarch, regnum); if (regnum >= ARM_D0_REGNUM && regnum < ARM_D0_REGNUM + 32 - && TYPE_CODE (t) == TYPE_CODE_FLT + && t->code () == TYPE_CODE_FLT && gdbarch_tdep (gdbarch)->have_neon) return arm_neon_double_type (gdbarch); else @@ -5798,7 +5910,8 @@ { uint32_t status = displaced_read_reg (regs, dsc, ARM_PS_REGNUM); int store_executed = condition_true (dsc->u.block.cond, status); - CORE_ADDR pc_stored_at, transferred_regs = bitcount (dsc->u.block.regmask); + CORE_ADDR pc_stored_at, transferred_regs + = count_one_bits (dsc->u.block.regmask); CORE_ADDR stm_insn_addr; uint32_t pc_val; long offset; @@ -5850,7 +5963,7 @@ uint32_t status = displaced_read_reg (regs, dsc, ARM_PS_REGNUM); int load_executed = condition_true (dsc->u.block.cond, status); unsigned int mask = dsc->u.block.regmask, write_reg = ARM_PC_REGNUM; - unsigned int regs_loaded = bitcount (mask); + unsigned int regs_loaded = count_one_bits (mask); unsigned int num_to_shuffle = regs_loaded, clobbered; /* The method employed here will fail if the register list is fully populated @@ -5982,7 +6095,7 @@ contiguous chunk r0...rX before doing the transfer, then shuffling registers into the correct places in the cleanup routine. */ unsigned int regmask = insn & 0xffff; - unsigned int num_in_list = bitcount (regmask), new_regmask; + unsigned int num_in_list = count_one_bits (regmask), new_regmask; unsigned int i; for (i = 0; i < num_in_list; i++) @@ -6084,7 +6197,7 @@ else { unsigned int regmask = dsc->u.block.regmask; - unsigned int num_in_list = bitcount (regmask), new_regmask; + unsigned int num_in_list = count_one_bits (regmask), new_regmask; unsigned int i; for (i = 0; i < num_in_list; i++) @@ -7102,7 +7215,7 @@ } else { - unsigned int num_in_list = bitcount (dsc->u.block.regmask); + unsigned int num_in_list = count_one_bits (dsc->u.block.regmask); unsigned int i; unsigned int new_regmask; @@ -7803,7 +7916,7 @@ struct gdbarch *gdbarch = regs->arch (); enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); - if (TYPE_CODE_FLT == TYPE_CODE (type)) + if (TYPE_CODE_FLT == type->code ()) { switch (gdbarch_tdep (gdbarch)->fp_model) { @@ -7838,12 +7951,12 @@ break; } } - else if (TYPE_CODE (type) == TYPE_CODE_INT - || TYPE_CODE (type) == TYPE_CODE_CHAR - || TYPE_CODE (type) == TYPE_CODE_BOOL - || TYPE_CODE (type) == TYPE_CODE_PTR + else if (type->code () == TYPE_CODE_INT + || type->code () == TYPE_CODE_CHAR + || type->code () == TYPE_CODE_BOOL + || type->code () == TYPE_CODE_PTR || TYPE_IS_REFERENCE (type) - || TYPE_CODE (type) == TYPE_CODE_ENUM) + || type->code () == TYPE_CODE_ENUM) { /* If the type is a plain integer, then the access is straight-forward. Otherwise we have to play around a bit @@ -7899,7 +8012,7 @@ /* Simple, non-aggregate types (ie not including vectors and complex) are always returned in a register (or registers). */ - code = TYPE_CODE (type); + code = type->code (); if (TYPE_CODE_STRUCT != code && TYPE_CODE_UNION != code && TYPE_CODE_ARRAY != code && TYPE_CODE_COMPLEX != code) return 0; @@ -7968,13 +8081,12 @@ --> yes, nRc = 1 */ - for (i = 0; i < TYPE_NFIELDS (type); i++) + for (i = 0; i < type->num_fields (); i++) { enum type_code field_type_code; field_type_code - = TYPE_CODE (check_typedef (TYPE_FIELD_TYPE (type, - i))); + = check_typedef (type->field (i).type ())->code (); /* Is it a floating point type field? */ if (field_type_code == TYPE_CODE_FLT) @@ -8012,7 +8124,7 @@ struct gdbarch *gdbarch = regs->arch (); enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); - if (TYPE_CODE (type) == TYPE_CODE_FLT) + if (type->code () == TYPE_CODE_FLT) { gdb_byte buf[ARM_FP_REGISTER_SIZE]; @@ -8042,12 +8154,12 @@ break; } } - else if (TYPE_CODE (type) == TYPE_CODE_INT - || TYPE_CODE (type) == TYPE_CODE_CHAR - || TYPE_CODE (type) == TYPE_CODE_BOOL - || TYPE_CODE (type) == TYPE_CODE_PTR + else if (type->code () == TYPE_CODE_INT + || type->code () == TYPE_CODE_CHAR + || type->code () == TYPE_CODE_BOOL + || type->code () == TYPE_CODE_PTR || TYPE_IS_REFERENCE (type) - || TYPE_CODE (type) == TYPE_CODE_ENUM) + || type->code () == TYPE_CODE_ENUM) { if (TYPE_LENGTH (type) <= 4) { @@ -8143,15 +8255,15 @@ return RETURN_VALUE_REGISTER_CONVENTION; } - if (TYPE_CODE (valtype) == TYPE_CODE_STRUCT - || TYPE_CODE (valtype) == TYPE_CODE_UNION - || TYPE_CODE (valtype) == TYPE_CODE_ARRAY) + if (valtype->code () == TYPE_CODE_STRUCT + || valtype->code () == TYPE_CODE_UNION + || valtype->code () == TYPE_CODE_ARRAY) { if (tdep->struct_return == pcc_struct_return || arm_return_in_memory (gdbarch, valtype)) return RETURN_VALUE_STRUCT_CONVENTION; } - else if (TYPE_CODE (valtype) == TYPE_CODE_COMPLEX) + else if (valtype->code () == TYPE_CODE_COMPLEX) { if (arm_return_in_memory (gdbarch, valtype)) return RETURN_VALUE_STRUCT_CONVENTION; @@ -8324,20 +8436,6 @@ } static void -set_arm_command (const char *args, int from_tty) -{ - printf_unfiltered (_("\ -\"set arm\" must be followed by an apporpriate subcommand.\n")); - help_list (setarmcmdlist, "set arm ", all_commands, gdb_stdout); -} - -static void -show_arm_command (const char *args, int from_tty) -{ - cmd_show_list (showarmcmdlist, from_tty, ""); -} - -static void arm_update_current_architecture (void) { struct gdbarch_info info; @@ -8870,11 +8968,13 @@ enum arm_abi_kind arm_abi = arm_abi_global; enum arm_float_model fp_model = arm_fp_model; struct tdesc_arch_data *tdesc_data = NULL; - int i, is_m = 0; - int vfp_register_count = 0, have_vfp_pseudos = 0, have_neon_pseudos = 0; - int have_wmmx_registers = 0; - int have_neon = 0; - int have_fpa_registers = 1; + int i; + bool is_m = false; + int vfp_register_count = 0; + bool have_vfp_pseudos = false, have_neon_pseudos = false; + bool have_wmmx_registers = false; + bool have_neon = false; + bool have_fpa_registers = true; const struct target_desc *tdesc = info.target_desc; /* If we have an object to base this architecture on, try to determine @@ -8991,7 +9091,7 @@ && (attr_arch == TAG_CPU_ARCH_V6_M || attr_arch == TAG_CPU_ARCH_V6S_M || attr_profile == 'M')) - is_m = 1; + is_m = true; #endif } @@ -9049,7 +9149,7 @@ if (feature == NULL) return NULL; else - is_m = 1; + is_m = true; } tdesc_data = tdesc_data_alloc (); @@ -9095,7 +9195,7 @@ } } else - have_fpa_registers = 0; + have_fpa_registers = false; feature = tdesc_find_feature (tdesc, "org.gnu.gdb.xscale.iwmmxt"); @@ -9131,7 +9231,7 @@ return NULL; } - have_wmmx_registers = 1; + have_wmmx_registers = true; } /* If we have a VFP unit, check whether the single precision registers @@ -9172,7 +9272,7 @@ } if (tdesc_unnumbered_register (feature, "s0") == 0) - have_vfp_pseudos = 1; + have_vfp_pseudos = true; vfp_register_count = i; @@ -9194,9 +9294,9 @@ their type; otherwise (normally) provide them with the default type. */ if (tdesc_unnumbered_register (feature, "q0") == 0) - have_neon_pseudos = 1; + have_neon_pseudos = true; - have_neon = 1; + have_neon = true; } } } @@ -9468,7 +9568,21 @@ if (tdep == NULL) return; - fprintf_unfiltered (file, _("arm_dump_tdep: Lowest pc = 0x%lx"), + fprintf_unfiltered (file, _("arm_dump_tdep: fp_model = %i\n"), + (int) tdep->fp_model); + fprintf_unfiltered (file, _("arm_dump_tdep: have_fpa_registers = %i\n"), + (int) tdep->have_fpa_registers); + fprintf_unfiltered (file, _("arm_dump_tdep: have_wmmx_registers = %i\n"), + (int) tdep->have_wmmx_registers); + fprintf_unfiltered (file, _("arm_dump_tdep: vfp_register_count = %i\n"), + (int) tdep->vfp_register_count); + fprintf_unfiltered (file, _("arm_dump_tdep: have_vfp_pseudos = %i\n"), + (int) tdep->have_vfp_pseudos); + fprintf_unfiltered (file, _("arm_dump_tdep: have_neon_pseudos = %i\n"), + (int) tdep->have_neon_pseudos); + fprintf_unfiltered (file, _("arm_dump_tdep: have_neon = %i\n"), + (int) tdep->have_neon); + fprintf_unfiltered (file, _("arm_dump_tdep: Lowest pc = 0x%lx\n"), (unsigned long) tdep->lowest_pc); } @@ -9479,8 +9593,9 @@ } #endif +void _initialize_arm_tdep (); void -_initialize_arm_tdep (void) +_initialize_arm_tdep () { long length; int i, j; @@ -9498,13 +9613,13 @@ arm_elf_osabi_sniffer); /* Add root prefix command for all "set arm"/"show arm" commands. */ - add_prefix_cmd ("arm", no_class, set_arm_command, - _("Various ARM-specific commands."), - &setarmcmdlist, "set arm ", 0, &setlist); - - add_prefix_cmd ("arm", no_class, show_arm_command, - _("Various ARM-specific commands."), - &showarmcmdlist, "show arm ", 0, &showlist); + add_basic_prefix_cmd ("arm", no_class, + _("Various ARM-specific commands."), + &setarmcmdlist, "set arm ", 0, &setlist); + + add_show_prefix_cmd ("arm", no_class, + _("Various ARM-specific commands."), + &showarmcmdlist, "show arm ", 0, &showlist); arm_disassembler_options = xstrdup ("reg-names-std"); diff -Nru gdb-9.1/gdb/arm-tdep.h gdb-10.2/gdb/arm-tdep.h --- gdb-9.1/gdb/arm-tdep.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/arm-tdep.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Common target dependent code for GDB on ARM systems. - Copyright (C) 2002-2020 Free Software Foundation, Inc. + Copyright (C) 2002-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -95,19 +95,19 @@ enum arm_float_model fp_model; /* Floating point calling conventions. */ - int have_fpa_registers; /* Does the target report the FPA registers? */ - int have_wmmx_registers; /* Does the target report the WMMX registers? */ + bool have_fpa_registers; /* Does the target report the FPA registers? */ + bool have_wmmx_registers; /* Does the target report the WMMX registers? */ /* The number of VFP registers reported by the target. It is zero if VFP registers are not supported. */ int vfp_register_count; - int have_vfp_pseudos; /* Are we synthesizing the single precision + bool have_vfp_pseudos; /* Are we synthesizing the single precision VFP registers? */ - int have_neon_pseudos; /* Are we synthesizing the quad precision + bool have_neon_pseudos; /* Are we synthesizing the quad precision NEON registers? Requires have_vfp_pseudos. */ - int have_neon; /* Do we have a NEON unit? */ + bool have_neon; /* Do we have a NEON unit? */ - int is_m; /* Does the target follow the "M" profile. */ + bool is_m; /* Does the target follow the "M" profile. */ CORE_ADDR lowest_pc; /* Lowest address at which instructions will appear. */ diff -Nru gdb-9.1/gdb/arm-wince-tdep.c gdb-10.2/gdb/arm-wince-tdep.c --- gdb-9.1/gdb/arm-wince-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/arm-wince-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,7 +1,7 @@ /* Target-dependent code for Windows CE running on ARM processors, for GDB. - Copyright (C) 2007-2020 Free Software Foundation, Inc. + Copyright (C) 2007-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -154,8 +154,9 @@ return GDB_OSABI_UNKNOWN; } +void _initialize_arm_wince_tdep (); void -_initialize_arm_wince_tdep (void) +_initialize_arm_wince_tdep () { gdbarch_register_osabi_sniffer (bfd_arch_arm, bfd_target_coff_flavour, arm_wince_osabi_sniffer); diff -Nru gdb-9.1/gdb/async-event.c gdb-10.2/gdb/async-event.c --- gdb-9.1/gdb/async-event.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/async-event.c 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,329 @@ +/* Async events for the GDB event loop. + Copyright (C) 1999-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "defs.h" +#include "async-event.h" + +#include "ser-event.h" +#include "top.h" + +/* PROC is a function to be invoked when the READY flag is set. This + happens when there has been a signal and the corresponding signal + handler has 'triggered' this async_signal_handler for execution. + The actual work to be done in response to a signal will be carried + out by PROC at a later time, within process_event. This provides a + deferred execution of signal handlers. + + Async_init_signals takes care of setting up such an + async_signal_handler for each interesting signal. */ + +struct async_signal_handler +{ + /* If ready, call this handler from the main event loop, using + invoke_async_handler. */ + int ready; + + /* Pointer to next handler. */ + struct async_signal_handler *next_handler; + + /* Function to call to do the work. */ + sig_handler_func *proc; + + /* Argument to PROC. */ + gdb_client_data client_data; +}; + +/* PROC is a function to be invoked when the READY flag is set. This + happens when the event has been marked with + MARK_ASYNC_EVENT_HANDLER. The actual work to be done in response + to an event will be carried out by PROC at a later time, within + process_event. This provides a deferred execution of event + handlers. */ +struct async_event_handler +{ + /* If ready, call this handler from the main event loop, using + invoke_event_handler. */ + int ready; + + /* Pointer to next handler. */ + struct async_event_handler *next_handler; + + /* Function to call to do the work. */ + async_event_handler_func *proc; + + /* Argument to PROC. */ + gdb_client_data client_data; +}; + +/* All the async_signal_handlers gdb is interested in are kept onto + this list. */ +static struct +{ + /* Pointer to first in handler list. */ + async_signal_handler *first_handler; + + /* Pointer to last in handler list. */ + async_signal_handler *last_handler; +} +sighandler_list; + +/* All the async_event_handlers gdb is interested in are kept onto + this list. */ +static struct +{ + /* Pointer to first in handler list. */ + async_event_handler *first_handler; + + /* Pointer to last in handler list. */ + async_event_handler *last_handler; +} +async_event_handler_list; + + +/* This event is signalled whenever an asynchronous handler needs to + defer an action to the event loop. */ +static struct serial_event *async_signal_handlers_serial_event; + +/* Callback registered with ASYNC_SIGNAL_HANDLERS_SERIAL_EVENT. */ + +static void +async_signals_handler (int error, gdb_client_data client_data) +{ + /* Do nothing. Handlers are run by invoke_async_signal_handlers + from instead. */ +} + +void +initialize_async_signal_handlers (void) +{ + async_signal_handlers_serial_event = make_serial_event (); + + add_file_handler (serial_event_fd (async_signal_handlers_serial_event), + async_signals_handler, NULL); +} + + + +/* Create an asynchronous handler, allocating memory for it. + Return a pointer to the newly created handler. + This pointer will be used to invoke the handler by + invoke_async_signal_handler. + PROC is the function to call with CLIENT_DATA argument + whenever the handler is invoked. */ +async_signal_handler * +create_async_signal_handler (sig_handler_func * proc, + gdb_client_data client_data) +{ + async_signal_handler *async_handler_ptr; + + async_handler_ptr = XNEW (async_signal_handler); + async_handler_ptr->ready = 0; + async_handler_ptr->next_handler = NULL; + async_handler_ptr->proc = proc; + async_handler_ptr->client_data = client_data; + if (sighandler_list.first_handler == NULL) + sighandler_list.first_handler = async_handler_ptr; + else + sighandler_list.last_handler->next_handler = async_handler_ptr; + sighandler_list.last_handler = async_handler_ptr; + return async_handler_ptr; +} + +/* Mark the handler (ASYNC_HANDLER_PTR) as ready. This information + will be used when the handlers are invoked, after we have waited + for some event. The caller of this function is the interrupt + handler associated with a signal. */ +void +mark_async_signal_handler (async_signal_handler * async_handler_ptr) +{ + async_handler_ptr->ready = 1; + serial_event_set (async_signal_handlers_serial_event); +} + +/* See event-loop.h. */ + +void +clear_async_signal_handler (async_signal_handler *async_handler_ptr) +{ + async_handler_ptr->ready = 0; +} + +/* See event-loop.h. */ + +int +async_signal_handler_is_marked (async_signal_handler *async_handler_ptr) +{ + return async_handler_ptr->ready; +} + +/* Call all the handlers that are ready. Returns true if any was + indeed ready. */ + +int +invoke_async_signal_handlers (void) +{ + async_signal_handler *async_handler_ptr; + int any_ready = 0; + + /* We're going to handle all pending signals, so no need to wake up + the event loop again the next time around. Note this must be + cleared _before_ calling the callbacks, to avoid races. */ + serial_event_clear (async_signal_handlers_serial_event); + + /* Invoke all ready handlers. */ + + while (1) + { + for (async_handler_ptr = sighandler_list.first_handler; + async_handler_ptr != NULL; + async_handler_ptr = async_handler_ptr->next_handler) + { + if (async_handler_ptr->ready) + break; + } + if (async_handler_ptr == NULL) + break; + any_ready = 1; + async_handler_ptr->ready = 0; + /* Async signal handlers have no connection to whichever was the + current UI, and thus always run on the main one. */ + current_ui = main_ui; + (*async_handler_ptr->proc) (async_handler_ptr->client_data); + } + + return any_ready; +} + +/* Delete an asynchronous handler (ASYNC_HANDLER_PTR). + Free the space allocated for it. */ +void +delete_async_signal_handler (async_signal_handler ** async_handler_ptr) +{ + async_signal_handler *prev_ptr; + + if (sighandler_list.first_handler == (*async_handler_ptr)) + { + sighandler_list.first_handler = (*async_handler_ptr)->next_handler; + if (sighandler_list.first_handler == NULL) + sighandler_list.last_handler = NULL; + } + else + { + prev_ptr = sighandler_list.first_handler; + while (prev_ptr && prev_ptr->next_handler != (*async_handler_ptr)) + prev_ptr = prev_ptr->next_handler; + gdb_assert (prev_ptr); + prev_ptr->next_handler = (*async_handler_ptr)->next_handler; + if (sighandler_list.last_handler == (*async_handler_ptr)) + sighandler_list.last_handler = prev_ptr; + } + xfree ((*async_handler_ptr)); + (*async_handler_ptr) = NULL; +} + +/* Create an asynchronous event handler, allocating memory for it. + Return a pointer to the newly created handler. PROC is the + function to call with CLIENT_DATA argument whenever the handler is + invoked. */ +async_event_handler * +create_async_event_handler (async_event_handler_func *proc, + gdb_client_data client_data) +{ + async_event_handler *h; + + h = XNEW (struct async_event_handler); + h->ready = 0; + h->next_handler = NULL; + h->proc = proc; + h->client_data = client_data; + if (async_event_handler_list.first_handler == NULL) + async_event_handler_list.first_handler = h; + else + async_event_handler_list.last_handler->next_handler = h; + async_event_handler_list.last_handler = h; + return h; +} + +/* Mark the handler (ASYNC_HANDLER_PTR) as ready. This information + will be used by gdb_do_one_event. The caller will be whoever + created the event source, and wants to signal that the event is + ready to be handled. */ +void +mark_async_event_handler (async_event_handler *async_handler_ptr) +{ + async_handler_ptr->ready = 1; +} + +/* See event-loop.h. */ + +void +clear_async_event_handler (async_event_handler *async_handler_ptr) +{ + async_handler_ptr->ready = 0; +} + +/* Check if asynchronous event handlers are ready, and call the + handler function for one that is. */ + +int +check_async_event_handlers () +{ + async_event_handler *async_handler_ptr; + + for (async_handler_ptr = async_event_handler_list.first_handler; + async_handler_ptr != NULL; + async_handler_ptr = async_handler_ptr->next_handler) + { + if (async_handler_ptr->ready) + { + async_handler_ptr->ready = 0; + (*async_handler_ptr->proc) (async_handler_ptr->client_data); + return 1; + } + } + + return 0; +} + +/* Delete an asynchronous handler (ASYNC_HANDLER_PTR). + Free the space allocated for it. */ +void +delete_async_event_handler (async_event_handler **async_handler_ptr) +{ + async_event_handler *prev_ptr; + + if (async_event_handler_list.first_handler == *async_handler_ptr) + { + async_event_handler_list.first_handler + = (*async_handler_ptr)->next_handler; + if (async_event_handler_list.first_handler == NULL) + async_event_handler_list.last_handler = NULL; + } + else + { + prev_ptr = async_event_handler_list.first_handler; + while (prev_ptr && prev_ptr->next_handler != *async_handler_ptr) + prev_ptr = prev_ptr->next_handler; + gdb_assert (prev_ptr); + prev_ptr->next_handler = (*async_handler_ptr)->next_handler; + if (async_event_handler_list.last_handler == (*async_handler_ptr)) + async_event_handler_list.last_handler = prev_ptr; + } + xfree (*async_handler_ptr); + *async_handler_ptr = NULL; +} diff -Nru gdb-9.1/gdb/async-event.h gdb-10.2/gdb/async-event.h --- gdb-9.1/gdb/async-event.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/async-event.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,71 @@ +/* Async events for the GDB event loop. + Copyright (C) 1999-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifndef ASYNC_EVENT_H +#define ASYNC_EVENT_H + +#include "gdbsupport/event-loop.h" + +struct async_signal_handler; +struct async_event_handler; +typedef void (sig_handler_func) (gdb_client_data); +typedef void (async_event_handler_func) (gdb_client_data); + +extern struct async_signal_handler * + create_async_signal_handler (sig_handler_func *proc, + gdb_client_data client_data); +extern void delete_async_signal_handler (struct async_signal_handler **); + +/* Call the handler from HANDLER the next time through the event + loop. */ +extern void mark_async_signal_handler (struct async_signal_handler *handler); + +/* Returns true if HANDLER is marked ready. */ + +extern int + async_signal_handler_is_marked (struct async_signal_handler *handler); + +/* Mark HANDLER as NOT ready. */ + +extern void clear_async_signal_handler (struct async_signal_handler *handler); + +/* Create and register an asynchronous event source in the event loop, + and set PROC as its callback. CLIENT_DATA is passed as argument to + PROC upon its invocation. Returns a pointer to an opaque structure + used to mark as ready and to later delete this event source from + the event loop. */ +extern struct async_event_handler * + create_async_event_handler (async_event_handler_func *proc, + gdb_client_data client_data); + +/* Remove the event source pointed by HANDLER_PTR created by + CREATE_ASYNC_EVENT_HANDLER from the event loop, and release it. */ +extern void + delete_async_event_handler (struct async_event_handler **handler_ptr); + +/* Call the handler from HANDLER the next time through the event + loop. */ +extern void mark_async_event_handler (struct async_event_handler *handler); + +/* Mark the handler (ASYNC_HANDLER_PTR) as NOT ready. */ + +extern void clear_async_event_handler (struct async_event_handler *handler); + +extern void initialize_async_signal_handlers (void); + +#endif /* ASYNC_EVENT_H */ diff -Nru gdb-9.1/gdb/auto-load.c gdb-10.2/gdb/auto-load.c --- gdb-9.1/gdb/auto-load.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/auto-load.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* GDB routines for supporting auto-loaded scripts. - Copyright (C) 2012-2020 Free Software Foundation, Inc. + Copyright (C) 2012-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -784,6 +784,13 @@ "scripts-directory' path \"%s\".\n"), auto_load_dir); + /* Convert Windows file name from c:/dir/file to /c/dir/file. */ + if (HAS_DRIVE_SPEC (debugfile)) + { + debugfile_holder = STRIP_DRIVE_SPEC (debugfile); + filename = std::string("\\") + debugfile[0] + debugfile_holder; + } + for (const gdb::unique_xmalloc_ptr &dir : vec) { /* FILENAME is absolute, so we don't need a "/" here. */ @@ -1460,15 +1467,6 @@ return &retval; } -/* Command "show auto-load" displays summary of all the current - "show auto-load " settings. */ - -static void -show_auto_load_cmd (const char *args, int from_tty) -{ - cmd_show_list (*auto_load_show_cmdlist_get (), from_tty, ""); -} - /* Initialize "show auto-load " commands prefix and return it. */ struct cmd_list_element ** @@ -1477,12 +1475,12 @@ static struct cmd_list_element *retval; if (retval == NULL) - add_prefix_cmd ("auto-load", class_maintenance, show_auto_load_cmd, _("\ + add_show_prefix_cmd ("auto-load", class_maintenance, _("\ Show auto-loading specific settings.\n\ Show configuration of various auto-load-specific variables such as\n\ automatic loading of Python scripts."), - &retval, "show auto-load ", - 0/*allow-unknown*/, &showlist); + &retval, "show auto-load ", + 0/*allow-unknown*/, &showlist); return &retval; } @@ -1530,8 +1528,9 @@ return &retval; } +void _initialize_auto_load (); void -_initialize_auto_load (void) +_initialize_auto_load () { struct cmd_list_element *cmd; char *scripts_directory_help, *gdb_name_help, *python_name_help; diff -Nru gdb-9.1/gdb/auto-load.h gdb-10.2/gdb/auto-load.h --- gdb-9.1/gdb/auto-load.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/auto-load.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* GDB routines for supporting auto-loaded scripts. - Copyright (C) 2012-2020 Free Software Foundation, Inc. + Copyright (C) 2012-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/auxv.c gdb-10.2/gdb/auxv.c --- gdb-9.1/gdb/auxv.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/auxv.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Auxiliary vector support for GDB, the GNU debugger. - Copyright (C) 2004-2020 Free Software Foundation, Inc. + Copyright (C) 2004-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -248,34 +248,65 @@ return procfs_xfer_auxv (readbuf, writebuf, offset, len, xfered_len); } -/* Read one auxv entry from *READPTR, not reading locations >= ENDPTR. - Return 0 if *READPTR is already at the end of the buffer. - Return -1 if there is insufficient buffer for a whole entry. - Return 1 if an entry was read into *TYPEP and *VALP. */ -int -default_auxv_parse (struct target_ops *ops, gdb_byte **readptr, - gdb_byte *endptr, CORE_ADDR *typep, CORE_ADDR *valp) -{ - const int sizeof_auxv_field = gdbarch_ptr_bit (target_gdbarch ()) - / TARGET_CHAR_BIT; - const enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch ()); +/* This function compared to other auxv_parse functions: it takes the size of + the auxv type field as a parameter. */ + +static int +generic_auxv_parse (struct gdbarch *gdbarch, gdb_byte **readptr, + gdb_byte *endptr, CORE_ADDR *typep, CORE_ADDR *valp, + int sizeof_auxv_type) +{ + struct type *ptr_type = builtin_type (gdbarch)->builtin_data_ptr; + const int sizeof_auxv_val = TYPE_LENGTH (ptr_type); + enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); gdb_byte *ptr = *readptr; if (endptr == ptr) return 0; - if (endptr - ptr < sizeof_auxv_field * 2) + if (endptr - ptr < 2 * sizeof_auxv_val) return -1; - *typep = extract_unsigned_integer (ptr, sizeof_auxv_field, byte_order); - ptr += sizeof_auxv_field; - *valp = extract_unsigned_integer (ptr, sizeof_auxv_field, byte_order); - ptr += sizeof_auxv_field; + *typep = extract_unsigned_integer (ptr, sizeof_auxv_type, byte_order); + /* Even if the auxv type takes less space than an auxv value, there is + padding after the type such that the value is aligned on a multiple of + its size (and this is why we advance by `sizeof_auxv_val` and not + `sizeof_auxv_type`). */ + ptr += sizeof_auxv_val; + *valp = extract_unsigned_integer (ptr, sizeof_auxv_val, byte_order); + ptr += sizeof_auxv_val; *readptr = ptr; return 1; } +/* See auxv.h. */ + +int +default_auxv_parse (struct target_ops *ops, gdb_byte **readptr, + gdb_byte *endptr, CORE_ADDR *typep, CORE_ADDR *valp) +{ + struct gdbarch *gdbarch = target_gdbarch (); + struct type *ptr_type = builtin_type (gdbarch)->builtin_data_ptr; + const int sizeof_auxv_type = TYPE_LENGTH (ptr_type); + + return generic_auxv_parse (gdbarch, readptr, endptr, typep, valp, + sizeof_auxv_type); +} + +/* See auxv.h. */ + +int +svr4_auxv_parse (struct gdbarch *gdbarch, gdb_byte **readptr, + gdb_byte *endptr, CORE_ADDR *typep, CORE_ADDR *valp) +{ + struct type *int_type = builtin_type (gdbarch)->builtin_int; + const int sizeof_auxv_type = TYPE_LENGTH (int_type); + + return generic_auxv_parse (gdbarch, readptr, endptr, typep, valp, + sizeof_auxv_type); +} + /* Read one auxv entry from *READPTR, not reading locations >= ENDPTR. Return 0 if *READPTR is already at the end of the buffer. Return -1 if there is insufficient buffer for a whole entry. @@ -458,9 +489,21 @@ AUXV_FORMAT_HEX); TAG (AT_L1I_CACHESHAPE, _("L1 Instruction cache information"), AUXV_FORMAT_HEX); + TAG (AT_L1I_CACHESIZE, _("L1 Instruction cache size"), AUXV_FORMAT_HEX); + TAG (AT_L1I_CACHEGEOMETRY, _("L1 Instruction cache geometry"), + AUXV_FORMAT_HEX); TAG (AT_L1D_CACHESHAPE, _("L1 Data cache information"), AUXV_FORMAT_HEX); + TAG (AT_L1D_CACHESIZE, _("L1 Data cache size"), AUXV_FORMAT_HEX); + TAG (AT_L1D_CACHEGEOMETRY, _("L1 Data cache geometry"), + AUXV_FORMAT_HEX); TAG (AT_L2_CACHESHAPE, _("L2 cache information"), AUXV_FORMAT_HEX); + TAG (AT_L2_CACHESIZE, _("L2 cache size"), AUXV_FORMAT_HEX); + TAG (AT_L2_CACHEGEOMETRY, _("L2 cache geometry"), AUXV_FORMAT_HEX); TAG (AT_L3_CACHESHAPE, _("L3 cache information"), AUXV_FORMAT_HEX); + TAG (AT_L3_CACHESIZE, _("L3 cache size"), AUXV_FORMAT_HEX); + TAG (AT_L3_CACHEGEOMETRY, _("L3 cache geometry"), AUXV_FORMAT_HEX); + TAG (AT_MINSIGSTKSZ, _("Minimum stack size for signal delivery"), + AUXV_FORMAT_HEX); TAG (AT_SUN_UID, _("Effective user ID"), AUXV_FORMAT_DEC); TAG (AT_SUN_RUID, _("Real user ID"), AUXV_FORMAT_DEC); TAG (AT_SUN_GID, _("Effective group ID"), AUXV_FORMAT_DEC); @@ -546,8 +589,9 @@ } } +void _initialize_auxv (); void -_initialize_auxv (void) +_initialize_auxv () { add_info ("auxv", info_auxv_command, _("Display the inferior's auxiliary vector.\n\ diff -Nru gdb-9.1/gdb/auxv.h gdb-10.2/gdb/auxv.h --- gdb-9.1/gdb/auxv.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/auxv.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Auxiliary vector support for GDB, the GNU debugger. - Copyright (C) 2004-2020 Free Software Foundation, Inc. + Copyright (C) 2004-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -25,12 +25,27 @@ /* See "include/elf/common.h" for the definition of valid AT_* values. */ /* The default implementation of to_auxv_parse, used by the target - stack. */ + stack. + Read one auxv entry from *READPTR, not reading locations >= ENDPTR. + Return 0 if *READPTR is already at the end of the buffer. + Return -1 if there is insufficient buffer for a whole entry. + Return 1 if an entry was read into *TYPEP and *VALP. */ extern int default_auxv_parse (struct target_ops *ops, gdb_byte **readptr, gdb_byte *endptr, CORE_ADDR *typep, CORE_ADDR *valp); +/* The SVR4 psABI implementation of to_auxv_parse, that uses an int to + store the type rather than long as assumed by the default parser. + + Read one auxv entry from *READPTR, not reading locations >= ENDPTR. + Return 0 if *READPTR is already at the end of the buffer. + Return -1 if there is insufficient buffer for a whole entry. + Return 1 if an entry was read into *TYPEP and *VALP. */ +extern int svr4_auxv_parse (struct gdbarch *gdbarch, gdb_byte **readptr, + gdb_byte *endptr, CORE_ADDR *typep, + CORE_ADDR *valp); + /* Read one auxv entry from *READPTR, not reading locations >= ENDPTR. Return 0 if *READPTR is already at the end of the buffer. Return -1 if there is insufficient buffer for a whole entry. diff -Nru gdb-9.1/gdb/avr-tdep.c gdb-10.2/gdb/avr-tdep.c --- gdb-9.1/gdb/avr-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/avr-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for Atmel AVR, for GDB. - Copyright (C) 1996-2020 Free Software Foundation, Inc. + Copyright (C) 1996-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -314,8 +314,8 @@ avr_convert_iaddr_to_raw (addr)); } /* Is it a code address? */ - else if (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_FUNC - || TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_METHOD) + else if (TYPE_TARGET_TYPE (type)->code () == TYPE_CODE_FUNC + || TYPE_TARGET_TYPE (type)->code () == TYPE_CODE_METHOD) { /* A code pointer is word (16 bits) addressed. We shift the address down by 1 bit to convert it to a pointer. */ @@ -345,8 +345,8 @@ return avr_make_iaddr (addr); } /* Is it a code address? */ - else if (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_FUNC - || TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_METHOD + else if (TYPE_TARGET_TYPE (type)->code () == TYPE_CODE_FUNC + || TYPE_TARGET_TYPE (type)->code () == TYPE_CODE_METHOD || TYPE_CODE_SPACE (TYPE_TARGET_TYPE (type))) { /* A code pointer is word (16 bits) addressed so we shift it up @@ -363,7 +363,10 @@ { ULONGEST addr = unpack_long (type, buf); - return avr_make_saddr (addr); + if (TYPE_DATA_SPACE (type)) + return avr_make_saddr (addr); + else + return avr_make_iaddr (addr); } static CORE_ADDR @@ -935,9 +938,9 @@ register holds the LSB. */ int lsb_reg; - if ((TYPE_CODE (valtype) == TYPE_CODE_STRUCT - || TYPE_CODE (valtype) == TYPE_CODE_UNION - || TYPE_CODE (valtype) == TYPE_CODE_ARRAY) + if ((valtype->code () == TYPE_CODE_STRUCT + || valtype->code () == TYPE_CODE_UNION + || valtype->code () == TYPE_CODE_ARRAY) && TYPE_LENGTH (valtype) > 8) return RETURN_VALUE_STRUCT_CONVENTION; @@ -1616,8 +1619,9 @@ } } +void _initialize_avr_tdep (); void -_initialize_avr_tdep (void) +_initialize_avr_tdep () { register_gdbarch_init (bfd_arch_avr, avr_gdbarch_init); diff -Nru gdb-9.1/gdb/ax_cxx_compile_stdcxx.m4 gdb-10.2/gdb/ax_cxx_compile_stdcxx.m4 --- gdb-9.1/gdb/ax_cxx_compile_stdcxx.m4 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/ax_cxx_compile_stdcxx.m4 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2016-2020 Free Software Foundation, Inc. +# Copyright (c) 2016-2021 Free Software Foundation, Inc. # # Originally based on the AX_CXX_COMPILE_STDCXX macro found at the url # below. diff -Nru gdb-9.1/gdb/ax-gdb.c gdb-10.2/gdb/ax-gdb.c --- gdb-9.1/gdb/ax-gdb.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/ax-gdb.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* GDB-specific functions for operating on agent expressions. - Copyright (C) 1998-2020 Free Software Foundation, Inc. + Copyright (C) 1998-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -316,9 +316,9 @@ type = check_typedef (type); - for (i = TYPE_NFIELDS (type) - 1; i >= nbases; i--) + for (i = type->num_fields () - 1; i >= nbases; i--) { - if (field_is_static (&TYPE_FIELD (type, i))) + if (field_is_static (&type->field (i))) { gen_static_field (ax, &value, type, i); if (value.optimized_out) @@ -362,7 +362,7 @@ { int string_trace = 0; if (ax->trace_string - && TYPE_CODE (value->type) == TYPE_CODE_PTR + && value->type->code () == TYPE_CODE_PTR && c_textual_element_type (check_typedef (TYPE_TARGET_TYPE (value->type)), 's')) string_trace = 1; @@ -429,8 +429,8 @@ /* To trace C++ classes with static fields stored elsewhere. */ if (ax->tracing - && (TYPE_CODE (value->type) == TYPE_CODE_STRUCT - || TYPE_CODE (value->type) == TYPE_CODE_UNION)) + && (value->type->code () == TYPE_CODE_STRUCT + || value->type->code () == TYPE_CODE_UNION)) gen_trace_static_fields (ax, value->type); } @@ -474,10 +474,10 @@ ax_trace_quick (ax, TYPE_LENGTH (type)); } - if (TYPE_CODE (type) == TYPE_CODE_RANGE) + if (type->code () == TYPE_CODE_RANGE) type = TYPE_TARGET_TYPE (type); - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_PTR: case TYPE_CODE_REF: @@ -520,7 +520,7 @@ type. Error out and give callers a chance to handle the failure gracefully. */ error (_("gen_fetch: Unsupported type code `%s'."), - TYPE_NAME (type)); + type->name ()); } } @@ -775,10 +775,10 @@ /* Only deal with scalars, structs and such may be too large to fit in a stack entry. */ value->type = check_typedef (value->type); - if (TYPE_CODE (value->type) == TYPE_CODE_ARRAY - || TYPE_CODE (value->type) == TYPE_CODE_STRUCT - || TYPE_CODE (value->type) == TYPE_CODE_UNION - || TYPE_CODE (value->type) == TYPE_CODE_FUNC) + if (value->type->code () == TYPE_CODE_ARRAY + || value->type->code () == TYPE_CODE_STRUCT + || value->type->code () == TYPE_CODE_UNION + || value->type->code () == TYPE_CODE_FUNC) error (_("Value not scalar: cannot be an rvalue.")); switch (value->kind) @@ -831,7 +831,7 @@ the stack. Should we tweak the type? */ /* Some types require special handling. */ - switch (TYPE_CODE (value->type)) + switch (value->type->code ()) { /* Functions get converted to a pointer to the function. */ case TYPE_CODE_FUNC: @@ -943,8 +943,8 @@ struct axs_value *value2) { /* Do the usual binary conversions. */ - if (TYPE_CODE (value1->type) == TYPE_CODE_INT - && TYPE_CODE (value2->type) == TYPE_CODE_INT) + if (value1->type->code () == TYPE_CODE_INT + && value2->type->code () == TYPE_CODE_INT) { /* The ANSI integral promotions seem to work this way: Order the integer types by size, and then by signedness: an n-bit @@ -1003,7 +1003,7 @@ /* Dereference typedefs. */ type = check_typedef (type); - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_PTR: case TYPE_CODE_REF: @@ -1070,7 +1070,7 @@ struct axs_value *value1, struct axs_value *value2) { gdb_assert (pointer_type (value1->type)); - gdb_assert (TYPE_CODE (value2->type) == TYPE_CODE_INT); + gdb_assert (value2->type->code () == TYPE_CODE_INT); gen_scale (ax, aop_mul, value1->type); ax_simple (ax, aop_add); @@ -1086,7 +1086,7 @@ struct axs_value *value1, struct axs_value *value2) { gdb_assert (pointer_type (value1->type)); - gdb_assert (TYPE_CODE (value2->type) == TYPE_CODE_INT); + gdb_assert (value2->type->code () == TYPE_CODE_INT); gen_scale (ax, aop_mul, value1->type); ax_simple (ax, aop_sub); @@ -1158,8 +1158,8 @@ int may_carry, const char *name) { /* We only handle INT op INT. */ - if ((TYPE_CODE (value1->type) != TYPE_CODE_INT) - || (TYPE_CODE (value2->type) != TYPE_CODE_INT)) + if ((value1->type->code () != TYPE_CODE_INT) + || (value2->type->code () != TYPE_CODE_INT)) error (_("Invalid combination of types in %s."), name); ax_simple (ax, @@ -1175,8 +1175,8 @@ gen_logical_not (struct agent_expr *ax, struct axs_value *value, struct type *result_type) { - if (TYPE_CODE (value->type) != TYPE_CODE_INT - && TYPE_CODE (value->type) != TYPE_CODE_PTR) + if (value->type->code () != TYPE_CODE_INT + && value->type->code () != TYPE_CODE_PTR) error (_("Invalid type of operand to `!'.")); ax_simple (ax, aop_log_not); @@ -1187,7 +1187,7 @@ static void gen_complement (struct agent_expr *ax, struct axs_value *value) { - if (TYPE_CODE (value->type) != TYPE_CODE_INT) + if (value->type->code () != TYPE_CODE_INT) error (_("Invalid type of operand to `~'.")); ax_simple (ax, aop_bit_not); @@ -1214,9 +1214,9 @@ T" to "T", and mark the value as an lvalue in memory. Leave it to the consumer to actually dereference it. */ value->type = check_typedef (TYPE_TARGET_TYPE (value->type)); - if (TYPE_CODE (value->type) == TYPE_CODE_VOID) + if (value->type->code () == TYPE_CODE_VOID) error (_("Attempt to dereference a generic pointer.")); - value->kind = ((TYPE_CODE (value->type) == TYPE_CODE_FUNC) + value->kind = ((value->type->code () == TYPE_CODE_FUNC) ? axs_rvalue : axs_lvalue_memory); } @@ -1228,7 +1228,7 @@ /* Special case for taking the address of a function. The ANSI standard describes this as a special case, too, so this arrangement is not without motivation. */ - if (TYPE_CODE (value->type) == TYPE_CODE_FUNC) + if (value->type->code () == TYPE_CODE_FUNC) /* The value's already an rvalue on the stack, so we just need to change the type. */ value->type = lookup_pointer_type (value->type); @@ -1417,7 +1417,7 @@ { /* Is this a bitfield? */ if (TYPE_FIELD_PACKED (type, fieldno)) - gen_bitfield_ref (ax, value, TYPE_FIELD_TYPE (type, fieldno), + gen_bitfield_ref (ax, value, type->field (fieldno).type (), (offset * TARGET_CHAR_BIT + TYPE_FIELD_BITPOS (type, fieldno)), (offset * TARGET_CHAR_BIT @@ -1428,7 +1428,7 @@ gen_offset (ax, offset + TYPE_FIELD_BITPOS (type, fieldno) / TARGET_CHAR_BIT); value->kind = axs_lvalue_memory; - value->type = TYPE_FIELD_TYPE (type, fieldno); + value->type = type->field (fieldno).type (); } } @@ -1444,7 +1444,7 @@ type = check_typedef (type); - for (i = TYPE_NFIELDS (type) - 1; i >= nbases; i--) + for (i = type->num_fields () - 1; i >= nbases; i--) { const char *this_name = TYPE_FIELD_NAME (type, i); @@ -1456,7 +1456,7 @@ "this") will have been generated already, which will be unnecessary but not harmful if the static field is being handled as a global. */ - if (field_is_static (&TYPE_FIELD (type, i))) + if (field_is_static (&type->field (i))) { gen_static_field (ax, value, type, i); if (value->optimized_out) @@ -1518,8 +1518,8 @@ type = check_typedef (value->type); /* This must yield a structure or a union. */ - if (TYPE_CODE (type) != TYPE_CODE_STRUCT - && TYPE_CODE (type) != TYPE_CODE_UNION) + if (type->code () != TYPE_CODE_STRUCT + && type->code () != TYPE_CODE_UNION) error (_("The left operand of `%s' is not a %s."), operator_name, operand_name); @@ -1533,7 +1533,7 @@ if (!found) error (_("Couldn't find member named `%s' in struct/union/class `%s'"), - field, TYPE_NAME (type)); + field, type->name ()); } static int @@ -1551,7 +1551,7 @@ { ax_const_l (ax, TYPE_FIELD_STATIC_PHYSADDR (type, fieldno)); value->kind = axs_lvalue_memory; - value->type = TYPE_FIELD_TYPE (type, fieldno); + value->type = type->field (fieldno).type (); value->optimized_out = 0; } else @@ -1583,18 +1583,18 @@ struct type *t = type; int i; - if (TYPE_CODE (t) != TYPE_CODE_STRUCT - && TYPE_CODE (t) != TYPE_CODE_UNION) + if (t->code () != TYPE_CODE_STRUCT + && t->code () != TYPE_CODE_UNION) internal_error (__FILE__, __LINE__, _("non-aggregate type to gen_struct_elt_for_reference")); - for (i = TYPE_NFIELDS (t) - 1; i >= TYPE_N_BASECLASSES (t); i--) + for (i = t->num_fields () - 1; i >= TYPE_N_BASECLASSES (t); i--) { const char *t_field_name = TYPE_FIELD_NAME (t, i); if (t_field_name && strcmp (t_field_name, fieldname) == 0) { - if (field_is_static (&TYPE_FIELD (t, i))) + if (field_is_static (&t->field (i))) { gen_static_field (ax, value, t, i); if (value->optimized_out) @@ -1629,7 +1629,7 @@ if (!found) error (_("No symbol \"%s\" in namespace \"%s\"."), - name, TYPE_NAME (curtype)); + name, curtype->name ()); return found; } @@ -1644,7 +1644,7 @@ gen_maybe_namespace_elt (struct agent_expr *ax, struct axs_value *value, const struct type *curtype, char *name) { - const char *namespace_name = TYPE_NAME (curtype); + const char *namespace_name = curtype->name (); struct block_symbol sym; sym = cp_lookup_symbol_namespace (namespace_name, name, @@ -1668,7 +1668,7 @@ gen_aggregate_elt_ref (struct agent_expr *ax, struct axs_value *value, struct type *type, char *field) { - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_STRUCT: case TYPE_CODE_UNION: @@ -1716,7 +1716,7 @@ if (!v) error (_("Right operand of `@' must be a " "constant, in agent expressions.")); - if (TYPE_CODE (value_type (v)) != TYPE_CODE_INT) + if (value_type (v)->code () != TYPE_CODE_INT) error (_("Right operand of `@' must be an integer.")); length = value_as_long (v); if (length <= 0) @@ -1788,7 +1788,7 @@ } else gen_msym_var_ref (ax, value, (*pc)[2].msymbol, (*pc)[1].objfile); - if (TYPE_CODE (value->type) == TYPE_CODE_ERROR) + if (value->type->code () == TYPE_CODE_ERROR) value->type = to_type; (*pc) += 4; } @@ -2010,7 +2010,7 @@ error (_("`%s' has been optimized out, cannot use"), (*pc)[2].symbol->print_name ()); - if (TYPE_CODE (value->type) == TYPE_CODE_ERROR) + if (value->type->code () == TYPE_CODE_ERROR) error_unknown_type ((*pc)[2].symbol->print_name ()); (*pc) += 4; @@ -2019,7 +2019,7 @@ case OP_VAR_MSYM_VALUE: gen_msym_var_ref (ax, value, (*pc)[2].msymbol, (*pc)[1].objfile); - if (TYPE_CODE (value->type) == TYPE_CODE_ERROR) + if (value->type->code () == TYPE_CODE_ERROR) error_unknown_type ((*pc)[2].msymbol->linkage_name ()); (*pc) += 4; @@ -2230,7 +2230,7 @@ b = block_for_pc (ax->scope); func = block_linkage_function (b); - lang = language_def (SYMBOL_LANGUAGE (func)); + lang = language_def (func->language ()); sym = lookup_language_this (lang, b).symbol; if (!sym) @@ -2289,7 +2289,7 @@ switch (op) { case BINOP_ADD: - if (TYPE_CODE (value1->type) == TYPE_CODE_INT + if (value1->type->code () == TYPE_CODE_INT && pointer_type (value2->type)) { /* Swap the values and proceed normally. */ @@ -2297,7 +2297,7 @@ gen_ptradd (ax, value, value2, value1); } else if (pointer_type (value1->type) - && TYPE_CODE (value2->type) == TYPE_CODE_INT) + && value2->type->code () == TYPE_CODE_INT) gen_ptradd (ax, value, value1, value2); else gen_binop (ax, value, value1, value2, @@ -2305,7 +2305,7 @@ break; case BINOP_SUB: if (pointer_type (value1->type) - && TYPE_CODE (value2->type) == TYPE_CODE_INT) + && value2->type->code () == TYPE_CODE_INT) gen_ptrsub (ax,value, value1, value2); else if (pointer_type (value1->type) && pointer_type (value2->type)) @@ -2351,12 +2351,12 @@ an array or pointer type (like a plain int variable for example), then report this as an error. */ type = check_typedef (value1->type); - if (TYPE_CODE (type) != TYPE_CODE_ARRAY - && TYPE_CODE (type) != TYPE_CODE_PTR) + if (type->code () != TYPE_CODE_ARRAY + && type->code () != TYPE_CODE_PTR) { - if (TYPE_NAME (type)) + if (type->name ()) error (_("cannot subscript something of type `%s'"), - TYPE_NAME (type)); + type->name ()); else error (_("cannot subscript requested type")); } @@ -2743,8 +2743,9 @@ /* Initialization code. */ +void _initialize_ax_gdb (); void -_initialize_ax_gdb (void) +_initialize_ax_gdb () { add_cmd ("agent", class_maintenance, agent_command, _("\ diff -Nru gdb-9.1/gdb/ax-gdb.h gdb-10.2/gdb/ax-gdb.h --- gdb-9.1/gdb/ax-gdb.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/ax-gdb.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* GDB-specific functions for operating on agent expressions - Copyright (C) 1998-2020 Free Software Foundation, Inc. + Copyright (C) 1998-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/ax-general.c gdb-10.2/gdb/ax-general.c --- gdb-9.1/gdb/ax-general.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/ax-general.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Functions for manipulating expressions designed to be executed on the agent - Copyright (C) 1998-2020 Free Software Foundation, Inc. + Copyright (C) 1998-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/ax.h gdb-10.2/gdb/ax.h --- gdb-9.1/gdb/ax.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/ax.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Definitions for expressions designed to be executed on the agent - Copyright (C) 1998-2020 Free Software Foundation, Inc. + Copyright (C) 1998-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/bcache.c gdb-10.2/gdb/bcache.c --- gdb-9.1/gdb/bcache.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/bcache.c 2021-04-25 04:06:26.000000000 +0000 @@ -2,7 +2,7 @@ Written by Fred Fish Rewritten by Jim Blandy - Copyright (C) 1999-2020 Free Software Foundation, Inc. + Copyright (C) 1999-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -140,15 +140,15 @@ returning an old entry. */ const void * -bcache::insert (const void *addr, int length, int *added) +bcache::insert (const void *addr, int length, bool *added) { unsigned long full_hash; unsigned short half_hash; int hash_index; struct bstring *s; - if (added) - *added = 0; + if (added != nullptr) + *added = false; /* Lazily initialize the obstack. This can save quite a bit of memory in some cases. */ @@ -203,8 +203,8 @@ m_unique_size += length; m_structure_size += BSTRING_SIZE (length); - if (added) - *added = 1; + if (added != nullptr) + *added = true; return &newobj->d.data; } diff -Nru gdb-9.1/gdb/bcache.h gdb-10.2/gdb/bcache.h --- gdb-9.1/gdb/bcache.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/bcache.h 2021-04-25 04:06:26.000000000 +0000 @@ -2,7 +2,7 @@ Written by Fred Fish Rewritten by Jim Blandy - Copyright (C) 1999-2020 Free Software Foundation, Inc. + Copyright (C) 1999-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -161,12 +161,12 @@ /* Find a copy of the LENGTH bytes at ADDR in BCACHE. If BCACHE has never seen those bytes before, add a copy of them to BCACHE. In either case, return a pointer to BCACHE's copy of that string. - Since the cached value is ment to be read-only, return a const + Since the cached value is meant to be read-only, return a const buffer. If ADDED is not NULL, set *ADDED to true if the bytes were newly added to the cache, or to false if the bytes were found in the cache. */ - const void *insert (const void *addr, int length, int *added = nullptr); + const void *insert (const void *addr, int length, bool *added = nullptr); /* Print statistics on this bcache's memory usage and efficacity at eliminating duplication. TYPE should be a string describing the diff -Nru gdb-9.1/gdb/bfd-target.c gdb-10.2/gdb/bfd-target.c --- gdb-9.1/gdb/bfd-target.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/bfd-target.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Very simple "bfd" target, for GDB, the GNU debugger. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -77,8 +77,7 @@ return section_table_xfer_memory_partial (readbuf, writebuf, offset, len, xfered_len, m_table.sections, - m_table.sections_end, - NULL); + m_table.sections_end); } default: return TARGET_XFER_E_IO; diff -Nru gdb-9.1/gdb/bfd-target.h gdb-10.2/gdb/bfd-target.h --- gdb-9.1/gdb/bfd-target.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/bfd-target.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Very simple "bfd" target, for GDB, the GNU debugger. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/bfin-linux-tdep.c gdb-10.2/gdb/bfin-linux-tdep.c --- gdb-9.1/gdb/bfin-linux-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/bfin-linux-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for Analog Devices Blackfin processor, for GDB. - Copyright (C) 2005-2020 Free Software Foundation, Inc. + Copyright (C) 2005-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. @@ -161,8 +161,9 @@ bfin_linux_get_syscall_number); } +void _initialize_bfin_linux_tdep (); void -_initialize_bfin_linux_tdep (void) +_initialize_bfin_linux_tdep () { gdbarch_register_osabi (bfd_arch_bfin, 0, GDB_OSABI_LINUX, bfin_linux_init_abi); diff -Nru gdb-9.1/gdb/bfin-tdep.c gdb-10.2/gdb/bfin-tdep.c --- gdb-9.1/gdb/bfin-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/bfin-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for Analog Devices Blackfin processor, for GDB. - Copyright (C) 2005-2020 Free Software Foundation, Inc. + Copyright (C) 2005-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. @@ -31,7 +31,7 @@ #include "dis-asm.h" #include "sim-regno.h" #include "gdb/sim-bfin.h" -#include "dwarf2-frame.h" +#include "dwarf2/frame.h" #include "symtab.h" #include "elf-bfd.h" #include "elf/bfin.h" @@ -833,8 +833,9 @@ return gdbarch; } +void _initialize_bfin_tdep (); void -_initialize_bfin_tdep (void) +_initialize_bfin_tdep () { register_gdbarch_init (bfd_arch_bfin, bfin_gdbarch_init); } diff -Nru gdb-9.1/gdb/bfin-tdep.h gdb-10.2/gdb/bfin-tdep.h --- gdb-9.1/gdb/bfin-tdep.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/bfin-tdep.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for Analog Devices Blackfin processor, for GDB. - Copyright (C) 2005-2020 Free Software Foundation, Inc. + Copyright (C) 2005-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. diff -Nru gdb-9.1/gdb/block.c gdb-10.2/gdb/block.c --- gdb-9.1/gdb/block.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/block.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Block-related functions for the GNU debugger, GDB. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -62,7 +62,7 @@ if (BLOCK_FUNCTION (block) != NULL) return symbol_arch (BLOCK_FUNCTION (block)); - return get_objfile_arch (block_objfile (block)); + return block_objfile (block)->arch (); } /* See block.h. */ @@ -657,19 +657,18 @@ return block_iter_match_step (iterator, name, 0); } -/* Return true if symbol A is the best match possible for DOMAIN. */ +/* See block.h. */ -static bool +bool best_symbol (struct symbol *a, const domain_enum domain) { return (SYMBOL_DOMAIN (a) == domain && SYMBOL_CLASS (a) != LOC_UNRESOLVED); } -/* Return symbol B if it is a better match than symbol A for DOMAIN. - Otherwise return A. */ +/* See block.h. */ -static struct symbol * +struct symbol * better_symbol (struct symbol *a, struct symbol *b, const domain_enum domain) { if (a == NULL) @@ -729,7 +728,7 @@ STRUCT vs VAR domain symbols. So if a matching symbol is found, make sure there is no "better" matching symbol, i.e., one with exactly the same domain. PR 16253. */ - if (symbol_matches_domain (SYMBOL_LANGUAGE (sym), + if (symbol_matches_domain (sym->language (), SYMBOL_DOMAIN (sym), domain)) other = better_symbol (other, sym, domain); } @@ -750,7 +749,7 @@ ALL_BLOCK_SYMBOLS_WITH_NAME (block, lookup_name, iter, sym) { - if (symbol_matches_domain (SYMBOL_LANGUAGE (sym), + if (symbol_matches_domain (sym->language (), SYMBOL_DOMAIN (sym), domain)) { sym_found = sym; @@ -819,8 +818,7 @@ STRUCT vs VAR domain symbols. So if a matching symbol is found, make sure there is no "better" matching symbol, i.e., one with exactly the same domain. PR 16253. */ - if (symbol_matches_domain (SYMBOL_LANGUAGE (sym), - SYMBOL_DOMAIN (sym), domain)) + if (symbol_matches_domain (sym->language (), SYMBOL_DOMAIN (sym), domain)) other = better_symbol (other, sym, domain); } @@ -847,8 +845,7 @@ { /* MATCHER is deliberately called second here so that it never sees a non-domain-matching symbol. */ - if (symbol_matches_domain (SYMBOL_LANGUAGE (sym), - SYMBOL_DOMAIN (sym), domain) + if (symbol_matches_domain (sym->language (), SYMBOL_DOMAIN (sym), domain) && matcher (sym, data)) return sym; } diff -Nru gdb-9.1/gdb/blockframe.c gdb-10.2/gdb/blockframe.c --- gdb-9.1/gdb/blockframe.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/blockframe.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,7 +1,7 @@ /* Get info from stack frames; convert between frames, blocks, functions and pc values. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -191,7 +191,7 @@ static CORE_ADDR cache_pc_function_low = 0; static CORE_ADDR cache_pc_function_high = 0; -static const char *cache_pc_function_name = 0; +static const general_symbol_info *cache_pc_function_sym = nullptr; static struct obj_section *cache_pc_function_section = NULL; static const struct block *cache_pc_function_block = nullptr; @@ -202,7 +202,7 @@ { cache_pc_function_low = 0; cache_pc_function_high = 0; - cache_pc_function_name = (char *) 0; + cache_pc_function_sym = nullptr; cache_pc_function_section = NULL; cache_pc_function_block = nullptr; } @@ -210,8 +210,10 @@ /* See symtab.h. */ bool -find_pc_partial_function (CORE_ADDR pc, const char **name, CORE_ADDR *address, - CORE_ADDR *endaddr, const struct block **block) +find_pc_partial_function_sym (CORE_ADDR pc, + const struct general_symbol_info **sym, + CORE_ADDR *address, CORE_ADDR *endaddr, + const struct block **block) { struct obj_section *section; struct symbol *f; @@ -236,19 +238,7 @@ goto return_cached_value; msymbol = lookup_minimal_symbol_by_pc_section (mapped_pc, section); - for (objfile *objfile : current_program_space->objfiles ()) - { - if (objfile->sf) - { - compunit_symtab - = objfile->sf->qf->find_pc_sect_compunit_symtab (objfile, msymbol, - mapped_pc, - section, - 0); - } - if (compunit_symtab != NULL) - break; - } + compunit_symtab = find_pc_sect_compunit_symtab (mapped_pc, section); if (compunit_symtab != NULL) { @@ -269,7 +259,7 @@ { const struct block *b = SYMBOL_BLOCK_VALUE (f); - cache_pc_function_name = f->linkage_name (); + cache_pc_function_sym = f; cache_pc_function_section = section; cache_pc_function_block = b; @@ -325,8 +315,8 @@ if (msymbol.minsym == NULL) { /* No available symbol. */ - if (name != NULL) - *name = 0; + if (sym != nullptr) + *sym = 0; if (address != NULL) *address = 0; if (endaddr != NULL) @@ -337,7 +327,7 @@ } cache_pc_function_low = BMSYMBOL_VALUE_ADDRESS (msymbol); - cache_pc_function_name = msymbol.minsym->linkage_name (); + cache_pc_function_sym = msymbol.minsym; cache_pc_function_section = section; cache_pc_function_high = minimal_symbol_upper_bound (msymbol); cache_pc_function_block = nullptr; @@ -352,8 +342,8 @@ *address = cache_pc_function_low; } - if (name) - *name = cache_pc_function_name; + if (sym != nullptr) + *sym = cache_pc_function_sym; if (endaddr) { @@ -380,6 +370,20 @@ /* See symtab.h. */ bool +find_pc_partial_function (CORE_ADDR pc, const char **name, CORE_ADDR *address, + CORE_ADDR *endaddr, const struct block **block) +{ + const general_symbol_info *gsi; + bool r = find_pc_partial_function_sym (pc, &gsi, address, endaddr, block); + if (name != nullptr) + *name = r ? gsi->linkage_name () : nullptr; + return r; +} + + +/* See symtab.h. */ + +bool find_function_entry_range_from_pc (CORE_ADDR pc, const char **name, CORE_ADDR *address, CORE_ADDR *endaddr) { @@ -441,11 +445,11 @@ /* If we found a pointer to function, then the resolved type is the type of the pointed-to function. */ - if (TYPE_CODE (resolver_ret_type) == TYPE_CODE_PTR) + if (resolver_ret_type->code () == TYPE_CODE_PTR) { struct type *resolved_type = TYPE_TARGET_TYPE (resolver_ret_type); - if (TYPE_CODE (check_typedef (resolved_type)) == TYPE_CODE_FUNC) + if (check_typedef (resolved_type)->code () == TYPE_CODE_FUNC) return resolved_type; } } diff -Nru gdb-9.1/gdb/block.h gdb-10.2/gdb/block.h --- gdb-9.1/gdb/block.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/block.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Code dealing with blocks for GDB. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -342,6 +342,16 @@ extern struct symbol *block_iter_match_next (const lookup_name_info &name, struct block_iterator *iterator); +/* Return true if symbol A is the best match possible for DOMAIN. */ + +extern bool best_symbol (struct symbol *a, const domain_enum domain); + +/* Return symbol B if it is a better match than symbol A for DOMAIN. + Otherwise return A. */ + +extern struct symbol *better_symbol (struct symbol *a, struct symbol *b, + const domain_enum domain); + /* Search BLOCK for symbol NAME in DOMAIN. */ extern struct symbol *block_lookup_symbol (const struct block *block, diff -Nru gdb-9.1/gdb/bpf-tdep.c gdb-10.2/gdb/bpf-tdep.c --- gdb-9.1/gdb/bpf-tdep.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/bpf-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,386 @@ +/* Target-dependent code for BPF. + + Copyright (C) 2020-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "defs.h" +#include "arch-utils.h" +#include "dis-asm.h" +#include "frame.h" +#include "frame-unwind.h" +#include "trad-frame.h" +#include "symtab.h" +#include "value.h" +#include "gdbcmd.h" +#include "breakpoint.h" +#include "inferior.h" +#include "regcache.h" +#include "target.h" +#include "dwarf2/frame.h" +#include "osabi.h" +#include "target-descriptions.h" +#include "remote.h" + + +/* eBPF registers. */ + +enum bpf_regnum +{ + BPF_R0_REGNUM, /* return value */ + BPF_R1_REGNUM, + BPF_R2_REGNUM, + BPF_R3_REGNUM, + BPF_R4_REGNUM, + BPF_R5_REGNUM, + BPF_R6_REGNUM, + BPF_R7_REGNUM, + BPF_R8_REGNUM, + BPF_R9_REGNUM, + BPF_R10_REGNUM, /* sp */ + BPF_PC_REGNUM, +}; + +#define BPF_NUM_REGS (BPF_PC_REGNUM + 1) + +/* Target-dependent structure in gdbarch. */ +struct gdbarch_tdep +{ +}; + + +/* Internal debugging facilities. */ + +/* When this is set to non-zero debugging information will be + printed. */ + +static unsigned int bpf_debug_flag = 0; + +/* The show callback for 'show debug bpf'. */ + +static void +show_bpf_debug (struct ui_file *file, int from_tty, + struct cmd_list_element *c, const char *value) +{ + fprintf_filtered (file, _("Debugging of BPF is %s.\n"), value); +} + + +/* BPF registers. */ + +static const char *bpf_register_names[] = +{ + "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", + "r8", "r9", "r10", "pc" +}; + +/* Return the name of register REGNUM. */ + +static const char * +bpf_register_name (struct gdbarch *gdbarch, int reg) +{ + if (reg >= 0 && reg < BPF_NUM_REGS) + return bpf_register_names[reg]; + return NULL; +} + +/* Return the GDB type of register REGNUM. */ + +static struct type * +bpf_register_type (struct gdbarch *gdbarch, int reg) +{ + if (reg == BPF_R10_REGNUM) + return builtin_type (gdbarch)->builtin_data_ptr; + else if (reg == BPF_PC_REGNUM) + return builtin_type (gdbarch)->builtin_func_ptr; + return builtin_type (gdbarch)->builtin_int64; +} + +/* Return the GDB register number corresponding to DWARF's REG. */ + +static int +bpf_dwarf2_reg_to_regnum (struct gdbarch *gdbarch, int reg) +{ + if (reg >= 0 && reg < BPF_NUM_REGS) + return reg; + return -1; +} + +/* Implement the "print_insn" gdbarch method. */ + +static int +bpf_gdb_print_insn (bfd_vma memaddr, disassemble_info *info) +{ + info->symbols = NULL; + return default_print_insn (memaddr, info); +} + + +/* Return PC of first real instruction of the function starting at + START_PC. */ + +static CORE_ADDR +bpf_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR start_pc) +{ + fprintf_unfiltered (gdb_stdlog, + "Skipping prologue: start_pc=%s\n", + paddress (gdbarch, start_pc)); + /* XXX: to be completed. */ + return start_pc + 0; +} + + +/* Frame unwinder. + + XXX it is not clear how to unwind in eBPF, since the stack is not + guaranteed to be contiguous, and therefore no relative stack + addressing can be done in the callee in order to access the + caller's stack frame. To explore with xBPF, which will relax this + restriction. */ + +/* Given THIS_FRAME, return its ID. */ + +static void +bpf_frame_this_id (struct frame_info *this_frame, + void **this_prologue_cache, + struct frame_id *this_id) +{ + /* Note that THIS_ID defaults to the outermost frame if we don't set + anything here. See frame.c:compute_frame_id. */ +} + +/* Return the reason why we can't unwind past THIS_FRAME. */ + +static enum unwind_stop_reason +bpf_frame_unwind_stop_reason (struct frame_info *this_frame, + void **this_cache) +{ + return UNWIND_OUTERMOST; +} + +/* Ask THIS_FRAME to unwind its register. */ + +static struct value * +bpf_frame_prev_register (struct frame_info *this_frame, + void **this_prologue_cache, int regnum) +{ + return frame_unwind_got_register (this_frame, regnum, regnum); +} + +/* Frame unwinder machinery for BPF. */ + +static const struct frame_unwind bpf_frame_unwind = +{ + NORMAL_FRAME, + bpf_frame_unwind_stop_reason, + bpf_frame_this_id, + bpf_frame_prev_register, + NULL, + default_frame_sniffer +}; + + +/* Breakpoints. */ + +/* Enum describing the different kinds of breakpoints. We currently + just support one, implemented by the brkpt xbpf instruction. */ + +enum bpf_breakpoint_kinds +{ + BPF_BP_KIND_BRKPT = 0, +}; + +/* Implement the breakpoint_kind_from_pc gdbarch method. */ + +static int +bpf_breakpoint_kind_from_pc (struct gdbarch *gdbarch, CORE_ADDR *start_pc) +{ + /* We support just one kind of breakpoint. */ + return BPF_BP_KIND_BRKPT; +} + +/* Implement the sw_breakpoint_from_kind gdbarch method. */ + +static const gdb_byte * +bpf_sw_breakpoint_from_kind (struct gdbarch *gdbarch, int kind, int *size) +{ + static unsigned char brkpt_insn[] + = {0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + + switch (kind) + { + case BPF_BP_KIND_BRKPT: + *size = 8; + return brkpt_insn; + default: + gdb_assert_not_reached ("unexpected BPF breakpoint kind"); + } +} + + +/* Assuming THIS_FRAME is a dummy frame, return its frame ID. */ + +static struct frame_id +bpf_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame) +{ + CORE_ADDR sp = get_frame_register_unsigned (this_frame, + gdbarch_sp_regnum (gdbarch)); + return frame_id_build (sp, get_frame_pc (this_frame)); +} + +/* Implement the push dummy call gdbarch callback. */ + +static CORE_ADDR +bpf_push_dummy_call (struct gdbarch *gdbarch, struct value *function, + struct regcache *regcache, CORE_ADDR bp_addr, + int nargs, struct value **args, CORE_ADDR sp, + function_call_return_method return_method, + CORE_ADDR struct_addr) +{ + fprintf_unfiltered (gdb_stdlog, "Pushing dummy call: sp=%s\n", + paddress (gdbarch, sp)); + /* XXX writeme */ + return sp; +} + +/* Extract a function return value of TYPE from REGCACHE, + and copy it into VALBUF. */ + +static void +bpf_extract_return_value (struct type *type, struct regcache *regcache, + gdb_byte *valbuf) +{ + int len = TYPE_LENGTH (type); + gdb_byte vbuf[8]; + + gdb_assert (len <= 8); + regcache->cooked_read (BPF_R0_REGNUM, vbuf); + memcpy (valbuf, vbuf + 8 - len, len); +} + +/* Store the function return value of type TYPE from VALBUF into REGNAME. */ + +static void +bpf_store_return_value (struct type *type, struct regcache *regcache, + const gdb_byte *valbuf) +{ + int len = TYPE_LENGTH (type); + gdb_byte vbuf[8]; + + gdb_assert (len <= 8); + memset (vbuf, 0, sizeof (vbuf)); + memcpy (vbuf + 8 - len, valbuf, len); + regcache->cooked_write (BPF_R0_REGNUM, vbuf); +} + +/* Handle function's return value. */ + +static enum return_value_convention +bpf_return_value (struct gdbarch *gdbarch, struct value *function, + struct type *type, struct regcache *regcache, + gdb_byte *readbuf, const gdb_byte *writebuf) +{ + int len = TYPE_LENGTH (type); + + if (len > 8) + return RETURN_VALUE_STRUCT_CONVENTION; + + if (readbuf != NULL) + bpf_extract_return_value (type, regcache, readbuf); + if (writebuf != NULL) + bpf_store_return_value (type, regcache, writebuf); + + return RETURN_VALUE_REGISTER_CONVENTION; +} + + +/* Initialize the current architecture based on INFO. If possible, re-use an + architecture from ARCHES, which is a list of architectures already created + during this debugging session. */ + +static struct gdbarch * +bpf_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) +{ + /* If there is already a candidate, use it. */ + arches = gdbarch_list_lookup_by_info (arches, &info); + if (arches != NULL) + return arches->gdbarch; + + /* Allocate space for the new architecture. */ + struct gdbarch_tdep *tdep = XCNEW (struct gdbarch_tdep); + struct gdbarch *gdbarch = gdbarch_alloc (&info, tdep); + + /* Information about registers, etc. */ + set_gdbarch_num_regs (gdbarch, BPF_NUM_REGS); + set_gdbarch_register_name (gdbarch, bpf_register_name); + set_gdbarch_register_type (gdbarch, bpf_register_type); + + /* Register numbers of various important registers. */ + set_gdbarch_sp_regnum (gdbarch, BPF_R10_REGNUM); + set_gdbarch_pc_regnum (gdbarch, BPF_PC_REGNUM); + + /* Map DWARF2 registers to GDB registers. */ + set_gdbarch_dwarf2_reg_to_regnum (gdbarch, bpf_dwarf2_reg_to_regnum); + + /* Call dummy code. */ + set_gdbarch_call_dummy_location (gdbarch, ON_STACK); + set_gdbarch_dummy_id (gdbarch, bpf_dummy_id); + set_gdbarch_push_dummy_call (gdbarch, bpf_push_dummy_call); + + /* Returning results. */ + set_gdbarch_return_value (gdbarch, bpf_return_value); + + /* Advance PC across function entry code. */ + set_gdbarch_skip_prologue (gdbarch, bpf_skip_prologue); + + /* Stack grows downward. */ + set_gdbarch_inner_than (gdbarch, core_addr_lessthan); + + /* Breakpoint manipulation. */ + set_gdbarch_breakpoint_kind_from_pc (gdbarch, bpf_breakpoint_kind_from_pc); + set_gdbarch_sw_breakpoint_from_kind (gdbarch, bpf_sw_breakpoint_from_kind); + + /* Frame handling. */ + set_gdbarch_frame_args_skip (gdbarch, 8); + + /* Disassembly. */ + set_gdbarch_print_insn (gdbarch, bpf_gdb_print_insn); + + /* Hook in ABI-specific overrides, if they have been registered. */ + gdbarch_init_osabi (info, gdbarch); + + /* Install unwinders. */ + frame_unwind_append_unwinder (gdbarch, &bpf_frame_unwind); + + return gdbarch; +} + +void _initialize_bpf_tdep (); +void +_initialize_bpf_tdep (void) +{ + register_gdbarch_init (bfd_arch_bpf, bpf_gdbarch_init); + + /* Add commands 'set/show debug bpf'. */ + add_setshow_zuinteger_cmd ("bpf", class_maintenance, + &bpf_debug_flag, + _("Set BPF debugging."), + _("Show BPF debugging."), + _("Enables BPF specific debugging output."), + NULL, + &show_bpf_debug, + &setdebuglist, &showdebuglist); +} diff -Nru gdb-9.1/gdb/break-catch-sig.c gdb-10.2/gdb/break-catch-sig.c --- gdb-9.1/gdb/break-catch-sig.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/break-catch-sig.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Everything about signal catchpoints, for GDB. - Copyright (C) 2011-2020 Free Software Foundation, Inc. + Copyright (C) 2011-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -181,12 +181,11 @@ signal_catchpoint_print_it (bpstat bs) { struct breakpoint *b = bs->breakpoint_at; - ptid_t ptid; struct target_waitstatus last; const char *signal_name; struct ui_out *uiout = current_uiout; - get_last_target_status (&ptid, &last); + get_last_target_status (nullptr, nullptr, &last); signal_name = signal_to_name_or_int (last.value.sig); @@ -425,8 +424,9 @@ ops->explains_signal = signal_catchpoint_explains_signal; } +void _initialize_break_catch_sig (); void -_initialize_break_catch_sig (void) +_initialize_break_catch_sig () { initialize_signal_catchpoint_ops (); diff -Nru gdb-9.1/gdb/break-catch-syscall.c gdb-10.2/gdb/break-catch-syscall.c --- gdb-9.1/gdb/break-catch-syscall.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/break-catch-syscall.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Everything about syscall catchpoints, for GDB. - Copyright (C) 2009-2020 Free Software Foundation, Inc. + Copyright (C) 2009-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -182,12 +182,11 @@ syscall is. It can be in the TARGET_WAITKIND_SYSCALL_ENTRY or TARGET_WAITKIND_SYSCALL_RETURN, and depending on it we must print "called syscall" or "returned from syscall". */ - ptid_t ptid; struct target_waitstatus last; struct syscall s; struct gdbarch *gdbarch = bs->bp_location_at->gdbarch; - get_last_target_status (&ptid, &last); + get_last_target_status (nullptr, nullptr, &last); get_syscall_by_number (gdbarch, last.value.syscall_number, &s); @@ -600,8 +599,9 @@ ops->print_recreate = print_recreate_catch_syscall; } +void _initialize_break_catch_syscall (); void -_initialize_break_catch_syscall (void) +_initialize_break_catch_syscall () { initialize_syscall_catchpoint_ops (); diff -Nru gdb-9.1/gdb/break-catch-throw.c gdb-10.2/gdb/break-catch-throw.c --- gdb-9.1/gdb/break-catch-throw.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/break-catch-throw.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Everything about catch/throw catchpoints, for GDB. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -156,26 +156,28 @@ if (self->pattern == NULL) return; + const char *name = nullptr; + gdb::unique_xmalloc_ptr canon; try { struct value *typeinfo_arg; - std::string canon; fetch_probe_arguments (NULL, &typeinfo_arg); type_name = cplus_typename_from_type_info (typeinfo_arg); canon = cp_canonicalize_string (type_name.c_str ()); - if (!canon.empty ()) - std::swap (type_name, canon); + name = (canon != nullptr + ? canon.get () + : type_name.c_str ()); } catch (const gdb_exception_error &e) { exception_print (gdb_stderr, e); } - if (!type_name.empty ()) + if (name != nullptr) { - if (self->pattern->exec (type_name.c_str (), 0, NULL, 0) != 0) + if (self->pattern->exec (name, 0, NULL, 0) != 0) bs->stop = 0; } } @@ -532,8 +534,9 @@ ops->allocate_location = allocate_location_exception_catchpoint; } +void _initialize_break_catch_throw (); void -_initialize_break_catch_throw (void) +_initialize_break_catch_throw () { initialize_throw_catchpoint_ops (); diff -Nru gdb-9.1/gdb/breakpoint.c gdb-10.2/gdb/breakpoint.c --- gdb-9.1/gdb/breakpoint.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/breakpoint.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Everything about breakpoints, for GDB. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -89,7 +89,7 @@ static void breakpoint_re_set_default (struct breakpoint *); static void - create_sals_from_location_default (const struct event_location *location, + create_sals_from_location_default (struct event_location *location, struct linespec_result *canonical, enum bptype type_wanted); @@ -104,7 +104,7 @@ int, int, int, unsigned); static std::vector decode_location_default - (struct breakpoint *b, const struct event_location *location, + (struct breakpoint *b, struct event_location *location, struct program_space *search_pspace); static int can_use_hardware_watchpoint @@ -144,6 +144,10 @@ static int watchpoint_locations_match (struct bp_location *loc1, struct bp_location *loc2); +static int breakpoint_locations_match (struct bp_location *loc1, + struct bp_location *loc2, + bool sw_hw_bps_match = false); + static int breakpoint_location_address_match (struct bp_location *bl, const struct address_space *aspace, CORE_ADDR addr); @@ -389,7 +393,7 @@ no threads under GDB's control yet. */ return 1; } - else if (target_has_execution) + else { if (always_inserted_mode) { @@ -398,8 +402,10 @@ return 1; } - if (threads_are_executing ()) - return 1; + for (inferior *inf : all_inferiors ()) + if (inf->has_execution () + && threads_are_executing (inf->process_target ())) + return 1; /* Don't remove breakpoints yet if, even though all threads are stopped, we still have events to process. */ @@ -828,68 +834,75 @@ set_breakpoint_condition (struct breakpoint *b, const char *exp, int from_tty) { - xfree (b->cond_string); - b->cond_string = NULL; - - if (is_watchpoint (b)) - { - struct watchpoint *w = (struct watchpoint *) b; - - w->cond_exp.reset (); - } - else + if (*exp == 0) { - struct bp_location *loc; + xfree (b->cond_string); + b->cond_string = nullptr; - for (loc = b->loc; loc; loc = loc->next) + if (is_watchpoint (b)) + static_cast (b)->cond_exp.reset (); + else { - loc->cond.reset (); + for (bp_location *loc = b->loc; loc != nullptr; loc = loc->next) + { + loc->cond.reset (); - /* No need to free the condition agent expression - bytecode (if we have one). We will handle this - when we go through update_global_location_list. */ + /* No need to free the condition agent expression + bytecode (if we have one). We will handle this + when we go through update_global_location_list. */ + } } - } - if (*exp == 0) - { if (from_tty) printf_filtered (_("Breakpoint %d now unconditional.\n"), b->number); } else { - const char *arg = exp; - - /* I don't know if it matters whether this is the string the user - typed in or the decompiled expression. */ - b->cond_string = xstrdup (arg); - b->condition_not_parsed = 0; - if (is_watchpoint (b)) { - struct watchpoint *w = (struct watchpoint *) b; - innermost_block_tracker tracker; - arg = exp; - w->cond_exp = parse_exp_1 (&arg, 0, 0, 0, &tracker); - if (*arg) + const char *arg = exp; + expression_up new_exp = parse_exp_1 (&arg, 0, 0, 0, &tracker); + if (*arg != 0) error (_("Junk at end of expression")); + watchpoint *w = static_cast (b); + w->cond_exp = std::move (new_exp); w->cond_exp_valid_block = tracker.block (); } else { - struct bp_location *loc; + /* Parse and set condition expressions. We make two passes. + In the first, we parse the condition string to see if it + is valid in all locations. If so, the condition would be + accepted. So we go ahead and set the locations' + conditions. In case a failing case is found, we throw + the error and the condition string will be rejected. + This two-pass approach is taken to avoid setting the + state of locations in case of a reject. */ + for (bp_location *loc = b->loc; loc != nullptr; loc = loc->next) + { + const char *arg = exp; + parse_exp_1 (&arg, loc->address, + block_for_pc (loc->address), 0); + if (*arg != 0) + error (_("Junk at end of expression")); + } - for (loc = b->loc; loc; loc = loc->next) + /* If we reach here, the condition is valid at all locations. */ + for (bp_location *loc = b->loc; loc != nullptr; loc = loc->next) { - arg = exp; + const char *arg = exp; loc->cond = parse_exp_1 (&arg, loc->address, block_for_pc (loc->address), 0); - if (*arg) - error (_("Junk at end of expression")); } } + + /* We know that the new condition parsed successfully. The + condition string of the breakpoint can be safely updated. */ + xfree (b->cond_string); + b->cond_string = xstrdup (exp); + b->condition_not_parsed = 0; } mark_breakpoint_modified (b); @@ -1216,13 +1229,23 @@ if (arg == NULL || !*arg) { + /* Argument not explicitly given. Synthesize it. */ if (breakpoint_count - prev_breakpoint_count > 1) new_arg = string_printf ("%d-%d", prev_breakpoint_count + 1, breakpoint_count); else if (breakpoint_count > 0) new_arg = string_printf ("%d", breakpoint_count); - arg = new_arg.c_str (); } + else + { + /* Create a copy of ARG. This is needed because the "commands" + command may be coming from a script. In that case, the read + line buffer is going to be overwritten in the lambda of + 'map_breakpoint_numbers' below when reading the next line + before we are are done parsing the breakpoint numbers. */ + new_arg = arg; + } + arg = new_arg.c_str (); map_breakpoint_numbers (arg, [&] (breakpoint *b) @@ -1804,8 +1827,8 @@ for it explicitly, never if they just happen to appear in the middle of some value chain. */ if (v == result - || (TYPE_CODE (vtype) != TYPE_CODE_STRUCT - && TYPE_CODE (vtype) != TYPE_CODE_ARRAY)) + || (vtype->code () != TYPE_CODE_STRUCT + && vtype->code () != TYPE_CODE_ARRAY)) { CORE_ADDR addr; enum target_hw_bp_type type; @@ -2022,13 +2045,8 @@ && !(bl->owner->type == bp_single_step && thread_is_stepping_over_breakpoint (bl->owner->thread))) { - if (debug_infrun) - { - fprintf_unfiltered (gdb_stdlog, - "infrun: skipping breakpoint: " - "stepping past insn at: %s\n", - paddress (bl->gdbarch, bl->address)); - } + infrun_debug_printf ("skipping breakpoint: stepping past insn at: %s", + paddress (bl->gdbarch, bl->address)); return 0; } @@ -2037,14 +2055,9 @@ if ((bl->loc_type == bp_loc_hardware_watchpoint) && stepping_past_nonsteppable_watchpoint ()) { - if (debug_infrun) - { - fprintf_unfiltered (gdb_stdlog, - "infrun: stepping past non-steppable watchpoint. " - "skipping watchpoint at %s:%d\n", - paddress (bl->gdbarch, bl->address), - bl->length); - } + infrun_debug_printf ("stepping past non-steppable watchpoint. " + "skipping watchpoint at %s:%d\n", + paddress (bl->gdbarch, bl->address), bl->length); return 0; } @@ -2123,10 +2136,14 @@ return; /* Do a first pass to check for locations with no assigned - conditions or conditions that fail to parse to a valid agent expression - bytecode. If any of these happen, then it's no use to send conditions - to the target since this location will always trigger and generate a - response back to GDB. */ + conditions or conditions that fail to parse to a valid agent + expression bytecode. If any of these happen, then it's no use to + send conditions to the target since this location will always + trigger and generate a response back to GDB. Note we consider + all locations at the same address irrespective of type, i.e., + even if the locations aren't considered duplicates (e.g., + software breakpoint and hardware breakpoint at the same + address). */ ALL_BP_LOCATIONS_AT_ADDR (loc2p, locp, bl->address) { loc = (*loc2p); @@ -2175,8 +2192,12 @@ } } - /* No NULL conditions or failed bytecode generation. Build a condition list - for this location's address. */ + /* No NULL conditions or failed bytecode generation. Build a + condition list for this location's address. If we have software + and hardware locations at the same address, they aren't + considered duplicates, but we still marge all the conditions + anyway, as it's simpler, and doesn't really make a practical + difference. */ ALL_BP_LOCATIONS_AT_ADDR (loc2p, locp, bl->address) { loc = (*loc2p); @@ -2294,9 +2315,9 @@ if (dprintf_style != dprintf_style_agent) return; - /* For now, if we have any duplicate location that isn't a dprintf, - don't install the target-side commands, as that would make the - breakpoint not be reported to the core, and we'd lose + /* For now, if we have any location at the same address that isn't a + dprintf, don't install the target-side commands, as that would + make the breakpoint not be reported to the core, and we'd lose control. */ ALL_BP_LOCATIONS_AT_ADDR (loc2p, locp, bl->address) { @@ -2358,12 +2379,19 @@ } } - /* No NULL commands or failed bytecode generation. Build a command list - for this location's address. */ + /* No NULL commands or failed bytecode generation. Build a command + list for all duplicate locations at this location's address. + Note that here we must care for whether the breakpoint location + types are considered duplicates, otherwise, say, if we have a + software and hardware location at the same address, the target + could end up running the commands twice. For the moment, we only + support targets-side commands with dprintf, but it doesn't hurt + to be pedantically correct in case that changes. */ ALL_BP_LOCATIONS_AT_ADDR (loc2p, locp, bl->address) { loc = (*loc2p); - if (loc->owner->extra_string + if (breakpoint_locations_match (bl, loc) + && loc->owner->extra_string && is_breakpoint (loc->owner) && loc->pspace->num == bl->pspace->num && loc->owner->enable_state == bp_enabled @@ -2449,72 +2477,31 @@ bl->needs_update = 0; } + /* If "set breakpoint auto-hw" is "on" and a software breakpoint was + set at a read-only address, then a breakpoint location will have + been changed to hardware breakpoint before we get here. If it is + "off" however, error out before actually trying to insert the + breakpoint, with a nicer error message. */ if (bl->loc_type == bp_loc_software_breakpoint - || bl->loc_type == bp_loc_hardware_breakpoint) + && !automatic_hardware_breakpoints) { - if (bl->owner->type != bp_hardware_breakpoint) - { - /* If the explicitly specified breakpoint type - is not hardware breakpoint, check the memory map to see - if the breakpoint address is in read only memory or not. - - Two important cases are: - - location type is not hardware breakpoint, memory - is readonly. We change the type of the location to - hardware breakpoint. - - location type is hardware breakpoint, memory is - read-write. This means we've previously made the - location hardware one, but then the memory map changed, - so we undo. - - When breakpoints are removed, remove_breakpoints will use - location types we've just set here, the only possible - problem is that memory map has changed during running - program, but it's not going to work anyway with current - gdb. */ - struct mem_region *mr - = lookup_mem_region (bl->target_info.reqstd_address); - - if (mr) - { - if (automatic_hardware_breakpoints) - { - enum bp_loc_type new_type; - - if (mr->attrib.mode != MEM_RW) - new_type = bp_loc_hardware_breakpoint; - else - new_type = bp_loc_software_breakpoint; - - if (new_type != bl->loc_type) - { - static int said = 0; + mem_region *mr = lookup_mem_region (bl->address); - bl->loc_type = new_type; - if (!said) - { - fprintf_filtered (gdb_stdout, - _("Note: automatically using " - "hardware breakpoints for " - "read-only addresses.\n")); - said = 1; - } - } - } - else if (bl->loc_type == bp_loc_software_breakpoint - && mr->attrib.mode != MEM_RW) - { - fprintf_unfiltered (tmp_error_stream, - _("Cannot insert breakpoint %d.\n" - "Cannot set software breakpoint " - "at read-only address %s\n"), - bl->owner->number, - paddress (bl->gdbarch, bl->address)); - return 1; - } - } + if (mr != nullptr && mr->attrib.mode != MEM_RW) + { + fprintf_unfiltered (tmp_error_stream, + _("Cannot insert breakpoint %d.\n" + "Cannot set software breakpoint " + "at read-only address %s\n"), + bl->owner->number, + paddress (bl->gdbarch, bl->address)); + return 1; } - + } + + if (bl->loc_type == bp_loc_software_breakpoint + || bl->loc_type == bp_loc_hardware_breakpoint) + { /* First check to see if we have to handle an overlay. */ if (overlay_debugging == ovly_off || bl->section == NULL @@ -2828,7 +2815,11 @@ /* Updating watchpoints creates new locations, so update the global location list. Explicitly tell ugll to insert locations and - ignore breakpoints_always_inserted_mode. */ + ignore breakpoints_always_inserted_mode. Also, + update_global_location_list tries to "upgrade" software + breakpoints to hardware breakpoints to handle "set breakpoint + auto-hw", so we need to call it even if we don't have new + locations. */ update_global_location_list (UGLL_INSERT); } @@ -2887,7 +2878,7 @@ if we aren't attached to any process yet, we should still insert breakpoints. */ if (!gdbarch_has_global_breakpoints (target_gdbarch ()) - && inferior_ptid == null_ptid) + && (inferior_ptid == null_ptid || !target_has_execution)) continue; val = insert_bp_location (bl, &tmp_error_stream, &disabled_breaks, @@ -2943,7 +2934,7 @@ if we aren't attached to any process yet, we should still insert breakpoints. */ if (!gdbarch_has_global_breakpoints (target_gdbarch ()) - && inferior_ptid == null_ptid) + && (inferior_ptid == null_ptid || !target_has_execution)) continue; val = insert_bp_location (bl, &tmp_error_stream, &disabled_breaks, @@ -3199,7 +3190,7 @@ } addr = BMSYMBOL_VALUE_ADDRESS (bp_objfile_data->overlay_msym); - b = create_internal_breakpoint (get_objfile_arch (objfile), addr, + b = create_internal_breakpoint (objfile->arch (), addr, bp_overlay_event, &internal_breakpoint_ops); initialize_explicit_location (&explicit_loc); @@ -3222,241 +3213,272 @@ static void create_longjmp_master_breakpoint (void) { - struct program_space *pspace; - scoped_restore_current_program_space restore_pspace; - ALL_PSPACES (pspace) - { - set_current_program_space (pspace); + for (struct program_space *pspace : program_spaces) + { + set_current_program_space (pspace); - for (objfile *objfile : current_program_space->objfiles ()) - { - int i; - struct gdbarch *gdbarch; - struct breakpoint_objfile_data *bp_objfile_data; + for (objfile *objfile : current_program_space->objfiles ()) + { + int i; + struct gdbarch *gdbarch; + struct breakpoint_objfile_data *bp_objfile_data; - gdbarch = get_objfile_arch (objfile); + gdbarch = objfile->arch (); - bp_objfile_data = get_breakpoint_objfile_data (objfile); + bp_objfile_data = get_breakpoint_objfile_data (objfile); - if (!bp_objfile_data->longjmp_searched) - { - std::vector ret - = find_probes_in_objfile (objfile, "libc", "longjmp"); + if (!bp_objfile_data->longjmp_searched) + { + std::vector ret + = find_probes_in_objfile (objfile, "libc", "longjmp"); - if (!ret.empty ()) - { - /* We are only interested in checking one element. */ - probe *p = ret[0]; + if (!ret.empty ()) + { + /* We are only interested in checking one element. */ + probe *p = ret[0]; - if (!p->can_evaluate_arguments ()) - { - /* We cannot use the probe interface here, because it does - not know how to evaluate arguments. */ - ret.clear (); - } - } - bp_objfile_data->longjmp_probes = ret; - bp_objfile_data->longjmp_searched = 1; - } + if (!p->can_evaluate_arguments ()) + { + /* We cannot use the probe interface here, + because it does not know how to evaluate + arguments. */ + ret.clear (); + } + } + bp_objfile_data->longjmp_probes = ret; + bp_objfile_data->longjmp_searched = 1; + } - if (!bp_objfile_data->longjmp_probes.empty ()) - { - for (probe *p : bp_objfile_data->longjmp_probes) - { - struct breakpoint *b; + if (!bp_objfile_data->longjmp_probes.empty ()) + { + for (probe *p : bp_objfile_data->longjmp_probes) + { + struct breakpoint *b; - b = create_internal_breakpoint (gdbarch, - p->get_relocated_address (objfile), - bp_longjmp_master, - &internal_breakpoint_ops); - b->location = new_probe_location ("-probe-stap libc:longjmp"); - b->enable_state = bp_disabled; - } + b = create_internal_breakpoint (gdbarch, + p->get_relocated_address (objfile), + bp_longjmp_master, + &internal_breakpoint_ops); + b->location = new_probe_location ("-probe-stap libc:longjmp"); + b->enable_state = bp_disabled; + } - continue; - } + continue; + } - if (!gdbarch_get_longjmp_target_p (gdbarch)) - continue; + if (!gdbarch_get_longjmp_target_p (gdbarch)) + continue; - for (i = 0; i < NUM_LONGJMP_NAMES; i++) - { - struct breakpoint *b; - const char *func_name; - CORE_ADDR addr; - struct explicit_location explicit_loc; + for (i = 0; i < NUM_LONGJMP_NAMES; i++) + { + struct breakpoint *b; + const char *func_name; + CORE_ADDR addr; + struct explicit_location explicit_loc; - if (msym_not_found_p (bp_objfile_data->longjmp_msym[i].minsym)) - continue; + if (msym_not_found_p (bp_objfile_data->longjmp_msym[i].minsym)) + continue; - func_name = longjmp_names[i]; - if (bp_objfile_data->longjmp_msym[i].minsym == NULL) - { - struct bound_minimal_symbol m; + func_name = longjmp_names[i]; + if (bp_objfile_data->longjmp_msym[i].minsym == NULL) + { + struct bound_minimal_symbol m; - m = lookup_minimal_symbol_text (func_name, objfile); - if (m.minsym == NULL) - { - /* Prevent future lookups in this objfile. */ - bp_objfile_data->longjmp_msym[i].minsym = &msym_not_found; - continue; - } - bp_objfile_data->longjmp_msym[i] = m; - } + m = lookup_minimal_symbol_text (func_name, objfile); + if (m.minsym == NULL) + { + /* Prevent future lookups in this objfile. */ + bp_objfile_data->longjmp_msym[i].minsym = &msym_not_found; + continue; + } + bp_objfile_data->longjmp_msym[i] = m; + } - addr = BMSYMBOL_VALUE_ADDRESS (bp_objfile_data->longjmp_msym[i]); - b = create_internal_breakpoint (gdbarch, addr, bp_longjmp_master, - &internal_breakpoint_ops); - initialize_explicit_location (&explicit_loc); - explicit_loc.function_name = ASTRDUP (func_name); - b->location = new_explicit_location (&explicit_loc); - b->enable_state = bp_disabled; - } - } - } + addr = BMSYMBOL_VALUE_ADDRESS (bp_objfile_data->longjmp_msym[i]); + b = create_internal_breakpoint (gdbarch, addr, bp_longjmp_master, + &internal_breakpoint_ops); + initialize_explicit_location (&explicit_loc); + explicit_loc.function_name = ASTRDUP (func_name); + b->location = new_explicit_location (&explicit_loc); + b->enable_state = bp_disabled; + } + } + } } /* Create a master std::terminate breakpoint. */ static void create_std_terminate_master_breakpoint (void) { - struct program_space *pspace; const char *const func_name = "std::terminate()"; scoped_restore_current_program_space restore_pspace; - ALL_PSPACES (pspace) - { - CORE_ADDR addr; + for (struct program_space *pspace : program_spaces) + { + CORE_ADDR addr; - set_current_program_space (pspace); + set_current_program_space (pspace); - for (objfile *objfile : current_program_space->objfiles ()) - { - struct breakpoint *b; - struct breakpoint_objfile_data *bp_objfile_data; - struct explicit_location explicit_loc; + for (objfile *objfile : current_program_space->objfiles ()) + { + struct breakpoint *b; + struct breakpoint_objfile_data *bp_objfile_data; + struct explicit_location explicit_loc; - bp_objfile_data = get_breakpoint_objfile_data (objfile); + bp_objfile_data = get_breakpoint_objfile_data (objfile); - if (msym_not_found_p (bp_objfile_data->terminate_msym.minsym)) - continue; + if (msym_not_found_p (bp_objfile_data->terminate_msym.minsym)) + continue; - if (bp_objfile_data->terminate_msym.minsym == NULL) - { - struct bound_minimal_symbol m; + if (bp_objfile_data->terminate_msym.minsym == NULL) + { + struct bound_minimal_symbol m; - m = lookup_minimal_symbol (func_name, NULL, objfile); - if (m.minsym == NULL || (MSYMBOL_TYPE (m.minsym) != mst_text - && MSYMBOL_TYPE (m.minsym) != mst_file_text)) - { - /* Prevent future lookups in this objfile. */ - bp_objfile_data->terminate_msym.minsym = &msym_not_found; - continue; - } - bp_objfile_data->terminate_msym = m; - } + m = lookup_minimal_symbol (func_name, NULL, objfile); + if (m.minsym == NULL || (MSYMBOL_TYPE (m.minsym) != mst_text + && MSYMBOL_TYPE (m.minsym) != mst_file_text)) + { + /* Prevent future lookups in this objfile. */ + bp_objfile_data->terminate_msym.minsym = &msym_not_found; + continue; + } + bp_objfile_data->terminate_msym = m; + } - addr = BMSYMBOL_VALUE_ADDRESS (bp_objfile_data->terminate_msym); - b = create_internal_breakpoint (get_objfile_arch (objfile), addr, - bp_std_terminate_master, - &internal_breakpoint_ops); - initialize_explicit_location (&explicit_loc); - explicit_loc.function_name = ASTRDUP (func_name); - b->location = new_explicit_location (&explicit_loc); - b->enable_state = bp_disabled; - } - } + addr = BMSYMBOL_VALUE_ADDRESS (bp_objfile_data->terminate_msym); + b = create_internal_breakpoint (objfile->arch (), addr, + bp_std_terminate_master, + &internal_breakpoint_ops); + initialize_explicit_location (&explicit_loc); + explicit_loc.function_name = ASTRDUP (func_name); + b->location = new_explicit_location (&explicit_loc); + b->enable_state = bp_disabled; + } + } } -/* Install a master breakpoint on the unwinder's debug hook. */ +/* Install a master breakpoint on the unwinder's debug hook for OBJFILE using a + probe. Return true if a breakpoint was installed. */ -static void -create_exception_master_breakpoint (void) +static bool +create_exception_master_breakpoint_probe (objfile *objfile) { - const char *const func_name = "_Unwind_DebugHook"; + struct breakpoint *b; + struct gdbarch *gdbarch; + struct breakpoint_objfile_data *bp_objfile_data; - for (objfile *objfile : current_program_space->objfiles ()) - { - struct breakpoint *b; - struct gdbarch *gdbarch; - struct breakpoint_objfile_data *bp_objfile_data; - CORE_ADDR addr; - struct explicit_location explicit_loc; + bp_objfile_data = get_breakpoint_objfile_data (objfile); - bp_objfile_data = get_breakpoint_objfile_data (objfile); + /* We prefer the SystemTap probe point if it exists. */ + if (!bp_objfile_data->exception_searched) + { + std::vector ret + = find_probes_in_objfile (objfile, "libgcc", "unwind"); - /* We prefer the SystemTap probe point if it exists. */ - if (!bp_objfile_data->exception_searched) + if (!ret.empty ()) { - std::vector ret - = find_probes_in_objfile (objfile, "libgcc", "unwind"); + /* We are only interested in checking one element. */ + probe *p = ret[0]; - if (!ret.empty ()) + if (!p->can_evaluate_arguments ()) { - /* We are only interested in checking one element. */ - probe *p = ret[0]; - - if (!p->can_evaluate_arguments ()) - { - /* We cannot use the probe interface here, because it does - not know how to evaluate arguments. */ - ret.clear (); - } + /* We cannot use the probe interface here, because it does + not know how to evaluate arguments. */ + ret.clear (); } - bp_objfile_data->exception_probes = ret; - bp_objfile_data->exception_searched = 1; } + bp_objfile_data->exception_probes = ret; + bp_objfile_data->exception_searched = 1; + } - if (!bp_objfile_data->exception_probes.empty ()) - { - gdbarch = get_objfile_arch (objfile); + if (bp_objfile_data->exception_probes.empty ()) + return false; - for (probe *p : bp_objfile_data->exception_probes) - { - b = create_internal_breakpoint (gdbarch, - p->get_relocated_address (objfile), - bp_exception_master, - &internal_breakpoint_ops); - b->location = new_probe_location ("-probe-stap libgcc:unwind"); - b->enable_state = bp_disabled; - } + gdbarch = objfile->arch (); - continue; - } + for (probe *p : bp_objfile_data->exception_probes) + { + b = create_internal_breakpoint (gdbarch, + p->get_relocated_address (objfile), + bp_exception_master, + &internal_breakpoint_ops); + b->location = new_probe_location ("-probe-stap libgcc:unwind"); + b->enable_state = bp_disabled; + } - /* Otherwise, try the hook function. */ + return true; +} - if (msym_not_found_p (bp_objfile_data->exception_msym.minsym)) - continue; +/* Install a master breakpoint on the unwinder's debug hook for OBJFILE using + _Unwind_DebugHook. Return true if a breakpoint was installed. */ - gdbarch = get_objfile_arch (objfile); +static bool +create_exception_master_breakpoint_hook (objfile *objfile) +{ + const char *const func_name = "_Unwind_DebugHook"; + struct breakpoint *b; + struct gdbarch *gdbarch; + struct breakpoint_objfile_data *bp_objfile_data; + CORE_ADDR addr; + struct explicit_location explicit_loc; - if (bp_objfile_data->exception_msym.minsym == NULL) - { - struct bound_minimal_symbol debug_hook; + bp_objfile_data = get_breakpoint_objfile_data (objfile); - debug_hook = lookup_minimal_symbol (func_name, NULL, objfile); - if (debug_hook.minsym == NULL) - { - bp_objfile_data->exception_msym.minsym = &msym_not_found; - continue; - } + if (msym_not_found_p (bp_objfile_data->exception_msym.minsym)) + return false; - bp_objfile_data->exception_msym = debug_hook; + gdbarch = objfile->arch (); + + if (bp_objfile_data->exception_msym.minsym == NULL) + { + struct bound_minimal_symbol debug_hook; + + debug_hook = lookup_minimal_symbol (func_name, NULL, objfile); + if (debug_hook.minsym == NULL) + { + bp_objfile_data->exception_msym.minsym = &msym_not_found; + return false; } - addr = BMSYMBOL_VALUE_ADDRESS (bp_objfile_data->exception_msym); - addr = gdbarch_convert_from_func_ptr_addr (gdbarch, addr, - current_top_target ()); - b = create_internal_breakpoint (gdbarch, addr, bp_exception_master, - &internal_breakpoint_ops); - initialize_explicit_location (&explicit_loc); - explicit_loc.function_name = ASTRDUP (func_name); - b->location = new_explicit_location (&explicit_loc); - b->enable_state = bp_disabled; + bp_objfile_data->exception_msym = debug_hook; + } + + addr = BMSYMBOL_VALUE_ADDRESS (bp_objfile_data->exception_msym); + addr = gdbarch_convert_from_func_ptr_addr (gdbarch, addr, + current_top_target ()); + b = create_internal_breakpoint (gdbarch, addr, bp_exception_master, + &internal_breakpoint_ops); + initialize_explicit_location (&explicit_loc); + explicit_loc.function_name = ASTRDUP (func_name); + b->location = new_explicit_location (&explicit_loc); + b->enable_state = bp_disabled; + + return true; +} + +/* Install a master breakpoint on the unwinder's debug hook. */ + +static void +create_exception_master_breakpoint (void) +{ + for (objfile *obj : current_program_space->objfiles ()) + { + /* Skip separate debug object. */ + if (obj->separate_debug_objfile_backlink) + continue; + + /* Try a probe kind breakpoint. */ + if (create_exception_master_breakpoint_probe (obj)) + continue; + + /* Iterate over main and separate debug objects and try an + _Unwind_DebugHook kind breakpoint. */ + for (objfile *debug_objfile : obj->separate_debug_objfiles ()) + if (create_exception_master_breakpoint_hook (debug_objfile)) + break; } } @@ -5452,22 +5474,25 @@ } static void -handle_jit_event (void) +handle_jit_event (CORE_ADDR address) { - struct frame_info *frame; struct gdbarch *gdbarch; - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, "handling bp_jit_event\n"); + infrun_debug_printf ("handling bp_jit_event"); /* Switch terminal for any messages produced by breakpoint_re_set. */ target_terminal::ours_for_output (); - frame = get_current_frame (); - gdbarch = get_frame_arch (frame); - - jit_event_handler (gdbarch); + gdbarch = get_frame_arch (get_current_frame ()); + /* This event is caused by a breakpoint set in `jit_breakpoint_re_set`, + thus it is expected that its objectfile can be found through + minimal symbol lookup. If it doesn't work (and assert fails), it + most likely means that `jit_breakpoint_re_set` was changes and this + function needs to be updated too. */ + bound_minimal_symbol jit_bp_sym = lookup_minimal_symbol_by_pc (address); + gdb_assert (jit_bp_sym.objfile != nullptr); + jit_event_handler (gdbarch, jit_bp_sym.objfile); target_terminal::inferior (); } @@ -5668,7 +5693,7 @@ switch (b->type) { case bp_jit_event: - handle_jit_event (); + handle_jit_event (bs->bp_location_at->address); break; case bp_gnu_ifunc_resolver: gnu_ifunc_resolver_stop (b); @@ -6086,7 +6111,7 @@ there are several. Always display for MI. */ if (allflag || (!gdbarch_has_global_breakpoints (target_gdbarch ()) - && (number_of_program_spaces () > 1 + && (program_spaces.size () > 1 || number_of_inferiors () > 1) /* LOC is for existing B, it cannot be in moribund_locations and thus having NULL OWNER. */ @@ -6811,11 +6836,14 @@ /* Assuming LOC1 and LOC2's types' have meaningful target addresses (bl_address_is_meaningful), returns true if LOC1 and LOC2 represent - the same location. */ + the same location. If SW_HW_BPS_MATCH is true, then software + breakpoint locations and hardware breakpoint locations match, + otherwise they don't. */ static int -breakpoint_locations_match (struct bp_location *loc1, - struct bp_location *loc2) +breakpoint_locations_match (struct bp_location *loc1, + struct bp_location *loc2, + bool sw_hw_bps_match) { int hw_point1, hw_point2; @@ -6833,9 +6861,12 @@ else if (is_tracepoint (loc1->owner) || is_tracepoint (loc2->owner)) return tracepoint_locations_match (loc1, loc2); else - /* We compare bp_location.length in order to cover ranged breakpoints. */ + /* We compare bp_location.length in order to cover ranged + breakpoints. Keep this in sync with + bp_location_is_less_than. */ return (breakpoint_address_match (loc1->pspace->aspace, loc1->address, loc2->pspace->aspace, loc2->address) + && (loc1->loc_type == loc2->loc_type || sw_hw_bps_match) && loc1->length == loc2->length); } @@ -7114,9 +7145,9 @@ get_sal_arch (struct symtab_and_line sal) { if (sal.section) - return get_objfile_arch (sal.section->objfile); + return sal.section->objfile->arch (); if (sal.symtab) - return get_objfile_arch (SYMTAB_OBJFILE (sal.symtab)); + return SYMTAB_OBJFILE (sal.symtab)->arch (); return NULL; } @@ -8513,7 +8544,62 @@ } -static int bp_loc_is_permanent (struct bp_location *loc); +static bool bp_loc_is_permanent (struct bp_location *loc); + +/* Handle "set breakpoint auto-hw on". + + If the explicitly specified breakpoint type is not hardware + breakpoint, check the memory map to see whether the breakpoint + address is in read-only memory. + + - location type is not hardware breakpoint, memory is read-only. + We change the type of the location to hardware breakpoint. + + - location type is hardware breakpoint, memory is read-write. This + means we've previously made the location hardware one, but then the + memory map changed, so we undo. +*/ + +static void +handle_automatic_hardware_breakpoints (bp_location *bl) +{ + if (automatic_hardware_breakpoints + && bl->owner->type != bp_hardware_breakpoint + && (bl->loc_type == bp_loc_software_breakpoint + || bl->loc_type == bp_loc_hardware_breakpoint)) + { + /* When breakpoints are removed, remove_breakpoints will use + location types we've just set here, the only possible problem + is that memory map has changed during running program, but + it's not going to work anyway with current gdb. */ + mem_region *mr = lookup_mem_region (bl->address); + + if (mr != nullptr) + { + enum bp_loc_type new_type; + + if (mr->attrib.mode != MEM_RW) + new_type = bp_loc_hardware_breakpoint; + else + new_type = bp_loc_software_breakpoint; + + if (new_type != bl->loc_type) + { + static bool said = false; + + bl->loc_type = new_type; + if (!said) + { + fprintf_filtered (gdb_stdout, + _("Note: automatically using " + "hardware breakpoints for " + "read-only addresses.\n")); + said = true; + } + } + } + } +} static struct bp_location * add_location_to_breakpoint (struct breakpoint *b, @@ -8579,42 +8665,10 @@ } -/* See breakpoint.h. */ - -int -program_breakpoint_here_p (struct gdbarch *gdbarch, CORE_ADDR address) -{ - int len; - CORE_ADDR addr; - const gdb_byte *bpoint; - gdb_byte *target_mem; - - addr = address; - bpoint = gdbarch_breakpoint_from_pc (gdbarch, &addr, &len); - - /* Software breakpoints unsupported? */ - if (bpoint == NULL) - return 0; +/* Return true if LOC is pointing to a permanent breakpoint, + return false otherwise. */ - target_mem = (gdb_byte *) alloca (len); - - /* Enable the automatic memory restoration from breakpoints while - we read the memory. Otherwise we could say about our temporary - breakpoints they are permanent. */ - scoped_restore restore_memory - = make_scoped_restore_show_memory_breakpoints (0); - - if (target_read_memory (address, target_mem, len) == 0 - && memcmp (target_mem, bpoint, len) == 0) - return 1; - - return 0; -} - -/* Return 1 if LOC is pointing to a permanent breakpoint, - return 0 otherwise. */ - -static int +static bool bp_loc_is_permanent (struct bp_location *loc) { gdb_assert (loc != NULL); @@ -8622,14 +8676,14 @@ /* If we have a non-breakpoint-backed catchpoint or a software watchpoint, just return 0. We should not attempt to read from the addresses the locations of these breakpoint types point to. - program_breakpoint_here_p, below, will attempt to read + gdbarch_program_breakpoint_here_p, below, will attempt to read memory. */ if (!bl_address_is_meaningful (loc)) - return 0; + return false; scoped_restore_current_pspace_and_thread restore_pspace_thread; switch_to_program_space_and_thread (loc->pspace); - return program_breakpoint_here_p (loc->gdbarch, loc->address); + return gdbarch_program_breakpoint_here_p (loc->gdbarch, loc->address); } /* Build a command list for the dprintf corresponding to the current @@ -8940,7 +8994,7 @@ the caller's responsibility to free them. */ static void -parse_breakpoint_sals (const struct event_location *location, +parse_breakpoint_sals (struct event_location *location, struct linespec_result *canonical) { struct symtab_and_line cursal; @@ -9205,7 +9259,7 @@ int create_breakpoint (struct gdbarch *gdbarch, - const struct event_location *location, + struct event_location *location, const char *cond_string, int thread, const char *extra_string, int parse_extra, @@ -10430,7 +10484,6 @@ print_recreate_masked_watchpoint (struct breakpoint *b, struct ui_file *fp) { struct watchpoint *w = (struct watchpoint *) b; - char tmp[40]; switch (b->type) { @@ -10448,8 +10501,8 @@ _("Invalid hardware watchpoint type.")); } - sprintf_vma (tmp, w->hw_wp_mask); - fprintf_unfiltered (fp, " %s mask 0x%s", w->exp_string, tmp); + fprintf_unfiltered (fp, " %s mask 0x%s", w->exp_string, + phex (w->hw_wp_mask, sizeof (CORE_ADDR))); print_recreate_thread (b, fp); } @@ -10728,7 +10781,7 @@ CORE_ADDR addr = value_as_address (val.get ()); w->exp_string_reparse - = current_language->la_watch_location_expression (t, addr).release (); + = current_language->watch_location_expression (t, addr).release (); w->exp_string = xstrprintf ("-location %.*s", (int) (exp_end - exp_start), exp_start); @@ -10839,8 +10892,8 @@ explicitly, never if they just happen to appear in a middle of some value chain. */ if (v == head - || (TYPE_CODE (vtype) != TYPE_CODE_STRUCT - && TYPE_CODE (vtype) != TYPE_CODE_ARRAY)) + || (vtype->code () != TYPE_CODE_STRUCT + && vtype->code () != TYPE_CODE_ARRAY)) { CORE_ADDR vaddr = value_address (v); int len; @@ -10932,20 +10985,15 @@ /* The thread that was current when the command was executed. */ int thread; - /* The breakpoint set at the destination location. */ - breakpoint_up location_breakpoint; - - /* Breakpoint set at the return address in the caller frame. May be - NULL. */ - breakpoint_up caller_breakpoint; + /* The breakpoint set at the return address in the caller frame, + plus breakpoints at all the destination locations. */ + std::vector breakpoints; until_break_fsm (struct interp *cmd_interp, int thread, - breakpoint_up &&location_breakpoint, - breakpoint_up &&caller_breakpoint) + std::vector &&breakpoints) : thread_fsm (cmd_interp), thread (thread), - location_breakpoint (std::move (location_breakpoint)), - caller_breakpoint (std::move (caller_breakpoint)) + breakpoints (std::move (breakpoints)) { } @@ -10960,12 +11008,13 @@ bool until_break_fsm::should_stop (struct thread_info *tp) { - if (bpstat_find_breakpoint (tp->control.stop_bpstat, - location_breakpoint.get ()) != NULL - || (caller_breakpoint != NULL - && bpstat_find_breakpoint (tp->control.stop_bpstat, - caller_breakpoint.get ()) != NULL)) - set_finished (); + for (const breakpoint_up &bp : breakpoints) + if (bpstat_find_breakpoint (tp->control.stop_bpstat, + bp.get ()) != NULL) + { + set_finished (); + break; + } return true; } @@ -10977,8 +11026,7 @@ until_break_fsm::clean_up (struct thread_info *) { /* Clean up our temporary breakpoints. */ - location_breakpoint.reset (); - caller_breakpoint.reset (); + breakpoints.clear (); delete_longjmp_breakpoint (thread); } @@ -11016,16 +11064,12 @@ : decode_line_1 (location.get (), DECODE_LINE_FUNFIRSTLINE, NULL, NULL, 0)); - if (sals.size () != 1) + if (sals.empty ()) error (_("Couldn't get information on specified line.")); - symtab_and_line &sal = sals[0]; - if (*arg) error (_("Junk at end of arguments.")); - resolve_sal_pc (&sal); - tp = inferior_thread (); thread = tp->global_num; @@ -11042,7 +11086,7 @@ /* Keep within the current frame, or in frames called by the current one. */ - breakpoint_up caller_breakpoint; + std::vector breakpoints; gdb::optional lj_deleter; @@ -11054,10 +11098,11 @@ sal2 = find_pc_line (frame_unwind_caller_pc (frame), 0); sal2.pc = frame_unwind_caller_pc (frame); caller_gdbarch = frame_unwind_caller_arch (frame); - caller_breakpoint = set_momentary_breakpoint (caller_gdbarch, - sal2, - caller_frame_id, - bp_until); + + breakpoint_up caller_breakpoint + = set_momentary_breakpoint (caller_gdbarch, sal2, + caller_frame_id, bp_until); + breakpoints.emplace_back (std::move (caller_breakpoint)); set_longjmp_breakpoint (tp, caller_frame_id); lj_deleter.emplace (thread); @@ -11066,21 +11111,24 @@ /* set_momentary_breakpoint could invalidate FRAME. */ frame = NULL; - breakpoint_up location_breakpoint; - if (anywhere) - /* If the user told us to continue until a specified location, - we don't specify a frame at which we need to stop. */ - location_breakpoint = set_momentary_breakpoint (frame_gdbarch, sal, - null_frame_id, bp_until); - else - /* Otherwise, specify the selected frame, because we want to stop - only at the very same frame. */ - location_breakpoint = set_momentary_breakpoint (frame_gdbarch, sal, - stack_frame_id, bp_until); + /* If the user told us to continue until a specified location, we + don't specify a frame at which we need to stop. Otherwise, + specify the selected frame, because we want to stop only at the + very same frame. */ + frame_id stop_frame_id = anywhere ? null_frame_id : stack_frame_id; + + for (symtab_and_line &sal : sals) + { + resolve_sal_pc (&sal); + + breakpoint_up location_breakpoint + = set_momentary_breakpoint (frame_gdbarch, sal, + stop_frame_id, bp_until); + breakpoints.emplace_back (std::move (location_breakpoint)); + } tp->thread_fsm = new until_break_fsm (command_interp (), tp->global_num, - std::move (location_breakpoint), - std::move (caller_breakpoint)); + std::move (breakpoints)); if (lj_deleter) lj_deleter->release (); @@ -11245,19 +11293,8 @@ b->language = language_ada; } -static void -catch_command (const char *arg, int from_tty) -{ - error (_("Catch requires an event name.")); -} -static void -tcatch_command (const char *arg, int from_tty) -{ - error (_("Catch requires an event name.")); -} - /* Compare two breakpoints and return a strcmp-like result. */ static int @@ -11482,6 +11519,18 @@ if (a->permanent != b->permanent) return a->permanent > b->permanent; + /* Sort by type in order to make duplicate determination easier. + See update_global_location_list. This is kept in sync with + breakpoint_locations_match. */ + if (a->loc_type < b->loc_type) + return true; + + /* Likewise, for range-breakpoints, sort by length. */ + if (a->loc_type == bp_loc_hardware_breakpoint + && b->loc_type == bp_loc_hardware_breakpoint + && a->length < b->length) + return true; + /* Make the internal GDB representation stable across GDB runs where A and B memory inside GDB can differ. Breakpoint locations of the same type at the same address can be sorted in arbitrary order. */ @@ -11656,6 +11705,7 @@ loc->cond_bytecode.reset (); } } + /* Called whether new breakpoints are created, or existing breakpoints deleted, to update the global location list and recompute which locations are duplicate of which. @@ -11704,6 +11754,20 @@ ALL_BREAKPOINTS (b) for (loc = b->loc; loc; loc = loc->next) *locp++ = loc; + + /* See if we need to "upgrade" a software breakpoint to a hardware + breakpoint. Do this before deciding whether locations are + duplicates. Also do this before sorting because sorting order + depends on location type. */ + for (locp = bp_locations; + locp < bp_locations + bp_locations_count; + locp++) + { + loc = *locp; + if (!loc->inserted && should_be_inserted (loc)) + handle_automatic_hardware_breakpoints (loc); + } + std::sort (bp_locations, bp_locations + bp_locations_count, bp_location_is_less_than); @@ -11807,6 +11871,9 @@ { struct bp_location *loc2 = *loc2p; + if (loc2 == old_loc) + continue; + if (breakpoint_locations_match (loc2, old_loc)) { /* Read watchpoint locations are switched to @@ -11821,8 +11888,7 @@ /* loc2 is a duplicated location. We need to check if it should be inserted in case it will be unduplicated. */ - if (loc2 != old_loc - && unduplicated_should_be_inserted (loc2)) + if (unduplicated_should_be_inserted (loc2)) { swap_insertion (old_loc, loc2); keep_in_target = 1; @@ -11903,7 +11969,18 @@ around. We simply always ignore hardware watchpoint traps we can no longer explain. */ - old_loc->events_till_retirement = 3 * (thread_count () + 1); + process_stratum_target *proc_target = nullptr; + for (inferior *inf : all_inferiors ()) + if (inf->pspace == old_loc->pspace) + { + proc_target = inf->process_target (); + break; + } + if (proc_target != nullptr) + old_loc->events_till_retirement + = 3 * (thread_count (proc_target) + 1); + else + old_loc->events_till_retirement = 1; old_loc->owner = NULL; moribund_locations.push_back (old_loc); @@ -12235,7 +12312,7 @@ static void base_breakpoint_create_sals_from_location - (const struct event_location *location, + (struct event_location *location, struct linespec_result *canonical, enum bptype type_wanted) { @@ -12260,7 +12337,7 @@ static std::vector base_breakpoint_decode_location (struct breakpoint *b, - const struct event_location *location, + struct event_location *location, struct program_space *search_pspace) { internal_error_pure_virtual_called (); @@ -12483,7 +12560,7 @@ } static void -bkpt_create_sals_from_location (const struct event_location *location, +bkpt_create_sals_from_location (struct event_location *location, struct linespec_result *canonical, enum bptype type_wanted) { @@ -12514,7 +12591,7 @@ static std::vector bkpt_decode_location (struct breakpoint *b, - const struct event_location *location, + struct event_location *location, struct program_space *search_pspace) { return decode_location_default (b, location, search_pspace); @@ -12687,7 +12764,7 @@ } static void -bkpt_probe_create_sals_from_location (const struct event_location *location, +bkpt_probe_create_sals_from_location (struct event_location *location, struct linespec_result *canonical, enum bptype type_wanted) { @@ -12701,7 +12778,7 @@ static std::vector bkpt_probe_decode_location (struct breakpoint *b, - const struct event_location *location, + struct event_location *location, struct program_space *search_pspace) { std::vector sals = parse_probes (location, search_pspace, NULL); @@ -12795,7 +12872,7 @@ } static void -tracepoint_create_sals_from_location (const struct event_location *location, +tracepoint_create_sals_from_location (struct event_location *location, struct linespec_result *canonical, enum bptype type_wanted) { @@ -12826,7 +12903,7 @@ static std::vector tracepoint_decode_location (struct breakpoint *b, - const struct event_location *location, + struct event_location *location, struct program_space *search_pspace) { return decode_location_default (b, location, search_pspace); @@ -12838,7 +12915,7 @@ static void tracepoint_probe_create_sals_from_location - (const struct event_location *location, + (struct event_location *location, struct linespec_result *canonical, enum bptype type_wanted) { @@ -12848,7 +12925,7 @@ static std::vector tracepoint_probe_decode_location (struct breakpoint *b, - const struct event_location *location, + struct event_location *location, struct program_space *search_pspace) { /* We use the same method for breakpoint on probes. */ @@ -12929,7 +13006,7 @@ markers (`-m'). */ static void -strace_marker_create_sals_from_location (const struct event_location *location, +strace_marker_create_sals_from_location (struct event_location *location, struct linespec_result *canonical, enum bptype type_wanted) { @@ -12999,7 +13076,7 @@ static std::vector strace_marker_decode_location (struct breakpoint *b, - const struct event_location *location, + struct event_location *location, struct program_space *search_pspace) { struct tracepoint *tp = (struct tracepoint *) b; @@ -13528,11 +13605,20 @@ if (have_ambiguous_names) { for (; l; l = l->next) - if (breakpoint_locations_match (e, l)) - { - l->enabled = 0; - break; - } + { + /* Ignore software vs hardware location type at + this point, because with "set breakpoint + auto-hw", after a re-set, locations that were + hardware can end up as software, or vice versa. + As mentioned above, this is an heuristic and in + practice should give the correct answer often + enough. */ + if (breakpoint_locations_match (e, l, true)) + { + l->enabled = 0; + break; + } + } } else { @@ -13673,7 +13759,7 @@ calls parse_breakpoint_sals. Return 1 for success, zero for failure. */ static void -create_sals_from_location_default (const struct event_location *location, +create_sals_from_location_default (struct event_location *location, struct linespec_result *canonical, enum bptype type_wanted) { @@ -13710,7 +13796,7 @@ static std::vector decode_location_default (struct breakpoint *b, - const struct event_location *location, + struct event_location *location, struct program_space *search_pspace) { struct linespec_result canonical; @@ -14355,16 +14441,6 @@ }); } -static void -set_breakpoint_cmd (const char *args, int from_tty) -{ -} - -static void -show_breakpoint_cmd (const char *args, int from_tty) -{ -} - /* Invalidate last known value of any hardware watchpoint if the memory which that value represents has been written to by GDB itself. */ @@ -15138,14 +15214,6 @@ set_cmd_completer (command, completer); } -static void -save_command (const char *arg, int from_tty) -{ - printf_unfiltered (_("\"save\" must be followed by " - "the name of a save subcommand.\n")); - help_list (save_cmdlist, "save ", all_commands, gdb_stdout); -} - struct breakpoint * iterate_over_breakpoints (gdb::function_view callback) { @@ -15396,8 +15464,9 @@ cmd_list_element *commands_cmd_element = nullptr; +void _initialize_breakpoint (); void -_initialize_breakpoint (void) +_initialize_breakpoint () { struct cmd_list_element *c; @@ -15528,7 +15597,7 @@ add_com_alias ("dis", "disable", class_breakpoint, 1); add_com_alias ("disa", "disable", class_breakpoint, 1); - add_cmd ("breakpoints", class_alias, disable_command, _("\ + add_cmd ("breakpoints", class_breakpoint, disable_command, _("\ Disable all or some breakpoints.\n\ Usage: disable breakpoints [BREAKPOINTNUM]...\n\ Arguments are breakpoint numbers with spaces in between.\n\ @@ -15548,7 +15617,7 @@ add_com_alias ("d", "delete", class_breakpoint, 1); add_com_alias ("del", "delete", class_breakpoint, 1); - add_cmd ("breakpoints", class_alias, delete_command, _("\ + add_cmd ("breakpoints", class_breakpoint, delete_command, _("\ Delete all or some breakpoints or auto-display expressions.\n\ Usage: delete breakpoints [BREAKPOINTNUM]...\n\ Arguments are breakpoint numbers with spaces in between.\n\ @@ -15641,15 +15710,15 @@ breakpoint set."), &maintenanceinfolist); - add_prefix_cmd ("catch", class_breakpoint, catch_command, _("\ + add_basic_prefix_cmd ("catch", class_breakpoint, _("\ Set catchpoints to catch events."), - &catch_cmdlist, "catch ", - 0/*allow-unknown*/, &cmdlist); + &catch_cmdlist, "catch ", + 0/*allow-unknown*/, &cmdlist); - add_prefix_cmd ("tcatch", class_breakpoint, tcatch_command, _("\ + add_basic_prefix_cmd ("tcatch", class_breakpoint, _("\ Set temporary catchpoints to catch events."), - &tcatch_cmdlist, "tcatch ", - 0/*allow-unknown*/, &cmdlist); + &tcatch_cmdlist, "tcatch ", + 0/*allow-unknown*/, &cmdlist); add_catch_command ("fork", _("Catch calls to fork."), catch_fork_command_1, @@ -15736,10 +15805,10 @@ Do \"help tracepoints\" for info on other tracepoint commands.")); set_cmd_completer (c, location_completer); - add_com_alias ("tp", "trace", class_alias, 0); - add_com_alias ("tr", "trace", class_alias, 1); - add_com_alias ("tra", "trace", class_alias, 1); - add_com_alias ("trac", "trace", class_alias, 1); + add_com_alias ("tp", "trace", class_breakpoint, 0); + add_com_alias ("tr", "trace", class_breakpoint, 1); + add_com_alias ("tra", "trace", class_breakpoint, 1); + add_com_alias ("trac", "trace", class_breakpoint, 1); c = add_com ("ftrace", class_breakpoint, ftrace_command, _("\ Set a fast tracepoint at specified location.\n\ @@ -15804,10 +15873,10 @@ Usage: passcount COUNT TPNUM, where TPNUM may also be \"all\";\n\ if TPNUM is omitted, passcount refers to the last tracepoint defined.")); - add_prefix_cmd ("save", class_breakpoint, save_command, - _("Save breakpoint definitions as a script."), - &save_cmdlist, "save ", - 0/*allow-unknown*/, &cmdlist); + add_basic_prefix_cmd ("save", class_breakpoint, + _("Save breakpoint definitions as a script."), + &save_cmdlist, "save ", + 0/*allow-unknown*/, &cmdlist); c = add_cmd ("breakpoints", class_breakpoint, save_breakpoints_command, _("\ Save current breakpoint definitions as a script.\n\ @@ -15826,18 +15895,18 @@ c = add_com_alias ("save-tracepoints", "save tracepoints", class_trace, 0); deprecate_cmd (c, "save tracepoints"); - add_prefix_cmd ("breakpoint", class_maintenance, set_breakpoint_cmd, _("\ + add_basic_prefix_cmd ("breakpoint", class_maintenance, _("\ Breakpoint specific settings.\n\ Configure various breakpoint-specific variables such as\n\ pending breakpoint behavior."), - &breakpoint_set_cmdlist, "set breakpoint ", - 0/*allow-unknown*/, &setlist); - add_prefix_cmd ("breakpoint", class_maintenance, show_breakpoint_cmd, _("\ + &breakpoint_set_cmdlist, "set breakpoint ", + 0/*allow-unknown*/, &setlist); + add_show_prefix_cmd ("breakpoint", class_maintenance, _("\ Breakpoint specific settings.\n\ Configure various breakpoint-specific variables such as\n\ pending breakpoint behavior."), - &breakpoint_show_cmdlist, "show breakpoint ", - 0/*allow-unknown*/, &showlist); + &breakpoint_show_cmdlist, "show breakpoint ", + 0/*allow-unknown*/, &showlist); add_setshow_auto_boolean_cmd ("pending", no_class, &pending_break_support, _("\ @@ -15891,7 +15960,7 @@ supports such feature) and conditions will be evaluated on the target's side.\n\ If this is set to \"auto\" (default), this will be automatically set to\n\ \"target\" if it supports condition evaluation, otherwise it will\n\ -be set to \"gdb\""), +be set to \"host\"."), &set_condition_evaluation_mode, &show_condition_evaluation_mode, &breakpoint_set_cmdlist, diff -Nru gdb-9.1/gdb/breakpoint.h gdb-10.2/gdb/breakpoint.h --- gdb-9.1/gdb/breakpoint.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/breakpoint.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Data structures associated with breakpoints in GDB. - Copyright (C) 1992-2020 Free Software Foundation, Inc. + Copyright (C) 1992-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -609,7 +609,7 @@ `create_sals_from_location_default'. This function is called inside `create_breakpoint'. */ - void (*create_sals_from_location) (const struct event_location *location, + void (*create_sals_from_location) (struct event_location *location, struct linespec_result *canonical, enum bptype type_wanted); @@ -636,7 +636,7 @@ This function is called inside `location_to_sals'. */ std::vector (*decode_location) (struct breakpoint *b, - const struct event_location *location, + struct event_location *location, struct program_space *search_pspace); /* Return true if this breakpoint explains a signal. See @@ -1194,11 +1194,6 @@ /* Prototypes for breakpoint-related functions. */ -/* Return 1 if there's a program/permanent breakpoint planted in - memory at ADDRESS, return 0 otherwise. */ - -extern int program_breakpoint_here_p (struct gdbarch *gdbarch, CORE_ADDR address); - extern enum breakpoint_here breakpoint_here_p (const address_space *, CORE_ADDR); @@ -1391,7 +1386,7 @@ Returns true if any breakpoint was created; false otherwise. */ extern int create_breakpoint (struct gdbarch *gdbarch, - const struct event_location *location, + struct event_location *location, const char *cond_string, int thread, const char *extra_string, int parse_extra, diff -Nru gdb-9.1/gdb/bsd-kvm.c gdb-10.2/gdb/bsd-kvm.c --- gdb-9.1/gdb/bsd-kvm.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/bsd-kvm.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* BSD Kernel Data Access Library (libkvm) interface. - Copyright (C) 2004-2020 Free Software Foundation, Inc. + Copyright (C) 2004-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -29,6 +29,7 @@ #include "gdbcore.h" #include "inferior.h" /* for get_exec_file */ #include "gdbthread.h" +#include "gdbsupport/pathstuff.h" #include #include @@ -106,7 +107,7 @@ bsd_kvm_target_open (const char *arg, int from_tty) { char errbuf[_POSIX2_LINE_MAX]; - char *execfile = NULL; + const char *execfile = NULL; kvm_t *temp_kd; char *filename = NULL; @@ -114,14 +115,13 @@ if (arg) { - char *temp; - filename = tilde_expand (arg); if (filename[0] != '/') { - temp = concat (current_directory, "/", filename, (char *)NULL); + gdb::unique_xmalloc_ptr temp (gdb_abspath (filename)); + xfree (filename); - filename = temp; + filename = temp.release (); } } @@ -136,8 +136,8 @@ core_kd = temp_kd; push_target (&bsd_kvm_ops); - add_thread_silent (bsd_kvm_ptid); - inferior_ptid = bsd_kvm_ptid; + thread_info *thr = add_thread_silent (&bsd_kvm_ops, bsd_kvm_ptid); + switch_to_thread (thr); target_fetch_registers (get_current_regcache (), -1); @@ -155,8 +155,8 @@ core_kd = NULL; } - inferior_ptid = null_ptid; - discard_all_inferiors (); + switch_to_no_thread (); + exit_inferior_silent (current_inferior ()); } static LONGEST diff -Nru gdb-9.1/gdb/bsd-kvm.h gdb-10.2/gdb/bsd-kvm.h --- gdb-9.1/gdb/bsd-kvm.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/bsd-kvm.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* BSD Kernel Data Access Library (libkvm) interface. - Copyright (C) 2004-2020 Free Software Foundation, Inc. + Copyright (C) 2004-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/bsd-uthread.c gdb-10.2/gdb/bsd-uthread.c --- gdb-9.1/gdb/bsd-uthread.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/bsd-uthread.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* BSD user-level threads support. - Copyright (C) 2005-2020 Free Software Foundation, Inc. + Copyright (C) 2005-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -381,9 +381,11 @@ { enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch ()); CORE_ADDR addr; + process_stratum_target *beneath + = as_process_stratum_target (this->beneath ()); /* Pass the request to the layer beneath. */ - ptid = beneath ()->wait (ptid, status, options); + ptid = beneath->wait (ptid, status, options); /* If the process is no longer alive, there's no point in figuring out the thread ID. It will fail anyway. */ @@ -414,13 +416,13 @@ ptid with tid set, then ptid is still the initial thread of the process. Notify GDB core about it. */ if (inferior_ptid.tid () == 0 - && ptid.tid () != 0 && !in_thread_list (ptid)) - thread_change_ptid (inferior_ptid, ptid); + && ptid.tid () != 0 && !in_thread_list (beneath, ptid)) + thread_change_ptid (beneath, inferior_ptid, ptid); /* Don't let the core see a ptid without a corresponding thread. */ - thread_info *thread = find_thread_ptid (ptid); + thread_info *thread = find_thread_ptid (beneath, ptid); if (thread == NULL || thread->state == THREAD_EXITED) - add_thread (ptid); + add_thread (beneath, ptid); return ptid; } @@ -467,16 +469,18 @@ { ptid_t ptid = ptid_t (pid, 0, addr); - thread_info *thread = find_thread_ptid (ptid); + process_stratum_target *proc_target + = as_process_stratum_target (this->beneath ()); + thread_info *thread = find_thread_ptid (proc_target, ptid); if (thread == nullptr || thread->state == THREAD_EXITED) { /* If INFERIOR_PTID doesn't have a tid member yet, then ptid is still the initial thread of the process. Notify GDB core about it. */ if (inferior_ptid.tid () == 0) - thread_change_ptid (inferior_ptid, ptid); + thread_change_ptid (proc_target, inferior_ptid, ptid); else - add_thread (ptid); + add_thread (proc_target, ptid); } addr = bsd_uthread_read_memory_address (addr + offset); @@ -540,8 +544,9 @@ return normal_pid_to_str (ptid); } +void _initialize_bsd_uthread (); void -_initialize_bsd_uthread (void) +_initialize_bsd_uthread () { bsd_uthread_data = gdbarch_data_register_pre_init (bsd_uthread_init); diff -Nru gdb-9.1/gdb/bsd-uthread.h gdb-10.2/gdb/bsd-uthread.h --- gdb-9.1/gdb/bsd-uthread.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/bsd-uthread.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* BSD user-level threads support. - Copyright (C) 2005-2020 Free Software Foundation, Inc. + Copyright (C) 2005-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/btrace.c gdb-10.2/gdb/btrace.c --- gdb-9.1/gdb/btrace.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/btrace.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Branch trace support for GDB, the GNU debugger. - Copyright (C) 2013-2020 Free Software Foundation, Inc. + Copyright (C) 2013-2021 Free Software Foundation, Inc. Contributed by Intel Corp. @@ -1533,7 +1533,7 @@ return; } - internal_error (__FILE__, __LINE__, _("Unkown branch trace format.")); + internal_error (__FILE__, __LINE__, _("Unknown branch trace format.")); } static void @@ -1592,7 +1592,8 @@ btrace_enable (struct thread_info *tp, const struct btrace_config *conf) { if (tp->btrace.target != NULL) - return; + error (_("Recording already enabled on thread %s (%s)."), + print_thread_id (tp), target_pid_to_str (tp->ptid).c_str ()); #if !defined (HAVE_LIBIPT) if (conf->format == BTRACE_FORMAT_PT) @@ -1604,9 +1605,9 @@ tp->btrace.target = target_enable_btrace (tp->ptid, conf); - /* We're done if we failed to enable tracing. */ if (tp->btrace.target == NULL) - return; + error (_("Failed to enable recording on thread %s (%s)."), + print_thread_id (tp), target_pid_to_str (tp->ptid).c_str ()); /* We need to undo the enable in case of errors. */ try @@ -1651,7 +1652,8 @@ struct btrace_thread_info *btp = &tp->btrace; if (btp->target == NULL) - return; + error (_("Recording not enabled on thread %s (%s)."), + print_thread_id (tp), target_pid_to_str (tp->ptid).c_str ()); DEBUG ("disable thread %s (%s)", print_thread_id (tp), target_pid_to_str (tp->ptid).c_str ()); @@ -1791,7 +1793,7 @@ return -1; } - internal_error (__FILE__, __LINE__, _("Unkown branch trace format.")); + internal_error (__FILE__, __LINE__, _("Unknown branch trace format.")); } /* Clear the branch trace histories in BTINFO. */ @@ -1908,11 +1910,12 @@ if (btinfo->replay != NULL) return; - /* With CLI usage, TP->PTID always equals INFERIOR_PTID here. Now that we - can store a gdb.Record object in Python referring to a different thread - than the current one, temporarily set INFERIOR_PTID. */ - scoped_restore save_inferior_ptid = make_scoped_restore (&inferior_ptid); - inferior_ptid = tp->ptid; + /* With CLI usage, TP is always the current thread when we get here. + However, since we can also store a gdb.Record object in Python + referring to a different thread than the current one, we need to + temporarily set the current thread. */ + scoped_restore_current_thread restore_thread; + switch_to_thread (tp); /* We should not be called on running or exited threads. */ gdb_assert (can_access_registers_thread (tp)); @@ -3228,7 +3231,7 @@ struct btrace_thread_info *btinfo; unsigned int size, begin, end, from, to; - thread_info *tp = find_thread_ptid (inferior_ptid); + thread_info *tp = find_thread_ptid (current_inferior (), inferior_ptid); if (tp == NULL) error (_("No thread.")); @@ -3358,51 +3361,6 @@ btrace_clear (tp); } -/* The "maintenance btrace" command. */ - -static void -maint_btrace_cmd (const char *args, int from_tty) -{ - help_list (maint_btrace_cmdlist, "maintenance btrace ", all_commands, - gdb_stdout); -} - -/* The "maintenance set btrace" command. */ - -static void -maint_btrace_set_cmd (const char *args, int from_tty) -{ - help_list (maint_btrace_set_cmdlist, "maintenance set btrace ", all_commands, - gdb_stdout); -} - -/* The "maintenance show btrace" command. */ - -static void -maint_btrace_show_cmd (const char *args, int from_tty) -{ - help_list (maint_btrace_show_cmdlist, "maintenance show btrace ", - all_commands, gdb_stdout); -} - -/* The "maintenance set btrace pt" command. */ - -static void -maint_btrace_pt_set_cmd (const char *args, int from_tty) -{ - help_list (maint_btrace_pt_set_cmdlist, "maintenance set btrace pt ", - all_commands, gdb_stdout); -} - -/* The "maintenance show btrace pt" command. */ - -static void -maint_btrace_pt_show_cmd (const char *args, int from_tty) -{ - help_list (maint_btrace_pt_show_cmdlist, "maintenance show btrace pt ", - all_commands, gdb_stdout); -} - /* The "maintenance info btrace" command. */ static void @@ -3471,36 +3429,39 @@ /* Initialize btrace maintenance commands. */ +void _initialize_btrace (); void -_initialize_btrace (void) +_initialize_btrace () { add_cmd ("btrace", class_maintenance, maint_info_btrace_cmd, _("Info about branch tracing data."), &maintenanceinfolist); - add_prefix_cmd ("btrace", class_maintenance, maint_btrace_cmd, - _("Branch tracing maintenance commands."), - &maint_btrace_cmdlist, "maintenance btrace ", - 0, &maintenancelist); + add_basic_prefix_cmd ("btrace", class_maintenance, + _("Branch tracing maintenance commands."), + &maint_btrace_cmdlist, "maintenance btrace ", + 0, &maintenancelist); - add_prefix_cmd ("btrace", class_maintenance, maint_btrace_set_cmd, _("\ + add_basic_prefix_cmd ("btrace", class_maintenance, _("\ Set branch tracing specific variables."), - &maint_btrace_set_cmdlist, "maintenance set btrace ", - 0, &maintenance_set_cmdlist); + &maint_btrace_set_cmdlist, "maintenance set btrace ", + 0, &maintenance_set_cmdlist); - add_prefix_cmd ("pt", class_maintenance, maint_btrace_pt_set_cmd, _("\ + add_basic_prefix_cmd ("pt", class_maintenance, _("\ Set Intel Processor Trace specific variables."), - &maint_btrace_pt_set_cmdlist, "maintenance set btrace pt ", - 0, &maint_btrace_set_cmdlist); + &maint_btrace_pt_set_cmdlist, + "maintenance set btrace pt ", + 0, &maint_btrace_set_cmdlist); - add_prefix_cmd ("btrace", class_maintenance, maint_btrace_show_cmd, _("\ + add_show_prefix_cmd ("btrace", class_maintenance, _("\ Show branch tracing specific variables."), - &maint_btrace_show_cmdlist, "maintenance show btrace ", - 0, &maintenance_show_cmdlist); + &maint_btrace_show_cmdlist, "maintenance show btrace ", + 0, &maintenance_show_cmdlist); - add_prefix_cmd ("pt", class_maintenance, maint_btrace_pt_show_cmd, _("\ + add_show_prefix_cmd ("pt", class_maintenance, _("\ Show Intel Processor Trace specific variables."), - &maint_btrace_pt_show_cmdlist, "maintenance show btrace pt ", - 0, &maint_btrace_show_cmdlist); + &maint_btrace_pt_show_cmdlist, + "maintenance show btrace pt ", + 0, &maint_btrace_show_cmdlist); add_setshow_boolean_cmd ("skip-pad", class_maintenance, &maint_btrace_pt_skip_pad, _("\ diff -Nru gdb-9.1/gdb/btrace.h gdb-10.2/gdb/btrace.h --- gdb-9.1/gdb/btrace.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/btrace.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Branch trace support for GDB, the GNU debugger. - Copyright (C) 2013-2020 Free Software Foundation, Inc. + Copyright (C) 2013-2021 Free Software Foundation, Inc. Contributed by Intel Corp. . diff -Nru gdb-9.1/gdb/build-id.c gdb-10.2/gdb/build-id.c --- gdb-9.1/gdb/build-id.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/build-id.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* build-id-related functions. - Copyright (C) 1991-2020 Free Software Foundation, Inc. + Copyright (C) 1991-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -94,7 +94,7 @@ } /* We expect to be silent on the non-existing files. */ - gdb_bfd_ref_ptr debug_bfd = gdb_bfd_open (filename.get (), gnutarget, -1); + gdb_bfd_ref_ptr debug_bfd = gdb_bfd_open (filename.get (), gnutarget); if (debug_bfd == NULL) { diff -Nru gdb-9.1/gdb/build-id.h gdb-10.2/gdb/build-id.h --- gdb-9.1/gdb/build-id.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/build-id.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* build-id-related functions. - Copyright (C) 1991-2020 Free Software Foundation, Inc. + Copyright (C) 1991-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/buildsym.c gdb-10.2/gdb/buildsym.c --- gdb-9.1/gdb/buildsym.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/buildsym.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Support routines for building symbol tables in GDB's internal format. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -120,7 +120,7 @@ { if (m_pending_macros == nullptr) m_pending_macros = new_macro_table (&m_objfile->per_bfd->storage_obstack, - &m_objfile->per_bfd->macro_cache, + &m_objfile->per_bfd->string_cache, m_compunit_symtab); return m_pending_macros; } @@ -135,7 +135,7 @@ struct pending *link; /* If this is an alias for another symbol, don't add it. */ - if (symbol->name && symbol->name[0] == '#') + if (symbol->linkage_name () && symbol->linkage_name ()[0] == '#') return; /* We keep PENDINGSIZE symbols in each link of the list. If we @@ -213,7 +213,7 @@ CORE_ADDR start, CORE_ADDR end, int is_global, int expandable) { - struct gdbarch *gdbarch = get_objfile_arch (m_objfile); + struct gdbarch *gdbarch = m_objfile->arch (); struct pending *next, *next1; struct block *block; struct pending_block *pblock; @@ -254,7 +254,7 @@ SYMBOL_BLOCK_VALUE (symbol) = block; BLOCK_FUNCTION (block) = symbol; - if (TYPE_NFIELDS (ftype) <= 0) + if (ftype->num_fields () <= 0) { /* No parameter type information is recorded with the function's type. Set that from the type of the @@ -271,9 +271,10 @@ } if (nparams > 0) { - TYPE_NFIELDS (ftype) = nparams; - TYPE_FIELDS (ftype) = (struct field *) - TYPE_ALLOC (ftype, nparams * sizeof (struct field)); + ftype->set_num_fields (nparams); + ftype->set_fields + ((struct field *) + TYPE_ALLOC (ftype, nparams * sizeof (struct field))); iparams = 0; /* Here we want to directly access the dictionary, because @@ -285,7 +286,7 @@ if (SYMBOL_IS_ARGUMENT (sym)) { - TYPE_FIELD_TYPE (ftype, iparams) = SYMBOL_TYPE (sym); + ftype->field (iparams).set_type (SYMBOL_TYPE (sym)); TYPE_FIELD_ARTIFICIAL (ftype, iparams) = 0; iparams++; } @@ -666,16 +667,10 @@ void buildsym_compunit::record_line (struct subfile *subfile, int line, - CORE_ADDR pc) + CORE_ADDR pc, bool is_stmt) { struct linetable_entry *e; - /* Ignore the dummy line number in libg.o */ - if (line == 0xffff) - { - return; - } - /* Make sure line vector exists and is big enough. */ if (!subfile->line_vector) { @@ -687,7 +682,7 @@ m_have_line_numbers = true; } - if (subfile->line_vector->nitems + 1 >= subfile->line_vector_length) + if (subfile->line_vector->nitems >= subfile->line_vector_length) { subfile->line_vector_length *= 2; subfile->line_vector = (struct linetable *) @@ -710,38 +705,23 @@ end of sequence markers. All we lose is the ability to set breakpoints at some lines which contain no instructions anyway. */ - if (line == 0 && subfile->line_vector->nitems > 0) + if (line == 0) { - e = subfile->line_vector->item + subfile->line_vector->nitems - 1; - while (subfile->line_vector->nitems > 0 && e->pc == pc) + while (subfile->line_vector->nitems > 0) { - e--; + e = subfile->line_vector->item + subfile->line_vector->nitems - 1; + if (e->pc != pc) + break; subfile->line_vector->nitems--; } } e = subfile->line_vector->item + subfile->line_vector->nitems++; e->line = line; + e->is_stmt = is_stmt ? 1 : 0; e->pc = pc; } -/* Needed in order to sort line tables from IBM xcoff files. Sigh! */ - -static bool -lte_is_less_than (const linetable_entry &ln1, const linetable_entry &ln2) -{ - /* Note: this code does not assume that CORE_ADDRs can fit in ints. - Please keep it that way. */ - if (ln1.pc < ln2.pc) - return true; - - if (ln1.pc > ln2.pc) - return false; - - /* If pc equal, sort by line. I'm not sure whether this is optimum - behavior (see comment at struct linetable in symtab.h). */ - return ln1.line < ln2.line; -} /* Subroutine of end_symtab to simplify it. Look for a subfile that matches the main source file's basename. If there is only one, and @@ -959,14 +939,27 @@ linetablesize = sizeof (struct linetable) + subfile->line_vector->nitems * sizeof (struct linetable_entry); - /* Like the pending blocks, the line table may be - scrambled in reordered executables. Sort it if - OBJF_REORDERED is true. */ + const auto lte_is_less_than + = [] (const linetable_entry &ln1, + const linetable_entry &ln2) -> bool + { + if (ln1.pc == ln2.pc + && ((ln1.line == 0) != (ln2.line == 0))) + return ln1.line == 0; + + return (ln1.pc < ln2.pc); + }; + + /* Like the pending blocks, the line table may be scrambled in + reordered executables. Sort it if OBJF_REORDERED is true. It + is important to preserve the order of lines at the same + address, as this maintains the inline function caller/callee + relationships, this is why std::stable_sort is used. */ if (m_objfile->flags & OBJF_REORDERED) - std::sort (subfile->line_vector->item, - subfile->line_vector->item - + subfile->line_vector->nitems, - lte_is_less_than); + std::stable_sort (subfile->line_vector->item, + subfile->line_vector->item + + subfile->line_vector->nitems, + lte_is_less_than); } /* Allocate a symbol table if necessary. */ diff -Nru gdb-9.1/gdb/buildsym.h gdb-10.2/gdb/buildsym.h --- gdb-9.1/gdb/buildsym.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/buildsym.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Build symbol tables in GDB's internal format. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -187,7 +187,8 @@ const char *pop_subfile (); - void record_line (struct subfile *subfile, int line, CORE_ADDR pc); + void record_line (struct subfile *subfile, int line, CORE_ADDR pc, + bool is_stmt); struct compunit_symtab *get_compunit_symtab () { diff -Nru gdb-9.1/gdb/buildsym-legacy.c gdb-10.2/gdb/buildsym-legacy.c --- gdb-9.1/gdb/buildsym-legacy.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/buildsym-legacy.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Legacy support routines for building symbol tables in GDB's internal format. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -252,7 +252,9 @@ record_line (struct subfile *subfile, int line, CORE_ADDR pc) { gdb_assert (buildsym_compunit != nullptr); - buildsym_compunit->record_line (subfile, line, pc); + /* Assume every line entry is a statement start, that is a good place to + put a breakpoint for that line number. */ + buildsym_compunit->record_line (subfile, line, pc, true); } /* Start a new symtab for a new source file in OBJFILE. Called, for example, diff -Nru gdb-9.1/gdb/buildsym-legacy.h gdb-10.2/gdb/buildsym-legacy.h --- gdb-9.1/gdb/buildsym-legacy.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/buildsym-legacy.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Build symbol tables in GDB's internal format - legacy APIs - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/c-exp.c gdb-10.2/gdb/c-exp.c --- gdb-9.1/gdb/c-exp.c 2020-02-08 12:54:10.000000000 +0000 +++ gdb-10.2/gdb/c-exp.c 2021-04-25 04:10:36.000000000 +0000 @@ -1,8 +1,9 @@ -/* A Bison parser, made by GNU Bison 3.0.4. */ +/* A Bison parser, made by GNU Bison 3.5.1. */ /* Bison implementation for Yacc-like parsers in C - Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc. + Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2020 Free Software Foundation, + Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -40,11 +41,14 @@ define necessary library symbols; they are noted "INFRINGES ON USER NAME SPACE" below. */ +/* Undocumented macros, especially those whose name start with YY_, + are private implementation details. Do not rely on them. */ + /* Identify Bison output. */ #define YYBISON 1 /* Bison version. */ -#define YYBISON_VERSION "3.0.4" +#define YYBISON_VERSION "3.5.1" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" @@ -61,8 +65,8 @@ -/* Copy the first part of user declarations. */ -#line 36 "c-exp.y" /* yacc.c:339 */ +/* First part of user prologue. */ +#line 36 "c-exp.y" #include "defs.h" @@ -84,6 +88,7 @@ #include "typeprint.h" #include "cp-abi.h" #include "type-stack.h" +#include "target-float.h" #define parse_type(ps) builtin_type (ps->gdbarch ()) @@ -153,13 +158,26 @@ static int type_aggregate_p (struct type *); -#line 157 "c-exp.c.tmp" /* yacc.c:339 */ +#line 162 "c-exp.c.tmp" +# ifndef YY_CAST +# ifdef __cplusplus +# define YY_CAST(Type, Val) static_cast (Val) +# define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast (Val) +# else +# define YY_CAST(Type, Val) ((Type) (Val)) +# define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val)) +# endif +# endif # ifndef YY_NULLPTRPTR -# if defined __cplusplus && 201103L <= __cplusplus -# define YY_NULLPTRPTR nullptr +# if defined __cplusplus +# if 201103L <= __cplusplus +# define YY_NULLPTRPTR nullptr +# else +# define YY_NULLPTRPTR 0 +# endif # else -# define YY_NULLPTRPTR 0 +# define YY_NULLPTRPTR ((void*)0) # endif # endif @@ -186,141 +204,152 @@ enum yytokentype { INT = 258, - FLOAT = 259, - STRING = 260, - NSSTRING = 261, - SELECTOR = 262, - CHAR = 263, - NAME = 264, - UNKNOWN_CPP_NAME = 265, - COMPLETE = 266, - TYPENAME = 267, - CLASSNAME = 268, - OBJC_LBRAC = 269, - NAME_OR_INT = 270, - OPERATOR = 271, - STRUCT = 272, - CLASS = 273, - UNION = 274, - ENUM = 275, - SIZEOF = 276, - ALIGNOF = 277, - UNSIGNED = 278, - COLONCOLON = 279, - TEMPLATE = 280, - ERROR = 281, - NEW = 282, - DELETE = 283, - REINTERPRET_CAST = 284, - DYNAMIC_CAST = 285, - STATIC_CAST = 286, - CONST_CAST = 287, - ENTRY = 288, - TYPEOF = 289, - DECLTYPE = 290, - TYPEID = 291, - SIGNED_KEYWORD = 292, - LONG = 293, - SHORT = 294, - INT_KEYWORD = 295, - CONST_KEYWORD = 296, - VOLATILE_KEYWORD = 297, - DOUBLE_KEYWORD = 298, - DOLLAR_VARIABLE = 299, - ASSIGN_MODIFY = 300, - TRUEKEYWORD = 301, - FALSEKEYWORD = 302, - ABOVE_COMMA = 303, - OROR = 304, - ANDAND = 305, - EQUAL = 306, - NOTEQUAL = 307, - LEQ = 308, - GEQ = 309, - LSH = 310, - RSH = 311, - UNARY = 312, - INCREMENT = 313, - DECREMENT = 314, - ARROW = 315, - ARROW_STAR = 316, - DOT_STAR = 317, - BLOCKNAME = 318, - FILENAME = 319, - DOTDOTDOT = 320 + COMPLEX_INT = 259, + FLOAT = 260, + COMPLEX_FLOAT = 261, + STRING = 262, + NSSTRING = 263, + SELECTOR = 264, + CHAR = 265, + NAME = 266, + UNKNOWN_CPP_NAME = 267, + COMPLETE = 268, + TYPENAME = 269, + CLASSNAME = 270, + OBJC_LBRAC = 271, + NAME_OR_INT = 272, + OPERATOR = 273, + STRUCT = 274, + CLASS = 275, + UNION = 276, + ENUM = 277, + SIZEOF = 278, + ALIGNOF = 279, + UNSIGNED = 280, + COLONCOLON = 281, + TEMPLATE = 282, + ERROR = 283, + NEW = 284, + DELETE = 285, + REINTERPRET_CAST = 286, + DYNAMIC_CAST = 287, + STATIC_CAST = 288, + CONST_CAST = 289, + ENTRY = 290, + TYPEOF = 291, + DECLTYPE = 292, + TYPEID = 293, + SIGNED_KEYWORD = 294, + LONG = 295, + SHORT = 296, + INT_KEYWORD = 297, + CONST_KEYWORD = 298, + VOLATILE_KEYWORD = 299, + DOUBLE_KEYWORD = 300, + RESTRICT = 301, + ATOMIC = 302, + FLOAT_KEYWORD = 303, + COMPLEX = 304, + DOLLAR_VARIABLE = 305, + ASSIGN_MODIFY = 306, + TRUEKEYWORD = 307, + FALSEKEYWORD = 308, + ABOVE_COMMA = 309, + OROR = 310, + ANDAND = 311, + EQUAL = 312, + NOTEQUAL = 313, + LEQ = 314, + GEQ = 315, + LSH = 316, + RSH = 317, + UNARY = 318, + INCREMENT = 319, + DECREMENT = 320, + ARROW = 321, + ARROW_STAR = 322, + DOT_STAR = 323, + BLOCKNAME = 324, + FILENAME = 325, + DOTDOTDOT = 326 }; #endif /* Tokens. */ #define INT 258 -#define FLOAT 259 -#define STRING 260 -#define NSSTRING 261 -#define SELECTOR 262 -#define CHAR 263 -#define NAME 264 -#define UNKNOWN_CPP_NAME 265 -#define COMPLETE 266 -#define TYPENAME 267 -#define CLASSNAME 268 -#define OBJC_LBRAC 269 -#define NAME_OR_INT 270 -#define OPERATOR 271 -#define STRUCT 272 -#define CLASS 273 -#define UNION 274 -#define ENUM 275 -#define SIZEOF 276 -#define ALIGNOF 277 -#define UNSIGNED 278 -#define COLONCOLON 279 -#define TEMPLATE 280 -#define ERROR 281 -#define NEW 282 -#define DELETE 283 -#define REINTERPRET_CAST 284 -#define DYNAMIC_CAST 285 -#define STATIC_CAST 286 -#define CONST_CAST 287 -#define ENTRY 288 -#define TYPEOF 289 -#define DECLTYPE 290 -#define TYPEID 291 -#define SIGNED_KEYWORD 292 -#define LONG 293 -#define SHORT 294 -#define INT_KEYWORD 295 -#define CONST_KEYWORD 296 -#define VOLATILE_KEYWORD 297 -#define DOUBLE_KEYWORD 298 -#define DOLLAR_VARIABLE 299 -#define ASSIGN_MODIFY 300 -#define TRUEKEYWORD 301 -#define FALSEKEYWORD 302 -#define ABOVE_COMMA 303 -#define OROR 304 -#define ANDAND 305 -#define EQUAL 306 -#define NOTEQUAL 307 -#define LEQ 308 -#define GEQ 309 -#define LSH 310 -#define RSH 311 -#define UNARY 312 -#define INCREMENT 313 -#define DECREMENT 314 -#define ARROW 315 -#define ARROW_STAR 316 -#define DOT_STAR 317 -#define BLOCKNAME 318 -#define FILENAME 319 -#define DOTDOTDOT 320 +#define COMPLEX_INT 259 +#define FLOAT 260 +#define COMPLEX_FLOAT 261 +#define STRING 262 +#define NSSTRING 263 +#define SELECTOR 264 +#define CHAR 265 +#define NAME 266 +#define UNKNOWN_CPP_NAME 267 +#define COMPLETE 268 +#define TYPENAME 269 +#define CLASSNAME 270 +#define OBJC_LBRAC 271 +#define NAME_OR_INT 272 +#define OPERATOR 273 +#define STRUCT 274 +#define CLASS 275 +#define UNION 276 +#define ENUM 277 +#define SIZEOF 278 +#define ALIGNOF 279 +#define UNSIGNED 280 +#define COLONCOLON 281 +#define TEMPLATE 282 +#define ERROR 283 +#define NEW 284 +#define DELETE 285 +#define REINTERPRET_CAST 286 +#define DYNAMIC_CAST 287 +#define STATIC_CAST 288 +#define CONST_CAST 289 +#define ENTRY 290 +#define TYPEOF 291 +#define DECLTYPE 292 +#define TYPEID 293 +#define SIGNED_KEYWORD 294 +#define LONG 295 +#define SHORT 296 +#define INT_KEYWORD 297 +#define CONST_KEYWORD 298 +#define VOLATILE_KEYWORD 299 +#define DOUBLE_KEYWORD 300 +#define RESTRICT 301 +#define ATOMIC 302 +#define FLOAT_KEYWORD 303 +#define COMPLEX 304 +#define DOLLAR_VARIABLE 305 +#define ASSIGN_MODIFY 306 +#define TRUEKEYWORD 307 +#define FALSEKEYWORD 308 +#define ABOVE_COMMA 309 +#define OROR 310 +#define ANDAND 311 +#define EQUAL 312 +#define NOTEQUAL 313 +#define LEQ 314 +#define GEQ 315 +#define LSH 316 +#define RSH 317 +#define UNARY 318 +#define INCREMENT 319 +#define DECREMENT 320 +#define ARROW 321 +#define ARROW_STAR 322 +#define DOT_STAR 323 +#define BLOCKNAME 324 +#define FILENAME 325 +#define DOTDOTDOT 326 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED - union YYSTYPE { -#line 132 "c-exp.y" /* yacc.c:355 */ +#line 133 "c-exp.y" LONGEST lval; struct { @@ -348,9 +377,9 @@ struct objc_class_str theclass; -#line 352 "c-exp.c.tmp" /* yacc.c:355 */ -}; +#line 381 "c-exp.c.tmp" +}; typedef union YYSTYPE YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define YYSTYPE_IS_DECLARED 1 @@ -363,8 +392,8 @@ -/* Copy the second part of user declarations. */ -#line 159 "c-exp.y" /* yacc.c:358 */ +/* Second part of user prologue. */ +#line 160 "c-exp.y" /* YYSTYPE gets defined by %union */ static int parse_number (struct parser_state *par_state, @@ -380,34 +409,82 @@ #define YYPRINT(FILE, TYPE, VALUE) c_print_token (FILE, TYPE, VALUE) #endif -#line 384 "c-exp.c.tmp" /* yacc.c:358 */ +#line 413 "c-exp.c.tmp" + #ifdef short # undef short #endif -#ifdef YYTYPE_UINT8 -typedef YYTYPE_UINT8 yytype_uint8; -#else -typedef unsigned char yytype_uint8; +/* On compilers that do not define __PTRDIFF_MAX__ etc., make sure + and (if available) are included + so that the code can choose integer types of a good width. */ + +#ifndef __PTRDIFF_MAX__ +# include /* INFRINGES ON USER NAME SPACE */ +# if defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__ +# include /* INFRINGES ON USER NAME SPACE */ +# define YY_STDINT_H +# endif #endif -#ifdef YYTYPE_INT8 -typedef YYTYPE_INT8 yytype_int8; +/* Narrow types that promote to a signed type and that can represent a + signed or unsigned integer of at least N bits. In tables they can + save space and decrease cache pressure. Promoting to a signed type + helps avoid bugs in integer arithmetic. */ + +#ifdef __INT_LEAST8_MAX__ +typedef __INT_LEAST8_TYPE__ yytype_int8; +#elif defined YY_STDINT_H +typedef int_least8_t yytype_int8; #else typedef signed char yytype_int8; #endif -#ifdef YYTYPE_UINT16 -typedef YYTYPE_UINT16 yytype_uint16; +#ifdef __INT_LEAST16_MAX__ +typedef __INT_LEAST16_TYPE__ yytype_int16; +#elif defined YY_STDINT_H +typedef int_least16_t yytype_int16; #else -typedef unsigned short int yytype_uint16; +typedef short yytype_int16; #endif -#ifdef YYTYPE_INT16 -typedef YYTYPE_INT16 yytype_int16; +#if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__ +typedef __UINT_LEAST8_TYPE__ yytype_uint8; +#elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \ + && UINT_LEAST8_MAX <= INT_MAX) +typedef uint_least8_t yytype_uint8; +#elif !defined __UINT_LEAST8_MAX__ && UCHAR_MAX <= INT_MAX +typedef unsigned char yytype_uint8; #else -typedef short int yytype_int16; +typedef short yytype_uint8; +#endif + +#if defined __UINT_LEAST16_MAX__ && __UINT_LEAST16_MAX__ <= __INT_MAX__ +typedef __UINT_LEAST16_TYPE__ yytype_uint16; +#elif (!defined __UINT_LEAST16_MAX__ && defined YY_STDINT_H \ + && UINT_LEAST16_MAX <= INT_MAX) +typedef uint_least16_t yytype_uint16; +#elif !defined __UINT_LEAST16_MAX__ && USHRT_MAX <= INT_MAX +typedef unsigned short yytype_uint16; +#else +typedef int yytype_uint16; +#endif + +#ifndef YYPTRDIFF_T +# if defined __PTRDIFF_TYPE__ && defined __PTRDIFF_MAX__ +# define YYPTRDIFF_T __PTRDIFF_TYPE__ +# define YYPTRDIFF_MAXIMUM __PTRDIFF_MAX__ +# elif defined PTRDIFF_MAX +# ifndef ptrdiff_t +# include /* INFRINGES ON USER NAME SPACE */ +# endif +# define YYPTRDIFF_T ptrdiff_t +# define YYPTRDIFF_MAXIMUM PTRDIFF_MAX +# else +# define YYPTRDIFF_T long +# define YYPTRDIFF_MAXIMUM LONG_MAX +# endif #endif #ifndef YYSIZE_T @@ -415,15 +492,27 @@ # define YYSIZE_T __SIZE_TYPE__ # elif defined size_t # define YYSIZE_T size_t -# elif ! defined YYSIZE_T +# elif defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__ # include /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # else -# define YYSIZE_T unsigned int +# define YYSIZE_T unsigned # endif #endif -#define YYSIZE_MAXIMUM ((YYSIZE_T) -1) +#define YYSIZE_MAXIMUM \ + YY_CAST (YYPTRDIFF_T, \ + (YYPTRDIFF_MAXIMUM < YY_CAST (YYSIZE_T, -1) \ + ? YYPTRDIFF_MAXIMUM \ + : YY_CAST (YYSIZE_T, -1))) + +#define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X)) + +/* Stored state numbers (used for stacks). */ +typedef yytype_int16 yy_state_t; + +/* State numbers in computations. */ +typedef int yy_state_fast_t; #ifndef YY_ # if defined YYENABLE_NLS && YYENABLE_NLS @@ -437,30 +526,19 @@ # endif #endif -#ifndef YY_ATTRIBUTE -# if (defined __GNUC__ \ - && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__))) \ - || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C -# define YY_ATTRIBUTE(Spec) __attribute__(Spec) +#ifndef YY_ATTRIBUTE_PURE +# if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__) +# define YY_ATTRIBUTE_PURE __attribute__ ((__pure__)) # else -# define YY_ATTRIBUTE(Spec) /* empty */ +# define YY_ATTRIBUTE_PURE # endif #endif -#ifndef YY_ATTRIBUTE_PURE -# define YY_ATTRIBUTE_PURE YY_ATTRIBUTE ((__pure__)) -#endif - #ifndef YY_ATTRIBUTE_UNUSED -# define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__)) -#endif - -#if !defined _Noreturn \ - && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112) -# if defined _MSC_VER && 1200 <= _MSC_VER -# define _Noreturn __declspec (noreturn) +# if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__) +# define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__)) # else -# define _Noreturn YY_ATTRIBUTE ((__noreturn__)) +# define YY_ATTRIBUTE_UNUSED # endif #endif @@ -471,13 +549,13 @@ # define YYUSE(E) /* empty */ #endif -#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ +#if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ /* Suppress an incorrect diagnostic about yylval being uninitialized. */ -# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ - _Pragma ("GCC diagnostic push") \ - _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\ +# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ + _Pragma ("GCC diagnostic push") \ + _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \ _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") -# define YY_IGNORE_MAYBE_UNINITIALIZED_END \ +# define YY_IGNORE_MAYBE_UNINITIALIZED_END \ _Pragma ("GCC diagnostic pop") #else # define YY_INITIAL_VALUE(Value) Value @@ -490,6 +568,20 @@ # define YY_INITIAL_VALUE(Value) /* Nothing. */ #endif +#if defined __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__ +# define YY_IGNORE_USELESS_CAST_BEGIN \ + _Pragma ("GCC diagnostic push") \ + _Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"") +# define YY_IGNORE_USELESS_CAST_END \ + _Pragma ("GCC diagnostic pop") +#endif +#ifndef YY_IGNORE_USELESS_CAST_BEGIN +# define YY_IGNORE_USELESS_CAST_BEGIN +# define YY_IGNORE_USELESS_CAST_END +#endif + + +#define YY_ASSERT(E) ((void) (0 && (E))) #if ! defined yyoverflow || YYERROR_VERBOSE @@ -565,17 +657,17 @@ /* A type that is properly aligned for any stack member. */ union yyalloc { - yytype_int16 yyss_alloc; + yy_state_t yyss_alloc; YYSTYPE yyvs_alloc; }; /* The size of the maximum gap between one aligned stack and the next. */ -# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) +# define YYSTACK_GAP_MAXIMUM (YYSIZEOF (union yyalloc) - 1) /* The size of an array large to enough to hold all stacks, each with N elements. */ # define YYSTACK_BYTES(N) \ - ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ + ((N) * (YYSIZEOF (yy_state_t) + YYSIZEOF (YYSTYPE)) \ + YYSTACK_GAP_MAXIMUM) # define YYCOPY_NEEDED 1 @@ -588,11 +680,11 @@ # define YYSTACK_RELOCATE(Stack_alloc, Stack) \ do \ { \ - YYSIZE_T yynewbytes; \ + YYPTRDIFF_T yynewbytes; \ YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ Stack = &yyptr->Stack_alloc; \ - yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ - yyptr += yynewbytes / sizeof (*yyptr); \ + yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \ + yyptr += yynewbytes / YYSIZEOF (*yyptr); \ } \ while (0) @@ -604,12 +696,12 @@ # ifndef YYCOPY # if defined __GNUC__ && 1 < __GNUC__ # define YYCOPY(Dst, Src, Count) \ - __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src))) + __builtin_memcpy (Dst, Src, YY_CAST (YYSIZE_T, (Count)) * sizeof (*(Src))) # else # define YYCOPY(Dst, Src, Count) \ do \ { \ - YYSIZE_T yyi; \ + YYPTRDIFF_T yyi; \ for (yyi = 0; yyi < (Count); yyi++) \ (Dst)[yyi] = (Src)[yyi]; \ } \ @@ -619,44 +711,45 @@ #endif /* !YYCOPY_NEEDED */ /* YYFINAL -- State number of the termination state. */ -#define YYFINAL 171 +#define YYFINAL 177 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 1732 +#define YYLAST 1741 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 90 +#define YYNTOKENS 96 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 50 /* YYNRULES -- Number of rules. */ -#define YYNRULES 275 +#define YYNRULES 284 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 432 +#define YYNSTATES 441 -/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned - by yylex, with out-of-bounds checking. */ #define YYUNDEFTOK 2 -#define YYMAXUTOK 320 +#define YYMAXUTOK 326 + +/* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM + as returned by yylex, with out-of-bounds checking. */ #define YYTRANSLATE(YYX) \ - ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) + (0 <= (YYX) && (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) /* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM - as returned by yylex, without out-of-bounds checking. */ -static const yytype_uint8 yytranslate[] = + as returned by yylex. */ +static const yytype_int8 yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 84, 2, 2, 2, 70, 56, 2, - 79, 83, 68, 66, 48, 67, 76, 69, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 87, 2, - 59, 50, 60, 51, 65, 2, 2, 2, 2, 2, + 2, 2, 2, 90, 2, 2, 2, 76, 62, 2, + 85, 89, 74, 72, 54, 73, 82, 75, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 93, 2, + 65, 56, 66, 57, 71, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 78, 2, 86, 55, 2, 2, 2, 2, 2, + 2, 84, 2, 92, 61, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 88, 54, 89, 85, 2, 2, 2, + 2, 2, 2, 94, 60, 95, 91, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -674,43 +767,44 @@ 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, - 45, 46, 47, 49, 52, 53, 57, 58, 61, 62, - 63, 64, 71, 72, 73, 74, 75, 77, 80, 81, - 82 + 45, 46, 47, 48, 49, 50, 51, 52, 53, 55, + 58, 59, 63, 64, 67, 68, 69, 70, 77, 78, + 79, 80, 81, 83, 86, 87, 88 }; #if YYDEBUG /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ -static const yytype_uint16 yyrline[] = +static const yytype_int16 yyrline[] = { - 0, 277, 277, 278, 281, 285, 289, 295, 302, 303, - 308, 312, 316, 320, 324, 328, 332, 336, 340, 344, - 348, 352, 356, 360, 364, 370, 377, 387, 393, 400, - 408, 412, 418, 425, 435, 441, 448, 456, 460, 464, - 474, 473, 498, 497, 514, 513, 522, 524, 527, 528, - 531, 533, 535, 542, 539, 553, 563, 562, 588, 592, - 595, 599, 603, 624, 636, 643, 644, 647, 655, 658, - 665, 669, 673, 679, 683, 687, 691, 695, 699, 703, - 707, 711, 715, 719, 723, 727, 731, 735, 739, 743, - 747, 751, 755, 759, 763, 770, 777, 786, 799, 806, - 809, 815, 822, 841, 846, 850, 854, 861, 878, 896, - 929, 938, 946, 956, 964, 970, 983, 998, 1017, 1030, - 1054, 1063, 1064, 1094, 1172, 1179, 1180, 1183, 1186, 1187, - 1191, 1192, 1197, 1196, 1200, 1199, 1202, 1204, 1206, 1208, - 1212, 1219, 1221, 1222, 1225, 1227, 1235, 1243, 1250, 1258, - 1260, 1262, 1264, 1268, 1273, 1285, 1299, 1301, 1304, 1307, - 1310, 1313, 1316, 1319, 1322, 1325, 1328, 1331, 1334, 1337, - 1340, 1343, 1346, 1349, 1352, 1355, 1358, 1361, 1364, 1367, - 1370, 1373, 1376, 1379, 1384, 1389, 1394, 1400, 1406, 1411, - 1417, 1423, 1428, 1434, 1440, 1444, 1449, 1455, 1458, 1461, - 1464, 1470, 1475, 1477, 1481, 1482, 1489, 1496, 1506, 1508, - 1517, 1526, 1533, 1534, 1541, 1545, 1546, 1549, 1550, 1553, - 1557, 1559, 1563, 1565, 1567, 1569, 1571, 1573, 1575, 1577, - 1579, 1581, 1583, 1585, 1587, 1589, 1591, 1593, 1595, 1597, - 1599, 1601, 1641, 1643, 1645, 1647, 1649, 1651, 1653, 1655, - 1657, 1659, 1661, 1663, 1665, 1667, 1669, 1671, 1673, 1696, - 1697, 1698, 1699, 1700, 1701, 1702, 1705, 1706, 1707, 1708, - 1709, 1710, 1713, 1714, 1722, 1735 + 0, 280, 280, 281, 284, 288, 292, 298, 305, 306, + 311, 315, 319, 323, 327, 331, 335, 339, 343, 347, + 351, 355, 359, 363, 367, 373, 380, 390, 396, 403, + 411, 415, 421, 428, 438, 444, 451, 459, 463, 467, + 477, 476, 501, 500, 517, 516, 525, 527, 530, 531, + 534, 536, 538, 545, 542, 556, 566, 565, 591, 595, + 598, 602, 606, 627, 639, 646, 647, 650, 658, 661, + 668, 672, 676, 682, 686, 690, 694, 698, 702, 706, + 710, 714, 718, 722, 726, 730, 734, 738, 742, 746, + 750, 754, 758, 762, 766, 773, 780, 796, 805, 818, + 825, 846, 849, 855, 862, 881, 886, 890, 894, 901, + 918, 936, 969, 978, 986, 996, 1004, 1010, 1023, 1038, + 1057, 1070, 1094, 1103, 1104, 1134, 1212, 1213, 1217, 1219, + 1221, 1223, 1225, 1233, 1234, 1238, 1239, 1244, 1243, 1247, + 1246, 1249, 1251, 1253, 1255, 1259, 1266, 1268, 1269, 1272, + 1274, 1282, 1290, 1297, 1305, 1307, 1309, 1311, 1315, 1320, + 1332, 1339, 1342, 1345, 1348, 1351, 1354, 1357, 1360, 1363, + 1366, 1369, 1372, 1375, 1378, 1381, 1384, 1387, 1390, 1393, + 1396, 1399, 1402, 1405, 1408, 1411, 1414, 1417, 1422, 1427, + 1432, 1435, 1438, 1441, 1457, 1459, 1461, 1465, 1470, 1476, + 1482, 1487, 1493, 1499, 1504, 1510, 1516, 1520, 1525, 1534, + 1539, 1541, 1545, 1546, 1553, 1560, 1570, 1572, 1581, 1590, + 1597, 1598, 1605, 1609, 1610, 1613, 1614, 1617, 1621, 1623, + 1627, 1629, 1631, 1633, 1635, 1637, 1639, 1641, 1643, 1645, + 1647, 1649, 1651, 1653, 1655, 1657, 1659, 1661, 1663, 1665, + 1705, 1707, 1709, 1711, 1713, 1715, 1717, 1719, 1721, 1723, + 1725, 1727, 1729, 1731, 1733, 1735, 1737, 1759, 1760, 1761, + 1762, 1763, 1764, 1765, 1766, 1769, 1770, 1771, 1772, 1773, + 1774, 1777, 1778, 1786, 1799 }; #endif @@ -719,30 +813,30 @@ First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char *const yytname[] = { - "$end", "error", "$undefined", "INT", "FLOAT", "STRING", "NSSTRING", - "SELECTOR", "CHAR", "NAME", "UNKNOWN_CPP_NAME", "COMPLETE", "TYPENAME", - "CLASSNAME", "OBJC_LBRAC", "NAME_OR_INT", "OPERATOR", "STRUCT", "CLASS", - "UNION", "ENUM", "SIZEOF", "ALIGNOF", "UNSIGNED", "COLONCOLON", - "TEMPLATE", "ERROR", "NEW", "DELETE", "REINTERPRET_CAST", "DYNAMIC_CAST", - "STATIC_CAST", "CONST_CAST", "ENTRY", "TYPEOF", "DECLTYPE", "TYPEID", - "SIGNED_KEYWORD", "LONG", "SHORT", "INT_KEYWORD", "CONST_KEYWORD", - "VOLATILE_KEYWORD", "DOUBLE_KEYWORD", "DOLLAR_VARIABLE", "ASSIGN_MODIFY", - "TRUEKEYWORD", "FALSEKEYWORD", "','", "ABOVE_COMMA", "'='", "'?'", - "OROR", "ANDAND", "'|'", "'^'", "'&'", "EQUAL", "NOTEQUAL", "'<'", "'>'", - "LEQ", "GEQ", "LSH", "RSH", "'@'", "'+'", "'-'", "'*'", "'/'", "'%'", - "UNARY", "INCREMENT", "DECREMENT", "ARROW", "ARROW_STAR", "'.'", - "DOT_STAR", "'['", "'('", "BLOCKNAME", "FILENAME", "DOTDOTDOT", "')'", - "'!'", "'~'", "']'", "':'", "'{'", "'}'", "$accept", "start", "type_exp", - "exp1", "exp", "$@1", "$@2", "$@3", "msglist", "msgarglist", "msgarg", - "$@4", "$@5", "lcurly", "arglist", "function_method", - "function_method_void", "function_method_void_or_typelist", "rcurly", - "string_exp", "block", "variable", "qualified_name", "space_identifier", - "const_or_volatile", "cv_with_space_id", - "const_or_volatile_or_space_identifier_noopt", - "const_or_volatile_or_space_identifier", "ptr_operator", "$@6", "$@7", + "$end", "error", "$undefined", "INT", "COMPLEX_INT", "FLOAT", + "COMPLEX_FLOAT", "STRING", "NSSTRING", "SELECTOR", "CHAR", "NAME", + "UNKNOWN_CPP_NAME", "COMPLETE", "TYPENAME", "CLASSNAME", "OBJC_LBRAC", + "NAME_OR_INT", "OPERATOR", "STRUCT", "CLASS", "UNION", "ENUM", "SIZEOF", + "ALIGNOF", "UNSIGNED", "COLONCOLON", "TEMPLATE", "ERROR", "NEW", + "DELETE", "REINTERPRET_CAST", "DYNAMIC_CAST", "STATIC_CAST", + "CONST_CAST", "ENTRY", "TYPEOF", "DECLTYPE", "TYPEID", "SIGNED_KEYWORD", + "LONG", "SHORT", "INT_KEYWORD", "CONST_KEYWORD", "VOLATILE_KEYWORD", + "DOUBLE_KEYWORD", "RESTRICT", "ATOMIC", "FLOAT_KEYWORD", "COMPLEX", + "DOLLAR_VARIABLE", "ASSIGN_MODIFY", "TRUEKEYWORD", "FALSEKEYWORD", "','", + "ABOVE_COMMA", "'='", "'?'", "OROR", "ANDAND", "'|'", "'^'", "'&'", + "EQUAL", "NOTEQUAL", "'<'", "'>'", "LEQ", "GEQ", "LSH", "RSH", "'@'", + "'+'", "'-'", "'*'", "'/'", "'%'", "UNARY", "INCREMENT", "DECREMENT", + "ARROW", "ARROW_STAR", "'.'", "DOT_STAR", "'['", "'('", "BLOCKNAME", + "FILENAME", "DOTDOTDOT", "')'", "'!'", "'~'", "']'", "':'", "'{'", "'}'", + "$accept", "start", "type_exp", "exp1", "exp", "$@1", "$@2", "$@3", + "msglist", "msgarglist", "msgarg", "$@4", "$@5", "lcurly", "arglist", + "function_method", "function_method_void", + "function_method_void_or_typelist", "rcurly", "string_exp", "block", + "variable", "qualified_name", "const_or_volatile", "single_qualifier", + "qualifier_seq_noopt", "qualifier_seq", "ptr_operator", "$@6", "$@7", "ptr_operator_ts", "abs_decl", "direct_abs_decl", "array_mod", - "func_mod", "type", "typebase", "type_name", "parameter_typelist", - "nonempty_typelist", "ptype", "conversion_type_id", + "func_mod", "type", "scalar_type", "typebase", "type_name", + "parameter_typelist", "nonempty_typelist", "ptype", "conversion_type_id", "conversion_declarator", "const_and_volatile", "const_or_volatile_noopt", "oper", "field_name", "name", "name_not_typename", YY_NULLPTRPTR }; @@ -751,149 +845,152 @@ # ifdef YYPRINT /* YYTOKNUM[NUM] -- (External) token number corresponding to the (internal) symbol number NUM (which must be that of a token). */ -static const yytype_uint16 yytoknum[] = +static const yytype_int16 yytoknum[] = { 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, - 295, 296, 297, 298, 299, 300, 301, 302, 44, 303, - 61, 63, 304, 305, 124, 94, 38, 306, 307, 60, - 62, 308, 309, 310, 311, 64, 43, 45, 42, 47, - 37, 312, 313, 314, 315, 316, 46, 317, 91, 40, - 318, 319, 320, 41, 33, 126, 93, 58, 123, 125 + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 44, 309, 61, 63, 310, 311, + 124, 94, 38, 312, 313, 60, 62, 314, 315, 316, + 317, 64, 43, 45, 42, 47, 37, 318, 319, 320, + 321, 322, 46, 323, 91, 40, 324, 325, 326, 41, + 33, 126, 93, 58, 123, 125 }; # endif -#define YYPACT_NINF -226 +#define YYPACT_NINF (-324) -#define yypact_value_is_default(Yystate) \ - (!!((Yystate) == (-226))) +#define yypact_value_is_default(Yyn) \ + ((Yyn) == YYPACT_NINF) -#define YYTABLE_NINF -127 +#define YYTABLE_NINF (-136) -#define yytable_value_is_error(Yytable_value) \ +#define yytable_value_is_error(Yyn) \ 0 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ static const yytype_int16 yypact[] = { - 488, -226, -226, -226, -226, -64, -226, -226, -54, 4, - 660, -226, 907, 139, 243, 254, 271, 746, -27, 182, - 27, 81, -1, 15, 26, 35, -8, 24, 34, 263, - 288, 202, -226, 78, 89, -226, -226, -226, -226, 832, - 832, 832, 832, 832, 832, 488, 114, -226, 832, 832, - -226, 145, -226, 105, 1308, 402, 172, -226, 176, 158, - 177, -226, -226, 141, -226, 1689, -226, 146, 282, -226, - 151, -226, 184, 81, -226, 47, 4, -226, 1308, -226, - 137, 21, 30, -226, -226, -226, -226, -226, -226, -226, - -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, - -226, -226, -226, -226, -226, -226, -226, -226, 143, 148, - -226, -226, 276, -226, -226, -226, -226, -226, -226, -226, - -226, 222, -226, 225, -226, 227, -226, 229, 4, 488, - 216, 1657, -226, 11, 201, -226, -226, -226, -226, -226, - 189, 1657, 1657, 1657, 1657, 574, 832, 488, 86, -226, - -226, 211, 220, 239, -226, -226, 238, 244, -226, -226, - -226, 216, 216, 216, 216, 216, 216, 173, -7, 216, - 216, -226, 832, 832, 832, 832, 832, 832, 832, 832, - 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, - 832, 832, 832, 832, 832, 832, -226, -226, 72, 832, - 234, 832, 832, 1024, 178, 1308, 12, 81, -226, 81, - 289, 118, 146, -226, 3, 48, 231, -226, 14, 1015, - 236, 50, -226, 55, -226, -226, -226, 214, 832, 81, - 281, 38, 38, 38, -226, 223, 235, 241, 250, -226, - -226, 179, -226, -226, -226, -226, -226, 232, 237, 268, - -226, -226, 1689, 262, 264, 270, 277, 1063, 259, 1098, - 265, 1133, 305, -226, -226, -226, 306, 309, -226, -226, - -226, 832, -226, 1308, -25, 1308, 1308, 944, 1374, 1406, - 1431, 1463, 1488, 1520, 1520, 1545, 1545, 1545, 1545, 1560, - 1560, 1577, 1589, 1589, 216, 216, 216, -226, 4, -226, - -226, -226, -226, -226, -226, 81, -226, 341, -226, 65, - -226, 81, -226, 343, 65, -21, 31, 832, -226, 272, - 308, -226, 832, 832, -226, -226, 334, -226, -226, -226, - 283, -226, 236, 236, 146, 287, -226, -226, 279, 280, - -226, 55, 347, -226, -226, -226, -6, -226, 81, 832, - 832, 290, 38, -226, 291, 293, 294, -226, -226, -226, - -226, -226, -226, -226, -226, -226, 314, 296, 298, 302, - 303, -226, -226, -226, -226, -226, -226, -226, -226, 216, - -226, 832, 357, -226, 372, -226, -226, -226, 19, 118, - 1062, 216, 1308, -226, -226, -226, -226, -226, -226, 146, - -226, -226, 1308, 1308, -226, -226, 291, 832, -226, -226, - -226, 832, 832, 832, 832, 1340, -226, -226, -226, -226, - -226, -226, -226, 1308, 1168, 1203, 1238, 1273, -226, -226, - -226, -226 + 407, -324, -324, -324, -324, -324, -324, -56, -324, -324, + -43, 42, 591, -324, 854, 78, 236, 259, 267, 683, + -20, 95, 29, 13, 28, 53, 86, 96, -14, -9, + 105, 321, 588, 20, -324, -324, -324, -324, -324, -324, + -324, 326, -324, -324, -324, 775, 180, 775, 775, 775, + 775, 775, 407, 166, -324, 775, 775, -324, 198, -324, + 147, 1379, 407, 178, -324, 185, 205, 188, -324, -324, + -324, 1670, 85, -324, -324, 85, 141, -324, 184, 13, + -324, 52, 42, -324, 1379, -324, 128, 16, 18, -324, + -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, + -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, + -324, -324, -324, -324, 136, 153, -324, -324, 985, -324, + -324, -324, -324, -324, -324, -324, -324, 223, -324, 232, + -324, 238, -324, 239, 42, 407, 208, 1634, -324, 79, + 213, -324, -324, -324, -324, -324, 191, 1634, 1634, 1634, + 1634, 499, 775, 407, 125, -324, -324, 215, 216, 171, + -324, -324, 217, 225, -324, -324, 208, -324, 208, 208, + 208, 208, 208, 186, -1, 208, 208, -324, 775, 775, + 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, + 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, + 775, 775, -324, -324, 221, 775, 284, 775, 775, 1021, + 187, 1379, 2, 13, -324, 13, 85, -324, 197, 14, + 11, 209, -324, 19, 965, 220, 32, -324, 39, -324, + -324, -324, 210, 775, 13, 274, 40, 40, 40, -324, + 211, 214, 226, 227, -324, -324, 143, -324, -324, -324, + -324, -324, 219, 224, 263, -324, -324, 1670, 249, 255, + 261, 262, 1127, 244, 1163, 247, 1199, 295, -324, -324, + -324, 296, 297, -324, -324, -324, 775, -324, 1379, -5, + 1379, 1379, 890, 1440, 1474, 1501, 314, 1535, 1562, 1562, + 484, 484, 484, 484, 576, 576, 668, 760, 760, 208, + 208, 208, -324, 42, -324, -324, -324, -324, -324, -324, + -324, 13, -324, 329, -324, 65, -324, 13, -324, 330, + 65, 6, 35, 775, -324, 257, 293, -324, 775, 775, + -324, -324, 323, 258, -324, 220, 220, 85, 260, -324, + -324, 266, 268, -324, 39, 1057, -324, -324, -324, 21, + -324, 13, 775, 775, 264, 40, -324, 271, 277, 281, + -324, -324, -324, -324, -324, -324, -324, -324, -324, 325, + 315, 316, 318, 319, -324, -324, -324, -324, -324, -324, + -324, -324, 208, -324, 775, 346, -324, 392, -324, -324, + 376, 379, -324, -324, -324, 23, 64, 1093, 208, 1379, + -324, -324, 116, -324, -324, -324, 85, -324, -324, 1379, + 1379, -324, -324, 271, 775, -324, -324, -324, 775, 775, + 775, 775, 1413, -324, -324, -324, -324, -324, -324, -324, + -324, 116, 1379, 1235, 1271, 1307, 1343, -324, -324, -324, + -324 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. Performed when YYTABLE does not specify something else to do. Zero means the default is an error. */ -static const yytype_uint16 yydefact[] = +static const yytype_int16 yydefact[] = { - 126, 95, 98, 107, 110, 0, 96, 272, 275, 156, - 0, 97, 126, 0, 0, 0, 0, 0, 0, 198, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 200, - 158, 159, 157, 220, 221, 183, 100, 111, 112, 0, - 0, 0, 0, 0, 0, 126, 273, 114, 0, 0, - 58, 0, 3, 2, 8, 59, 64, 66, 0, 109, - 0, 99, 121, 0, 128, 126, 4, 212, 155, 219, - 129, 274, 123, 0, 56, 0, 40, 42, 44, 156, - 0, 222, 223, 241, 252, 238, 249, 248, 235, 233, - 234, 244, 245, 239, 240, 246, 247, 242, 243, 228, - 229, 230, 231, 232, 250, 251, 254, 253, 0, 0, - 237, 236, 215, 258, 266, 270, 186, 268, 269, 267, - 271, 185, 189, 188, 192, 191, 195, 194, 0, 126, - 22, 126, 204, 206, 207, 205, 197, 275, 273, 122, - 0, 126, 126, 126, 126, 126, 0, 126, 206, 207, - 199, 166, 162, 167, 160, 184, 181, 179, 177, 217, - 218, 11, 13, 12, 10, 16, 17, 0, 0, 14, - 15, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 95, 96, 99, 100, 109, 112, 0, 97, 281, + 284, 194, 0, 98, 0, 0, 0, 0, 0, 0, + 0, 191, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 193, 162, 163, 161, 128, 129, 187, 131, 130, + 188, 0, 102, 113, 114, 0, 0, 0, 0, 0, + 0, 0, 0, 282, 116, 0, 0, 58, 0, 3, + 2, 8, 59, 64, 66, 0, 111, 0, 101, 123, + 133, 0, 0, 4, 195, 220, 160, 283, 125, 0, + 56, 0, 40, 42, 44, 194, 0, 230, 231, 249, + 260, 246, 257, 256, 243, 241, 242, 252, 253, 247, + 248, 254, 255, 250, 251, 236, 237, 238, 239, 240, + 258, 259, 262, 261, 0, 0, 245, 244, 223, 266, + 275, 279, 198, 277, 278, 276, 280, 197, 201, 200, + 204, 203, 207, 206, 0, 0, 22, 0, 212, 214, + 215, 213, 190, 284, 282, 124, 0, 0, 0, 0, + 0, 0, 0, 0, 214, 215, 192, 170, 166, 171, + 164, 189, 185, 183, 181, 196, 11, 132, 13, 12, + 10, 16, 17, 0, 0, 14, 15, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 18, 19, 0, 0, - 0, 0, 0, 53, 0, 60, 0, 0, 108, 0, - 0, 126, 202, 203, 0, 138, 136, 134, 0, 126, - 140, 142, 213, 143, 146, 148, 116, 0, 59, 0, - 118, 0, 0, 0, 257, 0, 0, 0, 0, 256, - 255, 215, 214, 187, 190, 193, 196, 0, 0, 173, - 164, 180, 126, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 171, 163, 165, 161, 175, 170, 168, 182, - 178, 0, 72, 9, 0, 94, 93, 0, 91, 90, - 89, 88, 87, 81, 82, 85, 86, 83, 84, 79, - 80, 73, 77, 78, 74, 75, 76, 26, 268, 265, - 264, 262, 263, 261, 260, 0, 29, 24, 259, 30, - 33, 0, 36, 31, 37, 0, 55, 59, 210, 0, - 208, 68, 0, 0, 69, 67, 117, 124, 127, 125, - 0, 150, 139, 137, 131, 0, 149, 153, 0, 0, - 132, 141, 126, 145, 147, 101, 0, 119, 0, 0, - 0, 0, 47, 48, 46, 0, 0, 226, 224, 227, - 225, 132, 216, 102, 23, 174, 0, 0, 0, 0, - 0, 5, 6, 7, 21, 20, 172, 176, 169, 71, - 39, 0, 27, 25, 34, 32, 38, 63, 0, 126, - 126, 70, 61, 152, 130, 135, 151, 144, 154, 131, - 57, 120, 52, 51, 41, 49, 0, 0, 43, 45, - 201, 0, 0, 0, 0, 92, 28, 35, 54, 62, - 209, 211, 133, 50, 0, 0, 0, 0, 103, 105, - 104, 106 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 18, 19, 0, 0, 0, 0, 0, 53, + 0, 60, 0, 0, 110, 0, 210, 134, 211, 0, + 143, 141, 139, 0, 0, 145, 147, 221, 148, 151, + 153, 118, 0, 59, 0, 120, 0, 0, 0, 265, + 0, 0, 0, 0, 264, 263, 223, 222, 199, 202, + 205, 208, 0, 0, 177, 168, 184, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 175, 167, 169, + 165, 179, 174, 172, 186, 182, 0, 72, 9, 0, + 94, 93, 0, 91, 90, 89, 88, 87, 81, 82, + 85, 86, 83, 84, 79, 80, 73, 77, 78, 74, + 75, 76, 26, 277, 274, 273, 271, 272, 270, 268, + 269, 0, 29, 24, 267, 30, 33, 0, 36, 31, + 37, 0, 55, 59, 218, 0, 216, 68, 0, 0, + 69, 67, 119, 0, 155, 144, 142, 136, 0, 154, + 158, 0, 0, 137, 146, 0, 150, 152, 103, 0, + 121, 0, 0, 0, 0, 47, 48, 46, 0, 0, + 234, 232, 235, 233, 137, 224, 104, 23, 178, 0, + 0, 0, 0, 0, 5, 6, 7, 21, 20, 176, + 180, 173, 71, 39, 0, 27, 25, 34, 32, 38, + 228, 229, 63, 227, 126, 0, 127, 0, 70, 61, + 157, 135, 140, 156, 149, 159, 136, 57, 122, 52, + 51, 41, 49, 0, 0, 43, 45, 209, 0, 0, + 0, 0, 92, 28, 35, 225, 226, 54, 62, 217, + 219, 138, 50, 0, 0, 0, 0, 105, 107, 106, + 108 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -226, -226, 66, 13, -10, -226, -226, -226, -34, -226, - 39, -226, -226, -226, -225, -226, -226, -226, 186, -226, - -226, -226, -42, -226, -199, -226, -66, -4, -110, -226, - -226, -226, 174, 175, -219, -218, -105, 10, 365, 195, - -226, -226, -226, 159, -226, -197, -5, 199, 5, 393 + -324, -324, 5, 15, -12, -324, -324, -324, -124, -324, + 80, -324, -324, -324, -220, -324, -324, -324, 230, -324, + -324, -324, -79, 41, -71, -72, -323, -116, -324, -324, + -324, 212, 235, -224, -222, -123, 417, 9, 431, 254, + -324, -324, -324, 218, -324, -324, -7, 265, 3, 443 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - -1, 51, 167, 168, 54, 231, 232, 233, 351, 352, - 353, 317, 228, 55, 206, 56, 57, 58, 322, 59, - 60, 61, 62, 211, 63, 64, 65, 395, 220, 399, - 334, 221, 222, 223, 224, 225, 66, 67, 136, 339, - 320, 68, 113, 242, 69, 70, 71, 307, 354, 72 + -1, 58, 173, 174, 61, 236, 237, 238, 354, 355, + 356, 323, 233, 62, 212, 63, 64, 65, 328, 66, + 67, 68, 69, 392, 70, 71, 72, 225, 406, 337, + 226, 227, 228, 229, 230, 73, 74, 75, 142, 342, + 326, 76, 119, 247, 393, 394, 77, 313, 357, 78 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -901,445 +998,449 @@ number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_int16 yytable[] = { - 78, 213, 241, 346, 343, 344, 330, 130, 120, 120, - 120, 120, 328, 53, 329, 73, 120, 335, 121, 123, - 125, 127, 112, 172, 247, 74, 140, 172, 75, 161, - 162, 163, 164, 165, 166, 235, 7, 137, 169, 170, - 258, 172, 323, 12, 237, 205, 213, 114, 115, 249, - 117, 250, 131, 118, 12, -126, 114, 115, 141, 117, - 323, 380, 118, 12, 214, 386, 52, 323, 120, 214, - 120, 145, 33, 34, 142, 212, 272, 400, 227, 173, - 230, 114, 115, 297, 298, 143, 349, 118, 12, 331, - 114, 115, 388, 117, 144, 299, 118, 12, 318, 236, - 336, 321, 418, 146, 216, 332, 333, 138, 238, 300, - 301, 302, 303, 147, 318, 304, 217, 387, 119, 329, - 159, 204, 343, 344, 262, 350, 263, 119, 218, 219, - 160, 241, 229, 218, 342, 257, 259, 261, -113, 198, - 199, 200, 201, 202, 203, 171, 213, 366, 114, 115, - 116, 117, 119, 172, 118, 12, 306, 305, 312, 33, - 34, 119, 273, 208, 275, 276, 277, 278, 279, 280, - 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, - 291, 292, 293, 294, 295, 296, 274, 33, 34, 309, - 419, 314, 329, 120, 132, 120, -65, 248, 355, 356, - 207, 209, 120, 308, 120, 308, 210, 253, 254, 255, - 256, -126, 325, 260, 326, 315, -125, 226, 205, 119, - 133, 134, 135, 234, 120, 156, 120, 120, 120, 239, - 173, 240, 215, 243, 347, 216, 244, 318, 245, 157, - 246, 251, 158, 114, 115, 310, 298, 361, 252, 118, - 12, 264, 114, 115, 122, 117, 271, 299, 118, 12, - 265, 379, 266, 114, 115, 124, 117, 321, 394, 118, - 12, 300, 301, 302, 303, 132, 267, 304, 269, 268, - 114, 115, 126, 117, 270, 421, 118, 12, 196, 197, - 198, 199, 200, 201, 202, 203, 214, 345, 327, 217, - 120, 148, 149, 135, 340, 348, 120, 205, 365, 357, - 382, 151, 391, 392, 119, 363, 384, 33, 34, 311, - 364, 358, 367, 119, 368, 152, 153, 359, 154, 215, - 369, 155, 216, 394, 119, 215, 360, 370, 216, 402, - 403, -126, 372, 120, 217, 376, 377, 120, 374, 378, - 217, 119, 383, 401, 385, 389, 390, 406, -115, 79, - 218, 219, 397, 398, 13, 14, 15, 16, 416, 393, - 19, 415, 21, 396, 410, 411, 404, 412, 407, 408, - 409, 413, 414, 417, 29, 30, 31, 32, 33, 34, - 35, 405, 324, 338, 150, 422, 341, 423, 319, 313, - 362, 424, 425, 426, 427, 1, 2, 3, 4, 5, - 6, 7, 8, 139, 9, 0, 10, 11, 12, 13, - 14, 15, 16, 17, 18, 19, 20, 21, 0, 0, - 337, 22, 23, 24, 25, 0, 26, 27, 28, 29, - 30, 31, 32, 33, 34, 35, 36, 0, 37, 38, - 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, - 0, 0, 0, 0, 0, 0, 0, -126, 40, 41, - 42, 0, 0, 0, 43, 44, 0, 0, 0, 0, - 0, 45, 46, 47, 0, 0, 48, 49, 0, 0, - 50, 1, 2, 3, 4, 5, 6, 7, 8, 0, - 9, 0, 10, 11, 12, 13, 14, 15, 16, 17, - 18, 19, 20, 21, 0, 0, 0, 22, 23, 24, - 25, 0, 26, 27, 28, 29, 30, 31, 32, 33, - 34, 35, 36, 0, 37, 38, 0, 0, 0, 0, - 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 40, 41, 42, 0, 0, 0, - 43, 44, 0, 0, 0, 0, 0, 45, 46, 47, - 0, 0, 48, 49, 0, 0, 50, 1, 2, 3, - 4, 5, 6, 7, 8, 0, 9, 0, 10, 11, - 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, - 0, 0, 0, 22, 23, 24, 25, 0, 0, 0, - 28, 29, 30, 31, 32, 33, 34, 35, 36, 0, - 37, 38, 0, 0, 0, 0, 0, 0, 0, 0, - 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 40, 41, 42, 0, 0, 0, 43, 44, 0, 0, - 0, 0, 0, 45, 46, 47, 0, 0, 48, 49, - 0, 0, 50, 1, 2, 3, 4, 5, 6, 7, - 8, 0, 76, 77, 10, 11, 12, 0, 0, 0, - 0, 17, 18, 0, 20, 0, 0, 0, 0, 22, - 23, 24, 25, 0, 0, 0, 28, 0, 0, 0, - 0, 0, 0, 0, 36, 0, 37, 38, 0, 0, - 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 40, 41, 42, 0, - 0, 0, 43, 44, 0, 0, 0, 0, 0, 45, - 46, 47, 0, 0, 48, 49, 0, 0, 50, 1, - 2, 3, 4, 5, 6, 7, 8, 0, 128, 0, - 10, 11, 12, 0, 0, 0, 0, 17, 18, 0, - 20, 0, 0, 0, 0, 22, 23, 24, 25, 0, - 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, - 36, 0, 37, 38, 0, 0, 0, 0, 0, 0, - 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 40, 41, 42, 0, 0, 0, 43, 44, - 0, 0, 0, 0, 0, 129, 46, 47, 0, 0, - 48, 49, 0, 0, 50, 1, 2, 3, 4, 5, - 6, 7, 8, 0, 128, 0, 10, 11, 12, 0, - 0, 0, 0, 17, 18, 0, 20, 0, 0, 0, - 0, 22, 23, 24, 25, 0, 0, 0, 28, 0, - 0, 0, 0, 0, 0, 0, 36, 0, 37, 38, - 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 40, 41, - 42, 0, 0, 0, 43, 44, 0, 0, 0, 0, - 0, 45, 46, 47, 0, 0, 48, 49, 0, 79, - 50, 80, 0, 0, 13, 14, 15, 16, 0, 0, - 19, 0, 21, 0, 81, 82, 0, 0, 0, 0, - 0, 0, 0, 0, 29, 30, 31, 32, 33, 34, - 35, 0, 83, 0, 0, 84, 0, 85, 173, 86, - 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, - 97, 98, 0, 99, 100, 101, 102, 103, 0, 104, - 105, 106, 107, 0, 0, 108, 109, 0, 0, 174, - 0, 110, 111, 0, 175, 176, 177, 178, 179, 180, - 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, - 191, 192, 193, 194, 195, 0, 196, 197, 198, 199, - 200, 201, 202, 203, 0, 0, 0, 79, 0, 214, - 0, 381, 13, 14, 15, 16, 79, 0, 19, 0, - 21, 13, 14, 15, 16, 0, 0, 19, 0, 21, - 0, 0, 29, 30, 31, 32, 33, 34, 35, 0, - 0, 29, 30, 31, 32, 33, 34, 35, 215, 0, - 0, 216, 0, 0, 79, 0, 0, 173, 0, 13, - 14, 15, 16, 217, 0, 19, 0, 21, 0, -126, - 0, 0, 0, 218, 219, 0, 0, 0, 337, 29, - 30, 31, 32, 33, 34, 35, 0, 316, 174, 0, - 0, 0, 173, 175, 176, 177, 178, 179, 180, 181, - 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, - 192, 193, 194, 195, 0, 196, 197, 198, 199, 200, - 201, 202, 203, 174, 420, 0, 371, 173, 175, 176, - 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, - 187, 188, 189, 190, 191, 192, 193, 194, 195, 0, - 196, 197, 198, 199, 200, 201, 202, 203, 174, 0, - 0, 373, 173, 175, 176, 177, 178, 179, 180, 181, - 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, - 192, 193, 194, 195, 0, 196, 197, 198, 199, 200, - 201, 202, 203, 174, 0, 0, 375, 173, 175, 176, - 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, - 187, 188, 189, 190, 191, 192, 193, 194, 195, 0, - 196, 197, 198, 199, 200, 201, 202, 203, 174, 0, - 0, 428, 173, 175, 176, 177, 178, 179, 180, 181, - 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, - 192, 193, 194, 195, 0, 196, 197, 198, 199, 200, - 201, 202, 203, 174, 0, 0, 429, 173, 175, 176, - 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, - 187, 188, 189, 190, 191, 192, 193, 194, 195, 0, - 196, 197, 198, 199, 200, 201, 202, 203, 174, 0, - 0, 430, 173, 175, 176, 177, 178, 179, 180, 181, - 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, - 192, 193, 194, 195, 0, 196, 197, 198, 199, 200, - 201, 202, 203, 174, 173, 0, 431, 0, 175, 176, - 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, - 187, 188, 189, 190, 191, 192, 193, 194, 195, 0, - 196, 197, 198, 199, 200, 201, 202, 203, 173, 0, - 0, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 84, 217, 246, 218, 346, 59, 347, 136, 126, 126, + 126, 126, 252, 349, 402, 60, 126, 333, 127, 129, + 131, 133, 338, 118, 120, 121, 146, 123, 263, 79, + 124, 14, 240, 166, 242, 168, 169, 170, 171, 172, + 9, 143, 80, 175, 176, 162, 218, 14, 219, 178, + 211, 120, 121, 178, 123, 219, 329, 124, 14, 163, + 178, -127, 164, 120, 121, 137, 123, 210, 81, 124, + 14, 151, 126, 221, 126, 329, 152, 329, 390, 391, + 216, 179, 232, 431, 235, 222, 324, 383, 277, 120, + 121, 122, 123, 147, 352, 124, 14, 327, 389, 125, + 241, 324, 243, 395, 335, 336, 334, 390, 391, 138, + 407, 339, 427, 358, 359, 144, 223, 224, 148, 254, + 346, 255, 347, 223, 345, 312, 125, 318, 35, 36, + 246, 38, 39, 353, 369, 139, 140, 141, 125, 262, + 264, 266, 253, 234, 218, 204, 205, 206, 207, 208, + 209, 149, 258, 259, 260, 261, 46, 219, 265, 35, + 36, 150, 38, 39, 125, 267, 278, 268, 280, 281, + 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, + 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, + 153, 167, -115, 315, 279, 320, 271, 126, 177, 126, + 220, 178, 220, 221, -65, 221, 126, 314, 126, 314, + 272, 213, 214, 273, 215, 222, 331, 364, 332, 231, + 239, 211, 324, 321, 179, 223, 224, 126, 244, 126, + 126, 126, 120, 121, 302, 303, 248, 350, 124, 14, + -135, -135, 245, -135, -135, 249, 304, 120, 121, 128, + 123, 250, 251, 124, 14, 256, 257, 269, 270, 274, + 305, 306, 307, 308, 382, 401, 309, 275, -135, 310, + 120, 121, 130, 123, 430, 276, 124, 14, 120, 121, + 132, 123, 327, 222, 124, 14, 202, 203, 204, 205, + 206, 207, 208, 209, 343, 120, 121, 316, 303, 348, + 351, 124, 14, 360, 126, 368, 361, 125, 366, 304, + 126, 211, 311, 367, 385, 370, 398, 399, 362, 363, + 387, 371, 125, 305, 306, 307, 308, 372, 373, 309, + 179, 217, 310, 375, 401, 138, 377, 379, 380, 381, + 409, 410, 386, 388, 126, 125, 396, 397, 126, -117, + 400, 21, 403, 125, 408, 404, 411, 405, 413, 423, + 217, 154, 155, 141, 414, 31, 32, 33, 34, 415, + 125, 37, 422, 416, 40, 317, 187, 188, 189, 190, + 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 417, 202, 203, 204, 205, 206, 207, 208, 209, + 418, 419, 432, 420, 421, 424, 433, 434, 435, 436, + 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, + 425, 11, 426, 12, 13, 14, 15, 16, 17, 18, + 19, 20, 21, 22, 23, 412, 341, 428, 24, 25, + 26, 27, 330, 28, 29, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 41, 42, 165, 43, + 44, 344, 156, 325, 365, 145, 0, 0, 0, 45, + 0, 319, 0, 0, 0, 0, 0, 0, 46, 47, + 48, 49, 0, 0, 0, 50, 51, 0, 0, 0, + 0, 0, 52, 53, 54, 0, 0, 55, 56, 0, + 179, 57, 1, 2, 3, 4, 5, 6, 7, 8, + 9, 10, 0, 11, 0, 12, 13, 14, 15, 16, + 17, 18, 19, 20, 21, 22, 23, 0, 0, 0, + 24, 25, 26, 27, 0, 0, 0, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, + 0, 43, 44, 194, 195, 196, 197, 198, 199, 200, + 201, 45, 202, 203, 204, 205, 206, 207, 208, 209, + 46, 47, 48, 49, 0, 0, 0, 50, 51, 0, + 0, 0, 0, 0, 52, 53, 54, 0, 0, 55, + 56, 0, 179, 57, 1, 2, 3, 4, 5, 6, + 7, 8, 9, 10, 0, 82, 83, 12, 13, 14, + 0, 0, 0, 157, 19, 20, 0, 22, 0, 0, + 0, 0, 24, 25, 26, 27, 0, 158, 159, 30, + 160, 0, 0, 161, 0, 0, 0, 0, 0, 0, + 0, 42, 0, 43, 44, 0, 0, 196, 197, 198, + 199, 200, 201, 45, 202, 203, 204, 205, 206, 207, + 208, 209, 0, 47, 48, 49, 0, 0, 0, 50, + 51, 0, 0, 0, 0, 0, 52, 53, 54, 0, + 0, 55, 56, 0, 179, 57, 1, 2, 3, 4, + 5, 6, 7, 8, 9, 10, 0, 134, 0, 12, + 13, 14, 0, 0, 0, 0, 19, 20, 0, 22, + 0, 0, 0, 0, 24, 25, 26, 27, 0, 0, + 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 42, 0, 43, 44, 0, 0, 0, + 197, 198, 199, 200, 201, 45, 202, 203, 204, 205, + 206, 207, 208, 209, 0, 47, 48, 49, 0, 0, + 0, 50, 51, 0, 0, 0, 0, 0, 135, 53, + 54, 0, 0, 55, 56, 0, 179, 57, 1, 2, + 3, 4, 5, 6, 7, 8, 9, 10, 0, 134, + 0, 12, 13, 14, 0, 0, 0, 0, 19, 20, + 0, 22, 0, 0, 0, 0, 24, 25, 26, 27, + 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 42, 0, 43, 44, 0, + 0, 0, 0, 0, 199, 200, 201, 45, 202, 203, + 204, 205, 206, 207, 208, 209, 0, 47, 48, 49, + 0, 0, 0, 50, 51, 0, 0, 0, 0, 0, + 52, 53, 54, 0, 0, 55, 56, 0, 85, 57, + 86, 0, 0, 15, 16, 17, 18, 0, 0, 21, + 0, 23, 0, 87, 88, 0, 0, 0, 0, 0, + 0, 0, 0, 31, 32, 33, 34, 35, 36, 37, + 38, 39, 40, 41, 0, 89, 179, 0, 90, 0, + 91, 0, 92, 93, 94, 95, 96, 97, 98, 99, + 100, 101, 102, 103, 104, 46, 105, 106, 107, 108, + 109, 0, 110, 111, 112, 113, 0, 0, 114, 115, + 0, 180, 0, 0, 116, 117, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, - 195, 0, 196, 197, 198, 199, 200, 201, 202, 203, - 173, 0, 0, 0, 0, 0, 0, 178, 179, 180, - 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, - 191, 192, 193, 194, 195, 173, 196, 197, 198, 199, - 200, 201, 202, 203, 0, 0, 0, 0, 0, 0, - 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, - 189, 190, 191, 192, 193, 194, 195, 173, 196, 197, - 198, 199, 200, 201, 202, 203, 180, 181, 182, 183, + 195, 196, 197, 198, 199, 200, 201, 0, 202, 203, + 204, 205, 206, 207, 208, 209, 0, 0, 0, 85, + 0, 219, 0, 384, 15, 16, 17, 18, 0, 0, + 21, 0, 23, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 31, 32, 33, 34, 35, 36, + 37, 38, 39, 40, 41, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 220, 0, 0, 221, 35, 36, + 0, 38, 39, 0, 0, 85, 46, 0, 0, 222, + 15, 16, 17, 18, 220, 0, 21, 221, 23, 223, + 224, 0, 0, 0, 340, 0, 46, 0, 0, 222, + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 85, 0, 0, 0, 0, 15, 16, 17, 18, + 0, 0, 21, 0, 23, 0, 0, 0, 0, 0, + 0, 0, 46, 0, 0, 0, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 41, 85, 0, 0, + 322, 0, 15, 16, 17, 18, 0, 0, 21, 0, + 23, 0, 0, 0, 0, 0, 0, 0, 46, 0, + 0, 0, 31, 32, 33, 34, 35, 36, 37, 38, + 39, 40, 41, 179, 0, 0, 340, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 180, 179, + 0, 429, 0, 181, 182, 183, 184, 185, 186, 187, + 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, + 198, 199, 200, 201, 0, 202, 203, 204, 205, 206, + 207, 208, 209, 0, 180, 179, 374, 0, 0, 181, + 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, + 0, 202, 203, 204, 205, 206, 207, 208, 209, 0, + 180, 179, 376, 0, 0, 181, 182, 183, 184, 185, + 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, + 196, 197, 198, 199, 200, 201, 0, 202, 203, 204, + 205, 206, 207, 208, 209, 0, 180, 179, 378, 0, + 0, 181, 182, 183, 184, 185, 186, 187, 188, 189, + 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 0, 202, 203, 204, 205, 206, 207, 208, + 209, 0, 180, 179, 437, 0, 0, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, - 194, 195, 173, 196, 197, 198, 199, 200, 201, 202, - 203, 0, 0, 0, 0, 0, 0, 0, 0, 181, + 194, 195, 196, 197, 198, 199, 200, 201, 0, 202, + 203, 204, 205, 206, 207, 208, 209, 0, 180, 179, + 438, 0, 0, 181, 182, 183, 184, 185, 186, 187, + 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, + 198, 199, 200, 201, 0, 202, 203, 204, 205, 206, + 207, 208, 209, 0, 180, 179, 439, 0, 0, 181, + 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, + 0, 202, 203, 204, 205, 206, 207, 208, 209, 179, + 180, 0, 440, 0, 0, 181, 182, 183, 184, 185, + 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, + 196, 197, 198, 199, 200, 201, 179, 202, 203, 204, + 205, 206, 207, 208, 209, 0, 0, 0, 0, 0, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, - 192, 193, 194, 195, 173, 196, 197, 198, 199, 200, - 201, 202, 203, 0, 0, 182, 183, 184, 185, 186, - 187, 188, 189, 190, 191, 192, 193, 194, 195, 173, - 196, 197, 198, 199, 200, 201, 202, 203, 0, 0, - 0, 0, 0, 0, 173, 0, 0, 0, 0, 184, + 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, + 179, 202, 203, 204, 205, 206, 207, 208, 209, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, - 195, 173, 196, 197, 198, 199, 200, 201, 202, 203, - 0, 0, 0, 173, 0, 0, 0, 0, 188, 189, - 190, 191, 192, 193, 194, 195, 0, 196, 197, 198, - 199, 200, 201, 202, 203, 190, 191, 192, 193, 194, - 195, 0, 196, 197, 198, 199, 200, 201, 202, 203, - 0, 0, 0, 191, 192, 193, 194, 195, 0, 196, - 197, 198, 199, 200, 201, 202, 203, 193, 194, 195, - 0, 196, 197, 198, 199, 200, 201, 202, 203, 79, - 0, 0, 0, 0, 13, 14, 15, 16, 0, 0, - 19, 0, 21, 0, 0, 0, 0, 0, 0, 0, - 0, 26, 27, 0, 29, 30, 31, 32, 33, 34, - 35, 79, 0, 0, 0, 0, 13, 14, 15, 16, - 0, 0, 19, 0, 21, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 29, 30, 31, 32, - 33, 34, 35 + 195, 196, 197, 198, 199, 200, 201, 179, 202, 203, + 204, 205, 206, 207, 208, 209, 0, 0, 0, 0, + 0, 0, 0, 0, 185, 186, 187, 188, 189, 190, + 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 179, 202, 203, 204, 205, 206, 207, 208, 209, + 0, 0, 186, 187, 188, 189, 190, 191, 192, 193, + 194, 195, 196, 197, 198, 199, 200, 201, 179, 202, + 203, 204, 205, 206, 207, 208, 209, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 188, 189, + 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 0, 202, 203, 204, 205, 206, 207, 208, + 209, 0, 0, 0, 0, 0, 0, 190, 191, 192, + 193, 194, 195, 196, 197, 198, 199, 200, 201, 0, + 202, 203, 204, 205, 206, 207, 208, 209, 85, 0, + 0, 0, 0, 15, 16, 17, 18, 0, 0, 21, + 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, + 28, 29, 0, 31, 32, 33, 34, 35, 36, 37, + 38, 39, 40, 41, 85, 0, 0, 0, 0, 15, + 16, 17, 18, 0, 0, 21, 0, 23, 0, 0, + 0, 0, 0, 0, 0, 46, 0, 0, 0, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 46 }; static const yytype_int16 yycheck[] = { - 10, 67, 112, 228, 223, 223, 3, 17, 13, 14, - 15, 16, 211, 0, 211, 79, 21, 3, 13, 14, - 15, 16, 12, 48, 129, 79, 21, 48, 24, 39, - 40, 41, 42, 43, 44, 14, 9, 10, 48, 49, - 145, 48, 48, 16, 14, 55, 112, 9, 10, 38, - 12, 40, 79, 15, 16, 24, 9, 10, 59, 12, - 48, 86, 15, 16, 14, 86, 0, 48, 73, 14, - 75, 79, 41, 42, 59, 65, 83, 83, 73, 14, - 75, 9, 10, 11, 12, 59, 48, 15, 16, 86, - 9, 10, 317, 12, 59, 23, 15, 16, 203, 78, - 86, 89, 83, 79, 56, 215, 216, 80, 78, 37, - 38, 39, 40, 79, 219, 43, 68, 316, 80, 316, - 42, 55, 341, 341, 38, 87, 40, 80, 78, 79, - 41, 241, 85, 78, 79, 145, 146, 147, 24, 74, - 75, 76, 77, 78, 79, 0, 212, 252, 9, 10, - 11, 12, 80, 48, 15, 16, 198, 85, 200, 41, - 42, 80, 172, 5, 174, 175, 176, 177, 178, 179, - 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, - 190, 191, 192, 193, 194, 195, 173, 41, 42, 199, - 389, 201, 389, 198, 12, 200, 24, 131, 232, 233, - 24, 24, 207, 198, 209, 200, 65, 141, 142, 143, - 144, 65, 207, 147, 209, 202, 65, 33, 228, 80, - 38, 39, 40, 86, 229, 23, 231, 232, 233, 86, - 14, 83, 53, 11, 229, 56, 11, 342, 11, 37, - 11, 40, 40, 9, 10, 11, 12, 68, 59, 15, - 16, 40, 9, 10, 11, 12, 83, 23, 15, 16, - 40, 271, 23, 9, 10, 11, 12, 89, 334, 15, - 16, 37, 38, 39, 40, 12, 37, 43, 40, 40, - 9, 10, 11, 12, 40, 390, 15, 16, 72, 73, - 74, 75, 76, 77, 78, 79, 14, 83, 9, 68, - 305, 38, 39, 40, 68, 24, 311, 317, 40, 86, - 305, 23, 322, 323, 80, 83, 311, 41, 42, 85, - 83, 86, 60, 80, 60, 37, 38, 86, 40, 53, - 60, 43, 56, 399, 80, 53, 86, 60, 56, 349, - 350, 65, 83, 348, 68, 40, 40, 352, 83, 40, - 68, 80, 11, 348, 11, 83, 48, 352, 24, 12, - 78, 79, 83, 83, 17, 18, 19, 20, 11, 86, - 23, 381, 25, 86, 60, 79, 86, 79, 87, 86, - 86, 79, 79, 11, 37, 38, 39, 40, 41, 42, - 43, 352, 206, 219, 29, 399, 221, 407, 203, 200, - 241, 411, 412, 413, 414, 3, 4, 5, 6, 7, - 8, 9, 10, 20, 12, -1, 14, 15, 16, 17, - 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, - 83, 29, 30, 31, 32, -1, 34, 35, 36, 37, - 38, 39, 40, 41, 42, 43, 44, -1, 46, 47, - -1, -1, -1, -1, -1, -1, -1, -1, 56, -1, - -1, -1, -1, -1, -1, -1, -1, 65, 66, 67, - 68, -1, -1, -1, 72, 73, -1, -1, -1, -1, - -1, 79, 80, 81, -1, -1, 84, 85, -1, -1, - 88, 3, 4, 5, 6, 7, 8, 9, 10, -1, - 12, -1, 14, 15, 16, 17, 18, 19, 20, 21, - 22, 23, 24, 25, -1, -1, -1, 29, 30, 31, - 32, -1, 34, 35, 36, 37, 38, 39, 40, 41, - 42, 43, 44, -1, 46, 47, -1, -1, -1, -1, - -1, -1, -1, -1, 56, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 66, 67, 68, -1, -1, -1, - 72, 73, -1, -1, -1, -1, -1, 79, 80, 81, - -1, -1, 84, 85, -1, -1, 88, 3, 4, 5, - 6, 7, 8, 9, 10, -1, 12, -1, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, - -1, -1, -1, 29, 30, 31, 32, -1, -1, -1, - 36, 37, 38, 39, 40, 41, 42, 43, 44, -1, - 46, 47, -1, -1, -1, -1, -1, -1, -1, -1, - 56, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 66, 67, 68, -1, -1, -1, 72, 73, -1, -1, - -1, -1, -1, 79, 80, 81, -1, -1, 84, 85, - -1, -1, 88, 3, 4, 5, 6, 7, 8, 9, - 10, -1, 12, 13, 14, 15, 16, -1, -1, -1, - -1, 21, 22, -1, 24, -1, -1, -1, -1, 29, - 30, 31, 32, -1, -1, -1, 36, -1, -1, -1, - -1, -1, -1, -1, 44, -1, 46, 47, -1, -1, - -1, -1, -1, -1, -1, -1, 56, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 66, 67, 68, -1, - -1, -1, 72, 73, -1, -1, -1, -1, -1, 79, - 80, 81, -1, -1, 84, 85, -1, -1, 88, 3, - 4, 5, 6, 7, 8, 9, 10, -1, 12, -1, - 14, 15, 16, -1, -1, -1, -1, 21, 22, -1, - 24, -1, -1, -1, -1, 29, 30, 31, 32, -1, - -1, -1, 36, -1, -1, -1, -1, -1, -1, -1, - 44, -1, 46, 47, -1, -1, -1, -1, -1, -1, - -1, -1, 56, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 66, 67, 68, -1, -1, -1, 72, 73, - -1, -1, -1, -1, -1, 79, 80, 81, -1, -1, - 84, 85, -1, -1, 88, 3, 4, 5, 6, 7, - 8, 9, 10, -1, 12, -1, 14, 15, 16, -1, - -1, -1, -1, 21, 22, -1, 24, -1, -1, -1, - -1, 29, 30, 31, 32, -1, -1, -1, 36, -1, - -1, -1, -1, -1, -1, -1, 44, -1, 46, 47, - -1, -1, -1, -1, -1, -1, -1, -1, 56, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 66, 67, - 68, -1, -1, -1, 72, 73, -1, -1, -1, -1, - -1, 79, 80, 81, -1, -1, 84, 85, -1, 12, - 88, 14, -1, -1, 17, 18, 19, 20, -1, -1, - 23, -1, 25, -1, 27, 28, -1, -1, -1, -1, - -1, -1, -1, -1, 37, 38, 39, 40, 41, 42, - 43, -1, 45, -1, -1, 48, -1, 50, 14, 52, - 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, - 63, 64, -1, 66, 67, 68, 69, 70, -1, 72, - 73, 74, 75, -1, -1, 78, 79, -1, -1, 45, - -1, 84, 85, -1, 50, 51, 52, 53, 54, 55, - 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, - 66, 67, 68, 69, 70, -1, 72, 73, 74, 75, - 76, 77, 78, 79, -1, -1, -1, 12, -1, 14, - -1, 87, 17, 18, 19, 20, 12, -1, 23, -1, - 25, 17, 18, 19, 20, -1, -1, 23, -1, 25, - -1, -1, 37, 38, 39, 40, 41, 42, 43, -1, - -1, 37, 38, 39, 40, 41, 42, 43, 53, -1, - -1, 56, -1, -1, 12, -1, -1, 14, -1, 17, - 18, 19, 20, 68, -1, 23, -1, 25, -1, 65, - -1, -1, -1, 78, 79, -1, -1, -1, 83, 37, - 38, 39, 40, 41, 42, 43, -1, 83, 45, -1, - -1, -1, 14, 50, 51, 52, 53, 54, 55, 56, - 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, - 67, 68, 69, 70, -1, 72, 73, 74, 75, 76, - 77, 78, 79, 45, 82, -1, 83, 14, 50, 51, - 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, - 62, 63, 64, 65, 66, 67, 68, 69, 70, -1, - 72, 73, 74, 75, 76, 77, 78, 79, 45, -1, - -1, 83, 14, 50, 51, 52, 53, 54, 55, 56, - 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, - 67, 68, 69, 70, -1, 72, 73, 74, 75, 76, - 77, 78, 79, 45, -1, -1, 83, 14, 50, 51, - 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, - 62, 63, 64, 65, 66, 67, 68, 69, 70, -1, - 72, 73, 74, 75, 76, 77, 78, 79, 45, -1, - -1, 83, 14, 50, 51, 52, 53, 54, 55, 56, - 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, - 67, 68, 69, 70, -1, 72, 73, 74, 75, 76, - 77, 78, 79, 45, -1, -1, 83, 14, 50, 51, - 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, - 62, 63, 64, 65, 66, 67, 68, 69, 70, -1, - 72, 73, 74, 75, 76, 77, 78, 79, 45, -1, - -1, 83, 14, 50, 51, 52, 53, 54, 55, 56, - 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, - 67, 68, 69, 70, -1, 72, 73, 74, 75, 76, - 77, 78, 79, 45, 14, -1, 83, -1, 50, 51, - 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, - 62, 63, 64, 65, 66, 67, 68, 69, 70, -1, - 72, 73, 74, 75, 76, 77, 78, 79, 14, -1, - -1, 51, 52, 53, 54, 55, 56, 57, 58, 59, + 12, 72, 118, 75, 228, 0, 228, 19, 15, 16, + 17, 18, 135, 233, 337, 0, 23, 3, 15, 16, + 17, 18, 3, 14, 11, 12, 23, 14, 151, 85, + 17, 18, 16, 45, 16, 47, 48, 49, 50, 51, + 11, 12, 85, 55, 56, 25, 118, 18, 16, 54, + 62, 11, 12, 54, 14, 16, 54, 17, 18, 39, + 54, 26, 42, 11, 12, 85, 14, 62, 26, 17, + 18, 85, 79, 62, 81, 54, 85, 54, 43, 44, + 71, 16, 79, 406, 81, 74, 209, 92, 89, 11, + 12, 13, 14, 65, 54, 17, 18, 95, 92, 86, + 84, 224, 84, 323, 220, 221, 92, 43, 44, 14, + 89, 92, 89, 237, 238, 86, 84, 85, 65, 40, + 344, 42, 344, 84, 85, 204, 86, 206, 43, 44, + 246, 46, 47, 93, 257, 40, 41, 42, 86, 151, + 152, 153, 137, 91, 216, 80, 81, 82, 83, 84, + 85, 65, 147, 148, 149, 150, 71, 16, 153, 43, + 44, 65, 46, 47, 86, 40, 178, 42, 180, 181, + 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, + 85, 11, 26, 205, 179, 207, 25, 204, 0, 206, + 59, 54, 59, 62, 26, 62, 213, 204, 215, 206, + 39, 26, 7, 42, 26, 74, 213, 74, 215, 35, + 92, 233, 345, 208, 16, 84, 85, 234, 92, 236, + 237, 238, 11, 12, 13, 14, 13, 234, 17, 18, + 43, 44, 89, 46, 47, 13, 25, 11, 12, 13, + 14, 13, 13, 17, 18, 42, 65, 42, 42, 42, + 39, 40, 41, 42, 276, 337, 45, 42, 71, 48, + 11, 12, 13, 14, 397, 89, 17, 18, 11, 12, + 13, 14, 95, 74, 17, 18, 78, 79, 80, 81, + 82, 83, 84, 85, 74, 11, 12, 13, 14, 89, + 26, 17, 18, 92, 311, 42, 92, 86, 89, 25, + 317, 323, 91, 89, 311, 66, 328, 329, 92, 92, + 317, 66, 86, 39, 40, 41, 42, 66, 66, 45, + 16, 402, 48, 89, 406, 14, 89, 42, 42, 42, + 352, 353, 13, 13, 351, 86, 89, 54, 355, 26, + 92, 25, 92, 86, 351, 89, 92, 89, 355, 13, + 431, 40, 41, 42, 93, 39, 40, 41, 42, 92, + 86, 45, 384, 92, 48, 91, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, + 76, 66, 78, 79, 80, 81, 82, 83, 84, 85, + 85, 85, 414, 85, 85, 13, 418, 419, 420, 421, + 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, + 44, 14, 43, 16, 17, 18, 19, 20, 21, 22, + 23, 24, 25, 26, 27, 355, 224, 396, 31, 32, + 33, 34, 212, 36, 37, 38, 39, 40, 41, 42, + 43, 44, 45, 46, 47, 48, 49, 50, 41, 52, + 53, 226, 31, 209, 246, 22, -1, -1, -1, 62, + -1, 206, -1, -1, -1, -1, -1, -1, 71, 72, + 73, 74, -1, -1, -1, 78, 79, -1, -1, -1, + -1, -1, 85, 86, 87, -1, -1, 90, 91, -1, + 16, 94, 3, 4, 5, 6, 7, 8, 9, 10, + 11, 12, -1, 14, -1, 16, 17, 18, 19, 20, + 21, 22, 23, 24, 25, 26, 27, -1, -1, -1, + 31, 32, 33, 34, -1, -1, -1, 38, 39, 40, + 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, + -1, 52, 53, 69, 70, 71, 72, 73, 74, 75, + 76, 62, 78, 79, 80, 81, 82, 83, 84, 85, + 71, 72, 73, 74, -1, -1, -1, 78, 79, -1, + -1, -1, -1, -1, 85, 86, 87, -1, -1, 90, + 91, -1, 16, 94, 3, 4, 5, 6, 7, 8, + 9, 10, 11, 12, -1, 14, 15, 16, 17, 18, + -1, -1, -1, 25, 23, 24, -1, 26, -1, -1, + -1, -1, 31, 32, 33, 34, -1, 39, 40, 38, + 42, -1, -1, 45, -1, -1, -1, -1, -1, -1, + -1, 50, -1, 52, 53, -1, -1, 71, 72, 73, + 74, 75, 76, 62, 78, 79, 80, 81, 82, 83, + 84, 85, -1, 72, 73, 74, -1, -1, -1, 78, + 79, -1, -1, -1, -1, -1, 85, 86, 87, -1, + -1, 90, 91, -1, 16, 94, 3, 4, 5, 6, + 7, 8, 9, 10, 11, 12, -1, 14, -1, 16, + 17, 18, -1, -1, -1, -1, 23, 24, -1, 26, + -1, -1, -1, -1, 31, 32, 33, 34, -1, -1, + -1, 38, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 50, -1, 52, 53, -1, -1, -1, + 72, 73, 74, 75, 76, 62, 78, 79, 80, 81, + 82, 83, 84, 85, -1, 72, 73, 74, -1, -1, + -1, 78, 79, -1, -1, -1, -1, -1, 85, 86, + 87, -1, -1, 90, 91, -1, 16, 94, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, -1, 14, + -1, 16, 17, 18, -1, -1, -1, -1, 23, 24, + -1, 26, -1, -1, -1, -1, 31, 32, 33, 34, + -1, -1, -1, 38, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 50, -1, 52, 53, -1, + -1, -1, -1, -1, 74, 75, 76, 62, 78, 79, + 80, 81, 82, 83, 84, 85, -1, 72, 73, 74, + -1, -1, -1, 78, 79, -1, -1, -1, -1, -1, + 85, 86, 87, -1, -1, 90, 91, -1, 14, 94, + 16, -1, -1, 19, 20, 21, 22, -1, -1, 25, + -1, 27, -1, 29, 30, -1, -1, -1, -1, -1, + -1, -1, -1, 39, 40, 41, 42, 43, 44, 45, + 46, 47, 48, 49, -1, 51, 16, -1, 54, -1, + 56, -1, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, + 76, -1, 78, 79, 80, 81, -1, -1, 84, 85, + -1, 51, -1, -1, 90, 91, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, - 70, -1, 72, 73, 74, 75, 76, 77, 78, 79, - 14, -1, -1, -1, -1, -1, -1, 53, 54, 55, - 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, - 66, 67, 68, 69, 70, 14, 72, 73, 74, 75, - 76, 77, 78, 79, -1, -1, -1, -1, -1, -1, - 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 14, 72, 73, - 74, 75, 76, 77, 78, 79, 55, 56, 57, 58, + 70, 71, 72, 73, 74, 75, 76, -1, 78, 79, + 80, 81, 82, 83, 84, 85, -1, -1, -1, 14, + -1, 16, -1, 93, 19, 20, 21, 22, -1, -1, + 25, -1, 27, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 39, 40, 41, 42, 43, 44, + 45, 46, 47, 48, 49, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 59, -1, -1, 62, 43, 44, + -1, 46, 47, -1, -1, 14, 71, -1, -1, 74, + 19, 20, 21, 22, 59, -1, 25, 62, 27, 84, + 85, -1, -1, -1, 89, -1, 71, -1, -1, 74, + 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 14, -1, -1, -1, -1, 19, 20, 21, 22, + -1, -1, 25, -1, 27, -1, -1, -1, -1, -1, + -1, -1, 71, -1, -1, -1, 39, 40, 41, 42, + 43, 44, 45, 46, 47, 48, 49, 14, -1, -1, + 89, -1, 19, 20, 21, 22, -1, -1, 25, -1, + 27, -1, -1, -1, -1, -1, -1, -1, 71, -1, + -1, -1, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 16, -1, -1, 89, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 71, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 51, 16, + -1, 88, -1, 56, 57, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, + 73, 74, 75, 76, -1, 78, 79, 80, 81, 82, + 83, 84, 85, -1, 51, 16, 89, -1, -1, 56, + 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + -1, 78, 79, 80, 81, 82, 83, 84, 85, -1, + 51, 16, 89, -1, -1, 56, 57, 58, 59, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, -1, 78, 79, 80, + 81, 82, 83, 84, 85, -1, 51, 16, 89, -1, + -1, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, + 75, 76, -1, 78, 79, 80, 81, 82, 83, 84, + 85, -1, 51, 16, 89, -1, -1, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, - 69, 70, 14, 72, 73, 74, 75, 76, 77, 78, - 79, -1, -1, -1, -1, -1, -1, -1, -1, 56, + 69, 70, 71, 72, 73, 74, 75, 76, -1, 78, + 79, 80, 81, 82, 83, 84, 85, -1, 51, 16, + 89, -1, -1, 56, 57, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, + 73, 74, 75, 76, -1, 78, 79, 80, 81, 82, + 83, 84, 85, -1, 51, 16, 89, -1, -1, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, - 67, 68, 69, 70, 14, 72, 73, 74, 75, 76, - 77, 78, 79, -1, -1, 57, 58, 59, 60, 61, - 62, 63, 64, 65, 66, 67, 68, 69, 70, 14, - 72, 73, 74, 75, 76, 77, 78, 79, -1, -1, - -1, -1, -1, -1, 14, -1, -1, -1, -1, 59, + 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + -1, 78, 79, 80, 81, 82, 83, 84, 85, 16, + 51, -1, 89, -1, -1, 56, 57, 58, 59, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 16, 78, 79, 80, + 81, 82, 83, 84, 85, -1, -1, -1, -1, -1, + 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 16, 78, 79, 80, 81, 82, 83, 84, 85, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, - 70, 14, 72, 73, 74, 75, 76, 77, 78, 79, - -1, -1, -1, 14, -1, -1, -1, -1, 63, 64, - 65, 66, 67, 68, 69, 70, -1, 72, 73, 74, - 75, 76, 77, 78, 79, 65, 66, 67, 68, 69, - 70, -1, 72, 73, 74, 75, 76, 77, 78, 79, - -1, -1, -1, 66, 67, 68, 69, 70, -1, 72, - 73, 74, 75, 76, 77, 78, 79, 68, 69, 70, - -1, 72, 73, 74, 75, 76, 77, 78, 79, 12, - -1, -1, -1, -1, 17, 18, 19, 20, -1, -1, - 23, -1, 25, -1, -1, -1, -1, -1, -1, -1, - -1, 34, 35, -1, 37, 38, 39, 40, 41, 42, - 43, 12, -1, -1, -1, -1, 17, 18, 19, 20, - -1, -1, 23, -1, 25, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 37, 38, 39, 40, - 41, 42, 43 + 70, 71, 72, 73, 74, 75, 76, 16, 78, 79, + 80, 81, 82, 83, 84, 85, -1, -1, -1, -1, + -1, -1, -1, -1, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, + 76, 16, 78, 79, 80, 81, 82, 83, 84, 85, + -1, -1, 61, 62, 63, 64, 65, 66, 67, 68, + 69, 70, 71, 72, 73, 74, 75, 76, 16, 78, + 79, 80, 81, 82, 83, 84, 85, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, + 75, 76, -1, 78, 79, 80, 81, 82, 83, 84, + 85, -1, -1, -1, -1, -1, -1, 65, 66, 67, + 68, 69, 70, 71, 72, 73, 74, 75, 76, -1, + 78, 79, 80, 81, 82, 83, 84, 85, 14, -1, + -1, -1, -1, 19, 20, 21, 22, -1, -1, 25, + -1, 27, -1, -1, -1, -1, -1, -1, -1, -1, + 36, 37, -1, 39, 40, 41, 42, 43, 44, 45, + 46, 47, 48, 49, 14, -1, -1, -1, -1, 19, + 20, 21, 22, -1, -1, 25, -1, 27, -1, -1, + -1, -1, -1, -1, -1, 71, -1, -1, -1, 39, + 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 71 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint8 yystos[] = { - 0, 3, 4, 5, 6, 7, 8, 9, 10, 12, - 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, - 24, 25, 29, 30, 31, 32, 34, 35, 36, 37, - 38, 39, 40, 41, 42, 43, 44, 46, 47, 56, - 66, 67, 68, 72, 73, 79, 80, 81, 84, 85, - 88, 91, 92, 93, 94, 103, 105, 106, 107, 109, - 110, 111, 112, 114, 115, 116, 126, 127, 131, 134, - 135, 136, 139, 79, 79, 24, 12, 13, 94, 12, - 14, 27, 28, 45, 48, 50, 52, 53, 54, 55, - 56, 57, 58, 59, 60, 61, 62, 63, 64, 66, - 67, 68, 69, 70, 72, 73, 74, 75, 78, 79, - 84, 85, 127, 132, 9, 10, 11, 12, 15, 80, - 136, 138, 11, 138, 11, 138, 11, 138, 12, 79, - 94, 79, 12, 38, 39, 40, 128, 10, 80, 139, - 138, 59, 59, 59, 59, 79, 79, 79, 38, 39, - 128, 23, 37, 38, 40, 43, 23, 37, 40, 42, - 41, 94, 94, 94, 94, 94, 94, 92, 93, 94, - 94, 0, 48, 14, 45, 50, 51, 52, 53, 54, - 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, - 65, 66, 67, 68, 69, 70, 72, 73, 74, 75, - 76, 77, 78, 79, 92, 94, 104, 24, 5, 24, - 65, 113, 127, 116, 14, 53, 56, 68, 78, 79, - 118, 121, 122, 123, 124, 125, 33, 138, 102, 85, - 138, 95, 96, 97, 86, 14, 78, 14, 78, 86, - 83, 118, 133, 11, 11, 11, 11, 126, 92, 38, - 40, 40, 59, 92, 92, 92, 92, 94, 126, 94, - 92, 94, 38, 40, 40, 40, 23, 37, 40, 40, - 40, 83, 83, 94, 93, 94, 94, 94, 94, 94, - 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, - 94, 94, 94, 94, 94, 94, 94, 11, 12, 23, - 37, 38, 39, 40, 43, 85, 112, 137, 138, 94, - 11, 85, 112, 137, 94, 93, 83, 101, 126, 129, - 130, 89, 108, 48, 108, 138, 138, 9, 114, 135, - 3, 86, 118, 118, 120, 3, 86, 83, 122, 129, - 68, 123, 79, 124, 125, 83, 104, 138, 24, 48, - 87, 98, 99, 100, 138, 98, 98, 86, 86, 86, - 86, 68, 133, 83, 83, 40, 126, 60, 60, 60, - 60, 83, 83, 83, 83, 83, 40, 40, 40, 94, - 86, 87, 138, 11, 138, 11, 86, 114, 104, 83, - 48, 94, 94, 86, 116, 117, 86, 83, 83, 119, - 83, 138, 94, 94, 86, 100, 138, 87, 86, 86, - 60, 79, 79, 79, 79, 94, 11, 11, 83, 114, - 82, 126, 117, 94, 94, 94, 94, 94, 83, 83, - 83, 83 + 0, 3, 4, 5, 6, 7, 8, 9, 10, 11, + 12, 14, 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 31, 32, 33, 34, 36, 37, + 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 52, 53, 62, 71, 72, 73, 74, + 78, 79, 85, 86, 87, 90, 91, 94, 97, 98, + 99, 100, 109, 111, 112, 113, 115, 116, 117, 118, + 120, 121, 122, 131, 132, 133, 137, 142, 145, 85, + 85, 26, 14, 15, 100, 14, 16, 29, 30, 51, + 54, 56, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 72, 73, 74, 75, 76, + 78, 79, 80, 81, 84, 85, 90, 91, 133, 138, + 11, 12, 13, 14, 17, 86, 142, 144, 13, 144, + 13, 144, 13, 144, 14, 85, 100, 85, 14, 40, + 41, 42, 134, 12, 86, 145, 144, 65, 65, 65, + 65, 85, 85, 85, 40, 41, 134, 25, 39, 40, + 42, 45, 25, 39, 42, 132, 100, 11, 100, 100, + 100, 100, 100, 98, 99, 100, 100, 0, 54, 16, + 51, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, + 75, 76, 78, 79, 80, 81, 82, 83, 84, 85, + 98, 100, 110, 26, 7, 26, 133, 120, 121, 16, + 59, 62, 74, 84, 85, 123, 126, 127, 128, 129, + 130, 35, 144, 108, 91, 144, 101, 102, 103, 92, + 16, 84, 16, 84, 92, 89, 123, 139, 13, 13, + 13, 13, 131, 98, 40, 42, 42, 65, 98, 98, + 98, 98, 100, 131, 100, 98, 100, 40, 42, 42, + 42, 25, 39, 42, 42, 42, 89, 89, 100, 99, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 13, 14, 25, 39, 40, 41, 42, 45, + 48, 91, 118, 143, 144, 100, 13, 91, 118, 143, + 100, 99, 89, 107, 131, 135, 136, 95, 114, 54, + 114, 144, 144, 3, 92, 123, 123, 125, 3, 92, + 89, 127, 135, 74, 128, 85, 129, 130, 89, 110, + 144, 26, 54, 93, 104, 105, 106, 144, 104, 104, + 92, 92, 92, 92, 74, 139, 89, 89, 42, 131, + 66, 66, 66, 66, 89, 89, 89, 89, 89, 42, + 42, 42, 100, 92, 93, 144, 13, 144, 13, 92, + 43, 44, 119, 140, 141, 110, 89, 54, 100, 100, + 92, 121, 122, 92, 89, 89, 124, 89, 144, 100, + 100, 92, 106, 144, 93, 92, 92, 66, 85, 85, + 85, 85, 100, 13, 13, 44, 43, 89, 119, 88, + 131, 122, 100, 100, 100, 100, 100, 89, 89, 89, + 89 }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint8 yyr1[] = { - 0, 90, 91, 91, 92, 92, 92, 92, 93, 93, - 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, - 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, - 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, - 95, 94, 96, 94, 97, 94, 98, 98, 99, 99, - 100, 100, 100, 101, 94, 94, 102, 94, 103, 104, - 104, 104, 105, 106, 94, 107, 107, 94, 108, 94, - 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, - 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, - 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, - 94, 94, 94, 94, 94, 94, 94, 109, 109, 94, - 94, 94, 94, 110, 110, 110, 111, 111, 112, 112, - 112, 111, 111, 111, 113, 114, 114, 115, 116, 116, - 117, 117, 119, 118, 120, 118, 118, 118, 118, 118, - 121, 122, 122, 122, 123, 123, 123, 123, 123, 124, - 124, 124, 124, 125, 125, 126, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 128, 128, 128, 128, 129, 129, - 130, 130, 131, 131, 132, 133, 133, 134, 134, 135, - 135, 135, 136, 136, 136, 136, 136, 136, 136, 136, - 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, - 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, - 136, 136, 136, 136, 136, 136, 136, 136, 136, 137, - 137, 137, 137, 137, 137, 137, 138, 138, 138, 138, - 138, 138, 139, 139, 139, 139 + 0, 96, 97, 97, 98, 98, 98, 98, 99, 99, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 101, 100, 102, 100, 103, 100, 104, 104, 105, 105, + 106, 106, 106, 107, 100, 100, 108, 100, 109, 110, + 110, 110, 111, 112, 100, 113, 113, 100, 114, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 115, + 115, 100, 100, 100, 100, 116, 116, 116, 117, 117, + 118, 118, 118, 117, 117, 117, 119, 119, 120, 120, + 120, 120, 120, 121, 121, 122, 122, 124, 123, 125, + 123, 123, 123, 123, 123, 126, 127, 127, 127, 128, + 128, 128, 128, 128, 129, 129, 129, 129, 130, 130, + 131, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 133, 133, 133, 133, 133, 133, + 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, + 133, 133, 134, 134, 134, 134, 135, 135, 136, 136, + 137, 137, 138, 139, 139, 140, 140, 141, 141, 141, + 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 142, 142, 142, 142, 142, 143, 143, 143, + 143, 143, 143, 143, 143, 144, 144, 144, 144, 144, + 144, 145, 145, 145, 145 }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ -static const yytype_uint8 yyr2[] = +static const yytype_int8 yyr2[] = { 0, 2, 1, 1, 1, 4, 4, 4, 1, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -1351,24 +1452,25 @@ 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 3, 1, 1, 1, 1, 1, - 1, 4, 4, 7, 7, 7, 7, 1, 2, 1, - 1, 1, 1, 1, 1, 3, 2, 3, 3, 4, - 5, 1, 2, 1, 2, 1, 0, 3, 1, 1, - 1, 0, 0, 4, 0, 3, 1, 2, 1, 2, - 1, 2, 1, 1, 3, 2, 1, 2, 1, 2, - 2, 3, 3, 2, 3, 1, 1, 1, 1, 1, - 2, 3, 2, 3, 3, 3, 2, 2, 3, 4, - 3, 3, 4, 3, 4, 3, 4, 2, 3, 2, - 3, 2, 3, 1, 2, 2, 2, 3, 2, 2, - 3, 2, 2, 3, 2, 2, 3, 2, 1, 2, - 1, 5, 2, 2, 1, 1, 1, 1, 1, 3, - 1, 3, 1, 2, 2, 0, 2, 2, 2, 1, - 1, 1, 2, 2, 4, 4, 4, 4, 2, 2, + 1, 1, 1, 4, 4, 7, 7, 7, 7, 1, + 2, 1, 1, 1, 1, 1, 1, 3, 2, 3, + 3, 4, 5, 1, 2, 1, 1, 0, 1, 1, + 1, 1, 2, 1, 2, 1, 0, 0, 4, 0, + 3, 1, 2, 1, 2, 1, 2, 1, 1, 3, + 2, 1, 2, 1, 2, 2, 3, 3, 2, 3, + 1, 1, 1, 1, 2, 3, 2, 3, 3, 3, + 2, 2, 3, 4, 3, 3, 4, 3, 4, 3, + 4, 2, 3, 2, 3, 2, 3, 1, 1, 2, + 2, 1, 2, 1, 1, 1, 2, 2, 2, 3, + 2, 2, 3, 2, 2, 3, 2, 2, 3, 5, + 2, 2, 1, 1, 1, 1, 1, 3, 1, 3, + 1, 2, 2, 0, 2, 2, 2, 1, 1, 1, + 2, 2, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 3, 3, 3, 2, 1, + 2, 2, 2, 3, 3, 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1 + 1, 1, 1, 1, 1 }; @@ -1384,22 +1486,22 @@ #define YYRECOVERING() (!!yyerrstatus) -#define YYBACKUP(Token, Value) \ -do \ - if (yychar == YYEMPTY) \ - { \ - yychar = (Token); \ - yylval = (Value); \ - YYPOPSTACK (yylen); \ - yystate = *yyssp; \ - goto yybackup; \ - } \ - else \ - { \ - yyerror (YY_("syntax error: cannot back up")); \ - YYERROR; \ - } \ -while (0) +#define YYBACKUP(Token, Value) \ + do \ + if (yychar == YYEMPTY) \ + { \ + yychar = (Token); \ + yylval = (Value); \ + YYPOPSTACK (yylen); \ + yystate = *yyssp; \ + goto yybackup; \ + } \ + else \ + { \ + yyerror (YY_("syntax error: cannot back up")); \ + YYERROR; \ + } \ + while (0) /* Error token number */ #define YYTERROR 1 @@ -1439,37 +1541,39 @@ } while (0) -/*----------------------------------------. -| Print this symbol's value on YYOUTPUT. | -`----------------------------------------*/ +/*-----------------------------------. +| Print this symbol's value on YYO. | +`-----------------------------------*/ static void -yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) +yy_symbol_value_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep) { - FILE *yyo = yyoutput; - YYUSE (yyo); + FILE *yyoutput = yyo; + YYUSE (yyoutput); if (!yyvaluep) return; # ifdef YYPRINT if (yytype < YYNTOKENS) - YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); + YYPRINT (yyo, yytoknum[yytype], *yyvaluep); # endif + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN YYUSE (yytype); + YY_IGNORE_MAYBE_UNINITIALIZED_END } -/*--------------------------------. -| Print this symbol on YYOUTPUT. | -`--------------------------------*/ +/*---------------------------. +| Print this symbol on YYO. | +`---------------------------*/ static void -yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) +yy_symbol_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep) { - YYFPRINTF (yyoutput, "%s %s (", + YYFPRINTF (yyo, "%s %s (", yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]); - yy_symbol_value_print (yyoutput, yytype, yyvaluep); - YYFPRINTF (yyoutput, ")"); + yy_symbol_value_print (yyo, yytype, yyvaluep); + YYFPRINTF (yyo, ")"); } /*------------------------------------------------------------------. @@ -1478,7 +1582,7 @@ `------------------------------------------------------------------*/ static void -yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop) +yy_stack_print (yy_state_t *yybottom, yy_state_t *yytop) { YYFPRINTF (stderr, "Stack now"); for (; yybottom <= yytop; yybottom++) @@ -1501,20 +1605,20 @@ `------------------------------------------------*/ static void -yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule) +yy_reduce_print (yy_state_t *yyssp, YYSTYPE *yyvsp, int yyrule) { - unsigned long int yylno = yyrline[yyrule]; + int yylno = yyrline[yyrule]; int yynrhs = yyr2[yyrule]; int yyi; - YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", + YYFPRINTF (stderr, "Reducing stack by rule %d (line %d):\n", yyrule - 1, yylno); /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { YYFPRINTF (stderr, " $%d = ", yyi + 1); yy_symbol_print (stderr, - yystos[yyssp[yyi + 1 - yynrhs]], - &(yyvsp[(yyi + 1) - (yynrhs)]) + yystos[+yyssp[yyi + 1 - yynrhs]], + &yyvsp[(yyi + 1) - (yynrhs)] ); YYFPRINTF (stderr, "\n"); } @@ -1558,13 +1662,13 @@ # ifndef yystrlen # if defined __GLIBC__ && defined _STRING_H -# define yystrlen strlen +# define yystrlen(S) (YY_CAST (YYPTRDIFF_T, strlen (S))) # else /* Return the length of YYSTR. */ -static YYSIZE_T +static YYPTRDIFF_T yystrlen (const char *yystr) { - YYSIZE_T yylen; + YYPTRDIFF_T yylen; for (yylen = 0; yystr[yylen]; yylen++) continue; return yylen; @@ -1600,12 +1704,12 @@ backslash-backslash). YYSTR is taken from yytname. If YYRES is null, do not copy; instead, return the length of what the result would have been. */ -static YYSIZE_T +static YYPTRDIFF_T yytnamerr (char *yyres, const char *yystr) { if (*yystr == '"') { - YYSIZE_T yyn = 0; + YYPTRDIFF_T yyn = 0; char const *yyp = yystr; for (;;) @@ -1618,7 +1722,10 @@ case '\\': if (*++yyp != '\\') goto do_not_strip_quotes; - /* Fall through. */ + else + goto append; + + append: default: if (yyres) yyres[yyn] = *yyp; @@ -1633,10 +1740,10 @@ do_not_strip_quotes: ; } - if (! yyres) + if (yyres) + return yystpcpy (yyres, yystr) - yyres; + else return yystrlen (yystr); - - return yystpcpy (yyres, yystr) - yyres; } # endif @@ -1649,19 +1756,19 @@ *YYMSG_ALLOC to the required number of bytes. Return 2 if the required number of bytes is too large to store. */ static int -yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, - yytype_int16 *yyssp, int yytoken) +yysyntax_error (YYPTRDIFF_T *yymsg_alloc, char **yymsg, + yy_state_t *yyssp, int yytoken) { - YYSIZE_T yysize0 = yytnamerr (YY_NULLPTRPTR, yytname[yytoken]); - YYSIZE_T yysize = yysize0; enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; /* Internationalized format string. */ const char *yyformat = YY_NULLPTRPTR; - /* Arguments of yyformat. */ + /* Arguments of yyformat: reported tokens (one for the "unexpected", + one per "expected"). */ char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; - /* Number of reported tokens (one for the "unexpected", one per - "expected"). */ + /* Actual size of YYARG. */ int yycount = 0; + /* Cumulated lengths of YYARG. */ + YYPTRDIFF_T yysize = 0; /* There are many possibilities here to consider: - If this state is a consistent state with a default action, then @@ -1688,7 +1795,9 @@ */ if (yytoken != YYEMPTY) { - int yyn = yypact[*yyssp]; + int yyn = yypact[+*yyssp]; + YYPTRDIFF_T yysize0 = yytnamerr (YY_NULLPTRPTR, yytname[yytoken]); + yysize = yysize0; yyarg[yycount++] = yytname[yytoken]; if (!yypact_value_is_default (yyn)) { @@ -1713,11 +1822,12 @@ } yyarg[yycount++] = yytname[yyx]; { - YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTRPTR, yytname[yyx]); - if (! (yysize <= yysize1 - && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) + YYPTRDIFF_T yysize1 + = yysize + yytnamerr (YY_NULLPTRPTR, yytname[yyx]); + if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM) + yysize = yysize1; + else return 2; - yysize = yysize1; } } } @@ -1729,6 +1839,7 @@ case N: \ yyformat = S; \ break + default: /* Avoid compiler warnings. */ YYCASE_(0, YY_("syntax error")); YYCASE_(1, YY_("syntax error, unexpected %s")); YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); @@ -1739,10 +1850,13 @@ } { - YYSIZE_T yysize1 = yysize + yystrlen (yyformat); - if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) + /* Don't count the "%s"s in the final size, but reserve room for + the terminator. */ + YYPTRDIFF_T yysize1 = yysize + (yystrlen (yyformat) - 2 * yycount) + 1; + if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM) + yysize = yysize1; + else return 2; - yysize = yysize1; } if (*yymsg_alloc < yysize) @@ -1768,8 +1882,8 @@ } else { - yyp++; - yyformat++; + ++yyp; + ++yyformat; } } return 0; @@ -1812,7 +1926,7 @@ int yyparse (void) { - int yystate; + yy_state_fast_t yystate; /* Number of tokens to shift before error messages enabled. */ int yyerrstatus; @@ -1824,16 +1938,16 @@ to xreallocate them elsewhere. */ /* The state stack. */ - yytype_int16 yyssa[YYINITDEPTH]; - yytype_int16 *yyss; - yytype_int16 *yyssp; + yy_state_t yyssa[YYINITDEPTH]; + yy_state_t *yyss; + yy_state_t *yyssp; /* The semantic value stack. */ YYSTYPE yyvsa[YYINITDEPTH]; YYSTYPE *yyvs; YYSTYPE *yyvsp; - YYSIZE_T yystacksize; + YYPTRDIFF_T yystacksize; int yyn; int yyresult; @@ -1847,7 +1961,7 @@ /* Buffer for error messages, and its allocated size. */ char yymsgbuf[128]; char *yymsg = yymsgbuf; - YYSIZE_T yymsg_alloc = sizeof yymsgbuf; + YYPTRDIFF_T yymsg_alloc = sizeof yymsgbuf; #endif #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) @@ -1868,46 +1982,54 @@ yychar = YYEMPTY; /* Cause a token to be read. */ goto yysetstate; + /*------------------------------------------------------------. -| yynewstate -- Push a new state, which is found in yystate. | +| yynewstate -- push a new state, which is found in yystate. | `------------------------------------------------------------*/ - yynewstate: +yynewstate: /* In all cases, when you get here, the value and location stacks have just been pushed. So pushing a state here evens the stacks. */ yyssp++; - yysetstate: - *yyssp = yystate; + +/*--------------------------------------------------------------------. +| yysetstate -- set current state (the top of the stack) to yystate. | +`--------------------------------------------------------------------*/ +yysetstate: + YYDPRINTF ((stderr, "Entering state %d\n", yystate)); + YY_ASSERT (0 <= yystate && yystate < YYNSTATES); + YY_IGNORE_USELESS_CAST_BEGIN + *yyssp = YY_CAST (yy_state_t, yystate); + YY_IGNORE_USELESS_CAST_END if (yyss + yystacksize - 1 <= yyssp) +#if !defined yyoverflow && !defined YYSTACK_RELOCATE + goto yyexhaustedlab; +#else { /* Get the current used size of the three stacks, in elements. */ - YYSIZE_T yysize = yyssp - yyss + 1; + YYPTRDIFF_T yysize = yyssp - yyss + 1; -#ifdef yyoverflow +# if defined yyoverflow { /* Give user a chance to xreallocate the stack. Use copies of these so that the &'s don't force the real ones into memory. */ + yy_state_t *yyss1 = yyss; YYSTYPE *yyvs1 = yyvs; - yytype_int16 *yyss1 = yyss; /* Each stack pointer address is followed by the size of the data in use in that stack, in bytes. This used to be a conditional around just the two extra args, but that might be undefined if yyoverflow is a macro. */ yyoverflow (YY_("memory exhausted"), - &yyss1, yysize * sizeof (*yyssp), - &yyvs1, yysize * sizeof (*yyvsp), + &yyss1, yysize * YYSIZEOF (*yyssp), + &yyvs1, yysize * YYSIZEOF (*yyvsp), &yystacksize); - yyss = yyss1; yyvs = yyvs1; } -#else /* no yyoverflow */ -# ifndef YYSTACK_RELOCATE - goto yyexhaustedlab; -# else +# else /* defined YYSTACK_RELOCATE */ /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) goto yyexhaustedlab; @@ -1916,42 +2038,43 @@ yystacksize = YYMAXDEPTH; { - yytype_int16 *yyss1 = yyss; + yy_state_t *yyss1 = yyss; union yyalloc *yyptr = - (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); + YY_CAST (union yyalloc *, + YYSTACK_ALLOC (YY_CAST (YYSIZE_T, YYSTACK_BYTES (yystacksize)))); if (! yyptr) goto yyexhaustedlab; YYSTACK_RELOCATE (yyss_alloc, yyss); YYSTACK_RELOCATE (yyvs_alloc, yyvs); -# undef YYSTACK_RELOCATE +# undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); } # endif -#endif /* no yyoverflow */ yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; - YYDPRINTF ((stderr, "Stack size increased to %lu\n", - (unsigned long int) yystacksize)); + YY_IGNORE_USELESS_CAST_BEGIN + YYDPRINTF ((stderr, "Stack size increased to %ld\n", + YY_CAST (long, yystacksize))); + YY_IGNORE_USELESS_CAST_END if (yyss + yystacksize - 1 <= yyssp) YYABORT; } - - YYDPRINTF ((stderr, "Entering state %d\n", yystate)); +#endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */ if (yystate == YYFINAL) YYACCEPT; goto yybackup; + /*-----------. | yybackup. | `-----------*/ yybackup: - /* Do appropriate processing given the current state. Read a lookahead token if we need one and don't already have one. */ @@ -2001,15 +2124,13 @@ /* Shift the lookahead token. */ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); - - /* Discard the shifted token. */ - yychar = YYEMPTY; - yystate = yyn; YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; YY_IGNORE_MAYBE_UNINITIALIZED_END + /* Discard the shifted token. */ + yychar = YYEMPTY; goto yynewstate; @@ -2024,7 +2145,7 @@ /*-----------------------------. -| yyreduce -- Do a reduction. | +| yyreduce -- do a reduction. | `-----------------------------*/ yyreduce: /* yyn is the number of a rule to reduce with. */ @@ -2044,269 +2165,269 @@ YY_REDUCE_PRINT (yyn); switch (yyn) { - case 4: -#line 282 "c-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode(pstate, OP_TYPE); + case 4: +#line 285 "c-exp.y" + { write_exp_elt_opcode(pstate, OP_TYPE); write_exp_elt_type(pstate, (yyvsp[0].tval)); write_exp_elt_opcode(pstate, OP_TYPE);} -#line 2054 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 2175 "c-exp.c.tmp" break; case 5: -#line 286 "c-exp.y" /* yacc.c:1646 */ - { +#line 289 "c-exp.y" + { write_exp_elt_opcode (pstate, OP_TYPEOF); } -#line 2062 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 2183 "c-exp.c.tmp" break; case 6: -#line 290 "c-exp.y" /* yacc.c:1646 */ - { +#line 293 "c-exp.y" + { write_exp_elt_opcode (pstate, OP_TYPE); write_exp_elt_type (pstate, (yyvsp[-1].tval)); write_exp_elt_opcode (pstate, OP_TYPE); } -#line 2072 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 2193 "c-exp.c.tmp" break; case 7: -#line 296 "c-exp.y" /* yacc.c:1646 */ - { +#line 299 "c-exp.y" + { write_exp_elt_opcode (pstate, OP_DECLTYPE); } -#line 2080 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 2201 "c-exp.c.tmp" break; case 9: -#line 304 "c-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_COMMA); } -#line 2086 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 307 "c-exp.y" + { write_exp_elt_opcode (pstate, BINOP_COMMA); } +#line 2207 "c-exp.c.tmp" break; case 10: -#line 309 "c-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_IND); } -#line 2092 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 312 "c-exp.y" + { write_exp_elt_opcode (pstate, UNOP_IND); } +#line 2213 "c-exp.c.tmp" break; case 11: -#line 313 "c-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_ADDR); } -#line 2098 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 316 "c-exp.y" + { write_exp_elt_opcode (pstate, UNOP_ADDR); } +#line 2219 "c-exp.c.tmp" break; case 12: -#line 317 "c-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_NEG); } -#line 2104 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 320 "c-exp.y" + { write_exp_elt_opcode (pstate, UNOP_NEG); } +#line 2225 "c-exp.c.tmp" break; case 13: -#line 321 "c-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_PLUS); } -#line 2110 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 324 "c-exp.y" + { write_exp_elt_opcode (pstate, UNOP_PLUS); } +#line 2231 "c-exp.c.tmp" break; case 14: -#line 325 "c-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_LOGICAL_NOT); } -#line 2116 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 328 "c-exp.y" + { write_exp_elt_opcode (pstate, UNOP_LOGICAL_NOT); } +#line 2237 "c-exp.c.tmp" break; case 15: -#line 329 "c-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_COMPLEMENT); } -#line 2122 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 332 "c-exp.y" + { write_exp_elt_opcode (pstate, UNOP_COMPLEMENT); } +#line 2243 "c-exp.c.tmp" break; case 16: -#line 333 "c-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_PREINCREMENT); } -#line 2128 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 336 "c-exp.y" + { write_exp_elt_opcode (pstate, UNOP_PREINCREMENT); } +#line 2249 "c-exp.c.tmp" break; case 17: -#line 337 "c-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_PREDECREMENT); } -#line 2134 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 340 "c-exp.y" + { write_exp_elt_opcode (pstate, UNOP_PREDECREMENT); } +#line 2255 "c-exp.c.tmp" break; case 18: -#line 341 "c-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_POSTINCREMENT); } -#line 2140 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 344 "c-exp.y" + { write_exp_elt_opcode (pstate, UNOP_POSTINCREMENT); } +#line 2261 "c-exp.c.tmp" break; case 19: -#line 345 "c-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_POSTDECREMENT); } -#line 2146 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 348 "c-exp.y" + { write_exp_elt_opcode (pstate, UNOP_POSTDECREMENT); } +#line 2267 "c-exp.c.tmp" break; case 20: -#line 349 "c-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, OP_TYPEID); } -#line 2152 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 352 "c-exp.y" + { write_exp_elt_opcode (pstate, OP_TYPEID); } +#line 2273 "c-exp.c.tmp" break; case 21: -#line 353 "c-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, OP_TYPEID); } -#line 2158 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 356 "c-exp.y" + { write_exp_elt_opcode (pstate, OP_TYPEID); } +#line 2279 "c-exp.c.tmp" break; case 22: -#line 357 "c-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_SIZEOF); } -#line 2164 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 360 "c-exp.y" + { write_exp_elt_opcode (pstate, UNOP_SIZEOF); } +#line 2285 "c-exp.c.tmp" break; case 23: -#line 361 "c-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_ALIGNOF); } -#line 2170 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 364 "c-exp.y" + { write_exp_elt_opcode (pstate, UNOP_ALIGNOF); } +#line 2291 "c-exp.c.tmp" break; case 24: -#line 365 "c-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, STRUCTOP_PTR); +#line 368 "c-exp.y" + { write_exp_elt_opcode (pstate, STRUCTOP_PTR); write_exp_string (pstate, (yyvsp[0].sval)); write_exp_elt_opcode (pstate, STRUCTOP_PTR); } -#line 2178 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 2299 "c-exp.c.tmp" break; case 25: -#line 371 "c-exp.y" /* yacc.c:1646 */ - { pstate->mark_struct_expression (); +#line 374 "c-exp.y" + { pstate->mark_struct_expression (); write_exp_elt_opcode (pstate, STRUCTOP_PTR); write_exp_string (pstate, (yyvsp[-1].sval)); write_exp_elt_opcode (pstate, STRUCTOP_PTR); } -#line 2187 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 2308 "c-exp.c.tmp" break; case 26: -#line 378 "c-exp.y" /* yacc.c:1646 */ - { struct stoken s; +#line 381 "c-exp.y" + { struct stoken s; pstate->mark_struct_expression (); write_exp_elt_opcode (pstate, STRUCTOP_PTR); s.ptr = ""; s.length = 0; write_exp_string (pstate, s); write_exp_elt_opcode (pstate, STRUCTOP_PTR); } -#line 2199 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 2320 "c-exp.c.tmp" break; case 27: -#line 388 "c-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, STRUCTOP_PTR); +#line 391 "c-exp.y" + { write_exp_elt_opcode (pstate, STRUCTOP_PTR); write_destructor_name (pstate, (yyvsp[0].sval)); write_exp_elt_opcode (pstate, STRUCTOP_PTR); } -#line 2207 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 2328 "c-exp.c.tmp" break; case 28: -#line 394 "c-exp.y" /* yacc.c:1646 */ - { pstate->mark_struct_expression (); +#line 397 "c-exp.y" + { pstate->mark_struct_expression (); write_exp_elt_opcode (pstate, STRUCTOP_PTR); write_destructor_name (pstate, (yyvsp[-1].sval)); write_exp_elt_opcode (pstate, STRUCTOP_PTR); } -#line 2216 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 2337 "c-exp.c.tmp" break; case 29: -#line 401 "c-exp.y" /* yacc.c:1646 */ - { /* exp->type::name becomes exp->*(&type::name) */ +#line 404 "c-exp.y" + { /* exp->type::name becomes exp->*(&type::name) */ /* Note: this doesn't work if name is a static member! FIXME */ write_exp_elt_opcode (pstate, UNOP_ADDR); write_exp_elt_opcode (pstate, STRUCTOP_MPTR); } -#line 2226 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 2347 "c-exp.c.tmp" break; case 30: -#line 409 "c-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, STRUCTOP_MPTR); } -#line 2232 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 412 "c-exp.y" + { write_exp_elt_opcode (pstate, STRUCTOP_MPTR); } +#line 2353 "c-exp.c.tmp" break; case 31: -#line 413 "c-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); +#line 416 "c-exp.y" + { write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); write_exp_string (pstate, (yyvsp[0].sval)); write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); } -#line 2240 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 2361 "c-exp.c.tmp" break; case 32: -#line 419 "c-exp.y" /* yacc.c:1646 */ - { pstate->mark_struct_expression (); +#line 422 "c-exp.y" + { pstate->mark_struct_expression (); write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); write_exp_string (pstate, (yyvsp[-1].sval)); write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); } -#line 2249 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 2370 "c-exp.c.tmp" break; case 33: -#line 426 "c-exp.y" /* yacc.c:1646 */ - { struct stoken s; +#line 429 "c-exp.y" + { struct stoken s; pstate->mark_struct_expression (); write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); s.ptr = ""; s.length = 0; write_exp_string (pstate, s); write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); } -#line 2261 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 2382 "c-exp.c.tmp" break; case 34: -#line 436 "c-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); +#line 439 "c-exp.y" + { write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); write_destructor_name (pstate, (yyvsp[0].sval)); write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); } -#line 2269 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 2390 "c-exp.c.tmp" break; case 35: -#line 442 "c-exp.y" /* yacc.c:1646 */ - { pstate->mark_struct_expression (); +#line 445 "c-exp.y" + { pstate->mark_struct_expression (); write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); write_destructor_name (pstate, (yyvsp[-1].sval)); write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); } -#line 2278 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 2399 "c-exp.c.tmp" break; case 36: -#line 449 "c-exp.y" /* yacc.c:1646 */ - { /* exp.type::name becomes exp.*(&type::name) */ +#line 452 "c-exp.y" + { /* exp.type::name becomes exp.*(&type::name) */ /* Note: this doesn't work if name is a static member! FIXME */ write_exp_elt_opcode (pstate, UNOP_ADDR); write_exp_elt_opcode (pstate, STRUCTOP_MEMBER); } -#line 2288 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 2409 "c-exp.c.tmp" break; case 37: -#line 457 "c-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, STRUCTOP_MEMBER); } -#line 2294 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 460 "c-exp.y" + { write_exp_elt_opcode (pstate, STRUCTOP_MEMBER); } +#line 2415 "c-exp.c.tmp" break; case 38: -#line 461 "c-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_SUBSCRIPT); } -#line 2300 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 464 "c-exp.y" + { write_exp_elt_opcode (pstate, BINOP_SUBSCRIPT); } +#line 2421 "c-exp.c.tmp" break; case 39: -#line 465 "c-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_SUBSCRIPT); } -#line 2306 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 468 "c-exp.y" + { write_exp_elt_opcode (pstate, BINOP_SUBSCRIPT); } +#line 2427 "c-exp.c.tmp" break; case 40: -#line 474 "c-exp.y" /* yacc.c:1646 */ - { +#line 477 "c-exp.y" + { CORE_ADDR theclass; std::string copy = copy_name ((yyvsp[0].tsym).stoken); @@ -2322,21 +2443,21 @@ write_exp_elt_opcode (pstate, OP_LONG); start_msglist(); } -#line 2327 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 2448 "c-exp.c.tmp" break; case 41: -#line 491 "c-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, OP_OBJC_MSGCALL); +#line 494 "c-exp.y" + { write_exp_elt_opcode (pstate, OP_OBJC_MSGCALL); end_msglist (pstate); write_exp_elt_opcode (pstate, OP_OBJC_MSGCALL); } -#line 2336 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 2457 "c-exp.c.tmp" break; case 42: -#line 498 "c-exp.y" /* yacc.c:1646 */ - { +#line 501 "c-exp.y" + { write_exp_elt_opcode (pstate, OP_LONG); write_exp_elt_type (pstate, parse_type (pstate)->builtin_int); @@ -2344,85 +2465,85 @@ write_exp_elt_opcode (pstate, OP_LONG); start_msglist(); } -#line 2349 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 2470 "c-exp.c.tmp" break; case 43: -#line 507 "c-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, OP_OBJC_MSGCALL); +#line 510 "c-exp.y" + { write_exp_elt_opcode (pstate, OP_OBJC_MSGCALL); end_msglist (pstate); write_exp_elt_opcode (pstate, OP_OBJC_MSGCALL); } -#line 2358 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 2479 "c-exp.c.tmp" break; case 44: -#line 514 "c-exp.y" /* yacc.c:1646 */ - { start_msglist(); } -#line 2364 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 517 "c-exp.y" + { start_msglist(); } +#line 2485 "c-exp.c.tmp" break; case 45: -#line 516 "c-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, OP_OBJC_MSGCALL); +#line 519 "c-exp.y" + { write_exp_elt_opcode (pstate, OP_OBJC_MSGCALL); end_msglist (pstate); write_exp_elt_opcode (pstate, OP_OBJC_MSGCALL); } -#line 2373 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 2494 "c-exp.c.tmp" break; case 46: -#line 523 "c-exp.y" /* yacc.c:1646 */ - { add_msglist(&(yyvsp[0].sval), 0); } -#line 2379 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 526 "c-exp.y" + { add_msglist(&(yyvsp[0].sval), 0); } +#line 2500 "c-exp.c.tmp" break; case 50: -#line 532 "c-exp.y" /* yacc.c:1646 */ - { add_msglist(&(yyvsp[-2].sval), 1); } -#line 2385 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 535 "c-exp.y" + { add_msglist(&(yyvsp[-2].sval), 1); } +#line 2506 "c-exp.c.tmp" break; case 51: -#line 534 "c-exp.y" /* yacc.c:1646 */ - { add_msglist(0, 1); } -#line 2391 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 537 "c-exp.y" + { add_msglist(0, 1); } +#line 2512 "c-exp.c.tmp" break; case 52: -#line 536 "c-exp.y" /* yacc.c:1646 */ - { add_msglist(0, 0); } -#line 2397 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 539 "c-exp.y" + { add_msglist(0, 0); } +#line 2518 "c-exp.c.tmp" break; case 53: -#line 542 "c-exp.y" /* yacc.c:1646 */ - { pstate->start_arglist (); } -#line 2403 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 545 "c-exp.y" + { pstate->start_arglist (); } +#line 2524 "c-exp.c.tmp" break; case 54: -#line 544 "c-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, OP_FUNCALL); +#line 547 "c-exp.y" + { write_exp_elt_opcode (pstate, OP_FUNCALL); write_exp_elt_longcst (pstate, pstate->end_arglist ()); write_exp_elt_opcode (pstate, OP_FUNCALL); } -#line 2412 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 2533 "c-exp.c.tmp" break; case 55: -#line 554 "c-exp.y" /* yacc.c:1646 */ - { pstate->start_arglist (); +#line 557 "c-exp.y" + { pstate->start_arglist (); write_exp_elt_opcode (pstate, OP_FUNCALL); write_exp_elt_longcst (pstate, pstate->end_arglist ()); write_exp_elt_opcode (pstate, OP_FUNCALL); } -#line 2422 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 2543 "c-exp.c.tmp" break; case 56: -#line 563 "c-exp.y" /* yacc.c:1646 */ - { +#line 566 "c-exp.y" + { /* This could potentially be a an argument defined lookup function (Koenig). */ write_exp_elt_opcode (pstate, OP_ADL_FUNC); @@ -2438,41 +2559,41 @@ pstate->start_arglist (); } -#line 2443 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 2564 "c-exp.c.tmp" break; case 57: -#line 580 "c-exp.y" /* yacc.c:1646 */ - { +#line 583 "c-exp.y" + { write_exp_elt_opcode (pstate, OP_FUNCALL); write_exp_elt_longcst (pstate, pstate->end_arglist ()); write_exp_elt_opcode (pstate, OP_FUNCALL); } -#line 2454 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 2575 "c-exp.c.tmp" break; case 58: -#line 589 "c-exp.y" /* yacc.c:1646 */ - { pstate->start_arglist (); } -#line 2460 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 592 "c-exp.y" + { pstate->start_arglist (); } +#line 2581 "c-exp.c.tmp" break; case 60: -#line 596 "c-exp.y" /* yacc.c:1646 */ - { pstate->arglist_len = 1; } -#line 2466 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 599 "c-exp.y" + { pstate->arglist_len = 1; } +#line 2587 "c-exp.c.tmp" break; case 61: -#line 600 "c-exp.y" /* yacc.c:1646 */ - { pstate->arglist_len++; } -#line 2472 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 603 "c-exp.y" + { pstate->arglist_len++; } +#line 2593 "c-exp.c.tmp" break; case 62: -#line 604 "c-exp.y" /* yacc.c:1646 */ - { +#line 607 "c-exp.y" + { std::vector *type_list = (yyvsp[-2].tvec); LONGEST len = type_list->size (); @@ -2490,12 +2611,12 @@ write_exp_elt_longcst(pstate, len); write_exp_elt_opcode (pstate, TYPE_INSTANCE); } -#line 2495 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 2616 "c-exp.c.tmp" break; case 63: -#line 625 "c-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, TYPE_INSTANCE); +#line 628 "c-exp.y" + { write_exp_elt_opcode (pstate, TYPE_INSTANCE); /* See above. */ write_exp_elt_longcst (pstate, @@ -2504,210 +2625,228 @@ write_exp_elt_longcst (pstate, 0); write_exp_elt_opcode (pstate, TYPE_INSTANCE); } -#line 2509 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 2630 "c-exp.c.tmp" break; case 67: -#line 648 "c-exp.y" /* yacc.c:1646 */ - { +#line 651 "c-exp.y" + { write_exp_elt_opcode (pstate, OP_FUNC_STATIC_VAR); write_exp_string (pstate, (yyvsp[0].sval)); write_exp_elt_opcode (pstate, OP_FUNC_STATIC_VAR); } -#line 2519 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 2640 "c-exp.c.tmp" break; case 68: -#line 656 "c-exp.y" /* yacc.c:1646 */ - { (yyval.lval) = pstate->end_arglist () - 1; } -#line 2525 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 659 "c-exp.y" + { (yyval.lval) = pstate->end_arglist () - 1; } +#line 2646 "c-exp.c.tmp" break; case 69: -#line 659 "c-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, OP_ARRAY); +#line 662 "c-exp.y" + { write_exp_elt_opcode (pstate, OP_ARRAY); write_exp_elt_longcst (pstate, (LONGEST) 0); write_exp_elt_longcst (pstate, (LONGEST) (yyvsp[0].lval)); write_exp_elt_opcode (pstate, OP_ARRAY); } -#line 2534 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 2655 "c-exp.c.tmp" break; case 70: -#line 666 "c-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_MEMVAL_TYPE); } -#line 2540 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 669 "c-exp.y" + { write_exp_elt_opcode (pstate, UNOP_MEMVAL_TYPE); } +#line 2661 "c-exp.c.tmp" break; case 71: -#line 670 "c-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_CAST_TYPE); } -#line 2546 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 673 "c-exp.y" + { write_exp_elt_opcode (pstate, UNOP_CAST_TYPE); } +#line 2667 "c-exp.c.tmp" break; case 72: -#line 674 "c-exp.y" /* yacc.c:1646 */ - { } -#line 2552 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 677 "c-exp.y" + { } +#line 2673 "c-exp.c.tmp" break; case 73: -#line 680 "c-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_REPEAT); } -#line 2558 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 683 "c-exp.y" + { write_exp_elt_opcode (pstate, BINOP_REPEAT); } +#line 2679 "c-exp.c.tmp" break; case 74: -#line 684 "c-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_MUL); } -#line 2564 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 687 "c-exp.y" + { write_exp_elt_opcode (pstate, BINOP_MUL); } +#line 2685 "c-exp.c.tmp" break; case 75: -#line 688 "c-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_DIV); } -#line 2570 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 691 "c-exp.y" + { write_exp_elt_opcode (pstate, BINOP_DIV); } +#line 2691 "c-exp.c.tmp" break; case 76: -#line 692 "c-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_REM); } -#line 2576 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 695 "c-exp.y" + { write_exp_elt_opcode (pstate, BINOP_REM); } +#line 2697 "c-exp.c.tmp" break; case 77: -#line 696 "c-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_ADD); } -#line 2582 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 699 "c-exp.y" + { write_exp_elt_opcode (pstate, BINOP_ADD); } +#line 2703 "c-exp.c.tmp" break; case 78: -#line 700 "c-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_SUB); } -#line 2588 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 703 "c-exp.y" + { write_exp_elt_opcode (pstate, BINOP_SUB); } +#line 2709 "c-exp.c.tmp" break; case 79: -#line 704 "c-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_LSH); } -#line 2594 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 707 "c-exp.y" + { write_exp_elt_opcode (pstate, BINOP_LSH); } +#line 2715 "c-exp.c.tmp" break; case 80: -#line 708 "c-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_RSH); } -#line 2600 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 711 "c-exp.y" + { write_exp_elt_opcode (pstate, BINOP_RSH); } +#line 2721 "c-exp.c.tmp" break; case 81: -#line 712 "c-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_EQUAL); } -#line 2606 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 715 "c-exp.y" + { write_exp_elt_opcode (pstate, BINOP_EQUAL); } +#line 2727 "c-exp.c.tmp" break; case 82: -#line 716 "c-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_NOTEQUAL); } -#line 2612 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 719 "c-exp.y" + { write_exp_elt_opcode (pstate, BINOP_NOTEQUAL); } +#line 2733 "c-exp.c.tmp" break; case 83: -#line 720 "c-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_LEQ); } -#line 2618 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 723 "c-exp.y" + { write_exp_elt_opcode (pstate, BINOP_LEQ); } +#line 2739 "c-exp.c.tmp" break; case 84: -#line 724 "c-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_GEQ); } -#line 2624 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 727 "c-exp.y" + { write_exp_elt_opcode (pstate, BINOP_GEQ); } +#line 2745 "c-exp.c.tmp" break; case 85: -#line 728 "c-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_LESS); } -#line 2630 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 731 "c-exp.y" + { write_exp_elt_opcode (pstate, BINOP_LESS); } +#line 2751 "c-exp.c.tmp" break; case 86: -#line 732 "c-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_GTR); } -#line 2636 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 735 "c-exp.y" + { write_exp_elt_opcode (pstate, BINOP_GTR); } +#line 2757 "c-exp.c.tmp" break; case 87: -#line 736 "c-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_BITWISE_AND); } -#line 2642 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 739 "c-exp.y" + { write_exp_elt_opcode (pstate, BINOP_BITWISE_AND); } +#line 2763 "c-exp.c.tmp" break; case 88: -#line 740 "c-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_BITWISE_XOR); } -#line 2648 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 743 "c-exp.y" + { write_exp_elt_opcode (pstate, BINOP_BITWISE_XOR); } +#line 2769 "c-exp.c.tmp" break; case 89: -#line 744 "c-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_BITWISE_IOR); } -#line 2654 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 747 "c-exp.y" + { write_exp_elt_opcode (pstate, BINOP_BITWISE_IOR); } +#line 2775 "c-exp.c.tmp" break; case 90: -#line 748 "c-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_LOGICAL_AND); } -#line 2660 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 751 "c-exp.y" + { write_exp_elt_opcode (pstate, BINOP_LOGICAL_AND); } +#line 2781 "c-exp.c.tmp" break; case 91: -#line 752 "c-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_LOGICAL_OR); } -#line 2666 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 755 "c-exp.y" + { write_exp_elt_opcode (pstate, BINOP_LOGICAL_OR); } +#line 2787 "c-exp.c.tmp" break; case 92: -#line 756 "c-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, TERNOP_COND); } -#line 2672 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 759 "c-exp.y" + { write_exp_elt_opcode (pstate, TERNOP_COND); } +#line 2793 "c-exp.c.tmp" break; case 93: -#line 760 "c-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_ASSIGN); } -#line 2678 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 763 "c-exp.y" + { write_exp_elt_opcode (pstate, BINOP_ASSIGN); } +#line 2799 "c-exp.c.tmp" break; case 94: -#line 764 "c-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_ASSIGN_MODIFY); +#line 767 "c-exp.y" + { write_exp_elt_opcode (pstate, BINOP_ASSIGN_MODIFY); write_exp_elt_opcode (pstate, (yyvsp[-1].opcode)); write_exp_elt_opcode (pstate, BINOP_ASSIGN_MODIFY); } -#line 2687 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 2808 "c-exp.c.tmp" break; case 95: -#line 771 "c-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, OP_LONG); +#line 774 "c-exp.y" + { write_exp_elt_opcode (pstate, OP_LONG); write_exp_elt_type (pstate, (yyvsp[0].typed_val_int).type); write_exp_elt_longcst (pstate, (LONGEST) ((yyvsp[0].typed_val_int).val)); write_exp_elt_opcode (pstate, OP_LONG); } -#line 2696 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 2817 "c-exp.c.tmp" break; case 96: -#line 778 "c-exp.y" /* yacc.c:1646 */ - { +#line 781 "c-exp.y" + { + write_exp_elt_opcode (pstate, OP_LONG); + write_exp_elt_type (pstate, TYPE_TARGET_TYPE ((yyvsp[0].typed_val_int).type)); + write_exp_elt_longcst (pstate, 0); + write_exp_elt_opcode (pstate, OP_LONG); + write_exp_elt_opcode (pstate, OP_LONG); + write_exp_elt_type (pstate, TYPE_TARGET_TYPE ((yyvsp[0].typed_val_int).type)); + write_exp_elt_longcst (pstate, (LONGEST) ((yyvsp[0].typed_val_int).val)); + write_exp_elt_opcode (pstate, OP_LONG); + write_exp_elt_opcode (pstate, OP_COMPLEX); + write_exp_elt_type (pstate, (yyvsp[0].typed_val_int).type); + write_exp_elt_opcode (pstate, OP_COMPLEX); + } +#line 2835 "c-exp.c.tmp" + break; + + case 97: +#line 797 "c-exp.y" + { struct stoken_vector vec; vec.len = 1; vec.tokens = &(yyvsp[0].tsval); write_exp_string_vector (pstate, (yyvsp[0].tsval).type, &vec); } -#line 2707 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 2846 "c-exp.c.tmp" break; - case 97: -#line 787 "c-exp.y" /* yacc.c:1646 */ - { YYSTYPE val; + case 98: +#line 806 "c-exp.y" + { YYSTYPE val; parse_number (pstate, (yyvsp[0].ssym).stoken.ptr, (yyvsp[0].ssym).stoken.length, 0, &val); write_exp_elt_opcode (pstate, OP_LONG); @@ -2716,38 +2855,61 @@ (LONGEST) val.typed_val_int.val); write_exp_elt_opcode (pstate, OP_LONG); } -#line 2721 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 2860 "c-exp.c.tmp" break; - case 98: -#line 800 "c-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, OP_FLOAT); + case 99: +#line 819 "c-exp.y" + { write_exp_elt_opcode (pstate, OP_FLOAT); write_exp_elt_type (pstate, (yyvsp[0].typed_val_float).type); write_exp_elt_floatcst (pstate, (yyvsp[0].typed_val_float).val); write_exp_elt_opcode (pstate, OP_FLOAT); } -#line 2730 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 2869 "c-exp.c.tmp" break; case 100: -#line 810 "c-exp.y" /* yacc.c:1646 */ - { +#line 826 "c-exp.y" + { + struct type *underlying + = TYPE_TARGET_TYPE ((yyvsp[0].typed_val_float).type); + + write_exp_elt_opcode (pstate, OP_FLOAT); + write_exp_elt_type (pstate, underlying); + gdb_byte val[16]; + target_float_from_host_double (val, underlying, 0); + write_exp_elt_floatcst (pstate, val); + write_exp_elt_opcode (pstate, OP_FLOAT); + write_exp_elt_opcode (pstate, OP_FLOAT); + write_exp_elt_type (pstate, underlying); + write_exp_elt_floatcst (pstate, (yyvsp[0].typed_val_float).val); + write_exp_elt_opcode (pstate, OP_FLOAT); + write_exp_elt_opcode (pstate, OP_COMPLEX); + write_exp_elt_type (pstate, (yyvsp[0].typed_val_float).type); + write_exp_elt_opcode (pstate, OP_COMPLEX); + } +#line 2892 "c-exp.c.tmp" + break; + + case 102: +#line 850 "c-exp.y" + { write_dollar_variable (pstate, (yyvsp[0].sval)); } -#line 2738 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 2900 "c-exp.c.tmp" break; - case 101: -#line 816 "c-exp.y" /* yacc.c:1646 */ - { + case 103: +#line 856 "c-exp.y" + { write_exp_elt_opcode (pstate, OP_OBJC_SELECTOR); write_exp_string (pstate, (yyvsp[-1].sval)); write_exp_elt_opcode (pstate, OP_OBJC_SELECTOR); } -#line 2747 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 2909 "c-exp.c.tmp" break; - case 102: -#line 823 "c-exp.y" /* yacc.c:1646 */ - { struct type *type = (yyvsp[-1].tval); + case 104: +#line 863 "c-exp.y" + { struct type *type = (yyvsp[-1].tval); write_exp_elt_opcode (pstate, OP_LONG); write_exp_elt_type (pstate, lookup_signed_typename (pstate->language (), @@ -2763,39 +2925,39 @@ write_exp_elt_longcst (pstate, (LONGEST) TYPE_LENGTH (type)); write_exp_elt_opcode (pstate, OP_LONG); } -#line 2768 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 2930 "c-exp.c.tmp" break; - case 103: -#line 842 "c-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, + case 105: +#line 882 "c-exp.y" + { write_exp_elt_opcode (pstate, UNOP_REINTERPRET_CAST); } -#line 2775 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 2937 "c-exp.c.tmp" break; - case 104: -#line 847 "c-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_CAST_TYPE); } -#line 2781 "c-exp.c.tmp" /* yacc.c:1646 */ + case 106: +#line 887 "c-exp.y" + { write_exp_elt_opcode (pstate, UNOP_CAST_TYPE); } +#line 2943 "c-exp.c.tmp" break; - case 105: -#line 851 "c-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_DYNAMIC_CAST); } -#line 2787 "c-exp.c.tmp" /* yacc.c:1646 */ + case 107: +#line 891 "c-exp.y" + { write_exp_elt_opcode (pstate, UNOP_DYNAMIC_CAST); } +#line 2949 "c-exp.c.tmp" break; - case 106: -#line 855 "c-exp.y" /* yacc.c:1646 */ - { /* We could do more error checking here, but + case 108: +#line 895 "c-exp.y" + { /* We could do more error checking here, but it doesn't seem worthwhile. */ write_exp_elt_opcode (pstate, UNOP_CAST_TYPE); } -#line 2795 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 2957 "c-exp.c.tmp" break; - case 107: -#line 862 "c-exp.y" /* yacc.c:1646 */ - { + case 109: +#line 902 "c-exp.y" + { /* We copy the string here, and not in the lexer, to guarantee that we do not leak a string. Note that we follow the @@ -2810,12 +2972,12 @@ vec->ptr = (char *) xmalloc ((yyvsp[0].tsval).length + 1); memcpy (vec->ptr, (yyvsp[0].tsval).ptr, (yyvsp[0].tsval).length + 1); } -#line 2815 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 2977 "c-exp.c.tmp" break; - case 108: -#line 879 "c-exp.y" /* yacc.c:1646 */ - { + case 110: +#line 919 "c-exp.y" + { /* Note that we NUL-terminate here, but just for convenience. */ char *p; @@ -2830,12 +2992,12 @@ (yyval.svec).tokens[(yyval.svec).len - 1].length = (yyvsp[0].tsval).length; (yyval.svec).tokens[(yyval.svec).len - 1].ptr = p; } -#line 2835 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 2997 "c-exp.c.tmp" break; - case 109: -#line 897 "c-exp.y" /* yacc.c:1646 */ - { + case 111: +#line 937 "c-exp.y" + { int i; c_string_type type = C_STRING; @@ -2865,60 +3027,60 @@ xfree ((yyvsp[0].svec).tokens[i].ptr); xfree ((yyvsp[0].svec).tokens); } -#line 2870 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 3032 "c-exp.c.tmp" break; - case 110: -#line 932 "c-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, OP_OBJC_NSSTRING); + case 112: +#line 972 "c-exp.y" + { write_exp_elt_opcode (pstate, OP_OBJC_NSSTRING); write_exp_string (pstate, (yyvsp[0].sval)); write_exp_elt_opcode (pstate, OP_OBJC_NSSTRING); } -#line 2878 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 3040 "c-exp.c.tmp" break; - case 111: -#line 939 "c-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, OP_LONG); + case 113: +#line 979 "c-exp.y" + { write_exp_elt_opcode (pstate, OP_LONG); write_exp_elt_type (pstate, parse_type (pstate)->builtin_bool); write_exp_elt_longcst (pstate, (LONGEST) 1); write_exp_elt_opcode (pstate, OP_LONG); } -#line 2888 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 3050 "c-exp.c.tmp" break; - case 112: -#line 947 "c-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, OP_LONG); + case 114: +#line 987 "c-exp.y" + { write_exp_elt_opcode (pstate, OP_LONG); write_exp_elt_type (pstate, parse_type (pstate)->builtin_bool); write_exp_elt_longcst (pstate, (LONGEST) 0); write_exp_elt_opcode (pstate, OP_LONG); } -#line 2898 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 3060 "c-exp.c.tmp" break; - case 113: -#line 957 "c-exp.y" /* yacc.c:1646 */ - { + case 115: +#line 997 "c-exp.y" + { if ((yyvsp[0].ssym).sym.symbol) (yyval.bval) = SYMBOL_BLOCK_VALUE ((yyvsp[0].ssym).sym.symbol); else error (_("No file or function \"%s\"."), copy_name ((yyvsp[0].ssym).stoken).c_str ()); } -#line 2910 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 3072 "c-exp.c.tmp" break; - case 114: -#line 965 "c-exp.y" /* yacc.c:1646 */ - { + case 116: +#line 1005 "c-exp.y" + { (yyval.bval) = (yyvsp[0].bval); } -#line 2918 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 3080 "c-exp.c.tmp" break; - case 115: -#line 971 "c-exp.y" /* yacc.c:1646 */ - { + case 117: +#line 1011 "c-exp.y" + { std::string copy = copy_name ((yyvsp[0].sval)); struct symbol *tem = lookup_symbol (copy.c_str (), (yyvsp[-2].bval), @@ -2928,12 +3090,12 @@ error (_("No function \"%s\" in specified context."), copy.c_str ()); (yyval.bval) = SYMBOL_BLOCK_VALUE (tem); } -#line 2933 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 3095 "c-exp.c.tmp" break; - case 116: -#line 984 "c-exp.y" /* yacc.c:1646 */ - { struct symbol *sym = (yyvsp[-1].ssym).sym.symbol; + case 118: +#line 1024 "c-exp.y" + { struct symbol *sym = (yyvsp[-1].ssym).sym.symbol; if (sym == NULL || !SYMBOL_IS_ARGUMENT (sym) || !symbol_read_needs_frame (sym)) @@ -2945,12 +3107,12 @@ write_exp_elt_sym (pstate, sym); write_exp_elt_opcode (pstate, OP_VAR_ENTRY_VALUE); } -#line 2950 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 3112 "c-exp.c.tmp" break; - case 117: -#line 999 "c-exp.y" /* yacc.c:1646 */ - { + case 119: +#line 1039 "c-exp.y" + { std::string copy = copy_name ((yyvsp[0].sval)); struct block_symbol sym = lookup_symbol (copy.c_str (), (yyvsp[-2].bval), @@ -2966,12 +3128,12 @@ write_exp_elt_block (pstate, sym.block); write_exp_elt_sym (pstate, sym.symbol); write_exp_elt_opcode (pstate, OP_VAR_VALUE); } -#line 2971 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 3133 "c-exp.c.tmp" break; - case 118: -#line 1018 "c-exp.y" /* yacc.c:1646 */ - { + case 120: +#line 1058 "c-exp.y" + { struct type *type = (yyvsp[-2].tsym).type; type = check_typedef (type); if (!type_aggregate_p (type)) @@ -2983,12 +3145,12 @@ write_exp_string (pstate, (yyvsp[0].sval)); write_exp_elt_opcode (pstate, OP_SCOPE); } -#line 2988 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 3150 "c-exp.c.tmp" break; - case 119: -#line 1031 "c-exp.y" /* yacc.c:1646 */ - { + case 121: +#line 1071 "c-exp.y" + { struct type *type = (yyvsp[-3].tsym).type; struct stoken tmp_token; char *buf; @@ -3011,23 +3173,23 @@ write_exp_string (pstate, tmp_token); write_exp_elt_opcode (pstate, OP_SCOPE); } -#line 3016 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 3178 "c-exp.c.tmp" break; - case 120: -#line 1055 "c-exp.y" /* yacc.c:1646 */ - { + case 122: +#line 1095 "c-exp.y" + { std::string copy = copy_name ((yyvsp[-2].sval)); error (_("No type \"%s\" within class " "or namespace \"%s\"."), copy.c_str (), TYPE_SAFE_NAME ((yyvsp[-4].tsym).type)); } -#line 3027 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 3189 "c-exp.c.tmp" break; - case 122: -#line 1065 "c-exp.y" /* yacc.c:1646 */ - { + case 124: +#line 1105 "c-exp.y" + { std::string name = copy_name ((yyvsp[0].ssym).stoken); struct symbol *sym; struct bound_minimal_symbol msymbol; @@ -3054,12 +3216,12 @@ error (_("No symbol \"%s\" in current context."), name.c_str ()); } -#line 3059 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 3221 "c-exp.c.tmp" break; - case 123: -#line 1095 "c-exp.y" /* yacc.c:1646 */ - { struct block_symbol sym = (yyvsp[0].ssym).sym; + case 125: +#line 1135 "c-exp.y" + { struct block_symbol sym = (yyvsp[0].ssym).sym; if (sym.symbol) { @@ -3134,579 +3296,626 @@ write_exp_msymbol (pstate, msymbol); } } -#line 3139 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 3301 "c-exp.c.tmp" break; - case 124: -#line 1173 "c-exp.y" /* yacc.c:1646 */ - { + case 128: +#line 1218 "c-exp.y" + { cpstate->type_stack.insert (tp_const); } +#line 3307 "c-exp.c.tmp" + break; + + case 129: +#line 1220 "c-exp.y" + { cpstate->type_stack.insert (tp_volatile); } +#line 3313 "c-exp.c.tmp" + break; + + case 130: +#line 1222 "c-exp.y" + { cpstate->type_stack.insert (tp_atomic); } +#line 3319 "c-exp.c.tmp" + break; + + case 131: +#line 1224 "c-exp.y" + { cpstate->type_stack.insert (tp_restrict); } +#line 3325 "c-exp.c.tmp" + break; + + case 132: +#line 1226 "c-exp.y" + { cpstate->type_stack.insert (pstate, copy_name ((yyvsp[0].ssym).stoken).c_str ()); } -#line 3148 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 3334 "c-exp.c.tmp" break; - case 132: -#line 1197 "c-exp.y" /* yacc.c:1646 */ - { cpstate->type_stack.insert (tp_pointer); } -#line 3154 "c-exp.c.tmp" /* yacc.c:1646 */ + case 137: +#line 1244 "c-exp.y" + { cpstate->type_stack.insert (tp_pointer); } +#line 3340 "c-exp.c.tmp" break; - case 134: -#line 1200 "c-exp.y" /* yacc.c:1646 */ - { cpstate->type_stack.insert (tp_pointer); } -#line 3160 "c-exp.c.tmp" /* yacc.c:1646 */ + case 139: +#line 1247 "c-exp.y" + { cpstate->type_stack.insert (tp_pointer); } +#line 3346 "c-exp.c.tmp" break; - case 136: -#line 1203 "c-exp.y" /* yacc.c:1646 */ - { cpstate->type_stack.insert (tp_reference); } -#line 3166 "c-exp.c.tmp" /* yacc.c:1646 */ + case 141: +#line 1250 "c-exp.y" + { cpstate->type_stack.insert (tp_reference); } +#line 3352 "c-exp.c.tmp" break; - case 137: -#line 1205 "c-exp.y" /* yacc.c:1646 */ - { cpstate->type_stack.insert (tp_reference); } -#line 3172 "c-exp.c.tmp" /* yacc.c:1646 */ + case 142: +#line 1252 "c-exp.y" + { cpstate->type_stack.insert (tp_reference); } +#line 3358 "c-exp.c.tmp" break; - case 138: -#line 1207 "c-exp.y" /* yacc.c:1646 */ - { cpstate->type_stack.insert (tp_rvalue_reference); } -#line 3178 "c-exp.c.tmp" /* yacc.c:1646 */ + case 143: +#line 1254 "c-exp.y" + { cpstate->type_stack.insert (tp_rvalue_reference); } +#line 3364 "c-exp.c.tmp" break; - case 139: -#line 1209 "c-exp.y" /* yacc.c:1646 */ - { cpstate->type_stack.insert (tp_rvalue_reference); } -#line 3184 "c-exp.c.tmp" /* yacc.c:1646 */ + case 144: +#line 1256 "c-exp.y" + { cpstate->type_stack.insert (tp_rvalue_reference); } +#line 3370 "c-exp.c.tmp" break; - case 140: -#line 1213 "c-exp.y" /* yacc.c:1646 */ - { + case 145: +#line 1260 "c-exp.y" + { (yyval.type_stack) = cpstate->type_stack.create (); cpstate->type_stacks.emplace_back ((yyval.type_stack)); } -#line 3193 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 3379 "c-exp.c.tmp" break; - case 141: -#line 1220 "c-exp.y" /* yacc.c:1646 */ - { (yyval.type_stack) = (yyvsp[0].type_stack)->append ((yyvsp[-1].type_stack)); } -#line 3199 "c-exp.c.tmp" /* yacc.c:1646 */ + case 146: +#line 1267 "c-exp.y" + { (yyval.type_stack) = (yyvsp[0].type_stack)->append ((yyvsp[-1].type_stack)); } +#line 3385 "c-exp.c.tmp" break; - case 144: -#line 1226 "c-exp.y" /* yacc.c:1646 */ - { (yyval.type_stack) = (yyvsp[-1].type_stack); } -#line 3205 "c-exp.c.tmp" /* yacc.c:1646 */ + case 149: +#line 1273 "c-exp.y" + { (yyval.type_stack) = (yyvsp[-1].type_stack); } +#line 3391 "c-exp.c.tmp" break; - case 145: -#line 1228 "c-exp.y" /* yacc.c:1646 */ - { + case 150: +#line 1275 "c-exp.y" + { cpstate->type_stack.push ((yyvsp[-1].type_stack)); cpstate->type_stack.push ((yyvsp[0].lval)); cpstate->type_stack.push (tp_array); (yyval.type_stack) = cpstate->type_stack.create (); cpstate->type_stacks.emplace_back ((yyval.type_stack)); } -#line 3217 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 3403 "c-exp.c.tmp" break; - case 146: -#line 1236 "c-exp.y" /* yacc.c:1646 */ - { + case 151: +#line 1283 "c-exp.y" + { cpstate->type_stack.push ((yyvsp[0].lval)); cpstate->type_stack.push (tp_array); (yyval.type_stack) = cpstate->type_stack.create (); cpstate->type_stacks.emplace_back ((yyval.type_stack)); } -#line 3228 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 3414 "c-exp.c.tmp" break; - case 147: -#line 1244 "c-exp.y" /* yacc.c:1646 */ - { + case 152: +#line 1291 "c-exp.y" + { cpstate->type_stack.push ((yyvsp[-1].type_stack)); cpstate->type_stack.push ((yyvsp[0].tvec)); (yyval.type_stack) = cpstate->type_stack.create (); cpstate->type_stacks.emplace_back ((yyval.type_stack)); } -#line 3239 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 3425 "c-exp.c.tmp" break; - case 148: -#line 1251 "c-exp.y" /* yacc.c:1646 */ - { + case 153: +#line 1298 "c-exp.y" + { cpstate->type_stack.push ((yyvsp[0].tvec)); (yyval.type_stack) = cpstate->type_stack.create (); cpstate->type_stacks.emplace_back ((yyval.type_stack)); } -#line 3249 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 3435 "c-exp.c.tmp" break; - case 149: -#line 1259 "c-exp.y" /* yacc.c:1646 */ - { (yyval.lval) = -1; } -#line 3255 "c-exp.c.tmp" /* yacc.c:1646 */ + case 154: +#line 1306 "c-exp.y" + { (yyval.lval) = -1; } +#line 3441 "c-exp.c.tmp" break; - case 150: -#line 1261 "c-exp.y" /* yacc.c:1646 */ - { (yyval.lval) = -1; } -#line 3261 "c-exp.c.tmp" /* yacc.c:1646 */ + case 155: +#line 1308 "c-exp.y" + { (yyval.lval) = -1; } +#line 3447 "c-exp.c.tmp" break; - case 151: -#line 1263 "c-exp.y" /* yacc.c:1646 */ - { (yyval.lval) = (yyvsp[-1].typed_val_int).val; } -#line 3267 "c-exp.c.tmp" /* yacc.c:1646 */ + case 156: +#line 1310 "c-exp.y" + { (yyval.lval) = (yyvsp[-1].typed_val_int).val; } +#line 3453 "c-exp.c.tmp" break; - case 152: -#line 1265 "c-exp.y" /* yacc.c:1646 */ - { (yyval.lval) = (yyvsp[-1].typed_val_int).val; } -#line 3273 "c-exp.c.tmp" /* yacc.c:1646 */ + case 157: +#line 1312 "c-exp.y" + { (yyval.lval) = (yyvsp[-1].typed_val_int).val; } +#line 3459 "c-exp.c.tmp" break; - case 153: -#line 1269 "c-exp.y" /* yacc.c:1646 */ - { + case 158: +#line 1316 "c-exp.y" + { (yyval.tvec) = new std::vector; cpstate->type_lists.emplace_back ((yyval.tvec)); } -#line 3282 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 3468 "c-exp.c.tmp" break; - case 154: -#line 1274 "c-exp.y" /* yacc.c:1646 */ - { (yyval.tvec) = (yyvsp[-1].tvec); } -#line 3288 "c-exp.c.tmp" /* yacc.c:1646 */ - break; - - case 156: -#line 1300 "c-exp.y" /* yacc.c:1646 */ - { (yyval.tval) = (yyvsp[0].tsym).type; } -#line 3294 "c-exp.c.tmp" /* yacc.c:1646 */ + case 159: +#line 1321 "c-exp.y" + { (yyval.tvec) = (yyvsp[-1].tvec); } +#line 3474 "c-exp.c.tmp" break; - case 157: -#line 1302 "c-exp.y" /* yacc.c:1646 */ - { (yyval.tval) = lookup_signed_typename (pstate->language (), + case 161: +#line 1340 "c-exp.y" + { (yyval.tval) = lookup_signed_typename (pstate->language (), "int"); } -#line 3301 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 3481 "c-exp.c.tmp" break; - case 158: -#line 1305 "c-exp.y" /* yacc.c:1646 */ - { (yyval.tval) = lookup_signed_typename (pstate->language (), + case 162: +#line 1343 "c-exp.y" + { (yyval.tval) = lookup_signed_typename (pstate->language (), "long"); } -#line 3308 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 3488 "c-exp.c.tmp" break; - case 159: -#line 1308 "c-exp.y" /* yacc.c:1646 */ - { (yyval.tval) = lookup_signed_typename (pstate->language (), + case 163: +#line 1346 "c-exp.y" + { (yyval.tval) = lookup_signed_typename (pstate->language (), "short"); } -#line 3315 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 3495 "c-exp.c.tmp" break; - case 160: -#line 1311 "c-exp.y" /* yacc.c:1646 */ - { (yyval.tval) = lookup_signed_typename (pstate->language (), + case 164: +#line 1349 "c-exp.y" + { (yyval.tval) = lookup_signed_typename (pstate->language (), "long"); } -#line 3322 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 3502 "c-exp.c.tmp" break; - case 161: -#line 1314 "c-exp.y" /* yacc.c:1646 */ - { (yyval.tval) = lookup_signed_typename (pstate->language (), + case 165: +#line 1352 "c-exp.y" + { (yyval.tval) = lookup_signed_typename (pstate->language (), "long"); } -#line 3329 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 3509 "c-exp.c.tmp" break; - case 162: -#line 1317 "c-exp.y" /* yacc.c:1646 */ - { (yyval.tval) = lookup_signed_typename (pstate->language (), + case 166: +#line 1355 "c-exp.y" + { (yyval.tval) = lookup_signed_typename (pstate->language (), "long"); } -#line 3336 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 3516 "c-exp.c.tmp" break; - case 163: -#line 1320 "c-exp.y" /* yacc.c:1646 */ - { (yyval.tval) = lookup_signed_typename (pstate->language (), + case 167: +#line 1358 "c-exp.y" + { (yyval.tval) = lookup_signed_typename (pstate->language (), "long"); } -#line 3343 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 3523 "c-exp.c.tmp" break; - case 164: -#line 1323 "c-exp.y" /* yacc.c:1646 */ - { (yyval.tval) = lookup_unsigned_typename (pstate->language (), + case 168: +#line 1361 "c-exp.y" + { (yyval.tval) = lookup_unsigned_typename (pstate->language (), "long"); } -#line 3350 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 3530 "c-exp.c.tmp" break; - case 165: -#line 1326 "c-exp.y" /* yacc.c:1646 */ - { (yyval.tval) = lookup_unsigned_typename (pstate->language (), + case 169: +#line 1364 "c-exp.y" + { (yyval.tval) = lookup_unsigned_typename (pstate->language (), "long"); } -#line 3357 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 3537 "c-exp.c.tmp" break; - case 166: -#line 1329 "c-exp.y" /* yacc.c:1646 */ - { (yyval.tval) = lookup_unsigned_typename (pstate->language (), + case 170: +#line 1367 "c-exp.y" + { (yyval.tval) = lookup_unsigned_typename (pstate->language (), "long"); } -#line 3364 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 3544 "c-exp.c.tmp" break; - case 167: -#line 1332 "c-exp.y" /* yacc.c:1646 */ - { (yyval.tval) = lookup_signed_typename (pstate->language (), + case 171: +#line 1370 "c-exp.y" + { (yyval.tval) = lookup_signed_typename (pstate->language (), "long long"); } -#line 3371 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 3551 "c-exp.c.tmp" break; - case 168: -#line 1335 "c-exp.y" /* yacc.c:1646 */ - { (yyval.tval) = lookup_signed_typename (pstate->language (), + case 172: +#line 1373 "c-exp.y" + { (yyval.tval) = lookup_signed_typename (pstate->language (), "long long"); } -#line 3378 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 3558 "c-exp.c.tmp" break; - case 169: -#line 1338 "c-exp.y" /* yacc.c:1646 */ - { (yyval.tval) = lookup_signed_typename (pstate->language (), + case 173: +#line 1376 "c-exp.y" + { (yyval.tval) = lookup_signed_typename (pstate->language (), "long long"); } -#line 3385 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 3565 "c-exp.c.tmp" break; - case 170: -#line 1341 "c-exp.y" /* yacc.c:1646 */ - { (yyval.tval) = lookup_signed_typename (pstate->language (), + case 174: +#line 1379 "c-exp.y" + { (yyval.tval) = lookup_signed_typename (pstate->language (), "long long"); } -#line 3392 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 3572 "c-exp.c.tmp" break; - case 171: -#line 1344 "c-exp.y" /* yacc.c:1646 */ - { (yyval.tval) = lookup_signed_typename (pstate->language (), + case 175: +#line 1382 "c-exp.y" + { (yyval.tval) = lookup_signed_typename (pstate->language (), "long long"); } -#line 3399 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 3579 "c-exp.c.tmp" break; - case 172: -#line 1347 "c-exp.y" /* yacc.c:1646 */ - { (yyval.tval) = lookup_signed_typename (pstate->language (), + case 176: +#line 1385 "c-exp.y" + { (yyval.tval) = lookup_signed_typename (pstate->language (), "long long"); } -#line 3406 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 3586 "c-exp.c.tmp" break; - case 173: -#line 1350 "c-exp.y" /* yacc.c:1646 */ - { (yyval.tval) = lookup_unsigned_typename (pstate->language (), + case 177: +#line 1388 "c-exp.y" + { (yyval.tval) = lookup_unsigned_typename (pstate->language (), "long long"); } -#line 3413 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 3593 "c-exp.c.tmp" break; - case 174: -#line 1353 "c-exp.y" /* yacc.c:1646 */ - { (yyval.tval) = lookup_unsigned_typename (pstate->language (), + case 178: +#line 1391 "c-exp.y" + { (yyval.tval) = lookup_unsigned_typename (pstate->language (), "long long"); } -#line 3420 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 3600 "c-exp.c.tmp" break; - case 175: -#line 1356 "c-exp.y" /* yacc.c:1646 */ - { (yyval.tval) = lookup_unsigned_typename (pstate->language (), + case 179: +#line 1394 "c-exp.y" + { (yyval.tval) = lookup_unsigned_typename (pstate->language (), "long long"); } -#line 3427 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 3607 "c-exp.c.tmp" break; - case 176: -#line 1359 "c-exp.y" /* yacc.c:1646 */ - { (yyval.tval) = lookup_unsigned_typename (pstate->language (), + case 180: +#line 1397 "c-exp.y" + { (yyval.tval) = lookup_unsigned_typename (pstate->language (), "long long"); } -#line 3434 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 3614 "c-exp.c.tmp" break; - case 177: -#line 1362 "c-exp.y" /* yacc.c:1646 */ - { (yyval.tval) = lookup_signed_typename (pstate->language (), + case 181: +#line 1400 "c-exp.y" + { (yyval.tval) = lookup_signed_typename (pstate->language (), "short"); } -#line 3441 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 3621 "c-exp.c.tmp" break; - case 178: -#line 1365 "c-exp.y" /* yacc.c:1646 */ - { (yyval.tval) = lookup_signed_typename (pstate->language (), + case 182: +#line 1403 "c-exp.y" + { (yyval.tval) = lookup_signed_typename (pstate->language (), "short"); } -#line 3448 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 3628 "c-exp.c.tmp" break; - case 179: -#line 1368 "c-exp.y" /* yacc.c:1646 */ - { (yyval.tval) = lookup_signed_typename (pstate->language (), + case 183: +#line 1406 "c-exp.y" + { (yyval.tval) = lookup_signed_typename (pstate->language (), "short"); } -#line 3455 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 3635 "c-exp.c.tmp" break; - case 180: -#line 1371 "c-exp.y" /* yacc.c:1646 */ - { (yyval.tval) = lookup_unsigned_typename (pstate->language (), + case 184: +#line 1409 "c-exp.y" + { (yyval.tval) = lookup_unsigned_typename (pstate->language (), "short"); } -#line 3462 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 3642 "c-exp.c.tmp" break; - case 181: -#line 1374 "c-exp.y" /* yacc.c:1646 */ - { (yyval.tval) = lookup_unsigned_typename (pstate->language (), + case 185: +#line 1412 "c-exp.y" + { (yyval.tval) = lookup_unsigned_typename (pstate->language (), "short"); } -#line 3469 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 3649 "c-exp.c.tmp" break; - case 182: -#line 1377 "c-exp.y" /* yacc.c:1646 */ - { (yyval.tval) = lookup_unsigned_typename (pstate->language (), + case 186: +#line 1415 "c-exp.y" + { (yyval.tval) = lookup_unsigned_typename (pstate->language (), "short"); } -#line 3476 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 3656 "c-exp.c.tmp" break; - case 183: -#line 1380 "c-exp.y" /* yacc.c:1646 */ - { (yyval.tval) = lookup_typename (pstate->language (), + case 187: +#line 1418 "c-exp.y" + { (yyval.tval) = lookup_typename (pstate->language (), "double", NULL, 0); } -#line 3485 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 3665 "c-exp.c.tmp" break; - case 184: -#line 1385 "c-exp.y" /* yacc.c:1646 */ - { (yyval.tval) = lookup_typename (pstate->language (), + case 188: +#line 1423 "c-exp.y" + { (yyval.tval) = lookup_typename (pstate->language (), + "float", + NULL, + 0); } +#line 3674 "c-exp.c.tmp" + break; + + case 189: +#line 1428 "c-exp.y" + { (yyval.tval) = lookup_typename (pstate->language (), "long double", NULL, 0); } -#line 3494 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 3683 "c-exp.c.tmp" break; - case 185: -#line 1390 "c-exp.y" /* yacc.c:1646 */ - { (yyval.tval) + case 190: +#line 1433 "c-exp.y" + { (yyval.tval) = lookup_unsigned_typename (pstate->language (), + (yyvsp[0].tsym).type->name ()); } +#line 3690 "c-exp.c.tmp" + break; + + case 191: +#line 1436 "c-exp.y" + { (yyval.tval) = lookup_unsigned_typename (pstate->language (), + "int"); } +#line 3697 "c-exp.c.tmp" + break; + + case 192: +#line 1439 "c-exp.y" + { (yyval.tval) = lookup_signed_typename (pstate->language (), + (yyvsp[0].tsym).type->name ()); } +#line 3704 "c-exp.c.tmp" + break; + + case 193: +#line 1442 "c-exp.y" + { (yyval.tval) = lookup_signed_typename (pstate->language (), + "int"); } +#line 3711 "c-exp.c.tmp" + break; + + case 194: +#line 1458 "c-exp.y" + { (yyval.tval) = (yyvsp[0].tsym).type; } +#line 3717 "c-exp.c.tmp" + break; + + case 195: +#line 1460 "c-exp.y" + { (yyval.tval) = (yyvsp[0].tval); } +#line 3723 "c-exp.c.tmp" + break; + + case 196: +#line 1462 "c-exp.y" + { + (yyval.tval) = init_complex_type (nullptr, (yyvsp[0].tval)); + } +#line 3731 "c-exp.c.tmp" + break; + + case 197: +#line 1466 "c-exp.y" + { (yyval.tval) = lookup_struct (copy_name ((yyvsp[0].sval)).c_str (), pstate->expression_context_block); } -#line 3503 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 3740 "c-exp.c.tmp" break; - case 186: -#line 1395 "c-exp.y" /* yacc.c:1646 */ - { + case 198: +#line 1471 "c-exp.y" + { pstate->mark_completion_tag (TYPE_CODE_STRUCT, "", 0); (yyval.tval) = NULL; } -#line 3513 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 3750 "c-exp.c.tmp" break; - case 187: -#line 1401 "c-exp.y" /* yacc.c:1646 */ - { + case 199: +#line 1477 "c-exp.y" + { pstate->mark_completion_tag (TYPE_CODE_STRUCT, (yyvsp[-1].sval).ptr, (yyvsp[-1].sval).length); (yyval.tval) = NULL; } -#line 3523 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 3760 "c-exp.c.tmp" break; - case 188: -#line 1407 "c-exp.y" /* yacc.c:1646 */ - { (yyval.tval) = lookup_struct + case 200: +#line 1483 "c-exp.y" + { (yyval.tval) = lookup_struct (copy_name ((yyvsp[0].sval)).c_str (), pstate->expression_context_block); } -#line 3532 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 3769 "c-exp.c.tmp" break; - case 189: -#line 1412 "c-exp.y" /* yacc.c:1646 */ - { + case 201: +#line 1488 "c-exp.y" + { pstate->mark_completion_tag (TYPE_CODE_STRUCT, "", 0); (yyval.tval) = NULL; } -#line 3542 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 3779 "c-exp.c.tmp" break; - case 190: -#line 1418 "c-exp.y" /* yacc.c:1646 */ - { + case 202: +#line 1494 "c-exp.y" + { pstate->mark_completion_tag (TYPE_CODE_STRUCT, (yyvsp[-1].sval).ptr, (yyvsp[-1].sval).length); (yyval.tval) = NULL; } -#line 3552 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 3789 "c-exp.c.tmp" break; - case 191: -#line 1424 "c-exp.y" /* yacc.c:1646 */ - { (yyval.tval) + case 203: +#line 1500 "c-exp.y" + { (yyval.tval) = lookup_union (copy_name ((yyvsp[0].sval)).c_str (), pstate->expression_context_block); } -#line 3561 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 3798 "c-exp.c.tmp" break; - case 192: -#line 1429 "c-exp.y" /* yacc.c:1646 */ - { + case 204: +#line 1505 "c-exp.y" + { pstate->mark_completion_tag (TYPE_CODE_UNION, "", 0); (yyval.tval) = NULL; } -#line 3571 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 3808 "c-exp.c.tmp" break; - case 193: -#line 1435 "c-exp.y" /* yacc.c:1646 */ - { + case 205: +#line 1511 "c-exp.y" + { pstate->mark_completion_tag (TYPE_CODE_UNION, (yyvsp[-1].sval).ptr, (yyvsp[-1].sval).length); (yyval.tval) = NULL; } -#line 3581 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 3818 "c-exp.c.tmp" break; - case 194: -#line 1441 "c-exp.y" /* yacc.c:1646 */ - { (yyval.tval) = lookup_enum (copy_name ((yyvsp[0].sval)).c_str (), + case 206: +#line 1517 "c-exp.y" + { (yyval.tval) = lookup_enum (copy_name ((yyvsp[0].sval)).c_str (), pstate->expression_context_block); } -#line 3589 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 3826 "c-exp.c.tmp" break; - case 195: -#line 1445 "c-exp.y" /* yacc.c:1646 */ - { + case 207: +#line 1521 "c-exp.y" + { pstate->mark_completion_tag (TYPE_CODE_ENUM, "", 0); (yyval.tval) = NULL; } -#line 3598 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 3835 "c-exp.c.tmp" break; - case 196: -#line 1450 "c-exp.y" /* yacc.c:1646 */ - { + case 208: +#line 1526 "c-exp.y" + { pstate->mark_completion_tag (TYPE_CODE_ENUM, (yyvsp[-1].sval).ptr, (yyvsp[-1].sval).length); (yyval.tval) = NULL; } -#line 3608 "c-exp.c.tmp" /* yacc.c:1646 */ - break; - - case 197: -#line 1456 "c-exp.y" /* yacc.c:1646 */ - { (yyval.tval) = lookup_unsigned_typename (pstate->language (), - TYPE_NAME((yyvsp[0].tsym).type)); } -#line 3615 "c-exp.c.tmp" /* yacc.c:1646 */ - break; - - case 198: -#line 1459 "c-exp.y" /* yacc.c:1646 */ - { (yyval.tval) = lookup_unsigned_typename (pstate->language (), - "int"); } -#line 3622 "c-exp.c.tmp" /* yacc.c:1646 */ - break; - - case 199: -#line 1462 "c-exp.y" /* yacc.c:1646 */ - { (yyval.tval) = lookup_signed_typename (pstate->language (), - TYPE_NAME((yyvsp[0].tsym).type)); } -#line 3629 "c-exp.c.tmp" /* yacc.c:1646 */ - break; - - case 200: -#line 1465 "c-exp.y" /* yacc.c:1646 */ - { (yyval.tval) = lookup_signed_typename (pstate->language (), - "int"); } -#line 3636 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 3845 "c-exp.c.tmp" break; - case 201: -#line 1471 "c-exp.y" /* yacc.c:1646 */ - { (yyval.tval) = lookup_template_type + case 209: +#line 1535 "c-exp.y" + { (yyval.tval) = lookup_template_type (copy_name((yyvsp[-3].sval)).c_str (), (yyvsp[-1].tval), pstate->expression_context_block); } -#line 3645 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 3854 "c-exp.c.tmp" break; - case 202: -#line 1476 "c-exp.y" /* yacc.c:1646 */ - { (yyval.tval) = cpstate->type_stack.follow_types ((yyvsp[0].tval)); } -#line 3651 "c-exp.c.tmp" /* yacc.c:1646 */ + case 210: +#line 1540 "c-exp.y" + { (yyval.tval) = cpstate->type_stack.follow_types ((yyvsp[0].tval)); } +#line 3860 "c-exp.c.tmp" break; - case 203: -#line 1478 "c-exp.y" /* yacc.c:1646 */ - { (yyval.tval) = cpstate->type_stack.follow_types ((yyvsp[-1].tval)); } -#line 3657 "c-exp.c.tmp" /* yacc.c:1646 */ + case 211: +#line 1542 "c-exp.y" + { (yyval.tval) = cpstate->type_stack.follow_types ((yyvsp[-1].tval)); } +#line 3866 "c-exp.c.tmp" break; - case 205: -#line 1483 "c-exp.y" /* yacc.c:1646 */ - { + case 213: +#line 1547 "c-exp.y" + { (yyval.tsym).stoken.ptr = "int"; (yyval.tsym).stoken.length = 3; (yyval.tsym).type = lookup_signed_typename (pstate->language (), "int"); } -#line 3668 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 3877 "c-exp.c.tmp" break; - case 206: -#line 1490 "c-exp.y" /* yacc.c:1646 */ - { + case 214: +#line 1554 "c-exp.y" + { (yyval.tsym).stoken.ptr = "long"; (yyval.tsym).stoken.length = 4; (yyval.tsym).type = lookup_signed_typename (pstate->language (), "long"); } -#line 3679 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 3888 "c-exp.c.tmp" break; - case 207: -#line 1497 "c-exp.y" /* yacc.c:1646 */ - { + case 215: +#line 1561 "c-exp.y" + { (yyval.tsym).stoken.ptr = "short"; (yyval.tsym).stoken.length = 5; (yyval.tsym).type = lookup_signed_typename (pstate->language (), "short"); } -#line 3690 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 3899 "c-exp.c.tmp" break; - case 208: -#line 1507 "c-exp.y" /* yacc.c:1646 */ - { check_parameter_typelist ((yyvsp[0].tvec)); } -#line 3696 "c-exp.c.tmp" /* yacc.c:1646 */ + case 216: +#line 1571 "c-exp.y" + { check_parameter_typelist ((yyvsp[0].tvec)); } +#line 3905 "c-exp.c.tmp" break; - case 209: -#line 1509 "c-exp.y" /* yacc.c:1646 */ - { + case 217: +#line 1573 "c-exp.y" + { (yyvsp[-2].tvec)->push_back (NULL); check_parameter_typelist ((yyvsp[-2].tvec)); (yyval.tvec) = (yyvsp[-2].tvec); } -#line 3706 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 3915 "c-exp.c.tmp" break; - case 210: -#line 1518 "c-exp.y" /* yacc.c:1646 */ - { + case 218: +#line 1582 "c-exp.y" + { std::vector *typelist = new std::vector; cpstate->type_lists.emplace_back (typelist); @@ -3714,170 +3923,170 @@ typelist->push_back ((yyvsp[0].tval)); (yyval.tvec) = typelist; } -#line 3719 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 3928 "c-exp.c.tmp" break; - case 211: -#line 1527 "c-exp.y" /* yacc.c:1646 */ - { + case 219: +#line 1591 "c-exp.y" + { (yyvsp[-2].tvec)->push_back ((yyvsp[0].tval)); (yyval.tvec) = (yyvsp[-2].tvec); } -#line 3728 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 3937 "c-exp.c.tmp" break; - case 213: -#line 1535 "c-exp.y" /* yacc.c:1646 */ - { + case 221: +#line 1599 "c-exp.y" + { cpstate->type_stack.push ((yyvsp[0].type_stack)); (yyval.tval) = cpstate->type_stack.follow_types ((yyvsp[-1].tval)); } -#line 3737 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 3946 "c-exp.c.tmp" break; - case 214: -#line 1542 "c-exp.y" /* yacc.c:1646 */ - { (yyval.tval) = cpstate->type_stack.follow_types ((yyvsp[-1].tval)); } -#line 3743 "c-exp.c.tmp" /* yacc.c:1646 */ + case 222: +#line 1606 "c-exp.y" + { (yyval.tval) = cpstate->type_stack.follow_types ((yyvsp[-1].tval)); } +#line 3952 "c-exp.c.tmp" break; - case 219: -#line 1554 "c-exp.y" /* yacc.c:1646 */ - { cpstate->type_stack.insert (tp_const); + case 227: +#line 1618 "c-exp.y" + { cpstate->type_stack.insert (tp_const); cpstate->type_stack.insert (tp_volatile); } -#line 3751 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 3960 "c-exp.c.tmp" break; - case 220: -#line 1558 "c-exp.y" /* yacc.c:1646 */ - { cpstate->type_stack.insert (tp_const); } -#line 3757 "c-exp.c.tmp" /* yacc.c:1646 */ + case 228: +#line 1622 "c-exp.y" + { cpstate->type_stack.insert (tp_const); } +#line 3966 "c-exp.c.tmp" break; - case 221: -#line 1560 "c-exp.y" /* yacc.c:1646 */ - { cpstate->type_stack.insert (tp_volatile); } -#line 3763 "c-exp.c.tmp" /* yacc.c:1646 */ + case 229: +#line 1624 "c-exp.y" + { cpstate->type_stack.insert (tp_volatile); } +#line 3972 "c-exp.c.tmp" break; - case 222: -#line 1564 "c-exp.y" /* yacc.c:1646 */ - { (yyval.sval) = operator_stoken (" new"); } -#line 3769 "c-exp.c.tmp" /* yacc.c:1646 */ + case 230: +#line 1628 "c-exp.y" + { (yyval.sval) = operator_stoken (" new"); } +#line 3978 "c-exp.c.tmp" break; - case 223: -#line 1566 "c-exp.y" /* yacc.c:1646 */ - { (yyval.sval) = operator_stoken (" delete"); } -#line 3775 "c-exp.c.tmp" /* yacc.c:1646 */ + case 231: +#line 1630 "c-exp.y" + { (yyval.sval) = operator_stoken (" delete"); } +#line 3984 "c-exp.c.tmp" break; - case 224: -#line 1568 "c-exp.y" /* yacc.c:1646 */ - { (yyval.sval) = operator_stoken (" new[]"); } -#line 3781 "c-exp.c.tmp" /* yacc.c:1646 */ + case 232: +#line 1632 "c-exp.y" + { (yyval.sval) = operator_stoken (" new[]"); } +#line 3990 "c-exp.c.tmp" break; - case 225: -#line 1570 "c-exp.y" /* yacc.c:1646 */ - { (yyval.sval) = operator_stoken (" delete[]"); } -#line 3787 "c-exp.c.tmp" /* yacc.c:1646 */ + case 233: +#line 1634 "c-exp.y" + { (yyval.sval) = operator_stoken (" delete[]"); } +#line 3996 "c-exp.c.tmp" break; - case 226: -#line 1572 "c-exp.y" /* yacc.c:1646 */ - { (yyval.sval) = operator_stoken (" new[]"); } -#line 3793 "c-exp.c.tmp" /* yacc.c:1646 */ + case 234: +#line 1636 "c-exp.y" + { (yyval.sval) = operator_stoken (" new[]"); } +#line 4002 "c-exp.c.tmp" break; - case 227: -#line 1574 "c-exp.y" /* yacc.c:1646 */ - { (yyval.sval) = operator_stoken (" delete[]"); } -#line 3799 "c-exp.c.tmp" /* yacc.c:1646 */ + case 235: +#line 1638 "c-exp.y" + { (yyval.sval) = operator_stoken (" delete[]"); } +#line 4008 "c-exp.c.tmp" break; - case 228: -#line 1576 "c-exp.y" /* yacc.c:1646 */ - { (yyval.sval) = operator_stoken ("+"); } -#line 3805 "c-exp.c.tmp" /* yacc.c:1646 */ + case 236: +#line 1640 "c-exp.y" + { (yyval.sval) = operator_stoken ("+"); } +#line 4014 "c-exp.c.tmp" break; - case 229: -#line 1578 "c-exp.y" /* yacc.c:1646 */ - { (yyval.sval) = operator_stoken ("-"); } -#line 3811 "c-exp.c.tmp" /* yacc.c:1646 */ + case 237: +#line 1642 "c-exp.y" + { (yyval.sval) = operator_stoken ("-"); } +#line 4020 "c-exp.c.tmp" break; - case 230: -#line 1580 "c-exp.y" /* yacc.c:1646 */ - { (yyval.sval) = operator_stoken ("*"); } -#line 3817 "c-exp.c.tmp" /* yacc.c:1646 */ + case 238: +#line 1644 "c-exp.y" + { (yyval.sval) = operator_stoken ("*"); } +#line 4026 "c-exp.c.tmp" break; - case 231: -#line 1582 "c-exp.y" /* yacc.c:1646 */ - { (yyval.sval) = operator_stoken ("/"); } -#line 3823 "c-exp.c.tmp" /* yacc.c:1646 */ + case 239: +#line 1646 "c-exp.y" + { (yyval.sval) = operator_stoken ("/"); } +#line 4032 "c-exp.c.tmp" break; - case 232: -#line 1584 "c-exp.y" /* yacc.c:1646 */ - { (yyval.sval) = operator_stoken ("%"); } -#line 3829 "c-exp.c.tmp" /* yacc.c:1646 */ + case 240: +#line 1648 "c-exp.y" + { (yyval.sval) = operator_stoken ("%"); } +#line 4038 "c-exp.c.tmp" break; - case 233: -#line 1586 "c-exp.y" /* yacc.c:1646 */ - { (yyval.sval) = operator_stoken ("^"); } -#line 3835 "c-exp.c.tmp" /* yacc.c:1646 */ + case 241: +#line 1650 "c-exp.y" + { (yyval.sval) = operator_stoken ("^"); } +#line 4044 "c-exp.c.tmp" break; - case 234: -#line 1588 "c-exp.y" /* yacc.c:1646 */ - { (yyval.sval) = operator_stoken ("&"); } -#line 3841 "c-exp.c.tmp" /* yacc.c:1646 */ + case 242: +#line 1652 "c-exp.y" + { (yyval.sval) = operator_stoken ("&"); } +#line 4050 "c-exp.c.tmp" break; - case 235: -#line 1590 "c-exp.y" /* yacc.c:1646 */ - { (yyval.sval) = operator_stoken ("|"); } -#line 3847 "c-exp.c.tmp" /* yacc.c:1646 */ + case 243: +#line 1654 "c-exp.y" + { (yyval.sval) = operator_stoken ("|"); } +#line 4056 "c-exp.c.tmp" break; - case 236: -#line 1592 "c-exp.y" /* yacc.c:1646 */ - { (yyval.sval) = operator_stoken ("~"); } -#line 3853 "c-exp.c.tmp" /* yacc.c:1646 */ + case 244: +#line 1656 "c-exp.y" + { (yyval.sval) = operator_stoken ("~"); } +#line 4062 "c-exp.c.tmp" break; - case 237: -#line 1594 "c-exp.y" /* yacc.c:1646 */ - { (yyval.sval) = operator_stoken ("!"); } -#line 3859 "c-exp.c.tmp" /* yacc.c:1646 */ + case 245: +#line 1658 "c-exp.y" + { (yyval.sval) = operator_stoken ("!"); } +#line 4068 "c-exp.c.tmp" break; - case 238: -#line 1596 "c-exp.y" /* yacc.c:1646 */ - { (yyval.sval) = operator_stoken ("="); } -#line 3865 "c-exp.c.tmp" /* yacc.c:1646 */ + case 246: +#line 1660 "c-exp.y" + { (yyval.sval) = operator_stoken ("="); } +#line 4074 "c-exp.c.tmp" break; - case 239: -#line 1598 "c-exp.y" /* yacc.c:1646 */ - { (yyval.sval) = operator_stoken ("<"); } -#line 3871 "c-exp.c.tmp" /* yacc.c:1646 */ + case 247: +#line 1662 "c-exp.y" + { (yyval.sval) = operator_stoken ("<"); } +#line 4080 "c-exp.c.tmp" break; - case 240: -#line 1600 "c-exp.y" /* yacc.c:1646 */ - { (yyval.sval) = operator_stoken (">"); } -#line 3877 "c-exp.c.tmp" /* yacc.c:1646 */ + case 248: +#line 1664 "c-exp.y" + { (yyval.sval) = operator_stoken (">"); } +#line 4086 "c-exp.c.tmp" break; - case 241: -#line 1602 "c-exp.y" /* yacc.c:1646 */ - { const char *op = " unknown"; + case 249: +#line 1666 "c-exp.y" + { const char *op = " unknown"; switch ((yyvsp[0].opcode)) { case BINOP_RSH: @@ -3916,197 +4125,204 @@ (yyval.sval) = operator_stoken (op); } -#line 3921 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 4130 "c-exp.c.tmp" break; - case 242: -#line 1642 "c-exp.y" /* yacc.c:1646 */ - { (yyval.sval) = operator_stoken ("<<"); } -#line 3927 "c-exp.c.tmp" /* yacc.c:1646 */ + case 250: +#line 1706 "c-exp.y" + { (yyval.sval) = operator_stoken ("<<"); } +#line 4136 "c-exp.c.tmp" break; - case 243: -#line 1644 "c-exp.y" /* yacc.c:1646 */ - { (yyval.sval) = operator_stoken (">>"); } -#line 3933 "c-exp.c.tmp" /* yacc.c:1646 */ + case 251: +#line 1708 "c-exp.y" + { (yyval.sval) = operator_stoken (">>"); } +#line 4142 "c-exp.c.tmp" break; - case 244: -#line 1646 "c-exp.y" /* yacc.c:1646 */ - { (yyval.sval) = operator_stoken ("=="); } -#line 3939 "c-exp.c.tmp" /* yacc.c:1646 */ + case 252: +#line 1710 "c-exp.y" + { (yyval.sval) = operator_stoken ("=="); } +#line 4148 "c-exp.c.tmp" break; - case 245: -#line 1648 "c-exp.y" /* yacc.c:1646 */ - { (yyval.sval) = operator_stoken ("!="); } -#line 3945 "c-exp.c.tmp" /* yacc.c:1646 */ + case 253: +#line 1712 "c-exp.y" + { (yyval.sval) = operator_stoken ("!="); } +#line 4154 "c-exp.c.tmp" break; - case 246: -#line 1650 "c-exp.y" /* yacc.c:1646 */ - { (yyval.sval) = operator_stoken ("<="); } -#line 3951 "c-exp.c.tmp" /* yacc.c:1646 */ + case 254: +#line 1714 "c-exp.y" + { (yyval.sval) = operator_stoken ("<="); } +#line 4160 "c-exp.c.tmp" break; - case 247: -#line 1652 "c-exp.y" /* yacc.c:1646 */ - { (yyval.sval) = operator_stoken (">="); } -#line 3957 "c-exp.c.tmp" /* yacc.c:1646 */ + case 255: +#line 1716 "c-exp.y" + { (yyval.sval) = operator_stoken (">="); } +#line 4166 "c-exp.c.tmp" break; - case 248: -#line 1654 "c-exp.y" /* yacc.c:1646 */ - { (yyval.sval) = operator_stoken ("&&"); } -#line 3963 "c-exp.c.tmp" /* yacc.c:1646 */ + case 256: +#line 1718 "c-exp.y" + { (yyval.sval) = operator_stoken ("&&"); } +#line 4172 "c-exp.c.tmp" break; - case 249: -#line 1656 "c-exp.y" /* yacc.c:1646 */ - { (yyval.sval) = operator_stoken ("||"); } -#line 3969 "c-exp.c.tmp" /* yacc.c:1646 */ + case 257: +#line 1720 "c-exp.y" + { (yyval.sval) = operator_stoken ("||"); } +#line 4178 "c-exp.c.tmp" break; - case 250: -#line 1658 "c-exp.y" /* yacc.c:1646 */ - { (yyval.sval) = operator_stoken ("++"); } -#line 3975 "c-exp.c.tmp" /* yacc.c:1646 */ + case 258: +#line 1722 "c-exp.y" + { (yyval.sval) = operator_stoken ("++"); } +#line 4184 "c-exp.c.tmp" break; - case 251: -#line 1660 "c-exp.y" /* yacc.c:1646 */ - { (yyval.sval) = operator_stoken ("--"); } -#line 3981 "c-exp.c.tmp" /* yacc.c:1646 */ + case 259: +#line 1724 "c-exp.y" + { (yyval.sval) = operator_stoken ("--"); } +#line 4190 "c-exp.c.tmp" break; - case 252: -#line 1662 "c-exp.y" /* yacc.c:1646 */ - { (yyval.sval) = operator_stoken (","); } -#line 3987 "c-exp.c.tmp" /* yacc.c:1646 */ + case 260: +#line 1726 "c-exp.y" + { (yyval.sval) = operator_stoken (","); } +#line 4196 "c-exp.c.tmp" break; - case 253: -#line 1664 "c-exp.y" /* yacc.c:1646 */ - { (yyval.sval) = operator_stoken ("->*"); } -#line 3993 "c-exp.c.tmp" /* yacc.c:1646 */ + case 261: +#line 1728 "c-exp.y" + { (yyval.sval) = operator_stoken ("->*"); } +#line 4202 "c-exp.c.tmp" break; - case 254: -#line 1666 "c-exp.y" /* yacc.c:1646 */ - { (yyval.sval) = operator_stoken ("->"); } -#line 3999 "c-exp.c.tmp" /* yacc.c:1646 */ + case 262: +#line 1730 "c-exp.y" + { (yyval.sval) = operator_stoken ("->"); } +#line 4208 "c-exp.c.tmp" break; - case 255: -#line 1668 "c-exp.y" /* yacc.c:1646 */ - { (yyval.sval) = operator_stoken ("()"); } -#line 4005 "c-exp.c.tmp" /* yacc.c:1646 */ + case 263: +#line 1732 "c-exp.y" + { (yyval.sval) = operator_stoken ("()"); } +#line 4214 "c-exp.c.tmp" break; - case 256: -#line 1670 "c-exp.y" /* yacc.c:1646 */ - { (yyval.sval) = operator_stoken ("[]"); } -#line 4011 "c-exp.c.tmp" /* yacc.c:1646 */ + case 264: +#line 1734 "c-exp.y" + { (yyval.sval) = operator_stoken ("[]"); } +#line 4220 "c-exp.c.tmp" break; - case 257: -#line 1672 "c-exp.y" /* yacc.c:1646 */ - { (yyval.sval) = operator_stoken ("[]"); } -#line 4017 "c-exp.c.tmp" /* yacc.c:1646 */ + case 265: +#line 1736 "c-exp.y" + { (yyval.sval) = operator_stoken ("[]"); } +#line 4226 "c-exp.c.tmp" break; - case 258: -#line 1674 "c-exp.y" /* yacc.c:1646 */ - { string_file buf; + case 266: +#line 1738 "c-exp.y" + { string_file buf; c_print_type ((yyvsp[0].tval), NULL, &buf, -1, 0, &type_print_raw_options); + std::string name = std::move (buf.string ()); /* This also needs canonicalization. */ - std::string canon - = cp_canonicalize_string (buf.c_str ()); - if (canon.empty ()) - canon = std::move (buf.string ()); - (yyval.sval) = operator_stoken ((" " + canon).c_str ()); + gdb::unique_xmalloc_ptr canon + = cp_canonicalize_string (name.c_str ()); + if (canon != nullptr) + name = canon.get (); + (yyval.sval) = operator_stoken ((" " + name).c_str ()); } -#line 4034 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 4244 "c-exp.c.tmp" break; - case 260: -#line 1697 "c-exp.y" /* yacc.c:1646 */ - { (yyval.sval) = typename_stoken ("double"); } -#line 4040 "c-exp.c.tmp" /* yacc.c:1646 */ + case 268: +#line 1760 "c-exp.y" + { (yyval.sval) = typename_stoken ("double"); } +#line 4250 "c-exp.c.tmp" break; - case 261: -#line 1698 "c-exp.y" /* yacc.c:1646 */ - { (yyval.sval) = typename_stoken ("int"); } -#line 4046 "c-exp.c.tmp" /* yacc.c:1646 */ + case 269: +#line 1761 "c-exp.y" + { (yyval.sval) = typename_stoken ("float"); } +#line 4256 "c-exp.c.tmp" break; - case 262: -#line 1699 "c-exp.y" /* yacc.c:1646 */ - { (yyval.sval) = typename_stoken ("long"); } -#line 4052 "c-exp.c.tmp" /* yacc.c:1646 */ + case 270: +#line 1762 "c-exp.y" + { (yyval.sval) = typename_stoken ("int"); } +#line 4262 "c-exp.c.tmp" break; - case 263: -#line 1700 "c-exp.y" /* yacc.c:1646 */ - { (yyval.sval) = typename_stoken ("short"); } -#line 4058 "c-exp.c.tmp" /* yacc.c:1646 */ + case 271: +#line 1763 "c-exp.y" + { (yyval.sval) = typename_stoken ("long"); } +#line 4268 "c-exp.c.tmp" break; - case 264: -#line 1701 "c-exp.y" /* yacc.c:1646 */ - { (yyval.sval) = typename_stoken ("signed"); } -#line 4064 "c-exp.c.tmp" /* yacc.c:1646 */ + case 272: +#line 1764 "c-exp.y" + { (yyval.sval) = typename_stoken ("short"); } +#line 4274 "c-exp.c.tmp" break; - case 265: -#line 1702 "c-exp.y" /* yacc.c:1646 */ - { (yyval.sval) = typename_stoken ("unsigned"); } -#line 4070 "c-exp.c.tmp" /* yacc.c:1646 */ + case 273: +#line 1765 "c-exp.y" + { (yyval.sval) = typename_stoken ("signed"); } +#line 4280 "c-exp.c.tmp" break; - case 266: -#line 1705 "c-exp.y" /* yacc.c:1646 */ - { (yyval.sval) = (yyvsp[0].ssym).stoken; } -#line 4076 "c-exp.c.tmp" /* yacc.c:1646 */ + case 274: +#line 1766 "c-exp.y" + { (yyval.sval) = typename_stoken ("unsigned"); } +#line 4286 "c-exp.c.tmp" break; - case 267: -#line 1706 "c-exp.y" /* yacc.c:1646 */ - { (yyval.sval) = (yyvsp[0].ssym).stoken; } -#line 4082 "c-exp.c.tmp" /* yacc.c:1646 */ + case 275: +#line 1769 "c-exp.y" + { (yyval.sval) = (yyvsp[0].ssym).stoken; } +#line 4292 "c-exp.c.tmp" break; - case 268: -#line 1707 "c-exp.y" /* yacc.c:1646 */ - { (yyval.sval) = (yyvsp[0].tsym).stoken; } -#line 4088 "c-exp.c.tmp" /* yacc.c:1646 */ + case 276: +#line 1770 "c-exp.y" + { (yyval.sval) = (yyvsp[0].ssym).stoken; } +#line 4298 "c-exp.c.tmp" break; - case 269: -#line 1708 "c-exp.y" /* yacc.c:1646 */ - { (yyval.sval) = (yyvsp[0].ssym).stoken; } -#line 4094 "c-exp.c.tmp" /* yacc.c:1646 */ + case 277: +#line 1771 "c-exp.y" + { (yyval.sval) = (yyvsp[0].tsym).stoken; } +#line 4304 "c-exp.c.tmp" break; - case 270: -#line 1709 "c-exp.y" /* yacc.c:1646 */ - { (yyval.sval) = (yyvsp[0].ssym).stoken; } -#line 4100 "c-exp.c.tmp" /* yacc.c:1646 */ + case 278: +#line 1772 "c-exp.y" + { (yyval.sval) = (yyvsp[0].ssym).stoken; } +#line 4310 "c-exp.c.tmp" break; - case 271: -#line 1710 "c-exp.y" /* yacc.c:1646 */ - { (yyval.sval) = (yyvsp[0].sval); } -#line 4106 "c-exp.c.tmp" /* yacc.c:1646 */ + case 279: +#line 1773 "c-exp.y" + { (yyval.sval) = (yyvsp[0].ssym).stoken; } +#line 4316 "c-exp.c.tmp" break; - case 274: -#line 1723 "c-exp.y" /* yacc.c:1646 */ - { + case 280: +#line 1774 "c-exp.y" + { (yyval.sval) = (yyvsp[0].sval); } +#line 4322 "c-exp.c.tmp" + break; + + case 283: +#line 1787 "c-exp.y" + { struct field_of_this_result is_a_field_of_this; (yyval.ssym).stoken = (yyvsp[0].sval); @@ -4118,11 +4334,12 @@ (yyval.ssym).is_a_field_of_this = is_a_field_of_this.type != NULL; } -#line 4123 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 4339 "c-exp.c.tmp" break; -#line 4127 "c-exp.c.tmp" /* yacc.c:1646 */ +#line 4343 "c-exp.c.tmp" + default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -4147,14 +4364,13 @@ /* Now 'shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ - - yyn = yyr1[yyn]; - - yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; - if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) - yystate = yytable[yystate]; - else - yystate = yydefgoto[yyn - YYNTOKENS]; + { + const int yylhs = yyr1[yyn] - YYNTOKENS; + const int yyi = yypgoto[yylhs] + *yyssp; + yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp + ? yytable[yyi] + : yydefgoto[yylhs]); + } goto yynewstate; @@ -4186,7 +4402,7 @@ { if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); - yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc); + yymsg = YY_CAST (char *, YYSTACK_ALLOC (YY_CAST (YYSIZE_T, yymsg_alloc))); if (!yymsg) { yymsg = yymsgbuf; @@ -4237,12 +4453,10 @@ | yyerrorlab -- error raised explicitly by YYERROR. | `---------------------------------------------------*/ yyerrorlab: - - /* Pacify compilers like GCC when the user code never invokes - YYERROR and the label yyerrorlab therefore never appears in user - code. */ - if (/*CONSTCOND*/ 0) - goto yyerrorlab; + /* Pacify compilers when the user code never invokes YYERROR and the + label yyerrorlab therefore never appears in user code. */ + if (0) + YYERROR; /* Do not reclaim the symbols of the rule whose action triggered this YYERROR. */ @@ -4304,6 +4518,7 @@ yyresult = 0; goto yyreturn; + /*-----------------------------------. | yyabortlab -- YYABORT comes here. | `-----------------------------------*/ @@ -4311,6 +4526,7 @@ yyresult = 1; goto yyreturn; + #if !defined yyoverflow || YYERROR_VERBOSE /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | @@ -4321,6 +4537,10 @@ /* Fall through. */ #endif + +/*-----------------------------------------------------. +| yyreturn -- parsing is finished, return the result. | +`-----------------------------------------------------*/ yyreturn: if (yychar != YYEMPTY) { @@ -4337,7 +4557,7 @@ while (yyssp != yyss) { yydestruct ("Cleanup: popping", - yystos[*yyssp], yyvsp); + yystos[+*yyssp], yyvsp); YYPOPSTACK (1); } #ifndef yyoverflow @@ -4350,7 +4570,7 @@ #endif return yyresult; } -#line 1738 "c-exp.y" /* yacc.c:1906 */ +#line 1802 "c-exp.y" /* Like write_exp_string, but prepends a '~'. */ @@ -4404,10 +4624,10 @@ static int type_aggregate_p (struct type *type) { - return (TYPE_CODE (type) == TYPE_CODE_STRUCT - || TYPE_CODE (type) == TYPE_CODE_UNION - || TYPE_CODE (type) == TYPE_CODE_NAMESPACE - || (TYPE_CODE (type) == TYPE_CODE_ENUM + return (type->code () == TYPE_CODE_STRUCT + || type->code () == TYPE_CODE_UNION + || type->code () == TYPE_CODE_NAMESPACE + || (type->code () == TYPE_CODE_ENUM && TYPE_DECLARED_CLASS (type))); } @@ -4422,7 +4642,7 @@ for (ix = 0; ix < params->size (); ++ix) { type = (*params)[ix]; - if (type != NULL && TYPE_CODE (check_typedef (type)) == TYPE_CODE_VOID) + if (type != NULL && check_typedef (type)->code () == TYPE_CODE_VOID) { if (ix == 0) { @@ -4461,7 +4681,10 @@ /* Number of "L" suffixes encountered. */ int long_p = 0; - /* We have found a "L" or "U" suffix. */ + /* Imaginary number. */ + bool imaginary_p = false; + + /* We have found a "L" or "U" (or "i") suffix. */ int found_suffix = 0; ULONGEST high_bit; @@ -4474,6 +4697,12 @@ if (parsed_float) { + if (len >= 1 && p[len - 1] == 'i') + { + imaginary_p = true; + --len; + } + /* Handle suffixes for decimal floating-point: "df", "dd" or "dl". */ if (len >= 2 && p[len - 2] == 'd' && p[len - 1] == 'f') { @@ -4517,7 +4746,12 @@ putithere->typed_val_float.type, putithere->typed_val_float.val)) return ERROR; - return FLOAT; + + if (imaginary_p) + putithere->typed_val_float.type + = init_complex_type (nullptr, putithere->typed_val_float.type); + + return imaginary_p ? COMPLEX_FLOAT : FLOAT; } /* Handle base-switching prefixes 0x, 0t, 0d, 0 */ @@ -4566,7 +4800,7 @@ c = *p++; if (c >= 'A' && c <= 'Z') c += 'a' - 'A'; - if (c != 'l' && c != 'u') + if (c != 'l' && c != 'u' && c != 'i') n *= base; if (c >= '0' && c <= '9') { @@ -4592,6 +4826,11 @@ unsigned_p = 1; found_suffix = 1; } + else if (c == 'i') + { + imaginary_p = true; + found_suffix = 1; + } else return ERROR; /* Char not a digit */ } @@ -4601,13 +4840,13 @@ /* Portably test for overflow (only works for nonzero values, so make a second check for zero). FIXME: Can't we just make n and prevn unsigned and avoid this? */ - if (c != 'l' && c != 'u' && (prevn >= n) && n != 0) + if (c != 'l' && c != 'u' && c != 'i' && (prevn >= n) && n != 0) unsigned_p = 1; /* Try something unsigned */ /* Portably test for unsigned overflow. FIXME: This check is wrong; for example it doesn't find overflow on 0x123456789 when LONGEST is 32 bits. */ - if (c != 'l' && c != 'u' && n != 0) + if (c != 'l' && c != 'u' && c != 'i' && n != 0) { if (unsigned_p && prevn >= n) error (_("Numeric constant too large.")); @@ -4679,7 +4918,11 @@ putithere->typed_val_int.type = signed_type; } - return INT; + if (imaginary_p) + putithere->typed_val_int.type + = init_complex_type (nullptr, putithere->typed_val_int.type); + + return imaginary_p ? COMPLEX_INT : INT; } /* Temporary obstack used for holding strings. */ @@ -4961,11 +5204,15 @@ FLAG_CXX = 1, + /* If this bit is set, the token is C-only. */ + + FLAG_C = 2, + /* If this bit is set, the token is conditional: if there is a symbol of the same name, then the token is a symbol; otherwise, the token is a keyword. */ - FLAG_SHADOW = 2 + FLAG_SHADOW = 4 }; DEF_ENUM_FLAGS_TYPE (enum token_flag, token_flags); @@ -5015,7 +5262,7 @@ /* Identifier-like tokens. Only type-specifiers than can appear in multi-word type names (for example 'double' can appear in 'long double') need to be listed here. type-specifiers that are only ever - single word (like 'float') are handled by the classify_name function. */ + single word (like 'char') are handled by the classify_name function. */ static const struct token ident_tokens[] = { {"unsigned", UNSIGNED, OP_NULL, 0}, @@ -5027,13 +5274,21 @@ {"_Alignof", ALIGNOF, OP_NULL, 0}, {"alignof", ALIGNOF, OP_NULL, FLAG_CXX}, {"double", DOUBLE_KEYWORD, OP_NULL, 0}, + {"float", FLOAT_KEYWORD, OP_NULL, 0}, {"false", FALSEKEYWORD, OP_NULL, FLAG_CXX}, {"class", CLASS, OP_NULL, FLAG_CXX}, {"union", UNION, OP_NULL, 0}, {"short", SHORT, OP_NULL, 0}, {"const", CONST_KEYWORD, OP_NULL, 0}, + {"restrict", RESTRICT, OP_NULL, FLAG_C | FLAG_SHADOW}, + {"__restrict__", RESTRICT, OP_NULL, 0}, + {"__restrict", RESTRICT, OP_NULL, 0}, + {"_Atomic", ATOMIC, OP_NULL, 0}, {"enum", ENUM, OP_NULL, 0}, {"long", LONG, OP_NULL, 0}, + {"_Complex", COMPLEX, OP_NULL, 0}, + {"__complex__", COMPLEX, OP_NULL, 0}, + {"true", TRUEKEYWORD, OP_NULL, FLAG_CXX}, {"int", INT_KEYWORD, OP_NULL, 0}, {"new", NEW, OP_NULL, FLAG_CXX}, @@ -5068,17 +5323,13 @@ static void -scan_macro_expansion (char *expansion) +scan_macro_expansion (const char *expansion) { - const char *copy; - /* We'd better not be trying to push the stack twice. */ gdb_assert (! cpstate->macro_original_text); - /* Copy to the obstack, and then free the intermediate - expansion. */ - copy = obstack_strdup (&cpstate->expansion_obstack, expansion); - xfree (expansion); + /* Copy to the obstack. */ + const char *copy = obstack_strdup (&cpstate->expansion_obstack, expansion); /* Save the old lexptr value, so we can return to it when we're done parsing the expanded text. */ @@ -5148,12 +5399,11 @@ /* Check if this is a macro invocation that we need to expand. */ if (! scanning_macro_expansion ()) { - char *expanded = macro_expand_next (&pstate->lexptr, - standard_macro_lookup, - expression_macro_scope); + gdb::unique_xmalloc_ptr expanded + = macro_expand_next (&pstate->lexptr, *expression_macro_scope); - if (expanded) - scan_macro_expansion (expanded); + if (expanded != nullptr) + scan_macro_expansion (expanded.get ()); } pstate->prev_lexptr = pstate->lexptr; @@ -5166,6 +5416,7 @@ if ((tokentab3[i].flags & FLAG_CXX) != 0 && par_state->language ()->la_language != language_cplus) break; + gdb_assert ((tokentab3[i].flags & FLAG_C) == 0); pstate->lexptr += 3; yylval.opcode = tokentab3[i].opcode; @@ -5179,6 +5430,7 @@ if ((tokentab2[i].flags & FLAG_CXX) != 0 && par_state->language ()->la_language != language_cplus) break; + gdb_assert ((tokentab2[i].flags & FLAG_C) == 0); pstate->lexptr += 2; yylval.opcode = tokentab2[i].opcode; @@ -5263,7 +5515,7 @@ case '9': { /* It's a number. */ - int got_dot = 0, got_e = 0, toktype; + int got_dot = 0, got_e = 0, got_p = 0, toktype; const char *p = tokstart; int hex = input_radix > 10; @@ -5283,13 +5535,16 @@ /* This test includes !hex because 'e' is a valid hex digit and thus does not indicate a floating point number when the radix is hex. */ - if (!hex && !got_e && (*p == 'e' || *p == 'E')) + if (!hex && !got_e && !got_p && (*p == 'e' || *p == 'E')) got_dot = got_e = 1; + else if (!got_e && !got_p && (*p == 'p' || *p == 'P')) + got_dot = got_p = 1; /* This test does not include !hex, because a '.' always indicates a decimal floating point number regardless of the radix. */ else if (!got_dot && *p == '.') got_dot = 1; - else if (got_e && (p[-1] == 'e' || p[-1] == 'E') + else if (((got_e && (p[-1] == 'e' || p[-1] == 'E')) + || (got_p && (p[-1] == 'p' || p[-1] == 'P'))) && (*p == '-' || *p == '+')) /* This is the sign of the exponent, not the end of the number. */ @@ -5302,7 +5557,7 @@ break; } toktype = parse_number (par_state, tokstart, p - tokstart, - got_dot|got_e, &yylval); + got_dot | got_e | got_p, &yylval); if (toktype == ERROR) { char *err_copy = (char *) alloca (p - tokstart + 1); @@ -5473,6 +5728,10 @@ if ((ident_tokens[i].flags & FLAG_CXX) != 0 && par_state->language ()->la_language != language_cplus) break; + if ((ident_tokens[i].flags & FLAG_C) != 0 + && par_state->language ()->la_language != language_c + && par_state->language ()->la_language != language_objc) + break; if ((ident_tokens[i].flags & FLAG_SHADOW) != 0) { diff -Nru gdb-9.1/gdb/c-exp.y gdb-10.2/gdb/c-exp.y --- gdb-9.1/gdb/c-exp.y 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/c-exp.y 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* YACC parser for C expressions, for GDB. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -54,6 +54,7 @@ #include "typeprint.h" #include "cp-abi.h" #include "type-stack.h" +#include "target-float.h" #define parse_type(ps) builtin_type (ps->gdbarch ()) @@ -174,7 +175,7 @@ %type exp exp1 type_exp start variable qualified_name lcurly function_method %type rcurly -%type type typebase +%type type typebase scalar_type %type nonempty_typelist func_mod parameter_typelist /* %type block */ @@ -185,8 +186,8 @@ %type ptr_operator_ts abs_decl direct_abs_decl -%token INT -%token FLOAT +%token INT COMPLEX_INT +%token FLOAT COMPLEX_FLOAT /* Both NAME and TYPENAME tokens represent symbols in the input, and both convey their data as strings. @@ -237,6 +238,8 @@ /* Special type cases, put in to allow the parser to distinguish different legal basetypes. */ %token SIGNED_KEYWORD LONG SHORT INT_KEYWORD CONST_KEYWORD VOLATILE_KEYWORD DOUBLE_KEYWORD +%token RESTRICT ATOMIC +%token FLOAT_KEYWORD COMPLEX %token DOLLAR_VARIABLE @@ -774,6 +777,22 @@ write_exp_elt_opcode (pstate, OP_LONG); } ; +exp : COMPLEX_INT + { + write_exp_elt_opcode (pstate, OP_LONG); + write_exp_elt_type (pstate, TYPE_TARGET_TYPE ($1.type)); + write_exp_elt_longcst (pstate, 0); + write_exp_elt_opcode (pstate, OP_LONG); + write_exp_elt_opcode (pstate, OP_LONG); + write_exp_elt_type (pstate, TYPE_TARGET_TYPE ($1.type)); + write_exp_elt_longcst (pstate, (LONGEST) ($1.val)); + write_exp_elt_opcode (pstate, OP_LONG); + write_exp_elt_opcode (pstate, OP_COMPLEX); + write_exp_elt_type (pstate, $1.type); + write_exp_elt_opcode (pstate, OP_COMPLEX); + } + ; + exp : CHAR { struct stoken_vector vec; @@ -803,6 +822,27 @@ write_exp_elt_opcode (pstate, OP_FLOAT); } ; +exp : COMPLEX_FLOAT + { + struct type *underlying + = TYPE_TARGET_TYPE ($1.type); + + write_exp_elt_opcode (pstate, OP_FLOAT); + write_exp_elt_type (pstate, underlying); + gdb_byte val[16]; + target_float_from_host_double (val, underlying, 0); + write_exp_elt_floatcst (pstate, val); + write_exp_elt_opcode (pstate, OP_FLOAT); + write_exp_elt_opcode (pstate, OP_FLOAT); + write_exp_elt_type (pstate, underlying); + write_exp_elt_floatcst (pstate, $1.val); + write_exp_elt_opcode (pstate, OP_FLOAT); + write_exp_elt_opcode (pstate, OP_COMPLEX); + write_exp_elt_type (pstate, $1.type); + write_exp_elt_opcode (pstate, OP_COMPLEX); + } + ; + exp : variable ; @@ -1169,36 +1209,43 @@ } ; -space_identifier : '@' NAME - { - cpstate->type_stack.insert (pstate, - copy_name ($2.stoken).c_str ()); - } - ; - const_or_volatile: const_or_volatile_noopt | ; -cv_with_space_id : const_or_volatile space_identifier const_or_volatile +single_qualifier: + CONST_KEYWORD + { cpstate->type_stack.insert (tp_const); } + | VOLATILE_KEYWORD + { cpstate->type_stack.insert (tp_volatile); } + | ATOMIC + { cpstate->type_stack.insert (tp_atomic); } + | RESTRICT + { cpstate->type_stack.insert (tp_restrict); } + | '@' NAME + { + cpstate->type_stack.insert (pstate, + copy_name ($2.stoken).c_str ()); + } ; -const_or_volatile_or_space_identifier_noopt: cv_with_space_id - | const_or_volatile_noopt +qualifier_seq_noopt: + single_qualifier + | qualifier_seq single_qualifier ; -const_or_volatile_or_space_identifier: - const_or_volatile_or_space_identifier_noopt +qualifier_seq: + qualifier_seq_noopt | ; ptr_operator: ptr_operator '*' { cpstate->type_stack.insert (tp_pointer); } - const_or_volatile_or_space_identifier + qualifier_seq | '*' { cpstate->type_stack.insert (tp_pointer); } - const_or_volatile_or_space_identifier + qualifier_seq | '&' { cpstate->type_stack.insert (tp_reference); } | '&' ptr_operator @@ -1285,20 +1332,11 @@ type : ptype ; -/* Implements (approximately): (type-qualifier)* type-specifier. +/* A helper production that recognizes scalar types that can validly + be used with _Complex. */ - When type-specifier is only ever a single word, like 'float' then these - arrive as pre-built TYPENAME tokens thanks to the classify_name - function. However, when a type-specifier can contain multiple words, - for example 'double' can appear as just 'double' or 'long double', and - similarly 'long' can appear as just 'long' or in 'long double', then - these type-specifiers are parsed into their own tokens in the function - lex_one_token and the ident_tokens array. These separate tokens are all - recognised here. */ -typebase - : TYPENAME - { $$ = $1.type; } - | INT_KEYWORD +scalar_type: + INT_KEYWORD { $$ = lookup_signed_typename (pstate->language (), "int"); } | LONG @@ -1381,11 +1419,49 @@ "double", NULL, 0); } + | FLOAT_KEYWORD + { $$ = lookup_typename (pstate->language (), + "float", + NULL, + 0); } | LONG DOUBLE_KEYWORD { $$ = lookup_typename (pstate->language (), "long double", NULL, 0); } + | UNSIGNED type_name + { $$ = lookup_unsigned_typename (pstate->language (), + $2.type->name ()); } + | UNSIGNED + { $$ = lookup_unsigned_typename (pstate->language (), + "int"); } + | SIGNED_KEYWORD type_name + { $$ = lookup_signed_typename (pstate->language (), + $2.type->name ()); } + | SIGNED_KEYWORD + { $$ = lookup_signed_typename (pstate->language (), + "int"); } + ; + +/* Implements (approximately): (type-qualifier)* type-specifier. + + When type-specifier is only ever a single word, like 'float' then these + arrive as pre-built TYPENAME tokens thanks to the classify_name + function. However, when a type-specifier can contain multiple words, + for example 'double' can appear as just 'double' or 'long double', and + similarly 'long' can appear as just 'long' or in 'long double', then + these type-specifiers are parsed into their own tokens in the function + lex_one_token and the ident_tokens array. These separate tokens are all + recognised here. */ +typebase + : TYPENAME + { $$ = $1.type; } + | scalar_type + { $$ = $1; } + | COMPLEX scalar_type + { + $$ = init_complex_type (nullptr, $2); + } | STRUCT name { $$ = lookup_struct (copy_name ($2).c_str (), @@ -1452,18 +1528,6 @@ $2.length); $$ = NULL; } - | UNSIGNED type_name - { $$ = lookup_unsigned_typename (pstate->language (), - TYPE_NAME($2.type)); } - | UNSIGNED - { $$ = lookup_unsigned_typename (pstate->language (), - "int"); } - | SIGNED_KEYWORD type_name - { $$ = lookup_signed_typename (pstate->language (), - TYPE_NAME($2.type)); } - | SIGNED_KEYWORD - { $$ = lookup_signed_typename (pstate->language (), - "int"); } /* It appears that this rule for templates is never reduced; template recognition happens by lookahead in the token processing code in yylex. */ @@ -1472,9 +1536,9 @@ (copy_name($2).c_str (), $4, pstate->expression_context_block); } - | const_or_volatile_or_space_identifier_noopt typebase + | qualifier_seq_noopt typebase { $$ = cpstate->type_stack.follow_types ($2); } - | typebase const_or_volatile_or_space_identifier_noopt + | typebase qualifier_seq_noopt { $$ = cpstate->type_stack.follow_types ($1); } ; @@ -1675,13 +1739,14 @@ c_print_type ($2, NULL, &buf, -1, 0, &type_print_raw_options); + std::string name = std::move (buf.string ()); /* This also needs canonicalization. */ - std::string canon - = cp_canonicalize_string (buf.c_str ()); - if (canon.empty ()) - canon = std::move (buf.string ()); - $$ = operator_stoken ((" " + canon).c_str ()); + gdb::unique_xmalloc_ptr canon + = cp_canonicalize_string (name.c_str ()); + if (canon != nullptr) + name = canon.get (); + $$ = operator_stoken ((" " + name).c_str ()); } ; @@ -1689,12 +1754,11 @@ match the 'name' rule to appear as fields within a struct. The example that initially motivated this was the RISC-V target which models the floating point registers as a union with fields called 'float' and - 'double'. The 'float' string becomes a TYPENAME token and can appear - anywhere a 'name' can, however 'double' is its own token, - DOUBLE_KEYWORD, and doesn't match the 'name' rule.*/ + 'double'. */ field_name : name | DOUBLE_KEYWORD { $$ = typename_stoken ("double"); } + | FLOAT_KEYWORD { $$ = typename_stoken ("float"); } | INT_KEYWORD { $$ = typename_stoken ("int"); } | LONG { $$ = typename_stoken ("long"); } | SHORT { $$ = typename_stoken ("short"); } @@ -1788,10 +1852,10 @@ static int type_aggregate_p (struct type *type) { - return (TYPE_CODE (type) == TYPE_CODE_STRUCT - || TYPE_CODE (type) == TYPE_CODE_UNION - || TYPE_CODE (type) == TYPE_CODE_NAMESPACE - || (TYPE_CODE (type) == TYPE_CODE_ENUM + return (type->code () == TYPE_CODE_STRUCT + || type->code () == TYPE_CODE_UNION + || type->code () == TYPE_CODE_NAMESPACE + || (type->code () == TYPE_CODE_ENUM && TYPE_DECLARED_CLASS (type))); } @@ -1806,7 +1870,7 @@ for (ix = 0; ix < params->size (); ++ix) { type = (*params)[ix]; - if (type != NULL && TYPE_CODE (check_typedef (type)) == TYPE_CODE_VOID) + if (type != NULL && check_typedef (type)->code () == TYPE_CODE_VOID) { if (ix == 0) { @@ -1845,7 +1909,10 @@ /* Number of "L" suffixes encountered. */ int long_p = 0; - /* We have found a "L" or "U" suffix. */ + /* Imaginary number. */ + bool imaginary_p = false; + + /* We have found a "L" or "U" (or "i") suffix. */ int found_suffix = 0; ULONGEST high_bit; @@ -1858,6 +1925,12 @@ if (parsed_float) { + if (len >= 1 && p[len - 1] == 'i') + { + imaginary_p = true; + --len; + } + /* Handle suffixes for decimal floating-point: "df", "dd" or "dl". */ if (len >= 2 && p[len - 2] == 'd' && p[len - 1] == 'f') { @@ -1901,7 +1974,12 @@ putithere->typed_val_float.type, putithere->typed_val_float.val)) return ERROR; - return FLOAT; + + if (imaginary_p) + putithere->typed_val_float.type + = init_complex_type (nullptr, putithere->typed_val_float.type); + + return imaginary_p ? COMPLEX_FLOAT : FLOAT; } /* Handle base-switching prefixes 0x, 0t, 0d, 0 */ @@ -1950,7 +2028,7 @@ c = *p++; if (c >= 'A' && c <= 'Z') c += 'a' - 'A'; - if (c != 'l' && c != 'u') + if (c != 'l' && c != 'u' && c != 'i') n *= base; if (c >= '0' && c <= '9') { @@ -1976,6 +2054,11 @@ unsigned_p = 1; found_suffix = 1; } + else if (c == 'i') + { + imaginary_p = true; + found_suffix = 1; + } else return ERROR; /* Char not a digit */ } @@ -1985,13 +2068,13 @@ /* Portably test for overflow (only works for nonzero values, so make a second check for zero). FIXME: Can't we just make n and prevn unsigned and avoid this? */ - if (c != 'l' && c != 'u' && (prevn >= n) && n != 0) + if (c != 'l' && c != 'u' && c != 'i' && (prevn >= n) && n != 0) unsigned_p = 1; /* Try something unsigned */ /* Portably test for unsigned overflow. FIXME: This check is wrong; for example it doesn't find overflow on 0x123456789 when LONGEST is 32 bits. */ - if (c != 'l' && c != 'u' && n != 0) + if (c != 'l' && c != 'u' && c != 'i' && n != 0) { if (unsigned_p && prevn >= n) error (_("Numeric constant too large.")); @@ -2063,7 +2146,11 @@ putithere->typed_val_int.type = signed_type; } - return INT; + if (imaginary_p) + putithere->typed_val_int.type + = init_complex_type (nullptr, putithere->typed_val_int.type); + + return imaginary_p ? COMPLEX_INT : INT; } /* Temporary obstack used for holding strings. */ @@ -2345,11 +2432,15 @@ FLAG_CXX = 1, + /* If this bit is set, the token is C-only. */ + + FLAG_C = 2, + /* If this bit is set, the token is conditional: if there is a symbol of the same name, then the token is a symbol; otherwise, the token is a keyword. */ - FLAG_SHADOW = 2 + FLAG_SHADOW = 4 }; DEF_ENUM_FLAGS_TYPE (enum token_flag, token_flags); @@ -2399,7 +2490,7 @@ /* Identifier-like tokens. Only type-specifiers than can appear in multi-word type names (for example 'double' can appear in 'long double') need to be listed here. type-specifiers that are only ever - single word (like 'float') are handled by the classify_name function. */ + single word (like 'char') are handled by the classify_name function. */ static const struct token ident_tokens[] = { {"unsigned", UNSIGNED, OP_NULL, 0}, @@ -2411,13 +2502,21 @@ {"_Alignof", ALIGNOF, OP_NULL, 0}, {"alignof", ALIGNOF, OP_NULL, FLAG_CXX}, {"double", DOUBLE_KEYWORD, OP_NULL, 0}, + {"float", FLOAT_KEYWORD, OP_NULL, 0}, {"false", FALSEKEYWORD, OP_NULL, FLAG_CXX}, {"class", CLASS, OP_NULL, FLAG_CXX}, {"union", UNION, OP_NULL, 0}, {"short", SHORT, OP_NULL, 0}, {"const", CONST_KEYWORD, OP_NULL, 0}, + {"restrict", RESTRICT, OP_NULL, FLAG_C | FLAG_SHADOW}, + {"__restrict__", RESTRICT, OP_NULL, 0}, + {"__restrict", RESTRICT, OP_NULL, 0}, + {"_Atomic", ATOMIC, OP_NULL, 0}, {"enum", ENUM, OP_NULL, 0}, {"long", LONG, OP_NULL, 0}, + {"_Complex", COMPLEX, OP_NULL, 0}, + {"__complex__", COMPLEX, OP_NULL, 0}, + {"true", TRUEKEYWORD, OP_NULL, FLAG_CXX}, {"int", INT_KEYWORD, OP_NULL, 0}, {"new", NEW, OP_NULL, FLAG_CXX}, @@ -2452,17 +2551,13 @@ static void -scan_macro_expansion (char *expansion) +scan_macro_expansion (const char *expansion) { - const char *copy; - /* We'd better not be trying to push the stack twice. */ gdb_assert (! cpstate->macro_original_text); - /* Copy to the obstack, and then free the intermediate - expansion. */ - copy = obstack_strdup (&cpstate->expansion_obstack, expansion); - xfree (expansion); + /* Copy to the obstack. */ + const char *copy = obstack_strdup (&cpstate->expansion_obstack, expansion); /* Save the old lexptr value, so we can return to it when we're done parsing the expanded text. */ @@ -2532,12 +2627,11 @@ /* Check if this is a macro invocation that we need to expand. */ if (! scanning_macro_expansion ()) { - char *expanded = macro_expand_next (&pstate->lexptr, - standard_macro_lookup, - expression_macro_scope); + gdb::unique_xmalloc_ptr expanded + = macro_expand_next (&pstate->lexptr, *expression_macro_scope); - if (expanded) - scan_macro_expansion (expanded); + if (expanded != nullptr) + scan_macro_expansion (expanded.get ()); } pstate->prev_lexptr = pstate->lexptr; @@ -2550,6 +2644,7 @@ if ((tokentab3[i].flags & FLAG_CXX) != 0 && par_state->language ()->la_language != language_cplus) break; + gdb_assert ((tokentab3[i].flags & FLAG_C) == 0); pstate->lexptr += 3; yylval.opcode = tokentab3[i].opcode; @@ -2563,6 +2658,7 @@ if ((tokentab2[i].flags & FLAG_CXX) != 0 && par_state->language ()->la_language != language_cplus) break; + gdb_assert ((tokentab2[i].flags & FLAG_C) == 0); pstate->lexptr += 2; yylval.opcode = tokentab2[i].opcode; @@ -2647,7 +2743,7 @@ case '9': { /* It's a number. */ - int got_dot = 0, got_e = 0, toktype; + int got_dot = 0, got_e = 0, got_p = 0, toktype; const char *p = tokstart; int hex = input_radix > 10; @@ -2667,13 +2763,16 @@ /* This test includes !hex because 'e' is a valid hex digit and thus does not indicate a floating point number when the radix is hex. */ - if (!hex && !got_e && (*p == 'e' || *p == 'E')) + if (!hex && !got_e && !got_p && (*p == 'e' || *p == 'E')) got_dot = got_e = 1; + else if (!got_e && !got_p && (*p == 'p' || *p == 'P')) + got_dot = got_p = 1; /* This test does not include !hex, because a '.' always indicates a decimal floating point number regardless of the radix. */ else if (!got_dot && *p == '.') got_dot = 1; - else if (got_e && (p[-1] == 'e' || p[-1] == 'E') + else if (((got_e && (p[-1] == 'e' || p[-1] == 'E')) + || (got_p && (p[-1] == 'p' || p[-1] == 'P'))) && (*p == '-' || *p == '+')) /* This is the sign of the exponent, not the end of the number. */ @@ -2686,7 +2785,7 @@ break; } toktype = parse_number (par_state, tokstart, p - tokstart, - got_dot|got_e, &yylval); + got_dot | got_e | got_p, &yylval); if (toktype == ERROR) { char *err_copy = (char *) alloca (p - tokstart + 1); @@ -2857,6 +2956,10 @@ if ((ident_tokens[i].flags & FLAG_CXX) != 0 && par_state->language ()->la_language != language_cplus) break; + if ((ident_tokens[i].flags & FLAG_C) != 0 + && par_state->language ()->la_language != language_c + && par_state->language ()->la_language != language_objc) + break; if ((ident_tokens[i].flags & FLAG_SHADOW) != 0) { diff -Nru gdb-9.1/gdb/ChangeLog gdb-10.2/gdb/ChangeLog --- gdb-9.1/gdb/ChangeLog 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/ChangeLog 2021-04-25 04:06:27.000000000 +0000 @@ -1,16576 +1,12990 @@ -2020-02-08 Joel Brobecker +2021-04-25 Joel Brobecker - * version.in: Set GDB version number to 9.1. + * version.in: Set GDB version number to 10.2. -2020-02-05 Iain Buclaw +2021-04-22 Simon Marchi - PR gdb/25190: - * gdb/remote-sim.c (gdb_os_write_stderr): Update. - * gdb/remote.c (remote_console_output): Update. - * gdb/ui-file.c (fputs_unfiltered): Rename to... - (ui_file_puts): ...this. - * gdb/ui-file.h (ui_file_puts): Add declaration. - * gdb/utils.c (emit_style_escape): Update. - (flush_wrap_buffer): Update. - (fputs_maybe_filtered): Update. - (fputs_unfiltered): Add function. + PR gdb/27757 + * python/py-type.c (typy_range): Check that bounds are constant + before accessing them as such. + * guile/scm-type.c (gdbscm_type_range): Likewise. -2020-02-05 Iain Buclaw +2021-04-22 Simon Marchi - * gdb/event-loop.c (gdb_wait_for_event): Update. - * gdb/printcmd.c (printf_command): Update. - * gdb/remote-fileio.c (remote_fileio_func_write): Update. - * gdb/remote-sim.c (gdb_os_flush_stdout): Update. - (gdb_os_flush_stderr): Update. - * gdb/remote.c (remote_console_output): Update. - * gdb/ui-file.c (gdb_flush): Rename to... - (ui_file_flush): ...this. - (stderr_file::write): Update. - (stderr_file::puts): Update. - * gdb/ui-file.h (gdb_flush): Rename to... - (ui_file_flush): ...this. - * gdb/utils.c (gdb_flush): Add function. - * gdb/utils.h (gdb_flush): Add declaration. + PR gdb/27757 + * python/py-type.c (typy_range): Check that bounds are constant + before accessing them as such. + * guile/scm-type.c (gdbscm_type_range): Likewise. -2020-02-07 Tom Tromey +2021-03-30 Simon Marchi - PR breakpoints/24915: - * source.c (find_and_open_source): Do not check basenames_may_differ. + PR gdb/27541 + * dwarf2/read.c (dwarf2_has_info): Don't share dwarf2_per_bfd + with objfiles using READNOW. -2020-01-10 Christian Biesinger +2021-03-12 Christian Biesinger - * gdbsupport/common-defs.h: Don't define _FORTIFY_SOURCE on MinGW. + PR threads/27239 + * cp-support.c: Use scoped_segv_handler_restore. + * event-top.c (thread_local_segv_handler): Made static. + (scoped_segv_handler_restore::scoped_segv_handler_restore): + New function. + (scoped_segv_handler_restore::~scoped_segv_handler_restore): New + function. + * event-top.h (class scoped_segv_handler_restore): New class. + (thread_local_segv_handler): Removed. -2020-01-07 Tom Tromey +2021-03-07 Tom de Vries - PR build/24937: - * stap-probe.c (class stap_static_probe_ops): Add constructor. + PR symtab/27341 + * dwarf2/read.c (read_array_type): Return NULL when not being able to + construct an array type. Add assert to ensure that element_type is + not being modified. + +2021-03-06 Kevin Buettner + + PR build/27536 + * nat/aarch64-linux-hw-point.c: Include after + . + +2021-03-06 Kevin Buettner + + PR build/27535 + * nat/amd64-linux-siginfo.c: Include "gdbsupport/common-defs.h" + (which in turn includes ) before include + of . + +2021-03-06 Tom de Vries + + PR symtab/27333 + * dwarf2/read.c (process_psymtab_comp_unit): Handle DW_TAG_type_unit. + +2021-03-04 Simon Marchi + + PR gdb/27147 + * sparc-nat.h (sparc_fetch_inferior_registers): Add + process_stratum_target parameter, + sparc_store_inferior_registers): update callers. + * sparc-nat.c (sparc_fetch_inferior_registers, + sparc_store_inferior_registers): Add process_stratum_target + parameter. Switch current thread before calling + sparc_supply_gregset / sparc_collect_rwindow. + (sparc_store_inferior_registers): Likewise. + * sparc-obsd-tdep.c (sparc32obsd_supply_uthread): Add assertion. + (sparc32obsd_collect_uthread): Likewise. + * sparc-tdep.c (sparc_supply_rwindow, sparc_collect_rwindow): + Add assertion. + * sparc64-obsd-tdep.c (sparc64obsd_collect_uthread, + sparc64obsd_supply_uthread): Add assertion. -2020-01-06 Andrew Burgess +2021-02-25 Simon Marchi - * stack.c (print_frame_info): Move disassemble_next_line code - inside source_print block. + PR gdb/26861 + * target.c (target_mourn_inferior): Only compare pids in + target_mourn_inferior. -2020-01-01 Joel Brobecker +2021-02-23 Simon Marchi - * gdbarch.sh: Update copyright year range of generated files. + PR gdb/26828 + * dwarf2/read.c (dwarf2_queue_guard) : + Instantiate queue. + (~dwarf2_queue_guard): Clear queue. + (queue_comp_unit): Assert that queue is + instantiated. + (process_queue): Adjust. + * dwarf2/read.h (struct dwarf2_per_bfd) : Make optional. -2020-01-01 Joel Brobecker +2021-02-23 Simon Marchi - Update copyright year range in all the GDB files automatically - handled by our copyright.py script. + PR gdb/26828 + * dwarf2/read.c (maybe_queue_comp_unit): Check if CU is expanded + to decide whether or not to enqueue it for expansion. + (follow_die_offset, follow_die_sig_1): Ensure we load the DIEs + after calling maybe_queue_comp_unit. -2020-01-01 Joel Brobecker +2021-02-22 Simon Marchi - * copyright.py: Convert to Python 3. + PR gdb/27435 + * inf-ptrace.c (struct target_unpusher): Move to target.h. + (target_unpush_up): Likewise. + * procfs.c (procfs_target::attach): Push target early. Use + target_unpush_up to unpush target in case of error. + * target.h (struct target_unpusher): Move here. + (target_unpush_up): Likewise. -2020-01-01 Joel Brobecker +2021-02-09 Shahab Vahedi - * copyright.py: Adapt after move of gnulib directory from gdb - directory to toplevel directory. + PR build/27385 + * arch/arc.c (arc_lookup_target_description): Use + target_desc_up() ctor explicitly. -2020-01-01 Joel Brobecker +2021-02-08 Shahab Vahedi - * copyright.py (main): Exit if run from the wrong directory. + PR tdep/27369 + * arc-linux-tdep.c (handle_atomic_sequence): New. + (arc_linux_software_single_step): Call handle_atomic_sequence(). -2020-01-01 Joel Brobecker +2021-02-05 Tom de Vries - * top.c (print_gdb_version): Change copyright year to 2020. + PR breakpoints/27330 + * breakpoint.c (create_exception_master_breakpoint): Handle case that + glibc object file has debug info. -2019-12-26 Christian Biesinger +2021-02-02 Simon Marchi - * configure: Regenerate. - * configure.ac: Quote variable arguments of test. - * gdbsupport/common.m4: Likewise. + PR gdb/26813 + * dwarf2/read.c (read_loclists_rnglists_header): Add + header_offset parameter and use it. + (read_loclist_index): Read header of the current contribution, + not the one at the beginning of the section. + (read_rnglist_index): Likewise. -2019-12-21 Eli Zaretskii +2021-02-02 Simon Marchi - * top.c (print_gdb_configuration): Print "--with-xxhash" or - "--without-xxhash" according to HAVE_LIBXXHASH. + * dwarf2/read.c (read_loclist_index): Add bound check for the end + of the offset. -2019-12-18 Tom Tromey +2021-02-02 Simon Marchi - PR build/25268: - * gdbsupport/thread-pool.c (set_thread_name): Expect "int" return - type on macOS. Add comment. + * dwarf2/read.c (read_rnglist_index): Fix bound check. -2019-12-18 Tom Tromey +2021-02-02 Simon Marchi - PR build/25250: - * ui-out.c (ui_out::vmessage): Update. - * ui-out.h (enum class field_kind) : - Rename. - (string_field): Update. - (signed_field): Update. + * dwarf2/read.c (read_loclist_index): Change complaints into + errors. -2019-12-16 Simon Marchi +2021-01-08 Tom de Vries - * jit.c (finalize_symtab): Set gdb_block_iter_tmp in loop. + PR gdb/26881 + * breakpoint.c (create_exception_master_breakpoint_probe) + (create_exception_master_breakpoint_hook): Factor out + of ... + (create_exception_master_breakpoint): ... here. Only try to install + the master exception breakpoint in objfile.debug using the + _Unwind_DebugHook method, if the install using probes in objfile + failed. -2019-12-11 Joel Brobecker +2021-01-07 Pedro Alves + Simon Marchi + Tom de Vries - * version.in: Set GDB version number to 9.0.90.DATE-git. + PR remote/26614 + * remote.c (remote_async_inferior_event_handler): Hold a strong + reference to the remote target while handling an event. -2019-12-11 Joel Brobecker +2021-01-01 Joel Brobecker - GDB 9.0.90 released. + * gdbarch.sh: Update copyright year range. -2019-12-11 Joel Brobecker +2021-01-01 Joel Brobecker - * version.in: Set GDB version number to 9.0.90. + Update copyright year range in copyright header of all GDB files. -2019-12-11 Joel Brobecker +2021-01-01 Joel Brobecker - * NEWS: Change "Changes since GDB 8.3" into "Changes in GDB 9". + * copyright.py (get_update_list): Add "gdbserver" and "gdbsupport" + to the list of directories to update. -2019-12-11 Joel Brobecker +2021-01-01 Joel Brobecker - GDB 9 branch created (27f7b2f64062ac9e52afc60509263c2702a9ebd0): - * version.in: Bump version to 9.0.90.DATE-git. + * top.c (print_gdb_version): Update copyright year. -2019-12-11 Tom Tromey +2020-12-09 Simon Marchi - PR build/25268: - * gdbsupport/thread-pool.c (set_thread_name): New function. - (thread_pool::set_thread_count): Don't call pthread_setname_np. - (thread_pool::thread_function): Call set_thread_name. + * gdbtypes.c (get_discrete_low_bound, get_discrete_high_bound): + Return {} instead of false. + (get_discrete_bounds): Compute high bound only if low bound is + valid. -2019-12-11 Tom Tromey +2020-12-09 Simon Marchi - * fbsd-tdep.c (fbsd_core_info_proc_status): Cast result of - bfd_get_signed_8. + PR 26875, PR 26901 + * gdbtypes.c (get_discrete_low_bound): Make non-static. + (get_discrete_high_bound): Make non-static. + * gdbtypes.h (get_discrete_low_bound): New declaration. + (get_discrete_high_bound): New declaration. + * valarith.c (value_subscript): Only fetch high bound if + necessary. -2019-12-11 Philippe Waroquiers +2020-12-09 Simon Marchi - * NEWS: Document -raw-values option and the related setting commands. - * printcmd.c (print_command_parse_format): Do not set opts->raw off, - only set it on when /r is given. - * valprint.c (value_print_option_defs): New element raw-values. - * Makefile.in: Add the new file. + * gdbtypes.c (get_discrete_bounds): Implement with + get_discrete_low_bound and get_discrete_high_bound. + (get_discrete_low_bound): New. + (get_discrete_high_bound): New. -2019-12-10 Christian Biesinger +2020-12-09 Simon Marchi - * gdbsupport/safe-strerror.c: Supress the unused function warning - for select_strerror_r. + * gdbtypes.h (get_discrete_bounds): Return bool, adjust all + callers. + * gdbtypes.c (get_discrete_bounds): Return bool. -2019-12-10 Christian Biesinger +2020-12-09 Simon Marchi - * config.in: Regenerate. - * configure: Regenerate. - * gdbsupport/agent.c (gdb_connect_sync_socket): Call - safe_strerror instead of strerror. - * gdbsupport/common.m4: Don't check for strerror. - * gdbsupport/safe-strerror.c: Support both the glibc version - of strerror_r and the XSI version. - -2019-12-10 Tom Tromey - - * ada-typeprint.c (print_choices): Use a single "?". - (print_variant_part): Print "?" if the discriminant name - is not known. - -2019-12-10 George Barrett - - Fix scripted probe breakpoints. - * breakpoint.c (tracepoint_probe_breakpoint_ops): Move - declaration forward. - (breakpoint_ops_for_event_location_type) - (breakpoint_ops_for_event_location): Add function definitions. - (break_command_1, trace_command): Use - breakpoint_ops_for_event_location. - * breakpoint.h (breakpoint_ops_for_event_location): Add function - declarations. - * guile/scm-breakpoint.c (gdbscm_register_breakpoint_x): Use - breakpoint_ops_for_event_location. - * python/py-breakpoint.c (bppy_init): Use - breakpoint_ops_for_event_location. - -2019-12-09 Tankut Baris Aktemur - - * gdbtypes.c (rank_one_type): Return INCOMPATIBLE_TYPE_BADNESS - when ranking an lvalue argument for an rvalue parameter. - -2019-12-08 Wataru Ashihara - - * darwin-nat.c (darwin_nat_target::create_inferior): Fix - template argument for scoped_restore_tmpl from bool to int. - -2019-12-07 Keith Seitz - - * build-id.c (build_id_bfd_get): Permit bfd_core, too. - (build_id_to_debug_bfd): Make static, rewriting to use - build_id_to_bfd_suffix. - (build_id_to_bfd_suffix): Copy of build_id_to_debug_bfd, - adding `suffix' parameter. Append SUFFIX to file names - when searching for matching files. - (build_id_to_debug_bfd): Use build_id_to_bfd_suffix. - (build_id_to_exec_bfd): Likewise. - * build-id.h (build_id_to_debug_bfd): Clarify that function - searches for BFD of debug info file. - (build_id_to_exec_bfd): Declare. - * corelow.c: Include build-id.h. - (locate_exec_from_corefile_build_id): New function. - (core_target_open): If no executable BFD is found, - search for a core file BFD using build-id. - -2019-12-06 Christian Biesinger - - * bcache.c: Put in namespace gdb. - * bcache.h: Likewise. - * gdbtypes.c (check_types_worklist): Update. - (types_deeply_equal): Update. - * macrotab.c (struct macro_table) : Update. - (new_macro_table): Update. - * macrotab.h (struct bcache): Put this forward declaration - inside namespace gdb. - (new_macro_table): Update. - * objfiles.h (struct objfile_per_bfd_storage) : - Update. - : Update. - * psymtab.h: (psymtab_storage) : Update. + * ada-lang.c (ada_value_slice_from_ptr): Adjust. + (ada_value_slice): Adjust. + (pos_atr): Adjust. + * gdbtypes.c (get_discrete_bounds): Adjust. + (discrete_position): Return optional. + * gdbtypes.h (discrete_position): Return optional. -2019-12-06 Tom de Vries +2020-12-06 Giancarlo Frix (tiny change) - PR symtab/24971 - * block.c (best_symbol, better_symbol): New function. - (block_lookup_symbol_primary, block_lookup_symbol): Prefer def over - decl. + PR breakpoints/27009 + * s390-tdep.h (op_bc): Correct BC opcode value. -2019-12-06 Tankut Baris Aktemur +2020-12-04 Shahab Vahedi - * gdbtypes.h: Define the REFERENCE_SEE_THROUGH_BADNESS value. - * gdbtypes.c (rank_one_type): Use REFERENCE_SEE_THROUGH_BADNESS - for ranking see-through reference cases. - -2019-12-06 Philippe Waroquiers - * stack.c (faas_command): Check a command is provided. - * thread.c (taas_command, tfaas_command): Likewise. - -2019-12-05 Philippe Waroquiers - * inferior.c (prune_inferiors): Only call delete_inferior, - Do not modify the inferior list. - -2019-12-05 Simon Marchi - - * c-exp.y: Update calls to lookup_typename, - lookup_signed_typename and lookup_unsigned_typename. - * c-lang.c (evaluate_subexp_c): Likewise. - * cp-namespace.c (cp_lookup_symbol_imports_or_template): - Likewise. - * eval.c (binop_promote): Likewise. - * gdbtypes.c (lookup_typename): Remove gdbarch parameter. - (lookup_unsigned_typename): Likewise. - (lookup_signed_typename): Likewise. - * gdbtypes.h (lookup_unsigned_typename): Likewise. - (lookup_signed_typename): Likewise. - (lookup_typename): Likewise. - * guile/scm-type.c (tyscm_lookup_typename): Update calls to - lookup_typename, lookup_signed_typename, - lookup_unsigned_typename. - * m2-exp.y: Likewise. - * printcmd.c (printf_wide_c_string): Likewise. - (ui_printf): Likewise. - * python/py-type.c (typy_lookup_typename): Likewise. - * python/py-xmethods.c (python_xmethod_worker::invoke): - Likewise. - * rust-exp.y: Likewise. + PR tdep/27015 + * arc-linux-tdep.c (collect_register): Populate "eret" by + "pc" value from the regcache when asked for "pc" value. -2019-12-04 Christian Biesinger +2020-11-29 Hannes Domani - * configure.nat (obsd64): Add missing files x86-nat.o and - nat/x86-dregs.o. + PR tui/26973 + * tui/tui-layout.c (tui_apply_current_layout): Don't delete the + static locator win info. -2019-12-04 Tom Tromey +2020-11-06 Romain Geissler - * valprint.c (val_print_string): Use metadata_style. - * go-valprint.c (print_go_string): Use metadata style. - * p-valprint.c (pascal_object_print_static_field): Use metadata - style. - * cp-valprint.c (cp_print_static_field): Use metadata style. + PR python/26832 + * configure: Regenerate. + * configure.ac: Check for python modules ctypes instead of + itertools. -2019-12-04 Andrew Burgess - Chris January +2020-10-24 Joel Brobecker - * f-exp.y (COMPLEX_KEYWORD, SINGLE, DOUBLE, PRECISION): New - tokens. - (typebase): New patterns for complex, single/double precision, and - single/double complex. - (f77_keywords): Change token for complex keyword, and add single, - double, and precision keywords. + * version.in: Set GDB version number to 10.1.90.DATE-git. -2019-12-04 Simon Marchi +2020-10-24 Joel Brobecker - * avr-tdep.c (_initialize_avr_tdep): Improve help of command - "info io_registers". + GDB 10.1 released. -2019-12-04 Simon Marchi +2020-10-24 Joel Brobecker - * regcache.c (cooked_read_test): Initialize thread list of - mock_inferior. + * version.in: Set GDB version number to 10.1. -2019-12-04 Simon Marchi +2020-10-22 Hannes Domani - * aarch64-linux-tdep.c: Remove includes. + * gdbtypes.c (init_complex_type): Check target type name. -2019-12-04 Simon Marchi +2020-10-22 Simon Marchi - * aarch64-tdep.c: Remove includes. + PR gdb/26693 + * dwarf2/read.c (load_full_comp_unit): Add existing_cu + parameter. + (load_cu): Pass existing CU. + (process_imported_unit_die): Likewise. + (follow_die_offset): Likewise. -2019-12-04 Simon Marchi +2020-10-14 Mihails Strasuns - * filtered-iterator.h (filtered_iterator) : Compare wrapped iterators, not wrapped pointers. - * Makefile.in (SUBDIR_UNITTESTS_SRCS): Add - unittests/filtered_iterator-selftests.c. - * unittests/filtered_iterator-selftests.c: New file. + * breakpoint.c (handle_jit_event): Add an argument, change how + `jit_event_handler` is called. -2019-12-04 Tom Tromey +2020-10-13 Simon Marchi - * gdbtypes.c (create_range_type): Inherit endianity - from base type. + PR gdb/26642 + * infrun.c (do_target_wait_1): Clear TARGET_WNOHANG if the + target can't do async. + * target.c (target_wait): Assert that we don't pass + TARGET_WNOHANG to a target that can't async. -2019-12-04 Tom Tromey +2020-10-08 Shahab Vahedi - * ada-lang.c (decode_constrained_packed_array) - (ada_value_assign, value_assign_to_component): Update. - * dwarf2loc.c (rw_pieced_value, access_memory) - (dwarf2_compile_expr_to_ax): Update. - * dwarf2read.c (dwarf2_add_field): Update. - * eval.c (evaluate_subexp_standard): Update. - * gdbarch.c, gdbarch.h: Rebuild. - * gdbarch.sh (bits_big_endian): Remove. - * gdbtypes.h (union field_location): Update comment. - * target-descriptions.c (make_gdb_type): Update. - * valarith.c (value_bit_index): Update. - * value.c (struct value) : Update comment. - (unpack_bits_as_long, modify_field): Update. - * value.h (value_bitpos): Update comment. - -2019-12-04 Tom Tromey - - * gdbtypes.c (type_byte_order): Move earlier. Assert for unknown - endian-ness. - -2019-12-04 Tom Tromey - - * dwarf2read.c (dwarf2_init_float_type) - (dwarf2_init_complex_target_type): Add byte_order parameter. - (read_base_type): Compute byte order earlier. - * gdbtypes.c (init_float_type): Add byte_order parameter. - * gdbtypes.h (init_float_type): Add byte_order parameter. - -2019-12-04 Tom Tromey - - * unittests/tui-selftests.c: Conditionally include tui-winsource.h. - -2019-12-04 Tom Tromey - - * dwarf2read.c (process_structure_scope): Initialize - "discr_offset". - -2019-12-04 Andrew Burgess - - * mi/mi-symbol-cmds.c (mi_symbol_info): Take extra parameter, and - add it into the search spec. - (parse_max_results_option): New function. - (mi_info_functions_or_variables): Parse -max-results flag and pass - it to mi_symbol_info. - (mi_cmd_symbol_info_modules): Likewise. - (mi_cmd_symbol_info_types): Likewise. - * symtab.c (global_symbol_searcher::add_matching_symbols): Change - return type to bool, change result container into a set, and don't - add new results if we have enough already. - (global_symbol_searcher::add_matching_msymbols): Change return - type to bool, and don't add new results if we have enough already. - (sort_search_symbols_remove_dups): Delete. - (global_symbol_searcher::search): Early exit from search loop when - we have enough results. Use a std::set to collect the results - from calling add_matching_symbols. - * symtab.h (global_symbol_searcher) : New - member function. - (global_symbol_searcher) : New member - variable. - (global_symbol_searcher) : Update header - comment and change return type to bool. - (global_symbol_searcher) : Update header - comment and change return type to bool. + * NEWS: Mention ARC support in GDBserver. -2019-12-04 Andrew Burgess +2020-10-07 Anton Kolesov - * symtab.c (symbol_search::compare_search_syms): Update header - comment. - (global_symbol_searcher::is_suitable_msymbol): New function. - (global_symbol_searcher::expand_symtabs): New function. - (global_symbol_searcher::add_matching_symbols): New function. - (global_symbol_searcher::add_matching_msymbols): New function. - (global_symbol_searcher::search): Move most of the content - into the new functions above, and call them as needed. - * symtab.h (global_symbol_searcher) : New member - function. - (global_symbol_searcher) : New member - function. - (global_symbol_searcher) : New member - function. - (global_symbol_searcher) : New member - function. + * arc-linux-tdep.h: New file. + * arc-linux-tdep.c (arc_linux_core_reg_offsets, + arc_linux_supply_gregset, arc_linux_supply_v2_regset, + arc_linux_collect_gregset, arc_linux_collect_v2_regset, + arc_linux_gregset, arc_linux_v2_regset, + arc_linux_iterate_over_regset_sections, + arc_linux_core_read_description): Implement. + (arc_linux_init_osabi): Set iterate_over_regset_sections. + * arc-tdep.h (ARC_OFFSET_NO_REGISTER): Declare. + (arc_gdbarch_features_create): Add. + * arc-tdep.c (arc_gdbarch_features_create): Not static anymore. -2019-12-04 Andrew Burgess +2020-10-07 Shahab Vahedi - * mi/mi-cmds.c (mi_cmds): Add -symbol-info-module-functions and - -symbol-info-module-variables entries. - * mi/mi-cmds.h (mi_cmd_symbol_info_module_functions): Declare. - (mi_cmd_symbol_info_module_variables): Declare. - * mi/mi-symbol-cmds.c - (module_symbol_search_iterator): New typedef. - (output_module_symbols_in_single_module_and_file): New function. - (output_module_symbols_in_single_module): New function. - (mi_info_module_functions_or_variables): New function. - (mi_cmd_symbol_info_module_functions): New function. - (mi_cmd_symbol_info_module_variables): New function. - * NEWS: Mention new MI command. - -2019-12-03 Christian Biesinger - - * bcache.c (hash): Remove. - (hash_continue): Remove. - * bcache.h (hash): Remove. - (hash_continue): Remove. - (struct bcache) : Update. - * psymtab.c (psymbol_hash): Update. - * stabsread.c (hashname): Update. - * utils.h (fast_hash): Add an argument for a start value, - defaulting to zero. - -2019-12-03 Philippe Waroquiers - * symtab.c (symbol_cache_clear_slot): Move close to cleared type. - (destroy_block_symbol_cache): New function. - (symbol_cache:~symbol_cache) Call destroy_block_symbol_cache. - (resize_symbol_cache): Likewise. - -2019-12-02 Tom Tromey - - * unittests/tui-selftests.c (run_tests): Make conditional. - (_initialize_tui_selftest): Make conditional. - -2019-12-02 Christian Biesinger - - * aix-thread.c (debug_aix_thread): Change type to bool. - -2019-12-02 Luis Machado - - * infrun.c (follow_fork_inferior): Remove outdated FIXME comment. - -2019-12-01 Andrew Burgess - - * dwarf2read.c (read_tag_string_type): Read the fields required to - make a dynamic string, and possibly create a dynamic range for the - string. - (attr_to_dynamic_prop): Setup is_reference based on the type of - attribute being processed. - * gdbtypes.c (is_dynamic_type_internal): Handle TYPE_CODE_STRING. - (resolve_dynamic_array): Rename to... - (resolve_dynamic_array_or_string): ...this, update header comment, - and accept TYPE_CODE_STRING. - (resolve_dynamic_type_internal): Handle TYPE_CODE_STRING. - -2019-12-01 Andrew Burgess - - * dwarf2read.c (dwarf2_per_cu_int_type): New function, takes most - of its implementation from... - (dwarf2_per_cu_addr_sized_int_type): ...here, which now just calls - the new function. - -2019-12-01 Andrew Burgess - - * dwarf2read.c (read_subrange_type): Read bit and byte stride and - create a range with stride where appropriate. - * f-valprint.c: Include 'gdbarch.h'. - (f77_print_array_1): Take the stride into account when walking the - array. Also convert the stride into addressable units. - * gdbtypes.c (create_range_type): Initialise the stride to - constant zero. - (create_range_type_with_stride): New function, initialise the - range as normal, and then setup the stride. - (has_static_range): Include the stride here. Also change the - return type to bool. - (create_array_type_with_stride): Consider the range stride if the - array isn't given its own stride. - (resolve_dynamic_range): Resolve the stride if needed. - * gdbtypes.h (struct range_bounds) : New member variable. - (struct range_bounds) : New member variable. - (TYPE_BIT_STRIDE): Define. - (TYPE_ARRAY_BIT_STRIDE): Define. - (create_range_type_with_stride): Declare. - * valarith.c (value_subscripted_rvalue): Take range stride into - account when walking the array. - -2019-12-01 Tom Tromey - - * tui/tui-win.c (tui_all_windows_info): Treat inactive TUI - specially. - -2019-12-01 Tom Tromey - - * tui/tui-winsource.c (tui_copy_source_line): Don't advance past - \0. - * unittests/tui-selftests.c: New file. - * Makefile.in (SUBDIR_UNITTESTS_SRCS): Add tui-selftests.c. - -2019-12-01 Tom Tromey - - * tui/tui.c (tui_enable): Call tui_update_variables earlier. - -2019-12-01 Tom Tromey - - * NEWS: Document new settings. - * tui/tui-wingeneral.c (box_win): Apply appropriate border style. - * tui/tui-win.c (_initialize_tui_win): Add border style - observers. - * tui/tui-io.h (tui_apply_style): Declare. - * tui/tui-io.c (tui_apply_style): Rename from apply_style. No - longer static. - (apply_ansi_escape, tui_set_reverse_mode): Update. - * cli/cli-style.h (class cli_style_option) : - Add "skip_intensity" parameter. - : New member. - : Declare. - (tui_border_style, tui_active_border_style): Declare. - * cli/cli-style.c (tui_border_style, tui_active_border_style): New - globals. - (cli_style_option): Initialize "changed". - (cli_style_option::do_set_value): New function. - (cli_style_option::add_setshow_commands): Add "skip_intensity" - parameter. Update. - (STYLE_ADD_SETSHOW_COMMANDS): Add "SKIP" parameter. - (_initialize_cli_style): Update. Create TUI border style - commands. + * arch/arc.h: Rename "arc_gdbarch_features" to + "arc_arch_features". + * arc-tdep.h: Likewise. + * arc-tdep.c: Likewise. -2019-12-01 Tom Tromey +2020-09-28 Gareth Rees (tiny change) - * tui/tui-winsource.h (tui_copy_source_line): Add "ndigits" - parameter. - * tui/tui-winsource.c (tui_copy_source_line): Add "ndigits" - parameter. - * tui/tui-win.h (compact_source): Declare. - * tui/tui-win.c (compact_source): New global. - (tui_set_compact_source, tui_show_compact_source): New functions. - (_initialize_tui_win): Add "compact-source" setting. - * tui/tui-source.c (tui_source_window::set_contents): Handle - compact_source setting. - * tui/tui-disasm.c (tui_disasm_window::set_contents): Update. - * NEWS: Document new setting. - -2019-11-30 Tom Tromey - - * dwarf2read.c (dwarf2_add_field): Include field offset when - computing variant part length. - -2019-11-30 Philippe Waroquiers - * NEWS: Mention define-prefix. Tell that command names can now - contain a . character. - -2019-11-30 Philippe Waroquiers - - * command.h (valid_cmd_char_p): Declare. - * cli/cli-decode.c (valid_cmd_char_p): New function factorizing - the check of valid command char. - (find_command_name_length, valid_user_defined_cmd_name_p): Use - valid_cmd_char_p. - * cli/cli-script.c (validate_comname): Likewise. - * completer.c (gdb_completer_command_word_break_characters): - Do not remove . from the word break char, update comments. - (complete_line_internal_1): Use valid_cmd_char_p. - * guile/scm-cmd.c (gdbscm_parse_command_name): Likewise. - * python/py-cmd.c (gdbpy_parse_command_name): Likewise. + PR python/26586 + * cli/cli-script.c (execute_control_commands): don't set + instream to nullptr here as this breaks the from_tty argument + to gdb.execute in Python. + (execute_user_command): set instream to nullptr here instead. -2019-11-30 Philippe Waroquiers +2020-09-25 Tankut Baris Aktemur - * cli/cli-script.c (do_define_command): Ensure a redefined - prefix command is kept as a prefix command. - (define_prefix_command): New function. - (show_user_1): Report user defined prefixes. - (_initialize_cli_script): Create the new 'define-prefix' command. - Add completers for 'define' and 'document'. - * top.c (execute_command): If command is a user-defined prefix only - command, report the list of commands for this prefix command. + * breakpoint.c (commands_command_1): Make a copy of the 'arg' + argument. -2019-11-29 Tankut Baris Aktemur +2020-09-24 Tom Tromey - * valops.c (find_oload_champ): Improve debug output. + PR tui/26638: + * tui/tui-stack.h (struct tui_locator_window) : New + method. + * tui/tui-data.h (struct tui_win_info) : New method. + * tui/tui-data.c (tui_next_win): Exclude non-focusable windows. + (tui_prev_win): Rewrite. -2019-11-29 Tankut Baris Aktemur +2020-09-23 Hannes Domani - * valops.c (find_oload_champ): Print part of debug messages - before the badness vector is std::move'd. + * nat/windows-nat.c (handle_exception): Handle 64bit breakpoints + in WOW64 processes as SIGINT. + * nat/windows-nat.h: Make wow64_process a shared variable. + * windows-nat.c: Remove static wow64_process variable. -2019-11-28 Tom Tromey +2020-09-18 Victor Collod - * value.c (creal_internal_fn): Fix comment. + PR gdb/26635 + * i386-tdep.c (i386_skip_endbr): Add a helper function to skip endbr. + (i386_analyze_prologue): Call i386_skip_endbr. -2019-11-28 Tom Tromey +2020-09-18 Pedro Alves - * gdbtypes.h (struct range_bounds) : Now unsigned. + PR gdb/26631 + * thread.c (thread_find_command): Switch inferior before calling + target methods. -2019-11-28 Tom Tromey +2020-09-16 Tom Tromey - * guile/guile-internal.h (vlscm_scm_from_value_unsafe): Don't - declare. + PR gdb/26598: + * infrun.c (fill_in_stop_func): Use find_pc_partial_function_sym. -2019-11-28 Mihails Strasuns +2020-09-14 Fredrik Hederstierna + Adam Renquinha - * jit.c (jit_bfd_try_read_symtab): Fix printed function name in the - debug output. - * jit.c (jit_unregister_code): Add debug print to match - `jit_register_code`. - -2019-11-27 Christian Biesinger - - * NEWS: Mention the new multithreaded symbol loading. - -2019-11-27 Christian Biesinger - - * maint.c (n_worker_threads): Default to 0. - (worker_threads_disabled): New function. - * maint.h (worker_threads_disabled): New function. - * minsyms.c (minimal_symbol_reader::record_full): Call symbol_set_names - here if worker_threads_disabled () is true. - (minimal_symbol_reader::install): Skip all threading if - worker_threads_disabled () is true. - -2019-11-27 Christian Biesinger - - * minsyms.c (add_minsym_to_hash_table): Use a previously computed - hash code if possible. - (add_minsym_to_demangled_hash_table): Likewise. - (minimal_symbol_reader::install): Compute the hash codes for msymbol - on the background thread. - * symtab.h (struct minimal_symbol) : - Add these fields. - -2019-11-27 Christian Biesinger - - * minsyms.c (minimal_symbol_reader::install): Also compute the hash - of the mangled name on the background thread. - * symtab.c (symbol_set_names): Allow passing in the hash of the - linkage_name. - * symtab.h (symbol_set_names): Likewise. - -2019-11-27 Kevin Buettner - - * dwarf2read.c (inherit_abstract_dies): Ensure that delayed - physnames are computed for inherited DIEs. - -2019-11-27 Tom Tromey - - * dwarf2read.h (struct dwarf2_per_objfile): Remove unnecessary - backslashes. - * cp-support.c: Remove unnecessary backslashes. - -2019-11-27 Christian Biesinger - - * ada-exp.y (write_ambiguous_var): Replace SYMBOL_SET_LINKAGE_NAME - with sym->set_linkage_name. - * coffread.c (coff_read_enum_type): Likewise. - * mdebugread.c (parse_symbol): Likewise. - * stabsread.c (patch_block_stabs): Likewise. - (define_symbol): Likewise. - (read_enum_type): Likewise. - (common_block_end): Likewise. - * symtab.h (struct general_symbol_info) : New - function. - (SYMBOL_SET_LINKAGE_NAME): Remove. - * xcoffread.c (process_xcoff_symbol): Replace SYMBOL_SET_LINKAGE_NAME - with sym->set_linkage_name. - -2019-11-27 Andrew Burgess - - * mi/mi-cmds.c (mi_cmds): Add 'symbol-info-modules' entry. - * mi/mi-cmds.h (mi_cmd_symbol_info_modules): Declare. - * mi/mi-symbol-cmds.c (mi_cmd_symbol_info_modules): New function. - * NEWS: Mention new MI command. - -2019-11-27 Andrew Burgess - - * mi/mi-cmds.c (mi_cmds): Add '-symbol-info-functions', - '-symbol-info-types', and '-symbol-info-variables'. - * mi/mi-cmds.h (mi_cmd_symbol_info_functions): Declare. - (mi_cmd_symbol_info_types): Declare. - (mi_cmd_symbol_info_variables): Declare. - * mi/mi-symbol-cmds.c: Add 'source.h' and 'mi-getopt.h' includes. - (output_debug_symbol): New function. - (output_nondebug_symbol): New function. - (mi_symbol_info): New function. - (mi_info_functions_or_variables): New function. - (mi_cmd_symbol_info_functions): New function. - (mi_cmd_symbol_info_types): New function. - (mi_cmd_symbol_info_variables): New function. - * NEWS: Mention new commands. - -2019-11-27 Andrew Burgess - - * symtab.c (symbol_to_info_string): New function, most content - moved from print_symbol_info, but updated to return a std::string. - (print_symbol_info): Update to use symbol_to_info_string and print - returned string. - * symtab.h (symbol_to_info_string): Declare new function. - -2019-11-27 Andrew Burgess - - * python/python.c (gdbpy_rbreak): Convert to using - global_symbol_searcher. - * symtab.c (file_matches): Convert return type to bool, change - file list to std::vector, update header comment. - (search_symbols): Rename to... - (global_symbol_searcher::search): ...this and update now its - a member function of global_symbol_searcher. Take account of the - changes to file_matches. - (symtab_symbol_info): Convert to using global_symbol_searcher. - (rbreak_command): Likewise. - (search_module_symbols): Likewise. - * symtab.h (enum symbol_search): Update comment. - (search_symbols): Remove declaration. - (class global_symbol_searcher): New class. - -2019-11-26 Tom Tromey - - * cp-support.c (_initialize_cp_support): Conditionally initialize - gdb_demangle_attempt_core_dump. - -2019-11-26 Tom Tromey - - * python/py-function.c (fnpy_init): Update. - * value.h (add_internal_function): Adjust declaration. - * value.c (function_destroyer): Remove. - (do_add_internal_function): Don't set destroyer or copy name. - (add_internal_function): Take unique_xmalloc_ptr for name. - Set name_allocated. - * python/py-cmd.c (cmdpy_destroyer): Don't free "name". - (cmdpy_init): Set name_allocated. - * cli/cli-decode.h (struct cmd_list_element) : New - member. - (~cmd_list_element): Free "name" if needed. + * arm-tdep.c (arm_m_exception_cache): Try use correct stack + pointer and stack frame offset when unwinding. -2019-11-26 Tom Tromey +2020-09-13 Joel Brobecker - * value.h (add_internal_function): Add new overload. Move - documentation from value.h. - * value.c (do_add_internal_function): New function. - (add_internal_function): Use it. Add new overload. - (function_destroyer): Don't free doc. - * python/py-function.c (fnpy_init): Update. + * version.in: Set GDB version number to 10.0.90.DATE-git. -2019-11-26 Tom Tromey +2020-09-13 Joel Brobecker - * python/py-cmd.c (cmdpy_destroyer): Don't free "doc". - (cmdpy_init): Set "doc_allocated". + GDB 10.0.90 released. -2019-11-26 Tom Tromey +2020-09-13 Joel Brobecker - * gdbsupport/thread-pool.c (thread_pool::set_thread_count): Set - name of worker thread. - * gdbsupport/common.m4 (GDB_AC_COMMON): Check for - pthread_setname_np. - * configure, config.in: Rebuild. + * version.in: Set GDB version number to 10.0.90. -2019-11-26 Tom Tromey +2020-09-13 Joel Brobecker - * python/python.c (class gdbpy_gil): New. - (struct gdbpy_event): Add constructor, destructor, operator(). - (gdbpy_post_event): Use run_on_main_thread. - (gdbpy_initialize_events): Remove. - (do_start_initialization): Update. + * NEWS: Change "Changes since GDB 9" to "Changes in GDB 10". -2019-11-26 Tom Tromey +2020-09-13 Joel Brobecker - * NEWS: Add entry. - * maint.c (_initialize_maint_cmds): Add "worker-threads" maint - commands. Call update_thread_pool_size. - (update_thread_pool_size, maintenance_set_worker_threads): New - functions. - (n_worker_threads): New global. + GDB 10 branch created (8087c3fa8b5d695e3e29e69d70d0b35ec902ac59): + * version.in: Bump version to 10.0.90.DATE-git. -2019-11-26 Christian Biesinger - Tom Tromey +2020-09-12 Joel Brobecker - * minsyms.c (minimal_symbol_reader::install): Use - parallel_for_each. - * gdbsupport/parallel-for.h: New file. - * Makefile.in (HFILES_NO_SRCDIR): Add gdbsupport/parallel-for.h. + * infrun.c (namespace selftests): Only define #if GDB_SELF_TEST. -2019-11-26 Christian Biesinger - Tom Tromey +2020-09-11 Moritz Riesterer + Felix Willgerodt - * gdbsupport/thread-pool.h: New file. - * gdbsupport/thread-pool.c: New file. - * Makefile.in (COMMON_SFILES): Add thread-pool.c. - (HFILES_NO_SRCDIR): Add thread-pool.h. - -2019-11-26 Tom Tromey - - * event-top.h (thread_local_segv_handler): Declare. - * event-top.c (thread_local_segv_handler): New global. - (install_handle_sigsegv, handle_sigsegv): New functions. - (async_init_signals): Install SIGSEGV handler. - * cp-support.c (gdb_demangle_jmp_buf): Change type. Now - thread-local. - (report_failed_demangle): New function. - (gdb_demangle): Make core_dump_allowed atomic. Remove signal - handler-setting code, instead use segv_handler. Run warning code - on main thread. - -2019-11-26 Tom Tromey - - * run-on-main-thread.c: New file. - * run-on-main-thread.h: New file. - * unittests/main-thread-selftests.c: New file. - * Makefile.in (SUBDIR_UNITTESTS_SRCS): Add - main-thread-selftests.c. - (HFILES_NO_SRCDIR): Add run-on-main-thread.h. - (COMMON_SFILES): Add run-on-main-thread.c. - -2019-11-26 Tom Tromey - - * main.c (setup_alternate_signal_stack): Remove. - (captured_main_1): Use gdb::alternate_signal_stack. - * gdbsupport/alt-stack.h: New file. - -2019-11-26 Tom Tromey - - * gdbsupport/signals-state-save-restore.c (original_signal_mask): - Remove comment. - (save_original_signals_state, restore_original_signals_state): Use - gdb_sigmask. - * linux-nat.c (block_child_signals, restore_child_signals_mask) - (_initialize_linux_nat): Use gdb_sigmask. - * guile/guile.c (_initialize_guile): Use block_signals. - * Makefile.in (HFILES_NO_SRCDIR): Add gdb-sigmask.h. - * gdbsupport/gdb-sigmask.h: New file. - * event-top.c (async_sigtstp_handler): Use gdb_sigmask. - * cp-support.c (gdb_demangle): Use gdb_sigmask. - * gdbsupport/common.m4 (GDB_AC_COMMON): Check for - pthread_sigmask. - * configure, config.in: Rebuild. - * gdbsupport/block-signals.h: New file. - -2019-11-26 Tom Tromey - - * acinclude.m4: Include ax_pthread.m4. - * Makefile.in (PTHREAD_CFLAGS, PTHREAD_LIBS): New variables. - (INTERNAL_CFLAGS_BASE): Use PTHREAD_CFLAGS. - (CLIBS): Use PTHREAD_LIBS. - (aclocal_m4_deps): Add ax_pthread.m4. - * config.in, configure: Rebuild. - * gdbsupport/common.m4 (GDB_AC_COMMON): Check for std::thread. - -2019-11-26 Tom Tromey - - * symtab.h (struct minimal_symbol) : New member. - * minsyms.c (minimal_symbol_reader::record_full): Copy name. - Don't call symbol_set_names. - (minimal_symbol_reader::install): Call symbol_set_names. - -2019-11-26 Philippe Waroquiers - - * python/python.c (gdbpy_enter::~gdbpy_enter): Release GIL after - restore_active_ext_lang, as GIL is needed for (indirectly) - called PyOS_InterruptOccurred. + * gdbarch.sh: Added bfloat16 type. + * gdbarch.c: Regenerated. + * gdbarch.h: Regenerated. + * gdbtypes.c (floatformats_bfloat16): New struct. + (gdbtypes_post_init): Add builtin_bfloat16. + * gdbtypes.h (struct builtin_type) : New member. + (floatformats_bfloat16): New struct. + * i386-tdep.c (i386_zmm_type): Add field "v32_bfloat16" + (i386_ymm_type): Add field "v16_bfloat16" + (i386_gdbarch_init): Add set_gdbarch_bfloat16_format. + * target-descriptions.c (make_gdb_type): Add case TDESC_TYPE_BFLOAT16. + * gdbsupport/tdesc.cc (tdesc_predefined_types): New member bfloat16. + * gdbsupport/tdesc.h (tdesc_type_kind): New member TDESC_TYPE_BFLOAT16. + * features/i386/64bit-avx512.xml: Add bfloat16 type. + * features/i386/64bit-avx512.c: Regenerated. + * features/i386/64bit-sse.xml: Add bfloat16 type. + * features/i386/64bit-sse.c: Regenerated. -2019-11-26 Simon Marchi +2020-09-11 Felix Willgerodt - * sparc-nat.c (sparc_xfer_wcookie): Sync declaration with - definition. + * i386-tdep.c (i386_zmm_type): Fix field names. + (i386_ymm_type): Fix field names. -2019-11-26 Simon Marchi +2020-09-11 Tankut Baris Aktemur - * remote-sim.c (simulator_command): Make static, remove - declaration. + * breakpoint.c: Fix typo in the help message of the + "set breakpoint condition-evaluation" command. -2019-11-26 Simon Marchi +2020-09-10 Kamil Rytarowski - * unittests/array-view-selftests.c (check_ptr_size_ctor2): Make - static. - * unittests/basic_string_view/capacity/1.cc (test01): Likewise. - * unittests/basic_string_view/cons/char/1.cc (test01): Likewise. - (main): Likewise. - * unittests/basic_string_view/cons/char/2.cc (test03): Likewise. - (main): Likewise. - * unittests/basic_string_view/cons/char/3.cc (test05): Likewise. - (main): Likewise. - * unittests/basic_string_view/element_access/char/1.cc (test01): - Likewise. - (main): Likewise. - * unittests/basic_string_view/element_access/char/empty.cc (main): - Likewise. - * unittests/basic_string_view/element_access/char/front_back.cc - (test01): Likewise. - (main): Likewise. - * unittests/basic_string_view/inserters/char/2.cc (test05): - Likewise. - (main): Likewise. - * unittests/basic_string_view/modifiers/remove_prefix/char/1.cc - (test01): Likewise. - (main): Likewise. - * unittests/basic_string_view/modifiers/remove_suffix/char/1.cc - (test01): Likewise. - (main): Likewise. - * unittests/basic_string_view/modifiers/swap/char/1.cc (test01): - Likewise. - * unittests/basic_string_view/operations/compare/char/1.cc - (test01): Likewise. - (main): Likewise. - * unittests/basic_string_view/operations/compare/char/13650.cc - (test01): Likewise. - * unittests/basic_string_view/operations/copy/char/1.cc (test01): - Likewise. - (main): Likewise. - * unittests/basic_string_view/operations/data/char/1.cc (test01): - Likewise. - (main): Likewise. - * unittests/basic_string_view/operations/find/char/1.cc (test01): - Likewise. - (main): Likewise. - * unittests/basic_string_view/operations/find/char/2.cc (test02): - Likewise. - (main): Likewise. - * unittests/basic_string_view/operations/find/char/3.cc (test03): - Likewise. - (main): Likewise. - * unittests/basic_string_view/operations/find/char/4.cc (main): - Likewise. - * unittests/basic_string_view/operations/rfind/char/1.cc (test01): - Likewise. - (main): Likewise. - * unittests/basic_string_view/operations/rfind/char/2.cc (test02): - Likewise. - (main): Likewise. - * unittests/basic_string_view/operations/rfind/char/3.cc (test03): - Likewise. - (main): Likewise. - * unittests/basic_string_view/operations/substr/char/1.cc - (test01): Likewise. - (main): Likewise. - * unittests/basic_string_view/operators/char/2.cc (main): - Likewise. - * unittests/optional/assignment/1.cc (test): Likewise. - * unittests/optional/assignment/2.cc (test): Likewise. - * unittests/optional/assignment/3.cc (test): Likewise. - * unittests/optional/assignment/4.cc (test): Likewise. - * unittests/optional/assignment/5.cc (test): Likewise. - * unittests/optional/assignment/6.cc (test): Likewise. - * unittests/optional/assignment/7.cc (test): Likewise. - * unittests/optional/cons/copy.cc (test): Likewise. - * unittests/optional/cons/default.cc (test): Likewise. - * unittests/optional/cons/move.cc (test): Likewise. - * unittests/optional/cons/value.cc (test): Likewise. - * unittests/optional/in_place.cc (test): Likewise. - * unittests/optional/observers/1.cc (test): Likewise. - * unittests/optional/observers/2.cc (test): Likewise. - -2019-11-26 Simon Marchi - - * tui-win.h (tui_set_var_cmd): Remove. - * tui-win.c (tui_set_var_cmd): Make static. - -2019-11-26 Simon Marchi - - * breakpoint.h (hbreak_command_wrapper, thbreak_command_wrapper, - rbreak_command_wrapper): Remove. - * symtab.c (rbreak_command_wrapper): Remove. - -2019-11-26 Simon Marchi - - * inferior.h (info_terminal_command): Remove declaration. - * inflow.c (info_terminal_command): Make static. - -2019-11-26 Simon Marchi - - * inferior.c (exit_inferior_silent): Remove. - -2019-11-26 Simon Marchi - - * dictionary.c (dict_empty, mdict_empty): Remove. - * dictionary.c (mdict_empty): Remove. - -2019-11-26 Simon Marchi - - * arc-tdep.c (arc_insn_get_memory_base_reg): Make static. - (arc_insn_get_memory_offset): Likewise. - (arc_insn_dump): Likewise. - * cp-support.c (test_cp_symbol_name_matches): Likewise. - * csky-linux-tdep.c (csky_supply_fregset): Likewise. - * dictionary.c (dict_iterator_next): Likewise. - (dict_iter_match_first): Likewise. - (dict_iter_match_next): Likewise. - * f-lang.c (evaluate_subexp_f): Likewise. - * hppa-tdep.c (hppa_read_pc): Likewise. - * i386-tdep.c (i386_floatformat_for_type): Likewise. - * parse.c (write_exp_elt_msym): Likewise. - * ppc-linux-tdep.c (ppc_floatformat_for_type): Likewise. - * remote.c (remote_packet_size): Likewise. - (remote_notif_stop_parse): Likewise. - * rs6000-aix-tdep.c (aix_sighandle_frame_sniffer): Likewise. - * s12z-tdep.c (s12z_disassemble_info): Likewise. - * source.c (prepare_path_for_appending): Likewise. - * sparc64-linux-tdep.c - (sparc64_linux_handle_segmentation_fault); Likewise. - * stack.c (frame_selection_by_function_completer): Likewise. + * nbsd-nat.c: Include "nat/netbsd-nat.h". + * (nbsd_nat_target::pid_to_exec_file) + (nbsd_nat_target::thread_alive, nbsd_nat_target::thread_name) + (nbsd_nat_target::post_startup_inferior) + (nbsd_nat_target::post_attach, nbsd_nat_target::xfer_partial) + (nbsd_add_threads): Switch local code to common gdb/nat functions. + * (nbsd_pid_to_cmdline): Call sysctl from the global namespace. + * (nbsd_thread_lister): Remove. -2019-11-26 Simon Marchi +2020-09-10 Kamil Rytarowski - * completer.c (set_gdb_completion_word_break_characters): - Remove. + * fork-inferior.c (startup_inferior): Avoid double free. -2019-11-26 Simon Marchi +2020-09-10 Kamil Rytarowski - * dwarf-index-write.c: Include dwarf-index-write.h. - * mi/mi-interp.c: Include mi/mi-interp.h. + * netbsd-nat.h (netbsd_nat::qxfer_siginfo): Add. + * netbsd-nat.c (netbsd_nat::qxfer_siginfo): Likewise. -2019-11-26 Simon Marchi +2020-09-10 Kamil Rytarowski - * aarch32-tdep.c: Include aarch32-tdep.h. - * aarch32-tdep.h: Forward-declare struct target_desc. - -2019-11-26 Christian Biesinger - - * linux-nat.c (detach_one_lwp): Call safe_strerror instead of - strerror. - * nto-procfs.c (nto_procfs_target::create_inferior): Likewise. - * windows-nat.c (windows_nat_target::create_inferior): Likewise. - -2019-11-25 Tom de Vries - - * contrib/words.sh: Add -c option. - -2019-11-25 Christian Biesinger - - * solib.c (solib_find_1): Change int to bool. - (exec_file_find): Change int to bool. - (solib_find): Change int to bool. - (solib_read_symbols): Change int to bool. - (solib_used): Change int to bool. - (solib_add): Change int to bool. - (info_sharedlibrary_command): Change int to bool. - (solib_contains_address_p): Change int to bool. - (solib_keep_data_in_core): Change int to bool. - (in_solib_dynsym_resolve_code): Change int to bool. - (reload_shared_libraries_1): Change int to bool. - (gdb_sysroot_changed): Change int to bool. - * solib.h (solib_read_symbols): Change int to bool. - (solib_contains_address_p): Change int to bool. - (solib_keep_data_in_core): Change int to bool. - (in_solib_dynsym_resolve_code): Change int to bool. - (libpthread_name_p): Change int to bool. - -2019-11-25 Luis Machado - - * NEWS (New Commands): Mention "set debug remote-packet-max-chars". - * remote.c (REMOTE_DEBUG_MAX_CHAR): Remove. - (remote_packet_max_chars): New static global. - (show_remote_packet_max_chars): New function. - (remote_target::putpkt_binary): Adjust to use new - remote_packet_max_chars option. - (remote_target::getpkt_or_notif_sane_1): Likewise. - (_initialize_remote): Register new remote-packet-max-chars option. + * netbsd-nat.h (netbsd_nat::enable_proc_events): Add. + * netbsd-nat.c: Include . + * (netbsd_nat::enable_proc_events): Add. -2019-11-24 Simon Marchi +2020-09-10 Kamil Rytarowski - * m68k-linux-nat.c: Include gdbarch.h. + * netbsd-nat.h: Include "gdbsupport/function-view.h". + * (netbsd_nat::thread_alive, netbsd_nat::thread_name) + (netbsd_nat::for_each_thread): Add. + * netbsd-nat.c: Include "gdbsupport/common-defs.h" and + "gdbsupport/common-debug.h". + * (netbsd_nat::netbsd_thread_lister) + (netbsd_nat::thread_alive, netbsd_nat::thread_name) + (netbsd_nat::for_each_thread): Add. -2019-11-24 Tom Tromey +2020-09-10 Kamil Rytarowski - * symfile.c (read_symbols): Update. - * psymtab.c (require_partial_symbols): Change type of "verbose" to - bool. - (psym_map_symtabs_matching_filename, find_pc_sect_psymtab) - (psym_lookup_symbol, psym_find_last_source_symtab) - (psym_forget_cached_source_info, psym_print_stats) - (psym_expand_symtabs_for_function, psym_expand_all_symtabs) - (psym_expand_symtabs_with_fullname, psym_map_symbol_filenames) - (psym_map_matching_symbols, psym_expand_symtabs_matching) - (psym_find_compunit_symtab_by_address) - (maintenance_print_psymbols, maintenance_info_psymtabs) - (maintenance_check_psymtabs): Update. - * psymtab.h (require_partial_symbols): Change type of "verbose" to - bool. + * netbsd-nat.h: Include . + * (netbsd_nat::pid_to_exec_file): Add. + * netbsd-nat.c: Include and . + * (netbsd_nat::pid_to_exec_file) Add. -2019-11-22 Tom Tromey +2020-09-10 Kamil Rytarowski - * observable.h: Update comments. + * configure.nat (NATDEPFILES): Add nat/netbsd-nat.o when needed. -2019-11-22 Tom Tromey +2020-09-10 Kamil Rytarowski - * ada-tasks.c (ada_task_is_alive): Make parameter const. - (print_ada_task_info): Don't try to fetch thread id if task is not - alive. - -2019-11-22 Christian Biesinger - - * ada-exp.y: Update. - * ada-lang.c (sort_choices): Update. - (ada_print_symbol_signature): Update. - (resolve_subexp): Update. - (ada_parse_renaming): Update. - (ada_read_renaming_var_value): Update. - (lesseq_defined_than): Update. - (remove_extra_symbols): Update. - (remove_irrelevant_renamings): Update. - (ada_add_block_symbols): Update. - (ada_collect_symbol_completion_matches): Update. - (ada_is_renaming_symbol): Update. - (aggregate_assign_from_choices): Update. - (ada_evaluate_subexp): Update. - (ada_has_this_exception_support): Update. - (ada_is_non_standard_exception_sym): Update. - (ada_add_exceptions_from_frame): Update. - (ada_add_global_exceptions): Update. - (ada_print_subexp): Update. - * ax-gdb.c (gen_var_ref): Update. - (gen_maybe_namespace_elt): Update. - (gen_expr_for_cast): Update. - (gen_expr): Update. - * block.h: Update. - * blockframe.c (find_pc_partial_function): Update. - * breakpoint.c (print_breakpoint_location): Update. - (update_static_tracepoint): Update. - * btrace.c (ftrace_print_function_name): Update. - (ftrace_function_switched): Update. - * buildsym.c (find_symbol_in_list): Update. - * c-exp.y: Update. - * c-typeprint.c (c_print_typedef): Update. - (c_type_print_template_args): Update. - * cli/cli-cmds.c (edit_command): Update. - (list_command): Update. - (print_sal_location): Update. - * coffread.c (patch_opaque_types): Update. - (process_coff_symbol): Update. - (coff_read_enum_type): Update. - * compile/compile-c-symbols.c (c_symbol_substitution_name): Update. - (convert_one_symbol): Update. - (hash_symname): Update. - (eq_symname): Update. - * compile/compile-cplus-symbols.c (convert_one_symbol): Update. - * compile/compile-cplus-types.c (debug_print_scope): Update. - * compile/compile-loc2c.c (do_compile_dwarf_expr_to_c): Update. - * compile/compile-object-load.c (get_out_value_type): Update. - * cp-namespace.c (cp_scan_for_anonymous_namespaces): Update. - (search_symbol_list): Update. - (cp_lookup_symbol_imports_or_template): Update. - * cp-support.c (overload_list_add_symbol): Update. - * ctfread.c (psymtab_to_symtab): Update. - * dbxread.c (cp_set_block_scope): Update. - * dictionary.c (iter_match_first_hashed): Update. - (iter_match_next_hashed): Update. - (insert_symbol_hashed): Update. - (iter_match_next_linear): Update. - * dictionary.h: Update. - * dwarf2loc.c (func_get_frame_base_dwarf_block): Update. - (locexpr_describe_location_piece): Update. - (locexpr_describe_location_1): Update. - (locexpr_generate_c_location): Update. - (loclist_describe_location): Update. - (loclist_generate_c_location): Update. - * dwarf2read.c (dw2_debug_names_lookup_symbol): Update. - (read_func_scope): Update. - (process_enumeration_scope): Update. - (new_symbol): Update. - (dwarf2_const_value): Update. - (dwarf2_symbol_mark_computed): Update. - * eval.c (evaluate_funcall): Update. - (evaluate_subexp_standard): Update. - * expprint.c (print_subexp_standard): Update. - (dump_subexp_body_standard): Update. - * f-valprint.c (info_common_command_for_block): Update. - * findvar.c (get_hosting_frame): Update. - (default_read_var_value): Update. - * go-lang.c (go_symbol_package_name): Update. - * guile/scm-block.c (bkscm_print_block_smob): Update. - * guile/scm-symbol.c (syscm_print_symbol_smob): Update. - (gdbscm_symbol_name): Update. - (gdbscm_symbol_linkage_name): Update. - (gdbscm_symbol_print_name): Update. - * infcall.c (get_function_name): Update. - * infcmd.c (jump_command): Update. - (finish_command): Update. - * infrun.c (insert_exception_resume_breakpoint): Update. - * linespec.c (canonicalize_linespec): Update. - (create_sals_line_offset): Update. - (convert_linespec_to_sals): Update. - (complete_label): Update. - (find_label_symbols_in_block): Update. - * m2-typeprint.c (m2_print_typedef): Update. - * mdebugread.c (mdebug_reg_to_regnum): Update. - (parse_symbol): Update. - (mylookup_symbol): Update. - * mi/mi-cmd-stack.c (list_arg_or_local): Update. - (list_args_or_locals): Update. - * objc-lang.c (compare_selectors): Update. - (info_selectors_command): Update. - (compare_classes): Update. - (info_classes_command): Update. - (find_imps): Update. - * p-typeprint.c (pascal_print_typedef): Update. - * printcmd.c (build_address_symbolic): Update. - (info_address_command): Update. - (print_variable_and_value): Update. - * python/py-framefilter.c (extract_sym): Update. - (py_print_single_arg): Update. - * python/py-symbol.c (sympy_str): Update. - (sympy_get_name): Update. - (sympy_get_linkage_name): Update. - * python/python.c (gdbpy_rbreak): Update. - * record-btrace.c (btrace_get_bfun_name): Update. - (btrace_call_history): Update. - * rust-lang.c (rust_print_typedef): Update. - * solib-frv.c (frv_fdpic_find_canonical_descriptor): Update. - * stabsread.c (stab_reg_to_regnum): Update. - (define_symbol): Update. - (read_enum_type): Update. - (common_block_end): Update. - (cleanup_undefined_types_1): Update. - (scan_file_globals): Update. - * stack.c (print_frame_arg): Update. - (print_frame_args): Update. - (find_frame_funname): Update. - (info_frame_command_core): Update. - (iterate_over_block_locals): Update. - (print_block_frame_labels): Update. - (do_print_variable_and_value): Update. - (iterate_over_block_arg_vars): Update. - (return_command): Update. - * symmisc.c (dump_symtab_1): Update. - (print_symbol): Update. - * symtab.c (eq_symbol_entry): Update. - (symbol_cache_dump): Update. - (lookup_language_this): Update. - (find_pc_sect_line): Update. - (skip_prologue_sal): Update. - (symbol_search::compare_search_syms): Update. - (treg_matches_sym_type_name): Update. - (search_symbols): Update. - (print_symbol_info): Update. - (rbreak_command): Update. - (completion_list_add_symbol): Update. - (find_gnu_ifunc): Update. - (get_symbol_address): Update. - (search_module_symbols): Update. - (info_module_subcommand): Update. - * symtab.h (SYMBOL_NATURAL_NAME): Remove. - (SYMBOL_LINKAGE_NAME): Remove. - (SYMBOL_DEMANGLED_NAME): Remove. - (SYMBOL_PRINT_NAME): Remove. - (SYMBOL_SEARCH_NAME): Remove. - * tracepoint.c (set_traceframe_context): Update. - (validate_actionline): Update. - (collection_list::collect_symbol): Update. - (encode_actions_1): Update. - (info_scope_command): Update. - (print_one_static_tracepoint_marker): Update. - * typeprint.c (typedef_hash_table::add_template_parameters): Update. - * valops.c (address_of_variable): Update. - (find_overload_match): Update. - (find_oload_champ): Update. - -2019-11-22 Christian Biesinger - - * ada-lang.c (ada_lookup_simple_minsym): Update. - (ada_collect_symbol_completion_matches): Update. - * ada-tasks.c (read_atcb): Update. - * amd64-windows-tdep.c (amd64_skip_main_prologue): Update. - (amd64_windows_skip_trampoline_code): Update. - * arm-tdep.c (skip_prologue_function): Update. - (arm_skip_stack_protector): Update. - * arm-wince-tdep.c (arm_pe_skip_trampoline_code): Update. - (arm_wince_skip_main_prologue): Update. - * ax-gdb.c (gen_expr): Update. - * block.c (call_site_for_pc): Update. - * blockframe.c (find_pc_partial_function): Update. - * breakpoint.c (set_breakpoint_location_function): Update. - * btrace.c (ftrace_print_function_name): Update. - (ftrace_function_switched): Update. - * c-valprint.c (print_unpacked_pointer): Update. - * coffread.c (coff_symfile_read): Update. - * compile/compile-c-symbols.c (convert_symbol_bmsym): Update. - * compile/compile-cplus-symbols.c (convert_symbol_bmsym): Update. - * dwarf-index-write.c (write_psymbols): Update. - * dwarf2loc.c (call_site_to_target_addr): Update. - (func_verify_no_selftailcall): Update. - (tailcall_dump): Update. - (call_site_find_chain_1): Update. - (dwarf_expr_reg_to_entry_parameter): Update. - * elfread.c (elf_gnu_ifunc_record_cache): Update. - * eval.c (evaluate_funcall): Update. - (evaluate_subexp_standard): Update. - (evaluate_subexp_for_sizeof): Update. - * expprint.c (print_subexp_standard): Update. - (dump_subexp_body_standard): Update. - * frame.c (get_prev_frame_always_1): Update. - * frv-tdep.c (frv_skip_main_prologue): Update. - * gnu-v2-abi.c (gnuv2_value_rtti_type): Update. - * gnu-v3-abi.c (gnuv3_rtti_type): Update. - (gnuv3_get_typename_from_type_info): Update. - (gnuv3_skip_trampoline): Update. - * hppa-tdep.c (hppa_lookup_stub_minimal_symbol): Update. - * i386-tdep.c (i386_skip_main_prologue): Update. - (i386_pe_skip_trampoline_code): Update. - * ia64-tdep.c (ia64_convert_from_func_ptr_addr): Update. - * infcall.c (get_function_name): Update. - * linespec.c (minsym_found): Update. - * linux-fork.c (info_checkpoints_command): Update. - * m32c-tdep.c (m32c_m16c_address_to_pointer): Update. - (m32c_m16c_pointer_to_address): Update. - * maint.c (maintenance_translate_address): Update. - * minsyms.c (add_minsym_to_hash_table): Update. - (add_minsym_to_demangled_hash_table): Update. - (lookup_minimal_symbol_mangled): Update. - (lookup_minimal_symbol_demangled): Update. - (lookup_minimal_symbol_linkage): Update. - (lookup_minimal_symbol_text): Update. - (lookup_minimal_symbol_by_pc_name): Update. - (minimal_symbol_is_less_than): Update. - (compact_minimal_symbols): Update. - (build_minimal_symbol_hash_tables): Update. - (find_solib_trampoline_target): Update. - * mips-tdep.c (mips_stub_frame_sniffer): Update. - (mips_skip_pic_trampoline_code): Update. - * msp430-tdep.c (msp430_skip_trampoline_code): Update. - * objc-lang.c (info_selectors_command): Update. - (info_classes_command): Update. - (find_methods): Update. - (find_imps): Update. - * p-valprint.c (pascal_val_print): Update. - * ppc-linux-tdep.c (powerpc_linux_in_dynsym_resolve_code): Update. - * ppc-sysv-tdep.c (convert_code_addr_to_desc_addr): Update. - * printcmd.c (build_address_symbolic): Update. - (info_symbol_command): Update. - * psymtab.c (psymbol_name_matches): Update. - (match_partial_symbol): Update. - (lookup_partial_symbol): Update. - (print_partial_symbols): Update. - (sort_pst_symbols): Update. - (maintenance_check_psymtabs): Update. - * python/py-framefilter.c (py_print_frame): Update. - * python/python.c (gdbpy_rbreak): Update. - * record-btrace.c (btrace_get_bfun_name): Update. - (btrace_call_history): Update. - * rs6000-tdep.c (rs6000_skip_main_prologue): Update. - (rs6000_skip_trampoline_code): Update. - * sol-thread.c (info_cb): Update. - * stabsread.c (scan_file_globals): Update. - * stack.c (find_frame_funname): Update. - (info_frame_command_core): Update. - * symmisc.c (dump_msymbols): Update. - * symtab.c (symbol_natural_name): Rename to.., - (general_symbol_info::natural_name): ...this. - (symbol_demangled_name): Rename to... - (general_symbol_info::demangled_name): ...this. - (symbol_search_name): Rename to... - (general_symbol_info::search_name): ...this. - (symbol_matches_search_name): Update. - (find_pc_sect_line): Update. - (skip_prologue_sal): Update. - (search_symbols): Update. - (print_msymbol_info): Update. - (rbreak_command): Update. - (completion_list_add_msymbol): Update. - (completion_list_objc_symbol): Update. - (get_msymbol_address): Update. - * symtab.h (struct general_symbol_info): Add member functions - natural_name (), linkage_name (), print_name (), demangled_name (), - and search_name (). - (SYMBOL_NATURAL_NAME): Update. - (symbol_natural_name): Move to a member function on general_symbol_info. - (SYMBOL_DEMANGLED_NAME): Update. - (symbol_demangled_name): Move to a member function on - general_symbol_info. - (SYMBOL_SEARCH_NAME): Update. - (symbol_search_name): Move to a member function on general_symbol_info. - (MSYMBOL_NATURAL_NAME): Remove. - (MSYMBOL_LINKAGE_NAME): Remove. - (MSYMBOL_PRINT_NAME): Remove. - (MSYMBOL_DEMANGLED_NAME): Remove. - (MSYMBOL_SEARCH_NAME): Remove. - * x86-tdep.c (x86_in_indirect_branch_thunk): Update. - -2019-11-22 Christian Biesinger - - * symtab.c (create_demangled_names_hash): Use per_bfd-> - minimal_symbol_count for computing the initial size, if greater - than our default size. - -2019-11-22 Tom de Vries - - * contrib/words.sh: Improve words extraction. - -2019-11-22 Tom de Vries - - * contrib/words.sh: Combine sed invocations. - -2019-11-21 Christian Biesinger - - * Makefile.in: Update. - * demangle.c: Rename to... - * gdb-demangle.c: ..this. - (is_cplus_marker): Change return type to bool. - (_initialize_demangler): Rename to... - (_initialize_gdb_demangle): ...this. - * gdb-demangle.h (is_cplus_marker): Change return type to bool. - * symtab.h (demangle): Remove declaration; instead include - gdb-demangle.h. + * netbsd-nat.h: New file. + * netbsd-nat.c: Likewise. -2019-11-21 Tom Tromey +2020-09-09 Tom Tromey - * gdbsupport/format.c (format_pieces): Parse %I64d. - * unittests/format_pieces-selftests.c (test_windows_formats): New - function. - (run_tests): Call it. + * ada-lang.c (remove_extra_symbols): Do not increment when + removing an element -2019-11-21 Peeter Joot +2020-09-08 Tom Tromey - Byte reverse display of variables with DW_END_big, DW_END_little - (DW_AT_endianity) dwarf attributes if different than the native - byte order. - * ada-lang.c (ada_value_binop): - Use type_byte_order instead of gdbarch_byte_order. - * ada-valprint.c (printstr): - (ada_val_print_string): - * ada-lang.c (value_pointer): - (ada_value_binop): - Use type_byte_order instead of gdbarch_byte_order. - * c-lang.c (c_get_string): - Use type_byte_order instead of gdbarch_byte_order. - * c-valprint.c (c_val_print_array): - Use type_byte_order instead of gdbarch_byte_order. - * cp-valprint.c (cp_print_class_member): - Use type_byte_order instead of gdbarch_byte_order. - * dwarf2loc.c (rw_pieced_value): - Use type_byte_order instead of gdbarch_byte_order. - * dwarf2read.c (read_base_type): Handle DW_END_big, - DW_END_little - * f-lang.c (f_get_encoding): - Use type_byte_order instead of gdbarch_byte_order. - * findvar.c (default_read_var_value): - Use type_byte_order instead of gdbarch_byte_order. - * gdbtypes.c (check_types_equal): - Require matching TYPE_ENDIANITY_NOT_DEFAULT if set. - (recursive_dump_type): Print TYPE_ENDIANITY_BIG, - and TYPE_ENDIANITY_LITTLE if set. - (type_byte_order): new function. - * gdbtypes.h (TYPE_ENDIANITY_NOT_DEFAULT): New macro. - (struct main_type) : - New field. - (type_byte_order): New function. - * infcmd.c (default_print_one_register_info): - Use type_byte_order instead of gdbarch_byte_order. - * p-lang.c (pascal_printstr): - Use type_byte_order instead of gdbarch_byte_order. - * p-valprint.c (pascal_val_print): - Use type_byte_order instead of gdbarch_byte_order. - * printcmd.c (print_scalar_formatted): - Use type_byte_order instead of gdbarch_byte_order. - * solib-darwin.c (darwin_current_sos): - Use type_byte_order instead of gdbarch_byte_order. - * solib-svr4.c (solib_svr4_r_ldsomap): - Use type_byte_order instead of gdbarch_byte_order. - * stap-probe.c (stap_modify_semaphore): - Use type_byte_order instead of gdbarch_byte_order. - * target-float.c (target_float_same_format_p): - Use type_byte_order instead of gdbarch_byte_order. - * valarith.c (scalar_binop): - (value_bit_index): - Use type_byte_order instead of gdbarch_byte_order. - * valops.c (value_cast): - Use type_byte_order instead of gdbarch_byte_order. - * valprint.c (generic_emit_char): - (generic_printstr): - (val_print_string): - Use type_byte_order instead of gdbarch_byte_order. - * value.c (unpack_long): - (unpack_bits_as_long): - (unpack_value_bitfield): - (modify_field): - (pack_long): - (pack_unsigned_long): - Use type_byte_order instead of gdbarch_byte_order. - * findvar.c (unsigned_pointer_to_address): - (signed_pointer_to_address): - (unsigned_address_to_pointer): - (address_to_signed_pointer): - (default_read_var_value): - (default_value_from_register): - Use type_byte_order instead of gdbarch_byte_order. - * gnu-v3-abi.c (gnuv3_make_method_ptr): - Use type_byte_order instead of gdbarch_byte_order. - * riscv-tdep.c (riscv_print_one_register_info): - Use type_byte_order instead of gdbarch_byte_order. - -2019-11-21 Simon Marchi - - * top.c (current_ui_gdb_stdout_ptr): Spell out by hand. - (current_ui_gdb_stdin_ptr): Likewise. - (current_ui_gdb_stderr_ptr): Likewise. - (current_ui_gdb_stdlog_ptr): Likewise. - (current_ui_current_uiout_ptr): Likewise. - (gen_ret_current_ui_field_ptr): Remove. - -2019-11-21 Tom de Vries - - PR gdb/24956 - * cli/cli-script.c (execute_control_command): Only switch to - INTERP_CONSOLE's ui_out when INTERP_MI is active. - -2019-11-19 Tom Tromey - - * tui/tui-win.c (tui_partial_win_by_name): Move from tui-data.c. - Now static. Change type of "name". - (tui_set_win_height_command): Don't copy "arg". - * tui/tui-data.h (tui_partial_win_by_name): Don't declare. - * tui/tui-data.c (tui_partial_win_by_name): Move to tui-win.c. - -2019-11-19 Ali Tamur - - * dwarf2read.c (dw2_get_file_names_reader): Replace "if (attr)" with - "if (attr != nullptr)". - (dwarf2_find_base_address): Likewise. - (dwarf2_build_include_psymtabs): Likewise. - (read_cutu_die_from_dwo): Likewise. - (read_func_scope): Likewise. - (read_call_site_scope): Likewise. - (dwarf2_get_pc_bounds): Likewise. - (dwarf2_record_block_ranges): Likewise. - (dwarf2_add_field): Likewise. - (dwarf2_add_member_fn): Likewise. - (read_structure_type): Likewise. - (read_enumeration_type): Likewise. - (read_array_type): Likewise. - (read_array_order): Likewise. - (read_set_type): Likewise. - (read_common_block): Likewise. - (read_tag_reference_type): Likewise. - (read_tag_string_type): Likewise. - (read_subroutine_type): Likewise. - (read_base_type): Likewise. - (read_subrange_type): Likewise. - (new_symbol): Likewise. - (prepare_one_comp_unit): Likewise. + * gdb_bfd.c (gdb_bfd_open): Call bfd_fopen when fstat fails. -2019-11-19 Tom Tromey +2020-09-08 Tom Tromey - * windows-nat.c (windows_nat_target::attach): Include GetLastError - result in error when DebugActiveProcess fails. + PR win32/25302: + * gdb_bfd.c (gdb_bfd_data): Add "st" parameter. + (gdb_bfd_init_data): New function. + (gdb_bfd_open, gdb_bfd_ref): Use gdb_bfd_init_data. -2019-11-18 Sergio Durigan Junior - Pedro Alves +2020-09-07 Tankut Baris Aktemur - https://bugzilla.redhat.com/show_bug.cgi?id=1765117 - * target.c (target_stack::push): Call 'unpush' if there's a - target on top of the stack. - -2019-11-18 Philippe Waroquiers - - * python/py-block.c (blpy_dealloc): Call tp_free. - (blpy_block_syms_dealloc): Likewise. - * python/py-finishbreakpoint.c (bpfinishpy_dealloc): Likewise. - * python/py-inferior.c (infpy_dealloc): Likewise. - * python/py-lazy-string.c (stpy_dealloc): Likewise. - * python/py-linetable.c (ltpy_iterator_dealloc): Likewise. - * python/py-symbol.c (sympy_dealloc): Likewise. - * python/py-symtab.c (stpy_dealloc): Likewise. - * python/py-type.c (typy_iterator_dealloc): Likewise. + * infrun.c (fetch_inferior_event): Use + `switch_to_target_no_thread` to switch the target. -2019-11-18 Christian Biesinger +2020-09-06 Tom Tromey - * symtab.h (struct symbol) : Initialize explicitly in the - constructor instead of using a class initializer. + * symfile.h (dwarf2_free_objfile): Don't declare. -2019-11-15 Christian Biesinger +2020-09-03 Alok Kumar Sharma - * Makefile.in: Replace {posix,mingw}-strerror.c with safe-strerror.c. - * configure: Regenerate. - * configure.ac: Don't source common.host. - * gdbsupport/common.host: Remove. - * gdbsupport/mingw-strerror.c: Remove. - * gdbsupport/posix-strerror.c: Rename to... - * gdbsupport/safe-strerror.c: ...this. + * gdb/i386-tdep.c (i386_floatformat_for_type): Added conditions + to match 16 byte real/complex type generated by Flang compiler. -2019-11-15 Christian Biesinger +2020-09-03 Tom de Vries - * maint.c (scoped_command_stats::print_time): Use localtime_r - instead of localtime (provided through gnulib if necessary). - * nat/linux-osdata.c (time_from_time_t): Use ctime_r instead - of ctime. + PR breakpoint/26546 + * dwarf2/read.c (new_symbol): Tag label symbol without DW_AT_low_pc as + LOC_OPTIMIZED_OUT instead of LOC_LABEL. -2019-11-15 Christian Biesinger +2020-09-02 Simon Marchi - * gdbsupport/common-defs.h: Include time.h before pathmax.h to - avoid compile errors. + * maint.c (index_digits): New function. + (struct maint_print_section_data): Remove. + (print_bfd_section_info): Remove print_data parameter, add arg + and index_digits. + (print_objfile_section_info): Likewise. + (print_bfd_section_info_maybe_relocated): Likewise (plus + objfile). + (maintenance_info_sections): Adjust calls. + +2020-09-02 Tom Tromey + + * ada-varobj.c (ada_varobj_get_ptr_number_of_children): Return 0 + for null pointers. + (ada_varobj_adjust_for_child_access): Special-case null pointers. + +2020-09-01 Simon Marchi + + * bcache.h (struct bcache) : Change type of `added` to + pointer to bool. + * bcache.c (bcache::insert): Likewise. + * gdbtypes.c (check_types_worklist): Adjust. + * psymtab.c (add_psymbol_to_bcache): Adjust. + +2020-08-31 Kevin Buettner + + * corelow.c (unordered_set): Include. + (class core_target): Add field 'm_core_unavailable_mappings'. + (core_target::build_file_mappings): Print only one warning + per inaccessible file. Add unavailable/broken mappings + to m_core_unavailable_mappings. + (core_target::xfer_partial): Call... + (core_target::xfer_memory_via_mappings): New method. + +2020-08-31 Simon Marchi + + * dwarf2/read.c (struct field_info) : Change + type to bool. + +2020-08-31 Simon Marchi + + * dwarf2/read.c (struct field_info): Fix indentation. + +2020-08-31 Simon Marchi + + * frame-unwind.h (frame_prev_register_ftype): Fix adjective + ordering in comment. + * frame.c (frame_id_eq): Fix indentation. + +2020-08-31 Scott Linder + Simon Marchi + + * inline-frame.c (inline_frame_this_id): Remove assert that prevents + inline frame ids in outer frame. + +2020-08-31 Simon Marchi + + * frame.h (enum frame_id_stack_status) : New. + * frame.c (fprint_frame_id): Handle FID_STACK_OUTER. + (outer_frame_id): Use FID_STACK_OUTER instead of + FID_STACK_INVALID. + (frame_id_p): Don't check for outer_frame_id. + +2020-08-31 Simon Marchi + + * frame-unwind.c (frame_unwind_got_optimized): Don't set + regnum/frame in value. Call allocate_value_lazy. + * frame.c (frame_unwind_register_value): Use + val_print_not_saved. + +2020-08-31 Simon Marchi + + * gdbtypes.h (NULL_TYPE): Remove, change all uses to nullptr. + +2020-08-29 Pedro Alves + + * progspace.c (print_program_space): Use all_inferiors. Switch to + the inferior before calling target_pid_to_str. + +2020-08-28 Tom Tromey + + * xcoffread.c (xcoff_end_psymtab): Update comment. + * dbxread.c (dbx_end_psymtab): Update comment. + +2020-08-28 Tom de Vries + + PR breakpoint/26544 + * breakpoint.c (parse_breakpoint_sals): Remove const from struct + event_location. + (create_breakpoint): Same. + (base_breakpoint_decode_location): Same. + (bkpt_create_sals_from_location): Same. + (bkpt_decode_location): Same. + (bkpt_probe_create_sals_from_location): Same. + (bkpt_probe_decode_location): Same. + (tracepoint_create_sals_from_location): Same. + (tracepoint_decode_location): Same. + (tracepoint_probe_decode_location): Same. + (strace_marker_create_sals_from_location): Same. + (strace_marker_decode_location): Same. + (create_sals_from_location_default): Same. + (decode_location_default): Same. + * breakpoint.h (struct breakpoint_ops): Same. + (create_breakpoint): Same. + * linespec.h (decode_line_full): Same. + * linespec.c (decode_line_full): Same. Throw error if + result.size () == 0. + +2020-08-27 Pedro Alves + + PR gdb/26524 + * breakpoint.c (until_break_fsm) : Delete fields. + : New field. + : Adjust to save a breakpoint vector instead of + two individual breakpoints. + (until_break_fsm::should_stop): Loop over breakpoints in the + breakpoint vector. + (until_break_fsm::clean_up): Adjust to clear the breakpoints + vector. + (until_break_command): Handle location expanding into multiple + sals. + +2020-08-27 Pedro Alves + + PR gdb/26523 + * inline-frame.c (stopped_by_user_bp_inline_frame): Also consider + bp_until breakpoints user-specified locations. Update intro + comment. -2019-11-15 Christian Biesinger +2020-08-27 Simon Marchi - * config.in: Regenerate. - * configure: Regenerate. - * gdbsupport/common.m4: No longer check for strerror_r. - * gdbsupport/posix-strerror.c (safe_strerror): Always call the - POSIX version of strerror_r, now that gnulib provides it if - necessary. + * gdb_bfd.h (gdb_bfd_section_iterator, gdb_bfd_section_range, + gdb_bfd_sections): New. + * maint.c (print_bfd_section_info): Change param type to + maint_print_section_data. + (print_objfile_section_info): Likewise. + (print_bfd_section_info_maybe_relocated): Likewise. + (maintenance_info_sections): Use gdb_bfd_sections. -2019-11-14 Christian Biesinger +2020-08-25 Shahab Vahedi - * README (`configure' options): Update. + * MAINTAINERS: Add ARC target and maintainer. -2019-11-14 Tom Tromey +2020-08-25 Anton Kolesov - * eval.c (evaluate_subexp_standard) : Do not pass an - expected type for the RHS if the LHS is a convenience variable. + * configure.tgt: ARC support for GNU/Linux. + * Makefile.in (ALL_TARGET_OBJS): Likewise. + * arc-linux-tdep.c: New file. + * arc-tdep.h (ARC_STATUS32_L_MASK, ARC_STATUS32_DE_MASK): Declare. + * arc-tdep.c (arc_write_pc): Use it. + +2020-08-25 Shahab Vahedi + + * arc-tdep.c (arc_check_for_hardware_loop): New. + * arc-tdep.h (gdbarch_tdep): New field has_hw_loops. + +2020-08-25 Shahab Vahedi + + * arc-tdep.h: Include "gdbarch.h". + +2020-08-25 Shahab Vahedi + + * arch/arc.h + (arc_gdbarch_features): New class to stir the selection of target XML. + (arc_create_target_description): Use FEATURES to choose XML target. + (arc_lookup_target_description): Use arc_create_target_description + to create _new_ target descriptions or return the already created + ones if the FEATURES is the same. + * arch/arc.c: Implementation of prototypes described above. + * gdb/arc-tdep.h (arc_regnum enum): Add more registers. + (arc_gdbarch_features_init): Initialize the FEATURES struct. + * arc-tdep.c (*_feature_name): Make feature names consistent. + (arc_register_feature): A new struct to hold information about + registers of a particular target/feature. + (arc_check_tdesc_feature): Check if XML provides registers in + compliance with ARC_REGISTER_FEATURE structs. + (arc_update_acc_reg_names): Add aliases for r58 and r59. + (determine_*_reg_feature_set): Which feature name to look for. + (arc_gdbarch_features_init): Given MACH and ABFD, initialize FEATURES. + (mach_type_to_arc_isa): Convert from a set of binutils machine types + to expected ISA enums to be used in arc_gdbarch_features structs. + * features/Makefile (FEATURE_XMLFILES): Add new files. + * gdb/features/arc/v1-aux.c: New file. + * gdb/features/arc/v1-aux.xml: Likewise. + * gdb/features/arc/v1-core.c: Likewise. + * gdb/features/arc/v1-core.xml: Likewise. + * gdb/features/arc/v2-aux.c: Likewise. + * gdb/features/arc/v2-aux.xml: Likewise. + * gdb/features/arc/v2-core.c: Likewise. + * gdb/features/arc/v2-core.xml: Likewise. + * NEWS (Changes since GDB 9): Announce obsolence of old feature names. -2019-11-14 Simon Marchi +2020-08-25 Gaius Mulley + Andrew Burgess - * unittests/vec-utils-selftests.c (unordered_remove_tests::obj): - Provide explicit default and copy constructor. + PR m2/26372 + * m2-exp.y (exp): Improve comment for non_empty_arglist case, add + an assert. Remove single element array indexing pattern as the + MULTI_SUBSCRIPT support will handle this case too. + +2020-08-24 Simon Marchi + + * value.h (valprint_check_validity): Move declaration from + here... + * valprint.h (valprint_check_validity): ... to here. + +2020-08-24 Simon Marchi + + * debug.h: New file. + * debug.c (debug_prefixed_vprintf): New function. + * infrun.c (infrun_debug_printf_1): Use debug_prefixed_vprintf. + * linux-nat.c (linux_nat_debug_printf_1): Likewise. + +2020-08-24 Simon Marchi + + * infrun.h (infrun_debug_printf_1): New function declaration. + (infrun_debug_printf): New macro. + * infrun.c (infrun_debug_printf_1): Use infrun_debug_printf + throughout. + (infrun_debug_printf): New function. + * breakpoint.c (should_be_inserted): Use infrun_debug_printf. + (handle_jit_event): Likewise. + +2020-08-21 Mark Wielaard + + * ada-lex.l: Extend register warnings diagnostics comment for g++. + +2020-08-22 Simon Marchi + + * frame.c (enum class frame_id_status): New. + (struct frame_info) : Change type to frame_id_status. + (fprintf_frame): Update. + (compute_frame_id): Set frame id status to "computing" on entry. + Set it back to "not_computed" on failure and to "computed" on + success. + (get_frame_id): Assert the frame id is not being computed. + (create_sentinel_frame): Use frame_id_status::COMPUTED. + (create_new_frame): Likewise. + (frame_cleanup_after_sniffer): Update assert. + +2020-08-20 Simon Marchi + + * regcache.c (pid_ptid_regcache_map): New type. + (target_ptid_regcache_map): Remove. + (target_pid_ptid_regcache_map): New type. + (regcaches): Change type to target_pid_ptid_regcache_map. + (get_thread_arch_aspace_regcache): Update. + (regcache_thread_ptid_changed): Update, handle pid-like ptid + case. + (regcaches_size): Update. + (regcache_count): Update. + (registers_changed_ptid_target_pid_test): New. + (_initialize_regcache): Register new test. -2019-11-14 Philippe Waroquiers +2020-08-20 Simon Marchi - * python/py-finishbreakpoint.c (gdbpy_breakpoint_created): - only call Py_INCREF (newbp) in the bppy_pending_object case. + * regcache.c (regcache_count): New. + (struct regcache_test_data): New. + (regcache_test_data_up): New. + (populate_regcaches_for_test): New. + (regcaches_test): Remove. + (get_thread_arch_aspace_regcache_test): New. + (registers_changed_ptid_all_test): New. + (registers_changed_ptid_target_test): New. + (registers_changed_ptid_target_ptid_test): New. + (regcache_thread_ptid_changed): Remove regcache_count lambda. + (_initialize_regcache): Register new tests. -2019-11-13 Tom Tromey +2020-08-20 Simon Marchi - PR build/25182: - * psympriv.h (partial_symbol): Remove static assert. - * symtab.h (general_symbol_info, symbol): Remove static assert. + * regcache.c (test_get_thread_arch_aspace_regcache): Rename to... + (get_thread_arch_aspace_regcache_and_check): ... this. Remove + gdbarch and aspace parameter. Use current inferior's aspace. + Validate regcache's arch value. + (regcaches_test): Update. -2019-11-12 Andrew Burgess +2020-08-20 Simon Marchi - * gdbsupport/format.c (format_pieces::format_pieces): Support - printf 'z' size modifier. - * gdbsupport/format.h (enum argclass): Add size_t_arg. - * printcmd.c (ui_printf): Handle size_t_arg. - * ui-out.c (ui_out::vmessage): Likewise. - * unittests/format_pieces-selftests.c (test_format_int_sizes): New - function. - (run_tests): Call test_format_int_sizes. + * regcache.c (regcaches_test): Call registers_changed. -2019-11-12 Christian Biesinger +2020-08-20 Tankut Baris Aktemur - * ada-exp.y (write_ambiguous_var): Update. - * buildsym.c (add_symbol_to_list): Update. - * dwarf2read.c (read_variable): Update. - (new_symbol): Update. - * jit.c (finalize_symtab): Update. - * language.c (language_alloc_type_symbol): Update. - * symtab.c (fixup_symbol_section): Update. - (initialize_objfile_symbol_1): Move code to... - (initialize_objfile_symbol): ...here. Remove now-unnecessary memset. - (allocate_symbol): Update. - (allocate_template_symbol): Update. - (get_symbol_address): Update. - * symtab.h (struct symbol): Inherit from general_symbol_info instead - of having as a field, and add a constructor. - (SYMBOL_VALUE): Update. - (SYMBOL_VALUE_ADDRESS): Update. - (SET_SYMBOL_VALUE_ADDRESS): Update. - (SYMBOL_VALUE_BYTES): Update. - (SYMBOL_VALUE_COMMON_BLOCK): Update. - (SYMBOL_BLOCK_VALUE): Update. - (SYMBOL_VALUE_CHAIN): Update. - (SYMBOL_LANGUAGE): Update. - (SYMBOL_SECTION): Update. - (SYMBOL_OBJ_SECTION): Update. - (SYMBOL_SET_LANGUAGE): Update. - (SYMBOL_SET_LINKAGE_NAME): Update. - (SYMBOL_SET_NAMES): Update. - (SYMBOL_NATURAL_NAME): Update. - (SYMBOL_LINKAGE_NAME): Update. - (SYMBOL_DEMANGLED_NAME): Update. - (SYMBOL_SEARCH_NAME): Update. - (SYMBOL_MATCHES_SEARCH_NAME): Update. - (struct symbol): Update. - (struct template_symbol): Update. - (struct rust_vtable_symbol): Update. - * xcoffread.c (SYMBOL_DUP): Update. - -2019-11-12 Tom Tromey - - * tui/tui-layout.c (show_layout): Set current_layout. - (show_source_disasm_command, show_data) - (show_source_or_disasm_and_command): Don't set current_layout. - -2019-11-12 Tom Tromey - - * tui/tui-layout.c (_initialize_tui_layout): Move to end. - -2019-11-12 Tom Tromey - - * tui/tui-win.c (resize_message): New global. - (show_tui_resize_message): New function. - (tui_async_resize_screen): Print message if requested. - (_initialize_tui_win): Add tui-resize-message setting. - * NEWS: Add entry for new commands. + * infrun.c (process_event_stop_test): Fix typo "breapoint". -2019-11-11 Tom Tromey +2020-08-19 Alok Kumar Sharma - * tui/tui.c (tui_initialize_readline): Add new bindable readline - functions. + * amd64-tdep.c (amd64_skip_prologue): Using symbol table + to find the end of prologue for flang compiled binaries. + * arm-tdep.c (arm_skip_prologue): Likewise. + * i386-tdep.c (i386_skip_prologue): Likewise. + * producer.c (producer_is_llvm): New function. + (producer_parsing_tests): Added new tests for clang/flang. + * producer.h (producer_is_llvm): New declaration. -2019-11-11 Christian Biesinger +2020-08-18 Simon Marchi - * nat/linux-osdata.c (user_from_uid): Use getpwuid_r. + * linux-nat.c (linux_nat_debug_printf): New function. + (linux_nat_debug_printf_1): New macro. Use throughout the file. -2019-11-10 Andrew Burgess +2020-08-18 Aaron Merey - * python/py-symbol.c (gdbpy_lookup_static_symbols): New - function. - * python/python-internal.h (gdbpy_lookup_static_symbols): - Declare new function. - * python/python.c (python_GdbMethods): Add - gdb.lookup_static_symbols method. - * NEWS: Mention gdb.lookup_static_symbols. - -2019-11-10 Andrew Burgess - - * python/py-symbol.c (gdbpy_lookup_static_symbol): Lookup in - static block of current object file first. Also fix typo in - header comment. - -2019-11-10 Andrew Burgess - - * stack.c (set_last_displayed_sal): Delete. - (last_displayed_sal_valid): Delete. - (last_displayed_pspace): Delete. - (last_displayed_addr): Delete. - (last_displayed_symtab): Delete. - (last_displayed_line): Delete. - (class last_displayed_symtab_info_type): New. - (last_displayed_symtab_info): New static global variable. - (print_frame_info): Call methods on last_displayed_symtab_info. - (clear_last_displayed_sal): Update header comment, and make use of - last_displayed_symtab_info. - (last_displayed_sal_is_valid): Likewise. - (get_last_displayed_pspace): Likewise. - (get_last_displayed_addr): Likewise. - (get_last_displayed_symtab): Likewise. - (get_last_displayed_line): Likewise. - (get_last_displayed_sal): Likewise. - * stack.h (clear_last_displayed_sal): Update header comment. - (last_displayed_sal_is_valid): Likewise. - (get_last_displayed_pspace): Likewise. - (get_last_displayed_addr): Likewise. - (get_last_displayed_symtab): Likewise. - (get_last_displayed_line): Likewise. - (get_last_displayed_sal): Likewise. + * Makefile.in (DEBUGINFOD_CFLAGS, DEBUGINFOD_LIBS): New variables. + (INTERNAL_CFLAGS_BASE): Add DEBUGINFOD_CFLAGS. + (CLIBS): Add DEBUGINFOD_LIBS. -2019-11-10 Andrew Burgess +2020-08-17 Sergei Trofimovich - * stack.c (frame_show_address): Convert return type to bool. - * stack.h (frame_show_address): Likewise, and update header - comment. + * ia64-linux-nat.c: Include "gdbarch.h" to declare used + 'gdbarch_num_regs'. -2019-11-10 Andrew Burgess +2020-08-17 Tom Tromey - * Makefile.in (SUBDIR_UNITTESTS_SRCS): Add new file to the list. - * unittests/vec-utils-selftests.c: New file. - * gdbsupport/gdb_vecs.h (unordered_remove): Avoid self move assign. - -2019-11-10 Tom Tromey - - * tui/tui-wingeneral.c (tui_unhighlight_win): Use can_box. - (tui_highlight_win): Likewise. - (tui_win_info::check_and_display_highlight_if_needed): Likewise. - * tui/tui-data.h (struct tui_win_info) : Remove. - * tui/tui-command.h (struct tui_cmd_window) : - Don't set can_highlight. + * ada-varobj.c (ada_varobj_decode_var): Handle case where + ada_get_decoded_value returns NULL. -2019-11-10 Tom Tromey +2020-08-17 Tom Tromey - * cli/cli-style.h (class cli_style_option) : - Remove unused declaration. + * python/py-inferior.c (infpy_search_memory): Use + gdb_py_object_from_ulongest. + * python/py-infevents.c (create_inferior_call_event_object) + (create_memory_changed_event_object): Use + gdb_py_object_from_ulongest. + * python/py-linetable.c (ltpy_entry_get_pc): Use + gdb_py_object_from_ulongest. -2019-11-08 Tom Tromey +2020-08-17 Simon Marchi - * top.c (read_command_file): Update. - (command_line_input): Make return type const. - * python/py-gdb-readline.c: Update. - * linespec.c (decode_line_2): Update. - * defs.h (command_line_input): Make return type const. - * cli/cli-script.c (read_next_line): Make return type const. - * ada-lang.c (get_selections): Update. - -2019-11-06 Christian Biesinger - - * linux-tdep.c (linux_info_proc): Use strtok_r instead of strtok. - * mi/mi-main.c (output_cores): Likewise. - * nat/linux-osdata.c (linux_xfer_osdata_cpus): Likewise. - (linux_xfer_osdata_modules): Likewise. - * remote.c (register_remote_support_xml): Likewise. - * sparc64-tdep.c (adi_is_addr_mapped): Likewise. - * xml-syscall.c (syscall_create_syscall_desc): Likewise. - -2019-11-06 Tom Tromey - - * tui/tui-interp.c: Don't include readline.h. - * tui/tui-hooks.c: Don't include readline.h. - * symmisc.c: Include tilde.h, not readline.h. - * symfile.c: Include tilde.h, not readline.h. - * source.c: Include tilde.h, not readline.h. - * solib.c: Include tilde.h, not readline.h. - * psymtab.c: Include tilde.h, not readline.h. - * exec.c: Include tilde.h, not readline.h. - * corelow.c: Include tilde.h, not readline.h. - * cli/cli-dump.c: Include tilde.h, not readline.h. - * cli/cli-cmds.c: Don't include readline.h. - -2019-11-05 Tom Tromey - - * tui/tui-disasm.c (struct tui_asm_line) : New member. - (tui_disassemble): Set addr_size. - (tui_disasm_window::set_contents): Use addr_size. + * loc.c (class symbol_needs_eval_context): Fix indentation. -2019-11-05 Tom Tromey +2020-08-17 Simon Marchi - * rust-lang.c (rust_language_defn): Update. - * python/py-value.c (valpy_string): Call c_get_string. - * p-lang.c (pascal_language_defn): Update. - * opencl-lang.c (opencl_language_defn): Update. - * objc-lang.c (objc_language_defn): Update. - * m2-lang.c (m2_language_defn): Update. - * language.c (unknown_language_defn, auto_language_defn): Update. - (default_get_string): Remove. - * guile/scm-value.c (gdbscm_value_to_string): Use c_get_string. - * go-lang.c (go_language_defn): Update. - * f-lang.c (f_language_defn): Update. - * d-lang.c (d_language_defn): Update. - * c-lang.c (c_language_defn, cplus_language_defn) - (asm_language_defn, minimal_language_defn): Update. - * ada-lang.c (ada_language_defn): Update. - * language.h (struct language_defn) : Remove. - (LA_GET_STRING): Remove. - (default_get_string): Don't declare. - -2019-11-05 Tom Tromey - - * tui/tui-source.h (struct tui_source_window): Inline - constructor. Remove destructor. - : Move to superclass. - * tui/tui-winsource.h (tui_copy_source_line): Declare. - (struct tui_source_window_base): Move private members to end. - : Move from tui_source_window. - * tui/tui-winsource.c (tui_copy_source_line): Move from - tui-source.c. Rename from copy_source_line. Add special handling - for negative line number. - (tui_source_window_base::style_changed): Move from - tui_source_window. - (tui_source_window_base): Register observer. - (~tui_source_window_base): New. - * tui/tui-source.c (copy_source_line): Move to tui-winsource.c; - rename. - (tui_source_window::set_contents): Use tui_copy_source_line. - (tui_source_window::tui_source_window): Move to tui-source.h. - (tui_source_window::~tui_source_window): Remove. - (tui_source_window::style_changed): Move to superclass. - * tui/tui-disasm.c (tui_disassemble): Create string file with - styling, when possible. Add "addr_size" parameter. - (tui_disasm_window::set_contents): Use tui_copy_source_line. - Don't compute maximum size. - (len_without_escapes): New function + * dwarf2/loc.c (dwarf2_loc_desc_get_symbol_read_needs): Use + bool. -2019-11-05 Tom Tromey +2020-08-17 Tom de Vries - * tui/tui-winsource.h (struct tui_source_element) : Now a - std::string. - * tui/tui-winsource.c (tui_show_source_line): Update. - * tui/tui-source.c (tui_source_window::set_contents): Update. - * tui/tui-disasm.c (tui_disasm_window::set_contents): Update. + PR gdb/26393 + * gdbtypes.c (dump_dynamic_prop): New function. + (recursive_dump_type): Use dump_dynamic_prop for TYPE_CODE_RANGE. -2019-11-05 Christian Biesinger +2020-08-15 Tom de Vries - * symtab.h (gdb_static_assert): Put && operator at the beginning - of the line instead of the end. + PR backtrace/26390 + * stack.c (print_frame_args): Temporarily set the selected + frame to FRAME while printing the frame's arguments. -2019-11-04 Christian Biesinger +2020-08-14 Pedro Franco de Carvalho - * psympriv.h: Add static_asserts for sizeof (general_symbol_info) - and sizeof (symbol). - * symtab.h: Add a static_assert for sizeof (partial_symbol). + PR breakpoints/26385 + * ppc-linux-nat.c (ppc_linux_nat_target::low_prepare_to_resume): + Always clear watchpoint with PTRACE_SET_DEBUGREG. -2019-11-04 Rainer Orth +2020-08-14 Pedro Franco de Carvalho - * NEWS (Changes since GDB 8.3): Document Solaris 10 removal. - * configure.host: Mark *-*-solaris2.10* obsolete. - * configure.tgt: Mark Solaris < 11 obsolete. - * MAINTAINERS (Target Instruction Set Architectures) : - Update target triplet. + * ppc-linux-nat.c (ppc_linux_dreg_interface::detect) + (ppc_linux_nat_target::low_prepare_to_resume): Use ptrace () < 0 + and >= to check return value instead of == -1 and != -1. -2019-11-01 Tom Tromey +2020-08-14 Simon Marchi - * utils.c (print_sys_errmsg): Simplify. + * utils.h (class gdb_argv) : New method. + * utils.c (gdb_argv_as_array_view_test): New. + (_initialize_utils): Register selftest. + * maint.c (maintenance_selftest): Use the new method. -2019-11-01 Tom Tromey +2020-08-13 Kamil Rytarowski - * gdbsupport/mingw-strerror.c (safe_strerror): Constify result. + * target.h (supports_dumpcore, dumpcore): New + function declarations. + * target.c (supports_dumpcore, dumpcore): New + functions. + * target-delegates.c: Rebuild. + * gcore.c (gcore_command): Use target_supports_dumpcore () + and target_dumpcore (). -2019-11-01 Christian Biesinger +2020-08-13 Aaron Merey - * configure: Regenerate. - * configure.ac: Remove check for strerror_r. - * gdbsupport/common.m4: Check for strerror_r. + * debuginfod-support.c: Replace global variables with user_data. -2019-11-01 Luis Machado +2020-08-13 Simon Marchi - PR gdb/25124 + * maint.c (maintenance_selftest): Split args and pass array_view + to run_tests. - * arm-tdep.c (arm_per_objfile): Rename to ... - (arm_per_bfd): ... this. - (arm_objfile_data_key): Rename to ... - (arm_bfd_data_key): ... this. - (arm_find_mapping_symbol): Adjust access to new bfd_key-based - data. - (arm_record_special_symbol): Likewise. - -2019-10-31 Andrew Burgess - - * ada-typeprint.c (ada_print_typedef): Don't print newline at the - end. - * c-typeprint.c (c_print_typedef): Likewise. - * f-typeprint.c (f_print_typedef): Likewise. - * m2-typeprint.c (m2_print_typedef): Likewise. - * p-typeprint.c (pascal_print_typedef): Likewise. - * rust-lang.c (rust_print_typedef): Likewise. - * symtab.c (print_symbol_info): Print a newline after calling - typedef_print. - -2019-10-31 Andrew Burgess - - * symtab.c (info_module_cmdlist): New variable. - (info_module_command): New function. - (search_module_symbols): New function. - (info_module_subcommand): New function. - (struct info_modules_var_func_options): New struct. - (info_modules_var_func_options_defs): New variable. - (make_info_modules_var_func_options_def_group): New function. - (info_module_functions_command): New function. - (info_module_variables_command): New function. - (info_module_var_func_command_completer): New function. - (_initialize_symtab): Register new 'info module functions' and - 'info module variables' commands. - * symtab.h (typedef symbol_search_in_module): New typedef. - (search_module_symbols): Declare new function. - * NEWS: Mention new commands. - -2019-10-31 Andrew Burgess - - * dwarf2read.c (dw2_symtab_iter_next): Handle MODULE_DOMAIN. - (dw2_expand_marked_cus): Handle MODULES_DOMAIN. - (dw2_debug_names_iterator::next): Handle MODULE_DOMAIN and - MODULES_DOMAIN. - (scan_partial_symbols): Only create partial module symbols for non - declarations. - * psymtab.c (recursively_search_psymtabs): Handle MODULE_DOMAIN - and MODULES_DOMAIN. - * symtab.c (search_domain_name): Likewise. - (search_symbols): Likewise. - (print_symbol_info): Likewise. - (symtab_symbol_info): Likewise. - (info_modules_command): New function. - (_initialize_symtab): Register 'info modules' command. - * symtab.h (enum search_domain): Add MODULES_DOMAIN. - * NEWS: Mention new 'info modules' command. - -2019-10-31 Philippe Waroquiers - - * NEWS: Mention $_gdb_setting, $_gdb_setting_str, $_gdb_maint_setting - and $_gdb_maint_setting_str. - -2019-10-31 Philippe Waroquiers - - * cli/cli-cmds.c (setting_cmd, value_from_setting) - (gdb_setting_internal_fn, gdb_maint_setting_internal_fn) - (str_value_from_setting, gdb_setting_str_internal_fn) - (gdb_maint_setting_str_internal_fn): New functions. - (_initialize_cli_cmds): Define the new convenience functions. - * gdb/cli/cli-setshow.h (get_setshow_command_value_string): Constify. - * gdb/cli/cli-setshow.c (get_setshow_command_value_string): Constify. - -2019-10-31 Christian Biesinger - - * agent.c (set_can_use_agent): When the setting is turned on, - look up agent symbols if we don't have them yet. - (agent_new_objfile): Don't look up agent symbols when the agent - setting is off. +2020-08-12 Luis Machado -2019-10-31 Christian Biesinger + * value.c (check_type_length_before_alloc): Use ULONGEST to store a + type's length. + Use %s and pulongest to print the length. - * config.in: Regenerate. +2020-08-12 Pedro Alves -2019-10-31 Christian Biesinger + * NEWS: Move "Multi-target debugging support" item to the + "Changes since GDB 9" section. - * configure: Regenerate. - * configure.ac: Check for strerror_r. - * gdbsupport/common-utils.h (safe_strerror): Change return value - to const char * and document that this function is now threadsafe. - * gdbsupport/posix-strerror.c (safe_strerror): Make buf - thread_local and call strerror_r, if available. - * utils.c (perror_string): Update. - (print_sys_errmsg): Update. - -2019-10-31 Luis Machado - - * arm-tdep.c (arm_exidx_data_key): Use bfd_key instead of - objfile_key. - (arm_exidx_new_objfile): Adjust to use objfile->obfd instead of - objfile to fetch per-bfd data. - (arm_find_exidx_entry): Likewise. - -2019-10-31 Christian Biesinger - - * gdbsupport/agent.c (debug_agent): Change type to bool. - (use_agent): Likewise. - (all_agent_symbols_look_up): Likewise. - (agent_loaded_p): Change return value to bool. - (agent_look_up_symbols): Update. - (agent_capability_check): Change return value to bool. - * gdbsupport/agent.h (agent_loaded_p): Likewise. - (debug_agent): Change type to bool. - (use_agent): Likewise. - (agent_capability_check): Change return value to bool. - -2019-10-30 Christian Biesinger - - * minsyms.c (clear_minimal_symbol_hash_tables): New function. - (build_minimal_symbol_hash_tables): Code to clear the table moved - to clear_minimal_symbol_hash_tables. - (minimal_symbol_reader::install): Call clear_minimal_symbol_hash_tables - when needed. - -2019-10-29 Simon Marchi - - * infcmd.c: Remove includes. - * infrun.c: Remove includes. - -2019-10-29 Simon Marchi - - * ada-lang.h (GROW_VECT): Move to ada-lang.c. - (grow_vect): Remove declaration. - (ada_type_of_array): Remove declaration. - (ada_update_initial_language): Remove declaration. - (ada_fold_name): Remove declaration. - (ada_fill_in_ada_prototype): Remove declaration. - (user_select_syms): Remove declaration. - (get_selections): Remove declaration. - (ada_tag_type): Remove declaration. - (ada_value_tag): Remove declaration. - (ada_is_others_clause): Remove declaration. - (ada_in_variant): Remove declaration. - (ada_value_struct_elt): Remove declaration. - (ada_attribute_name): Remove declaration. - (ada_system_address_type): Remove declaration. - * ada-lang.c (ada_watch_location_expression): Make static. - (GROW_VECT): Move here from ada-lang.h. - (grow_vect): Make static. - (ada_update_initial_language): Make static. - (ada_fold_name): Make static. - (ada_type_of_array): Make static. - (encoded_ordered_before): Move up. - (sort_choices): Move up. - (print_signatures): Move up. - (ada_print_symbol_signature): Move up. - (get_selections): Move up and make static. - (user_select_syms): Move up and make static. - (ada_value_struct_elt): Move up and make static. - (ada_tag_type): Make static. - (ada_value_tag): Make static. - (ada_is_others_clause): Make static. - (ada_in_variant): Make static. - (ada_attribute_name): Make static. - -2019-10-29 Simon Marchi - - * ada-lang.c: Remove includes. - * ada-typeprint.c: Remove includes. - * ada-valprint.c: Remove includes. - -2019-10-29 Simon Marchi - - * addrmap.c: Add static assertions of type size, moved from - _initialize_addrmap. - (_initialize_addrmap): Remove. +2020-08-12 Pedro Alves -2019-10-29 Christian Biesinger + PR gdb/26336 + * progspace.c (program_space::remove_objfile): Invalidate the + frame cache. - * coffread.c (record_minimal_symbol): Update. - (process_coff_symbol): Update. - * dbxread.c (read_dbx_symtab): Update. - * dwarf2read.c (add_partial_symbol): Update. - (fixup_go_packaging): Update. - (load_partial_dies): Update. - (new_symbol): Update. - * elfread.c (record_minimal_symbol): Change signature to use - gdb::string_view instead of name+len. - (elf_symtab_read): Update. - (elf_rel_plt_read): Update. - * mdebugread.c (parse_partial_symbols): Update. - (handle_psymbol_enumerators): Update. - (new_symbol): Update. - * minsyms.c (minimal_symbol_reader::record_full): Change signature - to use gdb::string_view instead of name+len. - * minsyms.h (class minimal_symbol_reader) : Likewise. - * psympriv.h (add_psymbol_to_list): Likewise. - * psymtab.c (add_psymbol_to_bcache): Likewise. - (add_psymbol_to_list): Likewise. - * stabsread.c (define_symbol): Update. - * symtab.c (symbol_set_names): Change signature to use gdb::string_view. - * symtab.h (SYMBOL_SET_NAMES): Likewise. - (symbol_set_names): Likewise. - * xcoffread.c (scan_xcoff_symtab): Update. - -2019-10-29 Christian Biesinger - - * symtab.h (symbol_set_names): Document that copy_name must be - set to true for non-nullterminated strings. - * symtab.c (symbol_set_names): Only make a nullterminated copy of - linkage_name if the entry was not found and we need to demangle. - -2019-10-29 Christian Biesinger - - * Makefile.in (HFILES_NO_SRCDIR): Add gdb_binary_search.h. - * dwarf2-frame.c (bsearch_fde_cmp): Update. - (dwarf2_frame_find_fde): Replace bsearch with gdb::binary_search. - * gdbsupport/gdb_binary_search.h: New file. +2020-08-11 Tom de Vries -2019-10-29 Christian Biesinger + * MAINTAINERS: Mark ms1 as deleted. - * NEWS: Mention new --with-system-gdbinit-dir option. - * config.in: Regenerate. - * configure: Regenerate. - * configure.ac: Add new option --with-system-gdbinit-dir. - * extension.c (get_ext_lang_of_file): Return extension_language_gdb - for a ".gdb" suffix. - * main.c (get_init_files): Change system_gdbinit argument to - a vector and return the files in SYSTEM_GDBINIT_DIR in - addition to SYSTEM_GDBINIT. - (captured_main_1): Update. - (print_gdb_help): Update. - * top.c (print_gdb_configuration): Also print the value of - SYSTEM_GDBINIT_DIR. - -2019-10-28 Christian Biesinger - - * gdbsupport/common-utils.h (startswith): Add an overloaded version - that takes gdb::string_view arguments. - -2019-10-26 Tom de Vries - - * aarch64-linux-tdep.c: Fix typos in comments. - * aarch64-tdep.c: Same. - * ada-lang.c: Same. - * amd64-nat.c: Same. - * arc-tdep.c: Same. - * arch/aarch64-insn.c: Same. - * block.c: Same. - * breakpoint.h: Same. - * btrace.h: Same. - * c-varobj.c: Same. - * cli/cli-decode.c: Same. - * cli/cli-script.c: Same. - * cli/cli-utils.h: Same. - * coff-pe-read.c: Same. - * coffread.c: Same. - * compile/compile-cplus-symbols.c: Same. - * compile/compile-object-run.c: Same. - * completer.c: Same. - * corelow.c: Same. - * cp-support.c: Same. - * demangle.c: Same. - * dwarf-index-write.c: Same. - * dwarf2-frame.c: Same. - * dwarf2-frame.h: Same. - * eval.c: Same. - * frame-base.h: Same. - * frame.h: Same. - * gdbcmd.h: Same. - * gdbtypes.h: Same. - * gnu-nat.c: Same. - * guile/scm-objfile.c: Same. - * i386-tdep.c: Same. - * i386-tdep.h: Same. - * infcall.c: Same. - * infcall.h: Same. - * linux-nat.c: Same. - * m68k-tdep.c: Same. - * macroexp.c: Same. - * memattr.c: Same. - * mi/mi-cmd-disas.c: Same. - * mi/mi-getopt.h: Same. - * mi/mi-main.c: Same. - * minsyms.c: Same. - * nat/aarch64-sve-linux-sigcontext.h: Same. - * objfiles.h: Same. - * ppc-linux-nat.c: Same. - * ppc-linux-tdep.c: Same. - * ppc-tdep.h: Same. - * progspace.h: Same. - * prologue-value.h: Same. - * python/py-evtregistry.c: Same. - * python/py-instruction.h: Same. - * record-btrace.c: Same. - * record-full.c: Same. - * remote.c: Same. - * rs6000-tdep.c: Same. - * ser-tcp.c: Same. - * sol-thread.c: Same. - * sparc-sol2-tdep.c: Same. - * sparc64-tdep.c: Same. - * stabsread.c: Same. - * symfile.c: Same. - * symtab.h: Same. - * target.c: Same. - * tracepoint.c: Same. - * tui/tui-data.h: Same. - * tui/tui-io.c: Same. - * tui/tui-win.c: Same. - * tui/tui.c: Same. - * unittests/rsp-low-selftests.c: Same. - * user-regs.h: Same. - * utils.c: Same. - * utils.h: Same. - * valarith.c: Same. - * valops.c: Same. - * valprint.c: Same. - * valprint.h: Same. - * value.c: Same. - * value.h: Same. - * varobj.c: Same. - * x86-nat.h: Same. - * xtensa-tdep.c: Same. - -2019-10-25 Ali Tamur - - * charset.c (find_charset_names): Reflect API change. - -2019-10-25 Christian Biesinger - - * symtab.c (struct demangled_name_entry): Change demangled name - to a unique_xmalloc_ptr, now that we don't allocate it as - part of the struct anymore. - (symbol_set_names): No longer obstack allocate + copy the demangled - name, just store the allocated name from bfd. - -2019-10-25 Tom Tromey - - * dwarf2-frame.c (dwarf2_cie_table): Now a typedef. - (bsearch_cie_cmp, add_cie): Remove. - (find_cie): Reimplement. - (decode_frame_entry_1, decode_frame_entry): Change type. Update. - (dwarf2_build_frame_info): Update. +2020-08-10 Luis Machado -2019-10-24 H.J. Lu + PR gdb/26310 - PR gdb/25126 - * symfile.c (reread_symbols): Call forget_cached_source_info to - clear the stale source cache. + * aarch64-tdep.c (aarch64_analyze_prologue): Track use of SP/FP and + act accordingly. + (aarch64_analyze_prologue_test): Add more unit tests to exercise + movz/str/stur/stp skipping behavior. -2019-10-24 Christian Biesinger +2020-08-10 Luis Machado - * configure: Regenerate. - * configure.ac: Remove code that sets python_has_threads. + * nat/aarch64-sve-linux-sigcontext.h (SVE_PT_REGS_OFFSET): Use + struct user_sve_header instead of struct sve_context. -2019-10-24 Christian Biesinger +2020-08-09 Simon Marchi - * config.in: Regenerate. - * configure: Regenerate. - * configure.ac: Remove the code that uses sed to get the python - version and defines HAVE_LIBPYTHON2_6 / HAVE_LIBPYTHON2_7. + * read.h (dwarf2_fetch_die_loc_sect_off, + dwarf2_fetch_die_loc_cu_off): Replace function pointer + + `void *` parameter with function_view. + * read.c (dwarf2_fetch_die_loc_sect_off, + dwarf2_fetch_die_loc_cu_off): Likewise. + * loc.c (get_frame_pc_for_per_cu_dwarf_call): Remove. + (per_cu_dwarf_call): Adjust. + (get_frame_address_in_block_wrapper): Remove. + (indirect_synthetic_pointer): Adjust. + (get_ax_pc): Remove. + (dwarf2_compile_expr_to_ax): Adjust. -2019-10-24 Andrew Burgess +2020-08-08 Tom de Vries - * python/py-progspace.c (pspy_block_for_pc): Return None for all - error paths. + PR build/26344 + * arch/riscv.c (riscv_lookup_target_description): Use an explicit + constructor. + * regcache.c (get_thread_arch_aspace_regcache): Same. -2019-10-23 Tom Tromey +2020-08-07 Tom Tromey - * arc-tdep.c: Remove ".." from include. - * frv-tdep.c: Remove ".." from include. - * lm32-tdep.c: Remove ".." from include. - * microblaze-tdep.c: Remove ".." from include. - * or1k-tdep.h: Remove ".." from include. - * s12z-tdep.c: Remove ".." from include. - * Makefile.in (OPCODES_CFLAGS): Add comment. - (TOP_CFLAGS): New variable. - (INTERNAL_CFLAGS_BASE): Add TOP_CFLAGS. + * ravenscar-thread.c + (ravenscar_thread_target::set_base_thread_from_ravenscar_task): + New method. + (ravenscar_thread_target::wait): Check + runtime_initialized. + (ravenscar_thread_target::prepare_to_store) + (ravenscar_thread_target::stopped_by_sw_breakpoint) + (ravenscar_thread_target::stopped_by_hw_breakpoint) + (ravenscar_thread_target::stopped_by_watchpoint) + (ravenscar_thread_target::stopped_data_address) + (ravenscar_thread_target::core_of_thread): Use + scoped_restore_current_thread and + set_base_thread_from_ravenscar_task. -2019-10-23 Tom Tromey +2020-08-07 Tom Tromey - * Makefile.in (READLINE_DIR): Update. + * ravenscar-thread.c (update_thread_list): Set inferior_ptid. -2019-10-23 Tankut Baris Aktemur +2020-08-07 Tom Tromey - * infcall.c (call_function_by_hand_dummy): Fix the function - comment. And extract out a code section into... - (reserve_stack_space): ...this new function. + * ravenscar-thread.c (ravenscar_thread_target::wait): Call + update_inferior_ptid before update_thread_list. + (temporarily_change_regcache_ptid): New class. + (ravenscar_thread_target::fetch_registers) + (ravenscar_thread_target::store_registers) + (ravenscar_thread_target::prepare_to_store): Use base thread when + forwarding operation. -2019-10-23 Tankut Baris Aktemur +2020-08-07 Tom Tromey - * infcall.c (value_arg_coerce): Remove an unused parameter. - (call_function_by_hand_dummy): Update the call to - 'value_arg_coerce'. + * ravenscar-thread.c (ravenscar_thread_target::resume): Handle + "is_pid" case. -2019-10-23 Tankut Baris Aktemur +2020-08-07 Tom Tromey - * infcall.c (call_function_by_hand_dummy): Refactor. + * ravenscar-thread.c (xfer_partial, enable_btrace, add_thread): + New methods. + (ravenscar_thread_target::get_thread_base_cpu): Check m_cpu_map + first. + (ravenscar_thread_target::add_thread): Rename from + ravenscar_add_thread. + (ravenscar_thread_target::update_thread_list): Use a lambda. + (ravenscar_thread_target::xfer_partial): New method. + +2020-08-07 Tom Tromey + + * ada-lang.h (ada_task_list_iterator_ftype): Now a + gdb::function_view. + (iterate_over_live_ada_tasks): Change type of argument. + * ada-tasks.c (iterate_over_live_ada_tasks): Change type + of argument. -2019-10-23 Tankut Baris Aktemur +2020-08-07 Tom Tromey - * MAINTAINERS (Write After Approval): Add Tankut Baris Aktemur. + * ravenscar-thread.c (ravenscar_thread_target) : + Remove. + (ravenscar_thread_target::extra_thread_info): Remove. + (ravenscar_thread_target::pid_to_str): Mention Ravenscar in result; + defer to target beneath for non-Ravenscar threads. + +2020-08-07 Tom Tromey + + * ravenscar-thread.c (ravenscar_thread_target) : Now methods. + : New member. + (ravenscar_thread_target::get_thread_base_cpu): Rename from + ravenscar_get_thread_base_cpu. Check m_cpu_map. + (ravenscar_thread_target::task_is_currently_active): Update. + (ravenscar_thread_target::get_base_thread_from_ravenscar_task): + Now a method. + (ravenscar_thread_target::add_active_thread): Put initial thread + into the m_cpu_map. + +2020-08-07 Tom Tromey + + * ravenscar-thread.c (ravenscar_thread_target::wait): Return + event_ptid. + +2020-08-07 Tom Tromey + + * ravenscar-thread.c (ravenscar_thread_target::wait): Check + runtime_initialized. + +2020-08-07 Tom Tromey + + * ravenscar-thread.c (ravenscar_thread_target): Don't call + add_active_thread. + (ravenscar_thread_target::add_active_thread): Now public. + (ravenscar_inferior_created): Call add_active_thread after pushing + the target. + +2020-08-07 Simon Marchi + + * regcache.c (ptid_regcache_map): New type. + (target_ptid_regcache_map): New type. + (regcaches): Change type to target_ptid_regcache_map. + (get_thread_arch_aspace_regcache): Update to regcaches' new + type. + (regcache_thread_ptid_changed): Likewise. + (registers_changed_ptid): Likewise. + (regcaches_size): Likewise. + (regcaches_test): Update. + (regcache_thread_ptid_changed): Update. + * regcache.h (regcache_up): New type. + * gdbsupport/ptid.h (hash_ptid): New struct. + +2020-08-07 Simon Marchi + + * observable.h (thread_ptid_changed): Add parameter + `process_stratum_target *`. + * infrun.c (infrun_thread_ptid_changed): Add parameter + `process_stratum_target *` and use it. + (selftests): New namespace. + (infrun_thread_ptid_changed): New function. + (_initialize_infrun): Register selftest. + * regcache.c (regcache_thread_ptid_changed): Add parameter + `process_stratum_target *` and use it. + (regcache_thread_ptid_changed): New function. + (_initialize_regcache): Register selftest. + * thread.c (thread_change_ptid): Pass target to + thread_ptid_changed observable. + +2020-08-06 Caroline Tice + + * dwarf2/read.c (struct dwo_file): Update comment on 'sections' field. + (struct dwp_sections): Update field comments. Add loclists and + rnglists fields. + (struct virtual_v2_dwo_sections): Rename struct to + 'virtual_v2_or_v5_dwo_sections'; update comments at top of struct; add + size & offset fields for loclists and rnglists. + (struct dwp_hash_table): Add a 'v5' struct field to the union section. + (create_debug_type_hash_table): Add 'DW_UT_split_type' to the check for + skipping dummy type units. + (create_dwp_hash_table): Update the large comment above the function to + discuss Version 5 DWP files as well, with references. Update all the + version checks in the function to check for version 5 as well. Add new + section at the end to create dwp hash table for version 5. + (create_dwp_v2_section): Rename function to + 'create_dwp_v2_or_v5_section'. Update function comment appropriately. + Add V5 to error message text. + (create_dwo_unit_in_dwp_v2): Change calls to create_dwp_v2_section + into calls to create_dwp_v2_or_v5_section. + (create_dwo_unit_in_dwp_v5): New function. + (lookup_dwo_unit_in_dwp): Update conditional statement to explicitly + check for version2; add else clause to handle version 5. + (open_and_init_dwo_file): Add code to check dwarf version & only call + create_debug_types_hash_table (with sections.types) if version is not 5; + else call create_debug_type_hash_table, with sections.info. + (dwarf2_locate_v2_dwp_sections): Update function comment to mention + version 5. + (dwarf2_locate_v5_dwp_sections): New function. + (open_and_init_dwp_file): Add else-if clause for version 5 to call + bfd_map_over_sections with dwarf2_locate_v5_dwp_sections. + +2020-08-06 Simon Marchi + + * regcache.h (class regcache): Remove friend + registers_changed_ptid. + : Remove. + : Remove. + * regcache.c (regcache::regcaches): Rename to... + (regcaches): ... this. Make static. + (get_thread_arch_aspace_regcache): Update. + (regcache::regcache_thread_ptid_changed): Rename to... + (regcache_thread_ptid_changed): ... this. Update. + (class regcache_access): Remove. + (regcaches_test): Update. + (_initialize_regcache): Update. + * sparc64-tdep.c, dwarf2/index-write.c, record-btrace.c: Include + . + +2020-08-06 Simon Marchi + + * regcache.h (class regcache) : Rename to... + : ... this. Move doc here. + * regcache.c (regcache::current_regcache) Rename to... + (regcache::regcaches): ... this. Move doc to header. + (get_thread_arch_aspace_regcache): Update. + (regcache::regcache_thread_ptid_changed): Update. + (registers_changed_ptid): Update. + (class regcache_access) : Rename to... + : ... this. + (current_regcache_test): Rename to... + (regcaches_test): ... this. + (_initialize_regcache): Update. + +2020-08-06 Victor Collod + + * amd64-tdep.c (amd64_analyze_prologue): Fix incorrect comment. + +2020-08-05 Kevin Buettner + + * corelow.c (core_target::build_file_mappings): Don't output + null pathname in warning. + +2020-08-05 Simon Marchi + + * gdb.dwarf2/clztest.exp, gdb.dwarf2/dw2-common-block.exp, + gdb.dwarf2/dw2-dup-frame.exp, gdb.dwarf2/dw2-reg-undefined.exp, + gdb.dwarf2/dw2-single-line-discriminators.exp, + dw2-undefined-ret-addr.exp: Pass nopie to compilation options. + +2020-08-05 Tom Tromey + + PR rust/26197: + * dwarf2/read.c (alloc_rust_variant): Handle univariant case. + (quirk_rust_enum): Call alloc_rust_variant for univariant case. + Fix off-by-one and type size errors in ordinary case. + +2020-08-05 Tom de Vries + + * gdbtypes.c (type_not_allocated, type_not_associated): Use + "prop->const_val () == 0" instead of "prop->const_val () != 0". + +2020-08-04 Simon Marchi + + * frame.h (frame_id_p): Return bool. + (frame_id_artificial_p): Return bool. + (frame_id_eq): Return bool. + (has_stack_frames): Return bool. + (get_selected_frame): Fix typo in comment. + (get_frame_pc_if_available): Return bool. + (get_frame_address_in_block_if_available): Return bool. + (get_frame_func_if_available): Return bool. + (read_frame_register_unsigned): Return bool. + (get_frame_register_bytes): Return bool. + (safe_frame_unwind_memory): Return bool. + (deprecated_frame_register_read): Return bool. + (frame_unwinder_is): Return bool. + * frame.c (struct frame_info) : Change type to + bool. + : Likewise. + : Likewise. + (frame_stash_add): Return bool. + (get_frame_id): Use bool. + (frame_id_build_special) Use bool. + (frame_id_build_unavailable_stack): Use bool. + (frame_id_build): Use bool. + (frame_id_p): Return bool, use true/false instead of 1/0. + (frame_id_artificial_p): Likewise. + (frame_id_eq): Likewise. + (frame_id_inner): Likewise. + (get_frame_func_if_available): Likewise. + (read_frame_register_unsigned): Likewise. + (deprecated_frame_register_read): Likewise. + (get_frame_register_bytes): Likewise. + (has_stack_frames): Likewise. + (inside_main_func): Likewise. + (inside_entry_func): Likewise. + (get_frame_pc_if_available): Likewise. + (get_frame_address_in_block_if_available): Likewise. + (frame_unwinder_is): Likewise. + (safe_frame_unwind_memory): Likewise. + (frame_unwind_arch): Likewise. -2019-10-23 Tom Tromey +2020-08-04 Simon Marchi - * configure: Rebuild. - * configure.ac: Don't check for sigprocmask. - * gdbsupport/common.m4 (GDB_AC_COMMON): Check for sigprocmask. + * frame.c (frame_info)

: Rename to status, change + type to cached_copy_status. + (fprintf_frame): Adjust. + (get_frame_func_if_available): Adjust. + (frame_cleanup_after_sniffer): Adjust. -2019-10-23 Tom Tromey +2020-08-04 Mark Wielaard - * configure: Rebuild. - * acinclude.m4: Use m4_include, not sinclude. + * MAINTAINERS (Write After Approval): Update email address. -2019-10-23 Tom de Vries +2020-08-04 Simon Marchi - PR breakpoints/24687 - * symtab.c (iterate_over_some_symtabs): Apply gdb_realpath on fullname. + * gdbtypes.h (TYPE_DYN_PROP_ADDR): Remove, replace uses with + dynamic_prop::const_val. -2019-10-22 Christian Biesinger +2020-08-04 Simon Marchi - * symtab.c (struct demangled_name_entry) : Change from - bitfield to regular variable. + * gdbtypes.h (TYPE_DYN_PROP_KIND): Remove, replace uses with + dynamic_prop::kind. -2019-10-22 Christian Biesinger +2020-08-04 Simon Marchi - * symtab.c (struct demangled_name_entry): Add a constructor. - (free_demangled_name_entry): New function to call the destructor - for demangled_name_entry. - (create_demangled_names_hash): Pass free_demangled_name_entry to - htab_create_alloc. - (symbol_set_names): Call placement new for demangled_name_entry. - * utils.c: No longer include xxhash.h here, now that fast_hash - is inlined in the header. - * utils.h: Instead, include it here. + * gdbtypes.h (TYPE_DYN_PROP_BATON): Remove. -2019-10-22 Christian Biesinger +2020-08-04 Jose E. Marchesi - * Makefile.in: Link with libxxhash. - * config.in: Regenerate. - * configure: Regenerate. - * configure.ac: Search for libxxhash. - * utils.c (fast_hash): Use xxhash if present. + * configure.tgt: Set gdb_sim for bpf-*-* targets. -2019-10-22 Christian Biesinger +2020-08-04 Weimin Pan + Jose E. Marchesi - * utils.h (fast_hash): New function. - * symtab.c (hash_demangled_name_entry): Call new function - fast_hash. - -2019-10-22 Christian Biesinger - - * symtab.c (struct demangled_name_entry): Change type of mangled - to gdb::string_view. Also adds a constructor that takes the - mangled name. - (hash_demangled_name_entry): Update. - (eq_demangled_name_entry): Update. - (free_demangled_name_entry): New function to call the destructor - now that this is not a POD anymore. - (create_demangled_names_hash): Pass free_demangled_name_entry to - htab_create_alloc. - (symbol_set_names): Update. - -2019-10-21 Ali Tamur - - * dwarf2read.c (dir_index): Change type. - (file_name_index): Likewise. - (line_header::include_dir_at): Change comment and implementation on - whether it is DWARF 5. - (line_header::is_valid_file_index): New function. - (line_header::file_name_at): Change comment and implementation on - whether it is DWARF 5. - (line_header::file_names): Change to private field renamed as - m_file_names and introduce a new accessor method. - (line_header::file_names_size): New method. - (line_header::include_dirs): Change to private field and rename as - m_include_dirs. - (dw2_get_file_names_reader): Define local var at a smaller scope and - reflect API change. - (dwarf2_cu::setup_type_unit_groups): Reflect API change. - (process_structure_scope): Likewise. - (line_header::add_include_dir): Change message and reflect renaming. - (line_header::add_file_name): Likewise. - (read_formatted_entries): Handle DW_FORM_data16. - (dwarf_decode_line_header): Fix line header length calculation. - (psymtab_include_file_name): Change comment and API. - (lnp_state_machine::m_file): Update comment and reflect type change. - (lnp_state_machine::record_line): Reflect type change. - (dwarf_decode_lines): Reflect API change. - (file_file_name): Likewise. - (file_full_name): Likewise. + * configure.tgt: Add entry for bpf-*-*. + * Makefile.in (ALL_TARGET_OBS): Add bpf-tdep.o + (ALLDEPFILES): Add bpf-tdep.c. + * bpf-tdep.c: New file. + * MAINTAINERS: Add bpf target and maintainer. + * NEWS: Mention the support for the new target. -2019-10-21 Andrew Burgess +2020-08-04 Tom de Vries - * objfiles.c (sort_cmp): Ensure that !(a < a) holds true. + PR symtab/23270 + * dwarf2/read.c (find_partial_die): Change internal error into Dwarf + Error. -2019-10-21 Tom Tromey +2020-08-03 John Baldwin - * tui/tui-winsource.h (tui_exec_info_content): Remove typedef. + * syscalls/freebsd.xml: Regenerate. -2019-10-21 Tom Tromey +2020-08-03 John Baldwin - * configure.ac (nm.h): Conditionally create nm.h link. Subst - NM_H. Use AC_CONFIG_LINKS. - * configure: Rebuild. - * Makefile.in (NM_H): New variable. - (generated_files): Add NM_H. Remove gcore. - (nm.h, stamp-nmh): New targets. + * syscalls/update-freebsd.sh: Fix usage and year range. -2019-10-20 Tom Tromey +2020-08-03 Tom de Vries - * objfiles.h (unlink_objfile, put_objfile_before): Don't declare. - * objfiles.c (unlink_objfile): Move earlier. Now static. Remove - obsolete comment. - (put_objfile_before): Now static. + PR symtab/26333 + * dwarf2/read.c (dwarf_decode_lines_1): Ignore + DW_LNE_lo_user/DW_LNE_hi_user range. -2019-10-19 Simon Marchi +2020-07-30 Simon Marchi - * gdbsupport/common-utils.h (startswith): Change return type to - bool. + PR ada/26318 + * ada-lang.c (ada_modulus): Return 0 if property is not of const + kind. -2019-10-19 Christian Biesinger +2020-07-30 Tankut Baris Aktemur - * bcache.c (bcache::print_statistics): Use std::sort instead of qsort. - * breakpoint.c (bp_locations_compare): Rename to... - (bp_location_is_less_than): ...this, and change to std::sort semantics. - (update_global_location_list): Use std::sort instead of qsort. - * buildsym.c (compare_line_numbers): Rename to... - (lte_is_less_than): ...this, and change to std::sort semantics. - (buildsym_compunit::end_symtab_with_blockvector): Use std::sort - instead of qsort. - * disasm.c (compare_lines): Rename to... - (line_is_less_than): ...this, and change to std::sort semantics. - (do_mixed_source_and_assembly_deprecated): Call std::sort instead - of qsort. - * dwarf2-frame.c (qsort_fde_cmp): Rename to... - (fde_is_less_than): ...this, and change to std::sort semantics. - (dwarf2_build_frame_info): Call std::sort instead of qsort. - * mdebugread.c (compare_blocks): - (block_is_less_than): ...this, and change to std::sort semantics. - (sort_blocks): Call std::sort instead of qsort. - * objfiles.c (qsort_cmp): Rename to... - (sort_cmp): ...this, and change to std::sort semantics. - (update_section_map): Call std::sort instead of qsort. - * remote.c (compare_pnums): Remove. - (map_regcache_remote_table): Call std::sort instead of qsort. - * utils.c (compare_positive_ints): Remove. - * utils.h (compare_positive_ints): Remove. - * xcoffread.c (compare_lte): Remove. - (arrange_linetable): Call std::sort instead of qsort. - -2019-10-19 Sergio Durigan Junior - - * symfile.c (init_entry_point_info): Fix typo. - * i386-darwin-tdep.c (darwin_dwarf_signal_frame_p): Fix typo. - -2019-10-18 Tom de Vries - - * aarch64-tdep.c: Fix typos in comments. - * ada-lang.c: Same. - * ada-tasks.c: Same. - * alpha-tdep.c: Same. - * alpha-tdep.h: Same. - * amd64-nat.c: Same. - * amd64-windows-tdep.c: Same. - * arc-tdep.c: Same. - * arc-tdep.h: Same. - * arch-utils.c: Same. - * arm-nbsd-tdep.c: Same. - * arm-tdep.c: Same. - * ax-gdb.c: Same. - * blockframe.c: Same. - * btrace.c: Same. - * c-varobj.c: Same. - * coff-pe-read.c: Same. - * coffread.c: Same. - * cris-tdep.c: Same. - * darwin-nat.c: Same. - * dbxread.c: Same. - * dcache.c: Same. - * disasm.c: Same. - * dtrace-probe.c: Same. - * dwarf-index-write.c: Same. - * dwarf2-frame-tailcall.c: Same. - * dwarf2-frame.c: Same. - * dwarf2read.c: Same. - * eval.c: Same. - * exceptions.c: Same. - * fbsd-tdep.c: Same. - * findvar.c: Same. - * frame.c: Same. - * frv-tdep.c: Same. - * gnu-v3-abi.c: Same. - * go32-nat.c: Same. - * h8300-tdep.c: Same. - * hppa-tdep.c: Same. - * i386-linux-tdep.c: Same. - * i386-tdep.c: Same. - * ia64-libunwind-tdep.c: Same. - * ia64-tdep.c: Same. - * infcmd.c: Same. - * infrun.c: Same. - * linespec.c: Same. - * linux-nat.c: Same. - * linux-thread-db.c: Same. - * machoread.c: Same. - * mdebugread.c: Same. - * mep-tdep.c: Same. - * mn10300-tdep.c: Same. - * namespace.c: Same. - * objfiles.c: Same. - * opencl-lang.c: Same. - * or1k-tdep.c: Same. - * osabi.c: Same. - * ppc-linux-nat.c: Same. - * ppc-linux-tdep.c: Same. - * ppc-sysv-tdep.c: Same. - * printcmd.c: Same. - * procfs.c: Same. - * record-btrace.c: Same. - * record-full.c: Same. - * remote-fileio.c: Same. - * remote.c: Same. - * rs6000-tdep.c: Same. - * s12z-tdep.c: Same. - * score-tdep.c: Same. - * ser-base.c: Same. - * ser-go32.c: Same. - * skip.c: Same. - * sol-thread.c: Same. - * solib-svr4.c: Same. - * solib.c: Same. - * source.c: Same. - * sparc-nat.c: Same. - * sparc-sol2-tdep.c: Same. - * sparc-tdep.c: Same. - * sparc64-tdep.c: Same. - * stabsread.c: Same. - * stack.c: Same. - * symfile.c: Same. - * symtab.c: Same. - * target-descriptions.c: Same. - * target-float.c: Same. - * thread.c: Same. - * utils.c: Same. - * valops.c: Same. - * valprint.c: Same. - * value.c: Same. - * varobj.c: Same. - * windows-nat.c: Same. - * xcoffread.c: Same. - * xstormy16-tdep.c: Same. - * xtensa-tdep.c: Same. + * breakpoint.c (set_breakpoint_condition): Do minor refactoring. -2019-10-17 Tom Tromey +2020-07-30 Tankut Baris Aktemur - * configure: Rebuild. - * configure.ac: Use AC_CONFIG_HEADERS. Create stamp-h there, not - in AC_CONFIG_FILES invocation. - * Makefile.in (Makefile, data-directory/Makefile, stamp-h): Use - new-style config.status invocation. - -2019-10-17 Tom de Vries - - * arm-nbsd-nat.c: Fix typos in comments. - * arm-tdep.c: Same. - * darwin-nat-info.c: Same. - * dwarf2read.c: Same. - * elfread.c: Same. - * event-top.c: Same. - * findvar.c: Same. - * gdbtypes.c: Same. - * hppa-tdep.c: Same. - * i386-tdep.c: Same. - * jit.c: Same. - * main.c: Same. - * mdebugread.c: Same. - * moxie-tdep.c: Same. - * nto-procfs.c: Same. - * osabi.c: Same. - * ppc-linux-tdep.c: Same. - * remote.c: Same. - * riscv-tdep.c: Same. - * s390-tdep.c: Same. - * sh-tdep.c: Same. - * sparc-linux-tdep.c: Same. - * sparc-nat.c: Same. - * stack.c: Same. - * target-descriptions.c: Same. - * top.c: Same. - * varobj.c: Same. - -2019-10-16 Tom Tromey - - * objfiles.h (struct objfile) : Now const. - -2019-10-16 Christian Biesinger - - * gdbsupport/gdb_setjmp.h (SIGSETJMP): Allow passing in the value to - pass on to sigsetjmp's second argument. - * cp-support.c (gdb_demangle): Unblock SIGSEGV if we caught a crash. - -2019-10-16 Keith Seitz - - PR gdb/23567 - * dwarf2read.c (dwarf2_per_objfile::locate_sections): Discard - sections whose size is greater than the file size. - -2019-10-16 Jim Wilson - - * riscv-tdep.c (riscv_gcc_target_options): New. - (riscv_gnu_triplet_regexp): New. - (riscv_gdbarch_init): Call set_gdbarch_gcc_triplet_options and - set_gdbarch_gnu_triplet_regexp. - -2019-10-16 Christian Biesinger - - * Makefile.in: Add xml-builtin.h. - * features/feature_to_c.sh: Add an include for xml-builtin.h - to ensure that the compiler checks that the types match. - * xml-builtin.h: New file. - * xml-support.c (fetch_xml_builtin): Add missing const. - * xml-support.h: Remove declaration of xml_builtins. - -2019-10-16 Tom de Vries - - PR tdep/25096 - * amd64-tdep.c (amd64_classify_aggregate_field): Factor out of ... - (amd64_classify_aggregate): ... here. - (amd64_classify_aggregate_field): Handled fiels of nested structs - recursively. - -2019-10-16 Tom de Vries - - PR tdep/24104 - * amd64-tdep.c (amd64_push_arguments): Handle AMD64_NO_CLASS in loop - that handles 'theclass'. - -2019-10-15 Andrew Burgess - - * linespec.c (decode_digits_ordinary): Update comment. - * make-target-delegates: No longer need to handle VEC case. - * memrange.c (normalize_mem_ranges): Update comment. - * namespace.c (add_using_directive): Update comment. - * objc-lang.c (uniquify_strings): Update comment. - * ppc-linux-nat.c (struct thread_points): Update comment. - * probe.h (find_probes_in_objfile): Update comment. - * target.h (enum flash_preserve_mode): Update comment. - * varobj.c (varobj_restrict_range): Update comment. - * varobj.h (varobj_list_children): Update comment. - -2019-10-15 Andrew Burgess - - * Makefile.in: Remove references to vec.h and vec.c. - * aarch64-tdep.c: No longer include vec.h. - * ada-lang.c: Likewise. - * ada-lang.h: Likewise. - * arm-tdep.c: Likewise. - * ax.h: Likewise. - * breakpoint.h: Likewise. - * charset.c: Likewise. - * cp-support.h: Likewise. - * dtrace-probe.c: Likewise. - * dwarf2read.c: Likewise. - * extension.h: Likewise. - * gdb_bfd.c: Likewise. - * gdbsupport/gdb_vecs.h: Likewise. - * gdbsupport/vec.c: Remove. - * gdbsupport/vec.h: Remove. - * gdbthread.h: Likewise. - * guile/scm-type.c: Likewise. - * inline-frame.c: Likewise. - * machoread.c: Likewise. - * memattr.c: Likewise. - * memrange.h: Likewise. - * namespace.h: Likewise. - * nat/linux-btrace.h: Likewise. - * osdata.c: Likewise. - * parser-defs.h: Likewise. - * progspace.h: Likewise. - * python/py-type.c: Likewise. - * record-btrace.c: Likewise. - * rust-exp.y: Likewise. - * solib-target.c: Likewise. - * stap-probe.c: Likewise. - * target-descriptions.c: Likewise. - * target-memory.c: Likewise. - * target.h: Likewise. - * varobj.c: Likewise. - * varobj.h: Likewise. - * xml-support.h: Likewise. + * breakpoint.c (set_breakpoint_condition): Update the condition + expressions after checking that the input condition string parses + successfully and does not contain junk at the end. -2019-10-15 Andrew Burgess +2020-07-30 Tankut Baris Aktemur - * gdb/dwarf2read.c (dwarf2_per_objfile::~dwarf2_per_objfile): - Update for new std::vector based implementation. - (process_psymtab_comp_unit_reader): Likewise. - (scan_partial_symbols): Likewise. - (recursively_compute_inclusions): Likewise. - (compute_compunit_symtab_includes): Likewise. - (process_imported_unit_die): Likewise. - (queue_and_load_dwo_tu): Likewise. - (follow_die_sig_1): Likewise. - * gdb/dwarf2read.h: Remove DEF_VEC_P. - (typedef dwarf2_per_cu_ptr): Remove. - (struct dwarf2_per_cu_data) : New - function. - (struct dwarf2_per_cu_data) : New function. - (struct dwarf2_per_cu_data) : New function. - (struct dwarf2_per_cu_data) : New function. - (struct dwarf2_per_cu_data) : Change to - std::vector. + * breakpoint.c (set_breakpoint_condition): Update the + condition string after parsing the new condition successfully. -2019-10-15 Tom Tromey +2020-07-30 Rainer Orth - * windows-nat.c (windows_nat_target::resume): Use %x when logging - TID. + * proc-api.c (_STRUCTURED_PROC): Don't define. + * proc-events.c: Likewise. + * proc-flags.c: Likewise. + * proc-why.c: Likewise. + * procfs.c: Likewise. -2019-10-15 Tom Tromey + * Makefile.in (INTERNAL_CPPFLAGS): Add LARGEFILE_CPPFLAGS. + * configure, config.in: Regenerate. - * windows-nat.c (windows_nat_target::fetch_registers) - (windows_nat_target::store_registers): Rename "pid" to "tid". +2020-07-30 Tom de Vries -2019-10-15 Tom Tromey + PR build/26320 + * ui-style.h (struct ui_file_style::color): Wrap m_value and + m_red/m_green/m_blue in a union. - * gdbarch.h, gdbarch.c: Rebuild. - * gdbarch.sh (gcc_target_options): Change return type to - std::string. - * compile/compile.c (get_args): Update. - * nios2-tdep.c (nios2_gcc_target_options): Return std::string. - * arm-linux-tdep.c (arm_linux_gcc_target_options): Return - std::string. - * aarch64-linux-tdep.c (aarch64_linux_gcc_target_options): Return - std::string. - * arch-utils.c (default_gcc_target_options): Return std::string. - * arch-utils.h (default_gcc_target_options): Return std::string. - * s390-tdep.c (s390_gcc_target_options): Return std::string. - -2019-10-15 Christian Biesinger - - * breakpoint.c (breakpoint_chain): Make static. - * tui/tui-winsource.c: Call iterate_over_breakpoints instead - of accessing breakpoint_chain. - -2019-10-15 Christian Biesinger - - * breakpoint.c (iterate_over_breakpoints): Change function pointer - to a gdb::function_view and return value to bool. - * breakpoint.h (iterate_over_breakpoints): Likewise. - * dummy-frame.c (pop_dummy_frame_bpt): Update. - (pop_dummy_frame): Update. - * guile/scm-breakpoint.c (bpscm_build_bp_list): Update. - (gdbscm_breakpoints): Update. - * python/py-breakpoint.c (build_bp_list): Update. - (gdbpy_breakpoints): Update. - * python/py-finishbreakpoint.c (bpfinishpy_detect_out_scope_cb): - Update. - (bpfinishpy_handle_stop): Update. - (bpfinishpy_handle_exit): Update. - * solib-svr4.c (svr4_update_solib_event_breakpoint): Update. - (svr4_update_solib_event_breakpoints): Update. +2020-07-29 Tom de Vries -2019-10-15 Andreas Arnez + PR tdep/26280 + * s390-tdep.c (s390_displaced_step_fixup): Fix Wmaybe-uninitialized. - * s390-tdep.c (s390_effective_inner_type): Ignore static fields - when unwrapping single-field structs. +2020-07-28 Tom Tromey -2019-10-14 Simon Marchi + PR symtab/26270: + * symtab.h (find_pc_partial_function_sym): Declare. + * cli/cli-cmds.c (disassemble_command): Use + find_pc_partial_function_sym. Check asm_demangle. + * blockframe.c (cache_pc_function_sym): New global. + (cache_pc_function_name): Remove. + (clear_pc_function_cache): Update. + (find_pc_partial_function_sym): New function, from + find_pc_partial_function. + (find_pc_partial_function): Rewrite using + find_pc_partial_function_sym. - * dwarf2read.c: Remove includes. +2020-07-28 Tom Tromey -2019-10-13 Simon Marchi + * cli/cli-cmds.c (_initialize_cli_cmds): Rearrange "disassemble" + help. Add usage. - * ui-out.c (ui_out::call_do_message): Silence - -Wformat-nonliteral warning. +2020-07-28 Tom Tromey -2019-10-12 Simon Marchi + * dwarf2/expr.c (dwarf_expr_context::execute_stack_op) + : Cast to address type. - * breakpoint.c: Remove some includes: continuations.h, skip.h, - mi/mi-main.h, readline/readline.h, readline/history.h. Add - include: readline/tilde.h. +2020-07-28 Kamil Rytarowski -2019-10-12 Christian Biesinger + * nbsd-nat.h (nbsd_nat_target::xfer_partial): New declaration. + * nbsd-nat.c (nbsd_nat_target::xfer_partial): New function. + * nbsd-tdep.c (nbsd_gdbarch_data_handle, struct nbsd_gdbarch_data) + (init_nbsd_gdbarch_data, get_nbsd_gdbarch_data) + (nbsd_get_siginfo_type): New. + (nbsd_init_abi): Install gdbarch "get_siginfo_type" method. + (_initialize_nbsd_tdep): New. - * remote.c (remote_target::get_trace_status): Remove declaration of - trace_regblock_size. +2020-07-28 H.J. Lu -2019-10-12 Christian Biesinger + PR binutils/26301 + * configure: Regenerated. - * cli/cli-cmds.c (max_user_call_depth): Move comment to header. - (show_user): Remove declaration of cmdlist. - * cli/cli-cmds.h (max_user_call_depth): Declare. - * cli/cli-script.c (execute_user_command): Remove declaration - of max_user_call_depth. +2020-07-28 H.J. Lu -2019-10-11 Jim Wilson + PR binutils/26301 + * configure: Regenerated. - * gdbsupport/print-utils.h (pulongest): Fix comment. - (plongest): Likewise. - (phex): Add missing comment, mention leading zeros. - (phex_nz): Add mention of no leading zeros to comment. +2020-07-28 Andrew Burgess - * riscv-tdep.c (riscv_push_dummy_code): Change %lld to %s and use - plongest instead of unsigned long long cast. + * python/py-frame.c: Remove 'user-regs.h' include. + (frapy_read_register): Rewrite to make use of + gdbpy_parse_register_id. + * python/py-registers.c (gdbpy_parse_register_id): New function, + moved here from python/py-unwind.c. Updated the return type, and + also accepts register descriptor objects. + * python/py-unwind.c: Remove 'user-regs.h' include. + (pyuw_parse_register_id): Moved to python/py-registers.c. + (unwind_infopy_add_saved_register): Update to use + gdbpy_parse_register_id. + (pending_framepy_read_register): Likewise. + * python/python-internal.h (gdbpy_parse_register_id): Declare. -2019-10-10 Christian Biesinger +2020-07-28 Andrew Burgess - * main.c (captured_main_1): Include gdbtk.h and remove declarations - for external_editor_command and gdbtk_test. + * python/py-registers.c: Add 'user-regs.h' include. + (register_descriptor_iter_find): New function. + (register_descriptor_iterator_object_methods): New static global + methods array. + (register_descriptor_iterator_object_type): Add pointer to methods + array. -2019-10-10 Christian Biesinger +2020-07-27 John Baldwin - * mi/mi-cmd-var.c (varobjdebug): Remove declaration. - * varobj.c (varobjdebug): Move comment to... - * varobj.h (varobjdebug): ...here, and declare. + * fbsd-nat.h: Include . Define USE_SIGTRAP_SIGINFO + for all architectures on FreeBSD 11.3 and later. -2019-10-09 Tom Tromey +2020-07-27 Tom Tromey - * tui/tui-regs.c (tui_data_window::show_registers): Don't call - erase_data_content. + * gcore.h (load_corefile): Don't declare. -2019-10-09 Tom Tromey +2020-07-27 Tom de Vries - * tui/tui-wingeneral.h (tui_delete_win): Don't declare. - * tui/tui-stack.c (tui_locator_window::rerender): Update. - * tui/tui-command.c (tui_cmd_window::resize) - (tui_refresh_cmd_win): Update. - * tui/tui-win.c (tui_resize_all, tui_set_focus_command): Update. - * tui/tui.c (tui_rl_other_window, tui_enable): Update. - * tui/tui-data.c (~tui_gen_win_info): Remove. - * tui/tui-layout.c (tui_gen_win_info::resize): Update. - * tui/tui-io.c (update_cmdwin_start_line, tui_putc, tui_puts) - (tui_redisplay_readline, tui_mld_flush) - (tui_mld_erase_entire_line, tui_mld_getc, tui_getc): Update. - * tui/tui-regs.c (tui_data_window::delete_data_content_windows) - (tui_data_window::erase_data_content) - (tui_data_item_window::rerender) - (tui_data_item_window::refresh_window): Update. - * tui/tui-wingeneral.c (tui_gen_win_info::refresh_window) - (box_win, tui_gen_win_info::make_window) - (tui_gen_win_info::make_visible): Update. - (tui_delete_win): Remove. - * tui/tui-winsource.c - (tui_source_window_base::do_erase_source_content): Update. - (tui_show_source_line, tui_source_window_base::update_tab_width) - (tui_source_window_base::update_exec_info): Update. - * tui/tui-data.h (struct curses_deleter): New. - (struct tui_gen_win_info) : Now a unique_ptr. - (struct tui_gen_win_info) <~tui_gen_win_info>: Define. + * configure.ac: Fix sys/sockets.h -> sys/socket.h typo. + * config.in: Regenerate. + * configure: Regenerate. -2019-10-09 Tom Tromey +2020-07-26 Eli Zaretskii - * tui/tui-wingeneral.h (struct tui_gen_win_info): Don't declare. + * configure.ac (AC_CHECK_HEADERS): Check for sys/socket.h and + ws2tcpip.h. When checking whether socklen_t type is defined, use + ws2tcpip.h if it is available and sys/socket.h isn't. + * configure: Regenerate. + * config.in: Regenerate. -2019-10-09 Tom Tromey +2020-07-25 Andrew Burgess - * tui/tui-data.c (tui_win_is_auxiliary): Remove. - * tui/tui-data.h (tui_win_is_auxiliary): Don't declare. + PR fortran/23051 + PR fortran/26139 + * valops.c (value_ind): Pass address to + readjust_indirect_value_type. + * value.c (readjust_indirect_value_type): Make parameter + non-const, and add extra address parameter. Resolve original type + before using it. + * value.h (readjust_indirect_value_type): Update function + signature and comment. + +2020-07-25 Tom de Vries + + PR symtab/26243 + * dwarf2/read.c (lnp_state_machine::record_line): Ignore zero line + entries. -2019-10-09 Tom Tromey +2020-07-24 Aaron Merey - * tui/tui-disasm.c (tui_get_low_disassembly_address): Compute - window height directly. - * tui/tui-layout.h (tui_default_win_viewport_height): Don't - declare. - * tui/tui-layout.c (tui_default_win_height): Remove. - (tui_default_win_viewport_height): Remove. + * Makefile.in: Replace LIBDEBUGINFOD with DEBUGINFOD_LIBS. + * configure: Rebuild. -2019-10-09 Tom Tromey +2020-07-23 Kevin Buettner - * tui/tui.h: Remove comments. + PR corefiles/26294 + * corelow.c (_initialize_corelow): Add period to help text + for "maintenance print core-file-backed-mappings". + +2020-07-23 Pedro Alves + + * frame-unwind.c (frame_unwind_try_unwinder): On exception, don't + touch THIS_CACHE/THIS_FRAME if the frame cache was cleared + meanwhile. + * frame.c (frame_cache_generation, get_frame_cache_generation): + New. + (reinit_frame_cache): Increment FRAME_CACHE_GENERATION. + (get_prev_frame_if_no_cycle): On exception, don't touch + PREV_FRAME/THIS_FRAME if the frame cache was cleared meanwhile. + * frame.h (get_frame_cache_generation): Declare. + +2020-07-23 Tom de Vries + + PR tui/26282 + * tui/tui-winsource.h (struct tui_source_windows::tui_source_windows): + New default constructor. + +2020-07-23 Andrew Burgess + + * disasm.c (do_mixed_source_and_assembly_deprecated): Don't + exclude non-statement entries. + +2020-07-22 Kevin Buettner + + * NEWS (New commands): Mention new command + "maintenance print core-file-backed-mappings". + +2020-07-22 Kevin Buettner + + * corelow.c (gdbcmd.h): Include. + (core_target::info_proc_mappings): New method. + (get_current_core_target): New function. + (maintenance_print_core_file_backed_mappings): New function. + (_initialize_corelow): Add core-file-backed-mappings to + "maint print" commands. + +2020-07-22 Kevin Buettner + + * linux-tdep.c (dump_note_entry_p): New function. + (linux_dump_mapping_p_ftype): New typedef. + (linux_find_memory_regions_full): Add new parameter, + should_dump_mapping_p. + (linux_find_memory_regions): Adjust call to + linux_find_memory_regions_full. + (linux_make_mappings_core_file_notes): Use dump_note_entry_p in + call to linux_find_memory_regions_full. + +2020-07-22 Kevin Buettner + + * corelow.c (solist.h, unordered_map): Include. + (class core_target): Add field m_core_file_mappings and + method build_file_mappings. + (core_target::core_target): Call build_file_mappings. + (core_target::~core_target): Free memory associated with + m_core_file_mappings. + (core_target::build_file_mappings): New method. + (core_target::xfer_partial): Use m_core_file_mappings + for memory transfers. + * linux-tdep.c (linux_read_core_file_mappings): New + function. + (linux_core_info_proc_mappings): Rewrite to use + linux_read_core_file_mappings. + (linux_init_abi): Register linux_read_core_file_mappings. + +2020-07-22 Kevin Buettner + + * arch-utils.c (default_read_core_file_mappings): New function. + * arch-utils.c (default_read_core_file_mappings): Declare. + * gdbarch.sh (read_core_file_mappings): New gdbarch method. + * gdbarch.h, gdbarch.c: Regenerate. -2019-10-09 Tom de Vries +2020-07-22 Kevin Buettner - * python/lib/gdb/printer/bound_registers.py: Use - '^builtin_type_bound128' as regexp argument for - add_builtin_pretty_printer. + PR corefiles/25631 + * corelow.c (core_target:xfer_partial): Revise + TARGET_OBJECT_MEMORY case to consider non-SEC_HAS_CONTENTS + case after first checking the stratum beneath the core + target. + (has_all_memory): Return true. + * target.c (raw_memory_xfer_partial): Revise comment + regarding use of has_all_memory. + +2020-07-22 Kevin Buettner + + * exec.h (section_table_xfer_memory): Revise declaration, + replacing section name parameter with an optional callback + predicate. + * exec.c (section_table_xfer_memory): Likewise. + * bfd-target.c, exec.c, target.c, corelow.c: Adjust all callers + of section_table_xfer_memory. + +2020-07-22 Tom Tromey + + * mi/mi-cmd-stack.c (list_args_or_locals): Use + lookup_symbol_search_name. + +2020-07-22 Andrew Burgess + + * python/py-registers.c (gdbpy_register_object_data_init): Remove + redundant local variable. + (gdbpy_get_register_descriptor): Extract descriptor vector as a + reference, not pointer, update code accordingly. + +2020-07-22 Simon Marchi + Tankut Baris Aktemur + + * objfiles.h (struct objfile) : New field. + * jit.c (jit_breakpoint_re_set_internal): Use the + `skip_jit_symbol_lookup` field. + +2020-07-22 Simon Marchi + Tankut Baris Aktemur + + * jit.c (jit_read_descriptor): Define the descriptor address once, + use twice. + (jit_breakpoint_deleted): Move the declaration of the loop variable + `iter` into the loop header. + (jit_breakpoint_re_set_internal): Move the declaration of the local + variable `objf_data` to the first point of definition. + (jit_event_handler): Move the declaration of local variables + `code_entry`, `entry_addr`, and `objf` to their first point of use. + Rename `objf` to `jited`. -2019-10-09 Christian Biesinger +2020-07-22 Simon Marchi - * guile/guile.c (guile_extension_script_ops): Remove forward - declaration and mark as static. - (guile_script_ops): Likewise. - (extension_language_guile): Move further down in the file so - it can reference the definitions for guile_{extension_,}script_ops. + * jit.h (struct jiter_objfile_data) : + Remove. + * jit.c (get_jiter_objfile_data): Update. -2019-10-09 Andreas Arnez +2020-07-22 Tankut Baris Aktemur + Simon Marchi - * s390-tdep.c (390_process_record): Handle new arch13 instructions - except SORTL, DFLTCC, and KDSA. + * jit.c (struct jit_program_space_data): Remove. + (jit_program_space_key): Remove. + (jiter_objfile_data::~jiter_objfile_data): Remove program space + stuff. + (get_jit_program_space_data): Remove. + (jit_breakpoint_deleted): Iterate on all of the program space's + objfiles. + (jit_inferior_init): Likewise. + (jit_breakpoint_re_set_internal): Likewise. Also change return + type to void. + (jit_breakpoint_re_set): Pass current_program_space to + jit_breakpoint_re_set_internal. -2019-10-08 Tom Tromey +2020-07-22 Simon Marchi - * windows-nat.c (struct windows_thread_info_struct) : Remove. - (struct safe_symbol_file_add_args): Remove. + * jit.h (struct jiter_objfile_data) : Move to here from ... + * jit.c (jit_program_space_data): ... here. + (jiter_objfile_data::~jiter_objfile_data): Update. + (jit_breakpoint_deleted): Update. + (jit_breakpoint_re_set_internal): Update. -2019-10-08 Tom Tromey +2020-07-22 Simon Marchi - * windows-nat.c: Don't include buildsym-legacy.h. + * jit.c (jiter_objfile_data::~jiter_objfile_data): Remove some + checks. + (jit_read_descriptor): Remove NULL check. + (jit_event_handler): Add an assertion. -2019-10-08 Tom Tromey +2020-07-22 Simon Marchi - * contrib/ari/gdb_ari.sh (%p): Allow gdb-specific %p extensions. + * jit.h (struct jit_objfile_data): Split into... + (struct jiter_objfile_data): ... this ... + (struct jited_objfile_data): ... and this. + * objfiles.h (struct objfile) : Remove. + : New fields. + * jit.c (jit_objfile_data::~jit_objfile_data): Rename to ... + (jiter_objfile_data::~jiter_objfile_data): ... this. + (get_jit_objfile_data): Rename to ... + (get_jiter_objfile_data): ... this. + (add_objfile_entry): Update. + (jit_read_descriptor): Use get_jiter_objfile_data. + (jit_find_objf_with_entry_addr): Use objfile's jited_data field. + (jit_breakpoint_re_set_internal): Use get_jiter_objfile_data. + (jit_inferior_exit_hook): Use objfile's jited_data field. + +2020-07-22 Simon Marchi + + * jit.h: Forward-declare `struct minimal_symbol`. + (struct jit_objfile_data): Migrate to here from jit.c; also add a + constructor, destructor, and an objfile* field. + * jit.c (jit_objfile_data): Remove. + (struct jit_objfile_data): Migrate from here to jit.h. + (jit_objfile_data::~jit_objfile_data): New destructor + implementation with code moved from free_objfile_data. + (free_objfile_data): Delete. + (get_jit_objfile_data): Update to use the jit_data field of objfile. + (jit_find_objf_with_entry_addr): Ditto. + (jit_inferior_exit_hook): Ditto. + (_initialize_jit): Remove the call to + register_objfile_data_with_cleanup. + * objfiles.h (struct objfile) : New field. + +2020-07-22 Tankut Baris Aktemur + + * jit.h: Forward-declare `struct objfile`. + (jit_event_handler): Add a second parameter, the JITer objfile. + * jit.c (jit_read_descriptor): Change the signature to take the + JITer objfile as an argument instead of the jit_program_space_data. + (jit_inferior_init): Update the call to jit_read_descriptor. + (jit_event_handler): Use the new JITer objfile argument when calling + jit_read_descriptor. + * breakpoint.c (handle_jit_event): Update the call to + jit_event_handler to pass the JITer objfile. -2019-10-08 Christian Biesinger +2020-07-21 John Baldwin - * gdbtypes.c (overload_debug): Move comment to header. - * gdbtypes.h (overload_debug): Declare. - * valops.c: Remove declaration of overload_debug, instead - include gdbtypes.h. + * gdbarch.c: Regenerate. + * gdbarch.h: Regenerate. + * gdbarch.sh (handle_segmentation_fault): Remove method. + * infrun.c (handle_segmentation_fault): Remove. + (print_signal_received_reason): Remove call to + handle_segmentation_fault. -2019-10-08 Christian Biesinger +2020-07-21 John Baldwin - * language.c (show_language_command): Pass lang_frame_mismatch_warn - through _(). - (lang_frame_mismatch_warn): Make const, mark with N_(), and - move comment... - * language.h (lang_frame_mismatch_warn): ... here. Also add - declaration. - * top.c (lang_frame_mismatch_warn): Remove declaration. - (check_frame_language_change): Pass lang_frame_mismatch_warn - through _(). - -2019-10-07 Christian Biesinger - - * c-lang.h (vtbl_ptr_name): Declare. - * cp-valprint.c (vtbl_ptr_name): Remove "extern" now that we get - it from the header. - * stabsread.c (define_symbol): Remove declaration of vtbl_ptr_name. - -2019-10-07 Christian Biesinger - - * charset.c (your_gdb_wchar_t_is_bogus): Replace with a - gdb_static_assert. - -2019-10-07 Weimin Pan - - * ../Makefile.def (dependencies): Add all-libctf to all-gdb - * ../Makefile.in: Add "all-gdb: maybe-all-libctf" - * ctfread.c: New file. - * ctfread.h: New file. - * elfread.c: Include ctfread.h. - (struct elfinfo text_p): New member ctfsect. - (elf_locate_sections): Mark CTF section. - (elf_symfile_read): Call elfctf_build_psymtabs. - * Makefile.in (LIBCTF): Add. - (CLIBS): Use it. - (CDEPS): Likewise. - (DIST): Add ctfread.c. + * sparc64-linux-tdep.c (sparc64_linux_handle_segmentation_fault): + Rename to sparc64_linux_report_signal_info and add siggnal + argument. + (sparc64_linux_init_abi): Use sparc64_linux_report_signal_info + instead of sparc64_linux_handle_segmentation_fault. -2019-10-07 Andrew Burgess +2020-07-21 John Baldwin - * ctfread.c (struct nextfield): Renamed to ... - (struct ctf_nextfield): ... this. - (struct field_info): Renamed to ... - (strut ctf_field_info): ... this. - (attach_fields_to_type): Update for renamed structures. - (ctf_add_member_cb): Likewise. - (ctf_add_enum_member_cb): Likewise. - (process_struct_members): Likewise. - (process_enum_type): Likewise. + * amd64-linux-tdep.c (amd64_linux_init_abi_common): Use + i386_linux_report_signal_info instead of + i386_linux_handle_segmentation_fault. + * i386-linux-tdep.c (i386_linux_handle_segmentation_fault): Rename + to i386_linux_report_signal_info and add siggnal argument. + (i386_linux_init_abi): Use i386_linux_report_signal_info instead + of i386_linux_handle_segmentation_fault. + * i386-linux-tdep.h (i386_linux_handle_segmentation_fault): Rename + to i386_linux_report_signal_info and add siggnal argument. -2019-10-07 Weimin Pan +2020-07-21 John Baldwin - * tracectf.h: Rename, was ctf.h. - * tracectf.c: Rename, was ctf.c, replace ctf.h with tracectf.h. - * tracefile.c: Likewise. - * tracepoint.c: Remove unused include ctf.h. - * mi/mi-main.c: Likewise. - * Makefile.in Replace ctf.c with tracectf.c. + * corelow.c (core_target_open): Invoke gdbarch report_signal_info + hook if present. -2019-10-06 Joel Brobecker +2020-07-21 John Baldwin - * version.in: Change version number to "9.0.50.DATE-git". + * gdbarch.c: Regenerate. + * gdbarch.h: Regenerate. + * gdbarch.sh (report_signal_info): New method. + * infrun.c (print_signal_received_reason): Invoke gdbarch + report_signal_info hook if present. -2019-10-03 Tom Tromey +2020-07-21 Andrew Burgess - PR rust/24976: - * dwarf2read.c (quirk_rust_enum): Handle single-element unions. + * python/py-registers.c : Add 'unordered_map' include. + (gdbpy_new_reggroup): Renamed to... + (gdbpy_get_reggroup): ...this. Update to only create register + group descriptors when needed. + (gdbpy_reggroup_iter_next): Update. -2019-10-03 Andrew Burgess +2020-07-21 Andrew Burgess - * f-lang.c (f_language_defn): Use cp_get_symbol_name_matcher and - cp_search_name_hash. - * NEWS: Add entry about nested function support. + * python/py-registers.c (gdbpy_register_object_data): New static + global. + (gdbpy_register_object_data_init): New function. + (gdbpy_new_register_descriptor): Renamed to... + (gdbpy_get_register_descriptor): ...this, and update to reuse + existing register descriptors where possible. + (gdbpy_register_descriptor_iter_next): Update. + (gdbpy_initialize_registers): Register new gdbarch data. -2019-10-03 Bernhard Heckel - Andrew Burgess +2020-07-21 Simon Marchi - * cp-namespace.c (cp_search_static_and_baseclasses): Only search - for nested static variables when searchin VAR_DOMAIN. - * dwarf2read.c (add_partial_symbol): Add nested subroutines to the - global scope, update comment. - (add_partial_subprogram): Call add_partial_subprogram recursively - for nested subroutines when processinng Fortran. - (load_partial_dies): Process the child entities of a subprogram - when processing Fortran. - (partial_die_parent_scope): Handle building scope - for Fortran nested functions. - (process_die): Record that nested functions have a scope. - (new_symbol): Always record Fortran subprograms on the global - symbol list. - (determine_prefix): How to build the prefix for Fortran - subprograms. - -2019-10-03 Andrew Burgess - - * linux-nat.c (linux_nat_filter_event): Don't ignore SIGSTOP if we - have just sent the thread a SIGSTOP and are waiting for it to - arrive. - -2019-10-03 Andrew Burgess - - * btrace.c (btrace_add_pc): Remove whitespace before the template - parameter in 'std::vector <...>'. - (parse_xml_btrace_block): Likewise. - (btrace_maint_decode_pt): Likewise. - (btrace_maint_update_packets): Likewise. - (btrace_maint_print_packets): Likewise. - * btrace.h (struct btrace_maint_info): Likewise. - * dwarf2read.c (struct type_unit_group): Likewise. - (build_type_psymtabs_reader): Likewise. - * gdbsupport/btrace-common.c (btrace_data_append): Likewise. - * gdbsupport/btrace-common.h (struct btrace_data_bts): Likewise. - * nat/linux-btrace.c (perf_event_read_bts): Likewise. - -2019-10-03 Tom de Vries - - * cli/cli-style.c (_initialize_cli_style): Adding a '.' at the end of - the first line of the help text for set/show style metadata. - -2019-10-02 Tom Tromey - - * Makefile.in (COMMON_SFILES): Add common-inferior.c. - * gdbsupport/common-inferior.c: New file. - * infcmd.c (startup_with_shell): Don't define. - * nat/fork-inferior.h (startup_with_shell): Don't declare. - * gdbsupport/common-inferior.h (startup_with_shell): Declare. - * inferior.h (startup_with_shell): Don't declare. - -2019-10-02 Christian Biesinger - - * gdbsupport/gdb_assert.h: Include errors.h. - * gdbsupport/gdb_string_view.h: Include gdb_assert.h. - -2019-10-02 Tom Tromey - - * NEWS: Add $_ada_exception entry. - * ada-lang.c (struct ada_catchpoint): Add constructor. - : New member. - (allocate_location_exception, re_set_exception): Remove - "ex" parameter. - (should_stop_exception): Compute $_ada_exception. - (check_status_exception, print_it_exception) - (print_one_exception, print_mention_exception): Remove - "ex" parameter. - (allocate_location_catch_exception, re_set_catch_exception) - (check_status_exception, print_it_catch_exception) - (print_one_catch_exception, print_mention_catch_exception) - (print_recreate_catch_exception) - (allocate_location_catch_exception_unhandled) - (re_set_catch_exception_unhandled) - (check_status_exception, print_it_catch_exception_unhandled) - (print_one_catch_exception_unhandled) - (print_mention_catch_exception_unhandled) - (print_recreate_catch_exception_unhandled) - (allocate_location_catch_assert, re_set_catch_assert) - (check_status_assert, print_it_catch_assert) - (print_one_catch_assert, print_mention_catch_assert) - (print_recreate_catch_assert) - (allocate_location_catch_handlers, re_set_catch_handlers) - (check_status_handlers, print_it_catch_handlers) - (print_one_catch_handlers, print_mention_catch_handlers) - (print_recreate_catch_handlers): Remove. - (create_ada_exception_catchpoint): Update. - (initialize_ada_catchpoint_ops): Update. - -2019-10-02 Tom Tromey - - * ada-lang.c (ada_lookup_simple_minsyms): Remove. - (create_excep_cond_exprs): Simplify exception string computation. - (ada_exception_catchpoint_cond_string): Likewise. - -2019-10-02 Tom Tromey - - * symmisc.c (dump_msymbols): Don't use MSYMBOL_VALUE_ADDRESS. - * ada-lang.c (lesseq_defined_than): Handle - LOC_STATIC. - * dwarf2read.c (dwarf2_per_objfile): Add can_copy - parameter. - (dwarf2_has_info): Likewise. - (new_symbol): Set maybe_copied on symbol when - appropriate. - * dwarf2read.h (dwarf2_per_objfile): Add can_copy - parameter. - : New member. - * elfread.c (record_minimal_symbol): Set maybe_copied - on symbol when appropriate. - (elf_symfile_read): Update call to dwarf2_has_info. - * minsyms.c (lookup_minimal_symbol_linkage): New - function. - * minsyms.h (lookup_minimal_symbol_linkage): Declare. - * symtab.c (get_symbol_address, get_msymbol_address): - New functions. - * symtab.h (get_symbol_address, get_msymbol_address): - Declare. - (SYMBOL_VALUE_ADDRESS, MSYMBOL_VALUE_ADDRESS): Handle - maybe_copied. - (struct symbol, struct minimal_symbol) : - New member. - -2019-10-02 Tom Tromey - - * source.c (struct current_source_location): New. - (current_source_key): New global. - (current_source_symtab, current_source_line) - (current_source_pspace): Remove. - (get_source_location): New function. - (get_current_source_symtab_and_line) - (set_default_source_symtab_and_line) - (set_current_source_symtab_and_line) - (clear_current_source_symtab_and_line, select_source_symtab) - (info_source_command, print_source_lines_base) - (info_line_command, search_command_helper, _initialize_source): - Update. + * linux-nat.c (stopped_pids): Make static. -2019-10-02 Tom Tromey +2020-07-21 Simon Marchi - * source.c (select_source_symtab): Don't call - decode_line_with_current_source. + PR ada/26235 + * gdbtypes.c (ada_discrete_type_low_bound, + ada_discrete_type_high_bound): Handle undefined bounds. -2019-10-02 Andrew Burgess +2020-07-21 Kamil Rytarowski - * symtab.c (lookup_global_symbol): Search global block. + * nbsd-nat.h (nbsd_nat_target::supports_multi_process): New + declaration. + * nbsd-nat.c (nbsd_nat_target::supports_multi_process): New + function. -2019-10-02 Tom Tromey +2020-07-20 John Baldwin - * coffread.c (process_coff_symbol): Update. - * dwarf2read.c (var_decode_location, new_symbol): Update. - * mdebugread.c (parse_symbol): Update. - * objfiles.c (relocate_one_symbol): Update. - * stabsread.c (define_symbol, fix_common_block) - (scan_file_globals): Update. - * symtab.h (SYMBOL_VALUE_ADDRESS): Expand to an rvalue. - (SET_SYMBOL_VALUE_ADDRESS): New macro. - * xcoffread.c (process_xcoff_symbol): Update. + * fbsd-tdep.c (fbsd_skip_solib_resolver): New function. + (fbsd_init_abi): Install gdbarch "skip_solib_resolver" method. + * fbsd-tdep.h (fbsd_skip_solib_resolver): New prototype. + * mips-fbsd-tdep.c (mips_fbsd_skip_solib_resolver): New function. + (mips_fbsd_init_abi): Install gdbarch "skip_solib_resolver" + method. -2019-10-02 Andreas Arnez +2020-07-20 Ludovic Courtès - * MAINTAINERS: Update my email address. + * guile/scm-math.c (vlscm_integer_fits_p): Use 'uintmax_t' + and 'intmax_t' instead of 'scm_t_uintmax' and 'scm_t_intmax', + which are deprecated in Guile 3.0. + * configure.ac (try_guile_versions): Add "guile-3.0". + * configure (try_guile_versions): Regenerate. + * NEWS: Update entry. + +2020-07-20 Ludovic Courtès + Doug Evans + + PR gdb/21104 + * guile/scm-ports.c (USING_GUILE_BEFORE_2_2): New macro. + (ioscm_memory_port)[read_buf_size, write_buf_size]: Wrap in #if + USING_GUILE_BEFORE_2_2. + (stdio_port_desc, memory_port_desc) [!USING_GUILE_BEFORE_2_2]: + Change type to 'scm_t_port_type *'. + (natural_buffer_size) [!USING_GUILE_BEFORE_2_2]: New variable. + (ioscm_open_port) [USING_GUILE_BEFORE_2_2]: Add 'stream' + parameter and honor it. Update callers. + (ioscm_open_port) [!USING_GUILE_BEFORE_2_2]: New function. + (ioscm_read_from_port, ioscm_write) [!USING_GUILE_BEFORE_2_2]: New + functions. + (ioscm_fill_input, ioscm_input_waiting, ioscm_flush): Wrap in #if + USING_GUILE_BEFORE_2_2. + (ioscm_init_gdb_stdio_port) [!USING_GUILE_BEFORE_2_2]: Use + 'ioscm_read_from_port'. Call 'scm_set_port_read_wait_fd'. + (ioscm_init_stdio_buffers) [!USING_GUILE_BEFORE_2_2]: New function. + (gdbscm_stdio_port_p) [!USING_GUILE_BEFORE_2_2]: Use 'SCM_PORTP' + and 'SCM_PORT_TYPE'. + (gdbscm_memory_port_end_input, gdbscm_memory_port_seek) + (ioscm_reinit_memory_port): Wrap in #if USING_GUILE_BEFORE_2_2. + (gdbscm_memory_port_read, gdbscm_memory_port_write) + (gdbscm_memory_port_seek, gdbscm_memory_port_close) + [!USING_GUILE_BEFORE_2_2]: New functions. + (gdbscm_memory_port_print): Remove use of 'SCM_PTOB_NAME'. + (ioscm_init_memory_port_type) [!USING_GUILE_BEFORE_2_2]: Use + 'gdbscm_memory_port_read'. + Wrap 'scm_set_port_end_input', 'scm_set_port_flush', and + 'scm_set_port_free' calls in #if USING_GUILE_BEFORE_2_2. + (gdbscm_get_natural_buffer_sizes) [!USING_GUILE_BEFORE_2_2]: New + function. + (ioscm_init_memory_port): Remove. + (ioscm_init_memory_port_stream): New function + (ioscm_init_memory_port_buffers) [USING_GUILE_BEFORE_2_2]: New + function. + (gdbscm_memory_port_read_buffer_size) [!USING_GUILE_BEFORE_2_2]: + Return scm_from_uint (0). + (gdbscm_set_memory_port_read_buffer_size_x) + [!USING_GUILE_BEFORE_2_2]: Call 'scm_setvbuf'. + (gdbscm_memory_port_write_buffer_size) [!USING_GUILE_BEFORE_2_2]: + Return scm_from_uint (0). + (gdbscm_set_memory_port_write_buffer_size_x) + [!USING_GUILE_BEFORE_2_2]: Call 'scm_setvbuf'. + * configure.ac (try_guile_versions): Add "guile-2.2". + * configure: Regenerate. + * NEWS: Add entry. -2019-10-02 Andrew Burgess +2020-07-18 Tom Tromey - * dwarf2read.c (struct type_unit_group) : Convert to - std::vector. - (build_type_psymtabs_reader): Update for std::vector. - (build_type_psymtab_dependencies): Likewise. - * dwarf2read.h: Remove use of DEF_VEC_P. - (typedef sig_type_ptr): Delete. - -2019-10-02 Andrew Burgess - - * btrace.c (btrace_maint_clear): Update to handle change from VEC - to std::vector. - (btrace_maint_decode_pt): Likewise, and move allocation of the - vector outside of the loop. - (btrace_maint_update_packets): Update to handle change from VEC to - std::vector. - (btrace_maint_print_packets): Likewise. - (maint_info_btrace_cmd): Likewise. - * btrace.h: Remove use of DEF_VEC_O. - (typedef btrace_pt_packet_s): Delete. - (struct btrace_maint_info) : Change fromm VEC to - std::vector. - * gdbsupport/btrace-common.h: Remove 'vec.h' include. - -2019-10-02 Andrew Burgess - - * btrace.c (btrace_compute_ftrace_bts): Update for std::vector, - make accesses into the vector constant references. - (btrace_add_pc): Update for std::vector. - (btrace_stitch_bts): Likewise. - (parse_xml_btrace_block): Likewise. - (btrace_maint_update_packets): Likewise. - (btrace_maint_print_packets): Likewise. - (maint_info_btrace_cmd): Likewise. - * gdbsupport/btrace-common.c (btrace_data::fini): Update for - std::vector. - (btrace_data::empty): Likewise. - (btrace_data_append): Likewise. - * gdbsupport/btrace-common.h: Remove use of DEF_VEC_O. - (typedef btrace_block_s): Delete. - (struct btrace_block): Add constructor. - (struct btrace_data_bts) : Change to std::vector. - * nat/linux-btrace.c (perf_event_read_bts): Update for - std::vector. - (linux_read_bts): Likewise. - -2019-10-01 Tom Tromey - - * cli/cli-logging.c (show_logging_filename): Use styled_string. - -2019-10-01 Tom Tromey - - * stack.c (print_frame, info_frame_command_core): Use - styled_string. - * linux-thread-db.c (try_thread_db_load_1) - (try_thread_db_load_from_pdir_1): Use styled_string. - * auto-load.c (file_is_auto_load_safe, execute_script_contents) - (auto_load_section_scripts, info_auto_load_local_gdbinit) - (maybe_print_unsupported_script_warning) - (maybe_print_script_not_found_warning): Use styled_string. - * ada-lang.c (user_select_syms): Use styled_string. - -2019-10-01 Tom Tromey - - * p-lang.c (pascal_printstr): Use metadata style. - * value.c (show_convenience): Use metadata style. - * valprint.c (valprint_check_validity, val_print_optimized_out) - (val_print_not_saved, val_print_unavailable) - (val_print_invalid_address, generic_val_print, val_print) - (value_check_printable, val_print_array_elements): Use metadata - style. - * ui-out.h (class ui_out) : New overload. - : Add style parameter. - * ui-out.c (ui_out::field_fmt): New overload. - * typeprint.c (type_print_unknown_return_type) - (val_print_not_allocated, val_print_not_associated): Use metadata - style. - * tui/tui-out.h (class tui_ui_out) : Add style - parameter. - * tui/tui-out.c (tui_ui_out::do_field_fmt): Update. - * tracepoint.c (tvariables_info_1): Use metadata style. - * stack.c (print_frame_arg, print_frame_info, print_frame) - (info_frame_command_core): Use metadata style. - * skip.c (info_skip_command): Use metadata style. - * rust-lang.c (rust_print_enum): Use metadata style. - * python/py-prettyprint.c (print_stack_unless_memory_error): Use - metadata style. - * python/py-framefilter.c (py_print_single_arg): Use metadata - style. - * printcmd.c (do_one_display, print_variable_and_value): Use - metadata style. - * p-valprint.c (pascal_val_print) - (pascal_object_print_value_fields): Use metadata style. - * p-typeprint.c (pascal_type_print_base): Use metadata style. - * mi/mi-out.h (class mi_ui_out) : Add style - parameter. - * mi/mi-out.c (mi_ui_out::do_field_fmt): Update. - * m2-valprint.c (m2_print_long_set): Use metadata style. - * m2-typeprint.c (m2_print_type): Use metadata style. - * infcmd.c (print_return_value_1): Use metadata style. - * gnu-v3-abi.c (print_one_vtable): Use metadata style. - * f-valprint.c (info_common_command_for_block): Use metadata - style. - * f-typeprint.c (f_type_print_base): Use metadata style. - * expprint.c (print_subexp_standard): Use metadata style. - * cp-valprint.c (cp_print_value_fields): Use metadata style. - * cli/cli-style.h (class cli_style_option): Add constructor. - (metadata_style): Declare. - * cli/cli-style.c (metadata_style): New global. - (_initialize_cli_style): Register metadata style. - * cli-out.h (class cli_ui_out) : Add style - parameter. - * cli-out.c (cli_ui_out::do_field_fmt): Update. - * c-typeprint.c (c_type_print_base_struct_union) - (c_type_print_base_1): Use metadata style. - * breakpoint.c (watchpoint_value_print) - (print_one_breakpoint_location): Use metadata style. - * break-catch-syscall.c (print_one_catch_syscall): Use metadata - style. - * break-catch-sig.c (signal_catchpoint_print_one): Use metadata - style. - * ada-valprint.c (val_print_packed_array_elements, printstr) - (print_field_values, ada_val_print_ref, ada_val_print): Use - metadata style. - * ada-typeprint.c (print_array_type, ada_print_type): Use metadata - style. - * ada-tasks.c (print_ada_task_info, info_task): Use metadata - style. - * ada-lang.c (user_select_syms): Use metadata style. + * linux-nat.c (linux_multi_process): Remove. + (linux_nat_target::supports_multi_process): Return true. -2019-10-01 Tom Tromey +2020-07-17 Andrew Burgess - * cli/cli-cmds.c (pwd_command): Style output. + * arch/riscv.c (riscv_tdesc_cache): Change map type. + (riscv_lookup_target_description): Return pointer out of + unique_ptr. + * target-descriptions.c (allocate_target_description): Add + comment. + (target_desc_deleter::operator()): Likewise. + * target-descriptions.h (struct target_desc_deleter): Moved to + gdbsupport/tdesc.h. + (target_desc_up): Likewise. + +2020-07-17 Tom Tromey + + * linux-nat.c (linux_nat_target::supports_non_stop) + (linux_nat_target::always_non_stop_p): Use "true". + (linux_nat_target::supports_disable_randomization): Use "true" and + "false". -2019-10-01 Pedro Alves - Tom Tromey +2020-07-16 Caroline Tice - * symtab.c (print_symbol_info): Use %ps. - (print_msymbol_info): Use %ps. - * symfile.c (symbol_file_add_with_addrs): Use %ps. - * printcmd.c (print_variable_and_value): Use %ps. - * macrocmd.c (show_pp_source_pos): Use %ps. - * infrun.c (print_exited_reason): Use ui_out::message. - * breakpoint.c (watchpoint_check, print_one_breakpoint_location) - (describe_other_breakpoints): Use ui_out::message and new - formats. - (say_where): Use new formats. - (bkpt_print_it, tracepoint_print_one_detail): Use ui_out::message - and new formats. + * dwarf2/read.c (RNGLIST_HEADER_SIZE32) New constant definition. + (RNGLIST_HEADER_SIZE64): New constant definition. + (struct dwop_section_names): Add rnglists_dwo. + (dwop_section_names): Add .debug_rnglists.dwo, .zdebug_rnglists.dwo. + (struct loclist_header): Rename to 'loclists_rnglists_header'. + (struct dwo_sections): Add rnglists field. + (read_attribut_reprocess): Add tag parameter. + (dwarf2_ranges_read): Add tag parameter & remove forward function decl. + (cu_debug_rnglists_section): New function (decl & definition). + (dwarf2_locate_dwo_sections): Add code to read rnglists_dwo section. + (dwarf2_rnglists_process): Add a dwarf_tag parameter, for the kind of + die whose range is being checked; get rnglist section from + cu_debug_rnglists_section, to get from either objfile or dwo file as + appropriate. Add cases for DW_RLE_base_addressx, + DW_RLE_startx_length, DW_RLE_startx_endx. Also, update to only add + the base address to DW_RLE_offset_pairs (not to all ranges), moving + test inside if-condition and updating complaint message. + (dwarf2_ranges_process): Add dwarf tag parameter and pass it to + dwarf2_rnglists_process. + (dwarf2_ranges_read): Add dwarf tag parameter and pass it to + dwarf2_ranges_process. + (dwarf2_get_pc_bounds): Check for DW_FORM_rnglistx when setting + need_ranges_base and update comment appropriately. Also pass die tag + to dwarf2_ranges_read. + (dwarf2_record_block_ranges): Check for DW_FORM_rnglistx when setting + need_ranges_base and update comment appropriately. Also pass die tag + to dwarf2_ranges_process. + (read_full_die_1): Add code to read DW_AT_rnglists_base and assign to + cu->ranges_base. Also pass die tag to read_attribute_reprocess. + (partial_die_info::read): Check for DW_FORM_rnglistx when setting + need_ranges_base and update comment appropriately. Also pass die tag + to read_attribute_reprocess and dwarf2_ranges_read. + (read_loclist_header): Rename function to read_loclists_rnglists_header, + and update function comment appropriately. + (read_loclist_index): Call read_loclists_rnglists_header instead of + read_loclist_header. + (read_rnglist_index): New function. + (read_attribute_reprocess): Add tag parameter. Add code for + DW_FORM_rnglistx, passing tag to read_rnglist_index. + (read_attribute_value): Mark DW_FORM_rnglistx with need_reprocess. + +2020-07-15 Andrew Burgess + + * f-typeprint.c (f_type_print_base): Allow for dynamic types not + being resolved. -2019-10-01 Pedro Alves - Tom Tromey +2020-07-14 Andrew Burgess - * unittests/format_pieces-selftests.c: Add gdb_format parameter. - (test_gdb_formats): New function. - (run_tests): Call it. - (test_format_specifier): Update. - * utils.h (fputs_filtered): Update comment. - (vfprintf_styled, vfprintf_styled_no_gdbfmt) - (fputs_styled_unfiltered): Declare. - * utils.c (fputs_styled_unfiltered): New function. - (vfprintf_maybe_filtered): Add gdbfmt parameter. - (vfprintf_filtered): Update. - (vfprintf_unfiltered, vprintf_filtered): Update. - (vfprintf_styled, vfprintf_styled_no_gdbfmt): New functions. - * ui-out.h (enum ui_out_flag) : New constants. - (enum class field_kind): New. - (struct base_field_s, struct signed_field_s): New. - (signed_field): New function. - (struct string_field_s): New. - (string_field): New function. - (struct styled_string_s): New. - (styled_string): New function. - (class ui_out) : Add comment. - : New methods. - : Add style parameter. - * ui-out.c (ui_out::call_do_message, ui_out::vmessage): New - methods. - (ui_out::message): Rewrite. - * mi/mi-out.h (class mi_ui_out) : Add style - parameter. - * mi/mi-out.c (mi_ui_out::do_message): Add style parameter. - * gdbsupport/format.h (class format_pieces) : Add - gdb_extensions parameter. - (class format_piece): Add parameter to constructor. - (n_int_args): New field. - * gdbsupport/format.c (format_pieces::format_pieces): Add - gdb_extensions parameter. Handle '*'. - * cli-out.h (class cli_ui_out) : Add style parameter. - * cli-out.c (cli_ui_out::do_message): Add style parameter. Call - vfprintf_styled_no_gdbfmt. - (cli_ui_out::do_field_string, cli_ui_out::do_spaces) - (cli_ui_out::do_text, cli_ui_out::field_separator): Allow - unfiltered output. - * ui-style.h (struct ui_file_style) : New method. - -2019-10-01 Tom Tromey - - * unittests/format_pieces-selftests.c: Update. Add final format. - * gdbsupport/format.c (format_pieces::format_pieces): Don't add - empty literal pieces. - -2019-10-01 Tom Tromey - - * ui-out.h (enum class ui_out_style_kind): Remove. - (class ui_out) : - Change type of "style". - * ui-out.c (ui_out::field_core_addr, ui_out::field_stream) - (ui_out::field_string): Update. - * tui/tui-out.h (class tui_ui_out) : Change type - of "style". - * tui/tui-out.c (tui_ui_out::do_field_string): Update. - * tracepoint.c (print_one_static_tracepoint_marker): Update. - * stack.c (print_frame_arg, print_frame_info, print_frame): - Update. - * source.c (print_source_lines_base): Update. - * solib.c (info_sharedlibrary_command): Update. - * skip.c (info_skip_command): Update. - * record-btrace.c (btrace_call_history_src_line) - (btrace_call_history): Update. - * python/py-framefilter.c (py_print_frame): Update. - * mi/mi-out.h (class mi_ui_out) : Change type of - "style". - * mi/mi-out.c (mi_ui_out::do_table_header) - (mi_ui_out::do_field_signed, mi_ui_out::do_field_unsigned) - (mi_ui_out::do_field_string): Update. - * disasm.c (gdb_pretty_print_disassembler::pretty_print_insn): - Update. - * cli-out.h (class cli_ui_out) : Change type of - "style". - * cli-out.c (cli_ui_out::do_table_header) - (cli_ui_out::do_field_signed, cli_ui_out::do_field_unsigned) - (cli_ui_out::do_field_skip, cli_ui_out::do_field_string) - (cli_ui_out::do_field_fmt): Update. - * breakpoint.c (print_breakpoint_location): Update. - (update_static_tracepoint): Update. - -2019-10-01 Philippe Waroquiers - - * main.c (relocate_gdbinit_path_maybe_in_datadir): Remove std::string - conversion of gdb_datadir. - (captured_main_1): Remove xstrdup when assigning to gdb_datadir, - remove not needed c_str (). + * arch-utils.c (show_architecture): Update formatting of messages. -2019-09-30 Ali Tamur +2020-07-12 Simon Marchi - * dwarf2read.c (skip_one_die): Handle DW_FORM_strx forms. - (dwarf2_string_attr): Likewise. + * gdbtypes.h (struct type) : Handle array and string + types. + * ada-lang.c (assign_aggregate): Use type::bounds on + array/string type. + * c-typeprint.c (c_type_print_varspec_suffix): Likewise. + * c-varobj.c (c_number_of_children): Likewise. + (c_describe_child): Likewise. + * eval.c (evaluate_subexp_for_sizeof): Likewise. + * f-typeprint.c (f_type_print_varspec_suffix): Likewise. + (f_type_print_base): Likewise. + * f-valprint.c (f77_array_offset_tbl): Likewise. + (f77_get_upperbound): Likewise. + (f77_print_array_1): Likewise. + * guile/scm-type.c (gdbscm_type_range): Likewise. + * m2-typeprint.c (m2_array): Likewise. + (m2_is_long_set_of_type): Likewise. + * m2-valprint.c (get_long_set_bounds): Likewise. + * p-typeprint.c (pascal_type_print_varspec_prefix): Likewise. + * python/py-type.c (typy_range): Likewise. + * rust-lang.c (rust_internal_print_type): Likewise. + * type-stack.c (type_stack::follow_types): Likewise. + * valarith.c (value_subscripted_rvalue): Likewise. + * valops.c (value_cast): Likewise. -2019-09-30 Ali Tamur +2020-07-12 Simon Marchi - * dwarf2read.c (process_full_comp_unit): Remove whitespace at the EOL. - (process_full_type_unit): Likewise. - (dump_die_shallow): Likewise. - (cu_debug_loc_section): Likewise. + * gdbtypes.c (TYPE_ARRAY_BIT_STRIDE): Remove. Update all + callers to use the equivalent accessor methods. -2019-09-28 Christian Biesinger +2020-07-12 Simon Marchi - * minsyms.c (compare_minimal_symbols): Rename to... - (minimal_symbol_is_less_than): ...this, and adjust to STL - conventions (return bool, take arguments as references) - (minimal_symbol_reader::install): Call std::sort instead - of qsort. - -2019-09-29 Christian Biesinger - - * minsyms.h (msymbol_hash): Document that this is a case-insensitive - hash and why. - * objfiles.h (struct objfile_per_bfd_storage) : Improve comments. - -2019-09-30 Simon Marchi - - * psymtab.c (add_psymbol_to_list): Move comment to psympriv.h. - * psympriv.h (add_psymbol_to_list): Move comment here and update - it. - -2019-09-29 Tom de Vries - - * contrib/cc-with-tweaks.sh (get_tmpdir): New function. - Use $tmpdir/$(basename "$output_file").dwz instead of - "${output_file}.dwz". - -2019-09-28 Simon Marchi - - PR gdb/25045 - * hppa-linux-nat.c: Include gdbarch.h. - -2019-09-26 Christian Biesinger - - * blockframe.c (find_pc_partial_function): Change return type to bool. - * elfread.c (elf_gnu_ifunc_resolve_name): Likewise. - * minsyms.c (in_gnu_ifunc_stub): Likewise. - (stub_gnu_ifunc_resolve_name): Likewise. - * symtab.c (compare_filenames_for_search): Likewise. - (compare_glob_filenames_for_search): Likewise. - (matching_obj_sections): Likewise. - (symbol_matches_domain): Likewise. - (find_line_symtab): Change out param EXACT_MATCH to bool *. - (find_line_pc): Change return type to bool. - (find_line_pc_range): Likewise. - (producer_is_realview): Likewise. - * symtab.h (symbol_matches_domain): Likewise. - (find_pc_partial_function): Likewise. - (find_pc_line_pc_range): Likewise. - (in_gnu_ifunc_stub): Likewise. - (struct gnu_ifunc_fns) : Likewise. - (find_line_pc): Likewise. - (find_line_pc_range): Likewise. - (matching_obj_sections): Likewise. - (find_line_symtab): Change out parameter to bool. - (producer_is_realview): Change return type to bool. - (compare_filenames_for_search): Likewise. - (compare_glob_filenames_for_search): Likewise. - -2019-09-26 Tom Tromey - - * Makefile.in (COMMON_SFILES): Remove gdb_usleep.c. - (HFILES_NO_SRCDIR): Remove gdb_usleep.h. - * gdb_usleep.h: Remove. - * gdb_usleep.c: Remove. - * utils.c: Don't include gdb_usleep.h. - -2019-09-26 Tom Tromey - - * python/py-type.c (type_to_type_object): Call check_typedef - for stub types. - -2019-09-26 Tom Tromey - - * utils.h (initialize_utils): Don't declare. - * top.c (gdb_init): Don't call initialize_utils. - * utils.c (initialize_utils): Remove. Move contents... - (_initialize_utils): ... here. - -2019-09-25 Tom Tromey - - * python/py-objfile.c (objfpy_get_build_id): Use bin2hex. - * utils.h (make_hex_string): Don't declare. - * utils.c (make_hex_string): Remove. - -2019-09-24 Tom de Vries - - PR gdb/23815 - * amd64-linux-nat.c (amd64_linux_nat_target::fetch_registers): - Initialize xstateregs before ptrace PTRACE_GETREGSET call. - -2019-09-23 Dimitar Dimitrov - - * NEWS: Mention new simulator port for PRU. - -2019-09-23 Christian Biesinger - - * ada-exp.y (write_object_remaining): Update. - * ada-lang.c (ada_decode): Return a std::string instead of a char* - and eliminate the static buffer. - (ada_decode_symbol): Update. - (ada_la_decode): Update. - (ada_sniff_from_mangled_name): Update. - (is_valid_name_for_wild_match): Update. - (ada_lookup_name_info::matches): Update and simplify. - (name_matches_regex): Update. - (ada_add_global_exceptions): Update. - * ada-lang.h (ada_decode): Update signature. - * ada-varobj.c (ada_varobj_describe_simple_array_child): Update. - * dwarf-index-write.c (debug_names::insert): Update. - -2019-09-21 Simon Marchi - - * solib-svr4.c (svr4_iterate_over_objfiles_in_search_order): Fix - formatting. - -2019-09-21 Simon Marchi - - * breakpoint.h (bp_location) : - Change "nonzero" to "true" in documentation. - -2019-09-20 Christian Biesinger - - * solib-darwin.c (darwin_lookup_lib_symbol): Remove. - (_initialize_darwin_solib): Don't set - darwin_so_ops.lookup_lib_global_symbol. - * solib-svr4.c (set_solib_svr4_fetch_link_map_offsets): Call - set_gdbarch_iterate_over_objfiles_in_search_order. - (elf_lookup_lib_symbol): Rename to... - (svr4_iterate_over_objfiles_in_search_order): this, and update - to iterate semantics. - (_initialize_svr4_solib): Don't set lookup_lib_global_symbol. - * solib.c (solib_global_lookup): Remove. - * solist.h (struct target_so_ops): Remove lookup_lib_global_symbol. - (solib_global_lookup): Remove. - * symtab.c (lookup_global_or_static_symbol): Remove call to - solib_global_lookup. - -2019-09-20 Joel Brobecker - - * NEWS: Move entries about default MI version now being - version 3, and about the GDB/MI fix for multi-location - breakpoints to the "since GDB 8.3" section. - -2019-09-20 Joel Brobecker - - GDB 8.3.1 released. - -2019-09-20 Ulrich Weigand - - * NEWS: Mention that Cell/B.E. debugging support was removed. - * MAINTAINERS: Remove spu target. - - * config/djgpp/fnchange.lst: Remove entries for removed files. - - * Makefile.in (ALL_TARGET_OBS): Remove solib-spu.o, - spu-multiarch.o, and spu-tdep.o. - (HFILES_NO_SRCDIR): Remove solib-spu.h and spu-tdep.h. - (ALLDEPFILES): Remove solib-spu.c, spu-linux-nat.c, - spu-multiarch.c, and spu-tdep.c. - * spu-linux-nat.c: Remove file. - * spu-multiarch.c: Remove file. - * spu-tdep.c: Remove file. - * spu-tdep.h: Remove file. - * solib-spu.c: Remove file. - * solib-spu.h: Remove file. - - * configure.host (powerpc64*-*-linux*): Remove Cell/B.E. support. - * configure.nat (spu-linux): Remove. - * configure.tgt (powerpc*-*-linux*): Remove solib-spu.o and - solib-multiarch.o from gdb_target_obs. - (spu*-*-*): Remove. - - * arch/ppc-linux-common.h (struct ppc_linux_features): Remove "cell" - feature flag. - (ppc_linux_no_features): Update. - * arch/ppc-linux-common.c (ppc_linux_match_description): Remove - Cell/B.E. support. - * arch/ppc-linux-tdesc.h (tdesc_powerpc_cell32l): Remove declaration. - (tdesc_powerpc_cell64l): Likewise. - * nat/ppc-linux.h (PPC_FEATURE_CELL): Remove. - * ppc-linux-nat.c (ppc_linux_nat_target::read_description): Remove - Cell/B.E. support. - * ppc-linux-tdep.h: Do not include "solib-spu.h" or "spu-tdep.h". - Do not include "features/rs6000/powerpc-cell32l.c" or - "features/rs6000/powerpc-cell64l.c". - (ppc_linux_spu_section): Remove. - (ppc_linux_core_read_description): Remove Cell/B.E. support. - (spe_context_objfile, spe_context_lm_addr, spe_context_offset, - spe_context_cache_ptid, spe_context_cache_ptid): Remove. - (ppc_linux_spe_context_lookup): Remove. - (ppc_linux_spe_context_inferior_created): Remove. - (ppc_linux_spe_context_solib_loaded): Remove. - (ppc_linux_spe_context_solib_unloaded): Remove. - (ppc_linux_spe_context): Remove. - (struct ppu2spu_cache): Remove. - (ppu2spu_prev_arch, ppu2spu_this_id, ppu2spu_prev_register): Remove. - (struct ppu2spu_data): Remove. - (ppu2spu_unwind_register, ppu2spu_sniffer, ppu2spu_dealloc_cache, - ppu2spu_unwind): Remove. - (ppc_linux_init_abi): Remove Cell/B.E. support. - * rs6000-tdep.h (rs6000_gdbarch_init): Remove Cell/B.E. support. - - * features/Makefile (rs6000/powerpc-cell32l-expedite): Remove. - (rs6000/powerpc-cell64l-expedite): Likewise - (WHICH): Remove rs6000/powerpc-cell32l and rs6000/powerpc-cell64l. - (XMLTOC): Remove rs6000/powerpc-cell32l.xml and - rs6000/powerpc-cell64l.xml. - * features/rs6000/powerpc-cell32l.xml: Remove. - * features/rs6000/powerpc-cell64l.xml: Likewise. - * features/rs6000/powerpc-cell32l.c: Remove generated file. - * features/rs6000/powerpc-cell64l.c: Likewise. - * regformats/rs6000/powerpc-cell32l.dat: Remove generated file. - * regformats/rs6000/powerpc-cell64l.dat: Likewise. - * regformats/reg-spu.dat: Remove. - - * target.h (enum target_object): Remove TARGET_OBJECT_SPU. - * corelow.c (struct spuid_list): Remove. - (add_to_spuid_list): Remove. - (core_target::xfer_partial): Remove support for TARGET_OBJECT_SPU. - * remote.c (PACKET_qXfer_spu_read, PACKET_qXfer_spu_write): Remove. - (remote_protocol_features): Remove associated entries. - (_initialize_remote): No longer initialize them. - (remote_target::xfer_partial): Remove support for TARGET_OBJECT_SPU. - * linux-nat.c (SPUFS_MAGIC): Remove. - (linux_proc_xfer_spu): Remove. - (spu_enumerate_spu_ids): Remove. - (linux_nat_target::xfer_partial): Remove support for TARGET_OBJECT_SPU. - * linux-tdep.c (-linux_spu_make_corefile_notes): Remove. - (linux_make_corefile_notes): No longer call it. - - * regcache.c (cooked_read_test): Remove bfd_arch_spu special case. - (cooked_write_test): Likewise. - -2019-09-20 Tom Tromey - - * NEWS: Mention case-sensitivity of TUI commands. - * tui/tui-win.c (tui_set_focus_command): Now case-sensitive. - (tui_set_win_height_command, parse_scrolling_args): Likewise. - * tui/tui-layout.c (tui_layout_command): Now case-sensitive. - -2019-09-20 Tom Tromey - - * tui/tui-source.c (tui_source_window::set_contents): Use - make_unique_xstrdup. - * tui/tui-disasm.c (tui_disasm_window::set_contents): Use - make_unique_xstrdup. - -2019-09-20 Tom Tromey - - * tui/tui-data.c: Remove separator comments. - * tui/tui-layout.c: Remove separator comments. - * tui/tui-win.c: Remove separator comments. - * tui/tui-wingeneral.c: Remove separator comments. - -2019-09-20 Tom Tromey + * gdbtypes.h (struct range_bounds) : New method. + (struct type) : New method. + (TYPE_BIT_STRIDE): Remove. + * gdbtypes.c (update_static_array_size): Use type::bit_stride. - * tui/tui.h (strcat_to_buf): Don't declare. - * tui/tui.c (strcat_to_buf): Remove. +2020-07-12 Simon Marchi -2019-09-20 Tom Tromey + * gdbtypes.h (TYPE_ARRAY_LOWER_BOUND_VALUE, + TYPE_ARRAY_UPPER_BOUND_VALUE): Remove. Update all + callers to use the equivalent accessor methods instead. - * tui/tui-source.h (struct tui_source_window) : Rename - from "fullname". - * tui/tui-source.c (tui_source_window::set_contents) - (tui_source_window::location_matches_p) - (tui_source_window::maybe_update): Update. +2020-07-12 Simon Marchi -2019-09-20 Tom Tromey + * gdbtypes.h (TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED, + TYPE_ARRAY_LOWER_BOUND_IS_UNDEFINED): Remove. Update all + callers to use the equivalent accessor methods instead. - * tui/tui-regs.h (struct tui_data_window) : - Update. - : Add "m_" - prefix. - * tui/tui-regs.c (tui_data_window::last_regs_line_no) - (tui_data_window::line_from_reg_element_no) - (tui_data_window::first_reg_element_no_inline) - (tui_data_window::show_registers) - (tui_data_window::show_register_group) - (tui_data_window::display_registers_from) - (tui_data_window::display_registers_from_line) - (tui_data_window::first_data_item_displayed) - (tui_data_window::delete_data_content_windows) - (tui_data_window::erase_data_content) - (tui_data_window::do_scroll_vertical) - (tui_data_window::refresh_window) - (tui_data_window::check_register_values): Update. +2020-07-12 Simon Marchi -2019-09-20 Tom Tromey + * gdbtypes.h (TYPE_LOW_BOUND_KIND, + TYPE_HIGH_BOUND_KIND): Remove. Update all callers + to use dynamic_prop::kind. - * tui/tui-stack.h (MAX_LOCATOR_ELEMENT_LEN): Remove define. - (struct tui_locator_window) : Now - std::string. - * tui/tui-stack.c (tui_locator_window::make_status_line) - (tui_locator_window::set_locator_fullname) - (tui_locator_window::set_locator_info): Update. - * tui/tui-source.c (tui_source_window::set_contents) - (tui_source_window::showing_source_p): Update. +2020-07-12 Simon Marchi -2019-09-20 Tom Tromey + * gdbtypes.h (TYPE_LOW_BOUND_UNDEFINED, + TYPE_HIGH_BOUND_UNDEFINED): Remove. Update all callers + to get the bound property's kind and check against + PROP_UNDEFINED. - * tui/tui-stack.c (tui_locator_window::set_locator_fullname): - Don't call tui_locator_win_info_ptr. +2020-07-12 Simon Marchi -2019-09-20 Tom Tromey + * gdbtypes.h (TYPE_LOW_BOUND, TYPE_HIGH_BOUND): Remove. Update + all callers to use type::range_bounds followed by + dynamic_prop::{low,high}. - * tui/tui-win.c (tui_resize_all): Don't call refresh. +2020-07-12 Simon Marchi -2019-09-20 Tom Tromey + * gdbtypes.h (struct dynamic_prop) : New methods. + : Rename to... + : ... this. Update all users to use the new methods + instead. + : Rename to... + : ... this. Update all users to use the new methods + instead. - * tui/tui-win.c (tui_resize_all, tui_adjust_win_heights): Use 1 as - height for locator. - * tui/tui-stack.c (tui_locator_window::rerender): Call scrollok. - * tui/tui-layout.c (show_source_disasm_command, show_data) - (show_source_or_disasm_and_command): Use 1 as height for locator. +2020-07-12 Simon Marchi -2019-09-20 Tom Tromey + * gdbtypes.c (get_discrete_bounds): Return failure if + the range type's bounds are not both defined and constant + values. + (get_array_bounds): Update comment. Remove undefined bound check. - * tui/tui.c (tui_enable): Update. - * tui/tui-win.c (tui_sigwinch_handler, tui_async_resize_screen): - Update. - * tui/tui-data.h (tui_win_resized, tui_set_win_resized_to): - Update. - * tui/tui-data.c (win_resized): Now bool. - (tui_win_resized): Return bool. - (tui_set_win_resized_to): Accept a bool. +2020-07-12 Simon Marchi -2019-09-20 Tom Tromey + * gdbtypes.h (TYPE_RANGE_DATA): Remove. Update callers to use + the type::bounds method directly. - * tui/tui-regs.h (struct tui_data_window) : - Change type of "refresh_values_only". - * tui/tui-regs.c (tui_data_window::show_register_group): Change - type of "refresh_values_only". +2020-07-12 Simon Marchi -2019-09-20 Tom Tromey + * gdbtypes.h (struct type) : New methods. + (TYPE_RANGE_DATA): Use type::bounds. Change all uses that + are used to set the range type's bounds to use set_bounds. - * tui/tui-disasm.c (struct tui_asm_line) : Now - std::string. - (tui_disassemble): Add "pos" parameter. - (tui_disasm_window::set_contents): Simplify. +2020-07-11 Philippe Waroquiers -2019-09-20 Tom Tromey + * exec.c (_initialize_exec): Update exec-file-mismatch help. - * tui/tui-winsource.h (struct tui_source_window_base) - : Now private. - * tui/tui-winsource.c - (tui_source_window_base::show_source_content): Don't handle empty - content case. +2020-07-10 Pedro Alves -2019-09-20 Tom Tromey + * gdbthread.h (inferior_ref): Define. + (scoped_restore_current_thread) : Now a thread_info_ref. + (scoped_restore_current_thread) : Now an inferior_ref. + * thread.c + (scoped_restore_current_thread::restore): + Adjust to gdb::ref_ptr. + (scoped_restore_current_thread::~scoped_restore_current_thread): + Remove manual decref handling. + (scoped_restore_current_thread::scoped_restore_current_thread): + Adjust to use + inferior_ref::new_reference/thread_info_ref::new_reference. + Incref the thread before calling get_frame_id instead of after. + Let TARGET_CLOSE_ERROR propagate. - * tui/tui-layout.c (show_source_disasm_command) - (show_source_or_disasm_and_command): Don't call - show_source_content. +2020-07-10 Pedro Alves -2019-09-20 Tom Tromey + * frame-tailcall.c (dwarf2_tailcall_sniffer_first): Only swallow + NO_ENTRY_VALUE_ERROR / MEMORY_ERROR / OPTIMIZED_OUT_ERROR / + NOT_AVAILABLE_ERROR. + * value.c (value_optimized_out): Only swallow MEMORY_ERROR / + OPTIMIZED_OUT_ERROR / NOT_AVAILABLE_ERROR. - * tui/tui-stack.h (struct tui_locator_window) : - Declare. - * tui/tui-stack.c (tui_locator_window::make_status_line): Rename - from tui_make_status_line. - (tui_locator_window::rerender): Update. +2020-07-10 Simon Marchi + Pedro Alves -2019-09-20 Tom Tromey + PR gdb/26199 + * infrun.c (threads_are_resumed_pending_p): Delete. + (do_target_wait): Remove threads_are_executing and + threads_are_resumed_pending_p checks from the inferior_matches + lambda. Update comments. - * tui/tui-stack.c (tui_make_status_line): Return std::string. - (tui_locator_window::rerender): Update. +2020-07-10 Pedro Alves -2019-09-20 Tom Tromey + PR gdb/26199 + * infrun.c (handle_no_resumed): Transfer terminal to inferior with + executing threads. - * tui/tui-winsource.h (struct tui_source_window_base) - <~tui_source_window_base>: Don't declare. - : Remove. - * tui/tui-winsource.c (~tui_source_window_base): Remove. - * tui/tui-source.h (struct tui_source_window) : New - member. - * tui/tui-source.c (tui_source_window::set_contents): Update. - (tui_source_window::location_matches_p) - (tui_source_window::maybe_update): Update. +2020-07-10 Pedro Alves -2019-09-20 Tom Tromey + PR gdb/26199 + * infrun.c (handle_no_resumed): Handle multiple targets. - * tui/tui-winsource.h (~tui_source_element): Remove. - (tui_source_element): Update. - (struct tui_source_element) : Now a unique_xmalloc_ptr. - * tui/tui-winsource.c (tui_show_source_line): Update. - * tui/tui-source.c (tui_source_window::set_contents): Update. - * tui/tui-disasm.c (tui_disasm_window::set_contents): Update. +2020-07-10 Pedro Alves -2019-09-20 Tom Tromey + PR gdb/26199 + * infrun.c (prepare_to_wait): Check target_can_async_p instead of + target_is_async_p. - * tui/tui-data.h (tui_clear_source_windows_detail): Don't - declare. - * tui/tui-layout.c (tui_add_win_to_layout): Don't call - tui_clear_source_windows_detail. - * tui/tui-winsource.h (struct tui_source_window_base) - : Don't declare. - * tui/tui-winsource.c (tui_source_window_base::clear_detail): - Remove. - * tui/tui-data.c (tui_clear_source_windows_detail): Remove. +2020-07-10 Pedro Alves -2019-09-20 Tom Tromey + PR gdb/26199 + * target.c (target_pass_ctrlc): Look at the inferior's non-exited + threads, not all threads. - PR ada/24919: - * block.c (contained_in): Fix final return value. +2020-07-10 Pedro Alves -2019-09-20 Alan Modra + PR gdb/26199 + * remote.c (remote_target::open_1): Pass remote target pointer as + data to create_async_event_handler. + (remote_async_inferior_event_handler): Mark async event handler + before returning if the remote target still has either pending + events or unacknowledged notifications. - * gdb_bfd.c (gdb_bfd_ref, gdb_bfd_unref): Use bfd_set_usrdata. - * dwarf2read.c (dwarf2_read_gdb_index, dwarf2_read_debug_names), - (read_indirect_string_from_dwz): Use bfd accessor. - * dwarf2read.h (struct dwz_file ): Likewise. - * machoread.c (macho_symfile_read_all_oso): Likewise. - * solib.c (solib_bfd_open): Likewise. - -2019-09-19 Christian Biesinger - - * eval.c: Move declaration of overload_resolution to... - * value.h: ...here. - -2019-09-19 Christian Biesinger - - * arm-linux-nat.c: Remove extern declaration for arm_apcs_32. - * arm-linux-tdep.c: Likewise. - * arm-nbsd-nat.c: Likewise. - * arm-tdep.h: Declare arm_apcs_32. - * arm-tdep.c: Move documentation for arm_apcs_32 to arm-tdep.h. - -2019-09-19 Christian Biesinger - - * dwarf2loc.c: Remove extern declaration of dwarf_always_disassemble. - * dwarf2read.h: Declare dwarf_always_disassemble. - -2019-09-19 Tom de Vries - - PR gdb/25009 - * source-cache.c (source_cache::ensure): Catch exception thrown during - construction of the highlighter. - -2019-09-18 Alan Modra - - * aarch64-linux-tdep.c, * arm-tdep.c, * auto-load.c, - * coff-pe-read.c, * coffread.c, * corelow.c, * dbxread.c, - * dicos-tdep.c, * dwarf2-frame.c, * dwarf2read.c, * elfread.c, - * exec.c, * fbsd-tdep.c, * gcore.c, * gdb_bfd.c, * gdb_bfd.h, - * hppa-tdep.c, * i386-cygwin-tdep.c, * i386-fbsd-tdep.c, - * i386-linux-tdep.c, * jit.c, * linux-tdep.c, * machoread.c, - * maint.c, * mdebugread.c, * minidebug.c, * mips-linux-tdep.c, - * mips-sde-tdep.c, * mips-tdep.c, * mipsread.c, * nto-tdep.c, - * objfiles.c, * objfiles.h, * osabi.c, * ppc-linux-tdep.c, - * ppc64-tdep.c, * record-btrace.c, * record-full.c, * remote.c, - * rs6000-aix-tdep.c, * rs6000-tdep.c, * s390-linux-tdep.c, - * s390-tdep.c, * solib-aix.c, * solib-dsbt.c, * solib-frv.c, - * solib-spu.c, * solib-svr4.c, * solib-target.c, - * spu-linux-nat.c, * spu-tdep.c, * symfile-mem.c, * symfile.c, - * symmisc.c, * symtab.c, * target.c, * windows-nat.c, - * xcoffread.c, * cli/cli-dump.c, * compile/compile-object-load.c, - * mi/mi-interp.c: Update throughout for bfd section macro and - function changes. - * gcore (gcore_create_callback): Use bfd_set_section_lma. - * spu-tdep.c (spu_overlay_new_objfile): Likewise. +2020-07-10 John Baldwin -2019-09-18 Tom Tromey + * fbsd-nat.h (fbsd_nat_target::supports_multi_process): New + declaration. + * fbsd-nat.c (fbsd_nat_target::supports_multi_process): New + function. - * NEWS: Add entry. - * tui/tui.c (tui_initialize_readline): Set name of keymap. Do not - call rl_initialize. - (tui_enable): Do not call rl_initialize. - -2019-09-18 Christian Groessler - - * alpha-linux-nat.c: Include gdbarch.h. - -2019-09-18 Simon Marchi - - * ui-file.c: Include cli/cli-style.h. - (term_cli_styling): Remove cli_styling declaration. - -2019-09-18 Alan Modra - - * arm-tdep.c (arm_record_special_symbol): Update bfd_get_section - to bfd_asymbol_section. - -2019-09-18 Alan Modra - - * amd64-dicos-tdep.c (amd64_dicos_osabi_sniffer): Constify target. - * i386-cygwin-tdep.c (i386_cygwin_init_abi): Likewise. - * i386-dicos-tdep.c (i386_dicos_osabi_sniffer): Likewise. - -2019-09-18 Alan Modra - - * solib-spu.c (spu_bfd_open): Use bfd_set_filename. - * spu-linux-nat.c (spu_bfd_open): Likewise. - -2019-09-18 Christian Biesinger - - * dwarf2loc.c: Change extern declaration of dwarf_always_disassemble - to bool to match definition in dwarf2read.c. - -2019-09-17 Christian Biesinger - - * ada-lang.c (ada_ignore_descriptive_types_p): Change to bool. - (print_signatures): Likewise. - (trust_pad_over_xvs): Likewise. - * arch/aarch64-insn.c (aarch64_debug): Likewise. - * arch/aarch64-insn.h (aarch64_debug): Likewise. - * arm-linux-nat.c (arm_apcs_32): Likewise. - * arm-linux-tdep.c (arm_apcs_32): Likewise. - * arm-nbsd-nat.c (arm_apcs_32): Likewise. - * arm-tdep.c (arm_debug): Likewise. - (arm_apcs_32): Likewise. - * auto-load.c (debug_auto_load): Likewise. - (auto_load_gdb_scripts): Likewise. - (global_auto_load): Likewise. - (auto_load_local_gdbinit): Likewise. - (auto_load_local_gdbinit_loaded): Likewise. - * auto-load.h (global_auto_load): Likewise. - (auto_load_local_gdbinit): Likewise. - (auto_load_local_gdbinit_loaded): Likewise. - * breakpoint.c (disconnected_dprintf): Likewise. - (breakpoint_proceeded): Likewise. - (automatic_hardware_breakpoints): Likewise. - (always_inserted_mode): Likewise. - (target_exact_watchpoints): Likewise. - (_initialize_breakpoint): Update. - * breakpoint.h (target_exact_watchpoints): Change to bool. - * btrace.c (maint_btrace_pt_skip_pad): Likewise. - * cli/cli-cmds.c (trace_commands): Likewise. - * cli/cli-cmds.h (trace_commands): Likewise. - * cli/cli-decode.c (add_setshow_boolean_cmd): Change int* argument - to bool*. - * cli/cli-logging.c (logging_overwrite): Change to bool. - (logging_redirect): Likewise. - (debug_redirect): Likewise. - * cli/cli-option.h (option_def) : Change return type to bool*. - (struct boolean_option_def) : Change return type - to bool. - : Update. - (struct flag_option_def): Change default type of Context to bool - from int. - : Change return type of var_address_cb_ to bool*. - * cli/cli-setshow.c (do_set_command): Cast to bool* instead of int*. - (get_setshow_command_value_string): Likewise. - * cli/cli-style.c (cli_styling): Change to bool. - (source_styling): Likewise. - * cli/cli-style.h (source_styling): Likewise. - (cli_styling): Likewise. - * cli/cli-utils.h (struct qcs_flags) : Change - to bool. - * command.h (var_types): Update comment. - (add_setshow_boolean_cmd): Change int* var argument to bool*. - * compile/compile-cplus-types.c (debug_compile_cplus_types): Change to - bool. - (debug_compile_cplus_scopes): Likewise. - * compile/compile-internal.h (compile_debug): Likewise. - * compile/compile.c (compile_debug): Likewise. - (struct compile_options) : Likewise. - * cp-support.c (catch_demangler_crashes): Likewise. - * cris-tdep.c (usr_cmd_cris_version_valid): Likewise. - (usr_cmd_cris_dwarf2_cfi): Likewise. - * csky-tdep.c (csky_debug): Likewise. - * darwin-nat.c (enable_mach_exceptions): Likewise. - * dcache.c (dcache_enabled_p): Likewise. - * defs.h (info_verbose): Likewise. - * demangle.c (demangle): Likewise. - (asm_demangle): Likewise. - * dwarf-index-cache.c (debug_index_cache): Likewise. - * dwarf2-frame.c (dwarf2_frame_unwinders_enabled_p): Likewise. - * dwarf2-frame.h (dwarf2_frame_unwinders_enabled_p): Likewise. - * dwarf2read.c (check_physname): Likewise. - (use_deprecated_index_sections): Likewise. - (dwarf_always_disassemble): Likewise. - * eval.c (overload_resolution): Likewise. - * event-top.c (set_editing_cmd_var): Likewise. - (exec_done_display_p): Likewise. - * event-top.h (set_editing_cmd_var): Likewise. - (exec_done_display_p): Likewise. - * exec.c (write_files): Likewise. - * fbsd-nat.c (debug_fbsd_lwp): Likewise - (debug_fbsd_nat): Likewise. - * frame.h (struct frame_print_options) : - Likewise. - (struct set_backtrace_options) : Likewise. - Likewise. - * gdb-demangle.h (demangle): Likewise. - (asm_demangle): Likewise. - * gdb_bfd.c (bfd_sharing): Likewise. - * gdbcore.h (write_files): Likewise. - * gdbsupport/common-debug.c (show_debug_regs): Likewise. - * gdbsupport/common-debug.h (show_debug_regs): Likewise. - * gdbthread.h (print_thread_events): Likewise. - * gdbtypes.c (opaque_type_resolution): Likewise. - (strict_type_checking): Likewise. - * gnu-nat.c (gnu_debug_flag): Likewise. - * guile/scm-auto-load.c (auto_load_guile_scripts): Likewise. - * guile/scm-param.c (pascm_variable): Add boolval. - (add_setshow_generic): Update. - (pascm_param_value): Update. - (pascm_set_param_value_x): Update. - * hppa-tdep.c (hppa_debug): Change to bool.. - * infcall.c (may_call_functions_p): Likewise. - (coerce_float_to_double_p): Likewise. - (unwind_on_signal_p): Likewise. - (unwind_on_terminating_exception_p): Likewise. - * infcmd.c (startup_with_shell): Likewise. - * inferior.c (print_inferior_events): Likewise. - * inferior.h (startup_with_shell): Likewise. - (print_inferior_events): Likewise. - * infrun.c (step_stop_if_no_debug): Likewise. - (detach_fork): Likewise. - (debug_displaced): Likewise. - (disable_randomization): Likewise. - (non_stop): Likewise. - (non_stop_1): Likewise. - (observer_mode): Likewise. - (observer_mode_1): Likewise. - (set_observer_mode): Update. - (sched_multi): Change to bool. - * infrun.h (debug_displaced): Likewise. - (sched_multi): Likewise. - (step_stop_if_no_debug): Likewise. - (non_stop): Likewise. - (disable_randomization): Likewise. - * linux-tdep.c (use_coredump_filter): Likewise. - (dump_excluded_mappings): Likewise. - * linux-thread-db.c (auto_load_thread_db): Likewise. - (check_thread_db_on_load): Likewise. - * main.c (captured_main_1): Update. - * maint-test-options.c (struct test_options_opts) : Change to bool. - * maint-test-settings.c (maintenance_test_settings_boolean): Likewise. - * maint.c (maintenance_profile_p): Likewise. - (per_command_time): Likewise. - (per_command_space): Likewise. - (per_command_symtab): Likewise. - * memattr.c (inaccessible_by_default): Likewise. - * mi/mi-main.c (mi_async): Likewise. - (mi_async_1): Likewise. - * mips-tdep.c (mips64_transfers_32bit_regs_p): Likewise. - * nat/fork-inferior.h (startup_with_shell): Likewise. - * nat/linux-namespaces.c (debug_linux_namespaces): Likewise. - * nat/linux-namespaces.h (debug_linux_namespaces): Likewise. - * nios2-tdep.c (nios2_debug): Likewise. - * or1k-tdep.c (or1k_debug): Likewise. - * parse.c (parser_debug): Likewise. - * parser-defs.h (parser_debug): Likewise. - * printcmd.c (print_symbol_filename): Likewise. - * proc-api.c (procfs_trace): Likewise. - * python/py-auto-load.c (auto_load_python_scripts): Likewise. - * python/py-param.c (union parmpy_variable): Add "bool boolval" field. - (set_parameter_value): Update. - (add_setshow_generic): Update. - * python/py-value.c (copy_py_bool_obj): Change argument from int* - to bool*. - * python/python.c (gdbpy_parameter_value): Cast to bool* instead of - int*. - * ravenscar-thread.c (ravenscar_task_support): Change to bool. - * record-btrace.c (record_btrace_target::store_registers): Update. - * record-full.c (record_full_memory_query): Change to bool. - (record_full_stop_at_limit): Likewise. - * record-full.h (record_full_memory_query): Likewise. - * remote-notif.c (notif_debug): Likewise. - * remote-notif.h (notif_debug): Likewise. - * remote.c (use_range_stepping): Likewise. - (interrupt_on_connect): Likewise. - (remote_break): Likewise. - * ser-tcp.c (tcp_auto_retry): Likewise. - * ser-unix.c (serial_hwflow): Likewise. - * skip.c (debug_skip): Likewise. - * solib-aix.c (solib_aix_debug): Likewise. - * spu-tdep.c (spu_stop_on_load_p): Likewise. - (spu_auto_flush_cache_p): Likewise. - * stack.c (struct backtrace_cmd_options) : - Likewise. - (struct info_print_options) : Likewise. - * symfile-debug.c (debug_symfile): Likewise. - * symfile.c (auto_solib_add): Likewise. - (separate_debug_file_debug): Likewise. - * symfile.h (auto_solib_add): Likewise. - (separate_debug_file_debug): Likewise. - * symtab.c (basenames_may_differ): Likewise. - (struct filename_partial_match_opts) : Likewise. - (struct info_print_options) : Likewise. - (struct info_types_options) : Likewise. - * symtab.h (demangle): Likewise. - (basenames_may_differ): Likewise. - * target-dcache.c (stack_cache_enabled_1): Likewise. - (code_cache_enabled_1): Likewise. - * target.c (trust_readonly): Likewise. - (may_write_registers): Likewise. - (may_write_memory): Likewise. - (may_insert_breakpoints): Likewise. - (may_insert_tracepoints): Likewise. - (may_insert_fast_tracepoints): Likewise. - (may_stop): Likewise. - (auto_connect_native_target): Likewise. - (target_stop_and_wait): Update. - (target_async_permitted): Change to bool. - (target_async_permitted_1): Likewise. - (may_write_registers_1): Likewise. - (may_write_memory_1): Likewise. - (may_insert_breakpoints_1): Likewise. - (may_insert_tracepoints_1): Likewise. - (may_insert_fast_tracepoints_1): Likewise. - (may_stop_1): Likewise. - * target.h (target_async_permitted): Likewise. - (may_write_registers): Likewise. - (may_write_memory): Likewise. - (may_insert_breakpoints): Likewise. - (may_insert_tracepoints): Likewise. - (may_insert_fast_tracepoints): Likewise. - (may_stop): Likewise. - * thread.c (struct info_threads_opts) : Likewise. - (make_thread_apply_all_options_def_group): Change argument from int* - to bool*. - (thread_apply_all_command): Update. - (print_thread_events): Change to bool. - * top.c (confirm): Likewise. - (command_editing_p): Likewise. - (history_expansion_p): Likewise. - (write_history_p): Likewise. - (info_verbose): Likewise. - * top.h (confirm): Likewise. - (history_expansion_p): Likewise. - * tracepoint.c (disconnected_tracing): Likewise. - (circular_trace_buffer): Likewise. - * typeprint.c (print_methods): Likewise. - (print_typedefs): Likewise. - * utils.c (debug_timestamp): Likewise. - (sevenbit_strings): Likewise. - (pagination_enabled): Likewise. - * utils.h (sevenbit_strings): Likewise. - (pagination_enabled): Likewise. - * valops.c (overload_resolution): Likewise. - * valprint.h (struct value_print_options) : - Likewise. - * windows-nat.c (new_console): Likewise. - (cygwin_exceptions): Likewise. - (new_group): Likewise. - (debug_exec): Likewise. - (debug_events): Likewise. - (debug_memory): Likewise. - (debug_exceptions): Likewise. - (useshell): Likewise. - * windows-tdep.c (maint_display_all_tib): Likewise. - * xml-support.c (debug_xml): Likewise. - -2019-09-17 Mike Gulick +2020-07-09 John Baldwin - * source.c (prepare_path_for_appending): New function. - (openp): Make use of new function. - (find_and_open_source): Search for the compilation directory and - source file as a relative path beneath the directory search path. + * inf-ptrace.c (inf_ptrace_target::wait): Don't compare against + inferior_ptid. -2019-09-17 Andrew Burgess +2020-07-09 John Baldwin - * source-cache.c (source_cache::get_line_charpos): Catch - exceptions and return false, this matches the behaviour documented - in the header file. + * fbsd-tdep.c (fbsd_print_auxv_entry): Handle AT_FREEBSD_ARGC, + AT_FREEBSD_ARGV, AT_FREEBSD_ENVC, AT_FREEBSD_ENVV, + AT_FREEBSD_PS_STRINGS. + +2020-07-08 Hannes Domani + + * auto-load.c (auto_load_objfile_script_1): Convert drive part + of debugfile path on Windows. + +2020-07-08 John Baldwin + + * fbsd-nat.c (fbsd_nat_target::find_memory_regions): Rename 'obfd' + argument to 'data'. + +2020-07-08 Tom Tromey + + * ada-lang.c (ada_exception_message_1): Use read_memory. + +2020-07-06 Andrew Burgess + + PR python/22748 + * dwarf2/frame-tailcall.c (dwarf2_tailcall_sniffer_first): Remove + special handling for inline frames. + * findvar.c (value_of_register_lazy): Skip inline frames when + creating lazy register values. + * frame.c (frame_id_computed_p): Delete definition. + * frame.h (frame_id_computed_p): Delete declaration. + +2020-07-06 Andrew Burgess + + * NEWS: Mention additions to Python API. + * python/py-arch.c (archpy_register_groups): New function. + (arch_object_methods): Add 'register_groups' method. + * python/py-registers.c (reggroup_iterator_object): New struct. + (reggroup_object): New struct. + (gdbpy_new_reggroup): New function. + (gdbpy_reggroup_to_string): New function. + (gdbpy_reggroup_name): New function. + (gdbpy_reggroup_iter): New function. + (gdbpy_reggroup_iter_next): New function. + (gdbpy_new_reggroup_iterator): New function + (gdbpy_initialize_registers): Register new types. + (reggroup_iterator_object_type): Define new Python type. + (gdbpy_reggroup_getset): New static global. + (reggroup_object_type): Define new Python type. + * python/python-internal.h + +2020-07-06 Andrew Burgess + + * Makefile.in (SUBDIR_PYTHON_SRCS): Add py-registers.c + * python/py-arch.c (archpy_registers): New function. + (arch_object_methods): Add 'registers' method. + * python/py-registers.c: New file. + * python/python-internal.h + (gdbpy_new_register_descriptor_iterator): Declare. + (gdbpy_initialize_registers): Declare. + * python/python.c (do_start_initialization): Call + gdbpy_initialize_registers. + * NEWS: Mention additions to the Python API. + +2020-07-06 Andrew Burgess + + * NEWS: Mention new Python API method. + * python/py-unwind.c (pending_framepy_architecture): New function. + (pending_frame_object_methods): Add architecture method. -2019-09-17 Joel Brobecker +2020-07-06 Andrew Burgess - * ada-tasks.c (info_task): Remove quoting of the task's name. + * gdbarch.c: Regenerate. + * gdbarch.h: Regenerate. + * gdbarch.sh (deprecated_set_gdbarch_data): Delete. + (gdbarch_data): Use internal_error for the case where + deprecated_set_gdbarch_data was originally needed. + * ia64-libunwind-tdep.c (libunwind_descr_init): Update parameters, + and use passed in obstack. + (libunwind_frame_set_descr): Should no longer get back NULL from + gdbarch_data. + (_initialize_libunwind_frame): Register as a pre-init gdbarch data + type. + * user-regs.c (user_regs_init): Update parameters, and use passed + in obstack. + (user_reg_add): Should no longer get back NULL from gdbarch_data. + (_initialize_user_regs): Register as a pre-init gdbarch data type. -2019-09-16 Christian Biesinger +2020-07-06 Tom de Vries - * symfile.c (auto_solib_add): Replace comment with a reference - to the header file. + * buildsym.c (buildsym_compunit::end_symtab_with_blockvector): Handle + End-Of-Sequence in lte_is_less_than. + * symtab.c (find_pc_sect_line): Revert change from commit 3d92a3e313 + "gdb: Don't reorder line table entries too much when sorting". -2019-09-14 Christian Biesinger +2020-07-06 Tom de Vries - * NEWS: Mention that gdb can now be compiled with Python 3 - on Windows. + PR tui/26205 + * tui/tui-win.c (tui_partial_win_by_name): Don't test for NULL name. -2019-09-12 Andrew Burgess +2020-07-05 Tom de Vries - * maint.c (maint_print_section_data::maint_print_section_data): - Force use of 'float log10 (float)' by casting the argument to - float. + PR build/26187 + * inferior.h (struct infcall_suspend_state_deleter): If available, use + std::uncaught_exceptions instead of deprecated + std::uncaught_exception. -2019-09-12 Andrew Burgess +2020-07-02 Simon Marchi - * maint.c: Add 'cmath' include. - (struct maint_print_section_data): New structure. - (print_section_index): New function. - (print_bfd_section_info): Add header comment, small whitespace - cleanup, and update to call new print_section_index function. - (print_objfile_section_info): Likewise. - (maint_obj_section_from_bfd_section): New function. - (print_bfd_section_info_maybe_relocated): New function. - (maintenance_info_sections): Add header comment, always use - bfd_map_over_sections instead of ALL_OBJFILE_OSECTIONS. - -2019-09-12 Andrew Burgess - - * psymtab.c (find_pc_sect_psymtab): Move baseaddr local into more - inner scope, add check that the objfile has psymtabs before - checking psymtabs_addrmap. - * psymtab.h (psymtab_storage) : Extend comment. - -2019-09-12 Philippe Waroquiers - - * NEWS: Announce that Ada task names are now shown at more places, - and between quotes (except in info task output). - * gdb/ada-tasks.c (task_to_str): New function. - (display_current_task_id): Call task_to_str. - (task_command_1): Likewise. - (print_ada_task_info): In non-mi mode, Properly align headers and data - when task-id length is > 9 (9 is the default for a 32 bits CORE_ADDR). + * macroexp.h (macro_stringify): Return + gdb::unique_xmalloc_ptr. + * macroexp.c (macro_stringify): Likewise. + * macrotab.c (fixup_definition): Update. -2019-09-12 Rainer Orth +2020-07-02 Simon Marchi - * procfs.c (procfs_target::wait) : Get signal from - prstatus.pr_lwp.pr_info instead of making it up. + * c-exp.y (scan_macro_expansion): Don't free `expansion`. + (lex_one_token): Update. + * macroexp.c (struct macro_buffer) : Return + gdb::unique_xmalloc_ptr. + (macro_stringify): Update. + (macro_expand): Update. + (macro_expand_next): Return gdb::unique_xmalloc_ptr. + * macroexp.h (macro_expand_next): Likewise. + +2020-07-02 Simon Marchi + + * macroexp.h (macro_lookup_ftype): Remove. + (macro_expand, macro_expand_once, macro_expand_next): Remove + lookup function parameters, add scope parameter. + * macroexp.c (scan, substitute_args, expand, maybe_expand, + macro_expand, macro_expand_once, macro_expand_next): Likewise. + * macroscope.h (standard_macro_lookup): Change parameter type + to macro_scope. + * macroscope.c (standard_macro_lookup): Likewise. + * c-exp.y (lex_one_token): Update. + * macrocmd.c (macro_expand_command): Likewise. + (macro_expand_once_command): Likewise. -2019-09-11 Christian Biesinger - - * auto-load.c (auto_load_expand_dir_vars): Update. - * defs.h (gdb_datadir): Change to std::string. - (python_libdir): Likewise. - (relocate_gdb_directory): Change return type to std::string. - * guile/guile.c (gdbscm_data_directory): Update. - (initialize_scheme_side): Update. - * jit.c (jit_reader_dir): Change to std::string. - (jit_reader_load_command): Update. - * main.c (gdb_datadir): Change to std::string. - (python_libdir): Likewise. - (set_gdb_data_directory): Update. - (relocate_path): Change to return std::string. - (relocate_gdb_directory): Change to return std::string. - (relocate_gdbinit_path_maybe_in_datadir): Update. - (captured_main_1): Update. - * python/python.c (do_start_initialization): Update. - * top.c (show_gdb_datadir): Update. - * xml-syscall.c (xml_init_syscalls_info): Update. - (init_syscalls_info): Update. - -2019-09-11 Christian Biesinger - - * main.c (relocate_gdbinit_path_maybe_in_datadir): Factor this code - out of get_init_files. - (get_init_files): Update. - -2019-09-11 Christian Biesinger - - * main.c (get_init_files): Change to use std::string. - (captured_main_1): Update. - (print_gdb_help): Update. +2020-07-02 Simon Marchi -2019-09-11 Ali Tamur + * inf-loop.c (inferior_event_handler): Remove client_data param. + * inf-loop.h (inferior_event_handler): Likewise. + * infcmd.c (step_1): Adjust. + * infrun.c (proceed): Adjust. + (fetch_inferior_event): Remove client_data param. + (infrun_async_inferior_event_handler): Adjust. + * infrun.h (fetch_inferior_event): Remove `void *` param. + * linux-nat.c (handle_target_event): Adjust. + * record-btrace.c (record_btrace_handle_async_inferior_event): + Adjust. + * record-full.c (record_full_async_inferior_event_handler): + Adjust. + * remote.c (remote_async_inferior_event_handler): Adjust. - *gdb/target-float.c (host_float_ops::to_longest): Update - implementation. +2020-07-01 Tom Tromey -2019-09-11 Christian Biesinger + * tui/tui-data.h (struct tui_win_info) : Now pure virtual. + * tui/tui-stack.h (struct tui_locator_window) : New method. - * dbxread.c (read_dbx_symtab): Update. - * dwarf2read.c (load_partial_dies): Update. - * mdebugread.c (parse_partial_symbols): Update. - (handle_psymbol_enumerators): Update. - * psympriv.h (add_psymbol_to_list): Change type of copy_names to bool. - * psymtab.c (add_psymbol_to_bcache): Likewise. - (add_psymbol_to_list): Likewise. - * symtab.c (symbol_set_names): Likewise. - * symtab.h (symbol_set_names): Likewise. - * xcoffread.c (scan_xcoff_symtab): Update. +2020-07-01 Tom Tromey -2019-09-11 Tom Tromey + * tui/tui-wingeneral.c (tui_win_info::refresh_window): Move from + tui_gen_win_info. + (tui_win_info::make_window): Merge with + tui_gen_win_info::make_window. + (tui_win_info::make_visible): Move from tui_gen_win_info. + * tui/tui-win.c (tui_win_info::max_width): Move from + tui_gen_win_info. + * tui/tui-layout.h (class tui_layout_window) : Change + type. + : Likewise. + * tui/tui-layout.c (tui_win_info::resize): Move from + tui_gen_win_info. + (make_standard_window): Change return type. + (get_locator_window, tui_get_window_by_name): Likewise. + (tui_layout_window::apply): Remove a cast. + * tui/tui-data.h (MIN_WIN_HEIGHT): Move earlier. + (struct tui_win_info): Merge with tui_gen_win_info. + (struct tui_gen_win_info): Remove. + +2020-07-01 Tom Tromey + + * tui/tui-stack.h (struct tui_locator_window): Derive from + tui_win_info. + : New methods. + : New method. - * symfile-mem.c (symbol_file_add_from_memory): Use - bfd_set_filename. - * solib-darwin.c (darwin_bfd_open): Use bfd_set_filename. - * solib-aix.c (solib_aix_bfd_open): Use bfd_set_filename. +2020-07-01 Tom Tromey -2019-09-10 Tom Tromey + * tui/tui-stack.h (struct tui_locator_window): Remove body. - * dwarf-index-write.c (write_psymbols): Extend error message. - (debug_names::insert): Add Ada code. - (debug_names::write_psymbols): Remove Ada check. - (debug_names) : New member. - * dwarf2read.c (gdb_index_symbol_name_matcher): Remove. - (gdb_index_symbol_name_matcher::matches): Remove. - (mapped_index_base::find_name_components_bounds): Add "lang" - parameter. - (mapped_index_base::build_name_components): Also split names - according to Ada syntax. - (dw2_expand_symtabs_matching_symbol): Loop over languages. Change - type of "match_callback". - (check_match, check_find_bounds_finds) - (dw2_expand_symtabs_matching): Update. - (dw2_debug_names_iterator): Add new constructor. - (dw2_debug_names_map_matching_symbols): New function. - (dw2_debug_names_expand_symtabs_matching): Update. - (dwarf2_debug_names_functions): Use - dw2_debug_names_map_matching_symbols. +2020-07-01 Tom Tromey -2019-09-10 Tom Tromey + * tui/tui-regs.c (tui_data_window::display_registers_from) + (tui_data_window::display_registers_from) + (tui_data_window::first_data_item_displayed) + (tui_data_window::delete_data_content_windows): Update. + (tui_data_window::refresh_window, tui_data_window::no_refresh): + Remove. + (tui_data_window::check_register_values): Update. + (tui_data_item_window::rerender): Add parameters. Update. + (tui_data_item_window::refresh_window): Remove. + * tui/tui-data.h (struct tui_gen_win_info) : No longer + virtual. + * tui/tui-regs.h (struct tui_data_item_window): Don't derive from + tui_gen_win_info. + : Remove. + : Add parameters. + : New members. + (struct tui_data_window) : Remove. + : New member. - * dwarf2read.c (dw2_get_file_names_reader): Add the - CU's file name to the results. +2020-07-01 Tom Tromey -2019-09-10 Tom Tromey - - * ada-lang.c (add_nonlocal_symbols): Combine calls to - map_matching_symbols. Update. - * dwarf2read.c (dw2_map_matching_symbols): Update. - * psymtab.c (match_partial_symbol): Change type; update. - (psym_map_matching_symbols): Likewise. - * symfile-debug.c (debug_qf_map_matching_symbols): Change - type; update. - * symfile.h (struct quick_symbol_functions) - : Change "name" to be a lookup_name_info. - Remove "match". - -2019-09-10 Tom Tromey - - * psymtab.c (map_block): Remove. - (psym_map_matching_symbols): Use iterate_over_symbols_terminated. - * symtab.c (iterate_over_symbols_terminated): New function. - * symtab.c (iterate_over_symbols_terminated): Declare. - -2019-09-10 Tom Tromey - - * ada-lang.c (ada_iterate_over_symbols): Return bool. - * language.h (struct language_defn) : - Return bool. - * symtab.c (iterate_over_symbols): Return bool. - * symtab.h (iterate_over_symbols): Return bool. - -2019-09-10 Tom Tromey - - * ada-lang.c (aux_add_nonlocal_symbols): Change type. - (add_nonlocal_symbols): Update. - * dwarf2read.c (dw2_map_matching_symbols): Change type. - * psymtab.c (map_block, psym_map_matching_symbols): Change type. - * symfile-debug.c (debug_qf_map_matching_symbols): Change type. - * symfile.h (struct quick_symbol_functions) : - Change type of "callback". Remove "data". - - -2019-09-09 Ali Tamur - - * dwarf2read.c (comp_unit_head): Update comment. - (dwarf2_dwo_name): New function declaration. - (dwarf_unit_type_name): New function declaration. - (read_comp_unit_head): Add support for new compilation units, - DW_UT_partial, DW_UT_skeleton, DW_UT_split_compile, DW_UT_split_type. - Particularly, DW_UT_skeleton and DW_UT_split_compile have dwo_id - (currently named as "signature") in their header. Also clarify error - messages. - (lookup_dwo_id): New function. Returns the dwo id of the given - compile unit. - (lookup_dwo_unit): Use the new lookup_dwo_id function. - (init_cutu_and_read_dies): Use the new dwarf2_dwo_name and lookup_dwo_id - functions. - (create_dwo_cu_reader): Use the added lookup_dwo_id function. - (dwarf2_dwo_name): Get the dwo name if present. - (dwarf_unit_type_name): Convert DW_UT_* types to string for diagnostic - purposes. - -2019-09-09 Tom Tromey - - * tui/tui-win.c (tui_all_windows_info): Use ui_out. - -2019-09-09 Philippe Waroquiers - - * python/python.c (do_start_initialization): Make progname_copy static, - to avoid a leak report. - -2019-09-08 Tom Tromey - - * tui/tui-wingeneral.c (box_win): Truncate long window titles. - -2019-09-07 Simon Marchi - - * dwarf2read.c (struct dw2_symtab_iterator) : - Change type to gdb::optional. - (dw2_symtab_iter_init): Change block_index parameter type - to gdb::optional. - (dw2_lookup_symbol): Change block_index parameter - type to block_enum.c - (dw2_debug_names_lookup_symbol): Likewise. - * psymtab.c (psym_lookup_symbol): Likewise. - * symfile-debug.c (debug_qf_lookup_symbol): Likewise. - * symfile.h (struct quick_symbol_functions) : - Likewise. + * tui/tui-regs.c (tui_data_window::show_register_group) + (tui_data_window::check_register_values): Update. + * tui/tui-regs.h (struct tui_data_item_window) : Rename + from item_no. -2019-09-06 Christian Biesinger +2020-07-01 Tom Tromey - * defs.h (relocate_gdb_directory): Change int to bool in - signature and rename flag to relocatable. - * main.c (relocate_path): Likewise. - (relocate_gdb_directory): Likewise. - -2019-09-06 Alan Modra - - * coffread.c (coff_symfile_read): Constify filename variable. - * dbxread.c (dbx_symfile_init, coffstab_build_psymtabs), - (elfstab_build_psymtabs, stabsect_build_psymtabs): Likewise. - * gdb_bfd.c (gdb_bfd_close_or_warn): Likewise. - * solib.c (reload_shared_libraries_1): Likewise. - * symfile.c (reread_symbols): Likewise. - * solib-aix.c (solib_aix_bfd_open): Add cast for xfree of filename. - * solib-darwin.c (darwin_bfd_open): Likewise. - * symfile-mem.c (symbol_file_add_from_memory): Likewise. + * tui/tui-regs.c (tui_data_window::show_register_group): Remove + useless "if". -2019-09-03 Andrew Burgess +2020-07-01 Tom Tromey - * psymtab.c (print_partial_symbols): Handle missing domain_enum - values MODULE_DOMAIN and COMMON_BLOCK_DOMAIN. + * tui/tui-regs.c (tui_data_window::show_register_group): Update. + * tui/tui-regs.h (struct tui_data_item_window) : Remove. -2019-09-03 Tom Tromey +2020-07-01 Tom Tromey - * ada-valprint.c (ada_val_print_num): Don't recurse for range - types. - (has_negatives): Unbias a range type bound. - * dwarf2read.c (read_subrange_type): Handle DW_AT_GNU_bias. - * gdbtypes.c (operator==): Handle new field. - (create_range_type): Add "bias" parameter. - (create_static_range_type, resolve_dynamic_range): Update. - * gdbtypes.h (struct range_bounds) : New member. - (create_range_type): Add bias parameter. - * printcmd.c (print_scalar_formatted): Unbias range types. - * value.c (unpack_long): Unbias range types. - (pack_long): Bias range types. - -2019-09-02 Alan Hayward - - * solib-svr4.c (svr4_find_and_create_probe_breakpoints): Check all - probe arguments. - -2019-09-02 Alan Hayward - - * break-catch-throw.c (fetch_probe_arguments): Use gdbarch. - * dtrace-probe.c (dtrace_probe::get_argument_count): Likewise. - * probe.c (probe_safe_evaluate_at_pc) (compute_probe_arg) - (compile_probe_arg): Likewise. - * probe.h (get_argument_count): Likewise. - * solib-svr4.c (solib_event_probe_action): Likewise. - * stap-probe.c (stap_probe::get_argument_count): Likewise. - -2019-09-02 Alan Hayward - - * solib-svr4.c (svr4_find_and_create_probe_breakpoints): Move - code to here... - (svr4_create_solib_event_breakpoints): ...from here. + * tui/tui-stack.c (SINGLE_KEY): Move from tui-data.h + * tui/tui-winsource.h (enum tui_line_or_address_kind) + (struct tui_line_or_address): Move from tui-data.h. + * tui/tui-win.c (DEFAULT_TAB_LEN): Move from tui-data.h. + * tui/tui-data.h (DEFAULT_TAB_LEN): Move to tui-win.c. + (tui_cmd_window, tui_source_window_base, tui_source_window) + (tui_disasm_window): Don't declare. + (enum tui_line_or_address_kind, struct tui_line_or_address): Move + to tui-winsource.h. + (SINGLE_KEY): Move to tui-stack.c. -2019-08-30 Sergio Durigan Junior +2020-07-01 Tom Tromey - * nat/fork-inferior.c (trace_start_error): Remove "\nError: " - suffix from warning message. + * tui/tui-regs.h (struct tui_data_item_window) : Now a + std::string. + * tui/tui-regs.c (class tab_expansion_file): New. + (tab_expansion_file::write): New method. + (tui_register_format): Change return type. Use + tab_expansion_file. + (tui_get_register, tui_data_window::display_registers_from) + (tui_data_item_window::rerender): Update. + * tui/tui-io.h (tui_expand_tabs): Don't declare. + * tui/tui-io.c (tui_expand_tabs): Remove. -2019-08-30 Tom Tromey +2020-07-01 Tom Tromey - * tui/tui-winsource.h (struct tui_source_window_base) - : Don't declare. - * tui/tui-winsource.c (tui_source_window_base::refresh_all): - Remove. - * tui/tui-win.c (tui_refresh_all_win): Don't call refresh_all or - tui_show_locator_content. - * tui/tui-regs.h (struct tui_data_window) : Don't - declare. - * tui/tui-regs.c (tui_data_window::refresh_all): Remove. - * tui/tui-data.h (struct tui_win_info) : Don't - declare. + * tui/tui-regs.c (tui_reggroup_completer): Use complete_on_enum. -2019-08-30 Tom Tromey +2020-07-01 Fangrui Song - * tui/tui-io.c (tui_cont_sig): Don't call wrefresh. + * dwarf2/read.c (lnp_state_machine::check_line_address): Test -1. -2019-08-30 Tom Tromey +2020-07-01 Alok Kumar Sharma - * tui/tui-stack.c (_initialize_tui_stack): Move later. - Remove unnecessary forward declarations. + * dwarf2/read.c (set_die_type): Removed conditions to restrict + forms for DW_AT_associated and DW_AT_allocated attributes, + which is already checked in function attr_to_dynamic_prop. -2019-08-30 Tom Tromey +2020-06-30 Tom Tromey - * tui/tui-stack.c (tui_locator_window::set_locator_fullname): Call - rerender. - (tui_update_locator_fullname, tui_show_frame_info): Don't call - tui_show_locator_content. + * dwarf2/read.c (quirk_rust_enum): Correctly call + alloc_rust_variant for default-less enum. -2019-08-30 Tom Tromey +2020-06-30 Tom Tromey - * tui/tui-stack.c (tui_show_locator_content): Move lower. Rewrite. - (tui_locator_window::rerender): Rewrite using body of previous - tui_show_locator_content. + PR build/26183: + * ada-lang.c (ada_lookup_name_info::ada_lookup_name_info): Use + gdb::to_string. -2019-08-30 Tom Tromey +2020-06-29 Simon Marchi - * tui/tui-stack.h (struct tui_locator_window) : New methods. - * tui/tui-stack.c (tui_locator_window::set_locator_fullname): - Rename from tui_set_locator_fullname. - (tui_locator_window::set_locator_info): Rename from - tui_set_locator_info. Return bool. - (tui_update_locator_fullname, tui_show_frame_info): Update. + * gdbarch.sh (displaced_step_copy_insn): Update doc. + * gdbarch.h: Re-generate. -2019-08-30 Tom Tromey +2020-06-28 Tom Tromey - * tui/tui-layout.c (show_layout): Don't call tui_refresh_all. + * command.h (cmd_types): Remove. + (cmd_type): Don't declare. + * cli/cli-decode.h (enum cmd_types): Uncomment. No longer a + typedef. + * cli/cli-cmds.c (setting_cmd): Use cmd->type directly. + * cli/cli-decode.c (cmd_type): Remove. -2019-08-30 Tom Tromey +2020-06-27 Pedro Alves - * tui/tui-wingeneral.c (tui_gen_win_info::refresh_window): Don't - call touchwin. + * fork-child.c (prefork_hook): Adjust. + * infcmd.c (set_inferior_io_terminal, get_inferior_io_terminal): + Delete. + (set_inferior_tty_command, show_inferior_tty_command): Adjust. + * inferior.c (inferior::set_tty, inferior::tty): New methods. + * inferior.h (set_inferior_io_terminal, get_inferior_io_terminal): + Remove declarations. + (struct inferior) : New methods. + (struct inferior) : Rename to ... + (struct inferior) : ... this and make private. + * main.c (captured_main_1): Adjust. + * mi/mi-cmd-env.c (mi_cmd_inferior_tty_set): Adjust. + (mi_cmd_inferior_tty_show): Adjust. + * nto-procfs.c (nto_procfs_target::create_inferior): Adjust. + * windows-nat.c (windows_nat_target::create_inferior): Adjust. + +2020-06-26 Nick Alcock + + * configure.ac: Add --enable-libctf: handle --disable-static + properly. + * acinclude.m4: sinclude ../config/enable.m4. + * Makefile.in (aclocal_m4_deps): Adjust accordingly. + (LIBCTF): Substitute in. + (CTF_DEPS): New, likewise. + (CLIBS): libctf needs symbols from libbfd: move earlier. + (CDEPS): Use CTF_DEPS, not LIBCTF, now LIBCTF can include rpath + flags. + * ctfread.c: Surround in ENABLE_LIBCTF. + (elfctf_build_psymtabs) [!ENABLE_LIBCTF]: New stub. + * configure: Regenerate. + * config.in: Likewise. -2019-08-30 Tom Tromey +2020-06-25 Simon Marchi - * tui/tui-wingeneral.c (box_win): Assume win_info and - win_info->handle cannot be NULL. + * infcmd.c (set_inferior_io_terminal): Use make_unique_xstrdup. -2019-08-30 Tom Tromey +2020-06-25 Simon Marchi - * tui/tui-regs.h (struct tui_data_item_window) : Declare. - * tui/tui-regs.c (tui_data_window::display_registers_from): Call - resize. - (tui_data_item_window::rerender): Rename from - tui_display_register. - (tui_data_item_window::refresh_window): New method. - * tui/tui-layout.c (tui_gen_win_info::resize): Do nothing on - no-op. + * inferior.h (struct inferior) : Change type to + gdb::unique_xmalloc_ptr. + * inferior.c (inferior::~inferior): Don't free inf->terminal. + * infcmd.c (set_inferior_io_terminal): Don't free terminal + field, adjust to unique pointer. + (get_inferior_io_terminal): Adjust to unique pointer. -2019-08-30 Tom Tromey +2020-06-25 Andrew Burgess - * tui/tui-regs.h (struct tui_data_window) : Move later. Now private. - : New method. - * tui/tui-regs.c (tui_reg_command): Update. - * tui/tui-layout.c (tui_set_layout): Update. + * riscv-tdep.c (riscv_print_registers_info): Loop over all + registers, not just the known core set of registers. -2019-08-30 Tom Tromey +2020-06-25 Andrew Burgess - * tui/tui-regs.c (tui_data_window::display_registers_from_line) - (tui_data_window::rerender): Don't call - check_and_display_highlight_if_needed. - (tui_data_window::refresh_all): Remove call to - erase_data_content. + * riscv-tdep.c (riscv_register_name): Return NULL for duplicate + fflags, frm, and fcsr registers. + (riscv_register_reggroup_p): Remove unknown CSRs from save and + restore groups. + (riscv_tdesc_unknown_reg): New function. + (riscv_gdbarch_init): Pass riscv_tdesc_unknown_reg to + tdesc_use_registers. + * riscv-tdep.h (struct gdbarch_tdep): Add + unknown_csrs_first_regnum, unknown_csrs_count, + duplicate_fflags_regnum, duplicate_frm_regnum, and + duplicate_fcsr_regnum fields. -2019-08-30 Tom Tromey +2020-06-25 Andrew Burgess - * tui/tui-regs.c (tui_data_window::last_regs_line_no) - (tui_data_window::display_registers_from) - (tui_data_window::display_reg_element_at_line) - (tui_data_window::display_registers_from_line): Remove checks of - "empty". - -2019-08-30 Tom Tromey - - * tui/tui-regs.h (struct tui_data_window) : - Don't declare. - * tui/tui-regs.c (tui_data_window::show_registers): Call - rerender. - (tui_data_window::rerender): Rename from display_all_data. - (tui_data_window::rerender): Remove old implementation. - -2019-08-30 Tom Tromey - - * tui/tui-regs.c (tui_data_window::display_all_data): Change - text. - * tui/tui-data.h (NO_DATA_STRING): Remove define. + * target-descriptions.c (tdesc_use_registers): Add new parameter a + callback, use the callback (when not null) to help number unknown + registers. + * target-descriptions.h (tdesc_unknown_register_ftype): New typedef. + (tdesc_use_registers): Add extra parameter to declaration. -2019-08-29 Bernhard Wodok - Sergio Durigan Junior +2020-06-25 Andrew Burgess - PR win32/24284 - * mingw-hdep.c (gdb_select): Handle case when 'n' is zero. + * riscv-tdep.c (value_of_riscv_user_reg): Moved to here from later + in the file. + (class riscv_pending_register_alias): Likewise. + (riscv_register_feature::register_info): Change 'required_p' field + to 'required', and change its type. Add 'check' member function. + (riscv_register_feature::register_info::check): Define new member + function. + (riscv_xreg_feature): Change initialisation of 'required' field. + (riscv_freg_feature): Likewise. + (riscv_virtual_feature): Likewise. + (riscv_csr_feature): Likewise. + (riscv_check_tdesc_feature): Take extra parameter, the csr + tdesc_feature, rewrite the function to use the new + riscv_register_feature::register_info::check function. + (riscv_gdbarch_init): Pass the csr tdesc_feature where needed. + +2020-06-25 Andrew Burgess + + * features/Makefile: Remove all references to the deleted files + below. + * features/riscv/32bit-csr.c: Deleted. + * features/riscv/32bit-csr.xml: Deleted. + * features/riscv/64bit-csr.c: Deleted. + * features/riscv/64bit-csr.xml: Deleted. + * features/riscv/rebuild-csr-xml.sh: Deleted. + +2020-06-25 Andrew Burgess + + * riscv-tdep.c (struct riscv_register_feature::register_info): Fix + whitespace error for declaration of names member variable. + (struct riscv_register_feature): Add new prefer_first_name member + variable, and fix whitespace error in declaration of registers. + (riscv_xreg_feature): Initialize prefer_first_name field. + (riscv_freg_feature): Likewise. + (riscv_virtual_feature): Likewise. + (riscv_csr_feature): Likewise. + (riscv_register_name): Expand on comments. Remove register name + modifications for CSR and virtual registers. + +2020-06-25 Andrew Burgess + + * riscv-tdep.c (struct riscv_register_feature): Fix whitespace + errors. + +2020-06-25 Andrew Burgess + + * riscv-tdep.c (riscv_create_csr_aliases): Handle csr aliases from + riscv-opc.h. + (class riscv_pending_register_alias): New class. + (riscv_check_tdesc_feature): Take vector of pending aliases and + populate it as appropriate. + (riscv_setup_register_aliases): Delete. + (riscv_gdbarch_init): Create vector of pending aliases and pass it + to riscv_check_tdesc_feature in all cases. Use the vector to + create the register aliases. + +2020-06-25 Rainer Orth + + * sol2-tdep.c (sol2_static_transform_name): Remove. + (sol2_init_abi): Don't register it. + * gdbarch.sh (static_transform_name): Remove. + * gdbarch.c, gdbarch.h: Regenerate. + + * dbxread.c (read_dbx_symtab) <'S'>: Remove call to + gdbarch_static_transform_name. + * mdebugread.c (parse_partial_symbols) <'S'>: Likewise. + * stabsread.c (define_symbol) <'X'>: Remove. + (define_symbol) <'S'>: Remove gdbarch_static_transform_name + handling. + <'V'>: Likewise. + * xcoffread.c (scan_xcoff_symtab): Remove gdbarch. + <'S'>: Remove call to gdbarch_static_transform_name. + +2020-06-25 Rainer Orth + + * procfs.c (procfs_pre_trace): New function. + (procfs_target::create_inferior): Pass it to fork_inferior. + +2020-06-25 Rainer Orth + + * configure.tgt (gdb_target_obs): Remove + sparc-sol2-tdep.o, sol2-tdep.o, sparc64-sol2-tdep.o. + (gdb_target_obs): Remove sparc64-sol2-tdep.o, + sol2-tdep.o, sparc-sol2-tdep.o. + * sparc-sol2-tdep.c (sparc32_sol2_init_abi): Make static. + * sparc-tdep.h (sparc32_sol2_init_abi): Remove. + * sparc64-sol2-tdep.c (sparc64_sol2_init_abi): Make static. + * sparc64-tdep.h (sparc64_sol2_init_abi): Remove. + +2020-06-25 Rainer Orth + + * amd64-sol2-tdep.c (amd64_sol2_sigtramp_p): Remove. + (amd64_sol2_init_abi): Use sol2_sigtramp_p. + Call sol2_init_abi. + Remove calls to set_gdbarch_skip_solib_resolver, + set_gdbarch_core_pid_to_str. + * i386-sol2-tdep.c (i386_sol2_sigtramp_p): Remove. + (i386_sol2_static_transform_name): Remove. + (i386_sol2_init_abi): Call sol2_init_abi. + Remove calls to set_gdbarch_sofun_address_maybe_missing, + set_gdbarch_static_transform_name, + set_gdbarch_skip_solib_resolver, set_gdbarch_core_pid_to_str. + Use sol2_sigtramp_p. + * sol2-tdep.c (sol2_pc_in_sigtramp): New function. + (sol2_sigtramp_p): New function. + (sol2_static_transform_name): New function. + (sol2_skip_solib_resolver, sol2_core_pid_to_str): Make static. + (sol2_init_abi): New function. + * sol2-tdep.h (sol2_sigtramp_p, sol2_init_abi): Declare. + (sol2_skip_solib_resolver, sol2_core_pid_to_str): Remove. + * sparc-sol2-tdep.c (sparc_sol2_pc_in_sigtramp): Remove. + (sparc32_sol2_sigtramp_frame_sniffer): Just call sol2_sigtramp_p. + (sparc_sol2_static_transform_name): Remove. + (sparc32_sol2_init_abi): Call sol2_init_abi. + Remove calls to set_gdbarch_sofun_address_maybe_missing, + set_gdbarch_static_transform_name, + set_gdbarch_skip_solib_resolver, + set_gdbarch_core_pid_to_str. + * sparc-tdep.h (sparc_sol2_pc_in_sigtramp) + (sparc_sol2_static_transform_name): Remove + * sparc64-sol2-tdep.c (sparc64_sol2_sigtramp_frame_sniffer): Just + call sol2_sigtramp_p. + (sparc64_sol2_init_abi): Call sol2_init_abi. + Remove calls to set_gdbarch_sofun_address_maybe_missing, + set_gdbarch_static_transform_name, + set_gdbarch_skip_solib_resolver, set_gdbarch_core_pid_to_str. + +2020-06-24 Philippe Waroquiers + + * symfile-add-flags.h: New flag SYMFILE_ALWAYS_CONFIRM. + * exec.c (validate_exec_file): If from_tty, set both + SYMFILE_VERBOSE (== from_tty) and SYMFILE_ALWAYS_CONFIRM. + * symfile.c (symbol_file_add_with_addrs): if always_confirm + and from_tty, unconditionally ask a confirmation. + +2020-06-23 Andrew Burgess + + * target-descriptions.c (tdesc_architecture_name): Protect against + NULL pointer dereference. + (maint_print_xml_tdesc_cmd): New function. + (_initialize_target_descriptions): Register new 'maint print + xml-tdesc' command and give it the filename completer. + * NEWS: Mention new 'maint print xml-tdesc' command. + +2020-06-23 Andrew Burgess + + * target-descriptions.c (class tdesc_compatible_info): New class. + (struct target_desc): Change type of compatible vector. + (tdesc_compatible_p): Update for change in type of + target_desc::compatible. + (tdesc_compatible_info_list): New function. + (tdesc_compatible_info_arch_name): New function. + (tdesc_add_compatible): Update for change in type of + target_desc::compatible. + (print_c_tdesc::visit_pre): Likewise. + +2020-06-23 Andrew Burgess + + * target-descriptions.c (print_c_tdesc::print_c_tdesc): Change + whitespace to underscore. + (maint_print_c_tdesc_cmd): Use fake filename for target + descriptions that came from the target. + (_initialize_target_descriptions): Add filename command completion + for 'maint print c-tdesc'. + +2020-06-23 Simon Marchi + + * dwarf2/loc.c (decode_debug_loclists_addresses): Add empty + lines. + +2020-06-23 Simon Marchi + + * dwarf2/loc.c (decode_debug_loc_dwo_addresses): Add empty + lines. + (dwarf2_find_location_expression): Likewise. + (call_site_parameter_matches): Likewise. + (dwarf2_compile_expr_to_ax): Likewise. + (disassemble_dwarf_expression): Likewise. + (loclist_describe_location): Likewise. + +2020-06-23 Pedro Alves + + * gdbarch-selftests.c: Don't include inferior.h, gdbthread.h or + progspace-and-thread.h. Include scoped-mock-context.h instead. + (register_to_value_test): Use scoped_mock_context. + * regcache.c: Include "scoped-mock-context.h". + (cooked_read_test): Don't error out if a target is already pushed. + Use scoped_mock_context. Adjust. + * scoped-mock-context.h: New file. -2019-08-28 Andrew Burgess +2020-06-23 Andrew Burgess - * symtab.c (search_symbols): Don't include MODULE_DOMAIN symbols - when searching for types. + * ada-lang.c (ada_language_data): Delete la_is_string_type_p + initializer. + (ada_language::is_string_type_p): New member function. + * c-lang.c (c_language_data): Delete la_is_string_type_p + initializer. + (cplus_language_data): Likewise. + (asm_language_data): Likewise. + (minimal_language_data): Likewise. + * d-lang.c (d_language_data): Likewise. + * f-lang.c (f_is_string_type_p): Delete function, implementation + moved to f_language::is_string_type_p. + (f_language_data): Delete la_is_string_type_p initializer. + (f_language::is_string_type_p): New member function, + implementation from f_is_string_type_p. + * go-lang.c (go_is_string_type_p): Delete function, implementation + moved to go_language::is_string_type_p. + (go_language_data): Delete la_is_string_type_p initializer. + (go_language::is_string_type_p): New member function, + implementation from go_is_string_type_p. + * language.c (language_defn::is_string_type_p): Define new member + function. + (default_is_string_type_p): Make static, add comment copied from + header file. + (unknown_language_data): Delete la_is_string_type_p initializer. + (unknown_language::is_string_type_p): New member function. + (auto_language_data): Delete la_is_string_type_p initializer. + (auto_language::is_string_type_p): New member function. + * language.h (language_data): Delete la_is_string_type_p field. + (language_defn::is_string_type_p): Declare new function. + (default_is_string_type_p): Delete desclaration, move comment to + definition. + * m2-lang.c (m2_is_string_type_p): Delete function, implementation + moved to m2_language::is_string_type_p. + (m2_language_data): Delete la_is_string_type_p initializer. + (m2_language::is_string_type_p): New member function, + implementation from m2_is_string_type_p. + * objc-lang.c (objc_language_data): Delete la_is_string_type_p + initializer. + * opencl-lang.c (opencl_language_data): Likewise. + * p-lang.c (pascal_is_string_type_p): Delete function, + implementation moved to pascal_language::is_string_type_p. + (pascal_language_data): Delete la_is_string_type_p initializer. + (pascal_language::is_string_type_p): New member function, + implementation from pascal_is_string_type_p. + * rust-lang.c (rust_is_string_type_p): Delete function, + implementation moved to rust_language::is_string_type_p. + (rust_language_data): Delete la_is_string_type_p initializer. + (rust_language::is_string_type_p): New member function, + implementation from rust_is_string_type_p. + * valprint.c (val_print_scalar_or_string_type_p): Update call to + is_string_type_p. -2019-08-28 Andrew Burgess +2020-06-23 Andrew Burgess - * f-lang.c (f_language_defn): Use f_print_typedef. - * f-lang.h (f_print_typedef): Declare. - * f-typeprint.c (f_print_typedef): Define. + * ada-lang.c (ada_language_data): Delete la_print_typedef + initializer. + (ada_language::print_typedef): New member function. + * c-lang.c (c_language_data): Delete la_print_typedef initializer. + (cplus_language_data): Likewise. + (asm_language_data): Likewise. + (minimal_language_data): Likewise. + * d-lang.c (d_language_data): Likewise. + * f-lang.c (f_language_data): Likewise. + (f_language::print_typedef): New member function. + * go-lang.c (go_language_data): Delete la_print_typedef + initializer. + * language.c (language_defn::print_typedef): Define member + function. + (unknown_language_data): Delete la_print_typedef initializer. + (unknown_language::print_typedef): New member function. + (auto_language_data): Delete la_print_typedef initializer. + (auto_language::print_typedef): New member function. + * language.h (language_data): Delete la_print_typedef field. + (language_defn::print_typedef): Declare new member function. + (LA_PRINT_TYPEDEF): Update call to print_typedef. + (default_print_typedef): Delete declaration. + * m2-lang.c (m2_language_data): Delete la_print_typedef + initializer. + (m2_language::print_typedef): New member function. + * objc-lang.c (objc_language_data): Delete la_print_typedef + initializer. + * opencl-lang.c (opencl_language_data): Likewise. + * p-lang.c (pascal_language_data): Likewise. + (pascal_language::print_typedef): New member function. + * rust-lang.c (rust_print_typedef): Delete function, + implementation moved to rust_language::print_typedef. + (rust_language): Delete la_print_typedef initializer. + (rust_language::print_typedef): New member function, + implementation from rust_print_typedef. + * typeprint.c (default_print_typedef): Delete. + +2020-06-23 Andrew Burgess + + * ada-lang.c (ada_language_data): Delete la_printstr initializer. + (ada_language::printstr): New member function. + * c-lang.c (c_language_data): Delete la_printstr initializer. + (cplus_language_data): Likewise. + (asm_language_data): Likewise. + (minimal_language_data): Likewise. + * d-lang.c (d_language_data): Likewise. + * f-lang.c (f_printstr): Rename to f_language::printstr. + (f_language_data): Delete la_printstr initializer. + (f_language::printstr): New member function, implementation from + f_printstr. + * go-lang.c (go_language_data): Delete la_printstr initializer. + * language.c (language_defn::printstr): Define new member + function. + (unk_lang_printstr): Delete. + (unknown_language_data): Delete la_printstr initializer. + (unknown_language::printstr): New member function. + (auto_language_data): Delete la_printstr initializer. + (auto_language::printstr): New member function. + * language.h (language_data): Delete la_printstr field. + (language_defn::printstr): Declare new member function. + (LA_PRINT_STRING): Update call to printstr. + * m2-lang.c (m2_printstr): Rename to m2_language::printstr. + (m2_language_data): Delete la_printstr initializer. + (m2_language::printstr): New member function, implementation from + m2_printstr. + * objc-lang.c (objc_language_data): Delete la_printstr + initializer. + * opencl-lang.c (opencl_language_data): Likewise. + * p-lang.c (pascal_printstr): Rename to pascal_language::printstr. + (pascal_language_data): Delete la_printstr initializer. + (pascal_language::printstr): New member function, implementation + from pascal_printstr. + * p-lang.h (pascal_printstr): Delete declaration. + * rust-lang.c (rust_printstr): Update header comment. + (rust_language_data): Delete la_printstr initializer. + (rust_language::printstr): New member function. + +2020-06-23 Andrew Burgess + + * ada-lang.c (ada_language_data): Delete la_printchar initializer. + (ada_language::printchar): New member function. + * c-lang.c (c_language_data): Delete la_printchar initializer. + (cplus_language_data): Likewise. + (asm_language_data): Likewise. + (minimal_language_data): Likewise. + * d-lang.c (d_language_data): Likewise. + * f-lang.c (f_printchar): Rename to f_language::printchar. + (f_language_data): Delete la_printchar initializer. + (f_language::printchar): New member function, implementation from + f_printchar. + * go-lang.c (go_language_data): Delete la_printchar initializer. + * language.c (unk_lang_printchar): Delete. + (language_defn::printchar): Define new member function. + (unknown_language_data): Delete la_printchar initializer. + (unknown_language::printchar): New member function. + (auto_language_data): Delete la_printchar initializer. + (auto_language::printchar): New member function. + * language.h (language_data): Delete la_printchar field. + (language_defn::printchar): Declare new member function. + (LA_PRINT_CHAR): Update call to printchar. + * m2-lang.c (m2_language_data): Delete la_printchar initializer. + (m2_language::printchar): New member function. + * objc-lang.c (objc_language_data): Delete la_printchar + initializer. + * opencl-lang.c (opencl_language_data): Likewise. + * p-lang.c (pascal_language_data): Delete la_printchar + initializer. + (pascal_language::printchar): New member function. + * rust-lang.c (rust_printchar): Rename to + rust_language::printchar. + (rust_language_data): Delete la_printchar initializer. + (rust_language::printchar): New member function, implementation + from rust_printchar. + +2020-06-23 Andrew Burgess + + * ada-lang.c (emit_char): Renamed to ada_language::emitchar. + (ada_language_data): Delete la_emitchar initializer. + (ada_language::emitchar): New member function, implementation from + emit_char. + * c-lang.c (c_language_data): Delete la_emitchar initializer. + (cplus_language_data): Likewise. + (asm_language_data): Likewise. + (minimal_language_data): Likewise. + * d-lang.c (d_language_data): Likewise. + * f-lang.c (f_emit_char): Rename to f_language::emitchar. + (f_language_data): Delete la_emitchar initializer. + (f_language::emitchar): New member function, implementation from + f_emit_char. + * go-lang.c (go_language_data): Delete la_emitchar initializer. + * language.c (unk_lang_emit_char): Delete. + (language_defn::emitchar): New member function definition. + (unknown_language_data): Delete la_emitchar initializer. + (unknown_language::emitchar): New member function. + (auto_language_data): Delete la_emitchar initializer. + (auto_language::emitchar): New member function. + * language.h (language_data): Delete la_emitchar field. + (language_defn::emitchar): New member field declaration. + (LA_EMIT_CHAR): Update call to emitchar. + * m2-lang.c (m2_emit_char): Rename to m2_language::emitchar. + (m2_language_data): Delete la_emitchar initializer. + (m2_language::emitchar): New member function, implementation from + m2_emit_char. + * objc-lang.c (objc_language_data): Delete la_emitchar + initializer. + * opencl-lang.c (opencl_language_data): Likewise. + * p-lang.c (pascal_emit_char): Rename to pascal_language::emitchar. + (pascal_language_data): Delete la_emitchar initializer. + (pascal_language::emitchar): New member function, implementation + from pascal_emit_char. + * rust-lang.c (rust_emitchar): Rename to rust_language::emitchar. + (rust_language_data): Delete la_emitchar initializer. + (rust_language::emitchar): New member function, implementation + from rust_emitchar. + +2020-06-23 Andrew Burgess + + * ada-lang.c (resolve): Rename to ada_language::post_parser. + (ada_language_data): Delete la_post_parser initializer. + (ada_language::post_parser): New member function. + * c-lang.c (c_language_data): Delete la_post_parser initializer. + (cplus_language_data): Likewise. + (asm_language_data): Likewise. + (minimal_language_data): Likewise. + * d-lang.c (d_language_data): Likewise. + * f-lang.c (f_language_data): Likewise. + * go-lang.c (go_language_data): Likewise. + * language.c (unknown_language_data): Likewise. + (auto_language_data): Likewise. + * language.h (language_data): Delete la_post_parser field. + (language_defn::post_parser): New member function. + * m2-lang.c (m2_language_data): Delete la_post_parser initializer. + * objc-lang.c (objc_language_data): Likewise. + * opencl-lang.c (opencl_language_data): Likewise. + * p-lang.c (pascal_language_data): Likewise. + * parse.c (parse_exp_in_context): Update call to post_parser. + (null_post_parser): Delete definition. + * parser-defs.h (null_post_parser): Delete declaration. + * rust-lang.c (rust_language_data): Delete la_post_parser + initializer. -2019-08-27 Christian Biesinger +2020-06-23 Andrew Burgess - * nat/linux-namespaces.c (mnsh_main): Initialize fd (to -1). + * ada-lang.c (parse): Rename to ada_language::parser. + (ada_language_data): Delete la_parser initializer. + (ada_language::parser): New member function, implementation from + parse. + * c-lang.c (c_language_data): Delete la_parser initializer. + (cplus_language_data): Likewise. + (asm_language_data): Likewise. + (minimal_language_data): Likewise. + * d-lang.c (d_language_data): Likewise. + (d_language::parser): New member function. + * f-lang.c (f_language_data): Delete la_parser initializer. + (f_language::parser): New member function. + * go-lang.c (go_language_data): Delete la_parser initializer. + (go_language::parser): New member function. + * language.c (unk_lang_parser): Delete. + (language_defn::parser): Define new member function. + (unknown_language_data): Delete la_parser initializer. + (unknown_language::parser): New member function. + (auto_language_data): Delete la_parser initializer. + (auto_language::parser): New member function. + * language.h (language_data): Delete la_parser field. + (language_defn::parser): Declare new member function. + * m2-lang.c (m2_language_data): Delete la_parser initializer. + (m2_language::parser): New member function. + * objc-lang.c (objc_language_data): Delete la_parser initializer. + * opencl-lang.c (opencl_language_data): Likewise. + * p-lang.c (pascal_language_data): Likewise. + (pascal_language::parser): New member function. + * parse.c (parse_exp_in_context): Update call to parser. + * rust-lang.c (rust_language_data): Delete la_parser initializer. + (rust_language::parser): New member function. + +2020-06-23 Andrew Burgess + + * top.c (print_gdb_configuration): Print --with-python-libdir + configuration value. + +2020-06-22 Philippe Waroquiers + + * NEWS: Mention change to the alias command. + +2020-06-22 Philippe Waroquiers + + * cli/cli-cmds.c (lookup_cmd_for_default_args) + (alias_command_completer) + (make_alias_options_def_group): New functions. + (alias_opts, alias_option_defs): New struct and array. + (alias_usage_error): Update usage. + (alias_command): Handles optional DEFAULT-ARGS... arguments. + Use option framework. + (_initialize_cli_cmds): Update alias command help. + Update aliases command help. + (show_user): + Add NULL for new default_args lookup_cmd argument. + (valid_command_p): Rename to validate_aliased_command. + Add NULL for new default_args lookup_cmd argument. Verify that the + aliased_command has no default args. + * cli/cli-decode.c (help_cmd): Show aliases definitions. + (lookup_cmd_1, lookup_cmd): New argument default_args. + (add_alias_cmd): + Add NULL for new default_args lookup_cmd argument. + (print_help_for_command): Show default args under the layout + alias some_alias = some_aliased_cmd some_alias_default_arg. + * cli/cli-decode.h (struct cmd_list_element): New member default_args. + xfree default_args in destructor. + * cli/cli-script.c (process_next_line, do_define_command): + Add NULL for new default_args lookup_cmd argument. + * command.h: Declare new default_args argument in lookup_cmd + and lookup_cmd_1. + * completer.c (complete_line_internal_1): + Add NULL for new default_args lookup_cmd or lookup_cmd_1 argument. + * guile/scm-cmd.c (gdbscm_parse_command_name): Likewise. + * guile/scm-param.c (add_setshow_generic, pascm_parameter_defined_p): + Likewise. + * infcmd.c (_initialize_infcmd): Likewise. + * python/py-auto-load.c (gdbpy_initialize_auto_load): Likewise. + * python/py-cmd.c (gdbpy_parse_command_name): Likewise. + * python/py-param.c (add_setshow_generic): Likewise. + * remote.c (_initialize_remote): Likewise. + * top.c (execute_command): Prepend default_args if command has some. + (set_verbose): + Add NULL for new default_args lookup_cmd or lookup_cmd_1 argument. + * tracepoint.c (validate_actionline, encode_actions_1): + Add NULL for new default_args lookup_cmd or lookup_cmd_1 argument. + +2020-06-22 Tankut Baris Aktemur + + * jit.c (jit_read_descriptor): Use bool as the return type. + (jit_breakpoint_re_set_internal): Use bool as the return type. + Invert the return value logic; return true if the jit breakpoint + has been successfully initialized. + (jit_inferior_init): Update the call to + jit_breakpoint_re_set_internal. + +2020-06-22 Pedro Alves + + PR gdb/25939 + * procfs.c (procfs_target::wait): Don't reference inferior_ptid. + Use the current inferior instead. Don't return + TARGET_WAITKIND_SPURIOUS/inferior_ptid -- instead continue and + wait again. + * sol-thread.c (sol_thread_target::wait): Don't reference + inferior_ptid. + (ps_lgetregs, ps_lsetregs, ps_lgetfpregs, ps_lsetfpregs) + (sol_update_thread_list_callback): Use the current inferior's pid + instead of inferior_ptid. + +2020-06-21 Rainer Orth + + * procfs.c: Cleanup many comments. + + (READ_WATCHFLAG, WRITE_WATCHFLAG, EXEC_WATCHFLAG) + (AFTER_WATCHFLAG): Replace by value. + + (MAIN_PROC_NAME_FORMAT): Inline ... + (create_procinfo): ... here. + + (procfs_debug_inferior): Remove SYS_exec handling. + (syscall_is_exec): Likewise. + (procfs_set_exec_trap): Likewise. + + (syscall_is_lwp_exit): Inline in callers. + (syscall_is_exit): Likewise. + (syscall_is_exec): Likewise. + (syscall_is_lwp_create): Likewise. + + (invalidate_cache): Remove #if 0 code. + + (make_signal_thread_runnable): Remove. + (procfs_target::resume): Remove #if 0 code. + +2020-06-21 Rainer Orth + + PR gdb/25939 + * procfs.c (procfs_target::procfs_init_inferior): Move push_target + call ... + (procfs_target::create_inferior): ... here. + +2020-06-21 Philippe Waroquiers + + * exec.c (validate_exec_file): Ensure the build-id is up to + date by calling reopen_exec_file (that checks file timestamp + to decide to re-read the file). + +2020-06-18 Pedro Alves + + PR gdb/25412 + * gdbthread.h (delete_thread, delete_thread_silent) + (find_thread_ptid): Update comments. + * thread.c (current_thread_): New global. + (is_current_thread): Move higher, and reimplement. + (inferior_thread): Reimplement. + (set_thread_exited): Use bool. Add assertions. + (add_thread_silent): Simplify thread-reuse handling by always + calling delete_thread. + (delete_thread): Remove intro comment. + (find_thread_ptid): Skip exited threads. + (switch_to_thread_no_regs): Write to current_thread_. + (switch_to_no_thread): Check CURRENT_THREAD_ instead of + INFERIOR_PTID. Clear current_thread_. + +2020-06-18 Pedro Alves + + * aix-thread.c (pd_update): Use switch_to_thread. + +2020-06-18 Pedro Alves + + * ravenscar-thread.c (ravenscar_thread_target): Update. + (ravenscar_thread_target::update_inferior_ptid): Rename to ... + (ravenscar_thread_target::add_active_thread): ... this. Don't + set m_base_ptid here. Update to avoid referencing inferior_ptid. + (ravenscar_thread_target::wait): Don't write to inferior_ptid. + +2020-06-18 Pedro Alves + + * nat/windows-nat.c (current_windows_thread): Remove. + * nat/windows-nat.h (current_windows_thread): Remove. + * windows-nat.c (windows_nat_target::stopped_by_sw_breakpoint): + Adjust. + (display_selectors): Adjust to fetch the current + windows_thread_info based on inferior_ptid. + (fake_create_process): No longer write to current_windows_thread. + (windows_nat_target::get_windows_debug_event): + Don't set inferior_ptid or current_windows_thread. + (windows_nat_target::wait): Adjust to not rely on + current_windows_thread. + (do_initial_windows_stuff): Now a method of windows_nat_target. + Switch to the last_ptid thread. + (windows_nat_target::attach): Adjust. + (windows_nat_target::detach): Use switch_to_no_thread instead of + writing to inferior_ptid directly. + (windows_nat_target::create_inferior): Adjust. + +2020-06-18 Pedro Alves + + * windows-nat.c (do_initial_windows_stuff): No longer set inferior_ptid. + +2020-06-18 Pedro Alves + + * go32-nat.c (go32_nat_target::create_inferior): Switch to thread + after creating it, instead of writing to inferior_ptid. Don't + write to inferior_ptid. + +2020-06-18 Pedro Alves + + * fork-child.c (postfork_hook): Don't write to inferior_ptid. + +2020-06-18 Pedro Alves + + * bsd-kvm.c (bsd_kvm_target_open): Switch to thread after adding + it, instead of writing to inferior_ptid. + +2020-06-18 Pedro Alves + + * btrace.c (btrace_fetch): Use switch_to_thread instead of writing + to inferior_ptid. + +2020-06-18 Pedro Alves + + * bsd-kvm.c (bsd_kvm_target::close): Use switch_to_no_thread + instead of writing to inferior_ptid directly. + +2020-06-18 Pedro Alves + + * corelow.c (core_target::close): Use switch_to_no_thread instead + of writing to inferior_ptid directly. + (add_to_thread_list, core_target_open): Use switch_to_thread + instead of writing to inferior_ptid directly. + +2020-06-18 Pedro Alves + + * darwin-nat.c (darwin_nat_target::decode_message): Don't write to + inferior_ptid. + (darwin_nat_target::stop_inferior, darwin_nat_target::kill): Avoid + inferior_ptid. + (darwin_attach_pid): Use switch_to_no_thread instead of writing to + inferior_ptid directly. + (darwin_nat_target::init_thread_list): Switch to thread, instead + of writing to inferior_ptid. + (darwin_nat_target::attach): Don't write to inferior_ptid. + (darwin_nat_target::get_ada_task_ptid): Avoid inferior_ptid. + +2020-06-18 Pedro Alves + + * gnu-nat.c (gnu_nat_target::create_inferior): Switch to the added + thread. + (gnu_nat_target::attach): Don't write to inferior_ptid directly. + Instead use switch_to_thread. + (gnu_nat_target::detach): Use switch_to_no_thread + instead of writing to inferior_ptid directly. Used passed-in + inferior instead of looking up the inferior by pid. + +2020-06-18 Pedro Alves + + * go32-nat.c (go32_nat_target::create_inferior): Don't write to + inferior_ptid. + +2020-06-18 Pedro Alves + + * nto-procfs.c (nto_procfs_target::update_thread_list): Avoid + inferior_ptid. + (nto_procfs_target::attach): Avoid inferior_ptid. Switch to + thread. + (nto_procfs_target::detach): Avoid referencing + inferior_ptid. Use switch_to_no_thread instead of writing to + inferior_ptid directly. + (nto_procfs_target::mourn_inferior): Use switch_to_no_thread + instead of writing to inferior_ptid directly. + (nto_procfs_target::create_inferior): Avoid inferior_ptid. Switch + to thread. + +2020-06-18 Pedro Alves + + * remote-sim.c (gdbsim_target::create_inferior): Switch to thread + after creating it, instead of writing to inferior_ptid. + (gdbsim_target_open): Use switch_to_no_thread instead of writing + to inferior_ptid directly. + (gdbsim_target::wait): Don't write to inferior_ptid. + +2020-06-18 Pedro Alves + + * remote.c (remote_target::remote_notice_new_inferior): Use + switch_to_thread instead of writing to inferior_ptid directly. + (remote_target::add_current_inferior_and_thread): Use + switch_to_no_thread instead of writing to inferior_ptid directly. + (extended_remote_target::attach): Use switch_to_inferior_no_thread + and switch_to_thread instead of using set_current_inferior or + writing to inferior_ptid directly. + +2020-06-18 Pedro Alves + + * tracectf.c (ctf_target_open): Switch to added thread instead of + writing to inferior_ptid directly. + (ctf_target::close): Use switch_to_no_thread instead of writing to + inferior_ptid directly. + +2020-06-18 Pedro Alves + + * tracefile-tfile.c (tfile_target_open): Don't write to + inferior_ptid directly, instead switch to added thread. + (tfile_target::close): Use switch_to_no_thread instead of writing + to inferior_ptid directly. + +2020-06-18 Pedro Alves + + * procfs.c (procfs_target::attach): Don't write to inferior_ptid. + (procfs_target::detach): Use switch_to_no_thread + instead of writing to inferior_ptid directly. + (do_attach): Change return type to void. Switch to the added + thread. + (procfs_target::create_inferior): Switch to the added thread. + (procfs_do_thread_registers): Don't write to inferior_ptid. + +2020-06-18 Pedro Alves + + * infrun.c (generic_mourn_inferior): Use switch_to_thread instead + of writing to inferior_ptid. + (scoped_restore_exited_inferior): Delete. + (handle_vfork_child_exec_or_exit): Simplify using + scoped_restore_current_pspace_and_thread. Use switch_to_thread + instead of writing to inferior_ptid. + (THREAD_STOPPED_BY): Delete. + (thread_stopped_by_watchpoint, thread_stopped_by_sw_breakpoint) + (thread_stopped_by_hw_breakpoint): Delete. + (save_waitstatus): Use + scoped_restore_current_thread+switch_to_thread, and call + target_stopped_by_watchpoint instead of + thread_stopped_by_watchpoint, target_stopped_by_sw_breakpoint + instead of thread_stopped_by_sw_breakpoint, and + target_stopped_by_hw_breakpoint instead of + thread_stopped_by_hw_breakpoint. + (handle_inferior_event) + : Don't write to + inferior_ptid directly, nor + set_current_inferior/set_current_program_space. Use + switch_to_thread / switch_to_inferior_no_thread instead. + +2020-06-18 Pedro Alves + + * target.c (generic_mourn_inferior): Use switch_to_no_thread + instead of writing to inferior_ptid. + +2020-06-18 Pedro Alves + + * inf-ptrace.c (inf_ptrace_target::create_inferior): Switch to the + added thread. + (inf_ptrace_target::attach): Don't write to inferior_ptid. Switch + to the added thread. + (inf_ptrace_target::detach_success): Use switch_to_no_thread + instead of writing to inferior_ptid. + +2020-06-18 Pedro Alves + + * gdbarch-selftests.c: Include "progspace-and-thread.h". + (register_to_value_test): Mock a program_space too. Heap-allocate + the address space. Don't write to inferior_ptid. Use + switch_to_thread instead. -2019-08-27 Andrew Burgess +2020-06-18 Pedro Alves - * cli/cli-utils.c (info_print_options_defs): Delete. - (make_info_print_options_def_group): Delete. - (extract_info_print_options): Delete. - (info_print_command_completer): Delete. - (info_print_args_help): Add extra parameter, and optionally - include text about -n flag. - * cli/cli-utils.h (struct info_print_options): Delete. - (extract_info_print_options): Delete declaration. - (info_print_command_completer): Delete declaration. - (info_print_args_help): Add extra parameter, extend header - comment. - * python/python.c (gdbpy_rbreak): Pass additional parameter to - search_symbols. - * stack.c (struct info_print_options): New type. - (info_print_options_defs): New file scoped variable. - (make_info_print_options_def_group): New static function. - (info_print_command_completer): New static function. - (info_locals_command): Update to use new local functions. - (info_args_command): Likewise. - (_initialize_stack): Add extra parameter to calls to - info_print_args_help. - * symtab.c (search_symbols): Add extra parameter, use this to - possibly excluse non-debug symbols. - (symtab_symbol_info): Add extra parameter, which is passed on to - search_symbols. - (struct info_print_options): New type. - (info_print_options_defs): New file scoped variable. - (make_info_print_options_def_group): New static function. - (info_print_command_completer): New static function. - (info_variables_command): Update to use local functions, and pass - extra parameter through to symtab_symbol_info. - (info_functions_command): Likewise. - (info_types_command): Pass additional argument through to - symtab_symbol_info. - (rbreak_command): Pass extra argument to search_symbols. - (_initialize_symtab): Add extra arguments for calls to - info_print_args_help, and update help text for 'info variables', - 'whereis', and 'info functions' commands. - * symtab.h (search_symbols): Add extra argument to declaration. - * NEWS: Mention new flags. - -2019-08-26 Christian Biesinger - - * symtab.c (lookup_static_symbol): Call the new function (and move - it down to be next to lookup_global_symbol). - (struct global_sym_lookup_data): Add block_enum member and rename to... - (struct global_or_static_sym_lookup_data): ...this. - (lookup_symbol_global_iterator_cb): Pass block_index instead of - GLOBAL_BLOCK to lookup_symbol_in_objfile and rename to... - (lookup_symbol_global_or_static_iterator_cb): ...this. - (lookup_global_or_static_symbol): New function. - (lookup_global_symbol): Call new function. - -2019-08-26 Tom de Vries - - PR c++/24852 - * break-catch-throw.c (fetch_probe_arguments): Improve error mesage - when pc_probe.prob == NULL. - -2019-08-25 Simon Marchi - - * dwarf2read.c (dw2_debug_names_iterator::next): Rename local - variable symbol_linkage to symbol_linkage_. - -2019-08-25 Simon Marchi - - * dwarf2read.c (dw2_debug_names_iterator::next): Use enum to - represent whether the symbol is static, dynamic, or we don't - know. - -2019-08-25 Yoshinori Sato - - * gdb/rx-tdep.c (rx_register_names): New. - (rx_register_name): Delete. - (rx_psw_type): Delete. - (rx_fpsw_type): Delete. - (rx_register_type): Delete. - (rx_gdbarch_init): Convert target-descriptions. - (_initialize_rx_tdep): Add initialize_tdesc_rx. - * gdb/features/Makefile: Add rx.xml. - * gdb/features/rx.xml: New. - * gdb/features/rx.c: Generated. - * gdb/NEWS: Mention target description support. - -2019-08-22 Christian Biesinger - - * symtab.c (symbol_cache_lookup): Always initialize *bsc_ptr and - *slot_ptr. - -2019-08-23 Sergio Durigan Junior - - * configure.ac: Don't check for 'dlfcn.h' (moved to - gdbsupport/common.m4). - * Makefile.in (COMMON_SFILES): Move 'gdb-dlfcn.c' to - 'gdbsupport/'. - (HFILES_NO_SRCDIR): Likewise, for 'gdb-dlfcn.h'. - * compile/compile-c-support.c: Include - 'gdbsupport/gdb-dlfcn.h'. - * gdbsupport/common.m4: Check for 'dlfcn.h'. - * gdb-dlfcn.c: Move to... - * gdbsupport/gdb-dlfcn.c: ... here. - * gdb-dlfcn.h: Move to... - * gdbsupport/gdb-dlfcn.h: ... here. - -2019-08-23 Sandra Loosemore - - * nios2-tdep.c (struct reg_value): Improve comments. Make - the offset field signed. - -2019-08-22 Christian Biesinger - - * python/lib/gdb/__init__.py (_execute_file): New function. - * python/python.c (python_run_simple_file): Call gdb._execute_file - on Windows. - -2019-08-22 Andrew Burgess - - * f-exp.y (yylex): Remove is_a_field_of_this local variable, and - all uses as this was never set to anything but a zero value. - -2019-08-21 Bogdan Harjoc - - * cli/cli-cmds.c (with_command_1): Error out if no arguments. - -2019-08-21 Christian Biesinger - - * tui/tui-data.h (tui_gen_win_info): Add an =default - move constructor, required by some GCC versions. - -2019-08-21 Jinke Fan - - * go32-nat.c (go32_sysinfo): Add hygon_p. - -2019-08-20 Tom Tromey - - * tui/tui-regs.h (struct tui_data_window) : Now private. - -2019-08-20 Tom Tromey - - * tui/tui-wingeneral.c (box_win): Change type of highlight_flag. - (tui_unhighlight_win, tui_highlight_win) - (tui_win_info::make_window): Update. - * tui/tui-data.h (HILITE, NO_HILITE): Remove. - -2019-08-20 Tom Tromey - - * tui/tui-data.h (PROC_PREFIX, LINE_PREFIX, PC_PREFIX) - (MIN_LINE_WIDTH, MIN_PROC_WIDTH, MAX_TARGET_WIDTH) - (MAX_PID_WIDTH): Move to tui-stack.c. - * tui/tui-stack.c (PROC_PREFIX, LINE_PREFIX, PC_PREFIX) - (MIN_LINE_WIDTH, MIN_PROC_WIDTH, MAX_TARGET_WIDTH) - (MAX_PID_WIDTH): Move from tui-data.h. - -2019-08-20 Tom Tromey - - * tui/tui-wingeneral.h (tui_make_window): Don't declare. - * tui/tui-wingeneral.c (box_win): Change type of win_info. - (box_win): Update. - (tui_gen_win_info::make_window): Rename from tui_make_window. - (tui_win_info::make_window): New method. - (tui_gen_win_info::make_visible): Update. - * tui/tui-source.c (tui_source_window::set_contents): Update. - * tui/tui-regs.c (tui_data_window::show_register_group): Update. - (tui_data_window::display_registers_from): Update. - * tui/tui-layout.c (tui_gen_win_info::resize): Update. - * tui/tui-data.h (struct tui_gen_win_info) : - Declare. - : Remove. - : Remove. - (struct tui_win_info) <make_window>: Declare. - <can_box>: Now virtual. - <title>: New member. - * tui/tui-data.c (~tui_gen_win_info): Don't free title. - * tui/tui-command.c (tui_cmd_window::resize): Update. + * linux-tdep.c (find_signalled_thread(thread_info *,void *)): + Delete. + (find_signalled_thread()): New, factored out from + linux_make_corefile_notes and adjusted to handle exited threads. + (linux_make_corefile_notes): Adjust to use the new + find_signalled_thread. -2019-08-20 Tom Tromey <tom@tromey.com> +2020-06-18 Pedro Alves <palves@redhat.com> - * tui/tui-regs.h (struct tui_data_window) <display_regs>: Remove. - * tui/tui-regs.c (tui_data_window::show_registers): Update. - (tui_data_window::check_register_values): Update. + * linux-tdep.c (btrace_fetch): Save/restore current thread instead + of saving/restoring inferior_ptid. -2019-08-20 Tom Tromey <tom@tromey.com> +2020-06-17 Tom Tromey <tom@tromey.com> - * tui/tui-regs.h (struct tui_data_window): Use - DISABLE_COPY_AND_ASSIGN. - <regs_content>: Change type, removing unique_ptr. - <tui_data_window>: Add move constructor. - * tui/tui-regs.c (tui_data_window::show_registers) - (tui_data_window::show_register_group) - (tui_data_window::display_registers_from) - (tui_data_window::display_registers_from) - (tui_data_window::first_data_item_displayed) - (tui_data_window::delete_data_content_windows) - (tui_data_window::rerender, tui_data_window::refresh_window) - (tui_data_window::check_register_values): Update. + * tui/tui-win.h (tui_scroll_forward, tui_scroll_backward) + (tui_scroll_left, tui_scroll_right, struct tui_win_info): Don't + declare. + * tui/tui-data.h (MIN_CMD_WIN_HEIGHT): Remove. -2019-08-20 Tom Tromey <tom@tromey.com> +2020-06-15 Simon Marchi <simon.marchi@efficios.com> - * tui/tui-regs.h (struct tui_data_window) <show_registers, - show_register_group>: Declare. - (tui_show_register_group): Don't declare. - * tui/tui-regs.c (tui_data_window::show_registers): Rename from - tui_show_registers. - (tui_data_window::show_register_group): Rename from - tui_show_register_group. - (tui_data_window::check_register_values, tui_reg_command): - Update. - * tui/tui-layout.c (tui_set_layout): Update. + * dwarf2/read.c (dwarf2_initialize_objfile): Check for presence + of partial symtabs. -2019-08-20 Tom Tromey <tom@tromey.com> +2020-06-17 Simon Marchi <simon.marchi@efficios.com> - * tui/tui-regs.h (struct tui_data_window) <check_register_values>: - Declare. - (tui_check_register_values): Don't declare. - * tui/tui-regs.c (tui_data_window::check_register_values): Rename - from tui_check_register_values. - * tui/tui-hooks.c (tui_register_changed): Update. + * regformats/reg-arm.dat: Remove. + * regformats/reg-bfin.dat: Remove. + * regformats/reg-cris.dat: Remove. + * regformats/reg-crisv32.dat: Remove. + * regformats/reg-m32r.dat: Remove. + * regformats/reg-tilegx.dat: Remove. + * regformats/reg-tilegx32.dat: Remove. -2019-08-20 Tom Tromey <tom@tromey.com> +2020-06-17 Simon Marchi <simon.marchi@efficios.com> - * tui/tui-regs.c (tui_reg_layout): Move later. - (tui_show_registers): Don't enable TUI mode or change layout. + * features/Makefile (WHICH): Remove arm files. + * regformats/arm/arm-with-iwmmxt.dat: Remove. + * regformats/arm/arm-with-neon.dat: Remove. + * regformats/arm/arm-with-vfpv2.dat: Remove. + * regformats/arm/arm-with-vfpv3.dat: Remove. -2019-08-20 Tom Tromey <tom@tromey.com> +2020-06-17 Simon Marchi <simon.marchi@efficios.com> - * tui/tui-regs.h (struct tui_data_item_window) - <~tui_data_item_window>: Remove. - <content>: Now a unique_xmalloc_ptr. - * tui/tui-regs.c (tui_register_format): Return a - unique_xmalloc_ptr. - (tui_get_register): Update. - (~tui_data_item_window): Remove. - (tui_data_window::display_registers_from, tui_display_register): - Update. - * tui/tui-io.h (tui_expand_tabs): Update. - * tui/tui-io.c (tui_expand_tabs): Return a unique_xmalloc_ptr. - Remove "col" parameter. + * features/Makefile (XMLTOC): Remove rx.xml. -2019-08-20 Tom Tromey <tom@tromey.com> +2020-06-17 Pedro Alves <palves@redhat.com> - * tui/tui-regs.h (struct tui_data_item_window) <value>: Remove - field. - * tui/tui-regs.c (~tui_data_item_window): Update. + * gdbthread.h (thread_control_state) <trap_expected> Update + comments. -2019-08-20 Tom Tromey <tom@tromey.com> +2020-06-17 Andrew Burgess <andrew.burgess@embecosm.com> - * tui/tui-regs.c (tui_register_format, tui_get_register): Move - earlier. + * ada-lang.c (ada_lookup_symbol_nonlocal): Rename to + ada_language::lookup_symbol_nonlocal. + (ada_language_data): Delete la_lookup_symbol_nonlocal initializer. + (ada_language::lookup_symbol_nonlocal): New member function, + implementation from ada_lookup_symbol_nonlocal. + * c-lang.c (c_language_data): Delete la_lookup_symbol_nonlocal + initializer. + (cplus_language_data): Delete la_lookup_symbol_nonlocal + initializer. + (cplus_language::lookup_symbol_nonlocal): New member function. + (asm_language_data): Delete la_lookup_symbol_nonlocal initializer. + (minimal_language_data) Likewise. + * cp-namespace.c (cp_lookup_nested_symbol): Update comment. + * d-lang.c (d_language_data): Delete la_lookup_symbol_nonlocal + initializer. + (d_language::lookup_symbol_nonlocal): New member function. + * f-lang.c (f_language_data): Delete la_lookup_symbol_nonlocal + initializer. + (f_language::lookup_symbol_nonlocal): New member function. + * go-lang.c (go_language_data): Delete la_lookup_symbol_nonlocal + initializer. + * language.c (unknown_language_data): Likewise. + (auto_language_data): Likewise. + * language.h (language_data): Delete la_lookup_symbol_nonlocal + field. + (language_defn::lookup_symbol_nonlocal): New member function. + * m2-lang.c (m2_language_data): Delete la_lookup_symbol_nonlocal + initializer. + * objc-lang.c (objc_language_data): Likewise. + * opencl-lang.c (opencl_language_data): Likewise. + * p-lang.c (pascal_language_data): Likewise. + * rust-lang.c (rust_lookup_symbol_nonlocal): Rename to + rust_language::lookup_symbol_nonlocal. + (rust_language_data): Delete la_lookup_symbol_nonlocal + initializer. + (rust_language::lookup_symbol_nonlocal): New member function, + implementation from rust_lookup_symbol_nonlocal. + * symtab.c (lookup_symbol_aux): Update call to + lookup_symbol_nonlocal. + (basic_lookup_symbol_nonlocal): Rename to... + (language_defn::lookup_symbol_nonlocal): ...this, and update + header comment. Remove language_defn parameter, and replace with + uses of `this'. + * symtab.h (basic_lookup_symbol_nonlocal): Delete declaration. -2019-08-20 Tom Tromey <tom@tromey.com> +2020-06-17 Andrew Burgess <andrew.burgess@embecosm.com> - * tui/tui-regs.c (tui_reg_command): Remove NULL check. + * ada-lang.c (ada_language_data): Delete la_value_print_inner + initializer. + (ada_language::value_print_inner): New member function. + * c-lang.c (c_language_data): Delete la_value_print_inner + initializer. + (cplus_language_data): Likewise. + (asm_language_data): Likewise. + (minimal_language_data): Likewise. + * d-lang.c (d_language_data): Likewise. + (d_language::value_print_inner): New member function. + * f-lang.c (f_language_data): Delete la_value_print_inner + initializer. + (f_language::value_print_inner): New member function. + * f-lang.h (f_value_print_innner): Rename to... + (f_value_print_inner): ...this (note spelling of 'inner'). + * f-valprint.c (f_value_print_innner): Rename to... + (f_value_print_inner): ...this (note spelling of 'inner'). + * go-lang.c (go_language_data): Delete la_value_print_inner + initializer. + (go_language::value_print_inner): New member function. + * language.c (language_defn::value_print_inner): Define new member + function. + (unk_lang_value_print_inner): Delete. + (unknown_language_data): Delete la_value_print_inner initializer. + (unknown_language::value_print_inner): New member function. + (auto_language_data): Delete la_value_print_inner initializer. + (auto_language::value_print_inner): New member function. + * language.h (language_data): Delete la_value_print_inner field. + (language_defn::value_print_inner): Delcare new member function. + * m2-lang.c (m2_language_data): Delete la_value_print_inner + initializer. + (m2_language::value_print_inner): New member function. + * objc-lang.c (objc_language_data): Delete la_value_print_inner + initializer. + * opencl-lang.c (opencl_language_data): Likewise. + * p-lang.c (pascal_language_data): Likewise. + (pascal_language::value_print_inner): New member function. + * rust-lang.c (rust_language_data): Delete la_value_print_inner + initializer. + (rust_language::value_print_inner): New member function. + * valprint.c (do_val_print): Update call to value_print_inner. -2019-08-20 Tom Tromey <tom@tromey.com> +2020-06-17 Andrew Burgess <andrew.burgess@embecosm.com> - * tui/tui-source.h (struct tui_source_window): Update. - * tui/tui-regs.c (tui_show_registers): Update. - * tui/tui-disasm.h (struct tui_disasm_window): Update. - * tui/tui-data.h (NO_SRC_STRING, NO_DISASSEM_STRING) - (NO_REGS_STRING): Remove defines. + * ada-lang.c (ada_language_data): Delete la_value_print + initializer. + (ada_language::value_print): New member function. + * c-lang.c (c_language_data): Delete la_value_print initializer. + (cplus_language_data): Likewise. + (asm_language_data): Likewise. + (minimal_language_data): Likewise. + * d-lang.c (d_language_data): Likewise. + * f-lang.c (f_language_data): Likewise. + * go-lang.c (go_language_data): Likewise. + * language.c (unk_lang_value_print): Delete. + (language_defn::value_print): Define new member function. + (unknown_language_data): Delete la_value_print initializer. + (unknown_language::value_print): New member function. + (auto_language_data): Delete la_value_print initializer. + (auto_language::value_print): New member function. + * language.h (language_data): Delete la_value_print field. + (language_defn::value_print): Declare new member function. + (LA_VALUE_PRINT): Update call to value_print. + * m2-lang.c (m2_language_data): Delete la_value_print initializer. + * objc-lang.c (objc_language_data): Likewise. + * opencl-lang.c (opencl_language_data): Likewise. + * p-lang.c (pascal_language_data): Likewise. + (pascal_language::value_print): New member function. + * rust-lang.c (rust_language_data): Delete la_value_print + initializer. -2019-08-20 Conrad Meyer <cem@FreeBSD.org> +2020-06-17 Andrew Burgess <andrew.burgess@embecosm.com> - * remote.c (remote_target::remote_btrace_maybe_reopen): Avoid - unnecessary thread walk if remote doesn't support the packet. + * ada-lang.c (ada_watch_location_expression): Rename to + ada_language::watch_location_expression. + (ada_language_data): Delete la_watch_location_expression + initializer. + (ada_language::watch_location_expression): New member function, + implementation from ada_watch_location_expression. + * breakpoint.c (watch_command_1): Update call to + watch_location_expression. + * c-lang.c (c_watch_location_expression): Rename to + language_defn::watch_location_expression. + (c_language_data): Delete la_watch_location_expression + initializer. + (cplus_language_data): Likewise. + (asm_language_data): Likewise. + (minimal_language_data): Likewise. + * c-lang.h (c_watch_location_expression): Delete declaration. + * d-lang.c (d_language_data): Delete la_watch_location_expression + initializer. + * f-lang.c (f_language_data): Likewise. + * go-lang.c (go_language_data): Likewise. + * language.c (language_defn::watch_location_expression): Member + function implementation from c_watch_location_expression. + (unknown_language_data): Delete la_watch_location_expression + initializer. + (auto_language_data): Likewise. + * language.h (language_data): Delete la_watch_location_expression + field. + (language_defn::watch_location_expression): Declare new member + function. + * m2-lang.c (m2_language_data): Delete + la_watch_location_expression initializer. + * objc-lang.c (objc_language_data): Likewise. + * opencl-lang.c (opencl_language_data): Likewise. + * p-lang.c (pascal_language_data): Likewise. + * rust-lang.c (rust_watch_location_expression): Rename to + rust_language::watch_location_expression. + (rust_language_data): Delete la_watch_location_expression + initializer. + (rust_language::watch_location_expression): New member function, + implementation from rust_watch_location_expression. -2019-08-19 Tom Tromey <tromey@adacore.com> +2020-06-17 Andrew Burgess <andrew.burgess@embecosm.com> - * python/py-value.c (value_has_field): Fix indentation. + * ada-lang.c (ada_collect_symbol_completion_matches): Rename to + ada_language::collect_symbol_completion_matches. + (ada_language_data): Delete la_collect_symbol_completion_matches + initializer. + (ada_language::collect_symbol_completion_matches): New member + function, implementation from + ada_collect_symbol_completion_matches. + * c-lang.c (c_language_data): Delete + la_collect_symbol_completion_matches initializer. + (cplus_language_data): Likewise. + (asm_language_data): Likewise. + (minimal_language_data): Likewise. + * d-lang.c (d_language_data): Likewise. + * f-lang.c (f_collect_symbol_completion_matches): Rename to + f_language::collect_symbol_completion_matches. + (f_language_data): Delete la_collect_symbol_completion_matches + initializer. + (f_language::collect_symbol_completion_matches) New member + function, implementation from f_collect_symbol_completion_matches. + * go-lang.c (go_language_data): Delete + la_collect_symbol_completion_matches initializer. + * language.c (unknown_language_data): Likewise. + (auto_language_data): Likewise. + * language.h (language_data): Delete + la_collect_symbol_completion_matches field. + (language_defn::collect_symbol_completion_matches): New member + function. + * m2-lang.c (m2_language_data): Delete + la_collect_symbol_completion_matches initializer. + * objc-lang.c (objc_language_data): Likewise. + * opencl-lang.c (opencl_language_data): Likewise. + * p-lang.c (pascal_language_data): Likewise. + * rust-lang.c (rust_language_data): Likewise. + * symtab.c (default_collect_symbol_completion_matches): Delete. + (collect_symbol_completion_matches): Update call to + collect_symbol_completion_matches. + (collect_symbol_completion_matches_type): Likewise. + * symtab.h (default_collect_symbol_completion_matches): Delete + declaration. -2019-08-19 Tom Tromey <tromey@adacore.com> +2020-06-17 Andrew Burgess <andrew.burgess@embecosm.com> - * printcmd.c (do_one_display, info_display_command): Update. - * block.h (contained_in): Return bool. Add allow_nested - parameter. - * block.c (contained_in): Return bool. Add allow_nested - parameter. + * ada-lang.c (ada_get_gdb_completer_word_break_characters): Delete. + (ada_language_data): Delete la_word_break_characters initializer. + (ada_language::word_break_characters): New member function. + * c-lang.c (c_language_data): Delete la_word_break_characters + initializer. + (cplus_language_data): Likewise. + (asm_language_data): Likewise. + (minimal_language_data): Likewise. + * completer.c: Update global comment. + (advance_to_expression_complete_word_point): Update call to + word_break_characters. + (complete_files_symbols): Likewise. + (complete_line_internal_1): Likewise. + (default_completer_handle_brkchars): Likewise. + (skip_quoted_chars): Likewise. + * d-lang.c (d_language_data): Delete la_word_break_characters + initializer. + * f-lang.c (f_word_break_characters): Delete. + (f_language_data): Delete la_word_break_characters initializer. + (f_language::word_break_characters): New member function. + * go-lang.c (go_language_data): Delete la_word_break_characters + initializer. + * language.c (unknown_language_data): Likewise. + (auto_language_data): Likewise. + * language.h (default_word_break_characters): Move declaration to + earlier in the file. + (language_data): Delete la_word_break_characters field. + (language_defn::word_break_characters): New member function. + * m2-lang.c (m2_language_data): Delete la_word_break_characters + initializer. + * objc-lang.c (objc_language_data): Likewise. + * opencl-lang.c (opencl_language_data): Likewise. + * p-lang.c (pascal_language_data): Likewise. + * rust-lang.c (rust_language_data): Likewise. -2019-08-19 Tom Tromey <tom@tromey.com> +2020-06-17 Andrew Burgess <andrew.burgess@embecosm.com> - * configure: Rebuild. - * configure.ac: Disallow the combination of -static-libstdc++ and - source highlight. - * source-cache.c (get_language_name): Handle rust. - (source_cache::get_source_lines): Ignore highlighting exceptions. - -2019-08-16 Tom Tromey <tom@tromey.com> - - * tui/tui.h (enum tui_win_type) <EXEC_INFO_WIN>: Remove. - * tui/tui-winsource.h (struct tui_exec_info_window): Remove. - (struct tui_source_window_base) <make_visible, refresh_window, - resize>: Remove methods. - <execution_info>: Remove field. - * tui/tui-winsource.c (tui_source_window_base::do_erase_source_content) - (tui_show_source_line, tui_source_window_base) - (~tui_source_window_base): Update. - (tui_source_window_base::resize) - (tui_source_window_base::make_visible) - (tui_source_window_base::refresh_window): Remove. - (tui_source_window_base::update_exec_info): Update. - * tui/tui-source.c (tui_source_window::set_contents): Update. - * tui/tui-disasm.c (tui_disasm_window::set_contents): Update. + * ada-lang.c (ada_get_symbol_name_matcher): Update header comment. + (ada_language_data): Delete la_get_symbol_name_matcher + initializer. + (language_defn::get_symbol_name_matcher_inner): New member + function. + * c-lang.c (c_language_data): Delete la_get_symbol_name_matcher + initializer. + (cplus_language_data): Likewise. + (cplus_language::get_symbol_name_matcher_inner): New member + function. + (asm_language_data): Delete la_get_symbol_name_matcher initializer. + (minimal_language_data): Likewise. + * cp-support.h (cp_get_symbol_name_matcher): Update header comment. + * d-lang.c (d_language_data): Delete la_get_symbol_name_matcher + initializer. + * dictionary.c (iter_match_first_hashed): Update call to + get_symbol_name_matcher. + (iter_match_next_hashed): Likewise. + (iter_match_next_linear): Likewise. + * dwarf2/read.c (dw2_expand_symtabs_matching_symbol): Likewise. + * f-lang.c (f_language_data): Delete la_get_symbol_name_matcher + initializer. + (f_language::get_symbol_name_matcher_inner): New member function. + * go-lang.c (go_language_data): Delete la_get_symbol_name_matcher + initializer. + * language.c (default_symbol_name_matcher): Update header comment, + make static. + (language_defn::get_symbol_name_matcher): New definition. + (language_defn::get_symbol_name_matcher_inner): Likewise. + (get_symbol_name_matcher): Delete. + (unknown_language_data): Delete la_get_symbol_name_matcher + initializer. + (auto_language_data): Likewise. + * language.h (language_data): Delete la_get_symbol_name_matcher + field. + (language_defn::get_symbol_name_matcher): New member function. + (language_defn::get_symbol_name_matcher_inner): Likewise. + (default_symbol_name_matcher): Delete declaration. + * linespec.c (find_methods): Update call to + get_symbol_name_matcher. + * m2-lang.c (m2_language_data): Delete la_get_symbol_name_matcher + initializer. + * minsyms.c (lookup_minimal_symbol): Update call to + get_symbol_name_matcher. + (iterate_over_minimal_symbols): Likewise. + * objc-lang.c (objc_language_data): Delete + la_get_symbol_name_matcher initializer. + * opencl-lang.c (opencl_language_data): Likewise. + * p-lang.c (pascal_language_data): Likewise. + * psymtab.c (psymbol_name_matches): Update call to + get_symbol_name_matcher. + * rust-lang.c (rust_language_data): Delete + la_get_symbol_name_matcher initializer. + * symtab.c (symbol_matches_search_name): Update call to + get_symbol_name_matcher. + (compare_symbol_name): Likewise. -2019-08-16 Tom Tromey <tom@tromey.com> +2020-06-17 Andrew Burgess <andrew.burgess@embecosm.com> - * tui/tui-hooks.c (tui_remove_hooks): Don't set - deprecated_query_hook. + * ada-lang.c (ada_language_data): Delete la_compute_program + initializer. + * c-lang.c (c_language_data): Likewise. + (c_language::compute_program): New member function. + (cplus_language_data): Delete la_compute_program initializer. + (cplus_language::compute_program): New member function. + (asm_language_data): Delete la_compute_program initializer. + (minimal_language_data): Likewise. + * c-lang.h (c_compute_program): Update comment. + (cplus_compute_program): Likewise. + * compile/compile-c-support.c (c_compute_program): Likewise. + (cplus_compute_program): Likewise. + * compile/compile.c (compile_to_object): Update call to + la_compute_program. + * d-lang.c (d_language_data): Delete la_compute_program + initializer. + * f-lang.c (f_language_data): Likewise. + * go-lang.c (go_language_data): Likewise. + * language.c (unknown_language_data): Likewise. + (auto_language_data): Likewise. + * language.h (language_data): Delete la_compute_program field. + (language_defn::compute_program): New member function. + * m2-lang.c (m2_language_data): Delete la_compute_program + initializer. + * objc-lang.c (objc_language_data): Likewise. + * opencl-lang.c (opencl_language_data): Likewise. + * p-lang.c (pascal_language_data): Likewise. + * rust-lang.c (rust_language_data): Likewise. + +2020-06-17 Andrew Burgess <andrew.burgess@embecosm.com> + + * ada-lang.c (ada_language_data) Delete + la_class_name_from_physname initializer. + * c-lang.c (c_language_data): Likewise. + (cplus_language_data): Likewise. + (cplus_language::class_name_from_physname): New member function. + (asm_language_data): Delete la_class_name_from_physname + initializer. + (minimal_language_data): Likewise. + * d-lang.c (d_language_data): Likewise. + * dwarf2/read.c (guess_partial_die_structure_name): Update to call + method on language_defn class. + (guess_full_die_structure_name): Likewise. + * f-lang.c (f_language_data): Delete la_class_name_from_physname + initializer. + * go-lang.c (go_language_data): Likewise. + * language.c (language_class_name_from_physname): Delete. + (unk_lang_class_name): Delete. + (unknown_language_data): Delete la_class_name_from_physname + initializer. + (auto_language_data): Likewise. + * language.h (language_data): Delete la_class_name_from_physname + field. + (language_defn::class_name_from_physname): New function. + (language_class_name_from_physname): Delete declaration. + * m2-lang.c (m2_language_data): Delete la_class_name_from_physname + initializer. + * objc-lang.c (objc_language_data): Likewise. + * opencl-lang.c (opencl_language_data): Likewise. + * p-lang.c (pascal_language_data): Likewise. + * rust-lang.c (rust_language_data): Likewise. -2019-08-16 Tom Tromey <tom@tromey.com> +2020-06-16 Tom Tromey <tom@tromey.com> - * tui/tui-winsource.c (tui_update_source_windows_with_addr) - (tui_update_source_windows_with_line): Update. - * tui/tui-source.h (struct tui_source_window) - <show_symtab_source>: Declare. - (tui_show_symtab_source): Don't declare. - * tui/tui-source.c (tui_show_symtab_source): Rename from - tui_show_symtab_source. + * tui/tui-data.h (STATUS_NAME): New macro. + * tui/tui-layout.c (tui_remove_some_windows) + (initialize_known_windows, tui_register_window) + (tui_layout_split::remove_windows, initialize_layouts) + (tui_new_layout_command): Don't use hard-coded window names. -2019-08-16 Tom Tromey <tom@tromey.com> +2020-06-16 Tom Tromey <tom@tromey.com> - * tui/tui-winsource.h (struct tui_source_window_base) - <set_contents>: Declare. - * tui/tui-winsource.c - (tui_source_window_base::update_source_window_as_is): Update. - * tui/tui-source.h (struct tui_source_window) <set_contents>: - Declare. - (tui_set_source_content): Don't declare. - * tui/tui-source.c (tui_source_window::set_contents): Rename from - tui_set_source_content. - * tui/tui-disasm.h (struct tui_disasm_window) <set_contents>: - Declare. - (tui_set_disassem_content): Don't declare. - * tui/tui-disasm.c (tui_disasm_window::set_contents): Rename from - tui_set_disassem_content. + PR tui/25348: + * tui/tui.c (tui_ensure_readline_initialized): Rename from + tui_initialize_readline. Only run once. Call rl_initialize. + * tui/tui.h (tui_ensure_readline_initialized): Rename from + tui_initialize_readline. + * tui/tui-io.c (tui_setup_io): Call + tui_ensure_readline_initialized. + * tui/tui-interp.c (tui_interp::init): Update. -2019-08-16 Tom Tromey <tom@tromey.com> +2020-06-16 Tom Tromey <tom@tromey.com> - * tui/tui-winsource.h (struct tui_source_window_base) - <update_breakpoint_info>: Declare. - (tui_update_breakpoint_info): Don't declare. - * tui/tui-winsource.c (tui_source_window_base::update_source_window_as_is) - (tui_update_all_breakpoint_info): Update. - (tui_source_window_base::update_breakpoint_info): Rename from - tui_update_breakpoint_info. - (tui_source_window_base::update_exec_info): Update. + * tui/tui-layout.c (tui_layout_split::remove_windows): Fix logic. + Also preserve the status window. -2019-08-16 Tom Tromey <tom@tromey.com> +2020-06-16 Tom Tromey <tom@tromey.com> - * tui/tui-winsource.h (struct tui_source_window_base) - <update_source_window>: Declare. - (tui_update_source_window): Don't declare. - * tui/tui-winsource.c - (tui_source_window_base::update_source_window): Rename from - tui_update_source_window. - (tui_source_window_base::rerender): Update. - * tui/tui-source.c (tui_source_window::maybe_update): Update. - * tui/tui-disasm.c (tui_show_disassem) - (tui_show_disassem_and_update_source) - (tui_disasm_window::maybe_update): Update. + * python/py-tui.c (tui_py_window::~tui_py_window): Handle case + where m_window==nullptr. -2019-08-16 Tom Tromey <tom@tromey.com> +2020-06-15 Tom Tromey <tromey@adacore.com> - * tui/tui-winsource.h (struct tui_source_window_base) - <update_source_window_as_is>: Declare. - (tui_update_source_window_as_is): Don't declare. - * tui/tui-winsource.c (tui_update_source_window): Update - (tui_source_window_base::update_source_window_as_is): Rename from - tui_update_source_window_as_is. - (tui_source_window_base::refill): Update. - * tui/tui-source.c (tui_show_symtab_source): Update. - * tui/tui-disasm.c (tui_disasm_window::do_scroll_vertical): + * windows-nat.c (windows_nat::handle_output_debug_string): Update. - -2019-08-16 Tom Tromey <tom@tromey.com> - - * tui/tui-winsource.h (tui_update_source_window) - (tui_update_source_window_as_is): Remove "noerror" parameter. - * tui/tui-winsource.c (tui_update_source_window) - (tui_update_source_window_as_is): Remove "noerror" parameter. - (tui_update_source_windows_with_addr) - (tui_update_source_windows_with_line) - (tui_source_window_base::rerender) - (tui_source_window_base::refill): Update. - * tui/tui-source.h (tui_set_source_content) - (tui_show_symtab_source): Remove "noerror" parameter. - * tui/tui-source.c (tui_set_source_content): Remove "noerror" - parameter. - (tui_show_symtab_source): Likewise. - (tui_source_window::maybe_update): Update. - * tui/tui-disasm.c (tui_show_disassem) - (tui_show_disassem_and_update_source) - (tui_disasm_window::do_scroll_vertical) - (tui_disasm_window::maybe_update): Update. - -2019-08-16 Tom Tromey <tom@tromey.com> - - * tui/tui.c (tui_is_window_visible): Update. - * tui/tui-wingeneral.c (tui_make_window) - (tui_gen_win_info::make_visible, tui_refresh_all): Update. - * tui/tui-win.c (window_name_completer, tui_refresh_all_win) - (tui_set_focus_command, tui_all_windows_info, update_tab_width) - (tui_set_win_height_command, parse_scrolling_args): Update. - * tui/tui-source.c (tui_source_window::style_changed): Update. - * tui/tui-regs.c (tui_show_registers) - (tui_data_window::first_data_item_displayed) - (tui_data_window::delete_data_content_windows) - (tui_check_register_values, tui_reg_command): Update. - * tui/tui-disasm.c (tui_show_disassem): Update. - * tui/tui-data.h (struct tui_gen_win_info) <is_visible>: New - method. - <is_visible>: Remove field. - * tui/tui-data.c (tui_next_win, tui_prev_win) - (tui_delete_invisible_windows): Update. - -2019-08-16 Tom Tromey <tom@tromey.com> - - * tui/tui-winsource.h (struct tui_source_window_base) - <m_has_locator>: Remove. - * tui/tui-layout.c (show_source_disasm_command, show_data) - (show_source_or_disasm_and_command): Update. - -2019-08-16 Alan Hayward <alan.hayward@arm.com> - - * NEWS (Other MI changes): New subsection. - * aarch64-tdep.c (aarch64_get_pc_address_flags): New function. - (aarch64_gdbarch_init): Add aarch64_get_pc_address_flags. - * arch-utils.c (default_get_pc_address_flags): New function. - * arch-utils.h (default_get_pc_address_flags): New declaration. - * gdbarch.sh: Add get_pc_address_flags. - * gdbarch.c: Regenerate. - * gdbarch.h: Likewise. - * stack.c (print_pc): New function. - (print_frame_info) (print_frame): Call print_pc. - -2019-08-16 Tom de Vries <tdevries@suse.de> - - * maint.c (maintenance_info_sections): Also handle !ALLOBJ case using - print_objfile_section_info. - -2019-08-15 Tom Tromey <tom@tromey.com> - - * tui/tui-io.c (tui_puts_internal): Check TUI_CMD_WIN before - calling update_cmdwin_start_line. - * tui/tui-winsource.h (struct tui_source_window_base) - <do_make_visible_with_new_height, set_new_height>: Don't declare. - <rerender>: Declare. - * tui/tui-winsource.c (tui_source_window_base::update_tab_width): - Call rerender. - (tui_source_window_base::set_new_height): Remove. - (tui_source_window_base::rerender): Rename from - do_make_visible_with_new_height. - * tui/tui-win.c (tui_resize_all, tui_adjust_win_heights): Use - resize method. - (tui_win_info::make_invisible_and_set_new_height) - (tui_win_info::make_visible_with_new_height): Remove. - * tui/tui-stack.h (struct tui_locator_window) <rerender>: - Declare. - * tui/tui-stack.c (tui_locator_window::rerender): New method. - * tui/tui-regs.h (struct tui_data_window) <set_new_height, - do_make_visible_with_new_height>: Don't declare. - <rerender>: Declare. - * tui/tui-regs.c (tui_data_window::rerender): Rename from - set_new_height. - (tui_data_window::do_make_visible_with_new_height): Remove. - * tui/tui-layout.c (show_source_disasm_command, show_data): Don't - call tui_show_locator_content. - (tui_gen_win_info::resize): Call rerender. - (show_source_or_disasm_and_command): Don't call - tui_show_locator_content. - * tui/tui-data.h (struct tui_gen_win_info) <rerender>: New - method. - (struct tui_win_info) <rerender>: Declare. - <set_new_height, make_invisible_and_set_new_height, - make_visible_with_new_height>: Don't declare. - * tui/tui-data.c (tui_win_list::rerender): New method. - * tui/tui-command.h (struct tui_cmd_window) - <do_make_visible_with_new_height>: Don't declare. - * tui/tui-command.c - (tui_cmd_window::do_make_visible_with_new_height): Remove. - -2019-08-15 Tom Tromey <tromey@adacore.com> - - * ada-exp.y (convert_char_literal): Handle "Q%c" encoding. - * ada-lang.c (ada_enum_name): Likewise. - -2019-08-15 Christian Biesinger <cbiesinger@google.com> - - * python/lib/gdb/__init__.py (GdbOutputFile): Rename to have a - leading underscore. - (GdbOutputErrorFile): Likewise. - (global scope): Adjust constructor calls to GdbOutput{,Error}File - accordingly. - (execute_unwinders): Rename to have a leading underscore. - (auto_load_packages): Likewise. - (global scope): Adjust call to auto_load_packages accordingly. - (GdbSetPythonDirectory): Likewise. - * python/py-unwind.c (pyuw_sniffer): Call _execute_unwinders - instead of execute_unwinders. - -2019-08-15 Tom Tromey <tom@tromey.com> - - * tui/tui-layout.c (show_layout, show_source_disasm_command) - (show_data): Don't change window visibility. - (tui_gen_win_info::resize): Remove special case for command - window. Use wresize, when available. - (show_source_or_disasm_and_command): Don't change window - visibility. - * tui/tui-command.h (struct tui_cmd_window) <resize>: Declare. - <make_visible>: New method. - * tui/tui-command.c (tui_cmd_window::resize): New method. - -2019-08-15 Tom Tromey <tom@tromey.com> - - * tui/tui-winsource.h (struct tui_source_window_iterator): New. - (struct tui_source_windows): New. - * tui/tui-winsource.c (tui_display_main): Update. - * tui/tui-win.c (tui_resize_all, tui_adjust_win_heights) - (new_height_ok, parse_scrolling_args): Update. - * tui/tui-layout.c (show_layout, show_data): Update. - * tui/tui-data.h (tui_source_windows, tui_clear_source_windows) - (tui_add_to_source_windows): Don't declare. - * tui/tui-data.c (source_windows, tui_source_windows) - (tui_clear_source_windows, tui_add_to_source_windows): Remove. - -2019-08-15 Tom Tromey <tom@tromey.com> - - * tui/tui-winsource.h (struct tui_source_window_base) <resize>: - Rename from reset. - * tui/tui-winsource.c (tui_source_window_base::resize): Rename. - * tui/tui-layout.c (show_source_disasm_command, show_data): + (windows_nat::handle_ms_vc_exception): Update. + * target.h (target_read_string): Change API. + * target.c (target_read_string): Change API. + * solib-svr4.c (open_symbol_file_object, svr4_read_so_list): Update. - (tui_gen_win_info::resize): Rename. - (show_source_or_disasm_and_command): Update. - * tui/tui-data.h (struct tui_gen_win_info) <resize>: Rename from - reset. - -2019-08-15 Tom Tromey <tom@tromey.com> - - * tui/tui-stack.c (tui_initialize_static_data): Remove. - * tui/tui-interp.c (tui_interp::init): Don't call - tui_initialize_static_data. - * tui/tui-data.h (tui_initialize_static_data): Don't declare. - -2019-08-15 Tom Tromey <tom@tromey.com> - - * tui/tui-layout.c (tui_default_win_viewport_height): Don't - examine tui_win_list. - -2019-08-15 Tom Tromey <tom@tromey.com> - - * tui/tui-winsource.h (tui_clear_source_content): Don't declare. - * tui/tui-winsource.c (tui_update_source_window_as_is): Don't call - tui_clear_source_content. - (tui_clear_source_content): Remove. - (tui_source_window_base::do_erase_source_content): Hoist call to - content.clear(). - * tui/tui-stack.c (tui_show_frame_info): Don't call - tui_clear_source_content. - -2019-08-15 Tom Tromey <tom@tromey.com> - - * tui/tui-winsource.h (struct tui_source_window_base) - <do_erase_source_content>: New method. - <erase_source_content>: New method. - (tui_erase_source_content): Don't declare. - * tui/tui-winsource.c (tui_clear_source_content): Update. - (tui_source_window_base::do_erase_source_content): Rename from - tui_erase_source_content. - (tui_source_window_base::show_source_content): Update. - * tui/tui-win.c (tui_resize_all, tui_adjust_win_heights): Update. - * tui/tui-source.h (struct tui_source_window) - <erase_source_content>: New method. - * tui/tui-disasm.h (struct tui_disasm_window) - <erase_source_content>: New method. - -2019-08-15 Tom Tromey <tom@tromey.com> - - * tui/tui-winsource.h (tui_alloc_source_buffer): Don't declare. - (struct tui_source_element): Add DISABLE_COPY_AND_ASSIGN, and move - constructor. - * tui/tui-winsource.c (tui_alloc_source_buffer): Remove. - * tui/tui-source.c (tui_set_source_content): Update. - * tui/tui-disasm.c (tui_set_disassem_content): Update. - -2019-08-15 Tom Tromey <tom@tromey.com> - - * tui/tui-winsource.h (tui_line_is_displayed): Don't declare. - * tui/tui-winsource.c (tui_line_is_displayed): Move to - tui-source.c. - * tui/tui-source.h (struct tui_source_window) <line_is_displayed>: - Declare. - * tui/tui-source.c (tui_source_window::line_is_displayed): New - method. - (tui_source_window::maybe_update): Update. - -2019-08-15 Tom Tromey <tom@tromey.com> - - * tui/tui-winsource.h (tui_addr_is_displayed): Don't declare. - * tui/tui-winsource.c (tui_addr_is_displayed): Move to - tui-disasm.c. - * tui/tui-disasm.h (struct tui_disasm_window) <addr_is_displayed>: - Declare. - * tui/tui-disasm.c (tui_disasm_window::addr_is_displayed): New - method. - (tui_disasm_window::maybe_update): Update. + * solib-frv.c (frv_current_sos): Update. + * solib-dsbt.c (dsbt_current_sos): Update. + * solib-darwin.c (darwin_current_sos): Update. + * linux-thread-db.c (inferior_has_bug): Update. + * expprint.c (print_subexp_standard): Update. + * ada-lang.c (ada_main_name, ada_tag_name_from_tsd) + (ada_exception_message_1): Update. -2019-08-15 Tom Tromey <tom@tromey.com> +2020-06-15 Tom Tromey <tromey@adacore.com> - * tui/tui-winsource.h (struct tui_source_window_base) - <maybe_update>: Declare. - * tui/tui-stack.c (tui_show_frame_info): Call maybe_update - method. - * tui/tui-source.h (struct tui_source_window) <maybe_update>: - Declare. - * tui/tui-source.c (tui_source_window::maybe_update): New method. - * tui/tui-disasm.h (struct tui_disasm_window) <maybe_update>: - Declare. - * tui/tui-disasm.c (tui_disasm_window::maybe_update): New method. + * linux-tdep.c (dump_mapping_p): Use target_read_memory. -2019-08-15 Tom Tromey <tom@tromey.com> +2020-06-15 Tom Tromey <tromey@adacore.com> - * tui/tui-stack.c (tui_make_status_line): Use string constructor. + * valprint.c (read_string): Update comment. + * target.c (MIN): Remove. + (target_read_string): Rewrite. -2019-08-15 Tom Tromey <tom@tromey.com> +2020-06-15 Tom Tromey <tromey@adacore.com> - * tui/tui-wingeneral.c: Include tui-stack.h. - * tui/tui-stack.h (MAX_LOCATOR_ELEMENT_LEN) - (struct tui_locator_window): Move from tui-data.h. - * tui/tui-stack.c (_locator, tui_locator_win_info_ptr) - (tui_initialize_static_data): Move from tui-data.c. - * tui/tui-data.h (MAX_LOCATOR_ELEMENT_LEN) - (struct tui_locator_window): Move to tui-stack.c. - * tui/tui-data.c (_locator, tui_locator_win_info_ptr) - (tui_initialize_static_data): Move to tui-stack.c. - -2019-08-15 Tom Tromey <tom@tromey.com> - - * tui/tui-layout.c (show_source_disasm_command) - (show_source_or_disasm_and_command): Use make_visible method, not - tui_make_window. - * tui/tui-command.h (struct tui_cmd_window) <make_visible>: - Remove. + * corefile.c (read_memory_string): Remove. + * ada-valprint.c (ada_value_print_ptr): Update. + * ada-lang.h (ada_tag_name): Change return type. + * ada-lang.c (type_from_tag): Update. + (ada_tag_name_from_tsd): Change return type. Use + target_read_string. + (ada_tag_name): Likewise. + * gdbcore.h (read_memory_string): Don't declare. -2019-08-15 Tom Tromey <tom@tromey.com> +2020-06-14 Hannes Domani <ssbssa@yahoo.de> - * tui/tui-wingeneral.h (tui_make_window): Update. - * tui/tui-wingeneral.c (tui_make_window): Remove "box_it" - parameter. - (tui_gen_win_info::make_visible): Update. - * tui/tui-regs.c (tui_data_window::display_registers_from): - Update. - * tui/tui-layout.c (show_source_disasm_command) - (show_source_or_disasm_and_command): Update. - * tui/tui-data.h (struct tui_gen_win_info) <can_box>: New method. - (enum tui_box): Remove. - (struct tui_win_info) <can_box>: New method. - * tui/tui-command.h (struct tui_cmd_window) <can_box>: New - method. + * symtab.c (rbreak_command): Ignore Windows drive colon. -2019-08-15 Tom de Vries <tdevries@suse.de> +2020-06-12 Simon Marchi <simon.marchi@efficios.com> - * linux-nat-trad.c: Include gdbarch.h. + * NEWS: Mention removed GDBserver host support. -2019-08-14 Alan Hayward <alan.hayward@arm.com> +2020-06-12 Nelson Chu <nelson.chu@sifive.com> - * aarch64-tdep.c (aarch64_analyze_prologue): Allow any valid - register sizes. + * features/riscv/rebuild-csr-xml.sh: Updated. -2019-08-14 Tom Tromey <tromey@adacore.com> +2020-06-11 Tom Tromey <tom@tromey.com> - * darwin-nat.c: Include gdbarch.h. - * darwin-nat-info.c: Include gdbarch.h. + PR gdb/18318: + * c-exp.y (lex_one_token): Handle 'p' like 'e'. -2019-08-13 Tom Tromey <tom@tromey.com> +2020-06-09 Jonny Grant <jg@jguk.org> +2020-06-09 Simon Marchi <simon.marchi@polymtl.ca> - * tui/tui-data.h (struct tui_gen_win_info) <last_visible_line>: - Remove. - * tui/tui-data.c (tui_initialize_static_data): Update. + * main.c (captured_main_1): Don't print new line after help. + (print_gdb_help): add mailing list and IRC channel information + to --help. Add new lines between items in the footer. Remove + quotes around bug url. -2019-08-13 Tom Tromey <tom@tromey.com> +2020-06-11 Keith Seitz <keiths@redhat.com> - * tui/tui-winsource.h (struct tui_exec_info_window) - <~tui_exec_info_window, maybe_allocate_content, get_content, - m_content>: Remove. - (struct tui_source_window_base) <set_exec_info_content, - show_exec_info_content>: Don't declare. - * tui/tui-winsource.c - (tui_exec_info_window::maybe_allocate_content): Remove. - (tui_source_window_base::update_exec_info): Rename from - set_exec_info_content. - (tui_source_window_base::show_exec_info_content) - (tui_source_window_base::update_exec_info): Remove. + PR gdb/21356 + * gdbtypes.c (resolve_dynamic_union, resolve_dynamic_struct): + Resolve typedefs for type length calculations. -2019-08-13 Tom Tromey <tom@tromey.com> +2020-06-10 Tom de Vries <tdevries@suse.de> - * tui/tui-winsource.h (tui_clear_exec_info_content): Don't - declare. - * tui/tui-winsource.c (tui_update_source_window_as_is) - (tui_update_source_windows_with_addr, tui_erase_source_content): - Update. - (tui_clear_exec_info_content): Remove. + PR ada/24713 + * dwarf2/index-write.c (struct mapped_symtab): Add m_string_obstack. + (write_psymbols): Enable .gdb_index for ada. + * dwarf2/read.c: Remove comment stating .gdb_index is unsupported for + ada. -2019-08-13 Tom Tromey <tom@tromey.com> +2020-06-10 Tom de Vries <tdevries@suse.de> - * tui/tui-winsource.h (tui_erase_exec_info_content): Don't - declare. - * tui/tui-winsource.c (tui_source_window_base::refresh_all): Don't - call tui_erase_exec_info_content. - (tui_clear_exec_info_content): Rename from - tui_erase_exec_info_content. - (tui_clear_exec_info_content): Delete. + * dwarf2/read.c (dw2_symtab_iter_init_common): Factor out of ... + (dw2_symtab_iter_init): ... here. Add variant with "offset_type + namei" instead of "const char *name" argument. + (dw2_map_matching_symbols): Use "offset_type namei" variant of + dw2_symtab_iter_init. -2019-08-13 Tom Tromey <tom@tromey.com> +2020-06-08 Simon Marchi <simon.marchi@efficios.com> - * tui/tui-winsource.h (struct tui_source_window_base) - <show_exec_info_content>: Declare. - (tui_show_exec_info_content): Don't declare. - * tui/tui-winsource.c - (tui_source_window_base::show_exec_info_content): Rename from - tui_show_exec_info_content. - (tui_source_window_base::update_exec_info): Update. + * gdbtypes.h (TYPE_FIELD_TYPE): Remove. Change all call sites + to use type::field and field::type instead. -2019-08-13 Tom Tromey <tom@tromey.com> +2020-06-08 Simon Marchi <simon.marchi@efficios.com> - * tui/tui-data.h (enum tui_bp_flag, tui_bp_flags, struct tui_source_element) - (TUI_BP_HIT_POS, TUI_BP_BREAK_POS, TUI_EXEC_POS) - (TUI_EXECINFO_SIZE, tui_exec_info_content): Move ... - * tui/tui-winsource.h (enum tui_bp_flag, tui_bp_flags, struct - tui_source_element, TUI_BP_HIT_POS, TUI_BP_BREAK_POS) - (TUI_EXEC_POS, TUI_EXECINFO_SIZE, tui_exec_info_content): - ... here. + * gdbtypes.h (FIELD_TYPE): Remove. Change all call sites + to use field::type instead. -2019-08-13 Tom Tromey <tom@tromey.com> +2020-06-08 Simon Marchi <simon.marchi@efficios.com> - * tui/tui-winsource.h (struct tui_source_window_base) - <update_exec_info>: Declare. - (tui_update_exec_info): Don't declare. - * tui/tui-winsource.c (tui_update_source_window_as_is) - (tui_source_window_base::refresh_all) - (tui_update_all_breakpoint_info): Update. - (tui_source_window_base::update_exec_info): Rename from - tui_update_exec_info. - * tui/tui-stack.c (tui_show_frame_info): Update. + * gdbtypes.h (struct field) <type, set_type>: New methods. + Rename `type` field to... + <m_type>: ... this. Change references throughout to use type or + set_type methods. + (FIELD_TYPE): Use field::type. Change call sites that modify + the field's type to use field::set_type instead. -2019-08-13 Tom Tromey <tom@tromey.com> +2020-06-08 Simon Marchi <simon.marchi@efficios.com> - * tui/tui-winsource.h (struct tui_source_window_base) - <set_exec_info_content>: Declare. - (tui_set_exec_info_content): Don't declare. - * tui/tui-winsource.c - (tui_source_window_base::set_exec_info_content): Rename from - tui_set_exec_info_content. - (tui_update_exec_info): Update. + * gdbtypes.h (TYPE_INDEX_TYPE): Remove. Change all call sites + to use type::index_type instead. -2019-08-13 Tom Tromey <tom@tromey.com> +2020-06-08 Simon Marchi <simon.marchi@efficios.com> - * tui/tui-winsource.h (struct tui_source_window_base) - <show_source_content>: Declare. - (tui_show_source_content): Don't declare. - * tui/tui-winsource.c (tui_update_source_window_as_is): Update. - (tui_source_window_base::show_source_content): Rename from - tui_show_source_content. - (tui_source_window_base::refresh_all): Update. - * tui/tui-layout.c (show_source_disasm_command) - (show_source_or_disasm_and_command): Update. + * gdbtypes.h (struct type) <index_type, set_index_type>: New + methods. + (TYPE_INDEX_TYPE): Use type::index_type. + * gdbtypes.c (create_array_type_with_stride): Likewise. -2019-08-13 Tom Tromey <tom@tromey.com> +2020-06-07 Tom Tromey <tom@tromey.com> - * tui/tui-winsource.c (tui_erase_source_content) - (tui_show_source_content, tui_source_window_base::refresh_all): - Update. - * tui/tui-wingeneral.h - (tui_check_and_display_highlight_if_needed): Don't declare. - * tui/tui-wingeneral.c - (tui_win_info::check_and_display_highlight_if_needed): Rename from - check_and_display_highlight_if_needed. - * tui/tui-win.c (tui_rehighlight_all) - (tui_win_info::make_visible_with_new_height): Update. - * tui/tui-regs.c (tui_data_window::display_registers_from_line) - (tui_data_window::erase_data_content) - (tui_data_window::display_all_data): Update. - * tui/tui-data.h (struct tui_win_info) - <check_and_display_highlight_if_needed>: Declare. + * valprint.c (generic_val_print_float): Remove "embedded_offset" + parameter. + (generic_value_print): Update. -2019-08-13 Tom Tromey <tom@tromey.com> +2020-06-05 Andrew Burgess <andrew.burgess@embecosm.com> - * tui/tui-win.c (tui_resize_all): Call - tui_delete_invisible_windows. - * tui/tui-layout.c (show_layout): Call - tui_delete_invisible_windows. - * tui/tui-data.h (tui_delete_invisible_windows): Declare. - * tui/tui-data.c (tui_delete_invisible_windows): New function. + Revert commit 982a38f60b0. + * python/py-tui.c (gdbpy_tui_set_title): Restore use of get. -2019-08-13 Tom Tromey <tom@tromey.com> +2020-06-05 Andrew Burgess <andrew.burgess@embecosm.com> - * tui/tui-disasm.c (tui_show_disassem): Add assertion. Don't call - tui_add_win_to_layout. + * python/py-tui.c (gdbpy_tui_set_title): Use release, not get, to + avoid use after free. -2019-08-13 Tom Tromey <tom@tromey.com> +2020-06-05 Tom de Vries <tdevries@suse.de> - * tui/tui-layout.h (tui_default_win_height): Don't declare. - * tui/tui-layout.c (tui_default_win_height): Now static. + * NEWS: Fix typos. -2019-08-13 Tom Tromey <tom@tromey.com> +2020-06-04 Simon Marchi <simon.marchi@efficios.com> - * tui/tui-layout.c (show_layout): Unify all layout cases into a - single switch. - (show_source_disasm_command, show_source_or_disasm_and_command): - Don't check current layout. + * dwarf2/read.c (dwarf2_read_gdb_index): Save partial_symtabs in + the per_bfd object. + (dwarf2_read_debug_names): Likewise. + (dwarf2_initialize_objfile): Use partial_symtabs from per_bfd + object when re-using a per_bfd object with an index. -2019-08-13 Tom Tromey <tom@tromey.com> +2020-06-03 Tom de Vries <tdevries@suse.de> - * tui/tui-wingeneral.c (make_all_visible): Remove. - (tui_make_all_invisible): Simplify. - * tui/tui-layout.c (tui_make_all_invisible): Move from - tui-wingeneral.c; simplify. - (show_layout): Hoist call to tui_make_all_invisible. - (show_data): Don't call tui_make_all_invisible. + PR symtab/26046 + * dwarf2/read.c (scan_partial_symbols): Recurse into DW_TAG_subprogram + children for C++. + (load_partial_dies): Don't skip DW_TAG_inlined_subroutine child of + DW_TAG_subprogram. -2019-08-13 Tom Tromey <tom@tromey.com> +2020-06-02 Andrew Burgess <andrew.burgess@embecosm.com> - * tui/tui-wingeneral.h (tui_make_all_visible): Don't declare. - * tui/tui-wingeneral.c (tui_make_all_visible): Remove. + * ada-lang.c (ada_language_data): Delete skip_trampoline + initializer. + * c-lang.c (c_language_data): Likewise. + (cplus_language_data): Likewise. + (cplus_language::skip_trampoline): New member function. + (asm_language_data): Delete skip_trampoline initializer. + (minimal_language_data): Likewise. + * d-lang.c (d_language_data): Likewise. + * f-lang.c (f_language_data): Likewise. + * go-lang.c (go_language_data): Likewise. + * language.c (unk_lang_trampoline): Delete function. + (skip_language_trampoline): Update. + (unknown_language_data): Delete skip_trampoline initializer. + (auto_language_data): Likewise. + * language.h (language_data): Delete skip_trampoline field. + (language_defn::skip_trampoline): New function. + * m2-lang.c (m2_language_data): Delete skip_trampoline + initializer. + * objc-lang.c (objc_skip_trampoline): Delete function, move + implementation to objc_language::skip_trampoline. + (objc_language_data): Delete skip_trampoline initializer. + (objc_language::skip_trampoline): New member function with + implementation from objc_skip_trampoline. + * opencl-lang.c (opencl_language_data): Delete skip_trampoline + initializer. + * p-lang.c (pascal_language_data): Likewise. + * rust-lang.c (rust_language_data): Likewise. -2019-08-13 Tom Tromey <tom@tromey.com> +2020-06-02 Andrew Burgess <andrew.burgess@embecosm.com> - * tui/tui-layout.c (current_layout, tui_current_layout): Move from - tui-data.c. - (show_source_disasm_command, show_data) - (show_source_or_disasm_and_command): Don't use - tui_set_current_layout_to. - * tui/tui-data.h (tui_set_current_layout_to): Don't declare. - * tui/tui-data.c (current_layout, tui_current_layout): Move to - tui-layout.c. - (tui_set_current_layout_to): Remove. + * ada-lang.c (ada_language_data): Delete la_demangle initializer. + (ada_language::demangle): New member function. + * c-lang.c (c_language_data): Delete la_demangle initializer. + (cplus_language_data): Delete la_demangle initializer. + (cplus_language::demangle): New member function. + (asm_language_data): Delete la_demangle initializer. + (minimal_language_data): Delete la_demangle initializer. + * d-lang.c (d_language_data): Delete la_demangle initializer. + (d_language::demangle): New member function. + * f-lang.c (f_language_data): Delete la_demangle initializer. + (f_language::demangle): New member function. + * go-lang.c (go_language_data): Delete la_demangle initializer. + (go_language::demangle): New member function. + * language.c (language_demangle): Update. + (unk_lang_demangle): Delete. + (unknown_language_data): Delete la_demangle initializer. + (unknown_language::demangle): New member function. + (auto_language_data): Delete la_demangle initializer. + (auto_language::demangle): New member function. + * language.h (language_data): Delete la_demangle field. + (language_defn::demangle): New function. + * m2-lang.c (m2_language_data): Delete la_demangle initializer. + * objc-lang.c (objc_language_data): Delete la_demangle + initializer. + (objc_language::demangle): New member function. + * opencl-lang.c (opencl_language_data): Delete la_demangle + initializer. + * p-lang.c (pascal_language_data): Likewise. + * rust-lang.c (rust_language_data): Likewise. + (rust_language::demangle): New member function. -2019-08-13 Tom Tromey <tom@tromey.com> +2020-06-02 Andrew Burgess <andrew.burgess@embecosm.com> - * tui/tui-layout.c (tui_set_layout): Update. - * tui/tui-data.h (struct tui_layout_def): Remove. - (tui_layout_def): Don't declare. - * tui/tui-data.c (layout_def): Remove. - (tui_layout_def): Remove. + * ada-lang.c (ada_language_data): Delete la_print_type + initializer. + (ada_language::print_type): New member function. + * c-lang.c (c_language_data): Delete la_print_type initializer. + (c_language::print_type): New member function. + (cplus_language_data): Delete la_print_type initializer. + (cplus_language::print_type): New member function. + (asm_language_data): Delete la_print_type initializer. + (asm_language::print_type): New member function. + (minimal_language_data): Delete la_print_type initializer. + (minimal_language::print_type): New member function. + * d-lang.c (d_language_data): Delete la_print_type initializer. + (d_language::print_type): New member function. + * f-lang.c (f_language_data): Delete la_print_type initializer. + (f_language::print_type): New member function. + * go-lang.c (go_language_data): Delete la_print_type initializer. + (go_language::print_type): New member function. + * language.c (unk_lang_print_type): Delete. + (unknown_language_data): Delete la_print_type initializer. + (unknown_language::print_type): New member function. + (auto_language_data): Delete la_print_type initializer. + (auto_language::print_type): New member function. + * language.h (language_data): Delete la_print_type field. + (language_defn::print_type): New function. + (LA_PRINT_TYPE): Update. + * m2-lang.c (m2_language_data): Delete la_print_type initializer. + (m2_language::print_type): New member function. + * objc-lang.c (objc_language_data): Delete la_print_type + initializer. + (objc_language::print_type): New member function. + * opencl-lang.c (opencl_print_type): Delete, implementation moved + to opencl_language::print_type. + (opencl_language_data): Delete la_print_type initializer. + (opencl_language::print_type): New member function, implementation + from opencl_print_type. + * p-lang.c (pascal_language_data): Delete la_print_type + initializer. + (pascal_language::print_type): New member function. + * rust-lang.c (rust_print_type): Delete, implementation moved to + rust_language::print_type. + (rust_language_data): Delete la_print_type initializer. + (rust_language::print_type): New member function, implementation + from rust_print_type. + +2020-06-02 Andrew Burgess <andrew.burgess@embecosm.com> + + * ada-lang.c (ada_sniff_from_mangled_name): Delete function, + implementation moves to... + (ada_language::sniff_from_mangled_name): ...here. Update return + type. + (ada_language_data): Delete la_sniff_from_mangled_name + initializer. + * c-lang.c (c_language_data): Likewise. + (cplus_language_data): Likewise. + (cplus_language::sniff_from_mangled_name): New member function, + implementation taken from gdb_sniff_from_mangled_name. + (asm_language_data): Delete la_sniff_from_mangled_name + initializer. + (minimal_language_data): Likewise. + * cp-support.c (gdb_sniff_from_mangled_name): Delete, + implementation moves to cplus_language::sniff_from_mangled_name. + * cp-support.h (gdb_sniff_from_mangled_name): Delete declaration. + * d-lang.c (d_sniff_from_mangled_name): Delete, implementation + moves to... + (d_language::sniff_from_mangled_name): ...here. + (d_language_data): Delete la_sniff_from_mangled_name initializer. + * f-lang.c (f_language_data): Likewise. + * go-lang.c (go_sniff_from_mangled_name): Delete, implementation + moves to... + (go_language::sniff_from_mangled_name): ...here. + (go_language_data): Delete la_sniff_from_mangled_name initializer. + * language.c (language_sniff_from_mangled_name): Delete. + (unknown_language_data): Delete la_sniff_from_mangled_name + initializer. + (auto_language_data): Likewise. + * language.h (language_data): Delete la_sniff_from_mangled_name + field. + (language_defn::sniff_from_mangled_name): New function. + (language_sniff_from_mangled_name): Delete declaration. + * m2-lang.c (m2_language_data): Delete la_sniff_from_mangled_name + field. + * objc-lang.c (objc_sniff_from_mangled_name): Delete, + implementation moves to... + (objc_language::sniff_from_mangled_name): ...here. + (objc_language_data): Delete la_sniff_from_mangled_name initializer. + * opencl-lang.c (opencl_language_data): Likewise. + * p-lang.c (pascal_language_data): Likewise. + * rust-lang.c (rust_sniff_from_mangled_name): Delete, + implementation moves to... + (rust_language::sniff_from_mangled_name): ...here. + (rust_language_data): Delete la_sniff_from_mangled_name + initializer. + * symtab.c (symbol_find_demangled_name): Call + sniff_from_mangled_name member function. -2019-08-13 Tom Tromey <tom@tromey.com> +2020-06-02 Andrew Burgess <andrew.burgess@embecosm.com> - * tui/tui-winsource.h (struct tui_source_window_base) - <clear_detail>: No longer "override". - * tui/tui-regs.h (struct tui_data_window) <clear_detail>: Remove. - * tui/tui-regs.c (tui_data_window::clear_detail): Remove. - * tui/tui-data.h (struct tui_win_info) <clear_detail>: Remove. - * tui/tui-command.h (struct tui_cmd_window) <clear_detail>: - Remove. - * tui/tui-command.c (tui_cmd_window::clear_detail): Remove. + * ada-lang.c (ada_language_data): Delete la_search_name_hash + initializer. + * c-lang.c (c_language_data): Likewise. + (cplus_language_data): Likewise. + (cplus_language::search_name_hash): New member function. + (asm_language_data): Delete la_search_name_hash initializer. + (minimal_language_data): Likewise. + * d-lang.c (d_language_data): Likewise. + * dictionary.c (default_search_name_hash): Rename to... + (language_defn::search_name_hash): ...this. + * f-lang.c (f_language_data): Likewise. + (f_language::search_name_hash): New member function. + * go-lang.c (go_language_data): Delete la_search_name_hash + initializer. + * language.c (unknown_language_data): Likewise. + (auto_language_data): Likewise. + * language.h (struct language_data): Delete la_search_name_hash + field. + (language_defn::search_name_hash): Declare new member function. + (default_search_name_hash): Delete declaration. + * m2-lang.c (m2_language_data): Delete la_search_name_hash + initializer. + * objc-lang.c (objc_language_data): Likewise. + * opencl-lang.c (opencl_language_data): Likewise. + * p-lang.c (pascal_language_data): Likewise. + * rust-lang.c (rust_language_data): Likewise. + * symtab.c (search_name_hash): Update call. -2019-08-13 Tom Tromey <tromey@adacore.com> +2020-06-02 Andrew Burgess <andrew.burgess@embecosm.com> - * tracepoint.c: Don't include readline.h or history.h. + * ada-lang.c (ada_language_data): Delete la_get_compile_instance + initializer. + * c-lang.c (class compile_instance): Declare. + (c_language_data): Delete la_get_compile_instance initializer. + (c_language::get_compile_instance): New member function. + (cplus_language_data): Delete la_get_compile_instance initializer. + (cplus_language::get_compile_instance): New member function. + (asm_language_data): Delete la_get_compile_instance initializer. + (minimal_language_data): Likewise. + * c-lang.h (c_get_compile_context): Update comment. + (cplus_get_compile_context): Update comment. + * compile/compile.c (compile_to_object): Update calls, don't rely + on function pointer being NULL. + * d-lang.c (d_language_data): Delete la_get_compile_instance + initializer. + * f-lang.c (f_language_data): Likewise. + * go-lang.c (go_language_data): Likewise. + * language.c (unknown_language_data): Likewise. + (auto_language_data): Likewise. + * language.h (language_data): Delete la_get_compile_instance field. + (language_defn::get_compile_instance): New member function. + * m2-lang.c (m2_language_data): Delete la_get_compile_instance + initializer. + * objc-lang.c (objc_language_data): Likewise. + * opencl-lang.c (opencl_language_data): Likewise. + * p-lang.c (pascal_language_data): Likewise. + * rust-lang.c (rust_language_data): Likewise. + +2020-06-02 Andrew Burgess <andrew.burgess@embecosm.com> + + * ada-lang.c (ada_add_all_symbols): Update comment. + (ada_iterate_over_symbols): Delete, move implementation to... + (ada_language::iterate_over_symbols): ...here, a new member + function, rewrite to use range based for loop. + (ada_language_data): Delete la_iterate_over_symbols initializer. + * c-lang.c (c_language_data): Likewise. + (cplus_language_data): Likewise. + (asm_language_data): Likewise. + (minimal_language_data): Likewise. + * d-lang.c (d_language_data): Likewise. + * f-lang.c (f_language_data): Likewise. + * go-lang.c (go_language_data): Likewise. + * language.c (unknown_language_data): Likewise. + (auto_language_data): Likewise. + * language.h (language_data): Delete la_iterate_over_symbols field. + (language_defn::iterate_over_symbols): New member function. + (LA_ITERATE_OVER_SYMBOLS): Update. + * linespec.c (iterate_over_all_matching_symtabs): Update. + * m2-lang.c (m2_language_data): Delete la_iterate_over_symbols + initializer. + * objc-lang.c (objc_language_data): Likewise. + * opencl-lang.c (opencl_language_data): Likewise. + * p-lang.c (pascal_language_data): Likewise. + * rust-lang.c (rust_language_data): Likewise. + +2020-06-02 Andrew Burgess <andrew.burgess@embecosm.com> + + * ada-lang.c (ada_language_data): Delete + la_lookup_transparent_type initializer. + * c-lang.c (c_language_data): Likewise. + (cplus_language_data): Likewise. + (cplus_language::lookup_transparent_type): New member function. + (asm_language_data): Delete la_lookup_transparent_type + initializer. + (minimal_language_data): Likewise. + * d-lang.c (d_language_data): Likewise. + * f-lang.c (f_language_data): Likewise. + * go-lang.c (go_language_data): Likewise. + * language.c (unknown_language_data): Likewise. + (auto_language_data): Likewise. + * language.h (struct language_data): Delete + la_lookup_transparent_type field. + (language_defn::lookup_transparent_type): New member function. + * m2-lang.c (m2_language_data): Delete la_lookup_transparent_type + initializer. + * objc-lang.c (objc_language_data): Likewise. + * opencl-lang.c (opencl_language_data): Likewise. + * p-lang.c (pascal_language_data): Likewise. + * rust-lang.c (rust_language_data): Likewise. + * symtab.c (symbol_matches_domain): Update call. + +2020-06-02 Andrew Burgess <andrew.burgess@embecosm.com> + + * ada-lang.c (ada_language_arch_info): Delete function, move + implementation to... + (ada_language::language_arch_info): ...here, a new member + function. + (ada_language_data): Delete la_language_arch_info. + * c-lang.c (c_language_data): Likewise. + (c_language::language_arch_info): New member function. + (cplus_language_arch_info): Delete function, move + implementation to... + (cplus_language::language_arch_info): ...here, a new member + function. + (cplus_language_data): Delete la_language_arch_info. + (asm_language_data): Likewise. + (asm_language::language_arch_info): New member function. + (minimal_language_data): Delete la_language_arch_info. + (minimal_language::language_arch_info): New member function. + * d-lang.c (d_language_arch_info): Delete function, move + implementation to... + (d_language::language_arch_info): ...here, a new member + function. + (d_language_data): Delete la_language_arch_info. + * f-lang.c (f_language_arch_info): Delete function, move + implementation to... + (f_language::language_arch_info): ...here, a new member + function. + (f_language_data): Delete la_language_arch_info. + * go-lang.c (go_language_arch_info): Delete function, move + implementation to... + (go_language::language_arch_info): ...here, a new member + function. + (go_language_data): Delete la_language_arch_info. + * language.c (unknown_language_data): Likewise. + (unknown_language::language_arch_info): New member function. + (auto_language_data): Delete la_language_arch_info. + (auto_language::language_arch_info): New member function. + (language_gdbarch_post_init): Update call to + la_language_arch_info. + * language.h (language_data): Delete la_language_arch_info + function pointer. + (language_defn::language_arch_info): New function. + * m2-lang.c (m2_language_arch_info): Delete function, move + implementation to... + (m2_language::language_arch_info): ...here, a new member + function. + (m2_language_data): Delete la_language_arch_info. + * objc-lang.c (objc_language_arch_info): Delete function, move + implementation to... + (objc_language::language_arch_info): ...here, a new member + function. + (objc_language_data): Delete la_language_arch_info. + * opencl-lang.c (opencl_language_arch_info): Delete function, move + implementation to... + (opencl_language::language_arch_info): ...here, a new member + function. + (opencl_language_data): Delete la_language_arch_info. + * p-lang.c (pascal_language_arch_info): Delete function, move + implementation to... + (pascal_language::language_arch_info): ...here, a new member + function. + (pascal_language_data): Delete la_language_arch_info. + * rust-lang.c (rust_language_arch_info): Delete function, move + implementation to... + (rust_language::language_arch_info): ...here, a new member + function. + (rust_language_data): Delete la_language_arch_info. -2019-08-12 Tom Tromey <tom@tromey.com> +2020-06-02 Andrew Burgess <andrew.burgess@embecosm.com> - * configure: Rebuild. - * configure.ac: Check for readline 7. - * NEWS: Mention readline 7 requirement. - * README: Update. + * ada-lang.c (ada_language_data): Delete la_pass_by_reference + initializer. + * c-lang.c (c_language_data): Likewise. + (cplus_language_data): Likewise. + (cplus_language::pass_by_reference_info): New method. + (asm_language_data): Delete la_pass_by_reference initializer. + (minimal_language_data): Likewise. + * cp-abi.c (cp_pass_by_reference): Remove use of + default_pass_by_reference. + * d-lang.c (d_language_data): Likewise. + * f-lang.c (f_language_data): Likewise. + * gnu-v3-abi.c (gnuv3_pass_by_reference): Remove use of + default_pass_by_reference. + * go-lang.c (go_language_data): Likewise. + * language.c (language_pass_by_reference): Update. + (default_pass_by_reference): Delete. + (unknown_language_data): Delete la_pass_by_reference + initializer. + (auto_language_data): Likewise. + * language.h (struct language_data): Delete la_pass_by_reference + field. + (language_defn::pass_by_reference_info): New member function. + (default_pass_by_reference): Delete declaration. + * m2-lang.c (m2_language_data): Delete la_pass_by_reference + initializer. + * objc-lang.c (objc_language_data): Likewise. + * opencl-lang.c (opencl_language_data): Likewise. + * p-lang.c (pascal_language_data): Likewise. + * rust-lang.c (rust_language_data): Likewise. + +2020-06-02 Andrew Burgess <andrew.burgess@embecosm.com> + + * ada-lang.c (ada_read_var_value): Delete function, move + implementation to... + (ada_language::read_var_value): ...here. + (ada_language_data): Delete la_read_var_value initializer. + * c-lang.c (c_language_data): Likewise. + (cplus_language_data): Likewise. + (minimal_language_data): Likewise. + * d-lang.c (d_language_data): Likewise. + * f-lang.c (f_language_data): Likewise. + * findvar.c (default_read_var_value): Rename to... + (language_defn::read_var_value): ...this. + * findvar.c (read_var_value): Update header comment, and change to + call member function instead of function pointer. + * go-lang.c (go_language_data): Likewise. + * language.c (unknown_language_data): Delete la_read_var_value + initializer. + (auto_language_data): Likewise. + * language.h (struct language_data): Delete la_read_var_value + field. + (language_defn::read_var_value): New member function. + (default_read_var_value): Delete declaration. + * m2-lang.c (m2_language_data): Delete la_read_var_value + initializer. + * objc-lang.c (objc_language_data): Likewise. + * opencl-lang.c (opencl_language_data): Likewise. + * p-lang.c (pascal_language_data): Likewise. + * rust-lang.c (rust_language_data): Likewise. + * value.h (default_read_var_value): Delete declaration. + +2020-06-02 Andrew Burgess <andrew.burgess@embecosm.com> + + * ada-lang.c (ada_print_array_index): Delete function, move + implementation to... + (ada_language::print_array_index): ...here. + (ada_language_data): Delete la_print_array_index initializer. + * c-lang.c (c_language_data): Likewise. + (cplus_language_data): Likewise. + (minimal_language_data): Likewise. + * d-lang.c (d_language_data): Likewise. + * f-lang.c (f_language_data): Likewise. + * go-lang.c (go_language_data): Likewise. + * language.c (default_print_array_index): Delete function, move + implementation to... + (language_defn::print_array_index): ...here. + (unknown_language_data): Delete la_print_array_index initializer. + (auto_language_data): Likewise. + * language.h (struct language_data): Delete la_print_array_index + field. + (language_defn::print_array_index): New member function. + (LA_PRINT_ARRAY_INDEX): Update. + (default_print_array_index): Delete declaration. + * m2-lang.c (m2_language_data): Delete la_print_array_index + initializer. + * objc-lang.c (objc_language_data): Likewise. + * opencl-lang.c (opencl_language_data): Likewise. + * p-lang.c (pascal_language_data): Likewise. + * rust-lang.c (rust_language_data): Likewise. + +2020-06-02 Andrew Burgess <andrew.burgess@embecosm.com> + + * gdb/ada-lang.c (ada_language_defn): Convert to... + (ada_language_data): ...this. + (class ada_language): New class. + (ada_language_defn): New static global. + * gdb/c-lang.c (c_language_defn): Convert to... + (c_language_data): ...this. + (class c_language): New class. + (c_language_defn): New static global. + (cplus_language_defn): Convert to... + (cplus_language_data): ...this. + (class cplus_language): New class. + (cplus_language_defn): New static global. + (asm_language_defn): Convert to... + (asm_language_data): ...this. + (class asm_language): New class. + (asm_language_defn): New static global. + (minimal_language_defn): Convert to... + (minimal_language_data): ...this. + (class minimal_language): New class. + (minimal_language_defn): New static global. + * gdb/d-lang.c (d_language_defn): Convert to... + (d_language_data): ...this. + (class d_language): New class. + (d_language_defn): New static global. + * gdb/f-lang.c (f_language_defn): Convert to... + (f_language_data): ...this. + (class f_language): New class. + (f_language_defn): New static global. + * gdb/go-lang.c (go_language_defn): Convert to... + (go_language_data): ...this. + (class go_language): New class. + (go_language_defn): New static global. + * gdb/language.c (unknown_language_defn): Remove declaration. + (current_language): Initialize to nullptr, real initialization is + moved to _initialize_language. + (languages): Delete global. + (language_defn::languages): Define. + (set_language_command): Use language_defn::languages. + (set_language): Likewise. + (range_error): Likewise. + (language_enum): Likewise. + (language_def): Likewise. + (add_set_language_command): Use language_def::languages for the + language list, and language_def to lookup language pointers. + (skip_language_trampoline): Use language_defn::languages. + (unknown_language_defn): Convert to... + (unknown_language_data): ...this. + (class unknown_language): New class. + (unknown_language_defn): New static global. + (auto_language_defn): Convert to... + (auto_language_data): ...this. + (class auto_language): New class. + (auto_language_defn): New static global. + (language_gdbarch_post_init): Use language_defn::languages. + (_initialize_language): Initialize current_language. + * gdb/language.h (struct language_defn): Rename to... + (struct language_data): ...this. + (struct language_defn): New. + (auto_language_defn): Delete. + (unknown_language_defn): Delete. + (minimal_language_defn): Delete. + (ada_language_defn): Delete. + (asm_language_defn): Delete. + (c_language_defn): Delete. + (cplus_language_defn): Delete. + (d_language_defn): Delete. + (f_language_defn): Delete. + (go_language_defn): Delete. + (m2_language_defn): Delete. + (objc_language_defn): Delete. + (opencl_language_defn): Delete. + (pascal_language_defn): Delete. + (rust_language_defn): Delete. + * gdb/m2-lang.c (m2_language_defn): Convert to... + (m2_language_data): ...this. + (class m2_language): New class. + (m2_language_defn): New static global. + * gdb/objc-lang.c (objc_language_defn): Convert to... + (objc_language_data): ...this. + (class objc_language): New class. + (objc_language_defn): New static global. + * gdb/opencl-lang.c (opencl_language_defn): Convert to... + (opencl_language_data): ...this. + (class opencl_language): New class. + (opencl_language_defn): New static global. + * gdb/p-lang.c (pascal_language_defn): Convert to... + (pascal_language_data): ...this. + (class pascal_language): New class. + (pascal_language_defn): New static global. + * gdb/rust-exp.y (rust_lex_tests): Use language_def to find + language pointer, update comment format. + * gdb/rust-lang.c (rust_language_defn): Convert to... + (rust_language_data): ...this. + (class rust_language): New class. + (rust_language_defn): New static global. -2019-08-12 Tom Tromey <tom@tromey.com> +2020-06-01 Andrew Burgess <andrew.burgess@embecosm.com> - * mingw-hdep.c (gdb_select): Remove readline hack. + * dwarf2/read.c (class lnp_state_machine) <m_last_address>: New + member variable. + <m_stmt_at_address>: New member variable. + (lnp_state_machine::record_line): Don't record some lines, update + tracking of is_stmt at the same address. + (lnp_state_machine::lnp_state_machine): Initialise new member + variables. -2019-08-09 Pedro Franco de Carvalho <pedromfc@linux.ibm.com> +2020-06-01 Samuel Thibault <samuel.thibault@ens-lyon.org> - * blockframe.c (find_pc_partial_function): Set *block to nullptr - when the function fails. + * config/i386/i386gnu.mn [%_S.o %_U.o] (COMPILE.post): Add + "-include gnu-nat-mig.h". + * gnu-nat-mig.h: New file. + * gnu-nat.c: Include "gnu-nat-mig.h". + (exc_server, msg_reply_server, notify_server, + process_reply_server): Remove declarations. + +2020-05-30 Samuel Thibault <samuel.thibault@ens-lyon.org> + + * gnu-nat.h (inf_validate_procs, inf_suspend, inf_set_traced, + steal_exc_port, proc_get_state, inf_clear_wait, inf_cleanup, + inf_startup, inf_update_suspends, inf_set_pid, inf_steal_exc_ports, + inf_validate_procinfo, inf_validate_task_sc, inf_restore_exc_ports, + inf_set_threads_resume_sc, inf_set_threads_resume_sc_for_signal_thread, + inf_resume, inf_set_step_thread, inf_detach, inf_attach, inf_signal, + inf_continue, make_proc, proc_abort, _proc_free, proc_update_sc, + proc_get_exception_port, proc_set_exception_port, _proc_get_exc_port, + proc_steal_exc_port, proc_restore_exc_port, proc_trace): Move functions + to gnu_nat_target class. + * gnu-nat.c: Likewise. + (inf_update_procs, S_proc_wait_reply, set_task_pause_cmd, + set_task_exc_port_cmd, set_signals_cmd, set_thread_pause_cmd, + set_thread_exc_port_cmd): Call inf_validate_procs through gnu_target + object. + (gnu_nat_target::create_inferior, gnu_nat_target::detach): Pass `this' + instead of `gnu_target'. + +2020-05-30 Samuel Thibault <samuel.thibault@ens-lyon.org> + + * i386-gnu-tdep.c: Include "gdbcore.h" + (gnu_sigtramp_code, i386_gnu_sc_reg_offset): New arrays. + (GNU_SIGTRAMP_LEN, GNU_SIGTRAMP_TAIL, + I386_GNU_SIGCONTEXT_THREAD_STATE_OFFSET): New macros + (i386_gnu_sigtramp_start, i386_gnu_sigtramp_p, + i386_gnu_sigcontext_addr): New functions + (i386gnu_init_abi): Register i386_gnu_sigtramp_p, + i386_gnu_sigcontext_addr, and i386_gnu_sc_reg_offset in the gdbarch + tdep. + +2020-05-30 Samuel Thibault <samuel.thibault@ens-lyon.org> + + * gnu-nat.c (gnu_nat_target::create_inferior): Move push_target call + before fork_inferior call. Avoid calling it if target_is_pushed returns + true. + +2020-05-30 Samuel Thibault <samuel.thibault@ens-lyon.org> + + * gnu-nat.h (gnu_target): New variable declaration. + * i386-gnu-nat.c (_initialize_i386gnu_nat): Initialize + gnu_target. + * gnu-nat.c (gnu_target): New variable. + (inf_validate_procs): Pass gnu_target to thread_change_ptid, + add_thread_silent, and add_thread calls. + (gnu_nat_target::create_inferior): Pass gnu_target to + add_thread_silent, thread_change_ptid call. + (gnu_nat_target::detach): Pass gnu_target to detach_inferior + call. -2019-08-09 Andreas Arnez <arnez@linux.ibm.com> +2020-05-30 Samuel Thibault <samuel.thibault@ens-lyon.org> - * s390-tdep.c (s390_type_align): New function. - (s390_gdbarch_init): Set it as type_align gdbarch method. + * gnu-nat.c (gnu_xfer_auxv): Remove unused `res' variable. + (gnu_nat_target::find_memory_regions): Remove unused + `old_address' variable. -2019-08-09 Tom de Vries <tdevries@suse.de> +2020-05-30 Samuel Thibault <samuel.thibault@ens-lyon.org> - PR gdb/24591 - * dwarf2read.c (dwarf2_fetch_die_loc_sect_off): Adjust pc_high and - pc_low with relocation offset. + * gnu-nat.c: Include "gdbarch.h". -2019-08-07 Tom Tromey <tromey@adacore.com> +2020-05-30 Samuel Thibault <samuel.thibault@ens-lyon.org> - * stack.c (print_frame_arg, read_frame_local, read_frame_arg) - (print_frame_args): Update. - * python/py-framefilter.c (py_print_single_arg, enumerate_args): - Update. - * mi/mi-cmd-stack.c (list_arg_or_local): Update. - * frame.h (struct frame_arg): Add initializers. - <error>: Now a unique_xmalloc_ptr. - -2019-08-07 Alan Hayward <alan.hayward@arm.com> - - * NEWS: Expand the Pointer Authentication entry. - * aarch64-tdep.c (aarch64_frame_unmask_address): Rename from this. - (aarch64_frame_unmask_lr): ... to this. - (aarch64_prologue_prev_register, aarch64_dwarf2_prev_register): - Call aarch64_frame_unmask_lr. - * frame.c (struct frame_info): Add "masked" variable. - (frame_set_previous_pc_masked) (frame_get_pc_masked): New functions. - (fprint_frame): Check for masked pc. - * frame.h (frame_set_previous_pc_masked) (frame_get_pc_masked): New - declarations. - * python/py-framefilter.c (py_print_frame): Check for masked pc. - * stack.c (print_frame): Check for masked pc. - -2019-08-06 Tom Tromey <tom@tromey.com> - - * stabsread.c (patch_block_stabs, read_one_struct_field) - (read_enum_type): Use obstack_strndup. - * rust-exp.y (rust_parser::copy_name): Use obstack_strndup. - * gdb_obstack.h (obstack_strndup): Use obstack_strndup. - * dwarf2read.c (guess_full_die_structure_name) - (anonymous_struct_prefix): Use obstack_strndup. - * dbxread.c (cp_set_block_scope): Use obstack_strndup. - * c-exp.y (yylex): Use obstack_strndup. - * ada-exp.y (write_object_renaming, write_ambiguous_var) - (write_var_or_type): Use obstack_strndup. - -2019-08-06 Tom Tromey <tom@tromey.com> - - * symfile.c (reread_symbols): Use obstack_strdup. - * stabsread.c (read_type): Use obstack_strdup. - * gdb_obstack.h (obstack_strdup): New overload. - * dwarf2read.c (dwarf2_compute_name, create_dwo_unit_in_dwp_v1) - (create_dwo_unit_in_dwp_v2, build_error_marker_type) - (dwarf2_canonicalize_name): Use obstack_strdup. - * dbxread.c (read_dbx_symtab): Use obstack_strdup. - * cp-support.c (inspect_type, replace_typedefs_qualified_name): - Use obstack_strdup. - -2019-08-06 Tom Tromey <tom@tromey.com> - - * gdb_obstack.h (obstack_strdup): Define. - * gdb_obstack.c (obstack_strdup): Don't define. - -2019-08-06 Tom Tromey <tom@tromey.com> - - * xcoffread.c (SYMNAME_ALLOC, process_xcoff_symbol): Use - obstack_strdup. - * typeprint.c (typedef_hash_table::find_global_typedef): Use - obstack_strdup. - * symfile.c (allocate_compunit_symtab): Use obstack_strdup. - * stabsread.c (common_block_start): Use obstack_strdup. - * objfiles.c (set_objfile_main_name, objfile): Use - obstack_strdup. - * namespace.c (add_using_directive): Use obstack_strdup. - * mdebugread.c (parse_symbol, parse_type): Use obstack_strdup. - * jit.c (finalize_symtab): Use obstack_strdup. - * dwarf2read.c (fixup_go_packaging, dwarf2_physname) - (guess_partial_die_structure_name, partial_die_info::fixup) - (dwarf2_name): Use obstack_strdup. - * coffread.c (coff_read_struct_type, coff_read_enum_type): Use - obstack_strdup. - * c-exp.y (scan_macro_expansion): Use obstack_strdup. - * buildsym.c (buildsym_compunit::end_symtab_with_blockvector): Use - obstack_strdup. - * ada-lang.c (ada_decode_symbol): Use obstack_strdup. - -2019-08-07 Philippe Waroquiers <philippe.waroquiers@skynet.be> - - * unittests/help-doc-selftests.c: New file. - * Makefile.in: Add the new file. - -2019-08-07 Philippe Waroquiers <philippe.waroquiers@skynet.be> - - * cli/cli-decode.h (print_doc_line): Add for_value_prefix argument. - * cli/cli-decode.c (print_doc_line): Likewise. It now prints - the full first line, except when FOR_VALUE_PREFIX. In this case, - the trailing '.' is not output, and the first character is uppercased. - (print_help_for_command): Update call to print_doc_line. - (print_doc_of_command): Likewise. - * cli/cli-setshow.c (deprecated_show_value_hack): Likewise. - * cli/cli-option.c (append_indented_doc): Do not append newline. - (build_help_option): Append newline after first appended_indented_doc - only if a second call is done. - (build_help): Append 2 new lines before each option, except the first - one. - * compile/compile.c (_initialize_compile): Add new lines after - %OPTIONS%, when not at the end of the help. - Change help doc or code - producing the help doc to respect the invariants. - * maint-test-options.c (_initialize_maint_test_options): Likewise. - Also removed the new line after 'Options:', as all other commands - do not put an empty line between 'Options:' and the first option. - * printcmd.c (_initialize_printcmd): Likewise. - * stack.c (_initialize_stack): Likewise. - * interps.c (interpreter_exec_cmd): Fix "Usage:" line that was - incorrectly telling COMMAND is optional. - * ada-lang.c (_initialize_ada_language): Change help doc or code - producing the help doc to respect the invariants. - * ada-tasks.c (_initialize_ada_tasks): Likewise. - * breakpoint.c (_initialize_breakpoint): Likewise. - * cli/cli-cmds.c (_initialize_cli_cmds): Likewise. - * cli/cli-logging.c (_initialize_cli_logging): Likewise. - * cli/cli-setshow.c (_initialize_cli_setshow): Likewise. - * cli/cli-style.c (cli_style_option::add_setshow_commands, - _initialize_cli_style): Likewise. - * corelow.c (core_target_info): Likewise. - * dwarf-index-cache.c (_initialize_index_cache): Likewise. - * dwarf2read.c (_initialize_dwarf2_read): Likewise. - * filesystem.c (_initialize_filesystem): Likewise. - * frame.c (_initialize_frame): Likewise. - * gnu-nat.c (add_task_commands): Likewise. - * infcall.c (_initialize_infcall): Likewise. - * infcmd.c (_initialize_infcmd): Likewise. - * interps.c (_initialize_interpreter): Likewise. - * language.c (_initialize_language): Likewise. - * linux-fork.c (_initialize_linux_fork): Likewise. - * maint-test-settings.c (_initialize_maint_test_settings): Likewise. - * maint.c (_initialize_maint_cmds): Likewise. - * memattr.c (_initialize_mem): Likewise. - * printcmd.c (_initialize_printcmd): Likewise. - * python/lib/gdb/function/strfns.py (_MemEq, _StrLen, _StrEq, - _RegEx): Likewise. - * ravenscar-thread.c (_initialize_ravenscar): Likewise. - * record-btrace.c (_initialize_record_btrace): Likewise. - * record-full.c (_initialize_record_full): Likewise. - * record.c (_initialize_record): Likewise. - * regcache-dump.c (_initialize_regcache_dump): Likewise. - * regcache.c (_initialize_regcache): Likewise. - * remote.c (add_packet_config_cmd, init_remote_threadtests, - _initialize_remote): Likewise. - * ser-tcp.c (_initialize_ser_tcp): Likewise. - * serial.c (_initialize_serial): Likewise. - * skip.c (_initialize_step_skip): Likewise. - * source.c (_initialize_source): Likewise. - * stack.c (_initialize_stack): Likewise. - * symfile.c (_initialize_symfile): Likewise. - * symtab.c (_initialize_symtab): Likewise. - * target-descriptions.c (_initialize_target_descriptions): Likewise. - * top.c (init_main): Likewise. - * tracefile-tfile.c (tfile_target_info): Likewise. - * tracepoint.c (_initialize_tracepoint): Likewise. - * tui/tui-win.c (_initialize_tui_win): Likewise. - * utils.c (add_internal_problem_command): Likewise. - * valprint.c (value_print_option_defs): Likewise. - -2019-08-06 Frank Ch. Eigler <fche@redhat.com> - - PR build/24886 - * configure.ac: Drop enable-libmcheck support. - * configure, config.in: Rebuild. - * libmcheck.m4: Remove. - * acinclude.m4: Don't include it. - * Makefile.in: Don't distribute it. - * top.c (print_gdb_configuration): Don't mention it. - -2019-08-06 Tom Tromey <tom@tromey.com> - - * utils.c (set_output_style): Sometimes pass stream to - emit_style_escape. - * ui-out.h (class ui_out) <can_emit_style_escape>: Declare. - * record-btrace.c (btrace_insn_history): Update. - * mi/mi-out.h (class mi_ui_out) <can_emit_style_escape>: New - method. - * disasm.h (gdb_pretty_print_disassembler): Add uiout parameter. - Update initializers. - <m_uiout>: New field. - <m_di>: Move lower. - * disasm.c (gdb_pretty_print_disassembler::pretty_print_insn): - Remove "uiout" parameter. - (dump_insns): Update. - * cli-out.h (class cli_ui_out) <can_emit_style_escape>: Declare. - * cli-out.c (cli_ui_out::can_emit_style_escape): New method. - -2019-08-06 Christian Biesinger <cbiesinger@google.com> - - * symtab.c (symbol_cache_lookup): Change int to enum block_enum. - (error_in_psymtab_expansion): Likewise. - (lookup_symbol_via_quick_fns): Likewise. - (basic_lookup_transparent_type_quick): Likewise. - (basic_lookup_transparent_type_1): Likewise. - -2019-08-06 Tom Tromey <tromey@adacore.com> - - * source.c (last_source_error): Now bool. - (print_source_lines_base): Make "noprint" bool. Only open - source file when last_source_visited changes. - -2019-08-06 Tom Tromey <tromey@adacore.com> - - * annotate.c (annotate_source_line): Use g_source_cache. - * source-cache.c (source_cache::get_plain_source_lines): Change - parameters. Populate m_offset_cache. - (source_cache::ensure): New method. - (source_cache::get_line_charpos): New method. - (extract_lines): Move lower. Change parameters. - (source_cache::get_source_lines): Move lower. - * source-cache.h (class source_cache): Update comment. - <get_line_charpos>: New method. - <get_source_lines>: Update comment. - <clear>: Clear m_offset_cache. - <get_plain_source_lines>: Change parameters. - <ensure>: New method - <m_offset_cache>: New member. - * source.c (forget_cached_source_info_for_objfile): Update. - (info_source_command): Use g_source_cache. - (find_source_lines, open_source_file_with_line_charpos): Remove. - (print_source_lines_base, search_command_helper): Use g_source_cache. - * source.h (open_source_file_with_line_charpos): Don't declare. - * symtab.h (struct symtab) <nlines, line_charpos>: Remove. - * tui/tui-source.c (tui_source_window::do_scroll_vertical): - Use g_source_cache. - -2019-08-06 Tom Tromey <tromey@adacore.com> - - * source-cache.c (source_cache::get_plain_source_lines): - Remove "first_line" and "last_line" parameters. - (source_cache::get_source_lines): Cache plain text. - * source-cache.h (class source_cache) - <get_plain_source_lines>: Update. - -2019-08-06 Tom Tromey <tromey@adacore.com> - - * source-cache.c (extract_lines): No longer a method. - Changed type of parameter. Include final newline. - (selftests::extract_lines_test): New function. - (_initialize_source_cache): Likewise. - * source-cache.h (class source_cache) - <extract_lines>: Don't declare. - -2019-08-06 Tom Tromey <tromey@adacore.com> - - * breakpoint.c (init_breakpoint_sal): Update. - (breakpoint): Update. - * breakpoint.h (struct breakpoint) <filter>: Now a - unique_xmalloc_ptr. + * reply_mig_hack.awk (Error return): Cast function through + void *, to bypass compiler function call check. -2019-08-05 Christian Biesinger <cbiesinger@google.com> +2020-05-30 Samuel Thibault <samuel.thibault@ens-lyon.org> - * NEWS: Mention dictionary access on blocks. - * python/py-block.c (blpy_getitem): New function. - (block_object_as_mapping): New struct. - (block_object_type): Use new struct for tp_as_mapping field. - -2019-08-05 Christian Biesinger <cbiesinger@google.com> - - * objfiles.h (objfile): Add a comment describing partial symbols. - -2019-08-05 Tom Tromey <tromey@adacore.com> - - * compile/compile.c (_initialize_compile): Use _(), not N_(). - * thread.c (_initialize_thread): Use _(), not N_(). - * stack.c (_initialize_stack): Use _(), not N_(). - * printcmd.c (_initialize_printcmd): Use _(), not N_(). - -2019-08-04 Simon Marchi <simon.marchi@polymtl.ca> - - * dwarf2read.c (struct dw2_symtab_iterator): - <want_specific_block>: Remove. - <block_index>: Change type to gdb::optional. - (dw2_symtab_iter_init): Remove WANT_SPECIFIC_BLOCK parameter, - change type of BLOCK_INDEX parameter to gdb::optional. - (dw2_symtab_iter_next): Re-write in function of gdb::optional. - (dw2_lookup_symbol): Don't pass argument for - WANT_SPECIFIC_BLOCK. - (dw2_expand_symtabs_for_function): Don't pass argument for - WANT_SPECIFIC_BLOCK, pass empty optional for BLOCK_INDEX. - (class dw2_debug_names_iterator) - <dw2_debug_names_iterator>: Remove WANT_SPECIFIC_BLOCK - parameter, change BLOCK_INDEX type to gdb::optional. - <m_want_specific_block>: Remove. - <m_block_index>: Change type to gdb::optional. - (dw2_debug_names_iterator::next): Change type of IS_STATIC to - gdb::optional. Re-write in function of gdb::optional. - (dw2_debug_names_lookup_symbol): Don't pass argument for - WANT_SPECIFIC_BLOCK. - (dw2_debug_names_expand_symtabs_for_function): Don't pass - argument for WANT_SPECIFIC_BLOCK, pass empty optional for - BLOCK_INDEX. - -2019-08-03 Philippe Waroquiers <philippe.waroquiers@skynet.be> - - * NEWS: Mention changes to "info sources" command. - -2019-08-03 Philippe Waroquiers <philippe.waroquiers@skynet.be> - - * symtab.c (filename_partial_match_opts): New struct type. - (struct output_source_filename_data): New members - regexp, c_regexp, partial_match. - (output_source_filename): Use new members to decide to print file. - (info_sources_option_defs): New variable. - (make_info_sources_options_def_group, print_info_sources_header, - info_sources_command_completer): - New functions. - (info_sources_command): Read new optional arguments. - (_initialize_symtab): Update info sources help. - -2019-08-02 Alexandre Oliva <oliva@adacore.com> - - * ada-lang.c (exception_support_info_v0): Renamed from... - (default_exception_support_info): ... this. Create new - definition for v1. - (ada_has_this_exception_support): Look up catch_handlers_sym. - (ada_exception_support_info_sniffer): Try v0 after default. - -2019-08-01 Tom Tromey <tromey@adacore.com> - - * ia64-libunwind-tdep.h (struct libunwind_descr): Include - gdbarch.h. - -2019-08-01 Christian Biesinger <cbiesinger@google.com> - - * s12z-tdep.c: Fix include path for s12z-opc.h. + * config/i386/i386gnu.mn (%_reply_S.c): Add dependency on + $(srcdir)/reply_mig_hack.awk. -2019-08-01 Alan Hayward <alan.hayward@arm.com> +2020-05-30 Samuel Thibault <samuel.thibault@ens-lyon.org> - * NEWS: Require GNU make 3.82. + * gnu-nat.h (gnu_debug_flag): Set type to bool. -2019-07-16 Tom Tromey <tom@tromey.com> +2020-05-30 Jonny Grant <jg@jguk.org> - * tui/tui-wingeneral.h (tui_copy_win, tui_box_win): Don't - declare. + * configure.ac (ACX_BUGURL): change bug URL to https. -2019-07-30 Tom Tromey <tromey@adacore.com> +2020-05-30 Pedro Alves <palves@redhat.com> - * block.c (contained_in): Remove BLOCK_FUNCTION check. + * cp-support.c (replace_typedefs_template): New. + (replace_typedefs_qualified_name): Handle + DEMANGLE_COMPONENT_TEMPLATE. -2019-07-30 Kevin Buettner <kevinb@redhat.com> +2020-05-29 Simon Marchi <simon.marchi@efficios.com> - * printcmd.c (print_address_symbolic): Print negative offsets. - (build_address_symbolic): Force signed arithmetic when computing - offset. + * dwarf2/comp-unit.c, dwarf2/comp-unit.h, dwarf2/index-cache.c, + dwarf2/index-cache.h, dwarf2/index-write.c, + dwarf2/index-write.h, dwarf2/line-header.c, + dwarf2/line-header.h, dwarf2/macro.c, dwarf2/macro.h, + dwarf2/read.c, dwarf2/read.h: Rename struct dwarf2_per_objfile + variables and fields from `dwarf2_per_objfile` to just + `per_objfile` throughout. -2019-07-30 Christian Biesinger <cbiesinger@google.com> +2020-05-28 Simon Marchi <simon.marchi@polymtl.ca> - PR/24474: Add a function to lookup static variables. - * NEWS: Mention this new function. - * python/py-symbol.c (gdbpy_lookup_static_symbol): New function. - * python/python-internal.h (gdbpy_lookup_static_symbol): New function. - * python/python.c (python_GdbMethods): Add new function. + * dwarf2/loc.c (class dwarf_evaluate_loc_desc) + <push_dwarf_reg_entry_value>: Add comment. -2019-07-29 Christian Biesinger <cbiesinger@google.com> +2020-05-28 Kevin Buettner <kevinb@redhat.com> + Keith Seitz <keiths@redhat.com> - * NEWS: Mention new functions Objfile.lookup_{global,static}_symbol. - * python/py-objfile.c (objfpy_lookup_global_symbol): New function. - (objfpy_lookup_static_symbol): New function. - (objfile_object_methods): Add new functions. + * python/python.c (do_start_initialization): Call PyEval_SaveThread + instead of PyEval_ReleaseLock. + (class gdbpy_gil): Move to earlier in file. + (finalize_python): Set gdb_python_initialized. + (gdbpy_check_quit_flag): Acquire GIL via gdbpy_gil. Return early + when not initialized. -2019-07-29 Philippe Waroquiers <philippe.waroquiers@skynet.be> +2020-05-28 Simon Marchi <simon.marchi@efficios.com> - * NEWS: Mention 'set|show print frame-info'. Mention new - 'presence' value for 'frame-arguments'. Mention new '-frame-info' - backtrace argument. Mention that python frame filtering code - is now consistent with what 'backtrace' command prints. + * dwarf2/loc.c (class dwarf_evaluate_loc_desc) + <push_dwarf_reg_entry_value>: Remove assert. Override + per_objfile with caller_per_objfile. -2019-07-29 Philippe Waroquiers <philippe.waroquiers@skynet.be> +2020-05-28 Tom de Vries <tdevries@suse.de> - * frame.h (enum print_what): New value 'SHORT_LOCATION', update - comments. - (print_frame_info_auto, print_frame_info_source_line, - print_frame_info_location, print_frame_info_source_and_location, - print_frame_info_location_and_address, print_frame_info_short_location): - New declarations. - (struct frame_print_options): New member print_frame_info. - * extension.h (enum ext_lang_frame_args): New value CLI_PRESENCE. - * stack.h (get_user_print_what_frame_info): New declaration. - (frame_show_address): New declaration. - * stack.c (print_frame_arguments_choices): New value 'presence'. - (print_frame_info_auto, print_frame_info_source_line, - print_frame_info_location, print_frame_info_source_and_location, - print_frame_info_location_and_address, print_frame_info_short_location, - print_frame_info_choices, print_frame_info_print_what): New definitions. - (print_frame_args): Only print dots for args if print frame-arguments - is 'presence'. - (frame_print_option_defs): New element for "frame-info". - (get_user_print_what_frame_info): New function. - (frame_show_address): Make non static. Move comment to stack.h. - (print_frame_info_to_print_what): New function. - (print_frame_info): Update comment. Use fp_opts.print_frame_info - to decide what to print. - (backtrace_command_1): Handle the new print_frame_arguments_presence - value. - (_initialize_stack): Call add_setshow_enum_cmd for frame-info. - * python/py-framefilter.c (py_print_args): Handle CLI_PRESENCE. - (py_print_frame): In non-mi mode, use LOCATION as default for - print_what, similarly to frame information printed directly by - backtrace command. Handle frame-info user option in non MI mode. + * dwarf2/read.c (dw2_symtab_iter_next, dw2_expand_marked_cus): Limit + PR gold/15646 workaround to symbol kind "type". -2019-07-27 Kevin Buettner <kevinb@redhat.com> +2020-05-27 Tom Tromey <tromey@adacore.com> - * linux-thread-db.c (thread_db_target::thread_handle_to_thread_info): - Add case for debugging 32-bit target on 64-bit host. Revise - comment. + * dwarf2/read.c (load_partial_dies): Use add_partial_symbol. -2019-07-27 Kevin Buettner <kevinb@redhat.com> +2020-05-27 Tom Tromey <tromey@adacore.com> - * infrun.c (fill_in_stop_func): Use find_pc_partial_function - instead of find_function_entry_range_from_pc. + * dwarf2/abbrev.h (struct abbrev_table) <lookup_abbrev>: Inline. + Use htab_find_with_hash. + <add_abbrev>: Remove "abbrev_number" parameter. + * dwarf2/abbrev.c (abbrev_table::add_abbrev): Remove + "abbrev_number" parameter. Use htab_find_slot_with_hash. + (hash_abbrev): Add comment. + (abbrev_table::lookup_abbrev): Move to header file. + (abbrev_table::read): Update. -2019-07-27 Kevin Buettner <kevinb@redhat.com> +2020-05-27 Tom Tromey <tromey@adacore.com> - * stack.c (find_frame_funname): Remove code which preferred - minsym over symtab sym in "certain pathological cases". - - * valprint.h (build_address_symbolic): Add "prefer_sym_over_minsym" - parameter. Change type of "do_demangle" to bool. - * disasm.c (gdb_pretty_print_disassembler::pretty_print_insn): - Pass suitable "prefer_sym_over_minsym" flag to - build_address_symbolic(). Don't output "+" for negative offsets. - * printcmd.c (print_address_symbolic): Update invocation of - build_address_symbolic to include a "prefer_sym_over_minsym" - flag. - (build_address_symbolic): Add "prefer_sym_over_minsym" parameter. - Restrict cases in which use of minimal symbol is preferred to that - of a found symbol. Update comments. + * dwarf2/read.c (struct partial_die_info) <name>: Declare new + method. + <canonical_name>: New member. + <raw_name>: Rename from "name". + (partial_die_info): Initialize canonical_name. + (scan_partial_symbols): Check raw_name. + (partial_die_parent_scope, partial_die_full_name) + (add_partial_symbol, add_partial_subprogram) + (add_partial_enumeration, load_partial_dies): Use "name" method. + (partial_die_info::name): New method. + (partial_die_info::read, guess_partial_die_structure_name) + (partial_die_info::fixup): Update. - * dwarf2-frame.c (dwarf2_frame_cache): Don't decode FDE instructions - for entry pc when entry pc is out of range for that FDE. +2020-05-27 Tom Tromey <tromey@adacore.com> -2019-07-26 Brian Callahan <bcallah@openbsd.org> + * dwarf2/attribute.h (struct attribute) <form_is_ref>: Inline. + <get_ref_die_offset>: Inline. + <get_ref_die_offset_complaint>: New method. + * dwarf2/attribute.c (attribute::form_is_ref): Move to header. + (attribute::get_ref_die_offset_complaint): Rename from + get_ref_die_offset. Just issue complaint. - PR gdb/24839: - * gdb/obsd-nat.c (obsd_nat_target::pid_to_str): Fix typo in return - type. +2020-05-27 Hannes Domani <ssbssa@yahoo.de> -2019-07-25 Christian Biesinger <cbiesinger@google.com> + * cli/cli-cmds.c (shell_escape): Move exit_status_set_internal_vars. - * python/py-objfile.c (add_separate_debug_file): Fix comment about - this function's Python signature. +2020-05-27 Hannes Domani <ssbssa@yahoo.de> + * exec.c (exec_file_attach): Use errno value of first openp failure. -2019-07-24 Christian Biesinger <cbiesinger@google.com> +2020-05-27 Hannes Domani <ssbssa@yahoo.de> - * compile/compile-object-load.c (compile_object_load): Pass GLOBAL_SCOPE. - * solib-spu.c (spu_lookup_lib_symbol): Pass GLOBAL_SCOPE. - * solib-svr4.c (elf_lookup_lib_symbol): Pass GLOBAL_SCOPE. - * symtab.c (lookup_global_symbol_from_objfile): Add a scope parameter. - * symtab.h (lookup_global_symbol_from_objfile): Likewise. + * nat/windows-nat.c (windows_thread_info::~windows_thread_info): + Don't close thread handle. +2020-05-27 Tom Tromey <tom@tromey.com> + Simon Marchi <simon.marchi@efficios.com> -2019-07-24 Yoshinori Sato <ysato@users.sourceforge.jp> + * objfiles.h (struct objfile) <partial_symtabs>: Now a + shared_ptr. + * dwarf2/read.h (struct dwarf2_per_objfile) <partial_symtabs>: New + member. + * dwarf2/read.c (dwarf2_per_bfd_bfd_data_key, + dwarf2_per_bfd_objfile_data_key>: New globals. + (dwarf2_has_info): Use shared dwarf2_per_bfd if possible. + (dwarf2_get_section_info): Use get_dwarf2_per_objfile. + (dwarf2_initialize_objfile): Consider cases where per_bfd can be + shared. + (dwarf2_build_psymtabs): Set objfile::partial_symtabs and + short-circuit when sharing. + (dwarf2_build_psymtabs): Set dwarf2_per_objfile::partial_symtabs. + (dwarf2_psymtab::expand_psymtab): Use free_cached_comp_units. + +2020-05-27 Simon Marchi <simon.marchi@efficios.com> + + * dwarf2/read.h (struct dwarf2_per_bfd) <line_header_hash>: Move + to... + (struct dwarf2_per_objfile) <line_header_hash>: ... here. + * dwarf2/read.c (handle_DW_AT_stmt_list): Update. + +2020-05-27 Simon Marchi <simon.marchi@efficios.com> + + * dwarf2/read.c (struct mapped_index_base) <symbol_name_at, + build_name_components, find_name_components_bounds>: + Add per_objfile parameter. + (struct mapped_index) <symbol_name_at>: Likewise. + (struct mapped_debug_names): Remove constructor. + <dwarf2_per_objfile>: Remove field. + <namei_to_name, symbol_name_at>: Add per_objfile parameter. + (mapped_index_base::find_name_components_bounds, + mapped_index_base::build_name_components, + dw2_expand_symtabs_matching_symbol): Likewise. + (class mock_mapped_index) <symbol_name_at>: Likewise. + (check_match): Likewise. + (check_find_bounds_finds): Likewise. + (test_mapped_index_find_name_component_bounds): Update. + (CHECK_MATCH): Update. + (dw2_expand_symtabs_matching): Update. + (class dw2_debug_names_iterator) <dw2_debug_names_iterator>: Add + per_objfile parameter. + <find_vec_in_debug_names>: Likewise. + <m_per_objfile>: New field. + (mapped_debug_names::namei_to_name): Add dwarf2_per_objfile + parameter. + (dw2_debug_names_iterator::find_vec_in_debug_names): Likewise. + (dw2_debug_names_iterator::next): Update. + (dw2_debug_names_lookup_symbol): Update. + (dw2_debug_names_expand_symtabs_for_function): Update. + (dw2_debug_names_map_matching_symbols): Update. + (dw2_debug_names_expand_symtabs_matching): Update. + (dwarf2_read_debug_names): Update. - * h8300-tdep.c (h8300_register_name_common): New. - h8300_register_name): Use h8300_register_name_common. - (h8300s_register_name): Likewise. - (h8300sx_register_name): Likewise. - (h8300h_register_nam): New. - (h8300_gdbarch_init): Use h8300h_register_name in h8300h machine. +2020-05-27 Simon Marchi <simon.marchi@efficios.com> + * dwarf2/read.h (struct dwarf2_cu): Forward-declare. + (struct dwarf2_per_bfd) <free_cached_comp_units>: Remove, + move to dwarf2_per_objfile. + <read_in_chain>: Remove. + (struct dwarf2_per_objfile) <get_cu, set_cu, remove_cu, + remove_all_cus, age_comp_units>: New methods. + <m_dwarf2_cus>: New member. + (struct dwarf2_per_cu_data) <cu>: Remove. + * dwarf2/read.c (struct dwarf2_cu) <read_in_chain>: Remove. + (age_cached_comp_units, free_one_cached_comp_unit): Remove, + moved to methods of dwarf2_per_objfile. + (dwarf2_clear_marks): Remove. + (dwarf2_queue_item::~dwarf2_queue_item): Update. + (dwarf2_per_bfd::~dwarf2_per_bfd): Don't free dwarf2_cus. + (dwarf2_per_bfd::free_cached_comp_units): Remove. + (dwarf2_per_objfile::remove_all_cus): New. + (class free_cached_comp_units) <~free_cached_comp_units>: + Update. + (load_cu): Update. + (dw2_do_instantiate_symtab): Adjust. + (fill_in_sig_entry_from_dwo_entry): Adjust. + (cutu_reader::init_tu_and_read_dwo_dies): Update. + (cutu_reader::cutu_reader): Likewise. + (cutu_reader::keep): Use dwarf2_per_objfile::set_cu. + (cutu_reader::cutu_reader): Use dwarf2_per_objfile::get_cu. + (process_psymtab_comp_unit): Use dwarf2_per_objfile::remove_cu + and dwarf2_per_objfile::age_comp_units. + (load_partial_comp_unit): Update. + (maybe_queue_comp_unit): Use dwarf2_per_objfile::get_cu. + (process_queue): Likewise. + (find_partial_die): Use dwarf2_per_objfile::get_cu instead of cu + backlink. + (dwarf2_read_addr_index): Likewise. + (follow_die_offset): Likewise. + (dwarf2_fetch_die_loc_sect_off): Likewise. + (dwarf2_fetch_constant_bytes): Likewise. + (dwarf2_fetch_die_type_sect_off): Likewise. + (follow_die_sig_1): Likewise. + (load_full_type_unit): Likewise. + (read_signatured_type): Likewise. + (dwarf2_cu::dwarf2_cu): Don't set cu field. + (dwarf2_cu::~dwarf2_cu): Remove. + (dwarf2_per_objfile::get_cu): New. + (dwarf2_per_objfile::set_cu): New. + (age_cached_comp_units): Rename to... + (dwarf2_per_objfile::age_comp_units): ... this. Adjust + to std::unordered_map. + (free_one_cached_comp_unit): Rename to... + (dwarf2_per_objfile::remove_cu): ... this. Adjust + to std::unordered_map. + (dwarf2_per_objfile::~dwarf2_per_objfile): New. + (dwarf2_mark_helper): Use dwarf2_per_objfile::get_cu, expect + a dwarf2_per_objfile in data. + (dwarf2_mark): Pass dwarf2_per_objfile in data to htab_traverse. + (dwarf2_clear_marks): Remove. + +2020-05-27 Simon Marchi <simon.marchi@efficios.com> + + * dwarf2/read.c (class cutu_reader) <cutu_reader>: Replace + `int use_existing_cu` parameter with `dwarf2_cu *existing_cu`. + (init_tu_and_read_dwo_dies): Likewise. + (cutu_reader::init_tu_and_read_dwo_dies): Likewise. + (cutu_reader::cutu_reader): Likewise. + (load_partial_comp_unit): Likewise. + (process_psymtab_comp_unit): Update. + (build_type_psymtabs_1): Update. + (process_skeletonless_type_unit): Update. + (load_full_comp_unit): Update. + (find_partial_die): Update. + (dwarf2_read_addr_index): Update. + (read_signatured_type): Update. + +2020-05-27 Simon Marchi <simon.marchi@polymtl.ca> + + * dwarf2/read.h (struct dwarf2_per_cu_data) <m_header, + m_header_read_in>: New fields. + <get_header>: New method. + * dwarf2/read.c (per_cu_header_read_in): Remove. + (dwarf2_per_cu_data::get_header): New. + (dwarf2_per_cu_data::addr_size): Update. + (dwarf2_per_cu_data::offset_size): Update. + (dwarf2_per_cu_data::ref_addr_size): Update. + +2020-05-27 Simon Marchi <simon.marchi@polymtl.ca> + + * dwarf2/read.c (load_cu): Return dwarf2_cu. + (dw2_do_instantiate_symtab): Update. + (queue_and_load_all_dwo_tus): Change parameter from + dwarf2_per_cu_data to dwarf2_cu. + (dwarf2_fetch_die_loc_sect_off): Update. + (dwarf2_fetch_constant_bytes): Update. + (dwarf2_fetch_die_type_sect_off): Update. -2019-07-23 Srinath Parvathaneni <srinath.parvathaneni@arm.com> +2020-05-27 Simon Marchi <simon.marchi@polymtl.ca> - * arm-tdep.c (arm_skip_cmse_entry): New function. - (arm_is_sgstubs_section): New function. - (arm_skip_stub): Add call to arm_skip_cmse_entry function. + * dwarf2/read.c (process_full_comp_unit, + process_full_type_unit): Remove per_cu, per_objfile paramters. + Add dwarf2_cu parameter. + (process_queue): Update. + +2020-05-27 Simon Marchi <simon.marchi@polymtl.ca> + + * dwarf2/read.c (create_cu_from_index_list): Replace + dwarf2_per_objfile parameter with dwarf2_per_bfd. + (create_cus_from_index_list): Likewise. + (create_cus_from_index): Likewise. + (create_signatured_type_table_from_index): Likewise. + (create_cus_from_debug_names_list): Likewise. + (create_cus_from_debug_names): Likewise. + (dwarf2_read_gdb_index): Update. + (dwarf2_read_debug_names): Update. -2019-07-22 Tom Tromey <tom@tromey.com> +2020-05-27 Tom Tromey <tom@tromey.com> + Simon Marchi <simon.marchi@efficios.com> - * tui/tui-win.c (tui_win_info::make_invisible_and_set_new_height): - Don't self-assign. + * dwarf2/read.h (struct dwarf2_per_objfile) + <get_type_for_signatured_type, set_type_for_signatured_type>: + New methods. + <m_type_map>: New member. + (struct signatured_type) <type>: Remove. + * dwarf2/read.c + (dwarf2_per_objfile::get_type_for_signatured_type, + dwarf2_per_objfile::set_type_for_signatured_type): New. + (get_signatured_type): Use new methods. + +2020-05-27 Tom Tromey <tom@tromey.com> + Simon Marchi <simon.marchi@efficios.com> + + * dwarf2/read.h (struct type_unit_group_unshareable): New. + (struct dwarf2_per_objfile) <type_units>: New member. + <get_type_unit_group_unshareable>: New method. + * dwarf2/read.c (struct type_unit_group) <compunit_symtab, + num_symtabs, symtabs>: Remove; move to + type_unit_group_unshareable. + (dwarf2_per_objfile::get_type_unit_group_unshareable): New. + (process_full_type_unit, dwarf2_cu::setup_type_unit_groups) + (dwarf2_cu::setup_type_unit_groups): Use type_unit_group_unshareable. + +2020-05-27 Simon Marchi <simon.marchi@efficios.com> + + * dwarf2/read.h (struct dwarf2_per_cu_data): + <dwarf2_per_objfile>: Remove. + * dwarf2/read.c (create_cu_from_index_list): Don't assign + dwarf2_per_objfile. + (create_signatured_type_table_from_index): Likewise. + (create_signatured_type_table_from_debug_names): Likewise. + (create_debug_type_hash_table): Likewise. + (fill_in_sig_entry_from_dwo_entry): Likewise. + (create_type_unit_group): Likewise. + (read_comp_units_from_section): Likewise. + (create_cus_hash_table): Likewise. -2019-07-22 Andrew Burgess <andrew.burgess@embecosm.com> +2020-05-27 Simon Marchi <simon.marchi@efficios.com> - * c-typeprint.c (c_print_typedef): Pass -1 instead of 0 to - type_print. + * dwarf2/read.c (process_psymtab_comp_unit): Remove reference to + dwarf2_per_cu_data::dwarf2_per_objfile. + (compute_compunit_symtab_includes): Likewise. + (dwarf2_cu::start_symtab): Likewise. -2019-07-22 Andrew Burgess <andrew.burgess@embecosm.com> +2020-05-27 Simon Marchi <simon.marchi@polymtl.ca> - * symtab.c (search_symbols): Adjust msymbol matching type arrays - so that GDB doesn't match any msymbols when searching in the - TYPES_DOMAIN. - (print_symbol_info): Print using typedef_print or type_print based - on the type of the symbol. Add updated FIXME comment moved from... - (_initialize_symtab): ... move and update FIXME comment to above. + * dwarf2/read.h (dwarf2_get_die_type): Add dwarf2_per_objfile + parameter. + * dwarf2/read.c (get_die_type_at_offset): Likewise. + (read_namespace_alias): Update. + (lookup_die_type): Update. + (dwarf2_get_die_type): Add dwarf2_per_objfile parameter. + * dwarf2/loc.c (class dwarf_evaluate_loc_desc) <get_base_type>: + Update. + (disassemble_dwarf_expression): Update. + +2020-05-27 Simon Marchi <simon.marchi@efficios.com> + + * dwarf2/read.h (struct dwarf2_queue_item): Add + dwarf2_per_objfile parameter, assign new parameter. + <per_objfile>: New field. + * dwarf2/read.c (free_one_cached_comp_unit): Add + dwarf2_per_objfile parameter. + (queue_comp_unit): Likewise. + (dw2_do_instantiate_symtab): Update. + (process_psymtab_comp_unit): Update. + (maybe_queue_comp_unit): Add dwarf2_per_objfile parameter. + (process_imported_unit_die): Update. + (queue_and_load_dwo_tu): Update. + (follow_die_offset): Update. + (follow_die_sig_1): Update. + +2020-05-27 Simon Marchi <simon.marchi@efficios.com> + + * dwarf2/read.h (struct dwarf2_per_cu_data) <objfile>: Remove. + * dwarf2/read.c (dwarf2_compute_name): Pass per_objfile down. + (read_call_site_scope): Assign per_objfile. + (dwarf2_per_cu_data::objfile): Remove. + * gdbtypes.h (struct call_site) <per_objfile>: New member. + * dwarf2/loc.h (dwarf2_evaluate_loc_desc): Add + dwarf2_per_objfile parameter. + * dwarf2/loc.c (dwarf2_evaluate_loc_desc_full): Add + dwarf2_per_objfile parameter. + (dwarf_expr_reg_to_entry_parameter): Add output + dwarf2_per_objfile parameter. + (locexpr_get_frame_base): Update. + (class dwarf_evaluate_loc_desc) <get_tls_address>: Update. + <push_dwarf_reg_entry_value>: Update. + <call_site_to_target_addr>: Update. + (dwarf_entry_parameter_to_value): Add dwarf2_per_objfile + parameter. + (value_of_dwarf_reg_entry): Update. + (rw_pieced_value): Update. + (indirect_synthetic_pointer): Update. + (dwarf2_evaluate_property): Update. + (dwarf2_loc_desc_get_symbol_read_needs): Add dwarf2_per_objfile + parameter. + (locexpr_read_variable): Update. + (locexpr_get_symbol_read_needs): Update. + (loclist_read_variable): Update. + +2020-05-27 Simon Marchi <simon.marchi@efficios.com> + + * dwarf2/read.h (dwarf2_fetch_die_loc_sect_off, + dwarf2_fetch_die_loc_cu_off, dwarf2_fetch_constant_bytes, + dwarf2_fetch_die_type_sect_off): Add dwarf2_per_objfile + parameter. + * dwarf2/read.c (dwarf2_fetch_die_loc_sect_off, + dwarf2_fetch_die_loc_cu_off, dwarf2_fetch_constant_bytes, + dwarf2_fetch_die_type_sect_off): Add dwarf2_per_objfile + parameter. + * dwarf2/loc.c (indirect_synthetic_pointer, per_cu_dwarf_call, + sect_variable_value): Add dwarf2_per_objfile parameter. + (class dwarf_evaluate_loc_desc) <dwarf_call, + dwarf_variable_value>: Update. + (fetch_const_value_from_synthetic_pointer): Add + dwarf2_per_objfile parameter. + (fetch_const_value_from_synthetic_pointer): Update. + (coerced_pieced_ref): Update. + (class symbol_needs_eval_context) <dwarf_call, + dwarf_variable_value>: Update. + (dwarf2_compile_expr_to_ax): Update. -2019-07-22 Andrew Burgess <andrew.burgess@embecosm.com> +2020-05-27 Simon Marchi <simon.marchi@efficios.com> - * NEWS: Mention adding -q option to "info types". - * symtab.c (struct info_types_options): New struct. - (info_types_options_defs): New variable. - (make_info_types_options_def_group): New function. - (info_types_command): Use gdb::option framework to parse options. - (info_types_command_completer): New function. - (_initialize_symtab): Extend the help text on "info types" and - register command completer. + * dwarf2/loc.c (allocate_piece_closure): Add dwarf2_per_objfile + parameter. + (dwarf2_evaluate_loc_desc_full): Update. -2019-07-21 Christian Biesinger <cbiesinger@google.com> +2020-05-27 Simon Marchi <simon.marchi@efficios.com> - * symtab.c (lookup_symbol_in_objfile_symtabs): Change int to block_enum. - (lookup_symbol_in_objfile): Change int to block_enum and add a - gdb_assert to make sure block_index is GLOBAL_BLOCK or STATIC_BLOCK. + * dwarf2/read.h (dwarf2_read_addr_index): Add dwarf2_per_objfile + parameter. + * dwarf2/read.c (dwarf2_read_addr_index): Likewise. + * dwarf2/loc.c (decode_debug_loclists_addresses): Add + dwarf2_per_objfile parameter. + (decode_debug_loc_dwo_addresses): Likewise. + (dwarf2_find_location_expression): Update. + (class dwarf_evaluate_loc_desc) <get_addr_index>: Update. + (locexpr_describe_location_piece): Add dwarf2_per_objfile + parameter. + (disassemble_dwarf_expression): Add dwarf2_per_objfile + parameter. + (locexpr_describe_location_1): Likewise. + (locexpr_describe_location): Update. -2019-07-20 Christian Biesinger <cbiesinger@google.com> +2020-05-27 Simon Marchi <simon.marchi@efficios.com> - * MAINTAINERS (Write After Approval): Add self. + * dwarf2/read.h (struct dwarf2_per_cu_data) <text_offset>: + Remove. + * dwarf2/read.c (dwarf2_per_cu_data::text_offset): Remove. + * dwarf2/loc.c (dwarf2_find_location_expression): Update. + (dwarf2_compile_property_to_c): Update. + (dwarf2_compile_expr_to_ax): Add dwarf2_per_objfile parameter, + use text offset from objfile. + (locexpr_tracepoint_var_ref): Update. + (locexpr_generate_c_location): Update. + (loclist_describe_location): Update. + (loclist_tracepoint_var_ref): Update. + * dwarf2/compile.h (compile_dwarf_bounds_to_c): Add + dwarf2_per_objfile parameter. + * dwarf2/loc2c.c (do_compile_dwarf_expr_to_c): Likewise, + use text offset from objfile. + (compile_dwarf_expr_to_c): Add dwarf2_per_objfile parameter. + +2020-05-27 Simon Marchi <simon.marchi@efficios.com> + + * dwarf2/expr.h (struct dwarf_expr_context) + <dwarf_expr_context>: Add dwarf2_per_objfile parameter. + <offset>: Remove. + <per_objfile>: New member. + * dwarf2/expr.c (dwarf_expr_context::dwarf_expr_context): Add + dwarf2_per_objfile parameter. Don't set offset, set + per_objfile. + (dwarf_expr_context::execute_stack_op): Use offset from objfile. + * dwarf2/frame.c (dwarf2_frame_find_fde): Return (by parameter) + a dwarf2_per_objfile object instead of an offset. + (class dwarf_expr_executor) <dwarf_expr_executor>: Add + constructor. + (execute_stack_op): Add dwarf2_per_objfile parameter, pass it + to dwarf2_expr_executor constructor. Don't set offset. + (dwarf2_fetch_cfa_info): Update. + (struct dwarf2_frame_cache) <text_offset>: Remove. + <per_objfile>: New field. + (dwarf2_frame_cache): Update. + (dwarf2_frame_prev_register): Update. + * dwarf2/loc.c (class dwarf_evaluate_loc_desc) + <dwarf_evaluate_loc_desc>: Add constructor. + (dwarf2_evaluate_loc_desc_full): Update. + (dwarf2_locexpr_baton_eval): Update. + (class symbol_needs_eval_context) <symbol_needs_eval_context>: + Add constructor. + (dwarf2_loc_desc_get_symbol_read_needs): Update. -2019-07-19 Andrew Burgess <andrew.burgess@embecosm.com> +2020-05-27 Simon Marchi <simon.marchi@efficios.com> - * riscv-tdep.c (riscv_push_dummy_code): Write a 4-byte nop - instruction to the dummy code region. + * dwarf2/read.h (struct dwarf2_per_cu_data) <addr_type, + addr_sized_int_type>: Move to dwarf2_cu. + <int_type>: Move to dwarf2_per_objfile. + (struct dwarf2_per_objfile) <int_type>: Move here. + * dwarf2/read.c (struct dwarf2_cu) <addr_type, + addr_sized_int_type>: Move here. + (read_func_scope): Update. + (read_array_type): Update. + (read_tag_string_type): Update. + (attr_to_dynamic_prop): Update. + (dwarf2_per_cu_data::int_type): Rename to... + (dwarf2_per_objfile::int_type): ... this. + (dwarf2_per_cu_data::addr_sized_int_type): Rename to... + (dwarf2_cu::addr_sized_int_type): ... this. + (read_subrange_type): Update. + (dwarf2_per_cu_data::addr_type): Rename to... + (dwarf2_cu::addr_type): ... this. + (set_die_type): Update. + +2020-05-27 Simon Marchi <simon.marchi@efficios.com> + + * dwarf2/read.c (queue_and_load_all_dwo_tus): Access per_objfile + data through per_cu->cu. + +2020-05-27 Simon Marchi <simon.marchi@efficios.com> + + * dwarf2/read.c (lookup_dwo_comp_unit): Change + dwarf2_per_cu_data parameter fo dwarf2_cu. + (lookup_dwo_type_unit): Likewise. + (read_cutu_die_from_dwo): Likewise. + (lookup_dwo_unit): Likewise. + (open_and_init_dwo_file): Likewise. + (lookup_dwo_cutu): Likewise. + (lookup_dwo_comp_unit): Likewise. + (lookup_dwo_type_unit): Likewise. + (cutu_reader::init_tu_and_read_dwo_dies): Update. + (cutu_reader::cutu_reader): Update. -2019-07-19 Tom Tromey <tromey@adacore.com> +2020-05-27 Simon Marchi <simon.marchi@efficios.com> - * contrib/ari/gdb_ari.sh: Mention C++11, not ISO C 90. - (ARGSUSED, PARAMS, __func__): Remove rules. + * dwarf2/read.c (process_full_comp_unit): Add dwarf2_per_objfile + parameter. + (process_full_type_unit): Likewise. + (process_queue): Update. -2019-07-19 Alan Hayward <alan.hayward@arm.com> +2020-05-27 Simon Marchi <simon.marchi@efficios.com> - * arm-tdep.c (_initialize_arm_tdep): Remove xml tests. - * features/arm/arm-with-iwmmxt.c: Remove. - * features/arm/arm-with-iwmmxt.xml: Remove. - * features/arm/arm-with-m-fpa-layout.c: Remove. - * features/arm/arm-with-m-fpa-layout.xml: Remove. - * features/arm/arm-with-m-vfp-d16.c: Remove. - * features/arm/arm-with-m-vfp-d16.xml: Remove. - * features/arm/arm-with-m.c: Remove. - * features/arm/arm-with-m.xml: Remove. - * features/arm/arm-with-neon.c: Remove. - * features/arm/arm-with-neon.xml: Remove. - * features/arm/arm-with-vfpv2.c: Remove. - * features/arm/arm-with-vfpv2.xml: Remove. - * features/arm/arm-with-vfpv3.c: Remove. - * features/arm/arm-with-vfpv3.xml: Remove. + * dwarf2/read.c (recursively_compute_inclusions): Add + dwarf2_per_objfile parameter. + (compute_compunit_symtab_includes): Likewise. + (process_cu_includes): Update. -2019-07-19 Alan Hayward <alan.hayward@arm.com> +2020-05-27 Simon Marchi <simon.marchi@efficios.com> - * arm-tdep.c (_initialize_arm_tdep): Add xml regression tests. + * dwarf2/read.c (create_partial_symtab): Add dwarf2_per_objfile + parameter. + (create_type_unit_group): Update. + (process_psymtab_comp_unit_reader): Update. + (build_type_psymtabs_reader): Update. + +2020-05-27 Simon Marchi <simon.marchi@efficios.com> + + * dwarf2/read.c (cutu_reader::keep): Access dwarf2_per_objfile + object through m_this_cu->cu. + +2020-05-27 Simon Marchi <simon.marchi@polymtl.ca> + + * dwarf2/read.c (queue_and_load_dwo_tu): Expect a dwarf2_cu as + the info parameter. + (queue_and_load_all_dwo_tus): Pass per_cu->cu. + +2020-05-27 Simon Marchi <simon.marchi@polymtl.ca> + + * dwarf2/read.c (class cutu_reader) <cutu_reader>: Add + per_objfile parameter. + (load_full_type_unit): Add per_objfile parameter. + (read_signatured_type): Likewise. + (load_full_comp_unit): Likewise. + (load_cu): Likewise. + (dw2_do_instantiate_symtab): Likewise. + (dw2_get_file_names): Likewise. + (dw2_map_symtabs_matching_filename): Update. + (dw_expand_symtabs_matching_file_matcher): Update. + (dw2_map_symbol_filenames): Update. + (process_psymtab_comp_unit): Add per_objfile parameter. + (build_type_psymtabs_1): Update. + (process_skeletonless_type_unit): Update. + (dwarf2_build_psymtabs_hard): Update. + (load_partial_comp_unit): Add per_objfile parameter. + (scan_partial_symbols): Update. + (load_full_comp_unit): Add per_objfile parameter. + (process_imported_unit_die): Update. + (create_cus_hash_table): Update. + (find_partial_die): Update. + (dwarf2_read_addr_index): Update. + (follow_die_offset): Update. + (dwarf2_fetch_die_loc_sect_off): Update. + (dwarf2_fetch_constant_bytes): Update. + (dwarf2_fetch_die_type_sect_off): Update. + (follow_die_sig_1): Update. + (load_full_type_unit): Add per_objfile parameter. + (read_signatured_type): Likewise. + +2020-05-27 Simon Marchi <simon.marchi@efficios.com> + + * dwarf2/read.c (lookup_dwo_unit): Use bfd_get_filename instead + of objfile_name. + +2020-05-27 Simon Marchi <simon.marchi@polymtl.ca> + + * dwarf2/read.h (struct dwarf2_per_bfd) <obfd>: New member. + (dwarf2_get_dwz_file): Replace parameter with dwarf2_per_bfd. + * dwarf2/read.c (dwarf2_per_bfd::dwarf2_per_bfd): Assign obfd + field. + (dwarf2_get_dwz_file): Replace parameter with dwarf2_per_bfd. + (create_cus_from_index): Update. + (dwarf2_read_gdb_index): Update. + (create_cus_from_debug_names): Update. + (dwarf2_read_debug_names): Update. + (get_abbrev_section_for_cu): Update. + (create_all_comp_units): Update. + (read_attribute_value): Update. + (get_debug_line_section): Update. + * dwarf2/index-cache.c (index_cache::store): Update. + * dwarf2/index-write.c (save_gdb_index_command): Update. + * dwarf2/macro.c (dwarf_decode_macro_bytes): Update. -2019-07-19 Alan Hayward <alan.hayward@arm.com> +2020-05-27 Simon Marchi <simon.marchi@polymtl.ca> - * arch/aarch32.c (aarch32_create_target_description): Create - target descriptions using features. - * arch/arm.c (arm_create_target_description) - (arm_create_mprofile_target_description): Likewise. - * arm-tdep.c (_initialize_arm_tdep): Remove tdesc init calls. + * dwarf2/read.h (struct dwarf2_per_cu_data) <per_bfd>: New + member. + * dwarf2/read.c (dwarf2_per_bfd::allocate_per_cu): Initialize + dwarf2_per_cu_data::per_bfd. + (dwarf2_per_bfd::allocate_signatured_type): Likewise. + (create_type_unit_group): Likewise. + (queue_comp_unit): Remove reference to + per_cu->dwarf2_per_objfile. + (maybe_queue_comp_unit): Likewise. + (fill_in_sig_entry_from_dwo_entry): Assign new field. + (create_cus_hash_table): Assign new field. + +2020-05-27 Simon Marchi <simon.marchi@efficios.com> + + * dwarf2/read.c: Replace + dwarf2_cu->per_cu->dwarf2_per_objfile references with + dwarf2_cu->per_objfile throughout. + +2020-05-27 Simon Marchi <simon.marchi@efficios.com> + + * dwarf2/read.c (dw2_do_instantiate_symtab): Add per_objfile + parameter, don't use per_cu->dwarf2_per_objfile. + (dw2_instantiate_symtab): Likewise. + (dw2_find_last_source_symtab): Update. + (dw2_map_expand_apply): Update. + (dw2_lookup_symbol): Update. + (dw2_expand_symtabs_for_function): Update. + (dw2_expand_all_symtabs): Update. + (dw2_expand_symtabs_with_fullname): Update. + (dw2_expand_symtabs_matching_one): Add per_objfile parameter, + don't use per_cu->dwarf2_per_objfile. + (dw2_expand_marked_cus): Update. + (dw2_find_pc_sect_compunit_symtab): Update. + (dw2_debug_names_lookup_symbol): Update. + (dw2_debug_names_expand_symtabs_for_function): Update. + (dw2_debug_names_map_matching_symbols): Update. + (dwarf2_psymtab::expand_psymtab): Update. + +2020-05-27 Simon Marchi <simon.marchi@efficios.com> + + * dwarf2/read.c (struct dwarf2_cu) <dwarf2_cu>: Add parameter. + <per_objfile>: New member. + (class cutu_reader) <init_tu_and_read_dwo_dies>: Add parameter. + (cutu_reader::init_tu_and_read_dwo_dies): Add parameter, update + call to dwarf2_cu. + (cutu_reader::cutu_reader): Update. + (dwarf2_cu::dwarf2_cu): Add parameter, initialize per_objfile. + +2020-05-27 Simon Marchi <simon.marchi@efficios.com> + + * dwarf2/read.h (struct dwarf2_per_bfd) <die_type_hash>: Move to + struct dwarf2_per_objfile. + (struct dwarf2_per_objfile) <die_type_hash>: Move from struct + dwarf2_per_bfd. + * dwarf2/read.c (set_die_type): Update. + (get_die_type_at_offset): Update. -2019-07-19 Alan Hayward <alan.hayward@arm.com> +2020-05-27 Tom Tromey <tom@tromey.com> + Simon Marchi <simon.marchi@efficios.com> - * Makefile.in: Add new files. - * aarch32-tdep.c: New file. - * aarch32-tdep.h: New file. - * aarch64-linux-nat.c (aarch64_linux_nat_target::read_description): - Call aarch32_read_description. - * arch/aarch32.c: New file. - * arch/aarch32.h: New file. - * arch/arm.c (arm_create_target_description) - (arm_create_mprofile_target_description): New function. - * arch/arm.h (arm_fp_type, arm_m_profile_type): New enum. - (arm_create_target_description) - (arm_create_mprofile_target_description): New declaration. - * arm-fbsd-tdep.c (arm_fbsd_read_description_auxv): Call - read_description functions. - * arm-linux-nat.c (arm_linux_nat_target::read_description): - Likewise. - * arm-linux-tdep.c (arm_linux_core_read_description): Likewise. - * arm-tdep.c (tdesc_arm_list): New variable. - (arm_register_g_packet_guesses): Call create description functions. - (arm_read_description) (arm_read_mprofile_description): New - function. - * arm-tdep.h (arm_read_description) - (arm_read_mprofile_description): Add declaration. - * configure.tgt: Add new files. - -2019-07-18 Guillaume LABARTHE <guillaume.labarthe@gmail.com> - - * top.c (new_ui_command): Open specified terminal just once. - -2019-07-18 Tom Tromey <tromey@adacore.com> - - * symtab.c (main_name): Constify return type. - * symfile.c (set_initial_language): Update. - * symtab.h (main_name): Constify return type. - -2019-07-17 Tom Tromey <tom@tromey.com> - - * tui/tui-winsource.c (tui_update_source_window) - (tui_update_source_window_as_is) - (tui_update_source_windows_with_line): Remove return. - * tui/tui-disasm.c (tui_show_disassem) - (tui_show_disassem_and_update_source): Remove return. - * tui/tui.c (tui_reset): Remove return. - * tui/tui-wingeneral.c - (tui_check_and_display_highlight_if_needed): Remove return. - -2019-07-17 Tom Tromey <tom@tromey.com> - - * tui/tui-win.c (parse_scrolling_args): Throw separate errors. - -2019-07-17 Tom Tromey <tom@tromey.com> - - * tui/tui-winsource.h (struct tui_exec_info_window) - (struct tui_source_window_base): Move from tui-data.h. - * tui/tui-winsource.c: Move many method definitions from - elsewhere. Remove "structuring" comments. - * tui/tui-wingeneral.c (tui_source_window_base::make_visible) - (tui_source_window_base::refresh_window): Move to - tui-winsource.c. - * tui/tui-win.c (tui_source_window_base::refresh_all) - (tui_source_window_base::update_tab_width) - (tui_source_window_base::set_new_height) - (tui_source_window_base::do_make_visible_with_new_height): Move to - tui-winsource.c. - * tui/tui-source.h: Update. - * tui/tui-source.c (tui_source_window_base::reset): Move to - tui-winsource.c. - * tui/tui-disasm.h: Update. - * tui/tui-data.h (struct tui_exec_info_window): Move to - tui-winsource.h. - (struct tui_source_window_base): Likewise. - * tui/tui-data.c (tui_source_window_base::clear_detail) - (tui_source_window_base, ~tui_source_window_base): Move to - tui-winsource.c. - -2019-07-17 Tom Tromey <tom@tromey.com> - - * tui/tui-win.c (tui_resize_all) - (tui_source_window_base::update_tab_width) - (tui_adjust_win_heights): Update. - (tui_win_info::make_invisible_and_set_new_height): Rename from - make_invisible_and_set_new_height. - * tui/tui-data.h (struct tui_win_info) - <make_invisible_and_set_new_height>: New method. - -2019-07-17 Tom Tromey <tom@tromey.com> - - * tui/tui.c: Update. - * tui/tui-source.h (struct tui_source_window): Move from - tui-data.h. - * tui/tui-layout.c: Update. - * tui/tui-disasm.c: Update. - * tui/tui-data.h (struct tui_source_window): Move to - tui-source.h. - -2019-07-17 Tom Tromey <tom@tromey.com> - - * tui/tui-disasm.h (struct tui_disasm_window): Move from - tui-data.h. - * tui/tui-data.h (struct tui_disasm_window): Move to - tui-disasm.h. - -2019-07-17 Tom Tromey <tom@tromey.com> - - * tui/tui-regs.h (struct tui_data_item_window): Move from - tui-data.h. - * tui/tui-regs.c (tui_data_item_window): Move from tui-data.c. - * tui/tui-data.h (struct tui_data_item_window): Move to - tui-regs.h. - * tui/tui-data.c (~tui_data_item_window): Move to tui-regs.c. - -2019-07-17 Tom Tromey <tom@tromey.com> - - * tui/tui.c: Update. - * tui/tui-win.c (tui_cmd_window::do_make_visible_with_new_height) - (tui_cmd_window::max_height): Move to tui-command.c. - * tui/tui-layout.c: Update. - * tui/tui-data.h (struct tui_cmd_window): Move to tui-command.h. - * tui/tui-data.c (tui_cmd_window::clear_detail): Move to - tui-command.c. - * tui/tui-command.h (struct tui_cmd_window): Move from - tui-data.h. - * tui/tui-command.c: Remove "structuring" comments. - (tui_cmd_window::clear_detail) - (tui_cmd_window::do_make_visible_with_new_height) - (tui_cmd_window::max_height): Move from elsewhere. - -2019-07-17 Tom Tromey <tom@tromey.com> - - * tui/tui-io.c (tui_dispatch_ctrl_char): Move from tui-command.c. - Now static. - * tui/tui-command.h (tui_dispatch_ctrl_char): Don't declare. - * tui/tui-command.c (tui_dispatch_ctrl_char): Move to tui-io.c. - -2019-07-17 Tom Tromey <tom@tromey.com> - - * tui/tui.c: Update. - * tui/tui-wingeneral.c (tui_data_window::refresh_window): Move to - tui-regs.c. - * tui/tui-windata.h: Remove file. - * tui/tui-windata.c: Remove file. - * tui/tui-win.c (tui_data_window::set_new_height) - (tui_data_window::do_make_visible_with_new_height): Move to - tui-regs.c. - * tui/tui-regs.h (struct tui_data_window): Move from tui-data.h. - * tui/tui-regs.c: Remove "structuring" comments. - (tui_data_window::first_data_item_displayed) - (tui_data_window::delete_data_content_windows) - (tui_data_window::erase_data_content) - (tui_data_window::display_all_data) - (tui_data_window::refresh_all) - (tui_data_window::do_scroll_vertical) - (tui_data_window::clear_detail, tui_data_window::set_new_height) - (tui_data_window::do_make_visible_with_new_height) - (tui_data_window::refresh_window): Move from elsewhere. - (_initialize_tui_regs): Move to end of file. - * tui/tui-layout.c: Update. - * tui/tui-hooks.c: Update. - * tui/tui-data.h (struct tui_data_window): Move to tui-regs.h. - * tui/tui-data.c (tui_data_window::clear_detail): Move to - tui-regs.c. - * Makefile.in (SUBDIR_TUI_SRCS): Remove tui-windata.c. - -2019-07-17 Tom Tromey <tom@tromey.com> - - * tui/tui-io.c (tui_puts_internal): Call wrefresh if newline is - seen. - -2019-07-17 Tom Tromey <tom@tromey.com> - - * tui/tui-win.c (tui_source_window_base::set_new_height) - (tui_source_window_base::do_make_visible_with_new_height): Use - m_has_locator field directly. - * tui/tui-data.h (struct tui_win_info) <has_locator>: Remove + * dwarf2/read.h (struct dwarf2_per_bfd) <num_psymtabs>: New method. - (struct tui_source_window_base) <has_locator>: Likewise. - -2019-07-17 Tom Tromey <tom@tromey.com> + (struct dwarf2_per_objfile) <resize_symtabs, symtab_set_p, + get_symtab, set_symtab>: New methods. + <m_symtabs>: New field. + (struct dwarf2_psymtab): Derive from partial_symtab. + <readin_p, get_compunit_symtab>: Declare methods. + * dwarf2/read.c (dwarf2_per_objfile::symtab_set_p, + dwarf2_per_objfile::get_symtab, dwarf2_per_objfile::set_symtab): + New methods. + (struct dwarf2_per_cu_quick_data) <compunit_symtab>: Remove. + (dw2_do_instantiate_symtab, dw2_instantiate_symtab) + (dw2_map_expand_apply, dw2_map_symtabs_matching_filename) + (dw2_symtab_iter_next, dw2_print_stats) + (dw2_expand_symtabs_with_fullname) + (dw2_expand_symtabs_matching_one) + (dw_expand_symtabs_matching_file_matcher) + (dw2_find_pc_sect_compunit_symtab, dw2_map_symbol_filenames) + (dw2_debug_names_iterator::next) + (dw2_debug_names_map_matching_symbols) + (fill_in_sig_entry_from_dwo_entry, dwarf2_psymtab::read_symtab) + (process_queue, dwarf2_psymtab::expand_psymtab): Update. + (dwarf2_psymtab::readin_p, dwarf2_psymtab::get_compunit_symtab): + New methods. + (get_compunit_symtab, process_full_comp_unit) + (process_full_type_unit): Update. + (dwarf2_build_psymtabs, dwarf2_initialize_objfile, add_type_unit): Call + +2020-05-27 Simon Marchi <simon.marchi@polymtl.ca> + + * dwarf2/read.h (dwarf2_per_objfile): Rename to dwarf2_per_bfd, + then introduce a new dwarf2_per_objfile type. + <read_line_string>: Move to the new dwarf2_per_objfile type. + <objfile>: Likewise. + (dwarf2_per_bfd): Rename dwarf2_per_objfile to this. + * dwarf2/read.c: Replace references to dwarf2_per_objfile with + dwarf2_per_objfile->per_bfd. + (dwarf2_per_objfile::dwarf2_per_objfile): Rename to... + (dwarf2_per_bfd::dwarf2_per_bfd): ... this. + (dwarf2_per_objfile::free_cached_comp_units): Rename to... + (dwarf2_per_bfd::free_cached_comp_units): ... this. + (dwarf2_has_info): Allocate dwarf2_per_bfd. + (dwarf2_per_objfile::locate_sections): Rename to... + (dwarf2_per_bfd::locate_sections): ... this. + (dwarf2_per_objfile::get_cutu): Rename to... + (dwarf2_per_bfd::get_cutu): ... this. + (dwarf2_per_objfile::get_cu): Rename to... + (dwarf2_per_bfd::get_cu): ... this. + (dwarf2_per_objfile::get_tu): Rename to... + (dwarf2_per_bfd::get_tu): ... this. + (dwarf2_per_objfile::allocate_per_cu): Rename to... + (dwarf2_per_bfd::allocate_per_cu): ... this. + (dwarf2_per_objfile::allocate_signatured_type): Rename to... + (dwarf2_per_bfd::allocate_signatured_type): ... this. + (get_gdb_index_contents_ftype): Change parameter from + dwarf2_per_objfile to dwarf2_per_bfd. + * dwarf2/macro.c, dwarf2/index-write.c: Replace references to + dwarf2_per_objfile with dwarf2_per_objfile->per_bfd. + +2020-05-27 Tom Tromey <tom@tromey.com> + Simon Marchi <simon.marchi@efficios.com> + + * dwarf2/loc.c (struct piece_closure) <per_objfile>: New member. + (allocate_piece_closure): Set "per_objfile" member. + (dwarf2_find_location_expression, dwarf2_locexpr_baton_eval) + (locexpr_describe_location, loclist_describe_location): Use new + member. + * dwarf2/read.c (read_call_site_scope) + (mark_common_block_symbol_computed, attr_to_dynamic_prop) + (dwarf2_const_value_attr, dwarf2_fetch_die_loc_sect_off) + (fill_in_loclist_baton, dwarf2_symbol_mark_computed, + handle_data_member_location): Set per_objfile member. + * dwarf2/loc.h (struct dwarf2_locexpr_baton) <per_objfile>: New + member. + (struct dwarf2_loclist_baton) <per_objfile>: New member. - * tui/tui-wingeneral.h (tui_make_visible, tui_make_invisible): - Don't declare. - * tui/tui-wingeneral.c (tui_make_visible, tui_make_invisible): - Remove. - * tui/tui-win.c (tui_source_window_base::set_new_height) - (tui_source_window_base::set_new_height) - (make_invisible_and_set_new_height) - (tui_source_window_base::do_make_visible_with_new_height) - (tui_source_window_base::do_make_visible_with_new_height): - Update. - * tui/tui-layout.c (show_source_disasm_command, show_data) - (show_source_or_disasm_and_command): Update. - * tui/tui-layout.c (show_layout): Update. +2020-05-27 Tom Tromey <tom@tromey.com> -2019-07-17 Tom Tromey <tom@tromey.com> + * dwarf2/read.h (struct dwarf2_per_objfile) <allocate_per_cu, + allocate_signatured_type>: Declare new methods. + <m_num_psymtabs>: New member. + (struct dwarf2_per_cu_data) <index>: New member. + * dwarf2/read.c (dwarf2_per_objfile::allocate_per_cu) + (dwarf2_per_objfile::allocate_signatured_type): New methods. + (create_cu_from_index_list): Use allocate_per_cu. + (create_signatured_type_table_from_index) + (create_signatured_type_table_from_debug_names) + (create_debug_type_hash_table, add_type_unit) + (read_comp_units_from_section): Use allocate_signatured_type. + +2020-05-27 Tom Tromey <tom@tromey.com> + + * psymtab.c (partial_map_expand_apply) + (psym_find_pc_sect_compunit_symtab, psym_lookup_symbol) + (psym_lookup_global_symbol_language) + (psymtab_to_symtab, psym_find_last_source_symtab, dump_psymtab) + (psym_print_stats, psym_expand_symtabs_for_function) + (psym_map_symbol_filenames, psym_map_matching_symbols) + (psym_expand_symtabs_matching) + (partial_symtab::read_dependencies, maintenance_info_psymtabs) + (maintenance_check_psymtabs): Update. + * psympriv.h (struct partial_symtab) <readin_p, + get_compunit_symtab>: Add objfile parameter. + (struct standard_psymtab) <readin_p, get_compunit_symtab>: + Likewise. + * dwarf2/read.c (struct dwarf2_include_psymtab) <readin_p, + get_compunit_symtab>: Likewise. + (dwarf2_psymtab::expand_psymtab): Pass objfile argument. - * tui/tui-layout.c (make_data_window): Remove. - (show_data): Unify creation and re-initialization cases. +2020-05-27 Tom Tromey <tom@tromey.com> -2019-07-17 Tom Tromey <tom@tromey.com> + * dwarf2/read.h (struct dwarf2_per_objfile) <obstack>: New + member. + * dwarf2/read.c (delete_file_name_entry): Fix comment. + (create_cu_from_index_list) + (create_signatured_type_table_from_index) + (create_signatured_type_table_from_debug_names) + (dw2_get_file_names_reader, dwarf2_initialize_objfile) + (dwarf2_create_include_psymtab) + (create_debug_type_hash_table, add_type_unit) + (create_type_unit_group, read_comp_units_from_section) + (dwarf2_compute_name, create_cus_hash_table) + (create_dwp_hash_table, create_dwo_unit_in_dwp_v1) + (create_dwo_unit_in_dwp_v2, open_and_init_dwp_file): Use new + obstack. + (dw2_get_real_path): Likewise. Change argument to + dwarf2_per_objfile. + +2020-05-27 Luis Machado <luis.machado@linaro.org> + + PR tdep/26000 + * arm-tdep.c (thumb_analyze_prologue): Fix instruction matching + for ldrd (immediate). + +2020-05-26 Philippe Waroquiers <philippe.waroquiers@skynet.be> + + * command.h: Add comment giving the name of class_tui. + * cli/cli-cmds.c (_initialize_cli_cmds): If TUI defined, + create the fake command for the help for class_tui. + +2020-05-26 Tom Tromey <tromey@adacore.com> + + * ada-lang.c (ada_print_array_index): Change type. Call val_atr. + (ada_value_ptr_subscript): Don't call pos_atr on the lower bound. + (val_atr): New function. + (value_val_atr): Use it. + * ada-valprint.c (print_optional_low_bound): Change low bound + handling for enums. + (val_print_packed_array_elements): Don't call discrete_position. + * gdbtypes.c (get_discrete_bounds) <TYPE_CODE_RANGE>: Call + discrete_position for enum types. + * language.c (default_print_array_index): Change type. + * language.h (struct language_defn) <la_print_array_index>: Add + index_type parameter, change type of index_value. + (LA_PRINT_ARRAY_INDEX): Add index_type parameter. + (default_print_array_index): Update. + * valprint.c (maybe_print_array_index): Don't call + value_from_longest. Update. + (value_print_array_elements): Don't call discrete_position. + +2020-05-26 Tom Tromey <tromey@adacore.com> + + * ada-lang.c (value_val_atr): Handle TYPE_CODE_RANGE. + * gdbtypes.c (discrete_position): Handle TYPE_CODE_RANGE. + +2020-05-25 Cristiano De Alti <cristiano_dealti@hotmail.com> + + PR gdb/13519 + * avr-tdep.c (avr_integer_to_address): Return data or code + address accordingly to the second 'type' argument of the + function. - * tui/tui-layout.c (make_source_window, make_disasm_window): - Remove. - (show_data): Unify creation and re-initialization cases. +2020-05-25 Michael Weghorn <m.weghorn@posteo.de> -2019-07-17 Tom Tromey <tom@tromey.com> + * infcmd.c, inferior.h: (construct_inferior_arguments): + Moved function from here to gdbsupport/common-inferior.{h,cc} - * tui/tui-layout.c (make_command_window): Remove. - (show_source_disasm_command, show_source_or_disasm_and_command): - Unify creation and re-initialization cases. +2020-05-23 Tom Tromey <tom@tromey.com> -2019-07-17 Tom Tromey <tom@tromey.com> + Revert commit eca1f90c: + * NEWS: Remove entry for completion styling. + * completer.c (_rl_completion_prefix_display_length): Move + declaration later. + (gdb_fnprint): Revert. + (gdb_display_match_list_1): Likewise. + * cli/cli-style.c (completion_prefix_style) + (completion_difference_style, completion_suffix_style): Remove. + (_initialize_cli_style): Revert. + * cli/cli-style.h (completion_prefix_style) + (completion_difference_style, completion_suffix_style): Don't + declare. - * tui/tui-layout.c (show_source_or_disasm_and_command): Unify - creation and re-initialization cases. +2020-05-24 Pedro Alves <palves@redhat.com> -2019-07-17 Tom Tromey <tom@tromey.com> + * symtab.c (completion_list_add_name): Return boolean indication + of whether the symbol matched. + (completion_list_add_symbol): Don't try to remove C++ aliases if + the symbol didn't match in the first place. + * symtab.h (completion_list_add_name): Return bool. - * tui/tui-regs.c (tui_get_register): Return void. +2020-05-23 Simon Marchi <simon.marchi@polymtl.ca> -2019-07-17 Tom Tromey <tom@tromey.com> + * gdbtypes.h (TYPE_FIELD): Remove. Replace all uses with + type::field. - * tui/tui-wingeneral.c (tui_gen_win_info::make_visible): - Simplify. +2020-05-23 Joel Brobecker <brobecker@adacore.com> -2019-07-17 Tom Tromey <tom@tromey.com> + GDB 9.2 released. - * tui/tui-layout.c (show_source_disasm_command): Simplify window - resetting. +2020-05-23 Tom Tromey <tom@tromey.com> -2019-07-17 Tom Tromey <tom@tromey.com> + * NEWS: Add entry for completion styling. + * completer.c (_rl_completion_prefix_display_length): Move + declaration earlier. + (gdb_fnprint): Use completion_style. + (gdb_display_match_list_1): Likewise. + * cli/cli-style.c (completion_prefix_style) + (completion_difference_style, completion_suffix_style): New + globals. + (_initialize_cli_style): Register new globals. + * cli/cli-style.h (completion_prefix_style) + (completion_difference_style, completion_suffix_style): Declare. - * tui/tui.h (tui_set_layout_by_name): Don't declare. - * tui/tui-regs.c (tui_reg_layout): New function. - (tui_show_registers, tui_reg_command): Use it. - * tui/tui-layout.c (LAYOUT_USAGE): Remove. - (tui_layout_command): Rename from tui_set_layout_by_name. Change - parameters. - (tui_layout_command): Remove. +2020-05-23 Pedro Alves <palves@redhat.com> -2019-07-17 Tom Tromey <tom@tromey.com> + * utils.c: Include "gdbsupport/gdb-safe-ctype.h". + (parse_escape): Use ISDIGIT instead of isdigit. + (puts_debug): Use gdb_isprint instead of isprint. + (fprintf_symbol_filtered): Use ISALNUM instead of isalnum. + (cp_skip_operator_token, skip_ws, strncmp_iw_with_mode): Use + ISSPACE instead of isspace. + (strncmp_iw_with_mode): Use TOLOWER instead of tolower and ISSPACE + instead of isspace. + (strcmp_iw_ordered): Use ISSPACE instead of isspace. + (string_to_core_addr): Use TOLOWER instead of tolower, ISXDIGIT + instead of isxdigit and ISDIGIT instead of isdigit. - * tui/tui-layout.h (tui/tui-layout): Return void. - * tui/tui-layout.c (tui_set_layout): Return void. Add assert. +2020-05-22 Simon Marchi <simon.marchi@efficios.com> -2019-07-17 Tom Tromey <tom@tromey.com> + * gdbtypes.h (struct type) <field>: New method. + (TYPE_FIELDS): Remove, replace all uses with either type::fields + or type::field. - * tui/tui-layout.c (show_source_disasm_command, show_data): - Update. - (reset_locator): Remove. - (show_source_or_disasm_and_command): Update. +2020-05-22 Simon Marchi <simon.marchi@efficios.com> -2019-07-17 Tom Tromey <tom@tromey.com> + * gdbtypes.h (struct type) <fields, set_fields>: New methods. + (TYPE_FIELDS): Use type::fields. Change all call sites that + modify the propery to use type::set_fields instead. - * tui/tui-source.c (tui_source_window_base::reset): Remove - win_type parameter. - * tui/tui-layout.c (make_command_window, make_source_window) - (make_disasm_window, make_data_window) - (show_source_disasm_command, show_data, tui_gen_win_info::reset) - (reset_locator, show_source_or_disasm_and_command): Update. - * tui/tui-data.h (struct tui_gen_win_info) <reset>: Remove - win_type parameter. - (struct tui_source_window_base) <reset>: Likewise. - -2019-07-17 Tom Tromey <tom@tromey.com> - - * tui/tui-layout.c (show_source_disasm_command): Use - reset_locator. - (reset_locator): New function. - (init_and_make_win): Remove. - (show_source_or_disasm_and_command): Use reset_locator. - -2019-07-17 Tom Tromey <tom@tromey.com> - - * tui/tui-winsource.c (tui_set_exec_info_content): Remove - condition. - * tui/tui-wingeneral.c (tui_source_window_base::make_visible): - Remove condition. - * tui/tui-source.c (tui_source_window_base::reset): New method. - * tui/tui-layout.c (make_command_window): Don't call - init_and_make_win. - (make_source_window, make_disasm_window): Don't call - make_source_or_disasm_window. - (make_data_window): Don't call init_and_make_win. Change calling - convention. - (show_source_disasm_command, show_data): Simplify. - (make_source_or_disasm_window): Remove. - (show_source_or_disasm_and_command): Simplify. - * tui/tui-data.h (struct tui_gen_win_info) <reset>: Now virtual. - (struct tui_source_window_base) <reset>: Likewise. - <execution_info>: Remove initializer. - * tui/tui-data.c (tui_source_window_base): Initialize - execution_info. +2020-05-22 Simon Marchi <simon.marchi@efficios.com> -2019-07-17 Tom Tromey <tom@tromey.com> + * gdbtypes.h (TYPE_NFIELDS): Remove. Change all cal sites to use + type::num_fields instead. - * tui/tui-layout.c (tui_set_layout): Remove regs_populate - variable. +2020-05-22 Simon Marchi <simon.marchi@efficios.com> -2019-07-17 Tom Tromey <tom@tromey.com> + * gdbtypes.h (struct type) <num_fields, set_num_fields>: New + methods. + (TYPE_NFIELDS): Use type::num_fields. Change all call sites + that modify the number of fields to use type::set_num_fields + instead. - * tui/tui.c (tui_rl_other_window): Update. - * tui/tui-wingeneral.c (tui_data_window::refresh_window): Call - superclass method first. Always iterate over regs_content. - (tui_unhighlight_win, tui_highlight_win): Use refresh_window - method. - * tui/tui-win.c (tui_set_focus_command): Update. +2020-05-22 Tom Tromey <tromey@adacore.com> -2019-07-17 Tom Tromey <tom@tromey.com> + * compile/compile-object-load.h (munmap_list_free): Don't + declare. - * tui/tui-win.c (tui_set_focus_command): Rename from - tui_set_focus. Call tui_enable. - (tui_set_focus_command): Remove. - -2019-07-17 Tom Tromey <tom@tromey.com> - - * tui/tui-winsource.c (tui_show_exec_info_content): Don't call - refresh_window. - * tui/tui-wingeneral.c (tui_gen_win_info::refresh_window): Call - touchwin. - (tui_data_window::refresh_window): Call refresh_window on data - items. Always call superclass refresh_window. - (tui_win_info::refresh): Remove. - (tui_source_window_base::refresh_window): Update. - (tui_refresh_all): Update. - * tui/tui-layout.c (show_source_disasm_command): Remove call to - refresh_window. - (show_source_or_disasm_and_command): Likewise. - * tui/tui-data.h (struct tui_win_info) <refresh>: Remove. - (struct tui_source_window_base) <refresh>: Likewise. - -2019-07-17 Tom Tromey <tom@tromey.com> - - * tui/tui-winsource.c (tui_clear_source_content) - (tui_show_source_content): Update. - * tui/tui-source.c (tui_source_window::showing_source_p): Check - whether content is empty. - * tui/tui-data.h (struct tui_source_window_base) <content_in_use>: - Remove. +2020-05-22 Andrew Burgess <andrew.burgess@embecosm.com> -2019-07-17 Tom Tromey <tom@tromey.com> + * annotate.c (annotate_source_line): Update return type, add call + to update current symtab and line. + * annotate.h (annotate_source_line): Update return type, and + extend header comment. + * source.c (info_line_command): Check annotation_level before + calling annotate_source_line. + * stack.c (print_frame_info): If calling annotate_source_line + returns true, then don't print any other source line information. - * tui/tui-winsource.c (tui_erase_source_content): Clear the - window's contents. - * tui/tui-source.h (tui_set_source_content_nil): Don't declare. - * tui/tui-source.c (tui_set_source_content_nil): Remove. - -2019-07-17 Tom Tromey <tom@tromey.com> - - * tui/tui-data.h (UNDEFINED_ITEM): Remove define. - (struct tui_data_item_window): Update. - -2019-07-17 Tom Tromey <tom@tromey.com> - - * tui/tui-data.h (MAX_CONTENT_COUNT, TUI_NULL_STR) - (DEFAULT_HISTORY_COUNT, WITH_LOCATOR, NO_LOCATOR): Remove - defines. - -2019-07-17 Tom Tromey <tom@tromey.com> - - * tui/tui-winsource.h (tui_erase_source_content) - (tui_clear_source_content): Remove "display_prompt" parameter. - * tui/tui-winsource.c (tui_update_source_window_as_is) - (tui_update_source_windows_with_addr): Update. - (tui_clear_source_content): Remove "display_prompt" parameter. - (tui_erase_source_content): Likewise. Simplify. - (tui_show_source_content): Update. - * tui/tui-win.c (tui_resize_all, tui_adjust_win_heights): Update. - * tui/tui-stack.c (tui_show_frame_info): Update. - * tui/tui-data.h (EMPTY_SOURCE_PROMPT, NO_EMPTY_SOURCE_PROMPT): - Remove defines. +2020-05-21 Simon Marchi <simon.marchi@efficios.com> -2019-07-17 Tom Tromey <tom@tromey.com> + * lm32-tdep.c (lm32_register_reggroup_p): Fix condition. - * tui/tui-winsource.c (tui_update_source_window_as_is): Update. - * tui/tui-disasm.h (tui_set_disassem_content): Add win_info - parameter. - * tui/tui-disasm.c (tui_set_disassem_content): Add win_info - parameter. +2020-05-21 Simon Marchi <simon.marchi@efficios.com> -2019-07-17 Tom Tromey <tom@tromey.com> + * coffread.c (patch_type): Remove NULL check before xfree. + * corefile.c (set_gnutarget): Likewise. + * cp-abi.c (set_cp_abi_as_auto_default): Likewise. + * exec.c (build_section_table): Likewise. + * remote.c (remote_target::pass_signals): Likewise. + * utils.c (n_spaces): Likewise. + * cli/cli-script.c (document_command): Likewise. + * i386-windows-tdep.c (core_process_module_section): Likewise. + * linux-fork.c (struct fork_info) <~fork_info>: Likewise. - * tui/tui-winsource.c (tui_clear_source_content) - (tui_show_source_content, tui_show_exec_info_content) - (tui_clear_exec_info_content): Update. - * tui/tui-stack.c (tui_show_locator_content): Update. - (tui_show_frame_info): Update. - * tui/tui-source.h (tui_source_window): Don't declare. - * tui/tui-source.c (tui_source_window::showing_source_p): Rename - from tui_source_is_displayed. - * tui/tui-data.h (struct tui_gen_win_info) <content_in_use>: - Remove field. - (struct tui_source_window_base) <content_in_use>: New field. Now - bool. - (struct tui_source_window) <showing_source_p>: New method. - (TUI_SRC_WIN): Change cast. - * tui/tui-data.c (tui_initialize_static_data): Update. - -2019-07-17 Tom Tromey <tom@tromey.com> - - * tui/tui-winsource.c (tui_update_breakpoint_info): Use - location_matches_p. - * tui/tui-source.c (tui_source_window::location_matches_p): New - method. - * tui/tui-disasm.c (tui_disasm_window::location_matches_p): New - method. - * tui/tui-data.h (struct tui_source_window_base) - <location_matches_p>: New method. - (struct tui_source_window, struct tui_disasm_window) - <location_matches_p>: Likewise. - -2019-07-17 Tom Tromey <tom@tromey.com> - - * tui/tui-win.c (tui_set_win_height_command): Rename from - tui_set_win_height. - (tui_set_win_height_command): Remove. - -2019-07-17 Tom Tromey <tom@tromey.com> - - * tui/tui-source.c (tui_source_window): New constructor. Add - observer. - (~tui_source_window): New destructor. - (tui_source_window::style_changed): New method. - * tui/tui-hooks.c (tui_redisplay_source): Remove. - (tui_attach_detach_observers): Update. - * tui/tui-data.h (struct tui_source_window): Make constructor not - inline. Add destructor. - (struct tui_source_window) <style_changed>: New method. - <m_observable>: New member. - -2019-07-17 Tom Tromey <tom@tromey.com> - - * tui/tui-data.c (tui_clear_source_windows_detail): Fix typo. - * tui/tui-win.c (tui_resize_all): Fix typo. - -2019-07-17 Tom Tromey <tom@tromey.com> - - * tui/tui-wingeneral.h (tui_refresh_all): Update. - * tui/tui-wingeneral.c (make_all_visible): Use foreach. - (tui_refresh_all): Remove "list" parameter. Use foreach. - * tui/tui-win.c (window_name_completer): Use foreach. - (tui_refresh_all_win, tui_rehighlight_all, tui_all_windows_info) - (update_tab_width): Likewise. - * tui/tui-layout.c (show_layout): Update. - * tui/tui-data.h (class tui_window_iterator): New. - (struct all_tui_windows): New. - * tui/tui-data.c (tui_partial_win_by_name): Use foreach. - -2019-07-17 Tom Tromey <tom@tromey.com> - - * tui/tui-regs.c (tui_reg_next, tui_reg_prev): Add "current_group" - parameter. Don't reference globals. - (tui_reg_command): Update. - -2019-07-17 Tom Tromey <tom@tromey.com> - - * tui/tui-regs.c (tui_show_registers): Simplify. - -2019-07-17 Tom Tromey <tom@tromey.com> - - * tui/tui-regs.c (tui_show_registers): Update. - (tui_show_register_group): Add win_info parameter. - -2019-07-17 Tom Tromey <tom@tromey.com> - - * tui/tui-regs.c (tui_data_window::display_reg_element_at_line): - Rename from tui_display_reg_element_at_line. - (tui_data_window::display_registers_from_line): Update. - * tui/tui-data.h (struct tui_data_window) - <display_reg_element_at_line>: New method. - -2019-07-17 Tom Tromey <tom@tromey.com> - - * tui/tui-regs.h (tui_display_registers_from) - (tui_display_registers_from_line): Don't declare. - * tui/tui-windata.c (tui_data_window::display_all_data) - (tui_data_window::refresh_all) - (tui_data_window::do_scroll_vertical): Update. - * tui/tui-regs.c (tui_data_window::display_registers_from): Rename - from tui_display_registers_from. - (tui_display_reg_element_at_line): Update. - (tui_data_window::display_registers_from_line): Rename from - tui_display_registers_from_line. - * tui/tui-data.h (struct tui_data_window) <display_registers_from, - display_registers_from_line>: New methods. - -2019-07-17 Tom Tromey <tom@tromey.com> - - * tui/tui-windata.h (tui_erase_data_content): Don't declare. - * tui/tui-windata.c (tui_data_window::erase_data_content): Rename - from tui_erase_data_content. - (tui_data_window::display_all_data) - (tui_data_window::refresh_all) - (tui_data_window::do_scroll_vertical): Update. - * tui/tui-regs.c (tui_show_registers): Update. - * tui/tui-data.h (struct tui_data_window) <erase_data_content>: - New method. +2020-05-20 Simon Marchi <simon.marchi@efficios.com> -2019-07-17 Tom Tromey <tom@tromey.com> + * symfile.c (reread_symbols): Clear objfile's section_offsets + vector and section indices, re-compute them by calling + sym_offsets. - * tui/tui-windata.h (tui_delete_data_content_windows): Don't - declare. - * tui/tui-windata.c - (tui_data_window::delete_data_content_windows): Rename from - tui_delete_data_content_windows. - (tui_data_window::display_all_data) - (tui_data_window::do_scroll_vertical): Update. - * tui/tui-data.h (struct tui_data_window) - <delete_data_content_windows>: New method. - -2019-07-17 Tom Tromey <tom@tromey.com> - - * tui/tui-windata.h (tui_refresh_data_win): Don't declare. - * tui/tui-regs.h (tui_first_reg_element_inline): Don't declare. - -2019-07-17 Tom Tromey <tom@tromey.com> - - * tui/tui-windata.h (tui_display_all_data): Don't declare. - * tui/tui-windata.c (tui_data_window::display_all_data): Rename - from tui_display_all_data. - * tui/tui-win.c - (tui_data_window::do_make_visible_with_new_height): Update. - * tui/tui-regs.c (tui_show_registers): Update. - * tui/tui-layout.c (tui_set_layout): Update. - * tui/tui-data.h (struct tui_data_window) <display_all_data>: New - method. +2020-05-20 Tom Tromey <tromey@adacore.com> -2019-07-17 Tom Tromey <tom@tromey.com> + * ada-lang.c (bound_name, MAX_ADA_DIMENS): Remove. + (desc_one_bound, desc_index_type): Compute field name. - * tui/tui-windata.h (tui_display_data_from): Don't declare. - * tui/tui-windata.c (tui_display_data_from): Remove. - (tui_data_window::refresh_all): Update. +2020-05-20 Tom de Vries <tdevries@suse.de> -2019-07-17 Tom Tromey <tom@tromey.com> + PR symtab/25833 + * dwarf2/read.c (dw2_map_matching_symbols): Handle .gdb_index. - * tui/tui-windata.h (tui_display_data_from_line): Don't declare. - * tui/tui-windata.c (tui_display_data_from_line): Remove. - (tui_display_data_from, tui_data_window::do_scroll_vertical): Call - tui_display_registers_from_line. - * tui/tui-regs.h (tui_display_registers_from_line): Update. - * tui/tui-regs.c (tui_display_registers_from_line): Remove - "force_display" parameter. +2020-05-20 Alan Modra <amodra@gmail.com> -2019-07-17 Tom Tromey <tom@tromey.com> + PR 25993 + * solib-darwin.c (darwin_bfd_open): Don't strdup pathname for + bfd_set_filename. + * solib-aix.c (solib_aix_bfd_open): Use std::string for name + passed to bfd_set_filename. + * symfile-mem.c (add_vsyscall_page): Likewise for string + passed to symbol_file_add_from_memory. + (symbol_file_add_from_memory): Make name param a const char* and + don't strdup. + +2020-05-20 Alan Modra <amodra@gmail.com> + + * coff-pe-read.c (read_pe_exported_syms): Use bfd_get_filename + rather than accessing bfd->filename directly. + * dtrace-probe.c (dtrace_static_probe_ops::get_probes): Likewise, + and use bfd_section_name. + * dwarf2/frame.c (decode_frame_entry): Likewise. + * exec.c (exec_set_section_address): Likewise. + * solib-aix.c (solib_aix_bfd_open): Likewise. + * stap-probe.c (get_stap_base_address): Likewise. + * symfile.c (reread_symbols): Likewise. - * tui/tui-regs.h (tui_first_reg_element_no_inline): Don't - declare. - * tui/tui-regs.c (tui_data_window::first_reg_element_no_inline): - Rename from tui_first_reg_element_no_inline. - (tui_display_reg_element_at_line) - (tui_display_registers_from_line): Update. - * tui/tui-data.h (struct tui_data_window) - <first_reg_element_no_inline>: New method. - -2019-07-17 Tom Tromey <tom@tromey.com> - - * tui/tui-windata.c (tui_display_data_from) - (tui_data_window::do_scroll_vertical): Update. - * tui/tui-regs.h (tui_line_from_reg_element_no): Don't declare. - * tui/tui-regs.c (tui_data_window::line_from_reg_element_no): - Rename from tui_line_from_reg_element_no. - (tui_display_registers_from_line): Update. - * tui/tui-data.h (struct tui_data_window) - <line_from_reg_element_no>: New method. - -2019-07-17 Tom Tromey <tom@tromey.com> - - * tui/tui-regs.h (tui_last_regs_line_no): Don't declare. - * tui/tui-regs.c (tui_data_window::last_regs_line_no): Rename from - tui_last_regs_line_no. - (tui_display_reg_element_at_line) - (tui_display_registers_from_line): Update. - * tui/tui-data.h (struct tui_data_window) <last_regs_line_no>: New - method. +2020-05-19 Tom Tromey <tromey@adacore.com> -2019-07-17 Tom Tromey <tom@tromey.com> + * sparc64-tdep.c (adi_tag_fd): Update call to target_fileio_open. - PR tui/24722: - * tui/tui-winsource.h (tui_update_all_breakpoint_info) - (tui_update_breakpoint_info): Add "being_deleted" parameter. - * tui/tui-winsource.c (tui_update_source_window_as_is): Update. - (tui_update_all_breakpoint_info): Add "being_deleted" parameter. - (tui_update_breakpoint_info): Likewise. - * tui/tui-hooks.c (tui_event_create_breakpoint) - (tui_event_delete_breakpoint, tui_event_modify_breakpoint): - Update. +2020-05-19 Simon Marchi <simon.marchi@efficios.com> -2019-07-17 Tom Tromey <tom@tromey.com> + * dwarf2/read.c (quirk_rust_enum): Allocate enough fields. - * tui/tui-stack.c (tui_show_frame_info): Consolidate "if"s. +2020-05-19 Pedro Alves <palves@redhat.com> + + * NEWS (set exec-file-mismatch): Adjust entry. + * exec.c: Include "build-id.h". + (validate_exec_file): Try to match build IDs instead of filenames. + * gdb_bfd.c (struct gdb_bfd_open_closure): New. + (gdb_bfd_iovec_fileio_open): Adjust to use gdb_bfd_open_closure + and pass down 'warn_if_slow'. + (gdb_bfd_open): Add 'warn_if_slow' parameter. Use + gdb_bfd_open_closure to pass it down. + * gdb_bfd.h (gdb_bfd_open): Add 'warn_if_slow' parameter. + +2020-05-19 Pedro Alves <palves@redhat.com> + + * gdb_bfd.c (gdb_bfd_iovec_fileio_open): Adjust. + * target.c (target_fileio_open_1): Rename to target_fileio_open + and make extern. Use bool. + (target_fileio_open, target_fileio_open_warn_if_slow): Delete. + (target_fileio_read_alloc_1): Adjust. + * target.h (target_fileio_open): Add 'warn_if_slow' parameter. + (target_fileio_open_warn_if_slow): Delete declaration. + +2020-05-19 Pedro Alves <palves@redhat.com> + + * gdb_bfd.h: (gdb_bfd_open): Default to 'fd' parameter to -1. + Adjust all callers. + +2020-05-19 Yoshinori Sato <ysato@users.sourceforge.jp> + + * h8300-tdep.c (h8300_is_argument_spill): Change how we check + whether disp is negative. + +2020-05-19 Simon Marchi <simon.marchi@efficios.com> + + * symfile.h (struct symfile_segment_data) + <~symfile_segment_data>: Remove. + <segment_info>: Change to std::vector. + * symfile.c (default_symfile_segments): Update. + * elfread.c (elf_symfile_segments): Update. + +2020-05-19 Simon Marchi <simon.marchi@efficios.com> + + * symfile.h (struct symfile_segment_data) <struct segment>: New. + <segments>: New. + <segment_bases, segment_sizes>: Remove. + * symfile.c (default_symfile_segments): Update. + * elfread.c (elf_symfile_segments): Update. + * remote.c (remote_target::get_offsets): Update. + * solib-target.c (solib_target_relocate_section_addresses): + Update. + +2020-05-19 Simon Marchi <simon.marchi@efficios.com> + + * symfile.h (struct symfile_segment_data): Initialize fields. + <~symfile_segment_data>: Add. + (symfile_segment_data_up): New. + (struct sym_fns) <sym_segments>: Return a + symfile_segment_data_up. + (default_symfile_segments): Return a symfile_segment_data_up. + (free_symfile_segment_data): Remove. + (get_symfile_segment_data): Return a symfile_segment_data_up. + * symfile.c (default_symfile_segments): Likewise. + (get_symfile_segment_data): Likewise. + (free_symfile_segment_data): Remove. + (symfile_find_segment_sections): Update. + * elfread.c (elf_symfile_segments): Return a + symfile_segment_data_up. + * remote.c (remote_target::get_offsets): Update. + * solib-target.c (solib_target_relocate_section_addresses): + Update. + * symfile-debug.c (debug_sym_segments): Return a + symfile_segment_data_up. + +2020-05-18 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + PR build/25981 + * i386-sol2-nat.c [PR_MODEL_NATIVE != PR_MODEL_LP64] (regmap): + Hardcode register numbers. + + PR build/25981 + * procfs.c [(__i386__ || __x86_64__) && sun] (proc_get_LDT_entry, + procfs_find_LDT_entry): Remove. + * procfs.h [(__i386__ || __x86_64__) && sun] (struct ssd, + procfs_find_LDT_entry): Remove. + * sol-thread.c [(__i386__ || __x86_64__) && sun] (ps_lgetLDT): + Remove. -2019-07-17 Tom Tromey <tom@tromey.com> +2020-05-17 Pedro Alves <palves@redhat.com> + Andrew Burgess <andrew.burgess@embecosm.com> + Keno Fischer <keno@juliacomputing.com> - * tui/tui-winsource.c (tui_update_source_window_as_is) - (tui_update_source_windows_with_addr): Update. - * tui/tui-source.h (tui_set_source_content) - (tui_show_symtab_source): Add "win_info" parameter. - * tui/tui-source.c (tui_set_source_content): Add "win_info" - parameter. - (tui_show_symtab_source): Likewise. + PR gdb/25741 + * breakpoint.c (build_target_condition_list): Update comments. + (build_target_command_list): Update comments and skip matching + locations. + (insert_bp_location): Move "set breakpoint auto-hw on" handling to + a separate function. Simplify "set breakpoint auto-hw off" + handling. + (insert_breakpoints): Update comment. + (tracepoint_locations_match): New parameter. For breakpoints, + compare location types too, if the caller wants to. + (handle_automatic_hardware_breakpoints): New functions. + (bp_location_is_less_than): Also sort by location type and + hardware breakpoint length. + (update_global_location_list): Handle "set breakpoint auto-hw on" + here. + (update_breakpoint_locations): Ask breakpoint_locations_match to + ignore location types. + +2020-05-16 Simon Marchi <simon.marchi@efficios.com> + + * gdbtypes.h (TYPE_NAME): Remove. Change all cal sites to use + type::name instead. + +2020-05-16 Simon Marchi <simon.marchi@efficios.com> + + * gdbtypes.h (struct type) <name, set_name>: New methods. + (TYPE_CODE): Use type::name. Change all call sites used to set + the name to use type::set_name instead. -2019-07-17 Tom Tromey <tom@tromey.com> +2020-05-16 Tom Tromey <tom@tromey.com> - * tui/tui-wingeneral.c - (tui_check_and_display_highlight_if_needed): Check can_highlight. + * top.c (quit_force): Update. + * infrun.c (handle_no_resumed): Update. + * top.h (all_uis): New function. + (ALL_UIS): Remove. + +2020-05-16 Simon Marchi <simon.marchi@efficios.com> + + * mips-linux-tdep.c (mips_linux_in_dynsym_stub): Fix condition. + +2020-05-16 Pedro Alves <palves@redhat.com> + + * ia64-linux-nat.c + (ia64_linux_nat_target) <enable_watchpoints_in_psr(ptid_t)>: + Declare method. + (enable_watchpoints_in_psr): Now a method of ia64_linux_nat_target. + +2020-05-15 Simon Marchi <simon.marchi@efficios.com> + + * sparc64-tdep.c (adi_stat_t): Remove typedef (leaving struct). + (sparc64_adi_info): Likewise. + +2020-05-15 Tom Tromey <tom@tromey.com> + + * symtab.c (lookup_language_this, lookup_symbol_aux): Use + block_objfile. + (lookup_objfile_from_block): Remove. + (lookup_symbol_in_block, lookup_symbol_in_static_block) + (lookup_global_symbol): Use block_objfile. + * symtab.h (lookup_objfile_from_block): Don't declare. + * printcmd.c (clear_dangling_display_expressions): Use + block_objfile. + * parse.c (operator_check_standard): Use block_objfile. + +2020-05-15 Tom Tromey <tom@tromey.com> + + * language.c (language_alloc_type_symbol): Set + SYMBOL_SECTION. + * symtab.c (initialize_objfile_symbol): Remove. + (allocate_symbol): Remove. + (allocate_template_symbol): Remove. + * dwarf2/read.c (fixup_go_packaging): Use "new". + (new_symbol): Use "new". + (read_variable): Don't call initialize_objfile_symbol. Use + "new". + (read_func_scope): Use "new". + * xcoffread.c (process_xcoff_symbol): Don't call + initialize_objfile_symbol. + (SYMBOL_DUP): Remove. + * coffread.c (process_coff_symbol, coff_read_enum_type): Use + "new". + * symtab.h (allocate_symbol, initialize_objfile_symbol) + (allocate_template_symbol): Don't declare. + (struct symbol): Add copy constructor. Change defaults. + * jit.c (finalize_symtab): Use "new". + * ctfread.c (ctf_add_enum_member_cb, new_symbol, ctf_add_var_cb): + Use "new". + * stabsread.c (patch_block_stabs, define_symbol, read_enum_type) + (common_block_end): Use "new". + * mdebugread.c (parse_symbol): Use "new". + (new_symbol): Likewise. -2019-07-17 Tom Tromey <tom@tromey.com> +2020-05-15 Philippe Waroquiers <philippe.waroquiers@skynet.be> - * tui/tui-data.h (struct tui_win_info) <can_scroll>: New method. - (struct tui_cmd_window) <can_scroll>: New method. - * tui/tui-command.c (tui_dispatch_ctrl_char): Use can_scroll - method. + * NEWS: Mention changes to help and apropos. -2019-07-17 Tom Tromey <tromey@adacore.com> +2020-05-15 Philippe Waroquiers <philippe.waroquiers@skynet.be> - * ui-out.h (class ui_out) <field_signed, field_fmt_signed, - do_field_signed>: Rename. Change type of "value". - * ui-out.c (ui_out::field_signed): Rename from field_int. - Change type of "value". - (ui_out::field_fmt_signed): Rename from field_fmt_int. Change - type of "value". - * tui/tui-out.h (class tui_ui_out) <do_field_signed>: Rename from - do_field_int. Change type of "value". - * tui/tui-out.c (tui_ui_out::do_field_signed): Rename from - do_field_int. Change type of "value". - * tracepoint.c (trace_status_mi, tfind_1) - (print_one_static_tracepoint_marker): Update. - * thread.c (print_thread_info_1, print_selected_thread_frame): - Update. - * stack.c (print_frame, print_frame_info): Update. - * spu-tdep.c (info_spu_signal_command, info_spu_dma_cmdlist): - Update. - * source.c (print_source_lines_base): Update. - * skip.c (info_skip_command): Update. - * record-btrace.c (btrace_ui_out_decode_error) - (btrace_call_history_src_line): Update. - * python/py-framefilter.c (py_print_single_arg, py_print_frame): - Update. - * progspace.c (print_program_space): Update. - * mi/mi-symbol-cmds.c (mi_cmd_symbol_list_lines): Update. - * mi/mi-out.h (class mi_ui_out) <do_field_signed>: Rename from - do_field_int. Change type of "value". - * mi/mi-out.c (mi_ui_out::do_table_begin) - (mi_ui_out::do_table_header): Update. - (mi_ui_out::do_field_signed): Rename from do_field_int. Change - type of "value". - * mi/mi-main.c (mi_cmd_thread_list_ids, print_one_inferior) - (mi_cmd_data_list_changed_registers, output_register) - (mi_cmd_data_read_memory, mi_load_progress) - (mi_cmd_trace_frame_collected): Update. - * mi/mi-interp.c (mi_on_normal_stop_1, mi_output_solib_attribs): - Update. - * mi/mi-cmd-var.c (print_varobj, mi_cmd_var_create) - (mi_cmd_var_delete, mi_cmd_var_info_num_children) - (mi_cmd_var_list_children, varobj_update_one): Update. - * mi/mi-cmd-stack.c (mi_cmd_stack_info_depth) - (mi_cmd_stack_list_args, list_arg_or_local): Update. - * mi/mi-cmd-file.c (mi_cmd_file_list_exec_source_file): Update. - * inferior.c (print_inferior): Update. - * gdb_bfd.c (print_one_bfd): Update. - * disasm.c (gdb_pretty_print_disassembler::pretty_print_insn): - Update. - * darwin-nat-info.c (darwin_debug_regions_recurse): Update. - * cli-out.h (class cli_ui_out) <do_field_signed>: Rename from - do_field_int. Change type of "value". - * cli-out.c (cli_ui_out::do_field_signed): Rename from - do_field_int. Change type of "value". - * breakpoint.c (watchpoint_check, print_breakpoint_location) - (print_one_breakpoint_location, print_it_catch_fork) - (print_one_catch_fork, print_it_catch_vfork) - (print_one_catch_vfork, print_it_catch_solib) - (print_it_catch_exec, print_it_ranged_breakpoint) - (print_mention_watchpoint, print_mention_masked_watchpoint) - (bkpt_print_it, update_static_tracepoint): Update. - * break-catch-throw.c (print_it_exception_catchpoint): Update. - * break-catch-syscall.c (print_it_catch_syscall): Update. - * ada-tasks.c (print_ada_task_info): Update. - * ada-lang.c (print_it_exception, print_mention_exception): - Update. + * command.h (enum command_class): Improve comments, document + that class_alias is for user-defined aliases, give the class + name for each class, remove unused class_xdb. + * cli/cli-decode.c (add_com_alias): Document THECLASS intended usage. + * breakpoint.c (_initialize_breakpoint): Replace class_alias + by a precise class. + * infcmd.c (_initialize_infcmd): Likewise. + * reverse.c (_initialize_reverse): Likewise. + * stack.c (_initialize_stack): Likewise. + * symfile.c (_initialize_symfile): Likewise. + * tracepoint.c (_initialize_tracepoint): Likewise. -2019-07-17 Andrew Burgess <andrew.burgess@embecosm.com> +2020-05-15 Philippe Waroquiers <philippe.waroquiers@skynet.be> - PR breakpoints/24541 - * gdbarch.c: Regenerate. - * gdbarch.h: Regenerate. - * gdbarch.sh: Adjust return type and parameter types for - 'stap_adjust_register'. - (i386_stap_adjust_register): Adjust signature and return new - register name. - * stap-probe.c (stap_parse_register_operand): Adjust use of - 'gdbarch_stap_adjust_register'. - -2019-07-17 Tom Tromey <tromey@adacore.com> - - * s390-linux-nat.c (s390_watch_area): Remove typedef. Don't - declare VEC. - (struct s390_debug_reg_state) <watch_areas, break_areas>: Now - std::vector. - (struct s390_process_info): Add initializers. - (s390_add_process): Use new. - (s390_linux_nat_target::low_forget_process): Use delete. - (s390_linux_nat_target::low_new_fork) - (s390_linux_nat_target::stopped_by_watchpoint) - (s390_linux_nat_target::low_prepare_to_resume) - (s390_linux_nat_target::insert_watchpoint) - (s390_linux_nat_target::insert_hw_breakpoint) - (s390_linux_nat_target::remove_watchpoint) - (s390_linux_nat_target::remove_hw_breakpoint): Update. + * cli/cli-decode.c (apropos_cmd): Produce output for aliases + when their aliased command is traversed. + (help_cmd): Add fput_command_names_styled call to + output command name and aliases when command has an alias. + +2020-05-15 Philippe Waroquiers <philippe.waroquiers@skynet.be> + + * cli/cli-decode.h (help_cmd_list): Remove declaration. + * cli/cli-decode.c (help_cmd_list): Declare as static, + remove prefix argument, use bool for recurse arg, rework to show the aliases of + a command together with the command. + (fput_command_name_styled, fput_command_names_styled): New functions. + (print_help_for_command): Remove prefix arg, use bool for recurse arg, use + fput_command_name_styled. + (help_list, help_all): Update callers to remove prefix arg and use bool recurse. + * cli/cli-cmds.c (_initialize_cli_cmds): Update alias_command doc. + +2020-05-15 Philippe Waroquiers <philippe.waroquiers@skynet.be> + + * cli/cli-setshow.h (cmd_show_list): Remove prefix argument. + * cli/cli-decode.c (do_show_prefix_cmd): Likewise. + * command.h (cmd_show_list): Likewise. + * dwarf2/index-cache.c (show_index_cache_command): Likewise. + * cli/cli-setshow.c (cmd_show_list): Use the prefix to produce the output. Skip aliases. + +2020-05-15 Philippe Waroquiers <philippe.waroquiers@skynet.be> + + * unittests/command-def-selftests.c (traverse_command_structure): + Verify all commands of a list have the same prefix command and + that only the top cmdlist commands have a null prefix. + +2020-05-15 Philippe Waroquiers <philippe.waroquiers@skynet.be> + + * cli/cli-decode.c (lookup_cmd_for_prefix): Return the aliased command + as prefix, not one of its aliases. + (set_cmd_prefix): Remove. + (do_add_cmd): Centralize the setting of the prefix of a command, when + command is defined after its full chain of prefix commands. + (add_alias_cmd): Remove call to set_cmd_prefix, as do_add_cmd does it. + (add_setshow_cmd_full): Likewise. + (update_prefix_field_of_prefixed_commands): New function. + (add_prefix_cmd): Replace non working call to set_cmd_prefix by + update_prefix_field_of_prefixed_commands. + * gdb/remote-fileio.c (initialize_remote_fileio): Use the real + addresses of remote_set_cmdlist and remote_show_cmdlist given + as argument, not the address of an argument. + * gdb/remote-fileio.h (initialize_remote_fileio): Likewise. + * gdb/remote.c (_initialize_remote): Likewise. + +2020-05-15 Philippe Waroquiers <philippe.waroquiers@skynet.be> + + * cli/cli-cmds.c (alias_command): Check for an existing alias + using lookup_cmd_composition, as valid_command_p is too strict + and forbids aliases that are the prefix of an existing alias + or command. + * cli/cli-decode.c (lookup_cmd_composition): Ensure a prefix + command is properly recognised as a valid command. + +2020-05-15 Philippe Waroquiers <philippe.waroquiers@skynet.be> + + * unittests/help-doc-selftests.c: Rename to + unittests/command-def-selftests.c + * unittests/command-def-selftests.c (help_doc_tests): Update some + comments. + (command_structure_tests, traverse_command_structure): New namespace + and function. + (command_structure_invariants_tests): New function. + (_initialize_command_def_selftests) Renamed from + _initialize_help_doc_selftests, register command_structure_invariants + selftest. + +2020-05-15 Philippe Waroquiers <philippe.waroquiers@skynet.be> + + * cli/cli-cmds.c (_initialize_cli_cmds): Define 'info set' as + an alias of 'show'. + +2020-05-15 Joel Brobecker <brobecker@adacore.com> + + * ada-lang.h: (ada_is_gnat_encoded_fixed_point_type): Renames + ada_is_fixed_point_type. Update all callers. + (gnat_encoded_fixed_point_delta): Renames ada_delta. Update + all callers. + * ada-lang.c (gnat_encoded_fixed_type_info): Renames fixed_type_info. + Update all callers. + * ada-typeprint.c (print_gnat_encoded_fixed_point_type): Renames + print_fixed_point_type. Update all callers. + * ada-valprint.c (ada_value_print_num): Replace call to + ada_is_fixed_point_type by ada_is_gnat_encoded_fixed_point_type. -2019-07-16 John Baldwin <jhb@FreeBSD.org> +2020-05-14 Kevin Buettner <kevinb@redhat.com> - * aarch64-fbsd-nat.c: Include regcache.h. - (getregs_supplies, getfpregs_supplies): Remove unused gdbarch - argument. - (aarch64_fbsd_nat_target::fetch_registers) - (aarch64_fbsd_nat_target::store_registers): Remove gdbarch - variable. - * arm-fbsd-nat.c, riscv-fbsd-nat.c: Likewise. + * nat/linux-btrace.c (btrace_this_cpu): Add check for AMD + processors. + (cpu_supports_bts): Add CV_AMD case. -2019-07-16 John Baldwin <jhb@FreeBSD.org> +2020-05-14 Laurent Morichetti <Laurent.Morichetti@amd.com> + Simon Marchi <simon.marchi@efficios.com> - * fbsd-nat.c: Include gdbarch.h. + * infrun.c (stop_all_threads): Collect multiple wait events at + each pass. -2019-07-15 Tom Tromey <tromey@adacore.com> +2020-05-14 Simon Marchi <simon.marchi@efficios.com> - * mi/mi-out.c (mi_ui_out::do_field_int): Use plongest. - -2019-07-15 Tom Tromey <tromey@adacore.com> - - * mi/mi-out.h (class mi_ui_out) <do_field_unsigned>: Declare. - * mi/mi-out.c (mi_ui_out::do_field_unsigned): New method. - * cli-out.h (class cli_ui_out) <do_field_unsigned>: Declare. - * cli-out.c (cli_ui_out::do_field_int): New method. - * ui-out.c (ui_out::field_unsigned): New method. - * symfile.c (generic_load): Use field_unsigned. - (print_transfer_performance): Likewise. - * record-btrace.c (ui_out_field_uint): Remove. - (btrace_call_history_insn_range, btrace_call_history): Use - field_unsigned. - * disasm.c (gdb_pretty_print_disassembler::pretty_print_insn): Use - field_unsigned. - * ui-out.h (class ui_out) <field_unsigned>: New method. - <do_field_unsigned>: Likewise. - -2019-07-15 Tom Tromey <tromey@adacore.com> - - * mi/mi-main.c (list_available_thread_groups): Use field_string. - * mi/mi-interp.c (mi_memory_changed): Use field_string. - * target.c (flash_erase_command): Use field_string. - * infrun.c (print_signal_received_reason): Use field_string. - * i386-tdep.c (i386_mpx_print_bounds): Use field_string. - * breakpoint.c (maybe_print_thread_hit_breakpoint): Use - field_string. - * ada-tasks.c (print_ada_task_info): Use field_string. + * gdbtypes.h (TYPE_CODE): Remove. Change all call sites to use + type::code instead. -2019-07-15 Tom Tromey <tromey@adacore.com> +2020-05-14 Simon Marchi <simon.marchi@efficios.com> - * target.c (flash_erase_command): Use field_core_addr. - * symfile.c (generic_load): Use field_core_addr. - * sparc64-linux-tdep.c (sparc64_linux_handle_segmentation_fault): - Use field_core_addr. - * i386-linux-tdep.c (i386_linux_handle_segmentation_fault): Use - field_core_addr. + * gdbtypes.h (struct type) <code, set_code>: New methods. + (TYPE_CODE): Use type::code. Change all call sites used to set + the code to use type::set_code instead. -2019-07-12 Andrew Burgess <andrew.burgess@embecosm.com> +2020-05-14 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + Tom de Vries <tdevries@suse.de> + Pedro Alves <palves@redhat.com> - * dwarf2loc.c (dwarf2_evaluate_property): Sign extend property - value if its desired type is smaller than a CORE_ADDR and signed. + PR threads/25478 + * infrun.c (stop_all_threads): Do NOT ignore + TARGET_WAITKIND_NO_RESUMED, TARGET_WAITKIND_THREAD_EXITED, + TARGET_WAITKIND_EXITED, TARGET_WAITKIND_SIGNALLED wait statuses + received. + (handle_no_resumed): Remove code handling a live inferior with no + threads. + * remote.c (has_single_non_exited_thread): New. + (remote_target::update_thread_list): Do not delete a thread if is + the last thread of the process. + * thread.c (thread_select): Call delete_exited_threads instead of + prune_threads. + +2020-05-14 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + * infrun.c (stop_all_threads): Enable/disable thread events of all + targets. Move a debug message denoting the end of the function + into the SCOPED_EXIT block. + +2020-05-14 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + * process-stratum-target.h: Include <set>. + (all_non_exited_process_targets, switch_to_target_no_thread): New + function declarations. + * process-stratum-target.c (all_non_exited_process_targets) + (switch_to_target_no_thread): New function implementations. -2019-07-12 Andrew Burgess <andrew.burgess@embecosm.com> +2020-05-14 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> - * dwarf2loc.c (dwarf2_evaluate_property): Update to take account - of changes to field names, and use new is_reference field to - decide if a property is a reference or not. - * dwarf2loc.h (struct dwarf2_locexpr_baton): Add 'is_reference' - field. - (struct dwarf2_property_baton): Update header comment, rename - 'referenced_type' to 'property_type' and update comments. - * dwarf2read.c (attr_to_dynamic_prop): Add extra parameter to hold - default property type, store in property baton, update to take - accound of renamed field. - (read_func_scope): Update call to attr_to_dynamic_prop. - (read_array_type): Likewise. - (dwarf2_per_cu_addr_sized_int_type): New function. - (read_subrange_index_type): Move type finding code to - dwarf2_per_cu_addr_sized_int_type. - (read_subrange_type): Update calls to attr_to_dynamic_prop. - (dwarf2_per_cu_addr_type): New function. - (set_die_type): Update calls to attr_to_dynamic_prop. - -2019-07-12 Andrew Burgess <andrew.burgess@embecosm.com> - - * dwarf2read.c (read_subrange_index_type): New function. - (read_subrange_type): Move code into new function and call it. - * gdbtypes.c (create_range_type): Add some asserts. - -2019-07-12 Andrew Burgess <andrew.burgess@embecosm.com> - - * dwarf2loc.c (dwarf2_evaluate_property): Change return type, and - update return statements. - * dwarf2loc.h (dwarf2_evaluate_property): Update return type on - declaration, and update comment to match. - * gdbtypes.c (resolve_dynamic_array): Update call to - dwarf2_evaluate_property to match new return type. - -2019-07-12 Andrew Burgess <andrew.burgess@embecosm.com> - - * valarith.c (value_subscripted_rvalue): Change lowerbound - parameter type from int to LONGEST. - * value.h (value_subscripted_rvalue): Likewise in declaration. - -2019-07-11 Andrew Burgess <andrew.burgess@embecosm.com> - - * cli/cli-utils.c (info_print_command_completer): New function. - * cli/cli-utils.h: Add 'completer.h' include, and forward - declaration for 'struct cmd_list_element'. - (info_print_command_completer): Declare. - * stack.c (_initialize_stack): Add completer for 'info locals' and - 'info args'. - * symtab.c (_initialize_symtab): Add completer for 'info - variables' and 'info functions'. - * NEWS: Mention completion for additional info commands. - -2019-07-11 Andrew Burgess <andrew.burgess@embecosm.com> - - * cli/cli-utils.c (extract_info_print_args): Delete. - (extract_arg_maybe_quoted): Delete. - (info_print_options_defs): New variable. - (make_info_print_options_def_group): New function. - (extract_info_print_options): Define new function. - * cli/cli-utils.h (extract_info_print_args): Delete. - (struct info_print_options): New structure. - (extract_info_print_options): Declare new function. - * stack.c (info_locals_command): Update to use new - extract_info_print_options, also add a header comment. - (info_args_command): Likewise. - * symtab.c (info_variables_command): Likewise. - (info_functions_command): Likewise. - -2019-07-11 Andrew Burgess <andrew.burgess@embecosm.com> - - * cli/cli-option.c (parse_option): Use extract_string_maybe_quoted - to extract string arguments. - * common/common-utils.c (extract_string_maybe_quoted): New function. - * common/common-utils.h (extract_string_maybe_quoted): Declare. - -2019-07-11 Tom Tromey <tromey@adacore.com> - - * main.c (get_init_files): Use GDBINIT, not gdbinit. - * auto-load.c (file_is_auto_load_safe): Use GDBINIT, not gdbinit. - * top.h (gdbinit): Don't declare. - * cli/cli-cmds.c (init_cli_cmds): Remove, merging contents + * infrun.c (handle_inferior_event): Extract out a piece of code into... - (_initialize_cli_cmds): ...here. Use GDBINIT, not gdbinit. - * top.c (gdb_init): Don't call init_cli_cmds. - (gdbinit): Remove. - * cli/cli-cmds.h (init_cli_cmds): Don't declare. - -2019-07-11 Tom Tromey <tromey@adacore.com> - - * python/py-inferior.c (add_thread_object): Don't use thread_obj - after it has been moved. - -2019-07-10 Simon Marchi <simon.marchi@polymtl.ca> - - * valops.c (value_must_coerce_to_target): Change return type to - bool. - * value.h (value_must_coerce_to_target): Likewise. - -2019-07-10 Simon Marchi <simon.marchi@efficios.com> - - * breakpoint.c (is_hardware_watchpoint): Remove - forward-declaration. - (is_masked_watchpoint): Change return type to bool. - (is_tracepoint): Likewise. - (is_breakpoint): Likewise. - (is_hardware_watchpoint): Likewise. - (is_watchpoint): Likewise. - (is_no_memory_software_watchpoint): Likewise. - (is_catchpoint): Likewise. - (breakpoint_1): Make FILTER parameter's return type bool. - is_masked_watchpoint): Change return type to bool. - (save_breakpoints): Make FILTER parameter's return type bool. - * breakpoint.h (is_breakpoint): Change return type to bool. - (is_watchpoint): Likewise. - (is_catchpoint): Likewise. - (is_tracepoint): Likewise. - -2019-07-10 Tom Tromey <tom@tromey.com> - - * defs.h: Don't include gdbarch.h. - * aarch64-ravenscar-thread.c, aarch64-tdep.c, alpha-bsd-tdep.h, - alpha-linux-tdep.c, alpha-mdebug-tdep.c, arch-utils.h, arm-tdep.h, - ax-general.c, btrace.c, buildsym-legacy.c, buildsym.h, c-lang.c, - cli/cli-decode.h, cli/cli-dump.c, cli/cli-script.h, - cli/cli-style.h, coff-pe-read.h, compile/compile-c-support.c, - compile/compile-cplus.h, compile/compile-loc2c.c, corefile.c, - cp-valprint.c, cris-linux-tdep.c, ctf.c, d-lang.c, d-namespace.c, - dcache.c, dicos-tdep.c, dictionary.c, disasm-selftests.c, - dummy-frame.c, dummy-frame.h, dwarf2-frame-tailcall.c, - dwarf2expr.c, expression.h, f-lang.c, frame-base.c, - frame-unwind.c, frv-linux-tdep.c, gdbarch-selftests.c, gdbtypes.h, - go-lang.c, hppa-nbsd-tdep.c, hppa-obsd-tdep.c, i386-dicos-tdep.c, - i386-tdep.h, ia64-vms-tdep.c, interps.h, language.c, - linux-record.c, location.h, m2-lang.c, m32r-linux-tdep.c, - mem-break.c, memattr.c, mn10300-linux-tdep.c, nios2-linux-tdep.c, - objfiles.h, opencl-lang.c, or1k-linux-tdep.c, p-lang.c, - parser-defs.h, ppc-tdep.h, probe.h, python/py-record-btrace.c, - record-btrace.c, record.h, regcache-dump.c, regcache.h, - riscv-fbsd-tdep.c, riscv-linux-tdep.c, rust-exp.y, - sh-linux-tdep.c, sh-nbsd-tdep.c, source-cache.c, - sparc-nbsd-tdep.c, sparc-obsd-tdep.c, sparc-ravenscar-thread.c, - sparc64-fbsd-tdep.c, std-regs.c, target-descriptions.h, - target-float.c, tic6x-linux-tdep.c, tilegx-linux-tdep.c, top.c, - tracefile.c, trad-frame.c, type-stack.h, ui-style.c, utils.c, - utils.h, valarith.c, valprint.c, varobj.c, x86-tdep.c, - xml-support.h, xtensa-linux-tdep.c, cli/cli-cmds.h: Update. - * s390-linux-nat.c, procfs.c, inf-ptrace.c: Likewise. - -2019-07-10 Tom Tromey <tromey@adacore.com> - - * ada-lang.h (is_ada_exception_catchpoint): Declare. - * breakpoint.c (init_ada_exception_breakpoint): Register as - bp_catchpoint. - (print_one_breakpoint_location, print_one_breakpoint): Use - is_ada_exception_catchpoint. - * ada-lang.c (class ada_catchpoint_location): Pass - bp_loc_software_breakpoint to bp_location constructor. - (is_ada_exception_catchpoint): New function. - -2019-07-10 Tom Tromey <tromey@adacore.com> - - * arm-tdep.c (arm_exidx_entry_s): Remove typedef. Don't define - VEC. - (struct arm_exidx_entry): New method operator<. - (struct arm_exidx_data) <section_maps>: Change type. - (arm_exidx_data_free): Remove. - (arm_exidx_data_key): Change type. Move lower. - (arm_exidx_new_objfile): Update. - (arm_compare_exidx_entries): Remove. - (arm_find_exidx_entry, _initialize_arm_tdep) + (mark_non_executing_threads): ...this new function. -2019-07-10 Tom Tromey <tromey@adacore.com> +2020-05-14 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> - * solib-spu.c (ocl_program_data_key): Change type. - (append_ocl_sos, ocl_enable_break, _initialize_spu_solib): - Update. + * infrun.c (resume_1): Move a 'regcache_read_pc' call down to first + use. -2019-07-10 Tom Tromey <tromey@adacore.com> +2020-05-14 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> - * solib-aix.c (lm_info_aix_p): Remove typedef. Don't define VEC. - (struct solib_aix_inferior_data) <library_list>: Change type. - (solib_aix_inferior_data_handle): Change type. - (get_solib_aix_inferior_data): Update. - (solib_aix_free_library_list): Remove. - (library_list_start_library): Update. - (solib_aix_parse_libraries, solib_aix_get_library_list): Change - return type. - (solib_aix_get_library_list) - (solib_aix_solib_create_inferior_hook, solib_aix_current_sos) - (solib_aix_normal_stop_observer, _initialize_solib_aix): Update. - -2019-07-10 Tom Tromey <tromey@adacore.com> - - * solib-dsbt.c (struct dsbt_info): Add initializers. - (solib_dsbt_pspace_data): Change type. - (dsbt_pspace_data_cleanup): Remove. - (get_dsbt_info, _initialize_dsbt_solib): Update. - -2019-07-10 Tom Tromey <tromey@adacore.com> - - * spu-tdep.c (spu_overlay_data): Change type. - (spu_get_overlay_table, spu_overlay_new_objfile) - (_initialize_spu_tdep): Update. + * regcache.c (regcache_read_pc_protected): New function + implementation that returns 0 if the PC cannot read via + 'regcache_read_pc'. + * infrun.c (proceed): Call 'regcache_read_pc_protected' + instead of 'regcache_read_pc'. + (keep_going_pass_signal): Ditto. -2019-07-10 Tom Tromey <tromey@adacore.com> +2020-05-13 Tom Tromey <tromey@adacore.com> - * gdb-stabs.h (struct dbx_symfile_info): Add initializers and - destructor. - (dbx_objfile_data_key): Change type and declare later. - (DBX_SYMFILE_INFO): Rewrite. - * dbxread.c (dbx_objfile_data_key): Change type. - (dbx_symfile_init): Update. - (~dbx_symfile_info): Rename from dbx_free_symfile_info. Update. - (coffstab_build_psymtabs, elfstab_build_psymtabs) - (stabsect_build_psymtabs, _initialize_dbxread): Update. - -2019-07-10 Tom Tromey <tromey@adacore.com> - - * jit.c (jit_program_space_key): Change type. Move lower. - (get_jit_program_space_data): Update. - (jit_program_space_data_cleanup): Remove. - (jit_breakpoint_deleted, free_objfile_data, _initialize_jit): - Update. - (struct jit_program_space_data): Add initializers. + * ada-lang.c (align_value): Remove. + (ada_template_to_fixed_record_type_1): Use align_up. -2019-07-10 Tom Tromey <tromey@adacore.com> +2020-05-13 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> - * solib-darwin.c (struct darwin_info): Add initializers. - (solib_darwin_pspace_data): Change type. - (darwin_pspace_data_cleanup): Remove. - (get_darwin_info, _initialize_darwin_solib): Update. - -2019-07-10 Tom Tromey <tromey@adacore.com> - - * remote-sim.c (struct sim_inferior_data): Add initializers, - constructor, and destructor. - (sim_inferior_data_key): Change type. Move lower. - (check_for_duplicate_sim_descriptor): Update. - (get_sim_inferior_data): Use new. Update. - (~sim_inferior_data_cleanup): Rename from - sim_inferior_data_cleanup. Simplify. - (gdbsim_close_inferior, simulator_command) - (sim_command_completer, _initialize_remote_sim): Update. - (next_pid, INITIAL_PID): Move earlier. - -2019-07-10 Tom Tromey <tromey@adacore.com> - - * python/python-internal.h (create_thread_object): Return - gdbpy_ref. - * python/py-infthread.c (create_thread_object): Return gdbpy_ref. - * python/py-inferior.c (struct threadlist_entry): Add - constructor. - <thread_obj>: Now a gdbpy_ref. - (thread_to_thread_object): Update. - (add_thread_object): Use new. - (delete_thread_object): Use delete. - (infpy_threads): Update. - (py_free_inferior): Update. Construct "inf_obj" after acquiring - GIL. + * async-event.c: Update the copyright year. + * async-event.h: Update the copyright year. -2019-07-10 Tom Tromey <tromey@adacore.com> +2020-05-12 Simon Marchi <simon.marchi@efficios.com> - * valops.c (value_cast): Specialize error message for Ada. + * objfiles.h (is_addr_in_objfile, + shared_objfile_contains_address_p): Return bool. + * objfile.c (is_addr_in_objfile, + shared_objfile_contains_address_p): Return bool. -2019-07-10 Simon Marchi <simon.marchi@polymtl.ca> +2020-05-11 Tom Tromey <tromey@adacore.com> - * breakpoint.c (breakpoint_1): Update doc and parameter names. + * cli/cli-cmds.c (info_command): Restore. + (_initialize_cli_cmds): Use add_prefix_command for "info". + * gdb-gdb.gdb.in: Restore breakpoint on info_command. -2019-07-10 Simon Marchi <simon.marchi@polymtl.ca> +2020-05-11 Tom Tromey <tromey@adacore.com> - * breakpoint.h (bpstat_explains_signal, bpstat_causes_stop, - bpstat_should_step): Return bool, adjust comments. - * breakpoint.c (bpstat_explains_signal, bpstat_causes_stop, - bpstat_should_step): Likewise. + * ada-lang.c (ada_value_primitive_field): Now public. + * ada-lang.h (ada_value_primitive_field): Declare. + * ada-valprint.c (print_field_values): Use + ada_value_primitive_field for wrapper fields. -2019-07-10 Alan Hayward <alan.hayward@arm.com> +2020-05-11 Tom de Vries <tdevries@suse.de> - * features/Makefile: Use feature target descriptions for Arm. - * features/arm/arm-core.c: Generate new file. - * features/arm/arm-fpa.c: Likewise. - * features/arm/arm-m-profile-with-fpa.xml: Likewise. - * features/arm/arm-m-profile.c: Likewise. - * features/arm/arm-vfpv2.c: Likewise. - * features/arm/arm-vfpv3.c: Likewise. - * features/arm/xscale-iwmmxt.c: Likewise. - * target-descriptions.c (maint_print_c_tdesc_cmd): Add Arm. + * dwarf2/index-write.c (debug_names::psymbol_tag): Handle + MODULE_DOMAIN. -2019-07-10 Alan Hayward <alan.hayward@arm.com> +2020-05-11 Tom de Vries <tdevries@suse.de> - * arm-linux-nat.c (arm_linux_nat_target::read_description): Check - ptrace earlier. + PR symtab/25941 + * dwarf2/read.c (create_cus_from_debug_names_list): Initialize CUs + with length 0, if not gdb-produced. + (cutu_reader::cutu_reader): Set CU length to actual length if 0. -2019-07-10 Alan Hayward <alan.hayward@arm.com> +2020-05-09 Tom de Vries <tdevries@suse.de> - * features/aarch64-pauth.c: Regenerate. + PR gdb/25955 + * break-catch-throw.c (check_status_exception_catchpoint): Fix name + calculation. -2019-07-09 Simon Marchi <simon.marchi@polymtl.ca> +2020-05-09 Tom Tromey <tom@tromey.com> - * breakpoint.h (struct bpstat_what) <is_longjmp>: Change type to - bool. - (bpstat_what): Use false instead of 0. + * top.c (server_command): Now bool. + * top.h (server_command): Now bool. -2019-07-09 Pedro Alves <palves@redhat.com> +2020-05-08 Tom Tromey <tromey@adacore.com> - * break-catch-throw.c (is_exception_catchpoint): New. - * breakpoint.c (print_one_breakpoint_location): New parameter - 'raw_loc'. Handle it. Use - is_watchpoint/is_catchpoint/is_exception_catchpoint instead of - looking at the breakpoint's type. - (print_one_breakpoint): If handling "maint info breakpoints", also - print locations of exception catchpoints. - * breakpoint.h (is_exception_catchpoint): Declare. - -2019-07-09 Pedro Alves <palves@redhat.com> - - * break-catch-throw.c (print_one_exception_catchpoint): Skip the - "addr" field. - (allocate_location_exception_catchpoint): New. - (handle_gnu_v3_exceptions): Don't reset 'type' to bp_breakpoint. - (initialize_throw_catchpoint_ops): Install - allocate_location_exception_catchpoint as allocate_location - method. - * breakpoint.c (bpstat_what) <bp_catch>: Set action to - BPSTAT_WHAT_SINGLE if not stopping and the location's type is not - bp_loc_other. - (breakpoint_address_is_meaningful): Delete. - (bl_address_is_meaningful): New. - (breakpoint_locations_match): Adjust comment. - (bp_location_from_bp_type): New, factored out of... - (bp_location::bp_location(breakpoint *)): ... this. - (bp_location::bp_location(breakpoint *, bp_loc_type)): New, - factored out of... - (bp_location::bp_location(breakpoint *)): ... this. Reimplement. - (bp_loc_is_permanent): Use bl_address_is_meaningful instead of - breakpoint_address_is_meaningful. - (bp_locations_compare): Adjust comment. - (update_global_location_list): Use bl_address_is_meaningful - instead of breakpoint_address_is_meaningful. - * breakpoint.h (bp_location::bp_location(breakpoint *)): New - explicit. - (bp_location::bp_location(breakpoint *, bp_loc_type)): Declare. - * python/py-breakpoint.c (bppy_get_location): No longer check - whether location is null. - -2019-07-09 Pedro Alves <palves@redhat.com> - - PR c++/15468 - * breakpoint.c (print_one_breakpoint_location): Remove - single-location assert. + * dwarf2/read.c (read_lexical_block_scope): Don't process a DIE + already being processed. -2019-07-09 Tom Tromey <tom@tromey.com> +2020-05-08 Tom Tromey <tom@tromey.com> - * contrib/ari/gdb_ari.sh: Change common to gdbsupport. - * configure: Rebuild. - * configure.ac: Change common to gdbsupport. - * gdbsupport: Rename from common. - * acinclude.m4: Change common to gdbsupport. - * Makefile.in (CONFIG_SRC_SUBDIR, COMMON_SFILES) - (HFILES_NO_SRCDIR, stamp-version, ALLDEPFILES): Change common to - gdbsupport. - * aarch64-tdep.c, ada-lang.c, ada-lang.h, agent.c, alloc.c, - amd64-darwin-tdep.c, amd64-dicos-tdep.c, amd64-fbsd-nat.c, - amd64-fbsd-tdep.c, amd64-linux-nat.c, amd64-linux-tdep.c, - amd64-nbsd-tdep.c, amd64-obsd-tdep.c, amd64-sol2-tdep.c, - amd64-tdep.c, amd64-windows-tdep.c, arch-utils.c, - arch/aarch64-insn.c, arch/aarch64.c, arch/aarch64.h, arch/amd64.c, - arch/amd64.h, arch/arm-get-next-pcs.c, arch/arm-linux.c, - arch/arm.c, arch/i386.c, arch/i386.h, arch/ppc-linux-common.c, - arch/riscv.c, arch/riscv.h, arch/tic6x.c, arm-tdep.c, auto-load.c, - auxv.c, ax-gdb.c, ax-general.c, ax.h, breakpoint.c, breakpoint.h, - btrace.c, btrace.h, build-id.c, build-id.h, c-lang.h, charset.c, - charset.h, cli/cli-cmds.c, cli/cli-cmds.h, cli/cli-decode.c, - cli/cli-dump.c, cli/cli-option.h, cli/cli-script.c, - coff-pe-read.c, command.h, compile/compile-c-support.c, - compile/compile-c.h, compile/compile-cplus-symbols.c, - compile/compile-cplus-types.c, compile/compile-cplus.h, - compile/compile-loc2c.c, compile/compile.c, completer.c, - completer.h, contrib/ari/gdb_ari.sh, corefile.c, corelow.c, - cp-support.c, cp-support.h, cp-valprint.c, csky-tdep.c, ctf.c, - darwin-nat.c, debug.c, defs.h, disasm-selftests.c, disasm.c, - disasm.h, dtrace-probe.c, dwarf-index-cache.c, - dwarf-index-cache.h, dwarf-index-write.c, dwarf2-frame.c, - dwarf2expr.c, dwarf2loc.c, dwarf2read.c, event-loop.c, - event-top.c, exceptions.c, exec.c, extension.h, fbsd-nat.c, - features/aarch64-core.c, features/aarch64-fpu.c, - features/aarch64-pauth.c, features/aarch64-sve.c, - features/i386/32bit-avx.c, features/i386/32bit-avx512.c, - features/i386/32bit-core.c, features/i386/32bit-linux.c, - features/i386/32bit-mpx.c, features/i386/32bit-pkeys.c, - features/i386/32bit-segments.c, features/i386/32bit-sse.c, - features/i386/64bit-avx.c, features/i386/64bit-avx512.c, - features/i386/64bit-core.c, features/i386/64bit-linux.c, - features/i386/64bit-mpx.c, features/i386/64bit-pkeys.c, - features/i386/64bit-segments.c, features/i386/64bit-sse.c, - features/i386/x32-core.c, features/riscv/32bit-cpu.c, - features/riscv/32bit-csr.c, features/riscv/32bit-fpu.c, - features/riscv/64bit-cpu.c, features/riscv/64bit-csr.c, - features/riscv/64bit-fpu.c, features/tic6x-c6xp.c, - features/tic6x-core.c, features/tic6x-gp.c, filename-seen-cache.h, - findcmd.c, findvar.c, fork-child.c, gcore.c, gdb_bfd.c, gdb_bfd.h, - gdb_proc_service.h, gdb_regex.c, gdb_select.h, gdb_usleep.c, - gdbarch-selftests.c, gdbthread.h, gdbtypes.h, gnu-nat.c, - go32-nat.c, guile/guile.c, guile/scm-ports.c, - guile/scm-safe-call.c, guile/scm-type.c, i386-fbsd-nat.c, - i386-fbsd-tdep.c, i386-go32-tdep.c, i386-linux-nat.c, - i386-linux-tdep.c, i386-tdep.c, i387-tdep.c, - ia64-libunwind-tdep.c, ia64-linux-nat.c, inf-child.c, - inf-ptrace.c, infcall.c, infcall.h, infcmd.c, inferior-iter.h, - inferior.c, inferior.h, inflow.c, inflow.h, infrun.c, infrun.h, - inline-frame.c, language.h, linespec.c, linux-fork.c, linux-nat.c, - linux-tdep.c, linux-thread-db.c, location.c, machoread.c, - macrotab.h, main.c, maint.c, maint.h, memattr.c, memrange.h, - mi/mi-cmd-break.h, mi/mi-cmd-env.c, mi/mi-cmd-stack.c, - mi/mi-cmd-var.c, mi/mi-interp.c, mi/mi-main.c, mi/mi-parse.h, - minsyms.c, mips-linux-tdep.c, namespace.h, - nat/aarch64-linux-hw-point.c, nat/aarch64-linux-hw-point.h, - nat/aarch64-linux.c, nat/aarch64-sve-linux-ptrace.c, - nat/amd64-linux-siginfo.c, nat/fork-inferior.c, - nat/linux-btrace.c, nat/linux-btrace.h, nat/linux-namespaces.c, - nat/linux-nat.h, nat/linux-osdata.c, nat/linux-personality.c, - nat/linux-procfs.c, nat/linux-ptrace.c, nat/linux-ptrace.h, - nat/linux-waitpid.c, nat/mips-linux-watch.c, - nat/mips-linux-watch.h, nat/ppc-linux.c, nat/x86-dregs.c, - nat/x86-dregs.h, nat/x86-linux-dregs.c, nat/x86-linux.c, - nto-procfs.c, nto-tdep.c, objfile-flags.h, objfiles.c, objfiles.h, - obsd-nat.c, observable.h, osdata.c, p-valprint.c, parse.c, - parser-defs.h, ppc-linux-nat.c, printcmd.c, probe.c, proc-api.c, - procfs.c, producer.c, progspace.h, psymtab.h, - python/py-framefilter.c, python/py-inferior.c, python/py-ref.h, - python/py-type.c, python/python.c, record-btrace.c, record-full.c, - record.c, record.h, regcache-dump.c, regcache.c, regcache.h, - remote-fileio.c, remote-fileio.h, remote-sim.c, remote.c, - riscv-tdep.c, rs6000-aix-tdep.c, rust-exp.y, s12z-tdep.c, - selftest-arch.c, ser-base.c, ser-event.c, ser-pipe.c, ser-tcp.c, - ser-unix.c, skip.c, solib-aix.c, solib-target.c, solib.c, - source-cache.c, source.c, source.h, sparc-nat.c, spu-linux-nat.c, - stack.c, stap-probe.c, symfile-add-flags.h, symfile.c, symfile.h, - symtab.c, symtab.h, target-descriptions.c, target-descriptions.h, - target-memory.c, target.c, target.h, target/waitstatus.c, - target/waitstatus.h, thread-iter.h, thread.c, tilegx-tdep.c, - top.c, top.h, tracefile-tfile.c, tracefile.c, tracepoint.c, - tracepoint.h, tui/tui-io.c, ui-file.c, ui-out.h, - unittests/array-view-selftests.c, - unittests/child-path-selftests.c, unittests/cli-utils-selftests.c, - unittests/common-utils-selftests.c, - unittests/copy_bitwise-selftests.c, unittests/environ-selftests.c, - unittests/format_pieces-selftests.c, - unittests/function-view-selftests.c, - unittests/lookup_name_info-selftests.c, - unittests/memory-map-selftests.c, unittests/memrange-selftests.c, - unittests/mkdir-recursive-selftests.c, - unittests/observable-selftests.c, - unittests/offset-type-selftests.c, unittests/optional-selftests.c, - unittests/parse-connection-spec-selftests.c, - unittests/ptid-selftests.c, unittests/rsp-low-selftests.c, - unittests/scoped_fd-selftests.c, - unittests/scoped_mmap-selftests.c, - unittests/scoped_restore-selftests.c, - unittests/string_view-selftests.c, unittests/style-selftests.c, - unittests/tracepoint-selftests.c, unittests/unpack-selftests.c, - unittests/utils-selftests.c, unittests/xml-utils-selftests.c, - utils.c, utils.h, valarith.c, valops.c, valprint.c, value.c, - value.h, varobj.c, varobj.h, windows-nat.c, x86-linux-nat.c, - xml-support.c, xml-support.h, xml-tdesc.h, xstormy16-tdep.c, - xtensa-linux-nat.c, dwarf2read.h: Change common to gdbsupport. - -2019-07-09 Andrew Burgess <andrew.burgess@embecosm.com> - - * linespec.c (decode_digits_list_mode): Set explicit_line to a - bool value. - (decode_digits_ordinary): Set explicit_line field in sal. - * symtab.c (skip_prologue_sal): Don't skip prologue for a - symtab_and_line that was set on an explicit line number in - assembler code. Do always update the recorded symtab and line if - we do skip the prologue. - -2019-07-09 Andrew Burgess <andrew.burgess@embecosm.com> - - * breakpoint.c (set_breakpoint_location_function): Remove - explicit_loc parameter. - (momentary_breakpoint_from_master): Update call to - set_breakpoint_location_function. - (add_location_to_breakpoint): Likewise. - -2019-07-09 Andrew Burgess <andrew.burgess@embecosm.com> - - * riscv-tdep.c (riscv_features_from_gdbarch_info): Don't modify - required features based on default bfd type when no specific bfd - is present. - -2019-07-08 Philippe Waroquiers <philippe.waroquiers@skynet.be> - - * NEWS: Mention that GDB printf and eval commands can now print - C-style and Ada-style convenience var strings without - calling the inferior. - * printcmd.c (printf_c_string): Locally print GDB internal var - instead of transiting via the inferior. - (printf_wide_c_string): Likewise. - -2019-07-04 Alan Hayward <alan.hayward@arm.com> - - PR breakpoints/25011 - * symfile.c (symbol_file_command): Call solib_create_inferior_hook. - -2019-07-04 Tom Tromey <tom@tromey.com> - - PR tui/24724: - * tui/tui-winsource.c (tui_clear_source_content): Update. - (tui_source_window_base::set_is_exec_point_at): Fix comment. - (tui_update_breakpoint_info): Update. - (tui_set_exec_info_content): Update. - * tui/tui-source.c (tui_set_source_content_nil): Update. - * tui/tui-disasm.c (tui_set_disassem_content): Don't set - has_break. - * tui/tui-data.h (enum tui_bp_flag): New. - (tui_bp_flags): New enum flags type. - (struct tui_source_element) <break_mode>: Change type. Rename - from has_break. - (TUI_BP_ENABLED, TUI_BP_DISABLED, TUI_BP_HIT) - (TUI_BP_CONDITIONAL, TUI_BP_HARDWARE): Don't define. Now enum - constants. - * tui/tui-winsource.h: Fix comment. - -2019-07-04 Alan Hayward <alan.hayward@arm.com> - - * aarch32-linux-nat.h (VFP_REGS_SIZE): Remove define. - * aarch64-linux-nat.c (fetch_fpregs_from_thread) - (store_fpregs_to_thread) - (aarch64_linux_nat_target::read_description): Use ARM_VFP3_REGS_SIZE. - * arch/arm.h (IWMMXT_VEC_REGISTER_SIZE, ARM_CORE_REGS_SIZE) - (ARM_FP_REGS_SIZE, ARM_VFP2_REGS_SIZE, ARM_VFP3_REGS_SIZE) - (IWMMXT_REGS_SIZE): Add define. - * arm-linux-nat.c (IWMMXT_REGS_SIZE): Remove define. - (fetch_vfp_regs, store_vfp_regs) - (arm_linux_nat_target::read_description): Use ARM_VFP3_REGS_SIZE. - * arm-tdep.c (arm_register_g_packet_guesses): Use new defines. - -2019-07-04 Alan Hayward <alan.hayward@arm.com> - - * arch/arm-get-next-pcs.c (thumb_get_next_pcs_raw): Use ARM_ - defines. - * arch/arm-linux.c (arm_linux_sigreturn_next_pc_offset): Likewise. - * arch/arm.h (INT_REGISTER_SIZE) Rename from... - (ARM_INT_REGISTER_SIZE): ...to this. - (ARM_FP_REGISTER_SIZE) (ARM_VFP_REGISTER_SIZE): Add define. - * arm-linux-tdep.c (ARM_LINUX_JB_ELEMENT_SIZE) - (ARM_LINUX_SIZEOF_GREGSET, arm_linux_supply_gregset) - (arm_linux_collect_gregset, supply_nwfpe_register) - (collect_nwfpe_register, arm_linux_collect_nwfpe): Use ARM_ - defines. - * arm-linux-tdep.h (ARM_LINUX_SIZEOF_NWFPE, NWFPE_FPSR_OFFSET) - (NWFPE_FPCR_OFFSET, NWFPE_TAGS_OFFSET): Likewise - * arm-nbsd-tdep.c (ARM_NBSD_JB_ELEMENT_SIZE): Likewise. - * arm-tdep.c (arm_push_dummy_call, arm_extract_return_value) - (arm_return_in_memory, arm_store_return_value) - (arm_get_longjmp_target, arm_register_g_packet_guesses) - (arm_record_ld_st_multiple): Likewise. - * arm-tdep.h (FP_REGISTER_SIZE, VFP_REGISTER_SIZE): Remove. - * arm-wince-tdep.c (ARM_WINCE_JB_ELEMENT_SIZE): Use ARM_ defines. - -2019-07-04 Alan Hayward <alan.hayward@arm.com> - - * aarch64-linux-tdep.c (aarch64_linux_init_abi): Use - AARCH64_DISPLACED_MODIFIED_INSNS. - * aarch64-tdep.c (struct aarch64_displaced_step_data) - (aarch64_displaced_step_copy_insn): Likewise. - * aarch64-tdep.h (DISPLACED_MODIFIED_INSNS): Rename from.. - (AARCH64_DISPLACED_MODIFIED_INSNS): ...to this. - * arm-linux-tdep.c (arm_linux_cleanup_svc): Use - ARM_DISPLACED_MODIFIED_INSNS. - * arm-tdep.c (arm_gdbarch_init): Likewise. - * arm-tdep.h (DISPLACED_MODIFIED_INSNS): Rename from.. - (ARM_DISPLACED_MODIFIED_INSNS): ...to this. - (struct arm_displaced_step_closure): Use - ARM_DISPLACED_MODIFIED_INSNS. - -2019-07-04 Alan Hayward <alan.hayward@arm.com> - - * features/Makefile: Remove unused xml files. - * features/aarch64.xml: Remove. - * features/i386/amd64-avx-avx512-linux.xml: Remove. - * features/i386/amd64-avx-avx512.xml: Remove. - * features/i386/amd64-avx-linux.xml: Remove. - * features/i386/amd64-avx-mpx-avx512-pku-linux.xml: Remove. - * features/i386/amd64-avx-mpx-avx512-pku.xml: Remove. - * features/i386/amd64-avx-mpx-linux.xml: Remove. - * features/i386/amd64-avx-mpx.xml: Remove. - * features/i386/amd64-avx.xml: Remove. - * features/i386/amd64-linux.xml: Remove. - * features/i386/amd64-mpx-linux.xml: Remove. - * features/i386/amd64-mpx.xml: Remove. - * features/i386/amd64.xml: Remove. - * features/i386/i386-avx-avx512-linux.xml: Remove. - * features/i386/i386-avx-avx512.xml: Remove. - * features/i386/i386-avx-linux.xml: Remove. - * features/i386/i386-avx-mpx-avx512-pku-linux.xml: Remove. - * features/i386/i386-avx-mpx-avx512-pku.xml: Remove. - * features/i386/i386-avx-mpx-linux.xml: Remove. - * features/i386/i386-avx-mpx.xml: Remove. - * features/i386/i386-avx.xml: Remove. - * features/i386/i386-linux.xml: Remove. - * features/i386/i386-mmx-linux.xml: Remove. - * features/i386/i386-mmx.xml: Remove. - * features/i386/i386-mpx-linux.xml: Remove. - * features/i386/i386-mpx.xml: Remove. - * features/i386/i386.xml: Remove. - * features/i386/x32-avx-avx512-linux.xml: Remove. - * features/i386/x32-avx-linux.xml: Remove. - * features/i386/x32-linux.xml: Remove. - -2019-07-04 Alan Hayward <alan.hayward@arm.com> - - * regformats/aarch64.dat: Remove. - * regformats/i386/amd64-avx-avx512-linux.dat: Remove. - * regformats/i386/amd64-avx-linux.dat: Remove. - * regformats/i386/amd64-avx-mpx-avx512-pku-linux.dat: Remove. - * regformats/i386/amd64-avx-mpx-linux.dat: Remove. - * regformats/i386/amd64-linux.dat: Remove. - * regformats/i386/amd64-mpx-linux.dat: Remove. - * regformats/i386/amd64.dat: Remove. - * regformats/i386/i386-avx-avx512-linux.dat: Remove. - * regformats/i386/i386-avx-linux.dat: Remove. - * regformats/i386/i386-avx-mpx-avx512-pku-linux.dat: Remove. - * regformats/i386/i386-avx-mpx-linux.dat: Remove. - * regformats/i386/i386-linux.dat: Remove. - * regformats/i386/i386-mmx-linux.dat: Remove. - * regformats/i386/i386-mpx-linux.dat: Remove. - * regformats/i386/i386.dat: Remove. - * regformats/i386/x32-avx-avx512-linux.dat: Remove. - * regformats/i386/x32-avx-linux.dat: Remove. - * regformats/i386/x32-linux.dat: Remove. - -2019-07-04 Alan Hayward <alan.hayward@arm.com> - - * aarch64-tdep.c: Remove xml self tests. - * amd64-linux-tdep.c: Likewise. - * amd64-tdep.c: Likewise. - * i386-linux-tdep.c: Likewise. - * i386-tdep.c: Likewise. - -2019-07-03 Pedro Alves <palves@redhat.com> - - PR cli/24732 - * cli/cli-cmds.c (struct pipe_cmd_opts): New. - (pipe_cmd_option_defs): New. - (make_pipe_cmd_options_def_group): New. - (pipe_command): Use gdb::option::process_options. - (pipe_command_completer): New function. - (_initialize_cli_cmds): Install completer for "pipe" command. - -2019-07-03 Pedro Alves <palves@redhat.com> - - * cli/cli-option.c (union option_value) <string>: New field. - (struct option_def_and_value): Add ctor, move ctor, dtor and - use DISABLE_COPY_AND_ASSIGN. - (option_def_and_value::clear_value): New. - (parse_option, save_option_value_in_ctx, get_val_type_str) - (add_setshow_cmds_for_options): Handle var_string. - * cli-option.h (union option_def::var_address) <string>: New - field. - (struct string_option_def): New. - * maint-test-options.c (struct test_options_opts): Add default - ctor and use DISABLE_COPY_AND_ASSIGN. - <string_opt>: New field. - (test_options_opts::~test_options_opts): New. - (test_options_opts::dump): Also dump "-string". - (test_options_option_defs): Install "string. - -2019-07-03 Pedro Alves <palves@redhat.com> - - * cli/cli-option.c (parse_option) <var_enum>: Don't return an - option_value with a null enumeration. - (complete_options): Save the option values in the context. - (save_option_value_in_ctx): New, factored out from ... - (process_options): ... here. - * cli/cli-utils.c (get_ulongest): Don't advance PP until the end - of the function. - * maint-test-options.c (test_options_opts::dump): New, factored - out from ... - (maintenance_test_options_command_mode): ... here. - (maintenance_test_options_command_completion_result): Delete. - (maintenance_test_options_command_completion_text): Update - comment. - (maintenance_show_test_options_completion_result): Change - prototype. Just print - maintenance_test_options_command_completion_text. - (save_completion_result): New. - (maintenance_test_options_completer_mode): Pass options context to - complete_options, and then save a dump. - (_initialize_maint_test_options): Use add_cmd to install "maint - show test-options-completion-result". - -2019-07-03 Pedro Alves <palves@redhat.com> - - * NEWS (New commands): Mention "with" and "maint with". - * cli/cli-cmds.c (with_command_1, with_command_completer_1) - (with_command, with_command_completer): New. - (pipe_command): Adjust to new repeat_previous - interface. - (_initialize_cli_cmds): Install the "with" command and its "w" - alias. - * cli/cli-cmds.h (with_command_1, with_command_completer_1): New - declarations. - * cli/cli-setshow.c (parse_cli_var_uinteger) - (parse_cli_var_zuinteger_unlimited, do_set_command): Handle empty - argument strings for all var_types. - (get_setshow_command_value_string): New, factored out from ... - (do_show_command): ... this. - * cli/cli-setshow.h: Include <string>. - (get_setshow_command_value_string): Declare. - * command.h (repeat_previous): Now returns const char *. Adjust - comment. - * maint.c: Include "cli/cli-cmds.h". - (maintenance_with_cmd, maintenance_with_cmd_completer): New. - (_initialize_maint_cmds): Register the "maintenance with" command. - * top.c (repeat_previous): Move bits from pipe_command here: - Return the saved command line, if any; error out if there's no - command to relaunch. - -2019-07-03 Pedro Alves <palves@redhat.com> - - * NEWS (New commands): Mention "maint set/show test-settings" - instead of "maint test-settings". - * maint-test-settings.c (maintenance_test_settings_list): Delete. - (maintenance_test_settings_set_list): Rename to ... - (maintenance_set_test_settings_list): ... this. - (maintenance_test_settings_show_list): Rename to ... - (maintenance_show_test_settings_list): ... this. - (maintenance_test_settings_cmd): Delete. - (maintenance_test_settings_set_cmd): ... - (maintenance_set_test_settings_cmd): ... this. - (maintenance_test_settings_show_cmd): ... - (maintenance_show_test_settings_cmd): ... this. - (maintenance_test_settings_show_value_cmd): - (maintenance_show_test_settings_value_cmd): ... this. - (_initialize_maint_test_settings): No longer install the "maint - test-settings" prefix command. Rename "maint test-settings set" - to "maint set test-settings", and "maint test-settings show" to - "maint show test-settings". Adjust all subcommands. - -2019-07-03 Pedro Alves <palves@redhat.com> - - * maint-test-settings.c: Fix file's intro comment. Replace all - references to "test-options" with references to "test-settings", - in comments. + * printcmd.c (struct display) <next>: Remove. + <display>: New constructor. + <exp_string>: Now a std::string. + <enabled_p>: Now a bool. + (display_number): Move definition earlier. + (displays): Rename from display_chain. Now a std::vector. + (ALL_DISPLAYS, ALL_DISPLAYS_SAFE): Remove. + (display_command): Update. + (do_one_display, disable_display) + (enable_disable_display_command, do_enable_disable_display): + Update. + (free_display): Remove. + (clear_displays): Rewrite. + (delete_display): Update. + (map_display_numbers): Use function_view. Remove "data" + parameter. Update. + (do_delete_display): Remove. + (undisplay_command): Update. + (do_one_display, do_displays, disable_display) + (info_display_command): Update. + (do_enable_disable_display): Remove. + (enable_disable_display_command) + (clear_dangling_display_expressions): Update. + +2020-05-08 Tom Tromey <tom@tromey.com> + + * symtab.c (set_symbol_cache_size) + (maintenance_print_symbol_cache, maintenance_flush_symbol_cache) + (maintenance_print_symbol_cache_statistics): Update. + * symmisc.c (print_symbol_bcache_statistics) + (print_objfile_statistics, maintenance_print_objfiles) + (maintenance_info_symtabs, maintenance_check_symtabs) + (maintenance_expand_symtabs, maintenance_info_line_tables): + Update. + * symfile-debug.c (set_debug_symfile): Update. + * source.c (forget_cached_source_info): Update. + * python/python.c (gdbpy_progspaces): Update. + * psymtab.c (maintenance_info_psymtabs): Update. + * probe.c (parse_probes): Update. + * linespec.c (iterate_over_all_matching_symtabs) + (collect_symtabs_from_filename, search_minsyms_for_name): Update. + * guile/scm-progspace.c (gdbscm_progspaces): Update. + * exec.c (exec_target::close): Update. + * ada-tasks.c (ada_tasks_new_objfile_observer): Update. + * breakpoint.c (print_one_breakpoint_location) + (create_longjmp_master_breakpoint) + (create_std_terminate_master_breakpoint): Update. + * progspace.c (program_spaces): Now a std::vector. + (maybe_new_address_space): Update. + (add_program_space): Remove. + (program_space::program_space): Update. + (remove_program_space): Update. + (number_of_program_spaces): Remove. + (print_program_space, update_address_spaces): Update. + * progspace.h (program_spaces): Change type. + (ALL_PSPACES): Remove. + (number_of_program_spaces): Don't declare. + (struct program_space) <next>: Remove. + +2020-05-08 Tom Tromey <tom@tromey.com> + + * mi/mi-cmd-file.c (mi_cmd_file_list_shared_libraries): Update. + * solib-svr4.c (svr4_fetch_objfile_link_map): Update. + (enable_break): Update. + * solib-frv.c (frv_fdpic_find_global_pointer): Update. + (frv_fdpic_find_canonical_descriptor): Update. + (frv_fetch_objfile_link_map): Update. + * progspace.c (program_space::free_all_objfiles): Update. + (program_space::solibs): New method. + * progspace.h (struct program_space) <solibs>: New method. + * solist.h (master_so_list): Don't declare. + (ALL_SO_LIBS): Remove. + * solib.h (so_list_head): Remove. + (update_solib_list): Update comment. + * solib.c (master_so_list): Remove. + (solib_used, update_solib_list, solib_add) + (info_sharedlibrary_command, clear_solib) + (reload_shared_libraries_1, remove_user_added_objfile): Update. + +2020-05-08 Tom Tromey <tom@tromey.com> + + * extension.c (extension_languages): Now a std::array. + (ALL_EXTENSION_LANGUAGES): Remove. + (get_ext_lang_defn, get_ext_lang_of_file) + (eval_ext_lang_from_control_command): Update. + (finish_ext_lang_initialization) + (auto_load_ext_lang_scripts_for_objfile) + (ext_lang_type_printers::ext_lang_type_printers) + (apply_ext_lang_type_printers) + (ext_lang_type_printers::~ext_lang_type_printers) + (apply_ext_lang_val_pretty_printer, apply_ext_lang_frame_filter) + (preserve_ext_lang_values, get_breakpoint_cond_ext_lang) + (breakpoint_ext_lang_cond_says_stop, check_quit_flag) + (get_matching_xmethod_workers, ext_lang_colorize) + (ext_lang_before_prompt): Update. + (ALL_ENABLED_EXTENSION_LANGUAGES): Remove. -2019-07-03 Pedro Alves <palves@redhat.com> +2020-05-08 Tom Tromey <tom@tromey.com> - * maint-test-settings.c (maintenance_test_settings_xxx) - (maintenance_test_settings_yyy, maintenance_test_settings_zzz): - New. - (maintenance_test_settings_enums): Use them. - (maintenance_test_settings_enum): Default to - maintenance_test_settings_xxx. - (_initialize_maint_test_settings): Initialize - MAINTENANCE_TEST_SETTINGS_FILENAME. - -2019-07-02 Simon Marchi <simon.marchi@polymtl.ca> - - * breakpoint.h (remove_breakpoints_inf): Change return type to - void, move function documentation here. - * breakpoint.c (remove_breakpoints_inf): Change return type to - void, move function documentation to header. - -2019-07-02 Pedro Alves <palves@redhat.com> - - * NEWS (Completion improvements): Mention "info threads". - * thread.c (struct info_threads_opts, info_threads_option_defs) - (make_info_threads_options_def_group): New. - (info_threads_command): Use gdb::option::process_options. - (info_threads_command_completer): New. - (_initialize_thread): Use gdb::option::build_help to build the - help text for "info threads". - -2019-07-02 Simon Marchi <simon.marchi@polymtl.ca> - - * defs.h (generic_load): Move from here... - * symfile.h (generic_load): ... to here. Rename name parameter - to args. - * symfile.c (generic_load): Add comment. - -2019-07-01 Tom Tromey <tromey@adacore.com> - - * dwarf2read.c - (dw2_debug_names_iterator::find_vec_in_debug_names): Hoist - declaration of without_params. Fix formatting. - -2019-07-01 Tom Tromey <tromey@adacore.com> - - * ada-exp.y (find_primitive_type): Update. - * ada-lang.h (ada_lookup_symbol): Update. - * ada-lang.c (ada_lookup_symbol): Remove "is_a_field_of_this" - parameter. - (ada_lookup_encoded_symbol, ada_lookup_symbol_nonlocal): Update. + * symtab.h (class demangle_result_storage) <set_malloc_ptr>: New + overload. + <swap_string, m_string>: Remove. + * symtab.c (demangle_for_lookup, completion_list_add_symbol): + Update. + * stabsread.c (define_symbol, read_type): Update. + * linespec.c (find_linespec_symbols): Update. + * gnu-v3-abi.c (gnuv3_get_typeid): Update. + * dwarf2/read.c (dwarf2_canonicalize_name): Update. + * dbxread.c (read_dbx_symtab): Update. + * cp-support.h (cp_canonicalize_string_full) + (cp_canonicalize_string, cp_canonicalize_string_no_typedefs): + Return unique_xmalloc_ptr. + * cp-support.c (inspect_type): Update. + (cp_canonicalize_string_full): Return unique_xmalloc_ptr. + (cp_canonicalize_string_no_typedefs, cp_canonicalize_string): + Likewise. + * c-typeprint.c (print_name_maybe_canonical): Update. + * break-catch-throw.c (check_status_exception_catchpoint): + Update. -2019-06-28 Sergio Durigan Junior <sergiodj@redhat.com> +2020-05-08 Tom de Vries <tdevries@suse.de> - PR breakpoints/24541 - * gdbarch.c: Regenerate. - * gdbarch.h: Regenerate. - * gdbarch.sh: Add 'stap_adjust_register'. - * i386-tdep.c: Include '<unordered_set>'. - (i386_stap_adjust_register): New function. - (i386_elf_init_abi): Register 'i386_stap_adjust_register'. - * stap-probe.c (stap_parse_register_operand): Call - 'gdbarch_stap_adjust_register'. + * infrun.c (follow_fork): Copy current_line and current_symtab to + child thread. -2019-06-28 Sergio Durigan Junior <sergiodj@redhat.com> +2020-05-07 Simon Marchi <simon.marchi@efficios.com> - PR python/24742 - https://bugzilla.redhat.com/show_bug.cgi?id=1723564 - * python/python.c (do_start_initialization): Use 'xmalloc' - instead of 'PyMem_Malloc'. + * async-event.c (struct async_signal_handler, struct + async_event_handler): Reformat, remove typedef. -2019-06-28 Tom Tromey <tromey@adacore.com> +2020-05-07 Simon Marchi <simon.marchi@efficios.com> - * dwarf2read.c (partial_die_info::read): Prefer the linkage name - for Ada. + * gdbtypes.h (TYPE_DYN_PROP_LIST): Remove. Update all users + access thistype->main_type->dyn_prop_list directly. -2019-06-27 Tom Tromey <tromey@adacore.com> +2020-05-07 Simon Marchi <simon.marchi@efficios.com> - * arm-tdep.c (arm_objfile_data_key): Move lower. Change type to - objfile_key. - (arm_find_mapping_symbol, arm_record_special_symbol) - (_initialize_arm_tdep): Update. - (arm_objfile_data_free): Remove. + * gdbtypes.h (struct type) <remove_dyn_prop>: New method. + (remove_dyn_prop): Remove. Update all users to use + type::remove_dyn_prop. + * gdbtypes.c (remove_dyn_prop): Rename to... + (type::remove_dyn_prop): ... this. -2019-06-27 Tom Tromey <tromey@adacore.com> +2020-05-07 Simon Marchi via Gdb-patches <gdb-patches@sourceware.org> - * cp-valprint.c (cp_print_value_fields): Pass opts, not options, - to cp_print_static_field. + * gdbtypes.h (struct type) <add_dyn_prop>: New method. + (add_dyn_prop): Remove. Update all users to use + type::add_dyn_prop. + * gdbtypes.c (add_dyn_prop): Rename to... + (type::add_dyn_prop): ... this. -2019-06-26 Tom Tromey <tromey@adacore.com> +2020-05-07 Simon Marchi <simon.marchi@efficios.com> - * minsyms.c (lookup_minimal_symbol_solib_trampoline): Remove. - * minsyms.h (lookup_minimal_symbol_solib_trampoline): Don't - declare. + * gdbtypes.h (struct type) <get_dyn_prop>: New method. + (get_dyn_prop): Remove. Update all users to use + type::dyn_prop. + * gdbtypes.c (get_dyn_prop): Rename to... + (type::dyn_prop): ... this. -2019-06-26 Alan Hayward <alan.hayward@arm.com> +2020-05-06 Simon Marchi <simon.marchi@efficios.com> - * features/aarch64-core.c (create_feature_aarch64_core): - Regenerate. - * features/aarch64-core.xml: Add cpsr flags. + * gdbtypes.h (struct main_type) <flag_static>: Remove. -2019-06-26 Alan Hayward <alan.hayward@arm.com> +2020-05-06 Simon Marchi <simon.marchi@efficios.com> - * arm-tdep.c (arm_gnu_triplet_regexp): New function. - (arm_gdbarch_init): Add arm_gnu_triplet_regexp. + * amd64-tdep.c (amd64_analyze_prologue): Check for `endbr64` + instruction, skip it if it's there. -2019-06-25 Simon Marchi <simon.marchi@polymtl.ca> +2020-05-05 Simon Marchi <simon.marchi@efficios.com> - * arm-tdep.c (struct arm_per_objfile) <section_maps_sorted>: New - field. - (arm_find_mapping_symbol): Sort mapping symbol vectors on first - use. - (arm_record_special_symbol): Don't insert new symbol in sorted - position, push it at the end. + * gdbtypes.h (struct main_type) <flag_incomplete>: Remove. -2019-06-25 Simon Marchi <simon.marchi@polymtl.ca> +2020-05-04 Simon Marchi <simon.marchi@efficios.com> - * arm-tdep.c (struct arm_mapping_symbol) (operator <): New. - (arm_mapping_symbol_s): Remove. - (DEF_VEC_O(arm_mapping_symbol_s)): Remove. - (arm_mapping_symbol_vec): New typedef. - (struct arm_per_objfile): Add constructor. - <section_maps>: Change type to - std::unique_ptr<arm_mapping_symbol_vec[]>. - (arm_compare_mapping_symbols): Remove. - (arm_find_mapping_symbol): Adjust to section_maps type change. - (arm_objfile_data_free): Call delete on arm_per_objfile. - (arm_record_special_symbol): Adjust to section_maps type change. - Allocate arm_per_objfile with new. + * gdbtypes.h (TYPE_INCOMPLETE): Remove. + * gdbtypes.c (recursive_dump_type): Remove use of + TYPE_INCOMPLETE. -2019-06-25 Philippe Waroquiers <philippe.waroquiers@skynet.be> +2020-05-03 Tom Tromey <tom@tromey.com> - * cli/cli-cmds.c (alias_command): Compare the alias prefix - with the command prefix. + * breakpoint.c (catch_command, tcatch_command): Remove. + (_initialize_breakpoint): Use add_basic_prefix_cmd, + add_show_prefix_cmd. + (set_breakpoint_cmd, show_breakpoint_cmd): Remove + * utils.c (set_internal_problem_cmd, show_internal_problem_cmd): + Remove. + (add_internal_problem_command): Use add_basic_prefix_cmd, + add_show_prefix_cmd. + * mips-tdep.c (set_mipsfpu_command): Remove. + (_initialize_mips_tdep): Use add_basic_prefix_cmd. + * dwarf2/index-cache.c (set_index_cache_command): Remove. + (_initialize_index_cache): Use add_basic_prefix_cmd. + * memattr.c (dummy_cmd): Remove. + (_initialize_mem): Use add_basic_prefix_cmd, add_show_prefix_cmd. + * tui/tui-win.c (set_tui_cmd, show_tui_cmd): Remove. + (_initialize_tui_win): Use add_basic_prefix_cmd, + add_show_prefix_cmd. + * cli/cli-logging.c (set_logging_command): Remove. + (_initialize_cli_logging): Use add_basic_prefix_cmd, + add_show_prefix_cmd. + (show_logging_command): Remove. + * target.c (target_command): Remove. + (add_target): Use add_basic_prefix_cmd. -2019-06-25 Tom Tromey <tom@tromey.com> +2020-05-02 Hannes Domani <ssbssa@yahoo.de> - * tui/tui-wingeneral.c (tui_delete_win): Remove "return". - * tui/tui-data.c (~tui_gen_win_info): Remove "if". + * gdbtypes.h (enum dynamic_prop_node_kind): Fix typo. -2019-06-25 Tom Tromey <tom@tromey.com> +2020-05-01 Philippe Waroquiers <philippe.waroquiers@skynet.be> - * tui/tui-layout.c (init_and_make_win): Assert on unrecognized - type. - * tui/tui-data.h (struct tui_gen_win_info): Make constructor - protected. + * gdb-gdb.gdb-in: Remove breakpoint on disappeared function + info_command. -2019-06-25 Tom Tromey <tom@tromey.com> +2020-04-30 Kamil Rytarowski <n54@gmx.com> - * tui/tui-winsource.c - (tui_source_window_base::set_is_exec_point_at): Add check against - LOA_ADDRESS. + * nbsd-nat.c (nbsd_enable_proc_events) + (nbsd_nat_target::post_startup_inferior): Add. + (nbsd_nat_target::post_attach): Call `nbsd_enable_proc_events'. + (nbsd_nat_target::update_thread_list): Rewrite. + (nbsd_nat_target::wait): Handle "PTRACE_LWP_EXIT" and + "PTRACE_LWP_CREATE". + * nbsd-nat.h (nbsd_nat_target::post_startup_inferior): Add. -2019-06-25 Tom Tromey <tom@tromey.com> +2020-04-30 Philippe Waroquiers <philippe.waroquiers@skynet.be> - * tui/tui-source.c (tui_set_source_content): Don't check before - xfree. - * tui/tui-disasm.c (tui_disassemble): Don't check before xfree. - -2019-06-25 Tom Tromey <tom@tromey.com> - - * tui/tui-winsource.h (tui_update_source_window_as_is) - (tui_alloc_source_buffer, tui_line_is_displayed) - (tui_addr_is_displayed): Change type of win_info. - * tui/tui-winsource.c (tui_update_source_window_as_is) - (tui_clear_source_content, tui_show_source_line) - (tui_show_source_content, tui_source_window_base::refill) - (tui_source_window_base::set_is_exec_point_at) - (tui_source_window_base::set_is_exec_point_at) - (tui_update_breakpoint_info, tui_set_exec_info_content): Update. - (tui_alloc_source_buffer, tui_line_is_displayed) - (tui_addr_is_displayed): Change type of win_info. Update. - * tui/tui-win.c (tui_resize_all, tui_adjust_win_heights) - (tui_source_window_base::do_make_visible_with_new_height): - Update. - * tui/tui-source.c (tui_set_source_content) - (tui_set_source_content_nil) - (tui_source_window::do_scroll_vertical): Update. - * tui/tui-layout.c (show_layout): Update. - * tui/tui-disasm.c (tui_set_disassem_content) - (tui_disasm_window::do_scroll_vertical): Update. - * tui/tui-data.h (tui_win_content): Remove. - (struct tui_gen_win_info) <content, content_size>: Remove. - (struct tui_source_element): Add initializers and destructor. - (union tui_which_element, struct tui_win_element): Remove. - (struct tui_source_window_base) <content>: New field. - (struct tui_data_window): Remove destructor. - (tui_alloc_content, tui_free_win_content) - (tui_free_all_source_wins_content): Don't declare. - * tui/tui-data.c (tui_initialize_static_data): Update. - (init_content_element, tui_alloc_content): Remove. - (~tui_gen_win_info): Update. - (~tui_data_window, tui_free_all_source_wins_content) - (tui_free_win_content, free_content, free_content_elements): - Remove. + * stack.c (_initialize_stack): Remove duplicated creation + of "frame" command and "f" alias. -2019-06-25 Tom Tromey <tom@tromey.com> +2020-04-30 Hannes Domani <ssbssa@yahoo.de> - * tui/tui-winsource.h (tui_clear_source_content) - (tui_erase_source_content, tui_show_source_content): Change type - of win_info. - * tui/tui-winsource.c (tui_clear_source_content) - (tui_erase_source_content, tui_show_source_content): Change type - of win_info. - * tui/tui-win.c (tui_resize_all, tui_adjust_win_heights): Update. - * tui/tui-source.h (tui_set_source_content_nil): Change type of - win_info. - * tui/tui-source.c (tui_set_source_content_nil): Change type of - win_info. - * tui/tui-layout.c (show_source_or_disasm_and_command): Update. - -2019-06-25 Tom Tromey <tom@tromey.com> - - * tui/tui-winsource.c (tui_clear_source_content) - (tui_source_window_base::set_is_exec_point_at): Update. - * tui/tui-source.c (tui_set_source_content_nil): Update. - * tui/tui-data.h (struct tui_source_element) <is_exec_point>: Now - a bool. - * tui/tui-data.c (init_content_element): Update. - -2019-06-25 Tom Tromey <tom@tromey.com> - - * tui/tui-wingeneral.c (tui_gen_win_info::make_visible): Update. - * tui/tui-win.c (make_invisible_and_set_new_height): Update. - * tui/tui-layout.c (init_and_make_win): Update. - * tui/tui.h (enum tui_win_type): Update. - * tui/tui-data.h (tui_win_is_auxiliary): Rename from - tui_win_is_auxillary. - * tui/tui-data.c (tui_win_is_auxiliary): Rename from - tui_win_is_auxillary. - -2019-06-25 Tom Tromey <tom@tromey.com> - - * tui/tui-wingeneral.c (tui_data_window::refresh_window): Update. - * tui/tui-windata.c (tui_data_window::first_data_item_displayed) - (tui_delete_data_content_windows, tui_display_all_data) - (tui_data_window::do_scroll_vertical, tui_display_data_from): - Update. - * tui/tui-win.c (tui_data_window::set_new_height): Simplify. - * tui/tui-regs.c (tui_last_regs_line_no) - (tui_line_from_reg_element_no, tui_first_reg_element_no_inline) - (tui_show_registers): Update. - (tui_show_register_group): Return void. Update. - (tui_display_registers_from, tui_display_reg_element_at_line) - (tui_display_registers_from_line, tui_check_register_values): - Update. - * tui/tui-data.h (union tui_which_element) <data_window>: Remove - member. - (struct tui_data_window) <regs_content>: Now a std::vector. - <regs_content_count>: Remove. - (tui_add_content_elements, tui_free_data_content): Don't declare. - * tui/tui-data.c (tui_data_window::clear_detail): Update. - (init_content_element): Remove DATA_WIN case. Add assert. - (tui_add_content_elements): Remove. - (tui_data_window): Update. - (tui_free_data_content): Remove. - (free_content_elements): Remove DATA_WIN case. - -2019-06-25 Tom Tromey <tom@tromey.com> - - * tui/tui-data.c (tui_data_item_window): Update. - * tui/tui-windata.h (tui_check_data_values): Don't declare. - * tui/tui-windata.c (tui_display_all_data) - (tui_display_data_from_line): Update. - (tui_check_data_values): Remove. - * tui/tui-regs.c (tui_show_register_group) - (tui_display_reg_element_at_line): Update. - * tui/tui-hooks.c (tui_register_changed) - (tui_refresh_frame_and_register_information): Call - tui_check_register_values. - * tui/tui-data.h (struct tui_data_window) <data_content, - data_content_count, data_type>: Remove. - (enum tui_data_type): Remove. + PR gdb/18706 + * gdbtypes.c (check_typedef): Calculate size of array of + stubbed type. - * tui/tui-data.c (tui_data_window::clear_detail) - (~tui_data_window): Update. +2020-04-30 Hannes Domani <ssbssa@yahoo.de> -2019-06-25 Tom Tromey <tom@tromey.com> + PR gdb/15559 + * i386-tdep.c (i386_push_dummy_call): Call + i386_thiscall_push_dummy_call. + (i386_thiscall_push_dummy_call): New function. + * i386-tdep.h (i386_thiscall_push_dummy_call): Declare. + * i386-windows-tdep.c (i386_windows_push_dummy_call): New function. + (i386_windows_init_abi): Call set_gdbarch_push_dummy_call. - * tui/tui-windata.h (tui_first_data_item_displayed): Don't - declare. - * tui/tui-windata.c (tui_data_window::first_data_item_displayed): - Rename from tui_first_data_item_displayed. Update. - (tui_data_window::refresh_all) - (tui_data_window::do_scroll_vertical): Update. - * tui/tui-data.h (struct tui_data_window) - <first_data_item_displayed>: Declare new method. - -2019-06-25 Tom Tromey <tom@tromey.com> - - * tui/tui-data.h (tui_init_generic_part): Don't declare. - * tui/tui-data.c (tui_init_generic_part): Remove, moving - contents... - (tui_initialize_static_data): ...here. - -2019-06-25 Tom Tromey <tom@tromey.com> - - * tui/tui-regs.c (tui_show_registers, tui_show_register_group) - (tui_display_registers_from, tui_check_register_values): Update. - (tui_display_register): Remove win_info parameter; update. - (tui_get_register): Change type of parameters. - * tui/tui-data.h (struct tui_data_element): Remove. - (union tui_which_element) <data>: Remove. - <data_window>: Change type. - (struct tui_data_item_window): New. - * tui/tui-data.c (init_content_element): Remove DATA_ITEM_WIN - case. Add assert. - (~tui_data_item_window): New destructor. - (free_content_elements): Remove DATA_ITEM_WIN case. +2020-04-29 Simon Marchi <simon.marchi@efficios.com> -2019-06-25 Tom Tromey <tom@tromey.com> + * gdbarch.sh (do_read): Add shellcheck disable directive for + warning SC2162. - * tui/tui.h (enum tui_win_type) <MAX_WINDOWS, UNDEFINED_WIN>: - Remove. +2020-04-29 Simon Marchi <simon.marchi@efficios.com> -2019-06-25 Tom Tromey <tom@tromey.com> + * gdbarch.sh: Use ${foo:-} where shellcheck would report a + "referenced but not assigned" warning. - * tui/tui-data.h (struct tui_command_element): Remove. - (union tui_which_element) <command>: Remove. - * tui/tui-data.c (init_content_element): Remove CMD_WIN case. Add - assert. - (free_content_elements): Remove CMD_WIN case. +2020-04-29 Simon Marchi <simon.marchi@efficios.com> -2019-06-25 Tom Tromey <tom@tromey.com> + * gdbarch.sh: Remove code that sets fallbackdefault. - * tui/tui-layout.c (tui_set_layout): Update. - * tui/tui-data.h (struct tui_layout_def) <split>: Remove. - * tui/tui-data.c (layout_def): Update. +2020-04-29 Simon Marchi <simon.marchi@efficios.com> -2019-06-25 Tom Tromey <tom@tromey.com> + * gdbarch.sh: Use shell operators && and || instead of + -a and -o. - * tui/tui-wingeneral.c (tui_refresh_all): Update. - * tui/tui-win.c (tui_resize_all, tui_adjust_win_heights) - (tui_source_window_base::set_new_height): Update. - * tui/tui-stack.c (tui_make_status_line): Change parameter type. - Update. - (tui_set_locator_fullname, tui_set_locator_info) - (tui_show_frame_info): Update. - * tui/tui-source.c (tui_set_source_content) - (tui_source_is_displayed): Update. - * tui/tui-layout.c (show_source_disasm_command, show_data) - (show_source_or_disasm_and_command): Update. - * tui/tui-disasm.c (tui_set_disassem_content) - (tui_get_begin_asm_address): Update. - * tui/tui-data.h (struct tui_locator_element): Remove. - (union tui_which_element) <locator>: Remove. - (struct tui_locator_window): New. - (tui_locator_win_info_ptr): Change return type. - * tui/tui-data.c (_locator): Change type. - (tui_locator_win_info_ptr): Change return type. - (init_content_element): Remove LOCATOR_WIN case. Add assert. - (tui_alloc_content): Add assert. +2020-04-29 Simon Marchi <simon.marchi@efficios.com> -2019-06-25 Tom Tromey <tom@tromey.com> + * gdbarch.sh: Use $(...) instead of `...`. - * tui/tui-winsource.c - (tui_exec_info_window::maybe_allocate_content): New method. - (tui_set_exec_info_content, tui_show_exec_info_content): Update. - * tui/tui-layout.c (init_and_make_win): Add EXEC_INFO_WIN case. - (make_source_or_disasm_window): Add cast. - * tui/tui-data.h (union tui_which_element) <simple_string>: - Remove. - (struct tui_source_info): New. - (struct tui_source_window_base) <execution_info>: Change type. - * tui/tui-data.c (init_content_element): Remove EXEC_INFO_WIN - case, and add assert. - (tui_alloc_content): Add assert. - -2019-06-25 Tom Tromey <tom@tromey.com> - - * tui/tui-data.h (tui_alloc_win_info): Don't declare. - * tui/tui-layout.c (init_and_make_win): Use "new" directly. - * tui/tui-data.c (tui_alloc_win_info): Remove. - -2019-06-25 Tom Tromey <tom@tromey.com> - - * tui/tui-win.c (tui_set_win_focus_to): Don't check window type. - * tui/tui-wingeneral.c (tui_unhighlight_win): Check - can_highlight. - -2019-06-25 Tom Tromey <tom@tromey.com> - - * tui/tui-win.c (tui_source_window_base::update_tab_width): Call - make_visible_with_new_height method. - (tui_win_info::make_visible_with_new_height): New method. - (tui_source_window_base::do_make_visible_with_new_height) - (tui_data_window::do_make_visible_with_new_height) - (tui_cmd_window::do_make_visible_with_new_height): New methods. - (make_visible_with_new_height): Remove. - (tui_resize_all, tui_adjust_win_heights): Use - make_visible_with_new_height method. - * tui/tui-data.h (struct tui_win_info) - <do_make_visible_with_new_height, make_visible_with_new_height>: - New methods. - (struct tui_source_window_base, struct tui_data_window) - (struct tui_cmd_window) <do_make_visible_with_new_height>: New - methods. +2020-04-29 Simon Marchi <simon.marchi@efficios.com> -2019-06-25 Tom Tromey <tom@tromey.com> + * gdbarch.sh: Use double quotes around variables. - * tui/tui-win.c (tui_source_window_base::update_tab_width): New - method. - (update_tab_width): Call update_tab_width method. - * tui/tui-data.h (struct tui_win_info) - (struct tui_source_window_base) <update_tab_width>: New methods. +2020-04-29 Simon Marchi <simon.marchi@efficios.com> -2019-06-25 Tom Tromey <tom@tromey.com> + * gdbarch.sh: Use %s with printf, instead of variables in the + format string. - * tui/tui-wingeneral.h (tui_make_window): Change type of "box_it" - parameter. - * tui/tui-wingeneral.c (tui_make_window): Change type of "box_it" - parameter. - (tui_gen_win_info::make_visible): Update. - * tui/tui-layout.c (init_and_make_win): Change type of "box_it" - parameter. - * tui/tui-data.h (enum tui_box): New enum. - (BOX_WINDOW, DONT_BOX_WINDOW): Remove defines. +2020-04-29 Tom Tromey <tromey@adacore.com> -2019-06-25 Tom Tromey <tom@tromey.com> + PR ada/25875: + * dwarf2/read.c (update_enumeration_type_from_children): Compute + type fields here. + (read_enumeration_type): Call + update_enumeration_type_from_children later. Update comments. + (process_enumeration_scope): Don't create type fields. - * tui/tui-layout.c (make_source_or_disasm_window): Always use - init_and_make_win for EXEC_INFO_WIN. - * tui/tui-data.h (struct tui_gen_win_info) <~tui_gen_win_info>: No - longer inline. - (struct tui_win_info) <~tui_win_info>: Inline. - (tui_source_exec_info_win_ptr, tui_disassem_exec_info_win_ptr): - Don't declare. - * tui/tui-data.c (source_win, disasm_win): Remove globals. - (tui_source_exec_info_win_ptr, tui_disassem_exec_info_win_ptr): - Remove. - (tui_initialize_static_data): Update. - (~tui_gen_win_info): Handle more cleanup here. - (~tui_source_window_base): Delete "execution_info". - (~tui_win_info): Move code to ~tui_gen_win_info; remove. - -2019-06-25 Tom Tromey <tom@tromey.com> - - * tui/tui-layout.c (make_command_window): Don't set - can_highlight. - (show_source_disasm_command): Call the reset method. - (show_data): Don't set can_highlight. Call the reset method. - (tui_gen_win_info::reset): Rename from init_gen_win_info - (init_and_make_win): Simplify. Return tui_gen_win_info. - (show_source_or_disasm_and_command): Call the reset method. - * tui/tui-data.h (struct tui_gen_win_info) <reset>: New method. - (struct tui_cmd_window): Set can_highlight. - -2019-06-25 Tom Tromey <tom@tromey.com> - - * tui/tui-wingeneral.c (tui_gen_win_info::make_visible): Rename - from make_visible. - (tui_make_visible, tui_make_invisible): Rewrite. - (tui_win_info::make_visible): Remove. - (tui_source_window_base::make_visible): Update. - * tui/tui-data.h (struct tui_gen_win_info) <make_visible>: New - method. Moved from... - (struct tui_win_info) <make_visible>: ...here. +2020-04-29 Kamil Rytarowski <n54@gmx.com> -2019-06-25 Tom Tromey <tom@tromey.com> + * nbsd-tdep.c: Include "xml-syscall.h". + (nbsd_init_abi): Call `set_xml_syscall_file_name'. - * tui/tui-winsource.c - (tui_source_window_base::do_scroll_horizontal): Remove direction - parameter. - * tui/tui-windata.c (tui_data_window::do_scroll_vertical): Remove - direction parameter. - * tui/tui-win.c (tui_win_info::forward_scroll) - (tui_win_info::backward_scroll, tui_win_info::left_scroll) - (tui_win_info::right_scroll): Update. - * tui/tui-source.c (tui_source_window::do_scroll_vertical): Remove - direction parameter. - * tui/tui-disasm.c (tui_disasm_window::do_scroll_vertical): Remove - direction parameter. - * tui/tui-data.h (enum tui_scroll_direction): Remove. - (struct tui_win_info) <do_scroll_vertical, do_scroll_horizontal>: - Remove direction parameter. - (struct tui_source_window_base, struct tui_source_window) - (struct tui_disasm_window, struct tui_data_window) - (struct tui_cmd_window): Update. - -2019-06-25 Tom Tromey <tom@tromey.com> - - * tui/tui-winsource.h (tui_set_exec_info_content) - (tui_show_exec_info_content, tui_erase_exec_info_content) - (tui_clear_exec_info_content, tui_update_exec_info): Change - argument to tui_source_window_base. - * tui/tui-winsource.c (tui_set_exec_info_content) - (tui_show_exec_info_content, tui_erase_exec_info_content) - (tui_clear_exec_info_content, tui_update_exec_info): Change - argument to tui_source_window_base. - -2019-06-25 Tom Tromey <tom@tromey.com> - - * tui/tui-winsource.h (tui_set_exec_info_content): Return void. - * tui/tui-winsource.c (tui_set_exec_info_content): Return void. +2020-04-29 Kamil Rytarowski <n54@gmx.com> -2019-06-25 Tom Tromey <tom@tromey.com> + * nbsd-nat.c: Include "sys/wait.h". + (nbsd_resume, nbsd_nat_target::resume, nbsd_wait) + (nbsd_nat_target::wait, nbsd_nat_target::insert_exec_catchpoint) + (nbsd_nat_target::remove_exec_catchpoint) + (nbsd_nat_target::set_syscall_catchpoint): Add. + * nbsd-nat.h (nbsd_nat_target::resume, nbsd_nat_target::wait) + (nbsd_nat_target::insert_exec_catchpoint) + (nbsd_nat_target::remove_exec_catchpoint) + (nbsd_nat_target::set_syscall_catchpoint): Add. + * nbsd-tdep.c (nbsd_get_syscall_number): Add. + (nbsd_init_abi): Call `set_gdbarch_get_syscall_number' and pass + `nbsd_get_syscall_number'. - * tui/tui-winsource.c (tui_set_exec_info_content): Remove NULL - check. +2020-04-29 Tom Tromey <tom@tromey.com> -2019-06-25 Tom Tromey <tom@tromey.com> + * stack.c (print_block_frame_labels): Remove. - * tui/tui-winsource.h (tui_alloc_source_buffer): Change return - type to void. - * tui/tui-winsource.c (tui_alloc_source_buffer): Change return - type to void. - * tui/tui-source.c (tui_set_source_content): Update. - * tui/tui-disasm.c (tui_set_disassem_content): Update. +2020-04-29 Hannes Domani <ssbssa@yahoo.de> -2019-06-25 Tom Tromey <tom@tromey.com> + PR gdb/17320 + * ada-valprint.c (val_print_packed_array_elements): Move array + end bracket to new line. + (ada_val_print_string): Remove extra spaces before first array + element. + * c-valprint.c (c_value_print_array): Likewise. + * m2-valprint.c (m2_print_array_contents): Likewise. + (m2_value_print_inner): Likewise. + * p-valprint.c (pascal_value_print_inner): Likewise. + * valprint.c (generic_val_print_array): Likewise. + (value_print_array_elements): Move first array element and array + end bracket to new line. - * tui/tui-win.c (window_name_completer, tui_set_focus) - (tui_all_windows_info): Use name method. - * tui/tui-data.h (struct tui_gen_win_info) - (struct tui_source_window, struct tui_disasm_window) - (struct tui_data_window, struct tui_cmd_window) <name>: New - method. - (tui_win_name): Don't declare. - * tui/tui-data.c (tui_partial_win_by_name): Use name method. - (tui_win_name): Remove. - -2019-06-25 Tom Tromey <tom@tromey.com> - - * tui/tui-winsource.h (tui_update_source_window) - (tui_update_source_window_as_is): Change parameter type. - * tui/tui-winsource.c (tui_update_source_window): Change win_info - to be a tui_source_window_base. - (tui_update_source_window_as_is): Likewise. - * tui/tui-win.c (make_visible_with_new_height): Update. - -2019-06-25 Tom Tromey <tom@tromey.com> - - * tui/tui-winsource.c (tui_erase_source_content) - (tui_show_source_content, tui_show_exec_info_content) - (tui_erase_exec_info_content): Use refresh_window method. - * tui/tui-wingeneral.h (tui_refresh_win): Don't declare. - * tui/tui-wingeneral.c (tui_gen_win_info::refresh_window): Rename - from tui_refresh_win. - (tui_data_window::refresh_window): New method. - (tui_win_info::refresh, tui_source_window_base::refresh) - (tui_refresh_all): Use refresh_window method. - * tui/tui-stack.c (tui_show_locator_content): Call refresh_window - method. - * tui/tui-regs.c (tui_display_register): Call refresh_window - method. - * tui/tui-layout.c (show_source_disasm_command) - (show_source_or_disasm_and_command): Call refresh_window method. - * tui/tui-data.h (struct tui_gen_win_info) - (struct tui_data_window, struct tui_cmd_window) <refresh_window>: - New method. +2020-04-29 Tom de Vries <tdevries@suse.de> -2019-06-25 Tom Tromey <tom@tromey.com> + PR symtab/25889 + * linespec.c (find_method): Fix ix calculation. - * tui/tui.c (tui_rl_other_window, tui_enable) - (tui_is_window_visible, tui_get_command_dimension): Update. - * tui/tui-winsource.c (tui_update_source_window_as_is) - (tui_clear_source_content, tui_erase_source_content) - (tui_show_source_line, tui_source_window_base::refill) - (tui_source_window_base::do_scroll_horizontal) - (tui_source_window_base::set_is_exec_point_at) - (tui_update_breakpoint_info, tui_set_exec_info_content) - (tui_alloc_source_buffer, tui_line_is_displayed) - (tui_addr_is_displayed): Update. - * tui/tui-wingeneral.c (tui_unhighlight_win, tui_highlight_win) - (tui_check_and_display_highlight_if_needed) - (tui_win_info::make_visible, tui_win_info::refresh) - (tui_refresh_all): Update. - * tui/tui-windata.c (tui_first_data_item_displayed) - (tui_delete_data_content_windows, tui_erase_data_content) - (tui_display_all_data, tui_data_window::refresh_all) - (tui_check_data_values): Update. - * tui/tui-win.c (window_name_completer, tui_update_gdb_sizes) - (tui_set_win_focus_to, tui_win_info::forward_scroll) - (tui_win_info::backward_scroll, tui_refresh_all_win) - (tui_resize_all, tui_set_focus, tui_all_windows_info) - (update_tab_width, tui_set_win_height, tui_adjust_win_heights) - (tui_source_window_base::set_new_height) - (tui_data_window::set_new_height) - (make_invisible_and_set_new_height) - (make_visible_with_new_height, new_height_ok) - (parse_scrolling_args): Update. - * tui/tui-stack.c (tui_show_frame_info): Update. - * tui/tui-source.c (tui_set_source_content) - (tui_set_source_content_nil, tui_source_is_displayed) - (tui_source_window::do_scroll_vertical): Update. - * tui/tui-regs.c (tui_show_registers, tui_show_register_group) - (tui_display_registers_from, tui_display_reg_element_at_line) - (tui_check_register_values, tui_reg_command): Update. - * tui/tui-layout.c (tui_default_win_height) - (show_source_disasm_command, show_data, init_and_make_win) - (show_source_or_disasm_and_command): Update. - * tui/tui-io.c (update_cmdwin_start_line, tui_putc, tui_puts) - (tui_redisplay_readline, tui_mld_flush) - (tui_mld_erase_entire_line, tui_mld_getc, tui_cont_sig) - (tui_getc): Update. - * tui/tui-disasm.c (tui_set_disassem_content) - (tui_disasm_window::do_scroll_vertical): Update. - * tui/tui-data.h (struct tui_gen_win_info) <~tui_gen_win_info>: - Now virtual. - (struct tui_win_info): Derive from tui_gen_win_info. - <~tui_win_info>: Mark as override. - <generic>: Remove member. - * tui/tui-data.c (tui_cmd_window::clear_detail, tui_next_win) - (tui_prev_win, tui_partial_win_by_name, tui_win_info) - (~tui_data_window, ~tui_win_info) - (tui_free_all_source_wins_content): Update. - * tui/tui-command.c (tui_refresh_cmd_win): Update. - -2019-06-25 Tom Tromey <tom@tromey.com> - - * tui/tui-layout.c (init_and_make_win): Use new. - * tui/tui-data.h (struct tui_gen_win_info): Add constructor, - destructor, initializers. - (tui_alloc_generic_win_info): Don't declare. - * tui/tui-data.c (_locator): Add argument to constructor. - (source_win, disasm_win): New globals. - (exec_info): Remove. - (tui_source_exec_info_win_ptr, tui_disassem_exec_info_win_ptr): - Update. - (tui_alloc_generic_win_info): Remove. - (init_content_element): Use new. - (tui_win_info::tui_win_info): Update. - (free_content_elements) <case DATA_WIN>: Use delete. - -2019-06-25 Tom Tromey <tom@tromey.com> - - * tui/tui-wingeneral.c (tui_refresh_win): Update. - * tui/tui-windata.c (tui_first_data_item_displayed) - (tui_delete_data_content_windows): Update. - * tui/tui-win.c (tui_data_window::set_new_height): Update. - * tui/tui-regs.c (tui_show_registers, tui_show_register_group) - (tui_display_registers_from, tui_check_register_values): Update. - * tui/tui-data.h (union tui_which_element) <data_window>: Now a - pointer. - * tui/tui-data.c (init_content_element): Update. Allocate the new - window. - (tui_free_data_content): Update. - (free_content_elements) <case DATA_WIN>: Free the window. +2020-04-28 Kamil Rytarowski <n54@gmx.com> -2019-06-25 Tom Tromey <tom@tromey.com> + * syscalls/update-netbsd.sh: New file. + * syscalls/netbsd.xml: Regenerate. + * data-directory/Makefile.in: Register `netbsd.xml' in + `SYSCALLS_FILES'. - * tui/tui-wingeneral.c (tui_unhighlight_win, tui_highlight_win): - Update. - * tui/tui-layout.c (make_command_window) - (show_source_disasm_command, show_data, init_and_make_win) - (show_source_or_disasm_and_command): Update. - * tui/tui-data.h (struct tui_win_info) <set_highlight>: New - method. - <can_highight, is_highlighted>: Now bool. - (tui_set_win_highlight): Don't declare. - * tui/tui-data.c (tui_set_win_highlight): Remove. +2020-04-28 Simon Marchi <simon.marchi@efficios.com> -2019-06-25 Tom Tromey <tom@tromey.com> + * syscalls/update-freebsd.sh: Add double quotes. - * tui/tui-wingeneral.c (make_visible): Remove check of window - type. +2020-04-28 Tom Tromey <tom@tromey.com> -2019-06-25 Tom Tromey <tom@tromey.com> + * NEWS: Update. + * python/py-cmd.c (gdbpy_initialize_commands): Add COMMAND_TUI. + (cmdpy_init): Allow class_tui. - * tui/tui-win.c (tui_win_info::max_height) - (tui_cmd_window::max_height): New methods. - (new_height_ok): Call max_height. - * tui/tui-data.h (struct tui_win_info, struct tui_cmd_window) - <max_height>: New method. - -2019-06-25 Tom Tromey <tom@tromey.com> - - * tui/tui-win.c (tui_source_window_base::set_new_height) - (tui_data_window::set_new_height): New methods. - (make_invisible_and_set_new_height): Call set_new_height method. - * tui/tui-data.h (struct tui_win_info) - (struct tui_source_window_base, struct tui_data_window) - <set_new_height>: New method. - -2019-06-25 Tom Tromey <tom@tromey.com> - - * tui/tui.c (tui_rl_other_window): Call the refresh_all method. - * tui/tui-windata.c (tui_data_window::refresh_all): Rename from - tui_refresh_data_win. - * tui/tui-win.c (tui_source_window_base::refresh_all): New - method. - (tui_refresh_all_win): Call the refresh_all method. - (tui_set_focus): Likewise. - * tui/tui-data.h (struct tui_win_info) <refresh_all>: New method. - (struct tui_source_window_base, struct tui_data_window) <refresh>: - Likewise. +2020-04-28 Mark Williams <mark@myosotissp.com> -2019-06-25 Tom Tromey <tom@tromey.com> + PR gdb/24480 + * dwarf2read.c: Add missing assingments to list_in_scope when + start_symtab was already called. - * tui/tui-winsource.h (tui_refill_source_window) - (tui_set_is_exec_point_at): Don't declare. - * tui/tui-winsource.c (tui_update_source_windows_with_addr) - (tui_source_window_base::refill): Rename from - tui_refill_source_window. - (tui_source_window_base::do_scroll_horizontal): Update. - (tui_source_window_base::set_is_exec_point_at): Rename from - tui_set_is_exec_point_at. - (tui_update_all_breakpoint_info): Update. - * tui/tui-stack.c (tui_show_frame_info): Update. - * tui/tui-layout.c (show_data): Add cast. - * tui/tui-hooks.c (tui_redisplay_source): Call refill method. - * tui/tui-data.h (struct tui_source_window_base) <refill, - set_is_exec_point_at>: New methods. - (tui_source_windows, tui_add_to_source_windows): Update types. - (tui_add_to_source_windows): Remove redundant declaration. - * tui/tui-data.c (source_windows): Store tui_source_window_base. - (tui_source_windows): Change return type. - (tui_clear_source_windows_detail): Update. - (tui_add_to_source_windows): Change type of parameter. - (tui_free_all_source_wins_content): Update. - -2019-06-25 Tom Tromey <tom@tromey.com> - - * tui/tui-wingeneral.c (tui_win_info::refresh) - (tui_source_window_base::refresh): New methods. - (tui_refresh_all): Call the refresh method. - * tui/tui-data.h (struct tui_win_info) - (struct tui_source_window_base) <refresh>: New method. - -2019-06-25 Tom Tromey <tom@tromey.com> - - * tui/tui.h (tui_is_window_visible): Return bool. - * tui/tui.c (tui_is_window_visible): Return bool. - * tui/tui-wingeneral.c (tui_make_window, make_visible) - (tui_make_visible, tui_make_invisible) - (tui_win_info::make_visible) - (tui_source_window_base::make_visible, make_all_visible) - (tui_make_all_visible, tui_make_all_invisible): Update. - * tui/tui-windata.c (tui_delete_data_content_windows): Update. - * tui/tui-data.h (struct tui_gen_win_info) <is_visible>: Now - bool. - (struct tui_win_info, struct tui_source_window_base) - (struct tui_cmd_window) <make_visible>: Change parameter to bool. - * tui/tui-data.c (tui_init_generic_part): Update. - -2019-06-25 Tom Tromey <tom@tromey.com> - - * tui/tui-wingeneral.c (tui_win_info::make_visible) - (tui_source_window_base::make_visible): New methods. - (make_all_visible): Make method call. - * tui/tui-data.h (struct tui_win_info) <make_visible>: New method. - (struct tui_source_window_base, struct tui_cmd_window): Override - make_visible. - (tui_win_is_source_type): Don't declare. - * tui/tui-data.c (tui_win_is_source_type): Remove. +2020-04-28 Simon Marchi <simon.marchi@efficios.com> -2019-06-25 Tom Tromey <tom@tromey.com> + PR gdb/25881 + * dwarf2/read.c (offset_map_type): Use + gdb:hash_enum<sect_offset> as hash function. - * tui/tui-layout.c (show_source_or_disasm_and_command): Remove - NULL check. +2020-04-28 Tom de Vries <tdevries@suse.de> -2019-06-25 Tom Tromey <tom@tromey.com> + * dwarf2/read.c (process_structure_scope): Add symbol for struct decl + with DW_AT_signature. - * tui/tui-data.h (struct tui_data_window, struct tui_cmd_window): - Inline constructor. Add initializers for members. - * tui/tui-data.c (tui_data_window, tui_cmd_window): Remove - constructors; now inline in class. +2020-04-27 Simon Marchi <simon.marchi@efficios.com> -2019-06-25 Tom Tromey <tom@tromey.com> + * configure.ac: Remove check for fs_base/gs_base in + user_regs_struct. + * configure: Re-generate. + * config.in: Re-generate. + * amd64-nat.c (amd64_native_gregset_reg_offset): Adjust. + * amd64-linux-nat.c (amd64_linux_nat_target::fetch_registers, + amd64_linux_nat_target::store_registers, ps_get_thread_area, ): Adjust. - * tui/tui-regs.c (tui_show_registers): Update. - * tui/tui-data.h (struct tui_data_window) <display_regs>: Now - bool. - * tui/tui-data.c (tui_data_window::clear_detail) - (tui_data_window): Update. +2020-04-27 Luis Machado <luis.machado@linaro.org> -2019-06-25 Tom Tromey <tom@tromey.com> + * dwarf2/frame-tailcall.c (dwarf2_tailcall_sniffer_first): Handle + problematic inline frame unwinding situation. + * frame.c (frame_id_computed_p): New function. + * frame.h (frame_id_computed_p): New prototype. - * tui/tui-windata.c (tui_display_all_data) - (tui_display_data_from_line, tui_display_data_from) - (tui_check_data_values, tui_data_window::do_scroll_vertical): - Update. - * tui/tui-regs.c (tui_last_regs_line_no) - (tui_line_from_reg_element_no, tui_first_reg_element_no_inline) - (tui_show_registers, tui_show_register_group) - (tui_display_registers_from, tui_display_reg_element_at_line) - (tui_display_registers_from_line, tui_check_register_values) - (tui_reg_next, tui_reg_prev): Update. - * tui/tui-layout.c (tui_set_layout, show_data): Update. - * tui/tui-data.h (struct tui_data_info): Remove. Move contents to - tui_data_window. - (struct tui_win_info) <detail>: Remove. Add new fields from - tui_data_info. - (TUI_DATA_WIN): Add cast. - * tui/tui-data.c (tui_data_window::clear_detail, tui_data_window) - (~tui_data_window): Simplify. - -2019-06-25 Tom Tromey <tom@tromey.com> - - * tui/tui-layout.c (show_source_disasm_command) - (show_source_or_disasm_and_command): Update. - * tui/tui-io.c (update_cmdwin_start_line) - (tui_redisplay_readline): Update. - * tui/tui-data.h (struct tui_command_info): Remove. - (struct tui_win_info) <detail>: Remove command_info member. - (struct tui_data_window) <start_line>: New member, from - tui_command_info. - (TUI_CMD_WIN): Add casts. +2020-04-26 Tom Tromey <tom@tromey.com> -2019-06-25 Tom Tromey <tom@tromey.com> + * command.h (enum command_class) <class_pseudo>: Remove. - * tui/tui-winsource.c (tui_update_source_window) - (tui_refill_source_window) - (tui_source_window_base::do_scroll_horizontal) - (tui_update_breakpoint_info, tui_set_exec_info_content) - (tui_show_exec_info_content, tui_erase_exec_info_content) - (tui_clear_exec_info_content): Update. - * tui/tui-wingeneral.c (make_all_visible, tui_refresh_all): - Update. - * tui/tui-win.c (make_invisible_and_set_new_height) - (make_visible_with_new_height): Update. - * tui/tui-source.c (tui_set_source_content) - (tui_show_symtab_source): Update. - * tui/tui-layout.c (extract_display_start_addr) - (show_source_disasm_command, show_data) - (make_source_or_disasm_window) - (show_source_or_disasm_and_command): Update. - * tui/tui-disasm.c (tui_set_disassem_content): Simplify. - (tui_disasm_window::do_scroll_vertical): Remove shadowing - "gdbarch". - * tui/tui-data.h (struct tui_source_info): Remove. Move contents - to tui_source_window_base. - (struct tui_win_info) <detail>: Remove source_info member. - (struct tui_source_window_base) <has_locator>: Inline. - Move contents from tui_source_info; rename has_locator member to - m_has_locator. - (TUI_SRC_WIN, TUI_DISASM_WIN): Add casts. - * tui/tui-data.c (tui_source_window_base::has_locator): Move to - header file. - (tui_source_window_base::clear_detail, ~tui_source_window_base): - Simplify. - (tui_free_all_source_wins_content): Cast to - tui_source_window_base. - -2019-06-25 Tom Tromey <tom@tromey.com> - - * tui/tui-win.c (make_invisible_and_set_new_height) - (make_visible_with_new_height): Call has_locator method. - * tui/tui-layout.c (show_source_disasm_command, show_data) - (show_source_or_disasm_and_command): Update for bool change. - * tui/tui-data.h (struct tui_source_info) <has_locator>: Now bool. - (tui_win_info) <has_locator>: New method. - (struct tui_source_window_base) <has_locator>: New method. - (tui_win_has_locator): Don't declare. - * tui/tui-data.c (tui_source_window_base::has_locator): Rename - from tui_win_has_locator. - (tui_source_window_base): Use false, not FALSE. - -2019-06-25 Tom Tromey <tom@tromey.com> - - * tui/tui-data.h (tui_clear_win_detail): Don't declare. - * tui/tui-data.c (tui_clear_source_windows_detail): Call the - clear_detail method directly. - (tui_clear_win_detail): Remove. +2020-04-26 Philippe Waroquiers <philippe.waroquiers@skynet.be> -2019-06-25 Tom Tromey <tom@tromey.com> + * cli/cli-decode.c (lookup_cmd_composition): Fix comments + and whitespace. - * tui/tui-disasm.c (tui_disasm_window::do_scroll_vertical): Use - "this", not TUI_DISASM_WIN. +2020-04-25 Kamil Rytarowski <n54@gmx.com> -2019-06-25 Tom Tromey <tom@tromey.com> + * inf-ptrace.c (inf_ptrace_target::wait): Remove + `PT_GET_PROCESS_STATE' block. - * tui/tui-winsource.h (tui_horizontal_source_scroll): Don't - declare. - * tui/tui-winsource.c - (tui_source_window_base::do_scroll_horizontal): Rename from - tui_horizontal_source_scroll. - * tui/tui-windata.h (tui_vertical_data_scroll): Don't declare. - * tui/tui-windata.c (tui_data_window::do_scroll_vertical): Rename - from tui_vertical_data_scroll. - * tui/tui-win.h (tui_scroll): Don't declare. - * tui/tui-win.c (tui_win_info::forward_scroll) - (tui_win_info::backward_scroll, tui_win_info::left_scroll) - (tui_win_info::right_scroll): Rename and update. - (tui_scroll_forward_command, tui_scroll_backward_command) - (tui_scroll_left_command, tui_scroll_right_command): Update. - (tui_scroll): Remove. - * tui/tui-source.h: Don't declare tui_vertical_source_scroll. - * tui/tui-source.c (tui_source_window::do_scroll_vertical): Rename - from tui_vertical_source_scroll. - * tui/tui-disasm.h (tui_vertical_disassem_scroll): Don't declare. - * tui/tui-disasm.c (tui_disasm_window::do_scroll_vertical): Rename - from tui_vertical_disassem_scroll. - * tui/tui-data.h (struct tui_win_info) <do_scroll_vertical, - do_scroll_horizontal>: New methods. - <forward_scroll, backward_scroll, left_scroll, right_scroll>: - Likewise. - (struct tui_source_window_base): Add do_scroll_horizontal. - (struct tui_source_window, struct tui_disasm_window): Add - do_scroll_vertical. - (struct tui_data_window, struct tui_cmd_window): Add - do_scroll_horizontal and do_scroll_vertical. - * tui/tui-command.c (tui_dispatch_ctrl_char): Use method calls. - -2019-06-25 Tom Tromey <tom@tromey.com> - - * tui/tui-data.h (struct tui_source_window_base): New struct. - (struct tui_source_window): Derive from tui_source_window_base. - (struct tui_disasm_window): New struct. - * tui/tui-data.c (tui_source_window_base::clear_detail): Rename - from tui_source_window::clear_detail. - (tui_source_window_base): Rename from tui_source_window. - (~tui_source_window_base): Rename from ~tui_source_window. - (tui_alloc_win_info): Create a tui_disasm_window. - -2019-06-25 Tom Tromey <tom@tromey.com> - - * tui/tui-data.h (struct tui_source_window) - (struct tui_data_window): Declare destructors. - * tui/tui-data.c (~tui_source_window, ~tui_data_window): New - destructors. - (tui_win_info): Simplify. - -2019-06-25 Tom Tromey <tom@tromey.com> - - * tui/tui-winsource.c (tui_display_main) - (tui_update_source_windows_with_addr) - (tui_update_all_breakpoint_info): Update. - * tui/tui-win.c (tui_resize_all, tui_adjust_win_heights) - (new_height_ok, parse_scrolling_args): Update. - * tui/tui-stack.c (tui_show_frame_info): Update. - * tui/tui-data.h (struct tui_list): Remove. - (tui_source_windows): Return a reference to a std::vector. - * tui/tui-data.c (source_windows): Now a std::vector. - (tui_source_windows): Change return type. - (tui_clear_source_windows): Rewrite. - (tui_clear_source_windows_detail, tui_add_to_source_windows) - (tui_free_all_source_wins_content): Rewrite. - -2019-06-25 Tom Tromey <tom@tromey.com> - - * tui/tui-data.h (struct tui_win_info, struct tui_source_window) - (struct tui_data_window, struct tui_cmd_window): Declare - clear_detail method. - * tui/tui-data.c (tui_source_window::clear_detail) - (tui_cmd_window::clear_detail, tui_data_window::clear_detail): New - methods. - (tui_clear_win_detail): Simplify. +2020-04-24 Tom Tromey <tom@tromey.com> -2019-06-25 Tom Tromey <tom@tromey.com> + * symtab.h (symbol_get_demangled_name): Don't declare. + * symtab.c (symbol_get_demangled_name): Remove. + (general_symbol_info::natural_name) + (general_symbol_info::demangled_name): Update. - * tui/tui-layout.c (make_source_window, make_disasm_window) - (make_source_or_disasm_window): Remove win_info_ptr parameter. - Return the new window. - (show_source_disasm_command, show_data) - (show_source_or_disasm_and_command): Update. +2020-04-24 Tom Tromey <tom@tromey.com> -2019-06-25 Tom Tromey <tom@tromey.com> + PR rust/25025: + * dwarf2/read.c (dwarf2_physname): Do not demangle for Rust. - * tui/tui-layout.c (make_command_window): Remove win_info_ptr - parameter. Return the new window. - (show_source_disasm_command): Update and remove NULL check. - (show_source_or_disasm_and_command): Update. +2020-04-24 Tom Tromey <tom@tromey.com> -2019-06-25 Tom Tromey <tom@tromey.com> + PR symtab/12707: + * dwarf2/read.c (add_partial_symbol): Use the linkage name if it + exists. + (new_symbol): Likewise. + * compile/compile-object-load.c (get_out_value_type): Use + symbol_matches_search_name. - * tui/tui-layout.c (init_and_make_win): Remove NULL check. +2020-04-24 Tom Tromey <tom@tromey.com> -2019-06-25 Tom Tromey <tom@tromey.com> + * dwarf2/read.c (add_partial_symbol): Do not call + compute_and_set_names. - * tui/tui-data.h (struct tui_win_info): Make constructor - protected. Make destructor virtual. Add initializers. - (tui_source_window, tui_data_window, tui_cmd_window): New - classes. - * tui/tui-data.c (tui_win_info): Rename from init_win_info. Now a - constructor. Add "type" parameter. - (tui_source_window, tui_data_window, tui_cmd_window): New - constructors. - (tui_alloc_win_info): Instantiate the appropriate subclass. +2020-04-24 Tom Tromey <tom@tromey.com> -2019-06-25 Tom Tromey <tom@tromey.com> + * dwarf2/read.c (add_partial_symbol): Use new add_psymbol_to_list + overload. - * tui/tui-win.c (tui_resize_all): Use delete. - * tui/tui-data.h (struct tui_win_info) <~tui_win_info>: Declare - destructor. - (tui_free_window): Don't declare. - * tui/tui-data.c (~tui_win_info): Rename from tui_free_window. - Update. +2020-04-24 Tom Tromey <tom@tromey.com> -2019-06-25 Tom Tromey <tom@tromey.com> + * psymtab.c (add_psymbol_to_bcache): Simplify calling convention. + (add_psymbol_to_list): New overload. Make old overload call new + one. + * psympriv.h (add_psymbol_to_list): New overload. - * tui/tui-data.h (struct tui_win_info): Add constructor. - * tui/tui-data.c (tui_alloc_win_info): Use new. - (tui_free_window): Use delete. +2020-04-24 Tom Tromey <tom@tromey.com> -2019-06-22 Tom Tromey <tom@tromey.com> + * dwarf2/read.c (partial_die_info::read) <case + DW_AT_linkage_name>: Use value_as_string. + (dwarf2_string_attr): Use value_as_string. + * dwarf2/attribute.h (struct attribute) <value_as_string>: Declare + method. + * dwarf2/attribute.c (attribute::value_as_string): New method. - * tui/tui-windata.h (tui_first_data_element_no_in_line): Don't - declare. - * tui/tui-windata.c (tui_first_data_element_no_in_line): Remove. +2020-04-24 Tom Tromey <tom@tromey.com> -2019-06-22 Tom Tromey <tom@tromey.com> + * symtab.c (general_symbol_info::natural_name) + (general_symbol_info::demangled_name): Check for language_rust. - * tui/tui-data.h (tui_del_window, tui_del_data_windows): Don't - declare. - * tui/tui-data.c (tui_del_window, tui_del_data_windows): Remove. +2020-04-24 Tom Tromey <tom@tromey.com> -2019-06-22 Tom de Vries <tdevries@suse.de> + * dwarf2/read.c (dw2_linkage_name): Move Rust "{" hack here... + (dwarf2_physname): ... from here. + (partial_die_info::read): Add Rust "{" hack. - * dwarf2read.c (create_addrmap_from_aranges) - (read_debug_names_from_section): Print ptrdiff_t using '%s' and plongest - instead of '%zu'. - -2019-06-21 Simon Marchi <simon.marchi@efficios.com> - - * dwarf2read.h (dwarf2_section_info_def): Remove. - (DEF_VEC_O (dwarf2_section_info_def)): Remove. - * dwarf2read.c (struct dwo_sections) <types>: Change type to - std::vector<dwarf2_section_info>. - (struct dwo_file) <~dwo_file>: Remove. - (dwarf2_per_objfile::~dwarf2_per_objfile): Don't manually free - types field. - (dwarf2_per_objfile::locate_sections): Adjust to std::vector. - (dwarf2_read_debug_names): Likewise. - (create_debug_types_hash_table): Change parameter type to - array_view, adjust code accordingly. - (dwarf2_locate_dwo_sections): Adjust to std::vector. - (partial_die_info::fixup): Likewise. - (determine_prefix): Likewise. - * dwarf-index-write.c (write_psymtabs_to_index): Adjust. - -2019-06-21 Simon Marchi <simon.marchi@polymtl.ca> - - * dwarf2read.c (struct dwo_file) <dbfd>: Change type to - gdb_bfd_ref_ptr. - <~dwo_file>: Remove call to gdb_bfd_unref. - (open_and_init_dwo_file): Move gdb_bfd_ref_ptr into dbfd field. Call - gdb_bfd_ref_ptr::get. - -2019-06-21 Simon Marchi <simon.marchi@polymtl.ca> - - * dwarf2read.h (struct dwarf2_per_objfile) <dwo_files>: Change - type to htab_up. - * dwarf2read.c (struct dwo_file): Initialize fields. - <~dwo_file>: New. - (free_dwo_file): Remove, move content to ~dwo_file. - (struct dwo_file_deleter): Remove. - (dwo_file_up>: Remove custom deleter. - (free_dwo_files): Remove. - (dwarf2_per_objfile::~dwarf2_per_objfile): Don't explicitly free - dwo_files. - (process_skeletonless_type_units): Call unique_ptr::get. - (allocate_dwo_file_hash_table): Add deleter to created hash - table. Change return type to htab_up. - (lookup_dwo_file_slot): Don't memset dwo_file, call - unique_ptr::get. - (create_dwo_unit_in_dwp_v1): Allocate dwo_file with new. - (create_dwo_unit_in_dwp_v2): Likewise. - (open_and_init_dwo_file): Likewise. - (free_dwo_file_from_slot): Remove. +2020-04-24 Tom Tromey <tom@tromey.com> -2019-06-21 Simon Marchi <simon.marchi@polymtl.ca> + * symtab.h (struct general_symbol_info) <set_demangled_name>: New + method. + (symbol_set_demangled_name): Don't declare. + * symtab.c (general_symbol_info::set_demangled_name): Rename from + symbol_set_demangled_name. + (general_symbol_info::set_language) + (general_symbol_info::compute_and_set_names): Update. + * minsyms.c (minimal_symbol_reader::install): Update. + * dwarf2/read.c (new_symbol): Update. + +2020-04-24 Tom Tromey <tromey@adacore.com> + + PR python/23662: + * python/py-type.c (convert_field): Handle + FIELD_LOC_KIND_DWARF_BLOCK. + (typy_get_sizeof): Handle TYPE_HAS_DYNAMIC_LENGTH. + (typy_get_dynamic): Nw function. + (type_object_getset): Add "dynamic". + * NEWS: Add entry. - * dwarf2read.h (struct dwarf2_section_info) <readin, - is_virtual>: Change type to bool. - * dwarf2read.c (dwarf2_read_section, create_dwp_v2_section): Use - true instead of 1. +2020-04-24 Tom Tromey <tromey@adacore.com> -2019-06-19 Tom Tromey <tom@tromey.com> + * ada-typeprint.c (print_choices, print_variant_part) + (print_record_field_types_dynamic): New functions. + (print_record_field_types): Use print_record_field_types_dynamic. + +2020-04-24 Tom Tromey <tromey@adacore.com> + + * dwarf2/read.c (handle_data_member_location): New overload. + (dwarf2_add_field): Use it. + (decode_locdesc): Add "computed" parameter. Update comment. + * gdbtypes.c (is_dynamic_type_internal): Also look for + FIELD_LOC_KIND_DWARF_BLOCK. + (resolve_dynamic_struct): Handle FIELD_LOC_KIND_DWARF_BLOCK. + * gdbtypes.c (is_dynamic_type_internal): Add special case for C++ + virtual base classes. + * gnu-v3-abi.c (gnuv3_baseclass_offset): Handle + FIELD_LOC_KIND_DWARF_BLOCK. + +2020-04-24 Tom Tromey <tromey@adacore.com> + + * dwarf2/read.c (read_structure_type): Handle dynamic length. + * gdbtypes.c (is_dynamic_type_internal): Check + TYPE_HAS_DYNAMIC_LENGTH. + (resolve_dynamic_type_internal): Use TYPE_DYNAMIC_LENGTH. + * gdbtypes.h (TYPE_HAS_DYNAMIC_LENGTH, TYPE_DYNAMIC_LENGTH): + New macros. + (enum dynamic_prop_node_kind) <DYN_PROP_BYTE_SIZE>: New + constant. + +2020-04-24 Tom Tromey <tromey@adacore.com> + + * dwarf2/read.c (struct variant_field): Rewrite. + (struct variant_part_builder): New. + (struct nextfield): Remove "variant" field. Add "offset". + (struct field_info): Add "current_variant_part" and + "variant_parts". + (alloc_discriminant_info): Remove. + (alloc_rust_variant): New function. + (quirk_rust_enum): Update. + (dwarf2_add_field): Set "offset" member. Don't handle + DW_TAG_variant_part. + (offset_map_type): New typedef. + (convert_variant_range, create_one_variant) + (create_one_variant_part, create_variant_parts) + (add_variant_property): New functions. + (dwarf2_attach_fields_to_type): Call add_variant_property. + (read_structure_type): Don't handle DW_TAG_variant_part. + (handle_variant_part, handle_variant): New functions. + (handle_struct_member_die): Use them. + (process_structure_scope): Don't handle variant parts. + * gdbtypes.h (TYPE_FLAG_DISCRIMINATED_UNION): Remove. + (struct discriminant_info): Remove. + (enum dynamic_prop_node_kind) <DYN_PROP_DISCRIMINATED>: Remove. + (struct main_type) <flag_discriminated_union>: Remove. + * rust-lang.c (rust_enum_p, rust_empty_enum_p): Rewrite. + (rust_enum_variant): Return int. Remove "contents". Rewrite. + (rust_print_enum, rust_print_struct_def, rust_evaluate_subexp): + Update. + * valops.c (value_union_variant): Remove. + * value.h (value_union_variant): Don't declare. + +2020-04-24 Tom Tromey <tromey@adacore.com> + + * ada-lang.c (ada_discrete_type_high_bound, ada_discrete_type_low) + (ada_value_primitive_packed_val): Update. + * ada-valprint.c (ada_value_print_1): Update. + * dwarf2/loc.c (evaluate_for_locexpr_baton): New struct. + (dwarf2_locexpr_baton_eval): Take a property_addr_info rather than + just an address. Use evaluate_for_locexpr_baton. + (dwarf2_evaluate_property): Update. + * dwarf2/loc.h (struct property_addr_info) <valaddr>: Now an + array_view. + * findvar.c (default_read_var_value): Update. + * gdbtypes.c (compute_variant_fields_inner) + (resolve_dynamic_type_internal): Update. + (resolve_dynamic_type): Change type of valaddr parameter. + * gdbtypes.h (resolve_dynamic_type): Update. + * valarith.c (value_subscripted_rvalue): Update. + * value.c (value_from_contents_and_address): Update. + +2020-04-24 Tom Tromey <tromey@adacore.com> + + * dwarf2/loc.c (dwarf2_locexpr_baton_eval): Add + "push_initial_value" parameter. + (dwarf2_evaluate_property): Likewise. + * dwarf2/loc.h (dwarf2_evaluate_property): Update. + +2020-04-24 Tom Tromey <tromey@adacore.com> + + * gdbtypes.c (is_dynamic_type_internal): Check for variant parts. + (variant::matches, compute_variant_fields_recurse) + (compute_variant_fields_inner, compute_variant_fields): New + functions. + (resolve_dynamic_struct): Check for DYN_PROP_VARIANT_PARTS. + Use resolved_type after type is made. + (operator==): Add new cases. + * gdbtypes.h (TYPE_HAS_VARIANT_PARTS): New macro. + (struct discriminant_range, struct variant, struct variant_part): + New. + (union dynamic_prop_data) <variant_parts, original_type>: New + members. + (enum dynamic_prop_node_kind) <DYN_PROP_VARIANT_PARTS>: New constant. + (enum dynamic_prop_kind) <PROP_TYPE, PROP_VARIANT_PARTS>: New + constants. + * value.c (unpack_bits_as_long): Now public. + * value.h (unpack_bits_as_long): Declare. - * tui/tui-data.h (tui_init_content_element): Don't declare. +2020-04-24 Tom Tromey <tromey@adacore.com> -2019-06-19 Tom Tromey <tom@tromey.com> + * rs6000-tdep.c (struct ppc_variant): Rename from "variant". + (variants, find_variant_by_arch, rs6000_gdbarch_init): Update. - * tui/tui-data.h (tui_init_win_info): Don't declare. +2020-04-24 Hannes Domani <ssbssa@yahoo.de> -2019-06-19 Tom de Vries <tdevries@suse.de> + * windows-tdep.c (exception_values): Add WOW64 exception numbers. - * dwarf2read.h (abstract_to_concrete): Change type to - std::unordered_map<sect_offset, std::vector<sect_offset>, - gdb::hash_enum<sect_offset>>. +2020-04-24 Kamil Rytarowski <n54@gmx.com> -2019-06-19 Tom Tromey <tromey@adacore.com> + * inf-ptrace.h (follow_fork, insert_fork_catchpoint) + (remove_fork_catchpoint, post_startup_inferior) + (post_attach): Move... + * obsd-nat.h (follow_fork, insert_fork_catchpoint) + (remove_fork_catchpoint, post_startup_inferior) + (post_attach): ...here. + * inf-ptrace.c (follow_fork, insert_fork_catchpoint) + (remove_fork_catchpoint, post_startup_inferior) + (post_attach): Move... + * obsd-nat.c (follow_fork, insert_fork_catchpoint) + (remove_fork_catchpoint, post_startup_inferior) + (post_attach): ...here. - * ada-lang.c (ada_evaluate_subexp) <case OP_ATR_FIRST>: Handle - EVAL_AVOID_SIDE_EFFECTS specially. +2020-04-24 Tom Tromey <tromey@adacore.com> -2019-06-19 Tom Tromey <tromey@adacore.com> + * nat/windows-nat.h (struct windows_thread_info) + <pc_adjusted>: New member. + * windows-nat.c (windows_fetch_one_register): Check + pc_adjusted. + (windows_nat_target::get_windows_debug_event) + (windows_nat_target::wait): Set pc_adjusted. - * source-cache.c (highlighter): New global. - (source_cache::get_source_lines): Create a highlighter on demand. +2020-04-24 Tom de Vries <tdevries@suse.de> -2019-06-18 Andrew Burgess <andrew.burgess@embecosm.com> + * contrib/cc-with-tweaks.sh: Remove <exec>.gdb-index file handling. + Run gdb-add-index inside temp dir. - * defs.h (deprecated_interactive_hook): Delete declaration. - * interps.c (clear_interpreter_hooks): Remove use of - deprecated_interactive_hook. - * top.c (deprecated_interactive_hook): Delete definition. - * utils.c (maybe_quit): Remove use of deprecated_interactive_hook. +2020-04-23 Tom Tromey <tromey@adacore.com> -2019-06-18 Tom de Vries <tdevries@suse.de> + * windows-tdep.c (is_linked_with_cygwin_dll): Always update "iter" + in loop. - PR gdb/24515 - * dwarf2read.h (abstract_to_concrete): Change type from - std::unordered_map<die_info_ptr, std::vector<die_info_ptr>> to - std::unordered_map<sect_offset, std::vector<sect_offset>>. - * dwarf2read.c (read_variable): Update. - (dwarf2_fetch_die_loc_sect_off): Update. +2020-04-23 Luis Machado <luis.machado@linaro.org> -2019-06-17 Tom de Vries <tdevries@suse.de> + * dwarf2/frame-tailcall.c (dwarf2_tailcall_sniffer_first): Use + get_frame_register instead of gdbarch_unwind_pc. - PR gdb/24617 - * common/pathstuff.c (child_path): Make sure parent_len > 0 before - accessing parent[parent_len - 1]. - -2019-06-17 Paul Pluzhnikov <ppluzhnikov@google.com> - - PR gdb/24364 - * gdb/dtrace-probe.c (dtrace_static_probe_ops::get_probe): Don't - call dtrace_process_dof with NULL dof. - -2019-06-16 Tom de Vries <tdevries@suse.de> - - PR gdb/24445 - * contrib/gdb-add-index.sh: Update to handle dwz-m-ed executable. - -2019-06-16 Tom Tromey <tom@tromey.com> - - * tui/tui-wingeneral.c (tui_unhighlight_win, tui_highlight_win) - (make_all_visible): Use address of member. - -2019-06-16 Tom Tromey <tom@tromey.com> - - * tui/tui-data.c (tui_clear_win_detail, init_win_info) - (tui_free_window, free_content, free_content_elements): Remove - unnecessary cast. - * tui/tui-windata.c (tui_display_all_data): Remove unnecessary - cast. - * tui/tui-regs.c (tui_show_register_group) - (tui_display_registers_from, tui_display_reg_element_at_line): - Remove unnecessary cast. - -2019-06-16 Andrew Burgess <andrew.burgess@embecosm.com> - - * linux-nat.c (normal_mask): Delete. - (_initialize_linux_nat): Don't initialise normal_mask. - -2019-06-16 Simon Marchi <simon.marchi@polymtl.ca> - - PR gdb/24445 - * dwarf-index-write.h (write_psymtabs_to_index): Add - dwz_basename parameter. - * dwarf-index-write.c (write_gdbindex): Move file writing to - write_gdbindex_1. Change return type void. - (assert_file_size): Move up, remove filename parameter. - (write_gdbindex_1): New function. - (write_debug_names): Change return type to void, call - assert_file_size. - (struct index_wip_file): New struct. - (write_psymtabs_to_index): Add dwz_basename parameter. Move - file logic to index_wip_file. Write index for dwz file if - needed. - (save_gdb_index_command): Pass basename of dwz file, if present. - * dwarf-index-cache.c (index_cache::store): Obtain and pass - build-id of dwz file, if present. - * dwarf2read.c (struct dwz_file): Move to dwarf2read.h. - (dwarf2_get_dwz_file): Likewise. - * dwarf2read.h (struct dwz_file): Move from dwarf2read.c. - (dwarf2_get_dwz_file): Likewise. - -2019-06-16 Tom Tromey <tom@tromey.com> - - * coffread.c (process_coff_symbol): Use xstrdup. - * value.c (create_internalvar): Use xstrdup. - -2019-06-16 Tom Tromey <tom@tromey.com> - - * valops.c (value_cast, value_slice): Remove unnecessary cast. - * breakpoint.c (stopin_command, stopat_command) - (until_break_command, decode_location_default): Remove unnecessary - cast. - * utils.c (subset_compare): Remove unnecessary cast. - * ada-lang.c (ada_update_initial_language): Remove unnecessary - cast. - * linespec.c (decode_line_with_last_displayed): Remove unnecessary - cast. - * infcmd.c (path_command): Remove unnecessary cast. - * coffread.c (decode_type): Remove unnecessary cast. - * xcoffread.c (read_xcoff_symtab): Remove unnecessary cast. - * mipsread.c (mipscoff_symfile_read): Remove unnecessary cast. - * tui/tui-stack.c (tui_show_locator_content) - (tui_show_frame_info): Remove unnecessary cast. - * tui/tui-win.c (tui_scroll_forward_command) - (tui_scroll_backward_command, tui_set_focus, tui_set_win_height) - (parse_scrolling_args): Remove unnecessary cast. - * tui/tui-data.c (init_win_info, tui_del_window) - (tui_free_window, tui_del_data_windows, tui_free_data_content) - (free_content_elements): Remove unnecessary cast. - * tui/tui-windata.c (tui_first_data_item_displayed): Remove - unnecessary cast. - * tui/tui-source.c (tui_set_source_content) - (tui_vertical_source_scroll): Remove unnecessary cast. - * tui/tui-layout.c (tui_default_win_height): Remove unnecessary - cast. - * tui/tui-io.c (tui_initialize_io): Remove unnecessary cast. - * tui/tui-regs.c (tui_display_registers_from) - (tui_display_register): Remove unnecessary cast. - * tui/tui-wingeneral.c (tui_refresh_win, tui_delete_win) - (tui_unhighlight_win, tui_highlight_win, tui_make_window) - (make_visible): Remove unnecessary cast. - * tui/tui-winsource.c (tui_erase_source_content) - (tui_update_breakpoint_info, tui_set_exec_info_content): Remove - unnecessary cast. - * ax-gdb.c (agent_command_1): Remove unnecessary cast. - * cli/cli-setshow.c (cmd_show_list): Remove unnecessary cast. - * stabsread.c (read_type, read_array_type, read_range_type): - Remove unnecessary cast. - * mdebugread.c (mdebug_build_psymtabs): Remove unnecessary cast. - (parse_symbol, parse_type, upgrade_type, parse_external) - (parse_partial_symbols, psymtab_to_symtab_1, cross_ref): Remove - unnecessary cast. - * gdb_bfd.c (gdb_bfd_map_section): Remove unnecessary cast. +2020-04-23 Tom de Vries <tdevries@suse.de> -2019-06-16 Tom Tromey <tom@tromey.com> + * symtab.c (lookup_global_symbol): Prefer def over decl. - * tui/tui-data.c (tui_alloc_generic_win_info) - (tui_alloc_win_info, tui_add_content_elements): Remove NULL - checks. +2020-04-23 Tom de Vries <tdevries@suse.de> -2019-06-16 Bernhard Heckel <bernhard.heckel@intel.com> - Andrew Burgess <andrew.burgess@embecosm.com> + PR symtab/25807 + * block.c (best_symbol, better_symbol): Promote to external. + * block.h (best_symbol, better_symbol): Declare. + * symtab.c (lookup_symbol_in_objfile_symtabs): Prefer def over + decl. - * f-typeprint.c (f_print_type): Don't return early for not - associated or not allocated types. - (f_type_print_varspec_suffix): Add print_rank parameter and print - ranks of array types in case they dangling. - (f_type_print_base): Add print_rank parameter. - -2019-06-15 Andrew Burgess <andrew.burgess@embecosm.com> - - * NEWS: Mention new MI commands. - * break-catch-throw.c (enum exception_event_kind): Move to - breakpoint.h. - (print_mention_exception_catchpoint): Output text as a single - message. - (catch_exception_command_1): Rename to... - (catch_exception_event): ...this, make non-static, update header - command, and change some parameter types. - (catch_catch_command): Update for changes to - catch_exception_command_1. - (catch_throw_command): Likewise. - (catch_rethrow_command): Likewise. - * breakpoint.c (enum exception_event_kind): Delete. - * breakpoint.h (enum exception_event_kind): Moved here from - break-catch-throw.c. - (catch_exception_event): Declare. - * mi/mi-cmd-catch.c (mi_cmd_catch_exception_event): New function. - (mi_cmd_catch_throw): New function. - (mi_cmd_catch_rethrow): New function. - (mi_cmd_catch_catch): New function. - * mi/mi-cmds.c (mi_cmds): Add 'catch-throw', 'catch-rethrow', and - 'catch-catch' entries. - * mi/mi-cmds.h (mi_cmd_catch_throw): Declare. - (mi_cmd_catch_rethrow): Declare. - (mi_cmd_catch_catch): Declare. - -2019-06-15 Andrew Burgess <andrew.burgess@embecosm.com> - - * annotate.c (annotate_source_line): Change return type to void, - update implementation to match. - * annotate.h (annotate_source_line): Change return type to void, - update header comment. - * stack.c (print_frame_info): Don't change what frame information - is printed based on whether annotations are on or not. - -2019-06-15 Andrew Burgess <andrew.burgess@embecosm.com> - - * annotate.c: Add 'source.h' and 'objfiles.h' includes. - (annotate_source): Make static. - (annotate_source_line): Moved from source.c and renamed from - identify_source_line. Update the return type. - * annotate.h (annotate_source): Delete declaration. - (annotate_source_line): Declaration moved from source.h, and - renamed from identify_source_line. Return type updated. - * source.c (identify_source_line): Moved to annotate.c and renamed - to annotate_source_line. - (info_line_command): Remove check of annotation_level. - * source.h (identify_source_line): Move declaration to annotate.h - and rename to annotate_source_line. - * stack.c: Add 'annotate.h' include. - (print_frame_info): Remove check of annotation_level before - calling annotate_source_line. +2020-04-23 Tom Tromey <tromey@adacore.com> -2019-06-15 Andrew Burgess <andrew.burgess@embecosm.com> + PR ada/25837: + * dwarf2/read.c (dw2_expand_symtabs_matching_symbol): Store a + "const char *", not a "const std::string &". + <name_and_matcher::operator==>: Update. + * unittests/lookup_name_info-selftests.c: Change type of + "result". + +2020-04-23 Tom Tromey <tom@tromey.com> + + * inferior.h (iterate_over_inferiors): Don't declare. + * inferior.c (iterate_over_inferiors): Remove. + * darwin-nat.c (find_inferior_task_it, find_inferior_pid_it): + Remove. + (darwin_find_inferior_by_task, darwin_find_inferior_by_pid): Don't + use iterate_over_inferiors. + (darwin_resume_inferior_it) + (struct resume_inferior_threads_param) + (darwin_resume_inferior_threads_it): Remove. + (darwin_nat_target::resume): Don't use iterate_over_inferiors. - * source-cache.c (source_cache::get_plain_source_lines): Use - open_source_file_with_line_charpos instead of just - open_source_file, remove call to find_source_lines. - (source_cache::get_source_lines): Likewise. - * source.c (find_source_lines): Make static. - (get_filename_and_charpos): Renamed into... - (open_source_file_with_line_charpos): ..this along with changes to - return a scoped_fd, and some other minor clean ups. - (identify_source_line): Use open_source_file_with_line_charpos. - (search_command_helper): Use open_source_file_with_line_charpos - instead of just open_source_file, remove call to - find_source_lines. - * source.h (open_source_file_with_line_charpos): Declare new - function. - (find_source_lines): Delete declaration. +2020-04-23 Tom de Vries <tdevries@suse.de> -2019-06-15 Andrew Burgess <andrew.burgess@embecosm.com> + * blockframe.c (find_pc_partial_function): Use + find_pc_sect_compunit_symtab rather than + objfile->sf->qf->find_pc_sect_compunit_symtab. - * source.c (get_filename_and_charpos): Remove fullname - parameter. - (identify_source_line): Update call to get_filename_and_charpos. +2020-04-22 Tom de Vries <tdevries@suse.de> -2019-06-14 Tom Tromey <tromey@adacore.com> + PR symtab/25764 + * dwarf2/read.c (scan_partial_symbols): Allow external variable decls + in psymtabs. - PR gdb/24502: - * ui-style.h (skip_ansi_escape): Update comment. - * ui-file.h (class no_terminal_escape_file): New class. - * ui-file.c (no_terminal_escape_file::write) - (no_terminal_escape_file::puts): New methods. - * cli/cli-logging.c (handle_redirections): Use - no_terminal_escape_file. +2020-04-22 Tom de Vries <tdevries@suse.de> -2019-06-14 Tom Tromey <tromey@adacore.com> + PR symtab/25801 + * psymtab.c (psym_map_symtabs_matching_filename): Don't skip shared + symtabs. - * NEWS: Move convenience variable news above Python news. +2020-04-22 Tom de Vries <tdevries@suse.de> -2019-06-14 Tom Tromey <tom@tromey.com> + PR symtab/25700 + * dwarf2/read.c (dwarf2_build_psymtabs_hard): Don't create psymtab for + CU if already created. - * gnulib: Move directory to top-level. - * configure.ac: Don't configure gnulib. - * configure: Rebuild. - * common/common-defs.h: Use new path to gnulib. - * Makefile.in (GNULIB_BUILDDIR): Now ../gnulib. - (GNULIB_H): Remove. - (INCGNU): Look in new gnulib location. - (HFILES_NO_SRCDIR): Remove gnulib files. - (SUBDIR, REQUIRED_SUBDIRS): Remove gnulib. - (generated_files): Remove GNULIB_H. - ($(LIBGNU), all-lib): Remove targets. - (distclean): Don't mention GNULIB_BUILDDIR. - ($(GNULIB_BUILDDIR)/Makefile): Remove target. +2020-04-21 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> -2019-06-14 Tom Tromey <tromey@adacore.com> + * infrun.c (displaced_step_fixup): Switch to the event_thread + before calling displaced_step_restore, not after. - * symfile.c (add_symbol_file_command): Remove obsolete comment. - Warn if symbol file does not provide any symbols. +2020-04-21 Markus Metzger <markus.t.metzger@intel.com> -2019-06-14 Tom Tromey <tromey@adacore.com> + * record-btrace.c (record_btrace_enable_warn): Ignore thread if + its inferior is not recorded by us. + (record_btrace_target_open): Replace call to + all_non_exited_threads () with call to current_inferior + ()->non_exited_threads (). + (record_btrace_target::stop_recording): Likewise. + (record_btrace_target::close): Likewise. + (record_btrace_target::wait): Likewise. + (record_btrace_target::record_stop_replaying): Likewise. - * source.c (find_and_open_source): Respect basenames_may_differ. +2020-04-21 Markus Metzger <markus.t.metzger@intel.com> -2019-06-14 Andrew Burgess <andrew.burgess@embecosm.com> + * btrace.c (btrace_enable): Throw an error on double enables and + when enabling recording fails. + (btrace_disable): Throw an error if the thread is not recorded. - * annotate.c (annotate_breakpoints_invalid): Make use of - scoped_restore_terminal_state. - (annotate_frames_invalid): Likewise. +2020-04-21 Markus Metzger <markus.t.metzger@intel.com> -2019-06-14 Tom Tromey <tromey@adacore.com> + * record-btrace.c (record_btrace_target::fetch_registers): Forward + request if we do not have a thread_info. - * ada-lang.c (ada_evaluate_subexp) <case BINOP_ASSIGN>: Always - allow assignment to an internalvar. +2020-04-21 Tom de Vries <tdevries@suse.de> -2019-06-14 Tom Tromey <tromey@adacore.com> + PR gdb/25471 + * thread.c + (scoped_restore_current_thread::scoped_restore_current_thread): Catch + exception in get_frame_id. - * ada-lex.l: Allow "_" in attribute names. +2020-04-20 Tom Tromey <tromey@adacore.com> -2019-06-14 Tom Tromey <tromey@adacore.com> + * python/python.c (struct gdbpy_event): Mark move constructor as + noexcept. + * python/py-tui.c (class gdbpy_tui_window_maker): Mark move + constructor as noexcept. + * completer.h (struct completion_result): Mark move constructor as + noexcept. + * completer.c (completion_result::completion_result): Use + initialization style. Don't call reset_match_list. - PR gdb/24653: - * regcache.c (registers_changed): Don't call alloca. - * top.c (execute_command): Don't call alloca. +2020-04-20 Mihails Strasuns <mihails.strasuns@intel.com> -2019-06-13 Pedro Alves <palves@redhat.com> + * MAINTAINERS (Write After Approval): Add myself. - * cli/cli-setshow.c (cli/cli-setshow.c): New parameter - 'expression'. When parsing an expression, error out if there's - junk after "unlimited". - (parse_cli_var_uinteger, parse_cli_var_zuinteger_unlimited) - (do_set_command): Adjust calls to is_unlimited_literal. +2020-04-18 Tom Tromey <tom@tromey.com> -2019-06-13 Pedro Alves <palves@redhat.com> + * windows-tdep.c (init_w32_command_list) + (w32_prefix_command_valid): Restore. + (_initialize_windows_tdep): Call init_w32_command_list. + +2020-04-18 Tom Tromey <tom@tromey.com> + + * xcoffread.c (enter_line_range, scan_xcoff_symtab): Update. + * value.c (value_fn_field): Update. + * valops.c (find_function_in_inferior) + (value_allocate_space_in_inferior): Update. + * tui/tui-winsource.c (tui_update_source_windows_with_line): + Update. + * tui/tui-source.c (tui_source_window::set_contents): Update. + * symtab.c (lookup_global_or_static_symbol) + (find_function_start_sal_1, skip_prologue_sal) + (print_msymbol_info, find_gnu_ifunc, symbol_arch): Update. + * symmisc.c (dump_msymbols, dump_symtab_1) + (maintenance_print_one_line_table): Update. + * symfile.c (init_entry_point_info, section_is_mapped) + (list_overlays_command, simple_read_overlay_table) + (simple_overlay_update_1): Update. + * stap-probe.c (handle_stap_probe): Update. + * stabsread.c (dbx_init_float_type, define_symbol) + (read_one_struct_field, read_enum_type, read_range_type): Update. + * source.c (info_line_command): Update. + * python/python.c (gdbpy_source_objfile_script) + (gdbpy_execute_objfile_script): Update. + * python/py-type.c (save_objfile_types): Update. + * python/py-objfile.c (py_free_objfile): Update. + * python/py-inferior.c (python_new_objfile): Update. + * psymtab.c (psym_find_pc_sect_compunit_symtab, dump_psymtab) + (dump_psymtab_addrmap_1, maintenance_info_psymtabs) + (maintenance_check_psymtabs): Update. + * printcmd.c (info_address_command): Update. + * objfiles.h (struct objfile) <arch>: New method, from + get_objfile_arch. + (get_objfile_arch): Don't declare. + * objfiles.c (get_objfile_arch): Remove. + (filter_overlapping_sections): Update. + * minsyms.c (msymbol_is_function): Update. + * mi/mi-symbol-cmds.c (mi_cmd_symbol_list_lines) + (output_nondebug_symbol): Update. + * mdebugread.c (parse_symbol, basic_type, parse_partial_symbols) + (mdebug_expand_psymtab): Update. + * machoread.c (macho_add_oso_symfile): Update. + * linux-tdep.c (linux_infcall_mmap, linux_infcall_munmap): + Update. + * linux-fork.c (checkpoint_command): Update. + * linespec.c (convert_linespec_to_sals): Update. + * jit.c (finalize_symtab): Update. + * infrun.c (insert_exception_resume_from_probe): Update. + * ia64-tdep.c (ia64_find_unwind_table): Update. + * hppa-tdep.c (internalize_unwinds): Update. + * gdbtypes.c (get_type_arch, init_float_type, objfile_type): + Update. + * gcore.c (call_target_sbrk): Update. + * elfread.c (record_minimal_symbol, elf_symtab_read) + (elf_rel_plt_read, elf_gnu_ifunc_record_cache) + (elf_gnu_ifunc_resolve_by_got): Update. + * dwarf2/read.c (create_addrmap_from_index) + (create_addrmap_from_aranges, dw2_find_pc_sect_compunit_symtab) + (read_debug_names_from_section) + (process_psymtab_comp_unit_reader, add_partial_symbol) + (add_partial_subprogram, process_full_comp_unit) + (read_file_scope, read_func_scope, read_lexical_block_scope) + (read_call_site_scope, dwarf2_ranges_read) + (dwarf2_record_block_ranges, dwarf2_add_field) + (mark_common_block_symbol_computed, read_tag_pointer_type) + (read_tag_string_type, dwarf2_init_float_type) + (dwarf2_init_complex_target_type, read_base_type) + (partial_die_info::read, partial_die_info::read) + (read_attribute_value, dwarf_decode_lines_1, new_symbol) + (dwarf2_fetch_die_loc_sect_off): Update. + * dwarf2/loc.c (dwarf2_find_location_expression) + (class dwarf_evaluate_loc_desc, rw_pieced_value) + (dwarf2_evaluate_loc_desc_full, dwarf2_locexpr_baton_eval) + (dwarf2_loc_desc_get_symbol_read_needs) + (locexpr_describe_location_piece, locexpr_describe_location_1) + (loclist_describe_location): Update. + * dwarf2/index-write.c (write_debug_names): Update. + * dwarf2/frame.c (dwarf2_build_frame_info): Update. + * dtrace-probe.c (dtrace_process_dof): Update. + * dbxread.c (read_dbx_symtab, dbx_end_psymtab) + (process_one_symbol): Update. + * ctfread.c (ctf_init_float_type, read_base_type): Update. + * coffread.c (coff_symtab_read, enter_linenos, decode_base_type) + (coff_read_enum_type): Update. + * cli/cli-cmds.c (edit_command, list_command): Update. + * buildsym.c (buildsym_compunit::finish_block_internal): Update. + * breakpoint.c (create_overlay_event_breakpoint) + (create_longjmp_master_breakpoint) + (create_std_terminate_master_breakpoint) + (create_exception_master_breakpoint, get_sal_arch): Update. + * block.c (block_gdbarch): Update. + * annotate.c (annotate_source_line): Update. + +2020-04-17 Tom Tromey <tromey@adacore.com> + + * auto-load.c (show_auto_load_cmd): Remove. + (auto_load_show_cmdlist_get): Use add_show_prefix_cmd. + * arc-tdep.c (_initialize_arc_tdep): Use add_show_prefix_cmd. + (maintenance_print_arc_command): Remove. + * tui/tui-win.c (tui_command): Remove. + (tui_get_cmd_list): Use add_basic_prefix_cmd. + * tui/tui-layout.c (tui_layout_command): Remove. + (_initialize_tui_layout): Use add_basic_prefix_cmd. + * python/python.c (user_set_python, user_show_python): Remove. + (_initialize_python): Use add_basic_prefix_cmd, + add_show_prefix_cmd. + * guile/guile.c (set_guile_command, show_guile_command): Remove. + (install_gdb_commands): Use add_basic_prefix_cmd, + add_show_prefix_cmd. + (info_guile_command): Remove. + * dwarf2/read.c (set_dwarf_cmd, show_dwarf_cmd): Remove. + (_initialize_dwarf2_read): Use add_basic_prefix_cmd, + add_show_prefix_cmd. + * cli/cli-style.h (class cli_style_option) <add_setshow_commands>: + Remove do_set and do_show parameters. + * cli/cli-style.c (set_style, show_style): Remove. + (_initialize_cli_style): Use add_basic_prefix_cmd, + add_show_prefix_cmd. + (cli_style_option::add_setshow_commands): Remove do_set and + do_show parameters. + (cli_style_option::add_setshow_commands): Use + add_basic_prefix_cmd, add_show_prefix_cmd. + (STYLE_ADD_SETSHOW_COMMANDS): Remove macro. + (set_style_name): Remove. + * cli/cli-dump.c (dump_command, append_command): Remove. + (srec_dump_command, ihex_dump_command, verilog_dump_command) + (tekhex_dump_command, binary_dump_command) + (binary_append_command): Remove. + (_initialize_cli_dump): Use add_basic_prefix_cmd. + * windows-tdep.c (w32_prefix_command_valid): Remove global. + (init_w32_command_list): Remove; move into ... + (_initialize_windows_tdep): ... here. Use add_basic_prefix_cmd. + * valprint.c (set_print, show_print, set_print_raw) + (show_print_raw): Remove. + (_initialize_valprint): Use add_basic_prefix_cmd, + add_show_prefix_cmd. + * typeprint.c (set_print_type, show_print_type): Remove. + (_initialize_typeprint): Use add_basic_prefix_cmd, + add_show_prefix_cmd. + * record.c (set_record_command, show_record_command): Remove. + (_initialize_record): Use add_basic_prefix_cmd, + add_show_prefix_cmd. + * cli/cli-cmds.c (_initialize_cli_cmds): Use add_basic_prefix_cmd, + add_show_prefix_cmd. + (info_command, show_command, set_debug, show_debug): Remove. + * top.h (set_history, show_history): Don't declare. + * top.c (set_history, show_history): Remove. + * target-descriptions.c (set_tdesc_cmd, show_tdesc_cmd) + (unset_tdesc_cmd): Remove. + (_initialize_target_descriptions): Use add_basic_prefix_cmd, + add_show_prefix_cmd. + * symtab.c (info_module_command): Remove. + (_initialize_symtab): Use add_basic_prefix_cmd. + * symfile.c (overlay_command): Remove. + (_initialize_symfile): Use add_basic_prefix_cmd. + * sparc64-tdep.c (info_adi_command): Remove. + (_initialize_sparc64_adi_tdep): Use add_basic_prefix_cmd. + * sh-tdep.c (show_sh_command, set_sh_command): Remove. + (_initialize_sh_tdep): Use add_basic_prefix_cmd, + add_show_prefix_cmd. + * serial.c (serial_set_cmd, serial_show_cmd): Remove. + (_initialize_serial): Use add_basic_prefix_cmd, + add_show_prefix_cmd. + * ser-tcp.c (set_tcp_cmd, show_tcp_cmd): Remove. + (_initialize_ser_tcp): Use add_basic_prefix_cmd, + add_show_prefix_cmd. + * rs6000-tdep.c (set_powerpc_command, show_powerpc_command) + (_initialize_rs6000_tdep): Use add_basic_prefix_cmd, + add_show_prefix_cmd. + * riscv-tdep.c (show_riscv_command, set_riscv_command) + (show_debug_riscv_command, set_debug_riscv_command): Remove. + (_initialize_riscv_tdep): Use add_basic_prefix_cmd, + add_show_prefix_cmd. + * remote.c (remote_command, set_remote_cmd): Remove. + (_initialize_remote): Use add_basic_prefix_cmd. + * record-full.c (set_record_full_command) + (show_record_full_command): Remove. + (_initialize_record_full): Use add_basic_prefix_cmd, + add_show_prefix_cmd. + * record-btrace.c (cmd_set_record_btrace) + (cmd_show_record_btrace, cmd_set_record_btrace_bts) + (cmd_show_record_btrace_bts, cmd_set_record_btrace_pt) + (cmd_show_record_btrace_pt): Remove. + (_initialize_record_btrace): Use add_basic_prefix_cmd, + add_show_prefix_cmd. + * ravenscar-thread.c (set_ravenscar_command) + (show_ravenscar_command): Remove. + (_initialize_ravenscar): Use add_basic_prefix_cmd, + add_show_prefix_cmd. + * mips-tdep.c (show_mips_command, set_mips_command) + (_initialize_mips_tdep): Use add_basic_prefix_cmd, + add_show_prefix_cmd. + * maint.c (maintenance_command, maintenance_info_command) + (maintenance_check_command, maintenance_print_command) + (maintenance_set_cmd, maintenance_show_cmd): Remove. + (_initialize_maint_cmds): Use add_basic_prefix_cmd, + add_show_prefix_cmd. + (show_per_command_cmd): Remove. + * maint-test-settings.c (maintenance_set_test_settings_cmd): + Remove. + (maintenance_show_test_settings_cmd): Remove. + (_initialize_maint_test_settings): Use add_basic_prefix_cmd, + add_show_prefix_cmd. + * maint-test-options.c (maintenance_test_options_command): + Remove. + (_initialize_maint_test_options): Use add_basic_prefix_cmd. + * macrocmd.c (macro_command): Remove + (_initialize_macrocmd): Use add_basic_prefix_cmd. + * language.c (set_check, show_check): Remove. + (_initialize_language): Use add_basic_prefix_cmd, + add_show_prefix_cmd. + * infcmd.c (unset_command): Remove. + (_initialize_infcmd): Use add_basic_prefix_cmd. + * i386-tdep.c (set_mpx_cmd, show_mpx_cmd): Remove. + (_initialize_i386_tdep): Use add_basic_prefix_cmd, + add_show_prefix_cmd. + * go32-nat.c (go32_info_dos_command): Remove. + (_initialize_go32_nat): Use add_basic_prefix_cmd. + * cli/cli-decode.c (do_prefix_cmd, add_basic_prefix_cmd) + (do_show_prefix_cmd, add_show_prefix_cmd): New functions. + * frame.c (set_backtrace_cmd, show_backtrace_cmd): Remove. + (_initialize_frame): Use add_basic_prefix_cmd, + add_show_prefix_cmd. + * dcache.c (set_dcache_command, show_dcache_command): Remove. + (_initialize_dcache): Use add_basic_prefix_cmd, + add_show_prefix_cmd. + * cp-support.c (maint_cplus_command): Remove. + (_initialize_cp_support): Use add_basic_prefix_cmd. + * btrace.c (maint_btrace_cmd, maint_btrace_set_cmd) + (maint_btrace_show_cmd, maint_btrace_pt_set_cmd) + (maint_btrace_pt_show_cmd, _initialize_btrace): Use + add_basic_prefix_cmd, add_show_prefix_cmd. + * breakpoint.c (save_command): Remove. + (_initialize_breakpoint): Use add_basic_prefix_cmd. + * arm-tdep.c (set_arm_command, show_arm_command): Remove. + (_initialize_arm_tdep): Use add_basic_prefix_cmd, + add_show_prefix_cmd. + * ada-lang.c (maint_set_ada_cmd, maint_show_ada_cmd) + (set_ada_command, show_ada_command): Remove. + (_initialize_ada_language): Use add_basic_prefix_cmd, + add_show_prefix_cmd. + * command.h (add_basic_prefix_cmd, add_show_prefix_cmd): Declare. + +2020-04-16 Kamil Rytarowski <n54@gmx.com> + + * nbsd-nat.c (inf_ptrace_target::auxv_parse): Remove. + * nbsd-nat.h (inf_ptrace_target::auxv_parse): Likewise. + +2020-04-16 Simon Marchi <simon.marchi@polymtl.ca> + + * windows-tdep.c (is_linked_with_cygwin_dll): Add filename to + warning messages. + +2020-04-16 Simon Marchi <simon.marchi@polymtl.ca> + + * windows-tdep.c (is_linked_with_cygwin_dll): Consider case where + import table is not at beginning of .idata section. + +2020-04-16 Pedro Alves <palves@redhat.com> + + * inferior.c (delete_inferior): Use delete operator directly + instead of delete_program_space. + * progspace.c (add_program_space): New, factored out from + program_space::program_space. + (remove_program_space): New, factored out from + delete_program_space. + (program_space::program_space): Remove intro comment. Rewrite. + (program_space::~program_space): Remove intro comment. Call + remove_program_space. + (delete_program_space): Delete. + * progspace.h (program_space::program_space): Make explicit. Move + intro comment here, adjusted. + (program_space::~program_space): Move intro comment here, + adjusted. + (delete_program_space): Remove. - * compile/compile.c (make_compile_options_def_group): Add braces - around array_view initializer. - * thread.c (make_thread_apply_all_options_def_group) - (make_thread_apply_all_options_def_group): Likewise. +2020-04-16 Tom Tromey <tromey@adacore.com> -2019-06-13 Pedro Alves <palves@redhat.com> + * windows-nat.c (windows_nat::handle_access_violation): New + function. + * nat/windows-nat.h (handle_access_violation): Declare. + * nat/windows-nat.c (handle_exception): Move Cygwin code to + windows-nat.c. Call handle_access_violation. + +2020-04-16 Tom de Vries <tdevries@suse.de> + + PR symtab/25791 + * dwarf2/index-write.c (write_gdbindex): Generate CU table entries for + CUs without psymtab. + +2020-04-16 Kevin Buettner <kevinb@redhat.com> + + * python/python.c (do_start_initialization): Don't call + PyEval_InitThreads for Python 3.9 and beyond. + +2020-04-15 Kamil Rytarowski <n54@gmx.com> + + * obsd-nat.c (obsd_nat_target::update_thread_list): Pass "this" to + thread functions. + (obsd_nat_target::wait): Likewise. + +2020-04-15 Tom Tromey <tromey@adacore.com> + + * windows-nat.c (DEBUG_EXEC, DEBUG_EVENTS, DEBUG_MEM) + (DEBUG_EXCEPT): Use debug_printf. + +2020-04-15 Andrew Burgess <andrew.burgess@embecosm.com> + + * completer.c (class completion_tracker::completion_hash_entry) + <hash_name>: New member function. + (completion_tracker::discard_completions): New callback to hash a + completion_hash_entry, pass this to htab_create_alloc. + +2016-01-20 Jon Turney <jon.turney@dronecode.org.uk> + + * windows-nat.c (windows_make_so): Warn rather than stopping with + an error if realpath() fails. + +2020-04-14 Kamil Rytarowski <n54@gmx.com> + + * nbsd-nat.c (nbsd_pid_to_kinfo_proc2): New. + (nbsd_nat_target::info_proc): Add do_status. + +2020-04-14 Simon Marchi <simon.marchi@polymtl.ca> + Tom de Vries <tdevries@suse.de> + + PR symtab/25718 + * psympriv.h (struct partial_symtab::read_symtab) + (struct partial_symtab::expand_psymtab) + (struct partial_symtab::read_dependencies): Update comments. + * dwarf2/read.c (struct dwarf2_include_psymtab::read_symtab): Call + read_symtab for includer. + (struct dwarf2_include_psymtab::expand_psymtab): Assert false. + (struct dwarf2_include_psymtab::readin_p): Call readin_p () for includer. + (struct dwarf2_include_psymtab::m_readin): Remove. + (struct dwarf2_include_psymtab::includer): New member function. + (dwarf2_psymtab::expand_psymtab): Assert !readin. + +2020-04-14 Tom de Vries <tdevries@suse.de> + + PR symtab/25720 + * symmisc.c (maintenance_expand_symtabs): Call expand_symtabs_matching + with NULL symbol_matcher and lookup_name. + * psymtab.c (psym_expand_symtabs_matching): Handle NULL symbol_matcher + and lookup_name. + * dwarf2/read.c (dw2_expand_symtabs_matching) + (dw2_debug_names_expand_symtabs_matching): Same. + * symfile.h (struct quick_symbol_functions::expand_symtabs_matching): + Make lookup_name a pointer. Update comment. + * symtab.c (global_symbol_searcher::expand_symtabs): Handle + lookup_name being a pointer. + * symfile.c (expand_symtabs_matching): Same. + * symfile-debug.c (debug_qf_expand_symtabs_matching): Same. + * linespec.c (iterate_over_all_matching_symtabs): Same. + +2020-04-13 Tom Tromey <tom@tromey.com> + + * run-on-main-thread.c: Update include. + * unittests/main-thread-selftests.c: Update include. + * tui/tui-win.c: Update include. + * tui/tui-io.c: Update include. + * tui/tui-interp.c: Update include. + * tui/tui-hooks.c: Update include. + * top.h: Update include. + * top.c: Update include. + * ser-base.c: Update include. + * remote.c: Update include. + * remote-notif.c: Update include. + * remote-fileio.c: Update include. + * record-full.c: Update include. + * record-btrace.c: Update include. + * python/python.c: Update include. + * posix-hdep.c: Update include. + * mingw-hdep.c: Update include. + * mi/mi-main.c: Update include. + * mi/mi-interp.c: Update include. + * main.c: Update include. + * linux-nat.c: Update include. + * interps.c: Update include. + * infrun.c: Update include. + * inf-loop.c: Update include. + * event-top.c: Update include. + * event-loop.c: Move to ../gdbsupport/. + * event-loop.h: Move to ../gdbsupport/. + * async-event.h: Update include. + * Makefile.in (COMMON_SFILES, HFILES_NO_SRCDIR): Update. + +2020-04-13 Tom Tromey <tom@tromey.com> + + * tui/tui-win.c: Include async-event.h. + * remote.c: Include async-event.h. + * remote-notif.c: Include async-event.h. + * record-full.c: Include async-event.h. + * record-btrace.c: Include async-event.h. + * infrun.c: Include async-event.h. + * event-top.c: Include async-event.h. + * event-loop.h: Move some declarations to async-event.h. + * event-loop.c: Don't include ser-event.h or top.h. Move some + code to async-event.c. + * async-event.h: New file. + * async-event.c: New file. + * Makefile.in (COMMON_SFILES): Add async-event.c. + (HFILES_NO_SRCDIR): Add async-event.h. + +2020-04-13 Tom Tromey <tom@tromey.com> + + * utils.c (flush_streams): New function. + * event-loop.c (gdb_wait_for_event): Call flush_streams. + +2020-04-13 Tom Tromey <tom@tromey.com> + + * event-loop.c (handle_file_event): Use warning, not + printf_unfiltered. + +2020-04-13 Tom Tromey <tom@tromey.com> + + * event-loop.c: Include <chrono>. + +2020-04-13 Tom Tromey <tom@tromey.com> + + * gdb_select.h: Move to ../gdbsupport/. + * event-loop.c: Update include path. + * top.c: Update include path. + * ser-base.c: Update include path. + * ui-file.c: Update include path. + * ser-tcp.c: Update include path. + * guile/scm-ports.c: Update include path. + * posix-hdep.c: Update include path. + * ser-unix.c: Update include path. + * gdb_usleep.c: Update include path. + * mingw-hdep.c: Update include path. + * inflow.c: Update include path. + * infrun.c: Update include path. + * event-top.c: Update include path. - * NEWS (New commands): Mention "maint test-options - require-delimiter", "maint test-options unknown-is-error", "maint - test-options unknown-is-operand" and "maint show - test-options-completion-result". - (New command options, command completion): New section. - (Completion improvements): New section. - Mention that you can abbreviate "unlimited". +2020-04-13 Tom Tromey <tom@tromey.com> -2019-06-13 Pedro Alves <palves@redhat.com> + * configure: Rebuild. + * configure.ac: Remove checks that are now in GDB_AC_COMMON. - * cli/cli-utils.c (parse_flags, parse_flags_qcs): Delete. - * cli/cli-utils.h (parse_flags, parse_flags_qcs): Delete. - * unittests/cli-utils-selftests.c (test_parse_flags) - (test_parse_flags_qcs): Delete. - (test_cli_utils): Don't call deleted functions. +2020-04-13 Tom Tromey <tom@tromey.com> -2019-06-13 Pedro Alves <palves@redhat.com> + * event-loop.h (start_event_loop): Don't declare. + * event-loop.c (start_event_loop): Move... + * main.c (start_event_loop): ...here. Now static. - * thread.c: Include "cli/cli-option.h". - (tp_array_compar_ascending): Global. - (tp_array_compar): Delete function. - (tp_array_compar_ascending, tp_array_compar_descending): New - functions. - (ascending_option_def, qcs_flag_option_def) - (thr_qcs_flags_option_defs) - (make_thread_apply_all_options_def_group) - (make_thread_apply_options_def_group): New. - (thread_apply_all_command): Use gdb::option::process_options. - (thread_apply_command_completer) - (thread_apply_all_command_completer): New. - (thread_apply_command): Use gdb::option::process_options. - (_initialize_thread): Delete THREAD_APPLY_FLAGS_HELP, replace it - with a new THREAD_APPLY_OPTION_HELP. Use gdb::option::build_help - to generate help text of "thread apply". Adjust "taas"'s help. - * tid-parse.c (tid_range_parser::in_thread_range): New method. - * tid-parse.h (tid_range_parser::in_thread_range): New method. - -2019-06-13 Pedro Alves <palves@redhat.com> - - * thread.c (thread_apply_command): Check for invalid TID with - isdigit instead of !isalpha. - -2019-06-13 Pedro Alves <palves@redhat.com> - - * cli/cli-utils.c (parse_flags_qcs): Use validate_flags_qcs. - (validate_flags_qcs): New. - * cli/cli-utils.h (struct qcs_flags): Change field types to int. - (validate_flags_qcs): Declare. - * stack.c (qcs_flag_option_def, fr_qcs_flags_option_defs): New. - (make_frame_apply_options_def_group): New. - (frame_apply_command_count): Process options with - gdb::option::process_options. - (frame_apply_completer): New. - (frame_apply_level_completer, frame_apply_all_completer) - (frame_apply_completer): New. - (_initialize_stack): Update help of "frame apply", "frame apply - level", "frame apply all" and "faas" to mention supported options - and install command completers. - * stack.h (frame_apply_all_completer): Declare. - * thread.c: Include "stack.h". - (tfaas_command): Add "--". - (_initialize_thread): Update help "tfaas" to mention supported - options and install command completer. - -2019-06-13 Pedro Alves <palves@redhat.com> - - * completer.c (complete_nested_command_line): New. - (gdb_completion_word_break_characters_throw): Add assertion. - * completer.h (complete_nested_command_line): Declare. - -2019-06-13 Pedro Alves <palves@redhat.com> - - * stack.c (parse_backtrace_qualifiers): New. - (backtrace_command): Use it. - (backtrace_command_completer): Complete on qualifiers. - -2019-06-13 Pedro Alves <palves@redhat.com> - - * frame.c: Include "cli/cli-option.h. - (user_set_backtrace_options): New. - (backtrace_past_main, backtrace_past_entry, backtrace_limit): - Delete. - (get_prev_frame): Adjust. - (boolean_option_def, uinteger_option_def) - (set_backtrace_option_defs): New. - (_initialize_frame): Adjust and use - gdb::option::add_setshow_cmds_for_options to install "set - backtrace past-main" and "set backtrace past-entry". - * frame.h: Include "cli/cli-option.h". - (struct frame_print_options): Forward declare. - (print_frame_arguments_all, print_frame_arguments_scalars) - (print_frame_arguments_none): Declare. - (print_entry_values): Delete declaration. - (struct frame_print_options, user_frame_print_options): New. - (struct set_backtrace_options): New. - (set_backtrace_option_defs, user_set_backtrace_options): Declare. - * mi/mi-cmd-stack.c (mi_cmd_stack_list_frames) - (mi_cmd_stack_list_locals, mi_cmd_stack_list_args) - (mi_cmd_stack_list_variables): Pass down USER_FRAME_PRINT_OPTIONS. - (list_args_or_locals): Add frame_print_options parameter. - (mi_cmd_stack_info_frame): Pass down USER_FRAME_PRINT_OPTIONS. - * python/py-framefilter.c (enumerate_args): Pass down - USER_FRAME_PRINT_OPTIONS. - * stack.c: Include "cli/cli-option.h". - (print_frame_arguments_all, print_frame_arguments_scalars) - (print_frame_arguments_none): Declare. - (print_raw_frame_arguments, print_entry_values): Delete. - (user_frame_print_options): New. - (boolean_option_def, enum_option_def, frame_print_option_defs): - New. - (struct backtrace_cmd_options): New. - (bt_flag_option_def): New. - (backtrace_command_option_defs): New. - (print_stack_frame): Pass down USER_FRAME_PRINT_OPTIONS. - (print_frame_arg, read_frame_arg, print_frame_args) - (print_frame_info, print_frame): Add frame_print_options parameter - and use it. - (info_frame_command_core): Pass down USER_FRAME_PRINT_OPTIONS. - (backtrace_command_1): Add frame_print_options and - backtrace_cmd_options parameters and use them. - (make_backtrace_options_def_group): New. - (backtrace_command): Process command options with - gdb::option::process_options. - (backtrace_command_completer): New. - (_initialize_stack): Extend "backtrace"'s help to mention - supported options. Install completer for "backtrace". - Install some settings commands with add_setshow_cmds_for_options. - -2019-06-13 Pedro Alves <palves@redhat.com> - - * NEWS (Changed commands): Mention set/show print raw-frame-arguments, - and that "set/show print raw frame-arguments" are now deprecated. - - * cli/cli-decode.c (add_setshow_boolean_cmd): Now returns the - command. - * command.h (add_setshow_boolean_cmd): Return cmd_list_element *. - * stack.c (_initialize_stack): Install "set/show print - raw-frame-arguments", and deprecate "set/show print raw - frame-arguments". - * valprint.c (_initialize_valprint): Deprecate "set/show print - raw". - -2019-06-13 Pedro Alves <palves@redhat.com> - - * compile/compile.c (struct compile_options): New. - (compile_flag_option_def, compile_command_option_defs) - (make_compile_options_def_group): New. - (compile_file_command): Handle options with - gdb::option::process_options. - (compile_file_command_completer): New function. - (compile_code_command): Handle options with - gdb::option::process_options. - (compile_code_command_completer): New function. - (_initialize_compiler): Install completers for "compile code" and - "compile file". Mention available options in "compile code" and - "compile code"'s help. - * completer.c (advance_to_completion_word): New, factored out from - ... - (advance_to_expression_complete_word_point): ... this. - (advance_to_filename_complete_word_point): New. - * completer.h (advance_to_filename_complete_word_point): New - declaration. +2020-04-13 Sergio Durigan Junior <sergiodj@sergiodj.net> -2019-06-13 Pedro Alves <palves@redhat.com> + * MAINTAINERS: Update my email address. - * compile/compile.c: Include "cli/cli-option.h". - (compile_print_value): Scope data pointer is now a - value_print_options pointer; adjust. - (compile_print_command): Process options. Scope data pointer is - now a value_print_options pointer; adjust. - (_initialize_compile): Update "compile print"'s help to include - supported options. Install a completer for "compile print". - * cp-valprint.c (show_vtblprint, show_objectprint) - (show_static_field_print): Delete. - (_initialize_cp_valprint): Don't install "set print - static-members", "set print vtbl", "set print object" here. - * printcmd.c: Include "cli/cli-option.h" and - "common/gdb_optional.h". - (print_command_parse_format): Rework to fill in a - value_print_options instead of a format_data. - (print_value): Change parameter type from format_data pointer to - value_print_options reference. Adjust. - (print_command_1): Process options. Adjust to pass down a - value_print_options. - (print_command_completer): New. - (_initialize_printcmd): Install print_command_completer as - handle_brkchars completer for the "print" command. Update - "print"'s help to include supported options. - * valprint.c: Include "cli/cli-option.h". - (show_vtblprint, show_objectprint, show_static_field_print): Moved - here from cp-valprint.c. - (boolean_option_def, uinteger_option_def) - (value_print_option_defs, make_value_print_options_def_group): - New. Use gdb::option::add_setshow_cmds_for_options to install - "set print elements", "set print null-stop", "set print repeats", - "set print pretty", "set print union", "set print array", "set - print address", "set print symbol", "set print array-indexes". - * valprint.h: Include <string> and "cli/cli-option.h". - (make_value_print_options_def_group): Declare. - (print_value): Change parameter type from format_data pointer to - value_print_options reference. - (print_command_completer): Declare. - -2019-06-13 Pedro Alves <palves@redhat.com> - - * Makefile.in (SUBDIR_CLI_SRCS): Add cli/cli-option.c. - (COMMON_SFILES): Add maint-test-settings.c. - * cli/cli-decode.c (boolean_enums): New global, factored out from - ... - (add_setshow_boolean_cmd): ... here. - * cli/cli-decode.h (boolean_enums): Declare. - * cli/cli-option.c: New file. - * cli/cli-option.h: New file. - * cli/cli-setshow.c (parse_cli_boolean_value(const char **)): New, - factored out from ... - (parse_cli_boolean_value(const char *)): ... this. - (is_unlimited_literal): Change parameter type to pointer to - pointer. Adjust and advance ARG pointer. - (parse_cli_var_uinteger, parse_cli_var_zuinteger_unlimited) - (parse_cli_var_enum): New, factored out from ... - (do_set_command): ... this. Adjust. - * cli/cli-setshow.h (parse_cli_boolean_value) - (parse_cli_var_uinteger, parse_cli_var_zuinteger_unlimited) - (parse_cli_var_enum): Declare. - * cli/cli-utils.c: Include "cli/cli-option.h". - (get_ulongest): New. - * cli/cli-utils.h (get_ulongest): Declare. - (check_for_argument): New overloads. - * maint-test-options.c: New file. +2020-04-12 Kamil Rytarowski <n54@gmx.com> -2019-06-13 Pedro Alves <palves@redhat.com> + * nbsd-nat.c (nbsd_nat_target::info_proc): Add IP_MINIMAL and + IP_ALL. - * cli/cli-utils.c (number_or_range_parser::get_number): Do not - parse a range if "-" is at the end of the string. +2020-04-12 Kamil Rytarowski <n54@gmx.com> -2019-06-13 Pedro Alves <palves@redhat.com> + * nbsd-nat.c (nbsd_pid_to_cmdline): Add. + (nbsd_nat_target::info_proc): Add do_cmdline. - * cli/cli-setshow.c (parse_auto_binary_operation) - (parse_cli_boolean_value): Don't allow "o". +2020-04-12 Kamil Rytarowski <n54@gmx.com> -2019-06-13 Pedro Alves <palves@redhat.com> + * nbsd-nat.c (nbsd_pid_to_cwd): Add. + (nbsd_nat_target::info_proc): Add do_cwd. - * Makefile.in (COMMON_SFILES): Add maint-test-settings.c. - * NEWS: Mention maint test-settings KIND. - * maint-test-settings.c: New file. +2020-04-12 Kamil Rytarowski <n54@gmx.com> -2019-06-13 Pedro Alves <palves@redhat.com> + * nbsd-nat.c (nbsd_nat_target::info_proc): Add do_exe. - * cli/cli-decode.c (add_setshow_cmd_full): Remove "show" - completer. - (add_setshow_string_cmd, add_setshow_string_noescape_cmd): Remove - "set" completers. +2020-04-11 Kamil Rytarowski <n54@gmx.com> -2019-06-13 Pedro Alves <palves@redhat.com> + * nbsd-nat.c; Include "nbsd-tdep.h" and "gdbarch.h". + * nbsd-nat.c (nbsd_nat_target::find_memory_regions) + (nbsd_nat_target::info_proc): New functions. + * nbsd-nat.c (kinfo_get_vmmap): New function. + * nbsd-nat.c (nbsd_nat_target::info_proc) Use + nbsd_info_proc_mappings_header and nbsd_info_proc_mappings_entry. + * nbsd-tdep.c (nbsd_info_proc_mappings_header) + (nbsd_info_proc_mappings_entry, nbsd_vm_map_entry_flags): New + functions. + * nbsd-tdep.c (KINFO_VME_PROT_READ, KINFO_VME_PROT_WRITE) + (KINFO_VME_PROT_EXEC, KINFO_VME_FLAG_COW) + (KINFO_VME_FLAG_NEEDS_COPY, KINFO_VME_FLAG_NOCOREDUMP) + (KINFO_VME_FLAG_PAGEABLE, KINFO_VME_FLAG_GROWS_UP) + (KINFO_VME_FLAG_GROWS_DOWN): New. - * cli/cli-setshow.c (do_set_command) <var_enum>: Detect junk - after item. +2020-04-10 Artur Shepilko <nomadbyte@gmail.com> -2019-06-13 Pedro Alves <palves@redhat.com> + * utils.c (copy_bitwise): Use unsigned 0 constant as operand of + bit shift. - * cli/cli-setshow.c (is_unlimited_literal): Allow abbreviations. +2020-04-10 Tom Tromey <tromey@adacore.com> -2019-06-13 Pedro Alves <palves@redhat.com> + * symfile.c (symbol_file_add_separate): Preserve OBJF_MAINLINE. - * ax-gdb.c (agent_command_1): Remove skip_spaces call. - * breakpoint.c (watch_maybe_just_location): Remove skip_spaces - call. - * cli/cli-cmds.c (apropos_command): Remove skip_spaces call. - * cli/cli-utils.c (extract_info_print_args): Remove skip_spaces - calls. - (check_for_argument): Skip spaces after argument. +2020-04-10 Tom Tromey <tromey@adacore.com> -2019-06-13 Pedro Alves <palves@redhat.com> + * symtab.c (get_symbol_address, get_msymbol_address): Skip + separate debug files. - * thread.c (thread_apply_command): Adjust TID parsing. - * tid-parse.c (tid_range_parser::finished): Ensure parsing end is - detected before end of string. - (tid_is_in_list): Error out if LIST is invalid. - -2019-06-13 Pedro Alves <palves@redhat.com> - - * completer.c (complete_line_internal_1): Rewind completion word - point. - (completion_tracker::advance_custom_word_point_by): Change - parameter type to int. - * completer.h (completion_tracker::advance_custom_word_point_by): - Likewise. +2020-04-10 Hannes Domani <ssbssa@yahoo.de> -2019-06-13 Pedro Alves <palves@redhat.com> + * nat/windows-nat.c (STATUS_WX86_BREAKPOINT, STATUS_WX86_SINGLE_STEP): + Move to... + * nat/windows-nat.h (STATUS_WX86_BREAKPOINT, STATUS_WX86_SINGLE_STEP): + ... here. + * windows-nat.c (windows_nat_target::get_windows_debug_event): + Check for STATUS_WX86_BREAKPOINT. + (windows_nat_target::wait): Same. - * completer.c (advance_to_completion_word): Handle delimiters. +2020-04-10 Tom de Vries <tdevries@suse.de> -2019-06-11 Bernhard Heckel <bernhard.heckel@intel.com> + PR cli/25808 + * python/lib/gdb/__init__.py: Initialize lexer with stripnl=False. - * dwarf2read.c (add_partial_symbol): Skip nameless modules. +2020-04-09 Simon Marchi <simon.marchi@polymtl.ca> -2019-06-11 Tom Tromey <tom@tromey.com> - - * common/common-utils.c (xmalloc, xrealloc, xcalloc) - (xmalloc_failed): Move to alloc.c. - * alloc.c: New file. - * Makefile.in (COMMON_SFILES): Add alloc.c. - -2019-06-11 Tom Tromey <tom@tromey.com> - - * nat/linux-waitpid.c: Don't include server.h. - (linux_debug): Remove. - (my_waitpid): Update. - -2019-06-11 Tom Tromey <tromey@adacore.com> - - * infcall.c (_initialize_infcall): Remove trailing newline from - help. - * user-regs.c (_initialize_user_regs): Remove trailing newline - from help. - * typeprint.c (_initialize_typeprint): Remove trailing newline - from help. - * reverse.c (_initialize_reverse): Remove trailing newlines from - help. - * tracepoint.c (_initialize_tracepoint): Remove trailing newlines - from help. - * language.c (add_set_language_command): Remove trailing newline - from help. - * infcmd.c (_initialize_infcmd): Remove trailing newlines from - help. - * disasm.c (_initialize_disasm): Remove trailing newline from - help. - * top.c (init_main): Remove trailing newline from help. - * interps.c (_initialize_interpreter): Remove trailing newline - from help. - * btrace.c (_initialize_btrace): Remove trailing newlines from - help. - * breakpoint.c (_initialize_breakpoint): Remove trailing newline - from help. - * python/python.c (_initialize_python): Remove trailing newline - from help. - * spu-tdep.c (_initialize_spu_tdep): Remove trailing newlines from - help. - * tui/tui-win.c (_initialize_tui_win): Remove trailing newlines - from help. Reformat some text. - * tui/tui-stack.c (_initialize_tui_stack): Remove trailing newline - from help. - * tui/tui-layout.c (_initialize_tui_layout): Remove trailing - newline from help. - -2019-06-11 Tom Tromey <tromey@adacore.com> - - * darwin-nat.c (darwin_decode_exception_message) - (darwin_decode_message, darwin_nat_target::kill): Fix shadowing. - -2019-06-10 Andrew Burgess <andrew.burgess@embecosm.com> - - * valops.c (value_slice): Check for not allocated or not - associated values. - -2019-06-10 Tom de Vries <tdevries@suse.de> - - PR gdb/24618 - * dwarf2read.c (struct mapped_index::symbol_name_slot_invalid): Make - sure an empty slot (defined by a 32-bit zero pair) is recognized as - invalid. - -2019-06-10 Tom de Vries <tdevries@suse.de> - - PR gdb/24611 - * linespec.c (linespec_lexer_lex_string): Remove incorrect - "++(PARSER_STREAM (parser))" for "[abi"-prefixed colon. Add assert. - -2019-06-10 Tom de Vries <tdevries@suse.de> - - PR symtab/24545 - * symtab.c (struct demangled_name_entry): Add language field. - (symbol_set_names): Revert "[gdb/symtab] Fix language of duplicate - static minimal symbol". Set and use language field. - -2019-06-10 Tom Tromey <tromey@adacore.com> - - * ada-lang.c (_initialize_ada_language): Update help text. - -2019-06-10 Tom Tromey <tromey@adacore.com> - - * m32c-tdep.c (m32c_m16c_address_to_pointer): Don't end warning - with a newline. - * guile/guile.c (handle_boot_error): Don't end warning with a - newline. - * cli/cli-cmds.c (exit_status_set_internal_vars): Don't end - warning with a newline. - * s12z-tdep.c (s12z_skip_prologue): Don't end warning with a - newline. - (s12z_frame_cache): Likewise. - * dwarf-index-cache.c (index_cache::store): Don't end warning with - a newline. - * solib-svr4.c (disable_probes_interface): Don't end warning with - a newline. - * nat/fork-inferior.c (fork_inferior): Don't end warning with a - newline. - * python/python.c (do_finish_initialization): Don't end warning - with a newline. - -2019-06-10 Tom Tromey <tom@tromey.com> - - * python/py-breakpoint.c (gdbpy_breakpoint_created) - (gdbpy_breakpoint_deleted, gdbpy_breakpoint_modified): Use - gdbpy_enter. - -2019-06-10 Tom Tromey <tromey@adacore.com> - - * elfread.c (elf_read_minimal_symbols): Don't set the dbx objfile - data. - (elf_new_init): Don't call stabsread_new_init. - * dbxread.c (coffstab_build_psymtabs): Set dbx objfile data. - (elfstab_build_psymtabs): Likewise. Call stabsread_new_init. - * coffread.c (coff_symfile_init): Don't set the dbx objfile data. - -2019-06-10 Tom de Vries <tdevries@suse.de> - - PR symtab/16264 - PR symtab/24517 - * dwarf2read.c (read_func_scope): Handle DW_AT_main_subprogram. + * MAINTAINERS (Global Maintainers): Add Tom de Vries. + (Write After Approval): Remove Tom de Vries. -2019-06-06 РуÑлан Ижбулатов <lrn1986@gmail.com> +2020-04-09 Bernd Edlinger <bernd.edlinger@hotmail.de> - * source.c (find_and_open_source): Also rewrite relative file - names. + revert partially: + 2020-04-01 Bernd Edlinger <bernd.edlinger@hotmail.de> -2019-04-26 Amos Bird <amosbird@gmail.com> + * buildsym.c (record_line): Fix undefined behavior and preserve + lines at eof. - * annotate.c (annotate_thread_exited): Add "thread-exited" - annotation. +2020-04-09 Kamil Rytarowski <n54@gmx.com> -2019-06-06 Tom Tromey <tromey@adacore.com> + * auxv.h (svr4_auxv_parse): New. + * auxv.c (default_auxv_parse): Split into default_auxv_parse + and generic_auxv_parse. + (svr4_auxv_parse): Add. + * obsd-tdep.c: Include "auxv.h". + (obsd_auxv_parse): Remove. + (obsd_init_abi): Remove comment. + (obsd_init_abi): Change set_gdbarch_auxv_parse passed argument + from `obsd_auxv_parse' to `svr4_auxv_parse'. + * nbsd-tdep.c: Include "auxv.h". + (nbsd_init_abi): Call set_gdbarch_auxv_parse. - * maint.h (class scoped_command_stats): Use - DISABLE_COPY_AND_ASSIGN. - <print_time>: New method. - * maint.c (scoped_command_stats, ~scoped_command_stats): Call - print_time. - (scoped_command_stats::print_time): New method. - -2019-06-05 Andrew Burgess <andrew.burgess@embecosm.com> - - * riscv-tdep.c (riscv_insn::decode): Gracefully ignore - instructions of lengths 6 or 8 bytes. - -2019-06-04 Pedro Alves <palves@redhat.com> - - * common/gdb_unique_ptr.h (make_unique_xstrdup): New. - - * ada-lang.c (catch_ada_completer): Use make_unique_xstrdup. - * breakpoint.c (condition_completer): Likewise. - * cli/cli-dump.c (scan_expression): Likewise. - * common/filestuff.c (mkdir_recursive): Likewise. - * common/gdb_tilde_expand.c (gdb_tilde_expand_up) - * common/pathstuff.c (gdb_realpath, gdb_realpath_keepfile) - (gdb_abspath): Likewise. - * compile/compile-cplus-types.c - (compile_cplus_instance::decl_name): Likewise. - * completer.c (complete_explicit_location): - (signal_completer, reg_or_group_completer_1): Likewise. - * cp-support.c (cp_remove_params_if_any): Likewise. - * fbsd-tdep.c (fbsd_core_vnode_path): Likewise. - * guile/scm-safe-call.c (gdbscm_safe_eval_string): Likewise. - * infcmd.c (strip_bg_char): Likewise. - * linespec.c (copy_token_string): Likewise. - * mi/mi-main.c (output_cores): Likewise. - * psymtab.c (psymtab_search_name): - * symfile.c (test_set_ext_lang_command): Likewise. - * target.c (target_fileio_read_stralloc): Likewise. - * tui/tui-regs.c (tui_reggroup_completer): Likewise. - * value.c (complete_internalvar): Likewise. - -2019-06-04 Christian Biesinger <cbiesinger@google.com> - - Add objfile property to gdb.Type. - * NEWS: Mention Python API addition. - * python/py-type.c (typy_get_objfile): New method. - -2019-06-03 Philippe Waroquiers <philippe.waroquiers@skynet.be> - - * NEWS: Mention the new set|show style [title|highlight]. - Mention changes to "show style", "help" and "apropos". - -2019-06-03 Philippe Waroquiers <philippe.waroquiers@skynet.be> - - * cli/cli-decode.h (apropos_cmd): Add verbose argument. - * cli/cli-decode.c (apropos_cmd): Likewise. Use print_doc_of_command - instead of print_help_for_command. - (print_doc_of_command): New function. - (help_list): Add 'apropos -v word' suggestion. - (print_help_for_command): Style the command name using title style. - * cli/cli-cmds.c (apropos_command): Parse optional -v flag. - (_initialize_cli_cmds): Describe -v in apropos_command help. - -2019-06-03 Philippe Waroquiers <philippe.waroquiers@skynet.be> - - * cli/cli-style.h (cli_style_option): Add name in constructor, - add m_name class member, add constructor with intensity, - add name class function. - (cli_style_option::add_setshow_commands): Remove name argument. - (highlight_style, title_style): New styles. - * cli/cli-style.c (do_show): New function that shows a style - characteristic styling the style name with itself. - (set_style_name): New function. - (STYLE_ADD_SETSHOW_COMMANDS): Remove NAME arguments. - Update all callers according to the changes in cli/cli-style.h. - * utils.h (fputs_highlighted): New function. - * utils.c (fputs_highlighted): Likewise. - -2019-05-31 Philippe Waroquiers <philippe.waroquiers@skynet.be> - - * NEWS: Mention new pipe command and new convenience variables. - -2019-05-31 Philippe Waroquiers <philippe.waroquiers@skynet.be> - - * cli/cli-cmds.c (pipe_command): New function. - (_initialize_cli_cmds): Call add_com for pipe_command. - Define | as an alias for pipe. - (exit_status_set_internal_vars): New function. - (shell_escape): Call exit_status_set_internal_vars. - cli/cli-decode.c (find_command_name_length): Recognize | as - a single character command. - -2019-05-31 Philippe Waroquiers <philippe.waroquiers@skynet.be> - - * gdbcmd.h (execute_command_to_ui_file): New declaration. - top.c (execute_command_to_ui_file): New function, mostly a copy - of execute_command_to_string. - (execute_command_to_string): Implement by calling - execute_command_to_ui_file. - -2019-05-31 Philippe Waroquiers <philippe.waroquiers@skynet.be> - - * top.h (saved_command_line): Remove declaration. - * top.c (previous_saved_command_line, previous_repeat_arguments): - New variables. - (saved_command_line): Make static, define together with other - 'repeat variables'. - (dont_repeat): Clear repeat_arguments. - (repeat_previous, get_saved_command_line, save_command_line): - New functions. - (gdb_init): Initialize saved_command_line - and previous_saved_command_line. - * main.c (captured_main_1): Remove saved_command_line initialization. - * event-top.c (handle_line_of_input): Update to use - the new 'repeat' related functions instead of direct access to - saved_command_line. - * command.h (repeat_previous, get_saved_command_line, - save_command_line): New declarations. - (dont_repeat): Add comment. - -2019-05-30 Tom Tromey <tromey@adacore.com> - - * gdbtypes.h (struct range_bounds) <flag_upper_bound_is_count>: - Fix comment. - (TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED): Rewrite comment. - -2019-05-30 Jan Vrany <jan.vrany@fit.cvut.cz> - - PR cli/24587 - * completer.c (complete): Initialize variable word. - -2019-05-29 Sergio Durigan Junior <sergiodj@redhat.com> - - Ref.: https://bugzilla.redhat.com/show_bug.cgi?id=1708192 - Ref.: https://bugzilla.redhat.com/show_bug.cgi?id=1715008 - * dwarf2read.c (dwarf_decode_macro_bytes): Move check to see if - 'body' is NULL to the outter 'if', protecting the '!is_define' - situation as well. - -2019-05-29 Tom Tromey <tromey@adacore.com> - - * dwarf2read.c (partial_die_parent_scope): Call dwarf_tag_name. - (dwarf_unknown): New function. - (dwarf_tag_name, dwarf_attr_name, dwarf_form_name) - (dwarf_type_encoding_name): Use dwarf_unknown. - -2019-05-29 Tom Tromey <tromey@adacore.com> - - PR c++/20020: - * cp-valprint.c (cp_print_value_fields): Call - cp_print_static_field inside "try". +2020-04-08 Tom Tromey <tromey@adacore.com> -2019-05-29 Tom Tromey <tromey@adacore.com> + * nat/windows-nat.h (last_wait_event): Don't declare. + (wait_for_debug_event): Update comment. + * nat/windows-nat.c (last_wait_event): Now static. - * inflow.c (struct terminal_info): Add default operator=. - * configure: Rebuild. - * warning.m4 (AM_GDB_WARNINGS): Add -Wdeprecated-copy, - -Wdeprecated-copy-dtor, -Wredundant-move. +2020-04-08 Tom Tromey <tromey@adacore.com> -2019-05-29 Tom Tromey <tromey@adacore.com> + * windows-nat.c (wait_for_debug_event): Move to + nat/windows-nat.c. + * nat/windows-nat.h (wait_for_debug_event): Declare. + * nat/windows-nat.c (wait_for_debug_event): Move from + windows-nat.c. No longer static. - * NEWS: Add entry. - * infcmd.c (print_return_value_1): Handle finish_print - option. - (show_print_finish): New function. - (_initialize_infcmd): Add "set/show print finish" commands. - * valprint.c (user_print_options): Initialize new member. - * valprint.h (struct value_print_options) <finish_print>: New - member. +2020-04-08 Tom Tromey <tromey@adacore.com> -2019-05-28 Tom Tromey <tromey@adacore.com> + * windows-nat.c (get_windows_debug_event): Use + fetch_pending_stop. + * nat/windows-nat.h (fetch_pending_stop): Declare. + * nat/windows-nat.c (fetch_pending_stop): New function. - * ada-lang.c (ada_remove_Xbn_suffix) - (find_old_style_renaming_symbol) - (parse_old_style_renaming): Remove. - (ada_find_renaming_symbol): Don't call - find_old_style_renaming_symbol. - (ada_is_renaming_symbol): Rename from - ada_find_renaming_symbol. Remove "block" parameter. Return - bool. Now static. - (ada_read_var_value): Update and simplify. - * ada-exp.y (write_var_or_type): Remove old code. - -2019-05-28 Alan Hayward <alan.hayward@arm.com> - - PR gdb/25010 - * event-top.c: Remove include comment. - * inflow.c (class scoped_ignore_sigttou): Move from here... - * inflow.h (class scoped_ignore_sigttou): ...to here. - * ser-unix.c (hardwire_drain_output): Block SIGTTOU during drain. - * top.c: Remove include comment. +2020-04-08 Tom Tromey <tromey@adacore.com> -2019-05-27 Tom Tromey <tom@tromey.com> + * windows-nat.c (windows_continue): Use matching_pending_stop and + continue_last_debug_event. + * nat/windows-nat.h (matching_pending_stop) + (continue_last_debug_event): Declare. + * nat/windows-nat.c (DEBUG_EVENTS): New define. + (matching_pending_stop, continue_last_debug_event): New + functions. - * NEWS: Fix typo. +2020-04-08 Tom Tromey <tromey@adacore.com> -2019-05-22 Tom Tromey <tromey@adacore.com> + * windows-nat.c (MS_VC_EXCEPTION): Move to nat/windows-nat.c. + (handle_exception_result): Move to nat/windows-nat.h. + (DEBUG_EXCEPTION_SIMPLE): Remove. + (windows_nat::handle_ms_vc_exception): New function. + (handle_exception): Move to nat/windows-nat.c. + (get_windows_debug_event): Update. + (STATUS_WX86_BREAKPOINT, STATUS_WX86_SINGLE_STEP): Move to + nat/windows-nat.c. + * nat/windows-nat.h (handle_ms_vc_exception): Declare. + (handle_exception_result): Move from windows-nat.c. + (handle_exception): Declare. + * nat/windows-nat.c (MS_VC_EXCEPTION, handle_exception) + (STATUS_WX86_SINGLE_STEP, STATUS_WX86_BREAKPOINT): Move from + windows-nat.c. + +2020-04-08 Tom Tromey <tromey@adacore.com> + + * windows-nat.c (exception_count, event_count): Remove. + (handle_exception, get_windows_debug_event) + (do_initial_windows_stuff): Update. + +2020-04-08 Tom Tromey <tromey@adacore.com> + + * windows-nat.c (windows_nat::handle_load_dll) + (windows_nat::handle_unload_dll): Rename. No longer static. + * nat/windows-nat.h (handle_load_dll, handle_unload_dll): + Declare. - * target.c (target_follow_exec): Constify parameter. - * target-delegates.c: Rebuild. - * remote.c (remote_target::follow_exec): Constify parameter. - * infrun.c (follow_exec): Constify parameter. - * target.h (struct target_ops) <follow_exec>: Constify parameter. - (target_follow_exec): Likewise. +2020-04-08 Tom Tromey <tromey@adacore.com> -2019-05-22 Alan Hayward <alan.hayward@arm.com> + * complaints.h (stop_whining): Declare at top-level. + (complaint): Don't declare stop_whining. - * aarch64-tdep.c (aarch64_execute_dwarf_cfa_vendor_op): Treat - DW_CFA_AARCH64_negate_ra_state as nop on non pauth targets. +2020-04-08 Tom Tromey <tromey@adacore.com> -2019-05-22 Alan Hayward <alan.hayward@arm.com> + * windows-nat.c (windows_nat::handle_output_debug_string): + Rename. No longer static. + * nat/windows-nat.h (handle_output_debug_string): Declare. + +2020-04-08 Tom Tromey <tromey@adacore.com> + + * windows-nat.c (current_process_handle, current_process_id) + (main_thread_id, last_sig, current_event, last_wait_event) + (current_windows_thread, desired_stop_thread_id, pending_stops) + (struct pending_stop, siginfo_er): Move to nat/windows-nat.c. + (display_selectors, fake_create_process) + (get_windows_debug_event): Update. + * nat/windows-nat.h (current_process_handle, current_process_id) + (main_thread_id, last_sig, current_event, last_wait_event) + (current_windows_thread, desired_stop_thread_id, pending_stops) + (struct pending_stop, siginfo_er): Move from windows-nat.c. + * nat/windows-nat.c (current_process_handle, current_process_id) + (main_thread_id, last_sig, current_event, last_wait_event) + (current_windows_thread, desired_stop_thread_id, pending_stops) + (siginfo_er): New globals. Move from windows-nat.c. + +2020-04-08 Tom Tromey <tromey@adacore.com> + + * windows-nat.c (get_image_name): Move to nat/windows-nat.c. + (handle_load_dll): Update. + * nat/windows-nat.c (get_image_name): Move from windows-nat.c. + +2020-04-08 Tom Tromey <tromey@adacore.com> + + * windows-nat.c (enum thread_disposition_type): Move to + nat/windows-nat.h. + (windows_nat::thread_rec): Rename from thread_rec. No longer + static. + (windows_add_thread, windows_nat_target::fetch_registers) + (windows_nat_target::store_registers, handle_exception) + (windows_nat_target::resume, get_windows_debug_event) + (windows_nat_target::get_tib_address) + (windows_nat_target::thread_name) + (windows_nat_target::thread_alive): Update. + * nat/windows-nat.h (enum thread_disposition_type): Move from + windows-nat.c. + (thread_rec): Declare. + +2020-04-08 Tom Tromey <tromey@adacore.com> + + * windows-nat.c: Add "using namespace". + * nat/windows-nat.h: Wrap contents in windows_nat namespace. + * nat/windows-nat.c: Wrap contents in windows_nat namespace. - * NEWS: Add debugredirect and testsuite sections. +2020-04-08 Tom Tromey <tromey@adacore.com> -2019-05-22 Simon Cook <simon.cook@embecosm.com> + * nat/windows-nat.h (struct windows_thread_info): Declare + destructor. + * nat/windows-nat.c (~windows_thread_info): New. - * riscv-tdep.c (riscv_gdbarch_init): Support determining flen from - target descriptions using exclusively floating point register name - aliases. +2020-04-08 Tom Tromey <tromey@adacore.com> -2019-05-21 Andrew Burgess <andrew.burgess@embecosm.com> + PR gdb/22992 + * windows-nat.c (current_event): Update comment. + (last_wait_event, desired_stop_thread_id): New globals. + (struct pending_stop): New. + (pending_stops): New global. + (windows_nat_target) <stopped_by_sw_breakpoint> + <supports_stopped_by_sw_breakpoint>: New methods. + (windows_fetch_one_register): Add assertions. Adjust PC. + (windows_continue): Handle pending stops. Suspend other threads + when stepping. Use last_wait_event + (wait_for_debug_event): New function. + (get_windows_debug_event): Use wait_for_debug_event. Handle + pending stops. Queue spurious stops. + (windows_nat_target::wait): Set stopped_at_software_breakpoint. + (windows_nat_target::kill): Use wait_for_debug_event. + * nat/windows-nat.h (struct windows_thread_info) + <stopped_at_software_breakpoint>: New field. + * nat/windows-nat.c (windows_thread_info::resume): Clear + stopped_at_software_breakpoint. + +2020-04-08 Tom Tromey <tromey@adacore.com> + + * windows-nat.c (enum thread_disposition_type): New. + (thread_rec): Replace "get_context" parameter with "disposition"; + change type. + (windows_add_thread, windows_nat_target::fetch_registers) + (windows_nat_target::store_registers, handle_exception) + (windows_nat_target::resume, get_windows_debug_event) + (windows_nat_target::get_tib_address) + (windows_nat_target::thread_name) + (windows_nat_target::thread_alive): Update. + +2020-04-08 Tom Tromey <tromey@adacore.com> + + * windows-nat.c (thread_rec): Use windows_thread_info::suspend. + (windows_continue): Use windows_continue::resume. + * nat/windows-nat.h (struct windows_thread_info) <suspend, + resume>: Declare new methods. + * nat/windows-nat.c: New file. + * configure.nat (NATDEPFILES): Add nat/windows-nat.o when needed. + +2020-04-08 Tom Tromey <tromey@adacore.com> + + * windows-nat.c (windows_add_thread, windows_delete_thread) + (windows_nat_target::fetch_registers) + (windows_nat_target::store_registers, fake_create_process) + (windows_nat_target::resume, windows_nat_target::resume) + (get_windows_debug_event, windows_nat_target::wait) + (windows_nat_target::pid_to_str) + (windows_nat_target::get_tib_address) + (windows_nat_target::get_ada_task_ptid) + (windows_nat_target::thread_name) + (windows_nat_target::thread_alive): Use lwp, not tid. + +2020-04-08 Tom Tromey <tromey@adacore.com> + + * windows-nat.c (handle_exception) + (windows_nat_target::thread_name): Update. + * nat/windows-nat.h (windows_thread_info): Remove destructor. + <name>: Now unique_xmalloc_ptr. + +2020-04-08 Tom Tromey <tromey@adacore.com> + + * windows-nat.c (thread_rec) + (windows_nat_target::fetch_registers): Update. + * nat/windows-nat.h (struct windows_thread_info) <suspended>: + Update comment. + <debug_registers_changed, reload_context>: Now bool. + +2020-04-08 Tom Tromey <tromey@adacore.com> + + * windows-nat.c (windows_add_thread): Use new. + (windows_init_thread_list, windows_delete_thread): Use delete. + (get_windows_debug_event): Update. + * nat/windows-nat.h (struct windows_thread_info): Add constructor, + destructor, and initializers. + +2020-04-08 Tom Tromey <tromey@adacore.com> + + * windows-nat.c (struct windows_thread_info): Remove. + * nat/windows-nat.h: New file. + +2020-04-08 Tom Tromey <tromey@adacore.com> + + * windows-nat.c (struct windows_thread_info) <tid>: Rename from "id". + (thread_rec, windows_add_thread, windows_delete_thread) + (windows_continue): Update. + +2020-04-08 Tom Tromey <tromey@adacore.com> + + * windows-nat.c (struct windows_thread_info): Remove typedef. + (thread_head): Remove. + (thread_list): New global. + (thread_rec, windows_add_thread, windows_init_thread_list) + (windows_delete_thread, windows_continue): Update. + +2020-04-08 Simon Marchi <simon.marchi@polymtl.ca> + + * windows-tdep.h (windows_init_abi): Add comment. + (cygwin_init_abi): New declaration. + * windows-tdep.c: Split signal enumeration in two, one for + Windows and one for Cygwin. + (windows_gdb_signal_to_target): Only deal with signal of the + Windows OS ABI. + (cygwin_gdb_signal_to_target): New function. + (windows_init_abi): Rename to windows_init_abi_common, don't set + gdb_signal_to_target gdbarch method. Add new new function with + this name. + (cygwin_init_abi): New function. + * amd64-windows-tdep.c (amd64_windows_init_abi_common): Add + comment. Don't call windows_init_abi. + (amd64_windows_init_abi): Add comment, call windows_init_abi. + (amd64_cygwin_init_abi): Add comment, call cygwin_init_abi. + * i386-windows-tdep.c (i386_windows_init_abi): Rename to + i386_windows_init_abi_common, don't call windows_init_abi. Add + a new function of this name. + (i386_cygwin_init_abi): New function. + (_initialize_i386_windows_tdep): Bind i386_cygwin_init_abi to + OS ABI Cygwin. + +2020-04-08 Simon Marchi <simon.marchi@polymtl.ca> + + * dwarf2/read.c (read_gdb_index_from_buffer): Remove objfile + parameter.c. + (dwarf2_read_gdb_index): Update. + +2020-04-07 Kamil Rytarowski <n54@gmx.com> + + * nbsd-tdep.c: Include "objfiles.h". + (nbsd_skip_solib_resolver): New. + (nbsd_init_abi): Call set_gdbarch_skip_solib_resolver(). + +2020-04-07 Nitika Achra <Nitika.Achra@amd.com> + + * dwarf2/loc.c (loclist_describe_location): Call the function decode_debug_loclists_ + addresses if DWARF version is 5 or more because DW_LLE_start* or DW_LLE_offset_pair + with DW_LLE_base_addressx are being emitted in DWARFv5. + Add the newly added kind DW_LOC_OFFSET_PAIR also. + The length of location description is an unsigned ULEB integer in DWARFv5 instead of + unsigned integer. + +2020-04-07 Nitika Achra <Nitika.Achra@amd.com> + + * dwarf2/loc.c (enum debug_loc_kind): Add a new kind DEBUG_LOC_OFFSET_PAIR. + (dwarf2_find_location_expression): Call the function decode_debug_loclists_ + addresses if DWARF version is 5 or more. DW_LLE_start* or DW_LLE_offset_pair + with DW_LLE_base_addressx are being emitted in DWARFv5 instead of DW_LLE_GNU*. + Add applicable base address if the entry is DW_LLE_offset_pair from DWO. + (decode_debug_loclists_addresses): Return DEBUG_LOC_OFFSET_PAIR instead of + DEBUG_LOC_START_END in case of DW_LLE_offset_pair. + + +2020-04-07 Nitika Achra <Nitika.Achra@amd.com> + + * dwarf2/read.c (cu_debug_loc_section): Added the declaration for the function. + (read_loclist_index): New function definition. + (lookup_loclist_base): New function definition. + (read_loclist_header): New function definition. + (dwarf2_cu): Add loclist_base and loclist_header field. + (dwarf2_locate_dwo_sections): Handle .debug_loclists.dwo section. + (read_full_die_1): Read the value of DW_AT_loclists_base. + (read_attribute_reprocess): Handle DW_FORM_loclistx. + (read_attribute_value): Handle DW_FORM_loclistx. + (skip_one_die): Handle DW_FORM_loclistx. + (loclist_header): New structure declaration. + * dwarf2/attribute.c (form_is_section_offset): Handle DW_FORM_loclistx. + +2020-04-07 Simon Marchi <simon.marchi@polymtl.ca> + + * dwarf2/read.h (struct dwarf2_psymtab): Remove two-parameters + constructor. Remove `addr` parameter from other constructor and + add `per_cu` parameter. + * dwarf2/read.c (create_partial_symtab): Update. + +2020-04-07 Tom de Vries <tdevries@suse.de> + + PR symtab/25796 + * dwarf2/read.c (can_have_DW_AT_const_value_p): New function. + (partial_die_info::fixup): Inherit has_const_value. + +2020-04-07 Tom de Vries <tdevries@suse.de> + + * psymtab.c (maintenance_check_psymtabs): Skip static LOC_BLOCK + symbols without address. + +2020-04-06 Kamil Rytarowski <n54@gmx.com> + + * nbsd-nat.h (struct thread_info): Add forward declaration. + (nbsd_nat_target::thread_alive): Add. + (nbsd_nat_target::thread_name): Likewise. + (nbsd_nat_target::update_thread_list): Likewise. + (update_thread_list::post_attach): Likewise. + (post_attach::pid_to_str): Likewise. + * nbsd-nat.c: Include "gdbthread.h" and "inferior.h". + (nbsd_thread_lister): Add. + (nbsd_nat_target::thread_alive): Likewise. + (nbsd_nat_target::thread_name): Likewise. + (nbsd_add_threads): Likewise. + (update_thread_list::post_attach): Likewise. + (nbsd_nat_target::update_thread_list): Likewise. + (post_attach::pid_to_str): Likewise. + +2020-04-06 Tom Tromey <tromey@adacore.com> + + * ada-valprint.c (print_variant_part): Extract the variant field. + (print_field_values): Use the field as the outer value when + recursing. + +2020-04-06 Tom Tromey <tromey@adacore.com> + + * sh-nbsd-tdep.c: Include nbsd-tdep.h. + * ppc-nbsd-tdep.c: Include nbsd-tdep.h. + * mips-nbsd-tdep.c (mipsnbsd_init_abi): Add missing ";". + * arm-nbsd-tdep.c: Include nbsd-tdep.h. + * hppa-nbsd-tdep.c: Include nbsd-tdep.h. + +2020-04-06 Tom Tromey <tromey@adacore.com> + + * dwarf2/read.c (read_base_type) <DW_ATE_complex_float>: Handle + TYPE_CODE_ERROR. + +2020-04-06 Kamil Rytarowski <n54@gmx.com> + + * nbsd-tdep.c: Include "gdbarch.h". + Define enum with NetBSD signal numbers. + (nbsd_gdb_signal_from_target, nbsd_gdb_signal_to_target): New. + * alpha-nbsd-tdep.c (alphanbsd_init_abi): Call nbsd_init_abi(). + * amd64-nbsd-tdep.c (amd64nbsd_init_abi): Likewise. + * arm-nbsd-tdep.c (arm_netbsd_elf_init_abi): Likewise. + * hppa-nbsd-tdep.c (hppanbsd_init_abi): Likewise. + * i386-nbsd-tdep.c (i386nbsd_init_abi): Likewise. + * mips-nbsd-tdep.c (nbsd_init_abi): Likewise. + * ppc-nbsd-tdep.c (ppcnbsd_init_abi): Likewise. + * sh-nbsd-tdep.c (shnbsd_init_abi): Likewise. + * sparc-nbsd-tdep.c (sparc32nbsd_init_abi): Likewise. + * sparc64-nbsd-tdep.c (sparc64nbsd_init_abi): Likewise. + * vax-nbsd-tdep.c (vaxnbsd_elf_init_abi): Likewise. + +2020-04-03 Hannes Domani <ssbssa@yahoo.de> + + PR gdb/25325 + * dwarf2/read.c (read_enumeration_type): Fix typed enum attributes. + +2020-04-03 Tom Tromey <tromey@adacore.com> + + * dwarf2/loc.c (disassemble_dwarf_expression) <DW_OP_const_type>: + Read constant block. + +2020-04-02 Simon Marchi <simon.marchi@polymtl.ca> + + * gdb_bfd.h: Include gdbsupport/byte-vector.h. + (gdb_bfd_get_full_section_contents): New declaration. + * gdb_bfd.c (gdb_bfd_get_full_section_contents): New function. + * windows-tdep.c (is_linked_with_cygwin_dll): Use + gdb_bfd_get_full_section_contents. + +2020-04-02 Simon Marchi <simon.marchi@polymtl.ca> + + * exec.c (build_section_table): Replace internal_error with + gdb_assert. + (section_table_xfer_memory_partial): Likewise. + * mdebugread.c (parse_partial_symbols): Likewise. + * psymtab.c (lookup_partial_symbol): Likewise. + * utils.c (wrap_here): Likewise. + +2020-04-02 Tom Tromey <tromey@adacore.com> + + * f-lang.c (build_fortran_types): Use arch_type to initialize + builtin_complex_s32 in the TYPE_CODE_ERROR case. - PR gdb/18644: - * f-lang.c (build_fortran_types): Handle the case where - gdbarch_floatformat_for_type returns a nullptr. +2020-04-02 Tom Tromey <tromey@adacore.com> -2019-05-21 Tom de Vries <tdevries@suse.de> + * dwarf2/read.c (partial_die_info::read): Do not create a vector + of attributes. - PR cli/24587 - * cli/cli-cmds.c (complete_command): Fix use of unitialized variable. +2020-04-02 Andrew Burgess <andrew.burgess@embecosm.com> + Bernd Edlinger <bernd.edlinger@hotmail.de> + Tom Tromey <tromey@adacore.com> -2019-05-18 Andrew Burgess <andrew.burgess@embecosm.com> + * buildsym.c (buildsym_compunit::record_line): Remove + deduplication code. - PR gdb/18644: - * f-lang.c (build_fortran_types): Use floatformats_ia64_quad for - 16-byte floats. - * i386-tdep.c (i386_floatformat_for_type): Use - floatformats_ia64_quad for the 16-byte floating point component - within a fortran 32-byte complex number. +2020-04-02 Tom de Vries <tdevries@suse.de> -2019-05-18 Andrew Burgess <andrew.burgess@embecosm.com> + PR ada/24671 + * dwarf2/read.c (dw2_map_matching_symbols): Handle -readnow. - * dwarf2read.c (struct cu_partial_die_info): Add constructor, - delete default constructor. - (find_partial_die): Update to return const struct. - (partial_die_parent_scope): Move variable declaration into scope - of its use and change its type to auto. - (guess_partial_die_structure_name): Likewise. - (partial_die_info::fixup): Likewise. +2020-04-02 Tom de Vries <tdevries@suse.de> -2019-05-17 Tom Tromey <tromey@adacore.com> + * dwarf2/read.c (dwarf2_gdb_index_functions, + dwarf2_debug_names_functions): Init lookup_global_symbol_language with + NULL. + * psymtab.c (psym_lookup_global_symbol_language): New function. + (psym_functions): Init psym_lookup_global_symbol_language with + psym_lookup_global_symbol_language. + * symfile-debug.c (debug_sym_quick_functions): Init + lookup_global_symbol_language with NULL. + * symfile.c (set_initial_language): Remove fixme comment. + * symfile.h (struct quick_symbol_functions): Add + lookup_global_symbol_language. + * symtab.c (find_quick_global_symbol_language): New function. + (find_main_name): Use find_quick_global_symbol_language. - * source.c (find_and_open_source): Remove cast. +2020-04-01 Simon Marchi <simon.marchi@polymtl.ca> -2019-05-17 Tom Tromey <tromey@adacore.com> + * windows-tdep.c (is_linked_with_cygwin_dll): Fix style. - * annotate.c (annotate_source): Make "filename" const. - * annotate.h (annotate_source): Use const. +2020-04-01 Bernd Edlinger <bernd.edlinger@hotmail.de> -2019-05-17 Alan Hayward <alan.hayward@arm.com> + * buildsym.c (record_line): Fix undefined behavior and preserve + lines at eof. - * disasm.c (set_disassembler_options): Send errors to stderr. +2020-04-01 Bernd Edlinger <bernd.edlinger@hotmail.de> -2019-05-17 Alan Hayward <alan.hayward@arm.com> + * buildsym.c (record_line): Fix the resizing condition. - * cli/cli-interp.c (struct saved_output_files): Add saved entry. - (cli_interp_base::set_logging): Check debug_redirect. - * cli/cli-interp.h (set_logging): Add debug_redirect parameter. - * cli/cli-logging.c (debug_redirect): Add static variable. - (pop_output_files): Add default param. - (handle_redirections): Print debug setting. - (show_logging_command): Likewise. - (_initialize_cli_logging): Add debugredirect command. - * interps.c (current_interp_set_logging): Add debug_redirect - parameter. - * interps.h (set_logging): Add debug_redirect parameter. - (current_interp_set_logging): Likewise. - * mi/mi-common.h: Likewise. - * mi/mi-interp.c (mi_interp::set_logging): Likewise. +2020-04-01 Tom Tromey <tom@tromey.com> -2019-05-17 Alan Hayward <alan.hayward@arm.com> - Tom Tromey <tromey@adacore.com> + * value.h (value_literal_complex): Add comment. + * valops.c (value_literal_complex): Refer to value.h. - * cli/cli-interp.c (cli_interp_base::set_logging): Create tee_file - directly. - * cli/cli-interp.h (make_logging_output): Remove declaration. - * cli/cli-logging.c (make_logging_output): Remove function. - * mi/mi-interp.c (mi_interp::set_logging): Create tee_file - directly. - * ui-file.c (tee_file::tee_file): Remove bools. - (tee_file::~tee_file): Remove deletes. - * ui-file.h (tee_file): Remove bools. - -2019-01-28 Jan Vrany <jan.vrany@fit.cvut.cz> - - * mi/mi-cmds.h (mi_cmd_complete): New function. - * mi/mi-main.c (mi_cmd_complete): Likewise. - * mi/mi-cmds.c: Define new MI command -complete. - * NEWS: Mention new -complete command. - -2019-01-24 Jan Vrany <jan.vrany@fit.cvut.cz> - - * completer.h (complete): New function. - * completer.c (complete): Likewise. - * cli/cli-cmds.c: (complete_command): Update to use new complete() - function defined in completer.h. +2020-04-01 Tom Tromey <tom@tromey.com> -2019-05-17 Jan Vrany <jan.vrany@fit.cvut.cz> + * c-exp.y (FLOAT_KEYWORD, COMPLEX): New tokens. + (scalar_type): New rule, from typebase. + (typebase): Use scalar_type. Recognize complex types. + (field_name): Handle FLOAT_KEYWORD. + (ident_tokens): Add _Complex and __complex__. - * MAINTAINERS (Write After Approval): Add myself. +2020-04-01 Tom Tromey <tom@tromey.com> -2019-05-17 Tom de Vries <tdevries@suse.de> + PR exp/25299: + * valarith.c (promotion_type, complex_binop): New functions. + (scalar_binop): Handle complex numbers. Use promotion_type. + (value_pos, value_neg, value_complement): Handle complex numbers. - PR gdb/24094 - * dwarf2read.c (struct cu_partial_die_info): New struct. - (find_partial_die): Return cu_partial_die_info. - (partial_die_parent_scope, guess_partial_die_structure_name) - (partial_die_info::fixup): Handle new return type of find_partial_die. - -2019-05-16 Sergio Durigan Junior <sergiodj@redhat.com> - - PR breakpoints/24541 - * stap-probe.c (stap_parse_register_operand): Make "regname" an - "std::string", simplifying the algorithm. - -2019-05-16 Sergio Durigan Junior <sergiodj@redhat.com> - - * stap-probe.c (handle_stap_probe): Fix complaint formatting. - (stap_static_probe_ops::get_probes): Likewise. - -2019-05-16 Sergio Durigan Junior <sergiodj@redhat.com> - - * stap-probe.c (stap_parse_register_operand): Make "if (*p->arg == - '-')" and "else if". - (stap_parse_single_operand): Join checks for - "gdbarch_stap_parse_special_token_p" and - "gdbarch_stap_parse_special_token" in the same "if" statement. - Invert check when verifying for operation on register - displacement. - -2019-05-16 Sergio Durigan Junior <sergiodj@redhat.com> - - * stap-probe.c (stap_get_opcode): Update comment. - (stap_get_expected_argument_type): Likewise. - (handle_stap_probe): Likewise. - -2019-05-16 Sergio Durigan Junior <sergiodj@redhat.com> - - * i386-tdep.c (i386_stap_parse_special_token_triplet): Change - return type to 'bool'. Adjust comment. Use 'bool' when - appropriate. - (i386_stap_parse_special_token_three_arg_disp): Likewise. - * stap-probe.c (stap_parse_argument_1): Likewise. - (stap_is_operator): Likewise. - (stap_is_generic_prefix): Likewise. - (stap_is_register_prefix): Likewise. - (stap_is_register_indirection_prefix): Likewise. - (stap_is_integer_prefix): Likewise. - (stap_generic_check_suffix): Likewise. - (stap_check_integer_suffix): Likewise. - (stap_check_register_suffix): Likewise. - (stap_check_register_indirection_suffix): Likewise. - (stap_parse_register_operand): Likewise. - (stap_parse_single_operand): Likewise. - (stap_parse_argument_1): Likewise. - (stap_probe::get_argument_count): Likewise. - (stap_is_operator): Likewise. - -2019-05-16 Tom Tromey <tromey@adacore.com> - - * darwin-nat.c (thread_info_from_private_thread_info): Add struct - keyword to foreach. - -2019-05-15 Simon Marchi <simon.marchi@efficios.com> - - * linux-thread-db.c (try_thread_db_load_1): Change return type - to bool. - (try_thread_db_load): Likewise. - (try_thread_db_load_from_pdir_1): Likewise. - (try_thread_db_load_from_pdir): Likewise. - (try_thread_db_load_from_sdir): Likewise. - (try_thread_db_load_from_dir): Likewise. - (thread_db_load_search): Likewise. - (has_libpthread): Likewise. - (thread_db_load): Likewise. - -2019-05-15 Sergio Durigan Junior <sergiodj@redhat.com> - - Ref.: https://bugzilla.redhat.com/show_bug.cgi?id=1708192 - * dwarf2read.c (parse_macro_definition): Check whether 'body' is - NULL, and complain/return if that's the case. - -2019-05-15 John Darrington <john@darrington.wattle.id.au> - - * s12z-tdep.c (push_pull_get_stack_adjustment): New function. - (advance, posn, abstract_read_memory): New functions. - [struct mem_read_abstraction]: New struct. - (s12z_frame_cache): Use opcodes API to interpret stack frame code. - -2019-05-14 Tom Tromey <tromey@adacore.com> - - * ada-lang.c (coerce_unspec_val_to_type): Only set address when - value is not lval_memory. - -2019-05-14 Tom Tromey <tromey@adacore.com> - - * solib.c (info_sharedlibrary_command): Style the file name. - -2019-05-14 Alan Hayward <alan.hayward@arm.com> - - * aarch64-tdep.c (aarch64_vnh_type): Add half view. - (aarch64_vnv_type): Likewise. - * target-descriptions.c (make_gdb_type): Add TDESC_TYPE_IEEE_HALF. - * common/tdesc.c: Likewise. - * common/tdesc.h (enum tdesc_type_kind): Likewise. - * features/aarch64-fpu.c (create_feature_aarch64_fpu): Regenerate. - * features/aarch64-fpu.xml: Add ieee half view. - * features/aarch64-sve.c (create_feature_aarch64_fpu): Likewise. - * gdbtypes.c (gdbtypes_post_init): Add builtin_half - * gdbtypes.h (struct builtin_type): Likewise. - (struct objfile_type): Likewise. - -2019-05-12 Paul Naert <paul.naert@polymtl.ca> - - * language.c (language_sniff_from_mangled_name): Fix "langauge" - typo. - * location.h (string_to_event_location): Likewise. - -2019-05-11 Joel Brobecker <brobecker@adacore.com> - - GDB 8.3 released. - -2019-05-10 Simon Marchi <simon.marchi@efficios.com> - - * breakpoint.h (fix_multi_location_breakpoint_output_globally): - New variable declaration. - * breakpoint.c (fix_multi_location_breakpoint_output_globally): - New variable. - (print_one_breakpoint): Use ui_out::test_flags and new global - variable to compute use_fixed_output. - * mi/mi-main.h (mi_multi_location_breakpoint_output_fixed): - Remove. - * mi/mi-main.c (fix_multi_location_breakpoint_output): Remove. - (mi_multi_location_breakpoint_output_fixed): Remove. - (mi_cmd_fix_multi_location_breakpoint_output): Adjust to set the - new variable. - * mi/mi-out.c (mi_ui_out::mi_ui_out): Set - fix_multi_location_breakpoint_output flag if version >= 3. - * ui-out.h (enum ui_out_flag) - <fix_multi_location_breakpoint_output>: New enumerator. +2020-04-01 Tom Tromey <tom@tromey.com> -2019-05-10 Simon Marchi <simon.marchi@efficios.com> + * c-exp.y (COMPLEX_INT, COMPLEX_FLOAT): New tokens. + (exp) <COMPLEX_INT, COMPLEX_FLOAT>: New rules. + (parse_number): Handle complex numbers. - * contrib/cc-with-tweaks.sh: Validate dwz's work. +2020-04-01 Tom Tromey <tom@tromey.com> -2019-05-10 Tom Tromey <tromey@adacore.com> + * c-valprint.c (c_decorations): Change complex suffix to "i". - * ada-lang.c (catch_ada_completer): New function. - (_initialize_ada_language): Use it. +2020-04-01 Tom Tromey <tom@tromey.com> -2019-05-10 Tom Tromey <tromey@adacore.com> + * valprint.c (generic_value_print_complex): Use accessors. + * value.h (value_real_part, value_imaginary_part): Declare. + * valops.c (value_real_part, value_imaginary_part): New + functions. + * value.c (creal_internal_fn, cimag_internal_fn): Use accessors. - * thread.c (print_thread_info): Make "requested_threads" const. - * gdbthread.h (print_thread_info): Make "requested_threads" - const. - * ada-tasks.c (print_ada_task_info): Make "taskno_str" const. - * ada-lang.h (print_ada_task_info): Make "taskno_str" const. +2020-04-01 Tom Tromey <tom@tromey.com> -2019-05-08 Tom Tromey <tom@tromey.com> + * stabsread.c (rs6000_builtin_type, read_sun_floating_type) + (read_range_type): Update. + * mdebugread.c (basic_type): Update. + * go-lang.c (build_go_types): Use init_complex_type. + * gdbtypes.h (struct main_type) <complex_type>: New member. + (init_complex_type): Update. + (arch_complex_type): Don't declare. + * gdbtypes.c (init_complex_type): Remove "objfile" parameter. + Make name if none given. Use alloc_type_copy. Look for cached + complex type. + (arch_complex_type): Remove. + (gdbtypes_post_init): Use init_complex_type. + * f-lang.c (build_fortran_types): Use init_complex_type. + * dwarf2/read.c (read_base_type): Update. + * d-lang.c (build_d_types): Use init_complex_type. + * ctfread.c (read_base_type): Update. + +2020-04-01 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + * infrun.c (stop_all_threads): Update assertion, plus when + stopping threads, take into account that we might be trying + to stop an all-stop target. + (stop_waiting): Call 'stop_all_threads' if there exists a + non-stop target. + +2020-04-01 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + * target.h (exists_non_stop_target): New function declaration. + * target.c (exists_non_stop_target): New function. + +2020-04-01 Hannes Domani <ssbssa@yahoo.de> + + PR gdb/24789 + * eval.c (is_integral_or_integral_reference): New function. + (evaluate_subexp_standard): Allow integer references in + pointer arithmetic. + +2020-04-01 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + * remote.c (remote_target::remote_parse_stop_reply): Remove the + check for no ptid in the stop reply when the target is non-stop. + +2020-04-01 Tom Tromey <tromey@adacore.com> + + * symtab.h (class lookup_name_info) <lookup_name_info>: Change + "name" parameter to rvalue reference. Initialize m_name_holder. + <lookup_name_info>: New overloads. + <name>: Return gdb::string_view. + <c_str>: New method. + <make_ignore_params>: Update. + <search_name_hash>: Update. + <language_lookup_name>: Return const char *. + <m_name>: Change type. + * symtab.c (demangle_for_lookup_info::demangle_for_lookup_info) + (demangle_for_lookup_info::demangle_for_lookup_info): Update. + (lookup_name_info::match_any): Update. + * psymtab.c (match_partial_symbol, lookup_partial_symbol): + Update. + * minsyms.c (linkage_name_str): Update. + * language.c (default_symbol_name_matcher): Update. + * dwarf2/read.c (mapped_index_base::find_name_components_bounds): + Update. + * ada-lang.c (ada_fold_name): Change parameter to string_view. + (ada_lookup_name_info::ada_lookup_name_info): Update. + (literal_symbol_name_matcher): Update. + +2020-04-01 Tom Tromey <tromey@adacore.com> + + * psymtab.c (psymtab_search_name): Remove function. + (psym_lookup_symbol): Create search name and lookup name here. + (lookup_partial_symbol): Remove "name" parameter; add + lookup_name. + (psym_expand_symtabs_for_function): Update. + +2020-03-31 Joel Jones <joelkevinjones@gmail.com> + + PR tui/25597: + * python/py-tui.c: Include gdb_curses.h inside of #ifdef TUI. + +2020-03-31 Tom Tromey <tromey@adacore.com> + + * dwarf2/abbrev.c (abbrev_table::read): Conditionally call + memcpy. + +2020-03-30 Nelson Chu <nelson.chu@sifive.com> + + * features/riscv/32bit-csr.xml: Regenerated. + * features/riscv/64bit-csr.xml: Regenerated. + +2020-03-30 Tom Tromey <tromey@adacore.com> + + * ada-valprint.c (print_variant_part): Update. + * ada-lang.h (ada_which_variant_applies): Update. + * ada-lang.c (ada_which_variant_applies): Remove outer_type and + outer_valaddr parameters; replace with "outer" value parameter. + (to_fixed_variant_branch_type): Update. + +2020-03-30 Pedro Franco de Carvalho <pedromfc@linux.ibm.com> + + * ppc-linux-nat.c: Include <algorithm>, <unordered_map>, and + <list>. Remove inclusion of observable.h. + (PPC_DEBUG_CURRENT_VERSION): Move up define. + (struct arch_lwp_info): New struct. + (class ppc_linux_dreg_interface): New class. + (struct ppc_linux_process_info): New struct. + (struct ppc_linux_nat_target) <low_delete_thread, low_new_fork> + <low_new_clone, low_forget_process, low_prepare_to_resume> + <copy_thread_dreg_state, mark_thread_stale> + <mark_debug_registers_changed, register_hw_breakpoint> + <clear_hw_breakpoint, register_wp, clear_wp> + <can_use_watchpoint_cond_accel, calculate_dvc, check_condition> + <num_memory_accesses, get_trigger_type> + <create_watchpoint_request, hwdebug_point_cmp> + <init_arch_lwp_info, get_arch_lwp_info> + <low_stopped_by_watchpoint, low_stopped_data_address>: Declare as + methods. + <struct ptid_hash>: New inner struct. + <m_dreg_interface, m_process_info, m_installed_hw_bps>: Declare + members. + (saved_dabr_value, hwdebug_info, max_slots_number) + (struct hw_break_tuple, struct thread_points, ppc_threads) + (have_ptrace_hwdebug_interface) + (hwdebug_find_thread_points_by_tid) + (hwdebug_insert_point, hwdebug_remove_point): Remove. + (ppc_linux_nat_target::can_use_hw_breakpoint): Use + m_dreg_interface, remove call to PTRACE_SET_DEBUGREG. + (ppc_linux_nat_target::region_ok_for_hw_watchpoint): Add comment, + use m_dreg_interface. + (hwdebug_point_cmp): Change to... + (ppc_linux_nat_target::hwdebug_point_cmp): ...this method. Use + reference arguments instead of pointers. + (ppc_linux_nat_target::ranged_break_num_registers): Use + m_dreg_interface. + (ppc_linux_nat_target::insert_hw_breakpoint): Add comment, use + m_dreg_interface. Call register_hw_breakpoint. + (ppc_linux_nat_target::remove_hw_breakpoint): Add comment, use + m_dreg_interface. Call clear_hw_breakpoint. + (get_trigger_type): Change to... + (ppc_linux_nat_target::get_trigger_type): ...this method. Add + comment. + (ppc_linux_nat_target::insert_mask_watchpoint): Update comment, + use m_dreg_interface. Call register_hw_breakpoint. + (ppc_linux_nat_target::remove_mask_watchpoint): Update comment, + use m_dreg_interface. Call clear_hw_breakpoint. + (can_use_watchpoint_cond_accel): Change to... + (ppc_linux_nat_target::can_use_watchpoint_cond_accel): ...this + method. Update comment, use m_dreg_interface and + m_process_info. + (calculate_dvc): Change to... + (ppc_linux_nat_target::calculate_dvc): ...this method. Use + m_dreg_interface. + (num_memory_accesses): Change to... + (ppc_linux_nat_target::num_memory_accesses): ...this method. + (check_condition): Change to... + (ppc_linux_nat_target::check_condition): ...this method. + (ppc_linux_nat_target::can_accel_watchpoint_condition): Update + comment, use m_dreg_interface. + (create_watchpoint_request): Change to... + (ppc_linux_nat_target::create_watchpoint_request): ...this + method. Use m_dreg_interface. + (ppc_linux_nat_target::insert_watchpoint): Add comment, use + m_dreg_interface. Call register_hw_breakpoint or register_wp. + (ppc_linux_nat_target::remove_watchpoint): Add comment, use + m_dreg_interface. Call clear_hw_breakpoint or clear_wp. + (ppc_linux_nat_target::low_forget_process) + (ppc_linux_nat_target::low_new_fork) + (ppc_linux_nat_target::low_new_clone) + (ppc_linux_nat_target::low_delete_thread) + (ppc_linux_nat_target::low_prepare_to_resume): New methods. + (ppc_linux_nat_target::low_new_thread): Remove previous logic, + only call mark_thread_stale. + (ppc_linux_thread_exit): Remove. + (ppc_linux_nat_target::stopped_data_address): Change to... + (ppc_linux_nat_target::low_stopped_data_address): This. Add + comment, use m_dreg_interface and m_thread_hw_breakpoints. + (ppc_linux_nat_target::stopped_by_watchpoint): Change to... + (ppc_linux_nat_target::stopped_by_watchpoint): This. Add + comment. Call low_stopped_data_address. + (ppc_linux_nat_target::watchpoint_addr_within_range): Use + m_dreg_interface. + (ppc_linux_nat_target::masked_watch_num_registers): Use + m_dreg_interface. + (ppc_linux_nat_target::copy_thread_dreg_state) + (ppc_linux_nat_target::mark_thread_stale) + (ppc_linux_nat_target::mark_debug_registers_changed) + (ppc_linux_nat_target::register_hw_breakpoint) + (ppc_linux_nat_target::clear_hw_breakpoint) + (ppc_linux_nat_target::register_wp) + (ppc_linux_nat_target::clear_wp) + (ppc_linux_nat_target::init_arch_lwp_info) + (ppc_linux_nat_target::get_arch_lwp_info): New methods. + (_initialize_ppc_linux_nat): Remove observer callback. + +2020-03-30 Pedro Franco de Carvalho <pedromfc@linux.ibm.com> + + * ppc-linux-nat.c (ppc_linux_nat_target::store_registers) + (ppc_linux_nat_target::auxv_parse) + (ppc_linux_nat_target::read_description) + (supply_gregset, fill_gregset, supply_fpregset, fill_fpregset): + Move up. + +2020-03-30 Pedro Franco de Carvalho <pedromfc@linux.ibm.com> + + * linux-nat.h (low_new_clone): New method. + * linux-nat.c (linux_handle_extended_wait): Call low_new_clone. + +2020-03-29 Simon Marchi <simon.marchi@polymtl.ca> + + * dbxread.c (dbx_psymtab_to_symtab_1): Rename to... + (dbx_expand_psymtab): ... this. + (start_psymtab): Update. + * mdebugread.c (psymtab_to_symtab_1): Rename to... + (mdebug_expand_psymtab): ... this. + (parse_partial_symbols): Update. + (new_psymtab): Update. + * xcoffread.c (xcoff_psymtab_to_symtab_1): Rename to... + (xcoff_expand_psymtab): ... this. + (xcoff_start_psymtab): Update. + +2020-03-29 Simon Marchi <simon.marchi@polymtl.ca> + + * psympriv.h (partial_symtab) <read_dependencies>: Rename to... + <expand_dependencies>: ... this. + * psymtab.c (partial_symtab::read_dependencies): Rename to... + (partial_symtab::expand_dependencies): ... this. + * dwarf2/read.c (dwarf2_include_psymtab) <expand_psymtab>: + Update. + (dwarf2_psymtab::expand_psymtab): Update. + * dbxread.c (dbx_psymtab_to_symtab_1): Update. + * mdebugread.c (psymtab_to_symtab_1): Update. + * xcoffread.c (xcoff_psymtab_to_symtab_1): Update. - * gdbtypes.c (objfile_type_data): Change type. - (objfile_type, _initialize_gdbtypes): Update. +2020-03-29 Simon Marchi <simon.marchi@polymtl.ca> -2019-05-08 Tom Tromey <tom@tromey.com> + * psympriv.h (discard_psymtab): Remove. + * dbxread.c (dbx_end_psymtab): Update. + * xcoffread.c (xcoff_end_psymtab): Update. - * dwarf2-frame.c (dwarf2_frame_objfile_data): Change type. - (dwarf2_frame_find_fde, dwarf2_build_frame_info) - (_initialize_dwarf2_frame): Update. +2020-03-28 Tom Tromey <tom@tromey.com> -2019-05-08 Tom Tromey <tom@tromey.com> + * dwarf2/attribute.h (struct attribute) <form_is_constant>: Update + comment. - * objc-lang.c (objc_objfile_data): Change type. - (find_methods): Update. - (_initialize_objc_lang): Remove. +2020-03-28 Tom Tromey <tom@tromey.com> -2019-05-08 Tom Tromey <tom@tromey.com> + * dwarf2/read.c (read_attribute_reprocess): Fix formatting. - * stabsread.c (rs6000_builtin_type_data): Change type. - (rs6000_builtin_type, _initialize_stabsread): Update. +2020-03-27 Hannes Domani <ssbssa@yahoo.de> -2019-05-08 Tom Tromey <tom@tromey.com> + * windows-nat.c (windows_add_all_dlls): Fix system dll paths. - * mips-tdep.c (mips_pdr_data): Remove. - (_initialize_mips_tdep): Update. +2020-03-26 John Baldwin <jhb@FreeBSD.org> -2019-05-08 Tom Tromey <tom@tromey.com> + * fbsd-tdep.c (fbsd_print_auxv_entry): Handle AT_FREEBSD_BSDFLAGS. - * hppa-tdep.c (hppa_objfile_priv_data): Change type. - (hppa_init_objfile_priv_data, read_unwind_info) - (find_unwind_entry, _initialize_hppa_tdep): Update. +2020-03-26 Tom Tromey <tom@tromey.com> -2019-05-08 Tom Tromey <tom@tromey.com> + * dwarf2/read.c (handle_data_member_location, dwarf2_add_field) + (mark_common_block_symbol_computed, read_tag_string_type) + (attr_to_dynamic_prop, read_subrange_type): Update. + (dwarf2_get_ref_die_offset, dwarf2_get_attr_constant_value): Move + to be methods on struct attribute. + (skip_one_die, process_imported_unit_die, read_namespace_alias) + (read_call_site_scope, partial_die_info::read) + (partial_die_info::read, lookup_die_type, follow_die_ref): + Update. + * dwarf2/attribute.c (attribute::get_ref_die_offset): New method, + from dwarf2_get_ref_die_offset. + (attribute::constant_value): New method, from + dwarf2_get_attr_constant_value. + * dwarf2/attribute.h (struct attribute) <get_ref_die_offset>: + Declare method. + <constant_value>: New method. - * elfread.c (elf_objfile_gnu_ifunc_cache_data): Change type. - (elf_gnu_ifunc_record_cache): Update. Don't allocate hash table - on obstack. - (elf_gnu_ifunc_resolve_by_cache, _initialize_elfread): Update. +2020-03-26 Tom Tromey <tom@tromey.com> -2019-05-08 Tom Tromey <tom@tromey.com> + * dwarf2/read.c (dwarf_unit_type_name, dwarf_tag_name) + (dwarf_attr_name, dwarf_form_name, dwarf_bool_name) + (dwarf_type_encoding_name): Move to stringify.c. + * Makefile.in (COMMON_SFILES): Add dwarf2/stringify.c. + * dwarf2/stringify.c: New file. + * dwarf2/stringify.h: New file. - * mdebugread.c (basic_type_data): Change type. - (basic_type, _initialize_mdebugread): Update. +2020-03-26 Tom Tromey <tom@tromey.com> -2019-05-08 Tom Tromey <tom@tromey.com> + * dwarf2/die.h (struct die_info) <addr_base, ranges_base>: + Rewrite. - * common/gdb_unique_ptr.h (struct noop_deleter): New. +2020-03-26 Tom Tromey <tom@tromey.com> -2019-05-08 Tom Tromey <tom@tromey.com> + * dwarf2/die.h (struct die_info) <addr_base, ranges_base>: New + methods. + * dwarf2/read.c (lookup_addr_base): Move to die.h. + (lookup_ranges_base): Likewise. + (read_cutu_die_from_dwo, read_full_die_1): Update. + +2020-03-26 Tom Tromey <tom@tromey.com> + + * dwarf2/read.c (read_import_statement, read_file_scope) + (read_type_unit_scope, inherit_abstract_dies, read_func_scope) + (read_lexical_block_scope, read_call_site_scope) + (dwarf2_get_subprogram_pc_bounds, get_scope_pc_bounds) + (handle_struct_member_die, process_structure_scope) + (update_enumeration_type_from_children) + (process_enumeration_scope, read_array_type, read_common_block) + (read_namespace, read_module, read_subroutine_type): Update. + (sibling_die): Remove. + +2020-03-26 Tom Tromey <tom@tromey.com> + + * dwarf2/read.c (lookup_addr_base, lookup_ranges_base) + (build_type_psymtabs_reader, read_structure_type) + (read_enumeration_type, read_full_die_1): Update. + (dwarf2_attr_no_follow): Move to die.h. + * dwarf2/die.h (struct die_info) <attr>: New method. + +2020-03-26 Tom Tromey <tom@tromey.com> + + * dwarf2/read.c (struct dwarf2_cu) <base_known>: Remove. + <base_address>: Now an optional. + (dwarf2_find_base_address, dwarf2_rnglists_process) + (dwarf2_ranges_process, fill_in_loclist_baton) + (dwarf2_symbol_mark_computed): Update. - * nto-tdep.c (nto_inferior_data_reg): Change type. - (nto_inferior_data): Update. - (nto_inferior_data_cleanup, nto_new_inferior_data) - (_initialize_nto_tdep): Remove. - * nto-tdep.h (struct nto_inferior_data): Add initializers. +2020-03-26 Tom Tromey <tom@tromey.com> -2019-05-08 Tom Tromey <tom@tromey.com> + * dwarf2/read.c (struct die_info): Move to die.h. + * dwarf2/die.h: New file. - * ada-lang.c (struct ada_inferior_data): Add initializers. - (ada_inferior_data): Change type. - (ada_inferior_data_cleanup): Remove. - (get_ada_inferior_data, ada_inferior_exit) - (struct ada_pspace_data): Add initializers, destructor. - (ada_pspace_data_handle): Change type. - (get_ada_pspace_data): Update. - (ada_pspace_data_cleanup): Remove. +2020-03-26 Tom Tromey <tom@tromey.com> -2019-05-08 Tom Tromey <tom@tromey.com> + * dwarf2/line-header.h (dwarf_decode_line_header): Declare. + * dwarf2/read.c + (dwarf2_statement_list_fits_in_line_number_section_complaint): + Move to line-header.c. + (read_checked_initial_length_and_offset, read_formatted_entries): + Likewise. + (dwarf_decode_line_header): Split into two. + * dwarf2/line-header.c + (dwarf2_statement_list_fits_in_line_number_section_complaint): + Move from read.c. + (read_checked_initial_length_and_offset, read_formatted_entries): + Likewise. + (dwarf_decode_line_header): New function, split from read.c. - * coffread.c (struct coff_symfile_info): Add initializers. - (coff_objfile_data_key): Move lower. Change type. - (coff_symfile_init, coff_symfile_read, _initialize_coffread): - Update. - (coff_free_info): Remove. +2020-03-26 Tom Tromey <tom@tromey.com> -2019-05-08 Tom Tromey <tom@tromey.com> + * dwarf2/read.h (struct dwarf2_per_objfile) <read_line_string>: + Declare method. + * dwarf2/read.c (read_attribute_value): Update. + (dwarf2_per_objfile::read_line_string): Rename from + read_indirect_line_string. + (read_formatted_entries): Update. - * fbsd-tdep.c (struct fbsd_pspace_data): Add initializers. - (fbsd_pspace_data_handle): Move lower. Change type. - (get_fbsd_pspace_data): Update. - (fbsd_pspace_data_cleanup): Remove. - (_initialize_fbsd_tdep): Update. - -2019-05-08 Tom Tromey <tom@tromey.com> - - * ada-tasks.c (ada_tasks_pspace_data_handle): Change type. - (get_ada_tasks_pspace_data): Update. - (ada_tasks_pspace_data_cleanup): Remove. - (_initialize_tasks): Update. - (ada_tasks_inferior_data_handle): Change type. - (get_ada_tasks_inferior_data): Update. - (ada_tasks_inferior_data_cleanup): Remove. - (struct ada_tasks_pspace_data): Add initializers. - -2019-05-08 Tom Tromey <tom@tromey.com> - - * symfile.h (struct sym_probe_fns) <sym_get_probes>: Change type. - * symfile-debug.c (debug_sym_get_probes): Change type. - * stap-probe.c (handle_stap_probe): - (stap_static_probe_ops::get_probes): Change type. - * probe.h (class static_probe_ops) <get_probes>: Change type. - * probe.c (class any_static_probe_ops) <get_probes>: Change type. - (parse_probes_in_pspace): Update. - (find_probes_in_objfile, find_probe_by_pc, collect_probes): - Update. - (any_static_probe_ops::get_probes): Change type. - * elfread.c (elfread_data): New typedef. - (probe_key): Change type. - (elf_get_probes): Likewise. Update. - (probe_key_free): Remove. - (_initialize_elfread): Update. - * dtrace-probe.c (class dtrace_static_probe_ops) <get_probes>: - Change type. - (dtrace_process_dof_probe, dtrace_process_dof) - (dtrace_static_probe_ops::get_probe): Change type. - -2019-05-08 Tom Tromey <tom@tromey.com> - - * xcoffread.c (struct xcoff_symfile_info): Rename from - coff_symfile_info. Add initializers. - (xcoff_objfile_data_key): Move lower. Change type. - (XCOFF_DATA): Rewrite. - (xcoff_free_info): Remove. - (xcoff_symfile_init, _initialize_xcoffread, read_xcoff_symtab) - (read_symbol, read_symbol_lineno, find_linenos, init_stringtab) - (xcoff_initial_scan): Update. +2020-03-26 Tom Tromey <tom@tromey.com> -2019-05-08 Tom Tromey <tom@tromey.com> + * dwarf2/macro.c (dwarf_decode_macro_bytes): Use objfile local + variable. - * solib-svr4.c (struct svr4_info): Add initializers and - destructor. - <probes_table>: Now an htab_up. - (solib_svr4_pspace_data): Change type. - (free_probes_table): Simplify. - (~svr4_info): Rename from svr4_pspace_data_cleanup. - (get_svr4_info, probes_table_htab_remove_objfile_probes) - (probes_table_remove_objfile_probes, register_solib_event_probe) - (solib_event_probe_at, svr4_update_solib_event_breakpoint) - (_initialize_svr4_solib): Update. - -2019-05-08 Tom Tromey <tom@tromey.com> - - * remote.c (remote_pspace_data): Change type. - (remote_pspace_data_cleanup): Remove. - (get_remote_exec_file, set_pspace_remote_exec_file) - (_initialize_remote): Update. - -2019-05-08 Tom Tromey <tom@tromey.com> - - * breakpoint.c (breakpoint_objfile_key): Change type. - (get_breakpoint_objfile_data): Update. - (free_breakpoint_objfile_data): Remove. - (_initialize_breakpoint): Update. - -2019-05-08 Tom Tromey <tom@tromey.com> - - * linux-tdep.c (struct linux_info): Add initializers. - (linux_inferior_data): Move. Change type. - (invalidate_linux_cache_inf): Update. - (linux_inferior_data_cleanup): Remove. - (get_linux_inferior_data, _initialize_linux_tdep): Update. - -2019-05-08 Tom Tromey <tom@tromey.com> - - * auxv.c (auxv_inferior_data): Move. Change type. - (auxv_inferior_data_cleanup): Remove. - (invalidate_auxv_cache_inf): Rewrite. - (get_auxv_inferior_data, _initialize_auxv): Update. - -2019-05-08 Tom Tromey <tom@tromey.com> - - * symfile-debug.c (struct debug_sym_fns_data): Add initializers. - (symfile_debug_objfile_data_key): Change type. - (symfile_debug_installed, debug_qf_has_symbols) - (debug_qf_find_last_source_symtab) - (debug_qf_forget_cached_source_info) - (debug_qf_map_symtabs_matching_filename, debug_qf_lookup_symbol) - (debug_qf_print_stats, debug_qf_dump) - (debug_qf_expand_symtabs_for_function) - (debug_qf_expand_all_symtabs) - (debug_qf_expand_symtabs_with_fullname) - (debug_qf_map_matching_symbols) - (debug_qf_expand_symtabs_matching) - (debug_qf_find_pc_sect_compunit_symtab) - (debug_qf_map_symbol_filenames) - (debug_qf_find_compunit_symtab_by_address, debug_sym_get_probes) - (debug_sym_new_init, debug_sym_init, debug_sym_read) - (debug_sym_read_psymbols, debug_sym_finish, debug_sym_offsets) - (debug_sym_read_linetable, debug_sym_relocate): Update. - (symfile_debug_free_objfile): Remove. - (install_symfile_debug_logging, _initialize_symfile_debug): - Update. +2020-03-26 Tom Tromey <tom@tromey.com> -2019-05-08 Tom Tromey <tom@tromey.com> + * dwarf2/macro.h (dwarf_decode_macros): Make section parameter + const. + * dwarf2/macro.c (skip_form_bytes, skip_unknown_opcode) + (dwarf_decode_macro_bytes, dwarf_decode_macros): Make section + parameter const. + +2020-03-26 Tom Tromey <tom@tromey.com> + + * dwarf2/read.c (dwarf_decode_macros): Make "lh" const. + * dwarf2/macro.h (dwarf_decode_macros): Constify "lh" parameter. + * dwarf2/macro.c (macro_start_file): Constify "lh" parameter. + (dwarf_decode_macro_bytes, dwarf_decode_macros): Likewise. + +2020-03-26 Tom Tromey <tom@tromey.com> + + * dwarf2/line-header.h (struct line_header) <is_valid_file_index, + file_names_size, file_full_name, file_file_name>: Use const. + <file_name_at, file_names>: Add const overload. + * dwarf2/line-header.c (line_header::file_file_name) + (line_header::file_full_name): Update. + +2020-03-26 Tom Tromey <tom@tromey.com> + + * dwarf2/read.c (dwarf2_macro_malformed_definition_complaint) + (macro_start_file, consume_improper_spaces) + (parse_macro_definition, skip_form_bytes, skip_unknown_opcode) + (dwarf_parse_macro_header, dwarf_decode_macro_bytes) + (dwarf_decode_macros): Move to macro.c. + * dwarf2/macro.c: New file. + * dwarf2/macro.h: New file. + * Makefile.in (COMMON_SFILES): Add dwarf2/macro.c. - * dwarf2read.h (struct dwarf2_per_objfile): Don't inherit from - allocate_on_obstack. - * dwarf2read.c (dwarf2_objfile_data_key): Change type. - (get_dwarf2_per_objfile): Update. - (set_dwarf2_per_objfile): Remove. - (dwarf2_has_info, dwarf2_get_section_info): Update. - (dwarf2_free_objfile): Remove. - (_initialize_dwarf2_read): Update. +2020-03-26 Tom Tromey <tom@tromey.com> -2019-05-08 Tom Tromey <tom@tromey.com> + * dwarf2/section.h (struct dwarf2_section_info) <read_string>: New + method. + * dwarf2/section.c: New method. From + read_indirect_string_at_offset_from. + * dwarf2/read.c (mapped_debug_names::namei_to_name): Update. + (read_indirect_string_at_offset_from): Move to section.c. + (read_indirect_string_at_offset): Rewrite. + (read_indirect_line_string_at_offset): Remove. + (read_indirect_string, read_indirect_line_string) + (dwarf_decode_macro_bytes): Update. + +2020-03-26 Tom Tromey <tom@tromey.com> + + * dwarf2/section.h (struct dwarf2_section_info) + <overload_complaint>: Declare. + (dwarf2_section_buffer_overflow_complaint): Don't declare. + * dwarf2/section.c (dwarf2_section_info::overflow_complaint): + Rename from dwarf2_section_buffer_overflow_complaint. + * dwarf2/read.c (skip_one_die, partial_die_info::read) + (skip_form_bytes, dwarf_decode_macro_bytes): Update. - * auto-load.c (struct auto_load_pspace_info): Add destructor and - initializers. - <unsupported_script_warning_printed, - script_not_found_warning_printed>: Now bool. - (auto_load_pspace_data): Change type. - (~auto_load_pspace_info): Rename from - auto_load_pspace_data_cleanup. - (get_auto_load_pspace_data, init_loaded_scripts_info) - (clear_section_scripts, maybe_print_unsupported_script_warning) - (maybe_print_script_not_found_warning, _initialize_auto_load): - Update. +2020-03-26 Tom Tromey <tom@tromey.com> -2019-05-08 Tom Tromey <tom@tromey.com> + * dwarf2/section.h (dwarf2_section_buffer_overflow_complaint): + Declare. + * dwarf2/section.c (dwarf2_section_buffer_overflow_complaint): + Move from read.c. + * dwarf2/read.c (dwarf2_section_buffer_overflow_complaint): Move + to section.c. - * objfiles.c (objfile_pspace_info): Add destructor and - initializers. - (objfiles_pspace_data): Change type. - (~objfile_pspace_info): Rename from objfiles_pspace_data_cleanup. - (get_objfile_pspace_data): Update. - (objfiles_bfd_data): Change type. - (get_objfile_bfd_data): Update. - (objfile_bfd_data_free, _initialize_objfiles): Remove. - -2019-05-08 Tom Tromey <tom@tromey.com> - - * break-catch-syscall.c (catch_syscall_inferior_data): Move. - Change type. - (get_catch_syscall_inferior_data): Update. - (catch_syscall_inferior_data_cleanup): Remove. - (_initialize_break_catch_syscall): Update. +2020-03-26 Tom Tromey <tom@tromey.com> -2019-05-08 Tom Tromey <tom@tromey.com> + * dwarf2/read.c (dwarf_decode_macros): Split into two overloads. - * inflow.c (struct terminal_info): Add destructor and - initializers. - (inflow_inferior_data): Change type. - (~terminal_info): Rename from inflow_inferior_data_cleanup. - (get_inflow_inferior_data, inflow_inferior_exit) - (swap_terminal_info, _initialize_inflow): Update. - -2019-05-08 Tom Tromey <tom@tromey.com> - - * target-dcache.c (target_dcache_cleanup): Remove. - (target_dcache_aspace_key): Change type. - (target_dcache_init_p, target_dcache_invalidate) - (target_dcache_get, target_dcache_get_or_init) - (_initialize_target_dcache): Update. - * dcache.h (struct dcache_deleter): New. +2020-03-26 Tom Tromey <tom@tromey.com> -2019-05-08 Tom Tromey <tom@tromey.com> + * dwarf2/read.c (macro_start_file): Change "cu" parameter to + "builder". + (dwarf_decode_macro_bytes): Likewise. Add dwarf2_per_objfile + parameter. + (dwarf_decode_macros): Update. - * symtab.c (struct symbol_cache): Add destructor and - initializers. - (symbol_cache_key): Move. Change type. - (make_symbol_cache, free_symbol_cache): Remove. - (get_symbol_cache): Update. - (symbol_cache_cleanup): Remove. - (ALL_PSPACES, symbol_cache_flush) - (maintenance_print_symbol_cache) - (maintenance_print_symbol_cache_statistics, _initialize_symtab): - Update. +2020-03-26 Tom Tromey <tom@tromey.com> -2019-05-08 Tom Tromey <tom@tromey.com> + * dwarf2/read.c (read_attribute_value): Update. + (read_indirect_string_from_dwz): Move to dwz.c; change into + method. + (dwarf_decode_macro_bytes): Update. + * dwarf2/dwz.h (struct dwz_file) <read_string>: Declare method. + * dwarf2/dwz.c: New file. + * Makefile.in (COMMON_SFILES): Add dwz.c. - * symtab.c (struct main_info): Add destructor and initializers. - (main_progspace_key): Move. Change type. - (get_main_info): Update. - (main_info_cleanup): Remove. - (_initialize_symtab): Update. +2020-03-26 Tom Tromey <tom@tromey.com> -2019-05-08 Tom Tromey <tom@tromey.com> + * dwarf2/read.h (struct dwz_file): Move to dwz.h. + * dwarf2/read.c: Add include. + * dwarf2/index-write.c: Add include. + * dwarf2/index-cache.c: Add include. + * dwarf2/dwz.h: New file. - * registry.h (DECLARE_REGISTRY): Define the _key class. +2020-03-25 Tom Tromey <tom@tromey.com> -2019-05-08 Andrew Burgess <andrew.burgess@embecosm.com> + * compile/compile-object-load.c (get_out_value_type): Mention + correct symbol name in error message. - * NEWS: Merge two 'New commands' sections. +2020-03-25 Hannes Domani <ssbssa@yahoo.de> -2019-05-08 Joel Brobecker <brobecker@adacore.com> + * windows-nat.c (windows_add_all_dlls): Fix system dll paths. - * ada-valprint.c (ada_val_print_gnat_array): Remove language - parameter and use Ada language definition instead. - (ada_val_print_ptr): Remove unused language parameter. - (ada_val_print_num): Remove language parameter and use Ada language - definition instead. - (ada_val_print_enum, ada_val_print_flt): Remove unused language - parameter. - (ada_val_print_struct_union, ada_val_print_ref): Remove language - parameter and use Ada language definition instead. - (ada_val_print_1): Update all ada_val_print_xxx calls. - Remove language parameter. - (ada_val_print): Update ada_val_print_1 call. +2020-03-25 Tom de Vries <tdevries@suse.de> -2019-05-08 Tom Tromey <tromey@adacore.com> + * symtab.h (is_main_symtab_of_compunit_symtab): New function. + * symmisc.c (dump_symtab_1): Print user and includes fields. + (maintenance_info_symtabs): Same. - * remote.c (remote_hw_watchpoint_limit) - (remote_hw_watchpoint_length_limit, remote_hw_breakpoint_limit): - Now static. +2020-03-25 Andrew Burgess <andrew.burgess@embecosm.com> -2019-05-08 Tom Tromey <tromey@adacore.com> + PR gdb/25534 + * riscv-tdep.c (riscv_arg_info::c_offset): Update comment. + (riscv_regcache_cooked_write): New function. + (riscv_push_dummy_call): Use new function. + (riscv_return_value): Likewise. - * maint.c (_initialize_maint_cmds): Move initialization code to - remote.c. - (watchdog, show_watchdog): Move to remote.c. - * remote.c (watchdog, show_watchdog): Move from maint.c. Make - "watchdog" static. - (_initialize_remote): Move initialization code from maint.c. - * defs.h (watchdog): Don't declare. +2020-03-24 Simon Marchi <simon.marchi@polymtl.ca> -2019-05-08 Tom Tromey <tromey@adacore.com> + * fbsd-nat.c (fbsd_nat_target::follow_fork): Change bool to int. + * fbsd-nat.h (class fbsd_nat_target) <follow_fork>: Likewise. + * inf-ptrace.c (inf_ptrace_target::follow_fork): Likewise. + * inf-ptrace.h (struct inf_ptrace_target) <follow_fork>: Likewise. + * infrun.c (follow_fork): Likewise. + (follow_fork_inferior): Likewise. + * linux-nat.c (linux_nat_target::follow_fork): Likewise. + * linux-nat.h (class linux_nat_target): Likewise. + * remote.c (class remote_target) <follow_fork>: Likewise. + (remote_target::follow_fork): Likewise. + * target-delegates.c: Re-generate. + * target.c (default_follow_fork): Likewise. + (target_follow_fork): Likewise. + * target.h (struct target_ops) <follow_fork>: Likewise. + (target_follow_fork): Likewise. - * tui/tui-interp.c: Include main.h. - * interps.c: Include main.h. - * main.h (interpreter_p): Declare. - * defs.h (interpreter_p): Don't declare. +2020-03-24 Tom de Vries <tdevries@suse.de> -2019-05-08 Tom Tromey <tromey@adacore.com> + * psymtab.c (maintenance_info_psymtabs): Print user field. - * dwarf2loc.c: Include dwarf2read.h. - * defs.h (read_unsigned_leb128): Don't declare. - * dwarf2read.h (read_unsigned_leb128): Declare. +2020-03-20 Tom Tromey <tromey@adacore.com> -2019-05-08 Tom Tromey <tromey@adacore.com> + * dwarf2/loc.h (dwarf2_evaluate_property): Make "addr_stack" + const. + * dwarf2/loc.c (dwarf2_evaluate_property): Make "addr_stack" + const. - * utils.c (fputs_maybe_filtered): Call can_emit_style_escape as a - method. +2020-03-20 Simon Marchi <simon.marchi@efficios.com> -2019-05-08 Tom Tromey <tromey@adacore.com> + * ptrace.m4: Don't check for ptrace declaration. + * config.in: Re-generate. + * configure: Re-generate. + * nat/gdb_ptrace.h: Don't declare ptrace if HAVE_DECL_PTRACE is + not defined. - * utils.c (fputs_maybe_filtered): Reset style after paging, even - when no wrap column is set. +2020-03-20 Kamil Rytarowski <n54@gmx.com> -2019-05-08 Tom Tromey <tromey@adacore.com> + * amd64-bsd-nat.c (gdb_ptrace): Change return type from `int' to + `PTRACE_TYPE_RET'. + * i386-bsd-nat.c (gdb_ptrace): Likewise. + * sparc-nat.c (gdb_ptrace): Likewise. + * x86-bsd-nat.c (gdb_ptrace): Likewise. - * c-lang.c (c_get_string): Handle non-C-style arrays. +2020-03-20 Tom Tromey <tromey@adacore.com> -2019-05-08 Tom Tromey <tromey@adacore.com> + * c-exp.y (lex_one_token): Fix assert. - * typeprint.c (print_offset_data::update): Print the bit offset, - not the number of bits remaining. +2020-03-20 Tom Tromey <tromey@adacore.com> -2019-05-08 Tom Tromey <tromey@adacore.com> + * ada-tasks.c (read_atcb): Use smaller length in strncpy call. + * linux-tdep.c (linux_fill_prpsinfo): Use smaller length in + strncpy call. - * typeprint.c (print_offset_data::maybe_print_hole): Add extra - padding at end of comment. +2020-03-20 Tom Tromey <tromey@adacore.com> -2019-05-08 Tom Tromey <tromey@adacore.com> + * symmisc.c (maintenance_print_one_line_table): Use ui_out. - * dwarf2loc.c (dwarf2_evaluate_property) <PROP_ADDR_OFFSET>: - Compare main types. +2020-03-20 Tom Tromey <tromey@adacore.com> -2019-05-06 Tom Tromey <tom@tromey.com> + * ada-valprint.c (print_variant_part): Remove parameters; switch + to value-based API. + (print_field_values): Likewise. + (ada_val_print_struct_union): Likewise. + (ada_value_print_1): Update. - * common/scoped_mmap.c: Include common-defs.h. - * common/scoped_mmap.h: Don't include config.h. +2020-03-20 Kamil Rytarowski <n54@gmx.com> -2019-05-04 Tom Tromey <tom@tromey.com> + * ppc-nbsd-nat.c (ppc_nbsd_nat_target): Inherit from + nbsd_nat_target instead of inf_ptrace_target. + * ppc-nbsd-nat.c: Include "nbsd-nat.h", as we are now using + nbsd_nat_target. - * aarch64-tdep.c (stack_item_t): Remove typedef and DEF_VEC. - (struct aarch64_call_info): Add initializers. - <si>: Now a std::vector. - (pass_on_stack, aarch64_push_dummy_call): Update. +2020-03-20 Kamil Rytarowski <n54@gmx.com> -2019-05-04 Simon Marchi <simon.marchi@efficios.com> - Tom Tromey <tom@tromey.com> + * hppa-nbsd-nat.c (fetch_registers): New variable lwp and pass + it to the ptrace call. + * (store_registers): Likewise. - * ppc-linux-nat.c (thread_points_p): Remove typedef and DEF_VEC. - (ppc_threads): Now a std::vector. Now static. - (hwdebug_find_thread_points_by_tid) - (ppc_linux_nat_target::low_new_thread, ppc_linux_thread_exit): - Update. +2020-03-20 Kamil Rytarowski <n54@gmx.com> -2019-05-04 Tom Tromey <tom@tromey.com> + * ppc-nbsd-nat.c (fetch_registers): New variable lwp and pass + it to the ptrace call. + * (store_registers): Likewise. - * arc-tdep.c (arc_tdesc_init): Return bool. +2020-03-19 Luis Machado <luis.machado@linaro.org> -2019-05-04 Tom Tromey <tom@tromey.com> + * nat/aarch64-sve-linux-ptrace.c (aarch64_sve_set_vq): If vg is not + valid, fetch vg value from ptrace. - * arm-linux-nat.c (arm_linux_nat_target::can_use_hw_breakpoint): - Use gdb_assert_not_reached. +2020-03-19 Kamil Rytarowski <n54@gmx.com> + * inf-ptrace.h: Disable get_ptrace_pid on NetBSD. + * inf-ptrace.c: Likewise. + * (gdb_ptrace): Add. + * (inf_ptrace_target::resume): Update. + * (inf_ptrace_target::xfer_partial): Likewise. + * (inf_ptrace_peek_poke): Change argument `pid' to `ptid'. + * (inf_ptrace_peek_poke): Update. -2019-05-04 Tom Tromey <tom@tromey.com> +2020-03-19 Kamil Rytarowski <n54@gmx.com> - * compile/compile-cplus-types.c (compile_cplus_convert_enum): Use - "false". + * x86-bsd-nat.c (gdb_ptrace): New. + * (x86bsd_dr_set): Add new argument `ptid'. + * (x86bsd_dr_get, x86bsd_dr_set, x86bsd_dr_set_control, + x86bsd_dr_set_addr): Update. -2019-05-04 Tom Tromey <tom@tromey.com> +2020-03-19 Andrew Burgess <andrew.burgess@embecosm.com> - * arc-tdep.c (arc_tdesc_init): Use bool. + * remote.c (remote_target::process_stop_reply): Handle events for + all threads differently. -2019-05-04 Tom Tromey <tom@tromey.com> +2020-03-19 Andrew Burgess <andrew.burgess@embecosm.com> - * stack.c (select_frame_for_mi): Use "false", not "FALSE". + * completer.c (completion_tracker::remove_completion): Define new + function. + * completer.h (completion_tracker::remove_completion): Declare new + function. + * symtab.c (completion_list_add_symbol): Remove aliasing msymbols + when adding a C++ function symbol. -2019-05-04 Tom Tromey <tom@tromey.com> +2020-03-19 Andrew Burgess <andrew.burgess@embecosm.com> - * cli/cli-cmds.c (valid_command_p): Return bool. + * completer.c (completion_tracker::completion_hash_entry): Define + new class. + (advance_to_filename_complete_word_point): Call + recompute_lowest_common_denominator. + (completion_tracker::completion_tracker): Call discard_completions + to setup the hash table. + (completion_tracker::discard_completions): Allow for being called + from the constructor, pass new equal function, and element deleter + when constructing the hash table. Initialise new class member + variables. + (completion_tracker::maybe_add_completion): Remove use of + m_entries_vec, and store more information into m_entries_hash. + (completion_tracker::recompute_lcd_visitor): New function, most + content taken from... + (completion_tracker::recompute_lowest_common_denominator): + ...here, this now just visits each item in the hash calling the + above visitor. + (completion_tracker::build_completion_result): Remove use of + m_entries_vec, call recompute_lowest_common_denominator. + * completer.h (completion_tracker::have_completions): Remove use + of m_entries_vec. + (completion_tracker::completion_hash_entry): Declare new class. + (completion_tracker::recompute_lowest_common_denominator): Change + function signature. + (completion_tracker::recompute_lcd_visitor): Declare new function. + (completion_tracker::m_entries_vec): Delete. + (completion_tracker::m_entries_hash): Initialize to NULL. + (completion_tracker::m_lowest_common_denominator_valid): New + member variable. + (completion_tracker::m_lowest_common_denominator_max_length): New + member variable. -2019-05-04 Tom Tromey <tom@tromey.com> +2020-03-17 Kamil Rytarowski <n54@gmx.com> - * cli/cli-decode.c (valid_user_defined_cmd_name_p): Return bool. - * command.h (valid_user_defined_cmd_name_p): Channge return type. + * regformats/regdef.h: Put reg in gdb namespace. -2019-05-04 Raul Tambre <raul@tambre.ee> +2020-03-17 Kamil Rytarowski <n54@gmx.com> - * python/lib/gdb/prompt.py (_ExtendedPrompt) - <before_prompt_hook, get_show_string>: Fix incorrect use of 'is' - operator for comparison. + * i386-bsd-nat.c (gdb_ptrace): New. + * (i386bsd_fetch_inferior_registers, + i386bsd_store_inferior_registers) Switch from pid_t to ptid_t. + * (i386bsd_fetch_inferior_registers, + i386bsd_store_inferior_registers) Use gdb_ptrace. + +2020-03-17 Kamil Rytarowski <n54@gmx.com> + + * amd64-bsd-nat.c (gdb_ptrace): New. + * (amd64bsd_fetch_inferior_registers, + amd64bsd_store_inferior_registers) Switch from pid_t to ptid_t. + * (amd64bsd_fetch_inferior_registers, + amd64bsd_store_inferior_registers) Use gdb_ptrace. + +2020-03-17 Kamil Rytarowski <n54@gmx.com> + + * user-regs.c (user_reg::read): Rename to... + (user_reg::xread): ...this. + * (append_user_reg): Rename argument `read' to `xread'. + * (user_reg_add_builtin): Likewise. + * (user_reg_add): Likewise. + * (value_of_user_reg): Likewise. + +2020-03-17 Kamil Rytarowski <n54@gmx.com> + + * sparc-nat.c (gdb_ptrace): New. + * sparc-nat.c (sparc_fetch_inferior_registers) + (sparc_store_inferior_registers) Remove obsolete comment. + * sparc-nat.c (sparc_fetch_inferior_registers) + (sparc_store_inferior_registers) Switch from pid_t to ptid_t. + * sparc-nat.c (sparc_fetch_inferior_registers) + (sparc_store_inferior_registers) Use gdb_ptrace. + +2020-03-17 Kamil Rytarowski <n54@gmx.com> + + * sh-nbsd-nat.c (fetch_registers): New variable lwp and pass + it to the ptrace call. + * sh-nbsd-nat.c (store_registers): Likewise. + +2020-03-17 Kamil Rytarowski <n54@gmx.com> + + * sh-nbsd-nat.c (sh_nbsd_nat_target): Inherit from + nbsd_nat_target instead of inf_ptrace_target. + * sh-nbsd-nat.c: Include "nbsd-nat.h", as we are now using + nbsd_nat_target. + +2020-03-17 Kamil Rytarowski <n54@gmx.com> + + * amd64-bsd-nat.c: Include amd64-bsd-nat.h". + +2020-03-17 Kamil Rytarowski <n54@gmx.com> + + * nbsd-nat.c: Include <sys/types.h>, <sys/ptrace.h> and + <sys/sysctl.h>. + * nbsd-nat.c (nbsd_nat_target::pid_to_exec_file): Rewrite. + +2020-03-17 Tom de Vries <tdevries@suse.de> + + PR gdb/23710 + * dwarf2/read.h (struct dwarf2_per_cu_data): Add unit_type and lang + fields. + * dwarf2/read.c (process_psymtab_comp_unit): Initialize unit_type and lang + fields. + (process_imported_unit_die): Skip import of c++ CUs. + +2020-03-16 Tom Tromey <tom@tromey.com> + + * p-valprint.c (pascal_object_print_value): Initialize + base_value. + +2020-03-16 Anton Kolesov <anton.kolesov@synopsys.com> + Shahab Vahedi <shahab@synopsys.com> + + * Makefile.in: Add arch/arc.o + * configure.tgt: Likewise. + * arc-tdep.c (arc_tdesc_init): Use arc_read_description. + (_initialize_arc_tdep): Don't initialize old target descriptions. + (arc_read_description): New function to cache target descriptions. + * arc-tdep.h (arc_read_description): Add proto type. + * arch/arc.c: New file. + * arch/arc.h: Likewise. + * features/Makefile: Replace old target descriptions with new. + * features/arc-arcompact.c: Remove. + * features/arc-arcompact.xml: Likewise. + * features/arc-v2.c: Likewise + * features/arc-v2.xml: Likewise + * features/arc/aux-arcompact.xml: New file. + * features/arc/aux-v2.xml: Likewise. + * features/arc/core-arcompact.xml: Likewise. + * features/arc/core-v2.xml: Likewise. + * features/arc/aux-arcompact.c: Generate. + * features/arc/aux-v2.c: Likewise. + * features/arc/core-arcompact.c: Likewise. + * features/arc/core-v2.c: Likewise. + * target-descriptions (maint_print_c_tdesc_cmd): Support ARC features. + +2020-03-16 Tom Tromey <tromey@adacore.com> + + PR gdb/25663: + * dwarf2/read.c (dwarf2_name): Strip leading namespaces after + putting value into bcache. + +2020-03-16 Simon Marchi <simon.marchi@efficios.com> + + PR gdb/21500 + * amd64-windows-tdep.c (amd64_windows_init_abi): Rename + to... + (amd64_windows_init_abi_common): ... this. Don't set size of + long type. + (amd64_windows_init_abi): New function. + (amd64_cygwin_init_abi): New function. + (_initialize_amd64_windows_tdep): Use amd64_cygwin_init_abi for + the Cygwin OS ABI. + * i386-windows-tdep.c (_initialize_i386_windows_tdep): Clarify + comment. -2019-05-04 Tom Tromey <tom@tromey.com> +2020-03-16 Simon Marchi <simon.marchi@efficios.com> - * psymtab.c (psymbol_name_matches, match_partial_symbol) - (lookup_partial_symbol, print_partial_symbols) - (recursively_search_psymtabs, sort_pst_symbols, psymbol_hash) - (psymbol_compare): Update. - (add_psymbol_to_bcache): Clear the entire psymbol. - (maintenance_check_psymtabs): Update. - * psympriv.h (struct partial_symbol): Don't derive from - general_symbol_info. - <obj_section, unrelocated_address, address, - set_unrelocated_address>: Update. - <ginfo>: New member. - * dwarf-index-write.c (write_psymbols, debug_names::insert) - (debug_names::write_psymbols): Update. + * windows-tdep.h (is_linked_with_cygwin_dll): New declaration. + * windows-tdep.c (CYGWIN_DLL_NAME): New. + (pe_import_directory_entry): New struct type. + (is_linked_with_cygwin_dll): New function. + * amd64-windows-tdep.c (amd64_windows_osabi_sniffer): Select + GDB_OSABI_CYGWIN if the BFD is linked with the Cygwin DLL. + * i386-windows-tdep.c (i386_windows_osabi_sniffer): Likewise. + +2020-03-16 Simon Marchi <simon.marchi@efficios.com> + + * i386-windows-tdep.c: Mass-rename "cygwin" to "windows", except + i386_cygwin_core_osabi_sniffer. + +2020-03-16 Simon Marchi <simon.marchi@efficios.com> + + * i386-cygwin-tdep.c: Rename to... + * i386-windows-tdep.c: ... this. + * Makefile.in (ALL_TARGET_OBS): Rename i386-cygwin-tdep.c to + i386-windows-tdep.c. + * configure.tgt: Likewise. + +2020-03-16 Simon Marchi <simon.marchi@efficios.com> + + * osabi.h (enum gdb_osabi): Add GDB_OSABI_WINDOWS. + * osabi.c (gdb_osabi_names): Add "Windows". + * i386-cygwin-tdep.c (i386_cygwin_osabi_sniffer): Return + GDB_OSABI_WINDOWS when the binary's target is "pei-i386". + (i386_cygwin_core_osabi_sniffer): New function, extracted from + i386_cygwin_osabi_sniffer. + (_initialize_i386_cygwin_tdep): Register OS ABI + GDB_OSABI_WINDOWS for i386. + * amd64-windows-tdep.c (amd64_windows_osabi_sniffer): Return + GDB_OSABI_WINDOWS when the binary's target is "pei-x86-64". + (_initialize_amd64_windows_tdep): Register OS ABI GDB_OSABI_WINDOWS + for x86-64. + * configure.tgt: Use GDB_OSABI_WINDOWS as the default OS ABI + when the target matches '*-*-mingw*'. + +2020-03-16 Simon Marchi <simon.marchi@efficios.com> + + * defs.h (enum gdb_osabi): Move to... + * osabi.h (enum gdb_osabi): ... here. + * gdbarch.sh: Include osabi.h in gdbarch.h. + * gdbarch.h: Re-generate. -2019-05-04 Tom de Vries <tdevries@suse.de> +2020-03-16 Simon Marchi <simon.marchi@efficios.com> - * contrib/cc-with-tweaks.sh: Support -n arg. + * amd64-windows-tdep.c (amd64_windows_osabi_sniffer): New + function. + (_initialize_amd64_windows_tdep): Register osabi sniffer. -2019-05-04 Philippe Waroquiers <philippe.waroquiers@skynet.be> +2020-03-14 Tom Tromey <tom@tromey.com> - * corelow.c (core_target::detach): Ensure frame cache and - register caches are cleared. - inferior.c (exit_inferior_1): Likewise. + * c-typeprint.c (cp_type_print_method_args): Print "__restrict__" + for C++. + (c_type_print_modifier): Likewise. Add "language" parameter. + (c_type_print_varspec_prefix, c_type_print_base_struct_union) + (c_type_print_base_1): Update. + * type-stack.h (enum type_pieces) <tp_atomic, tp_restrict>: New + constants. + * type-stack.c (type_stack::insert): Handle tp_atomic and + tp_restrict. + (type_stack::follow_type_instance_flags): Likewise. + (type_stack::follow_types): Likewise. Merge type-following code. + * c-exp.y (RESTRICT, ATOMIC): New tokens. + (space_identifier, cv_with_space_id) + (const_or_volatile_or_space_identifier_noopt) + (const_or_volatile_or_space_identifier): Remove. + (single_qualifier, qualifier_seq_noopt, qualifier_seq): New + rules. + (ptr_operator, typebase): Update. + (enum token_flag) <FLAG_C>: New constant. + (ident_tokens): Add "restrict", "__restrict__", "__restrict", and + "_Atomic". + (lex_one_token): Handle FLAG_C. + +2020-03-14 Kamil Rytarowski <n54@gmx.com> + + * m68k-bsd-nat.c (fetch_registers): New variable lwp and pass + it to the ptrace call. + * m68k-bsd-nat.c (store_registers): Likewise. + +2020-03-14 Kamil Rytarowski <n54@gmx.com> + + * m68k-bsd-nat.c (m68kbsd_supply_gregset): Change type of regs to + gdb_byte *. + * m68k-bsd-nat.c (m68kbsd_supply_fpregset): Likewise. + * m68k-bsd-nat.c (m68kbsd_collect_gregset): Likewise. + * m68k-bsd-nat.c (m68kbsd_supply_pcb): Cast &tmp to gdb_byte *. + +2020-03-14 Kamil Rytarowski <n54@gmx.com> + + * m68k-bsd-nat.c (m68k_bsd_nat_target): Inherit from + nbsd_nat_target instead of inf_ptrace_target. + * m68k-bsd-nat.c: Include "nbsd-nat.h", as we are now using + nbsd_nat_target. + +2020-03-14 Kamil Rytarowski <n54@gmx.com> + + * m68k-bsd-nat.c: Define _KERNTYPES to get the declaration of + register_t. + +2020-03-14 Kamil Rytarowski <n54@gmx.com> + + * alpha-bsd-nat.c (fetch_registers): New variable lwp and pass + it to the ptrace call. + * alpha-bsd-nat.c (store_registers): Likewise. -2019-05-03 Sandra Loosemore <sandra@codesourcery.com> - Tom Tromey <tom@tromey.com> +2020-03-14 Kamil Rytarowski <n54@gmx.com> - * dictionary.c (collate_pending_symbols_by_language): Remove - "struct" from foreach. - * symtab.c (lookup_global_symbol_from_objfile) - (lookup_symbol_in_objfile_from_linkage_name): Remove "struct" from - foreach. - * ser-tcp.c (net_open): Remove "struct" from foreach. - * objfiles.c (objfile_relocate, objfile_rebase) - (objfile_has_symbols): Remove "struct" from foreach. - * minsyms.c (lookup_minimal_symbol_by_pc_section): Remove "struct" - from foreach. - * dwarf2read.c (handle_struct_member_die): Remove "struct" from - foreach. - * darwin-nat.c (thread_info_from_private_thread_info): Remove - "struct" from foreach. - * ada-lang.c (create_excep_cond_exprs) - (ada_exception_catchpoint_cond_string): Remove "struct" from - foreach. - -2019-05-03 Tom Tromey <tromey@adacore.com> - - * ada-exp.y (convert_char_literal): Check suffix of each - enumerator. - -2019-05-03 Dilyan Palauzov <dilyan.palauzov@aegee.org> - - PR ada/21406: - * ada-exp.y (yywrap): Don't define. - * ada-lex.l (%option): Add noyywrap - (yywrap): Remove. - -2019-05-03 Eli Zaretskii <eliz@gnu.org> - - * common/common-defs.h [__MINGW32__ || __CYGWIN__]: Define - _WIN32_WINNT to the XP level, unless already defined to a higher - level. - - * unittests/parse-connection-spec-selftests.c: - * ser-tcp.c: - * common/netstuff.c [USE_WIN32API]: Remove the _WIN32_WINNT - override. - - * symfile.c (find_separate_debug_file): Remove colon from the - drive spec of DOS/Windows file names of the target, so that the - file name produced from DEBUGDIR and the target's directory will - be valid on DOS/Windows systems. - -2019-05-02 Andrew Burgess <andrew.burgess@embecosm.com> - - * rust-lang.c (val_print_struct): Handle printing structures - containing strings. - -2019-05-02 Tom Tromey <tromey@adacore.com> - - * valarith.c (_initialize_valarith): Remove. - -2019-05-01 Tom Tromey <tromey@adacore.com> - - * ada-lang.c (ada_value_primitive_field): Treat more fields as - bitfields. - -2019-05-01 Tom Tromey <tromey@adacore.com> - - * ada-lang.c (ada_value_assign): Correctly compute starting offset - for big-endian copies. - -2019-04-30 Ali Tamur <tamur@google.com> - * gdb/dwarf2read.c (read_3_bytes): New declaration. - (read_attribute_value): Added DW_FORM_strx1-4 cases. - (read_3_bytes): New function. - -2019-04-30 Joel Brobecker <brobecker@adacore.com> - - * windows-nat.c (main_thread_id): Delete. - (handle_output_debug_string): Replace main_thread_id by - current_event.dwThreadId. - (fake_create_process): Likewise. - (get_windows_debug_event) <CREATE_PROCESS_DEBUG_EVENT>: - Do not set main_thread_id. - <LOAD_DLL_DEBUG_EVENT>: Replace main_thread_id by - current_event.dwThreadId. - <UNLOAD_DLL_DEBUG_EVENT>: Likewise. - -2019-04-30 Joel Brobecker <brobecker@adacore.com> - - * windows-nat.c (get_windows_debug_event) <EXIT_PROCESS_DEBUG_EVENT>: - Use current_event.dwThreadId instead of main_thread_id. - -2019-04-30 Tom Tromey <tromey@adacore.com> - - * ada-lang.c (ada_lookup_simple_minsyms): New function. - (create_excep_cond_exprs): Iterate over program spaces. - (ada_exception_catchpoint_cond_string): Examine all minimal - symbols for exception types. - -2019-04-30 Tom Tromey <tromey@adacore.com> - - PR c++/24470: - * dwarf2read.c (process_structure_scope): Handle case where type - has template parameters but no symbol was created. - -2019-04-30 Andrew Burgess <andrew.burgess@embecosm.com> - Chris January <chris.january@arm.com> - - * f-typeprint.c (f_type_print_base): Print 'allocatable' type - qualifier. - * gdbtypes.h (TYPE_IS_ALLOCATABLE): Define. - -2019-04-30 Andrew Burgess <andrew.burgess@embecosm.com> - - * f-typeprint.c (f_print_type): Update rules for printing - whitespace. - (f_type_print_varspec_suffix): Likewise. - -2019-04-30 Andrew Burgess <andrew.burgess@embecosm.com> - Chris January <chris.january@arm.com> - - * f-typeprint.c (f_type_print_varspec_suffix): Handle printing - function arguments. - -2019-04-30 Andrew Burgess <andrew.burgess@embecosm.com> - - * f-lang.c (build_fortran_types): Change name of void type to - lower case. - * f-typeprint.c (f_type_print_base): Print the name of the void - type, rather than a fixed string. - * f-valprint.c (f_decorations): Use lower case void string. - -2019-04-30 Andrew Burgess <andrew.burgess@embecosm.com> - Chris January <chris.january@arm.com> - - * dwarf2read.c (dwarf2_init_complex_target_type): Use different - types for Fortran. - -2019-04-30 Andrew Burgess <andrew.burgess@embecosm.com> - Chris January <chris.january@arm.com> - David Lecomber <david.lecomber@arm.com> - - * f-exp.y (BINOP_INTRINSIC): New token. - (exp): New parser rule handling BINOP_INTRINSIC. - (f77_keywords): Add new builtin procedures. - * f-lang.c (evaluate_subexp_f): Handle BINOP_MOD, UNOP_FORTRAN_CEILING, - UNOP_FORTRAN_FLOOR, BINOP_FORTRAN_MODULO, BINOP_FORTRAN_CMPLX. - (operator_length_f): Handle UNOP_FORTRAN_CEILING, - UNOP_FORTRAN_FLOOR, BINOP_FORTRAN_MODULO, BINOP_FORTRAN_CMPLX. - (print_unop_subexp_f): New function. - (print_binop_subexp_f): New function. - (print_subexp_f): Handle UNOP_FORTRAN_CEILING, UNOP_FORTRAN_FLOOR, - BINOP_FORTRAN_MODULO, BINOP_FORTRAN_CMPLX. - (dump_subexp_body_f): Likewise. - (operator_check_f): Likewise. - * fortran-operator.def: Add UNOP_FORTRAN_CEILING, UNOP_FORTRAN_FLOOR, - BINOP_FORTRAN_MODULO, BINOP_FORTRAN_CMPLX - -2019-04-30 Andrew Burgess <andrew.burgess@embecosm.com> - - * gdb/expprint.c (dump_subexp_body_standard): Remove use of - UNOP_KIND. - * gdb/expression.h (exp_opcode): Include 'fortran-operator.def'. - * gdb/f-exp.y (exp): Rename UNOP_KIND to UNOP_FORTRAN_KIND. - * gdb/f-lang.c (evaluate_subexp_f): Likewise. - (operator_length_f): New fuction. - (print_subexp_f): New function. - (op_name_f): New function. - (dump_subexp_body_f): New function. - (operator_check_f): New function. - (exp_descriptor_f): Replace standard expression handling functions - with new functions. - * gdb/fortran-operator.def: New file. - * gdb/parse.c (operator_length_standard): Remove use of UNOP_KIND. - * gdb/std-operator.def: Remove UNOP_KIND. - -2019-04-30 Andrew Burgess <andrew.burgess@embecosm.com> - - * std-operator.def: Remove unbalanced, stray double quote - character. - -2019-04-29 Andrew Burgess <andrew.burgess@embecosm.com> - Chris January <chris.january@arm.com> - Daniel Everett <daniel.everett@arm.com> - Nick Forrington <nick.forrington@arm.com> - Richard Bunt <richard.bunt@arm.com> - - * cp-valprint.c (cp_print_value_fields): Allow an additional level - of depth when printing anonymous structs or unions. - * guile/scm-pretty-print.c (gdbscm_apply_val_pretty_printer): - Don't print either the top-level value, or the children if the - max-depth is exceeded. - (ppscm_print_children): When printing the key of a map, allow one - extra level of depth. - * python/py-prettyprint.c (gdbpy_apply_val_pretty_printer): Don't - print either the top-level value, or the children if the max-depth - is exceeded. - (print_children): When printing the key of a map, allow one extra - level of depth. - * python/py-value.c (valpy_format_string): Add max_depth keyword. - * valprint.c: (PRINT_MAX_DEPTH_DEFAULT): Define. - (user_print_options): Initialise max_depth field. - (val_print_scalar_or_string_type_p): New function. - (val_print): Check to see if the max depth has been reached. - (val_print_check_max_depth): Define new function. - (show_print_max_depth): New function. - (_initialize_valprint): Add 'print max-depth' option. - * valprint.h (struct value_print_options) <max_depth>: New field. - (val_print_check_max_depth): Declare new function. - * NEWS: Document new feature. - -2019-04-29 Andrew Burgess <andrew.burgess@embecosm.com> - - * ada-lang.c (ada_language_defn): Initialise new field. - * c-lang.c (c_is_string_type_p): New function. - (c_language_defn): Initialise new field. - (cplus_language_defn): Initialise new field. - (asm_language_defn): Initialise new field. - (minimal_language_defn): Initialise new field. - * c-lang.h (c_is_string_type_p): Declare new function. - * d-lang.c (d_language_defn): Initialise new field. - * f-lang.c (f_is_string_type_p): New function. - (f_language_defn): Initialise new field. - * go-lang.c (go_is_string_type_p): New function. - (go_language_defn): Initialise new field. - * language.c (default_is_string_type_p): New function. - (unknown_language_defn): Initialise new field. - (auto_language_defn): Initialise new field. - * language.h (struct language_defn) <la_is_string_type_p>: New - member variable. - (default_is_string_type_p): Declare new function. - * m2-lang.c (m2_language_defn): Initialise new field. - * objc-lang.c (objc_language_defn): Initialise new field. - * opencl-lang.c (opencl_language_defn): Initialise new field. - * p-lang.c (pascal_is_string_type_p): New function. - (pascal_language_defn): Initialise new field. - * rust-lang.c (rust_is_string_type_p): New function. - (rust_language_defn): Initialise new field. - -2019-04-29 Andrew Burgess <andrew.burgess@embecosm.com> - - * language.h (struct language_defn) <la_struct_too_deep_ellipsis>: - New field. - * ada-lang.c (ada_language_defn): Initialise new field. - * c-lang.c (c_language_defn): Likewise. - (cplus_language_defn): Likewise. - (asm_language_defn): Likewise. - (minimal_language_defn): Likewise. - * d-lang.c (d_language_defn): Likewise. - * f-lang.c (f_language_defn): Likewise. - * go-lang.c (go_language_defn): Likewise. - * language.c (unknown_language_defn): Likewise. - (auto_language_defn): Likewise. - * m2-lang.c (m2_language_defn): Likewise. - * objc-lang.c (objc_language_defn): Likewise. - * opencl-lang.c (opencl_language_defn): Likewise. - * p-lang.c (pascal_language_defn): Likewise. - * rust-lang.c (rust_language_defn): Likewise. - -2019-04-29 Andrew Burgess <andrew.burgess@embecosm.com> - - * ada-lang.c (ada_is_character_type): Change return type to bool. - (ada_is_string_type): Likewise. - * ada-lang.h (ada_is_character_type): Update declaration - (ada_is_string_type): Likewise. - -2019-04-27 Philippe Waroquiers <philippe.waroquiers@skynet.be> - - Support style in 'frame|thread apply' - - * gdbcmd.h (execute_command_to_string): New term_out parameter. - * record.c (record_start, record_stop): Update callers of - execute_command_to_string with false. - * guile/guile.c (gdbscm_execute_gdb_command): Likewise. - * ui-file.h (class ui_file): New term_out and can_emit_style_escape - methods. - (class string_file): New constructor with term_out parameter. - Override methods term_out and can_emit_style_escape. New member - term_out. - (class stdio_file): Override can_emit_style_escape. - (class tee_file): Override term_out and can_emit_style_escape. - * utils.h (can_emit_style_escape): Remove. - * utils.c (can_emit_style_escape): Likewise. - Update all callers of can_emit_style_escape (SOMESTREAM) to - SOMESTREAM->can_emit_style_escape. - * source-cache.c (source_cache::get_source_lines): Likewise. - * stack.c (frame_apply_command_count): Call execute_command_to_string - passing the term_out characteristic of the current gdb_stdout. - * thread.c (thr_try_catch_cmd): Likewise. - * top.c (execute_command_to_string): pass term_out parameter - to construct the string_file for the command output. - * ui-file.c (term_cli_styling): New function (most code moved - from utils.c can_emit_style_escape). - (string_file::string_file, string_file::can_emit_style_escape, - stdio_file::can_emit_style_escape, tee_file::term_out, - tee_file::can_emit_style_escape): New functions. - -2019-04-27 Philippe Waroquiers <philippe.waroquiers@skynet.be> - - * NEWS: Mention the new set|show may-call-functions. - * infcall.c (may_call_functions_p): New variable. - (show_may_call_functions_p): New function. - (call_function_by_hand_dummy): Throws an error if not - may-call-functions. - (_initialize_infcall): Call add_setshow_boolean_cmd for - may-call-functions. - -2019-04-25 Keith Seitz <keiths@redhat.com> - - PR c++/24367 - * cp-support.c (inspect_type): Don't attempt substitutions - of symbol with the same name. + * alpha-bsd-nat.c: Remove <sys/procfs.h> and "gregset.h" from + includes. + * alpha-bsd-nat.c (gregset_t, fpregset_t): Remove. + * alpha-bsd-nat.c (supply_gregset, fill_gregset, supply_fpregset, + fill_fpregset): Likewise. -2019-04-25 Tom Tromey <tromey@adacore.com> +2020-03-14 Kamil Rytarowski <n54@gmx.com> - PR gdb/24475: - * event-top.c (gdb_rl_callback_handler): Make "gdb_rl_expt" - static. + * alpha-bsd-nat.c (alpha_netbsd_nat_target): Inherit from + nbsd_nat_target instead of inf_ptrace_target. + * alpha-bsd-nat.c: Include "nbsd-nat.h", as we are now using + nbsd_nat_target. -2019-04-25 Tom Tromey <tromey@adacore.com> +2020-03-14 Kamil Rytarowski <n54@gmx.com> - * xml-support.c (struct gdb_xml_parser) <set_error>: Take an - rvalue reference. - (gdb_xml_start_element_wrapper, gdb_xml_end_element_wrapper) - (gdb_xml_parser::parse): Use std::move. - * python/python-internal.h (gdbpy_convert_exception): Take a const - reference. - * python/py-value.c (valpy_getitem, valpy_nonzero): Use - std::move. - * python/py-utils.c (gdbpy_convert_exception): Take a const - reference. - * python/py-inferior.c (infpy_write_memory, infpy_search_memory): - Use std::move. - * python/py-breakpoint.c (bppy_set_condition, bppy_set_commands): - Use std::move. - * mi/mi-main.c (mi_print_exception): Take a const reference. - * main.c (handle_command_errors): Take a const reference. - * linespec.c (parse_linespec): Use std::move. - * infcall.c (run_inferior_call): Use std::move. - (call_function_by_hand_dummy): Use std::move. - * exec.c (try_open_exec_file): Use std::move. - * exceptions.h (exception_print, exception_fprintf) - (exception_print_same): Update. - * exceptions.c (print_exception, exception_print) - (exception_fprintf, exception_print_same): Change parameters to - const reference. - * event-top.c (gdb_rl_callback_read_char_wrapper): Update. - * common/new-op.c: Use std::move. - * common/common-exceptions.h (struct gdb_exception): Add move - constructor. - (struct gdb_exception_error, struct gdb_exception_quit, struct - gdb_quit_bad_alloc): Change constructor to move constructor. - (throw_exception): Change parameter to rvalue reference. - * common/common-exceptions.c (throw_exception): Take rvalue - reference. - * cli/cli-interp.c (safe_execute_command): Use std::move. - * breakpoint.c (insert_bp_location, location_to_sals): Use - std::move. - -2019-04-25 Tom Tromey <tromey@adacore.com> - - * guile/scm-exception.c (gdbscm_scm_from_gdb_exception) - (gdbscm_throw_gdb_exception): Take a gdbscm_gdb_exception. - * guile/scm-block.c, guile/scm-breakpoint.c, guile/scm-cmd.c, - guile/scm-disasm.c, guile/scm-frame.c, guile/scm-lazy-string.c, - guile/scm-math.c, guile/scm-param.c, guile/scm-ports.c, - guile/scm-symbol.c, guile/scm-symtab.c, guile/scm-type.c, - guile/scm-value.c: Use unpack. - * guile/guile-internal.h (gdbscm_scm_from_gdb_exception): Take a - gdbscm_gdb_exception. - (gdbscm_throw_gdb_exception): Likewise. - (struct gdbscm_gdb_exception): New. - (unpack): New function. - (gdbscm_wrap): Use unpack. - -2019-04-25 Tom Tromey <tromey@adacore.com> - - * event-top.c (gdb_rl_callback_read_char_wrapper_noexcept) - (gdb_rl_callback_handler): Use std::move. - * common/common-exceptions.h (struct gdb_exception): Add move - assignment operator. - (throw_exception_sjlj): Change "exception" to const reference. - * common/common-exceptions.c (exceptions_state_mc_catch): Update. - (throw_exception_sjlj): Change "exception" to const reference. - -2019-04-25 Tom Tromey <tromey@adacore.com> - - * xml-support.c (gdb_xml_parser::gdb_xml_parser): Update. - * python/py-value.c (valpy_getitem, valpy_nonzero): Update. - * python/py-inferior.c (infpy_write_memory, infpy_search_memory): - Update. - * python/py-breakpoint.c (bppy_set_condition, bppy_set_commands): - Update. - * mi/mi-interp.c (mi_interp::exec): Update. - * linespec.c (parse_linespec): Update. - * infcall.c (run_inferior_call): Update. - * guile/scm-value.c (gdbscm_value_to_lazy_string): Update. - * guile/scm-symbol.c (gdbscm_lookup_symbol) - (gdbscm_lookup_global_symbol): Update. - * guile/scm-param.c (gdbscm_parameter_value): Update. - * guile/scm-frame.c (gdbscm_frame_read_register) - (gdbscm_frame_read_var): Update. - * guile/scm-breakpoint.c (gdbscm_register_breakpoint_x): Update. - * exec.c (try_open_exec_file): Update. - * event-top.c (gdb_rl_callback_read_char_wrapper_noexcept) - (gdb_rl_callback_handler): Update. - * common/common-exceptions.h (exception_none): Don't declare. - * common/common-exceptions.c (exception_none): Don't define. - (struct catcher) <exception>: Update. - * cli/cli-interp.c (safe_execute_command): Update. - * breakpoint.c (insert_bp_location, location_to_sals): Update. - -2019-04-25 Ali Tamur <tamur@google.com> - - * dwarf2read.c (skip_one_die): Add DW_FORM_strx. - (read_attribute_value): Likewise. - (dwarf2_read_addr_index): Update comment. - (read_str_index): Add DW_FORM_strx. - (dwarf2_string_attr): Likewise. - (dwarf2_const_value_attr): Likewise. - (dump_die_shallow): Likewise. - (dwarf2_fetch_constant_bytes): Likewise. - (skip_form_bytes): Likewise. - * testsuite/lib/dwarf.exp (_handle_DW_FORM): Add DW_FORM_strx. + * alpha-bsd-nat.c: Define _KERNTYPES to get the declaration of + register_t. -2019-04-25 Sergio Durigan Junior <sergiodj@redhat.com> +2020-03-14 Kamil Rytarowski <n54@gmx.com> - PR corefiles/11608 - PR corefiles/18187 - * linux-tdep.c (dump_mapping_p): Add new parameters ADDR and - OFFSET. Verify if current mapping contains an ELF header. - (linux_find_memory_regions_full): Adjust call to - dump_mapping_p. + * arm-nbsd-nat.c (fetch_register): New variable lwp and pass + it to the ptrace call. + * arm-nbsd-nat.c (fetch_fp_register): Likewise. + * arm-nbsd-nat.c (fetch_fp_regs): Likewise. + * arm-nbsd-nat.c (store_register): Likewise. + * arm-nbsd-nat.c (store_regs): Likewise. + * arm-nbsd-nat.c (store_fp_register): Likewise. + * arm-nbsd-nat.c (store_fp_regs): Likewise. -2019-04-25 Sandra Loosemore <sandra@codesourcery.com> - Kang Li <kanglictf@gmail.com> +2020-03-14 Kamil Rytarowski <n54@gmx.com> - PR gdb/21600 + * arm-nbsd-nat.c (arm_netbsd_nat_target): Inherit from + nbsd_nat_target instead of inf_ptrace_target. + * arm-nbsd-nat.c: Include "nbsd-nat.h", as we are now using + nbsd_nat_target. - * dwarf2-frame.c (read_initial_length): Be consistent about using - unsigned representation of length. - (decode_frame_entry_1): Likewise. Check for wraparound of - end pointer as well as buffer overflow. +2020-03-14 Kamil Rytarowski <n54@gmx.com> -2019-04-24 Sergio Durigan Junior <sergiodj@redhat.com> + * x86-bsd-nat.c (x86bsd_dr_get): New variable lwp and pass + it to the ptrace call. + * x86-bsd-nat.c (x86bsd_dr_set): Likewise. - * aarch64-tdep.c (aarch64_gdbarch_init): Use "pulongest" to print - "vq". +2020-03-14 Kamil Rytarowski <n54@gmx.com> -2019-04-24 Tom Tromey <tromey@adacore.com> + * vax-bsd-nat.c (vaxbsd_supply_gregset): New variable lwp and pass + it to the ptrace call. + * vax-bsd-nat.c (vaxbsd_collect_gregset): Likewise. - * amd64-tdep.c (amd64_has_unaligned_fields): Ignore bitfields. +2020-03-14 Kamil Rytarowski <n54@gmx.com> -2019-04-23 Andrew Burgess <andrew.burgess@embecosm.com> + * vax-bsd-nat.c (vaxbsd_supply_gregset): Cast gregs to const + gdb_byte *. + * vax-bsd-nat.c (vaxbsd_collect_gregset): Cast gregs to void *. - * s12z-tdep.c (s12z_unwind_pc): Delete. - (s12z_unwind_sp): Delete. - (s12z_gdbarch_init): Don't register deleted functions with - gdbarch. +2020-03-14 Kamil Rytarowski <n54@gmx.com> -2019-04-23 Andrew Burgess <andrew.burgess@embecosm.com> + * vax-bsd-nat.c (vax_bsd_nat_target): Inherit from nbsd_nat_target + instead of inf_ptrace_target. + * vax-bsd-nat.c: Include "nbsd-nat.h", as we are now using + nbsd_nat_target. - * rl78-tdep.c (rl78_unwind_sp): Delete. - (rl78_gdbarch_init): Don't register deleted function with gdbarch. +2020-03-14 Kamil Rytarowski <n54@gmx.com> -2019-04-23 Andrew Burgess <andrew.burgess@embecosm.com> + * mips-nbsd-nat.c: Define _KERNTYPES to get the declaration of + register_t. - * xstormy16-tdep.c (xstormy16_unwind_sp): Delete. - (xstormy16_unwind_pc): Delete. - (xstormy16_dummy_id): Delete. - (xstormy16_gdbarch_init): Don't register deleted functions with - gdbarch. +2020-03-14 Kamil Rytarowski <n54@gmx.com> -2019-04-23 Andrew Burgess <andrew.burgess@embecosm.com> + * ppc-nbsd-nat.c: Define _KERNTYPES to get the declaration of + register_t. - * vax-tdep.c (vax_unwind_pc): Delete. - (vax_gdbarch_init): Don't register deleted function with gdbarch. +2020-03-14 Kamil Rytarowski <n54@gmx.com> -2019-04-23 Andrew Burgess <andrew.burgess@embecosm.com> + * vax-bsd-nat.c: Define _KERNTYPES to get the declaration of + register_t. - * v850-tdep.c (v850_unwind_sp): Delete. - (v850_unwind_pc): Delete. - (v850_dummy_id): Delete. - (v850_gdbarch_init): Don't register deleted functions with - gdbarch. +2020-03-13 Tom Tromey <tom@tromey.com> -2019-04-23 Andrew Burgess <andrew.burgess@embecosm.com> + * value.h (val_print): Don't declare. + * valprint.h (val_print_array_elements) + (val_print_scalar_formatted, generic_val_print): Don't declare. + * valprint.c (generic_val_print_array): Take a struct value. + (generic_val_print_ptr, generic_val_print_memberptr) + (generic_val_print_bool, generic_val_print_int) + (generic_val_print_char, generic_val_print_complex) + (generic_val_print): Remove. + (generic_value_print): Update. + (do_val_print): Remove unused parameters. Don't call + la_val_print. + (val_print): Remove. + (common_val_print): Update. Don't call value_check_printable. + (val_print_scalar_formatted, val_print_array_elements): Remove. + * rust-lang.c (rust_val_print): Remove. + (rust_language_defn): Update. + * p-valprint.c (pascal_val_print): Remove. + (pascal_value_print_inner): Update. + (pascal_object_print_val_fields, pascal_object_print_val): + Remove. + (pascal_object_print_static_field): Update. + * p-lang.h (pascal_val_print): Don't declare. + * p-lang.c (pascal_language_defn): Update. + * opencl-lang.c (opencl_language_defn): Update. + * objc-lang.c (objc_language_defn): Update. + * m2-valprint.c (m2_print_unbounded_array, m2_val_print): Remove. + * m2-lang.h (m2_val_print): Don't declare. + * m2-lang.c (m2_language_defn): Update. + * language.h (struct language_defn) <la_val_print>: Remove. + * language.c (unk_lang_value_print_inner): Rename. Change + argument types. + (unknown_language_defn, auto_language_defn): Update. + * go-valprint.c (go_val_print): Remove. + * go-lang.h (go_val_print): Don't declare. + * go-lang.c (go_language_defn): Update. + * f-valprint.c (f_val_print): Remove. + * f-lang.h (f_value_print): Don't declare. + * f-lang.c (f_language_defn): Update. + * d-valprint.c (d_val_print): Remove. + * d-lang.h (d_value_print): Don't declare. + * d-lang.c (d_language_defn): Update. + * cp-valprint.c (cp_print_value_fields) + (cp_print_value_fields_rtti, cp_print_value): Remove. + (cp_print_static_field): Update. + * c-valprint.c (c_val_print_array, c_val_print_ptr) + (c_val_print_struct, c_val_print_union, c_val_print_int) + (c_val_print_memberptr, c_val_print): Remove. + * c-lang.h (c_val_print_array, cp_print_value_fields) + (cp_print_value_fields_rtti): Don't declare. + * c-lang.c (c_language_defn, cplus_language_defn) + (asm_language_defn, minimal_language_defn): Update. + * ada-valprint.c (ada_val_print_ptr, ada_val_print_num): Remove. + (ada_val_print_enum): Take a struct value. + (ada_val_print_flt, ada_val_print_array, ada_val_print_1) + (ada_val_print): Remove. + (ada_value_print_1): Update. + (printable_val_type): Remove. + * ada-lang.h (ada_val_print): Don't declare. + * ada-lang.c (ada_language_defn): Update. - * tilegx-tdep.c (tilegx_unwind_sp): Delete. - (tilegx_unwind_pc): Delete. - (tilegx_unwind_dummy_id): Delete. - (tilegx_gdbarch_init): Don't register deleted functions with - gdbarch. +2020-03-13 Tom Tromey <tom@tromey.com> -2019-04-23 Andrew Burgess <andrew.burgess@embecosm.com> + * valprint.c (do_val_print): Update. + * python/python-internal.h (gdbpy_apply_val_pretty_printer): Take + a struct value. + (value_to_value_object_no_release): Declare. + * python/py-value.c (value_to_value_object_no_release): New + function. + * python/py-prettyprint.c (gdbpy_apply_val_pretty_printer): Take a + struct value. + * guile/scm-value.c (vlscm_scm_from_value_no_release): New + function. + * guile/scm-pretty-print.c (gdbscm_apply_val_pretty_printer): Take + a struct value. + * guile/guile-internal.h (vlscm_scm_from_value_no_release): + Declare. + (gdbscm_apply_val_pretty_printer): Take a struct value. + * extension.h (apply_ext_lang_val_pretty_printer): Take a struct + value. + * extension.c (apply_ext_lang_val_pretty_printer): Take a struct + value. + * extension-priv.h (struct extension_language_ops) + <apply_val_pretty_printer>: Take a struct value. + * cp-valprint.c (cp_print_value): Create a struct value. + (cp_print_value): Update. - * tic6x-tdep.c (tic6x_unwind_sp): Delete. - (tic6x_dummy_id): Delete. - (tic6x_gdbarch_init): Don't register deleted functions with - gdbarch. +2020-03-13 Tom Tromey <tom@tromey.com> -2019-04-23 Andrew Burgess <andrew.burgess@embecosm.com> + * ada-valprint.c (print_field_values): Call common_val_print. - * sparc-tdep.c (sparc_unwind_pc): Delete. - (sparc32_gdbarch_init): Don't register deleted function with - gdbarch. +2020-03-13 Tom Tromey <tom@tromey.com> -2019-04-23 Andrew Burgess <andrew.burgess@embecosm.com> + * ada-valprint.c (val_print_packed_array_elements): Remove + bitoffset and val parameters. Call common_val_print. + (ada_val_print_string): Remove offset, address, and original_value + parameters. + (ada_val_print_array): Update. + (ada_value_print_array): New function. + (ada_value_print_1): Call it. - * sh-tdep.c (sh_unwind_sp): Delete. - (sh_unwind_pc): Delete. - (sh_dummy_id): Delete. - (sh_gdbarch_init): Don't register deleted functions with - gdbarch. +2020-03-13 Tom Tromey <tom@tromey.com> -2019-04-23 Andrew Burgess <andrew.burgess@embecosm.com> + * ada-valprint.c (ada_value_print): Use common_val_print. - * score-tdep.c (score_unwind_sp): Delete. - (score_unwind_pc): Delete. - (score_dummy_id): Delete. - (score_gdbarch_init): Don't register deleted functions with - gdbarch. +2020-03-13 Tom Tromey <tom@tromey.com> -2019-04-23 Andrew Burgess <andrew.burgess@embecosm.com> + * ada-valprint.c (ada_val_print_ref): Use common_val_print. - * rx-tdep.c (rx_unwind_pc): Delete. - (rx_unwind_sp): Delete. - (rx_dummy_id): Delete. - (rx_gdbarch_init): Don't register deleted functions with - gdbarch. Update comment. +2020-03-13 Tom Tromey <tom@tromey.com> -2019-04-23 Andrew Burgess <andrew.burgess@embecosm.com> + * ada-valprint.c (ada_value_print_num): New function. + (ada_value_print_1): Use it. - * rs6000-tdep.c (rs6000_unwind_pc): Delete. - (rs6000_dummy_id): Delete. - (rs6000_gdbarch_init): Don't register deleted functions with - gdbarch. +2020-03-13 Tom Tromey <tom@tromey.com> -2019-04-23 Andrew Burgess <andrew.burgess@embecosm.com> + * ada-valprint.c (ada_value_print_1) <TYPE_CODE_FLT>: Rewrite. - * or1k-tdep.c (or1k_dummy_id): Delete. - (or1k_gdbarch_init): Don't register deleted function with gdbarch. +2020-03-13 Tom Tromey <tom@tromey.com> -2019-04-23 Andrew Burgess <andrew.burgess@embecosm.com> + * ada-valprint.c (ada_value_print_ptr): New function. + (ada_value_print_1): Use it. - * nios2-tdep.c (nios2_dummy_id): Delete. - (nios2_unwind_sp): Delete. - (nios2_gdbarch_init): Don't register deleted functions with - gdbarch. +2020-03-13 Tom Tromey <tom@tromey.com> -2019-04-23 Andrew Burgess <andrew.burgess@embecosm.com> + * ada-valprint.c (ada_val_print_gnat_array): Take a struct value; + call common_val_print. + (ada_val_print_1): Update. + (ada_value_print_1): New function. + (ada_value_print_inner): Rewrite. - * nds32-tdep.c (nds32_dummy_id): Delete. - (nds32_unwind_pc): Delete. - (nds32_unwind_sp): Delete. - (nds32_gdbarch_init): Don't register deleted functions with - gdbarch. +2020-03-13 Tom Tromey <tom@tromey.com> -2019-04-23 Andrew Burgess <andrew.burgess@embecosm.com> + * cp-valprint.c (cp_print_value_fields): Update. + (cp_print_value): New function. - * msp430-tdep.c (msp430_unwind_pc): Delete. - (msp430_unwind_sp): Delete. - (msp430_dummy_id): Delete. - (msp430_gdbarch_init): Don't register deleted functions with - gdbarch. +2020-03-13 Tom Tromey <tom@tromey.com> -2019-04-23 Andrew Burgess <andrew.burgess@embecosm.com> + * m2-valprint.c (m2_value_print_inner): Use + cp_print_value_fields. + * cp-valprint.c (cp_print_value_fields): New function. + * c-valprint.c (c_value_print_struct): New function. + (c_value_print_inner): Use c_value_print_struct. + * c-lang.h (cp_print_value_fields): Declare. - * moxie-tdep.c (moxie_unwind_sp): Delete. - (moxie_unwind_pc): Delete. - (moxie_dummy_id): Delete. - (moxie_gdbarch_init): Don't register deleted functions with - gdbarch. +2020-03-13 Tom Tromey <tom@tromey.com> -2019-04-23 Andrew Burgess <andrew.burgess@embecosm.com> + * c-valprint.c (c_value_print_array): New function. + (c_value_print_inner): Use it. - * mn10300-tdep.c (mn10300_dummy_id): Delete. - (mn10300_unwind_pc): Delete. - (mn10300_unwind_sp): Delete. - (mn10300_push_dummy_call): Use gdbarch_unwind_sp not - mn10300_unwind_sp. - (mn10300_frame_unwind_init): Don't register deleted functions with - gdbarch. +2020-03-13 Tom Tromey <tom@tromey.com> -2019-04-23 Andrew Burgess <andrew.burgess@embecosm.com> + * c-valprint.c (c_value_print_memberptr): New function. + (c_value_print_inner): Use it. - * mep-tdep.c (mep_unwind_pc): Delete. - (mep_unwind_sp): Delete. - (mep_dummy_id): Delete. - (mep_gdbarch_init): Don't register deleted functions with - gdbarch. +2020-03-13 Tom Tromey <tom@tromey.com> -2019-04-23 Andrew Burgess <andrew.burgess@embecosm.com> + * c-valprint.c (c_value_print_int): New function. + (c_value_print_inner): Use it. - * m68hc11-tdep.c (m68hc11_unwind_pc): Delete. - (m68hc11_unwind_sp): Delete. - (m68hc11_gdbarch_init): Don't register deleted functions with - gdbarch. +2020-03-13 Tom Tromey <tom@tromey.com> -2019-04-23 Andrew Burgess <andrew.burgess@embecosm.com> + * c-valprint.c (c_value_print_ptr): New function. + (c_value_print_inner): Use it. - * m32r-tdep.c (m32r_unwind_sp): Delete. - (m32r_unwind_pc): Delete. - (m32r_dummy_id): Delete. - (m32r_gdbarch_init): Don't register deleted functions with - gdbarch. +2020-03-13 Tom Tromey <tom@tromey.com> -2019-04-23 Andrew Burgess <andrew.burgess@embecosm.com> + * c-valprint.c (c_value_print_inner): Rewrite. - * m32c-tdep.c (m32c_unwind_pc): Delete. - (m32c_unwind_sp): Delete. - (m32c_dummy_id): Delete. - (m32c_gdbarch_init): Don't register deleted functions with - gdbarch. +2020-03-13 Tom Tromey <tom@tromey.com> -2019-04-23 Andrew Burgess <andrew.burgess@embecosm.com> + * valprint.c (generic_value_print_complex): New function. + (generic_value_print): Use it. - * gdb/lm32-tdep.c (lm32_unwind_sp): Delete. - (lm32_unwind_pc): Delete. - (lm32_dummy_id): Delete. - (lm32_gdbarch_init): Don't register deleted functions with - gdbarch. +2020-03-13 Tom Tromey <tom@tromey.com> -2019-04-23 Andrew Burgess <andrew.burgess@embecosm.com> + * valprint.c (generic_val_print_float): Don't call + val_print_scalar_formatted. + (generic_val_print, generic_value_print): Update. - * gdb/iq2000-tdep.c (iq2000_unwind_sp): Delete. - (iq2000_unwind_pc): Delete. - (iq2000_dummy_id): Delete. - (iq2000_gdbarch_init): Don't register deleted functions with - gdbarch. +2020-03-13 Tom Tromey <tom@tromey.com> -2019-04-23 Andrew Burgess <andrew.burgess@embecosm.com> + * valprint.c (generic_value_print_char): New function + (generic_value_print): Use it. - * nds32-tdep.c (nds32_type_align): Delete. - (nds32_push_dummy_call): Use type_align instead. +2020-03-13 Tom Tromey <tom@tromey.com> -2019-04-23 Andrew Burgess <andrew.burgess@embecosm.com> + * valprint.c (generic_value_print_int): New function. + (generic_value_print): Use it. - * arm-tdep.c (arm_type_align): Only handle vector override case. - (arm_push_dummy_call): Use type_align. - (arm_gdbarch_init): Register arm_type_align gdbarch function. +2020-03-13 Tom Tromey <tom@tromey.com> -2019-04-23 Andrew Burgess <andrew.burgess@embecosm.com> + * valprint.c (generic_value_print_bool): New function. + (generic_value_print): Use it. - * aarch64-tdep.c (aarch64_type_align): Only handle vector override - case. - (pass_on_stack): Use type_align. - (aarch64_gdbarch_init): Register aarch64_type_align gdbarch - function. +2020-03-13 Tom Tromey <tom@tromey.com> -2019-04-23 Tom Tromey <tromey@adacore.com> + * valprint.c (generic_val_print_func): Simplify. + (generic_val_print, generic_value_print): Update. - * dwarf2read.c (line_header::file_name_at): Remove unused - overload. +2020-03-13 Tom Tromey <tom@tromey.com> -2019-04-23 Tom de Vries <tdevries@suse.de> + * valprint.c (generic_val_print_flags): Remove. + (generic_val_print, generic_value_print): Update. + (val_print_type_code_flags): Add original_value parameter. - PR gdb/24438 - * contrib/cc-with-tweaks.sh: Remove superfluous .alt file after dwz - invocation. - - -2019-03-27 Ali Tamur <tamur@google.com> - - * dwarf2-frame.c(dwarf_expr_executor::get_addr_index): Update comment - * dwarf2expr.c(dwarf_expr_context::execute_stack_op): Add DW_OP_addrx - * dwarf2expr.h(dwarf_expr_context::offset): Update comment - (dwarf_expr_context::get_addr_index): Likewise - * dwarf2loc.c(dwarf_evaluate_loc_desc::get_addr_index): Likewise - (symbol_needs_eval_context::get_addr_index): Likewise - (disassemble_dwarf_expression): Add DW_OP_addrx - * dwarf2read.c(attr_value_as_address): Add DW_FORM_addrx - (read_cutu_die_from_dwo): Update comment - (skip_one_die): Add DW_FORM_addrx - (read_attribute_value): Likewise - (var_decode_location): Add DW_OP_addrx - (dwarf2_const_value_attr): Add DW_FORM_addrx - (dump_die_shallow): Likewise - (dwarf2_fetch_constant_bytes): Likewise - (decode_locdesc): Add DW_OP_addrx - (skip_form_bytes): Add DW_FORM_addrx - -2019-04-22 Ali Tamur <tamur@google.com> - - * MAINTAINERS (Write After Approval): Add self. - -2019-04-22 Simon Marchi <simon.marchi@efficios.com> - - * solib-svr4.c (get_svr4_info): Add pspace parameter. - (svr4_keep_data_in_core): Pass current_program_space to get_svr4_info. - (open_symbol_file_object): Likewise. - (svr4_default_sos): Add info parameter. - (svr4_read_so_list): Likewise. - (svr4_current_sos_direct): Adjust functions calls to pass down - info. - (svr4_current_sos_1): Add info parameter. - (svr4_current_sos): Call get_svr4_info, pass info down to - svr4_current_sos_1. - (svr4_fetch_objfile_link_map): Pass objfile->pspace to - get_svr4_info. - (svr4_in_dynsym_resolve_code): Pass current_program_space to - get_svr4_info. - (probes_table_htab_remove_objfile_probes): Pass objfile->pspace - to get_svr4_info. - (probes_table_remove_objfile_probes): Likewise. - (register_solib_event_probe): Add info parameter. - (solist_update_incremental): Pass info parameter down to - svr4_read_so_list. - (disable_probes_interface): Add info parameter. - (svr4_handle_solib_event): Pass current_program_space to - get_svr4_info. Adjust disable_probes_interface cleanup. - (svr4_create_probe_breakpoints): Add info parameter, pass it - down to register_solib_event_probe. - (svr4_create_solib_event_breakpoints): Add info parameter, - pass it down to svr4_create_probe_breakpoints. - (enable_break): Pass info down to - svr4_create_solib_event_breakpoints. - (svr4_solib_create_inferior_hook): Pass current_program_space to - get_svr4_info. - (svr4_clear_solib): Likewise. - -2019-04-22 Pedro Alves <palves@redhat.com> - - * solib-svr4.c (svr4_free_objfile_observer): New. - (probe_and_action::objfile): New field. - (probes_table_htab_remove_objfile_probes) - (probes_table_remove_objfile_probes): New functions. - (register_solib_event_probe): Add 'objfile' parameter. Store it - in the new probe_and_action. Don't store the probe in 'lookup'. - (svr4_create_probe_breakpoints): Pass objfile to - register_solib_event_probe. - (_initialize_svr4_solib): Register a free_objfile observer. - -2019-04-19 Tom Tromey <tom@tromey.com> - - * common/queue.h: Remove. - -2019-04-19 Tom Tromey <tom@tromey.com> - - * event-loop.c: Don't include "common/queue.h". - -2019-04-19 Tom Tromey <tom@tromey.com> - - * remote.c (remote_target): Use delete. - * remote-notif.h: Include <list>, not "common/queue.h". - (notif_client_p): Remove typedef. - (remote_notif_state): Add constructor, destructor, initializer. - <notif_queue>: Now a std::list. - (remote_notif_state_xfree): Don't declare. - * remote-notif.c (remote_notif_process, handle_notification) - (remote_notif_state_allocate): Update. - (~remote_notif_state): Rename from remote_notif_state_xfree. - -2019-04-19 Tom Tromey <tom@tromey.com> - - * symfile.c (reread_symbols): Update. - * objfiles.c (objfile_register_static_link) - (objfile_lookup_static_link): Update - (~objfile) Don't delete static_links. - * objfiles.h (struct objfile) <static_links>: Now an htab_up. - -2019-04-19 Tom Tromey <tom@tromey.com> - - * type-stack.h (struct type_stack) <insert>: Constify string. - * type-stack.c (type_stack::insert): Constify string. - * gdbtypes.h (lookup_template_type): Update. - (address_space_name_to_int): Update. - * gdbtypes.c (address_space_name_to_int): Make space_identifier - const. - (lookup_template_type): Make name const. - * c-exp.y: Update rules. - (lex_one_token, classify_name, classify_inner_name) - (c_print_token): Update. - * p-exp.y: Update rules. - (yylex): Update. - * f-exp.y: Update rules. - (yylex): Update. - * d-exp.y: Update rules. - (lex_one_token, classify_name, classify_inner_name): Update. - * parse.c (write_dollar_variable, copy_name): Return std::string. - * parser-defs.h (copy_name): Change return type. - * m2-exp.y: Update rules. - (yylex): Update. - * go-exp.y (lex_one_token): Update. - Update rules. - (classify_unsafe_function, classify_packaged_name) - (classify_name, yylex): Update. +2020-03-13 Tom Tromey <tom@tromey.com> -2019-04-19 Sergei Trofimovich <siarheit@google.com> + * valprint.c (generic_val_print): Update. + (generic_value_print): Update. + * valprint.c (generic_val_print_enum): Don't call + val_print_scalar_formatted. - * configure.ac: add --enable-source-highlight switch. - * configure: Regenerate. - * top.c (print_gdb_version): plumb --enable-source-highlight - status to "show configuration". +2020-03-13 Tom Tromey <tom@tromey.com> -2019-04-19 Tom Tromey <tromey@adacore.com> + * valprint.c (generic_value_print): Call generic_value_print_ptr. + * valprint.c (generic_value_print_ptr): New function. - * ada-lang.c (ada_is_variant_part, ada_to_fixed_type_1): - Check ADA_TYPE_P. - (empty_record, ada_template_to_fixed_record_type_1) - (template_to_static_fixed_type) - (to_record_with_fixed_variant_part): Use INIT_NONE_SPECIFIC. - * cp-abi.c (value_rtti_type): Check HAVE_CPLUS_STRUCT. - * gdbtypes.h (INIT_NONE_SPECIFIC, ADA_TYPE_P): New - macros. +2020-03-13 Tom Tromey <tom@tromey.com> -2019-04-19 Ilya Yu. Malakhov <malakhov@mcst.ru> + * valprint.c (generic_value_print): Rewrite. - PR symtab/24423: - * source.c (print_source_lines_base): Advance "iter" when a - control character is seen. +2020-03-13 Tom Tromey <tom@tromey.com> -2019-04-19 Philippe Waroquiers <philippe.waroquiers@skynet.be> + * p-valprint.c (pascal_object_print_value_fields) + (pascal_object_print_value): New functions. - * inferior.h (struct infcall_suspend_state_deleter): - Catch exception in destructor to avoid crash. +2020-03-13 Tom Tromey <tom@tromey.com> -2019-04-19 Philippe Waroquiers <philippe.waroquiers@skynet.be> + * p-valprint.c (pascal_value_print_inner): Rewrite. - * cli/cli-cmds.c (_initialize_cli_cmds): Move "shell" "!" alias - close to the add_com "shell". +2020-03-13 Tom Tromey <tom@tromey.com> -2019-04-18 Tom Tromey <tromey@adacore.com> + * f-valprint.c (f_value_print_innner): Rewrite. - * process-stratum-target.h (class process_stratum_target) - <stratum>: Add "final". +2020-03-13 Tom Tromey <tom@tromey.com> -2019-04-17 Tom Tromey <tromey@adacore.com> + * m2-valprint.c (m2_print_unbounded_array): New overload. + (m2_print_unbounded_array): Update. + (m2_print_array_contents): Take a struct value. + (m2_value_print_inner): Rewrite. - * dwarf2read.c (dwarf2_init_complex_target_type): Check "tt" - against nullptr before use. +2020-03-13 Tom Tromey <tom@tromey.com> -2019-04-17 Alan Hayward <alan.hayward@arm.com> + * d-valprint.c (dynamic_array_type): Call d_value_print_inner. + (d_value_print_inner): New function. + * d-lang.h (d_value_print_inner): Declare. + * d-lang.c (d_language_defn): Use d_value_print_inner. - * nat/linux-waitpid.c (linux_debug): Call debug_vprintf. +2020-03-13 Tom Tromey <tom@tromey.com> -2019-04-17 Jim Wilson <jimw@sifive.com> - Andrew Burgess <andrew.burgess@embecosm.com> + * go-valprint.c (go_value_print_inner): New function. + * go-lang.h (go_value_print_inner): Declare. + * go-lang.c (go_language_defn): Use go_value_print_inner. - * riscv-tdep.c (riscv_breakpoint_kind_from_pc): Hanndle case where - code read might fail, assume 4-byte breakpoint in that case. +2020-03-13 Tom Tromey <tom@tromey.com> -2019-04-15 Leszek Swirski <leszeks@google.com> + * rust-lang.c (val_print_struct, rust_print_enum): Use the value + API. + (rust_val_print): Rewrite. + (rust_value_print_inner): New function, from rust_val_print. + (rust_language_defn): Use rust_value_print_inner. - * amd64-tdep.c (amd64_classify_aggregate): Use cp_pass_by_reference - rather than a hand-rolled POD check when checking for forced MEMORY - classification. +2020-03-13 Tom Tromey <tom@tromey.com> -2019-04-15 Alan Hayward <alan.hayward@arm.com> + * ada-valprint.c (ada_value_print_inner): New function. + * ada-lang.h (ada_value_print_inner): Declare. + * ada-lang.c (ada_language_defn): Use ada_value_print_inner. - * aarch64-linux-nat.c (store_sveregs_to_thread): Set vector length. - * nat/aarch64-sve-linux-ptrace.c (aarch64_sve_set_vq): New - function. - (aarch64_sve_regs_copy_to_reg_buf): Remove VG checks. - (aarch64_sve_regs_copy_from_reg_buf): Likewise. - * nat/aarch64-sve-linux-ptrace.h (aarch64_sve_set_vq): New - declaration. +2020-03-13 Tom Tromey <tom@tromey.com> -2019-04-15 Alan Hayward <alan.hayward@arm.com> + * f-valprint.c (f_value_print_innner): New function. + * f-lang.h (f_value_print_innner): Declare. + * f-lang.c (f_language_defn): Use f_value_print_innner. - * aarch64-linux-nat.c - (aarch64_linux_nat_target::thread_architecture): Add override. - * aarch64-tdep.c (aarch64_gdbarch_init): Ensure different tdesc for - each VQ. - -2019-04-15 Alan Hayward <alan.hayward@arm.com> - - * aarch64-tdep.c (aarch64_gdbarch_init): Move gdbarch lookup. - -2019-04-13 Andrew Burgess <andrew.burgess@embecosm.com> - - * dwarf2read.c (dwarf2_init_complex_target_type): Handle complex - target types of size 96-bits, add some additional comments, and - check that the builtin type we found was the correct size. - -2019-04-12 Eli Zaretskii <eliz@gnu.org> - - * utils.c (prompt_for_continue): Don't restore the styling at the - end, as applied_style has the wrong value. This fixes styling in - long lists of file names that are interrupted by the "Continue?" - prompt. - -2019-04-12 Andrew Burgess <andrew.burgess@embecosm.com> - - * ada-lang.c (ada_language_defn): Remove use of LANG_MAGIC. - * c-lang.c (c_language_defn): Likewise. - (cplus_language_defn): Likewise. - (asm_language_defn): Likewise. - (minimal_language_defn): Likewise. - * d-lang.c (d_language_defn): Likewise. - * f-lang.c (f_language_defn): Likewise. - * go-lang.c (go_language_defn): Likewise. - * language.c (unknown_language_defn): Likewise. - (auto_language_defn): Likewise. - * language.h (struct language_defn): Remove la_magic field. - (LANG_MAGIC): Delete. - * m2-lang.c (m2_language_defn): Remove use of LANG_MAGIC. - * objc-lang.c (objc_language_defn): Likewise. - * opencl-lang.c (opencl_language_defn): Likewise. - * p-lang.c (pascal_language_defn): Likewise. - * rust-lang.c (rust_language_defn): Likewise. - -2019-04-11 Andrew Burgess <andrew.burgess@embecosm.com> - - * riscv-tdep.c (riscv_type_align): New function. - (riscv_type_alignment): Delete. - (riscv_arg_location): Use 'type_align'. - (riscv_gdbarch_init): Register riscv_type_align gdbarch function. - -2019-04-11 Andrew Burgess <andrew.burgess@embecosm.com> - - * gdbtypes.c (type_align): A struct with no non-static fields also - has alignment of 1. - -2019-04-11 Andrew Burgess <andrew.burgess@embecosm.com> - - * riscv-tdep.c (riscv_call_arg_complex_float): Fix offset of first - component to 0. - (riscv_struct_info::riscv_struct_info): Initialise m_offsets - member. - (riscv_struct_info::analyse): New implementation using new - analyse_inner member function. - (riscv_struct_info::field_offset): New member function. - (riscv_struct_info::m_offsets): New member variable. - (riscv_struct_info::analyse_inner): New private member function, - takes the old implementation of riscv_struct_info::analyse but - extended to track field offsets. - (riscv_call_arg_struct): Update the struct folding special cases - to handle cases where empty C++ structs, which are non-zero - length, are found. - (riscv_arg_location): Initialise the length of each location, a - non-zero length now indicates the location is in use. - (riscv_push_dummy_call): Allow for the first location having a - non-zero offset when setting up arguments. - (riscv_return_value): Likewise, but for return values. - -2019-04-11 Tom Tromey <tromey@adacore.com> - - * utils.c (internal_vproblem): Make "msg" const. - -2019-04-11 Alan Hayward <alan.hayward@arm.com> - - * aarch64-tdep.c (aarch64_analyze_prologue_test): Reset saved regs. - * trad-frame.c (trad_frame_reset_saved_regs): New function. - (trad_frame_alloc_saved_regs): Call trad_frame_reset_saved_regs. - * trad-frame.h (trad_frame_reset_saved_regs): New declaration. +2020-03-13 Tom Tromey <tom@tromey.com> -2019-04-10 Kevin Buettner <kevinb@redhat.com> + * p-valprint.c (pascal_value_print_inner): New function. + * p-lang.h (pascal_value_print_inner): Declare. + * p-lang.c (pascal_language_defn): Use pascal_value_print_inner. - * amd64-linux-nat.c (amd64_linux_collect_native_gregset): New - function. - (fill_gregset): Call amd64_linux_collect_native_gregset instead - of amd64_collect_native_gregset. - (amd64_linux_nat_target::store_registers): Likewise. - -2019-04-10 Tom Tromey <tom@tromey.com> - - * symtab.c (lookup_global_symbol_from_objfile) - (lookup_symbol_in_objfile_from_linkage_name): Use the iterator. - * objfiles.h (class separate_debug_iterator): New. - (class separate_debug_range): New. - (struct objfile) <separate_debug_objfiles>: New method. - (objfile_separate_debug_iterate): Don't declare. - * objfiles.c (separate_debug_iterator::operator++): Rename from - objfile_separate_debug_iterate. - (objfile_relocate, objfile_rebase, objfile_has_symbols): Use the - iterator. - * minsyms.c (lookup_minimal_symbol_by_pc_section): Use the - iterator. - -2019-04-10 Tom Tromey <tom@tromey.com> - - * symfile.c (reread_symbols): Remove old comment. - * objfiles.c (free_all_objfiles): Fix a typo. - -2019-04-10 Tom Tromey <tom@tromey.com> - - * ia64-tdep.c (ia64_get_dyn_info_list): Use foreach. - * minsyms.c (lookup_minimal_symbol): Use foreach. - (lookup_minimal_symbol_text, lookup_minimal_symbol_by_pc_name) - (lookup_minimal_symbol_solib_trampoline): Likewise. - * symfile.c (reread_symbols): Use foreach. +2020-03-13 Tom Tromey <tom@tromey.com> -2019-04-09 Ivan Begert <ivanbegert@gmail.com> - Tom Tromey <tromey@adacore.com> + * m2-valprint.c (m2_value_print_inner): New function. + * m2-lang.h (m2_value_print_inner): Declare. + * m2-lang.c (m2_language_defn): Use m2_value_print_inner. - PR rust/24414: - * rust-exp.y (rust_parser::lex_number): Use strtoulst. - (rust_lex_int_test): Change "value" to be LONGEST. - (rust_lex_tests): Add test for long integer literal. +2020-03-13 Tom Tromey <tom@tromey.com> -2019-04-09 Tom Tromey <tromey@adacore.com> + * opencl-lang.c (opencl_language_defn): Use c_value_print_inner. + * objc-lang.c (objc_language_defn): Use c_value_print_inner. + * c-valprint.c (c_value_print_inner): New function. + * c-lang.h (c_value_print_inner): Declare. + * c-lang.c (c_language_defn, cplus_language_defn) + (asm_language_defn, minimal_language_defn): Use + c_value_print_inner. - * remote.c (remote_target::remote_add_inferior): Change fake_pid_p - to bool. - (extended_remote_target::attach): Update. - (remote_target::remote_notice_new_inferior): Update. - (remote_target::add_current_inferior_and_thread): Update. - * inferior.c (exit_inferior_1): Use "false". - * corelow.c (add_to_thread_list): Make fake_pid_p bool. +2020-03-13 Tom Tromey <tom@tromey.com> -2019-04-09 Simon Marchi <simon.marchi@efficios.com> + * p-valprint.c (pascal_object_print_value_fields): Now static. + * p-lang.h (pascal_object_print_value_fields): Don't declare. - * infcmd.c (run_command_1): Pass -qualified to tbreak when using - the "start" command. +2020-03-13 Tom Tromey <tom@tromey.com> -2019-04-08 Kevin Buettner <kevinb@redhat.com> + * c-valprint.c (c_val_print_array): Simplify. - * python/py-inferior.c (infpy_thread_from_thread_handle): - Adjust comments to reflect renaming of thread_from_thread_handle - to thread_from_handle. Adjust keywords. Fix type error message. - (inferior_object_methods): Add thread_from_handle. Retain - thread_from_thread_handle, but mark it as deprecated. +2020-03-13 Tom Tromey <tom@tromey.com> -2019-04-08 Kevin Buettner <kevinb@redhat.com> + * valprint.c (value_print_array_elements): New function. + * valprint.h (value_print_array_elements): Declare. - * gdbthread.h (find_thread_by_handle): Revise declaration. - * thread.c (find_thread_by_handle): Likewise. Adjust - implementation too. - * python/py-inferior.c (infpy_thread_from_thread_handle): Add - support for buffer objects as handles. +2020-03-13 Tom Tromey <tom@tromey.com> -2019-04-08 Kevin Buettner <kevinb@redhat.com> + * printcmd.c (print_formatted): Use value_print_scalar_formatted. + * mips-tdep.c (mips_print_register): Use + value_print_scalar_formatted. - * python/py-infthread.c (thpy_thread_handle): New function. - (thread_object_methods): Register thpy_thread_handle. +2020-03-13 Tom Tromey <tom@tromey.com> -2019-04-08 Kevin Buettner <kevinb@redhat.com> + * valprint.h (value_print_scalar_formatted): Declare. + * valprint.c (value_print_scalar_formatted): New function. - * gdbthread.h (thread_to_thread_handle): Declare. - * thread.c (gdbtypes.h): Include. - (thread_to_thread_handle): New function. +2020-03-13 Tom Tromey <tom@tromey.com> - * target.h (struct target_ops): Add thread_info_to_thread_handle. - (target_thread_info_to_thread_handle): Declare. - * target.c (target_thread_info_to_thread_handle): New function. - * target-debug.h (target_debug_print_gdb_byte_vector): Define. - * target-delegates.c: Regenerate. + * valprint.h (generic_value_print): Declare. + * valprint.c (generic_value_print): New function. - * linux-thread-db.c (class thread_db_target): Add method - thread_info_to_thread_handle. - (thread_db_target::thread_info_to_thread_handle): Define. - * remote.c (class remote_target): Add new method - thread_info_to_thread_handle. - (remote_target::thread_info_to_thread_handle): Define. - -2019-04-08 Pedro Alves <palves@redhat.com> - - * common/common-exceptions.c (throw_exception): Don't create - named object to throw; throw directly. - (throw_it): Likewise. Don't initialize gdb_exception::message - here, with new; pass FMT and AP to the ctor instead. - * common/common-exceptions.h: Include <string>. - (gdb_exception::gdb_exception(enum return_reason, enum errors, - const char *, va_list)): New ctor. Use std::make_shared. - (gdb_exception_error::gdb_exception_error(enum return_reason, enum - errors)): Delete. - (gdb_exception_error::gdb_exception_error(enum errors, const char - *, va_list)): New. - (gdb_exception_error::gdb_exception_error(const gdb_exception &)): - Add assertion. - (gdb_exception_quit::gdb_exception_quit(enum return_reason, enum - errors)): Delete. - (gdb_exception_quit::gdb_exception_quit(const char *, va_list)): New. - (gdb_exception_quit::gdb_exception_quit(const gdb_exception &)): - Add assertion. +2020-03-13 Tom Tromey <tom@tromey.com> -2019-04-08 Tom Tromey <tom@tromey.com> + * valprint.c (do_val_print): Call la_value_print_inner, if + available. + * rust-lang.c (rust_language_defn): Update. + * p-lang.c (pascal_language_defn): Update. + * opencl-lang.c (opencl_language_defn): Update. + * objc-lang.c (objc_language_defn): Update. + * m2-lang.c (m2_language_defn): Update. + * language.h (struct language_defn) <la_value_print_inner>: New + member. + * language.c (unknown_language_defn, auto_language_defn): Update. + * go-lang.c (go_language_defn): Update. + * f-lang.c (f_language_defn): Update. + * d-lang.c (d_language_defn): Update. + * c-lang.c (c_language_defn, cplus_language_defn) + (asm_language_defn, minimal_language_defn): Update. + * ada-lang.c (ada_language_defn): Update. - * valops.c (value_rtti_indirect_type): Replace throw_exception - with throw. - * tracefile-tfile.c (tfile_target_open): Replace throw_exception - with throw. - * thread.c (thr_try_catch_cmd): Replace throw_exception with - throw. - * target.c (target_translate_tls_address): Replace throw_exception - with throw. - * stack.c (frame_apply_command_count): Replace throw_exception - with throw. - * solib-spu.c (append_ocl_sos): Replace throw_exception with - throw. - * s390-tdep.c (s390_frame_unwind_cache): Replace throw_exception - with throw. - * rs6000-tdep.c (rs6000_frame_cache) - (rs6000_epilogue_frame_cache): Replace throw_exception with throw. - * remote.c: Replace throw_exception with throw. - * record-full.c (record_full_message, record_full_wait_1) - (record_full_restore): Replace throw_exception with throw. - * record-btrace.c: - (get_thread_current_frame_id, record_btrace_start_replaying) - (cmd_record_btrace_bts_start, cmd_record_btrace_pt_start) - (cmd_record_btrace_start): Replace throw_exception with throw. - * parse.c (parse_exp_in_context_1): Replace throw_exception with - throw. - * linux-nat.c (detach_one_lwp, linux_resume_one_lwp) - (resume_stopped_resumed_lwps): Replace throw_exception with throw. - * linespec.c: - (find_linespec_symbols): Replace throw_exception with throw. - * infrun.c (displaced_step_prepare, resume): Replace - throw_exception with throw. - * infcmd.c (post_create_inferior): Replace throw_exception with - throw. - * inf-loop.c (inferior_event_handler): Replace throw_exception - with throw. - * i386-tdep.c (i386_frame_cache, i386_epilogue_frame_cache) - (i386_sigtramp_frame_cache): Replace throw_exception with throw. - * frame.c (frame_unwind_pc, get_prev_frame_if_no_cycle) - (get_prev_frame_always, get_frame_pc_if_available) - (get_frame_address_in_block_if_available, get_frame_language): - Replace throw_exception with throw. - * frame-unwind.c (frame_unwind_try_unwinder): Replace - throw_exception with throw. - * eval.c (fetch_subexp_value, evaluate_var_value) - (evaluate_funcall, evaluate_subexp_standard): Replace - throw_exception with throw. - * dwarf2loc.c (call_site_find_chain) - (dwarf2_evaluate_loc_desc_full, dwarf2_locexpr_baton_eval): - Replace throw_exception with throw. - * dwarf2-frame.c (dwarf2_frame_cache): Replace throw_exception - with throw. - * darwin-nat.c (darwin_attach_pid): Replace throw_exception with - throw. - * cp-abi.c (baseclass_offset): Replace throw_exception with throw. - * completer.c (complete_line_internal): Replace throw_exception - with throw. - * compile/compile-object-run.c (compile_object_run): Replace - throw_exception with throw. - * cli/cli-script.c (process_next_line): Replace throw_exception - with throw. - * btrace.c (btrace_compute_ftrace_pt, btrace_compute_ftrace) - (btrace_enable, btrace_maint_update_pt_packets): Replace - throw_exception with throw. - * breakpoint.c (create_breakpoint, save_breakpoints): Replace - throw_exception with throw. - * break-catch-throw.c (re_set_exception_catchpoint): Replace - throw_exception with throw. - * amd64-tdep.c (amd64_frame_cache, amd64_sigtramp_frame_cache) - (amd64_epilogue_frame_cache): Replace throw_exception with throw. - * aarch64-tdep.c (aarch64_make_prologue_cache) - (aarch64_make_stub_cache): Replace throw_exception with throw. - -2019-04-08 Tom Tromey <tom@tromey.com> - - * common/common-exceptions.c (throw_exception): Rename from - throw_exception_cxx. Remove old copy. Make argument const. - (throw_it): Create and throw exception objects directly. - * common/common-exceptions.h (throw_exception): Make argument - const. - (struct gdb_exception_error): Add constructor. - (struct gdb_exception_quit): Add constructor. +2020-03-13 Tom Tromey <tom@tromey.com> -2019-04-08 Tom Tromey <tom@tromey.com> + * c-valprint.c (c_value_print): Use common_val_print. - * common/common-exceptions.h (exception_rethrow): Don't declare. - (TRY_SJLJ): Update comment. - (TRY, CATCH, END_CATCH): Remove. - * common/common-exceptions.c (exception_rethrow): Remove. +2020-03-13 Tom Tromey <tom@tromey.com> -2019-04-08 Tom Tromey <tom@tromey.com> + * cp-valprint.c (cp_print_static_field): Use common_val_print. - * common/common-exceptions.h (gdb_exception_RETURN_MASK_ALL): - Remove. - (gdb_exception_error): Rename from - gdb_exception_RETURN_MASK_ERROR. - (gdb_exception_quit): Rename from gdb_exception_RETURN_MASK_QUIT. - (gdb_quit_bad_alloc): Update. - * aarch64-tdep.c: Update. - * ada-lang.c: Update. - * ada-typeprint.c: Update. - * ada-valprint.c: Update. - * amd64-tdep.c: Update. - * arch-utils.c: Update. - * break-catch-throw.c: Update. - * breakpoint.c: Update. - * btrace.c: Update. - * c-varobj.c: Update. - * cli/cli-cmds.c: Update. - * cli/cli-interp.c: Update. - * cli/cli-script.c: Update. - * common/common-exceptions.c: Update. - * common/new-op.c: Update. - * common/selftest.c: Update. - * compile/compile-c-symbols.c: Update. - * compile/compile-cplus-symbols.c: Update. - * compile/compile-object-load.c: Update. - * compile/compile-object-run.c: Update. - * completer.c: Update. - * corelow.c: Update. - * cp-abi.c: Update. - * cp-support.c: Update. - * cp-valprint.c: Update. - * darwin-nat.c: Update. - * disasm-selftests.c: Update. - * dtrace-probe.c: Update. - * dwarf-index-cache.c: Update. - * dwarf-index-write.c: Update. - * dwarf2-frame-tailcall.c: Update. - * dwarf2-frame.c: Update. - * dwarf2loc.c: Update. - * dwarf2read.c: Update. - * eval.c: Update. - * event-loop.c: Update. - * event-top.c: Update. - * exec.c: Update. - * f-valprint.c: Update. - * fbsd-tdep.c: Update. - * frame-unwind.c: Update. - * frame.c: Update. - * gdbtypes.c: Update. - * gnu-v3-abi.c: Update. - * guile/guile-internal.h: Update. - * guile/scm-block.c: Update. - * guile/scm-breakpoint.c: Update. - * guile/scm-cmd.c: Update. - * guile/scm-disasm.c: Update. - * guile/scm-frame.c: Update. - * guile/scm-lazy-string.c: Update. - * guile/scm-math.c: Update. - * guile/scm-param.c: Update. - * guile/scm-ports.c: Update. - * guile/scm-pretty-print.c: Update. - * guile/scm-symbol.c: Update. - * guile/scm-symtab.c: Update. - * guile/scm-type.c: Update. - * guile/scm-value.c: Update. - * i386-linux-tdep.c: Update. - * i386-tdep.c: Update. - * inf-loop.c: Update. - * infcall.c: Update. - * infcmd.c: Update. - * infrun.c: Update. - * jit.c: Update. - * language.c: Update. - * linespec.c: Update. - * linux-fork.c: Update. - * linux-nat.c: Update. - * linux-tdep.c: Update. - * linux-thread-db.c: Update. - * main.c: Update. - * mi/mi-cmd-break.c: Update. - * mi/mi-cmd-stack.c: Update. - * mi/mi-interp.c: Update. - * mi/mi-main.c: Update. - * objc-lang.c: Update. - * p-valprint.c: Update. - * parse.c: Update. - * ppc-linux-tdep.c: Update. - * printcmd.c: Update. - * python/py-arch.c: Update. - * python/py-breakpoint.c: Update. - * python/py-cmd.c: Update. - * python/py-finishbreakpoint.c: Update. - * python/py-frame.c: Update. - * python/py-framefilter.c: Update. - * python/py-gdb-readline.c: Update. - * python/py-inferior.c: Update. - * python/py-infthread.c: Update. - * python/py-lazy-string.c: Update. - * python/py-linetable.c: Update. - * python/py-objfile.c: Update. - * python/py-param.c: Update. - * python/py-prettyprint.c: Update. - * python/py-progspace.c: Update. - * python/py-record-btrace.c: Update. - * python/py-record.c: Update. - * python/py-symbol.c: Update. - * python/py-type.c: Update. - * python/py-unwind.c: Update. - * python/py-utils.c: Update. - * python/py-value.c: Update. - * python/python.c: Update. - * record-btrace.c: Update. - * record-full.c: Update. - * remote-fileio.c: Update. - * remote.c: Update. - * riscv-tdep.c: Update. - * rs6000-aix-tdep.c: Update. - * rs6000-tdep.c: Update. - * rust-exp.y: Update. - * rust-lang.c: Update. - * s390-tdep.c: Update. - * selftest-arch.c: Update. - * solib-dsbt.c: Update. - * solib-frv.c: Update. - * solib-spu.c: Update. - * solib-svr4.c: Update. - * solib.c: Update. - * sparc64-linux-tdep.c: Update. - * stack.c: Update. - * symfile-mem.c: Update. - * symmisc.c: Update. - * target.c: Update. - * thread.c: Update. - * top.c: Update. - * tracefile-tfile.c: Update. - * tui/tui.c: Update. - * typeprint.c: Update. - * unittests/cli-utils-selftests.c: Update. - * unittests/parse-connection-spec-selftests.c: Update. - * valops.c: Update. - * valprint.c: Update. - * value.c: Update. - * varobj.c: Update. - * windows-nat.c: Update. - * x86-linux-nat.c: Update. - * xml-support.c: Update. - -2019-04-08 Tom Tromey <tom@tromey.com> - - * xml-support.c: Use C++ exception handling. - * x86-linux-nat.c: Use C++ exception handling. - * windows-nat.c: Use C++ exception handling. - * varobj.c: Use C++ exception handling. - * value.c: Use C++ exception handling. - * valprint.c: Use C++ exception handling. - * valops.c: Use C++ exception handling. - * unittests/parse-connection-spec-selftests.c: Use C++ exception - handling. - * unittests/cli-utils-selftests.c: Use C++ exception handling. - * typeprint.c: Use C++ exception handling. - * tui/tui.c: Use C++ exception handling. - * tracefile-tfile.c: Use C++ exception handling. - * top.c: Use C++ exception handling. - * thread.c: Use C++ exception handling. - * target.c: Use C++ exception handling. - * symmisc.c: Use C++ exception handling. - * symfile-mem.c: Use C++ exception handling. - * stack.c: Use C++ exception handling. - * sparc64-linux-tdep.c: Use C++ exception handling. - * solib.c: Use C++ exception handling. - * solib-svr4.c: Use C++ exception handling. - * solib-spu.c: Use C++ exception handling. - * solib-frv.c: Use C++ exception handling. - * solib-dsbt.c: Use C++ exception handling. - * selftest-arch.c: Use C++ exception handling. - * s390-tdep.c: Use C++ exception handling. - * rust-lang.c: Use C++ exception handling. - * rust-exp.y: Use C++ exception handling. - * rs6000-tdep.c: Use C++ exception handling. - * rs6000-aix-tdep.c: Use C++ exception handling. - * riscv-tdep.c: Use C++ exception handling. - * remote.c: Use C++ exception handling. - * remote-fileio.c: Use C++ exception handling. - * record-full.c: Use C++ exception handling. - * record-btrace.c: Use C++ exception handling. - * python/python.c: Use C++ exception handling. - * python/py-value.c: Use C++ exception handling. - * python/py-utils.c: Use C++ exception handling. - * python/py-unwind.c: Use C++ exception handling. - * python/py-type.c: Use C++ exception handling. - * python/py-symbol.c: Use C++ exception handling. - * python/py-record.c: Use C++ exception handling. - * python/py-record-btrace.c: Use C++ exception handling. - * python/py-progspace.c: Use C++ exception handling. - * python/py-prettyprint.c: Use C++ exception handling. - * python/py-param.c: Use C++ exception handling. - * python/py-objfile.c: Use C++ exception handling. - * python/py-linetable.c: Use C++ exception handling. - * python/py-lazy-string.c: Use C++ exception handling. - * python/py-infthread.c: Use C++ exception handling. - * python/py-inferior.c: Use C++ exception handling. - * python/py-gdb-readline.c: Use C++ exception handling. - * python/py-framefilter.c: Use C++ exception handling. - * python/py-frame.c: Use C++ exception handling. - * python/py-finishbreakpoint.c: Use C++ exception handling. - * python/py-cmd.c: Use C++ exception handling. - * python/py-breakpoint.c: Use C++ exception handling. - * python/py-arch.c: Use C++ exception handling. - * printcmd.c: Use C++ exception handling. - * ppc-linux-tdep.c: Use C++ exception handling. - * parse.c: Use C++ exception handling. - * p-valprint.c: Use C++ exception handling. - * objc-lang.c: Use C++ exception handling. - * mi/mi-main.c: Use C++ exception handling. - * mi/mi-interp.c: Use C++ exception handling. - * mi/mi-cmd-stack.c: Use C++ exception handling. - * mi/mi-cmd-break.c: Use C++ exception handling. - * main.c: Use C++ exception handling. - * linux-thread-db.c: Use C++ exception handling. - * linux-tdep.c: Use C++ exception handling. - * linux-nat.c: Use C++ exception handling. - * linux-fork.c: Use C++ exception handling. - * linespec.c: Use C++ exception handling. - * language.c: Use C++ exception handling. - * jit.c: Use C++ exception handling. - * infrun.c: Use C++ exception handling. - * infcmd.c: Use C++ exception handling. - * infcall.c: Use C++ exception handling. - * inf-loop.c: Use C++ exception handling. - * i386-tdep.c: Use C++ exception handling. - * i386-linux-tdep.c: Use C++ exception handling. - * guile/scm-value.c: Use C++ exception handling. - * guile/scm-type.c: Use C++ exception handling. - * guile/scm-symtab.c: Use C++ exception handling. - * guile/scm-symbol.c: Use C++ exception handling. - * guile/scm-pretty-print.c: Use C++ exception handling. - * guile/scm-ports.c: Use C++ exception handling. - * guile/scm-param.c: Use C++ exception handling. - * guile/scm-math.c: Use C++ exception handling. - * guile/scm-lazy-string.c: Use C++ exception handling. - * guile/scm-frame.c: Use C++ exception handling. - * guile/scm-disasm.c: Use C++ exception handling. - * guile/scm-cmd.c: Use C++ exception handling. - * guile/scm-breakpoint.c: Use C++ exception handling. - * guile/scm-block.c: Use C++ exception handling. - * guile/guile-internal.h: Use C++ exception handling. - * gnu-v3-abi.c: Use C++ exception handling. - * gdbtypes.c: Use C++ exception handling. - * frame.c: Use C++ exception handling. - * frame-unwind.c: Use C++ exception handling. - * fbsd-tdep.c: Use C++ exception handling. - * f-valprint.c: Use C++ exception handling. - * exec.c: Use C++ exception handling. - * event-top.c: Use C++ exception handling. - * event-loop.c: Use C++ exception handling. - * eval.c: Use C++ exception handling. - * dwarf2read.c: Use C++ exception handling. - * dwarf2loc.c: Use C++ exception handling. - * dwarf2-frame.c: Use C++ exception handling. - * dwarf2-frame-tailcall.c: Use C++ exception handling. - * dwarf-index-write.c: Use C++ exception handling. - * dwarf-index-cache.c: Use C++ exception handling. - * dtrace-probe.c: Use C++ exception handling. - * disasm-selftests.c: Use C++ exception handling. - * darwin-nat.c: Use C++ exception handling. - * cp-valprint.c: Use C++ exception handling. - * cp-support.c: Use C++ exception handling. - * cp-abi.c: Use C++ exception handling. - * corelow.c: Use C++ exception handling. - * completer.c: Use C++ exception handling. - * compile/compile-object-run.c: Use C++ exception handling. - * compile/compile-object-load.c: Use C++ exception handling. - * compile/compile-cplus-symbols.c: Use C++ exception handling. - * compile/compile-c-symbols.c: Use C++ exception handling. - * common/selftest.c: Use C++ exception handling. - * common/new-op.c: Use C++ exception handling. - * cli/cli-script.c: Use C++ exception handling. - * cli/cli-interp.c: Use C++ exception handling. - * cli/cli-cmds.c: Use C++ exception handling. - * c-varobj.c: Use C++ exception handling. - * btrace.c: Use C++ exception handling. - * breakpoint.c: Use C++ exception handling. - * break-catch-throw.c: Use C++ exception handling. - * arch-utils.c: Use C++ exception handling. - * amd64-tdep.c: Use C++ exception handling. - * ada-valprint.c: Use C++ exception handling. - * ada-typeprint.c: Use C++ exception handling. - * ada-lang.c: Use C++ exception handling. - * aarch64-tdep.c: Use C++ exception handling. - -2019-04-08 Tom Tromey <tom@tromey.com> - - * xml-support.c (gdb_xml_parser::parse): Update. - * x86-linux-nat.c (x86_linux_nat_target::enable_btrace): Update. - * value.c (show_convenience): Update. - * unittests/cli-utils-selftests.c (test_number_or_range_parser) - (test_parse_flags_qcs): Update. - * thread.c (thr_try_catch_cmd): Update. - * target.c (target_translate_tls_address): Update. - * stack.c (print_frame_arg, read_frame_local, read_frame_arg) - (info_frame_command_core, frame_apply_command_count): Update. - * rust-exp.y (rust_lex_exception_test): Update. - * riscv-tdep.c (riscv_print_one_register_info): Update. - * remote.c (remote_target::enable_btrace): Update. - * record-btrace.c (record_btrace_enable_warn): Update. - * python/py-utils.c (gdbpy_convert_exception): Update. - * printcmd.c (do_one_display, print_variable_and_value): Update. - * mi/mi-main.c (mi_print_exception): Update. - * mi/mi-interp.c (mi_cmd_interpreter_exec): Use SCOPE_EXIT. - * mi/mi-cmd-stack.c (list_arg_or_local): Update. - * linux-nat.c (linux_nat_target::attach): Update. - * linux-fork.c (class scoped_switch_fork_info): Update. - * infrun.c (displaced_step_prepare): Update. - * infcall.c (call_function_by_hand_dummy): Update. - * guile/scm-exception.c (gdbscm_scm_from_gdb_exception): Update. - * gnu-v3-abi.c (print_one_vtable): Update. - * frame.c (get_prev_frame_always): Update. - * f-valprint.c (info_common_command_for_block): Update. - * exec.c (try_open_exec_file): Update. - * exceptions.c (print_exception, exception_print) - (exception_fprintf, exception_print_same): Update. - * dwarf2-frame.c (dwarf2_build_frame_info): Update. - * dwarf-index-cache.c (index_cache::store) - (index_cache::lookup_gdb_index): Update. - * darwin-nat.c (maybe_cache_shell): Update. - * cp-valprint.c (cp_print_value_fields): Update. - * compile/compile-cplus-symbols.c (gcc_cplus_convert_symbol) - (gcc_cplus_symbol_address): Update. - * compile/compile-c-symbols.c (gcc_convert_symbol) - (gcc_symbol_address, generate_c_for_for_one_variable): Update. - * common/selftest.c: Update. - * common/common-exceptions.h (struct gdb_exception) <message>: Now - a std::string. - (exception_try_scope_entry, exception_try_scope_exit): Don't - declare. - (struct exception_try_scope): Remove. - (TRY): Don't use exception_try_scope. - (struct gdb_exception): Add constructor, operator=. - <what>: New method. - (struct gdb_exception_RETURN_MASK_ALL) - (struct gdb_exception_RETURN_MASK_ERROR) - (struct gdb_exception_RETURN_MASK_QUIT): Add constructor. - (struct gdb_quit_bad_alloc): Update. - * common/common-exceptions.c (exception_none): Change - initializer. - (struct catcher) <state, exception>: Initialize inline. - <prev>: Remove member. - (current_catcher): Remove. - (catchers): New global. - (exceptions_state_mc_init): Simplify. - (catcher_pop): Remove. - (exceptions_state_mc, exceptions_state_mc_catch): Update. - (try_scope_depth, exception_try_scope_entry) - (exception_try_scope_exit): Remove. - (throw_exception_sjlj): Update. - (exception_messages, exception_messages_size): Remove. - (throw_it): Simplify. - (gdb_exception_sliced_copy): Remove. - (throw_exception_cxx): Update. - * cli/cli-script.c (script_from_file): Update. - * breakpoint.c (insert_bp_location, update_breakpoint_locations): - Update. - * ada-valprint.c (ada_val_print): Update. - * ada-lang.c (ada_to_fixed_type_1, ada_exception_name_addr) - (create_excep_cond_exprs): Update. - -2019-04-08 Tom Tromey <tom@tromey.com> - - * common/common-exceptions.h (GDB_XCPT_SJMP, GDB_XCPT_TRY) - (GDB_XCPT_RAW_TRY, GDB_XCPT): Remove. - (TRY, CATCH, END_CATCH): Remove some definitions. - * common/common-exceptions.c: Don't use GDB_XCPT. - (catcher_list_size): Remove. - (throw_exception, throw_it): Simplify. - -2019-04-05 Tom Tromey <tom@tromey.com> - - Revert the header-sorting patch. - * ft32-tdep.c: Revert. - * frv-tdep.c: Revert. - * frv-linux-tdep.c: Revert. - * frame.c: Revert. - * frame-unwind.c: Revert. - * frame-base.c: Revert. - * fork-child.c: Revert. - * findvar.c: Revert. - * findcmd.c: Revert. - * filesystem.c: Revert. - * filename-seen-cache.h: Revert. - * filename-seen-cache.c: Revert. - * fbsd-tdep.c: Revert. - * fbsd-nat.h: Revert. - * fbsd-nat.c: Revert. - * f-valprint.c: Revert. - * f-typeprint.c: Revert. - * f-lang.c: Revert. - * extension.h: Revert. - * extension.c: Revert. - * extension-priv.h: Revert. - * expprint.c: Revert. - * exec.h: Revert. - * exec.c: Revert. - * exceptions.c: Revert. - * event-top.c: Revert. - * event-loop.c: Revert. - * eval.c: Revert. - * elfread.c: Revert. - * dwarf2read.h: Revert. - * dwarf2read.c: Revert. - * dwarf2loc.c: Revert. - * dwarf2expr.h: Revert. - * dwarf2expr.c: Revert. - * dwarf2-frame.c: Revert. - * dwarf2-frame-tailcall.c: Revert. - * dwarf-index-write.h: Revert. - * dwarf-index-write.c: Revert. - * dwarf-index-common.c: Revert. - * dwarf-index-cache.h: Revert. - * dwarf-index-cache.c: Revert. - * dummy-frame.c: Revert. - * dtrace-probe.c: Revert. - * disasm.h: Revert. - * disasm.c: Revert. - * disasm-selftests.c: Revert. - * dictionary.c: Revert. - * dicos-tdep.c: Revert. - * demangle.c: Revert. - * dcache.h: Revert. - * dcache.c: Revert. - * darwin-nat.h: Revert. - * darwin-nat.c: Revert. - * darwin-nat-info.c: Revert. - * d-valprint.c: Revert. - * d-namespace.c: Revert. - * d-lang.c: Revert. - * ctf.c: Revert. - * csky-tdep.c: Revert. - * csky-linux-tdep.c: Revert. - * cris-tdep.c: Revert. - * cris-linux-tdep.c: Revert. - * cp-valprint.c: Revert. - * cp-support.c: Revert. - * cp-namespace.c: Revert. - * cp-abi.c: Revert. - * corelow.c: Revert. - * corefile.c: Revert. - * continuations.c: Revert. - * completer.h: Revert. - * completer.c: Revert. - * complaints.c: Revert. - * coffread.c: Revert. - * coff-pe-read.c: Revert. - * cli-out.h: Revert. - * cli-out.c: Revert. - * charset.c: Revert. - * c-varobj.c: Revert. - * c-valprint.c: Revert. - * c-typeprint.c: Revert. - * c-lang.c: Revert. - * buildsym.c: Revert. - * buildsym-legacy.c: Revert. - * build-id.h: Revert. - * build-id.c: Revert. - * btrace.c: Revert. - * bsd-uthread.c: Revert. - * breakpoint.h: Revert. - * breakpoint.c: Revert. - * break-catch-throw.c: Revert. - * break-catch-syscall.c: Revert. - * break-catch-sig.c: Revert. - * blockframe.c: Revert. - * block.c: Revert. - * bfin-tdep.c: Revert. - * bfin-linux-tdep.c: Revert. - * bfd-target.c: Revert. - * bcache.c: Revert. - * ax-general.c: Revert. - * ax-gdb.h: Revert. - * ax-gdb.c: Revert. - * avr-tdep.c: Revert. - * auxv.c: Revert. - * auto-load.c: Revert. - * arm-wince-tdep.c: Revert. - * arm-tdep.c: Revert. - * arm-symbian-tdep.c: Revert. - * arm-pikeos-tdep.c: Revert. - * arm-obsd-tdep.c: Revert. - * arm-nbsd-tdep.c: Revert. - * arm-nbsd-nat.c: Revert. - * arm-linux-tdep.c: Revert. - * arm-linux-nat.c: Revert. - * arm-fbsd-tdep.c: Revert. - * arm-fbsd-nat.c: Revert. - * arm-bsd-tdep.c: Revert. - * arch-utils.c: Revert. - * arc-tdep.c: Revert. - * arc-newlib-tdep.c: Revert. - * annotate.h: Revert. - * annotate.c: Revert. - * amd64-windows-tdep.c: Revert. - * amd64-windows-nat.c: Revert. - * amd64-tdep.c: Revert. - * amd64-sol2-tdep.c: Revert. - * amd64-obsd-tdep.c: Revert. - * amd64-obsd-nat.c: Revert. - * amd64-nbsd-tdep.c: Revert. - * amd64-nbsd-nat.c: Revert. - * amd64-nat.c: Revert. - * amd64-linux-tdep.c: Revert. - * amd64-linux-nat.c: Revert. - * amd64-fbsd-tdep.c: Revert. - * amd64-fbsd-nat.c: Revert. - * amd64-dicos-tdep.c: Revert. - * amd64-darwin-tdep.c: Revert. - * amd64-bsd-nat.c: Revert. - * alpha-tdep.c: Revert. - * alpha-obsd-tdep.c: Revert. - * alpha-nbsd-tdep.c: Revert. - * alpha-mdebug-tdep.c: Revert. - * alpha-linux-tdep.c: Revert. - * alpha-linux-nat.c: Revert. - * alpha-bsd-tdep.c: Revert. - * alpha-bsd-nat.c: Revert. - * aix-thread.c: Revert. - * agent.c: Revert. - * addrmap.c: Revert. - * ada-varobj.c: Revert. - * ada-valprint.c: Revert. - * ada-typeprint.c: Revert. - * ada-tasks.c: Revert. - * ada-lang.c: Revert. - * aarch64-tdep.c: Revert. - * aarch64-ravenscar-thread.c: Revert. - * aarch64-newlib-tdep.c: Revert. - * aarch64-linux-tdep.c: Revert. - * aarch64-linux-nat.c: Revert. - * aarch64-fbsd-tdep.c: Revert. - * aarch64-fbsd-nat.c: Revert. - * aarch32-linux-nat.c: Revert. - -2019-04-05 Tom Tromey <tom@tromey.com> - - * ft32-tdep.c: Sort headers. - * frv-tdep.c: Sort headers. - * frv-linux-tdep.c: Sort headers. - * frame.c: Sort headers. - * frame-unwind.c: Sort headers. - * frame-base.c: Sort headers. - * fork-child.c: Sort headers. - * findvar.c: Sort headers. - * findcmd.c: Sort headers. - * filesystem.c: Sort headers. - * filename-seen-cache.h: Sort headers. - * filename-seen-cache.c: Sort headers. - * fbsd-tdep.c: Sort headers. - * fbsd-nat.h: Sort headers. - * fbsd-nat.c: Sort headers. - * f-valprint.c: Sort headers. - * f-typeprint.c: Sort headers. - * f-lang.c: Sort headers. - * extension.h: Sort headers. - * extension.c: Sort headers. - * extension-priv.h: Sort headers. - * expprint.c: Sort headers. - * exec.h: Sort headers. - * exec.c: Sort headers. - * exceptions.c: Sort headers. - * event-top.c: Sort headers. - * event-loop.c: Sort headers. - * eval.c: Sort headers. - * elfread.c: Sort headers. - * dwarf2read.h: Sort headers. - * dwarf2read.c: Sort headers. - * dwarf2loc.c: Sort headers. - * dwarf2expr.h: Sort headers. - * dwarf2expr.c: Sort headers. - * dwarf2-frame.c: Sort headers. - * dwarf2-frame-tailcall.c: Sort headers. - * dwarf-index-write.h: Sort headers. - * dwarf-index-write.c: Sort headers. - * dwarf-index-common.c: Sort headers. - * dwarf-index-cache.h: Sort headers. - * dwarf-index-cache.c: Sort headers. - * dummy-frame.c: Sort headers. - * dtrace-probe.c: Sort headers. - * disasm.h: Sort headers. - * disasm.c: Sort headers. - * disasm-selftests.c: Sort headers. - * dictionary.c: Sort headers. - * dicos-tdep.c: Sort headers. - * demangle.c: Sort headers. - * dcache.h: Sort headers. - * dcache.c: Sort headers. - * darwin-nat.h: Sort headers. - * darwin-nat.c: Sort headers. - * darwin-nat-info.c: Sort headers. - * d-valprint.c: Sort headers. - * d-namespace.c: Sort headers. - * d-lang.c: Sort headers. - * ctf.c: Sort headers. - * csky-tdep.c: Sort headers. - * csky-linux-tdep.c: Sort headers. - * cris-tdep.c: Sort headers. - * cris-linux-tdep.c: Sort headers. - * cp-valprint.c: Sort headers. - * cp-support.c: Sort headers. - * cp-namespace.c: Sort headers. - * cp-abi.c: Sort headers. - * corelow.c: Sort headers. - * corefile.c: Sort headers. - * continuations.c: Sort headers. - * completer.h: Sort headers. - * completer.c: Sort headers. - * complaints.c: Sort headers. - * coffread.c: Sort headers. - * coff-pe-read.c: Sort headers. - * cli-out.h: Sort headers. - * cli-out.c: Sort headers. - * charset.c: Sort headers. - * c-varobj.c: Sort headers. - * c-valprint.c: Sort headers. - * c-typeprint.c: Sort headers. - * c-lang.c: Sort headers. - * buildsym.c: Sort headers. - * buildsym-legacy.c: Sort headers. - * build-id.h: Sort headers. - * build-id.c: Sort headers. - * btrace.c: Sort headers. - * bsd-uthread.c: Sort headers. - * breakpoint.h: Sort headers. - * breakpoint.c: Sort headers. - * break-catch-throw.c: Sort headers. - * break-catch-syscall.c: Sort headers. - * break-catch-sig.c: Sort headers. - * blockframe.c: Sort headers. - * block.c: Sort headers. - * bfin-tdep.c: Sort headers. - * bfin-linux-tdep.c: Sort headers. - * bfd-target.c: Sort headers. - * bcache.c: Sort headers. - * ax-general.c: Sort headers. - * ax-gdb.h: Sort headers. - * ax-gdb.c: Sort headers. - * avr-tdep.c: Sort headers. - * auxv.c: Sort headers. - * auto-load.c: Sort headers. - * arm-wince-tdep.c: Sort headers. - * arm-tdep.c: Sort headers. - * arm-symbian-tdep.c: Sort headers. - * arm-pikeos-tdep.c: Sort headers. - * arm-obsd-tdep.c: Sort headers. - * arm-nbsd-tdep.c: Sort headers. - * arm-nbsd-nat.c: Sort headers. - * arm-linux-tdep.c: Sort headers. - * arm-linux-nat.c: Sort headers. - * arm-fbsd-tdep.c: Sort headers. - * arm-fbsd-nat.c: Sort headers. - * arm-bsd-tdep.c: Sort headers. - * arch-utils.c: Sort headers. - * arc-tdep.c: Sort headers. - * arc-newlib-tdep.c: Sort headers. - * annotate.h: Sort headers. - * annotate.c: Sort headers. - * amd64-windows-tdep.c: Sort headers. - * amd64-windows-nat.c: Sort headers. - * amd64-tdep.c: Sort headers. - * amd64-sol2-tdep.c: Sort headers. - * amd64-obsd-tdep.c: Sort headers. - * amd64-obsd-nat.c: Sort headers. - * amd64-nbsd-tdep.c: Sort headers. - * amd64-nbsd-nat.c: Sort headers. - * amd64-nat.c: Sort headers. - * amd64-linux-tdep.c: Sort headers. - * amd64-linux-nat.c: Sort headers. - * amd64-fbsd-tdep.c: Sort headers. - * amd64-fbsd-nat.c: Sort headers. - * amd64-dicos-tdep.c: Sort headers. - * amd64-darwin-tdep.c: Sort headers. - * amd64-bsd-nat.c: Sort headers. - * alpha-tdep.c: Sort headers. - * alpha-obsd-tdep.c: Sort headers. - * alpha-nbsd-tdep.c: Sort headers. - * alpha-mdebug-tdep.c: Sort headers. - * alpha-linux-tdep.c: Sort headers. - * alpha-linux-nat.c: Sort headers. - * alpha-bsd-tdep.c: Sort headers. - * alpha-bsd-nat.c: Sort headers. - * aix-thread.c: Sort headers. - * agent.c: Sort headers. - * addrmap.c: Sort headers. - * ada-varobj.c: Sort headers. - * ada-valprint.c: Sort headers. - * ada-typeprint.c: Sort headers. - * ada-tasks.c: Sort headers. - * ada-lang.c: Sort headers. - * aarch64-tdep.c: Sort headers. - * aarch64-ravenscar-thread.c: Sort headers. - * aarch64-newlib-tdep.c: Sort headers. - * aarch64-linux-tdep.c: Sort headers. - * aarch64-linux-nat.c: Sort headers. - * aarch64-fbsd-tdep.c: Sort headers. - * aarch64-fbsd-nat.c: Sort headers. - * aarch32-linux-nat.c: Sort headers. - -2019-04-04 Tom Tromey <tom@tromey.com> - - * varobj.c (varobj_create): Update. - * rust-exp.y (struct rust_parser) <update_innermost_block, - lookup_symbol>: New methods. - (rust_parser::update_innermost_block, rust_parser::lookup_symbol): - Rename. - (rust_parser::rust_lookup_type) - (rust_parser::convert_ast_to_expression, rust_lex_tests): Update. - * printcmd.c (display_command, do_one_display): Update. - * parser-defs.h (struct parser_state) <parser_state>: Add - "tracker" parameter. - (block_tracker): New member. - (class innermost_block_tracker) <innermost_block_tracker>: Add - "types" parameter. - <reset>: Remove method. - (innermost_block): Don't declare. - (null_post_parser): Update. - * parse.c (innermost_block): Remove global. - (write_dollar_variable): Update. - (parse_exp_1, parse_exp_in_context): Add "tracker" parameter. - Remove "tracker_types" parameter. - (parse_expression): Add "tracker" parameter. - (parse_expression_for_completion): Update. - (null_post_parser): Add "tracker" parameter. - * p-exp.y: Update rules. - * m2-exp.y: Update rules. - * language.h (struct language_defn) <la_post_parser>: Add - "tracker" parameter. - * go-exp.y: Update rules. - * f-exp.y: Update rules. - * expression.h (parse_expression, parse_exp_1): Add "tracker" - parameter. - * d-exp.y: Update rules. - * c-exp.y: Update rules. - * breakpoint.c (set_breakpoint_condition): Create an - innermost_block_tracker. - (watch_command_1): Likewise. - * ada-lang.c (resolve): Add "tracker" parameter. - (resolve_subexp): Likewise. - * ada-exp.y (write_var_from_sym): Update. - -2019-04-04 Tom Tromey <tom@tromey.com> - - * type-stack.h: New file. - * type-stack.c: New file. - * parser-defs.h (enum type_pieces, union type_stack_elt): Move to - type-stack.h. - (insert_into_type_stack, insert_type, push_type, push_type_int) - (insert_type_address_space, pop_type, pop_type_int) - (pop_typelist, pop_type_stack, append_type_stack) - (push_type_stack, get_type_stack, push_typelist) - (follow_type_instance_flags, follow_types): Don't declare. - * parse.c (type_stack): Remove global. - (parse_exp_in_context): Update. - (insert_into_type_stack, insert_type, push_type, push_type_int) - (insert_type_address_space, pop_type, pop_type_int) - (pop_typelist, pop_type_stack, append_type_stack) - (push_type_stack, get_type_stack, push_typelist) - (follow_type_instance_flags, follow_types): Remove (moved to - type-stack.c). - * f-exp.y (type_stack): New global. - Update rules. - (push_kind_type, f_parse): Update. - * d-exp.y (type_stack): New global. - Update rules. - (d_parse): Update. - * c-exp.y (struct c_parse_state) <type_stack>: New member. - Update rules. - * Makefile.in (COMMON_SFILES): Add type-stack.c. - (HFILES_NO_SRCDIR): Add type-stack.h. - -2019-04-04 Tom Tromey <tom@tromey.com> - - * rust-exp.y (rust_parser::lex_identifier, rustyylex) - (rust_parser::convert_ast_to_expression, rust_parse) - (rust_lex_test_completion, rust_lex_tests): Update. - * parser-defs.h (struct expr_completion_state): New. - (struct parser_state) <parser_state>: Add completion parameter. - <mark_struct_expression, mark_completion_tag>: New methods. - <parse_completion, m_completion_state>: New members. - (prefixify_expression, null_post_parser): Update. - (mark_struct_expression, mark_completion_tag): Don't declare. - * parse.c (parse_completion, expout_last_struct) - (expout_tag_completion_type, expout_completion_name): Remove - globals. - (parser_state::mark_struct_expression) - (parser_state::mark_completion_tag): Now methods. - (prefixify_expression): Add last_struct parameter. - (prefixify_subexp): Likewise. - (parse_exp_1): Update. - (parse_exp_in_context): Add cstate parameter. Update. - (parse_expression_for_completion): Create an - expr_completion_state. - (null_post_parser): Add "completion" parameter. - * p-exp.y: Update rules. - (yylex): Update. - * language.h (struct language_defn) <la_post_parser>: Add - "completing" parameter. - * go-exp.y: Update rules. - (lex_one_token): Update. - * expression.h (parse_completion): Don't declare. - * d-exp.y: Update rules. - (lex_one_token): Update rules. - * c-exp.y: Update rules. - (lex_one_token): Update. - * ada-lang.c (resolve): Add "parse_completion" parameter. - (resolve_subexp): Likewise. - (ada_resolve_function): Likewise. - -2019-04-04 Tom Tromey <tom@tromey.com> - - * parser-defs.h (struct parser_state) <start_arglist, - end_arglist>: New methods. - <arglist_len, m_funcall_chain>: New members. - (arglist_len, start_arglist, end_arglist): Don't declare. - * parse.c (arglist_len, funcall_chain): Remove global. - (start_arglist, end_arglist): Remove functions. - (parse_exp_in_context): Update. - * p-exp.y: Update rules. - * m2-exp.y: Update rules. - * go-exp.y: Update rules. - * f-exp.y: Update rules. - * d-exp.y: Update rules. - * c-exp.y: Update rules. - -2019-04-04 Tom Tromey <tom@tromey.com> - - * rust-exp.y (struct rust_parser) <lex_hex, lex_escape, - lex_operator, push_back>: New methods. - Update all rules. - (rust_parser::lex_hex, lex_escape): Rename and update. - (rust_parser::lex_string, rust_parser::lex_identifier): Update. - (rust_parser::lex_operator): Rename and update. - (rust_parser::lex_number, rustyylex, rustyyerror) - (rust_lex_test_init, rust_lex_test_sequence) - (rust_lex_test_push_back, rust_lex_tests): Update. - * parser-defs.h (struct parser_state) <parser_state>: Add "input" - parameter. - <lexptr, prev_lexptr>: New members. - (lexptr, prev_lexptr): Don't declare. - * parse.c (lexptr, prev_lexptr): Remove globals. - (parse_exp_in_context): Update. - * p-exp.y (yylex, yyerror): Update. - * m2-exp.y (parse_number, yylex, yyerror): Update. - * go-exp.y (lex_one_token, yyerror): Update. - * f-exp.y (match_string_literal, yylex, yyerror): Update. - * d-exp.y (lex_one_token, yyerror): Update. - * c-exp.y (scan_macro_expansion, finished_macro_expansion) - (lex_one_token, yyerror): Update. - * ada-lex.l (YY_INPUT): Update. - (rewind_to_char): Update. - * ada-exp.y (yyerror): Update. +2020-03-13 Tom Tromey <tom@tromey.com> -2019-04-04 Tom Tromey <tom@tromey.com> + * f-valprint.c (f77_print_array_1, f_val_print): Use + common_val_print. - * rust-exp.y (rustyylex, rust_lex_tests): Update. - * parser-defs.h (struct parser_state) <parser_state>: Add new - parameter. - <comma_terminates>: New member. - (comma_terminates): Don't declare global. - * parse.c (comma_terminates): Remove global. - (parse_exp_in_context): Update. - * p-exp.y (yylex): Update. - * m2-exp.y (yylex): Update. - * go-exp.y (lex_one_token): Update. - * f-exp.y (yylex): Update. - * d-exp.y (lex_one_token): Update. - * c-exp.y (lex_one_token): Update. - * ada-lex.l: Update. +2020-03-13 Tom Tromey <tom@tromey.com> -2019-04-04 Tom Tromey <tom@tromey.com> + * riscv-tdep.c (riscv_print_one_register_info): Use + common_val_print. - * rust-exp.y (struct rust_parser) <paren_depth>: New member. - (rustyylex, rust_lex_test_init, rust_lex_test_one) - (rust_lex_test_sequence, rust_lex_test_push_back): Update. - * parser-defs.h (paren_depth): Don't declare. - * parse.c (paren_depth): Remove global. - (parse_exp_in_context): Update. - * p-exp.y (paren_depth): New global. - (pascal_parse): Initialize it. - * m2-exp.y (paren_depth): New global. - (m2_parse): Initialize it. - * go-exp.y (paren_depth): New global. - (go_parse): Initialize it. - * f-exp.y (paren_depth): New global. - (f_parse): Initialize it. - * d-exp.y (paren_depth): New global. - (d_parse): Initialize it. - * c-exp.y (paren_depth): New global. - (c_parse): Initialize it. - * ada-lex.l (paren_depth): New global. - (lexer_init): Initialize it. - -2019-04-04 Tom Tromey <tom@tromey.com> - - * rust-exp.y (rust_parser::crate_name, rust_parser::super_name) - (rust_parser::convert_ast_to_type) - (rust_parser::convert_ast_to_expression, rust_lex_tests): Update. - * parser-defs.h (struct parser_state) <parser_state>: Add - parameters. Initialize new members. - <expression_context_block, expression_context_pc>: New members. - * parse.c (expression_context_block, expression_context_pc): - Remove globals. - (parse_exp_in_context): Update. - * p-exp.y: Update all rules. - (yylex): Update. - * m2-exp.y: Update all rules. - (yylex): Update. - * go-exp.y (yylex): Update. - * f-exp.y (yylex): Update. - * d-exp.y: Update all rules. - (yylex): Update. - * c-exp.y: Update all rules. - (lex_one_token, classify_name, yylex, c_parse): Update. - * ada-exp.y (write_var_or_type, write_name_assoc): Update. - -2019-04-04 Tom Tromey <tom@tromey.com> - - * gdbarch.h, gdbarch.c: Rebuild. - * gdbarch.sh (dtrace_parse_probe_argument): Change type. - * stap-probe.h: - (struct stap_parse_info): Replace "parser_state" with - "expr_builder". - * parser-defs.h (struct expr_builder): Rename from "parser_state". - (parser_state): New class. - * parse.c (expr_builder): Rename. - (expr_builder::release): Rename. - (write_exp_elt, write_exp_elt_opcode, write_exp_elt_sym) - (write_exp_elt_msym, write_exp_elt_block, write_exp_elt_objfile) - (write_exp_elt_longcst, write_exp_elt_floatcst) - (write_exp_elt_type, write_exp_elt_intern, write_exp_string) - (write_exp_string_vector, write_exp_bitstring) - (write_exp_msymbol, mark_struct_expression) - (write_dollar_variable) - (insert_type_address_space, increase_expout_size): Replace - "parser_state" with "expr_builder". - * dtrace-probe.c: Replace "parser_state" with "expr_builder". - * amd64-linux-tdep.c (amd64_dtrace_parse_probe_argument): Replace - "parser_state" with "expr_builder". - -2019-04-04 Tom Tromey <tom@tromey.com> - - * rust-exp.y: Replace "parse_language" with method call. - * p-exp.y: - (yylex): Replace "parse_language" with method call. - * m2-exp.y: - (yylex): Replace "parse_language" with method call. - * go-exp.y (classify_name): Replace "parse_language" with method - call. - * f-exp.y (yylex): Replace "parse_language" with method call. - * d-exp.y (lex_one_token): Replace "parse_language" with method - call. - * c-exp.y: - (lex_one_token, classify_name, yylex): Replace "parse_language" - with method call. - * ada-exp.y (find_primitive_type, type_char) - (type_system_address): Replace "parse_language" with method call. - -2019-04-04 Tom Tromey <tom@tromey.com> - - * rust-exp.y: Replace "parse_gdbarch" with method call. - * parse.c (write_dollar_variable, insert_type_address_space): - Replace "parse_gdbarch" with method call. - * p-exp.y (parse_type, yylex): Replace "parse_gdbarch" with method - call. - * objc-lang.c (end_msglist): Replace "parse_gdbarch" with method - call. - * m2-exp.y (parse_type, parse_m2_type, yylex): Replace - "parse_gdbarch" with method call. - * go-exp.y (parse_type, classify_name): Replace "parse_gdbarch" - with method call. - * f-exp.y (parse_type, parse_f_type, yylex): Replace - "parse_gdbarch" with method call. - * d-exp.y (parse_type, parse_d_type, lex_one_token): Replace - "parse_gdbarch" with method call. - * c-exp.y (parse_type, parse_number, classify_name): Replace - "parse_gdbarch" with method call. - * ada-lex.l: Replace "parse_gdbarch" with method call. - * ada-exp.y (parse_type, find_primitive_type, type_char) - (type_system_address): Replace "parse_gdbarch" with method call. - -2019-04-04 Tom Tromey <tom@tromey.com> - - * dtrace-probe.c (dtrace_probe::build_arg_exprs): Update. - * stap-probe.c (stap_parse_argument): Update. - * stap-probe.h (struct stap_parse_info) <stap_parse_info>: Remove - initial_size parameter. - * rust-exp.y (rust_lex_tests): Update. - * parse.c (parser_state): Update. - (parse_exp_in_context): Update. - * parser-defs.h (struct parser_state) <parser_state>: Remove - "initial_size" parameter. - -2019-04-04 Tom Tromey <tom@tromey.com> - - * parser-defs.h (increase_expout_size): Don't declare. - * parse.c (increase_expout_size): Now static. - -2019-04-04 Thomas Schwinge <thomas@codesourcery.com> - - * gnu-nat.c (gnu_nat_target::wait): Fix - target_waitstatus_to_string call. - -2019-04-01 Andrew Burgess <andrew.burgess@embecosm.com> - - * eval.c (evaluate_subexp_standard): Handle internal functions - during Fortran function call handling. - -2019-04-01 Andrew Burgess <andrew.burgess@embecosm.com> - - * NEWS: Mention new internal functions. - * dwarf2read.c (dwarf2_init_complex_target_type): New function. - (read_base_type): Use dwarf2_init_complex_target_type. - * value.c (creal_internal_fn): New function. - (cimag_internal_fn): New function. - (_initialize_values): Register new internal functions. - -2019-04-01 Philippe Waroquiers <philippe.waroquiers@skynet.be> - - * infrun.c (stop_all_threads): If debug_infrun, always - trace the wait status after wait_one, using - target_waitstatus_to_string and target_pid_to_str. - (handle_inferior_event): Replace various trace of - wait status kind by a single trace. - * gdb/gnu-nat.c (gnu_nat_target::wait): Replace local - wait status kind image by target_waitstatus_to_string. - * target/waitstatus.c (target_waitstatus_to_string): Fix - obsolete comment. +2020-03-13 Tom Tromey <tom@tromey.com> -2019-04-01 Tom Tromey <tromey@adacore.com> + * mi/mi-main.c (output_register): Use common_val_print. - PR symtab/23331: - * dwarf2read.c (partial_die_info::read): Handle DW_AT_ranges. +2020-03-13 Tom Tromey <tom@tromey.com> -2019-04-01 Sergio Durigan Junior <sergiodj@redhat.com> - Pedro Alves <palves@redhat.com> + * infcmd.c (default_print_one_register_info): Use + common_val_print. - * top.c (quit_force): Call 'finalize_values'. - * value.c (finalize_values): New function. - * value.h (finalize_values): Declare. +2020-03-13 Tom Tromey <tom@tromey.com> -2019-03-30 Eli Zaretskii <eliz@gnu.org> + * valprint.h (common_val_print_checked): Declare. + * valprint.c (common_val_print_checked): New function. + * stack.c (print_frame_arg): Use common_val_print_checked. - * NEWS: Announce $_gdb_major and $_gdb_minor. +2020-03-13 Tom Tromey <tom@tromey.com> - * top.c (init_gdb_version_vars): New function. - (gdb_init): Call init_gdb_version_vars. + * valprint.c (do_val_print): New function, from val_print. + (val_print): Use do_val_print. + (common_val_print): Use do_val_print. -2019-03-29 Tom Tromey <tromey@adacore.com> +2020-03-13 Tom Tromey <tom@tromey.com> - * printcmd.c (_initialize_printcmd): Add usage lines. Update some - help text. Remove dead code. + * valprint.c (value_print): Use scoped_value_mark. -2019-03-29 Keith Seitz <keiths@redhat.com> +2020-03-13 Tom de Vries <tdevries@suse.de> - From Siddhesh Poyarekar: - * f-lang.h (f77_get_upperbound): Return LONGEST. - (f77_get_lowerbound): Likewise. - * f-typeprint.c (f_type_print_varspec_suffix): Expand - UPPER_BOUND and LOWER_BOUND to LONGEST. Use plongest to format - print them. - (f_type_print_base): Expand UPPER_BOUND to LONGEST. Use - plongest to format print it. - * f-valprint.c (f77_get_lowerbound): Return LONGEST. - (f77_get_upperbound): Likewise. - (f77_get_dynamic_length_of_aggregate): Expand UPPER_BOUND, - LOWER_BOUND to LONGEST. - (f77_create_arrayprint_offset_tbl): Likewise. + PR symtab/25646 + * psymtab.c (partial_symtab::partial_symtab): Don't set + globals_offset and statics_offset. Push element onto + current_global_psymbols and current_static_psymbols stacks. + (concat): New function. + (end_psymtab_common): Set globals_offset and statics_offset. Pop + element from current_global_psymbols and current_static_psymbols + stacks. Concat popped elements to global_psymbols and + static_symbols. + (add_psymbol_to_list): Use current_global_psymbols and + current_static_psymbols stacks. + * psymtab.h (class psymtab_storage): Add current_global_psymbols and + current_static_psymbols fields. -2019-03-29 Keith Seitz <keiths@redhat.com> +2020-03-12 Christian Biesinger <cbiesinger@google.com> - * ada-lang.c (ada_template_to_fixed_record_type_1): Use - %s/pulongest for TYPE_LENGTH instead of %d in format - strings. - * ada-typerint.c (ada_print_type): Likewise. - * amd64-windows-tdep.c (amd64_windows_store_arg_in_reg): Likewise. - * compile/compile-c-support.c (generate_register_struct): Likewise. - * gdbtypes.c (recursive_dump_type): Likewise. - * gdbtypes.h (struct type) <length>: Change type to ULONGEST. - * m2-typeprint.c (m2_array): Use %s/pulongest for TYPE_LENGTH - instead of %d in format strings. - * riscv-tdep.c (riscv_type_alignment): Cast second argument - to std::min to ULONGEST. - * symmisc.c (print_symbol): Use %s/pulongest for TYPE_LENGTH - instead of %d in format strings. - * tracepoint.c (info_scope_command): Likewise. - * typeprint.c (print_offset_data::update) - (print_offset_data::finish): Likewise. - * xtensa-tdep.c (xtensa_store_return_value) - (xtensa_push_dummy_call): Likewise. + * corelow.c (sniff_core_bfd): Remove. + (class core_target) <m_core_vec>: Remove. + (core_target::core_target): Update. + (core_file_fns): Remove. + (deprecated_add_core_fns): Remove. + (default_core_sniffer): Remove. + (sniff_core_bfd): Remove. + (default_check_format): Remove. + (gdb_check_format): Remove. + (core_target_open): Update. + (core_target::get_core_register_section): Update. + (get_core_registers_cb): Update. + (core_target::fetch_registers): Update. + * gdbcore.h (struct core_fns): Remove. + (deprecated_add_core_fns): Remove. + (default_core_sniffer): Remove. + (default_check_format): Remove. -2019-03-28 Jon Turney <jon.turney@dronecode.org.uk> +2020-03-12 Tom Tromey <tom@tromey.com> - * windows-nat.c (display_selector): Fixed format specifications - for 64-bit Cygwin. + * arm-tdep.c (struct arm_mapping_symbol) <value>: Now a + CORE_ADDR. + (struct arm_exidx_entry) <addr>: Now a CORE_ADDR. -2019-03-28 Philippe Waroquiers <philippe.waroquiers@skynet.be> +2020-03-12 Tom Tromey <tom@tromey.com> - * infrun.c (follow_exec): Call target_terminal::ours_for_output. + * remote.c (remote_target::download_tracepoint) + (remote_target::enable_tracepoint) + (remote_target::disable_tracepoint): Use phex, not sprintf_vma. + * breakpoint.c (print_recreate_masked_watchpoint): Use phex, not + sprintf_vma. -2019-03-28 Sandra Loosemore <sandra@codesourcery.com> +2020-03-12 Tom Tromey <tom@tromey.com> - * nios2-tdep.h (struct gdbarch_tdep): Add is_kernel_helper. - * nios2-tdep.c (nios2_get_next_pc): Skip over kernel helpers. - * nios2-linux-tdep.c (nios2_linux_is_kernel_helper): New. - (nios2_linux_init_abi): Install it. + * symfile-mem.c: Update CORE_ADDR size assert. -2019-03-28 Alan Hayward <alan.hayward@arm.com> +2020-03-12 Simon Marchi <simon.marchi@efficios.com> - * aarch64-tdep.c (aarch64_vnv_type): Use vector types. + * selftest.m4: Move to gdbsupport/. + * acinclude.m4: Update path to selftest.m4. -2019-03-28 Alan Hayward <alan.hayward@arm.com> +2020-03-12 Simon Marchi <simon.marchi@efficios.com> - * features/aarch64-sve.c (create_feature_aarch64_sve): Add q view. + * Makefile.in (SUBDIR_UNITTESTS_SRCS): Rename to... + (SELFTESTS_SRCS): ... this. Add disasm-selftests.c, + gdbarch-selfselftests.c and selftest-arch.c. + (SUBDIR_UNITTESTS_OBS): Rename to... + (SELFTESTS_OBS): ... this. + (COMMON_SFILES): Remove disasm-selftests.c and + gdbarch-selftests.c. + * configure.ac: Don't add selftest-arch.{c,o} to + CONFIG_{SRCS,OBS}. + * disasm-selftests.c, gdbarch-selftests.c: Remove GDB_SELF_TEST + preprocessor conditions. -2019-03-24 Philippe Waroquiers <philippe.waroquiers@skynet.be> - Tom Tromey <tromey@adacore.com> +2020-03-12 Simon Marchi <simon.marchi@efficios.com> - * minsyms.c (minimal_symbol_upper_bound): Fix buffer overflow. + * configure.ac: Don't source bfd/development.sh. + * selftest.m4: Modify comment. + * configure: Re-generate. -2019-03-26 Joel Brobecker <brobecker@adacore.com> +2020-03-12 Simon Marchi <simon.marchi@efficios.com> - * gdb-gdb.py.in (StructMainTypePrettyPrinter.bound_img): New method. - (StructMainTypePrettyPrinter.bounds_img): Use new "bound_img" - method to compute the bounds of range types. Also print "[evaluated]" - if the bounds' values come from a dynamic evaluation. + * selftest.m4 (GDB_AC_SELFTEST): Error out if $development is + not "true" or "false". + * configure: Re-generate. -2019-03-26 Andrew Burgess <andrew.burgess@embecosm.com> +2020-03-12 Christian Biesinger <cbiesinger@google.com> - * cp-valprint.c (cp_print_value_fields): Don't print trailing - whitespace when pretty printing is on. + * Makefile.in (HFILES_NO_SRCDIR): Add new arm-nbsd-tdep.h file. + * arm-nbsd-nat.c (arm_supply_gregset): Moved to arm-nbsd-tdep and + renamed to arm_nbsd_supply_gregset. + (fetch_register): Update to call arm_nbsd_supply_gregset. + (fetch_regs): Remove in favor of fetch_register with a -1 regno. + (arm_netbsd_nat_target::fetch_registers): Update. + (fetch_elfcore_registers): Removed. + (_initialize_arm_netbsd_nat): Removed call to deprecated_add_core_fns. + * arm-nbsd-tdep.c (struct arm_nbsd_reg): New struct. + (arm_nbsd_supply_gregset): Moved from arm-nbsd-nat.c and updated to + not require NetBSD system headers. + (arm_nbsd_regset): New struct. + (arm_nbsd_iterate_over_regset_sections): New function. + (arm_netbsd_init_abi_common): Updated to call + set_gdbarch_iterate_over_regset_sections. + * arm-nbsd-tdep.h: New file. -2019-03-26 Alan Hayward <alan.hayward@arm.com> +2020-03-11 Kevin Buettner <kevinb@redhat.com> - * ppc-linux-nat.c: Add include. + * symtab.c (find_pc_sect_line): Add check which prevents infinite + recursion. + +2020-03-11 Simon Marchi <simon.marchi@efficios.com> -2019-03-26 Alan Hayward <alan.hayward@arm.com> + * configure: Re-generate. - * NEWS: Mention AArch64 Pointer Authentication. +2020-03-11 Tom Tromey <tromey@adacore.com> -2019-03-26 Alan Hayward <alan.hayward@arm.com> + * ada-typeprint.c (print_choices): Fix comment. - * arm-linux-nat.c: Add include. +2020-03-11 Andrew Burgess <andrew.burgess@embecosm.com> -2019-03-25 Simon Marchi <simon.marchi@polymtl.ca> + * buildsyms.c (buildsym_compunit::record_line): Avoid accessing + previous item in the list, when the list has no items. - * source-cache.c (source_cache::get_source_lines): Re-read - fullname after calling open_source_file. +2020-03-11 Tom de Vries <tdevries@suse.de> -2019-03-25 John Baldwin <jhb@FreeBSD.org> + * dwarf2/loc.c (dwarf2_evaluate_property): Handle NULL frame in + PROP_LOCLIST handling code. - * NEWS: Mention TLS support for FreeBSD. +2020-03-10 Andrew Burgess <andrew.burgess@embecosm.com> -2019-03-25 Tom Tromey <tromey@adacore.com> + * buildsym-legacy.c (record_line): Pass extra parameter to + record_line. + * buildsym.c (buildsym_compunit::record_line): Take an extra + parameter, reduce duplication in the line table, and record the + is_stmt flag in the line table. + * buildsym.h (buildsym_compunit::record_line): Add extra + parameter. + * disasm.c (do_mixed_source_and_assembly_deprecated): Ignore + non-statement lines. + * dwarf2/read.c (dwarf_record_line_1): Add extra parameter, pass + this to the symtab builder. + (dwarf_finish_line): Pass extra parameter to dwarf_record_line_1. + (lnp_state_machine::record_line): Pass a suitable is_stmt flag + through to dwarf_record_line_1. + * infrun.c (process_event_stop_test): When stepping, don't stop at + a non-statement instruction, and only refresh the step info when + we land in the middle of a line's range. Also add an extra + comment. + * jit.c (jit_symtab_line_mapping_add_impl): Initialise is_stmt + field. + * record-btrace.c (btrace_find_line_range): Only record lines + marked as is-statement. + * stack.c (frame_show_address): Show the frame address if we are + in a non-statement sal. + * symmisc.c (dump_symtab_1): Print the is_stmt flag. + (maintenance_print_one_line_table): Print a header for the is_stmt + column, and include is_stmt information in the output. + * symtab.c (find_pc_sect_line): Find lines marked as statements in + preference to non-statements. + (find_pcs_for_symtab_line): Prefer is-statement entries. + (find_line_common): Likewise. + * symtab.h (struct linetable_entry): Add is_stmt field. + (struct symtab_and_line): Likewise. + * xcoffread.c (arrange_linetable): Initialise is_stmt field when + arranging the line table. + +2020-03-07 Tom de Vries <tdevries@suse.de> - * minsyms.c (BUNCH_SIZE): Update comment. - (~minimal_symbol_reader): Remove old comment. - (compact_minimal_symbols): Update comment. - (minimal_symbol_reader::install): Remove old comment. Update - other comments. + * dwarf2/read.c (read_typedef): Treat anonymous typedef as forwarder + DIE. -2019-03-25 Alan Hayward <alan.hayward@arm.com> +2020-03-07 Tom Tromey <tom@tromey.com> - * s390-linux-nat.c: Add include. + * valops.c (value_literal_complex): Remove obsolete comment. + * gdbtypes.h (enum type_code) <TYPE_CODE_FLT>: Remove obsolete + comment. -2019-03-25 Alan Hayward <alan.hayward@arm.com> +2020-03-06 Simon Marchi <simon.marchi@polymtl.ca> - * aarch64-linux-nat.c (aarch64_linux_nat_target::read_description): - Call linux_get_hwcap. - * aarch64-linux-tdep.c (aarch64_linux_core_read_description): - Likewise. - (aarch64_linux_get_hwcap): Remove function. - * aarch64-linux-tdep.h (aarch64_linux_get_hwcap): Remove - declaration. - * arm-linux-nat.c (arm_linux_nat_target::read_description):Call - linux_get_hwcap. - * arm-linux-tdep.c (arm_linux_core_read_description): Likewise. - * linux-tdep.c (linux_get_hwcap): Add function. - (linux_get_hwcap2): Likewise. - * linux-tdep.h (linux_get_hwcap): Add declaration. - (linux_get_hwcap2): Likewise. - * ppc-linux-nat.c (ppc_linux_get_hwcap): Remove function. - (ppc_linux_get_hwcap2): Likewise. - (ppc_linux_nat_target::region_ok_for_hw_watchpoint): Call - linux_get_hwcap. - (ppc_linux_nat_target::insert_watchpoint): Likewise. - (ppc_linux_nat_target::watchpoint_addr_within_range): Likewise. - (ppc_linux_nat_target::read_description): Likewise. - * ppc-linux-tdep.c (ppc_linux_core_read_description): Likewise. - * s390-linux-nat.c: Likewise. - * s390-linux-tdep.c (s390_core_read_description): Likewise. - -2019-03-24 Tom Tromey <tom@tromey.com> - - * ada-lang.c (standard_lookup): Simplify initialization. - (ada_lookup_symbol_nonlocal): Simplify return. - * solib-spu.c (spu_lookup_lib_symbol): Simplify return. - * solib-darwin.c (darwin_lookup_lib_symbol): Simplify return. - * solib-svr4.c (elf_lookup_lib_symbol): Simplify return. - * rust-lang.c (rust_lookup_symbol_nonlocal): Simplify - initialization. - * solib.c (solib_global_lookup): Simplify. - * symtab.c (null_block_symbol): Remove. - (symbol_cache_lookup): Simplify returns. - (lookup_language_this): Simplify returns. - (lookup_symbol_aux): Simplify return. - (lookup_local_symbol): Simplify returns. - (lookup_global_symbol_from_objfile): Simplify return. - (lookup_symbol_in_objfile_symtabs) - (lookup_symbol_in_objfile_from_linkage_name): Simplify return. - (lookup_symbol_via_quick_fns, lookup_symbol_in_static_block) - (lookup_static_symbol, lookup_global_symbol): Simplify return. - * cp-namespace.c (cp_lookup_bare_symbol) - (cp_search_static_and_baseclasses, cp_lookup_symbol_via_imports) - (cp_lookup_symbol_via_all_imports, cp_lookup_nested_symbol_1) - (cp_lookup_nested_symbol): Don't use null_block_symbol. - (cp_lookup_symbol_via_imports): Simplify initialization. - (find_symbol_in_baseclass): Likewise. - * symtab.h (null_block_symbol): Remove. - * d-namespace.c (d_lookup_symbol): Don't use null_block_symbol. - (d_lookup_nested_symbol, d_lookup_symbol_imports) - (d_lookup_symbol_module): Likewise. - (find_symbol_in_baseclass): Simplify initialization. - -2019-03-24 Tom Tromey <tom@tromey.com> - - * expression.h: Don't include symtab.h. - (struct block): Forward declare. - -2019-03-24 Tom Tromey <tom@tromey.com> - - * c-exp.y (typebase): Remove casts. - * gdbtypes.c (lookup_unsigned_typename, ) - (lookup_signed_typename): Remove cast. - * eval.c (parse_to_comma_and_eval): Remove cast. - * parse.c (write_dollar_variable): Remove cast. - * block.h (struct block) <superblock>: Now const. - * symfile-debug.c (debug_qf_map_matching_symbols): Update. - * psymtab.c (psym_map_matching_symbols): Make "block" const. - (map_block): Make "block" const. - * symfile.h (struct quick_symbol_functions) - <map_matching_symbols>: Constify block argument to "callback". - * symtab.c (basic_lookup_transparent_type_quick): Make "block" - const. - (find_pc_sect_compunit_symtab): Make "b" const. - (find_symbol_at_address): Likewise. - (search_symbols): Likewise. - * dwarf2read.c (dw2_lookup_symbol): Make "block" const. - (dw2_debug_names_lookup_symbol): Likewise. - (dw2_map_matching_symbols): Update. - * p-valprint.c (pascal_val_print): Remove "block". - * ada-lang.c (ada_add_global_exceptions): Make "b" const. - (aux_add_nonlocal_symbols): Make "block" const. - (resolve_subexp): Remove cast. - * linespec.c (iterate_over_all_matching_symtabs): Make "block" - const. - (iterate_over_file_blocks): Likewise. - * f-exp.y (%union) <bval>: Remove. - * coffread.c (patch_opaque_types): Make "b" const. - * spu-tdep.c (spu_catch_start): Make "block" const. - * c-valprint.c (print_unpacked_pointer): Remove "block". - * symmisc.c (dump_symtab_1): Make "b" const. - (block_depth): Make "block" const. - * d-exp.y (%union) <bval>: Remove. - * cp-support.h (cp_lookup_rtti_type): Update. - * cp-support.c (cp_lookup_rtti_type): Make "block" const. - * psymtab.c (psym_lookup_symbol): Make "block" const. - (maintenance_check_psymtabs): Make "b" const. - * python/py-framefilter.c (extract_sym): Make "sym_block" const. - (enumerate_locals, enumerate_args): Update. - * python/py-symtab.c (stpy_global_block): Make "block" const. - (stpy_static_block): Likewise. - * inline-frame.c (block_starting_point_at): Make "new_block" - const. - * block.c (find_block_in_blockvector): Make return type const. - (blockvector_for_pc_sect): Make "b" const. - (find_block_in_blockvector): Make "b" const. - -2019-03-23 Tom Tromey <tom@tromey.com> - - * varobj.c (varobj_create): Update. - * symfile.c (clear_symtab_users): Don't reset innermost_block. - * printcmd.c (display_command, do_one_display): Don't reset - innermost_block. - * parser-defs.h (enum innermost_block_tracker_type): Move to - expression.h. - (innermost_block): Update comment. - * parse.c (parse_exp_1): Add tracker_types parameter. - (parse_exp_in_context): Rename from parse_exp_in_context_1. Add - tracker_types parameter. Reset innermost_block. - (parse_exp_in_context): Remove. - (parse_expression_for_completion): Update. - * objfiles.c (~objfile): Don't reset expression_context_block or - innermost_block. - * expression.h (enum innermost_block_tracker_type): Move from - parser-defs.h. - (parse_exp_1): Add tracker_types parameter. - * breakpoint.c (set_breakpoint_condition, watch_command_1): Don't - reset innermost_block. - -2019-03-23 Tom Tromey <tom@tromey.com> - - * objfiles.h: Include bcache.h. - -2019-03-23 Tom Tromey <tom@tromey.com> - - * linespec.c (get_current_search_block): Use - scoped_restore_current_language. - * symmisc.c (dump_symtab): Use scoped_restore_current_language. - -2019-03-22 Alan Hayward <alan.hayward@arm.com> - Jiong Wang <jiong.wang@arm.com> - - * aarch64-linux-tdep.c - (aarch64_linux_iterate_over_regset_sections): Check for pauth - section. - * aarch64-linux-tdep.h (AARCH64_LINUX_SIZEOF_PAUTH): New define. - -2019-03-22 Alan Hayward <alan.hayward@arm.com> - Jiong Wang <jiong.wang@arm.com> - - * aarch64-tdep.c (aarch64_analyze_prologue): Check for pauth - instructions. - (aarch64_analyze_prologue_test): Add PACIASP test. - (aarch64_prologue_prev_register): Unmask PC value. - -2019-03-22 Alan Hayward <alan.hayward@arm.com> - Jiong Wang <jiong.wang@arm.com> - - * aarch64-tdep.c (aarch64_frame_unmask_address): New function. - (aarch64_dwarf2_prev_register): Unmask PC value. - (aarch64_dwarf2_frame_init_reg): Init pauth registers. - (aarch64_execute_dwarf_cfa_vendor_op): Check for - DW_CFA_AARCH64_negate_ra_state. - (aarch64_gdbarch_init): Add aarch64_execute_dwarf_cfa_vendor_op. + * infrun.h: Forward-declare thread_info. + (set_step_info): Add thread_info parameter, add doc. + * infrun.c (set_step_info): Add thread_info parameter, move doc + to header. + * infrun.c (process_event_stop_test): Pass thread to + set_step_info call. + * infcmd.c (set_step_frame): Add thread_info pointer, pass it to + set_step_info. + (prepare_one_step): Add thread_info parameter, pass it to + set_step_frame and prepare_one_step (recursive) call. + (step_1): Pass thread to prepare_one_step call. + (step_command_fsm::should_stop): Pass thread to + prepare_one_step. + (until_next_fsm): Pass thread to set_step_frame call. + (finish_command): Pass thread to set_step_info call. -2019-03-22 Alan Hayward <alan.hayward@arm.com> - Jiong Wang <jiong.wang@arm.com> +2020-03-06 Hannes Domani <ssbssa@yahoo.de> - * aarch64-tdep.c (aarch64_dwarf_reg_to_regnum): Check for pauth - registers. - (aarch64_pseudo_register_name): Likewise. - (aarch64_pseudo_register_type): Likewise. - (aarch64_pseudo_register_reggroup_p): Likewise. - (aarch64_gdbarch_init): Add pauth registers. - * aarch64-tdep.h (AARCH64_DWARF_PAUTH_RA_STATE): New define. - (AARCH64_DWARF_PAUTH_DMASK): Likewise. - (AARCH64_DWARF_PAUTH_CMASK): Likewise. - (struct gdbarch_tdep): Add regnum for ra_state. - -2019-03-22 Alan Hayward <alan.hayward@arm.com> - Jiong Wang <jiong.wang@arm.com> + * windows-tdep.c (windows_solib_create_inferior_hook): + Check if inferior is running. - * arch/aarch64.h (AARCH64_PAUTH_REGS_SIZE): New define. +2020-03-06 Tom de Vries <tdevries@suse.de> -2019-03-22 Alan Hayward <alan.hayward@arm.com> - Jiong Wang <jiong.wang@arm.com> + * NEWS: Fix "the the". + * ctfread.c: Same. - * aarch64-linux-nat.c (fetch_pauth_masks_from_thread): New - function. - (aarch64_linux_nat_target::fetch_registers): Read pauth registers. - * aarch64-tdep.c (aarch64_cannot_store_register): New function. - (aarch64_gdbarch_init): Add puth registers. - * aarch64-tdep.h (struct gdbarch_tdep): Add pauth features. - * arch/aarch64.h (AARCH64_PAUTH_DMASK_REGNUM): New define. - (AARCH64_PAUTH_CMASK_REGNUM): Likewise. +2020-03-06 Tom de Vries <tdevries@suse.de> -2019-03-22 Alan Hayward <alan.hayward@arm.com> - Jiong Wang <jiong.wang@arm.com> + * psymtab.c (psymtab_to_symtab): Don't print "done.". - * aarch64-linux-nat.c - (aarch64_linux_nat_target::read_description): Read PACA hwcap. - * aarch64-linux-tdep.c - (aarch64_linux_core_read_description): Likewise. - (aarch64_linux_get_hwcap): New function. - * aarch64-linux-tdep.h (AARCH64_HWCAP_PACA): New define. - (aarch64_linux_get_hwcap): New declaration. +2020-03-06 Andrew Burgess <andrew.burgess@embecosm.com> -2019-03-22 Alan Hayward <alan.hayward@arm.com> - Jiong Wang <jiong.wang@arm.com> + * .dir-locals.el: Add a comment referencing the other copies of + this file. - * aarch64-linux-nat.c - (aarch64_linux_nat_target::read_description): Add pauth param. - * aarch64-linux-tdep.c - (aarch64_linux_core_read_description): Likewise. - * aarch64-tdep.c (struct target_desc): Add in pauth. - (aarch64_read_description): Add pauth param. - (aarch64_gdbarch_init): Likewise. - * aarch64-tdep.h (aarch64_read_description): Likewise. - * arch/aarch64.c (aarch64_create_target_description): Likewise. - * arch/aarch64.h (aarch64_create_target_description): Likewise. - * features/Makefile: Add new files. - * features/aarch64-pauth.c: New file. - * features/aarch64-pauth.xml: New file. - -2019-03-20 Tom Tromey <tromey@adacore.com> - - * infrun.c (handle_inferior_event): Rename from - handle_inferior_event_1. Create a scoped_value_mark. - (handle_inferior_event): Remove. - -2019-03-19 Tom Tromey <tromey@adacore.com> - - * mi/mi-interp.c (mi_on_normal_stop_1): Only show displays once. - * infrun.h (print_stop_event): Add "displays" parameter. - * infrun.c (print_stop_event): Add "displays" parameter. - -2019-03-19 Pedro Alves <palves@redhat.com> - - * tui/tui-out.c (tui_ui_out::do_field_string): Simplify. - (tui_ui_out::do_text): Add comments. Reset M_LINE to 0 instead of - to -1. Fix TABs vs spaces. - (tui_ui_out::tui_ui_out): Don't initialize fields here. - * tui/tui-out.h (tui_ui_out) Add intro comments. - <m_line, m_start_of_line>: In-class initialize, and add describing - comment. +2020-03-05 John Baldwin <jhb@FreeBSD.org> -2019-03-18 Alan Hayward <alan.hayward@arm.com> + * fbsd-tdep.c (fbsd_make_corefile_notes): Use std::string for + psargs. - * arm-linux-nat.c (arm_linux_insert_hw_breakpoint1): Fix - variable names. - (arm_linux_remove_hw_breakpoint1): Use a gdb::function_view. +2020-03-05 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> -2019-03-18 Pedro Alves <palves@redhat.com> - Eli Zaretskii <eliz@gnu.org> + * .gitattributes: New file. - * tui/tui-out.c (tui_ui_out::tui_ui_out): Fix initialization of - m_line and m_start_of_line. +2020-03-04 Tom Tromey <tom@tromey.com> -2019-03-18 Eli Zaretskii <eliz@gnu.org> + * symmisc.c (print_symbol_bcache_statistics) + (print_objfile_statistics): Update. + * symfile.c (allocate_symtab): Use intern. + * psymtab.c (partial_symtab::partial_symtab): Use intern. + * objfiles.h (struct objfile_per_bfd_storage) <filename_cache, + macro_cache>: Remove. + <string_cache>: New member. + (struct objfile) <intern>: New methods. + * elfread.c (elf_symtab_read): Use intern. + * dwarf2/read.c (fixup_go_packaging): Intern package name. + (dwarf2_compute_name, dwarf2_physname) + (create_dwo_unit_in_dwp_v1, create_dwo_unit_in_dwp_v2): Intern + names. + (guess_partial_die_structure_name): Update. + (partial_die_info::fixup): Intern name. + (dwarf2_canonicalize_name): Change parameter to objfile. Intern + name. + (dwarf2_name): Intern name. Update. + * buildsym.c (buildsym_compunit::get_macro_table): Use + string_cache. + +2020-03-04 Tom Tromey <tom@tromey.com> + + * jit.c (bfd_open_from_target_memory): Make "target" const. + * corefile.c (gnutarget): Now const. + * gdbcore.h (gnutarget): Now const. + +2020-03-04 Hannes Domani <ssbssa@yahoo.de> + + * NEWS: Mention support for WOW64 processes. + * amd64-windows-nat.c (amd64_mappings): Rename and remove static. + (amd64_windows_segment_register_p): Remove static. + (_initialize_amd64_windows_nat): Update. + * configure.nat <windows> (NATDEPFILES): Add i386-windows-nat.o. + * i386-windows-nat.c (context_offset): Update. + (i386_mappings): Rename and remove static. + (i386_windows_segment_register_p): Remove static. + (_initialize_i386_windows_nat): Update. + * windows-nat.c (STATUS_WX86_BREAKPOINT): New macro. + (STATUS_WX86_SINGLE_STEP): New macro. + (EnumProcessModulesEx): New macro. + (Wow64SuspendThread): New macro. + (Wow64GetThreadContext): New macro. + (Wow64SetThreadContext): New macro. + (Wow64GetThreadSelectorEntry): New macro. + (windows_set_context_register_offsets): Add static. + (windows_set_segment_register_p): Likewise. + (windows_add_thread): Adapt for WOW64 processes. + (windows_fetch_one_register): Likewise. + (windows_nat_target::fetch_registers): Likewise. + (windows_store_one_register): Likewise. + (display_selector): Likewise. + (display_selectors): Likewise. + (handle_exception): Likewise. + (windows_continue): Likewise. + (windows_nat_target::resume): Likewise. + (windows_add_all_dlls): Likewise. + (do_initial_windows_stuff): Likewise. + (windows_nat_target::attach): Likewise. + (windows_get_exec_module_filename): Likewise. + (windows_nat_target::create_inferior): Likewise. + (windows_xfer_siginfo): Likewise. + (_initialize_loadable): Initialize Wow64SuspendThread, + Wow64GetThreadContext, Wow64SetThreadContext, + Wow64GetThreadSelectorEntry and EnumProcessModulesEx. + * windows-nat.h (windows_set_context_register_offsets): + Remove declaration. + (windows_set_segment_register_p): Likewise. + (i386_windows_segment_register_p): Add declaration. + (amd64_windows_segment_register_p): Likewise. + +2020-03-04 Luis Machado <luis.machado@linaro.org> + + Revert aa66aac47b4dd38f9524ddb5546c08cc09930d37 due to regressions + in "info registers" for AArch64/ARM. + + The change caused "info registers" to not print GPR's. + + gdb/ChangeLog: + + 2020-02-01 Shahab Vahedi <shahab@synopsys.com> + + * target-descriptions.c (tdesc_register_in_reggroup_p): Return 0 + when reg->group is empty and reggroup is not. + +2020-03-03 Tom Tromey <tromey@adacore.com> + + * dwarf2/frame.c (struct dwarf2_frame_cache) + <checked_tailcall_bottom, entry_cfa_sp_offset, + entry_cfa_sp_offset_p>: Remove members. + (dwarf2_frame_cache): Call dwarf2_tailcall_sniffer_first. + (dwarf2_frame_prev_register): Don't call + dwarf2_tailcall_sniffer_first. + (dwarf2_append_unwinders): Don't append tailcall unwinder. + * frame-unwind.c (add_unwinder): New fuction. + (frame_unwind_init): Use it. Add tailcall unwinder. + +2020-03-03 Andrew Burgess <andrew.burgess@embecosm.com> + Alok Kumar Sharma <AlokKumar.Sharma@amd.com> + + * f-valprint.c (f_val_print): Handle TYPE_CODE_BOOL, any non-zero + value should be printed as true. + +2020-03-03 Hannes Domani <ssbssa@yahoo.de> + + * windows-tdep.c (windows_solib_create_inferior_hook): New function. + (windows_init_abi): Set and use windows_so_ops. + +2020-03-03 Sergio Durigan Junior <sergiodj@redhat.com> + + * printcmd.c (print_c_string): Check also for TYPE_CODE_PTR + when verifying if dealing with a convenience variable. + +2020-03-03 Luis Machado <luis.machado@linaro.org> + + * auxv.c (default_print_auxv_entry): Add new AUXV entries. + +2020-03-02 Simon Marchi <simon.marchi@polymtl.ca> + + * infrun.c (gdbarch_supports_displaced_stepping): New. + (use_displaced_stepping): Break up conditions in smaller pieces. + Use gdbarch_supports_displaced_stepping. + (displaced_step_prepare_throw): Use + gdbarch_supports_displaced_stepping. + +2020-03-02 Andrew Burgess <andrew.burgess@embecosm.com> + + * NEWS: Mention new behaviour of the history filename. + * top.c (write_history_p): Add comment. + (show_write_history_p): Add header comment, give a different + message when history writing is on, but the history filename is + empty. + (history_filename): Add comment. + (history_filename_empty): New function. + (show_history_filename): Add header comment, give a different + message when the filename is empty. + (init_history): Compare history_filename against nullptr, and only + read history if the filename is not empty. + (set_history_filename): Add header comment, and only make + non-empty filenames absolute. + (init_main): Make the filename argument to 'set history filename' + optional. + +2020-03-02 Christian Biesinger <cbiesinger@google.com> + + * arm-nbsd-nat.c (arm_supply_fparegset): Rename to... + (arm_supply_vfpregset): ...this, and update to use VFP registers. + (fetch_fp_register): Update. + (fetch_fp_regs): Update. + (store_fp_register): Update. + (store_fp_regs): Update. + (arm_netbsd_nat_target::read_description): New function. + (fetch_elfcore_registers): Update. + +2020-03-02 Andrew Burgess <andrew.burgess@embecosm.com> + + * remote.c (remote_target::remote_parse_stop_reply): Don't use the + general_thread if the stop reply is missing a thread-id. + (remote_target::process_stop_reply): Use the first non-exited + thread if the target didn't pass a thread-id. + * infrun.c (do_target_wait): Move call to + switch_to_inferior_no_thread to .... + (do_target_wait_1): ... here. + +2020-02-29 Jon Turney <jon.turney@dronecode.org.uk> + + * debuginfod-support.c: Include defs.h first. + +2020-02-28 Tom de Vries <tdevries@suse.de> + + * symfile.c (set_initial_language): Use default language for lookup. + +2020-02-28 Simon Marchi <simon.marchi@efficios.com> + + * dwarf2/read.c (cutu_reader::init_tu_and_read_dwo_dies): Remove + reader variable, pass `this` to read_cutu_die_from_dwo. - * tui/tui-io.c (gdb_wgetch): Don't echo CR. - (tui_getc): When gdb_wgetch returns a CR, behave the same as when - it returns a newline. This fixes a regression in TU mode, whereby - the next line is output on the same screen line as the user input. +2020-02-27 Aaron Merey <amerey@redhat.com> -2019-03-18 Tom Tromey <tromey@adacore.com> + * source.c (open_source_file): Check for nullptr when computing + srcpath. - * minsyms.c (minimal_symbol_reader::install): Remove call to - obstack_blank. +2020-02-27 Tom Tromey <tromey@adacore.com> -2019-03-18 Pedro Alves <palves@redhat.com> + * dwarf2/read.c (struct field_info) <nfields>: Now a method, not a + member. + (dwarf2_add_field): Don't update nfields. + (dwarf2_attach_fields_to_type, process_structure_scope): Update. - * tui/tui-io.c (reverse_mode_p, reverse_save_bg, reverse_save_fg): - New globals. - (apply_style): New, factored out from ... - (apply_ansi_escape): ... this. Handle reverse video mode. - (tui_set_reverse_mode): New function. - * tui/tui-io.h (tui_set_reverse_mode): New declaration. - * tui/tui-winsource.c (tui_show_source_line): Use - tui_set_reverse_mode instead of setting A_STANDOUT. - * ui-style.h (struct ui_file_style) <set_reverse, set_fg, set_bg>: - New setter methods. +2020-02-27 Andrew Burgess <andrew.burgess@embecosm.com> -2019-03-18 Hannes Domani <ssbssa@yahoo.de> + * gdbtypes.c (create_array_type_with_stride): Use std::abs not + abs. - * tui/tui-source.c (copy_source_line): Fix handling of 'column'. - Handle tabs. +2020-02-26 Tom Tromey <tom@tromey.com> -2019-03-18 Tom Tromey <tromey@adacore.com> + * dwarf2/read.c (struct dwarf2_include_psymtab): New. + (dwarf2_create_include_psymtab): Use dwarf2_include_psymtab. + (dwarf2_psymtab::expand_psymtab, dwarf2_psymtab::readin_p) + (dwarf2_psymtab::get_compunit_symtab): Remove null checks for + per_cu_data. - * ada-lang.c (empty_array): Add "high" parameter. - (ada_evaluate_subexp): Update. +2020-02-26 Tom Tromey <tom@tromey.com> -2019-03-17 Sergei Trofimovich <siarheit@google.com> + * dwarf2/index-write.c (psym_index_map): Change type. + (add_address_entry_worker, write_one_signatured_type) + (recursively_count_psymbols, recursively_write_psymbols) + (class debug_names, psyms_seen_size, write_gdbindex) + (write_debug_names): Use partial_symtab, not dwarf2_psymtab. - * unittests/string_view-selftests.c: Define - _initialize_string_view_selftests unconditionally. +2020-02-26 Aaron Merey <amerey@redhat.com> -2019-03-17 Vladimir Martyanov <vilgeforce@gmail.com> + * Makefile.in: Handle optional debuginfod support. + * NEWS: Update. + * README: Add --with-debuginfod summary. + * config.in: Regenerate. + * configure: Regenerate. + * configure.ac: Handle optional debuginfod support. + * debuginfod-support.c: debuginfod helper functions. + * debuginfod-support.h: Ditto. + * doc/gdb.texinfo: Add --with-debuginfod to configure options + summary. + * dwarf2/read.c (dwarf2_get_dwz_file): Query debuginfod servers + when a dwz file cannot be found. + * elfread.c (elf_symfile_read): Query debuginfod servers when a + debuginfo file cannot be found. + * source.c (open_source_file): Query debuginfod servers when a + source file cannot be found. + * top.c (print_gdb_configuration): Include + --{with,without}-debuginfod in the output. - PR gdb/24350 - * windows-nat.c (windows_make_so): Remove unused text_vma variable. +2020-02-26 Jérémie Galarneau <jeremie.galarneau@efficios.com> -2019-03-17 Vladimir Martyanov <vilgeforce@gmail.com> + * thread.c (thr_try_catch_cmd): Print thread name. - PR gdb/24351 - * windows-nat.c (display_selector): Fix format specifiers. +2020-02-26 Simon Marchi <simon.marchi@efficios.com> -2019-03-17 Eli Zaretskii <eliz@gnu.org> + * dwarf2/loc.h (dwarf2_fetch_die_loc_sect_off, + dwarf2_fetch_die_loc_cu_off, dwarf2_fetch_constant_bytes, + dwarf2_fetch_die_type_sect_off): Move to... + * dwarf2/read.h (dwarf2_fetch_die_loc_sect_off, + dwarf2_fetch_die_loc_cu_off, dwarf2_fetch_constant_bytes, + dwarf2_fetch_die_type_sect_off): ... here. + * dwarf2/read.c (dwarf2_fetch_die_loc_sect_off, + dwarf2_fetch_die_loc_cu_off, dwarf2_fetch_constant_bytes, + dwarf2_fetch_die_type_sect_off): Move doc to header file. - * tui/tui-winsource.c (tui_set_is_exec_point_at): Call - tui_refill_source_window instead of tui_refresh_win, to update the - current execution line. This fixes redisplay of the current line - when stepping through the code with "next" or "step". +2020-02-26 Tom de Vries <tdevries@suse.de> -2019-03-16 Eli Zaretskii <eliz@gnu.org> + PR gdb/25603 + * symfile.c (set_initial_language): Exit-early if + language_mode == language_mode_manual. - * source-cache.c (source_cache::get_source_lines): Call - find_source_lines to initialize s->nlines. This fixes vertical - scrolling of TUI source window when the DOWN arrow is pressed. +2020-02-25 Simon Marchi <simon.marchi@polymtl.ca> -2019-03-16 Philippe Waroquiers <philippe.waroquiers@skynet.be> + * dwarf2/loc.h (dwarf2_read_addr_index): Move... + * dwarf2/read.h (dwarf2_read_addr_index): ... here. + * dwarf2/read.c (dwarf2_read_addr_index): Move doc to header. - * auto-load.c (_initialize_auto_load): Fix 'This options has'. - linux-thread-db.c (_initialize_thread_db): Likewise. +2020-02-25 Andrew Burgess <andrew.burgess@embecosm.com> -2019-03-16 Eli Zaretskii <eliz@gnu.org> + * gdbtypes.c (create_array_type_with_stride): Handle negative + array strides. + * valarith.c (value_subscripted_rvalue): Likewise. - * tui/tui-winsource.c (tui_show_source_line): Revert "Use - wclrtoeol in tui_show_source_line". This reverts changes made in - commit 4a3045920bbe4e50a0f4920b0fdc4e88ef23015c. +2020-02-25 Luis Machado <luis.machado@linaro.org> -2019-03-15 Tom Tromey <tom@tromey.com> + * aarch64-tdep.c (aarch64_vnv_type): Fix comment typo. - * symtab.h (struct minimal_symbol): Derive from - general_symbol_info. - (MSYMBOL_VALUE, MSYMBOL_VALUE_RAW_ADDRESS) - (MSYMBOL_VALUE_ADDRESS, MSYMBOL_VALUE_BYTES) - (MSYMBOL_BLOCK_VALUE, MSYMBOL_VALUE_CHAIN, MSYMBOL_LANGUAGE) - (MSYMBOL_SECTION, MSYMBOL_OBJ_SECTION, MSYMBOL_NATURAL_NAME) - (MSYMBOL_LINKAGE_NAME, MSYMBOL_DEMANGLED_NAME) - (MSYMBOL_SEARCH_NAME): Update. - (MSYMBOL_SET_LANGUAGE, MSYMBOL_SET_NAMES): Remove. - * solib.c (gdb_bfd_lookup_symbol_from_symtab): Don't use memset. - * minsyms.c (minimal_symbol_reader::record_full): Update. +2020-02-25 Simon Marchi <simon.marchi@polymtl.ca> -2019-03-15 Tom Tromey <tom@tromey.com> + * loc.h (dwarf2_get_die_type): Move to... + * read.h (dwarf2_get_die_type): ... here. + * read.c (dwarf2_get_die_type): Move doc to header. - * minsyms.c (minimal_symbol_reader::install): Use memcpy. +2020-02-25 Joel Brobecker <brobecker@adacore.com> -2019-03-15 Tom Tromey <tom@tromey.com> + * copypright.py (EXCLUDE_LIST): Add 'gnulib/config.in' and + 'gnulib/Makefile.in' to the list. - * objfiles.h (struct objfile_per_bfd_storage) <msymbols>: Now a - unique_xmalloc_ptr. - (objfile::msymbols_range::begin, objfile::msymbols_range::end): - Update. - * minsyms.c (lookup_minimal_symbol_by_pc_section) - (build_minimal_symbol_hash_tables) - (minimal_symbol_reader::install): Update. +2020-02-24 Tom Tromey <tom@tromey.com> -2019-03-15 Tom Tromey <tom@tromey.com> + * dwarf2/read.h (struct type_unit_unshareable) <num_symtabs>: + Remove. + * dwarf2/read.c (dwarf2_cu::setup_type_unit_groups): Use + XOBNEWVEC. - * symtab.c (create_demangled_names_hash): Update. - (symbol_set_names): Update. - * objfiles.h (struct objfile_per_bfd_storage) - <demangled_names_hash>: Now an htab_up. - * objfiles.c (objfile_per_bfd_storage): Simplify. +2020-02-24 Tom Tromey <tom@tromey.com> -2019-03-15 Tom Tromey <tom@tromey.com> + * dwarf2/read.h (struct dwarf2_per_cu_data) <type_unit_group_p>: + New method. + * dwarf2/read.c (IS_TYPE_UNIT_GROUP): Remove. + (dw2_do_instantiate_symtab, dw2_get_file_names) + (build_type_psymtab_dependencies, load_full_type_unit): Update. - * objfiles.h (struct objfile_per_bfd_storage): Declare - destructor. - * objfiles.c (objfile_per_bfd_storage::~objfile_per_bfd_storage): - New. - (get_objfile_bfd_data): Use new. Don't initialize - language_of_main. - (free_objfile_per_bfd_storage): Remove. - (objfile_bfd_data_free, objfile::~objfile): Use delete. - -2019-03-15 Tom Tromey <tom@tromey.com> - - * symfile.c (reread_symbols): Update. - * objfiles.c (objfile::objfile): Update. - * minsyms.h (terminate_minimal_symbol_table): Don't declare. - * minsyms.c (lookup_minimal_symbol_by_pc_section): Update - comment. - (minimal_symbol_reader::install): Update. - (terminate_minimal_symbol_table): Remove. - * jit.c (jit_object_close_impl): Update. +2020-02-24 Tom Tromey <tom@tromey.com> -2019-03-15 Tom Tromey <tom@tromey.com> + * dwarf2read.c (dwarf2_build_psymtabs_hard): Use + make_scoped_restore. + (dwarf2_psymtab::read_symtab): Don't clear + reading_partial_symbols. - * minsyms.c (minimal_symbol_reader::record_full): Remove some - initializations. +2020-02-24 Tom de Vries <tdevries@suse.de> -2019-03-15 Tom Tromey <tom@tromey.com> + PR gdb/25592 + * stack.c (iterate_over_block_locals): Handle LOC_CONST. - * objfiles.h (struct objfile_per_bfd_storage) - <demangled_hash_languages>: Now a bitset. - * minsyms.c (add_minsym_to_demangled_hash_table): Update. - (lookup_minimal_symbol): Update. +2020-02-24 Tom de Vries <tdevries@suse.de> -2019-03-15 Tom Tromey <tom@tromey.com> + * tui/tui-layout.c (_initialize_tui_layout): Fix help messages for + commands layout next/prev/regs. - * minsyms.h (class minimal_symbol_reader) <record_with_info>: - Don't return the symbol. - * coffread.c (record_minimal_symbol): Use record_full. +2020-02-22 Tom Tromey <tom@tromey.com> -2019-03-14 Eli Zaretskii <eliz@gnu.org> + * dwarf2/loc.h (dwarf2_compile_expr_to_ax): Don't declare. + * dwarf2/loc.c (dwarf2_compile_expr_to_ax): Now static. - The MS-Windows port of ncurses fails to switch to a color pair if - one or both of the colors are the implicit default colors. This - change records the default colors when TUI is initialized, and - then specifies them explicitly when a color pair uses the default - colors. This allows color styling in TUI mode on MS-Windows. +2020-02-22 Tom Tromey <tom@tromey.com> - * tui/tui-io.c [__MINGW32__]: Include windows.h. Declare - ncurses_norm_attr. - (tui_initialize_io) [__MINGW32__]: Record the default terminal - colors in ncurses_norm_attr. - (apply_ansi_escape) [__MINGW32__]: If a color in a color pair is - "none", replace it with the default color recorded in - ncurses_norm_attr. + * tui/tui-data.h (TUI_DISASM_WIN): Cast to tui_disasm_window. -2019-03-14 Tom Tromey <tromey@adacore.com> +2020-02-22 Tom Tromey <tom@tromey.com> - * source-cache.h (class source_cache) <get_source_lines>: Return - std::string. - * source-cache.c (source_cache::extract_lines): Handle case where - first_pos==npos. Return std::string. - (source_cache::get_source_lines): Update. - -2019-03-14 Tom Tromey <tromey@adacore.com> - - * NEWS: Add item for "style sources" commands. - * source-cache.c (source_cache::get_source_lines): Check - source_styling. - * cli/cli-style.c (source_styling): New global. - (_initialize_cli_style): Add "style sources" commands. - (show_style_sources): New function. - * cli/cli-style.h (source_styling): Declare. + * tui/tui-win.c (_initialize_tui_win): Add usage text. + * tui/tui-stack.c (_initialize_tui_stack): Add usage text. + * tui/tui-regs.c (_initialize_tui_regs): Add usage text. + * tui/tui.c (_initialize_tui): Add usage text. -2019-03-14 Pedro Alves <palves@redhat.com> - Tom Tromey <tromey@adacore.com> +2020-02-22 Tom Tromey <tom@tromey.com> - * tui/tui-winsource.h (tui_refill_source_window): Declare. - * tui/tui-winsource.c (tui_refill_source_window): New function, - from... - (tui_horizontal_source_scroll): ... here. Move some logic. - * cli/cli-style.c (set_style_enabled): Notify new observable. - * tui/tui-hooks.c (tui_redisplay_source): New function. - (tui_attach_detach_observers): Attach or detach - tui_redisplay_source. - * observable.h (source_styling_changed): New observable. - * observable.c: Define source_styling_changed observable. - -2019-03-13 Tom Tromey <tromey@adacore.com> - - * i386-gnu-nat.c (i386_gnu_nat_target::fetch_registers) - (i386_gnu_nat_target::store_registers): Update. - * target-debug.h (target_debug_print_std_string): New macro. - * x86-linux-nat.c (x86_linux_nat_target::enable_btrace): Update. - * windows-tdep.c (display_one_tib): Update. - * tui/tui-stack.c (tui_make_status_line): Update. - * top.c (print_inferior_quit_action): Update. - * thread.c (thr_try_catch_cmd): Update. - (add_thread_with_info): Update. - (thread_target_id_str): Update. - (thr_try_catch_cmd): Update. - (thread_command): Update. - (thread_find_command): Update. - * record-btrace.c (record_btrace_target::info_record) - (record_btrace_resume_thread, record_btrace_target::resume) - (record_btrace_cancel_resume, record_btrace_step_thread) - (record_btrace_target::wait, record_btrace_target::wait) - (record_btrace_target::wait, record_btrace_target::stop): Update. - * progspace.c (print_program_space): Update. - * process-stratum-target.c - (process_stratum_target::thread_address_space): Update. - * linux-fork.c (linux_fork_mourn_inferior) - (detach_checkpoint_command, info_checkpoints_command) - (linux_fork_context): Update. - (linux_fork_detach): Update. - (class scoped_switch_fork_info): Update. - (delete_checkpoint_command): Update. - * infrun.c (follow_fork_inferior): Update. - (follow_fork_inferior): Update. - (proceed_after_vfork_done): Update. - (handle_vfork_child_exec_or_exit): Update. - (follow_exec): Update. - (displaced_step_prepare_throw): Update. - (displaced_step_restore): Update. - (start_step_over): Update. - (resume_1): Update. - (clear_proceed_status_thread): Update. - (proceed): Update. - (print_target_wait_results): Update. - (do_target_wait): Update. - (context_switch): Update. - (stop_all_threads): Update. - (restart_threads): Update. - (finish_step_over): Update. - (handle_signal_stop): Update. - (switch_back_to_stepped_thread): Update. - (keep_going_pass_signal): Update. - (print_exited_reason): Update. - (normal_stop): Update. - * inferior.c (inferior_pid_to_str): Change return type. - (print_selected_inferior): Update. - (add_inferior): Update. - (detach_inferior): Update. - * dummy-frame.c (fprint_dummy_frames): Update. - * dcache.c (dcache_info_1): Update. - * btrace.c (btrace_enable, btrace_disable, btrace_teardown) - (btrace_fetch, btrace_clear): Update. - * linux-tdep.c (linux_core_pid_to_str): Change return type. - * i386-cygwin-tdep.c (i386_windows_core_pid_to_str): Change return - type. - * fbsd-tdep.c (fbsd_core_pid_to_str): Change return type. - * sol2-tdep.h (sol2_core_pid_to_str): Change return type. - * sol2-tdep.c (sol2_core_pid_to_str): Change return type. - * gdbarch.c, gdbarch.h: Rebuild. - * gdbarch.sh (core_pid_to_str): Change return type. - * windows-nat.c (struct windows_nat_target) <pid_to_str>: Change - return type. - (windows_nat_target::pid_to_str): Change return type. - (windows_delete_thread): Update. - (windows_nat_target::attach): Update. - (windows_nat_target::files_info): Update. - * target-delegates.c: Rebuild. - * sol-thread.c (class sol_thread_target) <pid_to_str>: Change - return type. - (sol_thread_target::pid_to_str): Change return type. - * remote.c (class remote_target) <pid_to_str>: Change return - type. - (remote_target::pid_to_str): Change return type. - (extended_remote_target::attach, remote_target::remote_stop_ns) - (remote_target::remote_notif_remove_queued_reply) - (remote_target::push_stop_reply, remote_target::disable_btrace): - Update. - (extended_remote_target::attach): Update. - * remote-sim.c (struct gdbsim_target) <pid_to_str>: Change return - type. - (gdbsim_target::pid_to_str): Change return type. - * ravenscar-thread.c (struct ravenscar_thread_target) - <pid_to_str>: Change return type. - (ravenscar_thread_target::pid_to_str): Change return type. - * procfs.c (class procfs_target) <pid_to_str>: Change return - type. - (procfs_target::pid_to_str): Change return type. - (procfs_target::attach): Update. - (procfs_target::detach): Update. - (procfs_target::fetch_registers): Update. - (procfs_target::store_registers): Update. - (procfs_target::wait): Update. - (procfs_target::files_info): Update. - * obsd-nat.c (obsd_nat_target::pid_to_str): Change return type. - * nto-procfs.c (struct nto_procfs_target) <pid_to_str>: Change - return type. - (nto_procfs_target::pid_to_str): Change return type. - (nto_procfs_target::files_info, nto_procfs_target::attach): Update. - * linux-thread-db.c (class thread_db_target) <pid_to_str>: Change - return type. - * linux-nat.c (linux_nat_target::pid_to_str): Change return type. - (exit_lwp): Update. - (attach_proc_task_lwp_callback, get_detach_signal) - (detach_one_lwp, resume_lwp, linux_nat_target::resume) - (linux_nat_target::resume, wait_lwp, stop_callback) - (maybe_clear_ignore_sigint, stop_wait_callback, status_callback) - (save_stop_reason, select_event_lwp, linux_nat_filter_event) - (linux_nat_wait_1, resume_stopped_resumed_lwps) - (linux_nat_target::wait, linux_nat_stop_lwp): Update. - * inf-ptrace.c (inf_ptrace_target::pid_to_str): Change return - type. - (inf_ptrace_target::attach): Update. - (inf_ptrace_target::files_info): Update. - * go32-nat.c (struct go32_nat_target) <pid_to_str>: Change return - type. - (go32_nat_target::pid_to_str): Change return type. - * gnu-nat.c (gnu_nat_target::pid_to_str): Change return type. - (gnu_nat_target::wait): Update. - (gnu_nat_target::wait): Update. - (gnu_nat_target::resume): Update. - * fbsd-nat.c (fbsd_nat_target::pid_to_str): Change return type. - (fbsd_nat_target::wait): Update. - * darwin-nat.c (darwin_nat_target::pid_to_str): Change return - type. - (darwin_nat_target::attach): Update. - * corelow.c (class core_target) <pid_to_str>: Change return type. - (core_target::pid_to_str): Change return type. - * target.c (normal_pid_to_str): Change return type. - (default_pid_to_str): Likewise. - (target_pid_to_str): Change return type. - (target_translate_tls_address): Update. - (target_announce_detach): Update. - * bsd-uthread.c (struct bsd_uthread_target) <pid_to_str>: Change - return type. - (bsd_uthread_target::pid_to_str): Change return type. - * bsd-kvm.c (class bsd_kvm_target) <pid_to_str>: Change return - type. - (bsd_kvm_target::pid_to_str): Change return type. - * aix-thread.c (class aix_thread_target) <pid_to_str>: Change - return type. - (aix_thread_target::pid_to_str): Change return type. - * target.h (struct target_ops) <pid_to_str>: Change return type. - (target_pid_to_str, normal_pid_to_str): Likewise. - * obsd-nat.h (class obsd_nat_target) <pid_to_str>: Change return - type. - * linux-nat.h (class linux_nat_target) <pid_to_str>: Change return - type. - * inf-ptrace.h (struct inf_ptrace_target) <pid_to_str>: Change - return type. - * gnu-nat.h (struct gnu_nat_target) <pid_to_str>: Change return - type. - * fbsd-nat.h (class fbsd_nat_target) <pid_to_str>: Change return - type. - * darwin-nat.h (class darwin_nat_target) <pid_to_str>: Change - return type. + * tui/tui-win.c (tui_set_focus_command) + (tui_set_win_height_command): Use error_no_arg. + (_initialize_tui_win): Update help text. + (FOCUS_USAGE, WIN_HEIGHT_USAGE): Don't define. -2019-03-13 Simon Marchi <simon.marchi@ericsson.com> +2020-02-22 Tom Tromey <tom@tromey.com> - * NEWS: Mention that the new default MI version is 3. Mention - changes to the output of commands and events that deal with - multi-location breakpoints. - * breakpoint.c: Include "mi/mi-out.h". - (print_one_breakpoint): Change output syntax if using MI version - >= 3. - * mi/mi-main.h (mi_cmd_fix_multi_location_breakpoint_output): - New. - (mi_multi_location_breakpoint_output_fixed): New. - * mi/mi-main.c (fix_multi_location_breakpoint_output): New. - (mi_cmd_fix_multi_location_breakpoint_output): New. - (mi_multi_location_breakpoint_output_fixed): New. - * mi/mi-cmds.c (mi_cmds): Register command - -fix-multi-location-breakpoint-output. - * mi/mi-out.c (mi_out_new): Instantiate version 3 when using - interpreter "mi". - -2019-03-13 Simon Marchi <simon.marchi@polymtl.ca> - - * mi/mi-out.h (mi_out_new): Change parameter to const char *. - * mi/mi-out.c (mi_out_new): Change parameter to const char *, - instantiate mi_ui_out based on interpreter name. - * mi/mi-interp.c (mi_interp::init): Use the new mi_out_new. - * mi/mi-main.c (mi_load_progress): Likewise. - -2019-03-12 John Baldwin <jhb@FreeBSD.org> - - * NEWS: Combine separate "New targets" sections for 8.3. - -2019-03-12 John Baldwin <jhb@FreeBSD.org> - - * ppc-fbsd-tdep.c (ppcfbsd_get_thread_local_address): New. - (ppcfbsd_init_abi): Install gdbarch - "fetch_tls_load_module_address" and "get_thread_local_address" - methods. + * tui/tui-layout.c (extract_display_start_addr): Rewrite. + * tui/tui-disasm.h (struct tui_disasm_window) + <display_start_addr>: Declare. + * tui/tui-source.h (struct tui_source_window) + <display_start_addr>: Declare. + * tui/tui-winsource.h (struct tui_source_window_base) + <show_source_line, display_start_addr>: New methods. + <m_horizontal_offset, m_start_line_or_addr, m_gdbarch, m_content>: + Rename and move to protected section. + * tui/tui-winsource.c (tui_source_window_base::update_source_window) + (tui_source_window_base::do_erase_source_content): Update. + (tui_source_window_base::show_source_line): Now a method. + (tui_source_window_base::show_source_content) + (tui_source_window_base::tui_source_window_base) + (tui_source_window_base::rerender) + (tui_source_window_base::refill) + (tui_source_window_base::do_scroll_horizontal) + (tui_source_window_base::set_is_exec_point_at) + (tui_source_window_base::update_breakpoint_info) + (tui_source_window_base::update_exec_info): Update. + * tui/tui-source.c (tui_source_window::set_contents) + (tui_source_window::showing_source_p) + (tui_source_window::do_scroll_vertical) + (tui_source_window::location_matches_p) + (tui_source_window::line_is_displayed): Update. + (tui_source_window::display_start_addr): New method. + * tui/tui-disasm.c (tui_disasm_window::set_contents) + (tui_disasm_window::do_scroll_vertical) + (tui_disasm_window::location_matches_p): Update. + (tui_disasm_window::display_start_addr): New method. -2019-03-12 John Baldwin <jhb@FreeBSD.org> +2020-02-22 Tom Tromey <tom@tromey.com> - * riscv-fbsd-tdep.c (riscv_fbsd_get_thread_local_address): New. - (riscv_fbsd_init_abi): Install gdbarch - "fetch_tls_load_module_address" and "get_thread_local_address" - methods. + * NEWS: Add entry for gdb.register_window_type. + * tui/tui-layout.h (window_factory): New typedef. + (tui_register_window): Declare. + * tui/tui-layout.c (saved_tui_windows): New global. + (tui_apply_current_layout): Use it. + (tui_register_window): New function. + * python/python.c (do_start_initialization): Call + gdbpy_initialize_tui. + (python_GdbMethods): Add "register_window_type" function. + * python/python-internal.h (gdbpy_register_tui_window) + (gdbpy_initialize_tui): Declare. + * python/py-tui.c: New file. + * Makefile.in (SUBDIR_PYTHON_SRCS): Add py-tui.c. + +2020-02-22 Tom Tromey <tom@tromey.com> + + * tui/tui-io.c (do_tui_putc): Don't omit annotations. + +2020-02-22 Tom Tromey <tom@tromey.com> + + * tui/tui-win.c (tui_set_win_focus_to): Move to tui-data.c. + * tui/tui-data.h (tui_set_win_with_focus): Don't declare. + * tui/tui-data.c (tui_set_win_with_focus): Remove. + (tui_set_win_focus_to): Move from tui-win.c. -2019-03-12 John Baldwin <jhb@FreeBSD.org> +2020-02-22 Tom Tromey <tom@tromey.com> - * i386-fbsd-tdep.c (i386fbsd_get_thread_local_address): New. - (i386fbsd_init_abi): Install gdbarch - "fetch_tls_load_module_address" and "get_thread_local_address" - methods. + * tui/tui-layout.c (make_standard_window, get_locator_window): New + functions. + (known_window_types): New global. + (tui_get_window_by_name): Reimplement. + (initialize_known_windows): New function. + (validate_window_name): Rewrite. + (_initialize_tui_layout): Call initialize_known_windows. -2019-03-12 John Baldwin <jhb@FreeBSD.org> +2020-02-22 Tom Tromey <tom@tromey.com> - * amd64-fbsd-tdep.c (amd64fbsd_get_thread_local_address): New. - (amd64fbsd_init_abi): Install gdbarch - "fetch_tls_load_module_address" and "get_thread_local_address" - methods. + * tui/tui.h (enum tui_win_type) <LOCATOR_WIN, DATA_ITEM_WIN>: + Remove constants. + * tui/tui-winsource.h (struct tui_source_window_base) + <tui_source_window_base>: Remove parameter. + * tui/tui-winsource.c + (tui_source_window_base::tui_source_window_base): Remove + parameter. + (tui_source_window_base::refill): Update. + * tui/tui-stack.h (struct tui_locator_window) + <tui_locator_window>: Update. + * tui/tui-source.h (struct tui_source_window) <tui_source_window>: + Default the constructor. + * tui/tui-regs.h (struct tui_data_item_window) + <tui_data_item_window>: Default the constructor. + (struct tui_data_window) <tui_data_window>: Likewise. + * tui/tui-disasm.h (struct tui_disasm_window) <tui_disasm_window>: + Default the constructor. + * tui/tui-data.h (struct tui_gen_win_info) <tui_gen_win_info>: + Default the constructor. + <type>: Remove. + (struct tui_win_info) <tui_win_info>: Default the constructor. + * tui/tui-data.c (tui_win_info::tui_win_info): Remove. + * tui/tui-command.h (struct tui_cmd_window) <tui_cmd_window>: + Default the constructor. -2019-03-12 John Baldwin <jhb@FreeBSD.org> +2020-02-22 Tom Tromey <tom@tromey.com> - * fbsd-tdep.c (fbsd_pspace_data_handle): New variable. - (struct fbsd_pspace_data): New type. - (get_fbsd_pspace_data, fbsd_pspace_data_cleanup) - (fbsd_read_integer_by_name, fbsd_fetch_rtld_offsets) - (fbsd_get_tls_index, fbsd_get_thread_local_address): New function. - (_initialize_fbsd_tdep): Initialize 'fbsd_pspace_data_handle'. - * fbsd-tdep.c (fbsd_get_thread_local_address): New prototype. + * tui/tui-wingeneral.h (tui_make_all_invisible): Don't declare. + * tui/tui-wingeneral.c (tui_make_all_invisible): Remove. + * tui/tui-win.c (tui_resize_all): Don't call + tui_delete_invisible_windows. + * tui/tui-layout.c (tui_apply_current_layout): Delete windows when + done. + (tui_set_layout): Update. + (tui_add_win_to_layout): Don't call tui_delete_invisible_windows. + * tui/tui-data.h (tui_delete_invisible_windows): Don't declare. + * tui/tui-data.c (tui_delete_invisible_windows): Remove. + +2020-02-22 Tom Tromey <tom@tromey.com> + + * tui/tui-win.c (tui_partial_win_by_name): Handle ambiguity + correctly. + +2020-02-22 Tom Tromey <tom@tromey.com> + + * tui/tui-data.c (tui_next_win, tui_prev_win): Reimplement. + +2020-02-22 Tom Tromey <tom@tromey.com> + + * tui/tui-winsource.h (struct tui_source_window_iterator) + <inner_iterator>: New etytypedef. + <tui_source_window_iterator>: Take "end" parameter. + <tui_source_window_iterator>: Take iterator. + <operator*, advance>: Update. + <m_iter>: Change type. + <m_end>: New field. + (struct tui_source_windows) <begin, end>: Update. + * tui/tui-layout.c (tui_windows): New global. + (tui_apply_current_layout): Clear tui_windows. + (tui_layout_window::apply): Update tui_windows. + * tui/tui-data.h (tui_windows): Declare. + (all_tui_windows): Now inline function. + (class tui_window_iterator, struct all_tui_windows): Remove. + +2020-02-22 Tom Tromey <tom@tromey.com> + + PR tui/17850: + * tui/tui-win.c (tui_gen_win_info::max_width): New method. + * tui/tui-layout.h (class tui_layout_base) <get_sizes>: Add + "height" argument. + (class tui_layout_window) <get_sizes>: Likewise. + (class tui_layout_split) <tui_layout_split>: Add "vertical" + argument. + <get_sizes>: Add "height" argument. + <m_vertical>: New field. + * tui/tui-layout.c (tui_layout_split::clone): Update. + (tui_layout_split::get_sizes): Add "height" argument. + (tui_layout_split::adjust_size, tui_layout_split::apply): Update. + (tui_new_layout_command): Parse "-horizontal". + (_initialize_tui_layout): Update help string. + (tui_layout_split::specification): Add "-horizontal" when needed. + * tui/tui-layout.c (tui_layout_window::get_sizes): Add "height" + argument. + * tui/tui-data.h (struct tui_gen_win_info) <max_width, min_width>: + New methods. -2019-03-12 John Baldwin <jhb@FreeBSD.org> +2020-02-22 Tom Tromey <tom@tromey.com> - * gdbtypes.c (lookup_struct_elt): New function. - (lookup_struct_elt_type): Reimplement via lookup_struct_elt. - * gdbtypes.h (struct struct_elt): New type. - (lookup_struct_elt): New prototype. + * tui/tui-layout.h (enum tui_adjust_result): New. + (class tui_layout_base) <adjust_size>: Return tui_adjust_result. + (class tui_layout_window) <adjust_size>: Return + tui_adjust_result. Rewrite. + (class tui_layout_split) <adjust_size>: Return tui_adjust_result. + * tui/tui-layout.c (tui_layout_split::adjust_size): Update. + +2020-02-22 Tom Tromey <tom@tromey.com> + + * tui/tui-layout.h (class tui_layout_split) <add_split>: Change + parameter and return types. + (class tui_layout_base) <specification>: Add "depth". + (class tui_layout_window) <specification>: Add "depth". + (class tui_layout_split) <specification>: Add "depth". + * tui/tui-layout.c (tui_layout_split::add_split): Change parameter + and return types. + (tui_new_layout_command): Parse sub-layouts. + (_initialize_tui_layout): Update help string. + (tui_layout_window::specification): Add "depth". + (add_layout_command): Update. + +2020-02-22 Tom Tromey <tom@tromey.com> + + * NEWS: Add "tui new-layout" item. + * tui/tui-layout.c (add_layout_command): Return cmd_list_element. + Add new-layout command to help text. + (validate_window_name): New function. + (tui_new_layout_command): New function. + (_initialize_tui_layout): Register "new-layout". + (tui_layout_window::specification): New method. + (tui_layout_window::specification): New method. + * tui/tui-layout.h (class tui_layout_base) <specification>: New + method. + (class tui_layout_window) <specification>: New method. + (class tui_layout_split) <specification>: New method. -2019-03-12 John Baldwin <jhb@FreeBSD.org> +2020-02-22 Tom Tromey <tom@tromey.com> - * gdbtypes.c (lookup_struct_elt_type): Update comment and - remove disabled code block. + * tui/tui.c (tui_enable): Call tui_set_initial_layout. + * tui/tui-win.c (window_name_completer): Update comment. + * tui/tui-layout.h (class tui_layout_base) <replace_window>: + Declare method. + (class tui_layout_window) <replace_window>: Likewise. + (class tui_layout_split) <replace_window>: Likewise. + (tui_set_layout): Don't declare. + (tui_set_initial_layout): Declare function. + * tui/tui-layout.c (layouts, applied_skeleton, src_regs_layout) + (asm_regs_layout): New globals. + (tui_current_layout, show_layout): Remove. + (tui_set_layout, tui_add_win_to_layout): Rewrite. + (find_layout, tui_apply_layout): New function. + (layout_completer): Remove. + (tui_next_layout): Reimplement. + (tui_next_layout_command): New function. + (tui_set_initial_layout, tui_prev_layout_command): New functions. + (tui_regs_layout): Reimplement. + (tui_regs_layout_command): New function. + (extract_display_start_addr): Rewrite. + (next_layout, prev_layout): Remove. + (tui_layout_window::replace_window): New method. + (tui_layout_split::replace_window): New method. + (destroy_layout): New function. + (layout_list): New global. + (add_layout_command): New function. + (initialize_layouts): Update. + (tui_layout_command): New function. + (_initialize_tui_layout): Install "layout" commands. + * tui/tui-data.h (enum tui_layout_type): Remove. + (tui_current_layout): Don't declare. + +2020-02-22 Tom Tromey <tom@tromey.com> + + * tui/tui-regs.c (tui_reg_layout): Remove. + (tui_reg_command): Use tui_regs_layout. + * tui/tui-layout.h (tui_reg_command): Declare. + * tui/tui-layout.c (tui_reg_command): New function. + +2020-02-22 Tom Tromey <tom@tromey.com> + + * tui/tui.c (tui_rl_delete_other_windows): Call + tui_remove_some_windows. + * tui/tui-layout.h (class tui_layout_base) <remove_windows>: + Declare method. + (class tui_layout_window) <remove_windows>: New method. + (class tui_layout_split) <remove_windows>: Declare. + (tui_remove_some_windows): Declare. + * tui/tui-layout.c (tui_remove_some_windows): New function. + (tui_layout_split::remove_windows): New method. + +2020-02-22 Tom Tromey <tom@tromey.com> + + * tui/tui.c (tui_rl_change_windows): Call tui_next_layout. + * tui/tui-layout.h (tui_next_layout): Declare. + * tui/tui-layout.c (tui_next_layout): New function. + +2020-02-22 Tom Tromey <tom@tromey.com> + + * tui/tui-regs.c (tui_data_window::display_registers_from): Use + correct coordinates. + +2020-02-22 Tom Tromey <tom@tromey.com> + + * tui/tui-layout.h (tui_add_win_to_layout): Add comment. + * tui/tui-layout.c (tui_add_win_to_layout): Add assert. Remove + DATA_WIN case. + +2020-02-22 Tom Tromey <tom@tromey.com> + + * tui/tui-disasm.c (tui_get_low_disassembly_address): Use + TUI_DISASM_WIN, not tui_win_list. + +2020-02-22 Tom Tromey <tom@tromey.com> + + * valprint.c (generic_val_print_enum_1) + (val_print_type_code_flags): Style member names. + * rust-lang.c (val_print_struct, rust_print_enum) + (rust_print_struct_def, rust_internal_print_type): Style member + names. + * p-valprint.c (pascal_object_print_value_fields): Style member + names. Only call fprintf_symbol_filtered for static members. + * m2-typeprint.c (m2_record_fields, m2_enum): Style member names. + * f-valprint.c (f_val_print): Style member names. + * f-typeprint.c (f_type_print_base): Style member names. + * cp-valprint.c (cp_print_value_fields): Style member names. Only + call fprintf_symbol_filtered for static members. + (cp_print_class_member): Style member names. + * c-typeprint.c (c_print_type_1, c_type_print_base_1): Style + member names. + * ada-valprint.c (ada_print_scalar): Style enum names. + (ada_val_print_enum): Likewise. + * ada-typeprint.c (print_enum_type): Style enum names. -2019-03-12 John Baldwin <jhb@FreeBSD.org> +2020-02-21 Tom Tromey <tom@tromey.com> - * gdbarch.sh (get_thread_local_address): New method. - * gdbarch.h, gdbarch.c: Regenerate. - * target.c (target_translate_tls_address): Use - gdbarch_get_thread_local_address if present instead of - target::get_thread_local_address. - -2019-03-12 John Baldwin <jhb@FreeBSD.org> - - * target.h (target::get_thread_local_address): Update comment. - -2019-03-12 John Baldwin <jhb@FreeBSD.org> - - * solib-svr4.c (svr4_fetch_objfile_link_map): Look for - objfile->separate_debug_objfile_backlink if not NULL. - -2019-03-12 John Baldwin <jhb@FreeBSD.org> - - * amd64-bsd-nat.c (amd64bsd_fetch_inferior_registers): Use - tdep->fsbase_regnum instead of constants for fs_base and gs_base. - (amd64bsd_store_inferior_registers): Likewise. - * amd64-fbsd-nat.c (amd64_fbsd_nat_target::read_description): - Enable segment base registers. - * i386-bsd-nat.c (i386bsd_fetch_inferior_registers): Use - PT_GETFSBASE and PT_GETGSBASE. - (i386bsd_store_inferior_registers): Use PT_SETFSBASE and - PT_SETGSBASE. - * i386-fbsd-nat.c (i386_fbsd_nat_target::read_description): Enable - segment base registers. - * i386-fbsd-tdep.c (i386fbsd_core_read_description): Likewise. + * psympriv.h (struct partial_symtab): Update comment. -2019-03-12 John Baldwin <jhb@FreeBSD.org> +2020-02-21 Tom Tromey <tromey@adacore.com> - * amd64-fbsd-nat.c (amd64_fbsd_nat_target::read_description): - Update calls to i386_target_description to add 'segments' - parameter. - * amd64-tdep.c (amd64_init_abi): Set tdep->fsbase_regnum. Don't - add segment base registers. - * arch/i386.c (i386_create_target_description): Add 'segments' - parameter to enable segment base registers. - * arch/i386.h (i386_create_target_description): Likewise. - * features/i386/32bit-segments.xml: New file. - * features/i386/32bit-segments.c: Generate. - * i386-fbsd-nat.c (i386_fbsd_nat_target::read_description): Update - call to i386_target_description to add 'segments' parameter. - * i386-fbsd-tdep.c (i386fbsd_core_read_description): Likewise. - * i386-go32-tdep.c (i386_go32_init_abi): Likewise. - * i386-linux-tdep.c (i386_linux_read_description): Likewise. - * i386-tdep.c (i386_validate_tdesc_p): Add segment base registers - if feature is present. - (i386_gdbarch_init): Pass I386_NUM_REGS to set_gdbarch_num_regs. - Add 'segments' parameter to call to i386_target_description. - (i386_target_description): Add 'segments' parameter to enable - segment base registers. - (_initialize_i386_tdep) [GDB_SELF_TEST]: Add 'segments' parameter - to call to i386_target_description. - * i386-tdep.h (struct gdbarch_tdep): Add 'fsbase_regnum'. - (enum i386_regnum): Add I386_FSBASE_REGNUM and I386_GSBASE_REGNUM. - Define I386_NUM_REGS. - (i386_target_description): Add 'segments' parameter to enable - segment base registers. - -2019-03-12 Eli Zaretskii <eliz@gnu.org> - - PR/24325 - * source-cache.c: #undef open and close, to avoid unresolved - externals during linking. - -2019-03-12 Tom Tromey <tromey@adacore.com> - - * remote.c (magic_null_ptid, not_sent_ptid, any_thread_ptid): Now - const. Add initializers. - (_initialize_remote): Don't initialize ptid globals. - -2019-03-12 Pedro Alves <palves@redhat.com> - - * yy-remap.h [TEST_CPNAMES] (YYFPRINTF): Don't define. - -2019-03-12 Pedro Alves <palves@redhat.com> - - * cp-name-parser.y (main): Remove unused 'len' variable. - -2019-03-12 Tom Tromey <tromey@adacore.com> - - * common/ptid.c (null_ptid, minus_one_ptid): Now const. - * common/ptid.h (null_ptid, minus_one_ptid): Now const. - -2019-03-12 Tom Tromey <tromey@adacore.com> - - * linux-nat.c (iterate_over_lwps): Update. - (stop_callback): Remove parameter. - (stop_wait_callback, detach_callback, resume_set_callback) - (select_singlestep_lwp_callback, set_ignore_sigint) - (status_callback, resumed_callback, resume_clear_callback) - (kill_callback, kill_wait_callback, linux_nat_stop_lwp): Remove - data parameter. - (linux_nat_target::detach, linux_nat_target::resume) - (linux_stop_and_wait_all_lwps, select_event_lwp) - (linux_nat_filter_event, linux_nat_wait_1) - (linux_nat_target::kill, linux_nat_target::stop) - (linux_nat_target::stop): Update. - (linux_nat_resume_callback): Change type. - (resume_stopped_resumed_lwps, count_events_callback) - (select_event_lwp_callback): Likewise. - (linux_stop_lwp, linux_nat_stop_lwp): Update. - * arm-linux-nat.c (struct update_registers_data): Remove. - (update_registers_callback): Change type. - (arm_linux_insert_hw_breakpoint1): Update. - * nat/x86-linux-dregs.c (update_debug_registers_callback): Remove - parameter. - (x86_linux_dr_set_addr): Update. - (x86_linux_dr_set_control): Update. - * nat/linux-nat.h (iterate_over_lwps_ftype): Remove parameter. - (iterate_over_lwps): Use gdb::function_view. - * nat/aarch64-linux-hw-point.c (struct - aarch64_dr_update_callback_param): Remove. - (debug_reg_change_callback): Change type. - (aarch64_notify_debug_reg_change): Update. - * s390-linux-nat.c (s390_refresh_per_info): Update. + * mips-tdep.h (mips_pc_is_mips16, mips_pc_is_micromips): Parameter + type is CORE_ADDR. -2019-03-11 Tom Tromey <tromey@adacore.com> +2020-02-21 Tom de Vries <tdevries@suse.de> - * dwarf2read.c (dwarf2_find_containing_comp_unit): Remove - redundant assignment to "this_cu". + PR gdb/25534 + * psymtab.c (partial_symtab::read_dependencies): Don't read dependency + if dependencies[i]->user != NULL. -2019-03-08 Simon Marchi <simon.marchi@efficios.com> +2020-02-21 Ali Tamur <tamur@google.com> - * gdbtypes.c (rank_one_type): Remove unnecessary cases from switch. + * dwarf2/read.c (dwarf2_name): Add null check. -2019-03-08 Simon Marchi <simon.marchi@efficios.com> +2020-02-20 Tom Tromey <tom@tromey.com> - * gdbtypes.c (rank_one_type_parm_set): New function extracted - from... - (rank_one_type): ... this. + * dwarf2/read.c (dwarf2_find_containing_comp_unit): Use ">", not + ">=", in binary search. + (dwarf2_find_containing_comp_unit): New overload. + (run_test): New self-test. + (_initialize_dwarf2_read): Register new test. -2019-03-08 Simon Marchi <simon.marchi@efficios.com> +2020-02-20 Nelson Chu <nelson.chu@sifive.com> - * gdbtypes.c (rank_one_type_parm_struct): New function extracted - from... - (rank_one_type): ... this. + * riscv-tdep.c: Updated since the DECLARE_CSR is changed. + * riscv-tdep.h: Likewise. + * features/riscv/rebuild-csr-xml.sh: Generate the 64bit-csr.xml without + rv32-only CSR. + * features/riscv/64bit-csr.xml: Regenerated. -2019-03-08 Simon Marchi <simon.marchi@efficios.com> +2020-02-20 Sergio Durigan Junior <sergiodj@redhat.com> + Tom Tromey <tom@tromey.com> - * gdbtypes.c (rank_one_type_parm_complex): New function extracted - from... - (rank_one_type): ... this. + * utils.c (fputs_maybe_filtered): Call 'stream->puts' instead + of 'fputc_unfiltered'. + (putchar_unfiltered): Call 'fputc_unfiltered'. + (fputc_unfiltered): Call 'fputs_unfiltered'. -2019-03-08 Simon Marchi <simon.marchi@efficios.com> +2020-02-20 Andrew Burgess <andrew.burgess@embecosm.com> - * gdbtypes.c (rank_one_type_parm_float): New function extracted - from... - (rank_one_type): ... this. + * config.in: Regenerate. + * configure: Regenerate. + * configure.ac: Add --with-python-libdir option. + * main.c: Use WITH_PYTHON_LIBDIR. -2019-03-08 Simon Marchi <simon.marchi@efficios.com> +2020-02-19 Tom Tromey <tom@tromey.com> - * gdbtypes.c (rank_one_type_parm_bool): New function extracted - from... - (rank_one_type): ... this. + * symtab.c (general_symbol_info::compute_and_set_names): Use + obstack_strndup. Simplify call to symbol_set_demangled_name. -2019-03-08 Simon Marchi <simon.marchi@efficios.com> +2020-02-19 Simon Marchi <simon.marchi@efficios.com> - * gdbtypes.c (rank_one_type_parm_range): New function extracted - from... - (rank_one_type): ... this. + * dwarf2/read.c (allocate_signatured_type_table, + allocate_dwo_unit_table, allocate_type_unit_groups_table, + allocate_dwo_file_hash_table, allocate_dwp_loaded_cutus_table): + Remove objfile parameter, update all callers. -2019-03-08 Simon Marchi <simon.marchi@efficios.com> +2020-02-19 Doug Evans <dje@google.com> - * gdbtypes.c (rank_one_type_parm_char): New function extracted - from... - (rank_one_type): ... this. + PR rust/25535 + * rust-lang.c (rust_print_enum): Apply embedded_offset to + rust_enum_variant calculation. -2019-03-08 Simon Marchi <simon.marchi@efficios.com> +2020-02-19 Tom Tromey <tromey@adacore.com> - * gdbtypes.c (rank_one_type_parm_enum): New function extracted - from... - (rank_one_type): ... this. + * mips-tdep.h (mips_pc_is_mips): Parameter type is CORE_ADDR. -2019-03-08 Simon Marchi <simon.marchi@efficios.com> +2020-02-19 Tom Tromey <tromey@adacore.com> - * gdbtypes.c (rank_one_type_parm_int): New function extracted - from... - (rank_one_type): ... this. + * ada-lang.c (cache_symbol): Use obstack_strdup. -2019-03-08 Simon Marchi <simon.marchi@efficios.com> +2020-02-19 Andrew Burgess <andrew.burgess@embecosm.com> - * gdbtypes.c (rank_one_type_parm_func): New function extracted - from... - (rank_one_type): ... this. + * configure: Regenerate. -2019-03-08 Simon Marchi <simon.marchi@efficios.com> +2020-02-19 Tom Tromey <tromey@adacore.com> - * gdbtypes.c (rank_one_type_parm_array): New function extracted - from... - (rank_one_type): ... this. + * python/python.c (do_start_initialization): Use XNEWVEC. Remove + NULL check. -2019-03-08 Simon Marchi <simon.marchi@efficios.com> +2020-02-19 Maciej W. Rozycki <macro@wdc.com> - * gdbtypes.c (rank_one_type_parm_ptr): New function extracted - from... - (rank_one_type): ... this. + * NEWS: Mention RISC-V GNU/Linux GDBserver support. -2019-02-27 Philippe Waroquiers <philippe.waroquiers@skynet.be> +2020-02-19 Andrew Burgess <andrew.burgess@embecosm.com> - * inferior.c (initialize_inferiors): Ensure 'help set/show print - inferior-events' shows the example events. + * arch/riscv.c (struct riscv_gdbarch_features_hasher): Only define + if GDBSERVER is not defined. + (riscv_tdesc_cache): Likewise, also store const target_desc. + (STATIC_IN_GDB): Define. + (riscv_create_target_description): Update declaration with + STATIC_IN_GDB. + (riscv_lookup_target_description): New function, only define if + GDBSERVER is not defined. + * arch/riscv.h (riscv_create_target_description): Declare only + when GDBSERVER is defined. + (riscv_lookup_target_description): New declaration when GDBSERVER + is not defined. + * nat/riscv-linux-tdesc.c (riscv_linux_read_description): Rename to... + (riscv_linux_read_features): ...this, and return + riscv_gdbarch_features instead of target_desc. + * nat/riscv-linux-tdesc.h: Include 'arch/riscv.h'. + (riscv_linux_read_description): Rename to... + (riscv_linux_read_features): ...this. + * riscv-linux-nat.c (riscv_linux_nat_target::read_description): + Update to use riscv_gdbarch_features and + riscv_lookup_target_description. + * riscv-tdep.c (riscv_find_default_target_description): Use + riscv_lookup_target_description instead of + riscv_create_target_description. + +2020-02-18 Simon Marchi <simon.marchi@efficios.com> + + * valprint.c (generic_val_print_enum_1): When printing a flag + enum with value 0 and there is no enumerator with value 0, print + just "0" instead of "(unknown: 0x0)". + +2020-02-18 Simon Marchi <simon.marchi@efficios.com> + + * valprint.c (generic_val_print_enum_1): Print unknown part of + flag enum in hex. + +2020-02-18 Simon Marchi <simon.marchi@efficios.com> + + * dwarf2/read.c (update_enumeration_type_from_children): Allow + flag enums to contain duplicate enumerators. + * valprint.c (generic_val_print_enum_1): Update comment. + +2020-02-18 Simon Marchi <simon.marchi@efficios.com> + + * dwarf2/read.c: Include "count-one-bits.h". + (update_enumeration_type_from_children): If an enumerator has + multiple bits set, don't treat the enumeration as a "flag enum". + * valprint.c (generic_val_print_enum_1): Assert that enumerators + of flag enums have 0 or 1 bit set. + +2020-02-18 Bernd Edlinger <bernd.edlinger@hotmail.de> + + * aarch64-tdep.c (aarch64_displaced_step_copy_insn): Use an explicit + conversion. + * amd64-tdep.c (amd64_displaced_step_copy_insn): Likewise. + * arm-linux-tdep.c (arm_linux_displaced_step_copy_insn): Likewise. + * i386-tdep.c (i386_displaced_step_copy_insn): Likewise. + * rs6000-tdep.c (ppc_displaced_step_copy_insn): Likewise. + * s390-tdep.c (s390_displaced_step_copy_insn): Likewise. + +2020-02-18 Simon Marchi <simon.marchi@efficios.com> + + * MAINTAINERS: Change palmer@sifive.com to palmer@dabbelt.com. + +2020-02-14 Simon Marchi <simon.marchi@efficios.com> + + * aarch64-tdep.c (aarch64_displaced_step_copy_insn): Use + displaced_step_closure_up. + * aarch64-tdep.h (aarch64_displaced_step_copy_insn): Likewise. + (struct displaced_step_closure_up): + * amd64-tdep.c (amd64_displaced_step_copy_insn): Likewise. + * amd64-tdep.h (amd64_displaced_step_copy_insn): Likewise. + * arm-linux-tdep.c (arm_linux_displaced_step_copy_insn): + Likewise. + * gdbarch.sh (displaced_step_copy_insn): Likewise. + * gdbarch.c, gdbarch.h: Re-generate. + * i386-linux-tdep.c (i386_linux_displaced_step_copy_insn): Use + displaced_step_closure_up. + * i386-tdep.c (i386_displaced_step_copy_insn): Likewise. + * i386-tdep.h (i386_displaced_step_copy_insn): Likewise. + * infrun.h (displaced_step_closure_up): New type alias. + (struct displaced_step_inferior_state) <step_closure>: Change + type to displaced_step_closure_up. + * rs6000-tdep.c (ppc_displaced_step_copy_insn): Use + displaced_step_closure_up. + * s390-tdep.c (s390_displaced_step_copy_insn): Likewise. + +2020-02-14 Tom Tromey <tom@tromey.com> + + * minidebug.c (gnu_debug_key): New global. + (find_separate_debug_file_in_section): Use it. + +2020-02-14 Simon Marchi <simon.marchi@efficios.com> + + * gdbarch.sh (displaced_step_copy_insn): Change return type to an + std::unique_ptr. + * gdbarch.c: Re-generate. + * gdbarch.h: Re-generate. + * infrun.c (displaced_step_prepare_throw): Adjust to std::unique_ptr + change. + * aarch64-tdep.c (aarch64_displaced_step_copy_insn): Change return + type to std::unique_ptr. + * aarch64-tdep.h (aarch64_displaced_step_copy_insn): Likewise. + * amd64-tdep.c (amd64_displaced_step_copy_insn): Likewise. + * amd64-tdep.h (amd64_displaced_step_copy_insn): Likewise. + * arm-linux-tdep.c (arm_linux_displaced_step_copy_insn): Likewise. + * i386-linux-tdep.c (i386_linux_displaced_step_copy_insn): Likewise. + * i386-tdep.c (i386_displaced_step_copy_insn): Likewise. + * i386-tdep.h (i386_displaced_step_copy_insn): Likewise. + * rs6000-tdep.c (ppc_displaced_step_copy_insn): Likewise. + * s390-tdep.c (s390_displaced_step_copy_insn): Likewise. + +2020-02-14 Simon Marchi <simon.marchi@efficios.com> + + * infrun.c (get_displaced_step_closure_by_addr): Adjust to + std::unique_ptr. + (displaced_step_clear): Rename to... + (displaced_step_reset): ... this. Just call displaced->reset (). + (displaced_step_clear_cleanup): Rename to... + (displaced_step_reset_cleanup): ... this. + (displaced_step_prepare_throw): Adjust to std::unique_ptr. + (displaced_step_fixup): Likewise. + (resume_1): Likewise. + (handle_inferior_event): Restore child's memory before calling + displaced_step_fixup on the parent. + * infrun.h (displaced_step_inferior_state) <reset>: Adjust + to std::unique_ptr. + <step_closure>: Change type to std::unique_ptr. + +2020-02-14 Simon Marchi <simon.marchi@efficios.com> + + * arm-tdep.c: Include count-one-bits.h. + (cleanup_block_store_pc): Use count_one_bits. + (cleanup_block_load_pc): Use count_one_bits. + (arm_copy_block_xfer): Use count_one_bits. + (thumb2_copy_block_xfer): Use count_one_bits. + (thumb_copy_pop_pc_16bit): Use count_one_bits. + * arch/arm-get-next-pcs.c: Include count-one-bits.h. + (thumb_get_next_pcs_raw): Use count_one_bits. + (arm_get_next_pcs_raw): Use count_one_bits_l. + * arch/arm.c (bitcount): Remove. + * arch/arm.h (bitcount): Remove. -2019-03-08 Eli Zaretskii <eliz@gnu.org> +2020-02-14 Tom Tromey <tromey@adacore.com> - Support styling on native MS-Windows console + * dwarf2/frame-tailcall.c (dwarf2_tailcall_sniffer_first): + Update. + * dwarf2/loc.h (call_site_find_chain): Return unique_xmalloc_ptr. + * dwarf2/loc.c (call_site_find_chain_1): Return + unique_xmalloc_ptr. + (call_site_find_chain): Likewise. - PR/24315 - * utils.c (can_emit_style_escape) [_WIN32]: Don't disable styling - on MS-Windows if $TERM is not defined. +2020-02-14 Richard Biener <rguenther@suse.de> - * cli/cli-style.c: Set cli_styling to 1 in the MinGW build. + * dwarf2/read.c (lnp_state_machine::handle_special_opcode): Apply CSE + on expression with division operators. - * posix-hdep.c (gdb_console_fputs): - * mingw-hdep.c (rgb_to_16colors, gdb_console_fputs): New - functions. - * ui-file.h (gdb_console_fputs): Add prototype. +2020-02-13 Alok Kumar Sharma <AlokKumar.Sharma@amd.com> - * ui-file.c (stdio_file::puts): Call gdb_console_fputs, and fall - back to fputs only if the former returns zero. + * MAINTAINERS (Write After Approval): Adding myself. -2019-03-07 Tom Tromey <tom@tromey.com> +2020-02-12 Tom Tromey <tom@tromey.com> - * symmisc.c (print_symbol_bcache_statistics): Update. - (print_objfile_statistics): Update. - * symfile.c (allocate_symtab): Update. - * stabsread.c: Don't include bcache.h. - * psymtab.h (struct psymbol_bcache): Don't declare. - (class psymtab_storage) <psymbol_cache>: Now a bcache. - (psymbol_bcache_init, psymbol_bcache_free) - (psymbol_bcache_get_bcache): Don't declare. - * psymtab.c (struct psymbol_bcache): Remove. - (psymtab_storage::psymtab_storage): Update. - (psymtab_storage::~psymtab_storage): Update. - (psymbol_bcache_init, psymbol_bcache_free) - (psymbol_bcache_get_bcache, psymbol_bcache_full): Remove. - (add_psymbol_to_bcache): Update. - (allocate_psymtab): Update. - * objfiles.h (struct objfile_per_bfd_storage) <filename_cache, - macro_cache>: No longer pointers. - * objfiles.c (get_objfile_bfd_data): Don't call bcache_xmalloc. - (free_objfile_per_bfd_storage): Don't call bcache_xfree. - * macrotab.c (macro_bcache): Update. - * macroexp.c: Don't include bcache.h. - * gdbtypes.c (check_types_worklist): Update. - (types_deeply_equal): Remove TRY/CATCH. Update. - * elfread.c (elf_symtab_read): Update. - * dwarf2read.c: Don't include bcache.h. - * buildsym.c (buildsym_compunit::get_macro_table): Update. - * bcache.h (bcache, bcache_full, bcache_xffree, bcache_xmalloc) - (print_bcache_statistics, bcache_memory_used): Don't declare. - (struct bcache): Move from bcache.c. Add constructor, destructor, - methods. Rename all data members. - * bcache.c (struct bcache): Move to bcache.h. - (bcache::expand_hash_table): Rename from expand_hash_table. - (bcache): Remove. - (bcache::insert): Rename from bcache_full. - (bcache::compare): Rename from bcache_compare. - (bcache_xmalloc): Remove. - (bcache::~bcache): Rename from bcache_xfree. - (bcache::print_statistics): Rename from print_bcache_statistics. - (bcache::memory_used): Rename from bcache_memory_used. - -2019-03-07 Pedro Alves <palves@redhat.com> - - * infrun.c (normal_stop): Also check for - TARGET_WAITKIND_NO_RESUMED before referring to inferior_thread(). - -2019-03-07 Andrew Burgess <andrew.burgess@embecosm.com> - - * f-lang.c (value_from_host_double): Moved to... - * value.c (value_from_host_double): ...here. - * value.h (value_from_host_double): Declare. - * guile/scm-math.c (vlscm_convert_typed_number): Use - value_from_host_double. - (vlscm_convert_number): Likewise. - * guile/scm-value.c (gdbscm_value_to_real): Likewise. - * python/py-value.c (convert_value_from_python): Likewise. - -2019-03-06 Tom Tromey <tom@tromey.com> + * event-loop.c (event_data, gdb_event, event_handler_func): + Remove. - * gcore.c (write_gcore_file): Use SCOPE_EXIT. +2020-02-12 Tom Tromey <tom@tromey.com> -2019-03-06 Tom Tromey <tom@tromey.com> + * dwarf2/frame.c (dwarf2_frame_bfd_data): New global. + (dwarf2_frame_objfile_data): Add comment. + (find_comp_unit, set_comp_unit): New functions. + (dwarf2_frame_find_fde): Use find_comp_unit. + (dwarf2_build_frame_info): Use set_comp_unit. + +2020-02-12 Tom Tromey <tom@tromey.com> + + * dwarf2/frame.c (struct comp_unit) <objfile>: Remove. + (comp_unit): Don't initialize objfile. + (execute_cfa_program): Add text_offset parameter. + (execute_cfa_program_test, dwarf2_fetch_cfa_info) + (dwarf2_frame_cache): Update. + (dwarf2_build_frame_info): Don't set "objfile" member. - * utils.h (free_current_contents): Don't declare. - * utils.c (free_current_contents): Remove. +2020-02-12 Tom Tromey <tom@tromey.com> -2019-03-06 Tom Tromey <tom@tromey.com> + * dwarf2/frame.c (decode_frame_entry_1): Add gdbarch parameter. + (decode_frame_entry): Likewise. + (dwarf2_build_frame_info): Update. - * top.c (quit_force): Update. - * main.c (captured_command_loop): Update. - * common/new-op.c (operator new): Update. - * common/common-exceptions.c (struct catcher) - <save_cleanup_chain>: Remove member. - (exceptions_state_mc_init): Update. - (exception_try_scope_entry): Return nullptr. - (exception_try_scope_exit, exception_rethrow) - (throw_exception_sjlj, throw_exception_cxx): Update. - * common/cleanups.h (make_cleanup, make_cleanup_dtor) - (all_cleanups, do_cleanups, discard_cleanups) - (discard_final_cleanups, save_cleanups, save_final_cleanups) - (restore_cleanups, restore_final_cleanups): Don't declare. - (do_final_cleanups): Remove parameter. - * common/cleanups.c (cleanup_chain, make_cleanup) - (make_cleanup_dtor, all_cleanups, do_cleanups) - (discard_my_cleanups, discard_cleanups) - (discard_final_cleanups, save_my_cleanups, save_cleanups) - (save_final_cleanups, restore_my_cleanups, restore_cleanups) - (null_cleanup): Remove. - (do_final_cleanups): Remove parameter. +2020-02-12 Tom Tromey <tom@tromey.com> -2019-03-06 Tom Tromey <tom@tromey.com> + * dwarf2/frame.c (struct comp_unit) <obstack>: New member. + (decode_frame_entry_1): Use the comp_unit obstack. - * remote.c (remote_target::remote_parse_stop_reply): Use - unique_xmalloc_ptr. +2020-02-12 Tom Tromey <tom@tromey.com> -2019-03-06 Tom Tromey <tom@tromey.com> + * dwarf2/frame.c (struct comp_unit): Add initializers and + constructor. + (dwarf2_frame_objfile_data): Store a comp_unit. + (dwarf2_frame_find_fde): Update. + (dwarf2_build_frame_info): Use "new". - * stabsread.c (struct stabs_field_info): Rename from field_info. - <list, fnlist>: Add initializers. - <obstack>: New member. - (read_member_functions, read_struct_fields, read_baseclasses): - Allocate on obstack. Don't use cleanups. - (read_one_struct_field, read_member_functions, read_struct_fields) - (read_baseclasses, read_tilde_fields, attach_fn_fields_to_type) - (attach_fields_to_type, read_cpp_abbrev, read_member_functions) - (read_struct_type): Update. - -2019-03-06 Tom Tromey <tom@tromey.com> - - * nat/linux-namespaces.c (linux_mntns_access_fs): Use SCOPE_EXIT. - * common/filestuff.h (make_cleanup_close): Don't declare. - * common/filestuff.c (do_close_cleanup, make_cleanup_close): - Remove. +2020-02-12 Tom Tromey <tom@tromey.com> -2019-03-06 Tom Tromey <tom@tromey.com> + * dwarf2/frame.c (struct dwarf2_fde_table): Remove. + (dwarf2_fde_table): Typedef for std::vector. + (dwarf2_frame_objfile_data): Remove the deleter. Now static. + (dwarf2_frame_find_fde, add_fde, decode_frame_entry_1) + (decode_frame_entry): Update. + (dwarf2_build_frame_info): Use "new". - * solib-aix.c: Use make_scope_exit. +2020-02-12 Christian Biesinger <cbiesinger@google.com> -2019-03-06 Tom Tromey <tom@tromey.com> + * arm-tdep.c (arm_gdbarch_init): Update. + * arm-tdep.h (struct gdbarch_tdep) <have_fpa_registers, + have_wmmx_registers, have_vfp_pseudos, have_neon_pseudos, + have_neon, is_m>: Change to bool. - * solib-svr4.c (svr4_parse_libraries, svr4_current_sos_direct): - Use make_scope_exit. +2020-02-12 Christian Biesinger <cbiesinger@google.com> -2019-03-06 Tom Tromey <tom@tromey.com> - - * solib-svr4.c (disable_probes_interface): Remove parameter. - (svr4_handle_solib_event): Use make_scope_exit. - -2019-03-06 Tom Tromey <tom@tromey.com> - - * remote.c (struct stop_reply_deleter): Remove. - (stop_reply_up): Update. - (struct stop_reply): Derive from notif_event. Don't typedef. - <regcache>: Now a std::vector. - (stop_reply_xfree): Remove. - (stop_reply::~stop_reply): Rename from stop_reply_dtr. - (remote_notif_stop_alloc_reply): Return a unique_ptr. Use new. - (remote_target::discard_pending_stop_replies): Use delete. - (remote_target::remote_parse_stop_reply): Update. - (remote_target::process_stop_reply): Update. - * remote-notif.h (struct notif_event): Add virtual destructor. - Remove "dtr" member. - (struct notif_client) <alloc_event>: Return a unique_ptr. - (notif_event_xfree): Don't declare. - (notif_event_up): New typedef. - * remote-notif.c (remote_notif_ack, remote_notif_parse): Update. - (notif_event_xfree, do_notif_event_xfree): Remove. - (remote_notif_state_xfree): Update. - -2019-03-06 Tom Tromey <tom@tromey.com> - - * infrun.c (displaced_step_clear_cleanup): Now a - forward_scope_exit type. - (displaced_step_prepare_throw): Update. - (displaced_step_fixup): Update. + * arm-tdep.c (arm_dump_tdep): Print more fields of tdep. -2019-03-06 Tom Tromey <tom@tromey.com> +2020-02-12 Tom Tromey <tom@tromey.com> - * inferior.h (class inferior): Update comment. - * gdbthread.h (class thread_info): Update comment. + * dwarf2/loc.c (struct dwarf_expr_baton): Remove. -2019-03-06 Joel Brobecker <brobecker@adacore.com> - Tom Tromey <tom@tromey.com> +2020-02-12 Hannes Domani <ssbssa@yahoo.de> - * stabsread.h (struct stab_section_list): Remove. - (coffstab_build_psymtabs): Update. - * dbxread.c (symbuf_sections): Now a std::vector. - (sect_idx): New global. - (fill_symbuf): Update. - (coffstab_build_psymtabs): Change type of stabsects parameter. - Update. - * coffread.c (struct coff_symfile_info) <stabsects>: Now a - std::vector. - (linetab, linetab_offset, linetab_size, stringtab): Move earlier. - (coff_locate_sections): Update. - (coff_symfile_read): Remove cleanups. Update. - (init_stringtab): Add storage parameter. - (free_stringtab, free_stringtab_cleanup): Remove. - (init_lineno): Add storage parameter. - (free_linetab, free_linetab_cleanup): Remove. - -2019-03-06 Pedro Alves <palves@redhat.com> - - * linux-fork.c (fork_info::clobber_regs): Delete. - (fork_load_infrun_state): Remove reference to 'clobber_regs'. - (fork_save_infrun_state): Remove 'clobber_regs' parameter. Update - comment. Adjust. - (scoped_switch_fork_info::scoped_switch_fork_info) - (checkpoint_command, linux_fork_context): Adjust - fork_save_infrun_state calls. - -2019-03-06 Pedro Alves <palves@redhat.com> - - * linux-fork.c (inf_has_multiple_thread_cb): Delete. - (inf_has_multiple_threads): Return 'bool' and rewrite using - inferior_info::threads(). - -2019-03-06 Pedro Alves <palves@redhat.com> - - * linux-fork.c: Include <list>. - (fork_list): Now a std::list instance. - (fork_info): Add ctor, dtor, and in-class initialize all fields. - (forks_exist_p, find_last_fork): Adjust. - (new_fork): Delete. - (one_fork_p): New. - (add_fork): Adjust. - (free_fork): Delete, folded into fork_info::~fork_info(). - (delete_fork, find_fork_ptid, find_fork_id, find_fork_pid): - Adjust. - (init_fork_list): Delete. - (linux_fork_killall, linux_fork_mourn_inferior) - (linux_fork_detach, info_checkpoints_command): Adjust. - (_initialize_linux_fork): No longer call init_fork_list. + * windows-tdep.c (struct windows_gdbarch_data): Add tib_ptr_type. + (windows_get_tlb_type): Use windows_gdbarch_data->tib_ptr_type. -2019-03-06 Pedro Alves <palves@redhat.com> +2020-02-11 Tom Tromey <tom@tromey.com> - * linux-fork.c (new_fork): New, split out of ... - (add_fork): ... this. Return void. Move "first fork" special - case from here, to ... - (checkpoint_command): ... here. - * linux-linux.h (add_fork): Return void. + * psymtab.h: Update comment. -2019-03-06 Andrew Burgess <andrew.burgess@embecosm.com> +2020-02-11 Tom Tromey <tom@tromey.com> - * f-exp.y (direct_abs_decl): Handle TYPE*SIZE type names. + * gdb_obstack.h (struct auto_obstack): Use + DISABLE_COPY_AND_ASSIGN. -2019-03-06 Andrew Burgess <andrew.burgess@embecosm.com> - Chris January <chris.january@arm.com> - David Lecomber <david.lecomber@arm.com> +2020-02-11 Tom Tromey <tom@tromey.com> - * f-exp.y: New token, UNOP_INTRINSIC. - (exp): New pattern using UNOP_INTRINSIC token. - (f77_keywords): Add 'abs' keyword. - * f-lang.c: Add 'target-float.h' and 'math.h' includes. - (value_from_host_double): New function. - (evaluate_subexp_f): Support UNOP_ABS. + * dwarf2/frame.h (struct objfile): Don't forward declare. -2019-03-06 Andrew Burgess <andrew.burgess@embecosm.com> +2020-02-11 Christian Biesinger <cbiesinger@google.com> - * f-lang.c (build_fortran_types): Use TYPE_CODE_CHAR for character - types. + * cris-tdep.c (cris_supply_gregset): Change signature to match + what struct regset expects. + (cris_regset): New struct. + (fetch_core_registers): Remove. + (cris_iterate_over_regset_sections): New function. + (_initialize_cris_tdep): Don't call deprecated_add_core_fns. + (cris_gdbarch_init): Call set_gdbarch_iterate_over_regset_sections. -2019-03-06 Andrew Burgess <andrew.burgess@embecosm.com> +2020-02-11 Christian Biesinger <cbiesinger@google.com> - * f-exp.y (convert_to_kind_type): Handle integer (kind=8). - * f-lang.c (build_fortran_types): Setup builtin_integer_s8. - * f-lang.h (struct builtin_f_type): Add builtin_integer_s8 field. - -2019-03-06 Andrew Burgess <andrew.burgess@embecosm.com> - - * f-exp.y (convert_to_kind_type): Handle more type kinds. - -2019-03-06 Andrew Burgess <andrew.burgess@embecosm.com> - Chris January <chris.january@arm.com> - - * expprint.c (dump_subexp_body_standard): Support UNOP_KIND. - * f-exp.y: Define 'KIND' token. - (exp): New pattern for KIND expressions. - (ptype): Handle types with a kind extension. - (direct_abs_decl): Extend to spot kind extensions. - (f77_keywords): Add 'kind' to the list. - (push_kind_type): New function. - (convert_to_kind_type): New function. - * f-lang.c (evaluate_subexp_f): Support UNOP_KIND. - * parse.c (operator_length_standard): Likewise. - * parser-defs.h (enum type_pieces): Add tp_kind. - * std-operator.def: Add UNOP_KIND. - -2019-03-06 Andrew Burgess <andrew.burgess@embecosm.com> - - * f-exp.y (f_parse): Set yydebug. - -2019-03-06 Andrew Burgess <andrew.burgess@embecosm.com> - - * f-lang.c (evaluate_subexp_f): New function. - (exp_descriptor_f): New global. - (f_language_defn): Use exp_descriptor_f instead of - exp_descriptor_standard. - -2019-03-06 Andrew Burgess <andrew.burgess@embecosm.com> - - * f-exp.y (struct token): Add comments. - (dot_ops): Remove uppercase versions and the end marker. - (f77_keywords): Likewise. - (yylex): Use ARRAY_SIZE to iterate over dot_ops, assert all - entries in the dot_ops array are case insensitive, and use - strncasecmp to compare strings. Also some whitespace cleanup in - this area. Similar for the f77_keywords array, except entries in - this list might be case sensitive. - -2019-03-06 Andrew Burgess <andrew.burgess@embecosm.com> - - * f-exp.y (struct f77_boolean_val): Add comments. - (boolean_values): Remove uppercase versions, and end marker. - (yylex): Use ARRAY_SIZE for iterating over boolean_values array, - and use strncasecmp to achieve case insensitivity. Additionally, - perform whitespace cleanup around this code. - -2019-03-06 Tom Tromey <tromey@adacore.com> - - * remote-sim.c (gdbsim_target_open): Use result of - gdb_argv::release. - -2019-03-06 Richard Bunt <richard.bunt@arm.com> - Dirk Schubert <dirk.schubert@arm.com> - Chris January <chris.january@arm.com> - - * eval.c (evaluate_subexp_standard): Call Fortran argument - wrapping logic. - * f-lang.c (struct value): A value which can be passed into a - Fortran function call. - (fortran_argument_convert): Wrap Fortran arguments in a pointer - where appropriate. - (struct type): Value ready for a Fortran function call. - (fortran_preserve_arg_pointer): Undo check_typedef, the pointer - is needed. - * f-lang.h (fortran_argument_convert): Declaration. - (fortran_preserve_arg_pointer): Declaration. - * infcall.c (value_arg_coerce): Call Fortran argument logic. - -2019-03-05 Tom Tromey <tromey@adacore.com> - - * python/py-prettyprint.c (print_string_repr): Remove #if. - * python/py-utils.c (unicode_to_encoded_string): Remove #if. - -2019-03-05 Tom Tromey <tromey@adacore.com> - - * target.c (the_dummy_target): Move later. Change type to - "dummy_target". - (initialize_targets): Don't initialize the_dummy_target. - -2019-03-05 Tom Tromey <tromey@adacore.com> - - * gdb_bfd.c (gdb_bfd_fdopenr): Remove. - * gdb_bfd.h (gdb_bfd_fdopenr): Don't declare. - -2019-03-05 Tom Tromey <tromey@adacore.com> - - * windows-nat.c (windows_nat_target::attach) - (windows_nat_target::detach): Don't call gdb_flush. - * valprint.c (generic_val_print, val_print, val_print_string): - Don't call gdb_flush. - * utils.c (defaulted_query): Don't call gdb_flush. - * typeprint.c (print_type_scalar): Don't call gdb_flush. - * target.c (target_announce_detach): Don't call gdb_flush. - * sparc64-tdep.c (adi_print_versions): Don't call gdb_flush. - * remote.c (extended_remote_target::attach): Don't call - gdb_flush. - * procfs.c (procfs_target::detach): Don't call gdb_flush. - * printcmd.c (do_examine): Don't call gdb_flush. - (info_display_command): Don't call gdb_flush. - * p-valprint.c (pascal_val_print): Don't call gdb_flush. - * nto-procfs.c (nto_procfs_target::attach): Don't call gdb_flush. - * memattr.c (info_mem_command): Don't call gdb_flush. - * mdebugread.c (mdebug_build_psymtabs): Don't call gdb_flush. - * m2-valprint.c (m2_val_print): Don't call gdb_flush. - * infrun.c (follow_exec, handle_command): Don't call gdb_flush. - * inf-ptrace.c (inf_ptrace_target::attach): Don't call gdb_flush. - * hppa-tdep.c (unwind_command): Don't call gdb_flush. - * gnu-nat.c (gnu_nat_target::attach): Don't call gdb_flush. - (gnu_nat_target::detach): Don't call gdb_flush. - * f-valprint.c (f_val_print): Don't call gdb_flush. - * darwin-nat.c (darwin_nat_target::attach): Don't call gdb_flush. - * cli/cli-script.c (read_command_lines): Don't call gdb_flush. - * cli/cli-cmds.c (shell_escape, print_disassembly): Don't call - gdb_flush. - * c-valprint.c (c_val_print): Don't call gdb_flush. - * ada-valprint.c (ada_print_scalar): Don't call gdb_flush. - -2019-03-05 Tom Tromey <tromey@adacore.com> - - * varobj.c (update_dynamic_varobj_children): Update. - (install_default_visualizer): Use reset, not release. - * value.c (set_internalvar): Update. - * dwarf2loc.c (value_of_dwarf_reg_entry): Update. - * common/gdb_ref_ptr.h (class ref_ptr) <release>: Add - ATTRIBUTE_UNUSED_RESULT. - -2019-03-05 Tom Tromey <tromey@adacore.com> - - * remote.c (class scoped_remote_fd) <release>: Add - ATTRIBUTE_UNUSED_RESULT. - -2019-03-05 Tom Tromey <tromey@adacore.com> - - * macroexp.c (struct macro_buffer) <release>: Add - ATTRIBUTE_UNUSED_RESULT. - -2019-03-05 Tom Tromey <tromey@adacore.com> - - * nat/linux-btrace.c (linux_enable_bts, linux_enable_pt): Update. - * common/scoped_mmap.h (class scoped_mmap) <release>: Add - ATTRIBUTE_UNUSED_RESULT. - -2019-03-05 Tom Tromey <tromey@adacore.com> - - * common/scoped_fd.h (class scoped_fd) <release>: Add - ATTRIBUTE_UNUSED_RESULT. - -2019-03-05 Tom Tromey <tromey@adacore.com> - - * parser-defs.h (struct parser_state) <release>: Add - ATTRIBUTE_UNUSED_RESULT. - -2019-03-05 Tom Tromey <tromey@adacore.com> - - * utils.h (class gdb_argv) <release>: Add - ATTRIBUTE_UNUSED_RESULT. - * common/common-defs.h (ATTRIBUTE_UNUSED_RESULT): Define. - -2019-03-02 Eli Zaretskii <eliz@gnu.org> - - * xml-syscall.c (xml_list_syscalls_by_group): Drop 'struct' from - for-loop range, to avoid compiler warnings. - - * tui/tui.c (tui_enable) [__MINGW32__]: Don't declare 'cap', to - avoid compiler warnings about unused variables. - - * NEWS: Mention end of support for native debugging on MS-Windows - before XP. - - PR gdb/24292 - * common/netstuff.c: - * gdbserver/gdbreplay.c - * gdbserver/remote-utils.c: - * ser-tcp.c: - * unittests/parse-connection-spec-selftests.c [USE_WIN32API]: - Include ws2tcpip.h instead of wsiapi.h and winsock2.h. Redefine - _WIN32_WINNT to 0x0501 if defined to a smaller value, as - 'getaddrinfo' and 'freeaddrinfo' were not available before - Windows XP, and mingw.org's MinGW headers by default define - _WIN32_WINNT to 0x500. - -2019-03-01 Gary Benson <gbenson@redhat.com> - - * coffread.c (coff_start_symtab): Remove unnecessary xstrdup. - -2019-02-28 Brian Vandenberg <phantall@gmail.com> - Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> - - PR gdb/8527 - * procfs.c (proc_wait_for_stop): Wrap write of PCWSTOP in - set_sigint_trap, clear_sigint_trap. + * arch/arm.h (enum gdb_regnum): Add comment for the FP0..7 + registers. -2019-02-27 Philippe Waroquiers <philippe.waroquiers@skynet.be> +2020-02-11 Christian Biesinger <cbiesinger@google.com> - * target.c (target_detach): Clear the regcache and the - frame cache. + * arm-tdep.c (arm_dump_tdep): Add \n in fprintf. -2019-02-27 Pedro Alves <palves@redhat.com> +2020-02-11 Simon Marchi <simon.marchi@efficios.com> - * utils.c (set_screen_size): When we cap the height/width sizes, - tweak the corresponding command variable to show "unlimited": + * configure: Re-generate. -2019-02-27 Saagar Jha <saagar@saagarjha.com> - Pedro Alves <palves@redhat.com> +2020-02-11 Simon Marchi <simon.marchi@efficios.com> - * utils.c (set_screen_size): Reduce "infinite" rows and columns - before calling rl_set_screen_size. + * configure: Re-generate. -2019-02-27 Tom Tromey <tromey@adacore.com> +2020-02-11 Simon Marchi <simon.marchi@efficios.com> - * configure.ac (HAVE_LIBPYTHON2_4, HAVE_LIBPYTHON2_5): Never - define. - * python/py-value.c: Remove Python 2.4 workaround. - * python/py-utils.c (gdb_pymodule_addobject): Remove Python 2.4 - workaround. - * python/py-type.c (convert_field, gdbpy_initialize_types): Remove - Python 2.4 workaround. - * python/python-internal.h: Remove Python 2.4 comment. - (Py_ssize_t): Don't define. - (PyVarObject_HEAD_INIT, Py_TYPE): Don't define. - (gdb_Py_DECREF): Remove Python 2.4 workaround. - (gdb_PyObject_GetAttrString, PyObject_GetAttrString): Remove. - (gdb_PyObject_HasAttrString, PyObject_HasAttrString): Remove. - * python/python.c (do_start_initialization): Remove Python 2.4 - workaround. - * python/py-prettyprint.c (class dummy_python_frame): Remove. - (print_children): Remove Python 2.4 workaround. - * python/py-inferior.c (buffer_procs): Remove Python 2.4 - workaround. - (CHARBUFFERPROC_NAME): Remove. - * python/py-breakpoint.c (gdbpy_initialize_breakpoints): Remove - Python 2.4 workaround. - -2019-02-27 Kevin Buettner <kevinb@redhat.com> - - * NEWS: Note minimum Python version. - -2019-02-27 Kevin Buettner <kevinb@redhat.com> - - * python/py-inferior.c (infpy_write_memory): Remove non-IS_PY3K - code from these functions. Remove corresponding ifdefs. Use - Py_buffer_up instead of explicit calls to PyBuffer_Release. - Remove gotos and target of gotos. - (infpy_search_memory): Likewise. - -2019-02-27 Andrew Burgess <andrew.burgess@embecosm.com> - - * gdb/hppa-tdep.c (hppa_dummy_id): Delete. - (hppa_gdbarch_init): Don't register deleted functions with - gdbarch. - -2019-02-27 Andrew Burgess <andrew.burgess@embecosm.com> - - * gdb/h8300-tdep.c (h8300_unwind_pc): Delete. - (h8300_unwind_sp): Delete. - (h8300_dummy_id): Delete. - (h8300_gdbarch_init): Don't register deleted functions with - gdbarch. - -2019-02-27 Andrew Burgess <andrew.burgess@embecosm.com> - - * gdb/ft32-tdep.c (ft32_dummy_id): Delete. - (ft32_unwind_pc): Delete. - (ft32_unwind_sp): Delete. - (ft32_gdbarch_init): Don't register deleted functions with - gdbarch. - -2019-02-27 Andrew Burgess <andrew.burgess@embecosm.com> - - * gdb/frv-tdep.c (frv_dummy_id): Delete. - (frv_unwind_pc): Delete. - (frv_unwind_sp): Delete. - (frv_gdbarch_init): Don't register deleted functions with - gdbarch. - -2019-02-27 Andrew Burgess <andrew.burgess@embecosm.com> - - * gdb/riscv-tdep.c (riscv_dummy_id): Delete. - (riscv_unwind_pc): Delete. - (riscv_unwind_sp): Delete. - (riscv_gdbarch_init): Don't register deleted functions with - gdbarch. - -2019-02-27 Andrew Burgess <andrew.burgess@embecosm.com> - - * gdb/csky-tdep.c (csky_dummy_id): Delete. - (csky_unwind_pc): Delete. - (csky_unwind_sp): Delete. - (csky_gdbarch_init): Don't register deleted functions with - gdbarch. - -2019-02-27 Andrew Burgess <andrew.burgess@embecosm.com> - - * gdb/cris-tdep.c (cris_dummy_id): Delete. - (cris_unwind_pc): Delete. - (cris_unwind_sp): Delete. - (cris_gdbarch_init): Don't register deleted functions with - gdbarch. - -2019-02-27 Andrew Burgess <andrew.burgess@embecosm.com> - - * gdb/bfin-tdep.c (bfin_dummy_id): Delete. - (bfin_unwind_pc): Delete. - (bfin_gdbarch_init): Don't register deleted functions with gdbarch. - -2019-02-27 Andrew Burgess <andrew.burgess@embecosm.com> - - * gdb/arm-tdep.c (arm_dummy_id): Delete. - (arm_unwind_pc): Delete. - (arm_unwind_sp): Delete. - (arm_gdbarch_init): Don't register deleted functions with gdbarch. - -2019-02-27 Andrew Burgess <andrew.burgess@embecosm.com> - - * gdb/arc-tdep.c (arc_dummy_id): Delete. - (arc_unwind_pc): Delete. - (arc_unwind_sp): Delete. - (arc_gdbarch_init): Don't register deleted functions with gdbarch. - -2019-02-27 Andrew Burgess <andrew.burgess@embecosm.com> - - * gdb/alpha-tdep.c (alpha_dummy_id): Delete. - (alpha_unwind_pc): Delete. - (alpha_gdbarch_init): Don't register deleted functions with - gdbarch. - -2019-02-27 Andrew Burgess <andrew.burgess@embecosm.com> - - * gdb/aarch64-tdep.c (aarch64_dummy_id): Delete. - (aarch64_unwind_pc): Delete. - (aarch64_unwind_sp): Delete. - (aarch64_gdbarch_init): Don't register deleted functions with - gdbarch. - -2019-02-27 Andrew Burgess <andrew.burgess@embecosm.com> - - * gdbtypes.c (type_align): Don't consider static members when - computing structure alignment. - -2019-02-27 Andrew Burgess <andrew.burgess@embecosm.com> - - * arc-tdep.c (arc_type_align): Provide alignment for basic types, - return 0 for other types. - * arch-utils.c (default_type_align): Always return 0. - * gdbarch.h: Regenerate. - * gdbarch.sh (type_align): Extend comment. - * gdbtypes.c (type_align): Add additional comments, always call - gdbarch_type_align before applying the default rules. - * i386-tdep.c (i386_type_align): Return 0 as the default rule, - generic code will then apply a suitable default. - * nios2-tdep.c (nios2_type_align): Provide alignment for basic - types, return 0 for other types. - -2019-02-27 Joel Brobecker <brobecker@adacore.com> - - * NEWS: Create a new section for the next release branch. - Rename the section of the current branch, now that it has - been cut. - -2019-02-27 Joel Brobecker <brobecker@adacore.com> - - GDB 8.3 branch created (143420fb0d5ae54323ba9953f0818c194635228d): - * version.in: Bump version to 8.3.50.DATE-git. - -2019-02-26 Simon Marchi <simon.marchi@efficios.com> - - * aix-thread.c (ptid_cmp): Remove unused variable. - (get_signaled_thread): Likewise. - (store_regs_user_thread): Likewise. - (store_regs_kernel_thread): Likewise. - (fetch_regs_kernel_thread): Remove shadowed variable. - -2019-02-26 Andrew Burgess <andrew.burgess@embecosm.com> - - * features/riscv/32bit-cpu.xml: Add register numbers. - * features/riscv/32bit-fpu.c: Regenerate. - * features/riscv/32bit-fpu.xml: Add register numbers. - * features/riscv/64bit-cpu.xml: Add register numbers. - * features/riscv/64bit-fpu.c: Regenerate. - * features/riscv/64bit-fpu.xml: Add register numbers. + * acinclude: Update warning.m4 path. + * warning.m4: Move to gdbsupport. -2019-02-26 Kevin Buettner <kevinb@redhat.com> +2020-02-11 Tom Tromey <tromey@adacore.com> - * NEWS: Mention two argument form of gdb.Value constructor. - * python/py-value.c (convert_buffer_and_type_to_value): New - function. - (valpy_new): Parse arguments via gdb_PyArg_ParseTupleAndKeywords. - Add support for handling an optional second argument. Call - convert_buffer_and_type_to_value as appropriate. - * python/python-internal.h (Py_buffer_deleter): New struct. - (Py_buffer_up): New typedef. + * remote.c (remote_console_output): Update. + * printcmd.c (printf_command): Update. + * event-loop.c (gdb_wait_for_event): Update. + * linux-nat.c (sigchld_handler): Update. + * remote-sim.c (gdb_os_write_stdout): Update. + (gdb_os_flush_stdout): Update. + (gdb_os_flush_stderr): Update. + (gdb_os_write_stderr): Update. + * exceptions.c (print_exception): Update. + * remote-fileio.c (remote_fileio_func_read): Update. + (remote_fileio_func_write): Update. + * tui/tui.c (tui_enable): Update. + * tui/tui-interp.c (tui_interp::init): Update. + * utils.c (init_page_info): Update. + (putchar_unfiltered, fputc_unfiltered): Update. + (gdb_flush): Update. + (emit_style_escape): Update. + (flush_wrap_buffer, fputs_maybe_filtered): Update. + * ui-file.c (ui_file_isatty, ui_file_read, ui_file_write) + (ui_file_write_async_safe, ui_file_flush, ui_file_puts): Remove. + (stderr_file::write): Update. + (stderr_file::puts): Update. + * ui-file.h (ui_file_isatty, ui_file_write) + (ui_file_write_async_safe, ui_file_read, ui_file_flush) + (ui_file_puts): Don't declare. + +2020-02-10 Tom de Vries <tdevries@suse.de> + + * dwarf2/read.c (process_psymtab_comp_unit_reader): Cast concat NULL + sentinel to char *. + +2020-02-09 Tom de Vries <tdevries@suse.de> + + * dwarf2read.c (process_psymtab_comp_unit_reader): Append CU offset to + filename if it matches "<artificial>". + +2020-02-09 Hannes Domani <ssbssa@yahoo.de> + + * windows-tdep.c (struct enum_value_name): New struct. + (create_enum): New function. + (windows_get_siginfo_type): Create and use enum types. + +2020-02-09 Hannes Domani <ssbssa@yahoo.de> + + * NEWS: Mention $_siginfo support for Windows. + * windows-nat.c (handle_exception): Set siginfo_er. + (windows_nat_target::mourn_inferior): Reset siginfo_er. + (windows_xfer_siginfo): New function. + (windows_nat_target::xfer_partial): Call windows_xfer_siginfo. + * windows-tdep.c (struct windows_gdbarch_data): New struct. + (init_windows_gdbarch_data): New function. + (get_windows_gdbarch_data): New function. + (windows_get_siginfo_type): New function. + (windows_init_abi): Register windows_get_siginfo_type. + (_initialize_windows_tdep): Register init_windows_gdbarch_data. + +2020-02-08 Tom Tromey <tom@tromey.com> + + * dwarf2/read.c (class cutu_reader) <cutu_reader, + init_tu_and_read_dwo_dies>: Remove "keep" parameter. + <keep>: Declare method. + <m_keep>: Remove member. + <~cutu_reader>: Remove. + (cutu_reader::init_tu_and_read_dwo_dies): Update. + (cutu_reader::cutu_reader): Update. + (cutu_reader::keep): Rename from ~cutu_reader. + (process_psymtab_comp_unit, build_type_psymtabs_1) + (process_skeletonless_type_unit, load_partial_comp_unit) + (load_full_comp_unit, dwarf2_read_addr_index) + (read_signatured_type): Update. + +2020-02-08 Tom Tromey <tom@tromey.com> + + * dwarf2/read.c (process_psymtab_comp_unit_reader): Remove + "want_partial_unit" parameter. + (process_psymtab_comp_unit): Change want_partial_unit to bool. + Inline check for DW_TAG_partial_unit. + (dwarf2_build_psymtabs_hard, scan_partial_symbols): Update. + +2020-02-08 Tom Tromey <tom@tromey.com> + + * dwarf2/read.c (read_n_bytes, read_direct_string): Move to + read.c. + * dwarf2/leb.h (read_n_bytes, read_direct_string): Move from + read.c. + +2020-02-08 Tom Tromey <tom@tromey.com> + + * dwarf2/read.c (read_address): Move to comp-unit.c. + (dwarf2_rnglists_process, dwarf2_ranges_process) + (read_attribute_value, dwarf_decode_lines_1) + (var_decode_location, decode_locdesc): Update. + * dwarf2/comp-unit.c (comp_unit_head::read_address): Move from + read.c. Remove "cu" parameter. + * dwarf2/comp-unit.h (struct comp_unit_head) <read_address>: New + method. -2019-02-25 John Baldwin <jhb@FreeBSD.org> +2020-02-08 Tom Tromey <tom@tromey.com> - * dwarf2read.c (dwarf2_get_dwz_file): Reset dwz_bfd to nullptr - instead of releasing ownership. + * dwarf2/read.c (read_attribute_value, read_indirect_string) + (read_indirect_line_string): Update. + * dwarf2/comp-unit.c (read_offset): Remove. + (read_comp_unit_head): Update. + * dwarf2/comp-unit.h (struct comp_unit_head) <read_offset>: New + method. + (read_offset): Don't declare. -2019-02-25 Jordan Rupprecht <rupprecht@google.com> +2020-02-08 Tom Tromey <tom@tromey.com> - * dwarf2read.c (open_and_init_dwp_file): Call - elf_numsections instead of bfd_count_sections to initialize - dwp_file->num_sections. + * Makefile.in (COMMON_SFILES): Add dwarf2/comp-unit.c. + * dwarf2/read.c (struct comp_unit_head): Move to + dwarf2/comp-unit.h. + (enum class rcuh_kind): Move to comp-unit.h. + (get_cu_length, offset_in_cu_p): Now methods on comp_unit_head. + (read_comp_unit_head, error_check_comp_unit_head) + (read_and_check_comp_unit_head): Move to comp-unit.c. + (read_offset, dwarf_unit_type_name): Likewise. + (create_debug_type_hash_table, read_cutu_die_from_dwo) + (cutu_reader::cutu_reader, read_call_site_scope) + (find_partial_die, follow_die_offset): Update. + * dwarf2/comp-unit.h: New file, from dwarf2read.c. + +2020-02-08 Tom Tromey <tom@tromey.com> + + * dwarf2/read.c (read_offset_1): Move to leb.c. + (read_abbrev_offset, read_offset, dwarf_decode_line_header) + (dwarf_decode_macro_bytes): Update. + * dwarf2/leb.c (read_offset): Rename; move from read.c. + * dwarf2/leb.h (read_offset): Declare. + +2020-02-08 Tom Tromey <tom@tromey.com> + + * dwarf2/read.c (dwarf2_section_size): Remove. + (error_check_comp_unit_head, dwarf2_symbol_mark_computed): + Update. + * dwarf2/section.h (struct dwarf2_section_info) <get_size>: New method. + +2020-02-08 Tom Tromey <tom@tromey.com> + + * dwarf2/read.c (read_initial_length): Move to leb.c. + * dwarf2/leb.h (read_initial_length): Declare. + * dwarf2/leb.c (read_initial_length): Move from read.c. Add + handle_nonstd parameter. + * dwarf2/frame.c (read_initial_length): Remove. + (decode_frame_entry_1): Update. + +2020-02-08 Tom Tromey <tom@tromey.com> + + * dwarf2/loc.c (dwarf2_find_location_expression) + (dwarf_evaluate_loc_desc::get_tls_address) + (dwarf_evaluate_loc_desc::push_dwarf_reg_entry_value) + (rw_pieced_value, dwarf2_evaluate_loc_desc_full) + (dwarf2_locexpr_baton_eval, dwarf2_evaluate_property) + (dwarf2_compile_property_to_c) + (dwarf2_loc_desc_get_symbol_read_needs) + (dwarf2_compile_expr_to_ax, locexpr_describe_location) + (locexpr_tracepoint_var_ref, locexpr_generate_c_location) + (loclist_describe_location, loclist_tracepoint_var_ref) + (loclist_generate_c_location): Update. + * compile/compile-loc2c.c (do_compile_dwarf_expr_to_c): Update. + * dwarf2/loc.h (dwarf2_per_cu_objfile, dwarf2_per_cu_addr_size) + (dwarf2_per_cu_ref_addr_size, dwarf2_per_cu_offset_size) + (dwarf2_per_cu_text_offset, dwarf2_version): Don't declare. + * dwarf2/read.c (dwarf2_per_cu_data::objfile) + (dwarf2_per_cu_data::addr_size) + (dwarf2_per_cu_data::ref_addr_size) + (dwarf2_per_cu_data::text_offset) + (dwarf2_per_cu_data::addr_type): Now methods. + (per_cu_header_read_in): Make per_cu "const". + (dwarf2_version): Remove. + (dwarf2_per_cu_data::int_type): Now a method. + (dwarf2_per_cu_data::_addr_sized_int_type): Likewise. + (set_die_type, read_array_type, read_subrange_index_type) + (read_tag_string_type, read_subrange_type): Update. + * dwarf2/read.h (struct dwarf2_per_cu_data) <addr_size, + offset_size, ref_addr_size, text_offset, addr_type, version, + objfile, int_type, addr_sized_int_type>: Declare methods. + +2020-02-08 Tom Tromey <tom@tromey.com> + + * dwarf2/read.h (struct dwarf2_per_cu_data) <imported_symtabs>: + Move earlier. + +2020-02-08 Tom Tromey <tom@tromey.com> + + * dwarf2/read.h (dwarf_line_debug): Declare. + * Makefile.in (COMMON_SFILES): Add dwarf2/line-header.c. + * dwarf2/read.c: Move line_header code to new files. + (dwarf_line_debug): No longer static. + * dwarf2/line-header.c: New file. + * dwarf2/line-header.h: New file. + +2020-02-08 Tom Tromey <tom@tromey.com> + + * dwarf2/read.c (struct line_header) <file_full_name, + file_file_name>: Return unique_xmalloc_ptr. + (line_header::file_file_name): Update. + (line_header::file_full_name): Update. + (dw2_get_file_names_reader): Update. + (macro_start_file): Update. + +2020-02-08 Tom Tromey <tom@tromey.com> + + * dwarf2/read.c (struct line_header) <file_full_name, + file_file_name>: Declare methods. + (dw2_get_file_names_reader): Update. + (file_file_name): Now a method. + (file_full_name): Likewise. + (macro_start_file): Update. -2019-02-25 Tom Tromey <tromey@adacore.com> +2020-02-08 Tom Tromey <tom@tromey.com> - * solib-darwin.c (darwin_get_dyld_bfd): Don't release dyld_bfd. + * dwarf2/read.c (dwarf_always_disassemble) + (show_dwarf_always_disassemble): Move to loc.c. + (_initialize_dwarf2_read): Move "always-disassemble" registration + to loc.c. + * dwarf2/read.h (dwarf_always_disassemble): Don't declare. + * dwarf2/loc.c (dwarf_always_disassemble): Move from read.c. Now + static. + (show_dwarf_always_disassemble): Move from read.c. + (_initialize_dwarf2loc): Move always-disassemble from read.c. -2019-02-23 Sergio Durigan Junior <sergiodj@redhat.com> +2020-02-08 Tom Tromey <tom@tromey.com> - * gcore.in: Add '--readnever' option when invoking GDB. + * dwarf2/read.c (~dwarf2_per_objfile): Update. + (create_quick_file_names_table): Return htab_up. + (dw2_get_file_names_reader, dw2_forget_cached_source_info): + Update. + * dwarf2/read.h (struct dwarf2_per_objfile) + <quick_file_names_table>: Now htab_up. + +2020-02-08 Tom Tromey <tom@tromey.com> + + * dwarf2/abbrev.c (abbrev_table::read): Simplify. + +2020-02-08 Tom Tromey <tom@tromey.com> + + * dwarf2/abbrev.c (abbrev_table): Move constructor from header. + Rewrite. + (abbrev_table::add_abbrev, abbrev_table::lookup_abbrev): Rewrite. + * dwarf2/abbrev.h (struct abbrev_info) <next>: Remove. + (abbrev_table::abbrev_table): No longer inline. + (ABBREV_HASH_SIZE): Remove. + (abbrev_table::m_abbrevs): Now an htab_up. + +2020-02-08 Tom Tromey <tom@tromey.com> + + * dwarf2/read.c (read_cutu_die_from_dwo): Update. + (cutu_reader): Update. + (build_type_psymtabs_1): Update. + * dwarf2/abbrev.c (abbrev_table::read): Rename. + (abbrev_table::alloc_abbrev): Update. + * dwarf2/abbrev.h (abbrev_table_up): Move earlier. + (abbrev_table::read): New static method, renamed from + abbrev_table_read_table. + (abbrev_table::alloc_abbrev) + (abbrev_table::add_abbrev): Now private. + (abbrev_table::abbrev_table): Now private. + (abbrev_table::m_abbrev_obstack): Now private. Rename. + +2020-02-08 Tom Tromey <tom@tromey.com> + + * dwarf2/read.c (set_die_type, get_die_type_at_offset): Update. + * dwarf2/read.h (struct dwarf2_per_objfile) <die_type_hash>: Now + htab_up. + +2020-02-08 Tom Tromey <tom@tromey.com> + + * dwarf2/read.c (struct dwp_file) <loaded_cus, loaded_tus>: Now + htab_up. + (lookup_dwo_unit_in_dwp): Update. + (allocate_dwp_loaded_cutus_table): Return htab_up. Don't allocate + on obstack. -2019-02-22 Simon Marchi <simon.marchi@polymtl.ca> +2020-02-08 Tom Tromey <tom@tromey.com> - * MAINTAINERS: Update my email address. + * dwarf2/read.c (allocate_dwo_file_hash_table): Don't allocate on + obstack. -2019-02-22 Simon Marchi <simon.marchi@polymtl.ca> +2020-02-08 Tom Tromey <tom@tromey.com> - * build-id.c (build_id_to_debug_bfd_1): New function. - (build_id_to_debug_bfd): Look for separate debug file in - sysroot. + * dwarf2/read.c (~dwarf2_per_objfile): Don't delete + line_header_hash. + (handle_DW_AT_stmt_list): Update. Don't allocate on obstack. + * dwarf2/read.h (struct dwarf2_per_objfile) <line_header_hash>: + Change type to htab_up. + +2020-02-08 Tom Tromey <tom@tromey.com> + + * dwarf2/read.c (allocate_type_unit_groups_table): Return + htab_up. Don't allocate on obstack. + (get_type_unit_group, dwarf2_build_psymtabs_hard): Update. + * dwarf2/read.h (struct dwarf2_per_objfile) <type_unit_groups>: + Change type to htab_up. + +2020-02-08 Tom Tromey <tom@tromey.com> + + * dwarf2/read.h (struct dwarf2_per_objfile) <signatured_types>: + Change type to htab_up. + * dwarf2/read.c (create_signatured_type_table_from_index) + (create_signatured_type_table_from_debug_names) + (create_all_type_units, add_type_unit) + (lookup_dwo_signatured_type, lookup_signatured_type) + (process_skeletonless_type_unit): Update. + (create_debug_type_hash_table, create_debug_types_hash_table): + Change type of types_htab. + (allocate_signatured_type_table, allocate_dwo_unit_table): Return + htab_up. Don't allocate on obstack. + (create_cus_hash_table): Change type of cus_htab parameter. + (struct dwo_file) <cus, tus>: Now htab_up. + (lookup_dwo_signatured_type, lookup_dwo_cutu) + (process_dwo_file_for_skeletonless_type_units, lookup_dwo_cutu) + (queue_and_load_all_dwo_tus): Update. + * dwarf2/index-write.c (write_gdbindex): Update. + (write_debug_names): Update. -2019-02-22 Andrew Burgess <andrew.burgess@embecosm.com> +2020-02-08 Tom Tromey <tom@tromey.com> - * gdbarch.sh: Update the copyright year range that is placed into - generated files. + * dwarf2/read.h (struct dwarf2_queue_item): Move from + dwarf2/read.c. Remove "next" member. Add constructor ntad + destructor. + (struct dwarf2_per_objfile) <queue>: New member. + * dwarf2/read.c (struct dwarf2_queue_item): Move to + dwarf2/read.h. + (dwarf2_queue, dwarf2_queue_tail): Remove. + (class dwarf2_queue_guard): Add parameter to constructor. Use + DISABLE_COPY_AND_ASSIGN. + <m_per_objfile>: New member. + <~dwarf2_queue_guard>: Rewrite. + (dw2_do_instantiate_symtab, queue_comp_unit, process_queue): + Update. + (~dwarf2_queue_item): New. + +2020-02-08 Tom Tromey <tom@tromey.com> + + * dwarf2/read.c (struct die_info) <has_children>: New member. + (dw2_get_file_names_reader): Remove has_children. + (dw2_get_file_names): Update. + (read_cutu_die_from_dwo): Remove has_children. + (cutu_reader::init_tu_and_read_dwo_dies) + (cutu_reader::cutu_reader): Update. + (process_psymtab_comp_unit_reader, build_type_psymtabs_reader): + Remove has_children. + (build_type_psymtabs_1, process_skeletonless_type_unit) + (load_partial_comp_unit, load_full_comp_unit): Update. + (create_dwo_cu_reader): Remove has_children. + (create_cus_hash_table, read_die_and_children): Update. + (read_full_die_1,read_full_die): Remove has_children. + (read_signatured_type): Update. + (class cutu_reader) <has_children>: Remove. + +2020-02-08 Tom Tromey <tom@tromey.com> + + * dwarf2/expr.c: Rename from dwarf2expr.c. + * dwarf2/expr.h: Rename from dwarf2expr.h. + * dwarf2/frame-tailcall.c: Rename from dwarf2-frame-tailcall.c. + * dwarf2/frame-tailcall.h: Rename from dwarf2-frame-tailcall.h. + * dwarf2/frame.c: Rename from dwarf2-frame.c. + * dwarf2/frame.h: Rename from dwarf2-frame.h. + * dwarf2/index-cache.c: Rename from dwarf-index-cache.c. + * dwarf2/index-cache.h: Rename from dwarf-index-cache.h. + * dwarf2/index-common.c: Rename from dwarf-index-common.c. + * dwarf2/index-common.h: Rename from dwarf-index-common.h. + * dwarf2/index-write.c: Rename from dwarf-index-write.c. + * dwarf2/index-write.h: Rename from dwarf-index-write.h. + * dwarf2/loc.c: Rename from dwarf2loc.c. + * dwarf2/loc.h: Rename from dwarf2loc.h. + * dwarf2/read.c: Rename from dwarf2read.c. + * dwarf2/read.h: Rename from dwarf2read.h. + * dwarf2/abbrev.c, aarch64-tdep.c, alpha-tdep.c, + amd64-darwin-tdep.c, arc-tdep.c, arm-tdep.c, bfin-tdep.c, + compile/compile-c-symbols.c, compile/compile-cplus-symbols.c, + compile/compile-loc2c.c, cris-tdep.c, csky-tdep.c, findvar.c, + gdbtypes.c, guile/scm-type.c, h8300-tdep.c, hppa-bsd-tdep.c, + hppa-linux-tdep.c, i386-darwin-tdep.c, i386-linux-tdep.c, + i386-tdep.c, iq2000-tdep.c, m32c-tdep.c, m68hc11-tdep.c, + m68k-tdep.c, microblaze-tdep.c, mips-tdep.c, mn10300-tdep.c, + msp430-tdep.c, nds32-tdep.c, nios2-tdep.c, or1k-tdep.c, + riscv-tdep.c, rl78-tdep.c, rs6000-tdep.c, rx-tdep.c, s12z-tdep.c, + s390-tdep.c, score-tdep.c, sh-tdep.c, sparc-linux-tdep.c, + sparc-tdep.c, sparc64-linux-tdep.c, sparc64-tdep.c, tic6x-tdep.c, + tilegx-tdep.c, v850-tdep.c, xstormy16-tdep.c, xtensa-tdep.c: + Update. + * Makefile.in (COMMON_SFILES): Update. + (HFILES_NO_SRCDIR): Update. + +2020-02-08 Tom Tromey <tom@tromey.com> + + * dwarf2read.c (struct die_reader_specs) <comp_dir>: Remove. + (init_cu_die_reader, read_cutu_die_from_dwo): Update. + +2020-02-08 Tom Tromey <tom@tromey.com> + + * dwarf2read.h (struct die_info): Don't declare. + +2020-02-08 Tom Tromey <tom@tromey.com> + + * dwarf2read.h (die_info_ptr): Remove typedef. + +2020-02-08 Tom Tromey <tom@tromey.com> + + * dwarf2read.c (read_call_site_scope) + (handle_data_member_location, dwarf2_add_member_fn) + (mark_common_block_symbol_computed, read_common_block) + (attr_to_dynamic_prop, partial_die_info::read) + (var_decode_location, dwarf2_fetch_die_loc_sect_off) + (dwarf2_symbol_mark_computed, set_die_type): Update. + * dwarf2/attribute.h (struct attribute) <form_is_block>: Declare + method. + (attr_form_is_block): Don't declare. + * dwarf2/attribute.c (attribute::form_is_block): Now a method. -2019-02-22 Keith Seitz <keiths@redhat.com> +2020-02-08 Tom Tromey <tom@tromey.com> - PR symtab/23853 - * linespec.c (create_sals_line_offset): Search for the default - symtab's filename instead of its fullname. + * dwarf2read.c (dwarf2_find_base_address, ) + (read_call_site_scope, rust_containing_type) + (dwarf2_get_pc_bounds, dwarf2_record_block_ranges) + (handle_data_member_location, dwarf2_add_member_fn) + (get_alignment, read_structure_type, process_structure_scope) + (mark_common_block_symbol_computed, read_common_block) + (read_tag_string_type, attr_to_dynamic_prop, read_subrange_type) + (partial_die_info::read, read_attribute_value, new_symbol) + (lookup_die_type, dwarf2_get_ref_die_offset) + (dwarf2_get_attr_constant_value, follow_die_ref_or_sig) + (dwarf2_fetch_die_loc_sect_off, get_DW_AT_signature_type) + (dwarf2_symbol_mark_computed): Update. + * dwarf2/attribute.h (struct attribute) <value_as_address, + form_is_section_offset, form_is_constant, form_is_ref>: Declare + methods. + (value_as_address, attr_form_is_section_offset) + (attr_form_is_constant, attr_form_is_ref): Don't declare. + * dwarf2/attribute.c (attribute::value_as_address) + (attribute::form_is_section_offset, attribute::form_is_constant) + (attribute::form_is_ref): Now methods. + +2020-02-08 Tom Tromey <tom@tromey.com> + + * dwarf2read.c (struct attribute, DW_STRING) + (DW_STRING_IS_CANONICAL, DW_UNSND, DW_BLOCK, DW_SND, DW_ADDR) + (DW_SIGNATURE, struct dwarf_block, attr_value_as_address) + (attr_form_is_block, attr_form_is_section_offset) + (attr_form_is_constant, attr_form_is_ref): Move. + * dwarf2/attribute.h: New file. + * dwarf2/attribute.c: New file, from dwarf2read.c. + * Makefile.in (COMMON_SFILES): Add dwarf2/attribute.c. + +2020-02-08 Tom Tromey <tom@tromey.com> + + * dwarf2read.c (abbrev_table_up, struct abbrev_info) + (struct attr_abbrev, ABBREV_HASH_SIZE, struct abbrev_table): + Move. + (read_cutu_die_from_dwo, build_type_psymtabs_1): Update. + (abbrev_table::alloc_abbrev, abbrev_table::add_abbrev) + (abbrev_table::lookup_abbrev, abbrev_table_read_table): Move to + abbrev.c. + * dwarf2/abbrev.h: New file. + * dwarf2/abbrev.c: New file, from dwarf2read.c. + * Makefile.in (COMMON_SFILES): Add dwarf2/abbrev.c. + +2020-02-08 Tom Tromey <tom@tromey.com> + + * dwarf2read.c (dwarf2_section_buffer_overflow_complaint) + (dwarf2_section_size, dwarf2_get_section_info) + (create_signatured_type_table_from_debug_names) + (create_addrmap_from_aranges, read_debug_names_from_section) + (get_gdb_index_contents_from_section, read_comp_unit_head) + (error_check_comp_unit_head, read_abbrev_offset) + (create_debug_type_hash_table, init_cu_die_reader) + (read_cutu_die_from_dwo, dwarf2_build_psymtabs_hard) + (read_comp_units_from_section, create_cus_hash_table) + (create_dwp_hash_table, create_dwo_unit_in_dwp_v1) + (create_dwp_v2_section, dwarf2_rnglists_process) + (dwarf2_ranges_process, read_die_and_siblings, read_full_die) + (abbrev_table_read_table, read_indirect_string_at_offset_from) + (read_indirect_string_from_dwz, read_addr_index_1) + (read_str_index, dwarf_decode_line_header, skip_form_bytes) + (dwarf_decode_macro_bytes, dwarf_decode_macros) + (fill_in_loclist_baton): Update. + * dwarf2/section.h (struct dwarf2_section_info) <get_name, + get_containing_section, get_bfd_owner, get_bfd_section, + get_file_name, get_id, get_flags, empty, read>: Declare methods. + (dwarf2_read_section, get_section_name, get_section_file_name) + (get_containing_section, get_section_bfd_owner) + (get_section_bfd_section, get_section_name, get_section_file_name) + (get_section_id, get_section_flags, dwarf2_section_empty_p): Don't + declare. + * dwarf2/section.c (dwarf2_section_info::get_containing_section) + (dwarf2_section_info::get_bfd_owner) + (dwarf2_section_info::get_bfd_section) + (dwarf2_section_info::get_name) + (dwarf2_section_info::get_file_name, dwarf2_section_info::get_id) + (dwarf2_section_info::get_flags, dwarf2_section_info::empty) + (dwarf2_section_info::read): Now methods. + * dwarf-index-write.c (class debug_names): Update. + +2020-02-08 Tom Tromey <tom@tromey.com> + + * dwarf2read.h (struct dwarf2_section_info, dwarf2_read_section): + Move to dwarf2/section.h. + * dwarf2read.c (get_containing_section, get_section_bfd_owner) + (get_section_bfd_section, get_section_name) + (get_section_file_name, get_section_id, get_section_flags) + (dwarf2_section_empty_p, dwarf2_read_section): Moe to + dwarf2/section.c. + * dwarf2/section.h: New file. + * dwarf2/section.c: New file, from dwarf2read.c. + * Makefile.in (COMMON_SFILES): Add dwarf2/section.c. + +2020-02-08 Tom Tromey <tom@tromey.com> + + * dwarf2read.h (read_unsigned_leb128): Don't declare. + * dwarf2read.c (read_1_byte, read_1_signed_byte, read_2_bytes) + (read_2_signed_bytes, read_3_bytes, read_4_bytes) + (read_4_signed_bytes, read_8_bytes): Move to dwarf2/leb.h. + (read_unsigned_leb128, read_signed_leb128): Move to dwarf2/leb.c. + * dwarf2/leb.h: New file, from dwarf2read.c. + * dwarf2/leb.c: New file, from dwarf2read.c. + * dwarf2-frame.c (read_1_byte, read_4_bytes, read_8_bytes): + Remove. + * Makefile.in (CONFIG_SRC_SUBDIR): Add dwarf2. + (COMMON_SFILES): Add dwarf2/leb.c. -2019-02-21 Alan Hayward <alan.hayward@arm.com> +2020-02-08 Joel Brobecker <brobecker@adacore.com> - * NEWS: Update style defaults. + GDB 9.1 released. -2019-02-21 Alan Hayward <alan.hayward@arm.com> +2020-02-05 Iain Buclaw <ibuclaw@gdcproject.org> - * main.c (captured_main_1): Disable styling in batch mode. + PR gdb/25190: + * gdb/remote-sim.c (gdb_os_write_stderr): Update. + * gdb/remote.c (remote_console_output): Update. + * gdb/ui-file.c (fputs_unfiltered): Rename to... + (ui_file_puts): ...this. + * gdb/ui-file.h (ui_file_puts): Add declaration. + * gdb/utils.c (emit_style_escape): Update. + (flush_wrap_buffer): Update. + (fputs_maybe_filtered): Update. + (fputs_unfiltered): Add function. -2019-02-20 Tom Tromey <tom@tromey.com> +2020-02-05 Iain Buclaw <ibuclaw@gdcproject.org> - * symtab.c (symtab_symbol_info): Fix typos. + * gdb/event-loop.c (gdb_wait_for_event): Update. + * gdb/printcmd.c (printf_command): Update. + * gdb/remote-fileio.c (remote_fileio_func_write): Update. + * gdb/remote-sim.c (gdb_os_flush_stdout): Update. + (gdb_os_flush_stderr): Update. + * gdb/remote.c (remote_console_output): Update. + * gdb/ui-file.c (gdb_flush): Rename to... + (ui_file_flush): ...this. + (stderr_file::write): Update. + (stderr_file::puts): Update. + * gdb/ui-file.h (gdb_flush): Rename to... + (ui_file_flush): ...this. + * gdb/utils.c (gdb_flush): Add function. + * gdb/utils.h (gdb_flush): Add declaration. -2019-02-20 Tom Tromey <tromey@adacore.com> +2020-02-07 Tom Tromey <tromey@adacore.com> - * findcmd.c (_initialize_mem_search): Use upper case for - metasyntactic variables. + PR breakpoints/24915: + * source.c (find_and_open_source): Do not check basenames_may_differ. -2019-02-20 Alan Hayward <alan.hayward@arm.com> +2020-02-07 Tom Tromey <tom@tromey.com> - * aarch64-tdep.c (aarch64_add_reggroups): New function. - (aarch64_gdbarch_init): Call aarch64_add_reggroups. + * README: Update gdbserver documentation. + * gdbserver: Move to top level. + * configure.tgt (build_gdbserver): Remove. + * configure.ac: Remove --enable-gdbserver. + * configure: Rebuild. + * Makefile.in (distclean): Don't mention gdbserver. -2019-02-19 Simon Marchi <simon.marchi@polymtl.ca> +2020-02-06 Shahab Vahedi <shahab@synopsys.com> - * top.h (source_file_name): Change to std::string. - * top.c (source_file_name): Likewise. - (command_line_input): Adjust. - * cli/cli-script.c (script_from_file): Adjust. + * source-cache.c (source_cache::ensure): Surround + get_plain_source_lines with a try/catch. + (source_cache::get_line_charpos): Get rid of try/catch + and only check for the return value of "ensure". + * tui/tui-source.c (tui_source_window::set_contents): + Simplify "nlines" calculation. -2019-02-19 Tom Tromey <tromey@adacore.com> +2020-02-06 Shahab Vahedi <shahab@synopsys.com> - * ravenscar-thread.c - (ravenscar_thread_target::update_thread_list): Don't call - ada_build_task_list. - * ada-lang.h (ada_build_task_list): Don't declare. - * ada-tasks.c (struct ada_tasks_inferior_data) - <task_list_valid_p>: Now bool. - (read_known_tasks, ada_task_list_changed) - (ada_tasks_invalidate_inferior_data): Update. - (read_known_tasks_array): Return bool. - (read_known_tasks_list): Likewise. - (read_known_tasks): Return void. - (ada_build_task_list): Now static. - -2019-02-18 Andrew Burgess <andrew.burgess@embecosm.com> - - * gdbtypes.c (type_align): Allow alignment of TYPE_CODE_METHODPTR - and TYPE_CODE_MEMBERPTR to be overridden by the gdbarch. - -2019-02-18 Philippe Waroquiers <philippe.waroquiers@skynet.be> - - * ada-task.c (_initialize_tasks): Use 'with_cleanup' register - variant for ada_tasks_pspace_data_handle and - ada_tasks_inferior_data_handle. - (ada_tasks_pspace_data_cleanup): New function. - (ada_tasks_inferior_data_cleanup): New function. - -2019-02-17 Tom Tromey <tom@tromey.com> - - * macrotab.h (macro_source_fullname): Return a std::string. - * macrotab.c (macro_include, check_for_redefinition) - (macro_undef, macro_lookup_definition, foreach_macro) - (foreach_macro_in_scope): Update. - (macro_source_fullname): Return a std::string. - * macrocmd.c (show_pp_source_pos): Update. - -2019-02-17 Tom Tromey <tom@tromey.com> - - * macrocmd.c (show_pp_source_pos): Style the file names. - -2019-02-17 Tom Tromey <tom@tromey.com> - - PR tui/24197: - * tui/tui-source.c (tui_set_source_content_nil): Rewrite. - -2019-02-17 Tom Tromey <tom@tromey.com> - - * ada-lang.c (user_select_syms): Use filtered printing. - * utils.c (wrap_style): New global. - (desired_style): Remove. - (emit_style_escape): Add stream parameter. - (set_output_style, reset_terminal_style, prompt_for_continue): - Update. - (flush_wrap_buffer): Only flush gdb_stdout. - (wrap_here): Set wrap_style. - (fputs_maybe_filtered): Clear the wrap buffer on exception. Don't - treat escape sequences as a character. Change when wrap buffer is - flushed. - (fputs_styled): Do not set the output style when the default is - requested. - * ui-style.h (struct ui_file_style) <is_default>: New method. - * source.c (print_source_lines_base): Emit escape sequences in one - piece. - -2019-02-17 Joel Brobecker <brobecker@adacore.com> - - * gdbtypes.c (type_align): Handle TYPE_CODE_RANGE the same as - integers and enumeration types. - -2019-02-17 Joel Brobecker <brobecker@adacore.com> - - * ada-lang.c (standard_lookup): Use ada_lookup_encoded_symbol - instead of lookup_symbol_in_language - (do_exact_match): New function. - (ada_get_symbol_name_matcher): Return do_exact_match when - doing a verbatim match. - -2019-02-15 Tom Tromey <tromey@adacore.com> - - * ravenscar-thread.c (ravenscar_thread_target::resume) - (ravenscar_thread_target::wait): Special case wildcard requests. - -2019-02-15 Tom Tromey <tromey@adacore.com> - - * ravenscar-thread.c (base_ptid): Remove. - (struct ravenscar_thread_target) <close>: New method. - <m_base_ptid>: New member. - <update_inferior_ptid, active_task, task_is_currently_active, - runtime_initialized>: Declare methods. - <ravenscar_thread_target>: Add constructor. - (ravenscar_thread_target::task_is_currently_active) - (ravenscar_thread_target::update_inferior_ptid) - (ravenscar_runtime_initialized): Rename. Now methods. - (ravenscar_thread_target::resume, ravenscar_thread_target::wait) - (ravenscar_thread_target::update_thread_list): Update. - (ravenscar_thread_target::active_task): Now method. - (ravenscar_thread_target::store_registers) - (ravenscar_thread_target::prepare_to_store) - (ravenscar_thread_target::prepare_to_store) - (ravenscar_thread_target::mourn_inferior): Update. - (ravenscar_inferior_created): Use "new" to create target. - (ravenscar_thread_target::get_ada_task_ptid): Update. - (_initialize_ravenscar): Don't initialize base_ptid. - (ravenscar_ops): Remove global. - -2019-02-15 Tom Tromey <tromey@adacore.com> - - * target.h (push_target): Declare new overload. - * target.c (push_target): New overload, taking an rvalue reference. - * remote.c (remote_target::open_1): Use push_target overload. - * corelow.c (core_target_open): Use push_target overload. - -2019-02-15 Tom Tromey <tromey@adacore.com> - - * ravenscar-thread.c (is_ravenscar_task) - (ravenscar_task_is_currently_active): Return bool. - (ravenscar_update_inferior_ptid, get_running_thread_msymbol) - (_initialize_ravenscar): Remove "(void)". - (has_ravenscar_runtime, ravenscar_runtime_initialized): Likewise. - Return bool. - -2019-02-15 Tom Tromey <tromey@adacore.com> - - * ravenscar-thread.c (ravenscar_runtime_initializer) - (has_ravenscar_runtime, get_running_thread_id) - (ravenscar_thread_target::resume): Fix indentation. - -2019-02-15 Tom Tromey <tromey@adacore.com> - - * sparc-ravenscar-thread.c (struct sparc_ravenscar_ops): Derive - from ravenscar_arch_ops. - (sparc_ravenscar_ops::fetch_registers) - (sparc_ravenscar_ops::store_registers): Now methods. - (sparc_ravenscar_prepare_to_store): Remove. - (sparc_ravenscar_ops): Redefine. - * ravenscar-thread.h (struct ravenscar_arch_ops): Add virtual - methods and destructor. Remove members. - * ravenscar-thread.c (ravenscar_thread_target::fetch_registers) - (ravenscar_thread_target::store_registers) - (ravenscar_thread_target::prepare_to_store): Update. - * ppc-ravenscar-thread.c (ppc_ravenscar_generic_prepare_to_store): - Remove. - (struct ppc_ravenscar_powerpc_ops): Derive from - ravenscar_arch_ops. - (ppc_ravenscar_powerpc_ops::fetch_registers) - (ppc_ravenscar_powerpc_ops::store_registers): Now methods. - (ppc_ravenscar_powerpc_ops): Redefine. - (struct ppc_ravenscar_e500_ops): Derive from ravenscar_arch_ops. - (ppc_ravenscar_e500_ops::fetch_registers) - (ppc_ravenscar_e500_ops::store_registers): Now methods. - (ppc_ravenscar_e500_ops): Redefine. - * aarch64-ravenscar-thread.c - (aarch64_ravenscar_generic_prepare_to_store): Remove. - (struct aarch64_ravenscar_ops): Derive from ravenscar_arch_ops. - (aarch64_ravenscar_fetch_registers) - (aarch64_ravenscar_store_registers): Now methods. - (aarch64_ravenscar_ops): Redefine. + * MAINTAINERS (Write After Approval): Add myself. -2019-02-15 Tom Tromey <tromey@adacore.com> +2020-02-05 Christian Biesinger <cbiesinger@google.com> - * ravenscar-thread.c (ravenscar_thread_target::stopped_by_sw_breakpoint) - (ravenscar_thread_target::stopped_by_hw_breakpoint) - (ravenscar_thread_target::stopped_by_watchpoint) - (ravenscar_thread_target::stopped_data_address) - (ravenscar_thread_target::core_of_thread): Use scoped_restore. + * sparc-nat.h (struct sparc_target) <xfer_partial>: Fix base class + function call. -2019-02-15 Tom Tromey <tromey@adacore.com> +2020-02-05 Christian Biesinger <cbiesinger@google.com> - * ravenscar-thread.c: Fix some typos. + * ppc-nbsd-tdep.h: Fix macro name in #endif comment. -2019-02-15 Philippe Waroquiers <philippe.waroquiers@skynet.be> - Tom Tromey <tromey@adacore.com> +2020-02-05 Maciej W. Rozycki <macro@wdc.com> - * ada-lang.c (ada_exception_sal): Change addr_string to a - std::string. - (create_ada_exception_catchpoint): Update. + * nat/riscv-linux-tdesc.h: New file. + * nat/riscv-linux-tdesc.c: New file, taking code from... + * riscv-linux-nat.c (riscv_linux_nat_target::read_description): + ... here. + * configure.nat <linux> <riscv*>: Add nat/riscv-linux-tdesc.o to + NATDEPFILES. -2019-02-15 Philippe Waroquiers <philippe.waroquiers@skynet.be> - Tom Tromey <tromey@adacore.com> +2020-02-04 Andrew Burgess <andrew.burgess@embecosm.com> - * breakpoint.c (~bp_location): Rename from bp_location_dtor. - (bp_location_ops): Remove. - (base_breakpoint_allocate_location): Update. - (free_bp_location): Update. - * ada-lang.c (class ada_catchpoint_location) - <ada_catchpoint_location>: Remove ops parameter. - (ada_catchpoint_location_dtor): Remove. - (ada_catchpoint_location_ops): Remove. - (allocate_location_exception): Update. - * breakpoint.h (struct bp_location_ops): Remove. - (class bp_location) <bp_location>: Remove bp_location_ops - parameter. - <~bp_location>: Add destructor. - <ops>: Remove. + * remote-sim.c (sim_inferior_data::sim_inferior_data): Assert that + we don't set the fake simulator ptid to the null_ptid. -2019-02-14 Thomas Schwinge <thomas@codesourcery.com> - Pedro Alves <palves@redhat.com> +2020-02-03 Simon Marchi <simon.marchi@efficios.com> + + * fork-child.c (gdb_startup_inferior): Use bool instead of int. + * gdbthread.h (class thread_info) <resumed>: Likewise. + * infrun.c (resume_1): Likewise. + (proceed): Likewise. + (infrun_thread_stop_requested): Likewise. + (stop_all_threads): Likewise. + (handle_inferior_event): Likewise. + (restart_threads): Likewise. + (finish_step_over): Likewise. + (keep_going_stepped_thread): Likewise. + * linux-nat.c (attach_proc_task_lwp_callback): Likewise. + (linux_handle_extended_wait): Likewise. + * record-btrace.c (get_thread_current_frame_id): Likewise. + * record-full.c (record_full_wait_1): Likewise. + * remote.c (remote_target::process_initial_stop_replies): Likewise. + * target.c (target_resume): Likewise. + * thread.c (set_running_thread): Likewise. + +2020-02-03 Alok Kumar Sharma <AlokKumar.Sharma@amd.com> + + * f-valprint.c (f77_print_array_1): Changed datatype of index + variable to LONGEST from int to enable it to contain bound + values correctly. + +2020-02-03 Maciej W. Rozycki <macro@wdc.com> + + * riscv-linux-nat.c [!NFPREG] (NFPREG): New macro. + (supply_fpregset_regnum, fill_fpregset): Handle regset buffer + offsets according to FLEN determined. + (riscv_linux_nat_target::read_description): Determine FLEN + dynamically. + (riscv_linux_nat_target::fetch_registers): Size regset buffer + according to FLEN determined. + (riscv_linux_nat_target::store_registers): Likewise. + +2020-02-01 Shahab Vahedi <shahab@synopsys.com> + + * target-descriptions.c (tdesc_register_in_reggroup_p): Return 0 + when reg->group is empty and reggroup is not. + +2020-01-31 Tom Tromey <tromey@adacore.com> + + * ravenscar-thread.c (ravenscar_thread_target::mourn_inferior): + Call beneath target's mourn_inferior after unpushing. + +2020-01-31 Andrew Burgess <andrew.burgess@embecosm.com> + + PR tui/9765 + * tui/tui-disasm.c (tui_find_disassembly_address): If we don't + have enough lines to fill the screen, still return the lowest + address we found. - * remote.c (remote_target::remote_parse_stop_reply): Avoid using - 'PATH_MAX'. +2020-01-31 Andrew Burgess <andrew.burgess@embecosm.com> -2019-02-14 David Michael <fedora.dm0@gmail.com> - Samuel Thibault <samuel.thibault@gnu.org> - Thomas Schwinge <thomas@codesourcery.com> + * tui/tui-win.c (_initialize_tui_win): Update help text for '+', + '-', '<', and '>' commands. - * gnu-nat.c (S_proc_getmsgport_reply, S_proc_task2proc_reply) - (S_proc_pid2proc_reply): Adjust to Hurd "proc" interface changes. +2020-01-29 Pedro Alves <palves@redhat.com> + Sergio Durigan Junior <sergiodj@redhat.com> -2019-02-14 Thomas Schwinge <thomas@codesourcery.com> + * infcmd.c (construct_inferior_arguments): Assert that + 'argc' is greater than 0. - * gnu-nat.c (gnu_write_inferior, parse_int_arg, _parse_bool_arg) - (check_empty): Use "const char *". +2020-01-29 Luis Machado <luis.machado@linaro.org> - * gnu-nat.c (gnu_nat_target::detach): Instead of - 'detach_inferior (pid)' call - 'detach_inferior (find_inferior_pid (pid))'. + * aarch64-tdep.c (BRK_INSN_MASK): Define to 0xffe0001f. + (BRK_INSN_MASK): Define to 0xd4200000. + (aarch64_program_breakpoint_here_p): New function. + (aarch64_gdbarch_init): Set gdbarch_program_breakpoint_here_p hook. + * arch-utils.c (default_program_breakpoint_here_p): Moved from + breakpoint.c. + * arch-utils.h (default_program_breakpoint_here_p): Moved from + breakpoint.h + * breakpoint.c (bp_loc_is_permanent): Changed return type to bool and + call gdbarch_program_breakpoint_here_p. + (program_breakpoint_here): Moved to arch-utils.c, renamed to + default_program_breakpoint_here_p, changed return type to bool and + simplified. + * breakpoint.h (program_breakpoint_here): Moved prototype to + arch-utils.h, renamed to default_program_breakpoint_here_p and changed + return type to bool. + * gdbarch.c: Regenerate. + * gdbarch.h: Regenerate. + * gdbarch.sh (program_breakpoint_here_p): New method. + * infrun.c (handle_signal_stop): Call + gdbarch_program_breakpoint_here_p. + +2020-01-26 Tom Tromey <tom@tromey.com> + + * ctfread.c (struct ctf_fp_info): Reindent. + (_initialize_ctfread): Remove. + +2020-01-26 Tom Tromey <tom@tromey.com> + + * psymtab.c (partial_map_expand_apply) + (psym_find_pc_sect_compunit_symtab, psym_lookup_symbol) + (psymtab_to_symtab, psym_find_last_source_symtab, dump_psymtab) + (psym_print_stats, psym_expand_symtabs_for_function) + (psym_map_symbol_filenames, psym_map_matching_symbols) + (psym_expand_symtabs_matching) + (partial_symtab::read_dependencies, maintenance_info_psymtabs) + (maintenance_check_psymtabs): Use new methods. + * psympriv.h (struct partial_symtab) <readin_p, + get_compunit_symtab>: New methods. + <readin, compunit_symtab>: Remove members. + (struct standard_psymtab): New. + (struct legacy_psymtab): Derive from standard_psymtab. + * dwarf2read.h (struct dwarf2_psymtab): Derive from + standard_psymtab. + * ctfread.c (struct ctf_psymtab): Derive from standard_psymtab. + +2020-01-26 Tom Tromey <tom@tromey.com> + + * xcoffread.c (xcoff_psymtab_to_symtab_1): Call + read_dependencies. Add assert. + * psymtab.c (partial_symtab::read_dependencies): New method. + * psympriv.h (struct partial_symtab) <read_dependencies>: New + method. + * mdebugread.c (psymtab_to_symtab_1): Call read_dependencies. + * dwarf2read.c (dwarf2_psymtab::expand_psymtab): Call + read_dependencies. + * dbxread.c (dbx_psymtab_to_symtab_1): Call read_dependencies. + Add assert. + +2020-01-26 Tom Tromey <tom@tromey.com> + + * xcoffread.c (xcoff_psymtab_to_symtab_1): Change argument order. + Call expand_psymtab. + (xcoff_read_symtab): Call expand_psymtab. + (xcoff_start_psymtab, xcoff_end_psymtab): Set + legacy_expand_psymtab. + * psympriv.h (struct partial_symtab) <expand_psymtab>: New + method. + (struct legacy_psymtab) <expand_psymtab>: Implement. + <legacy_expand_psymtab>: New member. + * mdebugread.c (mdebug_read_symtab): Call expand_psymtab. + (parse_partial_symbols): Set legacy_expand_psymtab. + (psymtab_to_symtab_1): Change argument order. Call + expand_psymtab. + (new_psymtab): Set legacy_expand_psymtab. + * dwarf2read.h (struct dwarf2_psymtab) <expand_psymtab>: Declare. + * dwarf2read.c (dwarf2_psymtab::read_symtab): Call + expand_psymtab. + (dwarf2_psymtab::expand_psymtab): Rename from + psymtab_to_symtab_1. Call expand_psymtab. + * dbxread.c (start_psymtab): Set legacy_expand_psymtab. + (dbx_end_psymtab): Likewise. + (dbx_psymtab_to_symtab_1): Change argument order. Call + expand_psymtab. + (dbx_read_symtab): Call expand_psymtab. + * ctfread.c (struct ctf_psymtab) <expand_psymtab>: Declare. + (ctf_psymtab::expand_psymtab): Rename from psymtab_to_symtab. + (ctf_psymtab::read_symtab): Call expand_psymtab. + +2020-01-26 Tom Tromey <tom@tromey.com> + + * xcoffread.c (xcoff_read_symtab): Remove prints. Add assert. + * psymtab.c (psymtab_to_symtab): Print verbose "Reading" + messages. + * mdebugread.c (mdebug_read_symtab): Remove prints. + * dwarf2read.c (dwarf2_psymtab::read_symtab): Remove prints. Add + assert. + * dbxread.c (dbx_read_symtab): Remove prints. Add assert. - * configure.nat [gdb_host == i386gnu] (NATDEPFILES): Add - 'nat/fork-inferior.o'. - * gnu-nat.c: #include "nat/fork-inferior.h". +2020-01-26 Tom Tromey <tom@tromey.com> - * gnu-nat.c (gnu_nat_target::detach): Instead of - 'inf_child_maybe_unpush_target (ops)' call 'maybe_unpush_target'. - * gnu-nat.h: #include "inf-child.h". - * i386-gnu-nat.c (gnu_fetch_registers): Rename/move to - 'i386_gnu_nat_target::fetch_registers'. - (gnu_store_registers): Rename/move to - 'i386_gnu_nat_target::store_registers'. + * xcoffread.c (this_symtab_psymtab, read_xcoff_symtab) + (xcoff_psymtab_to_symtab_1, xcoff_read_symtab) + (xcoff_start_psymtab, xcoff_end_psymtab, scan_xcoff_symtab): Use + legacy_symtab. + * stabsread.h (dbx_end_psymtab): Use legacy_symtab. + * psymtab.c (psymtab_to_symtab): Call method. + (dump_psymtab): Update. + * psympriv.h (struct partial_symtab): Add virtual destructor. + <read_symtab>: New method. + (struct legacy_symtab): New. + * mdebugread.c (mdebug_read_symtab): Use legacy_psymtab. + (struct pst_map) <pst>: Now a legacy_psymtab. + (parse_procedure, parse_partial_symbols, psymtab_to_symtab_1) + (new_psymtab): Use legacy_psymtab. + * dwarf2read.h (struct dwarf2_psymtab): New. + (struct dwarf2_per_cu_data) <psymtab>: Use it. + * dwarf2read.c (dwarf2_create_include_psymtab) + (dwarf2_build_include_psymtabs, create_type_unit_group) + (create_partial_symtab, process_psymtab_comp_unit_reader) + (build_type_psymtabs_reader, build_type_psymtab_dependencies) + (set_partial_user): Use dwarf2_psymtab. + (dwarf2_psymtab::read_symtab): Rename from dwarf2_read_symtab. + (psymtab_to_symtab_1, process_full_comp_unit) + (process_full_type_unit, dwarf2_ranges_read) + (dwarf2_get_pc_bounds, psymtab_include_file_name) + (dwarf_decode_lines): Use dwarf2_psymtab. + * dwarf-index-write.c (psym_index_map): Use dwarf2_psymtab. + (add_address_entry_worker, write_one_signatured_type) + (recursively_count_psymbols, recursively_write_psymbols) + (write_one_signatured_type, psyms_seen_size, write_gdbindex) + (write_debug_names): Likewise. + * dbxread.c (struct header_file_location): Take a legacy_psymtab. + <pst>: Now a legacy_psymtab. + (find_corresponding_bincl_psymtab): Return a legacy_psymtab. + (read_dbx_symtab, start_psymtab, dbx_end_psymtab) + (dbx_psymtab_to_symtab_1, read_ofile_symtab): Use legacy_psymtab. + * ctfread.c (struct ctf_psymtab): New. + (ctf_start_symtab, ctf_end_symtab, psymtab_to_symtab): Take a + ctf_psymtab. + (ctf_psymtab::read_symtab): Rename from ctf_read_symtab. + (create_partial_symtab): Return a ctf_psymtab. + (scan_partial_symbols): Update. + +2020-01-26 Tom Tromey <tom@tromey.com> + + * xcoffread.c (xcoff_start_psymtab): Use new. + * psymtab.c (partial_symtab::partial_symtab): New constructor, + renamed from start_psymtab_common. + * psympriv.h (struct partial_symtab): Add new constructor. + (start_psymtab_common): Don't declare. + * mdebugread.c (parse_partial_symbols): Use new. + * dwarf2read.c (create_partial_symtab): Use new. + * dbxread.c (start_psymtab): Use new. + * ctfread.c (create_partial_symtab): Use new. + +2020-01-26 Tom Tromey <tom@tromey.com> + + * xcoffread.c (xcoff_end_psymtab): Use new. + * psymtab.c (start_psymtab_common): Use new. + (partial_symtab::partial_symtab): Rename from allocate_psymtab. + Update. + * psympriv.h (struct partial_symtab): Add parameters to + constructor. Don't inline. + (allocate_psymtab): Don't declare. + * mdebugread.c (new_psymtab): Use new. + * dwarf2read.c (dwarf2_create_include_psymtab): Use new. + * dbxread.c (dbx_end_psymtab): Use new. + +2020-01-26 Tom Tromey <tom@tromey.com> + + * psymtab.h (class psymtab_storage) <install_psymtab>: Rename from + allocate_psymtab. Update documentation. + * psymtab.c (psymtab_storage::install_psymtab): Rename from + allocate_psymtab. Do not use new. + (allocate_psymtab): Use new. Update. + +2020-01-26 Tom Tromey <tom@tromey.com> + + * xcoffread.c (xcoff_psymtab_to_symtab_1): Update. + * psymtab.c (psym_print_stats): Update. + * psympriv.h (struct partial_symtab) <readin, + psymtabs_addrmap_supported, anonymous>: Now bool. + * mdebugread.c (psymtab_to_symtab_1): Update. + * dwarf2read.c (create_type_unit_group, create_partial_symtab) + (build_type_psymtabs_reader, psymtab_to_symtab_1) + (process_full_comp_unit, process_full_type_unit): Update. + * dbxread.c (dbx_psymtab_to_symtab_1): Update. + * ctfread.c (psymtab_to_symtab): Update. - * config/i386/nm-i386gnu.h: Don't "#include" any files. - * gnu-nat.h (mach_thread_info): New function. - * gnu-nat.c (thread_takeover_sc_cmd): Use it. +2020-01-26 Tom Tromey <tom@tromey.com> - * config/i386/nm-i386gnu.h (gnu_target_pid_to_str): Remove. + * mdebugread.c (parse_partial_symbols): Use discard_psymtab. + * psymtab.h (class psymtab_storage) <free_psymtabs>: Remove. + * psymtab.c (psymtab_storage): Delete psymtabs. + (psymtab_storage::allocate_psymtab): Use new. + (psymtab_storage::discard_psymtab): Use delete. + * psympriv.h (struct partial_symtab): Add constructor and + initializers. -2019-02-14 Frederic Konrad <konrad@adacore.com> +2020-01-26 Tom Tromey <tom@tromey.com> - * riscv-rdep.c (riscv_type_alignment): Handle TYPE_CODE_RANGE. + * machoread.c: Do not include psympriv.h. -2019-02-14 Joel Brobecker <brobecker@adacore.com> +2020-01-25 Philippe Waroquiers <philippe.waroquiers@skynet.be> - * windows-nat.c (windows_add_thread): Add new parameter - "main_thread_p" with default value set to false. Update - function documentation as well as all callers. - (windows_delete_thread): Likewise. - (fake_create_process): Update call to windows_add_thread. - (get_windows_debug_event) <CREATE_THREAD_DEBUG_EVENT> - <CREATE_PROCESS_DEBUG_EVENT>: Likewise. - <EXIT_THREAD_DEBUG_EVENT, EXIT_PROCESS_DEBUG_EVENT>: Update - call to windows_delete_thread. + * NEWS: Mention the new option and the set/show commands. -2019-02-13 Simon Marchi <simon.marchi@ericsson.com> +2020-01-25 Philippe Waroquiers <philippe.waroquiers@skynet.be> - * MAINTAINERS: Add Andrew Burgess as global maintainer. + * exec.c (exec_file_mismatch_names, exec_file_mismatch_mode) + (show_exec_file_mismatch_command, set_exec_file_mismatch_command) + (validate_exec_file): New variables, enums, functions. + (exec_file_locate_attach, print_section_info): Style the filenames. + (_initialize_exec): Install show_exec_file_mismatch_command and + set_exec_file_mismatch_command. + * gdbcore.h (validate_exec_file): Declare. + * infcmd.c (attach_command): Call validate_exec_file. + * remote.c ( remote_target::remote_add_inferior): Likewise. -2019-02-12 John Baldwin <jhb@FreeBSD.org> +2020-01-24 Andrew Burgess <andrew.burgess@embecosm.com> - * symfile.c (find_separate_debug_file): Use canonical path of - sysroot with child_path instead of gdb_sysroot if it is valid. + * frame.c (find_frame_sal): Move call to get_next_frame into more + inner scope. + * inline-frame.c (inilne_state) <inline_state>: Update argument + types. + (inilne_state) <skipped_symbol>: Rename to... + (inilne_state) <skipped_symbols>: ...this, and change to a vector. + (skip_inline_frames): Build vector of skipped symbols and use this + to reate the inline_state. + (inline_skipped_symbol): Add a comment and some assertions, fetch + skipped symbol from the list. + +2020-01-24 Andrew Burgess <andrew.burgess@embecosm.com> + + * buildsym.c (lte_is_less_than): Delete. + (buildsym_compunit::end_symtab_with_blockvector): Create local + lambda function to sort line table entries, and use + std::stable_sort instead of std::sort. + * symtab.c (find_pc_sect_line): Skip backward over end of sequence + markers when looking for a previous line. + +2020-01-24 Andrew Burgess <andrew.burgess@embecosm.com> + + * dwarf2read.c (lnp_state_machine::record_line): Include + end_sequence parameter in debug print out. Record the line if we + are at an end_sequence marker even if it's not the start of a + statement. + * symmisc.c (maintenance_print_one_line_table): Print end of + sequence markers with 'END' not '0'. + +2020-01-24 Pedro Alves <palves@redhat.com> + + PR gdb/25410 + * thread.c (scoped_restore_current_thread::restore): Use + switch_to_inferior_no_thread. + * exec.c: Include "progspace-and-thread.h". + (add_target_sections, remove_target_sections): + scoped_restore_current_pspace_and_thread instead of + scoped_restore_current_thread. + * infrun.c (handle_vfork_child_exec_or_exit): Assign the pspace + and aspace to the inferior before calling clone_program_space. + Remove stale comment. + +2020-01-24 Christian Biesinger <cbiesinger@google.com> + + * arm-nbsd-nat.c (arm_nbsd_nat_target::fetch_registers): Rename to... + (arm_netbsd_nat_target::fetch_registers): ...this. + (arm_nbsd_nat_target::store_registers): Rename to... + (arm_netbsd_nat_target::store_registers): ...this. + +2020-01-24 Christian Biesinger <cbiesinger@google.com> + + * arm-nbsd-nat.c: Define _KERNTYPES to get the declaration of + register_t. + +2020-01-24 Christian Biesinger <cbiesinger@google.com> + + * aarch64-fbsd-tdep.c (aarch64_fbsd_iterate_over_regset_sections): + Update comment. + * aarch64-linux-tdep.c (aarch64_linux_iterate_over_regset_sections): + Likewise. + * arm-fbsd-tdep.c (arm_fbsd_iterate_over_regset_sections): Likewise. + * gdbcore.h (deprecated_add_core_fns): Update comment to point to + the correct replacement (iterate_over_regset_sections). + * riscv-fbsd-tdep.c (riscv_fbsd_iterate_over_regset_sections): + Update comment. + +2020-01-24 Graham Markall <graham.markall@embecosm.com> + + PR gdb/23718 + * gdb/python/python.c (execute_gdb_command): Call + async_enable_stdin in catch block. + +2020-01-24 Andrew Burgess <andrew.burgess@embecosm.com> + + * event-loop.c (start_event_loop): Wrap async_enable_stdin with + SWITCH_THRU_ALL_UIS. + +2020-01-24 Andrew Burgess <andrew.burgess@embecosm.com> + + PR tui/9765 + * minsyms.c (lookup_minimal_symbol_by_pc_section): Update header + comment, add extra parameter, and update to store previous symbol + when appropriate. + * minsyms.h (lookup_minimal_symbol_by_pc_section): Update comment, + add extra parameter. + * tui/tui-disasm.c (tui_disassemble): Update header comment, + remove unneeded parameter, add try/catch around gdb_print_insn, + rewrite to add items to asm_lines vector. + (tui_find_backward_disassembly_start_address): New function. + (tui_find_disassembly_address): Updated throughout. + (tui_disasm_window::set_contents): Update for changes to + tui_disassemble. + (tui_disasm_window::do_scroll_vertical): No need to adjust the + number of lines to scroll. + +2020-01-23 Simon Marchi <simon.marchi@polymtl.ca> + + * objfiles.h (ALL_OBJFILE_OSECTIONS): Move up. + (SECT_OFF_DATA): Likewise. + (SECT_OFF_RODATA): Likewise. + (SECT_OFF_TEXT): Likewise. + (SECT_OFF_BSS): Likewise. + (struct objfile) <text_section_offset, data_section_offset>: New + methods. + * amd64-windows-tdep.c (amd64_windows_find_unwind_info): Use + objfile::text_section_offset. + * coff-pe-read.c (add_pe_forwarded_sym): Likewise. + * coffread.c (coff_symtab_read): Likewise. + (enter_linenos): Likewise. + (process_coff_symbol): Likewise. + * ctfread.c (get_objfile_text_range): Likewise. + * dtrace-probe.c (dtrace_probe::get_relocated_address): + Use objfile::data_section_offset. + * dwarf2-frame.c (execute_cfa_program): Use + objfile::text_section_offset. + (dwarf2_frame_find_fde): Likewise. + * dwarf2read.c (create_addrmap_from_index): Likewise. + (create_addrmap_from_aranges): Likewise. + (dw2_find_pc_sect_compunit_symtab): Likewise. + (process_psymtab_comp_unit_reader): Likewise. + (add_partial_symbol): Likewise. + (add_partial_subprogram): Likewise. + (process_full_comp_unit): Likewise. + (read_file_scope): Likewise. + (read_func_scope): Likewise. + (read_lexical_block_scope): Likewise. + (read_call_site_scope): Likewise. + (dwarf2_rnglists_process): Likewise. + (dwarf2_ranges_process): Likewise. + (dwarf2_ranges_read): Likewise. + (dwarf_decode_lines_1): Likewise. + (new_symbol): Likewise. + (dwarf2_fetch_die_loc_sect_off): Likewise. + (dwarf2_per_cu_text_offset): Likewise. + * hppa-bsd-tdep.c (hppabsd_find_global_pointer): Likewise. + * hppa-tdep.c (read_unwind_info): Likewise. + * ia64-tdep.c (ia64_find_unwind_table): Likewise. + * psympriv.h (struct partial_symtab): Likewise. + * psymtab.c (find_pc_sect_psymtab): Likewise. + * solib-svr4.c (enable_break): Likewise. + * stap-probe.c (relocate_address): Use + objfile::data_section_offset. + * xcoffread.c (enter_line_range): Use + objfile::text_section_offset. + (read_xcoff_symtab): Likewise. + +2020-01-23 Simon Marchi <simon.marchi@efficios.com> + + * darwin-nat.c (darwin_nat_target::wait_1): Move `inf` + declaration to narrower scopes. + +2020-01-23 Simon Marchi <simon.marchi@efficios.com> + + * darwin-nat.h (struct darwin_exception_msg, enum + darwin_msg_state, struct darwin_thread_info, darwin_thread_t): + Move up. + (class darwin_nat_target) <wait_1, check_new_threads, + decode_exception_message, decode_message, stop_inferior, + init_thread_list, ptrace_him, cancel_breakpoint>: Declare. + * darwin-nat.c (darwin_check_new_threads): Rename to... + (darwin_nat_target::check_new_threads): ... this. + (darwin_suspend_inferior_it): Remove. + (darwin_decode_exception_message): Rename to... + (darwin_nat_target::decode_exception_message): ... this. + (darwin_nat_target::resume): Pass target to find_inferior_ptid. + (darwin_decode_message): Rename to... + (darwin_nat_target::decode_message): ... this. + (cancel_breakpoint): Rename to... + (darwin_nat_target::cancel_breakpoint): ... this. + (darwin_wait): Rename to... + (darwin_nat_target::wait_1): ... this. Use range-based for loop + instead of iterate_over_inferiors. + (darwin_nat_target::wait): Call wait_1 instead of darwin_wait. + (darwin_stop_inferior): Rename to... + (darwin_nat_target::stop_inferior): ... this. + (darwin_nat_target::kill): Call wait_1 instead of darwin_wait. + (darwin_init_thread_list): Rename to... + (darwin_nat_target::init_thread_list): ... this. + (darwin_ptrace_him): Rename to... + (darwin_nat_target::ptrace_him): ... this. + (darwin_nat_target::create_inferior): Pass lambda function to + fork_inferior. + (darwin_nat_target::detach): Call stop_inferior instead of + darwin_stop_inferior. + * fork-inferior.h (fork_inferior): Change init_trace_fun + parameter to gdb::function_view. + * fork-inferior.c (fork_inferior): Likewise. + +2020-01-23 Hannes Domani <ssbssa@yahoo.de> + + * i386-cygwin-tdep.c (core_process_module_section): Update. + * windows-nat.c (struct lm_info_windows): Add text_offset. + (windows_xfer_shared_libraries): Update. + * windows-tdep.c (windows_xfer_shared_library): + Add text_offset_cached argument. + * windows-tdep.h (windows_xfer_shared_library): Update. + +2020-01-21 Simon Marchi <simon.marchi@efficios.com> + + * gdbarch.sh: Add declaration for _initialize_gdbarch. + +2020-01-21 Simon Marchi <simon.marchi@efficios.com> + + * remote-sim.c (check_for_duplicate_sim_descriptor): Remove. + (get_sim_inferior_data): Remove use of iterate_over_inferiors, + replace with range-based for. + (gdbsim_interrupt_inferior): Remove. + (gdbsim_target::interrupt): Replace iterate_over_inferiors use + with a range-based for. Inline code from + gdbsim_interrupt_inferior. + +2020-01-21 Simon Marchi <simon.marchi@efficios.com> + + * infrun.c (proceed): Fix indentation. + +2020-01-21 Tom Tromey <tromey@adacore.com> + + * source-cache.c (source_cache::ensure): Call ext_lang_colorize. + * python/python.c (python_extension_ops): Update. + (gdbpy_colorize): New function. + * python/lib/gdb/__init__.py (colorize): New function. + * extension.h (ext_lang_colorize): Declare. + * extension.c (ext_lang_colorize): New function. + * extension-priv.h (struct extension_language_ops) <colorize>: New + member. + * cli/cli-style.c (_initialize_cli_style): Update help text. -2019-02-12 John Baldwin <jhb@FreeBSD.org> +2020-01-21 Luis Machado <luis.machado@linaro.org> - * symfile.c (find_separate_debug_file): Use child_path to - determine if an object file is under a sysroot. + * aarch64-tdep.c (struct aarch64_displaced_step_closure) + <cond>: Change type to bool. + (aarch64_displaced_step_b_cond): Update cond to use bool type. + (aarch64_displaced_step_cb): Likewise. + (aarch64_displaced_step_tb): Likewise. -2019-02-12 John Baldwin <jhb@FreeBSD.org> +2020-01-21 Luis Machado <luis.machado@linaro.org> - * Makefile.in (SUBDIR_UNITTESTS_SRCS): Add - unittests/child-path-selftests.c. - * common/pathstuff.c (child_path): New function. - * common/pathstuff.h (child_path): New prototype. - * unittests/child-path-selftests.c: New file. + * aarch64-tdep.c (aarch64_displaced_step_fixup): Add more debugging + output. -2019-02-12 John Baldwin <jhb@FreeBSD.org> +2020-01-21 Luis Machado <luis.machado@linaro.org> - * symfile.c (find_separate_debug_file): Look for separate debug - files in debug directories under the sysroot. + * aarch64-tdep.c (struct aarch64_displaced_step_closure ) + <pc_adjust>: Adjust the documentation. + (aarch64_displaced_step_fixup): Check if PC really moved before + adjusting it. -2019-02-12 Philippe Waroquiers <philippe.waroquiers@skynet.be> +2020-01-19 Tom Tromey <tom@tromey.com> - * symtab.h (struct minimal_symbol data_p): New const method. - (struct minimal_symbol text_p): Likewise. - * symtab.c (output_source_filename): Use file name style - to print file name. - (print_symbol_info): Likewise. - (print_msymbol_info): Use address style to print addresses. - Use function name style to print executable text symbols. - (expand_symtab_containing_pc): Use data_p. - (find_pc_sect_compunit_symtab): Likewise. + * disasm.c (~gdb_disassembler): New destructor. + (gdb_buffered_insn_length): Call disassemble_free_target. + * disasm.h (class gdb_disassembler): Declare destructor. Use + DISABLE_COPY_AND_ASSIGN. -2019-02-12 Philippe Waroquiers <philippe.waroquiers@skynet.be> +2020-01-19 Tom Tromey <tom@tromey.com> - * breakpoint.c (describe_other_breakpoints): Use address style - to print addresses. - (say_where): Likewise. + * dwarf2read.c (abbrev_table_up): Move typedef earlier. + (die_reader_func_ftype): Remove. + (cutu_reader): New class. + (dw2_get_file_names_reader): Remove "data" parameter. + (dw2_get_file_names): Use cutu_reader. + (create_debug_type_hash_table): Update. + (read_cutu_die_from_dwo): Update comment. + (lookup_dwo_unit): Add dwo_name parameter. + (cutu_reader::init_tu_and_read_dwo_dies): Now a method. Remove + die_reader_func_ftype and data parameters. + (cutu_reader::cutu_reader): Rename from init_cutu_and_read_dies. + Remove die_reader_func_ftype and data parameters. + (~cutu_reader): New; from init_cutu_and_read_dies. + (cutu_reader::cutu_reader): Rename from + init_cutu_and_read_dies_no_follow. Remove die_reader_func_ftype + and data parameters. + (init_cutu_and_read_dies_simple): Remove. + (struct process_psymtab_comp_unit_data): Remove. + (process_psymtab_comp_unit_reader): Remove data parameter; add + want_partial_unit and pretend_language parameters. + (process_psymtab_comp_unit): Use cutu_reader. + (build_type_psymtabs_reader): Remove data parameter. + (build_type_psymtabs_1): Use cutu_reader. + (process_skeletonless_type_unit): Likewise. + (load_partial_comp_unit_reader): Remove. + (load_partial_comp_unit): Use cutu_reader. + (load_full_comp_unit_reader): Remove. + (load_full_comp_unit): Use cutu_reader. + (struct create_dwo_cu_data): Remove. + (create_dwo_cu_reader): Remove datap parameter; add dwo_file and + dwo_unit parameters. + (create_cus_hash_table): Use cutu_reader. + (struct dwarf2_read_addr_index_data): Remove. + (dwarf2_read_addr_index_reader): Remove. + (dwarf2_read_addr_index): Use cutu_reader. + (read_signatured_type_reader): Remove. + (read_signatured_type): Use cutu_reader. + +2020-01-19 Tom Tromey <tom@tromey.com> + + * tui/tui.c (tui_show_assembly): Use tui_suppress_output. + * tui/tui-wingeneral.h (class tui_suppress_output): New. + (tui_wrefresh): Declare. + * tui/tui-wingeneral.c (suppress_output): New global. + (tui_suppress_output, ~tui_suppress_output): New constructor and + destructor. + (tui_wrefresh): New function. + (tui_gen_win_info::refresh_window): Use tui_wrefresh. + (tui_gen_win_info::make_window): Call wnoutrefresh when needed. + * tui/tui-regs.h (struct tui_data_window) <no_refresh>: Declare + method. + * tui/tui-regs.c (tui_data_window::erase_data_content): Call + tui_wrefresh. + (tui_data_window::no_refresh): New method. + (tui_data_item_window::refresh_window): Call tui_wrefresh. + (tui_reg_command): Use tui_suppress_output + * tui/tui-layout.c (tui_set_layout): Use tui_suppress_output. + * tui/tui-data.h (struct tui_gen_win_info) <no_refresh>: New + method. + * tui/tui-command.c (tui_refresh_cmd_win): Call tui_wrefresh. -2019-02-12 Philippe Waroquiers <philippe.waroquiers@skynet.be> +2020-01-19 Tom Tromey <tom@tromey.com> - * ada-typeprint.c (print_func_type): Print function name - style to print function name. - * c-typeprint.c (c_print_type_1): Likewise. + * tui/tui-winsource.c (tui_update_source_windows_with_line): + Handle case where symtab is null. -2019-02-11 Alan Hayward <alan.hayward@arm.com> +2020-01-19 Simon Marchi <simon.marchi@polymtl.ca> - * aarch64-linux-tdep.c (aarch64_linux_get_syscall_number): Check - for execve. + * linux-fork.c (one_fork_p): Simplify. -2019-02-10 Philippe Waroquiers <philippe.waroquiers@skynet.be> +2020-01-17 Simon Marchi <simon.marchi@efficios.com> - * c-exp.y (direct_abs_decl): Use emplace_back to record the - type_stack. + * top.c (struct qt_args): Remove. + (kill_or_detach): Change return type to void, replace `void *` + parameter with a proper one. + (print_inferior_quit_action): Likewise. + (quit_confirm): Use range-based for loop to iterate over inferiors. + (quit_force): Likewise. -2019-02-10 Joel Brobecker <brobecker@adacore.com> +2020-01-17 Simon Marchi <simon.marchi@efficios.com> - * ada-varobj.c (ada_value_is_changeable_p): Add handling of - TYPE_CODE_REF types. + * mi/mi-main.c (run_one_inferior): Change return type to void, replace + `void *` parameter with proper parameters. + (mi_cmd_exec_run): Use range-based loop to iterate over inferiors. + (print_one_inferior): Change return type to void, replace `void *` + parameter with proper parameters. + (mi_cmd_list_thread_groups): Use range-based loop to iterate over + inferiors. + (get_other_inferior): Remove. + (mi_cmd_remove_inferior): Use range-based loop to iterate over + inferiors. -2019-02-08 Jim Wilson <jimw@sifive.com> +2020-01-17 Simon Marchi <simon.marchi@efficios.com> - * riscv-linux-tdep.c (riscv_linux_fregmap): New. - (riscv_linux_fregset): New. - (riscv_linux_iterate_over_regset_sections): Call cb for .reg2 section. + * mi/mi-interp.c (report_initial_inferior): Remove. + (mi_interp::init): Use range-based for to iterate over inferiors. -2019-02-07 Tom Tromey <tom@tromey.com> +2020-01-17 Simon Marchi <simon.marchi@efficios.com> - * thread.c (thread_cancel_execution_command): Update. - * thread-fsm.h (struct thread_fsm): Add constructor, destructor, - methods. - (struct thread_fsm_ops): Remove. - (thread_fsm_ctor, thread_fsm_delete, thread_fsm_clean_up) - (thread_fsm_should_stop, thread_fsm_return_value) - (thread_fsm_set_finished, thread_fsm_finished_p) - (thread_fsm_async_reply_reason, thread_fsm_should_notify_stop): - Don't declare. - * mi/mi-interp.c (mi_on_normal_stop_1): Update. - * infrun.c (clear_proceed_status_thread) - (clean_up_just_stopped_threads_fsms, fetch_inferior_event) - (print_stop_event): Update. - * infcmd.c (struct step_command_fsm): Inherit from thread_fsm. - Add constructor. - (step_command_fsm_ops): Remove. - (new_step_command_fsm): Remove. - (step_1): Update. - (step_command_fsm::should_stop): Rename from - step_command_fsm_should_stop. - (step_command_fsm::clean_up): Rename from - step_command_fsm_clean_up. - (step_command_fsm::do_async_reply_reason): Rename from - step_command_fsm_async_reply_reason. - (struct until_next_fsm): Inherit from thread_fsm. Add - constructor. - (until_next_fsm_ops): Remove. - (new_until_next_fsm): Remove. - (until_next_fsm::should_stop): Rename from - until_next_fsm_should_stop. - (until_next_fsm::clean_up): Rename from until_next_fsm_clean_up. - (until_next_fsm::do_async_reply_reason): Rename from - until_next_fsm_async_reply_reason. - (struct finish_command_fsm): Inherit from thread_fsm. Add - constructor. Change type of breakpoint. - (finish_command_fsm_ops): Remove. - (new_finish_command_fsm): Remove. - (finish_command_fsm::should_stop): Rename from - finish_command_fsm_should_stop. - (finish_command_fsm::clean_up): Rename from - finish_command_fsm_clean_up. - (finish_command_fsm::return_value): Rename from - finish_command_fsm_return_value. - (finish_command_fsm::do_async_reply_reason): Rename from - finish_command_fsm_async_reply_reason. - (finish_command): Update. - * infcall.c (struct call_thread_fsm): Inherit from thread_fsm. - Add constructor. - (call_thread_fsm_ops): Remove. - (call_thread_fsm::call_thread_fsm): Rename from - new_call_thread_fsm. - (call_thread_fsm::should_stop): Rename from - call_thread_fsm_should_stop. - (call_thread_fsm::should_notify_stop): Rename from - call_thread_fsm_should_notify_stop. - (run_inferior_call, call_function_by_hand_dummy): Update. - * cli/cli-interp.c (should_print_stop_to_console): Update. - * breakpoint.c (struct until_break_fsm): Inherit from thread_fsm. - Add constructor. Change type of location_breakpoint, - caller_breakpoint. - (until_break_fsm_ops): Remove. - (new_until_break_fsm): Remove. - (until_break_fsm::should_stop): Rename from - until_break_fsm_should_stop. - (until_break_fsm::clean_up): Rename from - until_break_fsm_clean_up. - (until_break_fsm::do_async_reply_reason): Rename from - until_break_fsm_async_reply_reason. - (until_break_command): Update. - * thread-fsm.c: Remove. - * Makefile.in (COMMON_SFILES): Remove thread-fsm.c. - -2019-02-07 Tom Tromey <tom@tromey.com> - - * yy-remap.h: Add include guard. - * xtensa-tdep.h: Add include guard. - * xcoffread.h: Rename include guard. - * varobj-iter.h: Add include guard. - * tui/tui.h: Rename include guard. - * tui/tui-winsource.h: Rename include guard. - * tui/tui-wingeneral.h: Rename include guard. - * tui/tui-windata.h: Rename include guard. - * tui/tui-win.h: Rename include guard. - * tui/tui-stack.h: Rename include guard. - * tui/tui-source.h: Rename include guard. - * tui/tui-regs.h: Rename include guard. - * tui/tui-out.h: Rename include guard. - * tui/tui-layout.h: Rename include guard. - * tui/tui-io.h: Rename include guard. - * tui/tui-hooks.h: Rename include guard. - * tui/tui-file.h: Rename include guard. - * tui/tui-disasm.h: Rename include guard. - * tui/tui-data.h: Rename include guard. - * tui/tui-command.h: Rename include guard. - * tic6x-tdep.h: Add include guard. - * target/waitstatus.h: Rename include guard. - * target/wait.h: Rename include guard. - * target/target.h: Rename include guard. - * target/resume.h: Rename include guard. - * target-float.h: Rename include guard. - * stabsread.h: Add include guard. - * rs6000-tdep.h: Add include guard. - * riscv-fbsd-tdep.h: Add include guard. - * regformats/regdef.h: Rename include guard. - * record.h: Rename include guard. - * python/python.h: Rename include guard. - * python/python-internal.h: Rename include guard. - * python/py-stopevent.h: Rename include guard. - * python/py-ref.h: Rename include guard. - * python/py-record.h: Rename include guard. - * python/py-record-full.h: Rename include guard. - * python/py-record-btrace.h: Rename include guard. - * python/py-instruction.h: Rename include guard. - * python/py-events.h: Rename include guard. - * python/py-event.h: Rename include guard. - * procfs.h: Add include guard. - * proc-utils.h: Add include guard. - * p-lang.h: Add include guard. - * or1k-tdep.h: Rename include guard. - * observable.h: Rename include guard. - * nto-tdep.h: Rename include guard. - * nat/x86-linux.h: Rename include guard. - * nat/x86-linux-dregs.h: Rename include guard. - * nat/x86-gcc-cpuid.h: Add include guard. - * nat/x86-dregs.h: Rename include guard. - * nat/x86-cpuid.h: Rename include guard. - * nat/ppc-linux.h: Rename include guard. - * nat/mips-linux-watch.h: Rename include guard. - * nat/linux-waitpid.h: Rename include guard. - * nat/linux-ptrace.h: Rename include guard. - * nat/linux-procfs.h: Rename include guard. - * nat/linux-osdata.h: Rename include guard. - * nat/linux-nat.h: Rename include guard. - * nat/linux-namespaces.h: Rename include guard. - * nat/linux-btrace.h: Rename include guard. - * nat/glibc_thread_db.h: Rename include guard. - * nat/gdb_thread_db.h: Rename include guard. - * nat/gdb_ptrace.h: Rename include guard. - * nat/fork-inferior.h: Rename include guard. - * nat/amd64-linux-siginfo.h: Rename include guard. - * nat/aarch64-sve-linux-sigcontext.h: Rename include guard. - * nat/aarch64-sve-linux-ptrace.h: Rename include guard. - * nat/aarch64-linux.h: Rename include guard. - * nat/aarch64-linux-hw-point.h: Rename include guard. - * mn10300-tdep.h: Add include guard. - * mips-linux-tdep.h: Add include guard. - * mi/mi-parse.h: Rename include guard. - * mi/mi-out.h: Rename include guard. - * mi/mi-main.h: Rename include guard. - * mi/mi-interp.h: Rename include guard. - * mi/mi-getopt.h: Rename include guard. - * mi/mi-console.h: Rename include guard. - * mi/mi-common.h: Rename include guard. - * mi/mi-cmds.h: Rename include guard. - * mi/mi-cmd-break.h: Rename include guard. - * m2-lang.h: Add include guard. - * location.h: Rename include guard. - * linux-record.h: Rename include guard. - * linux-nat.h: Add include guard. - * linux-fork.h: Add include guard. - * i386-darwin-tdep.h: Rename include guard. - * hppa-linux-offsets.h: Add include guard. - * guile/guile.h: Rename include guard. - * guile/guile-internal.h: Rename include guard. - * gnu-nat.h: Rename include guard. - * gdb-stabs.h: Rename include guard. - * frv-tdep.h: Add include guard. - * f-lang.h: Add include guard. - * event-loop.h: Add include guard. - * darwin-nat.h: Rename include guard. - * cp-abi.h: Rename include guard. - * config/sparc/nm-sol2.h: Rename include guard. - * config/nm-nto.h: Rename include guard. - * config/nm-linux.h: Add include guard. - * config/i386/nm-i386gnu.h: Rename include guard. - * config/djgpp/nl_types.h: Rename include guard. - * config/djgpp/langinfo.h: Rename include guard. - * compile/gcc-cp-plugin.h: Add include guard. - * compile/gcc-c-plugin.h: Add include guard. - * compile/compile.h: Rename include guard. - * compile/compile-object-run.h: Rename include guard. - * compile/compile-object-load.h: Rename include guard. - * compile/compile-internal.h: Rename include guard. - * compile/compile-cplus.h: Rename include guard. - * compile/compile-c.h: Rename include guard. - * common/xml-utils.h: Rename include guard. - * common/x86-xstate.h: Rename include guard. - * common/version.h: Rename include guard. - * common/vec.h: Rename include guard. - * common/tdesc.h: Rename include guard. - * common/selftest.h: Rename include guard. - * common/scoped_restore.h: Rename include guard. - * common/scoped_mmap.h: Rename include guard. - * common/scoped_fd.h: Rename include guard. - * common/safe-iterator.h: Rename include guard. - * common/run-time-clock.h: Rename include guard. - * common/refcounted-object.h: Rename include guard. - * common/queue.h: Rename include guard. - * common/ptid.h: Rename include guard. - * common/print-utils.h: Rename include guard. - * common/preprocessor.h: Rename include guard. - * common/pathstuff.h: Rename include guard. - * common/observable.h: Rename include guard. - * common/netstuff.h: Rename include guard. - * common/job-control.h: Rename include guard. - * common/host-defs.h: Rename include guard. - * common/gdb_wait.h: Rename include guard. - * common/gdb_vecs.h: Rename include guard. - * common/gdb_unlinker.h: Rename include guard. - * common/gdb_unique_ptr.h: Rename include guard. - * common/gdb_tilde_expand.h: Rename include guard. - * common/gdb_sys_time.h: Rename include guard. - * common/gdb_string_view.h: Rename include guard. - * common/gdb_splay_tree.h: Rename include guard. - * common/gdb_setjmp.h: Rename include guard. - * common/gdb_ref_ptr.h: Rename include guard. - * common/gdb_optional.h: Rename include guard. - * common/gdb_locale.h: Rename include guard. - * common/gdb_assert.h: Rename include guard. - * common/filtered-iterator.h: Rename include guard. - * common/filestuff.h: Rename include guard. - * common/fileio.h: Rename include guard. - * common/environ.h: Rename include guard. - * common/common-utils.h: Rename include guard. - * common/common-types.h: Rename include guard. - * common/common-regcache.h: Rename include guard. - * common/common-inferior.h: Rename include guard. - * common/common-gdbthread.h: Rename include guard. - * common/common-exceptions.h: Rename include guard. - * common/common-defs.h: Rename include guard. - * common/common-debug.h: Rename include guard. - * common/cleanups.h: Rename include guard. - * common/buffer.h: Rename include guard. - * common/btrace-common.h: Rename include guard. - * common/break-common.h: Rename include guard. - * cli/cli-utils.h: Rename include guard. - * cli/cli-style.h: Rename include guard. - * cli/cli-setshow.h: Rename include guard. - * cli/cli-script.h: Rename include guard. - * cli/cli-interp.h: Rename include guard. - * cli/cli-decode.h: Rename include guard. - * cli/cli-cmds.h: Rename include guard. - * charset-list.h: Add include guard. - * buildsym-legacy.h: Rename include guard. - * bfin-tdep.h: Add include guard. - * ax.h: Rename include guard. - * arm-linux-tdep.h: Add include guard. - * arm-fbsd-tdep.h: Add include guard. - * arch/xtensa.h: Rename include guard. - * arch/tic6x.h: Add include guard. - * arch/i386.h: Add include guard. - * arch/arm.h: Rename include guard. - * arch/arm-linux.h: Rename include guard. - * arch/arm-get-next-pcs.h: Rename include guard. - * arch/amd64.h: Add include guard. - * arch/aarch64-insn.h: Rename include guard. - * arch-utils.h: Rename include guard. - * annotate.h: Add include guard. - * amd64-darwin-tdep.h: Rename include guard. - * aarch64-linux-tdep.h: Add include guard. - * aarch64-fbsd-tdep.h: Add include guard. - * aarch32-linux-nat.h: Add include guard. - -2019-02-06 Philippe Waroquiers <philippe.waroquiers@skynet.be> - - * macrotab.c (macro_define_internal): New function that - factorizes macro_define_object_internal and macro_define_function - code. - (macro_define_object_internal): Use macro_define_internal. - (macro_define_function): Likewise. + * python/py-inferior.c (build_inferior_list): Remove. + (gdbpy_ref): Use range-based for loop to iterate over inferiors. -2019-02-06 Philippe Waroquiers <philippe.waroquiers@skynet.be> +2020-01-16 Christian Biesinger <cbiesinger@google.com> - * macrocmd.c (extract_identifier): Return - a gdb::unique_xmalloc_ptr<char> instead of a char *, and update - callers. + * btrace.c (btrace_compute_ftrace_1): Fix spelling error (Unkown). + (btrace_stitch_trace): Likewise. + * charset.c (intermediate_encoding): Likewise (vaild). + * nat/linux-btrace.c (linux_read_pt): Likewise (Unkown). + * python/py-record-btrace.c (struct PyMethodDef): Likewise (occurences). + * record-btrace.c (record_btrace_print_conf): Likewise (unkown). -2019-02-06 John Baldwin <jhb@FreeBSD.org> +2020-01-16 Hannes Domani <ssbssa@yahoo.de> - * fbsd-nat.c (fbsd_fetch_cmdline): Join arguments with spaces. + * windows-tdep.c (windows_get_tlb_type): + Add rtl_user_process_parameters type. -2019-02-05 Tom Tromey <tom@tromey.com> +2020-01-16 Pedro Alves <palves@redhat.com> + Norbert Lange <nolange79@gmail.com> - * target.c (target_stack::unpush): Move assertion earlier. + PR build/24805 + * gdbsupport/gdb_proc_service.h (PS_EXPORT): New. + (ps_get_thread_area, ps_getpid, ps_lcontinue, ps_lgetfpregs) + (ps_lgetregs, ps_lsetfpregs, ps_lsetregs, ps_lstop, ps_pcontinue) + (ps_pdread, ps_pdwrite, ps_pglobal_lookup, ps_pstop, ps_ptread) + (ps_ptwrite, ps_lgetxregs, ps_lgetxregsize, ps_lsetxregs) + (ps_plog): Redeclare exported functions with default visibility. -2019-01-30 Tom Tromey <tom@tromey.com> - - PR python/23615: - * python/python.c (execute_gdb_command): Use gdbpy_allow_threads. - (gdbpy_parse_and_eval): Likewise. - * python/python-internal.h (gdbpy_allow_threads): New class. - -2019-01-28 John Baldwin <jhb@FreeBSD.org> - - * aarch64-fbsd-tdep.c (aarch64_fbsd_gregmap) - (aarch64_fbsd_fpregmap): Move earlier. - (AARCH64_MCONTEXT_REG_SIZE, AARCH64_MCONTEXT_FPREG_SIZE): Delete. - (aarch64_fbsd_sigframe_init): Use trad_frame_set_reg_regmap - instead of individual calls to trad_frame_set_reg_addr. - * arm-fbsd-tdep.c (arm_fbsd_gregmap, arm_fbsd_vfpregmap): Move - earlier. - (ARM_MCONTEXT_REG_SIZE, ARM_MCONTEXT_VFP_REG_SIZE): Delete. - (arm_fbsd_sigframe_init): Use trad_frame_set_reg_regmap - instead of individual calls to trad_frame_set_reg_addr. - -2019-01-28 Alan Hayward <alan.hayward@arm.com> - - * CONTRIBUTE: Replace contribution list with wiki link. - -2019-01-25 Tom Tromey <tom@tromey.com> - - * Makefile.in (GDB_CFLAGS): Don't add -I for common. - -2019-01-25 Tom Tromey <tom@tromey.com> - - * xtensa-linux-nat.c: Fix common/ includes. - * xml-support.h: Fix common/ includes. - * xml-support.c: Fix common/ includes. - * x86-linux-nat.c: Fix common/ includes. - * windows-nat.c: Fix common/ includes. - * varobj.h: Fix common/ includes. - * varobj.c: Fix common/ includes. - * value.c: Fix common/ includes. - * valops.c: Fix common/ includes. - * utils.c: Fix common/ includes. - * unittests/xml-utils-selftests.c: Fix common/ includes. - * unittests/utils-selftests.c: Fix common/ includes. - * unittests/unpack-selftests.c: Fix common/ includes. - * unittests/tracepoint-selftests.c: Fix common/ includes. - * unittests/style-selftests.c: Fix common/ includes. - * unittests/string_view-selftests.c: Fix common/ includes. - * unittests/scoped_restore-selftests.c: Fix common/ includes. - * unittests/scoped_mmap-selftests.c: Fix common/ includes. - * unittests/scoped_fd-selftests.c: Fix common/ includes. - * unittests/rsp-low-selftests.c: Fix common/ includes. - * unittests/parse-connection-spec-selftests.c: Fix common/ - includes. - * unittests/optional-selftests.c: Fix common/ includes. - * unittests/offset-type-selftests.c: Fix common/ includes. - * unittests/observable-selftests.c: Fix common/ includes. - * unittests/mkdir-recursive-selftests.c: Fix common/ includes. - * unittests/memrange-selftests.c: Fix common/ includes. - * unittests/memory-map-selftests.c: Fix common/ includes. - * unittests/lookup_name_info-selftests.c: Fix common/ includes. - * unittests/function-view-selftests.c: Fix common/ includes. - * unittests/environ-selftests.c: Fix common/ includes. - * unittests/copy_bitwise-selftests.c: Fix common/ includes. - * unittests/common-utils-selftests.c: Fix common/ includes. - * unittests/cli-utils-selftests.c: Fix common/ includes. - * unittests/array-view-selftests.c: Fix common/ includes. - * ui-file.c: Fix common/ includes. - * tui/tui-io.c: Fix common/ includes. - * tracepoint.h: Fix common/ includes. - * tracepoint.c: Fix common/ includes. - * tracefile-tfile.c: Fix common/ includes. - * top.h: Fix common/ includes. - * top.c: Fix common/ includes. - * thread.c: Fix common/ includes. - * target/waitstatus.h: Fix common/ includes. - * target/waitstatus.c: Fix common/ includes. - * target.h: Fix common/ includes. - * target.c: Fix common/ includes. - * target-memory.c: Fix common/ includes. - * target-descriptions.c: Fix common/ includes. - * symtab.h: Fix common/ includes. - * symfile.c: Fix common/ includes. - * stap-probe.c: Fix common/ includes. - * spu-linux-nat.c: Fix common/ includes. - * sparc-nat.c: Fix common/ includes. - * source.c: Fix common/ includes. - * solib.c: Fix common/ includes. - * solib-target.c: Fix common/ includes. - * ser-unix.c: Fix common/ includes. - * ser-tcp.c: Fix common/ includes. - * ser-pipe.c: Fix common/ includes. - * ser-base.c: Fix common/ includes. - * selftest-arch.c: Fix common/ includes. - * s12z-tdep.c: Fix common/ includes. - * rust-exp.y: Fix common/ includes. - * rs6000-aix-tdep.c: Fix common/ includes. - * riscv-tdep.c: Fix common/ includes. - * remote.c: Fix common/ includes. - * remote-notif.h: Fix common/ includes. - * remote-fileio.h: Fix common/ includes. - * remote-fileio.c: Fix common/ includes. - * regcache.h: Fix common/ includes. - * regcache.c: Fix common/ includes. - * record-btrace.c: Fix common/ includes. - * python/python.c: Fix common/ includes. - * python/py-type.c: Fix common/ includes. - * python/py-inferior.c: Fix common/ includes. - * progspace.h: Fix common/ includes. - * producer.c: Fix common/ includes. - * procfs.c: Fix common/ includes. - * proc-api.c: Fix common/ includes. - * printcmd.c: Fix common/ includes. - * ppc-linux-nat.c: Fix common/ includes. - * parser-defs.h: Fix common/ includes. - * osdata.c: Fix common/ includes. - * obsd-nat.c: Fix common/ includes. - * nat/x86-linux.c: Fix common/ includes. - * nat/x86-linux-dregs.c: Fix common/ includes. - * nat/x86-dregs.h: Fix common/ includes. - * nat/x86-dregs.c: Fix common/ includes. - * nat/ppc-linux.c: Fix common/ includes. - * nat/mips-linux-watch.h: Fix common/ includes. - * nat/mips-linux-watch.c: Fix common/ includes. - * nat/linux-waitpid.c: Fix common/ includes. - * nat/linux-ptrace.h: Fix common/ includes. - * nat/linux-ptrace.c: Fix common/ includes. - * nat/linux-procfs.c: Fix common/ includes. - * nat/linux-personality.c: Fix common/ includes. - * nat/linux-osdata.c: Fix common/ includes. - * nat/linux-namespaces.c: Fix common/ includes. - * nat/linux-btrace.h: Fix common/ includes. - * nat/linux-btrace.c: Fix common/ includes. - * nat/fork-inferior.c: Fix common/ includes. - * nat/amd64-linux-siginfo.c: Fix common/ includes. - * nat/aarch64-sve-linux-ptrace.c: Fix common/ includes. - * nat/aarch64-linux.c: Fix common/ includes. - * nat/aarch64-linux-hw-point.h: Fix common/ includes. - * nat/aarch64-linux-hw-point.c: Fix common/ includes. - * namespace.h: Fix common/ includes. - * mips-linux-tdep.c: Fix common/ includes. - * minsyms.c: Fix common/ includes. - * mi/mi-parse.h: Fix common/ includes. - * mi/mi-main.c: Fix common/ includes. - * mi/mi-cmd-env.c: Fix common/ includes. - * memrange.h: Fix common/ includes. - * memattr.c: Fix common/ includes. - * maint.h: Fix common/ includes. - * maint.c: Fix common/ includes. - * main.c: Fix common/ includes. - * machoread.c: Fix common/ includes. - * location.c: Fix common/ includes. - * linux-thread-db.c: Fix common/ includes. - * linux-nat.c: Fix common/ includes. - * linux-fork.c: Fix common/ includes. - * inline-frame.c: Fix common/ includes. - * infrun.c: Fix common/ includes. - * inflow.c: Fix common/ includes. - * inferior.h: Fix common/ includes. - * inferior.c: Fix common/ includes. - * infcmd.c: Fix common/ includes. - * inf-ptrace.c: Fix common/ includes. - * inf-child.c: Fix common/ includes. - * ia64-linux-nat.c: Fix common/ includes. - * i387-tdep.c: Fix common/ includes. - * i386-tdep.c: Fix common/ includes. - * i386-linux-tdep.c: Fix common/ includes. - * i386-linux-nat.c: Fix common/ includes. - * i386-go32-tdep.c: Fix common/ includes. - * i386-fbsd-tdep.c: Fix common/ includes. - * i386-fbsd-nat.c: Fix common/ includes. - * guile/scm-type.c: Fix common/ includes. - * guile/guile.c: Fix common/ includes. - * go32-nat.c: Fix common/ includes. - * gnu-nat.c: Fix common/ includes. - * gdbthread.h: Fix common/ includes. - * gdbarch-selftests.c: Fix common/ includes. - * gdb_usleep.c: Fix common/ includes. - * gdb_select.h: Fix common/ includes. - * gdb_bfd.c: Fix common/ includes. - * gcore.c: Fix common/ includes. - * fork-child.c: Fix common/ includes. - * findvar.c: Fix common/ includes. - * fbsd-nat.c: Fix common/ includes. - * event-top.c: Fix common/ includes. - * event-loop.c: Fix common/ includes. - * dwarf2read.c: Fix common/ includes. - * dwarf2loc.c: Fix common/ includes. - * dwarf2-frame.c: Fix common/ includes. - * dwarf-index-cache.c: Fix common/ includes. - * dtrace-probe.c: Fix common/ includes. - * disasm-selftests.c: Fix common/ includes. - * defs.h: Fix common/ includes. - * csky-tdep.c: Fix common/ includes. - * cp-valprint.c: Fix common/ includes. - * cp-support.h: Fix common/ includes. - * cp-support.c: Fix common/ includes. - * corelow.c: Fix common/ includes. - * completer.h: Fix common/ includes. - * completer.c: Fix common/ includes. - * compile/compile.c: Fix common/ includes. - * compile/compile-loc2c.c: Fix common/ includes. - * compile/compile-cplus-types.c: Fix common/ includes. - * compile/compile-cplus-symbols.c: Fix common/ includes. - * command.h: Fix common/ includes. - * cli/cli-dump.c: Fix common/ includes. - * cli/cli-cmds.c: Fix common/ includes. - * charset.c: Fix common/ includes. - * build-id.c: Fix common/ includes. - * btrace.h: Fix common/ includes. - * btrace.c: Fix common/ includes. - * breakpoint.h: Fix common/ includes. - * breakpoint.c: Fix common/ includes. - * ax.h: - (enum agent_op): Fix common/ includes. - * ax-general.c (struct aop_map): Fix common/ includes. - * ax-gdb.c: Fix common/ includes. - * auxv.c: Fix common/ includes. - * auto-load.c: Fix common/ includes. - * arm-tdep.c: Fix common/ includes. - * arch/riscv.c: Fix common/ includes. - * arch/ppc-linux-common.c: Fix common/ includes. - * arch/i386.c: Fix common/ includes. - * arch/arm.c: Fix common/ includes. - * arch/arm-linux.c: Fix common/ includes. - * arch/arm-get-next-pcs.c: Fix common/ includes. - * arch/amd64.c: Fix common/ includes. - * arch/aarch64.c: Fix common/ includes. - * arch/aarch64-insn.c: Fix common/ includes. - * arch-utils.c: Fix common/ includes. - * amd64-windows-tdep.c: Fix common/ includes. - * amd64-tdep.c: Fix common/ includes. - * amd64-sol2-tdep.c: Fix common/ includes. - * amd64-obsd-tdep.c: Fix common/ includes. - * amd64-nbsd-tdep.c: Fix common/ includes. - * amd64-linux-tdep.c: Fix common/ includes. - * amd64-linux-nat.c: Fix common/ includes. - * amd64-fbsd-tdep.c: Fix common/ includes. - * amd64-fbsd-nat.c: Fix common/ includes. - * amd64-dicos-tdep.c: Fix common/ includes. - * amd64-darwin-tdep.c: Fix common/ includes. - * agent.c: Fix common/ includes. - * ada-lang.h: Fix common/ includes. - * ada-lang.c: Fix common/ includes. - * aarch64-tdep.c: Fix common/ includes. - -2019-01-25 Tom Tromey <tom@tromey.com> - - * common/create-version.sh: Use common/version.h. - -2019-01-24 Pedro Alves <palves@redhat.com> - - * infrun.c (signal_stop, signal_print, signal_program) - (signal_catch, signal_pass): Now arrays instead of pointers. - (update_signals_program_target, do_target_resume) - (signal_catch_update, handle_command, _initialize_infrun): Adjust. - * linux-nat.c (linux_nat_target::pass_signals) - (linux_nat_target::create_inferior, linux_nat_target::attach): - Adjust. - * linux-nat.h (linux_nat_target::pass_signals): Adjust. - * nto-procfs.c (nto_procfs_target::pass_signals): Adjust. - * procfs.c (procfs_target::pass_signals): Adjust. - * record-full.c (record_full_target::resume): Adjust. - * remote.c (remote_target::pass_signals) - (remote_target::program_signals): Adjust. - * target-debug.h (target_debug_print_signals): Now takes a - gdb::array_view as parameter. Adjust. - * target.h (target_ops) <pass_signals, program_signals>: Replace - pointer and length parameters with gdb::array_view. - (target_pass_signals, target_program_signals): Likewise. - * target-delegates.c: Regenerate. +2020-01-16 Nitika Achra <Nitika.Achra@amd.com> -2019-01-24 Pedro Alves <palves@redhat.com> + * dwarf2loc.c (decode_debug_loclists_addresses): Handle + DW_LLE_base_addressx, DW_LLE_startx_length, DW_LLE_start_length. - * common/forward-scope-exit.h - (forward_scope_exit::forward_scope_exit): Pass arguments to - m_bind_function directly, instead of creating a std::bind and - copying that. +2020-01-15 Simon Marchi <simon.marchi@efficios.com> -2019-01-24 Alan Hayward <alan.hayward@arm.com> + * infcmd.c (post_create_inferior): Use get_thread_regcache + instead of get_current_regcache. - * aarch64-tdep.c (aapcs_is_vfp_call_or_return_candidate_1): Check - for static members. - (pass_in_v_vfp_candidate): Likewise. +2020-01-14 Tom Tromey <tom@tromey.com> -2019-01-23 Tom Tromey <tom@tromey.com> - Pedro Alves <palves@redhat.com> + PR symtab/12535: + * python/python.c (gdbpy_decode_line): Treat empty string the same + as no argument. - * regcache.c (class regcache_invalidator): Remove. - (regcache::raw_write): Use make_scope_exit. +2020-01-14 Tom Tromey <tom@tromey.com> -2019-01-23 Tom Tromey <tom@tromey.com> + * Makefile.in (CLIBS): Remove second use of $(LIBIBERTY). - * ui-out.h (class ui_out_emit_type): Update comment. +2020-01-14 Tom Tromey <tom@tromey.com> -2019-01-23 Tom Tromey <tom@tromey.com> + * nat/linux-btrace.c: Don't include <config.h>. + * nat/linux-ptrace.c: Don't include <config.h>. + * nat/x86-linux-dregs.c: Don't include <config.h>. - * infrun.c (fetch_inferior_event): Update comment. +2020-01-14 Tom Tromey <tom@tromey.com> -2019-01-23 Tom Tromey <tom@tromey.com> - Pedro Alves <palves@redhat.com> + * configure: Rebuild. + * configure.ac: Move many checks to ../gdbsupport/common.m4. - * infrun.c (reinstall_readline_callback_handler_cleanup): Remove - parameter. - (fetch_inferior_event): Use SCOPE_EXIT. +2020-01-14 Tom Tromey <tom@tromey.com> + * nat/x86-linux-dregs.c: Include configh.h. + * nat/linux-ptrace.c: Include configh.h. + * nat/linux-btrace.c: Include configh.h. + * defs.h: Include config.h, bfd.h. + * configure.ac: Don't source common.host. + (CONFIG_OBS, CONFIG_SRCS): Remove gdbsupport files. + * configure: Rebuild. + * acinclude.m4: Update path. + * Makefile.in (SUPPORT, LIBSUPPORT, INCSUPPORT): New variables. + (CONFIG_SRC_SUBDIR): Remove gdbsupport. + (INTERNAL_CFLAGS_BASE): Add INCSUPPORT. + (CLIBS): Add LIBSUPPORT. + (CDEPS): Likewise. + (COMMON_SFILES): Remove gdbsupport files. + (HFILES_NO_SRCDIR): Likewise. + (stamp-version): Update path to create-version.sh. + (ALLDEPFILES): Remove gdbsupport files. + +2020-01-14 Tom Tromey <tom@tromey.com> + + * gdbsupport/common.m4 (GDB_AC_COMMON): Define WIN32APILIBS and + USE_WIN32API when needed. + * configure.ac (USE_WIN32API): Don't define. + (WIN32LIBS): Use WIN32APILIBS. + * configure: Rebuild. -2019-01-23 Tom Tromey <tom@tromey.com> - Pedro Alves <palves@redhat.com> +2020-01-14 Tom Tromey <tom@tromey.com> - * infrun.c (disable_thread_events): Delete. - (stop_all_threads): Use SCOPE_EXIT. + * configure: Rebuild. + * gdbsupport/common.m4 (GDB_AC_COMMON): Fix indentation. -2019-01-23 Tom Tromey <tom@tromey.com> - Pedro Alves <palves@redhat.com> +2020-01-14 Bernd Edlinger <bernd.edlinger@hotmail.de> - * symfile.c: Include forward-scope-exit.h. - (clear_symtab_users_cleanup): Replace forward declaration with - a FORWARD_SCOPE_EXIT. - (syms_from_objfile_1): Use the forward_scope_exit and - gdb::optional instead of cleanup_function. - (reread_symbols): Use the forward_scope_exit instead of - cleanup_function. - (clear_symtab_users_cleanup): Remove function. + * skip.c (skip_function_command): Make skip w/o arguments use the + name of the inlined function if pc is inside any inlined function. -2019-01-23 Tom Tromey <tom@tromey.com> - Pedro Alves <palves@redhat.com> +2020-01-14 Luis Machado <luis.machado@linaro.org> - * linux-nat.c: Include scope-exit.h. - (cleanup_target_stop): Remove. - (linux_nat_target::static_tracepoint_markers_by_strid): Use - SCOPE_EXIT. + * inf-ptrace.c (inf_ptrace_target::resume): Update comments. + * infrun.c (resume_1): Likewise. + (handle_inferior_event): Remove stale comment. + * linux-nat.c (linux_nat_target::resume): Update comments. + (save_stop_reason): Likewise. + (linux_nat_filter_event): Likewise. + * linux-nat.h (struct lwp_info) <stop_pc>, <stop_reason>: Likewise. + +2020-01-13 Andrew Burgess <andrew.burgess@embecosm.com> + + * elfread.c (record_minimal_symbol): Set section index to 0 for + non-allocatable sections. + + +2020-01-13 Ali Tamur <tamur@google.com> + + * dwarf2read.c (dwarf2_debug_sections): Add debug_str_offsets sections. + (dwarf2_cu): Add str_offsets_base field. Change the type of addr_base + to gdb::optional. Update comments. + (dwo_file): Update comments. + (read_attribute): Update API to take an additional out parameter, + need_reprocess. This is used to mark attributes that need other + attributes (e.g. str_offsets_base) for correct computation which may not + have been read yet. + (read_attribute_reprocess): New function declaration. + (read_addr_index): Likewise. + (read_dwo_str_index): Likewise. + (read_stub_str_index): Likewise. + (dwarf2_per_objfile::locate_sections): Handle debug_str_offsets section. + (lookup_addr_base): New function definition. + (lookup_ranges_base): Likewise. + (read_cutu_die_from_dwo): Use the new functions: lookup_addr_base, + lookup_ranges_base. + (init_cutu_and_read_dies): Update comments. + (init_cutu_and_read_dies_no_follow): Change API to take parent compile + unit. This is used to inherit parent's str_offsets_base and addr_base. + Update comments. + (init_cutu_and_read_dies_simple): Reflect API changes. + (skip_one_die): Reflect API changes. Handle DW_FORM_rnglistx. + (create_cus_hash_table): Change API to take parent compile unit. + Reflect API changes. + (open_and_init_dwo_file): Reflect API changes. + (dwarf2_get_pc_bounds): Update comments. + (dwarf2_record_block_ranges): Likewise. + (read_full_die_1): Change implementation to reprocess attributes that + need str_offsets_base and addr_base. + (partial_die_info::read): Likewise. + (read_attribute_reprocess): New function definition. + (read_attribute_value): Change API to take an additional out parameter, + need_reprocess. Handle DW_FORM_rnglistx. No longer trigger an error + when a non-dwo compile unit has index based attributes. + (read_attribute): Reflect API changes. + (read_addr_index_1): Reflect API changes. Update comments. + (dwarf2_read_addr_index_data): Reflect API changes. + (dwarf2_read_addr_index): Likewise. + (read_str_index): Change API and implementation. This becomes a helper + to be used by the new string index related methods. Update error + message and comments. + (read_dwo_str_index): New function definition. + (read_stub_str_index): Likewise. + * dwarf2read.h (dwarf2_per_objfile): Add str_offsets field. + * symfile.h (dwarf2_debug_sections): Likewise. + * xcoffread.c (dwarf2_debug_sections): Likewise. + +2020-01-13 Simon Marchi <simon.marchi@efficios.com> + + * gdbcore.h (struct core_fns) <core_read_registers>: Change + core_reg_sect type to gdb_byte *. + * arm-nbsd-nat.c (fetch_elfcore_registers): Likewise. + * cris-tdep.c (fetch_core_registers): Likewise. + * corelow.c (core_target::get_core_register_section): Change + type of `contents` to gdb::byte_vector. + +2020-01-13 Andrew Burgess <andrew.burgess@embecosm.com> + + * tui/tui-wingeneral.c (box_win): Position the title in the center + of the border. + +2020-01-13 Simon Marchi <simon.marchi@polymtl.ca> + + * corelow.c (core_target::get_core_register_section): Use + std::vector instead of alloca. + +2020-01-13 Simon Marchi <simon.marchi@efficios.com> + + * warning.m4: Add -Wmissing-declarations to build_warnings. + * configure: Re-generate. + +2020-01-13 Simon Marchi <simon.marchi@efficios.com> + + * python/python.c (init__gdb_module): Add declaration. + +2020-01-13 Simon Marchi <simon.marchi@efficios.com> + + * aarch64-fbsd-nat.c (_initialize_aarch64_fbsd_nat): Add declaration. + * aarch64-fbsd-tdep.c (_initialize_aarch64_fbsd_tdep): Add declaration. + * aarch64-linux-nat.c (_initialize_aarch64_linux_nat): Add declaration. + * aarch64-linux-tdep.c (_initialize_aarch64_linux_tdep): Add declaration. + * aarch64-newlib-tdep.c (_initialize_aarch64_newlib_tdep): Add declaration. + * aarch64-tdep.c (_initialize_aarch64_tdep): Add declaration. + * ada-exp.y (_initialize_ada_exp): Add declaration. + * ada-lang.c (_initialize_ada_language): Add declaration. + * ada-tasks.c (_initialize_tasks): Add declaration. + * agent.c (_initialize_agent): Add declaration. + * aix-thread.c (_initialize_aix_thread): Add declaration. + * alpha-bsd-nat.c (_initialize_alphabsd_nat): Add declaration. + * alpha-linux-nat.c (_initialize_alpha_linux_nat): Add declaration. + * alpha-linux-tdep.c (_initialize_alpha_linux_tdep): Add declaration. + * alpha-nbsd-tdep.c (_initialize_alphanbsd_tdep): Add declaration. + * alpha-obsd-tdep.c (_initialize_alphaobsd_tdep): Add declaration. + * alpha-tdep.c (_initialize_alpha_tdep): Add declaration. + * amd64-darwin-tdep.c (_initialize_amd64_darwin_tdep): Add declaration. + * amd64-dicos-tdep.c (_initialize_amd64_dicos_tdep): Add declaration. + * amd64-fbsd-nat.c (_initialize_amd64fbsd_nat): Add declaration. + * amd64-fbsd-tdep.c (_initialize_amd64fbsd_tdep): Add declaration. + * amd64-linux-nat.c (_initialize_amd64_linux_nat): Add declaration. + * amd64-linux-tdep.c (_initialize_amd64_linux_tdep): Add declaration. + * amd64-nbsd-nat.c (_initialize_amd64nbsd_nat): Add declaration. + * amd64-nbsd-tdep.c (_initialize_amd64nbsd_tdep): Add declaration. + * amd64-obsd-nat.c (_initialize_amd64obsd_nat): Add declaration. + * amd64-obsd-tdep.c (_initialize_amd64obsd_tdep): Add declaration. + * amd64-sol2-tdep.c (_initialize_amd64_sol2_tdep): Add declaration. + * amd64-tdep.c (_initialize_amd64_tdep): Add declaration. + * amd64-windows-nat.c (_initialize_amd64_windows_nat): Add declaration. + * amd64-windows-tdep.c (_initialize_amd64_windows_tdep): Add declaration. + * annotate.c (_initialize_annotate): Add declaration. + * arc-newlib-tdep.c (_initialize_arc_newlib_tdep): Add declaration. + * arc-tdep.c (_initialize_arc_tdep): Add declaration. + * arch-utils.c (_initialize_gdbarch_utils): Add declaration. + * arm-fbsd-nat.c (_initialize_arm_fbsd_nat): Add declaration. + * arm-fbsd-tdep.c (_initialize_arm_fbsd_tdep): Add declaration. + * arm-linux-nat.c (_initialize_arm_linux_nat): Add declaration. + * arm-linux-tdep.c (_initialize_arm_linux_tdep): Add declaration. + * arm-nbsd-nat.c (_initialize_arm_netbsd_nat): Add declaration. + * arm-nbsd-tdep.c (_initialize_arm_netbsd_tdep): Add declaration. + * arm-obsd-tdep.c (_initialize_armobsd_tdep): Add declaration. + * arm-pikeos-tdep.c (_initialize_arm_pikeos_tdep): Add declaration. + * arm-symbian-tdep.c (_initialize_arm_symbian_tdep): Add declaration. + * arm-tdep.c (_initialize_arm_tdep): Add declaration. + * arm-wince-tdep.c (_initialize_arm_wince_tdep): Add declaration. + * auto-load.c (_initialize_auto_load): Add declaration. + * auxv.c (_initialize_auxv): Add declaration. + * avr-tdep.c (_initialize_avr_tdep): Add declaration. + * ax-gdb.c (_initialize_ax_gdb): Add declaration. + * bfin-linux-tdep.c (_initialize_bfin_linux_tdep): Add declaration. + * bfin-tdep.c (_initialize_bfin_tdep): Add declaration. + * break-catch-sig.c (_initialize_break_catch_sig): Add declaration. + * break-catch-syscall.c (_initialize_break_catch_syscall): Add declaration. + * break-catch-throw.c (_initialize_break_catch_throw): Add declaration. + * breakpoint.c (_initialize_breakpoint): Add declaration. + * bsd-uthread.c (_initialize_bsd_uthread): Add declaration. + * btrace.c (_initialize_btrace): Add declaration. + * charset.c (_initialize_charset): Add declaration. + * cli/cli-cmds.c (_initialize_cli_cmds): Add declaration. + * cli/cli-dump.c (_initialize_cli_dump): Add declaration. + * cli/cli-interp.c (_initialize_cli_interp): Add declaration. + * cli/cli-logging.c (_initialize_cli_logging): Add declaration. + * cli/cli-script.c (_initialize_cli_script): Add declaration. + * cli/cli-style.c (_initialize_cli_style): Add declaration. + * coff-pe-read.c (_initialize_coff_pe_read): Add declaration. + * coffread.c (_initialize_coffread): Add declaration. + * compile/compile-cplus-types.c (_initialize_compile_cplus_types): Add declaration. + * compile/compile.c (_initialize_compile): Add declaration. + * complaints.c (_initialize_complaints): Add declaration. + * completer.c (_initialize_completer): Add declaration. + * copying.c (_initialize_copying): Add declaration. + * corefile.c (_initialize_core): Add declaration. + * corelow.c (_initialize_corelow): Add declaration. + * cp-abi.c (_initialize_cp_abi): Add declaration. + * cp-namespace.c (_initialize_cp_namespace): Add declaration. + * cp-support.c (_initialize_cp_support): Add declaration. + * cp-valprint.c (_initialize_cp_valprint): Add declaration. + * cris-linux-tdep.c (_initialize_cris_linux_tdep): Add declaration. + * cris-tdep.c (_initialize_cris_tdep): Add declaration. + * csky-linux-tdep.c (_initialize_csky_linux_tdep): Add declaration. + * csky-tdep.c (_initialize_csky_tdep): Add declaration. + * ctfread.c (_initialize_ctfread): Add declaration. + * d-lang.c (_initialize_d_language): Add declaration. + * darwin-nat-info.c (_initialize_darwin_info_commands): Add declaration. + * darwin-nat.c (_initialize_darwin_nat): Add declaration. + * dbxread.c (_initialize_dbxread): Add declaration. + * dcache.c (_initialize_dcache): Add declaration. + * disasm-selftests.c (_initialize_disasm_selftests): Add declaration. + * disasm.c (_initialize_disasm): Add declaration. + * dtrace-probe.c (_initialize_dtrace_probe): Add declaration. + * dummy-frame.c (_initialize_dummy_frame): Add declaration. + * dwarf-index-cache.c (_initialize_index_cache): Add declaration. + * dwarf-index-write.c (_initialize_dwarf_index_write): Add declaration. + * dwarf2-frame-tailcall.c (_initialize_tailcall_frame): Add declaration. + * dwarf2-frame.c (_initialize_dwarf2_frame): Add declaration. + * dwarf2expr.c (_initialize_dwarf2expr): Add declaration. + * dwarf2loc.c (_initialize_dwarf2loc): Add declaration. + * dwarf2read.c (_initialize_dwarf2_read): Add declaration. + * elfread.c (_initialize_elfread): Add declaration. + * exec.c (_initialize_exec): Add declaration. + * extension.c (_initialize_extension): Add declaration. + * f-lang.c (_initialize_f_language): Add declaration. + * f-valprint.c (_initialize_f_valprint): Add declaration. + * fbsd-nat.c (_initialize_fbsd_nat): Add declaration. + * fbsd-tdep.c (_initialize_fbsd_tdep): Add declaration. + * filesystem.c (_initialize_filesystem): Add declaration. + * findcmd.c (_initialize_mem_search): Add declaration. + * findvar.c (_initialize_findvar): Add declaration. + * fork-child.c (_initialize_fork_child): Add declaration. + * frame-base.c (_initialize_frame_base): Add declaration. + * frame-unwind.c (_initialize_frame_unwind): Add declaration. + * frame.c (_initialize_frame): Add declaration. + * frv-linux-tdep.c (_initialize_frv_linux_tdep): Add declaration. + * frv-tdep.c (_initialize_frv_tdep): Add declaration. + * ft32-tdep.c (_initialize_ft32_tdep): Add declaration. + * gcore.c (_initialize_gcore): Add declaration. + * gdb-demangle.c (_initialize_gdb_demangle): Add declaration. + * gdb_bfd.c (_initialize_gdb_bfd): Add declaration. + * gdbarch-selftests.c (_initialize_gdbarch_selftests): Add declaration. + * gdbarch.c (_initialize_gdbarch): Add declaration. + * gdbtypes.c (_initialize_gdbtypes): Add declaration. + * gnu-nat.c (_initialize_gnu_nat): Add declaration. + * gnu-v2-abi.c (_initialize_gnu_v2_abi): Add declaration. + * gnu-v3-abi.c (_initialize_gnu_v3_abi): Add declaration. + * go-lang.c (_initialize_go_language): Add declaration. + * go32-nat.c (_initialize_go32_nat): Add declaration. + * guile/guile.c (_initialize_guile): Add declaration. + * h8300-tdep.c (_initialize_h8300_tdep): Add declaration. + * hppa-linux-nat.c (_initialize_hppa_linux_nat): Add declaration. + * hppa-linux-tdep.c (_initialize_hppa_linux_tdep): Add declaration. + * hppa-nbsd-nat.c (_initialize_hppanbsd_nat): Add declaration. + * hppa-nbsd-tdep.c (_initialize_hppanbsd_tdep): Add declaration. + * hppa-obsd-nat.c (_initialize_hppaobsd_nat): Add declaration. + * hppa-obsd-tdep.c (_initialize_hppabsd_tdep): Add declaration. + * hppa-tdep.c (_initialize_hppa_tdep): Add declaration. + * i386-bsd-nat.c (_initialize_i386bsd_nat): Add declaration. + * i386-cygwin-tdep.c (_initialize_i386_cygwin_tdep): Add declaration. + * i386-darwin-nat.c (_initialize_i386_darwin_nat): Add declaration. + * i386-darwin-tdep.c (_initialize_i386_darwin_tdep): Add declaration. + * i386-dicos-tdep.c (_initialize_i386_dicos_tdep): Add declaration. + * i386-fbsd-nat.c (_initialize_i386fbsd_nat): Add declaration. + * i386-fbsd-tdep.c (_initialize_i386fbsd_tdep): Add declaration. + * i386-gnu-nat.c (_initialize_i386gnu_nat): Add declaration. + * i386-gnu-tdep.c (_initialize_i386gnu_tdep): Add declaration. + * i386-go32-tdep.c (_initialize_i386_go32_tdep): Add declaration. + * i386-linux-nat.c (_initialize_i386_linux_nat): Add declaration. + * i386-linux-tdep.c (_initialize_i386_linux_tdep): Add declaration. + * i386-nbsd-nat.c (_initialize_i386nbsd_nat): Add declaration. + * i386-nbsd-tdep.c (_initialize_i386nbsd_tdep): Add declaration. + * i386-nto-tdep.c (_initialize_i386nto_tdep): Add declaration. + * i386-obsd-nat.c (_initialize_i386obsd_nat): Add declaration. + * i386-obsd-tdep.c (_initialize_i386obsd_tdep): Add declaration. + * i386-sol2-nat.c (_initialize_amd64_sol2_nat): Add declaration. + * i386-sol2-tdep.c (_initialize_i386_sol2_tdep): Add declaration. + * i386-tdep.c (_initialize_i386_tdep): Add declaration. + * i386-windows-nat.c (_initialize_i386_windows_nat): Add declaration. + * ia64-libunwind-tdep.c (_initialize_libunwind_frame): Add declaration. + * ia64-linux-nat.c (_initialize_ia64_linux_nat): Add declaration. + * ia64-linux-tdep.c (_initialize_ia64_linux_tdep): Add declaration. + * ia64-tdep.c (_initialize_ia64_tdep): Add declaration. + * ia64-vms-tdep.c (_initialize_ia64_vms_tdep): Add declaration. + * infcall.c (_initialize_infcall): Add declaration. + * infcmd.c (_initialize_infcmd): Add declaration. + * inflow.c (_initialize_inflow): Add declaration. + * infrun.c (_initialize_infrun): Add declaration. + * interps.c (_initialize_interpreter): Add declaration. + * iq2000-tdep.c (_initialize_iq2000_tdep): Add declaration. + * jit.c (_initialize_jit): Add declaration. + * language.c (_initialize_language): Add declaration. + * linux-fork.c (_initialize_linux_fork): Add declaration. + * linux-nat.c (_initialize_linux_nat): Add declaration. + * linux-tdep.c (_initialize_linux_tdep): Add declaration. + * linux-thread-db.c (_initialize_thread_db): Add declaration. + * lm32-tdep.c (_initialize_lm32_tdep): Add declaration. + * m2-lang.c (_initialize_m2_language): Add declaration. + * m32c-tdep.c (_initialize_m32c_tdep): Add declaration. + * m32r-linux-nat.c (_initialize_m32r_linux_nat): Add declaration. + * m32r-linux-tdep.c (_initialize_m32r_linux_tdep): Add declaration. + * m32r-tdep.c (_initialize_m32r_tdep): Add declaration. + * m68hc11-tdep.c (_initialize_m68hc11_tdep): Add declaration. + * m68k-bsd-nat.c (_initialize_m68kbsd_nat): Add declaration. + * m68k-bsd-tdep.c (_initialize_m68kbsd_tdep): Add declaration. + * m68k-linux-nat.c (_initialize_m68k_linux_nat): Add declaration. + * m68k-linux-tdep.c (_initialize_m68k_linux_tdep): Add declaration. + * m68k-tdep.c (_initialize_m68k_tdep): Add declaration. + * machoread.c (_initialize_machoread): Add declaration. + * macrocmd.c (_initialize_macrocmd): Add declaration. + * macroscope.c (_initialize_macroscope): Add declaration. + * maint-test-options.c (_initialize_maint_test_options): Add declaration. + * maint-test-settings.c (_initialize_maint_test_settings): Add declaration. + * maint.c (_initialize_maint_cmds): Add declaration. + * mdebugread.c (_initialize_mdebugread): Add declaration. + * memattr.c (_initialize_mem): Add declaration. + * mep-tdep.c (_initialize_mep_tdep): Add declaration. + * mi/mi-cmd-env.c (_initialize_mi_cmd_env): Add declaration. + * mi/mi-cmds.c (_initialize_mi_cmds): Add declaration. + * mi/mi-interp.c (_initialize_mi_interp): Add declaration. + * mi/mi-main.c (_initialize_mi_main): Add declaration. + * microblaze-linux-tdep.c (_initialize_microblaze_linux_tdep): Add declaration. + * microblaze-tdep.c (_initialize_microblaze_tdep): Add declaration. + * mips-fbsd-nat.c (_initialize_mips_fbsd_nat): Add declaration. + * mips-fbsd-tdep.c (_initialize_mips_fbsd_tdep): Add declaration. + * mips-linux-nat.c (_initialize_mips_linux_nat): Add declaration. + * mips-linux-tdep.c (_initialize_mips_linux_tdep): Add declaration. + * mips-nbsd-nat.c (_initialize_mipsnbsd_nat): Add declaration. + * mips-nbsd-tdep.c (_initialize_mipsnbsd_tdep): Add declaration. + * mips-sde-tdep.c (_initialize_mips_sde_tdep): Add declaration. + * mips-tdep.c (_initialize_mips_tdep): Add declaration. + * mips64-obsd-nat.c (_initialize_mips64obsd_nat): Add declaration. + * mips64-obsd-tdep.c (_initialize_mips64obsd_tdep): Add declaration. + * mipsread.c (_initialize_mipsread): Add declaration. + * mn10300-linux-tdep.c (_initialize_mn10300_linux_tdep): Add declaration. + * mn10300-tdep.c (_initialize_mn10300_tdep): Add declaration. + * moxie-tdep.c (_initialize_moxie_tdep): Add declaration. + * msp430-tdep.c (_initialize_msp430_tdep): Add declaration. + * nds32-tdep.c (_initialize_nds32_tdep): Add declaration. + * nios2-linux-tdep.c (_initialize_nios2_linux_tdep): Add declaration. + * nios2-tdep.c (_initialize_nios2_tdep): Add declaration. + * nto-procfs.c (_initialize_procfs): Add declaration. + * objc-lang.c (_initialize_objc_language): Add declaration. + * observable.c (_initialize_observer): Add declaration. + * opencl-lang.c (_initialize_opencl_language): Add declaration. + * or1k-linux-tdep.c (_initialize_or1k_linux_tdep): Add declaration. + * or1k-tdep.c (_initialize_or1k_tdep): Add declaration. + * osabi.c (_initialize_gdb_osabi): Add declaration. + * osdata.c (_initialize_osdata): Add declaration. + * p-valprint.c (_initialize_pascal_valprint): Add declaration. + * parse.c (_initialize_parse): Add declaration. + * ppc-fbsd-nat.c (_initialize_ppcfbsd_nat): Add declaration. + * ppc-fbsd-tdep.c (_initialize_ppcfbsd_tdep): Add declaration. + * ppc-linux-nat.c (_initialize_ppc_linux_nat): Add declaration. + * ppc-linux-tdep.c (_initialize_ppc_linux_tdep): Add declaration. + * ppc-nbsd-nat.c (_initialize_ppcnbsd_nat): Add declaration. + * ppc-nbsd-tdep.c (_initialize_ppcnbsd_tdep): Add declaration. + * ppc-obsd-nat.c (_initialize_ppcobsd_nat): Add declaration. + * ppc-obsd-tdep.c (_initialize_ppcobsd_tdep): Add declaration. + * printcmd.c (_initialize_printcmd): Add declaration. + * probe.c (_initialize_probe): Add declaration. + * proc-api.c (_initialize_proc_api): Add declaration. + * proc-events.c (_initialize_proc_events): Add declaration. + * proc-service.c (_initialize_proc_service): Add declaration. + * procfs.c (_initialize_procfs): Add declaration. + * producer.c (_initialize_producer): Add declaration. + * psymtab.c (_initialize_psymtab): Add declaration. + * python/python.c (_initialize_python): Add declaration. + * ravenscar-thread.c (_initialize_ravenscar): Add declaration. + * record-btrace.c (_initialize_record_btrace): Add declaration. + * record-full.c (_initialize_record_full): Add declaration. + * record.c (_initialize_record): Add declaration. + * regcache-dump.c (_initialize_regcache_dump): Add declaration. + * regcache.c (_initialize_regcache): Add declaration. + * reggroups.c (_initialize_reggroup): Add declaration. + * remote-notif.c (_initialize_notif): Add declaration. + * remote-sim.c (_initialize_remote_sim): Add declaration. + * remote.c (_initialize_remote): Add declaration. + * reverse.c (_initialize_reverse): Add declaration. + * riscv-fbsd-nat.c (_initialize_riscv_fbsd_nat): Add declaration. + * riscv-fbsd-tdep.c (_initialize_riscv_fbsd_tdep): Add declaration. + * riscv-linux-nat.c (_initialize_riscv_linux_nat): Add declaration. + * riscv-linux-tdep.c (_initialize_riscv_linux_tdep): Add declaration. + * riscv-tdep.c (_initialize_riscv_tdep): Add declaration. + * rl78-tdep.c (_initialize_rl78_tdep): Add declaration. + * rs6000-aix-tdep.c (_initialize_rs6000_aix_tdep): Add declaration. + * rs6000-lynx178-tdep.c (_initialize_rs6000_lynx178_tdep): + Add declaration. + * rs6000-nat.c (_initialize_rs6000_nat): Add declaration. + * rs6000-tdep.c (_initialize_rs6000_tdep): Add declaration. + * run-on-main-thread.c (_initialize_run_on_main_thread): Add declaration. + * rust-exp.y (_initialize_rust_exp): Add declaration. + * rx-tdep.c (_initialize_rx_tdep): Add declaration. + * s12z-tdep.c (_initialize_s12z_tdep): Add declaration. + * s390-linux-nat.c (_initialize_s390_nat): Add declaration. + * s390-linux-tdep.c (_initialize_s390_linux_tdep): Add declaration. + * s390-tdep.c (_initialize_s390_tdep): Add declaration. + * score-tdep.c (_initialize_score_tdep): Add declaration. + * ser-go32.c (_initialize_ser_dos): Add declaration. + * ser-mingw.c (_initialize_ser_windows): Add declaration. + * ser-pipe.c (_initialize_ser_pipe): Add declaration. + * ser-tcp.c (_initialize_ser_tcp): Add declaration. + * ser-uds.c (_initialize_ser_socket): Add declaration. + * ser-unix.c (_initialize_ser_hardwire): Add declaration. + * serial.c (_initialize_serial): Add declaration. + * sh-linux-tdep.c (_initialize_sh_linux_tdep): Add declaration. + * sh-nbsd-nat.c (_initialize_shnbsd_nat): Add declaration. + * sh-nbsd-tdep.c (_initialize_shnbsd_tdep): Add declaration. + * sh-tdep.c (_initialize_sh_tdep): Add declaration. + * skip.c (_initialize_step_skip): Add declaration. + * sol-thread.c (_initialize_sol_thread): Add declaration. + * solib-aix.c (_initialize_solib_aix): Add declaration. + * solib-darwin.c (_initialize_darwin_solib): Add declaration. + * solib-dsbt.c (_initialize_dsbt_solib): Add declaration. + * solib-frv.c (_initialize_frv_solib): Add declaration. + * solib-svr4.c (_initialize_svr4_solib): Add declaration. + * solib-target.c (_initialize_solib_target): Add declaration. + * solib.c (_initialize_solib): Add declaration. + * source-cache.c (_initialize_source_cache): Add declaration. + * source.c (_initialize_source): Add declaration. + * sparc-linux-nat.c (_initialize_sparc_linux_nat): Add declaration. + * sparc-linux-tdep.c (_initialize_sparc_linux_tdep): Add declaration. + * sparc-nat.c (_initialize_sparc_nat): Add declaration. + * sparc-nbsd-nat.c (_initialize_sparcnbsd_nat): Add declaration. + * sparc-nbsd-tdep.c (_initialize_sparcnbsd_tdep): Add declaration. + * sparc-obsd-tdep.c (_initialize_sparc32obsd_tdep): Add declaration. + * sparc-sol2-tdep.c (_initialize_sparc_sol2_tdep): Add declaration. + * sparc-tdep.c (_initialize_sparc_tdep): Add declaration. + * sparc64-fbsd-nat.c (_initialize_sparc64fbsd_nat): Add declaration. + * sparc64-fbsd-tdep.c (_initialize_sparc64fbsd_tdep): Add declaration. + * sparc64-linux-nat.c (_initialize_sparc64_linux_nat): Add declaration. + * sparc64-linux-tdep.c (_initialize_sparc64_linux_tdep): Add declaration. + * sparc64-nat.c (_initialize_sparc64_nat): Add declaration. + * sparc64-nbsd-nat.c (_initialize_sparc64nbsd_nat): Add declaration. + * sparc64-nbsd-tdep.c (_initialize_sparc64nbsd_tdep): Add declaration. + * sparc64-obsd-nat.c (_initialize_sparc64obsd_nat): Add declaration. + * sparc64-obsd-tdep.c (_initialize_sparc64obsd_tdep): Add declaration. + * sparc64-sol2-tdep.c (_initialize_sparc64_sol2_tdep): Add declaration. + * sparc64-tdep.c (_initialize_sparc64_adi_tdep): Add declaration. + * stabsread.c (_initialize_stabsread): Add declaration. + * stack.c (_initialize_stack): Add declaration. + * stap-probe.c (_initialize_stap_probe): Add declaration. + * std-regs.c (_initialize_frame_reg): Add declaration. + * symfile-debug.c (_initialize_symfile_debug): Add declaration. + * symfile-mem.c (_initialize_symfile_mem): Add declaration. + * symfile.c (_initialize_symfile): Add declaration. + * symmisc.c (_initialize_symmisc): Add declaration. + * symtab.c (_initialize_symtab): Add declaration. + * target.c (_initialize_target): Add declaration. + * target-connection.c (_initialize_target_connection): Add + declaration. + * target-dcache.c (_initialize_target_dcache): Add declaration. + * target-descriptions.c (_initialize_target_descriptions): Add declaration. + * thread.c (_initialize_thread): Add declaration. + * tic6x-linux-tdep.c (_initialize_tic6x_linux_tdep): Add declaration. + * tic6x-tdep.c (_initialize_tic6x_tdep): Add declaration. + * tilegx-linux-nat.c (_initialize_tile_linux_nat): Add declaration. + * tilegx-linux-tdep.c (_initialize_tilegx_linux_tdep): Add declaration. + * tilegx-tdep.c (_initialize_tilegx_tdep): Add declaration. + * tracectf.c (_initialize_ctf): Add declaration. + * tracefile-tfile.c (_initialize_tracefile_tfile): Add declaration. + * tracefile.c (_initialize_tracefile): Add declaration. + * tracepoint.c (_initialize_tracepoint): Add declaration. + * tui/tui-hooks.c (_initialize_tui_hooks): Add declaration. + * tui/tui-interp.c (_initialize_tui_interp): Add declaration. + * tui/tui-layout.c (_initialize_tui_layout): Add declaration. + * tui/tui-regs.c (_initialize_tui_regs): Add declaration. + * tui/tui-stack.c (_initialize_tui_stack): Add declaration. + * tui/tui-win.c (_initialize_tui_win): Add declaration. + * tui/tui.c (_initialize_tui): Add declaration. + * typeprint.c (_initialize_typeprint): Add declaration. + * ui-style.c (_initialize_ui_style): Add declaration. + * unittests/array-view-selftests.c (_initialize_array_view_selftests): Add declaration. + * unittests/child-path-selftests.c (_initialize_child_path_selftests): Add declaration. + * unittests/cli-utils-selftests.c (_initialize_cli_utils_selftests): Add declaration. + * unittests/common-utils-selftests.c (_initialize_common_utils_selftests): Add declaration. + * unittests/copy_bitwise-selftests.c (_initialize_copy_bitwise_utils_selftests): Add declaration. + * unittests/environ-selftests.c (_initialize_environ_selftests): Add declaration. + * unittests/filtered_iterator-selftests.c + (_initialize_filtered_iterator_selftests): Add declaration. + * unittests/format_pieces-selftests.c (_initialize_format_pieces_selftests): Add declaration. + * unittests/function-view-selftests.c (_initialize_function_view_selftests): Add declaration. + * unittests/help-doc-selftests.c (_initialize_help_doc_selftests): Add declaration. + * unittests/lookup_name_info-selftests.c (_initialize_lookup_name_info_selftests): Add declaration. + * unittests/main-thread-selftests.c + (_initialize_main_thread_selftests): Add declaration. + * unittests/memory-map-selftests.c (_initialize_memory_map_selftests): Add declaration. + * unittests/memrange-selftests.c (_initialize_memrange_selftests): Add declaration. + * unittests/mkdir-recursive-selftests.c (_initialize_mkdir_recursive_selftests): Add declaration. + * unittests/observable-selftests.c (_initialize_observer_selftest): Add declaration. + * unittests/offset-type-selftests.c (_initialize_offset_type_selftests): Add declaration. + * unittests/optional-selftests.c (_initialize_optional_selftests): Add declaration. + * unittests/parse-connection-spec-selftests.c (_initialize_parse_connection_spec_selftests): Add declaration. + * unittests/rsp-low-selftests.c (_initialize_rsp_low_selftests): Add declaration. + * unittests/scoped_fd-selftests.c (_initialize_scoped_fd_selftests): Add declaration. + * unittests/scoped_mmap-selftests.c (_initialize_scoped_mmap_selftests): Add declaration. + * unittests/scoped_restore-selftests.c (_initialize_scoped_restore_selftests): Add declaration. + * unittests/string_view-selftests.c (_initialize_string_view_selftests): Add declaration. + * unittests/style-selftests.c (_initialize_style_selftest): Add declaration. + * unittests/tracepoint-selftests.c (_initialize_tracepoint_selftests): Add declaration. + * unittests/tui-selftests.c (_initialize_tui_selftest): Add + declaration. + * unittests/unpack-selftests.c (_initialize_unpack_selftests): Add declaration. + * unittests/utils-selftests.c (_initialize_utils_selftests): Add declaration. + * unittests/vec-utils-selftests.c (_initialize_vec_utils_selftests): Add declaration. + * unittests/xml-utils-selftests.c (_initialize_xml_utils): Add declaration. + * user-regs.c (_initialize_user_regs): Add declaration. + * utils.c (_initialize_utils): Add declaration. + * v850-tdep.c (_initialize_v850_tdep): Add declaration. + * valops.c (_initialize_valops): Add declaration. + * valprint.c (_initialize_valprint): Add declaration. + * value.c (_initialize_values): Add declaration. + * varobj.c (_initialize_varobj): Add declaration. + * vax-bsd-nat.c (_initialize_vaxbsd_nat): Add declaration. + * vax-nbsd-tdep.c (_initialize_vaxnbsd_tdep): Add declaration. + * vax-tdep.c (_initialize_vax_tdep): Add declaration. + * windows-nat.c (_initialize_windows_nat): Add declaration. + (_initialize_check_for_gdb_ini): Add declaration. + (_initialize_loadable): Add declaration. + * windows-tdep.c (_initialize_windows_tdep): Add declaration. + * x86-bsd-nat.c (_initialize_x86_bsd_nat): Add declaration. + * x86-linux-nat.c (_initialize_x86_linux_nat): Add declaration. + * xcoffread.c (_initialize_xcoffread): Add declaration. + * xml-support.c (_initialize_xml_support): Add declaration. + * xstormy16-tdep.c (_initialize_xstormy16_tdep): Add declaration. + * xtensa-linux-nat.c (_initialize_xtensa_linux_nat): Add declaration. + * xtensa-linux-tdep.c (_initialize_xtensa_linux_tdep): Add declaration. + * xtensa-tdep.c (_initialize_xtensa_tdep): Add declaration. + +2020-01-13 Simon Marchi <simon.marchi@polymtl.ca> + + * regformats/regdat.sh: Generate declaration for init function. + +2020-01-13 Simon Marchi <simon.marchi@polymtl.ca> + + * remote-sim.c (next_pid, INITIAL_PID, sim_inferior_data): Move + up. + (gdbsim_target) <get_inferior_data_by_ptid, resume_one_inferior, + close_one_inferior>: New methods. + (get_sim_inferior_data_by_ptid): Move to gdbsim_target, + pass down target to find_inferior_pid. + (gdbsim_target::fetch_registers, gdbsim_target::store_registers): + Pass down target to find_inferior_ptid. + (gdbsim_target::create_inferior): Pass down target to + add_thread_silent. + (gdbsim_close_inferior): Move to gdbsim_close_inferior, pass + target down to find_inferior_ptid and switch_to_thread. + (gdbsim_target::close): Update to call close_one_inferior. + (struct resume_data): Remove. + (gdbsim_resume_inferior): Move to gdbsim_target. Take arguments + directly, rather than through a void pointer. + (gdbsim_target::resume): Update to call resume_one_inferior. + +2020-01-12 Simon Marchi <simon.marchi@polymtl.ca> + + * gdbsupport/gdb_wait.c: Include gdb_wait.h. + +2020-01-12 Pedro Alves <palves@redhat.com> + + * bsd-kvm.c (bsd_kvm_target::close): Call exit_inferior_silent + directly for the current inferior instead of + discard_all_inferiors. + (discard_all_inferiors): Delete. + +2020-01-11 Tom Tromey <tom@tromey.com> + + * tui/tui-wingeneral.c (box_win): Check cli_styling. + * tui/tui-winsource.c (tui_source_window_base::refill): Use + deprecated_safe_get_selected_frame. -2019-01-23 Tom Tromey <tom@tromey.com> - Pedro Alves <palves@redhat.com> +2020-01-10 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> - * infcall.c (cleanup_delete_std_terminate_breakpoint): Remove. - (call_function_by_hand_dummy): Use SCOPE_EXIT. + * inferior.c (print_inferior): Switch inferior before printing it. -2019-01-23 Tom Tromey <tom@tromey.com> - Andrew Burgess <andrew.burgess@embecosm.com> +2020-01-10 Aleksandar Paunovic <aleksandar.paunovic@intel.com> Pedro Alves <palves@redhat.com> - * infrun.c (fetch_inferior_event): Use scope_exit. - * utils.h (make_bpstat_clear_actions_cleanup): Don't declare. - * top.c (execute_command): Use scope_exit. - * breakpoint.c (bpstat_do_actions): Use scope_exit. - * utils.c (do_bpstat_clear_actions_cleanup) - (make_bpstat_clear_actions_cleanup): Remove. + * progspace-and-thread.c (switch_to_program_space_and_thread): + Assert there's an inferior for PSPACE. Use + switch_to_inferior_no_thread to switch the inferior too. + * progspace.c (program_space::~program_space): Call + clear_symtab_users here, with SYMFILE_DEFER_BP_RESET. + (program_space::free_all_objfiles): Don't call clear_symtab_users + here. + * symfile.c (symbol_file_clear): Call clear_symtab_users here. + +2020-01-10 Pedro Alves <palves@redhat.com> + + * NEWS: Mention multi-target debugging, "info connections", and + "add-inferior -no-connection". + +2020-01-10 Pedro Alves <palves@redhat.com> + + * infrun.c: Include "target-connection.h". + (check_multi_target_resumption): New. + (proceed): Call it. + * target-connection.c (make_target_connection_string): Make + extern. + * target-connection.h (make_target_connection_string): Declare. + +2020-01-10 Pedro Alves <palves@redhat.com> + + * Makefile.in (COMMON_SFILES): Add target-connection.c. + * inferior.c (uiout_field_connection): New function. + (print_inferior): Add new "connection-id" column. + (add_inferior_command): Show connection number/string of added + inferior. + * process-stratum-target.h + (process_stratum_target::connection_string): New virtual method. + (process_stratum_target::connection_number): New field. + * remote.c (remote_target::connection_string): New override. + * target-connection.c: New file. + * target-connection.h: New file. + * target.c (decref_target): Remove process_stratum targets from + the connection list. + (target_stack::push): Add process_stratum targets to the + connection list. + +2020-01-10 Pedro Alves <palves@redhat.com> + + Revert: + 2016-04-12 Pedro Alves <palves@redhat.com> + * serial.c (serial_open, serial_fdopen_ops, do_serial_close): + Remove references to name. + * serial.h (struct serial) <name>: Delete. -2019-01-23 Tom Tromey <tom@tromey.com> - Pedro Alves <palves@redhat.com> - - * infrun.c: Include "common/scope-exit.h" - (delete_just_stopped_threads_infrun_breakpoints_cleanup): Remove. - (wait_for_inferior): Use SCOPE_EXIT. - (fetch_inferior_event): Use scope_exit. +2020-01-10 Pedro Alves <palves@redhat.com> -2019-01-23 Tom Tromey <tom@tromey.com> - Pedro Alves <palves@redhat.com> + * gdbarch-selftests.c (register_to_value_test): Remove "target + already pushed" check. - * breakpoint.c (create_breakpoint): Remove cleanup. +2020-01-10 Pedro Alves <palves@redhat.com> + John Baldwin <jhb@FreeBSD.org> -2019-01-23 Tom Tromey <tom@tromey.com> - Andrew Burgess <andrew.burgess@embecosm.com> - Pedro Alves <palves@redhat.com> + * aarch64-linux-nat.c + (aarch64_linux_nat_target::thread_architecture): Adjust. + * ada-tasks.c (print_ada_task_info): Adjust find_thread_ptid call. + (task_command_1): Likewise. + * aix-thread.c (sync_threadlists, aix_thread_target::resume) + (aix_thread_target::wait, aix_thread_target::fetch_registers) + (aix_thread_target::store_registers) + (aix_thread_target::thread_alive): Adjust. + * amd64-fbsd-tdep.c: Include "inferior.h". + (amd64fbsd_get_thread_local_address): Pass down target. + * amd64-linux-nat.c (ps_get_thread_area): Use ps_prochandle + thread's gdbarch instead of target_gdbarch. + * break-catch-sig.c (signal_catchpoint_print_it): Adjust call to + get_last_target_status. + * break-catch-syscall.c (print_it_catch_syscall): Likewise. + * breakpoint.c (breakpoints_should_be_inserted_now): Consider all + inferiors. + (update_inserted_breakpoint_locations): Skip if inferiors with no + execution. + (update_global_location_list): When handling moribund locations, + find representative inferior for location's pspace, and use thread + count of its process_stratum target. + * bsd-kvm.c (bsd_kvm_target_open): Pass target down. + * bsd-uthread.c (bsd_uthread_target::wait): Use + as_process_stratum_target and adjust thread_change_ptid and + add_thread calls. + (bsd_uthread_target::update_thread_list): Use + as_process_stratum_target and adjust find_thread_ptid, + thread_change_ptid and add_thread calls. + * btrace.c (maint_btrace_packet_history_cmd): Adjust + find_thread_ptid call. + * corelow.c (add_to_thread_list): Adjust add_thread call. + (core_target_open): Adjust add_thread_silent and thread_count + calls. + (core_target::pid_to_str): Adjust find_inferior_ptid call. + * ctf.c (ctf_target_open): Adjust add_thread_silent call. + * event-top.c (async_disconnect): Pop targets from all inferiors. + * exec.c (add_target_sections): Push exec target on all inferiors + sharing the program space. + (remove_target_sections): Remove the exec target from all + inferiors sharing the program space. + (exec_on_vfork): New. + * exec.h (exec_on_vfork): Declare. + * fbsd-nat.c (fbsd_add_threads): Add fbsd_nat_target parameter. + Pass it down. + (fbsd_nat_target::update_thread_list): Adjust. + (fbsd_nat_target::resume): Adjust. + (fbsd_handle_debug_trap): Add fbsd_nat_target parameter. Pass it + down. + (fbsd_nat_target::wait, fbsd_nat_target::post_attach): Adjust. + * fbsd-tdep.c (fbsd_corefile_thread): Adjust + get_thread_arch_regcache call. + * fork-child.c (gdb_startup_inferior): Pass target down to + startup_inferior and set_executing. + * gdbthread.h (struct process_stratum_target): Forward declare. + (add_thread, add_thread_silent, add_thread_with_info) + (in_thread_list): Add process_stratum_target parameter. + (find_thread_ptid(inferior*, ptid_t)): New overload. + (find_thread_ptid, thread_change_ptid): Add process_stratum_target + parameter. + (all_threads()): Delete overload. + (all_threads, all_non_exited_threads): Add process_stratum_target + parameter. + (all_threads_safe): Use brace initialization. + (thread_count): Add process_stratum_target parameter. + (set_resumed, set_running, set_stop_requested, set_executing) + (threads_are_executing, finish_thread_state): Add + process_stratum_target parameter. + (switch_to_thread): Use is_current_thread. + * i386-fbsd-tdep.c: Include "inferior.h". + (i386fbsd_get_thread_local_address): Pass down target. + * i386-linux-nat.c (i386_linux_nat_target::low_resume): Adjust. + * inf-child.c (inf_child_target::maybe_unpush_target): Remove + have_inferiors check. + * inf-ptrace.c (inf_ptrace_target::create_inferior) + (inf_ptrace_target::attach): Adjust. + * infcall.c (run_inferior_call): Adjust. + * infcmd.c (run_command_1): Pass target to + scoped_finish_thread_state. + (proceed_thread_callback): Skip inferiors with no execution. + (continue_command): Rename 'all_threads' local to avoid hiding + 'all_threads' function. Adjust get_last_target_status call. + (prepare_one_step): Adjust set_running call. + (signal_command): Use user_visible_resume_target. Compare thread + pointers instead of inferior_ptid. + (info_program_command): Adjust to pass down target. + (attach_command): Mark target's 'thread_executing' flag. + (stop_current_target_threads_ns): New, factored out from ... + (interrupt_target_1): ... this. Switch inferior before making + target calls. + * inferior-iter.h + (struct all_inferiors_iterator, struct all_inferiors_range) + (struct all_inferiors_safe_range) + (struct all_non_exited_inferiors_range): Filter on + process_stratum_target too. Remove explicit. + * inferior.c (inferior::inferior): Push dummy target on target + stack. + (find_inferior_pid, find_inferior_ptid, number_of_live_inferiors): + Add process_stratum_target parameter, and pass it down. + (have_live_inferiors): Adjust. + (switch_to_inferior_and_push_target): New. + (add_inferior_command, clone_inferior_command): Handle + "-no-connection" parameter. Use + switch_to_inferior_and_push_target. + (_initialize_inferior): Mention "-no-connection" option in + the help of "add-inferior" and "clone-inferior" commands. + * inferior.h: Include "process-stratum-target.h". + (interrupt_target_1): Use bool. + (struct inferior) <push_target, unpush_target, target_is_pushed, + find_target_beneath, top_target, process_target, target_at, + m_stack>: New. + (discard_all_inferiors): Delete. + (find_inferior_pid, find_inferior_ptid, number_of_live_inferiors) + (all_inferiors, all_non_exited_inferiors): Add + process_stratum_target parameter. + * infrun.c: Include "gdb_select.h" and <unordered_map>. + (target_last_proc_target): New global. + (follow_fork_inferior): Push target on new inferior. Pass target + to add_thread_silent. Call exec_on_vfork. Handle target's + reference count. + (follow_fork): Adjust get_last_target_status call. Also consider + target. + (follow_exec): Push target on new inferior. + (struct execution_control_state) <target>: New field. + (user_visible_resume_target): New. + (do_target_resume): Call target_async. + (resume_1): Set target's threads_executing flag. Consider resume + target. + (commit_resume_all_targets): New. + (proceed): Also consider resume target. Skip threads of inferiors + with no execution. Commit resumtion in all targets. + (start_remote): Pass current inferior to wait_for_inferior. + (infrun_thread_stop_requested): Consider target as well. Pass + thread_info pointer to clear_inline_frame_state instead of ptid. + (infrun_thread_thread_exit): Consider target as well. + (random_pending_event_thread): New inferior parameter. Use it. + (do_target_wait): Rename to ... + (do_target_wait_1): ... this. Add inferior parameter, and pass it + down. + (threads_are_resumed_pending_p, do_target_wait): New. + (prepare_for_detach): Adjust calls. + (wait_for_inferior): New inferior parameter. Handle it. Use + do_target_wait_1 instead of do_target_wait. + (fetch_inferior_event): Adjust. Switch to representative + inferior. Pass target down. + (set_last_target_status): Add process_stratum_target parameter. + Save target in global. + (get_last_target_status): Add process_stratum_target parameter and + handle it. + (nullify_last_target_wait_ptid): Clear 'target_last_proc_target'. + (context_switch): Check inferior_ptid == null_ptid before calling + inferior_thread(). + (get_inferior_stop_soon): Pass down target. + (wait_one): Rename to ... + (poll_one_curr_target): ... this. + (struct wait_one_event): New. + (wait_one): New. + (stop_all_threads): Adjust. + (handle_no_resumed, handle_inferior_event): Adjust to consider the + event's target. + (switch_back_to_stepped_thread): Also consider target. + (print_stop_event): Update. + (normal_stop): Update. Also consider the resume target. + * infrun.h (wait_for_inferior): Remove declaration. + (user_visible_resume_target): New declaration. + (get_last_target_status, set_last_target_status): New + process_stratum_target parameter. + * inline-frame.c (clear_inline_frame_state(ptid_t)): Add + process_stratum_target parameter, and use it. + (clear_inline_frame_state (thread_info*)): New. + * inline-frame.c (clear_inline_frame_state(ptid_t)): Add + process_stratum_target parameter. + (clear_inline_frame_state (thread_info*)): Declare. + * linux-fork.c (delete_checkpoint_command): Pass target down to + find_thread_ptid. + (checkpoint_command): Adjust. + * linux-nat.c (linux_nat_target::follow_fork): Switch to thread + instead of just tweaking inferior_ptid. + (linux_nat_switch_fork): Pass target down to thread_change_ptid. + (exit_lwp): Pass target down to find_thread_ptid. + (attach_proc_task_lwp_callback): Pass target down to + add_thread/set_running/set_executing. + (linux_nat_target::attach): Pass target down to + thread_change_ptid. + (get_detach_signal): Pass target down to find_thread_ptid. + Consider last target status's target. + (linux_resume_one_lwp_throw, resume_lwp) + (linux_handle_syscall_trap, linux_handle_extended_wait, wait_lwp) + (stop_wait_callback, save_stop_reason, linux_nat_filter_event) + (linux_nat_wait_1, resume_stopped_resumed_lwps): Pass target down. + (linux_nat_target::async_wait_fd): New. + (linux_nat_stop_lwp, linux_nat_target::thread_address_space): Pass + target down. + * linux-nat.h (linux_nat_target::async_wait_fd): Declare. + * linux-tdep.c (get_thread_arch_regcache): Pass target down. + * linux-thread-db.c (struct thread_db_info::process_target): New + field. + (add_thread_db_info): Save target. + (get_thread_db_info): New process_stratum_target parameter. Also + match target. + (delete_thread_db_info): New process_stratum_target parameter. + Also match target. + (thread_from_lwp): Adjust to pass down target. + (thread_db_notice_clone): Pass down target. + (check_thread_db_callback): Pass down target. + (try_thread_db_load_1): Always push the thread_db target. + (try_thread_db_load, record_thread): Pass target down. + (thread_db_target::detach): Pass target down. Always unpush the + thread_db target. + (thread_db_target::wait, thread_db_target::mourn_inferior): Pass + target down. Always unpush the thread_db target. + (find_new_threads_callback, thread_db_find_new_threads_2) + (thread_db_target::update_thread_list): Pass target down. + (thread_db_target::pid_to_str): Pass current inferior down. + (thread_db_target::get_thread_local_address): Pass target down. + (thread_db_target::resume, maintenance_check_libthread_db): Pass + target down. + * nto-procfs.c (nto_procfs_target::update_thread_list): Adjust. + * procfs.c (procfs_target::procfs_init_inferior): Declare. + (proc_set_current_signal, do_attach, procfs_target::wait): Adjust. + (procfs_init_inferior): Rename to ... + (procfs_target::procfs_init_inferior): ... this and adjust. + (procfs_target::create_inferior, procfs_notice_thread) + (procfs_do_thread_registers): Adjust. + * ppc-fbsd-tdep.c: Include "inferior.h". + (ppcfbsd_get_thread_local_address): Pass down target. + * proc-service.c (ps_xfer_memory): Switch current inferior and + program space as well. + (get_ps_regcache): Pass target down. + * process-stratum-target.c + (process_stratum_target::thread_address_space) + (process_stratum_target::thread_architecture): Pass target down. + * process-stratum-target.h + (process_stratum_target::threads_executing): New field. + (as_process_stratum_target): New. + * ravenscar-thread.c + (ravenscar_thread_target::update_inferior_ptid): Pass target down. + (ravenscar_thread_target::wait, ravenscar_add_thread): Pass target + down. + * record-btrace.c (record_btrace_target::info_record): Adjust. + (record_btrace_target::record_method) + (record_btrace_target::record_is_replaying) + (record_btrace_target::fetch_registers) + (get_thread_current_frame_id, record_btrace_target::resume) + (record_btrace_target::wait, record_btrace_target::stop): Pass + target down. + * record-full.c (record_full_wait_1): Switch to event thread. + Pass target down. + * regcache.c (regcache::regcache) + (get_thread_arch_aspace_regcache, get_thread_arch_regcache): Add + process_stratum_target parameter and handle it. + (current_thread_target): New global. + (get_thread_regcache): Add process_stratum_target parameter and + handle it. Switch inferior before calling target method. + (get_thread_regcache): Pass target down. + (get_thread_regcache_for_ptid): Pass target down. + (registers_changed_ptid): Add process_stratum_target parameter and + handle it. + (registers_changed_thread, registers_changed): Pass target down. + (test_get_thread_arch_aspace_regcache): New. + (current_regcache_test): Define a couple local test_target_ops + instances and use them for testing. + (readwrite_regcache): Pass process_stratum_target parameter. + (cooked_read_test, cooked_write_test): Pass mock_target down. + * regcache.h (get_thread_regcache, get_thread_arch_regcache) + (get_thread_arch_aspace_regcache): Add process_stratum_target + parameter. + (regcache::target): New method. + (regcache::regcache, regcache::get_thread_arch_aspace_regcache) + (regcache::registers_changed_ptid): Add process_stratum_target + parameter. + (regcache::m_target): New field. + (registers_changed_ptid): Add process_stratum_target parameter. + * remote.c (remote_state::supports_vCont_probed): New field. + (remote_target::async_wait_fd): New method. + (remote_unpush_and_throw): Add remote_target parameter. + (get_current_remote_target): Adjust. + (remote_target::remote_add_inferior): Push target. + (remote_target::remote_add_thread) + (remote_target::remote_notice_new_inferior) + (get_remote_thread_info): Pass target down. + (remote_target::update_thread_list): Skip threads of inferiors + bound to other targets. (remote_target::close): Don't discard + inferiors. (remote_target::add_current_inferior_and_thread) + (remote_target::process_initial_stop_replies) + (remote_target::start_remote) + (remote_target::remote_serial_quit_handler): Pass down target. + (remote_target::remote_unpush_target): New remote_target + parameter. Unpush the target from all inferiors. + (remote_target::remote_unpush_and_throw): New remote_target + parameter. Pass it down. + (remote_target::open_1): Check whether the current inferior has + execution instead of checking whether any inferior is live. Pass + target down. + (remote_target::remote_detach_1): Pass down target. Use + remote_unpush_target. + (extended_remote_target::attach): Pass down target. + (remote_target::remote_vcont_probe): Set supports_vCont_probed. + (remote_target::append_resumption): Pass down target. + (remote_target::append_pending_thread_resumptions) + (remote_target::remote_resume_with_hc, remote_target::resume) + (remote_target::commit_resume): Pass down target. + (remote_target::remote_stop_ns): Check supports_vCont_probed. + (remote_target::interrupt_query) + (remote_target::remove_new_fork_children) + (remote_target::check_pending_events_prevent_wildcard_vcont) + (remote_target::remote_parse_stop_reply) + (remote_target::process_stop_reply): Pass down target. + (first_remote_resumed_thread): New remote_target parameter. Pass + it down. + (remote_target::wait_as): Pass down target. + (unpush_and_perror): New remote_target parameter. Pass it down. + (remote_target::readchar, remote_target::remote_serial_write) + (remote_target::getpkt_or_notif_sane_1) + (remote_target::kill_new_fork_children, remote_target::kill): Pass + down target. + (remote_target::mourn_inferior): Pass down target. Use + remote_unpush_target. + (remote_target::core_of_thread) + (remote_target::remote_btrace_maybe_reopen): Pass down target. + (remote_target::pid_to_exec_file) + (remote_target::thread_handle_to_thread_info): Pass down target. + (remote_target::async_wait_fd): New. + * riscv-fbsd-tdep.c: Include "inferior.h". + (riscv_fbsd_get_thread_local_address): Pass down target. + * sol2-tdep.c (sol2_core_pid_to_str): Pass down target. + * sol-thread.c (sol_thread_target::wait, ps_lgetregs, ps_lsetregs) + (ps_lgetfpregs, ps_lsetfpregs, sol_update_thread_list_callback): + Adjust. + * solib-spu.c (spu_skip_standalone_loader): Pass down target. + * solib-svr4.c (enable_break): Pass down target. + * spu-multiarch.c (parse_spufs_run): Pass down target. + * spu-tdep.c (spu2ppu_sniffer): Pass down target. + * target-delegates.c: Regenerate. + * target.c (g_target_stack): Delete. + (current_top_target): Return the current inferior's top target. + (target_has_execution_1): Refer to the passed-in inferior's top + target. + (target_supports_terminal_ours): Check whether the initial + inferior was already created. + (decref_target): New. + (target_stack::push): Incref/decref the target. + (push_target, push_target, unpush_target): Adjust. + (target_stack::unpush): Defref target. + (target_is_pushed): Return bool. Adjust to refer to the current + inferior's target stack. + (dispose_inferior): Delete, and inline parts ... + (target_preopen): ... here. Only dispose of the current inferior. + (target_detach): Hold strong target reference while detaching. + Pass target down. + (target_thread_name): Add assertion. + (target_resume): Pass down target. + (target_ops::beneath, find_target_at): Adjust to refer to the + current inferior's target stack. + (get_dummy_target): New. + (target_pass_ctrlc): Pass the Ctrl-C to the first inferior that + has a thread running. + (initialize_targets): Rename to ... + (_initialize_target): ... this. + * target.h: Include "gdbsupport/refcounted-object.h". + (struct target_ops): Inherit refcounted_object. + (target_ops::shortname, target_ops::longname): Make const. + (target_ops::async_wait_fd): New method. + (decref_target): Declare. + (struct target_ops_ref_policy): New. + (target_ops_ref): New typedef. + (get_dummy_target): Declare function. + (target_is_pushed): Return bool. + * thread-iter.c (all_matching_threads_iterator::m_inf_matches) + (all_matching_threads_iterator::all_matching_threads_iterator): + Handle filter target. + * thread-iter.h (struct all_matching_threads_iterator, struct + all_matching_threads_range, class all_non_exited_threads_range): + Filter by target too. Remove explicit. + * thread.c (threads_executing): Delete. + (inferior_thread): Pass down current inferior. + (clear_thread_inferior_resources): Pass down thread pointer + instead of ptid_t. + (add_thread_silent, add_thread_with_info, add_thread): Add + process_stratum_target parameter. Use it for thread and inferior + searches. + (is_current_thread): New. + (thread_info::deletable): Use it. + (find_thread_ptid, thread_count, in_thread_list) + (thread_change_ptid, set_resumed, set_running): New + process_stratum_target parameter. Pass it down. + (set_executing): New process_stratum_target parameter. Pass it + down. Adjust reference to 'threads_executing'. + (threads_are_executing): New process_stratum_target parameter. + Adjust reference to 'threads_executing'. + (set_stop_requested, finish_thread_state): New + process_stratum_target parameter. Pass it down. + (switch_to_thread): Also match inferior. + (switch_to_thread): New process_stratum_target parameter. Pass it + down. + (update_threads_executing): Reimplement. + * top.c (quit_force): Pop targets from all inferior. + (gdb_init): Don't call initialize_targets. + * windows-nat.c (windows_nat_target) <get_windows_debug_event>: + Declare. + (windows_add_thread, windows_delete_thread): Adjust. + (get_windows_debug_event): Rename to ... + (windows_nat_target::get_windows_debug_event): ... this. Adjust. + * tracefile-tfile.c (tfile_target_open): Pass down target. + * gdbsupport/common-gdbthread.h (struct process_stratum_target): + Forward declare. + (switch_to_thread): Add process_stratum_target parameter. + * mi/mi-interp.c (mi_on_resume_1): Add process_stratum_target + parameter. Use it. + (mi_on_resume): Pass target down. + * nat/fork-inferior.c (startup_inferior): Add + process_stratum_target parameter. Pass it down. + * nat/fork-inferior.h (startup_inferior): Add + process_stratum_target parameter. + * python/py-threadevent.c (py_get_event_thread): Pass target down. + +2020-01-10 Pedro Alves <palves@redhat.com> + + * remote.c (remote_target::start_remote): Don't set inferior_ptid + directly. Instead find the first thread in the thread list and + use switch_to_thread. + +2020-01-10 Pedro Alves <palves@redhat.com> + + * remote.c (remote_target::remote_add_inferior): Don't bind a + process to the current inferior if the current inferior is already + bound to a process. + +2020-01-10 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + Pedro Alves <palves@redhat.com> + + * remote.c (remote_target::remote_parse_stop_reply) <W/X packets>: + If no process is specified, return null_ptid instead of + inferior_ptid. + (remote_target::wait_as): Handle TARGET_WAITKIND_EXITED / + TARGET_WAITKIND_SIGNALLED with no pid. + +2020-01-10 Pedro Alves <palves@redhat.com> + + * remote.c (first_remote_resumed_thread): New. + (remote_target::wait_as): Use it as default event_ptid instead of + inferior_ptid. + +2020-01-10 Pedro Alves <palves@redhat.com> + + * infrun.c (handle_no_resumed): Use all_non_exited_inferiors. + +2020-01-10 Pedro Alves <palves@redhat.com> + + * tracefile-tfile.c (tfile_target::close): Assert that trace_fd is + not -1. + +2020-01-10 Pedro Alves <palves@redhat.com> + + * break-catch-sig.c (signal_catchpoint_print_it): Don't pass a + ptid to get_last_target_status. + * break-catch-syscall.c (print_it_catch_syscall): Don't pass a + ptid to get_last_target_status. + * infcmd.c (continue_command): Don't pass a target_waitstatus to + get_last_target_status. + (info_program_command): Don't pass a target_waitstatus to + get_last_target_status. + * infrun.c (init_wait_for_inferior): Use + nullify_last_target_wait_ptid. + (get_last_target_status): Handle nullptr arguments. + (nullify_last_target_wait_ptid): Clear target_last_waitstatus. + (print_stop_event): Don't pass a ptid to get_last_target_status. + (normal_stop): Don't pass a ptid to get_last_target_status. + * infrun.h (get_last_target_status, set_last_target_status): Move + comments here and update. + (nullify_last_target_wait_ptid): Declare. + * linux-fork.c (fork_load_infrun_state): Remove local extern + declaration of nullify_last_target_wait_ptid. + * linux-nat.c (get_detach_signal): Don't pass a target_waitstatus + to get_last_target_status. + +2020-01-10 Pedro Alves <palves@redhat.com> + + * gdbthread.h (scoped_restore_current_thread) + <dont_restore, restore, m_dont_restore>: Declare. + * thread.c (thread_alive): Add assertion. Return bool. + (switch_to_thread_if_alive): New. + (prune_threads): Switch inferior/thread. + (print_thread_info_1): Switch thread before calling target methods. + (scoped_restore_current_thread::restore): New, factored out from + ... + (scoped_restore_current_thread::~scoped_restore_current_thread): + ... this. + (scoped_restore_current_thread::scoped_restore_current_thread): + Add assertion. + (thread_apply_all_command, thread_select): Use + switch_to_thread_if_alive. + * infrun.c (proceed, restart_threads, handle_signal_stop) + (switch_back_to_stepped_thread): Switch current thread before + calling target methods. -2019-01-23 Pedro Alves <palves@redhat.com> +2020-01-10 Pedro Alves <palves@redhat.com> - * gdbarch-selftests.c (struct on_exit): Use SCOPE_EXIT. + * inferior.c (switch_to_inferior_no_thread): New function, + factored out from ... + (inferior_command): ... here. + * inferior.h (switch_to_inferior_no_thread): Declare. + * mi/mi-main.c (run_one_inferior): Use + switch_to_inferior_no_thread. -2019-01-23 Pedro Alves <palves@redhat.com> - Andrew Burgess <andrew.burgess@embecosm.com> +2020-01-10 Pedro Alves <palves@redhat.com> - * gdbthread.h: Include "common/forward-scope-exit.h". - (scoped_finish_thread_state): Redefine custom class in terms of - forward_scope_exit. + * infcmd.c (kill_command): Remove dead code. -2019-01-23 Pedro Alves <palves@redhat.com> - Andrew Burgess <andrew.burgess@embecosm.com> +2020-01-10 Pedro Alves <palves@redhat.com> - * common/forward-scope-exit.h: New file. + * remote.c (remote_target::mourn_inferior): No longer check + whether the target is running. -2019-01-23 Pedro Alves <palves@redhat.com> - Andrew Burgess <andrew.burgess@embecosm.com> - Tom Tromey <tom@tromey.com> +2020-01-10 Pedro Alves <palves@redhat.com> - * common/scope-exit.h: New file. + * corelow.c (core_target::has_execution): Change parameter type to + inferior pointer. + * inferior.c (number_of_live_inferiors): Use + inferior::has_execution instead of target_has_execution_1. + * inferior.h (inferior::has_execution): New. + * linux-thread-db.c (thread_db_target::update_thread_list): Use + inferior::has_execution instead of target_has_execution_1. + * process-stratum-target.c + (process_stratum_target::has_execution): Change parameter type to + inferior pointer. Check the inferior's PID instead of + inferior_ptid. + * process-stratum-target.h + (process_stratum_target::has_execution): Change parameter type to + inferior pointer. + * record-full.c (record_full_core_target::has_execution): Change + parameter type to inferior pointer. + * target.c (target_has_execution_1): Change parameter type to + inferior pointer. + (target_has_execution_current): Adjust. + * target.h (target_ops::has_execution): Change parameter type to + inferior pointer. + (target_has_execution_1): Change parameter type to inferior + pointer. Change return type to bool. + * tracefile.h (tracefile_target::has_execution): Change parameter + type to inferior pointer. + +2020-01-10 Pedro Alves <palves@redhat.com> + + * exceptions.c (print_flush): Remove current_top_target() check. + +2020-01-10 Pedro Alves <palves@redhat.com> + + * remote.c (show_remote_exec_file): Show the current inferior's + exec-file instead of the command variable's value. + +2020-01-10 Pedro Alves <palves@redhat.com> + + * record-full.c (record_full_resume_ptid): New global. + (record_full_target::resume): Set it. + (record_full_wait_1): Use record_full_resume_ptid instead of + inferior_ptid. + +2020-01-10 Pedro Alves <palves@redhat.com> + + * gdbthread.h (scoped_restore_current_thread) + <dont_restore, restore, m_dont_restore>: Declare. + * thread.c (thread_alive): Add assertion. Return bool. + (switch_to_thread_if_alive): New. + (prune_threads): Switch inferior/thread. + (print_thread_info_1): Switch thread before calling target methods. + (scoped_restore_current_thread::restore): New, factored out from + ... + (scoped_restore_current_thread::~scoped_restore_current_thread): + ... this. + (scoped_restore_current_thread::scoped_restore_current_thread): + Add assertion. + (thread_apply_all_command, thread_select): Use + switch_to_thread_if_alive. -2019-01-23 Pedro Alves <palves@redhat.com> +2020-01-10 George Barrett <bob@bob131.so> - * common/preprocessor.h (ESC): Rename to ... - (ESC_PARENS): ... this. - * common/valid-expr.h (CHECK_VALID_EXPR_1, CHECK_VALID_EXPR_2) - (CHECK_VALID_EXPR_3, CHECK_VALID_EXPR_4): Adjust. + * stap-probe.c (stap_modify_semaphore): Don't check for null + semaphores. + (stap_probe::set_semaphore, stap_probe::clear_semaphore): Check + for null semaphores. -2019-01-23 Tom Tromey <tom@tromey.com> +2020-01-09 Andrew Burgess <andrew.burgess@embecosm.com> - * language.h (class scoped_switch_to_sym_language_if_auto): - Initialize m_lang in both cases. + * tui/tui-source.c (tui_source_window::do_scroll_vertical): Update + all source windows, and maintain horizontal scroll status while + doing so. -2019-01-23 Alan Hayward <alan.hayward@arm.com> +2020-01-09 Tom Tromey <tom@tromey.com> - * nat/aarch64-linux.c (aarch64_linux_new_thread): Replace XNEW - with XCNEW. + PR tui/18932: + * tui/tui-source.c (tui_source_window::do_scroll_vertical): Call + update_source_window, not print_source_lines. -2019-01-22 Tom Tromey <tom@tromey.com> +2020-01-09 Andrew Burgess <andrew.burgess@embecosm.com> - * corelow.c: Do not include sys/file.h. + * tui/tui.c (tui_enable): Register tui hooks after calling + tui_display_main. -2019-01-22 Tom Tromey <tom@tromey.com> +2020-01-09 Christian Biesinger <cbiesinger@google.com> - * tui/tui-wingeneral.h: Include gdb_curses.h. + * gdbsupport/common-defs.h: Don't define _FORTIFY_SOURCE on MinGW. -2019-01-22 Tom Tromey <tom@tromey.com> +2020-01-08 Simon Marchi <simon.marchi@efficios.com> - * source-cache.h (class source_cache) <get_source_lines, - get_plain_source_lines, extract_lines>: Rename "lines" parameter. + * thread.c (print_thread_info_1): Fix indentation. -2019-01-22 Tom Tromey <tom@tromey.com> +2020-01-09 Christian Biesinger <cbiesinger@google.com> - * remote-fileio.h (struct remote_target): Declare. + * symtab.c (general_symbol_info::compute_and_set_names): Move the + unique_xmalloc_ptr outside the if to always free the demangled name. -2019-01-22 Tom Tromey <tom@tromey.com> +2020-01-08 Tom Tromey <tromey@adacore.com> - * python/py-arch.c: Do not include py-ref.h. - * python/py-bpevent.c: Do not include py-ref.h. - * python/py-cmd.c: Do not include py-ref.h. - * python/py-continueevent.c: Do not include py-ref.h. - * python/py-event.h: Do not include py-ref.h. - * python/py-evtregistry.c: Do not include py-ref.h. - * python/py-finishbreakpoint.c: Do not include py-ref.h. - * python/py-frame.c: Do not include py-ref.h. - * python/py-framefilter.c: Do not include py-ref.h. - * python/py-function.c: Do not include py-ref.h. - * python/py-infevents.c: Do not include py-ref.h. - * python/py-linetable.c: Do not include py-ref.h. - * python/py-objfile.c: Do not include py-ref.h. - * python/py-param.c: Do not include py-ref.h. - * python/py-prettyprint.c: Do not include py-ref.h. - * python/py-progspace.c: Do not include py-ref.h. - * python/py-symbol.c: Do not include py-ref.h. - * python/py-symtab.c: Do not include py-ref.h. - * python/py-type.c: Do not include py-ref.h. - * python/py-unwind.c: Do not include py-ref.h. - * python/py-utils.c: Do not include py-ref.h. - * python/py-value.c: Do not include py-ref.h. - * python/py-varobj.c: Do not include py-ref.h. - * python/py-xmethods.c: Do not include py-ref.h. - * python/python.c: Do not include py-ref.h. - * varobj.c: Do not include py-ref.h. + * xcoffread.c (enter_line_range, read_xcoff_symtab) + (process_xcoff_symbol, xcoff_symfile_offsets): Update. + * symtab.h (MSYMBOL_VALUE_ADDRESS): Update. + (struct section_offsets, ANOFFSET, SIZEOF_N_SECTION_OFFSETS): + Remove. + (section_offsets): New typedef. + * symtab.c (fixup_section, get_msymbol_address): Update. + * symmisc.c (dump_msymbols): Update. + * symfile.h (relative_addr_info_to_section_offsets) + (symfile_map_offsets_to_segments): Update. + * symfile.c (build_section_addr_info_from_objfile) + (init_objfile_sect_indices): Update. + (struct place_section_arg): Change type of "offsets". + (place_section): Update. + (relative_addr_info_to_section_offsets): Change type of + "section_offsets". Remove "num_sections" parameter. + (default_symfile_offsets, syms_from_objfile_1) + (set_objfile_default_section_offset): Update. + (reread_symbols): No need to preserve section offsets by hand. + (symfile_map_offsets_to_segments): Change type of "offsets". + * stap-probe.c (relocate_address): Update. + * stabsread.h (process_one_symbol): Update. + * solib-target.c (struct lm_info_target) <offsets>: Change type. + (solib_target_relocate_section_addresses): Update. + * solib-svr4.c (enable_break, svr4_relocate_main_executable): + Update. + * solib-frv.c (frv_relocate_main_executable): Update. + * solib-dsbt.c (dsbt_relocate_main_executable): Update. + * solib-aix.c (solib_aix_get_section_offsets): Change return + type. + (solib_aix_solib_create_inferior_hook): Update. + * remote.c (remote_target::get_offsets): Update. + * psymtab.c (find_pc_sect_psymtab): Update. + * psympriv.h (struct partial_symbol) <address, text_low, + text_high>: Update. + * objfiles.h (obj_section_offset): Update. + (struct objfile) <section_offsets>: Change type. + <num_sections>: Remove. + (objfile_relocate): Update. + * objfiles.c (entry_point_address_query): Update + (relocate_one_symbol): Change type of "section_offsets". + (objfile_relocate1, objfile_relocate1): Change type of + "new_offsets". + (objfile_rebase1): Update. + * mipsread.c (mipscoff_symfile_read): Update. + (read_alphacoff_dynamic_symtab): Remove "section_offsets" + parameter. + * mdebugread.c (parse_symbol): Change type of "section_offsets". + (parse_external, psymtab_to_symtab_1): Update. + * machoread.c (macho_symfile_offsets): Update. + * ia64-tdep.c (ia64_find_unwind_table): Update. + * hppa-tdep.c (read_unwind_info): Update. + * hppa-bsd-tdep.c (hppabsd_find_global_pointer): Update. + * dwarf2read.c (create_addrmap_from_index) + (create_addrmap_from_aranges, dw2_find_pc_sect_compunit_symtab) + (process_psymtab_comp_unit_reader, add_partial_symbol) + (add_partial_subprogram, process_full_comp_unit) + (read_file_scope, read_func_scope, read_lexical_block_scope) + (read_call_site_scope, dwarf2_rnglists_process) + (dwarf2_ranges_process, dwarf2_ranges_read) + (dwarf_decode_lines_1, var_decode_location, new_symbol) + (dwarf2_fetch_die_loc_sect_off, dwarf2_per_cu_text_offset): + Update. + * dwarf2-frame.c (execute_cfa_program, dwarf2_frame_find_fde): + Update. + * dtrace-probe.c (dtrace_probe::get_relocated_address): Update. + * dbxread.c (read_dbx_symtab, read_ofile_symtab): Update. + (process_one_symbol): Change type of "section_offsets". + * ctfread.c (get_objfile_text_range): Update. + * coffread.c (coff_symtab_read, enter_linenos) + (process_coff_symbol): Update. + * coff-pe-read.c (add_pe_forwarded_sym): Update. + * amd64-windows-tdep.c (amd64_windows_find_unwind_info): Update. -2019-01-22 Tom Tromey <tom@tromey.com> +2020-01-08 Tom Tromey <tromey@adacore.com> - * objfiles.h (struct objfile_per_bfd_storage): Use "struct" - keyword for bcache. + * dwarf2read.c (parse_macro_definition): Use std::string. + (parse_macro_definition): Likewise. -2019-01-22 Tom Tromey <tom@tromey.com> +2020-01-08 Tom Tromey <tromey@adacore.com> - * compile/compile-cplus-types.c: Remove a comment by #include. + * dwarf2read.c (abbrev_table_read_table): Use std::vector. + (ATTR_ALLOC_CHUNK): Remove. -2019-01-22 Tom Tromey <tom@tromey.com> +2020-01-08 Tom Tromey <tromey@adacore.com> - * compile/gcc-c-plugin.h: Include compile-internal.h. + * dwarf2read.c (fixup_go_packaging): Use unique_xmalloc_ptr. -2019-01-22 Tom Tromey <tom@tromey.com> +2020-01-08 Tom Tromey <tromey@adacore.com> - * stabsread.c (EXTERN): Do not define. - (symnum, next_symbol_text_func, processing_gcc_compilation) - (within_function, global_sym_chain, global_stabs) - (previous_stab_code, this_object_header_files) - (n_this_object_header_files) - (n_allocated_this_object_header_files): Define. - * stabsread.h (EXTERN): Never define. Use "extern". + * dwarf2read.c (add_partial_symbol): Use unique_xmalloc_ptr. + (dwarf2_compute_name, open_dwo_file): Likewise. + (process_enumeration_scope): Use std::vector. + (guess_partial_die_structure_name): Use unique_xmalloc_ptr. + (partial_die_info::fixup, dwarf2_start_subfile) + (guess_full_die_structure_name, dwarf2_name): Likewise. + (determine_prefix): Update. + (guess_full_die_structure_name): Make return type const. + (partial_die_full_name): Return unique_xmalloc_ptr. + (DW_FIELD_ALLOC_CHUNK): Remove. -2019-01-22 Philippe Waroquiers <philippe.waroquiers@skynet.be> +2020-01-07 Tom Tromey <tromey@adacore.com> - * event-top.c (handle_line_of_input): use unique_xmalloc_ptr for - history_value. + PR build/24937: + * stap-probe.c (class stap_static_probe_ops): Add constructor. -2019-01-21 Tom Tromey <tom@tromey.com> +2020-01-02 Jon Turney <jon.turney@dronecode.org.uk> - * ui-out.c: Fix includes. - * tui/tui-source.c: Fix includes. - * target.c: Fix includes. - * remote.c: Fix includes. - * regcache.c: Fix includes. - * python/py-block.c: Fix includes. - * printcmd.c: Fix includes. - * or1k-tdep.c: Fix includes. - * mi/mi-main.c: Fix includes. - * m32r-tdep.c: Fix includes. - * csky-tdep.c: Fix includes. - * compile/compile-cplus-types.c: Fix includes. - * cli/cli-interp.c: Fix includes. + * cli/cli-style.c: Set cli_styling to 'true' in the Cygwin build. -2019-01-21 Alan Hayward <alan.hayward@arm.com> +2020-01-06 Andrew Burgess <andrew.burgess@embecosm.com> - * aarch64-tdep.c (aapcs_is_vfp_call_or_return_candidate_1): Check - for padding. + * stack.c (print_frame_info): Move disassemble_next_line code + inside source_print block. -2019-01-16 Tom Tromey <tom@tromey.com> +2020-01-06 Eli Zaretskii <eliz@gnu.org> - * objfiles.h (struct minimal_symbol_iterator): Rename. Move - earlier. - (struct objfile) <msymbols_range>: Move from top level. - <msymbols>: New method. - (class objfile_msymbols): Remove. - * symtab.c (default_collect_symbol_completion_matches_break_on): - Update. - * symmisc.c (dump_msymbols): Update. - * stabsread.c (scan_file_globals): Update. - * objc-lang.c (info_selectors_command, info_classes_command) - (find_methods): Update. - * minsyms.c (find_solib_trampoline_target): Update. - * hppa-tdep.c (hppa_lookup_stub_minimal_symbol): Update. - * coffread.c (coff_symfile_read): Update. - * ada-lang.c (ada_lookup_simple_minsym) - (ada_collect_symbol_completion_matches): Update. - -2019-01-16 Tom Tromey <tom@tromey.com> - - * objfiles.h (class objfile_msymbols) <iterator>: Change argument - type. Remove no-argument constructor. - <iterator::operator++>: Simplify. - <begin>: Update. - <end>: Use minimal_symbol_count. - -2019-01-16 Tom Tromey <tom@tromey.com> - - * objfiles.h (struct objfile) <psymtabs>: New method. - (class objfile_psymtabs): Remove. - * psymtab.h (class psymtab_storage) <partial_symtab_range>: New - typedef. - <range>: New method. - (require_partial_symbols): Change return type. - * psymtab.c (require_partial_symbols) - (psym_expand_symtabs_matching): Update. - * mdebugread.c (parse_partial_symbols): Update. - * dbxread.c (dbx_end_psymtab): Update. + * gdbsupport/gdb_wait.c: Include <signal.h> instead of + gdb/signals.h, as we are now using native signal symbols. -2019-01-15 Tom Tromey <tom@tromey.com> +2020-01-06 Shahab Vahedi <shahab@synopsys.com> - * symtab.c (lookup_objfile_from_block) - (lookup_symbol_in_objfile_symtabs) - (basic_lookup_transparent_type_1, find_pc_sect_compunit_symtab) - (find_line_symtab, info_sources_command) - (default_collect_symbol_completion_matches_break_on) - (make_source_files_completion_list): Update. - * symmisc.c (print_objfile_statistics, dump_objfile) - (maintenance_print_symbols, maintenance_info_symtabs) - (maintenance_check_symtabs, maintenance_info_line_tables): - Update. - * source.c (select_source_symtab) - (forget_cached_source_info_for_objfile): Update. - * objfiles.h (class objfile_compunits): Remove. - (struct objfile) <compunits_range>: New typedef. - (compunits): New method. - * objfiles.c (objfile_relocate1): Update. - * mi/mi-cmd-file.c (mi_cmd_file_list_exec_source_files): Update. - * maint.c (count_symtabs_and_blocks): Update. - * linespec.c (iterate_over_all_matching_symtabs): Update. - * cp-support.c (add_symbol_overload_list_qualified): Update. - * coffread.c (coff_symtab_read): Update. - * ada-lang.c (add_nonlocal_symbols) - (ada_collect_symbol_completion_matches) - (ada_add_global_exceptions): Update. + * tui/tui-disasm.c (tui_disasm_window::addr_is_displayed): Avoid + overflow by an early check of content vs threshold. + * tui/tui-source.c (tui_source_window::line_is_displayed): + Likewise. -2019-01-15 Tom Tromey <tom@tromey.com> +2020-01-06 Eli Zaretskii <eliz@gnu.org> - * progspace.h (program_space) <objfiles_safe_range>: New - typedef. - <objfiles_safe>: New method. - * objfiles.h (class all_objfiles_safe): Remove. - * objfiles.c (free_all_objfiles, objfile_purge_solibs): Update. - * jit.c (jit_inferior_exit_hook): Update. - -2019-01-17 Tom Tromey <tom@tromey.com> - - * progspace.h (program_space) <objfiles_range>: New typedef. - <objfiles>: New method. - <objfiles_head>: Rename from objfiles. - (object_files): Update. - * guile/scm-progspace.c (gdbscm_progspace_objfiles): Update. - * guile/scm-pretty-print.c - (ppscm_find_pretty_printer_from_objfiles): Update. - * guile/scm-objfile.c (gdbscm_objfiles): Update. - * python/py-xmethods.c (gdbpy_get_matching_xmethod_workers): - Update. - * python/py-progspace.c (pspy_get_objfiles): Update. - * python/py-prettyprint.c (find_pretty_printer_from_objfiles): - Update. - * python/py-objfile.c (objfpy_lookup_objfile_by_name) - (objfpy_lookup_objfile_by_build_id): Update. - * mi/mi-cmd-file.c (mi_cmd_file_list_exec_source_files): Update. - * windows-tdep.c (windows_iterate_over_objfiles_in_search_order): - Update. - * symtab.c (iterate_over_symtabs, matching_obj_sections) - (expand_symtab_containing_pc, lookup_objfile_from_block) - (lookup_static_symbol, basic_lookup_transparent_type) - (find_pc_sect_compunit_symtab, find_symbol_at_address) - (find_line_symtab, info_sources_command) - (default_collect_symbol_completion_matches_break_on) - (make_source_files_completion_list, find_main_name): Update. - * symmisc.c (print_symbol_bcache_statistics) - (print_objfile_statistics, maintenance_print_symbols) - (maintenance_print_msymbols, maintenance_print_objfiles) - (maintenance_info_symtabs, maintenance_check_symtabs) - (maintenance_expand_symtabs, maintenance_info_line_tables): - Update. - * symfile.c (remove_symbol_file_command, overlay_invalidate_all) - (find_pc_overlay, find_pc_mapped_section, list_overlays_command) - (map_overlay_command, unmap_overlay_command) - (simple_overlay_update, expand_symtabs_matching) - (map_symbol_filenames): Update. - * symfile-debug.c (set_debug_symfile): Update. - * spu-tdep.c (spu_overlay_update, spu_objfile_from_frame): - Update. - * source.c (select_source_symtab, forget_cached_source_info): - Update. - * solib.c (solib_read_symbols): Update. - * solib-spu.c (append_ocl_sos): Update. - * psymtab.c (maintenance_print_psymbols) - (maintenance_info_psymtabs, maintenance_check_psymtabs): Update. - * probe.c (parse_probes_in_pspace, find_probe_by_pc): Update. - * printcmd.c (info_symbol_command): Update. - * ppc-linux-tdep.c (ppc_linux_spe_context_inferior_created): - Update. - * objfiles.h (class all_objfiles): Remove. - * objfiles.c (have_partial_symbols, have_full_symbols) - (have_minimal_symbols, qsort_cmp, update_section_map) - (shared_objfile_contains_address_p) - (default_iterate_over_objfiles_in_search_order): Update. - * objc-lang.c (info_selectors_command, info_classes_command) - (find_methods): Update. - * minsyms.c (find_solib_trampoline_target): Update. - * maint.c (maintenance_info_sections) - (maintenance_translate_address, count_symtabs_and_blocks): - Update. - * main.c (captured_main_1): Update. - * linux-thread-db.c (try_thread_db_load_from_pdir) - (has_libpthread): Update. - * linespec.c (iterate_over_all_matching_symtabs) - (search_minsyms_for_name): Update. - * jit.c (jit_find_objf_with_entry_addr): Update. - * hppa-tdep.c (find_unwind_entry) - (hppa_lookup_stub_minimal_symbol): Update. - * gcore.c (gcore_create_callback, objfile_find_memory_regions): - Update. - * elfread.c (elf_gnu_ifunc_resolve_by_cache) - (elf_gnu_ifunc_resolve_by_got): Update. - * dwarf2-frame.c (dwarf2_frame_find_fde): Update. - * dwarf-index-write.c (save_gdb_index_command): Update. - * cp-support.c (add_symbol_overload_list_qualified): Update. - * breakpoint.c (create_overlay_event_breakpoint) - (create_longjmp_master_breakpoint) - (create_std_terminate_master_breakpoint) - (create_exception_master_breakpoint): Update. - * blockframe.c (find_pc_partial_function): Update. - * ada-lang.c (ada_lookup_simple_minsym, add_nonlocal_symbols) - (ada_collect_symbol_completion_matches) - (ada_add_global_exceptions): Update. - -2019-01-17 Tom Tromey <tom@tromey.com> - - * solib-target.c (lm_info_target_p): Remove typedef. Don't - declare VEC. - (solib_target_parse_libraries): Change return type. - (library_list_start_segment, library_list_start_section) - (library_list_end_library, library_list_start_library); Update. - (solib_target_free_library_list): Remove. - (solib_target_parse_libraries): Remove cleanup. Change return - type. - (solib_target_current_sos): Update. + * NEWS: Mention the recent fix of $_exitsignal on MS-Windows. -2019-01-17 Tom Tromey <tromey@bapiya> +2020-01-02 Jon Turney <jon.turney@dronecode.org.uk> - * valprint.c: Replace "the the" with "the". - * symtab.c: Replace "the the" with "the". - * solib.c: Replace "the the" with "the". - * solib-dsbt.c: Replace "the the" with "the". - * linespec.c: Replace "the the" with "the". - * dwarf2loc.h: Replace "the the" with "the". - * amd64-windows-tdep.c: Replace "the the" with "the". - * aarch64-tdep.c: Replace "the the" with "the". - -2019-01-16 Keith Seitz <keiths@redhat.com> - - PR gdb/23773 - * dwarf2read.c (dwarf2_cu) <ancestor>: New field. - <builder>: Rename to .. - <m_builder>: ... this and make private. - (dwarf2_cu::get_builder): New method. Change all users of - `builder' to use this method. - (dwarf2_start_symtab): Move to ... - (dwarf2_cu::start_symtab): ... here. Update all callers - (setup_type_unit_groups): Move to ... - (dwarf2_cu::setup_type_unit_groups): ... here. Update all - callers. - (dwarf2_cu::reset_builder): New method. - (process_full_compunit, process_full_type_unit): Use - dwarf2_cu::reset_builder. - (follow_die_offset): Record the ancestor CU if it is different - from the followed DIE's CU. - (follow_die_sig_1): Likewise. + * coff-pe-read.c (read_pe_exported_syms): Don't try to read the + export table if no section contains it's RVA. -2019-01-15 Tom Tromey <tom@tromey.com> +2020-01-06 Eli Zaretskii <eliz@gnu.org> - * remote.c (class remote_state) <buf>: Now a char_vector. - <buf_size>: Remove. - (remote_target::getpkt): Change type of buf. Remove sizeof_buf - parameter. - (remote_target::getpkt_or_notif_sane_1) - (remote_target::getpkt_sane) - (remote_target::getpkt_or_notif_sane): Likewise. - (class remote_target) <putpkt>: New overload. - (remote_target::read_frame): Change type of "buf_p". Remove - sizeof_p parameter. - (packet_ok): New overload. - (packet_check_result): New overload. - Update all uses. - -2019-01-14 Tom Tromey <tom@tromey.com> - - * remote-notif.c (handle_notification, remote_notif_ack) - (remote_notif_parse): Make "buf" const. - * remote-notif.h (struct notif_client) <parse, ack>: Make "buf" - const. - (remote_notif_parse, remote_notif_ack, handle_notification): - Likewise. - * remote.c (remote_notif_stop_parse): Make "buf" const. - (remote_target::remote_parse_stop_reply): Make "buf" const. - (remote_notif_stop_ack): Make "buf" const. + * windows-tdep.c: Fix a typo in WINDOWS_SIGABRT. -2019-01-14 Tom Tromey <tom@tromey.com> +2020-01-06 Hannes Domani <ssbssa@yahoo.de> - * remote.c (remote_console_output): Make parameter const. + * source.c (print_source_lines_base): Set last_line_listed. -2019-01-14 Tom Tromey <tom@tromey.com> +2020-01-06 Shahab Vahedi <shahab@synopsys.com> - * target-debug.h (target_debug_print_signals): Constify. - * nto-procfs.c (nto_procfs_target::pass_signals): Update. - * procfs.c (procfs_target::pass_signals): Update. - * linux-nat.c (linux_nat_target::pass_signals): Update. - * linux-nat.h (class linux_nat_target) <pass_signals>: Update. - * target-delegates.c: Rebuild. - * remote.c (remote_target::program_signals): Update. - (remote_target::pass_signals): Update. - * target.c (target_pass_signals): Constify argument. - (target_program_signals): Likewise. - * target.h (struct target_ops) <pass_signals, program_signals>: - Constify argument. - (target_pass_signals, target_program_signals): Constify argument. + * tui/tui-disasm.c: Remove trailing spaces. -2019-01-14 Tom Tromey <tom@tromey.com> +2020-01-06 Eli Zaretskii <eliz@gnu.org> + Pedro Alves <palves@redhat.com> - PR tui/28819: - * tui/tui-io.c (gdb_wgetch): Print \r when needed. + * Makefile.in (COMMON_SFILES): Add gdbsupport/gdb_wait.c. + * windows-tdep.c: New enumeration of WINDOWS_SIG* signals. + (windows_gdb_signal_to_target): New function, uses the above + enumeration to convert GDB internal signal codes to equivalent + Windows codes. + (windows_init_abi): Call set_gdbarch_gdb_signal_to_target. + * windows-nat.c: Include "gdb_wait.h". + (get_windows_debug_event): Extract the fatal exception from the + exit status and convert to the equivalent Posix signal number. + * cli/cli-cmds.c (exit_status_set_internal_vars): Account for the + possibility that WTERMSIG returns GDB_SIGNAL_UNKNOWN. + * gdbsupport/gdb_wait.c: New file, implements + windows_status_to_termsig. + * gdbsupport/gdb_wait.h (WIFEXITED, WIFSIGNALED, WEXITSTATUS) + (WTERMSIG) [__MINGW32__]: Separate definitions for MinGW. -2019-01-14 Pedro Franco de Carvalho <pedromfc@linux.ibm.com> +2020-01-05 Andrew Burgess <andrew.burgess@embecosm.com> - * ppc-tdep.h (struct gdbarch_tdep) <ppc_v0_alias_regnum>: New - field. - * rs6000-tdep.c: Include reggroups.h. - (IS_V_ALIAS_PSEUDOREG): Define. - (rs6000_register_name): Return names for the "vX" aliases. - (rs6000_pseudo_register_type): Return type for the "vX" aliases. - (rs6000_pseudo_register_reggroup_p): Restore. Handle "vX" - aliases. Call default_register_reggroup_p for all other - pseudo-registers. - (v_alias_pseudo_register_read, v_alias_pseudo_register_write): - New functions. - (rs6000_pseudo_register_read, rs6000_pseudo_register_write): - Handle "vX" aliases. - (v_alias_pseudo_register_collect): New function. - (rs6000_ax_pseudo_register_collect): Handle "vX" aliases. - (rs6000_gdbarch_init): Initialize "vX" aliases as - pseudo-registers. Restore registration of - rs6000_pseudo_register_reggroup_p with - set_tdesc_pseudo_register_reggroup_p. - -2019-01-13 Max Filippov <jcmvbkbc@gmail.com> - - * xtensa-linux-tdep.c (xtensa_linux_init_abi): Update - tdep->num_pseudo_regs. Add calls to set_gdbarch_num_regs and - set_gdbarch_num_pseudo_regs. - -2019-01-12 Philippe Waroquiers <philippe.waroquiers@skynet.be> - - * cli/cli-style.h (class cli_style_option): <add_setshow_commands> - Remove arg prefixname, add do_set and do_show. - Add member functions set_list and show_list. - * cli/cli-style.c (class cli_style_option): Update accordingly. - (style_set_list): Move to file scope. - (style_show_list): Likewise. - (set_style): Call help_list. - (show_style): Call cmd_show_list. - (_initialize_cli_style): New macro STYLE_ADD_SETSHOW_COMMANDS. - Update to use the new macro. - -2019-10-12 Joel Brobecker <brobecker@adacore.com> - - * ada-lang.c (_initialize_ada_language): Expand the help text - for the "catch exception" command. - -2019-01-12 Philippe Waroquiers <philippe.waroquiers@skynet.be> - - * symtab.c (matching_obj_sections): Initialize obj, - declare it closer to its usage. - -2019-01-10 Tom Tromey <tom@tromey.com> - - * thread-iter.h (inf_threads_iterator): Use next_iterator. - (basic_inf_threads_range): Remove. - (inf_threads_range, inf_non_exited_threads_range) - (safe_inf_threads_range): Use next_adapter. - -2019-01-10 Keith Seitz <keiths@redhat.com> - - PR gdb/23712 - PR symtab/23010 - * dwarf2read.c (dw2_add_symbol_to_list): Remove. - (fixup_go_packaging, new_symbol): Use add_symbol_to_list. - -2019-01-10 Keith Seitz <keiths@redhat.com> - - PR gdb/23712 - PR symtab/23010 - * dictionary.c (pending_to_vector): Remove. - (dict_create_hashed_1, dict_create_linear_1, dict_add_pending_1): - Remove _1 suffix, replacing functions of the same name. Update - all callers. - (dict_create_hashed, dict_create_hashed_expandable) - (dict_create_linear, dict_create_linear_expandable, dict_free) - (dict_add_symbol, dict_add_pending, dict_size, dict_empty): - Make functions static. - -2019-01-10 Keith Seitz <keiths@redhat.com> - - PR gdb/23712 - PR symtab/23010 - * dictionary.h (struct dictionary): Replace declaration with - multidictionary. - (dict_create_hashed, dict_create_hashed_expandable) - (dict_create_linear, dict_create_linear_expandable) - (dict_free, dict_add_symbol, dict_add_pending, dict_empty) - (dict_iterator_first, dict_iterator_next, dict_iter_match_first) - (dict_iter_match_next, dict_size): Rename to "mdict_" versions - taking multidictionary argument. - [ALL_DICT_SYMBOLS]: Update for multidictionary. - * block.h (struct block) <dict>: Change to multidictionary - and rename `multidict'. - * block.c, buildsym.c, jit.c, mdebugread.c, objfiles.c, - symmisc.c: Update all dictionary references to multidictionary. - -2019-01-10 Keith Seitz <keiths@redhat.com> - - PR gdb/23712 - PR symtab/23010 - * dictionary.c: Include unordered_map. - (pending_to_vector): New function. - (dict_create_hashed_1, dict_create_linear_1, dict_add_pending_1): - Rewrite the non-"_1" functions to take vector instead - of linked list. - (dict_create_hashed, dict_create_linear, dict_add_pending): Use the - "new" _1 versions of the same name. - (multidictionary): Define. - (std::hash<enum language): New definition. - (collate_pending_symbols_by_language, mdict_create_hashed) - (mdict_create_hashed_expandable, mdict_create_linear) - (mdict_create_linear_expandable, mdict_free) - (find_language_dictionary, create_new_language_dictionary) - (mdict_add_symbol, mdict_add_pending, mdict_iterator_first) - (mdict_iterator_next, mdict_iter_match_first, mdict_iter_match_next) - (mdict_size, mdict_empty): New functions. - * dictionary.h (mdict_iterator): Define. - -2019-01-10 Pedro Alves <palves@redhat.com> - - * breakpoint.c (read_uploaded_action) - (create_tracepoint_from_upload): Adjust to use - gdb::unique_xmalloc_ptr. - * ctf.c (ctf_write_uploaded_tp): - (SET_ARRAY_FIELD): Use emplace_back. - (SET_STRING_FIELD): Adjust to use gdb::unique_xmalloc_ptr. - * tracefile-tfile.c (tfile_write_uploaded_tp): - * tracepoint.c (parse_tracepoint_definition): Adjust to use - gdb::unique_xmalloc_ptr. - * tracepoint.h (struct uploaded_tp) <cond, actions, step_actions, - at_string, cond_string, cmd_strings>: Replace char pointers - with gdb::unique_xmalloc_ptr. - -2019-01-10 Pedro Alves <palves@redhat.com> - - * solib-target.c (library_list_start_library): Don't xstrdup name. - -2019-01-10 Pedro Alves <palves@redhat.com> - - * mdebugread.c (parse_partial_symbols): Use - gdb::unique_xmalloc_ptr to manage heap-allocated 'stabsstring'. - -2019-01-10 Andrew Burgess <andrew.burgess@embecosm.com> - - * linux-fork.c (scoped_switch_fork_info) - <~scoped_switch_fork_info>: Fix incorrect variable name. - -2019-01-10 Andrew Burgess <andrew.burgess@embecosm.com> - - * linux-fork.c (scoped_switch_fork_info) - <scoped_switch_fork_info>: Make explicit. - <~scoped_switch_fork_info>: Wrap core in TRY/CATCH. - -2019-01-10 Tom Tromey <tom@tromey.com> - - * objfiles.h (objfile::reset_psymtabs): Update. - * objfiles.c (objfile::objfile): Update. - * psymtab.h (psymtab_storage::obstack): Update. - (psymtab_storage::m_obstack): Use gdb::optional. - (class psymtab_storage): Update comment. Remove objfile - parameter. - * psymtab.c (psymtab_storage::psymtab_storage): Update. + * tui/tui-layout.c (tui_add_win_to_layout): Use tui_set_layout not + show_layout. -2019-01-10 Tom Tromey <tom@tromey.com> +2020-01-05 Luis Machado <luis.machado@linaro.org> - * psymtab.h (psymtab_storage::allocate_psymtab): New method. - <free_psymtabs>: Now private. - * psymtab.c (psymtab_storage::allocate_psymtab): Implement. - (allocate_psymtab): Use new method. - -2019-01-10 Tom Tromey <tom@tromey.com> - - * xcoffread.c (xcoff_end_psymtab): Use allocate_dependencies. - * psymtab.h (psymtab_storage::allocate_dependencies): New method. - * mdebugread.c (parse_partial_symbols): Use - allocate_dependencies. - * dwarf2read.c (dwarf2_create_include_psymtab): Use - allocate_dependencies. - (process_psymtab_comp_unit_reader) - (build_type_psymtab_dependencies): Likewise. - * dbxread.c (dbx_end_psymtab): Use allocate_dependencies. - -2019-01-10 Tom Tromey <tom@tromey.com> - - * psymtab.c (add_psymbol_to_bcache): Pass psymtab obstack to - PSYMBOL_SET_LANGUAGE. - (allocate_psymtab): Allocate psymtab on the psymtab obstack. - -2019-01-10 Tom Tromey <tom@tromey.com> - - * psymtab.h (psymtab_storage::obstack): New method. - <m_obstack>: Rename from obstack; now private. - * psymtab.c (psymtab_storage): Update. - * dwarf2read.c (create_addrmap_from_index) - (create_addrmap_from_aranges, dwarf2_build_psymtabs_hard): - Update. + * aarch64-linux-nat.c + (aarch64_linux_nat_target::thread_architecture): Use bfd_arch_aarch64 + and bfd_mach_aarch64. -2019-01-10 Tom Tromey <tom@tromey.com> +2020-01-03 Philippe Waroquiers <philippe.waroquiers@skynet.be> - * symfile.c (reread_symbols): Call objfile->reset_psymtabs. - * objfiles.h (objfile::reset_psymtabs): New method. + * ui-file.c (stdio_file::can_emit_style_escape) + (tee_file::can_emit_style_escape): Ensure style is used also on + gdb_stderr when gdb_stderr is a tty supporting styling, similarly + to gdb_stdout. + * main.c (set_gdb_data_directory): Use file style to output the + warning that the given pathname is not a directory. + * top.c (show_history_filename, gdb_safe_append_history) + (show_gdb_datadir): Use file style. -2019-01-10 Tom Tromey <tom@tromey.com> +2020-01-03 Hannes Domani <ssbssa@yahoo.de> - * symmisc.c (print_symbol_bcache_statistics): Update. - (print_objfile_statistics): Update. - * symfile.c (reread_symbols): Update. - * psymtab.h (class psymtab_storage): New. - * psymtab.c (psymtab_storage): New constructor. - (~psymtab_storage): New destructor. - (require_partial_symbols): Update. - (ALL_OBJFILE_PSYMTABS_REQUIRED): Rewrite. - (find_pc_sect_psymtab, find_pc_sect_psymbol) - (match_partial_symbol, lookup_partial_symbol, dump_psymtab) - (psym_dump, recursively_search_psymtabs, psym_has_symbols) - (psym_find_compunit_symtab_by_address, sort_pst_symbols) - (start_psymtab_common, end_psymtab_common) - (add_psymbol_to_bcache, add_psymbol_to_list, init_psymbol_list) - (allocate_psymtab): Update. - (psymtab_storage::discard_psymtab): Rename from discard_psymtab. - Update. - (dump_psymtab_addrmap, maintenance_print_psymbols) - (maintenance_check_psymtabs): Update. - (class objfile_psymtabs): Move to objfiles.h. - * psympriv.h (discard_psymtab): Now inline. - (psymtab_discarder::psymtab_discarder): Update. - (psymtab_discarder::~psymtab_discarder): Update. - (ALL_OBJFILE_PSYMTABS): Rewrite. - * objfiles.h (struct objfile) <psymtabs, psymtabs_addrmap, - free_psymtabs, psymbol_cache, global_psymbols, static_psymbols>: - Remove fields. - <partial_symtabs>: New field. - (class objfile_psymtabs): Move from psymtab.h. Update. - * objfiles.c (objfile::objfile): Initialize partial_symtabs, not - psymbol_cache. - (objfile::~objfile): Don't destroy psymbol_cache. - * mdebugread.c (parse_partial_symbols): Update. - * dwarf2read.c (create_addrmap_from_index) - (create_addrmap_from_aranges, dw2_find_pc_sect_compunit_symtab) - (process_psymtab_comp_unit_reader, dwarf2_build_psymtabs_hard) - (add_partial_subprogram, dwarf2_ranges_read): Update. - * dwarf-index-write.c (write_address_map) - (write_one_signatured_type, recursively_write_psymbols) - (class debug_names, class debug_names, write_psymtabs_to_index): - Update. + * solib-target.c (struct lm_info_target): + Change offsets to be a unique_xmalloc_ptr. + (solib_target_relocate_section_addresses): Update. -2019-01-10 Tom Tromey <tom@tromey.com> +2020-01-03 Hannes Domani <ssbssa@yahoo.de> - * symtab.h (SYMBOL_SET_NAMES): Update. - (symbol_set_names): Update. - (MSYMBOL_SET_NAMES): Update. - * symtab.c (symbol_set_names): Change argument to be an - objfile_per_bfd_storage. - * psymtab.c (add_psymbol_to_bcache): Update. - * psympriv.h (PSYMBOL_SET_NAMES): Take per_bfd argument. - -2019-01-10 Tom Tromey <tom@tromey.com> - - * symtab.c (create_demangled_names_hash): Change argument to be an - objfile_per_bfd_storage. - (symbol_set_names): Update. - -2019-01-10 Tom Tromey <tom@tromey.com> - - * xcoffread.c (xcoff_initial_scan): Unconditionally call - init_psymbol_list. - * psymtab.c (init_psymbol_list): Do nothing if already called. - * psympriv.h (init_psymbol_list): Add comment. - * dwarf2read.c (dwarf2_build_psymtabs): Unconditionally call - init_psymbol_list. - * dbxread.c (dbx_symfile_read): Unconditionally call - init_psymbol_list. - -2019-01-10 Tom Tromey <tom@tromey.com> - - * xcoffread.c (scan_xcoff_symtab): Update. - * psymtab.c (add_psymbol_to_list): Replace "list" parameter with - "where". - * mdebugread.c (parse_partial_symbols) - (handle_psymbol_enumerators): Update. - * dwarf2read.c (add_partial_symbol, load_partial_dies): Update. - * dbxread.c (read_dbx_symtab): Update. - * psympriv.h (psymbol_placement): New enum. - (add_psymbol_to_list): Update. + * windows-nat.c (windows_clear_solib): Free so_list linked list. -2019-01-10 Tom Tromey <tom@tromey.com> +2020-01-03 Bernd Edlinger <bernd.edlinger@hotmail.de> - * xcoffread.c (xcoff_start_psymtab): Remove global_psymbols and - static_psymbols parameters. - (scan_xcoff_symtab): Update. - * psymtab.c (start_psymtab_common): Remove global_psymbols and - static_psymbols parameters. - * psympriv.h (start_psymtab_common): Update. - * mdebugread.c (parse_partial_symbols): Update. - * dwarf2read.c (create_partial_symtab): Update. - * dbxread.c (read_dbx_symtab): Update. - (start_psymtab): Remove global_psymbols and static_psymbols - parameters. + * MAINTAINERS (Write After Approval): Add myself. -2019-01-10 Tom Tromey <tom@tromey.com> +2020-01-02 Luis Machado <luis.machado@linaro.org> - * xcoffread.c (xcoff_end_psymtab): Remove some initializations. - * psymtab.c (allocate_psymtab): Add comment. - * psympriv.h (allocate_psymtab): Add comment. - * dwarf2read.c (dwarf2_create_include_psymtab): Remove some - initializations. - * dbxread.c (dbx_end_psymtab): Remove some initializations. - -2019-01-10 Tom Tromey <tom@tromey.com> - - * symfile.h (mdebug_build_psymtabs, elfmdebug_build_psymtabs): - Don't declare. - * mipsread.c: Include mdebugread.h. - * mdebugread.h (mdebug_build_psymtabs, elfmdebug_build_psymtabs): - Declare. - * elfread.c: Include mdebugread.h. + * proc-service.c (get_ps_regcache): Remove reference to obsolete + Cell BE architecture. + * target.h (struct target_ops) <thread_architecture>: Likewise. -2019-01-09 Tom Tromey <tom@tromey.com> +2020-01-01 Hannes Domani <ssbssa@yahoo.de> - * dbxread.c (dbx_end_psymtab): Use objfile_psymtabs. - * mdebugread.c (parse_partial_symbols): Use objfile_psymtabs. - * psymtab.c (ALL_OBJFILE_PSYMTABS_REQUIRED): Remove. - (psym_map_symtabs_matching_filename, find_pc_sect_psymtab) - (psym_lookup_symbol, psym_find_last_source_symtab) - (psym_forget_cached_source_info, psym_print_stats) - (psym_expand_symtabs_for_function, psym_expand_all_symtabs) - (psym_expand_symtabs_with_fullname, psym_map_symbol_filenames) - (psym_map_matching_symbols, psym_expand_symtabs_matching) - (psym_find_compunit_symtab_by_address) - (maintenance_print_psymbols, maintenance_info_psymtabs) - (maintenance_check_psymtabs): Use ranged for. - * psymtab.h (class objfile_psymtabs): New. - (require_partial_symbols): Return objfile_psymtabs. - * psympriv.h (ALL_OBJFILE_PSYMTABS): Remove. - -2019-01-09 Tom Tromey <tom@tromey.com> - - * symfile.c (overlay_invalidate_all, find_pc_overlay) - (find_pc_mapped_section, list_overlays_command) - (map_overlay_command, unmap_overlay_command) - (simple_overlay_update): Use all_objfiles. - * spu-tdep.c (spu_overlay_update): Use all_objfiles. - * printcmd.c (info_symbol_command): Use all_objfiles. - * objfiles.h (ALL_OBJSECTIONS): Remove. - * maint.c (maintenance_translate_address): Use all_objfiles. - * gcore.c (gcore_create_callback): Use all_objfiles. - (objfile_find_memory_regions): Likewise. - -2019-01-09 Tom Tromey <tom@tromey.com> - - * symtab.c (find_line_symtab, info_sources_command) - (make_source_files_completion_list): Use objfile_compunits. - * source.c (select_source_symtab): Use objfile_compunits. - * objfiles.h (struct objfile): Update comment. - (ALL_OBJFILES): Remove. - (ALL_FILETABS): Remove. - * mi/mi-cmd-file.c (mi_cmd_file_list_exec_source_files): Use - objfile_compunits. - -2019-01-09 Tom Tromey <tom@tromey.com> - - * symmisc.c (print_objfile_statistics, dump_objfile) - (maintenance_print_symbols): Use compunit_filetabs. - * source.c (forget_cached_source_info_for_objfile): Use - compunit_filetabs. - * objfiles.h (ALL_OBJFILE_FILETABS): Remove. - (ALL_FILETABS): Use compunit_filetabs. - * objfiles.c (objfile_relocate1): Use compunit_filetabs. - * coffread.c (coff_symtab_read): Use compunit_filetabs. - -2019-01-09 Tom Tromey <tom@tromey.com> - - * symtab.h (ALL_COMPUNIT_FILETABS): Remove. - (compunit_filetabs): New. - * symtab.c (iterate_over_some_symtabs, find_pc_sect_line): Use - compunit_filetabs. - (info_sources_command, make_source_files_completion_list): Remove - declaration. - * symmisc.c (print_objfile_statistics, dump_objfile) - (maintenance_print_symbols): Remove declaration. - (maintenance_info_symtabs): Use compunit_filetabs. - (maintenance_info_line_tables): Likewise. - * source.c (select_source_symtab): Change local variable name. - (forget_cached_source_info_for_objfile): Remove declaration. - * objfiles.h (ALL_OBJFILE_FILETABS): Use compunit_filetabs. - * objfiles.c (objfile_relocate1): Remove declaration. - * mi/mi-cmd-file.c (mi_cmd_file_list_exec_source_files): Remove - declaration. - * maint.c (count_symtabs_and_blocks): Use compunit_filetabs. - * coffread.c (coff_symtab_read): Remove declaration. - * buildsym.c (buildsym_compunit::end_symtab_with_blockvector): Use - compunit_filetabs. - -2019-01-09 Tom Tromey <tom@tromey.com> - - * symtab.c (lookup_objfile_from_block) - (find_pc_sect_compunit_symtab, search_symbols) - (default_collect_symbol_completion_matches_break_on): Use - objfile_compunits. - * objfiles.h (ALL_COMPUNITS): Remove. - * maint.c (count_symtabs_and_blocks): Use objfile_compunits. - * cp-support.c (add_symbol_overload_list_qualified): Use - objfile_compunits. - * ada-lang.c (ada_collect_symbol_completion_matches) - (ada_add_global_exceptions): Use objfile_compunits. - -2019-01-09 Tom Tromey <tom@tromey.com> - - * source.c (select_source_symtab) - (forget_cached_source_info_for_objfile): Remove declaration. - * mi/mi-cmd-file.c (mi_cmd_file_list_exec_source_files): Remove - declaration. - * maint.c (count_symtabs_and_blocks): Remove declaration. - * cp-support.c (add_symbol_overload_list_qualified): Remove - declaration. - * coffread.c (coff_symtab_read): Remove declaration. - * symtab.c (lookup_symbol_in_objfile_symtabs) - (basic_lookup_transparent_type_1): Use objfile_compunits. - (lookup_objfile_from_block, find_pc_sect_compunit_symtab) - (info_sources_command, search_symbols) - (default_collect_symbol_completion_matches_break_on) - (make_source_files_completion_list): Remove declaration. - * ada-lang.c (add_nonlocal_symbols): Use objfile_compunits. - (ada_collect_symbol_completion_matches) - (ada_add_global_exceptions): Remove declaration. - * linespec.c (iterate_over_all_matching_symtabs): Use - objfile_compunits. - * objfiles.h (ALL_OBJFILE_COMPUNITS): Remove. - (class objfile_compunits): New. - (ALL_COMPUNITS): Use objfile_compunits. - * symmisc.c (print_objfile_statistics, maintenance_info_symtabs) - (maintenance_check_symtabs, maintenance_info_line_tables): Use - objfile_compunits. - * objfiles.c (objfile_relocate1): Use objfile_compunits. - -2019-01-09 Tom Tromey <tom@tromey.com> - - * symtab.c (search_symbols) - (default_collect_symbol_completion_matches_break_on): Use - objfile_msymbols. - * ada-lang.c (ada_lookup_simple_minsym) - (ada_collect_symbol_completion_matches): Use objfile_msymbols. - * minsyms.c (find_solib_trampoline_target): Use objfile_msymbols. - * hppa-tdep.c (hppa_lookup_stub_minimal_symbol): Use - objfile_msymbols. - * coffread.c (coff_symfile_read): Use objfile_msymbols. - * symmisc.c (dump_msymbols): Use objfile_msymbols. - * objc-lang.c (find_methods): Use objfile_msymbols. - (info_selectors_command, info_classes_command): Likewise. - * stabsread.c (scan_file_globals): Use objfile_msymbols. - * objfiles.h (class objfile_msymbols): New. - (ALL_OBJFILE_MSYMBOLS): Remove. - (ALL_MSYMBOLS): Remove. + * Makefile.in: Use INSTALL_PROGRAM_ENV. -2019-01-09 Tom Tromey <tom@tromey.com> +2020-01-01 Hannes Domani <ssbssa@yahoo.de> - * common/next-iterator.h (next_adapter): Add Iterator template - parameter. - * objfiles.h (ALL_OBJFILES_SAFE): Remove. - (class all_objfiles_safe): New. - * jit.c (jit_inferior_exit_hook): Use all_objfiles_safe. - * objfiles.c (put_objfile_before): Update comment. - (add_separate_debug_objfile): Likewise. - (free_all_objfiles): Use all_objfiles_safe. - (objfile_purge_solibs): Likewise. - -2019-01-09 Tom Tromey <tom@tromey.com> - - * symtab.c (iterate_over_symtabs, matching_obj_sections) - (expand_symtab_containing_pc, lookup_static_symbol) - (basic_lookup_transparent_type, find_pc_sect_compunit_symtab) - (find_symbol_at_address, find_line_symtab, find_main_name): Use - all_objfiles. - * probe.c (find_probe_by_pc, collect_probes): Use all_objfiles. - * breakpoint.c (create_overlay_event_breakpoint) - (create_longjmp_master_breakpoint) - (create_std_terminate_master_breakpoint) - (create_exception_master_breakpoint): Use all_objfiles. - * linux-thread-db.c (try_thread_db_load_from_pdir) - (has_libpthread): Use all_objfiles. - * ada-lang.c (add_nonlocal_symbols): Use all_objfiles. - * linespec.c (iterate_over_all_matching_symtabs) - (search_minsyms_for_name): Use all_objfiles. - * maint.c (maintenance_info_sections): Use all_objfiles. - * main.c (captured_main_1): Use all_objfiles. - * spu-tdep.c (spu_objfile_from_frame): Use all_objfiles. - * guile/scm-objfile.c (gdbscm_objfiles): Use all_objfiles. - * guile/scm-pretty-print.c - (ppscm_find_pretty_printer_from_objfiles): Use all_objfiles. - * solib-spu.c (append_ocl_sos): Use all_objfiles. - * symmisc.c (maintenance_print_symbols): Use all_objfiles. - (maintenance_print_msymbols): Use all_objfiles. - * source.c (select_source_symtab): Use all_objfiles. - * jit.c (jit_find_objf_with_entry_addr): Use all_objfiles. - * symfile.c (remove_symbol_file_command) - (expand_symtabs_matching, map_symbol_filenames): Use - all_objfiles. - * ppc-linux-tdep.c (ppc_linux_spe_context_inferior_created): Use - all_objfiles. - * dwarf2-frame.c (dwarf2_frame_find_fde): Use all_objfiles. - * objc-lang.c (find_methods): Use all_objfiles. - * objfiles.c (have_partial_symbols, have_full_symbols) - (have_minimal_symbols, qsort_cmp) - (default_iterate_over_objfiles_in_search_order): Use - all_objfiles. - * hppa-tdep.c (find_unwind_entry): Use all_objfiles. - * psymtab.c (maintenance_print_psymbols): Use all_objfiles. - (maintenance_check_psymtabs): Use all_objfiles. - (ALL_PSYMTABS): Remove. - * compile/compile-object-run.c (do_module_cleanup): Use - all_objfiles. - * blockframe.c (find_pc_partial_function): Use all_objfiles. - * cp-support.c (add_symbol_overload_list_qualified): Use - all_objfiles. - * windows-tdep.c (windows_iterate_over_objfiles_in_search_order): - Use all_objfiles. - * dwarf-index-write.c (save_gdb_index_command): Use all_objfiles. - * python/py-xmethods.c (gdbpy_get_matching_xmethod_workers): Use - all_objfiles. - * python/py-objfile.c (objfpy_lookup_objfile_by_name) - (objfpy_lookup_objfile_by_build_id): Use all_objfiles. - * python/py-prettyprint.c (find_pretty_printer_from_objfiles): - Uses all_objfiles. - * solib.c (solib_read_symbols): Use all_objfiles - -2019-01-09 Tom Tromey <tom@tromey.com> - - * probe.c (parse_probes_in_pspace): Use all_objfiles. - * guile/scm-progspace.c (gdbscm_progspace_objfiles): Use - all_objfiles. - * objfiles.h (ALL_PSPACE_OBJFILES): Remove. - * symmisc.c (print_symbol_bcache_statistics) - (print_objfile_statistics, maintenance_print_objfiles) - (maintenance_info_symtabs, maintenance_check_symtabs) - (maintenance_expand_symtabs, maintenance_info_line_tables): Use - all_objfiles. - * source.c (forget_cached_source_info): Use all_objfiles. - * symfile-debug.c (set_debug_symfile): Use all_objfiles. - * elfread.c (elf_gnu_ifunc_resolve_by_cache) - (elf_gnu_ifunc_resolve_by_got): Use all_objfiles. - * objfiles.c (update_section_map): Use all_objfiles. - (shared_objfile_contains_address_p): Likewise. - * psymtab.c (maintenance_info_psymtabs): Use all_objfiles. - * python/py-progspace.c (pspy_get_objfiles): Use all_objfiles. - -2019-01-09 Tom Tromey <tom@tromey.com> - - * common/next-iterator.h: New file. - * objfiles.h (class all_objfiles): New. - (struct objfile_iterator): New. - -2019-01-09 Philippe Waroquiers <philippe.waroquiers@skynet.be> - - * NEWS: Move the description of the changed "frame", "select-frame", - and "info frame" commands to the Changed commands section. - -2019-01-09 Simon Marchi <simon.marchi@ericsson.com> - - * gdbtypes.c (check_stub_method_group): Remove handling of old - mangling schemes. - * linespec.c (find_methods): Likewise. - * stabsread.c (read_member_functions): Likewise. - * valops.c (search_struct_method): Likewise. - (value_struct_elt_for_reference): Likewise. - * NEWS: Mention this change. - -2019-01-09 Andrew Burgess <andrew.burgess@embecosm.com> - - * cli/cli-cmds.c (list_command): Pass a source_lines_range to - print_source_lines. - * source.c (print_source_lines_base): Update line number check. - (print_source_lines): New function. - (source_lines_range::source_lines_range): New function. - * source.h (class source_lines_range): New class. - (print_source_lines): New declaration. - -2019-01-09 Philippe Waroquiers <philippe.waroquiers@skynet.be> - - * linespec.c (linespec_state_destructor): Free self->canonical_names. - -2019-01-08 Tom Tromey <tom@tromey.com> - Simon Marchi <simon.marchi@ericsson.com> - - PR gdb/24060 - * ada-exp.y (DOLLAR_VARIABLE): Rename from SPECIAL_VARIABLE. - * ada-lex.l (DOLLAR_VARIABLE): Likewise. - * c-exp.y (DOLLAR_VARIABLE): Rename from VARIABLE. - * f-exp.y (DOLLAR_VARIABLE): Likewise. - * m2-exp.y (DOLLAR_VARIABLE): Rename from INTERNAL_VAR. - * p-exp.y (DOLLAR_VARIABLE): Rename from VARIABLE. - -2019-01-08 Andrew Burgess <andrew.burgess@embecosm.com> - - * source.c (select_source_symtab): Move header comment to - declaration in source.h. - (forget_cached_source_info_for_objfile): Likewise. - (forget_cached_source_info): Likewise. - (identify_source_line): Likewise. - * source.h (identify_source_line): Move declaration from symtab.h - and add comment from source.c - (print_source_lines): Likewise. - (forget_cached_source_info_for_objfile): Likewise. - (forget_cached_source_info): Likewise. - (select_source_symtab): Likewise. - (enum print_source_lines_flag): Move definition from symtab.h. - * symtab.h (identify_source_line): Move declaration to source.h. - (print_source_lines): Likewise. - (forget_cached_source_info_for_objfile): Likewise. - (forget_cached_source_info): Likewise. - (select_source_symtab): Likewise. - (enum print_source_lines_flag): Move definition to source.h. - * tui/tui-hooks.c: Add 'source.h' include. - -2019-01-08 Andrew Burgess <andrew.burgess@embecosm.com> - - * source.c (print_source_lines_base): Handle requests to print - reverse line number sequences, and guard against empty lines - string. - -2019-01-08 Andrew Burgess <andrew.burgess@embecosm.com> - - * source.c (print_source_lines_base): Fix skip of '\r' if next - character is '\n'. - -2019-01-06 Tom Tromey <tom@tromey.com> - - * c-exp.y (struct c_parse_state) <macro_original_text, - expansion_obstack>: New member. - (macro_original_text, expansion_obstack): Remove globals. - (scan_macro_expansion, scanning_macro_expansion) - (finished_macro_expansion): Update. - (scan_macro_cleanup): Remove. - (yylex, c_parse): Update. - -2019-01-06 Tom Tromey <tom@tromey.com> - - * c-exp.y (struct c_parse_state) <strings>: New member. - (operator_stoken): Update. - -2019-01-06 Tom Tromey <tom@tromey.com> - - * parser-defs.h (type_ptr): Remove typedef. Don't declare VEC. - (union type_stack_elt) <typelist_val>: Now a pointer to - std::vector. - (type_stack_cleanup): Don't declare. - (push_typelist): Update. - * parse.c (pop_typelist): Return a std::vector. - (push_typelist): Take a std::vector. - (follow_types): Update. Do not free args. - (type_stack_cleanup): Remove. - * c-exp.y (struct c_parse_state): New. - (cpstate): New global. - (type_aggregate_p, exp, ptr_operator, parameter_typelist) - (nonempty_typelist): Update. - (func_mod): Create a new vector. - (c_parse): Create a c_parse_state. - (check_parameter_typelist): Do not delete params. - (function_method): Update. Do not delete type_list. - -2019-01-06 Tom Tromey <tom@tromey.com> - - PR gdb/28155: - * python/py-finishbreakpoint.c (bpfinishpy_init): Use - check_typedef. - * infcmd.c (finish_command_fsm_should_stop): Use check_typedef. - (print_return_value): Likewise. - -2019-01-05 Tom Tromey <tom@tromey.com> - - * contrib/cleanup_check.py: Remove. - * contrib/gcc-with-excheck: Remove. - * contrib/exsummary.py: Remove. - * contrib/excheck.py: Remove. - -2019-01-05 Joel Brobecker <brobecker@adacore.com> - - * thread.c (delete_thread_1): Add gdb_assert that THR is not - NULL. Initialize tpprev to NULL instead of assigning it - to NULL on the next statement. - * windows-nat.c (windows_delete_thread): Remove check for - main_thread_id before printing thread exit notifications. - (get_windows_debug_event) <EXIT_THREAD_DEBUG_EVENT>: - Remove thread ID check against main_thread_id. - <CREATE_PROCESS_DEBUG_EVENT>: Remove call to - windows_delete_thread. - <EXIT_PROCESS_DEBUG_EVENT>: Add call to windows_delete_thread. - -2019-01-04 Tom Tromey <tom@tromey.com> - - * compile/compile.c (_initialize_compile): Use upper case for - metasyntactic variables. - * symmisc.c (_initialize_symmisc): Use upper case for - metasyntactic variables. - * psymtab.c (_initialize_psymtab): Use upper case for - metasyntactic variables. - * demangle.c (demangle_command): Use upper case for metasyntactic - variables. - (_initialize_demangler): Likewise. - * ax-gdb.c (_initialize_ax_gdb): Use upper case for metasyntactic - variables. + * MAINTAINERS (Write After Approval): Add myself. -2019-01-03 Tom Tromey <tom@tromey.com> +2020-01-01 Joel Brobecker <brobecker@adacore.com> - * tui/tui-source.c (tui_set_source_content): Use xstrdup. + * gdbarch.sh: Update copyright year range of generated files. -2019-01-03 Tom Tromey <tom@tromey.com> +2020-01-01 Joel Brobecker <brobecker@adacore.com> - * python/py-symtab.c (salpy_str): Update. - (struct salpy_sal_object) <symtab>: Now a PyObject. - (salpy_dealloc): Update. - (del_objfile_sal): Use gdbpy_ref. - -2019-01-03 Tom Tromey <tom@tromey.com> - - * python/py-type.c (convert_field): Use new_reference. Return - gdbpy_ref. - (make_fielditem): Return gdbpy_ref. - (typy_fields): Update. - (typy_getitem): Update. - (field_name): Return gdbpy_ref. Use new_reference. - (typy_iterator_iternext): Update. - -2019-01-03 Tom Tromey <tom@tromey.com> - - * python/py-record.c (gdbpy_stop_recording): Use Py_RETURN_NONE. - -2019-01-03 Tom Tromey <tom@tromey.com> - - * python/py-value.c (valpy_dealloc): Use Py_XDECREF. - * python/py-type.c (typy_fields_items): Use gdbpy_ref. - * python/py-progspace.c (pspy_set_printers): Use gdbpy_ref. - (pspy_set_frame_filters, pspy_set_frame_unwinders) - (pspy_set_type_printers): Likewise. - * python/py-function.c (fnpy_init): Use gdbpy_ref. - * python/py-cmd.c (cmdpy_init): Use gdbpy_ref. - * python/py-objfile.c (objfpy_set_printers): Use gdbpy_ref. - (objfpy_set_frame_filters, objfpy_set_frame_unwinders) - (objfpy_set_type_printers): Likewise. - -2019-01-03 Tom Tromey <tom@tromey.com> - - * python/python.c (gdbpy_enter, ~gdbpy_enter): Update. - (gdbpy_print_stack): Use gdbpy_err_fetch. - * python/python-internal.h (class gdbpy_err_fetch): New class. - (class gdbpy_enter) <m_error_type, m_error_value, - m_error_traceback>: Remove. - <m_error>: New member. - (gdbpy_exception_to_string): Don't declare. - * python/py-varobj.c (py_varobj_iter_next): Use gdbpy_err_fetch. - * python/py-value.c (convert_value_from_python): Use - gdbpy_err_fetch. - * python/py-utils.c (gdbpy_err_fetch::to_string): Rename from - gdbpy_exception_to_string. - (gdbpy_handle_exception): Use gdbpy_err_fetch. - * python/py-prettyprint.c (print_stack_unless_memory_error): Use - gdbpy_err_fetch. - -2019-01-03 Andrew Burgess <andrew.burgess@embecosm.com> - - * linux-nat.c (delete_lwp_cleanup): Delete. - (struct lwp_deleter): New struct. - (lwp_info_up): New typedef. - (linux_nat_target::follow_fork): Delete cleanup, and make use of - lwp_info_up. - -2019-01-03 Andrew Burgess <andrew.burgess@embecosm.com> - - * linux-fork.c (class scoped_switch_fork_info): New class. - (inferior_call_waitpid): Update to use scoped_switch_fork_info. - -2019-01-03 Andrew Burgess <andrew.burgess@embecosm.com> - - * valops.c (find_overload_match): Remove use of null_cleanup, and - calls to do_cleanups. - -2019-01-03 Andrew Burgess <andrew.burgess@embecosm.com> - - * compile/compile-cplus-types.c - (compile_cplus_instance::decl_name): Handle changes to - cp_func_name. - * cp-support.c (cp_func_name): Update header comment, update - return type. - * cp-support.h (cp_func_name): Update return type in declaration. - * valops.c (find_overload_match): Move temp_func local to top - level of function and change its type. Use temp_func to hold and - delete temporary string obtained from cp_func_name. - -2019-01-03 Andrew Burgess <andrew.burgess@embecosm.com> - - * remote.c (remote_target::remote_check_symbols): Convert `msg` to - gdb::char_vector, remove cleanup, and update uses of `msg`. - -2019-01-03 Jim Wilson <jimw@sifive.com> - - * riscv-tdep.c (riscv_freg_feature): Drop s0 name from f8. - -2019-01-02 Tom Tromey <tom@tromey.com> - - * xml-tdesc.c (xml_cache): Hold a target_desc_up. - (tdesc_parse_xml): Remove cleanups. - * target-descriptions.h (make_cleanup_free_target_description): - Don't declare. - (target_desc_deleter): New struct. - (target_desc_up): New typedef. - * target-descriptions.c (target_desc_deleter::operator()): Rename - from free_target_description. - (make_cleanup_free_target_description): Remove. - -2019-01-02 Tom Tromey <tom@tromey.com> - - * linespec.c (struct linespec_parser): Rename from ls_parser. Add - constructor, destructor. - (linespec_parser): Remove typedef. - (~linespec_parser): Rename from linespec_parser_delete. - (linespec_lex_to_end, linespec_complete_label) - (linespec_complete): Update. - (decode_line_full): Remove cleanups. - (decode_line_1): Update. - -2019-01-02 Tom Tromey <tom@tromey.com> - - * python/python-internal.h (inferior_to_inferior_object): Change - return type. - * python/py-exitedevent.c (create_exited_event_object): Update. - * python/py-inferior.c (inferior_to_inferior_object): Return - gdbpy_ref. - (python_new_inferior, python_inferior_deleted) - (thread_to_thread_object, delete_thread_object) - (build_inferior_list, gdbpy_selected_inferior): Update. - * python/py-infthread.c (create_thread_object): Update. Also fail - if inferior_to_inferior_object fails. - -2019-01-02 Simon Marchi <simon.marchi@ericsson.com> - - * inferior.h (class inferior) <displaced_step_state>: New field. - * infrun.h (struct displaced_step_state): Move here from - infrun.c. Initialize fields, add constructor. - <inf>: Remove field. - <reset>: New method. - * infrun.c (struct displaced_step_inferior_state): Move to - infrun.h. - (displaced_step_inferior_states): Remove. - (get_displaced_stepping_state): Adust. - (displaced_step_in_progress_any_inferior): Adjust. - (displaced_step_in_progress_thread): Adjust. - (displaced_step_in_progress): Adjust. - (add_displaced_stepping_state): Remove. - (get_displaced_step_closure_by_addr): Adjust. - (remove_displaced_stepping_state): Remove. - (infrun_inferior_exit): Call displaced_step_state.reset. - (use_displaced_stepping): Don't check for NULL. - (displaced_step_prepare_throw): Call - get_displaced_stepping_state. - (displaced_step_fixup): Don't check for NULL. - (prepare_for_detach): Don't check for NULL. - -2019-01-02 Philippe Waroquiers <philippe.waroquiers@skynet.be> - - * infcall.c (call_function_by_hand_dummy): cleanup/destroy sm - in case of call that did not complete. - -2019-01-02 Andrey Utkin <autkin@undo.io> - - * symfile.c (find_separate_debug_file): Fix search of debug files for - remote debuggee. - -2019-01-02 Tom Tromey <tom@tromey.com> - - * python/py-inferior.c (gdbpy_initialize_inferior): Fix - indentation. - * python/py-frame.c (frapy_older): Remove cast. - (frapy_newer): Likewise. - * python/py-breakpoint.c (local_setattro): Remove cast. - * python/py-arch.c (archpy_name): Remove local variable. - * python/py-type.c (gdbpy_lookup_type): Remove cast. + Update copyright year range in all GDB files. -2019-01-02 Joel Brobecker <brobecker@adacore.com> +2020-01-01 Joel Brobecker <brobecker@adacore.com> - * unittests/basic_string_view/element_access/char/empty.cc: - Fix year range in copyright header. + * copyright.py: Convert to Python 3. -2019-01-01 Andrew Burgess <andrew.burgess@embecosm.com> +2020-01-01 Joel Brobecker <brobecker@adacore.com> - * arch/riscv.h (struct riscv_gdbarch_features) <hw_float_abi>: - Delete. - <operator==>: Update with for removed field. - <hash>: Likewise. - * riscv-tdep.h (struct gdbarch_tdep) <features>: Renamed to... - <isa_features>: ...this. - <abi_features>: New field. - (riscv_isa_flen): Update comment. - (riscv_abi_xlen): New declaration. - (riscv_abi_flen): New declaration. - * riscv-tdep.c (riscv_isa_xlen): Update to get answer from - isa_features. - (riscv_abi_xlen): New function. - (riscv_isa_flen): Update to get answer from isa_features. - (riscv_abi_flen): New function. - (riscv_has_fp_abi): Update to get answer from abi_features. - (riscv_call_info::riscv_call_info): Use abi xlen and flen, not isa - xlen and flen. - (riscv_call_info) <xlen, flen>: Update comment. - (riscv_call_arg_struct): Remove invalid assertions - (riscv_features_from_gdbarch_info): Update now hw_float_abi field - is removed. - (riscv_gdbarch_init): Gather isa features and abi features - separately, ensure both match on the gdbarch when reusing an old - gdbarch. Relax an error check to allow 32-bit abi float to run on - a target with 64-bit float hardware. - -2019-01-01 Philippe Waroquiers <philippe.waroquiers@skynet.be> - - * source.c (search_command_helper): Stop reverse search - when line 1 has been searched. - -2019-01-01 Philippe Waroquiers <philippe.waroquiers@skynet.be> - - * record-full.c (record_full_base_target::close): Rewrite - record_full_core_buf_list free logic. - -2019-01-01 Philippe Waroquiers <philippe.waroquiers@skynet.be> - - * break-catch-syscall.c (print_one_catch_syscall): xfree - the last text. + * copyright.py: Adapt after move of gnulib directory from gdb + directory to toplevel directory. -2019-01-01 Joel Brobecker <brobecker@adacore.com> +2020-01-01 Joel Brobecker <brobecker@adacore.com> - * top.c (print_gdb_version): Update Copyright year in version - message. + * copyright.py (main): Exit if run from the wrong directory. -2019-01-01 Joel Brobecker <brobecker@adacore.com> +2020-01-01 Joel Brobecker <brobecker@adacore.com> - Update copyright year range in all GDB files. + * top.c (print_gdb_version): Change copyright year to 2020. -2019-01-01, 19 Joel Brobecker <brobecker@adacore.com> +2020-01-01 Joel Brobecker <brobecker@adacore.com> - * config/djgpp/fnchange.lst: Add entry for gdb/ChangeLog-2018. + * config/djgpp/fnchange.lst: Add entry for gdb/ChangeLog-2019. -For older changes see ChangeLog-2018. +For older changes see ChangeLog-2019. Local Variables: mode: change-log @@ -16579,4 +12993,3 @@ version-control: never coding: utf-8 End: - diff -Nru gdb-9.1/gdb/ChangeLog-1992 gdb-10.2/gdb/ChangeLog-1992 --- gdb-9.1/gdb/ChangeLog-1992 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/ChangeLog-1992 2020-09-13 02:33:40.000000000 +0000 @@ -427,11 +427,6 @@ * symfile.c (syms_from_objfile): Insert debugging check to test NAMES_HAVE_UNDERSCORE setting against the BFD support. - * doc/gdbint.texinfo (Host Conditionals): Remove - NAMES_HAVE_UNDERSCORE, SOME_NAMES_HAVE_DOT, document - MEM_FNS_DECLARED. - (Target Conditionals): Remove all of the above. - * xm-rs6000.h (MEM_FNS_DECLARED): Update comments. * coffread.c (read_coff_symtab, C_BLOCK): Use complain() rather @@ -487,9 +482,6 @@ * main.c (main): Accept --silent as well as --quiet. Change +help to --help. Suggested by Karl Berry, <karl@cs.umb.edu>. - * doc/gdbint.texinfo: SWAP_HOST_AND_TARGET => SWAP_TARGET_AND_HOST. - Noticed by Andy Jackson, <arj@cam-orl.co.uk>. - Mon Dec 14 23:28:15 1992 John Gilmore (gnu@cygnus.com) * tm-nindy960.h, remote-nindy.c: Lint. @@ -1134,7 +1126,6 @@ * defs.h: include nm.h. * coredep.c, infptrace.c, procfs.c, rs6000-nat.c, sparc-nat.c, sparc-tdep.c, : do not include nm.h. - * doc/gdbint.texinfo: nm.h now included in defs.h. Fri Oct 23 04:47:17 1992 Stu Grossman (grossman at cygnus.com) @@ -1202,7 +1193,6 @@ Wed Oct 21 03:51:01 1992 John Gilmore (gnu@cygnus.com) * coredep.c: Include "nm.h" to get REGISTER_U_ADDR. - * doc/gdbint.texinfo: Improve REGISTER_U_ADDR and USE_PROC_FS doc. * Makefile.in (VERSION): Tick to 4.6.9. @@ -1216,9 +1206,6 @@ (initialize_symmisc): Remove empty function. * tm-spc-noun.h, tm-sun4os4.h, tm-sun4sol2.h (STACK_END_ADDRESS): Remove obsolete, misspelled macro. - * doc/gdbint.texinfo: Document obsolete STACK_END_ADDR. - (all @node commands): Use new form to avoid nitpicking errors. - * doc/gdbint.texinfo: Document host/native/target split. Wed Oct 21 00:14:34 1992 Stu Grossman (grossman at cygnus.com) @@ -1251,8 +1238,6 @@ * hppa[bh]h-tdep.c: do not include ptrace.h. * Makefile.in (HFILES): added nm-hppa[bh].h. - * doc/gdbint.texinfo: add PUSH_DUMMY_FRAME, POP_FRAME. - Tue Oct 20 00:01:46 1992 Stu Grossman (grossman at cygnus.com) * mips-nat.c: Straighten out include files. Work around @@ -1402,7 +1387,6 @@ Avoid longjmp()-catching compilation errors in cross-ports. - * doc/gdbint.texinfo: Update GET_LONGJMP_TARGET, L_SET doc. * irix4-nat.c, mips-nat.c (JB_ELEMENT_SIZE, get_longjmp_target): Move from mips-tdep.c and tm-{irix3,mips}.h. * mips-nat.c: Remove a bunch of code that was ifdef'd out of @@ -1617,9 +1601,6 @@ * config/sun4os4.mh (XDEPFILES): fork-child.o removed. (NATDEPFILES): added fork-child.o. - * doc/gdbint.texinfo: document a few more macros, create new - section for native macros. - Thu Oct 8 13:52:46 1992 Stu Grossman (grossman at cygnus.com) * Makefile.in alldeps.mak depend: Rip out 29k/udi pending @@ -1832,7 +1813,6 @@ (define_command): If defining a new hook, check the command it is hooking, and warn if none. Install the hook. * source.c (_initialize_source): "l" is an abbrev for "list". - * doc/gdb.texinfo: Document command hooks. * Makefile.in (VERSION): Roll to 4.6.7. * config/sun4os4.mh: Remove dup inftarg.o from NATDEPFILES. @@ -2287,19 +2267,6 @@ (energize_call_command): Call send_location() after doing up, down, and frame commands. -Fri Sep 11 18:28:28 1992 Roland H. Pesch (pesch@fowanton.cygnus.com) - - * doc/gdb.texinfo, doc/gdbinv-m.m4.in, doc/gdbinv-s.m4.in: first - pass at doc for two new remote targets---29K using UDI, and Tandem - ST2000 using STDBUG. - - * doc/all.m4, doc/none.m4: new m4 switch, _ST2000__ - - * doc/all.m4: turn on H8/300 stuff for generic manual - - * doc/gdbinv-s.m4.in: remove text on special procedures to continue - after explicit call to breakpoint() in serial stubs. - Fri Sep 11 01:34:25 1992 John Gilmore (gnu@sphagnum.cygnus.com) * mipsread.c: Clean up some white space. @@ -2366,15 +2333,6 @@ * serial.h: Define struct ttystate properly using HAVE_TERMIO. * xm-apollo68b.h: #define PTRACE_IN_WRONG_PLACE... -Fri Sep 4 18:53:57 1992 Roland H. Pesch (pesch@fowanton.cygnus.com) - - * doc/gdb.texinfo: fix shameful error of agreement reported by - jimb@occs.cs.oberlin.edu (Jim Blandy) - * doc/gdb.texinfo: remove old partial discussion of remote serial - protocol (via serial debug stubs) - * doc/gdbinv-m.m4.in, doc/gdbinv-s.m4.in: new section discussing - use of serial debug stubs - Fri Sep 4 00:34:30 1992 Per Bothner (bothner@rtl.cygnus.com) * symfile.h: Declaration of set_demangling_style() moved @@ -3605,7 +3563,6 @@ * am29k-tdep.c (read_register_stack, write_register_stack): Change RSTACK_HIGH_ADDR to rstack_high_address, a user-settable variable. Add `set' and `show' commands for it. - * doc/gdb.texinfo: Document it. Thu Jun 18 19:35:22 1992 Fred Fish (fnf@cygnus.com) diff -Nru gdb-9.1/gdb/ChangeLog-1993 gdb-10.2/gdb/ChangeLog-1993 --- gdb-9.1/gdb/ChangeLog-1993 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/ChangeLog-1993 2020-09-13 02:33:40.000000000 +0000 @@ -411,9 +411,9 @@ Mon Nov 22 11:03:45 1993 Fred Fish (fnf@cygnus.com) Merged changes from kev@spuds.geg.mot.com (Kevin A. Buettner): - * gdb/config/m88k/delta88.mh (NATDEPFILES): Added corelow.o and + * config/m88k/delta88.mh (NATDEPFILES): Added corelow.o and coredep.o to this list. - * gdb/m88k-nat.c (m88k_register_u_addr): Avoid error when passed + * m88k-nat.c (m88k_register_u_addr): Avoid error when passed the number for an M88110 extended register by just returning the address of r0. @@ -5222,7 +5222,7 @@ Mon May 10 16:03:03 1993 Jim Kingdon (kingdon@cygnus.com) Patch from Jeffrey Law: - * gdb/config/pa/nm-hppab.h (PTRACE_ARG3_TYPE): Define as caddr_t. + * config/pa/nm-hppab.h (PTRACE_ARG3_TYPE): Define as caddr_t. Mon May 10 15:28:27 1993 Ian Lance Taylor (ian@cygnus.com) @@ -5274,8 +5274,8 @@ Thu May 6 15:47:45 1993 Stu Grossman (grossman@cygnus.com) * More patches from Jeffrey Law (law@cs.utah.edu). - * gdb/config/nm-hppab.h (PTRACE_ARG3_TYPE): Define as caddr_t. - * gdb/config/pa/tm-hppah.h (millicode_start, millicode_end): + * config/nm-hppab.h (PTRACE_ARG3_TYPE): Define as caddr_t. + * config/pa/tm-hppah.h (millicode_start, millicode_end): Delete unnecessary declarations. Thu May 6 15:15:46 1993 Stu Grossman (grossman@cygnus.com) @@ -5290,25 +5290,25 @@ Wed May 5 15:16:33 1993 Stu Grossman (grossman@cygnus.com) * Patches from Jeffrey Law <law@cs.utah.edu>. - * gdb/hppa-tdep.c: Declare frame_saved_pc. + * hppa-tdep.c: Declare frame_saved_pc. (frameless_function_invocation): New function. (frame_saved_pc, init_extra_frame_info): Use frameless_function_invocation. - * gdb/config/pa/tm-hppa.h (SAVED_PC_AFTER_CALL): Use saved_pc_after + * config/pa/tm-hppa.h (SAVED_PC_AFTER_CALL): Use saved_pc_after call instead of just grabbing the value currently in %r2. (FRAMELESS_FUNCTION_INVOCATION): Use frameless_function_invocation. - * gdb/config/pa/tm-hppah.h (SAVED_PC_AFTER_CALL): Delete private + * config/pa/tm-hppah.h (SAVED_PC_AFTER_CALL): Delete private definition and use the common one in tm-hppa.h. - * gdb/hppa-tdep.c (frame_chain_valid): If "use_unwind" is true, then + * hppa-tdep.c (frame_chain_valid): If "use_unwind" is true, then use unwind descriptors to determine if the frame chain is valid. - * gdb/hppa-tdep.c (find_dummy_frame_regs): Rework so that + * hppa-tdep.c (find_dummy_frame_regs): Rework so that it does not assume %r4 is the frame pointer. - * gdb/hppa-pinsn.c (print_insn): Handle 'r' and 'R' for break, rsm, + * hppa-pinsn.c (print_insn): Handle 'r' and 'R' for break, rsm, and ssm instructions. - * gdb/hppa-tdep.c (extract_5r_store, extract_5R_store): New + * hppa-tdep.c (extract_5r_store, extract_5R_store): New helper functions for print_insn. - * gdb/hppa-tdep.c (gcc_p, hpux_cc_p): Delete unused functions. - * gdb/config/pa/tm-hppa.h (ABOUT_TO_RETURN): Handle a return + * hppa-tdep.c (gcc_p, hpux_cc_p): Delete unused functions. + * config/pa/tm-hppa.h (ABOUT_TO_RETURN): Handle a return which nullifies the following instruction. Tue May 4 12:11:38 1993 Jim Kingdon (kingdon@cygnus.com) @@ -5490,8 +5490,6 @@ to access the field. * config/convex/xm-convex.h (LONG_LONG): Replace with CC_HAS_LONG_LONG. Add define for PRINTF_HAS_LONG_LONG. - * doc/gdbint.texinfo (LONG_LONG): Replace with CC_HAS_LONG_LONG. - Add PRINTF_HAS_LONG_LONG references. Wed Apr 28 06:11:38 1993 Jim Kingdon (kingdon@cygnus.com) @@ -5520,12 +5518,6 @@ * config/sparc/xm-sun4os4.h [__STDC__]: Don't use MALLOC_INCOMPATIBLE. -Wed Apr 28 11:39:18 1993 Roland H. Pesch (pesch@fowanton.cygnus.com) - - * doc/gdb.texinfo: make node "Shell Commands" unconditional; - describe `set demangle-style arm' (not cfront); - mention can type `q' to discard output, when gdb pages - Wed Apr 28 11:32:39 1993 Peter Schauer (pes@regent.e-technik.tu-muenchen.de) * valops.c (search_struct_field): Fix gdb core dump with incomplete @@ -5638,10 +5630,6 @@ prefix for func name. (FIX_CALL_DUMMY): Move code into hppah-tdep.c. - * testsuite/gdb.t16/gdbme.c, testsuite/gdb.t17/gdbme.c: Add calls - to malloc() so that we can test GDB eval of dynamically created - arrays (like char strings in `print "foo"'). - Fri Apr 23 01:28:14 1993 Peter Schauer (pes@regent.e-technik.tu-muenchen.de) * printcmd.c (print_address_symbolic): Search symtabs as well as the @@ -6202,7 +6190,6 @@ tm-a29k.h. * config/a29k/a29k-udi.mt (MT_CFLAGS): Remove TARGET_AM29K define that does not appear anywhere else in the gdb source tree. - * doc/gdbinit.texinfo: Document renaming of tm-29k.h to tm-a29k.h. Mon Mar 29 13:55:29 1993 Jim Kingdon (kingdon@cygnus.com) @@ -6753,11 +6740,6 @@ * configure.in: added testsuite to configdirs. -Tue Feb 23 11:46:11 1993 Mike Stump (mrs@cygnus.com) - - * doc/stabs.texi: The `this' pointer is now known by the name - `this' instead of `$t'. - Tue Feb 23 11:21:33 1993 Fred Fish (fnf@cygnus.com) * dwarfread.c (read_tag_string_type): Rewrite to allow forward @@ -6788,13 +6770,13 @@ Mon Feb 22 07:54:03 1993 Mike Werner (mtw@poseidon.cygnus.com) - * gdb/testsuite: made modifications to testcases, etc., to allow + * testsuite: made modifications to testcases, etc., to allow them to work properly given the reorganization of deja-gnu and the relocation of the testcases from deja-gnu to a "tool" subdirectory. Sun Feb 21 10:55:55 1993 Mike Werner (mtw@poseidon.cygnus.com) - * gdb/testsuite: Initial creation of gdb/testsuite. + * testsuite: Initial creation of gdb/testsuite. Migrated dejagnu testcases and support files for testing nm to gdb/testsuite from deja-gnu. These files were moved "as is" with no modifications. This migration is part of a major overhaul @@ -6961,8 +6943,6 @@ * Makefile.in: xcoffread.o is not built by default. * xm-rs6000.h (IBM6000_HOST): Remove. * config/rs6000.mh (NATDEPFILES): xcoffread.o is native only. - * doc/gdbint.texinfo: Eliminate IBM6000_HOST, document - IBM6000_TARGET. Wed Feb 10 18:31:20 1993 Stu Grossman (grossman at cygnus.com) diff -Nru gdb-9.1/gdb/ChangeLog-1995 gdb-10.2/gdb/ChangeLog-1995 --- gdb-9.1/gdb/ChangeLog-1995 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/ChangeLog-1995 2020-09-13 02:33:40.000000000 +0000 @@ -1358,7 +1358,6 @@ * defs.h (xmalloc, xrealloc): Delete, they're declared in libiberty.h. (GETENV_PROVIDED, FCLOSE_PROVIDED): New. - * doc/gdbint.texinfo (GETENV_PROVIDED, FCLOSE_PROVIDED): Document. * remote-sim.[ch] (sim_callback_write_stdout): New. Tue Sep 19 15:28:58 1995 Per Bothner <bothner@kalessin.cygnus.com> @@ -3531,8 +3530,6 @@ * remote-est.c: Rewrite to use new monitor conventions. * config/m68k/est.mt (TDEPFILES): Add monitor.o. * config/m68k/tm-est.h: Set NUM_REGS to 18. - * testsuite/gdb.base/break.exp: Lots of cleanups. Use gdb_test - more thoroughly. Thu Mar 23 23:20:00 1995 Jeff Law (law@snake.cs.utah.edu) diff -Nru gdb-9.1/gdb/ChangeLog-1996 gdb-10.2/gdb/ChangeLog-1996 --- gdb-9.1/gdb/ChangeLog-1996 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/ChangeLog-1996 2020-09-13 02:33:40.000000000 +0000 @@ -1133,11 +1133,9 @@ * inferior.h (IN_SIGTRAMP): Pass pc to SIGTRAMP_START and SIGTRAMP_END. - * config/i386/tm-i386os9k.h (SIGTRAMP_START, SIGTRAMP_END): + * config/i386/tm-i386os9k.h (SIGTRAMP_START, SIGTRAMP_END): Define with dummy pc arg. * config/m68k/tm-nbsd.h: Ditto. - * doc/gdbint.texinfo: Document that SIGTRAMP_START and - SIGTRAMP_END are macros that take an single argument. Mon Sep 30 20:02:45 1996 Fred Fish <fnf@cygnus.com> @@ -2746,7 +2744,7 @@ Tue Jun 25 23:14:07 1996 Jason Molenda (crash@godzilla.cygnus.co.jp) - * gdb/gdbserver/Makefile.in (docdir): Removed. + * gdbserver/Makefile.in (docdir): Removed. Tue Jun 25 22:05:38 1996 Jason Molenda (crash@godzilla.cygnus.co.jp) @@ -2759,7 +2757,7 @@ (docdir): Removed. * nlm/configure.in (AC_PREREQ): autoconf 2.5 or higher. * nlm/configure: Rebuilt. - * gdb/gdbserver/Makefile.in (datadir): Set to $(prefix)/share. + * gdbserver/Makefile.in (datadir): Set to $(prefix)/share. Mon Jun 24 09:56:14 1996 Angela Marie Thomas (angela@cygnus.com) diff -Nru gdb-9.1/gdb/ChangeLog-1998 gdb-10.2/gdb/ChangeLog-1998 --- gdb-9.1/gdb/ChangeLog-1998 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/ChangeLog-1998 2020-09-13 02:33:40.000000000 +0000 @@ -3710,9 +3710,9 @@ * config/m68k/nm-linux.h: New file. * config/m68k/tm-linux.h: New file. * config/m68k/xm-linux.h: New file. - * gdb/m68klinux-nat.c: New file. + * m68klinux-nat.c: New file. * gdbserver/low-linux.c: Add support for m68k-linux. - * gdb/config/m68k/tm-m68k.h (NUM_FREGS): New macro. + * config/m68k/tm-m68k.h (NUM_FREGS): New macro. 1998-12-07 Jason Molenda (jsm@bugshack.cygnus.com) @@ -6002,7 +6002,7 @@ Mon Apr 20 15:32:21 1998 Mark Kettenis <kettenis@phys.uva.nl> - * gdb/gdb_string.h (strdup): Declare only if not defined as a + * gdb_string.h (strdup): Declare only if not defined as a macro. Mon Apr 20 14:18:45 1998 J. Kean Johnston <jkj@sco.com> diff -Nru gdb-9.1/gdb/ChangeLog-1999 gdb-10.2/gdb/ChangeLog-1999 --- gdb-9.1/gdb/ChangeLog-1999 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/ChangeLog-1999 2020-09-13 02:33:40.000000000 +0000 @@ -55,8 +55,6 @@ * config/powerpc/solaris.mh: ditto. * config/alpha/alpha-osf2.mh: ditto. * config/alpha/alpha-osf3.mh: ditto. - * testsuite/gdb.base/callfuncs.exp: make "next" test match the - next source line, in case the "next" runs away. * acconfig.h: remove obsolete def HAVE_MULTIPLE_PROC_FDS, add new def NEW_PROC_API * config.in; ditto. @@ -118,13 +116,11 @@ varobjs was not decremented if the first one in the list was deleted. 1999-12-16 Michael Snyder <msnyder@cleaver.cygnus.com> - + * linux-thread.c: Remove printf-debugging code. * lin-thread.c: ditto. * config/alpha/nm-linux.h: protect with NM_LINUX_H. - * testsuite/gdb.threads/linux-dp.exp: Make test for "New Thread" - message more forgiving. Ditto test for "info threads". - + 1999-12-16 Michael Snyder <msnyder@cleaver.cygnus.com> * lin-thread.c: new file. Implements multi-thread debugging on @@ -2102,7 +2098,6 @@ identifiers beginning with `$' unless SYMBOLS_CAN_START_WITH_DOLLAR is non-zero. * config/pa/tm-hppa.h (SYMBOLS_CAN_START_WITH_DOLLAR): Define. - * doc/gdbint.texinfo (SYMBOLS_CAN_START_WITH_DOLLAR): Document. Remove all traces of the BINOP_SCOPE operator. It's never generated, and not implemented. @@ -4832,7 +4827,6 @@ * dwarf2read.c (dwarf2_build_psymtabs_hard): Minor format tweak. * symfile.c (syms_from_objfile): Ditto, and fix typo. * top.c (init_main): Fix typo in comment (DEFULAT_PROMPT). - * doc/gdbint.texinfo (find_sym_fns): This replaces symfile_init. 1999-08-08 James Ingham <jingham@leda.cygnus.com> @@ -8371,9 +8365,8 @@ config/i386/nm-i386sco5.h, config/i386/tm-fbsd.h, config/i386/tm-i386.h config/powerpc/nm-aix.h, config/powerpc/tm-macos.h config/powerpc/tm-ppc-aix.h, config/powerpc/xm-aix.h - config/rs6000/tm-rs6000-aix4.h, testsuite/gdb.chill/tests1.ch - testsuite/gdb.chill/tests2.ch, testsuite/gdb.chill/tests2.exp: - Update FSF address in copyright notices. + config/rs6000/tm-rs6000-aix4.h: Update FSF address in copyright + notices. 1999-02-18 Jason Molenda (jsm@bugshack.cygnus.com) diff -Nru gdb-9.1/gdb/ChangeLog-2000 gdb-10.2/gdb/ChangeLog-2000 --- gdb-9.1/gdb/ChangeLog-2000 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/ChangeLog-2000 2020-09-13 02:33:40.000000000 +0000 @@ -4521,7 +4521,7 @@ 2000-05-17 Eli Zaretskii <eliz@is.elta.co.il> - * gdb/config/djgpp/README: Fine-tune installation instructions + * config/djgpp/README: Fine-tune installation instructions based on user reports. Wed May 17 18:27:45 2000 Andrew Cagney <cagney@b1.cygnus.com> @@ -5787,8 +5787,6 @@ 1 bit for the flag. * config/sparc/tm-sun4sol2.h: ditto. (SOFTWARE_SINGLE_STEP, SOFTWARE_SINGLE_STEP_P): undefine. - * testsuite/gdb.threads/pthreads.exp (all_threads_running): Allow - for more than 15 thread increments. 2000-04-06 Eli Zaretskii <eliz@is.elta.co.il> @@ -8121,14 +8119,12 @@ * config/i386/tm-i386sol2.h: ditto. * config/sparc/tm-sun4sol2.h: ditto. * config/i386/i386v42mp.mh: add uw-thread.o to NATDEPFILES. - * testsuite/gdb.threads/pthreads.exp: Try to link with -lthread - if -lpthread and -lpthreads fail. * procfs.c: (PIDGET, TIDGET, MERGEPID): change default to no-op. (proc_flags): combine flags that UnixWare splits into two locations. (proc_modify_flag): add support for PR_KLC (kill on last close). (proc_[un]set_kill_on_last_close): new functions. - + 2000-01-07 Elena Zannoni <ezannoni@kwikemart.cygnus.com> * infrun.c (normal_stop): Print out thread id when we stop. diff -Nru gdb-9.1/gdb/ChangeLog-2001 gdb-10.2/gdb/ChangeLog-2001 --- gdb-9.1/gdb/ChangeLog-2001 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/ChangeLog-2001 2020-09-13 02:33:40.000000000 +0000 @@ -6607,20 +6607,16 @@ * NEWS: Update. 2001-04-17 Michael Snyder <msnyder@redhat.com> - + * remote.c (remote_open_1): On opening the remote target, activate the solib_create_inferior_hook, so that it can detect when the target loads shared libraries. (remote_async_open_1): Ditto. 2001-04-17 Michael Snyder <msnyder@redhat.com> - + * breakpoint.c (print_one_breakpoint): Handle 64-bit addresses. * tracepoint.c (tracepoints_info): Handle 64-bit addresses. - * testsuite/gdb.trace/deltrace.exp: Allow for 64-bit addresses. - * testsuite/gdb.trace/infotrace.exp: Ditto. - * testsuite/gdb.trace/passcount.exp: Ditto. - * testsuite/gdb.trace/while-stepping.exp: Ditto. 2001-04-17 Michael Snyder <msnyder@redhat.com> diff -Nru gdb-9.1/gdb/ChangeLog-2002 gdb-10.2/gdb/ChangeLog-2002 --- gdb-9.1/gdb/ChangeLog-2002 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/ChangeLog-2002 2020-09-13 02:33:40.000000000 +0000 @@ -11,10 +11,6 @@ * objc-exp.y (parse_number): Cast sscanf arguments to proper type. (yylex): Initialize c to avoid uninitialized warning. -2002-12-29 Kazu Hirata <kazu@cs.umass.edu> - - * doc/fdl.texi: Revert the last change. - 2002-12-29 Mark Kettenis <kettenis@gnu.org> * tracepoint.c (ISATTY): Removed. @@ -1725,7 +1721,7 @@ 2002-11-18 Adam Fedor <fedor@gnu.org> - * gdb/parser-defs.h: (struct objc_class_str): New structure + * parser-defs.h: (struct objc_class_str): New structure for parsing ObjC classes. 2002-11-18 Andrew Cagney <ac131313@redhat.com> @@ -3622,14 +3618,12 @@ (charset.o): Move. * c-lang.c: #include "gdb_string.h" -2002-09-20 Fernando Nasser <fnasser@redhat.com> +2002-09-20 George Helffrich <george@gly.bris.ac.uk> - From 2002-07-02 George Helffrich <george@gly.bris.ac.uk> * cli/cli-cmds.c (list_command): New function. Implements the new cli edit command. (_init_cli_cmds): Add new command definition. * gdb.1: Document edit command. - * doc/gdb.texinfo: Document edit command. 2002-09-20 Fernando Nasser <fnasser@redhat.com> @@ -3910,7 +3904,7 @@ 2002-09-17 Theodore A. Roth <troth@verinet.com> - * gdb/avr-tdep.c(avr_scan_prologue): Fix bad call to + * avr-tdep.c(avr_scan_prologue): Fix bad call to generic_read_register_dummy() (PR gdb/703). (avr_push_return_address): #if 0 out unused vars. (avr_gdbarch_init): Enable use of avr_push_return_address(). @@ -4227,7 +4221,7 @@ 2002-09-03 Theodore A. Roth <troth@verinet.com> - * gdb/avr-tdep.c (avr_gdbarch_init): Use + * avr-tdep.c (avr_gdbarch_init): Use generic_unwind_get_saved_register. 2002-09-03 David Carlton <carlton@math.stanford.edu> @@ -4418,10 +4412,7 @@ * cli/cli-script.c (copy_command_lines): New function. * defs.h (copy_command_lines): Export. - * testsuite/gdb.base/commands.exp: New tests for commands - attached to a temporary breakpoint, and for commands that - delete the breakpoint they are attached to. - + 2002-08-26 Michael Snyder <msnyder@redhat.com> * breakpoint.c (bpstat_stop_status): Instead of copying the @@ -9057,7 +9048,6 @@ (osabi.o): New dependency list. * osabi.c: New file. * osabi.h: New file. - * doc/gdbint.texinfo: Document new generic OS ABI framework. * Makefile.in (alpha_tdep_h): Define and use instead of alpha-tdep.h. @@ -12392,14 +12382,12 @@ * MAINTAINERS: Change Past Maintainer addresses to ``foo at bar dot com'' form. Remove references to cygnus.com and sourceware. -2002-02-23 Andrew Cagney <ac131313@redhat.com> +2002-02-23 Paul Eggert <eggert@twinsun.com> - From 2002-02-19 Paul Eggert <eggert@twinsun.com>: * Makefile.in (VER): Change "head -1" to "sed q", since POSIX 1003.1-2001 no longer allows "head -1". - * gdb/Makefile.in (version.c): Likewise. - * gdb/doc/Makefile.in (GDBvn.texi): Likewise. - * gdb/CONTRIBUTE: Change "diff -c3" to "diff -c", which is + * Makefile.in (version.c): Likewise. + * CONTRIBUTE: Change "diff -c3" to "diff -c", which is equivalent. POSIX 1003.1-2001 no longer allows "diff -c3". 2002-02-23 Andrew Cagney <ac131313@redhat.com> @@ -13365,8 +13353,6 @@ * arch-utils.c (default_print_float_info): New function. * arch-utils.h (default_print_float_info): Prototype it. * infcmd.c (float_info): Call PRINT_FLOAT_INFO. - * doc/gdbint.texinfo (FLOAT_INFO): Mark as deprecated. - (PRINT_FLOAT_INFO): Document it. * arm-tdep.c (arm_print_float_info): Renamed from arm_float_info. * config/arm/tm-arm.h (FLOAT_INFO): Delete. diff -Nru gdb-9.1/gdb/ChangeLog-2003 gdb-10.2/gdb/ChangeLog-2003 --- gdb-9.1/gdb/ChangeLog-2003 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/ChangeLog-2003 2020-09-13 02:33:40.000000000 +0000 @@ -2231,9 +2231,9 @@ 2003-10-17 Shrinivas Atre <shrinivasa@KPITCummins.com> - * gdb/config/h8300/tm-h8300.h (h8300_normal_mode): Add external + * config/h8300/tm-h8300.h (h8300_normal_mode): Add external declaration. - * gdb/h8300-tdep.c (BINWORD): Update BINWORD for h8300_normal_mode + * h8300-tdep.c (BINWORD): Update BINWORD for h8300_normal_mode (h8300_examine_prologue): Use h8300_normal_mode flag (h8300_gdbarch_init): Set architecture info for normal mode @@ -7899,7 +7899,7 @@ 2003-06-07 Adam Fedor <fedor@gnu.org> - * gdb/objc-lang.c (FETCH_ARGUMENT): Remove macro. + * objc-lang.c (FETCH_ARGUMENT): Remove macro. (OBJC_FETCH_POINTER_ARGUMENT): Shorthand macro for using FETCH_POINTER_ARGUMENT with Objective-C method arguments. (find_implementation, resolve_msgsend, resolve_msgsend_stret, @@ -11239,7 +11239,7 @@ 2003-04-01 Adam Fedor <fedor@gnu.org> - * gdb/objc-lang.c (selectors_info): Replace calls to + * objc-lang.c (selectors_info): Replace calls to SYMBOL_DEMANGLED_NAME and DEPRECATED_SYMBOL_NAME with SYMBOL_NATURAL_NAME. (classes_info, find_methods): Likewise. @@ -14236,7 +14236,7 @@ 2002-04-02 Elena Zannoni <ezannoni@redhat.com> - * gdb/sh-tdep.c (sh_sh2e_register_name): New. + * sh-tdep.c (sh_sh2e_register_name): New. (sh2e_show_regs): New. (sh_gdbarch_init): Handle bfd_mach_sh2e. * config/sh/tm-sh.h: Added sh2e to comments. diff -Nru gdb-9.1/gdb/ChangeLog-2004 gdb-10.2/gdb/ChangeLog-2004 --- gdb-9.1/gdb/ChangeLog-2004 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/ChangeLog-2004 2020-09-13 02:33:40.000000000 +0000 @@ -1388,7 +1388,7 @@ 2004-11-03 Andrew Cagney <cagney@gnu.org> - * gdb/NEWS: Mention internationalization, m32r-*-linux-gnu, 'p' + * NEWS: Mention internationalization, m32r-*-linux-gnu, 'p' packet, obsolete configurations, end-of-life deprecated_registers. 2004-11-02 Mark Kettenis <kettenis@gnu.org> @@ -4209,8 +4209,6 @@ 2004-08-11 Joel Brobecker <brobecker@gnat.com> - * doc/gdbint.texinfo (Host Definition): Remove documentation - for USE_O_NOCTTY, no longer used. * config/xm-aix4.h (USE_O_NOCTTY): Remove, no longer used. * config/rs6000/xm-rs6000.h (USE_O_NOCTTY): Likewise. @@ -6693,7 +6691,7 @@ 2004-06-06 Paul Brook <paul@codesourcery.com> - * gdb/dwarf2-frame.c (decode_frame_entry_1): Decode version 3 CIE + * dwarf2-frame.c (decode_frame_entry_1): Decode version 3 CIE records. 2004-06-08 Paul N. Hilfinger <Hilfinger@gnat.com> @@ -6880,7 +6878,7 @@ 2004-06-02 Albert Chin-A-Young <china@thewrittenword.com> Committed by Andrew Cagney. - * gdb/dictionary.c, gdb/gdbtypes.h: Remove trailing comma + * dictionary.c, gdbtypes.h: Remove trailing comma after last enum constant to avoid error from IBM C compiler. diff -Nru gdb-9.1/gdb/ChangeLog-2005 gdb-10.2/gdb/ChangeLog-2005 --- gdb-9.1/gdb/ChangeLog-2005 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/ChangeLog-2005 2020-09-13 02:33:40.000000000 +0000 @@ -4905,7 +4905,6 @@ 2005-03-07 Joel Brobecker <brobecker@adacore.com> - * doc/observer.texi (executable_changed): New observer. * symtab.c: Include "observer.h". (find_main_name): New function. (main_name): If name_of_main is unset, then compute it diff -Nru gdb-9.1/gdb/ChangeLog-2006 gdb-10.2/gdb/ChangeLog-2006 --- gdb-9.1/gdb/ChangeLog-2006 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/ChangeLog-2006 2020-09-13 02:33:40.000000000 +0000 @@ -2080,8 +2080,6 @@ * remote-file.io.c (remote_fileio_func_system): Treat zero length string as NULL. Adjust for NULL pointer argument. - * doc/gdb.texinfo (system): Document behaviour with zero length - string. 2006-06-12 Daniel Jacobowitz <dan@codesourcery.com> @@ -2356,7 +2354,7 @@ (print_unpacked_pointer): New function. (print_variable_at_address): New function. (m2_val_print): Replaced. - * gdb/MAINTAINERS (Write After Approval): Added + * MAINTAINERS (Write After Approval): Added Gaius Mulley <gaius@glam.ac.uk> 2006-05-12 Mark Kettenis <kettenis@gnu.org> @@ -3027,7 +3025,6 @@ * configure.tgt (i[34567]86-*-netware*): Do not set build_nlm. * configure.ac: Remove AC_CONFIG_SUBDIRS of nlm. * configure: Regenerate. - * doc/gdb.texinfo: Remove gdbserve.nlm documentation. * nlm: Remove directory. 2006-03-29 Daniel Jacobowitz <dan@codesourcery.com> @@ -3413,15 +3410,15 @@ 2006-02-24 Charles Wilson <cygwin@cwilson.fastmail.fm> - * gdb/defs.h: unconditionally include <fcntl.h>, and + * defs.h: unconditionally include <fcntl.h>, and ensure that O_BINARY is defined. - * gdb/solib.c(solib_open): ensure solib files are opened in + * solib.c(solib_open): ensure solib files are opened in binary mode. - * gdb/corelow.c: Remove O_BINARY macro definition. - * gdb/exec.c: Remove O_BINARY macro definition - * gdb/remote-rdp.c: Remove O_BINARY macro definition - * gdb/source.c: Remove O_BINARY macro definition - * gdb/symfile.c: Remove O_BINARY macro definition + * corelow.c: Remove O_BINARY macro definition. + * exec.c: Remove O_BINARY macro definition + * remote-rdp.c: Remove O_BINARY macro definition + * source.c: Remove O_BINARY macro definition + * symfile.c: Remove O_BINARY macro definition 2006-02-24 Randolph Chung <tausq@debian.org> diff -Nru gdb-9.1/gdb/ChangeLog-2007 gdb-10.2/gdb/ChangeLog-2007 --- gdb-9.1/gdb/ChangeLog-2007 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/ChangeLog-2007 2020-09-13 02:33:40.000000000 +0000 @@ -2342,8 +2342,6 @@ 2007-10-16 Gaius Mulley <gaius@glam.ac.uk> - * doc/gdb.texinfo: Add TSIZE definition, removed - statement about unbounded arrays being unimplemented. * m2-valprint.c (m2_print_array_contents): New function. (m2_print_unbounded_array): New function. (m2_print_array_contents): New function. @@ -8382,12 +8380,11 @@ varobj_update_one. * mi/mi-cmds.c (mi_cmds): Register '-var-set-frozen'. * mi/mi-cmds.h (mi_cmd_var_set_frozen): Declare. - + 2007-04-13 Paul Brook <paul@codesourcery.com> * target-descriptions.c (tdesc_named_type): Add ieee_single and ieee_double. - * doc/gdb.texinfo: Document ieee_single and ieee_double target types. 2007-04-13 Daniel Jacobowitz <dan@codesourcery.com> @@ -8486,7 +8483,6 @@ * configure.ac (build_warnings): Add -Wno-char-subscripts. * configure: Regenerate. - * doc/gdbint.texinfo (warning flags): Add -Wno-char-subscripts. 2007-04-11 Jan Kratochvil <jan.kratochvil@redhat.com> @@ -9511,9 +9507,9 @@ 2007-02-08 Daniel Jacobowitz <dan@codesourcery.com> Reported by timeless@gmail.com: - * gdb/target.c (target_flash_erase): Do not return void value. + * target.c (target_flash_erase): Do not return void value. (target_flash_done): Likewise. - * gdb/cli/cli-cmds.c (source_command): Likewise. + * cli/cli-cmds.c (source_command): Likewise. 2007-02-08 Fred Fish <fnf@specifix.com> @@ -9665,7 +9661,7 @@ 2007-02-01 Kazuhiro Inaoka <inaoka.kazuhiro@renesas.com> - * gdb/remote-m32r.sdi.c (m32r_fetch_register): Change PWD mask. + * remote-m32r.sdi.c (m32r_fetch_register): Change PWD mask. (m32r_store_register): Ditto. 2007-01-30 Vladimir Prus <vladimir@codesourcery.com> diff -Nru gdb-9.1/gdb/ChangeLog-2008 gdb-10.2/gdb/ChangeLog-2008 --- gdb-9.1/gdb/ChangeLog-2008 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/ChangeLog-2008 2020-09-13 02:33:40.000000000 +0000 @@ -5663,7 +5663,7 @@ 2008-07-13 Vladimir Prus <vladimir@codesourcery.com> Allow all CLI command even if target is executing. - * gdb/top.c (execute_command_1): Don't check if the inferiour + * top.c (execute_command_1): Don't check if the inferiour is running. 2008-07-13 Vladimir Prus <vladimir@codesourcery.com> @@ -6881,7 +6881,7 @@ 2008-06-06 Paul Pluzhnikov <ppluzhnikov@google.com> PR gdb/1147 - * gdb/valopts.c (find_overload_match): Handle references + * valopts.c (find_overload_match): Handle references to pointers. 2008-06-06 Paul N. Hilfinger <hilfinger@adacore.com> @@ -9874,7 +9874,6 @@ 2008-03-14 Vladimir Prus <vladimir@codesourcery.com> Implement MI notification for new threads. - * doc/observer.texi (new_thread): Document. * observer.sh: Forward declare struct thread_info. * thread.c (add_thread): Notify observer. @@ -10739,9 +10738,9 @@ 2008-01-30 Vladimir Prus <vladimir@codesourcery.com> Use vector for varobj_list_children interface. - * gdb/varobj.c (varobj_list_children): Return vector + * varobj.c (varobj_list_children): Return vector of varobjs. - * gdb/varobj.h (varobj_list_children): Adjust + * varobj.h (varobj_list_children): Adjust prototype. (varobj_p): Declare. Declare vector thereof. * mi/mi-cmd-var.c (mi_cmd_var_list_children): Adjust diff -Nru gdb-9.1/gdb/ChangeLog-2009 gdb-10.2/gdb/ChangeLog-2009 --- gdb-9.1/gdb/ChangeLog-2009 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/ChangeLog-2009 2020-09-13 02:33:40.000000000 +0000 @@ -786,7 +786,7 @@ 2009-11-17 Jan Kratochvil <jan.kratochvil@redhat.com> Fix wrong debug output with `set debug infrun 1'. - * gdb/infrun.c (handle_inferior_event <debug_infrun>): New variable + * infrun.c (handle_inferior_event <debug_infrun>): New variable old_chain. Temporarily switch INFERIOR_PTID. * target.h (target_stopped_by_watchpoint): Extend the comment. (target_stopped_data_address): New comment. @@ -2672,10 +2672,6 @@ PR python/10666: * python/py-function.c (fnpy_init): Use xstrdup. -2009-09-21 Jie Zhang <jie.zhang@analog.com> - - * doc/gdb.texinfo: Escape "{" and "}". - 2009-09-21 Phil Muldoon <pmuldoon@redhat.com> PR python/10633 @@ -3207,7 +3203,7 @@ 2009-09-08 Ralf Wildenhues <Ralf.Wildenhues@gmx.de> - * gdb/Makefile.in (check//%): Parse 'config.status --version' + * Makefile.in (check//%): Parse 'config.status --version' output to recreate the configuration from the testsuite directory, rather than running 'config.status --recheck' from a different build directory. Let configure do the recursion rather than @@ -10853,8 +10849,8 @@ Fix completer problem for filename completion on the first try. - * gdb/completer.h (gdb_completion_word_break_characters): New function. - * gdb/completer.c: Include gdb_assert.h. + * completer.h (gdb_completion_word_break_characters): New function. + * completer.c: Include gdb_assert.h. (complete_line_internal_reason): New enum. (complete_line_internal): Change last argument type to complete_line_internal_reason. @@ -12995,7 +12991,7 @@ 2009-01-20 Kazu Hirata <kazu@codesourcery.com> - * gdb/procfs.c (info_mappings_callback): Cast map->pr_size to + * procfs.c (info_mappings_callback): Cast map->pr_size to unsigned long. 2009-01-20 Daniel Jacobowitz <dan@codesourcery.com> diff -Nru gdb-9.1/gdb/ChangeLog-2010 gdb-10.2/gdb/ChangeLog-2010 --- gdb-9.1/gdb/ChangeLog-2010 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/ChangeLog-2010 2020-09-13 02:33:40.000000000 +0000 @@ -1663,7 +1663,7 @@ 2010-10-03 Paul Hilfinger <hilfinger@adacore.com> - * gdb/ada-typeprint.c (print_selected_record_field_types): New function, + * ada-typeprint.c (print_selected_record_field_types): New function, incorporating and generalizing print_record_field_types. (print_record_field_types): Change return value and update comment. Re-implement using print_selected_record_field_types. @@ -2917,13 +2917,13 @@ 2010-08-11 Ken Werner <ken.werner@de.ibm.com> - * gdb/valarith.c (vector_binop): New function. + * valarith.c (vector_binop): New function. (scalar_binop): Likewise. (value_binop): Call scalar_binop or vector_binop depending on the types. - * gdb/eval.c (ptrmath_type_p): Return 0 in case of TYPE_VECTOR. + * eval.c (ptrmath_type_p): Return 0 in case of TYPE_VECTOR. (evaluate_subexp_with_coercion): Add vector check to not convert vectors to pointers. - * gdb/value.c (coerce_array): Add vector check to not coerce vectors. + * value.c (coerce_array): Add vector check to not coerce vectors. 2010-08-11 Brad Roberts <braddr@puremagic.com> @@ -6915,7 +6915,7 @@ 2010-04-21 Mike Frysinger <vapier@gentoo.org> - * gdb/sparc-tdep.c (sparc32_store_return_value): Add gdb_assert () + * sparc-tdep.c (sparc32_store_return_value): Add gdb_assert () for len <= 8. 2010-04-21 Chris Moller <cmoller@redhat.com> diff -Nru gdb-9.1/gdb/ChangeLog-2011 gdb-10.2/gdb/ChangeLog-2011 --- gdb-9.1/gdb/ChangeLog-2011 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/ChangeLog-2011 2020-09-13 02:33:40.000000000 +0000 @@ -2157,9 +2157,9 @@ symbol's symtab, use new argument OBJFILE. * cp-support.h (cp_scan_for_anonymous_namespaces): Changed function arguments by adding OBJFILE. - * gdb/dwarf2read.c (new_symbol_full): Change call to + * dwarf2read.c (new_symbol_full): Change call to cp_scan_for_anonymous_namespaces to match new signature. - * gdb/stabsread.c (define_symbol): Change call to + * stabsread.c (define_symbol): Change call to cp_scan_for_anonymous_namespaces to match new signature. 2011-10-20 Phil Muldoon <pmuldoon@redhat.com> @@ -6464,7 +6464,7 @@ 2011-05-26 Yao Qi <yao@codesourcery.com> - * gdb/gdb_thread_db.h: Remove HAVE_UINTPTR_T. + * gdb_thread_db.h: Remove HAVE_UINTPTR_T. 2011-05-26 Tristan Gingold <gingold@adacore.com> @@ -9448,7 +9448,7 @@ (cleanup_block_load_pc, copy_block_xfer): Likewise. * arm-linux-tdep.c (arm_linux_copy_svc): Callers update. (arm_catch_kernel_helper_return): Likewise. - * gdb/arm-tdep.h : Update function declarations. + * arm-tdep.h : Update function declarations. 2011-03-07 Michael Snyder <msnyder@vmware.com> @@ -9670,7 +9670,7 @@ 2011-03-03 Yao Qi <yao@codesourcery.com> - * gdb/arm-tdep.c (shifted_reg_val): Replace magic number 15 with + * arm-tdep.c (shifted_reg_val): Replace magic number 15 with ARM_PC_REGNUM. (thumb_get_next_pc_raw, arm_get_next_pc_raw): Likewise. (displaced_write_reg, displaced_read_reg): Likewise. @@ -10303,12 +10303,12 @@ 2011-02-18 Yao Qi <yao@codesourcery.com> - * gdb/arm-tdep.c (arm_displaced_step_copy_insn): Move code to ... + * arm-tdep.c (arm_displaced_step_copy_insn): Move code to ... (arm_process_displaced_insn): .. here. Remove parameter INSN. (thumb_process_displaced_insn): New. - * gdb/arm-linux-tdep.c (arm_linux_displaced_step_copy_insn): Update + * arm-linux-tdep.c (arm_linux_displaced_step_copy_insn): Update call to arm_process_displaced_insn. - * gdb/arm-tdep.h : Update declaration of arm_process_displaced_insn. + * arm-tdep.h : Update declaration of arm_process_displaced_insn. 2011-02-17 Tom Tromey <tromey@redhat.com> @@ -11267,8 +11267,8 @@ 2011-01-25 Mathieu Lacage <mathieu.lacage@inria.fr> PR/symtab 11766: - * gdb/objfiles.h (struct objfile) <addr_low>: New field. - * gdb/solib.c (solib_read_symbols): Check for addr_low in + * objfiles.h (struct objfile) <addr_low>: New field. + * solib.c (solib_read_symbols): Check for addr_low in equality test for objfile, initialize addr_low if needed. 2011-01-25 Pedro Alves <pedro@codesourcery.com> diff -Nru gdb-9.1/gdb/ChangeLog-2012 gdb-10.2/gdb/ChangeLog-2012 --- gdb-9.1/gdb/ChangeLog-2012 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/ChangeLog-2012 2020-09-13 02:33:40.000000000 +0000 @@ -835,8 +835,6 @@ rather than sort() method. Adjust syntax for Python 3 compatibility. * python/lib/gdb/command/type_printers.py: Ditto. - * doc/gdb.texinfo (Inferior.read_memory): Mention that the return - value is a memoryview object if Python 3. 2012-12-12 Tom Tromey <tromey@redhat.com> @@ -8703,7 +8701,7 @@ (GNULIB): New variable. (GNULIB_STDINT_H): Adjust. (AC_OUTPUT): Don't output gnulib/Makefile. - * gdb/defs.h: Include build-gnulib/config.h. + * defs.h: Include build-gnulib/config.h. * aclocal.m4: Regenerate. * config.in: Regenerate. * configure: Regenerate. @@ -13186,8 +13184,8 @@ 2012-01-02 Joel Brobecker <brobecker@adacore.com> - * gdb/common/gdb_thread_db.h, gdb/dbxread.c, gdb/environ.c, - gdb/gcore.h, gdb/rs6000-tdep.h, gdb/s390-nat.c, gdb/tic6x-tdep.c: + * common/gdb_thread_db.h, dbxread.c, environ.c, + gcore.h, rs6000-tdep.h, s390-nat.c, tic6x-tdep.c: Reformat the copyright header. 2012-01-02 Jan Kratochvil <jan.kratochvil@redhat.com> diff -Nru gdb-9.1/gdb/ChangeLog-2013 gdb-10.2/gdb/ChangeLog-2013 --- gdb-9.1/gdb/ChangeLog-2013 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/ChangeLog-2013 2020-09-13 02:33:40.000000000 +0000 @@ -6265,9 +6265,9 @@ 2013-06-21 Joel Brobecker <brobecker@adacore.com> - * gdb/gnulib/Makefile.in: Update date in copyright header. - * gdb/gnulib/configure.ac: Ditto. - * gdb/gnulib/update-gnulib.sh: Ditto. + * gnulib/Makefile.in: Update date in copyright header. + * gnulib/configure.ac: Ditto. + * gnulib/update-gnulib.sh: Ditto. 2013-06-21 Joel Brobecker <brobecker@adacore.com> diff -Nru gdb-9.1/gdb/ChangeLog-2014 gdb-10.2/gdb/ChangeLog-2014 --- gdb-9.1/gdb/ChangeLog-2014 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/ChangeLog-2014 2020-09-13 02:33:40.000000000 +0000 @@ -934,8 +934,6 @@ * Makefile.in (SUBDIR_PYTHON_OBS): Add py-infevents.o. (SUBDIR_PYTHON_SRCS): Add py-infevents.c. (py-infevents.o): New rule. - * doc/observer.texi (inferior_call_pre, inferior_call_post) - (memory_changed, register_changed): New observers. * infcall.c (call_function_by_hand): Notify observer before and after inferior call. * python/py-event.h (inferior_call_kind): New enum. @@ -1210,7 +1208,7 @@ 2014-11-24 Samuel Thibault <samuel.thibault@ens-lyon.org> Pushed by Joel Brobecker <brobecker@adacore.com> - * gdb/gnu-nat.c (inf_validate_procinfo): Multiply the number of + * gnu-nat.c (inf_validate_procinfo): Multiply the number of elements pi_len by the size of the elements before calling vm_deallocate. (inf_validate_task_sc): Likewise, and properly deallocate the @@ -2640,7 +2638,7 @@ 2014-10-15 Andreas Arnez <arnez@linux.vnet.ibm.com> - * gdb/infrun.c (process_event_stop_test): Apply + * infrun.c (process_event_stop_test): Apply gdbarch_addr_bits_remove to longjmp resume address. 2014-10-15 Pedro Alves <palves@redhat.com> @@ -6241,7 +6239,6 @@ microblaze-with-stack-protect microblaze and microblaze-expedite. * regformats/microblaze-with-stack-protect.dat: New file. * regformats/microblaze.dat: New file. - * doc/gdb.texinfo (MicroBlaze Features): Added. 2014-07-18 Tom Tromey <tromey@redhat.com> @@ -6947,7 +6944,7 @@ * nat/mips-linux-watch.h: Likewise. * Makefile.in (HFILES_NO_SRCDIR): Reflect new locations. (object file files): Reordered. - * gdb/copyright.py (EXCLUDE_LIST): Reflect new location + * copyright.py (EXCLUDE_LIST): Reflect new location of glibc_thread_db.h. 2014-06-20 Gary Benson <gbenson@redhat.com> diff -Nru gdb-9.1/gdb/ChangeLog-2015 gdb-10.2/gdb/ChangeLog-2015 --- gdb-9.1/gdb/ChangeLog-2015 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/ChangeLog-2015 2020-09-13 02:33:40.000000000 +0000 @@ -340,12 +340,12 @@ 2015-12-09 Luis Machado <lgustavo@codesourcery.com> - * gdb/mi/mi-cmd-var.c (mi_parse_format): Handle new "zero-hexadecimal" + * mi/mi-cmd-var.c (mi_parse_format): Handle new "zero-hexadecimal" format. - * gdb/varobj.c (varobj_format_string): Add "zero-hexadecimal" entry. + * varobj.c (varobj_format_string): Add "zero-hexadecimal" entry. (format_code): Add 'z' entry. (varobj_set_display_format): Handle FORMAT_ZHEXADECIMAL. - * gdb/varobj.h (varobj_display_formats) <FORMAT_ZHEXADECIMAL>: New enum + * varobj.h (varobj_display_formats) <FORMAT_ZHEXADECIMAL>: New enum field. * NEWS: Add new note to MI changes citing the new zero-hexadecimal format for -var-set-format. @@ -1085,7 +1085,7 @@ 2015-11-04 Marcin KoÅ›cielnicki <koriakin@0x04.net> PR/18376 - * gdb/s390-linux-tdep.c (s390_is_partial_instruction): New function. + * s390-linux-tdep.c (s390_is_partial_instruction): New function. (s390_software_single_step): New function. (s390_displaced_step_hw_singlestep): New function. (s390_gdbarch_init): Fill gdbarch slots with the above. @@ -1093,8 +1093,8 @@ 2015-11-04 Marcin KoÅ›cielnicki <koriakin@0x04.net> PR/18376 - * gdb/configure.tgt: Add linux-record.o to s390*-linux. - * gdb/s390-linux-tdep.c: #include "linux-record.h", "record-full.h" + * configure.tgt: Add linux-record.o to s390*-linux. + * s390-linux-tdep.c: #include "linux-record.h", "record-full.h" (s390_linux_record_tdep): New static global variable. (s390x_linux_record_tdep): New static global variable. (s390_all_but_pc_registers_record): New function. @@ -1744,7 +1744,7 @@ 2015-10-21 Aleksandar Ristovski <aristovski@qnx.com> - * gdb/nto-tdep.c (QNX_NOTE_NAME, QNX_INFO_SECT_NAME): New defines. + * nto-tdep.c (QNX_NOTE_NAME, QNX_INFO_SECT_NAME): New defines. (nto_sniff_abi_note_section): New function. (nto_elf_osabi_sniffer): Use new function to recognize nto specific binary. @@ -1766,7 +1766,7 @@ 2015-10-20 Aleksandar Ristovski <aristovski@qnx.com> - * gdb/nto-procfs.c (procfs_pid_to_exec_file): New function. + * nto-procfs.c (procfs_pid_to_exec_file): New function. (init_procfs_targets): Wire new function. 2015-10-20 Aleksandar Ristovski <aristovski@qnx.com> @@ -8207,11 +8207,6 @@ (arm_linux_fetch_inferior_registers): Call fetch_fpregs and fetch_regs instead. -2015-07-06 Andrew Burgess <andrew.burgess@embecosm.com> - - * doc/gdb.texinfo (TUI): Restructure documentation on TUI layout - and focus commands. - 2015-07-06 Joel Brobecker <brobecker@adacore.com> * NEWS: Create a new section for the next release branch. @@ -8232,10 +8227,6 @@ 2015-07-06 Andrew Burgess <andrew.burgess@embecosm.com> - * doc/gdb.texinfo (TUI): Add comma after @xref. - -2015-07-06 Andrew Burgess <andrew.burgess@embecosm.com> - * tui/tui-win.c (tui_set_focus): Use structure member 'generic' instead of casting the structure type. @@ -9259,7 +9250,7 @@ 2015-05-28 Kyle Huey <me@kylehuey.com> (tiny patch) - * gdb/arm-tdep.c (arm_gdbarch_init): Perform arm_abi detection on + * arm-tdep.c (arm_gdbarch_init): Perform arm_abi detection on ELFOSABI_GNU binaries. 2015-05-27 Doug Evans <dje@google.com> @@ -10895,7 +10886,7 @@ 2015-04-02 Gary Benson <gbenson@redhat.com> - * gdb/gdb_bfd.h (TARGET_SYSROOT_PREFIX): New definition. + * gdb_bfd.h (TARGET_SYSROOT_PREFIX): New definition. (is_target_filename): New declaration. (gdb_bfd_has_target_filename): Likewise. (gdb_bfd_open): Update documentation comment. @@ -11050,7 +11041,7 @@ 2015-03-31 Antoine Tremblay <antoine.tremblay@ericsson.com> * NEWS: Mention info os cpus support. - * gdb/nat/linux-osdata.c (linux_xfer_osdata_cpus): New function. + * nat/linux-osdata.c (linux_xfer_osdata_cpus): New function. (struct osdata_type): Add cpus entry, reorder the entries in alphabetical order. @@ -12525,7 +12516,7 @@ 2015-02-26 Antoine Tremblay <antoine.tremblay@ericsson.com> - * gdb/infcmd.c (print_return_value): use type_to_string to print type. + * infcmd.c (print_return_value): use type_to_string to print type. 2015-02-26 Jan Kratochvil <jan.kratochvil@redhat.com> @@ -13014,7 +13005,7 @@ 2015-02-09 Sergio Durigan Junior <sergiodj@redhat.com> PR remote/17946 - * gdb/remote.c (remote_parse_stop_reply): Fix wrong comparison + * remote.c (remote_parse_stop_reply): Fix wrong comparison of pointer against char. 2015-02-09 Mark Wielaard <mjw@redhat.com> diff -Nru gdb-9.1/gdb/ChangeLog-2016 gdb-10.2/gdb/ChangeLog-2016 --- gdb-9.1/gdb/ChangeLog-2016 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/ChangeLog-2016 2020-09-13 02:33:40.000000000 +0000 @@ -8556,7 +8556,7 @@ 2016-03-29 Don Breazeal <donb@codesourcery.com> - * gdb/value.c (value_actual_type): Fix formatting issue. + * value.c (value_actual_type): Fix formatting issue. 2016-03-23 Yao Qi <yao.qi@linaro.org> @@ -9336,7 +9336,7 @@ * amd64-tdep.c (amd64_ax_pseudo_register_collect): New function. (amd64_init_abi): Fill ax_pseudo_register_collect hook. - * gdb/i386-tdep.c (i386_pseudo_register_read_into_value): Remove + * i386-tdep.c (i386_pseudo_register_read_into_value): Remove misleading comment. (i386_pseudo_register_write): Ditto. (i386_ax_pseudo_register_collect): New function. diff -Nru gdb-9.1/gdb/ChangeLog-2017 gdb-10.2/gdb/ChangeLog-2017 --- gdb-9.1/gdb/ChangeLog-2017 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/ChangeLog-2017 2020-09-13 02:33:40.000000000 +0000 @@ -162,7 +162,7 @@ 2017-12-17 Stafford Horne <shorne@gmail.com> - * gdb/or1k-tdep.c (show_or1k_debug): Fix function parameter alignment. + * or1k-tdep.c (show_or1k_debug): Fix function parameter alignment. (or1k_analyse_inst): Likewise. (or1k_single_step_through_delay): Likewise. (or1k_frame_cache): Fix parameter alignment and use paddress() @@ -5354,12 +5354,12 @@ type to std::vector. * tracepoint.c (traceframe_available_memory): Change parameter type to std::vector, adjust. - * gdb/mi/mi-main.c (mi_cmd_trace_frame_collected): Adjust to + * mi/mi-main.c (mi_cmd_trace_frame_collected): Adjust to std::vector change. - * gdb/Makefile.in (SUBDIR_UNITTESTS_SRCS): Add + * Makefile.in (SUBDIR_UNITTESTS_SRCS): Add unittests/memrange-selftests.c. (SUBDIR_UNITTESTS_OBS): Add memrange-selftests.o. - * gdb/unittests/memrange-selftests.c: New file. + * unittests/memrange-selftests.c: New file. 2017-10-16 Pedro Alves <palves@redhat.com> @@ -15712,8 +15712,8 @@ 2017-03-21 Ivo Raisr <ivo.raisr@oracle.com> PR tdep/20928 - * gdb/sparc-tdep.h (gdbarch_tdep) <sparc64_ccr_type>: New field. - * gdb/sparc64-tdep.c (sparc64_ccr_type): New function. + * sparc-tdep.h (gdbarch_tdep) <sparc64_ccr_type>: New field. + * sparc64-tdep.c (sparc64_ccr_type): New function. (sparc64_fsr_type): Fix %fsr decoding. 2017-03-21 Tim Wiederhake <tim.wiederhake@intel.com> @@ -15798,8 +15798,6 @@ PR gdb/14441 * NEWS: Mention support for rvalue references in GDB and python. - * doc/gdb.texinfo (C Plus Plus Expressions): Mention that GDB - supports both lvalue and rvalue references. 2017-03-20 Artemiy Volkov <artemiyv@acm.org> @@ -15874,8 +15872,6 @@ 2017-03-20 Artemiy Volkov <artemiyv@acm.org> PR gdb/14441 - * doc/python.texi (Types in Python): Add TYPE_CODE_RVALUE_REF to - table of constants. * python/lib/gdb/command/explore.py: Support exploring values of rvalue reference types. * python/lib/gdb/types.py: Implement get_basic_type() for @@ -16338,7 +16334,6 @@ 2017-02-28 Peter Bergner <bergner@vnet.ibm.com> * NEWS: Mention new set/show disassembler-options commands. - * doc/gdb.texinfo: Document new set/show disassembler-options commands. * disasm.c: Include "arch-utils.h", "gdbcmd.h" and "safe-ctype.h". (prospective_options): New static variable. (gdb_disassembler::gdb_disassembler): Initialize @@ -17624,7 +17619,7 @@ 2017-01-27 Kees Cook <keescook@google.com> - * gdb/arm-linux-nat.c (arm_linux_fetch_inferior_registers): Call + * arm-linux-nat.c (arm_linux_fetch_inferior_registers): Call fetch_fpregs if target has fpa registers. (arm_linux_store_inferior_registers): Call store_fpregs if target has fpa registers. diff -Nru gdb-9.1/gdb/ChangeLog-2018 gdb-10.2/gdb/ChangeLog-2018 --- gdb-9.1/gdb/ChangeLog-2018 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/ChangeLog-2018 2020-09-13 02:33:40.000000000 +0000 @@ -368,18 +368,18 @@ 2018-12-19 Andrew Burgess <andrew.burgess@embecosm.com> - * gdb/dummy-frame.c (default_dummy_id): Defined new function. - * gdb/dummy-frame.h (default_dummy_id): Declare new function. - * gdb/frame-unwind.c (default_unwind_pc): Define new function. + * dummy-frame.c (default_dummy_id): Defined new function. + * dummy-frame.h (default_dummy_id): Declare new function. + * frame-unwind.c (default_unwind_pc): Define new function. (default_unwind_sp): Define new function. - * gdb/frame-unwind.h (default_unwind_pc): Declare new function. + * frame-unwind.h (default_unwind_pc): Declare new function. (default_unwind_sp): Declare new function. - * gdb/frame.c (frame_unwind_pc): Assume gdbarch_unwind_pc is + * frame.c (frame_unwind_pc): Assume gdbarch_unwind_pc is available. (get_frame_sp): Assume that gdbarch_unwind_sp is available. - * gdb/gdbarch.c: Regenerate. - * gdb/gdbarch.h: Regenerate. - * gdb/gdbarch.sh: Update definition of dummy_id, unwind_pc, and + * gdbarch.c: Regenerate. + * gdbarch.h: Regenerate. + * gdbarch.sh: Update definition of dummy_id, unwind_pc, and unwind_sp. Add additional header files to be included in generated file. @@ -839,7 +839,7 @@ 2018-11-29 Rajendra SY <rajendra.sy@gmail.com> PR gdb/23093 - * gdb/fbsd-tdep.c (fbsd_gdb_signal_from_target) + * fbsd-tdep.c (fbsd_gdb_signal_from_target) (fbsd_gdb_signal_to_target): New. (fbsd_init_abi): Install gdbarch "signal_from_target" and "signal_to_target" methods. @@ -1069,7 +1069,7 @@ 2018-11-21 Benno Fünfstück <benno.fuenfstueck@gmail.com> PR python/23714 - * gdb/python/python.c (execute_gdb_command): Call + * python/python.c (execute_gdb_command): Call prevent_dont_repeat earlier to avoid affecting dont_repeat. 2018-11-21 Andrew Burgess <andrew.burgess@embecosm.com> @@ -5038,7 +5038,7 @@ 2018-08-16 Gary Benson <gbenson@redhat.com> PR gdb/13000: - * gdb/main.c (captured_main_1): Exit with nonzero status + * main.c (captured_main_1): Exit with nonzero status in batch mode if the last command to be executed failed. * NEWS: Mention the above. @@ -7745,22 +7745,22 @@ 2018-06-29 Pedro Alves <palves@redhat.com> - * gdb/amd64-tdep.h (amd64_create_target_description): Add + * amd64-tdep.h (amd64_create_target_description): Add "segments" parameter. - * gdb/amd64-tdep.c (amd64_none_init_abi, amd64_x32_none_init_abi) + * amd64-tdep.c (amd64_none_init_abi, amd64_x32_none_init_abi) (_initialize_amd64_tdep): Update call to amd64_create_target_description. (amd64_target_description): Add "segments" parameter. Adjust the implementation to use it. - * gdb/amd64-linux-tdep.c (amd64_linux_read_description): Update + * amd64-linux-tdep.c (amd64_linux_read_description): Update call to amd64_create_target_description. - * gdb/amd64-windows-tdep.c (amd64_windows_init_abi): Likewise. - * gdb/arch/amd64.h (amd64_create_target_description): Add + * amd64-windows-tdep.c (amd64_windows_init_abi): Likewise. + * arch/amd64.h (amd64_create_target_description): Add "segments" register. - * gdb/arch/amd64.c (amd64_create_target_description): Add + * arch/amd64.c (amd64_create_target_description): Add "segments" parameter. Call create_feature_i386_64bit_segments only if SEGMENTS is true. - * gdb/gdbserver/win32-i386-low.c (i386_arch_setup): Update + * gdbserver/win32-i386-low.c (i386_arch_setup): Update call to amd64_create_target_description. 2018-06-29 Pedro Alves <palves@redhat.com> @@ -9239,7 +9239,7 @@ 2018-05-31 Alan Hayward <alan.hayward@arm.com> * Makefile.in: Add new header. - * gdb/arch/aarch64.h (sve_vg_from_vl): New macro. + * arch/aarch64.h (sve_vg_from_vl): New macro. (sve_vl_from_vg): Likewise. (sve_vq_from_vl): Likewise. (sve_vl_from_vq): Likewise. @@ -9262,7 +9262,6 @@ * arch/aarch64.c (aarch64_create_target_description): Check VQ. * arch/aarch64.h (aarch64_create_target_description): Add VQ. parmeter. - * doc/gdb.texinfo: Describe SVE feature * features/aarch64-sve.c: New file. 2018-05-31 Omair Javaid <omair.javaid@linaro.org> @@ -12316,7 +12315,7 @@ 2018-04-28 Dan Robertson <danlrobertson89@gmail.com> PR rust/23124 - * gdb/rust-exp.y (convert_params_to_types): Ensure that the params + * rust-exp.y (convert_params_to_types): Ensure that the params pointer is not null before dereferencing it. 2018-04-30 Tom Tromey <tom@tromey.com> @@ -12455,7 +12454,7 @@ 2018-04-29 John Reiser <jreiser@BitWagon.com> PR build/22873 - * gdb/Makefile.in: (.c:.l, .c:.y): Write the target only in the + * Makefile.in: (.c:.l, .c:.y): Write the target only in the last step, and do it atomically. 2018-04-27 Alexandre Oliva <aoliva@redhat.com> @@ -12690,13 +12689,6 @@ * configure: Rebuild. -2018-04-22 Rajendra SY <rajendra.sy@gmail.com> - - PR gdb/23095 - * gdb/testsuite/gdb.base/break-probes.exp: Pass shlib_load to - prepare_for_testing. Set normal_bp to r_debug_state if target - is bsd. - 2018-04-21 Pedro Alves <palves@redhat.com> Rajendra SY <rajendra.sy@gmail.com> @@ -12845,7 +12837,7 @@ (tdesc_add_bitfield): Likewise. (tdesc_add_flag): Likewise. (tdesc_add_enum_value): Likewise. - * gdb/target-descriptions.h (tdesc_create_enum): Likewise. + * target-descriptions.h (tdesc_create_enum): Likewise. (tdesc_add_typed_bitfield): Likewise. (tdesc_add_enum_value): Likewise. @@ -14798,7 +14790,7 @@ 2018-02-26 Maciej W. Rozycki <macro@mips.com> - * gdb/mips-tdep.c (mips_gdbarch_init): Reorder ABI determination + * mips-tdep.c (mips_gdbarch_init): Reorder ABI determination ahead of target description loading. 2018-02-26 Tom Tromey <tom@tromey.com> @@ -16416,7 +16408,7 @@ 2018-01-08 Samuel Thibault <samuel.thibault@ens-lyon.org> - * gdb/gnu-nat.c: Include <elf.h> and <link.h>. + * gnu-nat.c: Include <elf.h> and <link.h>. (gnu_xfer_auxv): New function. (gnu_xfer_partial): Call gnu_xfer_auxv when `object' is TARGET_OBJECT_AUXV. diff -Nru gdb-9.1/gdb/ChangeLog-2019 gdb-10.2/gdb/ChangeLog-2019 --- gdb-9.1/gdb/ChangeLog-2019 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/ChangeLog-2019 2020-09-13 02:33:40.000000000 +0000 @@ -0,0 +1,17396 @@ +2019-12-30 Tom Tromey <tom@tromey.com> + + * tui/tui-win.c (tui_border_mode_translate) + (tui_border_kind_translate_vline, tui_border_kind_translate_hline) + (tui_border_kind_translate_ulcorner) + (tui_border_kind_translate_urcorner) + (tui_border_kind_translate_llcorner) + (tui_border_kind_translate_lrcorner, tui_active_border_mode) + (tui_border_mode, tui_border_kind): Now static. + +2019-12-30 Tom Tromey <tom@tromey.com> + + * tui/tui-interp.c (tui_start_enabled): Now bool. + (_initialize_tui_interp): Update. + * tui/tui-hooks.c (tui_refreshing_registers): Now bool. + (tui_register_changed) + (tui_refresh_frame_and_register_information): Update. + * tui/tui-win.c (tui_update_variables): Return bool. + * tui/tui-win.h (tui_update_variables): Return bool. + * tui/tui.c (tui_get_command_dimension): Return bool. + * tui/tui.h (tui_get_command_dimension): Return bool. + +2019-12-29 Bernd Edlinger <bernd.edlinger@hotmail.de> + + * buildsym.c (buildsym_compunit::record_line): Do no longer ignore + line 65535. + +2019-12-27 Tom Tromey <tom@tromey.com> + + * tui/tui-source.c (tui_source_window::do_scroll_vertical): Remove + commented-out code. + * tui/tui.c: Remove #if 0 code. + +2019-12-27 Tom Tromey <tom@tromey.com> + + * cli/cli-cmds.c (print_disassembly): Reorder "if". + +2019-12-27 Tom Tromey <tom@tromey.com> + + * tui/tui.c (tui_active): Now bool. + (tui_finish_init): Likewise. + (tui_enable): Update. + (tui_disable): Update. + (tui_is_window_visible): Update. + * tui/tui.h (tui_active): Now bool. + +2019-12-27 Tom Tromey <tom@tromey.com> + + * tui/tui-source.c (tui_source_window::maybe_update): Update. + * tui/tui-regs.c (tui_data_window::display_registers_from): + Update. + * tui/tui-layout.c (tui_gen_win_info::resize): Update. + * tui/tui-data.h (struct tui_gen_win_info) <viewport_height>: + Remove. + * tui/tui-command.c (tui_cmd_window::resize): Update. + +2019-12-26 Christian Biesinger <cbiesinger@google.com> + + * ada-lang.c (ada_decode_symbol): Update. + * buildsym.c (add_symbol_to_list): Update. + * coffread.c (process_coff_symbol): Update. + * ctfread.c (ctf_add_enum_member_cb): Update. + (new_symbol): Update. + (ctf_add_var_cb): Update. + * dwarf2read.c (fixup_go_packaging): Update. + (dwarf2_compute_name): Update. + (new_symbol): Update. + * jit.c (finalize_symtab): Update. + * language.c (language_alloc_type_symbol): Update. + * mdebugread.c (new_symbol): Update. + * minsyms.c (minimal_symbol_reader::record_full): Update. + (minimal_symbol_reader::install): Update. + * psymtab.c (print_partial_symbols): Update. + (psymbol_hash): Update. + (psymbol_compare): Update. + (add_psymbol_to_bcache): Update. + (maintenance_check_psymtabs): Update. + * stabsread.c (define_symbol): Update. + * symtab.c (symbol_set_names): Rename to... + (general_symbol_info::compute_and_set_names): ...this. + (general_symbol_info::natural_name): Update. + (general_symbol_info::search_name): Update. + (fixup_section): Update. + * symtab.h (struct general_symbol_info) <name>: Rename to... + <m_name>: ...this. + <compute_and_set_names>: Rename from... + (symbol_set_names): ...this. + (SYMBOL_SET_NAMES): Remove. + (struct symbol) <ctor>: Update. + +2019-12-26 Christian Biesinger <cbiesinger@google.com> + + * NEWS: Mention that multithreaded symbol loading is now on by + default. + +2019-12-26 Ruslan Kabatsayev <b7.10110111@gmail.com> + + * dwarf2read.c (is_valid_DW_AT_defaulted) + (is_valid_DW_AT_calling_convention_for_type) + (is_valid_DW_AT_calling_convention_for_subroutine): Fix printing + ULONGEST variables on x86-32. + +2019-12-21 George Barrett <bob@bob131.so> + + * solib-svr4.c (svr4_handle_solib_event): Add fallback link + namespace test for when the debug struct isn't available. + +2019-12-21 Eli Zaretskii <eliz@gnu.org> + + * top.c (print_gdb_configuration): Print "--with-xxhash" or + "--without-xxhash" according to HAVE_LIBXXHASH. + +2019-12-20 Weimin Pan <weimin.pan@oracle.com> + * ctfread.c (ctf_file_key): Change type to objfile_key. + (struct ctf_context): Remove typedef. + (get_objfile_text_range): Use ANOFFSET to get text base. + +2019-12-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + * dwarf2read.c (is_valid_DW_AT_calling_convention_for_subroutine): + New function. + (read_subroutine_type): Validate the parsed + DW_AT_calling_convention value before assigning it to a + subroutine's calling_convention attribute. + * gdbtypes.h (struct func_type) <calling_convention>: Use + an enum bitfield as its type, instead of plain unsigned. + +2019-12-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + PR gdb/25054 + * infcall.c (call_function_by_hand_dummy): Update the argument- + passing section for call-by-value parameters. + (struct destructor_info): New struct. + (call_destructors): New auxiliary function. + +2019-12-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + * gnu-v3-abi.c (enum definition_style): New enum type. + (get_def_style): New function. + (is_user_provided_def): New function. + (is_implicit_def): New function. + (is_copy_or_move_constructor_type): New function. + (is_copy_constructor_type): New function. + (is_move_constructor_type): New function. + (gnuv3_pass_by_reference): Collect language_pass_by_ref_info + for a given type. + +2019-12-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + * language.h (struct language_pass_by_ref_info): New struct. + (struct language_defn)<la_pass_by_reference>: Change the signature + to return a language_pass_by_ref_info instead of an int. + (language_pass_by_reference): Ditto. + (default_pass_by_reference): Ditto. + Adjust the users listed below. + * arch-utils.c (default_return_in_first_hidden_param_p): + Update. + * cp-abi.c (cp_pass_by_reference): Update. + * cp-abi.h (cp_pass_by_reference): Update declaration. + (struct cp_abi_ops)<pass_by_reference>: Update. + * gnu-v3-abi.c (gnuv3_pass_by_reference): Update. + * infcall.c (call_function_by_hand_dummy): Update. + * language.c (language_pass_by_reference): Update. + (default_pass_by_reference): Update. + * tic6x-tdep.c (tic6x_return_value): Update. + +2019-12-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + * dwarf2read.c (dwarf2_add_member_fn): Read the DW_AT_defaulted + and DW_AT_deleted attributes of a function. + (read_structure_type): Read the DW_AT_calling_convention attribute + of a type. + (is_valid_DW_AT_defaulted): New function. + (is_valid_DW_AT_calling_convention_for_type): New function. + * gdbtypes.h: Include dwarf2.h. + (struct fn_field)<defaulted>: New field to store the + DW_AT_defaulted attribute. + (struct fn_field)<is_deleted>: New field to store the + DW_AT_deleted attribute. + (struct cplus_struct_type)<calling_convention>: New field to store + the DW_AT_calling_convention attribute. + (TYPE_FN_FIELD_DEFAULTED): New macro. + (TYPE_FN_FIELD_DELETED): New macro. + (TYPE_CPLUS_CALLING_CONVENTION): New macro. + * gdbtypes.c (dump_fn_fieldlists): Update for the changes made + to the .h file. + (print_cplus_stuff): Likewise. + +2019-12-20 Tom Tromey <tom@tromey.com> + + * tui/tui.c (tui_show_source): Remove. + * tui/tui.h (tui_show_source): Don't declare. + * tui/tui-out.c (tui_ui_out::do_field_string): Don't call + tui_show_source. + +2019-12-20 Tom Tromey <tom@tromey.com> + + * tui/tui-stack.h (tui_show_frame_info): Return bool. + * tui/tui-stack.c (tui_show_frame_info): Return bool. + * tui/tui-hooks.c (tui_refresh_frame_and_register_information): + Update. + +2019-12-20 Tom Tromey <tom@tromey.com> + + PR tui/18932: + * tui/tui-hooks.c (tui_refresh_frame_and_register_information): + Rename parameters. Handle the not-from-stack-frame case. + (from_stack, from_source_symtab): New globals. + (tui_before_prompt, tui_normal_stop): Update. + (tui_context_changed, tui_symtab_changed): New functions. + (tui_attach_detach_observers): Attach new observers. + +2019-12-20 Tom Tromey <tom@tromey.com> + + * source.c (struct current_source_location) <set, symtab, line>: + New methods. + <m_symtab, m_line>: Rename. Now private. + (get_current_source_symtab_and_line) + (set_default_source_symtab_and_line) + (set_current_source_symtab_and_line) + (clear_current_source_symtab_and_line, select_source_symtab) + (info_source_command, print_source_lines_base) + (info_line_command, search_command_helper): Update. + * observable.h (current_source_symtab_and_line_changed): Declare + observable. + * observable.c (current_source_symtab_and_line_changed): Define + observable. + +2019-12-20 Tom Tromey <tom@tromey.com> + + * tui/tui-hooks.c (tui_before_prompt): Change parameter to bool. + (tui_before_prompt, tui_normal_stop): Update. + +2019-12-20 Tom Tromey <tom@tromey.com> + + * tui/tui-winsource.c + (tui_source_window_base::update_source_window_as_is): Don't call + set_current_source_symtab_and_line. + +2019-12-20 Tom Tromey <tom@tromey.com> + + * tui/tui-stack.h (struct tui_locator_window) <set_locator_info>: + Take a symtab_and_line. + * tui/tui-stack.c (tui_locator_window::set_locator_info): Take a + symtab_and_line. + (tui_show_frame_info): Update. + +2019-12-20 Tom Tromey <tom@tromey.com> + + * tui/tui-stack.c (tui_show_frame_info): Don't call + update_exec_info. + +2019-12-20 Tom Tromey <tom@tromey.com> + + * tui/tui.c (tui_enable): Call tui_display_main. + +2019-12-20 Tom Tromey <tom@tromey.com> + + * tui/tui-disasm.c (tui_get_begin_asm_address): Use + get_current_source_symtab_and_line, and main_name. + +2019-12-20 Tom Tromey <tom@tromey.com> + + * tui/tui.c (tui_show_source): Update. + * tui/tui-winsource.h (tui_update_source_windows_with_line): Update. + * tui/tui-winsource.c (tui_update_source_windows_with_line): Take + a symtab_symbol_info, not a separate symtab and line. Simplify. + +2019-12-20 Tom Tromey <tom@tromey.com> + + * tui/tui-winsource.c (tui_update_source_windows_with_addr): + Simplify. + +2019-12-20 Tom Tromey <tom@tromey.com> + + * tui/tui-winsource.h (struct tui_source_window_base) + <set_contents, update_source_window_as_is, update_source_window>: + Take a sal, not a separate symtab and tui_line_or_address. + * tui/tui-winsource.c (tui_source_window_base::update_source_window) + (tui_source_window_base::update_source_window_as_is): Take a sal, + not a separate symtab and tui_line_or_address. + (tui_update_source_windows_with_addr) + (tui_update_source_windows_with_line) + (tui_source_window_base::rerender) + (tui_source_window_base::refill): Update. + * tui/tui-source.h (struct tui_source_window) <set_contents>: Take + a sal, not a separate symtab and tui_line_or_address. + * tui/tui-source.c (tui_source_window::set_contents): Take a sal, + not a separate symtab and tui_line_or_address. + (tui_source_window::maybe_update): Update. + * tui/tui-disasm.h (struct tui_disasm_window) <set_contents>: Take + a sal, not a separate symtab and tui_line_or_address. + * tui/tui-disasm.c (tui_disasm_window::set_contents): Take a sal, + not a separate symtab and tui_line_or_address. + (tui_disasm_window::do_scroll_vertical) + (tui_disasm_window::maybe_update): Update. + +2019-12-20 Tom Tromey <tom@tromey.com> + + * tui/tui-winsource.c (tui_source_window_base::refill): Use + start_line_or_addr. + * tui/tui-source.c (tui_source_window::do_scroll_vertical): Use + start_line_or_addr. + * tui/tui-disasm.c (tui_disasm_window::do_scroll_vertical): Use + start_line_or_addr. + +2019-12-20 Tom Tromey <tom@tromey.com> + + * tui/tui-winsource.h (struct tui_source_window_base) + <set_contents>: Return bool. + * tui/tui-winsource.c + (tui_source_window_base::update_source_window_as_is): Update. + * tui/tui-source.h (struct tui_source_window) <set_contents>: + Return bool. + * tui/tui-source.c (tui_source_window::set_contents): Return + bool. Simplify. + * tui/tui-disasm.h (struct tui_disasm_window) <set_contents>: + Return bool. + * tui/tui-disasm.c (tui_disasm_window::set_contents): Return + bool. + +2019-12-20 Tom Tromey <tom@tromey.com> + + * tui/tui-winsource.c (tui_update_source_windows_with_addr) + (tui_update_source_windows_with_line): Call update_source_window. + * tui/tui-source.h (struct tui_source_window) + <show_symtab_source>: Don't declare. + * tui/tui-source.c (tui_source_window::show_symtab_source): + Remove. + +2019-12-20 Tom Tromey <tom@tromey.com> + + * tui/tui-winsource.c (tui_update_source_windows_with_addr): Call + update_source_window directly. + * tui/tui-disasm.h (tui_show_disassem): Don't declare. + * tui/tui-disasm.c (tui_show_disassem): Remove. + +2019-12-20 Tom Tromey <tom@tromey.com> + + * tui/tui-winsource.c + (tui_source_window_base::update_source_window_as_is): Don't switch focus. + * tui/tui-disasm.c (tui_show_disassem): Don't switch focus. + +2019-12-20 Tom Tromey <tom@tromey.com> + + * tui/tui-winsource.h (struct tui_source_window_base) + <maybe_update>: Remove line_no and addr parameters. + * tui/tui-stack.c (tui_show_frame_info): Set PC on sal. Update. + * tui/tui-source.h (struct tui_source_window) <maybe_update>: + Update. + * tui/tui-source.c (tui_source_window::maybe_update): Remove + line_no and addr parameters. + * tui/tui-disasm.h (struct tui_disasm_window) <maybe_update>: + Update. + * tui/tui-disasm.c (tui_disasm_window::maybe_update): Remove + line_no and addr parameters. + +2019-12-20 Tom Tromey <tom@tromey.com> + + * tui/tui-winsource.c (tui_source_window_base::set_is_exec_point_at) + (tui_source_window_base::update_breakpoint_info): Remove asserts. + +2019-12-20 Tom Tromey <tom@tromey.com> + + * tui/tui-winsource.c (tui_update_source_windows_with_addr): Call + tui_show_disassem. + * tui/tui-disasm.h (tui_show_disassem_and_update_source): Don't + declare. + * tui/tui-disasm.c (tui_show_disassem_and_update_source): Remove. + +2019-12-20 Tom Tromey <tom@tromey.com> + + * tui/tui.h (tui_show_source): Remove parameters. + * tui/tui.c (tui_show_source): Remove parameters. + * tui/tui-out.c (tui_ui_out::do_field_string): Update. + +2019-12-20 Tom Tromey <tom@tromey.com> + + * tui/tui.c (tui_show_source): Update. + * tui/tui-winsource.c (tui_display_main): Update. + * tui/tui-stack.h (tui_update_locator_fullname): Change parameter + to symtab. + * tui/tui-stack.c (tui_update_locator_fullname): Change parameter + to symtab. + * tui/tui-disasm.c (tui_show_disassem_and_update_source): Update. + +2019-12-20 Tom Tromey <tom@tromey.com> + + PR tui/23619: + * tui/tui-io.c (tui_rl_saved_prompt): Remove. + (tui_redisplay_readline): Use rl_display_prompt. + (tui_prep_terminal): Update. + +2019-12-19 Christian Biesinger <cbiesinger@google.com> + + * configure: Regenerate. + * configure.ac: Quote variable arguments of test. + * gdbsupport/common.m4: Likewise. + +2019-12-19 Christian Biesinger <cbiesinger@google.com> + + * score-tdep.c (score7_analyze_prologue): Pass 2.0 instead of + 2 to pow (). + +2019-12-19 Christian Biesinger <cbiesinger@google.com> + + * tui/tui-source.c (tui_source_window::set_contents): Cast argument of + log10 to double to fix Solaris 11 with gcc 5.5. + +2019-12-19 Christian Biesinger <cbiesinger@google.com> + + * fbsd-tdep.c (fbsd_info_proc_files_entry): Rename local var + "sun" to "saddr_un". + +2019-12-19 Tom Tromey <tromey@adacore.com> + + * ui-out.h (enum class field_kind): Fix comment. + +2019-12-11 Tom Tromey <tromey@adacore.com> + + * xml-support.c (xml_fetch_content_from_file): Use FOPEN_RB. + +2019-12-18 Tom Tromey <tromey@adacore.com> + + PR build/25268: + * gdbsupport/thread-pool.c (set_thread_name): Expect "int" return + type on macOS. Add comment. + +2019-12-18 Simon Marchi <simon.marchi@efficios.com> + + * c-lang.c (c_get_string, asm_language_defn): Remove space + before tab. + +2019-12-18 Tom Tromey <tromey@adacore.com> + + PR build/25250: + * ui-out.c (ui_out::vmessage): Update. + * ui-out.h (enum class field_kind) <FIELD_STRING, FIELD_SIGNED>: + Rename. + (string_field): Update. + (signed_field): Update. + +2019-12-18 Simon Marchi <simon.marchi@efficios.com> + + * top.c (print_gdb_configuration): Adjust indentation. + +2019-12-17 Christian Biesinger <cbiesinger@google.com> + + * bsd-kvm.c: Include gdbsupport/pathstuff.h. + +2019-12-17 Simon Marchi <simon.marchi@polymtl.ca> + + * tui/tui-layout.h (class tui_layout_base): Add virtual + destructor. + +2019-12-16 Bernd Edlinger <bernd.edlinger@hotmail.de> + + * infcmd.c (prepare_one_step): Step over skipped inline functions. + * infrun.c (inline_frame_is_marked_for_skip): New helper function. + (process_event_stop_test): Keep stepping over skipped inline functions. + +2019-12-16 Simon Marchi <simon.marchi@polymtl.ca> + + * jit.c (struct gdb_block) <next>: Remove field. + (struct gdb_symtab) <~gdb_symtab>: Remove. + <blocks>: Change type to std::forward_list<gdb_block>. + (compare_block): Remove. + (jit_block_open_impl): Adjust to std::forward_list. Place the new + block at the beginning, don't mind about sorting. + (finalize_symtab): Adjust to std::forward_list, sort the blocks list + before using it. + +2019-12-16 Simon Marchi <simon.marchi@polymtl.ca> + + * jit.c (struct gdb_block): Add constructor, initialize + real_block and next fields. + <name>: Change type to gdb::unique_xmalloc_ptr. + (struct gdb_symtab) <~gdb_symtab>: Free blocks with delete. + (jit_block_open_impl): Allocate gdb_block with new. + (finalize_symtab): Adjust to gdb::unique_xmalloc_ptr. + +2019-12-16 Simon Marchi <simon.marchi@polymtl.ca> + + * jit.c: Include forward_list. + (struct gdb_symtab) <next>: Remove field. + (struct gdb_object) <symtabs>: Change type to + std::forward_list<gdb_symtab>. + (jit_object_open_impl): Allocate gdb_object with new. + (jit_symtab_open_impl): Adjust to std::forward_list. + (finalize_symtab): Don't delete symtab. + (jit_object_close_impl): Adjust to std::forward_list. Free + gdb_object with delete. + +2019-12-16 Simon Marchi <simon.marchi@polymtl.ca> + + * jit.c (struct gdb_symtab): Add constructor, destructor, + initialize fields. + <linetable>: Change type to unique_xmalloc_ptr. + <file_name>: Change type to std::string. + (jit_symtab_open_impl): Allocate gdb_symtab with new. + (jit_symtab_line_mapping_add_impl): Adjust. + (finalize_symtab): Adjust, call delete on stab. + +2019-12-16 Simon Marchi <simon.marchi@polymtl.ca> + + * jit.c (finalize_symtab): Set gdb_block_iter_tmp in loop. + +2019-12-16 Tom Tromey <tromey@adacore.com> + + * windows-nat.c (windows_nat_target::attach): Update. + * remote.c (extended_remote_target::attach): Update. + * procfs.c (procfs_target::attach): Update. + * nto-procfs.c (nto_procfs_target::attach): Update. + (nto_procfs_target::create_inferior): Update. + * inf-ptrace.c (inf_ptrace_target::attach): Update. + * gnu-nat.c (gnu_nat_target::attach): Update. + (gnu_nat_target::detach): Update. + * darwin-nat.c (darwin_nat_target::attach): Update. + * corefile.c (get_exec_file): Constify result. Remove extraneous + return. + * bsd-kvm.c (bsd_kvm_target_open): Update. + * gdbsupport/common-inferior.h (get_exec_file): Constify result. + +2019-12-16 Christian Biesinger <cbiesinger@google.com> + + * gdbsupport/common-defs.h: Remove workaround for a gnulib bug + (we no longer need to include time.h before pathmax.h) + +2019-12-15 Christian Biesinger <cbiesinger@google.com> + + * ada-exp.y (write_ambiguous_var): Update. + * coffread.c (process_coff_symbol): Update. + * ctfread.c (ctf_add_enum_member_cb): Update. + (new_symbol): Update. + * dwarf2read.c (fixup_go_packaging): Update. + (new_symbol): Update. + * language.c (language_alloc_type_symbol): Update. + * mdebugread.c (new_symbol): Update. + * minsyms.c (minimal_symbol_reader::record_full): Update. + * psymtab.c (add_psymbol_to_bcache): Update. + * stabsread.c (define_symbol): Update. + (read_enum_type): Update. + * symtab.c (symbol_set_language): Make this a member function... + (general_symbol_info::set_language): ... here. + * symtab.h (struct general_symbol_info) <set_language>: New function. + (SYMBOL_SET_LANGUAGE): Remove. + (symbol_set_language): Remove. + +2019-12-15 Christian Biesinger <cbiesinger@google.com> + + * ada-lang.c (ada_add_block_symbols): Update. + (ada_collect_symbol_completion_matches): Update. + * ax-gdb.c (gen_expr): Update. + * block.c (block_lookup_symbol): Update. + (block_lookup_symbol_primary): Update. + (block_find_symbol): Update. + * cp-namespace.c (cp_lookup_symbol_imports_or_template): Update. + * dbxread.c (process_one_symbol): Update. + * dictionary.c (insert_symbol_hashed): Update. + (collate_pending_symbols_by_language): Update. + (mdict_add_symbol): Update. + * dwarf-index-write.c (write_psymbols): Update. + * dwarf2read.c (fixup_go_packaging): Update. + * findvar.c (read_var_value): Update. + * ft32-tdep.c (ft32_skip_prologue): Update. + * go-lang.c (go_symbol_package_name): Update. + * language.h (scoped_switch_to_sym_language_if_auto:: + scoped_switch_to_sym_language_if_auto): Update. + * linespec.c (find_method): Update. + (find_label_symbols_in_block): Update. + * mdebugread.c (parse_symbol): Update. + * mi/mi-cmd-stack.c (list_arg_or_local): Update. + * minsyms.c (add_minsym_to_demangled_hash_table): Update. + (minimal_symbol_reader::install): Update. + * moxie-tdep.c (moxie_skip_prologue): Update. + * parse.c (parse_exp_in_context): Update. + * psymtab.c (psymbol_name_matches): Update. + (match_partial_symbol): Update. + (lookup_partial_symbol): Update. + (psymbol_hash): Update. + (psymbol_compare): Update. + * python/py-framefilter.c (extract_sym): Update. + (py_print_single_arg): Update. + * stabsread.c (define_symbol): Update. + * stack.c (print_frame_arg): Update. + (find_frame_funname): Update. + (info_frame_command_core): Update. + * symfile.c (set_initial_language): Update. + * symtab.c (symbol_set_demangled_name): Update. + (symbol_get_demangled_name): Update. + (symbol_set_language): Update. + (symbol_find_demangled_name): Update. + (symbol_set_names): Update. + (general_symbol_info::natural_name): Update. + (general_symbol_info::demangled_name): Update. + (general_symbol_info::search_name): Update. + (symbol_matches_search_name): Update. + (eq_symbol_entry): Update. + (iterate_over_symbols): Update. + (completion_list_add_symbol): Update. + (completion_list_add_msymbol): Update. + (completion_list_add_fields): Update. + * symtab.h (struct general_symbol_info) <language>: New function. + <language>: Rename to... + <m_language>: ...this. + (SYMBOL_LANGUAGE): Remove. + (MSYMBOL_LANGUAGE): Remove. + (struct symbol) <ctor>: Update. + * xstormy16-tdep.c (xstormy16_skip_prologue): Update. + +2019-12-15 Christian Biesinger <cbiesinger@google.com> + + * ada-exp.y (write_ambiguous_var): Call symbol_set_language to + set the language of sym. + * language.c (language_alloc_type_symbol): Likewise. + +2019-12-14 Sergio Durigan Junior <sergiodj@redhat.com> + + https://bugzilla.redhat.com/show_bug.cgi?id=1728147 + PR gdb/23613 + * bsd-kvm.c (bsd_kvm_target_open): Use 'gdb_abspath'. + * corelow.c: Include 'gdbsupport/pathstuff.h'. + (core_target_open): Use 'gdb_abspath'. + * gdbsupport/pathstuff.c (gdb_abspath): Guard against + 'current_directory == NULL' case. + * gdbsupport/pathstuff.h (gdb_abspath): Expand comment and + explain what happens when 'current_directory' is NULL. + * go32-nat.c (go32_nat_target::wait): Check if + 'current_directory' is NULL before call to 'chdir'. + * source.c (add_path): Use 'gdb_abspath'. + * top.c: Include 'gdbsupport/pathstuff.h'. + (init_history): Use 'gdb_abspath'. + (set_history_filename): Likewise. + * tracefile-tfile.c: Include 'gdbsupport/pathstuff.h'. + (tfile_target_open): Use 'gdb_abspath'. + +2019-12-13 Tom Tromey <tromey@adacore.com> + + * contrib/ari/gdb_ari.sh: Remove check for multiple calls to + warning or error. + +2019-12-13 Tom Tromey <tromey@adacore.com> + + * contrib/ari/gdb_ari.sh: Remove call to "fix" for "long long". + +2019-12-13 Tom Tromey <tromey@adacore.com> + + * contrib/ari/gdb_ari.sh: Handle -Wno- prefix. + +2019-12-13 Tom Tromey <tromey@adacore.com> + + * contrib/ari/gdb_ari.sh (usage): Use GNU style. + +2019-12-13 Tom Tromey <tromey@adacore.com> + + * gdbsupport/common-utils.c (string_printf, string_vprintf) + (string_vappendf): Add ARI comment. + +2019-12-13 Tom Tromey <tromey@adacore.com> + + * contrib/ari/gdb_ari.sh: Remove "fix" call for + floatformat_to_double. + * target-float.c (host_float_ops<T>::from_target): Add ARI + comment. + +2019-12-13 Tom Tromey <tromey@adacore.com> + + * contrib/ari/gdb_ari.sh: Remove "fix" call for abort. + * utils.c (abort_with_message, dump_core, internal_vproblem): Add + ARI marker to abort. + * event-top.c (handle_sigsegv): Add ARI marker to abort. + +2019-12-13 Tom Tromey <tromey@adacore.com> + + * contrib/ari/gdb_ari.sh: Fix floatformat_from_double text. + +2019-12-13 Tom Tromey <tromey@adacore.com> + + * contrib/ari/gdb_ari.sh: Remove ATTRIBUTE_UNUSED check. + +2019-12-13 Tom Tromey <tromey@adacore.com> + + * contrib/ari/gdb_ari.sh: Remove "boolean" and "var_boolean" + checks. + +2019-12-13 Tom Tromey <tromey@adacore.com> + + * gdbsupport/safe-iterator.h (class basic_safe_range) <begin, + end>: No longer "const". + +2019-12-13 Simon Marchi <simon.marchi@polymtl.ca> + + * jit.c: Fix indentation, replace spaces with tabs where + applicable. + +2019-12-13 Jozef Lawrynowicz <jozef.l@mittosystems.com> + + * configure.tgt: Match msp430-*-elf* targets when configuring GDB. + +2019-12-12 Tom Tromey <tom@tromey.com> + + * objfiles.h (struct objfile) <partial_symtabs>: Now a + unique_ptr. + +2019-12-12 Tom Tromey <tom@tromey.com> + + * progspace.h (objfile_list): New typedef. + (class unwrapping_objfile_iterator) + (struct unwrapping_objfile_range): Newl + (struct program_space) <objfiles_range>: Change type. + <objfiles>: Change return type. + <add_objfile>: Change type of "objfile" parameter. + <objfiles_list>: Now a list of shared_ptr. + * progspace.c (program_space::add_objfile): Change type of + "objfile". Update. + (program_space::remove_objfile): Update. + * objfiles.h (struct objfile) <~objfile>: Make public. + * objfiles.c (objfile::make): Update. + (objfile::unlink): Don't call delete. + +2019-12-12 Tom Tromey <tom@tromey.com> + + * symfile.c (symbol_file_clear): Update. + * progspace.h (struct program_space) <free_all_objfiles>: Declare + method. + * progspace.c (program_space::free_all_objfiles): New method. + * objfiles.h (free_all_objfiles): Don't declare. + * objfiles.c (free_all_objfiles): Move to program_space. + +2019-12-12 Tom Tromey <tom@tromey.com> + + * progspace.c (program_space::add_objfile) + (program_space::remove_objfile): Update. + (program_space::multi_objfile_p): Remove. + * objfiles.h (struct objfile) <next>: Remove. + * objfiles.c (objfile::objfile): Update. + (put_objfile_before): Update. + (unlink_objfile): Update. + * progspace.h (object_files): Remove. + (struct program_space) <objfiles_head>: Remove. + <objfiles_list>: New member. + <objfiles_range, objfiles_safe_range>: Change type. + (objfiles): Change return type. + (objfiles_safe): Update. + (multi_objfile_p): Rewrite and inline. + (object_files): Remove macro. + +2019-12-12 Tom Tromey <tom@tromey.com> + + * gdbsupport/safe-iterator.h (basic_safe_iterator): Simplify. Add + second constructor. + (basic_safe_range): New class. + +2019-12-12 Tom Tromey <tom@tromey.com> + + * progspace.c (program_space::multi_objfile_p): New method. + * printcmd.c (info_symbol_command): Update. + * maint.c (maintenance_translate_address): Update. + * objfiles.h (MULTI_OBJFILE_P): Remove. + * progspace.h (struct program_space) <multi_objfile_p>: New + method. + +2019-12-12 Tom Tromey <tom@tromey.com> + + * progspace.h (struct program_space) <remove_objfile>: Declare. + * progspace.c (program_space::remove_objfile): New method. + * objfiles.c (unlink_objfile): Remove. + (objfile::unlink): Call remove_objfile. + (objfile): Don't call unlink_objfile. + +2019-12-12 Tom Tromey <tom@tromey.com> + + * progspace.h (struct program_space) <add_objfile>: Declare + method. + * progspace.c (program_space::add_objfile): New method. + * objfiles.c (~objfile): Don't unlink objfile. + (put_objfile_before): Remove. + (add_separate_debug_objfile): Don't call put_objfile_before. + (objfile::make): Call add_objfile. Set new_objfiles_available on + the per-program-space data. + +2019-12-12 Tom Tromey <tom@tromey.com> + + * symfile.c (syms_from_objfile_1): Use objfile_up. + (syms_from_objfile_1, remove_symbol_file_command): Call unlink + method. + (reread_symbols): Use objfile_up. + * solib.c (update_solib_list, reload_shared_libraries_1): Call + unlink method. + * objfiles.h (struct objfile) <~objfile>: Now private. + <unlink>: New method. + (struct objfile_deleter): New. + (objfile_up): New typedef. + * objfiles.c (objfile::unlink): New method. + (free_objfile_separate_debug, free_all_objfiles) + (objfile_purge_solibs): Use it. + * jit.c (jit_unregister_code): Remove. + (jit_inferior_exit_hook, jit_event_handler): Call unlink on + objfile. + * compile/compile-object-run.c (do_module_cleanup): Call unlink on + objfile. + * compile/compile-object-load.c (compile_object_load): Use + objfile_up. + +2019-12-12 Tom Tromey <tom@tromey.com> + + * symfile.c (symbol_file_add_with_addrs): Pass "parent" to + objfile::make. + * objfiles.h (struct objjfile) <make>: No longer inline. + (add_separate_debug_objfile): Don't declare. + * objfiles.c (add_separate_debug_objfile): Now static. + (objfile::make): Move from objfiles.h. Call + add_separate_debug_objfile. Add "parent" parameter. + +2019-12-12 Tom Tromey <tom@tromey.com> + + * symfile.c (symbol_file_add_with_addrs): Use objfile::make. + * objfiles.h (struct objfile): Make constructor private. + <make>: New static method. + * jit.c (jit_object_close_impl): Update. + +2019-12-12 Simon Marchi <simon.marchi@polymtl.ca> + + * jit.c (jit_reader_try_read_symtab): Replace xmalloc/xfree with + gdb::byte_vector. + +2019-12-12 Tom Tromey <tromey@adacore.com> + + * xml-support.c (xml_fetch_content_from_file): Don't call + malloc_failure. + * utils.h (class gdb_argv): Remove malloc_failure comment. + * utils.c (gdb_argv::reset): Don't call malloc_failure. + +2019-12-12 Tom Tromey <tromey@adacore.com> + + * Makefile.in (ALL_TARGET_OBS): Add riscv-ravenscar-thread.o. + (HFILES_NO_SRCDIR): Add riscv-ravenscar-thread.h. + (ALLDEPFILES): Add riscv-ravenscar-thread.c. + * configure.tgt (riscv-*-*): Add riscv-ravenscar-thread.o. + * riscv-ravenscar-thread.c: New file. + * riscv-ravenscar-thread.h: New file. + * riscv-tdep.c (riscv_gdbarch_init): Call + register_riscv_ravenscar_ops. + +2019-12-12 Tom Tromey <tromey@adacore.com> + + * gdbsupport/thread-pool.c (set_thread_name): Use + ATTRIBUTE_UNUSED. + +2019-12-12 Luis Machado <luis.machado@linaro.org> + + * gdbsupport/safe-strerror.c: Don't include diagnostics.h. + (select_strerror_r): Use ATTRIBUTE_UNUSED instead of the diagnostics + macros. + +2019-12-11 Tom Tromey <tom@tromey.com> + + * tui/tui-win.c (tui_set_win_height_command): Call + tui_adjust_window_height. + (tui_adjust_win_heights, new_height_ok): Remove. + * tui/tui-layout.h (tui_adjust_window_height): Declare. + * tui/tui-layout.c (tui_adjust_window_height): New function. + +2019-12-11 Tom Tromey <tom@tromey.com> + + * tui/tui-win.c (tui_resize_all): Remove code, call + tui_apply_current_layout. + +2019-12-11 Tom Tromey <tom@tromey.com> + + * tui/tui-layout.h (tui_apply_current_layout): Declare. + * tui/tui-layout.c (standard_layouts, applied_layout): New + globals. + (tui_apply_current_layout): New function. + (show_layout): Set applied_layout. Call + tui_apply_current_layout. + (show_source_command, show_disasm_command) + (show_source_disasm_command, show_data) + (show_source_or_disasm_and_command): Remove. + (initialize_layouts): New function. + (_initialize_tui_layout): Call initialize_layouts. + +2019-12-11 Tom Tromey <tom@tromey.com> + + * tui/tui-layout.h (class tui_layout_base) + (class tui_layout_window, class tui_layout_split): New. + * tui/tui-layout.c (tui_get_window_by_name) + (tui_layout_window::clone, tui_layout_window::apply) + (tui_layout_window::get_sizes, tui_layout_window::add_split) + (tui_layout_split::add_window, tui_layout_split::clone) + (tui_layout_split::get_sizes) + (tui_layout_split::set_weights_from_heights) + (tui_layout_split::adjust_size, tui_layout_split::apply): New + functions. + (tui_layout_split::add_split, tui_layout_split::add_split) + (tui_layout_split::set_weights_from_heights) + (tui_layout_split::set_weights_from_heights): New functions. + +2019-12-11 Tom Tromey <tom@tromey.com> + + * tui/tui-wingeneral.c (tui_gen_win_info::make_window): Update. + * tui/tui-win.c (tui_adjust_win_heights, tui_resize_all): Update. + * tui/tui-layout.c (tui_gen_win_info::resize): Update. + * tui/tui-data.h (struct tui_point): Remove. + (struct tui_gen_win_info) <origin>: Remove. + <x, y>: New fields. + * tui/tui-command.c (tui_cmd_window::resize): Update. + +2019-12-11 Tom Tromey <tom@tromey.com> + + * tui/tui-stack.h (struct tui_locator_window) <min_height>: + Implement. + * tui/tui-regs.h (struct tui_data_item_window) <min_height>: + Implement. + * tui/tui-data.h (struct tui_gen_win_info) <min_height>: New + method. + (struct tui_win_info) <min_height>: Implement. + +2019-12-11 Tom Tromey <tom@tromey.com> + + * tui/tui-data.h (struct tui_gen_win_info) <can_box>: New method. + (struct tui_win_info) <can_box>: Update. + +2019-12-11 Tom Tromey <tom@tromey.com> + + * tui/tui-stack.h (struct tui_locator_window) <max_height>: New + method. + * tui/tui-regs.h (struct tui_data_item_window) <max_height>: New + method. + * tui/tui-data.h (struct tui_gen_win_info) <max_height>: New + method. + (struct tui_win_info) <max_height>: Now override. + +2019-12-11 Joel Brobecker <brobecker@adacore.com> + + * NEWS: Create a new section for the next release branch. + Rename the section of the current branch, now that it has + been cut. + +2019-12-11 Joel Brobecker <brobecker@adacore.com> + + GDB 9 branch created (27f7b2f64062ac9e52afc60509263c2702a9ebd0): + * version.in: Bump version to 10.0.50.DATE-git. + +2019-12-11 Tom Tromey <tromey@adacore.com> + + PR build/25268: + * gdbsupport/thread-pool.c (set_thread_name): New function. + (thread_pool::set_thread_count): Don't call pthread_setname_np. + (thread_pool::thread_function): Call set_thread_name. + +2019-12-11 Tom Tromey <tromey@adacore.com> + + * fbsd-tdep.c (fbsd_core_info_proc_status): Cast result of + bfd_get_signed_8. + +2019-12-11 Philippe Waroquiers <philippe.waroquiers@skynet.be> + + * NEWS: Document -raw-values option and the related setting commands. + * printcmd.c (print_command_parse_format): Do not set opts->raw off, + only set it on when /r is given. + * valprint.c (value_print_option_defs): New element raw-values. + * Makefile.in: Add the new file. + +2019-12-10 Christian Biesinger <cbiesinger@google.com> + + * gdbsupport/safe-strerror.c: Supress the unused function warning + for select_strerror_r. + +2019-12-10 Christian Biesinger <cbiesinger@google.com> + + * config.in: Regenerate. + * configure: Regenerate. + * gdbsupport/agent.c (gdb_connect_sync_socket): Call + safe_strerror instead of strerror. + * gdbsupport/common.m4: Don't check for strerror. + * gdbsupport/safe-strerror.c: Support both the glibc version + of strerror_r and the XSI version. + +2019-12-10 Tom Tromey <tromey@adacore.com> + + * ada-typeprint.c (print_choices): Use a single "?". + (print_variant_part): Print "?" if the discriminant name + is not known. + +2019-12-10 George Barrett <bob@bob131.so> + + Fix scripted probe breakpoints. + * breakpoint.c (tracepoint_probe_breakpoint_ops): Move + declaration forward. + (breakpoint_ops_for_event_location_type) + (breakpoint_ops_for_event_location): Add function definitions. + (break_command_1, trace_command): Use + breakpoint_ops_for_event_location. + * breakpoint.h (breakpoint_ops_for_event_location): Add function + declarations. + * guile/scm-breakpoint.c (gdbscm_register_breakpoint_x): Use + breakpoint_ops_for_event_location. + * python/py-breakpoint.c (bppy_init): Use + breakpoint_ops_for_event_location. + +2019-12-09 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + * gdbtypes.c (rank_one_type): Return INCOMPATIBLE_TYPE_BADNESS + when ranking an lvalue argument for an rvalue parameter. + +2019-12-08 Wataru Ashihara <wataash@wataash.com> + + * darwin-nat.c (darwin_nat_target::create_inferior): Fix + template argument for scoped_restore_tmpl from bool to int. + +2019-12-07 Keith Seitz <keiths@redhat.com> + + * build-id.c (build_id_bfd_get): Permit bfd_core, too. + (build_id_to_debug_bfd): Make static, rewriting to use + build_id_to_bfd_suffix. + (build_id_to_bfd_suffix): Copy of build_id_to_debug_bfd, + adding `suffix' parameter. Append SUFFIX to file names + when searching for matching files. + (build_id_to_debug_bfd): Use build_id_to_bfd_suffix. + (build_id_to_exec_bfd): Likewise. + * build-id.h (build_id_to_debug_bfd): Clarify that function + searches for BFD of debug info file. + (build_id_to_exec_bfd): Declare. + * corelow.c: Include build-id.h. + (locate_exec_from_corefile_build_id): New function. + (core_target_open): If no executable BFD is found, + search for a core file BFD using build-id. + +2019-12-06 Christian Biesinger <cbiesinger@google.com> + + * bcache.c: Put in namespace gdb. + * bcache.h: Likewise. + * gdbtypes.c (check_types_worklist): Update. + (types_deeply_equal): Update. + * macrotab.c (struct macro_table) <bcache>: Update. + (new_macro_table): Update. + * macrotab.h (struct bcache): Put this forward declaration + inside namespace gdb. + (new_macro_table): Update. + * objfiles.h (struct objfile_per_bfd_storage) <filename_cache>: + Update. + <macro_cache>: Update. + * psymtab.h: (psymtab_storage) <psymbol_cache>: Update. + +2019-12-06 Tom de Vries <tdevries@suse.de> + + PR symtab/24971 + * block.c (best_symbol, better_symbol): New function. + (block_lookup_symbol_primary, block_lookup_symbol): Prefer def over + decl. + +2019-12-06 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + * gdbtypes.h: Define the REFERENCE_SEE_THROUGH_BADNESS value. + * gdbtypes.c (rank_one_type): Use REFERENCE_SEE_THROUGH_BADNESS + for ranking see-through reference cases. + +2019-12-06 Philippe Waroquiers <philippe.waroquiers@skynet.be> + * stack.c (faas_command): Check a command is provided. + * thread.c (taas_command, tfaas_command): Likewise. + +2019-12-05 Philippe Waroquiers <philippe.waroquiers@skynet.be> + * inferior.c (prune_inferiors): Only call delete_inferior, + Do not modify the inferior list. + +2019-12-05 Simon Marchi <simon.marchi@polymtl.ca> + + * c-exp.y: Update calls to lookup_typename, + lookup_signed_typename and lookup_unsigned_typename. + * c-lang.c (evaluate_subexp_c): Likewise. + * cp-namespace.c (cp_lookup_symbol_imports_or_template): + Likewise. + * eval.c (binop_promote): Likewise. + * gdbtypes.c (lookup_typename): Remove gdbarch parameter. + (lookup_unsigned_typename): Likewise. + (lookup_signed_typename): Likewise. + * gdbtypes.h (lookup_unsigned_typename): Likewise. + (lookup_signed_typename): Likewise. + (lookup_typename): Likewise. + * guile/scm-type.c (tyscm_lookup_typename): Update calls to + lookup_typename, lookup_signed_typename, + lookup_unsigned_typename. + * m2-exp.y: Likewise. + * printcmd.c (printf_wide_c_string): Likewise. + (ui_printf): Likewise. + * python/py-type.c (typy_lookup_typename): Likewise. + * python/py-xmethods.c (python_xmethod_worker::invoke): + Likewise. + * rust-exp.y: Likewise. + +2019-12-04 Christian Biesinger <cbiesinger@google.com> + + * configure.nat (obsd64): Add missing files x86-nat.o and + nat/x86-dregs.o. + +2019-12-04 Tom Tromey <tom@tromey.com> + + * valprint.c (val_print_string): Use metadata_style. + * go-valprint.c (print_go_string): Use metadata style. + * p-valprint.c (pascal_object_print_static_field): Use metadata + style. + * cp-valprint.c (cp_print_static_field): Use metadata style. + +2019-12-04 Andrew Burgess <andrew.burgess@embecosm.com> + Chris January <chris.january@arm.com> + + * f-exp.y (COMPLEX_KEYWORD, SINGLE, DOUBLE, PRECISION): New + tokens. + (typebase): New patterns for complex, single/double precision, and + single/double complex. + (f77_keywords): Change token for complex keyword, and add single, + double, and precision keywords. + +2019-12-04 Simon Marchi <simon.marchi@polymtl.ca> + + * avr-tdep.c (_initialize_avr_tdep): Improve help of command + "info io_registers". + +2019-12-04 Simon Marchi <simon.marchi@polymtl.ca> + + * regcache.c (cooked_read_test): Initialize thread list of + mock_inferior. + +2019-12-04 Simon Marchi <simon.marchi@polymtl.ca> + + * aarch64-linux-tdep.c: Remove includes. + +2019-12-04 Simon Marchi <simon.marchi@polymtl.ca> + + * aarch64-tdep.c: Remove includes. + +2019-12-04 Simon Marchi <simon.marchi@efficios.com> + + * filtered-iterator.h (filtered_iterator) <operator==, + operator!=>: Compare wrapped iterators, not wrapped pointers. + * Makefile.in (SUBDIR_UNITTESTS_SRCS): Add + unittests/filtered_iterator-selftests.c. + * unittests/filtered_iterator-selftests.c: New file. + +2019-12-04 Tom Tromey <tromey@adacore.com> + + * gdbtypes.c (create_range_type): Inherit endianity + from base type. + +2019-12-04 Tom Tromey <tromey@adacore.com> + + * ada-lang.c (decode_constrained_packed_array) + (ada_value_assign, value_assign_to_component): Update. + * dwarf2loc.c (rw_pieced_value, access_memory) + (dwarf2_compile_expr_to_ax): Update. + * dwarf2read.c (dwarf2_add_field): Update. + * eval.c (evaluate_subexp_standard): Update. + * gdbarch.c, gdbarch.h: Rebuild. + * gdbarch.sh (bits_big_endian): Remove. + * gdbtypes.h (union field_location): Update comment. + * target-descriptions.c (make_gdb_type): Update. + * valarith.c (value_bit_index): Update. + * value.c (struct value) <bitpos>: Update comment. + (unpack_bits_as_long, modify_field): Update. + * value.h (value_bitpos): Update comment. + +2019-12-04 Tom Tromey <tromey@adacore.com> + + * gdbtypes.c (type_byte_order): Move earlier. Assert for unknown + endian-ness. + +2019-12-04 Tom Tromey <tromey@adacore.com> + + * dwarf2read.c (dwarf2_init_float_type) + (dwarf2_init_complex_target_type): Add byte_order parameter. + (read_base_type): Compute byte order earlier. + * gdbtypes.c (init_float_type): Add byte_order parameter. + * gdbtypes.h (init_float_type): Add byte_order parameter. + +2019-12-04 Tom Tromey <tromey@adacore.com> + + * unittests/tui-selftests.c: Conditionally include tui-winsource.h. + +2019-12-04 Tom Tromey <tromey@adacore.com> + + * dwarf2read.c (process_structure_scope): Initialize + "discr_offset". + +2019-12-04 Andrew Burgess <andrew.burgess@embecosm.com> + + * mi/mi-symbol-cmds.c (mi_symbol_info): Take extra parameter, and + add it into the search spec. + (parse_max_results_option): New function. + (mi_info_functions_or_variables): Parse -max-results flag and pass + it to mi_symbol_info. + (mi_cmd_symbol_info_modules): Likewise. + (mi_cmd_symbol_info_types): Likewise. + * symtab.c (global_symbol_searcher::add_matching_symbols): Change + return type to bool, change result container into a set, and don't + add new results if we have enough already. + (global_symbol_searcher::add_matching_msymbols): Change return + type to bool, and don't add new results if we have enough already. + (sort_search_symbols_remove_dups): Delete. + (global_symbol_searcher::search): Early exit from search loop when + we have enough results. Use a std::set to collect the results + from calling add_matching_symbols. + * symtab.h (global_symbol_searcher) <set_max_seach_results>: New + member function. + (global_symbol_searcher) <m_max_search_results>: New member + variable. + (global_symbol_searcher) <add_matching_symbols>: Update header + comment and change return type to bool. + (global_symbol_searcher) <add_matching_msymbols>: Update header + comment and change return type to bool. + +2019-12-04 Andrew Burgess <andrew.burgess@embecosm.com> + + * symtab.c (symbol_search::compare_search_syms): Update header + comment. + (global_symbol_searcher::is_suitable_msymbol): New function. + (global_symbol_searcher::expand_symtabs): New function. + (global_symbol_searcher::add_matching_symbols): New function. + (global_symbol_searcher::add_matching_msymbols): New function. + (global_symbol_searcher::search): Move most of the content + into the new functions above, and call them as needed. + * symtab.h (global_symbol_searcher) <expand_symtabs>: New member + function. + (global_symbol_searcher) <add_matching_symbols>: New member + function. + (global_symbol_searcher) <add_matching_msymbols>: New member + function. + (global_symbol_searcher) <is_suitable_msymbol>: New member + function. + +2019-12-04 Andrew Burgess <andrew.burgess@embecosm.com> + + * mi/mi-cmds.c (mi_cmds): Add -symbol-info-module-functions and + -symbol-info-module-variables entries. + * mi/mi-cmds.h (mi_cmd_symbol_info_module_functions): Declare. + (mi_cmd_symbol_info_module_variables): Declare. + * mi/mi-symbol-cmds.c + (module_symbol_search_iterator): New typedef. + (output_module_symbols_in_single_module_and_file): New function. + (output_module_symbols_in_single_module): New function. + (mi_info_module_functions_or_variables): New function. + (mi_cmd_symbol_info_module_functions): New function. + (mi_cmd_symbol_info_module_variables): New function. + * NEWS: Mention new MI command. + +2019-12-03 Christian Biesinger <cbiesinger@google.com> + + * bcache.c (hash): Remove. + (hash_continue): Remove. + * bcache.h (hash): Remove. + (hash_continue): Remove. + (struct bcache) <ctor>: Update. + * psymtab.c (psymbol_hash): Update. + * stabsread.c (hashname): Update. + * utils.h (fast_hash): Add an argument for a start value, + defaulting to zero. + +2019-12-03 Philippe Waroquiers <philippe.waroquiers@skynet.be> + * symtab.c (symbol_cache_clear_slot): Move close to cleared type. + (destroy_block_symbol_cache): New function. + (symbol_cache:~symbol_cache) Call destroy_block_symbol_cache. + (resize_symbol_cache): Likewise. + +2019-12-02 Tom Tromey <tom@tromey.com> + + * unittests/tui-selftests.c (run_tests): Make conditional. + (_initialize_tui_selftest): Make conditional. + +2019-12-02 Christian Biesinger <cbiesinger@google.com> + + * aix-thread.c (debug_aix_thread): Change type to bool. + +2019-12-02 Luis Machado <luis.machado@linaro.org> + + * infrun.c (follow_fork_inferior): Remove outdated FIXME comment. + +2019-12-01 Andrew Burgess <andrew.burgess@embecosm.com> + + * dwarf2read.c (read_tag_string_type): Read the fields required to + make a dynamic string, and possibly create a dynamic range for the + string. + (attr_to_dynamic_prop): Setup is_reference based on the type of + attribute being processed. + * gdbtypes.c (is_dynamic_type_internal): Handle TYPE_CODE_STRING. + (resolve_dynamic_array): Rename to... + (resolve_dynamic_array_or_string): ...this, update header comment, + and accept TYPE_CODE_STRING. + (resolve_dynamic_type_internal): Handle TYPE_CODE_STRING. + +2019-12-01 Andrew Burgess <andrew.burgess@embecosm.com> + + * dwarf2read.c (dwarf2_per_cu_int_type): New function, takes most + of its implementation from... + (dwarf2_per_cu_addr_sized_int_type): ...here, which now just calls + the new function. + +2019-12-01 Andrew Burgess <andrew.burgess@embecosm.com> + + * dwarf2read.c (read_subrange_type): Read bit and byte stride and + create a range with stride where appropriate. + * f-valprint.c: Include 'gdbarch.h'. + (f77_print_array_1): Take the stride into account when walking the + array. Also convert the stride into addressable units. + * gdbtypes.c (create_range_type): Initialise the stride to + constant zero. + (create_range_type_with_stride): New function, initialise the + range as normal, and then setup the stride. + (has_static_range): Include the stride here. Also change the + return type to bool. + (create_array_type_with_stride): Consider the range stride if the + array isn't given its own stride. + (resolve_dynamic_range): Resolve the stride if needed. + * gdbtypes.h (struct range_bounds) <stride>: New member variable. + (struct range_bounds) <flag_is_byte_stride>: New member variable. + (TYPE_BIT_STRIDE): Define. + (TYPE_ARRAY_BIT_STRIDE): Define. + (create_range_type_with_stride): Declare. + * valarith.c (value_subscripted_rvalue): Take range stride into + account when walking the array. + +2019-12-01 Tom Tromey <tom@tromey.com> + + * tui/tui-win.c (tui_all_windows_info): Treat inactive TUI + specially. + +2019-12-01 Tom Tromey <tom@tromey.com> + + * tui/tui-winsource.c (tui_copy_source_line): Don't advance past + \0. + * unittests/tui-selftests.c: New file. + * Makefile.in (SUBDIR_UNITTESTS_SRCS): Add tui-selftests.c. + +2019-12-01 Tom Tromey <tom@tromey.com> + + * tui/tui.c (tui_enable): Call tui_update_variables earlier. + +2019-12-01 Tom Tromey <tom@tromey.com> + + * NEWS: Document new settings. + * tui/tui-wingeneral.c (box_win): Apply appropriate border style. + * tui/tui-win.c (_initialize_tui_win): Add border style + observers. + * tui/tui-io.h (tui_apply_style): Declare. + * tui/tui-io.c (tui_apply_style): Rename from apply_style. No + longer static. + (apply_ansi_escape, tui_set_reverse_mode): Update. + * cli/cli-style.h (class cli_style_option) <add_setshow_commands>: + Add "skip_intensity" parameter. + <changed>: New member. + <do_set_value>: Declare. + (tui_border_style, tui_active_border_style): Declare. + * cli/cli-style.c (tui_border_style, tui_active_border_style): New + globals. + (cli_style_option): Initialize "changed". + (cli_style_option::do_set_value): New function. + (cli_style_option::add_setshow_commands): Add "skip_intensity" + parameter. Update. + (STYLE_ADD_SETSHOW_COMMANDS): Add "SKIP" parameter. + (_initialize_cli_style): Update. Create TUI border style + commands. + +2019-12-01 Tom Tromey <tom@tromey.com> + + * tui/tui-winsource.h (tui_copy_source_line): Add "ndigits" + parameter. + * tui/tui-winsource.c (tui_copy_source_line): Add "ndigits" + parameter. + * tui/tui-win.h (compact_source): Declare. + * tui/tui-win.c (compact_source): New global. + (tui_set_compact_source, tui_show_compact_source): New functions. + (_initialize_tui_win): Add "compact-source" setting. + * tui/tui-source.c (tui_source_window::set_contents): Handle + compact_source setting. + * tui/tui-disasm.c (tui_disasm_window::set_contents): Update. + * NEWS: Document new setting. + +2019-11-30 Tom Tromey <tom@tromey.com> + + * dwarf2read.c (dwarf2_add_field): Include field offset when + computing variant part length. + +2019-11-30 Philippe Waroquiers <philippe.waroquiers@skynet.be> + * NEWS: Mention define-prefix. Tell that command names can now + contain a . character. + +2019-11-30 Philippe Waroquiers <philippe.waroquiers@skynet.be> + + * command.h (valid_cmd_char_p): Declare. + * cli/cli-decode.c (valid_cmd_char_p): New function factorizing + the check of valid command char. + (find_command_name_length, valid_user_defined_cmd_name_p): Use + valid_cmd_char_p. + * cli/cli-script.c (validate_comname): Likewise. + * completer.c (gdb_completer_command_word_break_characters): + Do not remove . from the word break char, update comments. + (complete_line_internal_1): Use valid_cmd_char_p. + * guile/scm-cmd.c (gdbscm_parse_command_name): Likewise. + * python/py-cmd.c (gdbpy_parse_command_name): Likewise. + +2019-11-30 Philippe Waroquiers <philippe.waroquiers@skynet.be> + + * cli/cli-script.c (do_define_command): Ensure a redefined + prefix command is kept as a prefix command. + (define_prefix_command): New function. + (show_user_1): Report user defined prefixes. + (_initialize_cli_script): Create the new 'define-prefix' command. + Add completers for 'define' and 'document'. + * top.c (execute_command): If command is a user-defined prefix only + command, report the list of commands for this prefix command. + +2019-11-29 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + * valops.c (find_oload_champ): Improve debug output. + +2019-11-29 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + * valops.c (find_oload_champ): Print part of debug messages + before the badness vector is std::move'd. + +2019-11-28 Tom Tromey <tom@tromey.com> + + * value.c (creal_internal_fn): Fix comment. + +2019-11-28 Tom Tromey <tom@tromey.com> + + * gdbtypes.h (struct range_bounds) <flag_upper_bound_is_count, + flag_bound_evaluated>: Now unsigned. + +2019-11-28 Tom Tromey <tom@tromey.com> + + * guile/guile-internal.h (vlscm_scm_from_value_unsafe): Don't + declare. + +2019-11-28 Mihails Strasuns <mihails.strasuns@intel.com> + + * jit.c (jit_bfd_try_read_symtab): Fix printed function name in the + debug output. + * jit.c (jit_unregister_code): Add debug print to match + `jit_register_code`. + +2019-11-27 Christian Biesinger <cbiesinger@google.com> + + * NEWS: Mention the new multithreaded symbol loading. + +2019-11-27 Christian Biesinger <cbiesinger@google.com> + + * maint.c (n_worker_threads): Default to 0. + (worker_threads_disabled): New function. + * maint.h (worker_threads_disabled): New function. + * minsyms.c (minimal_symbol_reader::record_full): Call symbol_set_names + here if worker_threads_disabled () is true. + (minimal_symbol_reader::install): Skip all threading if + worker_threads_disabled () is true. + +2019-11-27 Christian Biesinger <cbiesinger@google.com> + + * minsyms.c (add_minsym_to_hash_table): Use a previously computed + hash code if possible. + (add_minsym_to_demangled_hash_table): Likewise. + (minimal_symbol_reader::install): Compute the hash codes for msymbol + on the background thread. + * symtab.h (struct minimal_symbol) <hash_value, demangled_hash_value>: + Add these fields. + +2019-11-27 Christian Biesinger <cbiesinger@google.com> + + * minsyms.c (minimal_symbol_reader::install): Also compute the hash + of the mangled name on the background thread. + * symtab.c (symbol_set_names): Allow passing in the hash of the + linkage_name. + * symtab.h (symbol_set_names): Likewise. + +2019-11-27 Kevin Buettner <kevinb@redhat.com> + + * dwarf2read.c (inherit_abstract_dies): Ensure that delayed + physnames are computed for inherited DIEs. + +2019-11-27 Tom Tromey <tromey@adacore.com> + + * dwarf2read.h (struct dwarf2_per_objfile): Remove unnecessary + backslashes. + * cp-support.c: Remove unnecessary backslashes. + +2019-11-27 Christian Biesinger <cbiesinger@google.com> + + * ada-exp.y (write_ambiguous_var): Replace SYMBOL_SET_LINKAGE_NAME + with sym->set_linkage_name. + * coffread.c (coff_read_enum_type): Likewise. + * mdebugread.c (parse_symbol): Likewise. + * stabsread.c (patch_block_stabs): Likewise. + (define_symbol): Likewise. + (read_enum_type): Likewise. + (common_block_end): Likewise. + * symtab.h (struct general_symbol_info) <set_linkage_name>: New + function. + (SYMBOL_SET_LINKAGE_NAME): Remove. + * xcoffread.c (process_xcoff_symbol): Replace SYMBOL_SET_LINKAGE_NAME + with sym->set_linkage_name. + +2019-11-27 Andrew Burgess <andrew.burgess@embecosm.com> + + * mi/mi-cmds.c (mi_cmds): Add 'symbol-info-modules' entry. + * mi/mi-cmds.h (mi_cmd_symbol_info_modules): Declare. + * mi/mi-symbol-cmds.c (mi_cmd_symbol_info_modules): New function. + * NEWS: Mention new MI command. + +2019-11-27 Andrew Burgess <andrew.burgess@embecosm.com> + + * mi/mi-cmds.c (mi_cmds): Add '-symbol-info-functions', + '-symbol-info-types', and '-symbol-info-variables'. + * mi/mi-cmds.h (mi_cmd_symbol_info_functions): Declare. + (mi_cmd_symbol_info_types): Declare. + (mi_cmd_symbol_info_variables): Declare. + * mi/mi-symbol-cmds.c: Add 'source.h' and 'mi-getopt.h' includes. + (output_debug_symbol): New function. + (output_nondebug_symbol): New function. + (mi_symbol_info): New function. + (mi_info_functions_or_variables): New function. + (mi_cmd_symbol_info_functions): New function. + (mi_cmd_symbol_info_types): New function. + (mi_cmd_symbol_info_variables): New function. + * NEWS: Mention new commands. + +2019-11-27 Andrew Burgess <andrew.burgess@embecosm.com> + + * symtab.c (symbol_to_info_string): New function, most content + moved from print_symbol_info, but updated to return a std::string. + (print_symbol_info): Update to use symbol_to_info_string and print + returned string. + * symtab.h (symbol_to_info_string): Declare new function. + +2019-11-27 Andrew Burgess <andrew.burgess@embecosm.com> + + * python/python.c (gdbpy_rbreak): Convert to using + global_symbol_searcher. + * symtab.c (file_matches): Convert return type to bool, change + file list to std::vector, update header comment. + (search_symbols): Rename to... + (global_symbol_searcher::search): ...this and update now its + a member function of global_symbol_searcher. Take account of the + changes to file_matches. + (symtab_symbol_info): Convert to using global_symbol_searcher. + (rbreak_command): Likewise. + (search_module_symbols): Likewise. + * symtab.h (enum symbol_search): Update comment. + (search_symbols): Remove declaration. + (class global_symbol_searcher): New class. + +2019-11-26 Tom Tromey <tromey@adacore.com> + + * cp-support.c (_initialize_cp_support): Conditionally initialize + gdb_demangle_attempt_core_dump. + +2019-11-26 Tom Tromey <tom@tromey.com> + + * python/py-function.c (fnpy_init): Update. + * value.h (add_internal_function): Adjust declaration. + * value.c (function_destroyer): Remove. + (do_add_internal_function): Don't set destroyer or copy name. + (add_internal_function): Take unique_xmalloc_ptr<char> for name. + Set name_allocated. + * python/py-cmd.c (cmdpy_destroyer): Don't free "name". + (cmdpy_init): Set name_allocated. + * cli/cli-decode.h (struct cmd_list_element) <name_allocated>: New + member. + (~cmd_list_element): Free "name" if needed. + +2019-11-26 Tom Tromey <tom@tromey.com> + + * value.h (add_internal_function): Add new overload. Move + documentation from value.h. + * value.c (do_add_internal_function): New function. + (add_internal_function): Use it. Add new overload. + (function_destroyer): Don't free doc. + * python/py-function.c (fnpy_init): Update. + +2019-11-26 Tom Tromey <tom@tromey.com> + + * python/py-cmd.c (cmdpy_destroyer): Don't free "doc". + (cmdpy_init): Set "doc_allocated". + +2019-11-26 Tom Tromey <tom@tromey.com> + + * gdbsupport/thread-pool.c (thread_pool::set_thread_count): Set + name of worker thread. + * gdbsupport/common.m4 (GDB_AC_COMMON): Check for + pthread_setname_np. + * configure, config.in: Rebuild. + +2019-11-26 Tom Tromey <tom@tromey.com> + + * python/python.c (class gdbpy_gil): New. + (struct gdbpy_event): Add constructor, destructor, operator(). + (gdbpy_post_event): Use run_on_main_thread. + (gdbpy_initialize_events): Remove. + (do_start_initialization): Update. + +2019-11-26 Tom Tromey <tom@tromey.com> + + * NEWS: Add entry. + * maint.c (_initialize_maint_cmds): Add "worker-threads" maint + commands. Call update_thread_pool_size. + (update_thread_pool_size, maintenance_set_worker_threads): New + functions. + (n_worker_threads): New global. + +2019-11-26 Christian Biesinger <cbiesinger@google.com> + Tom Tromey <tom@tromey.com> + + * minsyms.c (minimal_symbol_reader::install): Use + parallel_for_each. + * gdbsupport/parallel-for.h: New file. + * Makefile.in (HFILES_NO_SRCDIR): Add gdbsupport/parallel-for.h. + +2019-11-26 Christian Biesinger <cbiesinger@google.com> + Tom Tromey <tom@tromey.com> + + * gdbsupport/thread-pool.h: New file. + * gdbsupport/thread-pool.c: New file. + * Makefile.in (COMMON_SFILES): Add thread-pool.c. + (HFILES_NO_SRCDIR): Add thread-pool.h. + +2019-11-26 Tom Tromey <tom@tromey.com> + + * event-top.h (thread_local_segv_handler): Declare. + * event-top.c (thread_local_segv_handler): New global. + (install_handle_sigsegv, handle_sigsegv): New functions. + (async_init_signals): Install SIGSEGV handler. + * cp-support.c (gdb_demangle_jmp_buf): Change type. Now + thread-local. + (report_failed_demangle): New function. + (gdb_demangle): Make core_dump_allowed atomic. Remove signal + handler-setting code, instead use segv_handler. Run warning code + on main thread. + +2019-11-26 Tom Tromey <tom@tromey.com> + + * run-on-main-thread.c: New file. + * run-on-main-thread.h: New file. + * unittests/main-thread-selftests.c: New file. + * Makefile.in (SUBDIR_UNITTESTS_SRCS): Add + main-thread-selftests.c. + (HFILES_NO_SRCDIR): Add run-on-main-thread.h. + (COMMON_SFILES): Add run-on-main-thread.c. + +2019-11-26 Tom Tromey <tom@tromey.com> + + * main.c (setup_alternate_signal_stack): Remove. + (captured_main_1): Use gdb::alternate_signal_stack. + * gdbsupport/alt-stack.h: New file. + +2019-11-26 Tom Tromey <tom@tromey.com> + + * gdbsupport/signals-state-save-restore.c (original_signal_mask): + Remove comment. + (save_original_signals_state, restore_original_signals_state): Use + gdb_sigmask. + * linux-nat.c (block_child_signals, restore_child_signals_mask) + (_initialize_linux_nat): Use gdb_sigmask. + * guile/guile.c (_initialize_guile): Use block_signals. + * Makefile.in (HFILES_NO_SRCDIR): Add gdb-sigmask.h. + * gdbsupport/gdb-sigmask.h: New file. + * event-top.c (async_sigtstp_handler): Use gdb_sigmask. + * cp-support.c (gdb_demangle): Use gdb_sigmask. + * gdbsupport/common.m4 (GDB_AC_COMMON): Check for + pthread_sigmask. + * configure, config.in: Rebuild. + * gdbsupport/block-signals.h: New file. + +2019-11-26 Tom Tromey <tom@tromey.com> + + * acinclude.m4: Include ax_pthread.m4. + * Makefile.in (PTHREAD_CFLAGS, PTHREAD_LIBS): New variables. + (INTERNAL_CFLAGS_BASE): Use PTHREAD_CFLAGS. + (CLIBS): Use PTHREAD_LIBS. + (aclocal_m4_deps): Add ax_pthread.m4. + * config.in, configure: Rebuild. + * gdbsupport/common.m4 (GDB_AC_COMMON): Check for std::thread. + +2019-11-26 Tom Tromey <tom@tromey.com> + + * symtab.h (struct minimal_symbol) <name_set>: New member. + * minsyms.c (minimal_symbol_reader::record_full): Copy name. + Don't call symbol_set_names. + (minimal_symbol_reader::install): Call symbol_set_names. + +2019-11-26 Philippe Waroquiers <philippe.waroquiers@skynet.be> + + * python/python.c (gdbpy_enter::~gdbpy_enter): Release GIL after + restore_active_ext_lang, as GIL is needed for (indirectly) + called PyOS_InterruptOccurred. + +2019-11-26 Simon Marchi <simon.marchi@efficios.com> + + * sparc-nat.c (sparc_xfer_wcookie): Sync declaration with + definition. + +2019-11-26 Simon Marchi <simon.marchi@efficios.com> + + * remote-sim.c (simulator_command): Make static, remove + declaration. + +2019-11-26 Simon Marchi <simon.marchi@efficios.com> + + * unittests/array-view-selftests.c (check_ptr_size_ctor2): Make + static. + * unittests/basic_string_view/capacity/1.cc (test01): Likewise. + * unittests/basic_string_view/cons/char/1.cc (test01): Likewise. + (main): Likewise. + * unittests/basic_string_view/cons/char/2.cc (test03): Likewise. + (main): Likewise. + * unittests/basic_string_view/cons/char/3.cc (test05): Likewise. + (main): Likewise. + * unittests/basic_string_view/element_access/char/1.cc (test01): + Likewise. + (main): Likewise. + * unittests/basic_string_view/element_access/char/empty.cc (main): + Likewise. + * unittests/basic_string_view/element_access/char/front_back.cc + (test01): Likewise. + (main): Likewise. + * unittests/basic_string_view/inserters/char/2.cc (test05): + Likewise. + (main): Likewise. + * unittests/basic_string_view/modifiers/remove_prefix/char/1.cc + (test01): Likewise. + (main): Likewise. + * unittests/basic_string_view/modifiers/remove_suffix/char/1.cc + (test01): Likewise. + (main): Likewise. + * unittests/basic_string_view/modifiers/swap/char/1.cc (test01): + Likewise. + * unittests/basic_string_view/operations/compare/char/1.cc + (test01): Likewise. + (main): Likewise. + * unittests/basic_string_view/operations/compare/char/13650.cc + (test01): Likewise. + * unittests/basic_string_view/operations/copy/char/1.cc (test01): + Likewise. + (main): Likewise. + * unittests/basic_string_view/operations/data/char/1.cc (test01): + Likewise. + (main): Likewise. + * unittests/basic_string_view/operations/find/char/1.cc (test01): + Likewise. + (main): Likewise. + * unittests/basic_string_view/operations/find/char/2.cc (test02): + Likewise. + (main): Likewise. + * unittests/basic_string_view/operations/find/char/3.cc (test03): + Likewise. + (main): Likewise. + * unittests/basic_string_view/operations/find/char/4.cc (main): + Likewise. + * unittests/basic_string_view/operations/rfind/char/1.cc (test01): + Likewise. + (main): Likewise. + * unittests/basic_string_view/operations/rfind/char/2.cc (test02): + Likewise. + (main): Likewise. + * unittests/basic_string_view/operations/rfind/char/3.cc (test03): + Likewise. + (main): Likewise. + * unittests/basic_string_view/operations/substr/char/1.cc + (test01): Likewise. + (main): Likewise. + * unittests/basic_string_view/operators/char/2.cc (main): + Likewise. + * unittests/optional/assignment/1.cc (test): Likewise. + * unittests/optional/assignment/2.cc (test): Likewise. + * unittests/optional/assignment/3.cc (test): Likewise. + * unittests/optional/assignment/4.cc (test): Likewise. + * unittests/optional/assignment/5.cc (test): Likewise. + * unittests/optional/assignment/6.cc (test): Likewise. + * unittests/optional/assignment/7.cc (test): Likewise. + * unittests/optional/cons/copy.cc (test): Likewise. + * unittests/optional/cons/default.cc (test): Likewise. + * unittests/optional/cons/move.cc (test): Likewise. + * unittests/optional/cons/value.cc (test): Likewise. + * unittests/optional/in_place.cc (test): Likewise. + * unittests/optional/observers/1.cc (test): Likewise. + * unittests/optional/observers/2.cc (test): Likewise. + +2019-11-26 Simon Marchi <simon.marchi@efficios.com> + + * tui-win.h (tui_set_var_cmd): Remove. + * tui-win.c (tui_set_var_cmd): Make static. + +2019-11-26 Simon Marchi <simon.marchi@efficios.com> + + * breakpoint.h (hbreak_command_wrapper, thbreak_command_wrapper, + rbreak_command_wrapper): Remove. + * symtab.c (rbreak_command_wrapper): Remove. + +2019-11-26 Simon Marchi <simon.marchi@efficios.com> + + * inferior.h (info_terminal_command): Remove declaration. + * inflow.c (info_terminal_command): Make static. + +2019-11-26 Simon Marchi <simon.marchi@efficios.com> + + * inferior.c (exit_inferior_silent): Remove. + +2019-11-26 Simon Marchi <simon.marchi@efficios.com> + + * dictionary.c (dict_empty, mdict_empty): Remove. + * dictionary.c (mdict_empty): Remove. + +2019-11-26 Simon Marchi <simon.marchi@efficios.com> + + * arc-tdep.c (arc_insn_get_memory_base_reg): Make static. + (arc_insn_get_memory_offset): Likewise. + (arc_insn_dump): Likewise. + * cp-support.c (test_cp_symbol_name_matches): Likewise. + * csky-linux-tdep.c (csky_supply_fregset): Likewise. + * dictionary.c (dict_iterator_next): Likewise. + (dict_iter_match_first): Likewise. + (dict_iter_match_next): Likewise. + * f-lang.c (evaluate_subexp_f): Likewise. + * hppa-tdep.c (hppa_read_pc): Likewise. + * i386-tdep.c (i386_floatformat_for_type): Likewise. + * parse.c (write_exp_elt_msym): Likewise. + * ppc-linux-tdep.c (ppc_floatformat_for_type): Likewise. + * remote.c (remote_packet_size): Likewise. + (remote_notif_stop_parse): Likewise. + * rs6000-aix-tdep.c (aix_sighandle_frame_sniffer): Likewise. + * s12z-tdep.c (s12z_disassemble_info): Likewise. + * source.c (prepare_path_for_appending): Likewise. + * sparc64-linux-tdep.c + (sparc64_linux_handle_segmentation_fault); Likewise. + * stack.c (frame_selection_by_function_completer): Likewise. + +2019-11-26 Simon Marchi <simon.marchi@efficios.com> + + * completer.c (set_gdb_completion_word_break_characters): + Remove. + +2019-11-26 Simon Marchi <simon.marchi@efficios.com> + + * dwarf-index-write.c: Include dwarf-index-write.h. + * mi/mi-interp.c: Include mi/mi-interp.h. + +2019-11-26 Simon Marchi <simon.marchi@efficios.com> + + * aarch32-tdep.c: Include aarch32-tdep.h. + * aarch32-tdep.h: Forward-declare struct target_desc. + +2019-11-26 Christian Biesinger <cbiesinger@google.com> + + * linux-nat.c (detach_one_lwp): Call safe_strerror instead of + strerror. + * nto-procfs.c (nto_procfs_target::create_inferior): Likewise. + * windows-nat.c (windows_nat_target::create_inferior): Likewise. + +2019-11-25 Tom de Vries <tdevries@suse.de> + + * contrib/words.sh: Add -c option. + +2019-11-25 Christian Biesinger <cbiesinger@google.com> + + * solib.c (solib_find_1): Change int to bool. + (exec_file_find): Change int to bool. + (solib_find): Change int to bool. + (solib_read_symbols): Change int to bool. + (solib_used): Change int to bool. + (solib_add): Change int to bool. + (info_sharedlibrary_command): Change int to bool. + (solib_contains_address_p): Change int to bool. + (solib_keep_data_in_core): Change int to bool. + (in_solib_dynsym_resolve_code): Change int to bool. + (reload_shared_libraries_1): Change int to bool. + (gdb_sysroot_changed): Change int to bool. + * solib.h (solib_read_symbols): Change int to bool. + (solib_contains_address_p): Change int to bool. + (solib_keep_data_in_core): Change int to bool. + (in_solib_dynsym_resolve_code): Change int to bool. + (libpthread_name_p): Change int to bool. + +2019-11-25 Luis Machado <luis.machado@linaro.org> + + * NEWS (New Commands): Mention "set debug remote-packet-max-chars". + * remote.c (REMOTE_DEBUG_MAX_CHAR): Remove. + (remote_packet_max_chars): New static global. + (show_remote_packet_max_chars): New function. + (remote_target::putpkt_binary): Adjust to use new + remote_packet_max_chars option. + (remote_target::getpkt_or_notif_sane_1): Likewise. + (_initialize_remote): Register new remote-packet-max-chars option. + +2019-11-24 Simon Marchi <simon.marchi@efficios.com> + + * m68k-linux-nat.c: Include gdbarch.h. + +2019-11-24 Tom Tromey <tom@tromey.com> + + * symfile.c (read_symbols): Update. + * psymtab.c (require_partial_symbols): Change type of "verbose" to + bool. + (psym_map_symtabs_matching_filename, find_pc_sect_psymtab) + (psym_lookup_symbol, psym_find_last_source_symtab) + (psym_forget_cached_source_info, psym_print_stats) + (psym_expand_symtabs_for_function, psym_expand_all_symtabs) + (psym_expand_symtabs_with_fullname, psym_map_symbol_filenames) + (psym_map_matching_symbols, psym_expand_symtabs_matching) + (psym_find_compunit_symtab_by_address) + (maintenance_print_psymbols, maintenance_info_psymtabs) + (maintenance_check_psymtabs): Update. + * psymtab.h (require_partial_symbols): Change type of "verbose" to + bool. + +2019-11-22 Tom Tromey <tom@tromey.com> + + * observable.h: Update comments. + +2019-11-22 Tom Tromey <tromey@adacore.com> + + * ada-tasks.c (ada_task_is_alive): Make parameter const. + (print_ada_task_info): Don't try to fetch thread id if task is not + alive. + +2019-11-22 Christian Biesinger <cbiesinger@google.com> + + * ada-exp.y: Update. + * ada-lang.c (sort_choices): Update. + (ada_print_symbol_signature): Update. + (resolve_subexp): Update. + (ada_parse_renaming): Update. + (ada_read_renaming_var_value): Update. + (lesseq_defined_than): Update. + (remove_extra_symbols): Update. + (remove_irrelevant_renamings): Update. + (ada_add_block_symbols): Update. + (ada_collect_symbol_completion_matches): Update. + (ada_is_renaming_symbol): Update. + (aggregate_assign_from_choices): Update. + (ada_evaluate_subexp): Update. + (ada_has_this_exception_support): Update. + (ada_is_non_standard_exception_sym): Update. + (ada_add_exceptions_from_frame): Update. + (ada_add_global_exceptions): Update. + (ada_print_subexp): Update. + * ax-gdb.c (gen_var_ref): Update. + (gen_maybe_namespace_elt): Update. + (gen_expr_for_cast): Update. + (gen_expr): Update. + * block.h: Update. + * blockframe.c (find_pc_partial_function): Update. + * breakpoint.c (print_breakpoint_location): Update. + (update_static_tracepoint): Update. + * btrace.c (ftrace_print_function_name): Update. + (ftrace_function_switched): Update. + * buildsym.c (find_symbol_in_list): Update. + * c-exp.y: Update. + * c-typeprint.c (c_print_typedef): Update. + (c_type_print_template_args): Update. + * cli/cli-cmds.c (edit_command): Update. + (list_command): Update. + (print_sal_location): Update. + * coffread.c (patch_opaque_types): Update. + (process_coff_symbol): Update. + (coff_read_enum_type): Update. + * compile/compile-c-symbols.c (c_symbol_substitution_name): Update. + (convert_one_symbol): Update. + (hash_symname): Update. + (eq_symname): Update. + * compile/compile-cplus-symbols.c (convert_one_symbol): Update. + * compile/compile-cplus-types.c (debug_print_scope): Update. + * compile/compile-loc2c.c (do_compile_dwarf_expr_to_c): Update. + * compile/compile-object-load.c (get_out_value_type): Update. + * cp-namespace.c (cp_scan_for_anonymous_namespaces): Update. + (search_symbol_list): Update. + (cp_lookup_symbol_imports_or_template): Update. + * cp-support.c (overload_list_add_symbol): Update. + * ctfread.c (psymtab_to_symtab): Update. + * dbxread.c (cp_set_block_scope): Update. + * dictionary.c (iter_match_first_hashed): Update. + (iter_match_next_hashed): Update. + (insert_symbol_hashed): Update. + (iter_match_next_linear): Update. + * dictionary.h: Update. + * dwarf2loc.c (func_get_frame_base_dwarf_block): Update. + (locexpr_describe_location_piece): Update. + (locexpr_describe_location_1): Update. + (locexpr_generate_c_location): Update. + (loclist_describe_location): Update. + (loclist_generate_c_location): Update. + * dwarf2read.c (dw2_debug_names_lookup_symbol): Update. + (read_func_scope): Update. + (process_enumeration_scope): Update. + (new_symbol): Update. + (dwarf2_const_value): Update. + (dwarf2_symbol_mark_computed): Update. + * eval.c (evaluate_funcall): Update. + (evaluate_subexp_standard): Update. + * expprint.c (print_subexp_standard): Update. + (dump_subexp_body_standard): Update. + * f-valprint.c (info_common_command_for_block): Update. + * findvar.c (get_hosting_frame): Update. + (default_read_var_value): Update. + * go-lang.c (go_symbol_package_name): Update. + * guile/scm-block.c (bkscm_print_block_smob): Update. + * guile/scm-symbol.c (syscm_print_symbol_smob): Update. + (gdbscm_symbol_name): Update. + (gdbscm_symbol_linkage_name): Update. + (gdbscm_symbol_print_name): Update. + * infcall.c (get_function_name): Update. + * infcmd.c (jump_command): Update. + (finish_command): Update. + * infrun.c (insert_exception_resume_breakpoint): Update. + * linespec.c (canonicalize_linespec): Update. + (create_sals_line_offset): Update. + (convert_linespec_to_sals): Update. + (complete_label): Update. + (find_label_symbols_in_block): Update. + * m2-typeprint.c (m2_print_typedef): Update. + * mdebugread.c (mdebug_reg_to_regnum): Update. + (parse_symbol): Update. + (mylookup_symbol): Update. + * mi/mi-cmd-stack.c (list_arg_or_local): Update. + (list_args_or_locals): Update. + * objc-lang.c (compare_selectors): Update. + (info_selectors_command): Update. + (compare_classes): Update. + (info_classes_command): Update. + (find_imps): Update. + * p-typeprint.c (pascal_print_typedef): Update. + * printcmd.c (build_address_symbolic): Update. + (info_address_command): Update. + (print_variable_and_value): Update. + * python/py-framefilter.c (extract_sym): Update. + (py_print_single_arg): Update. + * python/py-symbol.c (sympy_str): Update. + (sympy_get_name): Update. + (sympy_get_linkage_name): Update. + * python/python.c (gdbpy_rbreak): Update. + * record-btrace.c (btrace_get_bfun_name): Update. + (btrace_call_history): Update. + * rust-lang.c (rust_print_typedef): Update. + * solib-frv.c (frv_fdpic_find_canonical_descriptor): Update. + * stabsread.c (stab_reg_to_regnum): Update. + (define_symbol): Update. + (read_enum_type): Update. + (common_block_end): Update. + (cleanup_undefined_types_1): Update. + (scan_file_globals): Update. + * stack.c (print_frame_arg): Update. + (print_frame_args): Update. + (find_frame_funname): Update. + (info_frame_command_core): Update. + (iterate_over_block_locals): Update. + (print_block_frame_labels): Update. + (do_print_variable_and_value): Update. + (iterate_over_block_arg_vars): Update. + (return_command): Update. + * symmisc.c (dump_symtab_1): Update. + (print_symbol): Update. + * symtab.c (eq_symbol_entry): Update. + (symbol_cache_dump): Update. + (lookup_language_this): Update. + (find_pc_sect_line): Update. + (skip_prologue_sal): Update. + (symbol_search::compare_search_syms): Update. + (treg_matches_sym_type_name): Update. + (search_symbols): Update. + (print_symbol_info): Update. + (rbreak_command): Update. + (completion_list_add_symbol): Update. + (find_gnu_ifunc): Update. + (get_symbol_address): Update. + (search_module_symbols): Update. + (info_module_subcommand): Update. + * symtab.h (SYMBOL_NATURAL_NAME): Remove. + (SYMBOL_LINKAGE_NAME): Remove. + (SYMBOL_DEMANGLED_NAME): Remove. + (SYMBOL_PRINT_NAME): Remove. + (SYMBOL_SEARCH_NAME): Remove. + * tracepoint.c (set_traceframe_context): Update. + (validate_actionline): Update. + (collection_list::collect_symbol): Update. + (encode_actions_1): Update. + (info_scope_command): Update. + (print_one_static_tracepoint_marker): Update. + * typeprint.c (typedef_hash_table::add_template_parameters): Update. + * valops.c (address_of_variable): Update. + (find_overload_match): Update. + (find_oload_champ): Update. + +2019-11-22 Christian Biesinger <cbiesinger@google.com> + + * ada-lang.c (ada_lookup_simple_minsym): Update. + (ada_collect_symbol_completion_matches): Update. + * ada-tasks.c (read_atcb): Update. + * amd64-windows-tdep.c (amd64_skip_main_prologue): Update. + (amd64_windows_skip_trampoline_code): Update. + * arm-tdep.c (skip_prologue_function): Update. + (arm_skip_stack_protector): Update. + * arm-wince-tdep.c (arm_pe_skip_trampoline_code): Update. + (arm_wince_skip_main_prologue): Update. + * ax-gdb.c (gen_expr): Update. + * block.c (call_site_for_pc): Update. + * blockframe.c (find_pc_partial_function): Update. + * breakpoint.c (set_breakpoint_location_function): Update. + * btrace.c (ftrace_print_function_name): Update. + (ftrace_function_switched): Update. + * c-valprint.c (print_unpacked_pointer): Update. + * coffread.c (coff_symfile_read): Update. + * compile/compile-c-symbols.c (convert_symbol_bmsym): Update. + * compile/compile-cplus-symbols.c (convert_symbol_bmsym): Update. + * dwarf-index-write.c (write_psymbols): Update. + * dwarf2loc.c (call_site_to_target_addr): Update. + (func_verify_no_selftailcall): Update. + (tailcall_dump): Update. + (call_site_find_chain_1): Update. + (dwarf_expr_reg_to_entry_parameter): Update. + * elfread.c (elf_gnu_ifunc_record_cache): Update. + * eval.c (evaluate_funcall): Update. + (evaluate_subexp_standard): Update. + (evaluate_subexp_for_sizeof): Update. + * expprint.c (print_subexp_standard): Update. + (dump_subexp_body_standard): Update. + * frame.c (get_prev_frame_always_1): Update. + * frv-tdep.c (frv_skip_main_prologue): Update. + * gnu-v2-abi.c (gnuv2_value_rtti_type): Update. + * gnu-v3-abi.c (gnuv3_rtti_type): Update. + (gnuv3_get_typename_from_type_info): Update. + (gnuv3_skip_trampoline): Update. + * hppa-tdep.c (hppa_lookup_stub_minimal_symbol): Update. + * i386-tdep.c (i386_skip_main_prologue): Update. + (i386_pe_skip_trampoline_code): Update. + * ia64-tdep.c (ia64_convert_from_func_ptr_addr): Update. + * infcall.c (get_function_name): Update. + * linespec.c (minsym_found): Update. + * linux-fork.c (info_checkpoints_command): Update. + * m32c-tdep.c (m32c_m16c_address_to_pointer): Update. + (m32c_m16c_pointer_to_address): Update. + * maint.c (maintenance_translate_address): Update. + * minsyms.c (add_minsym_to_hash_table): Update. + (add_minsym_to_demangled_hash_table): Update. + (lookup_minimal_symbol_mangled): Update. + (lookup_minimal_symbol_demangled): Update. + (lookup_minimal_symbol_linkage): Update. + (lookup_minimal_symbol_text): Update. + (lookup_minimal_symbol_by_pc_name): Update. + (minimal_symbol_is_less_than): Update. + (compact_minimal_symbols): Update. + (build_minimal_symbol_hash_tables): Update. + (find_solib_trampoline_target): Update. + * mips-tdep.c (mips_stub_frame_sniffer): Update. + (mips_skip_pic_trampoline_code): Update. + * msp430-tdep.c (msp430_skip_trampoline_code): Update. + * objc-lang.c (info_selectors_command): Update. + (info_classes_command): Update. + (find_methods): Update. + (find_imps): Update. + * p-valprint.c (pascal_val_print): Update. + * ppc-linux-tdep.c (powerpc_linux_in_dynsym_resolve_code): Update. + * ppc-sysv-tdep.c (convert_code_addr_to_desc_addr): Update. + * printcmd.c (build_address_symbolic): Update. + (info_symbol_command): Update. + * psymtab.c (psymbol_name_matches): Update. + (match_partial_symbol): Update. + (lookup_partial_symbol): Update. + (print_partial_symbols): Update. + (sort_pst_symbols): Update. + (maintenance_check_psymtabs): Update. + * python/py-framefilter.c (py_print_frame): Update. + * python/python.c (gdbpy_rbreak): Update. + * record-btrace.c (btrace_get_bfun_name): Update. + (btrace_call_history): Update. + * rs6000-tdep.c (rs6000_skip_main_prologue): Update. + (rs6000_skip_trampoline_code): Update. + * sol-thread.c (info_cb): Update. + * stabsread.c (scan_file_globals): Update. + * stack.c (find_frame_funname): Update. + (info_frame_command_core): Update. + * symmisc.c (dump_msymbols): Update. + * symtab.c (symbol_natural_name): Rename to.., + (general_symbol_info::natural_name): ...this. + (symbol_demangled_name): Rename to... + (general_symbol_info::demangled_name): ...this. + (symbol_search_name): Rename to... + (general_symbol_info::search_name): ...this. + (symbol_matches_search_name): Update. + (find_pc_sect_line): Update. + (skip_prologue_sal): Update. + (search_symbols): Update. + (print_msymbol_info): Update. + (rbreak_command): Update. + (completion_list_add_msymbol): Update. + (completion_list_objc_symbol): Update. + (get_msymbol_address): Update. + * symtab.h (struct general_symbol_info): Add member functions + natural_name (), linkage_name (), print_name (), demangled_name (), + and search_name (). + (SYMBOL_NATURAL_NAME): Update. + (symbol_natural_name): Move to a member function on general_symbol_info. + (SYMBOL_DEMANGLED_NAME): Update. + (symbol_demangled_name): Move to a member function on + general_symbol_info. + (SYMBOL_SEARCH_NAME): Update. + (symbol_search_name): Move to a member function on general_symbol_info. + (MSYMBOL_NATURAL_NAME): Remove. + (MSYMBOL_LINKAGE_NAME): Remove. + (MSYMBOL_PRINT_NAME): Remove. + (MSYMBOL_DEMANGLED_NAME): Remove. + (MSYMBOL_SEARCH_NAME): Remove. + * x86-tdep.c (x86_in_indirect_branch_thunk): Update. + +2019-11-22 Christian Biesinger <cbiesinger@google.com> + + * symtab.c (create_demangled_names_hash): Use per_bfd-> + minimal_symbol_count for computing the initial size, if greater + than our default size. + +2019-11-22 Tom de Vries <tdevries@suse.de> + + * contrib/words.sh: Improve words extraction. + +2019-11-22 Tom de Vries <tdevries@suse.de> + + * contrib/words.sh: Combine sed invocations. + +2019-11-21 Christian Biesinger <cbiesinger@google.com> + + * Makefile.in: Update. + * demangle.c: Rename to... + * gdb-demangle.c: ..this. + (is_cplus_marker): Change return type to bool. + (_initialize_demangler): Rename to... + (_initialize_gdb_demangle): ...this. + * gdb-demangle.h (is_cplus_marker): Change return type to bool. + * symtab.h (demangle): Remove declaration; instead include + gdb-demangle.h. + +2019-11-21 Tom Tromey <tromey@adacore.com> + + * gdbsupport/format.c (format_pieces): Parse %I64d. + * unittests/format_pieces-selftests.c (test_windows_formats): New + function. + (run_tests): Call it. + +2019-11-21 Peeter Joot <peeter.joot@lzlabs.com> + + Byte reverse display of variables with DW_END_big, DW_END_little + (DW_AT_endianity) dwarf attributes if different than the native + byte order. + * ada-lang.c (ada_value_binop): + Use type_byte_order instead of gdbarch_byte_order. + * ada-valprint.c (printstr): + (ada_val_print_string): + * ada-lang.c (value_pointer): + (ada_value_binop): + Use type_byte_order instead of gdbarch_byte_order. + * c-lang.c (c_get_string): + Use type_byte_order instead of gdbarch_byte_order. + * c-valprint.c (c_val_print_array): + Use type_byte_order instead of gdbarch_byte_order. + * cp-valprint.c (cp_print_class_member): + Use type_byte_order instead of gdbarch_byte_order. + * dwarf2loc.c (rw_pieced_value): + Use type_byte_order instead of gdbarch_byte_order. + * dwarf2read.c (read_base_type): Handle DW_END_big, + DW_END_little + * f-lang.c (f_get_encoding): + Use type_byte_order instead of gdbarch_byte_order. + * findvar.c (default_read_var_value): + Use type_byte_order instead of gdbarch_byte_order. + * gdbtypes.c (check_types_equal): + Require matching TYPE_ENDIANITY_NOT_DEFAULT if set. + (recursive_dump_type): Print TYPE_ENDIANITY_BIG, + and TYPE_ENDIANITY_LITTLE if set. + (type_byte_order): new function. + * gdbtypes.h (TYPE_ENDIANITY_NOT_DEFAULT): New macro. + (struct main_type) <flag_endianity_not_default>: + New field. + (type_byte_order): New function. + * infcmd.c (default_print_one_register_info): + Use type_byte_order instead of gdbarch_byte_order. + * p-lang.c (pascal_printstr): + Use type_byte_order instead of gdbarch_byte_order. + * p-valprint.c (pascal_val_print): + Use type_byte_order instead of gdbarch_byte_order. + * printcmd.c (print_scalar_formatted): + Use type_byte_order instead of gdbarch_byte_order. + * solib-darwin.c (darwin_current_sos): + Use type_byte_order instead of gdbarch_byte_order. + * solib-svr4.c (solib_svr4_r_ldsomap): + Use type_byte_order instead of gdbarch_byte_order. + * stap-probe.c (stap_modify_semaphore): + Use type_byte_order instead of gdbarch_byte_order. + * target-float.c (target_float_same_format_p): + Use type_byte_order instead of gdbarch_byte_order. + * valarith.c (scalar_binop): + (value_bit_index): + Use type_byte_order instead of gdbarch_byte_order. + * valops.c (value_cast): + Use type_byte_order instead of gdbarch_byte_order. + * valprint.c (generic_emit_char): + (generic_printstr): + (val_print_string): + Use type_byte_order instead of gdbarch_byte_order. + * value.c (unpack_long): + (unpack_bits_as_long): + (unpack_value_bitfield): + (modify_field): + (pack_long): + (pack_unsigned_long): + Use type_byte_order instead of gdbarch_byte_order. + * findvar.c (unsigned_pointer_to_address): + (signed_pointer_to_address): + (unsigned_address_to_pointer): + (address_to_signed_pointer): + (default_read_var_value): + (default_value_from_register): + Use type_byte_order instead of gdbarch_byte_order. + * gnu-v3-abi.c (gnuv3_make_method_ptr): + Use type_byte_order instead of gdbarch_byte_order. + * riscv-tdep.c (riscv_print_one_register_info): + Use type_byte_order instead of gdbarch_byte_order. + +2019-11-21 Simon Marchi <simon.marchi@polymtl.ca> + + * top.c (current_ui_gdb_stdout_ptr): Spell out by hand. + (current_ui_gdb_stdin_ptr): Likewise. + (current_ui_gdb_stderr_ptr): Likewise. + (current_ui_gdb_stdlog_ptr): Likewise. + (current_ui_current_uiout_ptr): Likewise. + (gen_ret_current_ui_field_ptr): Remove. + +2019-11-21 Tom de Vries <tdevries@suse.de> + + PR gdb/24956 + * cli/cli-script.c (execute_control_command): Only switch to + INTERP_CONSOLE's ui_out when INTERP_MI is active. + +2019-11-19 Tom Tromey <tom@tromey.com> + + * tui/tui-win.c (tui_partial_win_by_name): Move from tui-data.c. + Now static. Change type of "name". + (tui_set_win_height_command): Don't copy "arg". + * tui/tui-data.h (tui_partial_win_by_name): Don't declare. + * tui/tui-data.c (tui_partial_win_by_name): Move to tui-win.c. + +2019-11-19 Ali Tamur <tamur@google.com> + + * dwarf2read.c (dw2_get_file_names_reader): Replace "if (attr)" with + "if (attr != nullptr)". + (dwarf2_find_base_address): Likewise. + (dwarf2_build_include_psymtabs): Likewise. + (read_cutu_die_from_dwo): Likewise. + (read_func_scope): Likewise. + (read_call_site_scope): Likewise. + (dwarf2_get_pc_bounds): Likewise. + (dwarf2_record_block_ranges): Likewise. + (dwarf2_add_field): Likewise. + (dwarf2_add_member_fn): Likewise. + (read_structure_type): Likewise. + (read_enumeration_type): Likewise. + (read_array_type): Likewise. + (read_array_order): Likewise. + (read_set_type): Likewise. + (read_common_block): Likewise. + (read_tag_reference_type): Likewise. + (read_tag_string_type): Likewise. + (read_subroutine_type): Likewise. + (read_base_type): Likewise. + (read_subrange_type): Likewise. + (new_symbol): Likewise. + (prepare_one_comp_unit): Likewise. + +2019-11-19 Tom Tromey <tromey@adacore.com> + + * windows-nat.c (windows_nat_target::attach): Include GetLastError + result in error when DebugActiveProcess fails. + +2019-11-18 Sergio Durigan Junior <sergiodj@redhat.com> + Pedro Alves <palves@redhat.com> + + https://bugzilla.redhat.com/show_bug.cgi?id=1765117 + * target.c (target_stack::push): Call 'unpush' if there's a + target on top of the stack. + +2019-11-18 Philippe Waroquiers <philippe.waroquiers@skynet.be> + + * python/py-block.c (blpy_dealloc): Call tp_free. + (blpy_block_syms_dealloc): Likewise. + * python/py-finishbreakpoint.c (bpfinishpy_dealloc): Likewise. + * python/py-inferior.c (infpy_dealloc): Likewise. + * python/py-lazy-string.c (stpy_dealloc): Likewise. + * python/py-linetable.c (ltpy_iterator_dealloc): Likewise. + * python/py-symbol.c (sympy_dealloc): Likewise. + * python/py-symtab.c (stpy_dealloc): Likewise. + * python/py-type.c (typy_iterator_dealloc): Likewise. + +2019-11-18 Christian Biesinger <cbiesinger@google.com> + + * symtab.h (struct symbol) <owner>: Initialize explicitly in the + constructor instead of using a class initializer. + +2019-11-15 Christian Biesinger <cbiesinger@google.com> + + * Makefile.in: Replace {posix,mingw}-strerror.c with safe-strerror.c. + * configure: Regenerate. + * configure.ac: Don't source common.host. + * gdbsupport/common.host: Remove. + * gdbsupport/mingw-strerror.c: Remove. + * gdbsupport/posix-strerror.c: Rename to... + * gdbsupport/safe-strerror.c: ...this. + +2019-11-15 Christian Biesinger <cbiesinger@google.com> + + * maint.c (scoped_command_stats::print_time): Use localtime_r + instead of localtime (provided through gnulib if necessary). + * nat/linux-osdata.c (time_from_time_t): Use ctime_r instead + of ctime. + +2019-11-15 Christian Biesinger <cbiesinger@google.com> + + * gdbsupport/common-defs.h: Include time.h before pathmax.h to + avoid compile errors. + +2019-11-15 Christian Biesinger <cbiesinger@google.com> + + * config.in: Regenerate. + * configure: Regenerate. + * gdbsupport/common.m4: No longer check for strerror_r. + * gdbsupport/posix-strerror.c (safe_strerror): Always call the + POSIX version of strerror_r, now that gnulib provides it if + necessary. + +2019-11-14 Christian Biesinger <cbiesinger@google.com> + + * README (`configure' options): Update. + +2019-11-14 Tom Tromey <tromey@adacore.com> + + * eval.c (evaluate_subexp_standard) <BINOP_ASSIGN>: Do not pass an + expected type for the RHS if the LHS is a convenience variable. + +2019-11-14 Simon Marchi <simon.marchi@polymtl.ca> + + * unittests/vec-utils-selftests.c (unordered_remove_tests::obj): + Provide explicit default and copy constructor. + +2019-11-14 Philippe Waroquiers <philippe.waroquiers@skynet.be> + + * python/py-finishbreakpoint.c (gdbpy_breakpoint_created): + only call Py_INCREF (newbp) in the bppy_pending_object case. + +2019-11-13 Tom Tromey <tromey@adacore.com> + + PR build/25182: + * psympriv.h (partial_symbol): Remove static assert. + * symtab.h (general_symbol_info, symbol): Remove static assert. + +2019-11-12 Andrew Burgess <andrew.burgess@embecosm.com> + + * gdbsupport/format.c (format_pieces::format_pieces): Support + printf 'z' size modifier. + * gdbsupport/format.h (enum argclass): Add size_t_arg. + * printcmd.c (ui_printf): Handle size_t_arg. + * ui-out.c (ui_out::vmessage): Likewise. + * unittests/format_pieces-selftests.c (test_format_int_sizes): New + function. + (run_tests): Call test_format_int_sizes. + +2019-11-12 Christian Biesinger <cbiesinger@google.com> + + * ada-exp.y (write_ambiguous_var): Update. + * buildsym.c (add_symbol_to_list): Update. + * dwarf2read.c (read_variable): Update. + (new_symbol): Update. + * jit.c (finalize_symtab): Update. + * language.c (language_alloc_type_symbol): Update. + * symtab.c (fixup_symbol_section): Update. + (initialize_objfile_symbol_1): Move code to... + (initialize_objfile_symbol): ...here. Remove now-unnecessary memset. + (allocate_symbol): Update. + (allocate_template_symbol): Update. + (get_symbol_address): Update. + * symtab.h (struct symbol): Inherit from general_symbol_info instead + of having as a field, and add a constructor. + (SYMBOL_VALUE): Update. + (SYMBOL_VALUE_ADDRESS): Update. + (SET_SYMBOL_VALUE_ADDRESS): Update. + (SYMBOL_VALUE_BYTES): Update. + (SYMBOL_VALUE_COMMON_BLOCK): Update. + (SYMBOL_BLOCK_VALUE): Update. + (SYMBOL_VALUE_CHAIN): Update. + (SYMBOL_LANGUAGE): Update. + (SYMBOL_SECTION): Update. + (SYMBOL_OBJ_SECTION): Update. + (SYMBOL_SET_LANGUAGE): Update. + (SYMBOL_SET_LINKAGE_NAME): Update. + (SYMBOL_SET_NAMES): Update. + (SYMBOL_NATURAL_NAME): Update. + (SYMBOL_LINKAGE_NAME): Update. + (SYMBOL_DEMANGLED_NAME): Update. + (SYMBOL_SEARCH_NAME): Update. + (SYMBOL_MATCHES_SEARCH_NAME): Update. + (struct symbol): Update. + (struct template_symbol): Update. + (struct rust_vtable_symbol): Update. + * xcoffread.c (SYMBOL_DUP): Update. + +2019-11-12 Tom Tromey <tom@tromey.com> + + * tui/tui-layout.c (show_layout): Set current_layout. + (show_source_disasm_command, show_data) + (show_source_or_disasm_and_command): Don't set current_layout. + +2019-11-12 Tom Tromey <tom@tromey.com> + + * tui/tui-layout.c (_initialize_tui_layout): Move to end. + +2019-11-12 Tom Tromey <tom@tromey.com> + + * tui/tui-win.c (resize_message): New global. + (show_tui_resize_message): New function. + (tui_async_resize_screen): Print message if requested. + (_initialize_tui_win): Add tui-resize-message setting. + * NEWS: Add entry for new commands. + +2019-11-11 Tom Tromey <tom@tromey.com> + + * tui/tui.c (tui_initialize_readline): Add new bindable readline + functions. + +2019-11-11 Christian Biesinger <cbiesinger@google.com> + + * nat/linux-osdata.c (user_from_uid): Use getpwuid_r. + +2019-11-10 Andrew Burgess <andrew.burgess@embecosm.com> + + * python/py-symbol.c (gdbpy_lookup_static_symbols): New + function. + * python/python-internal.h (gdbpy_lookup_static_symbols): + Declare new function. + * python/python.c (python_GdbMethods): Add + gdb.lookup_static_symbols method. + * NEWS: Mention gdb.lookup_static_symbols. + +2019-11-10 Andrew Burgess <andrew.burgess@embecosm.com> + + * python/py-symbol.c (gdbpy_lookup_static_symbol): Lookup in + static block of current object file first. Also fix typo in + header comment. + +2019-11-10 Andrew Burgess <andrew.burgess@embecosm.com> + + * stack.c (set_last_displayed_sal): Delete. + (last_displayed_sal_valid): Delete. + (last_displayed_pspace): Delete. + (last_displayed_addr): Delete. + (last_displayed_symtab): Delete. + (last_displayed_line): Delete. + (class last_displayed_symtab_info_type): New. + (last_displayed_symtab_info): New static global variable. + (print_frame_info): Call methods on last_displayed_symtab_info. + (clear_last_displayed_sal): Update header comment, and make use of + last_displayed_symtab_info. + (last_displayed_sal_is_valid): Likewise. + (get_last_displayed_pspace): Likewise. + (get_last_displayed_addr): Likewise. + (get_last_displayed_symtab): Likewise. + (get_last_displayed_line): Likewise. + (get_last_displayed_sal): Likewise. + * stack.h (clear_last_displayed_sal): Update header comment. + (last_displayed_sal_is_valid): Likewise. + (get_last_displayed_pspace): Likewise. + (get_last_displayed_addr): Likewise. + (get_last_displayed_symtab): Likewise. + (get_last_displayed_line): Likewise. + (get_last_displayed_sal): Likewise. + +2019-11-10 Andrew Burgess <andrew.burgess@embecosm.com> + + * stack.c (frame_show_address): Convert return type to bool. + * stack.h (frame_show_address): Likewise, and update header + comment. + +2019-11-10 Andrew Burgess <andrew.burgess@embecosm.com> + + * Makefile.in (SUBDIR_UNITTESTS_SRCS): Add new file to the list. + * unittests/vec-utils-selftests.c: New file. + * gdbsupport/gdb_vecs.h (unordered_remove): Avoid self move assign. + +2019-11-10 Tom Tromey <tom@tromey.com> + + * tui/tui-wingeneral.c (tui_unhighlight_win): Use can_box. + (tui_highlight_win): Likewise. + (tui_win_info::check_and_display_highlight_if_needed): Likewise. + * tui/tui-data.h (struct tui_win_info) <can_highlight>: Remove. + * tui/tui-command.h (struct tui_cmd_window) <tui_cmd_window>: + Don't set can_highlight. + +2019-11-10 Tom Tromey <tom@tromey.com> + + * cli/cli-style.h (class cli_style_option) <cli_style_option>: + Remove unused declaration. + +2019-11-08 Tom Tromey <tromey@adacore.com> + + * top.c (read_command_file): Update. + (command_line_input): Make return type const. + * python/py-gdb-readline.c: Update. + * linespec.c (decode_line_2): Update. + * defs.h (command_line_input): Make return type const. + * cli/cli-script.c (read_next_line): Make return type const. + * ada-lang.c (get_selections): Update. + +2019-11-06 Christian Biesinger <cbiesinger@google.com> + + * linux-tdep.c (linux_info_proc): Use strtok_r instead of strtok. + * mi/mi-main.c (output_cores): Likewise. + * nat/linux-osdata.c (linux_xfer_osdata_cpus): Likewise. + (linux_xfer_osdata_modules): Likewise. + * remote.c (register_remote_support_xml): Likewise. + * sparc64-tdep.c (adi_is_addr_mapped): Likewise. + * xml-syscall.c (syscall_create_syscall_desc): Likewise. + +2019-11-06 Tom Tromey <tom@tromey.com> + + * tui/tui-interp.c: Don't include readline.h. + * tui/tui-hooks.c: Don't include readline.h. + * symmisc.c: Include tilde.h, not readline.h. + * symfile.c: Include tilde.h, not readline.h. + * source.c: Include tilde.h, not readline.h. + * solib.c: Include tilde.h, not readline.h. + * psymtab.c: Include tilde.h, not readline.h. + * exec.c: Include tilde.h, not readline.h. + * corelow.c: Include tilde.h, not readline.h. + * cli/cli-dump.c: Include tilde.h, not readline.h. + * cli/cli-cmds.c: Don't include readline.h. + +2019-11-05 Tom Tromey <tom@tromey.com> + + * tui/tui-disasm.c (struct tui_asm_line) <addr_size>: New member. + (tui_disassemble): Set addr_size. + (tui_disasm_window::set_contents): Use addr_size. + +2019-11-05 Tom Tromey <tom@tromey.com> + + * rust-lang.c (rust_language_defn): Update. + * python/py-value.c (valpy_string): Call c_get_string. + * p-lang.c (pascal_language_defn): Update. + * opencl-lang.c (opencl_language_defn): Update. + * objc-lang.c (objc_language_defn): Update. + * m2-lang.c (m2_language_defn): Update. + * language.c (unknown_language_defn, auto_language_defn): Update. + (default_get_string): Remove. + * guile/scm-value.c (gdbscm_value_to_string): Use c_get_string. + * go-lang.c (go_language_defn): Update. + * f-lang.c (f_language_defn): Update. + * d-lang.c (d_language_defn): Update. + * c-lang.c (c_language_defn, cplus_language_defn) + (asm_language_defn, minimal_language_defn): Update. + * ada-lang.c (ada_language_defn): Update. + * language.h (struct language_defn) <la_get_string>: Remove. + (LA_GET_STRING): Remove. + (default_get_string): Don't declare. + +2019-11-05 Tom Tromey <tom@tromey.com> + + * tui/tui-source.h (struct tui_source_window): Inline + constructor. Remove destructor. + <style_changed, m_observable>: Move to superclass. + * tui/tui-winsource.h (tui_copy_source_line): Declare. + (struct tui_source_window_base): Move private members to end. + <style_changed, m_observable>: Move from tui_source_window. + * tui/tui-winsource.c (tui_copy_source_line): Move from + tui-source.c. Rename from copy_source_line. Add special handling + for negative line number. + (tui_source_window_base::style_changed): Move from + tui_source_window. + (tui_source_window_base): Register observer. + (~tui_source_window_base): New. + * tui/tui-source.c (copy_source_line): Move to tui-winsource.c; + rename. + (tui_source_window::set_contents): Use tui_copy_source_line. + (tui_source_window::tui_source_window): Move to tui-source.h. + (tui_source_window::~tui_source_window): Remove. + (tui_source_window::style_changed): Move to superclass. + * tui/tui-disasm.c (tui_disassemble): Create string file with + styling, when possible. Add "addr_size" parameter. + (tui_disasm_window::set_contents): Use tui_copy_source_line. + Don't compute maximum size. + (len_without_escapes): New function + +2019-11-05 Tom Tromey <tom@tromey.com> + + * tui/tui-winsource.h (struct tui_source_element) <line>: Now a + std::string. + * tui/tui-winsource.c (tui_show_source_line): Update. + * tui/tui-source.c (tui_source_window::set_contents): Update. + * tui/tui-disasm.c (tui_disasm_window::set_contents): Update. + +2019-11-05 Christian Biesinger <cbiesinger@google.com> + + * symtab.h (gdb_static_assert): Put && operator at the beginning + of the line instead of the end. + +2019-11-04 Christian Biesinger <cbiesinger@google.com> + + * psympriv.h: Add static_asserts for sizeof (general_symbol_info) + and sizeof (symbol). + * symtab.h: Add a static_assert for sizeof (partial_symbol). + +2019-11-04 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + * NEWS (Changes since GDB 8.3): Document Solaris 10 removal. + * configure.host: Mark *-*-solaris2.10* obsolete. + * configure.tgt: Mark Solaris < 11 obsolete. + * MAINTAINERS (Target Instruction Set Architectures) <sparc>: + Update target triplet. + +2019-11-01 Tom Tromey <tromey@adacore.com> + + * utils.c (print_sys_errmsg): Simplify. + +2019-11-01 Tom Tromey <tromey@adacore.com> + + * gdbsupport/mingw-strerror.c (safe_strerror): Constify result. + +2019-11-01 Christian Biesinger <cbiesinger@google.com> + + * configure: Regenerate. + * configure.ac: Remove check for strerror_r. + * gdbsupport/common.m4: Check for strerror_r. + +2019-11-01 Luis Machado <luis.machado@linaro.org> + + PR gdb/25124 + + * arm-tdep.c (arm_per_objfile): Rename to ... + (arm_per_bfd): ... this. + (arm_objfile_data_key): Rename to ... + (arm_bfd_data_key): ... this. + (arm_find_mapping_symbol): Adjust access to new bfd_key-based + data. + (arm_record_special_symbol): Likewise. + +2019-10-31 Andrew Burgess <andrew.burgess@embecosm.com> + + * ada-typeprint.c (ada_print_typedef): Don't print newline at the + end. + * c-typeprint.c (c_print_typedef): Likewise. + * f-typeprint.c (f_print_typedef): Likewise. + * m2-typeprint.c (m2_print_typedef): Likewise. + * p-typeprint.c (pascal_print_typedef): Likewise. + * rust-lang.c (rust_print_typedef): Likewise. + * symtab.c (print_symbol_info): Print a newline after calling + typedef_print. + +2019-10-31 Andrew Burgess <andrew.burgess@embecosm.com> + + * symtab.c (info_module_cmdlist): New variable. + (info_module_command): New function. + (search_module_symbols): New function. + (info_module_subcommand): New function. + (struct info_modules_var_func_options): New struct. + (info_modules_var_func_options_defs): New variable. + (make_info_modules_var_func_options_def_group): New function. + (info_module_functions_command): New function. + (info_module_variables_command): New function. + (info_module_var_func_command_completer): New function. + (_initialize_symtab): Register new 'info module functions' and + 'info module variables' commands. + * symtab.h (typedef symbol_search_in_module): New typedef. + (search_module_symbols): Declare new function. + * NEWS: Mention new commands. + +2019-10-31 Andrew Burgess <andrew.burgess@embecosm.com> + + * dwarf2read.c (dw2_symtab_iter_next): Handle MODULE_DOMAIN. + (dw2_expand_marked_cus): Handle MODULES_DOMAIN. + (dw2_debug_names_iterator::next): Handle MODULE_DOMAIN and + MODULES_DOMAIN. + (scan_partial_symbols): Only create partial module symbols for non + declarations. + * psymtab.c (recursively_search_psymtabs): Handle MODULE_DOMAIN + and MODULES_DOMAIN. + * symtab.c (search_domain_name): Likewise. + (search_symbols): Likewise. + (print_symbol_info): Likewise. + (symtab_symbol_info): Likewise. + (info_modules_command): New function. + (_initialize_symtab): Register 'info modules' command. + * symtab.h (enum search_domain): Add MODULES_DOMAIN. + * NEWS: Mention new 'info modules' command. + +2019-10-31 Philippe Waroquiers <philippe.waroquiers@skynet.be> + + * NEWS: Mention $_gdb_setting, $_gdb_setting_str, $_gdb_maint_setting + and $_gdb_maint_setting_str. + +2019-10-31 Philippe Waroquiers <philippe.waroquiers@skynet.be> + + * cli/cli-cmds.c (setting_cmd, value_from_setting) + (gdb_setting_internal_fn, gdb_maint_setting_internal_fn) + (str_value_from_setting, gdb_setting_str_internal_fn) + (gdb_maint_setting_str_internal_fn): New functions. + (_initialize_cli_cmds): Define the new convenience functions. + * cli/cli-setshow.h (get_setshow_command_value_string): Constify. + * cli/cli-setshow.c (get_setshow_command_value_string): Constify. + +2019-10-31 Christian Biesinger <cbiesinger@google.com> + + * agent.c (set_can_use_agent): When the setting is turned on, + look up agent symbols if we don't have them yet. + (agent_new_objfile): Don't look up agent symbols when the agent + setting is off. + +2019-10-31 Christian Biesinger <cbiesinger@google.com> + + * config.in: Regenerate. + +2019-10-31 Christian Biesinger <cbiesinger@google.com> + + * configure: Regenerate. + * configure.ac: Check for strerror_r. + * gdbsupport/common-utils.h (safe_strerror): Change return value + to const char * and document that this function is now threadsafe. + * gdbsupport/posix-strerror.c (safe_strerror): Make buf + thread_local and call strerror_r, if available. + * utils.c (perror_string): Update. + (print_sys_errmsg): Update. + +2019-10-31 Luis Machado <luis.machado@linaro.org> + + * arm-tdep.c (arm_exidx_data_key): Use bfd_key instead of + objfile_key. + (arm_exidx_new_objfile): Adjust to use objfile->obfd instead of + objfile to fetch per-bfd data. + (arm_find_exidx_entry): Likewise. + +2019-10-31 Christian Biesinger <cbiesinger@google.com> + + * gdbsupport/agent.c (debug_agent): Change type to bool. + (use_agent): Likewise. + (all_agent_symbols_look_up): Likewise. + (agent_loaded_p): Change return value to bool. + (agent_look_up_symbols): Update. + (agent_capability_check): Change return value to bool. + * gdbsupport/agent.h (agent_loaded_p): Likewise. + (debug_agent): Change type to bool. + (use_agent): Likewise. + (agent_capability_check): Change return value to bool. + +2019-10-30 Christian Biesinger <cbiesinger@google.com> + + * minsyms.c (clear_minimal_symbol_hash_tables): New function. + (build_minimal_symbol_hash_tables): Code to clear the table moved + to clear_minimal_symbol_hash_tables. + (minimal_symbol_reader::install): Call clear_minimal_symbol_hash_tables + when needed. + +2019-10-29 Simon Marchi <simon.marchi@polymtl.ca> + + * infcmd.c: Remove includes. + * infrun.c: Remove includes. + +2019-10-29 Simon Marchi <simon.marchi@polymtl.ca> + + * ada-lang.h (GROW_VECT): Move to ada-lang.c. + (grow_vect): Remove declaration. + (ada_type_of_array): Remove declaration. + (ada_update_initial_language): Remove declaration. + (ada_fold_name): Remove declaration. + (ada_fill_in_ada_prototype): Remove declaration. + (user_select_syms): Remove declaration. + (get_selections): Remove declaration. + (ada_tag_type): Remove declaration. + (ada_value_tag): Remove declaration. + (ada_is_others_clause): Remove declaration. + (ada_in_variant): Remove declaration. + (ada_value_struct_elt): Remove declaration. + (ada_attribute_name): Remove declaration. + (ada_system_address_type): Remove declaration. + * ada-lang.c (ada_watch_location_expression): Make static. + (GROW_VECT): Move here from ada-lang.h. + (grow_vect): Make static. + (ada_update_initial_language): Make static. + (ada_fold_name): Make static. + (ada_type_of_array): Make static. + (encoded_ordered_before): Move up. + (sort_choices): Move up. + (print_signatures): Move up. + (ada_print_symbol_signature): Move up. + (get_selections): Move up and make static. + (user_select_syms): Move up and make static. + (ada_value_struct_elt): Move up and make static. + (ada_tag_type): Make static. + (ada_value_tag): Make static. + (ada_is_others_clause): Make static. + (ada_in_variant): Make static. + (ada_attribute_name): Make static. + +2019-10-29 Simon Marchi <simon.marchi@polymtl.ca> + + * ada-lang.c: Remove includes. + * ada-typeprint.c: Remove includes. + * ada-valprint.c: Remove includes. + +2019-10-29 Simon Marchi <simon.marchi@efficios.com> + + * addrmap.c: Add static assertions of type size, moved from + _initialize_addrmap. + (_initialize_addrmap): Remove. + +2019-10-29 Christian Biesinger <cbiesinger@google.com> + + * coffread.c (record_minimal_symbol): Update. + (process_coff_symbol): Update. + * dbxread.c (read_dbx_symtab): Update. + * dwarf2read.c (add_partial_symbol): Update. + (fixup_go_packaging): Update. + (load_partial_dies): Update. + (new_symbol): Update. + * elfread.c (record_minimal_symbol): Change signature to use + gdb::string_view instead of name+len. + (elf_symtab_read): Update. + (elf_rel_plt_read): Update. + * mdebugread.c (parse_partial_symbols): Update. + (handle_psymbol_enumerators): Update. + (new_symbol): Update. + * minsyms.c (minimal_symbol_reader::record_full): Change signature + to use gdb::string_view instead of name+len. + * minsyms.h (class minimal_symbol_reader) <record_full>: Likewise. + * psympriv.h (add_psymbol_to_list): Likewise. + * psymtab.c (add_psymbol_to_bcache): Likewise. + (add_psymbol_to_list): Likewise. + * stabsread.c (define_symbol): Update. + * symtab.c (symbol_set_names): Change signature to use gdb::string_view. + * symtab.h (SYMBOL_SET_NAMES): Likewise. + (symbol_set_names): Likewise. + * xcoffread.c (scan_xcoff_symtab): Update. + +2019-10-29 Christian Biesinger <cbiesinger@google.com> + + * symtab.h (symbol_set_names): Document that copy_name must be + set to true for non-nullterminated strings. + * symtab.c (symbol_set_names): Only make a nullterminated copy of + linkage_name if the entry was not found and we need to demangle. + +2019-10-29 Christian Biesinger <cbiesinger@google.com> + + * Makefile.in (HFILES_NO_SRCDIR): Add gdb_binary_search.h. + * dwarf2-frame.c (bsearch_fde_cmp): Update. + (dwarf2_frame_find_fde): Replace bsearch with gdb::binary_search. + * gdbsupport/gdb_binary_search.h: New file. + +2019-10-29 Christian Biesinger <cbiesinger@google.com> + + * NEWS: Mention new --with-system-gdbinit-dir option. + * config.in: Regenerate. + * configure: Regenerate. + * configure.ac: Add new option --with-system-gdbinit-dir. + * extension.c (get_ext_lang_of_file): Return extension_language_gdb + for a ".gdb" suffix. + * main.c (get_init_files): Change system_gdbinit argument to + a vector and return the files in SYSTEM_GDBINIT_DIR in + addition to SYSTEM_GDBINIT. + (captured_main_1): Update. + (print_gdb_help): Update. + * top.c (print_gdb_configuration): Also print the value of + SYSTEM_GDBINIT_DIR. + +2019-10-28 Christian Biesinger <cbiesinger@google.com> + + * gdbsupport/common-utils.h (startswith): Add an overloaded version + that takes gdb::string_view arguments. + +2019-10-26 Tom de Vries <tdevries@suse.de> + + * aarch64-linux-tdep.c: Fix typos in comments. + * aarch64-tdep.c: Same. + * ada-lang.c: Same. + * amd64-nat.c: Same. + * arc-tdep.c: Same. + * arch/aarch64-insn.c: Same. + * block.c: Same. + * breakpoint.h: Same. + * btrace.h: Same. + * c-varobj.c: Same. + * cli/cli-decode.c: Same. + * cli/cli-script.c: Same. + * cli/cli-utils.h: Same. + * coff-pe-read.c: Same. + * coffread.c: Same. + * compile/compile-cplus-symbols.c: Same. + * compile/compile-object-run.c: Same. + * completer.c: Same. + * corelow.c: Same. + * cp-support.c: Same. + * demangle.c: Same. + * dwarf-index-write.c: Same. + * dwarf2-frame.c: Same. + * dwarf2-frame.h: Same. + * eval.c: Same. + * frame-base.h: Same. + * frame.h: Same. + * gdbcmd.h: Same. + * gdbtypes.h: Same. + * gnu-nat.c: Same. + * guile/scm-objfile.c: Same. + * i386-tdep.c: Same. + * i386-tdep.h: Same. + * infcall.c: Same. + * infcall.h: Same. + * linux-nat.c: Same. + * m68k-tdep.c: Same. + * macroexp.c: Same. + * memattr.c: Same. + * mi/mi-cmd-disas.c: Same. + * mi/mi-getopt.h: Same. + * mi/mi-main.c: Same. + * minsyms.c: Same. + * nat/aarch64-sve-linux-sigcontext.h: Same. + * objfiles.h: Same. + * ppc-linux-nat.c: Same. + * ppc-linux-tdep.c: Same. + * ppc-tdep.h: Same. + * progspace.h: Same. + * prologue-value.h: Same. + * python/py-evtregistry.c: Same. + * python/py-instruction.h: Same. + * record-btrace.c: Same. + * record-full.c: Same. + * remote.c: Same. + * rs6000-tdep.c: Same. + * ser-tcp.c: Same. + * sol-thread.c: Same. + * sparc-sol2-tdep.c: Same. + * sparc64-tdep.c: Same. + * stabsread.c: Same. + * symfile.c: Same. + * symtab.h: Same. + * target.c: Same. + * tracepoint.c: Same. + * tui/tui-data.h: Same. + * tui/tui-io.c: Same. + * tui/tui-win.c: Same. + * tui/tui.c: Same. + * unittests/rsp-low-selftests.c: Same. + * user-regs.h: Same. + * utils.c: Same. + * utils.h: Same. + * valarith.c: Same. + * valops.c: Same. + * valprint.c: Same. + * valprint.h: Same. + * value.c: Same. + * value.h: Same. + * varobj.c: Same. + * x86-nat.h: Same. + * xtensa-tdep.c: Same. + +2019-10-25 Ali Tamur <tamur@google.com> + + * charset.c (find_charset_names): Reflect API change. + +2019-10-25 Christian Biesinger <cbiesinger@google.com> + + * symtab.c (struct demangled_name_entry): Change demangled name + to a unique_xmalloc_ptr<char>, now that we don't allocate it as + part of the struct anymore. + (symbol_set_names): No longer obstack allocate + copy the demangled + name, just store the allocated name from bfd. + +2019-10-25 Tom Tromey <tromey@adacore.com> + + * dwarf2-frame.c (dwarf2_cie_table): Now a typedef. + (bsearch_cie_cmp, add_cie): Remove. + (find_cie): Reimplement. + (decode_frame_entry_1, decode_frame_entry): Change type. Update. + (dwarf2_build_frame_info): Update. + +2019-10-24 H.J. Lu <hongjiu.lu@intel.com> + + PR gdb/25126 + * symfile.c (reread_symbols): Call forget_cached_source_info to + clear the stale source cache. + +2019-10-24 Christian Biesinger <cbiesinger@google.com> + + * configure: Regenerate. + * configure.ac: Remove code that sets python_has_threads. + +2019-10-24 Christian Biesinger <cbiesinger@google.com> + + * config.in: Regenerate. + * configure: Regenerate. + * configure.ac: Remove the code that uses sed to get the python + version and defines HAVE_LIBPYTHON2_6 / HAVE_LIBPYTHON2_7. + +2019-10-24 Andrew Burgess <andrew.burgess@embecosm.com> + + * python/py-progspace.c (pspy_block_for_pc): Return None for all + error paths. + +2019-10-23 Tom Tromey <tom@tromey.com> + + * arc-tdep.c: Remove ".." from include. + * frv-tdep.c: Remove ".." from include. + * lm32-tdep.c: Remove ".." from include. + * microblaze-tdep.c: Remove ".." from include. + * or1k-tdep.h: Remove ".." from include. + * s12z-tdep.c: Remove ".." from include. + * Makefile.in (OPCODES_CFLAGS): Add comment. + (TOP_CFLAGS): New variable. + (INTERNAL_CFLAGS_BASE): Add TOP_CFLAGS. + +2019-10-23 Tom Tromey <tom@tromey.com> + + * Makefile.in (READLINE_DIR): Update. + +2019-10-23 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + * infcall.c (call_function_by_hand_dummy): Fix the function + comment. And extract out a code section into... + (reserve_stack_space): ...this new function. + +2019-10-23 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + * infcall.c (value_arg_coerce): Remove an unused parameter. + (call_function_by_hand_dummy): Update the call to + 'value_arg_coerce'. + +2019-10-23 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + * infcall.c (call_function_by_hand_dummy): Refactor. + +2019-10-23 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + * MAINTAINERS (Write After Approval): Add Tankut Baris Aktemur. + +2019-10-23 Tom Tromey <tom@tromey.com> + + * configure: Rebuild. + * configure.ac: Don't check for sigprocmask. + * gdbsupport/common.m4 (GDB_AC_COMMON): Check for sigprocmask. + +2019-10-23 Tom Tromey <tom@tromey.com> + + * configure: Rebuild. + * acinclude.m4: Use m4_include, not sinclude. + +2019-10-23 Tom de Vries <tdevries@suse.de> + + PR breakpoints/24687 + * symtab.c (iterate_over_some_symtabs): Apply gdb_realpath on fullname. + +2019-10-22 Christian Biesinger <cbiesinger@google.com> + + * symtab.c (struct demangled_name_entry) <language>: Change from + bitfield to regular variable. + +2019-10-22 Christian Biesinger <cbiesinger@google.com> + + * symtab.c (struct demangled_name_entry): Add a constructor. + (free_demangled_name_entry): New function to call the destructor + for demangled_name_entry. + (create_demangled_names_hash): Pass free_demangled_name_entry to + htab_create_alloc. + (symbol_set_names): Call placement new for demangled_name_entry. + * utils.c: No longer include xxhash.h here, now that fast_hash + is inlined in the header. + * utils.h: Instead, include it here. + +2019-10-22 Christian Biesinger <cbiesinger@google.com> + + * Makefile.in: Link with libxxhash. + * config.in: Regenerate. + * configure: Regenerate. + * configure.ac: Search for libxxhash. + * utils.c (fast_hash): Use xxhash if present. + +2019-10-22 Christian Biesinger <cbiesinger@google.com> + + * utils.h (fast_hash): New function. + * symtab.c (hash_demangled_name_entry): Call new function + fast_hash. + +2019-10-22 Christian Biesinger <cbiesinger@google.com> + + * symtab.c (struct demangled_name_entry): Change type of mangled + to gdb::string_view. Also adds a constructor that takes the + mangled name. + (hash_demangled_name_entry): Update. + (eq_demangled_name_entry): Update. + (free_demangled_name_entry): New function to call the destructor + now that this is not a POD anymore. + (create_demangled_names_hash): Pass free_demangled_name_entry to + htab_create_alloc. + (symbol_set_names): Update. + +2019-10-21 Ali Tamur <tamu@google.com> + + * dwarf2read.c (dir_index): Change type. + (file_name_index): Likewise. + (line_header::include_dir_at): Change comment and implementation on + whether it is DWARF 5. + (line_header::is_valid_file_index): New function. + (line_header::file_name_at): Change comment and implementation on + whether it is DWARF 5. + (line_header::file_names): Change to private field renamed as + m_file_names and introduce a new accessor method. + (line_header::file_names_size): New method. + (line_header::include_dirs): Change to private field and rename as + m_include_dirs. + (dw2_get_file_names_reader): Define local var at a smaller scope and + reflect API change. + (dwarf2_cu::setup_type_unit_groups): Reflect API change. + (process_structure_scope): Likewise. + (line_header::add_include_dir): Change message and reflect renaming. + (line_header::add_file_name): Likewise. + (read_formatted_entries): Handle DW_FORM_data16. + (dwarf_decode_line_header): Fix line header length calculation. + (psymtab_include_file_name): Change comment and API. + (lnp_state_machine::m_file): Update comment and reflect type change. + (lnp_state_machine::record_line): Reflect type change. + (dwarf_decode_lines): Reflect API change. + (file_file_name): Likewise. + (file_full_name): Likewise. + +2019-10-21 Andrew Burgess <andrew.burgess@embecosm.com> + + * objfiles.c (sort_cmp): Ensure that !(a < a) holds true. + +2019-10-21 Tom Tromey <tom@tromey.com> + + * tui/tui-winsource.h (tui_exec_info_content): Remove typedef. + +2019-10-21 Tom Tromey <tom@tromey.com> + + * configure.ac (nm.h): Conditionally create nm.h link. Subst + NM_H. Use AC_CONFIG_LINKS. + * configure: Rebuild. + * Makefile.in (NM_H): New variable. + (generated_files): Add NM_H. Remove gcore. + (nm.h, stamp-nmh): New targets. + +2019-10-20 Tom Tromey <tom@tromey.com> + + * objfiles.h (unlink_objfile, put_objfile_before): Don't declare. + * objfiles.c (unlink_objfile): Move earlier. Now static. Remove + obsolete comment. + (put_objfile_before): Now static. + +2019-10-19 Simon Marchi <simon.marchi@polymtl.ca> + + * gdbsupport/common-utils.h (startswith): Change return type to + bool. + +2019-10-19 Christian Biesinger <cbiesinger@google.com> + + * bcache.c (bcache::print_statistics): Use std::sort instead of qsort. + * breakpoint.c (bp_locations_compare): Rename to... + (bp_location_is_less_than): ...this, and change to std::sort semantics. + (update_global_location_list): Use std::sort instead of qsort. + * buildsym.c (compare_line_numbers): Rename to... + (lte_is_less_than): ...this, and change to std::sort semantics. + (buildsym_compunit::end_symtab_with_blockvector): Use std::sort + instead of qsort. + * disasm.c (compare_lines): Rename to... + (line_is_less_than): ...this, and change to std::sort semantics. + (do_mixed_source_and_assembly_deprecated): Call std::sort instead + of qsort. + * dwarf2-frame.c (qsort_fde_cmp): Rename to... + (fde_is_less_than): ...this, and change to std::sort semantics. + (dwarf2_build_frame_info): Call std::sort instead of qsort. + * mdebugread.c (compare_blocks): + (block_is_less_than): ...this, and change to std::sort semantics. + (sort_blocks): Call std::sort instead of qsort. + * objfiles.c (qsort_cmp): Rename to... + (sort_cmp): ...this, and change to std::sort semantics. + (update_section_map): Call std::sort instead of qsort. + * remote.c (compare_pnums): Remove. + (map_regcache_remote_table): Call std::sort instead of qsort. + * utils.c (compare_positive_ints): Remove. + * utils.h (compare_positive_ints): Remove. + * xcoffread.c (compare_lte): Remove. + (arrange_linetable): Call std::sort instead of qsort. + +2019-10-19 Sergio Durigan Junior <sergiodj@redhat.com> + + * symfile.c (init_entry_point_info): Fix typo. + * i386-darwin-tdep.c (darwin_dwarf_signal_frame_p): Fix typo. + +2019-10-18 Tom de Vries <tdevries@suse.de> + + * aarch64-tdep.c: Fix typos in comments. + * ada-lang.c: Same. + * ada-tasks.c: Same. + * alpha-tdep.c: Same. + * alpha-tdep.h: Same. + * amd64-nat.c: Same. + * amd64-windows-tdep.c: Same. + * arc-tdep.c: Same. + * arc-tdep.h: Same. + * arch-utils.c: Same. + * arm-nbsd-tdep.c: Same. + * arm-tdep.c: Same. + * ax-gdb.c: Same. + * blockframe.c: Same. + * btrace.c: Same. + * c-varobj.c: Same. + * coff-pe-read.c: Same. + * coffread.c: Same. + * cris-tdep.c: Same. + * darwin-nat.c: Same. + * dbxread.c: Same. + * dcache.c: Same. + * disasm.c: Same. + * dtrace-probe.c: Same. + * dwarf-index-write.c: Same. + * dwarf2-frame-tailcall.c: Same. + * dwarf2-frame.c: Same. + * dwarf2read.c: Same. + * eval.c: Same. + * exceptions.c: Same. + * fbsd-tdep.c: Same. + * findvar.c: Same. + * frame.c: Same. + * frv-tdep.c: Same. + * gnu-v3-abi.c: Same. + * go32-nat.c: Same. + * h8300-tdep.c: Same. + * hppa-tdep.c: Same. + * i386-linux-tdep.c: Same. + * i386-tdep.c: Same. + * ia64-libunwind-tdep.c: Same. + * ia64-tdep.c: Same. + * infcmd.c: Same. + * infrun.c: Same. + * linespec.c: Same. + * linux-nat.c: Same. + * linux-thread-db.c: Same. + * machoread.c: Same. + * mdebugread.c: Same. + * mep-tdep.c: Same. + * mn10300-tdep.c: Same. + * namespace.c: Same. + * objfiles.c: Same. + * opencl-lang.c: Same. + * or1k-tdep.c: Same. + * osabi.c: Same. + * ppc-linux-nat.c: Same. + * ppc-linux-tdep.c: Same. + * ppc-sysv-tdep.c: Same. + * printcmd.c: Same. + * procfs.c: Same. + * record-btrace.c: Same. + * record-full.c: Same. + * remote-fileio.c: Same. + * remote.c: Same. + * rs6000-tdep.c: Same. + * s12z-tdep.c: Same. + * score-tdep.c: Same. + * ser-base.c: Same. + * ser-go32.c: Same. + * skip.c: Same. + * sol-thread.c: Same. + * solib-svr4.c: Same. + * solib.c: Same. + * source.c: Same. + * sparc-nat.c: Same. + * sparc-sol2-tdep.c: Same. + * sparc-tdep.c: Same. + * sparc64-tdep.c: Same. + * stabsread.c: Same. + * stack.c: Same. + * symfile.c: Same. + * symtab.c: Same. + * target-descriptions.c: Same. + * target-float.c: Same. + * thread.c: Same. + * utils.c: Same. + * valops.c: Same. + * valprint.c: Same. + * value.c: Same. + * varobj.c: Same. + * windows-nat.c: Same. + * xcoffread.c: Same. + * xstormy16-tdep.c: Same. + * xtensa-tdep.c: Same. + +2019-10-17 Tom Tromey <tromey@adacore.com> + + * configure: Rebuild. + * configure.ac: Use AC_CONFIG_HEADERS. Create stamp-h there, not + in AC_CONFIG_FILES invocation. + * Makefile.in (Makefile, data-directory/Makefile, stamp-h): Use + new-style config.status invocation. + +2019-10-17 Tom de Vries <tdevries@suse.de> + + * arm-nbsd-nat.c: Fix typos in comments. + * arm-tdep.c: Same. + * darwin-nat-info.c: Same. + * dwarf2read.c: Same. + * elfread.c: Same. + * event-top.c: Same. + * findvar.c: Same. + * gdbtypes.c: Same. + * hppa-tdep.c: Same. + * i386-tdep.c: Same. + * jit.c: Same. + * main.c: Same. + * mdebugread.c: Same. + * moxie-tdep.c: Same. + * nto-procfs.c: Same. + * osabi.c: Same. + * ppc-linux-tdep.c: Same. + * remote.c: Same. + * riscv-tdep.c: Same. + * s390-tdep.c: Same. + * sh-tdep.c: Same. + * sparc-linux-tdep.c: Same. + * sparc-nat.c: Same. + * stack.c: Same. + * target-descriptions.c: Same. + * top.c: Same. + * varobj.c: Same. + +2019-10-16 Tom Tromey <tom@tromey.com> + + * objfiles.h (struct objfile) <original_name>: Now const. + +2019-10-16 Christian Biesinger <cbiesinger@google.com> + + * gdbsupport/gdb_setjmp.h (SIGSETJMP): Allow passing in the value to + pass on to sigsetjmp's second argument. + * cp-support.c (gdb_demangle): Unblock SIGSEGV if we caught a crash. + +2019-10-16 Keith Seitz <keiths@redhat.com> + + PR gdb/23567 + * dwarf2read.c (dwarf2_per_objfile::locate_sections): Discard + sections whose size is greater than the file size. + +2019-10-16 Jim Wilson <jimw@sifive.com> + + * riscv-tdep.c (riscv_gcc_target_options): New. + (riscv_gnu_triplet_regexp): New. + (riscv_gdbarch_init): Call set_gdbarch_gcc_triplet_options and + set_gdbarch_gnu_triplet_regexp. + +2019-10-16 Christian Biesinger <cbiesinger@google.com> + + * Makefile.in: Add xml-builtin.h. + * features/feature_to_c.sh: Add an include for xml-builtin.h + to ensure that the compiler checks that the types match. + * xml-builtin.h: New file. + * xml-support.c (fetch_xml_builtin): Add missing const. + * xml-support.h: Remove declaration of xml_builtins. + +2019-10-16 Tom de Vries <tdevries@suse.de> + + PR tdep/25096 + * amd64-tdep.c (amd64_classify_aggregate_field): Factor out of ... + (amd64_classify_aggregate): ... here. + (amd64_classify_aggregate_field): Handled fiels of nested structs + recursively. + +2019-10-16 Tom de Vries <tdevries@suse.de> + + PR tdep/24104 + * amd64-tdep.c (amd64_push_arguments): Handle AMD64_NO_CLASS in loop + that handles 'theclass'. + +2019-10-15 Andrew Burgess <andrew.burgess@embecosm.com> + + * linespec.c (decode_digits_ordinary): Update comment. + * make-target-delegates: No longer need to handle VEC case. + * memrange.c (normalize_mem_ranges): Update comment. + * namespace.c (add_using_directive): Update comment. + * objc-lang.c (uniquify_strings): Update comment. + * ppc-linux-nat.c (struct thread_points): Update comment. + * probe.h (find_probes_in_objfile): Update comment. + * target.h (enum flash_preserve_mode): Update comment. + * varobj.c (varobj_restrict_range): Update comment. + * varobj.h (varobj_list_children): Update comment. + +2019-10-15 Andrew Burgess <andrew.burgess@embecosm.com> + + * Makefile.in: Remove references to vec.h and vec.c. + * aarch64-tdep.c: No longer include vec.h. + * ada-lang.c: Likewise. + * ada-lang.h: Likewise. + * arm-tdep.c: Likewise. + * ax.h: Likewise. + * breakpoint.h: Likewise. + * charset.c: Likewise. + * cp-support.h: Likewise. + * dtrace-probe.c: Likewise. + * dwarf2read.c: Likewise. + * extension.h: Likewise. + * gdb_bfd.c: Likewise. + * gdbsupport/gdb_vecs.h: Likewise. + * gdbsupport/vec.c: Remove. + * gdbsupport/vec.h: Remove. + * gdbthread.h: Likewise. + * guile/scm-type.c: Likewise. + * inline-frame.c: Likewise. + * machoread.c: Likewise. + * memattr.c: Likewise. + * memrange.h: Likewise. + * namespace.h: Likewise. + * nat/linux-btrace.h: Likewise. + * osdata.c: Likewise. + * parser-defs.h: Likewise. + * progspace.h: Likewise. + * python/py-type.c: Likewise. + * record-btrace.c: Likewise. + * rust-exp.y: Likewise. + * solib-target.c: Likewise. + * stap-probe.c: Likewise. + * target-descriptions.c: Likewise. + * target-memory.c: Likewise. + * target.h: Likewise. + * varobj.c: Likewise. + * varobj.h: Likewise. + * xml-support.h: Likewise. + +2019-10-15 Andrew Burgess <andrew.burgess@embecosm.com> + + * dwarf2read.c (dwarf2_per_objfile::~dwarf2_per_objfile): + Update for new std::vector based implementation. + (process_psymtab_comp_unit_reader): Likewise. + (scan_partial_symbols): Likewise. + (recursively_compute_inclusions): Likewise. + (compute_compunit_symtab_includes): Likewise. + (process_imported_unit_die): Likewise. + (queue_and_load_dwo_tu): Likewise. + (follow_die_sig_1): Likewise. + * dwarf2read.h: Remove DEF_VEC_P. + (typedef dwarf2_per_cu_ptr): Remove. + (struct dwarf2_per_cu_data) <imported_symtabs_empty>: New + function. + (struct dwarf2_per_cu_data) <imported_symtabs_push>: New function. + (struct dwarf2_per_cu_data) <imported_symtabs_size>: New function. + (struct dwarf2_per_cu_data) <imported_symtabs_free>: New function. + (struct dwarf2_per_cu_data) <imported_symtabs>: Change to + std::vector. + +2019-10-15 Tom Tromey <tromey@adacore.com> + + * windows-nat.c (windows_nat_target::resume): Use %x when logging + TID. + +2019-10-15 Tom Tromey <tromey@adacore.com> + + * windows-nat.c (windows_nat_target::fetch_registers) + (windows_nat_target::store_registers): Rename "pid" to "tid". + +2019-10-15 Tom Tromey <tromey@adacore.com> + + * gdbarch.h, gdbarch.c: Rebuild. + * gdbarch.sh (gcc_target_options): Change return type to + std::string. + * compile/compile.c (get_args): Update. + * nios2-tdep.c (nios2_gcc_target_options): Return std::string. + * arm-linux-tdep.c (arm_linux_gcc_target_options): Return + std::string. + * aarch64-linux-tdep.c (aarch64_linux_gcc_target_options): Return + std::string. + * arch-utils.c (default_gcc_target_options): Return std::string. + * arch-utils.h (default_gcc_target_options): Return std::string. + * s390-tdep.c (s390_gcc_target_options): Return std::string. + +2019-10-15 Christian Biesinger <cbiesinger@google.com> + + * breakpoint.c (breakpoint_chain): Make static. + * tui/tui-winsource.c: Call iterate_over_breakpoints instead + of accessing breakpoint_chain. + +2019-10-15 Christian Biesinger <cbiesinger@google.com> + + * breakpoint.c (iterate_over_breakpoints): Change function pointer + to a gdb::function_view and return value to bool. + * breakpoint.h (iterate_over_breakpoints): Likewise. + * dummy-frame.c (pop_dummy_frame_bpt): Update. + (pop_dummy_frame): Update. + * guile/scm-breakpoint.c (bpscm_build_bp_list): Update. + (gdbscm_breakpoints): Update. + * python/py-breakpoint.c (build_bp_list): Update. + (gdbpy_breakpoints): Update. + * python/py-finishbreakpoint.c (bpfinishpy_detect_out_scope_cb): + Update. + (bpfinishpy_handle_stop): Update. + (bpfinishpy_handle_exit): Update. + * solib-svr4.c (svr4_update_solib_event_breakpoint): Update. + (svr4_update_solib_event_breakpoints): Update. + +2019-10-15 Andreas Arnez <arnez@linux.ibm.com> + + * s390-tdep.c (s390_effective_inner_type): Ignore static fields + when unwrapping single-field structs. + +2019-10-14 Simon Marchi <simon.marchi@polymtl.ca> + + * dwarf2read.c: Remove includes. + +2019-10-13 Simon Marchi <simon.marchi@polymtl.ca> + + * ui-out.c (ui_out::call_do_message): Silence + -Wformat-nonliteral warning. + +2019-10-12 Simon Marchi <simon.marchi@polymtl.ca> + + * breakpoint.c: Remove some includes: continuations.h, skip.h, + mi/mi-main.h, readline/readline.h, readline/history.h. Add + include: readline/tilde.h. + +2019-10-12 Christian Biesinger <cbiesinger@google.com> + + * remote.c (remote_target::get_trace_status): Remove declaration of + trace_regblock_size. + +2019-10-12 Christian Biesinger <cbiesinger@google.com> + + * cli/cli-cmds.c (max_user_call_depth): Move comment to header. + (show_user): Remove declaration of cmdlist. + * cli/cli-cmds.h (max_user_call_depth): Declare. + * cli/cli-script.c (execute_user_command): Remove declaration + of max_user_call_depth. + +2019-10-11 Jim Wilson <jimw@sifive.com> + + * gdbsupport/print-utils.h (pulongest): Fix comment. + (plongest): Likewise. + (phex): Add missing comment, mention leading zeros. + (phex_nz): Add mention of no leading zeros to comment. + + * riscv-tdep.c (riscv_push_dummy_code): Change %lld to %s and use + plongest instead of unsigned long long cast. + +2019-10-10 Christian Biesinger <cbiesinger@google.com> + + * main.c (captured_main_1): Include gdbtk.h and remove declarations + for external_editor_command and gdbtk_test. + +2019-10-10 Christian Biesinger <cbiesinger@google.com> + + * mi/mi-cmd-var.c (varobjdebug): Remove declaration. + * varobj.c (varobjdebug): Move comment to... + * varobj.h (varobjdebug): ...here, and declare. + +2019-10-09 Tom Tromey <tom@tromey.com> + + * tui/tui-regs.c (tui_data_window::show_registers): Don't call + erase_data_content. + +2019-10-09 Tom Tromey <tom@tromey.com> + + * tui/tui-wingeneral.h (tui_delete_win): Don't declare. + * tui/tui-stack.c (tui_locator_window::rerender): Update. + * tui/tui-command.c (tui_cmd_window::resize) + (tui_refresh_cmd_win): Update. + * tui/tui-win.c (tui_resize_all, tui_set_focus_command): Update. + * tui/tui.c (tui_rl_other_window, tui_enable): Update. + * tui/tui-data.c (~tui_gen_win_info): Remove. + * tui/tui-layout.c (tui_gen_win_info::resize): Update. + * tui/tui-io.c (update_cmdwin_start_line, tui_putc, tui_puts) + (tui_redisplay_readline, tui_mld_flush) + (tui_mld_erase_entire_line, tui_mld_getc, tui_getc): Update. + * tui/tui-regs.c (tui_data_window::delete_data_content_windows) + (tui_data_window::erase_data_content) + (tui_data_item_window::rerender) + (tui_data_item_window::refresh_window): Update. + * tui/tui-wingeneral.c (tui_gen_win_info::refresh_window) + (box_win, tui_gen_win_info::make_window) + (tui_gen_win_info::make_visible): Update. + (tui_delete_win): Remove. + * tui/tui-winsource.c + (tui_source_window_base::do_erase_source_content): Update. + (tui_show_source_line, tui_source_window_base::update_tab_width) + (tui_source_window_base::update_exec_info): Update. + * tui/tui-data.h (struct curses_deleter): New. + (struct tui_gen_win_info) <handle>: Now a unique_ptr. + (struct tui_gen_win_info) <~tui_gen_win_info>: Define. + +2019-10-09 Tom Tromey <tom@tromey.com> + + * tui/tui-wingeneral.h (struct tui_gen_win_info): Don't declare. + +2019-10-09 Tom Tromey <tom@tromey.com> + + * tui/tui-data.c (tui_win_is_auxiliary): Remove. + * tui/tui-data.h (tui_win_is_auxiliary): Don't declare. + +2019-10-09 Tom Tromey <tom@tromey.com> + + * tui/tui-disasm.c (tui_get_low_disassembly_address): Compute + window height directly. + * tui/tui-layout.h (tui_default_win_viewport_height): Don't + declare. + * tui/tui-layout.c (tui_default_win_height): Remove. + (tui_default_win_viewport_height): Remove. + +2019-10-09 Tom Tromey <tom@tromey.com> + + * tui/tui.h: Remove comments. + +2019-10-09 Tom de Vries <tdevries@suse.de> + + * python/lib/gdb/printer/bound_registers.py: Use + '^builtin_type_bound128' as regexp argument for + add_builtin_pretty_printer. + +2019-10-09 Christian Biesinger <cbiesinger@google.com> + + * guile/guile.c (guile_extension_script_ops): Remove forward + declaration and mark as static. + (guile_script_ops): Likewise. + (extension_language_guile): Move further down in the file so + it can reference the definitions for guile_{extension_,}script_ops. + +2019-10-09 Andreas Arnez <arnez@linux.ibm.com> + + * s390-tdep.c (390_process_record): Handle new arch13 instructions + except SORTL, DFLTCC, and KDSA. + +2019-10-08 Tom Tromey <tromey@adacore.com> + + * windows-nat.c (struct windows_thread_info_struct) <sf>: Remove. + (struct safe_symbol_file_add_args): Remove. + +2019-10-08 Tom Tromey <tromey@adacore.com> + + * windows-nat.c: Don't include buildsym-legacy.h. + +2019-10-08 Tom Tromey <tromey@adacore.com> + + * contrib/ari/gdb_ari.sh (%p): Allow gdb-specific %p extensions. + +2019-10-08 Christian Biesinger <cbiesinger@google.com> + + * gdbtypes.c (overload_debug): Move comment to header. + * gdbtypes.h (overload_debug): Declare. + * valops.c: Remove declaration of overload_debug, instead + include gdbtypes.h. + +2019-10-08 Christian Biesinger <cbiesinger@google.com> + + * language.c (show_language_command): Pass lang_frame_mismatch_warn + through _(). + (lang_frame_mismatch_warn): Make const, mark with N_(), and + move comment... + * language.h (lang_frame_mismatch_warn): ... here. Also add + declaration. + * top.c (lang_frame_mismatch_warn): Remove declaration. + (check_frame_language_change): Pass lang_frame_mismatch_warn + through _(). + +2019-10-07 Christian Biesinger <cbiesinger@google.com> + + * c-lang.h (vtbl_ptr_name): Declare. + * cp-valprint.c (vtbl_ptr_name): Remove "extern" now that we get + it from the header. + * stabsread.c (define_symbol): Remove declaration of vtbl_ptr_name. + +2019-10-07 Christian Biesinger <cbiesinger@google.com> + + * charset.c (your_gdb_wchar_t_is_bogus): Replace with a + gdb_static_assert. + +2019-10-07 Weimin Pan <weimin.pan@oracle.com> + + * ../Makefile.def (dependencies): Add all-libctf to all-gdb + * ../Makefile.in: Add "all-gdb: maybe-all-libctf" + * ctfread.c: New file. + * ctfread.h: New file. + * elfread.c: Include ctfread.h. + (struct elfinfo text_p): New member ctfsect. + (elf_locate_sections): Mark CTF section. + (elf_symfile_read): Call elfctf_build_psymtabs. + * Makefile.in (LIBCTF): Add. + (CLIBS): Use it. + (CDEPS): Likewise. + (DIST): Add ctfread.c. + +2019-10-07 Andrew Burgess <andrew.burgess@embecosm.com> + + * ctfread.c (struct nextfield): Renamed to ... + (struct ctf_nextfield): ... this. + (struct field_info): Renamed to ... + (strut ctf_field_info): ... this. + (attach_fields_to_type): Update for renamed structures. + (ctf_add_member_cb): Likewise. + (ctf_add_enum_member_cb): Likewise. + (process_struct_members): Likewise. + (process_enum_type): Likewise. + +2019-10-07 Weimin Pan <weimin.pan@oracle.com> + + * tracectf.h: Rename, was ctf.h. + * tracectf.c: Rename, was ctf.c, replace ctf.h with tracectf.h. + * tracefile.c: Likewise. + * tracepoint.c: Remove unused include ctf.h. + * mi/mi-main.c: Likewise. + * Makefile.in Replace ctf.c with tracectf.c. + +2019-10-06 Joel Brobecker <brobecker@adacore.com> + + * version.in: Change version number to "9.0.50.DATE-git". + +2019-10-03 Tom Tromey <tom@tromey.com> + + PR rust/24976: + * dwarf2read.c (quirk_rust_enum): Handle single-element unions. + +2019-10-03 Andrew Burgess <andrew.burgess@embecosm.com> + + * f-lang.c (f_language_defn): Use cp_get_symbol_name_matcher and + cp_search_name_hash. + * NEWS: Add entry about nested function support. + +2019-10-03 Bernhard Heckel <bernhard.heckel@intel.com> + Andrew Burgess <andrew.burgess@embecosm.com> + + * cp-namespace.c (cp_search_static_and_baseclasses): Only search + for nested static variables when searchin VAR_DOMAIN. + * dwarf2read.c (add_partial_symbol): Add nested subroutines to the + global scope, update comment. + (add_partial_subprogram): Call add_partial_subprogram recursively + for nested subroutines when processinng Fortran. + (load_partial_dies): Process the child entities of a subprogram + when processing Fortran. + (partial_die_parent_scope): Handle building scope + for Fortran nested functions. + (process_die): Record that nested functions have a scope. + (new_symbol): Always record Fortran subprograms on the global + symbol list. + (determine_prefix): How to build the prefix for Fortran + subprograms. + +2019-10-03 Andrew Burgess <andrew.burgess@embecosm.com> + + * linux-nat.c (linux_nat_filter_event): Don't ignore SIGSTOP if we + have just sent the thread a SIGSTOP and are waiting for it to + arrive. + +2019-10-03 Andrew Burgess <andrew.burgess@embecosm.com> + + * btrace.c (btrace_add_pc): Remove whitespace before the template + parameter in 'std::vector <...>'. + (parse_xml_btrace_block): Likewise. + (btrace_maint_decode_pt): Likewise. + (btrace_maint_update_packets): Likewise. + (btrace_maint_print_packets): Likewise. + * btrace.h (struct btrace_maint_info): Likewise. + * dwarf2read.c (struct type_unit_group): Likewise. + (build_type_psymtabs_reader): Likewise. + * gdbsupport/btrace-common.c (btrace_data_append): Likewise. + * gdbsupport/btrace-common.h (struct btrace_data_bts): Likewise. + * nat/linux-btrace.c (perf_event_read_bts): Likewise. + +2019-10-03 Tom de Vries <tdevries@suse.de> + + * cli/cli-style.c (_initialize_cli_style): Adding a '.' at the end of + the first line of the help text for set/show style metadata. + +2019-10-02 Tom Tromey <tromey@adacore.com> + + * Makefile.in (COMMON_SFILES): Add common-inferior.c. + * gdbsupport/common-inferior.c: New file. + * infcmd.c (startup_with_shell): Don't define. + * nat/fork-inferior.h (startup_with_shell): Don't declare. + * gdbsupport/common-inferior.h (startup_with_shell): Declare. + * inferior.h (startup_with_shell): Don't declare. + +2019-10-02 Christian Biesinger <cbiesinger@google.com> + + * gdbsupport/gdb_assert.h: Include errors.h. + * gdbsupport/gdb_string_view.h: Include gdb_assert.h. + +2019-10-02 Tom Tromey <tromey@adacore.com> + + * NEWS: Add $_ada_exception entry. + * ada-lang.c (struct ada_catchpoint): Add constructor. + <m_kind>: New member. + (allocate_location_exception, re_set_exception): Remove + "ex" parameter. + (should_stop_exception): Compute $_ada_exception. + (check_status_exception, print_it_exception) + (print_one_exception, print_mention_exception): Remove + "ex" parameter. + (allocate_location_catch_exception, re_set_catch_exception) + (check_status_exception, print_it_catch_exception) + (print_one_catch_exception, print_mention_catch_exception) + (print_recreate_catch_exception) + (allocate_location_catch_exception_unhandled) + (re_set_catch_exception_unhandled) + (check_status_exception, print_it_catch_exception_unhandled) + (print_one_catch_exception_unhandled) + (print_mention_catch_exception_unhandled) + (print_recreate_catch_exception_unhandled) + (allocate_location_catch_assert, re_set_catch_assert) + (check_status_assert, print_it_catch_assert) + (print_one_catch_assert, print_mention_catch_assert) + (print_recreate_catch_assert) + (allocate_location_catch_handlers, re_set_catch_handlers) + (check_status_handlers, print_it_catch_handlers) + (print_one_catch_handlers, print_mention_catch_handlers) + (print_recreate_catch_handlers): Remove. + (create_ada_exception_catchpoint): Update. + (initialize_ada_catchpoint_ops): Update. + +2019-10-02 Tom Tromey <tromey@adacore.com> + + * ada-lang.c (ada_lookup_simple_minsyms): Remove. + (create_excep_cond_exprs): Simplify exception string computation. + (ada_exception_catchpoint_cond_string): Likewise. + +2019-10-02 Tom Tromey <tromey@adacore.com> + + * symmisc.c (dump_msymbols): Don't use MSYMBOL_VALUE_ADDRESS. + * ada-lang.c (lesseq_defined_than): Handle + LOC_STATIC. + * dwarf2read.c (dwarf2_per_objfile): Add can_copy + parameter. + (dwarf2_has_info): Likewise. + (new_symbol): Set maybe_copied on symbol when + appropriate. + * dwarf2read.h (dwarf2_per_objfile): Add can_copy + parameter. + <can_copy>: New member. + * elfread.c (record_minimal_symbol): Set maybe_copied + on symbol when appropriate. + (elf_symfile_read): Update call to dwarf2_has_info. + * minsyms.c (lookup_minimal_symbol_linkage): New + function. + * minsyms.h (lookup_minimal_symbol_linkage): Declare. + * symtab.c (get_symbol_address, get_msymbol_address): + New functions. + * symtab.h (get_symbol_address, get_msymbol_address): + Declare. + (SYMBOL_VALUE_ADDRESS, MSYMBOL_VALUE_ADDRESS): Handle + maybe_copied. + (struct symbol, struct minimal_symbol) <maybe_copied>: + New member. + +2019-10-02 Tom Tromey <tromey@adacore.com> + + * source.c (struct current_source_location): New. + (current_source_key): New global. + (current_source_symtab, current_source_line) + (current_source_pspace): Remove. + (get_source_location): New function. + (get_current_source_symtab_and_line) + (set_default_source_symtab_and_line) + (set_current_source_symtab_and_line) + (clear_current_source_symtab_and_line, select_source_symtab) + (info_source_command, print_source_lines_base) + (info_line_command, search_command_helper, _initialize_source): + Update. + +2019-10-02 Tom Tromey <tromey@adacore.com> + + * source.c (select_source_symtab): Don't call + decode_line_with_current_source. + +2019-10-02 Andrew Burgess <andrew.burgess@embecosm.com> + + * symtab.c (lookup_global_symbol): Search global block. + +2019-10-02 Tom Tromey <tromey@adacore.com> + + * coffread.c (process_coff_symbol): Update. + * dwarf2read.c (var_decode_location, new_symbol): Update. + * mdebugread.c (parse_symbol): Update. + * objfiles.c (relocate_one_symbol): Update. + * stabsread.c (define_symbol, fix_common_block) + (scan_file_globals): Update. + * symtab.h (SYMBOL_VALUE_ADDRESS): Expand to an rvalue. + (SET_SYMBOL_VALUE_ADDRESS): New macro. + * xcoffread.c (process_xcoff_symbol): Update. + +2019-10-02 Andreas Arnez <arnez@linux.ibm.com> + + * MAINTAINERS: Update my email address. + +2019-10-02 Andrew Burgess <andrew.burgess@embecosm.com> + + * dwarf2read.c (struct type_unit_group) <tus>: Convert to + std::vector. + (build_type_psymtabs_reader): Update for std::vector. + (build_type_psymtab_dependencies): Likewise. + * dwarf2read.h: Remove use of DEF_VEC_P. + (typedef sig_type_ptr): Delete. + +2019-10-02 Andrew Burgess <andrew.burgess@embecosm.com> + + * btrace.c (btrace_maint_clear): Update to handle change from VEC + to std::vector. + (btrace_maint_decode_pt): Likewise, and move allocation of the + vector outside of the loop. + (btrace_maint_update_packets): Update to handle change from VEC to + std::vector. + (btrace_maint_print_packets): Likewise. + (maint_info_btrace_cmd): Likewise. + * btrace.h: Remove use of DEF_VEC_O. + (typedef btrace_pt_packet_s): Delete. + (struct btrace_maint_info) <packets>: Change fromm VEC to + std::vector. + * gdbsupport/btrace-common.h: Remove 'vec.h' include. + +2019-10-02 Andrew Burgess <andrew.burgess@embecosm.com> + + * btrace.c (btrace_compute_ftrace_bts): Update for std::vector, + make accesses into the vector constant references. + (btrace_add_pc): Update for std::vector. + (btrace_stitch_bts): Likewise. + (parse_xml_btrace_block): Likewise. + (btrace_maint_update_packets): Likewise. + (btrace_maint_print_packets): Likewise. + (maint_info_btrace_cmd): Likewise. + * gdbsupport/btrace-common.c (btrace_data::fini): Update for + std::vector. + (btrace_data::empty): Likewise. + (btrace_data_append): Likewise. + * gdbsupport/btrace-common.h: Remove use of DEF_VEC_O. + (typedef btrace_block_s): Delete. + (struct btrace_block): Add constructor. + (struct btrace_data_bts) <blocks>: Change to std::vector. + * nat/linux-btrace.c (perf_event_read_bts): Update for + std::vector. + (linux_read_bts): Likewise. + +2019-10-01 Tom Tromey <tom@tromey.com> + + * cli/cli-logging.c (show_logging_filename): Use styled_string. + +2019-10-01 Tom Tromey <tom@tromey.com> + + * stack.c (print_frame, info_frame_command_core): Use + styled_string. + * linux-thread-db.c (try_thread_db_load_1) + (try_thread_db_load_from_pdir_1): Use styled_string. + * auto-load.c (file_is_auto_load_safe, execute_script_contents) + (auto_load_section_scripts, info_auto_load_local_gdbinit) + (maybe_print_unsupported_script_warning) + (maybe_print_script_not_found_warning): Use styled_string. + * ada-lang.c (user_select_syms): Use styled_string. + +2019-10-01 Tom Tromey <tom@tromey.com> + + * p-lang.c (pascal_printstr): Use metadata style. + * value.c (show_convenience): Use metadata style. + * valprint.c (valprint_check_validity, val_print_optimized_out) + (val_print_not_saved, val_print_unavailable) + (val_print_invalid_address, generic_val_print, val_print) + (value_check_printable, val_print_array_elements): Use metadata + style. + * ui-out.h (class ui_out) <field_fmt>: New overload. + <do_field_fmt>: Add style parameter. + * ui-out.c (ui_out::field_fmt): New overload. + * typeprint.c (type_print_unknown_return_type) + (val_print_not_allocated, val_print_not_associated): Use metadata + style. + * tui/tui-out.h (class tui_ui_out) <do_field_fmt>: Add style + parameter. + * tui/tui-out.c (tui_ui_out::do_field_fmt): Update. + * tracepoint.c (tvariables_info_1): Use metadata style. + * stack.c (print_frame_arg, print_frame_info, print_frame) + (info_frame_command_core): Use metadata style. + * skip.c (info_skip_command): Use metadata style. + * rust-lang.c (rust_print_enum): Use metadata style. + * python/py-prettyprint.c (print_stack_unless_memory_error): Use + metadata style. + * python/py-framefilter.c (py_print_single_arg): Use metadata + style. + * printcmd.c (do_one_display, print_variable_and_value): Use + metadata style. + * p-valprint.c (pascal_val_print) + (pascal_object_print_value_fields): Use metadata style. + * p-typeprint.c (pascal_type_print_base): Use metadata style. + * mi/mi-out.h (class mi_ui_out) <do_field_fmt>: Add style + parameter. + * mi/mi-out.c (mi_ui_out::do_field_fmt): Update. + * m2-valprint.c (m2_print_long_set): Use metadata style. + * m2-typeprint.c (m2_print_type): Use metadata style. + * infcmd.c (print_return_value_1): Use metadata style. + * gnu-v3-abi.c (print_one_vtable): Use metadata style. + * f-valprint.c (info_common_command_for_block): Use metadata + style. + * f-typeprint.c (f_type_print_base): Use metadata style. + * expprint.c (print_subexp_standard): Use metadata style. + * cp-valprint.c (cp_print_value_fields): Use metadata style. + * cli/cli-style.h (class cli_style_option): Add constructor. + (metadata_style): Declare. + * cli/cli-style.c (metadata_style): New global. + (_initialize_cli_style): Register metadata style. + * cli-out.h (class cli_ui_out) <do_field_fmt>: Add style + parameter. + * cli-out.c (cli_ui_out::do_field_fmt): Update. + * c-typeprint.c (c_type_print_base_struct_union) + (c_type_print_base_1): Use metadata style. + * breakpoint.c (watchpoint_value_print) + (print_one_breakpoint_location): Use metadata style. + * break-catch-syscall.c (print_one_catch_syscall): Use metadata + style. + * break-catch-sig.c (signal_catchpoint_print_one): Use metadata + style. + * ada-valprint.c (val_print_packed_array_elements, printstr) + (print_field_values, ada_val_print_ref, ada_val_print): Use + metadata style. + * ada-typeprint.c (print_array_type, ada_print_type): Use metadata + style. + * ada-tasks.c (print_ada_task_info, info_task): Use metadata + style. + * ada-lang.c (user_select_syms): Use metadata style. + +2019-10-01 Tom Tromey <tom@tromey.com> + + * cli/cli-cmds.c (pwd_command): Style output. + +2019-10-01 Pedro Alves <palves@redhat.com> + Tom Tromey <tom@tromey.com> + + * symtab.c (print_symbol_info): Use %ps. + (print_msymbol_info): Use %ps. + * symfile.c (symbol_file_add_with_addrs): Use %ps. + * printcmd.c (print_variable_and_value): Use %ps. + * macrocmd.c (show_pp_source_pos): Use %ps. + * infrun.c (print_exited_reason): Use ui_out::message. + * breakpoint.c (watchpoint_check, print_one_breakpoint_location) + (describe_other_breakpoints): Use ui_out::message and new + formats. + (say_where): Use new formats. + (bkpt_print_it, tracepoint_print_one_detail): Use ui_out::message + and new formats. + +2019-10-01 Pedro Alves <palves@redhat.com> + Tom Tromey <tom@tromey.com> + + * unittests/format_pieces-selftests.c: Add gdb_format parameter. + (test_gdb_formats): New function. + (run_tests): Call it. + (test_format_specifier): Update. + * utils.h (fputs_filtered): Update comment. + (vfprintf_styled, vfprintf_styled_no_gdbfmt) + (fputs_styled_unfiltered): Declare. + * utils.c (fputs_styled_unfiltered): New function. + (vfprintf_maybe_filtered): Add gdbfmt parameter. + (vfprintf_filtered): Update. + (vfprintf_unfiltered, vprintf_filtered): Update. + (vfprintf_styled, vfprintf_styled_no_gdbfmt): New functions. + * ui-out.h (enum ui_out_flag) <unfiltered_output, + disallow_ui_out_field>: New constants. + (enum class field_kind): New. + (struct base_field_s, struct signed_field_s): New. + (signed_field): New function. + (struct string_field_s): New. + (string_field): New function. + (struct styled_string_s): New. + (styled_string): New function. + (class ui_out) <message>: Add comment. + <vmessage, call_do_message>: New methods. + <do_message>: Add style parameter. + * ui-out.c (ui_out::call_do_message, ui_out::vmessage): New + methods. + (ui_out::message): Rewrite. + * mi/mi-out.h (class mi_ui_out) <do_message>: Add style + parameter. + * mi/mi-out.c (mi_ui_out::do_message): Add style parameter. + * gdbsupport/format.h (class format_pieces) <format_pieces>: Add + gdb_extensions parameter. + (class format_piece): Add parameter to constructor. + (n_int_args): New field. + * gdbsupport/format.c (format_pieces::format_pieces): Add + gdb_extensions parameter. Handle '*'. + * cli-out.h (class cli_ui_out) <do_message>: Add style parameter. + * cli-out.c (cli_ui_out::do_message): Add style parameter. Call + vfprintf_styled_no_gdbfmt. + (cli_ui_out::do_field_string, cli_ui_out::do_spaces) + (cli_ui_out::do_text, cli_ui_out::field_separator): Allow + unfiltered output. + * ui-style.h (struct ui_file_style) <ptr>: New method. + +2019-10-01 Tom Tromey <tom@tromey.com> + + * unittests/format_pieces-selftests.c: Update. Add final format. + * gdbsupport/format.c (format_pieces::format_pieces): Don't add + empty literal pieces. + +2019-10-01 Tom Tromey <tom@tromey.com> + + * ui-out.h (enum class ui_out_style_kind): Remove. + (class ui_out) <field_string, field_stsream, do_field_string>: + Change type of "style". + * ui-out.c (ui_out::field_core_addr, ui_out::field_stream) + (ui_out::field_string): Update. + * tui/tui-out.h (class tui_ui_out) <do_field_string>: Change type + of "style". + * tui/tui-out.c (tui_ui_out::do_field_string): Update. + * tracepoint.c (print_one_static_tracepoint_marker): Update. + * stack.c (print_frame_arg, print_frame_info, print_frame): + Update. + * source.c (print_source_lines_base): Update. + * solib.c (info_sharedlibrary_command): Update. + * skip.c (info_skip_command): Update. + * record-btrace.c (btrace_call_history_src_line) + (btrace_call_history): Update. + * python/py-framefilter.c (py_print_frame): Update. + * mi/mi-out.h (class mi_ui_out) <do_field_string>: Change type of + "style". + * mi/mi-out.c (mi_ui_out::do_table_header) + (mi_ui_out::do_field_signed, mi_ui_out::do_field_unsigned) + (mi_ui_out::do_field_string): Update. + * disasm.c (gdb_pretty_print_disassembler::pretty_print_insn): + Update. + * cli-out.h (class cli_ui_out) <do_field_string>: Change type of + "style". + * cli-out.c (cli_ui_out::do_table_header) + (cli_ui_out::do_field_signed, cli_ui_out::do_field_unsigned) + (cli_ui_out::do_field_skip, cli_ui_out::do_field_string) + (cli_ui_out::do_field_fmt): Update. + * breakpoint.c (print_breakpoint_location): Update. + (update_static_tracepoint): Update. + +2019-10-01 Philippe Waroquiers <philippe.waroquiers@skynet.be> + + * main.c (relocate_gdbinit_path_maybe_in_datadir): Remove std::string + conversion of gdb_datadir. + (captured_main_1): Remove xstrdup when assigning to gdb_datadir, + remove not needed c_str (). + +2019-09-30 Ali Tamur <tamur@google.com> + + * dwarf2read.c (skip_one_die): Handle DW_FORM_strx forms. + (dwarf2_string_attr): Likewise. + +2019-09-30 Ali Tamur <tamur@google.com> + + * dwarf2read.c (process_full_comp_unit): Remove whitespace at the EOL. + (process_full_type_unit): Likewise. + (dump_die_shallow): Likewise. + (cu_debug_loc_section): Likewise. + +2019-09-28 Christian Biesinger <cbiesinger@google.com> + + * minsyms.c (compare_minimal_symbols): Rename to... + (minimal_symbol_is_less_than): ...this, and adjust to STL + conventions (return bool, take arguments as references) + (minimal_symbol_reader::install): Call std::sort instead + of qsort. + +2019-09-29 Christian Biesinger <cbiesinger@google.com> + + * minsyms.h (msymbol_hash): Document that this is a case-insensitive + hash and why. + * objfiles.h (struct objfile_per_bfd_storage) <demangled_names_hash, + msymbol_hash, msymbol_demangled_hash>: Improve comments. + +2019-09-30 Simon Marchi <simon.marchi@polymtl.ca> + + * psymtab.c (add_psymbol_to_list): Move comment to psympriv.h. + * psympriv.h (add_psymbol_to_list): Move comment here and update + it. + +2019-09-29 Tom de Vries <tdevries@suse.de> + + * contrib/cc-with-tweaks.sh (get_tmpdir): New function. + Use $tmpdir/$(basename "$output_file").dwz instead of + "${output_file}.dwz". + +2019-09-28 Simon Marchi <simon.marchi@polymtl.ca> + + PR gdb/25045 + * hppa-linux-nat.c: Include gdbarch.h. + +2019-09-26 Christian Biesinger <cbiesinger@google.com> + + * blockframe.c (find_pc_partial_function): Change return type to bool. + * elfread.c (elf_gnu_ifunc_resolve_name): Likewise. + * minsyms.c (in_gnu_ifunc_stub): Likewise. + (stub_gnu_ifunc_resolve_name): Likewise. + * symtab.c (compare_filenames_for_search): Likewise. + (compare_glob_filenames_for_search): Likewise. + (matching_obj_sections): Likewise. + (symbol_matches_domain): Likewise. + (find_line_symtab): Change out param EXACT_MATCH to bool *. + (find_line_pc): Change return type to bool. + (find_line_pc_range): Likewise. + (producer_is_realview): Likewise. + * symtab.h (symbol_matches_domain): Likewise. + (find_pc_partial_function): Likewise. + (find_pc_line_pc_range): Likewise. + (in_gnu_ifunc_stub): Likewise. + (struct gnu_ifunc_fns) <gnu_ifunc_resolve_name>: Likewise. + (find_line_pc): Likewise. + (find_line_pc_range): Likewise. + (matching_obj_sections): Likewise. + (find_line_symtab): Change out parameter to bool. + (producer_is_realview): Change return type to bool. + (compare_filenames_for_search): Likewise. + (compare_glob_filenames_for_search): Likewise. + +2019-09-26 Tom Tromey <tom@tromey.com> + + * Makefile.in (COMMON_SFILES): Remove gdb_usleep.c. + (HFILES_NO_SRCDIR): Remove gdb_usleep.h. + * gdb_usleep.h: Remove. + * gdb_usleep.c: Remove. + * utils.c: Don't include gdb_usleep.h. + +2019-09-26 Tom Tromey <tromey@adacore.com> + + * python/py-type.c (type_to_type_object): Call check_typedef + for stub types. + +2019-09-26 Tom Tromey <tom@tromey.com> + + * utils.h (initialize_utils): Don't declare. + * top.c (gdb_init): Don't call initialize_utils. + * utils.c (initialize_utils): Remove. Move contents... + (_initialize_utils): ... here. + +2019-09-25 Tom Tromey <tom@tromey.com> + + * python/py-objfile.c (objfpy_get_build_id): Use bin2hex. + * utils.h (make_hex_string): Don't declare. + * utils.c (make_hex_string): Remove. + +2019-09-24 Tom de Vries <tdevries@suse.de> + + PR gdb/23815 + * amd64-linux-nat.c (amd64_linux_nat_target::fetch_registers): + Initialize xstateregs before ptrace PTRACE_GETREGSET call. + +2019-09-23 Dimitar Dimitrov <dimitar@dinux.eu> + + * NEWS: Mention new simulator port for PRU. + +2019-09-23 Christian Biesinger <cbiesinger@google.com> + + * ada-exp.y (write_object_remaining): Update. + * ada-lang.c (ada_decode): Return a std::string instead of a char* + and eliminate the static buffer. + (ada_decode_symbol): Update. + (ada_la_decode): Update. + (ada_sniff_from_mangled_name): Update. + (is_valid_name_for_wild_match): Update. + (ada_lookup_name_info::matches): Update and simplify. + (name_matches_regex): Update. + (ada_add_global_exceptions): Update. + * ada-lang.h (ada_decode): Update signature. + * ada-varobj.c (ada_varobj_describe_simple_array_child): Update. + * dwarf-index-write.c (debug_names::insert): Update. + +2019-09-21 Simon Marchi <simon.marchi@polymtl.ca> + + * solib-svr4.c (svr4_iterate_over_objfiles_in_search_order): Fix + formatting. + +2019-09-21 Simon Marchi <simon.marchi@polymtl.ca> + + * breakpoint.h (bp_location) <inserted, permanent, duplicate>: + Change "nonzero" to "true" in documentation. + +2019-09-20 Christian Biesinger <cbiesinger@google.com> + + * solib-darwin.c (darwin_lookup_lib_symbol): Remove. + (_initialize_darwin_solib): Don't set + darwin_so_ops.lookup_lib_global_symbol. + * solib-svr4.c (set_solib_svr4_fetch_link_map_offsets): Call + set_gdbarch_iterate_over_objfiles_in_search_order. + (elf_lookup_lib_symbol): Rename to... + (svr4_iterate_over_objfiles_in_search_order): this, and update + to iterate semantics. + (_initialize_svr4_solib): Don't set lookup_lib_global_symbol. + * solib.c (solib_global_lookup): Remove. + * solist.h (struct target_so_ops): Remove lookup_lib_global_symbol. + (solib_global_lookup): Remove. + * symtab.c (lookup_global_or_static_symbol): Remove call to + solib_global_lookup. + +2019-09-20 Joel Brobecker <brobecker@adacore.com> + + * NEWS: Move entries about default MI version now being + version 3, and about the GDB/MI fix for multi-location + breakpoints to the "since GDB 8.3" section. + +2019-09-20 Joel Brobecker <brobecker@adacore.com> + + GDB 8.3.1 released. + +2019-09-20 Ulrich Weigand <uweigand@de.ibm.com> + + * NEWS: Mention that Cell/B.E. debugging support was removed. + * MAINTAINERS: Remove spu target. + + * config/djgpp/fnchange.lst: Remove entries for removed files. + + * Makefile.in (ALL_TARGET_OBS): Remove solib-spu.o, + spu-multiarch.o, and spu-tdep.o. + (HFILES_NO_SRCDIR): Remove solib-spu.h and spu-tdep.h. + (ALLDEPFILES): Remove solib-spu.c, spu-linux-nat.c, + spu-multiarch.c, and spu-tdep.c. + * spu-linux-nat.c: Remove file. + * spu-multiarch.c: Remove file. + * spu-tdep.c: Remove file. + * spu-tdep.h: Remove file. + * solib-spu.c: Remove file. + * solib-spu.h: Remove file. + + * configure.host (powerpc64*-*-linux*): Remove Cell/B.E. support. + * configure.nat (spu-linux): Remove. + * configure.tgt (powerpc*-*-linux*): Remove solib-spu.o and + solib-multiarch.o from gdb_target_obs. + (spu*-*-*): Remove. + + * arch/ppc-linux-common.h (struct ppc_linux_features): Remove "cell" + feature flag. + (ppc_linux_no_features): Update. + * arch/ppc-linux-common.c (ppc_linux_match_description): Remove + Cell/B.E. support. + * arch/ppc-linux-tdesc.h (tdesc_powerpc_cell32l): Remove declaration. + (tdesc_powerpc_cell64l): Likewise. + * nat/ppc-linux.h (PPC_FEATURE_CELL): Remove. + * ppc-linux-nat.c (ppc_linux_nat_target::read_description): Remove + Cell/B.E. support. + * ppc-linux-tdep.h: Do not include "solib-spu.h" or "spu-tdep.h". + Do not include "features/rs6000/powerpc-cell32l.c" or + "features/rs6000/powerpc-cell64l.c". + (ppc_linux_spu_section): Remove. + (ppc_linux_core_read_description): Remove Cell/B.E. support. + (spe_context_objfile, spe_context_lm_addr, spe_context_offset, + spe_context_cache_ptid, spe_context_cache_ptid): Remove. + (ppc_linux_spe_context_lookup): Remove. + (ppc_linux_spe_context_inferior_created): Remove. + (ppc_linux_spe_context_solib_loaded): Remove. + (ppc_linux_spe_context_solib_unloaded): Remove. + (ppc_linux_spe_context): Remove. + (struct ppu2spu_cache): Remove. + (ppu2spu_prev_arch, ppu2spu_this_id, ppu2spu_prev_register): Remove. + (struct ppu2spu_data): Remove. + (ppu2spu_unwind_register, ppu2spu_sniffer, ppu2spu_dealloc_cache, + ppu2spu_unwind): Remove. + (ppc_linux_init_abi): Remove Cell/B.E. support. + * rs6000-tdep.h (rs6000_gdbarch_init): Remove Cell/B.E. support. + + * features/Makefile (rs6000/powerpc-cell32l-expedite): Remove. + (rs6000/powerpc-cell64l-expedite): Likewise + (WHICH): Remove rs6000/powerpc-cell32l and rs6000/powerpc-cell64l. + (XMLTOC): Remove rs6000/powerpc-cell32l.xml and + rs6000/powerpc-cell64l.xml. + * features/rs6000/powerpc-cell32l.xml: Remove. + * features/rs6000/powerpc-cell64l.xml: Likewise. + * features/rs6000/powerpc-cell32l.c: Remove generated file. + * features/rs6000/powerpc-cell64l.c: Likewise. + * regformats/rs6000/powerpc-cell32l.dat: Remove generated file. + * regformats/rs6000/powerpc-cell64l.dat: Likewise. + * regformats/reg-spu.dat: Remove. + + * target.h (enum target_object): Remove TARGET_OBJECT_SPU. + * corelow.c (struct spuid_list): Remove. + (add_to_spuid_list): Remove. + (core_target::xfer_partial): Remove support for TARGET_OBJECT_SPU. + * remote.c (PACKET_qXfer_spu_read, PACKET_qXfer_spu_write): Remove. + (remote_protocol_features): Remove associated entries. + (_initialize_remote): No longer initialize them. + (remote_target::xfer_partial): Remove support for TARGET_OBJECT_SPU. + * linux-nat.c (SPUFS_MAGIC): Remove. + (linux_proc_xfer_spu): Remove. + (spu_enumerate_spu_ids): Remove. + (linux_nat_target::xfer_partial): Remove support for TARGET_OBJECT_SPU. + * linux-tdep.c (-linux_spu_make_corefile_notes): Remove. + (linux_make_corefile_notes): No longer call it. + + * regcache.c (cooked_read_test): Remove bfd_arch_spu special case. + (cooked_write_test): Likewise. + +2019-09-20 Tom Tromey <tom@tromey.com> + + * NEWS: Mention case-sensitivity of TUI commands. + * tui/tui-win.c (tui_set_focus_command): Now case-sensitive. + (tui_set_win_height_command, parse_scrolling_args): Likewise. + * tui/tui-layout.c (tui_layout_command): Now case-sensitive. + +2019-09-20 Tom Tromey <tom@tromey.com> + + * tui/tui-source.c (tui_source_window::set_contents): Use + make_unique_xstrdup. + * tui/tui-disasm.c (tui_disasm_window::set_contents): Use + make_unique_xstrdup. + +2019-09-20 Tom Tromey <tom@tromey.com> + + * tui/tui-data.c: Remove separator comments. + * tui/tui-layout.c: Remove separator comments. + * tui/tui-win.c: Remove separator comments. + * tui/tui-wingeneral.c: Remove separator comments. + +2019-09-20 Tom Tromey <tom@tromey.com> + + * tui/tui.h (strcat_to_buf): Don't declare. + * tui/tui.c (strcat_to_buf): Remove. + +2019-09-20 Tom Tromey <tom@tromey.com> + + * tui/tui-source.h (struct tui_source_window) <m_fullname>: Rename + from "fullname". + * tui/tui-source.c (tui_source_window::set_contents) + (tui_source_window::location_matches_p) + (tui_source_window::maybe_update): Update. + +2019-09-20 Tom Tromey <tom@tromey.com> + + * tui/tui-regs.h (struct tui_data_window) <get_current_group>: + Update. + <m_regs_content, m_regs_column_count, m_current_group>: Add "m_" + prefix. + * tui/tui-regs.c (tui_data_window::last_regs_line_no) + (tui_data_window::line_from_reg_element_no) + (tui_data_window::first_reg_element_no_inline) + (tui_data_window::show_registers) + (tui_data_window::show_register_group) + (tui_data_window::display_registers_from) + (tui_data_window::display_registers_from_line) + (tui_data_window::first_data_item_displayed) + (tui_data_window::delete_data_content_windows) + (tui_data_window::erase_data_content) + (tui_data_window::do_scroll_vertical) + (tui_data_window::refresh_window) + (tui_data_window::check_register_values): Update. + +2019-09-20 Tom Tromey <tom@tromey.com> + + * tui/tui-stack.h (MAX_LOCATOR_ELEMENT_LEN): Remove define. + (struct tui_locator_window) <full_name, proc_name>: Now + std::string. + * tui/tui-stack.c (tui_locator_window::make_status_line) + (tui_locator_window::set_locator_fullname) + (tui_locator_window::set_locator_info): Update. + * tui/tui-source.c (tui_source_window::set_contents) + (tui_source_window::showing_source_p): Update. + +2019-09-20 Tom Tromey <tom@tromey.com> + + * tui/tui-stack.c (tui_locator_window::set_locator_fullname): + Don't call tui_locator_win_info_ptr. + +2019-09-20 Tom Tromey <tom@tromey.com> + + * tui/tui-win.c (tui_resize_all): Don't call refresh. + +2019-09-20 Tom Tromey <tom@tromey.com> + + * tui/tui-win.c (tui_resize_all, tui_adjust_win_heights): Use 1 as + height for locator. + * tui/tui-stack.c (tui_locator_window::rerender): Call scrollok. + * tui/tui-layout.c (show_source_disasm_command, show_data) + (show_source_or_disasm_and_command): Use 1 as height for locator. + +2019-09-20 Tom Tromey <tom@tromey.com> + + * tui/tui.c (tui_enable): Update. + * tui/tui-win.c (tui_sigwinch_handler, tui_async_resize_screen): + Update. + * tui/tui-data.h (tui_win_resized, tui_set_win_resized_to): + Update. + * tui/tui-data.c (win_resized): Now bool. + (tui_win_resized): Return bool. + (tui_set_win_resized_to): Accept a bool. + +2019-09-20 Tom Tromey <tom@tromey.com> + + * tui/tui-regs.h (struct tui_data_window) <show_register_group>: + Change type of "refresh_values_only". + * tui/tui-regs.c (tui_data_window::show_register_group): Change + type of "refresh_values_only". + +2019-09-20 Tom Tromey <tom@tromey.com> + + * tui/tui-disasm.c (struct tui_asm_line) <addr_string, insn>: Now + std::string. + (tui_disassemble): Add "pos" parameter. + (tui_disasm_window::set_contents): Simplify. + +2019-09-20 Tom Tromey <tom@tromey.com> + + * tui/tui-winsource.h (struct tui_source_window_base) + <show_source_content>: Now private. + * tui/tui-winsource.c + (tui_source_window_base::show_source_content): Don't handle empty + content case. + +2019-09-20 Tom Tromey <tom@tromey.com> + + * tui/tui-layout.c (show_source_disasm_command) + (show_source_or_disasm_and_command): Don't call + show_source_content. + +2019-09-20 Tom Tromey <tom@tromey.com> + + * tui/tui-stack.h (struct tui_locator_window) <make_status_line>: + Declare. + * tui/tui-stack.c (tui_locator_window::make_status_line): Rename + from tui_make_status_line. + (tui_locator_window::rerender): Update. + +2019-09-20 Tom Tromey <tom@tromey.com> + + * tui/tui-stack.c (tui_make_status_line): Return std::string. + (tui_locator_window::rerender): Update. + +2019-09-20 Tom Tromey <tom@tromey.com> + + * tui/tui-winsource.h (struct tui_source_window_base) + <~tui_source_window_base>: Don't declare. + <fullname>: Remove. + * tui/tui-winsource.c (~tui_source_window_base): Remove. + * tui/tui-source.h (struct tui_source_window) <fullname>: New + member. + * tui/tui-source.c (tui_source_window::set_contents): Update. + (tui_source_window::location_matches_p) + (tui_source_window::maybe_update): Update. + +2019-09-20 Tom Tromey <tom@tromey.com> + + * tui/tui-winsource.h (~tui_source_element): Remove. + (tui_source_element): Update. + (struct tui_source_element) <line>: Now a unique_xmalloc_ptr. + * tui/tui-winsource.c (tui_show_source_line): Update. + * tui/tui-source.c (tui_source_window::set_contents): Update. + * tui/tui-disasm.c (tui_disasm_window::set_contents): Update. + +2019-09-20 Tom Tromey <tom@tromey.com> + + * tui/tui-data.h (tui_clear_source_windows_detail): Don't + declare. + * tui/tui-layout.c (tui_add_win_to_layout): Don't call + tui_clear_source_windows_detail. + * tui/tui-winsource.h (struct tui_source_window_base) + <clear_detail>: Don't declare. + * tui/tui-winsource.c (tui_source_window_base::clear_detail): + Remove. + * tui/tui-data.c (tui_clear_source_windows_detail): Remove. + +2019-09-20 Tom Tromey <tromey@adacore.com> + + PR ada/24919: + * block.c (contained_in): Fix final return value. + +2019-09-20 Alan Modra <amodra@gmail.com> + + * gdb_bfd.c (gdb_bfd_ref, gdb_bfd_unref): Use bfd_set_usrdata. + * dwarf2read.c (dwarf2_read_gdb_index, dwarf2_read_debug_names), + (read_indirect_string_from_dwz): Use bfd accessor. + * dwarf2read.h (struct dwz_file <filename>): Likewise. + * machoread.c (macho_symfile_read_all_oso): Likewise. + * solib.c (solib_bfd_open): Likewise. + +2019-09-19 Christian Biesinger <cbiesinger@google.com> + + * eval.c: Move declaration of overload_resolution to... + * value.h: ...here. + +2019-09-19 Christian Biesinger <cbiesinger@google.com> + + * arm-linux-nat.c: Remove extern declaration for arm_apcs_32. + * arm-linux-tdep.c: Likewise. + * arm-nbsd-nat.c: Likewise. + * arm-tdep.h: Declare arm_apcs_32. + * arm-tdep.c: Move documentation for arm_apcs_32 to arm-tdep.h. + +2019-09-19 Christian Biesinger <cbiesinger@google.com> + + * dwarf2loc.c: Remove extern declaration of dwarf_always_disassemble. + * dwarf2read.h: Declare dwarf_always_disassemble. + +2019-09-19 Tom de Vries <tdevries@suse.de> + + PR gdb/25009 + * source-cache.c (source_cache::ensure): Catch exception thrown during + construction of the highlighter. + +2019-09-18 Alan Modra <amodra@gmail.com> + + * aarch64-linux-tdep.c, * arm-tdep.c, * auto-load.c, + * coff-pe-read.c, * coffread.c, * corelow.c, * dbxread.c, + * dicos-tdep.c, * dwarf2-frame.c, * dwarf2read.c, * elfread.c, + * exec.c, * fbsd-tdep.c, * gcore.c, * gdb_bfd.c, * gdb_bfd.h, + * hppa-tdep.c, * i386-cygwin-tdep.c, * i386-fbsd-tdep.c, + * i386-linux-tdep.c, * jit.c, * linux-tdep.c, * machoread.c, + * maint.c, * mdebugread.c, * minidebug.c, * mips-linux-tdep.c, + * mips-sde-tdep.c, * mips-tdep.c, * mipsread.c, * nto-tdep.c, + * objfiles.c, * objfiles.h, * osabi.c, * ppc-linux-tdep.c, + * ppc64-tdep.c, * record-btrace.c, * record-full.c, * remote.c, + * rs6000-aix-tdep.c, * rs6000-tdep.c, * s390-linux-tdep.c, + * s390-tdep.c, * solib-aix.c, * solib-dsbt.c, * solib-frv.c, + * solib-spu.c, * solib-svr4.c, * solib-target.c, + * spu-linux-nat.c, * spu-tdep.c, * symfile-mem.c, * symfile.c, + * symmisc.c, * symtab.c, * target.c, * windows-nat.c, + * xcoffread.c, * cli/cli-dump.c, * compile/compile-object-load.c, + * mi/mi-interp.c: Update throughout for bfd section macro and + function changes. + * gcore (gcore_create_callback): Use bfd_set_section_lma. + * spu-tdep.c (spu_overlay_new_objfile): Likewise. + +2019-09-18 Tom Tromey <tom@tromey.com> + + * NEWS: Add entry. + * tui/tui.c (tui_initialize_readline): Set name of keymap. Do not + call rl_initialize. + (tui_enable): Do not call rl_initialize. + +2019-09-18 Christian Groessler <chris@groessler.org> + + * alpha-linux-nat.c: Include gdbarch.h. + +2019-09-18 Simon Marchi <simon.marchi@polymtl.ca> + + * ui-file.c: Include cli/cli-style.h. + (term_cli_styling): Remove cli_styling declaration. + +2019-09-18 Alan Modra <amodra@gmail.com> + + * arm-tdep.c (arm_record_special_symbol): Update bfd_get_section + to bfd_asymbol_section. + +2019-09-18 Alan Modra <amodra@gmail.com> + + * amd64-dicos-tdep.c (amd64_dicos_osabi_sniffer): Constify target. + * i386-cygwin-tdep.c (i386_cygwin_init_abi): Likewise. + * i386-dicos-tdep.c (i386_dicos_osabi_sniffer): Likewise. + +2019-09-18 Alan Modra <amodra@gmail.com> + + * solib-spu.c (spu_bfd_open): Use bfd_set_filename. + * spu-linux-nat.c (spu_bfd_open): Likewise. + +2019-09-18 Christian Biesinger <cbiesinger@google.com> + + * dwarf2loc.c: Change extern declaration of dwarf_always_disassemble + to bool to match definition in dwarf2read.c. + +2019-09-17 Christian Biesinger <cbiesinger@google.com> + + * ada-lang.c (ada_ignore_descriptive_types_p): Change to bool. + (print_signatures): Likewise. + (trust_pad_over_xvs): Likewise. + * arch/aarch64-insn.c (aarch64_debug): Likewise. + * arch/aarch64-insn.h (aarch64_debug): Likewise. + * arm-linux-nat.c (arm_apcs_32): Likewise. + * arm-linux-tdep.c (arm_apcs_32): Likewise. + * arm-nbsd-nat.c (arm_apcs_32): Likewise. + * arm-tdep.c (arm_debug): Likewise. + (arm_apcs_32): Likewise. + * auto-load.c (debug_auto_load): Likewise. + (auto_load_gdb_scripts): Likewise. + (global_auto_load): Likewise. + (auto_load_local_gdbinit): Likewise. + (auto_load_local_gdbinit_loaded): Likewise. + * auto-load.h (global_auto_load): Likewise. + (auto_load_local_gdbinit): Likewise. + (auto_load_local_gdbinit_loaded): Likewise. + * breakpoint.c (disconnected_dprintf): Likewise. + (breakpoint_proceeded): Likewise. + (automatic_hardware_breakpoints): Likewise. + (always_inserted_mode): Likewise. + (target_exact_watchpoints): Likewise. + (_initialize_breakpoint): Update. + * breakpoint.h (target_exact_watchpoints): Change to bool. + * btrace.c (maint_btrace_pt_skip_pad): Likewise. + * cli/cli-cmds.c (trace_commands): Likewise. + * cli/cli-cmds.h (trace_commands): Likewise. + * cli/cli-decode.c (add_setshow_boolean_cmd): Change int* argument + to bool*. + * cli/cli-logging.c (logging_overwrite): Change to bool. + (logging_redirect): Likewise. + (debug_redirect): Likewise. + * cli/cli-option.h (option_def) <boolean>: Change return type to bool*. + (struct boolean_option_def) <get_var_address_cb_>: Change return type + to bool. + <boolean_option_def>: Update. + (struct flag_option_def): Change default type of Context to bool + from int. + <flag_option_def>: Change return type of var_address_cb_ to bool*. + * cli/cli-setshow.c (do_set_command): Cast to bool* instead of int*. + (get_setshow_command_value_string): Likewise. + * cli/cli-style.c (cli_styling): Change to bool. + (source_styling): Likewise. + * cli/cli-style.h (source_styling): Likewise. + (cli_styling): Likewise. + * cli/cli-utils.h (struct qcs_flags) <quiet, cont, silent>: Change + to bool. + * command.h (var_types): Update comment. + (add_setshow_boolean_cmd): Change int* var argument to bool*. + * compile/compile-cplus-types.c (debug_compile_cplus_types): Change to + bool. + (debug_compile_cplus_scopes): Likewise. + * compile/compile-internal.h (compile_debug): Likewise. + * compile/compile.c (compile_debug): Likewise. + (struct compile_options) <raw>: Likewise. + * cp-support.c (catch_demangler_crashes): Likewise. + * cris-tdep.c (usr_cmd_cris_version_valid): Likewise. + (usr_cmd_cris_dwarf2_cfi): Likewise. + * csky-tdep.c (csky_debug): Likewise. + * darwin-nat.c (enable_mach_exceptions): Likewise. + * dcache.c (dcache_enabled_p): Likewise. + * defs.h (info_verbose): Likewise. + * demangle.c (demangle): Likewise. + (asm_demangle): Likewise. + * dwarf-index-cache.c (debug_index_cache): Likewise. + * dwarf2-frame.c (dwarf2_frame_unwinders_enabled_p): Likewise. + * dwarf2-frame.h (dwarf2_frame_unwinders_enabled_p): Likewise. + * dwarf2read.c (check_physname): Likewise. + (use_deprecated_index_sections): Likewise. + (dwarf_always_disassemble): Likewise. + * eval.c (overload_resolution): Likewise. + * event-top.c (set_editing_cmd_var): Likewise. + (exec_done_display_p): Likewise. + * event-top.h (set_editing_cmd_var): Likewise. + (exec_done_display_p): Likewise. + * exec.c (write_files): Likewise. + * fbsd-nat.c (debug_fbsd_lwp): Likewise + (debug_fbsd_nat): Likewise. + * frame.h (struct frame_print_options) <print_raw_frame_arguments>: + Likewise. + (struct set_backtrace_options) <backtrace_past_main>: Likewise. + <backtrace_past_entry> Likewise. + * gdb-demangle.h (demangle): Likewise. + (asm_demangle): Likewise. + * gdb_bfd.c (bfd_sharing): Likewise. + * gdbcore.h (write_files): Likewise. + * gdbsupport/common-debug.c (show_debug_regs): Likewise. + * gdbsupport/common-debug.h (show_debug_regs): Likewise. + * gdbthread.h (print_thread_events): Likewise. + * gdbtypes.c (opaque_type_resolution): Likewise. + (strict_type_checking): Likewise. + * gnu-nat.c (gnu_debug_flag): Likewise. + * guile/scm-auto-load.c (auto_load_guile_scripts): Likewise. + * guile/scm-param.c (pascm_variable): Add boolval. + (add_setshow_generic): Update. + (pascm_param_value): Update. + (pascm_set_param_value_x): Update. + * hppa-tdep.c (hppa_debug): Change to bool.. + * infcall.c (may_call_functions_p): Likewise. + (coerce_float_to_double_p): Likewise. + (unwind_on_signal_p): Likewise. + (unwind_on_terminating_exception_p): Likewise. + * infcmd.c (startup_with_shell): Likewise. + * inferior.c (print_inferior_events): Likewise. + * inferior.h (startup_with_shell): Likewise. + (print_inferior_events): Likewise. + * infrun.c (step_stop_if_no_debug): Likewise. + (detach_fork): Likewise. + (debug_displaced): Likewise. + (disable_randomization): Likewise. + (non_stop): Likewise. + (non_stop_1): Likewise. + (observer_mode): Likewise. + (observer_mode_1): Likewise. + (set_observer_mode): Update. + (sched_multi): Change to bool. + * infrun.h (debug_displaced): Likewise. + (sched_multi): Likewise. + (step_stop_if_no_debug): Likewise. + (non_stop): Likewise. + (disable_randomization): Likewise. + * linux-tdep.c (use_coredump_filter): Likewise. + (dump_excluded_mappings): Likewise. + * linux-thread-db.c (auto_load_thread_db): Likewise. + (check_thread_db_on_load): Likewise. + * main.c (captured_main_1): Update. + * maint-test-options.c (struct test_options_opts) <flag_opt, xx1_opt, + xx2_opt, boolean_opt>: Change to bool. + * maint-test-settings.c (maintenance_test_settings_boolean): Likewise. + * maint.c (maintenance_profile_p): Likewise. + (per_command_time): Likewise. + (per_command_space): Likewise. + (per_command_symtab): Likewise. + * memattr.c (inaccessible_by_default): Likewise. + * mi/mi-main.c (mi_async): Likewise. + (mi_async_1): Likewise. + * mips-tdep.c (mips64_transfers_32bit_regs_p): Likewise. + * nat/fork-inferior.h (startup_with_shell): Likewise. + * nat/linux-namespaces.c (debug_linux_namespaces): Likewise. + * nat/linux-namespaces.h (debug_linux_namespaces): Likewise. + * nios2-tdep.c (nios2_debug): Likewise. + * or1k-tdep.c (or1k_debug): Likewise. + * parse.c (parser_debug): Likewise. + * parser-defs.h (parser_debug): Likewise. + * printcmd.c (print_symbol_filename): Likewise. + * proc-api.c (procfs_trace): Likewise. + * python/py-auto-load.c (auto_load_python_scripts): Likewise. + * python/py-param.c (union parmpy_variable): Add "bool boolval" field. + (set_parameter_value): Update. + (add_setshow_generic): Update. + * python/py-value.c (copy_py_bool_obj): Change argument from int* + to bool*. + * python/python.c (gdbpy_parameter_value): Cast to bool* instead of + int*. + * ravenscar-thread.c (ravenscar_task_support): Change to bool. + * record-btrace.c (record_btrace_target::store_registers): Update. + * record-full.c (record_full_memory_query): Change to bool. + (record_full_stop_at_limit): Likewise. + * record-full.h (record_full_memory_query): Likewise. + * remote-notif.c (notif_debug): Likewise. + * remote-notif.h (notif_debug): Likewise. + * remote.c (use_range_stepping): Likewise. + (interrupt_on_connect): Likewise. + (remote_break): Likewise. + * ser-tcp.c (tcp_auto_retry): Likewise. + * ser-unix.c (serial_hwflow): Likewise. + * skip.c (debug_skip): Likewise. + * solib-aix.c (solib_aix_debug): Likewise. + * spu-tdep.c (spu_stop_on_load_p): Likewise. + (spu_auto_flush_cache_p): Likewise. + * stack.c (struct backtrace_cmd_options) <full, no_filters, hide>: + Likewise. + (struct info_print_options) <quiet>: Likewise. + * symfile-debug.c (debug_symfile): Likewise. + * symfile.c (auto_solib_add): Likewise. + (separate_debug_file_debug): Likewise. + * symfile.h (auto_solib_add): Likewise. + (separate_debug_file_debug): Likewise. + * symtab.c (basenames_may_differ): Likewise. + (struct filename_partial_match_opts) <dirname, basename>: Likewise. + (struct info_print_options) <quiet, exclude_minsyms>: Likewise. + (struct info_types_options) <quiet>: Likewise. + * symtab.h (demangle): Likewise. + (basenames_may_differ): Likewise. + * target-dcache.c (stack_cache_enabled_1): Likewise. + (code_cache_enabled_1): Likewise. + * target.c (trust_readonly): Likewise. + (may_write_registers): Likewise. + (may_write_memory): Likewise. + (may_insert_breakpoints): Likewise. + (may_insert_tracepoints): Likewise. + (may_insert_fast_tracepoints): Likewise. + (may_stop): Likewise. + (auto_connect_native_target): Likewise. + (target_stop_and_wait): Update. + (target_async_permitted): Change to bool. + (target_async_permitted_1): Likewise. + (may_write_registers_1): Likewise. + (may_write_memory_1): Likewise. + (may_insert_breakpoints_1): Likewise. + (may_insert_tracepoints_1): Likewise. + (may_insert_fast_tracepoints_1): Likewise. + (may_stop_1): Likewise. + * target.h (target_async_permitted): Likewise. + (may_write_registers): Likewise. + (may_write_memory): Likewise. + (may_insert_breakpoints): Likewise. + (may_insert_tracepoints): Likewise. + (may_insert_fast_tracepoints): Likewise. + (may_stop): Likewise. + * thread.c (struct info_threads_opts) <show_global_ids>: Likewise. + (make_thread_apply_all_options_def_group): Change argument from int* + to bool*. + (thread_apply_all_command): Update. + (print_thread_events): Change to bool. + * top.c (confirm): Likewise. + (command_editing_p): Likewise. + (history_expansion_p): Likewise. + (write_history_p): Likewise. + (info_verbose): Likewise. + * top.h (confirm): Likewise. + (history_expansion_p): Likewise. + * tracepoint.c (disconnected_tracing): Likewise. + (circular_trace_buffer): Likewise. + * typeprint.c (print_methods): Likewise. + (print_typedefs): Likewise. + * utils.c (debug_timestamp): Likewise. + (sevenbit_strings): Likewise. + (pagination_enabled): Likewise. + * utils.h (sevenbit_strings): Likewise. + (pagination_enabled): Likewise. + * valops.c (overload_resolution): Likewise. + * valprint.h (struct value_print_options) <prettyformat_arrays, + prettyformat_structs, vtblprint, unionprint, addressprint, objectprint, + stop_print_at_null, print_array_indexes, deref_ref, static_field_print, + pascal_static_field_print, raw, summary, symbol_print, finish_print>: + Likewise. + * windows-nat.c (new_console): Likewise. + (cygwin_exceptions): Likewise. + (new_group): Likewise. + (debug_exec): Likewise. + (debug_events): Likewise. + (debug_memory): Likewise. + (debug_exceptions): Likewise. + (useshell): Likewise. + * windows-tdep.c (maint_display_all_tib): Likewise. + * xml-support.c (debug_xml): Likewise. + +2019-09-17 Mike Gulick <mgulick@mathworks.com> + + * source.c (prepare_path_for_appending): New function. + (openp): Make use of new function. + (find_and_open_source): Search for the compilation directory and + source file as a relative path beneath the directory search path. + +2019-09-17 Andrew Burgess <andrew.burgess@embecosm.com> + + * source-cache.c (source_cache::get_line_charpos): Catch + exceptions and return false, this matches the behaviour documented + in the header file. + +2019-09-17 Joel Brobecker <brobecker@adacore.com> + + * ada-tasks.c (info_task): Remove quoting of the task's name. + +2019-09-16 Christian Biesinger <cbiesinger@google.com> + + * symfile.c (auto_solib_add): Replace comment with a reference + to the header file. + +2019-09-14 Christian Biesinger <cbiesinger@google.com> + + * NEWS: Mention that gdb can now be compiled with Python 3 + on Windows. + +2019-09-12 Andrew Burgess <andrew.burgess@embecosm.com> + + * maint.c (maint_print_section_data::maint_print_section_data): + Force use of 'float log10 (float)' by casting the argument to + float. + +2019-09-12 Andrew Burgess <andrew.burgess@embecosm.com> + + * maint.c: Add 'cmath' include. + (struct maint_print_section_data): New structure. + (print_section_index): New function. + (print_bfd_section_info): Add header comment, small whitespace + cleanup, and update to call new print_section_index function. + (print_objfile_section_info): Likewise. + (maint_obj_section_from_bfd_section): New function. + (print_bfd_section_info_maybe_relocated): New function. + (maintenance_info_sections): Add header comment, always use + bfd_map_over_sections instead of ALL_OBJFILE_OSECTIONS. + +2019-09-12 Andrew Burgess <andrew.burgess@embecosm.com> + + * psymtab.c (find_pc_sect_psymtab): Move baseaddr local into more + inner scope, add check that the objfile has psymtabs before + checking psymtabs_addrmap. + * psymtab.h (psymtab_storage) <psymtabs_addrmap>: Extend comment. + +2019-09-12 Philippe Waroquiers <philippe.waroquiers@skynet.be> + + * NEWS: Announce that Ada task names are now shown at more places, + and between quotes (except in info task output). + * ada-tasks.c (task_to_str): New function. + (display_current_task_id): Call task_to_str. + (task_command_1): Likewise. + (print_ada_task_info): In non-mi mode, Properly align headers and data + when task-id length is > 9 (9 is the default for a 32 bits CORE_ADDR). + +2019-09-12 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + * procfs.c (procfs_target::wait) <PR_FAULTED>: Get signal from + prstatus.pr_lwp.pr_info instead of making it up. + +2019-09-11 Christian Biesinger <cbiesinger@google.com> + + * auto-load.c (auto_load_expand_dir_vars): Update. + * defs.h (gdb_datadir): Change to std::string. + (python_libdir): Likewise. + (relocate_gdb_directory): Change return type to std::string. + * guile/guile.c (gdbscm_data_directory): Update. + (initialize_scheme_side): Update. + * jit.c (jit_reader_dir): Change to std::string. + (jit_reader_load_command): Update. + * main.c (gdb_datadir): Change to std::string. + (python_libdir): Likewise. + (set_gdb_data_directory): Update. + (relocate_path): Change to return std::string. + (relocate_gdb_directory): Change to return std::string. + (relocate_gdbinit_path_maybe_in_datadir): Update. + (captured_main_1): Update. + * python/python.c (do_start_initialization): Update. + * top.c (show_gdb_datadir): Update. + * xml-syscall.c (xml_init_syscalls_info): Update. + (init_syscalls_info): Update. + +2019-09-11 Christian Biesinger <cbiesinger@google.com> + + * main.c (relocate_gdbinit_path_maybe_in_datadir): Factor this code + out of get_init_files. + (get_init_files): Update. + +2019-09-11 Christian Biesinger <cbiesinger@google.com> + + * main.c (get_init_files): Change to use std::string. + (captured_main_1): Update. + (print_gdb_help): Update. + +2019-09-11 Ali Tamur <tamur@google.com> + + * target-float.c (host_float_ops<T>::to_longest): Update + implementation. + +2019-09-11 Christian Biesinger <cbiesinger@google.com> + + * dbxread.c (read_dbx_symtab): Update. + * dwarf2read.c (load_partial_dies): Update. + * mdebugread.c (parse_partial_symbols): Update. + (handle_psymbol_enumerators): Update. + * psympriv.h (add_psymbol_to_list): Change type of copy_names to bool. + * psymtab.c (add_psymbol_to_bcache): Likewise. + (add_psymbol_to_list): Likewise. + * symtab.c (symbol_set_names): Likewise. + * symtab.h (symbol_set_names): Likewise. + * xcoffread.c (scan_xcoff_symtab): Update. + +2019-09-11 Tom Tromey <tom@tromey.com> + + * symfile-mem.c (symbol_file_add_from_memory): Use + bfd_set_filename. + * solib-darwin.c (darwin_bfd_open): Use bfd_set_filename. + * solib-aix.c (solib_aix_bfd_open): Use bfd_set_filename. + +2019-09-10 Tom Tromey <tromey@adacore.com> + + * dwarf-index-write.c (write_psymbols): Extend error message. + (debug_names::insert): Add Ada code. + (debug_names::write_psymbols): Remove Ada check. + (debug_names) <m_string_obstack>: New member. + * dwarf2read.c (gdb_index_symbol_name_matcher): Remove. + (gdb_index_symbol_name_matcher::matches): Remove. + (mapped_index_base::find_name_components_bounds): Add "lang" + parameter. + (mapped_index_base::build_name_components): Also split names + according to Ada syntax. + (dw2_expand_symtabs_matching_symbol): Loop over languages. Change + type of "match_callback". + (check_match, check_find_bounds_finds) + (dw2_expand_symtabs_matching): Update. + (dw2_debug_names_iterator): Add new constructor. + (dw2_debug_names_map_matching_symbols): New function. + (dw2_debug_names_expand_symtabs_matching): Update. + (dwarf2_debug_names_functions): Use + dw2_debug_names_map_matching_symbols. + +2019-09-10 Tom Tromey <tromey@adacore.com> + + * dwarf2read.c (dw2_get_file_names_reader): Add the + CU's file name to the results. + +2019-09-10 Tom Tromey <tromey@adacore.com> + + * ada-lang.c (add_nonlocal_symbols): Combine calls to + map_matching_symbols. Update. + * dwarf2read.c (dw2_map_matching_symbols): Update. + * psymtab.c (match_partial_symbol): Change type; update. + (psym_map_matching_symbols): Likewise. + * symfile-debug.c (debug_qf_map_matching_symbols): Change + type; update. + * symfile.h (struct quick_symbol_functions) + <map_matching_symbols>: Change "name" to be a lookup_name_info. + Remove "match". + +2019-09-10 Tom Tromey <tromey@adacore.com> + + * psymtab.c (map_block): Remove. + (psym_map_matching_symbols): Use iterate_over_symbols_terminated. + * symtab.c (iterate_over_symbols_terminated): New function. + * symtab.c (iterate_over_symbols_terminated): Declare. + +2019-09-10 Tom Tromey <tromey@adacore.com> + + * ada-lang.c (ada_iterate_over_symbols): Return bool. + * language.h (struct language_defn) <la_iterate_over_symbols>: + Return bool. + * symtab.c (iterate_over_symbols): Return bool. + * symtab.h (iterate_over_symbols): Return bool. + +2019-09-10 Tom Tromey <tromey@adacore.com> + + * ada-lang.c (aux_add_nonlocal_symbols): Change type. + (add_nonlocal_symbols): Update. + * dwarf2read.c (dw2_map_matching_symbols): Change type. + * psymtab.c (map_block, psym_map_matching_symbols): Change type. + * symfile-debug.c (debug_qf_map_matching_symbols): Change type. + * symfile.h (struct quick_symbol_functions) <map_matching_symbols>: + Change type of "callback". Remove "data". + + +2019-09-09 Ali Tamur <tamur@google.com> + + * dwarf2read.c (comp_unit_head): Update comment. + (dwarf2_dwo_name): New function declaration. + (dwarf_unit_type_name): New function declaration. + (read_comp_unit_head): Add support for new compilation units, + DW_UT_partial, DW_UT_skeleton, DW_UT_split_compile, DW_UT_split_type. + Particularly, DW_UT_skeleton and DW_UT_split_compile have dwo_id + (currently named as "signature") in their header. Also clarify error + messages. + (lookup_dwo_id): New function. Returns the dwo id of the given + compile unit. + (lookup_dwo_unit): Use the new lookup_dwo_id function. + (init_cutu_and_read_dies): Use the new dwarf2_dwo_name and lookup_dwo_id + functions. + (create_dwo_cu_reader): Use the added lookup_dwo_id function. + (dwarf2_dwo_name): Get the dwo name if present. + (dwarf_unit_type_name): Convert DW_UT_* types to string for diagnostic + purposes. + +2019-09-09 Tom Tromey <tom@tromey.com> + + * tui/tui-win.c (tui_all_windows_info): Use ui_out. + +2019-09-09 Philippe Waroquiers <philippe.waroquiers@skynet.be> + + * python/python.c (do_start_initialization): Make progname_copy static, + to avoid a leak report. + +2019-09-08 Tom Tromey <tom@tromey.com> + + * tui/tui-wingeneral.c (box_win): Truncate long window titles. + +2019-09-07 Simon Marchi <simon.marchi@efficios.com> + + * dwarf2read.c (struct dw2_symtab_iterator) <block_index>: + Change type to gdb::optional<block_enum>. + (dw2_symtab_iter_init): Change block_index parameter type + to gdb::optional<block_enum>. + (dw2_lookup_symbol): Change block_index parameter + type to block_enum.c + (dw2_debug_names_lookup_symbol): Likewise. + * psymtab.c (psym_lookup_symbol): Likewise. + * symfile-debug.c (debug_qf_lookup_symbol): Likewise. + * symfile.h (struct quick_symbol_functions) <lookup_symbol>: + Likewise. + +2019-09-06 Christian Biesinger <cbiesinger@google.com> + + * defs.h (relocate_gdb_directory): Change int to bool in + signature and rename flag to relocatable. + * main.c (relocate_path): Likewise. + (relocate_gdb_directory): Likewise. + +2019-09-06 Alan Modra <amodra@gmail.com> + + * coffread.c (coff_symfile_read): Constify filename variable. + * dbxread.c (dbx_symfile_init, coffstab_build_psymtabs), + (elfstab_build_psymtabs, stabsect_build_psymtabs): Likewise. + * gdb_bfd.c (gdb_bfd_close_or_warn): Likewise. + * solib.c (reload_shared_libraries_1): Likewise. + * symfile.c (reread_symbols): Likewise. + * solib-aix.c (solib_aix_bfd_open): Add cast for xfree of filename. + * solib-darwin.c (darwin_bfd_open): Likewise. + * symfile-mem.c (symbol_file_add_from_memory): Likewise. + +2019-09-03 Andrew Burgess <andrew.burgess@embecosm.com> + + * psymtab.c (print_partial_symbols): Handle missing domain_enum + values MODULE_DOMAIN and COMMON_BLOCK_DOMAIN. + +2019-09-03 Tom Tromey <tromey@adacore.com> + + * ada-valprint.c (ada_val_print_num): Don't recurse for range + types. + (has_negatives): Unbias a range type bound. + * dwarf2read.c (read_subrange_type): Handle DW_AT_GNU_bias. + * gdbtypes.c (operator==): Handle new field. + (create_range_type): Add "bias" parameter. + (create_static_range_type, resolve_dynamic_range): Update. + * gdbtypes.h (struct range_bounds) <bias>: New member. + (create_range_type): Add bias parameter. + * printcmd.c (print_scalar_formatted): Unbias range types. + * value.c (unpack_long): Unbias range types. + (pack_long): Bias range types. + +2019-09-02 Alan Hayward <alan.hayward@arm.com> + + * solib-svr4.c (svr4_find_and_create_probe_breakpoints): Check all + probe arguments. + +2019-09-02 Alan Hayward <alan.hayward@arm.com> + + * break-catch-throw.c (fetch_probe_arguments): Use gdbarch. + * dtrace-probe.c (dtrace_probe::get_argument_count): Likewise. + * probe.c (probe_safe_evaluate_at_pc) (compute_probe_arg) + (compile_probe_arg): Likewise. + * probe.h (get_argument_count): Likewise. + * solib-svr4.c (solib_event_probe_action): Likewise. + * stap-probe.c (stap_probe::get_argument_count): Likewise. + +2019-09-02 Alan Hayward <alan.hayward@arm.com> + + * solib-svr4.c (svr4_find_and_create_probe_breakpoints): Move + code to here... + (svr4_create_solib_event_breakpoints): ...from here. + +2019-08-30 Sergio Durigan Junior <sergiodj@redhat.com> + + * nat/fork-inferior.c (trace_start_error): Remove "\nError: " + suffix from warning message. + +2019-08-30 Tom Tromey <tom@tromey.com> + + * tui/tui-winsource.h (struct tui_source_window_base) + <refresh_all>: Don't declare. + * tui/tui-winsource.c (tui_source_window_base::refresh_all): + Remove. + * tui/tui-win.c (tui_refresh_all_win): Don't call refresh_all or + tui_show_locator_content. + * tui/tui-regs.h (struct tui_data_window) <refresh_all>: Don't + declare. + * tui/tui-regs.c (tui_data_window::refresh_all): Remove. + * tui/tui-data.h (struct tui_win_info) <refresh_all>: Don't + declare. + +2019-08-30 Tom Tromey <tom@tromey.com> + + * tui/tui-io.c (tui_cont_sig): Don't call wrefresh. + +2019-08-30 Tom Tromey <tom@tromey.com> + + * tui/tui-stack.c (_initialize_tui_stack): Move later. + Remove unnecessary forward declarations. + +2019-08-30 Tom Tromey <tom@tromey.com> + + * tui/tui-stack.c (tui_locator_window::set_locator_fullname): Call + rerender. + (tui_update_locator_fullname, tui_show_frame_info): Don't call + tui_show_locator_content. + +2019-08-30 Tom Tromey <tom@tromey.com> + + * tui/tui-stack.c (tui_show_locator_content): Move lower. Rewrite. + (tui_locator_window::rerender): Rewrite using body of previous + tui_show_locator_content. + +2019-08-30 Tom Tromey <tom@tromey.com> + + * tui/tui-stack.h (struct tui_locator_window) <set_locator_info, + set_locator_fullname>: New methods. + * tui/tui-stack.c (tui_locator_window::set_locator_fullname): + Rename from tui_set_locator_fullname. + (tui_locator_window::set_locator_info): Rename from + tui_set_locator_info. Return bool. + (tui_update_locator_fullname, tui_show_frame_info): Update. + +2019-08-30 Tom Tromey <tom@tromey.com> + + * tui/tui-layout.c (show_layout): Don't call tui_refresh_all. + +2019-08-30 Tom Tromey <tom@tromey.com> + + * tui/tui-wingeneral.c (tui_gen_win_info::refresh_window): Don't + call touchwin. + +2019-08-30 Tom Tromey <tom@tromey.com> + + * tui/tui-wingeneral.c (box_win): Assume win_info and + win_info->handle cannot be NULL. + +2019-08-30 Tom Tromey <tom@tromey.com> + + * tui/tui-regs.h (struct tui_data_item_window) <rerender, + refresh_window>: Declare. + * tui/tui-regs.c (tui_data_window::display_registers_from): Call + resize. + (tui_data_item_window::rerender): Rename from + tui_display_register. + (tui_data_item_window::refresh_window): New method. + * tui/tui-layout.c (tui_gen_win_info::resize): Do nothing on + no-op. + +2019-08-30 Tom Tromey <tom@tromey.com> + + * tui/tui-regs.h (struct tui_data_window) <regs_content, + regs_column_count, current_group>: Move later. Now private. + <get_current_group>: New method. + * tui/tui-regs.c (tui_reg_command): Update. + * tui/tui-layout.c (tui_set_layout): Update. + +2019-08-30 Tom Tromey <tom@tromey.com> + + * tui/tui-regs.c (tui_data_window::display_registers_from_line) + (tui_data_window::rerender): Don't call + check_and_display_highlight_if_needed. + (tui_data_window::refresh_all): Remove call to + erase_data_content. + +2019-08-30 Tom Tromey <tom@tromey.com> + + * tui/tui-regs.c (tui_data_window::last_regs_line_no) + (tui_data_window::display_registers_from) + (tui_data_window::display_reg_element_at_line) + (tui_data_window::display_registers_from_line): Remove checks of + "empty". + +2019-08-30 Tom Tromey <tom@tromey.com> + + * tui/tui-regs.h (struct tui_data_window) <display_all_data>: + Don't declare. + * tui/tui-regs.c (tui_data_window::show_registers): Call + rerender. + (tui_data_window::rerender): Rename from display_all_data. + (tui_data_window::rerender): Remove old implementation. + +2019-08-30 Tom Tromey <tom@tromey.com> + + * tui/tui-regs.c (tui_data_window::display_all_data): Change + text. + * tui/tui-data.h (NO_DATA_STRING): Remove define. + +2019-08-29 Bernhard Wodok <barto@gmx.net> + Sergio Durigan Junior <sergiodj@redhat.com> + + PR win32/24284 + * mingw-hdep.c (gdb_select): Handle case when 'n' is zero. + +2019-08-28 Andrew Burgess <andrew.burgess@embecosm.com> + + * symtab.c (search_symbols): Don't include MODULE_DOMAIN symbols + when searching for types. + +2019-08-28 Andrew Burgess <andrew.burgess@embecosm.com> + + * f-lang.c (f_language_defn): Use f_print_typedef. + * f-lang.h (f_print_typedef): Declare. + * f-typeprint.c (f_print_typedef): Define. + +2019-08-27 Christian Biesinger <cbiesinger@google.com> + + * nat/linux-namespaces.c (mnsh_main): Initialize fd (to -1). + +2019-08-27 Andrew Burgess <andrew.burgess@embecosm.com> + + * cli/cli-utils.c (info_print_options_defs): Delete. + (make_info_print_options_def_group): Delete. + (extract_info_print_options): Delete. + (info_print_command_completer): Delete. + (info_print_args_help): Add extra parameter, and optionally + include text about -n flag. + * cli/cli-utils.h (struct info_print_options): Delete. + (extract_info_print_options): Delete declaration. + (info_print_command_completer): Delete declaration. + (info_print_args_help): Add extra parameter, extend header + comment. + * python/python.c (gdbpy_rbreak): Pass additional parameter to + search_symbols. + * stack.c (struct info_print_options): New type. + (info_print_options_defs): New file scoped variable. + (make_info_print_options_def_group): New static function. + (info_print_command_completer): New static function. + (info_locals_command): Update to use new local functions. + (info_args_command): Likewise. + (_initialize_stack): Add extra parameter to calls to + info_print_args_help. + * symtab.c (search_symbols): Add extra parameter, use this to + possibly excluse non-debug symbols. + (symtab_symbol_info): Add extra parameter, which is passed on to + search_symbols. + (struct info_print_options): New type. + (info_print_options_defs): New file scoped variable. + (make_info_print_options_def_group): New static function. + (info_print_command_completer): New static function. + (info_variables_command): Update to use local functions, and pass + extra parameter through to symtab_symbol_info. + (info_functions_command): Likewise. + (info_types_command): Pass additional argument through to + symtab_symbol_info. + (rbreak_command): Pass extra argument to search_symbols. + (_initialize_symtab): Add extra arguments for calls to + info_print_args_help, and update help text for 'info variables', + 'whereis', and 'info functions' commands. + * symtab.h (search_symbols): Add extra argument to declaration. + * NEWS: Mention new flags. + +2019-08-26 Christian Biesinger <cbiesinger@google.com> + + * symtab.c (lookup_static_symbol): Call the new function (and move + it down to be next to lookup_global_symbol). + (struct global_sym_lookup_data): Add block_enum member and rename to... + (struct global_or_static_sym_lookup_data): ...this. + (lookup_symbol_global_iterator_cb): Pass block_index instead of + GLOBAL_BLOCK to lookup_symbol_in_objfile and rename to... + (lookup_symbol_global_or_static_iterator_cb): ...this. + (lookup_global_or_static_symbol): New function. + (lookup_global_symbol): Call new function. + +2019-08-26 Tom de Vries <tdevries@suse.de> + + PR c++/24852 + * break-catch-throw.c (fetch_probe_arguments): Improve error mesage + when pc_probe.prob == NULL. + +2019-08-25 Simon Marchi <simon.marchi@efficios.com> + + * dwarf2read.c (dw2_debug_names_iterator::next): Rename local + variable symbol_linkage to symbol_linkage_. + +2019-08-25 Simon Marchi <simon.marchi@efficios.com> + + * dwarf2read.c (dw2_debug_names_iterator::next): Use enum to + represent whether the symbol is static, dynamic, or we don't + know. + +2019-08-25 Yoshinori Sato <ysato@users.sourceforge.jp> + + * rx-tdep.c (rx_register_names): New. + (rx_register_name): Delete. + (rx_psw_type): Delete. + (rx_fpsw_type): Delete. + (rx_register_type): Delete. + (rx_gdbarch_init): Convert target-descriptions. + (_initialize_rx_tdep): Add initialize_tdesc_rx. + * features/Makefile: Add rx.xml. + * features/rx.xml: New. + * features/rx.c: Generated. + * NEWS: Mention target description support. + +2019-08-22 Christian Biesinger <cbiesinger@google.com> + + * symtab.c (symbol_cache_lookup): Always initialize *bsc_ptr and + *slot_ptr. + +2019-08-23 Sergio Durigan Junior <sergiodj@redhat.com> + + * configure.ac: Don't check for 'dlfcn.h' (moved to + gdbsupport/common.m4). + * Makefile.in (COMMON_SFILES): Move 'gdb-dlfcn.c' to + 'gdbsupport/'. + (HFILES_NO_SRCDIR): Likewise, for 'gdb-dlfcn.h'. + * compile/compile-c-support.c: Include + 'gdbsupport/gdb-dlfcn.h'. + * gdbsupport/common.m4: Check for 'dlfcn.h'. + * gdb-dlfcn.c: Move to... + * gdbsupport/gdb-dlfcn.c: ... here. + * gdb-dlfcn.h: Move to... + * gdbsupport/gdb-dlfcn.h: ... here. + +2019-08-23 Sandra Loosemore <sandra@codesourcery.com> + + * nios2-tdep.c (struct reg_value): Improve comments. Make + the offset field signed. + +2019-08-22 Christian Biesinger <cbiesinger@google.com> + + * python/lib/gdb/__init__.py (_execute_file): New function. + * python/python.c (python_run_simple_file): Call gdb._execute_file + on Windows. + +2019-08-22 Andrew Burgess <andrew.burgess@embecosm.com> + + * f-exp.y (yylex): Remove is_a_field_of_this local variable, and + all uses as this was never set to anything but a zero value. + +2019-08-21 Bogdan Harjoc <harjoc@gmail.com> + + * cli/cli-cmds.c (with_command_1): Error out if no arguments. + +2019-08-21 Christian Biesinger <cbiesinger@google.com> + + * tui/tui-data.h (tui_gen_win_info): Add an =default + move constructor, required by some GCC versions. + +2019-08-21 Jinke Fan <fanjinke51@yeah.net> + + * go32-nat.c (go32_sysinfo): Add hygon_p. + +2019-08-20 Tom Tromey <tom@tromey.com> + + * tui/tui-regs.h (struct tui_data_window) <last_regs_line_no, + line_from_reg_element_no, first_reg_element_no_inline, + display_all_data, delete_data_content_windows, + erase_data_content>: Now private. + +2019-08-20 Tom Tromey <tom@tromey.com> + + * tui/tui-wingeneral.c (box_win): Change type of highlight_flag. + (tui_unhighlight_win, tui_highlight_win) + (tui_win_info::make_window): Update. + * tui/tui-data.h (HILITE, NO_HILITE): Remove. + +2019-08-20 Tom Tromey <tom@tromey.com> + + * tui/tui-data.h (PROC_PREFIX, LINE_PREFIX, PC_PREFIX) + (MIN_LINE_WIDTH, MIN_PROC_WIDTH, MAX_TARGET_WIDTH) + (MAX_PID_WIDTH): Move to tui-stack.c. + * tui/tui-stack.c (PROC_PREFIX, LINE_PREFIX, PC_PREFIX) + (MIN_LINE_WIDTH, MIN_PROC_WIDTH, MAX_TARGET_WIDTH) + (MAX_PID_WIDTH): Move from tui-data.h. + +2019-08-20 Tom Tromey <tom@tromey.com> + + * tui/tui-wingeneral.h (tui_make_window): Don't declare. + * tui/tui-wingeneral.c (box_win): Change type of win_info. + (box_win): Update. + (tui_gen_win_info::make_window): Rename from tui_make_window. + (tui_win_info::make_window): New method. + (tui_gen_win_info::make_visible): Update. + * tui/tui-source.c (tui_source_window::set_contents): Update. + * tui/tui-regs.c (tui_data_window::show_register_group): Update. + (tui_data_window::display_registers_from): Update. + * tui/tui-layout.c (tui_gen_win_info::resize): Update. + * tui/tui-data.h (struct tui_gen_win_info) <make_window>: + Declare. + <can_box>: Remove. + <title>: Remove. + (struct tui_win_info) <make_window>: Declare. + <can_box>: Now virtual. + <title>: New member. + * tui/tui-data.c (~tui_gen_win_info): Don't free title. + * tui/tui-command.c (tui_cmd_window::resize): Update. + +2019-08-20 Tom Tromey <tom@tromey.com> + + * tui/tui-regs.h (struct tui_data_window) <display_regs>: Remove. + * tui/tui-regs.c (tui_data_window::show_registers): Update. + (tui_data_window::check_register_values): Update. + +2019-08-20 Tom Tromey <tom@tromey.com> + + * tui/tui-regs.h (struct tui_data_window): Use + DISABLE_COPY_AND_ASSIGN. + <regs_content>: Change type, removing unique_ptr. + <tui_data_window>: Add move constructor. + * tui/tui-regs.c (tui_data_window::show_registers) + (tui_data_window::show_register_group) + (tui_data_window::display_registers_from) + (tui_data_window::display_registers_from) + (tui_data_window::first_data_item_displayed) + (tui_data_window::delete_data_content_windows) + (tui_data_window::rerender, tui_data_window::refresh_window) + (tui_data_window::check_register_values): Update. + +2019-08-20 Tom Tromey <tom@tromey.com> + + * tui/tui-regs.h (struct tui_data_window) <show_registers, + show_register_group>: Declare. + (tui_show_register_group): Don't declare. + * tui/tui-regs.c (tui_data_window::show_registers): Rename from + tui_show_registers. + (tui_data_window::show_register_group): Rename from + tui_show_register_group. + (tui_data_window::check_register_values, tui_reg_command): + Update. + * tui/tui-layout.c (tui_set_layout): Update. + +2019-08-20 Tom Tromey <tom@tromey.com> + + * tui/tui-regs.h (struct tui_data_window) <check_register_values>: + Declare. + (tui_check_register_values): Don't declare. + * tui/tui-regs.c (tui_data_window::check_register_values): Rename + from tui_check_register_values. + * tui/tui-hooks.c (tui_register_changed): Update. + +2019-08-20 Tom Tromey <tom@tromey.com> + + * tui/tui-regs.c (tui_reg_layout): Move later. + (tui_show_registers): Don't enable TUI mode or change layout. + +2019-08-20 Tom Tromey <tom@tromey.com> + + * tui/tui-regs.h (struct tui_data_item_window) + <~tui_data_item_window>: Remove. + <content>: Now a unique_xmalloc_ptr. + * tui/tui-regs.c (tui_register_format): Return a + unique_xmalloc_ptr. + (tui_get_register): Update. + (~tui_data_item_window): Remove. + (tui_data_window::display_registers_from, tui_display_register): + Update. + * tui/tui-io.h (tui_expand_tabs): Update. + * tui/tui-io.c (tui_expand_tabs): Return a unique_xmalloc_ptr. + Remove "col" parameter. + +2019-08-20 Tom Tromey <tom@tromey.com> + + * tui/tui-regs.h (struct tui_data_item_window) <value>: Remove + field. + * tui/tui-regs.c (~tui_data_item_window): Update. + +2019-08-20 Tom Tromey <tom@tromey.com> + + * tui/tui-regs.c (tui_register_format, tui_get_register): Move + earlier. + +2019-08-20 Tom Tromey <tom@tromey.com> + + * tui/tui-regs.c (tui_reg_command): Remove NULL check. + +2019-08-20 Tom Tromey <tom@tromey.com> + + * tui/tui-source.h (struct tui_source_window): Update. + * tui/tui-regs.c (tui_show_registers): Update. + * tui/tui-disasm.h (struct tui_disasm_window): Update. + * tui/tui-data.h (NO_SRC_STRING, NO_DISASSEM_STRING) + (NO_REGS_STRING): Remove defines. + +2019-08-20 Conrad Meyer <cem@FreeBSD.org> + + * remote.c (remote_target::remote_btrace_maybe_reopen): Avoid + unnecessary thread walk if remote doesn't support the packet. + +2019-08-19 Tom Tromey <tromey@adacore.com> + + * python/py-value.c (value_has_field): Fix indentation. + +2019-08-19 Tom Tromey <tromey@adacore.com> + + * printcmd.c (do_one_display, info_display_command): Update. + * block.h (contained_in): Return bool. Add allow_nested + parameter. + * block.c (contained_in): Return bool. Add allow_nested + parameter. + +2019-08-19 Tom Tromey <tom@tromey.com> + + * configure: Rebuild. + * configure.ac: Disallow the combination of -static-libstdc++ and + source highlight. + * source-cache.c (get_language_name): Handle rust. + (source_cache::get_source_lines): Ignore highlighting exceptions. + +2019-08-16 Tom Tromey <tom@tromey.com> + + * tui/tui.h (enum tui_win_type) <EXEC_INFO_WIN>: Remove. + * tui/tui-winsource.h (struct tui_exec_info_window): Remove. + (struct tui_source_window_base) <make_visible, refresh_window, + resize>: Remove methods. + <execution_info>: Remove field. + * tui/tui-winsource.c (tui_source_window_base::do_erase_source_content) + (tui_show_source_line, tui_source_window_base) + (~tui_source_window_base): Update. + (tui_source_window_base::resize) + (tui_source_window_base::make_visible) + (tui_source_window_base::refresh_window): Remove. + (tui_source_window_base::update_exec_info): Update. + * tui/tui-source.c (tui_source_window::set_contents): Update. + * tui/tui-disasm.c (tui_disasm_window::set_contents): Update. + +2019-08-16 Tom Tromey <tom@tromey.com> + + * tui/tui-hooks.c (tui_remove_hooks): Don't set + deprecated_query_hook. + +2019-08-16 Tom Tromey <tom@tromey.com> + + * tui/tui-winsource.c (tui_update_source_windows_with_addr) + (tui_update_source_windows_with_line): Update. + * tui/tui-source.h (struct tui_source_window) + <show_symtab_source>: Declare. + (tui_show_symtab_source): Don't declare. + * tui/tui-source.c (tui_show_symtab_source): Rename from + tui_show_symtab_source. + +2019-08-16 Tom Tromey <tom@tromey.com> + + * tui/tui-winsource.h (struct tui_source_window_base) + <set_contents>: Declare. + * tui/tui-winsource.c + (tui_source_window_base::update_source_window_as_is): Update. + * tui/tui-source.h (struct tui_source_window) <set_contents>: + Declare. + (tui_set_source_content): Don't declare. + * tui/tui-source.c (tui_source_window::set_contents): Rename from + tui_set_source_content. + * tui/tui-disasm.h (struct tui_disasm_window) <set_contents>: + Declare. + (tui_set_disassem_content): Don't declare. + * tui/tui-disasm.c (tui_disasm_window::set_contents): Rename from + tui_set_disassem_content. + +2019-08-16 Tom Tromey <tom@tromey.com> + + * tui/tui-winsource.h (struct tui_source_window_base) + <update_breakpoint_info>: Declare. + (tui_update_breakpoint_info): Don't declare. + * tui/tui-winsource.c (tui_source_window_base::update_source_window_as_is) + (tui_update_all_breakpoint_info): Update. + (tui_source_window_base::update_breakpoint_info): Rename from + tui_update_breakpoint_info. + (tui_source_window_base::update_exec_info): Update. + +2019-08-16 Tom Tromey <tom@tromey.com> + + * tui/tui-winsource.h (struct tui_source_window_base) + <update_source_window>: Declare. + (tui_update_source_window): Don't declare. + * tui/tui-winsource.c + (tui_source_window_base::update_source_window): Rename from + tui_update_source_window. + (tui_source_window_base::rerender): Update. + * tui/tui-source.c (tui_source_window::maybe_update): Update. + * tui/tui-disasm.c (tui_show_disassem) + (tui_show_disassem_and_update_source) + (tui_disasm_window::maybe_update): Update. + +2019-08-16 Tom Tromey <tom@tromey.com> + + * tui/tui-winsource.h (struct tui_source_window_base) + <update_source_window_as_is>: Declare. + (tui_update_source_window_as_is): Don't declare. + * tui/tui-winsource.c (tui_update_source_window): Update + (tui_source_window_base::update_source_window_as_is): Rename from + tui_update_source_window_as_is. + (tui_source_window_base::refill): Update. + * tui/tui-source.c (tui_show_symtab_source): Update. + * tui/tui-disasm.c (tui_disasm_window::do_scroll_vertical): + Update. + +2019-08-16 Tom Tromey <tom@tromey.com> + + * tui/tui-winsource.h (tui_update_source_window) + (tui_update_source_window_as_is): Remove "noerror" parameter. + * tui/tui-winsource.c (tui_update_source_window) + (tui_update_source_window_as_is): Remove "noerror" parameter. + (tui_update_source_windows_with_addr) + (tui_update_source_windows_with_line) + (tui_source_window_base::rerender) + (tui_source_window_base::refill): Update. + * tui/tui-source.h (tui_set_source_content) + (tui_show_symtab_source): Remove "noerror" parameter. + * tui/tui-source.c (tui_set_source_content): Remove "noerror" + parameter. + (tui_show_symtab_source): Likewise. + (tui_source_window::maybe_update): Update. + * tui/tui-disasm.c (tui_show_disassem) + (tui_show_disassem_and_update_source) + (tui_disasm_window::do_scroll_vertical) + (tui_disasm_window::maybe_update): Update. + +2019-08-16 Tom Tromey <tom@tromey.com> + + * tui/tui.c (tui_is_window_visible): Update. + * tui/tui-wingeneral.c (tui_make_window) + (tui_gen_win_info::make_visible, tui_refresh_all): Update. + * tui/tui-win.c (window_name_completer, tui_refresh_all_win) + (tui_set_focus_command, tui_all_windows_info, update_tab_width) + (tui_set_win_height_command, parse_scrolling_args): Update. + * tui/tui-source.c (tui_source_window::style_changed): Update. + * tui/tui-regs.c (tui_show_registers) + (tui_data_window::first_data_item_displayed) + (tui_data_window::delete_data_content_windows) + (tui_check_register_values, tui_reg_command): Update. + * tui/tui-disasm.c (tui_show_disassem): Update. + * tui/tui-data.h (struct tui_gen_win_info) <is_visible>: New + method. + <is_visible>: Remove field. + * tui/tui-data.c (tui_next_win, tui_prev_win) + (tui_delete_invisible_windows): Update. + +2019-08-16 Tom Tromey <tom@tromey.com> + + * tui/tui-winsource.h (struct tui_source_window_base) + <m_has_locator>: Remove. + * tui/tui-layout.c (show_source_disasm_command, show_data) + (show_source_or_disasm_and_command): Update. + +2019-08-16 Alan Hayward <alan.hayward@arm.com> + + * NEWS (Other MI changes): New subsection. + * aarch64-tdep.c (aarch64_get_pc_address_flags): New function. + (aarch64_gdbarch_init): Add aarch64_get_pc_address_flags. + * arch-utils.c (default_get_pc_address_flags): New function. + * arch-utils.h (default_get_pc_address_flags): New declaration. + * gdbarch.sh: Add get_pc_address_flags. + * gdbarch.c: Regenerate. + * gdbarch.h: Likewise. + * stack.c (print_pc): New function. + (print_frame_info) (print_frame): Call print_pc. + +2019-08-16 Tom de Vries <tdevries@suse.de> + + * maint.c (maintenance_info_sections): Also handle !ALLOBJ case using + print_objfile_section_info. + +2019-08-15 Tom Tromey <tom@tromey.com> + + * tui/tui-io.c (tui_puts_internal): Check TUI_CMD_WIN before + calling update_cmdwin_start_line. + * tui/tui-winsource.h (struct tui_source_window_base) + <do_make_visible_with_new_height, set_new_height>: Don't declare. + <rerender>: Declare. + * tui/tui-winsource.c (tui_source_window_base::update_tab_width): + Call rerender. + (tui_source_window_base::set_new_height): Remove. + (tui_source_window_base::rerender): Rename from + do_make_visible_with_new_height. + * tui/tui-win.c (tui_resize_all, tui_adjust_win_heights): Use + resize method. + (tui_win_info::make_invisible_and_set_new_height) + (tui_win_info::make_visible_with_new_height): Remove. + * tui/tui-stack.h (struct tui_locator_window) <rerender>: + Declare. + * tui/tui-stack.c (tui_locator_window::rerender): New method. + * tui/tui-regs.h (struct tui_data_window) <set_new_height, + do_make_visible_with_new_height>: Don't declare. + <rerender>: Declare. + * tui/tui-regs.c (tui_data_window::rerender): Rename from + set_new_height. + (tui_data_window::do_make_visible_with_new_height): Remove. + * tui/tui-layout.c (show_source_disasm_command, show_data): Don't + call tui_show_locator_content. + (tui_gen_win_info::resize): Call rerender. + (show_source_or_disasm_and_command): Don't call + tui_show_locator_content. + * tui/tui-data.h (struct tui_gen_win_info) <rerender>: New + method. + (struct tui_win_info) <rerender>: Declare. + <set_new_height, make_invisible_and_set_new_height, + make_visible_with_new_height>: Don't declare. + * tui/tui-data.c (tui_win_list::rerender): New method. + * tui/tui-command.h (struct tui_cmd_window) + <do_make_visible_with_new_height>: Don't declare. + * tui/tui-command.c + (tui_cmd_window::do_make_visible_with_new_height): Remove. + +2019-08-15 Tom Tromey <tromey@adacore.com> + + * ada-exp.y (convert_char_literal): Handle "Q%c" encoding. + * ada-lang.c (ada_enum_name): Likewise. + +2019-08-15 Christian Biesinger <cbiesinger@google.com> + + * python/lib/gdb/__init__.py (GdbOutputFile): Rename to have a + leading underscore. + (GdbOutputErrorFile): Likewise. + (global scope): Adjust constructor calls to GdbOutput{,Error}File + accordingly. + (execute_unwinders): Rename to have a leading underscore. + (auto_load_packages): Likewise. + (global scope): Adjust call to auto_load_packages accordingly. + (GdbSetPythonDirectory): Likewise. + * python/py-unwind.c (pyuw_sniffer): Call _execute_unwinders + instead of execute_unwinders. + +2019-08-15 Tom Tromey <tom@tromey.com> + + * tui/tui-layout.c (show_layout, show_source_disasm_command) + (show_data): Don't change window visibility. + (tui_gen_win_info::resize): Remove special case for command + window. Use wresize, when available. + (show_source_or_disasm_and_command): Don't change window + visibility. + * tui/tui-command.h (struct tui_cmd_window) <resize>: Declare. + <make_visible>: New method. + * tui/tui-command.c (tui_cmd_window::resize): New method. + +2019-08-15 Tom Tromey <tom@tromey.com> + + * tui/tui-winsource.h (struct tui_source_window_iterator): New. + (struct tui_source_windows): New. + * tui/tui-winsource.c (tui_display_main): Update. + * tui/tui-win.c (tui_resize_all, tui_adjust_win_heights) + (new_height_ok, parse_scrolling_args): Update. + * tui/tui-layout.c (show_layout, show_data): Update. + * tui/tui-data.h (tui_source_windows, tui_clear_source_windows) + (tui_add_to_source_windows): Don't declare. + * tui/tui-data.c (source_windows, tui_source_windows) + (tui_clear_source_windows, tui_add_to_source_windows): Remove. + +2019-08-15 Tom Tromey <tom@tromey.com> + + * tui/tui-winsource.h (struct tui_source_window_base) <resize>: + Rename from reset. + * tui/tui-winsource.c (tui_source_window_base::resize): Rename. + * tui/tui-layout.c (show_source_disasm_command, show_data): + Update. + (tui_gen_win_info::resize): Rename. + (show_source_or_disasm_and_command): Update. + * tui/tui-data.h (struct tui_gen_win_info) <resize>: Rename from + reset. + +2019-08-15 Tom Tromey <tom@tromey.com> + + * tui/tui-stack.c (tui_initialize_static_data): Remove. + * tui/tui-interp.c (tui_interp::init): Don't call + tui_initialize_static_data. + * tui/tui-data.h (tui_initialize_static_data): Don't declare. + +2019-08-15 Tom Tromey <tom@tromey.com> + + * tui/tui-layout.c (tui_default_win_viewport_height): Don't + examine tui_win_list. + +2019-08-15 Tom Tromey <tom@tromey.com> + + * tui/tui-winsource.h (tui_clear_source_content): Don't declare. + * tui/tui-winsource.c (tui_update_source_window_as_is): Don't call + tui_clear_source_content. + (tui_clear_source_content): Remove. + (tui_source_window_base::do_erase_source_content): Hoist call to + content.clear(). + * tui/tui-stack.c (tui_show_frame_info): Don't call + tui_clear_source_content. + +2019-08-15 Tom Tromey <tom@tromey.com> + + * tui/tui-winsource.h (struct tui_source_window_base) + <do_erase_source_content>: New method. + <erase_source_content>: New method. + (tui_erase_source_content): Don't declare. + * tui/tui-winsource.c (tui_clear_source_content): Update. + (tui_source_window_base::do_erase_source_content): Rename from + tui_erase_source_content. + (tui_source_window_base::show_source_content): Update. + * tui/tui-win.c (tui_resize_all, tui_adjust_win_heights): Update. + * tui/tui-source.h (struct tui_source_window) + <erase_source_content>: New method. + * tui/tui-disasm.h (struct tui_disasm_window) + <erase_source_content>: New method. + +2019-08-15 Tom Tromey <tom@tromey.com> + + * tui/tui-winsource.h (tui_alloc_source_buffer): Don't declare. + (struct tui_source_element): Add DISABLE_COPY_AND_ASSIGN, and move + constructor. + * tui/tui-winsource.c (tui_alloc_source_buffer): Remove. + * tui/tui-source.c (tui_set_source_content): Update. + * tui/tui-disasm.c (tui_set_disassem_content): Update. + +2019-08-15 Tom Tromey <tom@tromey.com> + + * tui/tui-winsource.h (tui_line_is_displayed): Don't declare. + * tui/tui-winsource.c (tui_line_is_displayed): Move to + tui-source.c. + * tui/tui-source.h (struct tui_source_window) <line_is_displayed>: + Declare. + * tui/tui-source.c (tui_source_window::line_is_displayed): New + method. + (tui_source_window::maybe_update): Update. + +2019-08-15 Tom Tromey <tom@tromey.com> + + * tui/tui-winsource.h (tui_addr_is_displayed): Don't declare. + * tui/tui-winsource.c (tui_addr_is_displayed): Move to + tui-disasm.c. + * tui/tui-disasm.h (struct tui_disasm_window) <addr_is_displayed>: + Declare. + * tui/tui-disasm.c (tui_disasm_window::addr_is_displayed): New + method. + (tui_disasm_window::maybe_update): Update. + +2019-08-15 Tom Tromey <tom@tromey.com> + + * tui/tui-winsource.h (struct tui_source_window_base) + <maybe_update>: Declare. + * tui/tui-stack.c (tui_show_frame_info): Call maybe_update + method. + * tui/tui-source.h (struct tui_source_window) <maybe_update>: + Declare. + * tui/tui-source.c (tui_source_window::maybe_update): New method. + * tui/tui-disasm.h (struct tui_disasm_window) <maybe_update>: + Declare. + * tui/tui-disasm.c (tui_disasm_window::maybe_update): New method. + +2019-08-15 Tom Tromey <tom@tromey.com> + + * tui/tui-stack.c (tui_make_status_line): Use string constructor. + +2019-08-15 Tom Tromey <tom@tromey.com> + + * tui/tui-wingeneral.c: Include tui-stack.h. + * tui/tui-stack.h (MAX_LOCATOR_ELEMENT_LEN) + (struct tui_locator_window): Move from tui-data.h. + * tui/tui-stack.c (_locator, tui_locator_win_info_ptr) + (tui_initialize_static_data): Move from tui-data.c. + * tui/tui-data.h (MAX_LOCATOR_ELEMENT_LEN) + (struct tui_locator_window): Move to tui-stack.c. + * tui/tui-data.c (_locator, tui_locator_win_info_ptr) + (tui_initialize_static_data): Move to tui-stack.c. + +2019-08-15 Tom Tromey <tom@tromey.com> + + * tui/tui-layout.c (show_source_disasm_command) + (show_source_or_disasm_and_command): Use make_visible method, not + tui_make_window. + * tui/tui-command.h (struct tui_cmd_window) <make_visible>: + Remove. + +2019-08-15 Tom Tromey <tom@tromey.com> + + * tui/tui-wingeneral.h (tui_make_window): Update. + * tui/tui-wingeneral.c (tui_make_window): Remove "box_it" + parameter. + (tui_gen_win_info::make_visible): Update. + * tui/tui-regs.c (tui_data_window::display_registers_from): + Update. + * tui/tui-layout.c (show_source_disasm_command) + (show_source_or_disasm_and_command): Update. + * tui/tui-data.h (struct tui_gen_win_info) <can_box>: New method. + (enum tui_box): Remove. + (struct tui_win_info) <can_box>: New method. + * tui/tui-command.h (struct tui_cmd_window) <can_box>: New + method. + +2019-08-15 Tom de Vries <tdevries@suse.de> + + * linux-nat-trad.c: Include gdbarch.h. + +2019-08-14 Alan Hayward <alan.hayward@arm.com> + + * aarch64-tdep.c (aarch64_analyze_prologue): Allow any valid + register sizes. + +2019-08-14 Tom Tromey <tromey@adacore.com> + + * darwin-nat.c: Include gdbarch.h. + * darwin-nat-info.c: Include gdbarch.h. + +2019-08-13 Tom Tromey <tom@tromey.com> + + * tui/tui-data.h (struct tui_gen_win_info) <last_visible_line>: + Remove. + * tui/tui-data.c (tui_initialize_static_data): Update. + +2019-08-13 Tom Tromey <tom@tromey.com> + + * tui/tui-winsource.h (struct tui_exec_info_window) + <~tui_exec_info_window, maybe_allocate_content, get_content, + m_content>: Remove. + (struct tui_source_window_base) <set_exec_info_content, + show_exec_info_content>: Don't declare. + * tui/tui-winsource.c + (tui_exec_info_window::maybe_allocate_content): Remove. + (tui_source_window_base::update_exec_info): Rename from + set_exec_info_content. + (tui_source_window_base::show_exec_info_content) + (tui_source_window_base::update_exec_info): Remove. + +2019-08-13 Tom Tromey <tom@tromey.com> + + * tui/tui-winsource.h (tui_clear_exec_info_content): Don't + declare. + * tui/tui-winsource.c (tui_update_source_window_as_is) + (tui_update_source_windows_with_addr, tui_erase_source_content): + Update. + (tui_clear_exec_info_content): Remove. + +2019-08-13 Tom Tromey <tom@tromey.com> + + * tui/tui-winsource.h (tui_erase_exec_info_content): Don't + declare. + * tui/tui-winsource.c (tui_source_window_base::refresh_all): Don't + call tui_erase_exec_info_content. + (tui_clear_exec_info_content): Rename from + tui_erase_exec_info_content. + (tui_clear_exec_info_content): Delete. + +2019-08-13 Tom Tromey <tom@tromey.com> + + * tui/tui-winsource.h (struct tui_source_window_base) + <show_exec_info_content>: Declare. + (tui_show_exec_info_content): Don't declare. + * tui/tui-winsource.c + (tui_source_window_base::show_exec_info_content): Rename from + tui_show_exec_info_content. + (tui_source_window_base::update_exec_info): Update. + +2019-08-13 Tom Tromey <tom@tromey.com> + + * tui/tui-data.h (enum tui_bp_flag, tui_bp_flags, struct tui_source_element) + (TUI_BP_HIT_POS, TUI_BP_BREAK_POS, TUI_EXEC_POS) + (TUI_EXECINFO_SIZE, tui_exec_info_content): Move ... + * tui/tui-winsource.h (enum tui_bp_flag, tui_bp_flags, struct + tui_source_element, TUI_BP_HIT_POS, TUI_BP_BREAK_POS) + (TUI_EXEC_POS, TUI_EXECINFO_SIZE, tui_exec_info_content): + ... here. + +2019-08-13 Tom Tromey <tom@tromey.com> + + * tui/tui-winsource.h (struct tui_source_window_base) + <update_exec_info>: Declare. + (tui_update_exec_info): Don't declare. + * tui/tui-winsource.c (tui_update_source_window_as_is) + (tui_source_window_base::refresh_all) + (tui_update_all_breakpoint_info): Update. + (tui_source_window_base::update_exec_info): Rename from + tui_update_exec_info. + * tui/tui-stack.c (tui_show_frame_info): Update. + +2019-08-13 Tom Tromey <tom@tromey.com> + + * tui/tui-winsource.h (struct tui_source_window_base) + <set_exec_info_content>: Declare. + (tui_set_exec_info_content): Don't declare. + * tui/tui-winsource.c + (tui_source_window_base::set_exec_info_content): Rename from + tui_set_exec_info_content. + (tui_update_exec_info): Update. + +2019-08-13 Tom Tromey <tom@tromey.com> + + * tui/tui-winsource.h (struct tui_source_window_base) + <show_source_content>: Declare. + (tui_show_source_content): Don't declare. + * tui/tui-winsource.c (tui_update_source_window_as_is): Update. + (tui_source_window_base::show_source_content): Rename from + tui_show_source_content. + (tui_source_window_base::refresh_all): Update. + * tui/tui-layout.c (show_source_disasm_command) + (show_source_or_disasm_and_command): Update. + +2019-08-13 Tom Tromey <tom@tromey.com> + + * tui/tui-winsource.c (tui_erase_source_content) + (tui_show_source_content, tui_source_window_base::refresh_all): + Update. + * tui/tui-wingeneral.h + (tui_check_and_display_highlight_if_needed): Don't declare. + * tui/tui-wingeneral.c + (tui_win_info::check_and_display_highlight_if_needed): Rename from + check_and_display_highlight_if_needed. + * tui/tui-win.c (tui_rehighlight_all) + (tui_win_info::make_visible_with_new_height): Update. + * tui/tui-regs.c (tui_data_window::display_registers_from_line) + (tui_data_window::erase_data_content) + (tui_data_window::display_all_data): Update. + * tui/tui-data.h (struct tui_win_info) + <check_and_display_highlight_if_needed>: Declare. + +2019-08-13 Tom Tromey <tom@tromey.com> + + * tui/tui-win.c (tui_resize_all): Call + tui_delete_invisible_windows. + * tui/tui-layout.c (show_layout): Call + tui_delete_invisible_windows. + * tui/tui-data.h (tui_delete_invisible_windows): Declare. + * tui/tui-data.c (tui_delete_invisible_windows): New function. + +2019-08-13 Tom Tromey <tom@tromey.com> + + * tui/tui-disasm.c (tui_show_disassem): Add assertion. Don't call + tui_add_win_to_layout. + +2019-08-13 Tom Tromey <tom@tromey.com> + + * tui/tui-layout.h (tui_default_win_height): Don't declare. + * tui/tui-layout.c (tui_default_win_height): Now static. + +2019-08-13 Tom Tromey <tom@tromey.com> + + * tui/tui-layout.c (show_layout): Unify all layout cases into a + single switch. + (show_source_disasm_command, show_source_or_disasm_and_command): + Don't check current layout. + +2019-08-13 Tom Tromey <tom@tromey.com> + + * tui/tui-wingeneral.c (make_all_visible): Remove. + (tui_make_all_invisible): Simplify. + * tui/tui-layout.c (tui_make_all_invisible): Move from + tui-wingeneral.c; simplify. + (show_layout): Hoist call to tui_make_all_invisible. + (show_data): Don't call tui_make_all_invisible. + +2019-08-13 Tom Tromey <tom@tromey.com> + + * tui/tui-wingeneral.h (tui_make_all_visible): Don't declare. + * tui/tui-wingeneral.c (tui_make_all_visible): Remove. + +2019-08-13 Tom Tromey <tom@tromey.com> + + * tui/tui-layout.c (current_layout, tui_current_layout): Move from + tui-data.c. + (show_source_disasm_command, show_data) + (show_source_or_disasm_and_command): Don't use + tui_set_current_layout_to. + * tui/tui-data.h (tui_set_current_layout_to): Don't declare. + * tui/tui-data.c (current_layout, tui_current_layout): Move to + tui-layout.c. + (tui_set_current_layout_to): Remove. + +2019-08-13 Tom Tromey <tom@tromey.com> + + * tui/tui-layout.c (tui_set_layout): Update. + * tui/tui-data.h (struct tui_layout_def): Remove. + (tui_layout_def): Don't declare. + * tui/tui-data.c (layout_def): Remove. + (tui_layout_def): Remove. + +2019-08-13 Tom Tromey <tom@tromey.com> + + * tui/tui-winsource.h (struct tui_source_window_base) + <clear_detail>: No longer "override". + * tui/tui-regs.h (struct tui_data_window) <clear_detail>: Remove. + * tui/tui-regs.c (tui_data_window::clear_detail): Remove. + * tui/tui-data.h (struct tui_win_info) <clear_detail>: Remove. + * tui/tui-command.h (struct tui_cmd_window) <clear_detail>: + Remove. + * tui/tui-command.c (tui_cmd_window::clear_detail): Remove. + +2019-08-13 Tom Tromey <tromey@adacore.com> + + * tracepoint.c: Don't include readline.h or history.h. + +2019-08-12 Tom Tromey <tom@tromey.com> + + * configure: Rebuild. + * configure.ac: Check for readline 7. + * NEWS: Mention readline 7 requirement. + * README: Update. + +2019-08-12 Tom Tromey <tom@tromey.com> + + * mingw-hdep.c (gdb_select): Remove readline hack. + +2019-08-09 Pedro Franco de Carvalho <pedromfc@linux.ibm.com> + + * blockframe.c (find_pc_partial_function): Set *block to nullptr + when the function fails. + +2019-08-09 Andreas Arnez <arnez@linux.ibm.com> + + * s390-tdep.c (s390_type_align): New function. + (s390_gdbarch_init): Set it as type_align gdbarch method. + +2019-08-09 Tom de Vries <tdevries@suse.de> + + PR gdb/24591 + * dwarf2read.c (dwarf2_fetch_die_loc_sect_off): Adjust pc_high and + pc_low with relocation offset. + +2019-08-07 Tom Tromey <tromey@adacore.com> + + * stack.c (print_frame_arg, read_frame_local, read_frame_arg) + (print_frame_args): Update. + * python/py-framefilter.c (py_print_single_arg, enumerate_args): + Update. + * mi/mi-cmd-stack.c (list_arg_or_local): Update. + * frame.h (struct frame_arg): Add initializers. + <error>: Now a unique_xmalloc_ptr. + +2019-08-07 Alan Hayward <alan.hayward@arm.com> + + * NEWS: Expand the Pointer Authentication entry. + * aarch64-tdep.c (aarch64_frame_unmask_address): Rename from this. + (aarch64_frame_unmask_lr): ... to this. + (aarch64_prologue_prev_register, aarch64_dwarf2_prev_register): + Call aarch64_frame_unmask_lr. + * frame.c (struct frame_info): Add "masked" variable. + (frame_set_previous_pc_masked) (frame_get_pc_masked): New functions. + (fprint_frame): Check for masked pc. + * frame.h (frame_set_previous_pc_masked) (frame_get_pc_masked): New + declarations. + * python/py-framefilter.c (py_print_frame): Check for masked pc. + * stack.c (print_frame): Check for masked pc. + +2019-08-06 Tom Tromey <tom@tromey.com> + + * stabsread.c (patch_block_stabs, read_one_struct_field) + (read_enum_type): Use obstack_strndup. + * rust-exp.y (rust_parser::copy_name): Use obstack_strndup. + * gdb_obstack.h (obstack_strndup): Use obstack_strndup. + * dwarf2read.c (guess_full_die_structure_name) + (anonymous_struct_prefix): Use obstack_strndup. + * dbxread.c (cp_set_block_scope): Use obstack_strndup. + * c-exp.y (yylex): Use obstack_strndup. + * ada-exp.y (write_object_renaming, write_ambiguous_var) + (write_var_or_type): Use obstack_strndup. + +2019-08-06 Tom Tromey <tom@tromey.com> + + * symfile.c (reread_symbols): Use obstack_strdup. + * stabsread.c (read_type): Use obstack_strdup. + * gdb_obstack.h (obstack_strdup): New overload. + * dwarf2read.c (dwarf2_compute_name, create_dwo_unit_in_dwp_v1) + (create_dwo_unit_in_dwp_v2, build_error_marker_type) + (dwarf2_canonicalize_name): Use obstack_strdup. + * dbxread.c (read_dbx_symtab): Use obstack_strdup. + * cp-support.c (inspect_type, replace_typedefs_qualified_name): + Use obstack_strdup. + +2019-08-06 Tom Tromey <tom@tromey.com> + + * gdb_obstack.h (obstack_strdup): Define. + * gdb_obstack.c (obstack_strdup): Don't define. + +2019-08-06 Tom Tromey <tom@tromey.com> + + * xcoffread.c (SYMNAME_ALLOC, process_xcoff_symbol): Use + obstack_strdup. + * typeprint.c (typedef_hash_table::find_global_typedef): Use + obstack_strdup. + * symfile.c (allocate_compunit_symtab): Use obstack_strdup. + * stabsread.c (common_block_start): Use obstack_strdup. + * objfiles.c (set_objfile_main_name, objfile): Use + obstack_strdup. + * namespace.c (add_using_directive): Use obstack_strdup. + * mdebugread.c (parse_symbol, parse_type): Use obstack_strdup. + * jit.c (finalize_symtab): Use obstack_strdup. + * dwarf2read.c (fixup_go_packaging, dwarf2_physname) + (guess_partial_die_structure_name, partial_die_info::fixup) + (dwarf2_name): Use obstack_strdup. + * coffread.c (coff_read_struct_type, coff_read_enum_type): Use + obstack_strdup. + * c-exp.y (scan_macro_expansion): Use obstack_strdup. + * buildsym.c (buildsym_compunit::end_symtab_with_blockvector): Use + obstack_strdup. + * ada-lang.c (ada_decode_symbol): Use obstack_strdup. + +2019-08-07 Philippe Waroquiers <philippe.waroquiers@skynet.be> + + * unittests/help-doc-selftests.c: New file. + * Makefile.in: Add the new file. + +2019-08-07 Philippe Waroquiers <philippe.waroquiers@skynet.be> + + * cli/cli-decode.h (print_doc_line): Add for_value_prefix argument. + * cli/cli-decode.c (print_doc_line): Likewise. It now prints + the full first line, except when FOR_VALUE_PREFIX. In this case, + the trailing '.' is not output, and the first character is uppercased. + (print_help_for_command): Update call to print_doc_line. + (print_doc_of_command): Likewise. + * cli/cli-setshow.c (deprecated_show_value_hack): Likewise. + * cli/cli-option.c (append_indented_doc): Do not append newline. + (build_help_option): Append newline after first appended_indented_doc + only if a second call is done. + (build_help): Append 2 new lines before each option, except the first + one. + * compile/compile.c (_initialize_compile): Add new lines after + %OPTIONS%, when not at the end of the help. + Change help doc or code + producing the help doc to respect the invariants. + * maint-test-options.c (_initialize_maint_test_options): Likewise. + Also removed the new line after 'Options:', as all other commands + do not put an empty line between 'Options:' and the first option. + * printcmd.c (_initialize_printcmd): Likewise. + * stack.c (_initialize_stack): Likewise. + * interps.c (interpreter_exec_cmd): Fix "Usage:" line that was + incorrectly telling COMMAND is optional. + * ada-lang.c (_initialize_ada_language): Change help doc or code + producing the help doc to respect the invariants. + * ada-tasks.c (_initialize_ada_tasks): Likewise. + * breakpoint.c (_initialize_breakpoint): Likewise. + * cli/cli-cmds.c (_initialize_cli_cmds): Likewise. + * cli/cli-logging.c (_initialize_cli_logging): Likewise. + * cli/cli-setshow.c (_initialize_cli_setshow): Likewise. + * cli/cli-style.c (cli_style_option::add_setshow_commands, + _initialize_cli_style): Likewise. + * corelow.c (core_target_info): Likewise. + * dwarf-index-cache.c (_initialize_index_cache): Likewise. + * dwarf2read.c (_initialize_dwarf2_read): Likewise. + * filesystem.c (_initialize_filesystem): Likewise. + * frame.c (_initialize_frame): Likewise. + * gnu-nat.c (add_task_commands): Likewise. + * infcall.c (_initialize_infcall): Likewise. + * infcmd.c (_initialize_infcmd): Likewise. + * interps.c (_initialize_interpreter): Likewise. + * language.c (_initialize_language): Likewise. + * linux-fork.c (_initialize_linux_fork): Likewise. + * maint-test-settings.c (_initialize_maint_test_settings): Likewise. + * maint.c (_initialize_maint_cmds): Likewise. + * memattr.c (_initialize_mem): Likewise. + * printcmd.c (_initialize_printcmd): Likewise. + * python/lib/gdb/function/strfns.py (_MemEq, _StrLen, _StrEq, + _RegEx): Likewise. + * ravenscar-thread.c (_initialize_ravenscar): Likewise. + * record-btrace.c (_initialize_record_btrace): Likewise. + * record-full.c (_initialize_record_full): Likewise. + * record.c (_initialize_record): Likewise. + * regcache-dump.c (_initialize_regcache_dump): Likewise. + * regcache.c (_initialize_regcache): Likewise. + * remote.c (add_packet_config_cmd, init_remote_threadtests, + _initialize_remote): Likewise. + * ser-tcp.c (_initialize_ser_tcp): Likewise. + * serial.c (_initialize_serial): Likewise. + * skip.c (_initialize_step_skip): Likewise. + * source.c (_initialize_source): Likewise. + * stack.c (_initialize_stack): Likewise. + * symfile.c (_initialize_symfile): Likewise. + * symtab.c (_initialize_symtab): Likewise. + * target-descriptions.c (_initialize_target_descriptions): Likewise. + * top.c (init_main): Likewise. + * tracefile-tfile.c (tfile_target_info): Likewise. + * tracepoint.c (_initialize_tracepoint): Likewise. + * tui/tui-win.c (_initialize_tui_win): Likewise. + * utils.c (add_internal_problem_command): Likewise. + * valprint.c (value_print_option_defs): Likewise. + +2019-08-06 Frank Ch. Eigler <fche@redhat.com> + + PR build/24886 + * configure.ac: Drop enable-libmcheck support. + * configure, config.in: Rebuild. + * libmcheck.m4: Remove. + * acinclude.m4: Don't include it. + * Makefile.in: Don't distribute it. + * top.c (print_gdb_configuration): Don't mention it. + +2019-08-06 Tom Tromey <tom@tromey.com> + + * utils.c (set_output_style): Sometimes pass stream to + emit_style_escape. + * ui-out.h (class ui_out) <can_emit_style_escape>: Declare. + * record-btrace.c (btrace_insn_history): Update. + * mi/mi-out.h (class mi_ui_out) <can_emit_style_escape>: New + method. + * disasm.h (gdb_pretty_print_disassembler): Add uiout parameter. + Update initializers. + <m_uiout>: New field. + <m_di>: Move lower. + * disasm.c (gdb_pretty_print_disassembler::pretty_print_insn): + Remove "uiout" parameter. + (dump_insns): Update. + * cli-out.h (class cli_ui_out) <can_emit_style_escape>: Declare. + * cli-out.c (cli_ui_out::can_emit_style_escape): New method. + +2019-08-06 Christian Biesinger <cbiesinger@google.com> + + * symtab.c (symbol_cache_lookup): Change int to enum block_enum. + (error_in_psymtab_expansion): Likewise. + (lookup_symbol_via_quick_fns): Likewise. + (basic_lookup_transparent_type_quick): Likewise. + (basic_lookup_transparent_type_1): Likewise. + +2019-08-06 Tom Tromey <tromey@adacore.com> + + * source.c (last_source_error): Now bool. + (print_source_lines_base): Make "noprint" bool. Only open + source file when last_source_visited changes. + +2019-08-06 Tom Tromey <tromey@adacore.com> + + * annotate.c (annotate_source_line): Use g_source_cache. + * source-cache.c (source_cache::get_plain_source_lines): Change + parameters. Populate m_offset_cache. + (source_cache::ensure): New method. + (source_cache::get_line_charpos): New method. + (extract_lines): Move lower. Change parameters. + (source_cache::get_source_lines): Move lower. + * source-cache.h (class source_cache): Update comment. + <get_line_charpos>: New method. + <get_source_lines>: Update comment. + <clear>: Clear m_offset_cache. + <get_plain_source_lines>: Change parameters. + <ensure>: New method + <m_offset_cache>: New member. + * source.c (forget_cached_source_info_for_objfile): Update. + (info_source_command): Use g_source_cache. + (find_source_lines, open_source_file_with_line_charpos): Remove. + (print_source_lines_base, search_command_helper): Use g_source_cache. + * source.h (open_source_file_with_line_charpos): Don't declare. + * symtab.h (struct symtab) <nlines, line_charpos>: Remove. + * tui/tui-source.c (tui_source_window::do_scroll_vertical): + Use g_source_cache. + +2019-08-06 Tom Tromey <tromey@adacore.com> + + * source-cache.c (source_cache::get_plain_source_lines): + Remove "first_line" and "last_line" parameters. + (source_cache::get_source_lines): Cache plain text. + * source-cache.h (class source_cache) + <get_plain_source_lines>: Update. + +2019-08-06 Tom Tromey <tromey@adacore.com> + + * source-cache.c (extract_lines): No longer a method. + Changed type of parameter. Include final newline. + (selftests::extract_lines_test): New function. + (_initialize_source_cache): Likewise. + * source-cache.h (class source_cache) + <extract_lines>: Don't declare. + +2019-08-06 Tom Tromey <tromey@adacore.com> + + * breakpoint.c (init_breakpoint_sal): Update. + (breakpoint): Update. + * breakpoint.h (struct breakpoint) <filter>: Now a + unique_xmalloc_ptr. + +2019-08-05 Christian Biesinger <cbiesinger@google.com> + + * NEWS: Mention dictionary access on blocks. + * python/py-block.c (blpy_getitem): New function. + (block_object_as_mapping): New struct. + (block_object_type): Use new struct for tp_as_mapping field. + +2019-08-05 Christian Biesinger <cbiesinger@google.com> + + * objfiles.h (objfile): Add a comment describing partial symbols. + +2019-08-05 Tom Tromey <tromey@adacore.com> + + * compile/compile.c (_initialize_compile): Use _(), not N_(). + * thread.c (_initialize_thread): Use _(), not N_(). + * stack.c (_initialize_stack): Use _(), not N_(). + * printcmd.c (_initialize_printcmd): Use _(), not N_(). + +2019-08-04 Simon Marchi <simon.marchi@polymtl.ca> + + * dwarf2read.c (struct dw2_symtab_iterator): + <want_specific_block>: Remove. + <block_index>: Change type to gdb::optional. + (dw2_symtab_iter_init): Remove WANT_SPECIFIC_BLOCK parameter, + change type of BLOCK_INDEX parameter to gdb::optional. + (dw2_symtab_iter_next): Re-write in function of gdb::optional. + (dw2_lookup_symbol): Don't pass argument for + WANT_SPECIFIC_BLOCK. + (dw2_expand_symtabs_for_function): Don't pass argument for + WANT_SPECIFIC_BLOCK, pass empty optional for BLOCK_INDEX. + (class dw2_debug_names_iterator) + <dw2_debug_names_iterator>: Remove WANT_SPECIFIC_BLOCK + parameter, change BLOCK_INDEX type to gdb::optional. + <m_want_specific_block>: Remove. + <m_block_index>: Change type to gdb::optional. + (dw2_debug_names_iterator::next): Change type of IS_STATIC to + gdb::optional. Re-write in function of gdb::optional. + (dw2_debug_names_lookup_symbol): Don't pass argument for + WANT_SPECIFIC_BLOCK. + (dw2_debug_names_expand_symtabs_for_function): Don't pass + argument for WANT_SPECIFIC_BLOCK, pass empty optional for + BLOCK_INDEX. + +2019-08-03 Philippe Waroquiers <philippe.waroquiers@skynet.be> + + * NEWS: Mention changes to "info sources" command. + +2019-08-03 Philippe Waroquiers <philippe.waroquiers@skynet.be> + + * symtab.c (filename_partial_match_opts): New struct type. + (struct output_source_filename_data): New members + regexp, c_regexp, partial_match. + (output_source_filename): Use new members to decide to print file. + (info_sources_option_defs): New variable. + (make_info_sources_options_def_group, print_info_sources_header, + info_sources_command_completer): + New functions. + (info_sources_command): Read new optional arguments. + (_initialize_symtab): Update info sources help. + +2019-08-02 Alexandre Oliva <oliva@adacore.com> + + * ada-lang.c (exception_support_info_v0): Renamed from... + (default_exception_support_info): ... this. Create new + definition for v1. + (ada_has_this_exception_support): Look up catch_handlers_sym. + (ada_exception_support_info_sniffer): Try v0 after default. + +2019-08-01 Tom Tromey <tromey@adacore.com> + + * ia64-libunwind-tdep.h (struct libunwind_descr): Include + gdbarch.h. + +2019-08-01 Christian Biesinger <cbiesinger@google.com> + + * s12z-tdep.c: Fix include path for s12z-opc.h. + +2019-08-01 Alan Hayward <alan.hayward@arm.com> + + * NEWS: Require GNU make 3.82. + +2019-07-16 Tom Tromey <tom@tromey.com> + + * tui/tui-wingeneral.h (tui_copy_win, tui_box_win): Don't + declare. + +2019-07-30 Tom Tromey <tromey@adacore.com> + + * block.c (contained_in): Remove BLOCK_FUNCTION check. + +2019-07-30 Kevin Buettner <kevinb@redhat.com> + + * printcmd.c (print_address_symbolic): Print negative offsets. + (build_address_symbolic): Force signed arithmetic when computing + offset. + +2019-07-30 Christian Biesinger <cbiesinger@google.com> + + PR/24474: Add a function to lookup static variables. + * NEWS: Mention this new function. + * python/py-symbol.c (gdbpy_lookup_static_symbol): New function. + * python/python-internal.h (gdbpy_lookup_static_symbol): New function. + * python/python.c (python_GdbMethods): Add new function. + +2019-07-29 Christian Biesinger <cbiesinger@google.com> + + * NEWS: Mention new functions Objfile.lookup_{global,static}_symbol. + * python/py-objfile.c (objfpy_lookup_global_symbol): New function. + (objfpy_lookup_static_symbol): New function. + (objfile_object_methods): Add new functions. + +2019-07-29 Philippe Waroquiers <philippe.waroquiers@skynet.be> + + * NEWS: Mention 'set|show print frame-info'. Mention new + 'presence' value for 'frame-arguments'. Mention new '-frame-info' + backtrace argument. Mention that python frame filtering code + is now consistent with what 'backtrace' command prints. + +2019-07-29 Philippe Waroquiers <philippe.waroquiers@skynet.be> + + * frame.h (enum print_what): New value 'SHORT_LOCATION', update + comments. + (print_frame_info_auto, print_frame_info_source_line, + print_frame_info_location, print_frame_info_source_and_location, + print_frame_info_location_and_address, print_frame_info_short_location): + New declarations. + (struct frame_print_options): New member print_frame_info. + * extension.h (enum ext_lang_frame_args): New value CLI_PRESENCE. + * stack.h (get_user_print_what_frame_info): New declaration. + (frame_show_address): New declaration. + * stack.c (print_frame_arguments_choices): New value 'presence'. + (print_frame_info_auto, print_frame_info_source_line, + print_frame_info_location, print_frame_info_source_and_location, + print_frame_info_location_and_address, print_frame_info_short_location, + print_frame_info_choices, print_frame_info_print_what): New definitions. + (print_frame_args): Only print dots for args if print frame-arguments + is 'presence'. + (frame_print_option_defs): New element for "frame-info". + (get_user_print_what_frame_info): New function. + (frame_show_address): Make non static. Move comment to stack.h. + (print_frame_info_to_print_what): New function. + (print_frame_info): Update comment. Use fp_opts.print_frame_info + to decide what to print. + (backtrace_command_1): Handle the new print_frame_arguments_presence + value. + (_initialize_stack): Call add_setshow_enum_cmd for frame-info. + * python/py-framefilter.c (py_print_args): Handle CLI_PRESENCE. + (py_print_frame): In non-mi mode, use LOCATION as default for + print_what, similarly to frame information printed directly by + backtrace command. Handle frame-info user option in non MI mode. + +2019-07-27 Kevin Buettner <kevinb@redhat.com> + + * linux-thread-db.c (thread_db_target::thread_handle_to_thread_info): + Add case for debugging 32-bit target on 64-bit host. Revise + comment. + +2019-07-27 Kevin Buettner <kevinb@redhat.com> + + * infrun.c (fill_in_stop_func): Use find_pc_partial_function + instead of find_function_entry_range_from_pc. + +2019-07-27 Kevin Buettner <kevinb@redhat.com> + + * stack.c (find_frame_funname): Remove code which preferred + minsym over symtab sym in "certain pathological cases". + + * valprint.h (build_address_symbolic): Add "prefer_sym_over_minsym" + parameter. Change type of "do_demangle" to bool. + * disasm.c (gdb_pretty_print_disassembler::pretty_print_insn): + Pass suitable "prefer_sym_over_minsym" flag to + build_address_symbolic(). Don't output "+" for negative offsets. + * printcmd.c (print_address_symbolic): Update invocation of + build_address_symbolic to include a "prefer_sym_over_minsym" + flag. + (build_address_symbolic): Add "prefer_sym_over_minsym" parameter. + Restrict cases in which use of minimal symbol is preferred to that + of a found symbol. Update comments. + + * dwarf2-frame.c (dwarf2_frame_cache): Don't decode FDE instructions + for entry pc when entry pc is out of range for that FDE. + +2019-07-26 Brian Callahan <bcallah@openbsd.org> + + PR gdb/24839: + * obsd-nat.c (obsd_nat_target::pid_to_str): Fix typo in return + type. + +2019-07-25 Christian Biesinger <cbiesinger@google.com> + + * python/py-objfile.c (add_separate_debug_file): Fix comment about + this function's Python signature. + + +2019-07-24 Christian Biesinger <cbiesinger@google.com> + + * compile/compile-object-load.c (compile_object_load): Pass GLOBAL_SCOPE. + * solib-spu.c (spu_lookup_lib_symbol): Pass GLOBAL_SCOPE. + * solib-svr4.c (elf_lookup_lib_symbol): Pass GLOBAL_SCOPE. + * symtab.c (lookup_global_symbol_from_objfile): Add a scope parameter. + * symtab.h (lookup_global_symbol_from_objfile): Likewise. + + +2019-07-24 Yoshinori Sato <ysato@users.sourceforge.jp> + + * h8300-tdep.c (h8300_register_name_common): New. + h8300_register_name): Use h8300_register_name_common. + (h8300s_register_name): Likewise. + (h8300sx_register_name): Likewise. + (h8300h_register_nam): New. + (h8300_gdbarch_init): Use h8300h_register_name in h8300h machine. + + +2019-07-23 Srinath Parvathaneni <srinath.parvathaneni@arm.com> + + * arm-tdep.c (arm_skip_cmse_entry): New function. + (arm_is_sgstubs_section): New function. + (arm_skip_stub): Add call to arm_skip_cmse_entry function. + +2019-07-22 Tom Tromey <tom@tromey.com> + + * tui/tui-win.c (tui_win_info::make_invisible_and_set_new_height): + Don't self-assign. + +2019-07-22 Andrew Burgess <andrew.burgess@embecosm.com> + + * c-typeprint.c (c_print_typedef): Pass -1 instead of 0 to + type_print. + +2019-07-22 Andrew Burgess <andrew.burgess@embecosm.com> + + * symtab.c (search_symbols): Adjust msymbol matching type arrays + so that GDB doesn't match any msymbols when searching in the + TYPES_DOMAIN. + (print_symbol_info): Print using typedef_print or type_print based + on the type of the symbol. Add updated FIXME comment moved from... + (_initialize_symtab): ... move and update FIXME comment to above. + +2019-07-22 Andrew Burgess <andrew.burgess@embecosm.com> + + * NEWS: Mention adding -q option to "info types". + * symtab.c (struct info_types_options): New struct. + (info_types_options_defs): New variable. + (make_info_types_options_def_group): New function. + (info_types_command): Use gdb::option framework to parse options. + (info_types_command_completer): New function. + (_initialize_symtab): Extend the help text on "info types" and + register command completer. + +2019-07-21 Christian Biesinger <cbiesinger@google.com> + + * symtab.c (lookup_symbol_in_objfile_symtabs): Change int to block_enum. + (lookup_symbol_in_objfile): Change int to block_enum and add a + gdb_assert to make sure block_index is GLOBAL_BLOCK or STATIC_BLOCK. + +2019-07-20 Christian Biesinger <cbiesinger@google.com> + + * MAINTAINERS (Write After Approval): Add self. + +2019-07-19 Andrew Burgess <andrew.burgess@embecosm.com> + + * riscv-tdep.c (riscv_push_dummy_code): Write a 4-byte nop + instruction to the dummy code region. + +2019-07-19 Tom Tromey <tromey@adacore.com> + + * contrib/ari/gdb_ari.sh: Mention C++11, not ISO C 90. + (ARGSUSED, PARAMS, __func__): Remove rules. + +2019-07-19 Alan Hayward <alan.hayward@arm.com> + + * arm-tdep.c (_initialize_arm_tdep): Remove xml tests. + * features/arm/arm-with-iwmmxt.c: Remove. + * features/arm/arm-with-iwmmxt.xml: Remove. + * features/arm/arm-with-m-fpa-layout.c: Remove. + * features/arm/arm-with-m-fpa-layout.xml: Remove. + * features/arm/arm-with-m-vfp-d16.c: Remove. + * features/arm/arm-with-m-vfp-d16.xml: Remove. + * features/arm/arm-with-m.c: Remove. + * features/arm/arm-with-m.xml: Remove. + * features/arm/arm-with-neon.c: Remove. + * features/arm/arm-with-neon.xml: Remove. + * features/arm/arm-with-vfpv2.c: Remove. + * features/arm/arm-with-vfpv2.xml: Remove. + * features/arm/arm-with-vfpv3.c: Remove. + * features/arm/arm-with-vfpv3.xml: Remove. + +2019-07-19 Alan Hayward <alan.hayward@arm.com> + + * arm-tdep.c (_initialize_arm_tdep): Add xml regression tests. + +2019-07-19 Alan Hayward <alan.hayward@arm.com> + + * arch/aarch32.c (aarch32_create_target_description): Create + target descriptions using features. + * arch/arm.c (arm_create_target_description) + (arm_create_mprofile_target_description): Likewise. + * arm-tdep.c (_initialize_arm_tdep): Remove tdesc init calls. + +2019-07-19 Alan Hayward <alan.hayward@arm.com> + + * Makefile.in: Add new files. + * aarch32-tdep.c: New file. + * aarch32-tdep.h: New file. + * aarch64-linux-nat.c (aarch64_linux_nat_target::read_description): + Call aarch32_read_description. + * arch/aarch32.c: New file. + * arch/aarch32.h: New file. + * arch/arm.c (arm_create_target_description) + (arm_create_mprofile_target_description): New function. + * arch/arm.h (arm_fp_type, arm_m_profile_type): New enum. + (arm_create_target_description) + (arm_create_mprofile_target_description): New declaration. + * arm-fbsd-tdep.c (arm_fbsd_read_description_auxv): Call + read_description functions. + * arm-linux-nat.c (arm_linux_nat_target::read_description): + Likewise. + * arm-linux-tdep.c (arm_linux_core_read_description): Likewise. + * arm-tdep.c (tdesc_arm_list): New variable. + (arm_register_g_packet_guesses): Call create description functions. + (arm_read_description) (arm_read_mprofile_description): New + function. + * arm-tdep.h (arm_read_description) + (arm_read_mprofile_description): Add declaration. + * configure.tgt: Add new files. + +2019-07-18 Guillaume LABARTHE <guillaume.labarthe@gmail.com> + + * top.c (new_ui_command): Open specified terminal just once. + +2019-07-18 Tom Tromey <tromey@adacore.com> + + * symtab.c (main_name): Constify return type. + * symfile.c (set_initial_language): Update. + * symtab.h (main_name): Constify return type. + +2019-07-17 Tom Tromey <tom@tromey.com> + + * tui/tui-winsource.c (tui_update_source_window) + (tui_update_source_window_as_is) + (tui_update_source_windows_with_line): Remove return. + * tui/tui-disasm.c (tui_show_disassem) + (tui_show_disassem_and_update_source): Remove return. + * tui/tui.c (tui_reset): Remove return. + * tui/tui-wingeneral.c + (tui_check_and_display_highlight_if_needed): Remove return. + +2019-07-17 Tom Tromey <tom@tromey.com> + + * tui/tui-win.c (parse_scrolling_args): Throw separate errors. + +2019-07-17 Tom Tromey <tom@tromey.com> + + * tui/tui-winsource.h (struct tui_exec_info_window) + (struct tui_source_window_base): Move from tui-data.h. + * tui/tui-winsource.c: Move many method definitions from + elsewhere. Remove "structuring" comments. + * tui/tui-wingeneral.c (tui_source_window_base::make_visible) + (tui_source_window_base::refresh_window): Move to + tui-winsource.c. + * tui/tui-win.c (tui_source_window_base::refresh_all) + (tui_source_window_base::update_tab_width) + (tui_source_window_base::set_new_height) + (tui_source_window_base::do_make_visible_with_new_height): Move to + tui-winsource.c. + * tui/tui-source.h: Update. + * tui/tui-source.c (tui_source_window_base::reset): Move to + tui-winsource.c. + * tui/tui-disasm.h: Update. + * tui/tui-data.h (struct tui_exec_info_window): Move to + tui-winsource.h. + (struct tui_source_window_base): Likewise. + * tui/tui-data.c (tui_source_window_base::clear_detail) + (tui_source_window_base, ~tui_source_window_base): Move to + tui-winsource.c. + +2019-07-17 Tom Tromey <tom@tromey.com> + + * tui/tui-win.c (tui_resize_all) + (tui_source_window_base::update_tab_width) + (tui_adjust_win_heights): Update. + (tui_win_info::make_invisible_and_set_new_height): Rename from + make_invisible_and_set_new_height. + * tui/tui-data.h (struct tui_win_info) + <make_invisible_and_set_new_height>: New method. + +2019-07-17 Tom Tromey <tom@tromey.com> + + * tui/tui.c: Update. + * tui/tui-source.h (struct tui_source_window): Move from + tui-data.h. + * tui/tui-layout.c: Update. + * tui/tui-disasm.c: Update. + * tui/tui-data.h (struct tui_source_window): Move to + tui-source.h. + +2019-07-17 Tom Tromey <tom@tromey.com> + + * tui/tui-disasm.h (struct tui_disasm_window): Move from + tui-data.h. + * tui/tui-data.h (struct tui_disasm_window): Move to + tui-disasm.h. + +2019-07-17 Tom Tromey <tom@tromey.com> + + * tui/tui-regs.h (struct tui_data_item_window): Move from + tui-data.h. + * tui/tui-regs.c (tui_data_item_window): Move from tui-data.c. + * tui/tui-data.h (struct tui_data_item_window): Move to + tui-regs.h. + * tui/tui-data.c (~tui_data_item_window): Move to tui-regs.c. + +2019-07-17 Tom Tromey <tom@tromey.com> + + * tui/tui.c: Update. + * tui/tui-win.c (tui_cmd_window::do_make_visible_with_new_height) + (tui_cmd_window::max_height): Move to tui-command.c. + * tui/tui-layout.c: Update. + * tui/tui-data.h (struct tui_cmd_window): Move to tui-command.h. + * tui/tui-data.c (tui_cmd_window::clear_detail): Move to + tui-command.c. + * tui/tui-command.h (struct tui_cmd_window): Move from + tui-data.h. + * tui/tui-command.c: Remove "structuring" comments. + (tui_cmd_window::clear_detail) + (tui_cmd_window::do_make_visible_with_new_height) + (tui_cmd_window::max_height): Move from elsewhere. + +2019-07-17 Tom Tromey <tom@tromey.com> + + * tui/tui-io.c (tui_dispatch_ctrl_char): Move from tui-command.c. + Now static. + * tui/tui-command.h (tui_dispatch_ctrl_char): Don't declare. + * tui/tui-command.c (tui_dispatch_ctrl_char): Move to tui-io.c. + +2019-07-17 Tom Tromey <tom@tromey.com> + + * tui/tui.c: Update. + * tui/tui-wingeneral.c (tui_data_window::refresh_window): Move to + tui-regs.c. + * tui/tui-windata.h: Remove file. + * tui/tui-windata.c: Remove file. + * tui/tui-win.c (tui_data_window::set_new_height) + (tui_data_window::do_make_visible_with_new_height): Move to + tui-regs.c. + * tui/tui-regs.h (struct tui_data_window): Move from tui-data.h. + * tui/tui-regs.c: Remove "structuring" comments. + (tui_data_window::first_data_item_displayed) + (tui_data_window::delete_data_content_windows) + (tui_data_window::erase_data_content) + (tui_data_window::display_all_data) + (tui_data_window::refresh_all) + (tui_data_window::do_scroll_vertical) + (tui_data_window::clear_detail, tui_data_window::set_new_height) + (tui_data_window::do_make_visible_with_new_height) + (tui_data_window::refresh_window): Move from elsewhere. + (_initialize_tui_regs): Move to end of file. + * tui/tui-layout.c: Update. + * tui/tui-hooks.c: Update. + * tui/tui-data.h (struct tui_data_window): Move to tui-regs.h. + * tui/tui-data.c (tui_data_window::clear_detail): Move to + tui-regs.c. + * Makefile.in (SUBDIR_TUI_SRCS): Remove tui-windata.c. + +2019-07-17 Tom Tromey <tom@tromey.com> + + * tui/tui-io.c (tui_puts_internal): Call wrefresh if newline is + seen. + +2019-07-17 Tom Tromey <tom@tromey.com> + + * tui/tui-win.c (tui_source_window_base::set_new_height) + (tui_source_window_base::do_make_visible_with_new_height): Use + m_has_locator field directly. + * tui/tui-data.h (struct tui_win_info) <has_locator>: Remove + method. + (struct tui_source_window_base) <has_locator>: Likewise. + +2019-07-17 Tom Tromey <tom@tromey.com> + + * tui/tui-wingeneral.h (tui_make_visible, tui_make_invisible): + Don't declare. + * tui/tui-wingeneral.c (tui_make_visible, tui_make_invisible): + Remove. + * tui/tui-win.c (tui_source_window_base::set_new_height) + (tui_source_window_base::set_new_height) + (make_invisible_and_set_new_height) + (tui_source_window_base::do_make_visible_with_new_height) + (tui_source_window_base::do_make_visible_with_new_height): + Update. + * tui/tui-layout.c (show_source_disasm_command, show_data) + (show_source_or_disasm_and_command): Update. + * tui/tui-layout.c (show_layout): Update. + +2019-07-17 Tom Tromey <tom@tromey.com> + + * tui/tui-layout.c (make_data_window): Remove. + (show_data): Unify creation and re-initialization cases. + +2019-07-17 Tom Tromey <tom@tromey.com> + + * tui/tui-layout.c (make_source_window, make_disasm_window): + Remove. + (show_data): Unify creation and re-initialization cases. + +2019-07-17 Tom Tromey <tom@tromey.com> + + * tui/tui-layout.c (make_command_window): Remove. + (show_source_disasm_command, show_source_or_disasm_and_command): + Unify creation and re-initialization cases. + +2019-07-17 Tom Tromey <tom@tromey.com> + + * tui/tui-layout.c (show_source_or_disasm_and_command): Unify + creation and re-initialization cases. + +2019-07-17 Tom Tromey <tom@tromey.com> + + * tui/tui-regs.c (tui_get_register): Return void. + +2019-07-17 Tom Tromey <tom@tromey.com> + + * tui/tui-wingeneral.c (tui_gen_win_info::make_visible): + Simplify. + +2019-07-17 Tom Tromey <tom@tromey.com> + + * tui/tui-layout.c (show_source_disasm_command): Simplify window + resetting. + +2019-07-17 Tom Tromey <tom@tromey.com> + + * tui/tui.h (tui_set_layout_by_name): Don't declare. + * tui/tui-regs.c (tui_reg_layout): New function. + (tui_show_registers, tui_reg_command): Use it. + * tui/tui-layout.c (LAYOUT_USAGE): Remove. + (tui_layout_command): Rename from tui_set_layout_by_name. Change + parameters. + (tui_layout_command): Remove. + +2019-07-17 Tom Tromey <tom@tromey.com> + + * tui/tui-layout.h (tui/tui-layout): Return void. + * tui/tui-layout.c (tui_set_layout): Return void. Add assert. + +2019-07-17 Tom Tromey <tom@tromey.com> + + * tui/tui-layout.c (show_source_disasm_command, show_data): + Update. + (reset_locator): Remove. + (show_source_or_disasm_and_command): Update. + +2019-07-17 Tom Tromey <tom@tromey.com> + + * tui/tui-source.c (tui_source_window_base::reset): Remove + win_type parameter. + * tui/tui-layout.c (make_command_window, make_source_window) + (make_disasm_window, make_data_window) + (show_source_disasm_command, show_data, tui_gen_win_info::reset) + (reset_locator, show_source_or_disasm_and_command): Update. + * tui/tui-data.h (struct tui_gen_win_info) <reset>: Remove + win_type parameter. + (struct tui_source_window_base) <reset>: Likewise. + +2019-07-17 Tom Tromey <tom@tromey.com> + + * tui/tui-layout.c (show_source_disasm_command): Use + reset_locator. + (reset_locator): New function. + (init_and_make_win): Remove. + (show_source_or_disasm_and_command): Use reset_locator. + +2019-07-17 Tom Tromey <tom@tromey.com> + + * tui/tui-winsource.c (tui_set_exec_info_content): Remove + condition. + * tui/tui-wingeneral.c (tui_source_window_base::make_visible): + Remove condition. + * tui/tui-source.c (tui_source_window_base::reset): New method. + * tui/tui-layout.c (make_command_window): Don't call + init_and_make_win. + (make_source_window, make_disasm_window): Don't call + make_source_or_disasm_window. + (make_data_window): Don't call init_and_make_win. Change calling + convention. + (show_source_disasm_command, show_data): Simplify. + (make_source_or_disasm_window): Remove. + (show_source_or_disasm_and_command): Simplify. + * tui/tui-data.h (struct tui_gen_win_info) <reset>: Now virtual. + (struct tui_source_window_base) <reset>: Likewise. + <execution_info>: Remove initializer. + * tui/tui-data.c (tui_source_window_base): Initialize + execution_info. + +2019-07-17 Tom Tromey <tom@tromey.com> + + * tui/tui-layout.c (tui_set_layout): Remove regs_populate + variable. + +2019-07-17 Tom Tromey <tom@tromey.com> + + * tui/tui.c (tui_rl_other_window): Update. + * tui/tui-wingeneral.c (tui_data_window::refresh_window): Call + superclass method first. Always iterate over regs_content. + (tui_unhighlight_win, tui_highlight_win): Use refresh_window + method. + * tui/tui-win.c (tui_set_focus_command): Update. + +2019-07-17 Tom Tromey <tom@tromey.com> + + * tui/tui-win.c (tui_set_focus_command): Rename from + tui_set_focus. Call tui_enable. + (tui_set_focus_command): Remove. + +2019-07-17 Tom Tromey <tom@tromey.com> + + * tui/tui-winsource.c (tui_show_exec_info_content): Don't call + refresh_window. + * tui/tui-wingeneral.c (tui_gen_win_info::refresh_window): Call + touchwin. + (tui_data_window::refresh_window): Call refresh_window on data + items. Always call superclass refresh_window. + (tui_win_info::refresh): Remove. + (tui_source_window_base::refresh_window): Update. + (tui_refresh_all): Update. + * tui/tui-layout.c (show_source_disasm_command): Remove call to + refresh_window. + (show_source_or_disasm_and_command): Likewise. + * tui/tui-data.h (struct tui_win_info) <refresh>: Remove. + (struct tui_source_window_base) <refresh>: Likewise. + +2019-07-17 Tom Tromey <tom@tromey.com> + + * tui/tui-winsource.c (tui_clear_source_content) + (tui_show_source_content): Update. + * tui/tui-source.c (tui_source_window::showing_source_p): Check + whether content is empty. + * tui/tui-data.h (struct tui_source_window_base) <content_in_use>: + Remove. + +2019-07-17 Tom Tromey <tom@tromey.com> + + * tui/tui-winsource.c (tui_erase_source_content): Clear the + window's contents. + * tui/tui-source.h (tui_set_source_content_nil): Don't declare. + * tui/tui-source.c (tui_set_source_content_nil): Remove. + +2019-07-17 Tom Tromey <tom@tromey.com> + + * tui/tui-data.h (UNDEFINED_ITEM): Remove define. + (struct tui_data_item_window): Update. + +2019-07-17 Tom Tromey <tom@tromey.com> + + * tui/tui-data.h (MAX_CONTENT_COUNT, TUI_NULL_STR) + (DEFAULT_HISTORY_COUNT, WITH_LOCATOR, NO_LOCATOR): Remove + defines. + +2019-07-17 Tom Tromey <tom@tromey.com> + + * tui/tui-winsource.h (tui_erase_source_content) + (tui_clear_source_content): Remove "display_prompt" parameter. + * tui/tui-winsource.c (tui_update_source_window_as_is) + (tui_update_source_windows_with_addr): Update. + (tui_clear_source_content): Remove "display_prompt" parameter. + (tui_erase_source_content): Likewise. Simplify. + (tui_show_source_content): Update. + * tui/tui-win.c (tui_resize_all, tui_adjust_win_heights): Update. + * tui/tui-stack.c (tui_show_frame_info): Update. + * tui/tui-data.h (EMPTY_SOURCE_PROMPT, NO_EMPTY_SOURCE_PROMPT): + Remove defines. + +2019-07-17 Tom Tromey <tom@tromey.com> + + * tui/tui-winsource.c (tui_update_source_window_as_is): Update. + * tui/tui-disasm.h (tui_set_disassem_content): Add win_info + parameter. + * tui/tui-disasm.c (tui_set_disassem_content): Add win_info + parameter. + +2019-07-17 Tom Tromey <tom@tromey.com> + + * tui/tui-winsource.c (tui_clear_source_content) + (tui_show_source_content, tui_show_exec_info_content) + (tui_clear_exec_info_content): Update. + * tui/tui-stack.c (tui_show_locator_content): Update. + (tui_show_frame_info): Update. + * tui/tui-source.h (tui_source_window): Don't declare. + * tui/tui-source.c (tui_source_window::showing_source_p): Rename + from tui_source_is_displayed. + * tui/tui-data.h (struct tui_gen_win_info) <content_in_use>: + Remove field. + (struct tui_source_window_base) <content_in_use>: New field. Now + bool. + (struct tui_source_window) <showing_source_p>: New method. + (TUI_SRC_WIN): Change cast. + * tui/tui-data.c (tui_initialize_static_data): Update. + +2019-07-17 Tom Tromey <tom@tromey.com> + + * tui/tui-winsource.c (tui_update_breakpoint_info): Use + location_matches_p. + * tui/tui-source.c (tui_source_window::location_matches_p): New + method. + * tui/tui-disasm.c (tui_disasm_window::location_matches_p): New + method. + * tui/tui-data.h (struct tui_source_window_base) + <location_matches_p>: New method. + (struct tui_source_window, struct tui_disasm_window) + <location_matches_p>: Likewise. + +2019-07-17 Tom Tromey <tom@tromey.com> + + * tui/tui-win.c (tui_set_win_height_command): Rename from + tui_set_win_height. + (tui_set_win_height_command): Remove. + +2019-07-17 Tom Tromey <tom@tromey.com> + + * tui/tui-source.c (tui_source_window): New constructor. Add + observer. + (~tui_source_window): New destructor. + (tui_source_window::style_changed): New method. + * tui/tui-hooks.c (tui_redisplay_source): Remove. + (tui_attach_detach_observers): Update. + * tui/tui-data.h (struct tui_source_window): Make constructor not + inline. Add destructor. + (struct tui_source_window) <style_changed>: New method. + <m_observable>: New member. + +2019-07-17 Tom Tromey <tom@tromey.com> + + * tui/tui-data.c (tui_clear_source_windows_detail): Fix typo. + * tui/tui-win.c (tui_resize_all): Fix typo. + +2019-07-17 Tom Tromey <tom@tromey.com> + + * tui/tui-wingeneral.h (tui_refresh_all): Update. + * tui/tui-wingeneral.c (make_all_visible): Use foreach. + (tui_refresh_all): Remove "list" parameter. Use foreach. + * tui/tui-win.c (window_name_completer): Use foreach. + (tui_refresh_all_win, tui_rehighlight_all, tui_all_windows_info) + (update_tab_width): Likewise. + * tui/tui-layout.c (show_layout): Update. + * tui/tui-data.h (class tui_window_iterator): New. + (struct all_tui_windows): New. + * tui/tui-data.c (tui_partial_win_by_name): Use foreach. + +2019-07-17 Tom Tromey <tom@tromey.com> + + * tui/tui-regs.c (tui_reg_next, tui_reg_prev): Add "current_group" + parameter. Don't reference globals. + (tui_reg_command): Update. + +2019-07-17 Tom Tromey <tom@tromey.com> + + * tui/tui-regs.c (tui_show_registers): Simplify. + +2019-07-17 Tom Tromey <tom@tromey.com> + + * tui/tui-regs.c (tui_show_registers): Update. + (tui_show_register_group): Add win_info parameter. + +2019-07-17 Tom Tromey <tom@tromey.com> + + * tui/tui-regs.c (tui_data_window::display_reg_element_at_line): + Rename from tui_display_reg_element_at_line. + (tui_data_window::display_registers_from_line): Update. + * tui/tui-data.h (struct tui_data_window) + <display_reg_element_at_line>: New method. + +2019-07-17 Tom Tromey <tom@tromey.com> + + * tui/tui-regs.h (tui_display_registers_from) + (tui_display_registers_from_line): Don't declare. + * tui/tui-windata.c (tui_data_window::display_all_data) + (tui_data_window::refresh_all) + (tui_data_window::do_scroll_vertical): Update. + * tui/tui-regs.c (tui_data_window::display_registers_from): Rename + from tui_display_registers_from. + (tui_display_reg_element_at_line): Update. + (tui_data_window::display_registers_from_line): Rename from + tui_display_registers_from_line. + * tui/tui-data.h (struct tui_data_window) <display_registers_from, + display_registers_from_line>: New methods. + +2019-07-17 Tom Tromey <tom@tromey.com> + + * tui/tui-windata.h (tui_erase_data_content): Don't declare. + * tui/tui-windata.c (tui_data_window::erase_data_content): Rename + from tui_erase_data_content. + (tui_data_window::display_all_data) + (tui_data_window::refresh_all) + (tui_data_window::do_scroll_vertical): Update. + * tui/tui-regs.c (tui_show_registers): Update. + * tui/tui-data.h (struct tui_data_window) <erase_data_content>: + New method. + +2019-07-17 Tom Tromey <tom@tromey.com> + + * tui/tui-windata.h (tui_delete_data_content_windows): Don't + declare. + * tui/tui-windata.c + (tui_data_window::delete_data_content_windows): Rename from + tui_delete_data_content_windows. + (tui_data_window::display_all_data) + (tui_data_window::do_scroll_vertical): Update. + * tui/tui-data.h (struct tui_data_window) + <delete_data_content_windows>: New method. + +2019-07-17 Tom Tromey <tom@tromey.com> + + * tui/tui-windata.h (tui_refresh_data_win): Don't declare. + * tui/tui-regs.h (tui_first_reg_element_inline): Don't declare. + +2019-07-17 Tom Tromey <tom@tromey.com> + + * tui/tui-windata.h (tui_display_all_data): Don't declare. + * tui/tui-windata.c (tui_data_window::display_all_data): Rename + from tui_display_all_data. + * tui/tui-win.c + (tui_data_window::do_make_visible_with_new_height): Update. + * tui/tui-regs.c (tui_show_registers): Update. + * tui/tui-layout.c (tui_set_layout): Update. + * tui/tui-data.h (struct tui_data_window) <display_all_data>: New + method. + +2019-07-17 Tom Tromey <tom@tromey.com> + + * tui/tui-windata.h (tui_display_data_from): Don't declare. + * tui/tui-windata.c (tui_display_data_from): Remove. + (tui_data_window::refresh_all): Update. + +2019-07-17 Tom Tromey <tom@tromey.com> + + * tui/tui-windata.h (tui_display_data_from_line): Don't declare. + * tui/tui-windata.c (tui_display_data_from_line): Remove. + (tui_display_data_from, tui_data_window::do_scroll_vertical): Call + tui_display_registers_from_line. + * tui/tui-regs.h (tui_display_registers_from_line): Update. + * tui/tui-regs.c (tui_display_registers_from_line): Remove + "force_display" parameter. + +2019-07-17 Tom Tromey <tom@tromey.com> + + * tui/tui-regs.h (tui_first_reg_element_no_inline): Don't + declare. + * tui/tui-regs.c (tui_data_window::first_reg_element_no_inline): + Rename from tui_first_reg_element_no_inline. + (tui_display_reg_element_at_line) + (tui_display_registers_from_line): Update. + * tui/tui-data.h (struct tui_data_window) + <first_reg_element_no_inline>: New method. + +2019-07-17 Tom Tromey <tom@tromey.com> + + * tui/tui-windata.c (tui_display_data_from) + (tui_data_window::do_scroll_vertical): Update. + * tui/tui-regs.h (tui_line_from_reg_element_no): Don't declare. + * tui/tui-regs.c (tui_data_window::line_from_reg_element_no): + Rename from tui_line_from_reg_element_no. + (tui_display_registers_from_line): Update. + * tui/tui-data.h (struct tui_data_window) + <line_from_reg_element_no>: New method. + +2019-07-17 Tom Tromey <tom@tromey.com> + + * tui/tui-regs.h (tui_last_regs_line_no): Don't declare. + * tui/tui-regs.c (tui_data_window::last_regs_line_no): Rename from + tui_last_regs_line_no. + (tui_display_reg_element_at_line) + (tui_display_registers_from_line): Update. + * tui/tui-data.h (struct tui_data_window) <last_regs_line_no>: New + method. + +2019-07-17 Tom Tromey <tom@tromey.com> + + PR tui/24722: + * tui/tui-winsource.h (tui_update_all_breakpoint_info) + (tui_update_breakpoint_info): Add "being_deleted" parameter. + * tui/tui-winsource.c (tui_update_source_window_as_is): Update. + (tui_update_all_breakpoint_info): Add "being_deleted" parameter. + (tui_update_breakpoint_info): Likewise. + * tui/tui-hooks.c (tui_event_create_breakpoint) + (tui_event_delete_breakpoint, tui_event_modify_breakpoint): + Update. + +2019-07-17 Tom Tromey <tom@tromey.com> + + * tui/tui-stack.c (tui_show_frame_info): Consolidate "if"s. + +2019-07-17 Tom Tromey <tom@tromey.com> + + * tui/tui-winsource.c (tui_update_source_window_as_is) + (tui_update_source_windows_with_addr): Update. + * tui/tui-source.h (tui_set_source_content) + (tui_show_symtab_source): Add "win_info" parameter. + * tui/tui-source.c (tui_set_source_content): Add "win_info" + parameter. + (tui_show_symtab_source): Likewise. + +2019-07-17 Tom Tromey <tom@tromey.com> + + * tui/tui-wingeneral.c + (tui_check_and_display_highlight_if_needed): Check can_highlight. + +2019-07-17 Tom Tromey <tom@tromey.com> + + * tui/tui-data.h (struct tui_win_info) <can_scroll>: New method. + (struct tui_cmd_window) <can_scroll>: New method. + * tui/tui-command.c (tui_dispatch_ctrl_char): Use can_scroll + method. + +2019-07-17 Tom Tromey <tromey@adacore.com> + + * ui-out.h (class ui_out) <field_signed, field_fmt_signed, + do_field_signed>: Rename. Change type of "value". + * ui-out.c (ui_out::field_signed): Rename from field_int. + Change type of "value". + (ui_out::field_fmt_signed): Rename from field_fmt_int. Change + type of "value". + * tui/tui-out.h (class tui_ui_out) <do_field_signed>: Rename from + do_field_int. Change type of "value". + * tui/tui-out.c (tui_ui_out::do_field_signed): Rename from + do_field_int. Change type of "value". + * tracepoint.c (trace_status_mi, tfind_1) + (print_one_static_tracepoint_marker): Update. + * thread.c (print_thread_info_1, print_selected_thread_frame): + Update. + * stack.c (print_frame, print_frame_info): Update. + * spu-tdep.c (info_spu_signal_command, info_spu_dma_cmdlist): + Update. + * source.c (print_source_lines_base): Update. + * skip.c (info_skip_command): Update. + * record-btrace.c (btrace_ui_out_decode_error) + (btrace_call_history_src_line): Update. + * python/py-framefilter.c (py_print_single_arg, py_print_frame): + Update. + * progspace.c (print_program_space): Update. + * mi/mi-symbol-cmds.c (mi_cmd_symbol_list_lines): Update. + * mi/mi-out.h (class mi_ui_out) <do_field_signed>: Rename from + do_field_int. Change type of "value". + * mi/mi-out.c (mi_ui_out::do_table_begin) + (mi_ui_out::do_table_header): Update. + (mi_ui_out::do_field_signed): Rename from do_field_int. Change + type of "value". + * mi/mi-main.c (mi_cmd_thread_list_ids, print_one_inferior) + (mi_cmd_data_list_changed_registers, output_register) + (mi_cmd_data_read_memory, mi_load_progress) + (mi_cmd_trace_frame_collected): Update. + * mi/mi-interp.c (mi_on_normal_stop_1, mi_output_solib_attribs): + Update. + * mi/mi-cmd-var.c (print_varobj, mi_cmd_var_create) + (mi_cmd_var_delete, mi_cmd_var_info_num_children) + (mi_cmd_var_list_children, varobj_update_one): Update. + * mi/mi-cmd-stack.c (mi_cmd_stack_info_depth) + (mi_cmd_stack_list_args, list_arg_or_local): Update. + * mi/mi-cmd-file.c (mi_cmd_file_list_exec_source_file): Update. + * inferior.c (print_inferior): Update. + * gdb_bfd.c (print_one_bfd): Update. + * disasm.c (gdb_pretty_print_disassembler::pretty_print_insn): + Update. + * darwin-nat-info.c (darwin_debug_regions_recurse): Update. + * cli-out.h (class cli_ui_out) <do_field_signed>: Rename from + do_field_int. Change type of "value". + * cli-out.c (cli_ui_out::do_field_signed): Rename from + do_field_int. Change type of "value". + * breakpoint.c (watchpoint_check, print_breakpoint_location) + (print_one_breakpoint_location, print_it_catch_fork) + (print_one_catch_fork, print_it_catch_vfork) + (print_one_catch_vfork, print_it_catch_solib) + (print_it_catch_exec, print_it_ranged_breakpoint) + (print_mention_watchpoint, print_mention_masked_watchpoint) + (bkpt_print_it, update_static_tracepoint): Update. + * break-catch-throw.c (print_it_exception_catchpoint): Update. + * break-catch-syscall.c (print_it_catch_syscall): Update. + * ada-tasks.c (print_ada_task_info): Update. + * ada-lang.c (print_it_exception, print_mention_exception): + Update. + +2019-07-17 Andrew Burgess <andrew.burgess@embecosm.com> + + PR breakpoints/24541 + * gdbarch.c: Regenerate. + * gdbarch.h: Regenerate. + * gdbarch.sh: Adjust return type and parameter types for + 'stap_adjust_register'. + (i386_stap_adjust_register): Adjust signature and return new + register name. + * stap-probe.c (stap_parse_register_operand): Adjust use of + 'gdbarch_stap_adjust_register'. + +2019-07-17 Tom Tromey <tromey@adacore.com> + + * s390-linux-nat.c (s390_watch_area): Remove typedef. Don't + declare VEC. + (struct s390_debug_reg_state) <watch_areas, break_areas>: Now + std::vector. + (struct s390_process_info): Add initializers. + (s390_add_process): Use new. + (s390_linux_nat_target::low_forget_process): Use delete. + (s390_linux_nat_target::low_new_fork) + (s390_linux_nat_target::stopped_by_watchpoint) + (s390_linux_nat_target::low_prepare_to_resume) + (s390_linux_nat_target::insert_watchpoint) + (s390_linux_nat_target::insert_hw_breakpoint) + (s390_linux_nat_target::remove_watchpoint) + (s390_linux_nat_target::remove_hw_breakpoint): Update. + +2019-07-16 John Baldwin <jhb@FreeBSD.org> + + * aarch64-fbsd-nat.c: Include regcache.h. + (getregs_supplies, getfpregs_supplies): Remove unused gdbarch + argument. + (aarch64_fbsd_nat_target::fetch_registers) + (aarch64_fbsd_nat_target::store_registers): Remove gdbarch + variable. + * arm-fbsd-nat.c, riscv-fbsd-nat.c: Likewise. + +2019-07-16 John Baldwin <jhb@FreeBSD.org> + + * fbsd-nat.c: Include gdbarch.h. + +2019-07-15 Tom Tromey <tromey@adacore.com> + + * mi/mi-out.c (mi_ui_out::do_field_int): Use plongest. + +2019-07-15 Tom Tromey <tromey@adacore.com> + + * mi/mi-out.h (class mi_ui_out) <do_field_unsigned>: Declare. + * mi/mi-out.c (mi_ui_out::do_field_unsigned): New method. + * cli-out.h (class cli_ui_out) <do_field_unsigned>: Declare. + * cli-out.c (cli_ui_out::do_field_int): New method. + * ui-out.c (ui_out::field_unsigned): New method. + * symfile.c (generic_load): Use field_unsigned. + (print_transfer_performance): Likewise. + * record-btrace.c (ui_out_field_uint): Remove. + (btrace_call_history_insn_range, btrace_call_history): Use + field_unsigned. + * disasm.c (gdb_pretty_print_disassembler::pretty_print_insn): Use + field_unsigned. + * ui-out.h (class ui_out) <field_unsigned>: New method. + <do_field_unsigned>: Likewise. + +2019-07-15 Tom Tromey <tromey@adacore.com> + + * mi/mi-main.c (list_available_thread_groups): Use field_string. + * mi/mi-interp.c (mi_memory_changed): Use field_string. + * target.c (flash_erase_command): Use field_string. + * infrun.c (print_signal_received_reason): Use field_string. + * i386-tdep.c (i386_mpx_print_bounds): Use field_string. + * breakpoint.c (maybe_print_thread_hit_breakpoint): Use + field_string. + * ada-tasks.c (print_ada_task_info): Use field_string. + +2019-07-15 Tom Tromey <tromey@adacore.com> + + * target.c (flash_erase_command): Use field_core_addr. + * symfile.c (generic_load): Use field_core_addr. + * sparc64-linux-tdep.c (sparc64_linux_handle_segmentation_fault): + Use field_core_addr. + * i386-linux-tdep.c (i386_linux_handle_segmentation_fault): Use + field_core_addr. + +2019-07-12 Andrew Burgess <andrew.burgess@embecosm.com> + + * dwarf2loc.c (dwarf2_evaluate_property): Sign extend property + value if its desired type is smaller than a CORE_ADDR and signed. + +2019-07-12 Andrew Burgess <andrew.burgess@embecosm.com> + + * dwarf2loc.c (dwarf2_evaluate_property): Update to take account + of changes to field names, and use new is_reference field to + decide if a property is a reference or not. + * dwarf2loc.h (struct dwarf2_locexpr_baton): Add 'is_reference' + field. + (struct dwarf2_property_baton): Update header comment, rename + 'referenced_type' to 'property_type' and update comments. + * dwarf2read.c (attr_to_dynamic_prop): Add extra parameter to hold + default property type, store in property baton, update to take + accound of renamed field. + (read_func_scope): Update call to attr_to_dynamic_prop. + (read_array_type): Likewise. + (dwarf2_per_cu_addr_sized_int_type): New function. + (read_subrange_index_type): Move type finding code to + dwarf2_per_cu_addr_sized_int_type. + (read_subrange_type): Update calls to attr_to_dynamic_prop. + (dwarf2_per_cu_addr_type): New function. + (set_die_type): Update calls to attr_to_dynamic_prop. + +2019-07-12 Andrew Burgess <andrew.burgess@embecosm.com> + + * dwarf2read.c (read_subrange_index_type): New function. + (read_subrange_type): Move code into new function and call it. + * gdbtypes.c (create_range_type): Add some asserts. + +2019-07-12 Andrew Burgess <andrew.burgess@embecosm.com> + + * dwarf2loc.c (dwarf2_evaluate_property): Change return type, and + update return statements. + * dwarf2loc.h (dwarf2_evaluate_property): Update return type on + declaration, and update comment to match. + * gdbtypes.c (resolve_dynamic_array): Update call to + dwarf2_evaluate_property to match new return type. + +2019-07-12 Andrew Burgess <andrew.burgess@embecosm.com> + + * valarith.c (value_subscripted_rvalue): Change lowerbound + parameter type from int to LONGEST. + * value.h (value_subscripted_rvalue): Likewise in declaration. + +2019-07-11 Andrew Burgess <andrew.burgess@embecosm.com> + + * cli/cli-utils.c (info_print_command_completer): New function. + * cli/cli-utils.h: Add 'completer.h' include, and forward + declaration for 'struct cmd_list_element'. + (info_print_command_completer): Declare. + * stack.c (_initialize_stack): Add completer for 'info locals' and + 'info args'. + * symtab.c (_initialize_symtab): Add completer for 'info + variables' and 'info functions'. + * NEWS: Mention completion for additional info commands. + +2019-07-11 Andrew Burgess <andrew.burgess@embecosm.com> + + * cli/cli-utils.c (extract_info_print_args): Delete. + (extract_arg_maybe_quoted): Delete. + (info_print_options_defs): New variable. + (make_info_print_options_def_group): New function. + (extract_info_print_options): Define new function. + * cli/cli-utils.h (extract_info_print_args): Delete. + (struct info_print_options): New structure. + (extract_info_print_options): Declare new function. + * stack.c (info_locals_command): Update to use new + extract_info_print_options, also add a header comment. + (info_args_command): Likewise. + * symtab.c (info_variables_command): Likewise. + (info_functions_command): Likewise. + +2019-07-11 Andrew Burgess <andrew.burgess@embecosm.com> + + * cli/cli-option.c (parse_option): Use extract_string_maybe_quoted + to extract string arguments. + * common/common-utils.c (extract_string_maybe_quoted): New function. + * common/common-utils.h (extract_string_maybe_quoted): Declare. + +2019-07-11 Tom Tromey <tromey@adacore.com> + + * main.c (get_init_files): Use GDBINIT, not gdbinit. + * auto-load.c (file_is_auto_load_safe): Use GDBINIT, not gdbinit. + * top.h (gdbinit): Don't declare. + * cli/cli-cmds.c (init_cli_cmds): Remove, merging contents + into... + (_initialize_cli_cmds): ...here. Use GDBINIT, not gdbinit. + * top.c (gdb_init): Don't call init_cli_cmds. + (gdbinit): Remove. + * cli/cli-cmds.h (init_cli_cmds): Don't declare. + +2019-07-11 Tom Tromey <tromey@adacore.com> + + * python/py-inferior.c (add_thread_object): Don't use thread_obj + after it has been moved. + +2019-07-10 Simon Marchi <simon.marchi@polymtl.ca> + + * valops.c (value_must_coerce_to_target): Change return type to + bool. + * value.h (value_must_coerce_to_target): Likewise. + +2019-07-10 Simon Marchi <simon.marchi@efficios.com> + + * breakpoint.c (is_hardware_watchpoint): Remove + forward-declaration. + (is_masked_watchpoint): Change return type to bool. + (is_tracepoint): Likewise. + (is_breakpoint): Likewise. + (is_hardware_watchpoint): Likewise. + (is_watchpoint): Likewise. + (is_no_memory_software_watchpoint): Likewise. + (is_catchpoint): Likewise. + (breakpoint_1): Make FILTER parameter's return type bool. + is_masked_watchpoint): Change return type to bool. + (save_breakpoints): Make FILTER parameter's return type bool. + * breakpoint.h (is_breakpoint): Change return type to bool. + (is_watchpoint): Likewise. + (is_catchpoint): Likewise. + (is_tracepoint): Likewise. + +2019-07-10 Tom Tromey <tom@tromey.com> + + * defs.h: Don't include gdbarch.h. + * aarch64-ravenscar-thread.c, aarch64-tdep.c, alpha-bsd-tdep.h, + alpha-linux-tdep.c, alpha-mdebug-tdep.c, arch-utils.h, arm-tdep.h, + ax-general.c, btrace.c, buildsym-legacy.c, buildsym.h, c-lang.c, + cli/cli-decode.h, cli/cli-dump.c, cli/cli-script.h, + cli/cli-style.h, coff-pe-read.h, compile/compile-c-support.c, + compile/compile-cplus.h, compile/compile-loc2c.c, corefile.c, + cp-valprint.c, cris-linux-tdep.c, ctf.c, d-lang.c, d-namespace.c, + dcache.c, dicos-tdep.c, dictionary.c, disasm-selftests.c, + dummy-frame.c, dummy-frame.h, dwarf2-frame-tailcall.c, + dwarf2expr.c, expression.h, f-lang.c, frame-base.c, + frame-unwind.c, frv-linux-tdep.c, gdbarch-selftests.c, gdbtypes.h, + go-lang.c, hppa-nbsd-tdep.c, hppa-obsd-tdep.c, i386-dicos-tdep.c, + i386-tdep.h, ia64-vms-tdep.c, interps.h, language.c, + linux-record.c, location.h, m2-lang.c, m32r-linux-tdep.c, + mem-break.c, memattr.c, mn10300-linux-tdep.c, nios2-linux-tdep.c, + objfiles.h, opencl-lang.c, or1k-linux-tdep.c, p-lang.c, + parser-defs.h, ppc-tdep.h, probe.h, python/py-record-btrace.c, + record-btrace.c, record.h, regcache-dump.c, regcache.h, + riscv-fbsd-tdep.c, riscv-linux-tdep.c, rust-exp.y, + sh-linux-tdep.c, sh-nbsd-tdep.c, source-cache.c, + sparc-nbsd-tdep.c, sparc-obsd-tdep.c, sparc-ravenscar-thread.c, + sparc64-fbsd-tdep.c, std-regs.c, target-descriptions.h, + target-float.c, tic6x-linux-tdep.c, tilegx-linux-tdep.c, top.c, + tracefile.c, trad-frame.c, type-stack.h, ui-style.c, utils.c, + utils.h, valarith.c, valprint.c, varobj.c, x86-tdep.c, + xml-support.h, xtensa-linux-tdep.c, cli/cli-cmds.h: Update. + * s390-linux-nat.c, procfs.c, inf-ptrace.c: Likewise. + +2019-07-10 Tom Tromey <tromey@adacore.com> + + * ada-lang.h (is_ada_exception_catchpoint): Declare. + * breakpoint.c (init_ada_exception_breakpoint): Register as + bp_catchpoint. + (print_one_breakpoint_location, print_one_breakpoint): Use + is_ada_exception_catchpoint. + * ada-lang.c (class ada_catchpoint_location): Pass + bp_loc_software_breakpoint to bp_location constructor. + (is_ada_exception_catchpoint): New function. + +2019-07-10 Tom Tromey <tromey@adacore.com> + + * arm-tdep.c (arm_exidx_entry_s): Remove typedef. Don't define + VEC. + (struct arm_exidx_entry): New method operator<. + (struct arm_exidx_data) <section_maps>: Change type. + (arm_exidx_data_free): Remove. + (arm_exidx_data_key): Change type. Move lower. + (arm_exidx_new_objfile): Update. + (arm_compare_exidx_entries): Remove. + (arm_find_exidx_entry, _initialize_arm_tdep) + +2019-07-10 Tom Tromey <tromey@adacore.com> + + * solib-spu.c (ocl_program_data_key): Change type. + (append_ocl_sos, ocl_enable_break, _initialize_spu_solib): + Update. + +2019-07-10 Tom Tromey <tromey@adacore.com> + + * solib-aix.c (lm_info_aix_p): Remove typedef. Don't define VEC. + (struct solib_aix_inferior_data) <library_list>: Change type. + (solib_aix_inferior_data_handle): Change type. + (get_solib_aix_inferior_data): Update. + (solib_aix_free_library_list): Remove. + (library_list_start_library): Update. + (solib_aix_parse_libraries, solib_aix_get_library_list): Change + return type. + (solib_aix_get_library_list) + (solib_aix_solib_create_inferior_hook, solib_aix_current_sos) + (solib_aix_normal_stop_observer, _initialize_solib_aix): Update. + +2019-07-10 Tom Tromey <tromey@adacore.com> + + * solib-dsbt.c (struct dsbt_info): Add initializers. + (solib_dsbt_pspace_data): Change type. + (dsbt_pspace_data_cleanup): Remove. + (get_dsbt_info, _initialize_dsbt_solib): Update. + +2019-07-10 Tom Tromey <tromey@adacore.com> + + * spu-tdep.c (spu_overlay_data): Change type. + (spu_get_overlay_table, spu_overlay_new_objfile) + (_initialize_spu_tdep): Update. + +2019-07-10 Tom Tromey <tromey@adacore.com> + + * gdb-stabs.h (struct dbx_symfile_info): Add initializers and + destructor. + (dbx_objfile_data_key): Change type and declare later. + (DBX_SYMFILE_INFO): Rewrite. + * dbxread.c (dbx_objfile_data_key): Change type. + (dbx_symfile_init): Update. + (~dbx_symfile_info): Rename from dbx_free_symfile_info. Update. + (coffstab_build_psymtabs, elfstab_build_psymtabs) + (stabsect_build_psymtabs, _initialize_dbxread): Update. + +2019-07-10 Tom Tromey <tromey@adacore.com> + + * jit.c (jit_program_space_key): Change type. Move lower. + (get_jit_program_space_data): Update. + (jit_program_space_data_cleanup): Remove. + (jit_breakpoint_deleted, free_objfile_data, _initialize_jit): + Update. + (struct jit_program_space_data): Add initializers. + +2019-07-10 Tom Tromey <tromey@adacore.com> + + * solib-darwin.c (struct darwin_info): Add initializers. + (solib_darwin_pspace_data): Change type. + (darwin_pspace_data_cleanup): Remove. + (get_darwin_info, _initialize_darwin_solib): Update. + +2019-07-10 Tom Tromey <tromey@adacore.com> + + * remote-sim.c (struct sim_inferior_data): Add initializers, + constructor, and destructor. + (sim_inferior_data_key): Change type. Move lower. + (check_for_duplicate_sim_descriptor): Update. + (get_sim_inferior_data): Use new. Update. + (~sim_inferior_data_cleanup): Rename from + sim_inferior_data_cleanup. Simplify. + (gdbsim_close_inferior, simulator_command) + (sim_command_completer, _initialize_remote_sim): Update. + (next_pid, INITIAL_PID): Move earlier. + +2019-07-10 Tom Tromey <tromey@adacore.com> + + * python/python-internal.h (create_thread_object): Return + gdbpy_ref. + * python/py-infthread.c (create_thread_object): Return gdbpy_ref. + * python/py-inferior.c (struct threadlist_entry): Add + constructor. + <thread_obj>: Now a gdbpy_ref. + (thread_to_thread_object): Update. + (add_thread_object): Use new. + (delete_thread_object): Use delete. + (infpy_threads): Update. + (py_free_inferior): Update. Construct "inf_obj" after acquiring + GIL. + +2019-07-10 Tom Tromey <tromey@adacore.com> + + * valops.c (value_cast): Specialize error message for Ada. + +2019-07-10 Simon Marchi <simon.marchi@polymtl.ca> + + * breakpoint.c (breakpoint_1): Update doc and parameter names. + +2019-07-10 Simon Marchi <simon.marchi@polymtl.ca> + + * breakpoint.h (bpstat_explains_signal, bpstat_causes_stop, + bpstat_should_step): Return bool, adjust comments. + * breakpoint.c (bpstat_explains_signal, bpstat_causes_stop, + bpstat_should_step): Likewise. + +2019-07-10 Alan Hayward <alan.hayward@arm.com> + + * features/Makefile: Use feature target descriptions for Arm. + * features/arm/arm-core.c: Generate new file. + * features/arm/arm-fpa.c: Likewise. + * features/arm/arm-m-profile-with-fpa.xml: Likewise. + * features/arm/arm-m-profile.c: Likewise. + * features/arm/arm-vfpv2.c: Likewise. + * features/arm/arm-vfpv3.c: Likewise. + * features/arm/xscale-iwmmxt.c: Likewise. + * target-descriptions.c (maint_print_c_tdesc_cmd): Add Arm. + +2019-07-10 Alan Hayward <alan.hayward@arm.com> + + * arm-linux-nat.c (arm_linux_nat_target::read_description): Check + ptrace earlier. + +2019-07-10 Alan Hayward <alan.hayward@arm.com> + + * features/aarch64-pauth.c: Regenerate. + +2019-07-09 Simon Marchi <simon.marchi@polymtl.ca> + + * breakpoint.h (struct bpstat_what) <is_longjmp>: Change type to + bool. + (bpstat_what): Use false instead of 0. + +2019-07-09 Pedro Alves <palves@redhat.com> + + * break-catch-throw.c (is_exception_catchpoint): New. + * breakpoint.c (print_one_breakpoint_location): New parameter + 'raw_loc'. Handle it. Use + is_watchpoint/is_catchpoint/is_exception_catchpoint instead of + looking at the breakpoint's type. + (print_one_breakpoint): If handling "maint info breakpoints", also + print locations of exception catchpoints. + * breakpoint.h (is_exception_catchpoint): Declare. + +2019-07-09 Pedro Alves <palves@redhat.com> + + * break-catch-throw.c (print_one_exception_catchpoint): Skip the + "addr" field. + (allocate_location_exception_catchpoint): New. + (handle_gnu_v3_exceptions): Don't reset 'type' to bp_breakpoint. + (initialize_throw_catchpoint_ops): Install + allocate_location_exception_catchpoint as allocate_location + method. + * breakpoint.c (bpstat_what) <bp_catch>: Set action to + BPSTAT_WHAT_SINGLE if not stopping and the location's type is not + bp_loc_other. + (breakpoint_address_is_meaningful): Delete. + (bl_address_is_meaningful): New. + (breakpoint_locations_match): Adjust comment. + (bp_location_from_bp_type): New, factored out of... + (bp_location::bp_location(breakpoint *)): ... this. + (bp_location::bp_location(breakpoint *, bp_loc_type)): New, + factored out of... + (bp_location::bp_location(breakpoint *)): ... this. Reimplement. + (bp_loc_is_permanent): Use bl_address_is_meaningful instead of + breakpoint_address_is_meaningful. + (bp_locations_compare): Adjust comment. + (update_global_location_list): Use bl_address_is_meaningful + instead of breakpoint_address_is_meaningful. + * breakpoint.h (bp_location::bp_location(breakpoint *)): New + explicit. + (bp_location::bp_location(breakpoint *, bp_loc_type)): Declare. + * python/py-breakpoint.c (bppy_get_location): No longer check + whether location is null. + +2019-07-09 Pedro Alves <palves@redhat.com> + + PR c++/15468 + * breakpoint.c (print_one_breakpoint_location): Remove + single-location assert. + +2019-07-09 Tom Tromey <tom@tromey.com> + + * contrib/ari/gdb_ari.sh: Change common to gdbsupport. + * configure: Rebuild. + * configure.ac: Change common to gdbsupport. + * gdbsupport: Rename from common. + * acinclude.m4: Change common to gdbsupport. + * Makefile.in (CONFIG_SRC_SUBDIR, COMMON_SFILES) + (HFILES_NO_SRCDIR, stamp-version, ALLDEPFILES): Change common to + gdbsupport. + * aarch64-tdep.c, ada-lang.c, ada-lang.h, agent.c, alloc.c, + amd64-darwin-tdep.c, amd64-dicos-tdep.c, amd64-fbsd-nat.c, + amd64-fbsd-tdep.c, amd64-linux-nat.c, amd64-linux-tdep.c, + amd64-nbsd-tdep.c, amd64-obsd-tdep.c, amd64-sol2-tdep.c, + amd64-tdep.c, amd64-windows-tdep.c, arch-utils.c, + arch/aarch64-insn.c, arch/aarch64.c, arch/aarch64.h, arch/amd64.c, + arch/amd64.h, arch/arm-get-next-pcs.c, arch/arm-linux.c, + arch/arm.c, arch/i386.c, arch/i386.h, arch/ppc-linux-common.c, + arch/riscv.c, arch/riscv.h, arch/tic6x.c, arm-tdep.c, auto-load.c, + auxv.c, ax-gdb.c, ax-general.c, ax.h, breakpoint.c, breakpoint.h, + btrace.c, btrace.h, build-id.c, build-id.h, c-lang.h, charset.c, + charset.h, cli/cli-cmds.c, cli/cli-cmds.h, cli/cli-decode.c, + cli/cli-dump.c, cli/cli-option.h, cli/cli-script.c, + coff-pe-read.c, command.h, compile/compile-c-support.c, + compile/compile-c.h, compile/compile-cplus-symbols.c, + compile/compile-cplus-types.c, compile/compile-cplus.h, + compile/compile-loc2c.c, compile/compile.c, completer.c, + completer.h, contrib/ari/gdb_ari.sh, corefile.c, corelow.c, + cp-support.c, cp-support.h, cp-valprint.c, csky-tdep.c, ctf.c, + darwin-nat.c, debug.c, defs.h, disasm-selftests.c, disasm.c, + disasm.h, dtrace-probe.c, dwarf-index-cache.c, + dwarf-index-cache.h, dwarf-index-write.c, dwarf2-frame.c, + dwarf2expr.c, dwarf2loc.c, dwarf2read.c, event-loop.c, + event-top.c, exceptions.c, exec.c, extension.h, fbsd-nat.c, + features/aarch64-core.c, features/aarch64-fpu.c, + features/aarch64-pauth.c, features/aarch64-sve.c, + features/i386/32bit-avx.c, features/i386/32bit-avx512.c, + features/i386/32bit-core.c, features/i386/32bit-linux.c, + features/i386/32bit-mpx.c, features/i386/32bit-pkeys.c, + features/i386/32bit-segments.c, features/i386/32bit-sse.c, + features/i386/64bit-avx.c, features/i386/64bit-avx512.c, + features/i386/64bit-core.c, features/i386/64bit-linux.c, + features/i386/64bit-mpx.c, features/i386/64bit-pkeys.c, + features/i386/64bit-segments.c, features/i386/64bit-sse.c, + features/i386/x32-core.c, features/riscv/32bit-cpu.c, + features/riscv/32bit-csr.c, features/riscv/32bit-fpu.c, + features/riscv/64bit-cpu.c, features/riscv/64bit-csr.c, + features/riscv/64bit-fpu.c, features/tic6x-c6xp.c, + features/tic6x-core.c, features/tic6x-gp.c, filename-seen-cache.h, + findcmd.c, findvar.c, fork-child.c, gcore.c, gdb_bfd.c, gdb_bfd.h, + gdb_proc_service.h, gdb_regex.c, gdb_select.h, gdb_usleep.c, + gdbarch-selftests.c, gdbthread.h, gdbtypes.h, gnu-nat.c, + go32-nat.c, guile/guile.c, guile/scm-ports.c, + guile/scm-safe-call.c, guile/scm-type.c, i386-fbsd-nat.c, + i386-fbsd-tdep.c, i386-go32-tdep.c, i386-linux-nat.c, + i386-linux-tdep.c, i386-tdep.c, i387-tdep.c, + ia64-libunwind-tdep.c, ia64-linux-nat.c, inf-child.c, + inf-ptrace.c, infcall.c, infcall.h, infcmd.c, inferior-iter.h, + inferior.c, inferior.h, inflow.c, inflow.h, infrun.c, infrun.h, + inline-frame.c, language.h, linespec.c, linux-fork.c, linux-nat.c, + linux-tdep.c, linux-thread-db.c, location.c, machoread.c, + macrotab.h, main.c, maint.c, maint.h, memattr.c, memrange.h, + mi/mi-cmd-break.h, mi/mi-cmd-env.c, mi/mi-cmd-stack.c, + mi/mi-cmd-var.c, mi/mi-interp.c, mi/mi-main.c, mi/mi-parse.h, + minsyms.c, mips-linux-tdep.c, namespace.h, + nat/aarch64-linux-hw-point.c, nat/aarch64-linux-hw-point.h, + nat/aarch64-linux.c, nat/aarch64-sve-linux-ptrace.c, + nat/amd64-linux-siginfo.c, nat/fork-inferior.c, + nat/linux-btrace.c, nat/linux-btrace.h, nat/linux-namespaces.c, + nat/linux-nat.h, nat/linux-osdata.c, nat/linux-personality.c, + nat/linux-procfs.c, nat/linux-ptrace.c, nat/linux-ptrace.h, + nat/linux-waitpid.c, nat/mips-linux-watch.c, + nat/mips-linux-watch.h, nat/ppc-linux.c, nat/x86-dregs.c, + nat/x86-dregs.h, nat/x86-linux-dregs.c, nat/x86-linux.c, + nto-procfs.c, nto-tdep.c, objfile-flags.h, objfiles.c, objfiles.h, + obsd-nat.c, observable.h, osdata.c, p-valprint.c, parse.c, + parser-defs.h, ppc-linux-nat.c, printcmd.c, probe.c, proc-api.c, + procfs.c, producer.c, progspace.h, psymtab.h, + python/py-framefilter.c, python/py-inferior.c, python/py-ref.h, + python/py-type.c, python/python.c, record-btrace.c, record-full.c, + record.c, record.h, regcache-dump.c, regcache.c, regcache.h, + remote-fileio.c, remote-fileio.h, remote-sim.c, remote.c, + riscv-tdep.c, rs6000-aix-tdep.c, rust-exp.y, s12z-tdep.c, + selftest-arch.c, ser-base.c, ser-event.c, ser-pipe.c, ser-tcp.c, + ser-unix.c, skip.c, solib-aix.c, solib-target.c, solib.c, + source-cache.c, source.c, source.h, sparc-nat.c, spu-linux-nat.c, + stack.c, stap-probe.c, symfile-add-flags.h, symfile.c, symfile.h, + symtab.c, symtab.h, target-descriptions.c, target-descriptions.h, + target-memory.c, target.c, target.h, target/waitstatus.c, + target/waitstatus.h, thread-iter.h, thread.c, tilegx-tdep.c, + top.c, top.h, tracefile-tfile.c, tracefile.c, tracepoint.c, + tracepoint.h, tui/tui-io.c, ui-file.c, ui-out.h, + unittests/array-view-selftests.c, + unittests/child-path-selftests.c, unittests/cli-utils-selftests.c, + unittests/common-utils-selftests.c, + unittests/copy_bitwise-selftests.c, unittests/environ-selftests.c, + unittests/format_pieces-selftests.c, + unittests/function-view-selftests.c, + unittests/lookup_name_info-selftests.c, + unittests/memory-map-selftests.c, unittests/memrange-selftests.c, + unittests/mkdir-recursive-selftests.c, + unittests/observable-selftests.c, + unittests/offset-type-selftests.c, unittests/optional-selftests.c, + unittests/parse-connection-spec-selftests.c, + unittests/ptid-selftests.c, unittests/rsp-low-selftests.c, + unittests/scoped_fd-selftests.c, + unittests/scoped_mmap-selftests.c, + unittests/scoped_restore-selftests.c, + unittests/string_view-selftests.c, unittests/style-selftests.c, + unittests/tracepoint-selftests.c, unittests/unpack-selftests.c, + unittests/utils-selftests.c, unittests/xml-utils-selftests.c, + utils.c, utils.h, valarith.c, valops.c, valprint.c, value.c, + value.h, varobj.c, varobj.h, windows-nat.c, x86-linux-nat.c, + xml-support.c, xml-support.h, xml-tdesc.h, xstormy16-tdep.c, + xtensa-linux-nat.c, dwarf2read.h: Change common to gdbsupport. + +2019-07-09 Andrew Burgess <andrew.burgess@embecosm.com> + + * linespec.c (decode_digits_list_mode): Set explicit_line to a + bool value. + (decode_digits_ordinary): Set explicit_line field in sal. + * symtab.c (skip_prologue_sal): Don't skip prologue for a + symtab_and_line that was set on an explicit line number in + assembler code. Do always update the recorded symtab and line if + we do skip the prologue. + +2019-07-09 Andrew Burgess <andrew.burgess@embecosm.com> + + * breakpoint.c (set_breakpoint_location_function): Remove + explicit_loc parameter. + (momentary_breakpoint_from_master): Update call to + set_breakpoint_location_function. + (add_location_to_breakpoint): Likewise. + +2019-07-09 Andrew Burgess <andrew.burgess@embecosm.com> + + * riscv-tdep.c (riscv_features_from_gdbarch_info): Don't modify + required features based on default bfd type when no specific bfd + is present. + +2019-07-08 Philippe Waroquiers <philippe.waroquiers@skynet.be> + + * NEWS: Mention that GDB printf and eval commands can now print + C-style and Ada-style convenience var strings without + calling the inferior. + * printcmd.c (printf_c_string): Locally print GDB internal var + instead of transiting via the inferior. + (printf_wide_c_string): Likewise. + +2019-07-04 Alan Hayward <alan.hayward@arm.com> + + PR breakpoints/25011 + * symfile.c (symbol_file_command): Call solib_create_inferior_hook. + +2019-07-04 Tom Tromey <tom@tromey.com> + + PR tui/24724: + * tui/tui-winsource.c (tui_clear_source_content): Update. + (tui_source_window_base::set_is_exec_point_at): Fix comment. + (tui_update_breakpoint_info): Update. + (tui_set_exec_info_content): Update. + * tui/tui-source.c (tui_set_source_content_nil): Update. + * tui/tui-disasm.c (tui_set_disassem_content): Don't set + has_break. + * tui/tui-data.h (enum tui_bp_flag): New. + (tui_bp_flags): New enum flags type. + (struct tui_source_element) <break_mode>: Change type. Rename + from has_break. + (TUI_BP_ENABLED, TUI_BP_DISABLED, TUI_BP_HIT) + (TUI_BP_CONDITIONAL, TUI_BP_HARDWARE): Don't define. Now enum + constants. + * tui/tui-winsource.h: Fix comment. + +2019-07-04 Alan Hayward <alan.hayward@arm.com> + + * aarch32-linux-nat.h (VFP_REGS_SIZE): Remove define. + * aarch64-linux-nat.c (fetch_fpregs_from_thread) + (store_fpregs_to_thread) + (aarch64_linux_nat_target::read_description): Use ARM_VFP3_REGS_SIZE. + * arch/arm.h (IWMMXT_VEC_REGISTER_SIZE, ARM_CORE_REGS_SIZE) + (ARM_FP_REGS_SIZE, ARM_VFP2_REGS_SIZE, ARM_VFP3_REGS_SIZE) + (IWMMXT_REGS_SIZE): Add define. + * arm-linux-nat.c (IWMMXT_REGS_SIZE): Remove define. + (fetch_vfp_regs, store_vfp_regs) + (arm_linux_nat_target::read_description): Use ARM_VFP3_REGS_SIZE. + * arm-tdep.c (arm_register_g_packet_guesses): Use new defines. + +2019-07-04 Alan Hayward <alan.hayward@arm.com> + + * arch/arm-get-next-pcs.c (thumb_get_next_pcs_raw): Use ARM_ + defines. + * arch/arm-linux.c (arm_linux_sigreturn_next_pc_offset): Likewise. + * arch/arm.h (INT_REGISTER_SIZE) Rename from... + (ARM_INT_REGISTER_SIZE): ...to this. + (ARM_FP_REGISTER_SIZE) (ARM_VFP_REGISTER_SIZE): Add define. + * arm-linux-tdep.c (ARM_LINUX_JB_ELEMENT_SIZE) + (ARM_LINUX_SIZEOF_GREGSET, arm_linux_supply_gregset) + (arm_linux_collect_gregset, supply_nwfpe_register) + (collect_nwfpe_register, arm_linux_collect_nwfpe): Use ARM_ + defines. + * arm-linux-tdep.h (ARM_LINUX_SIZEOF_NWFPE, NWFPE_FPSR_OFFSET) + (NWFPE_FPCR_OFFSET, NWFPE_TAGS_OFFSET): Likewise + * arm-nbsd-tdep.c (ARM_NBSD_JB_ELEMENT_SIZE): Likewise. + * arm-tdep.c (arm_push_dummy_call, arm_extract_return_value) + (arm_return_in_memory, arm_store_return_value) + (arm_get_longjmp_target, arm_register_g_packet_guesses) + (arm_record_ld_st_multiple): Likewise. + * arm-tdep.h (FP_REGISTER_SIZE, VFP_REGISTER_SIZE): Remove. + * arm-wince-tdep.c (ARM_WINCE_JB_ELEMENT_SIZE): Use ARM_ defines. + +2019-07-04 Alan Hayward <alan.hayward@arm.com> + + * aarch64-linux-tdep.c (aarch64_linux_init_abi): Use + AARCH64_DISPLACED_MODIFIED_INSNS. + * aarch64-tdep.c (struct aarch64_displaced_step_data) + (aarch64_displaced_step_copy_insn): Likewise. + * aarch64-tdep.h (DISPLACED_MODIFIED_INSNS): Rename from.. + (AARCH64_DISPLACED_MODIFIED_INSNS): ...to this. + * arm-linux-tdep.c (arm_linux_cleanup_svc): Use + ARM_DISPLACED_MODIFIED_INSNS. + * arm-tdep.c (arm_gdbarch_init): Likewise. + * arm-tdep.h (DISPLACED_MODIFIED_INSNS): Rename from.. + (ARM_DISPLACED_MODIFIED_INSNS): ...to this. + (struct arm_displaced_step_closure): Use + ARM_DISPLACED_MODIFIED_INSNS. + +2019-07-04 Alan Hayward <alan.hayward@arm.com> + + * features/Makefile: Remove unused xml files. + * features/aarch64.xml: Remove. + * features/i386/amd64-avx-avx512-linux.xml: Remove. + * features/i386/amd64-avx-avx512.xml: Remove. + * features/i386/amd64-avx-linux.xml: Remove. + * features/i386/amd64-avx-mpx-avx512-pku-linux.xml: Remove. + * features/i386/amd64-avx-mpx-avx512-pku.xml: Remove. + * features/i386/amd64-avx-mpx-linux.xml: Remove. + * features/i386/amd64-avx-mpx.xml: Remove. + * features/i386/amd64-avx.xml: Remove. + * features/i386/amd64-linux.xml: Remove. + * features/i386/amd64-mpx-linux.xml: Remove. + * features/i386/amd64-mpx.xml: Remove. + * features/i386/amd64.xml: Remove. + * features/i386/i386-avx-avx512-linux.xml: Remove. + * features/i386/i386-avx-avx512.xml: Remove. + * features/i386/i386-avx-linux.xml: Remove. + * features/i386/i386-avx-mpx-avx512-pku-linux.xml: Remove. + * features/i386/i386-avx-mpx-avx512-pku.xml: Remove. + * features/i386/i386-avx-mpx-linux.xml: Remove. + * features/i386/i386-avx-mpx.xml: Remove. + * features/i386/i386-avx.xml: Remove. + * features/i386/i386-linux.xml: Remove. + * features/i386/i386-mmx-linux.xml: Remove. + * features/i386/i386-mmx.xml: Remove. + * features/i386/i386-mpx-linux.xml: Remove. + * features/i386/i386-mpx.xml: Remove. + * features/i386/i386.xml: Remove. + * features/i386/x32-avx-avx512-linux.xml: Remove. + * features/i386/x32-avx-linux.xml: Remove. + * features/i386/x32-linux.xml: Remove. + +2019-07-04 Alan Hayward <alan.hayward@arm.com> + + * regformats/aarch64.dat: Remove. + * regformats/i386/amd64-avx-avx512-linux.dat: Remove. + * regformats/i386/amd64-avx-linux.dat: Remove. + * regformats/i386/amd64-avx-mpx-avx512-pku-linux.dat: Remove. + * regformats/i386/amd64-avx-mpx-linux.dat: Remove. + * regformats/i386/amd64-linux.dat: Remove. + * regformats/i386/amd64-mpx-linux.dat: Remove. + * regformats/i386/amd64.dat: Remove. + * regformats/i386/i386-avx-avx512-linux.dat: Remove. + * regformats/i386/i386-avx-linux.dat: Remove. + * regformats/i386/i386-avx-mpx-avx512-pku-linux.dat: Remove. + * regformats/i386/i386-avx-mpx-linux.dat: Remove. + * regformats/i386/i386-linux.dat: Remove. + * regformats/i386/i386-mmx-linux.dat: Remove. + * regformats/i386/i386-mpx-linux.dat: Remove. + * regformats/i386/i386.dat: Remove. + * regformats/i386/x32-avx-avx512-linux.dat: Remove. + * regformats/i386/x32-avx-linux.dat: Remove. + * regformats/i386/x32-linux.dat: Remove. + +2019-07-04 Alan Hayward <alan.hayward@arm.com> + + * aarch64-tdep.c: Remove xml self tests. + * amd64-linux-tdep.c: Likewise. + * amd64-tdep.c: Likewise. + * i386-linux-tdep.c: Likewise. + * i386-tdep.c: Likewise. + +2019-07-03 Pedro Alves <palves@redhat.com> + + PR cli/24732 + * cli/cli-cmds.c (struct pipe_cmd_opts): New. + (pipe_cmd_option_defs): New. + (make_pipe_cmd_options_def_group): New. + (pipe_command): Use gdb::option::process_options. + (pipe_command_completer): New function. + (_initialize_cli_cmds): Install completer for "pipe" command. + +2019-07-03 Pedro Alves <palves@redhat.com> + + * cli/cli-option.c (union option_value) <string>: New field. + (struct option_def_and_value): Add ctor, move ctor, dtor and + use DISABLE_COPY_AND_ASSIGN. + (option_def_and_value::clear_value): New. + (parse_option, save_option_value_in_ctx, get_val_type_str) + (add_setshow_cmds_for_options): Handle var_string. + * cli-option.h (union option_def::var_address) <string>: New + field. + (struct string_option_def): New. + * maint-test-options.c (struct test_options_opts): Add default + ctor and use DISABLE_COPY_AND_ASSIGN. + <string_opt>: New field. + (test_options_opts::~test_options_opts): New. + (test_options_opts::dump): Also dump "-string". + (test_options_option_defs): Install "string. + +2019-07-03 Pedro Alves <palves@redhat.com> + + * cli/cli-option.c (parse_option) <var_enum>: Don't return an + option_value with a null enumeration. + (complete_options): Save the option values in the context. + (save_option_value_in_ctx): New, factored out from ... + (process_options): ... here. + * cli/cli-utils.c (get_ulongest): Don't advance PP until the end + of the function. + * maint-test-options.c (test_options_opts::dump): New, factored + out from ... + (maintenance_test_options_command_mode): ... here. + (maintenance_test_options_command_completion_result): Delete. + (maintenance_test_options_command_completion_text): Update + comment. + (maintenance_show_test_options_completion_result): Change + prototype. Just print + maintenance_test_options_command_completion_text. + (save_completion_result): New. + (maintenance_test_options_completer_mode): Pass options context to + complete_options, and then save a dump. + (_initialize_maint_test_options): Use add_cmd to install "maint + show test-options-completion-result". + +2019-07-03 Pedro Alves <palves@redhat.com> + + * NEWS (New commands): Mention "with" and "maint with". + * cli/cli-cmds.c (with_command_1, with_command_completer_1) + (with_command, with_command_completer): New. + (pipe_command): Adjust to new repeat_previous + interface. + (_initialize_cli_cmds): Install the "with" command and its "w" + alias. + * cli/cli-cmds.h (with_command_1, with_command_completer_1): New + declarations. + * cli/cli-setshow.c (parse_cli_var_uinteger) + (parse_cli_var_zuinteger_unlimited, do_set_command): Handle empty + argument strings for all var_types. + (get_setshow_command_value_string): New, factored out from ... + (do_show_command): ... this. + * cli/cli-setshow.h: Include <string>. + (get_setshow_command_value_string): Declare. + * command.h (repeat_previous): Now returns const char *. Adjust + comment. + * maint.c: Include "cli/cli-cmds.h". + (maintenance_with_cmd, maintenance_with_cmd_completer): New. + (_initialize_maint_cmds): Register the "maintenance with" command. + * top.c (repeat_previous): Move bits from pipe_command here: + Return the saved command line, if any; error out if there's no + command to relaunch. + +2019-07-03 Pedro Alves <palves@redhat.com> + + * NEWS (New commands): Mention "maint set/show test-settings" + instead of "maint test-settings". + * maint-test-settings.c (maintenance_test_settings_list): Delete. + (maintenance_test_settings_set_list): Rename to ... + (maintenance_set_test_settings_list): ... this. + (maintenance_test_settings_show_list): Rename to ... + (maintenance_show_test_settings_list): ... this. + (maintenance_test_settings_cmd): Delete. + (maintenance_test_settings_set_cmd): ... + (maintenance_set_test_settings_cmd): ... this. + (maintenance_test_settings_show_cmd): ... + (maintenance_show_test_settings_cmd): ... this. + (maintenance_test_settings_show_value_cmd): + (maintenance_show_test_settings_value_cmd): ... this. + (_initialize_maint_test_settings): No longer install the "maint + test-settings" prefix command. Rename "maint test-settings set" + to "maint set test-settings", and "maint test-settings show" to + "maint show test-settings". Adjust all subcommands. + +2019-07-03 Pedro Alves <palves@redhat.com> + + * maint-test-settings.c: Fix file's intro comment. Replace all + references to "test-options" with references to "test-settings", + in comments. + +2019-07-03 Pedro Alves <palves@redhat.com> + + * maint-test-settings.c (maintenance_test_settings_xxx) + (maintenance_test_settings_yyy, maintenance_test_settings_zzz): + New. + (maintenance_test_settings_enums): Use them. + (maintenance_test_settings_enum): Default to + maintenance_test_settings_xxx. + (_initialize_maint_test_settings): Initialize + MAINTENANCE_TEST_SETTINGS_FILENAME. + +2019-07-02 Simon Marchi <simon.marchi@polymtl.ca> + + * breakpoint.h (remove_breakpoints_inf): Change return type to + void, move function documentation here. + * breakpoint.c (remove_breakpoints_inf): Change return type to + void, move function documentation to header. + +2019-07-02 Pedro Alves <palves@redhat.com> + + * NEWS (Completion improvements): Mention "info threads". + * thread.c (struct info_threads_opts, info_threads_option_defs) + (make_info_threads_options_def_group): New. + (info_threads_command): Use gdb::option::process_options. + (info_threads_command_completer): New. + (_initialize_thread): Use gdb::option::build_help to build the + help text for "info threads". + +2019-07-02 Simon Marchi <simon.marchi@polymtl.ca> + + * defs.h (generic_load): Move from here... + * symfile.h (generic_load): ... to here. Rename name parameter + to args. + * symfile.c (generic_load): Add comment. + +2019-07-01 Tom Tromey <tromey@adacore.com> + + * dwarf2read.c + (dw2_debug_names_iterator::find_vec_in_debug_names): Hoist + declaration of without_params. Fix formatting. + +2019-07-01 Tom Tromey <tromey@adacore.com> + + * ada-exp.y (find_primitive_type): Update. + * ada-lang.h (ada_lookup_symbol): Update. + * ada-lang.c (ada_lookup_symbol): Remove "is_a_field_of_this" + parameter. + (ada_lookup_encoded_symbol, ada_lookup_symbol_nonlocal): Update. + +2019-06-28 Sergio Durigan Junior <sergiodj@redhat.com> + + PR breakpoints/24541 + * gdbarch.c: Regenerate. + * gdbarch.h: Regenerate. + * gdbarch.sh: Add 'stap_adjust_register'. + * i386-tdep.c: Include '<unordered_set>'. + (i386_stap_adjust_register): New function. + (i386_elf_init_abi): Register 'i386_stap_adjust_register'. + * stap-probe.c (stap_parse_register_operand): Call + 'gdbarch_stap_adjust_register'. + +2019-06-28 Sergio Durigan Junior <sergiodj@redhat.com> + + PR python/24742 + https://bugzilla.redhat.com/show_bug.cgi?id=1723564 + * python/python.c (do_start_initialization): Use 'xmalloc' + instead of 'PyMem_Malloc'. + +2019-06-28 Tom Tromey <tromey@adacore.com> + + * dwarf2read.c (partial_die_info::read): Prefer the linkage name + for Ada. + +2019-06-27 Tom Tromey <tromey@adacore.com> + + * arm-tdep.c (arm_objfile_data_key): Move lower. Change type to + objfile_key. + (arm_find_mapping_symbol, arm_record_special_symbol) + (_initialize_arm_tdep): Update. + (arm_objfile_data_free): Remove. + +2019-06-27 Tom Tromey <tromey@adacore.com> + + * cp-valprint.c (cp_print_value_fields): Pass opts, not options, + to cp_print_static_field. + +2019-06-26 Tom Tromey <tromey@adacore.com> + + * minsyms.c (lookup_minimal_symbol_solib_trampoline): Remove. + * minsyms.h (lookup_minimal_symbol_solib_trampoline): Don't + declare. + +2019-06-26 Alan Hayward <alan.hayward@arm.com> + + * features/aarch64-core.c (create_feature_aarch64_core): + Regenerate. + * features/aarch64-core.xml: Add cpsr flags. + +2019-06-26 Alan Hayward <alan.hayward@arm.com> + + * arm-tdep.c (arm_gnu_triplet_regexp): New function. + (arm_gdbarch_init): Add arm_gnu_triplet_regexp. + +2019-06-25 Simon Marchi <simon.marchi@polymtl.ca> + + * arm-tdep.c (struct arm_per_objfile) <section_maps_sorted>: New + field. + (arm_find_mapping_symbol): Sort mapping symbol vectors on first + use. + (arm_record_special_symbol): Don't insert new symbol in sorted + position, push it at the end. + +2019-06-25 Simon Marchi <simon.marchi@polymtl.ca> + + * arm-tdep.c (struct arm_mapping_symbol) (operator <): New. + (arm_mapping_symbol_s): Remove. + (DEF_VEC_O(arm_mapping_symbol_s)): Remove. + (arm_mapping_symbol_vec): New typedef. + (struct arm_per_objfile): Add constructor. + <section_maps>: Change type to + std::unique_ptr<arm_mapping_symbol_vec[]>. + (arm_compare_mapping_symbols): Remove. + (arm_find_mapping_symbol): Adjust to section_maps type change. + (arm_objfile_data_free): Call delete on arm_per_objfile. + (arm_record_special_symbol): Adjust to section_maps type change. + Allocate arm_per_objfile with new. + +2019-06-25 Philippe Waroquiers <philippe.waroquiers@skynet.be> + + * cli/cli-cmds.c (alias_command): Compare the alias prefix + with the command prefix. + +2019-06-25 Tom Tromey <tom@tromey.com> + + * tui/tui-wingeneral.c (tui_delete_win): Remove "return". + * tui/tui-data.c (~tui_gen_win_info): Remove "if". + +2019-06-25 Tom Tromey <tom@tromey.com> + + * tui/tui-layout.c (init_and_make_win): Assert on unrecognized + type. + * tui/tui-data.h (struct tui_gen_win_info): Make constructor + protected. + +2019-06-25 Tom Tromey <tom@tromey.com> + + * tui/tui-winsource.c + (tui_source_window_base::set_is_exec_point_at): Add check against + LOA_ADDRESS. + +2019-06-25 Tom Tromey <tom@tromey.com> + + * tui/tui-source.c (tui_set_source_content): Don't check before + xfree. + * tui/tui-disasm.c (tui_disassemble): Don't check before xfree. + +2019-06-25 Tom Tromey <tom@tromey.com> + + * tui/tui-winsource.h (tui_update_source_window_as_is) + (tui_alloc_source_buffer, tui_line_is_displayed) + (tui_addr_is_displayed): Change type of win_info. + * tui/tui-winsource.c (tui_update_source_window_as_is) + (tui_clear_source_content, tui_show_source_line) + (tui_show_source_content, tui_source_window_base::refill) + (tui_source_window_base::set_is_exec_point_at) + (tui_source_window_base::set_is_exec_point_at) + (tui_update_breakpoint_info, tui_set_exec_info_content): Update. + (tui_alloc_source_buffer, tui_line_is_displayed) + (tui_addr_is_displayed): Change type of win_info. Update. + * tui/tui-win.c (tui_resize_all, tui_adjust_win_heights) + (tui_source_window_base::do_make_visible_with_new_height): + Update. + * tui/tui-source.c (tui_set_source_content) + (tui_set_source_content_nil) + (tui_source_window::do_scroll_vertical): Update. + * tui/tui-layout.c (show_layout): Update. + * tui/tui-disasm.c (tui_set_disassem_content) + (tui_disasm_window::do_scroll_vertical): Update. + * tui/tui-data.h (tui_win_content): Remove. + (struct tui_gen_win_info) <content, content_size>: Remove. + (struct tui_source_element): Add initializers and destructor. + (union tui_which_element, struct tui_win_element): Remove. + (struct tui_source_window_base) <content>: New field. + (struct tui_data_window): Remove destructor. + (tui_alloc_content, tui_free_win_content) + (tui_free_all_source_wins_content): Don't declare. + * tui/tui-data.c (tui_initialize_static_data): Update. + (init_content_element, tui_alloc_content): Remove. + (~tui_gen_win_info): Update. + (~tui_data_window, tui_free_all_source_wins_content) + (tui_free_win_content, free_content, free_content_elements): + Remove. + +2019-06-25 Tom Tromey <tom@tromey.com> + + * tui/tui-winsource.h (tui_clear_source_content) + (tui_erase_source_content, tui_show_source_content): Change type + of win_info. + * tui/tui-winsource.c (tui_clear_source_content) + (tui_erase_source_content, tui_show_source_content): Change type + of win_info. + * tui/tui-win.c (tui_resize_all, tui_adjust_win_heights): Update. + * tui/tui-source.h (tui_set_source_content_nil): Change type of + win_info. + * tui/tui-source.c (tui_set_source_content_nil): Change type of + win_info. + * tui/tui-layout.c (show_source_or_disasm_and_command): Update. + +2019-06-25 Tom Tromey <tom@tromey.com> + + * tui/tui-winsource.c (tui_clear_source_content) + (tui_source_window_base::set_is_exec_point_at): Update. + * tui/tui-source.c (tui_set_source_content_nil): Update. + * tui/tui-data.h (struct tui_source_element) <is_exec_point>: Now + a bool. + * tui/tui-data.c (init_content_element): Update. + +2019-06-25 Tom Tromey <tom@tromey.com> + + * tui/tui-wingeneral.c (tui_gen_win_info::make_visible): Update. + * tui/tui-win.c (make_invisible_and_set_new_height): Update. + * tui/tui-layout.c (init_and_make_win): Update. + * tui/tui.h (enum tui_win_type): Update. + * tui/tui-data.h (tui_win_is_auxiliary): Rename from + tui_win_is_auxillary. + * tui/tui-data.c (tui_win_is_auxiliary): Rename from + tui_win_is_auxillary. + +2019-06-25 Tom Tromey <tom@tromey.com> + + * tui/tui-wingeneral.c (tui_data_window::refresh_window): Update. + * tui/tui-windata.c (tui_data_window::first_data_item_displayed) + (tui_delete_data_content_windows, tui_display_all_data) + (tui_data_window::do_scroll_vertical, tui_display_data_from): + Update. + * tui/tui-win.c (tui_data_window::set_new_height): Simplify. + * tui/tui-regs.c (tui_last_regs_line_no) + (tui_line_from_reg_element_no, tui_first_reg_element_no_inline) + (tui_show_registers): Update. + (tui_show_register_group): Return void. Update. + (tui_display_registers_from, tui_display_reg_element_at_line) + (tui_display_registers_from_line, tui_check_register_values): + Update. + * tui/tui-data.h (union tui_which_element) <data_window>: Remove + member. + (struct tui_data_window) <regs_content>: Now a std::vector. + <regs_content_count>: Remove. + (tui_add_content_elements, tui_free_data_content): Don't declare. + * tui/tui-data.c (tui_data_window::clear_detail): Update. + (init_content_element): Remove DATA_WIN case. Add assert. + (tui_add_content_elements): Remove. + (tui_data_window): Update. + (tui_free_data_content): Remove. + (free_content_elements): Remove DATA_WIN case. + +2019-06-25 Tom Tromey <tom@tromey.com> + + * tui/tui-data.c (tui_data_item_window): Update. + * tui/tui-windata.h (tui_check_data_values): Don't declare. + * tui/tui-windata.c (tui_display_all_data) + (tui_display_data_from_line): Update. + (tui_check_data_values): Remove. + * tui/tui-regs.c (tui_show_register_group) + (tui_display_reg_element_at_line): Update. + * tui/tui-hooks.c (tui_register_changed) + (tui_refresh_frame_and_register_information): Call + tui_check_register_values. + * tui/tui-data.h (struct tui_data_window) <data_content, + data_content_count, data_type>: Remove. + (enum tui_data_type): Remove. + + * tui/tui-data.c (tui_data_window::clear_detail) + (~tui_data_window): Update. + +2019-06-25 Tom Tromey <tom@tromey.com> + + * tui/tui-windata.h (tui_first_data_item_displayed): Don't + declare. + * tui/tui-windata.c (tui_data_window::first_data_item_displayed): + Rename from tui_first_data_item_displayed. Update. + (tui_data_window::refresh_all) + (tui_data_window::do_scroll_vertical): Update. + * tui/tui-data.h (struct tui_data_window) + <first_data_item_displayed>: Declare new method. + +2019-06-25 Tom Tromey <tom@tromey.com> + + * tui/tui-data.h (tui_init_generic_part): Don't declare. + * tui/tui-data.c (tui_init_generic_part): Remove, moving + contents... + (tui_initialize_static_data): ...here. + +2019-06-25 Tom Tromey <tom@tromey.com> + + * tui/tui-regs.c (tui_show_registers, tui_show_register_group) + (tui_display_registers_from, tui_check_register_values): Update. + (tui_display_register): Remove win_info parameter; update. + (tui_get_register): Change type of parameters. + * tui/tui-data.h (struct tui_data_element): Remove. + (union tui_which_element) <data>: Remove. + <data_window>: Change type. + (struct tui_data_item_window): New. + * tui/tui-data.c (init_content_element): Remove DATA_ITEM_WIN + case. Add assert. + (~tui_data_item_window): New destructor. + (free_content_elements): Remove DATA_ITEM_WIN case. + +2019-06-25 Tom Tromey <tom@tromey.com> + + * tui/tui.h (enum tui_win_type) <MAX_WINDOWS, UNDEFINED_WIN>: + Remove. + +2019-06-25 Tom Tromey <tom@tromey.com> + + * tui/tui-data.h (struct tui_command_element): Remove. + (union tui_which_element) <command>: Remove. + * tui/tui-data.c (init_content_element): Remove CMD_WIN case. Add + assert. + (free_content_elements): Remove CMD_WIN case. + +2019-06-25 Tom Tromey <tom@tromey.com> + + * tui/tui-layout.c (tui_set_layout): Update. + * tui/tui-data.h (struct tui_layout_def) <split>: Remove. + * tui/tui-data.c (layout_def): Update. + +2019-06-25 Tom Tromey <tom@tromey.com> + + * tui/tui-wingeneral.c (tui_refresh_all): Update. + * tui/tui-win.c (tui_resize_all, tui_adjust_win_heights) + (tui_source_window_base::set_new_height): Update. + * tui/tui-stack.c (tui_make_status_line): Change parameter type. + Update. + (tui_set_locator_fullname, tui_set_locator_info) + (tui_show_frame_info): Update. + * tui/tui-source.c (tui_set_source_content) + (tui_source_is_displayed): Update. + * tui/tui-layout.c (show_source_disasm_command, show_data) + (show_source_or_disasm_and_command): Update. + * tui/tui-disasm.c (tui_set_disassem_content) + (tui_get_begin_asm_address): Update. + * tui/tui-data.h (struct tui_locator_element): Remove. + (union tui_which_element) <locator>: Remove. + (struct tui_locator_window): New. + (tui_locator_win_info_ptr): Change return type. + * tui/tui-data.c (_locator): Change type. + (tui_locator_win_info_ptr): Change return type. + (init_content_element): Remove LOCATOR_WIN case. Add assert. + (tui_alloc_content): Add assert. + +2019-06-25 Tom Tromey <tom@tromey.com> + + * tui/tui-winsource.c + (tui_exec_info_window::maybe_allocate_content): New method. + (tui_set_exec_info_content, tui_show_exec_info_content): Update. + * tui/tui-layout.c (init_and_make_win): Add EXEC_INFO_WIN case. + (make_source_or_disasm_window): Add cast. + * tui/tui-data.h (union tui_which_element) <simple_string>: + Remove. + (struct tui_source_info): New. + (struct tui_source_window_base) <execution_info>: Change type. + * tui/tui-data.c (init_content_element): Remove EXEC_INFO_WIN + case, and add assert. + (tui_alloc_content): Add assert. + +2019-06-25 Tom Tromey <tom@tromey.com> + + * tui/tui-data.h (tui_alloc_win_info): Don't declare. + * tui/tui-layout.c (init_and_make_win): Use "new" directly. + * tui/tui-data.c (tui_alloc_win_info): Remove. + +2019-06-25 Tom Tromey <tom@tromey.com> + + * tui/tui-win.c (tui_set_win_focus_to): Don't check window type. + * tui/tui-wingeneral.c (tui_unhighlight_win): Check + can_highlight. + +2019-06-25 Tom Tromey <tom@tromey.com> + + * tui/tui-win.c (tui_source_window_base::update_tab_width): Call + make_visible_with_new_height method. + (tui_win_info::make_visible_with_new_height): New method. + (tui_source_window_base::do_make_visible_with_new_height) + (tui_data_window::do_make_visible_with_new_height) + (tui_cmd_window::do_make_visible_with_new_height): New methods. + (make_visible_with_new_height): Remove. + (tui_resize_all, tui_adjust_win_heights): Use + make_visible_with_new_height method. + * tui/tui-data.h (struct tui_win_info) + <do_make_visible_with_new_height, make_visible_with_new_height>: + New methods. + (struct tui_source_window_base, struct tui_data_window) + (struct tui_cmd_window) <do_make_visible_with_new_height>: New + methods. + +2019-06-25 Tom Tromey <tom@tromey.com> + + * tui/tui-win.c (tui_source_window_base::update_tab_width): New + method. + (update_tab_width): Call update_tab_width method. + * tui/tui-data.h (struct tui_win_info) + (struct tui_source_window_base) <update_tab_width>: New methods. + +2019-06-25 Tom Tromey <tom@tromey.com> + + * tui/tui-wingeneral.h (tui_make_window): Change type of "box_it" + parameter. + * tui/tui-wingeneral.c (tui_make_window): Change type of "box_it" + parameter. + (tui_gen_win_info::make_visible): Update. + * tui/tui-layout.c (init_and_make_win): Change type of "box_it" + parameter. + * tui/tui-data.h (enum tui_box): New enum. + (BOX_WINDOW, DONT_BOX_WINDOW): Remove defines. + +2019-06-25 Tom Tromey <tom@tromey.com> + + * tui/tui-layout.c (make_source_or_disasm_window): Always use + init_and_make_win for EXEC_INFO_WIN. + * tui/tui-data.h (struct tui_gen_win_info) <~tui_gen_win_info>: No + longer inline. + (struct tui_win_info) <~tui_win_info>: Inline. + (tui_source_exec_info_win_ptr, tui_disassem_exec_info_win_ptr): + Don't declare. + * tui/tui-data.c (source_win, disasm_win): Remove globals. + (tui_source_exec_info_win_ptr, tui_disassem_exec_info_win_ptr): + Remove. + (tui_initialize_static_data): Update. + (~tui_gen_win_info): Handle more cleanup here. + (~tui_source_window_base): Delete "execution_info". + (~tui_win_info): Move code to ~tui_gen_win_info; remove. + +2019-06-25 Tom Tromey <tom@tromey.com> + + * tui/tui-layout.c (make_command_window): Don't set + can_highlight. + (show_source_disasm_command): Call the reset method. + (show_data): Don't set can_highlight. Call the reset method. + (tui_gen_win_info::reset): Rename from init_gen_win_info + (init_and_make_win): Simplify. Return tui_gen_win_info. + (show_source_or_disasm_and_command): Call the reset method. + * tui/tui-data.h (struct tui_gen_win_info) <reset>: New method. + (struct tui_cmd_window): Set can_highlight. + +2019-06-25 Tom Tromey <tom@tromey.com> + + * tui/tui-wingeneral.c (tui_gen_win_info::make_visible): Rename + from make_visible. + (tui_make_visible, tui_make_invisible): Rewrite. + (tui_win_info::make_visible): Remove. + (tui_source_window_base::make_visible): Update. + * tui/tui-data.h (struct tui_gen_win_info) <make_visible>: New + method. Moved from... + (struct tui_win_info) <make_visible>: ...here. + +2019-06-25 Tom Tromey <tom@tromey.com> + + * tui/tui-winsource.c + (tui_source_window_base::do_scroll_horizontal): Remove direction + parameter. + * tui/tui-windata.c (tui_data_window::do_scroll_vertical): Remove + direction parameter. + * tui/tui-win.c (tui_win_info::forward_scroll) + (tui_win_info::backward_scroll, tui_win_info::left_scroll) + (tui_win_info::right_scroll): Update. + * tui/tui-source.c (tui_source_window::do_scroll_vertical): Remove + direction parameter. + * tui/tui-disasm.c (tui_disasm_window::do_scroll_vertical): Remove + direction parameter. + * tui/tui-data.h (enum tui_scroll_direction): Remove. + (struct tui_win_info) <do_scroll_vertical, do_scroll_horizontal>: + Remove direction parameter. + (struct tui_source_window_base, struct tui_source_window) + (struct tui_disasm_window, struct tui_data_window) + (struct tui_cmd_window): Update. + +2019-06-25 Tom Tromey <tom@tromey.com> + + * tui/tui-winsource.h (tui_set_exec_info_content) + (tui_show_exec_info_content, tui_erase_exec_info_content) + (tui_clear_exec_info_content, tui_update_exec_info): Change + argument to tui_source_window_base. + * tui/tui-winsource.c (tui_set_exec_info_content) + (tui_show_exec_info_content, tui_erase_exec_info_content) + (tui_clear_exec_info_content, tui_update_exec_info): Change + argument to tui_source_window_base. + +2019-06-25 Tom Tromey <tom@tromey.com> + + * tui/tui-winsource.h (tui_set_exec_info_content): Return void. + * tui/tui-winsource.c (tui_set_exec_info_content): Return void. + +2019-06-25 Tom Tromey <tom@tromey.com> + + * tui/tui-winsource.c (tui_set_exec_info_content): Remove NULL + check. + +2019-06-25 Tom Tromey <tom@tromey.com> + + * tui/tui-winsource.h (tui_alloc_source_buffer): Change return + type to void. + * tui/tui-winsource.c (tui_alloc_source_buffer): Change return + type to void. + * tui/tui-source.c (tui_set_source_content): Update. + * tui/tui-disasm.c (tui_set_disassem_content): Update. + +2019-06-25 Tom Tromey <tom@tromey.com> + + * tui/tui-win.c (window_name_completer, tui_set_focus) + (tui_all_windows_info): Use name method. + * tui/tui-data.h (struct tui_gen_win_info) + (struct tui_source_window, struct tui_disasm_window) + (struct tui_data_window, struct tui_cmd_window) <name>: New + method. + (tui_win_name): Don't declare. + * tui/tui-data.c (tui_partial_win_by_name): Use name method. + (tui_win_name): Remove. + +2019-06-25 Tom Tromey <tom@tromey.com> + + * tui/tui-winsource.h (tui_update_source_window) + (tui_update_source_window_as_is): Change parameter type. + * tui/tui-winsource.c (tui_update_source_window): Change win_info + to be a tui_source_window_base. + (tui_update_source_window_as_is): Likewise. + * tui/tui-win.c (make_visible_with_new_height): Update. + +2019-06-25 Tom Tromey <tom@tromey.com> + + * tui/tui-winsource.c (tui_erase_source_content) + (tui_show_source_content, tui_show_exec_info_content) + (tui_erase_exec_info_content): Use refresh_window method. + * tui/tui-wingeneral.h (tui_refresh_win): Don't declare. + * tui/tui-wingeneral.c (tui_gen_win_info::refresh_window): Rename + from tui_refresh_win. + (tui_data_window::refresh_window): New method. + (tui_win_info::refresh, tui_source_window_base::refresh) + (tui_refresh_all): Use refresh_window method. + * tui/tui-stack.c (tui_show_locator_content): Call refresh_window + method. + * tui/tui-regs.c (tui_display_register): Call refresh_window + method. + * tui/tui-layout.c (show_source_disasm_command) + (show_source_or_disasm_and_command): Call refresh_window method. + * tui/tui-data.h (struct tui_gen_win_info) + (struct tui_data_window, struct tui_cmd_window) <refresh_window>: + New method. + +2019-06-25 Tom Tromey <tom@tromey.com> + + * tui/tui.c (tui_rl_other_window, tui_enable) + (tui_is_window_visible, tui_get_command_dimension): Update. + * tui/tui-winsource.c (tui_update_source_window_as_is) + (tui_clear_source_content, tui_erase_source_content) + (tui_show_source_line, tui_source_window_base::refill) + (tui_source_window_base::do_scroll_horizontal) + (tui_source_window_base::set_is_exec_point_at) + (tui_update_breakpoint_info, tui_set_exec_info_content) + (tui_alloc_source_buffer, tui_line_is_displayed) + (tui_addr_is_displayed): Update. + * tui/tui-wingeneral.c (tui_unhighlight_win, tui_highlight_win) + (tui_check_and_display_highlight_if_needed) + (tui_win_info::make_visible, tui_win_info::refresh) + (tui_refresh_all): Update. + * tui/tui-windata.c (tui_first_data_item_displayed) + (tui_delete_data_content_windows, tui_erase_data_content) + (tui_display_all_data, tui_data_window::refresh_all) + (tui_check_data_values): Update. + * tui/tui-win.c (window_name_completer, tui_update_gdb_sizes) + (tui_set_win_focus_to, tui_win_info::forward_scroll) + (tui_win_info::backward_scroll, tui_refresh_all_win) + (tui_resize_all, tui_set_focus, tui_all_windows_info) + (update_tab_width, tui_set_win_height, tui_adjust_win_heights) + (tui_source_window_base::set_new_height) + (tui_data_window::set_new_height) + (make_invisible_and_set_new_height) + (make_visible_with_new_height, new_height_ok) + (parse_scrolling_args): Update. + * tui/tui-stack.c (tui_show_frame_info): Update. + * tui/tui-source.c (tui_set_source_content) + (tui_set_source_content_nil, tui_source_is_displayed) + (tui_source_window::do_scroll_vertical): Update. + * tui/tui-regs.c (tui_show_registers, tui_show_register_group) + (tui_display_registers_from, tui_display_reg_element_at_line) + (tui_check_register_values, tui_reg_command): Update. + * tui/tui-layout.c (tui_default_win_height) + (show_source_disasm_command, show_data, init_and_make_win) + (show_source_or_disasm_and_command): Update. + * tui/tui-io.c (update_cmdwin_start_line, tui_putc, tui_puts) + (tui_redisplay_readline, tui_mld_flush) + (tui_mld_erase_entire_line, tui_mld_getc, tui_cont_sig) + (tui_getc): Update. + * tui/tui-disasm.c (tui_set_disassem_content) + (tui_disasm_window::do_scroll_vertical): Update. + * tui/tui-data.h (struct tui_gen_win_info) <~tui_gen_win_info>: + Now virtual. + (struct tui_win_info): Derive from tui_gen_win_info. + <~tui_win_info>: Mark as override. + <generic>: Remove member. + * tui/tui-data.c (tui_cmd_window::clear_detail, tui_next_win) + (tui_prev_win, tui_partial_win_by_name, tui_win_info) + (~tui_data_window, ~tui_win_info) + (tui_free_all_source_wins_content): Update. + * tui/tui-command.c (tui_refresh_cmd_win): Update. + +2019-06-25 Tom Tromey <tom@tromey.com> + + * tui/tui-layout.c (init_and_make_win): Use new. + * tui/tui-data.h (struct tui_gen_win_info): Add constructor, + destructor, initializers. + (tui_alloc_generic_win_info): Don't declare. + * tui/tui-data.c (_locator): Add argument to constructor. + (source_win, disasm_win): New globals. + (exec_info): Remove. + (tui_source_exec_info_win_ptr, tui_disassem_exec_info_win_ptr): + Update. + (tui_alloc_generic_win_info): Remove. + (init_content_element): Use new. + (tui_win_info::tui_win_info): Update. + (free_content_elements) <case DATA_WIN>: Use delete. + +2019-06-25 Tom Tromey <tom@tromey.com> + + * tui/tui-wingeneral.c (tui_refresh_win): Update. + * tui/tui-windata.c (tui_first_data_item_displayed) + (tui_delete_data_content_windows): Update. + * tui/tui-win.c (tui_data_window::set_new_height): Update. + * tui/tui-regs.c (tui_show_registers, tui_show_register_group) + (tui_display_registers_from, tui_check_register_values): Update. + * tui/tui-data.h (union tui_which_element) <data_window>: Now a + pointer. + * tui/tui-data.c (init_content_element): Update. Allocate the new + window. + (tui_free_data_content): Update. + (free_content_elements) <case DATA_WIN>: Free the window. + +2019-06-25 Tom Tromey <tom@tromey.com> + + * tui/tui-wingeneral.c (tui_unhighlight_win, tui_highlight_win): + Update. + * tui/tui-layout.c (make_command_window) + (show_source_disasm_command, show_data, init_and_make_win) + (show_source_or_disasm_and_command): Update. + * tui/tui-data.h (struct tui_win_info) <set_highlight>: New + method. + <can_highight, is_highlighted>: Now bool. + (tui_set_win_highlight): Don't declare. + * tui/tui-data.c (tui_set_win_highlight): Remove. + +2019-06-25 Tom Tromey <tom@tromey.com> + + * tui/tui-wingeneral.c (make_visible): Remove check of window + type. + +2019-06-25 Tom Tromey <tom@tromey.com> + + * tui/tui-win.c (tui_win_info::max_height) + (tui_cmd_window::max_height): New methods. + (new_height_ok): Call max_height. + * tui/tui-data.h (struct tui_win_info, struct tui_cmd_window) + <max_height>: New method. + +2019-06-25 Tom Tromey <tom@tromey.com> + + * tui/tui-win.c (tui_source_window_base::set_new_height) + (tui_data_window::set_new_height): New methods. + (make_invisible_and_set_new_height): Call set_new_height method. + * tui/tui-data.h (struct tui_win_info) + (struct tui_source_window_base, struct tui_data_window) + <set_new_height>: New method. + +2019-06-25 Tom Tromey <tom@tromey.com> + + * tui/tui.c (tui_rl_other_window): Call the refresh_all method. + * tui/tui-windata.c (tui_data_window::refresh_all): Rename from + tui_refresh_data_win. + * tui/tui-win.c (tui_source_window_base::refresh_all): New + method. + (tui_refresh_all_win): Call the refresh_all method. + (tui_set_focus): Likewise. + * tui/tui-data.h (struct tui_win_info) <refresh_all>: New method. + (struct tui_source_window_base, struct tui_data_window) <refresh>: + Likewise. + +2019-06-25 Tom Tromey <tom@tromey.com> + + * tui/tui-winsource.h (tui_refill_source_window) + (tui_set_is_exec_point_at): Don't declare. + * tui/tui-winsource.c (tui_update_source_windows_with_addr) + (tui_source_window_base::refill): Rename from + tui_refill_source_window. + (tui_source_window_base::do_scroll_horizontal): Update. + (tui_source_window_base::set_is_exec_point_at): Rename from + tui_set_is_exec_point_at. + (tui_update_all_breakpoint_info): Update. + * tui/tui-stack.c (tui_show_frame_info): Update. + * tui/tui-layout.c (show_data): Add cast. + * tui/tui-hooks.c (tui_redisplay_source): Call refill method. + * tui/tui-data.h (struct tui_source_window_base) <refill, + set_is_exec_point_at>: New methods. + (tui_source_windows, tui_add_to_source_windows): Update types. + (tui_add_to_source_windows): Remove redundant declaration. + * tui/tui-data.c (source_windows): Store tui_source_window_base. + (tui_source_windows): Change return type. + (tui_clear_source_windows_detail): Update. + (tui_add_to_source_windows): Change type of parameter. + (tui_free_all_source_wins_content): Update. + +2019-06-25 Tom Tromey <tom@tromey.com> + + * tui/tui-wingeneral.c (tui_win_info::refresh) + (tui_source_window_base::refresh): New methods. + (tui_refresh_all): Call the refresh method. + * tui/tui-data.h (struct tui_win_info) + (struct tui_source_window_base) <refresh>: New method. + +2019-06-25 Tom Tromey <tom@tromey.com> + + * tui/tui.h (tui_is_window_visible): Return bool. + * tui/tui.c (tui_is_window_visible): Return bool. + * tui/tui-wingeneral.c (tui_make_window, make_visible) + (tui_make_visible, tui_make_invisible) + (tui_win_info::make_visible) + (tui_source_window_base::make_visible, make_all_visible) + (tui_make_all_visible, tui_make_all_invisible): Update. + * tui/tui-windata.c (tui_delete_data_content_windows): Update. + * tui/tui-data.h (struct tui_gen_win_info) <is_visible>: Now + bool. + (struct tui_win_info, struct tui_source_window_base) + (struct tui_cmd_window) <make_visible>: Change parameter to bool. + * tui/tui-data.c (tui_init_generic_part): Update. + +2019-06-25 Tom Tromey <tom@tromey.com> + + * tui/tui-wingeneral.c (tui_win_info::make_visible) + (tui_source_window_base::make_visible): New methods. + (make_all_visible): Make method call. + * tui/tui-data.h (struct tui_win_info) <make_visible>: New method. + (struct tui_source_window_base, struct tui_cmd_window): Override + make_visible. + (tui_win_is_source_type): Don't declare. + * tui/tui-data.c (tui_win_is_source_type): Remove. + +2019-06-25 Tom Tromey <tom@tromey.com> + + * tui/tui-layout.c (show_source_or_disasm_and_command): Remove + NULL check. + +2019-06-25 Tom Tromey <tom@tromey.com> + + * tui/tui-data.h (struct tui_data_window, struct tui_cmd_window): + Inline constructor. Add initializers for members. + * tui/tui-data.c (tui_data_window, tui_cmd_window): Remove + constructors; now inline in class. + +2019-06-25 Tom Tromey <tom@tromey.com> + + * tui/tui-regs.c (tui_show_registers): Update. + * tui/tui-data.h (struct tui_data_window) <display_regs>: Now + bool. + * tui/tui-data.c (tui_data_window::clear_detail) + (tui_data_window): Update. + +2019-06-25 Tom Tromey <tom@tromey.com> + + * tui/tui-windata.c (tui_display_all_data) + (tui_display_data_from_line, tui_display_data_from) + (tui_check_data_values, tui_data_window::do_scroll_vertical): + Update. + * tui/tui-regs.c (tui_last_regs_line_no) + (tui_line_from_reg_element_no, tui_first_reg_element_no_inline) + (tui_show_registers, tui_show_register_group) + (tui_display_registers_from, tui_display_reg_element_at_line) + (tui_display_registers_from_line, tui_check_register_values) + (tui_reg_next, tui_reg_prev): Update. + * tui/tui-layout.c (tui_set_layout, show_data): Update. + * tui/tui-data.h (struct tui_data_info): Remove. Move contents to + tui_data_window. + (struct tui_win_info) <detail>: Remove. Add new fields from + tui_data_info. + (TUI_DATA_WIN): Add cast. + * tui/tui-data.c (tui_data_window::clear_detail, tui_data_window) + (~tui_data_window): Simplify. + +2019-06-25 Tom Tromey <tom@tromey.com> + + * tui/tui-layout.c (show_source_disasm_command) + (show_source_or_disasm_and_command): Update. + * tui/tui-io.c (update_cmdwin_start_line) + (tui_redisplay_readline): Update. + * tui/tui-data.h (struct tui_command_info): Remove. + (struct tui_win_info) <detail>: Remove command_info member. + (struct tui_data_window) <start_line>: New member, from + tui_command_info. + (TUI_CMD_WIN): Add casts. + +2019-06-25 Tom Tromey <tom@tromey.com> + + * tui/tui-winsource.c (tui_update_source_window) + (tui_refill_source_window) + (tui_source_window_base::do_scroll_horizontal) + (tui_update_breakpoint_info, tui_set_exec_info_content) + (tui_show_exec_info_content, tui_erase_exec_info_content) + (tui_clear_exec_info_content): Update. + * tui/tui-wingeneral.c (make_all_visible, tui_refresh_all): + Update. + * tui/tui-win.c (make_invisible_and_set_new_height) + (make_visible_with_new_height): Update. + * tui/tui-source.c (tui_set_source_content) + (tui_show_symtab_source): Update. + * tui/tui-layout.c (extract_display_start_addr) + (show_source_disasm_command, show_data) + (make_source_or_disasm_window) + (show_source_or_disasm_and_command): Update. + * tui/tui-disasm.c (tui_set_disassem_content): Simplify. + (tui_disasm_window::do_scroll_vertical): Remove shadowing + "gdbarch". + * tui/tui-data.h (struct tui_source_info): Remove. Move contents + to tui_source_window_base. + (struct tui_win_info) <detail>: Remove source_info member. + (struct tui_source_window_base) <has_locator>: Inline. + Move contents from tui_source_info; rename has_locator member to + m_has_locator. + (TUI_SRC_WIN, TUI_DISASM_WIN): Add casts. + * tui/tui-data.c (tui_source_window_base::has_locator): Move to + header file. + (tui_source_window_base::clear_detail, ~tui_source_window_base): + Simplify. + (tui_free_all_source_wins_content): Cast to + tui_source_window_base. + +2019-06-25 Tom Tromey <tom@tromey.com> + + * tui/tui-win.c (make_invisible_and_set_new_height) + (make_visible_with_new_height): Call has_locator method. + * tui/tui-layout.c (show_source_disasm_command, show_data) + (show_source_or_disasm_and_command): Update for bool change. + * tui/tui-data.h (struct tui_source_info) <has_locator>: Now bool. + (tui_win_info) <has_locator>: New method. + (struct tui_source_window_base) <has_locator>: New method. + (tui_win_has_locator): Don't declare. + * tui/tui-data.c (tui_source_window_base::has_locator): Rename + from tui_win_has_locator. + (tui_source_window_base): Use false, not FALSE. + +2019-06-25 Tom Tromey <tom@tromey.com> + + * tui/tui-data.h (tui_clear_win_detail): Don't declare. + * tui/tui-data.c (tui_clear_source_windows_detail): Call the + clear_detail method directly. + (tui_clear_win_detail): Remove. + +2019-06-25 Tom Tromey <tom@tromey.com> + + * tui/tui-disasm.c (tui_disasm_window::do_scroll_vertical): Use + "this", not TUI_DISASM_WIN. + +2019-06-25 Tom Tromey <tom@tromey.com> + + * tui/tui-winsource.h (tui_horizontal_source_scroll): Don't + declare. + * tui/tui-winsource.c + (tui_source_window_base::do_scroll_horizontal): Rename from + tui_horizontal_source_scroll. + * tui/tui-windata.h (tui_vertical_data_scroll): Don't declare. + * tui/tui-windata.c (tui_data_window::do_scroll_vertical): Rename + from tui_vertical_data_scroll. + * tui/tui-win.h (tui_scroll): Don't declare. + * tui/tui-win.c (tui_win_info::forward_scroll) + (tui_win_info::backward_scroll, tui_win_info::left_scroll) + (tui_win_info::right_scroll): Rename and update. + (tui_scroll_forward_command, tui_scroll_backward_command) + (tui_scroll_left_command, tui_scroll_right_command): Update. + (tui_scroll): Remove. + * tui/tui-source.h: Don't declare tui_vertical_source_scroll. + * tui/tui-source.c (tui_source_window::do_scroll_vertical): Rename + from tui_vertical_source_scroll. + * tui/tui-disasm.h (tui_vertical_disassem_scroll): Don't declare. + * tui/tui-disasm.c (tui_disasm_window::do_scroll_vertical): Rename + from tui_vertical_disassem_scroll. + * tui/tui-data.h (struct tui_win_info) <do_scroll_vertical, + do_scroll_horizontal>: New methods. + <forward_scroll, backward_scroll, left_scroll, right_scroll>: + Likewise. + (struct tui_source_window_base): Add do_scroll_horizontal. + (struct tui_source_window, struct tui_disasm_window): Add + do_scroll_vertical. + (struct tui_data_window, struct tui_cmd_window): Add + do_scroll_horizontal and do_scroll_vertical. + * tui/tui-command.c (tui_dispatch_ctrl_char): Use method calls. + +2019-06-25 Tom Tromey <tom@tromey.com> + + * tui/tui-data.h (struct tui_source_window_base): New struct. + (struct tui_source_window): Derive from tui_source_window_base. + (struct tui_disasm_window): New struct. + * tui/tui-data.c (tui_source_window_base::clear_detail): Rename + from tui_source_window::clear_detail. + (tui_source_window_base): Rename from tui_source_window. + (~tui_source_window_base): Rename from ~tui_source_window. + (tui_alloc_win_info): Create a tui_disasm_window. + +2019-06-25 Tom Tromey <tom@tromey.com> + + * tui/tui-data.h (struct tui_source_window) + (struct tui_data_window): Declare destructors. + * tui/tui-data.c (~tui_source_window, ~tui_data_window): New + destructors. + (tui_win_info): Simplify. + +2019-06-25 Tom Tromey <tom@tromey.com> + + * tui/tui-winsource.c (tui_display_main) + (tui_update_source_windows_with_addr) + (tui_update_all_breakpoint_info): Update. + * tui/tui-win.c (tui_resize_all, tui_adjust_win_heights) + (new_height_ok, parse_scrolling_args): Update. + * tui/tui-stack.c (tui_show_frame_info): Update. + * tui/tui-data.h (struct tui_list): Remove. + (tui_source_windows): Return a reference to a std::vector. + * tui/tui-data.c (source_windows): Now a std::vector. + (tui_source_windows): Change return type. + (tui_clear_source_windows): Rewrite. + (tui_clear_source_windows_detail, tui_add_to_source_windows) + (tui_free_all_source_wins_content): Rewrite. + +2019-06-25 Tom Tromey <tom@tromey.com> + + * tui/tui-data.h (struct tui_win_info, struct tui_source_window) + (struct tui_data_window, struct tui_cmd_window): Declare + clear_detail method. + * tui/tui-data.c (tui_source_window::clear_detail) + (tui_cmd_window::clear_detail, tui_data_window::clear_detail): New + methods. + (tui_clear_win_detail): Simplify. + +2019-06-25 Tom Tromey <tom@tromey.com> + + * tui/tui-layout.c (make_source_window, make_disasm_window) + (make_source_or_disasm_window): Remove win_info_ptr parameter. + Return the new window. + (show_source_disasm_command, show_data) + (show_source_or_disasm_and_command): Update. + +2019-06-25 Tom Tromey <tom@tromey.com> + + * tui/tui-layout.c (make_command_window): Remove win_info_ptr + parameter. Return the new window. + (show_source_disasm_command): Update and remove NULL check. + (show_source_or_disasm_and_command): Update. + +2019-06-25 Tom Tromey <tom@tromey.com> + + * tui/tui-layout.c (init_and_make_win): Remove NULL check. + +2019-06-25 Tom Tromey <tom@tromey.com> + + * tui/tui-data.h (struct tui_win_info): Make constructor + protected. Make destructor virtual. Add initializers. + (tui_source_window, tui_data_window, tui_cmd_window): New + classes. + * tui/tui-data.c (tui_win_info): Rename from init_win_info. Now a + constructor. Add "type" parameter. + (tui_source_window, tui_data_window, tui_cmd_window): New + constructors. + (tui_alloc_win_info): Instantiate the appropriate subclass. + +2019-06-25 Tom Tromey <tom@tromey.com> + + * tui/tui-win.c (tui_resize_all): Use delete. + * tui/tui-data.h (struct tui_win_info) <~tui_win_info>: Declare + destructor. + (tui_free_window): Don't declare. + * tui/tui-data.c (~tui_win_info): Rename from tui_free_window. + Update. + +2019-06-25 Tom Tromey <tom@tromey.com> + + * tui/tui-data.h (struct tui_win_info): Add constructor. + * tui/tui-data.c (tui_alloc_win_info): Use new. + (tui_free_window): Use delete. + +2019-06-22 Tom Tromey <tom@tromey.com> + + * tui/tui-windata.h (tui_first_data_element_no_in_line): Don't + declare. + * tui/tui-windata.c (tui_first_data_element_no_in_line): Remove. + +2019-06-22 Tom Tromey <tom@tromey.com> + + * tui/tui-data.h (tui_del_window, tui_del_data_windows): Don't + declare. + * tui/tui-data.c (tui_del_window, tui_del_data_windows): Remove. + +2019-06-22 Tom de Vries <tdevries@suse.de> + + * dwarf2read.c (create_addrmap_from_aranges) + (read_debug_names_from_section): Print ptrdiff_t using '%s' and plongest + instead of '%zu'. + +2019-06-21 Simon Marchi <simon.marchi@efficios.com> + + * dwarf2read.h (dwarf2_section_info_def): Remove. + (DEF_VEC_O (dwarf2_section_info_def)): Remove. + * dwarf2read.c (struct dwo_sections) <types>: Change type to + std::vector<dwarf2_section_info>. + (struct dwo_file) <~dwo_file>: Remove. + (dwarf2_per_objfile::~dwarf2_per_objfile): Don't manually free + types field. + (dwarf2_per_objfile::locate_sections): Adjust to std::vector. + (dwarf2_read_debug_names): Likewise. + (create_debug_types_hash_table): Change parameter type to + array_view, adjust code accordingly. + (dwarf2_locate_dwo_sections): Adjust to std::vector. + (partial_die_info::fixup): Likewise. + (determine_prefix): Likewise. + * dwarf-index-write.c (write_psymtabs_to_index): Adjust. + +2019-06-21 Simon Marchi <simon.marchi@polymtl.ca> + + * dwarf2read.c (struct dwo_file) <dbfd>: Change type to + gdb_bfd_ref_ptr. + <~dwo_file>: Remove call to gdb_bfd_unref. + (open_and_init_dwo_file): Move gdb_bfd_ref_ptr into dbfd field. Call + gdb_bfd_ref_ptr::get. + +2019-06-21 Simon Marchi <simon.marchi@polymtl.ca> + + * dwarf2read.h (struct dwarf2_per_objfile) <dwo_files>: Change + type to htab_up. + * dwarf2read.c (struct dwo_file): Initialize fields. + <~dwo_file>: New. + (free_dwo_file): Remove, move content to ~dwo_file. + (struct dwo_file_deleter): Remove. + (dwo_file_up>: Remove custom deleter. + (free_dwo_files): Remove. + (dwarf2_per_objfile::~dwarf2_per_objfile): Don't explicitly free + dwo_files. + (process_skeletonless_type_units): Call unique_ptr::get. + (allocate_dwo_file_hash_table): Add deleter to created hash + table. Change return type to htab_up. + (lookup_dwo_file_slot): Don't memset dwo_file, call + unique_ptr::get. + (create_dwo_unit_in_dwp_v1): Allocate dwo_file with new. + (create_dwo_unit_in_dwp_v2): Likewise. + (open_and_init_dwo_file): Likewise. + (free_dwo_file_from_slot): Remove. + +2019-06-21 Simon Marchi <simon.marchi@polymtl.ca> + + * dwarf2read.h (struct dwarf2_section_info) <readin, + is_virtual>: Change type to bool. + * dwarf2read.c (dwarf2_read_section, create_dwp_v2_section): Use + true instead of 1. + +2019-06-19 Tom Tromey <tom@tromey.com> + + * tui/tui-data.h (tui_init_content_element): Don't declare. + +2019-06-19 Tom Tromey <tom@tromey.com> + + * tui/tui-data.h (tui_init_win_info): Don't declare. + +2019-06-19 Tom de Vries <tdevries@suse.de> + + * dwarf2read.h (abstract_to_concrete): Change type to + std::unordered_map<sect_offset, std::vector<sect_offset>, + gdb::hash_enum<sect_offset>>. + +2019-06-19 Tom Tromey <tromey@adacore.com> + + * ada-lang.c (ada_evaluate_subexp) <case OP_ATR_FIRST>: Handle + EVAL_AVOID_SIDE_EFFECTS specially. + +2019-06-19 Tom Tromey <tromey@adacore.com> + + * source-cache.c (highlighter): New global. + (source_cache::get_source_lines): Create a highlighter on demand. + +2019-06-18 Andrew Burgess <andrew.burgess@embecosm.com> + + * defs.h (deprecated_interactive_hook): Delete declaration. + * interps.c (clear_interpreter_hooks): Remove use of + deprecated_interactive_hook. + * top.c (deprecated_interactive_hook): Delete definition. + * utils.c (maybe_quit): Remove use of deprecated_interactive_hook. + +2019-06-18 Tom de Vries <tdevries@suse.de> + + PR gdb/24515 + * dwarf2read.h (abstract_to_concrete): Change type from + std::unordered_map<die_info_ptr, std::vector<die_info_ptr>> to + std::unordered_map<sect_offset, std::vector<sect_offset>>. + * dwarf2read.c (read_variable): Update. + (dwarf2_fetch_die_loc_sect_off): Update. + +2019-06-17 Tom de Vries <tdevries@suse.de> + + PR gdb/24617 + * common/pathstuff.c (child_path): Make sure parent_len > 0 before + accessing parent[parent_len - 1]. + +2019-06-17 Paul Pluzhnikov <ppluzhnikov@google.com> + + PR gdb/24364 + * dtrace-probe.c (dtrace_static_probe_ops::get_probe): Don't + call dtrace_process_dof with NULL dof. + +2019-06-16 Tom de Vries <tdevries@suse.de> + + PR gdb/24445 + * contrib/gdb-add-index.sh: Update to handle dwz-m-ed executable. + +2019-06-16 Tom Tromey <tom@tromey.com> + + * tui/tui-wingeneral.c (tui_unhighlight_win, tui_highlight_win) + (make_all_visible): Use address of member. + +2019-06-16 Tom Tromey <tom@tromey.com> + + * tui/tui-data.c (tui_clear_win_detail, init_win_info) + (tui_free_window, free_content, free_content_elements): Remove + unnecessary cast. + * tui/tui-windata.c (tui_display_all_data): Remove unnecessary + cast. + * tui/tui-regs.c (tui_show_register_group) + (tui_display_registers_from, tui_display_reg_element_at_line): + Remove unnecessary cast. + +2019-06-16 Andrew Burgess <andrew.burgess@embecosm.com> + + * linux-nat.c (normal_mask): Delete. + (_initialize_linux_nat): Don't initialise normal_mask. + +2019-06-16 Simon Marchi <simon.marchi@polymtl.ca> + + PR gdb/24445 + * dwarf-index-write.h (write_psymtabs_to_index): Add + dwz_basename parameter. + * dwarf-index-write.c (write_gdbindex): Move file writing to + write_gdbindex_1. Change return type void. + (assert_file_size): Move up, remove filename parameter. + (write_gdbindex_1): New function. + (write_debug_names): Change return type to void, call + assert_file_size. + (struct index_wip_file): New struct. + (write_psymtabs_to_index): Add dwz_basename parameter. Move + file logic to index_wip_file. Write index for dwz file if + needed. + (save_gdb_index_command): Pass basename of dwz file, if present. + * dwarf-index-cache.c (index_cache::store): Obtain and pass + build-id of dwz file, if present. + * dwarf2read.c (struct dwz_file): Move to dwarf2read.h. + (dwarf2_get_dwz_file): Likewise. + * dwarf2read.h (struct dwz_file): Move from dwarf2read.c. + (dwarf2_get_dwz_file): Likewise. + +2019-06-16 Tom Tromey <tom@tromey.com> + + * coffread.c (process_coff_symbol): Use xstrdup. + * value.c (create_internalvar): Use xstrdup. + +2019-06-16 Tom Tromey <tom@tromey.com> + + * valops.c (value_cast, value_slice): Remove unnecessary cast. + * breakpoint.c (stopin_command, stopat_command) + (until_break_command, decode_location_default): Remove unnecessary + cast. + * utils.c (subset_compare): Remove unnecessary cast. + * ada-lang.c (ada_update_initial_language): Remove unnecessary + cast. + * linespec.c (decode_line_with_last_displayed): Remove unnecessary + cast. + * infcmd.c (path_command): Remove unnecessary cast. + * coffread.c (decode_type): Remove unnecessary cast. + * xcoffread.c (read_xcoff_symtab): Remove unnecessary cast. + * mipsread.c (mipscoff_symfile_read): Remove unnecessary cast. + * tui/tui-stack.c (tui_show_locator_content) + (tui_show_frame_info): Remove unnecessary cast. + * tui/tui-win.c (tui_scroll_forward_command) + (tui_scroll_backward_command, tui_set_focus, tui_set_win_height) + (parse_scrolling_args): Remove unnecessary cast. + * tui/tui-data.c (init_win_info, tui_del_window) + (tui_free_window, tui_del_data_windows, tui_free_data_content) + (free_content_elements): Remove unnecessary cast. + * tui/tui-windata.c (tui_first_data_item_displayed): Remove + unnecessary cast. + * tui/tui-source.c (tui_set_source_content) + (tui_vertical_source_scroll): Remove unnecessary cast. + * tui/tui-layout.c (tui_default_win_height): Remove unnecessary + cast. + * tui/tui-io.c (tui_initialize_io): Remove unnecessary cast. + * tui/tui-regs.c (tui_display_registers_from) + (tui_display_register): Remove unnecessary cast. + * tui/tui-wingeneral.c (tui_refresh_win, tui_delete_win) + (tui_unhighlight_win, tui_highlight_win, tui_make_window) + (make_visible): Remove unnecessary cast. + * tui/tui-winsource.c (tui_erase_source_content) + (tui_update_breakpoint_info, tui_set_exec_info_content): Remove + unnecessary cast. + * ax-gdb.c (agent_command_1): Remove unnecessary cast. + * cli/cli-setshow.c (cmd_show_list): Remove unnecessary cast. + * stabsread.c (read_type, read_array_type, read_range_type): + Remove unnecessary cast. + * mdebugread.c (mdebug_build_psymtabs): Remove unnecessary cast. + (parse_symbol, parse_type, upgrade_type, parse_external) + (parse_partial_symbols, psymtab_to_symtab_1, cross_ref): Remove + unnecessary cast. + * gdb_bfd.c (gdb_bfd_map_section): Remove unnecessary cast. + +2019-06-16 Tom Tromey <tom@tromey.com> + + * tui/tui-data.c (tui_alloc_generic_win_info) + (tui_alloc_win_info, tui_add_content_elements): Remove NULL + checks. + +2019-06-16 Bernhard Heckel <bernhard.heckel@intel.com> + Andrew Burgess <andrew.burgess@embecosm.com> + + * f-typeprint.c (f_print_type): Don't return early for not + associated or not allocated types. + (f_type_print_varspec_suffix): Add print_rank parameter and print + ranks of array types in case they dangling. + (f_type_print_base): Add print_rank parameter. + +2019-06-15 Andrew Burgess <andrew.burgess@embecosm.com> + + * NEWS: Mention new MI commands. + * break-catch-throw.c (enum exception_event_kind): Move to + breakpoint.h. + (print_mention_exception_catchpoint): Output text as a single + message. + (catch_exception_command_1): Rename to... + (catch_exception_event): ...this, make non-static, update header + command, and change some parameter types. + (catch_catch_command): Update for changes to + catch_exception_command_1. + (catch_throw_command): Likewise. + (catch_rethrow_command): Likewise. + * breakpoint.c (enum exception_event_kind): Delete. + * breakpoint.h (enum exception_event_kind): Moved here from + break-catch-throw.c. + (catch_exception_event): Declare. + * mi/mi-cmd-catch.c (mi_cmd_catch_exception_event): New function. + (mi_cmd_catch_throw): New function. + (mi_cmd_catch_rethrow): New function. + (mi_cmd_catch_catch): New function. + * mi/mi-cmds.c (mi_cmds): Add 'catch-throw', 'catch-rethrow', and + 'catch-catch' entries. + * mi/mi-cmds.h (mi_cmd_catch_throw): Declare. + (mi_cmd_catch_rethrow): Declare. + (mi_cmd_catch_catch): Declare. + +2019-06-15 Andrew Burgess <andrew.burgess@embecosm.com> + + * annotate.c (annotate_source_line): Change return type to void, + update implementation to match. + * annotate.h (annotate_source_line): Change return type to void, + update header comment. + * stack.c (print_frame_info): Don't change what frame information + is printed based on whether annotations are on or not. + +2019-06-15 Andrew Burgess <andrew.burgess@embecosm.com> + + * annotate.c: Add 'source.h' and 'objfiles.h' includes. + (annotate_source): Make static. + (annotate_source_line): Moved from source.c and renamed from + identify_source_line. Update the return type. + * annotate.h (annotate_source): Delete declaration. + (annotate_source_line): Declaration moved from source.h, and + renamed from identify_source_line. Return type updated. + * source.c (identify_source_line): Moved to annotate.c and renamed + to annotate_source_line. + (info_line_command): Remove check of annotation_level. + * source.h (identify_source_line): Move declaration to annotate.h + and rename to annotate_source_line. + * stack.c: Add 'annotate.h' include. + (print_frame_info): Remove check of annotation_level before + calling annotate_source_line. + +2019-06-15 Andrew Burgess <andrew.burgess@embecosm.com> + + * source-cache.c (source_cache::get_plain_source_lines): Use + open_source_file_with_line_charpos instead of just + open_source_file, remove call to find_source_lines. + (source_cache::get_source_lines): Likewise. + * source.c (find_source_lines): Make static. + (get_filename_and_charpos): Renamed into... + (open_source_file_with_line_charpos): ..this along with changes to + return a scoped_fd, and some other minor clean ups. + (identify_source_line): Use open_source_file_with_line_charpos. + (search_command_helper): Use open_source_file_with_line_charpos + instead of just open_source_file, remove call to + find_source_lines. + * source.h (open_source_file_with_line_charpos): Declare new + function. + (find_source_lines): Delete declaration. + +2019-06-15 Andrew Burgess <andrew.burgess@embecosm.com> + + * source.c (get_filename_and_charpos): Remove fullname + parameter. + (identify_source_line): Update call to get_filename_and_charpos. + +2019-06-14 Tom Tromey <tromey@adacore.com> + + PR gdb/24502: + * ui-style.h (skip_ansi_escape): Update comment. + * ui-file.h (class no_terminal_escape_file): New class. + * ui-file.c (no_terminal_escape_file::write) + (no_terminal_escape_file::puts): New methods. + * cli/cli-logging.c (handle_redirections): Use + no_terminal_escape_file. + +2019-06-14 Tom Tromey <tromey@adacore.com> + + * NEWS: Move convenience variable news above Python news. + +2019-06-14 Tom Tromey <tom@tromey.com> + + * gnulib: Move directory to top-level. + * configure.ac: Don't configure gnulib. + * configure: Rebuild. + * common/common-defs.h: Use new path to gnulib. + * Makefile.in (GNULIB_BUILDDIR): Now ../gnulib. + (GNULIB_H): Remove. + (INCGNU): Look in new gnulib location. + (HFILES_NO_SRCDIR): Remove gnulib files. + (SUBDIR, REQUIRED_SUBDIRS): Remove gnulib. + (generated_files): Remove GNULIB_H. + ($(LIBGNU), all-lib): Remove targets. + (distclean): Don't mention GNULIB_BUILDDIR. + ($(GNULIB_BUILDDIR)/Makefile): Remove target. + +2019-06-14 Tom Tromey <tromey@adacore.com> + + * symfile.c (add_symbol_file_command): Remove obsolete comment. + Warn if symbol file does not provide any symbols. + +2019-06-14 Tom Tromey <tromey@adacore.com> + + * source.c (find_and_open_source): Respect basenames_may_differ. + +2019-06-14 Andrew Burgess <andrew.burgess@embecosm.com> + + * annotate.c (annotate_breakpoints_invalid): Make use of + scoped_restore_terminal_state. + (annotate_frames_invalid): Likewise. + +2019-06-14 Tom Tromey <tromey@adacore.com> + + * ada-lang.c (ada_evaluate_subexp) <case BINOP_ASSIGN>: Always + allow assignment to an internalvar. + +2019-06-14 Tom Tromey <tromey@adacore.com> + + * ada-lex.l: Allow "_" in attribute names. + +2019-06-14 Tom Tromey <tromey@adacore.com> + + PR gdb/24653: + * regcache.c (registers_changed): Don't call alloca. + * top.c (execute_command): Don't call alloca. + +2019-06-13 Pedro Alves <palves@redhat.com> + + * cli/cli-setshow.c (cli/cli-setshow.c): New parameter + 'expression'. When parsing an expression, error out if there's + junk after "unlimited". + (parse_cli_var_uinteger, parse_cli_var_zuinteger_unlimited) + (do_set_command): Adjust calls to is_unlimited_literal. + +2019-06-13 Pedro Alves <palves@redhat.com> + + * compile/compile.c (make_compile_options_def_group): Add braces + around array_view initializer. + * thread.c (make_thread_apply_all_options_def_group) + (make_thread_apply_all_options_def_group): Likewise. + +2019-06-13 Pedro Alves <palves@redhat.com> + + * NEWS (New commands): Mention "maint test-options + require-delimiter", "maint test-options unknown-is-error", "maint + test-options unknown-is-operand" and "maint show + test-options-completion-result". + (New command options, command completion): New section. + (Completion improvements): New section. + Mention that you can abbreviate "unlimited". + +2019-06-13 Pedro Alves <palves@redhat.com> + + * cli/cli-utils.c (parse_flags, parse_flags_qcs): Delete. + * cli/cli-utils.h (parse_flags, parse_flags_qcs): Delete. + * unittests/cli-utils-selftests.c (test_parse_flags) + (test_parse_flags_qcs): Delete. + (test_cli_utils): Don't call deleted functions. + +2019-06-13 Pedro Alves <palves@redhat.com> + + * thread.c: Include "cli/cli-option.h". + (tp_array_compar_ascending): Global. + (tp_array_compar): Delete function. + (tp_array_compar_ascending, tp_array_compar_descending): New + functions. + (ascending_option_def, qcs_flag_option_def) + (thr_qcs_flags_option_defs) + (make_thread_apply_all_options_def_group) + (make_thread_apply_options_def_group): New. + (thread_apply_all_command): Use gdb::option::process_options. + (thread_apply_command_completer) + (thread_apply_all_command_completer): New. + (thread_apply_command): Use gdb::option::process_options. + (_initialize_thread): Delete THREAD_APPLY_FLAGS_HELP, replace it + with a new THREAD_APPLY_OPTION_HELP. Use gdb::option::build_help + to generate help text of "thread apply". Adjust "taas"'s help. + * tid-parse.c (tid_range_parser::in_thread_range): New method. + * tid-parse.h (tid_range_parser::in_thread_range): New method. + +2019-06-13 Pedro Alves <palves@redhat.com> + + * thread.c (thread_apply_command): Check for invalid TID with + isdigit instead of !isalpha. + +2019-06-13 Pedro Alves <palves@redhat.com> + + * cli/cli-utils.c (parse_flags_qcs): Use validate_flags_qcs. + (validate_flags_qcs): New. + * cli/cli-utils.h (struct qcs_flags): Change field types to int. + (validate_flags_qcs): Declare. + * stack.c (qcs_flag_option_def, fr_qcs_flags_option_defs): New. + (make_frame_apply_options_def_group): New. + (frame_apply_command_count): Process options with + gdb::option::process_options. + (frame_apply_completer): New. + (frame_apply_level_completer, frame_apply_all_completer) + (frame_apply_completer): New. + (_initialize_stack): Update help of "frame apply", "frame apply + level", "frame apply all" and "faas" to mention supported options + and install command completers. + * stack.h (frame_apply_all_completer): Declare. + * thread.c: Include "stack.h". + (tfaas_command): Add "--". + (_initialize_thread): Update help "tfaas" to mention supported + options and install command completer. + +2019-06-13 Pedro Alves <palves@redhat.com> + + * completer.c (complete_nested_command_line): New. + (gdb_completion_word_break_characters_throw): Add assertion. + * completer.h (complete_nested_command_line): Declare. + +2019-06-13 Pedro Alves <palves@redhat.com> + + * stack.c (parse_backtrace_qualifiers): New. + (backtrace_command): Use it. + (backtrace_command_completer): Complete on qualifiers. + +2019-06-13 Pedro Alves <palves@redhat.com> + + * frame.c: Include "cli/cli-option.h. + (user_set_backtrace_options): New. + (backtrace_past_main, backtrace_past_entry, backtrace_limit): + Delete. + (get_prev_frame): Adjust. + (boolean_option_def, uinteger_option_def) + (set_backtrace_option_defs): New. + (_initialize_frame): Adjust and use + gdb::option::add_setshow_cmds_for_options to install "set + backtrace past-main" and "set backtrace past-entry". + * frame.h: Include "cli/cli-option.h". + (struct frame_print_options): Forward declare. + (print_frame_arguments_all, print_frame_arguments_scalars) + (print_frame_arguments_none): Declare. + (print_entry_values): Delete declaration. + (struct frame_print_options, user_frame_print_options): New. + (struct set_backtrace_options): New. + (set_backtrace_option_defs, user_set_backtrace_options): Declare. + * mi/mi-cmd-stack.c (mi_cmd_stack_list_frames) + (mi_cmd_stack_list_locals, mi_cmd_stack_list_args) + (mi_cmd_stack_list_variables): Pass down USER_FRAME_PRINT_OPTIONS. + (list_args_or_locals): Add frame_print_options parameter. + (mi_cmd_stack_info_frame): Pass down USER_FRAME_PRINT_OPTIONS. + * python/py-framefilter.c (enumerate_args): Pass down + USER_FRAME_PRINT_OPTIONS. + * stack.c: Include "cli/cli-option.h". + (print_frame_arguments_all, print_frame_arguments_scalars) + (print_frame_arguments_none): Declare. + (print_raw_frame_arguments, print_entry_values): Delete. + (user_frame_print_options): New. + (boolean_option_def, enum_option_def, frame_print_option_defs): + New. + (struct backtrace_cmd_options): New. + (bt_flag_option_def): New. + (backtrace_command_option_defs): New. + (print_stack_frame): Pass down USER_FRAME_PRINT_OPTIONS. + (print_frame_arg, read_frame_arg, print_frame_args) + (print_frame_info, print_frame): Add frame_print_options parameter + and use it. + (info_frame_command_core): Pass down USER_FRAME_PRINT_OPTIONS. + (backtrace_command_1): Add frame_print_options and + backtrace_cmd_options parameters and use them. + (make_backtrace_options_def_group): New. + (backtrace_command): Process command options with + gdb::option::process_options. + (backtrace_command_completer): New. + (_initialize_stack): Extend "backtrace"'s help to mention + supported options. Install completer for "backtrace". + Install some settings commands with add_setshow_cmds_for_options. + +2019-06-13 Pedro Alves <palves@redhat.com> + + * NEWS (Changed commands): Mention set/show print raw-frame-arguments, + and that "set/show print raw frame-arguments" are now deprecated. + + * cli/cli-decode.c (add_setshow_boolean_cmd): Now returns the + command. + * command.h (add_setshow_boolean_cmd): Return cmd_list_element *. + * stack.c (_initialize_stack): Install "set/show print + raw-frame-arguments", and deprecate "set/show print raw + frame-arguments". + * valprint.c (_initialize_valprint): Deprecate "set/show print + raw". + +2019-06-13 Pedro Alves <palves@redhat.com> + + * compile/compile.c (struct compile_options): New. + (compile_flag_option_def, compile_command_option_defs) + (make_compile_options_def_group): New. + (compile_file_command): Handle options with + gdb::option::process_options. + (compile_file_command_completer): New function. + (compile_code_command): Handle options with + gdb::option::process_options. + (compile_code_command_completer): New function. + (_initialize_compiler): Install completers for "compile code" and + "compile file". Mention available options in "compile code" and + "compile code"'s help. + * completer.c (advance_to_completion_word): New, factored out from + ... + (advance_to_expression_complete_word_point): ... this. + (advance_to_filename_complete_word_point): New. + * completer.h (advance_to_filename_complete_word_point): New + declaration. + +2019-06-13 Pedro Alves <palves@redhat.com> + + * compile/compile.c: Include "cli/cli-option.h". + (compile_print_value): Scope data pointer is now a + value_print_options pointer; adjust. + (compile_print_command): Process options. Scope data pointer is + now a value_print_options pointer; adjust. + (_initialize_compile): Update "compile print"'s help to include + supported options. Install a completer for "compile print". + * cp-valprint.c (show_vtblprint, show_objectprint) + (show_static_field_print): Delete. + (_initialize_cp_valprint): Don't install "set print + static-members", "set print vtbl", "set print object" here. + * printcmd.c: Include "cli/cli-option.h" and + "common/gdb_optional.h". + (print_command_parse_format): Rework to fill in a + value_print_options instead of a format_data. + (print_value): Change parameter type from format_data pointer to + value_print_options reference. Adjust. + (print_command_1): Process options. Adjust to pass down a + value_print_options. + (print_command_completer): New. + (_initialize_printcmd): Install print_command_completer as + handle_brkchars completer for the "print" command. Update + "print"'s help to include supported options. + * valprint.c: Include "cli/cli-option.h". + (show_vtblprint, show_objectprint, show_static_field_print): Moved + here from cp-valprint.c. + (boolean_option_def, uinteger_option_def) + (value_print_option_defs, make_value_print_options_def_group): + New. Use gdb::option::add_setshow_cmds_for_options to install + "set print elements", "set print null-stop", "set print repeats", + "set print pretty", "set print union", "set print array", "set + print address", "set print symbol", "set print array-indexes". + * valprint.h: Include <string> and "cli/cli-option.h". + (make_value_print_options_def_group): Declare. + (print_value): Change parameter type from format_data pointer to + value_print_options reference. + (print_command_completer): Declare. + +2019-06-13 Pedro Alves <palves@redhat.com> + + * Makefile.in (SUBDIR_CLI_SRCS): Add cli/cli-option.c. + (COMMON_SFILES): Add maint-test-settings.c. + * cli/cli-decode.c (boolean_enums): New global, factored out from + ... + (add_setshow_boolean_cmd): ... here. + * cli/cli-decode.h (boolean_enums): Declare. + * cli/cli-option.c: New file. + * cli/cli-option.h: New file. + * cli/cli-setshow.c (parse_cli_boolean_value(const char **)): New, + factored out from ... + (parse_cli_boolean_value(const char *)): ... this. + (is_unlimited_literal): Change parameter type to pointer to + pointer. Adjust and advance ARG pointer. + (parse_cli_var_uinteger, parse_cli_var_zuinteger_unlimited) + (parse_cli_var_enum): New, factored out from ... + (do_set_command): ... this. Adjust. + * cli/cli-setshow.h (parse_cli_boolean_value) + (parse_cli_var_uinteger, parse_cli_var_zuinteger_unlimited) + (parse_cli_var_enum): Declare. + * cli/cli-utils.c: Include "cli/cli-option.h". + (get_ulongest): New. + * cli/cli-utils.h (get_ulongest): Declare. + (check_for_argument): New overloads. + * maint-test-options.c: New file. + +2019-06-13 Pedro Alves <palves@redhat.com> + + * cli/cli-utils.c (number_or_range_parser::get_number): Do not + parse a range if "-" is at the end of the string. + +2019-06-13 Pedro Alves <palves@redhat.com> + + * cli/cli-setshow.c (parse_auto_binary_operation) + (parse_cli_boolean_value): Don't allow "o". + +2019-06-13 Pedro Alves <palves@redhat.com> + + * Makefile.in (COMMON_SFILES): Add maint-test-settings.c. + * NEWS: Mention maint test-settings KIND. + * maint-test-settings.c: New file. + +2019-06-13 Pedro Alves <palves@redhat.com> + + * cli/cli-decode.c (add_setshow_cmd_full): Remove "show" + completer. + (add_setshow_string_cmd, add_setshow_string_noescape_cmd): Remove + "set" completers. + +2019-06-13 Pedro Alves <palves@redhat.com> + + * cli/cli-setshow.c (do_set_command) <var_enum>: Detect junk + after item. + +2019-06-13 Pedro Alves <palves@redhat.com> + + * cli/cli-setshow.c (is_unlimited_literal): Allow abbreviations. + +2019-06-13 Pedro Alves <palves@redhat.com> + + * ax-gdb.c (agent_command_1): Remove skip_spaces call. + * breakpoint.c (watch_maybe_just_location): Remove skip_spaces + call. + * cli/cli-cmds.c (apropos_command): Remove skip_spaces call. + * cli/cli-utils.c (extract_info_print_args): Remove skip_spaces + calls. + (check_for_argument): Skip spaces after argument. + +2019-06-13 Pedro Alves <palves@redhat.com> + + * thread.c (thread_apply_command): Adjust TID parsing. + * tid-parse.c (tid_range_parser::finished): Ensure parsing end is + detected before end of string. + (tid_is_in_list): Error out if LIST is invalid. + +2019-06-13 Pedro Alves <palves@redhat.com> + + * completer.c (complete_line_internal_1): Rewind completion word + point. + (completion_tracker::advance_custom_word_point_by): Change + parameter type to int. + * completer.h (completion_tracker::advance_custom_word_point_by): + Likewise. + +2019-06-13 Pedro Alves <palves@redhat.com> + + * completer.c (advance_to_completion_word): Handle delimiters. + +2019-06-11 Bernhard Heckel <bernhard.heckel@intel.com> + + * dwarf2read.c (add_partial_symbol): Skip nameless modules. + +2019-06-11 Tom Tromey <tom@tromey.com> + + * common/common-utils.c (xmalloc, xrealloc, xcalloc) + (xmalloc_failed): Move to alloc.c. + * alloc.c: New file. + * Makefile.in (COMMON_SFILES): Add alloc.c. + +2019-06-11 Tom Tromey <tom@tromey.com> + + * nat/linux-waitpid.c: Don't include server.h. + (linux_debug): Remove. + (my_waitpid): Update. + +2019-06-11 Tom Tromey <tromey@adacore.com> + + * infcall.c (_initialize_infcall): Remove trailing newline from + help. + * user-regs.c (_initialize_user_regs): Remove trailing newline + from help. + * typeprint.c (_initialize_typeprint): Remove trailing newline + from help. + * reverse.c (_initialize_reverse): Remove trailing newlines from + help. + * tracepoint.c (_initialize_tracepoint): Remove trailing newlines + from help. + * language.c (add_set_language_command): Remove trailing newline + from help. + * infcmd.c (_initialize_infcmd): Remove trailing newlines from + help. + * disasm.c (_initialize_disasm): Remove trailing newline from + help. + * top.c (init_main): Remove trailing newline from help. + * interps.c (_initialize_interpreter): Remove trailing newline + from help. + * btrace.c (_initialize_btrace): Remove trailing newlines from + help. + * breakpoint.c (_initialize_breakpoint): Remove trailing newline + from help. + * python/python.c (_initialize_python): Remove trailing newline + from help. + * spu-tdep.c (_initialize_spu_tdep): Remove trailing newlines from + help. + * tui/tui-win.c (_initialize_tui_win): Remove trailing newlines + from help. Reformat some text. + * tui/tui-stack.c (_initialize_tui_stack): Remove trailing newline + from help. + * tui/tui-layout.c (_initialize_tui_layout): Remove trailing + newline from help. + +2019-06-11 Tom Tromey <tromey@adacore.com> + + * darwin-nat.c (darwin_decode_exception_message) + (darwin_decode_message, darwin_nat_target::kill): Fix shadowing. + +2019-06-10 Andrew Burgess <andrew.burgess@embecosm.com> + + * valops.c (value_slice): Check for not allocated or not + associated values. + +2019-06-10 Tom de Vries <tdevries@suse.de> + + PR gdb/24618 + * dwarf2read.c (struct mapped_index::symbol_name_slot_invalid): Make + sure an empty slot (defined by a 32-bit zero pair) is recognized as + invalid. + +2019-06-10 Tom de Vries <tdevries@suse.de> + + PR gdb/24611 + * linespec.c (linespec_lexer_lex_string): Remove incorrect + "++(PARSER_STREAM (parser))" for "[abi"-prefixed colon. Add assert. + +2019-06-10 Tom de Vries <tdevries@suse.de> + + PR symtab/24545 + * symtab.c (struct demangled_name_entry): Add language field. + (symbol_set_names): Revert "[gdb/symtab] Fix language of duplicate + static minimal symbol". Set and use language field. + +2019-06-10 Tom Tromey <tromey@adacore.com> + + * ada-lang.c (_initialize_ada_language): Update help text. + +2019-06-10 Tom Tromey <tromey@adacore.com> + + * m32c-tdep.c (m32c_m16c_address_to_pointer): Don't end warning + with a newline. + * guile/guile.c (handle_boot_error): Don't end warning with a + newline. + * cli/cli-cmds.c (exit_status_set_internal_vars): Don't end + warning with a newline. + * s12z-tdep.c (s12z_skip_prologue): Don't end warning with a + newline. + (s12z_frame_cache): Likewise. + * dwarf-index-cache.c (index_cache::store): Don't end warning with + a newline. + * solib-svr4.c (disable_probes_interface): Don't end warning with + a newline. + * nat/fork-inferior.c (fork_inferior): Don't end warning with a + newline. + * python/python.c (do_finish_initialization): Don't end warning + with a newline. + +2019-06-10 Tom Tromey <tom@tromey.com> + + * python/py-breakpoint.c (gdbpy_breakpoint_created) + (gdbpy_breakpoint_deleted, gdbpy_breakpoint_modified): Use + gdbpy_enter. + +2019-06-10 Tom Tromey <tromey@adacore.com> + + * elfread.c (elf_read_minimal_symbols): Don't set the dbx objfile + data. + (elf_new_init): Don't call stabsread_new_init. + * dbxread.c (coffstab_build_psymtabs): Set dbx objfile data. + (elfstab_build_psymtabs): Likewise. Call stabsread_new_init. + * coffread.c (coff_symfile_init): Don't set the dbx objfile data. + +2019-06-10 Tom de Vries <tdevries@suse.de> + + PR symtab/16264 + PR symtab/24517 + * dwarf2read.c (read_func_scope): Handle DW_AT_main_subprogram. + +2019-06-06 РуÑлан Ижбулатов <lrn1986@gmail.com> + + * source.c (find_and_open_source): Also rewrite relative file + names. + +2019-04-26 Amos Bird <amosbird@gmail.com> + + * annotate.c (annotate_thread_exited): Add "thread-exited" + annotation. + +2019-06-06 Tom Tromey <tromey@adacore.com> + + * maint.h (class scoped_command_stats): Use + DISABLE_COPY_AND_ASSIGN. + <print_time>: New method. + * maint.c (scoped_command_stats, ~scoped_command_stats): Call + print_time. + (scoped_command_stats::print_time): New method. + +2019-06-05 Andrew Burgess <andrew.burgess@embecosm.com> + + * riscv-tdep.c (riscv_insn::decode): Gracefully ignore + instructions of lengths 6 or 8 bytes. + +2019-06-04 Pedro Alves <palves@redhat.com> + + * common/gdb_unique_ptr.h (make_unique_xstrdup): New. + + * ada-lang.c (catch_ada_completer): Use make_unique_xstrdup. + * breakpoint.c (condition_completer): Likewise. + * cli/cli-dump.c (scan_expression): Likewise. + * common/filestuff.c (mkdir_recursive): Likewise. + * common/gdb_tilde_expand.c (gdb_tilde_expand_up) + * common/pathstuff.c (gdb_realpath, gdb_realpath_keepfile) + (gdb_abspath): Likewise. + * compile/compile-cplus-types.c + (compile_cplus_instance::decl_name): Likewise. + * completer.c (complete_explicit_location): + (signal_completer, reg_or_group_completer_1): Likewise. + * cp-support.c (cp_remove_params_if_any): Likewise. + * fbsd-tdep.c (fbsd_core_vnode_path): Likewise. + * guile/scm-safe-call.c (gdbscm_safe_eval_string): Likewise. + * infcmd.c (strip_bg_char): Likewise. + * linespec.c (copy_token_string): Likewise. + * mi/mi-main.c (output_cores): Likewise. + * psymtab.c (psymtab_search_name): + * symfile.c (test_set_ext_lang_command): Likewise. + * target.c (target_fileio_read_stralloc): Likewise. + * tui/tui-regs.c (tui_reggroup_completer): Likewise. + * value.c (complete_internalvar): Likewise. + +2019-06-04 Christian Biesinger <cbiesinger@google.com> + + Add objfile property to gdb.Type. + * NEWS: Mention Python API addition. + * python/py-type.c (typy_get_objfile): New method. + +2019-06-03 Philippe Waroquiers <philippe.waroquiers@skynet.be> + + * NEWS: Mention the new set|show style [title|highlight]. + Mention changes to "show style", "help" and "apropos". + +2019-06-03 Philippe Waroquiers <philippe.waroquiers@skynet.be> + + * cli/cli-decode.h (apropos_cmd): Add verbose argument. + * cli/cli-decode.c (apropos_cmd): Likewise. Use print_doc_of_command + instead of print_help_for_command. + (print_doc_of_command): New function. + (help_list): Add 'apropos -v word' suggestion. + (print_help_for_command): Style the command name using title style. + * cli/cli-cmds.c (apropos_command): Parse optional -v flag. + (_initialize_cli_cmds): Describe -v in apropos_command help. + +2019-06-03 Philippe Waroquiers <philippe.waroquiers@skynet.be> + + * cli/cli-style.h (cli_style_option): Add name in constructor, + add m_name class member, add constructor with intensity, + add name class function. + (cli_style_option::add_setshow_commands): Remove name argument. + (highlight_style, title_style): New styles. + * cli/cli-style.c (do_show): New function that shows a style + characteristic styling the style name with itself. + (set_style_name): New function. + (STYLE_ADD_SETSHOW_COMMANDS): Remove NAME arguments. + Update all callers according to the changes in cli/cli-style.h. + * utils.h (fputs_highlighted): New function. + * utils.c (fputs_highlighted): Likewise. + +2019-05-31 Philippe Waroquiers <philippe.waroquiers@skynet.be> + + * NEWS: Mention new pipe command and new convenience variables. + +2019-05-31 Philippe Waroquiers <philippe.waroquiers@skynet.be> + + * cli/cli-cmds.c (pipe_command): New function. + (_initialize_cli_cmds): Call add_com for pipe_command. + Define | as an alias for pipe. + (exit_status_set_internal_vars): New function. + (shell_escape): Call exit_status_set_internal_vars. + cli/cli-decode.c (find_command_name_length): Recognize | as + a single character command. + +2019-05-31 Philippe Waroquiers <philippe.waroquiers@skynet.be> + + * gdbcmd.h (execute_command_to_ui_file): New declaration. + top.c (execute_command_to_ui_file): New function, mostly a copy + of execute_command_to_string. + (execute_command_to_string): Implement by calling + execute_command_to_ui_file. + +2019-05-31 Philippe Waroquiers <philippe.waroquiers@skynet.be> + + * top.h (saved_command_line): Remove declaration. + * top.c (previous_saved_command_line, previous_repeat_arguments): + New variables. + (saved_command_line): Make static, define together with other + 'repeat variables'. + (dont_repeat): Clear repeat_arguments. + (repeat_previous, get_saved_command_line, save_command_line): + New functions. + (gdb_init): Initialize saved_command_line + and previous_saved_command_line. + * main.c (captured_main_1): Remove saved_command_line initialization. + * event-top.c (handle_line_of_input): Update to use + the new 'repeat' related functions instead of direct access to + saved_command_line. + * command.h (repeat_previous, get_saved_command_line, + save_command_line): New declarations. + (dont_repeat): Add comment. + +2019-05-30 Tom Tromey <tromey@adacore.com> + + * gdbtypes.h (struct range_bounds) <flag_upper_bound_is_count>: + Fix comment. + (TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED): Rewrite comment. + +2019-05-30 Jan Vrany <jan.vrany@fit.cvut.cz> + + PR cli/24587 + * completer.c (complete): Initialize variable word. + +2019-05-29 Sergio Durigan Junior <sergiodj@redhat.com> + + Ref.: https://bugzilla.redhat.com/show_bug.cgi?id=1708192 + Ref.: https://bugzilla.redhat.com/show_bug.cgi?id=1715008 + * dwarf2read.c (dwarf_decode_macro_bytes): Move check to see if + 'body' is NULL to the outter 'if', protecting the '!is_define' + situation as well. + +2019-05-29 Tom Tromey <tromey@adacore.com> + + * dwarf2read.c (partial_die_parent_scope): Call dwarf_tag_name. + (dwarf_unknown): New function. + (dwarf_tag_name, dwarf_attr_name, dwarf_form_name) + (dwarf_type_encoding_name): Use dwarf_unknown. + +2019-05-29 Tom Tromey <tromey@adacore.com> + + PR c++/20020: + * cp-valprint.c (cp_print_value_fields): Call + cp_print_static_field inside "try". + +2019-05-29 Tom Tromey <tromey@adacore.com> + + * inflow.c (struct terminal_info): Add default operator=. + * configure: Rebuild. + * warning.m4 (AM_GDB_WARNINGS): Add -Wdeprecated-copy, + -Wdeprecated-copy-dtor, -Wredundant-move. + +2019-05-29 Tom Tromey <tromey@adacore.com> + + * NEWS: Add entry. + * infcmd.c (print_return_value_1): Handle finish_print + option. + (show_print_finish): New function. + (_initialize_infcmd): Add "set/show print finish" commands. + * valprint.c (user_print_options): Initialize new member. + * valprint.h (struct value_print_options) <finish_print>: New + member. + +2019-05-28 Tom Tromey <tromey@adacore.com> + + * ada-lang.c (ada_remove_Xbn_suffix) + (find_old_style_renaming_symbol) + (parse_old_style_renaming): Remove. + (ada_find_renaming_symbol): Don't call + find_old_style_renaming_symbol. + (ada_is_renaming_symbol): Rename from + ada_find_renaming_symbol. Remove "block" parameter. Return + bool. Now static. + (ada_read_var_value): Update and simplify. + * ada-exp.y (write_var_or_type): Remove old code. + +2019-05-28 Alan Hayward <alan.hayward@arm.com> + + PR gdb/25010 + * event-top.c: Remove include comment. + * inflow.c (class scoped_ignore_sigttou): Move from here... + * inflow.h (class scoped_ignore_sigttou): ...to here. + * ser-unix.c (hardwire_drain_output): Block SIGTTOU during drain. + * top.c: Remove include comment. + +2019-05-27 Tom Tromey <tom@tromey.com> + + * NEWS: Fix typo. + +2019-05-22 Tom Tromey <tromey@adacore.com> + + * target.c (target_follow_exec): Constify parameter. + * target-delegates.c: Rebuild. + * remote.c (remote_target::follow_exec): Constify parameter. + * infrun.c (follow_exec): Constify parameter. + * target.h (struct target_ops) <follow_exec>: Constify parameter. + (target_follow_exec): Likewise. + +2019-05-22 Alan Hayward <alan.hayward@arm.com> + + * aarch64-tdep.c (aarch64_execute_dwarf_cfa_vendor_op): Treat + DW_CFA_AARCH64_negate_ra_state as nop on non pauth targets. + +2019-05-22 Alan Hayward <alan.hayward@arm.com> + + * NEWS: Add debugredirect and testsuite sections. + +2019-05-22 Simon Cook <simon.cook@embecosm.com> + + * riscv-tdep.c (riscv_gdbarch_init): Support determining flen from + target descriptions using exclusively floating point register name + aliases. + +2019-05-21 Andrew Burgess <andrew.burgess@embecosm.com> + + PR gdb/18644: + * f-lang.c (build_fortran_types): Handle the case where + gdbarch_floatformat_for_type returns a nullptr. + +2019-05-21 Tom de Vries <tdevries@suse.de> + + PR cli/24587 + * cli/cli-cmds.c (complete_command): Fix use of unitialized variable. + +2019-05-18 Andrew Burgess <andrew.burgess@embecosm.com> + + PR gdb/18644: + * f-lang.c (build_fortran_types): Use floatformats_ia64_quad for + 16-byte floats. + * i386-tdep.c (i386_floatformat_for_type): Use + floatformats_ia64_quad for the 16-byte floating point component + within a fortran 32-byte complex number. + +2019-05-18 Andrew Burgess <andrew.burgess@embecosm.com> + + * dwarf2read.c (struct cu_partial_die_info): Add constructor, + delete default constructor. + (find_partial_die): Update to return const struct. + (partial_die_parent_scope): Move variable declaration into scope + of its use and change its type to auto. + (guess_partial_die_structure_name): Likewise. + (partial_die_info::fixup): Likewise. + +2019-05-17 Tom Tromey <tromey@adacore.com> + + * source.c (find_and_open_source): Remove cast. + +2019-05-17 Tom Tromey <tromey@adacore.com> + + * annotate.c (annotate_source): Make "filename" const. + * annotate.h (annotate_source): Use const. + +2019-05-17 Alan Hayward <alan.hayward@arm.com> + + * disasm.c (set_disassembler_options): Send errors to stderr. + +2019-05-17 Alan Hayward <alan.hayward@arm.com> + + * cli/cli-interp.c (struct saved_output_files): Add saved entry. + (cli_interp_base::set_logging): Check debug_redirect. + * cli/cli-interp.h (set_logging): Add debug_redirect parameter. + * cli/cli-logging.c (debug_redirect): Add static variable. + (pop_output_files): Add default param. + (handle_redirections): Print debug setting. + (show_logging_command): Likewise. + (_initialize_cli_logging): Add debugredirect command. + * interps.c (current_interp_set_logging): Add debug_redirect + parameter. + * interps.h (set_logging): Add debug_redirect parameter. + (current_interp_set_logging): Likewise. + * mi/mi-common.h: Likewise. + * mi/mi-interp.c (mi_interp::set_logging): Likewise. + +2019-05-17 Alan Hayward <alan.hayward@arm.com> + Tom Tromey <tromey@adacore.com> + + * cli/cli-interp.c (cli_interp_base::set_logging): Create tee_file + directly. + * cli/cli-interp.h (make_logging_output): Remove declaration. + * cli/cli-logging.c (make_logging_output): Remove function. + * mi/mi-interp.c (mi_interp::set_logging): Create tee_file + directly. + * ui-file.c (tee_file::tee_file): Remove bools. + (tee_file::~tee_file): Remove deletes. + * ui-file.h (tee_file): Remove bools. + +2019-01-28 Jan Vrany <jan.vrany@fit.cvut.cz> + + * mi/mi-cmds.h (mi_cmd_complete): New function. + * mi/mi-main.c (mi_cmd_complete): Likewise. + * mi/mi-cmds.c: Define new MI command -complete. + * NEWS: Mention new -complete command. + +2019-01-24 Jan Vrany <jan.vrany@fit.cvut.cz> + + * completer.h (complete): New function. + * completer.c (complete): Likewise. + * cli/cli-cmds.c: (complete_command): Update to use new complete() + function defined in completer.h. + +2019-05-17 Jan Vrany <jan.vrany@fit.cvut.cz> + + * MAINTAINERS (Write After Approval): Add myself. + +2019-05-17 Tom de Vries <tdevries@suse.de> + + PR gdb/24094 + * dwarf2read.c (struct cu_partial_die_info): New struct. + (find_partial_die): Return cu_partial_die_info. + (partial_die_parent_scope, guess_partial_die_structure_name) + (partial_die_info::fixup): Handle new return type of find_partial_die. + +2019-05-16 Sergio Durigan Junior <sergiodj@redhat.com> + + PR breakpoints/24541 + * stap-probe.c (stap_parse_register_operand): Make "regname" an + "std::string", simplifying the algorithm. + +2019-05-16 Sergio Durigan Junior <sergiodj@redhat.com> + + * stap-probe.c (handle_stap_probe): Fix complaint formatting. + (stap_static_probe_ops::get_probes): Likewise. + +2019-05-16 Sergio Durigan Junior <sergiodj@redhat.com> + + * stap-probe.c (stap_parse_register_operand): Make "if (*p->arg == + '-')" and "else if". + (stap_parse_single_operand): Join checks for + "gdbarch_stap_parse_special_token_p" and + "gdbarch_stap_parse_special_token" in the same "if" statement. + Invert check when verifying for operation on register + displacement. + +2019-05-16 Sergio Durigan Junior <sergiodj@redhat.com> + + * stap-probe.c (stap_get_opcode): Update comment. + (stap_get_expected_argument_type): Likewise. + (handle_stap_probe): Likewise. + +2019-05-16 Sergio Durigan Junior <sergiodj@redhat.com> + + * i386-tdep.c (i386_stap_parse_special_token_triplet): Change + return type to 'bool'. Adjust comment. Use 'bool' when + appropriate. + (i386_stap_parse_special_token_three_arg_disp): Likewise. + * stap-probe.c (stap_parse_argument_1): Likewise. + (stap_is_operator): Likewise. + (stap_is_generic_prefix): Likewise. + (stap_is_register_prefix): Likewise. + (stap_is_register_indirection_prefix): Likewise. + (stap_is_integer_prefix): Likewise. + (stap_generic_check_suffix): Likewise. + (stap_check_integer_suffix): Likewise. + (stap_check_register_suffix): Likewise. + (stap_check_register_indirection_suffix): Likewise. + (stap_parse_register_operand): Likewise. + (stap_parse_single_operand): Likewise. + (stap_parse_argument_1): Likewise. + (stap_probe::get_argument_count): Likewise. + (stap_is_operator): Likewise. + +2019-05-16 Tom Tromey <tromey@adacore.com> + + * darwin-nat.c (thread_info_from_private_thread_info): Add struct + keyword to foreach. + +2019-05-15 Simon Marchi <simon.marchi@efficios.com> + + * linux-thread-db.c (try_thread_db_load_1): Change return type + to bool. + (try_thread_db_load): Likewise. + (try_thread_db_load_from_pdir_1): Likewise. + (try_thread_db_load_from_pdir): Likewise. + (try_thread_db_load_from_sdir): Likewise. + (try_thread_db_load_from_dir): Likewise. + (thread_db_load_search): Likewise. + (has_libpthread): Likewise. + (thread_db_load): Likewise. + +2019-05-15 Sergio Durigan Junior <sergiodj@redhat.com> + + Ref.: https://bugzilla.redhat.com/show_bug.cgi?id=1708192 + * dwarf2read.c (parse_macro_definition): Check whether 'body' is + NULL, and complain/return if that's the case. + +2019-05-15 John Darrington <john@darrington.wattle.id.au> + + * s12z-tdep.c (push_pull_get_stack_adjustment): New function. + (advance, posn, abstract_read_memory): New functions. + [struct mem_read_abstraction]: New struct. + (s12z_frame_cache): Use opcodes API to interpret stack frame code. + +2019-05-14 Tom Tromey <tromey@adacore.com> + + * ada-lang.c (coerce_unspec_val_to_type): Only set address when + value is not lval_memory. + +2019-05-14 Tom Tromey <tromey@adacore.com> + + * solib.c (info_sharedlibrary_command): Style the file name. + +2019-05-14 Alan Hayward <alan.hayward@arm.com> + + * aarch64-tdep.c (aarch64_vnh_type): Add half view. + (aarch64_vnv_type): Likewise. + * target-descriptions.c (make_gdb_type): Add TDESC_TYPE_IEEE_HALF. + * common/tdesc.c: Likewise. + * common/tdesc.h (enum tdesc_type_kind): Likewise. + * features/aarch64-fpu.c (create_feature_aarch64_fpu): Regenerate. + * features/aarch64-fpu.xml: Add ieee half view. + * features/aarch64-sve.c (create_feature_aarch64_fpu): Likewise. + * gdbtypes.c (gdbtypes_post_init): Add builtin_half + * gdbtypes.h (struct builtin_type): Likewise. + (struct objfile_type): Likewise. + +2019-05-12 Paul Naert <paul.naert@polymtl.ca> + + * language.c (language_sniff_from_mangled_name): Fix "langauge" + typo. + * location.h (string_to_event_location): Likewise. + +2019-05-11 Joel Brobecker <brobecker@adacore.com> + + GDB 8.3 released. + +2019-05-10 Simon Marchi <simon.marchi@efficios.com> + + * breakpoint.h (fix_multi_location_breakpoint_output_globally): + New variable declaration. + * breakpoint.c (fix_multi_location_breakpoint_output_globally): + New variable. + (print_one_breakpoint): Use ui_out::test_flags and new global + variable to compute use_fixed_output. + * mi/mi-main.h (mi_multi_location_breakpoint_output_fixed): + Remove. + * mi/mi-main.c (fix_multi_location_breakpoint_output): Remove. + (mi_multi_location_breakpoint_output_fixed): Remove. + (mi_cmd_fix_multi_location_breakpoint_output): Adjust to set the + new variable. + * mi/mi-out.c (mi_ui_out::mi_ui_out): Set + fix_multi_location_breakpoint_output flag if version >= 3. + * ui-out.h (enum ui_out_flag) + <fix_multi_location_breakpoint_output>: New enumerator. + +2019-05-10 Simon Marchi <simon.marchi@efficios.com> + + * contrib/cc-with-tweaks.sh: Validate dwz's work. + +2019-05-10 Tom Tromey <tromey@adacore.com> + + * ada-lang.c (catch_ada_completer): New function. + (_initialize_ada_language): Use it. + +2019-05-10 Tom Tromey <tromey@adacore.com> + + * thread.c (print_thread_info): Make "requested_threads" const. + * gdbthread.h (print_thread_info): Make "requested_threads" + const. + * ada-tasks.c (print_ada_task_info): Make "taskno_str" const. + * ada-lang.h (print_ada_task_info): Make "taskno_str" const. + +2019-05-08 Tom Tromey <tom@tromey.com> + + * gdbtypes.c (objfile_type_data): Change type. + (objfile_type, _initialize_gdbtypes): Update. + +2019-05-08 Tom Tromey <tom@tromey.com> + + * dwarf2-frame.c (dwarf2_frame_objfile_data): Change type. + (dwarf2_frame_find_fde, dwarf2_build_frame_info) + (_initialize_dwarf2_frame): Update. + +2019-05-08 Tom Tromey <tom@tromey.com> + + * objc-lang.c (objc_objfile_data): Change type. + (find_methods): Update. + (_initialize_objc_lang): Remove. + +2019-05-08 Tom Tromey <tom@tromey.com> + + * stabsread.c (rs6000_builtin_type_data): Change type. + (rs6000_builtin_type, _initialize_stabsread): Update. + +2019-05-08 Tom Tromey <tom@tromey.com> + + * mips-tdep.c (mips_pdr_data): Remove. + (_initialize_mips_tdep): Update. + +2019-05-08 Tom Tromey <tom@tromey.com> + + * hppa-tdep.c (hppa_objfile_priv_data): Change type. + (hppa_init_objfile_priv_data, read_unwind_info) + (find_unwind_entry, _initialize_hppa_tdep): Update. + +2019-05-08 Tom Tromey <tom@tromey.com> + + * elfread.c (elf_objfile_gnu_ifunc_cache_data): Change type. + (elf_gnu_ifunc_record_cache): Update. Don't allocate hash table + on obstack. + (elf_gnu_ifunc_resolve_by_cache, _initialize_elfread): Update. + +2019-05-08 Tom Tromey <tom@tromey.com> + + * mdebugread.c (basic_type_data): Change type. + (basic_type, _initialize_mdebugread): Update. + +2019-05-08 Tom Tromey <tom@tromey.com> + + * common/gdb_unique_ptr.h (struct noop_deleter): New. + +2019-05-08 Tom Tromey <tom@tromey.com> + + * nto-tdep.c (nto_inferior_data_reg): Change type. + (nto_inferior_data): Update. + (nto_inferior_data_cleanup, nto_new_inferior_data) + (_initialize_nto_tdep): Remove. + * nto-tdep.h (struct nto_inferior_data): Add initializers. + +2019-05-08 Tom Tromey <tom@tromey.com> + + * ada-lang.c (struct ada_inferior_data): Add initializers. + (ada_inferior_data): Change type. + (ada_inferior_data_cleanup): Remove. + (get_ada_inferior_data, ada_inferior_exit) + (struct ada_pspace_data): Add initializers, destructor. + (ada_pspace_data_handle): Change type. + (get_ada_pspace_data): Update. + (ada_pspace_data_cleanup): Remove. + +2019-05-08 Tom Tromey <tom@tromey.com> + + * coffread.c (struct coff_symfile_info): Add initializers. + (coff_objfile_data_key): Move lower. Change type. + (coff_symfile_init, coff_symfile_read, _initialize_coffread): + Update. + (coff_free_info): Remove. + +2019-05-08 Tom Tromey <tom@tromey.com> + + * fbsd-tdep.c (struct fbsd_pspace_data): Add initializers. + (fbsd_pspace_data_handle): Move lower. Change type. + (get_fbsd_pspace_data): Update. + (fbsd_pspace_data_cleanup): Remove. + (_initialize_fbsd_tdep): Update. + +2019-05-08 Tom Tromey <tom@tromey.com> + + * ada-tasks.c (ada_tasks_pspace_data_handle): Change type. + (get_ada_tasks_pspace_data): Update. + (ada_tasks_pspace_data_cleanup): Remove. + (_initialize_tasks): Update. + (ada_tasks_inferior_data_handle): Change type. + (get_ada_tasks_inferior_data): Update. + (ada_tasks_inferior_data_cleanup): Remove. + (struct ada_tasks_pspace_data): Add initializers. + +2019-05-08 Tom Tromey <tom@tromey.com> + + * symfile.h (struct sym_probe_fns) <sym_get_probes>: Change type. + * symfile-debug.c (debug_sym_get_probes): Change type. + * stap-probe.c (handle_stap_probe): + (stap_static_probe_ops::get_probes): Change type. + * probe.h (class static_probe_ops) <get_probes>: Change type. + * probe.c (class any_static_probe_ops) <get_probes>: Change type. + (parse_probes_in_pspace): Update. + (find_probes_in_objfile, find_probe_by_pc, collect_probes): + Update. + (any_static_probe_ops::get_probes): Change type. + * elfread.c (elfread_data): New typedef. + (probe_key): Change type. + (elf_get_probes): Likewise. Update. + (probe_key_free): Remove. + (_initialize_elfread): Update. + * dtrace-probe.c (class dtrace_static_probe_ops) <get_probes>: + Change type. + (dtrace_process_dof_probe, dtrace_process_dof) + (dtrace_static_probe_ops::get_probe): Change type. + +2019-05-08 Tom Tromey <tom@tromey.com> + + * xcoffread.c (struct xcoff_symfile_info): Rename from + coff_symfile_info. Add initializers. + (xcoff_objfile_data_key): Move lower. Change type. + (XCOFF_DATA): Rewrite. + (xcoff_free_info): Remove. + (xcoff_symfile_init, _initialize_xcoffread, read_xcoff_symtab) + (read_symbol, read_symbol_lineno, find_linenos, init_stringtab) + (xcoff_initial_scan): Update. + +2019-05-08 Tom Tromey <tom@tromey.com> + + * solib-svr4.c (struct svr4_info): Add initializers and + destructor. + <probes_table>: Now an htab_up. + (solib_svr4_pspace_data): Change type. + (free_probes_table): Simplify. + (~svr4_info): Rename from svr4_pspace_data_cleanup. + (get_svr4_info, probes_table_htab_remove_objfile_probes) + (probes_table_remove_objfile_probes, register_solib_event_probe) + (solib_event_probe_at, svr4_update_solib_event_breakpoint) + (_initialize_svr4_solib): Update. + +2019-05-08 Tom Tromey <tom@tromey.com> + + * remote.c (remote_pspace_data): Change type. + (remote_pspace_data_cleanup): Remove. + (get_remote_exec_file, set_pspace_remote_exec_file) + (_initialize_remote): Update. + +2019-05-08 Tom Tromey <tom@tromey.com> + + * breakpoint.c (breakpoint_objfile_key): Change type. + (get_breakpoint_objfile_data): Update. + (free_breakpoint_objfile_data): Remove. + (_initialize_breakpoint): Update. + +2019-05-08 Tom Tromey <tom@tromey.com> + + * linux-tdep.c (struct linux_info): Add initializers. + (linux_inferior_data): Move. Change type. + (invalidate_linux_cache_inf): Update. + (linux_inferior_data_cleanup): Remove. + (get_linux_inferior_data, _initialize_linux_tdep): Update. + +2019-05-08 Tom Tromey <tom@tromey.com> + + * auxv.c (auxv_inferior_data): Move. Change type. + (auxv_inferior_data_cleanup): Remove. + (invalidate_auxv_cache_inf): Rewrite. + (get_auxv_inferior_data, _initialize_auxv): Update. + +2019-05-08 Tom Tromey <tom@tromey.com> + + * symfile-debug.c (struct debug_sym_fns_data): Add initializers. + (symfile_debug_objfile_data_key): Change type. + (symfile_debug_installed, debug_qf_has_symbols) + (debug_qf_find_last_source_symtab) + (debug_qf_forget_cached_source_info) + (debug_qf_map_symtabs_matching_filename, debug_qf_lookup_symbol) + (debug_qf_print_stats, debug_qf_dump) + (debug_qf_expand_symtabs_for_function) + (debug_qf_expand_all_symtabs) + (debug_qf_expand_symtabs_with_fullname) + (debug_qf_map_matching_symbols) + (debug_qf_expand_symtabs_matching) + (debug_qf_find_pc_sect_compunit_symtab) + (debug_qf_map_symbol_filenames) + (debug_qf_find_compunit_symtab_by_address, debug_sym_get_probes) + (debug_sym_new_init, debug_sym_init, debug_sym_read) + (debug_sym_read_psymbols, debug_sym_finish, debug_sym_offsets) + (debug_sym_read_linetable, debug_sym_relocate): Update. + (symfile_debug_free_objfile): Remove. + (install_symfile_debug_logging, _initialize_symfile_debug): + Update. + +2019-05-08 Tom Tromey <tom@tromey.com> + + * dwarf2read.h (struct dwarf2_per_objfile): Don't inherit from + allocate_on_obstack. + * dwarf2read.c (dwarf2_objfile_data_key): Change type. + (get_dwarf2_per_objfile): Update. + (set_dwarf2_per_objfile): Remove. + (dwarf2_has_info, dwarf2_get_section_info): Update. + (dwarf2_free_objfile): Remove. + (_initialize_dwarf2_read): Update. + +2019-05-08 Tom Tromey <tom@tromey.com> + + * auto-load.c (struct auto_load_pspace_info): Add destructor and + initializers. + <unsupported_script_warning_printed, + script_not_found_warning_printed>: Now bool. + (auto_load_pspace_data): Change type. + (~auto_load_pspace_info): Rename from + auto_load_pspace_data_cleanup. + (get_auto_load_pspace_data, init_loaded_scripts_info) + (clear_section_scripts, maybe_print_unsupported_script_warning) + (maybe_print_script_not_found_warning, _initialize_auto_load): + Update. + +2019-05-08 Tom Tromey <tom@tromey.com> + + * objfiles.c (objfile_pspace_info): Add destructor and + initializers. + (objfiles_pspace_data): Change type. + (~objfile_pspace_info): Rename from objfiles_pspace_data_cleanup. + (get_objfile_pspace_data): Update. + (objfiles_bfd_data): Change type. + (get_objfile_bfd_data): Update. + (objfile_bfd_data_free, _initialize_objfiles): Remove. + +2019-05-08 Tom Tromey <tom@tromey.com> + + * break-catch-syscall.c (catch_syscall_inferior_data): Move. + Change type. + (get_catch_syscall_inferior_data): Update. + (catch_syscall_inferior_data_cleanup): Remove. + (_initialize_break_catch_syscall): Update. + +2019-05-08 Tom Tromey <tom@tromey.com> + + * inflow.c (struct terminal_info): Add destructor and + initializers. + (inflow_inferior_data): Change type. + (~terminal_info): Rename from inflow_inferior_data_cleanup. + (get_inflow_inferior_data, inflow_inferior_exit) + (swap_terminal_info, _initialize_inflow): Update. + +2019-05-08 Tom Tromey <tom@tromey.com> + + * target-dcache.c (target_dcache_cleanup): Remove. + (target_dcache_aspace_key): Change type. + (target_dcache_init_p, target_dcache_invalidate) + (target_dcache_get, target_dcache_get_or_init) + (_initialize_target_dcache): Update. + * dcache.h (struct dcache_deleter): New. + +2019-05-08 Tom Tromey <tom@tromey.com> + + * symtab.c (struct symbol_cache): Add destructor and + initializers. + (symbol_cache_key): Move. Change type. + (make_symbol_cache, free_symbol_cache): Remove. + (get_symbol_cache): Update. + (symbol_cache_cleanup): Remove. + (ALL_PSPACES, symbol_cache_flush) + (maintenance_print_symbol_cache) + (maintenance_print_symbol_cache_statistics, _initialize_symtab): + Update. + +2019-05-08 Tom Tromey <tom@tromey.com> + + * symtab.c (struct main_info): Add destructor and initializers. + (main_progspace_key): Move. Change type. + (get_main_info): Update. + (main_info_cleanup): Remove. + (_initialize_symtab): Update. + +2019-05-08 Tom Tromey <tom@tromey.com> + + * registry.h (DECLARE_REGISTRY): Define the _key class. + +2019-05-08 Andrew Burgess <andrew.burgess@embecosm.com> + + * NEWS: Merge two 'New commands' sections. + +2019-05-08 Joel Brobecker <brobecker@adacore.com> + + * ada-valprint.c (ada_val_print_gnat_array): Remove language + parameter and use Ada language definition instead. + (ada_val_print_ptr): Remove unused language parameter. + (ada_val_print_num): Remove language parameter and use Ada language + definition instead. + (ada_val_print_enum, ada_val_print_flt): Remove unused language + parameter. + (ada_val_print_struct_union, ada_val_print_ref): Remove language + parameter and use Ada language definition instead. + (ada_val_print_1): Update all ada_val_print_xxx calls. + Remove language parameter. + (ada_val_print): Update ada_val_print_1 call. + +2019-05-08 Tom Tromey <tromey@adacore.com> + + * remote.c (remote_hw_watchpoint_limit) + (remote_hw_watchpoint_length_limit, remote_hw_breakpoint_limit): + Now static. + +2019-05-08 Tom Tromey <tromey@adacore.com> + + * maint.c (_initialize_maint_cmds): Move initialization code to + remote.c. + (watchdog, show_watchdog): Move to remote.c. + * remote.c (watchdog, show_watchdog): Move from maint.c. Make + "watchdog" static. + (_initialize_remote): Move initialization code from maint.c. + * defs.h (watchdog): Don't declare. + +2019-05-08 Tom Tromey <tromey@adacore.com> + + * tui/tui-interp.c: Include main.h. + * interps.c: Include main.h. + * main.h (interpreter_p): Declare. + * defs.h (interpreter_p): Don't declare. + +2019-05-08 Tom Tromey <tromey@adacore.com> + + * dwarf2loc.c: Include dwarf2read.h. + * defs.h (read_unsigned_leb128): Don't declare. + * dwarf2read.h (read_unsigned_leb128): Declare. + +2019-05-08 Tom Tromey <tromey@adacore.com> + + * utils.c (fputs_maybe_filtered): Call can_emit_style_escape as a + method. + +2019-05-08 Tom Tromey <tromey@adacore.com> + + * utils.c (fputs_maybe_filtered): Reset style after paging, even + when no wrap column is set. + +2019-05-08 Tom Tromey <tromey@adacore.com> + + * c-lang.c (c_get_string): Handle non-C-style arrays. + +2019-05-08 Tom Tromey <tromey@adacore.com> + + * typeprint.c (print_offset_data::update): Print the bit offset, + not the number of bits remaining. + +2019-05-08 Tom Tromey <tromey@adacore.com> + + * typeprint.c (print_offset_data::maybe_print_hole): Add extra + padding at end of comment. + +2019-05-08 Tom Tromey <tromey@adacore.com> + + * dwarf2loc.c (dwarf2_evaluate_property) <PROP_ADDR_OFFSET>: + Compare main types. + +2019-05-06 Tom Tromey <tom@tromey.com> + + * common/scoped_mmap.c: Include common-defs.h. + * common/scoped_mmap.h: Don't include config.h. + +2019-05-04 Tom Tromey <tom@tromey.com> + + * aarch64-tdep.c (stack_item_t): Remove typedef and DEF_VEC. + (struct aarch64_call_info): Add initializers. + <si>: Now a std::vector. + (pass_on_stack, aarch64_push_dummy_call): Update. + +2019-05-04 Simon Marchi <simon.marchi@efficios.com> + Tom Tromey <tom@tromey.com> + + * ppc-linux-nat.c (thread_points_p): Remove typedef and DEF_VEC. + (ppc_threads): Now a std::vector. Now static. + (hwdebug_find_thread_points_by_tid) + (ppc_linux_nat_target::low_new_thread, ppc_linux_thread_exit): + Update. + +2019-05-04 Tom Tromey <tom@tromey.com> + + * arc-tdep.c (arc_tdesc_init): Return bool. + +2019-05-04 Tom Tromey <tom@tromey.com> + + * arm-linux-nat.c (arm_linux_nat_target::can_use_hw_breakpoint): + Use gdb_assert_not_reached. + +2019-05-04 Tom Tromey <tom@tromey.com> + + * compile/compile-cplus-types.c (compile_cplus_convert_enum): Use + "false". + +2019-05-04 Tom Tromey <tom@tromey.com> + + * arc-tdep.c (arc_tdesc_init): Use bool. + +2019-05-04 Tom Tromey <tom@tromey.com> + + * stack.c (select_frame_for_mi): Use "false", not "FALSE". + +2019-05-04 Tom Tromey <tom@tromey.com> + + * cli/cli-cmds.c (valid_command_p): Return bool. + +2019-05-04 Tom Tromey <tom@tromey.com> + + * cli/cli-decode.c (valid_user_defined_cmd_name_p): Return bool. + * command.h (valid_user_defined_cmd_name_p): Channge return type. + +2019-05-04 Raul Tambre <raul@tambre.ee> + + * python/lib/gdb/prompt.py (_ExtendedPrompt) + <before_prompt_hook, get_show_string>: Fix incorrect use of 'is' + operator for comparison. + +2019-05-04 Tom Tromey <tom@tromey.com> + + * psymtab.c (psymbol_name_matches, match_partial_symbol) + (lookup_partial_symbol, print_partial_symbols) + (recursively_search_psymtabs, sort_pst_symbols, psymbol_hash) + (psymbol_compare): Update. + (add_psymbol_to_bcache): Clear the entire psymbol. + (maintenance_check_psymtabs): Update. + * psympriv.h (struct partial_symbol): Don't derive from + general_symbol_info. + <obj_section, unrelocated_address, address, + set_unrelocated_address>: Update. + <ginfo>: New member. + * dwarf-index-write.c (write_psymbols, debug_names::insert) + (debug_names::write_psymbols): Update. + +2019-05-04 Tom de Vries <tdevries@suse.de> + + * contrib/cc-with-tweaks.sh: Support -n arg. + +2019-05-04 Philippe Waroquiers <philippe.waroquiers@skynet.be> + + * corelow.c (core_target::detach): Ensure frame cache and + register caches are cleared. + inferior.c (exit_inferior_1): Likewise. + +2019-05-03 Sandra Loosemore <sandra@codesourcery.com> + Tom Tromey <tom@tromey.com> + + * dictionary.c (collate_pending_symbols_by_language): Remove + "struct" from foreach. + * symtab.c (lookup_global_symbol_from_objfile) + (lookup_symbol_in_objfile_from_linkage_name): Remove "struct" from + foreach. + * ser-tcp.c (net_open): Remove "struct" from foreach. + * objfiles.c (objfile_relocate, objfile_rebase) + (objfile_has_symbols): Remove "struct" from foreach. + * minsyms.c (lookup_minimal_symbol_by_pc_section): Remove "struct" + from foreach. + * dwarf2read.c (handle_struct_member_die): Remove "struct" from + foreach. + * darwin-nat.c (thread_info_from_private_thread_info): Remove + "struct" from foreach. + * ada-lang.c (create_excep_cond_exprs) + (ada_exception_catchpoint_cond_string): Remove "struct" from + foreach. + +2019-05-03 Tom Tromey <tromey@adacore.com> + + * ada-exp.y (convert_char_literal): Check suffix of each + enumerator. + +2019-05-03 Dilyan Palauzov <dilyan.palauzov@aegee.org> + + PR ada/21406: + * ada-exp.y (yywrap): Don't define. + * ada-lex.l (%option): Add noyywrap + (yywrap): Remove. + +2019-05-03 Eli Zaretskii <eliz@gnu.org> + + * common/common-defs.h [__MINGW32__ || __CYGWIN__]: Define + _WIN32_WINNT to the XP level, unless already defined to a higher + level. + + * unittests/parse-connection-spec-selftests.c: + * ser-tcp.c: + * common/netstuff.c [USE_WIN32API]: Remove the _WIN32_WINNT + override. + + * symfile.c (find_separate_debug_file): Remove colon from the + drive spec of DOS/Windows file names of the target, so that the + file name produced from DEBUGDIR and the target's directory will + be valid on DOS/Windows systems. + +2019-05-02 Andrew Burgess <andrew.burgess@embecosm.com> + + * rust-lang.c (val_print_struct): Handle printing structures + containing strings. + +2019-05-02 Tom Tromey <tromey@adacore.com> + + * valarith.c (_initialize_valarith): Remove. + +2019-05-01 Tom Tromey <tromey@adacore.com> + + * ada-lang.c (ada_value_primitive_field): Treat more fields as + bitfields. + +2019-05-01 Tom Tromey <tromey@adacore.com> + + * ada-lang.c (ada_value_assign): Correctly compute starting offset + for big-endian copies. + +2019-04-30 Ali Tamur <tamur@google.com> + + * dwarf2read.c (read_3_bytes): New declaration. + (read_attribute_value): Added DW_FORM_strx1-4 cases. + (read_3_bytes): New function. + +2019-04-30 Joel Brobecker <brobecker@adacore.com> + + * windows-nat.c (main_thread_id): Delete. + (handle_output_debug_string): Replace main_thread_id by + current_event.dwThreadId. + (fake_create_process): Likewise. + (get_windows_debug_event) <CREATE_PROCESS_DEBUG_EVENT>: + Do not set main_thread_id. + <LOAD_DLL_DEBUG_EVENT>: Replace main_thread_id by + current_event.dwThreadId. + <UNLOAD_DLL_DEBUG_EVENT>: Likewise. + +2019-04-30 Joel Brobecker <brobecker@adacore.com> + + * windows-nat.c (get_windows_debug_event) <EXIT_PROCESS_DEBUG_EVENT>: + Use current_event.dwThreadId instead of main_thread_id. + +2019-04-30 Tom Tromey <tromey@adacore.com> + + * ada-lang.c (ada_lookup_simple_minsyms): New function. + (create_excep_cond_exprs): Iterate over program spaces. + (ada_exception_catchpoint_cond_string): Examine all minimal + symbols for exception types. + +2019-04-30 Tom Tromey <tromey@adacore.com> + + PR c++/24470: + * dwarf2read.c (process_structure_scope): Handle case where type + has template parameters but no symbol was created. + +2019-04-30 Andrew Burgess <andrew.burgess@embecosm.com> + Chris January <chris.january@arm.com> + + * f-typeprint.c (f_type_print_base): Print 'allocatable' type + qualifier. + * gdbtypes.h (TYPE_IS_ALLOCATABLE): Define. + +2019-04-30 Andrew Burgess <andrew.burgess@embecosm.com> + + * f-typeprint.c (f_print_type): Update rules for printing + whitespace. + (f_type_print_varspec_suffix): Likewise. + +2019-04-30 Andrew Burgess <andrew.burgess@embecosm.com> + Chris January <chris.january@arm.com> + + * f-typeprint.c (f_type_print_varspec_suffix): Handle printing + function arguments. + +2019-04-30 Andrew Burgess <andrew.burgess@embecosm.com> + + * f-lang.c (build_fortran_types): Change name of void type to + lower case. + * f-typeprint.c (f_type_print_base): Print the name of the void + type, rather than a fixed string. + * f-valprint.c (f_decorations): Use lower case void string. + +2019-04-30 Andrew Burgess <andrew.burgess@embecosm.com> + Chris January <chris.january@arm.com> + + * dwarf2read.c (dwarf2_init_complex_target_type): Use different + types for Fortran. + +2019-04-30 Andrew Burgess <andrew.burgess@embecosm.com> + Chris January <chris.january@arm.com> + David Lecomber <david.lecomber@arm.com> + + * f-exp.y (BINOP_INTRINSIC): New token. + (exp): New parser rule handling BINOP_INTRINSIC. + (f77_keywords): Add new builtin procedures. + * f-lang.c (evaluate_subexp_f): Handle BINOP_MOD, UNOP_FORTRAN_CEILING, + UNOP_FORTRAN_FLOOR, BINOP_FORTRAN_MODULO, BINOP_FORTRAN_CMPLX. + (operator_length_f): Handle UNOP_FORTRAN_CEILING, + UNOP_FORTRAN_FLOOR, BINOP_FORTRAN_MODULO, BINOP_FORTRAN_CMPLX. + (print_unop_subexp_f): New function. + (print_binop_subexp_f): New function. + (print_subexp_f): Handle UNOP_FORTRAN_CEILING, UNOP_FORTRAN_FLOOR, + BINOP_FORTRAN_MODULO, BINOP_FORTRAN_CMPLX. + (dump_subexp_body_f): Likewise. + (operator_check_f): Likewise. + * fortran-operator.def: Add UNOP_FORTRAN_CEILING, UNOP_FORTRAN_FLOOR, + BINOP_FORTRAN_MODULO, BINOP_FORTRAN_CMPLX + +2019-04-30 Andrew Burgess <andrew.burgess@embecosm.com> + + * expprint.c (dump_subexp_body_standard): Remove use of + UNOP_KIND. + * expression.h (exp_opcode): Include 'fortran-operator.def'. + * f-exp.y (exp): Rename UNOP_KIND to UNOP_FORTRAN_KIND. + * f-lang.c (evaluate_subexp_f): Likewise. + (operator_length_f): New fuction. + (print_subexp_f): New function. + (op_name_f): New function. + (dump_subexp_body_f): New function. + (operator_check_f): New function. + (exp_descriptor_f): Replace standard expression handling functions + with new functions. + * fortran-operator.def: New file. + * parse.c (operator_length_standard): Remove use of UNOP_KIND. + * std-operator.def: Remove UNOP_KIND. + +2019-04-30 Andrew Burgess <andrew.burgess@embecosm.com> + + * std-operator.def: Remove unbalanced, stray double quote + character. + +2019-04-29 Andrew Burgess <andrew.burgess@embecosm.com> + Chris January <chris.january@arm.com> + Daniel Everett <daniel.everett@arm.com> + Nick Forrington <nick.forrington@arm.com> + Richard Bunt <richard.bunt@arm.com> + + * cp-valprint.c (cp_print_value_fields): Allow an additional level + of depth when printing anonymous structs or unions. + * guile/scm-pretty-print.c (gdbscm_apply_val_pretty_printer): + Don't print either the top-level value, or the children if the + max-depth is exceeded. + (ppscm_print_children): When printing the key of a map, allow one + extra level of depth. + * python/py-prettyprint.c (gdbpy_apply_val_pretty_printer): Don't + print either the top-level value, or the children if the max-depth + is exceeded. + (print_children): When printing the key of a map, allow one extra + level of depth. + * python/py-value.c (valpy_format_string): Add max_depth keyword. + * valprint.c: (PRINT_MAX_DEPTH_DEFAULT): Define. + (user_print_options): Initialise max_depth field. + (val_print_scalar_or_string_type_p): New function. + (val_print): Check to see if the max depth has been reached. + (val_print_check_max_depth): Define new function. + (show_print_max_depth): New function. + (_initialize_valprint): Add 'print max-depth' option. + * valprint.h (struct value_print_options) <max_depth>: New field. + (val_print_check_max_depth): Declare new function. + * NEWS: Document new feature. + +2019-04-29 Andrew Burgess <andrew.burgess@embecosm.com> + + * ada-lang.c (ada_language_defn): Initialise new field. + * c-lang.c (c_is_string_type_p): New function. + (c_language_defn): Initialise new field. + (cplus_language_defn): Initialise new field. + (asm_language_defn): Initialise new field. + (minimal_language_defn): Initialise new field. + * c-lang.h (c_is_string_type_p): Declare new function. + * d-lang.c (d_language_defn): Initialise new field. + * f-lang.c (f_is_string_type_p): New function. + (f_language_defn): Initialise new field. + * go-lang.c (go_is_string_type_p): New function. + (go_language_defn): Initialise new field. + * language.c (default_is_string_type_p): New function. + (unknown_language_defn): Initialise new field. + (auto_language_defn): Initialise new field. + * language.h (struct language_defn) <la_is_string_type_p>: New + member variable. + (default_is_string_type_p): Declare new function. + * m2-lang.c (m2_language_defn): Initialise new field. + * objc-lang.c (objc_language_defn): Initialise new field. + * opencl-lang.c (opencl_language_defn): Initialise new field. + * p-lang.c (pascal_is_string_type_p): New function. + (pascal_language_defn): Initialise new field. + * rust-lang.c (rust_is_string_type_p): New function. + (rust_language_defn): Initialise new field. + +2019-04-29 Andrew Burgess <andrew.burgess@embecosm.com> + + * language.h (struct language_defn) <la_struct_too_deep_ellipsis>: + New field. + * ada-lang.c (ada_language_defn): Initialise new field. + * c-lang.c (c_language_defn): Likewise. + (cplus_language_defn): Likewise. + (asm_language_defn): Likewise. + (minimal_language_defn): Likewise. + * d-lang.c (d_language_defn): Likewise. + * f-lang.c (f_language_defn): Likewise. + * go-lang.c (go_language_defn): Likewise. + * language.c (unknown_language_defn): Likewise. + (auto_language_defn): Likewise. + * m2-lang.c (m2_language_defn): Likewise. + * objc-lang.c (objc_language_defn): Likewise. + * opencl-lang.c (opencl_language_defn): Likewise. + * p-lang.c (pascal_language_defn): Likewise. + * rust-lang.c (rust_language_defn): Likewise. + +2019-04-29 Andrew Burgess <andrew.burgess@embecosm.com> + + * ada-lang.c (ada_is_character_type): Change return type to bool. + (ada_is_string_type): Likewise. + * ada-lang.h (ada_is_character_type): Update declaration + (ada_is_string_type): Likewise. + +2019-04-27 Philippe Waroquiers <philippe.waroquiers@skynet.be> + + Support style in 'frame|thread apply' + + * gdbcmd.h (execute_command_to_string): New term_out parameter. + * record.c (record_start, record_stop): Update callers of + execute_command_to_string with false. + * guile/guile.c (gdbscm_execute_gdb_command): Likewise. + * ui-file.h (class ui_file): New term_out and can_emit_style_escape + methods. + (class string_file): New constructor with term_out parameter. + Override methods term_out and can_emit_style_escape. New member + term_out. + (class stdio_file): Override can_emit_style_escape. + (class tee_file): Override term_out and can_emit_style_escape. + * utils.h (can_emit_style_escape): Remove. + * utils.c (can_emit_style_escape): Likewise. + Update all callers of can_emit_style_escape (SOMESTREAM) to + SOMESTREAM->can_emit_style_escape. + * source-cache.c (source_cache::get_source_lines): Likewise. + * stack.c (frame_apply_command_count): Call execute_command_to_string + passing the term_out characteristic of the current gdb_stdout. + * thread.c (thr_try_catch_cmd): Likewise. + * top.c (execute_command_to_string): pass term_out parameter + to construct the string_file for the command output. + * ui-file.c (term_cli_styling): New function (most code moved + from utils.c can_emit_style_escape). + (string_file::string_file, string_file::can_emit_style_escape, + stdio_file::can_emit_style_escape, tee_file::term_out, + tee_file::can_emit_style_escape): New functions. + +2019-04-27 Philippe Waroquiers <philippe.waroquiers@skynet.be> + + * NEWS: Mention the new set|show may-call-functions. + * infcall.c (may_call_functions_p): New variable. + (show_may_call_functions_p): New function. + (call_function_by_hand_dummy): Throws an error if not + may-call-functions. + (_initialize_infcall): Call add_setshow_boolean_cmd for + may-call-functions. + +2019-04-25 Keith Seitz <keiths@redhat.com> + + PR c++/24367 + * cp-support.c (inspect_type): Don't attempt substitutions + of symbol with the same name. + +2019-04-25 Tom Tromey <tromey@adacore.com> + + PR gdb/24475: + * event-top.c (gdb_rl_callback_handler): Make "gdb_rl_expt" + static. + +2019-04-25 Tom Tromey <tromey@adacore.com> + + * xml-support.c (struct gdb_xml_parser) <set_error>: Take an + rvalue reference. + (gdb_xml_start_element_wrapper, gdb_xml_end_element_wrapper) + (gdb_xml_parser::parse): Use std::move. + * python/python-internal.h (gdbpy_convert_exception): Take a const + reference. + * python/py-value.c (valpy_getitem, valpy_nonzero): Use + std::move. + * python/py-utils.c (gdbpy_convert_exception): Take a const + reference. + * python/py-inferior.c (infpy_write_memory, infpy_search_memory): + Use std::move. + * python/py-breakpoint.c (bppy_set_condition, bppy_set_commands): + Use std::move. + * mi/mi-main.c (mi_print_exception): Take a const reference. + * main.c (handle_command_errors): Take a const reference. + * linespec.c (parse_linespec): Use std::move. + * infcall.c (run_inferior_call): Use std::move. + (call_function_by_hand_dummy): Use std::move. + * exec.c (try_open_exec_file): Use std::move. + * exceptions.h (exception_print, exception_fprintf) + (exception_print_same): Update. + * exceptions.c (print_exception, exception_print) + (exception_fprintf, exception_print_same): Change parameters to + const reference. + * event-top.c (gdb_rl_callback_read_char_wrapper): Update. + * common/new-op.c: Use std::move. + * common/common-exceptions.h (struct gdb_exception): Add move + constructor. + (struct gdb_exception_error, struct gdb_exception_quit, struct + gdb_quit_bad_alloc): Change constructor to move constructor. + (throw_exception): Change parameter to rvalue reference. + * common/common-exceptions.c (throw_exception): Take rvalue + reference. + * cli/cli-interp.c (safe_execute_command): Use std::move. + * breakpoint.c (insert_bp_location, location_to_sals): Use + std::move. + +2019-04-25 Tom Tromey <tromey@adacore.com> + + * guile/scm-exception.c (gdbscm_scm_from_gdb_exception) + (gdbscm_throw_gdb_exception): Take a gdbscm_gdb_exception. + * guile/scm-block.c, guile/scm-breakpoint.c, guile/scm-cmd.c, + guile/scm-disasm.c, guile/scm-frame.c, guile/scm-lazy-string.c, + guile/scm-math.c, guile/scm-param.c, guile/scm-ports.c, + guile/scm-symbol.c, guile/scm-symtab.c, guile/scm-type.c, + guile/scm-value.c: Use unpack. + * guile/guile-internal.h (gdbscm_scm_from_gdb_exception): Take a + gdbscm_gdb_exception. + (gdbscm_throw_gdb_exception): Likewise. + (struct gdbscm_gdb_exception): New. + (unpack): New function. + (gdbscm_wrap): Use unpack. + +2019-04-25 Tom Tromey <tromey@adacore.com> + + * event-top.c (gdb_rl_callback_read_char_wrapper_noexcept) + (gdb_rl_callback_handler): Use std::move. + * common/common-exceptions.h (struct gdb_exception): Add move + assignment operator. + (throw_exception_sjlj): Change "exception" to const reference. + * common/common-exceptions.c (exceptions_state_mc_catch): Update. + (throw_exception_sjlj): Change "exception" to const reference. + +2019-04-25 Tom Tromey <tromey@adacore.com> + + * xml-support.c (gdb_xml_parser::gdb_xml_parser): Update. + * python/py-value.c (valpy_getitem, valpy_nonzero): Update. + * python/py-inferior.c (infpy_write_memory, infpy_search_memory): + Update. + * python/py-breakpoint.c (bppy_set_condition, bppy_set_commands): + Update. + * mi/mi-interp.c (mi_interp::exec): Update. + * linespec.c (parse_linespec): Update. + * infcall.c (run_inferior_call): Update. + * guile/scm-value.c (gdbscm_value_to_lazy_string): Update. + * guile/scm-symbol.c (gdbscm_lookup_symbol) + (gdbscm_lookup_global_symbol): Update. + * guile/scm-param.c (gdbscm_parameter_value): Update. + * guile/scm-frame.c (gdbscm_frame_read_register) + (gdbscm_frame_read_var): Update. + * guile/scm-breakpoint.c (gdbscm_register_breakpoint_x): Update. + * exec.c (try_open_exec_file): Update. + * event-top.c (gdb_rl_callback_read_char_wrapper_noexcept) + (gdb_rl_callback_handler): Update. + * common/common-exceptions.h (exception_none): Don't declare. + * common/common-exceptions.c (exception_none): Don't define. + (struct catcher) <exception>: Update. + * cli/cli-interp.c (safe_execute_command): Update. + * breakpoint.c (insert_bp_location, location_to_sals): Update. + +2019-04-25 Ali Tamur <tamur@google.com> + + * dwarf2read.c (skip_one_die): Add DW_FORM_strx. + (read_attribute_value): Likewise. + (dwarf2_read_addr_index): Update comment. + (read_str_index): Add DW_FORM_strx. + (dwarf2_string_attr): Likewise. + (dwarf2_const_value_attr): Likewise. + (dump_die_shallow): Likewise. + (dwarf2_fetch_constant_bytes): Likewise. + (skip_form_bytes): Likewise. + +2019-04-25 Sergio Durigan Junior <sergiodj@redhat.com> + + PR corefiles/11608 + PR corefiles/18187 + * linux-tdep.c (dump_mapping_p): Add new parameters ADDR and + OFFSET. Verify if current mapping contains an ELF header. + (linux_find_memory_regions_full): Adjust call to + dump_mapping_p. + +2019-04-25 Sandra Loosemore <sandra@codesourcery.com> + Kang Li <kanglictf@gmail.com> + + PR gdb/21600 + + * dwarf2-frame.c (read_initial_length): Be consistent about using + unsigned representation of length. + (decode_frame_entry_1): Likewise. Check for wraparound of + end pointer as well as buffer overflow. + +2019-04-24 Sergio Durigan Junior <sergiodj@redhat.com> + + * aarch64-tdep.c (aarch64_gdbarch_init): Use "pulongest" to print + "vq". + +2019-04-24 Tom Tromey <tromey@adacore.com> + + * amd64-tdep.c (amd64_has_unaligned_fields): Ignore bitfields. + +2019-04-23 Andrew Burgess <andrew.burgess@embecosm.com> + + * s12z-tdep.c (s12z_unwind_pc): Delete. + (s12z_unwind_sp): Delete. + (s12z_gdbarch_init): Don't register deleted functions with + gdbarch. + +2019-04-23 Andrew Burgess <andrew.burgess@embecosm.com> + + * rl78-tdep.c (rl78_unwind_sp): Delete. + (rl78_gdbarch_init): Don't register deleted function with gdbarch. + +2019-04-23 Andrew Burgess <andrew.burgess@embecosm.com> + + * xstormy16-tdep.c (xstormy16_unwind_sp): Delete. + (xstormy16_unwind_pc): Delete. + (xstormy16_dummy_id): Delete. + (xstormy16_gdbarch_init): Don't register deleted functions with + gdbarch. + +2019-04-23 Andrew Burgess <andrew.burgess@embecosm.com> + + * vax-tdep.c (vax_unwind_pc): Delete. + (vax_gdbarch_init): Don't register deleted function with gdbarch. + +2019-04-23 Andrew Burgess <andrew.burgess@embecosm.com> + + * v850-tdep.c (v850_unwind_sp): Delete. + (v850_unwind_pc): Delete. + (v850_dummy_id): Delete. + (v850_gdbarch_init): Don't register deleted functions with + gdbarch. + +2019-04-23 Andrew Burgess <andrew.burgess@embecosm.com> + + * tilegx-tdep.c (tilegx_unwind_sp): Delete. + (tilegx_unwind_pc): Delete. + (tilegx_unwind_dummy_id): Delete. + (tilegx_gdbarch_init): Don't register deleted functions with + gdbarch. + +2019-04-23 Andrew Burgess <andrew.burgess@embecosm.com> + + * tic6x-tdep.c (tic6x_unwind_sp): Delete. + (tic6x_dummy_id): Delete. + (tic6x_gdbarch_init): Don't register deleted functions with + gdbarch. + +2019-04-23 Andrew Burgess <andrew.burgess@embecosm.com> + + * sparc-tdep.c (sparc_unwind_pc): Delete. + (sparc32_gdbarch_init): Don't register deleted function with + gdbarch. + +2019-04-23 Andrew Burgess <andrew.burgess@embecosm.com> + + * sh-tdep.c (sh_unwind_sp): Delete. + (sh_unwind_pc): Delete. + (sh_dummy_id): Delete. + (sh_gdbarch_init): Don't register deleted functions with + gdbarch. + +2019-04-23 Andrew Burgess <andrew.burgess@embecosm.com> + + * score-tdep.c (score_unwind_sp): Delete. + (score_unwind_pc): Delete. + (score_dummy_id): Delete. + (score_gdbarch_init): Don't register deleted functions with + gdbarch. + +2019-04-23 Andrew Burgess <andrew.burgess@embecosm.com> + + * rx-tdep.c (rx_unwind_pc): Delete. + (rx_unwind_sp): Delete. + (rx_dummy_id): Delete. + (rx_gdbarch_init): Don't register deleted functions with + gdbarch. Update comment. + +2019-04-23 Andrew Burgess <andrew.burgess@embecosm.com> + + * rs6000-tdep.c (rs6000_unwind_pc): Delete. + (rs6000_dummy_id): Delete. + (rs6000_gdbarch_init): Don't register deleted functions with + gdbarch. + +2019-04-23 Andrew Burgess <andrew.burgess@embecosm.com> + + * or1k-tdep.c (or1k_dummy_id): Delete. + (or1k_gdbarch_init): Don't register deleted function with gdbarch. + +2019-04-23 Andrew Burgess <andrew.burgess@embecosm.com> + + * nios2-tdep.c (nios2_dummy_id): Delete. + (nios2_unwind_sp): Delete. + (nios2_gdbarch_init): Don't register deleted functions with + gdbarch. + +2019-04-23 Andrew Burgess <andrew.burgess@embecosm.com> + + * nds32-tdep.c (nds32_dummy_id): Delete. + (nds32_unwind_pc): Delete. + (nds32_unwind_sp): Delete. + (nds32_gdbarch_init): Don't register deleted functions with + gdbarch. + +2019-04-23 Andrew Burgess <andrew.burgess@embecosm.com> + + * msp430-tdep.c (msp430_unwind_pc): Delete. + (msp430_unwind_sp): Delete. + (msp430_dummy_id): Delete. + (msp430_gdbarch_init): Don't register deleted functions with + gdbarch. + +2019-04-23 Andrew Burgess <andrew.burgess@embecosm.com> + + * moxie-tdep.c (moxie_unwind_sp): Delete. + (moxie_unwind_pc): Delete. + (moxie_dummy_id): Delete. + (moxie_gdbarch_init): Don't register deleted functions with + gdbarch. + +2019-04-23 Andrew Burgess <andrew.burgess@embecosm.com> + + * mn10300-tdep.c (mn10300_dummy_id): Delete. + (mn10300_unwind_pc): Delete. + (mn10300_unwind_sp): Delete. + (mn10300_push_dummy_call): Use gdbarch_unwind_sp not + mn10300_unwind_sp. + (mn10300_frame_unwind_init): Don't register deleted functions with + gdbarch. + +2019-04-23 Andrew Burgess <andrew.burgess@embecosm.com> + + * mep-tdep.c (mep_unwind_pc): Delete. + (mep_unwind_sp): Delete. + (mep_dummy_id): Delete. + (mep_gdbarch_init): Don't register deleted functions with + gdbarch. + +2019-04-23 Andrew Burgess <andrew.burgess@embecosm.com> + + * m68hc11-tdep.c (m68hc11_unwind_pc): Delete. + (m68hc11_unwind_sp): Delete. + (m68hc11_gdbarch_init): Don't register deleted functions with + gdbarch. + +2019-04-23 Andrew Burgess <andrew.burgess@embecosm.com> + + * m32r-tdep.c (m32r_unwind_sp): Delete. + (m32r_unwind_pc): Delete. + (m32r_dummy_id): Delete. + (m32r_gdbarch_init): Don't register deleted functions with + gdbarch. + +2019-04-23 Andrew Burgess <andrew.burgess@embecosm.com> + + * m32c-tdep.c (m32c_unwind_pc): Delete. + (m32c_unwind_sp): Delete. + (m32c_dummy_id): Delete. + (m32c_gdbarch_init): Don't register deleted functions with + gdbarch. + +2019-04-23 Andrew Burgess <andrew.burgess@embecosm.com> + + * lm32-tdep.c (lm32_unwind_sp): Delete. + (lm32_unwind_pc): Delete. + (lm32_dummy_id): Delete. + (lm32_gdbarch_init): Don't register deleted functions with + gdbarch. + +2019-04-23 Andrew Burgess <andrew.burgess@embecosm.com> + + * iq2000-tdep.c (iq2000_unwind_sp): Delete. + (iq2000_unwind_pc): Delete. + (iq2000_dummy_id): Delete. + (iq2000_gdbarch_init): Don't register deleted functions with + gdbarch. + +2019-04-23 Andrew Burgess <andrew.burgess@embecosm.com> + + * nds32-tdep.c (nds32_type_align): Delete. + (nds32_push_dummy_call): Use type_align instead. + +2019-04-23 Andrew Burgess <andrew.burgess@embecosm.com> + + * arm-tdep.c (arm_type_align): Only handle vector override case. + (arm_push_dummy_call): Use type_align. + (arm_gdbarch_init): Register arm_type_align gdbarch function. + +2019-04-23 Andrew Burgess <andrew.burgess@embecosm.com> + + * aarch64-tdep.c (aarch64_type_align): Only handle vector override + case. + (pass_on_stack): Use type_align. + (aarch64_gdbarch_init): Register aarch64_type_align gdbarch + function. + +2019-04-23 Tom Tromey <tromey@adacore.com> + + * dwarf2read.c (line_header::file_name_at): Remove unused + overload. + +2019-04-23 Tom de Vries <tdevries@suse.de> + + PR gdb/24438 + * contrib/cc-with-tweaks.sh: Remove superfluous .alt file after dwz + invocation. + + +2019-03-27 Ali Tamur <tamur@google.com> + + * dwarf2-frame.c(dwarf_expr_executor::get_addr_index): Update comment + * dwarf2expr.c(dwarf_expr_context::execute_stack_op): Add DW_OP_addrx + * dwarf2expr.h(dwarf_expr_context::offset): Update comment + (dwarf_expr_context::get_addr_index): Likewise + * dwarf2loc.c(dwarf_evaluate_loc_desc::get_addr_index): Likewise + (symbol_needs_eval_context::get_addr_index): Likewise + (disassemble_dwarf_expression): Add DW_OP_addrx + * dwarf2read.c(attr_value_as_address): Add DW_FORM_addrx + (read_cutu_die_from_dwo): Update comment + (skip_one_die): Add DW_FORM_addrx + (read_attribute_value): Likewise + (var_decode_location): Add DW_OP_addrx + (dwarf2_const_value_attr): Add DW_FORM_addrx + (dump_die_shallow): Likewise + (dwarf2_fetch_constant_bytes): Likewise + (decode_locdesc): Add DW_OP_addrx + (skip_form_bytes): Add DW_FORM_addrx + +2019-04-22 Ali Tamur <tamur@google.com> + + * MAINTAINERS (Write After Approval): Add self. + +2019-04-22 Simon Marchi <simon.marchi@efficios.com> + + * solib-svr4.c (get_svr4_info): Add pspace parameter. + (svr4_keep_data_in_core): Pass current_program_space to get_svr4_info. + (open_symbol_file_object): Likewise. + (svr4_default_sos): Add info parameter. + (svr4_read_so_list): Likewise. + (svr4_current_sos_direct): Adjust functions calls to pass down + info. + (svr4_current_sos_1): Add info parameter. + (svr4_current_sos): Call get_svr4_info, pass info down to + svr4_current_sos_1. + (svr4_fetch_objfile_link_map): Pass objfile->pspace to + get_svr4_info. + (svr4_in_dynsym_resolve_code): Pass current_program_space to + get_svr4_info. + (probes_table_htab_remove_objfile_probes): Pass objfile->pspace + to get_svr4_info. + (probes_table_remove_objfile_probes): Likewise. + (register_solib_event_probe): Add info parameter. + (solist_update_incremental): Pass info parameter down to + svr4_read_so_list. + (disable_probes_interface): Add info parameter. + (svr4_handle_solib_event): Pass current_program_space to + get_svr4_info. Adjust disable_probes_interface cleanup. + (svr4_create_probe_breakpoints): Add info parameter, pass it + down to register_solib_event_probe. + (svr4_create_solib_event_breakpoints): Add info parameter, + pass it down to svr4_create_probe_breakpoints. + (enable_break): Pass info down to + svr4_create_solib_event_breakpoints. + (svr4_solib_create_inferior_hook): Pass current_program_space to + get_svr4_info. + (svr4_clear_solib): Likewise. + +2019-04-22 Pedro Alves <palves@redhat.com> + + * solib-svr4.c (svr4_free_objfile_observer): New. + (probe_and_action::objfile): New field. + (probes_table_htab_remove_objfile_probes) + (probes_table_remove_objfile_probes): New functions. + (register_solib_event_probe): Add 'objfile' parameter. Store it + in the new probe_and_action. Don't store the probe in 'lookup'. + (svr4_create_probe_breakpoints): Pass objfile to + register_solib_event_probe. + (_initialize_svr4_solib): Register a free_objfile observer. + +2019-04-19 Tom Tromey <tom@tromey.com> + + * common/queue.h: Remove. + +2019-04-19 Tom Tromey <tom@tromey.com> + + * event-loop.c: Don't include "common/queue.h". + +2019-04-19 Tom Tromey <tom@tromey.com> + + * remote.c (remote_target): Use delete. + * remote-notif.h: Include <list>, not "common/queue.h". + (notif_client_p): Remove typedef. + (remote_notif_state): Add constructor, destructor, initializer. + <notif_queue>: Now a std::list. + (remote_notif_state_xfree): Don't declare. + * remote-notif.c (remote_notif_process, handle_notification) + (remote_notif_state_allocate): Update. + (~remote_notif_state): Rename from remote_notif_state_xfree. + +2019-04-19 Tom Tromey <tom@tromey.com> + + * symfile.c (reread_symbols): Update. + * objfiles.c (objfile_register_static_link) + (objfile_lookup_static_link): Update + (~objfile) Don't delete static_links. + * objfiles.h (struct objfile) <static_links>: Now an htab_up. + +2019-04-19 Tom Tromey <tom@tromey.com> + + * type-stack.h (struct type_stack) <insert>: Constify string. + * type-stack.c (type_stack::insert): Constify string. + * gdbtypes.h (lookup_template_type): Update. + (address_space_name_to_int): Update. + * gdbtypes.c (address_space_name_to_int): Make space_identifier + const. + (lookup_template_type): Make name const. + * c-exp.y: Update rules. + (lex_one_token, classify_name, classify_inner_name) + (c_print_token): Update. + * p-exp.y: Update rules. + (yylex): Update. + * f-exp.y: Update rules. + (yylex): Update. + * d-exp.y: Update rules. + (lex_one_token, classify_name, classify_inner_name): Update. + * parse.c (write_dollar_variable, copy_name): Return std::string. + * parser-defs.h (copy_name): Change return type. + * m2-exp.y: Update rules. + (yylex): Update. + * go-exp.y (lex_one_token): Update. + Update rules. + (classify_unsafe_function, classify_packaged_name) + (classify_name, yylex): Update. + +2019-04-19 Sergei Trofimovich <siarheit@google.com> + + * configure.ac: add --enable-source-highlight switch. + * configure: Regenerate. + * top.c (print_gdb_version): plumb --enable-source-highlight + status to "show configuration". + +2019-04-19 Tom Tromey <tromey@adacore.com> + + * ada-lang.c (ada_is_variant_part, ada_to_fixed_type_1): + Check ADA_TYPE_P. + (empty_record, ada_template_to_fixed_record_type_1) + (template_to_static_fixed_type) + (to_record_with_fixed_variant_part): Use INIT_NONE_SPECIFIC. + * cp-abi.c (value_rtti_type): Check HAVE_CPLUS_STRUCT. + * gdbtypes.h (INIT_NONE_SPECIFIC, ADA_TYPE_P): New + macros. + +2019-04-19 Ilya Yu. Malakhov <malakhov@mcst.ru> + + PR symtab/24423: + * source.c (print_source_lines_base): Advance "iter" when a + control character is seen. + +2019-04-19 Philippe Waroquiers <philippe.waroquiers@skynet.be> + + * inferior.h (struct infcall_suspend_state_deleter): + Catch exception in destructor to avoid crash. + +2019-04-19 Philippe Waroquiers <philippe.waroquiers@skynet.be> + + * cli/cli-cmds.c (_initialize_cli_cmds): Move "shell" "!" alias + close to the add_com "shell". + +2019-04-18 Tom Tromey <tromey@adacore.com> + + * process-stratum-target.h (class process_stratum_target) + <stratum>: Add "final". + +2019-04-17 Tom Tromey <tromey@adacore.com> + + * dwarf2read.c (dwarf2_init_complex_target_type): Check "tt" + against nullptr before use. + +2019-04-17 Alan Hayward <alan.hayward@arm.com> + + * nat/linux-waitpid.c (linux_debug): Call debug_vprintf. + +2019-04-17 Jim Wilson <jimw@sifive.com> + Andrew Burgess <andrew.burgess@embecosm.com> + + * riscv-tdep.c (riscv_breakpoint_kind_from_pc): Hanndle case where + code read might fail, assume 4-byte breakpoint in that case. + +2019-04-15 Leszek Swirski <leszeks@google.com> + + * amd64-tdep.c (amd64_classify_aggregate): Use cp_pass_by_reference + rather than a hand-rolled POD check when checking for forced MEMORY + classification. + +2019-04-15 Alan Hayward <alan.hayward@arm.com> + + * aarch64-linux-nat.c (store_sveregs_to_thread): Set vector length. + * nat/aarch64-sve-linux-ptrace.c (aarch64_sve_set_vq): New + function. + (aarch64_sve_regs_copy_to_reg_buf): Remove VG checks. + (aarch64_sve_regs_copy_from_reg_buf): Likewise. + * nat/aarch64-sve-linux-ptrace.h (aarch64_sve_set_vq): New + declaration. + +2019-04-15 Alan Hayward <alan.hayward@arm.com> + + * aarch64-linux-nat.c + (aarch64_linux_nat_target::thread_architecture): Add override. + * aarch64-tdep.c (aarch64_gdbarch_init): Ensure different tdesc for + each VQ. + +2019-04-15 Alan Hayward <alan.hayward@arm.com> + + * aarch64-tdep.c (aarch64_gdbarch_init): Move gdbarch lookup. + +2019-04-13 Andrew Burgess <andrew.burgess@embecosm.com> + + * dwarf2read.c (dwarf2_init_complex_target_type): Handle complex + target types of size 96-bits, add some additional comments, and + check that the builtin type we found was the correct size. + +2019-04-12 Eli Zaretskii <eliz@gnu.org> + + * utils.c (prompt_for_continue): Don't restore the styling at the + end, as applied_style has the wrong value. This fixes styling in + long lists of file names that are interrupted by the "Continue?" + prompt. + +2019-04-12 Andrew Burgess <andrew.burgess@embecosm.com> + + * ada-lang.c (ada_language_defn): Remove use of LANG_MAGIC. + * c-lang.c (c_language_defn): Likewise. + (cplus_language_defn): Likewise. + (asm_language_defn): Likewise. + (minimal_language_defn): Likewise. + * d-lang.c (d_language_defn): Likewise. + * f-lang.c (f_language_defn): Likewise. + * go-lang.c (go_language_defn): Likewise. + * language.c (unknown_language_defn): Likewise. + (auto_language_defn): Likewise. + * language.h (struct language_defn): Remove la_magic field. + (LANG_MAGIC): Delete. + * m2-lang.c (m2_language_defn): Remove use of LANG_MAGIC. + * objc-lang.c (objc_language_defn): Likewise. + * opencl-lang.c (opencl_language_defn): Likewise. + * p-lang.c (pascal_language_defn): Likewise. + * rust-lang.c (rust_language_defn): Likewise. + +2019-04-11 Andrew Burgess <andrew.burgess@embecosm.com> + + * riscv-tdep.c (riscv_type_align): New function. + (riscv_type_alignment): Delete. + (riscv_arg_location): Use 'type_align'. + (riscv_gdbarch_init): Register riscv_type_align gdbarch function. + +2019-04-11 Andrew Burgess <andrew.burgess@embecosm.com> + + * gdbtypes.c (type_align): A struct with no non-static fields also + has alignment of 1. + +2019-04-11 Andrew Burgess <andrew.burgess@embecosm.com> + + * riscv-tdep.c (riscv_call_arg_complex_float): Fix offset of first + component to 0. + (riscv_struct_info::riscv_struct_info): Initialise m_offsets + member. + (riscv_struct_info::analyse): New implementation using new + analyse_inner member function. + (riscv_struct_info::field_offset): New member function. + (riscv_struct_info::m_offsets): New member variable. + (riscv_struct_info::analyse_inner): New private member function, + takes the old implementation of riscv_struct_info::analyse but + extended to track field offsets. + (riscv_call_arg_struct): Update the struct folding special cases + to handle cases where empty C++ structs, which are non-zero + length, are found. + (riscv_arg_location): Initialise the length of each location, a + non-zero length now indicates the location is in use. + (riscv_push_dummy_call): Allow for the first location having a + non-zero offset when setting up arguments. + (riscv_return_value): Likewise, but for return values. + +2019-04-11 Tom Tromey <tromey@adacore.com> + + * utils.c (internal_vproblem): Make "msg" const. + +2019-04-11 Alan Hayward <alan.hayward@arm.com> + + * aarch64-tdep.c (aarch64_analyze_prologue_test): Reset saved regs. + * trad-frame.c (trad_frame_reset_saved_regs): New function. + (trad_frame_alloc_saved_regs): Call trad_frame_reset_saved_regs. + * trad-frame.h (trad_frame_reset_saved_regs): New declaration. + +2019-04-10 Kevin Buettner <kevinb@redhat.com> + + * amd64-linux-nat.c (amd64_linux_collect_native_gregset): New + function. + (fill_gregset): Call amd64_linux_collect_native_gregset instead + of amd64_collect_native_gregset. + (amd64_linux_nat_target::store_registers): Likewise. + +2019-04-10 Tom Tromey <tom@tromey.com> + + * symtab.c (lookup_global_symbol_from_objfile) + (lookup_symbol_in_objfile_from_linkage_name): Use the iterator. + * objfiles.h (class separate_debug_iterator): New. + (class separate_debug_range): New. + (struct objfile) <separate_debug_objfiles>: New method. + (objfile_separate_debug_iterate): Don't declare. + * objfiles.c (separate_debug_iterator::operator++): Rename from + objfile_separate_debug_iterate. + (objfile_relocate, objfile_rebase, objfile_has_symbols): Use the + iterator. + * minsyms.c (lookup_minimal_symbol_by_pc_section): Use the + iterator. + +2019-04-10 Tom Tromey <tom@tromey.com> + + * symfile.c (reread_symbols): Remove old comment. + * objfiles.c (free_all_objfiles): Fix a typo. + +2019-04-10 Tom Tromey <tom@tromey.com> + + * ia64-tdep.c (ia64_get_dyn_info_list): Use foreach. + * minsyms.c (lookup_minimal_symbol): Use foreach. + (lookup_minimal_symbol_text, lookup_minimal_symbol_by_pc_name) + (lookup_minimal_symbol_solib_trampoline): Likewise. + * symfile.c (reread_symbols): Use foreach. + +2019-04-09 Ivan Begert <ivanbegert@gmail.com> + Tom Tromey <tromey@adacore.com> + + PR rust/24414: + * rust-exp.y (rust_parser::lex_number): Use strtoulst. + (rust_lex_int_test): Change "value" to be LONGEST. + (rust_lex_tests): Add test for long integer literal. + +2019-04-09 Tom Tromey <tromey@adacore.com> + + * remote.c (remote_target::remote_add_inferior): Change fake_pid_p + to bool. + (extended_remote_target::attach): Update. + (remote_target::remote_notice_new_inferior): Update. + (remote_target::add_current_inferior_and_thread): Update. + * inferior.c (exit_inferior_1): Use "false". + * corelow.c (add_to_thread_list): Make fake_pid_p bool. + +2019-04-09 Simon Marchi <simon.marchi@efficios.com> + + * infcmd.c (run_command_1): Pass -qualified to tbreak when using + the "start" command. + +2019-04-08 Kevin Buettner <kevinb@redhat.com> + + * python/py-inferior.c (infpy_thread_from_thread_handle): + Adjust comments to reflect renaming of thread_from_thread_handle + to thread_from_handle. Adjust keywords. Fix type error message. + (inferior_object_methods): Add thread_from_handle. Retain + thread_from_thread_handle, but mark it as deprecated. + +2019-04-08 Kevin Buettner <kevinb@redhat.com> + + * gdbthread.h (find_thread_by_handle): Revise declaration. + * thread.c (find_thread_by_handle): Likewise. Adjust + implementation too. + * python/py-inferior.c (infpy_thread_from_thread_handle): Add + support for buffer objects as handles. + +2019-04-08 Kevin Buettner <kevinb@redhat.com> + + * python/py-infthread.c (thpy_thread_handle): New function. + (thread_object_methods): Register thpy_thread_handle. + +2019-04-08 Kevin Buettner <kevinb@redhat.com> + + * gdbthread.h (thread_to_thread_handle): Declare. + * thread.c (gdbtypes.h): Include. + (thread_to_thread_handle): New function. + + * target.h (struct target_ops): Add thread_info_to_thread_handle. + (target_thread_info_to_thread_handle): Declare. + * target.c (target_thread_info_to_thread_handle): New function. + * target-debug.h (target_debug_print_gdb_byte_vector): Define. + * target-delegates.c: Regenerate. + + * linux-thread-db.c (class thread_db_target): Add method + thread_info_to_thread_handle. + (thread_db_target::thread_info_to_thread_handle): Define. + * remote.c (class remote_target): Add new method + thread_info_to_thread_handle. + (remote_target::thread_info_to_thread_handle): Define. + +2019-04-08 Pedro Alves <palves@redhat.com> + + * common/common-exceptions.c (throw_exception): Don't create + named object to throw; throw directly. + (throw_it): Likewise. Don't initialize gdb_exception::message + here, with new; pass FMT and AP to the ctor instead. + * common/common-exceptions.h: Include <string>. + (gdb_exception::gdb_exception(enum return_reason, enum errors, + const char *, va_list)): New ctor. Use std::make_shared. + (gdb_exception_error::gdb_exception_error(enum return_reason, enum + errors)): Delete. + (gdb_exception_error::gdb_exception_error(enum errors, const char + *, va_list)): New. + (gdb_exception_error::gdb_exception_error(const gdb_exception &)): + Add assertion. + (gdb_exception_quit::gdb_exception_quit(enum return_reason, enum + errors)): Delete. + (gdb_exception_quit::gdb_exception_quit(const char *, va_list)): New. + (gdb_exception_quit::gdb_exception_quit(const gdb_exception &)): + Add assertion. + +2019-04-08 Tom Tromey <tom@tromey.com> + + * valops.c (value_rtti_indirect_type): Replace throw_exception + with throw. + * tracefile-tfile.c (tfile_target_open): Replace throw_exception + with throw. + * thread.c (thr_try_catch_cmd): Replace throw_exception with + throw. + * target.c (target_translate_tls_address): Replace throw_exception + with throw. + * stack.c (frame_apply_command_count): Replace throw_exception + with throw. + * solib-spu.c (append_ocl_sos): Replace throw_exception with + throw. + * s390-tdep.c (s390_frame_unwind_cache): Replace throw_exception + with throw. + * rs6000-tdep.c (rs6000_frame_cache) + (rs6000_epilogue_frame_cache): Replace throw_exception with throw. + * remote.c: Replace throw_exception with throw. + * record-full.c (record_full_message, record_full_wait_1) + (record_full_restore): Replace throw_exception with throw. + * record-btrace.c: + (get_thread_current_frame_id, record_btrace_start_replaying) + (cmd_record_btrace_bts_start, cmd_record_btrace_pt_start) + (cmd_record_btrace_start): Replace throw_exception with throw. + * parse.c (parse_exp_in_context_1): Replace throw_exception with + throw. + * linux-nat.c (detach_one_lwp, linux_resume_one_lwp) + (resume_stopped_resumed_lwps): Replace throw_exception with throw. + * linespec.c: + (find_linespec_symbols): Replace throw_exception with throw. + * infrun.c (displaced_step_prepare, resume): Replace + throw_exception with throw. + * infcmd.c (post_create_inferior): Replace throw_exception with + throw. + * inf-loop.c (inferior_event_handler): Replace throw_exception + with throw. + * i386-tdep.c (i386_frame_cache, i386_epilogue_frame_cache) + (i386_sigtramp_frame_cache): Replace throw_exception with throw. + * frame.c (frame_unwind_pc, get_prev_frame_if_no_cycle) + (get_prev_frame_always, get_frame_pc_if_available) + (get_frame_address_in_block_if_available, get_frame_language): + Replace throw_exception with throw. + * frame-unwind.c (frame_unwind_try_unwinder): Replace + throw_exception with throw. + * eval.c (fetch_subexp_value, evaluate_var_value) + (evaluate_funcall, evaluate_subexp_standard): Replace + throw_exception with throw. + * dwarf2loc.c (call_site_find_chain) + (dwarf2_evaluate_loc_desc_full, dwarf2_locexpr_baton_eval): + Replace throw_exception with throw. + * dwarf2-frame.c (dwarf2_frame_cache): Replace throw_exception + with throw. + * darwin-nat.c (darwin_attach_pid): Replace throw_exception with + throw. + * cp-abi.c (baseclass_offset): Replace throw_exception with throw. + * completer.c (complete_line_internal): Replace throw_exception + with throw. + * compile/compile-object-run.c (compile_object_run): Replace + throw_exception with throw. + * cli/cli-script.c (process_next_line): Replace throw_exception + with throw. + * btrace.c (btrace_compute_ftrace_pt, btrace_compute_ftrace) + (btrace_enable, btrace_maint_update_pt_packets): Replace + throw_exception with throw. + * breakpoint.c (create_breakpoint, save_breakpoints): Replace + throw_exception with throw. + * break-catch-throw.c (re_set_exception_catchpoint): Replace + throw_exception with throw. + * amd64-tdep.c (amd64_frame_cache, amd64_sigtramp_frame_cache) + (amd64_epilogue_frame_cache): Replace throw_exception with throw. + * aarch64-tdep.c (aarch64_make_prologue_cache) + (aarch64_make_stub_cache): Replace throw_exception with throw. + +2019-04-08 Tom Tromey <tom@tromey.com> + + * common/common-exceptions.c (throw_exception): Rename from + throw_exception_cxx. Remove old copy. Make argument const. + (throw_it): Create and throw exception objects directly. + * common/common-exceptions.h (throw_exception): Make argument + const. + (struct gdb_exception_error): Add constructor. + (struct gdb_exception_quit): Add constructor. + +2019-04-08 Tom Tromey <tom@tromey.com> + + * common/common-exceptions.h (exception_rethrow): Don't declare. + (TRY_SJLJ): Update comment. + (TRY, CATCH, END_CATCH): Remove. + * common/common-exceptions.c (exception_rethrow): Remove. + +2019-04-08 Tom Tromey <tom@tromey.com> + + * common/common-exceptions.h (gdb_exception_RETURN_MASK_ALL): + Remove. + (gdb_exception_error): Rename from + gdb_exception_RETURN_MASK_ERROR. + (gdb_exception_quit): Rename from gdb_exception_RETURN_MASK_QUIT. + (gdb_quit_bad_alloc): Update. + * aarch64-tdep.c: Update. + * ada-lang.c: Update. + * ada-typeprint.c: Update. + * ada-valprint.c: Update. + * amd64-tdep.c: Update. + * arch-utils.c: Update. + * break-catch-throw.c: Update. + * breakpoint.c: Update. + * btrace.c: Update. + * c-varobj.c: Update. + * cli/cli-cmds.c: Update. + * cli/cli-interp.c: Update. + * cli/cli-script.c: Update. + * common/common-exceptions.c: Update. + * common/new-op.c: Update. + * common/selftest.c: Update. + * compile/compile-c-symbols.c: Update. + * compile/compile-cplus-symbols.c: Update. + * compile/compile-object-load.c: Update. + * compile/compile-object-run.c: Update. + * completer.c: Update. + * corelow.c: Update. + * cp-abi.c: Update. + * cp-support.c: Update. + * cp-valprint.c: Update. + * darwin-nat.c: Update. + * disasm-selftests.c: Update. + * dtrace-probe.c: Update. + * dwarf-index-cache.c: Update. + * dwarf-index-write.c: Update. + * dwarf2-frame-tailcall.c: Update. + * dwarf2-frame.c: Update. + * dwarf2loc.c: Update. + * dwarf2read.c: Update. + * eval.c: Update. + * event-loop.c: Update. + * event-top.c: Update. + * exec.c: Update. + * f-valprint.c: Update. + * fbsd-tdep.c: Update. + * frame-unwind.c: Update. + * frame.c: Update. + * gdbtypes.c: Update. + * gnu-v3-abi.c: Update. + * guile/guile-internal.h: Update. + * guile/scm-block.c: Update. + * guile/scm-breakpoint.c: Update. + * guile/scm-cmd.c: Update. + * guile/scm-disasm.c: Update. + * guile/scm-frame.c: Update. + * guile/scm-lazy-string.c: Update. + * guile/scm-math.c: Update. + * guile/scm-param.c: Update. + * guile/scm-ports.c: Update. + * guile/scm-pretty-print.c: Update. + * guile/scm-symbol.c: Update. + * guile/scm-symtab.c: Update. + * guile/scm-type.c: Update. + * guile/scm-value.c: Update. + * i386-linux-tdep.c: Update. + * i386-tdep.c: Update. + * inf-loop.c: Update. + * infcall.c: Update. + * infcmd.c: Update. + * infrun.c: Update. + * jit.c: Update. + * language.c: Update. + * linespec.c: Update. + * linux-fork.c: Update. + * linux-nat.c: Update. + * linux-tdep.c: Update. + * linux-thread-db.c: Update. + * main.c: Update. + * mi/mi-cmd-break.c: Update. + * mi/mi-cmd-stack.c: Update. + * mi/mi-interp.c: Update. + * mi/mi-main.c: Update. + * objc-lang.c: Update. + * p-valprint.c: Update. + * parse.c: Update. + * ppc-linux-tdep.c: Update. + * printcmd.c: Update. + * python/py-arch.c: Update. + * python/py-breakpoint.c: Update. + * python/py-cmd.c: Update. + * python/py-finishbreakpoint.c: Update. + * python/py-frame.c: Update. + * python/py-framefilter.c: Update. + * python/py-gdb-readline.c: Update. + * python/py-inferior.c: Update. + * python/py-infthread.c: Update. + * python/py-lazy-string.c: Update. + * python/py-linetable.c: Update. + * python/py-objfile.c: Update. + * python/py-param.c: Update. + * python/py-prettyprint.c: Update. + * python/py-progspace.c: Update. + * python/py-record-btrace.c: Update. + * python/py-record.c: Update. + * python/py-symbol.c: Update. + * python/py-type.c: Update. + * python/py-unwind.c: Update. + * python/py-utils.c: Update. + * python/py-value.c: Update. + * python/python.c: Update. + * record-btrace.c: Update. + * record-full.c: Update. + * remote-fileio.c: Update. + * remote.c: Update. + * riscv-tdep.c: Update. + * rs6000-aix-tdep.c: Update. + * rs6000-tdep.c: Update. + * rust-exp.y: Update. + * rust-lang.c: Update. + * s390-tdep.c: Update. + * selftest-arch.c: Update. + * solib-dsbt.c: Update. + * solib-frv.c: Update. + * solib-spu.c: Update. + * solib-svr4.c: Update. + * solib.c: Update. + * sparc64-linux-tdep.c: Update. + * stack.c: Update. + * symfile-mem.c: Update. + * symmisc.c: Update. + * target.c: Update. + * thread.c: Update. + * top.c: Update. + * tracefile-tfile.c: Update. + * tui/tui.c: Update. + * typeprint.c: Update. + * unittests/cli-utils-selftests.c: Update. + * unittests/parse-connection-spec-selftests.c: Update. + * valops.c: Update. + * valprint.c: Update. + * value.c: Update. + * varobj.c: Update. + * windows-nat.c: Update. + * x86-linux-nat.c: Update. + * xml-support.c: Update. + +2019-04-08 Tom Tromey <tom@tromey.com> + + * xml-support.c: Use C++ exception handling. + * x86-linux-nat.c: Use C++ exception handling. + * windows-nat.c: Use C++ exception handling. + * varobj.c: Use C++ exception handling. + * value.c: Use C++ exception handling. + * valprint.c: Use C++ exception handling. + * valops.c: Use C++ exception handling. + * unittests/parse-connection-spec-selftests.c: Use C++ exception + handling. + * unittests/cli-utils-selftests.c: Use C++ exception handling. + * typeprint.c: Use C++ exception handling. + * tui/tui.c: Use C++ exception handling. + * tracefile-tfile.c: Use C++ exception handling. + * top.c: Use C++ exception handling. + * thread.c: Use C++ exception handling. + * target.c: Use C++ exception handling. + * symmisc.c: Use C++ exception handling. + * symfile-mem.c: Use C++ exception handling. + * stack.c: Use C++ exception handling. + * sparc64-linux-tdep.c: Use C++ exception handling. + * solib.c: Use C++ exception handling. + * solib-svr4.c: Use C++ exception handling. + * solib-spu.c: Use C++ exception handling. + * solib-frv.c: Use C++ exception handling. + * solib-dsbt.c: Use C++ exception handling. + * selftest-arch.c: Use C++ exception handling. + * s390-tdep.c: Use C++ exception handling. + * rust-lang.c: Use C++ exception handling. + * rust-exp.y: Use C++ exception handling. + * rs6000-tdep.c: Use C++ exception handling. + * rs6000-aix-tdep.c: Use C++ exception handling. + * riscv-tdep.c: Use C++ exception handling. + * remote.c: Use C++ exception handling. + * remote-fileio.c: Use C++ exception handling. + * record-full.c: Use C++ exception handling. + * record-btrace.c: Use C++ exception handling. + * python/python.c: Use C++ exception handling. + * python/py-value.c: Use C++ exception handling. + * python/py-utils.c: Use C++ exception handling. + * python/py-unwind.c: Use C++ exception handling. + * python/py-type.c: Use C++ exception handling. + * python/py-symbol.c: Use C++ exception handling. + * python/py-record.c: Use C++ exception handling. + * python/py-record-btrace.c: Use C++ exception handling. + * python/py-progspace.c: Use C++ exception handling. + * python/py-prettyprint.c: Use C++ exception handling. + * python/py-param.c: Use C++ exception handling. + * python/py-objfile.c: Use C++ exception handling. + * python/py-linetable.c: Use C++ exception handling. + * python/py-lazy-string.c: Use C++ exception handling. + * python/py-infthread.c: Use C++ exception handling. + * python/py-inferior.c: Use C++ exception handling. + * python/py-gdb-readline.c: Use C++ exception handling. + * python/py-framefilter.c: Use C++ exception handling. + * python/py-frame.c: Use C++ exception handling. + * python/py-finishbreakpoint.c: Use C++ exception handling. + * python/py-cmd.c: Use C++ exception handling. + * python/py-breakpoint.c: Use C++ exception handling. + * python/py-arch.c: Use C++ exception handling. + * printcmd.c: Use C++ exception handling. + * ppc-linux-tdep.c: Use C++ exception handling. + * parse.c: Use C++ exception handling. + * p-valprint.c: Use C++ exception handling. + * objc-lang.c: Use C++ exception handling. + * mi/mi-main.c: Use C++ exception handling. + * mi/mi-interp.c: Use C++ exception handling. + * mi/mi-cmd-stack.c: Use C++ exception handling. + * mi/mi-cmd-break.c: Use C++ exception handling. + * main.c: Use C++ exception handling. + * linux-thread-db.c: Use C++ exception handling. + * linux-tdep.c: Use C++ exception handling. + * linux-nat.c: Use C++ exception handling. + * linux-fork.c: Use C++ exception handling. + * linespec.c: Use C++ exception handling. + * language.c: Use C++ exception handling. + * jit.c: Use C++ exception handling. + * infrun.c: Use C++ exception handling. + * infcmd.c: Use C++ exception handling. + * infcall.c: Use C++ exception handling. + * inf-loop.c: Use C++ exception handling. + * i386-tdep.c: Use C++ exception handling. + * i386-linux-tdep.c: Use C++ exception handling. + * guile/scm-value.c: Use C++ exception handling. + * guile/scm-type.c: Use C++ exception handling. + * guile/scm-symtab.c: Use C++ exception handling. + * guile/scm-symbol.c: Use C++ exception handling. + * guile/scm-pretty-print.c: Use C++ exception handling. + * guile/scm-ports.c: Use C++ exception handling. + * guile/scm-param.c: Use C++ exception handling. + * guile/scm-math.c: Use C++ exception handling. + * guile/scm-lazy-string.c: Use C++ exception handling. + * guile/scm-frame.c: Use C++ exception handling. + * guile/scm-disasm.c: Use C++ exception handling. + * guile/scm-cmd.c: Use C++ exception handling. + * guile/scm-breakpoint.c: Use C++ exception handling. + * guile/scm-block.c: Use C++ exception handling. + * guile/guile-internal.h: Use C++ exception handling. + * gnu-v3-abi.c: Use C++ exception handling. + * gdbtypes.c: Use C++ exception handling. + * frame.c: Use C++ exception handling. + * frame-unwind.c: Use C++ exception handling. + * fbsd-tdep.c: Use C++ exception handling. + * f-valprint.c: Use C++ exception handling. + * exec.c: Use C++ exception handling. + * event-top.c: Use C++ exception handling. + * event-loop.c: Use C++ exception handling. + * eval.c: Use C++ exception handling. + * dwarf2read.c: Use C++ exception handling. + * dwarf2loc.c: Use C++ exception handling. + * dwarf2-frame.c: Use C++ exception handling. + * dwarf2-frame-tailcall.c: Use C++ exception handling. + * dwarf-index-write.c: Use C++ exception handling. + * dwarf-index-cache.c: Use C++ exception handling. + * dtrace-probe.c: Use C++ exception handling. + * disasm-selftests.c: Use C++ exception handling. + * darwin-nat.c: Use C++ exception handling. + * cp-valprint.c: Use C++ exception handling. + * cp-support.c: Use C++ exception handling. + * cp-abi.c: Use C++ exception handling. + * corelow.c: Use C++ exception handling. + * completer.c: Use C++ exception handling. + * compile/compile-object-run.c: Use C++ exception handling. + * compile/compile-object-load.c: Use C++ exception handling. + * compile/compile-cplus-symbols.c: Use C++ exception handling. + * compile/compile-c-symbols.c: Use C++ exception handling. + * common/selftest.c: Use C++ exception handling. + * common/new-op.c: Use C++ exception handling. + * cli/cli-script.c: Use C++ exception handling. + * cli/cli-interp.c: Use C++ exception handling. + * cli/cli-cmds.c: Use C++ exception handling. + * c-varobj.c: Use C++ exception handling. + * btrace.c: Use C++ exception handling. + * breakpoint.c: Use C++ exception handling. + * break-catch-throw.c: Use C++ exception handling. + * arch-utils.c: Use C++ exception handling. + * amd64-tdep.c: Use C++ exception handling. + * ada-valprint.c: Use C++ exception handling. + * ada-typeprint.c: Use C++ exception handling. + * ada-lang.c: Use C++ exception handling. + * aarch64-tdep.c: Use C++ exception handling. + +2019-04-08 Tom Tromey <tom@tromey.com> + + * xml-support.c (gdb_xml_parser::parse): Update. + * x86-linux-nat.c (x86_linux_nat_target::enable_btrace): Update. + * value.c (show_convenience): Update. + * unittests/cli-utils-selftests.c (test_number_or_range_parser) + (test_parse_flags_qcs): Update. + * thread.c (thr_try_catch_cmd): Update. + * target.c (target_translate_tls_address): Update. + * stack.c (print_frame_arg, read_frame_local, read_frame_arg) + (info_frame_command_core, frame_apply_command_count): Update. + * rust-exp.y (rust_lex_exception_test): Update. + * riscv-tdep.c (riscv_print_one_register_info): Update. + * remote.c (remote_target::enable_btrace): Update. + * record-btrace.c (record_btrace_enable_warn): Update. + * python/py-utils.c (gdbpy_convert_exception): Update. + * printcmd.c (do_one_display, print_variable_and_value): Update. + * mi/mi-main.c (mi_print_exception): Update. + * mi/mi-interp.c (mi_cmd_interpreter_exec): Use SCOPE_EXIT. + * mi/mi-cmd-stack.c (list_arg_or_local): Update. + * linux-nat.c (linux_nat_target::attach): Update. + * linux-fork.c (class scoped_switch_fork_info): Update. + * infrun.c (displaced_step_prepare): Update. + * infcall.c (call_function_by_hand_dummy): Update. + * guile/scm-exception.c (gdbscm_scm_from_gdb_exception): Update. + * gnu-v3-abi.c (print_one_vtable): Update. + * frame.c (get_prev_frame_always): Update. + * f-valprint.c (info_common_command_for_block): Update. + * exec.c (try_open_exec_file): Update. + * exceptions.c (print_exception, exception_print) + (exception_fprintf, exception_print_same): Update. + * dwarf2-frame.c (dwarf2_build_frame_info): Update. + * dwarf-index-cache.c (index_cache::store) + (index_cache::lookup_gdb_index): Update. + * darwin-nat.c (maybe_cache_shell): Update. + * cp-valprint.c (cp_print_value_fields): Update. + * compile/compile-cplus-symbols.c (gcc_cplus_convert_symbol) + (gcc_cplus_symbol_address): Update. + * compile/compile-c-symbols.c (gcc_convert_symbol) + (gcc_symbol_address, generate_c_for_for_one_variable): Update. + * common/selftest.c: Update. + * common/common-exceptions.h (struct gdb_exception) <message>: Now + a std::string. + (exception_try_scope_entry, exception_try_scope_exit): Don't + declare. + (struct exception_try_scope): Remove. + (TRY): Don't use exception_try_scope. + (struct gdb_exception): Add constructor, operator=. + <what>: New method. + (struct gdb_exception_RETURN_MASK_ALL) + (struct gdb_exception_RETURN_MASK_ERROR) + (struct gdb_exception_RETURN_MASK_QUIT): Add constructor. + (struct gdb_quit_bad_alloc): Update. + * common/common-exceptions.c (exception_none): Change + initializer. + (struct catcher) <state, exception>: Initialize inline. + <prev>: Remove member. + (current_catcher): Remove. + (catchers): New global. + (exceptions_state_mc_init): Simplify. + (catcher_pop): Remove. + (exceptions_state_mc, exceptions_state_mc_catch): Update. + (try_scope_depth, exception_try_scope_entry) + (exception_try_scope_exit): Remove. + (throw_exception_sjlj): Update. + (exception_messages, exception_messages_size): Remove. + (throw_it): Simplify. + (gdb_exception_sliced_copy): Remove. + (throw_exception_cxx): Update. + * cli/cli-script.c (script_from_file): Update. + * breakpoint.c (insert_bp_location, update_breakpoint_locations): + Update. + * ada-valprint.c (ada_val_print): Update. + * ada-lang.c (ada_to_fixed_type_1, ada_exception_name_addr) + (create_excep_cond_exprs): Update. + +2019-04-08 Tom Tromey <tom@tromey.com> + + * common/common-exceptions.h (GDB_XCPT_SJMP, GDB_XCPT_TRY) + (GDB_XCPT_RAW_TRY, GDB_XCPT): Remove. + (TRY, CATCH, END_CATCH): Remove some definitions. + * common/common-exceptions.c: Don't use GDB_XCPT. + (catcher_list_size): Remove. + (throw_exception, throw_it): Simplify. + +2019-04-05 Tom Tromey <tom@tromey.com> + + Revert the header-sorting patch. + * ft32-tdep.c: Revert. + * frv-tdep.c: Revert. + * frv-linux-tdep.c: Revert. + * frame.c: Revert. + * frame-unwind.c: Revert. + * frame-base.c: Revert. + * fork-child.c: Revert. + * findvar.c: Revert. + * findcmd.c: Revert. + * filesystem.c: Revert. + * filename-seen-cache.h: Revert. + * filename-seen-cache.c: Revert. + * fbsd-tdep.c: Revert. + * fbsd-nat.h: Revert. + * fbsd-nat.c: Revert. + * f-valprint.c: Revert. + * f-typeprint.c: Revert. + * f-lang.c: Revert. + * extension.h: Revert. + * extension.c: Revert. + * extension-priv.h: Revert. + * expprint.c: Revert. + * exec.h: Revert. + * exec.c: Revert. + * exceptions.c: Revert. + * event-top.c: Revert. + * event-loop.c: Revert. + * eval.c: Revert. + * elfread.c: Revert. + * dwarf2read.h: Revert. + * dwarf2read.c: Revert. + * dwarf2loc.c: Revert. + * dwarf2expr.h: Revert. + * dwarf2expr.c: Revert. + * dwarf2-frame.c: Revert. + * dwarf2-frame-tailcall.c: Revert. + * dwarf-index-write.h: Revert. + * dwarf-index-write.c: Revert. + * dwarf-index-common.c: Revert. + * dwarf-index-cache.h: Revert. + * dwarf-index-cache.c: Revert. + * dummy-frame.c: Revert. + * dtrace-probe.c: Revert. + * disasm.h: Revert. + * disasm.c: Revert. + * disasm-selftests.c: Revert. + * dictionary.c: Revert. + * dicos-tdep.c: Revert. + * demangle.c: Revert. + * dcache.h: Revert. + * dcache.c: Revert. + * darwin-nat.h: Revert. + * darwin-nat.c: Revert. + * darwin-nat-info.c: Revert. + * d-valprint.c: Revert. + * d-namespace.c: Revert. + * d-lang.c: Revert. + * ctf.c: Revert. + * csky-tdep.c: Revert. + * csky-linux-tdep.c: Revert. + * cris-tdep.c: Revert. + * cris-linux-tdep.c: Revert. + * cp-valprint.c: Revert. + * cp-support.c: Revert. + * cp-namespace.c: Revert. + * cp-abi.c: Revert. + * corelow.c: Revert. + * corefile.c: Revert. + * continuations.c: Revert. + * completer.h: Revert. + * completer.c: Revert. + * complaints.c: Revert. + * coffread.c: Revert. + * coff-pe-read.c: Revert. + * cli-out.h: Revert. + * cli-out.c: Revert. + * charset.c: Revert. + * c-varobj.c: Revert. + * c-valprint.c: Revert. + * c-typeprint.c: Revert. + * c-lang.c: Revert. + * buildsym.c: Revert. + * buildsym-legacy.c: Revert. + * build-id.h: Revert. + * build-id.c: Revert. + * btrace.c: Revert. + * bsd-uthread.c: Revert. + * breakpoint.h: Revert. + * breakpoint.c: Revert. + * break-catch-throw.c: Revert. + * break-catch-syscall.c: Revert. + * break-catch-sig.c: Revert. + * blockframe.c: Revert. + * block.c: Revert. + * bfin-tdep.c: Revert. + * bfin-linux-tdep.c: Revert. + * bfd-target.c: Revert. + * bcache.c: Revert. + * ax-general.c: Revert. + * ax-gdb.h: Revert. + * ax-gdb.c: Revert. + * avr-tdep.c: Revert. + * auxv.c: Revert. + * auto-load.c: Revert. + * arm-wince-tdep.c: Revert. + * arm-tdep.c: Revert. + * arm-symbian-tdep.c: Revert. + * arm-pikeos-tdep.c: Revert. + * arm-obsd-tdep.c: Revert. + * arm-nbsd-tdep.c: Revert. + * arm-nbsd-nat.c: Revert. + * arm-linux-tdep.c: Revert. + * arm-linux-nat.c: Revert. + * arm-fbsd-tdep.c: Revert. + * arm-fbsd-nat.c: Revert. + * arm-bsd-tdep.c: Revert. + * arch-utils.c: Revert. + * arc-tdep.c: Revert. + * arc-newlib-tdep.c: Revert. + * annotate.h: Revert. + * annotate.c: Revert. + * amd64-windows-tdep.c: Revert. + * amd64-windows-nat.c: Revert. + * amd64-tdep.c: Revert. + * amd64-sol2-tdep.c: Revert. + * amd64-obsd-tdep.c: Revert. + * amd64-obsd-nat.c: Revert. + * amd64-nbsd-tdep.c: Revert. + * amd64-nbsd-nat.c: Revert. + * amd64-nat.c: Revert. + * amd64-linux-tdep.c: Revert. + * amd64-linux-nat.c: Revert. + * amd64-fbsd-tdep.c: Revert. + * amd64-fbsd-nat.c: Revert. + * amd64-dicos-tdep.c: Revert. + * amd64-darwin-tdep.c: Revert. + * amd64-bsd-nat.c: Revert. + * alpha-tdep.c: Revert. + * alpha-obsd-tdep.c: Revert. + * alpha-nbsd-tdep.c: Revert. + * alpha-mdebug-tdep.c: Revert. + * alpha-linux-tdep.c: Revert. + * alpha-linux-nat.c: Revert. + * alpha-bsd-tdep.c: Revert. + * alpha-bsd-nat.c: Revert. + * aix-thread.c: Revert. + * agent.c: Revert. + * addrmap.c: Revert. + * ada-varobj.c: Revert. + * ada-valprint.c: Revert. + * ada-typeprint.c: Revert. + * ada-tasks.c: Revert. + * ada-lang.c: Revert. + * aarch64-tdep.c: Revert. + * aarch64-ravenscar-thread.c: Revert. + * aarch64-newlib-tdep.c: Revert. + * aarch64-linux-tdep.c: Revert. + * aarch64-linux-nat.c: Revert. + * aarch64-fbsd-tdep.c: Revert. + * aarch64-fbsd-nat.c: Revert. + * aarch32-linux-nat.c: Revert. + +2019-04-05 Tom Tromey <tom@tromey.com> + + * ft32-tdep.c: Sort headers. + * frv-tdep.c: Sort headers. + * frv-linux-tdep.c: Sort headers. + * frame.c: Sort headers. + * frame-unwind.c: Sort headers. + * frame-base.c: Sort headers. + * fork-child.c: Sort headers. + * findvar.c: Sort headers. + * findcmd.c: Sort headers. + * filesystem.c: Sort headers. + * filename-seen-cache.h: Sort headers. + * filename-seen-cache.c: Sort headers. + * fbsd-tdep.c: Sort headers. + * fbsd-nat.h: Sort headers. + * fbsd-nat.c: Sort headers. + * f-valprint.c: Sort headers. + * f-typeprint.c: Sort headers. + * f-lang.c: Sort headers. + * extension.h: Sort headers. + * extension.c: Sort headers. + * extension-priv.h: Sort headers. + * expprint.c: Sort headers. + * exec.h: Sort headers. + * exec.c: Sort headers. + * exceptions.c: Sort headers. + * event-top.c: Sort headers. + * event-loop.c: Sort headers. + * eval.c: Sort headers. + * elfread.c: Sort headers. + * dwarf2read.h: Sort headers. + * dwarf2read.c: Sort headers. + * dwarf2loc.c: Sort headers. + * dwarf2expr.h: Sort headers. + * dwarf2expr.c: Sort headers. + * dwarf2-frame.c: Sort headers. + * dwarf2-frame-tailcall.c: Sort headers. + * dwarf-index-write.h: Sort headers. + * dwarf-index-write.c: Sort headers. + * dwarf-index-common.c: Sort headers. + * dwarf-index-cache.h: Sort headers. + * dwarf-index-cache.c: Sort headers. + * dummy-frame.c: Sort headers. + * dtrace-probe.c: Sort headers. + * disasm.h: Sort headers. + * disasm.c: Sort headers. + * disasm-selftests.c: Sort headers. + * dictionary.c: Sort headers. + * dicos-tdep.c: Sort headers. + * demangle.c: Sort headers. + * dcache.h: Sort headers. + * dcache.c: Sort headers. + * darwin-nat.h: Sort headers. + * darwin-nat.c: Sort headers. + * darwin-nat-info.c: Sort headers. + * d-valprint.c: Sort headers. + * d-namespace.c: Sort headers. + * d-lang.c: Sort headers. + * ctf.c: Sort headers. + * csky-tdep.c: Sort headers. + * csky-linux-tdep.c: Sort headers. + * cris-tdep.c: Sort headers. + * cris-linux-tdep.c: Sort headers. + * cp-valprint.c: Sort headers. + * cp-support.c: Sort headers. + * cp-namespace.c: Sort headers. + * cp-abi.c: Sort headers. + * corelow.c: Sort headers. + * corefile.c: Sort headers. + * continuations.c: Sort headers. + * completer.h: Sort headers. + * completer.c: Sort headers. + * complaints.c: Sort headers. + * coffread.c: Sort headers. + * coff-pe-read.c: Sort headers. + * cli-out.h: Sort headers. + * cli-out.c: Sort headers. + * charset.c: Sort headers. + * c-varobj.c: Sort headers. + * c-valprint.c: Sort headers. + * c-typeprint.c: Sort headers. + * c-lang.c: Sort headers. + * buildsym.c: Sort headers. + * buildsym-legacy.c: Sort headers. + * build-id.h: Sort headers. + * build-id.c: Sort headers. + * btrace.c: Sort headers. + * bsd-uthread.c: Sort headers. + * breakpoint.h: Sort headers. + * breakpoint.c: Sort headers. + * break-catch-throw.c: Sort headers. + * break-catch-syscall.c: Sort headers. + * break-catch-sig.c: Sort headers. + * blockframe.c: Sort headers. + * block.c: Sort headers. + * bfin-tdep.c: Sort headers. + * bfin-linux-tdep.c: Sort headers. + * bfd-target.c: Sort headers. + * bcache.c: Sort headers. + * ax-general.c: Sort headers. + * ax-gdb.h: Sort headers. + * ax-gdb.c: Sort headers. + * avr-tdep.c: Sort headers. + * auxv.c: Sort headers. + * auto-load.c: Sort headers. + * arm-wince-tdep.c: Sort headers. + * arm-tdep.c: Sort headers. + * arm-symbian-tdep.c: Sort headers. + * arm-pikeos-tdep.c: Sort headers. + * arm-obsd-tdep.c: Sort headers. + * arm-nbsd-tdep.c: Sort headers. + * arm-nbsd-nat.c: Sort headers. + * arm-linux-tdep.c: Sort headers. + * arm-linux-nat.c: Sort headers. + * arm-fbsd-tdep.c: Sort headers. + * arm-fbsd-nat.c: Sort headers. + * arm-bsd-tdep.c: Sort headers. + * arch-utils.c: Sort headers. + * arc-tdep.c: Sort headers. + * arc-newlib-tdep.c: Sort headers. + * annotate.h: Sort headers. + * annotate.c: Sort headers. + * amd64-windows-tdep.c: Sort headers. + * amd64-windows-nat.c: Sort headers. + * amd64-tdep.c: Sort headers. + * amd64-sol2-tdep.c: Sort headers. + * amd64-obsd-tdep.c: Sort headers. + * amd64-obsd-nat.c: Sort headers. + * amd64-nbsd-tdep.c: Sort headers. + * amd64-nbsd-nat.c: Sort headers. + * amd64-nat.c: Sort headers. + * amd64-linux-tdep.c: Sort headers. + * amd64-linux-nat.c: Sort headers. + * amd64-fbsd-tdep.c: Sort headers. + * amd64-fbsd-nat.c: Sort headers. + * amd64-dicos-tdep.c: Sort headers. + * amd64-darwin-tdep.c: Sort headers. + * amd64-bsd-nat.c: Sort headers. + * alpha-tdep.c: Sort headers. + * alpha-obsd-tdep.c: Sort headers. + * alpha-nbsd-tdep.c: Sort headers. + * alpha-mdebug-tdep.c: Sort headers. + * alpha-linux-tdep.c: Sort headers. + * alpha-linux-nat.c: Sort headers. + * alpha-bsd-tdep.c: Sort headers. + * alpha-bsd-nat.c: Sort headers. + * aix-thread.c: Sort headers. + * agent.c: Sort headers. + * addrmap.c: Sort headers. + * ada-varobj.c: Sort headers. + * ada-valprint.c: Sort headers. + * ada-typeprint.c: Sort headers. + * ada-tasks.c: Sort headers. + * ada-lang.c: Sort headers. + * aarch64-tdep.c: Sort headers. + * aarch64-ravenscar-thread.c: Sort headers. + * aarch64-newlib-tdep.c: Sort headers. + * aarch64-linux-tdep.c: Sort headers. + * aarch64-linux-nat.c: Sort headers. + * aarch64-fbsd-tdep.c: Sort headers. + * aarch64-fbsd-nat.c: Sort headers. + * aarch32-linux-nat.c: Sort headers. + +2019-04-04 Tom Tromey <tom@tromey.com> + + * varobj.c (varobj_create): Update. + * rust-exp.y (struct rust_parser) <update_innermost_block, + lookup_symbol>: New methods. + (rust_parser::update_innermost_block, rust_parser::lookup_symbol): + Rename. + (rust_parser::rust_lookup_type) + (rust_parser::convert_ast_to_expression, rust_lex_tests): Update. + * printcmd.c (display_command, do_one_display): Update. + * parser-defs.h (struct parser_state) <parser_state>: Add + "tracker" parameter. + (block_tracker): New member. + (class innermost_block_tracker) <innermost_block_tracker>: Add + "types" parameter. + <reset>: Remove method. + (innermost_block): Don't declare. + (null_post_parser): Update. + * parse.c (innermost_block): Remove global. + (write_dollar_variable): Update. + (parse_exp_1, parse_exp_in_context): Add "tracker" parameter. + Remove "tracker_types" parameter. + (parse_expression): Add "tracker" parameter. + (parse_expression_for_completion): Update. + (null_post_parser): Add "tracker" parameter. + * p-exp.y: Update rules. + * m2-exp.y: Update rules. + * language.h (struct language_defn) <la_post_parser>: Add + "tracker" parameter. + * go-exp.y: Update rules. + * f-exp.y: Update rules. + * expression.h (parse_expression, parse_exp_1): Add "tracker" + parameter. + * d-exp.y: Update rules. + * c-exp.y: Update rules. + * breakpoint.c (set_breakpoint_condition): Create an + innermost_block_tracker. + (watch_command_1): Likewise. + * ada-lang.c (resolve): Add "tracker" parameter. + (resolve_subexp): Likewise. + * ada-exp.y (write_var_from_sym): Update. + +2019-04-04 Tom Tromey <tom@tromey.com> + + * type-stack.h: New file. + * type-stack.c: New file. + * parser-defs.h (enum type_pieces, union type_stack_elt): Move to + type-stack.h. + (insert_into_type_stack, insert_type, push_type, push_type_int) + (insert_type_address_space, pop_type, pop_type_int) + (pop_typelist, pop_type_stack, append_type_stack) + (push_type_stack, get_type_stack, push_typelist) + (follow_type_instance_flags, follow_types): Don't declare. + * parse.c (type_stack): Remove global. + (parse_exp_in_context): Update. + (insert_into_type_stack, insert_type, push_type, push_type_int) + (insert_type_address_space, pop_type, pop_type_int) + (pop_typelist, pop_type_stack, append_type_stack) + (push_type_stack, get_type_stack, push_typelist) + (follow_type_instance_flags, follow_types): Remove (moved to + type-stack.c). + * f-exp.y (type_stack): New global. + Update rules. + (push_kind_type, f_parse): Update. + * d-exp.y (type_stack): New global. + Update rules. + (d_parse): Update. + * c-exp.y (struct c_parse_state) <type_stack>: New member. + Update rules. + * Makefile.in (COMMON_SFILES): Add type-stack.c. + (HFILES_NO_SRCDIR): Add type-stack.h. + +2019-04-04 Tom Tromey <tom@tromey.com> + + * rust-exp.y (rust_parser::lex_identifier, rustyylex) + (rust_parser::convert_ast_to_expression, rust_parse) + (rust_lex_test_completion, rust_lex_tests): Update. + * parser-defs.h (struct expr_completion_state): New. + (struct parser_state) <parser_state>: Add completion parameter. + <mark_struct_expression, mark_completion_tag>: New methods. + <parse_completion, m_completion_state>: New members. + (prefixify_expression, null_post_parser): Update. + (mark_struct_expression, mark_completion_tag): Don't declare. + * parse.c (parse_completion, expout_last_struct) + (expout_tag_completion_type, expout_completion_name): Remove + globals. + (parser_state::mark_struct_expression) + (parser_state::mark_completion_tag): Now methods. + (prefixify_expression): Add last_struct parameter. + (prefixify_subexp): Likewise. + (parse_exp_1): Update. + (parse_exp_in_context): Add cstate parameter. Update. + (parse_expression_for_completion): Create an + expr_completion_state. + (null_post_parser): Add "completion" parameter. + * p-exp.y: Update rules. + (yylex): Update. + * language.h (struct language_defn) <la_post_parser>: Add + "completing" parameter. + * go-exp.y: Update rules. + (lex_one_token): Update. + * expression.h (parse_completion): Don't declare. + * d-exp.y: Update rules. + (lex_one_token): Update rules. + * c-exp.y: Update rules. + (lex_one_token): Update. + * ada-lang.c (resolve): Add "parse_completion" parameter. + (resolve_subexp): Likewise. + (ada_resolve_function): Likewise. + +2019-04-04 Tom Tromey <tom@tromey.com> + + * parser-defs.h (struct parser_state) <start_arglist, + end_arglist>: New methods. + <arglist_len, m_funcall_chain>: New members. + (arglist_len, start_arglist, end_arglist): Don't declare. + * parse.c (arglist_len, funcall_chain): Remove global. + (start_arglist, end_arglist): Remove functions. + (parse_exp_in_context): Update. + * p-exp.y: Update rules. + * m2-exp.y: Update rules. + * go-exp.y: Update rules. + * f-exp.y: Update rules. + * d-exp.y: Update rules. + * c-exp.y: Update rules. + +2019-04-04 Tom Tromey <tom@tromey.com> + + * rust-exp.y (struct rust_parser) <lex_hex, lex_escape, + lex_operator, push_back>: New methods. + Update all rules. + (rust_parser::lex_hex, lex_escape): Rename and update. + (rust_parser::lex_string, rust_parser::lex_identifier): Update. + (rust_parser::lex_operator): Rename and update. + (rust_parser::lex_number, rustyylex, rustyyerror) + (rust_lex_test_init, rust_lex_test_sequence) + (rust_lex_test_push_back, rust_lex_tests): Update. + * parser-defs.h (struct parser_state) <parser_state>: Add "input" + parameter. + <lexptr, prev_lexptr>: New members. + (lexptr, prev_lexptr): Don't declare. + * parse.c (lexptr, prev_lexptr): Remove globals. + (parse_exp_in_context): Update. + * p-exp.y (yylex, yyerror): Update. + * m2-exp.y (parse_number, yylex, yyerror): Update. + * go-exp.y (lex_one_token, yyerror): Update. + * f-exp.y (match_string_literal, yylex, yyerror): Update. + * d-exp.y (lex_one_token, yyerror): Update. + * c-exp.y (scan_macro_expansion, finished_macro_expansion) + (lex_one_token, yyerror): Update. + * ada-lex.l (YY_INPUT): Update. + (rewind_to_char): Update. + * ada-exp.y (yyerror): Update. + +2019-04-04 Tom Tromey <tom@tromey.com> + + * rust-exp.y (rustyylex, rust_lex_tests): Update. + * parser-defs.h (struct parser_state) <parser_state>: Add new + parameter. + <comma_terminates>: New member. + (comma_terminates): Don't declare global. + * parse.c (comma_terminates): Remove global. + (parse_exp_in_context): Update. + * p-exp.y (yylex): Update. + * m2-exp.y (yylex): Update. + * go-exp.y (lex_one_token): Update. + * f-exp.y (yylex): Update. + * d-exp.y (lex_one_token): Update. + * c-exp.y (lex_one_token): Update. + * ada-lex.l: Update. + +2019-04-04 Tom Tromey <tom@tromey.com> + + * rust-exp.y (struct rust_parser) <paren_depth>: New member. + (rustyylex, rust_lex_test_init, rust_lex_test_one) + (rust_lex_test_sequence, rust_lex_test_push_back): Update. + * parser-defs.h (paren_depth): Don't declare. + * parse.c (paren_depth): Remove global. + (parse_exp_in_context): Update. + * p-exp.y (paren_depth): New global. + (pascal_parse): Initialize it. + * m2-exp.y (paren_depth): New global. + (m2_parse): Initialize it. + * go-exp.y (paren_depth): New global. + (go_parse): Initialize it. + * f-exp.y (paren_depth): New global. + (f_parse): Initialize it. + * d-exp.y (paren_depth): New global. + (d_parse): Initialize it. + * c-exp.y (paren_depth): New global. + (c_parse): Initialize it. + * ada-lex.l (paren_depth): New global. + (lexer_init): Initialize it. + +2019-04-04 Tom Tromey <tom@tromey.com> + + * rust-exp.y (rust_parser::crate_name, rust_parser::super_name) + (rust_parser::convert_ast_to_type) + (rust_parser::convert_ast_to_expression, rust_lex_tests): Update. + * parser-defs.h (struct parser_state) <parser_state>: Add + parameters. Initialize new members. + <expression_context_block, expression_context_pc>: New members. + * parse.c (expression_context_block, expression_context_pc): + Remove globals. + (parse_exp_in_context): Update. + * p-exp.y: Update all rules. + (yylex): Update. + * m2-exp.y: Update all rules. + (yylex): Update. + * go-exp.y (yylex): Update. + * f-exp.y (yylex): Update. + * d-exp.y: Update all rules. + (yylex): Update. + * c-exp.y: Update all rules. + (lex_one_token, classify_name, yylex, c_parse): Update. + * ada-exp.y (write_var_or_type, write_name_assoc): Update. + +2019-04-04 Tom Tromey <tom@tromey.com> + + * gdbarch.h, gdbarch.c: Rebuild. + * gdbarch.sh (dtrace_parse_probe_argument): Change type. + * stap-probe.h: + (struct stap_parse_info): Replace "parser_state" with + "expr_builder". + * parser-defs.h (struct expr_builder): Rename from "parser_state". + (parser_state): New class. + * parse.c (expr_builder): Rename. + (expr_builder::release): Rename. + (write_exp_elt, write_exp_elt_opcode, write_exp_elt_sym) + (write_exp_elt_msym, write_exp_elt_block, write_exp_elt_objfile) + (write_exp_elt_longcst, write_exp_elt_floatcst) + (write_exp_elt_type, write_exp_elt_intern, write_exp_string) + (write_exp_string_vector, write_exp_bitstring) + (write_exp_msymbol, mark_struct_expression) + (write_dollar_variable) + (insert_type_address_space, increase_expout_size): Replace + "parser_state" with "expr_builder". + * dtrace-probe.c: Replace "parser_state" with "expr_builder". + * amd64-linux-tdep.c (amd64_dtrace_parse_probe_argument): Replace + "parser_state" with "expr_builder". + +2019-04-04 Tom Tromey <tom@tromey.com> + + * rust-exp.y: Replace "parse_language" with method call. + * p-exp.y: + (yylex): Replace "parse_language" with method call. + * m2-exp.y: + (yylex): Replace "parse_language" with method call. + * go-exp.y (classify_name): Replace "parse_language" with method + call. + * f-exp.y (yylex): Replace "parse_language" with method call. + * d-exp.y (lex_one_token): Replace "parse_language" with method + call. + * c-exp.y: + (lex_one_token, classify_name, yylex): Replace "parse_language" + with method call. + * ada-exp.y (find_primitive_type, type_char) + (type_system_address): Replace "parse_language" with method call. + +2019-04-04 Tom Tromey <tom@tromey.com> + + * rust-exp.y: Replace "parse_gdbarch" with method call. + * parse.c (write_dollar_variable, insert_type_address_space): + Replace "parse_gdbarch" with method call. + * p-exp.y (parse_type, yylex): Replace "parse_gdbarch" with method + call. + * objc-lang.c (end_msglist): Replace "parse_gdbarch" with method + call. + * m2-exp.y (parse_type, parse_m2_type, yylex): Replace + "parse_gdbarch" with method call. + * go-exp.y (parse_type, classify_name): Replace "parse_gdbarch" + with method call. + * f-exp.y (parse_type, parse_f_type, yylex): Replace + "parse_gdbarch" with method call. + * d-exp.y (parse_type, parse_d_type, lex_one_token): Replace + "parse_gdbarch" with method call. + * c-exp.y (parse_type, parse_number, classify_name): Replace + "parse_gdbarch" with method call. + * ada-lex.l: Replace "parse_gdbarch" with method call. + * ada-exp.y (parse_type, find_primitive_type, type_char) + (type_system_address): Replace "parse_gdbarch" with method call. + +2019-04-04 Tom Tromey <tom@tromey.com> + + * dtrace-probe.c (dtrace_probe::build_arg_exprs): Update. + * stap-probe.c (stap_parse_argument): Update. + * stap-probe.h (struct stap_parse_info) <stap_parse_info>: Remove + initial_size parameter. + * rust-exp.y (rust_lex_tests): Update. + * parse.c (parser_state): Update. + (parse_exp_in_context): Update. + * parser-defs.h (struct parser_state) <parser_state>: Remove + "initial_size" parameter. + +2019-04-04 Tom Tromey <tom@tromey.com> + + * parser-defs.h (increase_expout_size): Don't declare. + * parse.c (increase_expout_size): Now static. + +2019-04-04 Thomas Schwinge <thomas@codesourcery.com> + + * gnu-nat.c (gnu_nat_target::wait): Fix + target_waitstatus_to_string call. + +2019-04-01 Andrew Burgess <andrew.burgess@embecosm.com> + + * eval.c (evaluate_subexp_standard): Handle internal functions + during Fortran function call handling. + +2019-04-01 Andrew Burgess <andrew.burgess@embecosm.com> + + * NEWS: Mention new internal functions. + * dwarf2read.c (dwarf2_init_complex_target_type): New function. + (read_base_type): Use dwarf2_init_complex_target_type. + * value.c (creal_internal_fn): New function. + (cimag_internal_fn): New function. + (_initialize_values): Register new internal functions. + +2019-04-01 Philippe Waroquiers <philippe.waroquiers@skynet.be> + + * infrun.c (stop_all_threads): If debug_infrun, always + trace the wait status after wait_one, using + target_waitstatus_to_string and target_pid_to_str. + (handle_inferior_event): Replace various trace of + wait status kind by a single trace. + * gnu-nat.c (gnu_nat_target::wait): Replace local + wait status kind image by target_waitstatus_to_string. + * target/waitstatus.c (target_waitstatus_to_string): Fix + obsolete comment. + +2019-04-01 Tom Tromey <tromey@adacore.com> + + PR symtab/23331: + * dwarf2read.c (partial_die_info::read): Handle DW_AT_ranges. + +2019-04-01 Sergio Durigan Junior <sergiodj@redhat.com> + Pedro Alves <palves@redhat.com> + + * top.c (quit_force): Call 'finalize_values'. + * value.c (finalize_values): New function. + * value.h (finalize_values): Declare. + +2019-03-30 Eli Zaretskii <eliz@gnu.org> + + * NEWS: Announce $_gdb_major and $_gdb_minor. + + * top.c (init_gdb_version_vars): New function. + (gdb_init): Call init_gdb_version_vars. + +2019-03-29 Tom Tromey <tromey@adacore.com> + + * printcmd.c (_initialize_printcmd): Add usage lines. Update some + help text. Remove dead code. + +2019-03-29 Keith Seitz <keiths@redhat.com> + + From Siddhesh Poyarekar: + * f-lang.h (f77_get_upperbound): Return LONGEST. + (f77_get_lowerbound): Likewise. + * f-typeprint.c (f_type_print_varspec_suffix): Expand + UPPER_BOUND and LOWER_BOUND to LONGEST. Use plongest to format + print them. + (f_type_print_base): Expand UPPER_BOUND to LONGEST. Use + plongest to format print it. + * f-valprint.c (f77_get_lowerbound): Return LONGEST. + (f77_get_upperbound): Likewise. + (f77_get_dynamic_length_of_aggregate): Expand UPPER_BOUND, + LOWER_BOUND to LONGEST. + (f77_create_arrayprint_offset_tbl): Likewise. + +2019-03-29 Keith Seitz <keiths@redhat.com> + + * ada-lang.c (ada_template_to_fixed_record_type_1): Use + %s/pulongest for TYPE_LENGTH instead of %d in format + strings. + * ada-typerint.c (ada_print_type): Likewise. + * amd64-windows-tdep.c (amd64_windows_store_arg_in_reg): Likewise. + * compile/compile-c-support.c (generate_register_struct): Likewise. + * gdbtypes.c (recursive_dump_type): Likewise. + * gdbtypes.h (struct type) <length>: Change type to ULONGEST. + * m2-typeprint.c (m2_array): Use %s/pulongest for TYPE_LENGTH + instead of %d in format strings. + * riscv-tdep.c (riscv_type_alignment): Cast second argument + to std::min to ULONGEST. + * symmisc.c (print_symbol): Use %s/pulongest for TYPE_LENGTH + instead of %d in format strings. + * tracepoint.c (info_scope_command): Likewise. + * typeprint.c (print_offset_data::update) + (print_offset_data::finish): Likewise. + * xtensa-tdep.c (xtensa_store_return_value) + (xtensa_push_dummy_call): Likewise. + +2019-03-28 Jon Turney <jon.turney@dronecode.org.uk> + + * windows-nat.c (display_selector): Fixed format specifications + for 64-bit Cygwin. + +2019-03-28 Philippe Waroquiers <philippe.waroquiers@skynet.be> + + * infrun.c (follow_exec): Call target_terminal::ours_for_output. + +2019-03-28 Sandra Loosemore <sandra@codesourcery.com> + + * nios2-tdep.h (struct gdbarch_tdep): Add is_kernel_helper. + * nios2-tdep.c (nios2_get_next_pc): Skip over kernel helpers. + * nios2-linux-tdep.c (nios2_linux_is_kernel_helper): New. + (nios2_linux_init_abi): Install it. + +2019-03-28 Alan Hayward <alan.hayward@arm.com> + + * aarch64-tdep.c (aarch64_vnv_type): Use vector types. + +2019-03-28 Alan Hayward <alan.hayward@arm.com> + + * features/aarch64-sve.c (create_feature_aarch64_sve): Add q view. + +2019-03-24 Philippe Waroquiers <philippe.waroquiers@skynet.be> + Tom Tromey <tromey@adacore.com> + + * minsyms.c (minimal_symbol_upper_bound): Fix buffer overflow. + +2019-03-26 Joel Brobecker <brobecker@adacore.com> + + * gdb-gdb.py.in (StructMainTypePrettyPrinter.bound_img): New method. + (StructMainTypePrettyPrinter.bounds_img): Use new "bound_img" + method to compute the bounds of range types. Also print "[evaluated]" + if the bounds' values come from a dynamic evaluation. + +2019-03-26 Andrew Burgess <andrew.burgess@embecosm.com> + + * cp-valprint.c (cp_print_value_fields): Don't print trailing + whitespace when pretty printing is on. + +2019-03-26 Alan Hayward <alan.hayward@arm.com> + + * ppc-linux-nat.c: Add include. + +2019-03-26 Alan Hayward <alan.hayward@arm.com> + + * NEWS: Mention AArch64 Pointer Authentication. + +2019-03-26 Alan Hayward <alan.hayward@arm.com> + + * arm-linux-nat.c: Add include. + +2019-03-25 Simon Marchi <simon.marchi@polymtl.ca> + + * source-cache.c (source_cache::get_source_lines): Re-read + fullname after calling open_source_file. + +2019-03-25 John Baldwin <jhb@FreeBSD.org> + + * NEWS: Mention TLS support for FreeBSD. + +2019-03-25 Tom Tromey <tromey@adacore.com> + + * minsyms.c (BUNCH_SIZE): Update comment. + (~minimal_symbol_reader): Remove old comment. + (compact_minimal_symbols): Update comment. + (minimal_symbol_reader::install): Remove old comment. Update + other comments. + +2019-03-25 Alan Hayward <alan.hayward@arm.com> + + * s390-linux-nat.c: Add include. + +2019-03-25 Alan Hayward <alan.hayward@arm.com> + + * aarch64-linux-nat.c (aarch64_linux_nat_target::read_description): + Call linux_get_hwcap. + * aarch64-linux-tdep.c (aarch64_linux_core_read_description): + Likewise. + (aarch64_linux_get_hwcap): Remove function. + * aarch64-linux-tdep.h (aarch64_linux_get_hwcap): Remove + declaration. + * arm-linux-nat.c (arm_linux_nat_target::read_description):Call + linux_get_hwcap. + * arm-linux-tdep.c (arm_linux_core_read_description): Likewise. + * linux-tdep.c (linux_get_hwcap): Add function. + (linux_get_hwcap2): Likewise. + * linux-tdep.h (linux_get_hwcap): Add declaration. + (linux_get_hwcap2): Likewise. + * ppc-linux-nat.c (ppc_linux_get_hwcap): Remove function. + (ppc_linux_get_hwcap2): Likewise. + (ppc_linux_nat_target::region_ok_for_hw_watchpoint): Call + linux_get_hwcap. + (ppc_linux_nat_target::insert_watchpoint): Likewise. + (ppc_linux_nat_target::watchpoint_addr_within_range): Likewise. + (ppc_linux_nat_target::read_description): Likewise. + * ppc-linux-tdep.c (ppc_linux_core_read_description): Likewise. + * s390-linux-nat.c: Likewise. + * s390-linux-tdep.c (s390_core_read_description): Likewise. + +2019-03-24 Tom Tromey <tom@tromey.com> + + * ada-lang.c (standard_lookup): Simplify initialization. + (ada_lookup_symbol_nonlocal): Simplify return. + * solib-spu.c (spu_lookup_lib_symbol): Simplify return. + * solib-darwin.c (darwin_lookup_lib_symbol): Simplify return. + * solib-svr4.c (elf_lookup_lib_symbol): Simplify return. + * rust-lang.c (rust_lookup_symbol_nonlocal): Simplify + initialization. + * solib.c (solib_global_lookup): Simplify. + * symtab.c (null_block_symbol): Remove. + (symbol_cache_lookup): Simplify returns. + (lookup_language_this): Simplify returns. + (lookup_symbol_aux): Simplify return. + (lookup_local_symbol): Simplify returns. + (lookup_global_symbol_from_objfile): Simplify return. + (lookup_symbol_in_objfile_symtabs) + (lookup_symbol_in_objfile_from_linkage_name): Simplify return. + (lookup_symbol_via_quick_fns, lookup_symbol_in_static_block) + (lookup_static_symbol, lookup_global_symbol): Simplify return. + * cp-namespace.c (cp_lookup_bare_symbol) + (cp_search_static_and_baseclasses, cp_lookup_symbol_via_imports) + (cp_lookup_symbol_via_all_imports, cp_lookup_nested_symbol_1) + (cp_lookup_nested_symbol): Don't use null_block_symbol. + (cp_lookup_symbol_via_imports): Simplify initialization. + (find_symbol_in_baseclass): Likewise. + * symtab.h (null_block_symbol): Remove. + * d-namespace.c (d_lookup_symbol): Don't use null_block_symbol. + (d_lookup_nested_symbol, d_lookup_symbol_imports) + (d_lookup_symbol_module): Likewise. + (find_symbol_in_baseclass): Simplify initialization. + +2019-03-24 Tom Tromey <tom@tromey.com> + + * expression.h: Don't include symtab.h. + (struct block): Forward declare. + +2019-03-24 Tom Tromey <tom@tromey.com> + + * c-exp.y (typebase): Remove casts. + * gdbtypes.c (lookup_unsigned_typename, ) + (lookup_signed_typename): Remove cast. + * eval.c (parse_to_comma_and_eval): Remove cast. + * parse.c (write_dollar_variable): Remove cast. + * block.h (struct block) <superblock>: Now const. + * symfile-debug.c (debug_qf_map_matching_symbols): Update. + * psymtab.c (psym_map_matching_symbols): Make "block" const. + (map_block): Make "block" const. + * symfile.h (struct quick_symbol_functions) + <map_matching_symbols>: Constify block argument to "callback". + * symtab.c (basic_lookup_transparent_type_quick): Make "block" + const. + (find_pc_sect_compunit_symtab): Make "b" const. + (find_symbol_at_address): Likewise. + (search_symbols): Likewise. + * dwarf2read.c (dw2_lookup_symbol): Make "block" const. + (dw2_debug_names_lookup_symbol): Likewise. + (dw2_map_matching_symbols): Update. + * p-valprint.c (pascal_val_print): Remove "block". + * ada-lang.c (ada_add_global_exceptions): Make "b" const. + (aux_add_nonlocal_symbols): Make "block" const. + (resolve_subexp): Remove cast. + * linespec.c (iterate_over_all_matching_symtabs): Make "block" + const. + (iterate_over_file_blocks): Likewise. + * f-exp.y (%union) <bval>: Remove. + * coffread.c (patch_opaque_types): Make "b" const. + * spu-tdep.c (spu_catch_start): Make "block" const. + * c-valprint.c (print_unpacked_pointer): Remove "block". + * symmisc.c (dump_symtab_1): Make "b" const. + (block_depth): Make "block" const. + * d-exp.y (%union) <bval>: Remove. + * cp-support.h (cp_lookup_rtti_type): Update. + * cp-support.c (cp_lookup_rtti_type): Make "block" const. + * psymtab.c (psym_lookup_symbol): Make "block" const. + (maintenance_check_psymtabs): Make "b" const. + * python/py-framefilter.c (extract_sym): Make "sym_block" const. + (enumerate_locals, enumerate_args): Update. + * python/py-symtab.c (stpy_global_block): Make "block" const. + (stpy_static_block): Likewise. + * inline-frame.c (block_starting_point_at): Make "new_block" + const. + * block.c (find_block_in_blockvector): Make return type const. + (blockvector_for_pc_sect): Make "b" const. + (find_block_in_blockvector): Make "b" const. + +2019-03-23 Tom Tromey <tom@tromey.com> + + * varobj.c (varobj_create): Update. + * symfile.c (clear_symtab_users): Don't reset innermost_block. + * printcmd.c (display_command, do_one_display): Don't reset + innermost_block. + * parser-defs.h (enum innermost_block_tracker_type): Move to + expression.h. + (innermost_block): Update comment. + * parse.c (parse_exp_1): Add tracker_types parameter. + (parse_exp_in_context): Rename from parse_exp_in_context_1. Add + tracker_types parameter. Reset innermost_block. + (parse_exp_in_context): Remove. + (parse_expression_for_completion): Update. + * objfiles.c (~objfile): Don't reset expression_context_block or + innermost_block. + * expression.h (enum innermost_block_tracker_type): Move from + parser-defs.h. + (parse_exp_1): Add tracker_types parameter. + * breakpoint.c (set_breakpoint_condition, watch_command_1): Don't + reset innermost_block. + +2019-03-23 Tom Tromey <tom@tromey.com> + + * objfiles.h: Include bcache.h. + +2019-03-23 Tom Tromey <tom@tromey.com> + + * linespec.c (get_current_search_block): Use + scoped_restore_current_language. + * symmisc.c (dump_symtab): Use scoped_restore_current_language. + +2019-03-22 Alan Hayward <alan.hayward@arm.com> + Jiong Wang <jiong.wang@arm.com> + + * aarch64-linux-tdep.c + (aarch64_linux_iterate_over_regset_sections): Check for pauth + section. + * aarch64-linux-tdep.h (AARCH64_LINUX_SIZEOF_PAUTH): New define. + +2019-03-22 Alan Hayward <alan.hayward@arm.com> + Jiong Wang <jiong.wang@arm.com> + + * aarch64-tdep.c (aarch64_analyze_prologue): Check for pauth + instructions. + (aarch64_analyze_prologue_test): Add PACIASP test. + (aarch64_prologue_prev_register): Unmask PC value. + +2019-03-22 Alan Hayward <alan.hayward@arm.com> + Jiong Wang <jiong.wang@arm.com> + + * aarch64-tdep.c (aarch64_frame_unmask_address): New function. + (aarch64_dwarf2_prev_register): Unmask PC value. + (aarch64_dwarf2_frame_init_reg): Init pauth registers. + (aarch64_execute_dwarf_cfa_vendor_op): Check for + DW_CFA_AARCH64_negate_ra_state. + (aarch64_gdbarch_init): Add aarch64_execute_dwarf_cfa_vendor_op. + +2019-03-22 Alan Hayward <alan.hayward@arm.com> + Jiong Wang <jiong.wang@arm.com> + + * aarch64-tdep.c (aarch64_dwarf_reg_to_regnum): Check for pauth + registers. + (aarch64_pseudo_register_name): Likewise. + (aarch64_pseudo_register_type): Likewise. + (aarch64_pseudo_register_reggroup_p): Likewise. + (aarch64_gdbarch_init): Add pauth registers. + * aarch64-tdep.h (AARCH64_DWARF_PAUTH_RA_STATE): New define. + (AARCH64_DWARF_PAUTH_DMASK): Likewise. + (AARCH64_DWARF_PAUTH_CMASK): Likewise. + (struct gdbarch_tdep): Add regnum for ra_state. + +2019-03-22 Alan Hayward <alan.hayward@arm.com> + Jiong Wang <jiong.wang@arm.com> + + * arch/aarch64.h (AARCH64_PAUTH_REGS_SIZE): New define. + +2019-03-22 Alan Hayward <alan.hayward@arm.com> + Jiong Wang <jiong.wang@arm.com> + + * aarch64-linux-nat.c (fetch_pauth_masks_from_thread): New + function. + (aarch64_linux_nat_target::fetch_registers): Read pauth registers. + * aarch64-tdep.c (aarch64_cannot_store_register): New function. + (aarch64_gdbarch_init): Add puth registers. + * aarch64-tdep.h (struct gdbarch_tdep): Add pauth features. + * arch/aarch64.h (AARCH64_PAUTH_DMASK_REGNUM): New define. + (AARCH64_PAUTH_CMASK_REGNUM): Likewise. + +2019-03-22 Alan Hayward <alan.hayward@arm.com> + Jiong Wang <jiong.wang@arm.com> + + * aarch64-linux-nat.c + (aarch64_linux_nat_target::read_description): Read PACA hwcap. + * aarch64-linux-tdep.c + (aarch64_linux_core_read_description): Likewise. + (aarch64_linux_get_hwcap): New function. + * aarch64-linux-tdep.h (AARCH64_HWCAP_PACA): New define. + (aarch64_linux_get_hwcap): New declaration. + +2019-03-22 Alan Hayward <alan.hayward@arm.com> + Jiong Wang <jiong.wang@arm.com> + + * aarch64-linux-nat.c + (aarch64_linux_nat_target::read_description): Add pauth param. + * aarch64-linux-tdep.c + (aarch64_linux_core_read_description): Likewise. + * aarch64-tdep.c (struct target_desc): Add in pauth. + (aarch64_read_description): Add pauth param. + (aarch64_gdbarch_init): Likewise. + * aarch64-tdep.h (aarch64_read_description): Likewise. + * arch/aarch64.c (aarch64_create_target_description): Likewise. + * arch/aarch64.h (aarch64_create_target_description): Likewise. + * features/Makefile: Add new files. + * features/aarch64-pauth.c: New file. + * features/aarch64-pauth.xml: New file. + +2019-03-20 Tom Tromey <tromey@adacore.com> + + * infrun.c (handle_inferior_event): Rename from + handle_inferior_event_1. Create a scoped_value_mark. + (handle_inferior_event): Remove. + +2019-03-19 Tom Tromey <tromey@adacore.com> + + * mi/mi-interp.c (mi_on_normal_stop_1): Only show displays once. + * infrun.h (print_stop_event): Add "displays" parameter. + * infrun.c (print_stop_event): Add "displays" parameter. + +2019-03-19 Pedro Alves <palves@redhat.com> + + * tui/tui-out.c (tui_ui_out::do_field_string): Simplify. + (tui_ui_out::do_text): Add comments. Reset M_LINE to 0 instead of + to -1. Fix TABs vs spaces. + (tui_ui_out::tui_ui_out): Don't initialize fields here. + * tui/tui-out.h (tui_ui_out) Add intro comments. + <m_line, m_start_of_line>: In-class initialize, and add describing + comment. + +2019-03-18 Alan Hayward <alan.hayward@arm.com> + + * arm-linux-nat.c (arm_linux_insert_hw_breakpoint1): Fix + variable names. + (arm_linux_remove_hw_breakpoint1): Use a gdb::function_view. + +2019-03-18 Pedro Alves <palves@redhat.com> + Eli Zaretskii <eliz@gnu.org> + + * tui/tui-out.c (tui_ui_out::tui_ui_out): Fix initialization of + m_line and m_start_of_line. + +2019-03-18 Eli Zaretskii <eliz@gnu.org> + + * tui/tui-io.c (gdb_wgetch): Don't echo CR. + (tui_getc): When gdb_wgetch returns a CR, behave the same as when + it returns a newline. This fixes a regression in TU mode, whereby + the next line is output on the same screen line as the user input. + +2019-03-18 Tom Tromey <tromey@adacore.com> + + * minsyms.c (minimal_symbol_reader::install): Remove call to + obstack_blank. + +2019-03-18 Pedro Alves <palves@redhat.com> + + * tui/tui-io.c (reverse_mode_p, reverse_save_bg, reverse_save_fg): + New globals. + (apply_style): New, factored out from ... + (apply_ansi_escape): ... this. Handle reverse video mode. + (tui_set_reverse_mode): New function. + * tui/tui-io.h (tui_set_reverse_mode): New declaration. + * tui/tui-winsource.c (tui_show_source_line): Use + tui_set_reverse_mode instead of setting A_STANDOUT. + * ui-style.h (struct ui_file_style) <set_reverse, set_fg, set_bg>: + New setter methods. + +2019-03-18 Hannes Domani <ssbssa@yahoo.de> + + * tui/tui-source.c (copy_source_line): Fix handling of 'column'. + Handle tabs. + +2019-03-18 Tom Tromey <tromey@adacore.com> + + * ada-lang.c (empty_array): Add "high" parameter. + (ada_evaluate_subexp): Update. + +2019-03-17 Sergei Trofimovich <siarheit@google.com> + + * unittests/string_view-selftests.c: Define + _initialize_string_view_selftests unconditionally. + +2019-03-17 Vladimir Martyanov <vilgeforce@gmail.com> + + PR gdb/24350 + * windows-nat.c (windows_make_so): Remove unused text_vma variable. + +2019-03-17 Vladimir Martyanov <vilgeforce@gmail.com> + + PR gdb/24351 + * windows-nat.c (display_selector): Fix format specifiers. + +2019-03-17 Eli Zaretskii <eliz@gnu.org> + + * tui/tui-winsource.c (tui_set_is_exec_point_at): Call + tui_refill_source_window instead of tui_refresh_win, to update the + current execution line. This fixes redisplay of the current line + when stepping through the code with "next" or "step". + +2019-03-16 Eli Zaretskii <eliz@gnu.org> + + * source-cache.c (source_cache::get_source_lines): Call + find_source_lines to initialize s->nlines. This fixes vertical + scrolling of TUI source window when the DOWN arrow is pressed. + +2019-03-16 Philippe Waroquiers <philippe.waroquiers@skynet.be> + + * auto-load.c (_initialize_auto_load): Fix 'This options has'. + linux-thread-db.c (_initialize_thread_db): Likewise. + +2019-03-16 Eli Zaretskii <eliz@gnu.org> + + * tui/tui-winsource.c (tui_show_source_line): Revert "Use + wclrtoeol in tui_show_source_line". This reverts changes made in + commit 4a3045920bbe4e50a0f4920b0fdc4e88ef23015c. + +2019-03-15 Tom Tromey <tom@tromey.com> + + * symtab.h (struct minimal_symbol): Derive from + general_symbol_info. + (MSYMBOL_VALUE, MSYMBOL_VALUE_RAW_ADDRESS) + (MSYMBOL_VALUE_ADDRESS, MSYMBOL_VALUE_BYTES) + (MSYMBOL_BLOCK_VALUE, MSYMBOL_VALUE_CHAIN, MSYMBOL_LANGUAGE) + (MSYMBOL_SECTION, MSYMBOL_OBJ_SECTION, MSYMBOL_NATURAL_NAME) + (MSYMBOL_LINKAGE_NAME, MSYMBOL_DEMANGLED_NAME) + (MSYMBOL_SEARCH_NAME): Update. + (MSYMBOL_SET_LANGUAGE, MSYMBOL_SET_NAMES): Remove. + * solib.c (gdb_bfd_lookup_symbol_from_symtab): Don't use memset. + * minsyms.c (minimal_symbol_reader::record_full): Update. + +2019-03-15 Tom Tromey <tom@tromey.com> + + * minsyms.c (minimal_symbol_reader::install): Use memcpy. + +2019-03-15 Tom Tromey <tom@tromey.com> + + * objfiles.h (struct objfile_per_bfd_storage) <msymbols>: Now a + unique_xmalloc_ptr. + (objfile::msymbols_range::begin, objfile::msymbols_range::end): + Update. + * minsyms.c (lookup_minimal_symbol_by_pc_section) + (build_minimal_symbol_hash_tables) + (minimal_symbol_reader::install): Update. + +2019-03-15 Tom Tromey <tom@tromey.com> + + * symtab.c (create_demangled_names_hash): Update. + (symbol_set_names): Update. + * objfiles.h (struct objfile_per_bfd_storage) + <demangled_names_hash>: Now an htab_up. + * objfiles.c (objfile_per_bfd_storage): Simplify. + +2019-03-15 Tom Tromey <tom@tromey.com> + + * objfiles.h (struct objfile_per_bfd_storage): Declare + destructor. + * objfiles.c (objfile_per_bfd_storage::~objfile_per_bfd_storage): + New. + (get_objfile_bfd_data): Use new. Don't initialize + language_of_main. + (free_objfile_per_bfd_storage): Remove. + (objfile_bfd_data_free, objfile::~objfile): Use delete. + +2019-03-15 Tom Tromey <tom@tromey.com> + + * symfile.c (reread_symbols): Update. + * objfiles.c (objfile::objfile): Update. + * minsyms.h (terminate_minimal_symbol_table): Don't declare. + * minsyms.c (lookup_minimal_symbol_by_pc_section): Update + comment. + (minimal_symbol_reader::install): Update. + (terminate_minimal_symbol_table): Remove. + * jit.c (jit_object_close_impl): Update. + +2019-03-15 Tom Tromey <tom@tromey.com> + + * minsyms.c (minimal_symbol_reader::record_full): Remove some + initializations. + +2019-03-15 Tom Tromey <tom@tromey.com> + + * objfiles.h (struct objfile_per_bfd_storage) + <demangled_hash_languages>: Now a bitset. + * minsyms.c (add_minsym_to_demangled_hash_table): Update. + (lookup_minimal_symbol): Update. + +2019-03-15 Tom Tromey <tom@tromey.com> + + * minsyms.h (class minimal_symbol_reader) <record_with_info>: + Don't return the symbol. + * coffread.c (record_minimal_symbol): Use record_full. + +2019-03-14 Eli Zaretskii <eliz@gnu.org> + + The MS-Windows port of ncurses fails to switch to a color pair if + one or both of the colors are the implicit default colors. This + change records the default colors when TUI is initialized, and + then specifies them explicitly when a color pair uses the default + colors. This allows color styling in TUI mode on MS-Windows. + + * tui/tui-io.c [__MINGW32__]: Include windows.h. Declare + ncurses_norm_attr. + (tui_initialize_io) [__MINGW32__]: Record the default terminal + colors in ncurses_norm_attr. + (apply_ansi_escape) [__MINGW32__]: If a color in a color pair is + "none", replace it with the default color recorded in + ncurses_norm_attr. + +2019-03-14 Tom Tromey <tromey@adacore.com> + + * source-cache.h (class source_cache) <get_source_lines>: Return + std::string. + * source-cache.c (source_cache::extract_lines): Handle case where + first_pos==npos. Return std::string. + (source_cache::get_source_lines): Update. + +2019-03-14 Tom Tromey <tromey@adacore.com> + + * NEWS: Add item for "style sources" commands. + * source-cache.c (source_cache::get_source_lines): Check + source_styling. + * cli/cli-style.c (source_styling): New global. + (_initialize_cli_style): Add "style sources" commands. + (show_style_sources): New function. + * cli/cli-style.h (source_styling): Declare. + +2019-03-14 Pedro Alves <palves@redhat.com> + Tom Tromey <tromey@adacore.com> + + * tui/tui-winsource.h (tui_refill_source_window): Declare. + * tui/tui-winsource.c (tui_refill_source_window): New function, + from... + (tui_horizontal_source_scroll): ... here. Move some logic. + * cli/cli-style.c (set_style_enabled): Notify new observable. + * tui/tui-hooks.c (tui_redisplay_source): New function. + (tui_attach_detach_observers): Attach or detach + tui_redisplay_source. + * observable.h (source_styling_changed): New observable. + * observable.c: Define source_styling_changed observable. + +2019-03-13 Tom Tromey <tromey@adacore.com> + + * i386-gnu-nat.c (i386_gnu_nat_target::fetch_registers) + (i386_gnu_nat_target::store_registers): Update. + * target-debug.h (target_debug_print_std_string): New macro. + * x86-linux-nat.c (x86_linux_nat_target::enable_btrace): Update. + * windows-tdep.c (display_one_tib): Update. + * tui/tui-stack.c (tui_make_status_line): Update. + * top.c (print_inferior_quit_action): Update. + * thread.c (thr_try_catch_cmd): Update. + (add_thread_with_info): Update. + (thread_target_id_str): Update. + (thr_try_catch_cmd): Update. + (thread_command): Update. + (thread_find_command): Update. + * record-btrace.c (record_btrace_target::info_record) + (record_btrace_resume_thread, record_btrace_target::resume) + (record_btrace_cancel_resume, record_btrace_step_thread) + (record_btrace_target::wait, record_btrace_target::wait) + (record_btrace_target::wait, record_btrace_target::stop): Update. + * progspace.c (print_program_space): Update. + * process-stratum-target.c + (process_stratum_target::thread_address_space): Update. + * linux-fork.c (linux_fork_mourn_inferior) + (detach_checkpoint_command, info_checkpoints_command) + (linux_fork_context): Update. + (linux_fork_detach): Update. + (class scoped_switch_fork_info): Update. + (delete_checkpoint_command): Update. + * infrun.c (follow_fork_inferior): Update. + (follow_fork_inferior): Update. + (proceed_after_vfork_done): Update. + (handle_vfork_child_exec_or_exit): Update. + (follow_exec): Update. + (displaced_step_prepare_throw): Update. + (displaced_step_restore): Update. + (start_step_over): Update. + (resume_1): Update. + (clear_proceed_status_thread): Update. + (proceed): Update. + (print_target_wait_results): Update. + (do_target_wait): Update. + (context_switch): Update. + (stop_all_threads): Update. + (restart_threads): Update. + (finish_step_over): Update. + (handle_signal_stop): Update. + (switch_back_to_stepped_thread): Update. + (keep_going_pass_signal): Update. + (print_exited_reason): Update. + (normal_stop): Update. + * inferior.c (inferior_pid_to_str): Change return type. + (print_selected_inferior): Update. + (add_inferior): Update. + (detach_inferior): Update. + * dummy-frame.c (fprint_dummy_frames): Update. + * dcache.c (dcache_info_1): Update. + * btrace.c (btrace_enable, btrace_disable, btrace_teardown) + (btrace_fetch, btrace_clear): Update. + * linux-tdep.c (linux_core_pid_to_str): Change return type. + * i386-cygwin-tdep.c (i386_windows_core_pid_to_str): Change return + type. + * fbsd-tdep.c (fbsd_core_pid_to_str): Change return type. + * sol2-tdep.h (sol2_core_pid_to_str): Change return type. + * sol2-tdep.c (sol2_core_pid_to_str): Change return type. + * gdbarch.c, gdbarch.h: Rebuild. + * gdbarch.sh (core_pid_to_str): Change return type. + * windows-nat.c (struct windows_nat_target) <pid_to_str>: Change + return type. + (windows_nat_target::pid_to_str): Change return type. + (windows_delete_thread): Update. + (windows_nat_target::attach): Update. + (windows_nat_target::files_info): Update. + * target-delegates.c: Rebuild. + * sol-thread.c (class sol_thread_target) <pid_to_str>: Change + return type. + (sol_thread_target::pid_to_str): Change return type. + * remote.c (class remote_target) <pid_to_str>: Change return + type. + (remote_target::pid_to_str): Change return type. + (extended_remote_target::attach, remote_target::remote_stop_ns) + (remote_target::remote_notif_remove_queued_reply) + (remote_target::push_stop_reply, remote_target::disable_btrace): + Update. + (extended_remote_target::attach): Update. + * remote-sim.c (struct gdbsim_target) <pid_to_str>: Change return + type. + (gdbsim_target::pid_to_str): Change return type. + * ravenscar-thread.c (struct ravenscar_thread_target) + <pid_to_str>: Change return type. + (ravenscar_thread_target::pid_to_str): Change return type. + * procfs.c (class procfs_target) <pid_to_str>: Change return + type. + (procfs_target::pid_to_str): Change return type. + (procfs_target::attach): Update. + (procfs_target::detach): Update. + (procfs_target::fetch_registers): Update. + (procfs_target::store_registers): Update. + (procfs_target::wait): Update. + (procfs_target::files_info): Update. + * obsd-nat.c (obsd_nat_target::pid_to_str): Change return type. + * nto-procfs.c (struct nto_procfs_target) <pid_to_str>: Change + return type. + (nto_procfs_target::pid_to_str): Change return type. + (nto_procfs_target::files_info, nto_procfs_target::attach): Update. + * linux-thread-db.c (class thread_db_target) <pid_to_str>: Change + return type. + * linux-nat.c (linux_nat_target::pid_to_str): Change return type. + (exit_lwp): Update. + (attach_proc_task_lwp_callback, get_detach_signal) + (detach_one_lwp, resume_lwp, linux_nat_target::resume) + (linux_nat_target::resume, wait_lwp, stop_callback) + (maybe_clear_ignore_sigint, stop_wait_callback, status_callback) + (save_stop_reason, select_event_lwp, linux_nat_filter_event) + (linux_nat_wait_1, resume_stopped_resumed_lwps) + (linux_nat_target::wait, linux_nat_stop_lwp): Update. + * inf-ptrace.c (inf_ptrace_target::pid_to_str): Change return + type. + (inf_ptrace_target::attach): Update. + (inf_ptrace_target::files_info): Update. + * go32-nat.c (struct go32_nat_target) <pid_to_str>: Change return + type. + (go32_nat_target::pid_to_str): Change return type. + * gnu-nat.c (gnu_nat_target::pid_to_str): Change return type. + (gnu_nat_target::wait): Update. + (gnu_nat_target::wait): Update. + (gnu_nat_target::resume): Update. + * fbsd-nat.c (fbsd_nat_target::pid_to_str): Change return type. + (fbsd_nat_target::wait): Update. + * darwin-nat.c (darwin_nat_target::pid_to_str): Change return + type. + (darwin_nat_target::attach): Update. + * corelow.c (class core_target) <pid_to_str>: Change return type. + (core_target::pid_to_str): Change return type. + * target.c (normal_pid_to_str): Change return type. + (default_pid_to_str): Likewise. + (target_pid_to_str): Change return type. + (target_translate_tls_address): Update. + (target_announce_detach): Update. + * bsd-uthread.c (struct bsd_uthread_target) <pid_to_str>: Change + return type. + (bsd_uthread_target::pid_to_str): Change return type. + * bsd-kvm.c (class bsd_kvm_target) <pid_to_str>: Change return + type. + (bsd_kvm_target::pid_to_str): Change return type. + * aix-thread.c (class aix_thread_target) <pid_to_str>: Change + return type. + (aix_thread_target::pid_to_str): Change return type. + * target.h (struct target_ops) <pid_to_str>: Change return type. + (target_pid_to_str, normal_pid_to_str): Likewise. + * obsd-nat.h (class obsd_nat_target) <pid_to_str>: Change return + type. + * linux-nat.h (class linux_nat_target) <pid_to_str>: Change return + type. + * inf-ptrace.h (struct inf_ptrace_target) <pid_to_str>: Change + return type. + * gnu-nat.h (struct gnu_nat_target) <pid_to_str>: Change return + type. + * fbsd-nat.h (class fbsd_nat_target) <pid_to_str>: Change return + type. + * darwin-nat.h (class darwin_nat_target) <pid_to_str>: Change + return type. + +2019-03-13 Simon Marchi <simon.marchi@ericsson.com> + + * NEWS: Mention that the new default MI version is 3. Mention + changes to the output of commands and events that deal with + multi-location breakpoints. + * breakpoint.c: Include "mi/mi-out.h". + (print_one_breakpoint): Change output syntax if using MI version + >= 3. + * mi/mi-main.h (mi_cmd_fix_multi_location_breakpoint_output): + New. + (mi_multi_location_breakpoint_output_fixed): New. + * mi/mi-main.c (fix_multi_location_breakpoint_output): New. + (mi_cmd_fix_multi_location_breakpoint_output): New. + (mi_multi_location_breakpoint_output_fixed): New. + * mi/mi-cmds.c (mi_cmds): Register command + -fix-multi-location-breakpoint-output. + * mi/mi-out.c (mi_out_new): Instantiate version 3 when using + interpreter "mi". + +2019-03-13 Simon Marchi <simon.marchi@polymtl.ca> + + * mi/mi-out.h (mi_out_new): Change parameter to const char *. + * mi/mi-out.c (mi_out_new): Change parameter to const char *, + instantiate mi_ui_out based on interpreter name. + * mi/mi-interp.c (mi_interp::init): Use the new mi_out_new. + * mi/mi-main.c (mi_load_progress): Likewise. + +2019-03-12 John Baldwin <jhb@FreeBSD.org> + + * NEWS: Combine separate "New targets" sections for 8.3. + +2019-03-12 John Baldwin <jhb@FreeBSD.org> + + * ppc-fbsd-tdep.c (ppcfbsd_get_thread_local_address): New. + (ppcfbsd_init_abi): Install gdbarch + "fetch_tls_load_module_address" and "get_thread_local_address" + methods. + +2019-03-12 John Baldwin <jhb@FreeBSD.org> + + * riscv-fbsd-tdep.c (riscv_fbsd_get_thread_local_address): New. + (riscv_fbsd_init_abi): Install gdbarch + "fetch_tls_load_module_address" and "get_thread_local_address" + methods. + +2019-03-12 John Baldwin <jhb@FreeBSD.org> + + * i386-fbsd-tdep.c (i386fbsd_get_thread_local_address): New. + (i386fbsd_init_abi): Install gdbarch + "fetch_tls_load_module_address" and "get_thread_local_address" + methods. + +2019-03-12 John Baldwin <jhb@FreeBSD.org> + + * amd64-fbsd-tdep.c (amd64fbsd_get_thread_local_address): New. + (amd64fbsd_init_abi): Install gdbarch + "fetch_tls_load_module_address" and "get_thread_local_address" + methods. + +2019-03-12 John Baldwin <jhb@FreeBSD.org> + + * fbsd-tdep.c (fbsd_pspace_data_handle): New variable. + (struct fbsd_pspace_data): New type. + (get_fbsd_pspace_data, fbsd_pspace_data_cleanup) + (fbsd_read_integer_by_name, fbsd_fetch_rtld_offsets) + (fbsd_get_tls_index, fbsd_get_thread_local_address): New function. + (_initialize_fbsd_tdep): Initialize 'fbsd_pspace_data_handle'. + * fbsd-tdep.c (fbsd_get_thread_local_address): New prototype. + +2019-03-12 John Baldwin <jhb@FreeBSD.org> + + * gdbtypes.c (lookup_struct_elt): New function. + (lookup_struct_elt_type): Reimplement via lookup_struct_elt. + * gdbtypes.h (struct struct_elt): New type. + (lookup_struct_elt): New prototype. + +2019-03-12 John Baldwin <jhb@FreeBSD.org> + + * gdbtypes.c (lookup_struct_elt_type): Update comment and + remove disabled code block. + +2019-03-12 John Baldwin <jhb@FreeBSD.org> + + * gdbarch.sh (get_thread_local_address): New method. + * gdbarch.h, gdbarch.c: Regenerate. + * target.c (target_translate_tls_address): Use + gdbarch_get_thread_local_address if present instead of + target::get_thread_local_address. + +2019-03-12 John Baldwin <jhb@FreeBSD.org> + + * target.h (target::get_thread_local_address): Update comment. + +2019-03-12 John Baldwin <jhb@FreeBSD.org> + + * solib-svr4.c (svr4_fetch_objfile_link_map): Look for + objfile->separate_debug_objfile_backlink if not NULL. + +2019-03-12 John Baldwin <jhb@FreeBSD.org> + + * amd64-bsd-nat.c (amd64bsd_fetch_inferior_registers): Use + tdep->fsbase_regnum instead of constants for fs_base and gs_base. + (amd64bsd_store_inferior_registers): Likewise. + * amd64-fbsd-nat.c (amd64_fbsd_nat_target::read_description): + Enable segment base registers. + * i386-bsd-nat.c (i386bsd_fetch_inferior_registers): Use + PT_GETFSBASE and PT_GETGSBASE. + (i386bsd_store_inferior_registers): Use PT_SETFSBASE and + PT_SETGSBASE. + * i386-fbsd-nat.c (i386_fbsd_nat_target::read_description): Enable + segment base registers. + * i386-fbsd-tdep.c (i386fbsd_core_read_description): Likewise. + +2019-03-12 John Baldwin <jhb@FreeBSD.org> + + * amd64-fbsd-nat.c (amd64_fbsd_nat_target::read_description): + Update calls to i386_target_description to add 'segments' + parameter. + * amd64-tdep.c (amd64_init_abi): Set tdep->fsbase_regnum. Don't + add segment base registers. + * arch/i386.c (i386_create_target_description): Add 'segments' + parameter to enable segment base registers. + * arch/i386.h (i386_create_target_description): Likewise. + * features/i386/32bit-segments.xml: New file. + * features/i386/32bit-segments.c: Generate. + * i386-fbsd-nat.c (i386_fbsd_nat_target::read_description): Update + call to i386_target_description to add 'segments' parameter. + * i386-fbsd-tdep.c (i386fbsd_core_read_description): Likewise. + * i386-go32-tdep.c (i386_go32_init_abi): Likewise. + * i386-linux-tdep.c (i386_linux_read_description): Likewise. + * i386-tdep.c (i386_validate_tdesc_p): Add segment base registers + if feature is present. + (i386_gdbarch_init): Pass I386_NUM_REGS to set_gdbarch_num_regs. + Add 'segments' parameter to call to i386_target_description. + (i386_target_description): Add 'segments' parameter to enable + segment base registers. + (_initialize_i386_tdep) [GDB_SELF_TEST]: Add 'segments' parameter + to call to i386_target_description. + * i386-tdep.h (struct gdbarch_tdep): Add 'fsbase_regnum'. + (enum i386_regnum): Add I386_FSBASE_REGNUM and I386_GSBASE_REGNUM. + Define I386_NUM_REGS. + (i386_target_description): Add 'segments' parameter to enable + segment base registers. + +2019-03-12 Eli Zaretskii <eliz@gnu.org> + + PR/24325 + * source-cache.c: #undef open and close, to avoid unresolved + externals during linking. + +2019-03-12 Tom Tromey <tromey@adacore.com> + + * remote.c (magic_null_ptid, not_sent_ptid, any_thread_ptid): Now + const. Add initializers. + (_initialize_remote): Don't initialize ptid globals. + +2019-03-12 Pedro Alves <palves@redhat.com> + + * yy-remap.h [TEST_CPNAMES] (YYFPRINTF): Don't define. + +2019-03-12 Pedro Alves <palves@redhat.com> + + * cp-name-parser.y (main): Remove unused 'len' variable. + +2019-03-12 Tom Tromey <tromey@adacore.com> + + * common/ptid.c (null_ptid, minus_one_ptid): Now const. + * common/ptid.h (null_ptid, minus_one_ptid): Now const. + +2019-03-12 Tom Tromey <tromey@adacore.com> + + * linux-nat.c (iterate_over_lwps): Update. + (stop_callback): Remove parameter. + (stop_wait_callback, detach_callback, resume_set_callback) + (select_singlestep_lwp_callback, set_ignore_sigint) + (status_callback, resumed_callback, resume_clear_callback) + (kill_callback, kill_wait_callback, linux_nat_stop_lwp): Remove + data parameter. + (linux_nat_target::detach, linux_nat_target::resume) + (linux_stop_and_wait_all_lwps, select_event_lwp) + (linux_nat_filter_event, linux_nat_wait_1) + (linux_nat_target::kill, linux_nat_target::stop) + (linux_nat_target::stop): Update. + (linux_nat_resume_callback): Change type. + (resume_stopped_resumed_lwps, count_events_callback) + (select_event_lwp_callback): Likewise. + (linux_stop_lwp, linux_nat_stop_lwp): Update. + * arm-linux-nat.c (struct update_registers_data): Remove. + (update_registers_callback): Change type. + (arm_linux_insert_hw_breakpoint1): Update. + * nat/x86-linux-dregs.c (update_debug_registers_callback): Remove + parameter. + (x86_linux_dr_set_addr): Update. + (x86_linux_dr_set_control): Update. + * nat/linux-nat.h (iterate_over_lwps_ftype): Remove parameter. + (iterate_over_lwps): Use gdb::function_view. + * nat/aarch64-linux-hw-point.c (struct + aarch64_dr_update_callback_param): Remove. + (debug_reg_change_callback): Change type. + (aarch64_notify_debug_reg_change): Update. + * s390-linux-nat.c (s390_refresh_per_info): Update. + +2019-03-11 Tom Tromey <tromey@adacore.com> + + * dwarf2read.c (dwarf2_find_containing_comp_unit): Remove + redundant assignment to "this_cu". + +2019-03-08 Simon Marchi <simon.marchi@efficios.com> + + * gdbtypes.c (rank_one_type): Remove unnecessary cases from switch. + +2019-03-08 Simon Marchi <simon.marchi@efficios.com> + + * gdbtypes.c (rank_one_type_parm_set): New function extracted + from... + (rank_one_type): ... this. + +2019-03-08 Simon Marchi <simon.marchi@efficios.com> + + * gdbtypes.c (rank_one_type_parm_struct): New function extracted + from... + (rank_one_type): ... this. + +2019-03-08 Simon Marchi <simon.marchi@efficios.com> + + * gdbtypes.c (rank_one_type_parm_complex): New function extracted + from... + (rank_one_type): ... this. + +2019-03-08 Simon Marchi <simon.marchi@efficios.com> + + * gdbtypes.c (rank_one_type_parm_float): New function extracted + from... + (rank_one_type): ... this. + +2019-03-08 Simon Marchi <simon.marchi@efficios.com> + + * gdbtypes.c (rank_one_type_parm_bool): New function extracted + from... + (rank_one_type): ... this. + +2019-03-08 Simon Marchi <simon.marchi@efficios.com> + + * gdbtypes.c (rank_one_type_parm_range): New function extracted + from... + (rank_one_type): ... this. + +2019-03-08 Simon Marchi <simon.marchi@efficios.com> + + * gdbtypes.c (rank_one_type_parm_char): New function extracted + from... + (rank_one_type): ... this. + +2019-03-08 Simon Marchi <simon.marchi@efficios.com> + + * gdbtypes.c (rank_one_type_parm_enum): New function extracted + from... + (rank_one_type): ... this. + +2019-03-08 Simon Marchi <simon.marchi@efficios.com> + + * gdbtypes.c (rank_one_type_parm_int): New function extracted + from... + (rank_one_type): ... this. + +2019-03-08 Simon Marchi <simon.marchi@efficios.com> + + * gdbtypes.c (rank_one_type_parm_func): New function extracted + from... + (rank_one_type): ... this. + +2019-03-08 Simon Marchi <simon.marchi@efficios.com> + + * gdbtypes.c (rank_one_type_parm_array): New function extracted + from... + (rank_one_type): ... this. + +2019-03-08 Simon Marchi <simon.marchi@efficios.com> + + * gdbtypes.c (rank_one_type_parm_ptr): New function extracted + from... + (rank_one_type): ... this. + +2019-02-27 Philippe Waroquiers <philippe.waroquiers@skynet.be> + + * inferior.c (initialize_inferiors): Ensure 'help set/show print + inferior-events' shows the example events. + +2019-03-08 Eli Zaretskii <eliz@gnu.org> + + Support styling on native MS-Windows console + + PR/24315 + * utils.c (can_emit_style_escape) [_WIN32]: Don't disable styling + on MS-Windows if $TERM is not defined. + + * cli/cli-style.c: Set cli_styling to 1 in the MinGW build. + + * posix-hdep.c (gdb_console_fputs): + * mingw-hdep.c (rgb_to_16colors, gdb_console_fputs): New + functions. + * ui-file.h (gdb_console_fputs): Add prototype. + + * ui-file.c (stdio_file::puts): Call gdb_console_fputs, and fall + back to fputs only if the former returns zero. + +2019-03-07 Tom Tromey <tom@tromey.com> + + * symmisc.c (print_symbol_bcache_statistics): Update. + (print_objfile_statistics): Update. + * symfile.c (allocate_symtab): Update. + * stabsread.c: Don't include bcache.h. + * psymtab.h (struct psymbol_bcache): Don't declare. + (class psymtab_storage) <psymbol_cache>: Now a bcache. + (psymbol_bcache_init, psymbol_bcache_free) + (psymbol_bcache_get_bcache): Don't declare. + * psymtab.c (struct psymbol_bcache): Remove. + (psymtab_storage::psymtab_storage): Update. + (psymtab_storage::~psymtab_storage): Update. + (psymbol_bcache_init, psymbol_bcache_free) + (psymbol_bcache_get_bcache, psymbol_bcache_full): Remove. + (add_psymbol_to_bcache): Update. + (allocate_psymtab): Update. + * objfiles.h (struct objfile_per_bfd_storage) <filename_cache, + macro_cache>: No longer pointers. + * objfiles.c (get_objfile_bfd_data): Don't call bcache_xmalloc. + (free_objfile_per_bfd_storage): Don't call bcache_xfree. + * macrotab.c (macro_bcache): Update. + * macroexp.c: Don't include bcache.h. + * gdbtypes.c (check_types_worklist): Update. + (types_deeply_equal): Remove TRY/CATCH. Update. + * elfread.c (elf_symtab_read): Update. + * dwarf2read.c: Don't include bcache.h. + * buildsym.c (buildsym_compunit::get_macro_table): Update. + * bcache.h (bcache, bcache_full, bcache_xffree, bcache_xmalloc) + (print_bcache_statistics, bcache_memory_used): Don't declare. + (struct bcache): Move from bcache.c. Add constructor, destructor, + methods. Rename all data members. + * bcache.c (struct bcache): Move to bcache.h. + (bcache::expand_hash_table): Rename from expand_hash_table. + (bcache): Remove. + (bcache::insert): Rename from bcache_full. + (bcache::compare): Rename from bcache_compare. + (bcache_xmalloc): Remove. + (bcache::~bcache): Rename from bcache_xfree. + (bcache::print_statistics): Rename from print_bcache_statistics. + (bcache::memory_used): Rename from bcache_memory_used. + +2019-03-07 Pedro Alves <palves@redhat.com> + + * infrun.c (normal_stop): Also check for + TARGET_WAITKIND_NO_RESUMED before referring to inferior_thread(). + +2019-03-07 Andrew Burgess <andrew.burgess@embecosm.com> + + * f-lang.c (value_from_host_double): Moved to... + * value.c (value_from_host_double): ...here. + * value.h (value_from_host_double): Declare. + * guile/scm-math.c (vlscm_convert_typed_number): Use + value_from_host_double. + (vlscm_convert_number): Likewise. + * guile/scm-value.c (gdbscm_value_to_real): Likewise. + * python/py-value.c (convert_value_from_python): Likewise. + +2019-03-06 Tom Tromey <tom@tromey.com> + + * gcore.c (write_gcore_file): Use SCOPE_EXIT. + +2019-03-06 Tom Tromey <tom@tromey.com> + + * utils.h (free_current_contents): Don't declare. + * utils.c (free_current_contents): Remove. + +2019-03-06 Tom Tromey <tom@tromey.com> + + * top.c (quit_force): Update. + * main.c (captured_command_loop): Update. + * common/new-op.c (operator new): Update. + * common/common-exceptions.c (struct catcher) + <save_cleanup_chain>: Remove member. + (exceptions_state_mc_init): Update. + (exception_try_scope_entry): Return nullptr. + (exception_try_scope_exit, exception_rethrow) + (throw_exception_sjlj, throw_exception_cxx): Update. + * common/cleanups.h (make_cleanup, make_cleanup_dtor) + (all_cleanups, do_cleanups, discard_cleanups) + (discard_final_cleanups, save_cleanups, save_final_cleanups) + (restore_cleanups, restore_final_cleanups): Don't declare. + (do_final_cleanups): Remove parameter. + * common/cleanups.c (cleanup_chain, make_cleanup) + (make_cleanup_dtor, all_cleanups, do_cleanups) + (discard_my_cleanups, discard_cleanups) + (discard_final_cleanups, save_my_cleanups, save_cleanups) + (save_final_cleanups, restore_my_cleanups, restore_cleanups) + (null_cleanup): Remove. + (do_final_cleanups): Remove parameter. + +2019-03-06 Tom Tromey <tom@tromey.com> + + * remote.c (remote_target::remote_parse_stop_reply): Use + unique_xmalloc_ptr. + +2019-03-06 Tom Tromey <tom@tromey.com> + + * stabsread.c (struct stabs_field_info): Rename from field_info. + <list, fnlist>: Add initializers. + <obstack>: New member. + (read_member_functions, read_struct_fields, read_baseclasses): + Allocate on obstack. Don't use cleanups. + (read_one_struct_field, read_member_functions, read_struct_fields) + (read_baseclasses, read_tilde_fields, attach_fn_fields_to_type) + (attach_fields_to_type, read_cpp_abbrev, read_member_functions) + (read_struct_type): Update. + +2019-03-06 Tom Tromey <tom@tromey.com> + + * nat/linux-namespaces.c (linux_mntns_access_fs): Use SCOPE_EXIT. + * common/filestuff.h (make_cleanup_close): Don't declare. + * common/filestuff.c (do_close_cleanup, make_cleanup_close): + Remove. + +2019-03-06 Tom Tromey <tom@tromey.com> + + * solib-aix.c: Use make_scope_exit. + +2019-03-06 Tom Tromey <tom@tromey.com> + + * solib-svr4.c (svr4_parse_libraries, svr4_current_sos_direct): + Use make_scope_exit. + +2019-03-06 Tom Tromey <tom@tromey.com> + + * solib-svr4.c (disable_probes_interface): Remove parameter. + (svr4_handle_solib_event): Use make_scope_exit. + +2019-03-06 Tom Tromey <tom@tromey.com> + + * remote.c (struct stop_reply_deleter): Remove. + (stop_reply_up): Update. + (struct stop_reply): Derive from notif_event. Don't typedef. + <regcache>: Now a std::vector. + (stop_reply_xfree): Remove. + (stop_reply::~stop_reply): Rename from stop_reply_dtr. + (remote_notif_stop_alloc_reply): Return a unique_ptr. Use new. + (remote_target::discard_pending_stop_replies): Use delete. + (remote_target::remote_parse_stop_reply): Update. + (remote_target::process_stop_reply): Update. + * remote-notif.h (struct notif_event): Add virtual destructor. + Remove "dtr" member. + (struct notif_client) <alloc_event>: Return a unique_ptr. + (notif_event_xfree): Don't declare. + (notif_event_up): New typedef. + * remote-notif.c (remote_notif_ack, remote_notif_parse): Update. + (notif_event_xfree, do_notif_event_xfree): Remove. + (remote_notif_state_xfree): Update. + +2019-03-06 Tom Tromey <tom@tromey.com> + + * infrun.c (displaced_step_clear_cleanup): Now a + forward_scope_exit type. + (displaced_step_prepare_throw): Update. + (displaced_step_fixup): Update. + +2019-03-06 Tom Tromey <tom@tromey.com> + + * inferior.h (class inferior): Update comment. + * gdbthread.h (class thread_info): Update comment. + +2019-03-06 Joel Brobecker <brobecker@adacore.com> + Tom Tromey <tom@tromey.com> + + * stabsread.h (struct stab_section_list): Remove. + (coffstab_build_psymtabs): Update. + * dbxread.c (symbuf_sections): Now a std::vector. + (sect_idx): New global. + (fill_symbuf): Update. + (coffstab_build_psymtabs): Change type of stabsects parameter. + Update. + * coffread.c (struct coff_symfile_info) <stabsects>: Now a + std::vector. + (linetab, linetab_offset, linetab_size, stringtab): Move earlier. + (coff_locate_sections): Update. + (coff_symfile_read): Remove cleanups. Update. + (init_stringtab): Add storage parameter. + (free_stringtab, free_stringtab_cleanup): Remove. + (init_lineno): Add storage parameter. + (free_linetab, free_linetab_cleanup): Remove. + +2019-03-06 Pedro Alves <palves@redhat.com> + + * linux-fork.c (fork_info::clobber_regs): Delete. + (fork_load_infrun_state): Remove reference to 'clobber_regs'. + (fork_save_infrun_state): Remove 'clobber_regs' parameter. Update + comment. Adjust. + (scoped_switch_fork_info::scoped_switch_fork_info) + (checkpoint_command, linux_fork_context): Adjust + fork_save_infrun_state calls. + +2019-03-06 Pedro Alves <palves@redhat.com> + + * linux-fork.c (inf_has_multiple_thread_cb): Delete. + (inf_has_multiple_threads): Return 'bool' and rewrite using + inferior_info::threads(). + +2019-03-06 Pedro Alves <palves@redhat.com> + + * linux-fork.c: Include <list>. + (fork_list): Now a std::list instance. + (fork_info): Add ctor, dtor, and in-class initialize all fields. + (forks_exist_p, find_last_fork): Adjust. + (new_fork): Delete. + (one_fork_p): New. + (add_fork): Adjust. + (free_fork): Delete, folded into fork_info::~fork_info(). + (delete_fork, find_fork_ptid, find_fork_id, find_fork_pid): + Adjust. + (init_fork_list): Delete. + (linux_fork_killall, linux_fork_mourn_inferior) + (linux_fork_detach, info_checkpoints_command): Adjust. + (_initialize_linux_fork): No longer call init_fork_list. + +2019-03-06 Pedro Alves <palves@redhat.com> + + * linux-fork.c (new_fork): New, split out of ... + (add_fork): ... this. Return void. Move "first fork" special + case from here, to ... + (checkpoint_command): ... here. + * linux-linux.h (add_fork): Return void. + +2019-03-06 Andrew Burgess <andrew.burgess@embecosm.com> + + * f-exp.y (direct_abs_decl): Handle TYPE*SIZE type names. + +2019-03-06 Andrew Burgess <andrew.burgess@embecosm.com> + Chris January <chris.january@arm.com> + David Lecomber <david.lecomber@arm.com> + + * f-exp.y: New token, UNOP_INTRINSIC. + (exp): New pattern using UNOP_INTRINSIC token. + (f77_keywords): Add 'abs' keyword. + * f-lang.c: Add 'target-float.h' and 'math.h' includes. + (value_from_host_double): New function. + (evaluate_subexp_f): Support UNOP_ABS. + +2019-03-06 Andrew Burgess <andrew.burgess@embecosm.com> + + * f-lang.c (build_fortran_types): Use TYPE_CODE_CHAR for character + types. + +2019-03-06 Andrew Burgess <andrew.burgess@embecosm.com> + + * f-exp.y (convert_to_kind_type): Handle integer (kind=8). + * f-lang.c (build_fortran_types): Setup builtin_integer_s8. + * f-lang.h (struct builtin_f_type): Add builtin_integer_s8 field. + +2019-03-06 Andrew Burgess <andrew.burgess@embecosm.com> + + * f-exp.y (convert_to_kind_type): Handle more type kinds. + +2019-03-06 Andrew Burgess <andrew.burgess@embecosm.com> + Chris January <chris.january@arm.com> + + * expprint.c (dump_subexp_body_standard): Support UNOP_KIND. + * f-exp.y: Define 'KIND' token. + (exp): New pattern for KIND expressions. + (ptype): Handle types with a kind extension. + (direct_abs_decl): Extend to spot kind extensions. + (f77_keywords): Add 'kind' to the list. + (push_kind_type): New function. + (convert_to_kind_type): New function. + * f-lang.c (evaluate_subexp_f): Support UNOP_KIND. + * parse.c (operator_length_standard): Likewise. + * parser-defs.h (enum type_pieces): Add tp_kind. + * std-operator.def: Add UNOP_KIND. + +2019-03-06 Andrew Burgess <andrew.burgess@embecosm.com> + + * f-exp.y (f_parse): Set yydebug. + +2019-03-06 Andrew Burgess <andrew.burgess@embecosm.com> + + * f-lang.c (evaluate_subexp_f): New function. + (exp_descriptor_f): New global. + (f_language_defn): Use exp_descriptor_f instead of + exp_descriptor_standard. + +2019-03-06 Andrew Burgess <andrew.burgess@embecosm.com> + + * f-exp.y (struct token): Add comments. + (dot_ops): Remove uppercase versions and the end marker. + (f77_keywords): Likewise. + (yylex): Use ARRAY_SIZE to iterate over dot_ops, assert all + entries in the dot_ops array are case insensitive, and use + strncasecmp to compare strings. Also some whitespace cleanup in + this area. Similar for the f77_keywords array, except entries in + this list might be case sensitive. + +2019-03-06 Andrew Burgess <andrew.burgess@embecosm.com> + + * f-exp.y (struct f77_boolean_val): Add comments. + (boolean_values): Remove uppercase versions, and end marker. + (yylex): Use ARRAY_SIZE for iterating over boolean_values array, + and use strncasecmp to achieve case insensitivity. Additionally, + perform whitespace cleanup around this code. + +2019-03-06 Tom Tromey <tromey@adacore.com> + + * remote-sim.c (gdbsim_target_open): Use result of + gdb_argv::release. + +2019-03-06 Richard Bunt <richard.bunt@arm.com> + Dirk Schubert <dirk.schubert@arm.com> + Chris January <chris.january@arm.com> + + * eval.c (evaluate_subexp_standard): Call Fortran argument + wrapping logic. + * f-lang.c (struct value): A value which can be passed into a + Fortran function call. + (fortran_argument_convert): Wrap Fortran arguments in a pointer + where appropriate. + (struct type): Value ready for a Fortran function call. + (fortran_preserve_arg_pointer): Undo check_typedef, the pointer + is needed. + * f-lang.h (fortran_argument_convert): Declaration. + (fortran_preserve_arg_pointer): Declaration. + * infcall.c (value_arg_coerce): Call Fortran argument logic. + +2019-03-05 Tom Tromey <tromey@adacore.com> + + * python/py-prettyprint.c (print_string_repr): Remove #if. + * python/py-utils.c (unicode_to_encoded_string): Remove #if. + +2019-03-05 Tom Tromey <tromey@adacore.com> + + * target.c (the_dummy_target): Move later. Change type to + "dummy_target". + (initialize_targets): Don't initialize the_dummy_target. + +2019-03-05 Tom Tromey <tromey@adacore.com> + + * gdb_bfd.c (gdb_bfd_fdopenr): Remove. + * gdb_bfd.h (gdb_bfd_fdopenr): Don't declare. + +2019-03-05 Tom Tromey <tromey@adacore.com> + + * windows-nat.c (windows_nat_target::attach) + (windows_nat_target::detach): Don't call gdb_flush. + * valprint.c (generic_val_print, val_print, val_print_string): + Don't call gdb_flush. + * utils.c (defaulted_query): Don't call gdb_flush. + * typeprint.c (print_type_scalar): Don't call gdb_flush. + * target.c (target_announce_detach): Don't call gdb_flush. + * sparc64-tdep.c (adi_print_versions): Don't call gdb_flush. + * remote.c (extended_remote_target::attach): Don't call + gdb_flush. + * procfs.c (procfs_target::detach): Don't call gdb_flush. + * printcmd.c (do_examine): Don't call gdb_flush. + (info_display_command): Don't call gdb_flush. + * p-valprint.c (pascal_val_print): Don't call gdb_flush. + * nto-procfs.c (nto_procfs_target::attach): Don't call gdb_flush. + * memattr.c (info_mem_command): Don't call gdb_flush. + * mdebugread.c (mdebug_build_psymtabs): Don't call gdb_flush. + * m2-valprint.c (m2_val_print): Don't call gdb_flush. + * infrun.c (follow_exec, handle_command): Don't call gdb_flush. + * inf-ptrace.c (inf_ptrace_target::attach): Don't call gdb_flush. + * hppa-tdep.c (unwind_command): Don't call gdb_flush. + * gnu-nat.c (gnu_nat_target::attach): Don't call gdb_flush. + (gnu_nat_target::detach): Don't call gdb_flush. + * f-valprint.c (f_val_print): Don't call gdb_flush. + * darwin-nat.c (darwin_nat_target::attach): Don't call gdb_flush. + * cli/cli-script.c (read_command_lines): Don't call gdb_flush. + * cli/cli-cmds.c (shell_escape, print_disassembly): Don't call + gdb_flush. + * c-valprint.c (c_val_print): Don't call gdb_flush. + * ada-valprint.c (ada_print_scalar): Don't call gdb_flush. + +2019-03-05 Tom Tromey <tromey@adacore.com> + + * varobj.c (update_dynamic_varobj_children): Update. + (install_default_visualizer): Use reset, not release. + * value.c (set_internalvar): Update. + * dwarf2loc.c (value_of_dwarf_reg_entry): Update. + * common/gdb_ref_ptr.h (class ref_ptr) <release>: Add + ATTRIBUTE_UNUSED_RESULT. + +2019-03-05 Tom Tromey <tromey@adacore.com> + + * remote.c (class scoped_remote_fd) <release>: Add + ATTRIBUTE_UNUSED_RESULT. + +2019-03-05 Tom Tromey <tromey@adacore.com> + + * macroexp.c (struct macro_buffer) <release>: Add + ATTRIBUTE_UNUSED_RESULT. + +2019-03-05 Tom Tromey <tromey@adacore.com> + + * nat/linux-btrace.c (linux_enable_bts, linux_enable_pt): Update. + * common/scoped_mmap.h (class scoped_mmap) <release>: Add + ATTRIBUTE_UNUSED_RESULT. + +2019-03-05 Tom Tromey <tromey@adacore.com> + + * common/scoped_fd.h (class scoped_fd) <release>: Add + ATTRIBUTE_UNUSED_RESULT. + +2019-03-05 Tom Tromey <tromey@adacore.com> + + * parser-defs.h (struct parser_state) <release>: Add + ATTRIBUTE_UNUSED_RESULT. + +2019-03-05 Tom Tromey <tromey@adacore.com> + + * utils.h (class gdb_argv) <release>: Add + ATTRIBUTE_UNUSED_RESULT. + * common/common-defs.h (ATTRIBUTE_UNUSED_RESULT): Define. + +2019-03-02 Eli Zaretskii <eliz@gnu.org> + + * xml-syscall.c (xml_list_syscalls_by_group): Drop 'struct' from + for-loop range, to avoid compiler warnings. + + * tui/tui.c (tui_enable) [__MINGW32__]: Don't declare 'cap', to + avoid compiler warnings about unused variables. + + * NEWS: Mention end of support for native debugging on MS-Windows + before XP. + + PR gdb/24292 + * common/netstuff.c: + * gdbserver/gdbreplay.c + * gdbserver/remote-utils.c: + * ser-tcp.c: + * unittests/parse-connection-spec-selftests.c [USE_WIN32API]: + Include ws2tcpip.h instead of wsiapi.h and winsock2.h. Redefine + _WIN32_WINNT to 0x0501 if defined to a smaller value, as + 'getaddrinfo' and 'freeaddrinfo' were not available before + Windows XP, and mingw.org's MinGW headers by default define + _WIN32_WINNT to 0x500. + +2019-03-01 Gary Benson <gbenson@redhat.com> + + * coffread.c (coff_start_symtab): Remove unnecessary xstrdup. + +2019-02-28 Brian Vandenberg <phantall@gmail.com> + Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + PR gdb/8527 + * procfs.c (proc_wait_for_stop): Wrap write of PCWSTOP in + set_sigint_trap, clear_sigint_trap. + +2019-02-27 Philippe Waroquiers <philippe.waroquiers@skynet.be> + + * target.c (target_detach): Clear the regcache and the + frame cache. + +2019-02-27 Pedro Alves <palves@redhat.com> + + * utils.c (set_screen_size): When we cap the height/width sizes, + tweak the corresponding command variable to show "unlimited": + +2019-02-27 Saagar Jha <saagar@saagarjha.com> + Pedro Alves <palves@redhat.com> + + * utils.c (set_screen_size): Reduce "infinite" rows and columns + before calling rl_set_screen_size. + +2019-02-27 Tom Tromey <tromey@adacore.com> + + * configure.ac (HAVE_LIBPYTHON2_4, HAVE_LIBPYTHON2_5): Never + define. + * python/py-value.c: Remove Python 2.4 workaround. + * python/py-utils.c (gdb_pymodule_addobject): Remove Python 2.4 + workaround. + * python/py-type.c (convert_field, gdbpy_initialize_types): Remove + Python 2.4 workaround. + * python/python-internal.h: Remove Python 2.4 comment. + (Py_ssize_t): Don't define. + (PyVarObject_HEAD_INIT, Py_TYPE): Don't define. + (gdb_Py_DECREF): Remove Python 2.4 workaround. + (gdb_PyObject_GetAttrString, PyObject_GetAttrString): Remove. + (gdb_PyObject_HasAttrString, PyObject_HasAttrString): Remove. + * python/python.c (do_start_initialization): Remove Python 2.4 + workaround. + * python/py-prettyprint.c (class dummy_python_frame): Remove. + (print_children): Remove Python 2.4 workaround. + * python/py-inferior.c (buffer_procs): Remove Python 2.4 + workaround. + (CHARBUFFERPROC_NAME): Remove. + * python/py-breakpoint.c (gdbpy_initialize_breakpoints): Remove + Python 2.4 workaround. + +2019-02-27 Kevin Buettner <kevinb@redhat.com> + + * NEWS: Note minimum Python version. + +2019-02-27 Kevin Buettner <kevinb@redhat.com> + + * python/py-inferior.c (infpy_write_memory): Remove non-IS_PY3K + code from these functions. Remove corresponding ifdefs. Use + Py_buffer_up instead of explicit calls to PyBuffer_Release. + Remove gotos and target of gotos. + (infpy_search_memory): Likewise. + +2019-02-27 Andrew Burgess <andrew.burgess@embecosm.com> + + * hppa-tdep.c (hppa_dummy_id): Delete. + (hppa_gdbarch_init): Don't register deleted functions with + gdbarch. + +2019-02-27 Andrew Burgess <andrew.burgess@embecosm.com> + + * h8300-tdep.c (h8300_unwind_pc): Delete. + (h8300_unwind_sp): Delete. + (h8300_dummy_id): Delete. + (h8300_gdbarch_init): Don't register deleted functions with + gdbarch. + +2019-02-27 Andrew Burgess <andrew.burgess@embecosm.com> + + * ft32-tdep.c (ft32_dummy_id): Delete. + (ft32_unwind_pc): Delete. + (ft32_unwind_sp): Delete. + (ft32_gdbarch_init): Don't register deleted functions with + gdbarch. + +2019-02-27 Andrew Burgess <andrew.burgess@embecosm.com> + + * frv-tdep.c (frv_dummy_id): Delete. + (frv_unwind_pc): Delete. + (frv_unwind_sp): Delete. + (frv_gdbarch_init): Don't register deleted functions with + gdbarch. + +2019-02-27 Andrew Burgess <andrew.burgess@embecosm.com> + + * riscv-tdep.c (riscv_dummy_id): Delete. + (riscv_unwind_pc): Delete. + (riscv_unwind_sp): Delete. + (riscv_gdbarch_init): Don't register deleted functions with + gdbarch. + +2019-02-27 Andrew Burgess <andrew.burgess@embecosm.com> + + * csky-tdep.c (csky_dummy_id): Delete. + (csky_unwind_pc): Delete. + (csky_unwind_sp): Delete. + (csky_gdbarch_init): Don't register deleted functions with + gdbarch. + +2019-02-27 Andrew Burgess <andrew.burgess@embecosm.com> + + * cris-tdep.c (cris_dummy_id): Delete. + (cris_unwind_pc): Delete. + (cris_unwind_sp): Delete. + (cris_gdbarch_init): Don't register deleted functions with + gdbarch. + +2019-02-27 Andrew Burgess <andrew.burgess@embecosm.com> + + * bfin-tdep.c (bfin_dummy_id): Delete. + (bfin_unwind_pc): Delete. + (bfin_gdbarch_init): Don't register deleted functions with gdbarch. + +2019-02-27 Andrew Burgess <andrew.burgess@embecosm.com> + + * arm-tdep.c (arm_dummy_id): Delete. + (arm_unwind_pc): Delete. + (arm_unwind_sp): Delete. + (arm_gdbarch_init): Don't register deleted functions with gdbarch. + +2019-02-27 Andrew Burgess <andrew.burgess@embecosm.com> + + * arc-tdep.c (arc_dummy_id): Delete. + (arc_unwind_pc): Delete. + (arc_unwind_sp): Delete. + (arc_gdbarch_init): Don't register deleted functions with gdbarch. + +2019-02-27 Andrew Burgess <andrew.burgess@embecosm.com> + + * alpha-tdep.c (alpha_dummy_id): Delete. + (alpha_unwind_pc): Delete. + (alpha_gdbarch_init): Don't register deleted functions with + gdbarch. + +2019-02-27 Andrew Burgess <andrew.burgess@embecosm.com> + + * aarch64-tdep.c (aarch64_dummy_id): Delete. + (aarch64_unwind_pc): Delete. + (aarch64_unwind_sp): Delete. + (aarch64_gdbarch_init): Don't register deleted functions with + gdbarch. + +2019-02-27 Andrew Burgess <andrew.burgess@embecosm.com> + + * gdbtypes.c (type_align): Don't consider static members when + computing structure alignment. + +2019-02-27 Andrew Burgess <andrew.burgess@embecosm.com> + + * arc-tdep.c (arc_type_align): Provide alignment for basic types, + return 0 for other types. + * arch-utils.c (default_type_align): Always return 0. + * gdbarch.h: Regenerate. + * gdbarch.sh (type_align): Extend comment. + * gdbtypes.c (type_align): Add additional comments, always call + gdbarch_type_align before applying the default rules. + * i386-tdep.c (i386_type_align): Return 0 as the default rule, + generic code will then apply a suitable default. + * nios2-tdep.c (nios2_type_align): Provide alignment for basic + types, return 0 for other types. + +2019-02-27 Joel Brobecker <brobecker@adacore.com> + + * NEWS: Create a new section for the next release branch. + Rename the section of the current branch, now that it has + been cut. + +2019-02-27 Joel Brobecker <brobecker@adacore.com> + + GDB 8.3 branch created (143420fb0d5ae54323ba9953f0818c194635228d): + * version.in: Bump version to 8.3.50.DATE-git. + +2019-02-26 Simon Marchi <simon.marchi@efficios.com> + + * aix-thread.c (ptid_cmp): Remove unused variable. + (get_signaled_thread): Likewise. + (store_regs_user_thread): Likewise. + (store_regs_kernel_thread): Likewise. + (fetch_regs_kernel_thread): Remove shadowed variable. + +2019-02-26 Andrew Burgess <andrew.burgess@embecosm.com> + + * features/riscv/32bit-cpu.xml: Add register numbers. + * features/riscv/32bit-fpu.c: Regenerate. + * features/riscv/32bit-fpu.xml: Add register numbers. + * features/riscv/64bit-cpu.xml: Add register numbers. + * features/riscv/64bit-fpu.c: Regenerate. + * features/riscv/64bit-fpu.xml: Add register numbers. + +2019-02-26 Kevin Buettner <kevinb@redhat.com> + + * NEWS: Mention two argument form of gdb.Value constructor. + * python/py-value.c (convert_buffer_and_type_to_value): New + function. + (valpy_new): Parse arguments via gdb_PyArg_ParseTupleAndKeywords. + Add support for handling an optional second argument. Call + convert_buffer_and_type_to_value as appropriate. + * python/python-internal.h (Py_buffer_deleter): New struct. + (Py_buffer_up): New typedef. + +2019-02-25 John Baldwin <jhb@FreeBSD.org> + + * dwarf2read.c (dwarf2_get_dwz_file): Reset dwz_bfd to nullptr + instead of releasing ownership. + +2019-02-25 Jordan Rupprecht <rupprecht@google.com> + + * dwarf2read.c (open_and_init_dwp_file): Call + elf_numsections instead of bfd_count_sections to initialize + dwp_file->num_sections. + +2019-02-25 Tom Tromey <tromey@adacore.com> + + * solib-darwin.c (darwin_get_dyld_bfd): Don't release dyld_bfd. + +2019-02-23 Sergio Durigan Junior <sergiodj@redhat.com> + + * gcore.in: Add '--readnever' option when invoking GDB. + +2019-02-22 Simon Marchi <simon.marchi@polymtl.ca> + + * MAINTAINERS: Update my email address. + +2019-02-22 Simon Marchi <simon.marchi@polymtl.ca> + + * build-id.c (build_id_to_debug_bfd_1): New function. + (build_id_to_debug_bfd): Look for separate debug file in + sysroot. + +2019-02-22 Andrew Burgess <andrew.burgess@embecosm.com> + + * gdbarch.sh: Update the copyright year range that is placed into + generated files. + +2019-02-22 Keith Seitz <keiths@redhat.com> + + PR symtab/23853 + * linespec.c (create_sals_line_offset): Search for the default + symtab's filename instead of its fullname. + +2019-02-21 Alan Hayward <alan.hayward@arm.com> + + * NEWS: Update style defaults. + +2019-02-21 Alan Hayward <alan.hayward@arm.com> + + * main.c (captured_main_1): Disable styling in batch mode. + +2019-02-20 Tom Tromey <tom@tromey.com> + + * symtab.c (symtab_symbol_info): Fix typos. + +2019-02-20 Tom Tromey <tromey@adacore.com> + + * findcmd.c (_initialize_mem_search): Use upper case for + metasyntactic variables. + +2019-02-20 Alan Hayward <alan.hayward@arm.com> + + * aarch64-tdep.c (aarch64_add_reggroups): New function. + (aarch64_gdbarch_init): Call aarch64_add_reggroups. + +2019-02-19 Simon Marchi <simon.marchi@polymtl.ca> + + * top.h (source_file_name): Change to std::string. + * top.c (source_file_name): Likewise. + (command_line_input): Adjust. + * cli/cli-script.c (script_from_file): Adjust. + +2019-02-19 Tom Tromey <tromey@adacore.com> + + * ravenscar-thread.c + (ravenscar_thread_target::update_thread_list): Don't call + ada_build_task_list. + * ada-lang.h (ada_build_task_list): Don't declare. + * ada-tasks.c (struct ada_tasks_inferior_data) + <task_list_valid_p>: Now bool. + (read_known_tasks, ada_task_list_changed) + (ada_tasks_invalidate_inferior_data): Update. + (read_known_tasks_array): Return bool. + (read_known_tasks_list): Likewise. + (read_known_tasks): Return void. + (ada_build_task_list): Now static. + +2019-02-18 Andrew Burgess <andrew.burgess@embecosm.com> + + * gdbtypes.c (type_align): Allow alignment of TYPE_CODE_METHODPTR + and TYPE_CODE_MEMBERPTR to be overridden by the gdbarch. + +2019-02-18 Philippe Waroquiers <philippe.waroquiers@skynet.be> + + * ada-task.c (_initialize_tasks): Use 'with_cleanup' register + variant for ada_tasks_pspace_data_handle and + ada_tasks_inferior_data_handle. + (ada_tasks_pspace_data_cleanup): New function. + (ada_tasks_inferior_data_cleanup): New function. + +2019-02-17 Tom Tromey <tom@tromey.com> + + * macrotab.h (macro_source_fullname): Return a std::string. + * macrotab.c (macro_include, check_for_redefinition) + (macro_undef, macro_lookup_definition, foreach_macro) + (foreach_macro_in_scope): Update. + (macro_source_fullname): Return a std::string. + * macrocmd.c (show_pp_source_pos): Update. + +2019-02-17 Tom Tromey <tom@tromey.com> + + * macrocmd.c (show_pp_source_pos): Style the file names. + +2019-02-17 Tom Tromey <tom@tromey.com> + + PR tui/24197: + * tui/tui-source.c (tui_set_source_content_nil): Rewrite. + +2019-02-17 Tom Tromey <tom@tromey.com> + + * ada-lang.c (user_select_syms): Use filtered printing. + * utils.c (wrap_style): New global. + (desired_style): Remove. + (emit_style_escape): Add stream parameter. + (set_output_style, reset_terminal_style, prompt_for_continue): + Update. + (flush_wrap_buffer): Only flush gdb_stdout. + (wrap_here): Set wrap_style. + (fputs_maybe_filtered): Clear the wrap buffer on exception. Don't + treat escape sequences as a character. Change when wrap buffer is + flushed. + (fputs_styled): Do not set the output style when the default is + requested. + * ui-style.h (struct ui_file_style) <is_default>: New method. + * source.c (print_source_lines_base): Emit escape sequences in one + piece. + +2019-02-17 Joel Brobecker <brobecker@adacore.com> + + * gdbtypes.c (type_align): Handle TYPE_CODE_RANGE the same as + integers and enumeration types. + +2019-02-17 Joel Brobecker <brobecker@adacore.com> + + * ada-lang.c (standard_lookup): Use ada_lookup_encoded_symbol + instead of lookup_symbol_in_language + (do_exact_match): New function. + (ada_get_symbol_name_matcher): Return do_exact_match when + doing a verbatim match. + +2019-02-15 Tom Tromey <tromey@adacore.com> + + * ravenscar-thread.c (ravenscar_thread_target::resume) + (ravenscar_thread_target::wait): Special case wildcard requests. + +2019-02-15 Tom Tromey <tromey@adacore.com> + + * ravenscar-thread.c (base_ptid): Remove. + (struct ravenscar_thread_target) <close>: New method. + <m_base_ptid>: New member. + <update_inferior_ptid, active_task, task_is_currently_active, + runtime_initialized>: Declare methods. + <ravenscar_thread_target>: Add constructor. + (ravenscar_thread_target::task_is_currently_active) + (ravenscar_thread_target::update_inferior_ptid) + (ravenscar_runtime_initialized): Rename. Now methods. + (ravenscar_thread_target::resume, ravenscar_thread_target::wait) + (ravenscar_thread_target::update_thread_list): Update. + (ravenscar_thread_target::active_task): Now method. + (ravenscar_thread_target::store_registers) + (ravenscar_thread_target::prepare_to_store) + (ravenscar_thread_target::prepare_to_store) + (ravenscar_thread_target::mourn_inferior): Update. + (ravenscar_inferior_created): Use "new" to create target. + (ravenscar_thread_target::get_ada_task_ptid): Update. + (_initialize_ravenscar): Don't initialize base_ptid. + (ravenscar_ops): Remove global. + +2019-02-15 Tom Tromey <tromey@adacore.com> + + * target.h (push_target): Declare new overload. + * target.c (push_target): New overload, taking an rvalue reference. + * remote.c (remote_target::open_1): Use push_target overload. + * corelow.c (core_target_open): Use push_target overload. + +2019-02-15 Tom Tromey <tromey@adacore.com> + + * ravenscar-thread.c (is_ravenscar_task) + (ravenscar_task_is_currently_active): Return bool. + (ravenscar_update_inferior_ptid, get_running_thread_msymbol) + (_initialize_ravenscar): Remove "(void)". + (has_ravenscar_runtime, ravenscar_runtime_initialized): Likewise. + Return bool. + +2019-02-15 Tom Tromey <tromey@adacore.com> + + * ravenscar-thread.c (ravenscar_runtime_initializer) + (has_ravenscar_runtime, get_running_thread_id) + (ravenscar_thread_target::resume): Fix indentation. + +2019-02-15 Tom Tromey <tromey@adacore.com> + + * sparc-ravenscar-thread.c (struct sparc_ravenscar_ops): Derive + from ravenscar_arch_ops. + (sparc_ravenscar_ops::fetch_registers) + (sparc_ravenscar_ops::store_registers): Now methods. + (sparc_ravenscar_prepare_to_store): Remove. + (sparc_ravenscar_ops): Redefine. + * ravenscar-thread.h (struct ravenscar_arch_ops): Add virtual + methods and destructor. Remove members. + * ravenscar-thread.c (ravenscar_thread_target::fetch_registers) + (ravenscar_thread_target::store_registers) + (ravenscar_thread_target::prepare_to_store): Update. + * ppc-ravenscar-thread.c (ppc_ravenscar_generic_prepare_to_store): + Remove. + (struct ppc_ravenscar_powerpc_ops): Derive from + ravenscar_arch_ops. + (ppc_ravenscar_powerpc_ops::fetch_registers) + (ppc_ravenscar_powerpc_ops::store_registers): Now methods. + (ppc_ravenscar_powerpc_ops): Redefine. + (struct ppc_ravenscar_e500_ops): Derive from ravenscar_arch_ops. + (ppc_ravenscar_e500_ops::fetch_registers) + (ppc_ravenscar_e500_ops::store_registers): Now methods. + (ppc_ravenscar_e500_ops): Redefine. + * aarch64-ravenscar-thread.c + (aarch64_ravenscar_generic_prepare_to_store): Remove. + (struct aarch64_ravenscar_ops): Derive from ravenscar_arch_ops. + (aarch64_ravenscar_fetch_registers) + (aarch64_ravenscar_store_registers): Now methods. + (aarch64_ravenscar_ops): Redefine. + +2019-02-15 Tom Tromey <tromey@adacore.com> + + * ravenscar-thread.c (ravenscar_thread_target::stopped_by_sw_breakpoint) + (ravenscar_thread_target::stopped_by_hw_breakpoint) + (ravenscar_thread_target::stopped_by_watchpoint) + (ravenscar_thread_target::stopped_data_address) + (ravenscar_thread_target::core_of_thread): Use scoped_restore. + +2019-02-15 Tom Tromey <tromey@adacore.com> + + * ravenscar-thread.c: Fix some typos. + +2019-02-15 Philippe Waroquiers <philippe.waroquiers@skynet.be> + Tom Tromey <tromey@adacore.com> + + * ada-lang.c (ada_exception_sal): Change addr_string to a + std::string. + (create_ada_exception_catchpoint): Update. + +2019-02-15 Philippe Waroquiers <philippe.waroquiers@skynet.be> + Tom Tromey <tromey@adacore.com> + + * breakpoint.c (~bp_location): Rename from bp_location_dtor. + (bp_location_ops): Remove. + (base_breakpoint_allocate_location): Update. + (free_bp_location): Update. + * ada-lang.c (class ada_catchpoint_location) + <ada_catchpoint_location>: Remove ops parameter. + (ada_catchpoint_location_dtor): Remove. + (ada_catchpoint_location_ops): Remove. + (allocate_location_exception): Update. + * breakpoint.h (struct bp_location_ops): Remove. + (class bp_location) <bp_location>: Remove bp_location_ops + parameter. + <~bp_location>: Add destructor. + <ops>: Remove. + +2019-02-14 Thomas Schwinge <thomas@codesourcery.com> + Pedro Alves <palves@redhat.com> + + * remote.c (remote_target::remote_parse_stop_reply): Avoid using + 'PATH_MAX'. + +2019-02-14 David Michael <fedora.dm0@gmail.com> + Samuel Thibault <samuel.thibault@gnu.org> + Thomas Schwinge <thomas@codesourcery.com> + + * gnu-nat.c (S_proc_getmsgport_reply, S_proc_task2proc_reply) + (S_proc_pid2proc_reply): Adjust to Hurd "proc" interface changes. + +2019-02-14 Thomas Schwinge <thomas@codesourcery.com> + + * gnu-nat.c (gnu_write_inferior, parse_int_arg, _parse_bool_arg) + (check_empty): Use "const char *". + + * gnu-nat.c (gnu_nat_target::detach): Instead of + 'detach_inferior (pid)' call + 'detach_inferior (find_inferior_pid (pid))'. + + * configure.nat [gdb_host == i386gnu] (NATDEPFILES): Add + 'nat/fork-inferior.o'. + * gnu-nat.c: #include "nat/fork-inferior.h". + + * gnu-nat.c (gnu_nat_target::detach): Instead of + 'inf_child_maybe_unpush_target (ops)' call 'maybe_unpush_target'. + * gnu-nat.h: #include "inf-child.h". + * i386-gnu-nat.c (gnu_fetch_registers): Rename/move to + 'i386_gnu_nat_target::fetch_registers'. + (gnu_store_registers): Rename/move to + 'i386_gnu_nat_target::store_registers'. + + * config/i386/nm-i386gnu.h: Don't "#include" any files. + * gnu-nat.h (mach_thread_info): New function. + * gnu-nat.c (thread_takeover_sc_cmd): Use it. + + * config/i386/nm-i386gnu.h (gnu_target_pid_to_str): Remove. + +2019-02-14 Frederic Konrad <konrad@adacore.com> + + * riscv-rdep.c (riscv_type_alignment): Handle TYPE_CODE_RANGE. + +2019-02-14 Joel Brobecker <brobecker@adacore.com> + + * windows-nat.c (windows_add_thread): Add new parameter + "main_thread_p" with default value set to false. Update + function documentation as well as all callers. + (windows_delete_thread): Likewise. + (fake_create_process): Update call to windows_add_thread. + (get_windows_debug_event) <CREATE_THREAD_DEBUG_EVENT> + <CREATE_PROCESS_DEBUG_EVENT>: Likewise. + <EXIT_THREAD_DEBUG_EVENT, EXIT_PROCESS_DEBUG_EVENT>: Update + call to windows_delete_thread. + +2019-02-13 Simon Marchi <simon.marchi@ericsson.com> + + * MAINTAINERS: Add Andrew Burgess as global maintainer. + +2019-02-12 John Baldwin <jhb@FreeBSD.org> + + * symfile.c (find_separate_debug_file): Use canonical path of + sysroot with child_path instead of gdb_sysroot if it is valid. + +2019-02-12 John Baldwin <jhb@FreeBSD.org> + + * symfile.c (find_separate_debug_file): Use child_path to + determine if an object file is under a sysroot. + +2019-02-12 John Baldwin <jhb@FreeBSD.org> + + * Makefile.in (SUBDIR_UNITTESTS_SRCS): Add + unittests/child-path-selftests.c. + * common/pathstuff.c (child_path): New function. + * common/pathstuff.h (child_path): New prototype. + * unittests/child-path-selftests.c: New file. + +2019-02-12 John Baldwin <jhb@FreeBSD.org> + + * symfile.c (find_separate_debug_file): Look for separate debug + files in debug directories under the sysroot. + +2019-02-12 Philippe Waroquiers <philippe.waroquiers@skynet.be> + + * symtab.h (struct minimal_symbol data_p): New const method. + (struct minimal_symbol text_p): Likewise. + * symtab.c (output_source_filename): Use file name style + to print file name. + (print_symbol_info): Likewise. + (print_msymbol_info): Use address style to print addresses. + Use function name style to print executable text symbols. + (expand_symtab_containing_pc): Use data_p. + (find_pc_sect_compunit_symtab): Likewise. + +2019-02-12 Philippe Waroquiers <philippe.waroquiers@skynet.be> + + * breakpoint.c (describe_other_breakpoints): Use address style + to print addresses. + (say_where): Likewise. + +2019-02-12 Philippe Waroquiers <philippe.waroquiers@skynet.be> + + * ada-typeprint.c (print_func_type): Print function name + style to print function name. + * c-typeprint.c (c_print_type_1): Likewise. + +2019-02-11 Alan Hayward <alan.hayward@arm.com> + + * aarch64-linux-tdep.c (aarch64_linux_get_syscall_number): Check + for execve. + +2019-02-10 Philippe Waroquiers <philippe.waroquiers@skynet.be> + + * c-exp.y (direct_abs_decl): Use emplace_back to record the + type_stack. + +2019-02-10 Joel Brobecker <brobecker@adacore.com> + + * ada-varobj.c (ada_value_is_changeable_p): Add handling of + TYPE_CODE_REF types. + +2019-02-08 Jim Wilson <jimw@sifive.com> + + * riscv-linux-tdep.c (riscv_linux_fregmap): New. + (riscv_linux_fregset): New. + (riscv_linux_iterate_over_regset_sections): Call cb for .reg2 section. + +2019-02-07 Tom Tromey <tom@tromey.com> + + * thread.c (thread_cancel_execution_command): Update. + * thread-fsm.h (struct thread_fsm): Add constructor, destructor, + methods. + (struct thread_fsm_ops): Remove. + (thread_fsm_ctor, thread_fsm_delete, thread_fsm_clean_up) + (thread_fsm_should_stop, thread_fsm_return_value) + (thread_fsm_set_finished, thread_fsm_finished_p) + (thread_fsm_async_reply_reason, thread_fsm_should_notify_stop): + Don't declare. + * mi/mi-interp.c (mi_on_normal_stop_1): Update. + * infrun.c (clear_proceed_status_thread) + (clean_up_just_stopped_threads_fsms, fetch_inferior_event) + (print_stop_event): Update. + * infcmd.c (struct step_command_fsm): Inherit from thread_fsm. + Add constructor. + (step_command_fsm_ops): Remove. + (new_step_command_fsm): Remove. + (step_1): Update. + (step_command_fsm::should_stop): Rename from + step_command_fsm_should_stop. + (step_command_fsm::clean_up): Rename from + step_command_fsm_clean_up. + (step_command_fsm::do_async_reply_reason): Rename from + step_command_fsm_async_reply_reason. + (struct until_next_fsm): Inherit from thread_fsm. Add + constructor. + (until_next_fsm_ops): Remove. + (new_until_next_fsm): Remove. + (until_next_fsm::should_stop): Rename from + until_next_fsm_should_stop. + (until_next_fsm::clean_up): Rename from until_next_fsm_clean_up. + (until_next_fsm::do_async_reply_reason): Rename from + until_next_fsm_async_reply_reason. + (struct finish_command_fsm): Inherit from thread_fsm. Add + constructor. Change type of breakpoint. + (finish_command_fsm_ops): Remove. + (new_finish_command_fsm): Remove. + (finish_command_fsm::should_stop): Rename from + finish_command_fsm_should_stop. + (finish_command_fsm::clean_up): Rename from + finish_command_fsm_clean_up. + (finish_command_fsm::return_value): Rename from + finish_command_fsm_return_value. + (finish_command_fsm::do_async_reply_reason): Rename from + finish_command_fsm_async_reply_reason. + (finish_command): Update. + * infcall.c (struct call_thread_fsm): Inherit from thread_fsm. + Add constructor. + (call_thread_fsm_ops): Remove. + (call_thread_fsm::call_thread_fsm): Rename from + new_call_thread_fsm. + (call_thread_fsm::should_stop): Rename from + call_thread_fsm_should_stop. + (call_thread_fsm::should_notify_stop): Rename from + call_thread_fsm_should_notify_stop. + (run_inferior_call, call_function_by_hand_dummy): Update. + * cli/cli-interp.c (should_print_stop_to_console): Update. + * breakpoint.c (struct until_break_fsm): Inherit from thread_fsm. + Add constructor. Change type of location_breakpoint, + caller_breakpoint. + (until_break_fsm_ops): Remove. + (new_until_break_fsm): Remove. + (until_break_fsm::should_stop): Rename from + until_break_fsm_should_stop. + (until_break_fsm::clean_up): Rename from + until_break_fsm_clean_up. + (until_break_fsm::do_async_reply_reason): Rename from + until_break_fsm_async_reply_reason. + (until_break_command): Update. + * thread-fsm.c: Remove. + * Makefile.in (COMMON_SFILES): Remove thread-fsm.c. + +2019-02-07 Tom Tromey <tom@tromey.com> + + * yy-remap.h: Add include guard. + * xtensa-tdep.h: Add include guard. + * xcoffread.h: Rename include guard. + * varobj-iter.h: Add include guard. + * tui/tui.h: Rename include guard. + * tui/tui-winsource.h: Rename include guard. + * tui/tui-wingeneral.h: Rename include guard. + * tui/tui-windata.h: Rename include guard. + * tui/tui-win.h: Rename include guard. + * tui/tui-stack.h: Rename include guard. + * tui/tui-source.h: Rename include guard. + * tui/tui-regs.h: Rename include guard. + * tui/tui-out.h: Rename include guard. + * tui/tui-layout.h: Rename include guard. + * tui/tui-io.h: Rename include guard. + * tui/tui-hooks.h: Rename include guard. + * tui/tui-file.h: Rename include guard. + * tui/tui-disasm.h: Rename include guard. + * tui/tui-data.h: Rename include guard. + * tui/tui-command.h: Rename include guard. + * tic6x-tdep.h: Add include guard. + * target/waitstatus.h: Rename include guard. + * target/wait.h: Rename include guard. + * target/target.h: Rename include guard. + * target/resume.h: Rename include guard. + * target-float.h: Rename include guard. + * stabsread.h: Add include guard. + * rs6000-tdep.h: Add include guard. + * riscv-fbsd-tdep.h: Add include guard. + * regformats/regdef.h: Rename include guard. + * record.h: Rename include guard. + * python/python.h: Rename include guard. + * python/python-internal.h: Rename include guard. + * python/py-stopevent.h: Rename include guard. + * python/py-ref.h: Rename include guard. + * python/py-record.h: Rename include guard. + * python/py-record-full.h: Rename include guard. + * python/py-record-btrace.h: Rename include guard. + * python/py-instruction.h: Rename include guard. + * python/py-events.h: Rename include guard. + * python/py-event.h: Rename include guard. + * procfs.h: Add include guard. + * proc-utils.h: Add include guard. + * p-lang.h: Add include guard. + * or1k-tdep.h: Rename include guard. + * observable.h: Rename include guard. + * nto-tdep.h: Rename include guard. + * nat/x86-linux.h: Rename include guard. + * nat/x86-linux-dregs.h: Rename include guard. + * nat/x86-gcc-cpuid.h: Add include guard. + * nat/x86-dregs.h: Rename include guard. + * nat/x86-cpuid.h: Rename include guard. + * nat/ppc-linux.h: Rename include guard. + * nat/mips-linux-watch.h: Rename include guard. + * nat/linux-waitpid.h: Rename include guard. + * nat/linux-ptrace.h: Rename include guard. + * nat/linux-procfs.h: Rename include guard. + * nat/linux-osdata.h: Rename include guard. + * nat/linux-nat.h: Rename include guard. + * nat/linux-namespaces.h: Rename include guard. + * nat/linux-btrace.h: Rename include guard. + * nat/glibc_thread_db.h: Rename include guard. + * nat/gdb_thread_db.h: Rename include guard. + * nat/gdb_ptrace.h: Rename include guard. + * nat/fork-inferior.h: Rename include guard. + * nat/amd64-linux-siginfo.h: Rename include guard. + * nat/aarch64-sve-linux-sigcontext.h: Rename include guard. + * nat/aarch64-sve-linux-ptrace.h: Rename include guard. + * nat/aarch64-linux.h: Rename include guard. + * nat/aarch64-linux-hw-point.h: Rename include guard. + * mn10300-tdep.h: Add include guard. + * mips-linux-tdep.h: Add include guard. + * mi/mi-parse.h: Rename include guard. + * mi/mi-out.h: Rename include guard. + * mi/mi-main.h: Rename include guard. + * mi/mi-interp.h: Rename include guard. + * mi/mi-getopt.h: Rename include guard. + * mi/mi-console.h: Rename include guard. + * mi/mi-common.h: Rename include guard. + * mi/mi-cmds.h: Rename include guard. + * mi/mi-cmd-break.h: Rename include guard. + * m2-lang.h: Add include guard. + * location.h: Rename include guard. + * linux-record.h: Rename include guard. + * linux-nat.h: Add include guard. + * linux-fork.h: Add include guard. + * i386-darwin-tdep.h: Rename include guard. + * hppa-linux-offsets.h: Add include guard. + * guile/guile.h: Rename include guard. + * guile/guile-internal.h: Rename include guard. + * gnu-nat.h: Rename include guard. + * gdb-stabs.h: Rename include guard. + * frv-tdep.h: Add include guard. + * f-lang.h: Add include guard. + * event-loop.h: Add include guard. + * darwin-nat.h: Rename include guard. + * cp-abi.h: Rename include guard. + * config/sparc/nm-sol2.h: Rename include guard. + * config/nm-nto.h: Rename include guard. + * config/nm-linux.h: Add include guard. + * config/i386/nm-i386gnu.h: Rename include guard. + * config/djgpp/nl_types.h: Rename include guard. + * config/djgpp/langinfo.h: Rename include guard. + * compile/gcc-cp-plugin.h: Add include guard. + * compile/gcc-c-plugin.h: Add include guard. + * compile/compile.h: Rename include guard. + * compile/compile-object-run.h: Rename include guard. + * compile/compile-object-load.h: Rename include guard. + * compile/compile-internal.h: Rename include guard. + * compile/compile-cplus.h: Rename include guard. + * compile/compile-c.h: Rename include guard. + * common/xml-utils.h: Rename include guard. + * common/x86-xstate.h: Rename include guard. + * common/version.h: Rename include guard. + * common/vec.h: Rename include guard. + * common/tdesc.h: Rename include guard. + * common/selftest.h: Rename include guard. + * common/scoped_restore.h: Rename include guard. + * common/scoped_mmap.h: Rename include guard. + * common/scoped_fd.h: Rename include guard. + * common/safe-iterator.h: Rename include guard. + * common/run-time-clock.h: Rename include guard. + * common/refcounted-object.h: Rename include guard. + * common/queue.h: Rename include guard. + * common/ptid.h: Rename include guard. + * common/print-utils.h: Rename include guard. + * common/preprocessor.h: Rename include guard. + * common/pathstuff.h: Rename include guard. + * common/observable.h: Rename include guard. + * common/netstuff.h: Rename include guard. + * common/job-control.h: Rename include guard. + * common/host-defs.h: Rename include guard. + * common/gdb_wait.h: Rename include guard. + * common/gdb_vecs.h: Rename include guard. + * common/gdb_unlinker.h: Rename include guard. + * common/gdb_unique_ptr.h: Rename include guard. + * common/gdb_tilde_expand.h: Rename include guard. + * common/gdb_sys_time.h: Rename include guard. + * common/gdb_string_view.h: Rename include guard. + * common/gdb_splay_tree.h: Rename include guard. + * common/gdb_setjmp.h: Rename include guard. + * common/gdb_ref_ptr.h: Rename include guard. + * common/gdb_optional.h: Rename include guard. + * common/gdb_locale.h: Rename include guard. + * common/gdb_assert.h: Rename include guard. + * common/filtered-iterator.h: Rename include guard. + * common/filestuff.h: Rename include guard. + * common/fileio.h: Rename include guard. + * common/environ.h: Rename include guard. + * common/common-utils.h: Rename include guard. + * common/common-types.h: Rename include guard. + * common/common-regcache.h: Rename include guard. + * common/common-inferior.h: Rename include guard. + * common/common-gdbthread.h: Rename include guard. + * common/common-exceptions.h: Rename include guard. + * common/common-defs.h: Rename include guard. + * common/common-debug.h: Rename include guard. + * common/cleanups.h: Rename include guard. + * common/buffer.h: Rename include guard. + * common/btrace-common.h: Rename include guard. + * common/break-common.h: Rename include guard. + * cli/cli-utils.h: Rename include guard. + * cli/cli-style.h: Rename include guard. + * cli/cli-setshow.h: Rename include guard. + * cli/cli-script.h: Rename include guard. + * cli/cli-interp.h: Rename include guard. + * cli/cli-decode.h: Rename include guard. + * cli/cli-cmds.h: Rename include guard. + * charset-list.h: Add include guard. + * buildsym-legacy.h: Rename include guard. + * bfin-tdep.h: Add include guard. + * ax.h: Rename include guard. + * arm-linux-tdep.h: Add include guard. + * arm-fbsd-tdep.h: Add include guard. + * arch/xtensa.h: Rename include guard. + * arch/tic6x.h: Add include guard. + * arch/i386.h: Add include guard. + * arch/arm.h: Rename include guard. + * arch/arm-linux.h: Rename include guard. + * arch/arm-get-next-pcs.h: Rename include guard. + * arch/amd64.h: Add include guard. + * arch/aarch64-insn.h: Rename include guard. + * arch-utils.h: Rename include guard. + * annotate.h: Add include guard. + * amd64-darwin-tdep.h: Rename include guard. + * aarch64-linux-tdep.h: Add include guard. + * aarch64-fbsd-tdep.h: Add include guard. + * aarch32-linux-nat.h: Add include guard. + +2019-02-06 Philippe Waroquiers <philippe.waroquiers@skynet.be> + + * macrotab.c (macro_define_internal): New function that + factorizes macro_define_object_internal and macro_define_function + code. + (macro_define_object_internal): Use macro_define_internal. + (macro_define_function): Likewise. + +2019-02-06 Philippe Waroquiers <philippe.waroquiers@skynet.be> + + * macrocmd.c (extract_identifier): Return + a gdb::unique_xmalloc_ptr<char> instead of a char *, and update + callers. + +2019-02-06 John Baldwin <jhb@FreeBSD.org> + + * fbsd-nat.c (fbsd_fetch_cmdline): Join arguments with spaces. + +2019-02-05 Tom Tromey <tom@tromey.com> + + * target.c (target_stack::unpush): Move assertion earlier. + +2019-01-30 Tom Tromey <tom@tromey.com> + + PR python/23615: + * python/python.c (execute_gdb_command): Use gdbpy_allow_threads. + (gdbpy_parse_and_eval): Likewise. + * python/python-internal.h (gdbpy_allow_threads): New class. + +2019-01-28 John Baldwin <jhb@FreeBSD.org> + + * aarch64-fbsd-tdep.c (aarch64_fbsd_gregmap) + (aarch64_fbsd_fpregmap): Move earlier. + (AARCH64_MCONTEXT_REG_SIZE, AARCH64_MCONTEXT_FPREG_SIZE): Delete. + (aarch64_fbsd_sigframe_init): Use trad_frame_set_reg_regmap + instead of individual calls to trad_frame_set_reg_addr. + * arm-fbsd-tdep.c (arm_fbsd_gregmap, arm_fbsd_vfpregmap): Move + earlier. + (ARM_MCONTEXT_REG_SIZE, ARM_MCONTEXT_VFP_REG_SIZE): Delete. + (arm_fbsd_sigframe_init): Use trad_frame_set_reg_regmap + instead of individual calls to trad_frame_set_reg_addr. + +2019-01-28 Alan Hayward <alan.hayward@arm.com> + + * CONTRIBUTE: Replace contribution list with wiki link. + +2019-01-25 Tom Tromey <tom@tromey.com> + + * Makefile.in (GDB_CFLAGS): Don't add -I for common. + +2019-01-25 Tom Tromey <tom@tromey.com> + + * xtensa-linux-nat.c: Fix common/ includes. + * xml-support.h: Fix common/ includes. + * xml-support.c: Fix common/ includes. + * x86-linux-nat.c: Fix common/ includes. + * windows-nat.c: Fix common/ includes. + * varobj.h: Fix common/ includes. + * varobj.c: Fix common/ includes. + * value.c: Fix common/ includes. + * valops.c: Fix common/ includes. + * utils.c: Fix common/ includes. + * unittests/xml-utils-selftests.c: Fix common/ includes. + * unittests/utils-selftests.c: Fix common/ includes. + * unittests/unpack-selftests.c: Fix common/ includes. + * unittests/tracepoint-selftests.c: Fix common/ includes. + * unittests/style-selftests.c: Fix common/ includes. + * unittests/string_view-selftests.c: Fix common/ includes. + * unittests/scoped_restore-selftests.c: Fix common/ includes. + * unittests/scoped_mmap-selftests.c: Fix common/ includes. + * unittests/scoped_fd-selftests.c: Fix common/ includes. + * unittests/rsp-low-selftests.c: Fix common/ includes. + * unittests/parse-connection-spec-selftests.c: Fix common/ + includes. + * unittests/optional-selftests.c: Fix common/ includes. + * unittests/offset-type-selftests.c: Fix common/ includes. + * unittests/observable-selftests.c: Fix common/ includes. + * unittests/mkdir-recursive-selftests.c: Fix common/ includes. + * unittests/memrange-selftests.c: Fix common/ includes. + * unittests/memory-map-selftests.c: Fix common/ includes. + * unittests/lookup_name_info-selftests.c: Fix common/ includes. + * unittests/function-view-selftests.c: Fix common/ includes. + * unittests/environ-selftests.c: Fix common/ includes. + * unittests/copy_bitwise-selftests.c: Fix common/ includes. + * unittests/common-utils-selftests.c: Fix common/ includes. + * unittests/cli-utils-selftests.c: Fix common/ includes. + * unittests/array-view-selftests.c: Fix common/ includes. + * ui-file.c: Fix common/ includes. + * tui/tui-io.c: Fix common/ includes. + * tracepoint.h: Fix common/ includes. + * tracepoint.c: Fix common/ includes. + * tracefile-tfile.c: Fix common/ includes. + * top.h: Fix common/ includes. + * top.c: Fix common/ includes. + * thread.c: Fix common/ includes. + * target/waitstatus.h: Fix common/ includes. + * target/waitstatus.c: Fix common/ includes. + * target.h: Fix common/ includes. + * target.c: Fix common/ includes. + * target-memory.c: Fix common/ includes. + * target-descriptions.c: Fix common/ includes. + * symtab.h: Fix common/ includes. + * symfile.c: Fix common/ includes. + * stap-probe.c: Fix common/ includes. + * spu-linux-nat.c: Fix common/ includes. + * sparc-nat.c: Fix common/ includes. + * source.c: Fix common/ includes. + * solib.c: Fix common/ includes. + * solib-target.c: Fix common/ includes. + * ser-unix.c: Fix common/ includes. + * ser-tcp.c: Fix common/ includes. + * ser-pipe.c: Fix common/ includes. + * ser-base.c: Fix common/ includes. + * selftest-arch.c: Fix common/ includes. + * s12z-tdep.c: Fix common/ includes. + * rust-exp.y: Fix common/ includes. + * rs6000-aix-tdep.c: Fix common/ includes. + * riscv-tdep.c: Fix common/ includes. + * remote.c: Fix common/ includes. + * remote-notif.h: Fix common/ includes. + * remote-fileio.h: Fix common/ includes. + * remote-fileio.c: Fix common/ includes. + * regcache.h: Fix common/ includes. + * regcache.c: Fix common/ includes. + * record-btrace.c: Fix common/ includes. + * python/python.c: Fix common/ includes. + * python/py-type.c: Fix common/ includes. + * python/py-inferior.c: Fix common/ includes. + * progspace.h: Fix common/ includes. + * producer.c: Fix common/ includes. + * procfs.c: Fix common/ includes. + * proc-api.c: Fix common/ includes. + * printcmd.c: Fix common/ includes. + * ppc-linux-nat.c: Fix common/ includes. + * parser-defs.h: Fix common/ includes. + * osdata.c: Fix common/ includes. + * obsd-nat.c: Fix common/ includes. + * nat/x86-linux.c: Fix common/ includes. + * nat/x86-linux-dregs.c: Fix common/ includes. + * nat/x86-dregs.h: Fix common/ includes. + * nat/x86-dregs.c: Fix common/ includes. + * nat/ppc-linux.c: Fix common/ includes. + * nat/mips-linux-watch.h: Fix common/ includes. + * nat/mips-linux-watch.c: Fix common/ includes. + * nat/linux-waitpid.c: Fix common/ includes. + * nat/linux-ptrace.h: Fix common/ includes. + * nat/linux-ptrace.c: Fix common/ includes. + * nat/linux-procfs.c: Fix common/ includes. + * nat/linux-personality.c: Fix common/ includes. + * nat/linux-osdata.c: Fix common/ includes. + * nat/linux-namespaces.c: Fix common/ includes. + * nat/linux-btrace.h: Fix common/ includes. + * nat/linux-btrace.c: Fix common/ includes. + * nat/fork-inferior.c: Fix common/ includes. + * nat/amd64-linux-siginfo.c: Fix common/ includes. + * nat/aarch64-sve-linux-ptrace.c: Fix common/ includes. + * nat/aarch64-linux.c: Fix common/ includes. + * nat/aarch64-linux-hw-point.h: Fix common/ includes. + * nat/aarch64-linux-hw-point.c: Fix common/ includes. + * namespace.h: Fix common/ includes. + * mips-linux-tdep.c: Fix common/ includes. + * minsyms.c: Fix common/ includes. + * mi/mi-parse.h: Fix common/ includes. + * mi/mi-main.c: Fix common/ includes. + * mi/mi-cmd-env.c: Fix common/ includes. + * memrange.h: Fix common/ includes. + * memattr.c: Fix common/ includes. + * maint.h: Fix common/ includes. + * maint.c: Fix common/ includes. + * main.c: Fix common/ includes. + * machoread.c: Fix common/ includes. + * location.c: Fix common/ includes. + * linux-thread-db.c: Fix common/ includes. + * linux-nat.c: Fix common/ includes. + * linux-fork.c: Fix common/ includes. + * inline-frame.c: Fix common/ includes. + * infrun.c: Fix common/ includes. + * inflow.c: Fix common/ includes. + * inferior.h: Fix common/ includes. + * inferior.c: Fix common/ includes. + * infcmd.c: Fix common/ includes. + * inf-ptrace.c: Fix common/ includes. + * inf-child.c: Fix common/ includes. + * ia64-linux-nat.c: Fix common/ includes. + * i387-tdep.c: Fix common/ includes. + * i386-tdep.c: Fix common/ includes. + * i386-linux-tdep.c: Fix common/ includes. + * i386-linux-nat.c: Fix common/ includes. + * i386-go32-tdep.c: Fix common/ includes. + * i386-fbsd-tdep.c: Fix common/ includes. + * i386-fbsd-nat.c: Fix common/ includes. + * guile/scm-type.c: Fix common/ includes. + * guile/guile.c: Fix common/ includes. + * go32-nat.c: Fix common/ includes. + * gnu-nat.c: Fix common/ includes. + * gdbthread.h: Fix common/ includes. + * gdbarch-selftests.c: Fix common/ includes. + * gdb_usleep.c: Fix common/ includes. + * gdb_select.h: Fix common/ includes. + * gdb_bfd.c: Fix common/ includes. + * gcore.c: Fix common/ includes. + * fork-child.c: Fix common/ includes. + * findvar.c: Fix common/ includes. + * fbsd-nat.c: Fix common/ includes. + * event-top.c: Fix common/ includes. + * event-loop.c: Fix common/ includes. + * dwarf2read.c: Fix common/ includes. + * dwarf2loc.c: Fix common/ includes. + * dwarf2-frame.c: Fix common/ includes. + * dwarf-index-cache.c: Fix common/ includes. + * dtrace-probe.c: Fix common/ includes. + * disasm-selftests.c: Fix common/ includes. + * defs.h: Fix common/ includes. + * csky-tdep.c: Fix common/ includes. + * cp-valprint.c: Fix common/ includes. + * cp-support.h: Fix common/ includes. + * cp-support.c: Fix common/ includes. + * corelow.c: Fix common/ includes. + * completer.h: Fix common/ includes. + * completer.c: Fix common/ includes. + * compile/compile.c: Fix common/ includes. + * compile/compile-loc2c.c: Fix common/ includes. + * compile/compile-cplus-types.c: Fix common/ includes. + * compile/compile-cplus-symbols.c: Fix common/ includes. + * command.h: Fix common/ includes. + * cli/cli-dump.c: Fix common/ includes. + * cli/cli-cmds.c: Fix common/ includes. + * charset.c: Fix common/ includes. + * build-id.c: Fix common/ includes. + * btrace.h: Fix common/ includes. + * btrace.c: Fix common/ includes. + * breakpoint.h: Fix common/ includes. + * breakpoint.c: Fix common/ includes. + * ax.h: + (enum agent_op): Fix common/ includes. + * ax-general.c (struct aop_map): Fix common/ includes. + * ax-gdb.c: Fix common/ includes. + * auxv.c: Fix common/ includes. + * auto-load.c: Fix common/ includes. + * arm-tdep.c: Fix common/ includes. + * arch/riscv.c: Fix common/ includes. + * arch/ppc-linux-common.c: Fix common/ includes. + * arch/i386.c: Fix common/ includes. + * arch/arm.c: Fix common/ includes. + * arch/arm-linux.c: Fix common/ includes. + * arch/arm-get-next-pcs.c: Fix common/ includes. + * arch/amd64.c: Fix common/ includes. + * arch/aarch64.c: Fix common/ includes. + * arch/aarch64-insn.c: Fix common/ includes. + * arch-utils.c: Fix common/ includes. + * amd64-windows-tdep.c: Fix common/ includes. + * amd64-tdep.c: Fix common/ includes. + * amd64-sol2-tdep.c: Fix common/ includes. + * amd64-obsd-tdep.c: Fix common/ includes. + * amd64-nbsd-tdep.c: Fix common/ includes. + * amd64-linux-tdep.c: Fix common/ includes. + * amd64-linux-nat.c: Fix common/ includes. + * amd64-fbsd-tdep.c: Fix common/ includes. + * amd64-fbsd-nat.c: Fix common/ includes. + * amd64-dicos-tdep.c: Fix common/ includes. + * amd64-darwin-tdep.c: Fix common/ includes. + * agent.c: Fix common/ includes. + * ada-lang.h: Fix common/ includes. + * ada-lang.c: Fix common/ includes. + * aarch64-tdep.c: Fix common/ includes. + +2019-01-25 Tom Tromey <tom@tromey.com> + + * common/create-version.sh: Use common/version.h. + +2019-01-24 Pedro Alves <palves@redhat.com> + + * infrun.c (signal_stop, signal_print, signal_program) + (signal_catch, signal_pass): Now arrays instead of pointers. + (update_signals_program_target, do_target_resume) + (signal_catch_update, handle_command, _initialize_infrun): Adjust. + * linux-nat.c (linux_nat_target::pass_signals) + (linux_nat_target::create_inferior, linux_nat_target::attach): + Adjust. + * linux-nat.h (linux_nat_target::pass_signals): Adjust. + * nto-procfs.c (nto_procfs_target::pass_signals): Adjust. + * procfs.c (procfs_target::pass_signals): Adjust. + * record-full.c (record_full_target::resume): Adjust. + * remote.c (remote_target::pass_signals) + (remote_target::program_signals): Adjust. + * target-debug.h (target_debug_print_signals): Now takes a + gdb::array_view as parameter. Adjust. + * target.h (target_ops) <pass_signals, program_signals>: Replace + pointer and length parameters with gdb::array_view. + (target_pass_signals, target_program_signals): Likewise. + * target-delegates.c: Regenerate. + +2019-01-24 Pedro Alves <palves@redhat.com> + + * common/forward-scope-exit.h + (forward_scope_exit::forward_scope_exit): Pass arguments to + m_bind_function directly, instead of creating a std::bind and + copying that. + +2019-01-24 Alan Hayward <alan.hayward@arm.com> + + * aarch64-tdep.c (aapcs_is_vfp_call_or_return_candidate_1): Check + for static members. + (pass_in_v_vfp_candidate): Likewise. + +2019-01-23 Tom Tromey <tom@tromey.com> + Pedro Alves <palves@redhat.com> + + * regcache.c (class regcache_invalidator): Remove. + (regcache::raw_write): Use make_scope_exit. + +2019-01-23 Tom Tromey <tom@tromey.com> + + * ui-out.h (class ui_out_emit_type): Update comment. + +2019-01-23 Tom Tromey <tom@tromey.com> + + * infrun.c (fetch_inferior_event): Update comment. + +2019-01-23 Tom Tromey <tom@tromey.com> + Pedro Alves <palves@redhat.com> + + * infrun.c (reinstall_readline_callback_handler_cleanup): Remove + parameter. + (fetch_inferior_event): Use SCOPE_EXIT. + + +2019-01-23 Tom Tromey <tom@tromey.com> + Pedro Alves <palves@redhat.com> + + * infrun.c (disable_thread_events): Delete. + (stop_all_threads): Use SCOPE_EXIT. + +2019-01-23 Tom Tromey <tom@tromey.com> + Pedro Alves <palves@redhat.com> + + * symfile.c: Include forward-scope-exit.h. + (clear_symtab_users_cleanup): Replace forward declaration with + a FORWARD_SCOPE_EXIT. + (syms_from_objfile_1): Use the forward_scope_exit and + gdb::optional instead of cleanup_function. + (reread_symbols): Use the forward_scope_exit instead of + cleanup_function. + (clear_symtab_users_cleanup): Remove function. + +2019-01-23 Tom Tromey <tom@tromey.com> + Pedro Alves <palves@redhat.com> + + * linux-nat.c: Include scope-exit.h. + (cleanup_target_stop): Remove. + (linux_nat_target::static_tracepoint_markers_by_strid): Use + SCOPE_EXIT. + +2019-01-23 Tom Tromey <tom@tromey.com> + Pedro Alves <palves@redhat.com> + + * infcall.c (cleanup_delete_std_terminate_breakpoint): Remove. + (call_function_by_hand_dummy): Use SCOPE_EXIT. + +2019-01-23 Tom Tromey <tom@tromey.com> + Andrew Burgess <andrew.burgess@embecosm.com> + Pedro Alves <palves@redhat.com> + + * infrun.c (fetch_inferior_event): Use scope_exit. + * utils.h (make_bpstat_clear_actions_cleanup): Don't declare. + * top.c (execute_command): Use scope_exit. + * breakpoint.c (bpstat_do_actions): Use scope_exit. + * utils.c (do_bpstat_clear_actions_cleanup) + (make_bpstat_clear_actions_cleanup): Remove. + +2019-01-23 Tom Tromey <tom@tromey.com> + Pedro Alves <palves@redhat.com> + + * infrun.c: Include "common/scope-exit.h" + (delete_just_stopped_threads_infrun_breakpoints_cleanup): Remove. + (wait_for_inferior): Use SCOPE_EXIT. + (fetch_inferior_event): Use scope_exit. + +2019-01-23 Tom Tromey <tom@tromey.com> + Pedro Alves <palves@redhat.com> + + * breakpoint.c (create_breakpoint): Remove cleanup. + +2019-01-23 Tom Tromey <tom@tromey.com> + Andrew Burgess <andrew.burgess@embecosm.com> + Pedro Alves <palves@redhat.com> + +2019-01-23 Pedro Alves <palves@redhat.com> + + * gdbarch-selftests.c (struct on_exit): Use SCOPE_EXIT. + +2019-01-23 Pedro Alves <palves@redhat.com> + Andrew Burgess <andrew.burgess@embecosm.com> + + * gdbthread.h: Include "common/forward-scope-exit.h". + (scoped_finish_thread_state): Redefine custom class in terms of + forward_scope_exit. + +2019-01-23 Pedro Alves <palves@redhat.com> + Andrew Burgess <andrew.burgess@embecosm.com> + + * common/forward-scope-exit.h: New file. + +2019-01-23 Pedro Alves <palves@redhat.com> + Andrew Burgess <andrew.burgess@embecosm.com> + Tom Tromey <tom@tromey.com> + + * common/scope-exit.h: New file. + +2019-01-23 Pedro Alves <palves@redhat.com> + + * common/preprocessor.h (ESC): Rename to ... + (ESC_PARENS): ... this. + * common/valid-expr.h (CHECK_VALID_EXPR_1, CHECK_VALID_EXPR_2) + (CHECK_VALID_EXPR_3, CHECK_VALID_EXPR_4): Adjust. + +2019-01-23 Tom Tromey <tom@tromey.com> + + * language.h (class scoped_switch_to_sym_language_if_auto): + Initialize m_lang in both cases. + +2019-01-23 Alan Hayward <alan.hayward@arm.com> + + * nat/aarch64-linux.c (aarch64_linux_new_thread): Replace XNEW + with XCNEW. + +2019-01-22 Tom Tromey <tom@tromey.com> + + * corelow.c: Do not include sys/file.h. + +2019-01-22 Tom Tromey <tom@tromey.com> + + * tui/tui-wingeneral.h: Include gdb_curses.h. + +2019-01-22 Tom Tromey <tom@tromey.com> + + * source-cache.h (class source_cache) <get_source_lines, + get_plain_source_lines, extract_lines>: Rename "lines" parameter. + +2019-01-22 Tom Tromey <tom@tromey.com> + + * remote-fileio.h (struct remote_target): Declare. + +2019-01-22 Tom Tromey <tom@tromey.com> + + * python/py-arch.c: Do not include py-ref.h. + * python/py-bpevent.c: Do not include py-ref.h. + * python/py-cmd.c: Do not include py-ref.h. + * python/py-continueevent.c: Do not include py-ref.h. + * python/py-event.h: Do not include py-ref.h. + * python/py-evtregistry.c: Do not include py-ref.h. + * python/py-finishbreakpoint.c: Do not include py-ref.h. + * python/py-frame.c: Do not include py-ref.h. + * python/py-framefilter.c: Do not include py-ref.h. + * python/py-function.c: Do not include py-ref.h. + * python/py-infevents.c: Do not include py-ref.h. + * python/py-linetable.c: Do not include py-ref.h. + * python/py-objfile.c: Do not include py-ref.h. + * python/py-param.c: Do not include py-ref.h. + * python/py-prettyprint.c: Do not include py-ref.h. + * python/py-progspace.c: Do not include py-ref.h. + * python/py-symbol.c: Do not include py-ref.h. + * python/py-symtab.c: Do not include py-ref.h. + * python/py-type.c: Do not include py-ref.h. + * python/py-unwind.c: Do not include py-ref.h. + * python/py-utils.c: Do not include py-ref.h. + * python/py-value.c: Do not include py-ref.h. + * python/py-varobj.c: Do not include py-ref.h. + * python/py-xmethods.c: Do not include py-ref.h. + * python/python.c: Do not include py-ref.h. + * varobj.c: Do not include py-ref.h. + +2019-01-22 Tom Tromey <tom@tromey.com> + + * objfiles.h (struct objfile_per_bfd_storage): Use "struct" + keyword for bcache. + +2019-01-22 Tom Tromey <tom@tromey.com> + + * compile/compile-cplus-types.c: Remove a comment by #include. + +2019-01-22 Tom Tromey <tom@tromey.com> + + * compile/gcc-c-plugin.h: Include compile-internal.h. + +2019-01-22 Tom Tromey <tom@tromey.com> + + * stabsread.c (EXTERN): Do not define. + (symnum, next_symbol_text_func, processing_gcc_compilation) + (within_function, global_sym_chain, global_stabs) + (previous_stab_code, this_object_header_files) + (n_this_object_header_files) + (n_allocated_this_object_header_files): Define. + * stabsread.h (EXTERN): Never define. Use "extern". + +2019-01-22 Philippe Waroquiers <philippe.waroquiers@skynet.be> + + * event-top.c (handle_line_of_input): use unique_xmalloc_ptr for + history_value. + +2019-01-21 Tom Tromey <tom@tromey.com> + + * ui-out.c: Fix includes. + * tui/tui-source.c: Fix includes. + * target.c: Fix includes. + * remote.c: Fix includes. + * regcache.c: Fix includes. + * python/py-block.c: Fix includes. + * printcmd.c: Fix includes. + * or1k-tdep.c: Fix includes. + * mi/mi-main.c: Fix includes. + * m32r-tdep.c: Fix includes. + * csky-tdep.c: Fix includes. + * compile/compile-cplus-types.c: Fix includes. + * cli/cli-interp.c: Fix includes. + +2019-01-21 Alan Hayward <alan.hayward@arm.com> + + * aarch64-tdep.c (aapcs_is_vfp_call_or_return_candidate_1): Check + for padding. + +2019-01-16 Tom Tromey <tom@tromey.com> + + * objfiles.h (struct minimal_symbol_iterator): Rename. Move + earlier. + (struct objfile) <msymbols_range>: Move from top level. + <msymbols>: New method. + (class objfile_msymbols): Remove. + * symtab.c (default_collect_symbol_completion_matches_break_on): + Update. + * symmisc.c (dump_msymbols): Update. + * stabsread.c (scan_file_globals): Update. + * objc-lang.c (info_selectors_command, info_classes_command) + (find_methods): Update. + * minsyms.c (find_solib_trampoline_target): Update. + * hppa-tdep.c (hppa_lookup_stub_minimal_symbol): Update. + * coffread.c (coff_symfile_read): Update. + * ada-lang.c (ada_lookup_simple_minsym) + (ada_collect_symbol_completion_matches): Update. + +2019-01-16 Tom Tromey <tom@tromey.com> + + * objfiles.h (class objfile_msymbols) <iterator>: Change argument + type. Remove no-argument constructor. + <iterator::operator++>: Simplify. + <begin>: Update. + <end>: Use minimal_symbol_count. + +2019-01-16 Tom Tromey <tom@tromey.com> + + * objfiles.h (struct objfile) <psymtabs>: New method. + (class objfile_psymtabs): Remove. + * psymtab.h (class psymtab_storage) <partial_symtab_range>: New + typedef. + <range>: New method. + (require_partial_symbols): Change return type. + * psymtab.c (require_partial_symbols) + (psym_expand_symtabs_matching): Update. + * mdebugread.c (parse_partial_symbols): Update. + * dbxread.c (dbx_end_psymtab): Update. + +2019-01-15 Tom Tromey <tom@tromey.com> + + * symtab.c (lookup_objfile_from_block) + (lookup_symbol_in_objfile_symtabs) + (basic_lookup_transparent_type_1, find_pc_sect_compunit_symtab) + (find_line_symtab, info_sources_command) + (default_collect_symbol_completion_matches_break_on) + (make_source_files_completion_list): Update. + * symmisc.c (print_objfile_statistics, dump_objfile) + (maintenance_print_symbols, maintenance_info_symtabs) + (maintenance_check_symtabs, maintenance_info_line_tables): + Update. + * source.c (select_source_symtab) + (forget_cached_source_info_for_objfile): Update. + * objfiles.h (class objfile_compunits): Remove. + (struct objfile) <compunits_range>: New typedef. + (compunits): New method. + * objfiles.c (objfile_relocate1): Update. + * mi/mi-cmd-file.c (mi_cmd_file_list_exec_source_files): Update. + * maint.c (count_symtabs_and_blocks): Update. + * linespec.c (iterate_over_all_matching_symtabs): Update. + * cp-support.c (add_symbol_overload_list_qualified): Update. + * coffread.c (coff_symtab_read): Update. + * ada-lang.c (add_nonlocal_symbols) + (ada_collect_symbol_completion_matches) + (ada_add_global_exceptions): Update. + +2019-01-15 Tom Tromey <tom@tromey.com> + + * progspace.h (program_space) <objfiles_safe_range>: New + typedef. + <objfiles_safe>: New method. + * objfiles.h (class all_objfiles_safe): Remove. + * objfiles.c (free_all_objfiles, objfile_purge_solibs): Update. + * jit.c (jit_inferior_exit_hook): Update. + +2019-01-17 Tom Tromey <tom@tromey.com> + + * progspace.h (program_space) <objfiles_range>: New typedef. + <objfiles>: New method. + <objfiles_head>: Rename from objfiles. + (object_files): Update. + * guile/scm-progspace.c (gdbscm_progspace_objfiles): Update. + * guile/scm-pretty-print.c + (ppscm_find_pretty_printer_from_objfiles): Update. + * guile/scm-objfile.c (gdbscm_objfiles): Update. + * python/py-xmethods.c (gdbpy_get_matching_xmethod_workers): + Update. + * python/py-progspace.c (pspy_get_objfiles): Update. + * python/py-prettyprint.c (find_pretty_printer_from_objfiles): + Update. + * python/py-objfile.c (objfpy_lookup_objfile_by_name) + (objfpy_lookup_objfile_by_build_id): Update. + * mi/mi-cmd-file.c (mi_cmd_file_list_exec_source_files): Update. + * windows-tdep.c (windows_iterate_over_objfiles_in_search_order): + Update. + * symtab.c (iterate_over_symtabs, matching_obj_sections) + (expand_symtab_containing_pc, lookup_objfile_from_block) + (lookup_static_symbol, basic_lookup_transparent_type) + (find_pc_sect_compunit_symtab, find_symbol_at_address) + (find_line_symtab, info_sources_command) + (default_collect_symbol_completion_matches_break_on) + (make_source_files_completion_list, find_main_name): Update. + * symmisc.c (print_symbol_bcache_statistics) + (print_objfile_statistics, maintenance_print_symbols) + (maintenance_print_msymbols, maintenance_print_objfiles) + (maintenance_info_symtabs, maintenance_check_symtabs) + (maintenance_expand_symtabs, maintenance_info_line_tables): + Update. + * symfile.c (remove_symbol_file_command, overlay_invalidate_all) + (find_pc_overlay, find_pc_mapped_section, list_overlays_command) + (map_overlay_command, unmap_overlay_command) + (simple_overlay_update, expand_symtabs_matching) + (map_symbol_filenames): Update. + * symfile-debug.c (set_debug_symfile): Update. + * spu-tdep.c (spu_overlay_update, spu_objfile_from_frame): + Update. + * source.c (select_source_symtab, forget_cached_source_info): + Update. + * solib.c (solib_read_symbols): Update. + * solib-spu.c (append_ocl_sos): Update. + * psymtab.c (maintenance_print_psymbols) + (maintenance_info_psymtabs, maintenance_check_psymtabs): Update. + * probe.c (parse_probes_in_pspace, find_probe_by_pc): Update. + * printcmd.c (info_symbol_command): Update. + * ppc-linux-tdep.c (ppc_linux_spe_context_inferior_created): + Update. + * objfiles.h (class all_objfiles): Remove. + * objfiles.c (have_partial_symbols, have_full_symbols) + (have_minimal_symbols, qsort_cmp, update_section_map) + (shared_objfile_contains_address_p) + (default_iterate_over_objfiles_in_search_order): Update. + * objc-lang.c (info_selectors_command, info_classes_command) + (find_methods): Update. + * minsyms.c (find_solib_trampoline_target): Update. + * maint.c (maintenance_info_sections) + (maintenance_translate_address, count_symtabs_and_blocks): + Update. + * main.c (captured_main_1): Update. + * linux-thread-db.c (try_thread_db_load_from_pdir) + (has_libpthread): Update. + * linespec.c (iterate_over_all_matching_symtabs) + (search_minsyms_for_name): Update. + * jit.c (jit_find_objf_with_entry_addr): Update. + * hppa-tdep.c (find_unwind_entry) + (hppa_lookup_stub_minimal_symbol): Update. + * gcore.c (gcore_create_callback, objfile_find_memory_regions): + Update. + * elfread.c (elf_gnu_ifunc_resolve_by_cache) + (elf_gnu_ifunc_resolve_by_got): Update. + * dwarf2-frame.c (dwarf2_frame_find_fde): Update. + * dwarf-index-write.c (save_gdb_index_command): Update. + * cp-support.c (add_symbol_overload_list_qualified): Update. + * breakpoint.c (create_overlay_event_breakpoint) + (create_longjmp_master_breakpoint) + (create_std_terminate_master_breakpoint) + (create_exception_master_breakpoint): Update. + * blockframe.c (find_pc_partial_function): Update. + * ada-lang.c (ada_lookup_simple_minsym, add_nonlocal_symbols) + (ada_collect_symbol_completion_matches) + (ada_add_global_exceptions): Update. + +2019-01-17 Tom Tromey <tom@tromey.com> + + * solib-target.c (lm_info_target_p): Remove typedef. Don't + declare VEC. + (solib_target_parse_libraries): Change return type. + (library_list_start_segment, library_list_start_section) + (library_list_end_library, library_list_start_library); Update. + (solib_target_free_library_list): Remove. + (solib_target_parse_libraries): Remove cleanup. Change return + type. + (solib_target_current_sos): Update. + +2019-01-17 Tom Tromey <tromey@bapiya> + + * valprint.c: Replace "the the" with "the". + * symtab.c: Replace "the the" with "the". + * solib.c: Replace "the the" with "the". + * solib-dsbt.c: Replace "the the" with "the". + * linespec.c: Replace "the the" with "the". + * dwarf2loc.h: Replace "the the" with "the". + * amd64-windows-tdep.c: Replace "the the" with "the". + * aarch64-tdep.c: Replace "the the" with "the". + +2019-01-16 Keith Seitz <keiths@redhat.com> + + PR gdb/23773 + * dwarf2read.c (dwarf2_cu) <ancestor>: New field. + <builder>: Rename to .. + <m_builder>: ... this and make private. + (dwarf2_cu::get_builder): New method. Change all users of + `builder' to use this method. + (dwarf2_start_symtab): Move to ... + (dwarf2_cu::start_symtab): ... here. Update all callers + (setup_type_unit_groups): Move to ... + (dwarf2_cu::setup_type_unit_groups): ... here. Update all + callers. + (dwarf2_cu::reset_builder): New method. + (process_full_compunit, process_full_type_unit): Use + dwarf2_cu::reset_builder. + (follow_die_offset): Record the ancestor CU if it is different + from the followed DIE's CU. + (follow_die_sig_1): Likewise. + +2019-01-15 Tom Tromey <tom@tromey.com> + + * remote.c (class remote_state) <buf>: Now a char_vector. + <buf_size>: Remove. + (remote_target::getpkt): Change type of buf. Remove sizeof_buf + parameter. + (remote_target::getpkt_or_notif_sane_1) + (remote_target::getpkt_sane) + (remote_target::getpkt_or_notif_sane): Likewise. + (class remote_target) <putpkt>: New overload. + (remote_target::read_frame): Change type of "buf_p". Remove + sizeof_p parameter. + (packet_ok): New overload. + (packet_check_result): New overload. + Update all uses. + +2019-01-14 Tom Tromey <tom@tromey.com> + + * remote-notif.c (handle_notification, remote_notif_ack) + (remote_notif_parse): Make "buf" const. + * remote-notif.h (struct notif_client) <parse, ack>: Make "buf" + const. + (remote_notif_parse, remote_notif_ack, handle_notification): + Likewise. + * remote.c (remote_notif_stop_parse): Make "buf" const. + (remote_target::remote_parse_stop_reply): Make "buf" const. + (remote_notif_stop_ack): Make "buf" const. + +2019-01-14 Tom Tromey <tom@tromey.com> + + * remote.c (remote_console_output): Make parameter const. + +2019-01-14 Tom Tromey <tom@tromey.com> + + * target-debug.h (target_debug_print_signals): Constify. + * nto-procfs.c (nto_procfs_target::pass_signals): Update. + * procfs.c (procfs_target::pass_signals): Update. + * linux-nat.c (linux_nat_target::pass_signals): Update. + * linux-nat.h (class linux_nat_target) <pass_signals>: Update. + * target-delegates.c: Rebuild. + * remote.c (remote_target::program_signals): Update. + (remote_target::pass_signals): Update. + * target.c (target_pass_signals): Constify argument. + (target_program_signals): Likewise. + * target.h (struct target_ops) <pass_signals, program_signals>: + Constify argument. + (target_pass_signals, target_program_signals): Constify argument. + +2019-01-14 Tom Tromey <tom@tromey.com> + + PR tui/28819: + * tui/tui-io.c (gdb_wgetch): Print \r when needed. + +2019-01-14 Pedro Franco de Carvalho <pedromfc@linux.ibm.com> + + * ppc-tdep.h (struct gdbarch_tdep) <ppc_v0_alias_regnum>: New + field. + * rs6000-tdep.c: Include reggroups.h. + (IS_V_ALIAS_PSEUDOREG): Define. + (rs6000_register_name): Return names for the "vX" aliases. + (rs6000_pseudo_register_type): Return type for the "vX" aliases. + (rs6000_pseudo_register_reggroup_p): Restore. Handle "vX" + aliases. Call default_register_reggroup_p for all other + pseudo-registers. + (v_alias_pseudo_register_read, v_alias_pseudo_register_write): + New functions. + (rs6000_pseudo_register_read, rs6000_pseudo_register_write): + Handle "vX" aliases. + (v_alias_pseudo_register_collect): New function. + (rs6000_ax_pseudo_register_collect): Handle "vX" aliases. + (rs6000_gdbarch_init): Initialize "vX" aliases as + pseudo-registers. Restore registration of + rs6000_pseudo_register_reggroup_p with + set_tdesc_pseudo_register_reggroup_p. + +2019-01-13 Max Filippov <jcmvbkbc@gmail.com> + + * xtensa-linux-tdep.c (xtensa_linux_init_abi): Update + tdep->num_pseudo_regs. Add calls to set_gdbarch_num_regs and + set_gdbarch_num_pseudo_regs. + +2019-01-12 Philippe Waroquiers <philippe.waroquiers@skynet.be> + + * cli/cli-style.h (class cli_style_option): <add_setshow_commands> + Remove arg prefixname, add do_set and do_show. + Add member functions set_list and show_list. + * cli/cli-style.c (class cli_style_option): Update accordingly. + (style_set_list): Move to file scope. + (style_show_list): Likewise. + (set_style): Call help_list. + (show_style): Call cmd_show_list. + (_initialize_cli_style): New macro STYLE_ADD_SETSHOW_COMMANDS. + Update to use the new macro. + +2019-10-12 Joel Brobecker <brobecker@adacore.com> + + * ada-lang.c (_initialize_ada_language): Expand the help text + for the "catch exception" command. + +2019-01-12 Philippe Waroquiers <philippe.waroquiers@skynet.be> + + * symtab.c (matching_obj_sections): Initialize obj, + declare it closer to its usage. + +2019-01-10 Tom Tromey <tom@tromey.com> + + * thread-iter.h (inf_threads_iterator): Use next_iterator. + (basic_inf_threads_range): Remove. + (inf_threads_range, inf_non_exited_threads_range) + (safe_inf_threads_range): Use next_adapter. + +2019-01-10 Keith Seitz <keiths@redhat.com> + + PR gdb/23712 + PR symtab/23010 + * dwarf2read.c (dw2_add_symbol_to_list): Remove. + (fixup_go_packaging, new_symbol): Use add_symbol_to_list. + +2019-01-10 Keith Seitz <keiths@redhat.com> + + PR gdb/23712 + PR symtab/23010 + * dictionary.c (pending_to_vector): Remove. + (dict_create_hashed_1, dict_create_linear_1, dict_add_pending_1): + Remove _1 suffix, replacing functions of the same name. Update + all callers. + (dict_create_hashed, dict_create_hashed_expandable) + (dict_create_linear, dict_create_linear_expandable, dict_free) + (dict_add_symbol, dict_add_pending, dict_size, dict_empty): + Make functions static. + +2019-01-10 Keith Seitz <keiths@redhat.com> + + PR gdb/23712 + PR symtab/23010 + * dictionary.h (struct dictionary): Replace declaration with + multidictionary. + (dict_create_hashed, dict_create_hashed_expandable) + (dict_create_linear, dict_create_linear_expandable) + (dict_free, dict_add_symbol, dict_add_pending, dict_empty) + (dict_iterator_first, dict_iterator_next, dict_iter_match_first) + (dict_iter_match_next, dict_size): Rename to "mdict_" versions + taking multidictionary argument. + [ALL_DICT_SYMBOLS]: Update for multidictionary. + * block.h (struct block) <dict>: Change to multidictionary + and rename `multidict'. + * block.c, buildsym.c, jit.c, mdebugread.c, objfiles.c, + symmisc.c: Update all dictionary references to multidictionary. + +2019-01-10 Keith Seitz <keiths@redhat.com> + + PR gdb/23712 + PR symtab/23010 + * dictionary.c: Include unordered_map. + (pending_to_vector): New function. + (dict_create_hashed_1, dict_create_linear_1, dict_add_pending_1): + Rewrite the non-"_1" functions to take vector instead + of linked list. + (dict_create_hashed, dict_create_linear, dict_add_pending): Use the + "new" _1 versions of the same name. + (multidictionary): Define. + (std::hash<enum language): New definition. + (collate_pending_symbols_by_language, mdict_create_hashed) + (mdict_create_hashed_expandable, mdict_create_linear) + (mdict_create_linear_expandable, mdict_free) + (find_language_dictionary, create_new_language_dictionary) + (mdict_add_symbol, mdict_add_pending, mdict_iterator_first) + (mdict_iterator_next, mdict_iter_match_first, mdict_iter_match_next) + (mdict_size, mdict_empty): New functions. + * dictionary.h (mdict_iterator): Define. + +2019-01-10 Pedro Alves <palves@redhat.com> + + * breakpoint.c (read_uploaded_action) + (create_tracepoint_from_upload): Adjust to use + gdb::unique_xmalloc_ptr. + * ctf.c (ctf_write_uploaded_tp): + (SET_ARRAY_FIELD): Use emplace_back. + (SET_STRING_FIELD): Adjust to use gdb::unique_xmalloc_ptr. + * tracefile-tfile.c (tfile_write_uploaded_tp): + * tracepoint.c (parse_tracepoint_definition): Adjust to use + gdb::unique_xmalloc_ptr. + * tracepoint.h (struct uploaded_tp) <cond, actions, step_actions, + at_string, cond_string, cmd_strings>: Replace char pointers + with gdb::unique_xmalloc_ptr. + +2019-01-10 Pedro Alves <palves@redhat.com> + + * solib-target.c (library_list_start_library): Don't xstrdup name. + +2019-01-10 Pedro Alves <palves@redhat.com> + + * mdebugread.c (parse_partial_symbols): Use + gdb::unique_xmalloc_ptr to manage heap-allocated 'stabsstring'. + +2019-01-10 Andrew Burgess <andrew.burgess@embecosm.com> + + * linux-fork.c (scoped_switch_fork_info) + <~scoped_switch_fork_info>: Fix incorrect variable name. + +2019-01-10 Andrew Burgess <andrew.burgess@embecosm.com> + + * linux-fork.c (scoped_switch_fork_info) + <scoped_switch_fork_info>: Make explicit. + <~scoped_switch_fork_info>: Wrap core in TRY/CATCH. + +2019-01-10 Tom Tromey <tom@tromey.com> + + * objfiles.h (objfile::reset_psymtabs): Update. + * objfiles.c (objfile::objfile): Update. + * psymtab.h (psymtab_storage::obstack): Update. + (psymtab_storage::m_obstack): Use gdb::optional. + (class psymtab_storage): Update comment. Remove objfile + parameter. + * psymtab.c (psymtab_storage::psymtab_storage): Update. + +2019-01-10 Tom Tromey <tom@tromey.com> + + * psymtab.h (psymtab_storage::allocate_psymtab): New method. + <free_psymtabs>: Now private. + * psymtab.c (psymtab_storage::allocate_psymtab): Implement. + (allocate_psymtab): Use new method. + +2019-01-10 Tom Tromey <tom@tromey.com> + + * xcoffread.c (xcoff_end_psymtab): Use allocate_dependencies. + * psymtab.h (psymtab_storage::allocate_dependencies): New method. + * mdebugread.c (parse_partial_symbols): Use + allocate_dependencies. + * dwarf2read.c (dwarf2_create_include_psymtab): Use + allocate_dependencies. + (process_psymtab_comp_unit_reader) + (build_type_psymtab_dependencies): Likewise. + * dbxread.c (dbx_end_psymtab): Use allocate_dependencies. + +2019-01-10 Tom Tromey <tom@tromey.com> + + * psymtab.c (add_psymbol_to_bcache): Pass psymtab obstack to + PSYMBOL_SET_LANGUAGE. + (allocate_psymtab): Allocate psymtab on the psymtab obstack. + +2019-01-10 Tom Tromey <tom@tromey.com> + + * psymtab.h (psymtab_storage::obstack): New method. + <m_obstack>: Rename from obstack; now private. + * psymtab.c (psymtab_storage): Update. + * dwarf2read.c (create_addrmap_from_index) + (create_addrmap_from_aranges, dwarf2_build_psymtabs_hard): + Update. + +2019-01-10 Tom Tromey <tom@tromey.com> + + * symfile.c (reread_symbols): Call objfile->reset_psymtabs. + * objfiles.h (objfile::reset_psymtabs): New method. + +2019-01-10 Tom Tromey <tom@tromey.com> + + * symmisc.c (print_symbol_bcache_statistics): Update. + (print_objfile_statistics): Update. + * symfile.c (reread_symbols): Update. + * psymtab.h (class psymtab_storage): New. + * psymtab.c (psymtab_storage): New constructor. + (~psymtab_storage): New destructor. + (require_partial_symbols): Update. + (ALL_OBJFILE_PSYMTABS_REQUIRED): Rewrite. + (find_pc_sect_psymtab, find_pc_sect_psymbol) + (match_partial_symbol, lookup_partial_symbol, dump_psymtab) + (psym_dump, recursively_search_psymtabs, psym_has_symbols) + (psym_find_compunit_symtab_by_address, sort_pst_symbols) + (start_psymtab_common, end_psymtab_common) + (add_psymbol_to_bcache, add_psymbol_to_list, init_psymbol_list) + (allocate_psymtab): Update. + (psymtab_storage::discard_psymtab): Rename from discard_psymtab. + Update. + (dump_psymtab_addrmap, maintenance_print_psymbols) + (maintenance_check_psymtabs): Update. + (class objfile_psymtabs): Move to objfiles.h. + * psympriv.h (discard_psymtab): Now inline. + (psymtab_discarder::psymtab_discarder): Update. + (psymtab_discarder::~psymtab_discarder): Update. + (ALL_OBJFILE_PSYMTABS): Rewrite. + * objfiles.h (struct objfile) <psymtabs, psymtabs_addrmap, + free_psymtabs, psymbol_cache, global_psymbols, static_psymbols>: + Remove fields. + <partial_symtabs>: New field. + (class objfile_psymtabs): Move from psymtab.h. Update. + * objfiles.c (objfile::objfile): Initialize partial_symtabs, not + psymbol_cache. + (objfile::~objfile): Don't destroy psymbol_cache. + * mdebugread.c (parse_partial_symbols): Update. + * dwarf2read.c (create_addrmap_from_index) + (create_addrmap_from_aranges, dw2_find_pc_sect_compunit_symtab) + (process_psymtab_comp_unit_reader, dwarf2_build_psymtabs_hard) + (add_partial_subprogram, dwarf2_ranges_read): Update. + * dwarf-index-write.c (write_address_map) + (write_one_signatured_type, recursively_write_psymbols) + (class debug_names, class debug_names, write_psymtabs_to_index): + Update. + +2019-01-10 Tom Tromey <tom@tromey.com> + + * symtab.h (SYMBOL_SET_NAMES): Update. + (symbol_set_names): Update. + (MSYMBOL_SET_NAMES): Update. + * symtab.c (symbol_set_names): Change argument to be an + objfile_per_bfd_storage. + * psymtab.c (add_psymbol_to_bcache): Update. + * psympriv.h (PSYMBOL_SET_NAMES): Take per_bfd argument. + +2019-01-10 Tom Tromey <tom@tromey.com> + + * symtab.c (create_demangled_names_hash): Change argument to be an + objfile_per_bfd_storage. + (symbol_set_names): Update. + +2019-01-10 Tom Tromey <tom@tromey.com> + + * xcoffread.c (xcoff_initial_scan): Unconditionally call + init_psymbol_list. + * psymtab.c (init_psymbol_list): Do nothing if already called. + * psympriv.h (init_psymbol_list): Add comment. + * dwarf2read.c (dwarf2_build_psymtabs): Unconditionally call + init_psymbol_list. + * dbxread.c (dbx_symfile_read): Unconditionally call + init_psymbol_list. + +2019-01-10 Tom Tromey <tom@tromey.com> + + * xcoffread.c (scan_xcoff_symtab): Update. + * psymtab.c (add_psymbol_to_list): Replace "list" parameter with + "where". + * mdebugread.c (parse_partial_symbols) + (handle_psymbol_enumerators): Update. + * dwarf2read.c (add_partial_symbol, load_partial_dies): Update. + * dbxread.c (read_dbx_symtab): Update. + * psympriv.h (psymbol_placement): New enum. + (add_psymbol_to_list): Update. + +2019-01-10 Tom Tromey <tom@tromey.com> + + * xcoffread.c (xcoff_start_psymtab): Remove global_psymbols and + static_psymbols parameters. + (scan_xcoff_symtab): Update. + * psymtab.c (start_psymtab_common): Remove global_psymbols and + static_psymbols parameters. + * psympriv.h (start_psymtab_common): Update. + * mdebugread.c (parse_partial_symbols): Update. + * dwarf2read.c (create_partial_symtab): Update. + * dbxread.c (read_dbx_symtab): Update. + (start_psymtab): Remove global_psymbols and static_psymbols + parameters. + +2019-01-10 Tom Tromey <tom@tromey.com> + + * xcoffread.c (xcoff_end_psymtab): Remove some initializations. + * psymtab.c (allocate_psymtab): Add comment. + * psympriv.h (allocate_psymtab): Add comment. + * dwarf2read.c (dwarf2_create_include_psymtab): Remove some + initializations. + * dbxread.c (dbx_end_psymtab): Remove some initializations. + +2019-01-10 Tom Tromey <tom@tromey.com> + + * symfile.h (mdebug_build_psymtabs, elfmdebug_build_psymtabs): + Don't declare. + * mipsread.c: Include mdebugread.h. + * mdebugread.h (mdebug_build_psymtabs, elfmdebug_build_psymtabs): + Declare. + * elfread.c: Include mdebugread.h. + +2019-01-09 Tom Tromey <tom@tromey.com> + + * dbxread.c (dbx_end_psymtab): Use objfile_psymtabs. + * mdebugread.c (parse_partial_symbols): Use objfile_psymtabs. + * psymtab.c (ALL_OBJFILE_PSYMTABS_REQUIRED): Remove. + (psym_map_symtabs_matching_filename, find_pc_sect_psymtab) + (psym_lookup_symbol, psym_find_last_source_symtab) + (psym_forget_cached_source_info, psym_print_stats) + (psym_expand_symtabs_for_function, psym_expand_all_symtabs) + (psym_expand_symtabs_with_fullname, psym_map_symbol_filenames) + (psym_map_matching_symbols, psym_expand_symtabs_matching) + (psym_find_compunit_symtab_by_address) + (maintenance_print_psymbols, maintenance_info_psymtabs) + (maintenance_check_psymtabs): Use ranged for. + * psymtab.h (class objfile_psymtabs): New. + (require_partial_symbols): Return objfile_psymtabs. + * psympriv.h (ALL_OBJFILE_PSYMTABS): Remove. + +2019-01-09 Tom Tromey <tom@tromey.com> + + * symfile.c (overlay_invalidate_all, find_pc_overlay) + (find_pc_mapped_section, list_overlays_command) + (map_overlay_command, unmap_overlay_command) + (simple_overlay_update): Use all_objfiles. + * spu-tdep.c (spu_overlay_update): Use all_objfiles. + * printcmd.c (info_symbol_command): Use all_objfiles. + * objfiles.h (ALL_OBJSECTIONS): Remove. + * maint.c (maintenance_translate_address): Use all_objfiles. + * gcore.c (gcore_create_callback): Use all_objfiles. + (objfile_find_memory_regions): Likewise. + +2019-01-09 Tom Tromey <tom@tromey.com> + + * symtab.c (find_line_symtab, info_sources_command) + (make_source_files_completion_list): Use objfile_compunits. + * source.c (select_source_symtab): Use objfile_compunits. + * objfiles.h (struct objfile): Update comment. + (ALL_OBJFILES): Remove. + (ALL_FILETABS): Remove. + * mi/mi-cmd-file.c (mi_cmd_file_list_exec_source_files): Use + objfile_compunits. + +2019-01-09 Tom Tromey <tom@tromey.com> + + * symmisc.c (print_objfile_statistics, dump_objfile) + (maintenance_print_symbols): Use compunit_filetabs. + * source.c (forget_cached_source_info_for_objfile): Use + compunit_filetabs. + * objfiles.h (ALL_OBJFILE_FILETABS): Remove. + (ALL_FILETABS): Use compunit_filetabs. + * objfiles.c (objfile_relocate1): Use compunit_filetabs. + * coffread.c (coff_symtab_read): Use compunit_filetabs. + +2019-01-09 Tom Tromey <tom@tromey.com> + + * symtab.h (ALL_COMPUNIT_FILETABS): Remove. + (compunit_filetabs): New. + * symtab.c (iterate_over_some_symtabs, find_pc_sect_line): Use + compunit_filetabs. + (info_sources_command, make_source_files_completion_list): Remove + declaration. + * symmisc.c (print_objfile_statistics, dump_objfile) + (maintenance_print_symbols): Remove declaration. + (maintenance_info_symtabs): Use compunit_filetabs. + (maintenance_info_line_tables): Likewise. + * source.c (select_source_symtab): Change local variable name. + (forget_cached_source_info_for_objfile): Remove declaration. + * objfiles.h (ALL_OBJFILE_FILETABS): Use compunit_filetabs. + * objfiles.c (objfile_relocate1): Remove declaration. + * mi/mi-cmd-file.c (mi_cmd_file_list_exec_source_files): Remove + declaration. + * maint.c (count_symtabs_and_blocks): Use compunit_filetabs. + * coffread.c (coff_symtab_read): Remove declaration. + * buildsym.c (buildsym_compunit::end_symtab_with_blockvector): Use + compunit_filetabs. + +2019-01-09 Tom Tromey <tom@tromey.com> + + * symtab.c (lookup_objfile_from_block) + (find_pc_sect_compunit_symtab, search_symbols) + (default_collect_symbol_completion_matches_break_on): Use + objfile_compunits. + * objfiles.h (ALL_COMPUNITS): Remove. + * maint.c (count_symtabs_and_blocks): Use objfile_compunits. + * cp-support.c (add_symbol_overload_list_qualified): Use + objfile_compunits. + * ada-lang.c (ada_collect_symbol_completion_matches) + (ada_add_global_exceptions): Use objfile_compunits. + +2019-01-09 Tom Tromey <tom@tromey.com> + + * source.c (select_source_symtab) + (forget_cached_source_info_for_objfile): Remove declaration. + * mi/mi-cmd-file.c (mi_cmd_file_list_exec_source_files): Remove + declaration. + * maint.c (count_symtabs_and_blocks): Remove declaration. + * cp-support.c (add_symbol_overload_list_qualified): Remove + declaration. + * coffread.c (coff_symtab_read): Remove declaration. + * symtab.c (lookup_symbol_in_objfile_symtabs) + (basic_lookup_transparent_type_1): Use objfile_compunits. + (lookup_objfile_from_block, find_pc_sect_compunit_symtab) + (info_sources_command, search_symbols) + (default_collect_symbol_completion_matches_break_on) + (make_source_files_completion_list): Remove declaration. + * ada-lang.c (add_nonlocal_symbols): Use objfile_compunits. + (ada_collect_symbol_completion_matches) + (ada_add_global_exceptions): Remove declaration. + * linespec.c (iterate_over_all_matching_symtabs): Use + objfile_compunits. + * objfiles.h (ALL_OBJFILE_COMPUNITS): Remove. + (class objfile_compunits): New. + (ALL_COMPUNITS): Use objfile_compunits. + * symmisc.c (print_objfile_statistics, maintenance_info_symtabs) + (maintenance_check_symtabs, maintenance_info_line_tables): Use + objfile_compunits. + * objfiles.c (objfile_relocate1): Use objfile_compunits. + +2019-01-09 Tom Tromey <tom@tromey.com> + + * symtab.c (search_symbols) + (default_collect_symbol_completion_matches_break_on): Use + objfile_msymbols. + * ada-lang.c (ada_lookup_simple_minsym) + (ada_collect_symbol_completion_matches): Use objfile_msymbols. + * minsyms.c (find_solib_trampoline_target): Use objfile_msymbols. + * hppa-tdep.c (hppa_lookup_stub_minimal_symbol): Use + objfile_msymbols. + * coffread.c (coff_symfile_read): Use objfile_msymbols. + * symmisc.c (dump_msymbols): Use objfile_msymbols. + * objc-lang.c (find_methods): Use objfile_msymbols. + (info_selectors_command, info_classes_command): Likewise. + * stabsread.c (scan_file_globals): Use objfile_msymbols. + * objfiles.h (class objfile_msymbols): New. + (ALL_OBJFILE_MSYMBOLS): Remove. + (ALL_MSYMBOLS): Remove. + +2019-01-09 Tom Tromey <tom@tromey.com> + + * common/next-iterator.h (next_adapter): Add Iterator template + parameter. + * objfiles.h (ALL_OBJFILES_SAFE): Remove. + (class all_objfiles_safe): New. + * jit.c (jit_inferior_exit_hook): Use all_objfiles_safe. + * objfiles.c (put_objfile_before): Update comment. + (add_separate_debug_objfile): Likewise. + (free_all_objfiles): Use all_objfiles_safe. + (objfile_purge_solibs): Likewise. + +2019-01-09 Tom Tromey <tom@tromey.com> + + * symtab.c (iterate_over_symtabs, matching_obj_sections) + (expand_symtab_containing_pc, lookup_static_symbol) + (basic_lookup_transparent_type, find_pc_sect_compunit_symtab) + (find_symbol_at_address, find_line_symtab, find_main_name): Use + all_objfiles. + * probe.c (find_probe_by_pc, collect_probes): Use all_objfiles. + * breakpoint.c (create_overlay_event_breakpoint) + (create_longjmp_master_breakpoint) + (create_std_terminate_master_breakpoint) + (create_exception_master_breakpoint): Use all_objfiles. + * linux-thread-db.c (try_thread_db_load_from_pdir) + (has_libpthread): Use all_objfiles. + * ada-lang.c (add_nonlocal_symbols): Use all_objfiles. + * linespec.c (iterate_over_all_matching_symtabs) + (search_minsyms_for_name): Use all_objfiles. + * maint.c (maintenance_info_sections): Use all_objfiles. + * main.c (captured_main_1): Use all_objfiles. + * spu-tdep.c (spu_objfile_from_frame): Use all_objfiles. + * guile/scm-objfile.c (gdbscm_objfiles): Use all_objfiles. + * guile/scm-pretty-print.c + (ppscm_find_pretty_printer_from_objfiles): Use all_objfiles. + * solib-spu.c (append_ocl_sos): Use all_objfiles. + * symmisc.c (maintenance_print_symbols): Use all_objfiles. + (maintenance_print_msymbols): Use all_objfiles. + * source.c (select_source_symtab): Use all_objfiles. + * jit.c (jit_find_objf_with_entry_addr): Use all_objfiles. + * symfile.c (remove_symbol_file_command) + (expand_symtabs_matching, map_symbol_filenames): Use + all_objfiles. + * ppc-linux-tdep.c (ppc_linux_spe_context_inferior_created): Use + all_objfiles. + * dwarf2-frame.c (dwarf2_frame_find_fde): Use all_objfiles. + * objc-lang.c (find_methods): Use all_objfiles. + * objfiles.c (have_partial_symbols, have_full_symbols) + (have_minimal_symbols, qsort_cmp) + (default_iterate_over_objfiles_in_search_order): Use + all_objfiles. + * hppa-tdep.c (find_unwind_entry): Use all_objfiles. + * psymtab.c (maintenance_print_psymbols): Use all_objfiles. + (maintenance_check_psymtabs): Use all_objfiles. + (ALL_PSYMTABS): Remove. + * compile/compile-object-run.c (do_module_cleanup): Use + all_objfiles. + * blockframe.c (find_pc_partial_function): Use all_objfiles. + * cp-support.c (add_symbol_overload_list_qualified): Use + all_objfiles. + * windows-tdep.c (windows_iterate_over_objfiles_in_search_order): + Use all_objfiles. + * dwarf-index-write.c (save_gdb_index_command): Use all_objfiles. + * python/py-xmethods.c (gdbpy_get_matching_xmethod_workers): Use + all_objfiles. + * python/py-objfile.c (objfpy_lookup_objfile_by_name) + (objfpy_lookup_objfile_by_build_id): Use all_objfiles. + * python/py-prettyprint.c (find_pretty_printer_from_objfiles): + Uses all_objfiles. + * solib.c (solib_read_symbols): Use all_objfiles + +2019-01-09 Tom Tromey <tom@tromey.com> + + * probe.c (parse_probes_in_pspace): Use all_objfiles. + * guile/scm-progspace.c (gdbscm_progspace_objfiles): Use + all_objfiles. + * objfiles.h (ALL_PSPACE_OBJFILES): Remove. + * symmisc.c (print_symbol_bcache_statistics) + (print_objfile_statistics, maintenance_print_objfiles) + (maintenance_info_symtabs, maintenance_check_symtabs) + (maintenance_expand_symtabs, maintenance_info_line_tables): Use + all_objfiles. + * source.c (forget_cached_source_info): Use all_objfiles. + * symfile-debug.c (set_debug_symfile): Use all_objfiles. + * elfread.c (elf_gnu_ifunc_resolve_by_cache) + (elf_gnu_ifunc_resolve_by_got): Use all_objfiles. + * objfiles.c (update_section_map): Use all_objfiles. + (shared_objfile_contains_address_p): Likewise. + * psymtab.c (maintenance_info_psymtabs): Use all_objfiles. + * python/py-progspace.c (pspy_get_objfiles): Use all_objfiles. + +2019-01-09 Tom Tromey <tom@tromey.com> + + * common/next-iterator.h: New file. + * objfiles.h (class all_objfiles): New. + (struct objfile_iterator): New. + +2019-01-09 Philippe Waroquiers <philippe.waroquiers@skynet.be> + + * NEWS: Move the description of the changed "frame", "select-frame", + and "info frame" commands to the Changed commands section. + +2019-01-09 Simon Marchi <simon.marchi@ericsson.com> + + * gdbtypes.c (check_stub_method_group): Remove handling of old + mangling schemes. + * linespec.c (find_methods): Likewise. + * stabsread.c (read_member_functions): Likewise. + * valops.c (search_struct_method): Likewise. + (value_struct_elt_for_reference): Likewise. + * NEWS: Mention this change. + +2019-01-09 Andrew Burgess <andrew.burgess@embecosm.com> + + * cli/cli-cmds.c (list_command): Pass a source_lines_range to + print_source_lines. + * source.c (print_source_lines_base): Update line number check. + (print_source_lines): New function. + (source_lines_range::source_lines_range): New function. + * source.h (class source_lines_range): New class. + (print_source_lines): New declaration. + +2019-01-09 Philippe Waroquiers <philippe.waroquiers@skynet.be> + + * linespec.c (linespec_state_destructor): Free self->canonical_names. + +2019-01-08 Tom Tromey <tom@tromey.com> + Simon Marchi <simon.marchi@ericsson.com> + + PR gdb/24060 + * ada-exp.y (DOLLAR_VARIABLE): Rename from SPECIAL_VARIABLE. + * ada-lex.l (DOLLAR_VARIABLE): Likewise. + * c-exp.y (DOLLAR_VARIABLE): Rename from VARIABLE. + * f-exp.y (DOLLAR_VARIABLE): Likewise. + * m2-exp.y (DOLLAR_VARIABLE): Rename from INTERNAL_VAR. + * p-exp.y (DOLLAR_VARIABLE): Rename from VARIABLE. + +2019-01-08 Andrew Burgess <andrew.burgess@embecosm.com> + + * source.c (select_source_symtab): Move header comment to + declaration in source.h. + (forget_cached_source_info_for_objfile): Likewise. + (forget_cached_source_info): Likewise. + (identify_source_line): Likewise. + * source.h (identify_source_line): Move declaration from symtab.h + and add comment from source.c + (print_source_lines): Likewise. + (forget_cached_source_info_for_objfile): Likewise. + (forget_cached_source_info): Likewise. + (select_source_symtab): Likewise. + (enum print_source_lines_flag): Move definition from symtab.h. + * symtab.h (identify_source_line): Move declaration to source.h. + (print_source_lines): Likewise. + (forget_cached_source_info_for_objfile): Likewise. + (forget_cached_source_info): Likewise. + (select_source_symtab): Likewise. + (enum print_source_lines_flag): Move definition to source.h. + * tui/tui-hooks.c: Add 'source.h' include. + +2019-01-08 Andrew Burgess <andrew.burgess@embecosm.com> + + * source.c (print_source_lines_base): Handle requests to print + reverse line number sequences, and guard against empty lines + string. + +2019-01-08 Andrew Burgess <andrew.burgess@embecosm.com> + + * source.c (print_source_lines_base): Fix skip of '\r' if next + character is '\n'. + +2019-01-06 Tom Tromey <tom@tromey.com> + + * c-exp.y (struct c_parse_state) <macro_original_text, + expansion_obstack>: New member. + (macro_original_text, expansion_obstack): Remove globals. + (scan_macro_expansion, scanning_macro_expansion) + (finished_macro_expansion): Update. + (scan_macro_cleanup): Remove. + (yylex, c_parse): Update. + +2019-01-06 Tom Tromey <tom@tromey.com> + + * c-exp.y (struct c_parse_state) <strings>: New member. + (operator_stoken): Update. + +2019-01-06 Tom Tromey <tom@tromey.com> + + * parser-defs.h (type_ptr): Remove typedef. Don't declare VEC. + (union type_stack_elt) <typelist_val>: Now a pointer to + std::vector. + (type_stack_cleanup): Don't declare. + (push_typelist): Update. + * parse.c (pop_typelist): Return a std::vector. + (push_typelist): Take a std::vector. + (follow_types): Update. Do not free args. + (type_stack_cleanup): Remove. + * c-exp.y (struct c_parse_state): New. + (cpstate): New global. + (type_aggregate_p, exp, ptr_operator, parameter_typelist) + (nonempty_typelist): Update. + (func_mod): Create a new vector. + (c_parse): Create a c_parse_state. + (check_parameter_typelist): Do not delete params. + (function_method): Update. Do not delete type_list. + +2019-01-06 Tom Tromey <tom@tromey.com> + + PR gdb/28155: + * python/py-finishbreakpoint.c (bpfinishpy_init): Use + check_typedef. + * infcmd.c (finish_command_fsm_should_stop): Use check_typedef. + (print_return_value): Likewise. + +2019-01-05 Tom Tromey <tom@tromey.com> + + * contrib/cleanup_check.py: Remove. + * contrib/gcc-with-excheck: Remove. + * contrib/exsummary.py: Remove. + * contrib/excheck.py: Remove. + +2019-01-05 Joel Brobecker <brobecker@adacore.com> + + * thread.c (delete_thread_1): Add gdb_assert that THR is not + NULL. Initialize tpprev to NULL instead of assigning it + to NULL on the next statement. + * windows-nat.c (windows_delete_thread): Remove check for + main_thread_id before printing thread exit notifications. + (get_windows_debug_event) <EXIT_THREAD_DEBUG_EVENT>: + Remove thread ID check against main_thread_id. + <CREATE_PROCESS_DEBUG_EVENT>: Remove call to + windows_delete_thread. + <EXIT_PROCESS_DEBUG_EVENT>: Add call to windows_delete_thread. + +2019-01-04 Tom Tromey <tom@tromey.com> + + * compile/compile.c (_initialize_compile): Use upper case for + metasyntactic variables. + * symmisc.c (_initialize_symmisc): Use upper case for + metasyntactic variables. + * psymtab.c (_initialize_psymtab): Use upper case for + metasyntactic variables. + * demangle.c (demangle_command): Use upper case for metasyntactic + variables. + (_initialize_demangler): Likewise. + * ax-gdb.c (_initialize_ax_gdb): Use upper case for metasyntactic + variables. + +2019-01-03 Tom Tromey <tom@tromey.com> + + * tui/tui-source.c (tui_set_source_content): Use xstrdup. + +2019-01-03 Tom Tromey <tom@tromey.com> + + * python/py-symtab.c (salpy_str): Update. + (struct salpy_sal_object) <symtab>: Now a PyObject. + (salpy_dealloc): Update. + (del_objfile_sal): Use gdbpy_ref. + +2019-01-03 Tom Tromey <tom@tromey.com> + + * python/py-type.c (convert_field): Use new_reference. Return + gdbpy_ref. + (make_fielditem): Return gdbpy_ref. + (typy_fields): Update. + (typy_getitem): Update. + (field_name): Return gdbpy_ref. Use new_reference. + (typy_iterator_iternext): Update. + +2019-01-03 Tom Tromey <tom@tromey.com> + + * python/py-record.c (gdbpy_stop_recording): Use Py_RETURN_NONE. + +2019-01-03 Tom Tromey <tom@tromey.com> + + * python/py-value.c (valpy_dealloc): Use Py_XDECREF. + * python/py-type.c (typy_fields_items): Use gdbpy_ref. + * python/py-progspace.c (pspy_set_printers): Use gdbpy_ref. + (pspy_set_frame_filters, pspy_set_frame_unwinders) + (pspy_set_type_printers): Likewise. + * python/py-function.c (fnpy_init): Use gdbpy_ref. + * python/py-cmd.c (cmdpy_init): Use gdbpy_ref. + * python/py-objfile.c (objfpy_set_printers): Use gdbpy_ref. + (objfpy_set_frame_filters, objfpy_set_frame_unwinders) + (objfpy_set_type_printers): Likewise. + +2019-01-03 Tom Tromey <tom@tromey.com> + + * python/python.c (gdbpy_enter, ~gdbpy_enter): Update. + (gdbpy_print_stack): Use gdbpy_err_fetch. + * python/python-internal.h (class gdbpy_err_fetch): New class. + (class gdbpy_enter) <m_error_type, m_error_value, + m_error_traceback>: Remove. + <m_error>: New member. + (gdbpy_exception_to_string): Don't declare. + * python/py-varobj.c (py_varobj_iter_next): Use gdbpy_err_fetch. + * python/py-value.c (convert_value_from_python): Use + gdbpy_err_fetch. + * python/py-utils.c (gdbpy_err_fetch::to_string): Rename from + gdbpy_exception_to_string. + (gdbpy_handle_exception): Use gdbpy_err_fetch. + * python/py-prettyprint.c (print_stack_unless_memory_error): Use + gdbpy_err_fetch. + +2019-01-03 Andrew Burgess <andrew.burgess@embecosm.com> + + * linux-nat.c (delete_lwp_cleanup): Delete. + (struct lwp_deleter): New struct. + (lwp_info_up): New typedef. + (linux_nat_target::follow_fork): Delete cleanup, and make use of + lwp_info_up. + +2019-01-03 Andrew Burgess <andrew.burgess@embecosm.com> + + * linux-fork.c (class scoped_switch_fork_info): New class. + (inferior_call_waitpid): Update to use scoped_switch_fork_info. + +2019-01-03 Andrew Burgess <andrew.burgess@embecosm.com> + + * valops.c (find_overload_match): Remove use of null_cleanup, and + calls to do_cleanups. + +2019-01-03 Andrew Burgess <andrew.burgess@embecosm.com> + + * compile/compile-cplus-types.c + (compile_cplus_instance::decl_name): Handle changes to + cp_func_name. + * cp-support.c (cp_func_name): Update header comment, update + return type. + * cp-support.h (cp_func_name): Update return type in declaration. + * valops.c (find_overload_match): Move temp_func local to top + level of function and change its type. Use temp_func to hold and + delete temporary string obtained from cp_func_name. + +2019-01-03 Andrew Burgess <andrew.burgess@embecosm.com> + + * remote.c (remote_target::remote_check_symbols): Convert `msg` to + gdb::char_vector, remove cleanup, and update uses of `msg`. + +2019-01-03 Jim Wilson <jimw@sifive.com> + + * riscv-tdep.c (riscv_freg_feature): Drop s0 name from f8. + +2019-01-02 Tom Tromey <tom@tromey.com> + + * xml-tdesc.c (xml_cache): Hold a target_desc_up. + (tdesc_parse_xml): Remove cleanups. + * target-descriptions.h (make_cleanup_free_target_description): + Don't declare. + (target_desc_deleter): New struct. + (target_desc_up): New typedef. + * target-descriptions.c (target_desc_deleter::operator()): Rename + from free_target_description. + (make_cleanup_free_target_description): Remove. + +2019-01-02 Tom Tromey <tom@tromey.com> + + * linespec.c (struct linespec_parser): Rename from ls_parser. Add + constructor, destructor. + (linespec_parser): Remove typedef. + (~linespec_parser): Rename from linespec_parser_delete. + (linespec_lex_to_end, linespec_complete_label) + (linespec_complete): Update. + (decode_line_full): Remove cleanups. + (decode_line_1): Update. + +2019-01-02 Tom Tromey <tom@tromey.com> + + * python/python-internal.h (inferior_to_inferior_object): Change + return type. + * python/py-exitedevent.c (create_exited_event_object): Update. + * python/py-inferior.c (inferior_to_inferior_object): Return + gdbpy_ref. + (python_new_inferior, python_inferior_deleted) + (thread_to_thread_object, delete_thread_object) + (build_inferior_list, gdbpy_selected_inferior): Update. + * python/py-infthread.c (create_thread_object): Update. Also fail + if inferior_to_inferior_object fails. + +2019-01-02 Simon Marchi <simon.marchi@ericsson.com> + + * inferior.h (class inferior) <displaced_step_state>: New field. + * infrun.h (struct displaced_step_state): Move here from + infrun.c. Initialize fields, add constructor. + <inf>: Remove field. + <reset>: New method. + * infrun.c (struct displaced_step_inferior_state): Move to + infrun.h. + (displaced_step_inferior_states): Remove. + (get_displaced_stepping_state): Adust. + (displaced_step_in_progress_any_inferior): Adjust. + (displaced_step_in_progress_thread): Adjust. + (displaced_step_in_progress): Adjust. + (add_displaced_stepping_state): Remove. + (get_displaced_step_closure_by_addr): Adjust. + (remove_displaced_stepping_state): Remove. + (infrun_inferior_exit): Call displaced_step_state.reset. + (use_displaced_stepping): Don't check for NULL. + (displaced_step_prepare_throw): Call + get_displaced_stepping_state. + (displaced_step_fixup): Don't check for NULL. + (prepare_for_detach): Don't check for NULL. + +2019-01-02 Philippe Waroquiers <philippe.waroquiers@skynet.be> + + * infcall.c (call_function_by_hand_dummy): cleanup/destroy sm + in case of call that did not complete. + +2019-01-02 Andrey Utkin <autkin@undo.io> + + * symfile.c (find_separate_debug_file): Fix search of debug files for + remote debuggee. + +2019-01-02 Tom Tromey <tom@tromey.com> + + * python/py-inferior.c (gdbpy_initialize_inferior): Fix + indentation. + * python/py-frame.c (frapy_older): Remove cast. + (frapy_newer): Likewise. + * python/py-breakpoint.c (local_setattro): Remove cast. + * python/py-arch.c (archpy_name): Remove local variable. + * python/py-type.c (gdbpy_lookup_type): Remove cast. + +2019-01-02 Joel Brobecker <brobecker@adacore.com> + + * unittests/basic_string_view/element_access/char/empty.cc: + Fix year range in copyright header. + +2019-01-01 Andrew Burgess <andrew.burgess@embecosm.com> + + * arch/riscv.h (struct riscv_gdbarch_features) <hw_float_abi>: + Delete. + <operator==>: Update with for removed field. + <hash>: Likewise. + * riscv-tdep.h (struct gdbarch_tdep) <features>: Renamed to... + <isa_features>: ...this. + <abi_features>: New field. + (riscv_isa_flen): Update comment. + (riscv_abi_xlen): New declaration. + (riscv_abi_flen): New declaration. + * riscv-tdep.c (riscv_isa_xlen): Update to get answer from + isa_features. + (riscv_abi_xlen): New function. + (riscv_isa_flen): Update to get answer from isa_features. + (riscv_abi_flen): New function. + (riscv_has_fp_abi): Update to get answer from abi_features. + (riscv_call_info::riscv_call_info): Use abi xlen and flen, not isa + xlen and flen. + (riscv_call_info) <xlen, flen>: Update comment. + (riscv_call_arg_struct): Remove invalid assertions + (riscv_features_from_gdbarch_info): Update now hw_float_abi field + is removed. + (riscv_gdbarch_init): Gather isa features and abi features + separately, ensure both match on the gdbarch when reusing an old + gdbarch. Relax an error check to allow 32-bit abi float to run on + a target with 64-bit float hardware. + +2019-01-01 Philippe Waroquiers <philippe.waroquiers@skynet.be> + + * source.c (search_command_helper): Stop reverse search + when line 1 has been searched. + +2019-01-01 Philippe Waroquiers <philippe.waroquiers@skynet.be> + + * record-full.c (record_full_base_target::close): Rewrite + record_full_core_buf_list free logic. + +2019-01-01 Philippe Waroquiers <philippe.waroquiers@skynet.be> + + * break-catch-syscall.c (print_one_catch_syscall): xfree + the last text. + +2019-01-01 Joel Brobecker <brobecker@adacore.com> + + * top.c (print_gdb_version): Update Copyright year in version + message. + +2019-01-01 Joel Brobecker <brobecker@adacore.com> + + Update copyright year range in all GDB files. + +2019-01-01, 19 Joel Brobecker <brobecker@adacore.com> + + * config/djgpp/fnchange.lst: Add entry for gdb/ChangeLog-2018. + +For older changes see ChangeLog-2018. + +Local Variables: +mode: change-log +left-margin: 8 +fill-column: 74 +version-control: never +coding: utf-8 +End: + diff -Nru gdb-9.1/gdb/charset.c gdb-10.2/gdb/charset.c --- gdb-9.1/gdb/charset.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/charset.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Character set conversion support for GDB. - Copyright (C) 2001-2020 Free Software Foundation, Inc. + Copyright (C) 2001-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -818,7 +818,8 @@ { std::string iconv_dir = relocate_gdb_directory (ICONV_BIN, ICONV_BIN_RELOCATABLE); - iconv_program = concat (iconv_dir.c_str(), SLASH_STRING, "iconv", NULL); + iconv_program + = concat (iconv_dir.c_str(), SLASH_STRING, "iconv", (char *) NULL); } #else iconv_program = xstrdup ("iconv"); @@ -989,13 +990,14 @@ /* Not valid, free the allocated memory. */ xfree (result); /* No valid charset found, generate error here. */ - error (_("Unable to find a vaild charset for string conversions")); + error (_("Unable to find a valid charset for string conversions")); } #endif /* USE_INTERMEDIATE_ENCODING_FUNCTION */ +void _initialize_charset (); void -_initialize_charset (void) +_initialize_charset () { /* The first element is always "auto". */ charsets.charsets.push_back (xstrdup ("auto")); diff -Nru gdb-9.1/gdb/charset.h gdb-10.2/gdb/charset.h --- gdb-9.1/gdb/charset.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/charset.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Character set conversion support for GDB. - Copyright (C) 2001-2020 Free Software Foundation, Inc. + Copyright (C) 2001-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/charset-list.h gdb-10.2/gdb/charset-list.h --- gdb-9.1/gdb/charset-list.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/charset-list.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* List of character set names for GDB. - Copyright (C) 2009-2020 Free Software Foundation, Inc. + Copyright (C) 2009-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/c-lang.c gdb-10.2/gdb/c-lang.c --- gdb-9.1/gdb/c-lang.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/c-lang.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* C language support routines for GDB, the GNU debugger. - Copyright (C) 1992-2020 Free Software Foundation, Inc. + Copyright (C) 1992-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -37,6 +37,8 @@ #include "gdbcore.h" #include "gdbarch.h" +class compile_instance; + /* Given a C string type, STR_TYPE, return the corresponding target character set name. */ @@ -84,9 +86,9 @@ that would do the wrong thing. */ while (elttype) { - const char *name = TYPE_NAME (elttype); + const char *name = elttype->name (); - if (TYPE_CODE (elttype) == TYPE_CODE_CHAR || !name) + if (elttype->code () == TYPE_CODE_CHAR || !name) { result = C_CHAR; goto done; @@ -110,7 +112,7 @@ goto done; } - if (TYPE_CODE (elttype) != TYPE_CODE_TYPEDEF) + if (elttype->code () != TYPE_CODE_TYPEDEF) break; /* Call for side effects. */ @@ -250,23 +252,23 @@ if (element_type == NULL) goto error; - if (TYPE_CODE (type) == TYPE_CODE_ARRAY) + if (type->code () == TYPE_CODE_ARRAY) { /* If we know the size of the array, we can use it as a limit on the number of characters to be fetched. */ - if (TYPE_NFIELDS (type) == 1 - && TYPE_CODE (TYPE_FIELD_TYPE (type, 0)) == TYPE_CODE_RANGE) + if (type->num_fields () == 1 + && type->field (0).type ()->code () == TYPE_CODE_RANGE) { LONGEST low_bound, high_bound; - get_discrete_bounds (TYPE_FIELD_TYPE (type, 0), + get_discrete_bounds (type->field (0).type (), &low_bound, &high_bound); fetchlimit = high_bound - low_bound + 1; } else fetchlimit = UINT_MAX; } - else if (TYPE_CODE (type) == TYPE_CODE_PTR) + else if (type->code () == TYPE_CODE_PTR) fetchlimit = UINT_MAX; else /* We work only with arrays and pointers. */ @@ -292,7 +294,7 @@ avoids running off the end of the value's contents. */ if ((VALUE_LVAL (value) == not_lval || VALUE_LVAL (value) == lval_internalvar - || TYPE_CODE (type) == TYPE_CODE_ARRAY) + || type->code () == TYPE_CODE_ARRAY) && fetchlimit != UINT_MAX && (*length < 0 || *length <= fetchlimit)) { @@ -303,14 +305,14 @@ if (*length >= 0) i = *length; else - /* Otherwise, look for a null character. */ - for (i = 0; i < fetchlimit; i++) + /* Otherwise, look for a null character. */ + for (i = 0; i < fetchlimit; i++) if (extract_unsigned_integer (contents + i * width, width, byte_order) == 0) - break; + break; /* I is now either a user-defined length, the number of non-null - characters, or FETCHLIMIT. */ + characters, or FETCHLIMIT. */ *length = i * width; buffer->reset ((gdb_byte *) xmalloc (*length)); memcpy (buffer->get (), contents, *length); @@ -322,7 +324,7 @@ c_style_arrays is false, so we handle that specially here. */ CORE_ADDR addr; - if (TYPE_CODE (type) == TYPE_CODE_ARRAY) + if (type->code () == TYPE_CODE_ARRAY) { if (VALUE_LVAL (value) != lval_memory) error (_("Attempt to take address of value " @@ -629,13 +631,13 @@ /* If the caller expects an array of some integral type, satisfy them. If something odder is expected, rely on the caller to cast. */ - if (expect_type && TYPE_CODE (expect_type) == TYPE_CODE_ARRAY) + if (expect_type && expect_type->code () == TYPE_CODE_ARRAY) { struct type *element_type = check_typedef (TYPE_TARGET_TYPE (expect_type)); - if (TYPE_CODE (element_type) == TYPE_CODE_INT - || TYPE_CODE (element_type) == TYPE_CODE_CHAR) + if (element_type->code () == TYPE_CODE_INT + || element_type->code () == TYPE_CODE_CHAR) { type = element_type; satisfy_expected = 1; @@ -696,8 +698,8 @@ LONGEST low_bound, high_bound; int element_size = TYPE_LENGTH (type); - if (get_discrete_bounds (TYPE_INDEX_TYPE (expect_type), - &low_bound, &high_bound) < 0) + if (!get_discrete_bounds (expect_type->index_type (), + &low_bound, &high_bound)) { low_bound = 0; high_bound = (TYPE_LENGTH (expect_type) / element_size) - 1; @@ -725,30 +727,19 @@ return evaluate_subexp_standard (expect_type, exp, pos, noside); } -/* la_watch_location_expression for C. */ - -gdb::unique_xmalloc_ptr<char> -c_watch_location_expression (struct type *type, CORE_ADDR addr) -{ - type = check_typedef (TYPE_TARGET_TYPE (check_typedef (type))); - std::string name = type_to_string (type); - return gdb::unique_xmalloc_ptr<char> - (xstrprintf ("* (%s *) %s", name.c_str (), core_addr_to_string (addr))); -} - /* See c-lang.h. */ bool c_is_string_type_p (struct type *type) { type = check_typedef (type); - while (TYPE_CODE (type) == TYPE_CODE_REF) + while (type->code () == TYPE_CODE_REF) { type = TYPE_TARGET_TYPE (type); type = check_typedef (type); } - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_ARRAY: { @@ -885,7 +876,9 @@ ".c", NULL }; -extern const struct language_defn c_language_defn = +/* Constant data that describes the C language. */ + +extern const struct language_data c_language_data = { "c", /* Language name */ "C", @@ -896,44 +889,61 @@ macro_expansion_c, c_extensions, &exp_descriptor_c, - c_parse, - null_post_parser, - c_printchar, /* Print a character constant */ - c_printstr, /* Function to print string constant */ - c_emit_char, /* Print a single char */ - c_print_type, /* Print a type using appropriate syntax */ - c_print_typedef, /* Print a typedef using appropriate syntax */ - c_val_print, /* Print a value using appropriate syntax */ - c_value_print, /* Print a top-level value */ - default_read_var_value, /* la_read_var_value */ - NULL, /* Language specific skip_trampoline */ NULL, /* name_of_this */ true, /* la_store_sym_names_in_linkage_form_p */ - basic_lookup_symbol_nonlocal, /* lookup_symbol_nonlocal */ - basic_lookup_transparent_type,/* lookup_transparent_type */ - NULL, /* Language specific symbol demangler */ - NULL, - NULL, /* Language specific - class_name_from_physname */ c_op_print_tab, /* expression operators for printing */ 1, /* c-style arrays */ 0, /* String lower bound */ - default_word_break_characters, - default_collect_symbol_completion_matches, - c_language_arch_info, - default_print_array_index, - default_pass_by_reference, - c_watch_location_expression, - NULL, /* la_get_symbol_name_matcher */ - iterate_over_symbols, - default_search_name_hash, &c_varobj_ops, - c_get_compile_context, - c_compute_program, - c_is_string_type_p, "{...}" /* la_struct_too_deep_ellipsis */ }; +/* Class representing the C language. */ + +class c_language : public language_defn +{ +public: + c_language () + : language_defn (language_c, c_language_data) + { /* Nothing. */ } + + /* See language.h. */ + void language_arch_info (struct gdbarch *gdbarch, + struct language_arch_info *lai) const override + { + c_language_arch_info (gdbarch, lai); + } + + /* See language.h. */ + compile_instance *get_compile_instance () const override + { + return c_get_compile_context (); + } + + /* See language.h. */ + std::string compute_program (compile_instance *inst, + const char *input, + struct gdbarch *gdbarch, + const struct block *expr_block, + CORE_ADDR expr_pc) const override + { + return c_compute_program (inst, input, gdbarch, expr_block, expr_pc); + } + + /* See language.h. */ + + void print_type (struct type *type, const char *varstring, + struct ui_file *stream, int show, int level, + const struct type_print_options *flags) const override + { + c_print_type (type, varstring, stream, show, level, flags); + } +}; + +/* Single instance of the C language class. */ + +static c_language c_language_defn; + enum cplus_primitive_types { cplus_primitive_type_int, cplus_primitive_type_long, @@ -962,75 +972,14 @@ nr_cplus_primitive_types }; -static void -cplus_language_arch_info (struct gdbarch *gdbarch, - struct language_arch_info *lai) -{ - const struct builtin_type *builtin = builtin_type (gdbarch); - - lai->string_char_type = builtin->builtin_char; - lai->primitive_type_vector - = GDBARCH_OBSTACK_CALLOC (gdbarch, nr_cplus_primitive_types + 1, - struct type *); - lai->primitive_type_vector [cplus_primitive_type_int] - = builtin->builtin_int; - lai->primitive_type_vector [cplus_primitive_type_long] - = builtin->builtin_long; - lai->primitive_type_vector [cplus_primitive_type_short] - = builtin->builtin_short; - lai->primitive_type_vector [cplus_primitive_type_char] - = builtin->builtin_char; - lai->primitive_type_vector [cplus_primitive_type_float] - = builtin->builtin_float; - lai->primitive_type_vector [cplus_primitive_type_double] - = builtin->builtin_double; - lai->primitive_type_vector [cplus_primitive_type_void] - = builtin->builtin_void; - lai->primitive_type_vector [cplus_primitive_type_long_long] - = builtin->builtin_long_long; - lai->primitive_type_vector [cplus_primitive_type_signed_char] - = builtin->builtin_signed_char; - lai->primitive_type_vector [cplus_primitive_type_unsigned_char] - = builtin->builtin_unsigned_char; - lai->primitive_type_vector [cplus_primitive_type_unsigned_short] - = builtin->builtin_unsigned_short; - lai->primitive_type_vector [cplus_primitive_type_unsigned_int] - = builtin->builtin_unsigned_int; - lai->primitive_type_vector [cplus_primitive_type_unsigned_long] - = builtin->builtin_unsigned_long; - lai->primitive_type_vector [cplus_primitive_type_unsigned_long_long] - = builtin->builtin_unsigned_long_long; - lai->primitive_type_vector [cplus_primitive_type_long_double] - = builtin->builtin_long_double; - lai->primitive_type_vector [cplus_primitive_type_complex] - = builtin->builtin_complex; - lai->primitive_type_vector [cplus_primitive_type_double_complex] - = builtin->builtin_double_complex; - lai->primitive_type_vector [cplus_primitive_type_bool] - = builtin->builtin_bool; - lai->primitive_type_vector [cplus_primitive_type_decfloat] - = builtin->builtin_decfloat; - lai->primitive_type_vector [cplus_primitive_type_decdouble] - = builtin->builtin_decdouble; - lai->primitive_type_vector [cplus_primitive_type_declong] - = builtin->builtin_declong; - lai->primitive_type_vector [cplus_primitive_type_char16_t] - = builtin->builtin_char16; - lai->primitive_type_vector [cplus_primitive_type_char32_t] - = builtin->builtin_char32; - lai->primitive_type_vector [cplus_primitive_type_wchar_t] - = builtin->builtin_wchar; - - lai->bool_type_symbol = "bool"; - lai->bool_type_default = builtin->builtin_bool; -} - static const char *cplus_extensions[] = { ".C", ".cc", ".cp", ".cpp", ".cxx", ".c++", NULL }; -extern const struct language_defn cplus_language_defn = +/* Constant data that describes the C++ language. */ + +extern const struct language_data cplus_language_data = { "c++", /* Language name */ "C++", @@ -1041,50 +990,194 @@ macro_expansion_c, cplus_extensions, &exp_descriptor_c, - c_parse, - null_post_parser, - c_printchar, /* Print a character constant */ - c_printstr, /* Function to print string constant */ - c_emit_char, /* Print a single char */ - c_print_type, /* Print a type using appropriate syntax */ - c_print_typedef, /* Print a typedef using appropriate syntax */ - c_val_print, /* Print a value using appropriate syntax */ - c_value_print, /* Print a top-level value */ - default_read_var_value, /* la_read_var_value */ - cplus_skip_trampoline, /* Language specific skip_trampoline */ "this", /* name_of_this */ false, /* la_store_sym_names_in_linkage_form_p */ - cp_lookup_symbol_nonlocal, /* lookup_symbol_nonlocal */ - cp_lookup_transparent_type, /* lookup_transparent_type */ - gdb_demangle, /* Language specific symbol demangler */ - gdb_sniff_from_mangled_name, - cp_class_name_from_physname, /* Language specific - class_name_from_physname */ c_op_print_tab, /* expression operators for printing */ 1, /* c-style arrays */ 0, /* String lower bound */ - default_word_break_characters, - default_collect_symbol_completion_matches, - cplus_language_arch_info, - default_print_array_index, - cp_pass_by_reference, - c_watch_location_expression, - cp_get_symbol_name_matcher, - iterate_over_symbols, - cp_search_name_hash, &cplus_varobj_ops, - cplus_get_compile_context, - cplus_compute_program, - c_is_string_type_p, "{...}" /* la_struct_too_deep_ellipsis */ }; +/* A class for the C++ language. */ + +class cplus_language : public language_defn +{ +public: + cplus_language () + : language_defn (language_cplus, cplus_language_data) + { /* Nothing. */ } + + /* See language.h. */ + + struct language_pass_by_ref_info pass_by_reference_info + (struct type *type) const override + { + return cp_pass_by_reference (type); + } + + /* See language.h. */ + void language_arch_info (struct gdbarch *gdbarch, + struct language_arch_info *lai) const override + { + const struct builtin_type *builtin = builtin_type (gdbarch); + + lai->string_char_type = builtin->builtin_char; + lai->primitive_type_vector + = GDBARCH_OBSTACK_CALLOC (gdbarch, nr_cplus_primitive_types + 1, + struct type *); + lai->primitive_type_vector [cplus_primitive_type_int] + = builtin->builtin_int; + lai->primitive_type_vector [cplus_primitive_type_long] + = builtin->builtin_long; + lai->primitive_type_vector [cplus_primitive_type_short] + = builtin->builtin_short; + lai->primitive_type_vector [cplus_primitive_type_char] + = builtin->builtin_char; + lai->primitive_type_vector [cplus_primitive_type_float] + = builtin->builtin_float; + lai->primitive_type_vector [cplus_primitive_type_double] + = builtin->builtin_double; + lai->primitive_type_vector [cplus_primitive_type_void] + = builtin->builtin_void; + lai->primitive_type_vector [cplus_primitive_type_long_long] + = builtin->builtin_long_long; + lai->primitive_type_vector [cplus_primitive_type_signed_char] + = builtin->builtin_signed_char; + lai->primitive_type_vector [cplus_primitive_type_unsigned_char] + = builtin->builtin_unsigned_char; + lai->primitive_type_vector [cplus_primitive_type_unsigned_short] + = builtin->builtin_unsigned_short; + lai->primitive_type_vector [cplus_primitive_type_unsigned_int] + = builtin->builtin_unsigned_int; + lai->primitive_type_vector [cplus_primitive_type_unsigned_long] + = builtin->builtin_unsigned_long; + lai->primitive_type_vector [cplus_primitive_type_unsigned_long_long] + = builtin->builtin_unsigned_long_long; + lai->primitive_type_vector [cplus_primitive_type_long_double] + = builtin->builtin_long_double; + lai->primitive_type_vector [cplus_primitive_type_complex] + = builtin->builtin_complex; + lai->primitive_type_vector [cplus_primitive_type_double_complex] + = builtin->builtin_double_complex; + lai->primitive_type_vector [cplus_primitive_type_bool] + = builtin->builtin_bool; + lai->primitive_type_vector [cplus_primitive_type_decfloat] + = builtin->builtin_decfloat; + lai->primitive_type_vector [cplus_primitive_type_decdouble] + = builtin->builtin_decdouble; + lai->primitive_type_vector [cplus_primitive_type_declong] + = builtin->builtin_declong; + lai->primitive_type_vector [cplus_primitive_type_char16_t] + = builtin->builtin_char16; + lai->primitive_type_vector [cplus_primitive_type_char32_t] + = builtin->builtin_char32; + lai->primitive_type_vector [cplus_primitive_type_wchar_t] + = builtin->builtin_wchar; + + lai->bool_type_symbol = "bool"; + lai->bool_type_default = builtin->builtin_bool; + } + + /* See language.h. */ + struct type *lookup_transparent_type (const char *name) const override + { + return cp_lookup_transparent_type (name); + } + + /* See language.h. */ + compile_instance *get_compile_instance () const override + { + return cplus_get_compile_context (); + } + + /* See language.h. */ + std::string compute_program (compile_instance *inst, + const char *input, + struct gdbarch *gdbarch, + const struct block *expr_block, + CORE_ADDR expr_pc) const override + { + return cplus_compute_program (inst, input, gdbarch, expr_block, expr_pc); + } + + /* See language.h. */ + unsigned int search_name_hash (const char *name) const override + { + return cp_search_name_hash (name); + } + + /* See language.h. */ + bool sniff_from_mangled_name (const char *mangled, + char **demangled) const override + { + *demangled = gdb_demangle (mangled, DMGL_PARAMS | DMGL_ANSI); + return *demangled != NULL; + } + + /* See language.h. */ + + char *demangle (const char *mangled, int options) const override + { + return gdb_demangle (mangled, options); + } + + /* See language.h. */ + + void print_type (struct type *type, const char *varstring, + struct ui_file *stream, int show, int level, + const struct type_print_options *flags) const override + { + c_print_type (type, varstring, stream, show, level, flags); + } + + /* See language.h. */ + + CORE_ADDR skip_trampoline (struct frame_info *fi, + CORE_ADDR pc) const override + { + return cplus_skip_trampoline (fi, pc); + } + + /* See language.h. */ + + char *class_name_from_physname (const char *physname) const override + { + return cp_class_name_from_physname (physname); + } + + /* See language.h. */ + + struct block_symbol lookup_symbol_nonlocal + (const char *name, const struct block *block, + const domain_enum domain) const override + { + return cp_lookup_symbol_nonlocal (this, name, block, domain); + } + +protected: + + /* See language.h. */ + + symbol_name_matcher_ftype *get_symbol_name_matcher_inner + (const lookup_name_info &lookup_name) const override + { + return cp_get_symbol_name_matcher (lookup_name); + } +}; + +/* The single instance of the C++ language class. */ + +static cplus_language cplus_language_defn; + static const char *asm_extensions[] = { ".s", ".sx", ".S", NULL }; -extern const struct language_defn asm_language_defn = +/* Constant data that describes the ASM language. */ + +extern const struct language_data asm_language_data = { "asm", /* Language name */ "assembly", @@ -1095,50 +1188,52 @@ macro_expansion_c, asm_extensions, &exp_descriptor_c, - c_parse, - null_post_parser, - c_printchar, /* Print a character constant */ - c_printstr, /* Function to print string constant */ - c_emit_char, /* Print a single char */ - c_print_type, /* Print a type using appropriate syntax */ - c_print_typedef, /* Print a typedef using appropriate syntax */ - c_val_print, /* Print a value using appropriate syntax */ - c_value_print, /* Print a top-level value */ - default_read_var_value, /* la_read_var_value */ - NULL, /* Language specific skip_trampoline */ NULL, /* name_of_this */ true, /* la_store_sym_names_in_linkage_form_p */ - basic_lookup_symbol_nonlocal, /* lookup_symbol_nonlocal */ - basic_lookup_transparent_type,/* lookup_transparent_type */ - NULL, /* Language specific symbol demangler */ - NULL, - NULL, /* Language specific - class_name_from_physname */ c_op_print_tab, /* expression operators for printing */ 1, /* c-style arrays */ 0, /* String lower bound */ - default_word_break_characters, - default_collect_symbol_completion_matches, - c_language_arch_info, /* FIXME: la_language_arch_info. */ - default_print_array_index, - default_pass_by_reference, - c_watch_location_expression, - NULL, /* la_get_symbol_name_matcher */ - iterate_over_symbols, - default_search_name_hash, &default_varobj_ops, - NULL, - NULL, - c_is_string_type_p, "{...}" /* la_struct_too_deep_ellipsis */ }; +/* A class for the ASM language. */ + +class asm_language : public language_defn +{ +public: + asm_language () + : language_defn (language_asm, asm_language_data) + { /* Nothing. */ } + + /* See language.h. + + FIXME: Should this have its own arch info method? */ + void language_arch_info (struct gdbarch *gdbarch, + struct language_arch_info *lai) const override + { + c_language_arch_info (gdbarch, lai); + } + + /* See language.h. */ + + void print_type (struct type *type, const char *varstring, + struct ui_file *stream, int show, int level, + const struct type_print_options *flags) const override + { + c_print_type (type, varstring, stream, show, level, flags); + } +}; + +/* The single instance of the ASM language class. */ +static asm_language asm_language_defn; + /* The following language_defn does not represent a real language. It just provides a minimal support a-la-C that should allow users to do some simple operations when debugging applications that use a language currently not supported by GDB. */ -extern const struct language_defn minimal_language_defn = +extern const struct language_data minimal_language_data = { "minimal", /* Language name */ "Minimal", @@ -1149,40 +1244,40 @@ macro_expansion_c, NULL, &exp_descriptor_c, - c_parse, - null_post_parser, - c_printchar, /* Print a character constant */ - c_printstr, /* Function to print string constant */ - c_emit_char, /* Print a single char */ - c_print_type, /* Print a type using appropriate syntax */ - c_print_typedef, /* Print a typedef using appropriate syntax */ - c_val_print, /* Print a value using appropriate syntax */ - c_value_print, /* Print a top-level value */ - default_read_var_value, /* la_read_var_value */ - NULL, /* Language specific skip_trampoline */ NULL, /* name_of_this */ true, /* la_store_sym_names_in_linkage_form_p */ - basic_lookup_symbol_nonlocal, /* lookup_symbol_nonlocal */ - basic_lookup_transparent_type,/* lookup_transparent_type */ - NULL, /* Language specific symbol demangler */ - NULL, - NULL, /* Language specific - class_name_from_physname */ c_op_print_tab, /* expression operators for printing */ 1, /* c-style arrays */ 0, /* String lower bound */ - default_word_break_characters, - default_collect_symbol_completion_matches, - c_language_arch_info, - default_print_array_index, - default_pass_by_reference, - c_watch_location_expression, - NULL, /* la_get_symbol_name_matcher */ - iterate_over_symbols, - default_search_name_hash, &default_varobj_ops, - NULL, - NULL, - c_is_string_type_p, "{...}" /* la_struct_too_deep_ellipsis */ }; + +/* A class for the minimal language. */ + +class minimal_language : public language_defn +{ +public: + minimal_language () + : language_defn (language_minimal, minimal_language_data) + { /* Nothing. */ } + + /* See language.h. */ + void language_arch_info (struct gdbarch *gdbarch, + struct language_arch_info *lai) const override + { + c_language_arch_info (gdbarch, lai); + } + + /* See language.h. */ + + void print_type (struct type *type, const char *varstring, + struct ui_file *stream, int show, int level, + const struct type_print_options *flags) const override + { + c_print_type (type, varstring, stream, show, level, flags); + } +}; + +/* The single instance of the minimal language class. */ +static minimal_language minimal_language_defn; diff -Nru gdb-9.1/gdb/c-lang.h gdb-10.2/gdb/c-lang.h --- gdb-9.1/gdb/c-lang.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/c-lang.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* C language support definitions for GDB, the GNU debugger. - Copyright (C) 1992-2020 Free Software Foundation, Inc. + Copyright (C) 1992-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -81,11 +81,10 @@ struct symbol *, struct ui_file *); -extern void c_val_print (struct type *, - int, CORE_ADDR, - struct ui_file *, int, - struct value *, - const struct value_print_options *); +/* Implement la_value_print_inner for the C family of languages. */ + +extern void c_value_print_inner (struct value *, struct ui_file *, int, + const struct value_print_options *); extern void c_value_print (struct value *, struct ui_file *, const struct value_print_options *); @@ -117,9 +116,6 @@ extern const struct op_print c_op_print_tab[]; -extern gdb::unique_xmalloc_ptr<char> c_watch_location_expression - (struct type *type, CORE_ADDR addr); - /* These are in c-typeprint.c: */ extern void c_type_print_base (struct type *, struct ui_file *, @@ -130,20 +126,11 @@ extern void cp_print_class_member (const gdb_byte *, struct type *, struct ui_file *, const char *); -extern void cp_print_value_fields (struct type *, struct type *, - LONGEST, CORE_ADDR, +extern void cp_print_value_fields (struct value *, struct ui_file *, int, - struct value *, const struct value_print_options *, struct type **, int); -extern void cp_print_value_fields_rtti (struct type *, - const gdb_byte *, LONGEST, CORE_ADDR, - struct ui_file *, int, - struct value *, - const struct value_print_options *, - struct type **, int); - /* gcc-2.6 or later (when using -fvtable-thunks) emits a unique named type for a vtable entry. Some gdb code depends on that specific name. */ @@ -167,7 +154,7 @@ compiler is owned by the caller and must be freed using the destroy method. This function never returns NULL, but rather throws an exception on failure. This is suitable for use as the - la_get_compile_instance language method. */ + language_defn::get_compile_instance method. */ extern compile_instance *c_get_compile_context (void); @@ -175,14 +162,14 @@ compiler is owned by the caller and must be freed using the destroy method. This function never returns NULL, but rather throws an exception on failure. This is suitable for use as the - la_get_compile_instance language method. */ + language_defn::get_compile_instance method. */ extern compile_instance *cplus_get_compile_context (); /* This takes the user-supplied text and returns a new bit of code to compile. - This is used as the la_compute_program language method; see that + This is used as the compute_program language method; see that for a description of the arguments. */ extern std::string c_compute_program (compile_instance *inst, @@ -193,7 +180,7 @@ /* This takes the user-supplied text and returns a new bit of code to compile. - This is used as the la_compute_program language method; see that + This is used as the compute_program language method; see that for a description of the arguments. */ extern std::string cplus_compute_program (compile_instance *inst, diff -Nru gdb-9.1/gdb/cli/cli-cmds.c gdb-10.2/gdb/cli/cli-cmds.c --- gdb-9.1/gdb/cli/cli-cmds.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/cli/cli-cmds.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* GDB CLI commands. - Copyright (C) 2000-2020 Free Software Foundation, Inc. + Copyright (C) 2000-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -50,6 +50,7 @@ #include "cli/cli-cmds.h" #include "cli/cli-style.h" #include "cli/cli-utils.h" +#include "cli/cli-style.h" #include "extension.h" #include "gdbsupport/pathstuff.h" @@ -191,26 +192,17 @@ error (_("Argument required (%s)."), why); } -/* The "info" command is defined as a prefix, with allow_unknown = 0. - Therefore, its own definition is called only for "info" with no - args. */ +/* This implements the "info" prefix command. Normally such commands + are automatically handled by add_basic_prefix_cmd, but in this case + a separate command is used so that it can be hooked into by + gdb-gdb.gdb. */ static void info_command (const char *arg, int from_tty) { - printf_unfiltered (_("\"info\" must be followed by " - "the name of an info command.\n")); help_list (infolist, "info ", all_commands, gdb_stdout); } -/* The "show" command with no arguments shows all the settings. */ - -static void -show_command (const char *arg, int from_tty) -{ - cmd_show_list (showlist, from_tty, ""); -} - /* See cli/cli-cmds.h. */ void @@ -230,6 +222,7 @@ nested_cmd = repeat_previous (); cmd_list_element *set_cmd = lookup_cmd (&args, setlist, set_cmd_prefix, + nullptr, /*allow_unknown=*/ 0, /*ignore_help_classes=*/ 1); gdb_assert (set_cmd != nullptr); @@ -324,7 +317,54 @@ with_command_completer_1 ("set ", tracker, text); } - +/* Look up the contents of TEXT as a command usable with default args. + Throws an error if no such command is found. + Return the found command and advances TEXT past the found command. + If the found command is a postfix command, set *PREFIX_CMD to its + prefix command. */ + +static struct cmd_list_element * +lookup_cmd_for_default_args (const char **text, + struct cmd_list_element **prefix_cmd) +{ + const char *orig_text = *text; + struct cmd_list_element *lcmd; + + if (*text == nullptr || skip_spaces (*text) == nullptr) + error (_("ALIAS missing.")); + + /* We first use lookup_cmd to verify TEXT unambiguously identifies + a command. */ + lcmd = lookup_cmd (text, cmdlist, "", NULL, + /*allow_unknown=*/ 0, + /*ignore_help_classes=*/ 1); + + /* Note that we accept default args for prefix commands, + as a prefix command can also be a valid usable + command accepting some arguments. + For example, "thread apply" applies a command to a + list of thread ids, and is also the prefix command for + thread apply all. */ + + /* We have an unambiguous command for which default args + can be specified. What remains after having found LCMD + is either spaces, or the default args character. */ + + /* We then use lookup_cmd_composition to detect if the user + has specified an alias, and find the possible prefix_cmd + of cmd. */ + struct cmd_list_element *alias, *cmd; + lookup_cmd_composition + (std::string (orig_text, *text - orig_text).c_str (), + &alias, prefix_cmd, &cmd); + gdb_assert (cmd != nullptr); + gdb_assert (cmd == lcmd); + if (alias != nullptr) + cmd = alias; + + return cmd; +} + /* Provide documentation on command or list given by COMMAND. FROM_TTY is ignored. */ @@ -800,6 +840,18 @@ clear_internalvar (var_signal); if (WIFEXITED (exit_status)) set_internalvar_integer (var_code, WEXITSTATUS (exit_status)); +#ifdef __MINGW32__ + else if (WIFSIGNALED (exit_status) && WTERMSIG (exit_status) == -1) + { + /* The -1 condition can happen on MinGW, if we don't recognize + the fatal exception code encoded in the exit status; see + gdbsupport/gdb_wait.c. We don't want to lose information in + the exit status in that case. Record it as a normal exit + with the full exit status, including the higher 0xC0000000 + bits. */ + set_internalvar_integer (var_code, exit_status); + } +#endif else if (WIFSIGNALED (exit_status)) set_internalvar_integer (var_signal, WTERMSIG (exit_status)); else @@ -827,8 +879,8 @@ /* Make sure to return to the directory GDB thinks it is, in case the shell command we just ran changed it. */ chdir (current_directory); - exit_status_set_internal_vars (rc); #endif + exit_status_set_internal_vars (rc); #else /* Can fork. */ int status, pid; @@ -933,7 +985,7 @@ error (_("No source file for address %s."), paddress (get_current_arch (), sal.pc)); - gdbarch = get_objfile_arch (SYMTAB_OBJFILE (sal.symtab)); + gdbarch = SYMTAB_OBJFILE (sal.symtab)->arch (); sym = find_pc_function (sal.pc); if (sym) printf_filtered ("%s is in %s (%s:%d).\n", @@ -1265,7 +1317,7 @@ error (_("No source file for address %s."), paddress (get_current_arch (), sal.pc)); - gdbarch = get_objfile_arch (SYMTAB_OBJFILE (sal.symtab)); + gdbarch = SYMTAB_OBJFILE (sal.symtab)->arch (); sym = find_pc_function (sal.pc); if (sym) printf_filtered ("%s is in %s (%s:%d).\n", @@ -1338,7 +1390,9 @@ gdb_disassembly_flags flags) { #if defined(TUI) - if (!tui_is_window_visible (DISASSEM_WIN)) + if (tui_is_window_visible (DISASSEM_WIN)) + tui_show_assembly (gdbarch, low); + else #endif { printf_filtered ("Dump of assembler code "); @@ -1368,12 +1422,6 @@ } printf_filtered ("End of assembler dump.\n"); } -#if defined(TUI) - else - { - tui_show_assembly (gdbarch, low); - } -#endif } /* Subroutine of disassemble_command to simplify it. @@ -1434,6 +1482,7 @@ { struct gdbarch *gdbarch = get_current_arch (); CORE_ADDR low, high; + const general_symbol_info *symbol = nullptr; const char *name; CORE_ADDR pc; gdb_disassembly_flags flags; @@ -1489,8 +1538,14 @@ if (p[0] == '\0') { /* One argument. */ - if (find_pc_partial_function (pc, &name, &low, &high, &block) == 0) + if (!find_pc_partial_function_sym (pc, &symbol, &low, &high, &block)) error (_("No function contains specified address.")); + + if (asm_demangle) + name = symbol->print_name (); + else + name = symbol->linkage_name (); + #if defined(TUI) /* NOTE: cagney/2003-02-13 The `tui_active' was previously `tui_version'. */ @@ -1542,7 +1597,7 @@ { const char *comname = args; - c = lookup_cmd (&comname, cmdlist, "", 0, 1); + c = lookup_cmd (&comname, cmdlist, "", NULL, 0, 1); if (!cli_user_command_p (c)) error (_("Not a user command.")); show_user_1 (c, "", args, gdb_stdout); @@ -1574,6 +1629,71 @@ apropos_cmd (gdb_stdout, cmdlist, verbose, pattern, ""); } +/* The options for the "alias" command. */ + +struct alias_opts +{ + /* For "-a". */ + bool abbrev_flag = false; +}; + +static const gdb::option::option_def alias_option_defs[] = { + + gdb::option::flag_option_def<alias_opts> { + "a", + [] (alias_opts *opts) { return &opts->abbrev_flag; }, + N_("Specify that ALIAS is an abbreviation of COMMAND.\n\ +Abbreviations are not used in command completion."), + }, + +}; + +/* Create an option_def_group for the "alias" options, with + A_OPTS as context. */ + +static gdb::option::option_def_group +make_alias_options_def_group (alias_opts *a_opts) +{ + return {{alias_option_defs}, a_opts}; +} + +/* Completer for the "alias_command". */ + +static void +alias_command_completer (struct cmd_list_element *ignore, + completion_tracker &tracker, + const char *text, const char *word) +{ + const auto grp = make_alias_options_def_group (nullptr); + + tracker.set_use_custom_word_point (true); + + if (gdb::option::complete_options + (tracker, &text, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_ERROR, grp)) + return; + + const char *delim = strchr (text, '='); + + /* If we're past the "=" delimiter, complete the + "alias ALIAS = COMMAND [DEFAULT-ARGS...]" as if the user is + typing COMMAND DEFAULT-ARGS... */ + if (delim != text + && delim != nullptr + && isspace (delim[-1]) + && (isspace (delim[1]) || delim[1] == '\0')) + { + std::string new_text = std::string (delim + 1); + + tracker.advance_custom_word_point_by (delim + 1 - text); + complete_nested_command_line (tracker, new_text.c_str ()); + return; + } + + /* We're not yet past the "=" delimiter. Complete a command, as + the user might type an alias following a prefix command. */ + complete_nested_command_line (tracker, text); +} + /* Subroutine of alias_command to simplify it. Return the first N elements of ARGV flattened back to a string with a space separating each element. @@ -1601,24 +1721,29 @@ } /* Subroutine of alias_command to simplify it. - Return true if COMMAND exists, unambiguously. Otherwise false. */ + Verifies that COMMAND can have an alias: + COMMAND must exist. + COMMAND must not have default args. + This last condition is to avoid the following: + alias aaa = backtrace -full + alias bbb = aaa -past-main + as (at least currently), alias default args are not cumulative + and the user would expect bbb to execute 'backtrace -full -past-main' + while it will execute 'backtrace -past-main'. */ -static bool -valid_command_p (const char *command) +static void +validate_aliased_command (const char *command) { struct cmd_list_element *c; + std::string default_args; - c = lookup_cmd_1 (& command, cmdlist, NULL, 1); + c = lookup_cmd_1 (& command, cmdlist, NULL, &default_args, 1); if (c == NULL || c == (struct cmd_list_element *) -1) - return false; + error (_("Invalid command to alias to: %s"), command); - /* This is the slightly tricky part. - lookup_cmd_1 will return a pointer to the last part of COMMAND - to match, leaving COMMAND pointing at the remainder. */ - while (*command == ' ' || *command == '\t') - ++command; - return *command == '\0'; + if (!default_args.empty ()) + error (_("Cannot define an alias of an alias that has default args")); } /* Called when "alias" was incorrectly used. */ @@ -1626,7 +1751,7 @@ static void alias_usage_error (void) { - error (_("Usage: alias [-a] [--] ALIAS = COMMAND")); + error (_("Usage: alias [-a] [--] ALIAS = COMMAND [DEFAULT-ARGS...]")); } /* Make an alias of an existing command. */ @@ -1634,8 +1759,13 @@ static void alias_command (const char *args, int from_tty) { + alias_opts a_opts; + + auto grp = make_alias_options_def_group (&a_opts); + gdb::option::process_options + (&args, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_ERROR, grp); + int i, alias_argc, command_argc; - int abbrev_flag = 0; const char *equals; const char *alias, *command; @@ -1646,24 +1776,18 @@ std::string args2 (args, equals - args); gdb_argv built_alias_argv (args2.c_str ()); - gdb_argv command_argv (equals + 1); + + const char *default_args = equals + 1; + struct cmd_list_element *c_command_prefix; + + lookup_cmd_for_default_args (&default_args, &c_command_prefix); + std::string command_argv_str (equals + 1, + default_args == nullptr + ? strlen (equals + 1) + : default_args - equals - 1); + gdb_argv command_argv (command_argv_str.c_str ()); char **alias_argv = built_alias_argv.get (); - while (alias_argv[0] != NULL) - { - if (strcmp (alias_argv[0], "-a") == 0) - { - ++alias_argv; - abbrev_flag = 1; - } - else if (strcmp (alias_argv[0], "--") == 0) - { - ++alias_argv; - break; - } - else - break; - } if (alias_argv[0] == NULL || command_argv[0] == NULL || *alias_argv[0] == '\0' || *command_argv[0] == '\0') @@ -1683,20 +1807,42 @@ alias_argc = countargv (alias_argv); command_argc = command_argv.count (); - /* COMMAND must exist. + /* COMMAND must exist, and cannot have default args. Reconstruct the command to remove any extraneous spaces, for better error messages. */ std::string command_string (argv_to_string (command_argv.get (), command_argc)); command = command_string.c_str (); - if (! valid_command_p (command)) - error (_("Invalid command to alias to: %s"), command); + validate_aliased_command (command); /* ALIAS must not exist. */ std::string alias_string (argv_to_string (alias_argv, alias_argc)); alias = alias_string.c_str (); - if (valid_command_p (alias)) - error (_("Alias already exists: %s"), alias); + { + cmd_list_element *alias_cmd, *prefix_cmd, *cmd; + + if (lookup_cmd_composition (alias, &alias_cmd, &prefix_cmd, &cmd)) + { + const char *alias_name = alias_argv[alias_argc-1]; + + /* If we found an existing ALIAS_CMD, check that the prefix differ or + the name differ. */ + + if (alias_cmd != nullptr + && alias_cmd->prefix == prefix_cmd + && strcmp (alias_name, alias_cmd->name) == 0) + error (_("Alias already exists: %s"), alias); + + /* Check ALIAS differs from the found CMD. */ + + if (cmd->prefix == prefix_cmd + && strcmp (alias_name, cmd->name) == 0) + error (_("Alias %s is the name of an existing command"), alias); + } + } + + + struct cmd_list_element *alias_cmd; /* If ALIAS is one word, it is an alias for the entire COMMAND. Example: alias spe = set print elements @@ -1710,8 +1856,8 @@ if (alias_argc == 1) { /* add_cmd requires *we* allocate space for name, hence the xstrdup. */ - add_com_alias (xstrdup (alias_argv[0]), command, class_alias, - abbrev_flag); + alias_cmd = add_com_alias (xstrdup (alias_argv[0]), command, class_alias, + a_opts.abbrev_flag); } else { @@ -1731,19 +1877,29 @@ alias_prefix = alias_prefix_string.c_str (); command_prefix = command_prefix_string.c_str (); - c_command = lookup_cmd_1 (& command_prefix, cmdlist, NULL, 1); + c_command = lookup_cmd_1 (& command_prefix, cmdlist, NULL, NULL, 1); /* We've already tried to look up COMMAND. */ gdb_assert (c_command != NULL && c_command != (struct cmd_list_element *) -1); gdb_assert (c_command->prefixlist != NULL); - c_alias = lookup_cmd_1 (& alias_prefix, cmdlist, NULL, 1); + c_alias = lookup_cmd_1 (& alias_prefix, cmdlist, NULL, NULL, 1); if (c_alias != c_command) error (_("ALIAS and COMMAND prefixes do not match.")); /* add_cmd requires *we* allocate space for name, hence the xstrdup. */ - add_alias_cmd (xstrdup (alias_argv[alias_argc - 1]), - command_argv[command_argc - 1], - class_alias, abbrev_flag, c_command->prefixlist); + alias_cmd = add_alias_cmd (xstrdup (alias_argv[alias_argc - 1]), + command_argv[command_argc - 1], + class_alias, a_opts.abbrev_flag, + c_command->prefixlist); + } + + gdb_assert (alias_cmd != nullptr); + gdb_assert (alias_cmd->default_args.empty ()); + if (default_args != nullptr) + { + default_args = skip_spaces (default_args); + + alias_cmd->default_args = default_args; } } @@ -1844,20 +2000,6 @@ sals.erase (from, sals.end ()); } -static void -set_debug (const char *arg, int from_tty) -{ - printf_unfiltered (_("\"set debug\" must be followed by " - "the name of a debug subcommand.\n")); - help_list (setdebuglist, "set debug ", all_commands, gdb_stdout); -} - -static void -show_debug (const char *args, int from_tty) -{ - cmd_show_list (showdebuglist, from_tty, ""); -} - void init_cmd_lists (void) { @@ -1927,14 +2069,14 @@ struct type *type0 = check_typedef (value_type (argv[0])); - if (TYPE_CODE (type0) != TYPE_CODE_ARRAY - && TYPE_CODE (type0) != TYPE_CODE_STRING) + if (type0->code () != TYPE_CODE_ARRAY + && type0->code () != TYPE_CODE_STRING) error (_("First argument of %s must be a string."), fnname); const char *a0 = (const char *) value_contents (argv[0]); - cmd_list_element *cmd = lookup_cmd (&a0, showlist, "", -1, 0); + cmd_list_element *cmd = lookup_cmd (&a0, showlist, "", NULL, -1, 0); - if (cmd == nullptr || cmd_type (cmd) != show_cmd) + if (cmd == nullptr || cmd->type != show_cmd) error (_("First argument of %s must be a " "valid setting of the 'show' command."), fnname); @@ -2105,8 +2247,9 @@ gdbarch); } +void _initialize_cli_cmds (); void -_initialize_cli_cmds (void) +_initialize_cli_cmds () { struct cmd_list_element *c; @@ -2121,7 +2264,7 @@ &cmdlist); add_cmd ("obscure", class_obscure, _("Obscure features."), &cmdlist); add_cmd ("aliases", class_alias, - _("Aliases of other commands."), &cmdlist); + _("User-defined aliases of other commands."), &cmdlist); add_cmd ("user-defined", class_user, _("\ User-defined commands.\n\ The commands in this class are those defined by the user.\n\ @@ -2143,6 +2286,12 @@ When the program being debugged stops, gdb selects the innermost frame.\n\ The commands below can be used to select other frames by number or address."), &cmdlist); +#ifdef TUI + add_cmd ("text-user-interface", class_tui, + _("TUI is the GDB text based interface.\n\ +In TUI mode, GDB can display several text windows showing\n\ +the source file, the processor registers, the program disassembly, ..."), &cmdlist); +#endif add_cmd ("running", class_run, _("Running the program."), &cmdlist); /* Define general commands. */ @@ -2199,12 +2348,12 @@ show_info_verbose, &setlist, &showlist); - add_prefix_cmd ("history", class_support, set_history, - _("Generic command for setting command history parameters."), - &sethistlist, "set history ", 0, &setlist); - add_prefix_cmd ("history", class_support, show_history, - _("Generic command for showing command history parameters."), - &showhistlist, "show history ", 0, &showlist); + add_basic_prefix_cmd ("history", class_support, _("\ +Generic command for setting command history parameters."), + &sethistlist, "set history ", 0, &setlist); + add_show_prefix_cmd ("history", class_support, _("\ +Generic command for showing command history parameters."), + &showhistlist, "show history ", 0, &showlist); add_setshow_boolean_cmd ("expansion", no_class, &history_expansion_p, _("\ Set history expansion on command input."), _("\ @@ -2223,11 +2372,11 @@ add_com ("complete", class_obscure, complete_command, _("List the completions for the rest of the line as a command.")); - add_prefix_cmd ("show", class_info, show_command, _("\ + c = add_show_prefix_cmd ("show", class_info, _("\ Generic command for showing things about the debugger."), - &showlist, "show ", 0, &cmdlist); + &showlist, "show ", 0, &cmdlist); /* Another way to get at the same thing. */ - add_info ("set", show_command, _("Show all GDB settings.")); + add_alias_cmd ("set", c, class_info, 0, &infolist); c = add_com ("with", class_vars, with_command, _("\ Temporarily set SETTING to VALUE, run COMMAND, and restore SETTING.\n\ @@ -2315,13 +2464,13 @@ show_remote_timeout, &setlist, &showlist); - add_prefix_cmd ("debug", no_class, set_debug, - _("Generic command for setting gdb debugging flags."), - &setdebuglist, "set debug ", 0, &setlist); - - add_prefix_cmd ("debug", no_class, show_debug, - _("Generic command for showing gdb debugging flags."), - &showdebuglist, "show debug ", 0, &showlist); + add_basic_prefix_cmd ("debug", no_class, + _("Generic command for setting gdb debugging flags."), + &setdebuglist, "set debug ", 0, &setlist); + + add_show_prefix_cmd ("debug", no_class, + _("Generic command for showing gdb debugging flags."), + &showdebuglist, "show debug ", 0, &showlist); c = add_com ("shell", class_support, shell_command, _("\ Execute the rest of the line as a shell command.\n\ @@ -2386,8 +2535,13 @@ c = add_com ("disassemble", class_vars, disassemble_command, _("\ Disassemble a specified section of memory.\n\ +Usage: disassemble[/m|/r|/s] START [, END]\n\ Default is the function surrounding the pc of the selected frame.\n\ \n\ +With a /s modifier, source lines are included (if available).\n\ +In this mode, the output is displayed in PC address order, and\n\ +file names and contents for all relevant source files are displayed.\n\ +\n\ With a /m modifier, source lines are included (if available).\n\ This view is \"source centric\": the output is in source line order,\n\ regardless of any optimization that is present. Only the main source file\n\ @@ -2395,11 +2549,6 @@ This modifier hasn't proved useful in practice and is deprecated\n\ in favor of /s.\n\ \n\ -With a /s modifier, source lines are included (if available).\n\ -This differs from /m in two important respects:\n\ -- the output is still in pc address order, and\n\ -- file names and contents for all relevant source files are displayed.\n\ -\n\ With a /r modifier, raw instructions in hex are included.\n\ \n\ With a single argument, the function surrounding that address is dumped.\n\ @@ -2441,19 +2590,37 @@ NULL, &setlist, &showlist); - c = add_com ("alias", class_support, alias_command, _("\ + const auto alias_opts = make_alias_options_def_group (nullptr); + + static std::string alias_help + = gdb::option::build_help (_("\ Define a new command that is an alias of an existing command.\n\ -Usage: alias [-a] [--] ALIAS = COMMAND\n\ +Usage: alias [-a] [--] ALIAS = COMMAND [DEFAULT-ARGS...]\n\ ALIAS is the name of the alias command to create.\n\ COMMAND is the command being aliased to.\n\ -If \"-a\" is specified, the command is an abbreviation,\n\ -and will not appear in help command list output.\n\ +\n\ +Options:\n\ +%OPTIONS%\n\ +\n\ +GDB will automatically prepend the provided DEFAULT-ARGS to the list\n\ +of arguments explicitly provided when using ALIAS.\n\ +Use \"help aliases\" to list all user defined aliases and their default args.\n\ \n\ Examples:\n\ Make \"spe\" an alias of \"set print elements\":\n\ - alias spe = set print elements\n\ + alias spe set print elements\n\ Make \"elms\" an alias of \"elements\" in the \"set print\" command:\n\ - alias -a set print elms = set print elements")); + alias -a set print elms set print elements\n\ +Make \"btf\" an alias of \"backtrace -full -past-entry -past-main\" :\n\ + alias btf = backtrace -full -past-entry -past-main\n\ +Make \"wLapPeu\" an alias of 2 nested \"with\":\n\ + alias wLapPeu = with language pascal -- with print elements unlimited --"), + alias_opts); + + c = add_com ("alias", class_support, alias_command, + alias_help.c_str ()); + + set_cmd_completer_handle_brkchars (c, alias_command_completer); const char *source_help_text = xstrprintf (_("\ Read commands from a file named FILE.\n\ diff -Nru gdb-9.1/gdb/cli/cli-cmds.h gdb-10.2/gdb/cli/cli-cmds.h --- gdb-9.1/gdb/cli/cli-cmds.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/cli/cli-cmds.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Header file for GDB CLI command implementation library. - Copyright (C) 2000-2020 Free Software Foundation, Inc. + Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/cli/cli-decode.c gdb-10.2/gdb/cli/cli-decode.c --- gdb-9.1/gdb/cli/cli-decode.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/cli/cli-decode.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Handle lists of commands, their decoding and documentation, for GDB. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -43,6 +43,11 @@ int ignore_help_classes, int *nfound); +static void help_cmd_list (struct cmd_list_element *list, + enum command_class theclass, + bool recurse, + struct ui_file *stream); + static void help_all (struct ui_file *stream); /* Look up a command whose 'prefixlist' is KEY. Return the command if found, @@ -61,7 +66,11 @@ if (p->prefixlist == NULL) continue; else if (p->prefixlist == key) - return p; + { + /* If we found an alias, we must return the aliased + command. */ + return p->cmd_pointer ? p->cmd_pointer : p; + } q = lookup_cmd_for_prefixlist (key, *(p->prefixlist)); if (q != NULL) @@ -72,29 +81,8 @@ } static void -set_cmd_prefix (struct cmd_list_element *c, struct cmd_list_element **list) -{ - struct cmd_list_element *p; - - /* Check to see if *LIST contains any element other than C. */ - for (p = *list; p != NULL; p = p->next) - if (p != c) - break; - - if (p == NULL) - { - /* *SET_LIST only contains SET. */ - p = lookup_cmd_for_prefixlist (list, setlist); - - c->prefix = p ? (p->cmd_pointer ? p->cmd_pointer : p) : p; - } - else - c->prefix = p->prefix; -} - -static void -print_help_for_command (struct cmd_list_element *c, const char *prefix, - int recurse, struct ui_file *stream); +print_help_for_command (struct cmd_list_element *c, + bool recurse, struct ui_file *stream); /* Set the callback function for the specified command. For each both @@ -151,12 +139,6 @@ return cmd->context; } -enum cmd_types -cmd_type (struct cmd_list_element *cmd) -{ - return cmd->type; -} - void set_cmd_completer (struct cmd_list_element *cmd, completer_ftype *completer) { @@ -229,6 +211,13 @@ p->next = c; } + /* Search the prefix cmd of C, and assigns it to C->prefix. + See also add_prefix_cmd and update_prefix_field_of_prefixed_commands. */ + struct cmd_list_element *prefixcmd = lookup_cmd_for_prefixlist (list, + cmdlist); + c->prefix = prefixcmd; + + return c; } @@ -330,7 +319,6 @@ c->alias_chain = old->aliases; old->aliases = c; - set_cmd_prefix (c, list); return c; } @@ -343,12 +331,43 @@ struct cmd_list_element *old; tmp = oldname; - old = lookup_cmd (&tmp, *list, "", 1, 1); + old = lookup_cmd (&tmp, *list, "", NULL, 1, 1); return add_alias_cmd (name, old, theclass, abbrev_flag, list); } +/* Update the prefix field of all sub-commands of the prefix command C. + We must do this when a prefix command is defined as the GDB init sequence + does not guarantee that a prefix command is created before its sub-commands. + For example, break-catch-sig.c initialization runs before breakpoint.c + initialization, but it is breakpoint.c that creates the "catch" command used + by the "catch signal" command created by break-catch-sig.c. */ + +static void +update_prefix_field_of_prefixed_commands (struct cmd_list_element *c) +{ + for (cmd_list_element *p = *c->prefixlist; p != NULL; p = p->next) + { + p->prefix = c; + + /* We must recursively update the prefix field to cover + e.g. 'info auto-load libthread-db' where the creation + order was: + libthread-db + auto-load + info + In such a case, when 'auto-load' was created by do_add_cmd, + the 'libthread-db' prefix field could not be updated, as the + 'auto-load' command was not yet reachable by + lookup_cmd_for_prefixlist (list, cmdlist) + that searches from the top level 'cmdlist'. */ + if (p->prefixlist != nullptr) + update_prefix_field_of_prefixed_commands (p); + } +} + + /* Like add_cmd but adds an element for a command prefix: a name that should be followed by a subcommand to be looked up in another command list. PREFIXLIST should be the address of the variable @@ -362,24 +381,70 @@ struct cmd_list_element **list) { struct cmd_list_element *c = add_cmd (name, theclass, fun, doc, list); - struct cmd_list_element *p; c->prefixlist = prefixlist; c->prefixname = prefixname; c->allow_unknown = allow_unknown; - if (list == &cmdlist) - c->prefix = NULL; - else - set_cmd_prefix (c, list); - - /* Update the field 'prefix' of each cmd_list_element in *PREFIXLIST. */ - for (p = *prefixlist; p != NULL; p = p->next) - p->prefix = c; + /* Now that prefix command C is defined, we need to set the prefix field + of all prefixed commands that were defined before C itself was defined. */ + update_prefix_field_of_prefixed_commands (c); return c; } +/* A helper function for add_basic_prefix_cmd. This is a command + function that just forwards to help_list. */ + +static void +do_prefix_cmd (const char *args, int from_tty, struct cmd_list_element *c) +{ + /* Look past all aliases. */ + while (c->cmd_pointer != nullptr) + c = c->cmd_pointer; + + help_list (*c->prefixlist, c->prefixname, all_commands, gdb_stdout); +} + +/* See command.h. */ + +struct cmd_list_element * +add_basic_prefix_cmd (const char *name, enum command_class theclass, + const char *doc, struct cmd_list_element **prefixlist, + const char *prefixname, int allow_unknown, + struct cmd_list_element **list) +{ + struct cmd_list_element *cmd = add_prefix_cmd (name, theclass, nullptr, + doc, prefixlist, prefixname, + allow_unknown, list); + set_cmd_sfunc (cmd, do_prefix_cmd); + return cmd; +} + +/* A helper function for add_show_prefix_cmd. This is a command + function that just forwards to cmd_show_list. */ + +static void +do_show_prefix_cmd (const char *args, int from_tty, struct cmd_list_element *c) +{ + cmd_show_list (*c->prefixlist, from_tty); +} + +/* See command.h. */ + +struct cmd_list_element * +add_show_prefix_cmd (const char *name, enum command_class theclass, + const char *doc, struct cmd_list_element **prefixlist, + const char *prefixname, int allow_unknown, + struct cmd_list_element **list) +{ + struct cmd_list_element *cmd = add_prefix_cmd (name, theclass, nullptr, + doc, prefixlist, prefixname, + allow_unknown, list); + set_cmd_sfunc (cmd, do_show_prefix_cmd); + return cmd; +} + /* Like ADD_PREFIX_CMD but sets the suppress_notification pointer on the new command list element. */ @@ -503,8 +568,6 @@ if (set_func != NULL) set_cmd_sfunc (set, set_func); - set_cmd_prefix (set, set_list); - show = add_set_or_show_cmd (name, show_cmd, theclass, var_type, var, full_show_doc, show_list); show->doc_allocated = 1; @@ -937,7 +1000,10 @@ return add_cmd (name, theclass, fun, doc, &cmdlist); } -/* Add an alias or abbreviation command to the list of commands. */ +/* Add an alias or abbreviation command to the list of commands. + For aliases predefined by GDB (such as bt), THECLASS must be + different of class_alias, as class_alias is used to identify + user defined aliases. */ struct cmd_list_element * add_com_alias (const char *name, const char *oldname, enum command_class theclass, @@ -957,6 +1023,77 @@ &cmdlist, suppress_notification); } +/* Print the prefix of C followed by name of C in title style. */ + +static void +fput_command_name_styled (struct cmd_list_element *c, struct ui_file *stream) +{ + const char *prefixname + = c->prefix == nullptr ? "" : c->prefix->prefixname; + + fprintf_styled (stream, title_style.style (), "%s%s", prefixname, c->name); +} + +/* Print the definition of alias C using title style for alias + and aliased command. */ + +static void +fput_alias_definition_styled (struct cmd_list_element *c, + struct ui_file *stream) +{ + gdb_assert (c->cmd_pointer != nullptr); + fputs_filtered (" alias ", stream); + fput_command_name_styled (c, stream); + fprintf_filtered (stream, " = "); + fput_command_name_styled (c->cmd_pointer, stream); + fprintf_filtered (stream, " %s\n", c->default_args.c_str ()); +} + +/* Print the definition of the aliases of CMD that have default args. */ + +static void +fput_aliases_definition_styled (struct cmd_list_element *cmd, + struct ui_file *stream) +{ + if (cmd->aliases != nullptr) + { + for (cmd_list_element *iter = cmd->aliases; + iter; + iter = iter->alias_chain) + { + if (!iter->default_args.empty ()) + fput_alias_definition_styled (iter, stream); + } + } +} + + +/* If C has one or more aliases, style print the name of C and + the name of its aliases, separated by commas. + If ALWAYS_FPUT_C_NAME, print the name of C even if it has no aliases. + If one or more names are printed, POSTFIX is printed after the last name. +*/ + +static void +fput_command_names_styled (struct cmd_list_element *c, + bool always_fput_c_name, const char *postfix, + struct ui_file *stream) +{ + if (always_fput_c_name || c->aliases != nullptr) + fput_command_name_styled (c, stream); + if (c->aliases != nullptr) + { + for (cmd_list_element *iter = c->aliases; iter; iter = iter->alias_chain) + { + fputs_filtered (", ", stream); + wrap_here (" "); + fput_command_name_styled (iter, stream); + } + } + if (always_fput_c_name || c->aliases != nullptr) + fputs_filtered (postfix, stream); +} + /* If VERBOSE, print the full help for command C and highlight the documentation parts matching HIGHLIGHT, otherwise print only one-line help for command C. */ @@ -972,14 +1109,21 @@ if (verbose) fputs_filtered ("\n", stream); - fprintf_styled (stream, title_style.style (), - "%s%s", prefix, c->name); - fputs_filtered (" -- ", stream); + fput_command_names_styled (c, true, + verbose ? "" : " -- ", stream); if (verbose) - fputs_highlighted (c->doc, highlight, stream); + { + fputs_filtered ("\n", stream); + fput_aliases_definition_styled (c, stream); + fputs_highlighted (c->doc, highlight, stream); + fputs_filtered ("\n", stream); + } else - print_doc_line (stream, c->doc, false); - fputs_filtered ("\n", stream); + { + print_doc_line (stream, c->doc, false); + fputs_filtered ("\n", stream); + fput_aliases_definition_styled (c, stream); + } } /* Recursively walk the commandlist structures, and print out the @@ -1000,6 +1144,14 @@ /* Walk through the commands. */ for (c=commandlist;c;c=c->next) { + if (c->cmd_pointer != nullptr) + { + /* Command aliases/abbreviations are skipped to ensure we print the + doc of a command only once, when encountering the aliased + command. */ + continue; + } + returnvalue = -1; /* Needed to avoid double printing. */ if (c->name != NULL) { @@ -1009,6 +1161,17 @@ returnvalue = regex.search (c->name, name_len, 0, name_len, NULL); if (returnvalue >= 0) print_doc_of_command (c, prefix, verbose, regex, stream); + + /* Try to match against the name of the aliases. */ + for (cmd_list_element *iter = c->aliases; + returnvalue < 0 && iter; + iter = iter->alias_chain) + { + name_len = strlen (iter->name); + returnvalue = regex.search (iter->name, name_len, 0, name_len, NULL); + if (returnvalue >= 0) + print_doc_of_command (c, prefix, verbose, regex, stream); + } } if (c->doc != NULL && returnvalue < 0) { @@ -1018,10 +1181,8 @@ if (regex.search (c->doc, doc_len, 0, doc_len, NULL) >= 0) print_doc_of_command (c, prefix, verbose, regex, stream); } - /* Check if this command has subcommands and is not an - abbreviation. We skip listing subcommands of abbreviations - in order to avoid duplicates in the output. */ - if (c->prefixlist != NULL && !c->abbrev_flag) + /* Check if this command has subcommands. */ + if (c->prefixlist != NULL) { /* Recursively call ourselves on the subcommand list, passing the right prefix in. */ @@ -1044,7 +1205,7 @@ void help_cmd (const char *command, struct ui_file *stream) { - struct cmd_list_element *c; + struct cmd_list_element *c, *alias, *prefix_cmd, *c_cmd; if (!command) { @@ -1058,11 +1219,14 @@ return; } - c = lookup_cmd (&command, cmdlist, "", 0, 0); + const char *orig_command = command; + c = lookup_cmd (&command, cmdlist, "", NULL, 0, 0); if (c == 0) return; + lookup_cmd_composition (orig_command, &alias, &prefix_cmd, &c_cmd); + /* There are three cases here. If c->prefixlist is nonzero, we have a prefix command. Print its documentation, then list its subcommands. @@ -1075,6 +1239,10 @@ number of this class so that the commands in the class will be listed. */ + /* If the user asked 'help somecommand' and there is no alias, + the false indicates to not output the (single) command name. */ + fput_command_names_styled (c, false, "\n", stream); + fput_aliases_definition_styled (c, stream); fputs_filtered (c->doc, stream); fputs_filtered ("\n", stream); @@ -1144,7 +1312,7 @@ else fprintf_filtered (stream, "List of %scommands:\n\n", cmdtype2); - help_cmd_list (list, theclass, cmdtype, (int) theclass >= 0, stream); + help_cmd_list (list, theclass, theclass >= 0, stream); if (theclass == all_classes) { @@ -1191,7 +1359,7 @@ if (c->func == NULL) { fprintf_filtered (stream, "\nCommand class: %s\n\n", c->name); - help_cmd_list (cmdlist, c->theclass, "", 1, stream); + help_cmd_list (cmdlist, c->theclass, true, stream); } } @@ -1211,7 +1379,7 @@ fprintf_filtered (stream, "\nUnclassified commands\n\n"); seen_unclassified = 1; } - print_help_for_command (c, "", 1, stream); + print_help_for_command (c, true, stream); } } @@ -1263,14 +1431,15 @@ If RECURSE is non-zero, also print one-line descriptions of all prefixed subcommands. */ static void -print_help_for_command (struct cmd_list_element *c, const char *prefix, - int recurse, struct ui_file *stream) +print_help_for_command (struct cmd_list_element *c, + bool recurse, struct ui_file *stream) { - fprintf_styled (stream, title_style.style (), - "%s%s", prefix, c->name); - fputs_filtered (" -- ", stream); + fput_command_names_styled (c, true, " -- ", stream); print_doc_line (stream, c->doc, false); fputs_filtered ("\n", stream); + if (!c->default_args.empty ()) + fput_alias_definition_styled (c, stream); + fput_aliases_definition_styled (c, stream); if (recurse && c->prefixlist != 0 @@ -1278,48 +1447,80 @@ /* Subcommands of a prefix command typically have 'all_commands' as class. If we pass CLASS to recursive invocation, most often we won't see anything. */ - help_cmd_list (*c->prefixlist, all_commands, c->prefixname, 1, stream); + help_cmd_list (*c->prefixlist, all_commands, true, stream); } /* * Implement a help command on command list LIST. * RECURSE should be non-zero if this should be done recursively on * all sublists of LIST. - * PREFIX is the prefix to print before each command name. * STREAM is the stream upon which the output should be written. * THECLASS should be: * A non-negative class number to list only commands in that - * class. * ALL_COMMANDS to list all commands in list. * ALL_CLASSES to list all classes in list. * + * Note that aliases are only shown when THECLASS is class_alias. + * In the other cases, the aliases will be shown together with their + * aliased command. + * * Note that RECURSE will be active on *all* sublists, not just the * ones selected by the criteria above (ie. the selection mechanism * is at the low level, not the high-level). */ -void + +static void help_cmd_list (struct cmd_list_element *list, enum command_class theclass, - const char *prefix, int recurse, struct ui_file *stream) + bool recurse, struct ui_file *stream) { struct cmd_list_element *c; for (c = list; c; c = c->next) { - if (c->abbrev_flag == 0 - && !c->cmd_deprecated - && (theclass == all_commands - || (theclass == all_classes && c->func == NULL) - || (theclass == c->theclass && c->func != NULL))) - { - print_help_for_command (c, prefix, recurse, stream); - } - else if (c->abbrev_flag == 0 - && recurse - && !c->cmd_deprecated - && theclass == class_user && c->prefixlist != NULL) - /* User-defined commands may be subcommands. */ - help_cmd_list (*c->prefixlist, theclass, c->prefixname, - recurse, stream); + if (c->abbrev_flag == 1 || c->cmd_deprecated) + { + /* Do not show abbreviations or deprecated commands. */ + continue; + } + + if (c->cmd_pointer != nullptr && theclass != class_alias) + { + /* Do not show an alias, unless specifically showing the + list of aliases: for all other classes, an alias is + shown (if needed) together with its aliased command. */ + continue; + } + + if (theclass == all_commands + || (theclass == all_classes && c->func == NULL) + || (theclass == c->theclass && c->func != NULL)) + { + /* show C when + - showing all commands + - showing all classes and C is a help class + - showing commands of THECLASS and C is not the help class */ + + /* If we show the class_alias and C is an alias, do not recurse, + as this would show the (possibly very long) not very useful + list of sub-commands of the aliased command. */ + print_help_for_command + (c, + recurse && (theclass != class_alias || c->cmd_pointer == nullptr), + stream); + continue; + } + + if (recurse + && (theclass == class_user || theclass == class_alias) + && c->prefixlist != NULL) + { + /* User-defined commands or aliases may be subcommands. */ + help_cmd_list (*c->prefixlist, theclass, recurse, stream); + continue; + } + + /* Do not show C or recurse on C, e.g. because C does not belong to + THECLASS or because C is a help class. */ } } @@ -1422,8 +1623,12 @@ the list in which there are ambiguous choices (and *TEXT will be set to the ambiguous text string). + if DEFAULT_ARGS is not null, *DEFAULT_ARGS is set to the found command + default args (possibly empty). + If the located command was an abbreviation, this routine returns the base - command of the abbreviation. + command of the abbreviation. Note that *DEFAULT_ARGS will contain the + default args defined for the alias. It does no error reporting whatsoever; control will always return to the superior routine. @@ -1450,11 +1655,13 @@ struct cmd_list_element * lookup_cmd_1 (const char **text, struct cmd_list_element *clist, - struct cmd_list_element **result_list, int ignore_help_classes) + struct cmd_list_element **result_list, std::string *default_args, + int ignore_help_classes) { char *command; int len, nfound; struct cmd_list_element *found, *c; + bool found_alias = false; const char *line = *text; while (**text == ' ' || **text == '\t') @@ -1486,10 +1693,12 @@ if (nfound > 1) { - if (result_list != NULL) + if (result_list != nullptr) /* Will be modified in calling routine if we know what the prefix command is. */ *result_list = 0; + if (default_args != nullptr) + *default_args = std::string (); return CMD_LIST_AMBIGUOUS; /* Ambiguous. */ } @@ -1505,22 +1714,30 @@ are warning about the alias, we may also warn about the command itself and we will adjust the appropriate DEPRECATED_WARN_USER flags. */ - + if (found->deprecated_warn_user) deprecated_cmd_warning (line); + + /* Return the default_args of the alias, not the default_args + of the command it is pointing to. */ + if (default_args != nullptr) + *default_args = found->default_args; found = found->cmd_pointer; + found_alias = true; } /* If we found a prefix command, keep looking. */ if (found->prefixlist) { c = lookup_cmd_1 (text, *found->prefixlist, result_list, - ignore_help_classes); + default_args, ignore_help_classes); if (!c) { /* Didn't find anything; this is as far as we got. */ - if (result_list != NULL) + if (result_list != nullptr) *result_list = clist; + if (!found_alias && default_args != nullptr) + *default_args = found->default_args; return found; } else if (c == CMD_LIST_AMBIGUOUS) @@ -1528,13 +1745,16 @@ /* We've gotten this far properly, but the next step is ambiguous. We need to set the result list to the best we've found (if an inferior hasn't already set it). */ - if (result_list != NULL) + if (result_list != nullptr) if (!*result_list) /* This used to say *result_list = *found->prefixlist. If that was correct, need to modify the documentation at the top of this function to clarify what is supposed to be going on. */ *result_list = found; + /* For ambiguous commands, do not return any default_args args. */ + if (default_args != nullptr) + *default_args = std::string (); return c; } else @@ -1545,8 +1765,10 @@ } else { - if (result_list != NULL) + if (result_list != nullptr) *result_list = clist; + if (!found_alias && default_args != nullptr) + *default_args = found->default_args; return found; } } @@ -1566,8 +1788,13 @@ /* Look up the contents of *LINE as a command in the command list LIST. LIST is a chain of struct cmd_list_element's. - If it is found, return the struct cmd_list_element for that command - and update *LINE to point after the command name, at the first argument. + If it is found, return the struct cmd_list_element for that command, + update *LINE to point after the command name, at the first argument + and update *DEFAULT_ARGS (if DEFAULT_ARGS is not null) to the default + args to prepend to the user provided args when running the command. + Note that if the found cmd_list_element is found via an alias, + the default args of the alias are returned. + If not found, call error if ALLOW_UNKNOWN is zero otherwise (or if error returns) return zero. Call error if specified command is ambiguous, @@ -1581,6 +1808,7 @@ struct cmd_list_element * lookup_cmd (const char **line, struct cmd_list_element *list, const char *cmdtype, + std::string *default_args, int allow_unknown, int ignore_help_classes) { struct cmd_list_element *last_list = 0; @@ -1592,7 +1820,7 @@ if (!*line) error (_("Lack of needed %scommand"), cmdtype); - c = lookup_cmd_1 (line, list, &last_list, ignore_help_classes); + c = lookup_cmd_1 (line, list, &last_list, default_args, ignore_help_classes); if (!c) { @@ -1760,25 +1988,25 @@ } -/* Look up the contents of LINE as a command in the command list 'cmdlist'. +/* Look up the contents of TEXT as a command in the command list 'cmdlist'. Return 1 on success, 0 on failure. - - If LINE refers to an alias, *alias will point to that alias. - - If LINE is a postfix command (i.e. one that is preceded by a prefix - command) set *prefix_cmd. - - Set *cmd to point to the command LINE indicates. - - If any of *alias, *prefix_cmd, or *cmd cannot be determined or do not + + If TEXT refers to an alias, *ALIAS will point to that alias. + + If TEXT is a subcommand (i.e. one that is preceded by a prefix + command) set *PREFIX_CMD. + + Set *CMD to point to the command TEXT indicates. + + If any of *ALIAS, *PREFIX_CMD, or *CMD cannot be determined or do not exist, they are NULL when we return. - + */ int lookup_cmd_composition (const char *text, - struct cmd_list_element **alias, - struct cmd_list_element **prefix_cmd, - struct cmd_list_element **cmd) + struct cmd_list_element **alias, + struct cmd_list_element **prefix_cmd, + struct cmd_list_element **cmd) { char *command; int len, nfound; @@ -1788,43 +2016,42 @@ *alias = NULL; *prefix_cmd = NULL; *cmd = NULL; - + cur_list = cmdlist; - + + text = skip_spaces (text); + while (1) - { + { /* Go through as many command lists as we need to, to find the command TEXT refers to. */ - + prev_cmd = *cmd; - - while (*text == ' ' || *text == '\t') - (text)++; - + /* Identify the name of the command. */ len = find_command_name_length (text); - + /* If nothing but whitespace, return. */ if (len == 0) return 0; - - /* Text is the start of the first command word to lookup (and - it's length is len). We copy this into a local temporary. */ - + + /* TEXT is the start of the first command word to lookup (and + it's length is LEN). We copy this into a local temporary. */ + command = (char *) alloca (len + 1); memcpy (command, text, len); command[len] = '\0'; - + /* Look it up. */ *cmd = 0; nfound = 0; *cmd = find_cmd (command, len, cur_list, 1, &nfound); - + if (*cmd == CMD_LIST_AMBIGUOUS) { return 0; /* ambiguous */ } - + if (*cmd == NULL) return 0; /* nothing found */ else @@ -1832,18 +2059,20 @@ if ((*cmd)->cmd_pointer) { /* cmd was actually an alias, we note that an alias was - used (by assigning *alais) and we set *cmd. */ + used (by assigning *ALIAS) and we set *CMD. */ *alias = *cmd; *cmd = (*cmd)->cmd_pointer; } *prefix_cmd = prev_cmd; } - if ((*cmd)->prefixlist) + + text += len; + text = skip_spaces (text); + + if ((*cmd)->prefixlist && *text != '\0') cur_list = *(*cmd)->prefixlist; else return 1; - - text += len; } } diff -Nru gdb-9.1/gdb/cli/cli-decode.h gdb-10.2/gdb/cli/cli-decode.h --- gdb-9.1/gdb/cli/cli-decode.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/cli/cli-decode.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Header file for GDB command decoding library. - Copyright (C) 2000-2020 Free Software Foundation, Inc. + Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -27,20 +27,15 @@ #include "cli-script.h" #include "completer.h" -#if 0 -/* FIXME: cagney/2002-03-17: Once cmd_type() has been removed, ``enum - cmd_types'' can be moved from "command.h" to "cli-decode.h". */ /* Not a set/show command. Note that some commands which begin with "set" or "show" might be in this category, if their syntax does not fall into one of the following categories. */ -typedef enum cmd_types - { - not_set_cmd, - set_cmd, - show_cmd - } -cmd_types; -#endif +enum cmd_types +{ + not_set_cmd, + set_cmd, + show_cmd +}; /* This structure records one command'd definition. */ @@ -183,6 +178,10 @@ /* Hook for another command to be executed after this command. */ struct cmd_list_element *hook_post = nullptr; + /* Default arguments to automatically prepend to the user + provided arguments when running this command or alias. */ + std::string default_args; + /* Nonzero identifies a prefix command. For them, the address of the variable containing the list of subcommands. */ struct cmd_list_element **prefixlist = nullptr; @@ -249,9 +248,6 @@ int *suppress_notification = nullptr; }; -extern void help_cmd_list (struct cmd_list_element *, enum command_class, - const char *, int, struct ui_file *); - /* Functions that implement commands about CLI commands. */ extern void help_cmd (const char *, struct ui_file *); diff -Nru gdb-9.1/gdb/cli/cli-dump.c gdb-10.2/gdb/cli/cli-dump.c --- gdb-9.1/gdb/cli/cli-dump.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/cli/cli-dump.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Dump-to-file commands, for GDB, the GNU debugger. - Copyright (C) 2002-2020 Free Software Foundation, Inc. + Copyright (C) 2002-2021 Free Software Foundation, Inc. Contributed by Red Hat. @@ -129,20 +129,6 @@ static struct cmd_list_element *binary_append_cmdlist; static void -dump_command (const char *cmd, int from_tty) -{ - printf_unfiltered (_("\"dump\" must be followed by a subcommand.\n\n")); - help_list (dump_cmdlist, "dump ", all_commands, gdb_stdout); -} - -static void -append_command (const char *cmd, int from_tty) -{ - printf_unfiltered (_("\"append\" must be followed by a subcommand.\n\n")); - help_list (dump_cmdlist, "append ", all_commands, gdb_stdout); -} - -static void dump_binary_file (const char *filename, const char *mode, const bfd_byte *buf, ULONGEST len) { @@ -579,64 +565,22 @@ } } -static void -srec_dump_command (const char *cmd, int from_tty) -{ - printf_unfiltered (_("\"dump srec\" must be followed by a subcommand.\n")); - help_list (srec_cmdlist, "dump srec ", all_commands, gdb_stdout); -} - -static void -ihex_dump_command (const char *cmd, int from_tty) -{ - printf_unfiltered (_("\"dump ihex\" must be followed by a subcommand.\n")); - help_list (ihex_cmdlist, "dump ihex ", all_commands, gdb_stdout); -} - -static void -verilog_dump_command (const char *cmd, int from_tty) -{ - printf_unfiltered (_("\"dump verilog\" must be followed by a subcommand.\n")); - help_list (verilog_cmdlist, "dump verilog ", all_commands, gdb_stdout); -} - -static void -tekhex_dump_command (const char *cmd, int from_tty) -{ - printf_unfiltered (_("\"dump tekhex\" must be followed by a subcommand.\n")); - help_list (tekhex_cmdlist, "dump tekhex ", all_commands, gdb_stdout); -} - -static void -binary_dump_command (const char *cmd, int from_tty) -{ - printf_unfiltered (_("\"dump binary\" must be followed by a subcommand.\n")); - help_list (binary_dump_cmdlist, "dump binary ", all_commands, gdb_stdout); -} - -static void -binary_append_command (const char *cmd, int from_tty) -{ - printf_unfiltered (_("\"append binary\" must be followed by a subcommand.\n")); - help_list (binary_append_cmdlist, "append binary ", all_commands, - gdb_stdout); -} - +void _initialize_cli_dump (); void -_initialize_cli_dump (void) +_initialize_cli_dump () { struct cmd_list_element *c; - add_prefix_cmd ("dump", class_vars, dump_command, - _("Dump target code/data to a local file."), - &dump_cmdlist, "dump ", - 0/*allow-unknown*/, - &cmdlist); - add_prefix_cmd ("append", class_vars, append_command, - _("Append target code/data to a local file."), - &append_cmdlist, "append ", - 0/*allow-unknown*/, - &cmdlist); + add_basic_prefix_cmd ("dump", class_vars, + _("Dump target code/data to a local file."), + &dump_cmdlist, "dump ", + 0/*allow-unknown*/, + &cmdlist); + add_basic_prefix_cmd ("append", class_vars, + _("Append target code/data to a local file."), + &append_cmdlist, "append ", + 0/*allow-unknown*/, + &cmdlist); add_dump_command ("memory", dump_memory_command, "\ Write contents of memory to a raw binary file.\n\ @@ -648,41 +592,41 @@ Arguments are FILE EXPRESSION. Writes the value of EXPRESSION to\n\ the specified FILE in raw target ordered bytes."); - add_prefix_cmd ("srec", all_commands, srec_dump_command, - _("Write target code/data to an srec file."), - &srec_cmdlist, "dump srec ", - 0 /*allow-unknown*/, - &dump_cmdlist); - - add_prefix_cmd ("ihex", all_commands, ihex_dump_command, - _("Write target code/data to an intel hex file."), - &ihex_cmdlist, "dump ihex ", - 0 /*allow-unknown*/, - &dump_cmdlist); - - add_prefix_cmd ("verilog", all_commands, verilog_dump_command, - _("Write target code/data to a verilog hex file."), - &verilog_cmdlist, "dump verilog ", - 0 /*allow-unknown*/, - &dump_cmdlist); - - add_prefix_cmd ("tekhex", all_commands, tekhex_dump_command, - _("Write target code/data to a tekhex file."), - &tekhex_cmdlist, "dump tekhex ", - 0 /*allow-unknown*/, - &dump_cmdlist); - - add_prefix_cmd ("binary", all_commands, binary_dump_command, - _("Write target code/data to a raw binary file."), - &binary_dump_cmdlist, "dump binary ", - 0 /*allow-unknown*/, - &dump_cmdlist); - - add_prefix_cmd ("binary", all_commands, binary_append_command, - _("Append target code/data to a raw binary file."), - &binary_append_cmdlist, "append binary ", - 0 /*allow-unknown*/, - &append_cmdlist); + add_basic_prefix_cmd ("srec", all_commands, + _("Write target code/data to an srec file."), + &srec_cmdlist, "dump srec ", + 0 /*allow-unknown*/, + &dump_cmdlist); + + add_basic_prefix_cmd ("ihex", all_commands, + _("Write target code/data to an intel hex file."), + &ihex_cmdlist, "dump ihex ", + 0 /*allow-unknown*/, + &dump_cmdlist); + + add_basic_prefix_cmd ("verilog", all_commands, + _("Write target code/data to a verilog hex file."), + &verilog_cmdlist, "dump verilog ", + 0 /*allow-unknown*/, + &dump_cmdlist); + + add_basic_prefix_cmd ("tekhex", all_commands, + _("Write target code/data to a tekhex file."), + &tekhex_cmdlist, "dump tekhex ", + 0 /*allow-unknown*/, + &dump_cmdlist); + + add_basic_prefix_cmd ("binary", all_commands, + _("Write target code/data to a raw binary file."), + &binary_dump_cmdlist, "dump binary ", + 0 /*allow-unknown*/, + &dump_cmdlist); + + add_basic_prefix_cmd ("binary", all_commands, + _("Append target code/data to a raw binary file."), + &binary_append_cmdlist, "append binary ", + 0 /*allow-unknown*/, + &append_cmdlist); add_cmd ("memory", all_commands, dump_srec_memory, _("\ Write contents of memory to an srec file.\n\ diff -Nru gdb-9.1/gdb/cli/cli-interp.c gdb-10.2/gdb/cli/cli-interp.c --- gdb-9.1/gdb/cli/cli-interp.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/cli/cli-interp.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* CLI Definitions for GDB, the GNU debugger. - Copyright (C) 2002-2020 Free Software Foundation, Inc. + Copyright (C) 2002-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -467,8 +467,9 @@ /* Standard gdb initialization hook. */ +void _initialize_cli_interp (); void -_initialize_cli_interp (void) +_initialize_cli_interp () { interp_factory_register (INTERP_CONSOLE, cli_interp_factory); diff -Nru gdb-9.1/gdb/cli/cli-interp.h gdb-10.2/gdb/cli/cli-interp.h --- gdb-9.1/gdb/cli/cli-interp.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/cli/cli-interp.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* CLI Definitions for GDB, the GNU debugger. - Copyright (C) 2016-2020 Free Software Foundation, Inc. + Copyright (C) 2016-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/cli/cli-logging.c gdb-10.2/gdb/cli/cli-logging.c --- gdb-9.1/gdb/cli/cli-logging.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/cli/cli-logging.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Command-line output logging for GDB, the GNU debugger. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -165,54 +165,18 @@ saved_filename = NULL; } -static void -set_logging_command (const char *args, int from_tty) -{ - printf_unfiltered (_("\"set logging\" lets you log output to a file.\n" - "Usage: set logging on [FILENAME]\n" - " set logging off\n" - " set logging file FILENAME\n" - " set logging overwrite [on|off]\n" - " set logging redirect [on|off]\n")); -} - -static void -show_logging_command (const char *args, int from_tty) -{ - if (saved_filename) - printf_unfiltered (_("Currently logging to \"%s\".\n"), saved_filename); - if (saved_filename == NULL - || strcmp (logging_filename, saved_filename) != 0) - printf_unfiltered (_("Future logs will be written to %s.\n"), - logging_filename); - - if (logging_overwrite) - printf_unfiltered (_("Logs will overwrite the log file.\n")); - else - printf_unfiltered (_("Logs will be appended to the log file.\n")); - - if (logging_redirect) - printf_unfiltered (_("Output will be sent only to the log file.\n")); - else - printf_unfiltered (_("Output will be logged and displayed.\n")); - - if (debug_redirect) - printf_unfiltered (_("Debug output will be sent only to the log file.\n")); - else - printf_unfiltered (_("Debug output will be logged and displayed.\n")); -} - +void _initialize_cli_logging (); void -_initialize_cli_logging (void) +_initialize_cli_logging () { static struct cmd_list_element *set_logging_cmdlist, *show_logging_cmdlist; - add_prefix_cmd ("logging", class_support, set_logging_command, - _("Set logging options."), &set_logging_cmdlist, - "set logging ", 0, &setlist); - add_prefix_cmd ("logging", class_support, show_logging_command, - _("Show logging options."), &show_logging_cmdlist, - "show logging ", 0, &showlist); + add_basic_prefix_cmd ("logging", class_support, + _("Set logging options."), &set_logging_cmdlist, + "set logging ", 0, &setlist); + add_show_prefix_cmd ("logging", class_support, + _("Show logging options."), &show_logging_cmdlist, + "show logging ", 0, &showlist); add_setshow_boolean_cmd ("overwrite", class_support, &logging_overwrite, _("\ Set whether logging overwrites or appends to the log file."), _("\ Show whether logging overwrites or appends to the log file."), _("\ diff -Nru gdb-9.1/gdb/cli/cli-option.c gdb-10.2/gdb/cli/cli-option.c --- gdb-9.1/gdb/cli/cli-option.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/cli/cli-option.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* CLI options framework, for GDB. - Copyright (C) 2017-2020 Free Software Foundation, Inc. + Copyright (C) 2017-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/cli/cli-option.h gdb-10.2/gdb/cli/cli-option.h --- gdb-9.1/gdb/cli/cli-option.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/cli/cli-option.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* CLI options framework, for GDB. - Copyright (C) 2017-2020 Free Software Foundation, Inc. + Copyright (C) 2017-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/cli/cli-script.c gdb-10.2/gdb/cli/cli-script.c --- gdb-9.1/gdb/cli/cli-script.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/cli/cli-script.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* GDB CLI command scripting. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -392,10 +392,6 @@ void execute_control_commands (struct command_line *cmdlines, int from_tty) { - /* Set the instream to 0, indicating execution of a - user-defined function. */ - scoped_restore restore_instream - = make_scoped_restore (¤t_ui->instream, nullptr); scoped_restore save_async = make_scoped_restore (¤t_ui->async, 0); scoped_restore save_nesting = make_scoped_restore (&command_nest_depth, command_nest_depth + 1); @@ -464,6 +460,11 @@ if (user_args_stack.size () > max_user_call_depth) error (_("Max user call depth exceeded -- command aborted.")); + /* Set the instream to nullptr, indicating execution of a + user-defined function. */ + scoped_restore restore_instream + = make_scoped_restore (¤t_ui->instream, nullptr); + execute_control_commands (cmdlines, 0); } @@ -974,7 +975,7 @@ /* Resolve command abbreviations (e.g. 'ws' for 'while-stepping'). */ const char *cmd_name = p; struct cmd_list_element *cmd - = lookup_cmd_1 (&cmd_name, cmdlist, NULL, 1); + = lookup_cmd_1 (&cmd_name, cmdlist, NULL, NULL, 1); cmd_name = skip_spaces (cmd_name); bool inline_cmd = *cmd_name != '\0'; @@ -1331,7 +1332,7 @@ std::string prefix (*comname, last_word - 1); const char *tem = prefix.c_str (); - c = lookup_cmd (&tem, cmdlist, "", 0, 1); + c = lookup_cmd (&tem, cmdlist, "", NULL, 0, 1); if (c->prefixlist == NULL) error (_("\"%s\" is not a prefix command."), prefix.c_str ()); @@ -1387,7 +1388,7 @@ /* Look it up, and verify that we got an exact match. */ tem = comname; - c = lookup_cmd (&tem, *list, "", -1, 1); + c = lookup_cmd (&tem, *list, "", NULL, -1, 1); if (c && strcmp (comname, c->name) != 0) c = 0; @@ -1432,7 +1433,7 @@ { /* Look up cmd it hooks, and verify that we got an exact match. */ tem = comname + hook_name_size; - hookc = lookup_cmd (&tem, *list, "", -1, 0); + hookc = lookup_cmd (&tem, *list, "", NULL, -1, 0); if (hookc && strcmp (comname + hook_name_size, hookc->name) != 0) hookc = 0; if (!hookc && commands == nullptr) @@ -1518,7 +1519,7 @@ list = validate_comname (&comname); tem = comname; - c = lookup_cmd (&tem, *list, "", 0, 1); + c = lookup_cmd (&tem, *list, "", NULL, 0, 1); if (c->theclass != class_user) error (_("Command \"%s\" is built-in."), comfull); @@ -1528,8 +1529,7 @@ counted_command_line doclines = read_command_lines (prompt.c_str (), from_tty, 0, 0); - if (c->doc) - xfree ((char *) c->doc); + xfree ((char *) c->doc); { struct command_line *cl1; @@ -1567,7 +1567,7 @@ /* Look it up, and verify that we got an exact match. */ tem = comname; - c = lookup_cmd (&tem, *list, "", -1, 1); + c = lookup_cmd (&tem, *list, "", NULL, -1, 1); if (c != nullptr && strcmp (comname, c->name) != 0) c = nullptr; @@ -1667,8 +1667,9 @@ } +void _initialize_cli_script (); void -_initialize_cli_script (void) +_initialize_cli_script () { struct cmd_list_element *c; diff -Nru gdb-9.1/gdb/cli/cli-script.h gdb-10.2/gdb/cli/cli-script.h --- gdb-9.1/gdb/cli/cli-script.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/cli/cli-script.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Header file for GDB CLI command implementation library. - Copyright (C) 2000-2020 Free Software Foundation, Inc. + Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/cli/cli-setshow.c gdb-10.2/gdb/cli/cli-setshow.c --- gdb-9.1/gdb/cli/cli-setshow.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/cli/cli-setshow.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Handle set and show GDB commands. - Copyright (C) 2000-2020 Free Software Foundation, Inc. + Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -733,39 +733,45 @@ /* Show all the settings in a list of show commands. */ void -cmd_show_list (struct cmd_list_element *list, int from_tty, const char *prefix) +cmd_show_list (struct cmd_list_element *list, int from_tty) { struct ui_out *uiout = current_uiout; ui_out_emit_tuple tuple_emitter (uiout, "showlist"); for (; list != NULL; list = list->next) { + /* We skip show command aliases to avoid showing duplicated values. */ + /* If we find a prefix, run its list, prefixing our output by its prefix (with "show " skipped). */ - if (list->prefixlist && !list->abbrev_flag) + if (list->prefixlist && list->cmd_pointer == nullptr) { ui_out_emit_tuple optionlist_emitter (uiout, "optionlist"); const char *new_prefix = strstr (list->prefixname, "show ") + 5; if (uiout->is_mi_like_p ()) uiout->field_string ("prefix", new_prefix); - cmd_show_list (*list->prefixlist, from_tty, new_prefix); + cmd_show_list (*list->prefixlist, from_tty); } - else + else if (list->theclass != no_set_class && list->cmd_pointer == nullptr) { - if (list->theclass != no_set_class) - { - ui_out_emit_tuple option_emitter (uiout, "option"); + ui_out_emit_tuple option_emitter (uiout, "option"); - uiout->text (prefix); - uiout->field_string ("name", list->name); - uiout->text (": "); - if (list->type == show_cmd) - do_show_command (NULL, from_tty, list); - else - cmd_func (list, NULL, from_tty); - } + { + /* If we find a prefix, output it (with "show " skipped). */ + const char *prefixname + = (list->prefix == nullptr ? "" + : strstr (list->prefix->prefixname, "show ") + 5); + uiout->text (prefixname); + } + uiout->field_string ("name", list->name); + uiout->text (": "); + if (list->type == show_cmd) + do_show_command (NULL, from_tty, list); + else + cmd_func (list, NULL, from_tty); } } } + diff -Nru gdb-9.1/gdb/cli/cli-setshow.h gdb-10.2/gdb/cli/cli-setshow.h --- gdb-9.1/gdb/cli/cli-setshow.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/cli/cli-setshow.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Header file for GDB CLI set and show commands implementation. - Copyright (C) 2000-2020 Free Software Foundation, Inc. + Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -60,7 +60,6 @@ /* Get a string version of C's current value. */ extern std::string get_setshow_command_value_string (const cmd_list_element *c); -extern void cmd_show_list (struct cmd_list_element *list, int from_tty, - const char *prefix); +extern void cmd_show_list (struct cmd_list_element *list, int from_tty); #endif /* CLI_CLI_SETSHOW_H */ diff -Nru gdb-9.1/gdb/cli/cli-style.c gdb-10.2/gdb/cli/cli-style.c --- gdb-9.1/gdb/cli/cli-style.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/cli/cli-style.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* CLI colorizing - Copyright (C) 2018-2020 Free Software Foundation, Inc. + Copyright (C) 2018-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -25,7 +25,7 @@ /* True if styling is enabled. */ -#if defined (__MSDOS__) || defined (__CYGWIN__) +#if defined (__MSDOS__) bool cli_styling = false; #else bool cli_styling = true; @@ -215,20 +215,16 @@ cli_style_option::add_setshow_commands (enum command_class theclass, const char *prefix_doc, struct cmd_list_element **set_list, - void (*do_set) (const char *args, - int from_tty), struct cmd_list_element **show_list, - void (*do_show) (const char *args, - int from_tty), bool skip_intensity) { m_set_prefix = std::string ("set style ") + m_name + " "; m_show_prefix = std::string ("show style ") + m_name + " "; - add_prefix_cmd (m_name, no_class, do_set, prefix_doc, &m_set_list, - m_set_prefix.c_str (), 0, set_list); - add_prefix_cmd (m_name, no_class, do_show, prefix_doc, &m_show_list, - m_show_prefix.c_str (), 0, show_list); + add_basic_prefix_cmd (m_name, no_class, prefix_doc, &m_set_list, + m_set_prefix.c_str (), 0, set_list); + add_show_prefix_cmd (m_name, no_class, prefix_doc, &m_show_list, + m_show_prefix.c_str (), 0, show_list); add_setshow_enum_cmd ("foreground", theclass, cli_colors, &m_foreground, @@ -261,20 +257,6 @@ static cmd_list_element *style_show_list; static void -set_style (const char *arg, int from_tty) -{ - printf_unfiltered (_("\"set style\" must be followed " - "by an appropriate subcommand.\n")); - help_list (style_set_list, "set style ", all_commands, gdb_stdout); -} - -static void -show_style (const char *arg, int from_tty) -{ - cmd_show_list (style_show_list, from_tty, ""); -} - -static void set_style_enabled (const char *args, int from_tty, struct cmd_list_element *c) { g_source_cache.clear (); @@ -301,26 +283,15 @@ fprintf_filtered (file, _("Source code styling is disabled.\n")); } -/* Builds the "set style NAME " prefix. */ - -static std::string -set_style_name (const char *name) -{ - std::string result ("set style "); - - result += name; - result += " "; - return result; -} - +void _initialize_cli_style (); void _initialize_cli_style () { - add_prefix_cmd ("style", no_class, set_style, _("\ + add_basic_prefix_cmd ("style", no_class, _("\ Style-specific settings.\n\ Configure various style-related variables, such as colors"), &style_set_list, "set style ", 0, &setlist); - add_prefix_cmd ("style", no_class, show_style, _("\ + add_show_prefix_cmd ("style", no_class, _("\ Style-specific settings.\n\ Configure various style-related variables, such as colors"), &style_show_list, "show style ", 0, &showlist); @@ -340,84 +311,75 @@ "Note that source styling only works if styling in general is enabled,\n\ see \"show style enabled\"." #else -"Source highlighting is disabled in this installation of gdb, because\n\ -it was not linked against GNU Source Highlight." +"Source highlighting may be disabled in this installation of gdb, because\n\ +it was not linked against GNU Source Highlight. However, it might still be\n\ +available if the appropriate extension is available at runtime." #endif ), set_style_enabled, show_style_sources, &style_set_list, &style_show_list); -#define STYLE_ADD_SETSHOW_COMMANDS(STYLE, PREFIX_DOC, SKIP) \ - STYLE.add_setshow_commands (no_class, PREFIX_DOC, \ - &style_set_list, \ - [] (const char *args, int from_tty) \ - { \ - help_list \ - (STYLE.set_list (), \ - set_style_name (STYLE.name ()).c_str (), \ - all_commands, \ - gdb_stdout); \ - }, \ - &style_show_list, \ - [] (const char *args, int from_tty) \ - { \ - cmd_show_list \ - (STYLE.show_list (), \ - from_tty, \ - ""); \ - }, SKIP) - - STYLE_ADD_SETSHOW_COMMANDS (file_name_style, - _("\ + file_name_style.add_setshow_commands (no_class, _("\ Filename display styling.\n\ -Configure filename colors and display intensity."), false); +Configure filename colors and display intensity."), + &style_set_list, &style_show_list, + false); - STYLE_ADD_SETSHOW_COMMANDS (function_name_style, - _("\ + function_name_style.add_setshow_commands (no_class, _("\ Function name display styling.\n\ -Configure function name colors and display intensity"), false); +Configure function name colors and display intensity"), + &style_set_list, &style_show_list, + false); - STYLE_ADD_SETSHOW_COMMANDS (variable_name_style, - _("\ + variable_name_style.add_setshow_commands (no_class, _("\ Variable name display styling.\n\ -Configure variable name colors and display intensity"), false); +Configure variable name colors and display intensity"), + &style_set_list, &style_show_list, + false); - STYLE_ADD_SETSHOW_COMMANDS (address_style, - _("\ + address_style.add_setshow_commands (no_class, _("\ Address display styling.\n\ -Configure address colors and display intensity"), false); +Configure address colors and display intensity"), + &style_set_list, &style_show_list, + false); - STYLE_ADD_SETSHOW_COMMANDS (title_style, - _("\ + title_style.add_setshow_commands (no_class, _("\ Title display styling.\n\ Configure title colors and display intensity\n\ Some commands (such as \"apropos -v REGEXP\") use the title style to improve\n\ -readability."), false); +readability."), + &style_set_list, &style_show_list, + false); - STYLE_ADD_SETSHOW_COMMANDS (highlight_style, - _("\ + highlight_style.add_setshow_commands (no_class, _("\ Highlight display styling.\n\ Configure highlight colors and display intensity\n\ Some commands use the highlight style to draw the attention to a part\n\ -of their output."), false); +of their output."), + &style_set_list, &style_show_list, + false); - STYLE_ADD_SETSHOW_COMMANDS (metadata_style, - _("\ + metadata_style.add_setshow_commands (no_class, _("\ Metadata display styling.\n\ Configure metadata colors and display intensity\n\ The \"metadata\" style is used when GDB displays information about\n\ -your data, for example \"<unavailable>\""), false); +your data, for example \"<unavailable>\""), + &style_set_list, &style_show_list, + false); - STYLE_ADD_SETSHOW_COMMANDS (tui_border_style, - _("\ + tui_border_style.add_setshow_commands (no_class, _("\ TUI border display styling.\n\ Configure TUI border colors\n\ The \"tui-border\" style is used when GDB displays the border of a\n\ -TUI window that does not have the focus."), true); +TUI window that does not have the focus."), + &style_set_list, &style_show_list, + true); - STYLE_ADD_SETSHOW_COMMANDS (tui_active_border_style, - _("\ + tui_active_border_style.add_setshow_commands (no_class, _("\ TUI active border display styling.\n\ Configure TUI active border colors\n\ The \"tui-active-border\" style is used when GDB displays the border of a\n\ -TUI window that does have the focus."), true); +TUI window that does have the focus."), + &style_set_list, + &style_show_list, + true); } diff -Nru gdb-9.1/gdb/cli/cli-style.h gdb-10.2/gdb/cli/cli-style.h --- gdb-9.1/gdb/cli/cli-style.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/cli/cli-style.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* CLI stylizing - Copyright (C) 2018-2020 Free Software Foundation, Inc. + Copyright (C) 2018-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -46,9 +46,7 @@ void add_setshow_commands (enum command_class theclass, const char *prefix_doc, struct cmd_list_element **set_list, - void (*do_set) (const char *args, int from_tty), struct cmd_list_element **show_list, - void (*do_show) (const char *args, int from_tty), bool skip_intensity); /* Return the 'set style NAME' command list, that can be used diff -Nru gdb-9.1/gdb/cli/cli-utils.c gdb-10.2/gdb/cli/cli-utils.c --- gdb-9.1/gdb/cli/cli-utils.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/cli/cli-utils.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* CLI utilities. - Copyright (C) 2011-2020 Free Software Foundation, Inc. + Copyright (C) 2011-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -37,7 +37,7 @@ if (val != NULL) /* Value history reference */ { - if (TYPE_CODE (value_type (val)) == TYPE_CODE_INT) + if (value_type (val)->code () == TYPE_CODE_INT) retval = value_as_long (val); else error (_("History value must have integer type.")); @@ -96,7 +96,7 @@ if (val) /* Value history reference */ { - if (TYPE_CODE (value_type (val)) == TYPE_CODE_INT) + if (value_type (val)->code () == TYPE_CODE_INT) retval = value_as_long (val); else { diff -Nru gdb-9.1/gdb/cli/cli-utils.h gdb-10.2/gdb/cli/cli-utils.h --- gdb-9.1/gdb/cli/cli-utils.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/cli/cli-utils.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* CLI utilities. - Copyright (C) 2011-2020 Free Software Foundation, Inc. + Copyright (C) 2011-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/cli-out.c gdb-10.2/gdb/cli-out.c --- gdb-9.1/gdb/cli-out.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/cli-out.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Output generating routines for GDB CLI. - Copyright (C) 1999-2020 Free Software Foundation, Inc. + Copyright (C) 1999-2021 Free Software Foundation, Inc. Contributed by Cygnus Solutions. Written by Fernando Nasser for Cygnus. diff -Nru gdb-9.1/gdb/cli-out.h gdb-10.2/gdb/cli-out.h --- gdb-9.1/gdb/cli-out.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/cli-out.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Output generating routines for GDB CLI. - Copyright (C) 1999-2020 Free Software Foundation, Inc. + Copyright (C) 1999-2021 Free Software Foundation, Inc. Contributed by Cygnus Solutions. This file is part of GDB. diff -Nru gdb-9.1/gdb/coff-pe-read.c gdb-10.2/gdb/coff-pe-read.c --- gdb-9.1/gdb/coff-pe-read.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/coff-pe-read.c 2021-04-25 04:06:26.000000000 +0000 @@ -2,7 +2,7 @@ convert to internal format, for GDB. Used as a last resort if no debugging symbols recognized. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -266,7 +266,7 @@ really be relocated properly, but nevertheless we make a stab at it, choosing an approach consistent with the history of this code. */ - baseaddr = ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile)); + baseaddr = objfile->text_section_offset (); reader.record_with_info (qualified_name.c_str (), vma - baseaddr, msymtype, section); @@ -342,7 +342,7 @@ unsigned long exp_funcbase; unsigned char *expdata, *erva; unsigned long name_rvas, ordinals, nexp, ordbase; - char *dll_name = (char *) dll->filename; + char *dll_name = (char *) bfd_get_filename (dll); int otherix = PE_SECTION_TABLE_SIZE; int is_pe64 = 0; int is_pe32 = 0; @@ -441,6 +441,12 @@ } } + if (expptr == 0) + { + /* no section contains export table rva */ + return; + } + export_rva = export_opthdrrva; export_size = export_opthdrsize; @@ -685,8 +691,9 @@ /* Adds "Set/show debug coff_pe_read" commands. */ +void _initialize_coff_pe_read (); void -_initialize_coff_pe_read (void) +_initialize_coff_pe_read () { add_setshow_zuinteger_cmd ("coff-pe-read", class_maintenance, &debug_coff_pe_read, diff -Nru gdb-9.1/gdb/coff-pe-read.h gdb-10.2/gdb/coff-pe-read.h --- gdb-9.1/gdb/coff-pe-read.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/coff-pe-read.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Interface to coff-pe-read.c (portable-executable-specific symbol reader). - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/coffread.c gdb-10.2/gdb/coffread.c --- gdb-9.1/gdb/coffread.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/coffread.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Read coff symbol tables and convert to internal format, for GDB. - Copyright (C) 1987-2020 Free Software Foundation, Inc. + Copyright (C) 1987-2021 Free Software Foundation, Inc. Contributed by David D. Johnson, Brown University (ddj@cs.brown.edu). This file is part of GDB. @@ -753,7 +753,7 @@ long symtab_offset, unsigned int nsyms, struct objfile *objfile) { - struct gdbarch *gdbarch = get_objfile_arch (objfile); + struct gdbarch *gdbarch = objfile->arch (); struct context_stack *newobj = nullptr; struct coff_symbol coff_symbol; struct coff_symbol *cs = &coff_symbol; @@ -919,8 +919,8 @@ file with no symbols. */ if (in_source_file) complete_symtab (filestring, - cs->c_value + ANOFFSET (objfile->section_offsets, - SECT_OFF_TEXT (objfile)), + (cs->c_value + + objfile->text_section_offset ()), main_aux.x_scn.x_scnlen); in_source_file = 0; } @@ -986,7 +986,7 @@ || cs->c_sclass == C_THUMBEXTFUNC || cs->c_sclass == C_THUMBEXT || (pe_file && (cs->c_sclass == C_STAT))) - offset = ANOFFSET (objfile->section_offsets, sec); + offset = objfile->section_offsets[sec]; if (bfd_section->flags & SEC_CODE) { @@ -1113,8 +1113,7 @@ NULL, cstk.start_addr, fcn_cs_saved.c_value + fcn_aux_saved.x_sym.x_misc.x_fsize - + ANOFFSET (objfile->section_offsets, - SECT_OFF_TEXT (objfile))); + + objfile->text_section_offset ()); within_function = 0; } break; @@ -1123,8 +1122,7 @@ if (strcmp (cs->c_name, ".bb") == 0) { tmpaddr = cs->c_value; - tmpaddr += ANOFFSET (objfile->section_offsets, - SECT_OFF_TEXT (objfile)); + tmpaddr += objfile->text_section_offset (); push_context (++depth, tmpaddr); } else if (strcmp (cs->c_name, ".eb") == 0) @@ -1147,9 +1145,7 @@ } if (*get_local_symbols () && !outermost_context_p ()) { - tmpaddr = - cs->c_value + ANOFFSET (objfile->section_offsets, - SECT_OFF_TEXT (objfile)); + tmpaddr = cs->c_value + objfile->text_section_offset (); /* Make a block for the local symbols within. */ finish_block (0, cstk.old_blocks, NULL, cstk.start_addr, tmpaddr); @@ -1406,7 +1402,7 @@ enter_linenos (long file_offset, int first_line, int last_line, struct objfile *objfile) { - struct gdbarch *gdbarch = get_objfile_arch (objfile); + struct gdbarch *gdbarch = objfile->arch (); char *rawptr; struct internal_lineno lptr; @@ -1441,8 +1437,7 @@ if (L_LNNO32 (&lptr) && L_LNNO32 (&lptr) <= last_line) { CORE_ADDR addr = lptr.l_addr.l_paddr; - addr += ANOFFSET (objfile->section_offsets, - SECT_OFF_TEXT (objfile)); + addr += objfile->text_section_offset (); record_line (get_current_subfile (), first_line + L_LNNO32 (&lptr), gdbarch_addr_bits_remove (gdbarch, addr)); @@ -1457,24 +1452,21 @@ { struct type *target = TYPE_TARGET_TYPE (type); struct type *real_target = TYPE_TARGET_TYPE (real_type); - int field_size = TYPE_NFIELDS (real_target) * sizeof (struct field); + int field_size = real_target->num_fields () * sizeof (struct field); TYPE_LENGTH (target) = TYPE_LENGTH (real_target); - TYPE_NFIELDS (target) = TYPE_NFIELDS (real_target); - TYPE_FIELDS (target) = (struct field *) TYPE_ALLOC (target, - field_size); - - memcpy (TYPE_FIELDS (target), - TYPE_FIELDS (real_target), - field_size); + target->set_num_fields (real_target->num_fields ()); - if (TYPE_NAME (real_target)) + field *fields = (struct field *) TYPE_ALLOC (target, field_size); + memcpy (fields, real_target->fields (), field_size); + target->set_fields (fields); + + if (real_target->name ()) { /* The previous copy of TYPE_NAME is allocated by process_coff_symbol. */ - if (TYPE_NAME (target)) - xfree ((char*) TYPE_NAME (target)); - TYPE_NAME (target) = xstrdup (TYPE_NAME (real_target)); + xfree ((char *) target->name ()); + target->set_name (xstrdup (real_target->name ())); } } @@ -1499,7 +1491,7 @@ from different files with the same name. */ if (SYMBOL_CLASS (real_sym) == LOC_TYPEDEF && SYMBOL_DOMAIN (real_sym) == VAR_DOMAIN - && TYPE_CODE (SYMBOL_TYPE (real_sym)) == TYPE_CODE_PTR + && SYMBOL_TYPE (real_sym)->code () == TYPE_CODE_PTR && TYPE_LENGTH (TYPE_TARGET_TYPE (SYMBOL_TYPE (real_sym))) != 0) { const char *name = real_sym->linkage_name (); @@ -1561,14 +1553,14 @@ union internal_auxent *aux, struct objfile *objfile) { - struct symbol *sym = allocate_symbol (objfile); + struct symbol *sym = new (&objfile->objfile_obstack) symbol; char *name; name = cs->c_name; name = EXTERNAL_NAME (name, objfile->obfd); - SYMBOL_SET_LANGUAGE (sym, get_current_subfile ()->language, - &objfile->objfile_obstack); - SYMBOL_SET_NAMES (sym, name, true, objfile); + sym->set_language (get_current_subfile ()->language, + &objfile->objfile_obstack); + sym->compute_and_set_names (name, true, objfile->per_bfd); /* default assumptions */ SYMBOL_VALUE (sym) = cs->c_value; @@ -1577,8 +1569,7 @@ if (ISFCN (cs->c_type)) { - SYMBOL_VALUE (sym) += ANOFFSET (objfile->section_offsets, - SECT_OFF_TEXT (objfile)); + SYMBOL_VALUE (sym) += objfile->text_section_offset (); SYMBOL_TYPE (sym) = lookup_function_type (decode_function_type (cs, cs->c_type, aux, objfile)); @@ -1610,8 +1601,7 @@ SYMBOL_ACLASS_INDEX (sym) = LOC_STATIC; SET_SYMBOL_VALUE_ADDRESS (sym, (CORE_ADDR) cs->c_value - + ANOFFSET (objfile->section_offsets, - SECT_OFF_TEXT (objfile))); + + objfile->section_offsets[SECT_OFF_TEXT (objfile)]); add_symbol_to_list (sym, get_global_symbols ()); break; @@ -1621,8 +1611,7 @@ SYMBOL_ACLASS_INDEX (sym) = LOC_STATIC; SET_SYMBOL_VALUE_ADDRESS (sym, (CORE_ADDR) cs->c_value - + ANOFFSET (objfile->section_offsets, - SECT_OFF_TEXT (objfile))); + + objfile->section_offsets[SECT_OFF_TEXT (objfile)]); if (within_function) { /* Static symbol of local scope. */ @@ -1666,10 +1655,10 @@ SYMBOL_DOMAIN (sym) = VAR_DOMAIN; /* If type has no name, give it one. */ - if (TYPE_NAME (SYMBOL_TYPE (sym)) == 0) + if (SYMBOL_TYPE (sym)->name () == 0) { - if (TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_PTR - || TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_FUNC) + if (SYMBOL_TYPE (sym)->code () == TYPE_CODE_PTR + || SYMBOL_TYPE (sym)->code () == TYPE_CODE_FUNC) { /* If we are giving a name to a type such as "pointer to foo" or "function returning foo", we @@ -1692,8 +1681,7 @@ ; } else - TYPE_NAME (SYMBOL_TYPE (sym)) = - xstrdup (sym->linkage_name ()); + SYMBOL_TYPE (sym)->set_name (xstrdup (sym->linkage_name ())); } /* Keep track of any type which points to empty structured @@ -1702,10 +1690,10 @@ not an empty structured type, though; the forward references work themselves out via the magic of coff_lookup_type. */ - if (TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_PTR + if (SYMBOL_TYPE (sym)->code () == TYPE_CODE_PTR && TYPE_LENGTH (TYPE_TARGET_TYPE (SYMBOL_TYPE (sym))) == 0 - && TYPE_CODE (TYPE_TARGET_TYPE (SYMBOL_TYPE (sym))) - != TYPE_CODE_UNDEF) + && TYPE_TARGET_TYPE (SYMBOL_TYPE (sym))->code () + != TYPE_CODE_UNDEF) { int i = hashname (sym->linkage_name ()); @@ -1724,11 +1712,11 @@ /* Some compilers try to be helpful by inventing "fake" names for anonymous enums, structures, and unions, like "~0fake" or ".0fake". Thanks, but no thanks... */ - if (TYPE_NAME (SYMBOL_TYPE (sym)) == 0) + if (SYMBOL_TYPE (sym)->name () == 0) if (sym->linkage_name () != NULL && *sym->linkage_name () != '~' && *sym->linkage_name () != '.') - TYPE_NAME (SYMBOL_TYPE (sym)) = xstrdup (sym->linkage_name ()); + SYMBOL_TYPE (sym)->set_name (xstrdup (sym->linkage_name ())); add_symbol_to_list (sym, get_file_symbols ()); break; @@ -1842,7 +1830,7 @@ union internal_auxent *aux, struct objfile *objfile) { - struct gdbarch *gdbarch = get_objfile_arch (objfile); + struct gdbarch *gdbarch = objfile->arch (); struct type *type; switch (c_type) @@ -1888,12 +1876,12 @@ { /* Anonymous structure type. */ type = coff_alloc_type (cs->c_symnum); - TYPE_CODE (type) = TYPE_CODE_STRUCT; - TYPE_NAME (type) = NULL; + type->set_code (TYPE_CODE_STRUCT); + type->set_name (NULL); INIT_CPLUS_SPECIFIC (type); TYPE_LENGTH (type) = 0; - TYPE_FIELDS (type) = 0; - TYPE_NFIELDS (type) = 0; + type->set_fields (nullptr); + type->set_num_fields (0); } else { @@ -1909,11 +1897,11 @@ { /* Anonymous union type. */ type = coff_alloc_type (cs->c_symnum); - TYPE_NAME (type) = NULL; + type->set_name (NULL); INIT_CPLUS_SPECIFIC (type); TYPE_LENGTH (type) = 0; - TYPE_FIELDS (type) = 0; - TYPE_NFIELDS (type) = 0; + type->set_fields (nullptr); + type->set_num_fields (0); } else { @@ -1922,7 +1910,7 @@ aux->x_sym.x_fcnary.x_fcn.x_endndx.l, objfile); } - TYPE_CODE (type) = TYPE_CODE_UNION; + type->set_code (TYPE_CODE_UNION); return type; case T_ENUM: @@ -1930,11 +1918,11 @@ { /* Anonymous enum type. */ type = coff_alloc_type (cs->c_symnum); - TYPE_CODE (type) = TYPE_CODE_ENUM; - TYPE_NAME (type) = NULL; + type->set_code (TYPE_CODE_ENUM); + type->set_name (NULL); TYPE_LENGTH (type) = 0; - TYPE_FIELDS (type) = 0; - TYPE_NFIELDS (type) = 0; + type->set_fields (nullptr); + type->set_num_fields (0); } else { @@ -1998,7 +1986,7 @@ int done = 0; type = coff_alloc_type (index); - TYPE_CODE (type) = TYPE_CODE_STRUCT; + type->set_code (TYPE_CODE_STRUCT); INIT_CPLUS_SPECIFIC (type); TYPE_LENGTH (type) = length; @@ -2020,8 +2008,8 @@ /* Save the data. */ list->field.name = obstack_strdup (&objfile->objfile_obstack, name); - FIELD_TYPE (list->field) = decode_type (ms, ms->c_type, - &sub_aux, objfile); + list->field.set_type (decode_type (ms, ms->c_type, &sub_aux, + objfile)); SET_FIELD_BITPOS (list->field, 8 * ms->c_value); FIELD_BITSIZE (list->field) = 0; nfields++; @@ -2036,8 +2024,8 @@ /* Save the data. */ list->field.name = obstack_strdup (&objfile->objfile_obstack, name); - FIELD_TYPE (list->field) = decode_type (ms, ms->c_type, - &sub_aux, objfile); + list->field.set_type (decode_type (ms, ms->c_type, &sub_aux, + objfile)); SET_FIELD_BITPOS (list->field, ms->c_value); FIELD_BITSIZE (list->field) = sub_aux.x_sym.x_misc.x_lnsz.x_size; nfields++; @@ -2050,14 +2038,14 @@ } /* Now create the vector of fields, and record how big it is. */ - TYPE_NFIELDS (type) = nfields; - TYPE_FIELDS (type) = (struct field *) - TYPE_ALLOC (type, sizeof (struct field) * nfields); + type->set_num_fields (nfields); + type->set_fields + ((struct field *) TYPE_ALLOC (type, sizeof (struct field) * nfields)); /* Copy the saved-up fields into the field vector. */ for (n = nfields; list; list = list->next) - TYPE_FIELD (type, --n) = list->field; + type->field (--n) = list->field; return type; } @@ -2070,7 +2058,7 @@ coff_read_enum_type (int index, int length, int lastsym, struct objfile *objfile) { - struct gdbarch *gdbarch = get_objfile_arch (objfile); + struct gdbarch *gdbarch = objfile->arch (); struct symbol *sym; struct type *type; int nsyms = 0; @@ -2103,7 +2091,7 @@ switch (ms->c_sclass) { case C_MOE: - sym = allocate_symbol (objfile); + sym = new (&objfile->objfile_obstack) symbol; name = obstack_strdup (&objfile->objfile_obstack, name); sym->set_linkage_name (name); @@ -2129,10 +2117,10 @@ TYPE_LENGTH (type) = length; else /* Assume ints. */ TYPE_LENGTH (type) = gdbarch_int_bit (gdbarch) / TARGET_CHAR_BIT; - TYPE_CODE (type) = TYPE_CODE_ENUM; - TYPE_NFIELDS (type) = nsyms; - TYPE_FIELDS (type) = (struct field *) - TYPE_ALLOC (type, sizeof (struct field) * nsyms); + type->set_code (TYPE_CODE_ENUM); + type->set_num_fields (nsyms); + type->set_fields + ((struct field *) TYPE_ALLOC (type, sizeof (struct field) * nsyms)); /* Find the symbols for the values and put them into the type. The symbols can be found in the symlist that we put them on @@ -2154,7 +2142,7 @@ SYMBOL_TYPE (xsym) = type; TYPE_FIELD_NAME (type, n) = xsym->linkage_name (); - SET_FIELD_ENUMVAL (TYPE_FIELD (type, n), SYMBOL_VALUE (xsym)); + SET_FIELD_ENUMVAL (type->field (n), SYMBOL_VALUE (xsym)); if (SYMBOL_VALUE (xsym) < 0) unsigned_enum = 0; TYPE_FIELD_BITSIZE (type, n) = 0; @@ -2194,8 +2182,9 @@ &psym_functions }; +void _initialize_coffread (); void -_initialize_coffread (void) +_initialize_coffread () { add_symtab_fns (bfd_target_coff_flavour, &coff_sym_fns); diff -Nru gdb-9.1/gdb/command.h gdb-10.2/gdb/command.h --- gdb-9.1/gdb/command.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/command.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Header file for command creation. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -29,35 +29,47 @@ /* Command classes are top-level categories into which commands are broken down for "help" purposes. - Notes on classes: class_alias is for alias commands which are not - abbreviations of the original command. class-pseudo is for - commands which are not really commands nor help topics ("stop"). */ + The class_alias is used for the user-defined aliases, defined + using the "alias" command. + + Aliases pre-defined by GDB (e.g. the alias "bt" of the "backtrace" command) + are not using the class_alias. + Different pre-defined aliases of the same command do not necessarily + have the same classes. For example, class_stack is used for the + "backtrace" and its "bt" alias", while "info stack" (also an alias + of "backtrace" uses class_info. */ enum command_class { - /* Special args to help_list */ - class_deprecated = -3, all_classes = -2, all_commands = -1, + /* Classes of commands followed by a comment giving the name + to use in "help <classname>". + Note that help accepts unambiguous abbreviated class names. */ + + /* Special classes to help_list */ + class_deprecated = -3, + all_classes = -2, /* help without <classname> */ + all_commands = -1, /* all */ + /* Classes of commands */ - no_class = -1, class_run = 0, class_vars, class_stack, class_files, - class_support, class_info, class_breakpoint, class_trace, - class_alias, class_bookmark, class_obscure, class_maintenance, - class_pseudo, class_tui, class_user, class_xdb, - no_set_class /* Used for "show" commands that have no corresponding - "set" command. */ -}; + no_class = -1, + class_run = 0, /* running */ + class_vars, /* data */ + class_stack, /* stack */ + class_files, /* files */ + class_support, /* support */ + class_info, /* status */ + class_breakpoint, /* breakpoints */ + class_trace, /* tracepoints */ + class_alias, /* aliases */ + class_bookmark, + class_obscure, /* obscure */ + class_maintenance, /* internals */ + class_tui, /* text-user-interface */ + class_user, /* user-defined */ -/* FIXME: cagney/2002-03-17: Once cmd_type() has been removed, ``enum - cmd_types'' can be moved from "command.h" to "cli-decode.h". */ -/* Not a set/show command. Note that some commands which begin with - "set" or "show" might be in this category, if their syntax does - not fall into one of the following categories. */ -typedef enum cmd_types - { - not_set_cmd, - set_cmd, - show_cmd - } -cmd_types; + /* Used for "show" commands that have no corresponding "set" command. */ + no_set_class +}; /* Types of "set" or "show" command. */ typedef enum var_types @@ -179,6 +191,20 @@ const char *, int, struct cmd_list_element **); +/* Like add_prefix_cmd, but sets the callback to a function that + simply calls help_list. */ + +extern struct cmd_list_element *add_basic_prefix_cmd + (const char *, enum command_class, const char *, struct cmd_list_element **, + const char *, int, struct cmd_list_element **); + +/* Like add_prefix_cmd, but useful for "show" prefixes. This sets the + callback to a function that simply calls cmd_show_list. */ + +extern struct cmd_list_element *add_show_prefix_cmd + (const char *, enum command_class, const char *, struct cmd_list_element **, + const char *, int, struct cmd_list_element **); + extern struct cmd_list_element *add_prefix_cmd_suppress_notification (const char *name, enum command_class theclass, cmd_const_cfunc_ftype *fun, @@ -243,20 +269,19 @@ extern void execute_cmd_pre_hook (struct cmd_list_element *cmd); extern void execute_cmd_post_hook (struct cmd_list_element *cmd); -/* Return the type of the command. */ -extern enum cmd_types cmd_type (struct cmd_list_element *cmd); - /* Flag for an ambiguous cmd_list result. */ #define CMD_LIST_AMBIGUOUS ((struct cmd_list_element *) -1) extern struct cmd_list_element *lookup_cmd (const char **, struct cmd_list_element *, const char *, + std::string *, int, int); extern struct cmd_list_element *lookup_cmd_1 (const char **, struct cmd_list_element *, struct cmd_list_element **, + std::string *, int); extern struct cmd_list_element *deprecate_cmd (struct cmd_list_element *, @@ -450,7 +475,7 @@ /* Do a "show" command for each thing on a command list. */ -extern void cmd_show_list (struct cmd_list_element *, int, const char *); +extern void cmd_show_list (struct cmd_list_element *, int); /* Used everywhere whenever at least one parameter is required and none is specified. */ diff -Nru gdb-9.1/gdb/compile/compile.c gdb-10.2/gdb/compile/compile.c --- gdb-9.1/gdb/compile/compile.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/compile/compile.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* General Compile and inject code - Copyright (C) 2014-2020 Free Software Foundation, Inc. + Copyright (C) 2014-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -691,13 +691,11 @@ expr_pc = get_frame_address_in_block (get_selected_frame (NULL)); /* Set up instance and context for the compiler. */ - if (current_language->la_get_compile_instance == NULL) + std::unique_ptr <compile_instance> compiler + (current_language->get_compile_instance ()); + if (compiler == nullptr) error (_("No compiler support for language %s."), current_language->la_name); - - compile_instance *compiler_instance - = current_language->la_get_compile_instance (); - std::unique_ptr<compile_instance> compiler (compiler_instance); compiler->set_print_callback (print_callback, NULL); compiler->set_scope (scope); compiler->set_block (expr_block); @@ -726,8 +724,8 @@ error (_("Neither a simple expression, or a multi-line specified.")); std::string code - = current_language->la_compute_program (compiler.get (), input, gdbarch, - expr_block, expr_pc); + = current_language->compute_program (compiler.get (), input, gdbarch, + expr_block, expr_pc); if (compile_debug) fprintf_unfiltered (gdb_stdlog, "debug output:\n\n%s", code.c_str ()); @@ -957,8 +955,9 @@ /* See compile.h. */ cmd_list_element *compile_cmd_element = nullptr; +void _initialize_compile (); void -_initialize_compile (void) +_initialize_compile () { struct cmd_list_element *c = NULL; diff -Nru gdb-9.1/gdb/compile/compile-c.h gdb-10.2/gdb/compile/compile-c.h --- gdb-9.1/gdb/compile/compile-c.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/compile/compile-c.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Header file for GDB compile C-language support. - Copyright (C) 2014-2020 Free Software Foundation, Inc. + Copyright (C) 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/compile/compile-cplus.h gdb-10.2/gdb/compile/compile-cplus.h --- gdb-9.1/gdb/compile/compile-cplus.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/compile/compile-cplus.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Header file for GDB compile C++ language support. - Copyright (C) 2016-2020 Free Software Foundation, Inc. + Copyright (C) 2016-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/compile/compile-cplus-symbols.c gdb-10.2/gdb/compile/compile-cplus-symbols.c --- gdb-9.1/gdb/compile/compile-cplus-symbols.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/compile/compile-cplus-symbols.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Convert symbols from GDB to GCC - Copyright (C) 2014-2020 Free Software Foundation, Inc. + Copyright (C) 2014-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -30,7 +30,7 @@ #include "value.h" #include "exceptions.h" #include "gdbtypes.h" -#include "dwarf2loc.h" +#include "dwarf2/loc.h" #include "cp-support.h" #include "gdbcmd.h" #include "compile-c.h" @@ -73,9 +73,9 @@ switch (SYMBOL_CLASS (sym.symbol)) { case LOC_TYPEDEF: - if (TYPE_CODE (SYMBOL_TYPE (sym.symbol)) == TYPE_CODE_TYPEDEF) + if (SYMBOL_TYPE (sym.symbol)->code () == TYPE_CODE_TYPEDEF) kind = GCC_CP_SYMBOL_TYPEDEF; - else if (TYPE_CODE (SYMBOL_TYPE (sym.symbol)) == TYPE_CODE_NAMESPACE) + else if (SYMBOL_TYPE (sym.symbol)->code () == TYPE_CODE_NAMESPACE) return; break; @@ -94,7 +94,7 @@ break; case LOC_CONST: - if (TYPE_CODE (SYMBOL_TYPE (sym.symbol)) == TYPE_CODE_ENUM) + if (SYMBOL_TYPE (sym.symbol)->code () == TYPE_CODE_ENUM) { /* Already handled by convert_enum. */ return; diff -Nru gdb-9.1/gdb/compile/compile-cplus-types.c gdb-10.2/gdb/compile/compile-cplus-types.c --- gdb-9.1/gdb/compile/compile-cplus-types.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/compile/compile-cplus-types.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Convert types from GDB to GCC - Copyright (C) 2014-2020 Free Software Foundation, Inc. + Copyright (C) 2014-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -88,7 +88,7 @@ enum gcc_cp_symbol_kind get_method_access_flag (const struct type *type, int fni, int num) { - gdb_assert (TYPE_CODE (type) == TYPE_CODE_STRUCT); + gdb_assert (type->code () == TYPE_CODE_STRUCT); /* If this type was not declared a class, everything is public. */ if (!TYPE_DECLARED_CLASS (type)) @@ -161,7 +161,7 @@ scope.push_back (comp); - if (TYPE_CODE (SYMBOL_TYPE (bsymbol.symbol)) != TYPE_CODE_NAMESPACE) + if (SYMBOL_TYPE (bsymbol.symbol)->code () != TYPE_CODE_NAMESPACE) { /* We're done. */ break; @@ -271,7 +271,7 @@ (m_scopes.back ().begin (), m_scopes.back ().end () - 1, [this] (const scope_component &comp) { - gdb_assert (TYPE_CODE (SYMBOL_TYPE (comp.bsymbol.symbol)) + gdb_assert (SYMBOL_TYPE (comp.bsymbol.symbol)->code () == TYPE_CODE_NAMESPACE); const char *ns = (comp.name == CP_ANONYMOUS_NAMESPACE_STR ? nullptr @@ -313,7 +313,7 @@ std::for_each (current.begin (),current.end () - 1, [this] (const scope_component &comp) { - gdb_assert (TYPE_CODE (SYMBOL_TYPE (comp.bsymbol.symbol)) + gdb_assert (SYMBOL_TYPE (comp.bsymbol.symbol)->code () == TYPE_CODE_NAMESPACE); this->plugin ().pop_binding_level (comp.name.c_str ()); }); @@ -364,7 +364,7 @@ } else { - if (TYPE_NAME (type) == nullptr) + if (type->name () == nullptr) { /* Anonymous type */ @@ -383,8 +383,8 @@ { scope_component comp = { - decl_name (TYPE_NAME (type)).get (), - lookup_symbol (TYPE_NAME (type), block (), VAR_DOMAIN, nullptr) + decl_name (type->name ()).get (), + lookup_symbol (type->name (), block (), VAR_DOMAIN, nullptr) }; scope.push_back (comp); } @@ -413,7 +413,7 @@ gcc_type target = instance->convert_type (TYPE_TARGET_TYPE (type)); enum gcc_cp_ref_qualifiers quals = GCC_CP_REF_QUAL_NONE; - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_REF: quals = GCC_CP_REF_QUAL_LVALUE; @@ -453,10 +453,10 @@ compile_cplus_convert_array (compile_cplus_instance *instance, struct type *type) { - struct type *range = TYPE_INDEX_TYPE (type); + struct type *range = type->index_type (); gcc_type element_type = instance->convert_type (TYPE_TARGET_TYPE (type)); - if (TYPE_LOW_BOUND_KIND (range) != PROP_CONST) + if (range->bounds ()->low.kind () != PROP_CONST) { const char *s = _("array type with non-constant" " lower bound is not supported"); @@ -464,7 +464,7 @@ return instance->plugin ().error (s); } - if (TYPE_LOW_BOUND (range) != 0) + if (range->bounds ()->low.const_val () != 0) { const char *s = _("cannot convert array type with " "non-zero lower bound to C"); @@ -472,8 +472,8 @@ return instance->plugin ().error (s); } - if (TYPE_HIGH_BOUND_KIND (range) == PROP_LOCEXPR - || TYPE_HIGH_BOUND_KIND (range) == PROP_LOCLIST) + if (range->bounds ()->high.kind () == PROP_LOCEXPR + || range->bounds ()->high.kind () == PROP_LOCLIST) { if (TYPE_VECTOR (type)) { @@ -483,7 +483,7 @@ } std::string upper_bound - = c_get_range_decl_name (&TYPE_RANGE_DATA (range)->high); + = c_get_range_decl_name (&range->bounds ()->high); return instance->plugin ().build_vla_array_type (element_type, upper_bound.c_str ()); } @@ -515,13 +515,13 @@ struct type *type, enum gcc_cp_symbol_kind nested_access) { - compile_scope scope = instance->new_scope (TYPE_NAME (type), type); + compile_scope scope = instance->new_scope (type->name (), type); if (scope.nested_type () != GCC_TYPE_NONE) return scope.nested_type (); gdb::unique_xmalloc_ptr<char> name - = compile_cplus_instance::decl_name (TYPE_NAME (type)); + = compile_cplus_instance::decl_name (type->name ()); /* Make sure the scope for this type has been pushed. */ instance->enter_scope (std::move (scope)); @@ -580,7 +580,7 @@ compile_cplus_convert_struct_or_union_members (compile_cplus_instance *instance, struct type *type, gcc_type comp_type) { - for (int i = TYPE_N_BASECLASSES (type); i < TYPE_NFIELDS (type); ++i) + for (int i = TYPE_N_BASECLASSES (type); i < type->num_fields (); ++i) { const char *field_name = TYPE_FIELD_NAME (type, i); @@ -593,9 +593,9 @@ field_name = nullptr; gcc_type field_type - = instance->convert_type (TYPE_FIELD_TYPE (type, i)); + = instance->convert_type (type->field (i).type ()); - if (field_is_static (&TYPE_FIELD (type, i))) + if (field_is_static (&type->field (i))) { CORE_ADDR physaddr; @@ -648,7 +648,7 @@ | get_field_access_flag (type, i); if (bitsize == 0) - bitsize = 8 * TYPE_LENGTH (TYPE_FIELD_TYPE (type, i)); + bitsize = 8 * TYPE_LENGTH (type->field (i).type ()); instance->plugin ().build_field (field_name, field_type, field_flags, bitsize, @@ -807,10 +807,10 @@ /* Get the decl name of this type. */ gdb::unique_xmalloc_ptr<char> name - = compile_cplus_instance::decl_name (TYPE_NAME (type)); + = compile_cplus_instance::decl_name (type->name ()); /* Create a new scope for TYPE. */ - compile_scope scope = instance->new_scope (TYPE_NAME (type), type); + compile_scope scope = instance->new_scope (type->name (), type); if (scope.nested_type () != GCC_TYPE_NONE) { @@ -826,7 +826,7 @@ table. This lets recursive types work. */ gcc_decl resuld; - if (TYPE_CODE (type) == TYPE_CODE_STRUCT) + if (type->code () == TYPE_CODE_STRUCT) { const char *what = TYPE_DECLARED_CLASS (type) ? "struct" : "class"; @@ -839,14 +839,14 @@ } else { - gdb_assert (TYPE_CODE (type) == TYPE_CODE_UNION); + gdb_assert (type->code () == TYPE_CODE_UNION); resuld = instance->plugin ().build_decl ("union", name.get (), GCC_CP_SYMBOL_UNION | nested_access, 0, nullptr, 0, filename, line); } gcc_type result; - if (TYPE_CODE (type) == TYPE_CODE_STRUCT) + if (type->code () == TYPE_CODE_STRUCT) { struct gcc_vbase_array bases; int num_baseclasses = TYPE_N_BASECLASSES (type); @@ -878,7 +878,7 @@ } else { - gdb_assert (TYPE_CODE (type) == TYPE_CODE_UNION); + gdb_assert (type->code () == TYPE_CODE_UNION); result = instance->plugin ().start_class_type (name.get (), resuld, nullptr, filename, line); } @@ -913,7 +913,7 @@ bool scoped_enum_p = false; /* Create a new scope for this type. */ - compile_scope scope = instance->new_scope (TYPE_NAME (type), type); + compile_scope scope = instance->new_scope (type->name (), type); if (scope.nested_type () != GCC_TYPE_NONE) { @@ -923,7 +923,7 @@ } gdb::unique_xmalloc_ptr<char> name - = compile_cplus_instance::decl_name (TYPE_NAME (type)); + = compile_cplus_instance::decl_name (type->name ()); /* Push all scopes. */ instance->enter_scope (std::move (scope)); @@ -938,7 +938,7 @@ ? GCC_CP_FLAG_ENUM_SCOPED : GCC_CP_FLAG_ENUM_NOFLAG), nullptr, 0); - for (int i = 0; i < TYPE_NFIELDS (type); ++i) + for (int i = 0; i < type->num_fields (); ++i) { gdb::unique_xmalloc_ptr<char> fname = compile_cplus_instance::decl_name (TYPE_FIELD_NAME (type, i)); @@ -986,9 +986,9 @@ gcc_type return_type = instance->convert_type (target_type); struct gcc_type_array array = - { TYPE_NFIELDS (type), XNEWVEC (gcc_type, TYPE_NFIELDS (type)) }; + { type->num_fields (), XNEWVEC (gcc_type, type->num_fields ()) }; int artificials = 0; - for (int i = 0; i < TYPE_NFIELDS (type); ++i) + for (int i = 0; i < type->num_fields (); ++i) { if (strip_artificial && TYPE_FIELD_ARTIFICIAL (type, i)) { @@ -998,7 +998,7 @@ else { array.elements[i - artificials] - = instance->convert_type (TYPE_FIELD_TYPE (type, i)); + = instance->convert_type (type->field (i).type ()); } } @@ -1022,7 +1022,7 @@ } return instance->plugin ().get_int_type - (TYPE_UNSIGNED (type), TYPE_LENGTH (type), TYPE_NAME (type)); + (TYPE_UNSIGNED (type), TYPE_LENGTH (type), type->name ()); } /* Convert a floating-point type to its gcc representation. */ @@ -1032,7 +1032,7 @@ struct type *type) { return instance->plugin ().get_float_type - (TYPE_LENGTH (type), TYPE_NAME (type)); + (TYPE_LENGTH (type), type->name ()); } /* Convert the 'void' type to its gcc representation. */ @@ -1102,9 +1102,9 @@ compile_cplus_convert_namespace (compile_cplus_instance *instance, struct type *type) { - compile_scope scope = instance->new_scope (TYPE_NAME (type), type); + compile_scope scope = instance->new_scope (type->name (), type); gdb::unique_xmalloc_ptr<char> name - = compile_cplus_instance::decl_name (TYPE_NAME (type)); + = compile_cplus_instance::decl_name (type->name ()); /* Push scope. */ instance->enter_scope (std::move (scope)); @@ -1140,7 +1140,7 @@ | TYPE_INSTANCE_FLAG_RESTRICT)) != 0) return compile_cplus_convert_qualified (instance, type); - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_REF: case TYPE_CODE_RVALUE_REF: @@ -1198,7 +1198,7 @@ } std::string s = string_printf (_("unhandled TYPE_CODE %d"), - TYPE_CODE (type)); + type->code ()); return instance->plugin ().error (s.c_str ()); } @@ -1404,6 +1404,7 @@ return pop_binding_level (); } +void _initialize_compile_cplus_types (); void _initialize_compile_cplus_types () { diff -Nru gdb-9.1/gdb/compile/compile-c-support.c gdb-10.2/gdb/compile/compile-c-support.c --- gdb-9.1/gdb/compile/compile-c-support.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/compile/compile-c-support.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* C/C++ language support for compilation. - Copyright (C) 2014-2020 Free Software Foundation, Inc. + Copyright (C) 2014-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -242,7 +242,7 @@ maximally-aligned array of the correct size. */ fputs_unfiltered (" ", stream); - switch (TYPE_CODE (regtype)) + switch (regtype->code ()) { case TYPE_CODE_PTR: fprintf_filtered (stream, "__gdb_uintptr %s", @@ -660,7 +660,7 @@ cplus_add_code_header, c_add_code_footer, cplus_add_input> cplus_compile_program; -/* The la_compute_program method for C. */ +/* The compute_program method for C. */ std::string c_compute_program (compile_instance *inst, @@ -675,7 +675,7 @@ return program.compute (input, expr_block, expr_pc); } -/* The la_compute_program method for C++. */ +/* The compute_program method for C++. */ std::string cplus_compute_program (compile_instance *inst, diff -Nru gdb-9.1/gdb/compile/compile-c-symbols.c gdb-10.2/gdb/compile/compile-c-symbols.c --- gdb-9.1/gdb/compile/compile-c-symbols.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/compile/compile-c-symbols.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Convert symbols from GDB to GCC - Copyright (C) 2014-2020 Free Software Foundation, Inc. + Copyright (C) 2014-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -29,7 +29,7 @@ #include "value.h" #include "exceptions.h" #include "gdbtypes.h" -#include "dwarf2loc.h" +#include "dwarf2/loc.h" @@ -99,7 +99,7 @@ break; case LOC_CONST: - if (TYPE_CODE (SYMBOL_TYPE (sym.symbol)) == TYPE_CODE_ENUM) + if (SYMBOL_TYPE (sym.symbol)->code () == TYPE_CODE_ENUM) { /* Already handled by convert_enum. */ return; @@ -497,14 +497,14 @@ if (TYPE_IS_REFERENCE (type)) type = check_typedef (TYPE_TARGET_TYPE (type)); - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_RANGE: { - if (TYPE_HIGH_BOUND_KIND (type) == PROP_LOCEXPR - || TYPE_HIGH_BOUND_KIND (type) == PROP_LOCLIST) + if (type->bounds ()->high.kind () == PROP_LOCEXPR + || type->bounds ()->high.kind () == PROP_LOCLIST) { - const struct dynamic_prop *prop = &TYPE_RANGE_DATA (type)->high; + const struct dynamic_prop *prop = &type->bounds ()->high; std::string name = c_get_range_decl_name (prop); dwarf2_compile_property_to_c (stream, name.c_str (), @@ -516,7 +516,7 @@ case TYPE_CODE_ARRAY: generate_vla_size (compiler, stream, gdbarch, registers_used, pc, - TYPE_INDEX_TYPE (type), sym); + type->index_type (), sym); generate_vla_size (compiler, stream, gdbarch, registers_used, pc, TYPE_TARGET_TYPE (type), sym); break; @@ -526,10 +526,10 @@ { int i; - for (i = 0; i < TYPE_NFIELDS (type); ++i) - if (!field_is_static (&TYPE_FIELD (type, i))) + for (i = 0; i < type->num_fields (); ++i) + if (!field_is_static (&type->field (i))) generate_vla_size (compiler, stream, gdbarch, registers_used, pc, - TYPE_FIELD_TYPE (type, i), sym); + type->field (i).type (), sym); } break; } diff -Nru gdb-9.1/gdb/compile/compile-c-types.c gdb-10.2/gdb/compile/compile-c-types.c --- gdb-9.1/gdb/compile/compile-c-types.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/compile/compile-c-types.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Convert types from GDB to GCC - Copyright (C) 2014-2020 Free Software Foundation, Inc. + Copyright (C) 2014-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -40,19 +40,19 @@ convert_array (compile_c_instance *context, struct type *type) { gcc_type element_type; - struct type *range = TYPE_INDEX_TYPE (type); + struct type *range = type->index_type (); element_type = context->convert_type (TYPE_TARGET_TYPE (type)); - if (TYPE_LOW_BOUND_KIND (range) != PROP_CONST) + if (range->bounds ()->low.kind () != PROP_CONST) return context->plugin ().error (_("array type with non-constant" " lower bound is not supported")); - if (TYPE_LOW_BOUND (range) != 0) + if (range->bounds ()->low.const_val () != 0) return context->plugin ().error (_("cannot convert array type with " "non-zero lower bound to C")); - if (TYPE_HIGH_BOUND_KIND (range) == PROP_LOCEXPR - || TYPE_HIGH_BOUND_KIND (range) == PROP_LOCLIST) + if (range->bounds ()->high.kind () == PROP_LOCEXPR + || range->bounds ()->high.kind () == PROP_LOCLIST) { gcc_type result; @@ -61,7 +61,7 @@ " is not supported")); std::string upper_bound - = c_get_range_decl_name (&TYPE_RANGE_DATA (range)->high); + = c_get_range_decl_name (&range->bounds ()->high); result = context->plugin ().build_vla_array_type (element_type, upper_bound.c_str ()); return result; @@ -94,23 +94,23 @@ /* First we create the resulting type and enter it into our hash table. This lets recursive types work. */ - if (TYPE_CODE (type) == TYPE_CODE_STRUCT) + if (type->code () == TYPE_CODE_STRUCT) result = context->plugin ().build_record_type (); else { - gdb_assert (TYPE_CODE (type) == TYPE_CODE_UNION); + gdb_assert (type->code () == TYPE_CODE_UNION); result = context->plugin ().build_union_type (); } context->insert_type (type, result); - for (i = 0; i < TYPE_NFIELDS (type); ++i) + for (i = 0; i < type->num_fields (); ++i) { gcc_type field_type; unsigned long bitsize = TYPE_FIELD_BITSIZE (type, i); - field_type = context->convert_type (TYPE_FIELD_TYPE (type, i)); + field_type = context->convert_type (type->field (i).type ()); if (bitsize == 0) - bitsize = 8 * TYPE_LENGTH (TYPE_FIELD_TYPE (type, i)); + bitsize = 8 * TYPE_LENGTH (type->field (i).type ()); context->plugin ().build_add_field (result, TYPE_FIELD_NAME (type, i), field_type, @@ -134,7 +134,7 @@ TYPE_LENGTH (type)); result = context->plugin ().build_enum_type (int_type); - for (i = 0; i < TYPE_NFIELDS (type); ++i) + for (i = 0; i < type->num_fields (); ++i) { context->plugin ().build_add_enum_constant (result, TYPE_FIELD_NAME (type, i), TYPE_FIELD_ENUMVAL (type, i)); @@ -175,10 +175,10 @@ types. Those are impossible in C, though. */ return_type = context->convert_type (target_type); - array.n_elements = TYPE_NFIELDS (type); - array.elements = XNEWVEC (gcc_type, TYPE_NFIELDS (type)); - for (i = 0; i < TYPE_NFIELDS (type); ++i) - array.elements[i] = context->convert_type (TYPE_FIELD_TYPE (type, i)); + array.n_elements = type->num_fields (); + array.elements = XNEWVEC (gcc_type, type->num_fields ()); + for (i = 0; i < type->num_fields (); ++i) + array.elements[i] = context->convert_type (type->field (i).type ()); result = context->plugin ().build_function_type (return_type, &array, is_varargs); @@ -201,7 +201,7 @@ } return context->plugin ().int_type (TYPE_UNSIGNED (type), TYPE_LENGTH (type), - TYPE_NAME (type)); + type->name ()); } else return context->plugin ().int_type_v0 (TYPE_UNSIGNED (type), @@ -215,7 +215,7 @@ { if (context->plugin ().version () >= GCC_C_FE_VERSION_1) return context->plugin ().float_type (TYPE_LENGTH (type), - TYPE_NAME (type)); + type->name ()); else return context->plugin ().float_type_v0 (TYPE_LENGTH (type)); } @@ -282,7 +282,7 @@ | TYPE_INSTANCE_FLAG_RESTRICT)) != 0) return convert_qualified (context, type); - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_PTR: return convert_pointer (context, type); diff -Nru gdb-9.1/gdb/compile/compile.h gdb-10.2/gdb/compile/compile.h --- gdb-9.1/gdb/compile/compile.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/compile/compile.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Header file for Compile and inject module. - Copyright (C) 2014-2020 Free Software Foundation, Inc. + Copyright (C) 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -21,6 +21,7 @@ struct ui_file; struct gdbarch; struct dwarf2_per_cu_data; +struct dwarf2_per_objfile; struct symbol; struct dynamic_prop; @@ -53,6 +54,9 @@ OPT_PTR and OP_END are the bounds of the DWARF expression. PER_CU is the per-CU object used for looking up various other + things. + + PER_OBJFILE is the per-objfile object also used for looking up various other things. */ extern void compile_dwarf_expr_to_c (string_file *stream, @@ -64,7 +68,8 @@ unsigned int addr_size, const gdb_byte *op_ptr, const gdb_byte *op_end, - struct dwarf2_per_cu_data *per_cu); + dwarf2_per_cu_data *per_cu, + dwarf2_per_objfile *per_objfile); /* Compile a DWARF bounds expression to C, suitable for use by the compiler. @@ -88,6 +93,9 @@ OPT_PTR and OP_END are the bounds of the DWARF expression. PER_CU is the per-CU object used for looking up various other + things. + + PER_OBJFILE is the per-objfile object also used for looking up various other things. */ extern void compile_dwarf_bounds_to_c (string_file *stream, @@ -99,7 +107,8 @@ unsigned int addr_size, const gdb_byte *op_ptr, const gdb_byte *op_end, - struct dwarf2_per_cu_data *per_cu); + dwarf2_per_cu_data *per_cu, + dwarf2_per_objfile *per_objfile); extern void compile_print_value (struct value *val, void *data_voidp); diff -Nru gdb-9.1/gdb/compile/compile-internal.h gdb-10.2/gdb/compile/compile-internal.h --- gdb-9.1/gdb/compile/compile-internal.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/compile/compile-internal.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Header file for GDB compile command and supporting functions. - Copyright (C) 2014-2020 Free Software Foundation, Inc. + Copyright (C) 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/compile/compile-loc2c.c gdb-10.2/gdb/compile/compile-loc2c.c --- gdb-9.1/gdb/compile/compile-loc2c.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/compile/compile-loc2c.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Convert a DWARF location expression to C - Copyright (C) 2014-2020 Free Software Foundation, Inc. + Copyright (C) 2014-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -19,15 +19,16 @@ #include "defs.h" #include "dwarf2.h" -#include "dwarf2expr.h" -#include "dwarf2loc.h" +#include "dwarf2/expr.h" +#include "dwarf2/loc.h" +#include "dwarf2/read.h" #include "ui-file.h" #include "utils.h" #include "compile-internal.h" #include "compile-c.h" #include "compile.h" #include "block.h" -#include "dwarf2-frame.h" +#include "dwarf2/frame.h" #include "gdbsupport/gdb_vecs.h" #include "value.h" #include "gdbarch.h" @@ -582,7 +583,8 @@ unsigned int addr_size, const gdb_byte *op_ptr, const gdb_byte *op_end, CORE_ADDR *initial, - struct dwarf2_per_cu_data *per_cu) + dwarf2_per_cu_data *per_cu, + dwarf2_per_objfile *per_objfile) { /* We keep a counter so that labels and other objects we create have unique names. */ @@ -718,7 +720,7 @@ index, not an address. We don't support things like branching between the address and the TLS op. */ if (op_ptr >= op_end || *op_ptr != DW_OP_GNU_push_tls_address) - uoffset += dwarf2_per_cu_text_offset (per_cu); + uoffset += per_objfile->objfile->text_section_offset (); push (indent, stream, uoffset); break; @@ -895,7 +897,7 @@ sym, pc, arch, registers_used, addr_size, datastart, datastart + datalen, - NULL, per_cu); + NULL, per_cu, per_objfile); pushf (indent, stream, "%s + %s", fb_name, hex_string (offset)); } @@ -1076,7 +1078,7 @@ sym, pc, arch, registers_used, addr_size, cfa_start, cfa_end, - &text_offset, per_cu); + &text_offset, per_cu, per_objfile); pushf (indent, stream, "%s", cfa_name); } } @@ -1122,11 +1124,12 @@ struct gdbarch *arch, unsigned char *registers_used, unsigned int addr_size, const gdb_byte *op_ptr, const gdb_byte *op_end, - struct dwarf2_per_cu_data *per_cu) + dwarf2_per_cu_data *per_cu, + dwarf2_per_objfile *per_objfile) { do_compile_dwarf_expr_to_c (2, stream, GCC_UINTPTR, result_name, sym, pc, arch, registers_used, addr_size, op_ptr, op_end, - NULL, per_cu); + NULL, per_cu, per_objfile); } /* See compile.h. */ @@ -1139,9 +1142,11 @@ struct gdbarch *arch, unsigned char *registers_used, unsigned int addr_size, const gdb_byte *op_ptr, const gdb_byte *op_end, - struct dwarf2_per_cu_data *per_cu) + dwarf2_per_cu_data *per_cu, + dwarf2_per_objfile *per_objfile) { do_compile_dwarf_expr_to_c (2, stream, "unsigned long ", result_name, sym, pc, arch, registers_used, - addr_size, op_ptr, op_end, NULL, per_cu); + addr_size, op_ptr, op_end, NULL, per_cu, + per_objfile); } diff -Nru gdb-9.1/gdb/compile/compile-object-load.c gdb-10.2/gdb/compile/compile-object-load.c --- gdb-9.1/gdb/compile/compile-object-load.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/compile/compile-object-load.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Load module for 'compile' command. - Copyright (C) 2014-2020 Free Software Foundation, Inc. + Copyright (C) 2014-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -402,6 +402,9 @@ int nblocks = 0; int block_loop = 0; + lookup_name_info func_matcher (GCC_FE_WRAPPER_FUNCTION, + symbol_name_match_type::SEARCH_NAME); + bv = SYMTAB_BLOCKVECTOR (func_sym->owner.symtab); nblocks = BLOCKVECTOR_NBLOCKS (bv); @@ -433,13 +436,11 @@ if (function != NULL && (BLOCK_SUPERBLOCK (function_block) == BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK)) - && (strcmp_iw (function->linkage_name (), - GCC_FE_WRAPPER_FUNCTION) - == 0)) + && symbol_matches_search_name (function, func_matcher)) break; } if (block_loop == nblocks) - error (_("No \"%s\" symbol found"), COMPILE_I_EXPR_PTR_TYPE); + error (_("No \"%s\" symbol found"), COMPILE_I_EXPR_VAL); gdb_type = SYMBOL_TYPE (gdb_val_sym); gdb_type = check_typedef (gdb_type); @@ -451,7 +452,7 @@ error (_("No \"%s\" symbol found"), COMPILE_I_EXPR_PTR_TYPE); gdb_ptr_type = SYMBOL_TYPE (gdb_ptr_type_sym); gdb_ptr_type = check_typedef (gdb_ptr_type); - if (TYPE_CODE (gdb_ptr_type) != TYPE_CODE_PTR) + if (gdb_ptr_type->code () != TYPE_CODE_PTR) error (_("Type of \"%s\" is not a pointer"), COMPILE_I_EXPR_PTR_TYPE); gdb_type_from_ptr = check_typedef (TYPE_TARGET_TYPE (gdb_ptr_type)); @@ -463,14 +464,14 @@ return gdb_type; } - if (TYPE_CODE (gdb_type) != TYPE_CODE_PTR) + if (gdb_type->code () != TYPE_CODE_PTR) error (_("Invalid type code %d of symbol \"%s\" " "in compiled module \"%s\"."), - TYPE_CODE (gdb_type_from_ptr), COMPILE_I_EXPR_VAL, + gdb_type_from_ptr->code (), COMPILE_I_EXPR_VAL, objfile_name (objfile)); retval = gdb_type_from_ptr; - switch (TYPE_CODE (gdb_type_from_ptr)) + switch (gdb_type_from_ptr->code ()) { case TYPE_CODE_ARRAY: gdb_type_from_ptr = TYPE_TARGET_TYPE (gdb_type_from_ptr); @@ -480,7 +481,7 @@ default: error (_("Invalid type code %d of symbol \"%s\" " "in compiled module \"%s\"."), - TYPE_CODE (gdb_type_from_ptr), COMPILE_I_EXPR_PTR_TYPE, + gdb_type_from_ptr->code (), COMPILE_I_EXPR_PTR_TYPE, objfile_name (objfile)); } if (!types_deeply_equal (gdb_type_from_ptr, @@ -504,21 +505,21 @@ struct type *regsp_type, *regs_type; /* No register parameter present. */ - if (TYPE_NFIELDS (func_type) == 0) + if (func_type->num_fields () == 0) return NULL; - regsp_type = check_typedef (TYPE_FIELD_TYPE (func_type, 0)); - if (TYPE_CODE (regsp_type) != TYPE_CODE_PTR) + regsp_type = check_typedef (func_type->field (0).type ()); + if (regsp_type->code () != TYPE_CODE_PTR) error (_("Invalid type code %d of first parameter of function \"%s\" " "in compiled module \"%s\"."), - TYPE_CODE (regsp_type), GCC_FE_WRAPPER_FUNCTION, + regsp_type->code (), GCC_FE_WRAPPER_FUNCTION, objfile_name (objfile)); regs_type = check_typedef (TYPE_TARGET_TYPE (regsp_type)); - if (TYPE_CODE (regs_type) != TYPE_CODE_STRUCT) + if (regs_type->code () != TYPE_CODE_STRUCT) error (_("Invalid type code %d of dereferenced first parameter " "of function \"%s\" in compiled module \"%s\"."), - TYPE_CODE (regs_type), GCC_FE_WRAPPER_FUNCTION, + regs_type->code (), GCC_FE_WRAPPER_FUNCTION, objfile_name (objfile)); return regs_type; @@ -533,14 +534,14 @@ struct gdbarch *gdbarch = target_gdbarch (); int fieldno; - for (fieldno = 0; fieldno < TYPE_NFIELDS (regs_type); fieldno++) + for (fieldno = 0; fieldno < regs_type->num_fields (); fieldno++) { const char *reg_name = TYPE_FIELD_NAME (regs_type, fieldno); ULONGEST reg_bitpos = TYPE_FIELD_BITPOS (regs_type, fieldno); ULONGEST reg_bitsize = TYPE_FIELD_BITSIZE (regs_type, fieldno); ULONGEST reg_offset; - struct type *reg_type = check_typedef (TYPE_FIELD_TYPE (regs_type, - fieldno)); + struct type *reg_type + = check_typedef (regs_type->field (fieldno).type ()); ULONGEST reg_size = TYPE_LENGTH (reg_type); int regnum; struct value *regval; @@ -554,10 +555,10 @@ reg_name, pulongest (reg_bitpos), pulongest (reg_bitsize)); reg_offset = reg_bitpos / 8; - if (TYPE_CODE (reg_type) != TYPE_CODE_INT - && TYPE_CODE (reg_type) != TYPE_CODE_PTR) + if (reg_type->code () != TYPE_CODE_INT + && reg_type->code () != TYPE_CODE_PTR) error (_("Invalid register \"%s\" type code %d"), reg_name, - TYPE_CODE (reg_type)); + reg_type->code ()); regnum = compile_register_name_demangle (gdbarch, reg_name); @@ -603,7 +604,7 @@ gdb::unique_xmalloc_ptr<char> filename (tilde_expand (file_names.object_file ())); - gdb_bfd_ref_ptr abfd (gdb_bfd_open (filename.get (), gnutarget, -1)); + gdb_bfd_ref_ptr abfd (gdb_bfd_open (filename.get (), gnutarget)); if (abfd == NULL) error (_("\"%s\": could not open as compiled module: %s"), filename.get (), bfd_errmsg (bfd_get_error ())); @@ -632,9 +633,9 @@ /* SYMFILE_VERBOSE is not passed even if FROM_TTY, user is not interested in "Reading symbols from ..." message for automatically generated file. */ - std::unique_ptr<struct objfile> objfile_holder - (symbol_file_add_from_bfd (abfd.get (), filename.get (), - 0, NULL, 0, NULL)); + objfile_up objfile_holder (symbol_file_add_from_bfd (abfd.get (), + filename.get (), + 0, NULL, 0, NULL)); objfile = objfile_holder.get (); func_sym = lookup_global_symbol_from_objfile (objfile, @@ -645,10 +646,10 @@ error (_("Cannot find function \"%s\" in compiled module \"%s\"."), GCC_FE_WRAPPER_FUNCTION, objfile_name (objfile)); func_type = SYMBOL_TYPE (func_sym); - if (TYPE_CODE (func_type) != TYPE_CODE_FUNC) + if (func_type->code () != TYPE_CODE_FUNC) error (_("Invalid type code %d of function \"%s\" in compiled " "module \"%s\"."), - TYPE_CODE (func_type), GCC_FE_WRAPPER_FUNCTION, + func_type->code (), GCC_FE_WRAPPER_FUNCTION, objfile_name (objfile)); switch (scope) @@ -669,10 +670,10 @@ default: internal_error (__FILE__, __LINE__, _("invalid scope %d"), scope); } - if (TYPE_NFIELDS (func_type) != expect_parameters) + if (func_type->num_fields () != expect_parameters) error (_("Invalid %d parameters of function \"%s\" in compiled " "module \"%s\"."), - TYPE_NFIELDS (func_type), GCC_FE_WRAPPER_FUNCTION, + func_type->num_fields (), GCC_FE_WRAPPER_FUNCTION, objfile_name (objfile)); if (!types_deeply_equal (expect_return_type, TYPE_TARGET_TYPE (func_type))) error (_("Invalid return type of function \"%s\" in compiled " diff -Nru gdb-9.1/gdb/compile/compile-object-load.h gdb-10.2/gdb/compile/compile-object-load.h --- gdb-9.1/gdb/compile/compile-object-load.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/compile/compile-object-load.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Header file to load module for 'compile' command. - Copyright (C) 2014-2020 Free Software Foundation, Inc. + Copyright (C) 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -80,6 +80,5 @@ extern struct compile_module *compile_object_load (const compile_file_names &fnames, enum compile_i_scope_types scope, void *scope_data); -extern void munmap_list_free (struct munmap_list *head); #endif /* COMPILE_COMPILE_OBJECT_LOAD_H */ diff -Nru gdb-9.1/gdb/compile/compile-object-run.c gdb-10.2/gdb/compile/compile-object-run.c --- gdb-9.1/gdb/compile/compile-object-run.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/compile/compile-object-run.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Call module for 'compile' command. - Copyright (C) 2014-2020 Free Software Foundation, Inc. + Copyright (C) 2014-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -86,7 +86,7 @@ if ((objfile->flags & OBJF_USERLOADED) == 0 && (strcmp (objfile_name (objfile), data->objfile_name_string) == 0)) { - delete objfile; + objfile->unlink (); /* It may be a bit too pervasive in this dummy_frame dtor callback. */ clear_symtab_users (0); @@ -149,27 +149,27 @@ func_type = copy_type_recursive (objfile, func_type, copied_types); htab_delete (copied_types); - gdb_assert (TYPE_CODE (func_type) == TYPE_CODE_FUNC); + gdb_assert (func_type->code () == TYPE_CODE_FUNC); func_val = value_from_pointer (lookup_pointer_type (func_type), BLOCK_ENTRY_PC (SYMBOL_BLOCK_VALUE (func_sym))); - vargs = XALLOCAVEC (struct value *, TYPE_NFIELDS (func_type)); - if (TYPE_NFIELDS (func_type) >= 1) + vargs = XALLOCAVEC (struct value *, func_type->num_fields ()); + if (func_type->num_fields () >= 1) { gdb_assert (regs_addr != 0); vargs[current_arg] = value_from_pointer - (TYPE_FIELD_TYPE (func_type, current_arg), regs_addr); + (func_type->field (current_arg).type (), regs_addr); ++current_arg; } - if (TYPE_NFIELDS (func_type) >= 2) + if (func_type->num_fields () >= 2) { gdb_assert (data->out_value_addr != 0); vargs[current_arg] = value_from_pointer - (TYPE_FIELD_TYPE (func_type, current_arg), data->out_value_addr); + (func_type->field (current_arg).type (), data->out_value_addr); ++current_arg; } - gdb_assert (current_arg == TYPE_NFIELDS (func_type)); - auto args = gdb::make_array_view (vargs, TYPE_NFIELDS (func_type)); + gdb_assert (current_arg == func_type->num_fields ()); + auto args = gdb::make_array_view (vargs, func_type->num_fields ()); call_function_by_hand_dummy (func_val, NULL, args, do_module_cleanup, data); } diff -Nru gdb-9.1/gdb/compile/compile-object-run.h gdb-10.2/gdb/compile/compile-object-run.h --- gdb-9.1/gdb/compile/compile-object-run.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/compile/compile-object-run.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Header file to call module for 'compile' command. - Copyright (C) 2014-2020 Free Software Foundation, Inc. + Copyright (C) 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/compile/gcc-c-plugin.h gdb-10.2/gdb/compile/gcc-c-plugin.h --- gdb-9.1/gdb/compile/gcc-c-plugin.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/compile/gcc-c-plugin.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* GCC C plug-in wrapper for GDB. - Copyright (C) 2018-2020 Free Software Foundation, Inc. + Copyright (C) 2018-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/compile/gcc-cp-plugin.h gdb-10.2/gdb/compile/gcc-cp-plugin.h --- gdb-9.1/gdb/compile/gcc-cp-plugin.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/compile/gcc-cp-plugin.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* GCC C++ plug-in wrapper for GDB. - Copyright (C) 2018-2020 Free Software Foundation, Inc. + Copyright (C) 2018-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/complaints.c gdb-10.2/gdb/complaints.c --- gdb-9.1/gdb/complaints.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/complaints.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Support for complaint handling during symbol reading in GDB. - Copyright (C) 1990-2020 Free Software Foundation, Inc. + Copyright (C) 1990-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -74,8 +74,9 @@ value); } +void _initialize_complaints (); void -_initialize_complaints (void) +_initialize_complaints () { add_setshow_zinteger_cmd ("complaints", class_support, &stop_whining, _("\ diff -Nru gdb-9.1/gdb/complaints.h gdb-10.2/gdb/complaints.h --- gdb-9.1/gdb/complaints.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/complaints.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Definitions for complaint handling during symbol reading in GDB. - Copyright (C) 1990-2020 Free Software Foundation, Inc. + Copyright (C) 1990-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -25,6 +25,10 @@ extern void complaint_internal (const char *fmt, ...) ATTRIBUTE_PRINTF (1, 2); +/* This controls whether complaints are emitted. */ + +extern int stop_whining; + /* Register a complaint. This is a macro around complaint_internal to avoid computing complaint's arguments when complaints are disabled. Running FMT via gettext [i.e., _(FMT)] can be quite expensive, for @@ -32,8 +36,6 @@ #define complaint(FMT, ...) \ do \ { \ - extern int stop_whining; \ - \ if (stop_whining > 0) \ complaint_internal (FMT, ##__VA_ARGS__); \ } \ diff -Nru gdb-9.1/gdb/completer.c gdb-10.2/gdb/completer.c --- gdb-9.1/gdb/completer.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/completer.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Line completion stuff for GDB, the GNU debugger. - Copyright (C) 2000-2020 Free Software Foundation, Inc. + Copyright (C) 2000-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -45,6 +45,66 @@ #include "completer.h" +/* See completer.h. */ + +class completion_tracker::completion_hash_entry +{ +public: + /* Constructor. */ + completion_hash_entry (gdb::unique_xmalloc_ptr<char> name, + gdb::unique_xmalloc_ptr<char> lcd) + : m_name (std::move (name)), + m_lcd (std::move (lcd)) + { + /* Nothing. */ + } + + /* Returns a pointer to the lowest common denominator string. This + string will only be valid while this hash entry is still valid as the + string continues to be owned by this hash entry and will be released + when this entry is deleted. */ + char *get_lcd () const + { + return m_lcd.get (); + } + + /* Get, and release the name field from this hash entry. This can only + be called once, after which the name field is no longer valid. This + should be used to pass ownership of the name to someone else. */ + char *release_name () + { + return m_name.release (); + } + + /* Return true of the name in this hash entry is STR. */ + bool is_name_eq (const char *str) const + { + return strcmp (m_name.get (), str) == 0; + } + + /* Return the hash value based on the name of the entry. */ + hashval_t hash_name () const + { + return htab_hash_string (m_name.get ()); + } + + /* A static function that can be passed to the htab hash system to be + used as a callback that deletes an item from the hash. */ + static void deleter (void *arg) + { + completion_hash_entry *entry = (completion_hash_entry *) arg; + delete entry; + } + +private: + + /* The symbol name stored in this hash entry. */ + gdb::unique_xmalloc_ptr<char> m_name; + + /* The lowest common denominator string computed for this hash entry. */ + gdb::unique_xmalloc_ptr<char> m_lcd; +}; + /* Misc state that needs to be tracked across several different readline completer entry point calls, all related to a single completion invocation. */ @@ -95,7 +155,7 @@ but it does affect how much stuff M-? lists. (2) If one of the matches contains a word break character, readline will quote it. That's why we switch between - current_language->la_word_break_characters() and + current_language->word_break_characters () and gdb_completer_command_word_break_characters. I'm not sure when we need this behavior (perhaps for funky characters in C++ symbols?). */ @@ -388,7 +448,7 @@ advance_to_expression_complete_word_point (completion_tracker &tracker, const char *text) { - const char *brk_chars = current_language->la_word_break_characters (); + const char *brk_chars = current_language->word_break_characters (); return advance_to_completion_word (tracker, brk_chars, text); } @@ -407,6 +467,7 @@ bool completion_tracker::completes_to_completion_word (const char *word) { + recompute_lowest_common_denominator (); if (m_lowest_common_denominator_unique) { const char *lcd = m_lowest_common_denominator; @@ -512,7 +573,7 @@ colon = p; symbol_start = p + 1; } - else if (strchr (current_language->la_word_break_characters(), *p)) + else if (strchr (current_language->word_break_characters (), *p)) symbol_start = p + 1; } @@ -1029,7 +1090,7 @@ const char *type_name = NULL; type = check_typedef (type); - for (i = 0; i < TYPE_NFIELDS (type); ++i) + for (i = 0; i < type->num_fields (); ++i) { if (i < TYPE_N_BASECLASSES (type)) add_struct_fields (TYPE_BASECLASS (type, i), @@ -1042,10 +1103,10 @@ fieldname, namelen)) output.emplace_back (xstrdup (TYPE_FIELD_NAME (type, i))); } - else if (TYPE_CODE (TYPE_FIELD_TYPE (type, i)) == TYPE_CODE_UNION) + else if (type->field (i).type ()->code () == TYPE_CODE_UNION) { /* Recurse into anonymous unions. */ - add_struct_fields (TYPE_FIELD_TYPE (type, i), + add_struct_fields (type->field (i).type (), output, fieldname, namelen); } } @@ -1059,7 +1120,7 @@ { if (!computed_type_name) { - type_name = TYPE_NAME (type); + type_name = type->name (); computed_type_name = 1; } /* Omit constructors from the completion list. */ @@ -1095,13 +1156,13 @@ for (;;) { type = check_typedef (type); - if (TYPE_CODE (type) != TYPE_CODE_PTR && !TYPE_IS_REFERENCE (type)) + if (type->code () != TYPE_CODE_PTR && !TYPE_IS_REFERENCE (type)) break; type = TYPE_TARGET_TYPE (type); } - if (TYPE_CODE (type) == TYPE_CODE_UNION - || TYPE_CODE (type) == TYPE_CODE_STRUCT) + if (type->code () == TYPE_CODE_UNION + || type->code () == TYPE_CODE_STRUCT) { completion_list result; @@ -1287,7 +1348,7 @@ strings, which leaves out the '-' and '.' character used in some commands. */ set_rl_completer_word_break_characters - (current_language->la_word_break_characters()); + (current_language->word_break_characters ()); /* Decide whether to complete on a list of gdb commands or on symbols. */ @@ -1324,7 +1385,7 @@ } else { - c = lookup_cmd_1 (&p, cmdlist, &result_list, ignore_help_classes); + c = lookup_cmd_1 (&p, cmdlist, &result_list, NULL, ignore_help_classes); } /* Move p up to the next interesting thing. */ @@ -1512,9 +1573,7 @@ completion_tracker::completion_tracker () { - m_entries_hash = htab_create_alloc (INITIAL_COMPLETION_HTAB_SIZE, - htab_hash_string, streq_hash, - NULL, xcalloc, xfree); + discard_completions (); } /* See completer.h. */ @@ -1526,13 +1585,43 @@ m_lowest_common_denominator = NULL; m_lowest_common_denominator_unique = false; + m_lowest_common_denominator_valid = false; - m_entries_vec.clear (); + /* A null check here allows this function to be used from the + constructor. */ + if (m_entries_hash != NULL) + htab_delete (m_entries_hash); + + /* A callback used by the hash table to compare new entries with existing + entries. We can't use the standard streq_hash function here as the + key to our hash is just a single string, while the values we store in + the hash are a struct containing multiple strings. */ + static auto entry_eq_func + = [] (const void *first, const void *second) -> int + { + /* The FIRST argument is the entry already in the hash table, and + the SECOND argument is the new item being inserted. */ + const completion_hash_entry *entry + = (const completion_hash_entry *) first; + const char *name_str = (const char *) second; + + return entry->is_name_eq (name_str); + }; + + /* Callback used by the hash table to compute the hash value for an + existing entry. This is needed when expanding the hash table. */ + static auto entry_hash_func + = [] (const void *arg) -> hashval_t + { + const completion_hash_entry *entry + = (const completion_hash_entry *) arg; + return entry->hash_name (); + }; - htab_delete (m_entries_hash); m_entries_hash = htab_create_alloc (INITIAL_COMPLETION_HTAB_SIZE, - htab_hash_string, streq_hash, - NULL, xcalloc, xfree); + entry_hash_func, entry_eq_func, + completion_hash_entry::deleter, + xcalloc, xfree); } /* See completer.h. */ @@ -1559,7 +1648,8 @@ if (htab_elements (m_entries_hash) >= max_completions) return false; - slot = htab_find_slot (m_entries_hash, name.get (), INSERT); + hashval_t hash = htab_hash_string (name.get ()); + slot = htab_find_slot_with_hash (m_entries_hash, name.get (), hash, INSERT); if (*slot == HTAB_EMPTY_ENTRY) { const char *match_for_lcd_str = NULL; @@ -1573,10 +1663,12 @@ gdb::unique_xmalloc_ptr<char> lcd = make_completion_match_str (match_for_lcd_str, text, word); - recompute_lowest_common_denominator (std::move (lcd)); + size_t lcd_len = strlen (lcd.get ()); + *slot = new completion_hash_entry (std::move (name), std::move (lcd)); - *slot = name.get (); - m_entries_vec.push_back (std::move (name)); + m_lowest_common_denominator_valid = false; + m_lowest_common_denominator_max_length + = std::max (m_lowest_common_denominator_max_length, lcd_len); } return true; @@ -1602,6 +1694,20 @@ add_completion (std::move (candidate)); } +/* See completer.h. */ + +void +completion_tracker::remove_completion (const char *name) +{ + hashval_t hash = htab_hash_string (name); + if (htab_find_slot_with_hash (m_entries_hash, name, hash, NO_INSERT) + != NULL) + { + htab_remove_elt_with_hash (m_entries_hash, name, hash); + m_lowest_common_denominator_valid = false; + } +} + /* Helper for the make_completion_match_str overloads. Returns NULL as an indication that we want MATCH_NAME exactly. It is up to the caller to xstrdup that string if desired. */ @@ -1858,7 +1964,7 @@ const char *text, const char *word) { set_rl_completer_word_break_characters - (current_language->la_word_break_characters ()); + (current_language->word_break_characters ()); } /* See definition in completer.h. */ @@ -1982,23 +2088,23 @@ /* See completer.h. */ void -completion_tracker::recompute_lowest_common_denominator - (gdb::unique_xmalloc_ptr<char> &&new_match_up) +completion_tracker::recompute_lcd_visitor (completion_hash_entry *entry) { - if (m_lowest_common_denominator == NULL) + if (!m_lowest_common_denominator_valid) { - /* We don't have a lowest common denominator yet, so simply take - the whole NEW_MATCH_UP as being it. */ - m_lowest_common_denominator = new_match_up.release (); + /* This is the first lowest common denominator that we are + considering, just copy it in. */ + strcpy (m_lowest_common_denominator, entry->get_lcd ()); m_lowest_common_denominator_unique = true; + m_lowest_common_denominator_valid = true; } else { - /* Find the common denominator between the currently-known - lowest common denominator and NEW_MATCH_UP. That becomes the - new lowest common denominator. */ + /* Find the common denominator between the currently-known lowest + common denominator and NEW_MATCH_UP. That becomes the new lowest + common denominator. */ size_t i; - const char *new_match = new_match_up.get (); + const char *new_match = entry->get_lcd (); for (i = 0; (new_match[i] != '\0' @@ -2016,6 +2122,35 @@ /* See completer.h. */ void +completion_tracker::recompute_lowest_common_denominator () +{ + /* We've already done this. */ + if (m_lowest_common_denominator_valid) + return; + + /* Resize the storage to ensure we have enough space, the plus one gives + us space for the trailing null terminator we will include. */ + m_lowest_common_denominator + = (char *) xrealloc (m_lowest_common_denominator, + m_lowest_common_denominator_max_length + 1); + + /* Callback used to visit each entry in the m_entries_hash. */ + auto visitor_func + = [] (void **slot, void *info) -> int + { + completion_tracker *obj = (completion_tracker *) info; + completion_hash_entry *entry = (completion_hash_entry *) *slot; + obj->recompute_lcd_visitor (entry); + return 1; + }; + + htab_traverse (m_entries_hash, visitor_func, this); + m_lowest_common_denominator_valid = true; +} + +/* See completer.h. */ + +void completion_tracker::advance_custom_word_point_by (int len) { m_custom_word_point += len; @@ -2092,16 +2227,17 @@ completion_tracker::build_completion_result (const char *text, int start, int end) { - completion_list &list = m_entries_vec; /* The completions. */ + size_t element_count = htab_elements (m_entries_hash); - if (list.empty ()) + if (element_count == 0) return {}; /* +1 for the LCD, and +1 for NULL termination. */ - char **match_list = XNEWVEC (char *, 1 + list.size () + 1); + char **match_list = XNEWVEC (char *, 1 + element_count + 1); /* Build replacement word, based on the LCD. */ + recompute_lowest_common_denominator (); match_list[0] = expand_preserving_ws (text, end - start, m_lowest_common_denominator); @@ -2128,13 +2264,40 @@ } else { - int ix; - - for (ix = 0; ix < list.size (); ++ix) - match_list[ix + 1] = list[ix].release (); - match_list[ix + 1] = NULL; + /* State object used while building the completion list. */ + struct list_builder + { + list_builder (char **ml) + : match_list (ml), + index (1) + { /* Nothing. */ } + + /* The list we are filling. */ + char **match_list; + + /* The next index in the list to write to. */ + int index; + }; + list_builder builder (match_list); + + /* Visit each entry in m_entries_hash and add it to the completion + list, updating the builder state object. */ + auto func + = [] (void **slot, void *info) -> int + { + completion_hash_entry *entry = (completion_hash_entry *) *slot; + list_builder *state = (list_builder *) info; + + state->match_list[state->index] = entry->release_name (); + state->index++; + return 1; + }; + + /* Build the completion list and add a null at the end. */ + htab_traverse_noresize (m_entries_hash, func, &builder); + match_list[builder.index] = NULL; - return completion_result (match_list, list.size (), false); + return completion_result (match_list, builder.index - 1, false); } } @@ -2164,15 +2327,11 @@ /* See completer.h */ -completion_result::completion_result (completion_result &&rhs) +completion_result::completion_result (completion_result &&rhs) noexcept + : match_list (rhs.match_list), + number_matches (rhs.number_matches) { - if (this == &rhs) - return; - - reset_match_list (); - match_list = rhs.match_list; rhs.match_list = NULL; - number_matches = rhs.number_matches; rhs.number_matches = 0; } @@ -2314,7 +2473,7 @@ quotechars = gdb_completer_quote_characters; if (breakchars == NULL) - breakchars = current_language->la_word_break_characters(); + breakchars = current_language->word_break_characters (); for (scan = str; *scan != '\0'; scan++) { @@ -2935,8 +3094,9 @@ } } +void _initialize_completer (); void -_initialize_completer (void) +_initialize_completer () { add_setshow_zuinteger_unlimited_cmd ("max-completions", no_class, &max_completions, _("\ diff -Nru gdb-9.1/gdb/completer.h gdb-10.2/gdb/completer.h --- gdb-9.1/gdb/completer.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/completer.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Header for GDB line completion. - Copyright (C) 2000-2020 Free Software Foundation, Inc. + Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -242,7 +242,7 @@ DISABLE_COPY_AND_ASSIGN (completion_result); /* Move a result. */ - completion_result (completion_result &&rhs); + completion_result (completion_result &&rhs) noexcept; /* Release ownership of the match list array. */ char **release_match_list (); @@ -326,6 +326,10 @@ LIST. */ void add_completions (completion_list &&list); + /* Remove completion matching NAME from the completion list, does nothing + if NAME is not already in the completion list. */ + void remove_completion (const char *name); + /* Set the quote char to be appended after a unique completion is added to the input line. Set to '\0' to clear. See m_quote_char's description. */ @@ -389,7 +393,7 @@ /* True if we have any completion match recorded. */ bool have_completions () const - { return !m_entries_vec.empty (); } + { return htab_elements (m_entries_hash) > 0; } /* Discard the current completion match list and the current LCD. */ @@ -403,6 +407,9 @@ private: + /* The type that we place into the m_entries_hash hash table. */ + class completion_hash_entry; + /* Add the completion NAME to the list of generated completions if it is not there already. If false is returned, too many completions were found. */ @@ -410,18 +417,15 @@ completion_match_for_lcd *match_for_lcd, const char *text, const char *word); - /* Given a new match, recompute the lowest common denominator (LCD) - to hand over to readline. Normally readline computes this itself - based on the whole set of completion matches. However, some - completers want to override readline, in order to be able to - provide a LCD that is not really a prefix of the matches, but the - lowest common denominator of some relevant substring of each - match. E.g., "b push_ba" completes to - "std::vector<..>::push_back", "std::string::push_back", etc., and - in this case we want the lowest common denominator to be - "push_back" instead of "std::". */ - void recompute_lowest_common_denominator - (gdb::unique_xmalloc_ptr<char> &&new_match); + /* Ensure that the lowest common denominator held in the member variable + M_LOWEST_COMMON_DENOMINATOR is valid. This method must be called if + there is any chance that new completions have been added to the + tracker before the lowest common denominator is read. */ + void recompute_lowest_common_denominator (); + + /* Callback used from recompute_lowest_common_denominator, called for + every entry in m_entries_hash. */ + void recompute_lcd_visitor (completion_hash_entry *entry); /* Completion match outputs returned by the symbol name matching routines (see symbol_name_matcher_ftype). These results are only @@ -430,16 +434,13 @@ symbol name matching routines. */ completion_match_result m_completion_match_result; - /* The completion matches found so far, in a vector. */ - completion_list m_entries_vec; - /* The completion matches found so far, in a hash table, for duplicate elimination as entries are added. Otherwise the user is left scratching his/her head: readline and complete_command will remove duplicates, and if removal of duplicates there brings the total under max_completions the user may think gdb quit searching too early. */ - htab_t m_entries_hash; + htab_t m_entries_hash = NULL; /* If non-zero, then this is the quote char that needs to be appended after completion (iff we have a unique completion). We @@ -483,6 +484,16 @@ "function()", instead of showing all the possible completions. */ bool m_lowest_common_denominator_unique = false; + + /* True if the value in M_LOWEST_COMMON_DENOMINATOR is correct. This is + set to true each time RECOMPUTE_LOWEST_COMMON_DENOMINATOR is called, + and reset to false whenever a new completion is added. */ + bool m_lowest_common_denominator_valid = false; + + /* To avoid calls to xrealloc in RECOMPUTE_LOWEST_COMMON_DENOMINATOR, we + track the maximum possible size of the lowest common denominator, + which we know as each completion is added. */ + size_t m_lowest_common_denominator_max_length = 0; }; /* Return a string to hand off to readline as a completion match diff -Nru gdb-9.1/gdb/config/djgpp/djcheck.sh gdb-10.2/gdb/config/djgpp/djcheck.sh --- gdb-9.1/gdb/config/djgpp/djcheck.sh 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/config/djgpp/djcheck.sh 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ # A shell script to run the test suite on the DJGPP version of GDB. -# Copyright (C) 2000-2020 Free Software Foundation, Inc. +# Copyright (C) 2000-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/config/djgpp/djconfig.sh gdb-10.2/gdb/config/djgpp/djconfig.sh --- gdb-9.1/gdb/config/djgpp/djconfig.sh 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/config/djgpp/djconfig.sh 2021-04-25 04:04:35.000000000 +0000 @@ -5,7 +5,7 @@ # configuring other GNU programs for DJGPP. # #===================================================================== -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2021 Free Software Foundation, Inc. # # Originally written by Robert Hoehne, revised by Eli Zaretskii. # This file is part of GDB. diff -Nru gdb-9.1/gdb/config/djgpp/fnchange.lst gdb-10.2/gdb/config/djgpp/fnchange.lst --- gdb-9.1/gdb/config/djgpp/fnchange.lst 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/config/djgpp/fnchange.lst 2021-04-25 04:06:26.000000000 +0000 @@ -117,6 +117,7 @@ @V@/gdb/ChangeLog-2016 @V@/gdb/ChangeLog.016 @V@/gdb/ChangeLog-2017 @V@/gdb/ChangeLog.017 @V@/gdb/ChangeLog-2018 @V@/gdb/ChangeLog.018 +@V@/gdb/ChangeLog-2019 @V@/gdb/ChangeLog.019 @V@/gdb/ChangeLog-3.x @V@/gdb/ChangeLog.3-x @V@/gdb/ada-exp.tab.c @V@/gdb/ada-exp_tab.c @V@/gdb/amd64-windows-nat.c @V@/gdb/a64w-nat.c diff -Nru gdb-9.1/gdb/config/djgpp/langinfo.h gdb-10.2/gdb/config/djgpp/langinfo.h --- gdb-9.1/gdb/config/djgpp/langinfo.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/config/djgpp/langinfo.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* langinfo.h file for DJGPP. - Copyright (C) 2009-2020 Free Software Foundation, Inc. + Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Eli Zaretskii. This file is part of GDB. diff -Nru gdb-9.1/gdb/config/djgpp/nl_types.h gdb-10.2/gdb/config/djgpp/nl_types.h --- gdb-9.1/gdb/config/djgpp/nl_types.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/config/djgpp/nl_types.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* nl_types.h for DJGPP. - Copyright (C) 2009-2020 Free Software Foundation, Inc. + Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Eli Zaretskii. This file is part of GDB. diff -Nru gdb-9.1/gdb/config/i386/i386gnu.mn gdb-10.2/gdb/config/i386/i386gnu.mn --- gdb-9.1/gdb/config/i386/i386gnu.mn 2019-02-23 12:20:11.000000000 +0000 +++ gdb-10.2/gdb/config/i386/i386gnu.mn 2020-09-13 02:33:41.000000000 +0000 @@ -7,7 +7,7 @@ # Reply servers need special massaging of the code mig generates, to make # them work correctly for error returns in some cases. -%_reply_S.h %_reply_S.c: %_reply.defs +%_reply_S.h %_reply_S.c: %_reply.defs $(srcdir)/reply_mig_hack.awk $(CPP) $(CPPFLAGS) -DSERVERPREFIX=S_ -x c $< \ | $(MIGCOM) -sheader $*_reply_S.h -server $*_reply_S.raw -user /dev/null -header /dev/null \ && $(AWK) -f $(srcdir)/reply_mig_hack.awk < $*_reply_S.raw > $*_reply_S.c @@ -21,7 +21,7 @@ | $(MIGCOM) -sheader /dev/null -server /dev/null -user $*_U.c -header $*_U.h # MIG stubs are not yet ready for C++ compilation. -%_S.o %_U.o : COMPILE.post += -x c +%_S.o %_U.o : COMPILE.post += -x c -include gnu-nat-mig.h NAT_GENERATED_FILES = notify_S.h notify_S.c \ process_reply_S.h process_reply_S.c \ diff -Nru gdb-9.1/gdb/config/i386/nm-i386gnu.h gdb-10.2/gdb/config/i386/nm-i386gnu.h --- gdb-9.1/gdb/config/i386/nm-i386gnu.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/config/i386/nm-i386gnu.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Native-dependent definitions for Intel 386 running the GNU Hurd - Copyright (C) 1994-2020 Free Software Foundation, Inc. + Copyright (C) 1994-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/config/nm-linux.h gdb-10.2/gdb/config/nm-linux.h --- gdb-9.1/gdb/config/nm-linux.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/config/nm-linux.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Native support for GNU/Linux. - Copyright (C) 1999-2020 Free Software Foundation, Inc. + Copyright (C) 1999-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/config/nm-nto.h gdb-10.2/gdb/config/nm-nto.h --- gdb-9.1/gdb/config/nm-nto.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/config/nm-nto.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Native support for QNX Neutrino version 6. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. This code was donated by QNX Software Systems Ltd. diff -Nru gdb-9.1/gdb/config/sparc/nm-sol2.h gdb-10.2/gdb/config/sparc/nm-sol2.h --- gdb-9.1/gdb/config/sparc/nm-sol2.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/config/sparc/nm-sol2.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Native-dependent definitions for Solaris SPARC. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/config.in gdb-10.2/gdb/config.in --- gdb-9.1/gdb/config.in 2019-12-11 20:24:51.000000000 +0000 +++ gdb-10.2/gdb/config.in 2021-04-25 04:06:26.000000000 +0000 @@ -36,6 +36,9 @@ /* Define to BFD's default target vector. */ #undef DEFAULT_BFD_VEC +/* Handle .ctf type-info sections */ +#undef ENABLE_LIBCTF + /* Define to 1 if translation of program messages to the user's native language is requested. */ #undef ENABLE_NLS @@ -109,10 +112,6 @@ don't. */ #undef HAVE_DECL_GETTHRDS -/* Define to 1 if you have the declaration of `ptrace', and to 0 if you don't. - */ -#undef HAVE_DECL_PTRACE - /* Define to 1 if you have the declaration of `snprintf', and to 0 if you don't. */ #undef HAVE_DECL_SNPRINTF @@ -227,6 +226,9 @@ /* Define if you have the babeltrace library. */ #undef HAVE_LIBBABELTRACE +/* Define to 1 if debuginfod is enabled. */ +#undef HAVE_LIBDEBUGINFOD + /* Define if you have the expat library. */ #undef HAVE_LIBEXPAT @@ -470,12 +472,6 @@ /* Define to 1 if `td_pcb' is a member of `struct thread'. */ #undef HAVE_STRUCT_THREAD_TD_PCB -/* Define to 1 if `fs_base' is a member of `struct user_regs_struct'. */ -#undef HAVE_STRUCT_USER_REGS_STRUCT_FS_BASE - -/* Define to 1 if `gs_base' is a member of `struct user_regs_struct'. */ -#undef HAVE_STRUCT_USER_REGS_STRUCT_GS_BASE - /* Define to 1 if you have the <sys/debugreg.h> header file. */ #undef HAVE_SYS_DEBUGREG_H @@ -572,6 +568,9 @@ /* Define to 1 if you have the `wresize' function. */ #undef HAVE_WRESIZE +/* Define to 1 if you have the <ws2tcpip.h> header file. */ +#undef HAVE_WS2TCPIP_H + /* Define to 1 if you have the `XML_StopParser' function. */ #undef HAVE_XML_STOPPARSER @@ -649,6 +648,10 @@ /* Define as the return type of ptrace. */ #undef PTRACE_TYPE_RET +/* Define if the python lib directory should be relocated when GDB is moved. + */ +#undef PYTHON_LIBDIR_RELOCATABLE + /* Define if the python directory should be relocated when GDB is moved. */ #undef PYTHON_PATH_RELOCATABLE @@ -752,6 +755,10 @@ /* Define if the PPC simulator is being linked in. */ #undef WITH_PPC_SIM +/* Directory containing Python's standard libraries from --with-python-libdir. + */ +#undef WITH_PYTHON_LIBDIR + /* Define if --with-python provides a path, either directly or via python-config.py --exec-prefix. */ #undef WITH_PYTHON_PATH @@ -792,6 +799,9 @@ /* Define to 1 if you need to in order for `stat' and other things to work. */ #undef _POSIX_SOURCE +/* Use structured /proc on Solaris. */ +#undef _STRUCTURED_PROC + /* Define to empty if `const' does not conform to ANSI C. */ #undef const diff -Nru gdb-9.1/gdb/configure gdb-10.2/gdb/configure --- gdb-9.1/gdb/configure 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/configure 2021-04-25 04:06:26.000000000 +0000 @@ -631,6 +631,9 @@ LTLIBXXHASH LIBXXHASH HAVE_LIBXXHASH +CTF_DEPS +LIBCTF +ENABLE_LIBCTF LTLIBBABELTRACE LIBBABELTRACE HAVE_LIBBABELTRACE @@ -688,12 +691,12 @@ TCL_PATCH_LEVEL TCL_VERSION WIN32LDAPP +WIN32LIBS GUI_CFLAGS_X LIBGUI LTLIBLZMA LIBLZMA HAVE_LIBLZMA -WIN32LIBS SER_HARDWIRE WERROR_CFLAGS WARN_CFLAGS @@ -702,15 +705,15 @@ TARGET_SYSTEM_ROOT CONFIG_LDFLAGS RDYNAMIC +LTLIBIPT +LIBIPT +HAVE_LIBIPT PTHREAD_CFLAGS PTHREAD_LIBS PTHREAD_CC ax_pthread_config SED ALLOCA -LTLIBIPT -LIBIPT -HAVE_LIBIPT SRCHIGH_CFLAGS SRCHIGH_LIBS HAVE_GUILE_FALSE @@ -758,6 +761,11 @@ REPORT_BUGS_TO PKGVERSION CODESIGN_CERT +DEBUGINFOD_LIBS +DEBUGINFOD_CFLAGS +PKG_CONFIG_LIBDIR +PKG_CONFIG_PATH +PKG_CONFIG HAVE_NATIVE_GCORE_TARGET TARGET_OBS subdirs @@ -787,6 +795,7 @@ INSTALL_STRIP_PROGRAM STRIP install_sh +LARGEFILE_CPPFLAGS target_os target_vendor target_cpu @@ -869,6 +878,7 @@ enable_gdbmi enable_tui enable_gdbtk +with_debuginfod with_libunwind_ia64 with_curses enable_profiling @@ -879,18 +889,23 @@ with_gnu_ld enable_rpath with_libiconv_prefix +with_libiconv_type with_iconv_bin with_system_readline with_jit_reader_dir with_expat with_libexpat_prefix +with_libexpat_type with_mpfr with_libmpfr_prefix +with_libmpfr_type with_python +with_python_libdir with_guile enable_source_highlight with_intel_pt with_libipt_prefix +with_libipt_type with_included_regex with_sysroot with_system_gdbinit @@ -901,15 +916,18 @@ enable_ubsan with_lzma with_liblzma_prefix +with_liblzma_type with_tcl with_tk with_x enable_sim -enable_gdbserver with_babeltrace with_libbabeltrace_prefix +with_libbabeltrace_type with_xxhash +enable_libctf with_libxxhash_prefix +with_libxxhash_type enable_unit_tests ' ac_precious_vars='build_alias @@ -926,12 +944,16 @@ CPP MAKEINFO MAKEINFOFLAGS +PKG_CONFIG +PKG_CONFIG_PATH +PKG_CONFIG_LIBDIR +DEBUGINFOD_CFLAGS +DEBUGINFOD_LIBS YACC YFLAGS XMKMF' ac_subdirs_all='testsuite -gdbtk -gdbserver' +gdbtk' # Initialize some variables set by options. ac_init_help= @@ -1575,8 +1597,7 @@ gcc is used --enable-ubsan enable undefined behavior sanitizer (auto/yes/no) --enable-sim link gdb with simulator - --enable-gdbserver automatically build gdbserver (yes/no/auto, default - is auto) + --enable-libctf Handle .ctf type-info sections [default=yes] --enable-unit-tests Enable the inclusion of unit tests when compiling GDB @@ -1598,6 +1619,8 @@ [--with-auto-load-dir] --without-auto-load-safe-path do not restrict auto-loaded files locations + --with-debuginfod Enable debuginfo lookups with debuginfod + (auto/yes/no) --with-libunwind-ia64 use libunwind frame unwinding for ia64 targets --with-curses use the curses library instead of the termcap library @@ -1607,6 +1630,7 @@ --with-gnu-ld assume the C compiler uses GNU ld default=no --with-libiconv-prefix[=DIR] search for libiconv in DIR/include and DIR/lib --without-libiconv-prefix don't search for libiconv in includedir and libdir + --with-libiconv-type=TYPE type of library to search for (auto/static/shared) --with-iconv-bin=PATH specify where to find the iconv program --with-system-readline use installed readline library --with-jit-reader-dir=PATH @@ -1614,16 +1638,21 @@ --with-expat include expat support (auto/yes/no) --with-libexpat-prefix[=DIR] search for libexpat in DIR/include and DIR/lib --without-libexpat-prefix don't search for libexpat in includedir and libdir + --with-libexpat-type=TYPE type of library to search for (auto/static/shared) --with-mpfr include MPFR support (auto/yes/no) --with-libmpfr-prefix[=DIR] search for libmpfr in DIR/include and DIR/lib --without-libmpfr-prefix don't search for libmpfr in includedir and libdir + --with-libmpfr-type=TYPE type of library to search for (auto/static/shared) --with-python[=PYTHON] include python support (auto/yes/no/<python-program>) + --with-python-libdir[=DIR] + search for python's libraries in DIR --with-guile[=GUILE] include guile support (auto/yes/no/<guile-version>/<pkg-config-program>) --with-intel-pt include Intel Processor Trace support (auto/yes/no) --with-libipt-prefix[=DIR] search for libipt in DIR/include and DIR/lib --without-libipt-prefix don't search for libipt in includedir and libdir + --with-libipt-type=TYPE type of library to search for (auto/static/shared) --without-included-regex don't use included regex; this is the default on systems with version 2 of the GNU C library (use @@ -1637,15 +1666,18 @@ --with-lzma support lzma compression (auto/yes/no) --with-liblzma-prefix[=DIR] search for liblzma in DIR/include and DIR/lib --without-liblzma-prefix don't search for liblzma in includedir and libdir + --with-liblzma-type=TYPE type of library to search for (auto/static/shared) --with-tcl directory containing tcl configuration (tclConfig.sh) --with-tk directory containing tk configuration (tkConfig.sh) --with-x use the X Window System --with-babeltrace include babeltrace support (auto/yes/no) --with-libbabeltrace-prefix[=DIR] search for libbabeltrace in DIR/include and DIR/lib --without-libbabeltrace-prefix don't search for libbabeltrace in includedir and libdir + --with-libbabeltrace-type=TYPE type of library to search for (auto/static/shared) --with-xxhash use libxxhash for hashing (faster) (auto/yes/no) --with-libxxhash-prefix[=DIR] search for libxxhash in DIR/include and DIR/lib --without-libxxhash-prefix don't search for libxxhash in includedir and libdir + --with-libxxhash-type=TYPE type of library to search for (auto/static/shared) Some influential environment variables: CC C compiler command @@ -1661,6 +1693,15 @@ MAKEINFO Parent configure detects if it is of sufficient version. MAKEINFOFLAGS Parameters for MAKEINFO. + PKG_CONFIG path to pkg-config utility + PKG_CONFIG_PATH + directories to add to pkg-config's search path + PKG_CONFIG_LIBDIR + path overriding pkg-config's built-in search path + DEBUGINFOD_CFLAGS + C compiler flags for DEBUGINFOD, overriding pkg-config + DEBUGINFOD_LIBS + linker flags for DEBUGINFOD, overriding pkg-config YACC The `Yet Another Compiler Compiler' implementation to use. Defaults to the first program found out of: `bison -y', `byacc', `yacc'. @@ -2318,63 +2359,6 @@ } # ac_fn_c_check_func -# ac_fn_c_check_member LINENO AGGR MEMBER VAR INCLUDES -# ---------------------------------------------------- -# Tries to find if the field MEMBER exists in type AGGR, after including -# INCLUDES, setting cache variable VAR accordingly. -ac_fn_c_check_member () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5 -$as_echo_n "checking for $2.$3... " >&6; } -if eval \${$4+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$5 -int -main () -{ -static $2 ac_aggr; -if (ac_aggr.$3) -return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$4=yes" -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$5 -int -main () -{ -static $2 ac_aggr; -if (sizeof ac_aggr.$3) -return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$4=yes" -else - eval "$4=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$4 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_c_check_member - # ac_fn_c_check_type LINENO TYPE VAR INCLUDES # ------------------------------------------- # Tests whether TYPE exists after having included INCLUDES, setting cache @@ -2475,6 +2459,63 @@ } # ac_fn_c_check_decl +# ac_fn_c_check_member LINENO AGGR MEMBER VAR INCLUDES +# ---------------------------------------------------- +# Tries to find if the field MEMBER exists in type AGGR, after including +# INCLUDES, setting cache variable VAR accordingly. +ac_fn_c_check_member () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5 +$as_echo_n "checking for $2.$3... " >&6; } +if eval \${$4+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$5 +int +main () +{ +static $2 ac_aggr; +if (ac_aggr.$3) +return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$4=yes" +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$5 +int +main () +{ +static $2 ac_aggr; +if (sizeof ac_aggr.$3) +return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$4=yes" +else + eval "$4=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$4 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_member + # ac_fn_cxx_try_link LINENO # ------------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. @@ -2971,9 +3012,6 @@ -# Set the 'development' global. -. $srcdir/../bfd/development.sh - ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -4732,15 +4770,56 @@ case "${host}" in - sparc-*-solaris*|i[3-7]86-*-solaris*) - # On native 32bit sparc and ia32 solaris, large-file and procfs support - # are mutually exclusive; and without procfs support, the bfd/ elf module - # cannot provide certain routines such as elfcore_write_prpsinfo - # or elfcore_write_prstatus. So unless the user explicitly requested - # large-file support through the --enable-largefile switch, disable - # large-file support in favor of procfs support. - test "${target}" = "${host}" -a "x$plugins" = xno \ - && : ${enable_largefile="no"} + sparc-*-solaris*|i?86-*-solaris*) + # On native 32-bit Solaris/SPARC and x86, large-file and procfs support + # were mutually exclusive until Solaris 11.3. Without procfs support, + # the bfd/ elf module cannot provide certain routines such as + # elfcore_write_prpsinfo or elfcore_write_prstatus. So unless the user + # explicitly requested large-file support through the + # --enable-largefile switch, disable large-file support in favor of + # procfs support. + # + # Check if <sys/procfs.h> is incompatible with large-file support. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#define _FILE_OFFSET_BITS 64 +#define _STRUCTURED_PROC 1 +#include <sys/procfs.h> +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + acx_cv_procfs_lfs=yes +else + acx_cv_procfs_lfs=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + # + # Forcefully disable large-file support only if necessary, gdb is in + # tree and enabled. + if test "${target}" = "${host}" -a "$acx_cv_procfs_lfs" = no \ + -a -d $srcdir/../gdb -a "$enable_gdb" != no; then + : ${enable_largefile="no"} + if test "$plugins" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: +plugin support disabled; require large-file support which is incompatible with GDB." >&5 +$as_echo "$as_me: WARNING: +plugin support disabled; require large-file support which is incompatible with GDB." >&2;} + plugins=no + fi + fi + # + # Explicitly undef _FILE_OFFSET_BITS if enable_largefile=no for the + # benefit of g++ 9+ which predefines it on Solaris. + if test "$enable_largefile" = no; then + LARGEFILE_CPPFLAGS="-U_FILE_OFFSET_BITS" + + fi ;; esac @@ -6738,7 +6817,6 @@ # For other settings, only the main target counts. gdb_sim= gdb_osabi= -build_gdbserver= targ=$target; . ${srcdir}/configure.tgt # Fetch the default architecture and default target vector from BFD. @@ -6824,84 +6902,333 @@ enable_gdbtk=no ;; esac -# Libunwind support for ia64. +# Handle optional debuginfod support -# Check whether --with-libunwind-ia64 was given. -if test "${with_libunwind_ia64+set}" = set; then : - withval=$with_libunwind_ia64; -else - with_libunwind_ia64=auto -fi -# Backward compatibility option. -if test "${with_libunwind+set}" = set; then - if test x"$with_libunwind_ia64" != xauto; then - as_fn_error $? "option --with-libunwind is deprecated, use --with-libunwind-ia64" "$LINENO" 5 - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: option --with-libunwind is deprecated, use --with-libunwind-ia64" >&5 -$as_echo "$as_me: WARNING: option --with-libunwind is deprecated, use --with-libunwind-ia64" >&2;} - with_libunwind_ia64="$with_libunwind" -fi -case "$with_libunwind_ia64" in - yes | no) - ;; - auto) - for ac_header in libunwind-ia64.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "libunwind-ia64.h" "ac_cv_header_libunwind_ia64_h" "$ac_includes_default" -if test "x$ac_cv_header_libunwind_ia64_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBUNWIND_IA64_H 1 -_ACEOF -fi +if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_PKG_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi done + done +IFS=$as_save_IFS - with_libunwind_ia64=$ac_cv_header_libunwind_ia64_h - ;; - *) - as_fn_error $? "bad value $with_libunwind_ia64 for GDB --with-libunwind-ia64 option" "$LINENO" 5 - ;; + ;; esac +fi +PKG_CONFIG=$ac_cv_path_PKG_CONFIG +if test -n "$PKG_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 +$as_echo "$PKG_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi -if test x"$with_libunwind_ia64" = xyes; then - for ac_header in libunwind-ia64.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "libunwind-ia64.h" "ac_cv_header_libunwind_ia64_h" "$ac_includes_default" -if test "x$ac_cv_header_libunwind_ia64_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBUNWIND_IA64_H 1 -_ACEOF fi - +if test -z "$ac_cv_path_PKG_CONFIG"; then + ac_pt_PKG_CONFIG=$PKG_CONFIG + # Extract the first word of "pkg-config", so it can be a program name with args. +set dummy pkg-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi done + done +IFS=$as_save_IFS - if test x"$ac_cv_header_libunwind_ia64_h" != xyes; then - as_fn_error $? "GDB option --with-libunwind-ia64 requires libunwind-ia64.h" "$LINENO" 5 - fi - CONFIG_OBS="$CONFIG_OBS ia64-libunwind-tdep.o" - CONFIG_DEPS="$CONFIG_DEPS ia64-libunwind-tdep.o" - CONFIG_SRCS="$CONFIG_SRCS ia64-libunwind-tdep.c" + ;; +esac fi - -opt_curses=no - -# Check whether --with-curses was given. -if test "${with_curses+set}" = set; then : - withval=$with_curses; opt_curses=$withval +ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG +if test -n "$ac_pt_PKG_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 +$as_echo "$ac_pt_PKG_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + if test "x$ac_pt_PKG_CONFIG" = x; then + PKG_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + PKG_CONFIG=$ac_pt_PKG_CONFIG + fi +else + PKG_CONFIG="$ac_cv_path_PKG_CONFIG" +fi + +fi +if test -n "$PKG_CONFIG"; then + _pkg_min_version=0.9.0 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 +$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } + if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + PKG_CONFIG="" + fi +fi + +# Handle optional debuginfod support + +# Check whether --with-debuginfod was given. +if test "${with_debuginfod+set}" = set; then : + withval=$with_debuginfod; +else + with_debuginfod=auto +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use debuginfod" >&5 +$as_echo_n "checking whether to use debuginfod... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_debuginfod" >&5 +$as_echo "$with_debuginfod" >&6; } + +if test "x$with_debuginfod" != xno; then + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for libdebuginfod >= 0.179" >&5 +$as_echo_n "checking for libdebuginfod >= 0.179... " >&6; } + +if test -n "$DEBUGINFOD_CFLAGS"; then + pkg_cv_DEBUGINFOD_CFLAGS="$DEBUGINFOD_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libdebuginfod >= 0.179\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libdebuginfod >= 0.179") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_DEBUGINFOD_CFLAGS=`$PKG_CONFIG --cflags "libdebuginfod >= 0.179" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$DEBUGINFOD_LIBS"; then + pkg_cv_DEBUGINFOD_LIBS="$DEBUGINFOD_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libdebuginfod >= 0.179\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libdebuginfod >= 0.179") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_DEBUGINFOD_LIBS=`$PKG_CONFIG --libs "libdebuginfod >= 0.179" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + +if test $pkg_failed = no; then + pkg_save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $pkg_cv_DEBUGINFOD_LIBS" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + +else + pkg_failed=yes +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$pkg_save_LDFLAGS +fi + + + +if test $pkg_failed = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + DEBUGINFOD_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libdebuginfod >= 0.179" 2>&1` + else + DEBUGINFOD_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libdebuginfod >= 0.179" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$DEBUGINFOD_PKG_ERRORS" >&5 + + if test "x$with_debuginfod" = xyes; then + as_fn_error $? "\"--with-debuginfod was given, but libdebuginfod is missing or unusable.\"" "$LINENO" 5 + else + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: libdebuginfod is missing or unusable; some features may be unavailable." >&5 +$as_echo "$as_me: WARNING: libdebuginfod is missing or unusable; some features may be unavailable." >&2;} + fi +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + if test "x$with_debuginfod" = xyes; then + as_fn_error $? "\"--with-debuginfod was given, but libdebuginfod is missing or unusable.\"" "$LINENO" 5 + else + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: libdebuginfod is missing or unusable; some features may be unavailable." >&5 +$as_echo "$as_me: WARNING: libdebuginfod is missing or unusable; some features may be unavailable." >&2;} + fi +else + DEBUGINFOD_CFLAGS=$pkg_cv_DEBUGINFOD_CFLAGS + DEBUGINFOD_LIBS=$pkg_cv_DEBUGINFOD_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define HAVE_LIBDEBUGINFOD 1" >>confdefs.h + +fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: debuginfod support disabled; some features may be unavailable." >&5 +$as_echo "$as_me: WARNING: debuginfod support disabled; some features may be unavailable." >&2;} +fi + + +# Libunwind support for ia64. + +# Check whether --with-libunwind-ia64 was given. +if test "${with_libunwind_ia64+set}" = set; then : + withval=$with_libunwind_ia64; +else + with_libunwind_ia64=auto +fi + + +# Backward compatibility option. +if test "${with_libunwind+set}" = set; then + if test x"$with_libunwind_ia64" != xauto; then + as_fn_error $? "option --with-libunwind is deprecated, use --with-libunwind-ia64" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: option --with-libunwind is deprecated, use --with-libunwind-ia64" >&5 +$as_echo "$as_me: WARNING: option --with-libunwind is deprecated, use --with-libunwind-ia64" >&2;} + with_libunwind_ia64="$with_libunwind" +fi + +case "$with_libunwind_ia64" in + yes | no) + ;; + auto) + for ac_header in libunwind-ia64.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "libunwind-ia64.h" "ac_cv_header_libunwind_ia64_h" "$ac_includes_default" +if test "x$ac_cv_header_libunwind_ia64_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBUNWIND_IA64_H 1 +_ACEOF + +fi + +done + + with_libunwind_ia64=$ac_cv_header_libunwind_ia64_h + ;; + *) + as_fn_error $? "bad value $with_libunwind_ia64 for GDB --with-libunwind-ia64 option" "$LINENO" 5 + ;; +esac + +if test x"$with_libunwind_ia64" = xyes; then + for ac_header in libunwind-ia64.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "libunwind-ia64.h" "ac_cv_header_libunwind_ia64_h" "$ac_includes_default" +if test "x$ac_cv_header_libunwind_ia64_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBUNWIND_IA64_H 1 +_ACEOF + +fi + +done + + if test x"$ac_cv_header_libunwind_ia64_h" != xyes; then + as_fn_error $? "GDB option --with-libunwind-ia64 requires libunwind-ia64.h" "$LINENO" 5 + fi + CONFIG_OBS="$CONFIG_OBS ia64-libunwind-tdep.o" + CONFIG_DEPS="$CONFIG_DEPS ia64-libunwind-tdep.o" + CONFIG_SRCS="$CONFIG_SRCS ia64-libunwind-tdep.c" +fi + +opt_curses=no + +# Check whether --with-curses was given. +if test "${with_curses+set}" = set; then : + withval=$with_curses; opt_curses=$withval +fi + + +prefer_curses=no +if test "$opt_curses" = "yes"; then + prefer_curses=yes +fi -prefer_curses=no -if test "$opt_curses" = "yes"; then - prefer_curses=yes -fi - # Profiling support. # Check whether --enable-profiling was given. if test "${enable_profiling+set}" = set; then : @@ -7071,7 +7398,7 @@ ;; esac else - BUGURL="http://www.gnu.org/software/gdb/bugs/" + BUGURL="https://www.gnu.org/software/gdb/bugs/" fi @@ -8004,66 +8331,6 @@ fi -# fbsd-nat.c can also use kinfo_getfile. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing kinfo_getfile" >&5 -$as_echo_n "checking for library containing kinfo_getfile... " >&6; } -if ${ac_cv_search_kinfo_getfile+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_func_search_save_LIBS=$LIBS -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char kinfo_getfile (); -int -main () -{ -return kinfo_getfile (); - ; - return 0; -} -_ACEOF -for ac_lib in '' util util-freebsd; do - if test -z "$ac_lib"; then - ac_res="none required" - else - ac_res=-l$ac_lib - LIBS="-l$ac_lib $ac_func_search_save_LIBS" - fi - if ac_fn_c_try_link "$LINENO"; then : - ac_cv_search_kinfo_getfile=$ac_res -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext - if ${ac_cv_search_kinfo_getfile+:} false; then : - break -fi -done -if ${ac_cv_search_kinfo_getfile+:} false; then : - -else - ac_cv_search_kinfo_getfile=no -fi -rm conftest.$ac_ext -LIBS=$ac_func_search_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_kinfo_getfile" >&5 -$as_echo "$ac_cv_search_kinfo_getfile" >&6; } -ac_res=$ac_cv_search_kinfo_getfile -if test "$ac_res" != no; then : - test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" - -$as_echo "#define HAVE_KINFO_GETFILE 1" >>confdefs.h - -fi - - if test "X$prefix" = "XNONE"; then acl_final_prefix="$ac_default_prefix" @@ -8269,6 +8536,16 @@ fi + +# Check whether --with-libiconv-type was given. +if test "${with_libiconv_type+set}" = set; then : + withval=$with_libiconv_type; with_libiconv_type=$withval +else + with_libiconv_type=auto +fi + + lib_type=`eval echo \$with_libiconv_type` + LIBICONV= LTLIBICONV= INCICONV= @@ -8306,13 +8583,13 @@ found_so= found_a= if test $use_additional = yes; then - if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then + if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext" && test x$lib_type != xstatic; then found_dir="$additional_libdir" found_so="$additional_libdir/lib$name.$shlibext" if test -f "$additional_libdir/lib$name.la"; then found_la="$additional_libdir/lib$name.la" fi - else + elif test x$lib_type != xshared; then if test -f "$additional_libdir/lib$name.$libext"; then found_dir="$additional_libdir" found_a="$additional_libdir/lib$name.$libext" @@ -8336,13 +8613,13 @@ case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` - if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then + if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext" && test x$lib_type != xstatic; then found_dir="$dir" found_so="$dir/lib$name.$shlibext" if test -f "$dir/lib$name.la"; then found_la="$dir/lib$name.la" fi - else + elif test x$lib_type != xshared; then if test -f "$dir/lib$name.$libext"; then found_dir="$dir" found_a="$dir/lib$name.$libext" @@ -8570,8 +8847,13 @@ done fi else - LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" - LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-l$name" + if test "x$lib_type" = "xauto" || test "x$lib_type" = "xshared"; then + LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" + LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-l$name" + else + LIBICONV="${LIBICONV}${LIBICONV:+ }-l:lib$name.$libext" + LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-l:lib$name.$libext" + fi fi fi fi @@ -9371,6 +9653,16 @@ fi + +# Check whether --with-libexpat-type was given. +if test "${with_libexpat_type+set}" = set; then : + withval=$with_libexpat_type; with_libexpat_type=$withval +else + with_libexpat_type=auto +fi + + lib_type=`eval echo \$with_libexpat_type` + LIBEXPAT= LTLIBEXPAT= INCEXPAT= @@ -9408,13 +9700,13 @@ found_so= found_a= if test $use_additional = yes; then - if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then + if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext" && test x$lib_type != xstatic; then found_dir="$additional_libdir" found_so="$additional_libdir/lib$name.$shlibext" if test -f "$additional_libdir/lib$name.la"; then found_la="$additional_libdir/lib$name.la" fi - else + elif test x$lib_type != xshared; then if test -f "$additional_libdir/lib$name.$libext"; then found_dir="$additional_libdir" found_a="$additional_libdir/lib$name.$libext" @@ -9438,13 +9730,13 @@ case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` - if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then + if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext" && test x$lib_type != xstatic; then found_dir="$dir" found_so="$dir/lib$name.$shlibext" if test -f "$dir/lib$name.la"; then found_la="$dir/lib$name.la" fi - else + elif test x$lib_type != xshared; then if test -f "$dir/lib$name.$libext"; then found_dir="$dir" found_a="$dir/lib$name.$libext" @@ -9672,8 +9964,13 @@ done fi else - LIBEXPAT="${LIBEXPAT}${LIBEXPAT:+ }-l$name" - LTLIBEXPAT="${LTLIBEXPAT}${LTLIBEXPAT:+ }-l$name" + if test "x$lib_type" = "xauto" || test "x$lib_type" = "xshared"; then + LIBEXPAT="${LIBEXPAT}${LIBEXPAT:+ }-l$name" + LTLIBEXPAT="${LTLIBEXPAT}${LTLIBEXPAT:+ }-l$name" + else + LIBEXPAT="${LIBEXPAT}${LIBEXPAT:+ }-l:lib$name.$libext" + LTLIBEXPAT="${LTLIBEXPAT}${LTLIBEXPAT:+ }-l:lib$name.$libext" + fi fi fi fi @@ -9876,6 +10173,16 @@ fi + +# Check whether --with-libmpfr-type was given. +if test "${with_libmpfr_type+set}" = set; then : + withval=$with_libmpfr_type; with_libmpfr_type=$withval +else + with_libmpfr_type=auto +fi + + lib_type=`eval echo \$with_libmpfr_type` + LIBMPFR= LTLIBMPFR= INCMPFR= @@ -9913,13 +10220,13 @@ found_so= found_a= if test $use_additional = yes; then - if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then + if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext" && test x$lib_type != xstatic; then found_dir="$additional_libdir" found_so="$additional_libdir/lib$name.$shlibext" if test -f "$additional_libdir/lib$name.la"; then found_la="$additional_libdir/lib$name.la" fi - else + elif test x$lib_type != xshared; then if test -f "$additional_libdir/lib$name.$libext"; then found_dir="$additional_libdir" found_a="$additional_libdir/lib$name.$libext" @@ -9943,13 +10250,13 @@ case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` - if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then + if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext" && test x$lib_type != xstatic; then found_dir="$dir" found_so="$dir/lib$name.$shlibext" if test -f "$dir/lib$name.la"; then found_la="$dir/lib$name.la" fi - else + elif test x$lib_type != xshared; then if test -f "$dir/lib$name.$libext"; then found_dir="$dir" found_a="$dir/lib$name.$libext" @@ -10177,8 +10484,13 @@ done fi else - LIBMPFR="${LIBMPFR}${LIBMPFR:+ }-l$name" - LTLIBMPFR="${LTLIBMPFR}${LTLIBMPFR:+ }-l$name" + if test "x$lib_type" = "xauto" || test "x$lib_type" = "xshared"; then + LIBMPFR="${LIBMPFR}${LIBMPFR:+ }-l$name" + LTLIBMPFR="${LTLIBMPFR}${LTLIBMPFR:+ }-l$name" + else + LIBMPFR="${LIBMPFR}${LIBMPFR:+ }-l:lib$name.$libext" + LTLIBMPFR="${LTLIBMPFR}${LTLIBMPFR:+ }-l:lib$name.$libext" + fi fi fi fi @@ -10671,6 +10983,21 @@ fi fi + +# Check whether --with-python-libdir was given. +if test "${with_python_libdir+set}" = set; then : + withval=$with_python_libdir; +else + + # If no python libdir is specified then select one based on + # python's prefix path. + if test -n "${python_prefix}"; then + with_python_libdir=${python_prefix}/lib + fi + +fi + + if test "${have_libpython}" != no; then $as_echo "#define HAVE_PYTHON 1" >>confdefs.h @@ -10681,17 +11008,48 @@ CONFIG_INSTALL="$CONFIG_INSTALL install-python" ENABLE_CFLAGS="$ENABLE_CFLAGS \$(SUBDIR_PYTHON_CFLAGS)" - # Flags needed to compile Python code (taken from python-config --cflags). - # We cannot call python-config directly because it will output whatever was - # used when compiling the Python interpreter itself, including flags which - # would make the python-related objects be compiled differently from the - # rest of GDB (e.g., -O2 and -fPIC). - if test "${GCC}" = yes; then - tentative_python_cflags="-fno-strict-aliasing -fwrapv" - # Python headers recommend -DNDEBUG, but it's unclear if that just - # refers to building Python itself. In release mode, though, it - # doesn't hurt for the Python code in gdb to follow. - $development || tentative_python_cflags="$tentative_python_cflags -DNDEBUG" + if test -n "${with_python_libdir}"; then + +cat >>confdefs.h <<_ACEOF +#define WITH_PYTHON_LIBDIR "${with_python_libdir}" +_ACEOF + + + if test "x$exec_prefix" = xNONE || test "x$exec_prefix" = 'x${prefix}'; then + if test "x$prefix" = xNONE; then + test_prefix=/usr/local + else + test_prefix=$prefix + fi + else + test_prefix=$exec_prefix + fi + value=0 + case ${with_python_libdir} in + "${test_prefix}"|"${test_prefix}/"*|\ + '${exec_prefix}'|'${exec_prefix}/'*) + value=1 + ;; + esac + +cat >>confdefs.h <<_ACEOF +#define PYTHON_LIBDIR_RELOCATABLE $value +_ACEOF + + + fi + + # Flags needed to compile Python code (taken from python-config --cflags). + # We cannot call python-config directly because it will output whatever was + # used when compiling the Python interpreter itself, including flags which + # would make the python-related objects be compiled differently from the + # rest of GDB (e.g., -O2 and -fPIC). + if test "${GCC}" = yes; then + tentative_python_cflags="-fno-strict-aliasing -fwrapv" + # Python headers recommend -DNDEBUG, but it's unclear if that just + # refers to building Python itself. In release mode, though, it + # doesn't hurt for the Python code in gdb to follow. + $development || tentative_python_cflags="$tentative_python_cflags -DNDEBUG" fi if test "x${tentative_python_cflags}" != x; then @@ -10826,7 +11184,7 @@ -try_guile_versions="guile-2.0" +try_guile_versions="guile-3.0 guile-2.2 guile-2.0" have_libguile=no case "${with_guile}" in no) @@ -11370,1354 +11728,1319 @@ +# ------------------------- # +# Checks for header files. # +# ------------------------- # -# Check whether --with-intel_pt was given. -if test "${with_intel_pt+set}" = set; then : - withval=$with_intel_pt; +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if ${ac_cv_header_stdc+:} false; then : + $as_echo_n "(cached) " >&6 else - with_intel_pt=auto + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdlib.h> +#include <stdarg.h> +#include <string.h> +#include <float.h> + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use intel pt" >&5 -$as_echo_n "checking whether to use intel pt... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_intel_pt" >&5 -$as_echo "$with_intel_pt" >&6; } +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <string.h> + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : -if test "${with_intel_pt}" = no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Intel Processor Trace support disabled; some features may be unavailable." >&5 -$as_echo "$as_me: WARNING: Intel Processor Trace support disabled; some features may be unavailable." >&2;} - HAVE_LIBIPT=no else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ +#include <stdlib.h> + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi -#include <linux/perf_event.h> -#ifndef PERF_ATTR_SIZE_VER5 -# error +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <ctype.h> +#include <stdlib.h> +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} _ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - perf_event=yes +if ac_fn_c_try_run "$LINENO"; then : + else - perf_event=no + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f conftest.err conftest.i conftest.$ac_ext - if test "$perf_event" != yes; then - if test "$with_intel_pt" = yes; then - as_fn_error $? "linux/perf_event.h missing or too old" "$LINENO" 5 - else - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: linux/perf_event.h missing or too old; some features may be unavailable." >&5 -$as_echo "$as_me: WARNING: linux/perf_event.h missing or too old; some features may be unavailable." >&2;} - fi - fi +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then +$as_echo "#define STDC_HEADERS 1" >>confdefs.h +fi +# elf_hp.h is for HP/UX 64-bit shared library support. +for ac_header in nlist.h machine/reg.h \ + thread_db.h \ + sys/file.h sys/filio.h sys/ioctl.h sys/param.h \ + sys/resource.h sys/ptrace.h ptrace.h \ + sys/reg.h sys/debugreg.h \ + termios.h elf_hp.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF +fi +done +for ac_header in sys/user.h +do : + ac_fn_c_check_header_compile "$LINENO" "sys/user.h" "ac_cv_header_sys_user_h" "#if HAVE_SYS_PARAM_H +# include <sys/param.h> +#endif +" +if test "x$ac_cv_header_sys_user_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SYS_USER_H 1 +_ACEOF - use_additional=yes +fi - acl_save_prefix="$prefix" - prefix="$acl_final_prefix" - acl_save_exec_prefix="$exec_prefix" - exec_prefix="$acl_final_exec_prefix" +done - eval additional_includedir=\"$includedir\" - eval additional_libdir=\"$libdir\" - exec_prefix="$acl_save_exec_prefix" - prefix="$acl_save_prefix" +for ac_header in curses.h cursesX.h ncurses.h ncursesw/ncurses.h ncurses/ncurses.h ncurses/term.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF +fi -# Check whether --with-libipt-prefix was given. -if test "${with_libipt_prefix+set}" = set; then : - withval=$with_libipt_prefix; - if test "X$withval" = "Xno"; then - use_additional=no - else - if test "X$withval" = "X"; then +done - acl_save_prefix="$prefix" - prefix="$acl_final_prefix" - acl_save_exec_prefix="$exec_prefix" - exec_prefix="$acl_final_exec_prefix" +for ac_header in term.h +do : + ac_fn_c_check_header_compile "$LINENO" "term.h" "ac_cv_header_term_h" "#if HAVE_CURSES_H +# include <curses.h> +#endif - eval additional_includedir=\"$includedir\" - eval additional_libdir=\"$libdir\" +" +if test "x$ac_cv_header_term_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_TERM_H 1 +_ACEOF - exec_prefix="$acl_save_exec_prefix" - prefix="$acl_save_prefix" +fi - else - additional_includedir="$withval/include" - additional_libdir="$withval/lib" - fi - fi +done + + +for ac_header in sys/socket.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "sys/socket.h" "ac_cv_header_sys_socket_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_socket_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SYS_SOCKET_H 1 +_ACEOF fi - LIBIPT= - LTLIBIPT= - INCIPT= - rpathdirs= - ltrpathdirs= - names_already_handled= - names_next_round='ipt ' - while test -n "$names_next_round"; do - names_this_round="$names_next_round" - names_next_round= - for name in $names_this_round; do - already_handled= - for n in $names_already_handled; do - if test "$n" = "$name"; then - already_handled=yes - break - fi - done - if test -z "$already_handled"; then - names_already_handled="$names_already_handled $name" - uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` - eval value=\"\$HAVE_LIB$uppername\" - if test -n "$value"; then - if test "$value" = yes; then - eval value=\"\$LIB$uppername\" - test -z "$value" || LIBIPT="${LIBIPT}${LIBIPT:+ }$value" - eval value=\"\$LTLIB$uppername\" - test -z "$value" || LTLIBIPT="${LTLIBIPT}${LTLIBIPT:+ }$value" - else - : - fi - else - found_dir= - found_la= - found_so= - found_a= - if test $use_additional = yes; then - if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then - found_dir="$additional_libdir" - found_so="$additional_libdir/lib$name.$shlibext" - if test -f "$additional_libdir/lib$name.la"; then - found_la="$additional_libdir/lib$name.la" - fi - else - if test -f "$additional_libdir/lib$name.$libext"; then - found_dir="$additional_libdir" - found_a="$additional_libdir/lib$name.$libext" - if test -f "$additional_libdir/lib$name.la"; then - found_la="$additional_libdir/lib$name.la" - fi - fi - fi - fi - if test "X$found_dir" = "X"; then - for x in $LDFLAGS $LTLIBIPT; do +done - acl_save_prefix="$prefix" - prefix="$acl_final_prefix" - acl_save_exec_prefix="$exec_prefix" - exec_prefix="$acl_final_exec_prefix" - eval x=\"$x\" - exec_prefix="$acl_save_exec_prefix" - prefix="$acl_save_prefix" +for ac_header in ws2tcpip.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "ws2tcpip.h" "ac_cv_header_ws2tcpip_h" "$ac_includes_default" +if test "x$ac_cv_header_ws2tcpip_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_WS2TCPIP_H 1 +_ACEOF - case "$x" in - -L*) - dir=`echo "X$x" | sed -e 's/^X-L//'` - if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then - found_dir="$dir" - found_so="$dir/lib$name.$shlibext" - if test -f "$dir/lib$name.la"; then - found_la="$dir/lib$name.la" - fi - else - if test -f "$dir/lib$name.$libext"; then - found_dir="$dir" - found_a="$dir/lib$name.$libext" - if test -f "$dir/lib$name.la"; then - found_la="$dir/lib$name.la" - fi - fi - fi - ;; - esac - if test "X$found_dir" != "X"; then - break - fi - done - fi - if test "X$found_dir" != "X"; then - LTLIBIPT="${LTLIBIPT}${LTLIBIPT:+ }-L$found_dir -l$name" - if test "X$found_so" != "X"; then - if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then - LIBIPT="${LIBIPT}${LIBIPT:+ }$found_so" - else - haveit= - for x in $ltrpathdirs; do - if test "X$x" = "X$found_dir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - ltrpathdirs="$ltrpathdirs $found_dir" - fi - if test "$hardcode_direct" = yes; then - LIBIPT="${LIBIPT}${LIBIPT:+ }$found_so" - else - if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then - LIBIPT="${LIBIPT}${LIBIPT:+ }$found_so" - haveit= - for x in $rpathdirs; do - if test "X$x" = "X$found_dir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - rpathdirs="$rpathdirs $found_dir" - fi - else - haveit= - for x in $LDFLAGS $LIBIPT; do +fi - acl_save_prefix="$prefix" - prefix="$acl_final_prefix" - acl_save_exec_prefix="$exec_prefix" - exec_prefix="$acl_final_exec_prefix" - eval x=\"$x\" - exec_prefix="$acl_save_exec_prefix" - prefix="$acl_save_prefix" +done - if test "X$x" = "X-L$found_dir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - LIBIPT="${LIBIPT}${LIBIPT:+ }-L$found_dir" - fi - if test "$hardcode_minus_L" != no; then - LIBIPT="${LIBIPT}${LIBIPT:+ }$found_so" - else - LIBIPT="${LIBIPT}${LIBIPT:+ }-l$name" - fi - fi - fi - fi - else - if test "X$found_a" != "X"; then - LIBIPT="${LIBIPT}${LIBIPT:+ }$found_a" - else - LIBIPT="${LIBIPT}${LIBIPT:+ }-L$found_dir -l$name" - fi - fi - additional_includedir= - case "$found_dir" in - */lib | */lib/) - basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'` - additional_includedir="$basedir/include" - ;; - esac - if test "X$additional_includedir" != "X"; then - if test "X$additional_includedir" != "X/usr/include"; then - haveit= - if test "X$additional_includedir" = "X/usr/local/include"; then - if test -n "$GCC"; then - case $host_os in - linux*) haveit=yes;; - esac - fi - fi - if test -z "$haveit"; then - for x in $CPPFLAGS $INCIPT; do - acl_save_prefix="$prefix" - prefix="$acl_final_prefix" - acl_save_exec_prefix="$exec_prefix" - exec_prefix="$acl_final_exec_prefix" - eval x=\"$x\" - exec_prefix="$acl_save_exec_prefix" - prefix="$acl_save_prefix" +# ------------------------- # +# Checks for declarations. # +# ------------------------- # - if test "X$x" = "X-I$additional_includedir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - if test -d "$additional_includedir"; then - INCIPT="${INCIPT}${INCIPT:+ }-I$additional_includedir" - fi - fi - fi - fi - fi - if test -n "$found_la"; then - save_libdir="$libdir" - case "$found_la" in - */* | *\\*) . "$found_la" ;; - *) . "./$found_la" ;; - esac - libdir="$save_libdir" - for dep in $dependency_libs; do - case "$dep" in - -L*) - additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` - if test "X$additional_libdir" != "X/usr/lib"; then - haveit= - if test "X$additional_libdir" = "X/usr/local/lib"; then - if test -n "$GCC"; then - case $host_os in - linux*) haveit=yes;; - esac - fi - fi - if test -z "$haveit"; then - haveit= - for x in $LDFLAGS $LIBIPT; do - acl_save_prefix="$prefix" - prefix="$acl_final_prefix" - acl_save_exec_prefix="$exec_prefix" - exec_prefix="$acl_final_exec_prefix" - eval x=\"$x\" - exec_prefix="$acl_save_exec_prefix" - prefix="$acl_save_prefix" + # Check for presence and size of long long. + ac_fn_c_check_type "$LINENO" "long long" "ac_cv_type_long_long" "$ac_includes_default" +if test "x$ac_cv_type_long_long" = xyes; then : - if test "X$x" = "X-L$additional_libdir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - if test -d "$additional_libdir"; then - LIBIPT="${LIBIPT}${LIBIPT:+ }-L$additional_libdir" - fi - fi - haveit= - for x in $LDFLAGS $LTLIBIPT; do +cat >>confdefs.h <<_ACEOF +#define HAVE_LONG_LONG 1 +_ACEOF - acl_save_prefix="$prefix" - prefix="$acl_final_prefix" - acl_save_exec_prefix="$exec_prefix" - exec_prefix="$acl_final_exec_prefix" - eval x=\"$x\" - exec_prefix="$acl_save_exec_prefix" - prefix="$acl_save_prefix" +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long long" >&5 +$as_echo_n "checking size of long long... " >&6; } +if ${ac_cv_sizeof_long_long+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long long))" "ac_cv_sizeof_long_long" "$ac_includes_default"; then : - if test "X$x" = "X-L$additional_libdir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - if test -d "$additional_libdir"; then - LTLIBIPT="${LTLIBIPT}${LTLIBIPT:+ }-L$additional_libdir" - fi - fi - fi - fi - ;; - -R*) - dir=`echo "X$dep" | sed -e 's/^X-R//'` - if test "$enable_rpath" != no; then - haveit= - for x in $rpathdirs; do - if test "X$x" = "X$dir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - rpathdirs="$rpathdirs $dir" - fi - haveit= - for x in $ltrpathdirs; do - if test "X$x" = "X$dir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - ltrpathdirs="$ltrpathdirs $dir" - fi - fi - ;; - -l*) - names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` - ;; - *.la) - names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` - ;; - *) - LIBIPT="${LIBIPT}${LIBIPT:+ }$dep" - LTLIBIPT="${LTLIBIPT}${LTLIBIPT:+ }$dep" - ;; - esac - done - fi - else - LIBIPT="${LIBIPT}${LIBIPT:+ }-l$name" - LTLIBIPT="${LTLIBIPT}${LTLIBIPT:+ }-l$name" - fi - fi - fi - done - done - if test "X$rpathdirs" != "X"; then - if test -n "$hardcode_libdir_separator"; then - alldirs= - for found_dir in $rpathdirs; do - alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir" - done - acl_save_libdir="$libdir" - libdir="$alldirs" - eval flag=\"$hardcode_libdir_flag_spec\" - libdir="$acl_save_libdir" - LIBIPT="${LIBIPT}${LIBIPT:+ }$flag" - else - for found_dir in $rpathdirs; do - acl_save_libdir="$libdir" - libdir="$found_dir" - eval flag=\"$hardcode_libdir_flag_spec\" - libdir="$acl_save_libdir" - LIBIPT="${LIBIPT}${LIBIPT:+ }$flag" - done - fi - fi - if test "X$ltrpathdirs" != "X"; then - for found_dir in $ltrpathdirs; do - LTLIBIPT="${LTLIBIPT}${LTLIBIPT:+ }-R$found_dir" - done - fi +else + if test "$ac_cv_type_long_long" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot compute sizeof (long long) +See \`config.log' for more details" "$LINENO" 5; } + else + ac_cv_sizeof_long_long=0 + fi +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_long" >&5 +$as_echo "$ac_cv_sizeof_long_long" >&6; } - ac_save_CPPFLAGS="$CPPFLAGS" - for element in $INCIPT; do - haveit= - for x in $CPPFLAGS; do - acl_save_prefix="$prefix" - prefix="$acl_final_prefix" - acl_save_exec_prefix="$exec_prefix" - exec_prefix="$acl_final_exec_prefix" - eval x=\"$x\" - exec_prefix="$acl_save_exec_prefix" - prefix="$acl_save_prefix" +cat >>confdefs.h <<_ACEOF +#define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long +_ACEOF - if test "X$x" = "X$element"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" - fi - done +fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libipt" >&5 -$as_echo_n "checking for libipt... " >&6; } -if ${ac_cv_libipt+:} false; then : - $as_echo_n "(cached) " >&6 + + as_ac_Symbol=`$as_echo "ac_cv_have_decl_basename(char *)" | $as_tr_sh` +ac_fn_c_check_decl "$LINENO" "basename(char *)" "$as_ac_Symbol" "$ac_includes_default" +if eval test \"x\$"$as_ac_Symbol"\" = x"yes"; then : + ac_have_decl=1 else + ac_have_decl=0 +fi - ac_save_LIBS="$LIBS" - LIBS="$LIBS $LIBIPT" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include "intel-pt.h" -int -main () -{ -pt_insn_alloc_decoder (0); - ; - return 0; -} +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_BASENAME $ac_have_decl _ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_libipt=yes +ac_fn_c_check_decl "$LINENO" "ffs" "ac_cv_have_decl_ffs" "$ac_includes_default" +if test "x$ac_cv_have_decl_ffs" = xyes; then : + ac_have_decl=1 else - ac_cv_libipt=no + ac_have_decl=0 fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LIBS="$ac_save_LIBS" +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_FFS $ac_have_decl +_ACEOF +ac_fn_c_check_decl "$LINENO" "asprintf" "ac_cv_have_decl_asprintf" "$ac_includes_default" +if test "x$ac_cv_have_decl_asprintf" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_libipt" >&5 -$as_echo "$ac_cv_libipt" >&6; } - if test "$ac_cv_libipt" = yes; then - HAVE_LIBIPT=yes - -$as_echo "#define HAVE_LIBIPT 1" >>confdefs.h - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libipt" >&5 -$as_echo_n "checking how to link with libipt... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBIPT" >&5 -$as_echo "$LIBIPT" >&6; } - else - HAVE_LIBIPT=no - CPPFLAGS="$ac_save_CPPFLAGS" - LIBIPT= - LTLIBIPT= - fi +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_ASPRINTF $ac_have_decl +_ACEOF +ac_fn_c_check_decl "$LINENO" "vasprintf" "ac_cv_have_decl_vasprintf" "$ac_includes_default" +if test "x$ac_cv_have_decl_vasprintf" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_VASPRINTF $ac_have_decl +_ACEOF +ac_fn_c_check_decl "$LINENO" "snprintf" "ac_cv_have_decl_snprintf" "$ac_includes_default" +if test "x$ac_cv_have_decl_snprintf" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_SNPRINTF $ac_have_decl +_ACEOF +ac_fn_c_check_decl "$LINENO" "vsnprintf" "ac_cv_have_decl_vsnprintf" "$ac_includes_default" +if test "x$ac_cv_have_decl_vsnprintf" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_VSNPRINTF $ac_have_decl +_ACEOF + ac_fn_c_check_decl "$LINENO" "strtol" "ac_cv_have_decl_strtol" "$ac_includes_default" +if test "x$ac_cv_have_decl_strtol" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi - if test "$HAVE_LIBIPT" != yes; then - if test "$with_intel_pt" = yes; then - as_fn_error $? "libipt is missing or unusable" "$LINENO" 5 - else - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: libipt is missing or unusable; some features may be unavailable." >&5 -$as_echo "$as_me: WARNING: libipt is missing or unusable; some features may be unavailable." >&2;} - fi - else - save_LIBS=$LIBS - LIBS="$LIBS $LIBIPT" - for ac_func in pt_insn_event -do : - ac_fn_c_check_func "$LINENO" "pt_insn_event" "ac_cv_func_pt_insn_event" -if test "x$ac_cv_func_pt_insn_event" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_PT_INSN_EVENT 1 +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_STRTOL $ac_have_decl _ACEOF - +ac_fn_c_check_decl "$LINENO" "strtoul" "ac_cv_have_decl_strtoul" "$ac_includes_default" +if test "x$ac_cv_have_decl_strtoul" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 fi -done - ac_fn_c_check_member "$LINENO" "struct pt_insn" "enabled" "ac_cv_member_struct_pt_insn_enabled" "#include <intel-pt.h> -" -if test "x$ac_cv_member_struct_pt_insn_enabled" = xyes; then : +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_STRTOUL $ac_have_decl +_ACEOF +ac_fn_c_check_decl "$LINENO" "strtoll" "ac_cv_have_decl_strtoll" "$ac_includes_default" +if test "x$ac_cv_have_decl_strtoll" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi cat >>confdefs.h <<_ACEOF -#define HAVE_STRUCT_PT_INSN_ENABLED 1 +#define HAVE_DECL_STRTOLL $ac_have_decl _ACEOF +ac_fn_c_check_decl "$LINENO" "strtoull" "ac_cv_have_decl_strtoull" "$ac_includes_default" +if test "x$ac_cv_have_decl_strtoull" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_STRTOULL $ac_have_decl +_ACEOF + ac_fn_c_check_decl "$LINENO" "strverscmp" "ac_cv_have_decl_strverscmp" "$ac_includes_default" +if test "x$ac_cv_have_decl_strverscmp" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 fi -ac_fn_c_check_member "$LINENO" "struct pt_insn" "resynced" "ac_cv_member_struct_pt_insn_resynced" "#include <intel-pt.h> -" -if test "x$ac_cv_member_struct_pt_insn_resynced" = xyes; then : cat >>confdefs.h <<_ACEOF -#define HAVE_STRUCT_PT_INSN_RESYNCED 1 +#define HAVE_DECL_STRVERSCMP $ac_have_decl _ACEOF + +ac_fn_c_check_decl "$LINENO" "snprintf" "ac_cv_have_decl_snprintf" "$ac_includes_default" +if test "x$ac_cv_have_decl_snprintf" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 fi - LIBS=$save_LIBS - fi -fi +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_SNPRINTF $ac_have_decl +_ACEOF -# ------------------------- # -# Checks for header files. # -# ------------------------- # -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 -$as_echo_n "checking for ANSI C header files... " >&6; } -if ${ac_cv_header_stdc+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LC_MESSAGES" >&5 +$as_echo_n "checking for LC_MESSAGES... " >&6; } +if ${am_cv_val_LC_MESSAGES+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include <stdlib.h> -#include <stdarg.h> -#include <string.h> -#include <float.h> - +#include <locale.h> int main () { - +return LC_MESSAGES ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_header_stdc=yes +if ac_fn_c_try_link "$LINENO"; then : + am_cv_val_LC_MESSAGES=yes else - ac_cv_header_stdc=no + am_cv_val_LC_MESSAGES=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_val_LC_MESSAGES" >&5 +$as_echo "$am_cv_val_LC_MESSAGES" >&6; } + if test $am_cv_val_LC_MESSAGES = yes; then -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <string.h> +$as_echo "#define HAVE_LC_MESSAGES 1" >>confdefs.h -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then : + fi -else - ac_cv_header_stdc=no -fi -rm -f conftest* -fi +# ------------------ # +# Checks for types. # +# ------------------ # -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <stdlib.h> +ac_fn_c_check_type "$LINENO" "socklen_t" "ac_cv_type_socklen_t" "#include <sys/types.h> +#if HAVE_SYS_SOCKET_H +# include <sys/socket.h> +#elif HAVE_WS2TCPIP_H +# include <ws2tcpip.h> +#endif +" +if test "x$ac_cv_type_socklen_t" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_SOCKLEN_T 1 _ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then : -else - ac_cv_header_stdc=no -fi -rm -f conftest* fi -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then : - : + +# ------------------------------------- # +# Checks for compiler characteristics. # +# ------------------------------------- # + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 +$as_echo_n "checking for an ANSI C-conforming const... " >&6; } +if ${ac_cv_c_const+:} false; then : + $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include <ctype.h> -#include <stdlib.h> -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; + +#ifndef __cplusplus + /* Ultrix mips cc rejects this sort of thing. */ + typedef int charset[2]; + const charset cs = { 0, 0 }; + /* SunOS 4.1.1 cc rejects this. */ + char const *const *pcpcc; + char **ppc; + /* NEC SVR4.0.2 mips cc rejects this. */ + struct point {int x, y;}; + static struct point const zero = {0,0}; + /* AIX XL C 1.02.0.0 rejects this. + It does not let you subtract one const X* pointer from another in + an arm of an if-expression whose if-part is not a constant + expression */ + const char *g = "string"; + pcpcc = &g + (g ? g-g : 0); + /* HPUX 7.0 cc rejects these. */ + ++pcpcc; + ppc = (char**) pcpcc; + pcpcc = (char const *const *) ppc; + { /* SCO 3.2v4 cc rejects this sort of thing. */ + char tx; + char *t = &tx; + char const *s = 0 ? (char *) 0 : (char const *) 0; + + *t++ = 0; + if (s) return 0; + } + { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ + int x[] = {25, 17}; + const int *foo = &x[0]; + ++foo; + } + { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ + typedef const int *iptr; + iptr p = 0; + ++p; + } + { /* AIX XL C 1.02.0.0 rejects this sort of thing, saying + "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ + struct s { int j; const int *ap[3]; } bx; + struct s *b = &bx; b->j = 5; + } + { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ + const int foo = 10; + if (!foo) return 0; + } + return !cs[0] && !zero.x; +#endif + + ; return 0; } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : - +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_const=yes else - ac_cv_header_stdc=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi + ac_cv_c_const=no fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 -$as_echo "$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then - -$as_echo "#define STDC_HEADERS 1" >>confdefs.h - +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 +$as_echo "$ac_cv_c_const" >&6; } +if test $ac_cv_c_const = no; then -# elf_hp.h is for HP/UX 64-bit shared library support. -for ac_header in nlist.h machine/reg.h poll.h sys/poll.h proc_service.h \ - thread_db.h linux/elf.h \ - sys/file.h sys/filio.h sys/ioctl.h sys/param.h \ - sys/resource.h sys/procfs.h sys/ptrace.h ptrace.h \ - sys/reg.h sys/debugreg.h sys/select.h \ - termios.h elf_hp.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF +$as_echo "#define const /**/" >>confdefs.h fi -done - -for ac_header in sys/user.h -do : - ac_fn_c_check_header_compile "$LINENO" "sys/user.h" "ac_cv_header_sys_user_h" "#if HAVE_SYS_PARAM_H -# include <sys/param.h> +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 +$as_echo_n "checking for inline... " >&6; } +if ${ac_cv_c_inline+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_c_inline=no +for ac_kw in inline __inline__ __inline; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifndef __cplusplus +typedef int foo_t; +static $ac_kw foo_t static_foo () {return 0; } +$ac_kw foo_t foo () {return 0; } #endif -" -if test "x$ac_cv_header_sys_user_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_SYS_USER_H 1 _ACEOF - +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_inline=$ac_kw fi - +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + test "$ac_cv_c_inline" != no && break done - -for ac_header in curses.h cursesX.h ncurses.h ncursesw/ncurses.h ncurses/ncurses.h ncurses/term.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 +$as_echo "$ac_cv_c_inline" >&6; } -done - -for ac_header in term.h -do : - ac_fn_c_check_header_compile "$LINENO" "term.h" "ac_cv_header_term_h" "#if HAVE_CURSES_H -# include <curses.h> +case $ac_cv_c_inline in + inline | yes) ;; + *) + case $ac_cv_c_inline in + no) ac_val=;; + *) ac_val=$ac_cv_c_inline;; + esac + cat >>confdefs.h <<_ACEOF +#ifndef __cplusplus +#define inline $ac_val #endif - -" -if test "x$ac_cv_header_term_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_TERM_H 1 _ACEOF + ;; +esac -fi - -done - - -# ------------------------- # -# Checks for declarations. # -# ------------------------- # - - - # Check for presence and size of long long. - ac_fn_c_check_type "$LINENO" "long long" "ac_cv_type_long_long" "$ac_includes_default" -if test "x$ac_cv_type_long_long" = xyes; then : - -cat >>confdefs.h <<_ACEOF -#define HAVE_LONG_LONG 1 -_ACEOF - -# The cast to long int works around a bug in the HP C Compiler -# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. -# This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long long" >&5 -$as_echo_n "checking size of long long... " >&6; } -if ${ac_cv_sizeof_long_long+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 +$as_echo_n "checking whether byte ordering is bigendian... " >&6; } +if ${ac_cv_c_bigendian+:} false; then : $as_echo_n "(cached) " >&6 else - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long long))" "ac_cv_sizeof_long_long" "$ac_includes_default"; then : - -else - if test "$ac_cv_type_long_long" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error 77 "cannot compute sizeof (long long) -See \`config.log' for more details" "$LINENO" 5; } - else - ac_cv_sizeof_long_long=0 - fi -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_long" >&5 -$as_echo "$ac_cv_sizeof_long_long" >&6; } - - + ac_cv_c_bigendian=unknown + # See if we're dealing with a universal compiler. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifndef __APPLE_CC__ + not a universal capable compiler + #endif + typedef int dummy; -cat >>confdefs.h <<_ACEOF -#define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long _ACEOF +if ac_fn_c_try_compile "$LINENO"; then : - + # Check for potential -arch flags. It is not universal unless + # there are at least two -arch flags with different values. + ac_arch= + ac_prev= + for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do + if test -n "$ac_prev"; then + case $ac_word in + i?86 | x86_64 | ppc | ppc64) + if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then + ac_arch=$ac_word + else + ac_cv_c_bigendian=universal + break + fi + ;; + esac + ac_prev= + elif test "x$ac_word" = "x-arch"; then + ac_prev=arch + fi + done fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if test $ac_cv_c_bigendian = unknown; then + # See if sys/param.h defines the BYTE_ORDER macro. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> + #include <sys/param.h> +int +main () +{ +#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ + && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ + && LITTLE_ENDIAN) + bogus endian macros + #endif - as_ac_Symbol=`$as_echo "ac_cv_have_decl_basename(char *)" | $as_tr_sh` -ac_fn_c_check_decl "$LINENO" "basename(char *)" "$as_ac_Symbol" "$ac_includes_default" -if eval test \"x\$"$as_ac_Symbol"\" = x"yes"; then : - ac_have_decl=1 -else - ac_have_decl=0 -fi - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_BASENAME $ac_have_decl + ; + return 0; +} _ACEOF -ac_fn_c_check_decl "$LINENO" "ffs" "ac_cv_have_decl_ffs" "$ac_includes_default" -if test "x$ac_cv_have_decl_ffs" = xyes; then : - ac_have_decl=1 -else - ac_have_decl=0 -fi +if ac_fn_c_try_compile "$LINENO"; then : + # It does; now see whether it defined to BIG_ENDIAN or not. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> + #include <sys/param.h> -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_FFS $ac_have_decl -_ACEOF -ac_fn_c_check_decl "$LINENO" "asprintf" "ac_cv_have_decl_asprintf" "$ac_includes_default" -if test "x$ac_cv_have_decl_asprintf" = xyes; then : - ac_have_decl=1 -else - ac_have_decl=0 -fi +int +main () +{ +#if BYTE_ORDER != BIG_ENDIAN + not big endian + #endif -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_ASPRINTF $ac_have_decl + ; + return 0; +} _ACEOF -ac_fn_c_check_decl "$LINENO" "vasprintf" "ac_cv_have_decl_vasprintf" "$ac_includes_default" -if test "x$ac_cv_have_decl_vasprintf" = xyes; then : - ac_have_decl=1 +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_bigendian=yes else - ac_have_decl=0 + ac_cv_c_bigendian=no fi - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_VASPRINTF $ac_have_decl -_ACEOF -ac_fn_c_check_decl "$LINENO" "snprintf" "ac_cv_have_decl_snprintf" "$ac_includes_default" -if test "x$ac_cv_have_decl_snprintf" = xyes; then : - ac_have_decl=1 -else - ac_have_decl=0 +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + if test $ac_cv_c_bigendian = unknown; then + # See if <limits.h> defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <limits.h> -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_SNPRINTF $ac_have_decl -_ACEOF -ac_fn_c_check_decl "$LINENO" "vsnprintf" "ac_cv_have_decl_vsnprintf" "$ac_includes_default" -if test "x$ac_cv_have_decl_vsnprintf" = xyes; then : - ac_have_decl=1 -else - ac_have_decl=0 -fi +int +main () +{ +#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) + bogus endian macros + #endif -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_VSNPRINTF $ac_have_decl + ; + return 0; +} _ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + # It does; now see whether it defined to _BIG_ENDIAN or not. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <limits.h> - ac_fn_c_check_decl "$LINENO" "strtol" "ac_cv_have_decl_strtol" "$ac_includes_default" -if test "x$ac_cv_have_decl_strtol" = xyes; then : - ac_have_decl=1 -else - ac_have_decl=0 -fi +int +main () +{ +#ifndef _BIG_ENDIAN + not big endian + #endif -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_STRTOL $ac_have_decl + ; + return 0; +} _ACEOF -ac_fn_c_check_decl "$LINENO" "strtoul" "ac_cv_have_decl_strtoul" "$ac_includes_default" -if test "x$ac_cv_have_decl_strtoul" = xyes; then : - ac_have_decl=1 +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_bigendian=yes else - ac_have_decl=0 + ac_cv_c_bigendian=no fi - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_STRTOUL $ac_have_decl -_ACEOF -ac_fn_c_check_decl "$LINENO" "strtoll" "ac_cv_have_decl_strtoll" "$ac_includes_default" -if test "x$ac_cv_have_decl_strtoll" = xyes; then : - ac_have_decl=1 -else - ac_have_decl=0 +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + if test $ac_cv_c_bigendian = unknown; then + # Compile a test program. + if test "$cross_compiling" = yes; then : + # Try to guess by grepping values from an object file. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +short int ascii_mm[] = + { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; + short int ascii_ii[] = + { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; + int use_ascii (int i) { + return ascii_mm[i] + ascii_ii[i]; + } + short int ebcdic_ii[] = + { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; + short int ebcdic_mm[] = + { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; + int use_ebcdic (int i) { + return ebcdic_mm[i] + ebcdic_ii[i]; + } + extern int foo; -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_STRTOLL $ac_have_decl -_ACEOF -ac_fn_c_check_decl "$LINENO" "strtoull" "ac_cv_have_decl_strtoull" "$ac_includes_default" -if test "x$ac_cv_have_decl_strtoull" = xyes; then : - ac_have_decl=1 -else - ac_have_decl=0 -fi - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_STRTOULL $ac_have_decl +int +main () +{ +return use_ascii (foo) == use_ebcdic (foo); + ; + return 0; +} _ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then + ac_cv_c_bigendian=yes + fi + if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then + if test "$ac_cv_c_bigendian" = unknown; then + ac_cv_c_bigendian=no + else + # finding both strings is unlikely to happen, but who knows? + ac_cv_c_bigendian=unknown + fi + fi +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ - ac_fn_c_check_decl "$LINENO" "strverscmp" "ac_cv_have_decl_strverscmp" "$ac_includes_default" -if test "x$ac_cv_have_decl_strverscmp" = xyes; then : - ac_have_decl=1 + /* Are we little or big endian? From Harbison&Steele. */ + union + { + long int l; + char c[sizeof (long int)]; + } u; + u.l = 1; + return u.c[sizeof (long int) - 1] == 1; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_c_bigendian=no else - ac_have_decl=0 + ac_cv_c_bigendian=yes +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext fi -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_STRVERSCMP $ac_have_decl -_ACEOF + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 +$as_echo "$ac_cv_c_bigendian" >&6; } + case $ac_cv_c_bigendian in #( + yes) + $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h +;; #( + no) + ;; #( + universal) + +$as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h + ;; #( + *) + as_fn_error $? "unknown endianness + presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;; + esac -ac_fn_c_check_decl "$LINENO" "snprintf" "ac_cv_have_decl_snprintf" "$ac_includes_default" -if test "x$ac_cv_have_decl_snprintf" = xyes; then : - ac_have_decl=1 -else - ac_have_decl=0 -fi +# ------------------------------ # +# Checks for library functions. # +# ------------------------------ # -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_SNPRINTF $ac_have_decl +for ac_func in getuid getgid \ + pipe pread pread64 pwrite resize_term \ + getpgid setsid \ + sigaction sigsetmask socketpair \ + ttrace wborder wresize setlocale iconvlist libiconvlist btowc \ + setrlimit getrlimit posix_madvise waitpid \ + use_default_colors +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF +fi +done - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LC_MESSAGES" >&5 -$as_echo_n "checking for LC_MESSAGES... " >&6; } -if ${am_cv_val_LC_MESSAGES+:} false; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nl_langinfo and CODESET" >&5 +$as_echo_n "checking for nl_langinfo and CODESET... " >&6; } +if ${am_cv_langinfo_codeset+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include <locale.h> +#include <langinfo.h> int main () { -return LC_MESSAGES +char* cs = nl_langinfo(CODESET); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : - am_cv_val_LC_MESSAGES=yes + am_cv_langinfo_codeset=yes else - am_cv_val_LC_MESSAGES=no + am_cv_langinfo_codeset=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext + fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_val_LC_MESSAGES" >&5 -$as_echo "$am_cv_val_LC_MESSAGES" >&6; } - if test $am_cv_val_LC_MESSAGES = yes; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_langinfo_codeset" >&5 +$as_echo "$am_cv_langinfo_codeset" >&6; } + if test $am_cv_langinfo_codeset = yes; then -$as_echo "#define HAVE_LC_MESSAGES 1" >>confdefs.h +$as_echo "#define HAVE_LANGINFO_CODESET 1" >>confdefs.h fi +ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" +if test "x$ac_cv_type_size_t" = xyes; then : -# ----------------------- # -# Checks for structures. # -# ----------------------- # - -ac_fn_c_check_member "$LINENO" "struct stat" "st_blocks" "ac_cv_member_struct_stat_st_blocks" "$ac_includes_default" -if test "x$ac_cv_member_struct_stat_st_blocks" = xyes; then : +else cat >>confdefs.h <<_ACEOF -#define HAVE_STRUCT_STAT_ST_BLOCKS 1 +#define size_t unsigned int _ACEOF - fi -ac_fn_c_check_member "$LINENO" "struct stat" "st_blksize" "ac_cv_member_struct_stat_st_blksize" "$ac_includes_default" -if test "x$ac_cv_member_struct_stat_st_blksize" = xyes; then : -cat >>confdefs.h <<_ACEOF -#define HAVE_STRUCT_STAT_ST_BLKSIZE 1 -_ACEOF + + for ac_header in $ac_header_list +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + fi +done -# ------------------ # -# Checks for types. # -# ------------------ # -ac_fn_c_check_type "$LINENO" "socklen_t" "ac_cv_type_socklen_t" "#include <sys/types.h> -#include <sys/socket.h> -" -if test "x$ac_cv_type_socklen_t" = xyes; then : + + + + +ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default" +if test "x$ac_cv_type_pid_t" = xyes; then : + +else cat >>confdefs.h <<_ACEOF -#define HAVE_SOCKLEN_T 1 +#define pid_t int _ACEOF +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if ${ac_cv_path_SED+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed + { ac_script=; unset ac_script;} + if test -z "$SED"; then + ac_path_SED_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_SED" || continue +# Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_SED_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_SED"; then + as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 + fi +else + ac_cv_path_SED=$SED +fi fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +$as_echo "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed -# ------------------------------------- # -# Checks for compiler characteristics. # -# ------------------------------------- # + # Set the 'development' global. + . $srcdir/../bfd/development.sh -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 -$as_echo_n "checking for an ANSI C-conforming const... " >&6; } -if ${ac_cv_c_const+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ +#include <stdlib.h> +#include <stdarg.h> +#include <string.h> +#include <float.h> int main () { -#ifndef __cplusplus - /* Ultrix mips cc rejects this sort of thing. */ - typedef int charset[2]; - const charset cs = { 0, 0 }; - /* SunOS 4.1.1 cc rejects this. */ - char const *const *pcpcc; - char **ppc; - /* NEC SVR4.0.2 mips cc rejects this. */ - struct point {int x, y;}; - static struct point const zero = {0,0}; - /* AIX XL C 1.02.0.0 rejects this. - It does not let you subtract one const X* pointer from another in - an arm of an if-expression whose if-part is not a constant - expression */ - const char *g = "string"; - pcpcc = &g + (g ? g-g : 0); - /* HPUX 7.0 cc rejects these. */ - ++pcpcc; - ppc = (char**) pcpcc; - pcpcc = (char const *const *) ppc; - { /* SCO 3.2v4 cc rejects this sort of thing. */ - char tx; - char *t = &tx; - char const *s = 0 ? (char *) 0 : (char const *) 0; - - *t++ = 0; - if (s) return 0; - } - { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ - int x[] = {25, 17}; - const int *foo = &x[0]; - ++foo; - } - { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ - typedef const int *iptr; - iptr p = 0; - ++p; - } - { /* AIX XL C 1.02.0.0 rejects this sort of thing, saying - "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ - struct s { int j; const int *ap[3]; } bx; - struct s *b = &bx; b->j = 5; - } - { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ - const int foo = 10; - if (!foo) return 0; - } - return !cs[0] && !zero.x; -#endif - ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_c_const=yes + ac_cv_header_stdc=yes else - ac_cv_c_const=no + ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 -$as_echo "$ac_cv_c_const" >&6; } -if test $ac_cv_c_const = no; then - -$as_echo "#define const /**/" >>confdefs.h -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 -$as_echo_n "checking for inline... " >&6; } -if ${ac_cv_c_inline+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_c_inline=no -for ac_kw in inline __inline__ __inline; do +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#ifndef __cplusplus -typedef int foo_t; -static $ac_kw foo_t static_foo () {return 0; } -$ac_kw foo_t foo () {return 0; } -#endif +#include <string.h> _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_c_inline=$ac_kw -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - test "$ac_cv_c_inline" != no && break -done +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : +else + ac_cv_header_stdc=no fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 -$as_echo "$ac_cv_c_inline" >&6; } +rm -f conftest* -case $ac_cv_c_inline in - inline | yes) ;; - *) - case $ac_cv_c_inline in - no) ac_val=;; - *) ac_val=$ac_cv_c_inline;; - esac - cat >>confdefs.h <<_ACEOF -#ifndef __cplusplus -#define inline $ac_val -#endif -_ACEOF - ;; -esac +fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 -$as_echo_n "checking whether byte ordering is bigendian... " >&6; } -if ${ac_cv_c_bigendian+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_c_bigendian=unknown - # See if we're dealing with a universal compiler. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#ifndef __APPLE_CC__ - not a universal capable compiler - #endif - typedef int dummy; +#include <stdlib.h> _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : - # Check for potential -arch flags. It is not universal unless - # there are at least two -arch flags with different values. - ac_arch= - ac_prev= - for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do - if test -n "$ac_prev"; then - case $ac_word in - i?86 | x86_64 | ppc | ppc64) - if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then - ac_arch=$ac_word - else - ac_cv_c_bigendian=universal - break - fi - ;; - esac - ac_prev= - elif test "x$ac_word" = "x-arch"; then - ac_prev=arch - fi - done +else + ac_cv_header_stdc=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - if test $ac_cv_c_bigendian = unknown; then - # See if sys/param.h defines the BYTE_ORDER macro. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <sys/types.h> - #include <sys/param.h> +rm -f conftest* -int -main () -{ -#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ - && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ - && LITTLE_ENDIAN) - bogus endian macros - #endif +fi - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - # It does; now see whether it defined to BIG_ENDIAN or not. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include <sys/types.h> - #include <sys/param.h> +#include <ctype.h> +#include <stdlib.h> +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { -#if BYTE_ORDER != BIG_ENDIAN - not big endian - #endif - - ; + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_c_bigendian=yes +if ac_fn_c_try_run "$LINENO"; then : + else - ac_cv_c_bigendian=no + ac_cv_header_stdc=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi - if test $ac_cv_c_bigendian = unknown; then - # See if <limits.h> defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <limits.h> -int -main () -{ -#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) - bogus endian macros - #endif +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - # It does; now see whether it defined to _BIG_ENDIAN or not. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <limits.h> +$as_echo "#define STDC_HEADERS 1" >>confdefs.h + +fi + # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works +# for constant arguments. Useless! +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working alloca.h" >&5 +$as_echo_n "checking for working alloca.h... " >&6; } +if ${ac_cv_working_alloca_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <alloca.h> int main () { -#ifndef _BIG_ENDIAN - not big endian - #endif - +char *p = (char *) alloca (2 * sizeof (int)); + if (p) return 0; ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_c_bigendian=yes +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_working_alloca_h=yes else - ac_cv_c_bigendian=no + ac_cv_working_alloca_h=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi - if test $ac_cv_c_bigendian = unknown; then - # Compile a test program. - if test "$cross_compiling" = yes; then : - # Try to guess by grepping values from an object file. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -short int ascii_mm[] = - { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; - short int ascii_ii[] = - { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; - int use_ascii (int i) { - return ascii_mm[i] + ascii_ii[i]; - } - short int ebcdic_ii[] = - { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; - short int ebcdic_mm[] = - { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; - int use_ebcdic (int i) { - return ebcdic_mm[i] + ebcdic_ii[i]; - } - extern int foo; +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_working_alloca_h" >&5 +$as_echo "$ac_cv_working_alloca_h" >&6; } +if test $ac_cv_working_alloca_h = yes; then + +$as_echo "#define HAVE_ALLOCA_H 1" >>confdefs.h + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca" >&5 +$as_echo_n "checking for alloca... " >&6; } +if ${ac_cv_func_alloca_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __GNUC__ +# define alloca __builtin_alloca +#else +# ifdef _MSC_VER +# include <malloc.h> +# define alloca _alloca +# else +# ifdef HAVE_ALLOCA_H +# include <alloca.h> +# else +# ifdef _AIX + #pragma alloca +# else +# ifndef alloca /* predefined by HP cc +Olibcalls */ +void *alloca (size_t); +# endif +# endif +# endif +# endif +#endif int main () { -return use_ascii (foo) == use_ebcdic (foo); +char *p = (char *) alloca (1); + if (p) return 0; ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then - ac_cv_c_bigendian=yes - fi - if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then - if test "$ac_cv_c_bigendian" = unknown; then - ac_cv_c_bigendian=no - else - # finding both strings is unlikely to happen, but who knows? - ac_cv_c_bigendian=unknown - fi - fi +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_func_alloca_works=yes +else + ac_cv_func_alloca_works=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_alloca_works" >&5 +$as_echo "$ac_cv_func_alloca_works" >&6; } + +if test $ac_cv_func_alloca_works = yes; then + +$as_echo "#define HAVE_ALLOCA 1" >>confdefs.h + +else + # The SVR3 libPW and SVR4 libucb both contain incompatible functions +# that cause trouble. Some versions do not even contain alloca or +# contain a buggy version. If you still want to use their alloca, +# use ar to extract alloca.o from them instead of compiling alloca.c. + +ALLOCA=\${LIBOBJDIR}alloca.$ac_objext + +$as_echo "#define C_ALLOCA 1" >>confdefs.h + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether \`alloca.c' needs Cray hooks" >&5 +$as_echo_n "checking whether \`alloca.c' needs Cray hooks... " >&6; } +if ${ac_cv_os_cray+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#if defined CRAY && ! defined CRAY2 +webecray +#else +wenotbecray +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "webecray" >/dev/null 2>&1; then : + ac_cv_os_cray=yes +else + ac_cv_os_cray=no +fi +rm -f conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_os_cray" >&5 +$as_echo "$ac_cv_os_cray" >&6; } +if test $ac_cv_os_cray = yes; then + for ac_func in _getb67 GETB67 getb67; do + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + +cat >>confdefs.h <<_ACEOF +#define CRAY_STACKSEG_END $ac_func +_ACEOF + + break +fi + + done +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking stack direction for C alloca" >&5 +$as_echo_n "checking stack direction for C alloca... " >&6; } +if ${ac_cv_c_stack_direction+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + ac_cv_c_stack_direction=0 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int -main () +find_stack_direction (int *addr, int depth) { + int dir, dummy = 0; + if (! addr) + addr = &dummy; + *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1; + dir = depth ? find_stack_direction (addr, depth - 1) : 0; + return dir + dummy; +} - /* Are we little or big endian? From Harbison&Steele. */ - union - { - long int l; - char c[sizeof (long int)]; - } u; - u.l = 1; - return u.c[sizeof (long int) - 1] == 1; - - ; - return 0; +int +main (int argc, char **argv) +{ + return find_stack_direction (0, argc + !argv + 20) < 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : - ac_cv_c_bigendian=no + ac_cv_c_stack_direction=1 else - ac_cv_c_bigendian=yes + ac_cv_c_stack_direction=-1 fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi - fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 -$as_echo "$ac_cv_c_bigendian" >&6; } - case $ac_cv_c_bigendian in #( - yes) - $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h -;; #( - no) - ;; #( - universal) +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_stack_direction" >&5 +$as_echo "$ac_cv_c_stack_direction" >&6; } +cat >>confdefs.h <<_ACEOF +#define STACK_DIRECTION $ac_cv_c_stack_direction +_ACEOF -$as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h - ;; #( - *) - as_fn_error $? "unknown endianness - presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;; - esac +fi -# ------------------------------ # -# Checks for library functions. # -# ------------------------------ # + WIN32APILIBS= + case ${host} in + *mingw32*) + +$as_echo "#define USE_WIN32API 1" >>confdefs.h + WIN32APILIBS="-lws2_32" + ;; + esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nl_langinfo and CODESET" >&5 +$as_echo_n "checking for nl_langinfo and CODESET... " >&6; } +if ${am_cv_langinfo_codeset+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <langinfo.h> +int +main () +{ +char* cs = nl_langinfo(CODESET); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + am_cv_langinfo_codeset=yes +else + am_cv_langinfo_codeset=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_langinfo_codeset" >&5 +$as_echo "$am_cv_langinfo_codeset" >&6; } + if test $am_cv_langinfo_codeset = yes; then - for ac_header in $ac_header_list +$as_echo "#define HAVE_LANGINFO_CODESET 1" >>confdefs.h + + fi + + + for ac_header in linux/perf_event.h locale.h memory.h signal.h sys/resource.h sys/socket.h sys/un.h sys/wait.h thread_db.h wait.h termios.h dlfcn.h linux/elf.h proc_service.h poll.h sys/poll.h sys/select.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default -" +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 @@ -12729,11 +13052,6 @@ - - - - - for ac_func in getpagesize do : ac_fn_c_check_func "$LINENO" "getpagesize" "ac_cv_func_getpagesize" @@ -12911,18 +13229,7 @@ fi rm -f conftest.mmap conftest.txt -ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default" -if test "x$ac_cv_type_pid_t" = xyes; then : - -else - -cat >>confdefs.h <<_ACEOF -#define pid_t int -_ACEOF - -fi - -for ac_header in vfork.h + for ac_header in vfork.h do : ac_fn_c_check_header_mongrel "$LINENO" "vfork.h" "ac_cv_header_vfork_h" "$ac_includes_default" if test "x$ac_cv_header_vfork_h" = xyes; then : @@ -13135,13 +13442,9 @@ fi -for ac_func in getauxval getrusage getuid getgid \ - pipe poll pread pread64 pwrite resize_term \ - sbrk getpgid setpgid setpgrp setsid \ - sigaction sigsetmask socketpair \ - ttrace wborder wresize setlocale iconvlist libiconvlist btowc \ - setrlimit getrlimit posix_madvise waitpid \ - ptrace64 sigaltstack setns use_default_colors + for ac_func in fdwalk getrlimit pipe pipe2 poll socketpair sigaction \ + ptrace64 sbrk setns sigaltstack sigprocmask \ + setpgid setpgrp getrusage getauxval do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" @@ -13154,493 +13457,174 @@ done - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nl_langinfo and CODESET" >&5 -$as_echo_n "checking for nl_langinfo and CODESET... " >&6; } -if ${am_cv_langinfo_codeset+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + ac_fn_c_check_decl "$LINENO" "ADDR_NO_RANDOMIZE" "ac_cv_have_decl_ADDR_NO_RANDOMIZE" "#include <sys/personality.h> +" +if test "x$ac_cv_have_decl_ADDR_NO_RANDOMIZE" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_ADDR_NO_RANDOMIZE $ac_have_decl +_ACEOF + + + if test "$cross_compiling" = yes; then : + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include <langinfo.h> +#include <sys/personality.h> int main () { -char* cs = nl_langinfo(CODESET); + + # if !HAVE_DECL_ADDR_NO_RANDOMIZE + # define ADDR_NO_RANDOMIZE 0x0040000 + # endif + /* Test the flag could be set and stays set. */ + personality (personality (0xffffffff) | ADDR_NO_RANDOMIZE); + if (!(personality (personality (0xffffffff)) & ADDR_NO_RANDOMIZE)) + return 1 ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : - am_cv_langinfo_codeset=yes + have_personality=true else - am_cv_langinfo_codeset=no + have_personality=false fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_langinfo_codeset" >&5 -$as_echo "$am_cv_langinfo_codeset" >&6; } - if test $am_cv_langinfo_codeset = yes; then - -$as_echo "#define HAVE_LANGINFO_CODESET 1" >>confdefs.h - - fi - -ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" -if test "x$ac_cv_type_size_t" = xyes; then : - -else - -cat >>confdefs.h <<_ACEOF -#define size_t unsigned int -_ACEOF - -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 -$as_echo_n "checking for a sed that does not truncate output... " >&6; } -if ${ac_cv_path_SED+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ - for ac_i in 1 2 3 4 5 6 7; do - ac_script="$ac_script$as_nl$ac_script" - done - echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed - { ac_script=; unset ac_script;} - if test -z "$SED"; then - ac_path_SED_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in sed gsed; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_SED" || continue -# Check for GNU ac_path_SED and select it if it is found. - # Check for GNU $ac_path_SED -case `"$ac_path_SED" --version 2>&1` in -*GNU*) - ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo '' >> "conftest.nl" - "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_SED_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_SED="$ac_path_SED" - ac_path_SED_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_SED_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_SED"; then - as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 - fi -else - ac_cv_path_SED=$SED -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 -$as_echo "$ac_cv_path_SED" >&6; } - SED="$ac_cv_path_SED" - rm -f conftest.sed - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 -$as_echo_n "checking for ANSI C header files... " >&6; } -if ${ac_cv_header_stdc+:} false; then : - $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include <stdlib.h> -#include <stdarg.h> -#include <string.h> -#include <float.h> - +#include <sys/personality.h> int main () { + # if !HAVE_DECL_ADDR_NO_RANDOMIZE + # define ADDR_NO_RANDOMIZE 0x0040000 + # endif + /* Test the flag could be set and stays set. */ + personality (personality (0xffffffff) | ADDR_NO_RANDOMIZE); + if (!(personality (personality (0xffffffff)) & ADDR_NO_RANDOMIZE)) + return 1 ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_header_stdc=yes +if ac_fn_c_try_run "$LINENO"; then : + have_personality=true else - ac_cv_header_stdc=no + have_personality=false +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <string.h> + if $have_personality + then -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then : +$as_echo "#define HAVE_PERSONALITY 1" >>confdefs.h + + fi + ac_fn_c_check_decl "$LINENO" "strstr" "ac_cv_have_decl_strstr" "$ac_includes_default" +if test "x$ac_cv_have_decl_strstr" = xyes; then : + ac_have_decl=1 else - ac_cv_header_stdc=no + ac_have_decl=0 fi -rm -f conftest* -fi +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_STRSTR $ac_have_decl +_ACEOF -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <stdlib.h> + # ----------------------- # + # Checks for structures. # + # ----------------------- # + + ac_fn_c_check_member "$LINENO" "struct stat" "st_blocks" "ac_cv_member_struct_stat_st_blocks" "$ac_includes_default" +if test "x$ac_cv_member_struct_stat_st_blocks" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_STAT_ST_BLOCKS 1 _ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then : -else - ac_cv_header_stdc=no + fi -rm -f conftest* +ac_fn_c_check_member "$LINENO" "struct stat" "st_blksize" "ac_cv_member_struct_stat_st_blksize" "$ac_includes_default" +if test "x$ac_cv_member_struct_stat_st_blksize" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_STAT_ST_BLKSIZE 1 +_ACEOF + fi -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then : - : + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing kinfo_getfile" >&5 +$as_echo_n "checking for library containing kinfo_getfile... " >&6; } +if ${ac_cv_search_kinfo_getfile+:} false; then : + $as_echo_n "(cached) " >&6 else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include <ctype.h> -#include <stdlib.h> -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char kinfo_getfile (); int main () { - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; +return kinfo_getfile (); + ; return 0; } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : - -else - ac_cv_header_stdc=no +for ac_lib in '' util util-freebsd; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_kinfo_getfile=$ac_res fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_kinfo_getfile+:} false; then : + break fi +done +if ${ac_cv_search_kinfo_getfile+:} false; then : +else + ac_cv_search_kinfo_getfile=no fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 -$as_echo "$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_kinfo_getfile" >&5 +$as_echo "$ac_cv_search_kinfo_getfile" >&6; } +ac_res=$ac_cv_search_kinfo_getfile +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" -$as_echo "#define STDC_HEADERS 1" >>confdefs.h +$as_echo "#define HAVE_KINFO_GETFILE 1" >>confdefs.h fi - # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works -# for constant arguments. Useless! -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working alloca.h" >&5 -$as_echo_n "checking for working alloca.h... " >&6; } -if ${ac_cv_working_alloca_h+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <alloca.h> -int -main () -{ -char *p = (char *) alloca (2 * sizeof (int)); - if (p) return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_working_alloca_h=yes -else - ac_cv_working_alloca_h=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_working_alloca_h" >&5 -$as_echo "$ac_cv_working_alloca_h" >&6; } -if test $ac_cv_working_alloca_h = yes; then - -$as_echo "#define HAVE_ALLOCA_H 1" >>confdefs.h - -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca" >&5 -$as_echo_n "checking for alloca... " >&6; } -if ${ac_cv_func_alloca_works+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __GNUC__ -# define alloca __builtin_alloca -#else -# ifdef _MSC_VER -# include <malloc.h> -# define alloca _alloca -# else -# ifdef HAVE_ALLOCA_H -# include <alloca.h> -# else -# ifdef _AIX - #pragma alloca -# else -# ifndef alloca /* predefined by HP cc +Olibcalls */ -void *alloca (size_t); -# endif -# endif -# endif -# endif -#endif - -int -main () -{ -char *p = (char *) alloca (1); - if (p) return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_func_alloca_works=yes -else - ac_cv_func_alloca_works=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_alloca_works" >&5 -$as_echo "$ac_cv_func_alloca_works" >&6; } - -if test $ac_cv_func_alloca_works = yes; then - -$as_echo "#define HAVE_ALLOCA 1" >>confdefs.h - -else - # The SVR3 libPW and SVR4 libucb both contain incompatible functions -# that cause trouble. Some versions do not even contain alloca or -# contain a buggy version. If you still want to use their alloca, -# use ar to extract alloca.o from them instead of compiling alloca.c. - -ALLOCA=\${LIBOBJDIR}alloca.$ac_objext - -$as_echo "#define C_ALLOCA 1" >>confdefs.h - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether \`alloca.c' needs Cray hooks" >&5 -$as_echo_n "checking whether \`alloca.c' needs Cray hooks... " >&6; } -if ${ac_cv_os_cray+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#if defined CRAY && ! defined CRAY2 -webecray -#else -wenotbecray -#endif - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "webecray" >/dev/null 2>&1; then : - ac_cv_os_cray=yes -else - ac_cv_os_cray=no -fi -rm -f conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_os_cray" >&5 -$as_echo "$ac_cv_os_cray" >&6; } -if test $ac_cv_os_cray = yes; then - for ac_func in _getb67 GETB67 getb67; do - as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -if eval test \"x\$"$as_ac_var"\" = x"yes"; then : - -cat >>confdefs.h <<_ACEOF -#define CRAY_STACKSEG_END $ac_func -_ACEOF - - break -fi - - done -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking stack direction for C alloca" >&5 -$as_echo_n "checking stack direction for C alloca... " >&6; } -if ${ac_cv_c_stack_direction+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - ac_cv_c_stack_direction=0 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_includes_default -int -find_stack_direction (int *addr, int depth) -{ - int dir, dummy = 0; - if (! addr) - addr = &dummy; - *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1; - dir = depth ? find_stack_direction (addr, depth - 1) : 0; - return dir + dummy; -} - -int -main (int argc, char **argv) -{ - return find_stack_direction (0, argc + !argv + 20) < 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_c_stack_direction=1 -else - ac_cv_c_stack_direction=-1 -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_stack_direction" >&5 -$as_echo "$ac_cv_c_stack_direction" >&6; } -cat >>confdefs.h <<_ACEOF -#define STACK_DIRECTION $ac_cv_c_stack_direction -_ACEOF - - -fi - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nl_langinfo and CODESET" >&5 -$as_echo_n "checking for nl_langinfo and CODESET... " >&6; } -if ${am_cv_langinfo_codeset+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <langinfo.h> -int -main () -{ -char* cs = nl_langinfo(CODESET); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - am_cv_langinfo_codeset=yes -else - am_cv_langinfo_codeset=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_langinfo_codeset" >&5 -$as_echo "$am_cv_langinfo_codeset" >&6; } - if test $am_cv_langinfo_codeset = yes; then - -$as_echo "#define HAVE_LANGINFO_CODESET 1" >>confdefs.h - - fi - - - for ac_header in linux/perf_event.h locale.h memory.h signal.h sys/resource.h sys/socket.h sys/un.h sys/wait.h thread_db.h wait.h termios.h dlfcn.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - - - for ac_func in fdwalk getrlimit pipe pipe2 socketpair sigaction \ - sigprocmask -do : - as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -if eval test \"x\$"$as_ac_var"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF - -fi -done - - - ac_fn_c_check_decl "$LINENO" "strstr" "ac_cv_have_decl_strstr" "$ac_includes_default" -if test "x$ac_cv_have_decl_strstr" = xyes; then : - ac_have_decl=1 -else - ac_have_decl=0 -fi - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_STRSTR $ac_have_decl -_ACEOF - # Check for std::thread. This does not work on some platforms, like # mingw and DJGPP. @@ -14274,1048 +14258,1573 @@ -# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: -if test "x$ax_pthread_ok" = "xyes"; then - threads=yes - : -else - ax_pthread_ok=no - threads=no -fi -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: +if test "x$ax_pthread_ok" = "xyes"; then + threads=yes + : +else + ax_pthread_ok=no + threads=no +fi +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + + if test "$threads" = "yes"; then + save_LIBS="$LIBS" + LIBS="$PTHREAD_LIBS $LIBS" + save_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$PTHREAD_CFLAGS $save_CXXFLAGS" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for std::thread" >&5 +$as_echo_n "checking for std::thread... " >&6; } +if ${gdb_cv_cxx_std_thread+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <thread> + void callback() { } +int +main () +{ +std::thread t(callback); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + gdb_cv_cxx_std_thread=yes +else + gdb_cv_cxx_std_thread=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_cxx_std_thread" >&5 +$as_echo "$gdb_cv_cxx_std_thread" >&6; } + + # This check must be here, while LIBS includes any necessary + # threading library. + for ac_func in pthread_sigmask pthread_setname_np +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_cxx_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + + LIBS="$save_LIBS" + CXXFLAGS="$save_CXXFLAGS" + fi + if test "$gdb_cv_cxx_std_thread" = "yes"; then + +$as_echo "#define CXX_STD_THREAD 1" >>confdefs.h + + fi + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sigsetjmp" >&5 +$as_echo_n "checking for sigsetjmp... " >&6; } +if ${gdb_cv_func_sigsetjmp+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include <setjmp.h> + +int +main () +{ +sigjmp_buf env; while (! sigsetjmp (env, 1)) siglongjmp (env, 1); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gdb_cv_func_sigsetjmp=yes +else + gdb_cv_func_sigsetjmp=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_func_sigsetjmp" >&5 +$as_echo "$gdb_cv_func_sigsetjmp" >&6; } + if test "$gdb_cv_func_sigsetjmp" = "yes"; then + +$as_echo "#define HAVE_SIGSETJMP 1" >>confdefs.h + + fi + + +# Check whether --with-intel_pt was given. +if test "${with_intel_pt+set}" = set; then : + withval=$with_intel_pt; +else + with_intel_pt=auto +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use intel pt" >&5 +$as_echo_n "checking whether to use intel pt... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_intel_pt" >&5 +$as_echo "$with_intel_pt" >&6; } + + if test "${with_intel_pt}" = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Intel Processor Trace support disabled; some features may be unavailable." >&5 +$as_echo "$as_me: WARNING: Intel Processor Trace support disabled; some features may be unavailable." >&2;} + HAVE_LIBIPT=no + else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include <linux/perf_event.h> + #ifndef PERF_ATTR_SIZE_VER5 + # error + #endif + +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + perf_event=yes +else + perf_event=no +fi +rm -f conftest.err conftest.i conftest.$ac_ext + if test "$perf_event" != yes; then + if test "$with_intel_pt" = yes; then + as_fn_error $? "linux/perf_event.h missing or too old" "$LINENO" 5 + else + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: linux/perf_event.h missing or too old; some features may be unavailable." >&5 +$as_echo "$as_me: WARNING: linux/perf_event.h missing or too old; some features may be unavailable." >&2;} + fi + fi + + + + + + + + + + use_additional=yes + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + +# Check whether --with-libipt-prefix was given. +if test "${with_libipt_prefix+set}" = set; then : + withval=$with_libipt_prefix; + if test "X$withval" = "Xno"; then + use_additional=no + else + if test "X$withval" = "X"; then + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + else + additional_includedir="$withval/include" + additional_libdir="$withval/lib" + fi + fi + +fi + + +# Check whether --with-libipt-type was given. +if test "${with_libipt_type+set}" = set; then : + withval=$with_libipt_type; with_libipt_type=$withval +else + with_libipt_type=auto +fi + + lib_type=`eval echo \$with_libipt_type` + + LIBIPT= + LTLIBIPT= + INCIPT= + rpathdirs= + ltrpathdirs= + names_already_handled= + names_next_round='ipt ' + while test -n "$names_next_round"; do + names_this_round="$names_next_round" + names_next_round= + for name in $names_this_round; do + already_handled= + for n in $names_already_handled; do + if test "$n" = "$name"; then + already_handled=yes + break + fi + done + if test -z "$already_handled"; then + names_already_handled="$names_already_handled $name" + uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` + eval value=\"\$HAVE_LIB$uppername\" + if test -n "$value"; then + if test "$value" = yes; then + eval value=\"\$LIB$uppername\" + test -z "$value" || LIBIPT="${LIBIPT}${LIBIPT:+ }$value" + eval value=\"\$LTLIB$uppername\" + test -z "$value" || LTLIBIPT="${LTLIBIPT}${LTLIBIPT:+ }$value" + else + : + fi + else + found_dir= + found_la= + found_so= + found_a= + if test $use_additional = yes; then + if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext" && test x$lib_type != xstatic; then + found_dir="$additional_libdir" + found_so="$additional_libdir/lib$name.$shlibext" + if test -f "$additional_libdir/lib$name.la"; then + found_la="$additional_libdir/lib$name.la" + fi + elif test x$lib_type != xshared; then + if test -f "$additional_libdir/lib$name.$libext"; then + found_dir="$additional_libdir" + found_a="$additional_libdir/lib$name.$libext" + if test -f "$additional_libdir/lib$name.la"; then + found_la="$additional_libdir/lib$name.la" + fi + fi + fi + fi + if test "X$found_dir" = "X"; then + for x in $LDFLAGS $LTLIBIPT; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + case "$x" in + -L*) + dir=`echo "X$x" | sed -e 's/^X-L//'` + if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext" && test x$lib_type != xstatic; then + found_dir="$dir" + found_so="$dir/lib$name.$shlibext" + if test -f "$dir/lib$name.la"; then + found_la="$dir/lib$name.la" + fi + elif test x$lib_type != xshared; then + if test -f "$dir/lib$name.$libext"; then + found_dir="$dir" + found_a="$dir/lib$name.$libext" + if test -f "$dir/lib$name.la"; then + found_la="$dir/lib$name.la" + fi + fi + fi + ;; + esac + if test "X$found_dir" != "X"; then + break + fi + done + fi + if test "X$found_dir" != "X"; then + LTLIBIPT="${LTLIBIPT}${LTLIBIPT:+ }-L$found_dir -l$name" + if test "X$found_so" != "X"; then + if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then + LIBIPT="${LIBIPT}${LIBIPT:+ }$found_so" + else + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $found_dir" + fi + if test "$hardcode_direct" = yes; then + LIBIPT="${LIBIPT}${LIBIPT:+ }$found_so" + else + if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then + LIBIPT="${LIBIPT}${LIBIPT:+ }$found_so" + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $found_dir" + fi + else + haveit= + for x in $LDFLAGS $LIBIPT; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + LIBIPT="${LIBIPT}${LIBIPT:+ }-L$found_dir" + fi + if test "$hardcode_minus_L" != no; then + LIBIPT="${LIBIPT}${LIBIPT:+ }$found_so" + else + LIBIPT="${LIBIPT}${LIBIPT:+ }-l$name" + fi + fi + fi + fi + else + if test "X$found_a" != "X"; then + LIBIPT="${LIBIPT}${LIBIPT:+ }$found_a" + else + LIBIPT="${LIBIPT}${LIBIPT:+ }-L$found_dir -l$name" + fi + fi + additional_includedir= + case "$found_dir" in + */lib | */lib/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'` + additional_includedir="$basedir/include" + ;; + esac + if test "X$additional_includedir" != "X"; then + if test "X$additional_includedir" != "X/usr/include"; then + haveit= + if test "X$additional_includedir" = "X/usr/local/include"; then + if test -n "$GCC"; then + case $host_os in + linux*) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + for x in $CPPFLAGS $INCIPT; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-I$additional_includedir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_includedir"; then + INCIPT="${INCIPT}${INCIPT:+ }-I$additional_includedir" + fi + fi + fi + fi + fi + if test -n "$found_la"; then + save_libdir="$libdir" + case "$found_la" in + */* | *\\*) . "$found_la" ;; + *) . "./$found_la" ;; + esac + libdir="$save_libdir" + for dep in $dependency_libs; do + case "$dep" in + -L*) + additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` + if test "X$additional_libdir" != "X/usr/lib"; then + haveit= + if test "X$additional_libdir" = "X/usr/local/lib"; then + if test -n "$GCC"; then + case $host_os in + linux*) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + haveit= + for x in $LDFLAGS $LIBIPT; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + LIBIPT="${LIBIPT}${LIBIPT:+ }-L$additional_libdir" + fi + fi + haveit= + for x in $LDFLAGS $LTLIBIPT; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + LTLIBIPT="${LTLIBIPT}${LTLIBIPT:+ }-L$additional_libdir" + fi + fi + fi + fi + ;; + -R*) + dir=`echo "X$dep" | sed -e 's/^X-R//'` + if test "$enable_rpath" != no; then + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $dir" + fi + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $dir" + fi + fi + ;; + -l*) + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` + ;; + *.la) + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` + ;; + *) + LIBIPT="${LIBIPT}${LIBIPT:+ }$dep" + LTLIBIPT="${LTLIBIPT}${LTLIBIPT:+ }$dep" + ;; + esac + done + fi + else + if test "x$lib_type" = "xauto" || test "x$lib_type" = "xshared"; then + LIBIPT="${LIBIPT}${LIBIPT:+ }-l$name" + LTLIBIPT="${LTLIBIPT}${LTLIBIPT:+ }-l$name" + else + LIBIPT="${LIBIPT}${LIBIPT:+ }-l:lib$name.$libext" + LTLIBIPT="${LTLIBIPT}${LTLIBIPT:+ }-l:lib$name.$libext" + fi + fi + fi + fi + done + done + if test "X$rpathdirs" != "X"; then + if test -n "$hardcode_libdir_separator"; then + alldirs= + for found_dir in $rpathdirs; do + alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir" + done + acl_save_libdir="$libdir" + libdir="$alldirs" + eval flag=\"$hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIBIPT="${LIBIPT}${LIBIPT:+ }$flag" + else + for found_dir in $rpathdirs; do + acl_save_libdir="$libdir" + libdir="$found_dir" + eval flag=\"$hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIBIPT="${LIBIPT}${LIBIPT:+ }$flag" + done + fi + fi + if test "X$ltrpathdirs" != "X"; then + for found_dir in $ltrpathdirs; do + LTLIBIPT="${LTLIBIPT}${LTLIBIPT:+ }-R$found_dir" + done + fi + + + ac_save_CPPFLAGS="$CPPFLAGS" + + for element in $INCIPT; do + haveit= + for x in $CPPFLAGS; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X$element"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" + fi + done - if test "$threads" = "yes"; then - save_LIBS="$LIBS" - LIBS="$PTHREAD_LIBS $LIBS" - save_CXXFLAGS="$CXXFLAGS" - CXXFLAGS="$PTHREAD_CFLAGS $save_CXXFLAGS" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for std::thread" >&5 -$as_echo_n "checking for std::thread... " >&6; } -if ${gdb_cv_cxx_std_thread+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libipt" >&5 +$as_echo_n "checking for libipt... " >&6; } +if ${ac_cv_libipt+:} false; then : $as_echo_n "(cached) " >&6 else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + + ac_save_LIBS="$LIBS" + LIBS="$LIBS $LIBIPT" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include <thread> - void callback() { } +#include "intel-pt.h" int main () { -std::thread t(callback); +pt_insn_alloc_decoder (0); ; return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - gdb_cv_cxx_std_thread=yes +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_libipt=yes else - gdb_cv_cxx_std_thread=no + ac_cv_libipt=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LIBS="$ac_save_LIBS" + fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_cxx_std_thread" >&5 -$as_echo "$gdb_cv_cxx_std_thread" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_libipt" >&5 +$as_echo "$ac_cv_libipt" >&6; } + if test "$ac_cv_libipt" = yes; then + HAVE_LIBIPT=yes - # This check must be here, while LIBS includes any necessary - # threading library. - for ac_func in pthread_sigmask pthread_setname_np +$as_echo "#define HAVE_LIBIPT 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libipt" >&5 +$as_echo_n "checking how to link with libipt... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBIPT" >&5 +$as_echo "$LIBIPT" >&6; } + else + HAVE_LIBIPT=no + CPPFLAGS="$ac_save_CPPFLAGS" + LIBIPT= + LTLIBIPT= + fi + + + + + + + if test "$HAVE_LIBIPT" != yes; then + if test "$with_intel_pt" = yes; then + as_fn_error $? "libipt is missing or unusable" "$LINENO" 5 + else + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: libipt is missing or unusable; some features may be unavailable." >&5 +$as_echo "$as_me: WARNING: libipt is missing or unusable; some features may be unavailable." >&2;} + fi + else + save_LIBS=$LIBS + LIBS="$LIBS $LIBIPT" + for ac_func in pt_insn_event do : - as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -ac_fn_cxx_check_func "$LINENO" "$ac_func" "$as_ac_var" -if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + ac_fn_c_check_func "$LINENO" "pt_insn_event" "ac_cv_func_pt_insn_event" +if test "x$ac_cv_func_pt_insn_event" = xyes; then : cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +#define HAVE_PT_INSN_EVENT 1 _ACEOF fi done + ac_fn_c_check_member "$LINENO" "struct pt_insn" "enabled" "ac_cv_member_struct_pt_insn_enabled" "#include <intel-pt.h> +" +if test "x$ac_cv_member_struct_pt_insn_enabled" = xyes; then : - LIBS="$save_LIBS" - CXXFLAGS="$save_CXXFLAGS" - fi - if test "$gdb_cv_cxx_std_thread" = "yes"; then +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_PT_INSN_ENABLED 1 +_ACEOF -$as_echo "#define CXX_STD_THREAD 1" >>confdefs.h +fi +ac_fn_c_check_member "$LINENO" "struct pt_insn" "resynced" "ac_cv_member_struct_pt_insn_resynced" "#include <intel-pt.h> +" +if test "x$ac_cv_member_struct_pt_insn_resynced" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_PT_INSN_RESYNCED 1 +_ACEOF + + +fi + + LIBS=$save_LIBS + fi fi - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sigsetjmp" >&5 -$as_echo_n "checking for sigsetjmp... " >&6; } -if ${gdb_cv_func_sigsetjmp+:} false; then : +$as_echo "#define _STRUCTURED_PROC 1" >>confdefs.h + + for ac_header in sys/procfs.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "sys/procfs.h" "ac_cv_header_sys_procfs_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_procfs_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SYS_PROCFS_H 1 +_ACEOF + +fi + +done + + if test "$ac_cv_header_sys_procfs_h" = yes; then + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gregset_t in sys/procfs.h" >&5 +$as_echo_n "checking for gregset_t in sys/procfs.h... " >&6; } + if ${bfd_cv_have_sys_procfs_type_gregset_t+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include <setjmp.h> - +#define _SYSCALL32 +#include <sys/procfs.h> int main () { -sigjmp_buf env; while (! sigsetjmp (env, 1)) siglongjmp (env, 1); +gregset_t avar ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : - gdb_cv_func_sigsetjmp=yes + bfd_cv_have_sys_procfs_type_gregset_t=yes else - gdb_cv_func_sigsetjmp=no + bfd_cv_have_sys_procfs_type_gregset_t=no + fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_func_sigsetjmp" >&5 -$as_echo "$gdb_cv_func_sigsetjmp" >&6; } -if test "$gdb_cv_func_sigsetjmp" = "yes"; then -$as_echo "#define HAVE_SIGSETJMP 1" >>confdefs.h + if test $bfd_cv_have_sys_procfs_type_gregset_t = yes; then -fi +$as_echo "#define HAVE_GREGSET_T 1" >>confdefs.h + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_gregset_t" >&5 +$as_echo "$bfd_cv_have_sys_procfs_type_gregset_t" >&6; } -# Check the return and argument types of ptrace. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fpregset_t in sys/procfs.h" >&5 +$as_echo_n "checking for fpregset_t in sys/procfs.h... " >&6; } + if ${bfd_cv_have_sys_procfs_type_fpregset_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ -for ac_header in sys/ptrace.h ptrace.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define _SYSCALL32 +#include <sys/procfs.h> +int +main () +{ +fpregset_t avar + ; + return 0; +} _ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + bfd_cv_have_sys_procfs_type_fpregset_t=yes +else + bfd_cv_have_sys_procfs_type_fpregset_t=no fi - -done - - -gdb_ptrace_headers=' -#include <sys/types.h> -#if HAVE_SYS_PTRACE_H -# include <sys/ptrace.h> -#endif -#if HAVE_UNISTD_H -# include <unistd.h> -#endif -' -# There is no point in checking if we don't have a prototype. -ac_fn_c_check_decl "$LINENO" "ptrace" "ac_cv_have_decl_ptrace" "$gdb_ptrace_headers -" -if test "x$ac_cv_have_decl_ptrace" = xyes; then : - ac_have_decl=1 -else - ac_have_decl=0 +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_PTRACE $ac_have_decl -_ACEOF -if test $ac_have_decl = 1; then : + if test $bfd_cv_have_sys_procfs_type_fpregset_t = yes; then -else +$as_echo "#define HAVE_FPREGSET_T 1" >>confdefs.h - : ${gdb_cv_func_ptrace_ret='int'} - : ${gdb_cv_func_ptrace_args='int,int,long,long'} + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_fpregset_t" >&5 +$as_echo "$bfd_cv_have_sys_procfs_type_fpregset_t" >&6; } -fi -# Check return type. Varargs (used on GNU/Linux) conflict with the -# empty argument list, so check for that explicitly. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking return type of ptrace" >&5 -$as_echo_n "checking return type of ptrace... " >&6; } -if ${gdb_cv_func_ptrace_ret+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for prgregset_t in sys/procfs.h" >&5 +$as_echo_n "checking for prgregset_t in sys/procfs.h... " >&6; } + if ${bfd_cv_have_sys_procfs_type_prgregset_t+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$gdb_ptrace_headers + +#define _SYSCALL32 +#include <sys/procfs.h> int main () { -extern long ptrace (enum __ptrace_request, ...); +prgregset_t avar ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : - gdb_cv_func_ptrace_ret='long' + bfd_cv_have_sys_procfs_type_prgregset_t=yes +else + bfd_cv_have_sys_procfs_type_prgregset_t=no + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + + if test $bfd_cv_have_sys_procfs_type_prgregset_t = yes; then + +$as_echo "#define HAVE_PRGREGSET_T 1" >>confdefs.h + + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_prgregset_t" >&5 +$as_echo "$bfd_cv_have_sys_procfs_type_prgregset_t" >&6; } + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for prfpregset_t in sys/procfs.h" >&5 +$as_echo_n "checking for prfpregset_t in sys/procfs.h... " >&6; } + if ${bfd_cv_have_sys_procfs_type_prfpregset_t+:} false; then : + $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$gdb_ptrace_headers + +#define _SYSCALL32 +#include <sys/procfs.h> int main () { -extern int ptrace (); +prfpregset_t avar ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : - gdb_cv_func_ptrace_ret='int' + bfd_cv_have_sys_procfs_type_prfpregset_t=yes else - gdb_cv_func_ptrace_ret='long' -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + bfd_cv_have_sys_procfs_type_prfpregset_t=no + fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_func_ptrace_ret" >&5 -$as_echo "$gdb_cv_func_ptrace_ret" >&6; } -cat >>confdefs.h <<_ACEOF -#define PTRACE_TYPE_RET $gdb_cv_func_ptrace_ret -_ACEOF + if test $bfd_cv_have_sys_procfs_type_prfpregset_t = yes; then -# Check argument types. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking types of arguments for ptrace" >&5 -$as_echo_n "checking types of arguments for ptrace... " >&6; } -if ${gdb_cv_func_ptrace_args+:} false; then : +$as_echo "#define HAVE_PRFPREGSET_T 1" >>confdefs.h + + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_prfpregset_t" >&5 +$as_echo "$bfd_cv_have_sys_procfs_type_prfpregset_t" >&6; } + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for prgregset32_t in sys/procfs.h" >&5 +$as_echo_n "checking for prgregset32_t in sys/procfs.h... " >&6; } + if ${bfd_cv_have_sys_procfs_type_prgregset32_t+:} false; then : $as_echo_n "(cached) " >&6 else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$gdb_ptrace_headers + +#define _SYSCALL32 +#include <sys/procfs.h> int main () { -extern long ptrace (enum __ptrace_request, ...); +prgregset32_t avar ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : - gdb_cv_func_ptrace_args='enum __ptrace_request,int,long,long' + bfd_cv_have_sys_procfs_type_prgregset32_t=yes else + bfd_cv_have_sys_procfs_type_prgregset32_t=no -for gdb_arg1 in 'int' 'long'; do - for gdb_arg2 in 'pid_t' 'int' 'long'; do - for gdb_arg3 in 'int *' 'caddr_t' 'int' 'long' 'void *'; do - for gdb_arg4 in 'int' 'long' 'void *'; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + + if test $bfd_cv_have_sys_procfs_type_prgregset32_t = yes; then + +$as_echo "#define HAVE_PRGREGSET32_T 1" >>confdefs.h + + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_prgregset32_t" >&5 +$as_echo "$bfd_cv_have_sys_procfs_type_prgregset32_t" >&6; } + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lwpid_t in sys/procfs.h" >&5 +$as_echo_n "checking for lwpid_t in sys/procfs.h... " >&6; } + if ${bfd_cv_have_sys_procfs_type_lwpid_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$gdb_ptrace_headers + +#define _SYSCALL32 +#include <sys/procfs.h> int main () { - -extern $gdb_cv_func_ptrace_ret - ptrace ($gdb_arg1, $gdb_arg2, $gdb_arg3, $gdb_arg4); - +lwpid_t avar ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : - gdb_cv_func_ptrace_args="$gdb_arg1,$gdb_arg2,$gdb_arg3,$gdb_arg4"; - break 4; + bfd_cv_have_sys_procfs_type_lwpid_t=yes +else + bfd_cv_have_sys_procfs_type_lwpid_t=no + fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - for gdb_arg5 in 'int *' 'int' 'long'; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +fi + + if test $bfd_cv_have_sys_procfs_type_lwpid_t = yes; then + +$as_echo "#define HAVE_LWPID_T 1" >>confdefs.h + + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_lwpid_t" >&5 +$as_echo "$bfd_cv_have_sys_procfs_type_lwpid_t" >&6; } + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for psaddr_t in sys/procfs.h" >&5 +$as_echo_n "checking for psaddr_t in sys/procfs.h... " >&6; } + if ${bfd_cv_have_sys_procfs_type_psaddr_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$gdb_ptrace_headers + +#define _SYSCALL32 +#include <sys/procfs.h> int main () { - -extern $gdb_cv_func_ptrace_ret - ptrace ($gdb_arg1, $gdb_arg2, $gdb_arg3, $gdb_arg4, $gdb_arg5); - +psaddr_t avar ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : - -gdb_cv_func_ptrace_args="$gdb_arg1,$gdb_arg2,$gdb_arg3,$gdb_arg4,$gdb_arg5"; - break 5; -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done - done - done - done -done -# Provide a safe default value. -: ${gdb_cv_func_ptrace_args='int,int,long,long'} + bfd_cv_have_sys_procfs_type_psaddr_t=yes +else + bfd_cv_have_sys_procfs_type_psaddr_t=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_func_ptrace_args" >&5 -$as_echo "$gdb_cv_func_ptrace_args" >&6; } -ac_save_IFS=$IFS; IFS=',' -set dummy `echo "$gdb_cv_func_ptrace_args" | sed 's/\*/\*/g'` -IFS=$ac_save_IFS -shift - -cat >>confdefs.h <<_ACEOF -#define PTRACE_TYPE_ARG1 $1 -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define PTRACE_TYPE_ARG3 $3 -_ACEOF + if test $bfd_cv_have_sys_procfs_type_psaddr_t = yes; then -cat >>confdefs.h <<_ACEOF -#define PTRACE_TYPE_ARG4 $4 -_ACEOF - -if test -n "$5"; then - -cat >>confdefs.h <<_ACEOF -#define PTRACE_TYPE_ARG5 $5 -_ACEOF +$as_echo "#define HAVE_PSADDR_T 1" >>confdefs.h -fi + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_psaddr_t" >&5 +$as_echo "$bfd_cv_have_sys_procfs_type_psaddr_t" >&6; } -if test "$cross_compiling" = no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether setpgrp takes no argument" >&5 -$as_echo_n "checking whether setpgrp takes no argument... " >&6; } -if ${ac_cv_func_setpgrp_void+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for elf_fpregset_t in sys/procfs.h" >&5 +$as_echo_n "checking for elf_fpregset_t in sys/procfs.h... " >&6; } + if ${bfd_cv_have_sys_procfs_type_elf_fpregset_t+:} false; then : $as_echo_n "(cached) " >&6 else - if test "$cross_compiling" = yes; then : - as_fn_error $? "cannot check setpgrp when cross compiling" "$LINENO" 5 -else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$ac_includes_default + +#define _SYSCALL32 +#include <sys/procfs.h> int main () { -/* If this system has a BSD-style setpgrp which takes arguments, - setpgrp(1, 1) will fail with ESRCH and return -1, in that case - exit successfully. */ - return setpgrp (1,1) != -1; +elf_fpregset_t avar ; return 0; } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_func_setpgrp_void=no +if ac_fn_c_try_compile "$LINENO"; then : + bfd_cv_have_sys_procfs_type_elf_fpregset_t=yes else - ac_cv_func_setpgrp_void=yes + bfd_cv_have_sys_procfs_type_elf_fpregset_t=no + fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_setpgrp_void" >&5 -$as_echo "$ac_cv_func_setpgrp_void" >&6; } -if test $ac_cv_func_setpgrp_void = yes; then + if test $bfd_cv_have_sys_procfs_type_elf_fpregset_t = yes; then -$as_echo "#define SETPGRP_VOID 1" >>confdefs.h +$as_echo "#define HAVE_ELF_FPREGSET_T 1" >>confdefs.h + + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_elf_fpregset_t" >&5 +$as_echo "$bfd_cv_have_sys_procfs_type_elf_fpregset_t" >&6; } + + fi + + +# Check the return and argument types of ptrace. + + +for ac_header in sys/ptrace.h ptrace.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF fi -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether setpgrp takes no argument" >&5 -$as_echo_n "checking whether setpgrp takes no argument... " >&6; } -if ${ac_cv_func_setpgrp_void+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ +done -#include <unistd.h> +gdb_ptrace_headers=' +#include <sys/types.h> +#if HAVE_SYS_PTRACE_H +# include <sys/ptrace.h> +#endif +#if HAVE_UNISTD_H +# include <unistd.h> +#endif +' + +# Check return type. Varargs (used on GNU/Linux) conflict with the +# empty argument list, so check for that explicitly. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking return type of ptrace" >&5 +$as_echo_n "checking return type of ptrace... " >&6; } +if ${gdb_cv_func_ptrace_ret+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$gdb_ptrace_headers int main () { - - if (setpgrp(1,1) == -1) - exit (0); - else - exit (1); - +extern long ptrace (enum __ptrace_request, ...); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_func_setpgrp_void=no -else - ac_cv_func_setpgrp_void=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_setpgrp_void" >&5 -$as_echo "$ac_cv_func_setpgrp_void" >&6; } -if test "$ac_cv_func_setpgrp_void" = yes; then - $as_echo "#define SETPGRP_VOID 1" >>confdefs.h - -fi -fi - -# Assume we'll default to using the included libiberty regex. -gdb_use_included_regex=yes - -# However, if the system regex is GNU regex, then default to *not* -# using the included regex. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU regex" >&5 -$as_echo_n "checking for GNU regex... " >&6; } -if ${gdb_cv_have_gnu_regex+:} false; then : - $as_echo_n "(cached) " >&6 + gdb_cv_func_ptrace_ret='long' else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include <gnu-versions.h> +$gdb_ptrace_headers int main () { -#define REGEX_INTERFACE_VERSION 1 -#if _GNU_REGEX_INTERFACE_VERSION != REGEX_INTERFACE_VERSION -# error "Version mismatch" -#endif +extern int ptrace (); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : - gdb_cv_have_gnu_regex=yes + gdb_cv_func_ptrace_ret='int' else - gdb_cv_have_gnu_regex=no + gdb_cv_func_ptrace_ret='long' fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_have_gnu_regex" >&5 -$as_echo "$gdb_cv_have_gnu_regex" >&6; } -if test "$gdb_cv_have_gnu_regex" = yes; then - gdb_use_included_regex=no -fi - - -# Check whether --with-included-regex was given. -if test "${with_included_regex+set}" = set; then : - withval=$with_included_regex; gdb_with_regex=$withval -else - gdb_with_regex=$gdb_use_included_regex -fi - -if test "$gdb_with_regex" = yes; then - -$as_echo "#define USE_INCLUDED_REGEX 1" >>confdefs.h - +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi - -# Check if <sys/proc.h> defines `struct thread' with a td_pcb member. -ac_fn_c_check_member "$LINENO" "struct thread" "td_pcb" "ac_cv_member_struct_thread_td_pcb" "#include <sys/param.h> -#include <sys/proc.h> - -" -if test "x$ac_cv_member_struct_thread_td_pcb" = xyes; then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_func_ptrace_ret" >&5 +$as_echo "$gdb_cv_func_ptrace_ret" >&6; } cat >>confdefs.h <<_ACEOF -#define HAVE_STRUCT_THREAD_TD_PCB 1 +#define PTRACE_TYPE_RET $gdb_cv_func_ptrace_ret _ACEOF - -fi - - -# See if <sys/lwp.h> defines `struct lwp`. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct lwp" >&5 -$as_echo_n "checking for struct lwp... " >&6; } -if ${gdb_cv_struct_lwp+:} false; then : +# Check argument types. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking types of arguments for ptrace" >&5 +$as_echo_n "checking types of arguments for ptrace... " >&6; } +if ${gdb_cv_func_ptrace_args+:} false; then : $as_echo_n "(cached) " >&6 else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include <sys/param.h> -#define _KMEMUSER -#include <sys/lwp.h> +$gdb_ptrace_headers int main () { -struct lwp l; +extern long ptrace (enum __ptrace_request, ...); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : - gdb_cv_struct_lwp=yes + gdb_cv_func_ptrace_args='enum __ptrace_request,int,long,long' else - gdb_cv_struct_lwp=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_struct_lwp" >&5 -$as_echo "$gdb_cv_struct_lwp" >&6; } -if test "$gdb_cv_struct_lwp" = yes; then - -$as_echo "#define HAVE_STRUCT_LWP 1" >>confdefs.h - -fi -# See if <machine/reg.h> degines `struct reg'. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct reg in machine/reg.h" >&5 -$as_echo_n "checking for struct reg in machine/reg.h... " >&6; } -if ${gdb_cv_struct_reg+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +for gdb_arg1 in 'int' 'long'; do + for gdb_arg2 in 'pid_t' 'int' 'long'; do + for gdb_arg3 in 'int *' 'caddr_t' 'int' 'long' 'void *'; do + for gdb_arg4 in 'int' 'long' 'void *'; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include <sys/types.h> -#include <machine/reg.h> +$gdb_ptrace_headers int main () { -struct reg r; + +extern $gdb_cv_func_ptrace_ret + ptrace ($gdb_arg1, $gdb_arg2, $gdb_arg3, $gdb_arg4); + ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : - gdb_cv_struct_reg=yes -else - gdb_cv_struct_reg=no + gdb_cv_func_ptrace_args="$gdb_arg1,$gdb_arg2,$gdb_arg3,$gdb_arg4"; + break 4; fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_struct_reg" >&5 -$as_echo "$gdb_cv_struct_reg" >&6; } -if test "$gdb_cv_struct_reg" = yes; then - -$as_echo "#define HAVE_STRUCT_REG 1" >>confdefs.h - -fi + for gdb_arg5 in 'int *' 'int' 'long'; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$gdb_ptrace_headers +int +main () +{ -# See if <machine/reg.h> supports the %fs and %gs i386 segment registers. -# Older i386 BSD's don't have the r_fs and r_gs members of `struct reg'. -ac_fn_c_check_member "$LINENO" "struct reg" "r_fs" "ac_cv_member_struct_reg_r_fs" "#include <sys/types.h> -#include <machine/reg.h> -" -if test "x$ac_cv_member_struct_reg_r_fs" = xyes; then : +extern $gdb_cv_func_ptrace_ret + ptrace ($gdb_arg1, $gdb_arg2, $gdb_arg3, $gdb_arg4, $gdb_arg5); -cat >>confdefs.h <<_ACEOF -#define HAVE_STRUCT_REG_R_FS 1 + ; + return 0; +} _ACEOF +if ac_fn_c_try_compile "$LINENO"; then : +gdb_cv_func_ptrace_args="$gdb_arg1,$gdb_arg2,$gdb_arg3,$gdb_arg4,$gdb_arg5"; + break 5; +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done + done + done + done +done +# Provide a safe default value. +: ${gdb_cv_func_ptrace_args='int,int,long,long'} fi -ac_fn_c_check_member "$LINENO" "struct reg" "r_gs" "ac_cv_member_struct_reg_r_gs" "#include <sys/types.h> -#include <machine/reg.h> -" -if test "x$ac_cv_member_struct_reg_r_gs" = xyes; then : +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_func_ptrace_args" >&5 +$as_echo "$gdb_cv_func_ptrace_args" >&6; } +ac_save_IFS=$IFS; IFS=',' +set dummy `echo "$gdb_cv_func_ptrace_args" | sed 's/\*/\*/g'` +IFS=$ac_save_IFS +shift cat >>confdefs.h <<_ACEOF -#define HAVE_STRUCT_REG_R_GS 1 +#define PTRACE_TYPE_ARG1 $1 _ACEOF -fi - +cat >>confdefs.h <<_ACEOF +#define PTRACE_TYPE_ARG3 $3 +_ACEOF -# See if <sys/user.h> supports the %fs_base and %gs_bas amd64 segment registers. -# Older amd64 Linux's don't have the fs_base and gs_base members of -# `struct user_regs_struct'. -ac_fn_c_check_member "$LINENO" "struct user_regs_struct" "fs_base" "ac_cv_member_struct_user_regs_struct_fs_base" "#include <sys/types.h> -#include <sys/user.h> -" -if test "x$ac_cv_member_struct_user_regs_struct_fs_base" = xyes; then : cat >>confdefs.h <<_ACEOF -#define HAVE_STRUCT_USER_REGS_STRUCT_FS_BASE 1 +#define PTRACE_TYPE_ARG4 $4 _ACEOF - -fi -ac_fn_c_check_member "$LINENO" "struct user_regs_struct" "gs_base" "ac_cv_member_struct_user_regs_struct_gs_base" "#include <sys/types.h> -#include <sys/user.h> -" -if test "x$ac_cv_member_struct_user_regs_struct_gs_base" = xyes; then : +if test -n "$5"; then cat >>confdefs.h <<_ACEOF -#define HAVE_STRUCT_USER_REGS_STRUCT_GS_BASE 1 +#define PTRACE_TYPE_ARG5 $5 _ACEOF - fi -# See if <sys/ptrace.h> provides the PTRACE_GETREGS request. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for PTRACE_GETREGS" >&5 -$as_echo_n "checking for PTRACE_GETREGS... " >&6; } -if ${gdb_cv_have_ptrace_getregs+:} false; then : +if test "$cross_compiling" = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether setpgrp takes no argument" >&5 +$as_echo_n "checking whether setpgrp takes no argument... " >&6; } +if ${ac_cv_func_setpgrp_void+:} false; then : $as_echo_n "(cached) " >&6 else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <sys/ptrace.h> -int -main () -{ -PTRACE_GETREGS; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - gdb_cv_have_ptrace_getregs=yes -else - gdb_cv_have_ptrace_getregs=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_have_ptrace_getregs" >&5 -$as_echo "$gdb_cv_have_ptrace_getregs" >&6; } -if test "$gdb_cv_have_ptrace_getregs" = yes; then - -$as_echo "#define HAVE_PTRACE_GETREGS 1" >>confdefs.h - -fi - -# See if <sys/ptrace.h> provides the PTRACE_GETFPXREGS request. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for PTRACE_GETFPXREGS" >&5 -$as_echo_n "checking for PTRACE_GETFPXREGS... " >&6; } -if ${gdb_cv_have_ptrace_getfpxregs+:} false; then : - $as_echo_n "(cached) " >&6 + if test "$cross_compiling" = yes; then : + as_fn_error $? "cannot check setpgrp when cross compiling" "$LINENO" 5 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include <sys/ptrace.h> +$ac_includes_default int main () { -PTRACE_GETFPXREGS; +/* If this system has a BSD-style setpgrp which takes arguments, + setpgrp(1, 1) will fail with ESRCH and return -1, in that case + exit successfully. */ + return setpgrp (1,1) != -1; ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - gdb_cv_have_ptrace_getfpxregs=yes +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_setpgrp_void=no else - gdb_cv_have_ptrace_getfpxregs=no + ac_cv_func_setpgrp_void=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_have_ptrace_getfpxregs" >&5 -$as_echo "$gdb_cv_have_ptrace_getfpxregs" >&6; } -if test "$gdb_cv_have_ptrace_getfpxregs" = yes; then +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_setpgrp_void" >&5 +$as_echo "$ac_cv_func_setpgrp_void" >&6; } +if test $ac_cv_func_setpgrp_void = yes; then -$as_echo "#define HAVE_PTRACE_GETFPXREGS 1" >>confdefs.h +$as_echo "#define SETPGRP_VOID 1" >>confdefs.h fi -# See if <sys/ptrace.h> provides the PT_GETDBREGS request. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for PT_GETDBREGS" >&5 -$as_echo_n "checking for PT_GETDBREGS... " >&6; } -if ${gdb_cv_have_pt_getdbregs+:} false; then : +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether setpgrp takes no argument" >&5 +$as_echo_n "checking whether setpgrp takes no argument... " >&6; } +if ${ac_cv_func_setpgrp_void+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include <sys/types.h> -#include <sys/ptrace.h> + +#include <unistd.h> + int main () { -PT_GETDBREGS; + + if (setpgrp(1,1) == -1) + exit (0); + else + exit (1); + ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : - gdb_cv_have_pt_getdbregs=yes + ac_cv_func_setpgrp_void=no else - gdb_cv_have_pt_getdbregs=no + ac_cv_func_setpgrp_void=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_have_pt_getdbregs" >&5 -$as_echo "$gdb_cv_have_pt_getdbregs" >&6; } -if test "$gdb_cv_have_pt_getdbregs" = yes; then - -$as_echo "#define HAVE_PT_GETDBREGS 1" >>confdefs.h +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_setpgrp_void" >&5 +$as_echo "$ac_cv_func_setpgrp_void" >&6; } +if test "$ac_cv_func_setpgrp_void" = yes; then + $as_echo "#define SETPGRP_VOID 1" >>confdefs.h fi +fi -# See if <sys/ptrace.h> provides the PT_GETXMMREGS request. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for PT_GETXMMREGS" >&5 -$as_echo_n "checking for PT_GETXMMREGS... " >&6; } -if ${gdb_cv_have_pt_getxmmregs+:} false; then : +# Assume we'll default to using the included libiberty regex. +gdb_use_included_regex=yes + +# However, if the system regex is GNU regex, then default to *not* +# using the included regex. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU regex" >&5 +$as_echo_n "checking for GNU regex... " >&6; } +if ${gdb_cv_have_gnu_regex+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include <sys/types.h> -#include <sys/ptrace.h> +#include <gnu-versions.h> int main () { -PT_GETXMMREGS; +#define REGEX_INTERFACE_VERSION 1 +#if _GNU_REGEX_INTERFACE_VERSION != REGEX_INTERFACE_VERSION +# error "Version mismatch" +#endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : - gdb_cv_have_pt_getxmmregs=yes + gdb_cv_have_gnu_regex=yes else - gdb_cv_have_pt_getxmmregs=no + gdb_cv_have_gnu_regex=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_have_gnu_regex" >&5 +$as_echo "$gdb_cv_have_gnu_regex" >&6; } +if test "$gdb_cv_have_gnu_regex" = yes; then + gdb_use_included_regex=no +fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_have_pt_getxmmregs" >&5 -$as_echo "$gdb_cv_have_pt_getxmmregs" >&6; } -if test "$gdb_cv_have_pt_getxmmregs" = yes; then - -$as_echo "#define HAVE_PT_GETXMMREGS 1" >>confdefs.h +# Check whether --with-included-regex was given. +if test "${with_included_regex+set}" = set; then : + withval=$with_included_regex; gdb_with_regex=$withval +else + gdb_with_regex=$gdb_use_included_regex fi -# See if <sys/ptrace.h> supports LWP names on FreeBSD -# Older FreeBSD versions don't have the pl_tdname member of -# `struct ptrace_lwpinfo'. -ac_fn_c_check_member "$LINENO" "struct ptrace_lwpinfo" "pl_tdname" "ac_cv_member_struct_ptrace_lwpinfo_pl_tdname" "#include <sys/ptrace.h> -" -if test "x$ac_cv_member_struct_ptrace_lwpinfo_pl_tdname" = xyes; then : - -cat >>confdefs.h <<_ACEOF -#define HAVE_STRUCT_PTRACE_LWPINFO_PL_TDNAME 1 -_ACEOF +if test "$gdb_with_regex" = yes; then +$as_echo "#define USE_INCLUDED_REGEX 1" >>confdefs.h fi +# Check if <sys/proc.h> defines `struct thread' with a td_pcb member. +ac_fn_c_check_member "$LINENO" "struct thread" "td_pcb" "ac_cv_member_struct_thread_td_pcb" "#include <sys/param.h> +#include <sys/proc.h> -# See if <sys/ptrace.h> supports syscall fields on FreeBSD. The -# pl_syscall_code member of `struct ptrace_lwpinfo' was added in -# FreeBSD 10.3. -ac_fn_c_check_member "$LINENO" "struct ptrace_lwpinfo" "pl_syscall_code" "ac_cv_member_struct_ptrace_lwpinfo_pl_syscall_code" "#include <sys/ptrace.h> " -if test "x$ac_cv_member_struct_ptrace_lwpinfo_pl_syscall_code" = xyes; then : +if test "x$ac_cv_member_struct_thread_td_pcb" = xyes; then : cat >>confdefs.h <<_ACEOF -#define HAVE_STRUCT_PTRACE_LWPINFO_PL_SYSCALL_CODE 1 +#define HAVE_STRUCT_THREAD_TD_PCB 1 _ACEOF fi -if test "$ac_cv_header_sys_procfs_h" = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gregset_t in sys/procfs.h" >&5 -$as_echo_n "checking for gregset_t in sys/procfs.h... " >&6; } - if ${bfd_cv_have_sys_procfs_type_gregset_t+:} false; then : +# See if <sys/lwp.h> defines `struct lwp`. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct lwp" >&5 +$as_echo_n "checking for struct lwp... " >&6; } +if ${gdb_cv_struct_lwp+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ - -#define _SYSCALL32 -/* Needed for new procfs interface on sparc-solaris. */ -#define _STRUCTURED_PROC 1 -#include <sys/procfs.h> +#include <sys/param.h> +#define _KMEMUSER +#include <sys/lwp.h> int main () { -gregset_t avar +struct lwp l; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : - bfd_cv_have_sys_procfs_type_gregset_t=yes + gdb_cv_struct_lwp=yes else - bfd_cv_have_sys_procfs_type_gregset_t=no - + gdb_cv_struct_lwp=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_struct_lwp" >&5 +$as_echo "$gdb_cv_struct_lwp" >&6; } +if test "$gdb_cv_struct_lwp" = yes; then - if test $bfd_cv_have_sys_procfs_type_gregset_t = yes; then - -$as_echo "#define HAVE_GREGSET_T 1" >>confdefs.h +$as_echo "#define HAVE_STRUCT_LWP 1" >>confdefs.h - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_gregset_t" >&5 -$as_echo "$bfd_cv_have_sys_procfs_type_gregset_t" >&6; } +fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fpregset_t in sys/procfs.h" >&5 -$as_echo_n "checking for fpregset_t in sys/procfs.h... " >&6; } - if ${bfd_cv_have_sys_procfs_type_fpregset_t+:} false; then : +# See if <machine/reg.h> degines `struct reg'. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct reg in machine/reg.h" >&5 +$as_echo_n "checking for struct reg in machine/reg.h... " >&6; } +if ${gdb_cv_struct_reg+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ - -#define _SYSCALL32 -/* Needed for new procfs interface on sparc-solaris. */ -#define _STRUCTURED_PROC 1 -#include <sys/procfs.h> +#include <sys/types.h> +#include <machine/reg.h> int main () { -fpregset_t avar +struct reg r; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : - bfd_cv_have_sys_procfs_type_fpregset_t=yes + gdb_cv_struct_reg=yes else - bfd_cv_have_sys_procfs_type_fpregset_t=no - + gdb_cv_struct_reg=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_struct_reg" >&5 +$as_echo "$gdb_cv_struct_reg" >&6; } +if test "$gdb_cv_struct_reg" = yes; then - if test $bfd_cv_have_sys_procfs_type_fpregset_t = yes; then - -$as_echo "#define HAVE_FPREGSET_T 1" >>confdefs.h - - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_fpregset_t" >&5 -$as_echo "$bfd_cv_have_sys_procfs_type_fpregset_t" >&6; } - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for prgregset_t in sys/procfs.h" >&5 -$as_echo_n "checking for prgregset_t in sys/procfs.h... " >&6; } - if ${bfd_cv_have_sys_procfs_type_prgregset_t+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#define _SYSCALL32 -/* Needed for new procfs interface on sparc-solaris. */ -#define _STRUCTURED_PROC 1 -#include <sys/procfs.h> -int -main () -{ -prgregset_t avar - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - bfd_cv_have_sys_procfs_type_prgregset_t=yes -else - bfd_cv_have_sys_procfs_type_prgregset_t=no +$as_echo "#define HAVE_STRUCT_REG 1" >>confdefs.h fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi - if test $bfd_cv_have_sys_procfs_type_prgregset_t = yes; then +# See if <machine/reg.h> supports the %fs and %gs i386 segment registers. +# Older i386 BSD's don't have the r_fs and r_gs members of `struct reg'. +ac_fn_c_check_member "$LINENO" "struct reg" "r_fs" "ac_cv_member_struct_reg_r_fs" "#include <sys/types.h> +#include <machine/reg.h> +" +if test "x$ac_cv_member_struct_reg_r_fs" = xyes; then : -$as_echo "#define HAVE_PRGREGSET_T 1" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_REG_R_FS 1 +_ACEOF - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_prgregset_t" >&5 -$as_echo "$bfd_cv_have_sys_procfs_type_prgregset_t" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for prfpregset_t in sys/procfs.h" >&5 -$as_echo_n "checking for prfpregset_t in sys/procfs.h... " >&6; } - if ${bfd_cv_have_sys_procfs_type_prfpregset_t+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ +fi +ac_fn_c_check_member "$LINENO" "struct reg" "r_gs" "ac_cv_member_struct_reg_r_gs" "#include <sys/types.h> +#include <machine/reg.h> +" +if test "x$ac_cv_member_struct_reg_r_gs" = xyes; then : -#define _SYSCALL32 -/* Needed for new procfs interface on sparc-solaris. */ -#define _STRUCTURED_PROC 1 -#include <sys/procfs.h> -int -main () -{ -prfpregset_t avar - ; - return 0; -} +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_REG_R_GS 1 _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - bfd_cv_have_sys_procfs_type_prfpregset_t=yes -else - bfd_cv_have_sys_procfs_type_prfpregset_t=no - -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi - if test $bfd_cv_have_sys_procfs_type_prfpregset_t = yes; then -$as_echo "#define HAVE_PRFPREGSET_T 1" >>confdefs.h +fi - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_prfpregset_t" >&5 -$as_echo "$bfd_cv_have_sys_procfs_type_prfpregset_t" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for prgregset32_t in sys/procfs.h" >&5 -$as_echo_n "checking for prgregset32_t in sys/procfs.h... " >&6; } - if ${bfd_cv_have_sys_procfs_type_prgregset32_t+:} false; then : +# See if <sys/ptrace.h> provides the PTRACE_GETREGS request. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for PTRACE_GETREGS" >&5 +$as_echo_n "checking for PTRACE_GETREGS... " >&6; } +if ${gdb_cv_have_ptrace_getregs+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ - -#define _SYSCALL32 -/* Needed for new procfs interface on sparc-solaris. */ -#define _STRUCTURED_PROC 1 -#include <sys/procfs.h> +#include <sys/ptrace.h> int main () { -prgregset32_t avar +PTRACE_GETREGS; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : - bfd_cv_have_sys_procfs_type_prgregset32_t=yes + gdb_cv_have_ptrace_getregs=yes else - bfd_cv_have_sys_procfs_type_prgregset32_t=no - + gdb_cv_have_ptrace_getregs=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi - if test $bfd_cv_have_sys_procfs_type_prgregset32_t = yes; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_have_ptrace_getregs" >&5 +$as_echo "$gdb_cv_have_ptrace_getregs" >&6; } +if test "$gdb_cv_have_ptrace_getregs" = yes; then -$as_echo "#define HAVE_PRGREGSET32_T 1" >>confdefs.h +$as_echo "#define HAVE_PTRACE_GETREGS 1" >>confdefs.h - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_prgregset32_t" >&5 -$as_echo "$bfd_cv_have_sys_procfs_type_prgregset32_t" >&6; } +fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lwpid_t in sys/procfs.h" >&5 -$as_echo_n "checking for lwpid_t in sys/procfs.h... " >&6; } - if ${bfd_cv_have_sys_procfs_type_lwpid_t+:} false; then : +# See if <sys/ptrace.h> provides the PTRACE_GETFPXREGS request. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for PTRACE_GETFPXREGS" >&5 +$as_echo_n "checking for PTRACE_GETFPXREGS... " >&6; } +if ${gdb_cv_have_ptrace_getfpxregs+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ - -#define _SYSCALL32 -/* Needed for new procfs interface on sparc-solaris. */ -#define _STRUCTURED_PROC 1 -#include <sys/procfs.h> +#include <sys/ptrace.h> int main () { -lwpid_t avar +PTRACE_GETFPXREGS; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : - bfd_cv_have_sys_procfs_type_lwpid_t=yes + gdb_cv_have_ptrace_getfpxregs=yes else - bfd_cv_have_sys_procfs_type_lwpid_t=no - + gdb_cv_have_ptrace_getfpxregs=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi - if test $bfd_cv_have_sys_procfs_type_lwpid_t = yes; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_have_ptrace_getfpxregs" >&5 +$as_echo "$gdb_cv_have_ptrace_getfpxregs" >&6; } +if test "$gdb_cv_have_ptrace_getfpxregs" = yes; then -$as_echo "#define HAVE_LWPID_T 1" >>confdefs.h +$as_echo "#define HAVE_PTRACE_GETFPXREGS 1" >>confdefs.h - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_lwpid_t" >&5 -$as_echo "$bfd_cv_have_sys_procfs_type_lwpid_t" >&6; } +fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for psaddr_t in sys/procfs.h" >&5 -$as_echo_n "checking for psaddr_t in sys/procfs.h... " >&6; } - if ${bfd_cv_have_sys_procfs_type_psaddr_t+:} false; then : +# See if <sys/ptrace.h> provides the PT_GETDBREGS request. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for PT_GETDBREGS" >&5 +$as_echo_n "checking for PT_GETDBREGS... " >&6; } +if ${gdb_cv_have_pt_getdbregs+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ - -#define _SYSCALL32 -/* Needed for new procfs interface on sparc-solaris. */ -#define _STRUCTURED_PROC 1 -#include <sys/procfs.h> +#include <sys/types.h> +#include <sys/ptrace.h> int main () { -psaddr_t avar +PT_GETDBREGS; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : - bfd_cv_have_sys_procfs_type_psaddr_t=yes + gdb_cv_have_pt_getdbregs=yes else - bfd_cv_have_sys_procfs_type_psaddr_t=no - + gdb_cv_have_pt_getdbregs=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi - if test $bfd_cv_have_sys_procfs_type_psaddr_t = yes; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_have_pt_getdbregs" >&5 +$as_echo "$gdb_cv_have_pt_getdbregs" >&6; } +if test "$gdb_cv_have_pt_getdbregs" = yes; then -$as_echo "#define HAVE_PSADDR_T 1" >>confdefs.h +$as_echo "#define HAVE_PT_GETDBREGS 1" >>confdefs.h - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_psaddr_t" >&5 -$as_echo "$bfd_cv_have_sys_procfs_type_psaddr_t" >&6; } +fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for elf_fpregset_t in sys/procfs.h" >&5 -$as_echo_n "checking for elf_fpregset_t in sys/procfs.h... " >&6; } - if ${bfd_cv_have_sys_procfs_type_elf_fpregset_t+:} false; then : +# See if <sys/ptrace.h> provides the PT_GETXMMREGS request. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for PT_GETXMMREGS" >&5 +$as_echo_n "checking for PT_GETXMMREGS... " >&6; } +if ${gdb_cv_have_pt_getxmmregs+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ - -#define _SYSCALL32 -/* Needed for new procfs interface on sparc-solaris. */ -#define _STRUCTURED_PROC 1 -#include <sys/procfs.h> +#include <sys/types.h> +#include <sys/ptrace.h> int main () { -elf_fpregset_t avar +PT_GETXMMREGS; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : - bfd_cv_have_sys_procfs_type_elf_fpregset_t=yes + gdb_cv_have_pt_getxmmregs=yes else - bfd_cv_have_sys_procfs_type_elf_fpregset_t=no - + gdb_cv_have_pt_getxmmregs=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi - if test $bfd_cv_have_sys_procfs_type_elf_fpregset_t = yes; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_have_pt_getxmmregs" >&5 +$as_echo "$gdb_cv_have_pt_getxmmregs" >&6; } +if test "$gdb_cv_have_pt_getxmmregs" = yes; then -$as_echo "#define HAVE_ELF_FPREGSET_T 1" >>confdefs.h +$as_echo "#define HAVE_PT_GETXMMREGS 1" >>confdefs.h + +fi + +# See if <sys/ptrace.h> supports LWP names on FreeBSD +# Older FreeBSD versions don't have the pl_tdname member of +# `struct ptrace_lwpinfo'. +ac_fn_c_check_member "$LINENO" "struct ptrace_lwpinfo" "pl_tdname" "ac_cv_member_struct_ptrace_lwpinfo_pl_tdname" "#include <sys/ptrace.h> +" +if test "x$ac_cv_member_struct_ptrace_lwpinfo_pl_tdname" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_PTRACE_LWPINFO_PL_TDNAME 1 +_ACEOF + + +fi + + +# See if <sys/ptrace.h> supports syscall fields on FreeBSD. The +# pl_syscall_code member of `struct ptrace_lwpinfo' was added in +# FreeBSD 10.3. +ac_fn_c_check_member "$LINENO" "struct ptrace_lwpinfo" "pl_syscall_code" "ac_cv_member_struct_ptrace_lwpinfo_pl_syscall_code" "#include <sys/ptrace.h> +" +if test "x$ac_cv_member_struct_ptrace_lwpinfo_pl_syscall_code" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_PTRACE_LWPINFO_PL_SYSCALL_CODE 1 +_ACEOF - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_elf_fpregset_t" >&5 -$as_echo "$bfd_cv_have_sys_procfs_type_elf_fpregset_t" >&6; } fi + # Check if the compiler supports the `long long' type. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for long long support in compiler" >&5 @@ -15650,7 +16159,7 @@ { int err; Py_Initialize (); - err = PyRun_SimpleString ("import itertools\n"); + err = PyRun_SimpleString ("import ctypes\n"); Py_Finalize (); return err == 0 ? 0 : 1; ; @@ -15838,80 +16347,6 @@ fi -ac_fn_c_check_decl "$LINENO" "ADDR_NO_RANDOMIZE" "ac_cv_have_decl_ADDR_NO_RANDOMIZE" "#include <sys/personality.h> -" -if test "x$ac_cv_have_decl_ADDR_NO_RANDOMIZE" = xyes; then : - ac_have_decl=1 -else - ac_have_decl=0 -fi - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_ADDR_NO_RANDOMIZE $ac_have_decl -_ACEOF - - -if test "$cross_compiling" = yes; then : - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <sys/personality.h> -int -main () -{ - -# if !HAVE_DECL_ADDR_NO_RANDOMIZE -# define ADDR_NO_RANDOMIZE 0x0040000 -# endif - /* Test the flag could be set and stays set. */ - personality (personality (0xffffffff) | ADDR_NO_RANDOMIZE); - if (!(personality (personality (0xffffffff)) & ADDR_NO_RANDOMIZE)) - return 1 - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - have_personality=true -else - have_personality=false -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <sys/personality.h> -int -main () -{ - -# if !HAVE_DECL_ADDR_NO_RANDOMIZE -# define ADDR_NO_RANDOMIZE 0x0040000 -# endif - /* Test the flag could be set and stays set. */ - personality (personality (0xffffffff) | ADDR_NO_RANDOMIZE); - if (!(personality (personality (0xffffffff)) & ADDR_NO_RANDOMIZE)) - return 1 - ; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - have_personality=true -else - have_personality=false -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -if $have_personality -then - -$as_echo "#define HAVE_PERSONALITY 1" >>confdefs.h - -fi - case $host_os in go32* | *djgpp*) gdbinit=gdb.ini @@ -16105,7 +16540,11 @@ -Wshadow=local \ -Wdeprecated-copy \ -Wdeprecated-copy-dtor \ --Wredundant-move" +-Wredundant-move \ +-Wmissing-declarations \ +-Wmissing-prototypes \ +-Wstrict-null-sentinel \ +" case "${host}" in *-*-mingw32*) @@ -16355,15 +16794,8 @@ fi # The ser-tcp.c module requires sockets. -case ${host} in - *mingw32*) - -$as_echo "#define USE_WIN32API 1" >>confdefs.h - - WIN32LIBS="$WIN32LIBS -lws2_32" - ;; -esac - +# Note that WIN32APILIBS is set by GDB_AC_COMMON. +WIN32LIBS="$WIN32LIBS $WIN32APILIBS" # Add ELF support to GDB, but only if BFD includes ELF support. @@ -16593,6 +17025,16 @@ fi + +# Check whether --with-liblzma-type was given. +if test "${with_liblzma_type+set}" = set; then : + withval=$with_liblzma_type; with_liblzma_type=$withval +else + with_liblzma_type=auto +fi + + lib_type=`eval echo \$with_liblzma_type` + LIBLZMA= LTLIBLZMA= INCLZMA= @@ -16630,13 +17072,13 @@ found_so= found_a= if test $use_additional = yes; then - if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then + if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext" && test x$lib_type != xstatic; then found_dir="$additional_libdir" found_so="$additional_libdir/lib$name.$shlibext" if test -f "$additional_libdir/lib$name.la"; then found_la="$additional_libdir/lib$name.la" fi - else + elif test x$lib_type != xshared; then if test -f "$additional_libdir/lib$name.$libext"; then found_dir="$additional_libdir" found_a="$additional_libdir/lib$name.$libext" @@ -16660,13 +17102,13 @@ case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` - if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then + if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext" && test x$lib_type != xstatic; then found_dir="$dir" found_so="$dir/lib$name.$shlibext" if test -f "$dir/lib$name.la"; then found_la="$dir/lib$name.la" fi - else + elif test x$lib_type != xshared; then if test -f "$dir/lib$name.$libext"; then found_dir="$dir" found_a="$dir/lib$name.$libext" @@ -16894,8 +17336,13 @@ done fi else - LIBLZMA="${LIBLZMA}${LIBLZMA:+ }-l$name" - LTLIBLZMA="${LTLIBLZMA}${LTLIBLZMA:+ }-l$name" + if test "x$lib_type" = "xauto" || test "x$lib_type" = "xshared"; then + LIBLZMA="${LIBLZMA}${LIBLZMA:+ }-l$name" + LTLIBLZMA="${LTLIBLZMA}${LTLIBLZMA:+ }-l$name" + else + LIBLZMA="${LIBLZMA}${LIBLZMA:+ }-l:lib$name.$libext" + LTLIBLZMA="${LTLIBLZMA}${LTLIBLZMA:+ }-l:lib$name.$libext" + fi fi fi fi @@ -17844,40 +18291,6 @@ fi -# Check whether --enable-gdbserver was given. -if test "${enable_gdbserver+set}" = set; then : - enableval=$enable_gdbserver; case "${enableval}" in - yes| no|auto) ;; - *) as_fn_error $? "bad value ${enableval} for --enable-gdbserver option" "$LINENO" 5 ;; -esac -else - enable_gdbserver=auto -fi - - -# We only build gdbserver automatically in a native configuration, and -# only if the user did not explicitly disable its build. -if test "$gdb_native" = "yes" -a "$enable_gdbserver" != "no"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gdbserver is supported on this host" >&5 -$as_echo_n "checking whether gdbserver is supported on this host... " >&6; } - if test "x$build_gdbserver" = xyes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - subdirs="$subdirs gdbserver" - - gdbserver_build_enabled=yes - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - fi -fi - -# If the user explicitly request the gdbserver to be built, verify that -# we were in fact able to enable it. -if test "$enable_gdbserver" = "yes" -a "$gdbserver_build_enabled" != "yes"; then - as_fn_error $? "Automatic gdbserver build is not supported for this configuration" "$LINENO" 5 -fi - # Check for babeltrace and babeltrace-ctf # Check whether --with-babeltrace was given. @@ -17953,6 +18366,16 @@ fi + +# Check whether --with-libbabeltrace-type was given. +if test "${with_libbabeltrace_type+set}" = set; then : + withval=$with_libbabeltrace_type; with_libbabeltrace_type=$withval +else + with_libbabeltrace_type=auto +fi + + lib_type=`eval echo \$with_libbabeltrace_type` + LIBBABELTRACE= LTLIBBABELTRACE= INCBABELTRACE= @@ -17990,13 +18413,13 @@ found_so= found_a= if test $use_additional = yes; then - if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then + if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext" && test x$lib_type != xstatic; then found_dir="$additional_libdir" found_so="$additional_libdir/lib$name.$shlibext" if test -f "$additional_libdir/lib$name.la"; then found_la="$additional_libdir/lib$name.la" fi - else + elif test x$lib_type != xshared; then if test -f "$additional_libdir/lib$name.$libext"; then found_dir="$additional_libdir" found_a="$additional_libdir/lib$name.$libext" @@ -18020,13 +18443,13 @@ case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` - if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then + if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext" && test x$lib_type != xstatic; then found_dir="$dir" found_so="$dir/lib$name.$shlibext" if test -f "$dir/lib$name.la"; then found_la="$dir/lib$name.la" fi - else + elif test x$lib_type != xshared; then if test -f "$dir/lib$name.$libext"; then found_dir="$dir" found_a="$dir/lib$name.$libext" @@ -18254,8 +18677,13 @@ done fi else - LIBBABELTRACE="${LIBBABELTRACE}${LIBBABELTRACE:+ }-l$name" - LTLIBBABELTRACE="${LTLIBBABELTRACE}${LTLIBBABELTRACE:+ }-l$name" + if test "x$lib_type" = "xauto" || test "x$lib_type" = "xshared"; then + LIBBABELTRACE="${LIBBABELTRACE}${LIBBABELTRACE:+ }-l$name" + LTLIBBABELTRACE="${LTLIBBABELTRACE}${LTLIBBABELTRACE:+ }-l$name" + else + LIBBABELTRACE="${LIBBABELTRACE}${LIBBABELTRACE:+ }-l:lib$name.$libext" + LTLIBBABELTRACE="${LTLIBBABELTRACE}${LTLIBBABELTRACE:+ }-l:lib$name.$libext" + fi fi fi fi @@ -18399,6 +18827,41 @@ fi + # Check whether --enable-libctf was given. +if test "${enable_libctf+set}" = set; then : + enableval=$enable_libctf; + case "$enableval" in + yes|no) ;; + *) as_fn_error $? "Argument to enable/disable libctf must be yes or no" "$LINENO" 5 ;; + esac + +else + enable_libctf=yes +fi + + +if test x${enable_static} = xno; then + LIBCTF="-Wl,--rpath,../libctf/.libs ../libctf/.libs/libctf.so" + CTF_DEPS="../libctf/.libs/libctf.so" +else + LIBCTF="../libctf/.libs/libctf.a" + CTF_DEPS="$LIBCTF" +fi +if test "${enable_libctf}" = yes; then + +$as_echo "#define ENABLE_LIBCTF 1" >>confdefs.h + +else + LIBCTF= + CTF_DEPS= +fi + + + + +# If nativefile (NAT_FILE) is not set in configure.nat, we link to an +# empty version. + if test "x$with_xxhash" != "xno"; then @@ -18449,6 +18912,16 @@ fi + +# Check whether --with-libxxhash-type was given. +if test "${with_libxxhash_type+set}" = set; then : + withval=$with_libxxhash_type; with_libxxhash_type=$withval +else + with_libxxhash_type=auto +fi + + lib_type=`eval echo \$with_libxxhash_type` + LIBXXHASH= LTLIBXXHASH= INCXXHASH= @@ -18486,13 +18959,13 @@ found_so= found_a= if test $use_additional = yes; then - if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then + if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext" && test x$lib_type != xstatic; then found_dir="$additional_libdir" found_so="$additional_libdir/lib$name.$shlibext" if test -f "$additional_libdir/lib$name.la"; then found_la="$additional_libdir/lib$name.la" fi - else + elif test x$lib_type != xshared; then if test -f "$additional_libdir/lib$name.$libext"; then found_dir="$additional_libdir" found_a="$additional_libdir/lib$name.$libext" @@ -18516,13 +18989,13 @@ case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` - if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then + if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext" && test x$lib_type != xstatic; then found_dir="$dir" found_so="$dir/lib$name.$shlibext" if test -f "$dir/lib$name.la"; then found_la="$dir/lib$name.la" fi - else + elif test x$lib_type != xshared; then if test -f "$dir/lib$name.$libext"; then found_dir="$dir" found_a="$dir/lib$name.$libext" @@ -18750,8 +19223,13 @@ done fi else - LIBXXHASH="${LIBXXHASH}${LIBXXHASH:+ }-l$name" - LTLIBXXHASH="${LTLIBXXHASH}${LTLIBXXHASH:+ }-l$name" + if test "x$lib_type" = "xauto" || test "x$lib_type" = "xshared"; then + LIBXXHASH="${LIBXXHASH}${LIBXXHASH:+ }-l$name" + LTLIBXXHASH="${LTLIBXXHASH}${LTLIBXXHASH:+ }-l$name" + else + LIBXXHASH="${LIBXXHASH}${LIBXXHASH:+ }-l:lib$name.$libext" + LTLIBXXHASH="${LTLIBXXHASH}${LTLIBXXHASH:+ }-l:lib$name.$libext" + fi fi fi fi @@ -18962,7 +19440,13 @@ # # The default value of this option changes depending whether we're on # development mode (in which case it's "true") or not (in which case -# it's "false"). +# it's "false"). The $development variable is set by the GDB_AC_COMMON +# macro, which must therefore be used before GDB_AC_SELFTEST. + +if test "x$development" != xtrue && test "x$development" != xfalse; then : + as_fn_error $? "Invalid value for \$development, got \"$development\", expecting \"true\" or \"false\"." "$LINENO" 5 +fi + # Check whether --enable-unit-tests was given. if test "${enable_unit_tests+set}" = set; then : enableval=$enable_unit_tests; case "${enableval}" in @@ -18980,8 +19464,8 @@ $as_echo "#define GDB_SELF_TEST 1" >>confdefs.h - CONFIG_OBS="$CONFIG_OBS \$(SUBDIR_UNITTESTS_OBS) gdbsupport/selftest.o selftest-arch.o" - CONFIG_SRCS="$CONFIG_SRCS \$(SUBDIR_UNITTESTS_SRCS) gdbsupport/selftest.c selftest-arch.c" + CONFIG_OBS="$CONFIG_OBS \$(SELFTESTS_OBS)" + CONFIG_SRCS="$CONFIG_SRCS \$(SELFTESTS_SRCS)" fi diff -Nru gdb-9.1/gdb/configure.ac gdb-10.2/gdb/configure.ac --- gdb-9.1/gdb/configure.ac 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/configure.ac 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ dnl Autoconf configure script for GDB, the GNU debugger. -dnl Copyright (C) 1995-2020 Free Software Foundation, Inc. +dnl Copyright (C) 1995-2021 Free Software Foundation, Inc. dnl dnl This file is part of GDB. dnl @@ -18,13 +18,12 @@ dnl Process this file with autoconf to produce a configure script. +m4_include(../config/debuginfod.m4) + AC_INIT(main.c) AC_CONFIG_HEADERS(config.h:config.in, [echo > stamp-h]) AM_MAINTAINER_MODE -# Set the 'development' global. -. $srcdir/../bfd/development.sh - AC_PROG_CC AC_PROG_CXX @@ -254,7 +253,6 @@ # For other settings, only the main target counts. gdb_sim= gdb_osabi= -build_gdbserver= targ=$target; . ${srcdir}/configure.tgt # Fetch the default architecture and default target vector from BFD. @@ -323,8 +321,10 @@ enable_gdbtk=no ;; esac -# Libunwind support for ia64. +# Handle optional debuginfod support +AC_DEBUGINFOD +# Libunwind support for ia64. AC_ARG_WITH(libunwind-ia64, AS_HELP_STRING([--with-libunwind-ia64], [use libunwind frame unwinding for ia64 targets]),, @@ -430,7 +430,7 @@ AC_SUBST([CODESIGN_CERT]) ACX_PKGVERSION([GDB]) -ACX_BUGURL([http://www.gnu.org/software/gdb/bugs/]) +ACX_BUGURL([https://www.gnu.org/software/gdb/bugs/]) AC_DEFINE_UNQUOTED([PKGVERSION], ["$PKGVERSION"], [Additional package description]) AC_DEFINE_UNQUOTED([REPORT_BUGS_TO], ["$REPORT_BUGS_TO"], [Bug reporting address]) @@ -480,11 +480,6 @@ [AC_DEFINE(HAVE_KINFO_GETVMMAP, 1, [Define to 1 if your system has the kinfo_getvmmap function. ])]) -# fbsd-nat.c can also use kinfo_getfile. -AC_SEARCH_LIBS(kinfo_getfile, util util-freebsd, - [AC_DEFINE(HAVE_KINFO_GETFILE, 1, - [Define to 1 if your system has the kinfo_getfile function. ])]) - AM_ICONV # GDB may fork/exec the iconv program to get the list of supported character @@ -896,6 +891,24 @@ fi fi +dnl Use --with-python-libdir to control where GDB looks for the Python +dnl libraries. +dnl +dnl If this is not given then the default will be based on the value +dnl passed to --with-python, which is in the python_prefix variable. +dnl If the --with-python option wasn't given then the default value in +dnl python_prefix is based on running the 'gdb/python/python-config +dnl --exec-prefix' script. +AC_ARG_WITH(python-libdir, + AS_HELP_STRING([--with-python-libdir@<:@=DIR@:>@], [search for python's libraries in DIR]), + [],[ + # If no python libdir is specified then select one based on + # python's prefix path. + if test -n "${python_prefix}"; then + with_python_libdir=${python_prefix}/lib + fi + ]) + if test "${have_libpython}" != no; then AC_DEFINE(HAVE_PYTHON, 1, [Define if Python interpreter is being linked in.]) CONFIG_OBS="$CONFIG_OBS \$(SUBDIR_PYTHON_OBS)" @@ -904,6 +917,12 @@ CONFIG_INSTALL="$CONFIG_INSTALL install-python" ENABLE_CFLAGS="$ENABLE_CFLAGS \$(SUBDIR_PYTHON_CFLAGS)" + if test -n "${with_python_libdir}"; then + AC_DEFINE_UNQUOTED(WITH_PYTHON_LIBDIR, "${with_python_libdir}", + [Directory containing Python's standard libraries from --with-python-libdir.]) + GDB_AC_DEFINE_RELOCATABLE(PYTHON_LIBDIR, [python lib], ${with_python_libdir}) + fi + # Flags needed to compile Python code (taken from python-config --cflags). # We cannot call python-config directly because it will output whatever was # used when compiling the Python interpreter itself, including flags which @@ -1069,7 +1088,7 @@ dnl We check guile with pkg-config. AC_PATH_PROG(pkg_config_prog_path, pkg-config, missing) -try_guile_versions="guile-2.0" +try_guile_versions="guile-3.0 guile-2.2 guile-2.0" have_libguile=no case "${with_guile}" in no) @@ -1204,58 +1223,17 @@ AC_SUBST(SRCHIGH_LIBS) AC_SUBST(SRCHIGH_CFLAGS) -AC_ARG_WITH(intel_pt, - AS_HELP_STRING([--with-intel-pt], [include Intel Processor Trace support (auto/yes/no)]), - [], [with_intel_pt=auto]) -AC_MSG_CHECKING([whether to use intel pt]) -AC_MSG_RESULT([$with_intel_pt]) - -if test "${with_intel_pt}" = no; then - AC_MSG_WARN([Intel Processor Trace support disabled; some features may be unavailable.]) - HAVE_LIBIPT=no -else - AC_PREPROC_IFELSE([AC_LANG_SOURCE([[ -#include <linux/perf_event.h> -#ifndef PERF_ATTR_SIZE_VER5 -# error -#endif - ]])], [perf_event=yes], [perf_event=no]) - if test "$perf_event" != yes; then - if test "$with_intel_pt" = yes; then - AC_MSG_ERROR([linux/perf_event.h missing or too old]) - else - AC_MSG_WARN([linux/perf_event.h missing or too old; some features may be unavailable.]) - fi - fi - - AC_LIB_HAVE_LINKFLAGS([ipt], [], [#include "intel-pt.h"], [pt_insn_alloc_decoder (0);]) - if test "$HAVE_LIBIPT" != yes; then - if test "$with_intel_pt" = yes; then - AC_MSG_ERROR([libipt is missing or unusable]) - else - AC_MSG_WARN([libipt is missing or unusable; some features may be unavailable.]) - fi - else - save_LIBS=$LIBS - LIBS="$LIBS $LIBIPT" - AC_CHECK_FUNCS(pt_insn_event) - AC_CHECK_MEMBERS([struct pt_insn.enabled, struct pt_insn.resynced], [], [], - [#include <intel-pt.h>]) - LIBS=$save_LIBS - fi -fi - # ------------------------- # # Checks for header files. # # ------------------------- # AC_HEADER_STDC # elf_hp.h is for HP/UX 64-bit shared library support. -AC_CHECK_HEADERS([nlist.h machine/reg.h poll.h sys/poll.h proc_service.h \ - thread_db.h linux/elf.h \ +AC_CHECK_HEADERS([nlist.h machine/reg.h \ + thread_db.h \ sys/file.h sys/filio.h sys/ioctl.h sys/param.h \ - sys/resource.h sys/procfs.h sys/ptrace.h ptrace.h \ - sys/reg.h sys/debugreg.h sys/select.h \ + sys/resource.h sys/ptrace.h ptrace.h \ + sys/reg.h sys/debugreg.h \ termios.h elf_hp.h]) AC_CHECK_HEADERS(sys/user.h, [], [], [#if HAVE_SYS_PARAM_H @@ -1270,6 +1248,9 @@ #endif ]) +AC_CHECK_HEADERS([sys/socket.h]) +AC_CHECK_HEADERS([ws2tcpip.h]) + # ------------------------- # # Checks for declarations. # # ------------------------- # @@ -1279,19 +1260,17 @@ AC_CHECK_DECLS([snprintf]) AM_LC_MESSAGES -# ----------------------- # -# Checks for structures. # -# ----------------------- # - -AC_CHECK_MEMBERS([struct stat.st_blocks, struct stat.st_blksize]) - # ------------------ # # Checks for types. # # ------------------ # AC_CHECK_TYPES(socklen_t, [], [], [#include <sys/types.h> -#include <sys/socket.h> +#if HAVE_SYS_SOCKET_H +# include <sys/socket.h> +#elif HAVE_WS2TCPIP_H +# include <ws2tcpip.h> +#endif ]) # ------------------------------------- # @@ -1306,15 +1285,13 @@ # Checks for library functions. # # ------------------------------ # -AC_FUNC_MMAP -AC_FUNC_VFORK -AC_CHECK_FUNCS([getauxval getrusage getuid getgid \ - pipe poll pread pread64 pwrite resize_term \ - sbrk getpgid setpgid setpgrp setsid \ +AC_CHECK_FUNCS([getuid getgid \ + pipe pread pread64 pwrite resize_term \ + getpgid setsid \ sigaction sigsetmask socketpair \ ttrace wborder wresize setlocale iconvlist libiconvlist btowc \ setrlimit getrlimit posix_madvise waitpid \ - ptrace64 sigaltstack setns use_default_colors]) + use_default_colors]) AM_LANGINFO_CODESET GDB_AC_COMMON @@ -1402,13 +1379,6 @@ [#include <sys/types.h> #include <machine/reg.h>]) -# See if <sys/user.h> supports the %fs_base and %gs_bas amd64 segment registers. -# Older amd64 Linux's don't have the fs_base and gs_base members of -# `struct user_regs_struct'. -AC_CHECK_MEMBERS([struct user_regs_struct.fs_base, struct user_regs_struct.gs_base], - [], [], [#include <sys/types.h> -#include <sys/user.h>]) - # See if <sys/ptrace.h> provides the PTRACE_GETREGS request. AC_MSG_CHECKING(for PTRACE_GETREGS) AC_CACHE_VAL(gdb_cv_have_ptrace_getregs, @@ -1475,17 +1445,6 @@ AC_CHECK_MEMBERS([struct ptrace_lwpinfo.pl_syscall_code], [], [], [#include <sys/ptrace.h>]) -if test "$ac_cv_header_sys_procfs_h" = yes; then - BFD_HAVE_SYS_PROCFS_TYPE(gregset_t) - BFD_HAVE_SYS_PROCFS_TYPE(fpregset_t) - BFD_HAVE_SYS_PROCFS_TYPE(prgregset_t) - BFD_HAVE_SYS_PROCFS_TYPE(prfpregset_t) - BFD_HAVE_SYS_PROCFS_TYPE(prgregset32_t) - BFD_HAVE_SYS_PROCFS_TYPE(lwpid_t) - BFD_HAVE_SYS_PROCFS_TYPE(psaddr_t) - BFD_HAVE_SYS_PROCFS_TYPE(elf_fpregset_t) -fi - # Check if the compiler supports the `long long' type. AC_CACHE_CHECK([for long long support in compiler], gdb_cv_c_long_long, @@ -1640,7 +1599,7 @@ [#include "Python.h"], [int err; Py_Initialize (); - err = PyRun_SimpleString ("import itertools\n"); + err = PyRun_SimpleString ("import ctypes\n"); Py_Finalize (); return err == 0 ? 0 : 1;])], [dynamic_list=true], [], [true]) @@ -1737,29 +1696,6 @@ [Define if <thread_db.h> has the TD_NOTLS error code.]) fi -dnl Check if we can disable the virtual address space randomization. -dnl The functionality of setarch -R. -AC_CHECK_DECLS([ADDR_NO_RANDOMIZE],,, [#include <sys/personality.h>]) -define([PERSONALITY_TEST], [AC_LANG_PROGRAM([#include <sys/personality.h>], [ -# if !HAVE_DECL_ADDR_NO_RANDOMIZE -# define ADDR_NO_RANDOMIZE 0x0040000 -# endif - /* Test the flag could be set and stays set. */ - personality (personality (0xffffffff) | ADDR_NO_RANDOMIZE); - if (!(personality (personality (0xffffffff)) & ADDR_NO_RANDOMIZE)) - return 1])]) -AC_RUN_IFELSE([PERSONALITY_TEST], - [have_personality=true], - [have_personality=false], - [AC_LINK_IFELSE([PERSONALITY_TEST], - [have_personality=true], - [have_personality=false])]) -if $have_personality -then - AC_DEFINE([HAVE_PERSONALITY], 1, - [Define if you support the personality syscall.]) -fi - dnl Set the host's .gdbinit filename. case $host_os in go32* | *djgpp*) @@ -1827,17 +1763,8 @@ fi # The ser-tcp.c module requires sockets. -case ${host} in - *mingw32*) - AC_DEFINE(USE_WIN32API, 1, - [Define if we should use the Windows API, instead of the - POSIX API. On Windows, we use the Windows API when - building for MinGW, but the POSIX API when building - for Cygwin.]) - WIN32LIBS="$WIN32LIBS -lws2_32" - ;; -esac -AC_SUBST(WIN32LIBS) +# Note that WIN32APILIBS is set by GDB_AC_COMMON. +WIN32LIBS="$WIN32LIBS $WIN32APILIBS" # Add ELF support to GDB, but only if BFD includes ELF support. GDB_AC_CHECK_BFD([for ELF support in BFD], gdb_cv_var_elf, @@ -2098,33 +2025,6 @@ [Define to the default OS ABI for this configuration.]) fi -AC_ARG_ENABLE(gdbserver, -AS_HELP_STRING([--enable-gdbserver], - [automatically build gdbserver (yes/no/auto, default is auto)]), -[case "${enableval}" in - yes| no|auto) ;; - *) AC_MSG_ERROR(bad value ${enableval} for --enable-gdbserver option) ;; -esac],[enable_gdbserver=auto]) - -# We only build gdbserver automatically in a native configuration, and -# only if the user did not explicitly disable its build. -if test "$gdb_native" = "yes" -a "$enable_gdbserver" != "no"; then - AC_MSG_CHECKING(whether gdbserver is supported on this host) - if test "x$build_gdbserver" = xyes; then - AC_MSG_RESULT(yes) - AC_CONFIG_SUBDIRS(gdbserver) - gdbserver_build_enabled=yes - else - AC_MSG_RESULT(no) - fi -fi - -# If the user explicitly request the gdbserver to be built, verify that -# we were in fact able to enable it. -if test "$enable_gdbserver" = "yes" -a "$gdbserver_build_enabled" != "yes"; then - AC_MSG_ERROR(Automatic gdbserver build is not supported for this configuration) -fi - # Check for babeltrace and babeltrace-ctf AC_ARG_WITH(babeltrace, AC_HELP_STRING([--with-babeltrace], [include babeltrace support (auto/yes/no)]), @@ -2173,6 +2073,27 @@ AC_HELP_STRING([--with-xxhash], [use libxxhash for hashing (faster) (auto/yes/no)]), [], [with_xxhash=auto]) +GCC_ENABLE([libctf], [yes], [], [Handle .ctf type-info sections]) +if test x${enable_static} = xno; then + LIBCTF="-Wl,--rpath,../libctf/.libs ../libctf/.libs/libctf.so" + CTF_DEPS="../libctf/.libs/libctf.so" +else + LIBCTF="../libctf/.libs/libctf.a" + CTF_DEPS="$LIBCTF" +fi +if test "${enable_libctf}" = yes; then + AC_DEFINE(ENABLE_LIBCTF, 1, [Handle .ctf type-info sections]) +else + LIBCTF= + CTF_DEPS= +fi +AC_SUBST(ENABLE_LIBCTF) +AC_SUBST(LIBCTF) +AC_SUBST(CTF_DEPS) + +# If nativefile (NAT_FILE) is not set in configure.nat, we link to an +# empty version. + if test "x$with_xxhash" != "xno"; then AC_LIB_HAVE_LINKFLAGS([xxhash], [], [#include <xxhash.h>], @@ -2224,8 +2145,8 @@ [Define to be a string naming the default host character set.]) GDB_AC_SELFTEST([ - CONFIG_OBS="$CONFIG_OBS \$(SUBDIR_UNITTESTS_OBS) gdbsupport/selftest.o selftest-arch.o" - CONFIG_SRCS="$CONFIG_SRCS \$(SUBDIR_UNITTESTS_SRCS) gdbsupport/selftest.c selftest-arch.c" + CONFIG_OBS="$CONFIG_OBS \$(SELFTESTS_OBS)" + CONFIG_SRCS="$CONFIG_SRCS \$(SELFTESTS_SRCS)" ]) GDB_AC_TRANSFORM([gdb], [GDB_TRANSFORM_NAME]) diff -Nru gdb-9.1/gdb/configure.nat gdb-10.2/gdb/configure.nat --- gdb-9.1/gdb/configure.nat 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/configure.nat 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ # ; -*- mode: sh ; -*- -# Copyright (C) 2013-2020 Free Software Foundation, Inc. +# Copyright (C) 2013-2021 Free Software Foundation, Inc. # # This file is part of GDB. # @@ -68,17 +68,17 @@ LOADLIBES='-lkvm' ;; nbsd*) - NATDEPFILES='fork-child.o nat/fork-inferior.o inf-ptrace.o' + NATDEPFILES='fork-child.o nat/fork-inferior.o nat/netbsd-nat.o inf-ptrace.o' HAVE_NATIVE_GCORE_HOST=1 ;; obsd*) NATDEPFILES='fork-child.o nat/fork-inferior.o inf-ptrace.o' ;; cygwin*) - NATDEPFILES='x86-nat.o nat/x86-dregs.o windows-nat.o' + NATDEPFILES='x86-nat.o nat/x86-dregs.o windows-nat.o nat/windows-nat.o' ;; mingw*) - NATDEPFILES='x86-nat.o nat/x86-dregs.o windows-nat.o' + NATDEPFILES='x86-nat.o nat/x86-dregs.o windows-nat.o nat/windows-nat.o' ;; aix) NATDEPFILES='nat/fork-inferior.o fork-child.o inf-ptrace.o' @@ -137,7 +137,7 @@ i386) # Native config information for GDB on amd64 # systems running Cygwin. - NATDEPFILES="${NATDEPFILES} amd64-windows-nat.o" + NATDEPFILES="${NATDEPFILES} i386-windows-nat.o amd64-windows-nat.o" ;; esac ;; @@ -276,7 +276,8 @@ ;; riscv*) # Host: RISC-V, running Linux - NATDEPFILES="${NATDEPFILES} riscv-linux-nat.o" + NATDEPFILES="${NATDEPFILES} riscv-linux-nat.o \ + nat/riscv-linux-tdesc.o" ;; s390) # Host: S390, running Linux @@ -324,7 +325,7 @@ mingw64) case ${gdb_host_cpu} in i386) - NATDEPFILES="${NATDEPFILES} amd64-windows-nat.o" + NATDEPFILES="${NATDEPFILES} i386-windows-nat.o amd64-windows-nat.o" ;; esac ;; diff -Nru gdb-9.1/gdb/configure.tgt gdb-10.2/gdb/configure.tgt --- gdb-9.1/gdb/configure.tgt 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/configure.tgt 2021-04-25 04:06:26.000000000 +0000 @@ -5,7 +5,6 @@ # gdb_target_obs target-specific object files to use # gdb_sim simulator library for target # gdb_osabi default OS ABI to use with target -# build_gdbserver set to "yes" if gdbserver supports target # gdb_have_gcore set to "true"/"false" if this target can run gcore # NOTE: Every file added to a gdb_target_obs variable for any target here @@ -60,7 +59,7 @@ arc*-*-*) # Target: Unidentified ARC target - cpu_obs="arc-tdep.o" + cpu_obs="arc-tdep.o arch/arc.o" ;; arm*-*-*) @@ -85,7 +84,8 @@ ;; riscv*-*-*) - cpu_obs="riscv-tdep.o arch/riscv.o";; + cpu_obs="riscv-tdep.o arch/riscv.o \ + ravenscar-thread.o riscv-ravenscar-thread.o";; x86_64-*-*) cpu_obs="${i386_tobjs} ${amd64_tobjs}";; @@ -128,7 +128,6 @@ arm-tdep.o arm-linux-tdep.o \ glibc-tdep.o linux-tdep.o solib-svr4.o \ symfile-mem.o linux-record.o" - build_gdbserver=yes ;; alpha*-*-linux*) @@ -158,16 +157,19 @@ gdb_target_obs="arc-newlib-tdep.o" ;; +arc*-*-linux*) + # Target: ARC machine running Linux + gdb_target_obs="arc-linux-tdep.o linux-tdep.o solib-svr4.o" + ;; + arm*-wince-pe | arm*-*-mingw32ce*) # Target: ARM based machine running Windows CE (win32) gdb_target_obs="arm-wince-tdep.o windows-tdep.o" - build_gdbserver=yes ;; arm*-*-linux*) # Target: ARM based machine running GNU/Linux gdb_target_obs="arch/arm-linux.o arm-linux-tdep.o glibc-tdep.o \ solib-svr4.o symfile-mem.o linux-tdep.o linux-record.o" - build_gdbserver=yes ;; arm*-*-freebsd*) # Target: FreeBSD/arm @@ -201,7 +203,6 @@ # Target: Blackfin Linux gdb_target_obs="bfin-tdep.o bfin-linux-tdep.o linux-tdep.o" gdb_sim=../sim/bfin/libsim.a - build_gdbserver=yes ;; bfin-*-*) # Target: Blackfin processor @@ -209,6 +210,12 @@ gdb_sim=../sim/bfin/libsim.a ;; +bpf-*-*) + # Target: eBPF + gdb_target_obs="bpf-tdep.o" + gdb_sim=../sim/bpf/libsim.a + ;; + cris*) # Target: CRIS gdb_target_obs="cris-tdep.o cris-linux-tdep.o linux-tdep.o solib-svr4.o" @@ -284,7 +291,6 @@ # Target: Intel 386 running qnx6. gdb_target_obs="solib-svr4.o \ i386-nto-tdep.o nto-tdep.o" - build_gdbserver=yes ;; i[34567]86-*-solaris2* | x86_64-*-solaris2*) # Target: Solaris x86_64 @@ -302,7 +308,6 @@ # Target: GNU/Linux x86-64 gdb_target_obs="amd64-linux-tdep.o ${gdb_target_obs}" fi - build_gdbserver=yes ;; i[34567]86-*-gnu*) # Target: Intel 386 running the GNU Hurd @@ -310,13 +315,11 @@ ;; i[34567]86-*-cygwin*) # Target: Intel 386 running win32 - gdb_target_obs="i386-cygwin-tdep.o windows-tdep.o" - build_gdbserver=yes + gdb_target_obs="i386-windows-tdep.o windows-tdep.o" ;; i[34567]86-*-mingw32*) # Target: Intel 386 running win32 - gdb_target_obs="i386-cygwin-tdep.o windows-tdep.o" - build_gdbserver=yes + gdb_target_obs="i386-windows-tdep.o windows-tdep.o" ;; i[34567]86-*-go32* | i[34567]86-*-msdosdjgpp*) # Target: i386 running DJGPP/go32. @@ -327,7 +330,6 @@ # Target: Intel IA-64 running GNU/Linux gdb_target_obs="ia64-linux-tdep.o linux-tdep.o \ solib-svr4.o symfile-mem.o" - build_gdbserver=yes ;; ia64-*-*vms*) # Target: Intel IA-64 running OpenVMS @@ -358,7 +360,6 @@ glibc-tdep.o solib-svr4.o symfile-mem.o \ linux-tdep.o" gdb_sim=../sim/m32r/libsim.a - build_gdbserver=yes ;; m32r*-*-*) # Target: Renesas m32r processor @@ -381,7 +382,6 @@ # Target: Motorola m68k with a.out and ELF gdb_target_obs="m68k-tdep.o m68k-linux-tdep.o solib-svr4.o \ linux-tdep.o glibc-tdep.o symfile-mem.o" - build_gdbserver=yes ;; m68*-*-netbsd* | m68*-*-knetbsd*-gnu) # Target: NetBSD/m68k @@ -415,7 +415,6 @@ gdb_target_obs="mips-tdep.o mips-linux-tdep.o glibc-tdep.o \ solib-svr4.o symfile-mem.o linux-tdep.o" gdb_sim=../sim/mips/libsim.a - build_gdbserver=yes ;; mips*-*-netbsd* | mips*-*-knetbsd*-gnu) # Target: MIPS running NetBSD @@ -453,7 +452,7 @@ gdb_sim=../sim/mn10300/libsim.a ;; -msp430*-*-elf) +msp430-*-elf*) gdb_target_obs="msp430-tdep.o" gdb_sim=../sim/msp430/libsim.a ;; @@ -479,7 +478,6 @@ gdb_target_obs="or1k-tdep.o or1k-linux-tdep.o solib-svr4.o \ symfile-mem.o glibc-tdep.o linux-tdep.o" gdb_sim=../sim/or1k/libsim.a - build_gdbserver=yes ;; or1k-*-* | or1knd-*-*) @@ -521,7 +519,6 @@ linux-record.o \ arch/ppc-linux-common.o" gdb_sim=../sim/ppc/libsim.a - build_gdbserver=yes ;; powerpc-*-lynx*178) # Target: PowerPC running Lynx178. @@ -540,7 +537,6 @@ # Target: S390 running Linux gdb_target_obs="s390-linux-tdep.o s390-tdep.o solib-svr4.o \ linux-tdep.o linux-record.o symfile-mem.o" - build_gdbserver=yes ;; riscv*-*-freebsd*) @@ -574,7 +570,6 @@ score-*-*) # Target: S+core embedded system gdb_target_obs="score-tdep.o" - build_gdbserver=yes ;; sh*-*-linux*) @@ -583,7 +578,6 @@ solib-svr4.o symfile-mem.o \ glibc-tdep.o linux-tdep.o" gdb_sim=../sim/sh/libsim.a - build_gdbserver=yes ;; sh*-*-netbsdelf* | sh*-*-knetbsd*-gnu) # Target: NetBSD/sh @@ -602,24 +596,22 @@ sparc-*-linux*) # Target: GNU/Linux SPARC - gdb_target_obs="sparc-tdep.o sparc-sol2-tdep.o sol2-tdep.o \ + gdb_target_obs="sparc-tdep.o \ sparc-linux-tdep.o solib-svr4.o symfile-mem.o \ linux-tdep.o \ ravenscar-thread.o sparc-ravenscar-thread.o" if test "x$enable_64_bit_bfd" = "xyes"; then # Target: GNU/Linux UltraSPARC - gdb_target_obs="sparc64-tdep.o sparc64-sol2-tdep.o \ + gdb_target_obs="sparc64-tdep.o \ sparc64-linux-tdep.o ${gdb_target_obs}" fi - build_gdbserver=yes ;; sparc64-*-linux*) # Target: GNU/Linux UltraSPARC - gdb_target_obs="sparc64-tdep.o sparc64-sol2-tdep.o sol2-tdep.o \ - sparc64-linux-tdep.o sparc-tdep.o sparc-sol2-tdep.o \ + gdb_target_obs="sparc64-tdep.o \ + sparc64-linux-tdep.o sparc-tdep.o \ sparc-linux-tdep.o solib-svr4.o linux-tdep.o \ ravenscar-thread.o sparc-ravenscar-thread.o" - build_gdbserver=yes ;; sparc*-*-freebsd* | sparc*-*-kfreebsd*-gnu) # Target: FreeBSD/sparc64 @@ -688,7 +680,6 @@ # Target: TILE-Gx gdb_target_obs="tilegx-tdep.o tilegx-linux-tdep.o solib-svr4.o \ symfile-mem.o glibc-tdep.o linux-tdep.o" - build_gdbserver=yes ;; xstormy16-*-*) @@ -741,7 +732,6 @@ gdb_target_obs="amd64-linux-tdep.o ${i386_tobjs} \ i386-linux-tdep.o glibc-tdep.o \ solib-svr4.o symfile-mem.o linux-tdep.o linux-record.o" - build_gdbserver=yes ;; x86_64-*-freebsd* | x86_64-*-kfreebsd*-gnu) # Target: FreeBSD/amd64 @@ -751,9 +741,8 @@ x86_64-*-mingw* | x86_64-*-cygwin*) # Target: MingW/amd64 gdb_target_obs="amd64-windows-tdep.o \ - ${i386_tobjs} i386-cygwin-tdep.o \ + ${i386_tobjs} i386-windows-tdep.o \ windows-tdep.o" - build_gdbserver=yes ;; x86_64-*-netbsd* | x86_64-*-knetbsd*-gnu) # Target: NetBSD/amd64 @@ -771,7 +760,6 @@ xtensa*-*-*linux*) # Target: GNU/Linux Xtensa gdb_target_obs="xtensa-linux-tdep.o symfile-mem.o linux-tdep.o" - build_gdbserver=yes ;; esac @@ -794,8 +782,8 @@ *-*-*-gnu*) ;; # prevent non-GNU kernels to match the Hurd rule below *-*-gnu*) gdb_osabi=GDB_OSABI_HURD ;; *-*-mingw32ce*) gdb_osabi=GDB_OSABI_WINCE ;; -*-*-mingw* | *-*-cygwin*) - gdb_osabi=GDB_OSABI_CYGWIN ;; +*-*-mingw*) gdb_osabi=GDB_OSABI_WINDOWS ;; +*-*-cygwin*) gdb_osabi=GDB_OSABI_CYGWIN ;; *-*-dicos*) gdb_osabi=GDB_OSABI_DICOS ;; *-*-symbianelf*) gdb_osabi=GDB_OSABI_SYMBIAN ;; diff -Nru gdb-9.1/gdb/continuations.c gdb-10.2/gdb/continuations.c --- gdb-9.1/gdb/continuations.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/continuations.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Continuations for GDB, the GNU debugger. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/continuations.h gdb-10.2/gdb/continuations.h --- gdb-9.1/gdb/continuations.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/continuations.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Continuations for GDB, the GNU debugger. - Copyright (C) 1999-2020 Free Software Foundation, Inc. + Copyright (C) 1999-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/contrib/ari/create-web-ari-in-src.sh gdb-10.2/gdb/contrib/ari/create-web-ari-in-src.sh --- gdb-9.1/gdb/contrib/ari/create-web-ari-in-src.sh 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/contrib/ari/create-web-ari-in-src.sh 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ # GDB script to create web ARI page directly from within gdb/ari directory. # -# Copyright (C) 2012-2020 Free Software Foundation, Inc. +# Copyright (C) 2012-2021 Free Software Foundation, Inc. # # This file is part of GDB. # diff -Nru gdb-9.1/gdb/contrib/ari/gdb_ari.sh gdb-10.2/gdb/contrib/ari/gdb_ari.sh --- gdb-9.1/gdb/contrib/ari/gdb_ari.sh 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/contrib/ari/gdb_ari.sh 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ # GDB script to list of problems using awk. # -# Copyright (C) 2002-2020 Free Software Foundation, Inc. +# Copyright (C) 2002-2021 Free Software Foundation, Inc. # # This file is part of GDB. # @@ -52,7 +52,7 @@ Error: $1 Usage: - $0 --print-doc --print-idx -Wall -Werror -W<category> <file> ... + $0 --print-doc --print-idx -Wall -Werror -WCATEGORY FILE ... Options: --print-doc Print a list of all potential problems, then exit. --print-idx Include the problems IDX (index or key) in every message. @@ -60,7 +60,8 @@ -Werror Treat all problems as errors. -Wall Report all problems. -Wari Report problems that should be fixed in new code. - -W<category> Report problems in the specifed category. Valid categories + -WCATEGORY Report problems in the specifed category. The category + can be prefixed with "no-". Valid categories are: ${all} EOF exit 1 @@ -102,6 +103,10 @@ # Validate all errors and warnings. for w in ${warning} ${error} do + case "$w" in + no-*) w=`echo x$w | sed -e 's/xno-//'`;; + esac + case " ${all} " in *" ${w} "* ) ;; * ) usage "Unknown option -W${w}" ;; @@ -123,11 +128,19 @@ done for w in ${warning} do - warnings="${warnings} warning[ari_${w}] = 1;" + val=1 + case "$w" in + no-*) w=`echo x$w | sed -e 's/xno-//'`; val=0 ;; + esac + warnings="${warnings} warning[ari_${w}] = $val;" done for e in ${error} do - errors="${errors} error[ari_${e}] = 1;" + val=1 + case "$e" in + no-*) e=`echo x$e | sed -e 's/xno-//'`; val=0 ;; + esac + errors="${errors} error[ari_${e}] = $val;" done if [ "$AWK" = "" ] ; then @@ -574,24 +587,11 @@ BEGIN { doc["long long"] = "\ Do not use `long long'\'', instead use LONGEST" category["long long"] = ari_code - # defs.h needs two such patterns for LONGEST and ULONGEST definitions - fix("long long", "gdb/defs.h", 2) } /(^|[^_[:alnum:]])long[[:space:]]+long([^_[:alnum:]]|$)/ { fail("long long") } -BEGIN { doc["ATTRIBUTE_UNUSED"] = "\ -Do not use ATTRIBUTE_UNUSED, do not bother (GDB is compiled with -Werror and, \ -consequently, is not able to tolerate false warnings. Since -Wunused-param \ -produces such warnings, neither that warning flag nor ATTRIBUTE_UNUSED \ -are used by GDB" - category["ATTRIBUTE_UNUSED"] = ari_regression -} -/(^|[^_[:alnum:]])ATTRIBUTE_UNUSED([^_[:alnum:]]|$)/ { - fail("ATTRIBUTE_UNUSED") -} - BEGIN { doc["ATTR_FORMAT"] = "\ Do not use ATTR_FORMAT, use ATTRIBUTE_PRINTF instead" category["ATTR_FORMAT"] = ari_regression @@ -619,21 +619,6 @@ # General problems -BEGIN { doc["multiple messages"] = "\ -Do not use multiple calls to warning or error, instead use a single call" - category["multiple messages"] = ari_gettext -} -FNR == 1 { - warning_fnr = -1 -} -/(^|[^_[:alnum:]])(warning|error)[[:space:]]*\(/ { - if (FNR == warning_fnr + 1) { - fail("multiple messages") - } else { - warning_fnr = FNR - } -} - # Commented out, but left inside sources, just in case. # BEGIN { doc["inline"] = "\ # Do not use the inline attribute; \ @@ -658,7 +643,6 @@ BEGIN { doc["abort"] = "\ Do not use abort, instead use internal_error; GDB should never abort" category["abort"] = ari_regression - fix("abort", "gdb/utils.c", 3) } /(^|[^_[:alnum:]])abort[[:space:]]*\(/ { fail("abort") @@ -822,7 +806,6 @@ BEGIN { doc["floatformat_to_double"] = "\ Do not use floatformat_to_double() from libierty, \ instead use floatformat_to_doublest()" - fix("floatformat_to_double", "gdb/doublest.c", 1) category["floatformat_to_double"] = ari_regression } /(^|[^_[:alnum:]])floatformat_to_double[[:space:]]*\(/ { @@ -831,7 +814,7 @@ BEGIN { doc["floatformat_from_double"] = "\ Do not use floatformat_from_double() from libierty, \ -instead use floatformat_from_doublest()" +instead use host_float_ops<T>::from_target()" category["floatformat_from_double"] = ari_regression } /(^|[^_[:alnum:]])floatformat_from_double[[:space:]]*\(/ { @@ -1110,18 +1093,6 @@ fail("strnicmp") } -# Boolean expressions and conditionals - -BEGIN { doc["boolean"] = "\ -Do not use `boolean'\'', use `bool'\'' instead" - category["boolean"] = ari_regression -} -/(^|[^_[:alnum:]])boolean([^_[:alnum:]]|$)/ { - if (is_yacc_or_lex == 0) { - fail("boolean") - } -} - # Typedefs that are either redundant or can be reduced to `struct # type *''. # Must be placed before if assignment otherwise ARI exceptions @@ -1143,20 +1114,6 @@ fail("strlen d_name") } -BEGIN { doc["var_boolean"] = "\ -Replace var_boolean with add_setshow_boolean_cmd" - category["var_boolean"] = ari_regression - fix("var_boolean", "gdb/command.h", 1) - # fix only uses the last directory level - fix("var_boolean", "cli/cli-decode.c", 2) -} -/(^|[^_[:alnum:]])var_boolean([^_[:alnum:]]|$)/ { - if (($0 !~ /(^|[^_[:alnum:]])case *var_boolean:/) \ - && ($0 !~ /(^|[^_[:alnum:]])[=!]= *var_boolean/)) { - fail("var_boolean") - } -} - BEGIN { doc["generic_use_struct_convention"] = "\ Replace generic_use_struct_convention with nothing, \ EXTRACT_STRUCT_VALUE_ADDRESS is a predicate" diff -Nru gdb-9.1/gdb/contrib/ari/gdb_find.sh gdb-10.2/gdb/contrib/ari/gdb_find.sh --- gdb-9.1/gdb/contrib/ari/gdb_find.sh 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/contrib/ari/gdb_find.sh 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ # GDB script to create list of files to check using gdb_ari.sh. # -# Copyright (C) 2003-2020 Free Software Foundation, Inc. +# Copyright (C) 2003-2021 Free Software Foundation, Inc. # # This file is part of GDB. # diff -Nru gdb-9.1/gdb/contrib/ari/update-web-ari.sh gdb-10.2/gdb/contrib/ari/update-web-ari.sh --- gdb-9.1/gdb/contrib/ari/update-web-ari.sh 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/contrib/ari/update-web-ari.sh 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ # GDB script to create GDB ARI web page. # -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is part of GDB. # diff -Nru gdb-9.1/gdb/contrib/cc-with-tweaks.sh gdb-10.2/gdb/contrib/cc-with-tweaks.sh --- gdb-9.1/gdb/contrib/cc-with-tweaks.sh 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/contrib/cc-with-tweaks.sh 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ # Wrapper around gcc to tweak the output in various ways when running # the testsuite. -# Copyright (C) 2010-2020 Free Software Foundation, Inc. +# Copyright (C) 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or @@ -144,13 +144,6 @@ exit $? fi -index_file="${output_file}.gdb-index" -if [ "$want_index" = true ] && [ -f "$index_file" ] -then - echo "$myname: Index file $index_file exists, won't clobber." >&2 - exit 1 -fi - output_dir="${output_file%/*}" [ "$output_dir" = "$output_file" ] && output_dir="." @@ -176,12 +169,16 @@ fi if [ "$want_index" = true ]; then + get_tmpdir + mv "$output_file" "$tmpdir" + tmpfile="$tmpdir/$(basename $output_file)" # Filter out these messages which would stop dejagnu testcase run: # echo "$myname: No index was created for $file" 1>&2 # echo "$myname: [Was there no debuginfo? Was there already an index?]" 1>&2 - GDB=$GDB $GDB_ADD_INDEX $index_options "$output_file" 2>&1 \ + GDB=$GDB $GDB_ADD_INDEX $index_options "$tmpfile" 2>&1 \ | grep -v "^${GDB_ADD_INDEX##*/}: " >&2 rc=${PIPESTATUS[0]} + mv "$tmpfile" "$output_file" [ $rc != 0 ] && exit $rc fi @@ -237,5 +234,4 @@ fi fi -rm -f "$index_file" exit $rc diff -Nru gdb-9.1/gdb/contrib/expect-read1.c gdb-10.2/gdb/contrib/expect-read1.c --- gdb-9.1/gdb/contrib/expect-read1.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/contrib/expect-read1.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2013-2020 Free Software Foundation, Inc. +/* Copyright (C) 2013-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/contrib/expect-read1.sh gdb-10.2/gdb/contrib/expect-read1.sh --- gdb-9.1/gdb/contrib/expect-read1.sh 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/contrib/expect-read1.sh 2021-04-25 04:04:35.000000000 +0000 @@ -1,7 +1,7 @@ #! /bin/sh # runtest wrapper to reliably reproduce racy incomplete reads in the testsuite. -# Copyright (C) 2013-2020 Free Software Foundation, Inc. +# Copyright (C) 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or diff -Nru gdb-9.1/gdb/contrib/gdb-add-index.sh gdb-10.2/gdb/contrib/gdb-add-index.sh --- gdb-9.1/gdb/contrib/gdb-add-index.sh 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/contrib/gdb-add-index.sh 2021-04-25 04:06:26.000000000 +0000 @@ -2,7 +2,7 @@ # Add a .gdb_index section to a file. -# Copyright (C) 2010-2020 Free Software Foundation, Inc. +# Copyright (C) 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or diff -Nru gdb-9.1/gdb/contrib/test_pubnames_and_indexes.py gdb-10.2/gdb/contrib/test_pubnames_and_indexes.py --- gdb-9.1/gdb/contrib/test_pubnames_and_indexes.py 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/contrib/test_pubnames_and_indexes.py 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ #! /usr/bin/env python -# Copyright (C) 2011-2020 Free Software Foundation, Inc. +# Copyright (C) 2011-2021 Free Software Foundation, Inc. # # This file is part of GDB. # diff -Nru gdb-9.1/gdb/contrib/words.sh gdb-10.2/gdb/contrib/words.sh --- gdb-9.1/gdb/contrib/words.sh 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/contrib/words.sh 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ #!/bin/sh -# Copyright (C) 2019-2020 Free Software Foundation, Inc. +# Copyright (C) 2019-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or diff -Nru gdb-9.1/gdb/copying.c gdb-10.2/gdb/copying.c --- gdb-9.1/gdb/copying.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/copying.c 2020-09-13 02:33:41.000000000 +0000 @@ -640,8 +640,9 @@ printf_filtered ("\n"); } +void _initialize_copying (); void -_initialize_copying (void) +_initialize_copying () { add_cmd ("copying", no_set_class, show_copying_command, _("Conditions for redistributing copies of GDB."), diff -Nru gdb-9.1/gdb/copyright.py gdb-10.2/gdb/copyright.py --- gdb-9.1/gdb/copyright.py 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/copyright.py 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ #! /usr/bin/env python3 -# Copyright (C) 2011-2020 Free Software Foundation, Inc. +# Copyright (C) 2011-2021 Free Software Foundation, Inc. # # This file is part of GDB. # @@ -46,7 +46,9 @@ the files are relative to that root directory. """ result = [] - for gdb_dir in ('gdb', 'gnulib', 'sim', 'include/gdb'): + for gdb_dir in ( + 'gdb', 'gdbserver', 'gdbsupport', 'gnulib', 'sim', 'include/gdb', + ): for root, dirs, files in os.walk(gdb_dir, topdown=True): for dirname in dirs: reldirname = "%s/%s" % (root, dirname) @@ -190,7 +192,9 @@ EXCLUDE_LIST = ( 'gdb/nat/glibc_thread_db.h', 'gdb/CONTRIBUTE', - 'gnulib/import' + 'gnulib/import', + 'gnulib/config.in', + 'gnulib/Makefile.in', ) # Files which should not be modified, either because they are diff -Nru gdb-9.1/gdb/corefile.c gdb-10.2/gdb/corefile.c --- gdb-9.1/gdb/corefile.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/corefile.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Core dump and executable file functions above target vector, for GDB. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -141,7 +141,7 @@ /* See gdbsupport/common-inferior.h. */ -char * +const char * get_exec_file (int err) { if (exec_filename) @@ -151,7 +151,6 @@ error (_("No executable file specified.\n\ Use the \"file\" or \"exec-file\" command.")); - return NULL; } @@ -329,33 +328,6 @@ return extract_unsigned_integer (buf, len, byte_order); } -void -read_memory_string (CORE_ADDR memaddr, char *buffer, int max_len) -{ - char *cp; - int i; - int cnt; - - cp = buffer; - while (1) - { - if (cp - buffer >= max_len) - { - buffer[max_len - 1] = '\0'; - break; - } - cnt = max_len - (cp - buffer); - if (cnt > 8) - cnt = 8; - read_memory (memaddr + (int) (cp - buffer), (gdb_byte *) cp, cnt); - for (i = 0; i < cnt && *cp; i++, cp++) - ; /* null body */ - - if (i < cnt && !*cp) - break; - } -} - CORE_ADDR read_memory_typed_address (CORE_ADDR addr, struct type *type) { @@ -416,7 +388,7 @@ /* The current default bfd target. Points to storage allocated for gnutarget_string. */ -char *gnutarget; +const char *gnutarget; /* Same thing, except it is "auto" not NULL for the default case. */ static char *gnutarget_string; @@ -473,14 +445,14 @@ void set_gnutarget (const char *newtarget) { - if (gnutarget_string != NULL) - xfree (gnutarget_string); + xfree (gnutarget_string); gnutarget_string = xstrdup (newtarget); set_gnutarget_command (NULL, 0, NULL); } +void _initialize_core (); void -_initialize_core (void) +_initialize_core () { struct cmd_list_element *c; diff -Nru gdb-9.1/gdb/corelow.c gdb-10.2/gdb/corelow.c --- gdb-9.1/gdb/corelow.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/corelow.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Core dump and executable file functions below target vector, for GDB. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -37,6 +37,7 @@ #include "exec.h" #include "readline/tilde.h" #include "solib.h" +#include "solist.h" #include "filenames.h" #include "progspace.h" #include "objfiles.h" @@ -44,14 +45,15 @@ #include "completer.h" #include "gdbsupport/filestuff.h" #include "build-id.h" +#include "gdbsupport/pathstuff.h" +#include <unordered_map> +#include <unordered_set> +#include "gdbcmd.h" #ifndef O_LARGEFILE #define O_LARGEFILE 0 #endif -static core_fns *sniff_core_bfd (gdbarch *core_gdbarch, - bfd *abfd); - /* The core file target. */ static const target_info core_target_info = { @@ -89,11 +91,11 @@ const char *thread_name (struct thread_info *) override; - bool has_all_memory () override { return false; } + bool has_all_memory () override { return true; } bool has_memory () override; bool has_stack () override; bool has_registers () override; - bool has_execution (ptid_t) override { return false; } + bool has_execution (inferior *inf) override { return false; } bool info_proc (const char *, enum info_proc_what) override; @@ -110,10 +112,12 @@ const struct regset *regset, const char *name, int section_min_size, - int which, const char *human_name, bool required); + /* See definition. */ + void info_proc_mappings (struct gdbarch *gdbarch); + private: /* per-core data */ /* The core's section table. Note that these target sections are @@ -124,9 +128,24 @@ targets. */ target_section_table m_core_section_table {}; - /* The core_fns for a core file handler that is prepared to read the - core file currently open on core_bfd. */ - core_fns *m_core_vec = NULL; + /* File-backed address space mappings: some core files include + information about memory mapped files. */ + target_section_table m_core_file_mappings {}; + + /* Unavailable mappings. These correspond to pathnames which either + weren't found or could not be opened. Knowing these addresses can + still be useful. */ + std::vector<mem_range> m_core_unavailable_mappings; + + /* Build m_core_file_mappings. Called from the constructor. */ + void build_file_mappings (); + + /* Helper method for xfer_partial. */ + enum target_xfer_status xfer_memory_via_mappings (gdb_byte *readbuf, + const gdb_byte *writebuf, + ULONGEST offset, + ULONGEST len, + ULONGEST *xfered_len); /* FIXME: kettenis/20031023: Eventually this field should disappear. */ @@ -137,8 +156,10 @@ { m_core_gdbarch = gdbarch_from_bfd (core_bfd); - /* Find a suitable core file handler to munch on core_bfd */ - m_core_vec = sniff_core_bfd (m_core_gdbarch, core_bfd); + if (!m_core_gdbarch + || !gdbarch_iterate_over_regset_sections_p (m_core_gdbarch)) + error (_("\"%s\": Core file format not supported"), + bfd_get_filename (core_bfd)); /* Find the data section */ if (build_section_table (core_bfd, @@ -146,113 +167,133 @@ &m_core_section_table.sections_end)) error (_("\"%s\": Can't find sections: %s"), bfd_get_filename (core_bfd), bfd_errmsg (bfd_get_error ())); + + build_file_mappings (); } core_target::~core_target () { xfree (m_core_section_table.sections); + xfree (m_core_file_mappings.sections); } -/* List of all available core_fns. On gdb startup, each core file - register reader calls deprecated_add_core_fns() to register - information on each core format it is prepared to read. */ - -static struct core_fns *core_file_fns = NULL; - -static int gdb_check_format (bfd *); +/* Construct the target_section_table for file-backed mappings if + they exist. -static void add_to_thread_list (bfd *, asection *, void *); - -/* An arbitrary identifier for the core inferior. */ -#define CORELOW_PID 1 - -/* Link a new core_fns into the global core_file_fns list. Called on - gdb startup by the _initialize routine in each core file register - reader, to register information about each format the reader is - prepared to handle. */ + For each unique path in the note, we'll open a BFD with a bfd + target of "binary". This is an unstructured bfd target upon which + we'll impose a structure from the mappings in the architecture-specific + mappings note. A BFD section is allocated and initialized for each + file-backed mapping. + + We take care to not share already open bfds with other parts of + GDB; in particular, we don't want to add new sections to existing + BFDs. We do, however, ensure that the BFDs that we allocate here + will go away (be deallocated) when the core target is detached. */ void -deprecated_add_core_fns (struct core_fns *cf) +core_target::build_file_mappings () { - cf->next = core_file_fns; - core_file_fns = cf; -} - -/* The default function that core file handlers can use to examine a - core file BFD and decide whether or not to accept the job of - reading the core file. */ - -int -default_core_sniffer (struct core_fns *our_fns, bfd *abfd) -{ - int result; - - result = (bfd_get_flavour (abfd) == our_fns -> core_flavour); - return (result); -} - -/* Walk through the list of core functions to find a set that can - handle the core file open on ABFD. Returns pointer to set that is - selected. */ - -static struct core_fns * -sniff_core_bfd (struct gdbarch *core_gdbarch, bfd *abfd) -{ - struct core_fns *cf; - struct core_fns *yummy = NULL; - int matches = 0; - - /* Don't sniff if we have support for register sets in - CORE_GDBARCH. */ - if (core_gdbarch && gdbarch_iterate_over_regset_sections_p (core_gdbarch)) - return NULL; - - for (cf = core_file_fns; cf != NULL; cf = cf->next) - { - if (cf->core_sniffer (cf, abfd)) - { - yummy = cf; - matches++; - } - } - if (matches > 1) - { - warning (_("\"%s\": ambiguous core format, %d handlers match"), - bfd_get_filename (abfd), matches); - } - else if (matches == 0) - error (_("\"%s\": no core file handler recognizes format"), - bfd_get_filename (abfd)); - - return (yummy); -} + std::unordered_map<std::string, struct bfd *> bfd_map; + std::unordered_set<std::string> unavailable_paths; -/* The default is to reject every core file format we see. Either - BFD has to recognize it, or we have to provide a function in the - core file handler that recognizes it. */ + /* See linux_read_core_file_mappings() in linux-tdep.c for an example + read_core_file_mappings method. */ + gdbarch_read_core_file_mappings (m_core_gdbarch, core_bfd, + + /* After determining the number of mappings, read_core_file_mappings + will invoke this lambda which allocates target_section storage for + the mappings. */ + [&] (ULONGEST count) + { + m_core_file_mappings.sections = XNEWVEC (struct target_section, count); + m_core_file_mappings.sections_end = m_core_file_mappings.sections; + }, + + /* read_core_file_mappings will invoke this lambda for each mapping + that it finds. */ + [&] (int num, ULONGEST start, ULONGEST end, ULONGEST file_ofs, + const char *filename, const void *other) + { + /* Architecture-specific read_core_mapping methods are expected to + weed out non-file-backed mappings. */ + gdb_assert (filename != nullptr); + + struct bfd *bfd = bfd_map[filename]; + if (bfd == nullptr) + { + /* Use exec_file_find() to do sysroot expansion. It'll + also strip the potential sysroot "target:" prefix. If + there is no sysroot, an equivalent (possibly more + canonical) pathname will be provided. */ + gdb::unique_xmalloc_ptr<char> expanded_fname + = exec_file_find (filename, NULL); + if (expanded_fname == nullptr) + { + m_core_unavailable_mappings.emplace_back (start, end - start); + /* Print just one warning per path. */ + if (unavailable_paths.insert (filename).second) + warning (_("Can't open file %s during file-backed mapping " + "note processing"), + filename); + return; + } + + bfd = bfd_map[filename] = bfd_openr (expanded_fname.get (), + "binary"); + + if (bfd == nullptr || !bfd_check_format (bfd, bfd_object)) + { + m_core_unavailable_mappings.emplace_back (start, end - start); + /* If we get here, there's a good chance that it's due to + an internal error. We issue a warning instead of an + internal error because of the possibility that the + file was removed in between checking for its + existence during the expansion in exec_file_find() + and the calls to bfd_openr() / bfd_check_format(). + Output both the path from the core file note along + with its expansion to make debugging this problem + easier. */ + warning (_("Can't open file %s which was expanded to %s " + "during file-backed mapping note processing"), + filename, expanded_fname.get ()); + if (bfd != nullptr) + bfd_close (bfd); + return; + } + /* Ensure that the bfd will be closed when core_bfd is closed. + This can be checked before/after a core file detach via + "maint info bfds". */ + gdb_bfd_record_inclusion (core_bfd, bfd); + } + + /* Make new BFD section. All sections have the same name, + which is permitted by bfd_make_section_anyway(). */ + asection *sec = bfd_make_section_anyway (bfd, "load"); + if (sec == nullptr) + error (_("Can't make section")); + sec->filepos = file_ofs; + bfd_set_section_flags (sec, SEC_READONLY | SEC_HAS_CONTENTS); + bfd_set_section_size (sec, end - start); + bfd_set_section_vma (sec, start); + bfd_set_section_lma (sec, start); + bfd_set_section_alignment (sec, 2); + + /* Set target_section fields. */ + struct target_section *ts = m_core_file_mappings.sections_end++; + ts->addr = start; + ts->endaddr = end; + ts->owner = nullptr; + ts->the_bfd_section = sec; + }); -int -default_check_format (bfd *abfd) -{ - return (0); + normalize_mem_ranges (&m_core_unavailable_mappings); } -/* Attempt to recognize core file formats that BFD rejects. */ - -static int -gdb_check_format (bfd *abfd) -{ - struct core_fns *cf; +static void add_to_thread_list (bfd *, asection *, void *); - for (cf = core_file_fns; cf != NULL; cf = cf->next) - { - if (cf->check_format (abfd)) - { - return (1); - } - } - return (0); -} +/* An arbitrary identifier for the core inferior. */ +#define CORELOW_PID 1 /* Close the core target. */ @@ -261,8 +302,8 @@ { if (core_bfd) { - inferior_ptid = null_ptid; /* Avoid confusion from thread - stuff. */ + switch_to_no_thread (); /* Avoid confusion from thread + stuff. */ exit_inferior_silent (current_inferior ()); /* Clear out solib state while the bfd is still open. See @@ -283,7 +324,6 @@ static void add_to_thread_list (bfd *abfd, asection *asect, void *reg_sect_arg) { - ptid_t ptid; int core_tid; int pid, lwpid; asection *reg_sect = (asection *) reg_sect_arg; @@ -311,15 +351,15 @@ inf->fake_pid_p = fake_pid_p; } - ptid = ptid_t (pid, lwpid, 0); + ptid_t ptid (pid, lwpid); - add_thread (ptid); + thread_info *thr = add_thread (inf->process_target (), ptid); /* Warning, Will Robinson, looking at BFD private data! */ if (reg_sect != NULL && asect->filepos == reg_sect->filepos) /* Did we find .reg? */ - inferior_ptid = ptid; /* Yes, make it current. */ + switch_to_thread (thr); /* Yes, make it current. */ } /* Issue a message saying we have no core to debug, if FROM_TTY. */ @@ -395,8 +435,7 @@ gdb::unique_xmalloc_ptr<char> filename (tilde_expand (arg)); if (!IS_ABSOLUTE_PATH (filename.get ())) - filename.reset (concat (current_directory, "/", - filename.get (), (char *) NULL)); + filename = gdb_abspath (filename.get ()); flags = O_BINARY | O_LARGEFILE; if (write_files) @@ -413,8 +452,7 @@ if (temp_bfd == NULL) perror_with_name (filename.get ()); - if (!bfd_check_format (temp_bfd.get (), bfd_core) - && !gdb_check_format (temp_bfd.get ())) + if (!bfd_check_format (temp_bfd.get (), bfd_core)) { /* Do it after the err msg */ /* FIXME: should be checking for errors from bfd_close (for one @@ -442,7 +480,7 @@ push_target (std::move (target_holder)); - inferior_ptid = null_ptid; + switch_to_no_thread (); /* Need to flush the register cache (and the frame cache) from a previous debug session. If inferior_ptid ends up the same as the @@ -471,11 +509,10 @@ if (thread == NULL) { inferior_appeared (current_inferior (), CORELOW_PID); - inferior_ptid = ptid_t (CORELOW_PID); - add_thread_silent (inferior_ptid); + thread = add_thread_silent (target, ptid_t (CORELOW_PID)); } - else - switch_to_thread (thread); + + switch_to_thread (thread); } if (exec_bfd == nullptr) @@ -521,8 +558,11 @@ siggy) : gdb_signal_from_host (siggy)); - printf_filtered (_("Program terminated with signal %s, %s.\n"), + printf_filtered (_("Program terminated with signal %s, %s"), gdb_signal_to_name (sig), gdb_signal_to_string (sig)); + if (gdbarch_report_signal_info_p (core_gdbarch)) + gdbarch_report_signal_info (core_gdbarch, current_uiout, sig); + printf_filtered (_(".\n")); /* Set the value of the internal variable $_exitsignal, which holds the signal uncaught by the inferior. */ @@ -540,7 +580,7 @@ /* Current thread should be NUM 1 but the user does not know that. If a program is single threaded gdb in general does not mention anything about threads. That is why the test is >= 2. */ - if (thread_count () >= 2) + if (thread_count (target) >= 2) { try { @@ -568,8 +608,7 @@ } /* Try to retrieve registers from a section in core_bfd, and supply - them to m_core_vec->core_read_registers, as the register set - numbered WHICH. + them to REGSET. If ptid's lwp member is zero, do the single-threaded thing: look for a section named NAME. If ptid's lwp @@ -588,15 +627,14 @@ const struct regset *regset, const char *name, int section_min_size, - int which, const char *human_name, bool required) { + gdb_assert (regset != nullptr); + struct bfd_section *section; bfd_size_type size; - char *contents; - bool variable_size_section = (regset != NULL - && regset->flags & REGSET_VARIABLE_SIZE); + bool variable_size_section = (regset->flags & REGSET_VARIABLE_SIZE); thread_section_name section_name (name, regcache->ptid ()); @@ -622,24 +660,16 @@ section_name.c_str ()); } - contents = (char *) alloca (size); - if (! bfd_get_section_contents (core_bfd, section, contents, - (file_ptr) 0, size)) + gdb::byte_vector contents (size); + if (!bfd_get_section_contents (core_bfd, section, contents.data (), + (file_ptr) 0, size)) { warning (_("Couldn't read %s registers from `%s' section in core file."), human_name, section_name.c_str ()); return; } - if (regset != NULL) - { - regset->supply_regset (regset, regcache, -1, contents, size); - return; - } - - gdb_assert (m_core_vec != nullptr); - m_core_vec->core_read_registers (regcache, contents, size, which, - (CORE_ADDR) bfd_section_vma (section)); + regset->supply_regset (regset, regcache, -1, contents.data (), size); } /* Data passed to gdbarch_iterate_over_regset_sections's callback. */ @@ -657,10 +687,11 @@ const struct regset *regset, const char *human_name, void *cb_data) { + gdb_assert (regset != nullptr); + auto *data = (get_core_registers_cb_data *) cb_data; bool required = false; - bool variable_size_section = (regset != NULL - && regset->flags & REGSET_VARIABLE_SIZE); + bool variable_size_section = (regset->flags & REGSET_VARIABLE_SIZE); if (!variable_size_section) gdb_assert (supply_size == collect_size); @@ -677,11 +708,8 @@ human_name = "floating-point"; } - /* The 'which' parameter is only used when no regset is provided. - Thus we just set it to -1. */ data->target->get_core_register_section (data->regcache, regset, sect_name, - supply_size, -1, human_name, - required); + supply_size, human_name, required); } /* Get the registers out of a core file. This is the machine- @@ -694,36 +722,22 @@ void core_target::fetch_registers (struct regcache *regcache, int regno) { - int i; - struct gdbarch *gdbarch; - if (!(m_core_gdbarch != nullptr - && gdbarch_iterate_over_regset_sections_p (m_core_gdbarch)) - && (m_core_vec == NULL || m_core_vec->core_read_registers == NULL)) + && gdbarch_iterate_over_regset_sections_p (m_core_gdbarch))) { fprintf_filtered (gdb_stderr, "Can't fetch registers from this type of core file\n"); return; } - gdbarch = regcache->arch (); - if (gdbarch_iterate_over_regset_sections_p (gdbarch)) - { - get_core_registers_cb_data data = { this, regcache }; - gdbarch_iterate_over_regset_sections (gdbarch, - get_core_registers_cb, - (void *) &data, NULL); - } - else - { - get_core_register_section (regcache, NULL, - ".reg", 0, 0, "general-purpose", 1); - get_core_register_section (regcache, NULL, - ".reg2", 0, 2, "floating-point", 0); - } + struct gdbarch *gdbarch = regcache->arch (); + get_core_registers_cb_data data = { this, regcache }; + gdbarch_iterate_over_regset_sections (gdbarch, + get_core_registers_cb, + (void *) &data, NULL); /* Mark all registers not found in the core as unavailable. */ - for (i = 0; i < gdbarch_num_regs (regcache->arch ()); i++) + for (int i = 0; i < gdbarch_num_regs (regcache->arch ()); i++) if (regcache->get_register_status (i) == REG_UNKNOWN) regcache->raw_supply (i, NULL); } @@ -734,6 +748,57 @@ print_section_info (&m_core_section_table, core_bfd); } +/* Helper method for core_target::xfer_partial. */ + +enum target_xfer_status +core_target::xfer_memory_via_mappings (gdb_byte *readbuf, + const gdb_byte *writebuf, + ULONGEST offset, ULONGEST len, + ULONGEST *xfered_len) +{ + enum target_xfer_status xfer_status; + + xfer_status = (section_table_xfer_memory_partial + (readbuf, writebuf, + offset, len, xfered_len, + m_core_file_mappings.sections, + m_core_file_mappings.sections_end)); + + if (xfer_status == TARGET_XFER_OK || m_core_unavailable_mappings.empty ()) + return xfer_status; + + /* There are instances - e.g. when debugging within a docker + container using the AUFS storage driver - where the pathnames + obtained from the note section are incorrect. Despite the path + being wrong, just knowing the start and end addresses of the + mappings is still useful; we can attempt an access of the file + stratum constrained to the address ranges corresponding to the + unavailable mappings. */ + + ULONGEST memaddr = offset; + ULONGEST memend = offset + len; + + for (const auto &mr : m_core_unavailable_mappings) + { + if (address_in_mem_range (memaddr, &mr)) + { + if (!address_in_mem_range (memend, &mr)) + len = mr.start + mr.length - memaddr; + + xfer_status = this->beneath ()->xfer_partial (TARGET_OBJECT_MEMORY, + NULL, + readbuf, + writebuf, + offset, + len, + xfered_len); + break; + } + } + + return xfer_status; +} + enum target_xfer_status core_target::xfer_partial (enum target_object object, const char *annex, gdb_byte *readbuf, const gdb_byte *writebuf, @@ -742,13 +807,55 @@ switch (object) { case TARGET_OBJECT_MEMORY: - return (section_table_xfer_memory_partial - (readbuf, writebuf, - offset, len, xfered_len, - m_core_section_table.sections, - m_core_section_table.sections_end, - NULL)); + { + enum target_xfer_status xfer_status; + + /* Try accessing memory contents from core file data, + restricting consideration to those sections for which + the BFD section flag SEC_HAS_CONTENTS is set. */ + auto has_contents_cb = [] (const struct target_section *s) + { + return ((s->the_bfd_section->flags & SEC_HAS_CONTENTS) != 0); + }; + xfer_status = section_table_xfer_memory_partial + (readbuf, writebuf, + offset, len, xfered_len, + m_core_section_table.sections, + m_core_section_table.sections_end, + has_contents_cb); + if (xfer_status == TARGET_XFER_OK) + return TARGET_XFER_OK; + /* Check file backed mappings. If they're available, use + core file provided mappings (e.g. from .note.linuxcore.file + or the like) as this should provide a more accurate + result. If not, check the stratum beneath us, which should + be the file stratum. */ + if (m_core_file_mappings.sections != nullptr) + xfer_status = xfer_memory_via_mappings (readbuf, writebuf, offset, + len, xfered_len); + else + xfer_status = this->beneath ()->xfer_partial (object, annex, readbuf, + writebuf, offset, len, + xfered_len); + if (xfer_status == TARGET_XFER_OK) + return TARGET_XFER_OK; + + /* Finally, attempt to access data in core file sections with + no contents. These will typically read as all zero. */ + auto no_contents_cb = [&] (const struct target_section *s) + { + return !has_contents_cb (s); + }; + xfer_status = section_table_xfer_memory_partial + (readbuf, writebuf, + offset, len, xfered_len, + m_core_section_table.sections, + m_core_section_table.sections_end, + no_contents_cb); + + return xfer_status; + } case TARGET_OBJECT_AUXV: if (readbuf) { @@ -944,7 +1051,7 @@ /* Otherwise, this isn't a "threaded" core -- use the PID field, but only if it isn't a fake PID. */ - inf = find_inferior_ptid (ptid); + inf = find_inferior_ptid (this, ptid); if (inf != NULL && !inf->fake_pid_p) return normal_pid_to_str (ptid); @@ -994,8 +1101,92 @@ return true; } +/* Get a pointer to the current core target. If not connected to a + core target, return NULL. */ + +static core_target * +get_current_core_target () +{ + target_ops *proc_target = current_inferior ()->process_target (); + return dynamic_cast<core_target *> (proc_target); +} + +/* Display file backed mappings from core file. */ + +void +core_target::info_proc_mappings (struct gdbarch *gdbarch) +{ + if (m_core_file_mappings.sections != m_core_file_mappings.sections_end) + { + printf_filtered (_("Mapped address spaces:\n\n")); + if (gdbarch_addr_bit (gdbarch) == 32) + { + printf_filtered ("\t%10s %10s %10s %10s %s\n", + "Start Addr", + " End Addr", + " Size", " Offset", "objfile"); + } + else + { + printf_filtered (" %18s %18s %10s %10s %s\n", + "Start Addr", + " End Addr", + " Size", " Offset", "objfile"); + } + } + + for (const struct target_section *tsp = m_core_file_mappings.sections; + tsp < m_core_file_mappings.sections_end; + tsp++) + { + ULONGEST start = tsp->addr; + ULONGEST end = tsp->endaddr; + ULONGEST file_ofs = tsp->the_bfd_section->filepos; + const char *filename = bfd_get_filename (tsp->the_bfd_section->owner); + + if (gdbarch_addr_bit (gdbarch) == 32) + printf_filtered ("\t%10s %10s %10s %10s %s\n", + paddress (gdbarch, start), + paddress (gdbarch, end), + hex_string (end - start), + hex_string (file_ofs), + filename); + else + printf_filtered (" %18s %18s %10s %10s %s\n", + paddress (gdbarch, start), + paddress (gdbarch, end), + hex_string (end - start), + hex_string (file_ofs), + filename); + } +} + +/* Implement "maintenance print core-file-backed-mappings" command. + + If mappings are loaded, the results should be similar to the + mappings shown by "info proc mappings". This command is mainly a + debugging tool for GDB developers to make sure that the expected + mappings are present after loading a core file. For Linux, the + output provided by this command will be very similar (if not + identical) to that provided by "info proc mappings". This is not + necessarily the case for other OSes which might provide + more/different information in the "info proc mappings" output. */ + +static void +maintenance_print_core_file_backed_mappings (const char *args, int from_tty) +{ + core_target *targ = get_current_core_target (); + if (targ != nullptr) + targ->info_proc_mappings (targ->core_gdbarch ()); +} + +void _initialize_corelow (); void -_initialize_corelow (void) +_initialize_corelow () { add_target (core_target_info, core_target_open, filename_completer); + add_cmd ("core-file-backed-mappings", class_maintenance, + maintenance_print_core_file_backed_mappings, + _("Print core file's file-backed mappings."), + &maintenanceprintlist); } diff -Nru gdb-9.1/gdb/cp-abi.c gdb-10.2/gdb/cp-abi.c --- gdb-9.1/gdb/cp-abi.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/cp-abi.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Generic code for supporting multiple C++ ABI's - Copyright (C) 2001-2020 Free Software Foundation, Inc. + Copyright (C) 2001-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -220,11 +220,13 @@ return (*current_cp_abi.get_typename_from_type_info) (value); } -int +/* See cp-abi.h. */ + +struct language_pass_by_ref_info cp_pass_by_reference (struct type *type) { if ((current_cp_abi.pass_by_reference) == NULL) - return 0; + return {}; return (*current_cp_abi.pass_by_reference) (type); } @@ -271,10 +273,8 @@ _("Cannot find C++ ABI \"%s\" to set it as auto default."), short_name); - if (auto_cp_abi.longname != NULL) - xfree ((char *) auto_cp_abi.longname); - if (auto_cp_abi.doc != NULL) - xfree ((char *) auto_cp_abi.doc); + xfree ((char *) auto_cp_abi.longname); + xfree ((char *) auto_cp_abi.doc); auto_cp_abi = *abi; @@ -389,8 +389,9 @@ uiout->text (").\n"); } +void _initialize_cp_abi (); void -_initialize_cp_abi (void) +_initialize_cp_abi () { struct cmd_list_element *c; diff -Nru gdb-9.1/gdb/cp-abi.h gdb-10.2/gdb/cp-abi.h --- gdb-9.1/gdb/cp-abi.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/cp-abi.h 2021-04-25 04:06:26.000000000 +0000 @@ -3,7 +3,7 @@ Contributed by Daniel Berlin <dberlin@redhat.com> - Copyright (C) 2001-2020 Free Software Foundation, Inc. + Copyright (C) 2001-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -207,9 +207,11 @@ CORE_ADDR cplus_skip_trampoline (struct frame_info *frame, CORE_ADDR stop_pc); -/* Return non-zero if an argument of type TYPE should be passed by - reference instead of value. */ -extern int cp_pass_by_reference (struct type *type); +/* Return a struct that provides pass-by-reference information + about the given TYPE. */ + +extern struct language_pass_by_ref_info cp_pass_by_reference + (struct type *type); struct cp_abi_ops { @@ -246,7 +248,7 @@ struct type *(*get_type_from_type_info) (struct value *value); std::string (*get_typename_from_type_info) (struct value *value); CORE_ADDR (*skip_trampoline) (struct frame_info *, CORE_ADDR); - int (*pass_by_reference) (struct type *type); + struct language_pass_by_ref_info (*pass_by_reference) (struct type *type); }; diff -Nru gdb-9.1/gdb/cp-name-parser.c gdb-10.2/gdb/cp-name-parser.c --- gdb-9.1/gdb/cp-name-parser.c 2020-02-08 12:54:11.000000000 +0000 +++ gdb-10.2/gdb/cp-name-parser.c 2021-04-25 04:10:37.000000000 +0000 @@ -1,8 +1,9 @@ -/* A Bison parser, made by GNU Bison 3.0.4. */ +/* A Bison parser, made by GNU Bison 3.5.1. */ /* Bison implementation for Yacc-like parsers in C - Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc. + Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2020 Free Software Foundation, + Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -40,11 +41,14 @@ define necessary library symbols; they are noted "INFRINGES ON USER NAME SPACE" below. */ +/* Undocumented macros, especially those whose name start with YY_, + are private implementation details. Do not rely on them. */ + /* Identify Bison output. */ #define YYBISON 1 /* Bison version. */ -#define YYBISON_VERSION "3.0.4" +#define YYBISON_VERSION "3.5.1" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" @@ -61,8 +65,8 @@ -/* Copy the first part of user declarations. */ -#line 38 "cp-name-parser.y" /* yacc.c:339 */ +/* First part of user prologue. */ +#line 38 "cp-name-parser.y" #include "defs.h" @@ -89,13 +93,26 @@ }; -#line 93 "cp-name-parser.c.tmp" /* yacc.c:339 */ +#line 97 "cp-name-parser.c.tmp" +# ifndef YY_CAST +# ifdef __cplusplus +# define YY_CAST(Type, Val) static_cast<Type> (Val) +# define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast<Type> (Val) +# else +# define YY_CAST(Type, Val) ((Type) (Val)) +# define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val)) +# endif +# endif # ifndef YY_NULLPTRPTR -# if defined __cplusplus && 201103L <= __cplusplus -# define YY_NULLPTRPTR nullptr +# if defined __cplusplus +# if 201103L <= __cplusplus +# define YY_NULLPTRPTR nullptr +# else +# define YY_NULLPTRPTR 0 +# endif # else -# define YY_NULLPTRPTR 0 +# define YY_NULLPTRPTR ((void*)0) # endif # endif @@ -227,10 +244,9 @@ /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED - union YYSTYPE { -#line 66 "cp-name-parser.y" /* yacc.c:355 */ +#line 66 "cp-name-parser.y" struct demangle_component *comp; struct nested { @@ -250,9 +266,9 @@ const char *opname; -#line 254 "cp-name-parser.c.tmp" /* yacc.c:355 */ -}; +#line 270 "cp-name-parser.c.tmp" +}; typedef union YYSTYPE YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define YYSTYPE_IS_DECLARED 1 @@ -264,8 +280,8 @@ -/* Copy the second part of user declarations. */ -#line 85 "cp-name-parser.y" /* yacc.c:358 */ +/* Second part of user prologue. */ +#line 85 "cp-name-parser.y" struct cpname_state @@ -433,34 +449,82 @@ static int yylex (YYSTYPE *, cpname_state *); static void yyerror (cpname_state *, const char *); -#line 437 "cp-name-parser.c.tmp" /* yacc.c:358 */ +#line 453 "cp-name-parser.c.tmp" + #ifdef short # undef short #endif -#ifdef YYTYPE_UINT8 -typedef YYTYPE_UINT8 yytype_uint8; -#else -typedef unsigned char yytype_uint8; +/* On compilers that do not define __PTRDIFF_MAX__ etc., make sure + <limits.h> and (if available) <stdint.h> are included + so that the code can choose integer types of a good width. */ + +#ifndef __PTRDIFF_MAX__ +# include <limits.h> /* INFRINGES ON USER NAME SPACE */ +# if defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__ +# include <stdint.h> /* INFRINGES ON USER NAME SPACE */ +# define YY_STDINT_H +# endif #endif -#ifdef YYTYPE_INT8 -typedef YYTYPE_INT8 yytype_int8; +/* Narrow types that promote to a signed type and that can represent a + signed or unsigned integer of at least N bits. In tables they can + save space and decrease cache pressure. Promoting to a signed type + helps avoid bugs in integer arithmetic. */ + +#ifdef __INT_LEAST8_MAX__ +typedef __INT_LEAST8_TYPE__ yytype_int8; +#elif defined YY_STDINT_H +typedef int_least8_t yytype_int8; #else typedef signed char yytype_int8; #endif -#ifdef YYTYPE_UINT16 -typedef YYTYPE_UINT16 yytype_uint16; +#ifdef __INT_LEAST16_MAX__ +typedef __INT_LEAST16_TYPE__ yytype_int16; +#elif defined YY_STDINT_H +typedef int_least16_t yytype_int16; +#else +typedef short yytype_int16; +#endif + +#if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__ +typedef __UINT_LEAST8_TYPE__ yytype_uint8; +#elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \ + && UINT_LEAST8_MAX <= INT_MAX) +typedef uint_least8_t yytype_uint8; +#elif !defined __UINT_LEAST8_MAX__ && UCHAR_MAX <= INT_MAX +typedef unsigned char yytype_uint8; #else -typedef unsigned short int yytype_uint16; +typedef short yytype_uint8; #endif -#ifdef YYTYPE_INT16 -typedef YYTYPE_INT16 yytype_int16; +#if defined __UINT_LEAST16_MAX__ && __UINT_LEAST16_MAX__ <= __INT_MAX__ +typedef __UINT_LEAST16_TYPE__ yytype_uint16; +#elif (!defined __UINT_LEAST16_MAX__ && defined YY_STDINT_H \ + && UINT_LEAST16_MAX <= INT_MAX) +typedef uint_least16_t yytype_uint16; +#elif !defined __UINT_LEAST16_MAX__ && USHRT_MAX <= INT_MAX +typedef unsigned short yytype_uint16; #else -typedef short int yytype_int16; +typedef int yytype_uint16; +#endif + +#ifndef YYPTRDIFF_T +# if defined __PTRDIFF_TYPE__ && defined __PTRDIFF_MAX__ +# define YYPTRDIFF_T __PTRDIFF_TYPE__ +# define YYPTRDIFF_MAXIMUM __PTRDIFF_MAX__ +# elif defined PTRDIFF_MAX +# ifndef ptrdiff_t +# include <stddef.h> /* INFRINGES ON USER NAME SPACE */ +# endif +# define YYPTRDIFF_T ptrdiff_t +# define YYPTRDIFF_MAXIMUM PTRDIFF_MAX +# else +# define YYPTRDIFF_T long +# define YYPTRDIFF_MAXIMUM LONG_MAX +# endif #endif #ifndef YYSIZE_T @@ -468,15 +532,27 @@ # define YYSIZE_T __SIZE_TYPE__ # elif defined size_t # define YYSIZE_T size_t -# elif ! defined YYSIZE_T +# elif defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__ # include <stddef.h> /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # else -# define YYSIZE_T unsigned int +# define YYSIZE_T unsigned # endif #endif -#define YYSIZE_MAXIMUM ((YYSIZE_T) -1) +#define YYSIZE_MAXIMUM \ + YY_CAST (YYPTRDIFF_T, \ + (YYPTRDIFF_MAXIMUM < YY_CAST (YYSIZE_T, -1) \ + ? YYPTRDIFF_MAXIMUM \ + : YY_CAST (YYSIZE_T, -1))) + +#define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X)) + +/* Stored state numbers (used for stacks). */ +typedef yytype_int16 yy_state_t; + +/* State numbers in computations. */ +typedef int yy_state_fast_t; #ifndef YY_ # if defined YYENABLE_NLS && YYENABLE_NLS @@ -490,30 +566,19 @@ # endif #endif -#ifndef YY_ATTRIBUTE -# if (defined __GNUC__ \ - && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__))) \ - || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C -# define YY_ATTRIBUTE(Spec) __attribute__(Spec) +#ifndef YY_ATTRIBUTE_PURE +# if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__) +# define YY_ATTRIBUTE_PURE __attribute__ ((__pure__)) # else -# define YY_ATTRIBUTE(Spec) /* empty */ +# define YY_ATTRIBUTE_PURE # endif #endif -#ifndef YY_ATTRIBUTE_PURE -# define YY_ATTRIBUTE_PURE YY_ATTRIBUTE ((__pure__)) -#endif - #ifndef YY_ATTRIBUTE_UNUSED -# define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__)) -#endif - -#if !defined _Noreturn \ - && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112) -# if defined _MSC_VER && 1200 <= _MSC_VER -# define _Noreturn __declspec (noreturn) +# if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__) +# define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__)) # else -# define _Noreturn YY_ATTRIBUTE ((__noreturn__)) +# define YY_ATTRIBUTE_UNUSED # endif #endif @@ -524,13 +589,13 @@ # define YYUSE(E) /* empty */ #endif -#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ +#if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ /* Suppress an incorrect diagnostic about yylval being uninitialized. */ -# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ - _Pragma ("GCC diagnostic push") \ - _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\ +# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ + _Pragma ("GCC diagnostic push") \ + _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \ _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") -# define YY_IGNORE_MAYBE_UNINITIALIZED_END \ +# define YY_IGNORE_MAYBE_UNINITIALIZED_END \ _Pragma ("GCC diagnostic pop") #else # define YY_INITIAL_VALUE(Value) Value @@ -543,6 +608,20 @@ # define YY_INITIAL_VALUE(Value) /* Nothing. */ #endif +#if defined __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__ +# define YY_IGNORE_USELESS_CAST_BEGIN \ + _Pragma ("GCC diagnostic push") \ + _Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"") +# define YY_IGNORE_USELESS_CAST_END \ + _Pragma ("GCC diagnostic pop") +#endif +#ifndef YY_IGNORE_USELESS_CAST_BEGIN +# define YY_IGNORE_USELESS_CAST_BEGIN +# define YY_IGNORE_USELESS_CAST_END +#endif + + +#define YY_ASSERT(E) ((void) (0 && (E))) #if ! defined yyoverflow || YYERROR_VERBOSE @@ -618,17 +697,17 @@ /* A type that is properly aligned for any stack member. */ union yyalloc { - yytype_int16 yyss_alloc; + yy_state_t yyss_alloc; YYSTYPE yyvs_alloc; }; /* The size of the maximum gap between one aligned stack and the next. */ -# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) +# define YYSTACK_GAP_MAXIMUM (YYSIZEOF (union yyalloc) - 1) /* The size of an array large to enough to hold all stacks, each with N elements. */ # define YYSTACK_BYTES(N) \ - ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ + ((N) * (YYSIZEOF (yy_state_t) + YYSIZEOF (YYSTYPE)) \ + YYSTACK_GAP_MAXIMUM) # define YYCOPY_NEEDED 1 @@ -641,11 +720,11 @@ # define YYSTACK_RELOCATE(Stack_alloc, Stack) \ do \ { \ - YYSIZE_T yynewbytes; \ + YYPTRDIFF_T yynewbytes; \ YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ Stack = &yyptr->Stack_alloc; \ - yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ - yyptr += yynewbytes / sizeof (*yyptr); \ + yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \ + yyptr += yynewbytes / YYSIZEOF (*yyptr); \ } \ while (0) @@ -657,12 +736,12 @@ # ifndef YYCOPY # if defined __GNUC__ && 1 < __GNUC__ # define YYCOPY(Dst, Src, Count) \ - __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src))) + __builtin_memcpy (Dst, Src, YY_CAST (YYSIZE_T, (Count)) * sizeof (*(Src))) # else # define YYCOPY(Dst, Src, Count) \ do \ { \ - YYSIZE_T yyi; \ + YYPTRDIFF_T yyi; \ for (yyi = 0; yyi < (Count); yyi++) \ (Dst)[yyi] = (Src)[yyi]; \ } \ @@ -685,17 +764,18 @@ /* YYNSTATES -- Number of states. */ #define YYNSTATES 325 -/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned - by yylex, with out-of-bounds checking. */ #define YYUNDEFTOK 2 #define YYMAXUTOK 307 + +/* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM + as returned by yylex, with out-of-bounds checking. */ #define YYTRANSLATE(YYX) \ - ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) + (0 <= (YYX) && (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) /* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM - as returned by yylex, without out-of-bounds checking. */ -static const yytype_uint8 yytranslate[] = + as returned by yylex. */ +static const yytype_int8 yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -732,7 +812,7 @@ #if YYDEBUG /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ -static const yytype_uint16 yyrline[] = +static const yytype_int16 yyrline[] = { 0, 348, 348, 352, 354, 356, 361, 362, 369, 378, 385, 389, 392, 411, 413, 417, 423, 429, 435, 441, @@ -789,7 +869,7 @@ # ifdef YYPRINT /* YYTOKNUM[NUM] -- (External) token number corresponding to the (internal) symbol number NUM (which must be that of a token). */ -static const yytype_uint16 yytoknum[] = +static const yytype_int16 yytoknum[] = { 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, @@ -802,14 +882,14 @@ }; # endif -#define YYPACT_NINF -187 +#define YYPACT_NINF (-187) -#define yypact_value_is_default(Yystate) \ - (!!((Yystate) == (-187))) +#define yypact_value_is_default(Yyn) \ + ((Yyn) == YYPACT_NINF) -#define YYTABLE_NINF -1 +#define YYTABLE_NINF (-1) -#define yytable_value_is_error(Yytable_value) \ +#define yytable_value_is_error(Yyn) \ 0 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing @@ -912,7 +992,7 @@ /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule whose number is the opposite. If YYTABLE_NINF, syntax error. */ -static const yytype_uint16 yytable[] = +static const yytype_int16 yytable[] = { 32, 179, 44, 46, 45, 103, 43, 121, 243, 160, 97, 99, 106, 209, 124, 80, 248, 171, 32, 32, @@ -1150,7 +1230,7 @@ /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ -static const yytype_uint8 yystos[] = +static const yytype_int8 yystos[] = { 0, 5, 11, 12, 17, 21, 22, 23, 24, 25, 26, 27, 28, 30, 31, 32, 33, 34, 38, 39, @@ -1188,7 +1268,7 @@ }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ -static const yytype_uint8 yyr1[] = +static const yytype_int8 yyr1[] = { 0, 75, 76, 77, 77, 77, 78, 78, 79, 79, 79, 79, 79, 80, 80, 81, 81, 81, 81, 81, @@ -1213,7 +1293,7 @@ }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ -static const yytype_uint8 yyr2[] = +static const yytype_int8 yyr2[] = { 0, 2, 1, 1, 1, 1, 0, 2, 2, 3, 3, 2, 2, 2, 4, 2, 2, 4, 4, 2, @@ -1250,22 +1330,22 @@ #define YYRECOVERING() (!!yyerrstatus) -#define YYBACKUP(Token, Value) \ -do \ - if (yychar == YYEMPTY) \ - { \ - yychar = (Token); \ - yylval = (Value); \ - YYPOPSTACK (yylen); \ - yystate = *yyssp; \ - goto yybackup; \ - } \ - else \ - { \ - yyerror (state, YY_("syntax error: cannot back up")); \ - YYERROR; \ - } \ -while (0) +#define YYBACKUP(Token, Value) \ + do \ + if (yychar == YYEMPTY) \ + { \ + yychar = (Token); \ + yylval = (Value); \ + YYPOPSTACK (yylen); \ + yystate = *yyssp; \ + goto yybackup; \ + } \ + else \ + { \ + yyerror (state, YY_("syntax error: cannot back up")); \ + YYERROR; \ + } \ + while (0) /* Error token number */ #define YYTERROR 1 @@ -1305,38 +1385,40 @@ } while (0) -/*----------------------------------------. -| Print this symbol's value on YYOUTPUT. | -`----------------------------------------*/ +/*-----------------------------------. +| Print this symbol's value on YYO. | +`-----------------------------------*/ static void -yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, struct cpname_state *state) +yy_symbol_value_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep, struct cpname_state *state) { - FILE *yyo = yyoutput; - YYUSE (yyo); + FILE *yyoutput = yyo; + YYUSE (yyoutput); YYUSE (state); if (!yyvaluep) return; # ifdef YYPRINT if (yytype < YYNTOKENS) - YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); + YYPRINT (yyo, yytoknum[yytype], *yyvaluep); # endif + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN YYUSE (yytype); + YY_IGNORE_MAYBE_UNINITIALIZED_END } -/*--------------------------------. -| Print this symbol on YYOUTPUT. | -`--------------------------------*/ +/*---------------------------. +| Print this symbol on YYO. | +`---------------------------*/ static void -yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, struct cpname_state *state) +yy_symbol_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep, struct cpname_state *state) { - YYFPRINTF (yyoutput, "%s %s (", + YYFPRINTF (yyo, "%s %s (", yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]); - yy_symbol_value_print (yyoutput, yytype, yyvaluep, state); - YYFPRINTF (yyoutput, ")"); + yy_symbol_value_print (yyo, yytype, yyvaluep, state); + YYFPRINTF (yyo, ")"); } /*------------------------------------------------------------------. @@ -1345,7 +1427,7 @@ `------------------------------------------------------------------*/ static void -yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop) +yy_stack_print (yy_state_t *yybottom, yy_state_t *yytop) { YYFPRINTF (stderr, "Stack now"); for (; yybottom <= yytop; yybottom++) @@ -1368,20 +1450,20 @@ `------------------------------------------------*/ static void -yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule, struct cpname_state *state) +yy_reduce_print (yy_state_t *yyssp, YYSTYPE *yyvsp, int yyrule, struct cpname_state *state) { - unsigned long int yylno = yyrline[yyrule]; + int yylno = yyrline[yyrule]; int yynrhs = yyr2[yyrule]; int yyi; - YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", + YYFPRINTF (stderr, "Reducing stack by rule %d (line %d):\n", yyrule - 1, yylno); /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { YYFPRINTF (stderr, " $%d = ", yyi + 1); yy_symbol_print (stderr, - yystos[yyssp[yyi + 1 - yynrhs]], - &(yyvsp[(yyi + 1) - (yynrhs)]) + yystos[+yyssp[yyi + 1 - yynrhs]], + &yyvsp[(yyi + 1) - (yynrhs)] , state); YYFPRINTF (stderr, "\n"); } @@ -1425,13 +1507,13 @@ # ifndef yystrlen # if defined __GLIBC__ && defined _STRING_H -# define yystrlen strlen +# define yystrlen(S) (YY_CAST (YYPTRDIFF_T, strlen (S))) # else /* Return the length of YYSTR. */ -static YYSIZE_T +static YYPTRDIFF_T yystrlen (const char *yystr) { - YYSIZE_T yylen; + YYPTRDIFF_T yylen; for (yylen = 0; yystr[yylen]; yylen++) continue; return yylen; @@ -1467,12 +1549,12 @@ backslash-backslash). YYSTR is taken from yytname. If YYRES is null, do not copy; instead, return the length of what the result would have been. */ -static YYSIZE_T +static YYPTRDIFF_T yytnamerr (char *yyres, const char *yystr) { if (*yystr == '"') { - YYSIZE_T yyn = 0; + YYPTRDIFF_T yyn = 0; char const *yyp = yystr; for (;;) @@ -1485,7 +1567,10 @@ case '\\': if (*++yyp != '\\') goto do_not_strip_quotes; - /* Fall through. */ + else + goto append; + + append: default: if (yyres) yyres[yyn] = *yyp; @@ -1500,10 +1585,10 @@ do_not_strip_quotes: ; } - if (! yyres) + if (yyres) + return yystpcpy (yyres, yystr) - yyres; + else return yystrlen (yystr); - - return yystpcpy (yyres, yystr) - yyres; } # endif @@ -1516,19 +1601,19 @@ *YYMSG_ALLOC to the required number of bytes. Return 2 if the required number of bytes is too large to store. */ static int -yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, - yytype_int16 *yyssp, int yytoken) +yysyntax_error (YYPTRDIFF_T *yymsg_alloc, char **yymsg, + yy_state_t *yyssp, int yytoken) { - YYSIZE_T yysize0 = yytnamerr (YY_NULLPTRPTR, yytname[yytoken]); - YYSIZE_T yysize = yysize0; enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; /* Internationalized format string. */ const char *yyformat = YY_NULLPTRPTR; - /* Arguments of yyformat. */ + /* Arguments of yyformat: reported tokens (one for the "unexpected", + one per "expected"). */ char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; - /* Number of reported tokens (one for the "unexpected", one per - "expected"). */ + /* Actual size of YYARG. */ int yycount = 0; + /* Cumulated lengths of YYARG. */ + YYPTRDIFF_T yysize = 0; /* There are many possibilities here to consider: - If this state is a consistent state with a default action, then @@ -1555,7 +1640,9 @@ */ if (yytoken != YYEMPTY) { - int yyn = yypact[*yyssp]; + int yyn = yypact[+*yyssp]; + YYPTRDIFF_T yysize0 = yytnamerr (YY_NULLPTRPTR, yytname[yytoken]); + yysize = yysize0; yyarg[yycount++] = yytname[yytoken]; if (!yypact_value_is_default (yyn)) { @@ -1580,11 +1667,12 @@ } yyarg[yycount++] = yytname[yyx]; { - YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTRPTR, yytname[yyx]); - if (! (yysize <= yysize1 - && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) + YYPTRDIFF_T yysize1 + = yysize + yytnamerr (YY_NULLPTRPTR, yytname[yyx]); + if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM) + yysize = yysize1; + else return 2; - yysize = yysize1; } } } @@ -1596,6 +1684,7 @@ case N: \ yyformat = S; \ break + default: /* Avoid compiler warnings. */ YYCASE_(0, YY_("syntax error")); YYCASE_(1, YY_("syntax error, unexpected %s")); YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); @@ -1606,10 +1695,13 @@ } { - YYSIZE_T yysize1 = yysize + yystrlen (yyformat); - if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) + /* Don't count the "%s"s in the final size, but reserve room for + the terminator. */ + YYPTRDIFF_T yysize1 = yysize + (yystrlen (yyformat) - 2 * yycount) + 1; + if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM) + yysize = yysize1; + else return 2; - yysize = yysize1; } if (*yymsg_alloc < yysize) @@ -1635,8 +1727,8 @@ } else { - yyp++; - yyformat++; + ++yyp; + ++yyformat; } } return 0; @@ -1684,7 +1776,7 @@ /* Number of syntax errors so far. */ int yynerrs; - int yystate; + yy_state_fast_t yystate; /* Number of tokens to shift before error messages enabled. */ int yyerrstatus; @@ -1696,16 +1788,16 @@ to xreallocate them elsewhere. */ /* The state stack. */ - yytype_int16 yyssa[YYINITDEPTH]; - yytype_int16 *yyss; - yytype_int16 *yyssp; + yy_state_t yyssa[YYINITDEPTH]; + yy_state_t *yyss; + yy_state_t *yyssp; /* The semantic value stack. */ YYSTYPE yyvsa[YYINITDEPTH]; YYSTYPE *yyvs; YYSTYPE *yyvsp; - YYSIZE_T yystacksize; + YYPTRDIFF_T yystacksize; int yyn; int yyresult; @@ -1719,7 +1811,7 @@ /* Buffer for error messages, and its allocated size. */ char yymsgbuf[128]; char *yymsg = yymsgbuf; - YYSIZE_T yymsg_alloc = sizeof yymsgbuf; + YYPTRDIFF_T yymsg_alloc = sizeof yymsgbuf; #endif #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) @@ -1740,46 +1832,54 @@ yychar = YYEMPTY; /* Cause a token to be read. */ goto yysetstate; + /*------------------------------------------------------------. -| yynewstate -- Push a new state, which is found in yystate. | +| yynewstate -- push a new state, which is found in yystate. | `------------------------------------------------------------*/ - yynewstate: +yynewstate: /* In all cases, when you get here, the value and location stacks have just been pushed. So pushing a state here evens the stacks. */ yyssp++; - yysetstate: - *yyssp = yystate; + +/*--------------------------------------------------------------------. +| yysetstate -- set current state (the top of the stack) to yystate. | +`--------------------------------------------------------------------*/ +yysetstate: + YYDPRINTF ((stderr, "Entering state %d\n", yystate)); + YY_ASSERT (0 <= yystate && yystate < YYNSTATES); + YY_IGNORE_USELESS_CAST_BEGIN + *yyssp = YY_CAST (yy_state_t, yystate); + YY_IGNORE_USELESS_CAST_END if (yyss + yystacksize - 1 <= yyssp) +#if !defined yyoverflow && !defined YYSTACK_RELOCATE + goto yyexhaustedlab; +#else { /* Get the current used size of the three stacks, in elements. */ - YYSIZE_T yysize = yyssp - yyss + 1; + YYPTRDIFF_T yysize = yyssp - yyss + 1; -#ifdef yyoverflow +# if defined yyoverflow { /* Give user a chance to xreallocate the stack. Use copies of these so that the &'s don't force the real ones into memory. */ + yy_state_t *yyss1 = yyss; YYSTYPE *yyvs1 = yyvs; - yytype_int16 *yyss1 = yyss; /* Each stack pointer address is followed by the size of the data in use in that stack, in bytes. This used to be a conditional around just the two extra args, but that might be undefined if yyoverflow is a macro. */ yyoverflow (YY_("memory exhausted"), - &yyss1, yysize * sizeof (*yyssp), - &yyvs1, yysize * sizeof (*yyvsp), + &yyss1, yysize * YYSIZEOF (*yyssp), + &yyvs1, yysize * YYSIZEOF (*yyvsp), &yystacksize); - yyss = yyss1; yyvs = yyvs1; } -#else /* no yyoverflow */ -# ifndef YYSTACK_RELOCATE - goto yyexhaustedlab; -# else +# else /* defined YYSTACK_RELOCATE */ /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) goto yyexhaustedlab; @@ -1788,42 +1888,43 @@ yystacksize = YYMAXDEPTH; { - yytype_int16 *yyss1 = yyss; + yy_state_t *yyss1 = yyss; union yyalloc *yyptr = - (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); + YY_CAST (union yyalloc *, + YYSTACK_ALLOC (YY_CAST (YYSIZE_T, YYSTACK_BYTES (yystacksize)))); if (! yyptr) goto yyexhaustedlab; YYSTACK_RELOCATE (yyss_alloc, yyss); YYSTACK_RELOCATE (yyvs_alloc, yyvs); -# undef YYSTACK_RELOCATE +# undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); } # endif -#endif /* no yyoverflow */ yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; - YYDPRINTF ((stderr, "Stack size increased to %lu\n", - (unsigned long int) yystacksize)); + YY_IGNORE_USELESS_CAST_BEGIN + YYDPRINTF ((stderr, "Stack size increased to %ld\n", + YY_CAST (long, yystacksize))); + YY_IGNORE_USELESS_CAST_END if (yyss + yystacksize - 1 <= yyssp) YYABORT; } - - YYDPRINTF ((stderr, "Entering state %d\n", yystate)); +#endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */ if (yystate == YYFINAL) YYACCEPT; goto yybackup; + /*-----------. | yybackup. | `-----------*/ yybackup: - /* Do appropriate processing given the current state. Read a lookahead token if we need one and don't already have one. */ @@ -1873,15 +1974,13 @@ /* Shift the lookahead token. */ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); - - /* Discard the shifted token. */ - yychar = YYEMPTY; - yystate = yyn; YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; YY_IGNORE_MAYBE_UNINITIALIZED_END + /* Discard the shifted token. */ + yychar = YYEMPTY; goto yynewstate; @@ -1896,7 +1995,7 @@ /*-----------------------------. -| yyreduce -- Do a reduction. | +| yyreduce -- do a reduction. | `-----------------------------*/ yyreduce: /* yyn is the number of a rule to reduce with. */ @@ -1916,60 +2015,60 @@ YY_REDUCE_PRINT (yyn); switch (yyn) { - case 2: -#line 349 "cp-name-parser.y" /* yacc.c:1646 */ - { state->global_result = (yyvsp[0].comp); } -#line 1924 "cp-name-parser.c.tmp" /* yacc.c:1646 */ + case 2: +#line 349 "cp-name-parser.y" + { state->global_result = (yyvsp[0].comp); } +#line 2023 "cp-name-parser.c.tmp" break; case 6: -#line 361 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = NULL; } -#line 1930 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 361 "cp-name-parser.y" + { (yyval.comp) = NULL; } +#line 2029 "cp-name-parser.c.tmp" break; case 7: -#line 363 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = (yyvsp[0].comp); } -#line 1936 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 363 "cp-name-parser.y" + { (yyval.comp) = (yyvsp[0].comp); } +#line 2035 "cp-name-parser.c.tmp" break; case 8: -#line 370 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = (yyvsp[0].nested).comp; +#line 370 "cp-name-parser.y" + { (yyval.comp) = (yyvsp[0].nested).comp; *(yyvsp[0].nested).last = (yyvsp[-1].comp); } -#line 1944 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 2043 "cp-name-parser.c.tmp" break; case 9: -#line 379 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_TYPED_NAME, +#line 379 "cp-name-parser.y" + { (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_TYPED_NAME, (yyvsp[-2].comp), (yyvsp[-1].nested).comp); if ((yyvsp[0].comp)) (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_LOCAL_NAME, (yyval.comp), (yyvsp[0].comp)); } -#line 1955 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 2054 "cp-name-parser.c.tmp" break; case 10: -#line 386 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_TYPED_NAME, (yyvsp[-2].comp), (yyvsp[-1].nested).comp); +#line 386 "cp-name-parser.y" + { (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_TYPED_NAME, (yyvsp[-2].comp), (yyvsp[-1].nested).comp); if ((yyvsp[0].comp)) (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_LOCAL_NAME, (yyval.comp), (yyvsp[0].comp)); } -#line 1962 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 2061 "cp-name-parser.c.tmp" break; case 11: -#line 390 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = (yyvsp[-1].nested).comp; +#line 390 "cp-name-parser.y" + { (yyval.comp) = (yyvsp[-1].nested).comp; if ((yyvsp[0].comp)) (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_LOCAL_NAME, (yyval.comp), (yyvsp[0].comp)); } -#line 1969 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 2068 "cp-name-parser.c.tmp" break; case 12: -#line 393 "cp-name-parser.y" /* yacc.c:1646 */ - { if ((yyvsp[0].abstract).last) +#line 393 "cp-name-parser.y" + { if ((yyvsp[0].abstract).last) { /* First complete the abstract_declarator's type using the typespec from the conversion_op_name. */ @@ -1984,728 +2083,728 @@ (yyval.comp) = (yyvsp[-1].nested).comp; if ((yyvsp[0].abstract).start) (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_LOCAL_NAME, (yyval.comp), (yyvsp[0].abstract).start); } -#line 1989 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 2088 "cp-name-parser.c.tmp" break; case 13: -#line 412 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->fill_comp ((enum demangle_component_type) (yyvsp[-1].lval), (yyvsp[0].comp), NULL); } -#line 1995 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 412 "cp-name-parser.y" + { (yyval.comp) = state->fill_comp ((enum demangle_component_type) (yyvsp[-1].lval), (yyvsp[0].comp), NULL); } +#line 2094 "cp-name-parser.c.tmp" break; case 14: -#line 414 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_CONSTRUCTION_VTABLE, (yyvsp[-2].comp), (yyvsp[0].comp)); } -#line 2001 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 414 "cp-name-parser.y" + { (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_CONSTRUCTION_VTABLE, (yyvsp[-2].comp), (yyvsp[0].comp)); } +#line 2100 "cp-name-parser.c.tmp" break; case 15: -#line 418 "cp-name-parser.y" /* yacc.c:1646 */ - { +#line 418 "cp-name-parser.y" + { /* Match the whitespacing of cplus_demangle_operators. It would abort on unrecognized string otherwise. */ (yyval.comp) = state->make_operator ("new", 3); } -#line 2011 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 2110 "cp-name-parser.c.tmp" break; case 16: -#line 424 "cp-name-parser.y" /* yacc.c:1646 */ - { +#line 424 "cp-name-parser.y" + { /* Match the whitespacing of cplus_demangle_operators. It would abort on unrecognized string otherwise. */ (yyval.comp) = state->make_operator ("delete ", 1); } -#line 2021 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 2120 "cp-name-parser.c.tmp" break; case 17: -#line 430 "cp-name-parser.y" /* yacc.c:1646 */ - { +#line 430 "cp-name-parser.y" + { /* Match the whitespacing of cplus_demangle_operators. It would abort on unrecognized string otherwise. */ (yyval.comp) = state->make_operator ("new[]", 3); } -#line 2031 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 2130 "cp-name-parser.c.tmp" break; case 18: -#line 436 "cp-name-parser.y" /* yacc.c:1646 */ - { +#line 436 "cp-name-parser.y" + { /* Match the whitespacing of cplus_demangle_operators. It would abort on unrecognized string otherwise. */ (yyval.comp) = state->make_operator ("delete[] ", 1); } -#line 2041 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 2140 "cp-name-parser.c.tmp" break; case 19: -#line 442 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->make_operator ("+", 2); } -#line 2047 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 442 "cp-name-parser.y" + { (yyval.comp) = state->make_operator ("+", 2); } +#line 2146 "cp-name-parser.c.tmp" break; case 20: -#line 444 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->make_operator ("-", 2); } -#line 2053 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 444 "cp-name-parser.y" + { (yyval.comp) = state->make_operator ("-", 2); } +#line 2152 "cp-name-parser.c.tmp" break; case 21: -#line 446 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->make_operator ("*", 2); } -#line 2059 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 446 "cp-name-parser.y" + { (yyval.comp) = state->make_operator ("*", 2); } +#line 2158 "cp-name-parser.c.tmp" break; case 22: -#line 448 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->make_operator ("/", 2); } -#line 2065 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 448 "cp-name-parser.y" + { (yyval.comp) = state->make_operator ("/", 2); } +#line 2164 "cp-name-parser.c.tmp" break; case 23: -#line 450 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->make_operator ("%", 2); } -#line 2071 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 450 "cp-name-parser.y" + { (yyval.comp) = state->make_operator ("%", 2); } +#line 2170 "cp-name-parser.c.tmp" break; case 24: -#line 452 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->make_operator ("^", 2); } -#line 2077 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 452 "cp-name-parser.y" + { (yyval.comp) = state->make_operator ("^", 2); } +#line 2176 "cp-name-parser.c.tmp" break; case 25: -#line 454 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->make_operator ("&", 2); } -#line 2083 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 454 "cp-name-parser.y" + { (yyval.comp) = state->make_operator ("&", 2); } +#line 2182 "cp-name-parser.c.tmp" break; case 26: -#line 456 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->make_operator ("|", 2); } -#line 2089 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 456 "cp-name-parser.y" + { (yyval.comp) = state->make_operator ("|", 2); } +#line 2188 "cp-name-parser.c.tmp" break; case 27: -#line 458 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->make_operator ("~", 1); } -#line 2095 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 458 "cp-name-parser.y" + { (yyval.comp) = state->make_operator ("~", 1); } +#line 2194 "cp-name-parser.c.tmp" break; case 28: -#line 460 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->make_operator ("!", 1); } -#line 2101 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 460 "cp-name-parser.y" + { (yyval.comp) = state->make_operator ("!", 1); } +#line 2200 "cp-name-parser.c.tmp" break; case 29: -#line 462 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->make_operator ("=", 2); } -#line 2107 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 462 "cp-name-parser.y" + { (yyval.comp) = state->make_operator ("=", 2); } +#line 2206 "cp-name-parser.c.tmp" break; case 30: -#line 464 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->make_operator ("<", 2); } -#line 2113 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 464 "cp-name-parser.y" + { (yyval.comp) = state->make_operator ("<", 2); } +#line 2212 "cp-name-parser.c.tmp" break; case 31: -#line 466 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->make_operator (">", 2); } -#line 2119 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 466 "cp-name-parser.y" + { (yyval.comp) = state->make_operator (">", 2); } +#line 2218 "cp-name-parser.c.tmp" break; case 32: -#line 468 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->make_operator ((yyvsp[0].opname), 2); } -#line 2125 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 468 "cp-name-parser.y" + { (yyval.comp) = state->make_operator ((yyvsp[0].opname), 2); } +#line 2224 "cp-name-parser.c.tmp" break; case 33: -#line 470 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->make_operator ("<<", 2); } -#line 2131 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 470 "cp-name-parser.y" + { (yyval.comp) = state->make_operator ("<<", 2); } +#line 2230 "cp-name-parser.c.tmp" break; case 34: -#line 472 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->make_operator (">>", 2); } -#line 2137 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 472 "cp-name-parser.y" + { (yyval.comp) = state->make_operator (">>", 2); } +#line 2236 "cp-name-parser.c.tmp" break; case 35: -#line 474 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->make_operator ("==", 2); } -#line 2143 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 474 "cp-name-parser.y" + { (yyval.comp) = state->make_operator ("==", 2); } +#line 2242 "cp-name-parser.c.tmp" break; case 36: -#line 476 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->make_operator ("!=", 2); } -#line 2149 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 476 "cp-name-parser.y" + { (yyval.comp) = state->make_operator ("!=", 2); } +#line 2248 "cp-name-parser.c.tmp" break; case 37: -#line 478 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->make_operator ("<=", 2); } -#line 2155 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 478 "cp-name-parser.y" + { (yyval.comp) = state->make_operator ("<=", 2); } +#line 2254 "cp-name-parser.c.tmp" break; case 38: -#line 480 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->make_operator (">=", 2); } -#line 2161 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 480 "cp-name-parser.y" + { (yyval.comp) = state->make_operator (">=", 2); } +#line 2260 "cp-name-parser.c.tmp" break; case 39: -#line 482 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->make_operator ("&&", 2); } -#line 2167 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 482 "cp-name-parser.y" + { (yyval.comp) = state->make_operator ("&&", 2); } +#line 2266 "cp-name-parser.c.tmp" break; case 40: -#line 484 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->make_operator ("||", 2); } -#line 2173 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 484 "cp-name-parser.y" + { (yyval.comp) = state->make_operator ("||", 2); } +#line 2272 "cp-name-parser.c.tmp" break; case 41: -#line 486 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->make_operator ("++", 1); } -#line 2179 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 486 "cp-name-parser.y" + { (yyval.comp) = state->make_operator ("++", 1); } +#line 2278 "cp-name-parser.c.tmp" break; case 42: -#line 488 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->make_operator ("--", 1); } -#line 2185 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 488 "cp-name-parser.y" + { (yyval.comp) = state->make_operator ("--", 1); } +#line 2284 "cp-name-parser.c.tmp" break; case 43: -#line 490 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->make_operator (",", 2); } -#line 2191 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 490 "cp-name-parser.y" + { (yyval.comp) = state->make_operator (",", 2); } +#line 2290 "cp-name-parser.c.tmp" break; case 44: -#line 492 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->make_operator ("->*", 2); } -#line 2197 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 492 "cp-name-parser.y" + { (yyval.comp) = state->make_operator ("->*", 2); } +#line 2296 "cp-name-parser.c.tmp" break; case 45: -#line 494 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->make_operator ("->", 2); } -#line 2203 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 494 "cp-name-parser.y" + { (yyval.comp) = state->make_operator ("->", 2); } +#line 2302 "cp-name-parser.c.tmp" break; case 46: -#line 496 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->make_operator ("()", 2); } -#line 2209 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 496 "cp-name-parser.y" + { (yyval.comp) = state->make_operator ("()", 2); } +#line 2308 "cp-name-parser.c.tmp" break; case 47: -#line 498 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->make_operator ("[]", 2); } -#line 2215 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 498 "cp-name-parser.y" + { (yyval.comp) = state->make_operator ("[]", 2); } +#line 2314 "cp-name-parser.c.tmp" break; case 48: -#line 506 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_CONVERSION, (yyvsp[0].comp), NULL); } -#line 2221 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 506 "cp-name-parser.y" + { (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_CONVERSION, (yyvsp[0].comp), NULL); } +#line 2320 "cp-name-parser.c.tmp" break; case 49: -#line 511 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.nested).comp = (yyvsp[-1].nested1).comp; +#line 511 "cp-name-parser.y" + { (yyval.nested).comp = (yyvsp[-1].nested1).comp; d_right ((yyvsp[-1].nested1).last) = (yyvsp[0].comp); (yyval.nested).last = &d_left ((yyvsp[0].comp)); } -#line 2230 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 2329 "cp-name-parser.c.tmp" break; case 50: -#line 516 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.nested).comp = (yyvsp[0].comp); +#line 516 "cp-name-parser.y" + { (yyval.nested).comp = (yyvsp[0].comp); (yyval.nested).last = &d_left ((yyvsp[0].comp)); } -#line 2238 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 2337 "cp-name-parser.c.tmp" break; case 51: -#line 520 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.nested).comp = (yyvsp[-1].nested1).comp; +#line 520 "cp-name-parser.y" + { (yyval.nested).comp = (yyvsp[-1].nested1).comp; d_right ((yyvsp[-1].nested1).last) = (yyvsp[0].comp); (yyval.nested).last = &d_left ((yyvsp[0].comp)); } -#line 2247 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 2346 "cp-name-parser.c.tmp" break; case 52: -#line 525 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.nested).comp = (yyvsp[0].comp); +#line 525 "cp-name-parser.y" + { (yyval.nested).comp = (yyvsp[0].comp); (yyval.nested).last = &d_left ((yyvsp[0].comp)); } -#line 2255 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 2354 "cp-name-parser.c.tmp" break; case 54: -#line 534 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_TEMPLATE, (yyvsp[-3].comp), (yyvsp[-1].nested).comp); } -#line 2261 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 534 "cp-name-parser.y" + { (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_TEMPLATE, (yyvsp[-3].comp), (yyvsp[-1].nested).comp); } +#line 2360 "cp-name-parser.c.tmp" break; case 55: -#line 536 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->make_dtor (gnu_v3_complete_object_dtor, (yyvsp[0].comp)); } -#line 2267 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 536 "cp-name-parser.y" + { (yyval.comp) = state->make_dtor (gnu_v3_complete_object_dtor, (yyvsp[0].comp)); } +#line 2366 "cp-name-parser.c.tmp" break; case 57: -#line 549 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = (yyvsp[0].comp); } -#line 2273 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 549 "cp-name-parser.y" + { (yyval.comp) = (yyvsp[0].comp); } +#line 2372 "cp-name-parser.c.tmp" break; case 58: -#line 555 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = (yyvsp[-1].nested1).comp; d_right ((yyvsp[-1].nested1).last) = (yyvsp[0].comp); } -#line 2279 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 555 "cp-name-parser.y" + { (yyval.comp) = (yyvsp[-1].nested1).comp; d_right ((yyvsp[-1].nested1).last) = (yyvsp[0].comp); } +#line 2378 "cp-name-parser.c.tmp" break; case 60: -#line 558 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = (yyvsp[-1].nested1).comp; d_right ((yyvsp[-1].nested1).last) = (yyvsp[0].comp); } -#line 2285 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 558 "cp-name-parser.y" + { (yyval.comp) = (yyvsp[-1].nested1).comp; d_right ((yyvsp[-1].nested1).last) = (yyvsp[0].comp); } +#line 2384 "cp-name-parser.c.tmp" break; case 65: -#line 568 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = (yyvsp[0].comp); } -#line 2291 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 568 "cp-name-parser.y" + { (yyval.comp) = (yyvsp[0].comp); } +#line 2390 "cp-name-parser.c.tmp" break; case 66: -#line 572 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = (yyvsp[-1].nested1).comp; d_right ((yyvsp[-1].nested1).last) = (yyvsp[0].comp); } -#line 2297 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 572 "cp-name-parser.y" + { (yyval.comp) = (yyvsp[-1].nested1).comp; d_right ((yyvsp[-1].nested1).last) = (yyvsp[0].comp); } +#line 2396 "cp-name-parser.c.tmp" break; case 68: -#line 577 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.nested1).comp = state->fill_comp (DEMANGLE_COMPONENT_QUAL_NAME, (yyvsp[-1].comp), NULL); +#line 577 "cp-name-parser.y" + { (yyval.nested1).comp = state->fill_comp (DEMANGLE_COMPONENT_QUAL_NAME, (yyvsp[-1].comp), NULL); (yyval.nested1).last = (yyval.nested1).comp; } -#line 2305 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 2404 "cp-name-parser.c.tmp" break; case 69: -#line 581 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.nested1).comp = (yyvsp[-2].nested1).comp; +#line 581 "cp-name-parser.y" + { (yyval.nested1).comp = (yyvsp[-2].nested1).comp; d_right ((yyvsp[-2].nested1).last) = state->fill_comp (DEMANGLE_COMPONENT_QUAL_NAME, (yyvsp[-1].comp), NULL); (yyval.nested1).last = d_right ((yyvsp[-2].nested1).last); } -#line 2314 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 2413 "cp-name-parser.c.tmp" break; case 70: -#line 586 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.nested1).comp = state->fill_comp (DEMANGLE_COMPONENT_QUAL_NAME, (yyvsp[-1].comp), NULL); +#line 586 "cp-name-parser.y" + { (yyval.nested1).comp = state->fill_comp (DEMANGLE_COMPONENT_QUAL_NAME, (yyvsp[-1].comp), NULL); (yyval.nested1).last = (yyval.nested1).comp; } -#line 2322 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 2421 "cp-name-parser.c.tmp" break; case 71: -#line 590 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.nested1).comp = (yyvsp[-2].nested1).comp; +#line 590 "cp-name-parser.y" + { (yyval.nested1).comp = (yyvsp[-2].nested1).comp; d_right ((yyvsp[-2].nested1).last) = state->fill_comp (DEMANGLE_COMPONENT_QUAL_NAME, (yyvsp[-1].comp), NULL); (yyval.nested1).last = d_right ((yyvsp[-2].nested1).last); } -#line 2331 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 2430 "cp-name-parser.c.tmp" break; case 72: -#line 599 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_TEMPLATE, (yyvsp[-3].comp), (yyvsp[-1].nested).comp); } -#line 2337 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 599 "cp-name-parser.y" + { (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_TEMPLATE, (yyvsp[-3].comp), (yyvsp[-1].nested).comp); } +#line 2436 "cp-name-parser.c.tmp" break; case 73: -#line 603 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.nested).comp = state->fill_comp (DEMANGLE_COMPONENT_TEMPLATE_ARGLIST, (yyvsp[0].comp), NULL); +#line 603 "cp-name-parser.y" + { (yyval.nested).comp = state->fill_comp (DEMANGLE_COMPONENT_TEMPLATE_ARGLIST, (yyvsp[0].comp), NULL); (yyval.nested).last = &d_right ((yyval.nested).comp); } -#line 2344 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 2443 "cp-name-parser.c.tmp" break; case 74: -#line 606 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.nested).comp = (yyvsp[-2].nested).comp; +#line 606 "cp-name-parser.y" + { (yyval.nested).comp = (yyvsp[-2].nested).comp; *(yyvsp[-2].nested).last = state->fill_comp (DEMANGLE_COMPONENT_TEMPLATE_ARGLIST, (yyvsp[0].comp), NULL); (yyval.nested).last = &d_right (*(yyvsp[-2].nested).last); } -#line 2353 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 2452 "cp-name-parser.c.tmp" break; case 76: -#line 618 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = (yyvsp[0].abstract).comp; +#line 618 "cp-name-parser.y" + { (yyval.comp) = (yyvsp[0].abstract).comp; *(yyvsp[0].abstract).last = (yyvsp[-1].comp); } -#line 2361 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 2460 "cp-name-parser.c.tmp" break; case 77: -#line 622 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_UNARY, state->make_operator ("&", 1), (yyvsp[0].comp)); } -#line 2367 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 622 "cp-name-parser.y" + { (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_UNARY, state->make_operator ("&", 1), (yyvsp[0].comp)); } +#line 2466 "cp-name-parser.c.tmp" break; case 78: -#line 624 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_UNARY, state->make_operator ("&", 1), (yyvsp[-1].comp)); } -#line 2373 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 624 "cp-name-parser.y" + { (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_UNARY, state->make_operator ("&", 1), (yyvsp[-1].comp)); } +#line 2472 "cp-name-parser.c.tmp" break; case 80: -#line 629 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.nested).comp = state->fill_comp (DEMANGLE_COMPONENT_ARGLIST, (yyvsp[0].comp), NULL); +#line 629 "cp-name-parser.y" + { (yyval.nested).comp = state->fill_comp (DEMANGLE_COMPONENT_ARGLIST, (yyvsp[0].comp), NULL); (yyval.nested).last = &d_right ((yyval.nested).comp); } -#line 2381 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 2480 "cp-name-parser.c.tmp" break; case 81: -#line 633 "cp-name-parser.y" /* yacc.c:1646 */ - { *(yyvsp[0].abstract).last = (yyvsp[-1].comp); +#line 633 "cp-name-parser.y" + { *(yyvsp[0].abstract).last = (yyvsp[-1].comp); (yyval.nested).comp = state->fill_comp (DEMANGLE_COMPONENT_ARGLIST, (yyvsp[0].abstract).comp, NULL); (yyval.nested).last = &d_right ((yyval.nested).comp); } -#line 2390 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 2489 "cp-name-parser.c.tmp" break; case 82: -#line 638 "cp-name-parser.y" /* yacc.c:1646 */ - { *(yyvsp[-2].nested).last = state->fill_comp (DEMANGLE_COMPONENT_ARGLIST, (yyvsp[0].comp), NULL); +#line 638 "cp-name-parser.y" + { *(yyvsp[-2].nested).last = state->fill_comp (DEMANGLE_COMPONENT_ARGLIST, (yyvsp[0].comp), NULL); (yyval.nested).comp = (yyvsp[-2].nested).comp; (yyval.nested).last = &d_right (*(yyvsp[-2].nested).last); } -#line 2399 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 2498 "cp-name-parser.c.tmp" break; case 83: -#line 643 "cp-name-parser.y" /* yacc.c:1646 */ - { *(yyvsp[0].abstract).last = (yyvsp[-1].comp); +#line 643 "cp-name-parser.y" + { *(yyvsp[0].abstract).last = (yyvsp[-1].comp); *(yyvsp[-3].nested).last = state->fill_comp (DEMANGLE_COMPONENT_ARGLIST, (yyvsp[0].abstract).comp, NULL); (yyval.nested).comp = (yyvsp[-3].nested).comp; (yyval.nested).last = &d_right (*(yyvsp[-3].nested).last); } -#line 2409 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 2508 "cp-name-parser.c.tmp" break; case 84: -#line 649 "cp-name-parser.y" /* yacc.c:1646 */ - { *(yyvsp[-2].nested).last +#line 649 "cp-name-parser.y" + { *(yyvsp[-2].nested).last = state->fill_comp (DEMANGLE_COMPONENT_ARGLIST, state->make_builtin_type ("..."), NULL); (yyval.nested).comp = (yyvsp[-2].nested).comp; (yyval.nested).last = &d_right (*(yyvsp[-2].nested).last); } -#line 2421 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 2520 "cp-name-parser.c.tmp" break; case 85: -#line 659 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.nested).comp = state->fill_comp (DEMANGLE_COMPONENT_FUNCTION_TYPE, NULL, (yyvsp[-2].nested).comp); +#line 659 "cp-name-parser.y" + { (yyval.nested).comp = state->fill_comp (DEMANGLE_COMPONENT_FUNCTION_TYPE, NULL, (yyvsp[-2].nested).comp); (yyval.nested).last = &d_left ((yyval.nested).comp); (yyval.nested).comp = state->d_qualify ((yyval.nested).comp, (yyvsp[0].lval), 1); } -#line 2429 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 2528 "cp-name-parser.c.tmp" break; case 86: -#line 663 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.nested).comp = state->fill_comp (DEMANGLE_COMPONENT_FUNCTION_TYPE, NULL, NULL); +#line 663 "cp-name-parser.y" + { (yyval.nested).comp = state->fill_comp (DEMANGLE_COMPONENT_FUNCTION_TYPE, NULL, NULL); (yyval.nested).last = &d_left ((yyval.nested).comp); (yyval.nested).comp = state->d_qualify ((yyval.nested).comp, (yyvsp[0].lval), 1); } -#line 2437 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 2536 "cp-name-parser.c.tmp" break; case 87: -#line 667 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.nested).comp = state->fill_comp (DEMANGLE_COMPONENT_FUNCTION_TYPE, NULL, NULL); +#line 667 "cp-name-parser.y" + { (yyval.nested).comp = state->fill_comp (DEMANGLE_COMPONENT_FUNCTION_TYPE, NULL, NULL); (yyval.nested).last = &d_left ((yyval.nested).comp); (yyval.nested).comp = state->d_qualify ((yyval.nested).comp, (yyvsp[0].lval), 1); } -#line 2445 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 2544 "cp-name-parser.c.tmp" break; case 88: -#line 674 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.lval) = 0; } -#line 2451 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 674 "cp-name-parser.y" + { (yyval.lval) = 0; } +#line 2550 "cp-name-parser.c.tmp" break; case 90: -#line 679 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.lval) = QUAL_RESTRICT; } -#line 2457 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 679 "cp-name-parser.y" + { (yyval.lval) = QUAL_RESTRICT; } +#line 2556 "cp-name-parser.c.tmp" break; case 91: -#line 681 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.lval) = QUAL_VOLATILE; } -#line 2463 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 681 "cp-name-parser.y" + { (yyval.lval) = QUAL_VOLATILE; } +#line 2562 "cp-name-parser.c.tmp" break; case 92: -#line 683 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.lval) = QUAL_CONST; } -#line 2469 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 683 "cp-name-parser.y" + { (yyval.lval) = QUAL_CONST; } +#line 2568 "cp-name-parser.c.tmp" break; case 94: -#line 688 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.lval) = (yyvsp[-1].lval) | (yyvsp[0].lval); } -#line 2475 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 688 "cp-name-parser.y" + { (yyval.lval) = (yyvsp[-1].lval) | (yyvsp[0].lval); } +#line 2574 "cp-name-parser.c.tmp" break; case 95: -#line 695 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.lval) = 0; } -#line 2481 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 695 "cp-name-parser.y" + { (yyval.lval) = 0; } +#line 2580 "cp-name-parser.c.tmp" break; case 96: -#line 697 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.lval) = INT_SIGNED; } -#line 2487 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 697 "cp-name-parser.y" + { (yyval.lval) = INT_SIGNED; } +#line 2586 "cp-name-parser.c.tmp" break; case 97: -#line 699 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.lval) = INT_UNSIGNED; } -#line 2493 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 699 "cp-name-parser.y" + { (yyval.lval) = INT_UNSIGNED; } +#line 2592 "cp-name-parser.c.tmp" break; case 98: -#line 701 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.lval) = INT_CHAR; } -#line 2499 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 701 "cp-name-parser.y" + { (yyval.lval) = INT_CHAR; } +#line 2598 "cp-name-parser.c.tmp" break; case 99: -#line 703 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.lval) = INT_LONG; } -#line 2505 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 703 "cp-name-parser.y" + { (yyval.lval) = INT_LONG; } +#line 2604 "cp-name-parser.c.tmp" break; case 100: -#line 705 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.lval) = INT_SHORT; } -#line 2511 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 705 "cp-name-parser.y" + { (yyval.lval) = INT_SHORT; } +#line 2610 "cp-name-parser.c.tmp" break; case 102: -#line 710 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.lval) = (yyvsp[-1].lval) | (yyvsp[0].lval); if ((yyvsp[-1].lval) & (yyvsp[0].lval) & INT_LONG) (yyval.lval) = (yyvsp[-1].lval) | INT_LLONG; } -#line 2517 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 710 "cp-name-parser.y" + { (yyval.lval) = (yyvsp[-1].lval) | (yyvsp[0].lval); if ((yyvsp[-1].lval) & (yyvsp[0].lval) & INT_LONG) (yyval.lval) = (yyvsp[-1].lval) | INT_LLONG; } +#line 2616 "cp-name-parser.c.tmp" break; case 103: -#line 714 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->d_int_type ((yyvsp[0].lval)); } -#line 2523 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 714 "cp-name-parser.y" + { (yyval.comp) = state->d_int_type ((yyvsp[0].lval)); } +#line 2622 "cp-name-parser.c.tmp" break; case 104: -#line 716 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->make_builtin_type ("float"); } -#line 2529 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 716 "cp-name-parser.y" + { (yyval.comp) = state->make_builtin_type ("float"); } +#line 2628 "cp-name-parser.c.tmp" break; case 105: -#line 718 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->make_builtin_type ("double"); } -#line 2535 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 718 "cp-name-parser.y" + { (yyval.comp) = state->make_builtin_type ("double"); } +#line 2634 "cp-name-parser.c.tmp" break; case 106: -#line 720 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->make_builtin_type ("long double"); } -#line 2541 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 720 "cp-name-parser.y" + { (yyval.comp) = state->make_builtin_type ("long double"); } +#line 2640 "cp-name-parser.c.tmp" break; case 107: -#line 722 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->make_builtin_type ("bool"); } -#line 2547 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 722 "cp-name-parser.y" + { (yyval.comp) = state->make_builtin_type ("bool"); } +#line 2646 "cp-name-parser.c.tmp" break; case 108: -#line 724 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->make_builtin_type ("wchar_t"); } -#line 2553 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 724 "cp-name-parser.y" + { (yyval.comp) = state->make_builtin_type ("wchar_t"); } +#line 2652 "cp-name-parser.c.tmp" break; case 109: -#line 726 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->make_builtin_type ("void"); } -#line 2559 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 726 "cp-name-parser.y" + { (yyval.comp) = state->make_builtin_type ("void"); } +#line 2658 "cp-name-parser.c.tmp" break; case 110: -#line 730 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.nested).comp = state->fill_comp (DEMANGLE_COMPONENT_POINTER, NULL, NULL); +#line 730 "cp-name-parser.y" + { (yyval.nested).comp = state->fill_comp (DEMANGLE_COMPONENT_POINTER, NULL, NULL); (yyval.nested).last = &d_left ((yyval.nested).comp); (yyval.nested).comp = state->d_qualify ((yyval.nested).comp, (yyvsp[0].lval), 0); } -#line 2567 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 2666 "cp-name-parser.c.tmp" break; case 111: -#line 735 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.nested).comp = state->fill_comp (DEMANGLE_COMPONENT_REFERENCE, NULL, NULL); +#line 735 "cp-name-parser.y" + { (yyval.nested).comp = state->fill_comp (DEMANGLE_COMPONENT_REFERENCE, NULL, NULL); (yyval.nested).last = &d_left ((yyval.nested).comp); } -#line 2574 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 2673 "cp-name-parser.c.tmp" break; case 112: -#line 738 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.nested).comp = state->fill_comp (DEMANGLE_COMPONENT_RVALUE_REFERENCE, NULL, NULL); +#line 738 "cp-name-parser.y" + { (yyval.nested).comp = state->fill_comp (DEMANGLE_COMPONENT_RVALUE_REFERENCE, NULL, NULL); (yyval.nested).last = &d_left ((yyval.nested).comp); } -#line 2581 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 2680 "cp-name-parser.c.tmp" break; case 113: -#line 741 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.nested).comp = state->fill_comp (DEMANGLE_COMPONENT_PTRMEM_TYPE, (yyvsp[-2].nested1).comp, NULL); +#line 741 "cp-name-parser.y" + { (yyval.nested).comp = state->fill_comp (DEMANGLE_COMPONENT_PTRMEM_TYPE, (yyvsp[-2].nested1).comp, NULL); /* Convert the innermost DEMANGLE_COMPONENT_QUAL_NAME to a DEMANGLE_COMPONENT_NAME. */ *(yyvsp[-2].nested1).last = *d_left ((yyvsp[-2].nested1).last); (yyval.nested).last = &d_right ((yyval.nested).comp); (yyval.nested).comp = state->d_qualify ((yyval.nested).comp, (yyvsp[0].lval), 0); } -#line 2591 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 2690 "cp-name-parser.c.tmp" break; case 114: -#line 747 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.nested).comp = state->fill_comp (DEMANGLE_COMPONENT_PTRMEM_TYPE, (yyvsp[-2].nested1).comp, NULL); +#line 747 "cp-name-parser.y" + { (yyval.nested).comp = state->fill_comp (DEMANGLE_COMPONENT_PTRMEM_TYPE, (yyvsp[-2].nested1).comp, NULL); /* Convert the innermost DEMANGLE_COMPONENT_QUAL_NAME to a DEMANGLE_COMPONENT_NAME. */ *(yyvsp[-2].nested1).last = *d_left ((yyvsp[-2].nested1).last); (yyval.nested).last = &d_right ((yyval.nested).comp); (yyval.nested).comp = state->d_qualify ((yyval.nested).comp, (yyvsp[0].lval), 0); } -#line 2601 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 2700 "cp-name-parser.c.tmp" break; case 115: -#line 755 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_ARRAY_TYPE, NULL, NULL); } -#line 2607 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 755 "cp-name-parser.y" + { (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_ARRAY_TYPE, NULL, NULL); } +#line 2706 "cp-name-parser.c.tmp" break; case 116: -#line 757 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_ARRAY_TYPE, (yyvsp[-1].comp), NULL); } -#line 2613 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 757 "cp-name-parser.y" + { (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_ARRAY_TYPE, (yyvsp[-1].comp), NULL); } +#line 2712 "cp-name-parser.c.tmp" break; case 117: -#line 771 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->d_qualify ((yyvsp[-1].comp), (yyvsp[0].lval), 0); } -#line 2619 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 771 "cp-name-parser.y" + { (yyval.comp) = state->d_qualify ((yyvsp[-1].comp), (yyvsp[0].lval), 0); } +#line 2718 "cp-name-parser.c.tmp" break; case 119: -#line 774 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->d_qualify ((yyvsp[-1].comp), (yyvsp[-2].lval) | (yyvsp[0].lval), 0); } -#line 2625 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 774 "cp-name-parser.y" + { (yyval.comp) = state->d_qualify ((yyvsp[-1].comp), (yyvsp[-2].lval) | (yyvsp[0].lval), 0); } +#line 2724 "cp-name-parser.c.tmp" break; case 120: -#line 776 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->d_qualify ((yyvsp[0].comp), (yyvsp[-1].lval), 0); } -#line 2631 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 776 "cp-name-parser.y" + { (yyval.comp) = state->d_qualify ((yyvsp[0].comp), (yyvsp[-1].lval), 0); } +#line 2730 "cp-name-parser.c.tmp" break; case 121: -#line 779 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->d_qualify ((yyvsp[-1].comp), (yyvsp[0].lval), 0); } -#line 2637 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 779 "cp-name-parser.y" + { (yyval.comp) = state->d_qualify ((yyvsp[-1].comp), (yyvsp[0].lval), 0); } +#line 2736 "cp-name-parser.c.tmp" break; case 123: -#line 782 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->d_qualify ((yyvsp[-1].comp), (yyvsp[-2].lval) | (yyvsp[0].lval), 0); } -#line 2643 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 782 "cp-name-parser.y" + { (yyval.comp) = state->d_qualify ((yyvsp[-1].comp), (yyvsp[-2].lval) | (yyvsp[0].lval), 0); } +#line 2742 "cp-name-parser.c.tmp" break; case 124: -#line 784 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->d_qualify ((yyvsp[0].comp), (yyvsp[-1].lval), 0); } -#line 2649 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 784 "cp-name-parser.y" + { (yyval.comp) = state->d_qualify ((yyvsp[0].comp), (yyvsp[-1].lval), 0); } +#line 2748 "cp-name-parser.c.tmp" break; case 125: -#line 787 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->d_qualify ((yyvsp[-1].comp), (yyvsp[0].lval), 0); } -#line 2655 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 787 "cp-name-parser.y" + { (yyval.comp) = state->d_qualify ((yyvsp[-1].comp), (yyvsp[0].lval), 0); } +#line 2754 "cp-name-parser.c.tmp" break; case 126: -#line 789 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = (yyvsp[0].comp); } -#line 2661 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 789 "cp-name-parser.y" + { (yyval.comp) = (yyvsp[0].comp); } +#line 2760 "cp-name-parser.c.tmp" break; case 127: -#line 791 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->d_qualify ((yyvsp[-1].comp), (yyvsp[-3].lval) | (yyvsp[0].lval), 0); } -#line 2667 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 791 "cp-name-parser.y" + { (yyval.comp) = state->d_qualify ((yyvsp[-1].comp), (yyvsp[-3].lval) | (yyvsp[0].lval), 0); } +#line 2766 "cp-name-parser.c.tmp" break; case 128: -#line 793 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->d_qualify ((yyvsp[0].comp), (yyvsp[-2].lval), 0); } -#line 2673 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 793 "cp-name-parser.y" + { (yyval.comp) = state->d_qualify ((yyvsp[0].comp), (yyvsp[-2].lval), 0); } +#line 2772 "cp-name-parser.c.tmp" break; case 129: -#line 798 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.abstract).comp = (yyvsp[0].nested).comp; (yyval.abstract).last = (yyvsp[0].nested).last; +#line 798 "cp-name-parser.y" + { (yyval.abstract).comp = (yyvsp[0].nested).comp; (yyval.abstract).last = (yyvsp[0].nested).last; (yyval.abstract).fn.comp = NULL; (yyval.abstract).fn.last = NULL; } -#line 2680 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 2779 "cp-name-parser.c.tmp" break; case 130: -#line 801 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.abstract) = (yyvsp[0].abstract); (yyval.abstract).fn.comp = NULL; (yyval.abstract).fn.last = NULL; +#line 801 "cp-name-parser.y" + { (yyval.abstract) = (yyvsp[0].abstract); (yyval.abstract).fn.comp = NULL; (yyval.abstract).fn.last = NULL; if ((yyvsp[0].abstract).fn.comp) { (yyval.abstract).last = (yyvsp[0].abstract).fn.last; *(yyvsp[0].abstract).last = (yyvsp[0].abstract).fn.comp; } *(yyval.abstract).last = (yyvsp[-1].nested).comp; (yyval.abstract).last = (yyvsp[-1].nested).last; } -#line 2689 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 2788 "cp-name-parser.c.tmp" break; case 131: -#line 806 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.abstract).fn.comp = NULL; (yyval.abstract).fn.last = NULL; +#line 806 "cp-name-parser.y" + { (yyval.abstract).fn.comp = NULL; (yyval.abstract).fn.last = NULL; if ((yyvsp[0].abstract).fn.comp) { (yyval.abstract).last = (yyvsp[0].abstract).fn.last; *(yyvsp[0].abstract).last = (yyvsp[0].abstract).fn.comp; } } -#line 2697 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 2796 "cp-name-parser.c.tmp" break; case 132: -#line 813 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.abstract) = (yyvsp[-1].abstract); (yyval.abstract).fn.comp = NULL; (yyval.abstract).fn.last = NULL; (yyval.abstract).fold_flag = 1; +#line 813 "cp-name-parser.y" + { (yyval.abstract) = (yyvsp[-1].abstract); (yyval.abstract).fn.comp = NULL; (yyval.abstract).fn.last = NULL; (yyval.abstract).fold_flag = 1; if ((yyvsp[-1].abstract).fn.comp) { (yyval.abstract).last = (yyvsp[-1].abstract).fn.last; *(yyvsp[-1].abstract).last = (yyvsp[-1].abstract).fn.comp; } } -#line 2705 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 2804 "cp-name-parser.c.tmp" break; case 133: -#line 817 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.abstract).fold_flag = 0; +#line 817 "cp-name-parser.y" + { (yyval.abstract).fold_flag = 0; if ((yyvsp[-1].abstract).fn.comp) { (yyval.abstract).last = (yyvsp[-1].abstract).fn.last; *(yyvsp[-1].abstract).last = (yyvsp[-1].abstract).fn.comp; } if ((yyvsp[-1].abstract).fold_flag) { @@ -2715,56 +2814,56 @@ else (yyval.abstract).fn = (yyvsp[0].nested); } -#line 2720 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 2819 "cp-name-parser.c.tmp" break; case 134: -#line 828 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.abstract).fn.comp = NULL; (yyval.abstract).fn.last = NULL; (yyval.abstract).fold_flag = 0; +#line 828 "cp-name-parser.y" + { (yyval.abstract).fn.comp = NULL; (yyval.abstract).fn.last = NULL; (yyval.abstract).fold_flag = 0; if ((yyvsp[-1].abstract).fn.comp) { (yyval.abstract).last = (yyvsp[-1].abstract).fn.last; *(yyvsp[-1].abstract).last = (yyvsp[-1].abstract).fn.comp; } *(yyvsp[-1].abstract).last = (yyvsp[0].comp); (yyval.abstract).last = &d_right ((yyvsp[0].comp)); } -#line 2730 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 2829 "cp-name-parser.c.tmp" break; case 135: -#line 834 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.abstract).fn.comp = NULL; (yyval.abstract).fn.last = NULL; (yyval.abstract).fold_flag = 0; +#line 834 "cp-name-parser.y" + { (yyval.abstract).fn.comp = NULL; (yyval.abstract).fn.last = NULL; (yyval.abstract).fold_flag = 0; (yyval.abstract).comp = (yyvsp[0].comp); (yyval.abstract).last = &d_right ((yyvsp[0].comp)); } -#line 2739 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 2838 "cp-name-parser.c.tmp" break; case 136: -#line 852 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.abstract).comp = (yyvsp[0].nested).comp; (yyval.abstract).last = (yyvsp[0].nested).last; +#line 852 "cp-name-parser.y" + { (yyval.abstract).comp = (yyvsp[0].nested).comp; (yyval.abstract).last = (yyvsp[0].nested).last; (yyval.abstract).fn.comp = NULL; (yyval.abstract).fn.last = NULL; (yyval.abstract).start = NULL; } -#line 2746 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 2845 "cp-name-parser.c.tmp" break; case 137: -#line 855 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.abstract) = (yyvsp[0].abstract); +#line 855 "cp-name-parser.y" + { (yyval.abstract) = (yyvsp[0].abstract); if ((yyvsp[0].abstract).last) *(yyval.abstract).last = (yyvsp[-1].nested).comp; else (yyval.abstract).comp = (yyvsp[-1].nested).comp; (yyval.abstract).last = (yyvsp[-1].nested).last; } -#line 2758 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 2857 "cp-name-parser.c.tmp" break; case 138: -#line 863 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.abstract).comp = (yyvsp[0].abstract).comp; (yyval.abstract).last = (yyvsp[0].abstract).last; (yyval.abstract).fn = (yyvsp[0].abstract).fn; (yyval.abstract).start = NULL; } -#line 2764 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 863 "cp-name-parser.y" + { (yyval.abstract).comp = (yyvsp[0].abstract).comp; (yyval.abstract).last = (yyvsp[0].abstract).last; (yyval.abstract).fn = (yyvsp[0].abstract).fn; (yyval.abstract).start = NULL; } +#line 2863 "cp-name-parser.c.tmp" break; case 139: -#line 865 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.abstract).start = (yyvsp[0].comp); +#line 865 "cp-name-parser.y" + { (yyval.abstract).start = (yyvsp[0].comp); if ((yyvsp[-3].abstract).fn.comp) { (yyval.abstract).last = (yyvsp[-3].abstract).fn.last; *(yyvsp[-3].abstract).last = (yyvsp[-3].abstract).fn.comp; } if ((yyvsp[-3].abstract).fold_flag) { @@ -2774,188 +2873,188 @@ else (yyval.abstract).fn = (yyvsp[-2].nested); } -#line 2779 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 2878 "cp-name-parser.c.tmp" break; case 140: -#line 876 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.abstract).fn = (yyvsp[-1].nested); +#line 876 "cp-name-parser.y" + { (yyval.abstract).fn = (yyvsp[-1].nested); (yyval.abstract).start = (yyvsp[0].comp); (yyval.abstract).comp = NULL; (yyval.abstract).last = NULL; } -#line 2788 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 2887 "cp-name-parser.c.tmp" break; case 142: -#line 884 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = (yyvsp[0].abstract).comp; +#line 884 "cp-name-parser.y" + { (yyval.comp) = (yyvsp[0].abstract).comp; *(yyvsp[0].abstract).last = (yyvsp[-1].comp); } -#line 2796 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 2895 "cp-name-parser.c.tmp" break; case 143: -#line 890 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.nested).comp = (yyvsp[0].nested).comp; +#line 890 "cp-name-parser.y" + { (yyval.nested).comp = (yyvsp[0].nested).comp; (yyval.nested).last = (yyvsp[-1].nested).last; *(yyvsp[0].nested).last = (yyvsp[-1].nested).comp; } -#line 2804 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 2903 "cp-name-parser.c.tmp" break; case 145: -#line 898 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.nested) = (yyvsp[-1].nested); } -#line 2810 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 898 "cp-name-parser.y" + { (yyval.nested) = (yyvsp[-1].nested); } +#line 2909 "cp-name-parser.c.tmp" break; case 146: -#line 900 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.nested).comp = (yyvsp[-1].nested).comp; +#line 900 "cp-name-parser.y" + { (yyval.nested).comp = (yyvsp[-1].nested).comp; *(yyvsp[-1].nested).last = (yyvsp[0].nested).comp; (yyval.nested).last = (yyvsp[0].nested).last; } -#line 2819 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 2918 "cp-name-parser.c.tmp" break; case 147: -#line 905 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.nested).comp = (yyvsp[-1].nested).comp; +#line 905 "cp-name-parser.y" + { (yyval.nested).comp = (yyvsp[-1].nested).comp; *(yyvsp[-1].nested).last = (yyvsp[0].comp); (yyval.nested).last = &d_right ((yyvsp[0].comp)); } -#line 2828 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 2927 "cp-name-parser.c.tmp" break; case 148: -#line 910 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.nested).comp = state->fill_comp (DEMANGLE_COMPONENT_TYPED_NAME, (yyvsp[0].comp), NULL); +#line 910 "cp-name-parser.y" + { (yyval.nested).comp = state->fill_comp (DEMANGLE_COMPONENT_TYPED_NAME, (yyvsp[0].comp), NULL); (yyval.nested).last = &d_right ((yyval.nested).comp); } -#line 2836 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 2935 "cp-name-parser.c.tmp" break; case 149: -#line 922 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.nested).comp = (yyvsp[0].nested).comp; +#line 922 "cp-name-parser.y" + { (yyval.nested).comp = (yyvsp[0].nested).comp; (yyval.nested).last = (yyvsp[-1].nested).last; *(yyvsp[0].nested).last = (yyvsp[-1].nested).comp; } -#line 2844 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 2943 "cp-name-parser.c.tmp" break; case 150: -#line 926 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.nested).comp = state->fill_comp (DEMANGLE_COMPONENT_TYPED_NAME, (yyvsp[0].comp), NULL); +#line 926 "cp-name-parser.y" + { (yyval.nested).comp = state->fill_comp (DEMANGLE_COMPONENT_TYPED_NAME, (yyvsp[0].comp), NULL); (yyval.nested).last = &d_right ((yyval.nested).comp); } -#line 2852 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 2951 "cp-name-parser.c.tmp" break; case 152: -#line 938 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.nested).comp = state->fill_comp (DEMANGLE_COMPONENT_TYPED_NAME, (yyvsp[-3].comp), (yyvsp[-2].nested).comp); +#line 938 "cp-name-parser.y" + { (yyval.nested).comp = state->fill_comp (DEMANGLE_COMPONENT_TYPED_NAME, (yyvsp[-3].comp), (yyvsp[-2].nested).comp); (yyval.nested).last = (yyvsp[-2].nested).last; (yyval.nested).comp = state->fill_comp (DEMANGLE_COMPONENT_LOCAL_NAME, (yyval.nested).comp, (yyvsp[0].comp)); } -#line 2861 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 2960 "cp-name-parser.c.tmp" break; case 153: -#line 943 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.nested).comp = (yyvsp[-3].nested).comp; +#line 943 "cp-name-parser.y" + { (yyval.nested).comp = (yyvsp[-3].nested).comp; *(yyvsp[-3].nested).last = (yyvsp[-2].nested).comp; (yyval.nested).last = (yyvsp[-2].nested).last; (yyval.nested).comp = state->fill_comp (DEMANGLE_COMPONENT_LOCAL_NAME, (yyval.nested).comp, (yyvsp[0].comp)); } -#line 2871 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 2970 "cp-name-parser.c.tmp" break; case 154: -#line 952 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.nested).comp = (yyvsp[-1].nested).comp; +#line 952 "cp-name-parser.y" + { (yyval.nested).comp = (yyvsp[-1].nested).comp; (yyval.nested).last = (yyvsp[-2].nested).last; *(yyvsp[-1].nested).last = (yyvsp[-2].nested).comp; } -#line 2879 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 2978 "cp-name-parser.c.tmp" break; case 155: -#line 956 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.nested).comp = (yyvsp[-1].nested).comp; +#line 956 "cp-name-parser.y" + { (yyval.nested).comp = (yyvsp[-1].nested).comp; *(yyvsp[-1].nested).last = (yyvsp[0].nested).comp; (yyval.nested).last = (yyvsp[0].nested).last; } -#line 2888 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 2987 "cp-name-parser.c.tmp" break; case 156: -#line 961 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.nested).comp = (yyvsp[-1].nested).comp; +#line 961 "cp-name-parser.y" + { (yyval.nested).comp = (yyvsp[-1].nested).comp; *(yyvsp[-1].nested).last = (yyvsp[0].comp); (yyval.nested).last = &d_right ((yyvsp[0].comp)); } -#line 2897 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 2996 "cp-name-parser.c.tmp" break; case 157: -#line 966 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.nested).comp = state->fill_comp (DEMANGLE_COMPONENT_TYPED_NAME, (yyvsp[-1].comp), (yyvsp[0].nested).comp); +#line 966 "cp-name-parser.y" + { (yyval.nested).comp = state->fill_comp (DEMANGLE_COMPONENT_TYPED_NAME, (yyvsp[-1].comp), (yyvsp[0].nested).comp); (yyval.nested).last = (yyvsp[0].nested).last; } -#line 2905 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 3004 "cp-name-parser.c.tmp" break; case 158: -#line 970 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.nested).comp = state->fill_comp (DEMANGLE_COMPONENT_TYPED_NAME, (yyvsp[-1].comp), (yyvsp[0].comp)); +#line 970 "cp-name-parser.y" + { (yyval.nested).comp = state->fill_comp (DEMANGLE_COMPONENT_TYPED_NAME, (yyvsp[-1].comp), (yyvsp[0].comp)); (yyval.nested).last = &d_right ((yyvsp[0].comp)); } -#line 2913 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 3012 "cp-name-parser.c.tmp" break; case 159: -#line 976 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = (yyvsp[-1].comp); } -#line 2919 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 976 "cp-name-parser.y" + { (yyval.comp) = (yyvsp[-1].comp); } +#line 3018 "cp-name-parser.c.tmp" break; case 161: -#line 985 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->d_binary (">", (yyvsp[-2].comp), (yyvsp[0].comp)); } -#line 2925 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 985 "cp-name-parser.y" + { (yyval.comp) = state->d_binary (">", (yyvsp[-2].comp), (yyvsp[0].comp)); } +#line 3024 "cp-name-parser.c.tmp" break; case 162: -#line 992 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_UNARY, state->make_operator ("&", 1), (yyvsp[0].comp)); } -#line 2931 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 992 "cp-name-parser.y" + { (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_UNARY, state->make_operator ("&", 1), (yyvsp[0].comp)); } +#line 3030 "cp-name-parser.c.tmp" break; case 163: -#line 994 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_UNARY, state->make_operator ("&", 1), (yyvsp[-1].comp)); } -#line 2937 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 994 "cp-name-parser.y" + { (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_UNARY, state->make_operator ("&", 1), (yyvsp[-1].comp)); } +#line 3036 "cp-name-parser.c.tmp" break; case 164: -#line 999 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->d_unary ("-", (yyvsp[0].comp)); } -#line 2943 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 999 "cp-name-parser.y" + { (yyval.comp) = state->d_unary ("-", (yyvsp[0].comp)); } +#line 3042 "cp-name-parser.c.tmp" break; case 165: -#line 1003 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->d_unary ("!", (yyvsp[0].comp)); } -#line 2949 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 1003 "cp-name-parser.y" + { (yyval.comp) = state->d_unary ("!", (yyvsp[0].comp)); } +#line 3048 "cp-name-parser.c.tmp" break; case 166: -#line 1007 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->d_unary ("~", (yyvsp[0].comp)); } -#line 2955 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 1007 "cp-name-parser.y" + { (yyval.comp) = state->d_unary ("~", (yyvsp[0].comp)); } +#line 3054 "cp-name-parser.c.tmp" break; case 167: -#line 1014 "cp-name-parser.y" /* yacc.c:1646 */ - { if ((yyvsp[0].comp)->type == DEMANGLE_COMPONENT_LITERAL +#line 1014 "cp-name-parser.y" + { if ((yyvsp[0].comp)->type == DEMANGLE_COMPONENT_LITERAL || (yyvsp[0].comp)->type == DEMANGLE_COMPONENT_LITERAL_NEG) { (yyval.comp) = (yyvsp[0].comp); @@ -2966,193 +3065,194 @@ state->fill_comp (DEMANGLE_COMPONENT_CAST, (yyvsp[-2].comp), NULL), (yyvsp[0].comp)); } -#line 2971 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 3070 "cp-name-parser.c.tmp" break; case 168: -#line 1030 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_UNARY, +#line 1030 "cp-name-parser.y" + { (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_UNARY, state->fill_comp (DEMANGLE_COMPONENT_CAST, (yyvsp[-4].comp), NULL), (yyvsp[-1].comp)); } -#line 2980 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 3079 "cp-name-parser.c.tmp" break; case 169: -#line 1037 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_UNARY, +#line 1037 "cp-name-parser.y" + { (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_UNARY, state->fill_comp (DEMANGLE_COMPONENT_CAST, (yyvsp[-4].comp), NULL), (yyvsp[-1].comp)); } -#line 2989 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 3088 "cp-name-parser.c.tmp" break; case 170: -#line 1044 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_UNARY, +#line 1044 "cp-name-parser.y" + { (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_UNARY, state->fill_comp (DEMANGLE_COMPONENT_CAST, (yyvsp[-4].comp), NULL), (yyvsp[-1].comp)); } -#line 2998 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 3097 "cp-name-parser.c.tmp" break; case 171: -#line 1063 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->d_binary ("*", (yyvsp[-2].comp), (yyvsp[0].comp)); } -#line 3004 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 1063 "cp-name-parser.y" + { (yyval.comp) = state->d_binary ("*", (yyvsp[-2].comp), (yyvsp[0].comp)); } +#line 3103 "cp-name-parser.c.tmp" break; case 172: -#line 1067 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->d_binary ("/", (yyvsp[-2].comp), (yyvsp[0].comp)); } -#line 3010 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 1067 "cp-name-parser.y" + { (yyval.comp) = state->d_binary ("/", (yyvsp[-2].comp), (yyvsp[0].comp)); } +#line 3109 "cp-name-parser.c.tmp" break; case 173: -#line 1071 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->d_binary ("%", (yyvsp[-2].comp), (yyvsp[0].comp)); } -#line 3016 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 1071 "cp-name-parser.y" + { (yyval.comp) = state->d_binary ("%", (yyvsp[-2].comp), (yyvsp[0].comp)); } +#line 3115 "cp-name-parser.c.tmp" break; case 174: -#line 1075 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->d_binary ("+", (yyvsp[-2].comp), (yyvsp[0].comp)); } -#line 3022 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 1075 "cp-name-parser.y" + { (yyval.comp) = state->d_binary ("+", (yyvsp[-2].comp), (yyvsp[0].comp)); } +#line 3121 "cp-name-parser.c.tmp" break; case 175: -#line 1079 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->d_binary ("-", (yyvsp[-2].comp), (yyvsp[0].comp)); } -#line 3028 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 1079 "cp-name-parser.y" + { (yyval.comp) = state->d_binary ("-", (yyvsp[-2].comp), (yyvsp[0].comp)); } +#line 3127 "cp-name-parser.c.tmp" break; case 176: -#line 1083 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->d_binary ("<<", (yyvsp[-2].comp), (yyvsp[0].comp)); } -#line 3034 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 1083 "cp-name-parser.y" + { (yyval.comp) = state->d_binary ("<<", (yyvsp[-2].comp), (yyvsp[0].comp)); } +#line 3133 "cp-name-parser.c.tmp" break; case 177: -#line 1087 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->d_binary (">>", (yyvsp[-2].comp), (yyvsp[0].comp)); } -#line 3040 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 1087 "cp-name-parser.y" + { (yyval.comp) = state->d_binary (">>", (yyvsp[-2].comp), (yyvsp[0].comp)); } +#line 3139 "cp-name-parser.c.tmp" break; case 178: -#line 1091 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->d_binary ("==", (yyvsp[-2].comp), (yyvsp[0].comp)); } -#line 3046 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 1091 "cp-name-parser.y" + { (yyval.comp) = state->d_binary ("==", (yyvsp[-2].comp), (yyvsp[0].comp)); } +#line 3145 "cp-name-parser.c.tmp" break; case 179: -#line 1095 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->d_binary ("!=", (yyvsp[-2].comp), (yyvsp[0].comp)); } -#line 3052 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 1095 "cp-name-parser.y" + { (yyval.comp) = state->d_binary ("!=", (yyvsp[-2].comp), (yyvsp[0].comp)); } +#line 3151 "cp-name-parser.c.tmp" break; case 180: -#line 1099 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->d_binary ("<=", (yyvsp[-2].comp), (yyvsp[0].comp)); } -#line 3058 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 1099 "cp-name-parser.y" + { (yyval.comp) = state->d_binary ("<=", (yyvsp[-2].comp), (yyvsp[0].comp)); } +#line 3157 "cp-name-parser.c.tmp" break; case 181: -#line 1103 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->d_binary (">=", (yyvsp[-2].comp), (yyvsp[0].comp)); } -#line 3064 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 1103 "cp-name-parser.y" + { (yyval.comp) = state->d_binary (">=", (yyvsp[-2].comp), (yyvsp[0].comp)); } +#line 3163 "cp-name-parser.c.tmp" break; case 182: -#line 1107 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->d_binary ("<", (yyvsp[-2].comp), (yyvsp[0].comp)); } -#line 3070 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 1107 "cp-name-parser.y" + { (yyval.comp) = state->d_binary ("<", (yyvsp[-2].comp), (yyvsp[0].comp)); } +#line 3169 "cp-name-parser.c.tmp" break; case 183: -#line 1111 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->d_binary ("&", (yyvsp[-2].comp), (yyvsp[0].comp)); } -#line 3076 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 1111 "cp-name-parser.y" + { (yyval.comp) = state->d_binary ("&", (yyvsp[-2].comp), (yyvsp[0].comp)); } +#line 3175 "cp-name-parser.c.tmp" break; case 184: -#line 1115 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->d_binary ("^", (yyvsp[-2].comp), (yyvsp[0].comp)); } -#line 3082 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 1115 "cp-name-parser.y" + { (yyval.comp) = state->d_binary ("^", (yyvsp[-2].comp), (yyvsp[0].comp)); } +#line 3181 "cp-name-parser.c.tmp" break; case 185: -#line 1119 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->d_binary ("|", (yyvsp[-2].comp), (yyvsp[0].comp)); } -#line 3088 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 1119 "cp-name-parser.y" + { (yyval.comp) = state->d_binary ("|", (yyvsp[-2].comp), (yyvsp[0].comp)); } +#line 3187 "cp-name-parser.c.tmp" break; case 186: -#line 1123 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->d_binary ("&&", (yyvsp[-2].comp), (yyvsp[0].comp)); } -#line 3094 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 1123 "cp-name-parser.y" + { (yyval.comp) = state->d_binary ("&&", (yyvsp[-2].comp), (yyvsp[0].comp)); } +#line 3193 "cp-name-parser.c.tmp" break; case 187: -#line 1127 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->d_binary ("||", (yyvsp[-2].comp), (yyvsp[0].comp)); } -#line 3100 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 1127 "cp-name-parser.y" + { (yyval.comp) = state->d_binary ("||", (yyvsp[-2].comp), (yyvsp[0].comp)); } +#line 3199 "cp-name-parser.c.tmp" break; case 188: -#line 1132 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->d_binary ("->", (yyvsp[-2].comp), (yyvsp[0].comp)); } -#line 3106 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 1132 "cp-name-parser.y" + { (yyval.comp) = state->d_binary ("->", (yyvsp[-2].comp), (yyvsp[0].comp)); } +#line 3205 "cp-name-parser.c.tmp" break; case 189: -#line 1136 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->d_binary (".", (yyvsp[-2].comp), (yyvsp[0].comp)); } -#line 3112 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 1136 "cp-name-parser.y" + { (yyval.comp) = state->d_binary (".", (yyvsp[-2].comp), (yyvsp[0].comp)); } +#line 3211 "cp-name-parser.c.tmp" break; case 190: -#line 1140 "cp-name-parser.y" /* yacc.c:1646 */ - { (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_TRINARY, state->make_operator ("?", 3), +#line 1140 "cp-name-parser.y" + { (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_TRINARY, state->make_operator ("?", 3), state->fill_comp (DEMANGLE_COMPONENT_TRINARY_ARG1, (yyvsp[-4].comp), state->fill_comp (DEMANGLE_COMPONENT_TRINARY_ARG2, (yyvsp[-2].comp), (yyvsp[0].comp)))); } -#line 3121 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 3220 "cp-name-parser.c.tmp" break; case 193: -#line 1154 "cp-name-parser.y" /* yacc.c:1646 */ - { +#line 1154 "cp-name-parser.y" + { /* Match the whitespacing of cplus_demangle_operators. It would abort on unrecognized string otherwise. */ (yyval.comp) = state->d_unary ("sizeof ", (yyvsp[-1].comp)); } -#line 3131 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 3230 "cp-name-parser.c.tmp" break; case 194: -#line 1163 "cp-name-parser.y" /* yacc.c:1646 */ - { struct demangle_component *i; +#line 1163 "cp-name-parser.y" + { struct demangle_component *i; i = state->make_name ("1", 1); (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_LITERAL, state->make_builtin_type ( "bool"), i); } -#line 3142 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 3241 "cp-name-parser.c.tmp" break; case 195: -#line 1172 "cp-name-parser.y" /* yacc.c:1646 */ - { struct demangle_component *i; +#line 1172 "cp-name-parser.y" + { struct demangle_component *i; i = state->make_name ("0", 1); (yyval.comp) = state->fill_comp (DEMANGLE_COMPONENT_LITERAL, state->make_builtin_type ("bool"), i); } -#line 3153 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 3252 "cp-name-parser.c.tmp" break; -#line 3157 "cp-name-parser.c.tmp" /* yacc.c:1646 */ +#line 3256 "cp-name-parser.c.tmp" + default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -3177,14 +3277,13 @@ /* Now 'shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ - - yyn = yyr1[yyn]; - - yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; - if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) - yystate = yytable[yystate]; - else - yystate = yydefgoto[yyn - YYNTOKENS]; + { + const int yylhs = yyr1[yyn] - YYNTOKENS; + const int yyi = yypgoto[yylhs] + *yyssp; + yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp + ? yytable[yyi] + : yydefgoto[yylhs]); + } goto yynewstate; @@ -3216,7 +3315,7 @@ { if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); - yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc); + yymsg = YY_CAST (char *, YYSTACK_ALLOC (YY_CAST (YYSIZE_T, yymsg_alloc))); if (!yymsg) { yymsg = yymsgbuf; @@ -3267,12 +3366,10 @@ | yyerrorlab -- error raised explicitly by YYERROR. | `---------------------------------------------------*/ yyerrorlab: - - /* Pacify compilers like GCC when the user code never invokes - YYERROR and the label yyerrorlab therefore never appears in user - code. */ - if (/*CONSTCOND*/ 0) - goto yyerrorlab; + /* Pacify compilers when the user code never invokes YYERROR and the + label yyerrorlab therefore never appears in user code. */ + if (0) + YYERROR; /* Do not reclaim the symbols of the rule whose action triggered this YYERROR. */ @@ -3334,6 +3431,7 @@ yyresult = 0; goto yyreturn; + /*-----------------------------------. | yyabortlab -- YYABORT comes here. | `-----------------------------------*/ @@ -3341,6 +3439,7 @@ yyresult = 1; goto yyreturn; + #if !defined yyoverflow || YYERROR_VERBOSE /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | @@ -3351,6 +3450,10 @@ /* Fall through. */ #endif + +/*-----------------------------------------------------. +| yyreturn -- parsing is finished, return the result. | +`-----------------------------------------------------*/ yyreturn: if (yychar != YYEMPTY) { @@ -3367,7 +3470,7 @@ while (yyssp != yyss) { yydestruct ("Cleanup: popping", - yystos[*yyssp], yyvsp, state); + yystos[+*yyssp], yyvsp, state); YYPOPSTACK (1); } #ifndef yyoverflow @@ -3380,7 +3483,7 @@ #endif return yyresult; } -#line 1182 "cp-name-parser.y" /* yacc.c:1906 */ +#line 1182 "cp-name-parser.y" /* Apply QUALIFIERS to LHS and return a qualified component. IS_METHOD diff -Nru gdb-9.1/gdb/cp-name-parser.y gdb-10.2/gdb/cp-name-parser.y --- gdb-9.1/gdb/cp-name-parser.y 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/cp-name-parser.y 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* YACC parser for C++ names, for GDB. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. Parts of the lexer are based on c-exp.y from GDB. diff -Nru gdb-9.1/gdb/cp-namespace.c gdb-10.2/gdb/cp-namespace.c --- gdb-9.1/gdb/cp-namespace.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/cp-namespace.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Helper routines for C++ support in GDB. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. Contributed by David Carlton and by Kealia, Inc. @@ -224,7 +224,7 @@ /* If TYPE_NAME is NULL, abandon trying to find this symbol. This can happen for lambda functions compiled with clang++, which outputs no name for the container class. */ - if (TYPE_NAME (type) == NULL) + if (type->name () == NULL) return {}; /* Look for symbol NAME in this class. */ @@ -278,8 +278,8 @@ /* If the scope is a function/method, then look up NESTED as a local static variable. E.g., "print 'function()::static_var'". */ - if ((TYPE_CODE (scope_type) == TYPE_CODE_FUNC - || TYPE_CODE (scope_type) == TYPE_CODE_METHOD) + if ((scope_type->code () == TYPE_CODE_FUNC + || scope_type->code () == TYPE_CODE_METHOD) && domain == VAR_DOMAIN) return lookup_symbol (nested, SYMBOL_BLOCK_VALUE (scope_sym.symbol), VAR_DOMAIN, NULL); @@ -516,7 +516,7 @@ domain_name (domain)); } - if (function != NULL && SYMBOL_LANGUAGE (function) == language_cplus) + if (function != NULL && function->language () == language_cplus) { /* Search the function's template parameters. */ if (SYMBOL_IS_CPLUS_TEMPLATE_FUNCTION (function)) @@ -918,7 +918,7 @@ if (symbol_lookup_debug) { - const char *type_name = TYPE_NAME (saved_parent_type); + const char *type_name = saved_parent_type->name (); fprintf_unfiltered (gdb_stdlog, "cp_lookup_nested_symbol (%s, %s, %s, %s)\n", @@ -927,7 +927,7 @@ domain_name (domain)); } - switch (TYPE_CODE (parent_type)) + switch (parent_type->code ()) { case TYPE_CODE_STRUCT: case TYPE_CODE_NAMESPACE: @@ -935,7 +935,7 @@ case TYPE_CODE_ENUM: /* NOTE: Handle modules here as well, because Fortran is re-using the C++ specific code to lookup nested symbols in modules, by calling the - function pointer la_lookup_symbol_nonlocal, which ends up here. */ + method lookup_symbol_nonlocal, which ends up here. */ case TYPE_CODE_MODULE: { int size; @@ -1061,8 +1061,9 @@ printf_unfiltered (_("The `maint namespace' command was removed.\n")); } +void _initialize_cp_namespace (); void -_initialize_cp_namespace (void) +_initialize_cp_namespace () { struct cmd_list_element *cmd; diff -Nru gdb-9.1/gdb/cp-support.c gdb-10.2/gdb/cp-support.c --- gdb-9.1/gdb/cp-support.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/cp-support.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Helper routines for C++ support in GDB. - Copyright (C) 2002-2020 Free Software Foundation, Inc. + Copyright (C) 2002-2021 Free Software Foundation, Inc. Contributed by MontaVista Software. @@ -183,8 +183,8 @@ } /* If the type is a typedef or namespace alias, replace it. */ - if (TYPE_CODE (otype) == TYPE_CODE_TYPEDEF - || TYPE_CODE (otype) == TYPE_CODE_NAMESPACE) + if (otype->code () == TYPE_CODE_TYPEDEF + || otype->code () == TYPE_CODE_NAMESPACE) { long len; int is_anon; @@ -207,21 +207,21 @@ If the symbol is typedef and its type name is the same as the symbol's name, e.g., "typedef struct foo foo;". */ - if (TYPE_NAME (type) != nullptr - && strcmp (TYPE_NAME (type), name) == 0) + if (type->name () != nullptr + && strcmp (type->name (), name) == 0) return 0; - is_anon = (TYPE_NAME (type) == NULL - && (TYPE_CODE (type) == TYPE_CODE_ENUM - || TYPE_CODE (type) == TYPE_CODE_STRUCT - || TYPE_CODE (type) == TYPE_CODE_UNION)); + is_anon = (type->name () == NULL + && (type->code () == TYPE_CODE_ENUM + || type->code () == TYPE_CODE_STRUCT + || type->code () == TYPE_CODE_UNION)); if (is_anon) { struct type *last = otype; /* Find the last typedef for the type. */ while (TYPE_TARGET_TYPE (last) != NULL - && (TYPE_CODE (TYPE_TARGET_TYPE (last)) + && (TYPE_TARGET_TYPE (last)->code () == TYPE_CODE_TYPEDEF)) last = TYPE_TARGET_TYPE (last); @@ -274,12 +274,13 @@ Canonicalize the name again, and store it in the current node (RET_COMP). */ - std::string canon = cp_canonicalize_string_no_typedefs (name); + gdb::unique_xmalloc_ptr<char> canon + = cp_canonicalize_string_no_typedefs (name); - if (!canon.empty ()) + if (canon != nullptr) { /* Copy the canonicalization into the obstack. */ - name = copy_string_to_obstack (&info->obstack, canon.c_str (), &len); + name = copy_string_to_obstack (&info->obstack, canon.get (), &len); } ret_comp->u.s_name.s = name; @@ -293,6 +294,42 @@ return 0; } +/* Helper for replace_typedefs_qualified_name to handle + DEMANGLE_COMPONENT_TEMPLATE. TMPL is the template node. BUF is + the buffer that holds the qualified name being built by + replace_typedefs_qualified_name. REPL is the node that will be + rewritten as a DEMANGLE_COMPONENT_NAME node holding the 'template + plus template arguments' name with typedefs replaced. */ + +static bool +replace_typedefs_template (struct demangle_parse_info *info, + string_file &buf, + struct demangle_component *tmpl, + struct demangle_component *repl, + canonicalization_ftype *finder, + void *data) +{ + demangle_component *tmpl_arglist = d_right (tmpl); + + /* Replace typedefs in the template argument list. */ + replace_typedefs (info, tmpl_arglist, finder, data); + + /* Convert 'template + replaced template argument list' to a string + and replace the REPL node. */ + gdb::unique_xmalloc_ptr<char> tmpl_str = cp_comp_to_string (tmpl, 100); + if (tmpl_str == nullptr) + { + /* If something went astray, abort typedef substitutions. */ + return false; + } + buf.puts (tmpl_str.get ()); + + repl->type = DEMANGLE_COMPONENT_NAME; + repl->u.s_name.s = obstack_strdup (&info->obstack, buf.string ()); + repl->u.s_name.len = buf.size (); + return true; +} + /* Replace any typedefs appearing in the qualified name (DEMANGLE_COMPONENT_QUAL_NAME) represented in RET_COMP for the name parse given in INFO. */ @@ -313,6 +350,29 @@ substituted name. */ while (comp->type == DEMANGLE_COMPONENT_QUAL_NAME) { + if (d_left (comp)->type == DEMANGLE_COMPONENT_TEMPLATE) + { + /* Convert 'template + replaced template argument list' to a + string and replace the top DEMANGLE_COMPONENT_QUAL_NAME + node. */ + if (!replace_typedefs_template (info, buf, + d_left (comp), d_left (ret_comp), + finder, data)) + return; + + buf.clear (); + d_right (ret_comp) = d_right (comp); + comp = ret_comp; + + /* Fallback to DEMANGLE_COMPONENT_NAME processing. We want + to call inspect_type for this template, in case we have a + template alias, like: + template<typename T> using alias = base<int, t>; + in which case we want inspect_type to do a replacement like: + alias<int> -> base<int, int> + */ + } + if (d_left (comp)->type == DEMANGLE_COMPONENT_NAME) { struct demangle_component newobj; @@ -369,11 +429,20 @@ comp = d_right (comp); } - /* If the next component is DEMANGLE_COMPONENT_NAME, save the qualified - name assembled above and append the name given by COMP. Then use this - reassembled name to check for a typedef. */ - - if (comp->type == DEMANGLE_COMPONENT_NAME) + /* If the next component is DEMANGLE_COMPONENT_TEMPLATE or + DEMANGLE_COMPONENT_NAME, save the qualified name assembled above + and append the name given by COMP. Then use this reassembled + name to check for a typedef. */ + + if (comp->type == DEMANGLE_COMPONENT_TEMPLATE) + { + /* Replace the top (DEMANGLE_COMPONENT_QUAL_NAME) node with a + DEMANGLE_COMPONENT_NAME node containing the whole name. */ + if (!replace_typedefs_template (info, buf, comp, ret_comp, finder, data)) + return; + inspect_type (info, ret_comp, finder, data); + } + else if (comp->type == DEMANGLE_COMPONENT_NAME) { buf.write (comp->u.s_name.s, comp->u.s_name.len); @@ -506,16 +575,15 @@ /* Parse STRING and convert it to canonical form, resolving any typedefs. If parsing fails, or if STRING is already canonical, - return the empty string. Otherwise return the canonical form. If + return nullptr. Otherwise return the canonical form. If FINDER is not NULL, then type components are passed to FINDER to be looked up. DATA is passed verbatim to FINDER. */ -std::string +gdb::unique_xmalloc_ptr<char> cp_canonicalize_string_full (const char *string, canonicalization_ftype *finder, void *data) { - std::string ret; unsigned int estimated_len; std::unique_ptr<demangle_parse_info> info; @@ -531,41 +599,42 @@ estimated_len); gdb_assert (us); - ret = us.get (); /* Finally, compare the original string with the computed name, returning NULL if they are the same. */ - if (ret == string) - return std::string (); + if (strcmp (us.get (), string) == 0) + return nullptr; + + return us; } - return ret; + return nullptr; } /* Like cp_canonicalize_string_full, but always passes NULL for FINDER. */ -std::string +gdb::unique_xmalloc_ptr<char> cp_canonicalize_string_no_typedefs (const char *string) { return cp_canonicalize_string_full (string, NULL, NULL); } /* Parse STRING and convert it to canonical form. If parsing fails, - or if STRING is already canonical, return the empty string. + or if STRING is already canonical, return nullptr. Otherwise return the canonical form. */ -std::string +gdb::unique_xmalloc_ptr<char> cp_canonicalize_string (const char *string) { std::unique_ptr<demangle_parse_info> info; unsigned int estimated_len; if (cp_already_canonical (string)) - return std::string (); + return nullptr; info = cp_demangled_name_to_comp (string, NULL); if (info == NULL) - return std::string (); + return nullptr; estimated_len = strlen (string) * 2; gdb::unique_xmalloc_ptr<char> us (cp_comp_to_string (info->tree, @@ -575,15 +644,13 @@ { warning (_("internal error: string \"%s\" failed to be canonicalized"), string); - return std::string (); + return nullptr; } - std::string ret (us.get ()); - - if (ret == string) - return std::string (); + if (strcmp (us.get (), string) == 0) + return nullptr; - return ret; + return us; } /* Convert a mangled name to a demangle_component tree. *MEMORY is @@ -1268,18 +1335,18 @@ const char *type_name; int i, prefix_len; - while (TYPE_CODE (type) == TYPE_CODE_PTR + while (type->code () == TYPE_CODE_PTR || TYPE_IS_REFERENCE (type) - || TYPE_CODE (type) == TYPE_CODE_ARRAY - || TYPE_CODE (type) == TYPE_CODE_TYPEDEF) + || type->code () == TYPE_CODE_ARRAY + || type->code () == TYPE_CODE_TYPEDEF) { - if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF) - type = check_typedef(type); + if (type->code () == TYPE_CODE_TYPEDEF) + type = check_typedef (type); else type = TYPE_TARGET_TYPE (type); } - type_name = TYPE_NAME (type); + type_name = type->name (); if (type_name == NULL) return; @@ -1297,7 +1364,7 @@ } /* Check public base type */ - if (TYPE_CODE (type) == TYPE_CODE_STRUCT) + if (type->code () == TYPE_CODE_STRUCT) for (i = 0; i < TYPE_N_BASECLASSES (type); i++) { if (BASETYPE_VIA_PUBLIC (type, i)) @@ -1451,7 +1518,7 @@ rtti_type = check_typedef (SYMBOL_TYPE (rtti_sym)); - switch (TYPE_CODE (rtti_type)) + switch (rtti_type->code ()) { case TYPE_CODE_STRUCT: break; @@ -1548,11 +1615,10 @@ int crash_signal = 0; #ifdef HAVE_WORKING_FORK - scoped_restore restore_segv - = make_scoped_restore (&thread_local_segv_handler, - catch_demangler_crashes - ? gdb_demangle_signal_handler - : nullptr); + scoped_segv_handler_restore restore_segv + (catch_demangler_crashes + ? gdb_demangle_signal_handler + : nullptr); bool core_dump_allowed = gdb_demangle_attempt_core_dump; SIGJMP_BUF jmp_buf; @@ -1609,15 +1675,6 @@ /* See cp-support.h. */ -int -gdb_sniff_from_mangled_name (const char *mangled, char **demangled) -{ - *demangled = gdb_demangle (mangled, DMGL_PARAMS | DMGL_ANSI); - return *demangled != NULL; -} - -/* See cp-support.h. */ - unsigned int cp_search_name_hash (const char *search_name) { @@ -2118,18 +2175,6 @@ #endif /* GDB_SELF_CHECK */ -/* Don't allow just "maintenance cplus". */ - -static void -maint_cplus_command (const char *arg, int from_tty) -{ - printf_unfiltered (_("\"maintenance cplus\" must be followed " - "by the name of a command.\n")); - help_list (maint_cplus_cmd_list, - "maintenance cplus ", - all_commands, gdb_stdout); -} - /* This is a front end for cp_find_first_component, for unit testing. Be careful when using it: see the NOTE above cp_find_first_component. */ @@ -2163,15 +2208,15 @@ cplus_print_vtable (value); } +void _initialize_cp_support (); void -_initialize_cp_support (void) +_initialize_cp_support () { - add_prefix_cmd ("cplus", class_maintenance, - maint_cplus_command, - _("C++ maintenance commands."), - &maint_cplus_cmd_list, - "maintenance cplus ", - 0, &maintenancelist); + add_basic_prefix_cmd ("cplus", class_maintenance, + _("C++ maintenance commands."), + &maint_cplus_cmd_list, + "maintenance cplus ", + 0, &maintenancelist); add_alias_cmd ("cp", "cplus", class_maintenance, 1, &maintenancelist); diff -Nru gdb-9.1/gdb/cp-support.h gdb-10.2/gdb/cp-support.h --- gdb-9.1/gdb/cp-support.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/cp-support.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Helper routines for C++ support in GDB. - Copyright (C) 2002-2020 Free Software Foundation, Inc. + Copyright (C) 2002-2021 Free Software Foundation, Inc. Contributed by MontaVista Software. Namespace support contributed by David Carlton. @@ -77,15 +77,16 @@ /* Functions from cp-support.c. */ -extern std::string cp_canonicalize_string (const char *string); +extern gdb::unique_xmalloc_ptr<char> cp_canonicalize_string + (const char *string); -extern std::string cp_canonicalize_string_no_typedefs (const char *string); +extern gdb::unique_xmalloc_ptr<char> cp_canonicalize_string_no_typedefs + (const char *string); typedef const char *(canonicalization_ftype) (struct type *, void *); -extern std::string cp_canonicalize_string_full (const char *string, - canonicalization_ftype *finder, - void *data); +extern gdb::unique_xmalloc_ptr<char> cp_canonicalize_string_full + (const char *string, canonicalization_ftype *finder, void *data); extern char *cp_class_name_from_physname (const char *physname); @@ -126,8 +127,7 @@ "function" or "bar::function" in all namespaces is possible. */ extern unsigned int cp_search_name_hash (const char *search_name); -/* Implement the "la_get_symbol_name_matcher" language_defn method for - C++. */ +/* Implement the "get_symbol_name_matcher" language_defn method for C++. */ extern symbol_name_matcher_ftype *cp_get_symbol_name_matcher (const lookup_name_info &lookup_name); @@ -190,8 +190,4 @@ char *gdb_demangle (const char *name, int options); -/* Like gdb_demangle, but suitable for use as la_sniff_from_mangled_name. */ - -int gdb_sniff_from_mangled_name (const char *mangled, char **demangled); - #endif /* CP_SUPPORT_H */ diff -Nru gdb-9.1/gdb/cp-valprint.c gdb-10.2/gdb/cp-valprint.c --- gdb-9.1/gdb/cp-valprint.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/cp-valprint.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Support for printing C++ values for GDB, the GNU debugger. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -47,11 +47,8 @@ struct ui_file *, int, const struct value_print_options *); -static void cp_print_value (struct type *, struct type *, - LONGEST, - CORE_ADDR, struct ui_file *, - int, struct value *, - const struct value_print_options *, +static void cp_print_value (struct value *, struct ui_file *, + int, const struct value_print_options *, struct type **); @@ -64,7 +61,7 @@ int cp_is_vtbl_ptr_type (struct type *type) { - const char *type_name = TYPE_NAME (type); + const char *type_name = type->name (); return (type_name != NULL && !strcmp (type_name, vtbl_ptr_name)); } @@ -77,25 +74,25 @@ { /* With older versions of g++, the vtbl field pointed to an array of structures. Nowadays it points directly to the structure. */ - if (TYPE_CODE (type) == TYPE_CODE_PTR) + if (type->code () == TYPE_CODE_PTR) { type = TYPE_TARGET_TYPE (type); - if (TYPE_CODE (type) == TYPE_CODE_ARRAY) + if (type->code () == TYPE_CODE_ARRAY) { type = TYPE_TARGET_TYPE (type); - if (TYPE_CODE (type) == TYPE_CODE_STRUCT /* if not using thunks */ - || TYPE_CODE (type) == TYPE_CODE_PTR) /* if using thunks */ + if (type->code () == TYPE_CODE_STRUCT /* if not using thunks */ + || type->code () == TYPE_CODE_PTR) /* if using thunks */ { /* Virtual functions tables are full of pointers to virtual functions. */ return cp_is_vtbl_ptr_type (type); } } - else if (TYPE_CODE (type) == TYPE_CODE_STRUCT) /* if not using thunks */ + else if (type->code () == TYPE_CODE_STRUCT) /* if not using thunks */ { return cp_is_vtbl_ptr_type (type); } - else if (TYPE_CODE (type) == TYPE_CODE_PTR) /* if using thunks */ + else if (type->code () == TYPE_CODE_PTR) /* if using thunks */ { /* The type name of the thunk pointer is NULL when using dwarf2. We could test for a pointer to a function, but @@ -121,11 +118,8 @@ or zero if called from top level. */ void -cp_print_value_fields (struct type *type, struct type *real_type, - LONGEST offset, - CORE_ADDR address, struct ui_file *stream, - int recurse, struct value *val, - const struct value_print_options *options, +cp_print_value_fields (struct value *val, struct ui_file *stream, + int recurse, const struct value_print_options *options, struct type **dont_print_vb, int dont_print_statmem) { @@ -133,8 +127,8 @@ int fields_seen = 0; static int last_set_recurse = -1; - type = check_typedef (type); - + struct type *type = check_typedef (value_type (val)); + if (recurse == 0) { /* Any object can be left on obstacks only during an unexpected @@ -155,17 +149,14 @@ } fprintf_filtered (stream, "{"); - len = TYPE_NFIELDS (type); + len = type->num_fields (); n_baseclasses = TYPE_N_BASECLASSES (type); /* First, print out baseclasses such that we don't print duplicates of virtual baseclasses. */ if (n_baseclasses > 0) - cp_print_value (type, real_type, - offset, address, stream, - recurse + 1, val, options, - dont_print_vb); + cp_print_value (val, stream, recurse + 1, options, dont_print_vb); /* Second, print out data fields */ @@ -200,7 +191,7 @@ /* If requested, skip printing of static fields. */ if (!options->static_field_print - && field_is_static (&TYPE_FIELD (type, i))) + && field_is_static (&type->field (i))) continue; if (fields_seen) @@ -216,7 +207,7 @@ fprintf_filtered (stream, "\n"); print_spaces_filtered (2 + 2 * recurse, stream); fputs_filtered ("members of ", stream); - fputs_filtered (TYPE_NAME (type), stream); + fputs_filtered (type->name (), stream); fputs_filtered (":", stream); } } @@ -232,14 +223,19 @@ wrap_here (n_spaces (2 + 2 * recurse)); } - annotate_field_begin (TYPE_FIELD_TYPE (type, i)); + annotate_field_begin (type->field (i).type ()); - if (field_is_static (&TYPE_FIELD (type, i))) - fputs_filtered ("static ", stream); - fprintf_symbol_filtered (stream, - TYPE_FIELD_NAME (type, i), - current_language->la_language, - DMGL_PARAMS | DMGL_ANSI); + if (field_is_static (&type->field (i))) + { + fputs_filtered ("static ", stream); + fprintf_symbol_filtered (stream, + TYPE_FIELD_NAME (type, i), + current_language->la_language, + DMGL_PARAMS | DMGL_ANSI); + } + else + fputs_styled (TYPE_FIELD_NAME (type, i), + variable_name_style.style (), stream); annotate_field_name_end (); /* We tweak various options in a few cases below. */ @@ -260,7 +256,7 @@ } annotate_field_value (); - if (!field_is_static (&TYPE_FIELD (type, i)) + if (!field_is_static (&type->field (i)) && TYPE_FIELD_PACKED (type, i)) { struct value *v; @@ -285,7 +281,8 @@ { opts->deref_ref = 0; - v = value_field_bitfield (type, i, valaddr, offset, val); + v = value_field_bitfield (type, i, valaddr, + value_embedded_offset (val), val); common_val_print (v, stream, recurse + 1, opts, current_language); @@ -298,13 +295,13 @@ fputs_styled ("<optimized out or zero length>", metadata_style.style (), stream); } - else if (field_is_static (&TYPE_FIELD (type, i))) + else if (field_is_static (&type->field (i))) { try { struct value *v = value_static_field (type, i); - cp_print_static_field (TYPE_FIELD_TYPE (type, i), + cp_print_static_field (type->field (i).type (), v, stream, recurse + 1, opts); } @@ -317,13 +314,14 @@ } else if (i == vptr_fieldno && type == vptr_basetype) { - int i_offset = offset + TYPE_FIELD_BITPOS (type, i) / 8; - struct type *i_type = TYPE_FIELD_TYPE (type, i); + int i_offset = TYPE_FIELD_BITPOS (type, i) / 8; + struct type *i_type = type->field (i).type (); if (valprint_check_validity (stream, i_type, i_offset, val)) { CORE_ADDR addr; - + + i_offset += value_embedded_offset (val); addr = extract_typed_address (valaddr + i_offset, i_type); print_function_pointer_address (opts, get_type_arch (type), @@ -332,12 +330,10 @@ } else { + struct value *v = value_primitive_field (val, 0, i, type); opts->deref_ref = 0; - val_print (TYPE_FIELD_TYPE (type, i), - offset + TYPE_FIELD_BITPOS (type, i) / 8, - address, - stream, recurse + 1, val, opts, - current_language); + common_val_print (v, stream, recurse + 1, opts, + current_language); } } annotate_field_end (); @@ -360,7 +356,7 @@ { obstack_final_size = obstack_object_size (&dont_print_stat_array_obstack); - + if (obstack_final_size > stat_array_obstack_initial_size) { void *free_to_ptr = @@ -385,69 +381,20 @@ fprintf_filtered (stream, "}"); } -/* Like cp_print_value_fields, but find the runtime type of the object - and pass it as the `real_type' argument to cp_print_value_fields. - This function is a hack to work around the fact that - common_val_print passes the embedded offset to val_print, but not - the enclosing type. */ - -void -cp_print_value_fields_rtti (struct type *type, - const gdb_byte *valaddr, LONGEST offset, - CORE_ADDR address, - struct ui_file *stream, int recurse, - struct value *val, - const struct value_print_options *options, - struct type **dont_print_vb, - int dont_print_statmem) -{ - struct type *real_type = NULL; - - /* We require all bits to be valid in order to attempt a - conversion. */ - if (!value_bits_any_optimized_out (val, - TARGET_CHAR_BIT * offset, - TARGET_CHAR_BIT * TYPE_LENGTH (type))) - { - struct value *value; - int full, using_enc; - LONGEST top; - - /* Ugh, we have to convert back to a value here. */ - value = value_from_contents_and_address (type, valaddr + offset, - address + offset); - type = value_type (value); - /* We don't actually care about most of the result here -- just - the type. We already have the correct offset, due to how - val_print was initially called. */ - real_type = value_rtti_type (value, &full, &top, &using_enc); - } - - if (!real_type) - real_type = type; - - cp_print_value_fields (type, real_type, offset, - address, stream, recurse, val, options, - dont_print_vb, dont_print_statmem); -} - /* Special val_print routine to avoid printing multiple copies of virtual baseclasses. */ static void -cp_print_value (struct type *type, struct type *real_type, - LONGEST offset, - CORE_ADDR address, struct ui_file *stream, - int recurse, struct value *val, - const struct value_print_options *options, +cp_print_value (struct value *val, struct ui_file *stream, + int recurse, const struct value_print_options *options, struct type **dont_print_vb) { + struct type *type = check_typedef (value_type (val)); + CORE_ADDR address = value_address (val); struct type **last_dont_print = (struct type **) obstack_next_free (&dont_print_vb_obstack); struct obstack tmp_obstack = dont_print_vb_obstack; int i, n_baseclasses = TYPE_N_BASECLASSES (type); - LONGEST thisoffset; - struct type *thistype; const gdb_byte *valaddr = value_contents_for_printing (val); if (dont_print_vb == 0) @@ -464,7 +411,7 @@ LONGEST boffset = 0; int skip = 0; struct type *baseclass = check_typedef (TYPE_BASECLASS (type, i)); - const char *basename = TYPE_NAME (baseclass); + const char *basename = baseclass->name (); struct value *base_val = NULL; if (BASETYPE_VIA_VIRTUAL (type, i)) @@ -482,12 +429,11 @@ obstack_ptr_grow (&dont_print_vb_obstack, baseclass); } - thisoffset = offset; - thistype = real_type; - try { - boffset = baseclass_offset (type, i, valaddr, offset, address, val); + boffset = baseclass_offset (type, i, valaddr, + value_embedded_offset (val), + address, val); } catch (const gdb_exception_error &ex) { @@ -505,8 +451,7 @@ clobbered by the user program. Make sure that it still points to a valid memory location. */ - if ((boffset + offset) < 0 - || (boffset + offset) >= TYPE_LENGTH (real_type)) + if (boffset < 0 || boffset >= TYPE_LENGTH (type)) { gdb::byte_vector buf (TYPE_LENGTH (baseclass)); @@ -517,9 +462,7 @@ buf.data (), address + boffset); baseclass = value_type (base_val); - thisoffset = 0; boffset = 0; - thistype = baseclass; } else { @@ -561,22 +504,19 @@ } else { + struct value *baseclass_val = value_primitive_field (val, 0, + i, type); + /* Attempt to run an extension language pretty-printer on the baseclass if possible. */ if (!options->raw) result - = apply_ext_lang_val_pretty_printer (baseclass, - thisoffset + boffset, - value_address (base_val), - stream, recurse, - base_val, options, + = apply_ext_lang_val_pretty_printer (baseclass_val, stream, + recurse, options, current_language); if (!result) - cp_print_value_fields (baseclass, thistype, - thisoffset + boffset, - value_address (base_val), - stream, recurse, base_val, options, + cp_print_value_fields (baseclass_val, stream, recurse, options, ((struct type **) obstack_base (&dont_print_vb_obstack)), 0); @@ -623,10 +563,10 @@ } struct type *real_type = check_typedef (type); - if (TYPE_CODE (real_type) == TYPE_CODE_STRUCT) + if (real_type->code () == TYPE_CODE_STRUCT) { CORE_ADDR *first_dont_print; - CORE_ADDR addr; + CORE_ADDR addr = value_address (val); int i; first_dont_print @@ -636,7 +576,7 @@ while (--i >= 0) { - if (value_address (val) == first_dont_print[i]) + if (addr == first_dont_print[i]) { fputs_styled (_("<same as static member of an already" " seen type>"), @@ -645,17 +585,13 @@ } } - addr = value_address (val); obstack_grow (&dont_print_statmem_obstack, (char *) &addr, sizeof (CORE_ADDR)); - cp_print_value_fields (type, value_enclosing_type (val), - value_embedded_offset (val), addr, - stream, recurse, val, - options, NULL, 1); + cp_print_value_fields (val, stream, recurse, options, NULL, 1); return; } - if (TYPE_CODE (real_type) == TYPE_CODE_ARRAY) + if (real_type->code () == TYPE_CODE_ARRAY) { struct type **first_dont_print; int i; @@ -684,11 +620,7 @@ opts = *options; opts.deref_ref = 0; - val_print (type, - value_embedded_offset (val), - value_address (val), - stream, recurse, val, - &opts, current_language); + common_val_print (val, stream, recurse, &opts, current_language); } /* Find the field in *SELF, or its non-virtual base classes, with @@ -706,7 +638,7 @@ *self_p = check_typedef (*self_p); self = *self_p; - len = TYPE_NFIELDS (self); + len = self->num_fields (); for (i = TYPE_N_BASECLASSES (self); i < len; i++) { @@ -723,11 +655,11 @@ for (i = 0; i < TYPE_N_BASECLASSES (self); i++) { LONGEST bitpos = TYPE_FIELD_BITPOS (self, i); - LONGEST bitsize = 8 * TYPE_LENGTH (TYPE_FIELD_TYPE (self, i)); + LONGEST bitsize = 8 * TYPE_LENGTH (self->field (i).type ()); if (offset >= bitpos && offset < bitpos + bitsize) { - *self_p = TYPE_FIELD_TYPE (self, i); + *self_p = self->field (i).type (); cp_find_class_member (self_p, fieldno, offset - bitpos); return; } @@ -776,21 +708,23 @@ const char *name; fputs_filtered (prefix, stream); - name = TYPE_NAME (self_type); + name = self_type->name (); if (name) fputs_filtered (name, stream); else c_type_print_base (self_type, stream, 0, 0, &type_print_raw_options); fprintf_filtered (stream, "::"); - fputs_filtered (TYPE_FIELD_NAME (self_type, fieldno), stream); + fputs_styled (TYPE_FIELD_NAME (self_type, fieldno), + variable_name_style.style (), stream); } else fprintf_filtered (stream, "%ld", (long) val); } +void _initialize_cp_valprint (); void -_initialize_cp_valprint (void) +_initialize_cp_valprint () { obstack_begin (&dont_print_stat_array_obstack, 32 * sizeof (struct type *)); diff -Nru gdb-9.1/gdb/cris-linux-tdep.c gdb-10.2/gdb/cris-linux-tdep.c --- gdb-9.1/gdb/cris-linux-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/cris-linux-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for GNU/Linux on CRIS processors, for GDB. - Copyright (C) 2001-2020 Free Software Foundation, Inc. + Copyright (C) 2001-2021 Free Software Foundation, Inc. Contributed by Axis Communications AB. Written by Hendrik Ruijter, Stefan Andersson, Orjan Friberg, @@ -47,8 +47,9 @@ } +void _initialize_cris_linux_tdep (); void -_initialize_cris_linux_tdep (void) +_initialize_cris_linux_tdep () { gdbarch_register_osabi (bfd_arch_cris, 0, GDB_OSABI_LINUX, cris_linux_init_abi); diff -Nru gdb-9.1/gdb/cris-tdep.c gdb-10.2/gdb/cris-tdep.c --- gdb-9.1/gdb/cris-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/cris-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target dependent code for CRIS, for GDB, the GNU debugger. - Copyright (C) 2001-2020 Free Software Foundation, Inc. + Copyright (C) 2001-2021 Free Software Foundation, Inc. Contributed by Axis Communications AB. Written by Hendrik Ruijter, Stefan Andersson, and Orjan Friberg. @@ -25,7 +25,7 @@ #include "frame-unwind.h" #include "frame-base.h" #include "trad-frame.h" -#include "dwarf2-frame.h" +#include "dwarf2/frame.h" #include "symtab.h" #include "inferior.h" #include "gdbtypes.h" @@ -37,6 +37,7 @@ #include "osabi.h" #include "arch-utils.h" #include "regcache.h" +#include "regset.h" #include "objfiles.h" @@ -1804,8 +1805,8 @@ struct type *type, struct regcache *regcache, gdb_byte *readbuf, const gdb_byte *writebuf) { - if (TYPE_CODE (type) == TYPE_CODE_STRUCT - || TYPE_CODE (type) == TYPE_CODE_UNION + if (type->code () == TYPE_CODE_STRUCT + || type->code () == TYPE_CODE_UNION || TYPE_LENGTH (type) > 8) /* Structs, unions, and anything larger than 8 bytes (2 registers) goes on the stack. */ @@ -3761,21 +3762,28 @@ /* Unpack a cris_elf_gregset_t into GDB's register cache. */ static void -cris_supply_gregset (struct regcache *regcache, cris_elf_gregset_t *gregsetp) +cris_supply_gregset (const struct regset *regset, struct regcache *regcache, + int regnum, const void *gregs, size_t len) { struct gdbarch *gdbarch = regcache->arch (); struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); int i; - cris_elf_greg_t *regp = *gregsetp; + const cris_elf_greg_t *regp = static_cast<const cris_elf_greg_t *>(gregs); + + if (len != sizeof (cris_elf_gregset_t) + && len != sizeof (crisv32_elf_gregset_t)) + warning (_("wrong size gregset struct in core file")); + gdb_assert (len >= sizeof (crisv32_elf_gregset_t)); /* The kernel dumps all 32 registers as unsigned longs, but supply_register knows about the actual size of each register so that's no problem. */ for (i = 0; i < NUM_GENREGS + NUM_SPECREGS; i++) { - regcache->raw_supply (i, (char *)®p[i]); + if (regnum == -1 || regnum == i) + regcache->raw_supply (i, (char *)®p[i]); } - if (tdep->cris_version == 32) + if (tdep->cris_version == 32 && (regnum == -1 || regnum == ERP_REGNUM)) { /* Needed to set pseudo-register PC for CRISv32. */ /* FIXME: If ERP is in a delay slot at this point then the PC will @@ -3788,49 +3796,27 @@ } } -/* Use a local version of this function to get the correct types for - regsets, until multi-arch core support is ready. */ +static const struct regset cris_regset = { + nullptr, + cris_supply_gregset, + /* We don't need a collect function because we only use this for core files + (via iterate_over_regset_sections). */ + nullptr, + REGSET_VARIABLE_SIZE +}; -static void -fetch_core_registers (struct regcache *regcache, - char *core_reg_sect, unsigned core_reg_size, - int which, CORE_ADDR reg_addr) +static void cris_iterate_over_regset_sections (struct gdbarch *gdbarch, + iterate_over_regset_sections_cb *cb, + void *cb_data, + const struct regcache *regcache) { - cris_elf_gregset_t gregset; - - switch (which) - { - case 0: - if (core_reg_size != sizeof (cris_elf_gregset_t) - && core_reg_size != sizeof (crisv32_elf_gregset_t)) - { - warning (_("wrong size gregset struct in core file")); - } - else - { - memcpy (&gregset, core_reg_sect, sizeof (gregset)); - cris_supply_gregset (regcache, &gregset); - } - - default: - /* We've covered all the kinds of registers we know about here, - so this must be something we wouldn't know what to do with - anyway. Just ignore it. */ - break; - } + cb (".reg", sizeof (crisv32_elf_gregset_t), sizeof (crisv32_elf_gregset_t), + &cris_regset, NULL, cb_data); } -static struct core_fns cris_elf_core_fns = -{ - bfd_target_elf_flavour, /* core_flavour */ - default_check_format, /* check_format */ - default_core_sniffer, /* core_sniffer */ - fetch_core_registers, /* core_read_registers */ - NULL /* next */ -}; - +void _initialize_cris_tdep (); void -_initialize_cris_tdep (void) +_initialize_cris_tdep () { gdbarch_register (bfd_arch_cris, cris_gdbarch_init, cris_dump_tdep); @@ -3867,8 +3853,6 @@ NULL, /* FIXME: i18n: Usage of Dwarf-2 CFI for CRIS is %d. */ &setlist, &showlist); - - deprecated_add_core_fns (&cris_elf_core_fns); } /* Prints out all target specific values. */ @@ -4058,6 +4042,7 @@ set_gdbarch_breakpoint_kind_from_pc (gdbarch, cris_breakpoint_kind_from_pc); set_gdbarch_sw_breakpoint_from_kind (gdbarch, cris_sw_breakpoint_from_kind); + set_gdbarch_iterate_over_regset_sections (gdbarch, cris_iterate_over_regset_sections); if (tdep->cris_dwarf2_cfi == 1) { diff -Nru gdb-9.1/gdb/cris-tdep.h gdb-10.2/gdb/cris-tdep.h --- gdb-9.1/gdb/cris-tdep.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/cris-tdep.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Target dependent code for CRIS, for GDB, the GNU debugger. - Copyright (C) 2001-2020 Free Software Foundation, Inc. + Copyright (C) 2001-2021 Free Software Foundation, Inc. Contributed by Axis Communications AB. Written by Hendrik Ruijter, Stefan Andersson, and Orjan Friberg. diff -Nru gdb-9.1/gdb/csky-linux-tdep.c gdb-10.2/gdb/csky-linux-tdep.c --- gdb-9.1/gdb/csky-linux-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/csky-linux-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for GNU/Linux on CSKY. - Copyright (C) 2012-2020 Free Software Foundation, Inc. + Copyright (C) 2012-2021 Free Software Foundation, Inc. Contributed by C-SKY Microsystems and Mentor Graphics. @@ -255,8 +255,9 @@ &csky_linux_rt_sigreturn_tramp_frame); } +void _initialize_csky_linux_tdep (); void -_initialize_csky_linux_tdep (void) +_initialize_csky_linux_tdep () { gdbarch_register_osabi (bfd_arch_csky, 0, GDB_OSABI_LINUX, csky_linux_init_abi); diff -Nru gdb-9.1/gdb/csky-tdep.c gdb-10.2/gdb/csky-tdep.c --- gdb-9.1/gdb/csky-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/csky-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for the CSKY architecture, for GDB. - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. Contributed by C-SKY Microsystems and Mentor Graphics. @@ -49,7 +49,7 @@ #include "floatformat.h" #include "remote.h" #include "target-descriptions.h" -#include "dwarf2-frame.h" +#include "dwarf2/frame.h" #include "user-regs.h" #include "valprint.h" #include "csky-tdep.h" @@ -267,7 +267,7 @@ init_vector_type (bt->builtin_int8, 16)); TYPE_VECTOR (t) = 1; - TYPE_NAME (t) = "builtin_type_vec128i"; + t->set_name ("builtin_type_vec128i"); return t; } @@ -2240,8 +2240,9 @@ return gdbarch; } +void _initialize_csky_tdep (); void -_initialize_csky_tdep (void) +_initialize_csky_tdep () { register_gdbarch_init (bfd_arch_csky, csky_gdbarch_init); diff -Nru gdb-9.1/gdb/csky-tdep.h gdb-10.2/gdb/csky-tdep.h --- gdb-9.1/gdb/csky-tdep.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/csky-tdep.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for the CSKY architecture, for GDB. - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/c-support.h gdb-10.2/gdb/c-support.h --- gdb-9.1/gdb/c-support.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/c-support.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Helper routines for C support in GDB. - Copyright (C) 2017-2020 Free Software Foundation, Inc. + Copyright (C) 2017-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/ctfread.c gdb-10.2/gdb/ctfread.c --- gdb-9.1/gdb/ctfread.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/ctfread.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Compact ANSI-C Type Format (CTF) support in GDB. - Copyright (C) 2019-2020 Free Software Foundation, Inc. + Copyright (C) 2019-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -45,7 +45,7 @@ The file header stores a magic number and version information, encoding flags, and the byte offset of each of the sections relative to the end of the header itself. If the CTF data has been uniquified against another set of - CTF data, a reference to that data also appears in the the header. This + CTF data, a reference to that data also appears in the header. This reference is the name of the label corresponding to the types uniquified against. @@ -81,20 +81,56 @@ #include "block.h" #include "ctfread.h" #include "psympriv.h" + +#if ENABLE_LIBCTF + #include "ctf.h" #include "ctf-api.h" static const struct objfile_key<htab, htab_deleter> ctf_tid_key; -static const struct objfile_data *ctf_file_key; + +struct ctf_fp_info +{ + explicit ctf_fp_info (ctf_file_t *cfp) : fp (cfp) {} + ~ctf_fp_info (); + ctf_file_t *fp; +}; + +/* Cleanup function for the ctf_file_key data. */ +ctf_fp_info::~ctf_fp_info () +{ + if (!fp) + return; + + ctf_archive_t *arc = ctf_get_arc (fp); + ctf_file_close (fp); + ctf_close (arc); +} + +static const objfile_key<ctf_fp_info> ctf_file_key; /* A CTF context consists of a file pointer and an objfile pointer. */ -typedef struct ctf_context +struct ctf_context { ctf_file_t *fp; struct objfile *of; struct buildsym_compunit *builder; -} ctf_context_t; +}; + +/* A partial symtab, specialized for this module. */ +struct ctf_psymtab : public standard_psymtab +{ + ctf_psymtab (const char *filename, struct objfile *objfile, CORE_ADDR addr) + : standard_psymtab (filename, objfile, addr) + { + } + + void read_symtab (struct objfile *) override; + void expand_psymtab (struct objfile *) override; + + struct ctf_context *context; +}; /* The routines that read and process fields/members of a C struct, union, or enumeration, pass lists of data member fields in an instance of a @@ -111,7 +147,7 @@ std::vector<struct ctf_nextfield> fields; /* Context. */ - ctf_context_t *cur_context; + struct ctf_context *cur_context; /* Parent type. */ struct type *ptype; @@ -128,30 +164,28 @@ /* Local function prototypes */ -static void psymtab_to_symtab (struct partial_symtab *); - static int ctf_add_type_cb (ctf_id_t tid, void *arg); -static struct type *read_array_type (ctf_context_t *ccp, ctf_id_t tid); +static struct type *read_array_type (struct ctf_context *cp, ctf_id_t tid); -static struct type *read_pointer_type (ctf_context_t *ccp, ctf_id_t tid, +static struct type *read_pointer_type (struct ctf_context *cp, ctf_id_t tid, ctf_id_t btid); -static struct type *read_structure_type (ctf_context_t *ccp, ctf_id_t tid); +static struct type *read_structure_type (struct ctf_context *cp, ctf_id_t tid); -static struct type *read_enum_type (ctf_context_t *ccp, ctf_id_t tid); +static struct type *read_enum_type (struct ctf_context *cp, ctf_id_t tid); -static struct type *read_typedef_type (ctf_context_t *ccp, ctf_id_t tid, +static struct type *read_typedef_type (struct ctf_context *cp, ctf_id_t tid, ctf_id_t btid, const char *name); -static struct type *read_type_record (ctf_context_t *ccp, ctf_id_t tid); +static struct type *read_type_record (struct ctf_context *cp, ctf_id_t tid); -static void process_structure_type (ctf_context_t *ccp, ctf_id_t tid); +static void process_structure_type (struct ctf_context *cp, ctf_id_t tid); -static void process_struct_members (ctf_context_t *ccp, ctf_id_t tid, +static void process_struct_members (struct ctf_context *cp, ctf_id_t tid, struct type *type); -static struct symbol *new_symbol (ctf_context_t *ccp, struct type *type, +static struct symbol *new_symbol (struct ctf_context *cp, struct type *type, ctf_id_t tid); struct ctf_tid_and_type @@ -277,15 +311,15 @@ return; /* Record the field count, allocate space for the array of fields. */ - TYPE_NFIELDS (type) = nfields; - TYPE_FIELDS (type) - = (struct field *) TYPE_ZALLOC (type, sizeof (struct field) * nfields); + type->set_num_fields (nfields); + type->set_fields + ((struct field *) TYPE_ZALLOC (type, sizeof (struct field) * nfields)); /* Copy the saved-up fields into the field vector. */ for (int i = 0; i < nfields; ++i) { struct ctf_nextfield &field = fip->fields[i]; - TYPE_FIELD (type, i) = field.field; + type->field (i) = field.field; } } @@ -299,7 +333,7 @@ const char *name, const char *name_hint) { - struct gdbarch *gdbarch = get_objfile_arch (objfile); + struct gdbarch *gdbarch = objfile->arch (); const struct floatformat **format; struct type *type; @@ -323,7 +357,7 @@ void *arg) { struct ctf_field_info *fip = (struct ctf_field_info *) arg; - ctf_context_t *ccp = fip->cur_context; + struct ctf_context *ccp = fip->cur_context; struct ctf_nextfield new_field; struct field *fp; struct type *t; @@ -348,7 +382,7 @@ if (kind == CTF_K_STRUCT || kind == CTF_K_UNION) process_struct_members (ccp, tid, t); - FIELD_TYPE (*fp) = t; + fp->set_type (t); SET_FIELD_BITPOS (*fp, offset / TARGET_CHAR_BIT); FIELD_BITSIZE (*fp) = get_bitsize (ccp->fp, tid, kind); @@ -366,21 +400,21 @@ struct ctf_field_info *fip = (struct ctf_field_info *) arg; struct ctf_nextfield new_field; struct field *fp; - ctf_context_t *ccp = fip->cur_context; + struct ctf_context *ccp = fip->cur_context; fp = &new_field.field; FIELD_NAME (*fp) = name; - FIELD_TYPE (*fp) = NULL; + fp->set_type (NULL); SET_FIELD_ENUMVAL (*fp, enum_value); FIELD_BITSIZE (*fp) = 0; if (name != NULL) { - struct symbol *sym = allocate_symbol (ccp->of); + struct symbol *sym = new (&ccp->of->objfile_obstack) symbol; OBJSTAT (ccp->of, n_syms++); - SYMBOL_SET_LANGUAGE (sym, language_c, &ccp->of->objfile_obstack); - SYMBOL_SET_NAMES (sym, name, false, ccp->of); + sym->set_language (language_c, &ccp->of->objfile_obstack); + sym->compute_and_set_names (name, false, ccp->of->per_bfd); SYMBOL_ACLASS_INDEX (sym) = LOC_CONST; SYMBOL_DOMAIN (sym) = VAR_DOMAIN; SYMBOL_TYPE (sym) = fip->ptype; @@ -396,7 +430,7 @@ domain from TID's kind, and its type from TYPE. */ static struct symbol * -new_symbol (ctf_context_t *ccp, struct type *type, ctf_id_t tid) +new_symbol (struct ctf_context *ccp, struct type *type, ctf_id_t tid) { struct objfile *objfile = ccp->of; ctf_file_t *fp = ccp->fp; @@ -405,11 +439,11 @@ gdb::unique_xmalloc_ptr<char> name (ctf_type_aname_raw (fp, tid)); if (name != NULL) { - sym = allocate_symbol (objfile); + sym = new (&objfile->objfile_obstack) symbol; OBJSTAT (objfile, n_syms++); - SYMBOL_SET_LANGUAGE (sym, language_c, &objfile->objfile_obstack); - SYMBOL_SET_NAMES (sym, name.get (), true, objfile); + sym->set_language (language_c, &objfile->objfile_obstack); + sym->compute_and_set_names (name.get (), true, objfile->per_bfd); SYMBOL_DOMAIN (sym) = VAR_DOMAIN; SYMBOL_ACLASS_INDEX (sym) = LOC_OPTIMIZED_OUT; @@ -429,7 +463,7 @@ SYMBOL_ACLASS_INDEX (sym) = LOC_STATIC; break; case CTF_K_CONST: - if (TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_VOID) + if (SYMBOL_TYPE (sym)->code () == TYPE_CODE_VOID) SYMBOL_TYPE (sym) = objfile_type (objfile)->builtin_int; break; case CTF_K_TYPEDEF: @@ -459,7 +493,7 @@ and create the symbol for it. */ static struct type * -read_base_type (ctf_context_t *ccp, ctf_id_t tid) +read_base_type (struct ctf_context *ccp, ctf_id_t tid) { struct objfile *of = ccp->of; ctf_file_t *fp = ccp->fp; @@ -490,7 +524,7 @@ if (kind == CTF_K_INTEGER) { uint32_t issigned, ischar, isbool; - struct gdbarch *gdbarch = get_objfile_arch (of); + struct gdbarch *gdbarch = of->arch (); issigned = cet.cte_format & CTF_INT_SIGNED; ischar = cet.cte_format & CTF_INT_CHAR; @@ -522,7 +556,7 @@ { struct type *t = ctf_init_float_type (of, cet.cte_bits / 2, NULL, name); - type = init_complex_type (of, name, t); + type = init_complex_type (name, t); } } else @@ -538,7 +572,7 @@ } static void -process_base_type (ctf_context_t *ccp, ctf_id_t tid) +process_base_type (struct ctf_context *ccp, ctf_id_t tid) { struct type *type; @@ -554,7 +588,7 @@ (assuming the type has a name). */ static struct type * -read_structure_type (ctf_context_t *ccp, ctf_id_t tid) +read_structure_type (struct ctf_context *ccp, ctf_id_t tid) { struct objfile *of = ccp->of; ctf_file_t *fp = ccp->fp; @@ -565,13 +599,13 @@ gdb::unique_xmalloc_ptr<char> name (ctf_type_aname_raw (fp, tid)); if (name != NULL && strlen (name.get() ) != 0) - TYPE_NAME (type) = obstack_strdup (&of->objfile_obstack, name.get ()); + type->set_name (obstack_strdup (&of->objfile_obstack, name.get ())); kind = ctf_type_kind (fp, tid); if (kind == CTF_K_UNION) - TYPE_CODE (type) = TYPE_CODE_UNION; + type->set_code (TYPE_CODE_UNION); else - TYPE_CODE (type) = TYPE_CODE_STRUCT; + type->set_code (TYPE_CODE_STRUCT); TYPE_LENGTH (type) = ctf_type_size (fp, tid); set_type_align (type, ctf_type_align (fp, tid)); @@ -583,7 +617,7 @@ and create the symbol for it. */ static void -process_struct_members (ctf_context_t *ccp, +process_struct_members (struct ctf_context *ccp, ctf_id_t tid, struct type *type) { @@ -601,7 +635,7 @@ } static void -process_structure_type (ctf_context_t *ccp, ctf_id_t tid) +process_structure_type (struct ctf_context *ccp, ctf_id_t tid) { struct type *type; @@ -612,7 +646,7 @@ /* Create a function type for TID and set its return type. */ static struct type * -read_func_kind_type (ctf_context_t *ccp, ctf_id_t tid) +read_func_kind_type (struct ctf_context *ccp, ctf_id_t tid) { struct objfile *of = ccp->of; ctf_file_t *fp = ccp->fp; @@ -623,9 +657,9 @@ gdb::unique_xmalloc_ptr<char> name (ctf_type_aname_raw (fp, tid)); if (name != NULL && strlen (name.get ()) != 0) - TYPE_NAME (type) = obstack_strdup (&of->objfile_obstack, name.get ()); + type->set_name (obstack_strdup (&of->objfile_obstack, name.get ())); - TYPE_CODE (type) = TYPE_CODE_FUNC; + type->set_code (TYPE_CODE_FUNC); ctf_func_type_info (fp, tid, &cfi); rettype = get_tid_type (of, cfi.ctc_return); TYPE_TARGET_TYPE (type) = rettype; @@ -638,7 +672,7 @@ enumeration, and create the symbol for the enumeration type. */ static struct type * -read_enum_type (ctf_context_t *ccp, ctf_id_t tid) +read_enum_type (struct ctf_context *ccp, ctf_id_t tid) { struct objfile *of = ccp->of; ctf_file_t *fp = ccp->fp; @@ -649,9 +683,9 @@ gdb::unique_xmalloc_ptr<char> name (ctf_type_aname_raw (fp, tid)); if (name != NULL && strlen (name.get ()) != 0) - TYPE_NAME (type) = obstack_strdup (&of->objfile_obstack, name.get ()); + type->set_name (obstack_strdup (&of->objfile_obstack, name.get ())); - TYPE_CODE (type) = TYPE_CODE_ENUM; + type->set_code (TYPE_CODE_ENUM); TYPE_LENGTH (type) = ctf_type_size (fp, tid); ctf_func_type_info (fp, tid, &fi); target_type = get_tid_type (of, fi.ctc_return); @@ -662,7 +696,7 @@ } static void -process_enum_type (ctf_context_t *ccp, ctf_id_t tid) +process_enum_type (struct ctf_context *ccp, ctf_id_t tid) { struct type *type; struct ctf_field_info fi; @@ -684,7 +718,7 @@ /* Add given cv-qualifiers CNST+VOLTL to the BASE_TYPE of array TID. */ static struct type * -add_array_cv_type (ctf_context_t *ccp, +add_array_cv_type (struct ctf_context *ccp, ctf_id_t tid, struct type *base_type, int cnst, @@ -695,7 +729,7 @@ base_type = copy_type (base_type); inner_array = base_type; - while (TYPE_CODE (TYPE_TARGET_TYPE (inner_array)) == TYPE_CODE_ARRAY) + while (TYPE_TARGET_TYPE (inner_array)->code () == TYPE_CODE_ARRAY) { TYPE_TARGET_TYPE (inner_array) = copy_type (TYPE_TARGET_TYPE (inner_array)); @@ -713,7 +747,7 @@ /* Read all information from a TID of CTF_K_ARRAY. */ static struct type * -read_array_type (ctf_context_t *ccp, ctf_id_t tid) +read_array_type (struct ctf_context *ccp, ctf_id_t tid) { struct objfile *objfile = ccp->of; ctf_file_t *fp = ccp->fp; @@ -740,7 +774,7 @@ type = create_array_type (NULL, element_type, range_type); if (ar.ctr_nelems <= 1) /* Check if undefined upper bound. */ { - TYPE_HIGH_BOUND_KIND (range_type) = PROP_UNDEFINED; + range_type->bounds ()->high.set_undefined (); TYPE_LENGTH (type) = 0; TYPE_TARGET_STUB (type) = 1; } @@ -755,7 +789,7 @@ /* Read TID of kind CTF_K_CONST with base type BTID. */ static struct type * -read_const_type (ctf_context_t *ccp, ctf_id_t tid, ctf_id_t btid) +read_const_type (struct ctf_context *ccp, ctf_id_t tid, ctf_id_t btid) { struct objfile *objfile = ccp->of; struct type *base_type, *cv_type; @@ -778,7 +812,7 @@ /* Read TID of kind CTF_K_VOLATILE with base type BTID. */ static struct type * -read_volatile_type (ctf_context_t *ccp, ctf_id_t tid, ctf_id_t btid) +read_volatile_type (struct ctf_context *ccp, ctf_id_t tid, ctf_id_t btid) { struct objfile *objfile = ccp->of; ctf_file_t *fp = ccp->fp; @@ -805,7 +839,7 @@ /* Read TID of kind CTF_K_RESTRICT with base type BTID. */ static struct type * -read_restrict_type (ctf_context_t *ccp, ctf_id_t tid, ctf_id_t btid) +read_restrict_type (struct ctf_context *ccp, ctf_id_t tid, ctf_id_t btid) { struct objfile *objfile = ccp->of; struct type *base_type, *cv_type; @@ -828,7 +862,7 @@ /* Read TID of kind CTF_K_TYPEDEF with its NAME and base type BTID. */ static struct type * -read_typedef_type (ctf_context_t *ccp, ctf_id_t tid, +read_typedef_type (struct ctf_context *ccp, ctf_id_t tid, ctf_id_t btid, const char *name) { struct objfile *objfile = ccp->of; @@ -850,7 +884,7 @@ /* Read TID of kind CTF_K_POINTER with base type BTID. */ static struct type * -read_pointer_type (ctf_context_t *ccp, ctf_id_t tid, ctf_id_t btid) +read_pointer_type (struct ctf_context *ccp, ctf_id_t tid, ctf_id_t btid) { struct objfile *of = ccp->of; struct type *target_type, *type; @@ -875,7 +909,7 @@ /* Read information associated with type TID. */ static struct type * -read_type_record (ctf_context_t *ccp, ctf_id_t tid) +read_type_record (struct ctf_context *ccp, ctf_id_t tid) { ctf_file_t *fp = ccp->fp; uint32_t kind; @@ -939,7 +973,7 @@ static int ctf_add_type_cb (ctf_id_t tid, void *arg) { - ctf_context_t *ccp = (ctf_context_t *) arg; + struct ctf_context *ccp = (struct ctf_context *) arg; struct type *type; uint32_t kind; @@ -1004,7 +1038,7 @@ static int ctf_add_var_cb (const char *name, ctf_id_t id, void *arg) { - ctf_context_t *ccp = (ctf_context_t *) arg; + struct ctf_context *ccp = (struct ctf_context *) arg; struct symbol *sym = NULL; struct type *type; uint32_t kind; @@ -1029,7 +1063,7 @@ if (type) { sym = new_symbol (ccp, type, id); - SYMBOL_SET_NAMES (sym, name, false, ccp->of); + sym->compute_and_set_names (name, false, ccp->of->per_bfd); } break; case CTF_K_STRUCT: @@ -1040,12 +1074,12 @@ complaint (_("ctf_add_var_cb: %s has NO type (%ld)"), name, id); type = objfile_type (ccp->of)->builtin_error; } - sym = allocate_symbol (ccp->of); + sym = new (&ccp->of->objfile_obstack) symbol; OBJSTAT (ccp->of, n_syms++); SYMBOL_TYPE (sym) = type; SYMBOL_DOMAIN (sym) = VAR_DOMAIN; SYMBOL_ACLASS_INDEX (sym) = LOC_OPTIMIZED_OUT; - SYMBOL_SET_NAMES (sym, name, false, ccp->of); + sym->compute_and_set_names (name, false, ccp->of->per_bfd); add_symbol_to_list (sym, ccp->builder->get_global_symbols ()); break; default: @@ -1062,7 +1096,7 @@ /* Add an ELF STT_OBJ symbol with index IDX to the symbol table. */ static struct symbol * -add_stt_obj (ctf_context_t *ccp, unsigned long idx) +add_stt_obj (struct ctf_context *ccp, unsigned long idx) { struct symbol *sym; struct type *type; @@ -1083,7 +1117,7 @@ /* Add an ELF STT_FUNC symbol with index IDX to the symbol table. */ static struct symbol * -add_stt_func (ctf_context_t *ccp, unsigned long idx) +add_stt_func (struct ctf_context *ccp, unsigned long idx) { struct type *ftype, *atyp, *rettyp; struct symbol *sym; @@ -1108,12 +1142,12 @@ ftype = get_tid_type (ccp->of, tid); if (finfo.ctc_flags & CTF_FUNC_VARARG) TYPE_VARARGS (ftype) = 1; - TYPE_NFIELDS (ftype) = argc; + ftype->set_num_fields (argc); /* If argc is 0, it has a "void" type. */ if (argc != 0) - TYPE_FIELDS (ftype) - = (struct field *) TYPE_ZALLOC (ftype, argc * sizeof (struct field)); + ftype->set_fields + ((struct field *) TYPE_ZALLOC (ftype, argc * sizeof (struct field))); /* TYPE_FIELD_TYPE must never be NULL. Fill it with void_type, if failed to find the argument type. */ @@ -1121,9 +1155,9 @@ { atyp = get_tid_type (ccp->of, argv[iparam]); if (atyp) - TYPE_FIELD_TYPE (ftype, iparam) = atyp; + ftype->field (iparam).set_type (atyp); else - TYPE_FIELD_TYPE (ftype, iparam) = void_type; + ftype->field (iparam).set_type (void_type); } sym = new_symbol (ccp, ftype, tid); @@ -1141,34 +1175,23 @@ static CORE_ADDR get_objfile_text_range (struct objfile *of, int *tsize) { - CORE_ADDR text_base; bfd *abfd = of->obfd; const asection *codes; codes = bfd_get_section_by_name (abfd, ".text"); - if (codes == NULL) - { - text_base = 0; - *tsize = 0; - } - else - { - text_base = bfd_section_vma (codes); - *tsize = codes->size; - } - - return text_base; + *tsize = codes ? bfd_section_size (codes) : 0; + return of->text_section_offset (); } /* Start a symtab for OBJFILE in CTF format. */ static void -ctf_start_symtab (struct partial_symtab *pst, +ctf_start_symtab (ctf_psymtab *pst, struct objfile *of, CORE_ADDR text_offset) { - ctf_context_t *ccp; + struct ctf_context *ccp; - ccp = (ctf_context_t *) pst->read_symtab_private; + ccp = pst->context; ccp->builder = new buildsym_compunit (of, of->original_name, NULL, language_c, text_offset); @@ -1180,12 +1203,12 @@ the .text section number. */ static struct compunit_symtab * -ctf_end_symtab (struct partial_symtab *pst, +ctf_end_symtab (ctf_psymtab *pst, CORE_ADDR end_addr, int section) { - ctf_context_t *ccp; + struct ctf_context *ccp; - ccp = (ctf_context_t *) pst->read_symtab_private; + ccp = pst->context; struct compunit_symtab *result = ccp->builder->end_symtab (end_addr, section); delete ccp->builder; @@ -1195,15 +1218,15 @@ /* Read in full symbols for PST, and anything it depends on. */ -static void -psymtab_to_symtab (struct partial_symtab *pst) +void +ctf_psymtab::expand_psymtab (struct objfile *objfile) { struct symbol *sym; - ctf_context_t *ccp; + struct ctf_context *ccp; - gdb_assert (!pst->readin); + gdb_assert (!readin); - ccp = (ctf_context_t *) pst->read_symtab_private; + ccp = context; /* Iterate over entries in data types section. */ if (ctf_type_iter (ccp->fp, ctf_add_type_cb, ccp) == CTF_ERR) @@ -1233,37 +1256,37 @@ set_symbol_address (ccp->of, sym, sym->linkage_name ()); } - pst->readin = 1; + readin = true; } /* Expand partial symbol table PST into a full symbol table. PST is not NULL. */ -static void -ctf_read_symtab (struct partial_symtab *pst, struct objfile *objfile) +void +ctf_psymtab::read_symtab (struct objfile *objfile) { - if (pst->readin) - warning (_("bug: psymtab for %s is already read in."), pst->filename); + if (readin) + warning (_("bug: psymtab for %s is already read in."), filename); else { if (info_verbose) { - printf_filtered (_("Reading in CTF data for %s..."), pst->filename); + printf_filtered (_("Reading in CTF data for %s..."), filename); gdb_flush (gdb_stdout); } /* Start a symtab. */ - CORE_ADDR text_offset; /* Start of text segment. */ + CORE_ADDR offset; /* Start of text segment. */ int tsize; - text_offset = get_objfile_text_range (objfile, &tsize); - ctf_start_symtab (pst, objfile, text_offset); - psymtab_to_symtab (pst); - - pst->set_text_low (text_offset); - pst->set_text_high (text_offset + tsize); - pst->compunit_symtab = ctf_end_symtab (pst, text_offset + tsize, - SECT_OFF_TEXT (objfile)); + offset = get_objfile_text_range (objfile, &tsize); + ctf_start_symtab (this, objfile, offset); + expand_psymtab (objfile); + + set_text_low (offset); + set_text_high (offset + tsize); + compunit_symtab = ctf_end_symtab (this, offset + tsize, + SECT_OFF_TEXT (objfile)); /* Finish up the debug error message. */ if (info_verbose) @@ -1271,17 +1294,6 @@ } } -/* Cleanup function for the ctf_file_key data. */ - -static void -ctf_close_objfile (struct objfile *of, void *datum) -{ - ctf_file_t *fp = static_cast<ctf_file_t *> (datum); - ctf_archive_t *arc = ctf_get_arc (fp); - ctf_file_close (fp); - ctf_close (arc); -} - /* Allocate a new partial_symtab NAME. Each source file that has not been fully read in is represented by @@ -1294,21 +1306,20 @@ partial_symtab remains around. They are allocated on an obstack, objfile_obstack. */ -static struct partial_symtab * +static ctf_psymtab * create_partial_symtab (const char *name, ctf_file_t *cfp, struct objfile *objfile) { - struct partial_symtab *pst; - ctf_context_t *ccx; + ctf_psymtab *pst; + struct ctf_context *ccx; - pst = start_psymtab_common (objfile, name, 0); + pst = new ctf_psymtab (name, objfile, 0); - ccx = XOBNEW (&objfile->objfile_obstack, ctf_context_t); + ccx = XOBNEW (&objfile->objfile_obstack, struct ctf_context); ccx->fp = cfp; ccx->of = objfile; - pst->read_symtab_private = (void *) ccx; - pst->read_symtab = ctf_read_symtab; + pst->context = ccx; return pst; } @@ -1318,11 +1329,11 @@ static int ctf_psymtab_type_cb (ctf_id_t tid, void *arg) { - ctf_context_t *ccp; + struct ctf_context *ccp; uint32_t kind; short section = -1; - ccp = (ctf_context_t *) arg; + ccp = (struct ctf_context *) arg; gdb::unique_xmalloc_ptr<char> name (ctf_type_aname_raw (ccp->fp, tid)); if (name == NULL || strlen (name.get ()) == 0) return 0; @@ -1378,7 +1389,7 @@ static int ctf_psymtab_var_cb (const char *name, ctf_id_t id, void *arg) { - ctf_context_t *ccp = (ctf_context_t *) arg; + struct ctf_context *ccp = (struct ctf_context *) arg; add_psymbol_to_list (name, true, VAR_DOMAIN, LOC_STATIC, -1, @@ -1393,10 +1404,10 @@ static void scan_partial_symbols (ctf_file_t *cfp, struct objfile *of) { - ctf_context_t ccx; + struct ctf_context ccx; bfd *abfd = of->obfd; const char *name = bfd_get_filename (abfd); - struct partial_symtab *pst = create_partial_symtab (name, cfp, of); + ctf_psymtab *pst = create_partial_symtab (name, cfp, of); ccx.fp = cfp; ccx.of = of; @@ -1473,14 +1484,17 @@ if (fp == NULL) error (_("ctf_arc_open_by_name failed on %s - %s"), bfd_get_filename (abfd), ctf_errmsg (err)); - set_objfile_data (of, ctf_file_key, fp); + ctf_file_key.emplace (of, fp); scan_partial_symbols (fp, of); } +#else + void -_initialize_ctfread (void) +elfctf_build_psymtabs (struct objfile *of) { - ctf_file_key - = register_objfile_data_with_cleanup (NULL, ctf_close_objfile); + /* Nothing to do if CTF is disabled. */ } + +#endif /* ENABLE_LIBCTF */ diff -Nru gdb-9.1/gdb/ctfread.h gdb-10.2/gdb/ctfread.h --- gdb-9.1/gdb/ctfread.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/ctfread.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* CTF debugging format support for GDB. - Copyright (C) 2019-2020 Free Software Foundation, Inc. + Copyright (C) 2019-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/c-typeprint.c gdb-10.2/gdb/c-typeprint.c --- gdb-9.1/gdb/c-typeprint.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/c-typeprint.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Support for printing C and C++ types for GDB, the GNU debugger. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -58,7 +58,7 @@ /* Print "const", "volatile", or address space modifiers. */ static void c_type_print_modifier (struct type *, struct ui_file *, - int, int); + int, int, enum language); static void c_type_print_base_1 (struct type *type, struct ui_file *stream, int show, int level, enum language language, @@ -84,14 +84,14 @@ const struct type_print_options *flags, struct ui_file *stream) { - std::string s; + gdb::unique_xmalloc_ptr<char> s; if (!flags->raw) s = cp_canonicalize_string_full (name, find_typedef_for_canonicalize, (void *) flags); - fputs_filtered (!s.empty () ? s.c_str () : name, stream); + fputs_filtered (s != nullptr ? s.get () : name, stream); } @@ -116,7 +116,7 @@ type = check_typedef (type); local_name = typedef_hash_table::find_typedef (flags, type); - code = TYPE_CODE (type); + code = type->code (); if (local_name != NULL) { fputs_filtered (local_name, stream); @@ -129,7 +129,7 @@ if ((varstring != NULL && *varstring != '\0') /* Need a space if going to print stars or brackets; but not if we will print just a type name. */ - || ((show > 0 || TYPE_NAME (type) == 0) + || ((show > 0 || type->name () == 0) && (code == TYPE_CODE_PTR || code == TYPE_CODE_FUNC || code == TYPE_CODE_METHOD || (code == TYPE_CODE_ARRAY @@ -148,7 +148,7 @@ if (code == TYPE_CODE_FUNC || code == TYPE_CODE_METHOD) fputs_styled (varstring, function_name_style.style (), stream); else - fputs_filtered (varstring, stream); + fputs_styled (varstring, variable_name_style.style (), stream); /* For demangled function names, we have the arglist as part of the name, so don't print an additional pair of ()'s. */ @@ -206,10 +206,10 @@ type = check_typedef (type); fprintf_filtered (stream, "typedef "); type_print (type, "", stream, -1); - if (TYPE_NAME ((SYMBOL_TYPE (new_symbol))) == 0 - || strcmp (TYPE_NAME ((SYMBOL_TYPE (new_symbol))), + if ((SYMBOL_TYPE (new_symbol))->name () == 0 + || strcmp ((SYMBOL_TYPE (new_symbol))->name (), new_symbol->linkage_name ()) != 0 - || TYPE_CODE (SYMBOL_TYPE (new_symbol)) == TYPE_CODE_TYPEDEF) + || SYMBOL_TYPE (new_symbol)->code () == TYPE_CODE_TYPEDEF) fprintf_filtered (stream, " %s", new_symbol->print_name ()); fprintf_filtered (stream, ";"); } @@ -256,7 +256,7 @@ ? "public" : (TYPE_FIELD_PROTECTED (type, i) ? "protected" : "private"), BASETYPE_VIA_VIRTUAL (type, i) ? " virtual" : ""); - name = TYPE_NAME (TYPE_BASECLASS (type, i)); + name = TYPE_BASECLASS (type, i)->name (); if (name) print_name_maybe_canonical (name, flags, stream); else @@ -277,8 +277,8 @@ enum language language, const struct type_print_options *flags) { - struct field *args = TYPE_FIELDS (mtype); - int nargs = TYPE_NFIELDS (mtype); + struct field *args = mtype->fields (); + int nargs = mtype->num_fields (); int varargs = TYPE_VARARGS (mtype); int i; @@ -302,7 +302,7 @@ if (FIELD_ARTIFICIAL (arg)) continue; - c_print_type (arg.type, "", stream, 0, 0, flags); + c_print_type (arg.type (), "", stream, 0, 0, flags); if (i == nargs && varargs) fprintf_filtered (stream, ", ..."); @@ -327,8 +327,8 @@ struct type *domain; gdb_assert (nargs > 0); - gdb_assert (TYPE_CODE (args[0].type) == TYPE_CODE_PTR); - domain = TYPE_TARGET_TYPE (args[0].type); + gdb_assert (args[0].type ()->code () == TYPE_CODE_PTR); + domain = TYPE_TARGET_TYPE (args[0].type ()); if (TYPE_CONST (domain)) fprintf_filtered (stream, " const"); @@ -337,7 +337,9 @@ fprintf_filtered (stream, " volatile"); if (TYPE_RESTRICT (domain)) - fprintf_filtered (stream, " restrict"); + fprintf_filtered (stream, (language == language_cplus + ? " __restrict__" + : " restrict")); if (TYPE_ATOMIC (domain)) fprintf_filtered (stream, " _Atomic"); @@ -371,25 +373,25 @@ if (type == 0) return; - if (TYPE_NAME (type) && show <= 0) + if (type->name () && show <= 0) return; QUIT; - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_PTR: c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type), stream, show, 1, 1, language, flags, podata); fprintf_filtered (stream, "*"); - c_type_print_modifier (type, stream, 1, need_post_space); + c_type_print_modifier (type, stream, 1, need_post_space, language); break; case TYPE_CODE_MEMBERPTR: c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type), stream, show, 0, 0, language, flags, podata); - name = TYPE_NAME (TYPE_SELF_TYPE (type)); + name = TYPE_SELF_TYPE (type)->name (); if (name) print_name_maybe_canonical (name, flags, stream); else @@ -404,7 +406,7 @@ stream, show, 0, 0, language, flags, podata); fprintf_filtered (stream, "("); - name = TYPE_NAME (TYPE_SELF_TYPE (type)); + name = TYPE_SELF_TYPE (type)->name (); if (name) print_name_maybe_canonical (name, flags, stream); else @@ -419,8 +421,8 @@ c_type_print_varspec_prefix (TYPE_TARGET_TYPE (type), stream, show, 1, 0, language, flags, podata); - fprintf_filtered (stream, TYPE_CODE(type) == TYPE_CODE_REF ? "&" : "&&"); - c_type_print_modifier (type, stream, 1, need_post_space); + fprintf_filtered (stream, type->code () == TYPE_CODE_REF ? "&" : "&&"); + c_type_print_modifier (type, stream, 1, need_post_space, language); break; case TYPE_CODE_METHOD: @@ -481,7 +483,8 @@ static void c_type_print_modifier (struct type *type, struct ui_file *stream, - int need_pre_space, int need_post_space) + int need_pre_space, int need_post_space, + enum language language) { int did_print_modifier = 0; const char *address_space_id; @@ -509,7 +512,9 @@ { if (did_print_modifier || need_pre_space) fprintf_filtered (stream, " "); - fprintf_filtered (stream, "restrict"); + fprintf_filtered (stream, (language == language_cplus + ? "__restrict__" + : "restrict")); did_print_modifier = 1; } @@ -555,7 +560,7 @@ fprintf_filtered (stream, "("); - for (i = 0; i < TYPE_NFIELDS (type); i++) + for (i = 0; i < type->num_fields (); i++) { struct type *param_type; @@ -568,7 +573,7 @@ wrap_here (" "); } - param_type = TYPE_FIELD_TYPE (type, i); + param_type = type->field (i).type (); if (language == language_cplus && linkage_name) { @@ -757,12 +762,12 @@ if (type == 0) return; - if (TYPE_NAME (type) && show <= 0) + if (type->name () && show <= 0) return; QUIT; - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_ARRAY: { @@ -775,8 +780,8 @@ fprintf_filtered (stream, (is_vector ? " __attribute__ ((vector_size(" : "[")); /* Bounds are not yet resolved, print a bounds placeholder instead. */ - if (TYPE_HIGH_BOUND_KIND (TYPE_INDEX_TYPE (type)) == PROP_LOCEXPR - || TYPE_HIGH_BOUND_KIND (TYPE_INDEX_TYPE (type)) == PROP_LOCLIST) + if (type->bounds ()->high.kind () == PROP_LOCEXPR + || type->bounds ()->high.kind () == PROP_LOCLIST) fprintf_filtered (stream, "variable length"); else if (get_array_bounds (type, &low_bound, &high_bound)) fprintf_filtered (stream, "%s", @@ -960,7 +965,7 @@ if (TYPE_DECLARED_CLASS (type)) { QUIT; - for (int i = TYPE_N_BASECLASSES (type); i < TYPE_NFIELDS (type); i++) + for (int i = TYPE_N_BASECLASSES (type); i < type->num_fields (); i++) if (!TYPE_FIELD_PRIVATE (type, i)) return true; QUIT; @@ -977,7 +982,7 @@ else { QUIT; - for (int i = TYPE_N_BASECLASSES (type); i < TYPE_NFIELDS (type); i++) + for (int i = TYPE_N_BASECLASSES (type); i < type->num_fields (); i++) if (TYPE_FIELD_PRIVATE (type, i) || TYPE_FIELD_PROTECTED (type, i)) return true; QUIT; @@ -1050,8 +1055,8 @@ hash_holder.reset (local_flags.local_typedefs); } - c_type_print_modifier (type, stream, 0, 1); - if (TYPE_CODE (type) == TYPE_CODE_UNION) + c_type_print_modifier (type, stream, 0, 1, language); + if (type->code () == TYPE_CODE_UNION) fprintf_filtered (stream, "union "); else if (TYPE_DECLARED_CLASS (type)) fprintf_filtered (stream, "class "); @@ -1062,13 +1067,13 @@ spurious "{unnamed struct}"/"{unnamed union}"/"{unnamed enum}" tag for unnamed struct/union/enum's, which we don't want to print. */ - if (TYPE_NAME (type) != NULL - && !startswith (TYPE_NAME (type), "{unnamed")) + if (type->name () != NULL + && !startswith (type->name (), "{unnamed")) { /* When printing the tag name, we are still effectively printing in the outer context, hence the use of FLAGS here. */ - print_name_maybe_canonical (TYPE_NAME (type), flags, stream); + print_name_maybe_canonical (type->name (), flags, stream); if (show > 0) fputs_filtered (" ", stream); } @@ -1077,10 +1082,10 @@ { /* If we just printed a tag name, no need to print anything else. */ - if (TYPE_NAME (type) == NULL) + if (type->name () == NULL) fprintf_filtered (stream, "{...}"); } - else if (show > 0 || TYPE_NAME (type) == NULL) + else if (show > 0 || type->name () == NULL) { struct type *basetype; int vptr_fieldno; @@ -1110,7 +1115,7 @@ fprintf_filtered (stream, "{\n"); - if (TYPE_NFIELDS (type) == 0 && TYPE_NFN_FIELDS (type) == 0 + if (type->num_fields () == 0 && TYPE_NFN_FIELDS (type) == 0 && TYPE_TYPEDEF_FIELD_COUNT (type) == 0) { if (TYPE_STUB (type)) @@ -1138,7 +1143,7 @@ /* If there is a base class for this type, do not print the field that it occupies. */ - int len = TYPE_NFIELDS (type); + int len = type->num_fields (); vptr_fieldno = get_vptr_fieldno (type, &basetype); struct print_offset_data local_podata; @@ -1162,7 +1167,7 @@ TYPE_FIELD_PRIVATE (type, i), flags); } - bool is_static = field_is_static (&TYPE_FIELD (type, i)); + bool is_static = field_is_static (&type->field (i)); if (flags->print_offsets) podata->update (type, i, stream); @@ -1174,8 +1179,8 @@ int newshow = show - 1; if (!is_static && flags->print_offsets - && (TYPE_CODE (TYPE_FIELD_TYPE (type, i)) == TYPE_CODE_STRUCT - || TYPE_CODE (TYPE_FIELD_TYPE (type, i)) == TYPE_CODE_UNION)) + && (type->field (i).type ()->code () == TYPE_CODE_STRUCT + || type->field (i).type ()->code () == TYPE_CODE_UNION)) { /* If we're printing offsets and this field's type is either a struct or an union, then we're interested in @@ -1195,10 +1200,10 @@ the whole struct/union. */ local_podata.end_bitpos = podata->end_bitpos - - TYPE_LENGTH (TYPE_FIELD_TYPE (type, i)) * TARGET_CHAR_BIT; + - TYPE_LENGTH (type->field (i).type ()) * TARGET_CHAR_BIT; } - c_print_type_1 (TYPE_FIELD_TYPE (type, i), + c_print_type_1 (type->field (i).type (), TYPE_FIELD_NAME (type, i), stream, newshow, level + 4, language, &local_flags, &local_podata); @@ -1242,7 +1247,7 @@ struct fn_field *f = TYPE_FN_FIELDLIST1 (type, i); int j, len2 = TYPE_FN_FIELDLIST_LENGTH (type, i); const char *method_name = TYPE_FN_FIELDLIST_NAME (type, i); - const char *name = TYPE_NAME (type); + const char *name = type->name (); int is_constructor = name && strcmp (method_name, name) == 0; @@ -1369,7 +1374,7 @@ if (semi_local_flags.print_nested_type_limit > 0) --semi_local_flags.print_nested_type_limit; - if (TYPE_NFIELDS (type) != 0 || TYPE_NFN_FIELDS (type) != 0) + if (type->num_fields () != 0 || TYPE_NFN_FIELDS (type) != 0) fprintf_filtered (stream, "\n"); for (int i = 0; i < TYPE_NESTED_TYPES_COUNT (type); ++i) @@ -1387,7 +1392,7 @@ if (TYPE_TYPEDEF_FIELD_COUNT (type) != 0 && flags->print_typedefs) { - if (TYPE_NFIELDS (type) != 0 || TYPE_NFN_FIELDS (type) != 0 + if (type->num_fields () != 0 || TYPE_NFN_FIELDS (type) != 0 || TYPE_NESTED_TYPES_COUNT (type) != 0) fprintf_filtered (stream, "\n"); @@ -1396,7 +1401,7 @@ struct type *target = TYPE_TYPEDEF_FIELD_TYPE (type, i); /* Dereference the typedef declaration itself. */ - gdb_assert (TYPE_CODE (target) == TYPE_CODE_TYPEDEF); + gdb_assert (target->code () == TYPE_CODE_TYPEDEF); target = TYPE_TARGET_TYPE (target); if (need_access_label) @@ -1475,9 +1480,9 @@ always just print the type name directly from the type. */ if (show <= 0 - && TYPE_NAME (type) != NULL) + && type->name () != NULL) { - c_type_print_modifier (type, stream, 0, 1); + c_type_print_modifier (type, stream, 0, 1, language); /* If we have "typedef struct foo {. . .} bar;" do we want to print it as "struct foo" or as "bar"? Pick the latter for @@ -1487,31 +1492,31 @@ way. */ if (language == language_c || language == language_minimal) { - if (TYPE_CODE (type) == TYPE_CODE_UNION) + if (type->code () == TYPE_CODE_UNION) fprintf_filtered (stream, "union "); - else if (TYPE_CODE (type) == TYPE_CODE_STRUCT) + else if (type->code () == TYPE_CODE_STRUCT) { if (TYPE_DECLARED_CLASS (type)) fprintf_filtered (stream, "class "); else fprintf_filtered (stream, "struct "); } - else if (TYPE_CODE (type) == TYPE_CODE_ENUM) + else if (type->code () == TYPE_CODE_ENUM) fprintf_filtered (stream, "enum "); } - print_name_maybe_canonical (TYPE_NAME (type), flags, stream); + print_name_maybe_canonical (type->name (), flags, stream); return; } type = check_typedef (type); - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_TYPEDEF: /* If we get here, the typedef doesn't have a name, and we couldn't resolve TYPE_TARGET_TYPE. Not much we can do. */ - gdb_assert (TYPE_NAME (type) == NULL); + gdb_assert (type->name () == NULL); gdb_assert (TYPE_TARGET_TYPE (type) == NULL); fprintf_styled (stream, metadata_style.style (), _("<unnamed typedef>")); @@ -1542,7 +1547,7 @@ break; case TYPE_CODE_ENUM: - c_type_print_modifier (type, stream, 0, 1); + c_type_print_modifier (type, stream, 0, 1, language); fprintf_filtered (stream, "enum "); if (TYPE_DECLARED_CLASS (type)) fprintf_filtered (stream, "class "); @@ -1551,10 +1556,10 @@ "{unnamed struct}"/"{unnamed union}"/"{unnamed enum}" tag for unnamed struct/union/enum's, which we don't want to print. */ - if (TYPE_NAME (type) != NULL - && !startswith (TYPE_NAME (type), "{unnamed")) + if (type->name () != NULL + && !startswith (type->name (), "{unnamed")) { - print_name_maybe_canonical (TYPE_NAME (type), flags, stream); + print_name_maybe_canonical (type->name (), flags, stream); if (show > 0) fputs_filtered (" ", stream); } @@ -1564,10 +1569,10 @@ { /* If we just printed a tag name, no need to print anything else. */ - if (TYPE_NAME (type) == NULL) + if (type->name () == NULL) fprintf_filtered (stream, "{...}"); } - else if (show > 0 || TYPE_NAME (type) == NULL) + else if (show > 0 || type->name () == NULL) { LONGEST lastval = 0; @@ -1583,19 +1588,20 @@ { struct type *underlying = check_typedef (TYPE_TARGET_TYPE (type)); - if (TYPE_NAME (underlying) != NULL) - fprintf_filtered (stream, ": %s ", TYPE_NAME (underlying)); + if (underlying->name () != NULL) + fprintf_filtered (stream, ": %s ", underlying->name ()); } fprintf_filtered (stream, "{"); - len = TYPE_NFIELDS (type); + len = type->num_fields (); for (i = 0; i < len; i++) { QUIT; if (i) fprintf_filtered (stream, ", "); wrap_here (" "); - fputs_filtered (TYPE_FIELD_NAME (type, i), stream); + fputs_styled (TYPE_FIELD_NAME (type, i), + variable_name_style.style (), stream); if (lastval != TYPE_FIELD_ENUMVAL (type, i)) { fprintf_filtered (stream, " = %s", @@ -1614,14 +1620,14 @@ local_flags.local_typedefs = NULL; - c_type_print_modifier (type, stream, 0, 1); + c_type_print_modifier (type, stream, 0, 1, language); fprintf_filtered (stream, "flag "); - print_name_maybe_canonical (TYPE_NAME (type), flags, stream); + print_name_maybe_canonical (type->name (), flags, stream); if (show > 0) { fputs_filtered (" ", stream); fprintf_filtered (stream, "{\n"); - if (TYPE_NFIELDS (type) == 0) + if (type->num_fields () == 0) { if (TYPE_STUB (type)) fprintfi_filtered (level + 4, stream, @@ -1632,14 +1638,14 @@ _("%p[<no data fields>%p]\n"), metadata_style.style ().ptr (), nullptr); } - len = TYPE_NFIELDS (type); + len = type->num_fields (); for (i = 0; i < len; i++) { QUIT; print_spaces_filtered (level + 4, stream); /* We pass "show" here and not "show - 1" to get enum types printed. There's no other way to see them. */ - c_print_type_1 (TYPE_FIELD_TYPE (type, i), + c_print_type_1 (type->field (i).type (), TYPE_FIELD_NAME (type, i), stream, show, level + 4, language, &local_flags, podata); @@ -1678,7 +1684,7 @@ case TYPE_CODE_NAMESPACE: fputs_filtered ("namespace ", stream); - fputs_filtered (TYPE_NAME (type), stream); + fputs_filtered (type->name (), stream); break; default: @@ -1686,17 +1692,17 @@ as fundamental types. For these, just print whatever the type name is, as recorded in the type itself. If there is no type name, then complain. */ - if (TYPE_NAME (type) != NULL) + if (type->name () != NULL) { - c_type_print_modifier (type, stream, 0, 1); - print_name_maybe_canonical (TYPE_NAME (type), flags, stream); + c_type_print_modifier (type, stream, 0, 1, language); + print_name_maybe_canonical (type->name (), flags, stream); } else { /* At least for dump_symtab, it is important that this not be an error (). */ fprintf_styled (stream, metadata_style.style (), - _("<invalid type code %d>"), TYPE_CODE (type)); + _("<invalid type code %d>"), type->code ()); } break; } diff -Nru gdb-9.1/gdb/c-valprint.c gdb-10.2/gdb/c-valprint.c --- gdb-9.1/gdb/c-valprint.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/c-valprint.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Support for printing C values for GDB, the GNU debugger. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -66,11 +66,11 @@ true_type = check_typedef (type); /* TYPE_CODE_CHAR is always textual. */ - if (TYPE_CODE (true_type) == TYPE_CODE_CHAR) + if (true_type->code () == TYPE_CODE_CHAR) return 1; /* Any other character-like types must be integral. */ - if (TYPE_CODE (true_type) != TYPE_CODE_INT) + if (true_type->code () != TYPE_CODE_INT) return 0; /* We peel typedefs one by one, looking for a match. */ @@ -78,10 +78,10 @@ while (iter_type) { /* Check the name of the type. */ - if (TYPE_NAME (iter_type) && textual_name (TYPE_NAME (iter_type))) + if (iter_type->name () && textual_name (iter_type->name ())) return 1; - if (TYPE_CODE (iter_type) != TYPE_CODE_TYPEDEF) + if (iter_type->code () != TYPE_CODE_TYPEDEF) break; /* Peel a single typedef. If the typedef doesn't have a target @@ -97,7 +97,7 @@ { /* Print this as a string if we can manage it. For now, no wide character support. */ - if (TYPE_CODE (true_type) == TYPE_CODE_INT + if (true_type->code () == TYPE_CODE_INT && TYPE_LENGTH (true_type) == 1) return 1; } @@ -106,7 +106,7 @@ /* If a one-byte TYPE_CODE_INT is missing the not-a-character flag, then we treat it as text; otherwise, we assume it's being used as data. */ - if (TYPE_CODE (true_type) == TYPE_CODE_INT + if (true_type->code () == TYPE_CODE_INT && TYPE_LENGTH (true_type) == 1 && !TYPE_NOTTEXT (true_type)) return 1; @@ -121,7 +121,7 @@ { "", " + ", - " * I", + "i", "true", "false", "void", @@ -146,7 +146,7 @@ int want_space = 0; struct gdbarch *gdbarch = get_type_arch (type); - if (TYPE_CODE (elttype) == TYPE_CODE_FUNC) + if (elttype->code () == TYPE_CODE_FUNC) { /* Try to print what function it points to. */ print_function_pointer_address (options, gdbarch, address, stream); @@ -228,45 +228,37 @@ } } -/* c_val_print helper for TYPE_CODE_ARRAY. */ +/* c_value_print helper for TYPE_CODE_ARRAY. */ static void -c_val_print_array (struct type *type, const gdb_byte *valaddr, - int embedded_offset, CORE_ADDR address, - struct ui_file *stream, int recurse, - struct value *original_value, - const struct value_print_options *options) -{ +c_value_print_array (struct value *val, + struct ui_file *stream, int recurse, + const struct value_print_options *options) +{ + struct type *type = check_typedef (value_type (val)); + CORE_ADDR address = value_address (val); + const gdb_byte *valaddr = value_contents_for_printing (val); struct type *unresolved_elttype = TYPE_TARGET_TYPE (type); struct type *elttype = check_typedef (unresolved_elttype); - struct gdbarch *arch = get_type_arch (type); - int unit_size = gdbarch_addressable_memory_unit_size (arch); if (TYPE_LENGTH (type) > 0 && TYPE_LENGTH (unresolved_elttype) > 0) { LONGEST low_bound, high_bound; int eltlen, len; enum bfd_endian byte_order = type_byte_order (type); - unsigned int i = 0; /* Number of characters printed. */ if (!get_array_bounds (type, &low_bound, &high_bound)) error (_("Could not determine the array high bound")); eltlen = TYPE_LENGTH (elttype); len = high_bound - low_bound + 1; - if (options->prettyformat_arrays) - { - print_spaces_filtered (2 + 2 * recurse, stream); - } /* Print arrays of textual chars with a string syntax, as long as the entire array is valid. */ if (c_textual_element_type (unresolved_elttype, options->format) - && value_bytes_available (original_value, embedded_offset, - TYPE_LENGTH (type)) - && !value_bits_any_optimized_out (original_value, - TARGET_CHAR_BIT * embedded_offset, + && value_bytes_available (val, 0, TYPE_LENGTH (type)) + && !value_bits_any_optimized_out (val, 0, TARGET_CHAR_BIT * TYPE_LENGTH (type))) { int force_ellipses = 0; @@ -280,9 +272,7 @@ for (temp_len = 0; (temp_len < len && temp_len < options->print_max - && extract_unsigned_integer (valaddr - + embedded_offset * unit_size - + temp_len * eltlen, + && extract_unsigned_integer (valaddr + temp_len * eltlen, eltlen, byte_order) != 0); ++temp_len) ; @@ -292,25 +282,22 @@ the next character is not \000. */ if (temp_len == options->print_max && temp_len < len) { - ULONGEST val - = extract_unsigned_integer (valaddr - + embedded_offset * unit_size - + temp_len * eltlen, + ULONGEST ival + = extract_unsigned_integer (valaddr + temp_len * eltlen, eltlen, byte_order); - if (val != 0) + if (ival != 0) force_ellipses = 1; } len = temp_len; } - LA_PRINT_STRING (stream, unresolved_elttype, - valaddr + embedded_offset * unit_size, len, + LA_PRINT_STRING (stream, unresolved_elttype, valaddr, len, NULL, force_ellipses, options); - i = len; } else { + unsigned int i = 0; fprintf_filtered (stream, "{"); /* If this is a virtual function table, print the 0th entry specially, and the rest of the members @@ -321,13 +308,7 @@ fprintf_filtered (stream, _("%d vtable entries"), len - 1); } - else - { - i = 0; - } - val_print_array_elements (type, embedded_offset, - address, stream, - recurse, original_value, options, i); + value_print_array_elements (val, stream, recurse, options, i); fprintf_filtered (stream, "}"); } } @@ -335,209 +316,158 @@ { /* Array of unspecified length: treat like pointer to first elt. */ print_unpacked_pointer (type, elttype, unresolved_elttype, valaddr, - embedded_offset, address + embedded_offset, - stream, recurse, options); + 0, address, stream, recurse, options); } } -/* c_val_print helper for TYPE_CODE_PTR. */ +/* c_value_print_inner helper for TYPE_CODE_PTR. */ static void -c_val_print_ptr (struct type *type, const gdb_byte *valaddr, - int embedded_offset, struct ui_file *stream, int recurse, - struct value *original_value, - const struct value_print_options *options) +c_value_print_ptr (struct value *val, struct ui_file *stream, int recurse, + const struct value_print_options *options) { - struct gdbarch *arch = get_type_arch (type); - int unit_size = gdbarch_addressable_memory_unit_size (arch); - if (options->format && options->format != 's') { - val_print_scalar_formatted (type, embedded_offset, - original_value, options, 0, stream); + value_print_scalar_formatted (val, options, 0, stream); + return; } - else if (options->vtblprint && cp_is_vtbl_ptr_type (type)) + + struct type *type = check_typedef (value_type (val)); + struct gdbarch *arch = get_type_arch (type); + const gdb_byte *valaddr = value_contents_for_printing (val); + + if (options->vtblprint && cp_is_vtbl_ptr_type (type)) { /* Print the unmangled name if desired. */ /* Print vtable entry - we only get here if we ARE using -fvtable_thunks. (Otherwise, look under TYPE_CODE_STRUCT.) */ - CORE_ADDR addr - = extract_typed_address (valaddr + embedded_offset, type); - struct gdbarch *gdbarch = get_type_arch (type); + CORE_ADDR addr = extract_typed_address (valaddr, type); - print_function_pointer_address (options, gdbarch, addr, stream); + print_function_pointer_address (options, arch, addr, stream); } else { struct type *unresolved_elttype = TYPE_TARGET_TYPE (type); struct type *elttype = check_typedef (unresolved_elttype); - CORE_ADDR addr = unpack_pointer (type, - valaddr + embedded_offset * unit_size); + CORE_ADDR addr = unpack_pointer (type, valaddr); print_unpacked_pointer (type, elttype, unresolved_elttype, valaddr, - embedded_offset, addr, stream, recurse, options); + 0, addr, stream, recurse, options); } } -/* c_val_print helper for TYPE_CODE_STRUCT. */ +/* c_value_print helper for TYPE_CODE_STRUCT and TYPE_CODE_UNION. */ static void -c_val_print_struct (struct type *type, const gdb_byte *valaddr, - int embedded_offset, CORE_ADDR address, - struct ui_file *stream, int recurse, - struct value *original_value, - const struct value_print_options *options) +c_value_print_struct (struct value *val, struct ui_file *stream, int recurse, + const struct value_print_options *options) { - if (options->vtblprint && cp_is_vtbl_ptr_type (type)) + struct type *type = check_typedef (value_type (val)); + + if (type->code () == TYPE_CODE_UNION && recurse && !options->unionprint) + fprintf_filtered (stream, "{...}"); + else if (options->vtblprint && cp_is_vtbl_ptr_type (type)) { /* Print the unmangled name if desired. */ /* Print vtable entry - we only get here if NOT using -fvtable_thunks. (Otherwise, look under TYPE_CODE_PTR.) */ struct gdbarch *gdbarch = get_type_arch (type); - int offset = (embedded_offset - + TYPE_FIELD_BITPOS (type, - VTBL_FNADDR_OFFSET) / 8); - struct type *field_type = TYPE_FIELD_TYPE (type, VTBL_FNADDR_OFFSET); + int offset = TYPE_FIELD_BITPOS (type, VTBL_FNADDR_OFFSET) / 8; + struct type *field_type = type->field (VTBL_FNADDR_OFFSET).type (); + const gdb_byte *valaddr = value_contents_for_printing (val); CORE_ADDR addr = extract_typed_address (valaddr + offset, field_type); print_function_pointer_address (options, gdbarch, addr, stream); } else - cp_print_value_fields_rtti (type, valaddr, - embedded_offset, address, - stream, recurse, - original_value, options, - NULL, 0); + cp_print_value_fields (val, stream, recurse, options, NULL, 0); } -/* c_val_print helper for TYPE_CODE_UNION. */ +/* c_value_print helper for TYPE_CODE_INT. */ static void -c_val_print_union (struct type *type, const gdb_byte *valaddr, - int embedded_offset, CORE_ADDR address, - struct ui_file *stream, int recurse, - struct value *original_value, +c_value_print_int (struct value *val, struct ui_file *stream, const struct value_print_options *options) { - if (recurse && !options->unionprint) - { - fprintf_filtered (stream, "{...}"); - } - else - { - c_val_print_struct (type, valaddr, embedded_offset, address, stream, - recurse, original_value, options); - } -} - -/* c_val_print helper for TYPE_CODE_INT. */ - -static void -c_val_print_int (struct type *type, struct type *unresolved_type, - const gdb_byte *valaddr, int embedded_offset, - struct ui_file *stream, struct value *original_value, - const struct value_print_options *options) -{ - struct gdbarch *arch = get_type_arch (type); - int unit_size = gdbarch_addressable_memory_unit_size (arch); - if (options->format || options->output_format) { struct value_print_options opts = *options; opts.format = (options->format ? options->format : options->output_format); - val_print_scalar_formatted (type, embedded_offset, - original_value, &opts, 0, stream); + value_print_scalar_formatted (val, &opts, 0, stream); } else { - val_print_scalar_formatted (type, embedded_offset, - original_value, options, 0, stream); + value_print_scalar_formatted (val, options, 0, stream); /* C and C++ has no single byte int type, char is used instead. Since we don't know whether the value is really intended to be used as an integer or a character, print the character equivalent as well. */ - if (c_textual_element_type (unresolved_type, options->format)) + struct type *type = value_type (val); + const gdb_byte *valaddr = value_contents_for_printing (val); + if (c_textual_element_type (type, options->format)) { fputs_filtered (" ", stream); - LA_PRINT_CHAR (unpack_long (type, - valaddr + embedded_offset * unit_size), - unresolved_type, stream); + LA_PRINT_CHAR (unpack_long (type, valaddr), type, stream); } } } -/* c_val_print helper for TYPE_CODE_MEMBERPTR. */ +/* c_value_print helper for TYPE_CODE_MEMBERPTR. */ static void -c_val_print_memberptr (struct type *type, const gdb_byte *valaddr, - int embedded_offset, CORE_ADDR address, - struct ui_file *stream, int recurse, - struct value *original_value, - const struct value_print_options *options) +c_value_print_memberptr (struct value *val, struct ui_file *stream, + int recurse, + const struct value_print_options *options) { if (!options->format) { - cp_print_class_member (valaddr + embedded_offset, type, stream, "&"); + struct type *type = check_typedef (value_type (val)); + const gdb_byte *valaddr = value_contents_for_printing (val); + cp_print_class_member (valaddr, type, stream, "&"); } else - { - generic_val_print (type, embedded_offset, address, stream, - recurse, original_value, options, &c_decorations); - } + generic_value_print (val, stream, recurse, options, &c_decorations); } -/* See val_print for a description of the various parameters of this - function; they are identical. */ +/* See c-lang.h. */ void -c_val_print (struct type *type, - int embedded_offset, CORE_ADDR address, - struct ui_file *stream, int recurse, - struct value *original_value, - const struct value_print_options *options) +c_value_print_inner (struct value *val, struct ui_file *stream, int recurse, + const struct value_print_options *options) { - struct type *unresolved_type = type; - const gdb_byte *valaddr = value_contents_for_printing (original_value); + struct type *type = value_type (val); + const gdb_byte *valaddr = value_contents_for_printing (val); type = check_typedef (type); - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_ARRAY: - c_val_print_array (type, valaddr, embedded_offset, address, stream, - recurse, original_value, options); + c_value_print_array (val, stream, recurse, options); break; case TYPE_CODE_METHODPTR: - cplus_print_method_ptr (valaddr + embedded_offset, type, stream); + cplus_print_method_ptr (valaddr, type, stream); break; case TYPE_CODE_PTR: - c_val_print_ptr (type, valaddr, embedded_offset, stream, recurse, - original_value, options); + c_value_print_ptr (val, stream, recurse, options); break; case TYPE_CODE_UNION: - c_val_print_union (type, valaddr, embedded_offset, address, stream, - recurse, original_value, options); - break; - case TYPE_CODE_STRUCT: - c_val_print_struct (type, valaddr, embedded_offset, address, stream, - recurse, original_value, options); + c_value_print_struct (val, stream, recurse, options); break; case TYPE_CODE_INT: - c_val_print_int (type, unresolved_type, valaddr, embedded_offset, stream, - original_value, options); + c_value_print_int (val, stream, options); break; case TYPE_CODE_MEMBERPTR: - c_val_print_memberptr (type, valaddr, embedded_offset, address, stream, - recurse, original_value, options); + c_value_print_memberptr (val, stream, recurse, options); break; case TYPE_CODE_REF: @@ -556,18 +486,17 @@ case TYPE_CODE_COMPLEX: case TYPE_CODE_CHAR: default: - generic_val_print (type, embedded_offset, address, - stream, recurse, original_value, options, - &c_decorations); + generic_value_print (val, stream, recurse, options, &c_decorations); break; } } + void c_value_print (struct value *val, struct ui_file *stream, const struct value_print_options *options) { - struct type *type, *real_type, *val_type; + struct type *type, *real_type; int full, using_enc; LONGEST top; struct value_print_options opts = *options; @@ -581,29 +510,27 @@ C++: if it is a member pointer, we will take care of that when we print it. */ - /* Preserve the original type before stripping typedefs. We prefer - to pass down the original type when possible, but for local - checks it is better to look past the typedefs. */ - val_type = value_type (val); - type = check_typedef (val_type); + type = check_typedef (value_type (val)); - if (TYPE_CODE (type) == TYPE_CODE_PTR || TYPE_IS_REFERENCE (type)) + if (type->code () == TYPE_CODE_PTR || TYPE_IS_REFERENCE (type)) { + struct type *original_type = value_type (val); + /* Hack: remove (char *) for char strings. Their type is indicated by the quoted string anyway. (Don't use c_textual_element_type here; quoted strings are always exactly (char *), (wchar_t *), or the like. */ - if (TYPE_CODE (val_type) == TYPE_CODE_PTR - && TYPE_NAME (val_type) == NULL - && TYPE_NAME (TYPE_TARGET_TYPE (val_type)) != NULL - && (strcmp (TYPE_NAME (TYPE_TARGET_TYPE (val_type)), + if (original_type->code () == TYPE_CODE_PTR + && original_type->name () == NULL + && TYPE_TARGET_TYPE (original_type)->name () != NULL + && (strcmp (TYPE_TARGET_TYPE (original_type)->name (), "char") == 0 - || textual_name (TYPE_NAME (TYPE_TARGET_TYPE (val_type))))) + || textual_name (TYPE_TARGET_TYPE (original_type)->name ()))) { /* Print nothing. */ } else if (options->objectprint - && (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_STRUCT)) + && (TYPE_TARGET_TYPE (type)->code () == TYPE_CODE_STRUCT)) { int is_ref = TYPE_IS_REFERENCE (type); enum type_code refcode = TYPE_CODE_UNDEF; @@ -611,7 +538,7 @@ if (is_ref) { val = value_addr (val); - refcode = TYPE_CODE (type); + refcode = type->code (); } /* Pointer to class, check real type of object. */ @@ -624,7 +551,6 @@ if (real_type) { /* RTTI entry found. */ - type = real_type; /* Need to adjust pointer value. */ val = value_from_pointer (real_type, @@ -637,14 +563,11 @@ } if (is_ref) - { - val = value_ref (value_ind (val), refcode); - type = value_type (val); - } + val = value_ref (value_ind (val), refcode); + type = value_type (val); type_print (type, "", stream, -1); fprintf_filtered (stream, ") "); - val_type = type; } else { @@ -658,7 +581,7 @@ if (!value_initialized (val)) fprintf_filtered (stream, " [uninitialized] "); - if (options->objectprint && (TYPE_CODE (type) == TYPE_CODE_STRUCT)) + if (options->objectprint && (type->code () == TYPE_CODE_STRUCT)) { /* Attempt to determine real type of object. */ real_type = value_rtti_type (val, &full, &top, &using_enc); @@ -667,36 +590,25 @@ /* We have RTTI information, so use it. */ val = value_full_object (val, real_type, full, top, using_enc); + /* In a destructor we might see a real type that is a + superclass of the object's type. In this case it is + better to leave the object as-is. */ + if (!(full + && (TYPE_LENGTH (real_type) + < TYPE_LENGTH (value_enclosing_type (val))))) + val = value_cast (real_type, val); fprintf_filtered (stream, "(%s%s) ", - TYPE_NAME (real_type), + real_type->name (), full ? "" : _(" [incomplete object]")); - /* Print out object: enclosing type is same as real_type if - full. */ - val_print (value_enclosing_type (val), - 0, - value_address (val), stream, 0, - val, &opts, current_language); - return; - /* Note: When we look up RTTI entries, we don't get any - information on const or volatile attributes. */ } else if (type != check_typedef (value_enclosing_type (val))) { /* No RTTI information, so let's do our best. */ fprintf_filtered (stream, "(%s ?) ", - TYPE_NAME (value_enclosing_type (val))); - val_print (value_enclosing_type (val), - 0, - value_address (val), stream, 0, - val, &opts, current_language); - return; + value_enclosing_type (val)->name ()); + val = value_cast (value_enclosing_type (val), val); } - /* Otherwise, we end up at the return outside this "if". */ } - val_print (val_type, - value_embedded_offset (val), - value_address (val), - stream, 0, - val, &opts, current_language); + common_val_print (val, stream, 0, &opts, current_language); } diff -Nru gdb-9.1/gdb/c-varobj.c gdb-10.2/gdb/c-varobj.c --- gdb-9.1/gdb/c-varobj.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/c-varobj.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* varobj support for C and C++. - Copyright (C) 1999-2020 Free Software Foundation, Inc. + Copyright (C) 1999-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -83,11 +83,11 @@ /* Pointers to structures are treated just like structures when accessing children. Don't dereference pointers to other types. */ - if (TYPE_CODE (*type) == TYPE_CODE_PTR) + if ((*type)->code () == TYPE_CODE_PTR) { struct type *target_type = get_target_type (*type); - if (TYPE_CODE (target_type) == TYPE_CODE_STRUCT - || TYPE_CODE (target_type) == TYPE_CODE_UNION) + if (target_type->code () == TYPE_CODE_STRUCT + || target_type->code () == TYPE_CODE_UNION) { if (value && *value) { @@ -142,9 +142,9 @@ type = varobj_get_gdb_type (var); /* Anonymous unions and structs are also not path_expr parents. */ - if ((TYPE_CODE (type) == TYPE_CODE_STRUCT - || TYPE_CODE (type) == TYPE_CODE_UNION) - && TYPE_NAME (type) == NULL) + if ((type->code () == TYPE_CODE_STRUCT + || type->code () == TYPE_CODE_UNION) + && type->name () == NULL) { const struct varobj *parent = var->parent; @@ -159,12 +159,12 @@ parent_type = varobj_get_value_type (parent); adjust_value_for_child_access (NULL, &parent_type, &was_ptr, 0); - if (TYPE_CODE (parent_type) == TYPE_CODE_STRUCT - || TYPE_CODE (parent_type) == TYPE_CODE_UNION) + if (parent_type->code () == TYPE_CODE_STRUCT + || parent_type->code () == TYPE_CODE_UNION) { const char *field_name; - gdb_assert (var->index < TYPE_NFIELDS (parent_type)); + gdb_assert (var->index < parent_type->num_fields ()); field_name = TYPE_FIELD_NAME (parent_type, var->index); return !(field_name == NULL || *field_name == '\0'); } @@ -188,11 +188,11 @@ adjust_value_for_child_access (NULL, &type, NULL, 0); target = get_target_type (type); - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_ARRAY: if (TYPE_LENGTH (type) > 0 && TYPE_LENGTH (target) > 0 - && !TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED (type)) + && (type->bounds ()->high.kind () != PROP_UNDEFINED)) children = TYPE_LENGTH (type) / TYPE_LENGTH (target); else /* If we don't know how many elements there are, don't display @@ -202,7 +202,7 @@ case TYPE_CODE_STRUCT: case TYPE_CODE_UNION: - children = TYPE_NFIELDS (type); + children = type->num_fields (); break; case TYPE_CODE_PTR: @@ -214,8 +214,8 @@ to test for it, please mind that a little magic is necessary to properly identify it: char* has TYPE_CODE == TYPE_CODE_INT and TYPE_NAME == "char". */ - if (TYPE_CODE (target) == TYPE_CODE_FUNC - || TYPE_CODE (target) == TYPE_CODE_VOID) + if (target->code () == TYPE_CODE_FUNC + || target->code () == TYPE_CODE_VOID) children = 0; else children = 1; @@ -249,12 +249,12 @@ type = check_typedef (type); - gdb_assert (TYPE_CODE (type) == TYPE_CODE_STRUCT - || TYPE_CODE (type) == TYPE_CODE_UNION); + gdb_assert (type->code () == TYPE_CODE_STRUCT + || type->code () == TYPE_CODE_UNION); try { - if (field_is_static (&TYPE_FIELD (type, type_index))) + if (field_is_static (&type->field (type_index))) result = value_static_field (type, type_index); else result = value_primitive_field (value, 0, type_index, type); @@ -302,17 +302,17 @@ } adjust_value_for_child_access (&value, &type, &was_ptr, 0); - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_ARRAY: if (cname) - *cname = int_string (index - + TYPE_LOW_BOUND (TYPE_INDEX_TYPE (type)), + *cname = int_string (index + type->bounds ()->low.const_val (), 10, 1, 0, 0); if (cvalue && value) { - int real_index = index + TYPE_LOW_BOUND (TYPE_INDEX_TYPE (type)); + int real_index + = index + type->bounds ()->low.const_val (); try { @@ -327,12 +327,10 @@ *ctype = get_target_type (type); if (cfull_expression) - *cfull_expression = - string_printf ("(%s)[%s]", parent_expression.c_str (), - int_string (index - + TYPE_LOW_BOUND (TYPE_INDEX_TYPE (type)), - 10, 1, 0, 0)); - + *cfull_expression = string_printf + ("(%s)[%s]", parent_expression.c_str (), + int_string (index + type->bounds ()->low.const_val (), + 10, 1, 0, 0)); break; @@ -348,7 +346,7 @@ { if (cname) { - if (TYPE_CODE (TYPE_FIELD_TYPE (type, index)) + if (type->field (index).type ()->code () == TYPE_CODE_STRUCT) *cname = ANONYMOUS_STRUCT_NAME; else @@ -380,7 +378,7 @@ } if (ctype) - *ctype = TYPE_FIELD_TYPE (type, index); + *ctype = type->field (index).type (); } break; @@ -486,7 +484,7 @@ while (TYPE_IS_REFERENCE (type)) type = check_typedef (TYPE_TARGET_TYPE (type)); - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_STRUCT: case TYPE_CODE_UNION: @@ -577,12 +575,12 @@ { value = var->value.get (); lookup_actual_type = (TYPE_IS_REFERENCE (var->type) - || TYPE_CODE (var->type) == TYPE_CODE_PTR); + || var->type->code () == TYPE_CODE_PTR); } adjust_value_for_child_access (&value, &type, NULL, lookup_actual_type); - if (((TYPE_CODE (type)) == TYPE_CODE_STRUCT) - || ((TYPE_CODE (type)) == TYPE_CODE_UNION)) + if (((type->code ()) == TYPE_CODE_STRUCT) + || ((type->code ()) == TYPE_CODE_UNION)) { int kids[3]; @@ -614,7 +612,7 @@ value = parent->value.get (); lookup_actual_type = (TYPE_IS_REFERENCE (parent->type) - || TYPE_CODE (parent->type) == TYPE_CODE_PTR); + || parent->type->code () == TYPE_CODE_PTR); } adjust_value_for_child_access (&value, &type, NULL, lookup_actual_type); @@ -649,7 +647,7 @@ children[v_protected] = 0; vptr_fieldno = get_vptr_fieldno (type, &basetype); - for (i = TYPE_N_BASECLASSES (type); i < TYPE_NFIELDS (type); i++) + for (i = TYPE_N_BASECLASSES (type); i < type->num_fields (); i++) { /* If we have a virtual table pointer, omit it. Even if virtual table pointers are not specifically marked in the debug info, @@ -719,7 +717,7 @@ var = (CPLUS_FAKE_CHILD (parent)) ? parent->parent : parent; if (opts.objectprint) lookup_actual_type = (TYPE_IS_REFERENCE (var->type) - || TYPE_CODE (var->type) == TYPE_CODE_PTR); + || var->type->code () == TYPE_CODE_PTR); value = var->value.get (); type = varobj_get_value_type (var); if (cfull_expression) @@ -728,8 +726,8 @@ adjust_value_for_child_access (&value, &type, &was_ptr, lookup_actual_type); - if (TYPE_CODE (type) == TYPE_CODE_STRUCT - || TYPE_CODE (type) == TYPE_CODE_UNION) + if (type->code () == TYPE_CODE_STRUCT + || type->code () == TYPE_CODE_UNION) { const char *join = was_ptr ? "->" : "."; @@ -771,10 +769,10 @@ { if (cname) { - if (TYPE_CODE (TYPE_FIELD_TYPE (type, type_index)) + if (type->field (type_index).type ()->code () == TYPE_CODE_STRUCT) *cname = ANONYMOUS_STRUCT_NAME; - else if (TYPE_CODE (TYPE_FIELD_TYPE (type, type_index)) + else if (type->field (type_index).type ()->code () == TYPE_CODE_UNION) *cname = ANONYMOUS_UNION_NAME; } @@ -797,7 +795,7 @@ *cvalue = value_struct_element_index (value, type_index); if (ctype) - *ctype = TYPE_FIELD_TYPE (type, type_index); + *ctype = type->field (type_index).type (); } else if (index < TYPE_N_BASECLASSES (type)) { @@ -806,11 +804,11 @@ *cname = TYPE_FIELD_NAME (type, index); if (cvalue && value) - *cvalue = value_cast (TYPE_FIELD_TYPE (type, index), value); + *cvalue = value_cast (type->field (index).type (), value); if (ctype) { - *ctype = TYPE_FIELD_TYPE (type, index); + *ctype = type->field (index).type (); } if (cfull_expression) diff -Nru gdb-9.1/gdb/darwin-nat.c gdb-10.2/gdb/darwin-nat.c --- gdb-9.1/gdb/darwin-nat.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/darwin-nat.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Darwin support for GDB, the GNU debugger. - Copyright (C) 2008-2020 Free Software Foundation, Inc. + Copyright (C) 2008-2021 Free Software Foundation, Inc. Contributed by AdaCore. @@ -89,12 +89,8 @@ #define PTRACE(CMD, PID, ADDR, SIG) \ darwin_ptrace(#CMD, CMD, (PID), (ADDR), (SIG)) -static ptid_t darwin_wait (ptid_t ptid, struct target_waitstatus *status); - static void darwin_ptrace_me (void); -static void darwin_ptrace_him (int pid); - static void darwin_encode_reply (mig_reply_error_t *reply, mach_msg_header_t *hdr, integer_t code); @@ -258,8 +254,8 @@ return (int)(tl - tr); } -static void -darwin_check_new_threads (struct inferior *inf) +void +darwin_nat_target::check_new_threads (inferior *inf) { kern_return_t kret; thread_array_t thread_list; @@ -355,7 +351,7 @@ pti->msg_state = DARWIN_RUNNING; /* Add the new thread. */ - add_thread_with_info (ptid_t (inf->pid, 0, new_id), pti); + add_thread_with_info (this, ptid_t (inf->pid, 0, new_id), pti); new_thread_vec.push_back (pti); new_ix++; continue; @@ -364,7 +360,7 @@ { /* A thread was removed. */ struct thread_info *thr - = find_thread_ptid (ptid_t (inf->pid, 0, old_id)); + = find_thread_ptid (this, ptid_t (inf->pid, 0, old_id)); delete_thread (thr); kret = mach_port_deallocate (gdb_task, old_id); MACH_CHECK_ERROR (kret); @@ -382,32 +378,30 @@ MACH_CHECK_ERROR (kret); } -static int -find_inferior_task_it (struct inferior *inf, void *port_ptr) -{ - darwin_inferior *priv = get_darwin_inferior (inf); - - return priv != nullptr && priv->task == *(task_t *)port_ptr; -} - -static int -find_inferior_pid_it (struct inferior *inf, void *pid_ptr) -{ - return inf->pid == *(int *)pid_ptr; -} - /* Return an inferior by task port. */ static struct inferior * darwin_find_inferior_by_task (task_t port) { - return iterate_over_inferiors (&find_inferior_task_it, &port); + for (inferior *inf : all_inferiors ()) + { + darwin_inferior *priv = get_darwin_inferior (inf); + + if (priv != nullptr && priv->task == port) + return inf; + } + return nullptr; } /* Return an inferior by pid port. */ static struct inferior * darwin_find_inferior_by_pid (int pid) { - return iterate_over_inferiors (&find_inferior_pid_it, &pid); + for (inferior *inf : all_inferiors ()) + { + if (inf->pid == pid) + return inf; + } + return nullptr; } /* Return a thread by port. */ @@ -462,23 +456,6 @@ } } -/* Iterator functions. */ - -static int -darwin_suspend_inferior_it (struct inferior *inf, void *arg) -{ - darwin_suspend_inferior (inf); - darwin_check_new_threads (inf); - return 0; -} - -static int -darwin_resume_inferior_it (struct inferior *inf, void *arg) -{ - darwin_resume_inferior (inf); - return 0; -} - static void darwin_dump_message (mach_msg_header_t *hdr, int disp_body) { @@ -611,10 +588,10 @@ /* Decode an exception message. */ -static int -darwin_decode_exception_message (mach_msg_header_t *hdr, - struct inferior **pinf, - darwin_thread_t **pthread) +int +darwin_nat_target::decode_exception_message (mach_msg_header_t *hdr, + inferior **pinf, + darwin_thread_t **pthread) { mach_msg_body_t *bod = (mach_msg_body_t*)(hdr + 1); mach_msg_port_descriptor_t *desc = (mach_msg_port_descriptor_t *)(bod + 1); @@ -712,7 +689,7 @@ /* Find thread by port. */ /* Check for new threads. Do it early so that the port in the exception message can be deallocated. */ - darwin_check_new_threads (inf); + check_new_threads (inf); /* Free the thread port (as gdb knows the thread, it has already has a right for it, so this just decrement a reference counter). */ @@ -898,23 +875,6 @@ darwin_resume_thread (inf, thread, step, nsignal); } -struct resume_inferior_threads_param -{ - int step; - int nsignal; -}; - -static int -darwin_resume_inferior_threads_it (struct inferior *inf, void *param) -{ - int step = ((struct resume_inferior_threads_param *)param)->step; - int nsignal = ((struct resume_inferior_threads_param *)param)->nsignal; - - darwin_resume_inferior_threads (inf, step, nsignal); - - return 0; -} - /* Suspend all threads of INF. */ static void @@ -963,19 +923,17 @@ /* minus_one_ptid is RESUME_ALL. */ if (ptid == minus_one_ptid) { - struct resume_inferior_threads_param param; - - param.nsignal = nsignal; - param.step = step; - /* Resume threads. */ - iterate_over_inferiors (darwin_resume_inferior_threads_it, ¶m); + for (inferior *inf : all_inferiors ()) + darwin_resume_inferior_threads (inf, step, nsignal); + /* Resume tasks. */ - iterate_over_inferiors (darwin_resume_inferior_it, NULL); + for (inferior *inf : all_inferiors ()) + darwin_resume_inferior (inf); } else { - struct inferior *inf = find_inferior_ptid (ptid); + inferior *inf = find_inferior_ptid (this, ptid); long tid = ptid.tid (); /* Stop the inferior (should be useless). */ @@ -1001,11 +959,11 @@ } } -static ptid_t -darwin_decode_message (mach_msg_header_t *hdr, - darwin_thread_t **pthread, - struct inferior **pinf, - struct target_waitstatus *status) +ptid_t +darwin_nat_target::decode_message (mach_msg_header_t *hdr, + darwin_thread_t **pthread, + inferior **pinf, + target_waitstatus *status) { darwin_thread_t *thread; struct inferior *inf; @@ -1016,7 +974,7 @@ int res; /* Decode message. */ - res = darwin_decode_exception_message (hdr, &inf, &thread); + res = decode_exception_message (hdr, &inf, &thread); if (res < 0) { @@ -1153,8 +1111,7 @@ /* Looks necessary on Leopard and harmless... */ wait4 (inf->pid, &wstatus, 0, NULL); - inferior_ptid = ptid_t (inf->pid, 0, 0); - return inferior_ptid; + return ptid_t (inf->pid); } else { @@ -1172,8 +1129,8 @@ return minus_one_ptid; } -static int -cancel_breakpoint (ptid_t ptid) +int +darwin_nat_target::cancel_breakpoint (ptid_t ptid) { /* Arrange for a breakpoint to be hit again later. We will handle the current event, eventually we will resume this thread, and this @@ -1183,7 +1140,7 @@ delete or disable the breakpoint, but the thread will have already tripped on it. */ - struct regcache *regcache = get_thread_regcache (ptid); + struct regcache *regcache = get_thread_regcache (this, ptid); struct gdbarch *gdbarch = regcache->arch (); CORE_ADDR pc; @@ -1202,8 +1159,8 @@ return 0; } -static ptid_t -darwin_wait (ptid_t ptid, struct target_waitstatus *status) +ptid_t +darwin_nat_target::wait_1 (ptid_t ptid, struct target_waitstatus *status) { kern_return_t kret; union @@ -1214,7 +1171,6 @@ mach_msg_header_t *hdr = &msgin.hdr; ptid_t res; darwin_thread_t *thread; - struct inferior *inf; inferior_debug (2, _("darwin_wait: waiting for a message pid=%d thread=%lx\n"), @@ -1223,7 +1179,7 @@ /* Handle fake stop events at first. */ if (darwin_inf_fake_stop != NULL) { - inf = darwin_inf_fake_stop; + inferior *inf = darwin_inf_fake_stop; darwin_inf_fake_stop = NULL; darwin_inferior *priv = get_darwin_inferior (inf); @@ -1262,7 +1218,8 @@ if (darwin_debug_flag > 10) darwin_dump_message (hdr, darwin_debug_flag > 11); - res = darwin_decode_message (hdr, &thread, &inf, status); + inferior *inf; + res = decode_message (hdr, &thread, &inf, status); if (res == minus_one_ptid) continue; @@ -1273,7 +1230,11 @@ while (status->kind == TARGET_WAITKIND_IGNORE); /* Stop all tasks. */ - iterate_over_inferiors (darwin_suspend_inferior_it, NULL); + for (inferior *inf : all_inferiors (this)) + { + darwin_suspend_inferior (inf); + check_new_threads (inf); + } /* Read pending messages. */ while (1) @@ -1298,7 +1259,8 @@ if (darwin_debug_flag > 10) darwin_dump_message (hdr, darwin_debug_flag > 11); - ptid2 = darwin_decode_message (hdr, &thread, &inf, &status2); + inferior *inf; + ptid2 = decode_message (hdr, &thread, &inf, &status2); if (inf != NULL && thread != NULL && thread->event.ex_type == EXC_BREAKPOINT) @@ -1325,7 +1287,7 @@ darwin_nat_target::wait (ptid_t ptid, struct target_waitstatus *status, int options) { - return darwin_wait (ptid, status); + return wait_1 (ptid, status); } void @@ -1415,8 +1377,8 @@ } } -static void -darwin_stop_inferior (struct inferior *inf) +void +darwin_nat_target::stop_inferior (inferior *inf) { struct target_waitstatus wstatus; ptid_t ptid; @@ -1432,14 +1394,14 @@ if (priv->no_ptrace) return; - res = kill (inf->pid, SIGSTOP); + res = ::kill (inf->pid, SIGSTOP); if (res != 0) warning (_("cannot kill: %s"), safe_strerror (errno)); /* Wait until the process is really stopped. */ while (1) { - ptid = darwin_wait (inferior_ptid, &wstatus); + ptid = wait_1 (ptid_t (inf->pid), &wstatus); if (wstatus.kind == TARGET_WAITKIND_STOPPED && wstatus.value.sig == GDB_SIGNAL_STOP) break; @@ -1564,13 +1526,13 @@ darwin_resume_inferior (inf); - ptid = darwin_wait (inferior_ptid, &wstatus); + ptid = wait_1 (ptid_t (inf->pid), &wstatus); } else if (errno != ESRCH) warning (_("Failed to kill inferior: kill (%d, 9) returned [%s]"), inf->pid, safe_strerror (errno)); - target_mourn_inferior (inferior_ptid); + target_mourn_inferior (ptid_t (inf->pid)); } static void @@ -1690,7 +1652,7 @@ catch (const gdb_exception &ex) { exit_inferior (inf); - inferior_ptid = null_ptid; + switch_to_no_thread (); throw; } @@ -1716,10 +1678,10 @@ gdb_assert_not_reached ("did not find gdb thread for darwin thread"); } -static void -darwin_init_thread_list (struct inferior *inf) +void +darwin_nat_target::init_thread_list (inferior *inf) { - darwin_check_new_threads (inf); + check_new_threads (inf); darwin_inferior *priv = get_darwin_inferior (inf); @@ -1729,7 +1691,7 @@ struct thread_info *first_thread = thread_info_from_private_thread_info (first_pti); - inferior_ptid = first_thread->ptid; + switch_to_thread (first_thread); } /* The child must synchronize with gdb: gdb must set the exception port @@ -1783,21 +1745,21 @@ mark_fd_no_cloexec (ptrace_fds[1]); } -static void -darwin_ptrace_him (int pid) +void +darwin_nat_target::ptrace_him (int pid) { struct inferior *inf = current_inferior (); darwin_attach_pid (inf); /* Let's the child run. */ - close (ptrace_fds[0]); - close (ptrace_fds[1]); + ::close (ptrace_fds[0]); + ::close (ptrace_fds[1]); unmark_fd_no_cloexec (ptrace_fds[0]); unmark_fd_no_cloexec (ptrace_fds[1]); - darwin_init_thread_list (inf); + init_thread_list (inf); gdb_startup_inferior (pid, START_INFERIOR_TRAPS_EXPECTED); } @@ -1986,6 +1948,7 @@ char **env, int from_tty) { gdb::optional<scoped_restore_tmpl<bool>> restore_startup_with_shell; + darwin_nat_target *the_target = this; if (startup_with_shell && may_have_sip ()) { @@ -1998,7 +1961,11 @@ /* Do the hard work. */ fork_inferior (exec_file, allargs, env, darwin_ptrace_me, - darwin_ptrace_him, darwin_pre_ptrace, copied_shell, + [the_target] (int pid) + { + the_target->ptrace_him (pid); + }, + darwin_pre_ptrace, copied_shell, darwin_execvp); } @@ -2045,7 +2012,7 @@ if (from_tty) { - char *exec_file = get_exec_file (0); + const char *exec_file = get_exec_file (0); if (exec_file) printf_unfiltered (_("Attaching to program: %s, %s\n"), exec_file, @@ -2059,7 +2026,6 @@ error (_("Can't attach to process %d: %s (%d)"), pid, safe_strerror (errno), errno); - inferior_ptid = ptid_t (pid); inf = current_inferior (); inferior_appeared (inf, pid); inf->attach_flag = 1; @@ -2068,7 +2034,7 @@ darwin_suspend_inferior (inf); - darwin_init_thread_list (inf); + init_thread_list (inf); darwin_inferior *priv = get_darwin_inferior (inf); @@ -2099,7 +2065,7 @@ /* If ptrace() is in use, stop the process. */ if (!priv->no_ptrace) - darwin_stop_inferior (inf); + stop_inferior (inf); kret = darwin_restore_exception_ports (priv); MACH_CHECK_ERROR (kret); @@ -2471,7 +2437,7 @@ names_count * sizeof (mach_port_t)); if (res) - return ptid_t (inferior_ptid.pid (), 0, res); + return ptid_t (current_inferior ()->pid, 0, res); else return null_ptid; } @@ -2482,6 +2448,7 @@ return true; } +void _initialize_darwin_nat (); void _initialize_darwin_nat () { diff -Nru gdb-9.1/gdb/darwin-nat.h gdb-10.2/gdb/darwin-nat.h --- gdb-9.1/gdb/darwin-nat.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/darwin-nat.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Common things used by the various darwin files - Copyright (C) 1995-2020 Free Software Foundation, Inc. + Copyright (C) 1995-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -21,6 +21,59 @@ #include <mach/mach.h> #include "gdbthread.h" +struct darwin_exception_msg +{ + mach_msg_header_t header; + + /* Thread and task taking the exception. */ + mach_port_t thread_port; + mach_port_t task_port; + + /* Type of the exception. */ + exception_type_t ex_type; + + /* Machine dependent details. */ + mach_msg_type_number_t data_count; + integer_t ex_data[2]; +}; + +enum darwin_msg_state +{ + /* The thread is running. */ + DARWIN_RUNNING, + + /* The thread is stopped. */ + DARWIN_STOPPED, + + /* The thread has sent a message and waits for a reply. */ + DARWIN_MESSAGE +}; + +struct darwin_thread_info : public private_thread_info +{ + /* The thread port from a GDB point of view. */ + thread_t gdb_port = 0; + + /* The thread port from the inferior point of view. Not to be used inside + gdb except for get_ada_task_ptid. */ + thread_t inf_port = 0; + + /* Current message state. + If the kernel has sent a message it expects a reply and the inferior + can't be killed before. */ + enum darwin_msg_state msg_state = DARWIN_RUNNING; + + /* True if this thread is single-stepped. */ + bool single_step = false; + + /* True if a signal was manually sent to the thread. */ + bool signaled = false; + + /* The last exception received. */ + struct darwin_exception_msg event {}; +}; +typedef struct darwin_thread_info darwin_thread_t; + /* This needs to be overridden by the platform specific nat code. */ class darwin_nat_target : public inf_child_target @@ -59,6 +112,21 @@ bool supports_multi_process () override; ptid_t get_ada_task_ptid (long lwp, long thread) override; + +private: + ptid_t wait_1 (ptid_t, struct target_waitstatus *); + void check_new_threads (inferior *inf); + int decode_exception_message (mach_msg_header_t *hdr, + inferior **pinf, + darwin_thread_t **pthread); + ptid_t decode_message (mach_msg_header_t *hdr, + darwin_thread_t **pthread, + inferior **pinf, + target_waitstatus *status); + void stop_inferior (inferior *inf); + void init_thread_list (inferior *inf); + void ptrace_him (int pid); + int cancel_breakpoint (ptid_t ptid); }; /* Describe the mach exception handling state for a task. This state is saved @@ -83,59 +151,6 @@ mach_msg_type_number_t count = 0; }; -struct darwin_exception_msg -{ - mach_msg_header_t header; - - /* Thread and task taking the exception. */ - mach_port_t thread_port; - mach_port_t task_port; - - /* Type of the exception. */ - exception_type_t ex_type; - - /* Machine dependent details. */ - mach_msg_type_number_t data_count; - integer_t ex_data[2]; -}; - -enum darwin_msg_state -{ - /* The thread is running. */ - DARWIN_RUNNING, - - /* The thread is stopped. */ - DARWIN_STOPPED, - - /* The thread has sent a message and waits for a reply. */ - DARWIN_MESSAGE -}; - -struct darwin_thread_info : public private_thread_info -{ - /* The thread port from a GDB point of view. */ - thread_t gdb_port = 0; - - /* The thread port from the inferior point of view. Not to be used inside - gdb except for get_ada_task_ptid. */ - thread_t inf_port = 0; - - /* Current message state. - If the kernel has sent a message it expects a reply and the inferior - can't be killed before. */ - enum darwin_msg_state msg_state = DARWIN_RUNNING; - - /* True if this thread is single-stepped. */ - bool single_step = false; - - /* True if a signal was manually sent to the thread. */ - bool signaled = false; - - /* The last exception received. */ - struct darwin_exception_msg event {}; -}; -typedef struct darwin_thread_info darwin_thread_t; - static inline darwin_thread_info * get_darwin_thread_info (class thread_info *thread) { diff -Nru gdb-9.1/gdb/darwin-nat-info.c gdb-10.2/gdb/darwin-nat-info.c --- gdb-9.1/gdb/darwin-nat-info.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/darwin-nat-info.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Darwin support for GDB, the GNU debugger. - Copyright (C) 1997-2020 Free Software Foundation, Inc. + Copyright (C) 1997-2021 Free Software Foundation, Inc. Contributed by Apple Computer, Inc. @@ -838,8 +838,9 @@ } } +void _initialize_darwin_info_commands (); void -_initialize_darwin_info_commands (void) +_initialize_darwin_info_commands () { add_info ("mach-tasks", info_mach_tasks_command, _("Get list of tasks in system.")); diff -Nru gdb-9.1/gdb/data-directory/Makefile.in gdb-10.2/gdb/data-directory/Makefile.in --- gdb-9.1/gdb/data-directory/Makefile.in 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/data-directory/Makefile.in 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2010-2020 Free Software Foundation, Inc. +# Copyright (C) 2010-2021 Free Software Foundation, Inc. # Makefile for building a staged copy of the data-directory. # This file is part of GDB. @@ -63,7 +63,7 @@ sparc-linux.xml \ sparc64-linux.xml -SYSCALLS_FILES = gdb-syscalls.dtd freebsd.xml $(GEN_SYSCALLS_FILES) +SYSCALLS_FILES = gdb-syscalls.dtd freebsd.xml netbsd.xml $(GEN_SYSCALLS_FILES) PYTHON_DIR = python PYTHON_INSTALL_DIR = $(DESTDIR)$(GDB_DATADIR)/$(PYTHON_DIR) diff -Nru gdb-9.1/gdb/dbxread.c gdb-10.2/gdb/dbxread.c --- gdb-9.1/gdb/dbxread.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/dbxread.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Read dbx symbol tables and convert to internal format, for GDB. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -245,7 +245,7 @@ struct header_file_location { header_file_location (const char *name_, int instance_, - struct partial_symtab *pst_) + legacy_psymtab *pst_) : name (name_), instance (instance_), pst (pst_) @@ -254,7 +254,7 @@ const char *name; /* Name of header file */ int instance; /* See above */ - struct partial_symtab *pst; /* Partial symtab that has the + legacy_psymtab *pst; /* Partial symtab that has the BINCL/EINCL defs for this file. */ }; @@ -263,16 +263,16 @@ /* Local function prototypes. */ -static void read_ofile_symtab (struct objfile *, struct partial_symtab *); +static void read_ofile_symtab (struct objfile *, legacy_psymtab *); -static void dbx_read_symtab (struct partial_symtab *self, +static void dbx_read_symtab (legacy_psymtab *self, struct objfile *objfile); -static void dbx_psymtab_to_symtab_1 (struct objfile *, struct partial_symtab *); +static void dbx_expand_psymtab (legacy_psymtab *, struct objfile *); static void read_dbx_symtab (minimal_symbol_reader &, struct objfile *); -static struct partial_symtab *find_corresponding_bincl_psymtab (const char *, +static legacy_psymtab *find_corresponding_bincl_psymtab (const char *, int); static const char *dbx_next_symbol_text (struct objfile *); @@ -297,7 +297,7 @@ static void add_this_object_header_file (int); -static struct partial_symtab *start_psymtab (struct objfile *, const char *, +static legacy_psymtab *start_psymtab (struct objfile *, const char *, CORE_ADDR, int); /* Free up old header file tables. */ @@ -857,7 +857,7 @@ bincl in the list. Return the partial symtab associated with that header_file_location. */ -static struct partial_symtab * +static legacy_psymtab * find_corresponding_bincl_psymtab (const char *name, int instance) { for (const header_file_location &bincl : *bincl_list) @@ -866,7 +866,7 @@ return bincl.pst; repeated_header_complaint (name, symnum); - return (struct partial_symtab *) 0; + return (legacy_psymtab *) 0; } /* Set namestring based on nlist. If the string table index is invalid, @@ -951,7 +951,7 @@ static void read_dbx_symtab (minimal_symbol_reader &reader, struct objfile *objfile) { - struct gdbarch *gdbarch = get_objfile_arch (objfile); + struct gdbarch *gdbarch = objfile->arch (); struct external_nlist *bufp = 0; /* =0 avoids gcc -Wall glitch. */ struct internal_nlist nlist; CORE_ADDR text_addr; @@ -968,7 +968,7 @@ int data_sect_index; /* Current partial symtab. */ - struct partial_symtab *pst; + legacy_psymtab *pst; /* List of current psymtab's include files. */ const char **psymtab_include_list; @@ -976,7 +976,7 @@ int includes_used; /* Index within current psymtab dependency list. */ - struct partial_symtab **dependency_list; + legacy_psymtab **dependency_list; int dependencies_used, dependencies_allocated; text_addr = DBX_TEXT_ADDR (objfile); @@ -989,7 +989,7 @@ stringtab_global = DBX_STRINGTAB (objfile); - pst = (struct partial_symtab *) 0; + pst = (legacy_psymtab *) 0; includes_allocated = 30; includes_used = 0; @@ -999,8 +999,8 @@ dependencies_allocated = 30; dependencies_used = 0; dependency_list = - (struct partial_symtab **) alloca (dependencies_allocated * - sizeof (struct partial_symtab *)); + (legacy_psymtab **) alloca (dependencies_allocated * + sizeof (legacy_psymtab *)); /* Init bincl list */ std::vector<struct header_file_location> bincl_storage; @@ -1046,9 +1046,7 @@ /* If data_sect_index is still -1, that's okay. It's perfectly fine for the file to have no .data, no .bss, and no .text at all, if - it also has no global or static variables. If it does, we will - get an internal error from an ANOFFSET macro below when we try to - use data_sect_index. */ + it also has no global or static variables. */ for (symnum = 0; symnum < DBX_SYMCOUNT (objfile); symnum++) { @@ -1138,7 +1136,7 @@ ? nlist.n_value : pst->raw_text_high (), dependency_list, dependencies_used, textlow_not_set); - pst = (struct partial_symtab *) 0; + pst = (legacy_psymtab *) 0; includes_used = 0; dependencies_used = 0; has_line_numbers = 0; @@ -1253,7 +1251,7 @@ ? valu : pst->raw_text_high ()), dependency_list, dependencies_used, prev_textlow_not_set); - pst = (struct partial_symtab *) 0; + pst = (legacy_psymtab *) 0; includes_used = 0; dependencies_used = 0; has_line_numbers = 0; @@ -1436,12 +1434,13 @@ if (psymtab_language == language_cplus) { std::string name (namestring, p - namestring); - std::string new_name = cp_canonicalize_string (name.c_str ()); - if (!new_name.empty ()) + gdb::unique_xmalloc_ptr<char> new_name + = cp_canonicalize_string (name.c_str ()); + if (new_name != nullptr) { - sym_len = new_name.length (); + sym_len = strlen (new_name.get ()); sym_name = obstack_strdup (&objfile->objfile_obstack, - new_name); + new_name.get ()); } } @@ -1461,9 +1460,6 @@ switch (p[1]) { case 'S': - if (gdbarch_static_transform_name_p (gdbarch)) - gdbarch_static_transform_name (gdbarch, namestring); - add_psymbol_to_list (gdb::string_view (sym_name, sym_len), true, VAR_DOMAIN, LOC_STATIC, data_sect_index, @@ -1764,7 +1760,7 @@ /* Find the corresponding bincl and mark that psymtab on the psymtab dependency list. */ { - struct partial_symtab *needed_pst = + legacy_psymtab *needed_pst = find_corresponding_bincl_psymtab (namestring, nlist.n_value); /* If this include file was defined earlier in this file, @@ -1791,15 +1787,15 @@ dependency_list[dependencies_used++] = needed_pst; if (dependencies_used >= dependencies_allocated) { - struct partial_symtab **orig = dependency_list; + legacy_psymtab **orig = dependency_list; dependency_list = - (struct partial_symtab **) + (legacy_psymtab **) alloca ((dependencies_allocated *= 2) - * sizeof (struct partial_symtab *)); + * sizeof (legacy_psymtab *)); memcpy (dependency_list, orig, (dependencies_used - * sizeof (struct partial_symtab *))); + * sizeof (legacy_psymtab *))); #ifdef DEBUG_INFO fprintf_unfiltered (gdb_stderr, "Had to reallocate " @@ -1825,7 +1821,7 @@ symnum * symbol_size, (CORE_ADDR) 0, dependency_list, dependencies_used, textlow_not_set); - pst = (struct partial_symtab *) 0; + pst = (legacy_psymtab *) 0; includes_used = 0; dependencies_used = 0; has_line_numbers = 0; @@ -1901,17 +1897,17 @@ is the address relative to which its symbols are (incremental) or 0 (normal). */ -static struct partial_symtab * +static legacy_psymtab * start_psymtab (struct objfile *objfile, const char *filename, CORE_ADDR textlow, int ldsymoff) { - struct partial_symtab *result = - start_psymtab_common (objfile, filename, textlow); + legacy_psymtab *result = new legacy_psymtab (filename, objfile, textlow); result->read_symtab_private = XOBNEW (&objfile->objfile_obstack, struct symloc); LDSYMOFF (result) = ldsymoff; - result->read_symtab = dbx_read_symtab; + result->legacy_read_symtab = dbx_read_symtab; + result->legacy_expand_psymtab = dbx_expand_psymtab; SYMBOL_SIZE (result) = symbol_size; SYMBOL_OFFSET (result) = symbol_table_offset; STRING_OFFSET (result) = string_table_offset; @@ -1929,16 +1925,16 @@ FIXME: List variables and peculiarities of same. */ -struct partial_symtab * -dbx_end_psymtab (struct objfile *objfile, struct partial_symtab *pst, +legacy_psymtab * +dbx_end_psymtab (struct objfile *objfile, legacy_psymtab *pst, const char **include_list, int num_includes, int capping_symbol_offset, CORE_ADDR capping_text, - struct partial_symtab **dependency_list, + legacy_psymtab **dependency_list, int number_dependencies, int textlow_not_set) { int i; - struct gdbarch *gdbarch = get_objfile_arch (objfile); + struct gdbarch *gdbarch = objfile->arch (); if (capping_symbol_offset != -1) LDSYMLEN (pst) = capping_symbol_offset - LDSYMOFF (pst); @@ -2019,15 +2015,15 @@ pst->dependencies = objfile->partial_symtabs->allocate_dependencies (number_dependencies); memcpy (pst->dependencies, dependency_list, - number_dependencies * sizeof (struct partial_symtab *)); + number_dependencies * sizeof (legacy_psymtab *)); } else pst->dependencies = 0; for (i = 0; i < num_includes; i++) { - struct partial_symtab *subpst = - allocate_psymtab (include_list[i], objfile); + legacy_psymtab *subpst = + new legacy_psymtab (include_list[i], objfile); subpst->read_symtab_private = XOBNEW (&objfile->objfile_obstack, struct symloc); @@ -2041,7 +2037,8 @@ subpst->dependencies[0] = pst; subpst->number_of_dependencies = 1; - subpst->read_symtab = pst->read_symtab; + subpst->legacy_read_symtab = pst->legacy_read_symtab; + subpst->legacy_expand_psymtab = pst->legacy_expand_psymtab; } if (num_includes == 0 @@ -2050,15 +2047,14 @@ && pst->n_static_syms == 0 && has_line_numbers == 0) { - /* Throw away this psymtab, it's empty. We can't deallocate it, since - it is on the obstack, but we can forget to chain it on the list. */ + /* Throw away this psymtab, it's empty. */ /* Empty psymtabs happen as a result of header files which don't have any symbols in them. There can be a lot of them. But this check is wrong, in that a psymtab with N_SLINE entries but nothing else is not empty, but we don't realize that. Fixing that without slowing things down might be tricky. */ - discard_psymtab (objfile, pst); + objfile->partial_symtabs->discard_psymtab (pst); /* Indicate that psymtab was thrown away. */ pst = NULL; @@ -2067,35 +2063,12 @@ } static void -dbx_psymtab_to_symtab_1 (struct objfile *objfile, struct partial_symtab *pst) +dbx_expand_psymtab (legacy_psymtab *pst, struct objfile *objfile) { - int i; - - if (pst->readin) - { - fprintf_unfiltered (gdb_stderr, "Psymtab for %s already read in. " - "Shouldn't happen.\n", - pst->filename); - return; - } + gdb_assert (!pst->readin); /* Read in all partial symtabs on which this one is dependent. */ - for (i = 0; i < pst->number_of_dependencies; i++) - if (!pst->dependencies[i]->readin) - { - /* Inform about additional files that need to be read in. */ - if (info_verbose) - { - fputs_filtered (" ", gdb_stdout); - wrap_here (""); - fputs_filtered ("and ", gdb_stdout); - wrap_here (""); - printf_filtered ("%s...", pst->dependencies[i]->filename); - wrap_here (""); /* Flush output. */ - gdb_flush (gdb_stdout); - } - dbx_psymtab_to_symtab_1 (objfile, pst->dependencies[i]); - } + pst->expand_dependencies (objfile); if (LDSYMLEN (pst)) /* Otherwise it's a dummy. */ { @@ -2110,33 +2083,19 @@ read_ofile_symtab (objfile, pst); } - pst->readin = 1; + pst->readin = true; } /* Read in all of the symbols for a given psymtab for real. Be verbose about it if the user wants that. SELF is not NULL. */ static void -dbx_read_symtab (struct partial_symtab *self, struct objfile *objfile) +dbx_read_symtab (legacy_psymtab *self, struct objfile *objfile) { - if (self->readin) - { - fprintf_unfiltered (gdb_stderr, "Psymtab for %s already read in. " - "Shouldn't happen.\n", - self->filename); - return; - } + gdb_assert (!self->readin); if (LDSYMLEN (self) || self->number_of_dependencies) { - /* Print the message now, before reading the string table, - to avoid disconcerting pauses. */ - if (info_verbose) - { - printf_filtered ("Reading in symbols for %s...", self->filename); - gdb_flush (gdb_stdout); - } - next_symbol_text_func = dbx_next_symbol_text; { @@ -2151,23 +2110,19 @@ data_holder.reset (stabs_data); } - dbx_psymtab_to_symtab_1 (objfile, self); + self->expand_psymtab (objfile); } /* Match with global symbols. This only needs to be done once, after all of the symtabs and dependencies have been read in. */ scan_file_globals (objfile); - - /* Finish up the debug error message. */ - if (info_verbose) - printf_filtered ("done.\n"); } } /* Read in a defined section of a specific object file's symbols. */ static void -read_ofile_symtab (struct objfile *objfile, struct partial_symtab *pst) +read_ofile_symtab (struct objfile *objfile, legacy_psymtab *pst) { const char *namestring; struct external_nlist *bufp; @@ -2179,13 +2134,12 @@ int sym_size; /* Size of symbols to read */ CORE_ADDR text_offset; /* Start of text segment for symbols */ int text_size; /* Size of text segment for symbols */ - struct section_offsets *section_offsets; sym_offset = LDSYMOFF (pst); sym_size = LDSYMLEN (pst); text_offset = pst->text_low (objfile); text_size = pst->text_high (objfile) - pst->text_low (objfile); - section_offsets = objfile->section_offsets; + const section_offsets §ion_offsets = objfile->section_offsets; dbxread_objfile = objfile; @@ -2378,10 +2332,10 @@ void process_one_symbol (int type, int desc, CORE_ADDR valu, const char *name, - const struct section_offsets *section_offsets, + const section_offsets §ion_offsets, struct objfile *objfile, enum language language) { - struct gdbarch *gdbarch = get_objfile_arch (objfile); + struct gdbarch *gdbarch = objfile->arch (); struct context_stack *newobj; struct context_stack cstk; /* This remembers the address of the start of a function. It is @@ -2456,7 +2410,7 @@ cstk.start_addr, cstk.start_addr + valu); /* For C++, set the block's scope. */ - if (SYMBOL_LANGUAGE (cstk.name) == language_cplus) + if (cstk.name->language () == language_cplus) cp_set_block_scope (cstk.name, block, &objfile->objfile_obstack); /* May be switching to an assembler file which may not be using @@ -2469,7 +2423,7 @@ sline_found_in_function = 0; /* Relocate for dynamic loading. */ - valu += ANOFFSET (section_offsets, SECT_OFF_TEXT (objfile)); + valu += section_offsets[SECT_OFF_TEXT (objfile)]; valu = gdbarch_addr_bits_remove (gdbarch, valu); last_function_start = valu; @@ -2557,7 +2511,7 @@ case N_FN_SEQ: /* This kind of symbol indicates the start of an object file. Relocate for dynamic loading. */ - valu += ANOFFSET (section_offsets, SECT_OFF_TEXT (objfile)); + valu += section_offsets[SECT_OFF_TEXT (objfile)]; break; case N_SO: @@ -2565,7 +2519,7 @@ source file. Finish the symbol table of the previous source file (if any) and start accumulating a new symbol table. Relocate for dynamic loading. */ - valu += ANOFFSET (section_offsets, SECT_OFF_TEXT (objfile)); + valu += section_offsets[SECT_OFF_TEXT (objfile)]; n_opt_found = 0; @@ -2601,7 +2555,7 @@ sub-source-file, one whose contents were copied or included in the compilation of the main source file (whose name was given in the N_SO symbol). Relocate for dynamic loading. */ - valu += ANOFFSET (section_offsets, SECT_OFF_TEXT (objfile)); + valu += section_offsets[SECT_OFF_TEXT (objfile)]; start_subfile (name); break; @@ -2701,7 +2655,7 @@ symbol_file_add as addr (this is known to affect SunOS 4, and I suspect ELF too). Since there is no Ttext.text symbol, we can get addr from the text offset. */ - valu += ANOFFSET (section_offsets, SECT_OFF_TEXT (objfile)); + valu += section_offsets[SECT_OFF_TEXT (objfile)]; goto define_a_symbol; } } @@ -2723,22 +2677,22 @@ case_N_STSYM: /* Static symbol in data segment. */ case N_DSLINE: /* Source line number, data segment. */ - valu += ANOFFSET (section_offsets, SECT_OFF_DATA (objfile)); + valu += section_offsets[SECT_OFF_DATA (objfile)]; goto define_a_symbol; case_N_LCSYM: /* Static symbol in BSS segment. */ case N_BSLINE: /* Source line number, BSS segment. */ /* N_BROWS: overlaps with N_BSLINE. */ - valu += ANOFFSET (section_offsets, SECT_OFF_BSS (objfile)); + valu += section_offsets[SECT_OFF_BSS (objfile)]; goto define_a_symbol; case_N_ROSYM: /* Static symbol in read-only data segment. */ - valu += ANOFFSET (section_offsets, SECT_OFF_RODATA (objfile)); + valu += section_offsets[SECT_OFF_RODATA (objfile)]; goto define_a_symbol; case N_ENTRY: /* Alternate entry point. */ /* Relocate for dynamic loading. */ - valu += ANOFFSET (section_offsets, SECT_OFF_TEXT (objfile)); + valu += section_offsets[SECT_OFF_TEXT (objfile)]; goto define_a_symbol; /* The following symbol types we don't know how to process. @@ -2789,8 +2743,7 @@ /* Deal with the SunPRO 3.0 compiler which omits the address from N_FUN symbols. */ if (type == N_FUN - && valu == ANOFFSET (section_offsets, - SECT_OFF_TEXT (objfile)) + && valu == section_offsets[SECT_OFF_TEXT (objfile)] && gdbarch_sofun_address_maybe_missing (gdbarch)) { struct bound_minimal_symbol minsym @@ -2823,7 +2776,7 @@ cstk.start_addr, valu); /* For C++, set the block's scope. */ - if (SYMBOL_LANGUAGE (cstk.name) == language_cplus) + if (cstk.name->language () == language_cplus) cp_set_block_scope (cstk.name, block, &objfile->objfile_obstack); } @@ -3184,8 +3137,9 @@ &psym_functions }; +void _initialize_dbxread (); void -_initialize_dbxread (void) +_initialize_dbxread () { add_symtab_fns (bfd_target_aout_flavour, &aout_sym_fns); } diff -Nru gdb-9.1/gdb/dcache.c gdb-10.2/gdb/dcache.c --- gdb-9.1/gdb/dcache.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/dcache.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Caching code for GDB, the GNU debugger. - Copyright (C) 1992-2020 Free Software Foundation, Inc. + Copyright (C) 1992-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -670,22 +670,9 @@ target_dcache_invalidate (); } -static void -set_dcache_command (const char *arg, int from_tty) -{ - printf_unfiltered ( - "\"set dcache\" must be followed by the name of a subcommand.\n"); - help_list (dcache_set_list, "set dcache ", all_commands, gdb_stdout); -} - -static void -show_dcache_command (const char *args, int from_tty) -{ - cmd_show_list (dcache_show_list, from_tty, ""); -} - +void _initialize_dcache (); void -_initialize_dcache (void) +_initialize_dcache () { add_setshow_boolean_cmd ("remotecache", class_support, &dcache_enabled_p, _("\ @@ -707,12 +694,14 @@ summary of each line in the cache. With an argument, dump\"\n\ the contents of the given line.")); - add_prefix_cmd ("dcache", class_obscure, set_dcache_command, _("\ + add_basic_prefix_cmd ("dcache", class_obscure, _("\ Use this command to set number of lines in dcache and line-size."), - &dcache_set_list, "set dcache ", /*allow_unknown*/0, &setlist); - add_prefix_cmd ("dcache", class_obscure, show_dcache_command, _("\ + &dcache_set_list, "set dcache ", /*allow_unknown*/0, + &setlist); + add_show_prefix_cmd ("dcache", class_obscure, _("\ Show dcachesettings."), - &dcache_show_list, "show dcache ", /*allow_unknown*/0, &showlist); + &dcache_show_list, "show dcache ", /*allow_unknown*/0, + &showlist); add_setshow_zuinteger_cmd ("line-size", class_obscure, &dcache_line_size, _("\ diff -Nru gdb-9.1/gdb/dcache.h gdb-10.2/gdb/dcache.h --- gdb-9.1/gdb/dcache.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/dcache.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,7 +1,7 @@ /* Declarations for caching. Typically used by remote back ends for caching remote memory. - Copyright (C) 1992-2020 Free Software Foundation, Inc. + Copyright (C) 1992-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/debug.c gdb-10.2/gdb/debug.c --- gdb-9.1/gdb/debug.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/debug.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Debug printing functions. - Copyright (C) 2014-2020 Free Software Foundation, Inc. + Copyright (C) 2014-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -19,6 +19,8 @@ #include "defs.h" +#include "debug.h" + /* See gdbsupport/common-debug.h. */ void @@ -26,3 +28,14 @@ { vfprintf_unfiltered (gdb_stdlog, fmt, ap); } + +/* See debug.h. */ + +void +debug_prefixed_vprintf (const char *module, const char *func, const char *format, + va_list args) +{ + debug_printf ("[%s] %s: ", module, func); + debug_vprintf (format, args); + debug_printf ("\n"); +} diff -Nru gdb-9.1/gdb/debug.h gdb-10.2/gdb/debug.h --- gdb-9.1/gdb/debug.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/debug.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,32 @@ +/* Helpers to format and print debug statements + + Copyright (C) 2020-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef DEBUG_H +#define DEBUG_H + +/* Print a debug statement prefixed with the module and function name, and + with a newline at the end. */ + +void ATTRIBUTE_PRINTF (3, 0) +debug_prefixed_vprintf (const char *module, const char *func, const char *format, + va_list args); + +#endif /* DEBUG_H */ + + diff -Nru gdb-9.1/gdb/debuginfod-support.c gdb-10.2/gdb/debuginfod-support.c --- gdb-9.1/gdb/debuginfod-support.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/debuginfod-support.c 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,161 @@ +/* debuginfod utilities for GDB. + Copyright (C) 2020-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "defs.h" +#include <errno.h> +#include "cli/cli-style.h" +#include "gdbsupport/scoped_fd.h" +#include "debuginfod-support.h" + +#ifndef HAVE_LIBDEBUGINFOD +scoped_fd +debuginfod_source_query (const unsigned char *build_id, + int build_id_len, + const char *srcpath, + gdb::unique_xmalloc_ptr<char> *destname) +{ + return scoped_fd (-ENOSYS); +} + +scoped_fd +debuginfod_debuginfo_query (const unsigned char *build_id, + int build_id_len, + const char *filename, + gdb::unique_xmalloc_ptr<char> *destname) +{ + return scoped_fd (-ENOSYS); +} +#else +#include <elfutils/debuginfod.h> + +struct user_data +{ + user_data (const char *desc, const char *fname) + : desc (desc), fname (fname), has_printed (false) + { } + + const char * const desc; + const char * const fname; + bool has_printed; +}; + +static int +progressfn (debuginfod_client *c, long cur, long total) +{ + user_data *data = static_cast<user_data *> (debuginfod_get_user_data (c)); + + if (check_quit_flag ()) + { + printf_filtered ("Cancelling download of %s %ps...\n", + data->desc, + styled_string (file_name_style.style (), data->fname)); + return 1; + } + + if (!data->has_printed && total != 0) + { + /* Print this message only once. */ + data->has_printed = true; + printf_filtered ("Downloading %s %ps...\n", + data->desc, + styled_string (file_name_style.style (), data->fname)); + } + + return 0; +} + +static debuginfod_client * +debuginfod_init () +{ + debuginfod_client *c = debuginfod_begin (); + + if (c != nullptr) + debuginfod_set_progressfn (c, progressfn); + + return c; +} + +/* See debuginfod-support.h */ + +scoped_fd +debuginfod_source_query (const unsigned char *build_id, + int build_id_len, + const char *srcpath, + gdb::unique_xmalloc_ptr<char> *destname) +{ + if (getenv (DEBUGINFOD_URLS_ENV_VAR) == NULL) + return scoped_fd (-ENOSYS); + + debuginfod_client *c = debuginfod_init (); + + if (c == nullptr) + return scoped_fd (-ENOMEM); + + user_data data ("source file", srcpath); + + debuginfod_set_user_data (c, &data); + scoped_fd fd (debuginfod_find_source (c, + build_id, + build_id_len, + srcpath, + nullptr)); + + /* TODO: Add 'set debug debuginfod' command to control when error messages are shown. */ + if (fd.get () < 0 && fd.get () != -ENOENT) + printf_filtered (_("Download failed: %s. Continuing without source file %ps.\n"), + safe_strerror (-fd.get ()), + styled_string (file_name_style.style (), srcpath)); + else + destname->reset (xstrdup (srcpath)); + + debuginfod_end (c); + return fd; +} + +/* See debuginfod-support.h */ + +scoped_fd +debuginfod_debuginfo_query (const unsigned char *build_id, + int build_id_len, + const char *filename, + gdb::unique_xmalloc_ptr<char> *destname) +{ + if (getenv (DEBUGINFOD_URLS_ENV_VAR) == NULL) + return scoped_fd (-ENOSYS); + + debuginfod_client *c = debuginfod_init (); + + if (c == nullptr) + return scoped_fd (-ENOMEM); + + char *dname = nullptr; + user_data data ("separate debug info for", filename); + + debuginfod_set_user_data (c, &data); + scoped_fd fd (debuginfod_find_debuginfo (c, build_id, build_id_len, &dname)); + + if (fd.get () < 0 && fd.get () != -ENOENT) + printf_filtered (_("Download failed: %s. Continuing without debug info for %ps.\n"), + safe_strerror (-fd.get ()), + styled_string (file_name_style.style (), filename)); + + destname->reset (dname); + debuginfod_end (c); + return fd; +} +#endif diff -Nru gdb-9.1/gdb/debuginfod-support.h gdb-10.2/gdb/debuginfod-support.h --- gdb-9.1/gdb/debuginfod-support.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/debuginfod-support.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,62 @@ +/* debuginfod utilities for GDB. + Copyright (C) 2020-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef DEBUGINFOD_SUPPORT_H +#define DEBUGINFOD_SUPPORT_H + +/* Query debuginfod servers for a source file associated with an + executable with BUILD_ID. BUILD_ID can be given as a binary blob or + a null-terminated string. If given as a binary blob, BUILD_ID_LEN + should be the number of bytes. If given as a null-terminated string, + BUILD_ID_LEN should be 0. + + SRC_PATH should be the source file's absolute path that includes the + compilation directory of the CU associated with the source file. + For example if a CU's compilation directory is `/my/build` and the + source file path is `/my/source/foo.c`, then SRC_PATH should be + `/my/build/../source/foo.c`. + + If the file is successfully retrieved, its path on the local machine + is stored in DESTNAME. If GDB is not built with debuginfod, this + function returns -ENOSYS. */ + +extern scoped_fd +debuginfod_source_query (const unsigned char *build_id, + int build_id_len, + const char *src_path, + gdb::unique_xmalloc_ptr<char> *destname); + +/* Query debuginfod servers for a debug info file with BUILD_ID. + BUILD_ID can be given as a binary blob or a null-terminated string. + If given as a binary blob, BUILD_ID_LEN should be the number of bytes. + If given as a null-terminated string, BUILD_ID_LEN should be 0. + + FILENAME should be the name or path of the main binary associated with + the separate debug info. It is used for printing messages to the user. + + If the file is successfully retrieved, its path on the local machine + is stored in DESTNAME. If GDB is not built with debuginfod, this + function returns -ENOSYS. */ + +extern scoped_fd +debuginfod_debuginfo_query (const unsigned char *build_id, + int build_id_len, + const char *filename, + gdb::unique_xmalloc_ptr<char> *destname); + +#endif /* DEBUGINFOD_SUPPORT_H */ diff -Nru gdb-9.1/gdb/defs.h gdb-10.2/gdb/defs.h --- gdb-9.1/gdb/defs.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/defs.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,7 +1,7 @@ /* *INDENT-OFF* */ /* ATTRIBUTE_PRINTF confuses indent, avoid running it for now. */ /* Basic, host-specific, and target-specific definitions for GDB. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -27,6 +27,15 @@ #include "gdbsupport/common-defs.h" +#undef PACKAGE +#undef PACKAGE_NAME +#undef PACKAGE_VERSION +#undef PACKAGE_STRING +#undef PACKAGE_TARNAME + +#include <config.h> +#include "bfd.h" + #include <sys/types.h> #include <limits.h> @@ -469,37 +478,6 @@ extern int longest_to_int (LONGEST); -/* * List of known OS ABIs. If you change this, make sure to update the - table in osabi.c. */ -enum gdb_osabi -{ - GDB_OSABI_UNKNOWN = 0, /* keep this zero */ - GDB_OSABI_NONE, - - GDB_OSABI_SVR4, - GDB_OSABI_HURD, - GDB_OSABI_SOLARIS, - GDB_OSABI_LINUX, - GDB_OSABI_FREEBSD, - GDB_OSABI_NETBSD, - GDB_OSABI_OPENBSD, - GDB_OSABI_WINCE, - GDB_OSABI_GO32, - GDB_OSABI_QNXNTO, - GDB_OSABI_CYGWIN, - GDB_OSABI_AIX, - GDB_OSABI_DICOS, - GDB_OSABI_DARWIN, - GDB_OSABI_SYMBIAN, - GDB_OSABI_OPENVMS, - GDB_OSABI_LYNXOS178, - GDB_OSABI_NEWLIB, - GDB_OSABI_SDE, - GDB_OSABI_PIKEOS, - - GDB_OSABI_INVALID /* keep this last */ -}; - /* Enumerate the requirements a symbol has in order to be evaluated. These are listed in order of "strength" -- a later entry subsumes earlier ones. This fine-grained distinction is important because diff -Nru gdb-9.1/gdb/d-exp.c gdb-10.2/gdb/d-exp.c --- gdb-9.1/gdb/d-exp.c 2020-02-08 12:54:11.000000000 +0000 +++ gdb-10.2/gdb/d-exp.c 2021-04-25 04:10:37.000000000 +0000 @@ -1,8 +1,9 @@ -/* A Bison parser, made by GNU Bison 3.0.4. */ +/* A Bison parser, made by GNU Bison 3.5.1. */ /* Bison implementation for Yacc-like parsers in C - Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc. + Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2020 Free Software Foundation, + Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -40,11 +41,14 @@ define necessary library symbols; they are noted "INFRINGES ON USER NAME SPACE" below. */ +/* Undocumented macros, especially those whose name start with YY_, + are private implementation details. Do not rely on them. */ + /* Identify Bison output. */ #define YYBISON 1 /* Bison version. */ -#define YYBISON_VERSION "3.0.4" +#define YYBISON_VERSION "3.5.1" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" @@ -61,8 +65,8 @@ -/* Copy the first part of user declarations. */ -#line 39 "d-exp.y" /* yacc.c:339 */ +/* First part of user prologue. */ +#line 39 "d-exp.y" #include "defs.h" @@ -105,13 +109,26 @@ static int type_aggregate_p (struct type *); -#line 109 "d-exp.c.tmp" /* yacc.c:339 */ +#line 113 "d-exp.c.tmp" +# ifndef YY_CAST +# ifdef __cplusplus +# define YY_CAST(Type, Val) static_cast<Type> (Val) +# define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast<Type> (Val) +# else +# define YY_CAST(Type, Val) ((Type) (Val)) +# define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val)) +# endif +# endif # ifndef YY_NULLPTRPTR -# if defined __cplusplus && 201103L <= __cplusplus -# define YY_NULLPTRPTR nullptr +# if defined __cplusplus +# if 201103L <= __cplusplus +# define YY_NULLPTRPTR nullptr +# else +# define YY_NULLPTRPTR 0 +# endif # else -# define YY_NULLPTRPTR 0 +# define YY_NULLPTRPTR ((void*)0) # endif # endif @@ -237,10 +254,9 @@ /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED - union YYSTYPE { -#line 87 "d-exp.y" /* yacc.c:355 */ +#line 87 "d-exp.y" struct { LONGEST val; @@ -262,9 +278,9 @@ struct stoken_vector svec; -#line 266 "d-exp.c.tmp" /* yacc.c:355 */ -}; +#line 282 "d-exp.c.tmp" +}; typedef union YYSTYPE YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define YYSTYPE_IS_DECLARED 1 @@ -277,41 +293,89 @@ -/* Copy the second part of user declarations. */ -#line 108 "d-exp.y" /* yacc.c:358 */ +/* Second part of user prologue. */ +#line 108 "d-exp.y" /* YYSTYPE gets defined by %union */ static int parse_number (struct parser_state *, const char *, int, int, YYSTYPE *); -#line 288 "d-exp.c.tmp" /* yacc.c:358 */ +#line 304 "d-exp.c.tmp" + #ifdef short # undef short #endif -#ifdef YYTYPE_UINT8 -typedef YYTYPE_UINT8 yytype_uint8; -#else -typedef unsigned char yytype_uint8; +/* On compilers that do not define __PTRDIFF_MAX__ etc., make sure + <limits.h> and (if available) <stdint.h> are included + so that the code can choose integer types of a good width. */ + +#ifndef __PTRDIFF_MAX__ +# include <limits.h> /* INFRINGES ON USER NAME SPACE */ +# if defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__ +# include <stdint.h> /* INFRINGES ON USER NAME SPACE */ +# define YY_STDINT_H +# endif #endif -#ifdef YYTYPE_INT8 -typedef YYTYPE_INT8 yytype_int8; +/* Narrow types that promote to a signed type and that can represent a + signed or unsigned integer of at least N bits. In tables they can + save space and decrease cache pressure. Promoting to a signed type + helps avoid bugs in integer arithmetic. */ + +#ifdef __INT_LEAST8_MAX__ +typedef __INT_LEAST8_TYPE__ yytype_int8; +#elif defined YY_STDINT_H +typedef int_least8_t yytype_int8; #else typedef signed char yytype_int8; #endif -#ifdef YYTYPE_UINT16 -typedef YYTYPE_UINT16 yytype_uint16; +#ifdef __INT_LEAST16_MAX__ +typedef __INT_LEAST16_TYPE__ yytype_int16; +#elif defined YY_STDINT_H +typedef int_least16_t yytype_int16; #else -typedef unsigned short int yytype_uint16; +typedef short yytype_int16; #endif -#ifdef YYTYPE_INT16 -typedef YYTYPE_INT16 yytype_int16; +#if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__ +typedef __UINT_LEAST8_TYPE__ yytype_uint8; +#elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \ + && UINT_LEAST8_MAX <= INT_MAX) +typedef uint_least8_t yytype_uint8; +#elif !defined __UINT_LEAST8_MAX__ && UCHAR_MAX <= INT_MAX +typedef unsigned char yytype_uint8; #else -typedef short int yytype_int16; +typedef short yytype_uint8; +#endif + +#if defined __UINT_LEAST16_MAX__ && __UINT_LEAST16_MAX__ <= __INT_MAX__ +typedef __UINT_LEAST16_TYPE__ yytype_uint16; +#elif (!defined __UINT_LEAST16_MAX__ && defined YY_STDINT_H \ + && UINT_LEAST16_MAX <= INT_MAX) +typedef uint_least16_t yytype_uint16; +#elif !defined __UINT_LEAST16_MAX__ && USHRT_MAX <= INT_MAX +typedef unsigned short yytype_uint16; +#else +typedef int yytype_uint16; +#endif + +#ifndef YYPTRDIFF_T +# if defined __PTRDIFF_TYPE__ && defined __PTRDIFF_MAX__ +# define YYPTRDIFF_T __PTRDIFF_TYPE__ +# define YYPTRDIFF_MAXIMUM __PTRDIFF_MAX__ +# elif defined PTRDIFF_MAX +# ifndef ptrdiff_t +# include <stddef.h> /* INFRINGES ON USER NAME SPACE */ +# endif +# define YYPTRDIFF_T ptrdiff_t +# define YYPTRDIFF_MAXIMUM PTRDIFF_MAX +# else +# define YYPTRDIFF_T long +# define YYPTRDIFF_MAXIMUM LONG_MAX +# endif #endif #ifndef YYSIZE_T @@ -319,15 +383,27 @@ # define YYSIZE_T __SIZE_TYPE__ # elif defined size_t # define YYSIZE_T size_t -# elif ! defined YYSIZE_T +# elif defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__ # include <stddef.h> /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # else -# define YYSIZE_T unsigned int +# define YYSIZE_T unsigned # endif #endif -#define YYSIZE_MAXIMUM ((YYSIZE_T) -1) +#define YYSIZE_MAXIMUM \ + YY_CAST (YYPTRDIFF_T, \ + (YYPTRDIFF_MAXIMUM < YY_CAST (YYSIZE_T, -1) \ + ? YYPTRDIFF_MAXIMUM \ + : YY_CAST (YYSIZE_T, -1))) + +#define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X)) + +/* Stored state numbers (used for stacks). */ +typedef yytype_uint8 yy_state_t; + +/* State numbers in computations. */ +typedef int yy_state_fast_t; #ifndef YY_ # if defined YYENABLE_NLS && YYENABLE_NLS @@ -341,30 +417,19 @@ # endif #endif -#ifndef YY_ATTRIBUTE -# if (defined __GNUC__ \ - && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__))) \ - || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C -# define YY_ATTRIBUTE(Spec) __attribute__(Spec) +#ifndef YY_ATTRIBUTE_PURE +# if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__) +# define YY_ATTRIBUTE_PURE __attribute__ ((__pure__)) # else -# define YY_ATTRIBUTE(Spec) /* empty */ +# define YY_ATTRIBUTE_PURE # endif #endif -#ifndef YY_ATTRIBUTE_PURE -# define YY_ATTRIBUTE_PURE YY_ATTRIBUTE ((__pure__)) -#endif - #ifndef YY_ATTRIBUTE_UNUSED -# define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__)) -#endif - -#if !defined _Noreturn \ - && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112) -# if defined _MSC_VER && 1200 <= _MSC_VER -# define _Noreturn __declspec (noreturn) +# if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__) +# define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__)) # else -# define _Noreturn YY_ATTRIBUTE ((__noreturn__)) +# define YY_ATTRIBUTE_UNUSED # endif #endif @@ -375,13 +440,13 @@ # define YYUSE(E) /* empty */ #endif -#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ +#if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ /* Suppress an incorrect diagnostic about yylval being uninitialized. */ -# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ - _Pragma ("GCC diagnostic push") \ - _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\ +# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ + _Pragma ("GCC diagnostic push") \ + _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \ _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") -# define YY_IGNORE_MAYBE_UNINITIALIZED_END \ +# define YY_IGNORE_MAYBE_UNINITIALIZED_END \ _Pragma ("GCC diagnostic pop") #else # define YY_INITIAL_VALUE(Value) Value @@ -394,6 +459,20 @@ # define YY_INITIAL_VALUE(Value) /* Nothing. */ #endif +#if defined __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__ +# define YY_IGNORE_USELESS_CAST_BEGIN \ + _Pragma ("GCC diagnostic push") \ + _Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"") +# define YY_IGNORE_USELESS_CAST_END \ + _Pragma ("GCC diagnostic pop") +#endif +#ifndef YY_IGNORE_USELESS_CAST_BEGIN +# define YY_IGNORE_USELESS_CAST_BEGIN +# define YY_IGNORE_USELESS_CAST_END +#endif + + +#define YY_ASSERT(E) ((void) (0 && (E))) #if ! defined yyoverflow || YYERROR_VERBOSE @@ -469,17 +548,17 @@ /* A type that is properly aligned for any stack member. */ union yyalloc { - yytype_int16 yyss_alloc; + yy_state_t yyss_alloc; YYSTYPE yyvs_alloc; }; /* The size of the maximum gap between one aligned stack and the next. */ -# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) +# define YYSTACK_GAP_MAXIMUM (YYSIZEOF (union yyalloc) - 1) /* The size of an array large to enough to hold all stacks, each with N elements. */ # define YYSTACK_BYTES(N) \ - ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ + ((N) * (YYSIZEOF (yy_state_t) + YYSIZEOF (YYSTYPE)) \ + YYSTACK_GAP_MAXIMUM) # define YYCOPY_NEEDED 1 @@ -492,11 +571,11 @@ # define YYSTACK_RELOCATE(Stack_alloc, Stack) \ do \ { \ - YYSIZE_T yynewbytes; \ + YYPTRDIFF_T yynewbytes; \ YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ Stack = &yyptr->Stack_alloc; \ - yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ - yyptr += yynewbytes / sizeof (*yyptr); \ + yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \ + yyptr += yynewbytes / YYSIZEOF (*yyptr); \ } \ while (0) @@ -508,12 +587,12 @@ # ifndef YYCOPY # if defined __GNUC__ && 1 < __GNUC__ # define YYCOPY(Dst, Src, Count) \ - __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src))) + __builtin_memcpy (Dst, Src, YY_CAST (YYSIZE_T, (Count)) * sizeof (*(Src))) # else # define YYCOPY(Dst, Src, Count) \ do \ { \ - YYSIZE_T yyi; \ + YYPTRDIFF_T yyi; \ for (yyi = 0; yyi < (Count); yyi++) \ (Dst)[yyi] = (Src)[yyi]; \ } \ @@ -536,17 +615,18 @@ /* YYNSTATES -- Number of states. */ #define YYNSTATES 169 -/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned - by yylex, with out-of-bounds checking. */ #define YYUNDEFTOK 2 #define YYMAXUTOK 304 + +/* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM + as returned by yylex, with out-of-bounds checking. */ #define YYTRANSLATE(YYX) \ - ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) + (0 <= (YYX) && (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) /* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM - as returned by yylex, without out-of-bounds checking. */ -static const yytype_uint8 yytranslate[] = + as returned by yylex. */ +static const yytype_int8 yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -583,7 +663,7 @@ #if YYDEBUG /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ -static const yytype_uint16 yyrline[] = +static const yytype_int16 yyrline[] = { 0, 181, 181, 182, 188, 192, 193, 198, 199, 201, 208, 209, 214, 215, 220, 221, 226, 227, 232, 233, @@ -632,7 +712,7 @@ # ifdef YYPRINT /* YYTOKNUM[NUM] -- (External) token number corresponding to the (internal) symbol number NUM (which must be that of a token). */ -static const yytype_uint16 yytoknum[] = +static const yytype_int16 yytoknum[] = { 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, @@ -645,14 +725,14 @@ }; # endif -#define YYPACT_NINF -91 +#define YYPACT_NINF (-91) -#define yypact_value_is_default(Yystate) \ - (!!((Yystate) == (-91))) +#define yypact_value_is_default(Yyn) \ + ((Yyn) == YYPACT_NINF) -#define YYTABLE_NINF -1 +#define YYTABLE_NINF (-1) -#define yytable_value_is_error(Yytable_value) \ +#define yytable_value_is_error(Yyn) \ 0 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing @@ -681,7 +761,7 @@ /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. Performed when YYTABLE does not specify something else to do. Zero means the default is an error. */ -static const yytype_uint8 yydefact[] = +static const yytype_int8 yydefact[] = { 0, 94, 104, 83, 87, 88, 89, 95, 85, 86, 84, 0, 0, 82, 0, 0, 0, 0, 0, 0, @@ -775,7 +855,7 @@ /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ -static const yytype_uint8 yystos[] = +static const yytype_int8 yystos[] = { 0, 3, 5, 7, 8, 9, 10, 11, 14, 15, 16, 18, 20, 34, 43, 52, 53, 54, 60, 61, @@ -797,7 +877,7 @@ }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ -static const yytype_uint8 yyr1[] = +static const yytype_int8 yyr1[] = { 0, 71, 72, 72, 73, 74, 74, 75, 75, 75, 76, 76, 77, 77, 78, 78, 79, 79, 80, 80, @@ -813,7 +893,7 @@ }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ -static const yytype_uint8 yyr2[] = +static const yytype_int8 yyr2[] = { 0, 2, 1, 1, 1, 1, 3, 1, 3, 3, 1, 5, 1, 3, 1, 3, 1, 3, 1, 3, @@ -841,22 +921,22 @@ #define YYRECOVERING() (!!yyerrstatus) -#define YYBACKUP(Token, Value) \ -do \ - if (yychar == YYEMPTY) \ - { \ - yychar = (Token); \ - yylval = (Value); \ - YYPOPSTACK (yylen); \ - yystate = *yyssp; \ - goto yybackup; \ - } \ - else \ - { \ - yyerror (YY_("syntax error: cannot back up")); \ - YYERROR; \ - } \ -while (0) +#define YYBACKUP(Token, Value) \ + do \ + if (yychar == YYEMPTY) \ + { \ + yychar = (Token); \ + yylval = (Value); \ + YYPOPSTACK (yylen); \ + yystate = *yyssp; \ + goto yybackup; \ + } \ + else \ + { \ + yyerror (YY_("syntax error: cannot back up")); \ + YYERROR; \ + } \ + while (0) /* Error token number */ #define YYTERROR 1 @@ -896,37 +976,39 @@ } while (0) -/*----------------------------------------. -| Print this symbol's value on YYOUTPUT. | -`----------------------------------------*/ +/*-----------------------------------. +| Print this symbol's value on YYO. | +`-----------------------------------*/ static void -yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) +yy_symbol_value_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep) { - FILE *yyo = yyoutput; - YYUSE (yyo); + FILE *yyoutput = yyo; + YYUSE (yyoutput); if (!yyvaluep) return; # ifdef YYPRINT if (yytype < YYNTOKENS) - YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); + YYPRINT (yyo, yytoknum[yytype], *yyvaluep); # endif + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN YYUSE (yytype); + YY_IGNORE_MAYBE_UNINITIALIZED_END } -/*--------------------------------. -| Print this symbol on YYOUTPUT. | -`--------------------------------*/ +/*---------------------------. +| Print this symbol on YYO. | +`---------------------------*/ static void -yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) +yy_symbol_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep) { - YYFPRINTF (yyoutput, "%s %s (", + YYFPRINTF (yyo, "%s %s (", yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]); - yy_symbol_value_print (yyoutput, yytype, yyvaluep); - YYFPRINTF (yyoutput, ")"); + yy_symbol_value_print (yyo, yytype, yyvaluep); + YYFPRINTF (yyo, ")"); } /*------------------------------------------------------------------. @@ -935,7 +1017,7 @@ `------------------------------------------------------------------*/ static void -yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop) +yy_stack_print (yy_state_t *yybottom, yy_state_t *yytop) { YYFPRINTF (stderr, "Stack now"); for (; yybottom <= yytop; yybottom++) @@ -958,20 +1040,20 @@ `------------------------------------------------*/ static void -yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule) +yy_reduce_print (yy_state_t *yyssp, YYSTYPE *yyvsp, int yyrule) { - unsigned long int yylno = yyrline[yyrule]; + int yylno = yyrline[yyrule]; int yynrhs = yyr2[yyrule]; int yyi; - YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", + YYFPRINTF (stderr, "Reducing stack by rule %d (line %d):\n", yyrule - 1, yylno); /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { YYFPRINTF (stderr, " $%d = ", yyi + 1); yy_symbol_print (stderr, - yystos[yyssp[yyi + 1 - yynrhs]], - &(yyvsp[(yyi + 1) - (yynrhs)]) + yystos[+yyssp[yyi + 1 - yynrhs]], + &yyvsp[(yyi + 1) - (yynrhs)] ); YYFPRINTF (stderr, "\n"); } @@ -1015,13 +1097,13 @@ # ifndef yystrlen # if defined __GLIBC__ && defined _STRING_H -# define yystrlen strlen +# define yystrlen(S) (YY_CAST (YYPTRDIFF_T, strlen (S))) # else /* Return the length of YYSTR. */ -static YYSIZE_T +static YYPTRDIFF_T yystrlen (const char *yystr) { - YYSIZE_T yylen; + YYPTRDIFF_T yylen; for (yylen = 0; yystr[yylen]; yylen++) continue; return yylen; @@ -1057,12 +1139,12 @@ backslash-backslash). YYSTR is taken from yytname. If YYRES is null, do not copy; instead, return the length of what the result would have been. */ -static YYSIZE_T +static YYPTRDIFF_T yytnamerr (char *yyres, const char *yystr) { if (*yystr == '"') { - YYSIZE_T yyn = 0; + YYPTRDIFF_T yyn = 0; char const *yyp = yystr; for (;;) @@ -1075,7 +1157,10 @@ case '\\': if (*++yyp != '\\') goto do_not_strip_quotes; - /* Fall through. */ + else + goto append; + + append: default: if (yyres) yyres[yyn] = *yyp; @@ -1090,10 +1175,10 @@ do_not_strip_quotes: ; } - if (! yyres) + if (yyres) + return yystpcpy (yyres, yystr) - yyres; + else return yystrlen (yystr); - - return yystpcpy (yyres, yystr) - yyres; } # endif @@ -1106,19 +1191,19 @@ *YYMSG_ALLOC to the required number of bytes. Return 2 if the required number of bytes is too large to store. */ static int -yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, - yytype_int16 *yyssp, int yytoken) +yysyntax_error (YYPTRDIFF_T *yymsg_alloc, char **yymsg, + yy_state_t *yyssp, int yytoken) { - YYSIZE_T yysize0 = yytnamerr (YY_NULLPTRPTR, yytname[yytoken]); - YYSIZE_T yysize = yysize0; enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; /* Internationalized format string. */ const char *yyformat = YY_NULLPTRPTR; - /* Arguments of yyformat. */ + /* Arguments of yyformat: reported tokens (one for the "unexpected", + one per "expected"). */ char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; - /* Number of reported tokens (one for the "unexpected", one per - "expected"). */ + /* Actual size of YYARG. */ int yycount = 0; + /* Cumulated lengths of YYARG. */ + YYPTRDIFF_T yysize = 0; /* There are many possibilities here to consider: - If this state is a consistent state with a default action, then @@ -1145,7 +1230,9 @@ */ if (yytoken != YYEMPTY) { - int yyn = yypact[*yyssp]; + int yyn = yypact[+*yyssp]; + YYPTRDIFF_T yysize0 = yytnamerr (YY_NULLPTRPTR, yytname[yytoken]); + yysize = yysize0; yyarg[yycount++] = yytname[yytoken]; if (!yypact_value_is_default (yyn)) { @@ -1170,11 +1257,12 @@ } yyarg[yycount++] = yytname[yyx]; { - YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTRPTR, yytname[yyx]); - if (! (yysize <= yysize1 - && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) + YYPTRDIFF_T yysize1 + = yysize + yytnamerr (YY_NULLPTRPTR, yytname[yyx]); + if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM) + yysize = yysize1; + else return 2; - yysize = yysize1; } } } @@ -1186,6 +1274,7 @@ case N: \ yyformat = S; \ break + default: /* Avoid compiler warnings. */ YYCASE_(0, YY_("syntax error")); YYCASE_(1, YY_("syntax error, unexpected %s")); YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); @@ -1196,10 +1285,13 @@ } { - YYSIZE_T yysize1 = yysize + yystrlen (yyformat); - if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) + /* Don't count the "%s"s in the final size, but reserve room for + the terminator. */ + YYPTRDIFF_T yysize1 = yysize + (yystrlen (yyformat) - 2 * yycount) + 1; + if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM) + yysize = yysize1; + else return 2; - yysize = yysize1; } if (*yymsg_alloc < yysize) @@ -1225,8 +1317,8 @@ } else { - yyp++; - yyformat++; + ++yyp; + ++yyformat; } } return 0; @@ -1269,7 +1361,7 @@ int yyparse (void) { - int yystate; + yy_state_fast_t yystate; /* Number of tokens to shift before error messages enabled. */ int yyerrstatus; @@ -1281,16 +1373,16 @@ to xreallocate them elsewhere. */ /* The state stack. */ - yytype_int16 yyssa[YYINITDEPTH]; - yytype_int16 *yyss; - yytype_int16 *yyssp; + yy_state_t yyssa[YYINITDEPTH]; + yy_state_t *yyss; + yy_state_t *yyssp; /* The semantic value stack. */ YYSTYPE yyvsa[YYINITDEPTH]; YYSTYPE *yyvs; YYSTYPE *yyvsp; - YYSIZE_T yystacksize; + YYPTRDIFF_T yystacksize; int yyn; int yyresult; @@ -1304,7 +1396,7 @@ /* Buffer for error messages, and its allocated size. */ char yymsgbuf[128]; char *yymsg = yymsgbuf; - YYSIZE_T yymsg_alloc = sizeof yymsgbuf; + YYPTRDIFF_T yymsg_alloc = sizeof yymsgbuf; #endif #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) @@ -1325,46 +1417,54 @@ yychar = YYEMPTY; /* Cause a token to be read. */ goto yysetstate; + /*------------------------------------------------------------. -| yynewstate -- Push a new state, which is found in yystate. | +| yynewstate -- push a new state, which is found in yystate. | `------------------------------------------------------------*/ - yynewstate: +yynewstate: /* In all cases, when you get here, the value and location stacks have just been pushed. So pushing a state here evens the stacks. */ yyssp++; - yysetstate: - *yyssp = yystate; + +/*--------------------------------------------------------------------. +| yysetstate -- set current state (the top of the stack) to yystate. | +`--------------------------------------------------------------------*/ +yysetstate: + YYDPRINTF ((stderr, "Entering state %d\n", yystate)); + YY_ASSERT (0 <= yystate && yystate < YYNSTATES); + YY_IGNORE_USELESS_CAST_BEGIN + *yyssp = YY_CAST (yy_state_t, yystate); + YY_IGNORE_USELESS_CAST_END if (yyss + yystacksize - 1 <= yyssp) +#if !defined yyoverflow && !defined YYSTACK_RELOCATE + goto yyexhaustedlab; +#else { /* Get the current used size of the three stacks, in elements. */ - YYSIZE_T yysize = yyssp - yyss + 1; + YYPTRDIFF_T yysize = yyssp - yyss + 1; -#ifdef yyoverflow +# if defined yyoverflow { /* Give user a chance to xreallocate the stack. Use copies of these so that the &'s don't force the real ones into memory. */ + yy_state_t *yyss1 = yyss; YYSTYPE *yyvs1 = yyvs; - yytype_int16 *yyss1 = yyss; /* Each stack pointer address is followed by the size of the data in use in that stack, in bytes. This used to be a conditional around just the two extra args, but that might be undefined if yyoverflow is a macro. */ yyoverflow (YY_("memory exhausted"), - &yyss1, yysize * sizeof (*yyssp), - &yyvs1, yysize * sizeof (*yyvsp), + &yyss1, yysize * YYSIZEOF (*yyssp), + &yyvs1, yysize * YYSIZEOF (*yyvsp), &yystacksize); - yyss = yyss1; yyvs = yyvs1; } -#else /* no yyoverflow */ -# ifndef YYSTACK_RELOCATE - goto yyexhaustedlab; -# else +# else /* defined YYSTACK_RELOCATE */ /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) goto yyexhaustedlab; @@ -1373,42 +1473,43 @@ yystacksize = YYMAXDEPTH; { - yytype_int16 *yyss1 = yyss; + yy_state_t *yyss1 = yyss; union yyalloc *yyptr = - (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); + YY_CAST (union yyalloc *, + YYSTACK_ALLOC (YY_CAST (YYSIZE_T, YYSTACK_BYTES (yystacksize)))); if (! yyptr) goto yyexhaustedlab; YYSTACK_RELOCATE (yyss_alloc, yyss); YYSTACK_RELOCATE (yyvs_alloc, yyvs); -# undef YYSTACK_RELOCATE +# undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); } # endif -#endif /* no yyoverflow */ yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; - YYDPRINTF ((stderr, "Stack size increased to %lu\n", - (unsigned long int) yystacksize)); + YY_IGNORE_USELESS_CAST_BEGIN + YYDPRINTF ((stderr, "Stack size increased to %ld\n", + YY_CAST (long, yystacksize))); + YY_IGNORE_USELESS_CAST_END if (yyss + yystacksize - 1 <= yyssp) YYABORT; } - - YYDPRINTF ((stderr, "Entering state %d\n", yystate)); +#endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */ if (yystate == YYFINAL) YYACCEPT; goto yybackup; + /*-----------. | yybackup. | `-----------*/ yybackup: - /* Do appropriate processing given the current state. Read a lookahead token if we need one and don't already have one. */ @@ -1458,15 +1559,13 @@ /* Shift the lookahead token. */ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); - - /* Discard the shifted token. */ - yychar = YYEMPTY; - yystate = yyn; YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; YY_IGNORE_MAYBE_UNINITIALIZED_END + /* Discard the shifted token. */ + yychar = YYEMPTY; goto yynewstate; @@ -1481,7 +1580,7 @@ /*-----------------------------. -| yyreduce -- Do a reduction. | +| yyreduce -- do a reduction. | `-----------------------------*/ yyreduce: /* yyn is the number of a rule to reduce with. */ @@ -1501,312 +1600,312 @@ YY_REDUCE_PRINT (yyn); switch (yyn) { - case 6: -#line 194 "d-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_COMMA); } -#line 1509 "d-exp.c.tmp" /* yacc.c:1646 */ + case 6: +#line 194 "d-exp.y" + { write_exp_elt_opcode (pstate, BINOP_COMMA); } +#line 1608 "d-exp.c.tmp" break; case 8: -#line 200 "d-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_ASSIGN); } -#line 1515 "d-exp.c.tmp" /* yacc.c:1646 */ +#line 200 "d-exp.y" + { write_exp_elt_opcode (pstate, BINOP_ASSIGN); } +#line 1614 "d-exp.c.tmp" break; case 9: -#line 202 "d-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_ASSIGN_MODIFY); +#line 202 "d-exp.y" + { write_exp_elt_opcode (pstate, BINOP_ASSIGN_MODIFY); write_exp_elt_opcode (pstate, (yyvsp[-1].opcode)); write_exp_elt_opcode (pstate, BINOP_ASSIGN_MODIFY); } -#line 1523 "d-exp.c.tmp" /* yacc.c:1646 */ +#line 1622 "d-exp.c.tmp" break; case 11: -#line 210 "d-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, TERNOP_COND); } -#line 1529 "d-exp.c.tmp" /* yacc.c:1646 */ +#line 210 "d-exp.y" + { write_exp_elt_opcode (pstate, TERNOP_COND); } +#line 1628 "d-exp.c.tmp" break; case 13: -#line 216 "d-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_LOGICAL_OR); } -#line 1535 "d-exp.c.tmp" /* yacc.c:1646 */ +#line 216 "d-exp.y" + { write_exp_elt_opcode (pstate, BINOP_LOGICAL_OR); } +#line 1634 "d-exp.c.tmp" break; case 15: -#line 222 "d-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_LOGICAL_AND); } -#line 1541 "d-exp.c.tmp" /* yacc.c:1646 */ +#line 222 "d-exp.y" + { write_exp_elt_opcode (pstate, BINOP_LOGICAL_AND); } +#line 1640 "d-exp.c.tmp" break; case 17: -#line 228 "d-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_BITWISE_IOR); } -#line 1547 "d-exp.c.tmp" /* yacc.c:1646 */ +#line 228 "d-exp.y" + { write_exp_elt_opcode (pstate, BINOP_BITWISE_IOR); } +#line 1646 "d-exp.c.tmp" break; case 19: -#line 234 "d-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_BITWISE_XOR); } -#line 1553 "d-exp.c.tmp" /* yacc.c:1646 */ +#line 234 "d-exp.y" + { write_exp_elt_opcode (pstate, BINOP_BITWISE_XOR); } +#line 1652 "d-exp.c.tmp" break; case 21: -#line 240 "d-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_BITWISE_AND); } -#line 1559 "d-exp.c.tmp" /* yacc.c:1646 */ +#line 240 "d-exp.y" + { write_exp_elt_opcode (pstate, BINOP_BITWISE_AND); } +#line 1658 "d-exp.c.tmp" break; case 26: -#line 252 "d-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_EQUAL); } -#line 1565 "d-exp.c.tmp" /* yacc.c:1646 */ +#line 252 "d-exp.y" + { write_exp_elt_opcode (pstate, BINOP_EQUAL); } +#line 1664 "d-exp.c.tmp" break; case 27: -#line 254 "d-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_NOTEQUAL); } -#line 1571 "d-exp.c.tmp" /* yacc.c:1646 */ +#line 254 "d-exp.y" + { write_exp_elt_opcode (pstate, BINOP_NOTEQUAL); } +#line 1670 "d-exp.c.tmp" break; case 28: -#line 259 "d-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_EQUAL); } -#line 1577 "d-exp.c.tmp" /* yacc.c:1646 */ +#line 259 "d-exp.y" + { write_exp_elt_opcode (pstate, BINOP_EQUAL); } +#line 1676 "d-exp.c.tmp" break; case 29: -#line 261 "d-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_NOTEQUAL); } -#line 1583 "d-exp.c.tmp" /* yacc.c:1646 */ +#line 261 "d-exp.y" + { write_exp_elt_opcode (pstate, BINOP_NOTEQUAL); } +#line 1682 "d-exp.c.tmp" break; case 30: -#line 266 "d-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_LESS); } -#line 1589 "d-exp.c.tmp" /* yacc.c:1646 */ +#line 266 "d-exp.y" + { write_exp_elt_opcode (pstate, BINOP_LESS); } +#line 1688 "d-exp.c.tmp" break; case 31: -#line 268 "d-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_LEQ); } -#line 1595 "d-exp.c.tmp" /* yacc.c:1646 */ +#line 268 "d-exp.y" + { write_exp_elt_opcode (pstate, BINOP_LEQ); } +#line 1694 "d-exp.c.tmp" break; case 32: -#line 270 "d-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_GTR); } -#line 1601 "d-exp.c.tmp" /* yacc.c:1646 */ +#line 270 "d-exp.y" + { write_exp_elt_opcode (pstate, BINOP_GTR); } +#line 1700 "d-exp.c.tmp" break; case 33: -#line 272 "d-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_GEQ); } -#line 1607 "d-exp.c.tmp" /* yacc.c:1646 */ +#line 272 "d-exp.y" + { write_exp_elt_opcode (pstate, BINOP_GEQ); } +#line 1706 "d-exp.c.tmp" break; case 35: -#line 278 "d-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_LSH); } -#line 1613 "d-exp.c.tmp" /* yacc.c:1646 */ +#line 278 "d-exp.y" + { write_exp_elt_opcode (pstate, BINOP_LSH); } +#line 1712 "d-exp.c.tmp" break; case 36: -#line 280 "d-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_RSH); } -#line 1619 "d-exp.c.tmp" /* yacc.c:1646 */ +#line 280 "d-exp.y" + { write_exp_elt_opcode (pstate, BINOP_RSH); } +#line 1718 "d-exp.c.tmp" break; case 38: -#line 286 "d-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_ADD); } -#line 1625 "d-exp.c.tmp" /* yacc.c:1646 */ +#line 286 "d-exp.y" + { write_exp_elt_opcode (pstate, BINOP_ADD); } +#line 1724 "d-exp.c.tmp" break; case 39: -#line 288 "d-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_SUB); } -#line 1631 "d-exp.c.tmp" /* yacc.c:1646 */ +#line 288 "d-exp.y" + { write_exp_elt_opcode (pstate, BINOP_SUB); } +#line 1730 "d-exp.c.tmp" break; case 40: -#line 290 "d-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_CONCAT); } -#line 1637 "d-exp.c.tmp" /* yacc.c:1646 */ +#line 290 "d-exp.y" + { write_exp_elt_opcode (pstate, BINOP_CONCAT); } +#line 1736 "d-exp.c.tmp" break; case 42: -#line 296 "d-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_MUL); } -#line 1643 "d-exp.c.tmp" /* yacc.c:1646 */ +#line 296 "d-exp.y" + { write_exp_elt_opcode (pstate, BINOP_MUL); } +#line 1742 "d-exp.c.tmp" break; case 43: -#line 298 "d-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_DIV); } -#line 1649 "d-exp.c.tmp" /* yacc.c:1646 */ +#line 298 "d-exp.y" + { write_exp_elt_opcode (pstate, BINOP_DIV); } +#line 1748 "d-exp.c.tmp" break; case 44: -#line 300 "d-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_REM); } -#line 1655 "d-exp.c.tmp" /* yacc.c:1646 */ +#line 300 "d-exp.y" + { write_exp_elt_opcode (pstate, BINOP_REM); } +#line 1754 "d-exp.c.tmp" break; case 45: -#line 304 "d-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_ADDR); } -#line 1661 "d-exp.c.tmp" /* yacc.c:1646 */ +#line 304 "d-exp.y" + { write_exp_elt_opcode (pstate, UNOP_ADDR); } +#line 1760 "d-exp.c.tmp" break; case 46: -#line 306 "d-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_PREINCREMENT); } -#line 1667 "d-exp.c.tmp" /* yacc.c:1646 */ +#line 306 "d-exp.y" + { write_exp_elt_opcode (pstate, UNOP_PREINCREMENT); } +#line 1766 "d-exp.c.tmp" break; case 47: -#line 308 "d-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_PREDECREMENT); } -#line 1673 "d-exp.c.tmp" /* yacc.c:1646 */ +#line 308 "d-exp.y" + { write_exp_elt_opcode (pstate, UNOP_PREDECREMENT); } +#line 1772 "d-exp.c.tmp" break; case 48: -#line 310 "d-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_IND); } -#line 1679 "d-exp.c.tmp" /* yacc.c:1646 */ +#line 310 "d-exp.y" + { write_exp_elt_opcode (pstate, UNOP_IND); } +#line 1778 "d-exp.c.tmp" break; case 49: -#line 312 "d-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_NEG); } -#line 1685 "d-exp.c.tmp" /* yacc.c:1646 */ +#line 312 "d-exp.y" + { write_exp_elt_opcode (pstate, UNOP_NEG); } +#line 1784 "d-exp.c.tmp" break; case 50: -#line 314 "d-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_PLUS); } -#line 1691 "d-exp.c.tmp" /* yacc.c:1646 */ +#line 314 "d-exp.y" + { write_exp_elt_opcode (pstate, UNOP_PLUS); } +#line 1790 "d-exp.c.tmp" break; case 51: -#line 316 "d-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_LOGICAL_NOT); } -#line 1697 "d-exp.c.tmp" /* yacc.c:1646 */ +#line 316 "d-exp.y" + { write_exp_elt_opcode (pstate, UNOP_LOGICAL_NOT); } +#line 1796 "d-exp.c.tmp" break; case 52: -#line 318 "d-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_COMPLEMENT); } -#line 1703 "d-exp.c.tmp" /* yacc.c:1646 */ +#line 318 "d-exp.y" + { write_exp_elt_opcode (pstate, UNOP_COMPLEMENT); } +#line 1802 "d-exp.c.tmp" break; case 53: -#line 320 "d-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_SIZEOF); } -#line 1709 "d-exp.c.tmp" /* yacc.c:1646 */ +#line 320 "d-exp.y" + { write_exp_elt_opcode (pstate, UNOP_SIZEOF); } +#line 1808 "d-exp.c.tmp" break; case 56: -#line 327 "d-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_CAST_TYPE); } -#line 1715 "d-exp.c.tmp" /* yacc.c:1646 */ +#line 327 "d-exp.y" + { write_exp_elt_opcode (pstate, UNOP_CAST_TYPE); } +#line 1814 "d-exp.c.tmp" break; case 57: -#line 331 "d-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_CAST_TYPE); } -#line 1721 "d-exp.c.tmp" /* yacc.c:1646 */ +#line 331 "d-exp.y" + { write_exp_elt_opcode (pstate, UNOP_CAST_TYPE); } +#line 1820 "d-exp.c.tmp" break; case 59: -#line 338 "d-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_EXP); } -#line 1727 "d-exp.c.tmp" /* yacc.c:1646 */ +#line 338 "d-exp.y" + { write_exp_elt_opcode (pstate, BINOP_EXP); } +#line 1826 "d-exp.c.tmp" break; case 61: -#line 344 "d-exp.y" /* yacc.c:1646 */ - { struct stoken s; +#line 344 "d-exp.y" + { struct stoken s; pstate->mark_struct_expression (); write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); s.ptr = ""; s.length = 0; write_exp_string (pstate, s); write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); } -#line 1739 "d-exp.c.tmp" /* yacc.c:1646 */ +#line 1838 "d-exp.c.tmp" break; case 62: -#line 352 "d-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); +#line 352 "d-exp.y" + { write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); write_exp_string (pstate, (yyvsp[0].sval)); write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); } -#line 1747 "d-exp.c.tmp" /* yacc.c:1646 */ +#line 1846 "d-exp.c.tmp" break; case 63: -#line 356 "d-exp.y" /* yacc.c:1646 */ - { pstate->mark_struct_expression (); +#line 356 "d-exp.y" + { pstate->mark_struct_expression (); write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); write_exp_string (pstate, (yyvsp[-1].sval)); write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); } -#line 1756 "d-exp.c.tmp" /* yacc.c:1646 */ +#line 1855 "d-exp.c.tmp" break; case 64: -#line 361 "d-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_SIZEOF); } -#line 1762 "d-exp.c.tmp" /* yacc.c:1646 */ +#line 361 "d-exp.y" + { write_exp_elt_opcode (pstate, UNOP_SIZEOF); } +#line 1861 "d-exp.c.tmp" break; case 65: -#line 363 "d-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_POSTINCREMENT); } -#line 1768 "d-exp.c.tmp" /* yacc.c:1646 */ +#line 363 "d-exp.y" + { write_exp_elt_opcode (pstate, UNOP_POSTINCREMENT); } +#line 1867 "d-exp.c.tmp" break; case 66: -#line 365 "d-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_POSTDECREMENT); } -#line 1774 "d-exp.c.tmp" /* yacc.c:1646 */ +#line 365 "d-exp.y" + { write_exp_elt_opcode (pstate, UNOP_POSTDECREMENT); } +#line 1873 "d-exp.c.tmp" break; case 70: -#line 373 "d-exp.y" /* yacc.c:1646 */ - { pstate->arglist_len = 1; } -#line 1780 "d-exp.c.tmp" /* yacc.c:1646 */ +#line 373 "d-exp.y" + { pstate->arglist_len = 1; } +#line 1879 "d-exp.c.tmp" break; case 71: -#line 375 "d-exp.y" /* yacc.c:1646 */ - { pstate->arglist_len++; } -#line 1786 "d-exp.c.tmp" /* yacc.c:1646 */ +#line 375 "d-exp.y" + { pstate->arglist_len++; } +#line 1885 "d-exp.c.tmp" break; case 72: -#line 380 "d-exp.y" /* yacc.c:1646 */ - { pstate->arglist_len = 0; } -#line 1792 "d-exp.c.tmp" /* yacc.c:1646 */ +#line 380 "d-exp.y" + { pstate->arglist_len = 0; } +#line 1891 "d-exp.c.tmp" break; case 74: -#line 386 "d-exp.y" /* yacc.c:1646 */ - { pstate->start_arglist (); } -#line 1798 "d-exp.c.tmp" /* yacc.c:1646 */ +#line 386 "d-exp.y" + { pstate->start_arglist (); } +#line 1897 "d-exp.c.tmp" break; case 75: -#line 388 "d-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, OP_FUNCALL); +#line 388 "d-exp.y" + { write_exp_elt_opcode (pstate, OP_FUNCALL); write_exp_elt_longcst (pstate, pstate->end_arglist ()); write_exp_elt_opcode (pstate, OP_FUNCALL); } -#line 1806 "d-exp.c.tmp" /* yacc.c:1646 */ +#line 1905 "d-exp.c.tmp" break; case 76: -#line 395 "d-exp.y" /* yacc.c:1646 */ - { if (pstate->arglist_len > 0) +#line 395 "d-exp.y" + { if (pstate->arglist_len > 0) { write_exp_elt_opcode (pstate, MULTI_SUBSCRIPT); write_exp_elt_longcst (pstate, pstate->arglist_len); @@ -1815,30 +1914,30 @@ else write_exp_elt_opcode (pstate, BINOP_SUBSCRIPT); } -#line 1820 "d-exp.c.tmp" /* yacc.c:1646 */ +#line 1919 "d-exp.c.tmp" break; case 77: -#line 408 "d-exp.y" /* yacc.c:1646 */ - { /* Do nothing. */ } -#line 1826 "d-exp.c.tmp" /* yacc.c:1646 */ +#line 408 "d-exp.y" + { /* Do nothing. */ } +#line 1925 "d-exp.c.tmp" break; case 78: -#line 410 "d-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, TERNOP_SLICE); } -#line 1832 "d-exp.c.tmp" /* yacc.c:1646 */ +#line 410 "d-exp.y" + { write_exp_elt_opcode (pstate, TERNOP_SLICE); } +#line 1931 "d-exp.c.tmp" break; case 79: -#line 415 "d-exp.y" /* yacc.c:1646 */ - { /* Do nothing. */ } -#line 1838 "d-exp.c.tmp" /* yacc.c:1646 */ +#line 415 "d-exp.y" + { /* Do nothing. */ } +#line 1937 "d-exp.c.tmp" break; case 80: -#line 417 "d-exp.y" /* yacc.c:1646 */ - { struct bound_minimal_symbol msymbol; +#line 417 "d-exp.y" + { struct bound_minimal_symbol msymbol; std::string copy = copy_name ((yyvsp[0].sval)); struct field_of_this_result is_a_field_of_this; struct block_symbol sym; @@ -1880,17 +1979,17 @@ copy.c_str ()); } } -#line 1885 "d-exp.c.tmp" /* yacc.c:1646 */ +#line 1984 "d-exp.c.tmp" break; case 81: -#line 460 "d-exp.y" /* yacc.c:1646 */ - { struct type *type = check_typedef ((yyvsp[-2].tval)); +#line 460 "d-exp.y" + { struct type *type = check_typedef ((yyvsp[-2].tval)); /* Check if the qualified name is in the global context. However if the symbol has not already been resolved, it's not likely to be found. */ - if (TYPE_CODE (type) == TYPE_CODE_MODULE) + if (type->code () == TYPE_CODE_MODULE) { struct bound_minimal_symbol msymbol; struct block_symbol sym; @@ -1935,115 +2034,115 @@ write_exp_string (pstate, (yyvsp[0].sval)); write_exp_elt_opcode (pstate, OP_SCOPE); } -#line 1940 "d-exp.c.tmp" /* yacc.c:1646 */ +#line 2039 "d-exp.c.tmp" break; case 82: -#line 511 "d-exp.y" /* yacc.c:1646 */ - { write_dollar_variable (pstate, (yyvsp[0].sval)); } -#line 1946 "d-exp.c.tmp" /* yacc.c:1646 */ +#line 511 "d-exp.y" + { write_dollar_variable (pstate, (yyvsp[0].sval)); } +#line 2045 "d-exp.c.tmp" break; case 83: -#line 513 "d-exp.y" /* yacc.c:1646 */ - { YYSTYPE val; +#line 513 "d-exp.y" + { YYSTYPE val; parse_number (pstate, (yyvsp[0].sval).ptr, (yyvsp[0].sval).length, 0, &val); write_exp_elt_opcode (pstate, OP_LONG); write_exp_elt_type (pstate, val.typed_val_int.type); write_exp_elt_longcst (pstate, (LONGEST) val.typed_val_int.val); write_exp_elt_opcode (pstate, OP_LONG); } -#line 1958 "d-exp.c.tmp" /* yacc.c:1646 */ +#line 2057 "d-exp.c.tmp" break; case 84: -#line 521 "d-exp.y" /* yacc.c:1646 */ - { struct type *type = parse_d_type (pstate)->builtin_void; +#line 521 "d-exp.y" + { struct type *type = parse_d_type (pstate)->builtin_void; type = lookup_pointer_type (type); write_exp_elt_opcode (pstate, OP_LONG); write_exp_elt_type (pstate, type); write_exp_elt_longcst (pstate, (LONGEST) 0); write_exp_elt_opcode (pstate, OP_LONG); } -#line 1969 "d-exp.c.tmp" /* yacc.c:1646 */ +#line 2068 "d-exp.c.tmp" break; case 85: -#line 528 "d-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, OP_BOOL); +#line 528 "d-exp.y" + { write_exp_elt_opcode (pstate, OP_BOOL); write_exp_elt_longcst (pstate, (LONGEST) 1); write_exp_elt_opcode (pstate, OP_BOOL); } -#line 1977 "d-exp.c.tmp" /* yacc.c:1646 */ +#line 2076 "d-exp.c.tmp" break; case 86: -#line 532 "d-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, OP_BOOL); +#line 532 "d-exp.y" + { write_exp_elt_opcode (pstate, OP_BOOL); write_exp_elt_longcst (pstate, (LONGEST) 0); write_exp_elt_opcode (pstate, OP_BOOL); } -#line 1985 "d-exp.c.tmp" /* yacc.c:1646 */ +#line 2084 "d-exp.c.tmp" break; case 87: -#line 536 "d-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, OP_LONG); +#line 536 "d-exp.y" + { write_exp_elt_opcode (pstate, OP_LONG); write_exp_elt_type (pstate, (yyvsp[0].typed_val_int).type); write_exp_elt_longcst (pstate, (LONGEST)((yyvsp[0].typed_val_int).val)); write_exp_elt_opcode (pstate, OP_LONG); } -#line 1994 "d-exp.c.tmp" /* yacc.c:1646 */ +#line 2093 "d-exp.c.tmp" break; case 88: -#line 541 "d-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, OP_FLOAT); +#line 541 "d-exp.y" + { write_exp_elt_opcode (pstate, OP_FLOAT); write_exp_elt_type (pstate, (yyvsp[0].typed_val_float).type); write_exp_elt_floatcst (pstate, (yyvsp[0].typed_val_float).val); write_exp_elt_opcode (pstate, OP_FLOAT); } -#line 2003 "d-exp.c.tmp" /* yacc.c:1646 */ +#line 2102 "d-exp.c.tmp" break; case 89: -#line 546 "d-exp.y" /* yacc.c:1646 */ - { struct stoken_vector vec; +#line 546 "d-exp.y" + { struct stoken_vector vec; vec.len = 1; vec.tokens = &(yyvsp[0].tsval); write_exp_string_vector (pstate, (yyvsp[0].tsval).type, &vec); } -#line 2012 "d-exp.c.tmp" /* yacc.c:1646 */ +#line 2111 "d-exp.c.tmp" break; case 90: -#line 551 "d-exp.y" /* yacc.c:1646 */ - { int i; +#line 551 "d-exp.y" + { int i; write_exp_string_vector (pstate, 0, &(yyvsp[0].svec)); for (i = 0; i < (yyvsp[0].svec).len; ++i) xfree ((yyvsp[0].svec).tokens[i].ptr); xfree ((yyvsp[0].svec).tokens); } -#line 2022 "d-exp.c.tmp" /* yacc.c:1646 */ +#line 2121 "d-exp.c.tmp" break; case 91: -#line 557 "d-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, OP_ARRAY); +#line 557 "d-exp.y" + { write_exp_elt_opcode (pstate, OP_ARRAY); write_exp_elt_longcst (pstate, (LONGEST) 0); write_exp_elt_longcst (pstate, (LONGEST) (yyvsp[0].ival) - 1); write_exp_elt_opcode (pstate, OP_ARRAY); } -#line 2031 "d-exp.c.tmp" /* yacc.c:1646 */ +#line 2130 "d-exp.c.tmp" break; case 92: -#line 562 "d-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, OP_TYPEOF); } -#line 2037 "d-exp.c.tmp" /* yacc.c:1646 */ +#line 562 "d-exp.y" + { write_exp_elt_opcode (pstate, OP_TYPEOF); } +#line 2136 "d-exp.c.tmp" break; case 93: -#line 567 "d-exp.y" /* yacc.c:1646 */ - { (yyval.ival) = pstate->arglist_len; } -#line 2043 "d-exp.c.tmp" /* yacc.c:1646 */ +#line 567 "d-exp.y" + { (yyval.ival) = pstate->arglist_len; } +#line 2142 "d-exp.c.tmp" break; case 95: -#line 576 "d-exp.y" /* yacc.c:1646 */ - { /* We copy the string here, and not in the +#line 576 "d-exp.y" + { /* We copy the string here, and not in the lexer, to guarantee that we do not leak a string. Note that we follow the NUL-termination convention of the @@ -2057,12 +2156,12 @@ vec->ptr = (char *) xmalloc ((yyvsp[0].tsval).length + 1); memcpy (vec->ptr, (yyvsp[0].tsval).ptr, (yyvsp[0].tsval).length + 1); } -#line 2062 "d-exp.c.tmp" /* yacc.c:1646 */ +#line 2161 "d-exp.c.tmp" break; case 96: -#line 591 "d-exp.y" /* yacc.c:1646 */ - { /* Note that we NUL-terminate here, but just +#line 591 "d-exp.y" + { /* Note that we NUL-terminate here, but just for convenience. */ char *p; ++(yyval.svec).len; @@ -2076,67 +2175,68 @@ (yyval.svec).tokens[(yyval.svec).len - 1].length = (yyvsp[0].tsval).length; (yyval.svec).tokens[(yyval.svec).len - 1].ptr = p; } -#line 2081 "d-exp.c.tmp" /* yacc.c:1646 */ +#line 2180 "d-exp.c.tmp" break; case 97: -#line 609 "d-exp.y" /* yacc.c:1646 */ - { /* Do nothing. */ } -#line 2087 "d-exp.c.tmp" /* yacc.c:1646 */ +#line 609 "d-exp.y" + { /* Do nothing. */ } +#line 2186 "d-exp.c.tmp" break; case 98: -#line 611 "d-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, OP_TYPE); +#line 611 "d-exp.y" + { write_exp_elt_opcode (pstate, OP_TYPE); write_exp_elt_type (pstate, (yyvsp[0].tval)); write_exp_elt_opcode (pstate, OP_TYPE); } -#line 2095 "d-exp.c.tmp" /* yacc.c:1646 */ +#line 2194 "d-exp.c.tmp" break; case 99: -#line 615 "d-exp.y" /* yacc.c:1646 */ - { (yyval.tval) = type_stack->follow_types ((yyvsp[-1].tval)); +#line 615 "d-exp.y" + { (yyval.tval) = type_stack->follow_types ((yyvsp[-1].tval)); write_exp_elt_opcode (pstate, OP_TYPE); write_exp_elt_type (pstate, (yyval.tval)); write_exp_elt_opcode (pstate, OP_TYPE); } -#line 2105 "d-exp.c.tmp" /* yacc.c:1646 */ +#line 2204 "d-exp.c.tmp" break; case 100: -#line 624 "d-exp.y" /* yacc.c:1646 */ - { type_stack->push (tp_pointer); } -#line 2111 "d-exp.c.tmp" /* yacc.c:1646 */ +#line 624 "d-exp.y" + { type_stack->push (tp_pointer); } +#line 2210 "d-exp.c.tmp" break; case 101: -#line 626 "d-exp.y" /* yacc.c:1646 */ - { type_stack->push (tp_pointer); } -#line 2117 "d-exp.c.tmp" /* yacc.c:1646 */ +#line 626 "d-exp.y" + { type_stack->push (tp_pointer); } +#line 2216 "d-exp.c.tmp" break; case 102: -#line 628 "d-exp.y" /* yacc.c:1646 */ - { type_stack->push ((yyvsp[-1].typed_val_int).val); +#line 628 "d-exp.y" + { type_stack->push ((yyvsp[-1].typed_val_int).val); type_stack->push (tp_array); } -#line 2124 "d-exp.c.tmp" /* yacc.c:1646 */ +#line 2223 "d-exp.c.tmp" break; case 103: -#line 631 "d-exp.y" /* yacc.c:1646 */ - { type_stack->push ((yyvsp[-2].typed_val_int).val); +#line 631 "d-exp.y" + { type_stack->push ((yyvsp[-2].typed_val_int).val); type_stack->push (tp_array); } -#line 2131 "d-exp.c.tmp" /* yacc.c:1646 */ +#line 2230 "d-exp.c.tmp" break; case 104: -#line 637 "d-exp.y" /* yacc.c:1646 */ - { (yyval.tval) = (yyvsp[0].tsym).type; } -#line 2137 "d-exp.c.tmp" /* yacc.c:1646 */ +#line 637 "d-exp.y" + { (yyval.tval) = (yyvsp[0].tsym).type; } +#line 2236 "d-exp.c.tmp" break; -#line 2141 "d-exp.c.tmp" /* yacc.c:1646 */ +#line 2240 "d-exp.c.tmp" + default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -2161,14 +2261,13 @@ /* Now 'shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ - - yyn = yyr1[yyn]; - - yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; - if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) - yystate = yytable[yystate]; - else - yystate = yydefgoto[yyn - YYNTOKENS]; + { + const int yylhs = yyr1[yyn] - YYNTOKENS; + const int yyi = yypgoto[yylhs] + *yyssp; + yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp + ? yytable[yyi] + : yydefgoto[yylhs]); + } goto yynewstate; @@ -2200,7 +2299,7 @@ { if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); - yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc); + yymsg = YY_CAST (char *, YYSTACK_ALLOC (YY_CAST (YYSIZE_T, yymsg_alloc))); if (!yymsg) { yymsg = yymsgbuf; @@ -2251,12 +2350,10 @@ | yyerrorlab -- error raised explicitly by YYERROR. | `---------------------------------------------------*/ yyerrorlab: - - /* Pacify compilers like GCC when the user code never invokes - YYERROR and the label yyerrorlab therefore never appears in user - code. */ - if (/*CONSTCOND*/ 0) - goto yyerrorlab; + /* Pacify compilers when the user code never invokes YYERROR and the + label yyerrorlab therefore never appears in user code. */ + if (0) + YYERROR; /* Do not reclaim the symbols of the rule whose action triggered this YYERROR. */ @@ -2318,6 +2415,7 @@ yyresult = 0; goto yyreturn; + /*-----------------------------------. | yyabortlab -- YYABORT comes here. | `-----------------------------------*/ @@ -2325,6 +2423,7 @@ yyresult = 1; goto yyreturn; + #if !defined yyoverflow || YYERROR_VERBOSE /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | @@ -2335,6 +2434,10 @@ /* Fall through. */ #endif + +/*-----------------------------------------------------. +| yyreturn -- parsing is finished, return the result. | +`-----------------------------------------------------*/ yyreturn: if (yychar != YYEMPTY) { @@ -2351,7 +2454,7 @@ while (yyssp != yyss) { yydestruct ("Cleanup: popping", - yystos[*yyssp], yyvsp); + yystos[+*yyssp], yyvsp); YYPOPSTACK (1); } #ifndef yyoverflow @@ -2364,7 +2467,7 @@ #endif return yyresult; } -#line 640 "d-exp.y" /* yacc.c:1906 */ +#line 640 "d-exp.y" /* Return true if the type is aggregate-like. */ @@ -2372,10 +2475,10 @@ static int type_aggregate_p (struct type *type) { - return (TYPE_CODE (type) == TYPE_CODE_STRUCT - || TYPE_CODE (type) == TYPE_CODE_UNION - || TYPE_CODE (type) == TYPE_CODE_MODULE - || (TYPE_CODE (type) == TYPE_CODE_ENUM + return (type->code () == TYPE_CODE_STRUCT + || type->code () == TYPE_CODE_UNION + || type->code () == TYPE_CODE_MODULE + || (type->code () == TYPE_CODE_ENUM && TYPE_DECLARED_CLASS (type))); } diff -Nru gdb-9.1/gdb/d-exp.y gdb-10.2/gdb/d-exp.y --- gdb-9.1/gdb/d-exp.y 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/d-exp.y 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* YACC parser for D expressions, for GDB. - Copyright (C) 2014-2020 Free Software Foundation, Inc. + Copyright (C) 2014-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -462,7 +462,7 @@ /* Check if the qualified name is in the global context. However if the symbol has not already been resolved, it's not likely to be found. */ - if (TYPE_CODE (type) == TYPE_CODE_MODULE) + if (type->code () == TYPE_CODE_MODULE) { struct bound_minimal_symbol msymbol; struct block_symbol sym; @@ -644,10 +644,10 @@ static int type_aggregate_p (struct type *type) { - return (TYPE_CODE (type) == TYPE_CODE_STRUCT - || TYPE_CODE (type) == TYPE_CODE_UNION - || TYPE_CODE (type) == TYPE_CODE_MODULE - || (TYPE_CODE (type) == TYPE_CODE_ENUM + return (type->code () == TYPE_CODE_STRUCT + || type->code () == TYPE_CODE_UNION + || type->code () == TYPE_CODE_MODULE + || (type->code () == TYPE_CODE_ENUM && TYPE_DECLARED_CLASS (type))); } diff -Nru gdb-9.1/gdb/dicos-tdep.c gdb-10.2/gdb/dicos-tdep.c --- gdb-9.1/gdb/dicos-tdep.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/dicos-tdep.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent, architecture-independent code for DICOS, for GDB. - Copyright (C) 2009-2020 Free Software Foundation, Inc. + Copyright (C) 2009-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/dicos-tdep.h gdb-10.2/gdb/dicos-tdep.h --- gdb-9.1/gdb/dicos-tdep.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/dicos-tdep.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent, architecture-independent code for DICOS, for GDB. - Copyright (C) 2009-2020 Free Software Foundation, Inc. + Copyright (C) 2009-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/dictionary.c gdb-10.2/gdb/dictionary.c --- gdb-9.1/gdb/dictionary.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/dictionary.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Routines for name->symbol lookups in GDB. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. Contributed by David Carlton <carlton@bactrian.org> and by Kealia, Inc. @@ -584,7 +584,7 @@ unsigned int hash_index = (name.search_name_hash (lang->la_language) % DICT_HASHED_NBUCKETS (dict)); symbol_name_matcher_ftype *matches_name - = get_symbol_name_matcher (lang, name); + = lang->get_symbol_name_matcher (name); struct symbol *sym; DICT_ITERATOR_DICT (iterator) = dict; @@ -612,7 +612,7 @@ { const language_defn *lang = DICT_LANGUAGE (DICT_ITERATOR_DICT (iterator)); symbol_name_matcher_ftype *matches_name - = get_symbol_name_matcher (lang, name); + = lang->get_symbol_name_matcher (name); struct symbol *next; for (next = DICT_ITERATOR_CURRENT (iterator)->hash_next; @@ -640,9 +640,9 @@ /* We don't want to insert a symbol into a dictionary of a different language. The two may not use the same hashing algorithm. */ - gdb_assert (SYMBOL_LANGUAGE (sym) == DICT_LANGUAGE (dict)->la_language); + gdb_assert (sym->language () == DICT_LANGUAGE (dict)->la_language); - hash = search_name_hash (SYMBOL_LANGUAGE (sym), sym->search_name ()); + hash = search_name_hash (sym->language (), sym->search_name ()); hash_index = hash % DICT_HASHED_NBUCKETS (dict); sym->hash_next = buckets[hash_index]; buckets[hash_index] = sym; @@ -719,7 +719,7 @@ /* See dictionary.h. */ unsigned int -default_search_name_hash (const char *string0) +language_defn::search_name_hash (const char *string0) const { /* The Ada-encoded version of a name P1.P2...Pn has either the form P1__P2__...Pn<suffix> or _ada_P1__P2__...Pn<suffix> (where the Pi @@ -828,7 +828,7 @@ const struct dictionary *dict = DICT_ITERATOR_DICT (iterator); const language_defn *lang = DICT_LANGUAGE (dict); symbol_name_matcher_ftype *matches_name - = get_symbol_name_matcher (lang, name); + = lang->get_symbol_name_matcher (name); int i, nsyms = DICT_LINEAR_NSYMS (dict); struct symbol *sym, *retval = NULL; @@ -928,7 +928,7 @@ { for (int i = list_counter->nsyms - 1; i >= 0; --i) { - enum language language = SYMBOL_LANGUAGE (list_counter->symbol[i]); + enum language language = list_counter->symbol[i]->language (); nsyms[language].push_back (list_counter->symbol[i]); } } @@ -1116,13 +1116,13 @@ mdict_add_symbol (struct multidictionary *mdict, struct symbol *sym) { struct dictionary *dict - = find_language_dictionary (mdict, SYMBOL_LANGUAGE (sym)); + = find_language_dictionary (mdict, sym->language ()); if (dict == nullptr) { /* SYM is of a new language that we haven't previously seen. Create a new dictionary for it. */ - dict = create_new_language_dictionary (mdict, SYMBOL_LANGUAGE (sym)); + dict = create_new_language_dictionary (mdict, sym->language ()); } dict_add_symbol (dict, sym); diff -Nru gdb-9.1/gdb/dictionary.h gdb-10.2/gdb/dictionary.h --- gdb-9.1/gdb/dictionary.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/dictionary.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Routines for name->symbol lookups in GDB. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. Contributed by David Carlton <carlton@bactrian.org> and by Kealia, Inc. diff -Nru gdb-9.1/gdb/.dir-locals.el gdb-10.2/gdb/.dir-locals.el --- gdb-9.1/gdb/.dir-locals.el 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/.dir-locals.el 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ ;; Emacs settings. -;; Copyright (C) 2012-2020 Free Software Foundation, Inc. +;; Copyright (C) 2012-2021 Free Software Foundation, Inc. ;; This program is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by @@ -14,6 +14,10 @@ ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see <http://www.gnu.org/licenses/>. +;; There are three copies of this file, one in each of gdb/, +;; gdbserver/, and gdbsupport/. If you edit any one of these then +;; please replicate the changes in the other two copies. + ( (tcl-mode . ((tcl-indent-level . 4) (tcl-continued-indent-level . 4) diff -Nru gdb-9.1/gdb/disable-implicit-rules.mk gdb-10.2/gdb/disable-implicit-rules.mk --- gdb-9.1/gdb/disable-implicit-rules.mk 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/disable-implicit-rules.mk 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2016-2020 Free Software Foundation, Inc. +# Copyright (C) 2016-2021 Free Software Foundation, Inc. # This file is part of GDB. diff -Nru gdb-9.1/gdb/disasm.c gdb-10.2/gdb/disasm.c --- gdb-9.1/gdb/disasm.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/disasm.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Disassemble support for GDB. - Copyright (C) 2000-2020 Free Software Foundation, Inc. + Copyright (C) 2000-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -781,6 +781,11 @@ disassemble_init_for_target (&m_di); } +gdb_disassembler::~gdb_disassembler () +{ + disassemble_free_target (&m_di); +} + int gdb_disassembler::print_insn (CORE_ADDR memaddr, int *branch_delay_insns) @@ -908,7 +913,9 @@ gdb_buffered_insn_length_init_dis (gdbarch, &di, insn, max_len, addr, &disassembler_options_holder); - return gdbarch_print_insn (gdbarch, addr, &di); + int result = gdbarch_print_insn (gdbarch, addr, &di); + disassemble_free_target (&di); + return result; } char * @@ -1128,8 +1135,9 @@ /* Initialization code. */ +void _initialize_disasm (); void -_initialize_disasm (void) +_initialize_disasm () { struct cmd_list_element *cmd; diff -Nru gdb-9.1/gdb/disasm.h gdb-10.2/gdb/disasm.h --- gdb-9.1/gdb/disasm.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/disasm.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Disassemble support for GDB. - Copyright (C) 2002-2020 Free Software Foundation, Inc. + Copyright (C) 2002-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -47,6 +47,10 @@ : gdb_disassembler (gdbarch, file, dis_asm_read_memory) {} + ~gdb_disassembler (); + + DISABLE_COPY_AND_ASSIGN (gdb_disassembler); + int print_insn (CORE_ADDR memaddr, int *branch_delay_insns = NULL); /* Return the gdbarch of gdb_disassembler. */ diff -Nru gdb-9.1/gdb/disasm-selftests.c gdb-10.2/gdb/disasm-selftests.c --- gdb-9.1/gdb/disasm-selftests.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/disasm-selftests.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Self tests for disassembler for GDB, the GNU debugger. - Copyright (C) 2017-2020 Free Software Foundation, Inc. + Copyright (C) 2017-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -19,8 +19,6 @@ #include "defs.h" #include "disasm.h" - -#if GDB_SELF_TEST #include "gdbsupport/selftest.h" #include "selftest-arch.h" #include "gdbarch.h" @@ -208,15 +206,13 @@ } } // namespace selftests -#endif /* GDB_SELF_TEST */ +void _initialize_disasm_selftests (); void -_initialize_disasm_selftests (void) +_initialize_disasm_selftests () { -#if GDB_SELF_TEST selftests::register_test_foreach_arch ("print_one_insn", selftests::print_one_insn_test); selftests::register_test_foreach_arch ("memory_error", selftests::memory_error_test); -#endif } diff -Nru gdb-9.1/gdb/d-lang.c gdb-10.2/gdb/d-lang.c --- gdb-9.1/gdb/d-lang.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/d-lang.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* D language support routines for GDB, the GNU debugger. - Copyright (C) 2005-2020 Free Software Foundation, Inc. + Copyright (C) 2005-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -56,15 +56,6 @@ return gdb_demangle (symbol, options | DMGL_DLANG); } -/* la_sniff_from_mangled_name implementation for D. */ - -static int -d_sniff_from_mangled_name (const char *mangled, char **demangled) -{ - *demangled = d_demangle (mangled, 0); - return *demangled != NULL; -} - /* Table mapping opcodes into strings for printing operators and precedences of the operators. */ static const struct op_print d_op_print_tab[] = @@ -133,79 +124,14 @@ nr_d_primitive_types }; -/* Implements the la_language_arch_info language_defn routine - for language D. */ - -static void -d_language_arch_info (struct gdbarch *gdbarch, - struct language_arch_info *lai) -{ - const struct builtin_d_type *builtin = builtin_d_type (gdbarch); - - lai->string_char_type = builtin->builtin_char; - lai->primitive_type_vector - = GDBARCH_OBSTACK_CALLOC (gdbarch, nr_d_primitive_types + 1, - struct type *); - - lai->primitive_type_vector [d_primitive_type_void] - = builtin->builtin_void; - lai->primitive_type_vector [d_primitive_type_bool] - = builtin->builtin_bool; - lai->primitive_type_vector [d_primitive_type_byte] - = builtin->builtin_byte; - lai->primitive_type_vector [d_primitive_type_ubyte] - = builtin->builtin_ubyte; - lai->primitive_type_vector [d_primitive_type_short] - = builtin->builtin_short; - lai->primitive_type_vector [d_primitive_type_ushort] - = builtin->builtin_ushort; - lai->primitive_type_vector [d_primitive_type_int] - = builtin->builtin_int; - lai->primitive_type_vector [d_primitive_type_uint] - = builtin->builtin_uint; - lai->primitive_type_vector [d_primitive_type_long] - = builtin->builtin_long; - lai->primitive_type_vector [d_primitive_type_ulong] - = builtin->builtin_ulong; - lai->primitive_type_vector [d_primitive_type_cent] - = builtin->builtin_cent; - lai->primitive_type_vector [d_primitive_type_ucent] - = builtin->builtin_ucent; - lai->primitive_type_vector [d_primitive_type_float] - = builtin->builtin_float; - lai->primitive_type_vector [d_primitive_type_double] - = builtin->builtin_double; - lai->primitive_type_vector [d_primitive_type_real] - = builtin->builtin_real; - lai->primitive_type_vector [d_primitive_type_ifloat] - = builtin->builtin_ifloat; - lai->primitive_type_vector [d_primitive_type_idouble] - = builtin->builtin_idouble; - lai->primitive_type_vector [d_primitive_type_ireal] - = builtin->builtin_ireal; - lai->primitive_type_vector [d_primitive_type_cfloat] - = builtin->builtin_cfloat; - lai->primitive_type_vector [d_primitive_type_cdouble] - = builtin->builtin_cdouble; - lai->primitive_type_vector [d_primitive_type_creal] - = builtin->builtin_creal; - lai->primitive_type_vector [d_primitive_type_char] - = builtin->builtin_char; - lai->primitive_type_vector [d_primitive_type_wchar] - = builtin->builtin_wchar; - lai->primitive_type_vector [d_primitive_type_dchar] - = builtin->builtin_dchar; - - lai->bool_type_symbol = "bool"; - lai->bool_type_default = builtin->builtin_bool; -} - static const char *d_extensions[] = { ".d", NULL }; -extern const struct language_defn d_language_defn = +/* Constant data that describes the D language. */ + +extern const struct language_data d_language_data = { "d", "D", @@ -216,45 +142,142 @@ macro_expansion_no, d_extensions, &exp_descriptor_c, - d_parse, - null_post_parser, - c_printchar, /* Print a character constant. */ - c_printstr, /* Function to print string constant. */ - c_emit_char, /* Print a single char. */ - c_print_type, /* Print a type using appropriate syntax. */ - c_print_typedef, /* Print a typedef using appropriate - syntax. */ - d_val_print, /* Print a value using appropriate syntax. */ - c_value_print, /* Print a top-level value. */ - default_read_var_value, /* la_read_var_value */ - NULL, /* Language specific skip_trampoline. */ "this", false, /* la_store_sym_names_in_linkage_form_p */ - d_lookup_symbol_nonlocal, - basic_lookup_transparent_type, - d_demangle, /* Language specific symbol demangler. */ - d_sniff_from_mangled_name, - NULL, /* Language specific - class_name_from_physname. */ d_op_print_tab, /* Expression operators for printing. */ 1, /* C-style arrays. */ 0, /* String lower bound. */ - default_word_break_characters, - default_collect_symbol_completion_matches, - d_language_arch_info, - default_print_array_index, - default_pass_by_reference, - c_watch_location_expression, - NULL, /* la_get_symbol_name_matcher */ - iterate_over_symbols, - default_search_name_hash, &default_varobj_ops, - NULL, - NULL, - c_is_string_type_p, "{...}" /* la_struct_too_deep_ellipsis */ }; +/* Class representing the D language. */ + +class d_language : public language_defn +{ +public: + d_language () + : language_defn (language_d, d_language_data) + { /* Nothing. */ } + + /* See language.h. */ + void language_arch_info (struct gdbarch *gdbarch, + struct language_arch_info *lai) const override + { + const struct builtin_d_type *builtin = builtin_d_type (gdbarch); + + lai->string_char_type = builtin->builtin_char; + lai->primitive_type_vector + = GDBARCH_OBSTACK_CALLOC (gdbarch, nr_d_primitive_types + 1, + struct type *); + + lai->primitive_type_vector [d_primitive_type_void] + = builtin->builtin_void; + lai->primitive_type_vector [d_primitive_type_bool] + = builtin->builtin_bool; + lai->primitive_type_vector [d_primitive_type_byte] + = builtin->builtin_byte; + lai->primitive_type_vector [d_primitive_type_ubyte] + = builtin->builtin_ubyte; + lai->primitive_type_vector [d_primitive_type_short] + = builtin->builtin_short; + lai->primitive_type_vector [d_primitive_type_ushort] + = builtin->builtin_ushort; + lai->primitive_type_vector [d_primitive_type_int] + = builtin->builtin_int; + lai->primitive_type_vector [d_primitive_type_uint] + = builtin->builtin_uint; + lai->primitive_type_vector [d_primitive_type_long] + = builtin->builtin_long; + lai->primitive_type_vector [d_primitive_type_ulong] + = builtin->builtin_ulong; + lai->primitive_type_vector [d_primitive_type_cent] + = builtin->builtin_cent; + lai->primitive_type_vector [d_primitive_type_ucent] + = builtin->builtin_ucent; + lai->primitive_type_vector [d_primitive_type_float] + = builtin->builtin_float; + lai->primitive_type_vector [d_primitive_type_double] + = builtin->builtin_double; + lai->primitive_type_vector [d_primitive_type_real] + = builtin->builtin_real; + lai->primitive_type_vector [d_primitive_type_ifloat] + = builtin->builtin_ifloat; + lai->primitive_type_vector [d_primitive_type_idouble] + = builtin->builtin_idouble; + lai->primitive_type_vector [d_primitive_type_ireal] + = builtin->builtin_ireal; + lai->primitive_type_vector [d_primitive_type_cfloat] + = builtin->builtin_cfloat; + lai->primitive_type_vector [d_primitive_type_cdouble] + = builtin->builtin_cdouble; + lai->primitive_type_vector [d_primitive_type_creal] + = builtin->builtin_creal; + lai->primitive_type_vector [d_primitive_type_char] + = builtin->builtin_char; + lai->primitive_type_vector [d_primitive_type_wchar] + = builtin->builtin_wchar; + lai->primitive_type_vector [d_primitive_type_dchar] + = builtin->builtin_dchar; + + lai->bool_type_symbol = "bool"; + lai->bool_type_default = builtin->builtin_bool; + } + + /* See language.h. */ + bool sniff_from_mangled_name (const char *mangled, + char **demangled) const override + { + *demangled = d_demangle (mangled, 0); + return *demangled != NULL; + } + + /* See language.h. */ + + char *demangle (const char *mangled, int options) const override + { + return d_demangle (mangled, options); + } + + /* See language.h. */ + + void print_type (struct type *type, const char *varstring, + struct ui_file *stream, int show, int level, + const struct type_print_options *flags) const override + { + c_print_type (type, varstring, stream, show, level, flags); + } + + /* See language.h. */ + + void value_print_inner + (struct value *val, struct ui_file *stream, int recurse, + const struct value_print_options *options) const override + { + return d_value_print_inner (val, stream, recurse, options); + } + + /* See language.h. */ + + struct block_symbol lookup_symbol_nonlocal + (const char *name, const struct block *block, + const domain_enum domain) const override + { + return d_lookup_symbol_nonlocal (this, name, block, domain); + } + + /* See language.h. */ + + int parser (struct parser_state *ps) const override + { + return d_parse (ps); + } +}; + +/* Single instance of the D language class. */ + +static d_language d_language_defn; + /* Build all D language types for the specified architecture. */ static void * @@ -314,14 +337,11 @@ = arch_float_type (gdbarch, gdbarch_long_double_bit (gdbarch), "ireal", gdbarch_long_double_format (gdbarch)); builtin_d_type->builtin_cfloat - = arch_complex_type (gdbarch, "cfloat", - builtin_d_type->builtin_float); + = init_complex_type ("cfloat", builtin_d_type->builtin_float); builtin_d_type->builtin_cdouble - = arch_complex_type (gdbarch, "cdouble", - builtin_d_type->builtin_double); + = init_complex_type ("cdouble", builtin_d_type->builtin_double); builtin_d_type->builtin_creal - = arch_complex_type (gdbarch, "creal", - builtin_d_type->builtin_real); + = init_complex_type ("creal", builtin_d_type->builtin_real); /* Character types. */ builtin_d_type->builtin_char @@ -344,8 +364,9 @@ return (const struct builtin_d_type *) gdbarch_data (gdbarch, d_type_data); } +void _initialize_d_language (); void -_initialize_d_language (void) +_initialize_d_language () { d_type_data = gdbarch_data_register_post_init (build_d_types); } diff -Nru gdb-9.1/gdb/d-lang.h gdb-10.2/gdb/d-lang.h --- gdb-9.1/gdb/d-lang.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/d-lang.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* D language support definitions for GDB, the GNU debugger. - Copyright (C) 2005-2020 Free Software Foundation, Inc. + Copyright (C) 2005-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -76,12 +76,10 @@ extern struct block_symbol d_lookup_nested_symbol (struct type *, const char *, const struct block *); -/* Defined in d-valprint.c */ +/* Implement la_value_print_inner for D. */ -extern void d_val_print (struct type *type, - int embedded_offset, CORE_ADDR address, - struct ui_file *stream, int recurse, - struct value *val, - const struct value_print_options *options); +extern void d_value_print_inner (struct value *val, + struct ui_file *stream, int recurse, + const struct value_print_options *options); #endif /* !defined (D_LANG_H) */ diff -Nru gdb-9.1/gdb/d-namespace.c gdb-10.2/gdb/d-namespace.c --- gdb-9.1/gdb/d-namespace.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/d-namespace.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Helper routines for D support in GDB. - Copyright (C) 2014-2020 Free Software Foundation, Inc. + Copyright (C) 2014-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -131,7 +131,7 @@ return {}; type = check_typedef (TYPE_TARGET_TYPE (SYMBOL_TYPE (lang_this.symbol))); - classname = TYPE_NAME (type); + classname = type->name (); nested = name; } else @@ -308,7 +308,7 @@ parent_type = check_typedef (parent_type); - switch (TYPE_CODE (parent_type)) + switch (parent_type->code ()) { case TYPE_CODE_STRUCT: case TYPE_CODE_UNION: diff -Nru gdb-9.1/gdb/doc/agentexpr.texi gdb-10.2/gdb/doc/agentexpr.texi --- gdb-9.1/gdb/doc/agentexpr.texi 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/doc/agentexpr.texi 2021-04-25 04:04:35.000000000 +0000 @@ -7,7 +7,7 @@ @c This file is part of the GDB manual. @c -@c Copyright (C) 2003-2020 Free Software Foundation, Inc. +@c Copyright (C) 2003--2021 Free Software Foundation, Inc. @c @c See the file gdb.texinfo for copying conditions. diff -Nru gdb-9.1/gdb/doc/all-cfg.texi gdb-10.2/gdb/doc/all-cfg.texi --- gdb-9.1/gdb/doc/all-cfg.texi 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/doc/all-cfg.texi 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ @c GDB MANUAL configuration file. @c -@c Copyright (C) 1993-2020 Free Software Foundation, Inc. +@c Copyright (C) 1993--2021 Free Software Foundation, Inc. @c @c NOTE: While the GDB manual is configurable (by changing these @c switches), its configuration is ***NOT*** automatically tied in to diff -Nru gdb-9.1/gdb/doc/annotate.info gdb-10.2/gdb/doc/annotate.info --- gdb-9.1/gdb/doc/annotate.info 2020-02-08 12:54:19.000000000 +0000 +++ gdb-10.2/gdb/doc/annotate.info 2021-04-25 04:10:45.000000000 +0000 @@ -1,7 +1,7 @@ -This is annotate.info, produced by makeinfo version 6.5 from +This is annotate.info, produced by makeinfo version 6.7 from annotate.texinfo. -Copyright (C) 1994-2020 Free Software Foundation, Inc. +Copyright (C) 1994-2021 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or @@ -16,7 +16,7 @@ This file documents GDB's obsolete annotations. - Copyright (C) 1994-2020 Free Software Foundation, Inc. + Copyright (C) 1994-2021 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or @@ -1191,3 +1191,8 @@ Node: GNU Free Documentation License23267  End Tag Table + + +Local Variables: +coding: utf-8 +End: diff -Nru gdb-9.1/gdb/doc/annotate.texinfo gdb-10.2/gdb/doc/annotate.texinfo --- gdb-9.1/gdb/doc/annotate.texinfo 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/doc/annotate.texinfo 2021-04-25 04:04:35.000000000 +0000 @@ -27,7 +27,7 @@ @c cost. Having a smaller cheaper manual helps the GNU Press with its sales. @copying -Copyright @copyright{} 1994-2020 Free Software Foundation, Inc. +Copyright @copyright{} 1994--2021 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or diff -Nru gdb-9.1/gdb/doc/ChangeLog gdb-10.2/gdb/doc/ChangeLog --- gdb-9.1/gdb/doc/ChangeLog 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/doc/ChangeLog 2021-04-25 04:06:26.000000000 +0000 @@ -1,11 +1,246 @@ -2020-01-01 Joel Brobecker <brobecker@adacore.com> +2021-01-01 Joel Brobecker <brobecker@adacore.com> * gdb.texinfo, refcard.tex: Update copyright year range. -2019-12-15 Christian Biesinger <cbiesinger@google.com> +2020-12-26 Jeanne Rasata <jeanne@fsf.org> (tiny change) + + * gdb.texinfo: Fix capitalization in many sections following CMS + style-guide rules, remove period at end of a few headings. + +2020-11-29 Hannes Domani <ssbssa@yahoo.de> + + PR python/26974 + * python.texi: Fix docu for static members argument. + +2020-08-25 Shahab Vahedi <shahab@synopsys.com> + + * gdb.texinfo (Synopsys ARC): Document LP_START, LP_END and BTA. + +2020-08-25 Shahab Vahedi <shahab@synopsys.com> + + * gdb.texinfo (Synopsys ARC): Update the documentation for ARC + Features. + +2020-08-07 Tom Tromey <tromey@adacore.com> + + * gdb.texinfo (Ravenscar Profile): Add examples. + Document runtime initialization limitation. + +2020-08-04 Jose E. Marchesi <jose.marchesi@oracle.com> + + * gdb.texinfo (Contributors): Add information for the eBPF + support. + (BPF): New section. + +2020-07-28 Andrew Burgess <andrew.burgess@embecosm.com> + + * python.texi (Unwinding Frames in Python): Update descriptions + for PendingFrame.read_register and + gdb.UnwindInfo.add_saved_register. + (Frames In Python): Update description of Frame.read_register. + +2020-07-28 Andrew Burgess <andrew.burgess@embecosm.com> + + * python.texi (Registers In Python): Document new find function. + +2020-07-22 Kevin Buettner <kevinb@redhat.com> + + * gdb.texinfo (Maintenance Commands): Add documentation for + new command "maintenance print core-file-backed-mappings". + +2020-07-22 Reuben Thomas <rrt@sc3d.org> + + * gdb.texinfo (Remote Protocol, Overview): Correct the description + of which remote protocol commands are mandatory for a stub to + implement. + +2020-07-20 Ludovic Courtès <ludo@gnu.org> + + * doc/guile.texi (Guile Introduction): Mention Guile 3.0. + +2020-07-20 Ludovic Courtès <ludo@gnu.org> + + * guile.texi (Memory Ports in Guile): Mark + 'memory-port-read-buffer-size', + 'set-memory-port-read-buffer-size!', + 'memory-port-write-buffer-size', + 'set-memory-port-read-buffer-size!' as deprecated. + (Guile Introduction): Clarify which Guile + versions are supported. + +2020-07-13 Paul Carroll <pcarroll@codesourcery.com> + + PR gdb/25716 + + * gdb.texinfo (Frame Apply): Remove anchor for 'frame + apply' and adjust xrefs to it. + +2020-07-11 Philippe Waroquiers <philippe.waroquiers@skynet.be> + + * gdb.texinfo (Attach): Update exec-file-mismatch doc. + +2020-07-08 Hannes Domani <ssbssa@yahoo.de> + + * gdb.texinfo: Document Windows drive conversion of + 'set auto-load scripts-directory'. + +2020-07-06 Andrew Burgess <andrew.burgess@embecosm.com> + + * gdb.texi (Registers): Add @anchor for 'info registers + <reggroup>' command. + * python.texi (Architectures In Python): Document new + register_groups method. + (Registers In Python): Document two new object types related to + register groups. + +2020-07-06 Andrew Burgess <andrew.burgess@embecosm.com> + + * python.texi (Python API): Add new section to the menu. + (Frames In Python): Add new @anchor. + (Architectures In Python): Document new registers method. + (Registers In Python): New section. + +2020-07-06 Andrew Burgess <andrew.burgess@embecosm.com> + + * python.texi (Unwinding Frames in Python): Document + PendingFrame.architecture method. + +2020-06-26 Eli Zaretskii <eliz@gnu.org> + + * gdb.texinfo (Shell Commands): More accurate description of use + of $SHELL. Reported by Sandra Loosemore <sandra@codesourcery.com>. + +2020-06-23 Andrew Burgess <andrew.burgess@embecosm.com> + + * gdb.texinfo (Maintenance Commands): Document new 'maint print + xml-desc' command. + +2020-06-22 Philippe Waroquiers <philippe.waroquiers@skynet.be> + + * gdb.texinfo (Command aliases default args): New node documenting + how to use default args for a command using aliases. + (Aliases): Document the new 'DEFAULT-ARGS...' option. + (Help): Update help aliases text and describe when full alias + definition is provided. + +2020-06-11 Tom Tromey <tromey@adacore.com> + + * gdb.texinfo (Index Files): Reword. Remove Ada limitation. + +2020-06-10 Jonny Grant <jg@jguk.org> - * gdb.texinfo (Maintenance Commands): Update documentation for - maint set worker-threads to say the default is 0. + * gdb.texinfo: Remove broken links Previous and Up from + contents. + +2020-05-23 Tom Tromey <tom@tromey.com> + + * gdb.texinfo (Output Styling): Don't mention completion styling. + (Editing): Don't mention readline completion styling. + +2020-05-23 Tom Tromey <tom@tromey.com> + + * gdb.texinfo (Output Styling): Mention completion styling. + (Editing): Mention readline completion styling. + +2020-05-19 Pedro Alves <palves@redhat.com> + + * gdb.texinfo (Attach): Update exec-file-mismatch description to + mention build IDs. + (Separate Debug Files): Add "build id" anchor. + +2020-05-15 Philippe Waroquiers <philippe.waroquiers@skynet.be> + + * gdb.texinfo (Help): Document the help and apropos changes. + (Aliases): Document new meaning of -a abbreviation flag. + +2020-05-05 Kamil Rytarowski <n54@gmx.com> + + * gdb.texinfo (info proc, info proc cmdline, info proc cwd) + (info proc exe, info proc mappings, info proc stat): Mention + NetBSD support. + +2020-04-28 Tom Tromey <tom@tromey.com> + + * python.texi (Commands In Python): Document gdb.COMMAND_TUI. + +2020-04-27 Tom Tromey <tromey@adacore.com> + + * python.texi (Types In Python): Mention missing fields. Add + dynamic type example. + +2020-04-24 Tom Tromey <tromey@adacore.com> + + PR python/23662: + * python.texi (Types In Python): Document new features. + +2020-04-15 Artur Shepilko <nomadbyte@gmail.com> + + * gdb.texinfo: Transform @var{[host]} to [@var{host}]; this + clears makeinfo warnings. + * python.texi: Add a missing period trailing an @xref{} clause; + this clears a makeinfo warning. + +2020-03-06 Tom de Vries <tdevries@suse.de> + + * gdb.texinfo: Fix "the the". + +2020-03-04 Tom de Vries <tdevries@suse.de> + + * gdb.texinfo: Remove trailing "done." in "Reading symbols from" lines. + * python.texi: Same. + +2020-03-02 Andrew Burgess <andrew.burgess@embecosm.com> + + * gdb.texinfo (Command History): Extend description for + GDBHISTFILE and GDBHISTSIZE, add detail about the filename for + 'set history filename' being optional. Describe the effect of an + empty history filename on 'set history save on'. + +2020-02-24 Andrew Burgess <andrew.burgess@embecosm.com> + + * gdb.texinfo (Threads): Fix alignment in 'info threads' example + output. + +2020-02-22 Tom Tromey <tom@tromey.com> + + * python.texi (Python API): Add menu item. + (TUI Windows In Python): New node. + +2020-02-22 Tom Tromey <tom@tromey.com> + + PR tui/17850: + * gdb.texinfo (TUI Commands): Document horizontal layouts. + +2020-02-22 Tom Tromey <tom@tromey.com> + + * gdb.texinfo (TUI Overview): Mention user layouts. + (TUI Commands): Document "tui new-layout". + +2020-01-26 Tom Tromey <tromey@adacore.com> + + * gdb.texinfo (M68K Features): Document floating-point feature + correspondence. + +2020-01-25 Philippe Waroquiers <philippe.waroquiers@skynet.be> + + * gdb.texinfo (Attach): Document the new option and the + set/show commands. + (Connecting): Reference the exec-file-mismatch option. + +2020-01-10 Pedro Alves <palves@redhat.com> + + * gdb.texinfo (Starting): Say "current inferior not connected" + instead of "GDB not connected". + (Inferiors and Programs): Rename node to ... + (Inferiors Connections and Programs): ... this. Update all + references. Talk about multiple target connections. Update "info + inferiors" info to mention the connections column. Describe "info + connections". Document "add-inferior -no-connection". + * guile.texi, python.texi: Update cross references. + +2020-01-01 Joel Brobecker <brobecker@adacore.com> + + * gdb.texinfo, refcard.tex: Update copyright year range. 2019-12-14 Andrew Burgess <andrew.burgess@embecosm.com> @@ -884,6 +1119,10 @@ * gdb.texinfo (Choosing Target Byte Order): Document endianness selection details with the `set endian auto' mode. +2018-05-31 Alan Hayward <alan.hayward@arm.com> + + * gdb.texinfo: Describe SVE feature. + 2018-05-04 Tom Tromey <tom@tromey.com> PR python/22731: @@ -1287,6 +1526,18 @@ (GDB/MI Async Records): Update documentation of library-loaded with new field. +2017-03-20 Artemiy Volkov <artemiyv@acm.org> + + PR gdb/14441 + * doc/gdb.texinfo (C Plus Plus Expressions): Mention that GDB + supports both lvalue and rvalue references. + +2017-03-20 Artemiy Volkov <artemiyv@acm.org> + + PR gdb/14441 + * python.texi (Types in Python): Add TYPE_CODE_RVALUE_REF to + table of constants. + 2017-03-16 Doug Evans <dje@google.com> * guile.texi (Lazy Strings In Guile): Mention arrays. @@ -1302,6 +1553,11 @@ * Memory Protection Extensions: Add information about inferior calls. +2017-02-28 Peter Bergner <bergner@vnet.ibm.com> + + * gdb.texinfo: Document new set/show disassembler-options + commands. + 2017-02-20 Jan Kratochvil <jan.kratochvil@redhat.com> * gdb.texinfo (Print Settings, Tail Call Frames): Rename DW_OP_GNU_*, @@ -1935,6 +2191,15 @@ * gdb.texinfo (Selection): Update documentation for 'frame' command. +2015-07-06 Andrew Burgess <andrew.burgess@embecosm.com> + + * gdb.texinfo (TUI): Restructure documentation on TUI layout and + focus commands. + +2015-07-06 Andrew Burgess <andrew.burgess@embecosm.com> + + * gdb.texinfo (TUI): Add comma after @xref. + 2015-07-02 Markus Metzger <markus.t.metzger@intel.com> * gdb.texinfo (Maintenance Commands): Document "maint btrace" @@ -2337,6 +2602,11 @@ 2014-12-02 Nick Bull <nicholaspbull@gmail.com> + * observer.texi (inferior_call_pre, inferior_call_post) + (memory_changed, register_changed): New observers. + +2014-12-02 Nick Bull <nicholaspbull@gmail.com> + * python.texi (Events In Python): Document new events InferiorCallPreEvent, InferiorCallPostEvent, MemoryChangedEvent and RegisterChangedEvent. @@ -2456,6 +2726,10 @@ * gdb.texinfo (Signaling) <signal command>: Explain what happens with multi-threaded programs. +2014-07-19 Ajit Agarwal <ajitkum@xilinx.com> + + * gdb.texinfo (MicroBlaze Features): Added. + 2014-06-27 Yao Qi <yao@codesourcery.com> * gdb.texinfo (Maintenance Commands): Update the output of @@ -3655,6 +3929,12 @@ * gdb.texinfo (GDB/MI Catchpoint Commands): New section. +2012-12-12 Paul Koning <paul_koning@dell.com> + + Add support for Python 3. + * gdb.texinfo (Inferior.read_memory): Mention that the return + value is a memoryview object if Python 3. + 2012-12-11 Pedro Alves <palves@redhat.com> * gdb.texinfo: Remove all mentions of Unixware throughout. @@ -6118,6 +6398,10 @@ * observer.texi (solib_unloaded): Document explicitly the fact that this observer is called before the associated symbols are unloaded. +2009-09-21 Jie Zhang <jie.zhang@analog.com> + + * gdb.texinfo: Escape "{" and "}". + 2009-09-19 Vladimir Prus <vladimir@codesourcery.com> * gdb.texinfo (GDB/MI Stack Manipulation): Document @@ -7288,6 +7572,11 @@ * gdb.texinfo (Thread Commands): Document -thread-info. Remove -thread-list-all-threads. +2008-03-14 Vladimir Prus <vladimir@codesourcery.com> + + Implement MI notification for new threads. + * observer.texi (new_thread): Document. + 2008-03-14 Pedro Alves <pedro@codesourcery.com> Sandra Loosemore <sandra@codesourcery.com> @@ -7545,6 +7834,11 @@ frame_unwind_register_unsigned in examples instead of frame_unwind_unsigned_register. +2007-10-16 Gaius Mulley <gaius@glam.ac.uk> + + * gdb.texinfo: Add TSIZE definition, removed statement about + unbounded arrays being unimplemented. + 2007-10-15 Daniel Jacobowitz <dan@codesourcery.com> * gdb.texinfo (Predefined Target Types): Add int128 @@ -7820,6 +8114,10 @@ * gdb.texinfo (GDB/MI Variable Objects): Document frozen variables objects. +2007-04-13 Paul Brook <paul@codesourcery.com> + + * gdb.texinfo: Document ieee_single and ieee_double target types. + 2007-04-13 Daniel Jacobowitz <dan@codesourcery.com> * gdb.texinfo (Memory): Reference Remote Debugging chapter. @@ -7831,6 +8129,10 @@ and "show remotedevice". (Embedded Processors): Delete H8/300, H8/500, and SH nodes. +2007-04-11 Steve Ellcey <sje@cup.hp.com> + + * gdbint.texinfo (warning flags): Add -Wno-char-subscripts. + 2007-04-11 Bob Wilson <bob.wilson@acm.org> * gdb.texinfo (Contributors, Continuing and Stepping) @@ -8279,6 +8581,11 @@ remote supported-packets. (General Query Packets): Document qSupported packet. +2006-06-13 Nathan Sidwell <nathan@codesourcery.com> + + * gdb.texinfo (system): Document behaviour with zero length + string. + 2006-06-10 Sandra Loosemore <sandra@codesourcery.com> * gdb.texinfo (File-I/O overview): Copy edit for grammar, spelling, @@ -8427,6 +8734,10 @@ * gdb.texinfo (Overview): Add an index entry to "empty response". +2006-03-29 Steve Ellcey <sje@cup.hp.com> + + * gdb.texinfo: Remove gdbserve.nlm documentation. + 2006-03-28 Jim Blandy <jimb@codesourcery.com> * gdbint.texinfo (Prologue Analysis): New section. @@ -9026,6 +9337,10 @@ * gdb.texinfo (General Query Packets): Fix texinfo compile warning and error. +2005-03-07 Joel Brobecker <brobecker@adacore.com> + + * observer.texi (executable_changed): New observer. + 2005-02-03 Kevin Buettner <kevinb@redhat.com> * gdb.texinfo (General Query Packets): Document qGetTLSAddr packet. @@ -9195,6 +9510,11 @@ * gdbint.texinfo (Host Definition): Delete description of FCLOSE_PROVIDED and GETENV_PROVIDED. +2004-08-11 Joel Brobecker <brobecker@gnat.com> + + * gdbint.texinfo (Host Definition): Remove documentation for + USE_O_NOCTTY, no longer used. + 2004-08-05 Mark Kettenis <kettenis@chello.nl> * gdbint.texinfo (Host Definition): Delete description of @@ -10169,6 +10489,10 @@ * gdbint.texinfo: Ditto. * gdb.texinfo: Ditto. +2002-12-29 Kazu Hirata <kazu@cs.umass.edu> + + * fdl.texi: Revert the last change. + 2002-12-22 Mark Kettenis <kettenis@gnu.org> * gdbint.texinfo (Target Architecture Definition): Update @@ -10288,6 +10612,10 @@ * gdb.texinfo: Add character set documentation. +2002-09-20 George Helffrich <george@gly.bris.ac.uk> + + * gdb.texinfo: Document edit command. + 2002-09-19 Andrew Cagney <ac131313@redhat.com> * gdb.texinfo (Packets): Revise `z' and `Z' packet documentation. @@ -10487,6 +10815,10 @@ * gdbint.texinfo (Releasing GDB): Rename ``Obsoleting any code'' to ``Obsoleting code''. Revise. +2002-05-21 Jason Thorpe <thorpej@wasabisystems.com> + + * gdbint.texinfo: Document new generic OS ABI framework. + 2002-05-17 Jim Blandy <jimb@redhat.com> * gdb.texinfo (C Preprocessor Macros): New chapter. @@ -10623,6 +10955,11 @@ * Makefile.in (gdb.info): Add explicit path to gdb.texinfo. Remove reference to 3.12. +2002-02-23 Paul Eggert <eggert@twinsun.com> + + * Makefile.in (GDBvn.texi): Change "head -1" to "sed q", since + POSIX 1003.1-2001 no longer allows "head -1". + 2002-02-23 Andrew Cagney <ac131313@redhat.com> * gdbint.texinfo: Include fdl.texi. @@ -10662,6 +10999,11 @@ '_ovly_debug_event', which allows GDB to keep better track of overlays. +2002-02-06 Richard Earnshaw <rearnsha@arm.com> + + * gdbint.texinfo (FLOAT_INFO): Mark as deprecated. + (PRINT_FLOAT_INFO): Document it. + 2002-02-03 Eli Zaretskii <eliz@gnu.org> * gdb.texinfo (Memory Region Attributes): Fix the wording. @@ -11489,6 +11831,10 @@ * gdbint.texinfo (Target Architecture Definition): Add PARM_BOUNDARY. +1999-10-07 Jim Blandy <jimb@zwingli.cygnus.com> + + * gdbint.texinfo (SYMBOLS_CAN_START_WITH_DOLLAR): Document. + 1999-10-05 Stan Shebs <shebs@andros.cygnus.com> From Dmitry Sivachenko <demon@gpad.ac.ru>: @@ -11593,6 +11939,10 @@ * Makefile.in: Rename inc-hist.texi to inc-hist.texinfo. * gdb.texinfo: Ditto. +Sun Aug 8 12:06:47 1999 Fred Fish <fnf@cygnus.com> + + * gdbint.texinfo (find_sym_fns): This replaces symfile_init. + 1999-08-06 Tom Tromey <tromey@cygnus.com> * gdb.texinfo (KOD): New node. @@ -11914,6 +12264,11 @@ * gdb.texinfo, refcard.tex: Restore author credit +Wed Oct 2 22:07:16 1996 Fred Fish <fnf@cygnus.com> + + * gdbint.texinfo: Document that SIGTRAMP_START and SIGTRAMP_END + are macros that take an single argument. + Wed Oct 2 22:01:36 1996 Fred Fish <fnf@fishfood.ninemoons.com> * gdbint.texinfo (SIGTRAMP_START, SIGTRAMP_END): Update @@ -12020,6 +12375,10 @@ * Makefile.in (maintainer-clean): New target, synonym for realclean. +Wed Sep 20 08:16:03 1995 steve chamberlain <sac@slash.cygnus.com> + + * gdbint.texinfo (GETENV_PROVIDED, FCLOSE_PROVIDED): Document. + Thu Aug 3 10:45:37 1995 Fred Fish <fnf@cygnus.com> * Update all FSF addresses except those in COPYING* files. @@ -12872,6 +13231,17 @@ * gdb.texinfo (Environment): Mention pitfall with .cshrc. +Thu Apr 29 00:03:59 1993 Fred Fish (fnf@cygnus.com) + + * gdbint.texinfo (LONG_LONG): Replace with CC_HAS_LONG_LONG. + Add PRINTF_HAS_LONG_LONG references. + +Wed Apr 28 11:39:18 1993 Roland H. Pesch (pesch@fowanton.cygnus.com) + + * gdb.texinfo: Make node "Shell Commands" unconditional; describe + `set demangle-style arm' (not cfront); mention can type `q' to + discard output, when gdb pages. + Tue Apr 27 14:02:57 1993 Jim Kingdon (kingdon@cygnus.com) * gdbint.texinfo (new node Debugging GDB, elsewhere): @@ -12928,6 +13298,10 @@ * stabs.texinfo: Fixes about N_SO. +Mon Mar 29 15:03:25 1993 Fred Fish (fnf@cygnus.com) + + * gdbinit.texinfo: Document renaming of tm-29k.h to tm-a29k.h. + Fri Mar 26 18:00:35 1993 Roland H. Pesch (pesch@fowanton.cygnus.com) * gdb.texinfo: include list of nonstandard init file names @@ -12958,6 +13332,11 @@ * gdb.texinfo, gdvinv-s.texinfo: formatting improvements. +Tue Feb 23 11:46:11 1993 Mike Stump (mrs@cygnus.com) + + * stabs.texi: The `this' pointer is now known by the name + `this' instead of `$t'. + Fri Mar 19 21:46:50 1993 John Gilmore (gnu@cygnus.com) * gdbint.texinfo: Doc NO_MMALLOC and NO_MMALLOC_CHECK as @@ -12995,6 +13374,10 @@ * gdbint.texinfo: Eliminate IBM6000_HOST, document IBM6000_TARGET. +Wed Feb 10 23:42:37 1993 John Gilmore (gnu@cygnus.com) + + * gdbint.texinfo: Eliminate IBM6000_HOST, document IBM6000_TARGET. + Tue Feb 9 18:26:21 1993 Roland H. Pesch (pesch@fowanton.cygnus.com) * gdb.texinfo, gdbinv-s.texi: misc updates @@ -13033,6 +13416,18 @@ * gdbinv-s.texi: Mention that Z8000 simulator can simulate Z8001 as well as Z8002. +Thu Dec 17 00:44:57 1992 John Gilmore (gnu@cygnus.com) + + * gdbint.texinfo (Host Conditionals): Remove + NAMES_HAVE_UNDERSCORE, SOME_NAMES_HAVE_DOT, document + MEM_FNS_DECLARED. + (Target Conditionals): Remove all of the above. + +Tue Dec 15 02:01:00 1992 John Gilmore (gnu@cygnus.com) + + * gdbint.texinfo: SWAP_HOST_AND_TARGET => SWAP_TARGET_AND_HOST. + Noticed by Andy Jackson, <arj@cam-orl.co.uk>. + Sat Nov 28 06:51:35 1992 John Gilmore (gnu@cygnus.com) * gdbint.texinfo: Add sections on clean design and on how to send @@ -13042,6 +13437,10 @@ * gdbint.texinfo: Add how to declare the result of make_cleanup. +Tue Oct 27 17:08:45 1992 K. Richard Pixley (rich@cygnus.com) + + * gdbint.texinfo: nm.h now included in defs.h. + Mon Oct 26 11:09:47 1992 John Gilmore (gnu@cygnus.com) * gdb.texinfo: Fix typo, reported by Karl Berry. @@ -13050,11 +13449,38 @@ * gdb.texinfo: Add opcodes dir to GDB distribution description. +Wed Oct 21 03:51:01 1992 John Gilmore (gnu@cygnus.com) + + * gdbint.texinfo: Improve REGISTER_U_ADDR and USE_PROC_FS doc. + +Tue Oct 20 23:27:56 1992 John Gilmore (gnu@cygnus.com) + + * gdbint.texinfo: Document obsolete STACK_END_ADDR. + (all @node commands): Use new form to avoid nitpicking errors. + * gdbint.texinfo: Document host/native/target split. + +Tue Oct 20 21:32:18 1992 K. Richard Pixley (rich@sendai.cygnus.com) + + * gdbint.texinfo: add PUSH_DUMMY_FRAME, POP_FRAME. + +Fri Oct 16 03:34:01 1992 John Gilmore (gnu@cygnus.com) + + * gdbint.texinfo: Update GET_LONGJMP_TARGET, L_SET doc. + Sat Oct 10 18:04:58 1992 david d `zoo' zuhn (zoo at cirdan.cygnus.com) * gdbint.texinfo: fixed a stray email address (needs @@), added @table @code to node "Native Conditionals" +Thu Oct 8 16:27:45 1992 K. Richard Pixley (rich@sendai.cygnus.com) + + * gdbint.texinfo: document a few more macros, create new section + for native macros. + +Thu Oct 1 01:57:56 1992 John Gilmore (gnu@cygnus.com) + + * gdb.texinfo: Document command hooks. + Tue Sep 22 00:34:15 1992 John Gilmore (gnu@cygnus.com) * gdbint.texinfo: Describe coding style of GDB. @@ -13067,6 +13493,19 @@ * gdbint.texinfo: Improve release doc slightly. +Fri Sep 11 18:28:28 1992 Roland H. Pesch (pesch@fowanton.cygnus.com) + + * gdb.texinfo, gdbinv-m.m4.in, gdbinv-s.m4.in: First pass at doc + for two new remote targets---29K using UDI, and Tandem ST2000 + using STDBUG. + + * all.m4, none.m4: new m4 switch, _ST2000__ + + * all.m4: turn on H8/300 stuff for generic manual + + * gdbinv-s.m4.in: remove text on special procedures to continue + after explicit call to breakpoint() in serial stubs. + Fri Sep 11 01:34:25 1992 John Gilmore (gnu@sphagnum.cygnus.com) * gdbint.texinfo: Improve doc of GDB config macros. @@ -13076,6 +13515,15 @@ * stabs.texinfo: Remove Bothner's changes for C++ nested types. These will be reinserted when examined. +Fri Sep 4 18:53:57 1992 Roland H. Pesch (pesch@fowanton.cygnus.com) + + * gdb.texinfo: fix shameful error of agreement reported by + jimb@occs.cs.oberlin.edu (Jim Blandy) + * gdb.texinfo: remove old partial discussion of remote serial + protocol (via serial debug stubs) + * gdbinv-m.m4.in, gdbinv-s.m4.in: new section discussing + use of serial debug stubs + Mon Aug 24 01:17:55 1992 John Gilmore (gnu@cygnus.com) * gdbint.texinfo: Make a start at documenting all the #if macros @@ -13124,6 +13572,10 @@ * gdbint.texinfo: Add section on partial symbol tables. +Fri Jun 19 10:28:05 1992 John Gilmore (gnu at cygnus.com) + + * gdb.texinfo: Document new am29k setting. + Sat Jun 20 16:31:10 1992 John Gilmore (gnu at cygnus.com) * gdb.texinfo: document `set remotedebug' and `set diff -Nru gdb-9.1/gdb/doc/Doxyfile-base.in gdb-10.2/gdb/doc/Doxyfile-base.in --- gdb-9.1/gdb/doc/Doxyfile-base.in 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/doc/Doxyfile-base.in 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2014-2020 Free Software Foundation, Inc. +# Copyright (C) 2014-2021 Free Software Foundation, Inc. # Base doxyfile for GDB. # This file is part of GDB. diff -Nru gdb-9.1/gdb/doc/Doxyfile-gdb-api.in gdb-10.2/gdb/doc/Doxyfile-gdb-api.in --- gdb-9.1/gdb/doc/Doxyfile-gdb-api.in 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/doc/Doxyfile-gdb-api.in 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2014-2020 Free Software Foundation, Inc. +# Copyright (C) 2014-2021 Free Software Foundation, Inc. # Doxygen file for GDB internal API. # This file is part of GDB. diff -Nru gdb-9.1/gdb/doc/Doxyfile-gdbserver.in gdb-10.2/gdb/doc/Doxyfile-gdbserver.in --- gdb-9.1/gdb/doc/Doxyfile-gdbserver.in 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/doc/Doxyfile-gdbserver.in 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2014-2020 Free Software Foundation, Inc. +# Copyright (C) 2014-2021 Free Software Foundation, Inc. # Doxygen file for a GDBserver cross-reference. # This file is part of GDB. diff -Nru gdb-9.1/gdb/doc/Doxyfile-gdb-xref.in gdb-10.2/gdb/doc/Doxyfile-gdb-xref.in --- gdb-9.1/gdb/doc/Doxyfile-gdb-xref.in 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/doc/Doxyfile-gdb-xref.in 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2014-2020 Free Software Foundation, Inc. +# Copyright (C) 2014-2021 Free Software Foundation, Inc. # Doxygen file for a full GDB cross-reference. # This file is part of GDB. diff -Nru gdb-9.1/gdb/doc/doxy-index.in gdb-10.2/gdb/doc/doxy-index.in --- gdb-9.1/gdb/doc/doxy-index.in 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/doc/doxy-index.in 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -<!-- Copyright (C) 2014-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2014-2021 Free Software Foundation, Inc. Navigation page for Doxygen-generated GDB info. diff -Nru gdb-9.1/gdb/doc/gcore.1 gdb-10.2/gdb/doc/gcore.1 --- gdb-9.1/gdb/doc/gcore.1 2020-02-08 12:54:20.000000000 +0000 +++ gdb-10.2/gdb/doc/gcore.1 2021-04-25 04:10:45.000000000 +0000 @@ -1,4 +1,4 @@ -.\" Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35) +.\" Automatically generated by Pod::Man 4.11 (Pod::Simple 3.35) .\" .\" Standard preamble: .\" ======================================================================== @@ -54,16 +54,20 @@ .\" Avoid warning from groff about undefined register 'F'. .de IX .. -.if !\nF .nr F 0 -.if \nF>0 \{\ -. de IX -. tm Index:\\$1\t\\n%\t"\\$2" +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" .. -. if !\nF==2 \{\ -. nr % 0 -. nr F 2 +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} . \} .\} +.rr rF .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. @@ -129,7 +133,7 @@ .\" ======================================================================== .\" .IX Title "GCORE 1" -.TH GCORE 1 "2020-02-08" "gdb-9.1" "GNU Development Tools" +.TH GCORE 1 "2021-04-25" "gdb-10.2" "GNU Development Tools" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l @@ -178,7 +182,7 @@ Richard M. Stallman and Roland H. Pesch, July 1991. .SH "COPYRIGHT" .IX Header "COPYRIGHT" -Copyright (c) 1988\-2020 Free Software Foundation, Inc. +Copyright (c) 1988\-2021 Free Software Foundation, Inc. .PP Permission is granted to copy, distribute and/or modify this document under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.3 or diff -Nru gdb-9.1/gdb/doc/gdb.1 gdb-10.2/gdb/doc/gdb.1 --- gdb-9.1/gdb/doc/gdb.1 2020-02-08 12:54:20.000000000 +0000 +++ gdb-10.2/gdb/doc/gdb.1 2021-04-25 04:10:45.000000000 +0000 @@ -1,4 +1,4 @@ -.\" Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35) +.\" Automatically generated by Pod::Man 4.11 (Pod::Simple 3.35) .\" .\" Standard preamble: .\" ======================================================================== @@ -54,16 +54,20 @@ .\" Avoid warning from groff about undefined register 'F'. .de IX .. -.if !\nF .nr F 0 -.if \nF>0 \{\ -. de IX -. tm Index:\\$1\t\\n%\t"\\$2" +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" .. -. if !\nF==2 \{\ -. nr % 0 -. nr F 2 +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} . \} .\} +.rr rF .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. @@ -129,7 +133,7 @@ .\" ======================================================================== .\" .IX Title "GDB 1" -.TH GDB 1 "2020-02-08" "gdb-9.1" "GNU Development Tools" +.TH GDB 1 "2021-04-25" "gdb-10.2" "GNU Development Tools" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l @@ -164,7 +168,7 @@ Change things in your program, so you can experiment with correcting the effects of one bug and go on to learn about another. .PP -You can use \s-1GDB\s0 to debug programs written in C, C@t{++}, Fortran and +You can use \s-1GDB\s0 to debug programs written in C, \*(C+, Fortran and Modula\-2. .PP \&\s-1GDB\s0 is invoked with the shell command \f(CW\*(C`gdb\*(C'\fR. Once started, it reads @@ -386,7 +390,7 @@ Richard M. Stallman and Roland H. Pesch, July 1991. .SH "COPYRIGHT" .IX Header "COPYRIGHT" -Copyright (c) 1988\-2020 Free Software Foundation, Inc. +Copyright (c) 1988\-2021 Free Software Foundation, Inc. .PP Permission is granted to copy, distribute and/or modify this document under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.3 or diff -Nru gdb-9.1/gdb/doc/gdb-add-index.1 gdb-10.2/gdb/doc/gdb-add-index.1 --- gdb-9.1/gdb/doc/gdb-add-index.1 2020-02-08 12:54:20.000000000 +0000 +++ gdb-10.2/gdb/doc/gdb-add-index.1 2021-04-25 04:10:45.000000000 +0000 @@ -1,4 +1,4 @@ -.\" Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35) +.\" Automatically generated by Pod::Man 4.11 (Pod::Simple 3.35) .\" .\" Standard preamble: .\" ======================================================================== @@ -54,16 +54,20 @@ .\" Avoid warning from groff about undefined register 'F'. .de IX .. -.if !\nF .nr F 0 -.if \nF>0 \{\ -. de IX -. tm Index:\\$1\t\\n%\t"\\$2" +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" .. -. if !\nF==2 \{\ -. nr % 0 -. nr F 2 +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} . \} .\} +.rr rF .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. @@ -129,7 +133,7 @@ .\" ======================================================================== .\" .IX Title "GDB-ADD-INDEX 1" -.TH GDB-ADD-INDEX 1 "2020-02-08" "gdb-9.1" "GNU Development Tools" +.TH GDB-ADD-INDEX 1 "2021-04-25" "gdb-10.2" "GNU Development Tools" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l @@ -179,7 +183,7 @@ Richard M. Stallman and Roland H. Pesch, July 1991. .SH "COPYRIGHT" .IX Header "COPYRIGHT" -Copyright (c) 1988\-2020 Free Software Foundation, Inc. +Copyright (c) 1988\-2021 Free Software Foundation, Inc. .PP Permission is granted to copy, distribute and/or modify this document under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.3 or diff -Nru gdb-9.1/gdb/doc/gdb.info gdb-10.2/gdb/doc/gdb.info --- gdb-9.1/gdb/doc/gdb.info 2020-02-08 12:54:19.000000000 +0000 +++ gdb-10.2/gdb/doc/gdb.info 2021-04-25 04:10:44.000000000 +0000 @@ -1,6 +1,6 @@ -This is gdb.info, produced by makeinfo version 6.5 from gdb.texinfo. +This is gdb.info, produced by makeinfo version 6.7 from gdb.texinfo. -Copyright (C) 1988-2020 Free Software Foundation, Inc. +Copyright (C) 1988-2021 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or @@ -21,9 +21,9 @@ This file documents the GNU debugger GDB. This is the Tenth Edition, of 'Debugging with GDB: the GNU -Source-Level Debugger' for GDB (GDB) Version 9.1. +Source-Level Debugger' for GDB (GDB) Version 10.2. - Copyright (C) 1988-2020 Free Software Foundation, Inc. + Copyright (C) 1988-2021 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or @@ -38,790 +38,806 @@  Indirect: -gdb.info-1: 1700 -gdb.info-2: 302377 -gdb.info-3: 602008 -gdb.info-4: 901945 -gdb.info-5: 1212734 -gdb.info-6: 1512402 -gdb.info-7: 1841385 -gdb.info-8: 2230675 +gdb.info-1: 1701 +gdb.info-2: 305620 +gdb.info-3: 601927 +gdb.info-4: 903040 +gdb.info-5: 1202864 +gdb.info-6: 1515714 +gdb.info-7: 1806015 +gdb.info-8: 2113924  Tag Table: (Indirect) -Node: Top1700 -Node: Summary5156 -Node: Free Software7017 -Node: Free Documentation7757 -Node: Contributors12691 -Node: Sample Session21570 -Node: Invocation28406 -Node: Invoking GDB28949 -Node: File Options31291 -Ref: --readnever34362 -Node: Mode Options34836 -Ref: -nx35063 -Ref: -nh36820 -Node: Startup43144 -Ref: Home Directory Init File43990 -Ref: Option -init-eval-command44100 -Ref: Init File in the Current Directory during Startup44440 -Ref: Startup-Footnote-146636 -Node: Quitting GDB46745 -Node: Shell Commands47642 -Ref: pipe48569 -Node: Logging Output50083 -Node: Commands51209 -Node: Command Syntax51970 -Node: Command Settings54142 -Node: Completion57155 -Ref: Completion-Footnote-164095 -Node: Command Options64255 -Node: Help66607 -Node: Running73121 -Node: Compilation74350 -Node: Starting76429 -Ref: set exec-wrapper82219 -Ref: set startup-with-shell83308 -Ref: set auto-connect-native-target84369 -Node: Arguments88765 -Node: Environment90034 -Ref: set environment91916 -Ref: unset environment93098 -Node: Working Directory94104 -Ref: set cwd command94676 -Ref: cd command95616 -Node: Input/Output96310 -Node: Attach98370 -Node: Kill Process100836 -Node: Inferiors and Programs101817 -Node: Threads109549 -Ref: thread numbers111660 -Ref: thread ID lists112550 -Ref: global thread numbers113590 -Ref: thread apply all117442 -Ref: set libthread-db-search-path122281 -Node: Forks124335 -Node: Checkpoint/Restart130853 -Ref: Checkpoint/Restart-Footnote-1135381 -Node: Stopping135416 -Node: Breakpoints136679 -Node: Set Breaks139936 -Node: Set Watchpoints158895 -Node: Set Catchpoints168277 -Ref: catch syscall173775 -Node: Delete Breaks181540 -Node: Disabling183476 -Node: Conditions186856 -Node: Break Commands192503 -Node: Dynamic Printf195723 -Node: Save Breakpoints200027 -Node: Static Probe Points201202 -Ref: Static Probe Points-Footnote-1205380 -Ref: Static Probe Points-Footnote-2205540 -Node: Error in Breakpoints205680 -Node: Breakpoint-related Warnings206416 -Node: Continuing and Stepping208743 -Ref: range stepping218523 -Node: Skipping Over Functions and Files219603 -Node: Signals225452 -Ref: stepping and signal handlers229886 -Ref: stepping into signal handlers230682 -Ref: extra signal information231915 -Node: Thread Stops234381 -Node: All-Stop Mode235480 -Node: Non-Stop Mode239447 -Node: Background Execution242860 -Node: Thread-Specific Breakpoints245076 -Node: Interrupted System Calls247092 -Node: Observer Mode248606 -Node: Reverse Execution252042 -Ref: Reverse Execution-Footnote-1256960 -Ref: Reverse Execution-Footnote-2257587 -Node: Process Record and Replay257637 -Node: Stack279026 -Node: Frames280643 -Node: Backtrace282981 -Ref: backtrace-command283318 -Ref: set backtrace past-main289765 -Ref: set backtrace past-entry290093 -Ref: set backtrace limit290660 -Ref: Backtrace-Footnote-1291284 -Node: Selection291472 -Node: Frame Info296255 -Node: Frame Apply302377 -Ref: frame apply302563 -Node: Frame Filter Management306796 -Ref: disable frame-filter all307324 -Node: Source311632 -Node: List312698 -Node: Specify Location315400 -Node: Linespec Locations316021 -Node: Explicit Locations319420 -Node: Address Locations322632 -Node: Edit324383 -Ref: Edit-Footnote-1325859 -Node: Search326094 -Node: Source Path326902 -Ref: set substitute-path335843 -Node: Machine Code338063 -Node: Data348407 -Ref: print options349246 -Node: Expressions359247 -Node: Ambiguous Expressions361350 -Node: Variables364580 -Node: Arrays371178 -Node: Output Formats373709 -Ref: Output Formats-Footnote-1377082 -Node: Memory377239 -Ref: addressable memory unit383424 -Node: Auto Display384918 -Node: Print Settings389460 -Ref: set print address389758 -Ref: set print symbol393420 -Ref: set print array393908 -Ref: set print array-indexes394236 -Ref: set print elements394722 -Ref: set print frame-arguments395387 -Ref: set print raw-frame-arguments397556 -Ref: set print entry-values397972 -Ref: set print frame-info402351 -Ref: set print repeats404017 -Ref: set print max-depth404659 -Ref: set print null-stop406351 -Ref: set print pretty406675 -Ref: set print raw-values407262 -Ref: set print union408279 -Ref: set print object410585 -Ref: set print static-members411379 -Ref: set print vtbl412056 -Node: Pretty Printing412440 -Node: Pretty-Printer Introduction412954 -Node: Pretty-Printer Example414709 -Node: Pretty-Printer Commands415487 -Node: Value History418418 -Node: Convenience Vars420840 -Node: Convenience Funs428482 -Node: Registers436997 -Ref: standard registers438205 -Ref: Registers-Footnote-1443156 -Node: Floating Point Hardware443551 -Node: Vector Unit444083 -Node: OS Information444470 -Ref: linux info os infotypes446494 -Node: Memory Region Attributes451085 -Node: Dump/Restore Files455749 -Node: Core File Generation458152 -Ref: set use-coredump-filter459712 -Ref: set dump-excluded-mappings461160 -Node: Character Sets461442 -Node: Caching Target Data467807 -Ref: Caching Target Data-Footnote-1470535 -Node: Searching Memory470773 -Node: Value Sizes473916 -Node: Optimized Code475568 -Node: Inline Functions477245 -Node: Tail Call Frames479872 -Ref: set debug entry-values482009 -Node: Macros486073 -Ref: Macros-Footnote-1493649 -Node: Tracepoints493802 -Node: Set Tracepoints495864 -Node: Create and Delete Tracepoints498802 -Node: Enable and Disable Tracepoints505150 -Node: Tracepoint Passcounts506390 -Node: Tracepoint Conditions507801 -Node: Trace State Variables509495 -Node: Tracepoint Actions511690 -Node: Listing Tracepoints518473 -Node: Listing Static Tracepoint Markers520175 -Node: Starting and Stopping Trace Experiments522023 -Ref: disconnected tracing523768 -Node: Tracepoint Restrictions528188 -Node: Analyze Collected Data531957 -Node: tfind533263 -Node: tdump537745 -Node: save tracepoints540260 -Node: Tracepoint Variables540756 -Node: Trace Files541884 -Node: Overlays544260 -Node: How Overlays Work544980 -Ref: A code overlay547515 -Node: Overlay Commands550948 -Node: Automatic Overlay Debugging555130 -Node: Overlay Sample Program557269 -Node: Languages559006 -Node: Setting560169 -Node: Filenames561870 -Node: Manually562681 -Node: Automatically563890 -Node: Show564951 -Ref: show language565239 -Node: Checks566273 -Node: Type Checking567278 -Node: Range Checking569107 -Node: Supported Languages571508 -Node: C572845 -Node: C Operators573809 -Node: C Constants578147 -Node: C Plus Plus Expressions581026 -Node: C Defaults584386 -Node: C Checks585054 -Node: Debugging C585614 -Node: Debugging C Plus Plus586098 -Node: Decimal Floating Point590985 -Node: D592255 -Node: Go592513 -Node: Objective-C593607 -Node: Method Names in Commands594070 -Node: The Print Command with Objective-C595761 -Node: OpenCL C596412 -Node: OpenCL C Datatypes596687 -Node: OpenCL C Expressions597062 -Node: OpenCL C Operators597419 -Node: Fortran597651 -Node: Fortran Operators598372 -Node: Fortran Defaults599417 -Node: Special Fortran Commands599802 -Node: Pascal602008 -Node: Rust602519 -Node: Modula-2605606 -Node: M2 Operators606579 -Node: Built-In Func/Proc609577 -Node: M2 Constants612491 -Node: M2 Types614092 -Node: M2 Defaults617310 -Node: Deviations617911 -Node: M2 Checks619012 -Node: M2 Scope619829 -Node: GDB/M2620853 -Node: Ada621766 -Node: Ada Mode Intro623072 -Node: Omissions from Ada624574 -Node: Additions to Ada628929 -Node: Overloading support for Ada632857 -Node: Stopping Before Main Program634497 -Node: Ada Exceptions635044 -Node: Ada Tasks636243 -Node: Ada Tasks and Core Files642734 -Node: Ravenscar Profile643581 -Node: Ada Settings644652 -Node: Ada Glitches646074 -Node: Unsupported Languages650082 -Node: Symbols650772 -Ref: quoting names651375 -Node: Altering682290 -Node: Assignment683328 -Node: Jumping686434 -Node: Signaling688508 -Node: Returning691437 -Node: Calling694788 -Node: Patching700273 -Node: Compiling and Injecting Code701387 -Ref: set debug compile705014 -Ref: set debug compile-cplus-types705264 -Node: GDB Files715285 -Node: Files716074 -Ref: Shared Libraries729791 -Ref: Files-Footnote-1741989 -Node: File Caching742118 -Node: Separate Debug Files743252 -Ref: debug-file-directory746605 -Node: MiniDebugInfo755220 -Node: Index Files757671 -Node: Symbol Errors761842 -Node: Data Files765458 -Node: Targets766414 -Node: Active Targets767894 -Node: Target Commands768968 -Ref: load773357 -Ref: flash-erase774550 -Node: Byte Order774610 -Node: Remote Debugging776049 -Node: Connecting777311 -Ref: --multi Option in Types of Remote Connnections779537 -Ref: Attaching in Types of Remote Connections780952 -Ref: Host and target files781453 -Node: File Transfer790075 -Node: Server791014 -Ref: Running gdbserver792590 -Ref: Attaching to a program794808 -Ref: Other Command-Line Arguments for gdbserver797333 -Ref: Monitor Commands for gdbserver800652 -Ref: Server-Footnote-1806028 -Node: Remote Configuration806148 -Ref: set remotebreak807408 -Ref: set remote hardware-watchpoint-limit808870 -Ref: set remote hardware-breakpoint-limit808870 -Ref: set remote hardware-watchpoint-length-limit809372 -Ref: set remote exec-file809827 -Node: Remote Stub821632 -Node: Stub Contents824527 -Node: Bootstrapping826634 -Node: Debug Session830449 -Node: Configurations832490 -Node: Native833259 -Node: BSD libkvm Interface833828 -Node: Process Information834880 -Node: DJGPP Native840429 -Node: Cygwin Native846983 -Node: Non-debug DLL Symbols851904 -Node: Hurd Native856143 -Node: Darwin861399 -Node: FreeBSD862676 -Node: Embedded OS863396 -Node: Embedded Processors863807 -Node: ARC864797 -Node: ARM865344 -Node: M68K867891 -Node: MicroBlaze868064 -Node: MIPS Embedded869513 -Node: OpenRISC 1000870810 -Node: PowerPC Embedded871716 -Node: AVR874945 -Node: CRIS875317 -Node: Super-H876293 -Node: Architectures877352 -Node: AArch64877748 -Node: i386879321 -Ref: i386-Footnote-1883531 -Node: Alpha883617 -Node: MIPS883750 -Node: HPPA887644 -Node: PowerPC888166 -Node: Nios II888902 -Node: Sparc64889307 -Node: S12Z891675 -Node: Controlling GDB891968 -Node: Prompt892911 -Node: Editing894629 -Node: Command History895939 -Node: Screen Size901945 -Node: Output Styling903961 -Node: Numbers908044 -Node: ABI910026 -Node: Auto-loading913199 -Ref: set auto-load off914574 -Ref: show auto-load915210 -Ref: info auto-load915989 -Node: Init File in the Current Directory918956 -Ref: set auto-load local-gdbinit919531 -Ref: show auto-load local-gdbinit919713 -Ref: info auto-load local-gdbinit919877 -Node: libthread_db.so.1 file920025 -Ref: set auto-load libthread-db920964 -Ref: show auto-load libthread-db921095 -Ref: info auto-load libthread-db921232 -Node: Auto-loading safe path921416 -Ref: set auto-load safe-path922722 -Ref: show auto-load safe-path923461 -Ref: add-auto-load-safe-path923584 -Node: Auto-loading verbose mode926486 -Ref: set debug auto-load927649 -Ref: show debug auto-load927750 -Node: Messages/Warnings927872 -Ref: confirmation requests929306 -Node: Debugging Output930510 -Node: Other Misc Settings940927 -Node: Extending GDB941951 -Node: Sequences943804 -Node: Define944465 -Node: Hooks949950 -Node: Command Files952316 -Node: Output957389 -Ref: eval962191 -Node: Auto-loading sequences962353 -Ref: set auto-load gdb-scripts962848 -Ref: show auto-load gdb-scripts962972 -Ref: info auto-load gdb-scripts963102 -Node: Python963333 -Node: Python Commands964619 -Node: Python API966733 -Node: Basic Python969338 -Ref: prompt_hook980375 -Node: Exception Handling980973 -Node: Values From Inferior983875 -Node: Types In Python1001211 -Node: Pretty Printing API1011203 -Node: Selecting Pretty-Printers1015646 -Node: Writing a Pretty-Printer1018373 -Node: Type Printing API1023695 -Node: Frame Filter API1026311 -Node: Frame Decorator API1033623 -Ref: frame_args1037364 -Node: Writing a Frame Filter1040694 -Node: Unwinding Frames in Python1052168 -Node: Xmethods In Python1059807 -Node: Xmethod API1062703 -Node: Writing an Xmethod1066515 -Node: Inferiors In Python1072350 -Node: Events In Python1076109 -Node: Threads In Python1085317 -Node: Recordings In Python1088661 -Node: Commands In Python1095995 -Node: Parameters In Python1105408 -Node: Functions In Python1112346 -Node: Progspaces In Python1114563 -Node: Objfiles In Python1119468 -Node: Frames In Python1126130 -Node: Blocks In Python1133136 -Node: Symbols In Python1137803 -Node: Symbol Tables In Python1147266 -Node: Line Tables In Python1150487 -Node: Breakpoints In Python1153324 -Ref: python_breakpoint_thread1159647 -Node: Finish Breakpoints in Python1162680 -Node: Lazy Strings In Python1164786 -Node: Architectures In Python1167014 -Node: Python Auto-loading1169203 -Ref: set auto-load python-scripts1169832 -Ref: show auto-load python-scripts1169932 -Ref: info auto-load python-scripts1170038 -Node: Python modules1171172 -Node: gdb.printing1171558 -Node: gdb.types1172985 -Node: gdb.prompt1175997 -Node: Guile1177593 -Node: Guile Introduction1178252 -Node: Guile Commands1179123 -Node: Guile API1180977 -Node: Basic Guile1182974 -Node: Guile Configuration1188656 -Node: GDB Scheme Data Types1189632 -Node: Guile Exception Handling1191464 -Node: Values From Inferior In Guile1195498 -Node: Arithmetic In Guile1212734 -Node: Types In Guile1214365 -Ref: Fields of a type in Guile1222306 -Node: Guile Pretty Printing API1223694 -Node: Selecting Guile Pretty-Printers1229423 -Node: Writing a Guile Pretty-Printer1231799 -Node: Commands In Guile1236984 -Node: Parameters In Guile1247764 -Ref: Parameters In Guile-Footnote-11254645 -Node: Progspaces In Guile1254761 -Node: Objfiles In Guile1257349 -Node: Frames In Guile1259630 -Node: Blocks In Guile1266208 -Node: Symbols In Guile1271016 -Node: Symbol Tables In Guile1278351 -Node: Breakpoints In Guile1281314 -Node: Lazy Strings In Guile1291575 -Node: Architectures In Guile1293866 -Node: Disassembly In Guile1298173 -Node: I/O Ports in Guile1301375 -Node: Memory Ports in Guile1301931 -Node: Iterators In Guile1305197 -Node: Guile Auto-loading1309486 -Ref: set auto-load guile-scripts1310109 -Ref: show auto-load guile-scripts1310207 -Ref: info auto-load guile-scripts1310311 -Node: Guile Modules1311270 -Node: Guile Printing Module1311592 -Node: Guile Types Module1312411 -Node: Auto-loading extensions1313704 -Node: objfile-gdbdotext file1314902 -Ref: set auto-load scripts-directory1316338 -Ref: with-auto-load-dir1316714 -Ref: show auto-load scripts-directory1317532 -Ref: add-auto-load-scripts-directory1317612 -Node: dotdebug_gdb_scripts section1318088 -Node: Which flavor to choose?1321838 -Node: Multiple Extension Languages1323659 -Node: Aliases1324723 -Node: Interpreters1327588 -Node: TUI1330739 -Node: TUI Overview1331737 -Node: TUI Keys1334170 -Node: TUI Single Key Mode1336893 -Node: TUI Commands1338076 -Node: TUI Configuration1341843 -Node: Emacs1343865 -Node: GDB/MI1349302 -Node: GDB/MI General Design1352007 -Node: Context management1354527 -Node: Asynchronous and non-stop modes1358314 -Node: Thread groups1361287 -Node: GDB/MI Command Syntax1363565 -Node: GDB/MI Input Syntax1363808 -Node: GDB/MI Output Syntax1365358 -Node: GDB/MI Compatibility with CLI1368943 -Node: GDB/MI Development and Front Ends1369680 -Node: GDB/MI Output Records1373199 -Node: GDB/MI Result Records1373605 -Node: GDB/MI Stream Records1374955 -Node: GDB/MI Async Records1376220 -Node: GDB/MI Breakpoint Information1386657 -Node: GDB/MI Frame Information1392293 -Node: GDB/MI Thread Information1393575 -Node: GDB/MI Ada Exception Information1395045 -Node: GDB/MI Simple Examples1395595 -Node: GDB/MI Command Description Format1397831 -Node: GDB/MI Breakpoint Commands1398711 -Ref: -break-insert1405819 -Node: GDB/MI Catchpoint Commands1419393 -Node: Shared Library GDB/MI Catchpoint Commands1419806 -Node: Ada Exception GDB/MI Catchpoint Commands1421464 -Node: C++ Exception GDB/MI Catchpoint Commands1425014 -Node: GDB/MI Program Context1429030 -Node: GDB/MI Thread Commands1433298 -Node: GDB/MI Ada Tasking Commands1436599 -Node: GDB/MI Program Execution1438871 -Node: GDB/MI Stack Manipulation1451138 -Ref: -stack-list-arguments1453062 -Ref: -stack-list-frames1456892 -Ref: -stack-list-locals1461221 -Ref: -stack-list-variables1462711 -Node: GDB/MI Variable Objects1464245 -Ref: -var-set-format1474211 -Ref: -var-list-children1475592 -Ref: -var-update1484400 -Ref: -var-set-frozen1487398 -Ref: -var-set-update-range1488195 -Ref: -var-set-visualizer1488724 -Node: GDB/MI Data Manipulation1490214 -Node: GDB/MI Tracepoint Commands1512402 -Node: GDB/MI Symbol Query1524193 -Ref: -symbol-info-functions1524462 -Ref: -symbol-info-module-functions1528975 -Ref: -symbol-info-module-variables1531955 -Ref: -symbol-info-modules1535672 -Ref: -symbol-info-types1537576 -Ref: -symbol-info-variables1539569 -Node: GDB/MI File Commands1544593 -Node: GDB/MI Target Manipulation1549027 -Node: GDB/MI File Transfer Commands1555685 -Node: GDB/MI Ada Exceptions Commands1557008 -Node: GDB/MI Support Commands1558361 -Node: GDB/MI Miscellaneous Commands1563080 -Ref: -interpreter-exec1573433 -Node: Annotations1577405 -Node: Annotations Overview1578324 -Node: Server Prefix1580787 -Node: Prompting1581521 -Node: Errors1583038 -Node: Invalidation1583934 -Node: Annotations for Running1584413 -Node: Source Annotations1585947 -Node: JIT Interface1586876 -Node: Declarations1588676 -Node: Registering Code1590063 -Node: Unregistering Code1591035 -Node: Custom Debug Info1591662 -Node: Using JIT Debug Info Readers1592958 -Node: Writing JIT Debug Info Readers1593970 -Node: In-Process Agent1596165 -Ref: Control Agent1598108 -Node: In-Process Agent Protocol1598975 -Node: IPA Protocol Objects1599766 -Ref: agent expression object1600764 -Ref: tracepoint action object1600969 -Ref: tracepoint object1601049 -Node: IPA Protocol Commands1603579 -Node: GDB Bugs1605049 -Node: Bug Criteria1605781 -Node: Bug Reporting1606658 -Node: Command Line Editing1614487 -Node: Introduction and Notation1615139 -Node: Readline Interaction1616760 -Node: Readline Bare Essentials1617949 -Node: Readline Movement Commands1619730 -Node: Readline Killing Commands1620688 -Node: Readline Arguments1622604 -Node: Searching1623646 -Node: Readline Init File1625796 -Node: Readline Init File Syntax1626947 -Node: Conditional Init Constructs1647103 -Node: Sample Init File1651297 -Node: Bindable Readline Commands1654412 -Node: Commands For Moving1655464 -Node: Commands For History1657028 -Node: Commands For Text1661290 -Node: Commands For Killing1664729 -Node: Numeric Arguments1666893 -Node: Commands For Completion1668030 -Node: Keyboard Macros1669996 -Node: Miscellaneous Commands1670681 -Node: Readline vi Mode1674600 -Node: Using History Interactively1675510 -Node: History Interaction1676025 -Node: Event Designators1677921 -Node: Word Designators1679058 -Node: Modifiers1680693 -Node: In Memoriam1681914 -Node: Formatting Documentation1682797 -Ref: Formatting Documentation-Footnote-11686109 -Node: Installing GDB1686173 -Node: Requirements1686745 -Ref: Expat1687446 -Ref: MPFR1690739 -Node: Running Configure1692360 -Node: Separate Objdir1695055 -Node: Config Names1697933 -Node: Configure Options1699378 -Node: System-wide configuration1708729 -Node: System-wide Configuration Scripts1711266 -Node: Maintenance Commands1712450 -Ref: maint info breakpoints1714105 -Ref: maint check libthread-db1722570 -Node: Remote Protocol1739245 -Node: Overview1739937 -Ref: Binary Data1742482 -Node: Packets1745007 -Ref: thread-id syntax1745907 -Ref: extended mode1747352 -Ref: ? packet1747610 -Ref: bc1749076 -Ref: bs1749286 -Ref: read registers packet1750903 -Ref: cycle step packet1752758 -Ref: write register packet1755469 -Ref: step with signal packet1756448 -Ref: vCont packet1757924 -Ref: vCtrlC packet1761158 -Ref: vKill packet1763576 -Ref: X packet1765110 -Ref: insert breakpoint or watchpoint packet1765479 -Node: Stop Reply Packets1769805 -Ref: swbreak stop reason1773056 -Ref: thread create event1776653 -Ref: thread exit event1777856 -Node: General Query Packets1780065 -Ref: qCRC packet1782895 -Ref: QEnvironmentHexEncoded1786048 -Ref: QEnvironmentUnset1787278 -Ref: QEnvironmentReset1788222 -Ref: QSetWorkingDir packet1789166 -Ref: QNonStop1795617 -Ref: QCatchSyscalls1796293 -Ref: QPassSignals1797830 -Ref: QProgramSignals1799037 -Ref: QThreadEvents1800604 -Ref: qSearch memory1802622 -Ref: QStartNoAckMode1803130 -Ref: qSupported1803662 -Ref: multiprocess extensions1819182 -Ref: install tracepoint in tracing1821212 -Ref: qXfer read1825735 -Ref: qXfer auxiliary vector read1827342 -Ref: qXfer btrace read1827690 -Ref: qXfer btrace-conf read1828755 -Ref: qXfer executable filename read1829106 -Ref: qXfer target description read1829721 -Ref: qXfer library list read1830155 -Ref: qXfer svr4 library list read1830811 -Ref: qXfer memory map read1832664 -Ref: qXfer sdata read1833051 -Ref: qXfer siginfo read1833517 -Ref: qXfer threads read1833913 -Ref: qXfer traceframe info read1834316 -Ref: qXfer unwind info block1834734 -Ref: qXfer fdpic loadmap read1834968 -Ref: qXfer osdata read1835384 -Ref: qXfer write1835538 -Ref: qXfer siginfo write1836630 -Ref: General Query Packets-Footnote-11839358 -Node: Architecture-Specific Protocol Details1841385 -Node: ARM-Specific Protocol Details1841894 -Node: ARM Breakpoint Kinds1842142 -Node: MIPS-Specific Protocol Details1842473 -Node: MIPS Register packet Format1842756 -Node: MIPS Breakpoint Kinds1843683 -Node: Tracepoint Packets1844101 -Ref: QTEnable1853415 -Ref: QTDisable1853611 -Ref: qTfSTM1859148 -Ref: qTsSTM1859148 -Ref: qTSTMat1860225 -Ref: QTBuffer-size1861376 -Node: Host I/O Packets1863349 -Node: Interrupts1868930 -Ref: interrupting remote targets1869074 -Node: Notification Packets1871242 -Node: Remote Non-Stop1876667 -Node: Packet Acknowledgment1879783 -Node: Examples1881898 -Node: File-I/O Remote Protocol Extension1882492 -Node: File-I/O Overview1882954 -Node: Protocol Basics1885153 -Node: The F Request Packet1887382 -Node: The F Reply Packet1888283 -Node: The Ctrl-C Message1889201 -Node: Console I/O1890827 -Node: List of Supported Calls1892043 -Node: open1892405 -Node: close1894913 -Node: read1895296 -Node: write1895905 -Node: lseek1896676 -Node: rename1897560 -Node: unlink1898967 -Node: stat/fstat1899914 -Node: gettimeofday1900807 -Node: isatty1901243 -Node: system1901839 -Node: Protocol-specific Representation of Datatypes1903381 -Node: Integral Datatypes1903758 -Node: Pointer Values1904565 -Node: Memory Transfer1905269 -Node: struct stat1905889 -Node: struct timeval1908091 -Node: Constants1908608 -Node: Open Flags1909057 -Node: mode_t Values1909398 -Node: Errno Values1909890 -Node: Lseek Flags1910700 -Node: Limits1910885 -Node: File-I/O Examples1911245 -Node: Library List Format1912333 -Node: Library List Format for SVR4 Targets1915115 -Node: Memory Map Format1917582 -Node: Thread List Format1920106 -Node: Traceframe Info Format1921110 -Node: Branch Trace Format1922796 -Node: Branch Trace Configuration Format1924496 -Node: Agent Expressions1925670 -Node: General Bytecode Design1928491 -Node: Bytecode Descriptions1933285 -Node: Using Agent Expressions1946752 -Node: Varying Target Capabilities1948729 -Node: Rationale1949890 -Node: Target Descriptions1957279 -Node: Retrieving Descriptions1959222 -Node: Target Description Format1960307 -Node: Predefined Target Types1970182 -Node: Enum Target Types1971627 -Node: Standard Target Features1972622 -Node: AArch64 Features1974622 -Node: ARC Features1975328 -Node: ARM Features1977389 -Node: i386 Features1978903 -Node: MicroBlaze Features1981118 -Node: MIPS Features1981695 -Node: M68K Features1982886 -Node: NDS32 Features1983547 -Node: Nios II Features1984571 -Node: OpenRISC 1000 Features1984976 -Node: PowerPC Features1985342 -Node: RISC-V Features1989312 -Node: RX Features1991002 -Node: S/390 and System z Features1991364 -Node: Sparc Features1993504 -Node: TIC6x Features1994409 -Node: Operating System Information1994958 -Node: Process list1995794 -Node: Trace File Format1996857 -Node: Index Section Format2000071 -Node: Man Pages2007997 -Node: gdb man2008467 -Node: gdbserver man2014441 -Node: gcore man2021838 -Node: gdbinit man2022960 -Node: gdb-add-index man2024153 -Ref: gdb-add-index2024262 -Node: Copying2025136 -Node: GNU Free Documentation License2062697 -Node: Concept Index2087844 -Node: Command and Variable Index2230675 +Node: Top1701 +Node: Summary5144 +Node: Free Software7005 +Node: Free Documentation7745 +Node: Contributors12679 +Node: Sample Session21710 +Node: Invocation28547 +Node: Invoking GDB29090 +Node: File Options31432 +Ref: --readnever34503 +Node: Mode Options34977 +Ref: -nx35204 +Ref: -nh36961 +Node: Startup43285 +Ref: Home Directory Init File44131 +Ref: Option -init-eval-command44241 +Ref: Init File in the Current Directory during Startup44581 +Ref: Startup-Footnote-146777 +Node: Quitting GDB46886 +Node: Shell Commands47783 +Ref: pipe48775 +Node: Logging Output50289 +Node: Commands51415 +Node: Command Syntax52280 +Node: Command Settings54452 +Node: Completion57465 +Ref: Completion-Footnote-164405 +Node: Command Options64565 +Node: Command aliases default args66941 +Ref: Command aliases default args-Footnote-170394 +Node: Help70548 +Node: Running77622 +Node: Compilation78875 +Node: Starting80954 +Ref: set exec-wrapper86744 +Ref: set startup-with-shell87833 +Ref: set auto-connect-native-target88894 +Node: Arguments93365 +Node: Environment94634 +Ref: set environment96516 +Ref: unset environment97698 +Node: Working Directory98704 +Ref: set cwd command99276 +Ref: cd command100216 +Node: Input/Output100910 +Node: Attach102970 +Ref: set exec-file-mismatch104187 +Node: Kill Process106323 +Node: Inferiors Connections and Programs107316 +Node: Threads117138 +Ref: thread numbers119261 +Ref: thread ID lists120151 +Ref: global thread numbers121191 +Ref: thread apply all125047 +Ref: set libthread-db-search-path129897 +Node: Forks131951 +Node: Checkpoint/Restart138517 +Ref: Checkpoint/Restart-Footnote-1143045 +Node: Stopping143080 +Node: Breakpoints144343 +Node: Set Breaks147600 +Node: Set Watchpoints166559 +Node: Set Catchpoints175941 +Ref: catch syscall181439 +Node: Delete Breaks189204 +Node: Disabling191140 +Node: Conditions194520 +Node: Break Commands200167 +Node: Dynamic printf203387 +Node: Save Breakpoints207691 +Node: Static Probe Points208866 +Ref: Static Probe Points-Footnote-1213044 +Ref: Static Probe Points-Footnote-2213204 +Node: Error in Breakpoints213344 +Node: Breakpoint-related Warnings214080 +Node: Continuing and Stepping216407 +Ref: range stepping226187 +Node: Skipping Over Functions and Files227267 +Node: Signals233116 +Ref: stepping and signal handlers237550 +Ref: stepping into signal handlers238346 +Ref: extra signal information239579 +Node: Thread Stops242045 +Node: All-Stop Mode243144 +Node: Non-Stop Mode247111 +Node: Background Execution250524 +Node: Thread-Specific Breakpoints252740 +Node: Interrupted System Calls254756 +Node: Observer Mode256270 +Node: Reverse Execution259706 +Ref: Reverse Execution-Footnote-1264624 +Ref: Reverse Execution-Footnote-2265251 +Node: Process Record and Replay265301 +Node: Stack286690 +Node: Frames288307 +Node: Backtrace290645 +Ref: backtrace-command290982 +Ref: set backtrace past-main297429 +Ref: set backtrace past-entry297757 +Ref: set backtrace limit298324 +Ref: Backtrace-Footnote-1298948 +Node: Selection299136 +Node: Frame Info305620 +Node: Frame Apply310042 +Node: Frame Filter Management314470 +Ref: disable frame-filter all314996 +Node: Source319304 +Node: List320370 +Node: Specify Location323072 +Node: Linespec Locations323693 +Node: Explicit Locations327092 +Node: Address Locations330304 +Node: Edit332055 +Ref: Edit-Footnote-1333531 +Node: Search333766 +Node: Source Path334574 +Ref: set substitute-path343515 +Node: Machine Code345735 +Node: Data356079 +Ref: print options356918 +Node: Expressions366919 +Node: Ambiguous Expressions369022 +Node: Variables372252 +Node: Arrays378850 +Node: Output Formats381381 +Ref: Output Formats-Footnote-1384754 +Node: Memory384911 +Ref: addressable memory unit391096 +Node: Auto Display392590 +Node: Print Settings397132 +Ref: set print address397430 +Ref: set print symbol401092 +Ref: set print array401580 +Ref: set print array-indexes401908 +Ref: set print elements402394 +Ref: set print frame-arguments403059 +Ref: set print raw-frame-arguments405228 +Ref: set print entry-values405644 +Ref: set print frame-info410023 +Ref: set print repeats411689 +Ref: set print max-depth412331 +Ref: set print null-stop414023 +Ref: set print pretty414347 +Ref: set print raw-values414934 +Ref: set print union415951 +Ref: set print object418257 +Ref: set print static-members419051 +Ref: set print vtbl419728 +Node: Pretty Printing420112 +Node: Pretty-Printer Introduction420626 +Node: Pretty-Printer Example422381 +Node: Pretty-Printer Commands423159 +Node: Value History426090 +Node: Convenience Vars428512 +Node: Convenience Funs436183 +Node: Registers444698 +Ref: info_registers_reggroup445355 +Ref: standard registers445906 +Ref: Registers-Footnote-1450857 +Node: Floating Point Hardware451252 +Node: Vector Unit451784 +Node: OS Information452171 +Ref: linux info os infotypes454195 +Node: Memory Region Attributes458786 +Node: Dump/Restore Files463450 +Node: Core File Generation465853 +Ref: set use-coredump-filter467413 +Ref: set dump-excluded-mappings468861 +Node: Character Sets469143 +Node: Caching Target Data475508 +Ref: Caching Target Data-Footnote-1478248 +Node: Searching Memory478486 +Node: Value Sizes481629 +Node: Optimized Code483281 +Node: Inline Functions484958 +Node: Tail Call Frames487585 +Ref: set debug entry-values489722 +Node: Macros493786 +Ref: Macros-Footnote-1501362 +Node: Tracepoints501515 +Node: Set Tracepoints503577 +Node: Create and Delete Tracepoints506515 +Node: Enable and Disable Tracepoints512863 +Node: Tracepoint Passcounts514103 +Node: Tracepoint Conditions515514 +Node: Trace State Variables517208 +Node: Tracepoint Actions519403 +Node: Listing Tracepoints526186 +Node: Listing Static Tracepoint Markers527888 +Node: Starting and Stopping Trace Experiments529736 +Ref: disconnected tracing531481 +Node: Tracepoint Restrictions535901 +Node: Analyze Collected Data539670 +Node: tfind540976 +Node: tdump545458 +Node: save tracepoints547973 +Node: Tracepoint Variables548469 +Node: Trace Files549597 +Node: Overlays551973 +Node: How Overlays Work552693 +Ref: A code overlay555228 +Node: Overlay Commands558661 +Node: Automatic Overlay Debugging562843 +Node: Overlay Sample Program564982 +Node: Languages566719 +Node: Setting567882 +Node: Filenames569583 +Node: Manually570394 +Node: Automatically571603 +Node: Show572664 +Ref: show language572952 +Node: Checks573986 +Node: Type Checking574991 +Node: Range Checking576820 +Node: Supported Languages579221 +Node: C580558 +Node: C Operators581522 +Node: C Constants585860 +Node: C Plus Plus Expressions588739 +Node: C Defaults592099 +Node: C Checks592767 +Node: Debugging C593327 +Node: Debugging C Plus Plus593811 +Node: Decimal Floating Point598698 +Node: D599968 +Node: Go601927 +Node: Objective-C603021 +Node: Method Names in Commands603484 +Node: The Print Command with Objective-C605175 +Node: OpenCL C605826 +Node: OpenCL C Datatypes606101 +Node: OpenCL C Expressions606476 +Node: OpenCL C Operators606833 +Node: Fortran607065 +Node: Fortran Operators607786 +Node: Fortran Defaults608831 +Node: Special Fortran Commands609216 +Node: Pascal609722 +Node: Rust610233 +Node: Modula-2613320 +Node: M2 Operators614293 +Node: Built-In Func/Proc617291 +Node: M2 Constants620205 +Node: M2 Types621806 +Node: M2 Defaults625024 +Node: Deviations625625 +Node: M2 Checks626726 +Node: M2 Scope627543 +Node: GDB/M2628567 +Node: Ada629480 +Node: Ada Mode Intro630786 +Node: Omissions from Ada632288 +Node: Additions to Ada636643 +Node: Overloading support for Ada640571 +Node: Stopping Before Main Program642211 +Node: Ada Exceptions642758 +Node: Ada Tasks643957 +Node: Ada Tasks and Core Files650448 +Node: Ravenscar Profile651295 +Node: Ada Settings653466 +Node: Ada Glitches654888 +Node: Unsupported Languages658896 +Node: Symbols659586 +Ref: quoting names660189 +Node: Altering691104 +Node: Assignment692142 +Node: Jumping695248 +Node: Signaling697322 +Node: Returning700251 +Node: Calling703602 +Node: Patching709087 +Node: Compiling and Injecting Code710201 +Ref: set debug compile713828 +Ref: set debug compile-cplus-types714078 +Node: GDB Files724099 +Node: Files724888 +Ref: Shared Libraries738600 +Ref: Files-Footnote-1750793 +Node: File Caching750922 +Node: Separate Debug Files752056 +Ref: build ID753297 +Ref: debug-file-directory755409 +Node: MiniDebugInfo764024 +Node: Index Files766475 +Node: Symbol Errors770538 +Node: Data Files774154 +Node: Targets775110 +Node: Active Targets776590 +Node: Target Commands777664 +Ref: load782053 +Ref: flash-erase783246 +Node: Byte Order783306 +Node: Remote Debugging784745 +Node: Connecting786007 +Ref: --multi Option in Types of Remote Connnections788233 +Ref: Attaching in Types of Remote Connections789648 +Ref: Host and target files790528 +Node: File Transfer799150 +Node: Server800089 +Ref: Running gdbserver801665 +Ref: Attaching to a program803883 +Ref: Other Command-Line Arguments for gdbserver806408 +Ref: Monitor Commands for gdbserver809727 +Ref: Server-Footnote-1815103 +Node: Remote Configuration815223 +Ref: set remotebreak816483 +Ref: set remote hardware-watchpoint-limit817945 +Ref: set remote hardware-breakpoint-limit817945 +Ref: set remote hardware-watchpoint-length-limit818447 +Ref: set remote exec-file818902 +Node: Remote Stub830707 +Node: Stub Contents833602 +Node: Bootstrapping835709 +Node: Debug Session839524 +Node: Configurations841565 +Node: Native842334 +Node: BSD libkvm Interface842903 +Node: Process Information843955 +Node: DJGPP Native849579 +Node: Cygwin Native856133 +Node: Non-debug DLL Symbols861054 +Node: Hurd Native865293 +Node: Darwin870549 +Node: FreeBSD871826 +Node: Embedded OS872546 +Node: Embedded Processors872957 +Node: ARC873984 +Node: ARM874531 +Node: BPF877077 +Node: M68K877557 +Node: MicroBlaze877730 +Node: MIPS Embedded879179 +Node: OpenRISC 1000880476 +Node: PowerPC Embedded881382 +Node: AVR884611 +Node: CRIS884983 +Node: Super-H885961 +Node: Architectures887020 +Node: AArch64887416 +Node: i386888985 +Ref: i386-Footnote-1893195 +Node: Alpha893281 +Node: MIPS893414 +Node: HPPA897308 +Node: PowerPC897830 +Node: Nios II898566 +Node: Sparc64898971 +Node: S12Z903040 +Node: Controlling GDB903333 +Node: Prompt904276 +Node: Editing905994 +Node: Command History907304 +Node: Screen Size912498 +Node: Output Styling914514 +Node: Numbers918597 +Node: ABI920579 +Node: Auto-loading923752 +Ref: set auto-load off925127 +Ref: show auto-load925763 +Ref: info auto-load926542 +Node: Init File in the Current Directory929509 +Ref: set auto-load local-gdbinit930084 +Ref: show auto-load local-gdbinit930266 +Ref: info auto-load local-gdbinit930430 +Node: libthread_db.so.1 file930578 +Ref: set auto-load libthread-db931517 +Ref: show auto-load libthread-db931648 +Ref: info auto-load libthread-db931785 +Node: Auto-loading safe path931969 +Ref: set auto-load safe-path933270 +Ref: show auto-load safe-path934009 +Ref: add-auto-load-safe-path934132 +Node: Auto-loading verbose mode937034 +Ref: set debug auto-load938197 +Ref: show debug auto-load938298 +Node: Messages/Warnings938420 +Ref: confirmation requests939854 +Node: Debugging Output941058 +Node: Other Misc Settings951475 +Node: Extending GDB952499 +Node: Sequences954352 +Node: Define955013 +Node: Hooks960498 +Node: Command Files962864 +Node: Output967937 +Ref: eval972739 +Node: Auto-loading sequences972901 +Ref: set auto-load gdb-scripts973396 +Ref: show auto-load gdb-scripts973520 +Ref: info auto-load gdb-scripts973650 +Node: Python973881 +Node: Python Commands975167 +Node: Python API977281 +Node: Basic Python980016 +Ref: prompt_hook991053 +Node: Exception Handling991651 +Node: Values From Inferior994553 +Node: Types In Python1011890 +Node: Pretty Printing API1023120 +Node: Selecting Pretty-Printers1027563 +Node: Writing a Pretty-Printer1030290 +Node: Type Printing API1035612 +Node: Frame Filter API1038228 +Node: Frame Decorator API1045540 +Ref: frame_args1049281 +Node: Writing a Frame Filter1052611 +Node: Unwinding Frames in Python1064085 +Node: Xmethods In Python1071880 +Node: Xmethod API1074776 +Node: Writing an Xmethod1078588 +Node: Inferiors In Python1084423 +Node: Events In Python1088194 +Node: Threads In Python1097402 +Node: Recordings In Python1100747 +Node: Commands In Python1108081 +Node: Parameters In Python1117672 +Node: Functions In Python1124610 +Node: Progspaces In Python1126827 +Node: Objfiles In Python1131751 +Node: Frames In Python1138408 +Ref: gdbpy_frame_read_register1144625 +Node: Blocks In Python1146310 +Node: Symbols In Python1150977 +Node: Symbol Tables In Python1160440 +Node: Line Tables In Python1163661 +Node: Breakpoints In Python1166498 +Ref: python_breakpoint_thread1172821 +Node: Finish Breakpoints in Python1175854 +Node: Lazy Strings In Python1177960 +Node: Architectures In Python1180188 +Ref: gdbpy_architecture_registers1182405 +Ref: gdbpy_architecture_reggroups1182726 +Node: Registers In Python1182925 +Node: TUI Windows In Python1185195 +Node: Python Auto-loading1189422 +Ref: set auto-load python-scripts1190051 +Ref: show auto-load python-scripts1190151 +Ref: info auto-load python-scripts1190257 +Node: Python modules1191391 +Node: gdb.printing1191777 +Node: gdb.types1193204 +Node: gdb.prompt1196216 +Node: Guile1197812 +Node: Guile Introduction1198471 +Node: Guile Commands1199309 +Node: Guile API1202864 +Node: Basic Guile1204861 +Node: Guile Configuration1210543 +Node: GDB Scheme Data Types1211519 +Node: Guile Exception Handling1213351 +Node: Values From Inferior In Guile1217385 +Node: Arithmetic In Guile1232921 +Node: Types In Guile1234552 +Ref: Fields of a type in Guile1242493 +Node: Guile Pretty Printing API1243881 +Node: Selecting Guile Pretty-Printers1249610 +Node: Writing a Guile Pretty-Printer1251986 +Node: Commands In Guile1257171 +Node: Parameters In Guile1267951 +Ref: Parameters In Guile-Footnote-11274832 +Node: Progspaces In Guile1274948 +Node: Objfiles In Guile1277560 +Node: Frames In Guile1279841 +Node: Blocks In Guile1286419 +Node: Symbols In Guile1291227 +Node: Symbol Tables In Guile1298562 +Node: Breakpoints In Guile1301525 +Node: Lazy Strings In Guile1311786 +Node: Architectures In Guile1314077 +Node: Disassembly In Guile1318384 +Node: I/O Ports in Guile1321586 +Node: Memory Ports in Guile1322142 +Node: Iterators In Guile1325993 +Node: Guile Auto-loading1330282 +Ref: set auto-load guile-scripts1330905 +Ref: show auto-load guile-scripts1331003 +Ref: info auto-load guile-scripts1331107 +Node: Guile Modules1332066 +Node: Guile Printing Module1332388 +Node: Guile Types Module1333207 +Node: Auto-loading extensions1334500 +Node: objfile-gdbdotext file1335698 +Ref: set auto-load scripts-directory1337368 +Ref: with-auto-load-dir1337744 +Ref: show auto-load scripts-directory1338562 +Ref: add-auto-load-scripts-directory1338642 +Node: dotdebug_gdb_scripts section1339118 +Node: Which flavor to choose?1342868 +Node: Multiple Extension Languages1344689 +Node: Aliases1345753 +Node: Interpreters1349223 +Node: TUI1352374 +Node: TUI Overview1353372 +Node: TUI Keys1355875 +Node: TUI Single Key Mode1358598 +Node: TUI Commands1359781 +Node: TUI Configuration1365638 +Node: Emacs1367660 +Node: GDB/MI1373097 +Node: GDB/MI General Design1375802 +Node: Context management1378322 +Node: Asynchronous and non-stop modes1382109 +Node: Thread groups1385082 +Node: GDB/MI Command Syntax1387372 +Node: GDB/MI Input Syntax1387615 +Node: GDB/MI Output Syntax1389165 +Node: GDB/MI Compatibility with CLI1392750 +Node: GDB/MI Development and Front Ends1393487 +Node: GDB/MI Output Records1397002 +Node: GDB/MI Result Records1397408 +Node: GDB/MI Stream Records1398758 +Node: GDB/MI Async Records1400023 +Node: GDB/MI Breakpoint Information1410456 +Node: GDB/MI Frame Information1416092 +Node: GDB/MI Thread Information1417374 +Node: GDB/MI Ada Exception Information1418844 +Node: GDB/MI Simple Examples1419394 +Node: GDB/MI Command Description Format1421630 +Node: GDB/MI Breakpoint Commands1422510 +Ref: -break-insert1429618 +Node: GDB/MI Catchpoint Commands1443192 +Node: Shared Library GDB/MI Catchpoint Commands1443605 +Node: Ada Exception GDB/MI Catchpoint Commands1445263 +Node: C++ Exception GDB/MI Catchpoint Commands1448813 +Node: GDB/MI Program Context1452829 +Node: GDB/MI Thread Commands1457097 +Node: GDB/MI Ada Tasking Commands1460398 +Node: GDB/MI Program Execution1462670 +Node: GDB/MI Stack Manipulation1474937 +Ref: -stack-list-arguments1476861 +Ref: -stack-list-frames1480691 +Ref: -stack-list-locals1485020 +Ref: -stack-list-variables1486510 +Node: GDB/MI Variable Objects1488044 +Ref: -var-set-format1498010 +Ref: -var-list-children1499391 +Ref: -var-update1508199 +Ref: -var-set-frozen1511197 +Ref: -var-set-update-range1511994 +Ref: -var-set-visualizer1512523 +Node: GDB/MI Data Manipulation1515714 +Node: GDB/MI Tracepoint Commands1536202 +Node: GDB/MI Symbol Query1547993 +Ref: -symbol-info-functions1548262 +Ref: -symbol-info-module-functions1552775 +Ref: -symbol-info-module-variables1555755 +Ref: -symbol-info-modules1559472 +Ref: -symbol-info-types1561376 +Ref: -symbol-info-variables1563369 +Node: GDB/MI File Commands1568393 +Node: GDB/MI Target Manipulation1572827 +Node: GDB/MI File Transfer Commands1579485 +Node: GDB/MI Ada Exceptions Commands1580808 +Node: GDB/MI Support Commands1582161 +Node: GDB/MI Miscellaneous Commands1586880 +Ref: -interpreter-exec1597244 +Node: Annotations1601216 +Node: Annotations Overview1602135 +Node: Server Prefix1604598 +Node: Prompting1605332 +Node: Errors1606849 +Node: Invalidation1607745 +Node: Annotations for Running1608224 +Node: Source Annotations1609758 +Node: JIT Interface1610687 +Node: Declarations1612487 +Node: Registering Code1613874 +Node: Unregistering Code1614846 +Node: Custom Debug Info1615473 +Node: Using JIT Debug Info Readers1616769 +Node: Writing JIT Debug Info Readers1617781 +Node: In-process Agent1619976 +Ref: Control Agent1621919 +Node: In-process Agent Protocol1622786 +Node: IPA Protocol Objects1623577 +Ref: agent expression object1624575 +Ref: tracepoint action object1624780 +Ref: tracepoint object1624860 +Node: IPA Protocol Commands1627390 +Node: GDB Bugs1628860 +Node: Bug Criteria1629592 +Node: Bug Reporting1630469 +Node: Command Line Editing1637446 +Node: Introduction and Notation1638098 +Node: Readline Interaction1639719 +Node: Readline Bare Essentials1640908 +Node: Readline Movement Commands1642689 +Node: Readline Killing Commands1643647 +Node: Readline Arguments1645563 +Node: Searching1646605 +Node: Readline Init File1648755 +Node: Readline Init File Syntax1649906 +Node: Conditional Init Constructs1670062 +Node: Sample Init File1674256 +Node: Bindable Readline Commands1677371 +Node: Commands For Moving1678423 +Node: Commands For History1679987 +Node: Commands For Text1684249 +Node: Commands For Killing1687688 +Node: Numeric Arguments1689852 +Node: Commands For Completion1690989 +Node: Keyboard Macros1692955 +Node: Miscellaneous Commands1693640 +Node: Readline vi Mode1697559 +Node: Using History Interactively1698469 +Node: History Interaction1698984 +Node: Event Designators1700880 +Node: Word Designators1702017 +Node: Modifiers1703652 +Node: In Memoriam1704873 +Node: Formatting Documentation1705756 +Ref: Formatting Documentation-Footnote-11709072 +Node: Installing GDB1709138 +Node: Requirements1709710 +Ref: Expat1710411 +Ref: MPFR1713704 +Node: Running Configure1715325 +Node: Separate Objdir1718031 +Node: Config Names1720915 +Node: Configure Options1722362 +Node: System-wide configuration1732184 +Node: System-wide Configuration Scripts1734721 +Node: Maintenance Commands1735905 +Ref: maint info breakpoints1737560 +Ref: maint check libthread-db1746445 +Node: Remote Protocol1763363 +Node: Overview1764055 +Ref: Binary Data1766600 +Node: Packets1769256 +Ref: thread-id syntax1770156 +Ref: extended mode1771601 +Ref: ? packet1771859 +Ref: bc1773325 +Ref: bs1773535 +Ref: read registers packet1775152 +Ref: cycle step packet1777007 +Ref: write register packet1779718 +Ref: step with signal packet1780697 +Ref: vCont packet1782173 +Ref: vCtrlC packet1785407 +Ref: vKill packet1787825 +Ref: X packet1789359 +Ref: insert breakpoint or watchpoint packet1789728 +Node: Stop Reply Packets1794054 +Ref: swbreak stop reason1797305 +Ref: thread create event1800902 +Ref: thread exit event1802105 +Node: General Query Packets1806015 +Ref: qCRC packet1808845 +Ref: QEnvironmentHexEncoded1811998 +Ref: QEnvironmentUnset1813228 +Ref: QEnvironmentReset1814172 +Ref: QSetWorkingDir packet1815116 +Ref: QNonStop1821567 +Ref: QCatchSyscalls1822243 +Ref: QPassSignals1823780 +Ref: QProgramSignals1824987 +Ref: QThreadEvents1826554 +Ref: qSearch memory1828572 +Ref: QStartNoAckMode1829080 +Ref: qSupported1829612 +Ref: multiprocess extensions1845132 +Ref: install tracepoint in tracing1847162 +Ref: qXfer read1851685 +Ref: qXfer auxiliary vector read1853292 +Ref: qXfer btrace read1853640 +Ref: qXfer btrace-conf read1854705 +Ref: qXfer executable filename read1855056 +Ref: qXfer target description read1855671 +Ref: qXfer library list read1856105 +Ref: qXfer svr4 library list read1856761 +Ref: qXfer memory map read1858614 +Ref: qXfer sdata read1859001 +Ref: qXfer siginfo read1859467 +Ref: qXfer threads read1859863 +Ref: qXfer traceframe info read1860266 +Ref: qXfer unwind info block1860684 +Ref: qXfer fdpic loadmap read1860918 +Ref: qXfer osdata read1861334 +Ref: qXfer write1861488 +Ref: qXfer siginfo write1862580 +Ref: General Query Packets-Footnote-11865308 +Node: Architecture-Specific Protocol Details1865635 +Node: ARM-Specific Protocol Details1866144 +Node: ARM Breakpoint Kinds1866392 +Node: MIPS-Specific Protocol Details1866723 +Node: MIPS Register packet Format1867006 +Node: MIPS Breakpoint Kinds1867933 +Node: Tracepoint Packets1868351 +Ref: QTEnable1877665 +Ref: QTDisable1877861 +Ref: qTfSTM1883398 +Ref: qTsSTM1883398 +Ref: qTSTMat1884475 +Ref: QTBuffer-size1885626 +Node: Host I/O Packets1887599 +Node: Interrupts1893180 +Ref: interrupting remote targets1893324 +Node: Notification Packets1895492 +Node: Remote Non-Stop1900917 +Node: Packet Acknowledgment1904033 +Node: Examples1906148 +Node: File-I/O Remote Protocol Extension1906742 +Node: File-I/O Overview1907204 +Node: Protocol Basics1909403 +Node: The F Request Packet1911632 +Node: The F Reply Packet1912533 +Node: The Ctrl-C Message1913451 +Node: Console I/O1915077 +Node: List of Supported Calls1916293 +Node: open1916655 +Node: close1919163 +Node: read1919546 +Node: write1920155 +Node: lseek1920926 +Node: rename1921810 +Node: unlink1923217 +Node: stat/fstat1924164 +Node: gettimeofday1925057 +Node: isatty1925493 +Node: system1926089 +Node: Protocol-specific Representation of Datatypes1927631 +Node: Integral Datatypes1928008 +Node: Pointer Values1928815 +Node: Memory Transfer1929519 +Node: struct stat1930139 +Node: struct timeval1932341 +Node: Constants1932858 +Node: Open Flags1933307 +Node: mode_t Values1933648 +Node: errno Values1934140 +Node: Lseek Flags1934950 +Node: Limits1935135 +Node: File-I/O Examples1935495 +Node: Library List Format1936583 +Node: Library List Format for SVR4 Targets1939365 +Node: Memory Map Format1941832 +Node: Thread List Format1944356 +Node: Traceframe Info Format1945360 +Node: Branch Trace Format1947046 +Node: Branch Trace Configuration Format1948746 +Node: Agent Expressions1949920 +Node: General Bytecode Design1952741 +Node: Bytecode Descriptions1957535 +Node: Using Agent Expressions1971002 +Node: Varying Target Capabilities1972979 +Node: Rationale1974140 +Node: Target Descriptions1981529 +Node: Retrieving Descriptions1983472 +Node: Target Description Format1984557 +Node: Predefined Target Types1994432 +Node: Enum Target Types1995877 +Node: Standard Target Features1996872 +Node: AArch64 Features1998872 +Node: ARC Features1999578 +Ref: ARC Features-Footnote-12001397 +Node: ARM Features2001430 +Node: i386 Features2002944 +Node: MicroBlaze Features2005159 +Node: MIPS Features2005736 +Node: M68K Features2006927 +Node: NDS32 Features2007914 +Node: Nios II Features2008938 +Node: OpenRISC 1000 Features2009343 +Node: PowerPC Features2009709 +Node: RISC-V Features2013679 +Node: RX Features2015369 +Node: S/390 and System z Features2015731 +Node: Sparc Features2017871 +Node: TIC6x Features2018776 +Node: Operating System Information2019325 +Node: Process list2020161 +Node: Trace File Format2021224 +Node: Index Section Format2024438 +Node: Man Pages2032364 +Node: gdb man2032834 +Node: gdbserver man2038808 +Node: gcore man2046217 +Node: gdbinit man2047339 +Node: gdb-add-index man2048532 +Ref: gdb-add-index2048641 +Node: Copying2049515 +Node: GNU Free Documentation License2087076 +Node: Concept Index2113924 +Node: Command and Variable Index2255706  End Tag Table + + +Local Variables: +coding: utf-8 +End: diff -Nru gdb-9.1/gdb/doc/gdb.info-1 gdb-10.2/gdb/doc/gdb.info-1 --- gdb-9.1/gdb/doc/gdb.info-1 2020-02-08 12:54:16.000000000 +0000 +++ gdb-10.2/gdb/doc/gdb.info-1 2021-04-25 04:10:41.000000000 +0000 @@ -1,6 +1,6 @@ -This is gdb.info, produced by makeinfo version 6.5 from gdb.texinfo. +This is gdb.info, produced by makeinfo version 6.7 from gdb.texinfo. -Copyright (C) 1988-2020 Free Software Foundation, Inc. +Copyright (C) 1988-2021 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or @@ -21,9 +21,9 @@ This file documents the GNU debugger GDB. This is the Tenth Edition, of 'Debugging with GDB: the GNU -Source-Level Debugger' for GDB (GDB) Version 9.1. +Source-Level Debugger' for GDB (GDB) Version 10.2. - Copyright (C) 1988-2020 Free Software Foundation, Inc. + Copyright (C) 1988-2021 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or @@ -37,16 +37,16 @@ developing GNU and promoting software freedom."  -File: gdb.info, Node: Top, Next: Summary, Prev: (dir), Up: (dir) +File: gdb.info, Node: Top, Next: Summary, Up: (dir) Debugging with GDB ****************** This file describes GDB, the GNU symbolic debugger. - This is the Tenth Edition, for GDB (GDB) Version 9.1. + This is the Tenth Edition, for GDB (GDB) Version 10.2. - Copyright (C) 1988-2020 Free Software Foundation, Inc. + Copyright (C) 1988-2021 Free Software Foundation, Inc. This edition of the GDB manual is dedicated to the memory of Fred Fish. Fred was a long-standing contributor to GDB and to Free software @@ -87,7 +87,7 @@ * GDB/MI:: GDB's Machine Interface. * Annotations:: GDB's annotation interface. * JIT Interface:: Using the JIT debugging interface. -* In-Process Agent:: In-Process Agent +* In-process Agent:: In-process Agent * GDB Bugs:: Reporting bugs in GDB @@ -461,6 +461,10 @@ of Jeremy Bennett, Franck Jullien, Stefan Wallentowitz and Stafford Horne. + Weimin Pan, David Faust and Jose E. Marchesi contributed support for +the Linux kernel BPF virtual architecture. This work was sponsored by +Oracle. +  File: gdb.info, Node: Sample Session, Next: Invocation, Prev: Summary, Up: Top @@ -507,7 +511,7 @@ There is absolutely no warranty for GDB; type "show warranty" for details. - GDB 9.1, Copyright 1999 Free Software Foundation, Inc... + GDB 10.2, Copyright 1999 Free Software Foundation, Inc... (gdb) GDB reads only enough symbol data to know where to find the rest when @@ -1060,7 +1064,7 @@  File: gdb.info, Node: Startup, Prev: Mode Options, Up: Invoking GDB -2.1.3 What GDB Does During Startup +2.1.3 What GDB Does during Startup ---------------------------------- Here's the description of what GDB does during session startup: @@ -1173,9 +1177,10 @@ 'shell COMMAND-STRING' '!COMMAND-STRING' Invoke a standard shell to execute COMMAND-STRING. Note that no - space is needed between '!' and COMMAND-STRING. If it exists, the - environment variable 'SHELL' determines which shell to run. - Otherwise GDB uses the default shell ('/bin/sh' on Unix systems, + space is needed between '!' and COMMAND-STRING. On GNU and Unix + systems, the environment variable 'SHELL', if it exists, determines + which shell to run. Otherwise GDB uses the default shell + ('/bin/sh' on GNU and Unix systems, 'cmd.exe' on MS-Windows, 'COMMAND.COM' on MS-DOS, etc.). The utility 'make' is often needed in development environments. You @@ -1282,6 +1287,7 @@ * Command Settings:: How to change default behavior of commands * Completion:: Command completion * Command Options:: Command options +* Command aliases default args:: Automatically prepend default arguments to user-defined aliases * Help:: How to ask GDB for help  @@ -1570,9 +1576,9 @@ not the dynamic type.  -File: gdb.info, Node: Command Options, Next: Help, Prev: Completion, Up: Commands +File: gdb.info, Node: Command Options, Next: Command aliases default args, Prev: Completion, Up: Commands -3.4 Command options +3.4 Command Options =================== Some commands accept options starting with a leading dash. For example, @@ -1625,9 +1631,86 @@ Data.)  -File: gdb.info, Node: Help, Prev: Command Options, Up: Commands +File: gdb.info, Node: Command aliases default args, Next: Help, Prev: Command Options, Up: Commands + +3.5 Automatically Prepend Default Arguments to User-Defined Aliases +=================================================================== + +You can tell GDB to always prepend some default arguments to the list of +arguments provided explicitly by the user when using a user-defined +alias. + + If you repeatedly use the same arguments or options for a command, +you can define an alias for this command and tell GDB to automatically +prepend these arguments or options to the list of arguments you type +explicitly when using the alias(1). + + For example, if you often use the command 'thread apply all' +specifying to work on the threads in ascending order and to continue in +case it encounters an error, you can tell GDB to automatically preprend +the '-ascending' and '-c' options by using: + + (gdb) alias thread apply asc-all = thread apply all -ascending -c + + Once you have defined this alias with its default args, any time you +type the 'thread apply asc-all' followed by 'some arguments', GDB will +execute 'thread apply all -ascending -c some arguments'. + + To have even less to type, you can also define a one word alias: + (gdb) alias t_a_c = thread apply all -ascending -c + + As usual, unambiguous abbreviations can be used for ALIAS and +DEFAULT-ARGS. + + The different aliases of a command do not share their default args. +For example, you define a new alias 'bt_ALL' showing all possible +information and another alias 'bt_SMALL' showing very limited +information using: + (gdb) alias bt_ALL = backtrace -entry-values both -frame-arg all \ + -past-main -past-entry -full + (gdb) alias bt_SMALL = backtrace -entry-values no -frame-arg none \ + -past-main off -past-entry off + + (For more on using the 'alias' command, see *note Aliases::.) + + Default args are not limited to the arguments and options of COMMAND, +but can specify nested commands if COMMAND accepts such a nested command +as argument. For example, the below defines 'faalocalsoftype' that +lists the frames having locals of a certain type, together with the +matching local vars: + (gdb) alias faalocalsoftype = frame apply all info locals -q -t + (gdb) faalocalsoftype int + #1 0x55554f5e in sleeper_or_burner (v=0xdf50) at sleepers.c:86 + i = 0 + ret = 21845 + + This is also very useful to define an alias for a set of nested +'with' commands to have a particular combination of temporary settings. +For example, the below defines the alias 'pp10' that pretty prints an +expression argument, with a maximum of 10 elements if the expression is +a string or an array: + (gdb) alias pp10 = with print pretty -- with print elements 10 -- print + This defines the alias 'pp10' as being a sequence of 3 commands. The +first part 'with print pretty --' temporarily activates the setting 'set +print pretty', then launches the command that follows the separator +'--'. The command following the first part is also a 'with' command +that temporarily changes the setting 'set print elements' to 10, then +launches the command that follows the second separator '--'. The third +part 'print' is the command the 'pp10' alias will launch, using the +temporary values of the settings and the arguments explicitly given by +the user. For more information about the 'with' command usage, see +*note Command Settings::. + + ---------- Footnotes ---------- + + (1) GDB could easily accept default arguments for pre-defined +commands and aliases, but it was deemed this would be confusing, and so +is not allowed. + + +File: gdb.info, Node: Help, Prev: Command aliases default args, Up: Commands -3.5 Getting Help +3.6 Getting Help ================ You can always ask GDB itself for information on its commands, using the @@ -1641,7 +1724,7 @@ (gdb) help List of classes of commands: - aliases -- Aliases of other commands + aliases -- User-defined aliases of other commands breakpoints -- Making program stop at certain points data -- Examining data files -- Specifying and examining files @@ -1664,17 +1747,25 @@ 'help CLASS' Using one of the general help classes as an argument, you can get a - list of the individual commands in that class. For example, here - is the help display for the class 'status': + list of the individual commands in that class. If a command has + aliases, the aliases are given after the command name, separated by + commas. If an alias has default arguments, the full definition of + the alias is given after the first line. For example, here is the + help display for the class 'status': (gdb) help status Status inquiries. List of commands: - info -- Generic command for showing things + info, inf, i -- Generic command for showing things about the program being debugged - show -- Generic command for showing things + info address, iamain -- Describe where symbol SYM is stored. + alias iamain = info address main + info all-registers -- List of all registers and their contents, + for selected stack frame. + ... + show, info set -- Generic command for showing things about the debugger Type "help" followed by command name for full @@ -1684,7 +1775,11 @@ 'help COMMAND' With a command name as 'help' argument, GDB displays a short - paragraph on how to use that command. + paragraph on how to use that command. If that command has one or + more aliases, GDB will display a first line with the command name + and all its aliases separated by commas. This first line will be + followed by the full definition of all aliases having default + arguments. 'apropos [-v] REGEXP' The 'apropos' command searches through all of the GDB commands, and @@ -1699,10 +1794,7 @@ results in: alias -- Define a new command that is an alias of an existing command - aliases -- Aliases of other commands - d -- Delete some breakpoints or auto-display expressions - del -- Delete some breakpoints or auto-display expressions - delete -- Delete some breakpoints or auto-display expressions + aliases -- User-defined aliases of other commands while @@ -1801,7 +1893,7 @@  File: gdb.info, Node: Running, Next: Stopping, Prev: Commands, Up: Top -4 Running Programs Under GDB +4 Running Programs under GDB **************************** When you run a program under GDB, you must first generate debugging @@ -1823,8 +1915,8 @@ * Input/Output:: Your program's input and output * Attach:: Debugging an already-running process * Kill Process:: Killing the child process - -* Inferiors and Programs:: Debugging multiple inferiors and programs +* Inferiors Connections and Programs:: Debugging multiple inferiors + connections and programs * Threads:: Debugging programs with multiple threads * Forks:: Debugging forks * Checkpoint/Restart:: Setting a _bookmark_ to return to later @@ -1879,7 +1971,7 @@  File: gdb.info, Node: Starting, Next: Arguments, Prev: Compilation, Up: Running -4.2 Starting your Program +4.2 Starting Your Program ========================= 'run' @@ -2049,25 +2141,25 @@ 'set auto-connect-native-target off' 'show auto-connect-native-target' - By default, if not connected to any target yet (e.g., with 'target - remote'), the 'run' command starts your program as a native process - under GDB, on your local machine. If you're sure you don't want to - debug programs on your local machine, you can tell GDB to not - connect to the native target automatically with the 'set - auto-connect-native-target off' command. - - If 'on', which is the default, and if GDB is not connected to a - target already, the 'run' command automaticaly connects to the - native target, if one is available. + By default, if the current inferior is not connected to any target + yet (e.g., with 'target remote'), the 'run' command starts your + program as a native process under GDB, on your local machine. If + you're sure you don't want to debug programs on your local machine, + you can tell GDB to not connect to the native target automatically + with the 'set auto-connect-native-target off' command. + + If 'on', which is the default, and if the current inferior is not + connected to a target already, the 'run' command automaticaly + connects to the native target, if one is available. - If 'off', and if GDB is not connected to a target already, the - 'run' command fails with an error: + If 'off', and if the current inferior is not connected to a target + already, the 'run' command fails with an error: (gdb) run Don't know how to run. Try "help target". - If GDB is already connected to a target, GDB always uses it with - the 'run' command. + If the current inferior is already connected to a target, GDB + always uses it with the 'run' command. In any case, you can explicitly connect to the native target with the 'target native' command. For example, @@ -2365,7 +2457,7 @@  File: gdb.info, Node: Attach, Next: Kill Process, Prev: Input/Output, Up: Running -4.7 Debugging an Already-running Process +4.7 Debugging an Already-Running Process ======================================== 'attach PROCESS-ID' @@ -2390,6 +2482,25 @@ 'file' command to load the program. *Note Commands to Specify Files: Files. + If the debugger can determine that the executable file running in the +process it is attaching to does not match the current exec-file loaded +by GDB, the option 'exec-file-mismatch' specifies how to handle the +mismatch. GDB tries to compare the files by comparing their build IDs +(*note build ID::), if available. + +'set exec-file-mismatch 'ask|warn|off'' + + Whether to detect mismatch between the current executable file + loaded by GDB and the executable file used to start the process. + If 'ask', the default, display a warning and ask the user whether + to load the process executable file; if 'warn', just display a + warning; if 'off', don't attempt to detect a mismatch. If the user + confirms loading the process executable file, then its symbols will + be loaded as well. + +'show exec-file-mismatch' + Show the current value of 'exec-file-mismatch'. + The first thing GDB does after arranging to debug the specified process is to stop it. You can examine and modify an attached process with all the GDB commands that are ordinarily available when you start @@ -2415,7 +2526,7 @@ Messages/Warnings.).  -File: gdb.info, Node: Kill Process, Next: Inferiors and Programs, Prev: Attach, Up: Running +File: gdb.info, Node: Kill Process, Next: Inferiors Connections and Programs, Prev: Attach, Up: Running 4.8 Killing the Child Process ============================= @@ -2440,17 +2551,19 @@ settings).  -File: gdb.info, Node: Inferiors and Programs, Next: Threads, Prev: Kill Process, Up: Running +File: gdb.info, Node: Inferiors Connections and Programs, Next: Threads, Prev: Kill Process, Up: Running -4.9 Debugging Multiple Inferiors and Programs -============================================= +4.9 Debugging Multiple Inferiors Connections and Programs +========================================================= GDB lets you run and debug multiple programs in a single session. In addition, GDB on some systems may let you run several programs simultaneously (otherwise you have to exit from one before starting -another). In the most general case, you can have multiple threads of -execution in each of multiple processes, launched from multiple -executables. +another). On some systems GDB may even let you debug several programs +simultaneously on different remote systems. In the most general case, +you can have multiple threads of execution in each of multiple +processes, launched from multiple executables, running on different +machines. GDB represents the state of each program execution with an object called an "inferior". An inferior typically corresponds to a process, @@ -2476,7 +2589,11 @@ 2. the target system's inferior identifier - 3. the name of the executable the inferior is running. + 3. the target connection the inferior is bound to, including the + unique connection number assigned by GDB, and the protocol + used by the connection. + + 4. the name of the executable the inferior is running. An asterisk '*' preceding the GDB inferior number indicates the current inferior. @@ -2484,9 +2601,37 @@ For example, (gdb) info inferiors - Num Description Executable - 2 process 2307 hello - * 1 process 3401 goodbye + Num Description Connection Executable + * 1 process 3401 1 (native) goodbye + 2 process 2307 2 (extended-remote host:10000) hello + + To find out what open target connections exist at any moment, use +'info connections': + +'info connections' + Print a list of all open target connections currently being managed + by GDB. By default all connections are printed, but the argument + ID... - a space separated list of connections numbers - can be used + to limit the display to just the requested connections. + + GDB displays for each connection (in this order): + + 1. the connection number assigned by GDB. + + 2. the protocol used by the connection. + + 3. a textual description of the protocol used by the connection. + + An asterisk '*' preceding the connection number indicates the + connection of the current inferior. + + For example, + + (gdb) info connections + Num What Description + * 1 extended-remote host:10000 Extended remote serial target in gdb-specific protocol + 2 native Native process + 3 core Local core dump file To switch focus between inferiors, use the 'inferior' command: @@ -2507,13 +2652,22 @@ 'fork' and 'exec'. To remove inferiors from the debugging session use the 'remove-inferiors' command. -'add-inferior [ -copies N ] [ -exec EXECUTABLE ]' +'add-inferior [ -copies N ] [ -exec EXECUTABLE ] [-no-connection ]' Adds N inferiors to be run using EXECUTABLE as the executable; N defaults to 1. If no executable is specified, the inferiors begins empty, with no program. You can still assign or change the program assigned to the inferior at any time by using the 'file' command with the executable name as its argument. + By default, the new inferior begins connected to the same target + connection as the current inferior. For example, if the current + inferior was connected to 'gdbserver' with 'target remote', then + the new inferior will be connected to the same 'gdbserver' + instance. The '-no-connection' option starts the new inferior with + no connection yet. You can then for example use the 'target + remote' command to connect to some other 'gdbserver' instance, use + 'run' to spawn a local program, etc. + 'clone-inferior [ -copies N ] [ INFNO ]' Adds N inferiors ready to execute the same program as inferior INFNO; N defaults to 1, and INFNO defaults to the number of the @@ -2521,15 +2675,15 @@ run another instance of the inferior you are debugging. (gdb) info inferiors - Num Description Executable - * 1 process 29964 helloworld + Num Description Connection Executable + * 1 process 29964 1 (native) helloworld (gdb) clone-inferior Added inferior 2. 1 inferiors added. (gdb) info inferiors - Num Description Executable - 2 <null> helloworld - * 1 process 29964 helloworld + Num Description Connection Executable + * 1 process 29964 1 (native) helloworld + 2 <null> 1 (native) helloworld You can now simply switch focus to inferior 2 and run it. @@ -2624,7 +2778,7 @@ call.  -File: gdb.info, Node: Threads, Next: Forks, Prev: Inferiors and Programs, Up: Running +File: gdb.info, Node: Threads, Next: Forks, Prev: Inferiors Connections and Programs, Up: Running 4.10 Debugging Programs with Multiple Threads ============================================= @@ -2766,7 +2920,7 @@ For example, (gdb) info threads - Id Target Id Frame + Id Target Id Frame * 1 process 35 thread 13 main (argc=1, argv=0x7ffffff8) 2 process 35 thread 23 0x34e5 in sigpause () 3 process 35 thread 27 0x34e5 in sigpause () @@ -2868,7 +3022,7 @@ (gdb) tfaas p some_local_var_i_do_not_remember_where_it_is The 'tfaas' command accepts the same options as the 'frame apply' - command. *Note frame apply::. + command. *Note frame apply: Frame Apply. 'thread name [NAME]' This command assigns a name to the current thread. If no argument @@ -3039,13 +3193,14 @@ control of all forked processes (including nested forks). You can list the forked processes under the control of GDB by using the 'info inferiors' command, and switch from one fork to another by using -the 'inferior' command (*note Debugging Multiple Inferiors and Programs: -Inferiors and Programs.). +the 'inferior' command (*note Debugging Multiple Inferiors Connections +and Programs: Inferiors Connections and Programs.). To quit debugging one of the forked processes, you can either detach from it by using the 'detach inferiors' command (allowing it to run independently), or kill it using the 'kill inferiors' command. *Note -Debugging Multiple Inferiors and Programs: Inferiors and Programs. +Debugging Multiple Inferiors Connections and Programs: Inferiors +Connections and Programs. If you ask to debug a child process and a 'vfork' is followed by an 'exec', GDB executes the new target up to the first breakpoint in the @@ -3308,7 +3463,7 @@ * Disabling:: Disabling breakpoints * Conditions:: Break conditions * Break Commands:: Breakpoint command lists -* Dynamic Printf:: Dynamic printf +* Dynamic printf:: Dynamic printf * Save Breakpoints:: How to save breakpoints in a file * Static Probe Points:: Listing static probe points * Error in Breakpoints:: "Cannot insert breakpoints" @@ -4430,7 +4585,7 @@ Ignore counts apply to breakpoints, watchpoints, and catchpoints.  -File: gdb.info, Node: Break Commands, Next: Dynamic Printf, Prev: Conditions, Up: Breakpoints +File: gdb.info, Node: Break Commands, Next: Dynamic printf, Prev: Conditions, Up: Breakpoints 5.1.7 Breakpoint Command Lists ------------------------------ @@ -4509,9 +4664,9 @@ end  -File: gdb.info, Node: Dynamic Printf, Next: Save Breakpoints, Prev: Break Commands, Up: Breakpoints +File: gdb.info, Node: Dynamic printf, Next: Save Breakpoints, Prev: Break Commands, Up: Breakpoints -5.1.8 Dynamic Printf +5.1.8 Dynamic printf -------------------- The dynamic printf command 'dprintf' combines a breakpoint with @@ -4606,9 +4761,9 @@ If evaluation fails, GDB will report an error.  -File: gdb.info, Node: Save Breakpoints, Next: Static Probe Points, Prev: Dynamic Printf, Up: Breakpoints +File: gdb.info, Node: Save Breakpoints, Next: Static Probe Points, Prev: Dynamic printf, Up: Breakpoints -5.1.9 How to save breakpoints to a file +5.1.9 How to Save Breakpoints to a File --------------------------------------- To save breakpoint definitions to a file use the 'save breakpoints' @@ -5040,7 +5195,7 @@  File: gdb.info, Node: Skipping Over Functions and Files, Next: Signals, Prev: Continuing and Stepping, Up: Stopping -5.3 Skipping Over Functions and Files +5.3 Skipping over Functions and Files ===================================== The program you are debugging may contain some functions which are @@ -5414,7 +5569,7 @@  File: gdb.info, Node: Thread Stops, Prev: Signals, Up: Stopping -5.5 Stopping and Starting Multi-thread Programs +5.5 Stopping and Starting Multi-Thread Programs =============================================== GDB supports debugging programs with multiple threads (*note Debugging @@ -5832,7 +5987,7 @@  File: gdb.info, Node: Reverse Execution, Next: Process Record and Replay, Prev: Stopping, Up: Top -6 Running programs backward +6 Running Programs Backward *************************** When you are debugging a program, it is not unusual to realize that you @@ -6847,107 +7002,3 @@ GDB command scripts, where the output might be unnecessary and distracting. - -File: gdb.info, Node: Frame Info, Next: Frame Apply, Prev: Selection, Up: Stack - -8.4 Information About a Frame -============================= - -There are several other commands to print information about the selected -stack frame. - -'frame' -'f' - When used without any argument, this command does not change which - frame is selected, but prints a brief description of the currently - selected stack frame. It can be abbreviated 'f'. With an - argument, this command is used to select a stack frame. *Note - Selecting a Frame: Selection. - -'info frame' -'info f' - This command prints a verbose description of the selected stack - frame, including: - - * the address of the frame - * the address of the next frame down (called by this frame) - * the address of the next frame up (caller of this frame) - * the language in which the source code corresponding to this - frame is written - * the address of the frame's arguments - * the address of the frame's local variables - * the program counter saved in it (the address of execution in - the caller frame) - * which registers were saved in the frame - - The verbose description is useful when something has gone wrong - that has made the stack format fail to fit the usual conventions. - -'info frame [ FRAME-SELECTION-SPEC ]' -'info f [ FRAME-SELECTION-SPEC ]' - Print a verbose description of the frame selected by - FRAME-SELECTION-SPEC. The FRAME-SELECTION-SPEC is the same as for - the 'frame' command (*note Selecting a Frame: Selection.). The - selected frame remains unchanged by this command. - -'info args [-q]' - Print the arguments of the selected frame, each on a separate line. - - The optional flag '-q', which stands for 'quiet', disables printing - header information and messages explaining why no argument have - been printed. - -'info args [-q] [-t TYPE_REGEXP] [REGEXP]' - Like 'info args', but only print the arguments selected with the - provided regexp(s). - - If REGEXP is provided, print only the arguments whose names match - the regular expression REGEXP. - - If TYPE_REGEXP is provided, print only the arguments whose types, - as printed by the 'whatis' command, match the regular expression - TYPE_REGEXP. If TYPE_REGEXP contains space(s), it should be - enclosed in quote characters. If needed, use backslash to escape - the meaning of special characters or quotes. - - If both REGEXP and TYPE_REGEXP are provided, an argument is printed - only if its name matches REGEXP and its type matches TYPE_REGEXP. - -'info locals [-q]' - Print the local variables of the selected frame, each on a separate - line. These are all variables (declared either static or - automatic) accessible at the point of execution of the selected - frame. - - The optional flag '-q', which stands for 'quiet', disables printing - header information and messages explaining why no local variables - have been printed. - -'info locals [-q] [-t TYPE_REGEXP] [REGEXP]' - Like 'info locals', but only print the local variables selected - with the provided regexp(s). - - If REGEXP is provided, print only the local variables whose names - match the regular expression REGEXP. - - If TYPE_REGEXP is provided, print only the local variables whose - types, as printed by the 'whatis' command, match the regular - expression TYPE_REGEXP. If TYPE_REGEXP contains space(s), it - should be enclosed in quote characters. If needed, use backslash - to escape the meaning of special characters or quotes. - - If both REGEXP and TYPE_REGEXP are provided, a local variable is - printed only if its name matches REGEXP and its type matches - TYPE_REGEXP. - - The command 'info locals -q -t TYPE_REGEXP' can usefully be - combined with the commands 'frame apply' and 'thread apply'. For - example, your program might use Resource Acquisition Is - Initialization types (RAII) such as 'lock_something_t': each local - variable of type 'lock_something_t' automatically places a lock - that is destroyed when the variable goes out of scope. You can - then list all acquired locks in your program by doing - thread apply all -s frame apply all -s info locals -q -t lock_something_t - or the equivalent shorter form - tfaas i lo -q -t lock_something_t - diff -Nru gdb-9.1/gdb/doc/gdb.info-2 gdb-10.2/gdb/doc/gdb.info-2 --- gdb-9.1/gdb/doc/gdb.info-2 2020-02-08 12:54:16.000000000 +0000 +++ gdb-10.2/gdb/doc/gdb.info-2 2021-04-25 04:10:42.000000000 +0000 @@ -1,6 +1,6 @@ -This is gdb.info, produced by makeinfo version 6.5 from gdb.texinfo. +This is gdb.info, produced by makeinfo version 6.7 from gdb.texinfo. -Copyright (C) 1988-2020 Free Software Foundation, Inc. +Copyright (C) 1988-2021 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or @@ -21,9 +21,9 @@ This file documents the GNU debugger GDB. This is the Tenth Edition, of 'Debugging with GDB: the GNU -Source-Level Debugger' for GDB (GDB) Version 9.1. +Source-Level Debugger' for GDB (GDB) Version 10.2. - Copyright (C) 1988-2020 Free Software Foundation, Inc. + Copyright (C) 1988-2021 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or @@ -37,10 +37,114 @@ developing GNU and promoting software freedom."  +File: gdb.info, Node: Frame Info, Next: Frame Apply, Prev: Selection, Up: Stack + +8.4 Information about a Frame +============================= + +There are several other commands to print information about the selected +stack frame. + +'frame' +'f' + When used without any argument, this command does not change which + frame is selected, but prints a brief description of the currently + selected stack frame. It can be abbreviated 'f'. With an + argument, this command is used to select a stack frame. *Note + Selecting a Frame: Selection. + +'info frame' +'info f' + This command prints a verbose description of the selected stack + frame, including: + + * the address of the frame + * the address of the next frame down (called by this frame) + * the address of the next frame up (caller of this frame) + * the language in which the source code corresponding to this + frame is written + * the address of the frame's arguments + * the address of the frame's local variables + * the program counter saved in it (the address of execution in + the caller frame) + * which registers were saved in the frame + + The verbose description is useful when something has gone wrong + that has made the stack format fail to fit the usual conventions. + +'info frame [ FRAME-SELECTION-SPEC ]' +'info f [ FRAME-SELECTION-SPEC ]' + Print a verbose description of the frame selected by + FRAME-SELECTION-SPEC. The FRAME-SELECTION-SPEC is the same as for + the 'frame' command (*note Selecting a Frame: Selection.). The + selected frame remains unchanged by this command. + +'info args [-q]' + Print the arguments of the selected frame, each on a separate line. + + The optional flag '-q', which stands for 'quiet', disables printing + header information and messages explaining why no argument have + been printed. + +'info args [-q] [-t TYPE_REGEXP] [REGEXP]' + Like 'info args', but only print the arguments selected with the + provided regexp(s). + + If REGEXP is provided, print only the arguments whose names match + the regular expression REGEXP. + + If TYPE_REGEXP is provided, print only the arguments whose types, + as printed by the 'whatis' command, match the regular expression + TYPE_REGEXP. If TYPE_REGEXP contains space(s), it should be + enclosed in quote characters. If needed, use backslash to escape + the meaning of special characters or quotes. + + If both REGEXP and TYPE_REGEXP are provided, an argument is printed + only if its name matches REGEXP and its type matches TYPE_REGEXP. + +'info locals [-q]' + Print the local variables of the selected frame, each on a separate + line. These are all variables (declared either static or + automatic) accessible at the point of execution of the selected + frame. + + The optional flag '-q', which stands for 'quiet', disables printing + header information and messages explaining why no local variables + have been printed. + +'info locals [-q] [-t TYPE_REGEXP] [REGEXP]' + Like 'info locals', but only print the local variables selected + with the provided regexp(s). + + If REGEXP is provided, print only the local variables whose names + match the regular expression REGEXP. + + If TYPE_REGEXP is provided, print only the local variables whose + types, as printed by the 'whatis' command, match the regular + expression TYPE_REGEXP. If TYPE_REGEXP contains space(s), it + should be enclosed in quote characters. If needed, use backslash + to escape the meaning of special characters or quotes. + + If both REGEXP and TYPE_REGEXP are provided, a local variable is + printed only if its name matches REGEXP and its type matches + TYPE_REGEXP. + + The command 'info locals -q -t TYPE_REGEXP' can usefully be + combined with the commands 'frame apply' and 'thread apply'. For + example, your program might use Resource Acquisition Is + Initialization types (RAII) such as 'lock_something_t': each local + variable of type 'lock_something_t' automatically places a lock + that is destroyed when the variable goes out of scope. You can + then list all acquired locks in your program by doing + thread apply all -s frame apply all -s info locals -q -t lock_something_t + or the equivalent shorter form + tfaas i lo -q -t lock_something_t + + File: gdb.info, Node: Frame Apply, Next: Frame Filter Management, Prev: Frame Info, Up: Stack -8.5 Applying a Command to Several Frames. -========================================= +8.5 Applying a Command to Several Frames +======================================== 'frame apply [all | COUNT | -COUNT | level LEVEL...] [OPTION]... COMMAND' The 'frame apply' command allows you to apply the named COMMAND to @@ -142,7 +246,7 @@ (gdb) faas p some_local_var_i_do_not_remember_where_it_is The 'faas' command accepts the same options as the 'frame apply' - command. *Note frame apply::. + command. *Note frame apply: Frame Apply. Note that the command 'tfaas COMMAND' applies COMMAND on all frames of all threads. See *Note Threads: Threads. @@ -150,8 +254,8 @@  File: gdb.info, Node: Frame Filter Management, Prev: Frame Apply, Up: Stack -8.6 Management of Frame Filters. -================================ +8.6 Management of Frame Filters +=============================== Frame filters are Python based utilities to manage and decorate the output of frames. *Note Frame Filter API::, for further information. @@ -622,7 +726,7 @@ Edit the file containing FUNCTION at the beginning of its definition. -9.3.1 Choosing your Editor +9.3.1 Choosing Your Editor -------------------------- You can customize GDB to use any editor you want (1). By default, it is @@ -3164,7 +3268,8 @@ '$_inferior' The number of the current inferior. *Note Debugging Multiple - Inferiors and Programs: Inferiors and Programs. + Inferiors Connections and Programs: Inferiors Connections and + Programs. '$_thread' The thread number of the current thread. *Note thread numbers::. @@ -3855,7 +3960,7 @@  File: gdb.info, Node: Dump/Restore Files, Next: Core File Generation, Prev: Memory Region Attributes, Up: Data -10.18 Copy Between Memory and a File +10.18 Copy between Memory and a File ==================================== You can use the commands 'dump', 'append', and 'restore' to copy data @@ -4168,8 +4273,8 @@ GDB caches data exchanged between the debugger and a target. Each cache is associated with the address space of the inferior. *Note Inferiors -and Programs::, about inferior and address space. Such caching -generally improves performance in remote debugging (*note Remote +Connections and Programs::, about inferior and address space. Such +caching generally improves performance in remote debugging (*note Remote Debugging::), because it reduces the overhead of the remote protocol by bundling memory reads and writes into large chunks. Unfortunately, simply caching everything would lead to incorrect results, since GDB @@ -6314,7 +6419,7 @@  File: gdb.info, Node: Setting, Next: Show, Up: Languages -15.1 Switching Between Source Languages +15.1 Switching between Source Languages ======================================= There are two ways to control the working language--either have GDB set @@ -7106,7 +7211,7 @@  File: gdb.info, Node: Decimal Floating Point, Prev: Debugging C Plus Plus, Up: C -15.4.1.8 Decimal Floating Point format +15.4.1.8 Decimal Floating Point Format ...................................... GDB can examine, set and perform computations with numbers in decimal @@ -7141,245 +7246,3 @@ LDC or DMD compilers. Currently GDB supports only one D specific feature -- dynamic arrays. - -File: gdb.info, Node: Go, Next: Objective-C, Prev: D, Up: Supported Languages - -15.4.3 Go ---------- - -GDB can be used to debug programs written in Go and compiled with -'gccgo' or '6g' compilers. - - Here is a summary of the Go-specific features and restrictions: - -'The current Go package' - The name of the current package does not need to be specified when - specifying global variables and functions. - - For example, given the program: - - package main - var myglob = "Shall we?" - func main () { - // ... - } - - When stopped inside 'main' either of these work: - - (gdb) p myglob - (gdb) p main.myglob - -'Builtin Go types' - The 'string' type is recognized by GDB and is printed as a string. - -'Builtin Go functions' - The GDB expression parser recognizes the 'unsafe.Sizeof' function - and handles it internally. - -'Restrictions on Go expressions' - All Go operators are supported except '&^'. The Go '_' "blank - identifier" is not supported. Automatic dereferencing of pointers - is not supported. - - -File: gdb.info, Node: Objective-C, Next: OpenCL C, Prev: Go, Up: Supported Languages - -15.4.4 Objective-C ------------------- - -This section provides information about some commands and command -options that are useful for debugging Objective-C code. See also *note -info classes: Symbols, and *note info selectors: Symbols, for a few more -commands specific to Objective-C support. - -* Menu: - -* Method Names in Commands:: -* The Print Command with Objective-C:: - - -File: gdb.info, Node: Method Names in Commands, Next: The Print Command with Objective-C, Up: Objective-C - -15.4.4.1 Method Names in Commands -................................. - -The following commands have been extended to accept Objective-C method -names as line specifications: - - * 'clear' - * 'break' - * 'info line' - * 'jump' - * 'list' - - A fully qualified Objective-C method name is specified as - - -[CLASS METHODNAME] - - where the minus sign is used to indicate an instance method and a -plus sign (not shown) is used to indicate a class method. The class -name CLASS and method name METHODNAME are enclosed in brackets, similar -to the way messages are specified in Objective-C source code. For -example, to set a breakpoint at the 'create' instance method of class -'Fruit' in the program currently being debugged, enter: - - break -[Fruit create] - - To list ten program lines around the 'initialize' class method, -enter: - - list +[NSText initialize] - - In the current version of GDB, the plus or minus sign is required. -In future versions of GDB, the plus or minus sign will be optional, but -you can use it to narrow the search. It is also possible to specify -just a method name: - - break create - - You must specify the complete method name, including any colons. If -your program's source files contain more than one 'create' method, -you'll be presented with a numbered list of classes that implement that -method. Indicate your choice by number, or type '0' to exit if none -apply. - - As another example, to clear a breakpoint established at the -'makeKeyAndOrderFront:' method of the 'NSWindow' class, enter: - - clear -[NSWindow makeKeyAndOrderFront:] - - -File: gdb.info, Node: The Print Command with Objective-C, Prev: Method Names in Commands, Up: Objective-C - -15.4.4.2 The Print Command With Objective-C -........................................... - -The print command has also been extended to accept methods. For -example: - - print -[OBJECT hash] - -will tell GDB to send the 'hash' message to OBJECT and print the result. -Also, an additional command has been added, 'print-object' or 'po' for -short, which is meant to print the description of an object. However, -this command may only work with certain Objective-C libraries that have -a particular hook function, '_NSPrintForDebugger', defined. - - -File: gdb.info, Node: OpenCL C, Next: Fortran, Prev: Objective-C, Up: Supported Languages - -15.4.5 OpenCL C ---------------- - -This section provides information about GDBs OpenCL C support. - -* Menu: - -* OpenCL C Datatypes:: -* OpenCL C Expressions:: -* OpenCL C Operators:: - - -File: gdb.info, Node: OpenCL C Datatypes, Next: OpenCL C Expressions, Up: OpenCL C - -15.4.5.1 OpenCL C Datatypes -........................... - -GDB supports the builtin scalar and vector datatypes specified by OpenCL -1.1. In addition the half- and double-precision floating point data -types of the 'cl_khr_fp16' and 'cl_khr_fp64' OpenCL extensions are also -known to GDB. - - -File: gdb.info, Node: OpenCL C Expressions, Next: OpenCL C Operators, Prev: OpenCL C Datatypes, Up: OpenCL C - -15.4.5.2 OpenCL C Expressions -............................. - -GDB supports accesses to vector components including the access as -lvalue where possible. Since OpenCL C is based on C99 most C -expressions supported by GDB can be used as well. - - -File: gdb.info, Node: OpenCL C Operators, Prev: OpenCL C Expressions, Up: OpenCL C - -15.4.5.3 OpenCL C Operators -........................... - -GDB supports the operators specified by OpenCL 1.1 for scalar and vector -data types. - - -File: gdb.info, Node: Fortran, Next: Pascal, Prev: OpenCL C, Up: Supported Languages - -15.4.6 Fortran --------------- - -GDB can be used to debug programs written in Fortran, but it currently -supports only the features of Fortran 77 language. - - Some Fortran compilers (GNU Fortran 77 and Fortran 95 compilers among -them) append an underscore to the names of variables and functions. -When you debug programs compiled by those compilers, you will need to -refer to variables and functions with a trailing underscore. - -* Menu: - -* Fortran Operators:: Fortran operators and expressions -* Fortran Defaults:: Default settings for Fortran -* Special Fortran Commands:: Special GDB commands for Fortran - - -File: gdb.info, Node: Fortran Operators, Next: Fortran Defaults, Up: Fortran - -15.4.6.1 Fortran Operators and Expressions -.......................................... - -Operators must be defined on values of specific types. For instance, -'+' is defined on numbers, but not on characters or other non- -arithmetic types. Operators are often defined on groups of types. - -'**' - The exponentiation operator. It raises the first operand to the - power of the second one. - -':' - The range operator. Normally used in the form of array(low:high) - to represent a section of array. - -'%' - The access component operator. Normally used to access elements in - derived types. Also suitable for unions. As unions aren't part of - regular Fortran, this can only happen when accessing a register - that uses a gdbarch-defined union type. -'::' - The scope operator. Normally used to access variables in modules - or to set breakpoints on subroutines nested in modules or in other - subroutines (internal subroutines). - - -File: gdb.info, Node: Fortran Defaults, Next: Special Fortran Commands, Prev: Fortran Operators, Up: Fortran - -15.4.6.2 Fortran Defaults -......................... - -Fortran symbols are usually case-insensitive, so GDB by default uses -case-insensitive matches for Fortran symbols. You can change that with -the 'set case-insensitive' command, see *note Symbols::, for the -details. - - -File: gdb.info, Node: Special Fortran Commands, Prev: Fortran Defaults, Up: Fortran - -15.4.6.3 Special Fortran Commands -................................. - -GDB has some commands to support Fortran-specific features, such as -displaying common blocks. - -'info common [COMMON-NAME]' - This command prints the values contained in the Fortran 'COMMON' - block whose name is COMMON-NAME. With no argument, the names of - all 'COMMON' blocks visible at the current program location are - printed. - diff -Nru gdb-9.1/gdb/doc/gdb.info-3 gdb-10.2/gdb/doc/gdb.info-3 --- gdb-9.1/gdb/doc/gdb.info-3 2020-02-08 12:54:17.000000000 +0000 +++ gdb-10.2/gdb/doc/gdb.info-3 2021-04-25 04:10:42.000000000 +0000 @@ -1,6 +1,6 @@ -This is gdb.info, produced by makeinfo version 6.5 from gdb.texinfo. +This is gdb.info, produced by makeinfo version 6.7 from gdb.texinfo. -Copyright (C) 1988-2020 Free Software Foundation, Inc. +Copyright (C) 1988-2021 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or @@ -21,9 +21,9 @@ This file documents the GNU debugger GDB. This is the Tenth Edition, of 'Debugging with GDB: the GNU -Source-Level Debugger' for GDB (GDB) Version 9.1. +Source-Level Debugger' for GDB (GDB) Version 10.2. - Copyright (C) 1988-2020 Free Software Foundation, Inc. + Copyright (C) 1988-2021 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or @@ -37,6 +37,248 @@ developing GNU and promoting software freedom."  +File: gdb.info, Node: Go, Next: Objective-C, Prev: D, Up: Supported Languages + +15.4.3 Go +--------- + +GDB can be used to debug programs written in Go and compiled with +'gccgo' or '6g' compilers. + + Here is a summary of the Go-specific features and restrictions: + +'The current Go package' + The name of the current package does not need to be specified when + specifying global variables and functions. + + For example, given the program: + + package main + var myglob = "Shall we?" + func main () { + // ... + } + + When stopped inside 'main' either of these work: + + (gdb) p myglob + (gdb) p main.myglob + +'Builtin Go types' + The 'string' type is recognized by GDB and is printed as a string. + +'Builtin Go functions' + The GDB expression parser recognizes the 'unsafe.Sizeof' function + and handles it internally. + +'Restrictions on Go expressions' + All Go operators are supported except '&^'. The Go '_' "blank + identifier" is not supported. Automatic dereferencing of pointers + is not supported. + + +File: gdb.info, Node: Objective-C, Next: OpenCL C, Prev: Go, Up: Supported Languages + +15.4.4 Objective-C +------------------ + +This section provides information about some commands and command +options that are useful for debugging Objective-C code. See also *note +info classes: Symbols, and *note info selectors: Symbols, for a few more +commands specific to Objective-C support. + +* Menu: + +* Method Names in Commands:: +* The Print Command with Objective-C:: + + +File: gdb.info, Node: Method Names in Commands, Next: The Print Command with Objective-C, Up: Objective-C + +15.4.4.1 Method Names in Commands +................................. + +The following commands have been extended to accept Objective-C method +names as line specifications: + + * 'clear' + * 'break' + * 'info line' + * 'jump' + * 'list' + + A fully qualified Objective-C method name is specified as + + -[CLASS METHODNAME] + + where the minus sign is used to indicate an instance method and a +plus sign (not shown) is used to indicate a class method. The class +name CLASS and method name METHODNAME are enclosed in brackets, similar +to the way messages are specified in Objective-C source code. For +example, to set a breakpoint at the 'create' instance method of class +'Fruit' in the program currently being debugged, enter: + + break -[Fruit create] + + To list ten program lines around the 'initialize' class method, +enter: + + list +[NSText initialize] + + In the current version of GDB, the plus or minus sign is required. +In future versions of GDB, the plus or minus sign will be optional, but +you can use it to narrow the search. It is also possible to specify +just a method name: + + break create + + You must specify the complete method name, including any colons. If +your program's source files contain more than one 'create' method, +you'll be presented with a numbered list of classes that implement that +method. Indicate your choice by number, or type '0' to exit if none +apply. + + As another example, to clear a breakpoint established at the +'makeKeyAndOrderFront:' method of the 'NSWindow' class, enter: + + clear -[NSWindow makeKeyAndOrderFront:] + + +File: gdb.info, Node: The Print Command with Objective-C, Prev: Method Names in Commands, Up: Objective-C + +15.4.4.2 The Print Command with Objective-C +........................................... + +The print command has also been extended to accept methods. For +example: + + print -[OBJECT hash] + +will tell GDB to send the 'hash' message to OBJECT and print the result. +Also, an additional command has been added, 'print-object' or 'po' for +short, which is meant to print the description of an object. However, +this command may only work with certain Objective-C libraries that have +a particular hook function, '_NSPrintForDebugger', defined. + + +File: gdb.info, Node: OpenCL C, Next: Fortran, Prev: Objective-C, Up: Supported Languages + +15.4.5 OpenCL C +--------------- + +This section provides information about GDBs OpenCL C support. + +* Menu: + +* OpenCL C Datatypes:: +* OpenCL C Expressions:: +* OpenCL C Operators:: + + +File: gdb.info, Node: OpenCL C Datatypes, Next: OpenCL C Expressions, Up: OpenCL C + +15.4.5.1 OpenCL C Datatypes +........................... + +GDB supports the builtin scalar and vector datatypes specified by OpenCL +1.1. In addition the half- and double-precision floating point data +types of the 'cl_khr_fp16' and 'cl_khr_fp64' OpenCL extensions are also +known to GDB. + + +File: gdb.info, Node: OpenCL C Expressions, Next: OpenCL C Operators, Prev: OpenCL C Datatypes, Up: OpenCL C + +15.4.5.2 OpenCL C Expressions +............................. + +GDB supports accesses to vector components including the access as +lvalue where possible. Since OpenCL C is based on C99 most C +expressions supported by GDB can be used as well. + + +File: gdb.info, Node: OpenCL C Operators, Prev: OpenCL C Expressions, Up: OpenCL C + +15.4.5.3 OpenCL C Operators +........................... + +GDB supports the operators specified by OpenCL 1.1 for scalar and vector +data types. + + +File: gdb.info, Node: Fortran, Next: Pascal, Prev: OpenCL C, Up: Supported Languages + +15.4.6 Fortran +-------------- + +GDB can be used to debug programs written in Fortran, but it currently +supports only the features of Fortran 77 language. + + Some Fortran compilers (GNU Fortran 77 and Fortran 95 compilers among +them) append an underscore to the names of variables and functions. +When you debug programs compiled by those compilers, you will need to +refer to variables and functions with a trailing underscore. + +* Menu: + +* Fortran Operators:: Fortran operators and expressions +* Fortran Defaults:: Default settings for Fortran +* Special Fortran Commands:: Special GDB commands for Fortran + + +File: gdb.info, Node: Fortran Operators, Next: Fortran Defaults, Up: Fortran + +15.4.6.1 Fortran Operators and Expressions +.......................................... + +Operators must be defined on values of specific types. For instance, +'+' is defined on numbers, but not on characters or other non- +arithmetic types. Operators are often defined on groups of types. + +'**' + The exponentiation operator. It raises the first operand to the + power of the second one. + +':' + The range operator. Normally used in the form of array(low:high) + to represent a section of array. + +'%' + The access component operator. Normally used to access elements in + derived types. Also suitable for unions. As unions aren't part of + regular Fortran, this can only happen when accessing a register + that uses a gdbarch-defined union type. +'::' + The scope operator. Normally used to access variables in modules + or to set breakpoints on subroutines nested in modules or in other + subroutines (internal subroutines). + + +File: gdb.info, Node: Fortran Defaults, Next: Special Fortran Commands, Prev: Fortran Operators, Up: Fortran + +15.4.6.2 Fortran Defaults +......................... + +Fortran symbols are usually case-insensitive, so GDB by default uses +case-insensitive matches for Fortran symbols. You can change that with +the 'set case-insensitive' command, see *note Symbols::, for the +details. + + +File: gdb.info, Node: Special Fortran Commands, Prev: Fortran Defaults, Up: Fortran + +15.4.6.3 Special Fortran Commands +................................. + +GDB has some commands to support Fortran-specific features, such as +displaying common blocks. + +'info common [COMMON-NAME]' + This command prints the values contained in the Fortran 'COMMON' + block whose name is COMMON-NAME. With no argument, the names of + all 'COMMON' blocks visible at the current program location are + printed. + + File: gdb.info, Node: Pascal, Next: Rust, Prev: Fortran, Up: Supported Languages 15.4.7 Pascal @@ -914,7 +1156,7 @@  File: gdb.info, Node: Overloading support for Ada, Next: Stopping Before Main Program, Prev: Additions to Ada, Up: Ada -15.4.10.4 Overloading support for Ada +15.4.10.4 Overloading Support for Ada ..................................... The debugger supports limited overloading. Given a subprogram call in @@ -1177,7 +1419,7 @@  File: gdb.info, Node: Ada Tasks and Core Files, Next: Ravenscar Profile, Prev: Ada Tasks, Up: Ada -15.4.10.8 Tasking Support when Debugging Core Files +15.4.10.8 Tasking Support When Debugging Core Files ................................................... When inspecting a core file, as opposed to debugging a live program, @@ -1195,7 +1437,7 @@  File: gdb.info, Node: Ravenscar Profile, Next: Ada Settings, Prev: Ada Tasks and Core Files, Up: Ada -15.4.10.9 Tasking Support when using the Ravenscar Profile +15.4.10.9 Tasking Support When Using the Ravenscar Profile .......................................................... The "Ravenscar Profile" is a subset of the Ada tasking features, @@ -1218,6 +1460,29 @@ Show whether it is possible to switch from task to task in a program using the Ravenscar Profile. + When Ravenscar task-switching is enabled, Ravenscar tasks are +announced by GDB as if they were threads: + + (gdb) continue + [New Ravenscar Thread 0x2b8f0] + + Both Ravenscar tasks and the underlying CPU threads will show up in +the output of 'info threads': + + (gdb) info threads + Id Target Id Frame + 1 Thread 1 (CPU#0 [running]) simple () at simple.adb:10 + 2 Thread 2 (CPU#1 [running]) 0x0000000000003d34 in __gnat_initialize_cpu_devices () + 3 Thread 3 (CPU#2 [running]) 0x0000000000003d28 in __gnat_initialize_cpu_devices () + 4 Thread 4 (CPU#3 [halted ]) 0x000000000000c6ec in system.task_primitives.operations.idle () + * 5 Ravenscar Thread 0x2b8f0 simple () at simple.adb:10 + 6 Ravenscar Thread 0x2f150 0x000000000000c6ec in system.task_primitives.operations.idle () + + One known limitation of the Ravenscar support in GDB is that it isn't +currently possible to single-step through the runtime initialization +sequence. If you need to debug this code, you should use 'set ravenscar +task-switching off'. +  File: gdb.info, Node: Ada Settings, Next: Ada Glitches, Prev: Ravenscar Profile, Up: Ada @@ -2220,7 +2485,7 @@  File: gdb.info, Node: Signaling, Next: Returning, Prev: Jumping, Up: Altering -17.3 Giving your Program a Signal +17.3 Giving Your Program a Signal ================================= 'signal SIGNAL' @@ -2424,7 +2689,7 @@ 'show may-call-functions' Show permission to call functions in the program. -17.5.1 Calling functions with no debug info +17.5.1 Calling Functions with No Debug Info ------------------------------------------- Sometimes, a function you wish to call is missing debug information. In @@ -2509,7 +2774,7 @@  File: gdb.info, Node: Compiling and Injecting Code, Prev: Patching, Up: Altering -17.7 Compiling and injecting code in GDB +17.7 Compiling and Injecting Code in GDB ======================================== GDB supports on-demand compilation and code injection into programs @@ -2603,7 +2868,7 @@ Displays the current state of displaying debugging information for C++ type conversion. -17.7.1 Compilation options for the 'compile' command +17.7.1 Compilation Options for the 'compile' Command ---------------------------------------------------- GDB needs to specify the right compilation options for the code to be @@ -2641,7 +2906,7 @@ does not show all the options actually used during compilation, use *note set debug compile:: for that. -17.7.2 Caveats when using the 'compile' command +17.7.2 Caveats When Using the 'compile' Command ----------------------------------------------- There are a few caveats to keep in mind when using the 'compile' @@ -2779,7 +3044,7 @@ to those variables will generate a compiler error which GDB will print to the console. -17.7.3 Compiler search for the 'compile' command +17.7.3 Compiler Search for the 'compile' Command ------------------------------------------------ GDB needs to find GCC for the inferior being debugged which may not be @@ -3022,7 +3287,7 @@ add symbol table from file "/home/user/gdb/mylib.so" at .text_addr = 0x7ffff7ff9480 (y or n) y - Reading symbols from /home/user/gdb/mylib.so...done. + Reading symbols from /home/user/gdb/mylib.so... (gdb) remove-symbol-file -a 0x7ffff7ff9480 Remove symbol table from file "/home/user/gdb/mylib.so"? (y or n) y (gdb) @@ -3194,9 +3459,9 @@ of shared library events happen. The best way to do this is to use 'catch load' and 'catch unload' (*note Set Catchpoints::). - GDB also supports the the 'set stop-on-solib-events' command for -this. This command exists for historical reasons. It is less useful -than setting a catchpoint, because it does not allow for conditions or + GDB also supports the 'set stop-on-solib-events' command for this. +This command exists for historical reasons. It is less useful than +setting a catchpoint, because it does not allow for conditions or commands as a catchpoint does. 'set stop-on-solib-events' @@ -3648,7 +3913,7 @@  File: gdb.info, Node: MiniDebugInfo, Next: Index Files, Prev: Separate Debug Files, Up: GDB Files -18.4 Debugging information in a special section +18.4 Debugging Information in a Special Section =============================================== Some systems ship pre-built executables and libraries that have a @@ -3770,11 +4035,9 @@ $ gdb -iex "set use-deprecated-index-sections on" <program> - There are currently some limitation on indices. They only work when -using DWARF debugging information, not stabs. And, only the '-dwarf-5' -index works for programs using Ada. + Indices only work when using DWARF debugging information, not stabs. -18.5.1 Automatic symbol index cache +18.5.1 Automatic Symbol Index Cache ----------------------------------- It is possible for GDB to automatically save a copy of this index in a @@ -4280,6 +4543,13 @@ 'gdbserver' using the '--attach' option (*note Running gdbserver::). + Some remote targets allow GDB to determine the executable file + running in the process the debugger is attaching to. In such a + case, GDB uses the value of 'exec-file-mismatch' to handle a + possible mismatch between the executable file name running in the + process and the name of the current exec-file loaded by GDB (*note + set exec-file-mismatch::). + 20.1.2 Host and Target Files ---------------------------- @@ -4475,7 +4745,7 @@  File: gdb.info, Node: File Transfer, Next: Server, Prev: Connecting, Up: Remote Debugging -20.2 Sending files to a remote system +20.2 Sending Files to a Remote System ===================================== Some remote targets offer the ability to transfer files over the same @@ -4604,7 +4874,7 @@ multiple threads, most versions of 'pidof' support the '-s' option to only return the first process ID. -20.3.1.2 TCP port allocation lifecycle of 'gdbserver' +20.3.1.2 TCP Port Allocation Lifecycle of 'gdbserver' ..................................................... This section applies only when 'gdbserver' is run to listen on a TCP @@ -4767,7 +5037,7 @@ processes it created. Use 'monitor exit' to terminate 'gdbserver' at the end of a multi-process mode debug session. -20.3.4 Tracepoints support in 'gdbserver' +20.3.4 Tracepoints Support in 'gdbserver' ----------------------------------------- On some targets, 'gdbserver' supports tracepoints, fast tracepoints and @@ -5389,7 +5659,7 @@  File: gdb.info, Node: Debug Session, Prev: Bootstrapping, Up: Remote Stub -20.5.3 Putting it All Together +20.5.3 Putting It All Together ------------------------------ In summary, when your program is ready to debug, you must follow these @@ -5527,8 +5797,8 @@ to examine the image of a running process using file-system subroutines. This facility is supported on GNU/Linux and Solaris systems. - On FreeBSD systems, system control nodes are used to query process -information. + On FreeBSD and NetBSD systems, system control nodes are used to query +process information. In addition, some systems may provide additional process information in core files. Note that a core file may include a subset of the @@ -5552,15 +5822,15 @@ 'info proc cmdline' Show the original command line of the process. This command is - supported on GNU/Linux and FreeBSD. + supported on GNU/Linux, FreeBSD and NetBSD. 'info proc cwd' Show the current working directory of the process. This command is - supported on GNU/Linux and FreeBSD. + supported on GNU/Linux, FreeBSD and NetBSD. 'info proc exe' Show the name of executable of the process. This command is - supported on GNU/Linux and FreeBSD. + supported on GNU/Linux, FreeBSD and NetBSD. 'info proc files' Show the file descriptors open by the process. For each open file @@ -5591,10 +5861,11 @@ 'info proc mappings' Report the memory address space ranges accessible in a process. On - Solaris and FreeBSD systems, each memory range includes information - on whether the process has read, write, or execute access rights to - each range. On GNU/Linux and FreeBSD systems, each memory range - includes the object file which is mapped to that range. + Solaris, FreeBSD and NetBSD systems, each memory range includes + information on whether the process has read, write, or execute + access rights to each range. On GNU/Linux, FreeBSD and NetBSD + systems, each memory range includes the object file which is mapped + to that range. 'info proc stat' 'info proc status' @@ -5602,13 +5873,13 @@ and group ID; virtual memory usage; the signals that are pending, blocked, and ignored; its TTY; its consumption of system and user time; its stack size; its 'nice' value; etc. These commands are - supported on GNU/Linux and FreeBSD. + supported on GNU/Linux, FreeBSD and NetBSD. For GNU/Linux systems, see the 'proc' man page for more information (type 'man 5 proc' from your shell prompt). - For FreeBSD systems, 'info proc stat' is an alias for 'info proc - status'. + For FreeBSD and NetBSD systems, 'info proc stat' is an alias for + 'info proc status'. 'info proc all' Show all the information about the process described under all of @@ -6235,6 +6506,7 @@ * ARC:: Synopsys ARC * ARM:: ARM +* BPF:: eBPF * M68K:: Motorola M68K * MicroBlaze:: Xilinx MicroBlaze * MIPS Embedded:: MIPS Embedded @@ -6265,7 +6537,7 @@ given address.  -File: gdb.info, Node: ARM, Next: M68K, Prev: ARC, Up: Embedded Processors +File: gdb.info, Node: ARM, Next: BPF, Prev: ARC, Up: Embedded Processors 21.3.2 ARM ---------- @@ -6351,9 +6623,24 @@ 'all'  -File: gdb.info, Node: M68K, Next: MicroBlaze, Prev: ARM, Up: Embedded Processors +File: gdb.info, Node: BPF, Next: M68K, Prev: ARM, Up: Embedded Processors + +21.3.3 BPF +---------- + +'target sim [SIMARGS] ...' + The GDB BPF simulator accepts the following optional arguments. + + '--skb-data-offset=OFFSET' + Tell the simulator the offset, measured in bytes, of the + 'skb_data' field in the kernel 'struct sk_buff' structure. + This offset is used by some BPF specific-purpose load/store + instructions. Defaults to 0. + + +File: gdb.info, Node: M68K, Next: MicroBlaze, Prev: BPF, Up: Embedded Processors -21.3.3 M68k +21.3.4 M68k ----------- The Motorola m68k configuration includes ColdFire support. @@ -6361,7 +6648,7 @@  File: gdb.info, Node: MicroBlaze, Next: MIPS Embedded, Prev: M68K, Up: Embedded Processors -21.3.4 MicroBlaze +21.3.5 MicroBlaze ----------------- The MicroBlaze is a soft-core processor supported on various Xilinx @@ -6398,7 +6685,7 @@  File: gdb.info, Node: MIPS Embedded, Next: OpenRISC 1000, Prev: MicroBlaze, Up: Embedded Processors -21.3.5 MIPS Embedded +21.3.6 MIPS Embedded -------------------- GDB supports these special commands for MIPS targets: @@ -6430,7 +6717,7 @@  File: gdb.info, Node: OpenRISC 1000, Next: PowerPC Embedded, Prev: MIPS Embedded, Up: Embedded Processors -21.3.6 OpenRISC 1000 +21.3.7 OpenRISC 1000 -------------------- The OpenRISC 1000 provides a free RISC instruction set architecture. It @@ -6459,7 +6746,7 @@  File: gdb.info, Node: PowerPC Embedded, Next: AVR, Prev: OpenRISC 1000, Up: Embedded Processors -21.3.7 PowerPC Embedded +21.3.8 PowerPC Embedded ----------------------- GDB supports using the DVC (Data Value Compare) register to implement in @@ -6531,7 +6818,7 @@  File: gdb.info, Node: AVR, Next: CRIS, Prev: PowerPC Embedded, Up: Embedded Processors -21.3.8 Atmel AVR +21.3.9 Atmel AVR ---------------- When configured for debugging the Atmel AVR, GDB supports the following @@ -6544,8 +6831,8 @@  File: gdb.info, Node: CRIS, Next: Super-H, Prev: AVR, Up: Embedded Processors -21.3.9 CRIS ------------ +21.3.10 CRIS +------------ When configured for debugging CRIS, GDB provides the following CRIS-specific commands: @@ -6577,7 +6864,7 @@  File: gdb.info, Node: Super-H, Prev: CRIS, Up: Embedded Processors -21.3.10 Renesas Super-H +21.3.11 Renesas Super-H ----------------------- For the Renesas Super-H processor, GDB provides these commands: @@ -6635,8 +6922,8 @@ 'show debug aarch64' Show whether AArch64 debugging messages are displayed. -21.4.1.1 AArch64 SVE. -..................... +21.4.1.1 AArch64 SVE +.................... When GDB is debugging the AArch64 architecture, if the Scalable Vector Extension (SVE) is present, then GDB will provide the vector registers @@ -6650,8 +6937,8 @@ This is a known limitation of GDB and does not affect the execution of the target process. -21.4.1.2 AArch64 Pointer Authentication. -........................................ +21.4.1.2 AArch64 Pointer Authentication +....................................... When GDB is debugging the AArch64 architecture, and the program is using the v8.3-A feature Pointer Authentication (PAC), then whenever the link @@ -6663,7 +6950,7 @@  File: gdb.info, Node: i386, Next: Alpha, Prev: AArch64, Up: Architectures -21.4.2 x86 Architecture-specific Issues +21.4.2 x86 Architecture-Specific Issues --------------------------------------- 'set struct-convention MODE' @@ -6993,225 +7280,3 @@ (gdb) adi x/100 shmaddr 0xfff800010002c000: 7 7 - -File: gdb.info, Node: S12Z, Prev: Sparc64, Up: Architectures - -21.4.9 S12Z ------------ - -When GDB is debugging the S12Z architecture, it provides the following -special command: - -'maint info bdccsr' - This command displays the current value of the microprocessor's - BDCCSR register. - - -File: gdb.info, Node: Controlling GDB, Next: Extending GDB, Prev: Configurations, Up: Top - -22 Controlling GDB -****************** - -You can alter the way GDB interacts with you by using the 'set' command. -For commands controlling how GDB displays data, see *note Print -Settings: Print Settings. Other settings are described here. - -* Menu: - -* Prompt:: Prompt -* Editing:: Command editing -* Command History:: Command history -* Screen Size:: Screen size -* Output Styling:: Output styling -* Numbers:: Numbers -* ABI:: Configuring the current ABI -* Auto-loading:: Automatically loading associated files -* Messages/Warnings:: Optional warnings and messages -* Debugging Output:: Optional messages about internal happenings -* Other Misc Settings:: Other Miscellaneous Settings - - -File: gdb.info, Node: Prompt, Next: Editing, Up: Controlling GDB - -22.1 Prompt -=========== - -GDB indicates its readiness to read a command by printing a string -called the "prompt". This string is normally '(gdb)'. You can change -the prompt string with the 'set prompt' command. For instance, when -debugging GDB with GDB, it is useful to change the prompt in one of the -GDB sessions so that you can always tell which one you are talking to. - - _Note:_ 'set prompt' does not add a space for you after the prompt -you set. This allows you to set a prompt which ends in a space or a -prompt that does not. - -'set prompt NEWPROMPT' - Directs GDB to use NEWPROMPT as its prompt string henceforth. - -'show prompt' - Prints a line of the form: 'Gdb's prompt is: YOUR-PROMPT' - - Versions of GDB that ship with Python scripting enabled have prompt -extensions. The commands for interacting with these extensions are: - -'set extended-prompt PROMPT' - Set an extended prompt that allows for substitutions. *Note - gdb.prompt::, for a list of escape sequences that can be used for - substitution. Any escape sequences specified as part of the prompt - string are replaced with the corresponding strings each time the - prompt is displayed. - - For example: - - set extended-prompt Current working directory: \w (gdb) - - Note that when an extended-prompt is set, it takes control of the - PROMPT_HOOK hook. *Note prompt_hook::, for further information. - -'show extended-prompt' - Prints the extended prompt. Any escape sequences specified as part - of the prompt string with 'set extended-prompt', are replaced with - the corresponding strings each time the prompt is displayed. - - -File: gdb.info, Node: Editing, Next: Command History, Prev: Prompt, Up: Controlling GDB - -22.2 Command Editing -==================== - -GDB reads its input commands via the "Readline" interface. This GNU -library provides consistent behavior for programs which provide a -command line interface to the user. Advantages are GNU Emacs-style or -"vi"-style inline editing of commands, 'csh'-like history substitution, -and a storage and recall of command history across debugging sessions. - - You may control the behavior of command line editing in GDB with the -command 'set'. - -'set editing' -'set editing on' - Enable command line editing (enabled by default). - -'set editing off' - Disable command line editing. - -'show editing' - Show whether command line editing is enabled. - - *Note Command Line Editing::, for more details about the Readline -interface. Users unfamiliar with GNU Emacs or 'vi' are encouraged to -read that chapter. - - GDB sets the Readline application name to 'gdb'. This is useful for -conditions in '.inputrc'. - - GDB defines a bindable Readline command, 'operate-and-get-next'. -This is bound to 'C-o' by default. This command accepts the current -line for execution and fetches the next line relative to the current -line from the history for editing. Any argument is ignored. - - -File: gdb.info, Node: Command History, Next: Screen Size, Prev: Editing, Up: Controlling GDB - -22.3 Command History -==================== - -GDB can keep track of the commands you type during your debugging -sessions, so that you can be certain of precisely what happened. Use -these commands to manage the GDB command history facility. - - GDB uses the GNU History library, a part of the Readline package, to -provide the history facility. *Note Using History Interactively::, for -the detailed description of the History library. - - To issue a command to GDB without affecting certain aspects of the -state which is seen by users, prefix it with 'server ' (*note Server -Prefix::). This means that this command will not affect the command -history, nor will it affect GDB's notion of which command to repeat if -<RET> is pressed on a line by itself. - - The server prefix does not affect the recording of values into the -value history; to print a value without recording it into the value -history, use the 'output' command instead of the 'print' command. - - Here is the description of GDB commands related to command history. - -'set history filename FNAME' - Set the name of the GDB command history file to FNAME. This is the - file where GDB reads an initial command history list, and where it - writes the command history from this session when it exits. You - can access this list through history expansion or through the - history command editing characters listed below. This file - defaults to the value of the environment variable 'GDBHISTFILE', or - to './.gdb_history' ('./_gdb_history' on MS-DOS) if this variable - is not set. - -'set history save' -'set history save on' - Record command history in a file, whose name may be specified with - the 'set history filename' command. By default, this option is - disabled. - -'set history save off' - Stop recording command history in a file. - -'set history size SIZE' -'set history size unlimited' - Set the number of commands which GDB keeps in its history list. - This defaults to the value of the environment variable - 'GDBHISTSIZE', or to 256 if this variable is not set. Non-numeric - values of 'GDBHISTSIZE' are ignored. If SIZE is 'unlimited' or if - 'GDBHISTSIZE' is either a negative number or the empty string, then - the number of commands GDB keeps in the history list is unlimited. - -'set history remove-duplicates COUNT' -'set history remove-duplicates unlimited' - Control the removal of duplicate history entries in the command - history list. If COUNT is non-zero, GDB will look back at the last - COUNT history entries and remove the first entry that is a - duplicate of the current entry being added to the command history - list. If COUNT is 'unlimited' then this lookbehind is unbounded. - If COUNT is 0, then removal of duplicate history entries is - disabled. - - Only history entries added during the current session are - considered for removal. This option is set to 0 by default. - - History expansion assigns special meaning to the character '!'. -*Note Event Designators::, for more details. - - Since '!' is also the logical not operator in C, history expansion is -off by default. If you decide to enable history expansion with the 'set -history expansion on' command, you may sometimes need to follow '!' -(when it is used as logical not, in an expression) with a space or a tab -to prevent it from being expanded. The readline history facilities do -not attempt substitution on the strings '!=' and '!(', even when history -expansion is enabled. - - The commands to control history expansion are: - -'set history expansion on' -'set history expansion' - Enable history expansion. History expansion is off by default. - -'set history expansion off' - Disable history expansion. - -'show history' -'show history filename' -'show history save' -'show history size' -'show history expansion' - These commands display the state of the GDB history parameters. - 'show history' by itself displays all four states. - -'show commands' - Display the last ten commands in the command history. - -'show commands N' - Print ten commands centered on command number N. - -'show commands +' - Print ten commands just after the commands last printed. - diff -Nru gdb-9.1/gdb/doc/gdb.info-4 gdb-10.2/gdb/doc/gdb.info-4 --- gdb-9.1/gdb/doc/gdb.info-4 2020-02-08 12:54:17.000000000 +0000 +++ gdb-10.2/gdb/doc/gdb.info-4 2021-04-25 04:10:42.000000000 +0000 @@ -1,6 +1,6 @@ -This is gdb.info, produced by makeinfo version 6.5 from gdb.texinfo. +This is gdb.info, produced by makeinfo version 6.7 from gdb.texinfo. -Copyright (C) 1988-2020 Free Software Foundation, Inc. +Copyright (C) 1988-2021 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or @@ -21,9 +21,9 @@ This file documents the GNU debugger GDB. This is the Tenth Edition, of 'Debugging with GDB: the GNU -Source-Level Debugger' for GDB (GDB) Version 9.1. +Source-Level Debugger' for GDB (GDB) Version 10.2. - Copyright (C) 1988-2020 Free Software Foundation, Inc. + Copyright (C) 1988-2021 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or @@ -37,6 +37,243 @@ developing GNU and promoting software freedom."  +File: gdb.info, Node: S12Z, Prev: Sparc64, Up: Architectures + +21.4.9 S12Z +----------- + +When GDB is debugging the S12Z architecture, it provides the following +special command: + +'maint info bdccsr' + This command displays the current value of the microprocessor's + BDCCSR register. + + +File: gdb.info, Node: Controlling GDB, Next: Extending GDB, Prev: Configurations, Up: Top + +22 Controlling GDB +****************** + +You can alter the way GDB interacts with you by using the 'set' command. +For commands controlling how GDB displays data, see *note Print +Settings: Print Settings. Other settings are described here. + +* Menu: + +* Prompt:: Prompt +* Editing:: Command editing +* Command History:: Command history +* Screen Size:: Screen size +* Output Styling:: Output styling +* Numbers:: Numbers +* ABI:: Configuring the current ABI +* Auto-loading:: Automatically loading associated files +* Messages/Warnings:: Optional warnings and messages +* Debugging Output:: Optional messages about internal happenings +* Other Misc Settings:: Other Miscellaneous Settings + + +File: gdb.info, Node: Prompt, Next: Editing, Up: Controlling GDB + +22.1 Prompt +=========== + +GDB indicates its readiness to read a command by printing a string +called the "prompt". This string is normally '(gdb)'. You can change +the prompt string with the 'set prompt' command. For instance, when +debugging GDB with GDB, it is useful to change the prompt in one of the +GDB sessions so that you can always tell which one you are talking to. + + _Note:_ 'set prompt' does not add a space for you after the prompt +you set. This allows you to set a prompt which ends in a space or a +prompt that does not. + +'set prompt NEWPROMPT' + Directs GDB to use NEWPROMPT as its prompt string henceforth. + +'show prompt' + Prints a line of the form: 'Gdb's prompt is: YOUR-PROMPT' + + Versions of GDB that ship with Python scripting enabled have prompt +extensions. The commands for interacting with these extensions are: + +'set extended-prompt PROMPT' + Set an extended prompt that allows for substitutions. *Note + gdb.prompt::, for a list of escape sequences that can be used for + substitution. Any escape sequences specified as part of the prompt + string are replaced with the corresponding strings each time the + prompt is displayed. + + For example: + + set extended-prompt Current working directory: \w (gdb) + + Note that when an extended-prompt is set, it takes control of the + PROMPT_HOOK hook. *Note prompt_hook::, for further information. + +'show extended-prompt' + Prints the extended prompt. Any escape sequences specified as part + of the prompt string with 'set extended-prompt', are replaced with + the corresponding strings each time the prompt is displayed. + + +File: gdb.info, Node: Editing, Next: Command History, Prev: Prompt, Up: Controlling GDB + +22.2 Command Editing +==================== + +GDB reads its input commands via the "Readline" interface. This GNU +library provides consistent behavior for programs which provide a +command line interface to the user. Advantages are GNU Emacs-style or +"vi"-style inline editing of commands, 'csh'-like history substitution, +and a storage and recall of command history across debugging sessions. + + You may control the behavior of command line editing in GDB with the +command 'set'. + +'set editing' +'set editing on' + Enable command line editing (enabled by default). + +'set editing off' + Disable command line editing. + +'show editing' + Show whether command line editing is enabled. + + *Note Command Line Editing::, for more details about the Readline +interface. Users unfamiliar with GNU Emacs or 'vi' are encouraged to +read that chapter. + + GDB sets the Readline application name to 'gdb'. This is useful for +conditions in '.inputrc'. + + GDB defines a bindable Readline command, 'operate-and-get-next'. +This is bound to 'C-o' by default. This command accepts the current +line for execution and fetches the next line relative to the current +line from the history for editing. Any argument is ignored. + + +File: gdb.info, Node: Command History, Next: Screen Size, Prev: Editing, Up: Controlling GDB + +22.3 Command History +==================== + +GDB can keep track of the commands you type during your debugging +sessions, so that you can be certain of precisely what happened. Use +these commands to manage the GDB command history facility. + + GDB uses the GNU History library, a part of the Readline package, to +provide the history facility. *Note Using History Interactively::, for +the detailed description of the History library. + + To issue a command to GDB without affecting certain aspects of the +state which is seen by users, prefix it with 'server ' (*note Server +Prefix::). This means that this command will not affect the command +history, nor will it affect GDB's notion of which command to repeat if +<RET> is pressed on a line by itself. + + The server prefix does not affect the recording of values into the +value history; to print a value without recording it into the value +history, use the 'output' command instead of the 'print' command. + + Here is the description of GDB commands related to command history. + +'set history filename [FNAME]' + Set the name of the GDB command history file to FNAME. This is the + file where GDB reads an initial command history list, and where it + writes the command history from this session when it exits. You + can access this list through history expansion or through the + history command editing characters listed below. This file + defaults to the value of the environment variable 'GDBHISTFILE', or + to './.gdb_history' ('./_gdb_history' on MS-DOS) if this variable + is not set. + + The 'GDBHISTFILE' environment variable is read after processing any + GDB initialization files (*note Startup::) and after processing any + commands passed using command line options (for example, '-ex'). + + If the FNAME argument is not given, or if the 'GDBHISTFILE' is the + empty string then GDB will neither try to load an existing history + file, nor will it try to save the history on exit. + +'set history save' +'set history save on' + Record command history in a file, whose name may be specified with + the 'set history filename' command. By default, this option is + disabled. The command history will be recorded when GDB exits. If + 'set history filename' is set to the empty string then history + saving is disabled, even when 'set history save' is 'on'. + +'set history save off' + Don't record the command history into the file specified by 'set + history filename' when GDB exits. + +'set history size SIZE' +'set history size unlimited' + Set the number of commands which GDB keeps in its history list. + This defaults to the value of the environment variable + 'GDBHISTSIZE', or to 256 if this variable is not set. Non-numeric + values of 'GDBHISTSIZE' are ignored. If SIZE is 'unlimited' or if + 'GDBHISTSIZE' is either a negative number or the empty string, then + the number of commands GDB keeps in the history list is unlimited. + + The 'GDBHISTSIZE' environment variable is read after processing any + GDB initialization files (*note Startup::) and after processing any + commands passed using command line options (for example, '-ex'). + +'set history remove-duplicates COUNT' +'set history remove-duplicates unlimited' + Control the removal of duplicate history entries in the command + history list. If COUNT is non-zero, GDB will look back at the last + COUNT history entries and remove the first entry that is a + duplicate of the current entry being added to the command history + list. If COUNT is 'unlimited' then this lookbehind is unbounded. + If COUNT is 0, then removal of duplicate history entries is + disabled. + + Only history entries added during the current session are + considered for removal. This option is set to 0 by default. + + History expansion assigns special meaning to the character '!'. +*Note Event Designators::, for more details. + + Since '!' is also the logical not operator in C, history expansion is +off by default. If you decide to enable history expansion with the 'set +history expansion on' command, you may sometimes need to follow '!' +(when it is used as logical not, in an expression) with a space or a tab +to prevent it from being expanded. The readline history facilities do +not attempt substitution on the strings '!=' and '!(', even when history +expansion is enabled. + + The commands to control history expansion are: + +'set history expansion on' +'set history expansion' + Enable history expansion. History expansion is off by default. + +'set history expansion off' + Disable history expansion. + +'show history' +'show history filename' +'show history save' +'show history size' +'show history expansion' + These commands display the state of the GDB history parameters. + 'show history' by itself displays all four states. + +'show commands' + Display the last ten commands in the command history. + +'show commands N' + Print ten commands centered on command number N. + +'show commands +' + Print ten commands just after the commands last printed. + + File: gdb.info, Node: Screen Size, Next: Output Styling, Prev: Command History, Up: Controlling GDB 22.4 Screen Size @@ -314,7 +551,7 @@  File: gdb.info, Node: Auto-loading, Next: Messages/Warnings, Prev: ABI, Up: Controlling GDB -22.8 Automatically loading associated files +22.8 Automatically Loading Associated Files =========================================== GDB sometimes reads files with commands and settings automatically, @@ -431,7 +668,7 @@  File: gdb.info, Node: Init File in the Current Directory, Next: libthread_db.so.1 file, Up: Auto-loading -22.8.1 Automatically loading init file in the current directory +22.8.1 Automatically Loading Init File in the Current Directory --------------------------------------------------------------- By default, GDB reads and executes the canned sequences of commands from @@ -457,7 +694,7 @@  File: gdb.info, Node: libthread_db.so.1 file, Next: Auto-loading safe path, Prev: Init File in the Current Directory, Up: Auto-loading -22.8.2 Automatically loading thread debugging library +22.8.2 Automatically Loading Thread Debugging Library ----------------------------------------------------- This feature is currently present only on GNU/Linux native hosts. @@ -491,7 +728,7 @@  File: gdb.info, Node: Auto-loading safe path, Next: Auto-loading verbose mode, Prev: libthread_db.so.1 file, Up: Auto-loading -22.8.3 Security restriction for auto-loading +22.8.3 Security Restriction for Auto-Loading -------------------------------------------- As the files of inferior can come from untrusted source (such as @@ -504,7 +741,7 @@ will not get loaded: $ ./gdb -q ./gdb - Reading symbols from /home/user/gdb/gdb...done. + Reading symbols from /home/user/gdb/gdb... warning: File "/home/user/gdb/gdb-gdb.gdb" auto-loading has been declined by your `auto-load safe-path' set to "$debugdir:$datadir/auto-load". @@ -603,7 +840,7 @@  File: gdb.info, Node: Auto-loading verbose mode, Prev: Auto-loading safe path, Up: Auto-loading -22.8.4 Displaying files tried for auto-load +22.8.4 Displaying Files Tried for Auto-Load ------------------------------------------- For better visibility of all the file locations where you can place @@ -1038,7 +1275,7 @@  File: gdb.info, Node: Define, Next: Hooks, Up: Sequences -23.1.1 User-defined Commands +23.1.1 User-Defined Commands ---------------------------- A "user-defined command" is a sequence of GDB commands to which you @@ -1185,7 +1422,7 @@  File: gdb.info, Node: Hooks, Next: Command Files, Prev: Define, Up: Sequences -23.1.2 User-defined Command Hooks +23.1.2 User-Defined Command Hooks --------------------------------- You may define "hooks", which are a special kind of user-defined @@ -1484,7 +1721,7 @@  File: gdb.info, Node: Auto-loading sequences, Prev: Output, Up: Sequences -23.1.5 Controlling auto-loading native GDB scripts +23.1.5 Controlling Auto-Loading Native GDB Scripts -------------------------------------------------- When a new object file is read (for example, due to the 'file' command, @@ -1651,6 +1888,8 @@ using Python. * Lazy Strings In Python:: Python representation of lazy strings. * Architectures In Python:: Python representation of architectures. +* Registers In Python:: Python representation of registers. +* TUI Windows In Python:: Implementing new TUI windows.  File: gdb.info, Node: Basic Python, Next: Exception Handling, Up: Python API @@ -2282,7 +2521,7 @@ 'False' if the _declared_ type should be used. (See 'set print object' in *note Print Settings::). - 'static_fields' + 'static_members' 'True' if static members should be included in the string representation of a C++ object, 'False' if they shouldn't (see 'set print static-members' in *note Print Settings::). @@ -2415,6 +2654,26 @@ The type code for this type. The type code will be one of the 'TYPE_CODE_' constants defined below. + -- Variable: Type.dynamic + A boolean indicating whether this type is dynamic. In some + situations, such as Rust 'enum' types or Ada variant records, the + concrete type of a value may vary depending on its contents. That + is, the declared type of a variable, or the type returned by + 'gdb.lookup_type' may be dynamic; while the type of the variable's + value will be a concrete instance of that dynamic type. + + For example, consider this code: + int n; + int array[n]; + + Here, at least conceptually (whether your compiler actually does + this is a separate issue), examining + 'gdb.lookup_symbol("array", ...).type' could yield a 'gdb.Type' + which reports a size of 'None'. This is the dynamic type. + + However, examining 'gdb.parse_and_eval("array").type' would yield a + concrete type, whose length would be known. + -- Variable: Type.name The name of this type. If this type has no name, then 'None' is returned. @@ -2422,7 +2681,9 @@ -- Variable: Type.sizeof The size of this type, in target 'char' units. Usually, a target's 'char' type will be an 8-bit byte. However, on some unusual - platforms, this type may have a different size. + platforms, this type may have a different size. A dynamic type may + not have a fixed size; in this case, this attribute's value will be + 'None'. -- Variable: Type.tag The tag name for this type. The tag name is the name after @@ -2450,7 +2711,11 @@ 'bitpos' This attribute is not available for 'enum' or 'static' (as in C++) fields. The value is the position, counting in bits, - from the start of the containing type. + from the start of the containing type. Note that, in a + dynamic type, the position of a field may not be constant. In + this case, the value will be 'None'. Also, a dynamic type may + have fields that do not appear in a corresponding concrete + type. 'enumval' This attribute is only available for 'enum' fields, and its @@ -3651,11 +3916,10 @@ -- Function: PendingFrame.read_register (reg) This method returns the contents of the register REG in the frame - as a 'gdb.Value' object. REG can be either a register number or a - register name; the values are platform-specific. They are usually - found in the corresponding 'PLATFORM-tdep.h' file in the GDB source - tree. If REG does not name a register for the current - architecture, this method will throw an exception. + as a 'gdb.Value' object. For a description of the acceptable + values of REG see *note Frame.read_register: + gdbpy_frame_read_register. If REG does not name a register for the + current architecture, this method will throw an exception. Note that this method will always return a 'gdb.Value' for a valid register name. This does not mean that the value will be valid. @@ -3707,6 +3971,11 @@ Each attribute value should be an instance of 'gdb.Value'. + -- Function: PendingFrame.architecture () + Return the 'gdb.Architecture' (*note Architectures In Python::) for + this 'gdb.PendingFrame'. This represents the architecture of the + particular frame being unwound. + Unwinder Output: UnwindInfo --------------------------- @@ -3715,9 +3984,9 @@ registers that have been saved in this frame: -- Function: gdb.UnwindInfo.add_saved_register (reg, value) - REG identifies the register. It can be a number or a name, just as - for the 'PendingFrame.read_register' method above. VALUE is a - register value (a 'gdb.Value' object). + REG identifies the register, for a description of the acceptable + values see *note Frame.read_register: gdbpy_frame_read_register. + VALUE is a register value (a 'gdb.Value' object). Unwinder Skeleton Code ---------------------- @@ -4110,9 +4379,9 @@ ............................. Programs which are being run under GDB are called inferiors (*note -Inferiors and Programs::). Python scripts can access information about -and manipulate inferiors controlled by GDB via objects of the -'gdb.Inferior' class. +Inferiors Connections and Programs::). Python scripts can access +information about and manipulate inferiors controlled by GDB via objects +of the 'gdb.Inferior' class. The following inferior-related functions are available in the 'gdb' module: @@ -4435,7 +4704,7 @@ If there is no selected thread, this will return 'None'. To get the list of threads for an inferior, use the -'Inferior.threads()' method. *Note Inferiors In Python:: +'Inferior.threads()' method. *Note Inferiors In Python::. A 'gdb.InferiorThread' object has the following attributes: @@ -4859,6 +5128,11 @@ tracepoints' at the GDB prompt to see a list of commands in this category. +'gdb.COMMAND_TUI' + The command has to do with the text user interface (*note TUI::). + Type 'help tui' at the GDB prompt to see a list of commands in this + category. + 'gdb.COMMAND_USER' The command is a general purpose command for the user, and typically does not fit in one of the other categories. Type 'help @@ -5151,17 +5425,17 @@ A program space, or "progspace", represents a symbolic view of an address space. It consists of all of the objfiles of the program. -*Note Objfiles In Python::. *Note program spaces: Inferiors and -Programs, for more details about program spaces. +*Note Objfiles In Python::. *Note program spaces: Inferiors Connections +and Programs, for more details about program spaces. The following progspace-related functions are available in the 'gdb' module: -- Function: gdb.current_progspace () This function returns the program space of the currently selected - inferior. *Note Inferiors and Programs::. This is identical to - 'gdb.selected_inferior().progspace' (*note Inferiors In Python::) - and is included for historical compatibility. + inferior. *Note Inferiors Connections and Programs::. This is + identical to 'gdb.selected_inferior().progspace' (*note Inferiors + In Python::) and is included for historical compatibility. -- Function: gdb.progspaces () Return a sequence of all the progspaces currently known to GDB. @@ -5249,7 +5523,7 @@ gdb.events.new_objfile.connect(new_objfile_handler) end (gdb) file /tmp/hello - Reading symbols from /tmp/hello...done. + Reading symbols from /tmp/hello... Computing the answer to the ultimate question ... (gdb) python print gdb.current_progspace().expensive_computation 42 @@ -5372,7 +5646,7 @@ gdb.events.new_objfile.connect(new_objfile_handler) end (gdb) file ./hello - Reading symbols from ./hello...done. + Reading symbols from ./hello... (gdb) python print gdb.objfiles()[0].time_loaded 2014-10-09 11:41:36.770345 @@ -5569,9 +5843,24 @@ Python::. -- Function: Frame.read_register (register) - Return the value of REGISTER in this frame. The REGISTER argument - must be a string (e.g., ''sp'' or ''rax''). Returns a 'Gdb.Value' - object. Throws an exception if REGISTER does not exist. + Return the value of REGISTER in this frame. Returns a 'Gdb.Value' + object. Throws an exception if REGISTER does not exist. The + REGISTER argument must be one of the following: + 1. A string that is the name of a valid register (e.g., ''sp'' or + ''rax''). + 2. A 'gdb.RegisterDescriptor' object (*note Registers In + Python::). + 3. A GDB internal, platform specific number. Using these numbers + is supported for historic reasons, but is not recommended as + future changes to GDB could change the mapping between numbers + and the registers they represent, breaking any Python code + that uses the platform-specific numbers. The numbers are + usually found in the corresponding 'PLATFORM-tdep.h' file in + the GDB source tree. + Using a string to access registers will be slightly slower than the + other two methods as GDB must look up the mapping between name and + internal register number. If performance is critical consider + looking up and caching a 'gdb.RegisterDescriptor' object. -- Function: Frame.read_var (variable [, block]) Return the value of VARIABLE in this frame. If the optional @@ -6408,7 +6697,7 @@ writable.  -File: gdb.info, Node: Architectures In Python, Prev: Lazy Strings In Python, Up: Python API +File: gdb.info, Node: Architectures In Python, Next: Registers In Python, Prev: Lazy Strings In Python, Up: Python API 23.2.2.33 Python representation of architectures ................................................ @@ -6454,6 +6743,163 @@ The value corresponding to this key is the length (integer value) of the instruction in bytes. + -- Function: Architecture.registers ([ REGGROUP ]) + Return a 'gdb.RegisterDescriptorIterator' (*note Registers In + Python::) for all of the registers in REGGROUP, a string that is + the name of a register group. If REGGROUP is omitted, or is the + empty string, then the register group 'all' is assumed. + + -- Function: Architecture.register_groups () + Return a 'gdb.RegisterGroupsIterator' (*note Registers In Python::) + for all of the register groups available for the + 'gdb.Architecture'. + + +File: gdb.info, Node: Registers In Python, Next: TUI Windows In Python, Prev: Architectures In Python, Up: Python API + +23.2.2.34 Registers In Python +............................. + +Python code can request from a 'gdb.Architecture' information about the +set of registers available (*note 'Architecture.registers': +gdbpy_architecture_registers.). The register information is returned as +a 'gdb.RegisterDescriptorIterator', which is an iterator that in turn +returns 'gdb.RegisterDescriptor' objects. + + A 'gdb.RegisterDescriptor' does not provide the value of a register +(*note 'Frame.read_register': gdbpy_frame_read_register. for reading a +register's value), instead the 'RegisterDescriptor' is a way to discover +which registers are available for a particular architecture. + + A 'gdb.RegisterDescriptor' has the following read-only properties: + + -- Variable: RegisterDescriptor.name + The name of this register. + + It is also possible to lookup a register descriptor based on its name +using the following 'gdb.RegisterDescriptorIterator' function: + + -- Function: RegisterDescriptorIterator.find (NAME) + Takes NAME as an argument, which must be a string, and returns a + 'gdb.RegisterDescriptor' for the register with that name, or 'None' + if there is no register with that name. + + Python code can also request from a 'gdb.Architecture' information +about the set of register groups available on a given architecture +(*note 'Architecture.register_groups': gdbpy_architecture_reggroups.). + + Every register can be a member of zero or more register groups. Some +register groups are used internally within GDB to control things like +which registers must be saved when calling into the program being +debugged (*note Calling Program Functions: Calling.). Other register +groups exist to allow users to easily see related sets of registers in +commands like 'info registers' (*note 'info registers REGGROUP': +info_registers_reggroup.). + + The register groups information is returned as a +'gdb.RegisterGroupsIterator', which is an iterator that in turn returns +'gdb.RegisterGroup' objects. + + A 'gdb.RegisterGroup' object has the following read-only properties: + + -- Variable: RegisterGroup.name + A string that is the name of this register group. + + +File: gdb.info, Node: TUI Windows In Python, Prev: Registers In Python, Up: Python API + +23.2.2.35 Implementing new TUI windows +...................................... + +New TUI (*note TUI::) windows can be implemented in Python. + + -- Function: gdb.register_window_type (NAME, FACTORY) + Because TUI windows are created and destroyed depending on the + layout the user chooses, new window types are implemented by + registering a factory function with GDB. + + NAME is the name of the new window. It's an error to try to + replace one of the built-in windows, but other window types can be + replaced. + + FUNCTION is a factory function that is called to create the TUI + window. This is called with a single argument of type + 'gdb.TuiWindow', described below. It should return an object that + implements the TUI window protocol, also described below. + + As mentioned above, when a factory function is called, it is passed a +an object of type 'gdb.TuiWindow'. This object has these methods and +attributes: + + -- Function: TuiWindow.is_valid () + This method returns 'True' when this window is valid. When the + user changes the TUI layout, windows no longer visible in the new + layout will be destroyed. At this point, the 'gdb.TuiWindow' will + no longer be valid, and methods (and attributes) other than + 'is_valid' will throw an exception. + + -- Variable: TuiWindow.width + This attribute holds the width of the window. It is not writable. + + -- Variable: TuiWindow.height + This attribute holds the height of the window. It is not writable. + + -- Variable: TuiWindow.title + This attribute holds the window's title, a string. This is + normally displayed above the window. This attribute can be + modified. + + -- Function: TuiWindow.erase () + Remove all the contents of the window. + + -- Function: TuiWindow.write (STRING) + Write STRING to the window. STRING can contain ANSI terminal + escape styling sequences; GDB will translate these as appropriate + for the terminal. + + The factory function that you supply should return an object +conforming to the TUI window protocol. These are the method that can be +called on this object, which is referred to below as the "window +object". The methods documented below are optional; if the object does +not implement one of these methods, GDB will not attempt to call it. +Additional new methods may be added to the window protocol in the +future. GDB guarantees that they will begin with a lower-case letter, +so you can start implementation methods with upper-case letters or +underscore to avoid any future conflicts. + + -- Function: Window.close () + When the TUI window is closed, the 'gdb.TuiWindow' object will be + put into an invalid state. At this time, GDB will call 'close' + method on the window object. + + After this method is called, GDB will discard any references it + holds on this window object, and will no longer call methods on + this object. + + -- Function: Window.render () + In some situations, a TUI window can change size. For example, + this can happen if the user resizes the terminal, or changes the + layout. When this happens, GDB will call the 'render' method on + the window object. + + If your window is intended to update in response to changes in the + inferior, you will probably also want to register event listeners + and send output to the 'gdb.TuiWindow'. + + -- Function: Window.hscroll (NUM) + This is a request to scroll the window horizontally. NUM is the + amount by which to scroll, with negative numbers meaning to scroll + right. In the TUI model, it is the viewport that moves, not the + contents. A positive argument should cause the viewport to move + right, and so the content should appear to move to the left. + + -- Function: Window.vscroll (NUM) + This is a request to scroll the window vertically. NUM is the + amount by which to scroll, with negative numbers meaning to scroll + backward. In the TUI model, it is the viewport that moves, not the + contents. A positive argument should cause the viewport to move + down, and so the content should appear to move up. +  File: gdb.info, Node: Python Auto-loading, Next: Python modules, Prev: Python API, Up: Python @@ -6724,8 +7170,7 @@ closely, so concepts there should carry over. However, some things are done differently where it makes sense. - GDB requires Guile version 2.0 or greater. Older versions are not -supported. + GDB requires Guile version 3.0, 2.2, or 2.0. Guile scripts used by GDB should be installed in 'DATA-DIRECTORY/guile', where DATA-DIRECTORY is the data directory as @@ -6791,736 +7236,3 @@ documentation for a description of this function. (*note (guile)Loading::). - -File: gdb.info, Node: Guile API, Next: Guile Auto-loading, Prev: Guile Commands, Up: Guile - -23.3.3 Guile API ----------------- - -You can get quick online help for GDB's Guile API by issuing the command -'help guile', or by issuing the command ',help' from an interactive -Guile session. Furthermore, most Guile procedures provided by GDB have -doc strings which can be obtained with ',describe PROCEDURE-NAME' or ',d -PROCEDURE-NAME' from the Guile interactive prompt. - -* Menu: - -* Basic Guile:: Basic Guile Functions -* Guile Configuration:: Guile configuration variables -* GDB Scheme Data Types:: Scheme representations of GDB objects -* Guile Exception Handling:: How Guile exceptions are translated -* Values From Inferior In Guile:: Guile representation of values -* Arithmetic In Guile:: Arithmetic in Guile -* Types In Guile:: Guile representation of types -* Guile Pretty Printing API:: Pretty-printing values with Guile -* Selecting Guile Pretty-Printers:: How GDB chooses a pretty-printer -* Writing a Guile Pretty-Printer:: Writing a pretty-printer -* Commands In Guile:: Implementing new commands in Guile -* Parameters In Guile:: Adding new GDB parameters -* Progspaces In Guile:: Program spaces -* Objfiles In Guile:: Object files in Guile -* Frames In Guile:: Accessing inferior stack frames from Guile -* Blocks In Guile:: Accessing blocks from Guile -* Symbols In Guile:: Guile representation of symbols -* Symbol Tables In Guile:: Guile representation of symbol tables -* Breakpoints In Guile:: Manipulating breakpoints using Guile -* Lazy Strings In Guile:: Guile representation of lazy strings -* Architectures In Guile:: Guile representation of architectures -* Disassembly In Guile:: Disassembling instructions from Guile -* I/O Ports in Guile:: GDB I/O ports -* Memory Ports in Guile:: Accessing memory through ports and bytevectors -* Iterators In Guile:: Basic iterator support - - -File: gdb.info, Node: Basic Guile, Next: Guile Configuration, Up: Guile API - -23.3.3.1 Basic Guile -.................... - -At startup, GDB overrides Guile's 'current-output-port' and -'current-error-port' to print using GDB's output-paging streams. A -Guile program which outputs to one of these streams may have its output -interrupted by the user (*note Screen Size::). In this situation, a -Guile 'signal' exception is thrown with value 'SIGINT'. - - Guile's history mechanism uses the same naming as GDB's, namely the -user of dollar-variables (e.g., $1, $2, etc.). The results of -evaluations in Guile and in GDB are counted separately, '$1' in Guile is -not the same value as '$1' in GDB. - - GDB is not thread-safe. If your Guile program uses multiple threads, -you must be careful to only call GDB-specific functions in the GDB -thread. - - Some care must be taken when writing Guile code to run in GDB. Two -things are worth noting in particular: - - * GDB installs handlers for 'SIGCHLD' and 'SIGINT'. Guile code must - not override these, or even change the options using 'sigaction'. - If your program changes the handling of these signals, GDB will - most likely stop working correctly. Note that it is unfortunately - common for GUI toolkits to install a 'SIGCHLD' handler. - - * GDB takes care to mark its internal file descriptors as - close-on-exec. However, this cannot be done in a thread-safe way - on all platforms. Your Guile programs should be aware of this and - should both create new file descriptors with the close-on-exec flag - set and arrange to close unneeded file descriptors before starting - a child process. - - GDB introduces a new Guile module, named 'gdb'. All methods and -classes added by GDB are placed in this module. GDB does not -automatically 'import' the 'gdb' module, scripts must do this -themselves. There are various options for how to import a module, so -GDB leaves the choice of how the 'gdb' module is imported to the user. -To simplify interactive use, it is recommended to add one of the -following to your ~/.gdbinit. - - guile (use-modules (gdb)) - - guile (use-modules ((gdb) #:renamer (symbol-prefix-proc 'gdb:))) - - Which one to choose depends on your preference. The second one adds -'gdb:' as a prefix to all module functions and variables. - - The rest of this manual assumes the 'gdb' module has been imported -without any prefix. See the Guile documentation for 'use-modules' for -more information (*note (guile)Using Guile Modules::). - - Example: - - (gdb) guile (value-type (make-value 1)) - ERROR: Unbound variable: value-type - Error while executing Scheme code. - (gdb) guile (use-modules (gdb)) - (gdb) guile (value-type (make-value 1)) - int - (gdb) - - The '(gdb)' module provides these basic Guile functions. - - -- Scheme Procedure: execute command [#:from-tty boolean] [#:to-string - boolean] - Evaluate COMMAND, a string, as a GDB CLI command. If a GDB - exception happens while COMMAND runs, it is translated as described - in *note Guile Exception Handling: Guile Exception Handling. - - FROM-TTY specifies whether GDB ought to consider this command as - having originated from the user invoking it interactively. It must - be a boolean value. If omitted, it defaults to '#f'. - - By default, any output produced by COMMAND is sent to GDB's - standard output (and to the log output if logging is turned on). - If the TO-STRING parameter is '#t', then output will be collected - by 'execute' and returned as a string. The default is '#f', in - which case the return value is unspecified. If TO-STRING is '#t', - the GDB virtual terminal will be temporarily set to unlimited width - and height, and its pagination will be disabled; *note Screen - Size::. - - -- Scheme Procedure: history-ref number - Return a value from GDB's value history (*note Value History::). - The NUMBER argument indicates which history element to return. If - NUMBER is negative, then GDB will take its absolute value and count - backward from the last element (i.e., the most recent element) to - find the value to return. If NUMBER is zero, then GDB will return - the most recent element. If the element specified by NUMBER - doesn't exist in the value history, a 'gdb:error' exception will be - raised. - - If no exception is raised, the return value is always an instance - of '<gdb:value>' (*note Values From Inferior In Guile::). - - _Note:_ GDB's value history is independent of Guile's. '$1' in - GDB's value history contains the result of evaluating an expression - from GDB's command line and '$1' from Guile's history contains the - result of evaluating an expression from Guile's command line. - - -- Scheme Procedure: history-append! value - Append VALUE, an instance of '<gdb:value>', to GDB's value history. - Return its index in the history. - - Putting into history values returned by Guile extensions will allow - the user convenient access to those values via CLI history - facilities. - - -- Scheme Procedure: parse-and-eval expression - Parse EXPRESSION as an expression in the current language, evaluate - it, and return the result as a '<gdb:value>'. The EXPRESSION must - be a string. - - This function can be useful when implementing a new command (*note - Commands In Guile::), as it provides a way to parse the command's - arguments as an expression. It is also is useful when computing - values. For example, it is the only way to get the value of a - convenience variable (*note Convenience Vars::) as a '<gdb:value>'. - - -File: gdb.info, Node: Guile Configuration, Next: GDB Scheme Data Types, Prev: Basic Guile, Up: Guile API - -23.3.3.2 Guile Configuration -............................ - -GDB provides these Scheme functions to access various configuration -parameters. - - -- Scheme Procedure: data-directory - Return a string containing GDB's data directory. This directory - contains GDB's ancillary files. - - -- Scheme Procedure: guile-data-directory - Return a string containing GDB's Guile data directory. This - directory contains the Guile modules provided by GDB. - - -- Scheme Procedure: gdb-version - Return a string containing the GDB version. - - -- Scheme Procedure: host-config - Return a string containing the host configuration. This is the - string passed to '--host' when GDB was configured. - - -- Scheme Procedure: target-config - Return a string containing the target configuration. This is the - string passed to '--target' when GDB was configured. - - -File: gdb.info, Node: GDB Scheme Data Types, Next: Guile Exception Handling, Prev: Guile Configuration, Up: Guile API - -23.3.3.3 GDB Scheme Data Types -.............................. - -The values exposed by GDB to Guile are known as "GDB objects". There -are several kinds of GDB object, and each is disjoint from all other -types known to Guile. - - -- Scheme Procedure: gdb-object-kind object - Return the kind of the GDB object, e.g., '<gdb:breakpoint>', as a - symbol. - - GDB defines the following object types: - -'<gdb:arch>' - *Note Architectures In Guile::. - -'<gdb:block>' - *Note Blocks In Guile::. - -'<gdb:block-symbols-iterator>' - *Note Blocks In Guile::. - -'<gdb:breakpoint>' - *Note Breakpoints In Guile::. - -'<gdb:command>' - *Note Commands In Guile::. - -'<gdb:exception>' - *Note Guile Exception Handling::. - -'<gdb:frame>' - *Note Frames In Guile::. - -'<gdb:iterator>' - *Note Iterators In Guile::. - -'<gdb:lazy-string>' - *Note Lazy Strings In Guile::. - -'<gdb:objfile>' - *Note Objfiles In Guile::. - -'<gdb:parameter>' - *Note Parameters In Guile::. - -'<gdb:pretty-printer>' - *Note Guile Pretty Printing API::. - -'<gdb:pretty-printer-worker>' - *Note Guile Pretty Printing API::. - -'<gdb:progspace>' - *Note Progspaces In Guile::. - -'<gdb:symbol>' - *Note Symbols In Guile::. - -'<gdb:symtab>' - *Note Symbol Tables In Guile::. - -'<gdb:sal>' - *Note Symbol Tables In Guile::. - -'<gdb:type>' - *Note Types In Guile::. - -'<gdb:field>' - *Note Types In Guile::. - -'<gdb:value>' - *Note Values From Inferior In Guile::. - - The following GDB objects are managed internally so that the Scheme -function 'eq?' may be applied to them. - -'<gdb:arch>' -'<gdb:block>' -'<gdb:breakpoint>' -'<gdb:frame>' -'<gdb:objfile>' -'<gdb:progspace>' -'<gdb:symbol>' -'<gdb:symtab>' -'<gdb:type>' - - -File: gdb.info, Node: Guile Exception Handling, Next: Values From Inferior In Guile, Prev: GDB Scheme Data Types, Up: Guile API - -23.3.3.4 Guile Exception Handling -................................. - -When executing the 'guile' command, Guile exceptions uncaught within the -Guile code are translated to calls to the GDB error-reporting mechanism. -If the command that called 'guile' does not handle the error, GDB will -terminate it and report the error according to the setting of the 'guile -print-stack' parameter. - - The 'guile print-stack' parameter has three settings: - -'none' - Nothing is printed. - -'message' - An error message is printed containing the Guile exception name, - the associated value, and the Guile call stack backtrace at the - point where the exception was raised. Example: - - (gdb) guile (display foo) - ERROR: In procedure memoize-variable-access!: - ERROR: Unbound variable: foo - Error while executing Scheme code. - -'full' - In addition to an error message a full backtrace is printed. - - (gdb) set guile print-stack full - (gdb) guile (display foo) - Guile Backtrace: - In ice-9/boot-9.scm: - 157: 10 [catch #t #<catch-closure 2c76e20> ...] - In unknown file: - ?: 9 [apply-smob/1 #<catch-closure 2c76e20>] - In ice-9/boot-9.scm: - 157: 8 [catch #t #<catch-closure 2c76d20> ...] - In unknown file: - ?: 7 [apply-smob/1 #<catch-closure 2c76d20>] - ?: 6 [call-with-input-string "(display foo)" ...] - In ice-9/boot-9.scm: - 2320: 5 [save-module-excursion #<procedure 2c2dc30 ... ()>] - In ice-9/eval-string.scm: - 44: 4 [read-and-eval #<input: string 27cb410> #:lang ...] - 37: 3 [lp (display foo)] - In ice-9/eval.scm: - 387: 2 [eval # ()] - 393: 1 [eval #<memoized foo> ()] - In unknown file: - ?: 0 [memoize-variable-access! #<memoized foo> ...] - - ERROR: In procedure memoize-variable-access!: - ERROR: Unbound variable: foo - Error while executing Scheme code. - - GDB errors that happen in GDB commands invoked by Guile code are -converted to Guile exceptions. The type of the Guile exception depends -on the error. - - Guile procedures provided by GDB can throw the standard Guile -exceptions like 'wrong-type-arg' and 'out-of-range'. - - User interrupt (via 'C-c' or by typing 'q' at a pagination prompt) is -translated to a Guile 'signal' exception with value 'SIGINT'. - - GDB Guile procedures can also throw these exceptions: - -'gdb:error' - This exception is a catch-all for errors generated from within GDB. - -'gdb:invalid-object' - This exception is thrown when accessing Guile objects that wrap - underlying GDB objects have become invalid. For example, a - '<gdb:breakpoint>' object becomes invalid if the user deletes it - from the command line. The object still exists in Guile, but the - object it represents is gone. Further operations on this - breakpoint will throw this exception. - -'gdb:memory-error' - This exception is thrown when an operation tried to access invalid - memory in the inferior. - -'gdb:pp-type-error' - This exception is thrown when a Guile pretty-printer passes a bad - object to GDB. - - The following exception-related procedures are provided by the -'(gdb)' module. - - -- Scheme Procedure: make-exception key args - Return a '<gdb:exception>' object given by its KEY and ARGS, which - are the standard Guile parameters of an exception. See the Guile - documentation for more information (*note (guile)Exceptions::). - - -- Scheme Procedure: exception? object - Return '#t' if OBJECT is a '<gdb:exception>' object. Otherwise - return '#f'. - - -- Scheme Procedure: exception-key exception - Return the ARGS field of a '<gdb:exception>' object. - - -- Scheme Procedure: exception-args exception - Return the ARGS field of a '<gdb:exception>' object. - - -File: gdb.info, Node: Values From Inferior In Guile, Next: Arithmetic In Guile, Prev: Guile Exception Handling, Up: Guile API - -23.3.3.5 Values From Inferior In Guile -...................................... - -GDB provides values it obtains from the inferior program in an object of -type '<gdb:value>'. GDB uses this object for its internal bookkeeping -of the inferior's values, and for fetching values when necessary. - - GDB does not memoize '<gdb:value>' objects. 'make-value' always -returns a fresh object. - - (gdb) guile (eq? (make-value 1) (make-value 1)) - $1 = #f - (gdb) guile (equal? (make-value 1) (make-value 1)) - $1 = #t - - A '<gdb:value>' that represents a function can be executed via -inferior function call with 'value-call'. Any arguments provided to the -call must match the function's prototype, and must be provided in the -order specified by that prototype. - - For example, 'some-val' is a '<gdb:value>' instance representing a -function that takes two integers as arguments. To execute this -function, call it like so: - - (define result (value-call some-val 10 20)) - - Any values returned from a function call are '<gdb:value>' objects. - - Note: Unlike Python scripting in GDB, inferior values that are simple -scalars cannot be used directly in Scheme expressions that are valid for -the value's data type. For example, '(+ (parse-and-eval "int_variable") -2)' does not work. And inferior values that are structures or instances -of some class cannot be accessed using any special syntax, instead -'value-field' must be used. - - The following value-related procedures are provided by the '(gdb)' -module. - - -- Scheme Procedure: value? object - Return '#t' if OBJECT is a '<gdb:value>' object. Otherwise return - '#f'. - - -- Scheme Procedure: make-value value [#:type type] - Many Scheme values can be converted directly to a '<gdb:value>' - with this procedure. If TYPE is specified, the result is a value - of this type, and if VALUE can't be represented with this type an - exception is thrown. Otherwise the type of the result is - determined from VALUE as described below. - - *Note Architectures In Guile::, for a list of the builtin types for - an architecture. - - Here's how Scheme values are converted when TYPE argument to - 'make-value' is not specified: - - Scheme boolean - A Scheme boolean is converted the boolean type for the current - language. - - Scheme integer - A Scheme integer is converted to the first of a C 'int', - 'unsigned int', 'long', 'unsigned long', 'long long' or - 'unsigned long long' type for the current architecture that - can represent the value. - - If the Scheme integer cannot be represented as a target - integer an 'out-of-range' exception is thrown. - - Scheme real - A Scheme real is converted to the C 'double' type for the - current architecture. - - Scheme string - A Scheme string is converted to a string in the current target - language using the current target encoding. Characters that - cannot be represented in the current target encoding are - replaced with the corresponding escape sequence. This is - Guile's 'SCM_FAILED_CONVERSION_ESCAPE_SEQUENCE' conversion - strategy (*note (guile)Strings::). - - Passing TYPE is not supported in this case, if it is provided - a 'wrong-type-arg' exception is thrown. - - '<gdb:lazy-string>' - If VALUE is a '<gdb:lazy-string>' object (*note Lazy Strings - In Guile::), then the 'lazy-string->value' procedure is - called, and its result is used. - - Passing TYPE is not supported in this case, if it is provided - a 'wrong-type-arg' exception is thrown. - - Scheme bytevector - If VALUE is a Scheme bytevector and TYPE is provided, VALUE - must be the same size, in bytes, of values of type TYPE, and - the result is essentially created by using 'memcpy'. - - If VALUE is a Scheme bytevector and TYPE is not provided, the - result is an array of type 'uint8' of the same length. - - -- Scheme Procedure: value-optimized-out? value - Return '#t' if the compiler optimized out VALUE, thus it is not - available for fetching from the inferior. Otherwise return '#f'. - - -- Scheme Procedure: value-address value - If VALUE is addressable, returns a '<gdb:value>' object - representing the address. Otherwise, '#f' is returned. - - -- Scheme Procedure: value-type value - Return the type of VALUE as a '<gdb:type>' object (*note Types In - Guile::). - - -- Scheme Procedure: value-dynamic-type value - Return the dynamic type of VALUE. This uses C++ run-time type - information (RTTI) to determine the dynamic type of the value. If - the value is of class type, it will return the class in which the - value is embedded, if any. If the value is of pointer or reference - to a class type, it will compute the dynamic type of the referenced - object, and return a pointer or reference to that type, - respectively. In all other cases, it will return the value's - static type. - - Note that this feature will only work when debugging a C++ program - that includes RTTI for the object in question. Otherwise, it will - just return the static type of the value as in 'ptype foo'. *Note - ptype: Symbols. - - -- Scheme Procedure: value-cast value type - Return a new instance of '<gdb:value>' that is the result of - casting VALUE to the type described by TYPE, which must be a - '<gdb:type>' object. If the cast cannot be performed for some - reason, this method throws an exception. - - -- Scheme Procedure: value-dynamic-cast value type - Like 'value-cast', but works as if the C++ 'dynamic_cast' operator - were used. Consult a C++ reference for details. - - -- Scheme Procedure: value-reinterpret-cast value type - Like 'value-cast', but works as if the C++ 'reinterpret_cast' - operator were used. Consult a C++ reference for details. - - -- Scheme Procedure: value-dereference value - For pointer data types, this method returns a new '<gdb:value>' - object whose contents is the object pointed to by VALUE. For - example, if 'foo' is a C pointer to an 'int', declared in your C - program as - - int *foo; - - then you can use the corresponding '<gdb:value>' to access what - 'foo' points to like this: - - (define bar (value-dereference foo)) - - The result 'bar' will be a '<gdb:value>' object holding the value - pointed to by 'foo'. - - A similar function 'value-referenced-value' exists which also - returns '<gdb:value>' objects corresponding to the values pointed - to by pointer values (and additionally, values referenced by - reference values). However, the behavior of 'value-dereference' - differs from 'value-referenced-value' by the fact that the behavior - of 'value-dereference' is identical to applying the C unary - operator '*' on a given value. For example, consider a reference - to a pointer 'ptrref', declared in your C++ program as - - typedef int *intptr; - ... - int val = 10; - intptr ptr = &val; - intptr &ptrref = ptr; - - Though 'ptrref' is a reference value, one can apply the method - 'value-dereference' to the '<gdb:value>' object corresponding to it - and obtain a '<gdb:value>' which is identical to that corresponding - to 'val'. However, if you apply the method - 'value-referenced-value', the result would be a '<gdb:value>' - object identical to that corresponding to 'ptr'. - - (define scm-ptrref (parse-and-eval "ptrref")) - (define scm-val (value-dereference scm-ptrref)) - (define scm-ptr (value-referenced-value scm-ptrref)) - - The '<gdb:value>' object 'scm-val' is identical to that - corresponding to 'val', and 'scm-ptr' is identical to that - corresponding to 'ptr'. In general, 'value-dereference' can be - applied whenever the C unary operator '*' can be applied to the - corresponding C value. For those cases where applying both - 'value-dereference' and 'value-referenced-value' is allowed, the - results obtained need not be identical (as we have seen in the - above example). The results are however identical when applied on - '<gdb:value>' objects corresponding to pointers ('<gdb:value>' - objects with type code 'TYPE_CODE_PTR') in a C/C++ program. - - -- Scheme Procedure: value-referenced-value value - For pointer or reference data types, this method returns a new - '<gdb:value>' object corresponding to the value referenced by the - pointer/reference value. For pointer data types, - 'value-dereference' and 'value-referenced-value' produce identical - results. The difference between these methods is that - 'value-dereference' cannot get the values referenced by reference - values. For example, consider a reference to an 'int', declared in - your C++ program as - - int val = 10; - int &ref = val; - - then applying 'value-dereference' to the '<gdb:value>' object - corresponding to 'ref' will result in an error, while applying - 'value-referenced-value' will result in a '<gdb:value>' object - identical to that corresponding to 'val'. - - (define scm-ref (parse-and-eval "ref")) - (define err-ref (value-dereference scm-ref)) ;; error - (define scm-val (value-referenced-value scm-ref)) ;; ok - - The '<gdb:value>' object 'scm-val' is identical to that - corresponding to 'val'. - - -- Scheme Procedure: value-field value field-name - Return field FIELD-NAME from '<gdb:value>' object VALUE. - - -- Scheme Procedure: value-subscript value index - Return the value of array VALUE at index INDEX. The VALUE argument - must be a subscriptable '<gdb:value>' object. - - -- Scheme Procedure: value-call value arg-list - Perform an inferior function call, taking VALUE as a pointer to the - function to call. Each element of list ARG-LIST must be a - <gdb:value> object or an object that can be converted to a value. - The result is the value returned by the function. - - -- Scheme Procedure: value->bool value - Return the Scheme boolean representing '<gdb:value>' VALUE. The - value must be "integer like". Pointers are ok. - - -- Scheme Procedure: value->integer - Return the Scheme integer representing '<gdb:value>' VALUE. The - value must be "integer like". Pointers are ok. - - -- Scheme Procedure: value->real - Return the Scheme real number representing '<gdb:value>' VALUE. - The value must be a number. - - -- Scheme Procedure: value->bytevector - Return a Scheme bytevector with the raw contents of '<gdb:value>' - VALUE. No transformation, endian or otherwise, is performed. - - -- Scheme Procedure: value->string value [#:encoding encoding] - [#:errors errors] [#:length length] - If VALUE> represents a string, then this method converts the - contents to a Guile string. Otherwise, this method will throw an - exception. - - Values are interpreted as strings according to the rules of the - current language. If the optional length argument is given, the - string will be converted to that length, and will include any - embedded zeroes that the string may contain. Otherwise, for - languages where the string is zero-terminated, the entire string - will be converted. - - For example, in C-like languages, a value is a string if it is a - pointer to or an array of characters or ints of type 'wchar_t', - 'char16_t', or 'char32_t'. - - If the optional ENCODING argument is given, it must be a string - naming the encoding of the string in the '<gdb:value>', such as - '"ascii"', '"iso-8859-6"' or '"utf-8"'. It accepts the same - encodings as the corresponding argument to Guile's - 'scm_from_stringn' function, and the Guile codec machinery will be - used to convert the string. If ENCODING is not given, or if - ENCODING is the empty string, then either the 'target-charset' - (*note Character Sets::) will be used, or a language-specific - encoding will be used, if the current language is able to supply - one. - - The optional ERRORS argument is one of '#f', 'error' or - 'substitute'. 'error' and 'substitute' must be symbols. If ERRORS - is not specified, or if its value is '#f', then the default - conversion strategy is used, which is set with the Scheme function - 'set-port-conversion-strategy!'. If the value is ''error' then an - exception is thrown if there is any conversion error. If the value - is ''substitute' then any conversion error is replaced with - question marks. *Note (guile)Strings::. - - If the optional LENGTH argument is given, the string will be - fetched and converted to the given length. The length must be a - Scheme integer and not a '<gdb:value>' integer. - - -- Scheme Procedure: value->lazy-string value [#:encoding encoding] - [#:length length] - If this '<gdb:value>' represents a string, then this method - converts VALUE to a '<gdb:lazy-string' (*note Lazy Strings In - Guile::). Otherwise, this method will throw an exception. - - If the optional ENCODING argument is given, it must be a string - naming the encoding of the '<gdb:lazy-string'. Some examples are: - '"ascii"', '"iso-8859-6"' or '"utf-8"'. If the ENCODING argument - is an encoding that GDB does not recognize, GDB will raise an - error. - - When a lazy string is printed, the GDB encoding machinery is used - to convert the string during printing. If the optional ENCODING - argument is not provided, or is an empty string, GDB will - automatically select the encoding most suitable for the string - type. For further information on encoding in GDB please see *note - Character Sets::. - - If the optional LENGTH argument is given, the string will be - fetched and encoded to the length of characters specified. If the - LENGTH argument is not provided, the string will be fetched and - encoded until a null of appropriate width is found. The length - must be a Scheme integer and not a '<gdb:value>' integer. - - -- Scheme Procedure: value-lazy? value - Return '#t' if VALUE has not yet been fetched from the inferior. - Otherwise return '#f'. GDB does not fetch values until necessary, - for efficiency. For example: - - (define myval (parse-and-eval "somevar")) - - The value of 'somevar' is not fetched at this time. It will be - fetched when the value is needed, or when the 'fetch-lazy' - procedure is invoked. - - -- Scheme Procedure: make-lazy-value type address - Return a '<gdb:value>' that will be lazily fetched from the target. - The object of type '<gdb:type>' whose value to fetch is specified - by its TYPE and its target memory ADDRESS, which is a Scheme - integer. - - -- Scheme Procedure: value-fetch-lazy! value - If VALUE is a lazy value ('(value-lazy? value)' is '#t'), then the - value is fetched from the inferior. Any errors that occur in the - process will produce a Guile exception. - - If VALUE is not a lazy value, this method has no effect. - - The result of this function is unspecified. - - -- Scheme Procedure: value-print value - Return the string representation (print form) of '<gdb:value>' - VALUE. - diff -Nru gdb-9.1/gdb/doc/gdb.info-5 gdb-10.2/gdb/doc/gdb.info-5 --- gdb-9.1/gdb/doc/gdb.info-5 2020-02-08 12:54:18.000000000 +0000 +++ gdb-10.2/gdb/doc/gdb.info-5 2021-04-25 04:10:43.000000000 +0000 @@ -1,6 +1,6 @@ -This is gdb.info, produced by makeinfo version 6.5 from gdb.texinfo. +This is gdb.info, produced by makeinfo version 6.7 from gdb.texinfo. -Copyright (C) 1988-2020 Free Software Foundation, Inc. +Copyright (C) 1988-2021 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or @@ -21,9 +21,9 @@ This file documents the GNU debugger GDB. This is the Tenth Edition, of 'Debugging with GDB: the GNU -Source-Level Debugger' for GDB (GDB) Version 9.1. +Source-Level Debugger' for GDB (GDB) Version 10.2. - Copyright (C) 1988-2020 Free Software Foundation, Inc. + Copyright (C) 1988-2021 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or @@ -37,6 +37,739 @@ developing GNU and promoting software freedom."  +File: gdb.info, Node: Guile API, Next: Guile Auto-loading, Prev: Guile Commands, Up: Guile + +23.3.3 Guile API +---------------- + +You can get quick online help for GDB's Guile API by issuing the command +'help guile', or by issuing the command ',help' from an interactive +Guile session. Furthermore, most Guile procedures provided by GDB have +doc strings which can be obtained with ',describe PROCEDURE-NAME' or ',d +PROCEDURE-NAME' from the Guile interactive prompt. + +* Menu: + +* Basic Guile:: Basic Guile Functions +* Guile Configuration:: Guile configuration variables +* GDB Scheme Data Types:: Scheme representations of GDB objects +* Guile Exception Handling:: How Guile exceptions are translated +* Values From Inferior In Guile:: Guile representation of values +* Arithmetic In Guile:: Arithmetic in Guile +* Types In Guile:: Guile representation of types +* Guile Pretty Printing API:: Pretty-printing values with Guile +* Selecting Guile Pretty-Printers:: How GDB chooses a pretty-printer +* Writing a Guile Pretty-Printer:: Writing a pretty-printer +* Commands In Guile:: Implementing new commands in Guile +* Parameters In Guile:: Adding new GDB parameters +* Progspaces In Guile:: Program spaces +* Objfiles In Guile:: Object files in Guile +* Frames In Guile:: Accessing inferior stack frames from Guile +* Blocks In Guile:: Accessing blocks from Guile +* Symbols In Guile:: Guile representation of symbols +* Symbol Tables In Guile:: Guile representation of symbol tables +* Breakpoints In Guile:: Manipulating breakpoints using Guile +* Lazy Strings In Guile:: Guile representation of lazy strings +* Architectures In Guile:: Guile representation of architectures +* Disassembly In Guile:: Disassembling instructions from Guile +* I/O Ports in Guile:: GDB I/O ports +* Memory Ports in Guile:: Accessing memory through ports and bytevectors +* Iterators In Guile:: Basic iterator support + + +File: gdb.info, Node: Basic Guile, Next: Guile Configuration, Up: Guile API + +23.3.3.1 Basic Guile +.................... + +At startup, GDB overrides Guile's 'current-output-port' and +'current-error-port' to print using GDB's output-paging streams. A +Guile program which outputs to one of these streams may have its output +interrupted by the user (*note Screen Size::). In this situation, a +Guile 'signal' exception is thrown with value 'SIGINT'. + + Guile's history mechanism uses the same naming as GDB's, namely the +user of dollar-variables (e.g., $1, $2, etc.). The results of +evaluations in Guile and in GDB are counted separately, '$1' in Guile is +not the same value as '$1' in GDB. + + GDB is not thread-safe. If your Guile program uses multiple threads, +you must be careful to only call GDB-specific functions in the GDB +thread. + + Some care must be taken when writing Guile code to run in GDB. Two +things are worth noting in particular: + + * GDB installs handlers for 'SIGCHLD' and 'SIGINT'. Guile code must + not override these, or even change the options using 'sigaction'. + If your program changes the handling of these signals, GDB will + most likely stop working correctly. Note that it is unfortunately + common for GUI toolkits to install a 'SIGCHLD' handler. + + * GDB takes care to mark its internal file descriptors as + close-on-exec. However, this cannot be done in a thread-safe way + on all platforms. Your Guile programs should be aware of this and + should both create new file descriptors with the close-on-exec flag + set and arrange to close unneeded file descriptors before starting + a child process. + + GDB introduces a new Guile module, named 'gdb'. All methods and +classes added by GDB are placed in this module. GDB does not +automatically 'import' the 'gdb' module, scripts must do this +themselves. There are various options for how to import a module, so +GDB leaves the choice of how the 'gdb' module is imported to the user. +To simplify interactive use, it is recommended to add one of the +following to your ~/.gdbinit. + + guile (use-modules (gdb)) + + guile (use-modules ((gdb) #:renamer (symbol-prefix-proc 'gdb:))) + + Which one to choose depends on your preference. The second one adds +'gdb:' as a prefix to all module functions and variables. + + The rest of this manual assumes the 'gdb' module has been imported +without any prefix. See the Guile documentation for 'use-modules' for +more information (*note (guile)Using Guile Modules::). + + Example: + + (gdb) guile (value-type (make-value 1)) + ERROR: Unbound variable: value-type + Error while executing Scheme code. + (gdb) guile (use-modules (gdb)) + (gdb) guile (value-type (make-value 1)) + int + (gdb) + + The '(gdb)' module provides these basic Guile functions. + + -- Scheme Procedure: execute command [#:from-tty boolean] [#:to-string + boolean] + Evaluate COMMAND, a string, as a GDB CLI command. If a GDB + exception happens while COMMAND runs, it is translated as described + in *note Guile Exception Handling: Guile Exception Handling. + + FROM-TTY specifies whether GDB ought to consider this command as + having originated from the user invoking it interactively. It must + be a boolean value. If omitted, it defaults to '#f'. + + By default, any output produced by COMMAND is sent to GDB's + standard output (and to the log output if logging is turned on). + If the TO-STRING parameter is '#t', then output will be collected + by 'execute' and returned as a string. The default is '#f', in + which case the return value is unspecified. If TO-STRING is '#t', + the GDB virtual terminal will be temporarily set to unlimited width + and height, and its pagination will be disabled; *note Screen + Size::. + + -- Scheme Procedure: history-ref number + Return a value from GDB's value history (*note Value History::). + The NUMBER argument indicates which history element to return. If + NUMBER is negative, then GDB will take its absolute value and count + backward from the last element (i.e., the most recent element) to + find the value to return. If NUMBER is zero, then GDB will return + the most recent element. If the element specified by NUMBER + doesn't exist in the value history, a 'gdb:error' exception will be + raised. + + If no exception is raised, the return value is always an instance + of '<gdb:value>' (*note Values From Inferior In Guile::). + + _Note:_ GDB's value history is independent of Guile's. '$1' in + GDB's value history contains the result of evaluating an expression + from GDB's command line and '$1' from Guile's history contains the + result of evaluating an expression from Guile's command line. + + -- Scheme Procedure: history-append! value + Append VALUE, an instance of '<gdb:value>', to GDB's value history. + Return its index in the history. + + Putting into history values returned by Guile extensions will allow + the user convenient access to those values via CLI history + facilities. + + -- Scheme Procedure: parse-and-eval expression + Parse EXPRESSION as an expression in the current language, evaluate + it, and return the result as a '<gdb:value>'. The EXPRESSION must + be a string. + + This function can be useful when implementing a new command (*note + Commands In Guile::), as it provides a way to parse the command's + arguments as an expression. It is also is useful when computing + values. For example, it is the only way to get the value of a + convenience variable (*note Convenience Vars::) as a '<gdb:value>'. + + +File: gdb.info, Node: Guile Configuration, Next: GDB Scheme Data Types, Prev: Basic Guile, Up: Guile API + +23.3.3.2 Guile Configuration +............................ + +GDB provides these Scheme functions to access various configuration +parameters. + + -- Scheme Procedure: data-directory + Return a string containing GDB's data directory. This directory + contains GDB's ancillary files. + + -- Scheme Procedure: guile-data-directory + Return a string containing GDB's Guile data directory. This + directory contains the Guile modules provided by GDB. + + -- Scheme Procedure: gdb-version + Return a string containing the GDB version. + + -- Scheme Procedure: host-config + Return a string containing the host configuration. This is the + string passed to '--host' when GDB was configured. + + -- Scheme Procedure: target-config + Return a string containing the target configuration. This is the + string passed to '--target' when GDB was configured. + + +File: gdb.info, Node: GDB Scheme Data Types, Next: Guile Exception Handling, Prev: Guile Configuration, Up: Guile API + +23.3.3.3 GDB Scheme Data Types +.............................. + +The values exposed by GDB to Guile are known as "GDB objects". There +are several kinds of GDB object, and each is disjoint from all other +types known to Guile. + + -- Scheme Procedure: gdb-object-kind object + Return the kind of the GDB object, e.g., '<gdb:breakpoint>', as a + symbol. + + GDB defines the following object types: + +'<gdb:arch>' + *Note Architectures In Guile::. + +'<gdb:block>' + *Note Blocks In Guile::. + +'<gdb:block-symbols-iterator>' + *Note Blocks In Guile::. + +'<gdb:breakpoint>' + *Note Breakpoints In Guile::. + +'<gdb:command>' + *Note Commands In Guile::. + +'<gdb:exception>' + *Note Guile Exception Handling::. + +'<gdb:frame>' + *Note Frames In Guile::. + +'<gdb:iterator>' + *Note Iterators In Guile::. + +'<gdb:lazy-string>' + *Note Lazy Strings In Guile::. + +'<gdb:objfile>' + *Note Objfiles In Guile::. + +'<gdb:parameter>' + *Note Parameters In Guile::. + +'<gdb:pretty-printer>' + *Note Guile Pretty Printing API::. + +'<gdb:pretty-printer-worker>' + *Note Guile Pretty Printing API::. + +'<gdb:progspace>' + *Note Progspaces In Guile::. + +'<gdb:symbol>' + *Note Symbols In Guile::. + +'<gdb:symtab>' + *Note Symbol Tables In Guile::. + +'<gdb:sal>' + *Note Symbol Tables In Guile::. + +'<gdb:type>' + *Note Types In Guile::. + +'<gdb:field>' + *Note Types In Guile::. + +'<gdb:value>' + *Note Values From Inferior In Guile::. + + The following GDB objects are managed internally so that the Scheme +function 'eq?' may be applied to them. + +'<gdb:arch>' +'<gdb:block>' +'<gdb:breakpoint>' +'<gdb:frame>' +'<gdb:objfile>' +'<gdb:progspace>' +'<gdb:symbol>' +'<gdb:symtab>' +'<gdb:type>' + + +File: gdb.info, Node: Guile Exception Handling, Next: Values From Inferior In Guile, Prev: GDB Scheme Data Types, Up: Guile API + +23.3.3.4 Guile Exception Handling +................................. + +When executing the 'guile' command, Guile exceptions uncaught within the +Guile code are translated to calls to the GDB error-reporting mechanism. +If the command that called 'guile' does not handle the error, GDB will +terminate it and report the error according to the setting of the 'guile +print-stack' parameter. + + The 'guile print-stack' parameter has three settings: + +'none' + Nothing is printed. + +'message' + An error message is printed containing the Guile exception name, + the associated value, and the Guile call stack backtrace at the + point where the exception was raised. Example: + + (gdb) guile (display foo) + ERROR: In procedure memoize-variable-access!: + ERROR: Unbound variable: foo + Error while executing Scheme code. + +'full' + In addition to an error message a full backtrace is printed. + + (gdb) set guile print-stack full + (gdb) guile (display foo) + Guile Backtrace: + In ice-9/boot-9.scm: + 157: 10 [catch #t #<catch-closure 2c76e20> ...] + In unknown file: + ?: 9 [apply-smob/1 #<catch-closure 2c76e20>] + In ice-9/boot-9.scm: + 157: 8 [catch #t #<catch-closure 2c76d20> ...] + In unknown file: + ?: 7 [apply-smob/1 #<catch-closure 2c76d20>] + ?: 6 [call-with-input-string "(display foo)" ...] + In ice-9/boot-9.scm: + 2320: 5 [save-module-excursion #<procedure 2c2dc30 ... ()>] + In ice-9/eval-string.scm: + 44: 4 [read-and-eval #<input: string 27cb410> #:lang ...] + 37: 3 [lp (display foo)] + In ice-9/eval.scm: + 387: 2 [eval # ()] + 393: 1 [eval #<memoized foo> ()] + In unknown file: + ?: 0 [memoize-variable-access! #<memoized foo> ...] + + ERROR: In procedure memoize-variable-access!: + ERROR: Unbound variable: foo + Error while executing Scheme code. + + GDB errors that happen in GDB commands invoked by Guile code are +converted to Guile exceptions. The type of the Guile exception depends +on the error. + + Guile procedures provided by GDB can throw the standard Guile +exceptions like 'wrong-type-arg' and 'out-of-range'. + + User interrupt (via 'C-c' or by typing 'q' at a pagination prompt) is +translated to a Guile 'signal' exception with value 'SIGINT'. + + GDB Guile procedures can also throw these exceptions: + +'gdb:error' + This exception is a catch-all for errors generated from within GDB. + +'gdb:invalid-object' + This exception is thrown when accessing Guile objects that wrap + underlying GDB objects have become invalid. For example, a + '<gdb:breakpoint>' object becomes invalid if the user deletes it + from the command line. The object still exists in Guile, but the + object it represents is gone. Further operations on this + breakpoint will throw this exception. + +'gdb:memory-error' + This exception is thrown when an operation tried to access invalid + memory in the inferior. + +'gdb:pp-type-error' + This exception is thrown when a Guile pretty-printer passes a bad + object to GDB. + + The following exception-related procedures are provided by the +'(gdb)' module. + + -- Scheme Procedure: make-exception key args + Return a '<gdb:exception>' object given by its KEY and ARGS, which + are the standard Guile parameters of an exception. See the Guile + documentation for more information (*note (guile)Exceptions::). + + -- Scheme Procedure: exception? object + Return '#t' if OBJECT is a '<gdb:exception>' object. Otherwise + return '#f'. + + -- Scheme Procedure: exception-key exception + Return the ARGS field of a '<gdb:exception>' object. + + -- Scheme Procedure: exception-args exception + Return the ARGS field of a '<gdb:exception>' object. + + +File: gdb.info, Node: Values From Inferior In Guile, Next: Arithmetic In Guile, Prev: Guile Exception Handling, Up: Guile API + +23.3.3.5 Values From Inferior In Guile +...................................... + +GDB provides values it obtains from the inferior program in an object of +type '<gdb:value>'. GDB uses this object for its internal bookkeeping +of the inferior's values, and for fetching values when necessary. + + GDB does not memoize '<gdb:value>' objects. 'make-value' always +returns a fresh object. + + (gdb) guile (eq? (make-value 1) (make-value 1)) + $1 = #f + (gdb) guile (equal? (make-value 1) (make-value 1)) + $1 = #t + + A '<gdb:value>' that represents a function can be executed via +inferior function call with 'value-call'. Any arguments provided to the +call must match the function's prototype, and must be provided in the +order specified by that prototype. + + For example, 'some-val' is a '<gdb:value>' instance representing a +function that takes two integers as arguments. To execute this +function, call it like so: + + (define result (value-call some-val 10 20)) + + Any values returned from a function call are '<gdb:value>' objects. + + Note: Unlike Python scripting in GDB, inferior values that are simple +scalars cannot be used directly in Scheme expressions that are valid for +the value's data type. For example, '(+ (parse-and-eval "int_variable") +2)' does not work. And inferior values that are structures or instances +of some class cannot be accessed using any special syntax, instead +'value-field' must be used. + + The following value-related procedures are provided by the '(gdb)' +module. + + -- Scheme Procedure: value? object + Return '#t' if OBJECT is a '<gdb:value>' object. Otherwise return + '#f'. + + -- Scheme Procedure: make-value value [#:type type] + Many Scheme values can be converted directly to a '<gdb:value>' + with this procedure. If TYPE is specified, the result is a value + of this type, and if VALUE can't be represented with this type an + exception is thrown. Otherwise the type of the result is + determined from VALUE as described below. + + *Note Architectures In Guile::, for a list of the builtin types for + an architecture. + + Here's how Scheme values are converted when TYPE argument to + 'make-value' is not specified: + + Scheme boolean + A Scheme boolean is converted the boolean type for the current + language. + + Scheme integer + A Scheme integer is converted to the first of a C 'int', + 'unsigned int', 'long', 'unsigned long', 'long long' or + 'unsigned long long' type for the current architecture that + can represent the value. + + If the Scheme integer cannot be represented as a target + integer an 'out-of-range' exception is thrown. + + Scheme real + A Scheme real is converted to the C 'double' type for the + current architecture. + + Scheme string + A Scheme string is converted to a string in the current target + language using the current target encoding. Characters that + cannot be represented in the current target encoding are + replaced with the corresponding escape sequence. This is + Guile's 'SCM_FAILED_CONVERSION_ESCAPE_SEQUENCE' conversion + strategy (*note (guile)Strings::). + + Passing TYPE is not supported in this case, if it is provided + a 'wrong-type-arg' exception is thrown. + + '<gdb:lazy-string>' + If VALUE is a '<gdb:lazy-string>' object (*note Lazy Strings + In Guile::), then the 'lazy-string->value' procedure is + called, and its result is used. + + Passing TYPE is not supported in this case, if it is provided + a 'wrong-type-arg' exception is thrown. + + Scheme bytevector + If VALUE is a Scheme bytevector and TYPE is provided, VALUE + must be the same size, in bytes, of values of type TYPE, and + the result is essentially created by using 'memcpy'. + + If VALUE is a Scheme bytevector and TYPE is not provided, the + result is an array of type 'uint8' of the same length. + + -- Scheme Procedure: value-optimized-out? value + Return '#t' if the compiler optimized out VALUE, thus it is not + available for fetching from the inferior. Otherwise return '#f'. + + -- Scheme Procedure: value-address value + If VALUE is addressable, returns a '<gdb:value>' object + representing the address. Otherwise, '#f' is returned. + + -- Scheme Procedure: value-type value + Return the type of VALUE as a '<gdb:type>' object (*note Types In + Guile::). + + -- Scheme Procedure: value-dynamic-type value + Return the dynamic type of VALUE. This uses C++ run-time type + information (RTTI) to determine the dynamic type of the value. If + the value is of class type, it will return the class in which the + value is embedded, if any. If the value is of pointer or reference + to a class type, it will compute the dynamic type of the referenced + object, and return a pointer or reference to that type, + respectively. In all other cases, it will return the value's + static type. + + Note that this feature will only work when debugging a C++ program + that includes RTTI for the object in question. Otherwise, it will + just return the static type of the value as in 'ptype foo'. *Note + ptype: Symbols. + + -- Scheme Procedure: value-cast value type + Return a new instance of '<gdb:value>' that is the result of + casting VALUE to the type described by TYPE, which must be a + '<gdb:type>' object. If the cast cannot be performed for some + reason, this method throws an exception. + + -- Scheme Procedure: value-dynamic-cast value type + Like 'value-cast', but works as if the C++ 'dynamic_cast' operator + were used. Consult a C++ reference for details. + + -- Scheme Procedure: value-reinterpret-cast value type + Like 'value-cast', but works as if the C++ 'reinterpret_cast' + operator were used. Consult a C++ reference for details. + + -- Scheme Procedure: value-dereference value + For pointer data types, this method returns a new '<gdb:value>' + object whose contents is the object pointed to by VALUE. For + example, if 'foo' is a C pointer to an 'int', declared in your C + program as + + int *foo; + + then you can use the corresponding '<gdb:value>' to access what + 'foo' points to like this: + + (define bar (value-dereference foo)) + + The result 'bar' will be a '<gdb:value>' object holding the value + pointed to by 'foo'. + + A similar function 'value-referenced-value' exists which also + returns '<gdb:value>' objects corresponding to the values pointed + to by pointer values (and additionally, values referenced by + reference values). However, the behavior of 'value-dereference' + differs from 'value-referenced-value' by the fact that the behavior + of 'value-dereference' is identical to applying the C unary + operator '*' on a given value. For example, consider a reference + to a pointer 'ptrref', declared in your C++ program as + + typedef int *intptr; + ... + int val = 10; + intptr ptr = &val; + intptr &ptrref = ptr; + + Though 'ptrref' is a reference value, one can apply the method + 'value-dereference' to the '<gdb:value>' object corresponding to it + and obtain a '<gdb:value>' which is identical to that corresponding + to 'val'. However, if you apply the method + 'value-referenced-value', the result would be a '<gdb:value>' + object identical to that corresponding to 'ptr'. + + (define scm-ptrref (parse-and-eval "ptrref")) + (define scm-val (value-dereference scm-ptrref)) + (define scm-ptr (value-referenced-value scm-ptrref)) + + The '<gdb:value>' object 'scm-val' is identical to that + corresponding to 'val', and 'scm-ptr' is identical to that + corresponding to 'ptr'. In general, 'value-dereference' can be + applied whenever the C unary operator '*' can be applied to the + corresponding C value. For those cases where applying both + 'value-dereference' and 'value-referenced-value' is allowed, the + results obtained need not be identical (as we have seen in the + above example). The results are however identical when applied on + '<gdb:value>' objects corresponding to pointers ('<gdb:value>' + objects with type code 'TYPE_CODE_PTR') in a C/C++ program. + + -- Scheme Procedure: value-referenced-value value + For pointer or reference data types, this method returns a new + '<gdb:value>' object corresponding to the value referenced by the + pointer/reference value. For pointer data types, + 'value-dereference' and 'value-referenced-value' produce identical + results. The difference between these methods is that + 'value-dereference' cannot get the values referenced by reference + values. For example, consider a reference to an 'int', declared in + your C++ program as + + int val = 10; + int &ref = val; + + then applying 'value-dereference' to the '<gdb:value>' object + corresponding to 'ref' will result in an error, while applying + 'value-referenced-value' will result in a '<gdb:value>' object + identical to that corresponding to 'val'. + + (define scm-ref (parse-and-eval "ref")) + (define err-ref (value-dereference scm-ref)) ;; error + (define scm-val (value-referenced-value scm-ref)) ;; ok + + The '<gdb:value>' object 'scm-val' is identical to that + corresponding to 'val'. + + -- Scheme Procedure: value-field value field-name + Return field FIELD-NAME from '<gdb:value>' object VALUE. + + -- Scheme Procedure: value-subscript value index + Return the value of array VALUE at index INDEX. The VALUE argument + must be a subscriptable '<gdb:value>' object. + + -- Scheme Procedure: value-call value arg-list + Perform an inferior function call, taking VALUE as a pointer to the + function to call. Each element of list ARG-LIST must be a + <gdb:value> object or an object that can be converted to a value. + The result is the value returned by the function. + + -- Scheme Procedure: value->bool value + Return the Scheme boolean representing '<gdb:value>' VALUE. The + value must be "integer like". Pointers are ok. + + -- Scheme Procedure: value->integer + Return the Scheme integer representing '<gdb:value>' VALUE. The + value must be "integer like". Pointers are ok. + + -- Scheme Procedure: value->real + Return the Scheme real number representing '<gdb:value>' VALUE. + The value must be a number. + + -- Scheme Procedure: value->bytevector + Return a Scheme bytevector with the raw contents of '<gdb:value>' + VALUE. No transformation, endian or otherwise, is performed. + + -- Scheme Procedure: value->string value [#:encoding encoding] + [#:errors errors] [#:length length] + If VALUE> represents a string, then this method converts the + contents to a Guile string. Otherwise, this method will throw an + exception. + + Values are interpreted as strings according to the rules of the + current language. If the optional length argument is given, the + string will be converted to that length, and will include any + embedded zeroes that the string may contain. Otherwise, for + languages where the string is zero-terminated, the entire string + will be converted. + + For example, in C-like languages, a value is a string if it is a + pointer to or an array of characters or ints of type 'wchar_t', + 'char16_t', or 'char32_t'. + + If the optional ENCODING argument is given, it must be a string + naming the encoding of the string in the '<gdb:value>', such as + '"ascii"', '"iso-8859-6"' or '"utf-8"'. It accepts the same + encodings as the corresponding argument to Guile's + 'scm_from_stringn' function, and the Guile codec machinery will be + used to convert the string. If ENCODING is not given, or if + ENCODING is the empty string, then either the 'target-charset' + (*note Character Sets::) will be used, or a language-specific + encoding will be used, if the current language is able to supply + one. + + The optional ERRORS argument is one of '#f', 'error' or + 'substitute'. 'error' and 'substitute' must be symbols. If ERRORS + is not specified, or if its value is '#f', then the default + conversion strategy is used, which is set with the Scheme function + 'set-port-conversion-strategy!'. If the value is ''error' then an + exception is thrown if there is any conversion error. If the value + is ''substitute' then any conversion error is replaced with + question marks. *Note (guile)Strings::. + + If the optional LENGTH argument is given, the string will be + fetched and converted to the given length. The length must be a + Scheme integer and not a '<gdb:value>' integer. + + -- Scheme Procedure: value->lazy-string value [#:encoding encoding] + [#:length length] + If this '<gdb:value>' represents a string, then this method + converts VALUE to a '<gdb:lazy-string' (*note Lazy Strings In + Guile::). Otherwise, this method will throw an exception. + + If the optional ENCODING argument is given, it must be a string + naming the encoding of the '<gdb:lazy-string'. Some examples are: + '"ascii"', '"iso-8859-6"' or '"utf-8"'. If the ENCODING argument + is an encoding that GDB does not recognize, GDB will raise an + error. + + When a lazy string is printed, the GDB encoding machinery is used + to convert the string during printing. If the optional ENCODING + argument is not provided, or is an empty string, GDB will + automatically select the encoding most suitable for the string + type. For further information on encoding in GDB please see *note + Character Sets::. + + If the optional LENGTH argument is given, the string will be + fetched and encoded to the length of characters specified. If the + LENGTH argument is not provided, the string will be fetched and + encoded until a null of appropriate width is found. The length + must be a Scheme integer and not a '<gdb:value>' integer. + + -- Scheme Procedure: value-lazy? value + Return '#t' if VALUE has not yet been fetched from the inferior. + Otherwise return '#f'. GDB does not fetch values until necessary, + for efficiency. For example: + + (define myval (parse-and-eval "somevar")) + + The value of 'somevar' is not fetched at this time. It will be + fetched when the value is needed, or when the 'fetch-lazy' + procedure is invoked. + + -- Scheme Procedure: make-lazy-value type address + Return a '<gdb:value>' that will be lazily fetched from the target. + The object of type '<gdb:type>' whose value to fetch is specified + by its TYPE and its target memory ADDRESS, which is a Scheme + integer. + + -- Scheme Procedure: value-fetch-lazy! value + If VALUE is a lazy value ('(value-lazy? value)' is '#t'), then the + value is fetched from the inferior. Any errors that occur in the + process will produce a Guile exception. + + If VALUE is not a lazy value, this method has no effect. + + The result of this function is unspecified. + + -- Scheme Procedure: value-print value + Return the string representation (print form) of '<gdb:value>' + VALUE. + + File: gdb.info, Node: Arithmetic In Guile, Next: Types In Guile, Prev: Values From Inferior In Guile, Up: Guile API 23.3.3.6 Arithmetic In Guile @@ -1112,8 +1845,8 @@ A program space, or "progspace", represents a symbolic view of an address space. It consists of all of the objfiles of the program. -*Note Objfiles In Guile::. *Note program spaces: Inferiors and -Programs, for more details about program spaces. +*Note Objfiles In Guile::. *Note program spaces: Inferiors Connections +and Programs, for more details about program spaces. Each progspace is represented by an instance of the '<gdb:progspace>' smob. *Note GDB Scheme Data Types::. @@ -1133,7 +1866,7 @@ -- Scheme Procedure: current-progspace This function returns the program space of the currently selected inferior. There is always a current progspace, this never returns - '#f'. *Note Inferiors and Programs::. + '#f'. *Note Inferiors Connections and Programs::. -- Scheme Procedure: progspaces Return a list of all the progspaces currently known to GDB. @@ -2333,19 +3066,33 @@ Return the size of the read buffer of '<gdb:memory-port>' MEMORY-PORT. + This procedure is deprecated and will be removed in GDB 11. It + returns 0 when using Guile 2.2 or later. + -- Scheme Procedure: set-memory-port-read-buffer-size! memory-port size Set the size of the read buffer of '<gdb:memory-port>' MEMORY-PORT to SIZE. The result is unspecified. + This procedure is deprecated and will be removed in GDB 11. When + GDB is built with Guile 2.2 or later, you can call 'setvbuf' + instead (*note 'setvbuf': (guile)Buffering.). + -- Scheme Procedure: memory-port-write-buffer-size memory-port Return the size of the write buffer of '<gdb:memory-port>' MEMORY-PORT. + This procedure is deprecated and will be removed in GDB 11. It + returns 0 when GDB is built with Guile 2.2 or later. + -- Scheme Procedure: set-memory-port-write-buffer-size! memory-port size Set the size of the write buffer of '<gdb:memory-port>' MEMORY-PORT to SIZE. The result is unspecified. + This procedure is deprecated and will be removed in GDB 11. When + GDB is built with Guile 2.2 or later, you can call 'setvbuf' + instead. + A memory port is closed like any other port, with 'close-port'. Combined with Guile's 'bytevectors', memory ports provide a lot of @@ -2597,7 +3344,7 @@  File: gdb.info, Node: Auto-loading extensions, Next: Multiple Extension Languages, Prev: Guile, Up: Extending GDB -23.4 Auto-loading extensions +23.4 Auto-Loading Extensions ============================ GDB provides two mechanisms for automatically loading extensions when a @@ -2626,7 +3373,7 @@  File: gdb.info, Node: objfile-gdbdotext file, Next: dotdebug_gdb_scripts section, Up: Auto-loading extensions -23.4.1 The 'OBJFILE-gdb.EXT' file +23.4.1 The 'OBJFILE-gdb.EXT' File --------------------------------- When a new object file is read, GDB looks for a file named @@ -2648,7 +3395,11 @@ language. If this file does not exist, then GDB will look for SCRIPT-NAME file -in all of the directories as specified below. +in all of the directories as specified below. (On MS-Windows/MS-DOS, +the drive letter of the executable's leading directories is converted to +a one-letter subdirectory, i.e. 'd:/usr/bin/' is converted to +'/d/usr/bin/', because Windows filesystems disallow colons in file +names.) Note that loading of these files requires an accordingly configured 'auto-load safe-path' (*note Auto-loading safe path::). @@ -2700,7 +3451,7 @@  File: gdb.info, Node: dotdebug_gdb_scripts section, Next: Which flavor to choose?, Prev: objfile-gdbdotext file, Up: Auto-loading extensions -23.4.2 The '.debug_gdb_scripts' section +23.4.2 The '.debug_gdb_scripts' Section --------------------------------------- For systems using file formats like ELF and COFF, when GDB loads a new @@ -2793,7 +3544,7 @@  File: gdb.info, Node: Which flavor to choose?, Prev: dotdebug_gdb_scripts section, Up: Auto-loading extensions -23.4.3 Which flavor to choose? +23.4.3 Which Flavor to Choose? ------------------------------ Given the multiple ways of auto-loading extensions, it might not always @@ -2846,7 +3597,7 @@ generally do not interfere with each other. There are some things to be aware of, however. -23.5.1 Python comes first +23.5.1 Python Comes First ------------------------- Python was GDB's first extension language, and to avoid breaking @@ -2863,7 +3614,7 @@  File: gdb.info, Node: Aliases, Prev: Multiple Extension Languages, Up: Extending GDB -23.6 Creating new spellings of existing commands +23.6 Creating New Spellings of Existing Commands ================================================ It is often useful to define alternate spellings of existing commands. @@ -2881,7 +3632,7 @@ You can define a new alias with the 'alias' command. -'alias [-a] [--] ALIAS = COMMAND' +'alias [-a] [--] ALIAS = COMMAND [DEFAULT-ARGS...]' ALIAS specifies the name of the new alias. Each word of ALIAS must consist of letters, numbers, dashes and underscores. @@ -2889,13 +3640,27 @@ COMMAND specifies the name of an existing command that is being aliased. + COMMAND can also be the name of an existing alias. In this case, +COMMAND cannot be an alias that has default arguments. + The '-a' option specifies that the new alias is an abbreviation of -the command. Abbreviations are not shown in command lists displayed by -the 'help' command. +the command. Abbreviations are not used in command completion. The '--' option specifies the end of options, and is useful when ALIAS begins with a dash. + You can specify DEFAULT-ARGS for your alias. These DEFAULT-ARGS will +be automatically added before the alias arguments typed explicitly on +the command line. + + For example, the below defines an alias 'btfullall' that shows all +local variables and all frame arguments: + (gdb) alias btfullall = backtrace -full -frame-arguments all + + For more information about DEFAULT-ARGS, see *note Automatically +prepend default arguments to user-defined aliases: Command aliases +default args. + Here is a simple example showing how to make an abbreviation of a command so that there is less to type. Suppose you were tired of typing 'disas', the current shortest unambiguous abbreviation of the @@ -3107,6 +3872,8 @@ * assembly and registers. + These are the standard layouts, but other layouts can be defined. + A status line above the command window shows the following information: @@ -3279,7 +4046,7 @@  File: gdb.info, Node: TUI Commands, Next: TUI Configuration, Prev: TUI Single Key Mode, Up: TUI -25.4 TUI-specific Commands +25.4 TUI-Specific Commands ========================== The TUI has specific commands to control the text windows. These @@ -3304,11 +4071,59 @@ 'info win' List and give the size of all displayed windows. +'tui new-layout NAME WINDOW WEIGHT [WINDOW WEIGHT...]' + Create a new TUI layout. The new layout will be named NAME, and + can be accessed using the 'layout' command (see below). + + Each WINDOW parameter is either the name of a window to display, or + a window description. The windows will be displayed from top to + bottom in the order listed. + + The names of the windows are the same as the ones given to the + 'focus' command (see below); additional, the 'status' window can be + specified. Note that, because it is of fixed height, the weight + assigned to the status window is of no importance. It is + conventional to use '0' here. + + A window description looks a bit like an invocation of 'tui + new-layout', and is of the form {['-horizontal']WINDOW WEIGHT + [WINDOW WEIGHT...]}. + + This specifies a sub-layout. If '-horizontal' is given, the + windows in this description will be arranged side-by-side, rather + than top-to-bottom. + + Each WEIGHT is an integer. It is the weight of this window + relative to all the other windows in the layout. These numbers are + used to calculate how much of the screen is given to each window. + + For example: + + (gdb) tui new-layout example src 1 regs 1 status 0 cmd 1 + + Here, the new layout is called 'example'. It shows the source and + register windows, followed by the status window, and then finally + the command window. The non-status windows all have the same + weight, so the terminal will be split into three roughly equal + sections. + + Here is a more complex example, showing a horizontal layout: + + (gdb) tui new-layout example {-horizontal src 1 asm 1} 2 status 0 cmd 1 + + This will result in side-by-side source and assembly windows; with + the status and command window being beneath these, filling the + entire width of the terminal. Because they have weight 2, the + source and assembly windows will be twice the height of the command + window. + 'layout NAME' - Changes which TUI windows are displayed. In each layout the - command window is always displayed, the NAME parameter controls - which additional windows are displayed, and can be any of the - following: + Changes which TUI windows are displayed. The NAME parameter + controls which layout is shown. It can be either one of the + built-in layout names, or the name of a layout defined by the user + using 'tui new-layout'. + + The built-in layouts are as follows: 'next' Display the next layout. @@ -3734,7 +4549,7 @@  File: gdb.info, Node: Context management, Next: Asynchronous and non-stop modes, Up: GDB/MI General Design -27.1.1 Context management +27.1.1 Context Management ------------------------- 27.1.1.1 Threads and Frames @@ -3808,7 +4623,7 @@  File: gdb.info, Node: Asynchronous and non-stop modes, Next: Thread groups, Prev: Context management, Up: GDB/MI General Design -27.1.2 Asynchronous command execution and non-stop mode +27.1.2 Asynchronous Command Execution and Non-Stop Mode ------------------------------------------------------- On some targets, GDB is capable of processing MI commands even while the @@ -3867,7 +4682,7 @@  File: gdb.info, Node: Thread groups, Prev: Asynchronous and non-stop modes, Up: GDB/MI General Design -27.1.3 Thread groups +27.1.3 Thread Groups -------------------- GDB may be used to debug several processes at the same time. On some @@ -3902,10 +4717,10 @@ '-list-thread-groups --available'. In general, the content of a thread group may be only retrieved only after attaching to that thread group. - Thread groups are related to inferiors (*note Inferiors and -Programs::). Each inferior corresponds to a thread group of a special -type 'process', and some additional operations are permitted on such -thread groups. + Thread groups are related to inferiors (*note Inferiors Connections +and Programs::). Each inferior corresponds to a thread group of a +special type 'process', and some additional operations are permitted on +such thread groups.  File: gdb.info, Node: GDB/MI Command Syntax, Next: GDB/MI Compatibility with CLI, Prev: GDB/MI General Design, Up: GDB/MI @@ -4153,10 +4968,9 @@ launching GDB (e.g. '--interpreter=mi2') to make sure they get an interpreter with the MI version they expect. - The following table gives a summary of the the released versions of -the MI interface: the version number, the version of GDB in which it -first appeared and the breaking changes compared to the previous -version. + The following table gives a summary of the released versions of the +MI interface: the version number, the version of GDB in which it first +appeared and the breaking changes compared to the previous version. MI GDB Breaking changes versionversion @@ -4296,9 +5110,9 @@ '*running,thread-id="THREAD"' The target is now running. The THREAD field can be the global - thread ID of the the thread that is now running, and it can be - 'all' if all threads are running. The frontend should assume that - no interaction with a running thread is possible after this + thread ID of the thread that is now running, and it can be 'all' if + all threads are running. The frontend should assume that no + interaction with a running thread is possible after this notification is produced. The frontend should not assume that this notification is output only once for any command. GDB may emit this notification several times, either for different threads, @@ -7219,7 +8033,7 @@ In the next subsection we describe each operation in detail and suggest how it can be used. -Description And Use of Operations on Variable Objects +Description and Use of Operations on Variable Objects ----------------------------------------------------- The '-enable-pretty-printing' Command @@ -7794,7 +8608,7 @@ -var-set-update-range V 1 2 ^done -The '-var-set-visualizer' command +The '-var-set-visualizer' Command --------------------------------- Synopsis @@ -7846,618 +8660,3 @@ -var-set-visualizer V "lambda val: SomeClass()" ^done - -File: gdb.info, Node: GDB/MI Data Manipulation, Next: GDB/MI Tracepoint Commands, Prev: GDB/MI Variable Objects, Up: GDB/MI - -27.16 GDB/MI Data Manipulation -============================== - -This section describes the GDB/MI commands that manipulate data: examine -memory and registers, evaluate expressions, etc. - - For details about what an addressable memory unit is, *note -addressable memory unit::. - -The '-data-disassemble' Command -------------------------------- - -Synopsis -........ - - -data-disassemble - [ -s START-ADDR -e END-ADDR ] - | [ -a ADDR ] - | [ -f FILENAME -l LINENUM [ -n LINES ] ] - -- MODE - -Where: - -'START-ADDR' - is the beginning address (or '$pc') -'END-ADDR' - is the end address -'ADDR' - is an address anywhere within (or the name of) the function to - disassemble. If an address is specified, the whole function - surrounding that address will be disassembled. If a name is - specified, the whole function with that name will be disassembled. -'FILENAME' - is the name of the file to disassemble -'LINENUM' - is the line number to disassemble around -'LINES' - is the number of disassembly lines to be produced. If it is -1, - the whole function will be disassembled, in case no END-ADDR is - specified. If END-ADDR is specified as a non-zero value, and LINES - is lower than the number of disassembly lines between START-ADDR - and END-ADDR, only LINES lines are displayed; if LINES is higher - than the number of lines between START-ADDR and END-ADDR, only the - lines up to END-ADDR are displayed. -'MODE' - is one of: - * 0 disassembly only - * 1 mixed source and disassembly (deprecated) - * 2 disassembly with raw opcodes - * 3 mixed source and disassembly with raw opcodes (deprecated) - * 4 mixed source and disassembly - * 5 mixed source and disassembly with raw opcodes - - Modes 1 and 3 are deprecated. The output is "source centric" which - hasn't proved useful in practice. *Note Machine Code::, for a - discussion of the difference between '/m' and '/s' output of the - 'disassemble' command. - -Result -...... - -The result of the '-data-disassemble' command will be a list named -'asm_insns', the contents of this list depend on the MODE used with the -'-data-disassemble' command. - - For modes 0 and 2 the 'asm_insns' list contains tuples with the -following fields: - -'address' - The address at which this instruction was disassembled. - -'func-name' - The name of the function this instruction is within. - -'offset' - The decimal offset in bytes from the start of 'func-name'. - -'inst' - The text disassembly for this 'address'. - -'opcodes' - This field is only present for modes 2, 3 and 5. This contains the - raw opcode bytes for the 'inst' field. - - For modes 1, 3, 4 and 5 the 'asm_insns' list contains tuples named -'src_and_asm_line', each of which has the following fields: - -'line' - The line number within 'file'. - -'file' - The file name from the compilation unit. This might be an absolute - file name or a relative file name depending on the compile command - used. - -'fullname' - Absolute file name of 'file'. It is converted to a canonical form - using the source file search path (*note Specifying Source - Directories: Source Path.) and after resolving all the symbolic - links. - - If the source file is not found this field will contain the path as - present in the debug information. - -'line_asm_insn' - This is a list of tuples containing the disassembly for 'line' in - 'file'. The fields of each tuple are the same as for - '-data-disassemble' in MODE 0 and 2, so 'address', 'func-name', - 'offset', 'inst', and optionally 'opcodes'. - - Note that whatever included in the 'inst' field, is not manipulated -directly by GDB/MI, i.e., it is not possible to adjust its format. - -GDB Command -........... - -The corresponding GDB command is 'disassemble'. - -Example -....... - -Disassemble from the current value of '$pc' to '$pc + 20': - - (gdb) - -data-disassemble -s $pc -e "$pc + 20" -- 0 - ^done, - asm_insns=[ - {address="0x000107c0",func-name="main",offset="4", - inst="mov 2, %o0"}, - {address="0x000107c4",func-name="main",offset="8", - inst="sethi %hi(0x11800), %o2"}, - {address="0x000107c8",func-name="main",offset="12", - inst="or %o2, 0x140, %o1\t! 0x11940 <_lib_version+8>"}, - {address="0x000107cc",func-name="main",offset="16", - inst="sethi %hi(0x11800), %o2"}, - {address="0x000107d0",func-name="main",offset="20", - inst="or %o2, 0x168, %o4\t! 0x11968 <_lib_version+48>"}] - (gdb) - - Disassemble the whole 'main' function. Line 32 is part of 'main'. - - -data-disassemble -f basics.c -l 32 -- 0 - ^done,asm_insns=[ - {address="0x000107bc",func-name="main",offset="0", - inst="save %sp, -112, %sp"}, - {address="0x000107c0",func-name="main",offset="4", - inst="mov 2, %o0"}, - {address="0x000107c4",func-name="main",offset="8", - inst="sethi %hi(0x11800), %o2"}, - [...] - {address="0x0001081c",func-name="main",offset="96",inst="ret "}, - {address="0x00010820",func-name="main",offset="100",inst="restore "}] - (gdb) - - Disassemble 3 instructions from the start of 'main': - - (gdb) - -data-disassemble -f basics.c -l 32 -n 3 -- 0 - ^done,asm_insns=[ - {address="0x000107bc",func-name="main",offset="0", - inst="save %sp, -112, %sp"}, - {address="0x000107c0",func-name="main",offset="4", - inst="mov 2, %o0"}, - {address="0x000107c4",func-name="main",offset="8", - inst="sethi %hi(0x11800), %o2"}] - (gdb) - - Disassemble 3 instructions from the start of 'main' in mixed mode: - - (gdb) - -data-disassemble -f basics.c -l 32 -n 3 -- 1 - ^done,asm_insns=[ - src_and_asm_line={line="31", - file="../../../src/gdb/testsuite/gdb.mi/basics.c", - fullname="/absolute/path/to/src/gdb/testsuite/gdb.mi/basics.c", - line_asm_insn=[{address="0x000107bc", - func-name="main",offset="0",inst="save %sp, -112, %sp"}]}, - src_and_asm_line={line="32", - file="../../../src/gdb/testsuite/gdb.mi/basics.c", - fullname="/absolute/path/to/src/gdb/testsuite/gdb.mi/basics.c", - line_asm_insn=[{address="0x000107c0", - func-name="main",offset="4",inst="mov 2, %o0"}, - {address="0x000107c4",func-name="main",offset="8", - inst="sethi %hi(0x11800), %o2"}]}] - (gdb) - -The '-data-evaluate-expression' Command ---------------------------------------- - -Synopsis -........ - - -data-evaluate-expression EXPR - - Evaluate EXPR as an expression. The expression could contain an -inferior function call. The function call will execute synchronously. -If the expression contains spaces, it must be enclosed in double quotes. - -GDB Command -........... - -The corresponding GDB commands are 'print', 'output', and 'call'. In -'gdbtk' only, there's a corresponding 'gdb_eval' command. - -Example -....... - -In the following example, the numbers that precede the commands are the -"tokens" described in *note GDB/MI Command Syntax: GDB/MI Command -Syntax. Notice how GDB/MI returns the same tokens in its output. - - 211-data-evaluate-expression A - 211^done,value="1" - (gdb) - 311-data-evaluate-expression &A - 311^done,value="0xefffeb7c" - (gdb) - 411-data-evaluate-expression A+3 - 411^done,value="4" - (gdb) - 511-data-evaluate-expression "A + 3" - 511^done,value="4" - (gdb) - -The '-data-list-changed-registers' Command ------------------------------------------- - -Synopsis -........ - - -data-list-changed-registers - - Display a list of the registers that have changed. - -GDB Command -........... - -GDB doesn't have a direct analog for this command; 'gdbtk' has the -corresponding command 'gdb_changed_register_list'. - -Example -....... - -On a PPC MBX board: - - (gdb) - -exec-continue - ^running - - (gdb) - *stopped,reason="breakpoint-hit",disp="keep",bkptno="1",frame={ - func="main",args=[],file="try.c",fullname="/home/foo/bar/try.c", - line="5",arch="powerpc"} - (gdb) - -data-list-changed-registers - ^done,changed-registers=["0","1","2","4","5","6","7","8","9", - "10","11","13","14","15","16","17","18","19","20","21","22","23", - "24","25","26","27","28","30","31","64","65","66","67","69"] - (gdb) - -The '-data-list-register-names' Command ---------------------------------------- - -Synopsis -........ - - -data-list-register-names [ ( REGNO )+ ] - - Show a list of register names for the current target. If no -arguments are given, it shows a list of the names of all the registers. -If integer numbers are given as arguments, it will print a list of the -names of the registers corresponding to the arguments. To ensure -consistency between a register name and its number, the output list may -include empty register names. - -GDB Command -........... - -GDB does not have a command which corresponds to -'-data-list-register-names'. In 'gdbtk' there is a corresponding -command 'gdb_regnames'. - -Example -....... - -For the PPC MBX board: - (gdb) - -data-list-register-names - ^done,register-names=["r0","r1","r2","r3","r4","r5","r6","r7", - "r8","r9","r10","r11","r12","r13","r14","r15","r16","r17","r18", - "r19","r20","r21","r22","r23","r24","r25","r26","r27","r28","r29", - "r30","r31","f0","f1","f2","f3","f4","f5","f6","f7","f8","f9", - "f10","f11","f12","f13","f14","f15","f16","f17","f18","f19","f20", - "f21","f22","f23","f24","f25","f26","f27","f28","f29","f30","f31", - "", "pc","ps","cr","lr","ctr","xer"] - (gdb) - -data-list-register-names 1 2 3 - ^done,register-names=["r1","r2","r3"] - (gdb) - -The '-data-list-register-values' Command ----------------------------------------- - -Synopsis -........ - - -data-list-register-values - [ --skip-unavailable ] FMT [ ( REGNO )*] - - Display the registers' contents. The format according to which the -registers' contents are to be returned is given by FMT, followed by an -optional list of numbers specifying the registers to display. A missing -list of numbers indicates that the contents of all the registers must be -returned. The '--skip-unavailable' option indicates that only the -available registers are to be returned. - - Allowed formats for FMT are: - -'x' - Hexadecimal -'o' - Octal -'t' - Binary -'d' - Decimal -'r' - Raw -'N' - Natural - -GDB Command -........... - -The corresponding GDB commands are 'info reg', 'info all-reg', and (in -'gdbtk') 'gdb_fetch_registers'. - -Example -....... - -For a PPC MBX board (note: line breaks are for readability only, they -don't appear in the actual output): - - (gdb) - -data-list-register-values r 64 65 - ^done,register-values=[{number="64",value="0xfe00a300"}, - {number="65",value="0x00029002"}] - (gdb) - -data-list-register-values x - ^done,register-values=[{number="0",value="0xfe0043c8"}, - {number="1",value="0x3fff88"},{number="2",value="0xfffffffe"}, - {number="3",value="0x0"},{number="4",value="0xa"}, - {number="5",value="0x3fff68"},{number="6",value="0x3fff58"}, - {number="7",value="0xfe011e98"},{number="8",value="0x2"}, - {number="9",value="0xfa202820"},{number="10",value="0xfa202808"}, - {number="11",value="0x1"},{number="12",value="0x0"}, - {number="13",value="0x4544"},{number="14",value="0xffdfffff"}, - {number="15",value="0xffffffff"},{number="16",value="0xfffffeff"}, - {number="17",value="0xefffffed"},{number="18",value="0xfffffffe"}, - {number="19",value="0xffffffff"},{number="20",value="0xffffffff"}, - {number="21",value="0xffffffff"},{number="22",value="0xfffffff7"}, - {number="23",value="0xffffffff"},{number="24",value="0xffffffff"}, - {number="25",value="0xffffffff"},{number="26",value="0xfffffffb"}, - {number="27",value="0xffffffff"},{number="28",value="0xf7bfffff"}, - {number="29",value="0x0"},{number="30",value="0xfe010000"}, - {number="31",value="0x0"},{number="32",value="0x0"}, - {number="33",value="0x0"},{number="34",value="0x0"}, - {number="35",value="0x0"},{number="36",value="0x0"}, - {number="37",value="0x0"},{number="38",value="0x0"}, - {number="39",value="0x0"},{number="40",value="0x0"}, - {number="41",value="0x0"},{number="42",value="0x0"}, - {number="43",value="0x0"},{number="44",value="0x0"}, - {number="45",value="0x0"},{number="46",value="0x0"}, - {number="47",value="0x0"},{number="48",value="0x0"}, - {number="49",value="0x0"},{number="50",value="0x0"}, - {number="51",value="0x0"},{number="52",value="0x0"}, - {number="53",value="0x0"},{number="54",value="0x0"}, - {number="55",value="0x0"},{number="56",value="0x0"}, - {number="57",value="0x0"},{number="58",value="0x0"}, - {number="59",value="0x0"},{number="60",value="0x0"}, - {number="61",value="0x0"},{number="62",value="0x0"}, - {number="63",value="0x0"},{number="64",value="0xfe00a300"}, - {number="65",value="0x29002"},{number="66",value="0x202f04b5"}, - {number="67",value="0xfe0043b0"},{number="68",value="0xfe00b3e4"}, - {number="69",value="0x20002b03"}] - (gdb) - -The '-data-read-memory' Command -------------------------------- - -This command is deprecated, use '-data-read-memory-bytes' instead. - -Synopsis -........ - - -data-read-memory [ -o BYTE-OFFSET ] - ADDRESS WORD-FORMAT WORD-SIZE - NR-ROWS NR-COLS [ ASCHAR ] - -where: - -'ADDRESS' - An expression specifying the address of the first memory word to be - read. Complex expressions containing embedded white space should - be quoted using the C convention. - -'WORD-FORMAT' - The format to be used to print the memory words. The notation is - the same as for GDB's 'print' command (*note Output Formats: Output - Formats.). - -'WORD-SIZE' - The size of each memory word in bytes. - -'NR-ROWS' - The number of rows in the output table. - -'NR-COLS' - The number of columns in the output table. - -'ASCHAR' - If present, indicates that each row should include an ASCII dump. - The value of ASCHAR is used as a padding character when a byte is - not a member of the printable ASCII character set (printable ASCII - characters are those whose code is between 32 and 126, - inclusively). - -'BYTE-OFFSET' - An offset to add to the ADDRESS before fetching memory. - - This command displays memory contents as a table of NR-ROWS by -NR-COLS words, each word being WORD-SIZE bytes. In total, 'NR-ROWS * -NR-COLS * WORD-SIZE' bytes are read (returned as 'total-bytes'). Should -less than the requested number of bytes be returned by the target, the -missing words are identified using 'N/A'. The number of bytes read from -the target is returned in 'nr-bytes' and the starting address used to -read memory in 'addr'. - - The address of the next/previous row or page is available in -'next-row' and 'prev-row', 'next-page' and 'prev-page'. - -GDB Command -........... - -The corresponding GDB command is 'x'. 'gdbtk' has 'gdb_get_mem' memory -read command. - -Example -....... - -Read six bytes of memory starting at 'bytes+6' but then offset by '-6' -bytes. Format as three rows of two columns. One byte per word. -Display each word in hex. - - (gdb) - 9-data-read-memory -o -6 -- bytes+6 x 1 3 2 - 9^done,addr="0x00001390",nr-bytes="6",total-bytes="6", - next-row="0x00001396",prev-row="0x0000138e",next-page="0x00001396", - prev-page="0x0000138a",memory=[ - {addr="0x00001390",data=["0x00","0x01"]}, - {addr="0x00001392",data=["0x02","0x03"]}, - {addr="0x00001394",data=["0x04","0x05"]}] - (gdb) - - Read two bytes of memory starting at address 'shorts + 64' and -display as a single word formatted in decimal. - - (gdb) - 5-data-read-memory shorts+64 d 2 1 1 - 5^done,addr="0x00001510",nr-bytes="2",total-bytes="2", - next-row="0x00001512",prev-row="0x0000150e", - next-page="0x00001512",prev-page="0x0000150e",memory=[ - {addr="0x00001510",data=["128"]}] - (gdb) - - Read thirty two bytes of memory starting at 'bytes+16' and format as -eight rows of four columns. Include a string encoding with 'x' used as -the non-printable character. - - (gdb) - 4-data-read-memory bytes+16 x 1 8 4 x - 4^done,addr="0x000013a0",nr-bytes="32",total-bytes="32", - next-row="0x000013c0",prev-row="0x0000139c", - next-page="0x000013c0",prev-page="0x00001380",memory=[ - {addr="0x000013a0",data=["0x10","0x11","0x12","0x13"],ascii="xxxx"}, - {addr="0x000013a4",data=["0x14","0x15","0x16","0x17"],ascii="xxxx"}, - {addr="0x000013a8",data=["0x18","0x19","0x1a","0x1b"],ascii="xxxx"}, - {addr="0x000013ac",data=["0x1c","0x1d","0x1e","0x1f"],ascii="xxxx"}, - {addr="0x000013b0",data=["0x20","0x21","0x22","0x23"],ascii=" !\"#"}, - {addr="0x000013b4",data=["0x24","0x25","0x26","0x27"],ascii="$%&'"}, - {addr="0x000013b8",data=["0x28","0x29","0x2a","0x2b"],ascii="()*+"}, - {addr="0x000013bc",data=["0x2c","0x2d","0x2e","0x2f"],ascii=",-./"}] - (gdb) - -The '-data-read-memory-bytes' Command -------------------------------------- - -Synopsis -........ - - -data-read-memory-bytes [ -o OFFSET ] - ADDRESS COUNT - -where: - -'ADDRESS' - An expression specifying the address of the first addressable - memory unit to be read. Complex expressions containing embedded - white space should be quoted using the C convention. - -'COUNT' - The number of addressable memory units to read. This should be an - integer literal. - -'OFFSET' - The offset relative to ADDRESS at which to start reading. This - should be an integer literal. This option is provided so that a - frontend is not required to first evaluate address and then perform - address arithmetics itself. - - This command attempts to read all accessible memory regions in the -specified range. First, all regions marked as unreadable in the memory -map (if one is defined) will be skipped. *Note Memory Region -Attributes::. Second, GDB will attempt to read the remaining regions. -For each one, if reading full region results in an errors, GDB will try -to read a subset of the region. - - In general, every single memory unit in the region may be readable or -not, and the only way to read every readable unit is to try a read at -every address, which is not practical. Therefore, GDB will attempt to -read all accessible memory units at either beginning or the end of the -region, using a binary division scheme. This heuristic works well for -reading across a memory map boundary. Note that if a region has a -readable range that is neither at the beginning or the end, GDB will not -read it. - - The result record (*note GDB/MI Result Records::) that is output of -the command includes a field named 'memory' whose content is a list of -tuples. Each tuple represent a successfully read memory block and has -the following fields: - -'begin' - The start address of the memory block, as hexadecimal literal. - -'end' - The end address of the memory block, as hexadecimal literal. - -'offset' - The offset of the memory block, as hexadecimal literal, relative to - the start address passed to '-data-read-memory-bytes'. - -'contents' - The contents of the memory block, in hex. - -GDB Command -........... - -The corresponding GDB command is 'x'. - -Example -....... - - (gdb) - -data-read-memory-bytes &a 10 - ^done,memory=[{begin="0xbffff154",offset="0x00000000", - end="0xbffff15e", - contents="01000000020000000300"}] - (gdb) - -The '-data-write-memory-bytes' Command --------------------------------------- - -Synopsis -........ - - -data-write-memory-bytes ADDRESS CONTENTS - -data-write-memory-bytes ADDRESS CONTENTS [COUNT] - -where: - -'ADDRESS' - An expression specifying the address of the first addressable - memory unit to be written. Complex expressions containing embedded - white space should be quoted using the C convention. - -'CONTENTS' - The hex-encoded data to write. It is an error if CONTENTS does not - represent an integral number of addressable memory units. - -'COUNT' - Optional argument indicating the number of addressable memory units - to be written. If COUNT is greater than CONTENTS' length, GDB will - repeatedly write CONTENTS until it fills COUNT memory units. - -GDB Command -........... - -There's no corresponding GDB command. - -Example -....... - - (gdb) - -data-write-memory-bytes &a "aabbccdd" - ^done - (gdb) - - (gdb) - -data-write-memory-bytes &a "aabbccdd" 16e - ^done - (gdb) - diff -Nru gdb-9.1/gdb/doc/gdb.info-6 gdb-10.2/gdb/doc/gdb.info-6 --- gdb-9.1/gdb/doc/gdb.info-6 2020-02-08 12:54:18.000000000 +0000 +++ gdb-10.2/gdb/doc/gdb.info-6 2021-04-25 04:10:43.000000000 +0000 @@ -1,6 +1,6 @@ -This is gdb.info, produced by makeinfo version 6.5 from gdb.texinfo. +This is gdb.info, produced by makeinfo version 6.7 from gdb.texinfo. -Copyright (C) 1988-2020 Free Software Foundation, Inc. +Copyright (C) 1988-2021 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or @@ -21,9 +21,9 @@ This file documents the GNU debugger GDB. This is the Tenth Edition, of 'Debugging with GDB: the GNU -Source-Level Debugger' for GDB (GDB) Version 9.1. +Source-Level Debugger' for GDB (GDB) Version 10.2. - Copyright (C) 1988-2020 Free Software Foundation, Inc. + Copyright (C) 1988-2021 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or @@ -37,6 +37,621 @@ developing GNU and promoting software freedom."  +File: gdb.info, Node: GDB/MI Data Manipulation, Next: GDB/MI Tracepoint Commands, Prev: GDB/MI Variable Objects, Up: GDB/MI + +27.16 GDB/MI Data Manipulation +============================== + +This section describes the GDB/MI commands that manipulate data: examine +memory and registers, evaluate expressions, etc. + + For details about what an addressable memory unit is, *note +addressable memory unit::. + +The '-data-disassemble' Command +------------------------------- + +Synopsis +........ + + -data-disassemble + [ -s START-ADDR -e END-ADDR ] + | [ -a ADDR ] + | [ -f FILENAME -l LINENUM [ -n LINES ] ] + -- MODE + +Where: + +'START-ADDR' + is the beginning address (or '$pc') +'END-ADDR' + is the end address +'ADDR' + is an address anywhere within (or the name of) the function to + disassemble. If an address is specified, the whole function + surrounding that address will be disassembled. If a name is + specified, the whole function with that name will be disassembled. +'FILENAME' + is the name of the file to disassemble +'LINENUM' + is the line number to disassemble around +'LINES' + is the number of disassembly lines to be produced. If it is -1, + the whole function will be disassembled, in case no END-ADDR is + specified. If END-ADDR is specified as a non-zero value, and LINES + is lower than the number of disassembly lines between START-ADDR + and END-ADDR, only LINES lines are displayed; if LINES is higher + than the number of lines between START-ADDR and END-ADDR, only the + lines up to END-ADDR are displayed. +'MODE' + is one of: + * 0 disassembly only + * 1 mixed source and disassembly (deprecated) + * 2 disassembly with raw opcodes + * 3 mixed source and disassembly with raw opcodes (deprecated) + * 4 mixed source and disassembly + * 5 mixed source and disassembly with raw opcodes + + Modes 1 and 3 are deprecated. The output is "source centric" which + hasn't proved useful in practice. *Note Machine Code::, for a + discussion of the difference between '/m' and '/s' output of the + 'disassemble' command. + +Result +...... + +The result of the '-data-disassemble' command will be a list named +'asm_insns', the contents of this list depend on the MODE used with the +'-data-disassemble' command. + + For modes 0 and 2 the 'asm_insns' list contains tuples with the +following fields: + +'address' + The address at which this instruction was disassembled. + +'func-name' + The name of the function this instruction is within. + +'offset' + The decimal offset in bytes from the start of 'func-name'. + +'inst' + The text disassembly for this 'address'. + +'opcodes' + This field is only present for modes 2, 3 and 5. This contains the + raw opcode bytes for the 'inst' field. + + For modes 1, 3, 4 and 5 the 'asm_insns' list contains tuples named +'src_and_asm_line', each of which has the following fields: + +'line' + The line number within 'file'. + +'file' + The file name from the compilation unit. This might be an absolute + file name or a relative file name depending on the compile command + used. + +'fullname' + Absolute file name of 'file'. It is converted to a canonical form + using the source file search path (*note Specifying Source + Directories: Source Path.) and after resolving all the symbolic + links. + + If the source file is not found this field will contain the path as + present in the debug information. + +'line_asm_insn' + This is a list of tuples containing the disassembly for 'line' in + 'file'. The fields of each tuple are the same as for + '-data-disassemble' in MODE 0 and 2, so 'address', 'func-name', + 'offset', 'inst', and optionally 'opcodes'. + + Note that whatever included in the 'inst' field, is not manipulated +directly by GDB/MI, i.e., it is not possible to adjust its format. + +GDB Command +........... + +The corresponding GDB command is 'disassemble'. + +Example +....... + +Disassemble from the current value of '$pc' to '$pc + 20': + + (gdb) + -data-disassemble -s $pc -e "$pc + 20" -- 0 + ^done, + asm_insns=[ + {address="0x000107c0",func-name="main",offset="4", + inst="mov 2, %o0"}, + {address="0x000107c4",func-name="main",offset="8", + inst="sethi %hi(0x11800), %o2"}, + {address="0x000107c8",func-name="main",offset="12", + inst="or %o2, 0x140, %o1\t! 0x11940 <_lib_version+8>"}, + {address="0x000107cc",func-name="main",offset="16", + inst="sethi %hi(0x11800), %o2"}, + {address="0x000107d0",func-name="main",offset="20", + inst="or %o2, 0x168, %o4\t! 0x11968 <_lib_version+48>"}] + (gdb) + + Disassemble the whole 'main' function. Line 32 is part of 'main'. + + -data-disassemble -f basics.c -l 32 -- 0 + ^done,asm_insns=[ + {address="0x000107bc",func-name="main",offset="0", + inst="save %sp, -112, %sp"}, + {address="0x000107c0",func-name="main",offset="4", + inst="mov 2, %o0"}, + {address="0x000107c4",func-name="main",offset="8", + inst="sethi %hi(0x11800), %o2"}, + [...] + {address="0x0001081c",func-name="main",offset="96",inst="ret "}, + {address="0x00010820",func-name="main",offset="100",inst="restore "}] + (gdb) + + Disassemble 3 instructions from the start of 'main': + + (gdb) + -data-disassemble -f basics.c -l 32 -n 3 -- 0 + ^done,asm_insns=[ + {address="0x000107bc",func-name="main",offset="0", + inst="save %sp, -112, %sp"}, + {address="0x000107c0",func-name="main",offset="4", + inst="mov 2, %o0"}, + {address="0x000107c4",func-name="main",offset="8", + inst="sethi %hi(0x11800), %o2"}] + (gdb) + + Disassemble 3 instructions from the start of 'main' in mixed mode: + + (gdb) + -data-disassemble -f basics.c -l 32 -n 3 -- 1 + ^done,asm_insns=[ + src_and_asm_line={line="31", + file="../../../src/gdb/testsuite/gdb.mi/basics.c", + fullname="/absolute/path/to/src/gdb/testsuite/gdb.mi/basics.c", + line_asm_insn=[{address="0x000107bc", + func-name="main",offset="0",inst="save %sp, -112, %sp"}]}, + src_and_asm_line={line="32", + file="../../../src/gdb/testsuite/gdb.mi/basics.c", + fullname="/absolute/path/to/src/gdb/testsuite/gdb.mi/basics.c", + line_asm_insn=[{address="0x000107c0", + func-name="main",offset="4",inst="mov 2, %o0"}, + {address="0x000107c4",func-name="main",offset="8", + inst="sethi %hi(0x11800), %o2"}]}] + (gdb) + +The '-data-evaluate-expression' Command +--------------------------------------- + +Synopsis +........ + + -data-evaluate-expression EXPR + + Evaluate EXPR as an expression. The expression could contain an +inferior function call. The function call will execute synchronously. +If the expression contains spaces, it must be enclosed in double quotes. + +GDB Command +........... + +The corresponding GDB commands are 'print', 'output', and 'call'. In +'gdbtk' only, there's a corresponding 'gdb_eval' command. + +Example +....... + +In the following example, the numbers that precede the commands are the +"tokens" described in *note GDB/MI Command Syntax: GDB/MI Command +Syntax. Notice how GDB/MI returns the same tokens in its output. + + 211-data-evaluate-expression A + 211^done,value="1" + (gdb) + 311-data-evaluate-expression &A + 311^done,value="0xefffeb7c" + (gdb) + 411-data-evaluate-expression A+3 + 411^done,value="4" + (gdb) + 511-data-evaluate-expression "A + 3" + 511^done,value="4" + (gdb) + +The '-data-list-changed-registers' Command +------------------------------------------ + +Synopsis +........ + + -data-list-changed-registers + + Display a list of the registers that have changed. + +GDB Command +........... + +GDB doesn't have a direct analog for this command; 'gdbtk' has the +corresponding command 'gdb_changed_register_list'. + +Example +....... + +On a PPC MBX board: + + (gdb) + -exec-continue + ^running + + (gdb) + *stopped,reason="breakpoint-hit",disp="keep",bkptno="1",frame={ + func="main",args=[],file="try.c",fullname="/home/foo/bar/try.c", + line="5",arch="powerpc"} + (gdb) + -data-list-changed-registers + ^done,changed-registers=["0","1","2","4","5","6","7","8","9", + "10","11","13","14","15","16","17","18","19","20","21","22","23", + "24","25","26","27","28","30","31","64","65","66","67","69"] + (gdb) + +The '-data-list-register-names' Command +--------------------------------------- + +Synopsis +........ + + -data-list-register-names [ ( REGNO )+ ] + + Show a list of register names for the current target. If no +arguments are given, it shows a list of the names of all the registers. +If integer numbers are given as arguments, it will print a list of the +names of the registers corresponding to the arguments. To ensure +consistency between a register name and its number, the output list may +include empty register names. + +GDB Command +........... + +GDB does not have a command which corresponds to +'-data-list-register-names'. In 'gdbtk' there is a corresponding +command 'gdb_regnames'. + +Example +....... + +For the PPC MBX board: + (gdb) + -data-list-register-names + ^done,register-names=["r0","r1","r2","r3","r4","r5","r6","r7", + "r8","r9","r10","r11","r12","r13","r14","r15","r16","r17","r18", + "r19","r20","r21","r22","r23","r24","r25","r26","r27","r28","r29", + "r30","r31","f0","f1","f2","f3","f4","f5","f6","f7","f8","f9", + "f10","f11","f12","f13","f14","f15","f16","f17","f18","f19","f20", + "f21","f22","f23","f24","f25","f26","f27","f28","f29","f30","f31", + "", "pc","ps","cr","lr","ctr","xer"] + (gdb) + -data-list-register-names 1 2 3 + ^done,register-names=["r1","r2","r3"] + (gdb) + +The '-data-list-register-values' Command +---------------------------------------- + +Synopsis +........ + + -data-list-register-values + [ --skip-unavailable ] FMT [ ( REGNO )*] + + Display the registers' contents. The format according to which the +registers' contents are to be returned is given by FMT, followed by an +optional list of numbers specifying the registers to display. A missing +list of numbers indicates that the contents of all the registers must be +returned. The '--skip-unavailable' option indicates that only the +available registers are to be returned. + + Allowed formats for FMT are: + +'x' + Hexadecimal +'o' + Octal +'t' + Binary +'d' + Decimal +'r' + Raw +'N' + Natural + +GDB Command +........... + +The corresponding GDB commands are 'info reg', 'info all-reg', and (in +'gdbtk') 'gdb_fetch_registers'. + +Example +....... + +For a PPC MBX board (note: line breaks are for readability only, they +don't appear in the actual output): + + (gdb) + -data-list-register-values r 64 65 + ^done,register-values=[{number="64",value="0xfe00a300"}, + {number="65",value="0x00029002"}] + (gdb) + -data-list-register-values x + ^done,register-values=[{number="0",value="0xfe0043c8"}, + {number="1",value="0x3fff88"},{number="2",value="0xfffffffe"}, + {number="3",value="0x0"},{number="4",value="0xa"}, + {number="5",value="0x3fff68"},{number="6",value="0x3fff58"}, + {number="7",value="0xfe011e98"},{number="8",value="0x2"}, + {number="9",value="0xfa202820"},{number="10",value="0xfa202808"}, + {number="11",value="0x1"},{number="12",value="0x0"}, + {number="13",value="0x4544"},{number="14",value="0xffdfffff"}, + {number="15",value="0xffffffff"},{number="16",value="0xfffffeff"}, + {number="17",value="0xefffffed"},{number="18",value="0xfffffffe"}, + {number="19",value="0xffffffff"},{number="20",value="0xffffffff"}, + {number="21",value="0xffffffff"},{number="22",value="0xfffffff7"}, + {number="23",value="0xffffffff"},{number="24",value="0xffffffff"}, + {number="25",value="0xffffffff"},{number="26",value="0xfffffffb"}, + {number="27",value="0xffffffff"},{number="28",value="0xf7bfffff"}, + {number="29",value="0x0"},{number="30",value="0xfe010000"}, + {number="31",value="0x0"},{number="32",value="0x0"}, + {number="33",value="0x0"},{number="34",value="0x0"}, + {number="35",value="0x0"},{number="36",value="0x0"}, + {number="37",value="0x0"},{number="38",value="0x0"}, + {number="39",value="0x0"},{number="40",value="0x0"}, + {number="41",value="0x0"},{number="42",value="0x0"}, + {number="43",value="0x0"},{number="44",value="0x0"}, + {number="45",value="0x0"},{number="46",value="0x0"}, + {number="47",value="0x0"},{number="48",value="0x0"}, + {number="49",value="0x0"},{number="50",value="0x0"}, + {number="51",value="0x0"},{number="52",value="0x0"}, + {number="53",value="0x0"},{number="54",value="0x0"}, + {number="55",value="0x0"},{number="56",value="0x0"}, + {number="57",value="0x0"},{number="58",value="0x0"}, + {number="59",value="0x0"},{number="60",value="0x0"}, + {number="61",value="0x0"},{number="62",value="0x0"}, + {number="63",value="0x0"},{number="64",value="0xfe00a300"}, + {number="65",value="0x29002"},{number="66",value="0x202f04b5"}, + {number="67",value="0xfe0043b0"},{number="68",value="0xfe00b3e4"}, + {number="69",value="0x20002b03"}] + (gdb) + +The '-data-read-memory' Command +------------------------------- + +This command is deprecated, use '-data-read-memory-bytes' instead. + +Synopsis +........ + + -data-read-memory [ -o BYTE-OFFSET ] + ADDRESS WORD-FORMAT WORD-SIZE + NR-ROWS NR-COLS [ ASCHAR ] + +where: + +'ADDRESS' + An expression specifying the address of the first memory word to be + read. Complex expressions containing embedded white space should + be quoted using the C convention. + +'WORD-FORMAT' + The format to be used to print the memory words. The notation is + the same as for GDB's 'print' command (*note Output Formats: Output + Formats.). + +'WORD-SIZE' + The size of each memory word in bytes. + +'NR-ROWS' + The number of rows in the output table. + +'NR-COLS' + The number of columns in the output table. + +'ASCHAR' + If present, indicates that each row should include an ASCII dump. + The value of ASCHAR is used as a padding character when a byte is + not a member of the printable ASCII character set (printable ASCII + characters are those whose code is between 32 and 126, + inclusively). + +'BYTE-OFFSET' + An offset to add to the ADDRESS before fetching memory. + + This command displays memory contents as a table of NR-ROWS by +NR-COLS words, each word being WORD-SIZE bytes. In total, 'NR-ROWS * +NR-COLS * WORD-SIZE' bytes are read (returned as 'total-bytes'). Should +less than the requested number of bytes be returned by the target, the +missing words are identified using 'N/A'. The number of bytes read from +the target is returned in 'nr-bytes' and the starting address used to +read memory in 'addr'. + + The address of the next/previous row or page is available in +'next-row' and 'prev-row', 'next-page' and 'prev-page'. + +GDB Command +........... + +The corresponding GDB command is 'x'. 'gdbtk' has 'gdb_get_mem' memory +read command. + +Example +....... + +Read six bytes of memory starting at 'bytes+6' but then offset by '-6' +bytes. Format as three rows of two columns. One byte per word. +Display each word in hex. + + (gdb) + 9-data-read-memory -o -6 -- bytes+6 x 1 3 2 + 9^done,addr="0x00001390",nr-bytes="6",total-bytes="6", + next-row="0x00001396",prev-row="0x0000138e",next-page="0x00001396", + prev-page="0x0000138a",memory=[ + {addr="0x00001390",data=["0x00","0x01"]}, + {addr="0x00001392",data=["0x02","0x03"]}, + {addr="0x00001394",data=["0x04","0x05"]}] + (gdb) + + Read two bytes of memory starting at address 'shorts + 64' and +display as a single word formatted in decimal. + + (gdb) + 5-data-read-memory shorts+64 d 2 1 1 + 5^done,addr="0x00001510",nr-bytes="2",total-bytes="2", + next-row="0x00001512",prev-row="0x0000150e", + next-page="0x00001512",prev-page="0x0000150e",memory=[ + {addr="0x00001510",data=["128"]}] + (gdb) + + Read thirty two bytes of memory starting at 'bytes+16' and format as +eight rows of four columns. Include a string encoding with 'x' used as +the non-printable character. + + (gdb) + 4-data-read-memory bytes+16 x 1 8 4 x + 4^done,addr="0x000013a0",nr-bytes="32",total-bytes="32", + next-row="0x000013c0",prev-row="0x0000139c", + next-page="0x000013c0",prev-page="0x00001380",memory=[ + {addr="0x000013a0",data=["0x10","0x11","0x12","0x13"],ascii="xxxx"}, + {addr="0x000013a4",data=["0x14","0x15","0x16","0x17"],ascii="xxxx"}, + {addr="0x000013a8",data=["0x18","0x19","0x1a","0x1b"],ascii="xxxx"}, + {addr="0x000013ac",data=["0x1c","0x1d","0x1e","0x1f"],ascii="xxxx"}, + {addr="0x000013b0",data=["0x20","0x21","0x22","0x23"],ascii=" !\"#"}, + {addr="0x000013b4",data=["0x24","0x25","0x26","0x27"],ascii="$%&'"}, + {addr="0x000013b8",data=["0x28","0x29","0x2a","0x2b"],ascii="()*+"}, + {addr="0x000013bc",data=["0x2c","0x2d","0x2e","0x2f"],ascii=",-./"}] + (gdb) + +The '-data-read-memory-bytes' Command +------------------------------------- + +Synopsis +........ + + -data-read-memory-bytes [ -o OFFSET ] + ADDRESS COUNT + +where: + +'ADDRESS' + An expression specifying the address of the first addressable + memory unit to be read. Complex expressions containing embedded + white space should be quoted using the C convention. + +'COUNT' + The number of addressable memory units to read. This should be an + integer literal. + +'OFFSET' + The offset relative to ADDRESS at which to start reading. This + should be an integer literal. This option is provided so that a + frontend is not required to first evaluate address and then perform + address arithmetics itself. + + This command attempts to read all accessible memory regions in the +specified range. First, all regions marked as unreadable in the memory +map (if one is defined) will be skipped. *Note Memory Region +Attributes::. Second, GDB will attempt to read the remaining regions. +For each one, if reading full region results in an errors, GDB will try +to read a subset of the region. + + In general, every single memory unit in the region may be readable or +not, and the only way to read every readable unit is to try a read at +every address, which is not practical. Therefore, GDB will attempt to +read all accessible memory units at either beginning or the end of the +region, using a binary division scheme. This heuristic works well for +reading across a memory map boundary. Note that if a region has a +readable range that is neither at the beginning or the end, GDB will not +read it. + + The result record (*note GDB/MI Result Records::) that is output of +the command includes a field named 'memory' whose content is a list of +tuples. Each tuple represent a successfully read memory block and has +the following fields: + +'begin' + The start address of the memory block, as hexadecimal literal. + +'end' + The end address of the memory block, as hexadecimal literal. + +'offset' + The offset of the memory block, as hexadecimal literal, relative to + the start address passed to '-data-read-memory-bytes'. + +'contents' + The contents of the memory block, in hex. + +GDB Command +........... + +The corresponding GDB command is 'x'. + +Example +....... + + (gdb) + -data-read-memory-bytes &a 10 + ^done,memory=[{begin="0xbffff154",offset="0x00000000", + end="0xbffff15e", + contents="01000000020000000300"}] + (gdb) + +The '-data-write-memory-bytes' Command +-------------------------------------- + +Synopsis +........ + + -data-write-memory-bytes ADDRESS CONTENTS + -data-write-memory-bytes ADDRESS CONTENTS [COUNT] + +where: + +'ADDRESS' + An expression specifying the address of the first addressable + memory unit to be written. Complex expressions containing embedded + white space should be quoted using the C convention. + +'CONTENTS' + The hex-encoded data to write. It is an error if CONTENTS does not + represent an integral number of addressable memory units. + +'COUNT' + Optional argument indicating the number of addressable memory units + to be written. If COUNT is greater than CONTENTS' length, GDB will + repeatedly write CONTENTS until it fills COUNT memory units. + +GDB Command +........... + +There's no corresponding GDB command. + +Example +....... + + (gdb) + -data-write-memory-bytes &a "aabbccdd" + ^done + (gdb) + + (gdb) + -data-write-memory-bytes &a "aabbccdd" 16e + ^done + (gdb) + + File: gdb.info, Node: GDB/MI Tracepoint Commands, Next: GDB/MI Symbol Query, Prev: GDB/MI Data Manipulation, Up: GDB/MI 27.17 GDB/MI Tracepoint Commands @@ -1872,12 +2487,12 @@ -add-inferior - Creates a new inferior (*note Inferiors and Programs::). The created -inferior is not associated with any executable. Such association may be -established with the '-file-exec-and-symbols' command (*note GDB/MI File -Commands::). The command response has a single field, 'inferior', whose -value is the identifier of the thread group corresponding to the new -inferior. + Creates a new inferior (*note Inferiors Connections and Programs::). +The created inferior is not associated with any executable. Such +association may be established with the '-file-exec-and-symbols' command +(*note GDB/MI File Commands::). The command response has a single +field, 'inferior', whose value is the identifier of the thread group +corresponding to the new inferior. Example ------- @@ -2095,7 +2710,7 @@  File: gdb.info, Node: Annotations Overview, Next: Server Prefix, Up: Annotations -28.1 What is an Annotation? +28.1 What Is an Annotation? =========================== Annotations start with a newline character, two 'control-z' characters, @@ -2345,7 +2960,7 @@ depend on the language).  -File: gdb.info, Node: JIT Interface, Next: In-Process Agent, Prev: Annotations, Up: Top +File: gdb.info, Node: JIT Interface, Next: In-process Agent, Prev: Annotations, Up: Top 29 JIT Compilation Interface **************************** @@ -2584,9 +3199,9 @@ the target's address space.  -File: gdb.info, Node: In-Process Agent, Next: GDB Bugs, Prev: JIT Interface, Up: Top +File: gdb.info, Node: In-process Agent, Next: GDB Bugs, Prev: JIT Interface, Up: Top -30 In-Process Agent +30 In-process Agent ******************* The traditional debugging model is conceptually low-speed, but works @@ -2605,7 +3220,7 @@ Therefore, traditional debugging model is too intrusive to reproduce some bugs. In order to reduce the interference with the program, we can -reduce the number of operations performed by debugger. The "In-Process +reduce the number of operations performed by debugger. The "In-process Agent", a shared library, is running within the same process with inferior, and is able to perform some debugging operations itself. As a result, debugger is only involved when necessary, and performance of @@ -2640,16 +3255,16 @@ * Menu: -* In-Process Agent Protocol:: +* In-process Agent Protocol::  -File: gdb.info, Node: In-Process Agent Protocol, Up: In-Process Agent +File: gdb.info, Node: In-process Agent Protocol, Up: In-process Agent -30.1 In-Process Agent Protocol +30.1 In-process Agent Protocol ============================== The in-process agent is able to communicate with both GDB and GDBserver -(*note In-Process Agent::). This section documents the protocol used +(*note In-process Agent::). This section documents the protocol used for communications between GDB or GDBserver and the IPA. In general, GDB or GDBserver sends commands (*note IPA Protocol Commands::) and data to in-process agent, and then in-process agent replies back with the return @@ -2664,7 +3279,7 @@ * IPA Protocol Commands::  -File: gdb.info, Node: IPA Protocol Objects, Next: IPA Protocol Commands, Up: In-Process Agent Protocol +File: gdb.info, Node: IPA Protocol Objects, Next: IPA Protocol Commands, Up: In-process Agent Protocol 30.1.1 IPA Protocol Objects --------------------------- @@ -2751,7 +3366,7 @@ *note tracepoint action object::  -File: gdb.info, Node: IPA Protocol Commands, Prev: IPA Protocol Objects, Up: In-Process Agent Protocol +File: gdb.info, Node: IPA Protocol Commands, Prev: IPA Protocol Objects, Up: In-process Agent Protocol 30.1.2 IPA Protocol Commands ---------------------------- @@ -2795,7 +3410,7 @@ Asks in-process agent to unprobe the marker at ADDRESS.  -File: gdb.info, Node: GDB Bugs, Next: Command Line Editing, Prev: In-Process Agent, Up: Top +File: gdb.info, Node: GDB Bugs, Next: Command Line Editing, Prev: In-process Agent, Up: Top 31 Reporting Bugs in GDB ************************ @@ -2852,23 +3467,8 @@ You can find contact information for many support companies and individuals in the file 'etc/SERVICE' in the GNU Emacs distribution. - In any event, we also recommend that you submit bug reports for GDB. -The preferred method is to submit them directly using GDB's Bugs web -page (http://www.gnu.org/software/gdb/bugs/). Alternatively, the e-mail -gateway <bug-gdb@gnu.org> can be used. - - *Do not send bug reports to 'info-gdb', or to 'help-gdb', or to any -newsgroups.* Most users of GDB do not want to receive bug reports. -Those that do have arranged to receive 'bug-gdb'. - - The mailing list 'bug-gdb' has a newsgroup 'gnu.gdb.bug' which serves -as a repeater. The mailing list and the newsgroup carry exactly the -same messages. Often people think of posting bug reports to the -newsgroup instead of mailing them. This appears to work, but it has one -problem which can be crucial: a newsgroup posting often lacks a mail -path back to the sender. Thus, if we need to ask for more information, -we may be unable to reach you. For this reason, it is better to send -bug reports to the mailing list. + In any event, we also recommend that you submit bug reports for GDB +to <https://www.gnu.org/software/gdb/bugs/>. The fundamental principle of reporting bugs usefully is this: *report all the facts*. If you are not sure whether to state a fact or leave it @@ -4704,7 +5304,7 @@ GDB includes an already formatted copy of the on-line Info version of this manual in the 'gdb' subdirectory. The main Info file is -'gdb-9.1/gdb/gdb.info', and it refers to subordinate files matching +'gdb-10.2/gdb/gdb.info', and it refers to subordinate files matching 'gdb.info*' in the same directory. If necessary, you can print out these files, or read them with any editor; but they are easier to read using the 'info' subsystem in GNU Emacs or the standalone 'info' @@ -4714,8 +5314,8 @@ Info formatting programs, such as 'texinfo-format-buffer' or 'makeinfo'. If you have 'makeinfo' installed, and are in the top level GDB source -directory ('gdb-9.1', in the case of version 9.1), you can make the Info -file by typing: +directory ('gdb-10.2', in the case of version 10.2), you can make the +Info file by typing: cd gdb make gdb.info @@ -4740,7 +5340,7 @@ If you have TeX and a DVI printer program installed, you can typeset and print this manual. First switch to the 'gdb' subdirectory of the -main source directory (for example, to 'gdb-9.1/gdb') and type: +main source directory (for example, to 'gdb-10.2/gdb') and type: make gdb.dvi @@ -4748,7 +5348,7 @@ ---------- Footnotes ---------- - (1) In 'gdb-9.1/gdb/refcard.ps' of the version 9.1 release. + (1) In 'gdb-10.2/gdb/refcard.ps' of the version 10.2 release.  File: gdb.info, Node: Installing GDB, Next: Maintenance Commands, Prev: Formatting Documentation, Up: Top @@ -4899,35 +5499,35 @@ a single directory, whose name is usually composed by appending the version number to 'gdb'. - For example, the GDB version 9.1 distribution is in the 'gdb-9.1' + For example, the GDB version 10.2 distribution is in the 'gdb-10.2' directory. That directory contains: -'gdb-9.1/configure (and supporting files)' +'gdb-10.2/configure (and supporting files)' script for configuring GDB and all its supporting libraries -'gdb-9.1/gdb' +'gdb-10.2/gdb' the source specific to GDB itself -'gdb-9.1/bfd' +'gdb-10.2/bfd' source for the Binary File Descriptor library -'gdb-9.1/include' +'gdb-10.2/include' GNU include files -'gdb-9.1/libiberty' +'gdb-10.2/libiberty' source for the '-liberty' free software library -'gdb-9.1/opcodes' +'gdb-10.2/opcodes' source for the library of opcode tables and disassemblers -'gdb-9.1/readline' +'gdb-10.2/readline' source for the GNU command-line interface There may be other subdirectories as well. The simplest way to configure and build GDB is to run 'configure' from the 'gdb-VERSION-NUMBER' source directory, which in this example is -the 'gdb-9.1' directory. +the 'gdb-10.2' directory. First switch to the 'gdb-VERSION-NUMBER' source directory if you are not already in it; then run 'configure'. Pass the identifier for the @@ -4935,7 +5535,7 @@ For example: - cd gdb-9.1 + cd gdb-10.2 ./configure make @@ -4983,13 +5583,13 @@ directory. If the path to 'configure' would be the same as the argument to '--srcdir', you can leave out the '--srcdir' option; it is assumed.) - For example, with version 9.1, you can build GDB in a separate + For example, with version 10.2, you can build GDB in a separate directory for a Sun 4 like this: - cd gdb-9.1 + cd gdb-10.2 mkdir ../gdb-sun4 cd ../gdb-sun4 - ../gdb-9.1/configure + ../gdb-10.2/configure make When 'configure' builds a configuration using a remote source @@ -5000,8 +5600,8 @@ Make sure that your path to the 'configure' script has just one instance of 'gdb' in it. If your path to 'configure' looks like -'../gdb-9.1/gdb/configure', you are configuring only one subdirectory of -GDB, not the whole package. This leads to build errors about missing +'../gdb-10.2/gdb/configure', you are configuring only one subdirectory +of GDB, not the whole package. This leads to build errors about missing include files such as 'bfd/bfd.h'. One popular reason to build several GDB configurations in separate @@ -5016,8 +5616,8 @@ The 'Makefile' that 'configure' generates in each source directory also runs recursively. If you type 'make' in a source directory such as -'gdb-9.1' (or in a separate configured directory configured with -'--srcdir=DIRNAME/gdb-9.1'), you will build all the required libraries, +'gdb-10.2' (or in a separate configured directory configured with +'--srcdir=DIRNAME/gdb-10.2'), you will build all the required libraries, and then build GDB. When you have multiple hosts or targets configured in separate @@ -5061,8 +5661,8 @@ % sh config.sub i986v Invalid configuration `i986v': machine `i986v' not recognized -'config.sub' is also distributed in the GDB source directory ('gdb-9.1', -for version 9.1). +'config.sub' is also distributed in the GDB source directory +('gdb-10.2', for version 10.2).  File: gdb.info, Node: Configure Options, Next: System-wide configuration, Prev: Config Names, Up: Installing GDB @@ -5149,6 +5749,15 @@ Use the curses library instead of the termcap library, for text-mode terminal operations. +'--with-debuginfod' + Build GDB with libdebuginfod, the debuginfod client library. Used + to automatically fetch source files and separate debug files from + debuginfod servers using the associated executable's build ID. + Enabled by default if libdebuginfod is installed and found at + configure time. debuginfod is packaged with elfutils, starting + with version 0.178. You can get the latest version from + 'https://sourceware.org/elfutils/'. + '--with-libunwind-ia64' Use the libunwind library for unwinding function call stack on ia64 target platforms. See http://www.nongnu.org/libunwind/index.html @@ -5274,7 +5883,7 @@  File: gdb.info, Node: System-wide configuration, Prev: Configure Options, Up: Installing GDB -C.6 System-wide configuration and settings +C.6 System-Wide Configuration and Settings ========================================== GDB can be configured to have a system-wide init file and a system-wide @@ -5332,7 +5941,7 @@  File: gdb.info, Node: System-wide Configuration Scripts, Up: System-wide configuration -C.6.1 Installed System-wide Configuration Scripts +C.6.1 Installed System-Wide Configuration Scripts ------------------------------------------------- The 'system-gdbinit' directory, located inside the data-directory (as @@ -5385,7 +5994,7 @@ Translate the given format string and list of argument expressions into remote agent bytecodes and display them as a disassembled list. This command is useful for debugging the agent version of - dynamic printf (*note Dynamic Printf::). + dynamic printf (*note Dynamic printf::). 'maint info breakpoints' Using the same format as 'info breakpoints', display both the @@ -5595,6 +6204,14 @@ built again. This command is used by developers after they add or modify XML target descriptions. +'maint print xml-tdesc [FILE]' + Print the target description (*note Target Descriptions::) as an + XML file. By default print the target description for the current + target, but if the optional argument FILE is provided, then that + file is read in by GDB and then used to produce the description. + The FILE should be an XML document, of the form described in *note + Target Description Format::. + 'maint check xml-descriptions DIR' Check that the target descriptions dynamically created by GDB equal the descriptions created from XML files found in DIR. @@ -5607,6 +6224,12 @@ Note that parts of the test may be skipped on some platforms when debugging core files. +'maint print core-file-backed-mappings' + Print the file-backed mappings which were loaded from a core file + note. This output represents state internal to GDB and should be + similar to the mappings displayed by the 'info proc mappings' + command. + 'maint print dummy-frames' Prints the contents of GDB's internal dummy-frame stack. @@ -5788,10 +6411,10 @@ capable hosts, GDB may use multiple threads to speed up certain CPU-intensive operations, such as demangling symbol names. While the number of threads used by GDB may vary, this command can be - used to set an upper bound on this number. The default is '0' - (disabled). A value of 'unlimited' lets GDB choose a reasonable - number. Note that this only controls worker threads started by GDB - itself; libraries used by GDB may start threads of their own. + used to set an upper bound on this number. The default is + 'unlimited', which lets GDB choose a reasonable number. Note that + this only controls worker threads started by GDB itself; libraries + used by GDB may start threads of their own. 'maint set profile' 'maint show profile' @@ -6102,10 +6725,12 @@ should be returned. That way it is possible to extend the protocol. A newer GDB can tell if a packet is supported based on that response. - At a minimum, a stub is required to support the 'g' and 'G' commands -for register access, and the 'm' and 'M' commands for memory access. -Stubs that only control single-threaded targets can implement run -control with the 'c' (continue), and 's' (step) commands. Stubs that + At a minimum, a stub is required to support the '?' command to tell +GDB the reason for halting, 'g' and 'G' commands for register access, +and the 'm' and 'M' commands for memory access. Stubs that only control +single-threaded targets can implement run control with the 'c' +(continue) command, and if the target architecture supports +hardware-assisted single-stepping, the 's' (step) command. Stubs that support multi-threading targets should support the 'vCont' command. All other commands are optional. @@ -7023,1460 +7648,3 @@ expected to be continued. *Note File-I/O Remote Protocol Extension::, for more details. - -File: gdb.info, Node: General Query Packets, Next: Architecture-Specific Protocol Details, Prev: Stop Reply Packets, Up: Remote Protocol - -E.4 General Query Packets -========================= - -Packets starting with 'q' are "general query packets"; packets starting -with 'Q' are "general set packets". General query and set packets are a -semi-unified form for retrieving and sending information to and from the -stub. - - The initial letter of a query or set packet is followed by a name -indicating what sort of thing the packet applies to. For example, GDB -may use a 'qSymbol' packet to exchange symbol definitions with the stub. -These packet names follow some conventions: - - * The name must not contain commas, colons or semicolons. - * Most GDB query and set packets have a leading upper case letter. - * The names of custom vendor packets should use a company prefix, in - lower case, followed by a period. For example, packets designed at - the Acme Corporation might begin with 'qacme.foo' (for querying - foos) or 'Qacme.bar' (for setting bars). - - The name of a query or set packet should be separated from any -parameters by a ':'; the parameters themselves should be separated by -',' or ';'. Stubs must be careful to match the full packet name, and -check for a separator or the end of the packet, in case two packet names -share a common prefix. New packets should not begin with 'qC', 'qP', or -'qL'(1). - - Like the descriptions of the other packets, each description here has -a template showing the packet's overall syntax, followed by an -explanation of the packet's meaning. We include spaces in some of the -templates for clarity; these are not part of the packet's syntax. No -GDB packet uses spaces to separate its components. - - Here are the currently defined query and set packets: - -'QAgent:1' -'QAgent:0' - Turn on or off the agent as a helper to perform some debugging - operations delegated from GDB (*note Control Agent::). - -'QAllow:OP:VAL...' - Specify which operations GDB expects to request of the target, as a - semicolon-separated list of operation name and value pairs. - Possible values for OP include 'WriteReg', 'WriteMem', - 'InsertBreak', 'InsertTrace', 'InsertFastTrace', and 'Stop'. VAL - is either 0, indicating that GDB will not request the operation, or - 1, indicating that it may. (The target can then use this to set up - its own internals optimally, for instance if the debugger never - expects to insert breakpoints, it may not need to install its own - trap handler.) - -'qC' - Return the current thread ID. - - Reply: - 'QC THREAD-ID' - Where THREAD-ID is a thread ID as documented in *note - thread-id syntax::. - '(anything else)' - Any other reply implies the old thread ID. - -'qCRC:ADDR,LENGTH' - Compute the CRC checksum of a block of memory using CRC-32 defined - in IEEE 802.3. The CRC is computed byte at a time, taking the most - significant bit of each byte first. The initial pattern code - '0xffffffff' is used to ensure leading zeros affect the CRC. - - _Note:_ This is the same CRC used in validating separate debug - files (*note Debugging Information in Separate Files: Separate - Debug Files.). However the algorithm is slightly different. When - validating separate debug files, the CRC is computed taking the - _least_ significant bit of each byte first, and the final result is - inverted to detect trailing zeros. - - Reply: - 'E NN' - An error (such as memory fault) - 'C CRC32' - The specified memory region's checksum is CRC32. - -'QDisableRandomization:VALUE' - Some target operating systems will randomize the virtual address - space of the inferior process as a security feature, but provide a - feature to disable such randomization, e.g. to allow for a more - deterministic debugging experience. On such systems, this packet - with a VALUE of 1 directs the target to disable address space - randomization for processes subsequently started via 'vRun' - packets, while a packet with a VALUE of 0 tells the target to - enable address space randomization. - - This packet is only available in extended mode (*note extended - mode::). - - Reply: - 'OK' - The request succeeded. - - 'E NN' - An error occurred. The error number NN is given as hex - digits. - - '' - An empty reply indicates that 'QDisableRandomization' is not - supported by the stub. - - This packet is not probed by default; the remote stub must request - it, by supplying an appropriate 'qSupported' response (*note - qSupported::). This should only be done on targets that actually - support disabling address space randomization. - -'QStartupWithShell:VALUE' - On UNIX-like targets, it is possible to start the inferior using a - shell program. This is the default behavior on both GDB and - 'gdbserver' (*note set startup-with-shell::). This packet is used - to inform 'gdbserver' whether it should start the inferior using a - shell or not. - - If VALUE is '0', 'gdbserver' will not use a shell to start the - inferior. If VALUE is '1', 'gdbserver' will use a shell to start - the inferior. All other values are considered an error. - - This packet is only available in extended mode (*note extended - mode::). - - Reply: - 'OK' - The request succeeded. - - 'E NN' - An error occurred. The error number NN is given as hex - digits. - - This packet is not probed by default; the remote stub must request - it, by supplying an appropriate 'qSupported' response (*note - qSupported::). This should only be done on targets that actually - support starting the inferior using a shell. - - Use of this packet is controlled by the 'set startup-with-shell' - command; *note set startup-with-shell::. - -'QEnvironmentHexEncoded:HEX-VALUE' - On UNIX-like targets, it is possible to set environment variables - that will be passed to the inferior during the startup process. - This packet is used to inform 'gdbserver' of an environment - variable that has been defined by the user on GDB (*note set - environment::). - - The packet is composed by HEX-VALUE, an hex encoded representation - of the NAME=VALUE format representing an environment variable. The - name of the environment variable is represented by NAME, and the - value to be assigned to the environment variable is represented by - VALUE. If the variable has no value (i.e., the value is 'null'), - then VALUE will not be present. - - This packet is only available in extended mode (*note extended - mode::). - - Reply: - 'OK' - The request succeeded. - - This packet is not probed by default; the remote stub must request - it, by supplying an appropriate 'qSupported' response (*note - qSupported::). This should only be done on targets that actually - support passing environment variables to the starting inferior. - - This packet is related to the 'set environment' command; *note set - environment::. - -'QEnvironmentUnset:HEX-VALUE' - On UNIX-like targets, it is possible to unset environment variables - before starting the inferior in the remote target. This packet is - used to inform 'gdbserver' of an environment variable that has been - unset by the user on GDB (*note unset environment::). - - The packet is composed by HEX-VALUE, an hex encoded representation - of the name of the environment variable to be unset. - - This packet is only available in extended mode (*note extended - mode::). - - Reply: - 'OK' - The request succeeded. - - This packet is not probed by default; the remote stub must request - it, by supplying an appropriate 'qSupported' response (*note - qSupported::). This should only be done on targets that actually - support passing environment variables to the starting inferior. - - This packet is related to the 'unset environment' command; *note - unset environment::. - -'QEnvironmentReset' - On UNIX-like targets, this packet is used to reset the state of - environment variables in the remote target before starting the - inferior. In this context, reset means unsetting all environment - variables that were previously set by the user (i.e., were not - initially present in the environment). It is sent to 'gdbserver' - before the 'QEnvironmentHexEncoded' (*note - QEnvironmentHexEncoded::) and the 'QEnvironmentUnset' (*note - QEnvironmentUnset::) packets. - - This packet is only available in extended mode (*note extended - mode::). - - Reply: - 'OK' - The request succeeded. - - This packet is not probed by default; the remote stub must request - it, by supplying an appropriate 'qSupported' response (*note - qSupported::). This should only be done on targets that actually - support passing environment variables to the starting inferior. - -'QSetWorkingDir:[DIRECTORY]' - This packet is used to inform the remote server of the intended - current working directory for programs that are going to be - executed. - - The packet is composed by DIRECTORY, an hex encoded representation - of the directory that the remote inferior will use as its current - working directory. If DIRECTORY is an empty string, the remote - server should reset the inferior's current working directory to its - original, empty value. - - This packet is only available in extended mode (*note extended - mode::). - - Reply: - 'OK' - The request succeeded. - -'qfThreadInfo' -'qsThreadInfo' - Obtain a list of all active thread IDs from the target (OS). Since - there may be too many active threads to fit into one reply packet, - this query works iteratively: it may require more than one - query/reply sequence to obtain the entire list of threads. The - first query of the sequence will be the 'qfThreadInfo' query; - subsequent queries in the sequence will be the 'qsThreadInfo' - query. - - NOTE: This packet replaces the 'qL' query (see below). - - Reply: - 'm THREAD-ID' - A single thread ID - 'm THREAD-ID,THREAD-ID...' - a comma-separated list of thread IDs - 'l' - (lower case letter 'L') denotes end of list. - - In response to each query, the target will reply with a list of one - or more thread IDs, separated by commas. GDB will respond to each - reply with a request for more thread ids (using the 'qs' form of - the query), until the target responds with 'l' (lower-case ell, for - "last"). Refer to *note thread-id syntax::, for the format of the - THREAD-ID fields. - - _Note: GDB will send the 'qfThreadInfo' query during the initial - connection with the remote target, and the very first thread ID - mentioned in the reply will be stopped by GDB in a subsequent - message. Therefore, the stub should ensure that the first thread - ID in the 'qfThreadInfo' reply is suitable for being stopped by - GDB._ - -'qGetTLSAddr:THREAD-ID,OFFSET,LM' - Fetch the address associated with thread local storage specified by - THREAD-ID, OFFSET, and LM. - - THREAD-ID is the thread ID associated with the thread for which to - fetch the TLS address. *Note thread-id syntax::. - - OFFSET is the (big endian, hex encoded) offset associated with the - thread local variable. (This offset is obtained from the debug - information associated with the variable.) - - LM is the (big endian, hex encoded) OS/ABI-specific encoding of the - load module associated with the thread local storage. For example, - a GNU/Linux system will pass the link map address of the shared - object associated with the thread local storage under - consideration. Other operating environments may choose to - represent the load module differently, so the precise meaning of - this parameter will vary. - - Reply: - 'XX...' - Hex encoded (big endian) bytes representing the address of the - thread local storage requested. - - 'E NN' - An error occurred. The error number NN is given as hex - digits. - - '' - An empty reply indicates that 'qGetTLSAddr' is not supported - by the stub. - -'qGetTIBAddr:THREAD-ID' - Fetch address of the Windows OS specific Thread Information Block. - - THREAD-ID is the thread ID associated with the thread. - - Reply: - 'XX...' - Hex encoded (big endian) bytes representing the linear address - of the thread information block. - - 'E NN' - An error occured. This means that either the thread was not - found, or the address could not be retrieved. - - '' - An empty reply indicates that 'qGetTIBAddr' is not supported - by the stub. - -'qL STARTFLAG THREADCOUNT NEXTTHREAD' - Obtain thread information from RTOS. Where: STARTFLAG (one hex - digit) is one to indicate the first query and zero to indicate a - subsequent query; THREADCOUNT (two hex digits) is the maximum - number of threads the response packet can contain; and NEXTTHREAD - (eight hex digits), for subsequent queries (STARTFLAG is zero), is - returned in the response as ARGTHREAD. - - Don't use this packet; use the 'qfThreadInfo' query instead (see - above). - - Reply: - 'qM COUNT DONE ARGTHREAD THREAD...' - Where: COUNT (two hex digits) is the number of threads being - returned; DONE (one hex digit) is zero to indicate more - threads and one indicates no further threads; ARGTHREADID - (eight hex digits) is NEXTTHREAD from the request packet; - THREAD... is a sequence of thread IDs, THREADID (eight hex - digits), from the target. See - 'remote.c:parse_threadlist_response()'. - -'qOffsets' - Get section offsets that the target used when relocating the - downloaded image. - - Reply: - 'Text=XXX;Data=YYY[;Bss=ZZZ]' - Relocate the 'Text' section by XXX from its original address. - Relocate the 'Data' section by YYY from its original address. - If the object file format provides segment information (e.g. - ELF 'PT_LOAD' program headers), GDB will relocate entire - segments by the supplied offsets. - - _Note: while a 'Bss' offset may be included in the response, - GDB ignores this and instead applies the 'Data' offset to the - 'Bss' section._ - - 'TextSeg=XXX[;DataSeg=YYY]' - Relocate the first segment of the object file, which - conventionally contains program code, to a starting address of - XXX. If 'DataSeg' is specified, relocate the second segment, - which conventionally contains modifiable data, to a starting - address of YYY. GDB will report an error if the object file - does not contain segment information, or does not contain at - least as many segments as mentioned in the reply. Extra - segments are kept at fixed offsets relative to the last - relocated segment. - -'qP MODE THREAD-ID' - Returns information on THREAD-ID. Where: MODE is a hex encoded 32 - bit mode; THREAD-ID is a thread ID (*note thread-id syntax::). - - Don't use this packet; use the 'qThreadExtraInfo' query instead - (see below). - - Reply: see 'remote.c:remote_unpack_thread_info_response()'. - -'QNonStop:1' -'QNonStop:0' - Enter non-stop ('QNonStop:1') or all-stop ('QNonStop:0') mode. - *Note Remote Non-Stop::, for more information. - - Reply: - 'OK' - The request succeeded. - - 'E NN' - An error occurred. The error number NN is given as hex - digits. - - '' - An empty reply indicates that 'QNonStop' is not supported by - the stub. - - This packet is not probed by default; the remote stub must request - it, by supplying an appropriate 'qSupported' response (*note - qSupported::). Use of this packet is controlled by the 'set - non-stop' command; *note Non-Stop Mode::. - -'QCatchSyscalls:1 [;SYSNO]...' -'QCatchSyscalls:0' - Enable ('QCatchSyscalls:1') or disable ('QCatchSyscalls:0') - catching syscalls from the inferior process. - - For 'QCatchSyscalls:1', each listed syscall SYSNO (encoded in hex) - should be reported to GDB. If no syscall SYSNO is listed, every - system call should be reported. - - Note that if a syscall not in the list is reported, GDB will still - filter the event according to its own list from all corresponding - 'catch syscall' commands. However, it is more efficient to only - report the requested syscalls. - - Multiple 'QCatchSyscalls:1' packets do not combine; any earlier - 'QCatchSyscalls:1' list is completely replaced by the new list. - - If the inferior process execs, the state of 'QCatchSyscalls' is - kept for the new process too. On targets where exec may affect - syscall numbers, for example with exec between 32 and 64-bit - processes, the client should send a new packet with the new syscall - list. - - Reply: - 'OK' - The request succeeded. - - 'E NN' - An error occurred. NN are hex digits. - - '' - An empty reply indicates that 'QCatchSyscalls' is not - supported by the stub. - - Use of this packet is controlled by the 'set remote catch-syscalls' - command (*note set remote catch-syscalls: Remote Configuration.). - This packet is not probed by default; the remote stub must request - it, by supplying an appropriate 'qSupported' response (*note - qSupported::). - -'QPassSignals: SIGNAL [;SIGNAL]...' - Each listed SIGNAL should be passed directly to the inferior - process. Signals are numbered identically to continue packets and - stop replies (*note Stop Reply Packets::). Each SIGNAL list item - should be strictly greater than the previous item. These signals - do not need to stop the inferior, or be reported to GDB. All other - signals should be reported to GDB. Multiple 'QPassSignals' packets - do not combine; any earlier 'QPassSignals' list is completely - replaced by the new list. This packet improves performance when - using 'handle SIGNAL nostop noprint pass'. - - Reply: - 'OK' - The request succeeded. - - 'E NN' - An error occurred. The error number NN is given as hex - digits. - - '' - An empty reply indicates that 'QPassSignals' is not supported - by the stub. - - Use of this packet is controlled by the 'set remote pass-signals' - command (*note set remote pass-signals: Remote Configuration.). - This packet is not probed by default; the remote stub must request - it, by supplying an appropriate 'qSupported' response (*note - qSupported::). - -'QProgramSignals: SIGNAL [;SIGNAL]...' - Each listed SIGNAL may be delivered to the inferior process. - Others should be silently discarded. - - In some cases, the remote stub may need to decide whether to - deliver a signal to the program or not without GDB involvement. - One example of that is while detaching -- the program's threads may - have stopped for signals that haven't yet had a chance of being - reported to GDB, and so the remote stub can use the signal list - specified by this packet to know whether to deliver or ignore those - pending signals. - - This does not influence whether to deliver a signal as requested by - a resumption packet (*note vCont packet::). - - Signals are numbered identically to continue packets and stop - replies (*note Stop Reply Packets::). Each SIGNAL list item should - be strictly greater than the previous item. Multiple - 'QProgramSignals' packets do not combine; any earlier - 'QProgramSignals' list is completely replaced by the new list. - - Reply: - 'OK' - The request succeeded. - - 'E NN' - An error occurred. The error number NN is given as hex - digits. - - '' - An empty reply indicates that 'QProgramSignals' is not - supported by the stub. - - Use of this packet is controlled by the 'set remote - program-signals' command (*note set remote program-signals: Remote - Configuration.). This packet is not probed by default; the remote - stub must request it, by supplying an appropriate 'qSupported' - response (*note qSupported::). - -'QThreadEvents:1' -'QThreadEvents:0' - - Enable ('QThreadEvents:1') or disable ('QThreadEvents:0') reporting - of thread create and exit events. *Note thread create event::, for - the reply specifications. For example, this is used in non-stop - mode when GDB stops a set of threads and synchronously waits for - the their corresponding stop replies. Without exit events, if one - of the threads exits, GDB would hang forever not knowing that it - should no longer expect a stop for that same thread. GDB does not - enable this feature unless the stub reports that it supports it by - including 'QThreadEvents+' in its 'qSupported' reply. - - Reply: - 'OK' - The request succeeded. - - 'E NN' - An error occurred. The error number NN is given as hex - digits. - - '' - An empty reply indicates that 'QThreadEvents' is not supported - by the stub. - - Use of this packet is controlled by the 'set remote thread-events' - command (*note set remote thread-events: Remote Configuration.). - -'qRcmd,COMMAND' - COMMAND (hex encoded) is passed to the local interpreter for - execution. Invalid commands should be reported using the output - string. Before the final result packet, the target may also - respond with a number of intermediate 'OOUTPUT' console output - packets. _Implementors should note that providing access to a - stubs's interpreter may have security implications_. - - Reply: - 'OK' - A command response with no output. - 'OUTPUT' - A command response with the hex encoded output string OUTPUT. - 'E NN' - Indicate a badly formed request. - '' - An empty reply indicates that 'qRcmd' is not recognized. - - (Note that the 'qRcmd' packet's name is separated from the command - by a ',', not a ':', contrary to the naming conventions above. - Please don't use this packet as a model for new packets.) - -'qSearch:memory:ADDRESS;LENGTH;SEARCH-PATTERN' - Search LENGTH bytes at ADDRESS for SEARCH-PATTERN. Both ADDRESS - and LENGTH are encoded in hex; SEARCH-PATTERN is a sequence of - bytes, also hex encoded. - - Reply: - '0' - The pattern was not found. - '1,address' - The pattern was found at ADDRESS. - 'E NN' - A badly formed request or an error was encountered while - searching memory. - '' - An empty reply indicates that 'qSearch:memory' is not - recognized. - -'QStartNoAckMode' - Request that the remote stub disable the normal '+'/'-' protocol - acknowledgments (*note Packet Acknowledgment::). - - Reply: - 'OK' - The stub has switched to no-acknowledgment mode. GDB - acknowledges this response, but neither the stub nor GDB shall - send or expect further '+'/'-' acknowledgments in the current - connection. - '' - An empty reply indicates that the stub does not support - no-acknowledgment mode. - -'qSupported [:GDBFEATURE [;GDBFEATURE]... ]' - Tell the remote stub about features supported by GDB, and query the - stub for features it supports. This packet allows GDB and the - remote stub to take advantage of each others' features. - 'qSupported' also consolidates multiple feature probes at startup, - to improve GDB performance--a single larger packet performs better - than multiple smaller probe packets on high-latency links. Some - features may enable behavior which must not be on by default, e.g. - because it would confuse older clients or stubs. Other features - may describe packets which could be automatically probed for, but - are not. These features must be reported before GDB will use them. - This "default unsupported" behavior is not appropriate for all - packets, but it helps to keep the initial connection time under - control with new versions of GDB which support increasing numbers - of packets. - - Reply: - 'STUBFEATURE [;STUBFEATURE]...' - The stub supports or does not support each returned - STUBFEATURE, depending on the form of each STUBFEATURE (see - below for the possible forms). - '' - An empty reply indicates that 'qSupported' is not recognized, - or that no features needed to be reported to GDB. - - The allowed forms for each feature (either a GDBFEATURE in the - 'qSupported' packet, or a STUBFEATURE in the response) are: - - 'NAME=VALUE' - The remote protocol feature NAME is supported, and associated - with the specified VALUE. The format of VALUE depends on the - feature, but it must not include a semicolon. - 'NAME+' - The remote protocol feature NAME is supported, and does not - need an associated value. - 'NAME-' - The remote protocol feature NAME is not supported. - 'NAME?' - The remote protocol feature NAME may be supported, and GDB - should auto-detect support in some other way when it is - needed. This form will not be used for GDBFEATURE - notifications, but may be used for STUBFEATURE responses. - - Whenever the stub receives a 'qSupported' request, the supplied set - of GDB features should override any previous request. This allows - GDB to put the stub in a known state, even if the stub had - previously been communicating with a different version of GDB. - - The following values of GDBFEATURE (for the packet sent by GDB) are - defined: - - 'multiprocess' - This feature indicates whether GDB supports multiprocess - extensions to the remote protocol. GDB does not use such - extensions unless the stub also reports that it supports them - by including 'multiprocess+' in its 'qSupported' reply. *Note - multiprocess extensions::, for details. - - 'xmlRegisters' - This feature indicates that GDB supports the XML target - description. If the stub sees 'xmlRegisters=' with target - specific strings separated by a comma, it will report register - description. - - 'qRelocInsn' - This feature indicates whether GDB supports the 'qRelocInsn' - packet (*note Relocate instruction reply packet: Tracepoint - Packets.). - - 'swbreak' - This feature indicates whether GDB supports the swbreak stop - reason in stop replies. *Note swbreak stop reason::, for - details. - - 'hwbreak' - This feature indicates whether GDB supports the hwbreak stop - reason in stop replies. *Note swbreak stop reason::, for - details. - - 'fork-events' - This feature indicates whether GDB supports fork event - extensions to the remote protocol. GDB does not use such - extensions unless the stub also reports that it supports them - by including 'fork-events+' in its 'qSupported' reply. - - 'vfork-events' - This feature indicates whether GDB supports vfork event - extensions to the remote protocol. GDB does not use such - extensions unless the stub also reports that it supports them - by including 'vfork-events+' in its 'qSupported' reply. - - 'exec-events' - This feature indicates whether GDB supports exec event - extensions to the remote protocol. GDB does not use such - extensions unless the stub also reports that it supports them - by including 'exec-events+' in its 'qSupported' reply. - - 'vContSupported' - This feature indicates whether GDB wants to know the supported - actions in the reply to 'vCont?' packet. - - Stubs should ignore any unknown values for GDBFEATURE. Any GDB - which sends a 'qSupported' packet supports receiving packets of - unlimited length (earlier versions of GDB may reject overly long - responses). Additional values for GDBFEATURE may be defined in the - future to let the stub take advantage of new features in GDB, e.g. - incompatible improvements in the remote protocol--the - 'multiprocess' feature is an example of such a feature. The stub's - reply should be independent of the GDBFEATURE entries sent by GDB; - first GDB describes all the features it supports, and then the stub - replies with all the features it supports. - - Similarly, GDB will silently ignore unrecognized stub feature - responses, as long as each response uses one of the standard forms. - - Some features are flags. A stub which supports a flag feature - should respond with a '+' form response. Other features require - values, and the stub should respond with an '=' form response. - - Each feature has a default value, which GDB will use if - 'qSupported' is not available or if the feature is not mentioned in - the 'qSupported' response. The default values are fixed; a stub is - free to omit any feature responses that match the defaults. - - Not all features can be probed, but for those which can, the - probing mechanism is useful: in some cases, a stub's internal - architecture may not allow the protocol layer to know some - information about the underlying target in advance. This is - especially common in stubs which may be configured for multiple - targets. - - These are the currently defined stub features and their properties: - - Feature Name Value Default Probe - Required Allowed - - 'PacketSize' Yes '-' No - - 'qXfer:auxv:read' No '-' Yes - - 'qXfer:btrace:read' No '-' Yes - - 'qXfer:btrace-conf:read' No '-' Yes - - 'qXfer:exec-file:read' No '-' Yes - - 'qXfer:features:read' No '-' Yes - - 'qXfer:libraries:read' No '-' Yes - - 'qXfer:libraries-svr4:read'No '-' Yes - - 'augmented-libraries-svr4-read'No '-' No - - 'qXfer:memory-map:read' No '-' Yes - - 'qXfer:sdata:read' No '-' Yes - - 'qXfer:siginfo:read' No '-' Yes - - 'qXfer:siginfo:write' No '-' Yes - - 'qXfer:threads:read' No '-' Yes - - 'qXfer:traceframe-info:read'No '-' Yes - - 'qXfer:uib:read' No '-' Yes - - 'qXfer:fdpic:read' No '-' Yes - - 'Qbtrace:off' Yes '-' Yes - - 'Qbtrace:bts' Yes '-' Yes - - 'Qbtrace:pt' Yes '-' Yes - - 'Qbtrace-conf:bts:size' Yes '-' Yes - - 'Qbtrace-conf:pt:size' Yes '-' Yes - - 'QNonStop' No '-' Yes - - 'QCatchSyscalls' No '-' Yes - - 'QPassSignals' No '-' Yes - - 'QStartNoAckMode' No '-' Yes - - 'multiprocess' No '-' No - - 'ConditionalBreakpoints' No '-' No - - 'ConditionalTracepoints' No '-' No - - 'ReverseContinue' No '-' No - - 'ReverseStep' No '-' No - - 'TracepointSource' No '-' No - - 'QAgent' No '-' No - - 'QAllow' No '-' No - - 'QDisableRandomization' No '-' No - - 'EnableDisableTracepoints'No '-' No - - 'QTBuffer:size' No '-' No - - 'tracenz' No '-' No - - 'BreakpointCommands' No '-' No - - 'swbreak' No '-' No - - 'hwbreak' No '-' No - - 'fork-events' No '-' No - - 'vfork-events' No '-' No - - 'exec-events' No '-' No - - 'QThreadEvents' No '-' No - - 'no-resumed' No '-' No - - - These are the currently defined stub features, in more detail: - - 'PacketSize=BYTES' - The remote stub can accept packets up to at least BYTES in - length. GDB will send packets up to this size for bulk - transfers, and will never send larger packets. This is a - limit on the data characters in the packet, including the - frame and checksum. There is no trailing NUL byte in a remote - protocol packet; if the stub stores packets in a - NUL-terminated format, it should allow an extra byte in its - buffer for the NUL. If this stub feature is not supported, GDB - guesses based on the size of the 'g' packet response. - - 'qXfer:auxv:read' - The remote stub understands the 'qXfer:auxv:read' packet - (*note qXfer auxiliary vector read::). - - 'qXfer:btrace:read' - The remote stub understands the 'qXfer:btrace:read' packet - (*note qXfer btrace read::). - - 'qXfer:btrace-conf:read' - The remote stub understands the 'qXfer:btrace-conf:read' - packet (*note qXfer btrace-conf read::). - - 'qXfer:exec-file:read' - The remote stub understands the 'qXfer:exec-file:read' packet - (*note qXfer executable filename read::). - - 'qXfer:features:read' - The remote stub understands the 'qXfer:features:read' packet - (*note qXfer target description read::). - - 'qXfer:libraries:read' - The remote stub understands the 'qXfer:libraries:read' packet - (*note qXfer library list read::). - - 'qXfer:libraries-svr4:read' - The remote stub understands the 'qXfer:libraries-svr4:read' - packet (*note qXfer svr4 library list read::). - - 'augmented-libraries-svr4-read' - The remote stub understands the augmented form of the - 'qXfer:libraries-svr4:read' packet (*note qXfer svr4 library - list read::). - - 'qXfer:memory-map:read' - The remote stub understands the 'qXfer:memory-map:read' packet - (*note qXfer memory map read::). - - 'qXfer:sdata:read' - The remote stub understands the 'qXfer:sdata:read' packet - (*note qXfer sdata read::). - - 'qXfer:siginfo:read' - The remote stub understands the 'qXfer:siginfo:read' packet - (*note qXfer siginfo read::). - - 'qXfer:siginfo:write' - The remote stub understands the 'qXfer:siginfo:write' packet - (*note qXfer siginfo write::). - - 'qXfer:threads:read' - The remote stub understands the 'qXfer:threads:read' packet - (*note qXfer threads read::). - - 'qXfer:traceframe-info:read' - The remote stub understands the 'qXfer:traceframe-info:read' - packet (*note qXfer traceframe info read::). - - 'qXfer:uib:read' - The remote stub understands the 'qXfer:uib:read' packet (*note - qXfer unwind info block::). - - 'qXfer:fdpic:read' - The remote stub understands the 'qXfer:fdpic:read' packet - (*note qXfer fdpic loadmap read::). - - 'QNonStop' - The remote stub understands the 'QNonStop' packet (*note - QNonStop::). - - 'QCatchSyscalls' - The remote stub understands the 'QCatchSyscalls' packet (*note - QCatchSyscalls::). - - 'QPassSignals' - The remote stub understands the 'QPassSignals' packet (*note - QPassSignals::). - - 'QStartNoAckMode' - The remote stub understands the 'QStartNoAckMode' packet and - prefers to operate in no-acknowledgment mode. *Note Packet - Acknowledgment::. - - 'multiprocess' - The remote stub understands the multiprocess extensions to the - remote protocol syntax. The multiprocess extensions affect - the syntax of thread IDs in both packets and replies (*note - thread-id syntax::), and add process IDs to the 'D' packet and - 'W' and 'X' replies. Note that reporting this feature - indicates support for the syntactic extensions only, not that - the stub necessarily supports debugging of more than one - process at a time. The stub must not use multiprocess - extensions in packet replies unless GDB has also indicated it - supports them in its 'qSupported' request. - - 'qXfer:osdata:read' - The remote stub understands the 'qXfer:osdata:read' packet - ((*note qXfer osdata read::). - - 'ConditionalBreakpoints' - The target accepts and implements evaluation of conditional - expressions defined for breakpoints. The target will only - report breakpoint triggers when such conditions are true - (*note Break Conditions: Conditions.). - - 'ConditionalTracepoints' - The remote stub accepts and implements conditional expressions - defined for tracepoints (*note Tracepoint Conditions::). - - 'ReverseContinue' - The remote stub accepts and implements the reverse continue - packet (*note bc::). - - 'ReverseStep' - The remote stub accepts and implements the reverse step packet - (*note bs::). - - 'TracepointSource' - The remote stub understands the 'QTDPsrc' packet that supplies - the source form of tracepoint definitions. - - 'QAgent' - The remote stub understands the 'QAgent' packet. - - 'QAllow' - The remote stub understands the 'QAllow' packet. - - 'QDisableRandomization' - The remote stub understands the 'QDisableRandomization' - packet. - - 'StaticTracepoint' - The remote stub supports static tracepoints. - - 'InstallInTrace' - The remote stub supports installing tracepoint in tracing. - - 'EnableDisableTracepoints' - The remote stub supports the 'QTEnable' (*note QTEnable::) and - 'QTDisable' (*note QTDisable::) packets that allow tracepoints - to be enabled and disabled while a trace experiment is - running. - - 'QTBuffer:size' - The remote stub supports the 'QTBuffer:size' (*note - QTBuffer-size::) packet that allows to change the size of the - trace buffer. - - 'tracenz' - The remote stub supports the 'tracenz' bytecode for collecting - strings. See *note Bytecode Descriptions:: for details about - the bytecode. - - 'BreakpointCommands' - The remote stub supports running a breakpoint's command list - itself, rather than reporting the hit to GDB. - - 'Qbtrace:off' - The remote stub understands the 'Qbtrace:off' packet. - - 'Qbtrace:bts' - The remote stub understands the 'Qbtrace:bts' packet. - - 'Qbtrace:pt' - The remote stub understands the 'Qbtrace:pt' packet. - - 'Qbtrace-conf:bts:size' - The remote stub understands the 'Qbtrace-conf:bts:size' - packet. - - 'Qbtrace-conf:pt:size' - The remote stub understands the 'Qbtrace-conf:pt:size' packet. - - 'swbreak' - The remote stub reports the 'swbreak' stop reason for memory - breakpoints. - - 'hwbreak' - The remote stub reports the 'hwbreak' stop reason for hardware - breakpoints. - - 'fork-events' - The remote stub reports the 'fork' stop reason for fork - events. - - 'vfork-events' - The remote stub reports the 'vfork' stop reason for vfork - events and vforkdone events. - - 'exec-events' - The remote stub reports the 'exec' stop reason for exec - events. - - 'vContSupported' - The remote stub reports the supported actions in the reply to - 'vCont?' packet. - - 'QThreadEvents' - The remote stub understands the 'QThreadEvents' packet. - - 'no-resumed' - The remote stub reports the 'N' stop reply. - -'qSymbol::' - Notify the target that GDB is prepared to serve symbol lookup - requests. Accept requests from the target for the values of - symbols. - - Reply: - 'OK' - The target does not need to look up any (more) symbols. - 'qSymbol:SYM_NAME' - The target requests the value of symbol SYM_NAME (hex - encoded). GDB may provide the value by using the - 'qSymbol:SYM_VALUE:SYM_NAME' message, described below. - -'qSymbol:SYM_VALUE:SYM_NAME' - Set the value of SYM_NAME to SYM_VALUE. - - SYM_NAME (hex encoded) is the name of a symbol whose value the - target has previously requested. - - SYM_VALUE (hex) is the value for symbol SYM_NAME. If GDB cannot - supply a value for SYM_NAME, then this field will be empty. - - Reply: - 'OK' - The target does not need to look up any (more) symbols. - 'qSymbol:SYM_NAME' - The target requests the value of a new symbol SYM_NAME (hex - encoded). GDB will continue to supply the values of symbols - (if available), until the target ceases to request them. - -'qTBuffer' -'QTBuffer' -'QTDisconnected' -'QTDP' -'QTDPsrc' -'QTDV' -'qTfP' -'qTfV' -'QTFrame' -'qTMinFTPILen' - - *Note Tracepoint Packets::. - -'qThreadExtraInfo,THREAD-ID' - Obtain from the target OS a printable string description of thread - attributes for the thread THREAD-ID; see *note thread-id syntax::, - for the forms of THREAD-ID. This string may contain anything that - the target OS thinks is interesting for GDB to tell the user about - the thread. The string is displayed in GDB's 'info threads' - display. Some examples of possible thread extra info strings are - 'Runnable', or 'Blocked on Mutex'. - - Reply: - 'XX...' - Where 'XX...' is a hex encoding of ASCII data, comprising the - printable string containing the extra information about the - thread's attributes. - - (Note that the 'qThreadExtraInfo' packet's name is separated from - the command by a ',', not a ':', contrary to the naming conventions - above. Please don't use this packet as a model for new packets.) - -'QTNotes' -'qTP' -'QTSave' -'qTsP' -'qTsV' -'QTStart' -'QTStop' -'QTEnable' -'QTDisable' -'QTinit' -'QTro' -'qTStatus' -'qTV' -'qTfSTM' -'qTsSTM' -'qTSTMat' - *Note Tracepoint Packets::. - -'qXfer:OBJECT:read:ANNEX:OFFSET,LENGTH' - Read uninterpreted bytes from the target's special data area - identified by the keyword OBJECT. Request LENGTH bytes starting at - OFFSET bytes into the data. The content and encoding of ANNEX is - specific to OBJECT; it can supply additional details about what - data to access. - - Reply: - 'm DATA' - Data DATA (*note Binary Data::) has been read from the target. - There may be more data at a higher address (although it is - permitted to return 'm' even for the last valid block of data, - as long as at least one byte of data was read). It is - possible for DATA to have fewer bytes than the LENGTH in the - request. - - 'l DATA' - Data DATA (*note Binary Data::) has been read from the target. - There is no more data to be read. It is possible for DATA to - have fewer bytes than the LENGTH in the request. - - 'l' - The OFFSET in the request is at the end of the data. There is - no more data to be read. - - 'E00' - The request was malformed, or ANNEX was invalid. - - 'E NN' - The offset was invalid, or there was an error encountered - reading the data. The NN part is a hex-encoded 'errno' value. - - '' - An empty reply indicates the OBJECT string was not recognized - by the stub, or that the object does not support reading. - - Here are the specific requests of this form defined so far. All - the 'qXfer:OBJECT:read:...' requests use the same reply formats, - listed above. - - 'qXfer:auxv:read::OFFSET,LENGTH' - Access the target's "auxiliary vector". *Note auxiliary - vector: OS Information. Note ANNEX must be empty. - - This packet is not probed by default; the remote stub must - request it, by supplying an appropriate 'qSupported' response - (*note qSupported::). - - 'qXfer:btrace:read:ANNEX:OFFSET,LENGTH' - - Return a description of the current branch trace. *Note - Branch Trace Format::. The annex part of the generic 'qXfer' - packet may have one of the following values: - - 'all' - Returns all available branch trace. - - 'new' - Returns all available branch trace if the branch trace - changed since the last read request. - - 'delta' - Returns the new branch trace since the last read request. - Adds a new block to the end of the trace that begins at - zero and ends at the source location of the first branch - in the trace buffer. This extra block is used to stitch - traces together. - - If the trace buffer overflowed, returns an error - indicating the overflow. - - This packet is not probed by default; the remote stub must - request it by supplying an appropriate 'qSupported' response - (*note qSupported::). - - 'qXfer:btrace-conf:read::OFFSET,LENGTH' - - Return a description of the current branch trace - configuration. *Note Branch Trace Configuration Format::. - - This packet is not probed by default; the remote stub must - request it by supplying an appropriate 'qSupported' response - (*note qSupported::). - - 'qXfer:exec-file:read:ANNEX:OFFSET,LENGTH' - Return the full absolute name of the file that was executed to - create a process running on the remote system. The annex - specifies the numeric process ID of the process to query, - encoded as a hexadecimal number. If the annex part is empty - the remote stub should return the filename corresponding to - the currently executing process. - - This packet is not probed by default; the remote stub must - request it, by supplying an appropriate 'qSupported' response - (*note qSupported::). - - 'qXfer:features:read:ANNEX:OFFSET,LENGTH' - Access the "target description". *Note Target Descriptions::. - The annex specifies which XML document to access. The main - description is always loaded from the 'target.xml' annex. - - This packet is not probed by default; the remote stub must - request it, by supplying an appropriate 'qSupported' response - (*note qSupported::). - - 'qXfer:libraries:read:ANNEX:OFFSET,LENGTH' - Access the target's list of loaded libraries. *Note Library - List Format::. The annex part of the generic 'qXfer' packet - must be empty (*note qXfer read::). - - Targets which maintain a list of libraries in the program's - memory do not need to implement this packet; it is designed - for platforms where the operating system manages the list of - loaded libraries. - - This packet is not probed by default; the remote stub must - request it, by supplying an appropriate 'qSupported' response - (*note qSupported::). - - 'qXfer:libraries-svr4:read:ANNEX:OFFSET,LENGTH' - Access the target's list of loaded libraries when the target - is an SVR4 platform. *Note Library List Format for SVR4 - Targets::. The annex part of the generic 'qXfer' packet must - be empty unless the remote stub indicated it supports the - augmented form of this packet by supplying an appropriate - 'qSupported' response (*note qXfer read::, *note - qSupported::). - - This packet is optional for better performance on SVR4 - targets. GDB uses memory read packets to read the SVR4 - library list otherwise. - - This packet is not probed by default; the remote stub must - request it, by supplying an appropriate 'qSupported' response - (*note qSupported::). - - If the remote stub indicates it supports the augmented form of - this packet then the annex part of the generic 'qXfer' packet - may contain a semicolon-separated list of 'NAME=VALUE' - arguments. The currently supported arguments are: - - 'start=ADDRESS' - A hexadecimal number specifying the address of the - 'struct link_map' to start reading the library list from. - If unset or zero then the first 'struct link_map' in the - library list will be chosen as the starting point. - - 'prev=ADDRESS' - A hexadecimal number specifying the address of the - 'struct link_map' immediately preceding the 'struct - link_map' specified by the 'start' argument. If unset or - zero then the remote stub will expect that no 'struct - link_map' exists prior to the starting point. - - Arguments that are not understood by the remote stub will be - silently ignored. - - 'qXfer:memory-map:read::OFFSET,LENGTH' - Access the target's "memory-map". *Note Memory Map Format::. - The annex part of the generic 'qXfer' packet must be empty - (*note qXfer read::). - - This packet is not probed by default; the remote stub must - request it, by supplying an appropriate 'qSupported' response - (*note qSupported::). - - 'qXfer:sdata:read::OFFSET,LENGTH' - - Read contents of the extra collected static tracepoint marker - information. The annex part of the generic 'qXfer' packet - must be empty (*note qXfer read::). *Note Tracepoint Action - Lists: Tracepoint Actions. - - This packet is not probed by default; the remote stub must - request it, by supplying an appropriate 'qSupported' response - (*note qSupported::). - - 'qXfer:siginfo:read::OFFSET,LENGTH' - Read contents of the extra signal information on the target - system. The annex part of the generic 'qXfer' packet must be - empty (*note qXfer read::). - - This packet is not probed by default; the remote stub must - request it, by supplying an appropriate 'qSupported' response - (*note qSupported::). - - 'qXfer:threads:read::OFFSET,LENGTH' - Access the list of threads on target. *Note Thread List - Format::. The annex part of the generic 'qXfer' packet must - be empty (*note qXfer read::). - - This packet is not probed by default; the remote stub must - request it, by supplying an appropriate 'qSupported' response - (*note qSupported::). - - 'qXfer:traceframe-info:read::OFFSET,LENGTH' - - Return a description of the current traceframe's contents. - *Note Traceframe Info Format::. The annex part of the generic - 'qXfer' packet must be empty (*note qXfer read::). - - This packet is not probed by default; the remote stub must - request it, by supplying an appropriate 'qSupported' response - (*note qSupported::). - - 'qXfer:uib:read:PC:OFFSET,LENGTH' - - Return the unwind information block for PC. This packet is - used on OpenVMS/ia64 to ask the kernel unwind information. - - This packet is not probed by default. - - 'qXfer:fdpic:read:ANNEX:OFFSET,LENGTH' - Read contents of 'loadmap's on the target system. The annex, - either 'exec' or 'interp', specifies which 'loadmap', - executable 'loadmap' or interpreter 'loadmap' to read. - - This packet is not probed by default; the remote stub must - request it, by supplying an appropriate 'qSupported' response - (*note qSupported::). - - 'qXfer:osdata:read::OFFSET,LENGTH' - Access the target's "operating system information". *Note - Operating System Information::. - -'qXfer:OBJECT:write:ANNEX:OFFSET:DATA...' - Write uninterpreted bytes into the target's special data area - identified by the keyword OBJECT, starting at OFFSET bytes into the - data. The binary-encoded data (*note Binary Data::) to be written - is given by DATA.... The content and encoding of ANNEX is specific - to OBJECT; it can supply additional details about what data to - access. - - Reply: - 'NN' - NN (hex encoded) is the number of bytes written. This may be - fewer bytes than supplied in the request. - - 'E00' - The request was malformed, or ANNEX was invalid. - - 'E NN' - The offset was invalid, or there was an error encountered - writing the data. The NN part is a hex-encoded 'errno' value. - - '' - An empty reply indicates the OBJECT string was not recognized - by the stub, or that the object does not support writing. - - Here are the specific requests of this form defined so far. All - the 'qXfer:OBJECT:write:...' requests use the same reply formats, - listed above. - - 'qXfer:siginfo:write::OFFSET:DATA...' - Write DATA to the extra signal information on the target - system. The annex part of the generic 'qXfer' packet must be - empty (*note qXfer write::). - - This packet is not probed by default; the remote stub must - request it, by supplying an appropriate 'qSupported' response - (*note qSupported::). - -'qXfer:OBJECT:OPERATION:...' - Requests of this form may be added in the future. When a stub does - not recognize the OBJECT keyword, or its support for OBJECT does - not recognize the OPERATION keyword, the stub must respond with an - empty packet. - -'qAttached:PID' - Return an indication of whether the remote server attached to an - existing process or created a new process. When the multiprocess - protocol extensions are supported (*note multiprocess - extensions::), PID is an integer in hexadecimal format identifying - the target process. Otherwise, GDB will omit the PID field and the - query packet will be simplified as 'qAttached'. - - This query is used, for example, to know whether the remote process - should be detached or killed when a GDB session is ended with the - 'quit' command. - - Reply: - '1' - The remote server attached to an existing process. - '0' - The remote server created a new process. - 'E NN' - A badly formed request or an error was encountered. - -'Qbtrace:bts' - Enable branch tracing for the current thread using Branch Trace - Store. - - Reply: - 'OK' - Branch tracing has been enabled. - 'E.errtext' - A badly formed request or an error was encountered. - -'Qbtrace:pt' - Enable branch tracing for the current thread using Intel Processor - Trace. - - Reply: - 'OK' - Branch tracing has been enabled. - 'E.errtext' - A badly formed request or an error was encountered. - -'Qbtrace:off' - Disable branch tracing for the current thread. - - Reply: - 'OK' - Branch tracing has been disabled. - 'E.errtext' - A badly formed request or an error was encountered. - -'Qbtrace-conf:bts:size=VALUE' - Set the requested ring buffer size for new threads that use the - btrace recording method in bts format. - - Reply: - 'OK' - The ring buffer size has been set. - 'E.errtext' - A badly formed request or an error was encountered. - -'Qbtrace-conf:pt:size=VALUE' - Set the requested ring buffer size for new threads that use the - btrace recording method in pt format. - - Reply: - 'OK' - The ring buffer size has been set. - 'E.errtext' - A badly formed request or an error was encountered. - - ---------- Footnotes ---------- - - (1) The 'qP' and 'qL' packets predate these conventions, and have -arguments without any terminator for the packet name; we suspect they -are in widespread use in places that are difficult to upgrade. The 'qC' -packet has no arguments, but some existing stubs (e.g. RedBoot) are -known to not check for the end of the packet. - diff -Nru gdb-9.1/gdb/doc/gdb.info-7 gdb-10.2/gdb/doc/gdb.info-7 --- gdb-9.1/gdb/doc/gdb.info-7 2020-02-08 12:54:18.000000000 +0000 +++ gdb-10.2/gdb/doc/gdb.info-7 2021-04-25 04:10:43.000000000 +0000 @@ -1,6 +1,6 @@ -This is gdb.info, produced by makeinfo version 6.5 from gdb.texinfo. +This is gdb.info, produced by makeinfo version 6.7 from gdb.texinfo. -Copyright (C) 1988-2020 Free Software Foundation, Inc. +Copyright (C) 1988-2021 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or @@ -21,9 +21,9 @@ This file documents the GNU debugger GDB. This is the Tenth Edition, of 'Debugging with GDB: the GNU -Source-Level Debugger' for GDB (GDB) Version 9.1. +Source-Level Debugger' for GDB (GDB) Version 10.2. - Copyright (C) 1988-2020 Free Software Foundation, Inc. + Copyright (C) 1988-2021 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or @@ -37,6 +37,1463 @@ developing GNU and promoting software freedom."  +File: gdb.info, Node: General Query Packets, Next: Architecture-Specific Protocol Details, Prev: Stop Reply Packets, Up: Remote Protocol + +E.4 General Query Packets +========================= + +Packets starting with 'q' are "general query packets"; packets starting +with 'Q' are "general set packets". General query and set packets are a +semi-unified form for retrieving and sending information to and from the +stub. + + The initial letter of a query or set packet is followed by a name +indicating what sort of thing the packet applies to. For example, GDB +may use a 'qSymbol' packet to exchange symbol definitions with the stub. +These packet names follow some conventions: + + * The name must not contain commas, colons or semicolons. + * Most GDB query and set packets have a leading upper case letter. + * The names of custom vendor packets should use a company prefix, in + lower case, followed by a period. For example, packets designed at + the Acme Corporation might begin with 'qacme.foo' (for querying + foos) or 'Qacme.bar' (for setting bars). + + The name of a query or set packet should be separated from any +parameters by a ':'; the parameters themselves should be separated by +',' or ';'. Stubs must be careful to match the full packet name, and +check for a separator or the end of the packet, in case two packet names +share a common prefix. New packets should not begin with 'qC', 'qP', or +'qL'(1). + + Like the descriptions of the other packets, each description here has +a template showing the packet's overall syntax, followed by an +explanation of the packet's meaning. We include spaces in some of the +templates for clarity; these are not part of the packet's syntax. No +GDB packet uses spaces to separate its components. + + Here are the currently defined query and set packets: + +'QAgent:1' +'QAgent:0' + Turn on or off the agent as a helper to perform some debugging + operations delegated from GDB (*note Control Agent::). + +'QAllow:OP:VAL...' + Specify which operations GDB expects to request of the target, as a + semicolon-separated list of operation name and value pairs. + Possible values for OP include 'WriteReg', 'WriteMem', + 'InsertBreak', 'InsertTrace', 'InsertFastTrace', and 'Stop'. VAL + is either 0, indicating that GDB will not request the operation, or + 1, indicating that it may. (The target can then use this to set up + its own internals optimally, for instance if the debugger never + expects to insert breakpoints, it may not need to install its own + trap handler.) + +'qC' + Return the current thread ID. + + Reply: + 'QC THREAD-ID' + Where THREAD-ID is a thread ID as documented in *note + thread-id syntax::. + '(anything else)' + Any other reply implies the old thread ID. + +'qCRC:ADDR,LENGTH' + Compute the CRC checksum of a block of memory using CRC-32 defined + in IEEE 802.3. The CRC is computed byte at a time, taking the most + significant bit of each byte first. The initial pattern code + '0xffffffff' is used to ensure leading zeros affect the CRC. + + _Note:_ This is the same CRC used in validating separate debug + files (*note Debugging Information in Separate Files: Separate + Debug Files.). However the algorithm is slightly different. When + validating separate debug files, the CRC is computed taking the + _least_ significant bit of each byte first, and the final result is + inverted to detect trailing zeros. + + Reply: + 'E NN' + An error (such as memory fault) + 'C CRC32' + The specified memory region's checksum is CRC32. + +'QDisableRandomization:VALUE' + Some target operating systems will randomize the virtual address + space of the inferior process as a security feature, but provide a + feature to disable such randomization, e.g. to allow for a more + deterministic debugging experience. On such systems, this packet + with a VALUE of 1 directs the target to disable address space + randomization for processes subsequently started via 'vRun' + packets, while a packet with a VALUE of 0 tells the target to + enable address space randomization. + + This packet is only available in extended mode (*note extended + mode::). + + Reply: + 'OK' + The request succeeded. + + 'E NN' + An error occurred. The error number NN is given as hex + digits. + + '' + An empty reply indicates that 'QDisableRandomization' is not + supported by the stub. + + This packet is not probed by default; the remote stub must request + it, by supplying an appropriate 'qSupported' response (*note + qSupported::). This should only be done on targets that actually + support disabling address space randomization. + +'QStartupWithShell:VALUE' + On UNIX-like targets, it is possible to start the inferior using a + shell program. This is the default behavior on both GDB and + 'gdbserver' (*note set startup-with-shell::). This packet is used + to inform 'gdbserver' whether it should start the inferior using a + shell or not. + + If VALUE is '0', 'gdbserver' will not use a shell to start the + inferior. If VALUE is '1', 'gdbserver' will use a shell to start + the inferior. All other values are considered an error. + + This packet is only available in extended mode (*note extended + mode::). + + Reply: + 'OK' + The request succeeded. + + 'E NN' + An error occurred. The error number NN is given as hex + digits. + + This packet is not probed by default; the remote stub must request + it, by supplying an appropriate 'qSupported' response (*note + qSupported::). This should only be done on targets that actually + support starting the inferior using a shell. + + Use of this packet is controlled by the 'set startup-with-shell' + command; *note set startup-with-shell::. + +'QEnvironmentHexEncoded:HEX-VALUE' + On UNIX-like targets, it is possible to set environment variables + that will be passed to the inferior during the startup process. + This packet is used to inform 'gdbserver' of an environment + variable that has been defined by the user on GDB (*note set + environment::). + + The packet is composed by HEX-VALUE, an hex encoded representation + of the NAME=VALUE format representing an environment variable. The + name of the environment variable is represented by NAME, and the + value to be assigned to the environment variable is represented by + VALUE. If the variable has no value (i.e., the value is 'null'), + then VALUE will not be present. + + This packet is only available in extended mode (*note extended + mode::). + + Reply: + 'OK' + The request succeeded. + + This packet is not probed by default; the remote stub must request + it, by supplying an appropriate 'qSupported' response (*note + qSupported::). This should only be done on targets that actually + support passing environment variables to the starting inferior. + + This packet is related to the 'set environment' command; *note set + environment::. + +'QEnvironmentUnset:HEX-VALUE' + On UNIX-like targets, it is possible to unset environment variables + before starting the inferior in the remote target. This packet is + used to inform 'gdbserver' of an environment variable that has been + unset by the user on GDB (*note unset environment::). + + The packet is composed by HEX-VALUE, an hex encoded representation + of the name of the environment variable to be unset. + + This packet is only available in extended mode (*note extended + mode::). + + Reply: + 'OK' + The request succeeded. + + This packet is not probed by default; the remote stub must request + it, by supplying an appropriate 'qSupported' response (*note + qSupported::). This should only be done on targets that actually + support passing environment variables to the starting inferior. + + This packet is related to the 'unset environment' command; *note + unset environment::. + +'QEnvironmentReset' + On UNIX-like targets, this packet is used to reset the state of + environment variables in the remote target before starting the + inferior. In this context, reset means unsetting all environment + variables that were previously set by the user (i.e., were not + initially present in the environment). It is sent to 'gdbserver' + before the 'QEnvironmentHexEncoded' (*note + QEnvironmentHexEncoded::) and the 'QEnvironmentUnset' (*note + QEnvironmentUnset::) packets. + + This packet is only available in extended mode (*note extended + mode::). + + Reply: + 'OK' + The request succeeded. + + This packet is not probed by default; the remote stub must request + it, by supplying an appropriate 'qSupported' response (*note + qSupported::). This should only be done on targets that actually + support passing environment variables to the starting inferior. + +'QSetWorkingDir:[DIRECTORY]' + This packet is used to inform the remote server of the intended + current working directory for programs that are going to be + executed. + + The packet is composed by DIRECTORY, an hex encoded representation + of the directory that the remote inferior will use as its current + working directory. If DIRECTORY is an empty string, the remote + server should reset the inferior's current working directory to its + original, empty value. + + This packet is only available in extended mode (*note extended + mode::). + + Reply: + 'OK' + The request succeeded. + +'qfThreadInfo' +'qsThreadInfo' + Obtain a list of all active thread IDs from the target (OS). Since + there may be too many active threads to fit into one reply packet, + this query works iteratively: it may require more than one + query/reply sequence to obtain the entire list of threads. The + first query of the sequence will be the 'qfThreadInfo' query; + subsequent queries in the sequence will be the 'qsThreadInfo' + query. + + NOTE: This packet replaces the 'qL' query (see below). + + Reply: + 'm THREAD-ID' + A single thread ID + 'm THREAD-ID,THREAD-ID...' + a comma-separated list of thread IDs + 'l' + (lower case letter 'L') denotes end of list. + + In response to each query, the target will reply with a list of one + or more thread IDs, separated by commas. GDB will respond to each + reply with a request for more thread ids (using the 'qs' form of + the query), until the target responds with 'l' (lower-case ell, for + "last"). Refer to *note thread-id syntax::, for the format of the + THREAD-ID fields. + + _Note: GDB will send the 'qfThreadInfo' query during the initial + connection with the remote target, and the very first thread ID + mentioned in the reply will be stopped by GDB in a subsequent + message. Therefore, the stub should ensure that the first thread + ID in the 'qfThreadInfo' reply is suitable for being stopped by + GDB._ + +'qGetTLSAddr:THREAD-ID,OFFSET,LM' + Fetch the address associated with thread local storage specified by + THREAD-ID, OFFSET, and LM. + + THREAD-ID is the thread ID associated with the thread for which to + fetch the TLS address. *Note thread-id syntax::. + + OFFSET is the (big endian, hex encoded) offset associated with the + thread local variable. (This offset is obtained from the debug + information associated with the variable.) + + LM is the (big endian, hex encoded) OS/ABI-specific encoding of the + load module associated with the thread local storage. For example, + a GNU/Linux system will pass the link map address of the shared + object associated with the thread local storage under + consideration. Other operating environments may choose to + represent the load module differently, so the precise meaning of + this parameter will vary. + + Reply: + 'XX...' + Hex encoded (big endian) bytes representing the address of the + thread local storage requested. + + 'E NN' + An error occurred. The error number NN is given as hex + digits. + + '' + An empty reply indicates that 'qGetTLSAddr' is not supported + by the stub. + +'qGetTIBAddr:THREAD-ID' + Fetch address of the Windows OS specific Thread Information Block. + + THREAD-ID is the thread ID associated with the thread. + + Reply: + 'XX...' + Hex encoded (big endian) bytes representing the linear address + of the thread information block. + + 'E NN' + An error occured. This means that either the thread was not + found, or the address could not be retrieved. + + '' + An empty reply indicates that 'qGetTIBAddr' is not supported + by the stub. + +'qL STARTFLAG THREADCOUNT NEXTTHREAD' + Obtain thread information from RTOS. Where: STARTFLAG (one hex + digit) is one to indicate the first query and zero to indicate a + subsequent query; THREADCOUNT (two hex digits) is the maximum + number of threads the response packet can contain; and NEXTTHREAD + (eight hex digits), for subsequent queries (STARTFLAG is zero), is + returned in the response as ARGTHREAD. + + Don't use this packet; use the 'qfThreadInfo' query instead (see + above). + + Reply: + 'qM COUNT DONE ARGTHREAD THREAD...' + Where: COUNT (two hex digits) is the number of threads being + returned; DONE (one hex digit) is zero to indicate more + threads and one indicates no further threads; ARGTHREADID + (eight hex digits) is NEXTTHREAD from the request packet; + THREAD... is a sequence of thread IDs, THREADID (eight hex + digits), from the target. See + 'remote.c:parse_threadlist_response()'. + +'qOffsets' + Get section offsets that the target used when relocating the + downloaded image. + + Reply: + 'Text=XXX;Data=YYY[;Bss=ZZZ]' + Relocate the 'Text' section by XXX from its original address. + Relocate the 'Data' section by YYY from its original address. + If the object file format provides segment information (e.g. + ELF 'PT_LOAD' program headers), GDB will relocate entire + segments by the supplied offsets. + + _Note: while a 'Bss' offset may be included in the response, + GDB ignores this and instead applies the 'Data' offset to the + 'Bss' section._ + + 'TextSeg=XXX[;DataSeg=YYY]' + Relocate the first segment of the object file, which + conventionally contains program code, to a starting address of + XXX. If 'DataSeg' is specified, relocate the second segment, + which conventionally contains modifiable data, to a starting + address of YYY. GDB will report an error if the object file + does not contain segment information, or does not contain at + least as many segments as mentioned in the reply. Extra + segments are kept at fixed offsets relative to the last + relocated segment. + +'qP MODE THREAD-ID' + Returns information on THREAD-ID. Where: MODE is a hex encoded 32 + bit mode; THREAD-ID is a thread ID (*note thread-id syntax::). + + Don't use this packet; use the 'qThreadExtraInfo' query instead + (see below). + + Reply: see 'remote.c:remote_unpack_thread_info_response()'. + +'QNonStop:1' +'QNonStop:0' + Enter non-stop ('QNonStop:1') or all-stop ('QNonStop:0') mode. + *Note Remote Non-Stop::, for more information. + + Reply: + 'OK' + The request succeeded. + + 'E NN' + An error occurred. The error number NN is given as hex + digits. + + '' + An empty reply indicates that 'QNonStop' is not supported by + the stub. + + This packet is not probed by default; the remote stub must request + it, by supplying an appropriate 'qSupported' response (*note + qSupported::). Use of this packet is controlled by the 'set + non-stop' command; *note Non-Stop Mode::. + +'QCatchSyscalls:1 [;SYSNO]...' +'QCatchSyscalls:0' + Enable ('QCatchSyscalls:1') or disable ('QCatchSyscalls:0') + catching syscalls from the inferior process. + + For 'QCatchSyscalls:1', each listed syscall SYSNO (encoded in hex) + should be reported to GDB. If no syscall SYSNO is listed, every + system call should be reported. + + Note that if a syscall not in the list is reported, GDB will still + filter the event according to its own list from all corresponding + 'catch syscall' commands. However, it is more efficient to only + report the requested syscalls. + + Multiple 'QCatchSyscalls:1' packets do not combine; any earlier + 'QCatchSyscalls:1' list is completely replaced by the new list. + + If the inferior process execs, the state of 'QCatchSyscalls' is + kept for the new process too. On targets where exec may affect + syscall numbers, for example with exec between 32 and 64-bit + processes, the client should send a new packet with the new syscall + list. + + Reply: + 'OK' + The request succeeded. + + 'E NN' + An error occurred. NN are hex digits. + + '' + An empty reply indicates that 'QCatchSyscalls' is not + supported by the stub. + + Use of this packet is controlled by the 'set remote catch-syscalls' + command (*note set remote catch-syscalls: Remote Configuration.). + This packet is not probed by default; the remote stub must request + it, by supplying an appropriate 'qSupported' response (*note + qSupported::). + +'QPassSignals: SIGNAL [;SIGNAL]...' + Each listed SIGNAL should be passed directly to the inferior + process. Signals are numbered identically to continue packets and + stop replies (*note Stop Reply Packets::). Each SIGNAL list item + should be strictly greater than the previous item. These signals + do not need to stop the inferior, or be reported to GDB. All other + signals should be reported to GDB. Multiple 'QPassSignals' packets + do not combine; any earlier 'QPassSignals' list is completely + replaced by the new list. This packet improves performance when + using 'handle SIGNAL nostop noprint pass'. + + Reply: + 'OK' + The request succeeded. + + 'E NN' + An error occurred. The error number NN is given as hex + digits. + + '' + An empty reply indicates that 'QPassSignals' is not supported + by the stub. + + Use of this packet is controlled by the 'set remote pass-signals' + command (*note set remote pass-signals: Remote Configuration.). + This packet is not probed by default; the remote stub must request + it, by supplying an appropriate 'qSupported' response (*note + qSupported::). + +'QProgramSignals: SIGNAL [;SIGNAL]...' + Each listed SIGNAL may be delivered to the inferior process. + Others should be silently discarded. + + In some cases, the remote stub may need to decide whether to + deliver a signal to the program or not without GDB involvement. + One example of that is while detaching -- the program's threads may + have stopped for signals that haven't yet had a chance of being + reported to GDB, and so the remote stub can use the signal list + specified by this packet to know whether to deliver or ignore those + pending signals. + + This does not influence whether to deliver a signal as requested by + a resumption packet (*note vCont packet::). + + Signals are numbered identically to continue packets and stop + replies (*note Stop Reply Packets::). Each SIGNAL list item should + be strictly greater than the previous item. Multiple + 'QProgramSignals' packets do not combine; any earlier + 'QProgramSignals' list is completely replaced by the new list. + + Reply: + 'OK' + The request succeeded. + + 'E NN' + An error occurred. The error number NN is given as hex + digits. + + '' + An empty reply indicates that 'QProgramSignals' is not + supported by the stub. + + Use of this packet is controlled by the 'set remote + program-signals' command (*note set remote program-signals: Remote + Configuration.). This packet is not probed by default; the remote + stub must request it, by supplying an appropriate 'qSupported' + response (*note qSupported::). + +'QThreadEvents:1' +'QThreadEvents:0' + + Enable ('QThreadEvents:1') or disable ('QThreadEvents:0') reporting + of thread create and exit events. *Note thread create event::, for + the reply specifications. For example, this is used in non-stop + mode when GDB stops a set of threads and synchronously waits for + the their corresponding stop replies. Without exit events, if one + of the threads exits, GDB would hang forever not knowing that it + should no longer expect a stop for that same thread. GDB does not + enable this feature unless the stub reports that it supports it by + including 'QThreadEvents+' in its 'qSupported' reply. + + Reply: + 'OK' + The request succeeded. + + 'E NN' + An error occurred. The error number NN is given as hex + digits. + + '' + An empty reply indicates that 'QThreadEvents' is not supported + by the stub. + + Use of this packet is controlled by the 'set remote thread-events' + command (*note set remote thread-events: Remote Configuration.). + +'qRcmd,COMMAND' + COMMAND (hex encoded) is passed to the local interpreter for + execution. Invalid commands should be reported using the output + string. Before the final result packet, the target may also + respond with a number of intermediate 'OOUTPUT' console output + packets. _Implementors should note that providing access to a + stubs's interpreter may have security implications_. + + Reply: + 'OK' + A command response with no output. + 'OUTPUT' + A command response with the hex encoded output string OUTPUT. + 'E NN' + Indicate a badly formed request. + '' + An empty reply indicates that 'qRcmd' is not recognized. + + (Note that the 'qRcmd' packet's name is separated from the command + by a ',', not a ':', contrary to the naming conventions above. + Please don't use this packet as a model for new packets.) + +'qSearch:memory:ADDRESS;LENGTH;SEARCH-PATTERN' + Search LENGTH bytes at ADDRESS for SEARCH-PATTERN. Both ADDRESS + and LENGTH are encoded in hex; SEARCH-PATTERN is a sequence of + bytes, also hex encoded. + + Reply: + '0' + The pattern was not found. + '1,address' + The pattern was found at ADDRESS. + 'E NN' + A badly formed request or an error was encountered while + searching memory. + '' + An empty reply indicates that 'qSearch:memory' is not + recognized. + +'QStartNoAckMode' + Request that the remote stub disable the normal '+'/'-' protocol + acknowledgments (*note Packet Acknowledgment::). + + Reply: + 'OK' + The stub has switched to no-acknowledgment mode. GDB + acknowledges this response, but neither the stub nor GDB shall + send or expect further '+'/'-' acknowledgments in the current + connection. + '' + An empty reply indicates that the stub does not support + no-acknowledgment mode. + +'qSupported [:GDBFEATURE [;GDBFEATURE]... ]' + Tell the remote stub about features supported by GDB, and query the + stub for features it supports. This packet allows GDB and the + remote stub to take advantage of each others' features. + 'qSupported' also consolidates multiple feature probes at startup, + to improve GDB performance--a single larger packet performs better + than multiple smaller probe packets on high-latency links. Some + features may enable behavior which must not be on by default, e.g. + because it would confuse older clients or stubs. Other features + may describe packets which could be automatically probed for, but + are not. These features must be reported before GDB will use them. + This "default unsupported" behavior is not appropriate for all + packets, but it helps to keep the initial connection time under + control with new versions of GDB which support increasing numbers + of packets. + + Reply: + 'STUBFEATURE [;STUBFEATURE]...' + The stub supports or does not support each returned + STUBFEATURE, depending on the form of each STUBFEATURE (see + below for the possible forms). + '' + An empty reply indicates that 'qSupported' is not recognized, + or that no features needed to be reported to GDB. + + The allowed forms for each feature (either a GDBFEATURE in the + 'qSupported' packet, or a STUBFEATURE in the response) are: + + 'NAME=VALUE' + The remote protocol feature NAME is supported, and associated + with the specified VALUE. The format of VALUE depends on the + feature, but it must not include a semicolon. + 'NAME+' + The remote protocol feature NAME is supported, and does not + need an associated value. + 'NAME-' + The remote protocol feature NAME is not supported. + 'NAME?' + The remote protocol feature NAME may be supported, and GDB + should auto-detect support in some other way when it is + needed. This form will not be used for GDBFEATURE + notifications, but may be used for STUBFEATURE responses. + + Whenever the stub receives a 'qSupported' request, the supplied set + of GDB features should override any previous request. This allows + GDB to put the stub in a known state, even if the stub had + previously been communicating with a different version of GDB. + + The following values of GDBFEATURE (for the packet sent by GDB) are + defined: + + 'multiprocess' + This feature indicates whether GDB supports multiprocess + extensions to the remote protocol. GDB does not use such + extensions unless the stub also reports that it supports them + by including 'multiprocess+' in its 'qSupported' reply. *Note + multiprocess extensions::, for details. + + 'xmlRegisters' + This feature indicates that GDB supports the XML target + description. If the stub sees 'xmlRegisters=' with target + specific strings separated by a comma, it will report register + description. + + 'qRelocInsn' + This feature indicates whether GDB supports the 'qRelocInsn' + packet (*note Relocate instruction reply packet: Tracepoint + Packets.). + + 'swbreak' + This feature indicates whether GDB supports the swbreak stop + reason in stop replies. *Note swbreak stop reason::, for + details. + + 'hwbreak' + This feature indicates whether GDB supports the hwbreak stop + reason in stop replies. *Note swbreak stop reason::, for + details. + + 'fork-events' + This feature indicates whether GDB supports fork event + extensions to the remote protocol. GDB does not use such + extensions unless the stub also reports that it supports them + by including 'fork-events+' in its 'qSupported' reply. + + 'vfork-events' + This feature indicates whether GDB supports vfork event + extensions to the remote protocol. GDB does not use such + extensions unless the stub also reports that it supports them + by including 'vfork-events+' in its 'qSupported' reply. + + 'exec-events' + This feature indicates whether GDB supports exec event + extensions to the remote protocol. GDB does not use such + extensions unless the stub also reports that it supports them + by including 'exec-events+' in its 'qSupported' reply. + + 'vContSupported' + This feature indicates whether GDB wants to know the supported + actions in the reply to 'vCont?' packet. + + Stubs should ignore any unknown values for GDBFEATURE. Any GDB + which sends a 'qSupported' packet supports receiving packets of + unlimited length (earlier versions of GDB may reject overly long + responses). Additional values for GDBFEATURE may be defined in the + future to let the stub take advantage of new features in GDB, e.g. + incompatible improvements in the remote protocol--the + 'multiprocess' feature is an example of such a feature. The stub's + reply should be independent of the GDBFEATURE entries sent by GDB; + first GDB describes all the features it supports, and then the stub + replies with all the features it supports. + + Similarly, GDB will silently ignore unrecognized stub feature + responses, as long as each response uses one of the standard forms. + + Some features are flags. A stub which supports a flag feature + should respond with a '+' form response. Other features require + values, and the stub should respond with an '=' form response. + + Each feature has a default value, which GDB will use if + 'qSupported' is not available or if the feature is not mentioned in + the 'qSupported' response. The default values are fixed; a stub is + free to omit any feature responses that match the defaults. + + Not all features can be probed, but for those which can, the + probing mechanism is useful: in some cases, a stub's internal + architecture may not allow the protocol layer to know some + information about the underlying target in advance. This is + especially common in stubs which may be configured for multiple + targets. + + These are the currently defined stub features and their properties: + + Feature Name Value Default Probe + Required Allowed + + 'PacketSize' Yes '-' No + + 'qXfer:auxv:read' No '-' Yes + + 'qXfer:btrace:read' No '-' Yes + + 'qXfer:btrace-conf:read' No '-' Yes + + 'qXfer:exec-file:read' No '-' Yes + + 'qXfer:features:read' No '-' Yes + + 'qXfer:libraries:read' No '-' Yes + + 'qXfer:libraries-svr4:read'No '-' Yes + + 'augmented-libraries-svr4-read'No '-' No + + 'qXfer:memory-map:read' No '-' Yes + + 'qXfer:sdata:read' No '-' Yes + + 'qXfer:siginfo:read' No '-' Yes + + 'qXfer:siginfo:write' No '-' Yes + + 'qXfer:threads:read' No '-' Yes + + 'qXfer:traceframe-info:read'No '-' Yes + + 'qXfer:uib:read' No '-' Yes + + 'qXfer:fdpic:read' No '-' Yes + + 'Qbtrace:off' Yes '-' Yes + + 'Qbtrace:bts' Yes '-' Yes + + 'Qbtrace:pt' Yes '-' Yes + + 'Qbtrace-conf:bts:size' Yes '-' Yes + + 'Qbtrace-conf:pt:size' Yes '-' Yes + + 'QNonStop' No '-' Yes + + 'QCatchSyscalls' No '-' Yes + + 'QPassSignals' No '-' Yes + + 'QStartNoAckMode' No '-' Yes + + 'multiprocess' No '-' No + + 'ConditionalBreakpoints' No '-' No + + 'ConditionalTracepoints' No '-' No + + 'ReverseContinue' No '-' No + + 'ReverseStep' No '-' No + + 'TracepointSource' No '-' No + + 'QAgent' No '-' No + + 'QAllow' No '-' No + + 'QDisableRandomization' No '-' No + + 'EnableDisableTracepoints'No '-' No + + 'QTBuffer:size' No '-' No + + 'tracenz' No '-' No + + 'BreakpointCommands' No '-' No + + 'swbreak' No '-' No + + 'hwbreak' No '-' No + + 'fork-events' No '-' No + + 'vfork-events' No '-' No + + 'exec-events' No '-' No + + 'QThreadEvents' No '-' No + + 'no-resumed' No '-' No + + + These are the currently defined stub features, in more detail: + + 'PacketSize=BYTES' + The remote stub can accept packets up to at least BYTES in + length. GDB will send packets up to this size for bulk + transfers, and will never send larger packets. This is a + limit on the data characters in the packet, including the + frame and checksum. There is no trailing NUL byte in a remote + protocol packet; if the stub stores packets in a + NUL-terminated format, it should allow an extra byte in its + buffer for the NUL. If this stub feature is not supported, GDB + guesses based on the size of the 'g' packet response. + + 'qXfer:auxv:read' + The remote stub understands the 'qXfer:auxv:read' packet + (*note qXfer auxiliary vector read::). + + 'qXfer:btrace:read' + The remote stub understands the 'qXfer:btrace:read' packet + (*note qXfer btrace read::). + + 'qXfer:btrace-conf:read' + The remote stub understands the 'qXfer:btrace-conf:read' + packet (*note qXfer btrace-conf read::). + + 'qXfer:exec-file:read' + The remote stub understands the 'qXfer:exec-file:read' packet + (*note qXfer executable filename read::). + + 'qXfer:features:read' + The remote stub understands the 'qXfer:features:read' packet + (*note qXfer target description read::). + + 'qXfer:libraries:read' + The remote stub understands the 'qXfer:libraries:read' packet + (*note qXfer library list read::). + + 'qXfer:libraries-svr4:read' + The remote stub understands the 'qXfer:libraries-svr4:read' + packet (*note qXfer svr4 library list read::). + + 'augmented-libraries-svr4-read' + The remote stub understands the augmented form of the + 'qXfer:libraries-svr4:read' packet (*note qXfer svr4 library + list read::). + + 'qXfer:memory-map:read' + The remote stub understands the 'qXfer:memory-map:read' packet + (*note qXfer memory map read::). + + 'qXfer:sdata:read' + The remote stub understands the 'qXfer:sdata:read' packet + (*note qXfer sdata read::). + + 'qXfer:siginfo:read' + The remote stub understands the 'qXfer:siginfo:read' packet + (*note qXfer siginfo read::). + + 'qXfer:siginfo:write' + The remote stub understands the 'qXfer:siginfo:write' packet + (*note qXfer siginfo write::). + + 'qXfer:threads:read' + The remote stub understands the 'qXfer:threads:read' packet + (*note qXfer threads read::). + + 'qXfer:traceframe-info:read' + The remote stub understands the 'qXfer:traceframe-info:read' + packet (*note qXfer traceframe info read::). + + 'qXfer:uib:read' + The remote stub understands the 'qXfer:uib:read' packet (*note + qXfer unwind info block::). + + 'qXfer:fdpic:read' + The remote stub understands the 'qXfer:fdpic:read' packet + (*note qXfer fdpic loadmap read::). + + 'QNonStop' + The remote stub understands the 'QNonStop' packet (*note + QNonStop::). + + 'QCatchSyscalls' + The remote stub understands the 'QCatchSyscalls' packet (*note + QCatchSyscalls::). + + 'QPassSignals' + The remote stub understands the 'QPassSignals' packet (*note + QPassSignals::). + + 'QStartNoAckMode' + The remote stub understands the 'QStartNoAckMode' packet and + prefers to operate in no-acknowledgment mode. *Note Packet + Acknowledgment::. + + 'multiprocess' + The remote stub understands the multiprocess extensions to the + remote protocol syntax. The multiprocess extensions affect + the syntax of thread IDs in both packets and replies (*note + thread-id syntax::), and add process IDs to the 'D' packet and + 'W' and 'X' replies. Note that reporting this feature + indicates support for the syntactic extensions only, not that + the stub necessarily supports debugging of more than one + process at a time. The stub must not use multiprocess + extensions in packet replies unless GDB has also indicated it + supports them in its 'qSupported' request. + + 'qXfer:osdata:read' + The remote stub understands the 'qXfer:osdata:read' packet + ((*note qXfer osdata read::). + + 'ConditionalBreakpoints' + The target accepts and implements evaluation of conditional + expressions defined for breakpoints. The target will only + report breakpoint triggers when such conditions are true + (*note Break Conditions: Conditions.). + + 'ConditionalTracepoints' + The remote stub accepts and implements conditional expressions + defined for tracepoints (*note Tracepoint Conditions::). + + 'ReverseContinue' + The remote stub accepts and implements the reverse continue + packet (*note bc::). + + 'ReverseStep' + The remote stub accepts and implements the reverse step packet + (*note bs::). + + 'TracepointSource' + The remote stub understands the 'QTDPsrc' packet that supplies + the source form of tracepoint definitions. + + 'QAgent' + The remote stub understands the 'QAgent' packet. + + 'QAllow' + The remote stub understands the 'QAllow' packet. + + 'QDisableRandomization' + The remote stub understands the 'QDisableRandomization' + packet. + + 'StaticTracepoint' + The remote stub supports static tracepoints. + + 'InstallInTrace' + The remote stub supports installing tracepoint in tracing. + + 'EnableDisableTracepoints' + The remote stub supports the 'QTEnable' (*note QTEnable::) and + 'QTDisable' (*note QTDisable::) packets that allow tracepoints + to be enabled and disabled while a trace experiment is + running. + + 'QTBuffer:size' + The remote stub supports the 'QTBuffer:size' (*note + QTBuffer-size::) packet that allows to change the size of the + trace buffer. + + 'tracenz' + The remote stub supports the 'tracenz' bytecode for collecting + strings. See *note Bytecode Descriptions:: for details about + the bytecode. + + 'BreakpointCommands' + The remote stub supports running a breakpoint's command list + itself, rather than reporting the hit to GDB. + + 'Qbtrace:off' + The remote stub understands the 'Qbtrace:off' packet. + + 'Qbtrace:bts' + The remote stub understands the 'Qbtrace:bts' packet. + + 'Qbtrace:pt' + The remote stub understands the 'Qbtrace:pt' packet. + + 'Qbtrace-conf:bts:size' + The remote stub understands the 'Qbtrace-conf:bts:size' + packet. + + 'Qbtrace-conf:pt:size' + The remote stub understands the 'Qbtrace-conf:pt:size' packet. + + 'swbreak' + The remote stub reports the 'swbreak' stop reason for memory + breakpoints. + + 'hwbreak' + The remote stub reports the 'hwbreak' stop reason for hardware + breakpoints. + + 'fork-events' + The remote stub reports the 'fork' stop reason for fork + events. + + 'vfork-events' + The remote stub reports the 'vfork' stop reason for vfork + events and vforkdone events. + + 'exec-events' + The remote stub reports the 'exec' stop reason for exec + events. + + 'vContSupported' + The remote stub reports the supported actions in the reply to + 'vCont?' packet. + + 'QThreadEvents' + The remote stub understands the 'QThreadEvents' packet. + + 'no-resumed' + The remote stub reports the 'N' stop reply. + +'qSymbol::' + Notify the target that GDB is prepared to serve symbol lookup + requests. Accept requests from the target for the values of + symbols. + + Reply: + 'OK' + The target does not need to look up any (more) symbols. + 'qSymbol:SYM_NAME' + The target requests the value of symbol SYM_NAME (hex + encoded). GDB may provide the value by using the + 'qSymbol:SYM_VALUE:SYM_NAME' message, described below. + +'qSymbol:SYM_VALUE:SYM_NAME' + Set the value of SYM_NAME to SYM_VALUE. + + SYM_NAME (hex encoded) is the name of a symbol whose value the + target has previously requested. + + SYM_VALUE (hex) is the value for symbol SYM_NAME. If GDB cannot + supply a value for SYM_NAME, then this field will be empty. + + Reply: + 'OK' + The target does not need to look up any (more) symbols. + 'qSymbol:SYM_NAME' + The target requests the value of a new symbol SYM_NAME (hex + encoded). GDB will continue to supply the values of symbols + (if available), until the target ceases to request them. + +'qTBuffer' +'QTBuffer' +'QTDisconnected' +'QTDP' +'QTDPsrc' +'QTDV' +'qTfP' +'qTfV' +'QTFrame' +'qTMinFTPILen' + + *Note Tracepoint Packets::. + +'qThreadExtraInfo,THREAD-ID' + Obtain from the target OS a printable string description of thread + attributes for the thread THREAD-ID; see *note thread-id syntax::, + for the forms of THREAD-ID. This string may contain anything that + the target OS thinks is interesting for GDB to tell the user about + the thread. The string is displayed in GDB's 'info threads' + display. Some examples of possible thread extra info strings are + 'Runnable', or 'Blocked on Mutex'. + + Reply: + 'XX...' + Where 'XX...' is a hex encoding of ASCII data, comprising the + printable string containing the extra information about the + thread's attributes. + + (Note that the 'qThreadExtraInfo' packet's name is separated from + the command by a ',', not a ':', contrary to the naming conventions + above. Please don't use this packet as a model for new packets.) + +'QTNotes' +'qTP' +'QTSave' +'qTsP' +'qTsV' +'QTStart' +'QTStop' +'QTEnable' +'QTDisable' +'QTinit' +'QTro' +'qTStatus' +'qTV' +'qTfSTM' +'qTsSTM' +'qTSTMat' + *Note Tracepoint Packets::. + +'qXfer:OBJECT:read:ANNEX:OFFSET,LENGTH' + Read uninterpreted bytes from the target's special data area + identified by the keyword OBJECT. Request LENGTH bytes starting at + OFFSET bytes into the data. The content and encoding of ANNEX is + specific to OBJECT; it can supply additional details about what + data to access. + + Reply: + 'm DATA' + Data DATA (*note Binary Data::) has been read from the target. + There may be more data at a higher address (although it is + permitted to return 'm' even for the last valid block of data, + as long as at least one byte of data was read). It is + possible for DATA to have fewer bytes than the LENGTH in the + request. + + 'l DATA' + Data DATA (*note Binary Data::) has been read from the target. + There is no more data to be read. It is possible for DATA to + have fewer bytes than the LENGTH in the request. + + 'l' + The OFFSET in the request is at the end of the data. There is + no more data to be read. + + 'E00' + The request was malformed, or ANNEX was invalid. + + 'E NN' + The offset was invalid, or there was an error encountered + reading the data. The NN part is a hex-encoded 'errno' value. + + '' + An empty reply indicates the OBJECT string was not recognized + by the stub, or that the object does not support reading. + + Here are the specific requests of this form defined so far. All + the 'qXfer:OBJECT:read:...' requests use the same reply formats, + listed above. + + 'qXfer:auxv:read::OFFSET,LENGTH' + Access the target's "auxiliary vector". *Note auxiliary + vector: OS Information. Note ANNEX must be empty. + + This packet is not probed by default; the remote stub must + request it, by supplying an appropriate 'qSupported' response + (*note qSupported::). + + 'qXfer:btrace:read:ANNEX:OFFSET,LENGTH' + + Return a description of the current branch trace. *Note + Branch Trace Format::. The annex part of the generic 'qXfer' + packet may have one of the following values: + + 'all' + Returns all available branch trace. + + 'new' + Returns all available branch trace if the branch trace + changed since the last read request. + + 'delta' + Returns the new branch trace since the last read request. + Adds a new block to the end of the trace that begins at + zero and ends at the source location of the first branch + in the trace buffer. This extra block is used to stitch + traces together. + + If the trace buffer overflowed, returns an error + indicating the overflow. + + This packet is not probed by default; the remote stub must + request it by supplying an appropriate 'qSupported' response + (*note qSupported::). + + 'qXfer:btrace-conf:read::OFFSET,LENGTH' + + Return a description of the current branch trace + configuration. *Note Branch Trace Configuration Format::. + + This packet is not probed by default; the remote stub must + request it by supplying an appropriate 'qSupported' response + (*note qSupported::). + + 'qXfer:exec-file:read:ANNEX:OFFSET,LENGTH' + Return the full absolute name of the file that was executed to + create a process running on the remote system. The annex + specifies the numeric process ID of the process to query, + encoded as a hexadecimal number. If the annex part is empty + the remote stub should return the filename corresponding to + the currently executing process. + + This packet is not probed by default; the remote stub must + request it, by supplying an appropriate 'qSupported' response + (*note qSupported::). + + 'qXfer:features:read:ANNEX:OFFSET,LENGTH' + Access the "target description". *Note Target Descriptions::. + The annex specifies which XML document to access. The main + description is always loaded from the 'target.xml' annex. + + This packet is not probed by default; the remote stub must + request it, by supplying an appropriate 'qSupported' response + (*note qSupported::). + + 'qXfer:libraries:read:ANNEX:OFFSET,LENGTH' + Access the target's list of loaded libraries. *Note Library + List Format::. The annex part of the generic 'qXfer' packet + must be empty (*note qXfer read::). + + Targets which maintain a list of libraries in the program's + memory do not need to implement this packet; it is designed + for platforms where the operating system manages the list of + loaded libraries. + + This packet is not probed by default; the remote stub must + request it, by supplying an appropriate 'qSupported' response + (*note qSupported::). + + 'qXfer:libraries-svr4:read:ANNEX:OFFSET,LENGTH' + Access the target's list of loaded libraries when the target + is an SVR4 platform. *Note Library List Format for SVR4 + Targets::. The annex part of the generic 'qXfer' packet must + be empty unless the remote stub indicated it supports the + augmented form of this packet by supplying an appropriate + 'qSupported' response (*note qXfer read::, *note + qSupported::). + + This packet is optional for better performance on SVR4 + targets. GDB uses memory read packets to read the SVR4 + library list otherwise. + + This packet is not probed by default; the remote stub must + request it, by supplying an appropriate 'qSupported' response + (*note qSupported::). + + If the remote stub indicates it supports the augmented form of + this packet then the annex part of the generic 'qXfer' packet + may contain a semicolon-separated list of 'NAME=VALUE' + arguments. The currently supported arguments are: + + 'start=ADDRESS' + A hexadecimal number specifying the address of the + 'struct link_map' to start reading the library list from. + If unset or zero then the first 'struct link_map' in the + library list will be chosen as the starting point. + + 'prev=ADDRESS' + A hexadecimal number specifying the address of the + 'struct link_map' immediately preceding the 'struct + link_map' specified by the 'start' argument. If unset or + zero then the remote stub will expect that no 'struct + link_map' exists prior to the starting point. + + Arguments that are not understood by the remote stub will be + silently ignored. + + 'qXfer:memory-map:read::OFFSET,LENGTH' + Access the target's "memory-map". *Note Memory Map Format::. + The annex part of the generic 'qXfer' packet must be empty + (*note qXfer read::). + + This packet is not probed by default; the remote stub must + request it, by supplying an appropriate 'qSupported' response + (*note qSupported::). + + 'qXfer:sdata:read::OFFSET,LENGTH' + + Read contents of the extra collected static tracepoint marker + information. The annex part of the generic 'qXfer' packet + must be empty (*note qXfer read::). *Note Tracepoint Action + Lists: Tracepoint Actions. + + This packet is not probed by default; the remote stub must + request it, by supplying an appropriate 'qSupported' response + (*note qSupported::). + + 'qXfer:siginfo:read::OFFSET,LENGTH' + Read contents of the extra signal information on the target + system. The annex part of the generic 'qXfer' packet must be + empty (*note qXfer read::). + + This packet is not probed by default; the remote stub must + request it, by supplying an appropriate 'qSupported' response + (*note qSupported::). + + 'qXfer:threads:read::OFFSET,LENGTH' + Access the list of threads on target. *Note Thread List + Format::. The annex part of the generic 'qXfer' packet must + be empty (*note qXfer read::). + + This packet is not probed by default; the remote stub must + request it, by supplying an appropriate 'qSupported' response + (*note qSupported::). + + 'qXfer:traceframe-info:read::OFFSET,LENGTH' + + Return a description of the current traceframe's contents. + *Note Traceframe Info Format::. The annex part of the generic + 'qXfer' packet must be empty (*note qXfer read::). + + This packet is not probed by default; the remote stub must + request it, by supplying an appropriate 'qSupported' response + (*note qSupported::). + + 'qXfer:uib:read:PC:OFFSET,LENGTH' + + Return the unwind information block for PC. This packet is + used on OpenVMS/ia64 to ask the kernel unwind information. + + This packet is not probed by default. + + 'qXfer:fdpic:read:ANNEX:OFFSET,LENGTH' + Read contents of 'loadmap's on the target system. The annex, + either 'exec' or 'interp', specifies which 'loadmap', + executable 'loadmap' or interpreter 'loadmap' to read. + + This packet is not probed by default; the remote stub must + request it, by supplying an appropriate 'qSupported' response + (*note qSupported::). + + 'qXfer:osdata:read::OFFSET,LENGTH' + Access the target's "operating system information". *Note + Operating System Information::. + +'qXfer:OBJECT:write:ANNEX:OFFSET:DATA...' + Write uninterpreted bytes into the target's special data area + identified by the keyword OBJECT, starting at OFFSET bytes into the + data. The binary-encoded data (*note Binary Data::) to be written + is given by DATA.... The content and encoding of ANNEX is specific + to OBJECT; it can supply additional details about what data to + access. + + Reply: + 'NN' + NN (hex encoded) is the number of bytes written. This may be + fewer bytes than supplied in the request. + + 'E00' + The request was malformed, or ANNEX was invalid. + + 'E NN' + The offset was invalid, or there was an error encountered + writing the data. The NN part is a hex-encoded 'errno' value. + + '' + An empty reply indicates the OBJECT string was not recognized + by the stub, or that the object does not support writing. + + Here are the specific requests of this form defined so far. All + the 'qXfer:OBJECT:write:...' requests use the same reply formats, + listed above. + + 'qXfer:siginfo:write::OFFSET:DATA...' + Write DATA to the extra signal information on the target + system. The annex part of the generic 'qXfer' packet must be + empty (*note qXfer write::). + + This packet is not probed by default; the remote stub must + request it, by supplying an appropriate 'qSupported' response + (*note qSupported::). + +'qXfer:OBJECT:OPERATION:...' + Requests of this form may be added in the future. When a stub does + not recognize the OBJECT keyword, or its support for OBJECT does + not recognize the OPERATION keyword, the stub must respond with an + empty packet. + +'qAttached:PID' + Return an indication of whether the remote server attached to an + existing process or created a new process. When the multiprocess + protocol extensions are supported (*note multiprocess + extensions::), PID is an integer in hexadecimal format identifying + the target process. Otherwise, GDB will omit the PID field and the + query packet will be simplified as 'qAttached'. + + This query is used, for example, to know whether the remote process + should be detached or killed when a GDB session is ended with the + 'quit' command. + + Reply: + '1' + The remote server attached to an existing process. + '0' + The remote server created a new process. + 'E NN' + A badly formed request or an error was encountered. + +'Qbtrace:bts' + Enable branch tracing for the current thread using Branch Trace + Store. + + Reply: + 'OK' + Branch tracing has been enabled. + 'E.errtext' + A badly formed request or an error was encountered. + +'Qbtrace:pt' + Enable branch tracing for the current thread using Intel Processor + Trace. + + Reply: + 'OK' + Branch tracing has been enabled. + 'E.errtext' + A badly formed request or an error was encountered. + +'Qbtrace:off' + Disable branch tracing for the current thread. + + Reply: + 'OK' + Branch tracing has been disabled. + 'E.errtext' + A badly formed request or an error was encountered. + +'Qbtrace-conf:bts:size=VALUE' + Set the requested ring buffer size for new threads that use the + btrace recording method in bts format. + + Reply: + 'OK' + The ring buffer size has been set. + 'E.errtext' + A badly formed request or an error was encountered. + +'Qbtrace-conf:pt:size=VALUE' + Set the requested ring buffer size for new threads that use the + btrace recording method in pt format. + + Reply: + 'OK' + The ring buffer size has been set. + 'E.errtext' + A badly formed request or an error was encountered. + + ---------- Footnotes ---------- + + (1) The 'qP' and 'qL' packets predate these conventions, and have +arguments without any terminator for the packet name; we suspect they +are in widespread use in places that are difficult to upgrade. The 'qC' +packet has no arguments, but some existing stubs (e.g. RedBoot) are +known to not check for the end of the packet. + + File: gdb.info, Node: Architecture-Specific Protocol Details, Next: Tracepoint Packets, Prev: General Query Packets, Up: Remote Protocol E.5 Architecture-Specific Protocol Details @@ -54,7 +1511,7 @@  File: gdb.info, Node: ARM-Specific Protocol Details, Next: MIPS-Specific Protocol Details, Up: Architecture-Specific Protocol Details -E.5.1 ARM-specific Protocol Details +E.5.1 ARM-Specific Protocol Details ----------------------------------- * Menu: @@ -81,7 +1538,7 @@  File: gdb.info, Node: MIPS-Specific Protocol Details, Prev: ARM-Specific Protocol Details, Up: Architecture-Specific Protocol Details -E.5.2 MIPS-specific Protocol Details +E.5.2 MIPS-Specific Protocol Details ------------------------------------ * Menu: @@ -547,7 +2004,7 @@ Allowable types include 'user', 'notes', and 'tstop', the TEXT fields are arbitrary strings, hex-encoded. -E.6.1 Relocate instruction reply packet +E.6.1 Relocate Instruction Reply Packet --------------------------------------- When installing fast tracepoints in memory, the target may need to @@ -616,7 +2073,7 @@ RESULT is the integer value returned by this operation, usually non-negative for success and -1 for errors. If an error has occured, ERRNO will be included in the result specifying a value - defined by the File-I/O protocol (*note Errno Values::). For + defined by the File-I/O protocol (*note errno Values::). For operations which return data, ATTACHMENT supplies the data as a binary buffer. Binary buffers in response packets are escaped in the normal way (*note Binary Data::). See the individual packet @@ -1712,7 +3169,7 @@  File: gdb.info, Node: Protocol-specific Representation of Datatypes, Next: Constants, Prev: List of Supported Calls, Up: File-I/O Remote Protocol Extension -E.13.8 Protocol-specific Representation of Datatypes +E.13.8 Protocol-Specific Representation of Datatypes ---------------------------------------------------- * Menu: @@ -1874,7 +3331,7 @@ * Open Flags:: * mode_t Values:: -* Errno Values:: +* errno Values:: * Lseek Flags:: * Limits:: @@ -1895,7 +3352,7 @@ O_EXCL 0x800  -File: gdb.info, Node: mode_t Values, Next: Errno Values, Prev: Open Flags, Up: Constants +File: gdb.info, Node: mode_t Values, Next: errno Values, Prev: Open Flags, Up: Constants mode_t Values ............. @@ -1915,9 +3372,9 @@ S_IXOTH 01  -File: gdb.info, Node: Errno Values, Next: Lseek Flags, Prev: mode_t Values, Up: Constants +File: gdb.info, Node: errno Values, Next: Lseek Flags, Prev: mode_t Values, Up: Constants -Errno Values +errno Values ............ All values are given in decimal representation. @@ -1947,7 +3404,7 @@ any error value not in the list of supported error numbers.  -File: gdb.info, Node: Lseek Flags, Next: Limits, Prev: Errno Values, Up: Constants +File: gdb.info, Node: Lseek Flags, Next: Limits, Prev: errno Values, Up: Constants Lseek Flags ........... @@ -3592,39 +5049,44 @@ G.5.2 ARC Features ------------------ -ARC processors are highly configurable, so even core registers and their -number are not completely predetermined. In addition flags and PC -registers which are important to GDB are not "core" registers in ARC. It -is required that one of the core registers features is present. -'org.gnu.gdb.arc.aux-minimal' feature is mandatory. - - The 'org.gnu.gdb.arc.core.v2' feature is required for ARC EM and ARC -HS targets with a normal register file. It should contain registers -'r0' through 'r25', 'gp', 'fp', 'sp', 'r30', 'blink', 'lp_count' and -'pcl'. This feature may contain register 'ilink' and any of extension -core registers 'r32' through 'r59/acch'. 'ilink' and extension core -registers are not available to read/write, when debugging GNU/Linux -applications, thus 'ilink' is made optional. - - The 'org.gnu.gdb.arc.core-reduced.v2' feature is required for ARC EM -and ARC HS targets with a reduced register file. It should contain -registers 'r0' through 'r3', 'r10' through 'r15', 'gp', 'fp', 'sp', -'r30', 'blink', 'lp_count' and 'pcl'. This feature may contain register -'ilink' and any of extension core registers 'r32' through 'r59/acch'. - - The 'org.gnu.gdb.arc.core.arcompact' feature is required for -ARCompact targets with a normal register file. It should contain -registers 'r0' through 'r25', 'gp', 'fp', 'sp', 'r30', 'blink', -'lp_count' and 'pcl'. This feature may contain registers 'ilink1', -'ilink2' and any of extension core registers 'r32' through 'r59/acch'. -'ilink1' and 'ilink2' and extension core registers are not available -when debugging GNU/Linux applications. The only difference with -'org.gnu.gdb.arc.core.v2' feature is in the names of 'ilink1' and -'ilink2' registers and that 'r30' is mandatory in ARC v2, but 'ilink2' -is optional on ARCompact. +ARC processors are so configurable that even core registers and their +numbers are not predetermined completely. Moreover, _flags_ and _PC_ +registers, which are important to GDB, are not "core" registers in ARC. +Therefore, there are two features that their presence is mandatory: +'org.gnu.gdb.arc.core' and 'org.gnu.gdb.arc.aux'. + + The 'org.gnu.gdb.arc.core' feature is required for all targets. It +must contain registers: + + - 'r0' through 'r25' for normal register file targets. + - 'r0' through 'r3', and 'r10' through 'r15' for reduced register + file targets. + - 'gp', 'fp', 'sp', 'r30'(1), 'blink', 'lp_count', 'pcl'. + + In case of an ARCompact target (ARCv1 ISA), the +'org.gnu.gdb.arc.core' feature may contain registers 'ilink1' and +'ilink2'. While in case of ARC EM and ARC HS targets (ARCv2 ISA), +register 'ilink' may be present. The difference between ARCv1 and ARCv2 +is the naming of registers _29th_ and _30th_. They are called 'ilink1' +and 'ilink2' for ARCv1 and are optional. For ARCv2, they are called +'ilink' and 'r30' and only 'ilink' is optional. The optionality of +'ilink*' registers is because of their inaccessibility during user space +debugging sessions. + + Extension core registers 'r32' through 'r59' are optional and their +existence depends on the configuration. When debugging GNU/Linux +applications, i.e. user space debugging, these core registers are not +available. + + The 'org.gnu.gdb.arc.aux' feature is required for all ARC targets. +Here is the list of registers pertinent to this feature: + + - mandatory: 'pc' and 'status32'. + - optional: 'lp_start', 'lp_end', and 'bta'. + + ---------- Footnotes ---------- - The 'org.gnu.gdb.arc.aux-minimal' feature is required for all ARC -targets. It should contain registers 'pc' and 'status32'. + (1) Not necessary for ARCv1.  File: gdb.info, Node: ARM Features, Next: i386 Features, Prev: ARC Features, Up: Standard Target Features @@ -3789,6 +5251,12 @@ This feature is optional. If present, it should contain registers 'fp0' through 'fp7', 'fpcontrol', 'fpstatus' and 'fpiaddr'. + Note that, despite the fact that this feature's name says + 'coldfire', it is used to describe any floating point registers. + The size of the registers must match the main m68k flavor; so, for + example, if the primary feature is reported as 'coldfire', then + 64-bit floating point registers are required. +  File: gdb.info, Node: NDS32 Features, Next: Nios II Features, Prev: M68K Features, Up: Standard Target Features @@ -3826,7 +5294,7 @@  File: gdb.info, Node: OpenRISC 1000 Features, Next: PowerPC Features, Prev: Nios II Features, Up: Standard Target Features -G.5.10 Openrisc 1000 Features +G.5.10 OpenRISC 1000 Features ----------------------------- The 'org.gnu.gdb.or1k.group0' feature is required for OpenRISC 1000 @@ -4683,8 +6151,8 @@ looks something like 'Connection refused'. 'gdbserver' can also debug multiple inferiors at once, described in -*note Inferiors and Programs::. In such case use the 'extended-remote' -GDB command variant: +*note Inferiors Connections and Programs::. In such case use the +'extended-remote' GDB command variant: (gdb) target extended-remote the-target:2345 @@ -6070,1981 +7538,3 @@ software license, such as the GNU General Public License, to permit their use in free software. - -File: gdb.info, Node: Concept Index, Next: Command and Variable Index, Prev: GNU Free Documentation License, Up: Top - -Concept Index -************* - -�[index�] -* Menu: - -* ! packet: Packets. (line 49) -* "No symbol "foo" in current context": Variables. (line 122) -* # in Modula-2: GDB/M2. (line 18) -* $: Value History. (line 13) -* $$: Value History. (line 13) -* $_ and info breakpoints: Set Breaks. (line 133) -* $_ and info line: Machine Code. (line 34) -* $_, $__, and value history: Memory. (line 119) -* &, background execution of commands: Background Execution. - (line 16) -* --annotate: Mode Options. (line 132) -* --args: Mode Options. (line 145) -* --attach, gdbserver option: Server. (line 86) -* --batch: Mode Options. (line 55) -* --batch-silent: Mode Options. (line 73) -* --baud: Mode Options. (line 151) -* --cd: Mode Options. (line 112) -* --command: File Options. (line 51) -* --configuration: Mode Options. (line 195) -* --core: File Options. (line 43) -* --data-directory: Mode Options. (line 117) -* --debug, gdbserver option: Server. (line 146) -* --debug-file, gdbserver option: Server. (line 148) -* --debug-format, gdbserver option: Server. (line 153) -* --directory: File Options. (line 77) -* --eval-command: File Options. (line 57) -* --exec: File Options. (line 35) -* --fullname: Mode Options. (line 122) -* --init-command: File Options. (line 67) -* --init-eval-command: File Options. (line 72) -* --interpreter: Mode Options. (line 170) -* --multi, gdbserver option: Connecting. (line 45) -* --nh: Mode Options. (line 45) -* --nowindows: Mode Options. (line 102) -* --nx: Mode Options. (line 11) -* --once, gdbserver option: Server. (line 126) -* --pid: File Options. (line 47) -* --quiet: Mode Options. (line 51) -* --readnever, command-line option: File Options. (line 87) -* --readnow: File Options. (line 81) -* --remote-debug, gdbserver option: Server. (line 147) -* --return-child-result: Mode Options. (line 85) -* --se: File Options. (line 39) -* --selftest: Server. (line 187) -* --silent: Mode Options. (line 51) -* --statistics: Mode Options. (line 187) -* --symbols: File Options. (line 31) -* --tty: Mode Options. (line 160) -* --tui: Mode Options. (line 163) -* --version: Mode Options. (line 191) -* --windows: Mode Options. (line 108) -* --with-gdb-datadir: Data Files. (line 19) -* --with-relocated-sources: Source Path. (line 149) -* --with-sysroot: Files. (line 453) -* --wrapper, gdbserver option: Server. (line 166) -* --write: Mode Options. (line 182) -* -b: Mode Options. (line 151) -* -c: File Options. (line 43) -* -d: File Options. (line 77) -* -D: Mode Options. (line 117) -* -e: File Options. (line 35) -* -ex: File Options. (line 57) -* -f: Mode Options. (line 122) -* -iex: File Options. (line 72) -* -info-gdb-mi-command: GDB/MI Support Commands. - (line 14) -* -ix: File Options. (line 67) -* -l: Mode Options. (line 155) -* -n: Mode Options. (line 11) -* -nw: Mode Options. (line 102) -* -p: File Options. (line 47) -* -q: Mode Options. (line 51) -* -r: File Options. (line 81) -* -readnever, option for symbol-file command: Files. (line 101) -* -s: File Options. (line 31) -* -t: Mode Options. (line 160) -* -w: Mode Options. (line 108) -* -x: File Options. (line 51) -* ., Modula-2 scope operator: M2 Scope. (line 6) -* .build-id directory: Separate Debug Files. - (line 6) -* .debug subdirectories: Separate Debug Files. - (line 6) -* .debug_gdb_scripts section: dotdebug_gdb_scripts section. - (line 6) -* .gdbinit: Startup. (line 69) -* .gdb_index section: Index Files. (line 6) -* .gdb_index section format: Index Section Format. - (line 6) -* .gnu_debugdata section: MiniDebugInfo. (line 6) -* .gnu_debuglink sections: Separate Debug Files. - (line 79) -* .note.gnu.build-id sections: Separate Debug Files. - (line 95) -* .o files, reading symbols from: Files. (line 146) -* /proc: Process Information. - (line 6) -* <architecture>: Target Description Format. - (line 72) -* <compatible>: Target Description Format. - (line 95) -* <feature>: Target Description Format. - (line 119) -* <flags>: Target Description Format. - (line 163) -* <not saved> values: Registers. (line 106) -* <osabi>: Target Description Format. - (line 82) -* <reg>: Target Description Format. - (line 222) -* <struct>: Target Description Format. - (line 163) -* <union>: Target Description Format. - (line 153) -* <vector>: Target Description Format. - (line 146) -* ? packet: Packets. (line 58) -* _NSPrintForDebugger, and printing Objective-C objects: The Print Command with Objective-C. - (line 11) -* {TYPE}: Expressions. (line 41) -* A packet: Packets. (line 65) -* AArch64 Pointer Authentication.: AArch64. (line 34) -* AArch64 support: AArch64. (line 6) -* AArch64 SVE.: AArch64. (line 19) -* abbreviation: Command Syntax. (line 13) -* acknowledgment, for GDB remote: Packet Acknowledgment. - (line 6) -* active targets: Active Targets. (line 6) -* Ada: Ada. (line 6) -* Ada exception catching: Set Catchpoints. (line 66) -* Ada exception handlers catching: Set Catchpoints. (line 92) -* Ada mode, general: Ada Mode Intro. (line 6) -* Ada settings: Ada Settings. (line 6) -* Ada task switching: Ada Tasks. (line 115) -* Ada tasking and core file debugging: Ada Tasks and Core Files. - (line 6) -* Ada, deviations from: Additions to Ada. (line 6) -* Ada, omissions from: Omissions from Ada. (line 6) -* Ada, problems: Ada Glitches. (line 6) -* Ada, tasking: Ada Tasks. (line 6) -* add new commands for external monitor: Connecting. (line 272) -* address locations: Address Locations. (line 6) -* address of a symbol: Symbols. (line 85) -* address size for remote targets: Remote Configuration. - (line 12) -* addressable memory unit: Memory. (line 133) -* aggregates (Ada): Omissions from Ada. (line 44) -* AIX shared library debugging: Debugging Output. (line 30) -* AIX threads: Debugging Output. (line 36) -* aliases for commands: Aliases. (line 6) -* alignment of remote memory accesses: Packets. (line 247) -* all-stop mode: All-Stop Mode. (line 6) -* Alpha stack: MIPS. (line 6) -* ambiguous expressions: Ambiguous Expressions. - (line 6) -* annotations: Annotations Overview. - (line 6) -* annotations for errors, warnings and interrupts: Errors. (line 6) -* annotations for invalidation messages: Invalidation. (line 6) -* annotations for prompts: Prompting. (line 6) -* annotations for running programs: Annotations for Running. - (line 6) -* annotations for source display: Source Annotations. (line 6) -* append data to a file: Dump/Restore Files. (line 6) -* Application Data Integrity: Sparc64. (line 5) -* apply a command to all frames (ignoring errors and empty output): Frame Apply. - (line 96) -* apply a command to all frames of all threads (ignoring errors and empty output): Threads. - (line 229) -* apply command to all threads (ignoring errors and empty output): Threads. - (line 222) -* apply command to several frames: Frame Apply. (line 6) -* apply command to several threads: Threads. (line 187) -* ARC EM: ARC. (line 6) -* ARC HS: ARC. (line 6) -* ARC specific commands: ARC. (line 6) -* ARC600: ARC. (line 6) -* ARC700: ARC. (line 6) -* architecture debugging info: Debugging Output. (line 23) -* argument count in user-defined commands: Define. (line 25) -* arguments (to your program): Arguments. (line 6) -* arguments, to gdbserver: Server. (line 34) -* arguments, to user-defined commands: Define. (line 6) -* ARM 32-bit mode: ARM. (line 16) -* ARM AArch64: Debugging Output. (line 17) -* array aggregates (Ada): Omissions from Ada. (line 44) -* arrays: Arrays. (line 6) -* arrays in expressions: Expressions. (line 13) -* artificial array: Arrays. (line 6) -* assembly instructions: Machine Code. (line 43) -* assignment: Assignment. (line 6) -* async output in GDB/MI: GDB/MI Output Syntax. - (line 98) -* async records in GDB/MI: GDB/MI Async Records. - (line 6) -* asynchronous execution: Background Execution. - (line 6) -* asynchronous execution, and process record and replay: Process Record and Replay. - (line 101) -* AT&T disassembly flavor: Machine Code. (line 237) -* attach: Attach. (line 6) -* attach to a program, gdbserver: Server. (line 86) -* auto-loading: Auto-loading. (line 6) -* auto-loading extensions: Auto-loading extensions. - (line 6) -* auto-loading init file in the current directory: Init File in the Current Directory. - (line 6) -* auto-loading libthread_db.so.1: libthread_db.so.1 file. - (line 6) -* auto-loading safe-path: Auto-loading safe path. - (line 6) -* auto-loading verbose mode: Auto-loading verbose mode. - (line 6) -* auto-retry, for remote TCP target: Remote Configuration. - (line 131) -* automatic display: Auto Display. (line 6) -* automatic hardware breakpoints: Set Breaks. (line 296) -* automatic overlay debugging: Automatic Overlay Debugging. - (line 6) -* automatic symbol index cache: Index Files. (line 75) -* automatic thread selection: All-Stop Mode. (line 28) -* auxiliary vector: OS Information. (line 9) -* AVR: AVR. (line 6) -* b packet: Packets. (line 76) -* B packet: Packets. (line 91) -* background execution: Background Execution. - (line 6) -* backtrace beyond main function: Backtrace. (line 155) -* backtrace limit: Backtrace. (line 192) -* base name differences: Files. (line 520) -* baud rate for remote targets: Remote Configuration. - (line 21) -* bc packet: Packets. (line 96) -* bcache statistics: Maintenance Commands. - (line 328) -* bits in remote address: Remote Configuration. - (line 12) -* blocks in guile: Blocks In Guile. (line 6) -* blocks in python: Blocks In Python. (line 6) -* bookmark: Checkpoint/Restart. (line 6) -* boundary violations, Intel MPX: Signals. (line 197) -* branch trace configuration format: Branch Trace Configuration Format. - (line 6) -* branch trace format: Branch Trace Format. - (line 6) -* branch trace store: Process Record and Replay. - (line 70) -* break in overloaded functions: Debugging C Plus Plus. - (line 9) -* break on a system call.: Set Catchpoints. (line 120) -* break on fork/exec: Set Catchpoints. (line 116) -* BREAK signal instead of Ctrl-C: Remote Configuration. - (line 36) -* breakpoint address adjusted: Breakpoint-related Warnings. - (line 6) -* breakpoint at static probe point: Linespec Locations. (line 65) -* breakpoint commands: Break Commands. (line 6) -* breakpoint commands for GDB/MI: GDB/MI Breakpoint Commands. - (line 6) -* breakpoint commands, in remote protocol: General Query Packets. - (line 983) -* breakpoint conditions: Conditions. (line 6) -* breakpoint kinds, ARM: ARM Breakpoint Kinds. - (line 6) -* breakpoint kinds, MIPS: MIPS Breakpoint Kinds. - (line 6) -* breakpoint lists: Breakpoints. (line 45) -* breakpoint numbers: Breakpoints. (line 38) -* breakpoint on events: Breakpoints. (line 30) -* breakpoint on memory address: Breakpoints. (line 17) -* breakpoint on variable modification: Breakpoints. (line 17) -* breakpoint ranges: Breakpoints. (line 45) -* breakpoint subroutine, remote: Stub Contents. (line 31) -* breakpointing Ada elaboration code: Stopping Before Main Program. - (line 6) -* breakpoints: Breakpoints. (line 6) -* breakpoints and tasks, in Ada: Ada Tasks. (line 135) -* breakpoints and threads: Thread-Specific Breakpoints. - (line 10) -* breakpoints at functions matching a regexp: Set Breaks. (line 90) -* breakpoints in guile: Breakpoints In Guile. - (line 6) -* breakpoints in overlays: Overlay Commands. (line 91) -* breakpoints in python: Breakpoints In Python. - (line 6) -* breakpoints, multiple locations: Set Breaks. (line 200) -* bs packet: Packets. (line 102) -* bug criteria: Bug Criteria. (line 6) -* bug reports: Bug Reporting. (line 6) -* bugs in GDB: GDB Bugs. (line 6) -* build ID sections: Separate Debug Files. - (line 95) -* build ID, and separate debugging files: Separate Debug Files. - (line 6) -* building GDB, requirements for: Requirements. (line 6) -* built-in simulator target: Target Commands. (line 73) -* builtin Go functions: Go. (line 31) -* builtin Go types: Go. (line 28) -* C and C++: C. (line 6) -* C and C++ checks: C Checks. (line 6) -* C and C++ constants: C Constants. (line 6) -* C and C++ defaults: C Defaults. (line 6) -* C and C++ operators: C Operators. (line 6) -* c packet: Packets. (line 109) -* C packet: Packets. (line 118) -* C++: C. (line 10) -* C++ compilers: C Plus Plus Expressions. - (line 8) -* C++ demangling: Debugging C Plus Plus. - (line 36) -* C++ exception handling: Debugging C Plus Plus. - (line 20) -* C++ overload debugging info: Debugging Output. (line 147) -* C++ scope resolution: Variables. (line 90) -* C++ symbol decoding style: Print Settings. (line 529) -* C++ symbol display: Debugging C Plus Plus. - (line 40) -* caching data of targets: Caching Target Data. - (line 6) -* caching of bfd objects: File Caching. (line 6) -* caching of opened files: File Caching. (line 6) -* call dummy stack unwinding: Calling. (line 36) -* call dummy stack unwinding on unhandled exception.: Calling. - (line 47) -* call overloaded functions: C Plus Plus Expressions. - (line 26) -* call stack: Stack. (line 9) -* call stack traces: Backtrace. (line 6) -* call-clobbered registers: Registers. (line 106) -* caller-saved registers: Registers. (line 106) -* calling functions: Calling. (line 6) -* calling functions in the program, disabling: Calling. (line 59) -* calling make: Shell Commands. (line 21) -* case sensitivity in symbol names: Symbols. (line 27) -* case-insensitive symbol names: Symbols. (line 27) -* casts, in expressions: Expressions. (line 26) -* casts, to view memory: Expressions. (line 41) -* catch Ada exceptions: Set Catchpoints. (line 66) -* catch Ada exceptions when handled: Set Catchpoints. (line 92) -* catch syscalls from inferior, remote request: General Query Packets. - (line 401) -* catchpoints: Breakpoints. (line 30) -* catchpoints, setting: Set Catchpoints. (line 6) -* change GDB's working directory: Working Directory. (line 32) -* change inferior's working directory: Working Directory. (line 13) -* character sets: Character Sets. (line 6) -* charset: Character Sets. (line 6) -* checkpoint: Checkpoint/Restart. (line 6) -* checkpoints and process id: Checkpoint/Restart. (line 76) -* checks, range: Type Checking. (line 44) -* checks, type: Checks. (line 23) -* checksum, for GDB remote: Overview. (line 21) -* choosing target byte order: Byte Order. (line 6) -* circular trace buffer: Starting and Stopping Trace Experiments. - (line 80) -* clearing breakpoints, watchpoints, catchpoints: Delete Breaks. - (line 6) -* close, file-i/o system call: close. (line 6) -* closest symbol and offset for an address: Symbols. (line 95) -* code address and its source line: Machine Code. (line 28) -* code compression, MIPS: MIPS. (line 49) -* COFF/PE exported symbols: Debugging Output. (line 50) -* collected data discarded: Starting and Stopping Trace Experiments. - (line 6) -* colon, doubled as scope operator: M2 Scope. (line 6) -* colon-colon, context for variables/functions: Variables. (line 44) -* colors: Output Styling. (line 6) -* command editing: Readline Bare Essentials. - (line 6) -* command files: Command Files. (line 6) -* command history: Command History. (line 6) -* command hooks: Hooks. (line 6) -* command interpreters: Interpreters. (line 6) -* command line editing: Editing. (line 6) -* command options: Command Options. (line 6) -* command options, boolean: Command Options. (line 21) -* command options, raw input: Command Options. (line 13) -* command scripts, debugging: Messages/Warnings. (line 65) -* command tracing: Messages/Warnings. (line 60) -* commands for C++: Debugging C Plus Plus. - (line 6) -* commands in guile: Commands In Guile. (line 6) -* commands in python: Commands In Python. (line 6) -* commands to access guile: Guile Commands. (line 6) -* commands to access python: Python Commands. (line 6) -* comment: Command Syntax. (line 37) -* COMMON blocks, Fortran: Special Fortran Commands. - (line 9) -* common targets: Target Commands. (line 46) -* compatibility, GDB/MI and CLI: GDB/MI Compatibility with CLI. - (line 6) -* compilation directory: Source Path. (line 40) -* compile C++ type conversion: Compiling and Injecting Code. - (line 90) -* compile command debugging info: Compiling and Injecting Code. - (line 82) -* compile command driver filename override: Compiling and Injecting Code. - (line 300) -* compile command options override: Compiling and Injecting Code. - (line 125) -* compiling code: Compiling and Injecting Code. - (line 6) -* completion: Completion. (line 6) -* completion of Guile commands: Commands In Guile. (line 100) -* completion of Python commands: Commands In Python. (line 70) -* completion of quoted strings: Completion. (line 83) -* completion of structure field names: Completion. (line 135) -* completion of union field names: Completion. (line 135) -* compressed debug sections: Requirements. (line 110) -* conditional breakpoints: Conditions. (line 6) -* conditional tracepoints: Tracepoint Conditions. - (line 6) -* configuring GDB: Running Configure. (line 6) -* confirmation: Messages/Warnings. (line 49) -* connection timeout, for remote TCP target: Remote Configuration. - (line 147) -* console i/o as part of file-i/o: Console I/O. (line 6) -* console interpreter: Interpreters. (line 21) -* console output in GDB/MI: GDB/MI Output Syntax. - (line 106) -* constants, in file-i/o protocol: Constants. (line 6) -* continuing: Continuing and Stepping. - (line 6) -* continuing threads: Thread Stops. (line 6) -* control C, and remote debugging: Bootstrapping. (line 25) -* controlling terminal: Input/Output. (line 23) -* convenience functions: Convenience Funs. (line 6) -* convenience functions in python: Functions In Python. - (line 6) -* convenience variables: Convenience Vars. (line 6) -* convenience variables for tracepoints: Tracepoint Variables. - (line 6) -* convenience variables, and trace state variables: Trace State Variables. - (line 17) -* convenience variables, initializing: Convenience Vars. (line 42) -* core dump file: Files. (line 6) -* core dump file target: Target Commands. (line 54) -* crash of debugger: Bug Criteria. (line 9) -* CRC algorithm definition: Separate Debug Files. - (line 140) -* CRC of memory block, remote request: General Query Packets. - (line 65) -* CRIS: CRIS. (line 6) -* CRIS mode: CRIS. (line 26) -* CRIS version: CRIS. (line 10) -* Ctrl-BREAK, MS-Windows: Cygwin Native. (line 9) -* ctrl-c message, in file-i/o protocol: The Ctrl-C Message. (line 6) -* current Ada task ID: Ada Tasks. (line 105) -* current directory: Source Path. (line 40) -* current Go package: Go. (line 11) -* current thread: Threads. (line 29) -* current thread, remote request: General Query Packets. - (line 55) -* custom JIT debug info: Custom Debug Info. (line 6) -* Cygwin DLL, debugging: Cygwin Native. (line 60) -* Cygwin-specific commands: Cygwin Native. (line 6) -* D: D. (line 6) -* d packet: Packets. (line 127) -* D packet: Packets. (line 134) -* Darwin: Darwin. (line 6) -* data breakpoints: Breakpoints. (line 17) -* data manipulation, in GDB/MI: GDB/MI Data Manipulation. - (line 6) -* dcache line-size: Caching Target Data. - (line 60) -* dcache size: Caching Target Data. - (line 57) -* dead names, GNU Hurd: Hurd Native. (line 84) -* debug expression parser: Debugging Output. (line 152) -* debug formats and C++: C Plus Plus Expressions. - (line 8) -* debug link sections: Separate Debug Files. - (line 79) -* debug remote protocol: Debugging Output. (line 159) -* debugger crash: Bug Criteria. (line 9) -* debugging agent: In-Process Agent. (line 6) -* debugging C++ programs: C Plus Plus Expressions. - (line 8) -* debugging information directory, global: Separate Debug Files. - (line 6) -* debugging information in separate files: Separate Debug Files. - (line 6) -* debugging libthread_db: Threads. (line 331) -* debugging multiple processes: Forks. (line 55) -* debugging optimized code: Optimized Code. (line 6) -* debugging stub, example: Remote Stub. (line 6) -* debugging target: Targets. (line 6) -* debugging the Cygwin DLL: Cygwin Native. (line 60) -* decimal floating point format: Decimal Floating Point. - (line 6) -* default behavior of commands, changing: Command Settings. (line 6) -* default collection action: Tracepoint Actions. (line 142) -* default data directory: Data Files. (line 19) -* default settings, changing: Command Settings. (line 6) -* default source path substitution: Source Path. (line 149) -* default system root: Files. (line 453) -* define trace state variable, remote request: Tracepoint Packets. - (line 121) -* defining macros interactively: Macros. (line 59) -* definition of a macro, showing: Macros. (line 47) -* delete breakpoints: Delete Breaks. (line 41) -* deleting breakpoints, watchpoints, catchpoints: Delete Breaks. - (line 6) -* deliver a signal to a program: Signaling. (line 6) -* demangle: Symbols. (line 114) -* demangler crashes: Maintenance Commands. - (line 146) -* demangler crashes <1>: Maintenance Commands. - (line 173) -* demangler crashes <2>: Maintenance Commands. - (line 197) -* demangling C++ names: Print Settings. (line 510) -* deprecated commands: Maintenance Commands. - (line 160) -* derived type of an object, printing: Print Settings. (line 541) -* descriptor tables display: DJGPP Native. (line 24) -* detach from task, GNU Hurd: Hurd Native. (line 59) -* detach from thread, GNU Hurd: Hurd Native. (line 109) -* direct memory access (DMA) on MS-DOS: DJGPP Native. (line 74) -* directories for source files: Source Path. (line 6) -* directory, compilation: Source Path. (line 40) -* directory, current: Source Path. (line 40) -* disable address space randomization, remote request: General Query Packets. - (line 84) -* disabling calling functions in the program: Calling. (line 59) -* disassembler options: Machine Code. (line 222) -* disconnected tracing: Starting and Stopping Trace Experiments. - (line 45) -* displaced stepping debugging info: Debugging Output. (line 75) -* displaced stepping support: Maintenance Commands. - (line 112) -* displaced stepping, and process record and replay: Process Record and Replay. - (line 96) -* display command history: Command History. (line 95) -* display derived types: Print Settings. (line 541) -* display disabled out of scope: Auto Display. (line 86) -* display GDB copyright: Help. (line 158) -* display of expressions: Auto Display. (line 6) -* display remote monitor communications: Target Commands. (line 107) -* display remote packets: Debugging Output. (line 159) -* DJGPP debugging: DJGPP Native. (line 6) -* DLLs with no debugging symbols: Non-debug DLL Symbols. - (line 6) -* do not print frame arguments: Print Settings. (line 154) -* documentation: Formatting Documentation. - (line 22) -* don't repeat command: Define. (line 111) -* don't repeat Guile command: Commands In Guile. (line 67) -* don't repeat Python command: Commands In Python. (line 42) -* DOS file-name semantics of file names.: Files. (line 476) -* DOS serial data link, remote debugging: DJGPP Native. (line 118) -* DOS serial port status: DJGPP Native. (line 139) -* DPMI: DJGPP Native. (line 6) -* dprintf: Dynamic Printf. (line 6) -* dump all data collected at tracepoint: tdump. (line 6) -* dump core from inferior: Core File Generation. - (line 6) -* dump data to a file: Dump/Restore Files. (line 6) -* dump/restore files: Dump/Restore Files. (line 6) -* DVC register: PowerPC Embedded. (line 6) -* DWARF compilation units cache: Maintenance Commands. - (line 394) -* DWARF DIEs: Debugging Output. (line 56) -* DWARF frame unwinders: Maintenance Commands. - (line 408) -* DWARF Line Tables: Debugging Output. (line 61) -* DWARF Reading: Debugging Output. (line 68) -* DWARF-2 CFI and CRIS: CRIS. (line 18) -* dynamic linking: Files. (line 123) -* dynamic printf: Dynamic Printf. (line 6) -* dynamic varobj: GDB/MI Variable Objects. - (line 166) -* editing: Editing. (line 15) -* editing command lines: Readline Bare Essentials. - (line 6) -* editing source files: Edit. (line 6) -* eight-bit characters in strings: Print Settings. (line 455) -* elaboration phase: Starting. (line 92) -* ELinOS system-wide configuration script: System-wide Configuration Scripts. - (line 15) -* Emacs: Emacs. (line 6) -* empty response, for unsupported packets: Overview. (line 97) -* enable/disable a breakpoint: Disabling. (line 6) -* enabling and disabling probes: Static Probe Points. - (line 52) -* entering numbers: Numbers. (line 6) -* environment (of your program): Environment. (line 6) -* errno values, in file-i/o protocol: Errno Values. (line 6) -* error on valid input: Bug Criteria. (line 12) -* event debugging info: Debugging Output. (line 81) -* event designators: Event Designators. (line 6) -* event handling: Set Catchpoints. (line 6) -* examine process image: Process Information. - (line 6) -* examining data: Data. (line 6) -* examining memory: Memory. (line 9) -* exception handlers: Set Catchpoints. (line 6) -* exceptions, guile: Guile Exception Handling. - (line 6) -* exceptions, python: Exception Handling. (line 6) -* exec events, remote reply: Stop Reply Packets. (line 141) -* executable file: Files. (line 16) -* executable file target: Target Commands. (line 50) -* executable file, for remote target: Remote Configuration. - (line 102) -* execute commands from a file: Command Files. (line 17) -* execute forward or backward in time: Reverse Execution. (line 92) -* execute remote command, remote request: General Query Packets. - (line 536) -* execution, foreground, background and asynchronous: Background Execution. - (line 6) -* exit status of shell commands: Convenience Vars. (line 187) -* exiting GDB: Quitting GDB. (line 6) -* expand macro once: Macros. (line 38) -* expanding preprocessor macros: Macros. (line 29) -* explicit locations: Explicit Locations. (line 6) -* explore type: Data. (line 234) -* explore value: Data. (line 227) -* exploring hierarchical data structures: Data. (line 125) -* expression debugging info: Debugging Output. (line 86) -* expression parser, debugging info: Debugging Output. (line 152) -* expressions: Expressions. (line 6) -* expressions in Ada: Ada. (line 11) -* expressions in C or C++: C. (line 6) -* expressions in C++: C Plus Plus Expressions. - (line 6) -* expressions in Modula-2: Modula-2. (line 12) -* extend GDB for remote targets: Connecting. (line 272) -* extending GDB: Extending GDB. (line 6) -* extra signal information: Signals. (line 156) -* F packet: Packets. (line 150) -* F reply packet: The F Reply Packet. (line 6) -* F request packet: The F Request Packet. - (line 6) -* fast tracepoints: Set Tracepoints. (line 24) -* fast tracepoints, setting: Create and Delete Tracepoints. - (line 50) -* fatal signal: Bug Criteria. (line 9) -* fatal signals: Signals. (line 15) -* features of the remote protocol: General Query Packets. - (line 589) -* file name canonicalization: Files. (line 520) -* file transfer: File Transfer. (line 6) -* file transfer, remote protocol: Host I/O Packets. (line 6) -* file-i/o examples: File-I/O Examples. (line 6) -* file-i/o overview: File-I/O Overview. (line 6) -* File-I/O remote protocol extension: File-I/O Remote Protocol Extension. - (line 6) -* file-i/o reply packet: The F Reply Packet. (line 6) -* file-i/o request packet: The F Request Packet. - (line 6) -* filename-display: Backtrace. (line 202) -* find trace snapshot: tfind. (line 6) -* flinching: Messages/Warnings. (line 49) -* float promotion: ABI. (line 34) -* floating point: Floating Point Hardware. - (line 6) -* floating point registers: Registers. (line 15) -* floating point, MIPS remote: MIPS Embedded. (line 13) -* focus of debugging: Threads. (line 29) -* foo: Symbol Errors. (line 54) -* foreground execution: Background Execution. - (line 6) -* fork events, remote reply: Stop Reply Packets. (line 104) -* fork, debugging programs which call: Forks. (line 6) -* format options: Print Settings. (line 6) -* formatted output: Output Formats. (line 6) -* Fortran: Summary. (line 40) -* Fortran Defaults: Fortran Defaults. (line 6) -* Fortran modules, information about: Symbols. (line 555) -* Fortran operators and expressions: Fortran Operators. (line 6) -* Fortran-specific support in GDB: Fortran. (line 6) -* FR-V shared-library debugging: Debugging Output. (line 193) -* frame debugging info: Debugging Output. (line 101) -* frame decorator api: Frame Decorator API. - (line 6) -* frame filters api: Frame Filter API. (line 6) -* frame information, printing: Print Settings. (line 314) -* frame level: Frames. (line 28) -* frame number: Frames. (line 28) -* frame pointer: Frames. (line 21) -* frame pointer register: Registers. (line 31) -* frame, definition: Frames. (line 6) -* frameless execution: Frames. (line 34) -* frames in guile: Frames In Guile. (line 6) -* frames in python: Frames In Python. (line 6) -* free memory information (MS-DOS): DJGPP Native. (line 19) -* FreeBSD: FreeBSD. (line 6) -* FreeBSD LWP debug messages: Debugging Output. (line 92) -* FreeBSD native target debug messages: Debugging Output. (line 97) -* fstat, file-i/o system call: stat/fstat. (line 6) -* Fujitsu: Remote Stub. (line 68) -* full symbol tables, listing GDB's internal: Symbols. (line 645) -* function call arguments, optimized out: Backtrace. (line 133) -* function entry/exit, wrong values of variables: Variables. (line 106) -* functions and variables by Fortran module: Symbols. (line 555) -* functions without line info, and stepping: Continuing and Stepping. - (line 92) -* g packet: Packets. (line 155) -* G packet: Packets. (line 183) -* g++, GNU C++ compiler: C. (line 10) -* garbled pointers: DJGPP Native. (line 42) -* GCC and C++: C Plus Plus Expressions. - (line 8) -* GDB bugs, reporting: Bug Reporting. (line 6) -* GDB internal error: Maintenance Commands. - (line 197) -* gdb module: Basic Python. (line 28) -* gdb objects: GDB Scheme Data Types. - (line 6) -* GDB reference card: Formatting Documentation. - (line 6) -* GDB startup: Startup. (line 6) -* GDB version number: Help. (line 148) -* gdb.ini: Startup. (line 69) -* gdb.printing: gdb.printing. (line 6) -* gdb.prompt: gdb.prompt. (line 6) -* gdb.types: gdb.types. (line 6) -* gdb.Value: Values From Inferior. - (line 6) -* GDB/MI development: GDB/MI Development and Front Ends. - (line 6) -* GDB/MI General Design: GDB/MI General Design. - (line 6) -* GDB/MI, async records: GDB/MI Async Records. - (line 6) -* GDB/MI, breakpoint commands: GDB/MI Breakpoint Commands. - (line 6) -* GDB/MI, compatibility with CLI: GDB/MI Compatibility with CLI. - (line 6) -* GDB/MI, data manipulation: GDB/MI Data Manipulation. - (line 6) -* GDB/MI, input syntax: GDB/MI Input Syntax. - (line 6) -* GDB/MI, its purpose: GDB/MI. (line 36) -* GDB/MI, output syntax: GDB/MI Output Syntax. - (line 6) -* GDB/MI, result records: GDB/MI Result Records. - (line 6) -* GDB/MI, simple examples: GDB/MI Simple Examples. - (line 6) -* GDB/MI, stream records: GDB/MI Stream Records. - (line 6) -* gdbarch debugging info: Debugging Output. (line 23) -* GDBHISTFILE, environment variable: Command History. (line 26) -* GDBHISTSIZE, environment variable: Command History. (line 45) -* gdbserver, command-line arguments: Server. (line 34) -* gdbserver, connecting: Connecting. (line 6) -* gdbserver, search path for libthread_db: Server. (line 254) -* gdbserver, send all debug output to a single file: Server. (line 148) -* gdbserver, target extended-remote mode: Connecting. (line 6) -* gdbserver, target remote mode: Connecting. (line 6) -* gdbserver, types of connections: Connecting. (line 6) -* GDT: DJGPP Native. (line 24) -* get thread information block address: General Query Packets. - (line 303) -* get thread-local storage address, remote request: General Query Packets. - (line 271) -* gettimeofday, file-i/o system call: gettimeofday. (line 6) -* getting structure elements using gdb.Field objects as subscripts: Values From Inferior. - (line 40) -* global debugging information directories: Separate Debug Files. - (line 6) -* global thread identifier (GDB): Threads. (line 88) -* global thread number: Threads. (line 88) -* GNAT descriptive types: Ada Glitches. (line 57) -* GNAT encoding: Ada Glitches. (line 57) -* GNU C++: C. (line 10) -* GNU Emacs: Emacs. (line 6) -* GNU Hurd debugging: Hurd Native. (line 6) -* GNU/Hurd debug messages: Debugging Output. (line 106) -* GNU/Linux LWP debug messages: Debugging Output. (line 121) -* GNU/Linux namespaces debug messages: Debugging Output. (line 125) -* Go (programming language): Go. (line 6) -* guile api: Guile API. (line 6) -* guile architectures: Architectures In Guile. - (line 6) -* guile auto-loading: Guile Auto-loading. (line 6) -* guile commands: Guile Commands. (line 6) -* guile commands <1>: Commands In Guile. (line 6) -* guile configuration: Guile Configuration. - (line 6) -* guile exceptions: Guile Exception Handling. - (line 6) -* guile gdb module: Basic Guile. (line 37) -* guile iterators: Iterators In Guile. (line 6) -* guile modules: Guile Modules. (line 6) -* guile pagination: Basic Guile. (line 6) -* guile parameters: Parameters In Guile. - (line 6) -* guile pretty printing api: Guile Pretty Printing API. - (line 6) -* guile scripting: Guile. (line 6) -* guile scripts directory: Guile Introduction. (line 16) -* guile stdout: Basic Guile. (line 6) -* guile, working with types: Types In Guile. (line 6) -* guile, working with values from inferior: Values From Inferior In Guile. - (line 6) -* H packet: Packets. (line 193) -* handling signals: Signals. (line 27) -* hardware breakpoints: Set Breaks. (line 61) -* hardware debug registers: Maintenance Commands. - (line 454) -* hardware watchpoints: Set Watchpoints. (line 31) -* hash mark while downloading: Target Commands. (line 98) -* heuristic-fence-post (Alpha, MIPS): MIPS. (line 14) -* history events: Event Designators. (line 8) -* history expansion: History Interaction. - (line 6) -* history expansion, turn on/off: Command History. (line 70) -* history file: Command History. (line 26) -* history number: Value History. (line 13) -* history of values printed by GDB: Value History. (line 6) -* history size: Command History. (line 45) -* history substitution: Command History. (line 26) -* hooks, for commands: Hooks. (line 6) -* hooks, post-command: Hooks. (line 11) -* hooks, pre-command: Hooks. (line 6) -* host character set: Character Sets. (line 6) -* Host I/O, remote protocol: Host I/O Packets. (line 6) -* how many arguments (user-defined commands): Define. (line 25) -* HPPA support: HPPA. (line 6) -* i packet: Packets. (line 207) -* I packet: Packets. (line 212) -* i/o: Input/Output. (line 6) -* I/O registers (Atmel AVR): AVR. (line 10) -* i386: Remote Stub. (line 56) -* i386-stub.c: Remote Stub. (line 56) -* IDT: DJGPP Native. (line 24) -* ignore count (of breakpoint): Conditions. (line 79) -* in-process agent protocol: In-Process Agent Protocol. - (line 6) -* incomplete type: Symbols. (line 346) -* indentation in structure display: Print Settings. (line 417) -* index files: Index Files. (line 6) -* index section format: Index Section Format. - (line 6) -* inferior: Inferiors and Programs. - (line 13) -* inferior debugging info: Debugging Output. (line 110) -* inferior events in Python: Events In Python. (line 6) -* inferior functions, calling: Calling. (line 6) -* inferior tty: Input/Output. (line 44) -* inferiors in Python: Inferiors In Python. - (line 6) -* infinite recursion in user-defined commands: Define. (line 128) -* info for known .debug_gdb_scripts-loaded scripts: Maintenance Commands. - (line 321) -* info for known object files: Maintenance Commands. - (line 306) -* info line, repeated calls: Machine Code. (line 40) -* info proc cmdline: Process Information. - (line 41) -* info proc cwd: Process Information. - (line 45) -* info proc exe: Process Information. - (line 49) -* info proc files: Process Information. - (line 53) -* information about static tracepoint markers: Listing Static Tracepoint Markers. - (line 6) -* information about tracepoints: Listing Tracepoints. - (line 6) -* inheritance: Debugging C Plus Plus. - (line 26) -* init file: Startup. (line 11) -* init file name: Startup. (line 69) -* initial frame: Frames. (line 12) -* initialization file, readline: Readline Init File. (line 6) -* injecting code: Compiling and Injecting Code. - (line 6) -* inline functions, debugging: Inline Functions. (line 6) -* innermost frame: Frames. (line 12) -* input syntax for GDB/MI: GDB/MI Input Syntax. - (line 6) -* installation: Installing GDB. (line 6) -* instructions, assembly: Machine Code. (line 43) -* integral datatypes, in file-i/o protocol: Integral Datatypes. - (line 6) -* Intel: Remote Stub. (line 56) -* Intel disassembly flavor: Machine Code. (line 237) -* Intel Memory Protection Extensions (MPX).: i386. (line 21) -* Intel MPX boundary violations: Signals. (line 197) -* Intel Processor Trace: Process Record and Replay. - (line 75) -* interaction, readline: Readline Interaction. - (line 6) -* internal commands: Maintenance Commands. - (line 6) -* internal errors, control of GDB behavior: Maintenance Commands. - (line 197) -* internal GDB breakpoints: Set Breaks. (line 374) -* interrupt: Quitting GDB. (line 13) -* interrupt debuggee on MS-Windows: Cygwin Native. (line 9) -* interrupt remote programs: Remote Configuration. - (line 36) -* interrupt remote programs <1>: Remote Configuration. - (line 108) -* interrupting remote programs: Connecting. (line 239) -* interrupting remote targets: Bootstrapping. (line 25) -* interrupts (remote protocol): Interrupts. (line 6) -* invalid input: Bug Criteria. (line 16) -* invoke another interpreter: Interpreters. (line 39) -* ipa protocol commands: IPA Protocol Commands. - (line 6) -* ipa protocol objects: IPA Protocol Objects. - (line 6) -* isatty, file-i/o system call: isatty. (line 6) -* JIT compilation interface: JIT Interface. (line 6) -* JIT debug info reader: Custom Debug Info. (line 6) -* just-in-time compilation: JIT Interface. (line 6) -* just-in-time compilation, debugging messages: Debugging Output. - (line 117) -* k packet: Packets. (line 216) -* kernel crash dump: BSD libkvm Interface. - (line 6) -* kernel memory image: BSD libkvm Interface. - (line 6) -* kill ring: Readline Killing Commands. - (line 18) -* killing text: Readline Killing Commands. - (line 6) -* languages: Languages. (line 6) -* last tracepoint number: Create and Delete Tracepoints. - (line 122) -* latest breakpoint: Set Breaks. (line 6) -* lazy strings in guile: Lazy Strings In Guile. - (line 6) -* lazy strings in python: Lazy Strings In Python. - (line 6) -* LDT: DJGPP Native. (line 24) -* leaving GDB: Quitting GDB. (line 6) -* libkvm: BSD libkvm Interface. - (line 6) -* library list format, remote protocol: Library List Format. - (line 6) -* library list format, remote protocol <1>: Library List Format for SVR4 Targets. - (line 6) -* limit hardware breakpoints and watchpoints: Remote Configuration. - (line 79) -* limit hardware watchpoints length: Remote Configuration. - (line 91) -* limit on number of printed array elements: Print Settings. (line 141) -* limits, in file-i/o protocol: Limits. (line 6) -* line tables in python: Line Tables In Python. - (line 6) -* line tables, listing GDB's internal: Symbols. (line 692) -* linespec locations: Linespec Locations. (line 6) -* Linux lightweight processes: Debugging Output. (line 121) -* list active threads, remote request: General Query Packets. - (line 238) -* list of supported file-i/o calls: List of Supported Calls. - (line 6) -* list output in GDB/MI: GDB/MI Output Syntax. - (line 117) -* list, how many lines to display: List. (line 30) -* listing GDB's internal line tables: Symbols. (line 692) -* listing GDB's internal symbol tables: Symbols. (line 645) -* listing machine instructions: Machine Code. (line 43) -* listing mapped overlays: Overlay Commands. (line 60) -* lists of breakpoints: Breakpoints. (line 45) -* load address, overlay's: How Overlays Work. (line 6) -* load shared library: Files. (line 327) -* load symbols from memory: Files. (line 193) -* local socket, target remote: Connecting. (line 140) -* local variables: Symbols. (line 415) -* locate address: Output Formats. (line 35) -* location: Specify Location. (line 6) -* lock scheduler: All-Stop Mode. (line 37) -* log output in GDB/MI: GDB/MI Output Syntax. - (line 113) -* logging file name: Logging Output. (line 12) -* logging GDB output: Logging Output. (line 6) -* lseek flags, in file-i/o protocol: Lseek Flags. (line 6) -* lseek, file-i/o system call: lseek. (line 6) -* m packet: Packets. (line 239) -* M packet: Packets. (line 259) -* m680x0: Remote Stub. (line 59) -* m68k-stub.c: Remote Stub. (line 59) -* Mach-O symbols processing: Debugging Output. (line 130) -* machine instructions: Machine Code. (line 43) -* macro definition, showing: Macros. (line 47) -* macro expansion, showing the results of preprocessor: Macros. - (line 29) -* macros, example of debugging with: Macros. (line 83) -* macros, from debug info: Macros. (line 47) -* macros, user-defined: Macros. (line 59) -* mailing lists: GDB/MI Development and Front Ends. - (line 78) -* maintenance commands: Maintenance Commands. - (line 6) -* Man pages: Man Pages. (line 6) -* managing frame filters: Frame Filter Management. - (line 6) -* manual overlay debugging: Overlay Commands. (line 23) -* map an overlay: Overlay Commands. (line 30) -* mapinfo list, QNX Neutrino: Process Information. - (line 130) -* mapped address: How Overlays Work. (line 6) -* mapped overlays: How Overlays Work. (line 6) -* markers, static tracepoints: Set Tracepoints. (line 28) -* maximum value for offset of closest symbol: Print Settings. - (line 70) -* member functions: C Plus Plus Expressions. - (line 16) -* memory address space mappings: Process Information. - (line 80) -* memory map format: Memory Map Format. (line 6) -* memory region attributes: Memory Region Attributes. - (line 6) -* memory tracing: Breakpoints. (line 17) -* memory transfer, in file-i/o protocol: Memory Transfer. (line 6) -* memory used by commands: Maintenance Commands. - (line 555) -* memory used for symbol tables: Files. (line 315) -* memory, alignment and size of remote accesses: Packets. (line 247) -* memory, viewing as typed object: Expressions. (line 41) -* mi interpreter: Interpreters. (line 26) -* mi1 interpreter: Interpreters. (line 37) -* mi2 interpreter: Interpreters. (line 34) -* mi3 interpreter: Interpreters. (line 31) -* minimal language: Unsupported Languages. - (line 6) -* minimal symbol dump: Symbols. (line 619) -* Minimal symbols and DLLs: Non-debug DLL Symbols. - (line 6) -* MIPS addresses, masking: MIPS. (line 80) -* MIPS remote floating point: MIPS Embedded. (line 13) -* MIPS stack: MIPS. (line 6) -* miscellaneous settings: Other Misc Settings. - (line 6) -* MMX registers (x86): Registers. (line 76) -* mode_t values, in file-i/o protocol: mode_t Values. (line 6) -* Modula-2: Summary. (line 29) -* Modula-2 built-ins: Built-In Func/Proc. (line 6) -* Modula-2 checks: M2 Checks. (line 6) -* Modula-2 constants: Built-In Func/Proc. (line 114) -* Modula-2 defaults: M2 Defaults. (line 6) -* Modula-2 operators: M2 Operators. (line 6) -* Modula-2 types: M2 Types. (line 6) -* Modula-2, deviations from: Deviations. (line 6) -* Modula-2, GDB support: Modula-2. (line 6) -* module functions and variables: Symbols. (line 555) -* modules: Symbols. (line 547) -* monitor commands, for gdbserver: Server. (line 218) -* Motorola 680x0: Remote Stub. (line 59) -* MS Windows debugging: Cygwin Native. (line 6) -* MS-DOS system info: DJGPP Native. (line 19) -* MS-DOS-specific commands: DJGPP Native. (line 6) -* multiple locations, breakpoints: Set Breaks. (line 200) -* multiple processes: Forks. (line 6) -* multiple targets: Active Targets. (line 6) -* multiple threads: Threads. (line 6) -* multiple threads, backtrace: Backtrace. (line 97) -* multiple-symbols menu: Ambiguous Expressions. - (line 51) -* multiprocess extensions, in remote protocol: General Query Packets. - (line 913) -* name a thread: Threads. (line 247) -* names of symbols: Symbols. (line 14) -* namespace in C++: C Plus Plus Expressions. - (line 20) -* native Cygwin debugging: Cygwin Native. (line 6) -* native DJGPP debugging: DJGPP Native. (line 6) -* native script auto-loading: Auto-loading sequences. - (line 6) -* native target: Target Commands. (line 85) -* negative breakpoint numbers: Set Breaks. (line 374) -* never read symbols: Files. (line 101) -* New SYSTAG message: Threads. (line 35) -* new user interface: Interpreters. (line 68) -* Newlib OS ABI and its influence on the longjmp handling: ABI. - (line 11) -* Nios II architecture: Nios II. (line 6) -* no debug info functions: Calling. (line 78) -* no debug info variables: Variables. (line 142) -* non-member C++ functions, set breakpoint in: Set Breaks. (line 113) -* non-stop mode: Non-Stop Mode. (line 6) -* non-stop mode, and process record and replay: Process Record and Replay. - (line 101) -* non-stop mode, and set displaced-stepping: Maintenance Commands. - (line 129) -* non-stop mode, remote request: General Query Packets. - (line 379) -* noninvasive task options: Hurd Native. (line 72) -* notation, readline: Readline Bare Essentials. - (line 6) -* notational conventions, for GDB/MI: GDB/MI. (line 52) -* notification packets: Notification Packets. - (line 6) -* notify output in GDB/MI: GDB/MI Output Syntax. - (line 102) -* NULL elements in arrays: Print Settings. (line 408) -* number of array elements to print: Print Settings. (line 141) -* number representation: Numbers. (line 6) -* numbers for breakpoints: Breakpoints. (line 38) -* object files, relocatable, reading symbols from: Files. (line 146) -* Objective-C: Objective-C. (line 6) -* Objective-C, classes and selectors: Symbols. (line 570) -* Objective-C, print objects: The Print Command with Objective-C. - (line 6) -* OBJFILE-gdb.gdb: objfile-gdbdotext file. - (line 6) -* OBJFILE-gdb.py: objfile-gdbdotext file. - (line 6) -* OBJFILE-gdb.scm: objfile-gdbdotext file. - (line 6) -* objfiles in guile: Objfiles In Guile. (line 6) -* objfiles in python: Objfiles In Python. (line 6) -* observer debugging info: Debugging Output. (line 142) -* octal escapes in strings: Print Settings. (line 455) -* online documentation: Help. (line 6) -* opaque data types: Symbols. (line 582) -* open flags, in file-i/o protocol: Open Flags. (line 6) -* open, file-i/o system call: open. (line 6) -* OpenCL C: OpenCL C. (line 6) -* OpenCL C Datatypes: OpenCL C Datatypes. (line 6) -* OpenCL C Expressions: OpenCL C Expressions. - (line 6) -* OpenCL C Operators: OpenCL C Operators. (line 6) -* OpenRISC 1000: OpenRISC 1000. (line 6) -* operate-and-get-next: Editing. (line 32) -* operating system information: Operating System Information. - (line 6) -* operating system information, process list: Process list. (line 6) -* optimized code, debugging: Optimized Code. (line 6) -* optimized code, wrong values of variables: Variables. (line 106) -* optimized out value in guile: Values From Inferior In Guile. - (line 102) -* optimized out value in Python: Values From Inferior. - (line 70) -* optimized out, in backtrace: Backtrace. (line 133) -* optional debugging messages: Debugging Output. (line 6) -* optional warnings: Messages/Warnings. (line 6) -* OS ABI: ABI. (line 11) -* OS information: OS Information. (line 6) -* out-of-line single-stepping: Maintenance Commands. - (line 112) -* outermost frame: Frames. (line 12) -* output formats: Output Formats. (line 6) -* output syntax of GDB/MI: GDB/MI Output Syntax. - (line 6) -* overlay area: How Overlays Work. (line 6) -* overlay example program: Overlay Sample Program. - (line 6) -* overlays: Overlays. (line 6) -* overlays, setting breakpoints in: Overlay Commands. (line 91) -* overloaded functions, calling: C Plus Plus Expressions. - (line 26) -* overloaded functions, overload resolution: Debugging C Plus Plus. - (line 59) -* overloading in C++: Debugging C Plus Plus. - (line 15) -* overloading, Ada: Overloading support for Ada. - (line 6) -* p packet: Packets. (line 271) -* P packet: Packets. (line 284) -* packet acknowledgment, for GDB remote: Packet Acknowledgment. - (line 6) -* packet size, remote protocol: General Query Packets. - (line 819) -* packets, notification: Notification Packets. - (line 6) -* packets, reporting on stdout: Debugging Output. (line 159) -* packets, tracepoint: Tracepoint Packets. (line 6) -* page size: Screen Size. (line 6) -* page tables display (MS-DOS): DJGPP Native. (line 55) -* pagination: Screen Size. (line 6) -* parameters in guile: Parameters In Guile. - (line 6) -* parameters in python: Parameters In Python. - (line 6) -* partial symbol dump: Symbols. (line 619) -* partial symbol tables, listing GDB's internal: Symbols. (line 645) -* Pascal: Summary. (line 35) -* Pascal objects, static members display: Print Settings. (line 570) -* Pascal support in GDB, limitations: Pascal. (line 6) -* pass signals to inferior, remote request: General Query Packets. - (line 440) -* patching binaries: Patching. (line 6) -* patching object files: Files. (line 26) -* pause current task (GNU Hurd): Hurd Native. (line 48) -* pause current thread (GNU Hurd): Hurd Native. (line 90) -* pauses in output: Screen Size. (line 6) -* pending breakpoints: Set Breaks. (line 245) -* physical address from linear address: DJGPP Native. (line 80) -* physname: Debugging Output. (line 41) -* pipe, target remote to: Connecting. (line 227) -* pipes: Starting. (line 64) -* pointer values, in file-i/o protocol: Pointer Values. (line 6) -* pointer, finding referent: Print Settings. (line 80) -* port rights, GNU Hurd: Hurd Native. (line 84) -* port sets, GNU Hurd: Hurd Native. (line 84) -* PowerPC architecture: PowerPC. (line 6) -* prefix for data files: Data Files. (line 6) -* prefix for executable and shared library file names: Files. - (line 386) -* premature return from system calls: Interrupted System Calls. - (line 6) -* preprocessor macro expansion, showing the results of: Macros. - (line 29) -* pretty print arrays: Print Settings. (line 115) -* pretty print C++ virtual function tables: Print Settings. (line 581) -* pretty-printer commands: Pretty-Printer Commands. - (line 6) -* print all frame argument values: Print Settings. (line 154) -* print an Objective-C object description: The Print Command with Objective-C. - (line 11) -* print array indexes: Print Settings. (line 125) -* print frame argument values for scalars only: Print Settings. - (line 154) -* print list of auto-loaded canned sequences of commands scripts: Auto-loading sequences. - (line 21) -* print list of auto-loaded Guile scripts: Guile Auto-loading. - (line 23) -* print list of auto-loaded Python scripts: Python Auto-loading. - (line 23) -* print messages on inferior start and exit: Inferiors and Programs. - (line 126) -* print messages on thread start and exit: Threads. (line 272) -* print messages when symbols are loaded: Symbols. (line 600) -* print settings: Print Settings. (line 6) -* print structures in indented form: Print Settings. (line 417) -* print/don't print memory addresses: Print Settings. (line 13) -* printing byte arrays: Output Formats. (line 60) -* printing data: Data. (line 6) -* printing frame argument values: Print Settings. (line 154) -* printing frame information: Print Settings. (line 314) -* printing nested structures: Print Settings. (line 362) -* printing strings: Output Formats. (line 60) -* probe static tracepoint marker: Create and Delete Tracepoints. - (line 75) -* probing markers, static tracepoints: Set Tracepoints. (line 28) -* process detailed status information: Process Information. - (line 88) -* process ID: Process Information. - (line 25) -* process info via /proc: Process Information. - (line 6) -* process list, QNX Neutrino: Process Information. - (line 126) -* process record and replay: Process Record and Replay. - (line 6) -* process status register: Registers. (line 31) -* processes, multiple: Forks. (line 6) -* procfs API calls: Process Information. - (line 105) -* profiling GDB: Maintenance Commands. - (line 438) -* program counter register: Registers. (line 31) -* program entry point: Backtrace. (line 155) -* programming in guile: Guile API. (line 6) -* programming in python: Python API. (line 6) -* progspaces in guile: Progspaces In Guile. - (line 6) -* progspaces in python: Progspaces In Python. - (line 6) -* prompt: Prompt. (line 6) -* protocol basics, file-i/o: Protocol Basics. (line 6) -* protocol, GDB remote serial: Overview. (line 14) -* protocol-specific representation of datatypes, in file-i/o protocol: Protocol-specific Representation of Datatypes. - (line 6) -* python api: Python API. (line 6) -* Python architectures: Architectures In Python. - (line 6) -* Python auto-loading: Python Auto-loading. - (line 6) -* python commands: Python Commands. (line 6) -* python commands <1>: Commands In Python. (line 6) -* python convenience functions: Functions In Python. - (line 6) -* python directory: Python. (line 12) -* python exceptions: Exception Handling. (line 6) -* python finish breakpoints: Finish Breakpoints in Python. - (line 6) -* python functions: Basic Python. (line 28) -* python module: Basic Python. (line 28) -* python modules: Python modules. (line 6) -* python pagination: Basic Python. (line 6) -* python parameters: Parameters In Python. - (line 6) -* python pretty printing api: Pretty Printing API. - (line 6) -* python scripting: Python. (line 6) -* python stdout: Basic Python. (line 6) -* Python, working with types: Types In Python. (line 6) -* python, working with values from inferior: Values From Inferior. - (line 6) -* q packet: Packets. (line 296) -* Q packet: Packets. (line 296) -* QAllow packet: General Query Packets. - (line 44) -* qAttached packet: General Query Packets. - (line 1381) -* qC packet: General Query Packets. - (line 55) -* QCatchSyscalls packet: General Query Packets. - (line 401) -* qCRC packet: General Query Packets. - (line 65) -* QDisableRandomization packet: General Query Packets. - (line 84) -* QEnvironmentHexEncoded packet: General Query Packets. - (line 144) -* QEnvironmentReset packet: General Query Packets. - (line 197) -* QEnvironmentUnset packet: General Query Packets. - (line 173) -* qfThreadInfo packet: General Query Packets. - (line 238) -* qGetTIBAddr packet: General Query Packets. - (line 303) -* qGetTLSAddr packet: General Query Packets. - (line 271) -* QNonStop packet: General Query Packets. - (line 379) -* qOffsets packet: General Query Packets. - (line 342) -* qP packet: General Query Packets. - (line 369) -* QPassSignals packet: General Query Packets. - (line 440) -* QProgramSignals packet: General Query Packets. - (line 469) -* qRcmd packet: General Query Packets. - (line 536) -* qSearch memory packet: General Query Packets. - (line 558) -* QSetWorkingDir packet: General Query Packets. - (line 219) -* QStartNoAckMode packet: General Query Packets. - (line 575) -* QStartupWithShell packet: General Query Packets. - (line 114) -* qsThreadInfo packet: General Query Packets. - (line 238) -* qSupported packet: General Query Packets. - (line 589) -* qSymbol packet: General Query Packets. - (line 1033) -* qTBuffer packet: Tracepoint Packets. (line 393) -* QTBuffer size packet: Tracepoint Packets. (line 406) -* QTDisable packet: Tracepoint Packets. (line 209) -* QTDisconnected packet: Tracepoint Packets. (line 228) -* QTDP packet: Tracepoint Packets. (line 10) -* QTDPsrc packet: Tracepoint Packets. (line 90) -* QTDV packet: Tracepoint Packets. (line 121) -* QTEnable packet: Tracepoint Packets. (line 204) -* qTfP packet: Tracepoint Packets. (line 335) -* QTFrame packet: Tracepoint Packets. (line 133) -* qTfSTM packet: Tracepoint Packets. (line 352) -* qTfV packet: Tracepoint Packets. (line 343) -* QThreadEvents packet: General Query Packets. - (line 509) -* qThreadExtraInfo packet: General Query Packets. - (line 1076) -* QTinit packet: Tracepoint Packets. (line 214) -* qTMinFTPILen packet: Tracepoint Packets. (line 171) -* QTNotes packet: Tracepoint Packets. (line 411) -* qTP packet: Tracepoint Packets. (line 307) -* QTro packet: Tracepoint Packets. (line 217) -* QTSave packet: Tracepoint Packets. (line 387) -* qTsP packet: Tracepoint Packets. (line 336) -* qTsSTM packet: Tracepoint Packets. (line 352) -* QTStart packet: Tracepoint Packets. (line 195) -* qTStatus packet: Tracepoint Packets. (line 234) -* qTSTMat packet: Tracepoint Packets. (line 381) -* QTStop packet: Tracepoint Packets. (line 201) -* qTsV packet: Tracepoint Packets. (line 344) -* qTV packet: Tracepoint Packets. (line 318) -* qualified thread ID: Threads. (line 52) -* query attached, remote request: General Query Packets. - (line 1381) -* quotes in commands: Completion. (line 83) -* quoting Ada internal identifiers: Additions to Ada. (line 76) -* quoting names: Symbols. (line 14) -* qXfer packet: General Query Packets. - (line 1113) -* r packet: Packets. (line 300) -* R packet: Packets. (line 305) -* range checking: Type Checking. (line 45) -* range stepping: Continuing and Stepping. - (line 217) -* ranged breakpoint: PowerPC Embedded. (line 33) -* ranges of breakpoints: Breakpoints. (line 45) -* Ravenscar Profile: Ravenscar Profile. (line 6) -* raw printing: Output Formats. (line 76) -* read special object, remote request: General Query Packets. - (line 1113) -* read, file-i/o system call: read. (line 6) -* read-only sections: Files. (line 265) -* reading symbols from relocatable object files: Files. (line 146) -* reading symbols immediately: Files. (line 94) -* readline: Editing. (line 6) -* Readline application name: Editing. (line 29) -* receive rights, GNU Hurd: Hurd Native. (line 84) -* recent tracepoint number: Create and Delete Tracepoints. - (line 122) -* record aggregates (Ada): Omissions from Ada. (line 44) -* record mode: Process Record and Replay. - (line 19) -* record serial communications on file: Remote Configuration. - (line 64) -* recording a session script: Bug Reporting. (line 108) -* recording inferior's execution and replaying it: Process Record and Replay. - (line 6) -* recordings in python: Recordings In Python. - (line 6) -* redirection: Input/Output. (line 6) -* reference card: Formatting Documentation. - (line 6) -* reference declarations: C Plus Plus Expressions. - (line 50) -* register packet format, MIPS: MIPS Register packet Format. - (line 6) -* registers: Registers. (line 6) -* regular expression: Set Breaks. (line 90) -* reloading the overlay table: Overlay Commands. (line 52) -* relocatable object files, reading symbols from: Files. (line 146) -* remote async notification debugging info: Debugging Output. - (line 136) -* remote connection commands: Connecting. (line 120) -* remote connection without stubs: Server. (line 6) -* remote debugging: Remote Debugging. (line 6) -* remote debugging, connecting: Connecting. (line 6) -* remote debugging, detach and program exit: Connecting. (line 19) -* remote debugging, symbol files: Connecting. (line 90) -* remote debugging, types of connections: Connecting. (line 6) -* remote memory comparison: Memory. (line 142) -* remote packets, enabling and disabling: Remote Configuration. - (line 159) -* remote programs, interrupting: Connecting. (line 239) -* remote protocol debugging: Debugging Output. (line 159) -* remote protocol, binary data: Overview. (line 63) -* remote protocol, field separator: Overview. (line 55) -* remote query requests: General Query Packets. - (line 6) -* remote serial debugging summary: Debug Session. (line 6) -* remote serial debugging, overview: Remote Stub. (line 14) -* remote serial protocol: Overview. (line 14) -* remote serial stub: Stub Contents. (line 6) -* remote serial stub list: Remote Stub. (line 53) -* remote serial stub, initialization: Stub Contents. (line 10) -* remote serial stub, main routine: Stub Contents. (line 15) -* remote stub, example: Remote Stub. (line 6) -* remote stub, support routines: Bootstrapping. (line 6) -* remote target: Target Commands. (line 58) -* remote target, file transfer: File Transfer. (line 6) -* remote target, limit break- and watchpoints: Remote Configuration. - (line 79) -* remote target, limit watchpoints length: Remote Configuration. - (line 91) -* remote timeout: Remote Configuration. - (line 72) -* remove actions from a tracepoint: Tracepoint Actions. (line 21) -* remove duplicate history: Command History. (line 54) -* rename, file-i/o system call: rename. (line 6) -* Renesas: Remote Stub. (line 62) -* repeated array elements: Print Settings. (line 348) -* repeating command sequences: Command Syntax. (line 41) -* repeating commands: Command Syntax. (line 21) -* replay log events, remote reply: Stop Reply Packets. (line 70) -* replay mode: Process Record and Replay. - (line 10) -* reporting bugs in GDB: GDB Bugs. (line 6) -* reprint the last value: Data. (line 112) -* reprint the last value <1>: Compiling and Injecting Code. - (line 74) -* reset environment, remote request: General Query Packets. - (line 197) -* resources used by commands: Maintenance Commands. - (line 509) -* response time, MIPS debugging: MIPS. (line 10) -* restart: Checkpoint/Restart. (line 6) -* restore data from a file: Dump/Restore Files. (line 6) -* restrictions on Go expressions: Go. (line 35) -* result records in GDB/MI: GDB/MI Result Records. - (line 6) -* resume threads of multiple processes simultaneously: All-Stop Mode. - (line 54) -* resuming execution: Continuing and Stepping. - (line 6) -* returning from a function: Returning. (line 6) -* reverse execution: Reverse Execution. (line 6) -* rewind program state: Checkpoint/Restart. (line 6) -* run to first instruction: Starting. (line 114) -* run to main procedure: Starting. (line 81) -* run until specified location: Continuing and Stepping. - (line 124) -* running: Starting. (line 6) -* running programs backward: Reverse Execution. (line 6) -* s packet: Packets. (line 312) -* S packet: Packets. (line 321) -* S12Z support: S12Z. (line 6) -* save breakpoints to a file for future sessions: Save Breakpoints. - (line 9) -* save command history: Command History. (line 36) -* save GDB output to a file: Logging Output. (line 6) -* save tracepoints for future sessions: save tracepoints. (line 6) -* scheduler locking mode: All-Stop Mode. (line 37) -* scope: M2 Scope. (line 6) -* screen size: Screen Size. (line 6) -* scripting commands: Command Files. (line 6) -* scripting with guile: Guile. (line 6) -* scripting with python: Python. (line 6) -* search for a thread: Threads. (line 258) -* search path for libthread_db: Threads. (line 293) -* searching memory: Searching Memory. (line 6) -* searching memory, in remote debugging: General Query Packets. - (line 558) -* searching source files: Search. (line 6) -* section offsets, remote request: General Query Packets. - (line 342) -* segment descriptor tables: DJGPP Native. (line 24) -* select Ctrl-C, BREAK or BREAK-g: Remote Configuration. - (line 108) -* select trace snapshot: tfind. (line 6) -* selected frame: Stack. (line 19) -* selecting guile pretty-printers: Selecting Guile Pretty-Printers. - (line 6) -* selecting python pretty-printers: Selecting Pretty-Printers. - (line 6) -* self tests: Maintenance Commands. - (line 360) -* self tests <1>: Maintenance Commands. - (line 366) -* semaphores on static probe points: Static Probe Points. - (line 20) -* send command to remote monitor: Connecting. (line 272) -* send command to simulator: Embedded Processors. - (line 9) -* send interrupt-sequence on start: Remote Configuration. - (line 121) -* send rights, GNU Hurd: Hurd Native. (line 84) -* send the output of a gdb command to a shell command: Shell Commands. - (line 25) -* sending files to remote systems: File Transfer. (line 6) -* separate debug sections: MiniDebugInfo. (line 6) -* separate debugging information files: Separate Debug Files. - (line 6) -* sequence-id, for GDB remote: Overview. (line 30) -* serial connections, debugging: Debugging Output. (line 159) -* serial line, target remote: Connecting. (line 129) -* serial protocol, GDB remote: Overview. (line 14) -* server prefix: Server Prefix. (line 6) -* server, command prefix: Command History. (line 20) -* set ABI for MIPS: MIPS. (line 32) -* set breakpoints in many functions: Set Breaks. (line 90) -* set breakpoints on all functions: Set Breaks. (line 117) -* set environment variable, remote request: General Query Packets. - (line 144) -* set fast tracepoint: Create and Delete Tracepoints. - (line 50) -* set inferior controlling terminal: Input/Output. (line 44) -* set static tracepoint: Create and Delete Tracepoints. - (line 75) -* set tdesc filename: Retrieving Descriptions. - (line 18) -* set tracepoint: Create and Delete Tracepoints. - (line 6) -* set working directory, remote request: General Query Packets. - (line 219) -* setting variables: Assignment. (line 6) -* setting watchpoints: Set Watchpoints. (line 6) -* settings: Command Settings. (line 39) -* SH: Remote Stub. (line 62) -* sh-stub.c: Remote Stub. (line 62) -* shared libraries: Files. (line 287) -* shared library events, remote reply: Stop Reply Packets. (line 65) -* shell command, exit code: Convenience Vars. (line 187) -* shell command, exit signal: Convenience Vars. (line 187) -* shell escape: Shell Commands. (line 10) -* show all convenience functions: Convenience Funs. (line 228) -* show all user variables and functions: Convenience Vars. (line 37) -* show inferior's working directory: Working Directory. (line 27) -* show last commands: Command History. (line 95) -* show tdesc filename: Retrieving Descriptions. - (line 25) -* signals: Signals. (line 6) -* signals the inferior may see, remote request: General Query Packets. - (line 469) -* SIGQUIT signal, dump core of GDB: Maintenance Commands. - (line 169) -* SingleKey keymap name: TUI Single Key Mode. - (line 53) -* size of remote memory accesses: Packets. (line 247) -* size of screen: Screen Size. (line 6) -* skipping over files via glob-style patterns: Skipping Over Functions and Files. - (line 55) -* skipping over functions and files: Skipping Over Functions and Files. - (line 6) -* skipping over functions via regular expressions: Skipping Over Functions and Files. - (line 68) -* snapshot of a process: Checkpoint/Restart. (line 6) -* software watchpoints: Set Watchpoints. (line 31) -* source file and line of a symbol: Print Settings. (line 50) -* source line and its code address: Machine Code. (line 6) -* source location: Specify Location. (line 6) -* source path: Source Path. (line 6) -* Sparc: Remote Stub. (line 65) -* sparc-stub.c: Remote Stub. (line 65) -* Sparc64 support: Sparc64. (line 6) -* sparcl-stub.c: Remote Stub. (line 68) -* SparcLite: Remote Stub. (line 68) -* Special Fortran commands: Special Fortran Commands. - (line 6) -* specifying location: Specify Location. (line 6) -* SSE registers (x86): Registers. (line 76) -* stack frame: Frames. (line 6) -* stack on Alpha: MIPS. (line 6) -* stack on MIPS: MIPS. (line 6) -* stack pointer register: Registers. (line 31) -* stacking targets: Active Targets. (line 6) -* standard registers: Registers. (line 31) -* start a new independent interpreter: Interpreters. (line 52) -* start a new trace experiment: Starting and Stopping Trace Experiments. - (line 6) -* starting: Starting. (line 6) -* startup code, and backtrace: Backtrace. (line 155) -* startup with shell, remote request: General Query Packets. - (line 114) -* stat, file-i/o system call: stat/fstat. (line 6) -* static members of C++ objects: Print Settings. (line 559) -* static members of Pascal objects: Print Settings. (line 570) -* static probe point, DTrace: Static Probe Points. - (line 6) -* static probe point, SystemTap: Static Probe Points. - (line 6) -* static tracepoints: Set Tracepoints. (line 28) -* static tracepoints, in remote protocol: General Query Packets. - (line 961) -* static tracepoints, setting: Create and Delete Tracepoints. - (line 75) -* status of trace data collection: Starting and Stopping Trace Experiments. - (line 27) -* status output in GDB/MI: GDB/MI Output Syntax. - (line 94) -* stepping: Continuing and Stepping. - (line 6) -* stepping and signal handlers: Signals. (line 106) -* stepping into functions with no line info: Continuing and Stepping. - (line 92) -* stop a running trace experiment: Starting and Stopping Trace Experiments. - (line 16) -* stop on C++ exceptions: Set Catchpoints. (line 16) -* stop reply packets: Stop Reply Packets. (line 6) -* stopped threads: Thread Stops. (line 6) -* stream records in GDB/MI: GDB/MI Stream Records. - (line 6) -* string tracing, in remote protocol: General Query Packets. - (line 978) -* struct gdb_reader_funcs: Writing JIT Debug Info Readers. - (line 22) -* struct gdb_symbol_callbacks: Writing JIT Debug Info Readers. - (line 43) -* struct gdb_unwind_callbacks: Writing JIT Debug Info Readers. - (line 43) -* struct return convention: i386. (line 7) -* struct stat, in file-i/o protocol: struct stat. (line 6) -* struct timeval, in file-i/o protocol: struct timeval. (line 6) -* struct/union returned in registers: i386. (line 7) -* structure field name completion: Completion. (line 135) -* stub example, remote debugging: Remote Stub. (line 6) -* stupid questions: Messages/Warnings. (line 49) -* styling: Output Styling. (line 6) -* Super-H: Super-H. (line 6) -* supported GDB/MI features, list: GDB/MI Support Commands. - (line 57) -* supported packets, remote query: General Query Packets. - (line 589) -* switching threads: Threads. (line 6) -* switching threads automatically: All-Stop Mode. (line 28) -* symbol cache size: Symbols. (line 698) -* symbol cache, flushing: Symbols. (line 714) -* symbol cache, printing its contents: Symbols. (line 706) -* symbol cache, printing usage statistics: Symbols. (line 710) -* symbol decoding style, C++: Print Settings. (line 529) -* symbol dump: Symbols. (line 619) -* symbol file functions: Debugging Output. (line 205) -* symbol files, remote debugging: Connecting. (line 90) -* symbol from address: Symbols. (line 95) -* symbol lookup: Debugging Output. (line 198) -* symbol lookup, remote request: General Query Packets. - (line 1033) -* symbol names: Symbols. (line 14) -* symbol table: Files. (line 6) -* symbol table creation: Debugging Output. (line 210) -* symbol tables in guile: Symbol Tables In Guile. - (line 6) -* symbol tables in python: Symbol Tables In Python. - (line 6) -* symbol tables, listing GDB's internal: Symbols. (line 645) -* symbol, source file and line: Print Settings. (line 50) -* symbols in guile: Symbols In Guile. (line 6) -* symbols in python: Symbols In Python. (line 6) -* symbols, never read: Files. (line 101) -* symbols, reading from relocatable object files: Files. (line 146) -* symbols, reading immediately: Files. (line 94) -* Synopsys ARC: ARC. (line 6) -* syscall DSO: Files. (line 193) -* system calls and thread breakpoints: Interrupted System Calls. - (line 6) -* system root, alternate: Files. (line 386) -* system, file-i/o system call: system. (line 6) -* system-wide configuration scripts: System-wide Configuration Scripts. - (line 6) -* system-wide init file: System-wide configuration. - (line 6) -* t packet: Packets. (line 331) -* T packet: Packets. (line 336) -* T packet reply: Stop Reply Packets. (line 26) -* tail call frames, debugging: Tail Call Frames. (line 6) -* target architecture: Targets. (line 17) -* target byte order: Byte Order. (line 6) -* target character set: Character Sets. (line 6) -* target debugging info: Debugging Output. (line 217) -* target descriptions: Target Descriptions. - (line 6) -* target descriptions, AArch64 features: AArch64 Features. (line 6) -* target descriptions, ARC Features: ARC Features. (line 6) -* target descriptions, ARM features: ARM Features. (line 6) -* target descriptions, enum types: Enum Target Types. (line 6) -* target descriptions, i386 features: i386 Features. (line 6) -* target descriptions, inclusion: Target Description Format. - (line 53) -* target descriptions, M68K features: M68K Features. (line 6) -* target descriptions, MicroBlaze features: MicroBlaze Features. - (line 6) -* target descriptions, MIPS features: MIPS Features. (line 6) -* target descriptions, NDS32 features: NDS32 Features. (line 6) -* target descriptions, Nios II features: Nios II Features. (line 6) -* target descriptions, OpenRISC 1000 features: OpenRISC 1000 Features. - (line 6) -* target descriptions, PowerPC features: PowerPC Features. (line 6) -* target descriptions, predefined types: Predefined Target Types. - (line 6) -* target descriptions, RISC-V Features: RISC-V Features. (line 6) -* target descriptions, RX Features: RX Features. (line 6) -* target descriptions, S/390 features: S/390 and System z Features. - (line 6) -* target descriptions, sparc32 features: Sparc Features. (line 6) -* target descriptions, sparc64 features: Sparc Features. (line 6) -* target descriptions, standard features: Standard Target Features. - (line 6) -* target descriptions, System z features: S/390 and System z Features. - (line 6) -* target descriptions, TIC6x features: TIC6x Features. (line 6) -* target descriptions, TMS320C6x features: TIC6x Features. (line 6) -* target descriptions, XML format: Target Description Format. - (line 6) -* target memory comparison: Memory. (line 142) -* target output in GDB/MI: GDB/MI Output Syntax. - (line 110) -* target stack description: Maintenance Commands. - (line 341) -* target-assisted range stepping: Continuing and Stepping. - (line 217) -* task attributes (GNU Hurd): Hurd Native. (line 48) -* task breakpoints, in Ada: Ada Tasks. (line 135) -* task exception port, GNU Hurd: Hurd Native. (line 67) -* task suspend count: Hurd Native. (line 59) -* task switching with program using Ravenscar Profile: Ravenscar Profile. - (line 10) -* TCP port, target remote: Connecting. (line 166) -* temporarily change settings: Command Settings. (line 39) -* terminal: Input/Output. (line 6) -* Text User Interface: TUI. (line 6) -* thread attributes info, remote request: General Query Packets. - (line 1076) -* thread breakpoints: Thread-Specific Breakpoints. - (line 10) -* thread breakpoints and system calls: Interrupted System Calls. - (line 6) -* thread create event, remote reply: Stop Reply Packets. (line 152) -* thread create/exit events, remote request: General Query Packets. - (line 509) -* thread default settings, GNU Hurd: Hurd Native. (line 130) -* thread exit event, remote reply: Stop Reply Packets. (line 181) -* thread ID lists: Threads. (line 65) -* thread identifier (GDB): Threads. (line 47) -* thread identifier (system): Threads. (line 35) -* thread info (Solaris): Threads. (line 167) -* thread information, remote request: General Query Packets. - (line 369) -* thread list format: Thread List Format. (line 6) -* thread number, per inferior: Threads. (line 47) -* thread properties, GNU Hurd: Hurd Native. (line 90) -* thread suspend count, GNU Hurd: Hurd Native. (line 109) -* THREAD-ID, in remote protocol: Packets. (line 20) -* threads and watchpoints: Set Watchpoints. (line 179) -* threads in python: Threads In Python. (line 6) -* threads of execution: Threads. (line 6) -* threads, automatic switching: All-Stop Mode. (line 28) -* threads, continuing: Thread Stops. (line 6) -* threads, stopped: Thread Stops. (line 6) -* time of command execution: Maintenance Commands. - (line 559) -* timeout for commands: Maintenance Commands. - (line 610) -* timeout for serial communications: Remote Configuration. - (line 72) -* timeout, for remote target connection: Remote Configuration. - (line 147) -* timestamping debugging info: Debugging Output. (line 224) -* trace experiment, status of: Starting and Stopping Trace Experiments. - (line 27) -* trace file format: Trace File Format. (line 6) -* trace files: Trace Files. (line 6) -* trace state variable value, remote request: Tracepoint Packets. - (line 318) -* trace state variables: Trace State Variables. - (line 6) -* traceback: Backtrace. (line 6) -* traceframe info format: Traceframe Info Format. - (line 6) -* tracepoint actions: Tracepoint Actions. (line 6) -* tracepoint conditions: Tracepoint Conditions. - (line 6) -* tracepoint data, display: tdump. (line 6) -* tracepoint deletion: Create and Delete Tracepoints. - (line 125) -* tracepoint number: Create and Delete Tracepoints. - (line 122) -* tracepoint packets: Tracepoint Packets. (line 6) -* tracepoint pass count: Tracepoint Passcounts. - (line 6) -* tracepoint restrictions: Tracepoint Restrictions. - (line 6) -* tracepoint status, remote request: Tracepoint Packets. (line 307) -* tracepoint variables: Tracepoint Variables. - (line 6) -* tracepoints: Tracepoints. (line 6) -* tracepoints support in gdbserver: Server. (line 272) -* trailing underscore, in Fortran symbols: Fortran. (line 9) -* translating between character sets: Character Sets. (line 6) -* TUI: TUI. (line 6) -* TUI commands: TUI Commands. (line 6) -* TUI configuration variables: TUI Configuration. (line 6) -* TUI key bindings: TUI Keys. (line 6) -* TUI single key mode: TUI Single Key Mode. - (line 6) -* type casting memory: Expressions. (line 41) -* type chain of a data type: Maintenance Commands. - (line 353) -* type checking: Checks. (line 24) -* type conversions in C++: C Plus Plus Expressions. - (line 26) -* type printer: Type Printing API. (line 9) -* type printing API for Python: Type Printing API. (line 6) -* types in guile: Types In Guile. (line 6) -* types in Python: Types In Python. (line 6) -* UDP port, target remote: Connecting. (line 215) -* union field name completion: Completion. (line 135) -* unions in structures, printing: Print Settings. (line 469) -* Unix domain socket: Connecting. (line 140) -* unknown address, locating: Output Formats. (line 35) -* unknown type: Symbols. (line 363) -* unlink, file-i/o system call: unlink. (line 6) -* unlinked object files: Files. (line 26) -* unload symbols from shared libraries: Files. (line 348) -* unmap an overlay: Overlay Commands. (line 39) -* unmapped overlays: How Overlays Work. (line 6) -* unset environment variable, remote request: General Query Packets. - (line 173) -* unset tdesc filename: Retrieving Descriptions. - (line 21) -* unsupported languages: Unsupported Languages. - (line 6) -* unwind stack in called functions: Calling. (line 36) -* unwind stack in called functions with unhandled exceptions: Calling. - (line 47) -* unwinding frames in Python: Unwinding Frames in Python. - (line 6) -* use only software watchpoints: Set Watchpoints. (line 108) -* user registers: Maintenance Commands. - (line 312) -* user-defined command: Define. (line 6) -* user-defined macros: Macros. (line 59) -* user-defined variables: Convenience Vars. (line 6) -* value history: Value History. (line 6) -* values from inferior, in guile: Values From Inferior In Guile. - (line 6) -* values from inferior, with Python: Values From Inferior. - (line 6) -* variable name conflict: Variables. (line 36) -* variable object debugging info: Debugging Output. (line 231) -* variable objects in GDB/MI: GDB/MI Variable Objects. - (line 9) -* variable values, wrong: Variables. (line 106) -* variables, readline: Readline Init File Syntax. - (line 34) -* variables, setting: Assignment. (line 16) -* vAttach packet: Packets. (line 350) -* vCont packet: Packets. (line 368) -* vCont? packet: Packets. (line 435) -* vCtrlC packet: Packets. (line 445) -* vector unit: Vector Unit. (line 6) -* vector, auxiliary: OS Information. (line 9) -* verbose operation: Messages/Warnings. (line 6) -* verify remote memory image: Memory. (line 142) -* verify target memory image: Memory. (line 142) -* vFile packet: Packets. (line 459) -* vFlashDone packet: Packets. (line 498) -* vFlashErase packet: Packets. (line 463) -* vFlashWrite packet: Packets. (line 478) -* vfork events, remote reply: Stop Reply Packets. (line 116) -* vforkdone events, remote reply: Stop Reply Packets. (line 128) -* virtual functions (C++) display: Print Settings. (line 581) -* vKill packet: Packets. (line 505) -* vMustReplyEmpty packet: Packets. (line 517) -* volatile registers: Registers. (line 106) -* vRun packet: Packets. (line 529) -* vStopped packet: Packets. (line 544) -* VTBL display: Print Settings. (line 581) -* watchdog timer: Maintenance Commands. - (line 610) -* watchpoints: Breakpoints. (line 17) -* watchpoints and threads: Set Watchpoints. (line 179) -* where to look for shared libraries: Files. (line 381) -* wild pointer, interpreting: Print Settings. (line 80) -* Wind River Linux system-wide configuration script: System-wide Configuration Scripts. - (line 22) -* word completion: Completion. (line 6) -* working directory: Source Path. (line 40) -* working directory (of your program): Working Directory. (line 6) -* working language: Languages. (line 13) -* write data into object, remote request: General Query Packets. - (line 1338) -* write, file-i/o system call: write. (line 6) -* writing a frame filter: Writing a Frame Filter. - (line 6) -* writing a Guile pretty-printer: Writing a Guile Pretty-Printer. - (line 6) -* writing a pretty-printer: Writing a Pretty-Printer. - (line 6) -* writing convenience functions: Functions In Python. - (line 6) -* writing into corefiles: Patching. (line 6) -* writing into executables: Patching. (line 6) -* writing into executables <1>: Compiling and Injecting Code. - (line 6) -* writing JIT debug info readers: Writing JIT Debug Info Readers. - (line 6) -* writing xmethods in Python: Writing an Xmethod. (line 6) -* wrong values: Variables. (line 106) -* x command, default address: Machine Code. (line 34) -* X packet: Packets. (line 547) -* Xilinx MicroBlaze: MicroBlaze. (line 6) -* XInclude: Target Description Format. - (line 53) -* XMD, Xilinx Microprocessor Debugger: MicroBlaze. (line 6) -* xmethod API: Xmethod API. (line 6) -* xmethods in Python: Xmethods In Python. (line 6) -* XML parser debugging: Debugging Output. (line 237) -* yanking text: Readline Killing Commands. - (line 6) -* z packet: Packets. (line 560) -* Z packets: Packets. (line 560) -* z0 packet: Packets. (line 575) -* Z0 packet: Packets. (line 575) -* z1 packet: Packets. (line 630) -* Z1 packet: Packets. (line 630) -* z2 packet: Packets. (line 651) -* Z2 packet: Packets. (line 651) -* z3 packet: Packets. (line 664) -* Z3 packet: Packets. (line 664) -* z4 packet: Packets. (line 677) -* Z4 packet: Packets. (line 677) - Binary files /tmp/tmpwlqmdap4/HCMjq_z_kj/gdb-9.1/gdb/doc/gdb.info-8 and /tmp/tmpwlqmdap4/bi0oNuAXeo/gdb-10.2/gdb/doc/gdb.info-8 differ diff -Nru gdb-9.1/gdb/doc/gdbinit.5 gdb-10.2/gdb/doc/gdbinit.5 --- gdb-9.1/gdb/doc/gdbinit.5 2020-02-08 12:54:20.000000000 +0000 +++ gdb-10.2/gdb/doc/gdbinit.5 2021-04-25 04:10:45.000000000 +0000 @@ -1,4 +1,4 @@ -.\" Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35) +.\" Automatically generated by Pod::Man 4.11 (Pod::Simple 3.35) .\" .\" Standard preamble: .\" ======================================================================== @@ -54,16 +54,20 @@ .\" Avoid warning from groff about undefined register 'F'. .de IX .. -.if !\nF .nr F 0 -.if \nF>0 \{\ -. de IX -. tm Index:\\$1\t\\n%\t"\\$2" +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" .. -. if !\nF==2 \{\ -. nr % 0 -. nr F 2 +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} . \} .\} +.rr rF .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. @@ -129,7 +133,7 @@ .\" ======================================================================== .\" .IX Title "GDBINIT 5" -.TH GDBINIT 5 "2020-02-08" "gdb-9.1" "GNU Development Tools" +.TH GDBINIT 5 "2021-04-25" "gdb-10.2" "GNU Development Tools" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l @@ -184,7 +188,7 @@ .IX Header "OPTIONS" .SH "SEE ALSO" .IX Header "SEE ALSO" -\&\fIgdb\fR\|(1), \f(CW\*(C`info \-f gdb \-n Startup\*(C'\fR +\&\fBgdb\fR\|(1), \f(CW\*(C`info \-f gdb \-n Startup\*(C'\fR .PP The full documentation for \s-1GDB\s0 is maintained as a Texinfo manual. If the \f(CW\*(C`info\*(C'\fR and \f(CW\*(C`gdb\*(C'\fR programs and \s-1GDB\s0's Texinfo @@ -200,7 +204,7 @@ Richard M. Stallman and Roland H. Pesch, July 1991. .SH "COPYRIGHT" .IX Header "COPYRIGHT" -Copyright (c) 1988\-2020 Free Software Foundation, Inc. +Copyright (c) 1988\-2021 Free Software Foundation, Inc. .PP Permission is granted to copy, distribute and/or modify this document under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.3 or diff -Nru gdb-9.1/gdb/doc/gdbserver.1 gdb-10.2/gdb/doc/gdbserver.1 --- gdb-9.1/gdb/doc/gdbserver.1 2020-02-08 12:54:20.000000000 +0000 +++ gdb-10.2/gdb/doc/gdbserver.1 2021-04-25 04:10:45.000000000 +0000 @@ -1,4 +1,4 @@ -.\" Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35) +.\" Automatically generated by Pod::Man 4.11 (Pod::Simple 3.35) .\" .\" Standard preamble: .\" ======================================================================== @@ -54,16 +54,20 @@ .\" Avoid warning from groff about undefined register 'F'. .de IX .. -.if !\nF .nr F 0 -.if \nF>0 \{\ -. de IX -. tm Index:\\$1\t\\n%\t"\\$2" +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" .. -. if !\nF==2 \{\ -. nr % 0 -. nr F 2 +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} . \} .\} +.rr rF .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. @@ -129,7 +133,7 @@ .\" ======================================================================== .\" .IX Title "GDBSERVER 1" -.TH GDBSERVER 1 "2020-02-08" "gdb-9.1" "GNU Development Tools" +.TH GDBSERVER 1 "2021-04-25" "gdb-10.2" "GNU Development Tools" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l @@ -238,8 +242,8 @@ .PP \&\fBgdbserver\fR can also debug multiple inferiors at once, described in -the \s-1GDB\s0 manual in node \f(CW\*(C`Inferiors and Programs\*(C'\fR -\&\*(-- shell command \f(CW\*(C`info \-f gdb \-n \*(AqInferiors and Programs\*(Aq\*(C'\fR. +the \s-1GDB\s0 manual in node \f(CW\*(C`Inferiors Connections and Programs\*(C'\fR +\&\*(-- shell command \f(CW\*(C`info \-f gdb \-n \*(AqInferiors Connections and Programs\*(Aq\*(C'\fR. In such case use the \f(CW\*(C`extended\-remote\*(C'\fR \s-1GDB\s0 command variant: .PP .Vb 1 @@ -364,7 +368,7 @@ Richard M. Stallman and Roland H. Pesch, July 1991. .SH "COPYRIGHT" .IX Header "COPYRIGHT" -Copyright (c) 1988\-2020 Free Software Foundation, Inc. +Copyright (c) 1988\-2021 Free Software Foundation, Inc. .PP Permission is granted to copy, distribute and/or modify this document under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.3 or diff -Nru gdb-9.1/gdb/doc/gdb.texinfo gdb-10.2/gdb/doc/gdb.texinfo --- gdb-9.1/gdb/doc/gdb.texinfo 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/doc/gdb.texinfo 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ \input texinfo @c -*-texinfo-*- -@c Copyright (C) 1988-2020 Free Software Foundation, Inc. +@c Copyright (C) 1988--2021 Free Software Foundation, Inc. @c @c %**start of header @c makeinfo ignores cmds prev to setfilename, so its arg cannot make use @@ -50,7 +50,7 @@ @copying @c man begin COPYRIGHT -Copyright @copyright{} 1988-2020 Free Software Foundation, Inc. +Copyright @copyright{} 1988-2021 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or @@ -108,7 +108,7 @@ @page @ifnottex -@node Top, Summary, (dir), (dir) +@node Top, Summary @top Debugging with @value{GDBN} @@ -120,7 +120,7 @@ @end ifset Version @value{GDBVN}. -Copyright (C) 1988-2020 Free Software Foundation, Inc. +Copyright (C) 1988-2021 Free Software Foundation, Inc. This edition of the GDB manual is dedicated to the memory of Fred Fish. Fred was a long-standing contributor to GDB and to Free @@ -160,7 +160,7 @@ * GDB/MI:: @value{GDBN}'s Machine Interface. * Annotations:: @value{GDBN}'s annotation interface. * JIT Interface:: Using the JIT debugging interface. -* In-Process Agent:: In-Process Agent +* In-process Agent:: In-process Agent * GDB Bugs:: Reporting bugs in @value{GDBN} @@ -557,6 +557,10 @@ of Jeremy Bennett, Franck Jullien, Stefan Wallentowitz and Stafford Horne. +Weimin Pan, David Faust and Jose E. Marchesi contributed support for +the Linux kernel BPF virtual architecture. This work was sponsored by +Oracle. + @node Sample Session @chapter A Sample @value{GDBN} Session @@ -1311,7 +1315,7 @@ @end table @node Startup -@subsection What @value{GDBN} Does During Startup +@subsection What @value{GDBN} Does during Startup @cindex @value{GDBN} startup Here's the description of what @value{GDBN} does during session startup: @@ -1451,9 +1455,10 @@ @itemx !@var{command-string} Invoke a standard shell to execute @var{command-string}. Note that no space is needed between @code{!} and @var{command-string}. -If it exists, the environment variable @code{SHELL} determines which -shell to run. Otherwise @value{GDBN} uses the default shell -(@file{/bin/sh} on Unix systems, @file{COMMAND.COM} on MS-DOS, etc.). +On GNU and Unix systems, the environment variable @code{SHELL}, if it +exists, determines which shell to run. Otherwise @value{GDBN} uses +the default shell (@file{/bin/sh} on GNU and Unix systems, +@file{cmd.exe} on MS-Windows, @file{COMMAND.COM} on MS-DOS, etc.). @end table The utility @code{make} is often needed in development environments. @@ -1577,6 +1582,7 @@ * Command Settings:: How to change default behavior of commands * Completion:: Command completion * Command Options:: Command options +* Command aliases default args:: Automatically prepend default arguments to user-defined aliases * Help:: How to ask @value{GDBN} for help @end menu @@ -1933,7 +1939,7 @@ @end smallexample @node Command Options -@section Command options +@section Command Options @cindex command options Some commands accept options starting with a leading dash. For @@ -1997,6 +2003,89 @@ (For more on using the @code{print} command, see @ref{Data, ,Examining Data}.) +@node Command aliases default args +@section Automatically Prepend Default Arguments to User-Defined Aliases + +You can tell @value{GDBN} to always prepend some default arguments to +the list of arguments provided explicitly by the user when using a +user-defined alias. + +If you repeatedly use the same arguments or options for a command, you +can define an alias for this command and tell @value{GDBN} to +automatically prepend these arguments or options to the list of +arguments you type explicitly when using the alias@footnote{@value{GDBN} +could easily accept default arguments for pre-defined commands and aliases, +but it was deemed this would be confusing, and so is not allowed.}. + +For example, if you often use the command @code{thread apply all} +specifying to work on the threads in ascending order and to continue in case it +encounters an error, you can tell @value{GDBN} to automatically preprend +the @code{-ascending} and @code{-c} options by using: + +@smallexample +(@value{GDBP}) alias thread apply asc-all = thread apply all -ascending -c +@end smallexample + +Once you have defined this alias with its default args, any time you type +the @code{thread apply asc-all} followed by @code{some arguments}, +@value{GDBN} will execute @code{thread apply all -ascending -c some arguments}. + +To have even less to type, you can also define a one word alias: +@smallexample +(@value{GDBP}) alias t_a_c = thread apply all -ascending -c +@end smallexample + +As usual, unambiguous abbreviations can be used for @var{alias} +and @var{default-args}. + +The different aliases of a command do not share their default args. +For example, you define a new alias @code{bt_ALL} showing all possible +information and another alias @code{bt_SMALL} showing very limited information +using: +@smallexample +(@value{GDBP}) alias bt_ALL = backtrace -entry-values both -frame-arg all \ + -past-main -past-entry -full +(@value{GDBP}) alias bt_SMALL = backtrace -entry-values no -frame-arg none \ + -past-main off -past-entry off +@end smallexample + +(For more on using the @code{alias} command, see @ref{Aliases}.) + +Default args are not limited to the arguments and options of @var{command}, +but can specify nested commands if @var{command} accepts such a nested command +as argument. +For example, the below defines @code{faalocalsoftype} that lists the +frames having locals of a certain type, together with the matching +local vars: +@smallexample +(@value{GDBP}) alias faalocalsoftype = frame apply all info locals -q -t +(@value{GDBP}) faalocalsoftype int +#1 0x55554f5e in sleeper_or_burner (v=0xdf50) at sleepers.c:86 +i = 0 +ret = 21845 +@end smallexample + +This is also very useful to define an alias for a set of nested @code{with} +commands to have a particular combination of temporary settings. For example, +the below defines the alias @code{pp10} that pretty prints an expression +argument, with a maximum of 10 elements if the expression is a string or +an array: +@smallexample +(@value{GDBP}) alias pp10 = with print pretty -- with print elements 10 -- print +@end smallexample +This defines the alias @code{pp10} as being a sequence of 3 commands. +The first part @code{with print pretty --} temporarily activates the setting +@code{set print pretty}, then launches the command that follows the separator +@code{--}. +The command following the first part is also a @code{with} command that +temporarily changes the setting @code{set print elements} to 10, then +launches the command that follows the second separator @code{--}. +The third part @code{print} is the command the @code{pp10} alias will launch, +using the temporary values of the settings and the arguments explicitly given +by the user. +For more information about the @code{with} command usage, +see @ref{Command Settings}. + @node Help @section Getting Help @cindex online documentation @@ -2016,7 +2105,7 @@ (@value{GDBP}) help List of classes of commands: -aliases -- Aliases of other commands +aliases -- User-defined aliases of other commands breakpoints -- Making program stop at certain points data -- Examining data files -- Specifying and examining files @@ -2041,8 +2130,11 @@ @item help @var{class} Using one of the general help classes as an argument, you can get a -list of the individual commands in that class. For example, here is the -help display for the class @code{status}: +list of the individual commands in that class. If a command has +aliases, the aliases are given after the command name, separated by +commas. If an alias has default arguments, the full definition of +the alias is given after the first line. +For example, here is the help display for the class @code{status}: @smallexample (@value{GDBP}) help status @@ -2052,9 +2144,14 @@ @c Line break in "show" line falsifies real output, but needed @c to fit in smallbook page size. -info -- Generic command for showing things +info, inf, i -- Generic command for showing things about the program being debugged -show -- Generic command for showing things +info address, iamain -- Describe where symbol SYM is stored. + alias iamain = info address main +info all-registers -- List of all registers and their contents, + for selected stack frame. +... +show, info set -- Generic command for showing things about the debugger Type "help" followed by command name for full @@ -2065,7 +2162,11 @@ @item help @var{command} With a command name as @code{help} argument, @value{GDBN} displays a -short paragraph on how to use that command. +short paragraph on how to use that command. If that command has +one or more aliases, @value{GDBN} will display a first line with +the command name and all its aliases separated by commas. +This first line will be followed by the full definition of all aliases +having default arguments. @kindex apropos @item apropos [-v] @var{regexp} @@ -2086,10 +2187,7 @@ @smallexample @group alias -- Define a new command that is an alias of an existing command -aliases -- Aliases of other commands -d -- Delete some breakpoints or auto-display expressions -del -- Delete some breakpoints or auto-display expressions -delete -- Delete some breakpoints or auto-display expressions +aliases -- User-defined aliases of other commands @end group @end smallexample @@ -2230,7 +2328,7 @@ @end table @node Running -@chapter Running Programs Under @value{GDBN} +@chapter Running Programs under @value{GDBN} When you run a program under @value{GDBN}, you must first generate debugging information when you compile it. @@ -2250,8 +2348,8 @@ * Input/Output:: Your program's input and output * Attach:: Debugging an already-running process * Kill Process:: Killing the child process - -* Inferiors and Programs:: Debugging multiple inferiors and programs +* Inferiors Connections and Programs:: Debugging multiple inferiors + connections and programs * Threads:: Debugging programs with multiple threads * Forks:: Debugging forks * Checkpoint/Restart:: Setting a @emph{bookmark} to return to later @@ -2303,7 +2401,7 @@ @need 2000 @node Starting -@section Starting your Program +@section Starting Your Program @cindex starting @cindex running @@ -2506,27 +2604,28 @@ @itemx set auto-connect-native-target off @itemx show auto-connect-native-target -By default, if not connected to any target yet (e.g., with -@code{target remote}), the @code{run} command starts your program as a -native process under @value{GDBN}, on your local machine. If you're -sure you don't want to debug programs on your local machine, you can -tell @value{GDBN} to not connect to the native target automatically -with the @code{set auto-connect-native-target off} command. +By default, if the current inferior is not connected to any target yet +(e.g., with @code{target remote}), the @code{run} command starts your +program as a native process under @value{GDBN}, on your local machine. +If you're sure you don't want to debug programs on your local machine, +you can tell @value{GDBN} to not connect to the native target +automatically with the @code{set auto-connect-native-target off} +command. -If @code{on}, which is the default, and if @value{GDBN} is not +If @code{on}, which is the default, and if the current inferior is not connected to a target already, the @code{run} command automaticaly connects to the native target, if one is available. -If @code{off}, and if @value{GDBN} is not connected to a target -already, the @code{run} command fails with an error: +If @code{off}, and if the current inferior is not connected to a +target already, the @code{run} command fails with an error: @smallexample (@value{GDBP}) run Don't know how to run. Try "help target". @end smallexample -If @value{GDBN} is already connected to a target, @value{GDBN} always -uses it with the @code{run} command. +If the current inferior is already connected to a target, @value{GDBN} +always uses it with the @code{run} command. In any case, you can explicitly connect to the native target with the @code{target native} command. For example, @@ -2876,7 +2975,7 @@ @end table @node Attach -@section Debugging an Already-running Process +@section Debugging an Already-Running Process @kindex attach @cindex attach @@ -2904,6 +3003,32 @@ the @code{file} command to load the program. @xref{Files, ,Commands to Specify Files}. +@anchor{set exec-file-mismatch} +If the debugger can determine that the executable file running in the +process it is attaching to does not match the current exec-file loaded +by @value{GDBN}, the option @code{exec-file-mismatch} specifies how to +handle the mismatch. @value{GDBN} tries to compare the files by +comparing their build IDs (@pxref{build ID}), if available. + +@table @code +@kindex exec-file-mismatch +@cindex set exec-file-mismatch +@item set exec-file-mismatch @samp{ask|warn|off} + +Whether to detect mismatch between the current executable file loaded +by @value{GDBN} and the executable file used to start the process. If +@samp{ask}, the default, display a warning and ask the user whether to +load the process executable file; if @samp{warn}, just display a +warning; if @samp{off}, don't attempt to detect a mismatch. +If the user confirms loading the process executable file, then its symbols +will be loaded as well. + +@cindex show exec-file-mismatch +@item show exec-file-mismatch +Show the current value of @code{exec-file-mismatch}. + +@end table + The first thing @value{GDBN} does after arranging to debug the specified process is to stop it. You can examine and modify an attached process with all the @value{GDBN} commands that are ordinarily available when @@ -2956,15 +3081,17 @@ reads the symbol table again (while trying to preserve your current breakpoint settings). -@node Inferiors and Programs -@section Debugging Multiple Inferiors and Programs +@node Inferiors Connections and Programs +@section Debugging Multiple Inferiors Connections and Programs @value{GDBN} lets you run and debug multiple programs in a single session. In addition, @value{GDBN} on some systems may let you run several programs simultaneously (otherwise you have to exit from one -before starting another). In the most general case, you can have -multiple threads of execution in each of multiple processes, launched -from multiple executables. +before starting another). On some systems @value{GDBN} may even let +you debug several programs simultaneously on different remote systems. +In the most general case, you can have multiple threads of execution +in each of multiple processes, launched from multiple executables, +running on different machines. @cindex inferior @value{GDBN} represents the state of each program execution with an @@ -2999,6 +3126,11 @@ the target system's inferior identifier @item +the target connection the inferior is bound to, including the unique +connection number assigned by @value{GDBN}, and the protocol used by +the connection. + +@item the name of the executable the inferior is running. @end enumerate @@ -3013,9 +3145,51 @@ @smallexample (@value{GDBP}) info inferiors - Num Description Executable - 2 process 2307 hello -* 1 process 3401 goodbye + Num Description Connection Executable +* 1 process 3401 1 (native) goodbye + 2 process 2307 2 (extended-remote host:10000) hello +@end smallexample + +To find out what open target connections exist at any moment, use +@w{@code{info connections}}: + +@table @code +@kindex info connections [ @var{id}@dots{} ] +@item info connections +Print a list of all open target connections currently being managed by +@value{GDBN}. By default all connections are printed, but the +argument @var{id}@dots{} -- a space separated list of connections +numbers -- can be used to limit the display to just the requested +connections. + +@value{GDBN} displays for each connection (in this order): + +@enumerate +@item +the connection number assigned by @value{GDBN}. + +@item +the protocol used by the connection. + +@item +a textual description of the protocol used by the connection. + +@end enumerate + +@noindent +An asterisk @samp{*} preceding the connection number indicates the +connection of the current inferior. + +For example, +@end table +@c end table here to get a little more width for example + +@smallexample +(@value{GDBP}) info connections + Num What Description +* 1 extended-remote host:10000 Extended remote serial target in gdb-specific protocol + 2 native Native process + 3 core Local core dump file @end smallexample To switch focus between inferiors, use the @code{inferior} command: @@ -3044,13 +3218,22 @@ @table @code @kindex add-inferior -@item add-inferior [ -copies @var{n} ] [ -exec @var{executable} ] +@item add-inferior [ -copies @var{n} ] [ -exec @var{executable} ] [-no-connection ] Adds @var{n} inferiors to be run using @var{executable} as the executable; @var{n} defaults to 1. If no executable is specified, the inferiors begins empty, with no program. You can still assign or change the program assigned to the inferior at any time by using the @code{file} command with the executable name as its argument. +By default, the new inferior begins connected to the same target +connection as the current inferior. For example, if the current +inferior was connected to @code{gdbserver} with @code{target remote}, +then the new inferior will be connected to the same @code{gdbserver} +instance. The @samp{-no-connection} option starts the new inferior +with no connection yet. You can then for example use the @code{target +remote} command to connect to some other @code{gdbserver} instance, +use @code{run} to spawn a local program, etc. + @kindex clone-inferior @item clone-inferior [ -copies @var{n} ] [ @var{infno} ] Adds @var{n} inferiors ready to execute the same program as inferior @@ -3060,15 +3243,15 @@ @smallexample (@value{GDBP}) info inferiors - Num Description Executable -* 1 process 29964 helloworld + Num Description Connection Executable +* 1 process 29964 1 (native) helloworld (@value{GDBP}) clone-inferior Added inferior 2. 1 inferiors added. (@value{GDBP}) info inferiors - Num Description Executable - 2 <null> helloworld -* 1 process 29964 helloworld + Num Description Connection Executable +* 1 process 29964 1 (native) helloworld + 2 <null> 1 (native) helloworld @end smallexample You can now simply switch focus to inferior 2 and run it. @@ -3389,7 +3572,7 @@ @smallexample (@value{GDBP}) info threads - Id Target Id Frame + Id Target Id Frame * 1 process 35 thread 13 main (argc=1, argv=0x7ffffff8) 2 process 35 thread 23 0x34e5 in sigpause () 3 process 35 thread 27 0x34e5 in sigpause () @@ -3514,7 +3697,7 @@ @end smallexample The @code{tfaas} command accepts the same options as the @code{frame -apply} command. @xref{frame apply}. +apply} command. @xref{Frame Apply,,frame apply}. @kindex thread name @cindex name a thread @@ -3721,14 +3904,14 @@ will retain control of all forked processes (including nested forks). You can list the forked processes under the control of @value{GDBN} by using the @w{@code{info inferiors}} command, and switch from one fork -to another by using the @code{inferior} command (@pxref{Inferiors and -Programs, ,Debugging Multiple Inferiors and Programs}). +to another by using the @code{inferior} command (@pxref{Inferiors Connections and +Programs, ,Debugging Multiple Inferiors Connections and Programs}). To quit debugging one of the forked processes, you can either detach from it by using the @w{@code{detach inferiors}} command (allowing it to run independently), or kill it using the @w{@code{kill inferiors}} -command. @xref{Inferiors and Programs, ,Debugging Multiple Inferiors -and Programs}. +command. @xref{Inferiors Connections and Programs, ,Debugging +Multiple Inferiors Connections and Programs}. If you ask to debug a child process and a @code{vfork} is followed by an @code{exec}, @value{GDBN} executes the new target up to the first @@ -4027,7 +4210,7 @@ * Disabling:: Disabling breakpoints * Conditions:: Break conditions * Break Commands:: Breakpoint command lists -* Dynamic Printf:: Dynamic printf +* Dynamic printf:: Dynamic printf * Save Breakpoints:: How to save breakpoints in a file * Static Probe Points:: Listing static probe points * Error in Breakpoints:: ``Cannot insert breakpoints'' @@ -5412,8 +5595,8 @@ end @end smallexample -@node Dynamic Printf -@subsection Dynamic Printf +@node Dynamic printf +@subsection Dynamic printf @cindex dynamic printf @cindex dprintf @@ -5523,7 +5706,7 @@ those locals. If evaluation fails, @value{GDBN} will report an error. @node Save Breakpoints -@subsection How to save breakpoints to a file +@subsection How to Save Breakpoints to a File To save breakpoint definitions to a file use the @w{@code{save breakpoints}} command. @@ -6032,7 +6215,7 @@ @end table @node Skipping Over Functions and Files -@section Skipping Over Functions and Files +@section Skipping over Functions and Files @cindex skipping over functions and files The program you are debugging may contain some functions which are @@ -6466,7 +6649,7 @@ @end smallexample @node Thread Stops -@section Stopping and Starting Multi-thread Programs +@section Stopping and Starting Multi-Thread Programs @cindex stopped threads @cindex threads, stopped @@ -6953,7 +7136,7 @@ @end table @node Reverse Execution -@chapter Running programs backward +@chapter Running Programs Backward @cindex reverse execution @cindex running programs backward @@ -8147,7 +8330,7 @@ @end table @node Frame Info -@section Information About a Frame +@section Information about a Frame There are several other commands to print information about the selected stack frame. @@ -8271,8 +8454,7 @@ @end table @node Frame Apply -@section Applying a Command to Several Frames. -@anchor{frame apply} +@section Applying a Command to Several Frames @kindex frame apply @cindex apply command to several frames @table @code @@ -8404,7 +8586,7 @@ @end smallexample The @code{faas} command accepts the same options as the @code{frame -apply} command. @xref{frame apply}. +apply} command. @xref{Frame Apply,,frame apply}. Note that the command @code{tfaas @var{command}} applies @var{command} on all frames of all threads. See @xref{Threads,,Threads}. @@ -8412,7 +8594,7 @@ @node Frame Filter Management -@section Management of Frame Filters. +@section Management of Frame Filters @cindex managing frame filters Frame filters are Python based utilities to manage and decorate the @@ -8912,7 +9094,7 @@ @end table -@subsection Choosing your Editor +@subsection Choosing Your Editor You can customize @value{GDBN} to use any editor you want @footnote{ The only restriction is that your editor (say @code{ex}), recognizes the @@ -11911,8 +12093,8 @@ This variable contains the address of the thread information block. @item $_inferior -The number of the current inferior. @xref{Inferiors and -Programs, ,Debugging Multiple Inferiors and Programs}. +The number of the current inferior. @xref{Inferiors Connections and +Programs, ,Debugging Multiple Inferiors Connections and Programs}. @item $_thread The thread number of the current thread. @xref{thread numbers}. @@ -12258,6 +12440,7 @@ Print the names and values of all registers, including floating-point and vector registers (in the selected stack frame). +@anchor{info_registers_reggroup} @item info registers @var{reggroup} @dots{} Print the name and value of the registers in each of the specified @var{reggroup}s. The @var{reggroup} can be any of those returned by @@ -12740,7 +12923,7 @@ @c @end table @node Dump/Restore Files -@section Copy Between Memory and a File +@section Copy between Memory and a File @cindex dump/restore files @cindex append data to a file @cindex dump data to a file @@ -13108,7 +13291,7 @@ @value{GDBN} caches data exchanged between the debugger and a target. Each cache is associated with the address space of the inferior. -@xref{Inferiors and Programs}, about inferior and address space. +@xref{Inferiors Connections and Programs}, about inferior and address space. Such caching generally improves performance in remote debugging (@pxref{Remote Debugging}), because it reduces the overhead of the remote protocol by bundling memory reads and writes into large chunks. @@ -15564,7 +15747,7 @@ @end menu @node Setting -@section Switching Between Source Languages +@section Switching between Source Languages There are two ways to control the working language---either have @value{GDBN} set it automatically, or select it manually yourself. You can use the @@ -16441,7 +16624,7 @@ @end table @node Decimal Floating Point -@subsubsection Decimal Floating Point format +@subsubsection Decimal Floating Point Format @cindex decimal floating point format @value{GDBN} can examine, set and perform computations with numbers in @@ -16604,7 +16787,7 @@ @end smallexample @node The Print Command with Objective-C -@subsubsection The Print Command With Objective-C +@subsubsection The Print Command with Objective-C @cindex Objective-C, print objects @kindex print-object @kindex po @r{(@code{print-object})} @@ -17783,7 +17966,7 @@ @end itemize @node Overloading support for Ada -@subsubsection Overloading support for Ada +@subsubsection Overloading Support for Ada @cindex overloading, Ada The debugger supports limited overloading. Given a subprogram call in which @@ -18091,7 +18274,7 @@ @end table @node Ada Tasks and Core Files -@subsubsection Tasking Support when Debugging Core Files +@subsubsection Tasking Support When Debugging Core Files @cindex Ada tasking and core file debugging When inspecting a core file, as opposed to debugging a live program, @@ -18108,7 +18291,7 @@ file before inspecting it with @value{GDBN}. @node Ravenscar Profile -@subsubsection Tasking Support when using the Ravenscar Profile +@subsubsection Tasking Support When Using the Ravenscar Profile @cindex Ravenscar Profile The @dfn{Ravenscar Profile} is a subset of the Ada tasking features, @@ -18137,6 +18320,34 @@ @end table +@cindex Ravenscar thread +When Ravenscar task-switching is enabled, Ravenscar tasks are +announced by @value{GDBN} as if they were threads: + +@smallexample +(gdb) continue +[New Ravenscar Thread 0x2b8f0] +@end smallexample + +Both Ravenscar tasks and the underlying CPU threads will show up in +the output of @code{info threads}: + +@smallexample +(gdb) info threads + Id Target Id Frame + 1 Thread 1 (CPU#0 [running]) simple () at simple.adb:10 + 2 Thread 2 (CPU#1 [running]) 0x0000000000003d34 in __gnat_initialize_cpu_devices () + 3 Thread 3 (CPU#2 [running]) 0x0000000000003d28 in __gnat_initialize_cpu_devices () + 4 Thread 4 (CPU#3 [halted ]) 0x000000000000c6ec in system.task_primitives.operations.idle () +* 5 Ravenscar Thread 0x2b8f0 simple () at simple.adb:10 + 6 Ravenscar Thread 0x2f150 0x000000000000c6ec in system.task_primitives.operations.idle () +@end smallexample + +One known limitation of the Ravenscar support in @value{GDBN} is that +it isn't currently possible to single-step through the runtime +initialization sequence. If you need to debug this code, you should +use @code{set ravenscar task-switching off}. + @node Ada Settings @subsubsection Ada Settings @cindex Ada settings @@ -19337,7 +19548,7 @@ @c @group @node Signaling -@section Giving your Program a Signal +@section Giving Your Program a Signal @cindex deliver a signal to a program @table @code @@ -19573,7 +19784,7 @@ @end table -@subsection Calling functions with no debug info +@subsection Calling Functions with No Debug Info @cindex no debug info functions Sometimes, a function you wish to call is missing debug information. @@ -19677,7 +19888,7 @@ @end table @node Compiling and Injecting Code -@section Compiling and injecting code in @value{GDBN} +@section Compiling and Injecting Code in @value{GDBN} @cindex injecting code @cindex writing into executables @cindex compiling code @@ -19795,7 +20006,7 @@ C@t{++} type conversion. @end table -@subsection Compilation options for the @code{compile} command +@subsection Compilation Options for the @code{compile} Command @value{GDBN} needs to specify the right compilation options for the code to be injected, in part to make its ABI compatible with the inferior @@ -19840,7 +20051,7 @@ use @ref{set debug compile} for that. @end table -@subsection Caveats when using the @code{compile} command +@subsection Caveats When Using the @code{compile} Command There are a few caveats to keep in mind when using the @code{compile} command. As the caveats are different per language, the table below @@ -19997,7 +20208,7 @@ will print to the console. @end table -@subsection Compiler search for the @code{compile} command +@subsection Compiler Search for the @code{compile} Command @value{GDBN} needs to find @value{NGCC} for the inferior being debugged which may not be obvious for remote targets of different architecture @@ -20277,7 +20488,7 @@ add symbol table from file "/home/user/gdb/mylib.so" at .text_addr = 0x7ffff7ff9480 (y or n) y -Reading symbols from /home/user/gdb/mylib.so...done. +Reading symbols from /home/user/gdb/mylib.so... (gdb) remove-symbol-file -a 0x7ffff7ff9480 Remove symbol table from file "/home/user/gdb/mylib.so"? (y or n) y (gdb) @@ -20485,7 +20696,7 @@ to use @code{catch load} and @code{catch unload} (@pxref{Set Catchpoints}). -@value{GDBN} also supports the the @code{set stop-on-solib-events} +@value{GDBN} also supports the @code{set stop-on-solib-events} command for this. This command exists for historical reasons. It is less useful than setting a catchpoint, because it does not allow for conditions or commands as a catchpoint does. @@ -20788,6 +20999,7 @@ the executable and the debug file came from the same build. @item +@anchor{build ID} The executable contains a @dfn{build ID}, a unique bit string that is also present in the corresponding debug info file. (This is supported only on some operating systems, when using the ELF or PE file formats @@ -21058,7 +21270,7 @@ This computation does not apply to the ``build ID'' method. @node MiniDebugInfo -@section Debugging information in a special section +@section Debugging Information in a Special Section @cindex separate debug sections @cindex @samp{.gnu_debugdata} section @@ -21199,11 +21411,9 @@ $ gdb -iex "set use-deprecated-index-sections on" <program> @end smallexample -There are currently some limitation on indices. They only work when -using DWARF debugging information, not stabs. And, only the -@code{-dwarf-5} index works for programs using Ada. +Indices only work when using DWARF debugging information, not stabs. -@subsection Automatic symbol index cache +@subsection Automatic Symbol Index Cache @cindex automatic symbol index cache It is possible for @value{GDBN} to automatically save a copy of this index in a @@ -21780,6 +21990,12 @@ @code{gdbserver} using the @option{--attach} option (@pxref{Running gdbserver}). +Some remote targets allow @value{GDBN} to determine the executable file running +in the process the debugger is attaching to. In such a case, @value{GDBN} +uses the value of @code{exec-file-mismatch} to handle a possible mismatch +between the executable file name running in the process and the name of the +current exec-file loaded by @value{GDBN} (@pxref{set exec-file-mismatch}). + @end table @anchor{Host and target files} @@ -21863,19 +22079,19 @@ Unix domain sockets. @item target remote @code{@var{host}:@var{port}} -@itemx target remote @code{@var{[host]}:@var{port}} +@itemx target remote @code{[@var{host}]:@var{port}} @itemx target remote @code{tcp:@var{host}:@var{port}} -@itemx target remote @code{tcp:@var{[host]}:@var{port}} +@itemx target remote @code{tcp:[@var{host}]:@var{port}} @itemx target remote @code{tcp4:@var{host}:@var{port}} @itemx target remote @code{tcp6:@var{host}:@var{port}} -@itemx target remote @code{tcp6:@var{[host]}:@var{port}} +@itemx target remote @code{tcp6:[@var{host}]:@var{port}} @itemx target extended-remote @code{@var{host}:@var{port}} -@itemx target extended-remote @code{@var{[host]}:@var{port}} +@itemx target extended-remote @code{[@var{host}]:@var{port}} @itemx target extended-remote @code{tcp:@var{host}:@var{port}} -@itemx target extended-remote @code{tcp:@var{[host]}:@var{port}} +@itemx target extended-remote @code{tcp:[@var{host}]:@var{port}} @itemx target extended-remote @code{tcp4:@var{host}:@var{port}} @itemx target extended-remote @code{tcp6:@var{host}:@var{port}} -@itemx target extended-remote @code{tcp6:@var{[host]}:@var{port}} +@itemx target extended-remote @code{tcp6:[@var{host}]:@var{port}} @cindex @acronym{TCP} port, @code{target remote} Debug using a @acronym{TCP} connection to @var{port} on @var{host}. The @var{host} may be either a host name, a numeric @acronym{IPv4} @@ -21927,15 +22143,15 @@ Note that the colon is still required here. @item target remote @code{udp:@var{host}:@var{port}} -@itemx target remote @code{udp:@var{[host]}:@var{port}} +@itemx target remote @code{udp:[@var{host}]:@var{port}} @itemx target remote @code{udp4:@var{host}:@var{port}} -@itemx target remote @code{udp6:@var{[host]}:@var{port}} +@itemx target remote @code{udp6:[@var{host}]:@var{port}} @itemx target extended-remote @code{udp:@var{host}:@var{port}} @itemx target extended-remote @code{udp:@var{host}:@var{port}} -@itemx target extended-remote @code{udp:@var{[host]}:@var{port}} +@itemx target extended-remote @code{udp:[@var{host}]:@var{port}} @itemx target extended-remote @code{udp4:@var{host}:@var{port}} @itemx target extended-remote @code{udp6:@var{host}:@var{port}} -@itemx target extended-remote @code{udp6:@var{[host]}:@var{port}} +@itemx target extended-remote @code{udp6:[@var{host}]:@var{port}} @cindex @acronym{UDP} port, @code{target remote} Debug using @acronym{UDP} packets to @var{port} on @var{host}. For example, to connect to @acronym{UDP} port 2828 on a terminal server named @code{manyfarms}: @@ -22019,7 +22235,7 @@ @end table @node File Transfer -@section Sending files to a remote system +@section Sending Files to a Remote System @cindex remote target, file transfer @cindex file transfer @cindex sending files to remote systems @@ -22185,7 +22401,7 @@ has multiple threads, most versions of @code{pidof} support the @code{-s} option to only return the first process ID. -@subsubsection TCP port allocation lifecycle of @code{gdbserver} +@subsubsection TCP Port Allocation Lifecycle of @code{gdbserver} This section applies only when @code{gdbserver} is run to listen on a TCP port. @@ -22374,7 +22590,7 @@ @end table -@subsection Tracepoints support in @code{gdbserver} +@subsection Tracepoints Support in @code{gdbserver} @cindex tracepoints support in @code{gdbserver} On some targets, @code{gdbserver} supports tracepoints, fast @@ -23157,7 +23373,7 @@ @node Debug Session -@subsection Putting it All Together +@subsection Putting It All Together @cindex remote serial debugging summary In summary, when your program is ready to debug, you must follow these @@ -23318,8 +23534,8 @@ subroutines. This facility is supported on @sc{gnu}/Linux and Solaris systems. -On FreeBSD systems, system control nodes are used to query process -information. +On FreeBSD and NetBSD systems, system control nodes are used to query +process information. In addition, some systems may provide additional process information in core files. Note that a core file may include a subset of the @@ -23349,17 +23565,17 @@ @item info proc cmdline @cindex info proc cmdline Show the original command line of the process. This command is -supported on @sc{gnu}/Linux and FreeBSD. +supported on @sc{gnu}/Linux, FreeBSD and NetBSD. @item info proc cwd @cindex info proc cwd Show the current working directory of the process. This command is -supported on @sc{gnu}/Linux and FreeBSD. +supported on @sc{gnu}/Linux, FreeBSD and NetBSD. @item info proc exe @cindex info proc exe Show the name of executable of the process. This command is supported -on @sc{gnu}/Linux and FreeBSD. +on @sc{gnu}/Linux, FreeBSD and NetBSD. @item info proc files @cindex info proc files @@ -23394,9 +23610,9 @@ @item info proc mappings @cindex memory address space mappings Report the memory address space ranges accessible in a process. On -Solaris and FreeBSD systems, each memory range includes information on -whether the process has read, write, or execute access rights to each -range. On @sc{gnu}/Linux and FreeBSD systems, each memory range +Solaris, FreeBSD and NetBSD systems, each memory range includes information +on whether the process has read, write, or execute access rights to each +range. On @sc{gnu}/Linux, FreeBSD and NetBSD systems, each memory range includes the object file which is mapped to that range. @item info proc stat @@ -23406,13 +23622,13 @@ group ID; virtual memory usage; the signals that are pending, blocked, and ignored; its TTY; its consumption of system and user time; its stack size; its @samp{nice} value; etc. These commands are supported -on @sc{gnu}/Linux and FreeBSD. +on @sc{gnu}/Linux, FreeBSD and NetBSD. For @sc{gnu}/Linux systems, see the @samp{proc} man page for more information (type @kbd{man 5 proc} from your shell prompt). -For FreeBSD systems, @code{info proc stat} is an alias for @code{info -proc status}. +For FreeBSD and NetBSD systems, @code{info proc stat} is an alias for +@code{info proc status}. @item info proc all Show all the information about the process described under all of the @@ -24197,6 +24413,7 @@ @menu * ARC:: Synopsys ARC * ARM:: ARM +* BPF:: eBPF * M68K:: Motorola M68K * MicroBlaze:: Xilinx MicroBlaze * MIPS Embedded:: MIPS Embedded @@ -24331,6 +24548,22 @@ @end table @end table +@node BPF +@subsection BPF + +@table @code +@item target sim @r{[}@var{simargs}@r{]} @dots{} +The @value{GDBN} BPF simulator accepts the following optional arguments. + +@table @code +@item --skb-data-offset=@var{offset} +Tell the simulator the offset, measured in bytes, of the +@code{skb_data} field in the kernel @code{struct sk_buff} structure. +This offset is used by some BPF specific-purpose load/store +instructions. Defaults to 0. +@end table +@end table + @node M68K @subsection M68k @@ -24637,8 +24870,8 @@ @end table -@subsubsection AArch64 SVE. -@cindex AArch64 SVE. +@subsubsection AArch64 SVE +@cindex AArch64 SVE When @value{GDBN} is debugging the AArch64 architecture, if the Scalable Vector Extension (SVE) is present, then @value{GDBN} will provide the vector registers @@ -24652,7 +24885,7 @@ is a known limitation of @value{GDBN} and does not affect the execution of the target process. -@subsubsection AArch64 Pointer Authentication. +@subsubsection AArch64 Pointer Authentication @cindex AArch64 Pointer Authentication. When @value{GDBN} is debugging the AArch64 architecture, and the program is @@ -24663,7 +24896,7 @@ of the @code{addr_flags} field. @node i386 -@subsection x86 Architecture-specific Issues +@subsection x86 Architecture-Specific Issues @table @code @item set struct-convention @var{mode} @@ -25217,7 +25450,7 @@ @cindex history file @kindex set history filename @cindex @env{GDBHISTFILE}, environment variable -@item set history filename @var{fname} +@item set history filename @r{[}@var{fname}@r{]} Set the name of the @value{GDBN} command history file to @var{fname}. This is the file where @value{GDBN} reads an initial command history list, and where it writes the command history from this session when it @@ -25227,15 +25460,29 @@ @file{./.gdb_history} (@file{./_gdb_history} on MS-DOS) if this variable is not set. +The @code{GDBHISTFILE} environment variable is read after processing +any @value{GDBN} initialization files (@pxref{Startup}) and after +processing any commands passed using command line options (for +example, @code{-ex}). + +If the @var{fname} argument is not given, or if the @code{GDBHISTFILE} +is the empty string then @value{GDBN} will neither try to load an +existing history file, nor will it try to save the history on exit. + @cindex save command history @kindex set history save @item set history save @itemx set history save on Record command history in a file, whose name may be specified with the -@code{set history filename} command. By default, this option is disabled. +@code{set history filename} command. By default, this option is +disabled. The command history will be recorded when @value{GDBN} +exits. If @code{set history filename} is set to the empty string then +history saving is disabled, even when @code{set history save} is +@code{on}. @item set history save off -Stop recording command history in a file. +Don't record the command history into the file specified by @code{set +history filename} when @value{GDBN} exits. @cindex history size @kindex set history size @@ -25249,6 +25496,11 @@ either a negative number or the empty string, then the number of commands @value{GDBN} keeps in the history list is unlimited. +The @code{GDBHISTSIZE} environment variable is read after processing +any @value{GDBN} initialization files (@pxref{Startup}) and after +processing any commands passed using command line options (for +example, @code{-ex}). + @cindex remove duplicate history @kindex set history remove-duplicates @item set history remove-duplicates @var{count} @@ -25649,7 +25901,7 @@ @end table @node Auto-loading -@section Automatically loading associated files +@section Automatically Loading Associated Files @cindex auto-loading @value{GDBN} sometimes reads files with commands and settings automatically, @@ -25789,7 +26041,7 @@ @end multitable @node Init File in the Current Directory -@subsection Automatically loading init file in the current directory +@subsection Automatically Loading Init File in the Current Directory @cindex auto-loading init file in the current directory By default, @value{GDBN} reads and executes the canned sequences of commands @@ -25820,7 +26072,7 @@ @end table @node libthread_db.so.1 file -@subsection Automatically loading thread debugging library +@subsection Automatically Loading Thread Debugging Library @cindex auto-loading libthread_db.so.1 This feature is currently present only on @sc{gnu}/Linux native hosts. @@ -25858,7 +26110,7 @@ @end table @node Auto-loading safe path -@subsection Security restriction for auto-loading +@subsection Security Restriction for Auto-Loading @cindex auto-loading safe-path As the files of inferior can come from untrusted source (such as submitted by @@ -25872,7 +26124,7 @@ @smallexample $ ./gdb -q ./gdb -Reading symbols from /home/user/gdb/gdb...done. +Reading symbols from /home/user/gdb/gdb... warning: File "/home/user/gdb/gdb-gdb.gdb" auto-loading has been declined by your `auto-load safe-path' set to "$debugdir:$datadir/auto-load". @@ -25981,7 +26233,7 @@ recommended to be entered. @node Auto-loading verbose mode -@subsection Displaying files tried for auto-load +@subsection Displaying Files Tried for Auto-Load @cindex auto-loading verbose mode For better visibility of all the file locations where you can place scripts to @@ -26501,7 +26753,7 @@ @end menu @node Define -@subsection User-defined Commands +@subsection User-Defined Commands @cindex user-defined command @cindex arguments, to user-defined commands @@ -26676,7 +26928,7 @@ messages when used in a user-defined command. @node Hooks -@subsection User-defined Command Hooks +@subsection User-Defined Command Hooks @cindex command hooks @cindex hooks, for commands @cindex hooks, pre-command @@ -27041,7 +27293,7 @@ @end table @node Auto-loading sequences -@subsection Controlling auto-loading native @value{GDBN} scripts +@subsection Controlling Auto-Loading Native @value{GDBN} Scripts @cindex native script auto-loading When a new object file is read (for example, due to the @code{file} @@ -27082,7 +27334,7 @@ @include guile.texi @node Auto-loading extensions -@section Auto-loading extensions +@section Auto-Loading Extensions @cindex auto-loading extensions @value{GDBN} provides two mechanisms for automatically loading extensions @@ -27111,7 +27363,7 @@ @code{auto-load safe-path} (@pxref{Auto-loading safe path}). @node objfile-gdbdotext file -@subsection The @file{@var{objfile}-gdb.@var{ext}} file +@subsection The @file{@var{objfile}-gdb.@var{ext}} File @cindex @file{@var{objfile}-gdb.gdb} @cindex @file{@var{objfile}-gdb.py} @cindex @file{@var{objfile}-gdb.scm} @@ -27138,6 +27390,10 @@ If this file does not exist, then @value{GDBN} will look for @var{script-name} file in all of the directories as specified below. +(On MS-Windows/MS-DOS, the drive letter of the executable's leading +directories is converted to a one-letter subdirectory, i.e.@: +@file{d:/usr/bin/} is converted to @file{/d/usr/bin/}, because Windows +filesystems disallow colons in file names.) Note that loading of these files requires an accordingly configured @code{auto-load safe-path} (@pxref{Auto-loading safe path}). @@ -27196,7 +27452,7 @@ is evaluated more than once. @node dotdebug_gdb_scripts section -@subsection The @code{.debug_gdb_scripts} section +@subsection The @code{.debug_gdb_scripts} Section @cindex @code{.debug_gdb_scripts} section For systems using file formats like ELF and COFF, @@ -27296,7 +27552,7 @@ containing the @code{.debug_gdb_scripts} section. @node Which flavor to choose? -@subsection Which flavor to choose? +@subsection Which Flavor to Choose? Given the multiple ways of auto-loading extensions, it might not always be clear which one to choose. This section provides some guidance. @@ -27357,7 +27613,7 @@ and generally do not interfere with each other. There are some things to be aware of, however. -@subsection Python comes first +@subsection Python Comes First Python was @value{GDBN}'s first extension language, and to avoid breaking existing behaviour Python comes first. This is generally solved by the @@ -27371,7 +27627,7 @@ reported and any following extension languages are not tried. @node Aliases -@section Creating new spellings of existing commands +@section Creating New Spellings of Existing Commands @cindex aliases for commands It is often useful to define alternate spellings of existing commands. @@ -27392,7 +27648,7 @@ @table @code @kindex alias -@item alias [-a] [--] @var{ALIAS} = @var{COMMAND} +@item alias [-a] [--] @var{ALIAS} = @var{COMMAND} [DEFAULT-ARGS...] @end table @@ -27403,13 +27659,28 @@ @var{COMMAND} specifies the name of an existing command that is being aliased. +@var{COMMAND} can also be the name of an existing alias. In this case, +@var{COMMAND} cannot be an alias that has default arguments. + The @samp{-a} option specifies that the new alias is an abbreviation -of the command. Abbreviations are not shown in command -lists displayed by the @samp{help} command. +of the command. Abbreviations are not used in command completion. The @samp{--} option specifies the end of options, and is useful when @var{ALIAS} begins with a dash. +You can specify @var{default-args} for your alias. +These @var{default-args} will be automatically added before the alias +arguments typed explicitly on the command line. + +For example, the below defines an alias @code{btfullall} that shows all local +variables and all frame arguments: +@smallexample +(@value{GDBP}) alias btfullall = backtrace -full -frame-arguments all +@end smallexample + +For more information about @var{default-args}, see @ref{Command aliases default args, +,Automatically prepend default arguments to user-defined aliases}. + Here is a simple example showing how to make an abbreviation of a command so that there is less to type. Suppose you were tired of typing @samp{disas}, the current @@ -27666,6 +27937,8 @@ assembly and registers. @end itemize +These are the standard layouts, but other layouts can be defined. + A status line above the command window shows the following information: @table @emph @@ -27873,7 +28146,7 @@ @file{.inputrc} to add additional bindings to this keymap. @node TUI Commands -@section TUI-specific Commands +@section TUI-Specific Commands @cindex TUI commands The TUI has specific commands to control the text windows. @@ -27902,11 +28175,63 @@ @kindex info win List and give the size of all displayed windows. +@item tui new-layout @var{name} @var{window} @var{weight} @r{[}@var{window} @var{weight}@dots{}@r{]} +@kindex tui new-layout +Create a new TUI layout. The new layout will be named @var{name}, and +can be accessed using the @code{layout} command (see below). + +Each @var{window} parameter is either the name of a window to display, +or a window description. The windows will be displayed from top to +bottom in the order listed. + +The names of the windows are the same as the ones given to the +@code{focus} command (see below); additional, the @code{status} +window can be specified. Note that, because it is of fixed height, +the weight assigned to the status window is of no importance. It is +conventional to use @samp{0} here. + +A window description looks a bit like an invocation of @code{tui +new-layout}, and is of the form +@{@r{[}@code{-horizontal}@r{]}@var{window} @var{weight} @r{[}@var{window} @var{weight}@dots{}@r{]}@}. + +This specifies a sub-layout. If @code{-horizontal} is given, the +windows in this description will be arranged side-by-side, rather than +top-to-bottom. + +Each @var{weight} is an integer. It is the weight of this window +relative to all the other windows in the layout. These numbers are +used to calculate how much of the screen is given to each window. + +For example: + +@example +(gdb) tui new-layout example src 1 regs 1 status 0 cmd 1 +@end example + +Here, the new layout is called @samp{example}. It shows the source +and register windows, followed by the status window, and then finally +the command window. The non-status windows all have the same weight, +so the terminal will be split into three roughly equal sections. + +Here is a more complex example, showing a horizontal layout: + +@example +(gdb) tui new-layout example @{-horizontal src 1 asm 1@} 2 status 0 cmd 1 +@end example + +This will result in side-by-side source and assembly windows; with the +status and command window being beneath these, filling the entire +width of the terminal. Because they have weight 2, the source and +assembly windows will be twice the height of the command window. + @item layout @var{name} @kindex layout -Changes which TUI windows are displayed. In each layout the command -window is always displayed, the @var{name} parameter controls which -additional windows are displayed, and can be any of the following: +Changes which TUI windows are displayed. The @var{name} parameter +controls which layout is shown. It can be either one of the built-in +layout names, or the name of a layout defined by the user using +@code{tui new-layout}. + +The built-in layouts are as follows: @table @code @item next @@ -28353,7 +28678,7 @@ @end menu @node Context management -@subsection Context management +@subsection Context Management @subsubsection Threads and Frames @@ -28427,7 +28752,7 @@ @samp{local} or @samp{unknown}. @node Asynchronous and non-stop modes -@subsection Asynchronous command execution and non-stop mode +@subsection Asynchronous Command Execution and Non-Stop Mode On some targets, @value{GDBN} is capable of processing MI commands even while the target is running. This is called @dfn{asynchronous @@ -28488,7 +28813,7 @@ to find the state of a thread, will always work. @node Thread groups -@subsection Thread groups +@subsection Thread Groups @value{GDBN} may be used to debug several processes at the same time. On some platforms, @value{GDBN} may support debugging of several hardware systems, each one having several cores with several different @@ -28524,7 +28849,7 @@ In general, the content of a thread group may be only retrieved only after attaching to that thread group. -Thread groups are related to inferiors (@pxref{Inferiors and +Thread groups are related to inferiors (@pxref{Inferiors Connections and Programs}). Each inferior corresponds to a thread group of a special type @samp{process}, and some additional operations are permitted on such thread groups. @@ -28818,7 +29143,7 @@ @value{GDBN} (e.g. @code{--interpreter=mi2}) to make sure they get an interpreter with the MI version they expect. -The following table gives a summary of the the released versions of the MI +The following table gives a summary of the released versions of the MI interface: the version number, the version of GDB in which it first appeared and the breaking changes compared to the previous version. @@ -28996,7 +29321,7 @@ @item *running,thread-id="@var{thread}" The target is now running. The @var{thread} field can be the global -thread ID of the the thread that is now running, and it can be +thread ID of the thread that is now running, and it can be @samp{all} if all threads are running. The frontend should assume that no interaction with a running thread is possible after this notification is produced. The frontend should not assume that this @@ -30635,7 +30960,7 @@ @c %%%%%%%%%%%%%%%%%%%%%%%%%%%% SECTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @node GDB/MI Program Context -@section @sc{gdb/mi} Program Context +@section @sc{gdb/mi} Program Context @subheading The @code{-exec-arguments} Command @findex -exec-arguments @@ -32149,7 +32474,7 @@ In the next subsection we describe each operation in detail and suggest how it can be used. -@subheading Description And Use of Operations on Variable Objects +@subheading Description and Use of Operations on Variable Objects @subheading The @code{-enable-pretty-printing} Command @findex -enable-pretty-printing @@ -32801,7 +33126,7 @@ ^done @end smallexample -@subheading The @code{-var-set-visualizer} command +@subheading The @code{-var-set-visualizer} Command @findex -var-set-visualizer @anchor{-var-set-visualizer} @@ -35903,7 +36228,7 @@ -add-inferior @end smallexample -Creates a new inferior (@pxref{Inferiors and Programs}). The created +Creates a new inferior (@pxref{Inferiors Connections and Programs}). The created inferior is not associated with any executable. Such association may be established with the @samp{-file-exec-and-symbols} command (@pxref{GDB/MI File Commands}). The command response has a single @@ -36134,7 +36459,7 @@ @end menu @node Annotations Overview -@section What is an Annotation? +@section What Is an Annotation? @cindex annotations Annotations start with a newline character, two @samp{control-z} @@ -36686,8 +37011,8 @@ frame. Both have a callback (@code{target_read}) to read bytes off the target's address space. -@node In-Process Agent -@chapter In-Process Agent +@node In-process Agent +@chapter In-process Agent @cindex debugging agent The traditional debugging model is conceptually low-speed, but works fine, because most bugs can be reproduced in debugging-mode execution. However, @@ -36706,7 +37031,7 @@ Therefore, traditional debugging model is too intrusive to reproduce some bugs. In order to reduce the interference with the program, we can reduce the number of operations performed by debugger. The -@dfn{In-Process Agent}, a shared library, is running within the same +@dfn{In-process Agent}, a shared library, is running within the same process with inferior, and is able to perform some debugging operations itself. As a result, debugger is only involved when necessary, and performance of debugging can be improved accordingly. Note that @@ -36744,15 +37069,15 @@ @end table @menu -* In-Process Agent Protocol:: +* In-process Agent Protocol:: @end menu -@node In-Process Agent Protocol -@section In-Process Agent Protocol +@node In-process Agent Protocol +@section In-process Agent Protocol @cindex in-process agent protocol The in-process agent is able to communicate with both @value{GDBN} and -GDBserver (@pxref{In-Process Agent}). This section documents the protocol +GDBserver (@pxref{In-process Agent}). This section documents the protocol used for communications between @value{GDBN} or GDBserver and the IPA. In general, @value{GDBN} or GDBserver sends commands (@pxref{IPA Protocol Commands}) and data to in-process agent, and then @@ -37705,6 +38030,14 @@ Use the curses library instead of the termcap library, for text-mode terminal operations. +@item --with-debuginfod +Build @value{GDBN} with libdebuginfod, the debuginfod client library. +Used to automatically fetch source files and separate debug files from +debuginfod servers using the associated executable's build ID. Enabled +by default if libdebuginfod is installed and found at configure time. +debuginfod is packaged with elfutils, starting with version 0.178. You +can get the latest version from `https://sourceware.org/elfutils/'. + @item --with-libunwind-ia64 Use the libunwind library for unwinding function call stack on ia64 target platforms. See http://www.nongnu.org/libunwind/index.html for @@ -37831,7 +38164,7 @@ @end table @node System-wide configuration -@section System-wide configuration and settings +@section System-Wide Configuration and Settings @cindex system-wide init file @value{GDBN} can be configured to have a system-wide init file and a @@ -37894,7 +38227,7 @@ @end menu @node System-wide Configuration Scripts -@subsection Installed System-wide Configuration Scripts +@subsection Installed System-Wide Configuration Scripts @cindex system-wide configuration scripts The @file{system-gdbinit} directory, located inside the data-directory @@ -37959,7 +38292,7 @@ Translate the given format string and list of argument expressions into remote agent bytecodes and display them as a disassembled list. This command is useful for debugging the agent version of dynamic -printf (@pxref{Dynamic Printf}). +printf (@pxref{Dynamic printf}). @kindex maint info breakpoints @item @anchor{maint info breakpoints}maint info breakpoints @@ -38224,6 +38557,15 @@ built again. This command is used by developers after they add or modify XML target descriptions. +@kindex maint print xml-tdesc +@item maint print xml-tdesc @r{[}@var{file}@r{]} +Print the target description (@pxref{Target Descriptions}) as an XML +file. By default print the target description for the current target, +but if the optional argument @var{file} is provided, then that file is +read in by GDB and then used to produce the description. The +@var{file} should be an XML document, of the form described in +@ref{Target Description Format}. + @kindex maint check xml-descriptions @item maint check xml-descriptions @var{dir} Check that the target descriptions dynamically created by @value{GDBN} @@ -38239,6 +38581,14 @@ @code{libthread_db} uses. Note that parts of the test may be skipped on some platforms when debugging core files. +@kindex maint print core-file-backed-mappings +@cindex memory address space mappings +@item maint print core-file-backed-mappings +Print the file-backed mappings which were loaded from a core file note. +This output represents state internal to @value{GDBN} and should be +similar to the mappings displayed by the @code{info proc mappings} +command. + @kindex maint print dummy-frames @item maint print dummy-frames Prints the contents of @value{GDBN}'s internal dummy-frame stack. @@ -38460,10 +38810,10 @@ certain CPU-intensive operations, such as demangling symbol names. While the number of threads used by @value{GDBN} may vary, this command can be used to set an upper bound on this number. The default -is @code{0} (disabled). A value of @code{unlimited} lets @value{GDBN} choose a -reasonable number. Note that this only controls worker threads started by -@value{GDBN} itself; libraries used by @value{GDBN} may start threads of their -own. +is @code{unlimited}, which lets @value{GDBN} choose a reasonable +number. Note that this only controls worker threads started by +@value{GDBN} itself; libraries used by @value{GDBN} may start threads +of their own. @kindex maint set profile @kindex maint show profile @@ -38841,12 +39191,15 @@ protocol. A newer @value{GDBN} can tell if a packet is supported based on that response. -At a minimum, a stub is required to support the @samp{g} and @samp{G} +At a minimum, a stub is required to support the @samp{?} command to +tell @value{GDBN} the reason for halting, @samp{g} and @samp{G} commands for register access, and the @samp{m} and @samp{M} commands for memory access. Stubs that only control single-threaded targets -can implement run control with the @samp{c} (continue), and @samp{s} -(step) commands. Stubs that support multi-threading targets should -support the @samp{vCont} command. All other commands are optional. +can implement run control with the @samp{c} (continue) command, and if +the target architecture supports hardware-assisted single-stepping, +the @samp{s} (step) command. Stubs that support multi-threading +targets should support the @samp{vCont} command. All other commands +are optional. @node Packets @section Packets @@ -41719,7 +42072,7 @@ @end menu @node ARM-Specific Protocol Details -@subsection @acronym{ARM}-specific Protocol Details +@subsection @acronym{ARM}-Specific Protocol Details @menu * ARM Breakpoint Kinds:: @@ -41745,7 +42098,7 @@ @end table @node MIPS-Specific Protocol Details -@subsection @acronym{MIPS}-specific Protocol Details +@subsection @acronym{MIPS}-Specific Protocol Details @menu * MIPS Register packet Format:: @@ -42284,7 +42637,7 @@ @end table -@subsection Relocate instruction reply packet +@subsection Relocate Instruction Reply Packet When installing fast tracepoints in memory, the target may need to relocate the instruction currently at the tracepoint address to a different address in memory. For most instructions, a simple copy is @@ -42363,7 +42716,7 @@ @var{result} is the integer value returned by this operation, usually non-negative for success and -1 for errors. If an error has occured, @var{errno} will be included in the result specifying a -value defined by the File-I/O protocol (@pxref{Errno Values}). For +value defined by the File-I/O protocol (@pxref{errno Values}). For operations which return data, @var{attachment} supplies the data as a binary buffer. Binary buffers in response packets are escaped in the normal way (@pxref{Binary Data}). See the individual packet @@ -43601,7 +43954,7 @@ @end table @node Protocol-specific Representation of Datatypes -@subsection Protocol-specific Representation of Datatypes +@subsection Protocol-Specific Representation of Datatypes @cindex protocol-specific representation of datatypes, in file-i/o protocol @menu @@ -43764,7 +44117,7 @@ @menu * Open Flags:: * mode_t Values:: -* Errno Values:: +* errno Values:: * Lseek Flags:: * Limits:: @end menu @@ -43805,8 +44158,8 @@ S_IXOTH 01 @end smallexample -@node Errno Values -@unnumberedsubsubsec Errno Values +@node errno Values +@unnumberedsubsubsec errno Values @cindex errno values, in file-i/o protocol All values are given in decimal representation. @@ -44912,40 +45265,48 @@ @subsection ARC Features @cindex target descriptions, ARC Features -ARC processors are highly configurable, so even core registers and their number -are not completely predetermined. In addition flags and PC registers which are -important to @value{GDBN} are not ``core'' registers in ARC. It is required -that one of the core registers features is present. -@samp{org.gnu.gdb.arc.aux-minimal} feature is mandatory. - -The @samp{org.gnu.gdb.arc.core.v2} feature is required for ARC EM and ARC HS -targets with a normal register file. It should contain registers @samp{r0} -through @samp{r25}, @samp{gp}, @samp{fp}, @samp{sp}, @samp{r30}, @samp{blink}, -@samp{lp_count} and @samp{pcl}. This feature may contain register @samp{ilink} -and any of extension core registers @samp{r32} through @samp{r59/acch}. -@samp{ilink} and extension core registers are not available to read/write, when -debugging GNU/Linux applications, thus @samp{ilink} is made optional. - -The @samp{org.gnu.gdb.arc.core-reduced.v2} feature is required for ARC EM and -ARC HS targets with a reduced register file. It should contain registers -@samp{r0} through @samp{r3}, @samp{r10} through @samp{r15}, @samp{gp}, -@samp{fp}, @samp{sp}, @samp{r30}, @samp{blink}, @samp{lp_count} and @samp{pcl}. -This feature may contain register @samp{ilink} and any of extension core -registers @samp{r32} through @samp{r59/acch}. - -The @samp{org.gnu.gdb.arc.core.arcompact} feature is required for ARCompact -targets with a normal register file. It should contain registers @samp{r0} -through @samp{r25}, @samp{gp}, @samp{fp}, @samp{sp}, @samp{r30}, @samp{blink}, -@samp{lp_count} and @samp{pcl}. This feature may contain registers -@samp{ilink1}, @samp{ilink2} and any of extension core registers @samp{r32} -through @samp{r59/acch}. @samp{ilink1} and @samp{ilink2} and extension core -registers are not available when debugging GNU/Linux applications. The only -difference with @samp{org.gnu.gdb.arc.core.v2} feature is in the names of -@samp{ilink1} and @samp{ilink2} registers and that @samp{r30} is mandatory in -ARC v2, but @samp{ilink2} is optional on ARCompact. +ARC processors are so configurable that even core registers and their numbers +are not predetermined completely. Moreover, @emph{flags} and @emph{PC} +registers, which are important to @value{GDBN}, are not ``core'' registers in +ARC. Therefore, there are two features that their presence is mandatory: +@samp{org.gnu.gdb.arc.core} and @samp{org.gnu.gdb.arc.aux}. -The @samp{org.gnu.gdb.arc.aux-minimal} feature is required for all ARC -targets. It should contain registers @samp{pc} and @samp{status32}. +The @samp{org.gnu.gdb.arc.core} feature is required for all targets. It must +contain registers: + +@itemize @minus +@item +@samp{r0} through @samp{r25} for normal register file targets. +@item +@samp{r0} through @samp{r3}, and @samp{r10} through @samp{r15} for reduced +register file targets. +@item +@samp{gp}, @samp{fp}, @samp{sp}, @samp{r30}@footnote{Not necessary for ARCv1.}, +@samp{blink}, @samp{lp_count}, @samp{pcl}. +@end itemize + +In case of an ARCompact target (ARCv1 ISA), the @samp{org.gnu.gdb.arc.core} +feature may contain registers @samp{ilink1} and @samp{ilink2}. While in case +of ARC EM and ARC HS targets (ARCv2 ISA), register @samp{ilink} may be present. +The difference between ARCv1 and ARCv2 is the naming of registers @emph{29th} +and @emph{30th}. They are called @samp{ilink1} and @samp{ilink2} for ARCv1 and +are optional. For ARCv2, they are called @samp{ilink} and @samp{r30} and only +@samp{ilink} is optional. The optionality of @samp{ilink*} registers is +because of their inaccessibility during user space debugging sessions. + +Extension core registers @samp{r32} through @samp{r59} are optional and their +existence depends on the configuration. When debugging GNU/Linux applications, +i.e.@: user space debugging, these core registers are not available. + +The @samp{org.gnu.gdb.arc.aux} feature is required for all ARC targets. Here +is the list of registers pertinent to this feature: + +@itemize @minus +@item +mandatory: @samp{pc} and @samp{status32}. +@item +optional: @samp{lp_start}, @samp{lp_end}, and @samp{bta}. +@end itemize @node ARM Features @subsection ARM Features @@ -45141,6 +45502,12 @@ This feature is optional. If present, it should contain registers @samp{fp0} through @samp{fp7}, @samp{fpcontrol}, @samp{fpstatus} and @samp{fpiaddr}. + +Note that, despite the fact that this feature's name says +@samp{coldfire}, it is used to describe any floating point registers. +The size of the registers must match the main m68k flavor; so, for +example, if the primary feature is reported as @samp{coldfire}, then +64-bit floating point registers are required. @end table @node NDS32 Features @@ -45176,7 +45543,7 @@ @samp{mpuacc}). @node OpenRISC 1000 Features -@subsection Openrisc 1000 Features +@subsection OpenRISC 1000 Features @cindex target descriptions, OpenRISC 1000 features The @samp{org.gnu.gdb.or1k.group0} feature is required for OpenRISC 1000 @@ -46189,11 +46556,11 @@ @command{gdbserver} can also debug multiple inferiors at once, described in @ifset man -the @value{GDBN} manual in node @code{Inferiors and Programs} --- shell command @code{info -f gdb -n 'Inferiors and Programs'}. +the @value{GDBN} manual in node @code{Inferiors Connections and Programs} +-- shell command @code{info -f gdb -n 'Inferiors Connections and Programs'}. @end ifset @ifclear man -@ref{Inferiors and Programs}. +@ref{Inferiors Connections and Programs}. @end ifclear In such case use the @code{extended-remote} @value{GDBN} command variant: diff -Nru gdb-9.1/gdb/doc/guile.texi gdb-10.2/gdb/doc/guile.texi --- gdb-9.1/gdb/doc/guile.texi 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/doc/guile.texi 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -@c Copyright (C) 2008-2020 Free Software Foundation, Inc. +@c Copyright (C) 2008--2021 Free Software Foundation, Inc. @c Permission is granted to copy, distribute and/or modify this document @c under the terms of the GNU Free Documentation License, Version 1.3 or @c any later version published by the Free Software Foundation; with the @@ -38,8 +38,7 @@ reasonably closely, so concepts there should carry over. However, some things are done differently where it makes sense. -@value{GDBN} requires Guile version 2.0 or greater. -Older versions are not supported. +@value{GDBN} requires Guile version 3.0, 2.2, or 2.0. @cindex guile scripts directory Guile scripts used by @value{GDBN} should be installed in @@ -2155,7 +2154,7 @@ of an address space. It consists of all of the objfiles of the program. @xref{Objfiles In Guile}. -@xref{Inferiors and Programs, program spaces}, for more details +@xref{Inferiors Connections and Programs, program spaces}, for more details about program spaces. Each progspace is represented by an instance of the @code{<gdb:progspace>} @@ -2178,7 +2177,7 @@ @deffn {Scheme Procedure} current-progspace This function returns the program space of the currently selected inferior. There is always a current progspace, this never returns @code{#f}. -@xref{Inferiors and Programs}. +@xref{Inferiors Connections and Programs}. @end deffn @deffn {Scheme Procedure} progspaces @@ -3559,21 +3558,36 @@ @deffn {Scheme Procedure} memory-port-read-buffer-size memory-port Return the size of the read buffer of @code{<gdb:memory-port>} @var{memory-port}. + +This procedure is deprecated and will be removed in @value{GDBN} 11. +It returns 0 when using Guile 2.2 or later. @end deffn @deffn {Scheme Procedure} set-memory-port-read-buffer-size! memory-port size Set the size of the read buffer of @code{<gdb:memory-port>} @var{memory-port} to @var{size}. The result is unspecified. + +This procedure is deprecated and will be removed in @value{GDBN} 11. +When @value{GDBN} is built with Guile 2.2 or later, you can call +@code{setvbuf} instead (@pxref{Buffering, @code{setvbuf},, guile, GNU +Guile Reference Manual}). @end deffn @deffn {Scheme Procedure} memory-port-write-buffer-size memory-port Return the size of the write buffer of @code{<gdb:memory-port>} @var{memory-port}. + +This procedure is deprecated and will be removed in @value{GDBN} 11. +It returns 0 when @value{GDBN} is built with Guile 2.2 or later. @end deffn @deffn {Scheme Procedure} set-memory-port-write-buffer-size! memory-port size Set the size of the write buffer of @code{<gdb:memory-port>} @var{memory-port} to @var{size}. The result is unspecified. + +This procedure is deprecated and will be removed in @value{GDBN} 11. +When @value{GDBN} is built with Guile 2.2 or later, you can call +@code{setvbuf} instead. @end deffn A memory port is closed like any other port, with @code{close-port}. diff -Nru gdb-9.1/gdb/doc/Makefile.in gdb-10.2/gdb/doc/Makefile.in --- gdb-9.1/gdb/doc/Makefile.in 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/doc/Makefile.in 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -##Copyright (C) 1991-2020 Free Software Foundation, Inc. +##Copyright (C) 1991-2021 Free Software Foundation, Inc. # Makefile for GDB documentation. # This file is part of GDB. diff -Nru gdb-9.1/gdb/doc/python.texi gdb-10.2/gdb/doc/python.texi --- gdb-9.1/gdb/doc/python.texi 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/doc/python.texi 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -@c Copyright (C) 2008-2020 Free Software Foundation, Inc. +@c Copyright (C) 2008--2021 Free Software Foundation, Inc. @c Permission is granted to copy, distribute and/or modify this document @c under the terms of the GNU Free Documentation License, Version 1.3 or @c any later version published by the Free Software Foundation; with the @@ -163,6 +163,8 @@ using Python. * Lazy Strings In Python:: Python representation of lazy strings. * Architectures In Python:: Python representation of architectures. +* Registers In Python:: Python representation of registers. +* TUI Windows In Python:: Implementing new TUI windows. @end menu @node Basic Python @@ -919,7 +921,7 @@ the @emph{declared} type should be used. (See @code{set print object} in @ref{Print Settings}). -@item static_fields +@item static_members @code{True} if static members should be included in the string representation of a C@t{++} object, @code{False} if they shouldn't (see @code{set print static-members} in @ref{Print Settings}). @@ -1067,6 +1069,29 @@ @code{TYPE_CODE_} constants defined below. @end defvar +@defvar Type.dynamic +A boolean indicating whether this type is dynamic. In some +situations, such as Rust @code{enum} types or Ada variant records, the +concrete type of a value may vary depending on its contents. That is, +the declared type of a variable, or the type returned by +@code{gdb.lookup_type} may be dynamic; while the type of the +variable's value will be a concrete instance of that dynamic type. + +For example, consider this code: +@smallexample +int n; +int array[n]; +@end smallexample + +Here, at least conceptually (whether your compiler actually does this +is a separate issue), examining @w{@code{gdb.lookup_symbol("array", ...).type}} +could yield a @code{gdb.Type} which reports a size of @code{None}. +This is the dynamic type. + +However, examining @code{gdb.parse_and_eval("array").type} would yield +a concrete type, whose length would be known. +@end defvar + @defvar Type.name The name of this type. If this type has no name, then @code{None} is returned. @@ -1075,7 +1100,9 @@ @defvar Type.sizeof The size of this type, in target @code{char} units. Usually, a target's @code{char} type will be an 8-bit byte. However, on some -unusual platforms, this type may have a different size. +unusual platforms, this type may have a different size. A dynamic +type may not have a fixed size; in this case, this attribute's value +will be @code{None}. @end defvar @defvar Type.tag @@ -1105,7 +1132,10 @@ @item bitpos This attribute is not available for @code{enum} or @code{static} (as in C@t{++}) fields. The value is the position, counting -in bits, from the start of the containing type. +in bits, from the start of the containing type. Note that, in a +dynamic type, the position of a field may not be constant. In this +case, the value will be @code{None}. Also, a dynamic type may have +fields that do not appear in a corresponding concrete type. @item enumval This attribute is only available for @code{enum} fields, and its value @@ -2428,12 +2458,11 @@ @defun PendingFrame.read_register (reg) This method returns the contents of the register @var{reg} in the -frame as a @code{gdb.Value} object. @var{reg} can be either a -register number or a register name; the values are platform-specific. -They are usually found in the corresponding -@file{@var{platform}-tdep.h} file in the @value{GDBN} source tree. If -@var{reg} does not name a register for the current architecture, this -method will throw an exception. +frame as a @code{gdb.Value} object. For a description of the +acceptable values of @var{reg} see +@ref{gdbpy_frame_read_register,,Frame.read_register}. If @var{reg} +does not name a register for the current architecture, this method +will throw an exception. Note that this method will always return a @code{gdb.Value} for a valid register name. This does not mean that the value will be valid. @@ -2489,6 +2518,12 @@ @end defun +@defun PendingFrame.architecture () +Return the @code{gdb.Architecture} (@pxref{Architectures In Python}) +for this @code{gdb.PendingFrame}. This represents the architecture of +the particular frame being unwound. +@end defun + @subheading Unwinder Output: UnwindInfo Use @code{PendingFrame.create_unwind_info} method described above to @@ -2496,8 +2531,8 @@ specify caller registers that have been saved in this frame: @defun gdb.UnwindInfo.add_saved_register (reg, value) -@var{reg} identifies the register. It can be a number or a name, just -as for the @code{PendingFrame.read_register} method above. +@var{reg} identifies the register, for a description of the acceptable +values see @ref{gdbpy_frame_read_register,,Frame.read_register}. @var{value} is a register value (a @code{gdb.Value} object). @end defun @@ -2928,7 +2963,7 @@ @findex gdb.Inferior Programs which are being run under @value{GDBN} are called inferiors -(@pxref{Inferiors and Programs}). Python scripts can access +(@pxref{Inferiors Connections and Programs}). Python scripts can access information about and manipulate inferiors controlled by @value{GDBN} via objects of the @code{gdb.Inferior} class. @@ -3294,7 +3329,7 @@ @end defun To get the list of threads for an inferior, use the @code{Inferior.threads()} -method. @xref{Inferiors In Python} +method. @xref{Inferiors In Python}. A @code{gdb.InferiorThread} object has the following attributes: @@ -3800,6 +3835,13 @@ @kbd{help tracepoints} at the @value{GDBN} prompt to see a list of commands in this category. +@findex COMMAND_TUI +@findex gdb.COMMAND_TUI +@item gdb.COMMAND_TUI +The command has to do with the text user interface (@pxref{TUI}). +Type @kbd{help tui} at the @value{GDBN} prompt to see a list of +commands in this category. + @findex COMMAND_USER @findex gdb.COMMAND_USER @item gdb.COMMAND_USER @@ -4161,7 +4203,7 @@ of an address space. It consists of all of the objfiles of the program. @xref{Objfiles In Python}. -@xref{Inferiors and Programs, program spaces}, for more details +@xref{Inferiors Connections and Programs, program spaces}, for more details about program spaces. The following progspace-related functions are available in the @@ -4170,7 +4212,7 @@ @findex gdb.current_progspace @defun gdb.current_progspace () This function returns the program space of the currently selected inferior. -@xref{Inferiors and Programs}. This is identical to +@xref{Inferiors Connections and Programs}. This is identical to @code{gdb.selected_inferior().progspace} (@pxref{Inferiors In Python}) and is included for historical compatibility. @end defun @@ -4279,7 +4321,7 @@ gdb.events.new_objfile.connect(new_objfile_handler) end (gdb) file /tmp/hello -Reading symbols from /tmp/hello...done. +Reading symbols from /tmp/hello... Computing the answer to the ultimate question ... (gdb) python print gdb.current_progspace().expensive_computation 42 @@ -4418,7 +4460,7 @@ gdb.events.new_objfile.connect(new_objfile_handler) end (gdb) file ./hello -Reading symbols from ./hello...done. +Reading symbols from ./hello... (gdb) python print gdb.objfiles()[0].time_loaded 2014-10-09 11:41:36.770345 @end smallexample @@ -4642,11 +4684,31 @@ @xref{Symbol Tables In Python}. @end defun +@anchor{gdbpy_frame_read_register} @defun Frame.read_register (register) -Return the value of @var{register} in this frame. The @var{register} -argument must be a string (e.g., @code{'sp'} or @code{'rax'}). -Returns a @code{Gdb.Value} object. Throws an exception if @var{register} -does not exist. +Return the value of @var{register} in this frame. Returns a +@code{Gdb.Value} object. Throws an exception if @var{register} does +not exist. The @var{register} argument must be one of the following: +@enumerate +@item +A string that is the name of a valid register (e.g., @code{'sp'} or +@code{'rax'}). +@item +A @code{gdb.RegisterDescriptor} object (@pxref{Registers In Python}). +@item +A @value{GDBN} internal, platform specific number. Using these +numbers is supported for historic reasons, but is not recommended as +future changes to @value{GDBN} could change the mapping between +numbers and the registers they represent, breaking any Python code +that uses the platform-specific numbers. The numbers are usually +found in the corresponding @file{@var{platform}-tdep.h} file in the +@value{GDBN} source tree. +@end enumerate +Using a string to access registers will be slightly slower than the +other two methods as @value{GDBN} must look up the mapping between +name and internal register number. If performance is critical +consider looking up and caching a @code{gdb.RegisterDescriptor} +object. @end defun @defun Frame.read_var (variable @r{[}, block@r{]}) @@ -5673,6 +5735,182 @@ @end table @end defun +@anchor{gdbpy_architecture_registers} +@defun Architecture.registers (@r{[} @var{reggroup} @r{]}) +Return a @code{gdb.RegisterDescriptorIterator} (@pxref{Registers In +Python}) for all of the registers in @var{reggroup}, a string that is +the name of a register group. If @var{reggroup} is omitted, or is the +empty string, then the register group @samp{all} is assumed. +@end defun + +@anchor{gdbpy_architecture_reggroups} +@defun Architecture.register_groups () +Return a @code{gdb.RegisterGroupsIterator} (@pxref{Registers In +Python}) for all of the register groups available for the +@code{gdb.Architecture}. +@end defun + +@node Registers In Python +@subsubsection Registers In Python +@cindex Registers In Python + +Python code can request from a @code{gdb.Architecture} information +about the set of registers available +(@pxref{gdbpy_architecture_registers,,@code{Architecture.registers}}). +The register information is returned as a +@code{gdb.RegisterDescriptorIterator}, which is an iterator that in +turn returns @code{gdb.RegisterDescriptor} objects. + +A @code{gdb.RegisterDescriptor} does not provide the value of a +register (@pxref{gdbpy_frame_read_register,,@code{Frame.read_register}} +for reading a register's value), instead the @code{RegisterDescriptor} +is a way to discover which registers are available for a particular +architecture. + +A @code{gdb.RegisterDescriptor} has the following read-only properties: + +@defvar RegisterDescriptor.name +The name of this register. +@end defvar + +It is also possible to lookup a register descriptor based on its name +using the following @code{gdb.RegisterDescriptorIterator} function: + +@defun RegisterDescriptorIterator.find (@var{name}) +Takes @var{name} as an argument, which must be a string, and returns a +@code{gdb.RegisterDescriptor} for the register with that name, or +@code{None} if there is no register with that name. +@end defun + +Python code can also request from a @code{gdb.Architecture} +information about the set of register groups available on a given +architecture +(@pxref{gdbpy_architecture_reggroups,,@code{Architecture.register_groups}}). + +Every register can be a member of zero or more register groups. Some +register groups are used internally within @value{GDBN} to control +things like which registers must be saved when calling into the +program being debugged (@pxref{Calling,,Calling Program Functions}). +Other register groups exist to allow users to easily see related sets +of registers in commands like @code{info registers} +(@pxref{info_registers_reggroup,,@code{info registers +@var{reggroup}}}). + +The register groups information is returned as a +@code{gdb.RegisterGroupsIterator}, which is an iterator that in turn +returns @code{gdb.RegisterGroup} objects. + +A @code{gdb.RegisterGroup} object has the following read-only +properties: + +@defvar RegisterGroup.name +A string that is the name of this register group. +@end defvar + +@node TUI Windows In Python +@subsubsection Implementing new TUI windows +@cindex Python TUI Windows + +New TUI (@pxref{TUI}) windows can be implemented in Python. + +@findex gdb.register_window_type +@defun gdb.register_window_type (@var{name}, @var{factory}) +Because TUI windows are created and destroyed depending on the layout +the user chooses, new window types are implemented by registering a +factory function with @value{GDBN}. + +@var{name} is the name of the new window. It's an error to try to +replace one of the built-in windows, but other window types can be +replaced. + +@var{function} is a factory function that is called to create the TUI +window. This is called with a single argument of type +@code{gdb.TuiWindow}, described below. It should return an object +that implements the TUI window protocol, also described below. +@end defun + +As mentioned above, when a factory function is called, it is passed a +an object of type @code{gdb.TuiWindow}. This object has these +methods and attributes: + +@defun TuiWindow.is_valid () +This method returns @code{True} when this window is valid. When the +user changes the TUI layout, windows no longer visible in the new +layout will be destroyed. At this point, the @code{gdb.TuiWindow} +will no longer be valid, and methods (and attributes) other than +@code{is_valid} will throw an exception. +@end defun + +@defvar TuiWindow.width +This attribute holds the width of the window. It is not writable. +@end defvar + +@defvar TuiWindow.height +This attribute holds the height of the window. It is not writable. +@end defvar + +@defvar TuiWindow.title +This attribute holds the window's title, a string. This is normally +displayed above the window. This attribute can be modified. +@end defvar + +@defun TuiWindow.erase () +Remove all the contents of the window. +@end defun + +@defun TuiWindow.write (@var{string}) +Write @var{string} to the window. @var{string} can contain ANSI +terminal escape styling sequences; @value{GDBN} will translate these +as appropriate for the terminal. +@end defun + +The factory function that you supply should return an object +conforming to the TUI window protocol. These are the method that can +be called on this object, which is referred to below as the ``window +object''. The methods documented below are optional; if the object +does not implement one of these methods, @value{GDBN} will not attempt +to call it. Additional new methods may be added to the window +protocol in the future. @value{GDBN} guarantees that they will begin +with a lower-case letter, so you can start implementation methods with +upper-case letters or underscore to avoid any future conflicts. + +@defun Window.close () +When the TUI window is closed, the @code{gdb.TuiWindow} object will be +put into an invalid state. At this time, @value{GDBN} will call +@code{close} method on the window object. + +After this method is called, @value{GDBN} will discard any references +it holds on this window object, and will no longer call methods on +this object. +@end defun + +@defun Window.render () +In some situations, a TUI window can change size. For example, this +can happen if the user resizes the terminal, or changes the layout. +When this happens, @value{GDBN} will call the @code{render} method on +the window object. + +If your window is intended to update in response to changes in the +inferior, you will probably also want to register event listeners and +send output to the @code{gdb.TuiWindow}. +@end defun + +@defun Window.hscroll (@var{num}) +This is a request to scroll the window horizontally. @var{num} is the +amount by which to scroll, with negative numbers meaning to scroll +right. In the TUI model, it is the viewport that moves, not the +contents. A positive argument should cause the viewport to move +right, and so the content should appear to move to the left. +@end defun + +@defun Window.vscroll (@var{num}) +This is a request to scroll the window vertically. @var{num} is the +amount by which to scroll, with negative numbers meaning to scroll +backward. In the TUI model, it is the viewport that moves, not the +contents. A positive argument should cause the viewport to move down, +and so the content should appear to move up. +@end defun + @node Python Auto-loading @subsection Python Auto-loading @cindex Python auto-loading diff -Nru gdb-9.1/gdb/doc/refcard.tex gdb-10.2/gdb/doc/refcard.tex --- gdb-9.1/gdb/doc/refcard.tex 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/doc/refcard.tex 2021-04-25 04:04:35.000000000 +0000 @@ -1,7 +1,7 @@ %%%%%%%%%%%%%%%% gdb-refcard.tex %%%%%%%%%%%%%%%% %This file is TeX source for a reference card describing GDB, the GNU debugger. -%Copyright (C) 1991-2020 Free Software Foundation, Inc. +%Copyright (C) 1991--2021 Free Software Foundation, Inc. %Permission is granted to make and distribute verbatim copies of %this reference provided the copyright notices and permission notices %are preserved on all copies. @@ -307,7 +307,7 @@ \line{\smrm \opt{ } surround optional arguments \hfill $\ldots$ show one or more arguments} \vskip\baselineskip -\centerline{\smrm \copyright 1998-2020 Free Software Foundation, Inc.\qquad Permissions on back} +\centerline{\smrm \copyright 1998-2021 Free Software Foundation, Inc.\qquad Permissions on back} \eject \sec Breakpoints and Watchpoints; break \opt{\it file\tt:}{\it line}\par @@ -632,7 +632,7 @@ \vfill {\smrm\parskip=6pt -Copyright \copyright 1991-2020 Free Software Foundation, Inc. +Copyright \copyright 1991-2021 Free Software Foundation, Inc. Author: Roland H. Pesch The author assumes no responsibility for any errors on this card. diff -Nru gdb-9.1/gdb/doc/stabs.info gdb-10.2/gdb/doc/stabs.info --- gdb-9.1/gdb/doc/stabs.info 2020-02-08 12:54:19.000000000 +0000 +++ gdb-10.2/gdb/doc/stabs.info 2021-04-25 04:10:44.000000000 +0000 @@ -1,6 +1,6 @@ -This is stabs.info, produced by makeinfo version 6.5 from stabs.texinfo. +This is stabs.info, produced by makeinfo version 6.7 from stabs.texinfo. -Copyright (C) 1992-2020 Free Software Foundation, Inc. Contributed by +Copyright (C) 1992-2021 Free Software Foundation, Inc. Contributed by Cygnus Support. Written by Julia Menapace, Jim Kingdon, and David MacKenzie. @@ -17,7 +17,7 @@ This document describes the stabs debugging symbol tables. - Copyright (C) 1992-2020 Free Software Foundation, Inc. Contributed + Copyright (C) 1992-2021 Free Software Foundation, Inc. Contributed by Cygnus Support. Written by Julia Menapace, Jim Kingdon, and David MacKenzie. @@ -4577,3 +4577,8 @@ Node: Symbol Types Index175349  End Tag Table + + +Local Variables: +coding: utf-8 +End: diff -Nru gdb-9.1/gdb/doc/stabs.texinfo gdb-10.2/gdb/doc/stabs.texinfo --- gdb-9.1/gdb/doc/stabs.texinfo 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/doc/stabs.texinfo 2021-04-25 04:04:35.000000000 +0000 @@ -17,7 +17,7 @@ @end direntry @copying -Copyright @copyright{} 1992-2020 Free Software Foundation, Inc. +Copyright @copyright{} 1992--2021 Free Software Foundation, Inc. Contributed by Cygnus Support. Written by Julia Menapace, Jim Kingdon, and David MacKenzie. diff -Nru gdb-9.1/gdb/dtrace-probe.c gdb-10.2/gdb/dtrace-probe.c --- gdb-9.1/gdb/dtrace-probe.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/dtrace-probe.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* DTrace probe support for GDB. - Copyright (C) 2014-2020 Free Software Foundation, Inc. + Copyright (C) 2014-2021 Free Software Foundation, Inc. Contributed by Oracle, Inc. @@ -520,7 +520,7 @@ std::vector<std::unique_ptr<probe>> *probesp, struct dtrace_dof_hdr *dof) { - struct gdbarch *gdbarch = get_objfile_arch (objfile); + struct gdbarch *gdbarch = objfile->arch (); struct dtrace_dof_sect *section; int i; @@ -685,8 +685,7 @@ CORE_ADDR dtrace_probe::get_relocated_address (struct objfile *objfile) { - return this->get_address () + ANOFFSET (objfile->section_offsets, - SECT_OFF_DATA (objfile)); + return this->get_address () + objfile->data_section_offset (); } /* Implementation of the get_argument_count method. */ @@ -861,7 +860,7 @@ else complaint (_("could not obtain the contents of" "section '%s' in objfile `%s'."), - sect->name, abfd->filename); + bfd_section_name (sect), bfd_get_filename (abfd)); xfree (dof); } @@ -897,8 +896,9 @@ info_probes_for_spops (arg, from_tty, &dtrace_static_probe_ops); } +void _initialize_dtrace_probe (); void -_initialize_dtrace_probe (void) +_initialize_dtrace_probe () { all_static_probe_ops.push_back (&dtrace_static_probe_ops); diff -Nru gdb-9.1/gdb/dummy-frame.c gdb-10.2/gdb/dummy-frame.c --- gdb-9.1/gdb/dummy-frame.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/dummy-frame.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Code dealing with dummy stack frames, for GDB, the GNU debugger. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -431,8 +431,9 @@ } } +void _initialize_dummy_frame (); void -_initialize_dummy_frame (void) +_initialize_dummy_frame () { add_cmd ("dummy-frames", class_maintenance, maintenance_print_dummy_frames, _("Print the contents of the internal dummy-frame stack."), diff -Nru gdb-9.1/gdb/dummy-frame.h gdb-10.2/gdb/dummy-frame.h --- gdb-9.1/gdb/dummy-frame.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/dummy-frame.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Code dealing with dummy stack frames, for GDB, the GNU debugger. - Copyright (C) 2002-2020 Free Software Foundation, Inc. + Copyright (C) 2002-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/d-valprint.c gdb-10.2/gdb/d-valprint.c --- gdb-9.1/gdb/d-valprint.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/d-valprint.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Support for printing D values for GDB, the GNU debugger. - Copyright (C) 2008-2020 Free Software Foundation, Inc. + Copyright (C) 2008-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -34,8 +34,8 @@ struct value *val, const struct value_print_options *options) { - if (TYPE_NFIELDS (type) == 2 - && TYPE_CODE (TYPE_FIELD_TYPE (type, 0)) == TYPE_CODE_INT + if (type->num_fields () == 2 + && type->field (0).type ()->code () == TYPE_CODE_INT && strcmp (TYPE_FIELD_NAME (type, 0), "length") == 0 && strcmp (TYPE_FIELD_NAME (type, 1), "ptr") == 0 && !value_bits_any_optimized_out (val, @@ -52,7 +52,7 @@ length = unpack_field_as_long (type, valaddr + embedded_offset, 0); - ptr_type = TYPE_FIELD_TYPE (type, 1); + ptr_type = type->field (1).type (); elttype = check_typedef (TYPE_TARGET_TYPE (ptr_type)); addr = unpack_pointer (ptr_type, valaddr + TYPE_FIELD_BITPOS (type, 1) / 8 @@ -63,34 +63,32 @@ ival = value_at (true_type, addr); true_type = value_type (ival); - d_val_print (true_type, - value_embedded_offset (ival), addr, - stream, recurse + 1, ival, options); + d_value_print_inner (ival, stream, recurse + 1, options); return 0; } return 1; } -/* Implements the la_val_print routine for language D. */ +/* See d-lang.h. */ + void -d_val_print (struct type *type, int embedded_offset, - CORE_ADDR address, struct ui_file *stream, int recurse, - struct value *val, - const struct value_print_options *options) +d_value_print_inner (struct value *val, struct ui_file *stream, int recurse, + const struct value_print_options *options) { int ret; - type = check_typedef (type); - switch (TYPE_CODE (type)) + struct type *type = check_typedef (value_type (val)); + switch (type->code ()) { case TYPE_CODE_STRUCT: - ret = dynamic_array_type (type, embedded_offset, address, + ret = dynamic_array_type (type, value_embedded_offset (val), + value_address (val), stream, recurse, val, options); if (ret == 0) break; /* Fall through. */ default: - c_val_print (type, embedded_offset, address, stream, - recurse, val, options); + c_value_print_inner (val, stream, recurse, options); + break; } } diff -Nru gdb-9.1/gdb/dwarf2/abbrev.c gdb-10.2/gdb/dwarf2/abbrev.c --- gdb-9.1/gdb/dwarf2/abbrev.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/dwarf2/abbrev.c 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,183 @@ +/* DWARF 2 abbreviations + + Copyright (C) 1994-2021 Free Software Foundation, Inc. + + Adapted by Gary Funck (gary@intrepid.com), Intrepid Technology, + Inc. with support from Florida State University (under contract + with the Ada Joint Program Office), and Silicon Graphics, Inc. + Initial contribution by Brent Benson, Harris Computer Systems, Inc., + based on Fred Fish's (Cygnus Support) implementation of DWARF 1 + support. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "defs.h" +#include "dwarf2/read.h" +#include "dwarf2/abbrev.h" +#include "dwarf2/leb.h" +#include "bfd.h" + +/* Hash function for an abbrev. */ + +static hashval_t +hash_abbrev (const void *item) +{ + const struct abbrev_info *info = (const struct abbrev_info *) item; + /* Warning: if you change this next line, you must also update the + other code in this class using the _with_hash functions. */ + return info->number; +} + +/* Comparison function for abbrevs. */ + +static int +eq_abbrev (const void *lhs, const void *rhs) +{ + const struct abbrev_info *l_info = (const struct abbrev_info *) lhs; + const struct abbrev_info *r_info = (const struct abbrev_info *) rhs; + return l_info->number == r_info->number; +} + +/* Abbreviation tables. + + In DWARF version 2, the description of the debugging information is + stored in a separate .debug_abbrev section. Before we read any + dies from a section we read in all abbreviations and install them + in a hash table. */ + +abbrev_table::abbrev_table (sect_offset off) + : sect_off (off), + m_abbrevs (htab_create_alloc (20, hash_abbrev, eq_abbrev, + nullptr, xcalloc, xfree)) +{ +} + +/* Allocate space for a struct abbrev_info object in ABBREV_TABLE. */ + +struct abbrev_info * +abbrev_table::alloc_abbrev () +{ + struct abbrev_info *abbrev; + + abbrev = XOBNEW (&m_abbrev_obstack, struct abbrev_info); + memset (abbrev, 0, sizeof (struct abbrev_info)); + + return abbrev; +} + +/* Add an abbreviation to the table. */ + +void +abbrev_table::add_abbrev (struct abbrev_info *abbrev) +{ + void **slot = htab_find_slot_with_hash (m_abbrevs.get (), abbrev, + abbrev->number, INSERT); + *slot = abbrev; +} + +/* Read in an abbrev table. */ + +abbrev_table_up +abbrev_table::read (struct objfile *objfile, + struct dwarf2_section_info *section, + sect_offset sect_off) +{ + bfd *abfd = section->get_bfd_owner (); + const gdb_byte *abbrev_ptr; + struct abbrev_info *cur_abbrev; + unsigned int abbrev_number, bytes_read, abbrev_name; + unsigned int abbrev_form; + std::vector<struct attr_abbrev> cur_attrs; + + abbrev_table_up abbrev_table (new struct abbrev_table (sect_off)); + + section->read (objfile); + abbrev_ptr = section->buffer + to_underlying (sect_off); + abbrev_number = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read); + abbrev_ptr += bytes_read; + + /* Loop until we reach an abbrev number of 0. */ + while (abbrev_number) + { + cur_attrs.clear (); + cur_abbrev = abbrev_table->alloc_abbrev (); + + /* read in abbrev header */ + cur_abbrev->number = abbrev_number; + cur_abbrev->tag + = (enum dwarf_tag) read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read); + abbrev_ptr += bytes_read; + cur_abbrev->has_children = read_1_byte (abfd, abbrev_ptr); + abbrev_ptr += 1; + + /* now read in declarations */ + for (;;) + { + LONGEST implicit_const; + + abbrev_name = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read); + abbrev_ptr += bytes_read; + abbrev_form = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read); + abbrev_ptr += bytes_read; + if (abbrev_form == DW_FORM_implicit_const) + { + implicit_const = read_signed_leb128 (abfd, abbrev_ptr, + &bytes_read); + abbrev_ptr += bytes_read; + } + else + { + /* Initialize it due to a false compiler warning. */ + implicit_const = -1; + } + + if (abbrev_name == 0) + break; + + cur_attrs.emplace_back (); + struct attr_abbrev &cur_attr = cur_attrs.back (); + cur_attr.name = (enum dwarf_attribute) abbrev_name; + cur_attr.form = (enum dwarf_form) abbrev_form; + cur_attr.implicit_const = implicit_const; + } + + cur_abbrev->num_attrs = cur_attrs.size (); + cur_abbrev->attrs = + XOBNEWVEC (&abbrev_table->m_abbrev_obstack, struct attr_abbrev, + cur_abbrev->num_attrs); + if (!cur_attrs.empty ()) + memcpy (cur_abbrev->attrs, cur_attrs.data (), + cur_abbrev->num_attrs * sizeof (struct attr_abbrev)); + + abbrev_table->add_abbrev (cur_abbrev); + + /* Get next abbreviation. + Under Irix6 the abbreviations for a compilation unit are not + always properly terminated with an abbrev number of 0. + Exit loop if we encounter an abbreviation which we have + already read (which means we are about to read the abbreviations + for the next compile unit) or if the end of the abbreviation + table is reached. */ + if ((unsigned int) (abbrev_ptr - section->buffer) >= section->size) + break; + abbrev_number = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read); + abbrev_ptr += bytes_read; + if (abbrev_table->lookup_abbrev (abbrev_number) != NULL) + break; + } + + return abbrev_table; +} diff -Nru gdb-9.1/gdb/dwarf2/abbrev.h gdb-10.2/gdb/dwarf2/abbrev.h --- gdb-9.1/gdb/dwarf2/abbrev.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/dwarf2/abbrev.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,99 @@ +/* DWARF abbrev table + + Copyright (C) 1994-2021 Free Software Foundation, Inc. + + Adapted by Gary Funck (gary@intrepid.com), Intrepid Technology, + Inc. with support from Florida State University (under contract + with the Ada Joint Program Office), and Silicon Graphics, Inc. + Initial contribution by Brent Benson, Harris Computer Systems, Inc., + based on Fred Fish's (Cygnus Support) implementation of DWARF 1 + support. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef GDB_DWARF2_ABBREV_H +#define GDB_DWARF2_ABBREV_H + +#include "hashtab.h" + +/* This data structure holds the information of an abbrev. */ +struct abbrev_info + { + unsigned int number; /* number identifying abbrev */ + enum dwarf_tag tag; /* dwarf tag */ + unsigned short has_children; /* boolean */ + unsigned short num_attrs; /* number of attributes */ + struct attr_abbrev *attrs; /* an array of attribute descriptions */ + }; + +struct attr_abbrev + { + ENUM_BITFIELD(dwarf_attribute) name : 16; + ENUM_BITFIELD(dwarf_form) form : 16; + + /* It is valid only if FORM is DW_FORM_implicit_const. */ + LONGEST implicit_const; + }; + +struct abbrev_table; +typedef std::unique_ptr<struct abbrev_table> abbrev_table_up; + +/* Top level data structure to contain an abbreviation table. */ + +struct abbrev_table +{ + static abbrev_table_up read (struct objfile *objfile, + struct dwarf2_section_info *section, + sect_offset sect_off); + + /* Look up an abbrev in the table. + Returns NULL if the abbrev is not found. */ + + struct abbrev_info *lookup_abbrev (unsigned int abbrev_number) + { + struct abbrev_info search; + search.number = abbrev_number; + + return (struct abbrev_info *) htab_find_with_hash (m_abbrevs.get (), + &search, + abbrev_number); + } + + /* Where the abbrev table came from. + This is used as a sanity check when the table is used. */ + const sect_offset sect_off; + +private: + + explicit abbrev_table (sect_offset off); + + DISABLE_COPY_AND_ASSIGN (abbrev_table); + + /* Allocate space for a struct abbrev_info object in + ABBREV_TABLE. */ + struct abbrev_info *alloc_abbrev (); + + /* Add an abbreviation to the table. */ + void add_abbrev (struct abbrev_info *abbrev); + + /* Hash table of abbrevs. */ + htab_up m_abbrevs; + + /* Storage for the abbrev table. */ + auto_obstack m_abbrev_obstack; +}; + +#endif /* GDB_DWARF2_ABBREV_H */ diff -Nru gdb-9.1/gdb/dwarf2/attribute.c gdb-10.2/gdb/dwarf2/attribute.c --- gdb-9.1/gdb/dwarf2/attribute.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/dwarf2/attribute.c 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,152 @@ +/* DWARF attributes + + Copyright (C) 1994-2021 Free Software Foundation, Inc. + + Adapted by Gary Funck (gary@intrepid.com), Intrepid Technology, + Inc. with support from Florida State University (under contract + with the Ada Joint Program Office), and Silicon Graphics, Inc. + Initial contribution by Brent Benson, Harris Computer Systems, Inc., + based on Fred Fish's (Cygnus Support) implementation of DWARF 1 + support. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "defs.h" +#include "dwarf2/attribute.h" +#include "dwarf2/stringify.h" +#include "complaints.h" + +/* See attribute.h. */ + +CORE_ADDR +attribute::value_as_address () const +{ + CORE_ADDR addr; + + if (form != DW_FORM_addr && form != DW_FORM_addrx + && form != DW_FORM_GNU_addr_index) + { + /* Aside from a few clearly defined exceptions, attributes that + contain an address must always be in DW_FORM_addr form. + Unfortunately, some compilers happen to be violating this + requirement by encoding addresses using other forms, such + as DW_FORM_data4 for example. For those broken compilers, + we try to do our best, without any guarantee of success, + to interpret the address correctly. It would also be nice + to generate a complaint, but that would require us to maintain + a list of legitimate cases where a non-address form is allowed, + as well as update callers to pass in at least the CU's DWARF + version. This is more overhead than what we're willing to + expand for a pretty rare case. */ + addr = DW_UNSND (this); + } + else + addr = DW_ADDR (this); + + return addr; +} + +/* See attribute.h. */ + +const char * +attribute::value_as_string () const +{ + if (form == DW_FORM_strp || form == DW_FORM_line_strp + || form == DW_FORM_string + || form == DW_FORM_strx + || form == DW_FORM_strx1 + || form == DW_FORM_strx2 + || form == DW_FORM_strx3 + || form == DW_FORM_strx4 + || form == DW_FORM_GNU_str_index + || form == DW_FORM_GNU_strp_alt) + return DW_STRING (this); + return nullptr; +} + +/* See attribute.h. */ + +bool +attribute::form_is_block () const +{ + return (form == DW_FORM_block1 + || form == DW_FORM_block2 + || form == DW_FORM_block4 + || form == DW_FORM_block + || form == DW_FORM_exprloc); +} + +/* See attribute.h. */ + +bool +attribute::form_is_section_offset () const +{ + return (form == DW_FORM_data4 + || form == DW_FORM_data8 + || form == DW_FORM_sec_offset + || form == DW_FORM_loclistx); +} + +/* See attribute.h. */ + +bool +attribute::form_is_constant () const +{ + switch (form) + { + case DW_FORM_sdata: + case DW_FORM_udata: + case DW_FORM_data1: + case DW_FORM_data2: + case DW_FORM_data4: + case DW_FORM_data8: + case DW_FORM_implicit_const: + return true; + default: + return false; + } +} + +/* See attribute.h. */ + +void +attribute::get_ref_die_offset_complaint () const +{ + complaint (_("unsupported die ref attribute form: '%s'"), + dwarf_form_name (form)); +} + +/* See attribute.h. */ + +LONGEST +attribute::constant_value (int default_value) const +{ + if (form == DW_FORM_sdata || form == DW_FORM_implicit_const) + return DW_SND (this); + else if (form == DW_FORM_udata + || form == DW_FORM_data1 + || form == DW_FORM_data2 + || form == DW_FORM_data4 + || form == DW_FORM_data8) + return DW_UNSND (this); + else + { + /* For DW_FORM_data16 see attribute::form_is_constant. */ + complaint (_("Attribute value is not a constant (%s)"), + dwarf_form_name (form)); + return default_value; + } +} diff -Nru gdb-9.1/gdb/dwarf2/attribute.h gdb-10.2/gdb/dwarf2/attribute.h --- gdb-9.1/gdb/dwarf2/attribute.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/dwarf2/attribute.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,155 @@ +/* DWARF attributes + + Copyright (C) 1994-2021 Free Software Foundation, Inc. + + Adapted by Gary Funck (gary@intrepid.com), Intrepid Technology, + Inc. with support from Florida State University (under contract + with the Ada Joint Program Office), and Silicon Graphics, Inc. + Initial contribution by Brent Benson, Harris Computer Systems, Inc., + based on Fred Fish's (Cygnus Support) implementation of DWARF 1 + support. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef GDB_DWARF2_ATTRIBUTE_H +#define GDB_DWARF2_ATTRIBUTE_H + +#include "dwarf2.h" +#include "gdbtypes.h" + +/* Blocks are a bunch of untyped bytes. */ +struct dwarf_block +{ + size_t size; + + /* Valid only if SIZE is not zero. */ + const gdb_byte *data; +}; + +/* Attributes have a name and a value. */ +struct attribute +{ + /* Read the given attribute value as an address, taking the + attribute's form into account. */ + CORE_ADDR value_as_address () const; + + /* If the attribute has a string form, return the string value; + otherwise return NULL. */ + const char *value_as_string () const; + + /* Return non-zero if ATTR's value is a section offset --- classes + lineptr, loclistptr, macptr or rangelistptr --- or zero, otherwise. + You may use DW_UNSND (attr) to retrieve such offsets. + + Section 7.5.4, "Attribute Encodings", explains that no attribute + may have a value that belongs to more than one of these classes; it + would be ambiguous if we did, because we use the same forms for all + of them. */ + + bool form_is_section_offset () const; + + /* 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. + + However, note that for some attributes you must check + attr_form_is_section_offset before using this test. DW_FORM_data4 + and DW_FORM_data8 are members of both the constant class, and of + the classes that contain offsets into other debug sections + (lineptr, loclistptr, macptr or rangelistptr). The DWARF spec says + that, if an attribute's can be either a constant or one of the + section offset classes, DW_FORM_data4 and DW_FORM_data8 should be + taken as section offsets, not constants. + + DW_FORM_data16 is not considered as constant_value cannot handle + that. */ + + bool form_is_constant () const; + + /* DW_ADDR is always stored already as sect_offset; despite for the forms + besides DW_FORM_ref_addr it is stored as cu_offset in the DWARF file. */ + + bool form_is_ref () const + { + return (form == DW_FORM_ref_addr + || form == DW_FORM_ref1 + || form == DW_FORM_ref2 + || form == DW_FORM_ref4 + || form == DW_FORM_ref8 + || form == DW_FORM_ref_udata + || form == DW_FORM_GNU_ref_alt); + } + + /* Check if the attribute's form is a DW_FORM_block* + if so return true else false. */ + + bool form_is_block () const; + + /* Return DIE offset of this attribute. Return 0 with complaint if + the attribute is not of the required kind. */ + + sect_offset get_ref_die_offset () const + { + if (form_is_ref ()) + return (sect_offset) u.unsnd; + get_ref_die_offset_complaint (); + return {}; + } + + /* Return the constant value held by this attribute. Return + DEFAULT_VALUE if the value held by the attribute is not + constant. */ + + LONGEST constant_value (int default_value) const; + + + ENUM_BITFIELD(dwarf_attribute) name : 16; + ENUM_BITFIELD(dwarf_form) form : 15; + + /* Has DW_STRING already been updated by dwarf2_canonicalize_name? This + field should be in u.str (existing only for DW_STRING) but it is kept + here for better struct attribute alignment. */ + unsigned int string_is_canonical : 1; + + union + { + const char *str; + struct dwarf_block *blk; + ULONGEST unsnd; + LONGEST snd; + CORE_ADDR addr; + ULONGEST signature; + } + u; + +private: + + /* Used by get_ref_die_offset to issue a complaint. */ + + void get_ref_die_offset_complaint () const; +}; + +/* Get at parts of an attribute structure. */ + +#define DW_STRING(attr) ((attr)->u.str) +#define DW_STRING_IS_CANONICAL(attr) ((attr)->string_is_canonical) +#define DW_UNSND(attr) ((attr)->u.unsnd) +#define DW_BLOCK(attr) ((attr)->u.blk) +#define DW_SND(attr) ((attr)->u.snd) +#define DW_ADDR(attr) ((attr)->u.addr) +#define DW_SIGNATURE(attr) ((attr)->u.signature) + +#endif /* GDB_DWARF2_ATTRIBUTE_H */ diff -Nru gdb-9.1/gdb/dwarf2/comp-unit.c gdb-10.2/gdb/dwarf2/comp-unit.c --- gdb-9.1/gdb/dwarf2/comp-unit.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/dwarf2/comp-unit.c 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,272 @@ +/* DWARF 2 debugging format support for GDB. + + Copyright (C) 1994-2021 Free Software Foundation, Inc. + + Adapted by Gary Funck (gary@intrepid.com), Intrepid Technology, + Inc. with support from Florida State University (under contract + with the Ada Joint Program Office), and Silicon Graphics, Inc. + Initial contribution by Brent Benson, Harris Computer Systems, Inc., + based on Fred Fish's (Cygnus Support) implementation of DWARF 1 + support. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "defs.h" +#include "dwarf2/comp-unit.h" +#include "dwarf2/leb.h" +#include "dwarf2/read.h" +#include "dwarf2/section.h" + +/* Convert a unit type to corresponding DW_UT name. */ + +static const char * +dwarf_unit_type_name (int unit_type) +{ + switch (unit_type) + { + case 0x01: + return "DW_UT_compile (0x01)"; + case 0x02: + return "DW_UT_type (0x02)"; + case 0x03: + return "DW_UT_partial (0x03)"; + case 0x04: + return "DW_UT_skeleton (0x04)"; + case 0x05: + return "DW_UT_split_compile (0x05)"; + case 0x06: + return "DW_UT_split_type (0x06)"; + case 0x80: + return "DW_UT_lo_user (0x80)"; + case 0xff: + return "DW_UT_hi_user (0xff)"; + default: + return nullptr; + } +} + +/* See comp-unit.h. */ + +const gdb_byte * +read_comp_unit_head (struct comp_unit_head *cu_header, + const gdb_byte *info_ptr, + struct dwarf2_section_info *section, + rcuh_kind section_kind) +{ + int signed_addr; + unsigned int bytes_read; + const char *filename = section->get_file_name (); + bfd *abfd = section->get_bfd_owner (); + + cu_header->length = read_initial_length (abfd, info_ptr, &bytes_read); + cu_header->initial_length_size = bytes_read; + cu_header->offset_size = (bytes_read == 4) ? 4 : 8; + info_ptr += bytes_read; + cu_header->version = read_2_bytes (abfd, info_ptr); + if (cu_header->version < 2 || cu_header->version > 5) + error (_("Dwarf Error: wrong version in compilation unit header " + "(is %d, should be 2, 3, 4 or 5) [in module %s]"), + cu_header->version, filename); + info_ptr += 2; + if (cu_header->version < 5) + switch (section_kind) + { + case rcuh_kind::COMPILE: + cu_header->unit_type = DW_UT_compile; + break; + case rcuh_kind::TYPE: + cu_header->unit_type = DW_UT_type; + break; + default: + internal_error (__FILE__, __LINE__, + _("read_comp_unit_head: invalid section_kind")); + } + else + { + cu_header->unit_type = static_cast<enum dwarf_unit_type> + (read_1_byte (abfd, info_ptr)); + info_ptr += 1; + switch (cu_header->unit_type) + { + case DW_UT_compile: + case DW_UT_partial: + case DW_UT_skeleton: + case DW_UT_split_compile: + if (section_kind != rcuh_kind::COMPILE) + error (_("Dwarf Error: wrong unit_type in compilation unit header " + "(is %s, should be %s) [in module %s]"), + dwarf_unit_type_name (cu_header->unit_type), + dwarf_unit_type_name (DW_UT_type), filename); + break; + case DW_UT_type: + case DW_UT_split_type: + section_kind = rcuh_kind::TYPE; + break; + default: + error (_("Dwarf Error: wrong unit_type in compilation unit header " + "(is %#04x, should be one of: %s, %s, %s, %s or %s) " + "[in module %s]"), cu_header->unit_type, + dwarf_unit_type_name (DW_UT_compile), + dwarf_unit_type_name (DW_UT_skeleton), + dwarf_unit_type_name (DW_UT_split_compile), + dwarf_unit_type_name (DW_UT_type), + dwarf_unit_type_name (DW_UT_split_type), filename); + } + + cu_header->addr_size = read_1_byte (abfd, info_ptr); + info_ptr += 1; + } + cu_header->abbrev_sect_off + = (sect_offset) cu_header->read_offset (abfd, info_ptr, &bytes_read); + info_ptr += bytes_read; + if (cu_header->version < 5) + { + cu_header->addr_size = read_1_byte (abfd, info_ptr); + info_ptr += 1; + } + signed_addr = bfd_get_sign_extend_vma (abfd); + if (signed_addr < 0) + internal_error (__FILE__, __LINE__, + _("read_comp_unit_head: dwarf from non elf file")); + cu_header->signed_addr_p = signed_addr; + + bool header_has_signature = section_kind == rcuh_kind::TYPE + || cu_header->unit_type == DW_UT_skeleton + || cu_header->unit_type == DW_UT_split_compile; + + if (header_has_signature) + { + cu_header->signature = read_8_bytes (abfd, info_ptr); + info_ptr += 8; + } + + if (section_kind == rcuh_kind::TYPE) + { + LONGEST type_offset; + type_offset = cu_header->read_offset (abfd, info_ptr, &bytes_read); + info_ptr += bytes_read; + cu_header->type_cu_offset_in_tu = (cu_offset) type_offset; + if (to_underlying (cu_header->type_cu_offset_in_tu) != type_offset) + error (_("Dwarf Error: Too big type_offset in compilation unit " + "header (is %s) [in module %s]"), plongest (type_offset), + filename); + } + + return info_ptr; +} + +/* Subroutine of read_and_check_comp_unit_head and + read_and_check_type_unit_head to simplify them. + Perform various error checking on the header. */ + +static void +error_check_comp_unit_head (dwarf2_per_objfile *per_objfile, + struct comp_unit_head *header, + struct dwarf2_section_info *section, + struct dwarf2_section_info *abbrev_section) +{ + const char *filename = section->get_file_name (); + + if (to_underlying (header->abbrev_sect_off) + >= abbrev_section->get_size (per_objfile->objfile)) + error (_("Dwarf Error: bad offset (%s) in compilation unit header " + "(offset %s + 6) [in module %s]"), + sect_offset_str (header->abbrev_sect_off), + sect_offset_str (header->sect_off), + filename); + + /* Cast to ULONGEST to use 64-bit arithmetic when possible to + avoid potential 32-bit overflow. */ + if (((ULONGEST) header->sect_off + header->get_length ()) + > section->size) + error (_("Dwarf Error: bad length (0x%x) in compilation unit header " + "(offset %s + 0) [in module %s]"), + header->length, sect_offset_str (header->sect_off), + filename); +} + +/* See comp-unit.h. */ + +const gdb_byte * +read_and_check_comp_unit_head (dwarf2_per_objfile *per_objfile, + struct comp_unit_head *header, + struct dwarf2_section_info *section, + struct dwarf2_section_info *abbrev_section, + const gdb_byte *info_ptr, + rcuh_kind section_kind) +{ + const gdb_byte *beg_of_comp_unit = info_ptr; + + header->sect_off = (sect_offset) (beg_of_comp_unit - section->buffer); + + info_ptr = read_comp_unit_head (header, info_ptr, section, section_kind); + + header->first_die_cu_offset = (cu_offset) (info_ptr - beg_of_comp_unit); + + error_check_comp_unit_head (per_objfile, header, section, abbrev_section); + + return info_ptr; +} + +CORE_ADDR +comp_unit_head::read_address (bfd *abfd, const gdb_byte *buf, + unsigned int *bytes_read) const +{ + CORE_ADDR retval = 0; + + if (signed_addr_p) + { + switch (addr_size) + { + case 2: + retval = bfd_get_signed_16 (abfd, buf); + break; + case 4: + retval = bfd_get_signed_32 (abfd, buf); + break; + case 8: + retval = bfd_get_signed_64 (abfd, buf); + break; + default: + internal_error (__FILE__, __LINE__, + _("read_address: bad switch, signed [in module %s]"), + bfd_get_filename (abfd)); + } + } + else + { + switch (addr_size) + { + case 2: + retval = bfd_get_16 (abfd, buf); + break; + case 4: + retval = bfd_get_32 (abfd, buf); + break; + case 8: + retval = bfd_get_64 (abfd, buf); + break; + default: + internal_error (__FILE__, __LINE__, + _("read_address: bad switch, " + "unsigned [in module %s]"), + bfd_get_filename (abfd)); + } + } + + *bytes_read = addr_size; + return retval; +} diff -Nru gdb-9.1/gdb/dwarf2/comp-unit.h gdb-10.2/gdb/dwarf2/comp-unit.h --- gdb-9.1/gdb/dwarf2/comp-unit.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/dwarf2/comp-unit.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,122 @@ +/* Low-level DWARF 2 reading code + + Copyright (C) 1994-2021 Free Software Foundation, Inc. + + Adapted by Gary Funck (gary@intrepid.com), Intrepid Technology, + Inc. with support from Florida State University (under contract + with the Ada Joint Program Office), and Silicon Graphics, Inc. + Initial contribution by Brent Benson, Harris Computer Systems, Inc., + based on Fred Fish's (Cygnus Support) implementation of DWARF 1 + support. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef GDB_DWARF2_COMP_UNIT_H +#define GDB_DWARF2_COMP_UNIT_H + +#include "dwarf2/leb.h" +#include "gdbtypes.h" + +/* The data in a compilation unit header, after target2host + translation, looks like this. */ +struct comp_unit_head +{ + unsigned int length; + short version; + unsigned char addr_size; + unsigned char signed_addr_p; + sect_offset abbrev_sect_off; + + /* Size of file offsets; either 4 or 8. */ + unsigned int offset_size; + + /* Size of the length field; either 4 or 12. */ + unsigned int initial_length_size; + + enum dwarf_unit_type unit_type; + + /* Offset to the first byte of this compilation unit header in the + .debug_info section, for resolving relative reference dies. */ + sect_offset sect_off; + + /* Offset to first die in this cu from the start of the cu. + This will be the first byte following the compilation unit header. */ + cu_offset first_die_cu_offset; + + + /* 64-bit signature of this unit. For type units, it denotes the signature of + the type (DW_UT_type in DWARF 4, additionally DW_UT_split_type in DWARF 5). + Also used in DWARF 5, to denote the dwo id when the unit type is + DW_UT_skeleton or DW_UT_split_compile. */ + ULONGEST signature; + + /* For types, offset in the type's DIE of the type defined by this TU. */ + cu_offset type_cu_offset_in_tu; + + /* Return the total length of the CU described by this header. */ + unsigned int get_length () const + { + return initial_length_size + length; + } + + /* Return TRUE if OFF is within this CU. */ + bool offset_in_cu_p (sect_offset off) const + { + sect_offset bottom = sect_off; + sect_offset top = sect_off + get_length (); + return off >= bottom && off < top; + } + + /* Read an offset from the data stream. The size of the offset is + given by cu_header->offset_size. */ + LONGEST read_offset (bfd *abfd, const gdb_byte *buf, + unsigned int *bytes_read) const + { + LONGEST offset = ::read_offset (abfd, buf, offset_size); + *bytes_read = offset_size; + return offset; + } + + /* Read an address from BUF. BYTES_READ is updated. */ + CORE_ADDR read_address (bfd *abfd, const gdb_byte *buf, + unsigned int *bytes_read) const; +}; + +/* Expected enum dwarf_unit_type for read_comp_unit_head. */ +enum class rcuh_kind { COMPILE, TYPE }; + +/* Read in the comp unit header information from the debug_info at info_ptr. + Use rcuh_kind::COMPILE as the default type if not known by the caller. + NOTE: This leaves members offset, first_die_offset to be filled in + by the caller. */ +extern const gdb_byte *read_comp_unit_head + (struct comp_unit_head *cu_header, + const gdb_byte *info_ptr, + struct dwarf2_section_info *section, + rcuh_kind section_kind); + +/* Read in a CU/TU header and perform some basic error checking. + The contents of the header are stored in HEADER. + The result is a pointer to the start of the first DIE. */ +extern const gdb_byte *read_and_check_comp_unit_head + (dwarf2_per_objfile *per_objfile, + struct comp_unit_head *header, + struct dwarf2_section_info *section, + struct dwarf2_section_info *abbrev_section, + const gdb_byte *info_ptr, + rcuh_kind section_kind); + +#endif /* GDB_DWARF2_COMP_UNIT_H */ diff -Nru gdb-9.1/gdb/dwarf2/die.h gdb-10.2/gdb/dwarf2/die.h --- gdb-9.1/gdb/dwarf2/die.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/dwarf2/die.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,103 @@ +/* DWARF DIEs + + Copyright (C) 2003-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef GDB_DWARF2_DIE_H +#define GDB_DWARF2_DIE_H + +/* This data structure holds a complete die structure. */ +struct die_info +{ + /* Return the named attribute or NULL if not there, but do not + follow DW_AT_specification, etc. */ + struct attribute *attr (dwarf_attribute name) + { + for (unsigned i = 0; i < num_attrs; ++i) + if (attrs[i].name == name) + return &attrs[i]; + return NULL; + } + + /* Return the address base of the compile unit, which, if exists, is + stored either at the attribute DW_AT_GNU_addr_base, or + DW_AT_addr_base. */ + gdb::optional<ULONGEST> addr_base () + { + for (unsigned i = 0; i < num_attrs; ++i) + if (attrs[i].name == DW_AT_addr_base + || attrs[i].name == DW_AT_GNU_addr_base) + { + /* If both exist, just use the first one. */ + return DW_UNSND (&attrs[i]); + } + return gdb::optional<ULONGEST> (); + } + + /* Return range lists base of the compile unit, which, if exists, is + stored either at the attribute DW_AT_rnglists_base or + DW_AT_GNU_ranges_base. */ + ULONGEST ranges_base () + { + for (unsigned i = 0; i < num_attrs; ++i) + if (attrs[i].name == DW_AT_rnglists_base + || attrs[i].name == DW_AT_GNU_ranges_base) + { + /* If both exist, just use the first one. */ + return DW_UNSND (&attrs[i]); + } + return 0; + } + + + /* DWARF-2 tag for this DIE. */ + ENUM_BITFIELD(dwarf_tag) tag : 16; + + /* Number of attributes */ + unsigned char num_attrs; + + /* True if we're presently building the full type name for the + type derived from this DIE. */ + unsigned char building_fullname : 1; + + /* True if this die is in process. PR 16581. */ + unsigned char in_process : 1; + + /* True if this DIE has children. */ + unsigned char has_children : 1; + + /* Abbrev number */ + unsigned int abbrev; + + /* Offset in .debug_info or .debug_types section. */ + sect_offset sect_off; + + /* The dies in a compilation unit form an n-ary tree. PARENT + points to this die's parent; CHILD points to the first child of + this node; and all the children of a given node are chained + together via their SIBLING fields. */ + struct die_info *child; /* Its first child, if any. */ + struct die_info *sibling; /* Its next sibling, if any. */ + struct die_info *parent; /* Its parent, if any. */ + + /* An array of attributes, with NUM_ATTRS elements. There may be + zero, but it's not common and zero-sized arrays are not + sufficiently portable C. */ + struct attribute attrs[1]; +}; + +#endif /* GDB_DWARF2_DIE_H */ diff -Nru gdb-9.1/gdb/dwarf2/dwz.c gdb-10.2/gdb/dwarf2/dwz.c --- gdb-9.1/gdb/dwarf2/dwz.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/dwarf2/dwz.c 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,40 @@ +/* DWARF DWZ handling for GDB. + + Copyright (C) 2003-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "defs.h" +#include "dwarf2/dwz.h" + +const char * +dwz_file::read_string (struct objfile *objfile, LONGEST str_offset) +{ + str.read (objfile); + + if (str.buffer == NULL) + error (_("DW_FORM_GNU_strp_alt used without .debug_str " + "section [in module %s]"), + bfd_get_filename (dwz_bfd.get ())); + if (str_offset >= str.size) + error (_("DW_FORM_GNU_strp_alt pointing outside of " + ".debug_str section [in module %s]"), + bfd_get_filename (dwz_bfd.get ())); + gdb_assert (HOST_CHAR_BIT == 8); + if (str.buffer[str_offset] == '\0') + return NULL; + return (const char *) (str.buffer + str_offset); +} diff -Nru gdb-9.1/gdb/dwarf2/dwz.h gdb-10.2/gdb/dwarf2/dwz.h --- gdb-9.1/gdb/dwarf2/dwz.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/dwarf2/dwz.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,65 @@ +/* DWARF DWZ handling for GDB. + + Copyright (C) 2003-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef GDB_DWARF2_DWZ_H +#define GDB_DWARF2_DWZ_H + +#include "gdb_bfd.h" +#include "dwarf2/index-cache.h" +#include "dwarf2/section.h" + +/* This represents a '.dwz' file. */ + +struct dwz_file +{ + dwz_file (gdb_bfd_ref_ptr &&bfd) + : dwz_bfd (std::move (bfd)) + { + } + + const char *filename () const + { + return bfd_get_filename (this->dwz_bfd.get ()); + } + + /* A dwz file can only contain a few sections. */ + struct dwarf2_section_info abbrev {}; + struct dwarf2_section_info info {}; + struct dwarf2_section_info str {}; + struct dwarf2_section_info line {}; + struct dwarf2_section_info macro {}; + struct dwarf2_section_info gdb_index {}; + struct dwarf2_section_info debug_names {}; + + /* The dwz's BFD. */ + gdb_bfd_ref_ptr dwz_bfd; + + /* If we loaded the index from an external file, this contains the + resources associated to the open file, memory mapping, etc. */ + std::unique_ptr<index_cache_resource> index_cache_res; + + /* Read a string at offset STR_OFFSET in the .debug_str section from + this dwz file. Throw an error if the offset is too large. If + the string consists of a single NUL byte, return NULL; otherwise + return a pointer to the string. */ + + const char *read_string (struct objfile *objfile, LONGEST str_offset); +}; + +#endif /* GDB_DWARF2_DWZ_H */ diff -Nru gdb-9.1/gdb/dwarf2/expr.c gdb-10.2/gdb/dwarf2/expr.c --- gdb-9.1/gdb/dwarf2/expr.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/dwarf2/expr.c 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,1430 @@ +/* DWARF 2 Expression Evaluator. + + Copyright (C) 2001-2021 Free Software Foundation, Inc. + + Contributed by Daniel Berlin (dan@dberlin.org) + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "defs.h" +#include "symtab.h" +#include "gdbtypes.h" +#include "value.h" +#include "gdbcore.h" +#include "dwarf2.h" +#include "dwarf2/expr.h" +#include "dwarf2/loc.h" +#include "dwarf2/read.h" +#include "gdbsupport/underlying.h" +#include "gdbarch.h" + +/* Cookie for gdbarch data. */ + +static struct gdbarch_data *dwarf_arch_cookie; + +/* This holds gdbarch-specific types used by the DWARF expression + evaluator. See comments in execute_stack_op. */ + +struct dwarf_gdbarch_types +{ + struct type *dw_types[3]; +}; + +/* Allocate and fill in dwarf_gdbarch_types for an arch. */ + +static void * +dwarf_gdbarch_types_init (struct gdbarch *gdbarch) +{ + struct dwarf_gdbarch_types *types + = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct dwarf_gdbarch_types); + + /* The types themselves are lazily initialized. */ + + return types; +} + +/* Return the type used for DWARF operations where the type is + unspecified in the DWARF spec. Only certain sizes are + supported. */ + +struct type * +dwarf_expr_context::address_type () const +{ + struct dwarf_gdbarch_types *types + = (struct dwarf_gdbarch_types *) gdbarch_data (this->gdbarch, + dwarf_arch_cookie); + int ndx; + + if (this->addr_size == 2) + ndx = 0; + else if (this->addr_size == 4) + ndx = 1; + else if (this->addr_size == 8) + ndx = 2; + else + error (_("Unsupported address size in DWARF expressions: %d bits"), + 8 * this->addr_size); + + if (types->dw_types[ndx] == NULL) + types->dw_types[ndx] + = arch_integer_type (this->gdbarch, + 8 * this->addr_size, + 0, "<signed DWARF address type>"); + + return types->dw_types[ndx]; +} + +/* Create a new context for the expression evaluator. */ + +dwarf_expr_context::dwarf_expr_context (dwarf2_per_objfile *per_objfile) +: gdbarch (NULL), + addr_size (0), + ref_addr_size (0), + recursion_depth (0), + max_recursion_depth (0x100), + location (DWARF_VALUE_MEMORY), + len (0), + data (NULL), + initialized (0), + per_objfile (per_objfile) +{ +} + +/* Push VALUE onto the stack. */ + +void +dwarf_expr_context::push (struct value *value, bool in_stack_memory) +{ + stack.emplace_back (value, in_stack_memory); +} + +/* Push VALUE onto the stack. */ + +void +dwarf_expr_context::push_address (CORE_ADDR value, bool in_stack_memory) +{ + push (value_from_ulongest (address_type (), value), in_stack_memory); +} + +/* Pop the top item off of the stack. */ + +void +dwarf_expr_context::pop () +{ + if (stack.empty ()) + error (_("dwarf expression stack underflow")); + + stack.pop_back (); +} + +/* Retrieve the N'th item on the stack. */ + +struct value * +dwarf_expr_context::fetch (int n) +{ + if (stack.size () <= n) + error (_("Asked for position %d of stack, " + "stack only has %zu elements on it."), + n, stack.size ()); + return stack[stack.size () - (1 + n)].value; +} + +/* Require that TYPE be an integral type; throw an exception if not. */ + +static void +dwarf_require_integral (struct type *type) +{ + if (type->code () != TYPE_CODE_INT + && type->code () != TYPE_CODE_CHAR + && type->code () != TYPE_CODE_BOOL) + error (_("integral type expected in DWARF expression")); +} + +/* Return the unsigned form of TYPE. TYPE is necessarily an integral + type. */ + +static struct type * +get_unsigned_type (struct gdbarch *gdbarch, struct type *type) +{ + switch (TYPE_LENGTH (type)) + { + case 1: + return builtin_type (gdbarch)->builtin_uint8; + case 2: + return builtin_type (gdbarch)->builtin_uint16; + case 4: + return builtin_type (gdbarch)->builtin_uint32; + case 8: + return builtin_type (gdbarch)->builtin_uint64; + default: + error (_("no unsigned variant found for type, while evaluating " + "DWARF expression")); + } +} + +/* Return the signed form of TYPE. TYPE is necessarily an integral + type. */ + +static struct type * +get_signed_type (struct gdbarch *gdbarch, struct type *type) +{ + switch (TYPE_LENGTH (type)) + { + case 1: + return builtin_type (gdbarch)->builtin_int8; + case 2: + return builtin_type (gdbarch)->builtin_int16; + case 4: + return builtin_type (gdbarch)->builtin_int32; + case 8: + return builtin_type (gdbarch)->builtin_int64; + default: + error (_("no signed variant found for type, while evaluating " + "DWARF expression")); + } +} + +/* Retrieve the N'th item on the stack, converted to an address. */ + +CORE_ADDR +dwarf_expr_context::fetch_address (int n) +{ + struct value *result_val = fetch (n); + enum bfd_endian byte_order = gdbarch_byte_order (this->gdbarch); + ULONGEST result; + + dwarf_require_integral (value_type (result_val)); + result = extract_unsigned_integer (value_contents (result_val), + TYPE_LENGTH (value_type (result_val)), + byte_order); + + /* For most architectures, calling extract_unsigned_integer() alone + is sufficient for extracting an address. However, some + architectures (e.g. MIPS) use signed addresses and using + extract_unsigned_integer() will not produce a correct + result. Make sure we invoke gdbarch_integer_to_address() + for those architectures which require it. */ + if (gdbarch_integer_to_address_p (this->gdbarch)) + { + gdb_byte *buf = (gdb_byte *) alloca (this->addr_size); + struct type *int_type = get_unsigned_type (this->gdbarch, + value_type (result_val)); + + store_unsigned_integer (buf, this->addr_size, byte_order, result); + return gdbarch_integer_to_address (this->gdbarch, int_type, buf); + } + + return (CORE_ADDR) result; +} + +/* Retrieve the in_stack_memory flag of the N'th item on the stack. */ + +bool +dwarf_expr_context::fetch_in_stack_memory (int n) +{ + if (stack.size () <= n) + error (_("Asked for position %d of stack, " + "stack only has %zu elements on it."), + n, stack.size ()); + return stack[stack.size () - (1 + n)].in_stack_memory; +} + +/* Return true if the expression stack is empty. */ + +bool +dwarf_expr_context::stack_empty_p () const +{ + return stack.empty (); +} + +/* Add a new piece to the dwarf_expr_context's piece list. */ +void +dwarf_expr_context::add_piece (ULONGEST size, ULONGEST offset) +{ + this->pieces.emplace_back (); + dwarf_expr_piece &p = this->pieces.back (); + + p.location = this->location; + p.size = size; + p.offset = offset; + + if (p.location == DWARF_VALUE_LITERAL) + { + p.v.literal.data = this->data; + p.v.literal.length = this->len; + } + else if (stack_empty_p ()) + { + p.location = DWARF_VALUE_OPTIMIZED_OUT; + /* Also reset the context's location, for our callers. This is + a somewhat strange approach, but this lets us avoid setting + the location to DWARF_VALUE_MEMORY in all the individual + cases in the evaluator. */ + this->location = DWARF_VALUE_OPTIMIZED_OUT; + } + else if (p.location == DWARF_VALUE_MEMORY) + { + p.v.mem.addr = fetch_address (0); + p.v.mem.in_stack_memory = fetch_in_stack_memory (0); + } + else if (p.location == DWARF_VALUE_IMPLICIT_POINTER) + { + p.v.ptr.die_sect_off = (sect_offset) this->len; + p.v.ptr.offset = value_as_long (fetch (0)); + } + else if (p.location == DWARF_VALUE_REGISTER) + p.v.regno = value_as_long (fetch (0)); + else + { + p.v.value = fetch (0); + } +} + +/* Evaluate the expression at ADDR (LEN bytes long). */ + +void +dwarf_expr_context::eval (const gdb_byte *addr, size_t len) +{ + int old_recursion_depth = this->recursion_depth; + + execute_stack_op (addr, addr + len); + + /* RECURSION_DEPTH becomes invalid if an exception was thrown here. */ + + gdb_assert (this->recursion_depth == old_recursion_depth); +} + +/* Helper to read a uleb128 value or throw an error. */ + +const gdb_byte * +safe_read_uleb128 (const gdb_byte *buf, const gdb_byte *buf_end, + uint64_t *r) +{ + buf = gdb_read_uleb128 (buf, buf_end, r); + if (buf == NULL) + error (_("DWARF expression error: ran off end of buffer reading uleb128 value")); + return buf; +} + +/* Helper to read a sleb128 value or throw an error. */ + +const gdb_byte * +safe_read_sleb128 (const gdb_byte *buf, const gdb_byte *buf_end, + int64_t *r) +{ + buf = gdb_read_sleb128 (buf, buf_end, r); + if (buf == NULL) + error (_("DWARF expression error: ran off end of buffer reading sleb128 value")); + return buf; +} + +const gdb_byte * +safe_skip_leb128 (const gdb_byte *buf, const gdb_byte *buf_end) +{ + buf = gdb_skip_leb128 (buf, buf_end); + if (buf == NULL) + error (_("DWARF expression error: ran off end of buffer reading leb128 value")); + return buf; +} + + +/* Check that the current operator is either at the end of an + expression, or that it is followed by a composition operator or by + DW_OP_GNU_uninit (which should terminate the expression). */ + +void +dwarf_expr_require_composition (const gdb_byte *op_ptr, const gdb_byte *op_end, + const char *op_name) +{ + if (op_ptr != op_end && *op_ptr != DW_OP_piece && *op_ptr != DW_OP_bit_piece + && *op_ptr != DW_OP_GNU_uninit) + error (_("DWARF-2 expression error: `%s' operations must be " + "used either alone or in conjunction with DW_OP_piece " + "or DW_OP_bit_piece."), + op_name); +} + +/* Return true iff the types T1 and T2 are "the same". This only does + checks that might reasonably be needed to compare DWARF base + types. */ + +static int +base_types_equal_p (struct type *t1, struct type *t2) +{ + if (t1->code () != t2->code ()) + return 0; + if (TYPE_UNSIGNED (t1) != TYPE_UNSIGNED (t2)) + return 0; + return TYPE_LENGTH (t1) == TYPE_LENGTH (t2); +} + +/* If <BUF..BUF_END] contains DW_FORM_block* with single DW_OP_reg* return the + DWARF register number. Otherwise return -1. */ + +int +dwarf_block_to_dwarf_reg (const gdb_byte *buf, const gdb_byte *buf_end) +{ + uint64_t dwarf_reg; + + if (buf_end <= buf) + return -1; + if (*buf >= DW_OP_reg0 && *buf <= DW_OP_reg31) + { + if (buf_end - buf != 1) + return -1; + return *buf - DW_OP_reg0; + } + + if (*buf == DW_OP_regval_type || *buf == DW_OP_GNU_regval_type) + { + buf++; + buf = gdb_read_uleb128 (buf, buf_end, &dwarf_reg); + if (buf == NULL) + return -1; + buf = gdb_skip_leb128 (buf, buf_end); + if (buf == NULL) + return -1; + } + else if (*buf == DW_OP_regx) + { + buf++; + buf = gdb_read_uleb128 (buf, buf_end, &dwarf_reg); + if (buf == NULL) + return -1; + } + else + return -1; + if (buf != buf_end || (int) dwarf_reg != dwarf_reg) + return -1; + return dwarf_reg; +} + +/* If <BUF..BUF_END] contains DW_FORM_block* with just DW_OP_breg*(0) and + DW_OP_deref* return the DWARF register number. Otherwise return -1. + DEREF_SIZE_RETURN contains -1 for DW_OP_deref; otherwise it contains the + size from DW_OP_deref_size. */ + +int +dwarf_block_to_dwarf_reg_deref (const gdb_byte *buf, const gdb_byte *buf_end, + CORE_ADDR *deref_size_return) +{ + uint64_t dwarf_reg; + int64_t offset; + + if (buf_end <= buf) + return -1; + + if (*buf >= DW_OP_breg0 && *buf <= DW_OP_breg31) + { + dwarf_reg = *buf - DW_OP_breg0; + buf++; + if (buf >= buf_end) + return -1; + } + else if (*buf == DW_OP_bregx) + { + buf++; + buf = gdb_read_uleb128 (buf, buf_end, &dwarf_reg); + if (buf == NULL) + return -1; + if ((int) dwarf_reg != dwarf_reg) + return -1; + } + else + return -1; + + buf = gdb_read_sleb128 (buf, buf_end, &offset); + if (buf == NULL) + return -1; + if (offset != 0) + return -1; + + if (*buf == DW_OP_deref) + { + buf++; + *deref_size_return = -1; + } + else if (*buf == DW_OP_deref_size) + { + buf++; + if (buf >= buf_end) + return -1; + *deref_size_return = *buf++; + } + else + return -1; + + if (buf != buf_end) + return -1; + + return dwarf_reg; +} + +/* If <BUF..BUF_END] contains DW_FORM_block* with single DW_OP_fbreg(X) fill + in FB_OFFSET_RETURN with the X offset and return 1. Otherwise return 0. */ + +int +dwarf_block_to_fb_offset (const gdb_byte *buf, const gdb_byte *buf_end, + CORE_ADDR *fb_offset_return) +{ + int64_t fb_offset; + + if (buf_end <= buf) + return 0; + + if (*buf != DW_OP_fbreg) + return 0; + buf++; + + buf = gdb_read_sleb128 (buf, buf_end, &fb_offset); + if (buf == NULL) + return 0; + *fb_offset_return = fb_offset; + if (buf != buf_end || fb_offset != (LONGEST) *fb_offset_return) + return 0; + + return 1; +} + +/* If <BUF..BUF_END] contains DW_FORM_block* with single DW_OP_bregSP(X) fill + in SP_OFFSET_RETURN with the X offset and return 1. Otherwise return 0. + The matched SP register number depends on GDBARCH. */ + +int +dwarf_block_to_sp_offset (struct gdbarch *gdbarch, const gdb_byte *buf, + const gdb_byte *buf_end, CORE_ADDR *sp_offset_return) +{ + uint64_t dwarf_reg; + int64_t sp_offset; + + if (buf_end <= buf) + return 0; + if (*buf >= DW_OP_breg0 && *buf <= DW_OP_breg31) + { + dwarf_reg = *buf - DW_OP_breg0; + buf++; + } + else + { + if (*buf != DW_OP_bregx) + return 0; + buf++; + buf = gdb_read_uleb128 (buf, buf_end, &dwarf_reg); + if (buf == NULL) + return 0; + } + + if (dwarf_reg_to_regnum (gdbarch, dwarf_reg) + != gdbarch_sp_regnum (gdbarch)) + return 0; + + buf = gdb_read_sleb128 (buf, buf_end, &sp_offset); + if (buf == NULL) + return 0; + *sp_offset_return = sp_offset; + if (buf != buf_end || sp_offset != (LONGEST) *sp_offset_return) + return 0; + + return 1; +} + +/* The engine for the expression evaluator. Using the context in this + object, evaluate the expression between OP_PTR and OP_END. */ + +void +dwarf_expr_context::execute_stack_op (const gdb_byte *op_ptr, + const gdb_byte *op_end) +{ + enum bfd_endian byte_order = gdbarch_byte_order (this->gdbarch); + /* Old-style "untyped" DWARF values need special treatment in a + couple of places, specifically DW_OP_mod and DW_OP_shr. We need + a special type for these values so we can distinguish them from + values that have an explicit type, because explicitly-typed + values do not need special treatment. This special type must be + different (in the `==' sense) from any base type coming from the + CU. */ + struct type *address_type = this->address_type (); + + this->location = DWARF_VALUE_MEMORY; + this->initialized = 1; /* Default is initialized. */ + + if (this->recursion_depth > this->max_recursion_depth) + error (_("DWARF-2 expression error: Loop detected (%d)."), + this->recursion_depth); + this->recursion_depth++; + + while (op_ptr < op_end) + { + enum dwarf_location_atom op = (enum dwarf_location_atom) *op_ptr++; + ULONGEST result; + /* Assume the value is not in stack memory. + Code that knows otherwise sets this to true. + Some arithmetic on stack addresses can probably be assumed to still + be a stack address, but we skip this complication for now. + This is just an optimization, so it's always ok to punt + and leave this as false. */ + bool in_stack_memory = false; + uint64_t uoffset, reg; + int64_t offset; + struct value *result_val = NULL; + + /* The DWARF expression might have a bug causing an infinite + loop. In that case, quitting is the only way out. */ + QUIT; + + switch (op) + { + case DW_OP_lit0: + case DW_OP_lit1: + case DW_OP_lit2: + case DW_OP_lit3: + case DW_OP_lit4: + case DW_OP_lit5: + case DW_OP_lit6: + case DW_OP_lit7: + case DW_OP_lit8: + case DW_OP_lit9: + case DW_OP_lit10: + case DW_OP_lit11: + case DW_OP_lit12: + case DW_OP_lit13: + case DW_OP_lit14: + case DW_OP_lit15: + case DW_OP_lit16: + case DW_OP_lit17: + case DW_OP_lit18: + case DW_OP_lit19: + case DW_OP_lit20: + case DW_OP_lit21: + case DW_OP_lit22: + case DW_OP_lit23: + case DW_OP_lit24: + case DW_OP_lit25: + case DW_OP_lit26: + case DW_OP_lit27: + case DW_OP_lit28: + case DW_OP_lit29: + case DW_OP_lit30: + case DW_OP_lit31: + result = op - DW_OP_lit0; + result_val = value_from_ulongest (address_type, result); + break; + + case DW_OP_addr: + result = extract_unsigned_integer (op_ptr, + this->addr_size, byte_order); + op_ptr += this->addr_size; + /* Some versions of GCC emit DW_OP_addr before + DW_OP_GNU_push_tls_address. In this case the value is an + index, not an address. We don't support things like + branching between the address and the TLS op. */ + if (op_ptr >= op_end || *op_ptr != DW_OP_GNU_push_tls_address) + result += this->per_objfile->objfile->text_section_offset (); + result_val = value_from_ulongest (address_type, result); + break; + + case DW_OP_addrx: + case DW_OP_GNU_addr_index: + op_ptr = safe_read_uleb128 (op_ptr, op_end, &uoffset); + result = this->get_addr_index (uoffset); + result += this->per_objfile->objfile->text_section_offset (); + result_val = value_from_ulongest (address_type, result); + break; + case DW_OP_GNU_const_index: + op_ptr = safe_read_uleb128 (op_ptr, op_end, &uoffset); + result = this->get_addr_index (uoffset); + result_val = value_from_ulongest (address_type, result); + break; + + case DW_OP_const1u: + result = extract_unsigned_integer (op_ptr, 1, byte_order); + result_val = value_from_ulongest (address_type, result); + op_ptr += 1; + break; + case DW_OP_const1s: + result = extract_signed_integer (op_ptr, 1, byte_order); + result_val = value_from_ulongest (address_type, result); + op_ptr += 1; + break; + case DW_OP_const2u: + result = extract_unsigned_integer (op_ptr, 2, byte_order); + result_val = value_from_ulongest (address_type, result); + op_ptr += 2; + break; + case DW_OP_const2s: + result = extract_signed_integer (op_ptr, 2, byte_order); + result_val = value_from_ulongest (address_type, result); + op_ptr += 2; + break; + case DW_OP_const4u: + result = extract_unsigned_integer (op_ptr, 4, byte_order); + result_val = value_from_ulongest (address_type, result); + op_ptr += 4; + break; + case DW_OP_const4s: + result = extract_signed_integer (op_ptr, 4, byte_order); + result_val = value_from_ulongest (address_type, result); + op_ptr += 4; + break; + case DW_OP_const8u: + result = extract_unsigned_integer (op_ptr, 8, byte_order); + result_val = value_from_ulongest (address_type, result); + op_ptr += 8; + break; + case DW_OP_const8s: + result = extract_signed_integer (op_ptr, 8, byte_order); + result_val = value_from_ulongest (address_type, result); + op_ptr += 8; + break; + case DW_OP_constu: + op_ptr = safe_read_uleb128 (op_ptr, op_end, &uoffset); + result = uoffset; + result_val = value_from_ulongest (address_type, result); + break; + case DW_OP_consts: + op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset); + result = offset; + result_val = value_from_ulongest (address_type, result); + break; + + /* The DW_OP_reg operations are required to occur alone in + location expressions. */ + case DW_OP_reg0: + case DW_OP_reg1: + case DW_OP_reg2: + case DW_OP_reg3: + case DW_OP_reg4: + case DW_OP_reg5: + case DW_OP_reg6: + case DW_OP_reg7: + case DW_OP_reg8: + case DW_OP_reg9: + case DW_OP_reg10: + case DW_OP_reg11: + case DW_OP_reg12: + case DW_OP_reg13: + case DW_OP_reg14: + case DW_OP_reg15: + case DW_OP_reg16: + case DW_OP_reg17: + case DW_OP_reg18: + case DW_OP_reg19: + case DW_OP_reg20: + case DW_OP_reg21: + case DW_OP_reg22: + case DW_OP_reg23: + case DW_OP_reg24: + case DW_OP_reg25: + case DW_OP_reg26: + case DW_OP_reg27: + case DW_OP_reg28: + case DW_OP_reg29: + case DW_OP_reg30: + case DW_OP_reg31: + dwarf_expr_require_composition (op_ptr, op_end, "DW_OP_reg"); + + result = op - DW_OP_reg0; + result_val = value_from_ulongest (address_type, result); + this->location = DWARF_VALUE_REGISTER; + break; + + case DW_OP_regx: + op_ptr = safe_read_uleb128 (op_ptr, op_end, ®); + dwarf_expr_require_composition (op_ptr, op_end, "DW_OP_regx"); + + result = reg; + result_val = value_from_ulongest (address_type, result); + this->location = DWARF_VALUE_REGISTER; + break; + + case DW_OP_implicit_value: + { + uint64_t len; + + op_ptr = safe_read_uleb128 (op_ptr, op_end, &len); + if (op_ptr + len > op_end) + error (_("DW_OP_implicit_value: too few bytes available.")); + this->len = len; + this->data = op_ptr; + this->location = DWARF_VALUE_LITERAL; + op_ptr += len; + dwarf_expr_require_composition (op_ptr, op_end, + "DW_OP_implicit_value"); + } + goto no_push; + + case DW_OP_stack_value: + this->location = DWARF_VALUE_STACK; + dwarf_expr_require_composition (op_ptr, op_end, "DW_OP_stack_value"); + goto no_push; + + case DW_OP_implicit_pointer: + case DW_OP_GNU_implicit_pointer: + { + int64_t len; + + if (this->ref_addr_size == -1) + error (_("DWARF-2 expression error: DW_OP_implicit_pointer " + "is not allowed in frame context")); + + /* The referred-to DIE of sect_offset kind. */ + this->len = extract_unsigned_integer (op_ptr, this->ref_addr_size, + byte_order); + op_ptr += this->ref_addr_size; + + /* The byte offset into the data. */ + op_ptr = safe_read_sleb128 (op_ptr, op_end, &len); + result = (ULONGEST) len; + result_val = value_from_ulongest (address_type, result); + + this->location = DWARF_VALUE_IMPLICIT_POINTER; + dwarf_expr_require_composition (op_ptr, op_end, + "DW_OP_implicit_pointer"); + } + break; + + case DW_OP_breg0: + case DW_OP_breg1: + case DW_OP_breg2: + case DW_OP_breg3: + case DW_OP_breg4: + case DW_OP_breg5: + case DW_OP_breg6: + case DW_OP_breg7: + case DW_OP_breg8: + case DW_OP_breg9: + case DW_OP_breg10: + case DW_OP_breg11: + case DW_OP_breg12: + case DW_OP_breg13: + case DW_OP_breg14: + case DW_OP_breg15: + case DW_OP_breg16: + case DW_OP_breg17: + case DW_OP_breg18: + case DW_OP_breg19: + case DW_OP_breg20: + case DW_OP_breg21: + case DW_OP_breg22: + case DW_OP_breg23: + case DW_OP_breg24: + case DW_OP_breg25: + case DW_OP_breg26: + case DW_OP_breg27: + case DW_OP_breg28: + case DW_OP_breg29: + case DW_OP_breg30: + case DW_OP_breg31: + { + op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset); + result = this->read_addr_from_reg (op - DW_OP_breg0); + result += offset; + result_val = value_from_ulongest (address_type, result); + } + break; + case DW_OP_bregx: + { + op_ptr = safe_read_uleb128 (op_ptr, op_end, ®); + op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset); + result = this->read_addr_from_reg (reg); + result += offset; + result_val = value_from_ulongest (address_type, result); + } + break; + case DW_OP_fbreg: + { + const gdb_byte *datastart; + size_t datalen; + + op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset); + + /* Rather than create a whole new context, we simply + backup the current stack locally and install a new empty stack, + then reset it afterwards, effectively erasing whatever the + recursive call put there. */ + std::vector<dwarf_stack_value> saved_stack = std::move (stack); + stack.clear (); + + /* FIXME: cagney/2003-03-26: This code should be using + get_frame_base_address(), and then implement a dwarf2 + specific this_base method. */ + this->get_frame_base (&datastart, &datalen); + eval (datastart, datalen); + if (this->location == DWARF_VALUE_MEMORY) + result = fetch_address (0); + else if (this->location == DWARF_VALUE_REGISTER) + result = this->read_addr_from_reg (value_as_long (fetch (0))); + else + error (_("Not implemented: computing frame " + "base using explicit value operator")); + result = result + offset; + result_val = value_from_ulongest (address_type, result); + in_stack_memory = true; + + /* Restore the content of the original stack. */ + stack = std::move (saved_stack); + + this->location = DWARF_VALUE_MEMORY; + } + break; + + case DW_OP_dup: + result_val = fetch (0); + in_stack_memory = fetch_in_stack_memory (0); + break; + + case DW_OP_drop: + pop (); + goto no_push; + + case DW_OP_pick: + offset = *op_ptr++; + result_val = fetch (offset); + in_stack_memory = fetch_in_stack_memory (offset); + break; + + case DW_OP_swap: + { + if (stack.size () < 2) + error (_("Not enough elements for " + "DW_OP_swap. Need 2, have %zu."), + stack.size ()); + + dwarf_stack_value &t1 = stack[stack.size () - 1]; + dwarf_stack_value &t2 = stack[stack.size () - 2]; + std::swap (t1, t2); + goto no_push; + } + + case DW_OP_over: + result_val = fetch (1); + in_stack_memory = fetch_in_stack_memory (1); + break; + + case DW_OP_rot: + { + if (stack.size () < 3) + error (_("Not enough elements for " + "DW_OP_rot. Need 3, have %zu."), + stack.size ()); + + dwarf_stack_value temp = stack[stack.size () - 1]; + stack[stack.size () - 1] = stack[stack.size () - 2]; + stack[stack.size () - 2] = stack[stack.size () - 3]; + stack[stack.size () - 3] = temp; + goto no_push; + } + + case DW_OP_deref: + case DW_OP_deref_size: + case DW_OP_deref_type: + case DW_OP_GNU_deref_type: + { + int addr_size = (op == DW_OP_deref ? this->addr_size : *op_ptr++); + gdb_byte *buf = (gdb_byte *) alloca (addr_size); + CORE_ADDR addr = fetch_address (0); + struct type *type; + + pop (); + + if (op == DW_OP_deref_type || op == DW_OP_GNU_deref_type) + { + op_ptr = safe_read_uleb128 (op_ptr, op_end, &uoffset); + cu_offset type_die_cu_off = (cu_offset) uoffset; + type = get_base_type (type_die_cu_off, 0); + } + else + type = address_type; + + this->read_mem (buf, addr, addr_size); + + /* If the size of the object read from memory is different + from the type length, we need to zero-extend it. */ + if (TYPE_LENGTH (type) != addr_size) + { + ULONGEST datum = + extract_unsigned_integer (buf, addr_size, byte_order); + + buf = (gdb_byte *) alloca (TYPE_LENGTH (type)); + store_unsigned_integer (buf, TYPE_LENGTH (type), + byte_order, datum); + } + + result_val = value_from_contents_and_address (type, buf, addr); + break; + } + + case DW_OP_abs: + case DW_OP_neg: + case DW_OP_not: + case DW_OP_plus_uconst: + { + /* Unary operations. */ + result_val = fetch (0); + pop (); + + switch (op) + { + case DW_OP_abs: + if (value_less (result_val, + value_zero (value_type (result_val), not_lval))) + result_val = value_neg (result_val); + break; + case DW_OP_neg: + result_val = value_neg (result_val); + break; + case DW_OP_not: + dwarf_require_integral (value_type (result_val)); + result_val = value_complement (result_val); + break; + case DW_OP_plus_uconst: + dwarf_require_integral (value_type (result_val)); + result = value_as_long (result_val); + op_ptr = safe_read_uleb128 (op_ptr, op_end, ®); + result += reg; + result_val = value_from_ulongest (address_type, result); + break; + } + } + break; + + case DW_OP_and: + case DW_OP_div: + case DW_OP_minus: + case DW_OP_mod: + case DW_OP_mul: + case DW_OP_or: + case DW_OP_plus: + case DW_OP_shl: + case DW_OP_shr: + case DW_OP_shra: + case DW_OP_xor: + case DW_OP_le: + case DW_OP_ge: + case DW_OP_eq: + case DW_OP_lt: + case DW_OP_gt: + case DW_OP_ne: + { + /* Binary operations. */ + struct value *first, *second; + + second = fetch (0); + pop (); + + first = fetch (0); + pop (); + + if (! base_types_equal_p (value_type (first), value_type (second))) + error (_("Incompatible types on DWARF stack")); + + switch (op) + { + case DW_OP_and: + dwarf_require_integral (value_type (first)); + dwarf_require_integral (value_type (second)); + result_val = value_binop (first, second, BINOP_BITWISE_AND); + break; + case DW_OP_div: + result_val = value_binop (first, second, BINOP_DIV); + break; + case DW_OP_minus: + result_val = value_binop (first, second, BINOP_SUB); + break; + case DW_OP_mod: + { + int cast_back = 0; + struct type *orig_type = value_type (first); + + /* We have to special-case "old-style" untyped values + -- these must have mod computed using unsigned + math. */ + if (orig_type == address_type) + { + struct type *utype + = get_unsigned_type (this->gdbarch, orig_type); + + cast_back = 1; + first = value_cast (utype, first); + second = value_cast (utype, second); + } + /* Note that value_binop doesn't handle float or + decimal float here. This seems unimportant. */ + result_val = value_binop (first, second, BINOP_MOD); + if (cast_back) + result_val = value_cast (orig_type, result_val); + } + break; + case DW_OP_mul: + result_val = value_binop (first, second, BINOP_MUL); + break; + case DW_OP_or: + dwarf_require_integral (value_type (first)); + dwarf_require_integral (value_type (second)); + result_val = value_binop (first, second, BINOP_BITWISE_IOR); + break; + case DW_OP_plus: + result_val = value_binop (first, second, BINOP_ADD); + break; + case DW_OP_shl: + dwarf_require_integral (value_type (first)); + dwarf_require_integral (value_type (second)); + result_val = value_binop (first, second, BINOP_LSH); + break; + case DW_OP_shr: + dwarf_require_integral (value_type (first)); + dwarf_require_integral (value_type (second)); + if (!TYPE_UNSIGNED (value_type (first))) + { + struct type *utype + = get_unsigned_type (this->gdbarch, value_type (first)); + + first = value_cast (utype, first); + } + + result_val = value_binop (first, second, BINOP_RSH); + /* Make sure we wind up with the same type we started + with. */ + if (value_type (result_val) != value_type (second)) + result_val = value_cast (value_type (second), result_val); + break; + case DW_OP_shra: + dwarf_require_integral (value_type (first)); + dwarf_require_integral (value_type (second)); + if (TYPE_UNSIGNED (value_type (first))) + { + struct type *stype + = get_signed_type (this->gdbarch, value_type (first)); + + first = value_cast (stype, first); + } + + result_val = value_binop (first, second, BINOP_RSH); + /* Make sure we wind up with the same type we started + with. */ + if (value_type (result_val) != value_type (second)) + result_val = value_cast (value_type (second), result_val); + break; + case DW_OP_xor: + dwarf_require_integral (value_type (first)); + dwarf_require_integral (value_type (second)); + result_val = value_binop (first, second, BINOP_BITWISE_XOR); + break; + case DW_OP_le: + /* A <= B is !(B < A). */ + result = ! value_less (second, first); + result_val = value_from_ulongest (address_type, result); + break; + case DW_OP_ge: + /* A >= B is !(A < B). */ + result = ! value_less (first, second); + result_val = value_from_ulongest (address_type, result); + break; + case DW_OP_eq: + result = value_equal (first, second); + result_val = value_from_ulongest (address_type, result); + break; + case DW_OP_lt: + result = value_less (first, second); + result_val = value_from_ulongest (address_type, result); + break; + case DW_OP_gt: + /* A > B is B < A. */ + result = value_less (second, first); + result_val = value_from_ulongest (address_type, result); + break; + case DW_OP_ne: + result = ! value_equal (first, second); + result_val = value_from_ulongest (address_type, result); + break; + default: + internal_error (__FILE__, __LINE__, + _("Can't be reached.")); + } + } + break; + + case DW_OP_call_frame_cfa: + result = this->get_frame_cfa (); + result_val = value_from_ulongest (address_type, result); + in_stack_memory = true; + break; + + case DW_OP_GNU_push_tls_address: + case DW_OP_form_tls_address: + /* Variable is at a constant offset in the thread-local + storage block into the objfile for the current thread and + the dynamic linker module containing this expression. Here + we return returns the offset from that base. The top of the + stack has the offset from the beginning of the thread + control block at which the variable is located. Nothing + should follow this operator, so the top of stack would be + returned. */ + result = value_as_long (fetch (0)); + pop (); + result = this->get_tls_address (result); + result_val = value_from_ulongest (address_type, result); + break; + + case DW_OP_skip: + offset = extract_signed_integer (op_ptr, 2, byte_order); + op_ptr += 2; + op_ptr += offset; + goto no_push; + + case DW_OP_bra: + { + struct value *val; + + offset = extract_signed_integer (op_ptr, 2, byte_order); + op_ptr += 2; + val = fetch (0); + dwarf_require_integral (value_type (val)); + if (value_as_long (val) != 0) + op_ptr += offset; + pop (); + } + goto no_push; + + case DW_OP_nop: + goto no_push; + + case DW_OP_piece: + { + uint64_t size; + + /* Record the piece. */ + op_ptr = safe_read_uleb128 (op_ptr, op_end, &size); + add_piece (8 * size, 0); + + /* Pop off the address/regnum, and reset the location + type. */ + if (this->location != DWARF_VALUE_LITERAL + && this->location != DWARF_VALUE_OPTIMIZED_OUT) + pop (); + this->location = DWARF_VALUE_MEMORY; + } + goto no_push; + + case DW_OP_bit_piece: + { + uint64_t size, uleb_offset; + + /* Record the piece. */ + op_ptr = safe_read_uleb128 (op_ptr, op_end, &size); + op_ptr = safe_read_uleb128 (op_ptr, op_end, &uleb_offset); + add_piece (size, uleb_offset); + + /* Pop off the address/regnum, and reset the location + type. */ + if (this->location != DWARF_VALUE_LITERAL + && this->location != DWARF_VALUE_OPTIMIZED_OUT) + pop (); + this->location = DWARF_VALUE_MEMORY; + } + goto no_push; + + case DW_OP_GNU_uninit: + if (op_ptr != op_end) + error (_("DWARF-2 expression error: DW_OP_GNU_uninit must always " + "be the very last op.")); + + this->initialized = 0; + goto no_push; + + case DW_OP_call2: + { + cu_offset cu_off + = (cu_offset) extract_unsigned_integer (op_ptr, 2, byte_order); + op_ptr += 2; + this->dwarf_call (cu_off); + } + goto no_push; + + case DW_OP_call4: + { + cu_offset cu_off + = (cu_offset) extract_unsigned_integer (op_ptr, 4, byte_order); + op_ptr += 4; + this->dwarf_call (cu_off); + } + goto no_push; + + case DW_OP_GNU_variable_value: + { + sect_offset sect_off + = (sect_offset) extract_unsigned_integer (op_ptr, + this->ref_addr_size, + byte_order); + op_ptr += this->ref_addr_size; + result_val = value_cast (address_type, + this->dwarf_variable_value (sect_off)); + } + break; + + case DW_OP_entry_value: + case DW_OP_GNU_entry_value: + { + uint64_t len; + CORE_ADDR deref_size; + union call_site_parameter_u kind_u; + + op_ptr = safe_read_uleb128 (op_ptr, op_end, &len); + if (op_ptr + len > op_end) + error (_("DW_OP_entry_value: too few bytes available.")); + + kind_u.dwarf_reg = dwarf_block_to_dwarf_reg (op_ptr, op_ptr + len); + if (kind_u.dwarf_reg != -1) + { + op_ptr += len; + this->push_dwarf_reg_entry_value (CALL_SITE_PARAMETER_DWARF_REG, + kind_u, + -1 /* deref_size */); + goto no_push; + } + + kind_u.dwarf_reg = dwarf_block_to_dwarf_reg_deref (op_ptr, + op_ptr + len, + &deref_size); + if (kind_u.dwarf_reg != -1) + { + if (deref_size == -1) + deref_size = this->addr_size; + op_ptr += len; + this->push_dwarf_reg_entry_value (CALL_SITE_PARAMETER_DWARF_REG, + kind_u, deref_size); + goto no_push; + } + + error (_("DWARF-2 expression error: DW_OP_entry_value is " + "supported only for single DW_OP_reg* " + "or for DW_OP_breg*(0)+DW_OP_deref*")); + } + + case DW_OP_GNU_parameter_ref: + { + union call_site_parameter_u kind_u; + + kind_u.param_cu_off + = (cu_offset) extract_unsigned_integer (op_ptr, 4, byte_order); + op_ptr += 4; + this->push_dwarf_reg_entry_value (CALL_SITE_PARAMETER_PARAM_OFFSET, + kind_u, + -1 /* deref_size */); + } + goto no_push; + + case DW_OP_const_type: + case DW_OP_GNU_const_type: + { + int n; + const gdb_byte *data; + struct type *type; + + op_ptr = safe_read_uleb128 (op_ptr, op_end, &uoffset); + cu_offset type_die_cu_off = (cu_offset) uoffset; + + n = *op_ptr++; + data = op_ptr; + op_ptr += n; + + type = get_base_type (type_die_cu_off, n); + result_val = value_from_contents (type, data); + } + break; + + case DW_OP_regval_type: + case DW_OP_GNU_regval_type: + { + struct type *type; + + op_ptr = safe_read_uleb128 (op_ptr, op_end, ®); + op_ptr = safe_read_uleb128 (op_ptr, op_end, &uoffset); + cu_offset type_die_cu_off = (cu_offset) uoffset; + + type = get_base_type (type_die_cu_off, 0); + result_val = this->get_reg_value (type, reg); + } + break; + + case DW_OP_convert: + case DW_OP_GNU_convert: + case DW_OP_reinterpret: + case DW_OP_GNU_reinterpret: + { + struct type *type; + + op_ptr = safe_read_uleb128 (op_ptr, op_end, &uoffset); + cu_offset type_die_cu_off = (cu_offset) uoffset; + + if (to_underlying (type_die_cu_off) == 0) + type = address_type; + else + type = get_base_type (type_die_cu_off, 0); + + result_val = fetch (0); + pop (); + + if (op == DW_OP_convert || op == DW_OP_GNU_convert) + result_val = value_cast (type, result_val); + else if (type == value_type (result_val)) + { + /* Nothing. */ + } + else if (TYPE_LENGTH (type) + != TYPE_LENGTH (value_type (result_val))) + error (_("DW_OP_reinterpret has wrong size")); + else + result_val + = value_from_contents (type, + value_contents_all (result_val)); + } + break; + + case DW_OP_push_object_address: + /* Return the address of the object we are currently observing. */ + result = this->get_object_address (); + result_val = value_from_ulongest (address_type, result); + break; + + default: + error (_("Unhandled dwarf expression opcode 0x%x"), op); + } + + /* Most things push a result value. */ + gdb_assert (result_val != NULL); + push (result_val, in_stack_memory); + no_push: + ; + } + + /* To simplify our main caller, if the result is an implicit + pointer, then make a pieced value. This is ok because we can't + have implicit pointers in contexts where pieces are invalid. */ + if (this->location == DWARF_VALUE_IMPLICIT_POINTER) + add_piece (8 * this->addr_size, 0); + + this->recursion_depth--; + gdb_assert (this->recursion_depth >= 0); +} + +void _initialize_dwarf2expr (); +void +_initialize_dwarf2expr () +{ + dwarf_arch_cookie + = gdbarch_data_register_post_init (dwarf_gdbarch_types_init); +} diff -Nru gdb-9.1/gdb/dwarf2/expr.h gdb-10.2/gdb/dwarf2/expr.h --- gdb-9.1/gdb/dwarf2/expr.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/dwarf2/expr.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,326 @@ +/* DWARF 2 Expression Evaluator. + + Copyright (C) 2001-2021 Free Software Foundation, Inc. + + Contributed by Daniel Berlin <dan@dberlin.org>. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#if !defined (DWARF2EXPR_H) +#define DWARF2EXPR_H + +#include "leb128.h" +#include "gdbtypes.h" + +struct dwarf2_per_objfile; + +/* The location of a value. */ +enum dwarf_value_location +{ + /* The piece is in memory. + The value on the dwarf stack is its address. */ + DWARF_VALUE_MEMORY, + + /* The piece is in a register. + The value on the dwarf stack is the register number. */ + DWARF_VALUE_REGISTER, + + /* The piece is on the dwarf stack. */ + DWARF_VALUE_STACK, + + /* The piece is a literal. */ + DWARF_VALUE_LITERAL, + + /* The piece was optimized out. */ + DWARF_VALUE_OPTIMIZED_OUT, + + /* The piece is an implicit pointer. */ + DWARF_VALUE_IMPLICIT_POINTER +}; + +/* A piece of an object, as recorded by DW_OP_piece or DW_OP_bit_piece. */ +struct dwarf_expr_piece +{ + enum dwarf_value_location location; + + union + { + struct + { + /* This piece's address, for DWARF_VALUE_MEMORY pieces. */ + CORE_ADDR addr; + /* Non-zero if the piece is known to be in memory and on + the program's stack. */ + bool in_stack_memory; + } mem; + + /* The piece's register number, for DWARF_VALUE_REGISTER pieces. */ + int regno; + + /* The piece's literal value, for DWARF_VALUE_STACK pieces. */ + struct value *value; + + struct + { + /* A pointer to the data making up this piece, + for DWARF_VALUE_LITERAL pieces. */ + const gdb_byte *data; + /* The length of the available data. */ + ULONGEST length; + } literal; + + /* Used for DWARF_VALUE_IMPLICIT_POINTER. */ + struct + { + /* The referent DIE from DW_OP_implicit_pointer. */ + sect_offset die_sect_off; + /* The byte offset into the resulting data. */ + LONGEST offset; + } ptr; + } v; + + /* The length of the piece, in bits. */ + ULONGEST size; + /* The piece offset, in bits. */ + ULONGEST offset; +}; + +/* The dwarf expression stack. */ + +struct dwarf_stack_value +{ + dwarf_stack_value (struct value *value_, int in_stack_memory_) + : value (value_), in_stack_memory (in_stack_memory_) + {} + + struct value *value; + + /* True if the piece is in memory and is known to be on the program's stack. + It is always ok to set this to zero. This is used, for example, to + optimize memory access from the target. It can vastly speed up backtraces + on long latency connections when "set stack-cache on". */ + bool in_stack_memory; +}; + +/* The expression evaluator works with a dwarf_expr_context, describing + its current state and its callbacks. */ +struct dwarf_expr_context +{ + dwarf_expr_context (dwarf2_per_objfile *per_objfile); + virtual ~dwarf_expr_context () = default; + + void push_address (CORE_ADDR value, bool in_stack_memory); + void eval (const gdb_byte *addr, size_t len); + struct value *fetch (int n); + CORE_ADDR fetch_address (int n); + bool fetch_in_stack_memory (int n); + + /* The stack of values. */ + std::vector<dwarf_stack_value> stack; + + /* Target architecture to use for address operations. */ + struct gdbarch *gdbarch; + + /* Target address size in bytes. */ + int addr_size; + + /* DW_FORM_ref_addr size in bytes. If -1 DWARF is executed from a frame + context and operations depending on DW_FORM_ref_addr are not allowed. */ + int ref_addr_size; + + /* The current depth of dwarf expression recursion, via DW_OP_call*, + DW_OP_fbreg, DW_OP_push_object_address, etc., and the maximum + depth we'll tolerate before raising an error. */ + int recursion_depth, max_recursion_depth; + + /* Location of the value. */ + enum dwarf_value_location location; + + /* For DWARF_VALUE_LITERAL, the current literal value's length and + data. For DWARF_VALUE_IMPLICIT_POINTER, LEN is the offset of the + target DIE of sect_offset kind. */ + ULONGEST len; + const gdb_byte *data; + + /* Initialization status of variable: Non-zero if variable has been + initialized; zero otherwise. */ + int initialized; + + /* A vector of pieces. + + Each time DW_OP_piece is executed, we add a new element to the + end of this array, recording the current top of the stack, the + current location, and the size given as the operand to + DW_OP_piece. We then pop the top value from the stack, reset the + location, and resume evaluation. + + The Dwarf spec doesn't say whether DW_OP_piece pops the top value + from the stack. We do, ensuring that clients of this interface + expecting to see a value left on the top of the stack (say, code + evaluating frame base expressions or CFA's specified with + DW_CFA_def_cfa_expression) will get an error if the expression + actually marks all the values it computes as pieces. + + If an expression never uses DW_OP_piece, num_pieces will be zero. + (It would be nice to present these cases as expressions yielding + a single piece, so that callers need not distinguish between the + no-DW_OP_piece and one-DW_OP_piece cases. But expressions with + no DW_OP_piece operations have no value to place in a piece's + 'size' field; the size comes from the surrounding data. So the + two cases need to be handled separately.) */ + std::vector<dwarf_expr_piece> pieces; + + /* We evaluate the expression in the context of this objfile. */ + dwarf2_per_objfile *per_objfile; + + /* Return the value of register number REGNUM (a DWARF register number), + read as an address. */ + virtual CORE_ADDR read_addr_from_reg (int regnum) = 0; + + /* Return a value of type TYPE, stored in register number REGNUM + of the frame associated to the given BATON. + + REGNUM is a DWARF register number. */ + virtual struct value *get_reg_value (struct type *type, int regnum) = 0; + + /* Read LENGTH bytes at ADDR into BUF. */ + virtual void read_mem (gdb_byte *buf, CORE_ADDR addr, size_t length) = 0; + + /* Return the location expression for the frame base attribute, in + START and LENGTH. The result must be live until the current + expression evaluation is complete. */ + virtual void get_frame_base (const gdb_byte **start, size_t *length) = 0; + + /* Return the CFA for the frame. */ + virtual CORE_ADDR get_frame_cfa () = 0; + + /* Return the PC for the frame. */ + virtual CORE_ADDR get_frame_pc () + { + error (_("%s is invalid in this context"), "DW_OP_implicit_pointer"); + } + + /* Return the thread-local storage address for + DW_OP_GNU_push_tls_address or DW_OP_form_tls_address. */ + virtual CORE_ADDR get_tls_address (CORE_ADDR offset) = 0; + + /* Execute DW_AT_location expression for the DWARF expression + subroutine in the DIE at DIE_CU_OFF in the CU. Do not touch + STACK while it being passed to and returned from the called DWARF + subroutine. */ + virtual void dwarf_call (cu_offset die_cu_off) = 0; + + /* Execute "variable value" operation on the DIE at SECT_OFF. */ + virtual struct value *dwarf_variable_value (sect_offset sect_off) = 0; + + /* Return the base type given by the indicated DIE at DIE_CU_OFF. + This can throw an exception if the DIE is invalid or does not + represent a base type. SIZE is non-zero if this function should + verify that the resulting type has the correct size. */ + virtual struct type *get_base_type (cu_offset die_cu_off, int size) + { + /* Anything will do. */ + return builtin_type (this->gdbarch)->builtin_int; + } + + /* Push on DWARF stack an entry evaluated for DW_TAG_call_site's + parameter matching KIND and KIND_U at the caller of specified BATON. + If DEREF_SIZE is not -1 then use DW_AT_call_data_value instead of + DW_AT_call_value. */ + virtual void push_dwarf_reg_entry_value (enum call_site_parameter_kind kind, + union call_site_parameter_u kind_u, + int deref_size) = 0; + + /* Return the address indexed by DW_OP_addrx or DW_OP_GNU_addr_index. + This can throw an exception if the index is out of range. */ + virtual CORE_ADDR get_addr_index (unsigned int index) = 0; + + /* Return the `object address' for DW_OP_push_object_address. */ + virtual CORE_ADDR get_object_address () = 0; + +private: + + struct type *address_type () const; + void push (struct value *value, bool in_stack_memory); + bool stack_empty_p () const; + void add_piece (ULONGEST size, ULONGEST offset); + void execute_stack_op (const gdb_byte *op_ptr, const gdb_byte *op_end); + void pop (); +}; + +void dwarf_expr_require_composition (const gdb_byte *, const gdb_byte *, + const char *); + +int dwarf_block_to_dwarf_reg (const gdb_byte *buf, const gdb_byte *buf_end); + +int dwarf_block_to_dwarf_reg_deref (const gdb_byte *buf, + const gdb_byte *buf_end, + CORE_ADDR *deref_size_return); + +int dwarf_block_to_fb_offset (const gdb_byte *buf, const gdb_byte *buf_end, + CORE_ADDR *fb_offset_return); + +int dwarf_block_to_sp_offset (struct gdbarch *gdbarch, const gdb_byte *buf, + const gdb_byte *buf_end, + CORE_ADDR *sp_offset_return); + +/* Wrappers around the leb128 reader routines to simplify them for our + purposes. */ + +static inline const gdb_byte * +gdb_read_uleb128 (const gdb_byte *buf, const gdb_byte *buf_end, + uint64_t *r) +{ + size_t bytes_read = read_uleb128_to_uint64 (buf, buf_end, r); + + if (bytes_read == 0) + return NULL; + return buf + bytes_read; +} + +static inline const gdb_byte * +gdb_read_sleb128 (const gdb_byte *buf, const gdb_byte *buf_end, + int64_t *r) +{ + size_t bytes_read = read_sleb128_to_int64 (buf, buf_end, r); + + if (bytes_read == 0) + return NULL; + return buf + bytes_read; +} + +static inline const gdb_byte * +gdb_skip_leb128 (const gdb_byte *buf, const gdb_byte *buf_end) +{ + size_t bytes_read = skip_leb128 (buf, buf_end); + + if (bytes_read == 0) + return NULL; + return buf + bytes_read; +} + +extern const gdb_byte *safe_read_uleb128 (const gdb_byte *buf, + const gdb_byte *buf_end, + uint64_t *r); + +extern const gdb_byte *safe_read_sleb128 (const gdb_byte *buf, + const gdb_byte *buf_end, + int64_t *r); + +extern const gdb_byte *safe_skip_leb128 (const gdb_byte *buf, + const gdb_byte *buf_end); + +#endif /* dwarf2expr.h */ diff -Nru gdb-9.1/gdb/dwarf2/frame.c gdb-10.2/gdb/dwarf2/frame.c --- gdb-9.1/gdb/dwarf2/frame.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/dwarf2/frame.c 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,2324 @@ +/* Frame unwinder for frames with DWARF Call Frame Information. + + Copyright (C) 2003-2021 Free Software Foundation, Inc. + + Contributed by Mark Kettenis. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "defs.h" +#include "dwarf2/expr.h" +#include "dwarf2.h" +#include "dwarf2/leb.h" +#include "frame.h" +#include "frame-base.h" +#include "frame-unwind.h" +#include "gdbcore.h" +#include "gdbtypes.h" +#include "symtab.h" +#include "objfiles.h" +#include "regcache.h" +#include "value.h" +#include "record.h" + +#include "complaints.h" +#include "dwarf2/frame.h" +#include "dwarf2/read.h" +#include "ax.h" +#include "dwarf2/loc.h" +#include "dwarf2/frame-tailcall.h" +#include "gdbsupport/gdb_binary_search.h" +#if GDB_SELF_TEST +#include "gdbsupport/selftest.h" +#include "selftest-arch.h" +#endif +#include <unordered_map> + +#include <algorithm> + +struct comp_unit; + +/* Call Frame Information (CFI). */ + +/* Common Information Entry (CIE). */ + +struct dwarf2_cie +{ + /* Computation Unit for this CIE. */ + struct comp_unit *unit; + + /* Offset into the .debug_frame section where this CIE was found. + Used to identify this CIE. */ + ULONGEST cie_pointer; + + /* Constant that is factored out of all advance location + instructions. */ + ULONGEST code_alignment_factor; + + /* Constants that is factored out of all offset instructions. */ + LONGEST data_alignment_factor; + + /* Return address column. */ + ULONGEST return_address_register; + + /* Instruction sequence to initialize a register set. */ + const gdb_byte *initial_instructions; + const gdb_byte *end; + + /* Saved augmentation, in case it's needed later. */ + char *augmentation; + + /* Encoding of addresses. */ + gdb_byte encoding; + + /* Target address size in bytes. */ + int addr_size; + + /* Target pointer size in bytes. */ + int ptr_size; + + /* True if a 'z' augmentation existed. */ + unsigned char saw_z_augmentation; + + /* True if an 'S' augmentation existed. */ + unsigned char signal_frame; + + /* The version recorded in the CIE. */ + unsigned char version; + + /* The segment size. */ + unsigned char segment_size; +}; + +/* The CIE table is used to find CIEs during parsing, but then + discarded. It maps from the CIE's offset to the CIE. */ +typedef std::unordered_map<ULONGEST, dwarf2_cie *> dwarf2_cie_table; + +/* Frame Description Entry (FDE). */ + +struct dwarf2_fde +{ + /* CIE for this FDE. */ + struct dwarf2_cie *cie; + + /* First location associated with this FDE. */ + CORE_ADDR initial_location; + + /* Number of bytes of program instructions described by this FDE. */ + CORE_ADDR address_range; + + /* Instruction sequence. */ + const gdb_byte *instructions; + const gdb_byte *end; + + /* True if this FDE is read from a .eh_frame instead of a .debug_frame + section. */ + unsigned char eh_frame_p; +}; + +typedef std::vector<dwarf2_fde *> dwarf2_fde_table; + +/* A minimal decoding of DWARF2 compilation units. We only decode + what's needed to get to the call frame information. */ + +struct comp_unit +{ + comp_unit (struct objfile *objf) + : abfd (objf->obfd) + { + } + + /* Keep the bfd convenient. */ + bfd *abfd; + + /* Pointer to the .debug_frame section loaded into memory. */ + const gdb_byte *dwarf_frame_buffer = nullptr; + + /* Length of the loaded .debug_frame section. */ + bfd_size_type dwarf_frame_size = 0; + + /* Pointer to the .debug_frame section. */ + asection *dwarf_frame_section = nullptr; + + /* Base for DW_EH_PE_datarel encodings. */ + bfd_vma dbase = 0; + + /* Base for DW_EH_PE_textrel encodings. */ + bfd_vma tbase = 0; + + /* The FDE table. */ + dwarf2_fde_table fde_table; + + /* Hold data used by this module. */ + auto_obstack obstack; +}; + +static struct dwarf2_fde *dwarf2_frame_find_fde + (CORE_ADDR *pc, dwarf2_per_objfile **out_per_objfile); + +static int dwarf2_frame_adjust_regnum (struct gdbarch *gdbarch, int regnum, + int eh_frame_p); + +static CORE_ADDR read_encoded_value (struct comp_unit *unit, gdb_byte encoding, + int ptr_len, const gdb_byte *buf, + unsigned int *bytes_read_ptr, + CORE_ADDR func_base); + + +/* See dwarf2-frame.h. */ +bool dwarf2_frame_unwinders_enabled_p = true; + +/* Store the length the expression for the CFA in the `cfa_reg' field, + which is unused in that case. */ +#define cfa_exp_len cfa_reg + +dwarf2_frame_state::dwarf2_frame_state (CORE_ADDR pc_, struct dwarf2_cie *cie) + : pc (pc_), data_align (cie->data_alignment_factor), + code_align (cie->code_alignment_factor), + retaddr_column (cie->return_address_register) +{ +} + + +/* Helper functions for execute_stack_op. */ + +static CORE_ADDR +read_addr_from_reg (struct frame_info *this_frame, int reg) +{ + struct gdbarch *gdbarch = get_frame_arch (this_frame); + int regnum = dwarf_reg_to_regnum_or_error (gdbarch, reg); + + return address_from_register (regnum, this_frame); +} + +/* Execute the required actions for both the DW_CFA_restore and +DW_CFA_restore_extended instructions. */ +static void +dwarf2_restore_rule (struct gdbarch *gdbarch, ULONGEST reg_num, + struct dwarf2_frame_state *fs, int eh_frame_p) +{ + ULONGEST reg; + + reg = dwarf2_frame_adjust_regnum (gdbarch, reg_num, eh_frame_p); + fs->regs.alloc_regs (reg + 1); + + /* Check if this register was explicitly initialized in the + CIE initial instructions. If not, default the rule to + UNSPECIFIED. */ + if (reg < fs->initial.reg.size ()) + fs->regs.reg[reg] = fs->initial.reg[reg]; + else + fs->regs.reg[reg].how = DWARF2_FRAME_REG_UNSPECIFIED; + + if (fs->regs.reg[reg].how == DWARF2_FRAME_REG_UNSPECIFIED) + { + int regnum = dwarf_reg_to_regnum (gdbarch, reg); + + complaint (_("\ +incomplete CFI data; DW_CFA_restore unspecified\n\ +register %s (#%d) at %s"), + gdbarch_register_name (gdbarch, regnum), regnum, + paddress (gdbarch, fs->pc)); + } +} + +class dwarf_expr_executor : public dwarf_expr_context +{ +public: + + dwarf_expr_executor (dwarf2_per_objfile *per_objfile) + : dwarf_expr_context (per_objfile) + {} + + struct frame_info *this_frame; + + CORE_ADDR read_addr_from_reg (int reg) override + { + return ::read_addr_from_reg (this_frame, reg); + } + + struct value *get_reg_value (struct type *type, int reg) override + { + struct gdbarch *gdbarch = get_frame_arch (this_frame); + int regnum = dwarf_reg_to_regnum_or_error (gdbarch, reg); + + return value_from_register (type, regnum, this_frame); + } + + void read_mem (gdb_byte *buf, CORE_ADDR addr, size_t len) override + { + read_memory (addr, buf, len); + } + + void get_frame_base (const gdb_byte **start, size_t *length) override + { + invalid ("DW_OP_fbreg"); + } + + void push_dwarf_reg_entry_value (enum call_site_parameter_kind kind, + union call_site_parameter_u kind_u, + int deref_size) override + { + invalid ("DW_OP_entry_value"); + } + + CORE_ADDR get_object_address () override + { + invalid ("DW_OP_push_object_address"); + } + + CORE_ADDR get_frame_cfa () override + { + invalid ("DW_OP_call_frame_cfa"); + } + + CORE_ADDR get_tls_address (CORE_ADDR offset) override + { + invalid ("DW_OP_form_tls_address"); + } + + void dwarf_call (cu_offset die_offset) override + { + invalid ("DW_OP_call*"); + } + + struct value *dwarf_variable_value (sect_offset sect_off) override + { + invalid ("DW_OP_GNU_variable_value"); + } + + CORE_ADDR get_addr_index (unsigned int index) override + { + invalid ("DW_OP_addrx or DW_OP_GNU_addr_index"); + } + + private: + + void invalid (const char *op) ATTRIBUTE_NORETURN + { + error (_("%s is invalid in this context"), op); + } +}; + +static CORE_ADDR +execute_stack_op (const gdb_byte *exp, ULONGEST len, int addr_size, + struct frame_info *this_frame, CORE_ADDR initial, + int initial_in_stack_memory, dwarf2_per_objfile *per_objfile) +{ + CORE_ADDR result; + + dwarf_expr_executor ctx (per_objfile); + scoped_value_mark free_values; + + ctx.this_frame = this_frame; + ctx.gdbarch = get_frame_arch (this_frame); + ctx.addr_size = addr_size; + ctx.ref_addr_size = -1; + + ctx.push_address (initial, initial_in_stack_memory); + ctx.eval (exp, len); + + if (ctx.location == DWARF_VALUE_MEMORY) + result = ctx.fetch_address (0); + else if (ctx.location == DWARF_VALUE_REGISTER) + result = ctx.read_addr_from_reg (value_as_long (ctx.fetch (0))); + else + { + /* This is actually invalid DWARF, but if we ever do run across + it somehow, we might as well support it. So, instead, report + it as unimplemented. */ + error (_("\ +Not implemented: computing unwound register using explicit value operator")); + } + + return result; +} + + +/* Execute FDE program from INSN_PTR possibly up to INSN_END or up to inferior + PC. Modify FS state accordingly. Return current INSN_PTR where the + execution has stopped, one can resume it on the next call. */ + +static const gdb_byte * +execute_cfa_program (struct dwarf2_fde *fde, const gdb_byte *insn_ptr, + const gdb_byte *insn_end, struct gdbarch *gdbarch, + CORE_ADDR pc, struct dwarf2_frame_state *fs, + CORE_ADDR text_offset) +{ + int eh_frame_p = fde->eh_frame_p; + unsigned int bytes_read; + enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); + + while (insn_ptr < insn_end && fs->pc <= pc) + { + gdb_byte insn = *insn_ptr++; + uint64_t utmp, reg; + int64_t offset; + + if ((insn & 0xc0) == DW_CFA_advance_loc) + fs->pc += (insn & 0x3f) * fs->code_align; + else if ((insn & 0xc0) == DW_CFA_offset) + { + reg = insn & 0x3f; + reg = dwarf2_frame_adjust_regnum (gdbarch, reg, eh_frame_p); + insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &utmp); + offset = utmp * fs->data_align; + fs->regs.alloc_regs (reg + 1); + fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_OFFSET; + fs->regs.reg[reg].loc.offset = offset; + } + else if ((insn & 0xc0) == DW_CFA_restore) + { + reg = insn & 0x3f; + dwarf2_restore_rule (gdbarch, reg, fs, eh_frame_p); + } + else + { + switch (insn) + { + case DW_CFA_set_loc: + fs->pc = read_encoded_value (fde->cie->unit, fde->cie->encoding, + fde->cie->ptr_size, insn_ptr, + &bytes_read, fde->initial_location); + /* Apply the text offset for relocatable objects. */ + fs->pc += text_offset; + insn_ptr += bytes_read; + break; + + case DW_CFA_advance_loc1: + utmp = extract_unsigned_integer (insn_ptr, 1, byte_order); + fs->pc += utmp * fs->code_align; + insn_ptr++; + break; + case DW_CFA_advance_loc2: + utmp = extract_unsigned_integer (insn_ptr, 2, byte_order); + fs->pc += utmp * fs->code_align; + insn_ptr += 2; + break; + case DW_CFA_advance_loc4: + utmp = extract_unsigned_integer (insn_ptr, 4, byte_order); + fs->pc += utmp * fs->code_align; + insn_ptr += 4; + break; + + case DW_CFA_offset_extended: + insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, ®); + reg = dwarf2_frame_adjust_regnum (gdbarch, reg, eh_frame_p); + insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &utmp); + offset = utmp * fs->data_align; + fs->regs.alloc_regs (reg + 1); + fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_OFFSET; + fs->regs.reg[reg].loc.offset = offset; + break; + + case DW_CFA_restore_extended: + insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, ®); + dwarf2_restore_rule (gdbarch, reg, fs, eh_frame_p); + break; + + case DW_CFA_undefined: + insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, ®); + reg = dwarf2_frame_adjust_regnum (gdbarch, reg, eh_frame_p); + fs->regs.alloc_regs (reg + 1); + fs->regs.reg[reg].how = DWARF2_FRAME_REG_UNDEFINED; + break; + + case DW_CFA_same_value: + insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, ®); + reg = dwarf2_frame_adjust_regnum (gdbarch, reg, eh_frame_p); + fs->regs.alloc_regs (reg + 1); + fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAME_VALUE; + break; + + case DW_CFA_register: + insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, ®); + reg = dwarf2_frame_adjust_regnum (gdbarch, reg, eh_frame_p); + insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &utmp); + utmp = dwarf2_frame_adjust_regnum (gdbarch, utmp, eh_frame_p); + fs->regs.alloc_regs (reg + 1); + fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_REG; + fs->regs.reg[reg].loc.reg = utmp; + break; + + case DW_CFA_remember_state: + { + struct dwarf2_frame_state_reg_info *new_rs; + + new_rs = new dwarf2_frame_state_reg_info (fs->regs); + fs->regs.prev = new_rs; + } + break; + + case DW_CFA_restore_state: + { + struct dwarf2_frame_state_reg_info *old_rs = fs->regs.prev; + + if (old_rs == NULL) + { + complaint (_("\ +bad CFI data; mismatched DW_CFA_restore_state at %s"), + paddress (gdbarch, fs->pc)); + } + else + fs->regs = std::move (*old_rs); + } + break; + + case DW_CFA_def_cfa: + insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, ®); + fs->regs.cfa_reg = reg; + insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &utmp); + + if (fs->armcc_cfa_offsets_sf) + utmp *= fs->data_align; + + fs->regs.cfa_offset = utmp; + fs->regs.cfa_how = CFA_REG_OFFSET; + break; + + case DW_CFA_def_cfa_register: + insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, ®); + fs->regs.cfa_reg = dwarf2_frame_adjust_regnum (gdbarch, reg, + eh_frame_p); + fs->regs.cfa_how = CFA_REG_OFFSET; + break; + + case DW_CFA_def_cfa_offset: + insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &utmp); + + if (fs->armcc_cfa_offsets_sf) + utmp *= fs->data_align; + + fs->regs.cfa_offset = utmp; + /* cfa_how deliberately not set. */ + break; + + case DW_CFA_nop: + break; + + case DW_CFA_def_cfa_expression: + insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &utmp); + fs->regs.cfa_exp_len = utmp; + fs->regs.cfa_exp = insn_ptr; + fs->regs.cfa_how = CFA_EXP; + insn_ptr += fs->regs.cfa_exp_len; + break; + + case DW_CFA_expression: + insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, ®); + reg = dwarf2_frame_adjust_regnum (gdbarch, reg, eh_frame_p); + fs->regs.alloc_regs (reg + 1); + insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &utmp); + fs->regs.reg[reg].loc.exp.start = insn_ptr; + fs->regs.reg[reg].loc.exp.len = utmp; + fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_EXP; + insn_ptr += utmp; + break; + + case DW_CFA_offset_extended_sf: + insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, ®); + reg = dwarf2_frame_adjust_regnum (gdbarch, reg, eh_frame_p); + insn_ptr = safe_read_sleb128 (insn_ptr, insn_end, &offset); + offset *= fs->data_align; + fs->regs.alloc_regs (reg + 1); + fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_OFFSET; + fs->regs.reg[reg].loc.offset = offset; + break; + + case DW_CFA_val_offset: + insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, ®); + fs->regs.alloc_regs (reg + 1); + insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &utmp); + offset = utmp * fs->data_align; + fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_VAL_OFFSET; + fs->regs.reg[reg].loc.offset = offset; + break; + + case DW_CFA_val_offset_sf: + insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, ®); + fs->regs.alloc_regs (reg + 1); + insn_ptr = safe_read_sleb128 (insn_ptr, insn_end, &offset); + offset *= fs->data_align; + fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_VAL_OFFSET; + fs->regs.reg[reg].loc.offset = offset; + break; + + case DW_CFA_val_expression: + insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, ®); + fs->regs.alloc_regs (reg + 1); + insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &utmp); + fs->regs.reg[reg].loc.exp.start = insn_ptr; + fs->regs.reg[reg].loc.exp.len = utmp; + fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_VAL_EXP; + insn_ptr += utmp; + break; + + case DW_CFA_def_cfa_sf: + insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, ®); + fs->regs.cfa_reg = dwarf2_frame_adjust_regnum (gdbarch, reg, + eh_frame_p); + insn_ptr = safe_read_sleb128 (insn_ptr, insn_end, &offset); + fs->regs.cfa_offset = offset * fs->data_align; + fs->regs.cfa_how = CFA_REG_OFFSET; + break; + + case DW_CFA_def_cfa_offset_sf: + insn_ptr = safe_read_sleb128 (insn_ptr, insn_end, &offset); + fs->regs.cfa_offset = offset * fs->data_align; + /* cfa_how deliberately not set. */ + break; + + case DW_CFA_GNU_args_size: + /* Ignored. */ + insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &utmp); + break; + + case DW_CFA_GNU_negative_offset_extended: + insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, ®); + reg = dwarf2_frame_adjust_regnum (gdbarch, reg, eh_frame_p); + insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &utmp); + offset = utmp * fs->data_align; + fs->regs.alloc_regs (reg + 1); + fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_OFFSET; + fs->regs.reg[reg].loc.offset = -offset; + break; + + default: + if (insn >= DW_CFA_lo_user && insn <= DW_CFA_hi_user) + { + /* Handle vendor-specific CFI for different architectures. */ + if (!gdbarch_execute_dwarf_cfa_vendor_op (gdbarch, insn, fs)) + error (_("Call Frame Instruction op %d in vendor extension " + "space is not handled on this architecture."), + insn); + } + else + internal_error (__FILE__, __LINE__, + _("Unknown CFI encountered.")); + } + } + } + + if (fs->initial.reg.empty ()) + { + /* Don't allow remember/restore between CIE and FDE programs. */ + delete fs->regs.prev; + fs->regs.prev = NULL; + } + + return insn_ptr; +} + +#if GDB_SELF_TEST + +namespace selftests { + +/* Unit test to function execute_cfa_program. */ + +static void +execute_cfa_program_test (struct gdbarch *gdbarch) +{ + struct dwarf2_fde fde; + struct dwarf2_cie cie; + + memset (&fde, 0, sizeof fde); + memset (&cie, 0, sizeof cie); + + cie.data_alignment_factor = -4; + cie.code_alignment_factor = 2; + fde.cie = &cie; + + dwarf2_frame_state fs (0, fde.cie); + + gdb_byte insns[] = + { + DW_CFA_def_cfa, 1, 4, /* DW_CFA_def_cfa: r1 ofs 4 */ + DW_CFA_offset | 0x2, 1, /* DW_CFA_offset: r2 at cfa-4 */ + DW_CFA_remember_state, + DW_CFA_restore_state, + }; + + const gdb_byte *insn_end = insns + sizeof (insns); + const gdb_byte *out = execute_cfa_program (&fde, insns, insn_end, gdbarch, + 0, &fs, 0); + + SELF_CHECK (out == insn_end); + SELF_CHECK (fs.pc == 0); + + /* The instructions above only use r1 and r2, but the register numbers + used are adjusted by dwarf2_frame_adjust_regnum. */ + auto r1 = dwarf2_frame_adjust_regnum (gdbarch, 1, fde.eh_frame_p); + auto r2 = dwarf2_frame_adjust_regnum (gdbarch, 2, fde.eh_frame_p); + + SELF_CHECK (fs.regs.reg.size () == (std::max (r1, r2) + 1)); + + SELF_CHECK (fs.regs.reg[r2].how == DWARF2_FRAME_REG_SAVED_OFFSET); + SELF_CHECK (fs.regs.reg[r2].loc.offset == -4); + + for (auto i = 0; i < fs.regs.reg.size (); i++) + if (i != r2) + SELF_CHECK (fs.regs.reg[i].how == DWARF2_FRAME_REG_UNSPECIFIED); + + SELF_CHECK (fs.regs.cfa_reg == 1); + SELF_CHECK (fs.regs.cfa_offset == 4); + SELF_CHECK (fs.regs.cfa_how == CFA_REG_OFFSET); + SELF_CHECK (fs.regs.cfa_exp == NULL); + SELF_CHECK (fs.regs.prev == NULL); +} + +} // namespace selftests +#endif /* GDB_SELF_TEST */ + + + +/* Architecture-specific operations. */ + +/* Per-architecture data key. */ +static struct gdbarch_data *dwarf2_frame_data; + +struct dwarf2_frame_ops +{ + /* Pre-initialize the register state REG for register REGNUM. */ + void (*init_reg) (struct gdbarch *, int, struct dwarf2_frame_state_reg *, + struct frame_info *); + + /* Check whether the THIS_FRAME is a signal trampoline. */ + int (*signal_frame_p) (struct gdbarch *, struct frame_info *); + + /* Convert .eh_frame register number to DWARF register number, or + adjust .debug_frame register number. */ + int (*adjust_regnum) (struct gdbarch *, int, int); +}; + +/* Default architecture-specific register state initialization + function. */ + +static void +dwarf2_frame_default_init_reg (struct gdbarch *gdbarch, int regnum, + struct dwarf2_frame_state_reg *reg, + struct frame_info *this_frame) +{ + /* If we have a register that acts as a program counter, mark it as + a destination for the return address. If we have a register that + serves as the stack pointer, arrange for it to be filled with the + call frame address (CFA). The other registers are marked as + unspecified. + + We copy the return address to the program counter, since many + parts in GDB assume that it is possible to get the return address + by unwinding the program counter register. However, on ISA's + with a dedicated return address register, the CFI usually only + contains information to unwind that return address register. + + The reason we're treating the stack pointer special here is + because in many cases GCC doesn't emit CFI for the stack pointer + and implicitly assumes that it is equal to the CFA. This makes + some sense since the DWARF specification (version 3, draft 8, + p. 102) says that: + + "Typically, the CFA is defined to be the value of the stack + pointer at the call site in the previous frame (which may be + different from its value on entry to the current frame)." + + However, this isn't true for all platforms supported by GCC + (e.g. IBM S/390 and zSeries). Those architectures should provide + their own architecture-specific initialization function. */ + + if (regnum == gdbarch_pc_regnum (gdbarch)) + reg->how = DWARF2_FRAME_REG_RA; + else if (regnum == gdbarch_sp_regnum (gdbarch)) + reg->how = DWARF2_FRAME_REG_CFA; +} + +/* Return a default for the architecture-specific operations. */ + +static void * +dwarf2_frame_init (struct obstack *obstack) +{ + struct dwarf2_frame_ops *ops; + + ops = OBSTACK_ZALLOC (obstack, struct dwarf2_frame_ops); + ops->init_reg = dwarf2_frame_default_init_reg; + return ops; +} + +/* Set the architecture-specific register state initialization + function for GDBARCH to INIT_REG. */ + +void +dwarf2_frame_set_init_reg (struct gdbarch *gdbarch, + void (*init_reg) (struct gdbarch *, int, + struct dwarf2_frame_state_reg *, + struct frame_info *)) +{ + struct dwarf2_frame_ops *ops + = (struct dwarf2_frame_ops *) gdbarch_data (gdbarch, dwarf2_frame_data); + + ops->init_reg = init_reg; +} + +/* Pre-initialize the register state REG for register REGNUM. */ + +static void +dwarf2_frame_init_reg (struct gdbarch *gdbarch, int regnum, + struct dwarf2_frame_state_reg *reg, + struct frame_info *this_frame) +{ + struct dwarf2_frame_ops *ops + = (struct dwarf2_frame_ops *) gdbarch_data (gdbarch, dwarf2_frame_data); + + ops->init_reg (gdbarch, regnum, reg, this_frame); +} + +/* Set the architecture-specific signal trampoline recognition + function for GDBARCH to SIGNAL_FRAME_P. */ + +void +dwarf2_frame_set_signal_frame_p (struct gdbarch *gdbarch, + int (*signal_frame_p) (struct gdbarch *, + struct frame_info *)) +{ + struct dwarf2_frame_ops *ops + = (struct dwarf2_frame_ops *) gdbarch_data (gdbarch, dwarf2_frame_data); + + ops->signal_frame_p = signal_frame_p; +} + +/* Query the architecture-specific signal frame recognizer for + THIS_FRAME. */ + +static int +dwarf2_frame_signal_frame_p (struct gdbarch *gdbarch, + struct frame_info *this_frame) +{ + struct dwarf2_frame_ops *ops + = (struct dwarf2_frame_ops *) gdbarch_data (gdbarch, dwarf2_frame_data); + + if (ops->signal_frame_p == NULL) + return 0; + return ops->signal_frame_p (gdbarch, this_frame); +} + +/* Set the architecture-specific adjustment of .eh_frame and .debug_frame + register numbers. */ + +void +dwarf2_frame_set_adjust_regnum (struct gdbarch *gdbarch, + int (*adjust_regnum) (struct gdbarch *, + int, int)) +{ + struct dwarf2_frame_ops *ops + = (struct dwarf2_frame_ops *) gdbarch_data (gdbarch, dwarf2_frame_data); + + ops->adjust_regnum = adjust_regnum; +} + +/* Translate a .eh_frame register to DWARF register, or adjust a .debug_frame + register. */ + +static int +dwarf2_frame_adjust_regnum (struct gdbarch *gdbarch, + int regnum, int eh_frame_p) +{ + struct dwarf2_frame_ops *ops + = (struct dwarf2_frame_ops *) gdbarch_data (gdbarch, dwarf2_frame_data); + + if (ops->adjust_regnum == NULL) + return regnum; + return ops->adjust_regnum (gdbarch, regnum, eh_frame_p); +} + +static void +dwarf2_frame_find_quirks (struct dwarf2_frame_state *fs, + struct dwarf2_fde *fde) +{ + struct compunit_symtab *cust; + + cust = find_pc_compunit_symtab (fs->pc); + if (cust == NULL) + return; + + if (producer_is_realview (COMPUNIT_PRODUCER (cust))) + { + if (fde->cie->version == 1) + fs->armcc_cfa_offsets_sf = 1; + + if (fde->cie->version == 1) + fs->armcc_cfa_offsets_reversed = 1; + + /* The reversed offset problem is present in some compilers + using DWARF3, but it was eventually fixed. Check the ARM + defined augmentations, which are in the format "armcc" followed + by a list of one-character options. The "+" option means + this problem is fixed (no quirk needed). If the armcc + augmentation is missing, the quirk is needed. */ + if (fde->cie->version == 3 + && (!startswith (fde->cie->augmentation, "armcc") + || strchr (fde->cie->augmentation + 5, '+') == NULL)) + fs->armcc_cfa_offsets_reversed = 1; + + return; + } +} + + +/* See dwarf2-frame.h. */ + +int +dwarf2_fetch_cfa_info (struct gdbarch *gdbarch, CORE_ADDR pc, + struct dwarf2_per_cu_data *data, + int *regnum_out, LONGEST *offset_out, + CORE_ADDR *text_offset_out, + const gdb_byte **cfa_start_out, + const gdb_byte **cfa_end_out) +{ + struct dwarf2_fde *fde; + dwarf2_per_objfile *per_objfile; + CORE_ADDR pc1 = pc; + + /* Find the correct FDE. */ + fde = dwarf2_frame_find_fde (&pc1, &per_objfile); + if (fde == NULL) + error (_("Could not compute CFA; needed to translate this expression")); + + gdb_assert (per_objfile != nullptr); + + dwarf2_frame_state fs (pc1, fde->cie); + + /* Check for "quirks" - known bugs in producers. */ + dwarf2_frame_find_quirks (&fs, fde); + + /* First decode all the insns in the CIE. */ + execute_cfa_program (fde, fde->cie->initial_instructions, + fde->cie->end, gdbarch, pc, &fs, + per_objfile->objfile->text_section_offset ()); + + /* Save the initialized register set. */ + fs.initial = fs.regs; + + /* Then decode the insns in the FDE up to our target PC. */ + execute_cfa_program (fde, fde->instructions, fde->end, gdbarch, pc, &fs, + per_objfile->objfile->text_section_offset ()); + + /* Calculate the CFA. */ + switch (fs.regs.cfa_how) + { + case CFA_REG_OFFSET: + { + int regnum = dwarf_reg_to_regnum_or_error (gdbarch, fs.regs.cfa_reg); + + *regnum_out = regnum; + if (fs.armcc_cfa_offsets_reversed) + *offset_out = -fs.regs.cfa_offset; + else + *offset_out = fs.regs.cfa_offset; + return 1; + } + + case CFA_EXP: + *text_offset_out = per_objfile->objfile->text_section_offset (); + *cfa_start_out = fs.regs.cfa_exp; + *cfa_end_out = fs.regs.cfa_exp + fs.regs.cfa_exp_len; + return 0; + + default: + internal_error (__FILE__, __LINE__, _("Unknown CFA rule.")); + } +} + + +struct dwarf2_frame_cache +{ + /* DWARF Call Frame Address. */ + CORE_ADDR cfa; + + /* Set if the return address column was marked as unavailable + (required non-collected memory or registers to compute). */ + int unavailable_retaddr; + + /* Set if the return address column was marked as undefined. */ + int undefined_retaddr; + + /* Saved registers, indexed by GDB register number, not by DWARF + register number. */ + struct dwarf2_frame_state_reg *reg; + + /* Return address register. */ + struct dwarf2_frame_state_reg retaddr_reg; + + /* Target address size in bytes. */ + int addr_size; + + /* The dwarf2_per_objfile from which this frame description came. */ + dwarf2_per_objfile *per_objfile; + + /* If not NULL then this frame is the bottom frame of a TAILCALL_FRAME + sequence. If NULL then it is a normal case with no TAILCALL_FRAME + involved. Non-bottom frames of a virtual tail call frames chain use + dwarf2_tailcall_frame_unwind unwinder so this field does not apply for + them. */ + void *tailcall_cache; +}; + +static struct dwarf2_frame_cache * +dwarf2_frame_cache (struct frame_info *this_frame, void **this_cache) +{ + struct gdbarch *gdbarch = get_frame_arch (this_frame); + const int num_regs = gdbarch_num_cooked_regs (gdbarch); + struct dwarf2_frame_cache *cache; + struct dwarf2_fde *fde; + CORE_ADDR entry_pc; + const gdb_byte *instr; + + if (*this_cache) + return (struct dwarf2_frame_cache *) *this_cache; + + /* Allocate a new cache. */ + cache = FRAME_OBSTACK_ZALLOC (struct dwarf2_frame_cache); + cache->reg = FRAME_OBSTACK_CALLOC (num_regs, struct dwarf2_frame_state_reg); + *this_cache = cache; + + /* Unwind the PC. + + Note that if the next frame is never supposed to return (i.e. a call + to abort), the compiler might optimize away the instruction at + its return address. As a result the return address will + point at some random instruction, and the CFI for that + instruction is probably worthless to us. GCC's unwinder solves + this problem by substracting 1 from the return address to get an + address in the middle of a presumed call instruction (or the + instruction in the associated delay slot). This should only be + done for "normal" frames and not for resume-type frames (signal + handlers, sentinel frames, dummy frames). The function + get_frame_address_in_block does just this. It's not clear how + reliable the method is though; there is the potential for the + register state pre-call being different to that on return. */ + CORE_ADDR pc1 = get_frame_address_in_block (this_frame); + + /* Find the correct FDE. */ + fde = dwarf2_frame_find_fde (&pc1, &cache->per_objfile); + gdb_assert (fde != NULL); + gdb_assert (cache->per_objfile != nullptr); + + /* Allocate and initialize the frame state. */ + struct dwarf2_frame_state fs (pc1, fde->cie); + + cache->addr_size = fde->cie->addr_size; + + /* Check for "quirks" - known bugs in producers. */ + dwarf2_frame_find_quirks (&fs, fde); + + /* First decode all the insns in the CIE. */ + execute_cfa_program (fde, fde->cie->initial_instructions, + fde->cie->end, gdbarch, + get_frame_address_in_block (this_frame), &fs, + cache->per_objfile->objfile->text_section_offset ()); + + /* Save the initialized register set. */ + fs.initial = fs.regs; + + /* Fetching the entry pc for THIS_FRAME won't necessarily result + in an address that's within the range of FDE locations. This + is due to the possibility of the function occupying non-contiguous + ranges. */ + LONGEST entry_cfa_sp_offset; + int entry_cfa_sp_offset_p = 0; + if (get_frame_func_if_available (this_frame, &entry_pc) + && fde->initial_location <= entry_pc + && entry_pc < fde->initial_location + fde->address_range) + { + /* Decode the insns in the FDE up to the entry PC. */ + instr = execute_cfa_program + (fde, fde->instructions, fde->end, gdbarch, entry_pc, &fs, + cache->per_objfile->objfile->text_section_offset ()); + + if (fs.regs.cfa_how == CFA_REG_OFFSET + && (dwarf_reg_to_regnum (gdbarch, fs.regs.cfa_reg) + == gdbarch_sp_regnum (gdbarch))) + { + entry_cfa_sp_offset = fs.regs.cfa_offset; + entry_cfa_sp_offset_p = 1; + } + } + else + instr = fde->instructions; + + /* Then decode the insns in the FDE up to our target PC. */ + execute_cfa_program (fde, instr, fde->end, gdbarch, + get_frame_address_in_block (this_frame), &fs, + cache->per_objfile->objfile->text_section_offset ()); + + try + { + /* Calculate the CFA. */ + switch (fs.regs.cfa_how) + { + case CFA_REG_OFFSET: + cache->cfa = read_addr_from_reg (this_frame, fs.regs.cfa_reg); + if (fs.armcc_cfa_offsets_reversed) + cache->cfa -= fs.regs.cfa_offset; + else + cache->cfa += fs.regs.cfa_offset; + break; + + case CFA_EXP: + cache->cfa = + execute_stack_op (fs.regs.cfa_exp, fs.regs.cfa_exp_len, + cache->addr_size, this_frame, 0, 0, + cache->per_objfile); + break; + + default: + internal_error (__FILE__, __LINE__, _("Unknown CFA rule.")); + } + } + catch (const gdb_exception_error &ex) + { + if (ex.error == NOT_AVAILABLE_ERROR) + { + cache->unavailable_retaddr = 1; + return cache; + } + + throw; + } + + /* Initialize the register state. */ + { + int regnum; + + for (regnum = 0; regnum < num_regs; regnum++) + dwarf2_frame_init_reg (gdbarch, regnum, &cache->reg[regnum], this_frame); + } + + /* Go through the DWARF2 CFI generated table and save its register + location information in the cache. Note that we don't skip the + return address column; it's perfectly all right for it to + correspond to a real register. */ + { + int column; /* CFI speak for "register number". */ + + for (column = 0; column < fs.regs.reg.size (); column++) + { + /* Use the GDB register number as the destination index. */ + int regnum = dwarf_reg_to_regnum (gdbarch, column); + + /* Protect against a target returning a bad register. */ + if (regnum < 0 || regnum >= num_regs) + continue; + + /* NOTE: cagney/2003-09-05: CFI should specify the disposition + of all debug info registers. If it doesn't, complain (but + not too loudly). It turns out that GCC assumes that an + unspecified register implies "same value" when CFI (draft + 7) specifies nothing at all. Such a register could equally + be interpreted as "undefined". Also note that this check + isn't sufficient; it only checks that all registers in the + range [0 .. max column] are specified, and won't detect + problems when a debug info register falls outside of the + table. We need a way of iterating through all the valid + DWARF2 register numbers. */ + if (fs.regs.reg[column].how == DWARF2_FRAME_REG_UNSPECIFIED) + { + if (cache->reg[regnum].how == DWARF2_FRAME_REG_UNSPECIFIED) + complaint (_("\ +incomplete CFI data; unspecified registers (e.g., %s) at %s"), + gdbarch_register_name (gdbarch, regnum), + paddress (gdbarch, fs.pc)); + } + else + cache->reg[regnum] = fs.regs.reg[column]; + } + } + + /* Eliminate any DWARF2_FRAME_REG_RA rules, and save the information + we need for evaluating DWARF2_FRAME_REG_RA_OFFSET rules. */ + { + int regnum; + + for (regnum = 0; regnum < num_regs; regnum++) + { + if (cache->reg[regnum].how == DWARF2_FRAME_REG_RA + || cache->reg[regnum].how == DWARF2_FRAME_REG_RA_OFFSET) + { + const std::vector<struct dwarf2_frame_state_reg> ®s + = fs.regs.reg; + ULONGEST retaddr_column = fs.retaddr_column; + + /* It seems rather bizarre to specify an "empty" column as + the return adress column. However, this is exactly + what GCC does on some targets. It turns out that GCC + assumes that the return address can be found in the + register corresponding to the return address column. + Incidentally, that's how we should treat a return + address column specifying "same value" too. */ + if (fs.retaddr_column < fs.regs.reg.size () + && regs[retaddr_column].how != DWARF2_FRAME_REG_UNSPECIFIED + && regs[retaddr_column].how != DWARF2_FRAME_REG_SAME_VALUE) + { + if (cache->reg[regnum].how == DWARF2_FRAME_REG_RA) + cache->reg[regnum] = regs[retaddr_column]; + else + cache->retaddr_reg = regs[retaddr_column]; + } + else + { + if (cache->reg[regnum].how == DWARF2_FRAME_REG_RA) + { + cache->reg[regnum].loc.reg = fs.retaddr_column; + cache->reg[regnum].how = DWARF2_FRAME_REG_SAVED_REG; + } + else + { + cache->retaddr_reg.loc.reg = fs.retaddr_column; + cache->retaddr_reg.how = DWARF2_FRAME_REG_SAVED_REG; + } + } + } + } + } + + if (fs.retaddr_column < fs.regs.reg.size () + && fs.regs.reg[fs.retaddr_column].how == DWARF2_FRAME_REG_UNDEFINED) + cache->undefined_retaddr = 1; + + dwarf2_tailcall_sniffer_first (this_frame, &cache->tailcall_cache, + (entry_cfa_sp_offset_p + ? &entry_cfa_sp_offset : NULL)); + + return cache; +} + +static enum unwind_stop_reason +dwarf2_frame_unwind_stop_reason (struct frame_info *this_frame, + void **this_cache) +{ + struct dwarf2_frame_cache *cache + = dwarf2_frame_cache (this_frame, this_cache); + + if (cache->unavailable_retaddr) + return UNWIND_UNAVAILABLE; + + if (cache->undefined_retaddr) + return UNWIND_OUTERMOST; + + return UNWIND_NO_REASON; +} + +static void +dwarf2_frame_this_id (struct frame_info *this_frame, void **this_cache, + struct frame_id *this_id) +{ + struct dwarf2_frame_cache *cache = + dwarf2_frame_cache (this_frame, this_cache); + + if (cache->unavailable_retaddr) + (*this_id) = frame_id_build_unavailable_stack (get_frame_func (this_frame)); + else if (cache->undefined_retaddr) + return; + else + (*this_id) = frame_id_build (cache->cfa, get_frame_func (this_frame)); +} + +static struct value * +dwarf2_frame_prev_register (struct frame_info *this_frame, void **this_cache, + int regnum) +{ + struct gdbarch *gdbarch = get_frame_arch (this_frame); + struct dwarf2_frame_cache *cache = + dwarf2_frame_cache (this_frame, this_cache); + CORE_ADDR addr; + int realnum; + + /* Non-bottom frames of a virtual tail call frames chain use + dwarf2_tailcall_frame_unwind unwinder so this code does not apply for + them. If dwarf2_tailcall_prev_register_first does not have specific value + unwind the register, tail call frames are assumed to have the register set + of the top caller. */ + if (cache->tailcall_cache) + { + struct value *val; + + val = dwarf2_tailcall_prev_register_first (this_frame, + &cache->tailcall_cache, + regnum); + if (val) + return val; + } + + switch (cache->reg[regnum].how) + { + case DWARF2_FRAME_REG_UNDEFINED: + /* If CFI explicitly specified that the value isn't defined, + mark it as optimized away; the value isn't available. */ + return frame_unwind_got_optimized (this_frame, regnum); + + case DWARF2_FRAME_REG_SAVED_OFFSET: + addr = cache->cfa + cache->reg[regnum].loc.offset; + return frame_unwind_got_memory (this_frame, regnum, addr); + + case DWARF2_FRAME_REG_SAVED_REG: + realnum = dwarf_reg_to_regnum_or_error + (gdbarch, cache->reg[regnum].loc.reg); + return frame_unwind_got_register (this_frame, regnum, realnum); + + case DWARF2_FRAME_REG_SAVED_EXP: + addr = execute_stack_op (cache->reg[regnum].loc.exp.start, + cache->reg[regnum].loc.exp.len, + cache->addr_size, + this_frame, cache->cfa, 1, + cache->per_objfile); + return frame_unwind_got_memory (this_frame, regnum, addr); + + case DWARF2_FRAME_REG_SAVED_VAL_OFFSET: + addr = cache->cfa + cache->reg[regnum].loc.offset; + return frame_unwind_got_constant (this_frame, regnum, addr); + + case DWARF2_FRAME_REG_SAVED_VAL_EXP: + addr = execute_stack_op (cache->reg[regnum].loc.exp.start, + cache->reg[regnum].loc.exp.len, + cache->addr_size, + this_frame, cache->cfa, 1, + cache->per_objfile); + return frame_unwind_got_constant (this_frame, regnum, addr); + + case DWARF2_FRAME_REG_UNSPECIFIED: + /* GCC, in its infinite wisdom decided to not provide unwind + information for registers that are "same value". Since + DWARF2 (3 draft 7) doesn't define such behavior, said + registers are actually undefined (which is different to CFI + "undefined"). Code above issues a complaint about this. + Here just fudge the books, assume GCC, and that the value is + more inner on the stack. */ + return frame_unwind_got_register (this_frame, regnum, regnum); + + case DWARF2_FRAME_REG_SAME_VALUE: + return frame_unwind_got_register (this_frame, regnum, regnum); + + case DWARF2_FRAME_REG_CFA: + return frame_unwind_got_address (this_frame, regnum, cache->cfa); + + case DWARF2_FRAME_REG_CFA_OFFSET: + addr = cache->cfa + cache->reg[regnum].loc.offset; + return frame_unwind_got_address (this_frame, regnum, addr); + + case DWARF2_FRAME_REG_RA_OFFSET: + addr = cache->reg[regnum].loc.offset; + regnum = dwarf_reg_to_regnum_or_error + (gdbarch, cache->retaddr_reg.loc.reg); + addr += get_frame_register_unsigned (this_frame, regnum); + return frame_unwind_got_address (this_frame, regnum, addr); + + case DWARF2_FRAME_REG_FN: + return cache->reg[regnum].loc.fn (this_frame, this_cache, regnum); + + default: + internal_error (__FILE__, __LINE__, _("Unknown register rule.")); + } +} + +/* Proxy for tailcall_frame_dealloc_cache for bottom frame of a virtual tail + call frames chain. */ + +static void +dwarf2_frame_dealloc_cache (struct frame_info *self, void *this_cache) +{ + struct dwarf2_frame_cache *cache = dwarf2_frame_cache (self, &this_cache); + + if (cache->tailcall_cache) + dwarf2_tailcall_frame_unwind.dealloc_cache (self, cache->tailcall_cache); +} + +static int +dwarf2_frame_sniffer (const struct frame_unwind *self, + struct frame_info *this_frame, void **this_cache) +{ + if (!dwarf2_frame_unwinders_enabled_p) + return 0; + + /* Grab an address that is guaranteed to reside somewhere within the + function. get_frame_pc(), with a no-return next function, can + end up returning something past the end of this function's body. + If the frame we're sniffing for is a signal frame whose start + address is placed on the stack by the OS, its FDE must + extend one byte before its start address or we could potentially + select the FDE of the previous function. */ + CORE_ADDR block_addr = get_frame_address_in_block (this_frame); + struct dwarf2_fde *fde = dwarf2_frame_find_fde (&block_addr, NULL); + + if (!fde) + return 0; + + /* On some targets, signal trampolines may have unwind information. + We need to recognize them so that we set the frame type + correctly. */ + + if (fde->cie->signal_frame + || dwarf2_frame_signal_frame_p (get_frame_arch (this_frame), + this_frame)) + return self->type == SIGTRAMP_FRAME; + + if (self->type != NORMAL_FRAME) + return 0; + + return 1; +} + +static const struct frame_unwind dwarf2_frame_unwind = +{ + NORMAL_FRAME, + dwarf2_frame_unwind_stop_reason, + dwarf2_frame_this_id, + dwarf2_frame_prev_register, + NULL, + dwarf2_frame_sniffer, + dwarf2_frame_dealloc_cache +}; + +static const struct frame_unwind dwarf2_signal_frame_unwind = +{ + SIGTRAMP_FRAME, + dwarf2_frame_unwind_stop_reason, + dwarf2_frame_this_id, + dwarf2_frame_prev_register, + NULL, + dwarf2_frame_sniffer, + + /* TAILCALL_CACHE can never be in such frame to need dealloc_cache. */ + NULL +}; + +/* Append the DWARF-2 frame unwinders to GDBARCH's list. */ + +void +dwarf2_append_unwinders (struct gdbarch *gdbarch) +{ + frame_unwind_append_unwinder (gdbarch, &dwarf2_frame_unwind); + frame_unwind_append_unwinder (gdbarch, &dwarf2_signal_frame_unwind); +} + + +/* There is no explicitly defined relationship between the CFA and the + location of frame's local variables and arguments/parameters. + Therefore, frame base methods on this page should probably only be + used as a last resort, just to avoid printing total garbage as a + response to the "info frame" command. */ + +static CORE_ADDR +dwarf2_frame_base_address (struct frame_info *this_frame, void **this_cache) +{ + struct dwarf2_frame_cache *cache = + dwarf2_frame_cache (this_frame, this_cache); + + return cache->cfa; +} + +static const struct frame_base dwarf2_frame_base = +{ + &dwarf2_frame_unwind, + dwarf2_frame_base_address, + dwarf2_frame_base_address, + dwarf2_frame_base_address +}; + +const struct frame_base * +dwarf2_frame_base_sniffer (struct frame_info *this_frame) +{ + CORE_ADDR block_addr = get_frame_address_in_block (this_frame); + + if (dwarf2_frame_find_fde (&block_addr, NULL)) + return &dwarf2_frame_base; + + return NULL; +} + +/* Compute the CFA for THIS_FRAME, but only if THIS_FRAME came from + the DWARF unwinder. This is used to implement + DW_OP_call_frame_cfa. */ + +CORE_ADDR +dwarf2_frame_cfa (struct frame_info *this_frame) +{ + if (frame_unwinder_is (this_frame, &record_btrace_tailcall_frame_unwind) + || frame_unwinder_is (this_frame, &record_btrace_frame_unwind)) + throw_error (NOT_AVAILABLE_ERROR, + _("cfa not available for record btrace target")); + + while (get_frame_type (this_frame) == INLINE_FRAME) + this_frame = get_prev_frame (this_frame); + if (get_frame_unwind_stop_reason (this_frame) == UNWIND_UNAVAILABLE) + throw_error (NOT_AVAILABLE_ERROR, + _("can't compute CFA for this frame: " + "required registers or memory are unavailable")); + + if (get_frame_id (this_frame).stack_status != FID_STACK_VALID) + throw_error (NOT_AVAILABLE_ERROR, + _("can't compute CFA for this frame: " + "frame base not available")); + + return get_frame_base (this_frame); +} + +/* We store the frame data on the BFD. This is only done if it is + independent of the address space and so can be shared. */ +static const struct bfd_key<comp_unit> dwarf2_frame_bfd_data; + +/* If any BFD sections require relocations (note; really should be if + any debug info requires relocations), then we store the frame data + on the objfile instead, and do not share it. */ +const struct objfile_key<comp_unit> dwarf2_frame_objfile_data; + + +/* Pointer encoding helper functions. */ + +/* GCC supports exception handling based on DWARF2 CFI. However, for + technical reasons, it encodes addresses in its FDE's in a different + way. Several "pointer encodings" are supported. The encoding + that's used for a particular FDE is determined by the 'R' + augmentation in the associated CIE. The argument of this + augmentation is a single byte. + + The address can be encoded as 2 bytes, 4 bytes, 8 bytes, or as a + LEB128. This is encoded in bits 0, 1 and 2. Bit 3 encodes whether + the address is signed or unsigned. Bits 4, 5 and 6 encode how the + address should be interpreted (absolute, relative to the current + position in the FDE, ...). Bit 7, indicates that the address + should be dereferenced. */ + +static gdb_byte +encoding_for_size (unsigned int size) +{ + switch (size) + { + case 2: + return DW_EH_PE_udata2; + case 4: + return DW_EH_PE_udata4; + case 8: + return DW_EH_PE_udata8; + default: + internal_error (__FILE__, __LINE__, _("Unsupported address size")); + } +} + +static CORE_ADDR +read_encoded_value (struct comp_unit *unit, gdb_byte encoding, + int ptr_len, const gdb_byte *buf, + unsigned int *bytes_read_ptr, + CORE_ADDR func_base) +{ + ptrdiff_t offset; + CORE_ADDR base; + + /* GCC currently doesn't generate DW_EH_PE_indirect encodings for + FDE's. */ + if (encoding & DW_EH_PE_indirect) + internal_error (__FILE__, __LINE__, + _("Unsupported encoding: DW_EH_PE_indirect")); + + *bytes_read_ptr = 0; + + switch (encoding & 0x70) + { + case DW_EH_PE_absptr: + base = 0; + break; + case DW_EH_PE_pcrel: + base = bfd_section_vma (unit->dwarf_frame_section); + base += (buf - unit->dwarf_frame_buffer); + break; + case DW_EH_PE_datarel: + base = unit->dbase; + break; + case DW_EH_PE_textrel: + base = unit->tbase; + break; + case DW_EH_PE_funcrel: + base = func_base; + break; + case DW_EH_PE_aligned: + base = 0; + offset = buf - unit->dwarf_frame_buffer; + if ((offset % ptr_len) != 0) + { + *bytes_read_ptr = ptr_len - (offset % ptr_len); + buf += *bytes_read_ptr; + } + break; + default: + internal_error (__FILE__, __LINE__, + _("Invalid or unsupported encoding")); + } + + if ((encoding & 0x07) == 0x00) + { + encoding |= encoding_for_size (ptr_len); + if (bfd_get_sign_extend_vma (unit->abfd)) + encoding |= DW_EH_PE_signed; + } + + switch (encoding & 0x0f) + { + case DW_EH_PE_uleb128: + { + uint64_t value; + const gdb_byte *end_buf = buf + (sizeof (value) + 1) * 8 / 7; + + *bytes_read_ptr += safe_read_uleb128 (buf, end_buf, &value) - buf; + return base + value; + } + case DW_EH_PE_udata2: + *bytes_read_ptr += 2; + return (base + bfd_get_16 (unit->abfd, (bfd_byte *) buf)); + case DW_EH_PE_udata4: + *bytes_read_ptr += 4; + return (base + bfd_get_32 (unit->abfd, (bfd_byte *) buf)); + case DW_EH_PE_udata8: + *bytes_read_ptr += 8; + return (base + bfd_get_64 (unit->abfd, (bfd_byte *) buf)); + case DW_EH_PE_sleb128: + { + int64_t value; + const gdb_byte *end_buf = buf + (sizeof (value) + 1) * 8 / 7; + + *bytes_read_ptr += safe_read_sleb128 (buf, end_buf, &value) - buf; + return base + value; + } + case DW_EH_PE_sdata2: + *bytes_read_ptr += 2; + return (base + bfd_get_signed_16 (unit->abfd, (bfd_byte *) buf)); + case DW_EH_PE_sdata4: + *bytes_read_ptr += 4; + return (base + bfd_get_signed_32 (unit->abfd, (bfd_byte *) buf)); + case DW_EH_PE_sdata8: + *bytes_read_ptr += 8; + return (base + bfd_get_signed_64 (unit->abfd, (bfd_byte *) buf)); + default: + internal_error (__FILE__, __LINE__, + _("Invalid or unsupported encoding")); + } +} + + +/* Find CIE with the given CIE_POINTER in CIE_TABLE. */ +static struct dwarf2_cie * +find_cie (const dwarf2_cie_table &cie_table, ULONGEST cie_pointer) +{ + auto iter = cie_table.find (cie_pointer); + if (iter != cie_table.end ()) + return iter->second; + return NULL; +} + +static inline int +bsearch_fde_cmp (const dwarf2_fde *fde, CORE_ADDR seek_pc) +{ + if (fde->initial_location + fde->address_range <= seek_pc) + return -1; + if (fde->initial_location <= seek_pc) + return 0; + return 1; +} + +/* Find an existing comp_unit for an objfile, if any. */ + +static comp_unit * +find_comp_unit (struct objfile *objfile) +{ + bfd *abfd = objfile->obfd; + if (gdb_bfd_requires_relocations (abfd)) + return dwarf2_frame_bfd_data.get (abfd); + return dwarf2_frame_objfile_data.get (objfile); +} + +/* Store the comp_unit on OBJFILE, or the corresponding BFD, as + appropriate. */ + +static void +set_comp_unit (struct objfile *objfile, struct comp_unit *unit) +{ + bfd *abfd = objfile->obfd; + if (gdb_bfd_requires_relocations (abfd)) + return dwarf2_frame_bfd_data.set (abfd, unit); + return dwarf2_frame_objfile_data.set (objfile, unit); +} + +/* Find the FDE for *PC. Return a pointer to the FDE, and store the + initial location associated with it into *PC. */ + +static struct dwarf2_fde * +dwarf2_frame_find_fde (CORE_ADDR *pc, dwarf2_per_objfile **out_per_objfile) +{ + for (objfile *objfile : current_program_space->objfiles ()) + { + CORE_ADDR offset; + CORE_ADDR seek_pc; + + comp_unit *unit = find_comp_unit (objfile); + if (unit == NULL) + { + dwarf2_build_frame_info (objfile); + unit = find_comp_unit (objfile); + } + gdb_assert (unit != NULL); + + dwarf2_fde_table *fde_table = &unit->fde_table; + if (fde_table->empty ()) + continue; + + gdb_assert (!objfile->section_offsets.empty ()); + offset = objfile->text_section_offset (); + + gdb_assert (!fde_table->empty ()); + if (*pc < offset + (*fde_table)[0]->initial_location) + continue; + + seek_pc = *pc - offset; + auto it = gdb::binary_search (fde_table->begin (), fde_table->end (), + seek_pc, bsearch_fde_cmp); + if (it != fde_table->end ()) + { + *pc = (*it)->initial_location + offset; + if (out_per_objfile != nullptr) + *out_per_objfile = get_dwarf2_per_objfile (objfile); + + return *it; + } + } + return NULL; +} + +/* Add FDE to FDE_TABLE. */ +static void +add_fde (dwarf2_fde_table *fde_table, struct dwarf2_fde *fde) +{ + if (fde->address_range == 0) + /* Discard useless FDEs. */ + return; + + fde_table->push_back (fde); +} + +#define DW64_CIE_ID 0xffffffffffffffffULL + +/* Defines the type of eh_frames that are expected to be decoded: CIE, FDE + or any of them. */ + +enum eh_frame_type +{ + EH_CIE_TYPE_ID = 1 << 0, + EH_FDE_TYPE_ID = 1 << 1, + EH_CIE_OR_FDE_TYPE_ID = EH_CIE_TYPE_ID | EH_FDE_TYPE_ID +}; + +static const gdb_byte *decode_frame_entry (struct gdbarch *gdbarch, + struct comp_unit *unit, + const gdb_byte *start, + int eh_frame_p, + dwarf2_cie_table &cie_table, + dwarf2_fde_table *fde_table, + enum eh_frame_type entry_type); + +/* Decode the next CIE or FDE, entry_type specifies the expected type. + Return NULL if invalid input, otherwise the next byte to be processed. */ + +static const gdb_byte * +decode_frame_entry_1 (struct gdbarch *gdbarch, + struct comp_unit *unit, const gdb_byte *start, + int eh_frame_p, + dwarf2_cie_table &cie_table, + dwarf2_fde_table *fde_table, + enum eh_frame_type entry_type) +{ + const gdb_byte *buf, *end; + ULONGEST length; + unsigned int bytes_read; + int dwarf64_p; + ULONGEST cie_id; + ULONGEST cie_pointer; + int64_t sleb128; + uint64_t uleb128; + + buf = start; + length = read_initial_length (unit->abfd, buf, &bytes_read, false); + buf += bytes_read; + end = buf + (size_t) length; + + if (length == 0) + return end; + + /* Are we still within the section? */ + if (end <= buf || end > unit->dwarf_frame_buffer + unit->dwarf_frame_size) + return NULL; + + /* Distinguish between 32 and 64-bit encoded frame info. */ + dwarf64_p = (bytes_read == 12); + + /* In a .eh_frame section, zero is used to distinguish CIEs from FDEs. */ + if (eh_frame_p) + cie_id = 0; + else if (dwarf64_p) + cie_id = DW64_CIE_ID; + else + cie_id = DW_CIE_ID; + + if (dwarf64_p) + { + cie_pointer = read_8_bytes (unit->abfd, buf); + buf += 8; + } + else + { + cie_pointer = read_4_bytes (unit->abfd, buf); + buf += 4; + } + + if (cie_pointer == cie_id) + { + /* This is a CIE. */ + struct dwarf2_cie *cie; + char *augmentation; + unsigned int cie_version; + + /* Check that a CIE was expected. */ + if ((entry_type & EH_CIE_TYPE_ID) == 0) + error (_("Found a CIE when not expecting it.")); + + /* Record the offset into the .debug_frame section of this CIE. */ + cie_pointer = start - unit->dwarf_frame_buffer; + + /* Check whether we've already read it. */ + if (find_cie (cie_table, cie_pointer)) + return end; + + cie = XOBNEW (&unit->obstack, struct dwarf2_cie); + cie->initial_instructions = NULL; + cie->cie_pointer = cie_pointer; + + /* The encoding for FDE's in a normal .debug_frame section + depends on the target address size. */ + cie->encoding = DW_EH_PE_absptr; + + /* We'll determine the final value later, but we need to + initialize it conservatively. */ + cie->signal_frame = 0; + + /* Check version number. */ + cie_version = read_1_byte (unit->abfd, buf); + if (cie_version != 1 && cie_version != 3 && cie_version != 4) + return NULL; + cie->version = cie_version; + buf += 1; + + /* Interpret the interesting bits of the augmentation. */ + cie->augmentation = augmentation = (char *) buf; + buf += (strlen (augmentation) + 1); + + /* Ignore armcc augmentations. We only use them for quirks, + and that doesn't happen until later. */ + if (startswith (augmentation, "armcc")) + augmentation += strlen (augmentation); + + /* The GCC 2.x "eh" augmentation has a pointer immediately + following the augmentation string, so it must be handled + first. */ + if (augmentation[0] == 'e' && augmentation[1] == 'h') + { + /* Skip. */ + buf += gdbarch_ptr_bit (gdbarch) / TARGET_CHAR_BIT; + augmentation += 2; + } + + if (cie->version >= 4) + { + /* FIXME: check that this is the same as from the CU header. */ + cie->addr_size = read_1_byte (unit->abfd, buf); + ++buf; + cie->segment_size = read_1_byte (unit->abfd, buf); + ++buf; + } + else + { + cie->addr_size = gdbarch_dwarf2_addr_size (gdbarch); + cie->segment_size = 0; + } + /* Address values in .eh_frame sections are defined to have the + target's pointer size. Watchout: This breaks frame info for + targets with pointer size < address size, unless a .debug_frame + section exists as well. */ + if (eh_frame_p) + cie->ptr_size = gdbarch_ptr_bit (gdbarch) / TARGET_CHAR_BIT; + else + cie->ptr_size = cie->addr_size; + + buf = gdb_read_uleb128 (buf, end, &uleb128); + if (buf == NULL) + return NULL; + cie->code_alignment_factor = uleb128; + + buf = gdb_read_sleb128 (buf, end, &sleb128); + if (buf == NULL) + return NULL; + cie->data_alignment_factor = sleb128; + + if (cie_version == 1) + { + cie->return_address_register = read_1_byte (unit->abfd, buf); + ++buf; + } + else + { + buf = gdb_read_uleb128 (buf, end, &uleb128); + if (buf == NULL) + return NULL; + cie->return_address_register = uleb128; + } + + cie->return_address_register + = dwarf2_frame_adjust_regnum (gdbarch, + cie->return_address_register, + eh_frame_p); + + cie->saw_z_augmentation = (*augmentation == 'z'); + if (cie->saw_z_augmentation) + { + uint64_t uleb_length; + + buf = gdb_read_uleb128 (buf, end, &uleb_length); + if (buf == NULL) + return NULL; + cie->initial_instructions = buf + uleb_length; + augmentation++; + } + + while (*augmentation) + { + /* "L" indicates a byte showing how the LSDA pointer is encoded. */ + if (*augmentation == 'L') + { + /* Skip. */ + buf++; + augmentation++; + } + + /* "R" indicates a byte indicating how FDE addresses are encoded. */ + else if (*augmentation == 'R') + { + cie->encoding = *buf++; + augmentation++; + } + + /* "P" indicates a personality routine in the CIE augmentation. */ + else if (*augmentation == 'P') + { + /* Skip. Avoid indirection since we throw away the result. */ + gdb_byte encoding = (*buf++) & ~DW_EH_PE_indirect; + read_encoded_value (unit, encoding, cie->ptr_size, + buf, &bytes_read, 0); + buf += bytes_read; + augmentation++; + } + + /* "S" indicates a signal frame, such that the return + address must not be decremented to locate the call frame + info for the previous frame; it might even be the first + instruction of a function, so decrementing it would take + us to a different function. */ + else if (*augmentation == 'S') + { + cie->signal_frame = 1; + augmentation++; + } + + /* Otherwise we have an unknown augmentation. Assume that either + there is no augmentation data, or we saw a 'z' prefix. */ + else + { + if (cie->initial_instructions) + buf = cie->initial_instructions; + break; + } + } + + cie->initial_instructions = buf; + cie->end = end; + cie->unit = unit; + + cie_table[cie->cie_pointer] = cie; + } + else + { + /* This is a FDE. */ + struct dwarf2_fde *fde; + CORE_ADDR addr; + + /* Check that an FDE was expected. */ + if ((entry_type & EH_FDE_TYPE_ID) == 0) + error (_("Found an FDE when not expecting it.")); + + /* In an .eh_frame section, the CIE pointer is the delta between the + address within the FDE where the CIE pointer is stored and the + address of the CIE. Convert it to an offset into the .eh_frame + section. */ + if (eh_frame_p) + { + cie_pointer = buf - unit->dwarf_frame_buffer - cie_pointer; + cie_pointer -= (dwarf64_p ? 8 : 4); + } + + /* In either case, validate the result is still within the section. */ + if (cie_pointer >= unit->dwarf_frame_size) + return NULL; + + fde = XOBNEW (&unit->obstack, struct dwarf2_fde); + fde->cie = find_cie (cie_table, cie_pointer); + if (fde->cie == NULL) + { + decode_frame_entry (gdbarch, unit, + unit->dwarf_frame_buffer + cie_pointer, + eh_frame_p, cie_table, fde_table, + EH_CIE_TYPE_ID); + fde->cie = find_cie (cie_table, cie_pointer); + } + + gdb_assert (fde->cie != NULL); + + addr = read_encoded_value (unit, fde->cie->encoding, fde->cie->ptr_size, + buf, &bytes_read, 0); + fde->initial_location = gdbarch_adjust_dwarf2_addr (gdbarch, addr); + buf += bytes_read; + + fde->address_range = + read_encoded_value (unit, fde->cie->encoding & 0x0f, + fde->cie->ptr_size, buf, &bytes_read, 0); + addr = gdbarch_adjust_dwarf2_addr (gdbarch, addr + fde->address_range); + fde->address_range = addr - fde->initial_location; + buf += bytes_read; + + /* A 'z' augmentation in the CIE implies the presence of an + augmentation field in the FDE as well. The only thing known + to be in here at present is the LSDA entry for EH. So we + can skip the whole thing. */ + if (fde->cie->saw_z_augmentation) + { + uint64_t uleb_length; + + buf = gdb_read_uleb128 (buf, end, &uleb_length); + if (buf == NULL) + return NULL; + buf += uleb_length; + if (buf > end) + return NULL; + } + + fde->instructions = buf; + fde->end = end; + + fde->eh_frame_p = eh_frame_p; + + add_fde (fde_table, fde); + } + + return end; +} + +/* Read a CIE or FDE in BUF and decode it. Entry_type specifies whether we + expect an FDE or a CIE. */ + +static const gdb_byte * +decode_frame_entry (struct gdbarch *gdbarch, + struct comp_unit *unit, const gdb_byte *start, + int eh_frame_p, + dwarf2_cie_table &cie_table, + dwarf2_fde_table *fde_table, + enum eh_frame_type entry_type) +{ + enum { NONE, ALIGN4, ALIGN8, FAIL } workaround = NONE; + const gdb_byte *ret; + ptrdiff_t start_offset; + + while (1) + { + ret = decode_frame_entry_1 (gdbarch, unit, start, eh_frame_p, + cie_table, fde_table, entry_type); + if (ret != NULL) + break; + + /* We have corrupt input data of some form. */ + + /* ??? Try, weakly, to work around compiler/assembler/linker bugs + and mismatches wrt padding and alignment of debug sections. */ + /* Note that there is no requirement in the standard for any + alignment at all in the frame unwind sections. Testing for + alignment before trying to interpret data would be incorrect. + + However, GCC traditionally arranged for frame sections to be + sized such that the FDE length and CIE fields happen to be + aligned (in theory, for performance). This, unfortunately, + was done with .align directives, which had the side effect of + forcing the section to be aligned by the linker. + + This becomes a problem when you have some other producer that + creates frame sections that are not as strictly aligned. That + produces a hole in the frame info that gets filled by the + linker with zeros. + + The GCC behaviour is arguably a bug, but it's effectively now + part of the ABI, so we're now stuck with it, at least at the + object file level. A smart linker may decide, in the process + of compressing duplicate CIE information, that it can rewrite + the entire output section without this extra padding. */ + + start_offset = start - unit->dwarf_frame_buffer; + if (workaround < ALIGN4 && (start_offset & 3) != 0) + { + start += 4 - (start_offset & 3); + workaround = ALIGN4; + continue; + } + if (workaround < ALIGN8 && (start_offset & 7) != 0) + { + start += 8 - (start_offset & 7); + workaround = ALIGN8; + continue; + } + + /* Nothing left to try. Arrange to return as if we've consumed + the entire input section. Hopefully we'll get valid info from + the other of .debug_frame/.eh_frame. */ + workaround = FAIL; + ret = unit->dwarf_frame_buffer + unit->dwarf_frame_size; + break; + } + + switch (workaround) + { + case NONE: + break; + + case ALIGN4: + complaint (_("\ +Corrupt data in %s:%s; align 4 workaround apparently succeeded"), + bfd_get_filename (unit->dwarf_frame_section->owner), + bfd_section_name (unit->dwarf_frame_section)); + break; + + case ALIGN8: + complaint (_("\ +Corrupt data in %s:%s; align 8 workaround apparently succeeded"), + bfd_get_filename (unit->dwarf_frame_section->owner), + bfd_section_name (unit->dwarf_frame_section)); + break; + + default: + complaint (_("Corrupt data in %s:%s"), + bfd_get_filename (unit->dwarf_frame_section->owner), + bfd_section_name (unit->dwarf_frame_section)); + break; + } + + return ret; +} + +static bool +fde_is_less_than (const dwarf2_fde *aa, const dwarf2_fde *bb) +{ + if (aa->initial_location == bb->initial_location) + { + if (aa->address_range != bb->address_range + && aa->eh_frame_p == 0 && bb->eh_frame_p == 0) + /* Linker bug, e.g. gold/10400. + Work around it by keeping stable sort order. */ + return aa < bb; + else + /* Put eh_frame entries after debug_frame ones. */ + return aa->eh_frame_p < bb->eh_frame_p; + } + + return aa->initial_location < bb->initial_location; +} + +void +dwarf2_build_frame_info (struct objfile *objfile) +{ + const gdb_byte *frame_ptr; + dwarf2_cie_table cie_table; + dwarf2_fde_table fde_table; + + struct gdbarch *gdbarch = objfile->arch (); + + /* Build a minimal decoding of the DWARF2 compilation unit. */ + std::unique_ptr<comp_unit> unit (new comp_unit (objfile)); + + if (objfile->separate_debug_objfile_backlink == NULL) + { + /* Do not read .eh_frame from separate file as they must be also + present in the main file. */ + dwarf2_get_section_info (objfile, DWARF2_EH_FRAME, + &unit->dwarf_frame_section, + &unit->dwarf_frame_buffer, + &unit->dwarf_frame_size); + if (unit->dwarf_frame_size) + { + asection *got, *txt; + + /* FIXME: kettenis/20030602: This is the DW_EH_PE_datarel base + that is used for the i386/amd64 target, which currently is + the only target in GCC that supports/uses the + DW_EH_PE_datarel encoding. */ + got = bfd_get_section_by_name (unit->abfd, ".got"); + if (got) + unit->dbase = got->vma; + + /* GCC emits the DW_EH_PE_textrel encoding type on sh and ia64 + so far. */ + txt = bfd_get_section_by_name (unit->abfd, ".text"); + if (txt) + unit->tbase = txt->vma; + + try + { + frame_ptr = unit->dwarf_frame_buffer; + while (frame_ptr < unit->dwarf_frame_buffer + unit->dwarf_frame_size) + frame_ptr = decode_frame_entry (gdbarch, unit.get (), + frame_ptr, 1, + cie_table, &fde_table, + EH_CIE_OR_FDE_TYPE_ID); + } + + catch (const gdb_exception_error &e) + { + warning (_("skipping .eh_frame info of %s: %s"), + objfile_name (objfile), e.what ()); + + fde_table.clear (); + /* The cie_table is discarded below. */ + } + + cie_table.clear (); + } + } + + dwarf2_get_section_info (objfile, DWARF2_DEBUG_FRAME, + &unit->dwarf_frame_section, + &unit->dwarf_frame_buffer, + &unit->dwarf_frame_size); + if (unit->dwarf_frame_size) + { + size_t num_old_fde_entries = fde_table.size (); + + try + { + frame_ptr = unit->dwarf_frame_buffer; + while (frame_ptr < unit->dwarf_frame_buffer + unit->dwarf_frame_size) + frame_ptr = decode_frame_entry (gdbarch, unit.get (), frame_ptr, 0, + cie_table, &fde_table, + EH_CIE_OR_FDE_TYPE_ID); + } + catch (const gdb_exception_error &e) + { + warning (_("skipping .debug_frame info of %s: %s"), + objfile_name (objfile), e.what ()); + + fde_table.resize (num_old_fde_entries); + } + } + + struct dwarf2_fde *fde_prev = NULL; + struct dwarf2_fde *first_non_zero_fde = NULL; + + /* Prepare FDE table for lookups. */ + std::sort (fde_table.begin (), fde_table.end (), fde_is_less_than); + + /* Check for leftovers from --gc-sections. The GNU linker sets + the relevant symbols to zero, but doesn't zero the FDE *end* + ranges because there's no relocation there. It's (offset, + length), not (start, end). On targets where address zero is + just another valid address this can be a problem, since the + FDEs appear to be non-empty in the output --- we could pick + out the wrong FDE. To work around this, when overlaps are + detected, we prefer FDEs that do not start at zero. + + Start by finding the first FDE with non-zero start. Below + we'll discard all FDEs that start at zero and overlap this + one. */ + for (struct dwarf2_fde *fde : fde_table) + { + if (fde->initial_location != 0) + { + first_non_zero_fde = fde; + break; + } + } + + /* Since we'll be doing bsearch, squeeze out identical (except + for eh_frame_p) fde entries so bsearch result is predictable. + Also discard leftovers from --gc-sections. */ + for (struct dwarf2_fde *fde : fde_table) + { + if (fde->initial_location == 0 + && first_non_zero_fde != NULL + && (first_non_zero_fde->initial_location + < fde->initial_location + fde->address_range)) + continue; + + if (fde_prev != NULL + && fde_prev->initial_location == fde->initial_location) + continue; + + unit->fde_table.push_back (fde); + fde_prev = fde; + } + unit->fde_table.shrink_to_fit (); + + set_comp_unit (objfile, unit.release ()); +} + +/* Handle 'maintenance show dwarf unwinders'. */ + +static void +show_dwarf_unwinders_enabled_p (struct ui_file *file, int from_tty, + struct cmd_list_element *c, + const char *value) +{ + fprintf_filtered (file, + _("The DWARF stack unwinders are currently %s.\n"), + value); +} + +void _initialize_dwarf2_frame (); +void +_initialize_dwarf2_frame () +{ + dwarf2_frame_data = gdbarch_data_register_pre_init (dwarf2_frame_init); + + add_setshow_boolean_cmd ("unwinders", class_obscure, + &dwarf2_frame_unwinders_enabled_p , _("\ +Set whether the DWARF stack frame unwinders are used."), _("\ +Show whether the DWARF stack frame unwinders are used."), _("\ +When enabled the DWARF stack frame unwinders can be used for architectures\n\ +that support the DWARF unwinders. Enabling the DWARF unwinders for an\n\ +architecture that doesn't support them will have no effect."), + NULL, + show_dwarf_unwinders_enabled_p, + &set_dwarf_cmdlist, + &show_dwarf_cmdlist); + +#if GDB_SELF_TEST + selftests::register_test_foreach_arch ("execute_cfa_program", + selftests::execute_cfa_program_test); +#endif +} diff -Nru gdb-9.1/gdb/dwarf2/frame.h gdb-10.2/gdb/dwarf2/frame.h --- gdb-9.1/gdb/dwarf2/frame.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/dwarf2/frame.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,265 @@ +/* Frame unwinder for frames with DWARF Call Frame Information. + + Copyright (C) 2003-2021 Free Software Foundation, Inc. + + Contributed by Mark Kettenis. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef DWARF2_FRAME_H +#define DWARF2_FRAME_H 1 + +struct gdbarch; +struct frame_info; +struct dwarf2_per_cu_data; +struct agent_expr; +struct axs_value; + +/* Register rule. */ + +enum dwarf2_frame_reg_rule +{ + /* Make certain that 0 maps onto the correct enum value; the + corresponding structure is being initialized using memset zero. + This indicates that CFI didn't provide any information at all + about a register, leaving how to obtain its value totally + unspecified. */ + DWARF2_FRAME_REG_UNSPECIFIED = 0, + + /* The term "undefined" comes from the DWARF2 CFI spec which this + code is modeling; it indicates that the register's value is + "undefined". GCC uses the less formal term "unsaved". Its + definition is a combination of REG_UNDEFINED and REG_UNSPECIFIED. + The failure to differentiate the two helps explain a few problems + with the CFI generated by GCC. */ + DWARF2_FRAME_REG_UNDEFINED, + DWARF2_FRAME_REG_SAVED_OFFSET, + DWARF2_FRAME_REG_SAVED_REG, + DWARF2_FRAME_REG_SAVED_EXP, + DWARF2_FRAME_REG_SAME_VALUE, + + /* These are defined in Dwarf3. */ + DWARF2_FRAME_REG_SAVED_VAL_OFFSET, + DWARF2_FRAME_REG_SAVED_VAL_EXP, + + /* These aren't defined by the DWARF2 CFI specification, but are + used internally by GDB. */ + DWARF2_FRAME_REG_FN, /* Call a registered function. */ + DWARF2_FRAME_REG_RA, /* Return Address. */ + DWARF2_FRAME_REG_RA_OFFSET, /* Return Address with offset. */ + DWARF2_FRAME_REG_CFA, /* Call Frame Address. */ + DWARF2_FRAME_REG_CFA_OFFSET /* Call Frame Address with offset. */ +}; + +/* Register state. */ + +struct dwarf2_frame_state_reg +{ + /* Each register save state can be described in terms of a CFA slot, + another register, or a location expression. */ + union { + LONGEST offset; + ULONGEST reg; + struct + { + const gdb_byte *start; + ULONGEST len; + } exp; + struct value *(*fn) (struct frame_info *this_frame, void **this_cache, + int regnum); + } loc; + enum dwarf2_frame_reg_rule how; +}; + +enum cfa_how_kind +{ + CFA_UNSET, + CFA_REG_OFFSET, + CFA_EXP +}; + +struct dwarf2_frame_state_reg_info +{ + dwarf2_frame_state_reg_info () = default; + ~dwarf2_frame_state_reg_info () + { + delete prev; + } + + /* Copy constructor. */ + dwarf2_frame_state_reg_info (const dwarf2_frame_state_reg_info &src) + : reg (src.reg), cfa_offset (src.cfa_offset), + cfa_reg (src.cfa_reg), cfa_how (src.cfa_how), cfa_exp (src.cfa_exp), + prev (src.prev) + { + } + + /* Assignment operator for both move-assignment and copy-assignment. */ + dwarf2_frame_state_reg_info& + operator= (dwarf2_frame_state_reg_info rhs) + { + swap (*this, rhs); + return *this; + } + + /* Move constructor. */ + dwarf2_frame_state_reg_info (dwarf2_frame_state_reg_info &&rhs) noexcept + : reg (std::move (rhs.reg)), cfa_offset (rhs.cfa_offset), + cfa_reg (rhs.cfa_reg), cfa_how (rhs.cfa_how), cfa_exp (rhs.cfa_exp), + prev (rhs.prev) + { + rhs.prev = nullptr; + } + + /* If necessary, enlarge the register set to hold NUM_REGS_REQUESTED + registers. */ + void alloc_regs (int num_regs_requested) + { + gdb_assert (num_regs_requested > 0); + + if (num_regs_requested <= reg.size ()) + return; + + reg.resize (num_regs_requested); + } + + std::vector<struct dwarf2_frame_state_reg> reg; + + LONGEST cfa_offset = 0; + ULONGEST cfa_reg = 0; + enum cfa_how_kind cfa_how = CFA_UNSET; + const gdb_byte *cfa_exp = NULL; + + /* Used to implement DW_CFA_remember_state. */ + struct dwarf2_frame_state_reg_info *prev = NULL; + +private: + friend void swap (dwarf2_frame_state_reg_info& lhs, + dwarf2_frame_state_reg_info& rhs) + { + using std::swap; + + swap (lhs.reg, rhs.reg); + swap (lhs.cfa_offset, rhs.cfa_offset); + swap (lhs.cfa_reg, rhs.cfa_reg); + swap (lhs.cfa_how, rhs.cfa_how); + swap (lhs.cfa_exp, rhs.cfa_exp); + swap (lhs.prev, rhs.prev); + } +}; + +struct dwarf2_cie; + +/* Structure describing a frame state. */ + +struct dwarf2_frame_state +{ + dwarf2_frame_state (CORE_ADDR pc, struct dwarf2_cie *cie); + + /* Each register save state can be described in terms of a CFA slot, + another register, or a location expression. */ + struct dwarf2_frame_state_reg_info regs {}; + + /* The PC described by the current frame state. */ + CORE_ADDR pc; + + /* Initial register set from the CIE. + Used to implement DW_CFA_restore. */ + struct dwarf2_frame_state_reg_info initial {}; + + /* The information we care about from the CIE. */ + const LONGEST data_align; + const ULONGEST code_align; + const ULONGEST retaddr_column; + + /* Flags for known producer quirks. */ + + /* The ARM compilers, in DWARF2 mode, assume that DW_CFA_def_cfa + and DW_CFA_def_cfa_offset takes a factored offset. */ + bool armcc_cfa_offsets_sf = false; + + /* The ARM compilers, in DWARF2 or DWARF3 mode, may assume that + the CFA is defined as REG - OFFSET rather than REG + OFFSET. */ + bool armcc_cfa_offsets_reversed = false; +}; + +/* When this is true the DWARF frame unwinders can be used if they are + registered with the gdbarch. Not all architectures can or do use the + DWARF unwinders. Setting this to true on a target that does not + otherwise support the DWARF unwinders has no effect. */ +extern bool dwarf2_frame_unwinders_enabled_p; + +/* Set the architecture-specific register state initialization + function for GDBARCH to INIT_REG. */ + +extern void dwarf2_frame_set_init_reg (struct gdbarch *gdbarch, + void (*init_reg) (struct gdbarch *, int, + struct dwarf2_frame_state_reg *, + struct frame_info *)); + +/* Set the architecture-specific signal trampoline recognition + function for GDBARCH to SIGNAL_FRAME_P. */ + +extern void + dwarf2_frame_set_signal_frame_p (struct gdbarch *gdbarch, + int (*signal_frame_p) (struct gdbarch *, + struct frame_info *)); + +/* Set the architecture-specific adjustment of .eh_frame and .debug_frame + register numbers. */ + +extern void + dwarf2_frame_set_adjust_regnum (struct gdbarch *gdbarch, + int (*adjust_regnum) (struct gdbarch *, + int, int)); + +/* Append the DWARF-2 frame unwinders to GDBARCH's list. */ + +void dwarf2_append_unwinders (struct gdbarch *gdbarch); + +/* Return the frame base methods for the function that contains PC, or + NULL if it can't be handled by the DWARF CFI frame unwinder. */ + +extern const struct frame_base * + dwarf2_frame_base_sniffer (struct frame_info *this_frame); + +/* Compute the DWARF CFA for a frame. */ + +CORE_ADDR dwarf2_frame_cfa (struct frame_info *this_frame); + +/* Find the CFA information for PC. + + Return 1 if a register is used for the CFA, or 0 if another + expression is used. Throw an exception on error. + + GDBARCH is the architecture to use. + DATA is the per-CU data. + + REGNUM_OUT is an out parameter that is set to the register number. + OFFSET_OUT is the offset to use from this register. + These are only filled in when 1 is returned. + + TEXT_OFFSET_OUT, CFA_START_OUT, and CFA_END_OUT describe the CFA + in other cases. These are only used when 0 is returned. */ + +extern int dwarf2_fetch_cfa_info (struct gdbarch *gdbarch, CORE_ADDR pc, + struct dwarf2_per_cu_data *data, + int *regnum_out, LONGEST *offset_out, + CORE_ADDR *text_offset_out, + const gdb_byte **cfa_start_out, + const gdb_byte **cfa_end_out); + +#endif /* dwarf2-frame.h */ diff -Nru gdb-9.1/gdb/dwarf2/frame-tailcall.c gdb-10.2/gdb/dwarf2/frame-tailcall.c --- gdb-9.1/gdb/dwarf2/frame-tailcall.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/dwarf2/frame-tailcall.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,487 @@ +/* Virtual tail call frames unwinder for GDB. + + Copyright (C) 2010-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "defs.h" +#include "frame.h" +#include "dwarf2/frame-tailcall.h" +#include "dwarf2/loc.h" +#include "frame-unwind.h" +#include "block.h" +#include "hashtab.h" +#include "gdbtypes.h" +#include "regcache.h" +#include "value.h" +#include "dwarf2/frame.h" +#include "gdbarch.h" + +/* Contains struct tailcall_cache indexed by next_bottom_frame. */ +static htab_t cache_htab; + +/* Associate structure of the unwinder to call_site_chain. Lifetime of this + structure is maintained by REFC decremented by dealloc_cache, all of them + get deleted during reinit_frame_cache. */ +struct tailcall_cache +{ + /* It must be the first one of this struct. It is the furthest callee. */ + struct frame_info *next_bottom_frame; + + /* Reference count. The whole chain of virtual tail call frames shares one + tailcall_cache. */ + int refc; + + /* Associated found virtual tail call frames chain, it is never NULL. */ + struct call_site_chain *chain; + + /* Cached pretended_chain_levels result. */ + int chain_levels; + + /* Unwound PC from the top (caller) frame, as it is not contained + in CHAIN. */ + CORE_ADDR prev_pc; + + /* Compensate SP in caller frames appropriately. prev_sp and + entry_cfa_sp_offset are valid only if PREV_SP_P. PREV_SP is SP at the top + (caller) frame. ENTRY_CFA_SP_OFFSET is shift of SP in tail call frames + against next_bottom_frame SP. */ + unsigned prev_sp_p : 1; + CORE_ADDR prev_sp; + LONGEST entry_cfa_sp_offset; +}; + +/* hash_f for htab_create_alloc of cache_htab. */ + +static hashval_t +cache_hash (const void *arg) +{ + const struct tailcall_cache *cache = (const struct tailcall_cache *) arg; + + return htab_hash_pointer (cache->next_bottom_frame); +} + +/* eq_f for htab_create_alloc of cache_htab. */ + +static int +cache_eq (const void *arg1, const void *arg2) +{ + const struct tailcall_cache *cache1 = (const struct tailcall_cache *) arg1; + const struct tailcall_cache *cache2 = (const struct tailcall_cache *) arg2; + + return cache1->next_bottom_frame == cache2->next_bottom_frame; +} + +/* Create new tailcall_cache for NEXT_BOTTOM_FRAME, NEXT_BOTTOM_FRAME must not + yet have been indexed by cache_htab. Caller holds one reference of the new + tailcall_cache. */ + +static struct tailcall_cache * +cache_new_ref1 (struct frame_info *next_bottom_frame) +{ + struct tailcall_cache *cache = XCNEW (struct tailcall_cache); + void **slot; + + cache->next_bottom_frame = next_bottom_frame; + cache->refc = 1; + + slot = htab_find_slot (cache_htab, cache, INSERT); + gdb_assert (*slot == NULL); + *slot = cache; + + return cache; +} + +/* Create new reference to CACHE. */ + +static void +cache_ref (struct tailcall_cache *cache) +{ + gdb_assert (cache->refc > 0); + + cache->refc++; +} + +/* Drop reference to CACHE, possibly fully freeing it and unregistering it from + cache_htab. */ + +static void +cache_unref (struct tailcall_cache *cache) +{ + gdb_assert (cache->refc > 0); + + if (!--cache->refc) + { + gdb_assert (htab_find_slot (cache_htab, cache, NO_INSERT) != NULL); + htab_remove_elt (cache_htab, cache); + + xfree (cache->chain); + xfree (cache); + } +} + +/* Return 1 if FI is a non-bottom (not the callee) tail call frame. Otherwise + return 0. */ + +static int +frame_is_tailcall (struct frame_info *fi) +{ + return frame_unwinder_is (fi, &dwarf2_tailcall_frame_unwind); +} + +/* Try to find tailcall_cache in cache_htab if FI is a part of its virtual tail + call chain. Otherwise return NULL. No new reference is created. */ + +static struct tailcall_cache * +cache_find (struct frame_info *fi) +{ + struct tailcall_cache *cache; + void **slot; + + while (frame_is_tailcall (fi)) + { + fi = get_next_frame (fi); + gdb_assert (fi != NULL); + } + + slot = htab_find_slot (cache_htab, &fi, NO_INSERT); + if (slot == NULL) + return NULL; + + cache = (struct tailcall_cache *) *slot; + gdb_assert (cache != NULL); + return cache; +} + +/* Number of virtual frames between THIS_FRAME and CACHE->NEXT_BOTTOM_FRAME. + If THIS_FRAME is CACHE-> NEXT_BOTTOM_FRAME return -1. */ + +static int +existing_next_levels (struct frame_info *this_frame, + struct tailcall_cache *cache) +{ + int retval = (frame_relative_level (this_frame) + - frame_relative_level (cache->next_bottom_frame) - 1); + + gdb_assert (retval >= -1); + + return retval; +} + +/* The number of virtual tail call frames in CHAIN. With no virtual tail call + frames the function would return 0 (but CHAIN does not exist in such + case). */ + +static int +pretended_chain_levels (struct call_site_chain *chain) +{ + int chain_levels; + + gdb_assert (chain != NULL); + + if (chain->callers == chain->length && chain->callees == chain->length) + return chain->length; + + chain_levels = chain->callers + chain->callees; + gdb_assert (chain_levels <= chain->length); + + return chain_levels; +} + +/* Implementation of frame_this_id_ftype. THIS_CACHE must be already + initialized with tailcall_cache, THIS_FRAME must be a part of THIS_CACHE. + + Specific virtual tail call frames are tracked by INLINE_DEPTH. */ + +static void +tailcall_frame_this_id (struct frame_info *this_frame, void **this_cache, + struct frame_id *this_id) +{ + struct tailcall_cache *cache = (struct tailcall_cache *) *this_cache; + struct frame_info *next_frame; + + /* Tail call does not make sense for a sentinel frame. */ + next_frame = get_next_frame (this_frame); + gdb_assert (next_frame != NULL); + + *this_id = get_frame_id (next_frame); + (*this_id).code_addr = get_frame_pc (this_frame); + (*this_id).code_addr_p = true; + (*this_id).artificial_depth = (cache->chain_levels + - existing_next_levels (this_frame, cache)); + gdb_assert ((*this_id).artificial_depth > 0); +} + +/* Find PC to be unwound from THIS_FRAME. THIS_FRAME must be a part of + CACHE. */ + +static CORE_ADDR +pretend_pc (struct frame_info *this_frame, struct tailcall_cache *cache) +{ + int next_levels = existing_next_levels (this_frame, cache); + struct call_site_chain *chain = cache->chain; + + gdb_assert (chain != NULL); + + next_levels++; + gdb_assert (next_levels >= 0); + + if (next_levels < chain->callees) + return chain->call_site[chain->length - next_levels - 1]->pc; + next_levels -= chain->callees; + + /* Otherwise CHAIN->CALLEES are already covered by CHAIN->CALLERS. */ + if (chain->callees != chain->length) + { + if (next_levels < chain->callers) + return chain->call_site[chain->callers - next_levels - 1]->pc; + next_levels -= chain->callers; + } + + gdb_assert (next_levels == 0); + return cache->prev_pc; +} + +/* Implementation of frame_prev_register_ftype. If no specific register + override is supplied NULL is returned (this is incompatible with + frame_prev_register_ftype semantics). next_bottom_frame and tail call + frames unwind the NULL case differently. */ + +struct value * +dwarf2_tailcall_prev_register_first (struct frame_info *this_frame, + void **tailcall_cachep, int regnum) +{ + struct gdbarch *this_gdbarch = get_frame_arch (this_frame); + struct tailcall_cache *cache = (struct tailcall_cache *) *tailcall_cachep; + CORE_ADDR addr; + + if (regnum == gdbarch_pc_regnum (this_gdbarch)) + addr = pretend_pc (this_frame, cache); + else if (cache->prev_sp_p && regnum == gdbarch_sp_regnum (this_gdbarch)) + { + int next_levels = existing_next_levels (this_frame, cache); + + if (next_levels == cache->chain_levels - 1) + addr = cache->prev_sp; + else + addr = dwarf2_frame_cfa (this_frame) - cache->entry_cfa_sp_offset; + } + else + return NULL; + + return frame_unwind_got_address (this_frame, regnum, addr); +} + +/* Implementation of frame_prev_register_ftype for tail call frames. Register + set of virtual tail call frames is assumed to be the one of the top (caller) + frame - assume unchanged register value for NULL from + dwarf2_tailcall_prev_register_first. */ + +static struct value * +tailcall_frame_prev_register (struct frame_info *this_frame, + void **this_cache, int regnum) +{ + struct tailcall_cache *cache = (struct tailcall_cache *) *this_cache; + struct value *val; + + gdb_assert (this_frame != cache->next_bottom_frame); + + val = dwarf2_tailcall_prev_register_first (this_frame, this_cache, regnum); + if (val) + return val; + + return frame_unwind_got_register (this_frame, regnum, regnum); +} + +/* Implementation of frame_sniffer_ftype. It will never find a new chain, use + dwarf2_tailcall_sniffer_first for the bottom (callee) frame. It will find + all the predecessing virtual tail call frames, it will return false when + there exist no more tail call frames in this chain. */ + +static int +tailcall_frame_sniffer (const struct frame_unwind *self, + struct frame_info *this_frame, void **this_cache) +{ + struct frame_info *next_frame; + int next_levels; + struct tailcall_cache *cache; + + if (!dwarf2_frame_unwinders_enabled_p) + return 0; + + /* Inner tail call element does not make sense for a sentinel frame. */ + next_frame = get_next_frame (this_frame); + if (next_frame == NULL) + return 0; + + cache = cache_find (next_frame); + if (cache == NULL) + return 0; + + cache_ref (cache); + + next_levels = existing_next_levels (this_frame, cache); + + /* NEXT_LEVELS is -1 only in dwarf2_tailcall_sniffer_first. */ + gdb_assert (next_levels >= 0); + gdb_assert (next_levels <= cache->chain_levels); + + if (next_levels == cache->chain_levels) + { + cache_unref (cache); + return 0; + } + + *this_cache = cache; + return 1; +} + +/* The initial "sniffer" whether THIS_FRAME is a bottom (callee) frame of a new + chain to create. Keep TAILCALL_CACHEP NULL if it did not find any chain, + initialize it otherwise. No tail call chain is created if there are no + unambiguous virtual tail call frames to report. + + ENTRY_CFA_SP_OFFSETP is NULL if no special SP handling is possible, + otherwise *ENTRY_CFA_SP_OFFSETP is the number of bytes to subtract from tail + call frames frame base to get the SP value there - to simulate return + address pushed on the stack. */ + +void +dwarf2_tailcall_sniffer_first (struct frame_info *this_frame, + void **tailcall_cachep, + const LONGEST *entry_cfa_sp_offsetp) +{ + CORE_ADDR prev_pc = 0, prev_sp = 0; /* GCC warning. */ + int prev_sp_p = 0; + CORE_ADDR this_pc; + struct gdbarch *prev_gdbarch; + gdb::unique_xmalloc_ptr<call_site_chain> chain; + struct tailcall_cache *cache; + + gdb_assert (*tailcall_cachep == NULL); + + /* PC may be after the function if THIS_FRAME calls noreturn function, + get_frame_address_in_block will decrease it by 1 in such case. */ + this_pc = get_frame_address_in_block (this_frame); + + try + { + int sp_regnum; + + prev_gdbarch = frame_unwind_arch (this_frame); + + /* Simulate frame_unwind_pc without setting this_frame->prev_pc.p. */ + prev_pc = gdbarch_unwind_pc (prev_gdbarch, this_frame); + + /* call_site_find_chain can throw an exception. */ + chain = call_site_find_chain (prev_gdbarch, prev_pc, this_pc); + + if (entry_cfa_sp_offsetp != NULL) + { + sp_regnum = gdbarch_sp_regnum (prev_gdbarch); + if (sp_regnum != -1) + { + prev_sp = frame_unwind_register_unsigned (this_frame, sp_regnum); + prev_sp_p = 1; + } + } + } + catch (const gdb_exception_error &except) + { + if (entry_values_debug) + exception_print (gdb_stdout, except); + + switch (except.error) + { + case NO_ENTRY_VALUE_ERROR: + /* Thrown by call_site_find_chain. */ + case MEMORY_ERROR: + case OPTIMIZED_OUT_ERROR: + case NOT_AVAILABLE_ERROR: + /* These can normally happen when we try to access an + optimized out or unavailable register, either in a + physical register or spilled to memory. */ + return; + } + + /* Let unexpected errors propagate. */ + throw; + } + + /* Ambiguous unwind or unambiguous unwind verified as matching. */ + if (chain == NULL || chain->length == 0) + return; + + cache = cache_new_ref1 (this_frame); + *tailcall_cachep = cache; + cache->chain = chain.release (); + cache->prev_pc = prev_pc; + cache->chain_levels = pretended_chain_levels (cache->chain); + cache->prev_sp_p = prev_sp_p; + if (cache->prev_sp_p) + { + cache->prev_sp = prev_sp; + cache->entry_cfa_sp_offset = *entry_cfa_sp_offsetp; + } + gdb_assert (cache->chain_levels > 0); +} + +/* Implementation of frame_dealloc_cache_ftype. It can be called even for the + bottom chain frame from dwarf2_frame_dealloc_cache which is not a real + TAILCALL_FRAME. */ + +static void +tailcall_frame_dealloc_cache (struct frame_info *self, void *this_cache) +{ + struct tailcall_cache *cache = (struct tailcall_cache *) this_cache; + + cache_unref (cache); +} + +/* Implementation of frame_prev_arch_ftype. We assume all the virtual tail + call frames have gdbarch of the bottom (callee) frame. */ + +static struct gdbarch * +tailcall_frame_prev_arch (struct frame_info *this_frame, + void **this_prologue_cache) +{ + struct tailcall_cache *cache = (struct tailcall_cache *) *this_prologue_cache; + + return get_frame_arch (cache->next_bottom_frame); +} + +/* Virtual tail call frame unwinder if dwarf2_tailcall_sniffer_first finds + a chain to create. */ + +const struct frame_unwind dwarf2_tailcall_frame_unwind = +{ + TAILCALL_FRAME, + default_frame_unwind_stop_reason, + tailcall_frame_this_id, + tailcall_frame_prev_register, + NULL, + tailcall_frame_sniffer, + tailcall_frame_dealloc_cache, + tailcall_frame_prev_arch +}; + +void _initialize_tailcall_frame (); +void +_initialize_tailcall_frame () +{ + cache_htab = htab_create_alloc (50, cache_hash, cache_eq, NULL, xcalloc, + xfree); +} diff -Nru gdb-9.1/gdb/dwarf2/frame-tailcall.h gdb-10.2/gdb/dwarf2/frame-tailcall.h --- gdb-9.1/gdb/dwarf2/frame-tailcall.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/dwarf2/frame-tailcall.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,39 @@ +/* Definitions for virtual tail call frames unwinder for GDB. + + Copyright (C) 2010-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef DWARF2_FRAME_TAILCALL_H +#define DWARF2_FRAME_TAILCALL_H 1 + +struct frame_info; +struct frame_unwind; + +/* The tail call frame unwinder. */ + +extern void + dwarf2_tailcall_sniffer_first (struct frame_info *this_frame, + void **tailcall_cachep, + const LONGEST *entry_cfa_sp_offsetp); + +extern struct value * + dwarf2_tailcall_prev_register_first (struct frame_info *this_frame, + void **tailcall_cachep, int regnum); + +extern const struct frame_unwind dwarf2_tailcall_frame_unwind; + +#endif /* !DWARF2_FRAME_TAILCALL_H */ diff -Nru gdb-9.1/gdb/dwarf2/index-cache.c gdb-10.2/gdb/dwarf2/index-cache.c --- gdb-9.1/gdb/dwarf2/index-cache.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/dwarf2/index-cache.c 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,376 @@ +/* Caching of GDB/DWARF index files. + + Copyright (C) 1994-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "defs.h" +#include "dwarf2/index-cache.h" + +#include "build-id.h" +#include "cli/cli-cmds.h" +#include "command.h" +#include "gdbsupport/scoped_mmap.h" +#include "gdbsupport/pathstuff.h" +#include "dwarf2/index-write.h" +#include "dwarf2/read.h" +#include "dwarf2/dwz.h" +#include "objfiles.h" +#include "gdbsupport/selftest.h" +#include <string> +#include <stdlib.h> + +/* When set to true, show debug messages about the index cache. */ +static bool debug_index_cache = false; + +/* The index cache directory, used for "set/show index-cache directory". */ +static char *index_cache_directory = NULL; + +/* See dwarf-index.cache.h. */ +index_cache global_index_cache; + +/* set/show index-cache commands. */ +static cmd_list_element *set_index_cache_prefix_list; +static cmd_list_element *show_index_cache_prefix_list; + +/* Default destructor of index_cache_resource. */ +index_cache_resource::~index_cache_resource () = default; + +/* See dwarf-index-cache.h. */ + +void +index_cache::set_directory (std::string dir) +{ + gdb_assert (!dir.empty ()); + + m_dir = std::move (dir); + + if (debug_index_cache) + printf_unfiltered ("index cache: now using directory %s\n", m_dir.c_str ()); +} + +/* See dwarf-index-cache.h. */ + +void +index_cache::enable () +{ + if (debug_index_cache) + printf_unfiltered ("index cache: enabling (%s)\n", m_dir.c_str ()); + + m_enabled = true; +} + +/* See dwarf-index-cache.h. */ + +void +index_cache::disable () +{ + if (debug_index_cache) + printf_unfiltered ("index cache: disabling\n"); + + m_enabled = false; +} + +/* See dwarf-index-cache.h. */ + +void +index_cache::store (dwarf2_per_objfile *per_objfile) +{ + objfile *obj = per_objfile->objfile; + + if (!enabled ()) + return; + + /* Get build id of objfile. */ + const bfd_build_id *build_id = build_id_bfd_get (obj->obfd); + if (build_id == nullptr) + { + if (debug_index_cache) + printf_unfiltered ("index cache: objfile %s has no build id\n", + objfile_name (obj)); + return; + } + + std::string build_id_str = build_id_to_string (build_id); + + /* Get build id of dwz file, if present. */ + gdb::optional<std::string> dwz_build_id_str; + const dwz_file *dwz = dwarf2_get_dwz_file (per_objfile->per_bfd); + const char *dwz_build_id_ptr = NULL; + + if (dwz != nullptr) + { + const bfd_build_id *dwz_build_id = build_id_bfd_get (dwz->dwz_bfd.get ()); + + if (dwz_build_id == nullptr) + { + if (debug_index_cache) + printf_unfiltered ("index cache: dwz objfile %s has no build id\n", + dwz->filename ()); + return; + } + + dwz_build_id_str = build_id_to_string (dwz_build_id); + dwz_build_id_ptr = dwz_build_id_str->c_str (); + } + + if (m_dir.empty ()) + { + warning (_("The index cache directory name is empty, skipping store.")); + return; + } + + try + { + /* Try to create the containing directory. */ + if (!mkdir_recursive (m_dir.c_str ())) + { + warning (_("index cache: could not make cache directory: %s"), + safe_strerror (errno)); + return; + } + + if (debug_index_cache) + printf_unfiltered ("index cache: writing index cache for objfile %s\n", + objfile_name (obj)); + + /* Write the index itself to the directory, using the build id as the + filename. */ + write_psymtabs_to_index (per_objfile, m_dir.c_str (), + build_id_str.c_str (), dwz_build_id_ptr, + dw_index_kind::GDB_INDEX); + } + catch (const gdb_exception_error &except) + { + if (debug_index_cache) + printf_unfiltered ("index cache: couldn't store index cache for objfile " + "%s: %s", objfile_name (obj), except.what ()); + } +} + +#if HAVE_SYS_MMAN_H + +/* Hold the resources for an mmapped index file. */ + +struct index_cache_resource_mmap final : public index_cache_resource +{ + /* Try to mmap FILENAME. Throw an exception on failure, including if the + file doesn't exist. */ + index_cache_resource_mmap (const char *filename) + : mapping (mmap_file (filename)) + {} + + scoped_mmap mapping; +}; + +/* See dwarf-index-cache.h. */ + +gdb::array_view<const gdb_byte> +index_cache::lookup_gdb_index (const bfd_build_id *build_id, + std::unique_ptr<index_cache_resource> *resource) +{ + if (!enabled ()) + return {}; + + if (m_dir.empty ()) + { + warning (_("The index cache directory name is empty, skipping cache " + "lookup.")); + return {}; + } + + /* Compute where we would expect a gdb index file for this build id to be. */ + std::string filename = make_index_filename (build_id, INDEX4_SUFFIX); + + try + { + if (debug_index_cache) + printf_unfiltered ("index cache: trying to read %s\n", + filename.c_str ()); + + /* Try to map that file. */ + index_cache_resource_mmap *mmap_resource + = new index_cache_resource_mmap (filename.c_str ()); + + /* Yay, it worked! Hand the resource to the caller. */ + resource->reset (mmap_resource); + + return gdb::array_view<const gdb_byte> + ((const gdb_byte *) mmap_resource->mapping.get (), + mmap_resource->mapping.size ()); + } + catch (const gdb_exception_error &except) + { + if (debug_index_cache) + printf_unfiltered ("index cache: couldn't read %s: %s\n", + filename.c_str (), except.what ()); + } + + return {}; +} + +#else /* !HAVE_SYS_MMAN_H */ + +/* See dwarf-index-cache.h. This is a no-op on unsupported systems. */ + +gdb::array_view<const gdb_byte> +index_cache::lookup_gdb_index (const bfd_build_id *build_id, + std::unique_ptr<index_cache_resource> *resource) +{ + return {}; +} + +#endif + +/* See dwarf-index-cache.h. */ + +std::string +index_cache::make_index_filename (const bfd_build_id *build_id, + const char *suffix) const +{ + std::string build_id_str = build_id_to_string (build_id); + + return m_dir + SLASH_STRING + build_id_str + suffix; +} + +/* True when we are executing "show index-cache". This is used to improve the + printout a little bit. */ +static bool in_show_index_cache_command = false; + +/* "show index-cache" handler. */ + +static void +show_index_cache_command (const char *arg, int from_tty) +{ + /* Note that we are executing "show index-cache". */ + auto restore_flag = make_scoped_restore (&in_show_index_cache_command, true); + + /* Call all "show index-cache" subcommands. */ + cmd_show_list (show_index_cache_prefix_list, from_tty); + + printf_unfiltered ("\n"); + printf_unfiltered + (_("The index cache is currently %s.\n"), + global_index_cache.enabled () ? _("enabled") : _("disabled")); +} + +/* "set index-cache on" handler. */ + +static void +set_index_cache_on_command (const char *arg, int from_tty) +{ + global_index_cache.enable (); +} + +/* "set index-cache off" handler. */ + +static void +set_index_cache_off_command (const char *arg, int from_tty) +{ + global_index_cache.disable (); +} + +/* "set index-cache directory" handler. */ + +static void +set_index_cache_directory_command (const char *arg, int from_tty, + cmd_list_element *element) +{ + /* Make sure the index cache directory is absolute and tilde-expanded. */ + gdb::unique_xmalloc_ptr<char> abs (gdb_abspath (index_cache_directory)); + xfree (index_cache_directory); + index_cache_directory = abs.release (); + global_index_cache.set_directory (index_cache_directory); +} + +/* "show index-cache stats" handler. */ + +static void +show_index_cache_stats_command (const char *arg, int from_tty) +{ + const char *indent = ""; + + /* If this command is invoked through "show index-cache", make the display a + bit nicer. */ + if (in_show_index_cache_command) + { + indent = " "; + printf_unfiltered ("\n"); + } + + printf_unfiltered (_("%s Cache hits (this session): %u\n"), + indent, global_index_cache.n_hits ()); + printf_unfiltered (_("%sCache misses (this session): %u\n"), + indent, global_index_cache.n_misses ()); +} + +void _initialize_index_cache (); +void +_initialize_index_cache () +{ + /* Set the default index cache directory. */ + std::string cache_dir = get_standard_cache_dir (); + if (!cache_dir.empty ()) + { + index_cache_directory = xstrdup (cache_dir.c_str ()); + global_index_cache.set_directory (std::move (cache_dir)); + } + else + warning (_("Couldn't determine a path for the index cache directory.")); + + /* set index-cache */ + add_basic_prefix_cmd ("index-cache", class_files, + _("Set index-cache options."), + &set_index_cache_prefix_list, + "set index-cache ", false, &setlist); + + /* show index-cache */ + add_prefix_cmd ("index-cache", class_files, show_index_cache_command, + _("Show index-cache options."), &show_index_cache_prefix_list, + "show index-cache ", false, &showlist); + + /* set index-cache on */ + add_cmd ("on", class_files, set_index_cache_on_command, + _("Enable the index cache."), &set_index_cache_prefix_list); + + /* set index-cache off */ + add_cmd ("off", class_files, set_index_cache_off_command, + _("Disable the index cache."), &set_index_cache_prefix_list); + + /* set index-cache directory */ + add_setshow_filename_cmd ("directory", class_files, &index_cache_directory, + _("Set the directory of the index cache."), + _("Show the directory of the index cache."), + NULL, + set_index_cache_directory_command, NULL, + &set_index_cache_prefix_list, + &show_index_cache_prefix_list); + + /* show index-cache stats */ + add_cmd ("stats", class_files, show_index_cache_stats_command, + _("Show some stats about the index cache."), + &show_index_cache_prefix_list); + + /* set debug index-cache */ + add_setshow_boolean_cmd ("index-cache", class_maintenance, + &debug_index_cache, + _("Set display of index-cache debug messages."), + _("Show display of index-cache debug messages."), + _("\ +When non-zero, debugging output for the index cache is displayed."), + NULL, NULL, + &setdebuglist, &showdebuglist); +} diff -Nru gdb-9.1/gdb/dwarf2/index-cache.h gdb-10.2/gdb/dwarf2/index-cache.h --- gdb-9.1/gdb/dwarf2/index-cache.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/dwarf2/index-cache.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,112 @@ +/* Caching of GDB/DWARF index files. + + Copyright (C) 2018-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef DWARF_INDEX_CACHE_H +#define DWARF_INDEX_CACHE_H + +#include "dwarf2/index-common.h" +#include "gdbsupport/array-view.h" +#include "symfile.h" + +/* Base of the classes used to hold the resources of the indices loaded from + the cache (e.g. mmapped files). */ + +struct index_cache_resource +{ + virtual ~index_cache_resource () = 0; +}; + +/* Class to manage the access to the DWARF index cache. */ + +class index_cache +{ +public: + /* Change the directory used to save/load index files. */ + void set_directory (std::string dir); + + /* Return true if the usage of the cache is enabled. */ + bool enabled () const + { + return m_enabled; + } + + /* Enable the cache. */ + void enable (); + + /* Disable the cache. */ + void disable (); + + /* Store an index for the specified object file in the cache. */ + void store (dwarf2_per_objfile *per_objfile); + + /* Look for an index file matching BUILD_ID. If found, return the contents + as an array_view and store the underlying resources (allocated memory, + mapped file, etc) in RESOURCE. The returned array_view is valid as long + as RESOURCE is not destroyed. + + If no matching index file is found, return an empty array view. */ + gdb::array_view<const gdb_byte> + lookup_gdb_index (const bfd_build_id *build_id, + std::unique_ptr<index_cache_resource> *resource); + + /* Return the number of cache hits. */ + unsigned int n_hits () const + { return m_n_hits; } + + /* Record a cache hit. */ + void hit () + { + if (enabled ()) + m_n_hits++; + } + + /* Return the number of cache misses. */ + unsigned int n_misses () const + { return m_n_misses; } + + /* Record a cache miss. */ + void miss () + { + if (enabled ()) + m_n_misses++; + } + +private: + + /* Compute the absolute filename where the index of the objfile with build + id BUILD_ID will be stored. SUFFIX is appended at the end of the + filename. */ + std::string make_index_filename (const bfd_build_id *build_id, + const char *suffix) const; + + /* The base directory where we are storing and looking up index files. */ + std::string m_dir; + + /* Whether the cache is enabled. */ + bool m_enabled = false; + + /* Number of cache hits and misses during this GDB session. */ + unsigned int m_n_hits = 0; + unsigned int m_n_misses = 0; +}; + +/* The global instance of the index cache. */ +extern index_cache global_index_cache; + +#endif /* DWARF_INDEX_CACHE_H */ diff -Nru gdb-9.1/gdb/dwarf2/index-common.c gdb-10.2/gdb/dwarf2/index-common.c --- gdb-9.1/gdb/dwarf2/index-common.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/dwarf2/index-common.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,56 @@ +/* Things needed for both reading and writing DWARF indices. + + Copyright (C) 1994-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "defs.h" +#include "dwarf2/index-common.h" + +/* See dwarf-index-common.h. */ + +hashval_t +mapped_index_string_hash (int index_version, const void *p) +{ + const unsigned char *str = (const unsigned char *) p; + hashval_t r = 0; + unsigned char c; + + while ((c = *str++) != 0) + { + if (index_version >= 5) + c = tolower (c); + r = r * 67 + c - 113; + } + + return r; +} + +/* See dwarf-index-common.h. */ + +uint32_t +dwarf5_djb_hash (const char *str_) +{ + const unsigned char *str = (const unsigned char *) str_; + + /* Note: tolower here ignores UTF-8, which isn't fully compliant. + See http://dwarfstd.org/ShowIssue.php?issue=161027.1. */ + + uint32_t hash = 5381; + while (int c = *str++) + hash = hash * 33 + tolower (c); + return hash; +} diff -Nru gdb-9.1/gdb/dwarf2/index-common.h gdb-10.2/gdb/dwarf2/index-common.h --- gdb-9.1/gdb/dwarf2/index-common.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/dwarf2/index-common.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,68 @@ +/* Things needed for both reading and writing DWARF indices. + + Copyright (C) 1994-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef DWARF_INDEX_COMMON_H +#define DWARF_INDEX_COMMON_H + +/* The suffix for an index file. */ +#define INDEX4_SUFFIX ".gdb-index" +#define INDEX5_SUFFIX ".debug_names" +#define DEBUG_STR_SUFFIX ".debug_str" + +/* All offsets in the index are of this type. It must be + architecture-independent. */ +typedef uint32_t offset_type; + +#if WORDS_BIGENDIAN + +/* Convert VALUE between big- and little-endian. */ + +static inline offset_type +byte_swap (offset_type value) +{ + offset_type result; + + result = (value & 0xff) << 24; + result |= (value & 0xff00) << 8; + result |= (value & 0xff0000) >> 8; + result |= (value & 0xff000000) >> 24; + return result; +} + +#define MAYBE_SWAP(V) byte_swap (V) + +#else +#define MAYBE_SWAP(V) static_cast<offset_type> (V) +#endif /* WORDS_BIGENDIAN */ + +/* The hash function for strings in the mapped index. This is the same as + SYMBOL_HASH_NEXT, but we keep a separate copy to maintain control over the + implementation. This is necessary because the hash function is tied to the + format of the mapped index file. The hash values do not have to match with + SYMBOL_HASH_NEXT. + + Use INT_MAX for INDEX_VERSION if you generate the current index format. */ + +hashval_t mapped_index_string_hash (int index_version, const void *p); + +/* Symbol name hashing function as specified by DWARF-5. */ + +uint32_t dwarf5_djb_hash (const char *str_); + +#endif /* DWARF_INDEX_COMMON_H */ diff -Nru gdb-9.1/gdb/dwarf2/index-write.c gdb-10.2/gdb/dwarf2/index-write.c --- gdb-9.1/gdb/dwarf2/index-write.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/dwarf2/index-write.c 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,1827 @@ +/* DWARF index writing support for GDB. + + Copyright (C) 1994-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "defs.h" + +#include "dwarf2/index-write.h" + +#include "addrmap.h" +#include "cli/cli-decode.h" +#include "gdbsupport/byte-vector.h" +#include "gdbsupport/filestuff.h" +#include "gdbsupport/gdb_unlinker.h" +#include "gdbsupport/pathstuff.h" +#include "gdbsupport/scoped_fd.h" +#include "complaints.h" +#include "dwarf2/index-common.h" +#include "dwarf2.h" +#include "dwarf2/read.h" +#include "dwarf2/dwz.h" +#include "gdb/gdb-index.h" +#include "gdbcmd.h" +#include "objfiles.h" +#include "psympriv.h" +#include "ada-lang.h" + +#include <algorithm> +#include <cmath> +#include <forward_list> +#include <set> +#include <unordered_map> +#include <unordered_set> + +/* Ensure only legit values are used. */ +#define DW2_GDB_INDEX_SYMBOL_STATIC_SET_VALUE(cu_index, value) \ + do { \ + gdb_assert ((unsigned int) (value) <= 1); \ + GDB_INDEX_SYMBOL_STATIC_SET_VALUE((cu_index), (value)); \ + } while (0) + +/* Ensure only legit values are used. */ +#define DW2_GDB_INDEX_SYMBOL_KIND_SET_VALUE(cu_index, value) \ + do { \ + gdb_assert ((value) >= GDB_INDEX_SYMBOL_KIND_TYPE \ + && (value) <= GDB_INDEX_SYMBOL_KIND_OTHER); \ + GDB_INDEX_SYMBOL_KIND_SET_VALUE((cu_index), (value)); \ + } while (0) + +/* Ensure we don't use more than the allotted number of bits for the CU. */ +#define DW2_GDB_INDEX_CU_SET_VALUE(cu_index, value) \ + do { \ + gdb_assert (((value) & ~GDB_INDEX_CU_MASK) == 0); \ + GDB_INDEX_CU_SET_VALUE((cu_index), (value)); \ + } while (0) + +/* The "save gdb-index" command. */ + +/* Write SIZE bytes from the buffer pointed to by DATA to FILE, with + error checking. */ + +static void +file_write (FILE *file, const void *data, size_t size) +{ + if (fwrite (data, 1, size, file) != size) + error (_("couldn't data write to file")); +} + +/* Write the contents of VEC to FILE, with error checking. */ + +template<typename Elem, typename Alloc> +static void +file_write (FILE *file, const std::vector<Elem, Alloc> &vec) +{ + if (!vec.empty ()) + file_write (file, vec.data (), vec.size () * sizeof (vec[0])); +} + +/* In-memory buffer to prepare data to be written later to a file. */ +class data_buf +{ +public: + /* Copy DATA to the end of the buffer. */ + template<typename T> + void append_data (const T &data) + { + std::copy (reinterpret_cast<const gdb_byte *> (&data), + reinterpret_cast<const gdb_byte *> (&data + 1), + grow (sizeof (data))); + } + + /* Copy CSTR (a zero-terminated string) to the end of buffer. The + terminating zero is appended too. */ + void append_cstr0 (const char *cstr) + { + const size_t size = strlen (cstr) + 1; + std::copy (cstr, cstr + size, grow (size)); + } + + /* Store INPUT as ULEB128 to the end of buffer. */ + void append_unsigned_leb128 (ULONGEST input) + { + for (;;) + { + gdb_byte output = input & 0x7f; + input >>= 7; + if (input) + output |= 0x80; + append_data (output); + if (input == 0) + break; + } + } + + /* Accept a host-format integer in VAL and append it to the buffer + as a target-format integer which is LEN bytes long. */ + void append_uint (size_t len, bfd_endian byte_order, ULONGEST val) + { + ::store_unsigned_integer (grow (len), len, byte_order, val); + } + + /* Return the size of the buffer. */ + size_t size () const + { + return m_vec.size (); + } + + /* Return true iff the buffer is empty. */ + bool empty () const + { + return m_vec.empty (); + } + + /* Write the buffer to FILE. */ + void file_write (FILE *file) const + { + ::file_write (file, m_vec); + } + +private: + /* Grow SIZE bytes at the end of the buffer. Returns a pointer to + the start of the new block. */ + gdb_byte *grow (size_t size) + { + m_vec.resize (m_vec.size () + size); + return &*(m_vec.end () - size); + } + + gdb::byte_vector m_vec; +}; + +/* An entry in the symbol table. */ +struct symtab_index_entry +{ + /* The name of the symbol. */ + const char *name; + /* The offset of the name in the constant pool. */ + offset_type index_offset; + /* A sorted vector of the indices of all the CUs that hold an object + of this name. */ + std::vector<offset_type> cu_indices; +}; + +/* The symbol table. This is a power-of-2-sized hash table. */ +struct mapped_symtab +{ + mapped_symtab () + { + data.resize (1024); + } + + offset_type n_elements = 0; + std::vector<symtab_index_entry> data; + + /* Temporary storage for Ada names. */ + auto_obstack m_string_obstack; +}; + +/* Find a slot in SYMTAB for the symbol NAME. Returns a reference to + the slot. + + Function is used only during write_hash_table so no index format backward + compatibility is needed. */ + +static symtab_index_entry & +find_slot (struct mapped_symtab *symtab, const char *name) +{ + offset_type index, step, hash = mapped_index_string_hash (INT_MAX, name); + + index = hash & (symtab->data.size () - 1); + step = ((hash * 17) & (symtab->data.size () - 1)) | 1; + + for (;;) + { + if (symtab->data[index].name == NULL + || strcmp (name, symtab->data[index].name) == 0) + return symtab->data[index]; + index = (index + step) & (symtab->data.size () - 1); + } +} + +/* Expand SYMTAB's hash table. */ + +static void +hash_expand (struct mapped_symtab *symtab) +{ + auto old_entries = std::move (symtab->data); + + symtab->data.clear (); + symtab->data.resize (old_entries.size () * 2); + + for (auto &it : old_entries) + if (it.name != NULL) + { + auto &ref = find_slot (symtab, it.name); + ref = std::move (it); + } +} + +/* Add an entry to SYMTAB. NAME is the name of the symbol. + CU_INDEX is the index of the CU in which the symbol appears. + IS_STATIC is one if the symbol is static, otherwise zero (global). */ + +static void +add_index_entry (struct mapped_symtab *symtab, const char *name, + int is_static, gdb_index_symbol_kind kind, + offset_type cu_index) +{ + offset_type cu_index_and_attrs; + + ++symtab->n_elements; + if (4 * symtab->n_elements / 3 >= symtab->data.size ()) + hash_expand (symtab); + + symtab_index_entry &slot = find_slot (symtab, name); + if (slot.name == NULL) + { + slot.name = name; + /* index_offset is set later. */ + } + + cu_index_and_attrs = 0; + DW2_GDB_INDEX_CU_SET_VALUE (cu_index_and_attrs, cu_index); + DW2_GDB_INDEX_SYMBOL_STATIC_SET_VALUE (cu_index_and_attrs, is_static); + DW2_GDB_INDEX_SYMBOL_KIND_SET_VALUE (cu_index_and_attrs, kind); + + /* We don't want to record an index value twice as we want to avoid the + duplication. + We process all global symbols and then all static symbols + (which would allow us to avoid the duplication by only having to check + the last entry pushed), but a symbol could have multiple kinds in one CU. + To keep things simple we don't worry about the duplication here and + sort and uniquify the list after we've processed all symbols. */ + slot.cu_indices.push_back (cu_index_and_attrs); +} + +/* Sort and remove duplicates of all symbols' cu_indices lists. */ + +static void +uniquify_cu_indices (struct mapped_symtab *symtab) +{ + for (auto &entry : symtab->data) + { + if (entry.name != NULL && !entry.cu_indices.empty ()) + { + auto &cu_indices = entry.cu_indices; + std::sort (cu_indices.begin (), cu_indices.end ()); + auto from = std::unique (cu_indices.begin (), cu_indices.end ()); + cu_indices.erase (from, cu_indices.end ()); + } + } +} + +/* A form of 'const char *' suitable for container keys. Only the + pointer is stored. The strings themselves are compared, not the + pointers. */ +class c_str_view +{ +public: + c_str_view (const char *cstr) + : m_cstr (cstr) + {} + + bool operator== (const c_str_view &other) const + { + return strcmp (m_cstr, other.m_cstr) == 0; + } + + /* Return the underlying C string. Note, the returned string is + only a reference with lifetime of this object. */ + const char *c_str () const + { + return m_cstr; + } + +private: + friend class c_str_view_hasher; + const char *const m_cstr; +}; + +/* A std::unordered_map::hasher for c_str_view that uses the right + hash function for strings in a mapped index. */ +class c_str_view_hasher +{ +public: + size_t operator () (const c_str_view &x) const + { + return mapped_index_string_hash (INT_MAX, x.m_cstr); + } +}; + +/* A std::unordered_map::hasher for std::vector<>. */ +template<typename T> +class vector_hasher +{ +public: + size_t operator () (const std::vector<T> &key) const + { + return iterative_hash (key.data (), + sizeof (key.front ()) * key.size (), 0); + } +}; + +/* Write the mapped hash table SYMTAB to the data buffer OUTPUT, with + constant pool entries going into the data buffer CPOOL. */ + +static void +write_hash_table (mapped_symtab *symtab, data_buf &output, data_buf &cpool) +{ + { + /* Elements are sorted vectors of the indices of all the CUs that + hold an object of this name. */ + std::unordered_map<std::vector<offset_type>, offset_type, + vector_hasher<offset_type>> + symbol_hash_table; + + /* We add all the index vectors to the constant pool first, to + ensure alignment is ok. */ + for (symtab_index_entry &entry : symtab->data) + { + if (entry.name == NULL) + continue; + gdb_assert (entry.index_offset == 0); + + /* Finding before inserting is faster than always trying to + insert, because inserting always allocates a node, does the + lookup, and then destroys the new node if another node + already had the same key. C++17 try_emplace will avoid + this. */ + const auto found + = symbol_hash_table.find (entry.cu_indices); + if (found != symbol_hash_table.end ()) + { + entry.index_offset = found->second; + continue; + } + + symbol_hash_table.emplace (entry.cu_indices, cpool.size ()); + entry.index_offset = cpool.size (); + cpool.append_data (MAYBE_SWAP (entry.cu_indices.size ())); + for (const auto index : entry.cu_indices) + cpool.append_data (MAYBE_SWAP (index)); + } + } + + /* Now write out the hash table. */ + std::unordered_map<c_str_view, offset_type, c_str_view_hasher> str_table; + for (const auto &entry : symtab->data) + { + offset_type str_off, vec_off; + + if (entry.name != NULL) + { + const auto insertpair = str_table.emplace (entry.name, cpool.size ()); + if (insertpair.second) + cpool.append_cstr0 (entry.name); + str_off = insertpair.first->second; + vec_off = entry.index_offset; + } + else + { + /* While 0 is a valid constant pool index, it is not valid + to have 0 for both offsets. */ + str_off = 0; + vec_off = 0; + } + + output.append_data (MAYBE_SWAP (str_off)); + output.append_data (MAYBE_SWAP (vec_off)); + } +} + +typedef std::unordered_map<partial_symtab *, unsigned int> psym_index_map; + +/* Helper struct for building the address table. */ +struct addrmap_index_data +{ + addrmap_index_data (data_buf &addr_vec_, psym_index_map &cu_index_htab_) + : addr_vec (addr_vec_), cu_index_htab (cu_index_htab_) + {} + + struct objfile *objfile; + data_buf &addr_vec; + psym_index_map &cu_index_htab; + + /* Non-zero if the previous_* fields are valid. + We can't write an entry until we see the next entry (since it is only then + that we know the end of the entry). */ + int previous_valid; + /* Index of the CU in the table of all CUs in the index file. */ + unsigned int previous_cu_index; + /* Start address of the CU. */ + CORE_ADDR previous_cu_start; +}; + +/* Write an address entry to ADDR_VEC. */ + +static void +add_address_entry (struct objfile *objfile, data_buf &addr_vec, + CORE_ADDR start, CORE_ADDR end, unsigned int cu_index) +{ + addr_vec.append_uint (8, BFD_ENDIAN_LITTLE, start); + addr_vec.append_uint (8, BFD_ENDIAN_LITTLE, end); + addr_vec.append_data (MAYBE_SWAP (cu_index)); +} + +/* Worker function for traversing an addrmap to build the address table. */ + +static int +add_address_entry_worker (void *datap, CORE_ADDR start_addr, void *obj) +{ + struct addrmap_index_data *data = (struct addrmap_index_data *) datap; + partial_symtab *pst = (partial_symtab *) obj; + + if (data->previous_valid) + add_address_entry (data->objfile, data->addr_vec, + data->previous_cu_start, start_addr, + data->previous_cu_index); + + data->previous_cu_start = start_addr; + if (pst != NULL) + { + const auto it = data->cu_index_htab.find (pst); + gdb_assert (it != data->cu_index_htab.cend ()); + data->previous_cu_index = it->second; + data->previous_valid = 1; + } + else + data->previous_valid = 0; + + return 0; +} + +/* Write OBJFILE's address map to ADDR_VEC. + CU_INDEX_HTAB is used to map addrmap entries to their CU indices + in the index file. */ + +static void +write_address_map (struct objfile *objfile, data_buf &addr_vec, + psym_index_map &cu_index_htab) +{ + struct addrmap_index_data addrmap_index_data (addr_vec, cu_index_htab); + + /* When writing the address table, we have to cope with the fact that + the addrmap iterator only provides the start of a region; we have to + wait until the next invocation to get the start of the next region. */ + + addrmap_index_data.objfile = objfile; + addrmap_index_data.previous_valid = 0; + + addrmap_foreach (objfile->partial_symtabs->psymtabs_addrmap, + add_address_entry_worker, &addrmap_index_data); + + /* It's highly unlikely the last entry (end address = 0xff...ff) + is valid, but we should still handle it. + The end address is recorded as the start of the next region, but that + doesn't work here. To cope we pass 0xff...ff, this is a rare situation + anyway. */ + if (addrmap_index_data.previous_valid) + add_address_entry (objfile, addr_vec, + addrmap_index_data.previous_cu_start, (CORE_ADDR) -1, + addrmap_index_data.previous_cu_index); +} + +/* Return the symbol kind of PSYM. */ + +static gdb_index_symbol_kind +symbol_kind (struct partial_symbol *psym) +{ + domain_enum domain = psym->domain; + enum address_class aclass = psym->aclass; + + switch (domain) + { + case VAR_DOMAIN: + switch (aclass) + { + case LOC_BLOCK: + return GDB_INDEX_SYMBOL_KIND_FUNCTION; + case LOC_TYPEDEF: + return GDB_INDEX_SYMBOL_KIND_TYPE; + case LOC_COMPUTED: + case LOC_CONST_BYTES: + case LOC_OPTIMIZED_OUT: + case LOC_STATIC: + return GDB_INDEX_SYMBOL_KIND_VARIABLE; + case LOC_CONST: + /* Note: It's currently impossible to recognize psyms as enum values + short of reading the type info. For now punt. */ + return GDB_INDEX_SYMBOL_KIND_VARIABLE; + default: + /* There are other LOC_FOO values that one might want to classify + as variables, but dwarf2read.c doesn't currently use them. */ + return GDB_INDEX_SYMBOL_KIND_OTHER; + } + case STRUCT_DOMAIN: + return GDB_INDEX_SYMBOL_KIND_TYPE; + default: + return GDB_INDEX_SYMBOL_KIND_OTHER; + } +} + +/* Add a list of partial symbols to SYMTAB. */ + +static void +write_psymbols (struct mapped_symtab *symtab, + std::unordered_set<partial_symbol *> &psyms_seen, + struct partial_symbol **psymp, + int count, + offset_type cu_index, + int is_static) +{ + for (; count-- > 0; ++psymp) + { + struct partial_symbol *psym = *psymp; + const char *name = psym->ginfo.search_name (); + + if (psym->ginfo.language () == language_ada) + { + /* We want to ensure that the Ada main function's name appears + verbatim in the index. However, this name will be of the + form "_ada_mumble", and will be rewritten by ada_decode. + So, recognize it specially here and add it to the index by + hand. */ + if (strcmp (main_name (), name) == 0) + { + gdb_index_symbol_kind kind = symbol_kind (psym); + + add_index_entry (symtab, name, is_static, kind, cu_index); + } + + /* In order for the index to work when read back into gdb, it + has to supply a funny form of the name: it should be the + encoded name, with any suffixes stripped. Using the + ordinary encoded name will not work properly with the + searching logic in find_name_components_bounds; nor will + using the decoded name. Furthermore, an Ada "verbatim" + name (of the form "<MumBle>") must be entered without the + angle brackets. Note that the current index is unusual, + see PR symtab/24820 for details. */ + std::string decoded = ada_decode (name); + if (decoded[0] == '<') + name = (char *) obstack_copy0 (&symtab->m_string_obstack, + decoded.c_str () + 1, + decoded.length () - 2); + else + name = obstack_strdup (&symtab->m_string_obstack, + ada_encode (decoded.c_str ())); + } + + /* Only add a given psymbol once. */ + if (psyms_seen.insert (psym).second) + { + gdb_index_symbol_kind kind = symbol_kind (psym); + + add_index_entry (symtab, name, is_static, kind, cu_index); + } + } +} + +/* A helper struct used when iterating over debug_types. */ +struct signatured_type_index_data +{ + signatured_type_index_data (data_buf &types_list_, + std::unordered_set<partial_symbol *> &psyms_seen_) + : types_list (types_list_), psyms_seen (psyms_seen_) + {} + + struct objfile *objfile; + struct mapped_symtab *symtab; + data_buf &types_list; + std::unordered_set<partial_symbol *> &psyms_seen; + int cu_index; +}; + +/* A helper function that writes a single signatured_type to an + obstack. */ + +static int +write_one_signatured_type (void **slot, void *d) +{ + struct signatured_type_index_data *info + = (struct signatured_type_index_data *) d; + struct signatured_type *entry = (struct signatured_type *) *slot; + partial_symtab *psymtab = entry->per_cu.v.psymtab; + + write_psymbols (info->symtab, + info->psyms_seen, + (info->objfile->partial_symtabs->global_psymbols.data () + + psymtab->globals_offset), + psymtab->n_global_syms, info->cu_index, + 0); + write_psymbols (info->symtab, + info->psyms_seen, + (info->objfile->partial_symtabs->static_psymbols.data () + + psymtab->statics_offset), + psymtab->n_static_syms, info->cu_index, + 1); + + info->types_list.append_uint (8, BFD_ENDIAN_LITTLE, + to_underlying (entry->per_cu.sect_off)); + info->types_list.append_uint (8, BFD_ENDIAN_LITTLE, + to_underlying (entry->type_offset_in_tu)); + info->types_list.append_uint (8, BFD_ENDIAN_LITTLE, entry->signature); + + ++info->cu_index; + + return 1; +} + +/* Recurse into all "included" dependencies and count their symbols as + if they appeared in this psymtab. */ + +static void +recursively_count_psymbols (partial_symtab *psymtab, + size_t &psyms_seen) +{ + for (int i = 0; i < psymtab->number_of_dependencies; ++i) + if (psymtab->dependencies[i]->user != NULL) + recursively_count_psymbols (psymtab->dependencies[i], + psyms_seen); + + psyms_seen += psymtab->n_global_syms; + psyms_seen += psymtab->n_static_syms; +} + +/* Recurse into all "included" dependencies and write their symbols as + if they appeared in this psymtab. */ + +static void +recursively_write_psymbols (struct objfile *objfile, + partial_symtab *psymtab, + struct mapped_symtab *symtab, + std::unordered_set<partial_symbol *> &psyms_seen, + offset_type cu_index) +{ + int i; + + for (i = 0; i < psymtab->number_of_dependencies; ++i) + if (psymtab->dependencies[i]->user != NULL) + recursively_write_psymbols (objfile, + psymtab->dependencies[i], + symtab, psyms_seen, cu_index); + + write_psymbols (symtab, + psyms_seen, + (objfile->partial_symtabs->global_psymbols.data () + + psymtab->globals_offset), + psymtab->n_global_syms, cu_index, + 0); + write_psymbols (symtab, + psyms_seen, + (objfile->partial_symtabs->static_psymbols.data () + + psymtab->statics_offset), + psymtab->n_static_syms, cu_index, + 1); +} + +/* DWARF-5 .debug_names builder. */ +class debug_names +{ +public: + debug_names (dwarf2_per_objfile *per_objfile, bool is_dwarf64, + bfd_endian dwarf5_byte_order) + : m_dwarf5_byte_order (dwarf5_byte_order), + m_dwarf32 (dwarf5_byte_order), + m_dwarf64 (dwarf5_byte_order), + m_dwarf (is_dwarf64 + ? static_cast<dwarf &> (m_dwarf64) + : static_cast<dwarf &> (m_dwarf32)), + m_name_table_string_offs (m_dwarf.name_table_string_offs), + m_name_table_entry_offs (m_dwarf.name_table_entry_offs), + m_debugstrlookup (per_objfile) + {} + + int dwarf5_offset_size () const + { + const bool dwarf5_is_dwarf64 = &m_dwarf == &m_dwarf64; + return dwarf5_is_dwarf64 ? 8 : 4; + } + + /* Is this symbol from DW_TAG_compile_unit or DW_TAG_type_unit? */ + enum class unit_kind { cu, tu }; + + /* Insert one symbol. */ + void insert (const partial_symbol *psym, int cu_index, bool is_static, + unit_kind kind) + { + const int dwarf_tag = psymbol_tag (psym); + if (dwarf_tag == 0) + return; + const char *name = psym->ginfo.search_name (); + + if (psym->ginfo.language () == language_ada) + { + /* We want to ensure that the Ada main function's name appears + verbatim in the index. However, this name will be of the + form "_ada_mumble", and will be rewritten by ada_decode. + So, recognize it specially here and add it to the index by + hand. */ + if (strcmp (main_name (), name) == 0) + { + const auto insertpair + = m_name_to_value_set.emplace (c_str_view (name), + std::set<symbol_value> ()); + std::set<symbol_value> &value_set = insertpair.first->second; + value_set.emplace (symbol_value (dwarf_tag, cu_index, is_static, + kind)); + } + + /* In order for the index to work when read back into gdb, it + has to supply a funny form of the name: it should be the + encoded name, with any suffixes stripped. Using the + ordinary encoded name will not work properly with the + searching logic in find_name_components_bounds; nor will + using the decoded name. Furthermore, an Ada "verbatim" + name (of the form "<MumBle>") must be entered without the + angle brackets. Note that the current index is unusual, + see PR symtab/24820 for details. */ + std::string decoded = ada_decode (name); + if (decoded[0] == '<') + name = (char *) obstack_copy0 (&m_string_obstack, + decoded.c_str () + 1, + decoded.length () - 2); + else + name = obstack_strdup (&m_string_obstack, + ada_encode (decoded.c_str ())); + } + + const auto insertpair + = m_name_to_value_set.emplace (c_str_view (name), + std::set<symbol_value> ()); + std::set<symbol_value> &value_set = insertpair.first->second; + value_set.emplace (symbol_value (dwarf_tag, cu_index, is_static, kind)); + } + + /* Build all the tables. All symbols must be already inserted. + This function does not call file_write, caller has to do it + afterwards. */ + void build () + { + /* Verify the build method has not be called twice. */ + gdb_assert (m_abbrev_table.empty ()); + const size_t name_count = m_name_to_value_set.size (); + m_bucket_table.resize + (std::pow (2, std::ceil (std::log2 (name_count * 4 / 3)))); + m_hash_table.reserve (name_count); + m_name_table_string_offs.reserve (name_count); + m_name_table_entry_offs.reserve (name_count); + + /* Map each hash of symbol to its name and value. */ + struct hash_it_pair + { + uint32_t hash; + decltype (m_name_to_value_set)::const_iterator it; + }; + std::vector<std::forward_list<hash_it_pair>> bucket_hash; + bucket_hash.resize (m_bucket_table.size ()); + for (decltype (m_name_to_value_set)::const_iterator it + = m_name_to_value_set.cbegin (); + it != m_name_to_value_set.cend (); + ++it) + { + const char *const name = it->first.c_str (); + const uint32_t hash = dwarf5_djb_hash (name); + hash_it_pair hashitpair; + hashitpair.hash = hash; + hashitpair.it = it; + auto &slot = bucket_hash[hash % bucket_hash.size()]; + slot.push_front (std::move (hashitpair)); + } + for (size_t bucket_ix = 0; bucket_ix < bucket_hash.size (); ++bucket_ix) + { + const std::forward_list<hash_it_pair> &hashitlist + = bucket_hash[bucket_ix]; + if (hashitlist.empty ()) + continue; + uint32_t &bucket_slot = m_bucket_table[bucket_ix]; + /* The hashes array is indexed starting at 1. */ + store_unsigned_integer (reinterpret_cast<gdb_byte *> (&bucket_slot), + sizeof (bucket_slot), m_dwarf5_byte_order, + m_hash_table.size () + 1); + for (const hash_it_pair &hashitpair : hashitlist) + { + m_hash_table.push_back (0); + store_unsigned_integer (reinterpret_cast<gdb_byte *> + (&m_hash_table.back ()), + sizeof (m_hash_table.back ()), + m_dwarf5_byte_order, hashitpair.hash); + const c_str_view &name = hashitpair.it->first; + const std::set<symbol_value> &value_set = hashitpair.it->second; + m_name_table_string_offs.push_back_reorder + (m_debugstrlookup.lookup (name.c_str ())); + m_name_table_entry_offs.push_back_reorder (m_entry_pool.size ()); + gdb_assert (!value_set.empty ()); + for (const symbol_value &value : value_set) + { + int &idx = m_indexkey_to_idx[index_key (value.dwarf_tag, + value.is_static, + value.kind)]; + if (idx == 0) + { + idx = m_idx_next++; + m_abbrev_table.append_unsigned_leb128 (idx); + m_abbrev_table.append_unsigned_leb128 (value.dwarf_tag); + m_abbrev_table.append_unsigned_leb128 + (value.kind == unit_kind::cu ? DW_IDX_compile_unit + : DW_IDX_type_unit); + m_abbrev_table.append_unsigned_leb128 (DW_FORM_udata); + m_abbrev_table.append_unsigned_leb128 (value.is_static + ? DW_IDX_GNU_internal + : DW_IDX_GNU_external); + m_abbrev_table.append_unsigned_leb128 (DW_FORM_flag_present); + + /* Terminate attributes list. */ + m_abbrev_table.append_unsigned_leb128 (0); + m_abbrev_table.append_unsigned_leb128 (0); + } + + m_entry_pool.append_unsigned_leb128 (idx); + m_entry_pool.append_unsigned_leb128 (value.cu_index); + } + + /* Terminate the list of CUs. */ + m_entry_pool.append_unsigned_leb128 (0); + } + } + gdb_assert (m_hash_table.size () == name_count); + + /* Terminate tags list. */ + m_abbrev_table.append_unsigned_leb128 (0); + } + + /* Return .debug_names bucket count. This must be called only after + calling the build method. */ + uint32_t bucket_count () const + { + /* Verify the build method has been already called. */ + gdb_assert (!m_abbrev_table.empty ()); + const uint32_t retval = m_bucket_table.size (); + + /* Check for overflow. */ + gdb_assert (retval == m_bucket_table.size ()); + return retval; + } + + /* Return .debug_names names count. This must be called only after + calling the build method. */ + uint32_t name_count () const + { + /* Verify the build method has been already called. */ + gdb_assert (!m_abbrev_table.empty ()); + const uint32_t retval = m_hash_table.size (); + + /* Check for overflow. */ + gdb_assert (retval == m_hash_table.size ()); + return retval; + } + + /* Return number of bytes of .debug_names abbreviation table. This + must be called only after calling the build method. */ + uint32_t abbrev_table_bytes () const + { + gdb_assert (!m_abbrev_table.empty ()); + return m_abbrev_table.size (); + } + + /* Recurse into all "included" dependencies and store their symbols + as if they appeared in this psymtab. */ + void recursively_write_psymbols + (struct objfile *objfile, + partial_symtab *psymtab, + std::unordered_set<partial_symbol *> &psyms_seen, + int cu_index) + { + for (int i = 0; i < psymtab->number_of_dependencies; ++i) + if (psymtab->dependencies[i]->user != NULL) + recursively_write_psymbols + (objfile, psymtab->dependencies[i], psyms_seen, cu_index); + + write_psymbols (psyms_seen, + (objfile->partial_symtabs->global_psymbols.data () + + psymtab->globals_offset), + psymtab->n_global_syms, cu_index, false, unit_kind::cu); + write_psymbols (psyms_seen, + (objfile->partial_symtabs->static_psymbols.data () + + psymtab->statics_offset), + psymtab->n_static_syms, cu_index, true, unit_kind::cu); + } + + /* Return number of bytes the .debug_names section will have. This + must be called only after calling the build method. */ + size_t bytes () const + { + /* Verify the build method has been already called. */ + gdb_assert (!m_abbrev_table.empty ()); + size_t expected_bytes = 0; + expected_bytes += m_bucket_table.size () * sizeof (m_bucket_table[0]); + expected_bytes += m_hash_table.size () * sizeof (m_hash_table[0]); + expected_bytes += m_name_table_string_offs.bytes (); + expected_bytes += m_name_table_entry_offs.bytes (); + expected_bytes += m_abbrev_table.size (); + expected_bytes += m_entry_pool.size (); + return expected_bytes; + } + + /* Write .debug_names to FILE_NAMES and .debug_str addition to + FILE_STR. This must be called only after calling the build + method. */ + void file_write (FILE *file_names, FILE *file_str) const + { + /* Verify the build method has been already called. */ + gdb_assert (!m_abbrev_table.empty ()); + ::file_write (file_names, m_bucket_table); + ::file_write (file_names, m_hash_table); + m_name_table_string_offs.file_write (file_names); + m_name_table_entry_offs.file_write (file_names); + m_abbrev_table.file_write (file_names); + m_entry_pool.file_write (file_names); + m_debugstrlookup.file_write (file_str); + } + + /* A helper user data for write_one_signatured_type. */ + class write_one_signatured_type_data + { + public: + write_one_signatured_type_data (debug_names &nametable_, + signatured_type_index_data &&info_) + : nametable (nametable_), info (std::move (info_)) + {} + debug_names &nametable; + struct signatured_type_index_data info; + }; + + /* A helper function to pass write_one_signatured_type to + htab_traverse_noresize. */ + static int + write_one_signatured_type (void **slot, void *d) + { + write_one_signatured_type_data *data = (write_one_signatured_type_data *) d; + struct signatured_type_index_data *info = &data->info; + struct signatured_type *entry = (struct signatured_type *) *slot; + + data->nametable.write_one_signatured_type (entry, info); + + return 1; + } + +private: + + /* Storage for symbol names mapping them to their .debug_str section + offsets. */ + class debug_str_lookup + { + public: + + /* Object constructor to be called for current DWARF2_PER_OBJFILE. + All .debug_str section strings are automatically stored. */ + debug_str_lookup (dwarf2_per_objfile *per_objfile) + : m_abfd (per_objfile->objfile->obfd), + m_per_objfile (per_objfile) + { + per_objfile->per_bfd->str.read (per_objfile->objfile); + if (per_objfile->per_bfd->str.buffer == NULL) + return; + for (const gdb_byte *data = per_objfile->per_bfd->str.buffer; + data < (per_objfile->per_bfd->str.buffer + + per_objfile->per_bfd->str.size);) + { + const char *const s = reinterpret_cast<const char *> (data); + const auto insertpair + = m_str_table.emplace (c_str_view (s), + data - per_objfile->per_bfd->str.buffer); + if (!insertpair.second) + complaint (_("Duplicate string \"%s\" in " + ".debug_str section [in module %s]"), + s, bfd_get_filename (m_abfd)); + data += strlen (s) + 1; + } + } + + /* Return offset of symbol name S in the .debug_str section. Add + such symbol to the section's end if it does not exist there + yet. */ + size_t lookup (const char *s) + { + const auto it = m_str_table.find (c_str_view (s)); + if (it != m_str_table.end ()) + return it->second; + const size_t offset = (m_per_objfile->per_bfd->str.size + + m_str_add_buf.size ()); + m_str_table.emplace (c_str_view (s), offset); + m_str_add_buf.append_cstr0 (s); + return offset; + } + + /* Append the end of the .debug_str section to FILE. */ + void file_write (FILE *file) const + { + m_str_add_buf.file_write (file); + } + + private: + std::unordered_map<c_str_view, size_t, c_str_view_hasher> m_str_table; + bfd *const m_abfd; + dwarf2_per_objfile *m_per_objfile; + + /* Data to add at the end of .debug_str for new needed symbol names. */ + data_buf m_str_add_buf; + }; + + /* Container to map used DWARF tags to their .debug_names abbreviation + tags. */ + class index_key + { + public: + index_key (int dwarf_tag_, bool is_static_, unit_kind kind_) + : dwarf_tag (dwarf_tag_), is_static (is_static_), kind (kind_) + { + } + + bool + operator== (const index_key &other) const + { + return (dwarf_tag == other.dwarf_tag && is_static == other.is_static + && kind == other.kind); + } + + const int dwarf_tag; + const bool is_static; + const unit_kind kind; + }; + + /* Provide std::unordered_map::hasher for index_key. */ + class index_key_hasher + { + public: + size_t + operator () (const index_key &key) const + { + return (std::hash<int>() (key.dwarf_tag) << 1) | key.is_static; + } + }; + + /* Parameters of one symbol entry. */ + class symbol_value + { + public: + const int dwarf_tag, cu_index; + const bool is_static; + const unit_kind kind; + + symbol_value (int dwarf_tag_, int cu_index_, bool is_static_, + unit_kind kind_) + : dwarf_tag (dwarf_tag_), cu_index (cu_index_), is_static (is_static_), + kind (kind_) + {} + + bool + operator< (const symbol_value &other) const + { +#define X(n) \ + do \ + { \ + if (n < other.n) \ + return true; \ + if (n > other.n) \ + return false; \ + } \ + while (0) + X (dwarf_tag); + X (is_static); + X (kind); + X (cu_index); +#undef X + return false; + } + }; + + /* Abstract base class to unify DWARF-32 and DWARF-64 name table + output. */ + class offset_vec + { + protected: + const bfd_endian dwarf5_byte_order; + public: + explicit offset_vec (bfd_endian dwarf5_byte_order_) + : dwarf5_byte_order (dwarf5_byte_order_) + {} + + /* Call std::vector::reserve for NELEM elements. */ + virtual void reserve (size_t nelem) = 0; + + /* Call std::vector::push_back with store_unsigned_integer byte + reordering for ELEM. */ + virtual void push_back_reorder (size_t elem) = 0; + + /* Return expected output size in bytes. */ + virtual size_t bytes () const = 0; + + /* Write name table to FILE. */ + virtual void file_write (FILE *file) const = 0; + }; + + /* Template to unify DWARF-32 and DWARF-64 output. */ + template<typename OffsetSize> + class offset_vec_tmpl : public offset_vec + { + public: + explicit offset_vec_tmpl (bfd_endian dwarf5_byte_order_) + : offset_vec (dwarf5_byte_order_) + {} + + /* Implement offset_vec::reserve. */ + void reserve (size_t nelem) override + { + m_vec.reserve (nelem); + } + + /* Implement offset_vec::push_back_reorder. */ + void push_back_reorder (size_t elem) override + { + m_vec.push_back (elem); + /* Check for overflow. */ + gdb_assert (m_vec.back () == elem); + store_unsigned_integer (reinterpret_cast<gdb_byte *> (&m_vec.back ()), + sizeof (m_vec.back ()), dwarf5_byte_order, elem); + } + + /* Implement offset_vec::bytes. */ + size_t bytes () const override + { + return m_vec.size () * sizeof (m_vec[0]); + } + + /* Implement offset_vec::file_write. */ + void file_write (FILE *file) const override + { + ::file_write (file, m_vec); + } + + private: + std::vector<OffsetSize> m_vec; + }; + + /* Base class to unify DWARF-32 and DWARF-64 .debug_names output + respecting name table width. */ + class dwarf + { + public: + offset_vec &name_table_string_offs, &name_table_entry_offs; + + dwarf (offset_vec &name_table_string_offs_, + offset_vec &name_table_entry_offs_) + : name_table_string_offs (name_table_string_offs_), + name_table_entry_offs (name_table_entry_offs_) + { + } + }; + + /* Template to unify DWARF-32 and DWARF-64 .debug_names output + respecting name table width. */ + template<typename OffsetSize> + class dwarf_tmpl : public dwarf + { + public: + explicit dwarf_tmpl (bfd_endian dwarf5_byte_order_) + : dwarf (m_name_table_string_offs, m_name_table_entry_offs), + m_name_table_string_offs (dwarf5_byte_order_), + m_name_table_entry_offs (dwarf5_byte_order_) + {} + + private: + offset_vec_tmpl<OffsetSize> m_name_table_string_offs; + offset_vec_tmpl<OffsetSize> m_name_table_entry_offs; + }; + + /* Try to reconstruct original DWARF tag for given partial_symbol. + This function is not DWARF-5 compliant but it is sufficient for + GDB as a DWARF-5 index consumer. */ + static int psymbol_tag (const struct partial_symbol *psym) + { + domain_enum domain = psym->domain; + enum address_class aclass = psym->aclass; + + switch (domain) + { + case VAR_DOMAIN: + switch (aclass) + { + case LOC_BLOCK: + return DW_TAG_subprogram; + case LOC_TYPEDEF: + return DW_TAG_typedef; + case LOC_COMPUTED: + case LOC_CONST_BYTES: + case LOC_OPTIMIZED_OUT: + case LOC_STATIC: + return DW_TAG_variable; + case LOC_CONST: + /* Note: It's currently impossible to recognize psyms as enum values + short of reading the type info. For now punt. */ + return DW_TAG_variable; + default: + /* There are other LOC_FOO values that one might want to classify + as variables, but dwarf2read.c doesn't currently use them. */ + return DW_TAG_variable; + } + case STRUCT_DOMAIN: + return DW_TAG_structure_type; + case MODULE_DOMAIN: + return DW_TAG_module; + default: + return 0; + } + } + + /* Call insert for all partial symbols and mark them in PSYMS_SEEN. */ + void write_psymbols (std::unordered_set<partial_symbol *> &psyms_seen, + struct partial_symbol **psymp, int count, int cu_index, + bool is_static, unit_kind kind) + { + for (; count-- > 0; ++psymp) + { + struct partial_symbol *psym = *psymp; + + /* Only add a given psymbol once. */ + if (psyms_seen.insert (psym).second) + insert (psym, cu_index, is_static, kind); + } + } + + /* A helper function that writes a single signatured_type + to a debug_names. */ + void + write_one_signatured_type (struct signatured_type *entry, + struct signatured_type_index_data *info) + { + partial_symtab *psymtab = entry->per_cu.v.psymtab; + + write_psymbols (info->psyms_seen, + (info->objfile->partial_symtabs->global_psymbols.data () + + psymtab->globals_offset), + psymtab->n_global_syms, info->cu_index, false, + unit_kind::tu); + write_psymbols (info->psyms_seen, + (info->objfile->partial_symtabs->static_psymbols.data () + + psymtab->statics_offset), + psymtab->n_static_syms, info->cu_index, true, + unit_kind::tu); + + info->types_list.append_uint (dwarf5_offset_size (), m_dwarf5_byte_order, + to_underlying (entry->per_cu.sect_off)); + + ++info->cu_index; + } + + /* Store value of each symbol. */ + std::unordered_map<c_str_view, std::set<symbol_value>, c_str_view_hasher> + m_name_to_value_set; + + /* Tables of DWARF-5 .debug_names. They are in object file byte + order. */ + std::vector<uint32_t> m_bucket_table; + std::vector<uint32_t> m_hash_table; + + const bfd_endian m_dwarf5_byte_order; + dwarf_tmpl<uint32_t> m_dwarf32; + dwarf_tmpl<uint64_t> m_dwarf64; + dwarf &m_dwarf; + offset_vec &m_name_table_string_offs, &m_name_table_entry_offs; + debug_str_lookup m_debugstrlookup; + + /* Map each used .debug_names abbreviation tag parameter to its + index value. */ + std::unordered_map<index_key, int, index_key_hasher> m_indexkey_to_idx; + + /* Next unused .debug_names abbreviation tag for + m_indexkey_to_idx. */ + int m_idx_next = 1; + + /* .debug_names abbreviation table. */ + data_buf m_abbrev_table; + + /* .debug_names entry pool. */ + data_buf m_entry_pool; + + /* Temporary storage for Ada names. */ + auto_obstack m_string_obstack; +}; + +/* Return iff any of the needed offsets does not fit into 32-bit + .debug_names section. */ + +static bool +check_dwarf64_offsets (dwarf2_per_objfile *per_objfile) +{ + for (dwarf2_per_cu_data *per_cu : per_objfile->per_bfd->all_comp_units) + { + if (to_underlying (per_cu->sect_off) >= (static_cast<uint64_t> (1) << 32)) + return true; + } + for (const signatured_type *sigtype : per_objfile->per_bfd->all_type_units) + { + const dwarf2_per_cu_data &per_cu = sigtype->per_cu; + + if (to_underlying (per_cu.sect_off) >= (static_cast<uint64_t> (1) << 32)) + return true; + } + return false; +} + +/* The psyms_seen set is potentially going to be largish (~40k + elements when indexing a -g3 build of GDB itself). Estimate the + number of elements in order to avoid too many rehashes, which + require rebuilding buckets and thus many trips to + malloc/free. */ + +static size_t +psyms_seen_size (dwarf2_per_objfile *per_objfile) +{ + size_t psyms_count = 0; + for (dwarf2_per_cu_data *per_cu : per_objfile->per_bfd->all_comp_units) + { + partial_symtab *psymtab = per_cu->v.psymtab; + + if (psymtab != NULL && psymtab->user == NULL) + recursively_count_psymbols (psymtab, psyms_count); + } + /* Generating an index for gdb itself shows a ratio of + TOTAL_SEEN_SYMS/UNIQUE_SYMS or ~5. 4 seems like a good bet. */ + return psyms_count / 4; +} + +/* Assert that FILE's size is EXPECTED_SIZE. Assumes file's seek + position is at the end of the file. */ + +static void +assert_file_size (FILE *file, size_t expected_size) +{ + const auto file_size = ftell (file); + if (file_size == -1) + perror_with_name (("ftell")); + gdb_assert (file_size == expected_size); +} + +/* Write a gdb index file to OUT_FILE from all the sections passed as + arguments. */ + +static void +write_gdbindex_1 (FILE *out_file, + const data_buf &cu_list, + const data_buf &types_cu_list, + const data_buf &addr_vec, + const data_buf &symtab_vec, + const data_buf &constant_pool) +{ + data_buf contents; + const offset_type size_of_header = 6 * sizeof (offset_type); + offset_type total_len = size_of_header; + + /* The version number. */ + contents.append_data (MAYBE_SWAP (8)); + + /* The offset of the CU list from the start of the file. */ + contents.append_data (MAYBE_SWAP (total_len)); + total_len += cu_list.size (); + + /* The offset of the types CU list from the start of the file. */ + contents.append_data (MAYBE_SWAP (total_len)); + total_len += types_cu_list.size (); + + /* The offset of the address table from the start of the file. */ + contents.append_data (MAYBE_SWAP (total_len)); + total_len += addr_vec.size (); + + /* The offset of the symbol table from the start of the file. */ + contents.append_data (MAYBE_SWAP (total_len)); + total_len += symtab_vec.size (); + + /* The offset of the constant pool from the start of the file. */ + contents.append_data (MAYBE_SWAP (total_len)); + total_len += constant_pool.size (); + + gdb_assert (contents.size () == size_of_header); + + contents.file_write (out_file); + cu_list.file_write (out_file); + types_cu_list.file_write (out_file); + addr_vec.file_write (out_file); + symtab_vec.file_write (out_file); + constant_pool.file_write (out_file); + + assert_file_size (out_file, total_len); +} + +/* Write contents of a .gdb_index section for OBJFILE into OUT_FILE. + If OBJFILE has an associated dwz file, write contents of a .gdb_index + section for that dwz file into DWZ_OUT_FILE. If OBJFILE does not have an + associated dwz file, DWZ_OUT_FILE must be NULL. */ + +static void +write_gdbindex (dwarf2_per_objfile *per_objfile, FILE *out_file, + FILE *dwz_out_file) +{ + struct objfile *objfile = per_objfile->objfile; + mapped_symtab symtab; + data_buf objfile_cu_list; + data_buf dwz_cu_list; + + /* While we're scanning CU's create a table that maps a psymtab pointer + (which is what addrmap records) to its index (which is what is recorded + in the index file). This will later be needed to write the address + table. */ + psym_index_map cu_index_htab; + cu_index_htab.reserve (per_objfile->per_bfd->all_comp_units.size ()); + + /* The CU list is already sorted, so we don't need to do additional + work here. Also, the debug_types entries do not appear in + all_comp_units, but only in their own hash table. */ + + std::unordered_set<partial_symbol *> psyms_seen + (psyms_seen_size (per_objfile)); + for (int i = 0; i < per_objfile->per_bfd->all_comp_units.size (); ++i) + { + dwarf2_per_cu_data *per_cu = per_objfile->per_bfd->all_comp_units[i]; + partial_symtab *psymtab = per_cu->v.psymtab; + + if (psymtab != NULL) + { + if (psymtab->user == NULL) + recursively_write_psymbols (objfile, psymtab, &symtab, + psyms_seen, i); + + const auto insertpair = cu_index_htab.emplace (psymtab, i); + gdb_assert (insertpair.second); + } + + /* The all_comp_units list contains CUs read from the objfile as well as + from the eventual dwz file. We need to place the entry in the + corresponding index. */ + data_buf &cu_list = per_cu->is_dwz ? dwz_cu_list : objfile_cu_list; + cu_list.append_uint (8, BFD_ENDIAN_LITTLE, + to_underlying (per_cu->sect_off)); + cu_list.append_uint (8, BFD_ENDIAN_LITTLE, per_cu->length); + } + + /* Dump the address map. */ + data_buf addr_vec; + write_address_map (objfile, addr_vec, cu_index_htab); + + /* Write out the .debug_type entries, if any. */ + data_buf types_cu_list; + if (per_objfile->per_bfd->signatured_types) + { + signatured_type_index_data sig_data (types_cu_list, + psyms_seen); + + sig_data.objfile = objfile; + sig_data.symtab = &symtab; + sig_data.cu_index = per_objfile->per_bfd->all_comp_units.size (); + htab_traverse_noresize (per_objfile->per_bfd->signatured_types.get (), + write_one_signatured_type, &sig_data); + } + + /* Now that we've processed all symbols we can shrink their cu_indices + lists. */ + uniquify_cu_indices (&symtab); + + data_buf symtab_vec, constant_pool; + write_hash_table (&symtab, symtab_vec, constant_pool); + + write_gdbindex_1(out_file, objfile_cu_list, types_cu_list, addr_vec, + symtab_vec, constant_pool); + + if (dwz_out_file != NULL) + write_gdbindex_1 (dwz_out_file, dwz_cu_list, {}, {}, {}, {}); + else + gdb_assert (dwz_cu_list.empty ()); +} + +/* DWARF-5 augmentation string for GDB's DW_IDX_GNU_* extension. */ +static const gdb_byte dwarf5_gdb_augmentation[] = { 'G', 'D', 'B', 0 }; + +/* Write a new .debug_names section for OBJFILE into OUT_FILE, write + needed addition to .debug_str section to OUT_FILE_STR. Return how + many bytes were expected to be written into OUT_FILE. */ + +static void +write_debug_names (dwarf2_per_objfile *per_objfile, + FILE *out_file, FILE *out_file_str) +{ + const bool dwarf5_is_dwarf64 = check_dwarf64_offsets (per_objfile); + struct objfile *objfile = per_objfile->objfile; + const enum bfd_endian dwarf5_byte_order + = gdbarch_byte_order (objfile->arch ()); + + /* The CU list is already sorted, so we don't need to do additional + work here. Also, the debug_types entries do not appear in + all_comp_units, but only in their own hash table. */ + data_buf cu_list; + debug_names nametable (per_objfile, dwarf5_is_dwarf64, dwarf5_byte_order); + std::unordered_set<partial_symbol *> + psyms_seen (psyms_seen_size (per_objfile)); + for (int i = 0; i < per_objfile->per_bfd->all_comp_units.size (); ++i) + { + const dwarf2_per_cu_data *per_cu = per_objfile->per_bfd->all_comp_units[i]; + partial_symtab *psymtab = per_cu->v.psymtab; + + /* 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; + + if (psymtab->user == NULL) + nametable.recursively_write_psymbols (objfile, psymtab, psyms_seen, i); + + cu_list.append_uint (nametable.dwarf5_offset_size (), dwarf5_byte_order, + to_underlying (per_cu->sect_off)); + } + + /* Write out the .debug_type entries, if any. */ + data_buf types_cu_list; + if (per_objfile->per_bfd->signatured_types) + { + debug_names::write_one_signatured_type_data sig_data (nametable, + signatured_type_index_data (types_cu_list, psyms_seen)); + + sig_data.info.objfile = objfile; + /* It is used only for gdb_index. */ + sig_data.info.symtab = nullptr; + sig_data.info.cu_index = 0; + htab_traverse_noresize (per_objfile->per_bfd->signatured_types.get (), + debug_names::write_one_signatured_type, + &sig_data); + } + + nametable.build (); + + /* No addr_vec - DWARF-5 uses .debug_aranges generated by GCC. */ + + const offset_type bytes_of_header + = ((dwarf5_is_dwarf64 ? 12 : 4) + + 2 + 2 + 7 * 4 + + sizeof (dwarf5_gdb_augmentation)); + size_t expected_bytes = 0; + expected_bytes += bytes_of_header; + expected_bytes += cu_list.size (); + expected_bytes += types_cu_list.size (); + expected_bytes += nametable.bytes (); + data_buf header; + + if (!dwarf5_is_dwarf64) + { + const uint64_t size64 = expected_bytes - 4; + gdb_assert (size64 < 0xfffffff0); + header.append_uint (4, dwarf5_byte_order, size64); + } + else + { + header.append_uint (4, dwarf5_byte_order, 0xffffffff); + header.append_uint (8, dwarf5_byte_order, expected_bytes - 12); + } + + /* The version number. */ + header.append_uint (2, dwarf5_byte_order, 5); + + /* Padding. */ + header.append_uint (2, dwarf5_byte_order, 0); + + /* 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 ()); + + /* local_type_unit_count - The number of TUs in the local TU + list. */ + header.append_uint (4, dwarf5_byte_order, + per_objfile->per_bfd->all_type_units.size ()); + + /* foreign_type_unit_count - The number of TUs in the foreign TU + list. */ + header.append_uint (4, dwarf5_byte_order, 0); + + /* bucket_count - The number of hash buckets in the hash lookup + table. */ + header.append_uint (4, dwarf5_byte_order, nametable.bucket_count ()); + + /* name_count - The number of unique names in the index. */ + header.append_uint (4, dwarf5_byte_order, nametable.name_count ()); + + /* abbrev_table_size - The size in bytes of the abbreviations + table. */ + header.append_uint (4, dwarf5_byte_order, nametable.abbrev_table_bytes ()); + + /* augmentation_string_size - The size in bytes of the augmentation + string. This value is rounded up to a multiple of 4. */ + static_assert (sizeof (dwarf5_gdb_augmentation) % 4 == 0, ""); + header.append_uint (4, dwarf5_byte_order, sizeof (dwarf5_gdb_augmentation)); + header.append_data (dwarf5_gdb_augmentation); + + gdb_assert (header.size () == bytes_of_header); + + header.file_write (out_file); + cu_list.file_write (out_file); + types_cu_list.file_write (out_file); + nametable.file_write (out_file, out_file_str); + + assert_file_size (out_file, expected_bytes); +} + +/* This represents an index file being written (work-in-progress). + + The data is initially written to a temporary file. When the finalize method + is called, the file is closed and moved to its final location. + + On failure (if this object is being destroyed with having called finalize), + the temporary file is closed and deleted. */ + +struct index_wip_file +{ + index_wip_file (const char *dir, const char *basename, + const char *suffix) + { + filename = (std::string (dir) + SLASH_STRING + basename + + suffix); + + filename_temp = make_temp_filename (filename); + + scoped_fd out_file_fd (gdb_mkostemp_cloexec (filename_temp.data (), + O_BINARY)); + if (out_file_fd.get () == -1) + perror_with_name (("mkstemp")); + + out_file = out_file_fd.to_file ("wb"); + + if (out_file == nullptr) + error (_("Can't open `%s' for writing"), filename_temp.data ()); + + unlink_file.emplace (filename_temp.data ()); + } + + void finalize () + { + /* We want to keep the file. */ + unlink_file->keep (); + + /* Close and move the str file in place. */ + unlink_file.reset (); + if (rename (filename_temp.data (), filename.c_str ()) != 0) + perror_with_name (("rename")); + } + + std::string filename; + gdb::char_vector filename_temp; + + /* Order matters here; we want FILE to be closed before + FILENAME_TEMP is unlinked, because on MS-Windows one cannot + delete a file that is still open. So, we wrap the unlinker in an + optional and emplace it once we know the file name. */ + gdb::optional<gdb::unlinker> unlink_file; + + gdb_file_up out_file; +}; + +/* See dwarf-index-write.h. */ + +void +write_psymtabs_to_index (dwarf2_per_objfile *per_objfile, const char *dir, + const char *basename, const char *dwz_basename, + dw_index_kind index_kind) +{ + struct objfile *objfile = per_objfile->objfile; + + if (per_objfile->per_bfd->using_index) + error (_("Cannot use an index to create the index")); + + if (per_objfile->per_bfd->types.size () > 1) + error (_("Cannot make an index when the file has multiple .debug_types sections")); + + if (!objfile->partial_symtabs->psymtabs + || !objfile->partial_symtabs->psymtabs_addrmap) + return; + + struct stat st; + if (stat (objfile_name (objfile), &st) < 0) + perror_with_name (objfile_name (objfile)); + + const char *index_suffix = (index_kind == dw_index_kind::DEBUG_NAMES + ? INDEX5_SUFFIX : INDEX4_SUFFIX); + + index_wip_file objfile_index_wip (dir, basename, index_suffix); + gdb::optional<index_wip_file> dwz_index_wip; + + if (dwz_basename != NULL) + dwz_index_wip.emplace (dir, dwz_basename, index_suffix); + + if (index_kind == dw_index_kind::DEBUG_NAMES) + { + index_wip_file str_wip_file (dir, basename, DEBUG_STR_SUFFIX); + + write_debug_names (per_objfile, objfile_index_wip.out_file.get (), + str_wip_file.out_file.get ()); + + str_wip_file.finalize (); + } + else + write_gdbindex (per_objfile, objfile_index_wip.out_file.get (), + (dwz_index_wip.has_value () + ? dwz_index_wip->out_file.get () : NULL)); + + objfile_index_wip.finalize (); + + if (dwz_index_wip.has_value ()) + dwz_index_wip->finalize (); +} + +/* Implementation of the `save gdb-index' command. + + Note that the .gdb_index file format used by this command is + documented in the GDB manual. Any changes here must be documented + there. */ + +static void +save_gdb_index_command (const char *arg, int from_tty) +{ + const char dwarf5space[] = "-dwarf-5 "; + dw_index_kind index_kind = dw_index_kind::GDB_INDEX; + + if (!arg) + arg = ""; + + arg = skip_spaces (arg); + if (strncmp (arg, dwarf5space, strlen (dwarf5space)) == 0) + { + index_kind = dw_index_kind::DEBUG_NAMES; + arg += strlen (dwarf5space); + arg = skip_spaces (arg); + } + + if (!*arg) + error (_("usage: save gdb-index [-dwarf-5] DIRECTORY")); + + for (objfile *objfile : current_program_space->objfiles ()) + { + struct stat st; + + /* If the objfile does not correspond to an actual file, skip it. */ + if (stat (objfile_name (objfile), &st) < 0) + continue; + + dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile); + + if (per_objfile != NULL) + { + try + { + const char *basename = lbasename (objfile_name (objfile)); + const dwz_file *dwz = dwarf2_get_dwz_file (per_objfile->per_bfd); + const char *dwz_basename = NULL; + + if (dwz != NULL) + dwz_basename = lbasename (dwz->filename ()); + + write_psymtabs_to_index (per_objfile, arg, basename, dwz_basename, + index_kind); + } + catch (const gdb_exception_error &except) + { + exception_fprintf (gdb_stderr, except, + _("Error while writing index for `%s': "), + objfile_name (objfile)); + } + } + + } +} + +void _initialize_dwarf_index_write (); +void +_initialize_dwarf_index_write () +{ + cmd_list_element *c = add_cmd ("gdb-index", class_files, + save_gdb_index_command, _("\ +Save a gdb-index file.\n\ +Usage: save gdb-index [-dwarf-5] DIRECTORY\n\ +\n\ +No options create one file with .gdb-index extension for pre-DWARF-5\n\ +compatible .gdb_index section. With -dwarf-5 creates two files with\n\ +extension .debug_names and .debug_str for DWARF-5 .debug_names section."), + &save_cmdlist); + set_cmd_completer (c, filename_completer); +} diff -Nru gdb-9.1/gdb/dwarf2/index-write.h gdb-10.2/gdb/dwarf2/index-write.h --- gdb-9.1/gdb/dwarf2/index-write.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/dwarf2/index-write.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,39 @@ +/* DWARF index writing support for GDB. + + Copyright (C) 2018-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef DWARF_INDEX_WRITE_H +#define DWARF_INDEX_WRITE_H + +#include "symfile.h" +#include "dwarf2/read.h" + +/* Create index files for OBJFILE in the directory DIR. + + An index file is created for OBJFILE itself, and is created for its + associated dwz file, if it has one. + + BASENAME is the desired filename base for OBJFILE's index. An extension + derived from INDEX_KIND is added to this base name. DWZ_BASENAME is the + same, but for the dwz file's index. */ + +extern void write_psymtabs_to_index + (dwarf2_per_objfile *per_objfile, const char *dir, const char *basename, + const char *dwz_basename, dw_index_kind index_kind); + +#endif /* DWARF_INDEX_WRITE_H */ diff -Nru gdb-9.1/gdb/dwarf2/leb.c gdb-10.2/gdb/dwarf2/leb.c --- gdb-9.1/gdb/dwarf2/leb.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/dwarf2/leb.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,136 @@ +/* Low-level DWARF 2 reading code + + Copyright (C) 1994-2021 Free Software Foundation, Inc. + + Adapted by Gary Funck (gary@intrepid.com), Intrepid Technology, + Inc. with support from Florida State University (under contract + with the Ada Joint Program Office), and Silicon Graphics, Inc. + Initial contribution by Brent Benson, Harris Computer Systems, Inc., + based on Fred Fish's (Cygnus Support) implementation of DWARF 1 + support. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "defs.h" +#include "dwarf2/leb.h" + +ULONGEST +read_unsigned_leb128 (bfd *abfd, const gdb_byte *buf, + unsigned int *bytes_read_ptr) +{ + ULONGEST result; + unsigned int num_read; + int shift; + unsigned char byte; + + result = 0; + shift = 0; + num_read = 0; + while (1) + { + byte = bfd_get_8 (abfd, buf); + buf++; + num_read++; + result |= ((ULONGEST) (byte & 127) << shift); + if ((byte & 128) == 0) + { + break; + } + shift += 7; + } + *bytes_read_ptr = num_read; + return result; +} + +LONGEST +read_signed_leb128 (bfd *abfd, const gdb_byte *buf, + unsigned int *bytes_read_ptr) +{ + ULONGEST result; + int shift, num_read; + unsigned char byte; + + result = 0; + shift = 0; + num_read = 0; + while (1) + { + byte = bfd_get_8 (abfd, buf); + buf++; + num_read++; + result |= ((ULONGEST) (byte & 127) << shift); + shift += 7; + if ((byte & 128) == 0) + { + break; + } + } + if ((shift < 8 * sizeof (result)) && (byte & 0x40)) + result |= -(((ULONGEST) 1) << shift); + *bytes_read_ptr = num_read; + return result; +} + +/* See leb.h. */ + +LONGEST +read_initial_length (bfd *abfd, const gdb_byte *buf, unsigned int *bytes_read, + bool handle_nonstd) +{ + LONGEST length = bfd_get_32 (abfd, buf); + + if (length == 0xffffffff) + { + length = bfd_get_64 (abfd, buf + 4); + *bytes_read = 12; + } + else if (handle_nonstd && length == 0) + { + /* Handle the (non-standard) 64-bit DWARF2 format used by IRIX. */ + length = bfd_get_64 (abfd, buf); + *bytes_read = 8; + } + else + { + *bytes_read = 4; + } + + return length; +} + +/* See leb.h. */ + +LONGEST +read_offset (bfd *abfd, const gdb_byte *buf, unsigned int offset_size) +{ + LONGEST retval = 0; + + switch (offset_size) + { + case 4: + retval = bfd_get_32 (abfd, buf); + break; + case 8: + retval = bfd_get_64 (abfd, buf); + break; + default: + internal_error (__FILE__, __LINE__, + _("read_offset_1: bad switch [in module %s]"), + bfd_get_filename (abfd)); + } + + return retval; +} diff -Nru gdb-9.1/gdb/dwarf2/leb.h gdb-10.2/gdb/dwarf2/leb.h --- gdb-9.1/gdb/dwarf2/leb.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/dwarf2/leb.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,164 @@ +/* Low-level DWARF 2 reading code + + Copyright (C) 1994-2021 Free Software Foundation, Inc. + + Adapted by Gary Funck (gary@intrepid.com), Intrepid Technology, + Inc. with support from Florida State University (under contract + with the Ada Joint Program Office), and Silicon Graphics, Inc. + Initial contribution by Brent Benson, Harris Computer Systems, Inc., + based on Fred Fish's (Cygnus Support) implementation of DWARF 1 + support. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef GDB_DWARF2_LEB_H +#define GDB_DWARF2_LEB_H + +/* Read dwarf information from a buffer. */ + +static inline unsigned int +read_1_byte (bfd *abfd, const gdb_byte *buf) +{ + return bfd_get_8 (abfd, buf); +} + +static inline int +read_1_signed_byte (bfd *abfd, const gdb_byte *buf) +{ + return bfd_get_signed_8 (abfd, buf); +} + +static inline unsigned int +read_2_bytes (bfd *abfd, const gdb_byte *buf) +{ + return bfd_get_16 (abfd, buf); +} + +static inline int +read_2_signed_bytes (bfd *abfd, const gdb_byte *buf) +{ + return bfd_get_signed_16 (abfd, buf); +} + +/* Read the next three bytes (little-endian order) as an unsigned integer. */ +static inline unsigned int +read_3_bytes (bfd *abfd, const gdb_byte *buf) +{ + unsigned int result = 0; + for (int i = 0; i < 3; ++i) + { + unsigned char byte = bfd_get_8 (abfd, buf); + buf++; + result |= ((unsigned int) byte << (i * 8)); + } + return result; +} + +static inline unsigned int +read_4_bytes (bfd *abfd, const gdb_byte *buf) +{ + return bfd_get_32 (abfd, buf); +} + +static inline int +read_4_signed_bytes (bfd *abfd, const gdb_byte *buf) +{ + return bfd_get_signed_32 (abfd, buf); +} + +static inline ULONGEST +read_8_bytes (bfd *abfd, const gdb_byte *buf) +{ + return bfd_get_64 (abfd, buf); +} + +extern LONGEST read_signed_leb128 (bfd *, const gdb_byte *, unsigned int *); + +extern ULONGEST read_unsigned_leb128 (bfd *, const gdb_byte *, unsigned int *); + +/* Read the initial length from a section. The (draft) DWARF 3 + specification allows the initial length to take up either 4 bytes + or 12 bytes. If the first 4 bytes are 0xffffffff, then the next 8 + bytes describe the length and all offsets will be 8 bytes in length + instead of 4. + + An older, non-standard 64-bit format is also handled by this + function. The older format in question stores the initial length + as an 8-byte quantity without an escape value. Lengths greater + than 2^32 aren't very common which means that the initial 4 bytes + is almost always zero. Since a length value of zero doesn't make + sense for the 32-bit format, this initial zero can be considered to + be an escape value which indicates the presence of the older 64-bit + format. As written, the code can't detect (old format) lengths + greater than 4GB. If it becomes necessary to handle lengths + somewhat larger than 4GB, we could allow other small values (such + as the non-sensical values of 1, 2, and 3) to also be used as + escape values indicating the presence of the old format. + + The value returned via bytes_read should be used to increment the + relevant pointer after calling read_initial_length(). + + [ Note: read_initial_length() and read_offset() are based on the + document entitled "DWARF Debugging Information Format", revision + 3, draft 8, dated November 19, 2001. This document was obtained + from: + + http://reality.sgiweb.org/davea/dwarf3-draft8-011125.pdf + + This document is only a draft and is subject to change. (So beware.) + + Details regarding the older, non-standard 64-bit format were + determined empirically by examining 64-bit ELF files produced by + the SGI toolchain on an IRIX 6.5 machine. + + - Kevin, July 16, 2002 + ] */ +extern LONGEST read_initial_length (bfd *abfd, const gdb_byte *buf, + unsigned int *bytes_read, + bool handle_nonstd = true); + +/* Read an offset from the data stream. */ +extern LONGEST read_offset (bfd *abfd, const gdb_byte *buf, + unsigned int offset_size); + +static inline const gdb_byte * +read_n_bytes (bfd *abfd, const gdb_byte *buf, unsigned int size) +{ + /* If the size of a host char is 8 bits, we can return a pointer + to the buffer, otherwise we have to copy the data to a buffer + allocated on the temporary obstack. */ + gdb_assert (HOST_CHAR_BIT == 8); + return buf; +} + +static inline const char * +read_direct_string (bfd *abfd, const gdb_byte *buf, + unsigned int *bytes_read_ptr) +{ + /* If the size of a host char is 8 bits, we can return a pointer + to the string, otherwise we have to copy the string to a buffer + allocated on the temporary obstack. */ + gdb_assert (HOST_CHAR_BIT == 8); + if (*buf == '\0') + { + *bytes_read_ptr = 1; + return NULL; + } + *bytes_read_ptr = strlen ((const char *) buf) + 1; + return (const char *) buf; +} + +#endif /* GDB_DWARF2_LEB_H */ diff -Nru gdb-9.1/gdb/dwarf2/line-header.c gdb-10.2/gdb/dwarf2/line-header.c --- gdb-9.1/gdb/dwarf2/line-header.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/dwarf2/line-header.c 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,446 @@ +/* DWARF 2 debugging format support for GDB. + + Copyright (C) 1994-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "defs.h" +#include "dwarf2/comp-unit.h" +#include "dwarf2/leb.h" +#include "dwarf2/line-header.h" +#include "dwarf2/read.h" +#include "complaints.h" +#include "filenames.h" + +void +line_header::add_include_dir (const char *include_dir) +{ + if (dwarf_line_debug >= 2) + { + size_t new_size; + if (version >= 5) + new_size = m_include_dirs.size (); + else + new_size = m_include_dirs.size () + 1; + fprintf_unfiltered (gdb_stdlog, "Adding dir %zu: %s\n", + new_size, include_dir); + } + m_include_dirs.push_back (include_dir); +} + +void +line_header::add_file_name (const char *name, + dir_index d_index, + unsigned int mod_time, + unsigned int length) +{ + if (dwarf_line_debug >= 2) + { + size_t new_size; + if (version >= 5) + new_size = file_names_size (); + else + new_size = file_names_size () + 1; + fprintf_unfiltered (gdb_stdlog, "Adding file %zu: %s\n", + new_size, name); + } + m_file_names.emplace_back (name, d_index, mod_time, length); +} + +gdb::unique_xmalloc_ptr<char> +line_header::file_file_name (int file) const +{ + /* Is the file number a valid index into the line header's file name + table? Remember that file numbers start with one, not zero. */ + if (is_valid_file_index (file)) + { + const file_entry *fe = file_name_at (file); + + if (!IS_ABSOLUTE_PATH (fe->name)) + { + const char *dir = fe->include_dir (this); + if (dir != NULL) + return gdb::unique_xmalloc_ptr<char> (concat (dir, SLASH_STRING, + fe->name, + (char *) NULL)); + } + return make_unique_xstrdup (fe->name); + } + else + { + /* The compiler produced a bogus file number. We can at least + record the macro definitions made in the file, even if we + won't be able to find the file by name. */ + char fake_name[80]; + + xsnprintf (fake_name, sizeof (fake_name), + "<bad macro file number %d>", file); + + complaint (_("bad file number in macro information (%d)"), + file); + + return make_unique_xstrdup (fake_name); + } +} + +gdb::unique_xmalloc_ptr<char> +line_header::file_full_name (int file, const char *comp_dir) const +{ + /* Is the file number a valid index into the line header's file name + table? Remember that file numbers start with one, not zero. */ + if (is_valid_file_index (file)) + { + gdb::unique_xmalloc_ptr<char> relative = file_file_name (file); + + if (IS_ABSOLUTE_PATH (relative.get ()) || comp_dir == NULL) + return relative; + return gdb::unique_xmalloc_ptr<char> (concat (comp_dir, SLASH_STRING, + relative.get (), + (char *) NULL)); + } + else + return file_file_name (file); +} + +static void +dwarf2_statement_list_fits_in_line_number_section_complaint (void) +{ + complaint (_("statement list doesn't fit in .debug_line section")); +} + +/* Cover function for read_initial_length. + Returns the length of the object at BUF, and stores the size of the + initial length in *BYTES_READ and stores the size that offsets will be in + *OFFSET_SIZE. + If the initial length size is not equivalent to that specified in + CU_HEADER then issue a complaint. + This is useful when reading non-comp-unit headers. */ + +static LONGEST +read_checked_initial_length_and_offset (bfd *abfd, const gdb_byte *buf, + const struct comp_unit_head *cu_header, + unsigned int *bytes_read, + unsigned int *offset_size) +{ + LONGEST length = read_initial_length (abfd, buf, bytes_read); + + gdb_assert (cu_header->initial_length_size == 4 + || cu_header->initial_length_size == 8 + || cu_header->initial_length_size == 12); + + if (cu_header->initial_length_size != *bytes_read) + complaint (_("intermixed 32-bit and 64-bit DWARF sections")); + + *offset_size = (*bytes_read == 4) ? 4 : 8; + return length; +} + +/* Read directory or file name entry format, starting with byte of + format count entries, ULEB128 pairs of entry formats, ULEB128 of + entries count and the entries themselves in the described entry + format. */ + +static void +read_formatted_entries (dwarf2_per_objfile *per_objfile, bfd *abfd, + const gdb_byte **bufp, struct line_header *lh, + const struct comp_unit_head *cu_header, + void (*callback) (struct line_header *lh, + const char *name, + dir_index d_index, + unsigned int mod_time, + unsigned int length)) +{ + gdb_byte format_count, formati; + ULONGEST data_count, datai; + const gdb_byte *buf = *bufp; + const gdb_byte *format_header_data; + unsigned int bytes_read; + + format_count = read_1_byte (abfd, buf); + buf += 1; + format_header_data = buf; + for (formati = 0; formati < format_count; formati++) + { + read_unsigned_leb128 (abfd, buf, &bytes_read); + buf += bytes_read; + read_unsigned_leb128 (abfd, buf, &bytes_read); + buf += bytes_read; + } + + data_count = read_unsigned_leb128 (abfd, buf, &bytes_read); + buf += bytes_read; + for (datai = 0; datai < data_count; datai++) + { + const gdb_byte *format = format_header_data; + struct file_entry fe; + + for (formati = 0; formati < format_count; formati++) + { + ULONGEST content_type = read_unsigned_leb128 (abfd, format, &bytes_read); + format += bytes_read; + + ULONGEST form = read_unsigned_leb128 (abfd, format, &bytes_read); + format += bytes_read; + + gdb::optional<const char *> string; + gdb::optional<unsigned int> uint; + + switch (form) + { + case DW_FORM_string: + string.emplace (read_direct_string (abfd, buf, &bytes_read)); + buf += bytes_read; + break; + + case DW_FORM_line_strp: + string.emplace + (per_objfile->read_line_string (buf, cu_header, &bytes_read)); + buf += bytes_read; + break; + + case DW_FORM_data1: + uint.emplace (read_1_byte (abfd, buf)); + buf += 1; + break; + + case DW_FORM_data2: + uint.emplace (read_2_bytes (abfd, buf)); + buf += 2; + break; + + case DW_FORM_data4: + uint.emplace (read_4_bytes (abfd, buf)); + buf += 4; + break; + + case DW_FORM_data8: + uint.emplace (read_8_bytes (abfd, buf)); + buf += 8; + break; + + case DW_FORM_data16: + /* This is used for MD5, but file_entry does not record MD5s. */ + buf += 16; + break; + + case DW_FORM_udata: + uint.emplace (read_unsigned_leb128 (abfd, buf, &bytes_read)); + buf += bytes_read; + break; + + case DW_FORM_block: + /* It is valid only for DW_LNCT_timestamp which is ignored by + current GDB. */ + break; + } + + switch (content_type) + { + case DW_LNCT_path: + if (string.has_value ()) + fe.name = *string; + break; + case DW_LNCT_directory_index: + if (uint.has_value ()) + fe.d_index = (dir_index) *uint; + break; + case DW_LNCT_timestamp: + if (uint.has_value ()) + fe.mod_time = *uint; + break; + case DW_LNCT_size: + if (uint.has_value ()) + fe.length = *uint; + break; + case DW_LNCT_MD5: + break; + default: + complaint (_("Unknown format content type %s"), + pulongest (content_type)); + } + } + + callback (lh, fe.name, fe.d_index, fe.mod_time, fe.length); + } + + *bufp = buf; +} + +/* See line-header.h. */ + +line_header_up +dwarf_decode_line_header (sect_offset sect_off, bool is_dwz, + dwarf2_per_objfile *per_objfile, + struct dwarf2_section_info *section, + const struct comp_unit_head *cu_header) +{ + const gdb_byte *line_ptr; + unsigned int bytes_read, offset_size; + int i; + const char *cur_dir, *cur_file; + + bfd *abfd = section->get_bfd_owner (); + + /* Make sure that at least there's room for the total_length field. + That could be 12 bytes long, but we're just going to fudge that. */ + if (to_underlying (sect_off) + 4 >= section->size) + { + dwarf2_statement_list_fits_in_line_number_section_complaint (); + return 0; + } + + line_header_up lh (new line_header ()); + + lh->sect_off = sect_off; + lh->offset_in_dwz = is_dwz; + + line_ptr = section->buffer + to_underlying (sect_off); + + /* Read in the header. */ + lh->total_length = + read_checked_initial_length_and_offset (abfd, line_ptr, cu_header, + &bytes_read, &offset_size); + line_ptr += bytes_read; + + const gdb_byte *start_here = line_ptr; + + if (line_ptr + lh->total_length > (section->buffer + section->size)) + { + dwarf2_statement_list_fits_in_line_number_section_complaint (); + return 0; + } + lh->statement_program_end = start_here + lh->total_length; + lh->version = read_2_bytes (abfd, line_ptr); + line_ptr += 2; + if (lh->version > 5) + { + /* This is a version we don't understand. The format could have + changed in ways we don't handle properly so just punt. */ + complaint (_("unsupported version in .debug_line section")); + return NULL; + } + if (lh->version >= 5) + { + gdb_byte segment_selector_size; + + /* Skip address size. */ + read_1_byte (abfd, line_ptr); + line_ptr += 1; + + segment_selector_size = read_1_byte (abfd, line_ptr); + line_ptr += 1; + if (segment_selector_size != 0) + { + complaint (_("unsupported segment selector size %u " + "in .debug_line section"), + segment_selector_size); + return NULL; + } + } + lh->header_length = read_offset (abfd, line_ptr, offset_size); + line_ptr += offset_size; + lh->statement_program_start = line_ptr + lh->header_length; + lh->minimum_instruction_length = read_1_byte (abfd, line_ptr); + line_ptr += 1; + if (lh->version >= 4) + { + lh->maximum_ops_per_instruction = read_1_byte (abfd, line_ptr); + line_ptr += 1; + } + else + lh->maximum_ops_per_instruction = 1; + + if (lh->maximum_ops_per_instruction == 0) + { + lh->maximum_ops_per_instruction = 1; + complaint (_("invalid maximum_ops_per_instruction " + "in `.debug_line' section")); + } + + lh->default_is_stmt = read_1_byte (abfd, line_ptr); + line_ptr += 1; + lh->line_base = read_1_signed_byte (abfd, line_ptr); + line_ptr += 1; + lh->line_range = read_1_byte (abfd, line_ptr); + line_ptr += 1; + lh->opcode_base = read_1_byte (abfd, line_ptr); + line_ptr += 1; + lh->standard_opcode_lengths.reset (new unsigned char[lh->opcode_base]); + + lh->standard_opcode_lengths[0] = 1; /* This should never be used anyway. */ + for (i = 1; i < lh->opcode_base; ++i) + { + lh->standard_opcode_lengths[i] = read_1_byte (abfd, line_ptr); + line_ptr += 1; + } + + if (lh->version >= 5) + { + /* Read directory table. */ + read_formatted_entries (per_objfile, abfd, &line_ptr, lh.get (), + cu_header, + [] (struct line_header *header, const char *name, + dir_index d_index, unsigned int mod_time, + unsigned int length) + { + header->add_include_dir (name); + }); + + /* Read file name table. */ + read_formatted_entries (per_objfile, abfd, &line_ptr, lh.get (), + cu_header, + [] (struct line_header *header, const char *name, + dir_index d_index, unsigned int mod_time, + unsigned int length) + { + header->add_file_name (name, d_index, mod_time, length); + }); + } + else + { + /* Read directory table. */ + while ((cur_dir = read_direct_string (abfd, line_ptr, &bytes_read)) != NULL) + { + line_ptr += bytes_read; + lh->add_include_dir (cur_dir); + } + line_ptr += bytes_read; + + /* Read file name table. */ + while ((cur_file = read_direct_string (abfd, line_ptr, &bytes_read)) != NULL) + { + unsigned int mod_time, length; + dir_index d_index; + + line_ptr += bytes_read; + d_index = (dir_index) read_unsigned_leb128 (abfd, line_ptr, &bytes_read); + line_ptr += bytes_read; + mod_time = read_unsigned_leb128 (abfd, line_ptr, &bytes_read); + line_ptr += bytes_read; + length = read_unsigned_leb128 (abfd, line_ptr, &bytes_read); + line_ptr += bytes_read; + + lh->add_file_name (cur_file, d_index, mod_time, length); + } + line_ptr += bytes_read; + } + + if (line_ptr > (section->buffer + section->size)) + complaint (_("line number info header doesn't " + "fit in `.debug_line' section")); + + return lh; +} diff -Nru gdb-9.1/gdb/dwarf2/line-header.h gdb-10.2/gdb/dwarf2/line-header.h --- gdb-9.1/gdb/dwarf2/line-header.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/dwarf2/line-header.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,210 @@ +/* DWARF 2 debugging format support for GDB. + + Copyright (C) 1994-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef DWARF2_LINE_HEADER_H +#define DWARF2_LINE_HEADER_H + +#include "gdbtypes.h" + +/* dir_index is 1-based in DWARF 4 and before, and is 0-based in DWARF 5 and + later. */ +typedef int dir_index; + +/* file_name_index is 1-based in DWARF 4 and before, and is 0-based in DWARF 5 + and later. */ +typedef int file_name_index; + +struct line_header; + +struct file_entry +{ + file_entry () = default; + + file_entry (const char *name_, dir_index d_index_, + unsigned int mod_time_, unsigned int length_) + : name (name_), + d_index (d_index_), + mod_time (mod_time_), + length (length_) + {} + + /* Return the include directory at D_INDEX stored in LH. Returns + NULL if D_INDEX is out of bounds. */ + const char *include_dir (const line_header *lh) const; + + /* The file name. Note this is an observing pointer. The memory is + owned by debug_line_buffer. */ + const char *name {}; + + /* The directory index (1-based). */ + dir_index d_index {}; + + unsigned int mod_time {}; + + unsigned int length {}; + + /* True if referenced by the Line Number Program. */ + bool included_p {}; + + /* The associated symbol table, if any. */ + struct symtab *symtab {}; +}; + +/* The line number information for a compilation unit (found in the + .debug_line section) begins with a "statement program header", + which contains the following information. */ +struct line_header +{ + line_header () + : offset_in_dwz {} + {} + + /* Add an entry to the include directory table. */ + void add_include_dir (const char *include_dir); + + /* Add an entry to the file name table. */ + void add_file_name (const char *name, dir_index d_index, + unsigned int mod_time, unsigned int length); + + /* Return the include dir at INDEX (0-based in DWARF 5 and 1-based before). + Returns NULL if INDEX is out of bounds. */ + const char *include_dir_at (dir_index index) const + { + int vec_index; + if (version >= 5) + vec_index = index; + else + vec_index = index - 1; + if (vec_index < 0 || vec_index >= m_include_dirs.size ()) + return NULL; + return m_include_dirs[vec_index]; + } + + bool is_valid_file_index (int file_index) const + { + if (version >= 5) + return 0 <= file_index && file_index < file_names_size (); + return 1 <= file_index && file_index <= file_names_size (); + } + + /* Return the file name at INDEX (0-based in DWARF 5 and 1-based before). + Returns NULL if INDEX is out of bounds. */ + file_entry *file_name_at (file_name_index index) + { + int vec_index; + if (version >= 5) + vec_index = index; + else + vec_index = index - 1; + if (vec_index < 0 || vec_index >= m_file_names.size ()) + return NULL; + return &m_file_names[vec_index]; + } + + /* A const overload of the same. */ + const file_entry *file_name_at (file_name_index index) const + { + line_header *lh = const_cast<line_header *> (this); + return lh->file_name_at (index); + } + + /* The indexes are 0-based in DWARF 5 and 1-based in DWARF 4. Therefore, + this method should only be used to iterate through all file entries in an + index-agnostic manner. */ + std::vector<file_entry> &file_names () + { return m_file_names; } + /* A const overload of the same. */ + const std::vector<file_entry> &file_names () const + { return m_file_names; } + + /* Offset of line number information in .debug_line section. */ + sect_offset sect_off {}; + + /* OFFSET is for struct dwz_file associated with dwarf2_per_objfile. */ + unsigned offset_in_dwz : 1; /* Can't initialize bitfields in-class. */ + + unsigned int total_length {}; + unsigned short version {}; + unsigned int header_length {}; + unsigned char minimum_instruction_length {}; + unsigned char maximum_ops_per_instruction {}; + unsigned char default_is_stmt {}; + int line_base {}; + unsigned char line_range {}; + unsigned char opcode_base {}; + + /* standard_opcode_lengths[i] is the number of operands for the + standard opcode whose value is i. This means that + standard_opcode_lengths[0] is unused, and the last meaningful + element is standard_opcode_lengths[opcode_base - 1]. */ + std::unique_ptr<unsigned char[]> standard_opcode_lengths; + + int file_names_size () const + { return m_file_names.size(); } + + /* The start and end of the statement program following this + header. These point into dwarf2_per_objfile->line_buffer. */ + const gdb_byte *statement_program_start {}, *statement_program_end {}; + + /* Return the full name of file number I in this object's file name + table. Use COMP_DIR as the name of the current directory of the + compilation. The result is allocated using xmalloc; the caller + is responsible for freeing it. */ + gdb::unique_xmalloc_ptr<char> file_full_name (int file, + const char *comp_dir) const; + + /* Return file name relative to the compilation directory of file + number I in this object's file name table. The result is + allocated using xmalloc; the caller is responsible for freeing + it. */ + gdb::unique_xmalloc_ptr<char> file_file_name (int file) const; + + private: + /* The include_directories table. Note these are observing + pointers. The memory is owned by debug_line_buffer. */ + std::vector<const char *> m_include_dirs; + + /* The file_names table. This is private because the meaning of indexes + differs among DWARF versions (The first valid index is 1 in DWARF 4 and + before, and is 0 in DWARF 5 and later). So the client should use + file_name_at method for access. */ + std::vector<file_entry> m_file_names; +}; + +typedef std::unique_ptr<line_header> line_header_up; + +inline const char * +file_entry::include_dir (const line_header *lh) const +{ + return lh->include_dir_at (d_index); +} + +/* Read the statement program header starting at SECT_OFF in SECTION. + Return line_header. Returns nullptr if there is a problem reading + the header, e.g., if it has a version we don't understand. + + NOTE: the strings in the include directory and file name tables of + the returned object point into the dwarf line section buffer, + and must not be freed. */ + +extern line_header_up dwarf_decode_line_header + (sect_offset sect_off, bool is_dwz, dwarf2_per_objfile *per_objfile, + struct dwarf2_section_info *section, const struct comp_unit_head *cu_header); + +#endif /* DWARF2_LINE_HEADER_H */ diff -Nru gdb-9.1/gdb/dwarf2/loc.c gdb-10.2/gdb/dwarf2/loc.c --- gdb-9.1/gdb/dwarf2/loc.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/dwarf2/loc.c 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,4765 @@ +/* DWARF 2 location expression support for GDB. + + Copyright (C) 2003-2021 Free Software Foundation, Inc. + + Contributed by Daniel Jacobowitz, MontaVista Software, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "defs.h" +#include "ui-out.h" +#include "value.h" +#include "frame.h" +#include "gdbcore.h" +#include "target.h" +#include "inferior.h" +#include "ax.h" +#include "ax-gdb.h" +#include "regcache.h" +#include "objfiles.h" +#include "block.h" +#include "gdbcmd.h" +#include "complaints.h" +#include "dwarf2.h" +#include "dwarf2/expr.h" +#include "dwarf2/loc.h" +#include "dwarf2/read.h" +#include "dwarf2/frame.h" +#include "dwarf2/leb.h" +#include "compile/compile.h" +#include "gdbsupport/selftest.h" +#include <algorithm> +#include <vector> +#include <unordered_set> +#include "gdbsupport/underlying.h" +#include "gdbsupport/byte-vector.h" + +static struct value *dwarf2_evaluate_loc_desc_full + (struct type *type, struct frame_info *frame, const gdb_byte *data, + size_t size, dwarf2_per_cu_data *per_cu, dwarf2_per_objfile *per_objfile, + struct type *subobj_type, LONGEST subobj_byte_offset); + +static struct call_site_parameter *dwarf_expr_reg_to_entry_parameter + (struct frame_info *frame, + enum call_site_parameter_kind kind, + union call_site_parameter_u kind_u, + dwarf2_per_cu_data **per_cu_return, + dwarf2_per_objfile **per_objfile_return); + +static struct value *indirect_synthetic_pointer + (sect_offset die, LONGEST byte_offset, + dwarf2_per_cu_data *per_cu, + dwarf2_per_objfile *per_objfile, + struct frame_info *frame, + struct type *type, bool resolve_abstract_p = false); + +/* Until these have formal names, we define these here. + ref: http://gcc.gnu.org/wiki/DebugFission + Each entry in .debug_loc.dwo begins with a byte that describes the entry, + and is then followed by data specific to that entry. */ + +enum debug_loc_kind +{ + /* Indicates the end of the list of entries. */ + DEBUG_LOC_END_OF_LIST = 0, + + /* This is followed by an unsigned LEB128 number that is an index into + .debug_addr and specifies the base address for all following entries. */ + DEBUG_LOC_BASE_ADDRESS = 1, + + /* This is followed by two unsigned LEB128 numbers that are indices into + .debug_addr and specify the beginning and ending addresses, and then + a normal location expression as in .debug_loc. */ + DEBUG_LOC_START_END = 2, + + /* This is followed by an unsigned LEB128 number that is an index into + .debug_addr and specifies the beginning address, and a 4 byte unsigned + number that specifies the length, and then a normal location expression + as in .debug_loc. */ + DEBUG_LOC_START_LENGTH = 3, + + /* This is followed by two unsigned LEB128 operands. The values of these + operands are the starting and ending offsets, respectively, relative to + the applicable base address. */ + DEBUG_LOC_OFFSET_PAIR = 4, + + /* An internal value indicating there is insufficient data. */ + DEBUG_LOC_BUFFER_OVERFLOW = -1, + + /* An internal value indicating an invalid kind of entry was found. */ + DEBUG_LOC_INVALID_ENTRY = -2 +}; + +/* Helper function which throws an error if a synthetic pointer is + invalid. */ + +static void +invalid_synthetic_pointer (void) +{ + error (_("access outside bounds of object " + "referenced via synthetic pointer")); +} + +/* Decode the addresses in a non-dwo .debug_loc entry. + A pointer to the next byte to examine is returned in *NEW_PTR. + The encoded low,high addresses are return in *LOW,*HIGH. + The result indicates the kind of entry found. */ + +static enum debug_loc_kind +decode_debug_loc_addresses (const gdb_byte *loc_ptr, const gdb_byte *buf_end, + const gdb_byte **new_ptr, + CORE_ADDR *low, CORE_ADDR *high, + enum bfd_endian byte_order, + unsigned int addr_size, + int signed_addr_p) +{ + CORE_ADDR base_mask = ~(~(CORE_ADDR)1 << (addr_size * 8 - 1)); + + if (buf_end - loc_ptr < 2 * addr_size) + return DEBUG_LOC_BUFFER_OVERFLOW; + + if (signed_addr_p) + *low = extract_signed_integer (loc_ptr, addr_size, byte_order); + else + *low = extract_unsigned_integer (loc_ptr, addr_size, byte_order); + loc_ptr += addr_size; + + if (signed_addr_p) + *high = extract_signed_integer (loc_ptr, addr_size, byte_order); + else + *high = extract_unsigned_integer (loc_ptr, addr_size, byte_order); + loc_ptr += addr_size; + + *new_ptr = loc_ptr; + + /* A base-address-selection entry. */ + if ((*low & base_mask) == base_mask) + return DEBUG_LOC_BASE_ADDRESS; + + /* An end-of-list entry. */ + if (*low == 0 && *high == 0) + return DEBUG_LOC_END_OF_LIST; + + return DEBUG_LOC_START_END; +} + +/* Decode the addresses in .debug_loclists entry. + A pointer to the next byte to examine is returned in *NEW_PTR. + The encoded low,high addresses are return in *LOW,*HIGH. + The result indicates the kind of entry found. */ + +static enum debug_loc_kind +decode_debug_loclists_addresses (dwarf2_per_cu_data *per_cu, + dwarf2_per_objfile *per_objfile, + const gdb_byte *loc_ptr, + const gdb_byte *buf_end, + const gdb_byte **new_ptr, + CORE_ADDR *low, CORE_ADDR *high, + enum bfd_endian byte_order, + unsigned int addr_size, + int signed_addr_p) +{ + uint64_t u64; + + if (loc_ptr == buf_end) + return DEBUG_LOC_BUFFER_OVERFLOW; + + switch (*loc_ptr++) + { + case DW_LLE_base_addressx: + *low = 0; + loc_ptr = gdb_read_uleb128 (loc_ptr, buf_end, &u64); + if (loc_ptr == NULL) + return DEBUG_LOC_BUFFER_OVERFLOW; + + *high = dwarf2_read_addr_index (per_cu, per_objfile, u64); + *new_ptr = loc_ptr; + return DEBUG_LOC_BASE_ADDRESS; + + case DW_LLE_startx_length: + loc_ptr = gdb_read_uleb128 (loc_ptr, buf_end, &u64); + if (loc_ptr == NULL) + return DEBUG_LOC_BUFFER_OVERFLOW; + + *low = dwarf2_read_addr_index (per_cu, per_objfile, u64); + *high = *low; + loc_ptr = gdb_read_uleb128 (loc_ptr, buf_end, &u64); + if (loc_ptr == NULL) + return DEBUG_LOC_BUFFER_OVERFLOW; + + *high += u64; + *new_ptr = loc_ptr; + return DEBUG_LOC_START_LENGTH; + + case DW_LLE_start_length: + if (buf_end - loc_ptr < addr_size) + return DEBUG_LOC_BUFFER_OVERFLOW; + + if (signed_addr_p) + *low = extract_signed_integer (loc_ptr, addr_size, byte_order); + else + *low = extract_unsigned_integer (loc_ptr, addr_size, byte_order); + + loc_ptr += addr_size; + *high = *low; + + loc_ptr = gdb_read_uleb128 (loc_ptr, buf_end, &u64); + if (loc_ptr == NULL) + return DEBUG_LOC_BUFFER_OVERFLOW; + + *high += u64; + *new_ptr = loc_ptr; + return DEBUG_LOC_START_LENGTH; + + case DW_LLE_end_of_list: + *new_ptr = loc_ptr; + return DEBUG_LOC_END_OF_LIST; + + case DW_LLE_base_address: + if (loc_ptr + addr_size > buf_end) + return DEBUG_LOC_BUFFER_OVERFLOW; + + if (signed_addr_p) + *high = extract_signed_integer (loc_ptr, addr_size, byte_order); + else + *high = extract_unsigned_integer (loc_ptr, addr_size, byte_order); + + loc_ptr += addr_size; + *new_ptr = loc_ptr; + return DEBUG_LOC_BASE_ADDRESS; + + case DW_LLE_offset_pair: + loc_ptr = gdb_read_uleb128 (loc_ptr, buf_end, &u64); + if (loc_ptr == NULL) + return DEBUG_LOC_BUFFER_OVERFLOW; + + *low = u64; + loc_ptr = gdb_read_uleb128 (loc_ptr, buf_end, &u64); + if (loc_ptr == NULL) + return DEBUG_LOC_BUFFER_OVERFLOW; + + *high = u64; + *new_ptr = loc_ptr; + return DEBUG_LOC_OFFSET_PAIR; + + /* Following cases are not supported yet. */ + case DW_LLE_startx_endx: + case DW_LLE_start_end: + case DW_LLE_default_location: + default: + return DEBUG_LOC_INVALID_ENTRY; + } +} + +/* Decode the addresses in .debug_loc.dwo entry. + A pointer to the next byte to examine is returned in *NEW_PTR. + The encoded low,high addresses are return in *LOW,*HIGH. + The result indicates the kind of entry found. */ + +static enum debug_loc_kind +decode_debug_loc_dwo_addresses (dwarf2_per_cu_data *per_cu, + dwarf2_per_objfile *per_objfile, + const gdb_byte *loc_ptr, + const gdb_byte *buf_end, + const gdb_byte **new_ptr, + CORE_ADDR *low, CORE_ADDR *high, + enum bfd_endian byte_order) +{ + uint64_t low_index, high_index; + + if (loc_ptr == buf_end) + return DEBUG_LOC_BUFFER_OVERFLOW; + + switch (*loc_ptr++) + { + case DW_LLE_GNU_end_of_list_entry: + *new_ptr = loc_ptr; + return DEBUG_LOC_END_OF_LIST; + + case DW_LLE_GNU_base_address_selection_entry: + *low = 0; + loc_ptr = gdb_read_uleb128 (loc_ptr, buf_end, &high_index); + if (loc_ptr == NULL) + return DEBUG_LOC_BUFFER_OVERFLOW; + + *high = dwarf2_read_addr_index (per_cu, per_objfile, high_index); + *new_ptr = loc_ptr; + return DEBUG_LOC_BASE_ADDRESS; + + case DW_LLE_GNU_start_end_entry: + loc_ptr = gdb_read_uleb128 (loc_ptr, buf_end, &low_index); + if (loc_ptr == NULL) + return DEBUG_LOC_BUFFER_OVERFLOW; + + *low = dwarf2_read_addr_index (per_cu, per_objfile, low_index); + loc_ptr = gdb_read_uleb128 (loc_ptr, buf_end, &high_index); + if (loc_ptr == NULL) + return DEBUG_LOC_BUFFER_OVERFLOW; + + *high = dwarf2_read_addr_index (per_cu, per_objfile, high_index); + *new_ptr = loc_ptr; + return DEBUG_LOC_START_END; + + case DW_LLE_GNU_start_length_entry: + loc_ptr = gdb_read_uleb128 (loc_ptr, buf_end, &low_index); + if (loc_ptr == NULL) + return DEBUG_LOC_BUFFER_OVERFLOW; + + *low = dwarf2_read_addr_index (per_cu, per_objfile, low_index); + if (loc_ptr + 4 > buf_end) + return DEBUG_LOC_BUFFER_OVERFLOW; + + *high = *low; + *high += extract_unsigned_integer (loc_ptr, 4, byte_order); + *new_ptr = loc_ptr + 4; + return DEBUG_LOC_START_LENGTH; + + default: + return DEBUG_LOC_INVALID_ENTRY; + } +} + +/* A function for dealing with location lists. Given a + symbol baton (BATON) and a pc value (PC), find the appropriate + location expression, set *LOCEXPR_LENGTH, and return a pointer + to the beginning of the expression. Returns NULL on failure. + + For now, only return the first matching location expression; there + can be more than one in the list. */ + +const gdb_byte * +dwarf2_find_location_expression (struct dwarf2_loclist_baton *baton, + size_t *locexpr_length, CORE_ADDR pc) +{ + dwarf2_per_objfile *per_objfile = baton->per_objfile; + struct objfile *objfile = per_objfile->objfile; + struct gdbarch *gdbarch = objfile->arch (); + enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); + unsigned int addr_size = baton->per_cu->addr_size (); + int signed_addr_p = bfd_get_sign_extend_vma (objfile->obfd); + /* Adjust base_address for relocatable objects. */ + CORE_ADDR base_offset = baton->per_objfile->objfile->text_section_offset (); + CORE_ADDR base_address = baton->base_address + base_offset; + const gdb_byte *loc_ptr, *buf_end; + + loc_ptr = baton->data; + buf_end = baton->data + baton->size; + + while (1) + { + CORE_ADDR low = 0, high = 0; /* init for gcc -Wall */ + int length; + enum debug_loc_kind kind; + const gdb_byte *new_ptr = NULL; /* init for gcc -Wall */ + + if (baton->per_cu->version () < 5 && baton->from_dwo) + kind = decode_debug_loc_dwo_addresses (baton->per_cu, + baton->per_objfile, + loc_ptr, buf_end, &new_ptr, + &low, &high, byte_order); + else if (baton->per_cu->version () < 5) + kind = decode_debug_loc_addresses (loc_ptr, buf_end, &new_ptr, + &low, &high, + byte_order, addr_size, + signed_addr_p); + else + kind = decode_debug_loclists_addresses (baton->per_cu, + baton->per_objfile, + loc_ptr, buf_end, &new_ptr, + &low, &high, byte_order, + addr_size, signed_addr_p); + + loc_ptr = new_ptr; + switch (kind) + { + case DEBUG_LOC_END_OF_LIST: + *locexpr_length = 0; + return NULL; + + case DEBUG_LOC_BASE_ADDRESS: + base_address = high + base_offset; + continue; + + case DEBUG_LOC_START_END: + case DEBUG_LOC_START_LENGTH: + case DEBUG_LOC_OFFSET_PAIR: + break; + + case DEBUG_LOC_BUFFER_OVERFLOW: + case DEBUG_LOC_INVALID_ENTRY: + error (_("dwarf2_find_location_expression: " + "Corrupted DWARF expression.")); + + default: + gdb_assert_not_reached ("bad debug_loc_kind"); + } + + /* Otherwise, a location expression entry. + If the entry is from a DWO, don't add base address: the entry is from + .debug_addr which already has the DWARF "base address". We still add + base_offset in case we're debugging a PIE executable. However, if the + entry is DW_LLE_offset_pair from a DWO, add the base address as the + operands are offsets relative to the applicable base address. */ + if (baton->from_dwo && kind != DEBUG_LOC_OFFSET_PAIR) + { + low += base_offset; + high += base_offset; + } + else + { + low += base_address; + high += base_address; + } + + if (baton->per_cu->version () < 5) + { + length = extract_unsigned_integer (loc_ptr, 2, byte_order); + loc_ptr += 2; + } + else + { + unsigned int bytes_read; + + length = read_unsigned_leb128 (NULL, loc_ptr, &bytes_read); + loc_ptr += bytes_read; + } + + if (low == high && pc == low) + { + /* This is entry PC record present only at entry point + of a function. Verify it is really the function entry point. */ + + const struct block *pc_block = block_for_pc (pc); + struct symbol *pc_func = NULL; + + if (pc_block) + pc_func = block_linkage_function (pc_block); + + if (pc_func && pc == BLOCK_ENTRY_PC (SYMBOL_BLOCK_VALUE (pc_func))) + { + *locexpr_length = length; + return loc_ptr; + } + } + + if (pc >= low && pc < high) + { + *locexpr_length = length; + return loc_ptr; + } + + loc_ptr += length; + } +} + +/* Implement find_frame_base_location method for LOC_BLOCK functions using + DWARF expression for its DW_AT_frame_base. */ + +static void +locexpr_find_frame_base_location (struct symbol *framefunc, CORE_ADDR pc, + const gdb_byte **start, size_t *length) +{ + struct dwarf2_locexpr_baton *symbaton + = (struct dwarf2_locexpr_baton *) SYMBOL_LOCATION_BATON (framefunc); + + *length = symbaton->size; + *start = symbaton->data; +} + +/* Implement the struct symbol_block_ops::get_frame_base method for + LOC_BLOCK functions using a DWARF expression as its DW_AT_frame_base. */ + +static CORE_ADDR +locexpr_get_frame_base (struct symbol *framefunc, struct frame_info *frame) +{ + struct gdbarch *gdbarch; + struct type *type; + struct dwarf2_locexpr_baton *dlbaton; + const gdb_byte *start; + size_t length; + struct value *result; + + /* If this method is called, then FRAMEFUNC is supposed to be a DWARF block. + Thus, it's supposed to provide the find_frame_base_location method as + well. */ + gdb_assert (SYMBOL_BLOCK_OPS (framefunc)->find_frame_base_location != NULL); + + gdbarch = get_frame_arch (frame); + type = builtin_type (gdbarch)->builtin_data_ptr; + dlbaton = (struct dwarf2_locexpr_baton *) SYMBOL_LOCATION_BATON (framefunc); + + SYMBOL_BLOCK_OPS (framefunc)->find_frame_base_location + (framefunc, get_frame_pc (frame), &start, &length); + result = dwarf2_evaluate_loc_desc (type, frame, start, length, + dlbaton->per_cu, dlbaton->per_objfile); + + /* The DW_AT_frame_base attribute contains a location description which + computes the base address itself. However, the call to + dwarf2_evaluate_loc_desc returns a value representing a variable at + that address. The frame base address is thus this variable's + address. */ + return value_address (result); +} + +/* Vector for inferior functions as represented by LOC_BLOCK, if the inferior + function uses DWARF expression for its DW_AT_frame_base. */ + +const struct symbol_block_ops dwarf2_block_frame_base_locexpr_funcs = +{ + locexpr_find_frame_base_location, + locexpr_get_frame_base +}; + +/* Implement find_frame_base_location method for LOC_BLOCK functions using + DWARF location list for its DW_AT_frame_base. */ + +static void +loclist_find_frame_base_location (struct symbol *framefunc, CORE_ADDR pc, + const gdb_byte **start, size_t *length) +{ + struct dwarf2_loclist_baton *symbaton + = (struct dwarf2_loclist_baton *) SYMBOL_LOCATION_BATON (framefunc); + + *start = dwarf2_find_location_expression (symbaton, length, pc); +} + +/* Implement the struct symbol_block_ops::get_frame_base method for + LOC_BLOCK functions using a DWARF location list as its DW_AT_frame_base. */ + +static CORE_ADDR +loclist_get_frame_base (struct symbol *framefunc, struct frame_info *frame) +{ + struct gdbarch *gdbarch; + struct type *type; + struct dwarf2_loclist_baton *dlbaton; + const gdb_byte *start; + size_t length; + struct value *result; + + /* If this method is called, then FRAMEFUNC is supposed to be a DWARF block. + Thus, it's supposed to provide the find_frame_base_location method as + well. */ + gdb_assert (SYMBOL_BLOCK_OPS (framefunc)->find_frame_base_location != NULL); + + gdbarch = get_frame_arch (frame); + type = builtin_type (gdbarch)->builtin_data_ptr; + dlbaton = (struct dwarf2_loclist_baton *) SYMBOL_LOCATION_BATON (framefunc); + + SYMBOL_BLOCK_OPS (framefunc)->find_frame_base_location + (framefunc, get_frame_pc (frame), &start, &length); + result = dwarf2_evaluate_loc_desc (type, frame, start, length, + dlbaton->per_cu, dlbaton->per_objfile); + + /* The DW_AT_frame_base attribute contains a location description which + computes the base address itself. However, the call to + dwarf2_evaluate_loc_desc returns a value representing a variable at + that address. The frame base address is thus this variable's + address. */ + return value_address (result); +} + +/* Vector for inferior functions as represented by LOC_BLOCK, if the inferior + function uses DWARF location list for its DW_AT_frame_base. */ + +const struct symbol_block_ops dwarf2_block_frame_base_loclist_funcs = +{ + loclist_find_frame_base_location, + loclist_get_frame_base +}; + +/* See dwarf2loc.h. */ + +void +func_get_frame_base_dwarf_block (struct symbol *framefunc, CORE_ADDR pc, + const gdb_byte **start, size_t *length) +{ + if (SYMBOL_BLOCK_OPS (framefunc) != NULL) + { + const struct symbol_block_ops *ops_block = SYMBOL_BLOCK_OPS (framefunc); + + ops_block->find_frame_base_location (framefunc, pc, start, length); + } + else + *length = 0; + + if (*length == 0) + error (_("Could not find the frame base for \"%s\"."), + framefunc->natural_name ()); +} + +static void +per_cu_dwarf_call (struct dwarf_expr_context *ctx, cu_offset die_offset, + dwarf2_per_cu_data *per_cu, dwarf2_per_objfile *per_objfile) +{ + struct dwarf2_locexpr_baton block; + + auto get_frame_pc_from_ctx = [ctx] () + { + return ctx->get_frame_pc (); + }; + + block = dwarf2_fetch_die_loc_cu_off (die_offset, per_cu, per_objfile, + get_frame_pc_from_ctx); + + /* DW_OP_call_ref is currently not supported. */ + gdb_assert (block.per_cu == per_cu); + + ctx->eval (block.data, block.size); +} + +/* Given context CTX, section offset SECT_OFF, and compilation unit + data PER_CU, execute the "variable value" operation on the DIE + found at SECT_OFF. */ + +static struct value * +sect_variable_value (struct dwarf_expr_context *ctx, sect_offset sect_off, + dwarf2_per_cu_data *per_cu, + dwarf2_per_objfile *per_objfile) +{ + struct type *die_type + = dwarf2_fetch_die_type_sect_off (sect_off, per_cu, per_objfile); + + if (die_type == NULL) + error (_("Bad DW_OP_GNU_variable_value DIE.")); + + /* Note: Things still work when the following test is removed. This + test and error is here to conform to the proposed specification. */ + if (die_type->code () != TYPE_CODE_INT + && die_type->code () != TYPE_CODE_PTR) + error (_("Type of DW_OP_GNU_variable_value DIE must be an integer or pointer.")); + + struct type *type = lookup_pointer_type (die_type); + struct frame_info *frame = get_selected_frame (_("No frame selected.")); + return indirect_synthetic_pointer (sect_off, 0, per_cu, per_objfile, frame, + type, true); +} + +class dwarf_evaluate_loc_desc : public dwarf_expr_context +{ +public: + dwarf_evaluate_loc_desc (dwarf2_per_objfile *per_objfile) + : dwarf_expr_context (per_objfile) + {} + + struct frame_info *frame; + struct dwarf2_per_cu_data *per_cu; + CORE_ADDR obj_address; + + /* Helper function for dwarf2_evaluate_loc_desc. Computes the CFA for + the frame in BATON. */ + + CORE_ADDR get_frame_cfa () override + { + return dwarf2_frame_cfa (frame); + } + + /* Helper function for dwarf2_evaluate_loc_desc. Computes the PC for + the frame in BATON. */ + + CORE_ADDR get_frame_pc () override + { + return get_frame_address_in_block (frame); + } + + /* Using the objfile specified in BATON, find the address for the + current thread's thread-local storage with offset OFFSET. */ + CORE_ADDR get_tls_address (CORE_ADDR offset) override + { + return target_translate_tls_address (per_objfile->objfile, offset); + } + + /* Helper interface of per_cu_dwarf_call for + dwarf2_evaluate_loc_desc. */ + + void dwarf_call (cu_offset die_offset) override + { + per_cu_dwarf_call (this, die_offset, per_cu, per_objfile); + } + + /* Helper interface of sect_variable_value for + dwarf2_evaluate_loc_desc. */ + + struct value *dwarf_variable_value (sect_offset sect_off) override + { + return sect_variable_value (this, sect_off, per_cu, per_objfile); + } + + struct type *get_base_type (cu_offset die_offset, int size) override + { + struct type *result = dwarf2_get_die_type (die_offset, per_cu, per_objfile); + if (result == NULL) + error (_("Could not find type for DW_OP_const_type")); + if (size != 0 && TYPE_LENGTH (result) != size) + error (_("DW_OP_const_type has different sizes for type and data")); + return result; + } + + /* Callback function for dwarf2_evaluate_loc_desc. + Fetch the address indexed by DW_OP_addrx or DW_OP_GNU_addr_index. */ + + CORE_ADDR get_addr_index (unsigned int index) override + { + return dwarf2_read_addr_index (per_cu, per_objfile, index); + } + + /* Callback function for get_object_address. Return the address of the VLA + object. */ + + CORE_ADDR get_object_address () override + { + if (obj_address == 0) + error (_("Location address is not set.")); + return obj_address; + } + + /* Execute DWARF block of call_site_parameter which matches KIND and + KIND_U. Choose DEREF_SIZE value of that parameter. Search + caller of this objects's frame. + + The caller can be from a different CU - per_cu_dwarf_call + implementation can be more simple as it does not support cross-CU + DWARF executions. */ + + void push_dwarf_reg_entry_value (enum call_site_parameter_kind kind, + union call_site_parameter_u kind_u, + int deref_size) override + { + struct frame_info *caller_frame; + dwarf2_per_cu_data *caller_per_cu; + dwarf2_per_objfile *caller_per_objfile; + struct call_site_parameter *parameter; + const gdb_byte *data_src; + size_t size; + + caller_frame = get_prev_frame (frame); + + parameter = dwarf_expr_reg_to_entry_parameter (frame, kind, kind_u, + &caller_per_cu, + &caller_per_objfile); + data_src = deref_size == -1 ? parameter->value : parameter->data_value; + size = deref_size == -1 ? parameter->value_size : parameter->data_value_size; + + /* DEREF_SIZE size is not verified here. */ + if (data_src == NULL) + throw_error (NO_ENTRY_VALUE_ERROR, + _("Cannot resolve DW_AT_call_data_value")); + + /* We are about to evaluate an expression in the context of the caller + of the current frame. This evaluation context may be different from + the current (callee's) context), so temporarily set the caller's context. + + It is possible for the caller to be from a different objfile from the + callee if the call is made through a function pointer. */ + scoped_restore save_frame = make_scoped_restore (&this->frame, + caller_frame); + scoped_restore save_per_cu = make_scoped_restore (&this->per_cu, + caller_per_cu); + scoped_restore save_obj_addr = make_scoped_restore (&this->obj_address, + (CORE_ADDR) 0); + scoped_restore save_per_objfile = make_scoped_restore (&this->per_objfile, + caller_per_objfile); + + scoped_restore save_arch = make_scoped_restore (&this->gdbarch); + this->gdbarch = this->per_objfile->objfile->arch (); + scoped_restore save_addr_size = make_scoped_restore (&this->addr_size); + this->addr_size = this->per_cu->addr_size (); + + this->eval (data_src, size); + } + + /* Using the frame specified in BATON, find the location expression + describing the frame base. Return a pointer to it in START and + its length in LENGTH. */ + void get_frame_base (const gdb_byte **start, size_t * length) override + { + /* FIXME: cagney/2003-03-26: This code should be using + get_frame_base_address(), and then implement a dwarf2 specific + this_base method. */ + struct symbol *framefunc; + const struct block *bl = get_frame_block (frame, NULL); + + if (bl == NULL) + error (_("frame address is not available.")); + + /* Use block_linkage_function, which returns a real (not inlined) + function, instead of get_frame_function, which may return an + inlined function. */ + framefunc = block_linkage_function (bl); + + /* If we found a frame-relative symbol then it was certainly within + some function associated with a frame. If we can't find the frame, + something has gone wrong. */ + gdb_assert (framefunc != NULL); + + func_get_frame_base_dwarf_block (framefunc, + get_frame_address_in_block (frame), + start, length); + } + + /* Read memory at ADDR (length LEN) into BUF. */ + + void read_mem (gdb_byte *buf, CORE_ADDR addr, size_t len) override + { + read_memory (addr, buf, len); + } + + /* Using the frame specified in BATON, return the value of register + REGNUM, treated as a pointer. */ + CORE_ADDR read_addr_from_reg (int dwarf_regnum) override + { + struct gdbarch *gdbarch = get_frame_arch (frame); + int regnum = dwarf_reg_to_regnum_or_error (gdbarch, dwarf_regnum); + + return address_from_register (regnum, frame); + } + + /* Implement "get_reg_value" callback. */ + + struct value *get_reg_value (struct type *type, int dwarf_regnum) override + { + struct gdbarch *gdbarch = get_frame_arch (frame); + int regnum = dwarf_reg_to_regnum_or_error (gdbarch, dwarf_regnum); + + return value_from_register (type, regnum, frame); + } +}; + +/* See dwarf2loc.h. */ + +unsigned int entry_values_debug = 0; + +/* Helper to set entry_values_debug. */ + +static void +show_entry_values_debug (struct ui_file *file, int from_tty, + struct cmd_list_element *c, const char *value) +{ + fprintf_filtered (file, + _("Entry values and tail call frames debugging is %s.\n"), + value); +} + +/* Find DW_TAG_call_site's DW_AT_call_target address. + CALLER_FRAME (for registers) can be NULL if it is not known. This function + always returns valid address or it throws NO_ENTRY_VALUE_ERROR. */ + +static CORE_ADDR +call_site_to_target_addr (struct gdbarch *call_site_gdbarch, + struct call_site *call_site, + struct frame_info *caller_frame) +{ + switch (FIELD_LOC_KIND (call_site->target)) + { + case FIELD_LOC_KIND_DWARF_BLOCK: + { + struct dwarf2_locexpr_baton *dwarf_block; + struct value *val; + struct type *caller_core_addr_type; + struct gdbarch *caller_arch; + + dwarf_block = FIELD_DWARF_BLOCK (call_site->target); + if (dwarf_block == NULL) + { + struct bound_minimal_symbol msym; + + msym = lookup_minimal_symbol_by_pc (call_site->pc - 1); + throw_error (NO_ENTRY_VALUE_ERROR, + _("DW_AT_call_target is not specified at %s in %s"), + paddress (call_site_gdbarch, call_site->pc), + (msym.minsym == NULL ? "???" + : msym.minsym->print_name ())); + + } + if (caller_frame == NULL) + { + struct bound_minimal_symbol msym; + + msym = lookup_minimal_symbol_by_pc (call_site->pc - 1); + throw_error (NO_ENTRY_VALUE_ERROR, + _("DW_AT_call_target DWARF block resolving " + "requires known frame which is currently not " + "available at %s in %s"), + paddress (call_site_gdbarch, call_site->pc), + (msym.minsym == NULL ? "???" + : msym.minsym->print_name ())); + + } + caller_arch = get_frame_arch (caller_frame); + caller_core_addr_type = builtin_type (caller_arch)->builtin_func_ptr; + val = dwarf2_evaluate_loc_desc (caller_core_addr_type, caller_frame, + dwarf_block->data, dwarf_block->size, + dwarf_block->per_cu, + dwarf_block->per_objfile); + /* DW_AT_call_target is a DWARF expression, not a DWARF location. */ + if (VALUE_LVAL (val) == lval_memory) + return value_address (val); + else + return value_as_address (val); + } + + case FIELD_LOC_KIND_PHYSNAME: + { + const char *physname; + struct bound_minimal_symbol msym; + + physname = FIELD_STATIC_PHYSNAME (call_site->target); + + /* Handle both the mangled and demangled PHYSNAME. */ + msym = lookup_minimal_symbol (physname, NULL, NULL); + if (msym.minsym == NULL) + { + msym = lookup_minimal_symbol_by_pc (call_site->pc - 1); + throw_error (NO_ENTRY_VALUE_ERROR, + _("Cannot find function \"%s\" for a call site target " + "at %s in %s"), + physname, paddress (call_site_gdbarch, call_site->pc), + (msym.minsym == NULL ? "???" + : msym.minsym->print_name ())); + + } + return BMSYMBOL_VALUE_ADDRESS (msym); + } + + case FIELD_LOC_KIND_PHYSADDR: + return FIELD_STATIC_PHYSADDR (call_site->target); + + default: + internal_error (__FILE__, __LINE__, _("invalid call site target kind")); + } +} + +/* Convert function entry point exact address ADDR to the function which is + compliant with TAIL_CALL_LIST_COMPLETE condition. Throw + NO_ENTRY_VALUE_ERROR otherwise. */ + +static struct symbol * +func_addr_to_tail_call_list (struct gdbarch *gdbarch, CORE_ADDR addr) +{ + struct symbol *sym = find_pc_function (addr); + struct type *type; + + if (sym == NULL || BLOCK_ENTRY_PC (SYMBOL_BLOCK_VALUE (sym)) != addr) + throw_error (NO_ENTRY_VALUE_ERROR, + _("DW_TAG_call_site resolving failed to find function " + "name for address %s"), + paddress (gdbarch, addr)); + + type = SYMBOL_TYPE (sym); + gdb_assert (type->code () == TYPE_CODE_FUNC); + gdb_assert (TYPE_SPECIFIC_FIELD (type) == TYPE_SPECIFIC_FUNC); + + return sym; +} + +/* Verify function with entry point exact address ADDR can never call itself + via its tail calls (incl. transitively). Throw NO_ENTRY_VALUE_ERROR if it + can call itself via tail calls. + + If a funtion can tail call itself its entry value based parameters are + unreliable. There is no verification whether the value of some/all + parameters is unchanged through the self tail call, we expect if there is + a self tail call all the parameters can be modified. */ + +static void +func_verify_no_selftailcall (struct gdbarch *gdbarch, CORE_ADDR verify_addr) +{ + CORE_ADDR addr; + + /* The verification is completely unordered. Track here function addresses + which still need to be iterated. */ + std::vector<CORE_ADDR> todo; + + /* Track here CORE_ADDRs which were already visited. */ + std::unordered_set<CORE_ADDR> addr_hash; + + todo.push_back (verify_addr); + while (!todo.empty ()) + { + struct symbol *func_sym; + struct call_site *call_site; + + addr = todo.back (); + todo.pop_back (); + + func_sym = func_addr_to_tail_call_list (gdbarch, addr); + + for (call_site = TYPE_TAIL_CALL_LIST (SYMBOL_TYPE (func_sym)); + call_site; call_site = call_site->tail_call_next) + { + CORE_ADDR target_addr; + + /* CALLER_FRAME with registers is not available for tail-call jumped + frames. */ + target_addr = call_site_to_target_addr (gdbarch, call_site, NULL); + + if (target_addr == verify_addr) + { + struct bound_minimal_symbol msym; + + msym = lookup_minimal_symbol_by_pc (verify_addr); + throw_error (NO_ENTRY_VALUE_ERROR, + _("DW_OP_entry_value resolving has found " + "function \"%s\" at %s can call itself via tail " + "calls"), + (msym.minsym == NULL ? "???" + : msym.minsym->print_name ()), + paddress (gdbarch, verify_addr)); + } + + if (addr_hash.insert (target_addr).second) + todo.push_back (target_addr); + } + } +} + +/* Print user readable form of CALL_SITE->PC to gdb_stdlog. Used only for + ENTRY_VALUES_DEBUG. */ + +static void +tailcall_dump (struct gdbarch *gdbarch, const struct call_site *call_site) +{ + CORE_ADDR addr = call_site->pc; + struct bound_minimal_symbol msym = lookup_minimal_symbol_by_pc (addr - 1); + + fprintf_unfiltered (gdb_stdlog, " %s(%s)", paddress (gdbarch, addr), + (msym.minsym == NULL ? "???" + : msym.minsym->print_name ())); + +} + +/* Intersect RESULTP with CHAIN to keep RESULTP unambiguous, keep in RESULTP + only top callers and bottom callees which are present in both. GDBARCH is + used only for ENTRY_VALUES_DEBUG. RESULTP is NULL after return if there are + no remaining possibilities to provide unambiguous non-trivial result. + RESULTP should point to NULL on the first (initialization) call. Caller is + responsible for xfree of any RESULTP data. */ + +static void +chain_candidate (struct gdbarch *gdbarch, + gdb::unique_xmalloc_ptr<struct call_site_chain> *resultp, + std::vector<struct call_site *> *chain) +{ + long length = chain->size (); + int callers, callees, idx; + + if (*resultp == NULL) + { + /* Create the initial chain containing all the passed PCs. */ + + struct call_site_chain *result + = ((struct call_site_chain *) + xmalloc (sizeof (*result) + + sizeof (*result->call_site) * (length - 1))); + result->length = length; + result->callers = result->callees = length; + if (!chain->empty ()) + memcpy (result->call_site, chain->data (), + sizeof (*result->call_site) * length); + resultp->reset (result); + + if (entry_values_debug) + { + fprintf_unfiltered (gdb_stdlog, "tailcall: initial:"); + for (idx = 0; idx < length; idx++) + tailcall_dump (gdbarch, result->call_site[idx]); + fputc_unfiltered ('\n', gdb_stdlog); + } + + return; + } + + if (entry_values_debug) + { + fprintf_unfiltered (gdb_stdlog, "tailcall: compare:"); + for (idx = 0; idx < length; idx++) + tailcall_dump (gdbarch, chain->at (idx)); + fputc_unfiltered ('\n', gdb_stdlog); + } + + /* Intersect callers. */ + + callers = std::min ((long) (*resultp)->callers, length); + for (idx = 0; idx < callers; idx++) + if ((*resultp)->call_site[idx] != chain->at (idx)) + { + (*resultp)->callers = idx; + break; + } + + /* Intersect callees. */ + + callees = std::min ((long) (*resultp)->callees, length); + for (idx = 0; idx < callees; idx++) + if ((*resultp)->call_site[(*resultp)->length - 1 - idx] + != chain->at (length - 1 - idx)) + { + (*resultp)->callees = idx; + break; + } + + if (entry_values_debug) + { + fprintf_unfiltered (gdb_stdlog, "tailcall: reduced:"); + for (idx = 0; idx < (*resultp)->callers; idx++) + tailcall_dump (gdbarch, (*resultp)->call_site[idx]); + fputs_unfiltered (" |", gdb_stdlog); + for (idx = 0; idx < (*resultp)->callees; idx++) + tailcall_dump (gdbarch, + (*resultp)->call_site[(*resultp)->length + - (*resultp)->callees + idx]); + fputc_unfiltered ('\n', gdb_stdlog); + } + + if ((*resultp)->callers == 0 && (*resultp)->callees == 0) + { + /* There are no common callers or callees. It could be also a direct + call (which has length 0) with ambiguous possibility of an indirect + call - CALLERS == CALLEES == 0 is valid during the first allocation + but any subsequence processing of such entry means ambiguity. */ + resultp->reset (NULL); + return; + } + + /* See call_site_find_chain_1 why there is no way to reach the bottom callee + PC again. In such case there must be two different code paths to reach + it. CALLERS + CALLEES equal to LENGTH in the case of self tail-call. */ + gdb_assert ((*resultp)->callers + (*resultp)->callees <= (*resultp)->length); +} + +/* Create and return call_site_chain for CALLER_PC and CALLEE_PC. All the + assumed frames between them use GDBARCH. Use depth first search so we can + keep single CHAIN of call_site's back to CALLER_PC. Function recursion + would have needless GDB stack overhead. Any unreliability results + in thrown NO_ENTRY_VALUE_ERROR. */ + +static gdb::unique_xmalloc_ptr<call_site_chain> +call_site_find_chain_1 (struct gdbarch *gdbarch, CORE_ADDR caller_pc, + CORE_ADDR callee_pc) +{ + CORE_ADDR save_callee_pc = callee_pc; + gdb::unique_xmalloc_ptr<struct call_site_chain> retval; + struct call_site *call_site; + + /* CHAIN contains only the intermediate CALL_SITEs. Neither CALLER_PC's + call_site nor any possible call_site at CALLEE_PC's function is there. + Any CALL_SITE in CHAIN will be iterated to its siblings - via + TAIL_CALL_NEXT. This is inappropriate for CALLER_PC's call_site. */ + std::vector<struct call_site *> chain; + + /* We are not interested in the specific PC inside the callee function. */ + callee_pc = get_pc_function_start (callee_pc); + if (callee_pc == 0) + throw_error (NO_ENTRY_VALUE_ERROR, _("Unable to find function for PC %s"), + paddress (gdbarch, save_callee_pc)); + + /* Mark CALL_SITEs so we do not visit the same ones twice. */ + std::unordered_set<CORE_ADDR> addr_hash; + + /* Do not push CALL_SITE to CHAIN. Push there only the first tail call site + at the target's function. All the possible tail call sites in the + target's function will get iterated as already pushed into CHAIN via their + TAIL_CALL_NEXT. */ + call_site = call_site_for_pc (gdbarch, caller_pc); + + while (call_site) + { + CORE_ADDR target_func_addr; + struct call_site *target_call_site; + + /* CALLER_FRAME with registers is not available for tail-call jumped + frames. */ + target_func_addr = call_site_to_target_addr (gdbarch, call_site, NULL); + + if (target_func_addr == callee_pc) + { + chain_candidate (gdbarch, &retval, &chain); + if (retval == NULL) + break; + + /* There is no way to reach CALLEE_PC again as we would prevent + entering it twice as being already marked in ADDR_HASH. */ + target_call_site = NULL; + } + else + { + struct symbol *target_func; + + target_func = func_addr_to_tail_call_list (gdbarch, target_func_addr); + target_call_site = TYPE_TAIL_CALL_LIST (SYMBOL_TYPE (target_func)); + } + + do + { + /* Attempt to visit TARGET_CALL_SITE. */ + + if (target_call_site) + { + if (addr_hash.insert (target_call_site->pc).second) + { + /* Successfully entered TARGET_CALL_SITE. */ + + chain.push_back (target_call_site); + break; + } + } + + /* Backtrack (without revisiting the originating call_site). Try the + callers's sibling; if there isn't any try the callers's callers's + sibling etc. */ + + target_call_site = NULL; + while (!chain.empty ()) + { + call_site = chain.back (); + chain.pop_back (); + + size_t removed = addr_hash.erase (call_site->pc); + gdb_assert (removed == 1); + + target_call_site = call_site->tail_call_next; + if (target_call_site) + break; + } + } + while (target_call_site); + + if (chain.empty ()) + call_site = NULL; + else + call_site = chain.back (); + } + + if (retval == NULL) + { + struct bound_minimal_symbol msym_caller, msym_callee; + + msym_caller = lookup_minimal_symbol_by_pc (caller_pc); + msym_callee = lookup_minimal_symbol_by_pc (callee_pc); + throw_error (NO_ENTRY_VALUE_ERROR, + _("There are no unambiguously determinable intermediate " + "callers or callees between caller function \"%s\" at %s " + "and callee function \"%s\" at %s"), + (msym_caller.minsym == NULL + ? "???" : msym_caller.minsym->print_name ()), + paddress (gdbarch, caller_pc), + (msym_callee.minsym == NULL + ? "???" : msym_callee.minsym->print_name ()), + paddress (gdbarch, callee_pc)); + } + + return retval; +} + +/* Create and return call_site_chain for CALLER_PC and CALLEE_PC. All the + assumed frames between them use GDBARCH. If valid call_site_chain cannot be + constructed return NULL. */ + +gdb::unique_xmalloc_ptr<call_site_chain> +call_site_find_chain (struct gdbarch *gdbarch, CORE_ADDR caller_pc, + CORE_ADDR callee_pc) +{ + gdb::unique_xmalloc_ptr<call_site_chain> retval; + + try + { + retval = call_site_find_chain_1 (gdbarch, caller_pc, callee_pc); + } + catch (const gdb_exception_error &e) + { + if (e.error == NO_ENTRY_VALUE_ERROR) + { + if (entry_values_debug) + exception_print (gdb_stdout, e); + + return NULL; + } + else + throw; + } + + return retval; +} + +/* Return 1 if KIND and KIND_U match PARAMETER. Return 0 otherwise. */ + +static int +call_site_parameter_matches (struct call_site_parameter *parameter, + enum call_site_parameter_kind kind, + union call_site_parameter_u kind_u) +{ + if (kind == parameter->kind) + switch (kind) + { + case CALL_SITE_PARAMETER_DWARF_REG: + return kind_u.dwarf_reg == parameter->u.dwarf_reg; + + case CALL_SITE_PARAMETER_FB_OFFSET: + return kind_u.fb_offset == parameter->u.fb_offset; + + case CALL_SITE_PARAMETER_PARAM_OFFSET: + return kind_u.param_cu_off == parameter->u.param_cu_off; + } + return 0; +} + +/* Fetch call_site_parameter from caller matching KIND and KIND_U. + FRAME is for callee. + + Function always returns non-NULL, it throws NO_ENTRY_VALUE_ERROR + otherwise. */ + +static struct call_site_parameter * +dwarf_expr_reg_to_entry_parameter (struct frame_info *frame, + enum call_site_parameter_kind kind, + union call_site_parameter_u kind_u, + dwarf2_per_cu_data **per_cu_return, + dwarf2_per_objfile **per_objfile_return) +{ + CORE_ADDR func_addr, caller_pc; + struct gdbarch *gdbarch; + struct frame_info *caller_frame; + struct call_site *call_site; + int iparams; + /* Initialize it just to avoid a GCC false warning. */ + struct call_site_parameter *parameter = NULL; + CORE_ADDR target_addr; + + while (get_frame_type (frame) == INLINE_FRAME) + { + frame = get_prev_frame (frame); + gdb_assert (frame != NULL); + } + + func_addr = get_frame_func (frame); + gdbarch = get_frame_arch (frame); + caller_frame = get_prev_frame (frame); + if (gdbarch != frame_unwind_arch (frame)) + { + struct bound_minimal_symbol msym + = lookup_minimal_symbol_by_pc (func_addr); + struct gdbarch *caller_gdbarch = frame_unwind_arch (frame); + + throw_error (NO_ENTRY_VALUE_ERROR, + _("DW_OP_entry_value resolving callee gdbarch %s " + "(of %s (%s)) does not match caller gdbarch %s"), + gdbarch_bfd_arch_info (gdbarch)->printable_name, + paddress (gdbarch, func_addr), + (msym.minsym == NULL ? "???" + : msym.minsym->print_name ()), + gdbarch_bfd_arch_info (caller_gdbarch)->printable_name); + } + + if (caller_frame == NULL) + { + struct bound_minimal_symbol msym + = lookup_minimal_symbol_by_pc (func_addr); + + throw_error (NO_ENTRY_VALUE_ERROR, _("DW_OP_entry_value resolving " + "requires caller of %s (%s)"), + paddress (gdbarch, func_addr), + (msym.minsym == NULL ? "???" + : msym.minsym->print_name ())); + } + caller_pc = get_frame_pc (caller_frame); + call_site = call_site_for_pc (gdbarch, caller_pc); + + target_addr = call_site_to_target_addr (gdbarch, call_site, caller_frame); + if (target_addr != func_addr) + { + struct minimal_symbol *target_msym, *func_msym; + + target_msym = lookup_minimal_symbol_by_pc (target_addr).minsym; + func_msym = lookup_minimal_symbol_by_pc (func_addr).minsym; + throw_error (NO_ENTRY_VALUE_ERROR, + _("DW_OP_entry_value resolving expects callee %s at %s " + "but the called frame is for %s at %s"), + (target_msym == NULL ? "???" + : target_msym->print_name ()), + paddress (gdbarch, target_addr), + func_msym == NULL ? "???" : func_msym->print_name (), + paddress (gdbarch, func_addr)); + } + + /* No entry value based parameters would be reliable if this function can + call itself via tail calls. */ + func_verify_no_selftailcall (gdbarch, func_addr); + + for (iparams = 0; iparams < call_site->parameter_count; iparams++) + { + parameter = &call_site->parameter[iparams]; + if (call_site_parameter_matches (parameter, kind, kind_u)) + break; + } + if (iparams == call_site->parameter_count) + { + struct minimal_symbol *msym + = lookup_minimal_symbol_by_pc (caller_pc).minsym; + + /* DW_TAG_call_site_parameter will be missing just if GCC could not + determine its value. */ + throw_error (NO_ENTRY_VALUE_ERROR, _("Cannot find matching parameter " + "at DW_TAG_call_site %s at %s"), + paddress (gdbarch, caller_pc), + msym == NULL ? "???" : msym->print_name ()); + } + + *per_cu_return = call_site->per_cu; + *per_objfile_return = call_site->per_objfile; + return parameter; +} + +/* Return value for PARAMETER matching DEREF_SIZE. If DEREF_SIZE is -1, return + the normal DW_AT_call_value block. Otherwise return the + DW_AT_call_data_value (dereferenced) block. + + TYPE and CALLER_FRAME specify how to evaluate the DWARF block into returned + struct value. + + Function always returns non-NULL, non-optimized out value. It throws + NO_ENTRY_VALUE_ERROR if it cannot resolve the value for any reason. */ + +static struct value * +dwarf_entry_parameter_to_value (struct call_site_parameter *parameter, + CORE_ADDR deref_size, struct type *type, + struct frame_info *caller_frame, + dwarf2_per_cu_data *per_cu, + dwarf2_per_objfile *per_objfile) +{ + const gdb_byte *data_src; + gdb_byte *data; + size_t size; + + data_src = deref_size == -1 ? parameter->value : parameter->data_value; + size = deref_size == -1 ? parameter->value_size : parameter->data_value_size; + + /* DEREF_SIZE size is not verified here. */ + if (data_src == NULL) + throw_error (NO_ENTRY_VALUE_ERROR, + _("Cannot resolve DW_AT_call_data_value")); + + /* DW_AT_call_value is a DWARF expression, not a DWARF + location. Postprocessing of DWARF_VALUE_MEMORY would lose the type from + DWARF block. */ + data = (gdb_byte *) alloca (size + 1); + memcpy (data, data_src, size); + data[size] = DW_OP_stack_value; + + return dwarf2_evaluate_loc_desc (type, caller_frame, data, size + 1, per_cu, + per_objfile); +} + +/* VALUE must be of type lval_computed with entry_data_value_funcs. Perform + the indirect method on it, that is use its stored target value, the sole + purpose of entry_data_value_funcs.. */ + +static struct value * +entry_data_value_coerce_ref (const struct value *value) +{ + struct type *checked_type = check_typedef (value_type (value)); + struct value *target_val; + + if (!TYPE_IS_REFERENCE (checked_type)) + return NULL; + + target_val = (struct value *) value_computed_closure (value); + value_incref (target_val); + return target_val; +} + +/* Implement copy_closure. */ + +static void * +entry_data_value_copy_closure (const struct value *v) +{ + struct value *target_val = (struct value *) value_computed_closure (v); + + value_incref (target_val); + return target_val; +} + +/* Implement free_closure. */ + +static void +entry_data_value_free_closure (struct value *v) +{ + struct value *target_val = (struct value *) value_computed_closure (v); + + value_decref (target_val); +} + +/* Vector for methods for an entry value reference where the referenced value + is stored in the caller. On the first dereference use + DW_AT_call_data_value in the caller. */ + +static const struct lval_funcs entry_data_value_funcs = +{ + NULL, /* read */ + NULL, /* write */ + NULL, /* indirect */ + entry_data_value_coerce_ref, + NULL, /* check_synthetic_pointer */ + entry_data_value_copy_closure, + entry_data_value_free_closure +}; + +/* Read parameter of TYPE at (callee) FRAME's function entry. KIND and KIND_U + are used to match DW_AT_location at the caller's + DW_TAG_call_site_parameter. + + Function always returns non-NULL value. It throws NO_ENTRY_VALUE_ERROR if it + cannot resolve the parameter for any reason. */ + +static struct value * +value_of_dwarf_reg_entry (struct type *type, struct frame_info *frame, + enum call_site_parameter_kind kind, + union call_site_parameter_u kind_u) +{ + struct type *checked_type = check_typedef (type); + struct type *target_type = TYPE_TARGET_TYPE (checked_type); + struct frame_info *caller_frame = get_prev_frame (frame); + struct value *outer_val, *target_val, *val; + struct call_site_parameter *parameter; + dwarf2_per_cu_data *caller_per_cu; + dwarf2_per_objfile *caller_per_objfile; + + parameter = dwarf_expr_reg_to_entry_parameter (frame, kind, kind_u, + &caller_per_cu, + &caller_per_objfile); + + outer_val = dwarf_entry_parameter_to_value (parameter, -1 /* deref_size */, + type, caller_frame, + caller_per_cu, + caller_per_objfile); + + /* Check if DW_AT_call_data_value cannot be used. If it should be + used and it is not available do not fall back to OUTER_VAL - dereferencing + TYPE_CODE_REF with non-entry data value would give current value - not the + entry value. */ + + if (!TYPE_IS_REFERENCE (checked_type) + || TYPE_TARGET_TYPE (checked_type) == NULL) + return outer_val; + + target_val = dwarf_entry_parameter_to_value (parameter, + TYPE_LENGTH (target_type), + target_type, caller_frame, + caller_per_cu, + caller_per_objfile); + + val = allocate_computed_value (type, &entry_data_value_funcs, + release_value (target_val).release ()); + + /* Copy the referencing pointer to the new computed value. */ + memcpy (value_contents_raw (val), value_contents_raw (outer_val), + TYPE_LENGTH (checked_type)); + set_value_lazy (val, 0); + + return val; +} + +/* Read parameter of TYPE at (callee) FRAME's function entry. DATA and + SIZE are DWARF block used to match DW_AT_location at the caller's + DW_TAG_call_site_parameter. + + Function always returns non-NULL value. It throws NO_ENTRY_VALUE_ERROR if it + cannot resolve the parameter for any reason. */ + +static struct value * +value_of_dwarf_block_entry (struct type *type, struct frame_info *frame, + const gdb_byte *block, size_t block_len) +{ + union call_site_parameter_u kind_u; + + kind_u.dwarf_reg = dwarf_block_to_dwarf_reg (block, block + block_len); + if (kind_u.dwarf_reg != -1) + return value_of_dwarf_reg_entry (type, frame, CALL_SITE_PARAMETER_DWARF_REG, + kind_u); + + if (dwarf_block_to_fb_offset (block, block + block_len, &kind_u.fb_offset)) + return value_of_dwarf_reg_entry (type, frame, CALL_SITE_PARAMETER_FB_OFFSET, + kind_u); + + /* This can normally happen - throw NO_ENTRY_VALUE_ERROR to get the message + suppressed during normal operation. The expression can be arbitrary if + there is no caller-callee entry value binding expected. */ + throw_error (NO_ENTRY_VALUE_ERROR, + _("DWARF-2 expression error: DW_OP_entry_value is supported " + "only for single DW_OP_reg* or for DW_OP_fbreg(*)")); +} + +struct piece_closure +{ + /* Reference count. */ + int refc = 0; + + /* The objfile from which this closure's expression came. */ + dwarf2_per_objfile *per_objfile = nullptr; + + /* The CU from which this closure's expression came. */ + struct dwarf2_per_cu_data *per_cu = NULL; + + /* The pieces describing this variable. */ + std::vector<dwarf_expr_piece> pieces; + + /* Frame ID of frame to which a register value is relative, used + only by DWARF_VALUE_REGISTER. */ + struct frame_id frame_id; +}; + +/* Allocate a closure for a value formed from separately-described + PIECES. */ + +static struct piece_closure * +allocate_piece_closure (dwarf2_per_cu_data *per_cu, + dwarf2_per_objfile *per_objfile, + std::vector<dwarf_expr_piece> &&pieces, + struct frame_info *frame) +{ + struct piece_closure *c = new piece_closure; + + c->refc = 1; + /* We must capture this here due to sharing of DWARF state. */ + c->per_objfile = per_objfile; + c->per_cu = per_cu; + c->pieces = std::move (pieces); + if (frame == NULL) + c->frame_id = null_frame_id; + else + c->frame_id = get_frame_id (frame); + + for (dwarf_expr_piece &piece : c->pieces) + if (piece.location == DWARF_VALUE_STACK) + value_incref (piece.v.value); + + return c; +} + +/* Return the number of bytes overlapping a contiguous chunk of N_BITS + bits whose first bit is located at bit offset START. */ + +static size_t +bits_to_bytes (ULONGEST start, ULONGEST n_bits) +{ + return (start % 8 + n_bits + 7) / 8; +} + +/* Read or write a pieced value V. If FROM != NULL, operate in "write + mode": copy FROM into the pieces comprising V. If FROM == NULL, + operate in "read mode": fetch the contents of the (lazy) value V by + composing it from its pieces. */ + +static void +rw_pieced_value (struct value *v, struct value *from) +{ + int i; + LONGEST offset = 0, max_offset; + ULONGEST bits_to_skip; + gdb_byte *v_contents; + const gdb_byte *from_contents; + struct piece_closure *c + = (struct piece_closure *) value_computed_closure (v); + gdb::byte_vector buffer; + bool bits_big_endian = type_byte_order (value_type (v)) == BFD_ENDIAN_BIG; + + if (from != NULL) + { + from_contents = value_contents (from); + v_contents = NULL; + } + else + { + if (value_type (v) != value_enclosing_type (v)) + internal_error (__FILE__, __LINE__, + _("Should not be able to create a lazy value with " + "an enclosing type")); + v_contents = value_contents_raw (v); + from_contents = NULL; + } + + bits_to_skip = 8 * value_offset (v); + if (value_bitsize (v)) + { + bits_to_skip += (8 * value_offset (value_parent (v)) + + value_bitpos (v)); + if (from != NULL + && (type_byte_order (value_type (from)) + == BFD_ENDIAN_BIG)) + { + /* Use the least significant bits of FROM. */ + max_offset = 8 * TYPE_LENGTH (value_type (from)); + offset = max_offset - value_bitsize (v); + } + else + max_offset = value_bitsize (v); + } + else + max_offset = 8 * TYPE_LENGTH (value_type (v)); + + /* Advance to the first non-skipped piece. */ + for (i = 0; i < c->pieces.size () && bits_to_skip >= c->pieces[i].size; i++) + bits_to_skip -= c->pieces[i].size; + + for (; i < c->pieces.size () && offset < max_offset; i++) + { + struct dwarf_expr_piece *p = &c->pieces[i]; + size_t this_size_bits, this_size; + + this_size_bits = p->size - bits_to_skip; + if (this_size_bits > max_offset - offset) + this_size_bits = max_offset - offset; + + switch (p->location) + { + case DWARF_VALUE_REGISTER: + { + struct frame_info *frame = frame_find_by_id (c->frame_id); + struct gdbarch *arch = get_frame_arch (frame); + int gdb_regnum = dwarf_reg_to_regnum_or_error (arch, p->v.regno); + ULONGEST reg_bits = 8 * register_size (arch, gdb_regnum); + int optim, unavail; + + if (gdbarch_byte_order (arch) == BFD_ENDIAN_BIG + && p->offset + p->size < reg_bits) + { + /* Big-endian, and we want less than full size. */ + bits_to_skip += reg_bits - (p->offset + p->size); + } + else + bits_to_skip += p->offset; + + this_size = bits_to_bytes (bits_to_skip, this_size_bits); + buffer.resize (this_size); + + if (from == NULL) + { + /* Read mode. */ + if (!get_frame_register_bytes (frame, gdb_regnum, + bits_to_skip / 8, + this_size, buffer.data (), + &optim, &unavail)) + { + if (optim) + mark_value_bits_optimized_out (v, offset, + this_size_bits); + if (unavail) + mark_value_bits_unavailable (v, offset, + this_size_bits); + break; + } + + copy_bitwise (v_contents, offset, + buffer.data (), bits_to_skip % 8, + this_size_bits, bits_big_endian); + } + else + { + /* Write mode. */ + if (bits_to_skip % 8 != 0 || this_size_bits % 8 != 0) + { + /* Data is copied non-byte-aligned into the register. + Need some bits from original register value. */ + get_frame_register_bytes (frame, gdb_regnum, + bits_to_skip / 8, + this_size, buffer.data (), + &optim, &unavail); + if (optim) + throw_error (OPTIMIZED_OUT_ERROR, + _("Can't do read-modify-write to " + "update bitfield; containing word " + "has been optimized out")); + if (unavail) + throw_error (NOT_AVAILABLE_ERROR, + _("Can't do read-modify-write to " + "update bitfield; containing word " + "is unavailable")); + } + + copy_bitwise (buffer.data (), bits_to_skip % 8, + from_contents, offset, + this_size_bits, bits_big_endian); + put_frame_register_bytes (frame, gdb_regnum, + bits_to_skip / 8, + this_size, buffer.data ()); + } + } + break; + + case DWARF_VALUE_MEMORY: + { + bits_to_skip += p->offset; + + CORE_ADDR start_addr = p->v.mem.addr + bits_to_skip / 8; + + if (bits_to_skip % 8 == 0 && this_size_bits % 8 == 0 + && offset % 8 == 0) + { + /* Everything is byte-aligned; no buffer needed. */ + if (from != NULL) + write_memory_with_notification (start_addr, + (from_contents + + offset / 8), + this_size_bits / 8); + else + read_value_memory (v, offset, + p->v.mem.in_stack_memory, + p->v.mem.addr + bits_to_skip / 8, + v_contents + offset / 8, + this_size_bits / 8); + break; + } + + this_size = bits_to_bytes (bits_to_skip, this_size_bits); + buffer.resize (this_size); + + if (from == NULL) + { + /* Read mode. */ + read_value_memory (v, offset, + p->v.mem.in_stack_memory, + p->v.mem.addr + bits_to_skip / 8, + buffer.data (), this_size); + copy_bitwise (v_contents, offset, + buffer.data (), bits_to_skip % 8, + this_size_bits, bits_big_endian); + } + else + { + /* Write mode. */ + if (bits_to_skip % 8 != 0 || this_size_bits % 8 != 0) + { + if (this_size <= 8) + { + /* Perform a single read for small sizes. */ + read_memory (start_addr, buffer.data (), + this_size); + } + else + { + /* Only the first and last bytes can possibly have + any bits reused. */ + read_memory (start_addr, buffer.data (), 1); + read_memory (start_addr + this_size - 1, + &buffer[this_size - 1], 1); + } + } + + copy_bitwise (buffer.data (), bits_to_skip % 8, + from_contents, offset, + this_size_bits, bits_big_endian); + write_memory_with_notification (start_addr, + buffer.data (), + this_size); + } + } + break; + + case DWARF_VALUE_STACK: + { + if (from != NULL) + { + mark_value_bits_optimized_out (v, offset, this_size_bits); + break; + } + + gdbarch *objfile_gdbarch = c->per_objfile->objfile->arch (); + ULONGEST stack_value_size_bits + = 8 * TYPE_LENGTH (value_type (p->v.value)); + + /* Use zeroes if piece reaches beyond stack value. */ + if (p->offset + p->size > stack_value_size_bits) + break; + + /* Piece is anchored at least significant bit end. */ + if (gdbarch_byte_order (objfile_gdbarch) == BFD_ENDIAN_BIG) + bits_to_skip += stack_value_size_bits - p->offset - p->size; + else + bits_to_skip += p->offset; + + copy_bitwise (v_contents, offset, + value_contents_all (p->v.value), + bits_to_skip, + this_size_bits, bits_big_endian); + } + break; + + case DWARF_VALUE_LITERAL: + { + if (from != NULL) + { + mark_value_bits_optimized_out (v, offset, this_size_bits); + break; + } + + ULONGEST literal_size_bits = 8 * p->v.literal.length; + size_t n = this_size_bits; + + /* Cut off at the end of the implicit value. */ + bits_to_skip += p->offset; + if (bits_to_skip >= literal_size_bits) + break; + if (n > literal_size_bits - bits_to_skip) + n = literal_size_bits - bits_to_skip; + + copy_bitwise (v_contents, offset, + p->v.literal.data, bits_to_skip, + n, bits_big_endian); + } + break; + + case DWARF_VALUE_IMPLICIT_POINTER: + if (from != NULL) + { + mark_value_bits_optimized_out (v, offset, this_size_bits); + break; + } + + /* These bits show up as zeros -- but do not cause the value to + be considered optimized-out. */ + break; + + case DWARF_VALUE_OPTIMIZED_OUT: + mark_value_bits_optimized_out (v, offset, this_size_bits); + break; + + default: + internal_error (__FILE__, __LINE__, _("invalid location type")); + } + + offset += this_size_bits; + bits_to_skip = 0; + } +} + + +static void +read_pieced_value (struct value *v) +{ + rw_pieced_value (v, NULL); +} + +static void +write_pieced_value (struct value *to, struct value *from) +{ + rw_pieced_value (to, from); +} + +/* An implementation of an lval_funcs method to see whether a value is + a synthetic pointer. */ + +static int +check_pieced_synthetic_pointer (const struct value *value, LONGEST bit_offset, + int bit_length) +{ + struct piece_closure *c + = (struct piece_closure *) value_computed_closure (value); + int i; + + bit_offset += 8 * value_offset (value); + if (value_bitsize (value)) + bit_offset += value_bitpos (value); + + for (i = 0; i < c->pieces.size () && bit_length > 0; i++) + { + struct dwarf_expr_piece *p = &c->pieces[i]; + size_t this_size_bits = p->size; + + if (bit_offset > 0) + { + if (bit_offset >= this_size_bits) + { + bit_offset -= this_size_bits; + continue; + } + + bit_length -= this_size_bits - bit_offset; + bit_offset = 0; + } + else + bit_length -= this_size_bits; + + if (p->location != DWARF_VALUE_IMPLICIT_POINTER) + return 0; + } + + return 1; +} + +/* Fetch a DW_AT_const_value through a synthetic pointer. */ + +static struct value * +fetch_const_value_from_synthetic_pointer (sect_offset die, LONGEST byte_offset, + dwarf2_per_cu_data *per_cu, + dwarf2_per_objfile *per_objfile, + struct type *type) +{ + struct value *result = NULL; + const gdb_byte *bytes; + LONGEST len; + + auto_obstack temp_obstack; + bytes = dwarf2_fetch_constant_bytes (die, per_cu, per_objfile, + &temp_obstack, &len); + + if (bytes != NULL) + { + if (byte_offset >= 0 + && byte_offset + TYPE_LENGTH (TYPE_TARGET_TYPE (type)) <= len) + { + bytes += byte_offset; + result = value_from_contents (TYPE_TARGET_TYPE (type), bytes); + } + else + invalid_synthetic_pointer (); + } + else + result = allocate_optimized_out_value (TYPE_TARGET_TYPE (type)); + + return result; +} + +/* Fetch the value pointed to by a synthetic pointer. */ + +static struct value * +indirect_synthetic_pointer (sect_offset die, LONGEST byte_offset, + dwarf2_per_cu_data *per_cu, + dwarf2_per_objfile *per_objfile, + struct frame_info *frame, struct type *type, + bool resolve_abstract_p) +{ + /* Fetch the location expression of the DIE we're pointing to. */ + auto get_frame_address_in_block_wrapper = [frame] () + { + return get_frame_address_in_block (frame); + }; + struct dwarf2_locexpr_baton baton + = dwarf2_fetch_die_loc_sect_off (die, per_cu, per_objfile, + get_frame_address_in_block_wrapper, + resolve_abstract_p); + + /* Get type of pointed-to DIE. */ + struct type *orig_type = dwarf2_fetch_die_type_sect_off (die, per_cu, + per_objfile); + if (orig_type == NULL) + invalid_synthetic_pointer (); + + /* If pointed-to DIE has a DW_AT_location, evaluate it and return the + resulting value. Otherwise, it may have a DW_AT_const_value instead, + or it may've been optimized out. */ + if (baton.data != NULL) + return dwarf2_evaluate_loc_desc_full (orig_type, frame, baton.data, + baton.size, baton.per_cu, + baton.per_objfile, + TYPE_TARGET_TYPE (type), + byte_offset); + else + return fetch_const_value_from_synthetic_pointer (die, byte_offset, per_cu, + per_objfile, type); +} + +/* An implementation of an lval_funcs method to indirect through a + pointer. This handles the synthetic pointer case when needed. */ + +static struct value * +indirect_pieced_value (struct value *value) +{ + struct piece_closure *c + = (struct piece_closure *) value_computed_closure (value); + struct type *type; + struct frame_info *frame; + int i, bit_length; + LONGEST bit_offset; + struct dwarf_expr_piece *piece = NULL; + LONGEST byte_offset; + enum bfd_endian byte_order; + + type = check_typedef (value_type (value)); + if (type->code () != TYPE_CODE_PTR) + return NULL; + + bit_length = 8 * TYPE_LENGTH (type); + bit_offset = 8 * value_offset (value); + if (value_bitsize (value)) + bit_offset += value_bitpos (value); + + for (i = 0; i < c->pieces.size () && bit_length > 0; i++) + { + struct dwarf_expr_piece *p = &c->pieces[i]; + size_t this_size_bits = p->size; + + if (bit_offset > 0) + { + if (bit_offset >= this_size_bits) + { + bit_offset -= this_size_bits; + continue; + } + + bit_length -= this_size_bits - bit_offset; + bit_offset = 0; + } + else + bit_length -= this_size_bits; + + if (p->location != DWARF_VALUE_IMPLICIT_POINTER) + return NULL; + + if (bit_length != 0) + error (_("Invalid use of DW_OP_implicit_pointer")); + + piece = p; + break; + } + + gdb_assert (piece != NULL); + frame = get_selected_frame (_("No frame selected.")); + + /* This is an offset requested by GDB, such as value subscripts. + However, due to how synthetic pointers are implemented, this is + always presented to us as a pointer type. This means we have to + sign-extend it manually as appropriate. Use raw + extract_signed_integer directly rather than value_as_address and + sign extend afterwards on architectures that would need it + (mostly everywhere except MIPS, which has signed addresses) as + the later would go through gdbarch_pointer_to_address and thus + return a CORE_ADDR with high bits set on architectures that + encode address spaces and other things in CORE_ADDR. */ + byte_order = gdbarch_byte_order (get_frame_arch (frame)); + byte_offset = extract_signed_integer (value_contents (value), + TYPE_LENGTH (type), byte_order); + byte_offset += piece->v.ptr.offset; + + return indirect_synthetic_pointer (piece->v.ptr.die_sect_off, + byte_offset, c->per_cu, + c->per_objfile, frame, type); +} + +/* Implementation of the coerce_ref method of lval_funcs for synthetic C++ + references. */ + +static struct value * +coerce_pieced_ref (const struct value *value) +{ + struct type *type = check_typedef (value_type (value)); + + if (value_bits_synthetic_pointer (value, value_embedded_offset (value), + TARGET_CHAR_BIT * TYPE_LENGTH (type))) + { + const struct piece_closure *closure + = (struct piece_closure *) value_computed_closure (value); + struct frame_info *frame + = get_selected_frame (_("No frame selected.")); + + /* gdb represents synthetic pointers as pieced values with a single + piece. */ + gdb_assert (closure != NULL); + gdb_assert (closure->pieces.size () == 1); + + return indirect_synthetic_pointer + (closure->pieces[0].v.ptr.die_sect_off, + closure->pieces[0].v.ptr.offset, + closure->per_cu, closure->per_objfile, frame, type); + } + else + { + /* Else: not a synthetic reference; do nothing. */ + return NULL; + } +} + +static void * +copy_pieced_value_closure (const struct value *v) +{ + struct piece_closure *c + = (struct piece_closure *) value_computed_closure (v); + + ++c->refc; + return c; +} + +static void +free_pieced_value_closure (struct value *v) +{ + struct piece_closure *c + = (struct piece_closure *) value_computed_closure (v); + + --c->refc; + if (c->refc == 0) + { + for (dwarf_expr_piece &p : c->pieces) + if (p.location == DWARF_VALUE_STACK) + value_decref (p.v.value); + + delete c; + } +} + +/* Functions for accessing a variable described by DW_OP_piece. */ +static const struct lval_funcs pieced_value_funcs = { + read_pieced_value, + write_pieced_value, + indirect_pieced_value, + coerce_pieced_ref, + check_pieced_synthetic_pointer, + copy_pieced_value_closure, + free_pieced_value_closure +}; + +/* Evaluate a location description, starting at DATA and with length + SIZE, to find the current location of variable of TYPE in the + context of FRAME. If SUBOBJ_TYPE is non-NULL, return instead the + location of the subobject of type SUBOBJ_TYPE at byte offset + SUBOBJ_BYTE_OFFSET within the variable of type TYPE. */ + +static struct value * +dwarf2_evaluate_loc_desc_full (struct type *type, struct frame_info *frame, + const gdb_byte *data, size_t size, + dwarf2_per_cu_data *per_cu, + dwarf2_per_objfile *per_objfile, + struct type *subobj_type, + LONGEST subobj_byte_offset) +{ + struct value *retval; + + if (subobj_type == NULL) + { + subobj_type = type; + subobj_byte_offset = 0; + } + else if (subobj_byte_offset < 0) + invalid_synthetic_pointer (); + + if (size == 0) + return allocate_optimized_out_value (subobj_type); + + dwarf_evaluate_loc_desc ctx (per_objfile); + ctx.frame = frame; + ctx.per_cu = per_cu; + ctx.obj_address = 0; + + scoped_value_mark free_values; + + ctx.gdbarch = per_objfile->objfile->arch (); + ctx.addr_size = per_cu->addr_size (); + ctx.ref_addr_size = per_cu->ref_addr_size (); + + try + { + ctx.eval (data, size); + } + catch (const gdb_exception_error &ex) + { + if (ex.error == NOT_AVAILABLE_ERROR) + { + free_values.free_to_mark (); + retval = allocate_value (subobj_type); + mark_value_bytes_unavailable (retval, 0, + TYPE_LENGTH (subobj_type)); + return retval; + } + else if (ex.error == NO_ENTRY_VALUE_ERROR) + { + if (entry_values_debug) + exception_print (gdb_stdout, ex); + free_values.free_to_mark (); + return allocate_optimized_out_value (subobj_type); + } + else + throw; + } + + if (ctx.pieces.size () > 0) + { + struct piece_closure *c; + ULONGEST bit_size = 0; + + for (dwarf_expr_piece &piece : ctx.pieces) + bit_size += piece.size; + /* Complain if the expression is larger than the size of the + outer type. */ + if (bit_size > 8 * TYPE_LENGTH (type)) + invalid_synthetic_pointer (); + + c = allocate_piece_closure (per_cu, per_objfile, std::move (ctx.pieces), + frame); + /* We must clean up the value chain after creating the piece + closure but before allocating the result. */ + free_values.free_to_mark (); + retval = allocate_computed_value (subobj_type, + &pieced_value_funcs, c); + set_value_offset (retval, subobj_byte_offset); + } + else + { + switch (ctx.location) + { + case DWARF_VALUE_REGISTER: + { + struct gdbarch *arch = get_frame_arch (frame); + int dwarf_regnum + = longest_to_int (value_as_long (ctx.fetch (0))); + int gdb_regnum = dwarf_reg_to_regnum_or_error (arch, dwarf_regnum); + + if (subobj_byte_offset != 0) + error (_("cannot use offset on synthetic pointer to register")); + free_values.free_to_mark (); + retval = value_from_register (subobj_type, gdb_regnum, frame); + if (value_optimized_out (retval)) + { + struct value *tmp; + + /* This means the register has undefined value / was + not saved. As we're computing the location of some + variable etc. in the program, not a value for + inspecting a register ($pc, $sp, etc.), return a + generic optimized out value instead, so that we show + <optimized out> instead of <not saved>. */ + tmp = allocate_value (subobj_type); + value_contents_copy (tmp, 0, retval, 0, + TYPE_LENGTH (subobj_type)); + retval = tmp; + } + } + break; + + case DWARF_VALUE_MEMORY: + { + struct type *ptr_type; + CORE_ADDR address = ctx.fetch_address (0); + bool in_stack_memory = ctx.fetch_in_stack_memory (0); + + /* DW_OP_deref_size (and possibly other operations too) may + create a pointer instead of an address. Ideally, the + pointer to address conversion would be performed as part + of those operations, but the type of the object to + which the address refers is not known at the time of + the operation. Therefore, we do the conversion here + since the type is readily available. */ + + switch (subobj_type->code ()) + { + case TYPE_CODE_FUNC: + case TYPE_CODE_METHOD: + ptr_type = builtin_type (ctx.gdbarch)->builtin_func_ptr; + break; + default: + ptr_type = builtin_type (ctx.gdbarch)->builtin_data_ptr; + break; + } + address = value_as_address (value_from_pointer (ptr_type, address)); + + free_values.free_to_mark (); + retval = value_at_lazy (subobj_type, + address + subobj_byte_offset); + if (in_stack_memory) + set_value_stack (retval, 1); + } + break; + + case DWARF_VALUE_STACK: + { + struct value *value = ctx.fetch (0); + size_t n = TYPE_LENGTH (value_type (value)); + size_t len = TYPE_LENGTH (subobj_type); + size_t max = TYPE_LENGTH (type); + gdbarch *objfile_gdbarch = per_objfile->objfile->arch (); + + if (subobj_byte_offset + len > max) + invalid_synthetic_pointer (); + + /* Preserve VALUE because we are going to free values back + to the mark, but we still need the value contents + below. */ + value_ref_ptr value_holder = value_ref_ptr::new_reference (value); + free_values.free_to_mark (); + + retval = allocate_value (subobj_type); + + /* The given offset is relative to the actual object. */ + if (gdbarch_byte_order (objfile_gdbarch) == BFD_ENDIAN_BIG) + subobj_byte_offset += n - max; + + memcpy (value_contents_raw (retval), + value_contents_all (value) + subobj_byte_offset, len); + } + break; + + case DWARF_VALUE_LITERAL: + { + bfd_byte *contents; + size_t n = TYPE_LENGTH (subobj_type); + + if (subobj_byte_offset + n > ctx.len) + invalid_synthetic_pointer (); + + free_values.free_to_mark (); + retval = allocate_value (subobj_type); + contents = value_contents_raw (retval); + memcpy (contents, ctx.data + subobj_byte_offset, n); + } + break; + + case DWARF_VALUE_OPTIMIZED_OUT: + free_values.free_to_mark (); + retval = allocate_optimized_out_value (subobj_type); + break; + + /* DWARF_VALUE_IMPLICIT_POINTER was converted to a pieced + operation by execute_stack_op. */ + case DWARF_VALUE_IMPLICIT_POINTER: + /* DWARF_VALUE_OPTIMIZED_OUT can't occur in this context -- + it can only be encountered when making a piece. */ + default: + internal_error (__FILE__, __LINE__, _("invalid location type")); + } + } + + set_value_initialized (retval, ctx.initialized); + + return retval; +} + +/* The exported interface to dwarf2_evaluate_loc_desc_full; it always + passes 0 as the byte_offset. */ + +struct value * +dwarf2_evaluate_loc_desc (struct type *type, struct frame_info *frame, + const gdb_byte *data, size_t size, + dwarf2_per_cu_data *per_cu, + dwarf2_per_objfile *per_objfile) +{ + return dwarf2_evaluate_loc_desc_full (type, frame, data, size, per_cu, + per_objfile, NULL, 0); +} + +/* A specialization of dwarf_evaluate_loc_desc that is used by + dwarf2_locexpr_baton_eval. This subclass exists to handle the case + where a caller of dwarf2_locexpr_baton_eval passes in some data, + but with the address being 0. In this situation, we arrange for + memory reads to come from the passed-in buffer. */ + +struct evaluate_for_locexpr_baton : public dwarf_evaluate_loc_desc +{ + evaluate_for_locexpr_baton (dwarf2_per_objfile *per_objfile) + : dwarf_evaluate_loc_desc (per_objfile) + {} + + /* The data that was passed in. */ + gdb::array_view<const gdb_byte> data_view; + + CORE_ADDR get_object_address () override + { + if (data_view.data () == nullptr && obj_address == 0) + error (_("Location address is not set.")); + return obj_address; + } + + void read_mem (gdb_byte *buf, CORE_ADDR addr, size_t len) override + { + if (len == 0) + return; + + /* Prefer the passed-in memory, if it exists. */ + CORE_ADDR offset = addr - obj_address; + if (offset < data_view.size () && offset + len <= data_view.size ()) + { + memcpy (buf, data_view.data (), len); + return; + } + + read_memory (addr, buf, len); + } +}; + +/* Evaluates a dwarf expression and stores the result in VAL, + expecting that the dwarf expression only produces a single + CORE_ADDR. FRAME is the frame in which the expression is + evaluated. ADDR_STACK is a context (location of a variable) and + might be needed to evaluate the location expression. + PUSH_INITIAL_VALUE is true if the address (either from ADDR_STACK, + or the default of 0) should be pushed on the DWARF expression + evaluation stack before evaluating the expression; this is required + by certain forms of DWARF expression. Returns 1 on success, 0 + otherwise. */ + +static int +dwarf2_locexpr_baton_eval (const struct dwarf2_locexpr_baton *dlbaton, + struct frame_info *frame, + const struct property_addr_info *addr_stack, + CORE_ADDR *valp, + bool push_initial_value) +{ + if (dlbaton == NULL || dlbaton->size == 0) + return 0; + + dwarf2_per_objfile *per_objfile = dlbaton->per_objfile; + evaluate_for_locexpr_baton ctx (per_objfile); + + ctx.frame = frame; + ctx.per_cu = dlbaton->per_cu; + if (addr_stack == nullptr) + ctx.obj_address = 0; + else + { + ctx.obj_address = addr_stack->addr; + ctx.data_view = addr_stack->valaddr; + } + + ctx.gdbarch = per_objfile->objfile->arch (); + ctx.addr_size = dlbaton->per_cu->addr_size (); + ctx.ref_addr_size = dlbaton->per_cu->ref_addr_size (); + + if (push_initial_value) + ctx.push_address (ctx.obj_address, false); + + try + { + ctx.eval (dlbaton->data, dlbaton->size); + } + catch (const gdb_exception_error &ex) + { + if (ex.error == NOT_AVAILABLE_ERROR) + { + return 0; + } + else if (ex.error == NO_ENTRY_VALUE_ERROR) + { + if (entry_values_debug) + exception_print (gdb_stdout, ex); + return 0; + } + else + throw; + } + + switch (ctx.location) + { + case DWARF_VALUE_REGISTER: + case DWARF_VALUE_MEMORY: + case DWARF_VALUE_STACK: + *valp = ctx.fetch_address (0); + if (ctx.location == DWARF_VALUE_REGISTER) + *valp = ctx.read_addr_from_reg (*valp); + return 1; + case DWARF_VALUE_LITERAL: + *valp = extract_signed_integer (ctx.data, ctx.len, + gdbarch_byte_order (ctx.gdbarch)); + return 1; + /* Unsupported dwarf values. */ + case DWARF_VALUE_OPTIMIZED_OUT: + case DWARF_VALUE_IMPLICIT_POINTER: + break; + } + + return 0; +} + +/* See dwarf2loc.h. */ + +bool +dwarf2_evaluate_property (const struct dynamic_prop *prop, + struct frame_info *frame, + const struct property_addr_info *addr_stack, + CORE_ADDR *value, + bool push_initial_value) +{ + if (prop == NULL) + return false; + + if (frame == NULL && has_stack_frames ()) + frame = get_selected_frame (NULL); + + switch (prop->kind ()) + { + case PROP_LOCEXPR: + { + const struct dwarf2_property_baton *baton + = (const struct dwarf2_property_baton *) prop->baton (); + gdb_assert (baton->property_type != NULL); + + if (dwarf2_locexpr_baton_eval (&baton->locexpr, frame, addr_stack, + value, push_initial_value)) + { + if (baton->locexpr.is_reference) + { + struct value *val = value_at (baton->property_type, *value); + *value = value_as_address (val); + } + else + { + gdb_assert (baton->property_type != NULL); + + struct type *type = check_typedef (baton->property_type); + if (TYPE_LENGTH (type) < sizeof (CORE_ADDR) + && !TYPE_UNSIGNED (type)) + { + /* If we have a valid return candidate and it's value + is signed, we have to sign-extend the value because + CORE_ADDR on 64bit machine has 8 bytes but address + size of an 32bit application is bytes. */ + const int addr_size + = (baton->locexpr.per_cu->addr_size () + * TARGET_CHAR_BIT); + const CORE_ADDR neg_mask + = (~((CORE_ADDR) 0) << (addr_size - 1)); + + /* Check if signed bit is set and sign-extend values. */ + if (*value & neg_mask) + *value |= neg_mask; + } + } + return true; + } + } + break; + + case PROP_LOCLIST: + { + struct dwarf2_property_baton *baton + = (struct dwarf2_property_baton *) prop->baton (); + CORE_ADDR pc; + const gdb_byte *data; + struct value *val; + size_t size; + + if (frame == NULL + || !get_frame_address_in_block_if_available (frame, &pc)) + return false; + + data = dwarf2_find_location_expression (&baton->loclist, &size, pc); + if (data != NULL) + { + val = dwarf2_evaluate_loc_desc (baton->property_type, frame, data, + size, baton->loclist.per_cu, + baton->loclist.per_objfile); + if (!value_optimized_out (val)) + { + *value = value_as_address (val); + return true; + } + } + } + break; + + case PROP_CONST: + *value = prop->const_val (); + return true; + + case PROP_ADDR_OFFSET: + { + struct dwarf2_property_baton *baton + = (struct dwarf2_property_baton *) prop->baton (); + const struct property_addr_info *pinfo; + struct value *val; + + for (pinfo = addr_stack; pinfo != NULL; pinfo = pinfo->next) + { + /* This approach lets us avoid checking the qualifiers. */ + if (TYPE_MAIN_TYPE (pinfo->type) + == TYPE_MAIN_TYPE (baton->property_type)) + break; + } + if (pinfo == NULL) + error (_("cannot find reference address for offset property")); + if (pinfo->valaddr.data () != NULL) + val = value_from_contents + (baton->offset_info.type, + pinfo->valaddr.data () + baton->offset_info.offset); + else + val = value_at (baton->offset_info.type, + pinfo->addr + baton->offset_info.offset); + *value = value_as_address (val); + return true; + } + } + + return false; +} + +/* See dwarf2loc.h. */ + +void +dwarf2_compile_property_to_c (string_file *stream, + const char *result_name, + struct gdbarch *gdbarch, + unsigned char *registers_used, + const struct dynamic_prop *prop, + CORE_ADDR pc, + struct symbol *sym) +{ + struct dwarf2_property_baton *baton + = (struct dwarf2_property_baton *) prop->baton (); + const gdb_byte *data; + size_t size; + dwarf2_per_cu_data *per_cu; + dwarf2_per_objfile *per_objfile; + + if (prop->kind () == PROP_LOCEXPR) + { + data = baton->locexpr.data; + size = baton->locexpr.size; + per_cu = baton->locexpr.per_cu; + per_objfile = baton->locexpr.per_objfile; + } + else + { + gdb_assert (prop->kind () == PROP_LOCLIST); + + data = dwarf2_find_location_expression (&baton->loclist, &size, pc); + per_cu = baton->loclist.per_cu; + per_objfile = baton->loclist.per_objfile; + } + + compile_dwarf_bounds_to_c (stream, result_name, prop, sym, pc, + gdbarch, registers_used, + per_cu->addr_size (), + data, data + size, per_cu, per_objfile); +} + + +/* Helper functions and baton for dwarf2_loc_desc_get_symbol_read_needs. */ + +class symbol_needs_eval_context : public dwarf_expr_context +{ +public: + symbol_needs_eval_context (dwarf2_per_objfile *per_objfile) + : dwarf_expr_context (per_objfile) + {} + + enum symbol_needs_kind needs; + struct dwarf2_per_cu_data *per_cu; + + /* Reads from registers do require a frame. */ + CORE_ADDR read_addr_from_reg (int regnum) override + { + needs = SYMBOL_NEEDS_FRAME; + return 1; + } + + /* "get_reg_value" callback: Reads from registers do require a + frame. */ + + struct value *get_reg_value (struct type *type, int regnum) override + { + needs = SYMBOL_NEEDS_FRAME; + return value_zero (type, not_lval); + } + + /* Reads from memory do not require a frame. */ + void read_mem (gdb_byte *buf, CORE_ADDR addr, size_t len) override + { + memset (buf, 0, len); + } + + /* Frame-relative accesses do require a frame. */ + void get_frame_base (const gdb_byte **start, size_t *length) override + { + static gdb_byte lit0 = DW_OP_lit0; + + *start = &lit0; + *length = 1; + + needs = SYMBOL_NEEDS_FRAME; + } + + /* CFA accesses require a frame. */ + CORE_ADDR get_frame_cfa () override + { + needs = SYMBOL_NEEDS_FRAME; + return 1; + } + + CORE_ADDR get_frame_pc () override + { + needs = SYMBOL_NEEDS_FRAME; + return 1; + } + + /* Thread-local accesses require registers, but not a frame. */ + CORE_ADDR get_tls_address (CORE_ADDR offset) override + { + if (needs <= SYMBOL_NEEDS_REGISTERS) + needs = SYMBOL_NEEDS_REGISTERS; + return 1; + } + + /* Helper interface of per_cu_dwarf_call for + dwarf2_loc_desc_get_symbol_read_needs. */ + + void dwarf_call (cu_offset die_offset) override + { + per_cu_dwarf_call (this, die_offset, per_cu, per_objfile); + } + + /* Helper interface of sect_variable_value for + dwarf2_loc_desc_get_symbol_read_needs. */ + + struct value *dwarf_variable_value (sect_offset sect_off) override + { + return sect_variable_value (this, sect_off, per_cu, per_objfile); + } + + /* DW_OP_entry_value accesses require a caller, therefore a + frame. */ + + void push_dwarf_reg_entry_value (enum call_site_parameter_kind kind, + union call_site_parameter_u kind_u, + int deref_size) override + { + needs = SYMBOL_NEEDS_FRAME; + + /* The expression may require some stub values on DWARF stack. */ + push_address (0, 0); + } + + /* DW_OP_addrx and DW_OP_GNU_addr_index doesn't require a frame. */ + + CORE_ADDR get_addr_index (unsigned int index) override + { + /* Nothing to do. */ + return 1; + } + + /* DW_OP_push_object_address has a frame already passed through. */ + + CORE_ADDR get_object_address () override + { + /* Nothing to do. */ + return 1; + } +}; + +/* Compute the correct symbol_needs_kind value for the location + expression at DATA (length SIZE). */ + +static enum symbol_needs_kind +dwarf2_loc_desc_get_symbol_read_needs (const gdb_byte *data, size_t size, + dwarf2_per_cu_data *per_cu, + dwarf2_per_objfile *per_objfile) +{ + scoped_value_mark free_values; + + symbol_needs_eval_context ctx (per_objfile); + + ctx.needs = SYMBOL_NEEDS_NONE; + ctx.per_cu = per_cu; + ctx.gdbarch = per_objfile->objfile->arch (); + ctx.addr_size = per_cu->addr_size (); + ctx.ref_addr_size = per_cu->ref_addr_size (); + + ctx.eval (data, size); + + bool in_reg = ctx.location == DWARF_VALUE_REGISTER; + + /* If the location has several pieces, and any of them are in + registers, then we will need a frame to fetch them from. */ + for (dwarf_expr_piece &p : ctx.pieces) + if (p.location == DWARF_VALUE_REGISTER) + in_reg = true; + + if (in_reg) + ctx.needs = SYMBOL_NEEDS_FRAME; + + return ctx.needs; +} + +/* A helper function that throws an unimplemented error mentioning a + given DWARF operator. */ + +static void ATTRIBUTE_NORETURN +unimplemented (unsigned int op) +{ + const char *name = get_DW_OP_name (op); + + if (name) + error (_("DWARF operator %s cannot be translated to an agent expression"), + name); + else + error (_("Unknown DWARF operator 0x%02x cannot be translated " + "to an agent expression"), + op); +} + +/* See dwarf2loc.h. + + This is basically a wrapper on gdbarch_dwarf2_reg_to_regnum so that we + can issue a complaint, which is better than having every target's + implementation of dwarf2_reg_to_regnum do it. */ + +int +dwarf_reg_to_regnum (struct gdbarch *arch, int dwarf_reg) +{ + int reg = gdbarch_dwarf2_reg_to_regnum (arch, dwarf_reg); + + if (reg == -1) + { + complaint (_("bad DWARF register number %d"), dwarf_reg); + } + return reg; +} + +/* Subroutine of dwarf_reg_to_regnum_or_error to simplify it. + Throw an error because DWARF_REG is bad. */ + +static void +throw_bad_regnum_error (ULONGEST dwarf_reg) +{ + /* Still want to print -1 as "-1". + We *could* have int and ULONGEST versions of dwarf2_reg_to_regnum_or_error + but that's overkill for now. */ + if ((int) dwarf_reg == dwarf_reg) + error (_("Unable to access DWARF register number %d"), (int) dwarf_reg); + error (_("Unable to access DWARF register number %s"), + pulongest (dwarf_reg)); +} + +/* See dwarf2loc.h. */ + +int +dwarf_reg_to_regnum_or_error (struct gdbarch *arch, ULONGEST dwarf_reg) +{ + int reg; + + if (dwarf_reg > INT_MAX) + throw_bad_regnum_error (dwarf_reg); + /* Yes, we will end up issuing a complaint and an error if DWARF_REG is + bad, but that's ok. */ + reg = dwarf_reg_to_regnum (arch, (int) dwarf_reg); + if (reg == -1) + throw_bad_regnum_error (dwarf_reg); + return reg; +} + +/* A helper function that emits an access to memory. ARCH is the + target architecture. EXPR is the expression which we are building. + NBITS is the number of bits we want to read. This emits the + opcodes needed to read the memory and then extract the desired + bits. */ + +static void +access_memory (struct gdbarch *arch, struct agent_expr *expr, ULONGEST nbits) +{ + ULONGEST nbytes = (nbits + 7) / 8; + + gdb_assert (nbytes > 0 && nbytes <= sizeof (LONGEST)); + + if (expr->tracing) + ax_trace_quick (expr, nbytes); + + if (nbits <= 8) + ax_simple (expr, aop_ref8); + else if (nbits <= 16) + ax_simple (expr, aop_ref16); + else if (nbits <= 32) + ax_simple (expr, aop_ref32); + else + ax_simple (expr, aop_ref64); + + /* If we read exactly the number of bytes we wanted, we're done. */ + if (8 * nbytes == nbits) + return; + + if (gdbarch_byte_order (arch) == BFD_ENDIAN_BIG) + { + /* On a bits-big-endian machine, we want the high-order + NBITS. */ + ax_const_l (expr, 8 * nbytes - nbits); + ax_simple (expr, aop_rsh_unsigned); + } + else + { + /* On a bits-little-endian box, we want the low-order NBITS. */ + ax_zero_ext (expr, nbits); + } +} + +/* Compile a DWARF location expression to an agent expression. + + EXPR is the agent expression we are building. + LOC is the agent value we modify. + ARCH is the architecture. + ADDR_SIZE is the size of addresses, in bytes. + OP_PTR is the start of the location expression. + OP_END is one past the last byte of the location expression. + + This will throw an exception for various kinds of errors -- for + example, if the expression cannot be compiled, or if the expression + is invalid. */ + +static void +dwarf2_compile_expr_to_ax (struct agent_expr *expr, struct axs_value *loc, + unsigned int addr_size, const gdb_byte *op_ptr, + const gdb_byte *op_end, + dwarf2_per_cu_data *per_cu, + dwarf2_per_objfile *per_objfile) +{ + gdbarch *arch = expr->gdbarch; + std::vector<int> dw_labels, patches; + const gdb_byte * const base = op_ptr; + const gdb_byte *previous_piece = op_ptr; + enum bfd_endian byte_order = gdbarch_byte_order (arch); + ULONGEST bits_collected = 0; + unsigned int addr_size_bits = 8 * addr_size; + bool bits_big_endian = byte_order == BFD_ENDIAN_BIG; + + std::vector<int> offsets (op_end - op_ptr, -1); + + /* By default we are making an address. */ + loc->kind = axs_lvalue_memory; + + while (op_ptr < op_end) + { + enum dwarf_location_atom op = (enum dwarf_location_atom) *op_ptr; + uint64_t uoffset, reg; + int64_t offset; + int i; + + offsets[op_ptr - base] = expr->len; + ++op_ptr; + + /* Our basic approach to code generation is to map DWARF + operations directly to AX operations. However, there are + some differences. + + First, DWARF works on address-sized units, but AX always uses + LONGEST. For most operations we simply ignore this + difference; instead we generate sign extensions as needed + before division and comparison operations. It would be nice + to omit the sign extensions, but there is no way to determine + the size of the target's LONGEST. (This code uses the size + of the host LONGEST in some cases -- that is a bug but it is + difficult to fix.) + + Second, some DWARF operations cannot be translated to AX. + For these we simply fail. See + http://sourceware.org/bugzilla/show_bug.cgi?id=11662. */ + switch (op) + { + case DW_OP_lit0: + case DW_OP_lit1: + case DW_OP_lit2: + case DW_OP_lit3: + case DW_OP_lit4: + case DW_OP_lit5: + case DW_OP_lit6: + case DW_OP_lit7: + case DW_OP_lit8: + case DW_OP_lit9: + case DW_OP_lit10: + case DW_OP_lit11: + case DW_OP_lit12: + case DW_OP_lit13: + case DW_OP_lit14: + case DW_OP_lit15: + case DW_OP_lit16: + case DW_OP_lit17: + case DW_OP_lit18: + case DW_OP_lit19: + case DW_OP_lit20: + case DW_OP_lit21: + case DW_OP_lit22: + case DW_OP_lit23: + case DW_OP_lit24: + case DW_OP_lit25: + case DW_OP_lit26: + case DW_OP_lit27: + case DW_OP_lit28: + case DW_OP_lit29: + case DW_OP_lit30: + case DW_OP_lit31: + ax_const_l (expr, op - DW_OP_lit0); + break; + + case DW_OP_addr: + uoffset = extract_unsigned_integer (op_ptr, addr_size, byte_order); + op_ptr += addr_size; + /* Some versions of GCC emit DW_OP_addr before + DW_OP_GNU_push_tls_address. In this case the value is an + index, not an address. We don't support things like + branching between the address and the TLS op. */ + if (op_ptr >= op_end || *op_ptr != DW_OP_GNU_push_tls_address) + uoffset += per_objfile->objfile->text_section_offset (); + ax_const_l (expr, uoffset); + break; + + case DW_OP_const1u: + ax_const_l (expr, extract_unsigned_integer (op_ptr, 1, byte_order)); + op_ptr += 1; + break; + + case DW_OP_const1s: + ax_const_l (expr, extract_signed_integer (op_ptr, 1, byte_order)); + op_ptr += 1; + break; + + case DW_OP_const2u: + ax_const_l (expr, extract_unsigned_integer (op_ptr, 2, byte_order)); + op_ptr += 2; + break; + + case DW_OP_const2s: + ax_const_l (expr, extract_signed_integer (op_ptr, 2, byte_order)); + op_ptr += 2; + break; + + case DW_OP_const4u: + ax_const_l (expr, extract_unsigned_integer (op_ptr, 4, byte_order)); + op_ptr += 4; + break; + + case DW_OP_const4s: + ax_const_l (expr, extract_signed_integer (op_ptr, 4, byte_order)); + op_ptr += 4; + break; + + case DW_OP_const8u: + ax_const_l (expr, extract_unsigned_integer (op_ptr, 8, byte_order)); + op_ptr += 8; + break; + + case DW_OP_const8s: + ax_const_l (expr, extract_signed_integer (op_ptr, 8, byte_order)); + op_ptr += 8; + break; + + case DW_OP_constu: + op_ptr = safe_read_uleb128 (op_ptr, op_end, &uoffset); + ax_const_l (expr, uoffset); + break; + + case DW_OP_consts: + op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset); + ax_const_l (expr, offset); + break; + + case DW_OP_reg0: + case DW_OP_reg1: + case DW_OP_reg2: + case DW_OP_reg3: + case DW_OP_reg4: + case DW_OP_reg5: + case DW_OP_reg6: + case DW_OP_reg7: + case DW_OP_reg8: + case DW_OP_reg9: + case DW_OP_reg10: + case DW_OP_reg11: + case DW_OP_reg12: + case DW_OP_reg13: + case DW_OP_reg14: + case DW_OP_reg15: + case DW_OP_reg16: + case DW_OP_reg17: + case DW_OP_reg18: + case DW_OP_reg19: + case DW_OP_reg20: + case DW_OP_reg21: + case DW_OP_reg22: + case DW_OP_reg23: + case DW_OP_reg24: + case DW_OP_reg25: + case DW_OP_reg26: + case DW_OP_reg27: + case DW_OP_reg28: + case DW_OP_reg29: + case DW_OP_reg30: + case DW_OP_reg31: + dwarf_expr_require_composition (op_ptr, op_end, "DW_OP_regx"); + loc->u.reg = dwarf_reg_to_regnum_or_error (arch, op - DW_OP_reg0); + loc->kind = axs_lvalue_register; + break; + + case DW_OP_regx: + op_ptr = safe_read_uleb128 (op_ptr, op_end, ®); + dwarf_expr_require_composition (op_ptr, op_end, "DW_OP_regx"); + loc->u.reg = dwarf_reg_to_regnum_or_error (arch, reg); + loc->kind = axs_lvalue_register; + break; + + case DW_OP_implicit_value: + { + uint64_t len; + + op_ptr = safe_read_uleb128 (op_ptr, op_end, &len); + if (op_ptr + len > op_end) + error (_("DW_OP_implicit_value: too few bytes available.")); + if (len > sizeof (ULONGEST)) + error (_("Cannot translate DW_OP_implicit_value of %d bytes"), + (int) len); + + ax_const_l (expr, extract_unsigned_integer (op_ptr, len, + byte_order)); + op_ptr += len; + dwarf_expr_require_composition (op_ptr, op_end, + "DW_OP_implicit_value"); + + loc->kind = axs_rvalue; + } + break; + + case DW_OP_stack_value: + dwarf_expr_require_composition (op_ptr, op_end, "DW_OP_stack_value"); + loc->kind = axs_rvalue; + break; + + case DW_OP_breg0: + case DW_OP_breg1: + case DW_OP_breg2: + case DW_OP_breg3: + case DW_OP_breg4: + case DW_OP_breg5: + case DW_OP_breg6: + case DW_OP_breg7: + case DW_OP_breg8: + case DW_OP_breg9: + case DW_OP_breg10: + case DW_OP_breg11: + case DW_OP_breg12: + case DW_OP_breg13: + case DW_OP_breg14: + case DW_OP_breg15: + case DW_OP_breg16: + case DW_OP_breg17: + case DW_OP_breg18: + case DW_OP_breg19: + case DW_OP_breg20: + case DW_OP_breg21: + case DW_OP_breg22: + case DW_OP_breg23: + case DW_OP_breg24: + case DW_OP_breg25: + case DW_OP_breg26: + case DW_OP_breg27: + case DW_OP_breg28: + case DW_OP_breg29: + case DW_OP_breg30: + case DW_OP_breg31: + op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset); + i = dwarf_reg_to_regnum_or_error (arch, op - DW_OP_breg0); + ax_reg (expr, i); + if (offset != 0) + { + ax_const_l (expr, offset); + ax_simple (expr, aop_add); + } + break; + + case DW_OP_bregx: + { + op_ptr = safe_read_uleb128 (op_ptr, op_end, ®); + op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset); + i = dwarf_reg_to_regnum_or_error (arch, reg); + ax_reg (expr, i); + if (offset != 0) + { + ax_const_l (expr, offset); + ax_simple (expr, aop_add); + } + } + break; + + case DW_OP_fbreg: + { + const gdb_byte *datastart; + size_t datalen; + const struct block *b; + struct symbol *framefunc; + + b = block_for_pc (expr->scope); + + if (!b) + error (_("No block found for address")); + + framefunc = block_linkage_function (b); + + if (!framefunc) + error (_("No function found for block")); + + func_get_frame_base_dwarf_block (framefunc, expr->scope, + &datastart, &datalen); + + op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset); + dwarf2_compile_expr_to_ax (expr, loc, addr_size, datastart, + datastart + datalen, per_cu, + per_objfile); + if (loc->kind == axs_lvalue_register) + require_rvalue (expr, loc); + + if (offset != 0) + { + ax_const_l (expr, offset); + ax_simple (expr, aop_add); + } + + loc->kind = axs_lvalue_memory; + } + break; + + case DW_OP_dup: + ax_simple (expr, aop_dup); + break; + + case DW_OP_drop: + ax_simple (expr, aop_pop); + break; + + case DW_OP_pick: + offset = *op_ptr++; + ax_pick (expr, offset); + break; + + case DW_OP_swap: + ax_simple (expr, aop_swap); + break; + + case DW_OP_over: + ax_pick (expr, 1); + break; + + case DW_OP_rot: + ax_simple (expr, aop_rot); + break; + + case DW_OP_deref: + case DW_OP_deref_size: + { + int size; + + if (op == DW_OP_deref_size) + size = *op_ptr++; + else + size = addr_size; + + if (size != 1 && size != 2 && size != 4 && size != 8) + error (_("Unsupported size %d in %s"), + size, get_DW_OP_name (op)); + access_memory (arch, expr, size * TARGET_CHAR_BIT); + } + break; + + case DW_OP_abs: + /* Sign extend the operand. */ + ax_ext (expr, addr_size_bits); + ax_simple (expr, aop_dup); + ax_const_l (expr, 0); + ax_simple (expr, aop_less_signed); + ax_simple (expr, aop_log_not); + i = ax_goto (expr, aop_if_goto); + /* We have to emit 0 - X. */ + ax_const_l (expr, 0); + ax_simple (expr, aop_swap); + ax_simple (expr, aop_sub); + ax_label (expr, i, expr->len); + break; + + case DW_OP_neg: + /* No need to sign extend here. */ + ax_const_l (expr, 0); + ax_simple (expr, aop_swap); + ax_simple (expr, aop_sub); + break; + + case DW_OP_not: + /* Sign extend the operand. */ + ax_ext (expr, addr_size_bits); + ax_simple (expr, aop_bit_not); + break; + + case DW_OP_plus_uconst: + op_ptr = safe_read_uleb128 (op_ptr, op_end, ®); + /* It would be really weird to emit `DW_OP_plus_uconst 0', + but we micro-optimize anyhow. */ + if (reg != 0) + { + ax_const_l (expr, reg); + ax_simple (expr, aop_add); + } + break; + + case DW_OP_and: + ax_simple (expr, aop_bit_and); + break; + + case DW_OP_div: + /* Sign extend the operands. */ + ax_ext (expr, addr_size_bits); + ax_simple (expr, aop_swap); + ax_ext (expr, addr_size_bits); + ax_simple (expr, aop_swap); + ax_simple (expr, aop_div_signed); + break; + + case DW_OP_minus: + ax_simple (expr, aop_sub); + break; + + case DW_OP_mod: + ax_simple (expr, aop_rem_unsigned); + break; + + case DW_OP_mul: + ax_simple (expr, aop_mul); + break; + + case DW_OP_or: + ax_simple (expr, aop_bit_or); + break; + + case DW_OP_plus: + ax_simple (expr, aop_add); + break; + + case DW_OP_shl: + ax_simple (expr, aop_lsh); + break; + + case DW_OP_shr: + ax_simple (expr, aop_rsh_unsigned); + break; + + case DW_OP_shra: + ax_simple (expr, aop_rsh_signed); + break; + + case DW_OP_xor: + ax_simple (expr, aop_bit_xor); + break; + + case DW_OP_le: + /* Sign extend the operands. */ + ax_ext (expr, addr_size_bits); + ax_simple (expr, aop_swap); + ax_ext (expr, addr_size_bits); + /* Note no swap here: A <= B is !(B < A). */ + ax_simple (expr, aop_less_signed); + ax_simple (expr, aop_log_not); + break; + + case DW_OP_ge: + /* Sign extend the operands. */ + ax_ext (expr, addr_size_bits); + ax_simple (expr, aop_swap); + ax_ext (expr, addr_size_bits); + ax_simple (expr, aop_swap); + /* A >= B is !(A < B). */ + ax_simple (expr, aop_less_signed); + ax_simple (expr, aop_log_not); + break; + + case DW_OP_eq: + /* Sign extend the operands. */ + ax_ext (expr, addr_size_bits); + ax_simple (expr, aop_swap); + ax_ext (expr, addr_size_bits); + /* No need for a second swap here. */ + ax_simple (expr, aop_equal); + break; + + case DW_OP_lt: + /* Sign extend the operands. */ + ax_ext (expr, addr_size_bits); + ax_simple (expr, aop_swap); + ax_ext (expr, addr_size_bits); + ax_simple (expr, aop_swap); + ax_simple (expr, aop_less_signed); + break; + + case DW_OP_gt: + /* Sign extend the operands. */ + ax_ext (expr, addr_size_bits); + ax_simple (expr, aop_swap); + ax_ext (expr, addr_size_bits); + /* Note no swap here: A > B is B < A. */ + ax_simple (expr, aop_less_signed); + break; + + case DW_OP_ne: + /* Sign extend the operands. */ + ax_ext (expr, addr_size_bits); + ax_simple (expr, aop_swap); + ax_ext (expr, addr_size_bits); + /* No need for a swap here. */ + ax_simple (expr, aop_equal); + ax_simple (expr, aop_log_not); + break; + + case DW_OP_call_frame_cfa: + { + int regnum; + CORE_ADDR text_offset; + LONGEST off; + const gdb_byte *cfa_start, *cfa_end; + + if (dwarf2_fetch_cfa_info (arch, expr->scope, per_cu, + ®num, &off, + &text_offset, &cfa_start, &cfa_end)) + { + /* Register. */ + ax_reg (expr, regnum); + if (off != 0) + { + ax_const_l (expr, off); + ax_simple (expr, aop_add); + } + } + else + { + /* Another expression. */ + ax_const_l (expr, text_offset); + dwarf2_compile_expr_to_ax (expr, loc, addr_size, cfa_start, + cfa_end, per_cu, per_objfile); + } + + loc->kind = axs_lvalue_memory; + } + break; + + case DW_OP_GNU_push_tls_address: + case DW_OP_form_tls_address: + unimplemented (op); + break; + + case DW_OP_push_object_address: + unimplemented (op); + break; + + case DW_OP_skip: + offset = extract_signed_integer (op_ptr, 2, byte_order); + op_ptr += 2; + i = ax_goto (expr, aop_goto); + dw_labels.push_back (op_ptr + offset - base); + patches.push_back (i); + break; + + case DW_OP_bra: + offset = extract_signed_integer (op_ptr, 2, byte_order); + op_ptr += 2; + /* Zero extend the operand. */ + ax_zero_ext (expr, addr_size_bits); + i = ax_goto (expr, aop_if_goto); + dw_labels.push_back (op_ptr + offset - base); + patches.push_back (i); + break; + + case DW_OP_nop: + break; + + case DW_OP_piece: + case DW_OP_bit_piece: + { + uint64_t size; + + if (op_ptr - 1 == previous_piece) + error (_("Cannot translate empty pieces to agent expressions")); + previous_piece = op_ptr - 1; + + op_ptr = safe_read_uleb128 (op_ptr, op_end, &size); + if (op == DW_OP_piece) + { + size *= 8; + uoffset = 0; + } + else + op_ptr = safe_read_uleb128 (op_ptr, op_end, &uoffset); + + if (bits_collected + size > 8 * sizeof (LONGEST)) + error (_("Expression pieces exceed word size")); + + /* Access the bits. */ + switch (loc->kind) + { + case axs_lvalue_register: + ax_reg (expr, loc->u.reg); + break; + + case axs_lvalue_memory: + /* Offset the pointer, if needed. */ + if (uoffset > 8) + { + ax_const_l (expr, uoffset / 8); + ax_simple (expr, aop_add); + uoffset %= 8; + } + access_memory (arch, expr, size); + break; + } + + /* For a bits-big-endian target, shift up what we already + have. For a bits-little-endian target, shift up the + new data. Note that there is a potential bug here if + the DWARF expression leaves multiple values on the + stack. */ + if (bits_collected > 0) + { + if (bits_big_endian) + { + ax_simple (expr, aop_swap); + ax_const_l (expr, size); + ax_simple (expr, aop_lsh); + /* We don't need a second swap here, because + aop_bit_or is symmetric. */ + } + else + { + ax_const_l (expr, size); + ax_simple (expr, aop_lsh); + } + ax_simple (expr, aop_bit_or); + } + + bits_collected += size; + loc->kind = axs_rvalue; + } + break; + + case DW_OP_GNU_uninit: + unimplemented (op); + + case DW_OP_call2: + case DW_OP_call4: + { + struct dwarf2_locexpr_baton block; + int size = (op == DW_OP_call2 ? 2 : 4); + + uoffset = extract_unsigned_integer (op_ptr, size, byte_order); + op_ptr += size; + + auto get_frame_pc_from_expr = [expr] () + { + return expr->scope; + }; + cu_offset cuoffset = (cu_offset) uoffset; + block = dwarf2_fetch_die_loc_cu_off (cuoffset, per_cu, per_objfile, + get_frame_pc_from_expr); + + /* DW_OP_call_ref is currently not supported. */ + gdb_assert (block.per_cu == per_cu); + + dwarf2_compile_expr_to_ax (expr, loc, addr_size, block.data, + block.data + block.size, per_cu, + per_objfile); + } + break; + + case DW_OP_call_ref: + unimplemented (op); + + case DW_OP_GNU_variable_value: + unimplemented (op); + + default: + unimplemented (op); + } + } + + /* Patch all the branches we emitted. */ + for (int i = 0; i < patches.size (); ++i) + { + int targ = offsets[dw_labels[i]]; + if (targ == -1) + internal_error (__FILE__, __LINE__, _("invalid label")); + ax_label (expr, patches[i], targ); + } +} + + +/* Return the value of SYMBOL in FRAME using the DWARF-2 expression + evaluator to calculate the location. */ +static struct value * +locexpr_read_variable (struct symbol *symbol, struct frame_info *frame) +{ + struct dwarf2_locexpr_baton *dlbaton + = (struct dwarf2_locexpr_baton *) SYMBOL_LOCATION_BATON (symbol); + struct value *val; + + val = dwarf2_evaluate_loc_desc (SYMBOL_TYPE (symbol), frame, dlbaton->data, + dlbaton->size, dlbaton->per_cu, + dlbaton->per_objfile); + + return val; +} + +/* Return the value of SYMBOL in FRAME at (callee) FRAME's function + entry. SYMBOL should be a function parameter, otherwise NO_ENTRY_VALUE_ERROR + will be thrown. */ + +static struct value * +locexpr_read_variable_at_entry (struct symbol *symbol, struct frame_info *frame) +{ + struct dwarf2_locexpr_baton *dlbaton + = (struct dwarf2_locexpr_baton *) SYMBOL_LOCATION_BATON (symbol); + + return value_of_dwarf_block_entry (SYMBOL_TYPE (symbol), frame, dlbaton->data, + dlbaton->size); +} + +/* Implementation of get_symbol_read_needs from + symbol_computed_ops. */ + +static enum symbol_needs_kind +locexpr_get_symbol_read_needs (struct symbol *symbol) +{ + struct dwarf2_locexpr_baton *dlbaton + = (struct dwarf2_locexpr_baton *) SYMBOL_LOCATION_BATON (symbol); + + return dwarf2_loc_desc_get_symbol_read_needs (dlbaton->data, dlbaton->size, + dlbaton->per_cu, + dlbaton->per_objfile); +} + +/* Return true if DATA points to the end of a piece. END is one past + the last byte in the expression. */ + +static int +piece_end_p (const gdb_byte *data, const gdb_byte *end) +{ + return data == end || data[0] == DW_OP_piece || data[0] == DW_OP_bit_piece; +} + +/* Helper for locexpr_describe_location_piece that finds the name of a + DWARF register. */ + +static const char * +locexpr_regname (struct gdbarch *gdbarch, int dwarf_regnum) +{ + int regnum; + + /* This doesn't use dwarf_reg_to_regnum_or_error on purpose. + We'd rather print *something* here than throw an error. */ + regnum = dwarf_reg_to_regnum (gdbarch, dwarf_regnum); + /* gdbarch_register_name may just return "", return something more + descriptive for bad register numbers. */ + if (regnum == -1) + { + /* The text is output as "$bad_register_number". + That is why we use the underscores. */ + return _("bad_register_number"); + } + return gdbarch_register_name (gdbarch, regnum); +} + +/* Nicely describe a single piece of a location, returning an updated + position in the bytecode sequence. This function cannot recognize + all locations; if a location is not recognized, it simply returns + DATA. If there is an error during reading, e.g. we run off the end + of the buffer, an error is thrown. */ + +static const gdb_byte * +locexpr_describe_location_piece (struct symbol *symbol, struct ui_file *stream, + CORE_ADDR addr, dwarf2_per_cu_data *per_cu, + dwarf2_per_objfile *per_objfile, + const gdb_byte *data, const gdb_byte *end, + unsigned int addr_size) +{ + objfile *objfile = per_objfile->objfile; + struct gdbarch *gdbarch = objfile->arch (); + size_t leb128_size; + + if (data[0] >= DW_OP_reg0 && data[0] <= DW_OP_reg31) + { + fprintf_filtered (stream, _("a variable in $%s"), + locexpr_regname (gdbarch, data[0] - DW_OP_reg0)); + data += 1; + } + else if (data[0] == DW_OP_regx) + { + uint64_t reg; + + data = safe_read_uleb128 (data + 1, end, ®); + fprintf_filtered (stream, _("a variable in $%s"), + locexpr_regname (gdbarch, reg)); + } + else if (data[0] == DW_OP_fbreg) + { + const struct block *b; + struct symbol *framefunc; + int frame_reg = 0; + int64_t frame_offset; + const gdb_byte *base_data, *new_data, *save_data = data; + size_t base_size; + int64_t base_offset = 0; + + new_data = safe_read_sleb128 (data + 1, end, &frame_offset); + if (!piece_end_p (new_data, end)) + return data; + data = new_data; + + b = block_for_pc (addr); + + if (!b) + error (_("No block found for address for symbol \"%s\"."), + symbol->print_name ()); + + framefunc = block_linkage_function (b); + + if (!framefunc) + error (_("No function found for block for symbol \"%s\"."), + symbol->print_name ()); + + func_get_frame_base_dwarf_block (framefunc, addr, &base_data, &base_size); + + if (base_data[0] >= DW_OP_breg0 && base_data[0] <= DW_OP_breg31) + { + const gdb_byte *buf_end; + + frame_reg = base_data[0] - DW_OP_breg0; + buf_end = safe_read_sleb128 (base_data + 1, base_data + base_size, + &base_offset); + if (buf_end != base_data + base_size) + error (_("Unexpected opcode after " + "DW_OP_breg%u for symbol \"%s\"."), + frame_reg, symbol->print_name ()); + } + else if (base_data[0] >= DW_OP_reg0 && base_data[0] <= DW_OP_reg31) + { + /* The frame base is just the register, with no offset. */ + frame_reg = base_data[0] - DW_OP_reg0; + base_offset = 0; + } + else + { + /* We don't know what to do with the frame base expression, + so we can't trace this variable; give up. */ + return save_data; + } + + fprintf_filtered (stream, + _("a variable at frame base reg $%s offset %s+%s"), + locexpr_regname (gdbarch, frame_reg), + plongest (base_offset), plongest (frame_offset)); + } + else if (data[0] >= DW_OP_breg0 && data[0] <= DW_OP_breg31 + && piece_end_p (data, end)) + { + int64_t offset; + + data = safe_read_sleb128 (data + 1, end, &offset); + + fprintf_filtered (stream, + _("a variable at offset %s from base reg $%s"), + plongest (offset), + locexpr_regname (gdbarch, data[0] - DW_OP_breg0)); + } + + /* The location expression for a TLS variable looks like this (on a + 64-bit LE machine): + + DW_AT_location : 10 byte block: 3 4 0 0 0 0 0 0 0 e0 + (DW_OP_addr: 4; DW_OP_GNU_push_tls_address) + + 0x3 is the encoding for DW_OP_addr, which has an operand as long + as the size of an address on the target machine (here is 8 + bytes). Note that more recent version of GCC emit DW_OP_const4u + or DW_OP_const8u, depending on address size, rather than + DW_OP_addr. 0xe0 is the encoding for DW_OP_GNU_push_tls_address. + The operand represents the offset at which the variable is within + the thread local storage. */ + + else if (data + 1 + addr_size < end + && (data[0] == DW_OP_addr + || (addr_size == 4 && data[0] == DW_OP_const4u) + || (addr_size == 8 && data[0] == DW_OP_const8u)) + && (data[1 + addr_size] == DW_OP_GNU_push_tls_address + || data[1 + addr_size] == DW_OP_form_tls_address) + && piece_end_p (data + 2 + addr_size, end)) + { + ULONGEST offset; + offset = extract_unsigned_integer (data + 1, addr_size, + gdbarch_byte_order (gdbarch)); + + fprintf_filtered (stream, + _("a thread-local variable at offset 0x%s " + "in the thread-local storage for `%s'"), + phex_nz (offset, addr_size), objfile_name (objfile)); + + data += 1 + addr_size + 1; + } + + /* With -gsplit-dwarf a TLS variable can also look like this: + DW_AT_location : 3 byte block: fc 4 e0 + (DW_OP_GNU_const_index: 4; + DW_OP_GNU_push_tls_address) */ + else if (data + 3 <= end + && data + 1 + (leb128_size = skip_leb128 (data + 1, end)) < end + && data[0] == DW_OP_GNU_const_index + && leb128_size > 0 + && (data[1 + leb128_size] == DW_OP_GNU_push_tls_address + || data[1 + leb128_size] == DW_OP_form_tls_address) + && piece_end_p (data + 2 + leb128_size, end)) + { + uint64_t offset; + + data = safe_read_uleb128 (data + 1, end, &offset); + offset = dwarf2_read_addr_index (per_cu, per_objfile, offset); + fprintf_filtered (stream, + _("a thread-local variable at offset 0x%s " + "in the thread-local storage for `%s'"), + phex_nz (offset, addr_size), objfile_name (objfile)); + ++data; + } + + else if (data[0] >= DW_OP_lit0 + && data[0] <= DW_OP_lit31 + && data + 1 < end + && data[1] == DW_OP_stack_value) + { + fprintf_filtered (stream, _("the constant %d"), data[0] - DW_OP_lit0); + data += 2; + } + + return data; +} + +/* Disassemble an expression, stopping at the end of a piece or at the + end of the expression. Returns a pointer to the next unread byte + in the input expression. If ALL is nonzero, then this function + will keep going until it reaches the end of the expression. + If there is an error during reading, e.g. we run off the end + of the buffer, an error is thrown. */ + +static const gdb_byte * +disassemble_dwarf_expression (struct ui_file *stream, + struct gdbarch *arch, unsigned int addr_size, + int offset_size, const gdb_byte *start, + const gdb_byte *data, const gdb_byte *end, + int indent, int all, + dwarf2_per_cu_data *per_cu, + dwarf2_per_objfile *per_objfile) +{ + while (data < end + && (all + || (data[0] != DW_OP_piece && data[0] != DW_OP_bit_piece))) + { + enum dwarf_location_atom op = (enum dwarf_location_atom) *data++; + uint64_t ul; + int64_t l; + const char *name; + + name = get_DW_OP_name (op); + + if (!name) + error (_("Unrecognized DWARF opcode 0x%02x at %ld"), + op, (long) (data - 1 - start)); + fprintf_filtered (stream, " %*ld: %s", indent + 4, + (long) (data - 1 - start), name); + + switch (op) + { + case DW_OP_addr: + ul = extract_unsigned_integer (data, addr_size, + gdbarch_byte_order (arch)); + data += addr_size; + fprintf_filtered (stream, " 0x%s", phex_nz (ul, addr_size)); + break; + + case DW_OP_const1u: + ul = extract_unsigned_integer (data, 1, gdbarch_byte_order (arch)); + data += 1; + fprintf_filtered (stream, " %s", pulongest (ul)); + break; + + case DW_OP_const1s: + l = extract_signed_integer (data, 1, gdbarch_byte_order (arch)); + data += 1; + fprintf_filtered (stream, " %s", plongest (l)); + break; + + case DW_OP_const2u: + ul = extract_unsigned_integer (data, 2, gdbarch_byte_order (arch)); + data += 2; + fprintf_filtered (stream, " %s", pulongest (ul)); + break; + + case DW_OP_const2s: + l = extract_signed_integer (data, 2, gdbarch_byte_order (arch)); + data += 2; + fprintf_filtered (stream, " %s", plongest (l)); + break; + + case DW_OP_const4u: + ul = extract_unsigned_integer (data, 4, gdbarch_byte_order (arch)); + data += 4; + fprintf_filtered (stream, " %s", pulongest (ul)); + break; + + case DW_OP_const4s: + l = extract_signed_integer (data, 4, gdbarch_byte_order (arch)); + data += 4; + fprintf_filtered (stream, " %s", plongest (l)); + break; + + case DW_OP_const8u: + ul = extract_unsigned_integer (data, 8, gdbarch_byte_order (arch)); + data += 8; + fprintf_filtered (stream, " %s", pulongest (ul)); + break; + + case DW_OP_const8s: + l = extract_signed_integer (data, 8, gdbarch_byte_order (arch)); + data += 8; + fprintf_filtered (stream, " %s", plongest (l)); + break; + + case DW_OP_constu: + data = safe_read_uleb128 (data, end, &ul); + fprintf_filtered (stream, " %s", pulongest (ul)); + break; + + case DW_OP_consts: + data = safe_read_sleb128 (data, end, &l); + fprintf_filtered (stream, " %s", plongest (l)); + break; + + case DW_OP_reg0: + case DW_OP_reg1: + case DW_OP_reg2: + case DW_OP_reg3: + case DW_OP_reg4: + case DW_OP_reg5: + case DW_OP_reg6: + case DW_OP_reg7: + case DW_OP_reg8: + case DW_OP_reg9: + case DW_OP_reg10: + case DW_OP_reg11: + case DW_OP_reg12: + case DW_OP_reg13: + case DW_OP_reg14: + case DW_OP_reg15: + case DW_OP_reg16: + case DW_OP_reg17: + case DW_OP_reg18: + case DW_OP_reg19: + case DW_OP_reg20: + case DW_OP_reg21: + case DW_OP_reg22: + case DW_OP_reg23: + case DW_OP_reg24: + case DW_OP_reg25: + case DW_OP_reg26: + case DW_OP_reg27: + case DW_OP_reg28: + case DW_OP_reg29: + case DW_OP_reg30: + case DW_OP_reg31: + fprintf_filtered (stream, " [$%s]", + locexpr_regname (arch, op - DW_OP_reg0)); + break; + + case DW_OP_regx: + data = safe_read_uleb128 (data, end, &ul); + fprintf_filtered (stream, " %s [$%s]", pulongest (ul), + locexpr_regname (arch, (int) ul)); + break; + + case DW_OP_implicit_value: + data = safe_read_uleb128 (data, end, &ul); + data += ul; + fprintf_filtered (stream, " %s", pulongest (ul)); + break; + + case DW_OP_breg0: + case DW_OP_breg1: + case DW_OP_breg2: + case DW_OP_breg3: + case DW_OP_breg4: + case DW_OP_breg5: + case DW_OP_breg6: + case DW_OP_breg7: + case DW_OP_breg8: + case DW_OP_breg9: + case DW_OP_breg10: + case DW_OP_breg11: + case DW_OP_breg12: + case DW_OP_breg13: + case DW_OP_breg14: + case DW_OP_breg15: + case DW_OP_breg16: + case DW_OP_breg17: + case DW_OP_breg18: + case DW_OP_breg19: + case DW_OP_breg20: + case DW_OP_breg21: + case DW_OP_breg22: + case DW_OP_breg23: + case DW_OP_breg24: + case DW_OP_breg25: + case DW_OP_breg26: + case DW_OP_breg27: + case DW_OP_breg28: + case DW_OP_breg29: + case DW_OP_breg30: + case DW_OP_breg31: + data = safe_read_sleb128 (data, end, &l); + fprintf_filtered (stream, " %s [$%s]", plongest (l), + locexpr_regname (arch, op - DW_OP_breg0)); + break; + + case DW_OP_bregx: + data = safe_read_uleb128 (data, end, &ul); + data = safe_read_sleb128 (data, end, &l); + fprintf_filtered (stream, " register %s [$%s] offset %s", + pulongest (ul), + locexpr_regname (arch, (int) ul), + plongest (l)); + break; + + case DW_OP_fbreg: + data = safe_read_sleb128 (data, end, &l); + fprintf_filtered (stream, " %s", plongest (l)); + break; + + case DW_OP_xderef_size: + case DW_OP_deref_size: + case DW_OP_pick: + fprintf_filtered (stream, " %d", *data); + ++data; + break; + + case DW_OP_plus_uconst: + data = safe_read_uleb128 (data, end, &ul); + fprintf_filtered (stream, " %s", pulongest (ul)); + break; + + case DW_OP_skip: + l = extract_signed_integer (data, 2, gdbarch_byte_order (arch)); + data += 2; + fprintf_filtered (stream, " to %ld", + (long) (data + l - start)); + break; + + case DW_OP_bra: + l = extract_signed_integer (data, 2, gdbarch_byte_order (arch)); + data += 2; + fprintf_filtered (stream, " %ld", + (long) (data + l - start)); + break; + + case DW_OP_call2: + ul = extract_unsigned_integer (data, 2, gdbarch_byte_order (arch)); + data += 2; + fprintf_filtered (stream, " offset %s", phex_nz (ul, 2)); + break; + + case DW_OP_call4: + ul = extract_unsigned_integer (data, 4, gdbarch_byte_order (arch)); + data += 4; + fprintf_filtered (stream, " offset %s", phex_nz (ul, 4)); + break; + + case DW_OP_call_ref: + ul = extract_unsigned_integer (data, offset_size, + gdbarch_byte_order (arch)); + data += offset_size; + fprintf_filtered (stream, " offset %s", phex_nz (ul, offset_size)); + break; + + case DW_OP_piece: + data = safe_read_uleb128 (data, end, &ul); + fprintf_filtered (stream, " %s (bytes)", pulongest (ul)); + break; + + case DW_OP_bit_piece: + { + uint64_t offset; + + data = safe_read_uleb128 (data, end, &ul); + data = safe_read_uleb128 (data, end, &offset); + fprintf_filtered (stream, " size %s offset %s (bits)", + pulongest (ul), pulongest (offset)); + } + break; + + case DW_OP_implicit_pointer: + case DW_OP_GNU_implicit_pointer: + { + ul = extract_unsigned_integer (data, offset_size, + gdbarch_byte_order (arch)); + data += offset_size; + + data = safe_read_sleb128 (data, end, &l); + + fprintf_filtered (stream, " DIE %s offset %s", + phex_nz (ul, offset_size), + plongest (l)); + } + break; + + case DW_OP_deref_type: + case DW_OP_GNU_deref_type: + { + int deref_addr_size = *data++; + struct type *type; + + data = safe_read_uleb128 (data, end, &ul); + cu_offset offset = (cu_offset) ul; + type = dwarf2_get_die_type (offset, per_cu, per_objfile); + fprintf_filtered (stream, "<"); + type_print (type, "", stream, -1); + fprintf_filtered (stream, " [0x%s]> %d", + phex_nz (to_underlying (offset), 0), + deref_addr_size); + } + break; + + case DW_OP_const_type: + case DW_OP_GNU_const_type: + { + struct type *type; + + data = safe_read_uleb128 (data, end, &ul); + cu_offset type_die = (cu_offset) ul; + type = dwarf2_get_die_type (type_die, per_cu, per_objfile); + fprintf_filtered (stream, "<"); + type_print (type, "", stream, -1); + fprintf_filtered (stream, " [0x%s]>", + phex_nz (to_underlying (type_die), 0)); + + int n = *data++; + fprintf_filtered (stream, " %d byte block:", n); + for (int i = 0; i < n; ++i) + fprintf_filtered (stream, " %02x", data[i]); + data += n; + } + break; + + case DW_OP_regval_type: + case DW_OP_GNU_regval_type: + { + uint64_t reg; + struct type *type; + + data = safe_read_uleb128 (data, end, ®); + data = safe_read_uleb128 (data, end, &ul); + cu_offset type_die = (cu_offset) ul; + + type = dwarf2_get_die_type (type_die, per_cu, per_objfile); + fprintf_filtered (stream, "<"); + type_print (type, "", stream, -1); + fprintf_filtered (stream, " [0x%s]> [$%s]", + phex_nz (to_underlying (type_die), 0), + locexpr_regname (arch, reg)); + } + break; + + case DW_OP_convert: + case DW_OP_GNU_convert: + case DW_OP_reinterpret: + case DW_OP_GNU_reinterpret: + { + data = safe_read_uleb128 (data, end, &ul); + cu_offset type_die = (cu_offset) ul; + + if (to_underlying (type_die) == 0) + fprintf_filtered (stream, "<0>"); + else + { + struct type *type; + + type = dwarf2_get_die_type (type_die, per_cu, per_objfile); + fprintf_filtered (stream, "<"); + type_print (type, "", stream, -1); + fprintf_filtered (stream, " [0x%s]>", + phex_nz (to_underlying (type_die), 0)); + } + } + break; + + case DW_OP_entry_value: + case DW_OP_GNU_entry_value: + data = safe_read_uleb128 (data, end, &ul); + fputc_filtered ('\n', stream); + disassemble_dwarf_expression (stream, arch, addr_size, offset_size, + start, data, data + ul, indent + 2, + all, per_cu, per_objfile); + data += ul; + continue; + + case DW_OP_GNU_parameter_ref: + ul = extract_unsigned_integer (data, 4, gdbarch_byte_order (arch)); + data += 4; + fprintf_filtered (stream, " offset %s", phex_nz (ul, 4)); + break; + + case DW_OP_addrx: + case DW_OP_GNU_addr_index: + data = safe_read_uleb128 (data, end, &ul); + ul = dwarf2_read_addr_index (per_cu, per_objfile, ul); + fprintf_filtered (stream, " 0x%s", phex_nz (ul, addr_size)); + break; + + case DW_OP_GNU_const_index: + data = safe_read_uleb128 (data, end, &ul); + ul = dwarf2_read_addr_index (per_cu, per_objfile, ul); + fprintf_filtered (stream, " %s", pulongest (ul)); + break; + + case DW_OP_GNU_variable_value: + ul = extract_unsigned_integer (data, offset_size, + gdbarch_byte_order (arch)); + data += offset_size; + fprintf_filtered (stream, " offset %s", phex_nz (ul, offset_size)); + break; + } + + fprintf_filtered (stream, "\n"); + } + + return data; +} + +static bool dwarf_always_disassemble; + +static void +show_dwarf_always_disassemble (struct ui_file *file, int from_tty, + struct cmd_list_element *c, const char *value) +{ + fprintf_filtered (file, + _("Whether to always disassemble " + "DWARF expressions is %s.\n"), + value); +} + +/* Describe a single location, which may in turn consist of multiple + pieces. */ + +static void +locexpr_describe_location_1 (struct symbol *symbol, CORE_ADDR addr, + struct ui_file *stream, + const gdb_byte *data, size_t size, + unsigned int addr_size, + int offset_size, dwarf2_per_cu_data *per_cu, + dwarf2_per_objfile *per_objfile) +{ + const gdb_byte *end = data + size; + int first_piece = 1, bad = 0; + objfile *objfile = per_objfile->objfile; + + while (data < end) + { + const gdb_byte *here = data; + int disassemble = 1; + + if (first_piece) + first_piece = 0; + else + fprintf_filtered (stream, _(", and ")); + + if (!dwarf_always_disassemble) + { + data = locexpr_describe_location_piece (symbol, stream, + addr, per_cu, per_objfile, + data, end, addr_size); + /* If we printed anything, or if we have an empty piece, + then don't disassemble. */ + if (data != here + || data[0] == DW_OP_piece + || data[0] == DW_OP_bit_piece) + disassemble = 0; + } + if (disassemble) + { + fprintf_filtered (stream, _("a complex DWARF expression:\n")); + data = disassemble_dwarf_expression (stream, + objfile->arch (), + addr_size, offset_size, data, + data, end, 0, + dwarf_always_disassemble, + per_cu, per_objfile); + } + + if (data < end) + { + int empty = data == here; + + if (disassemble) + fprintf_filtered (stream, " "); + if (data[0] == DW_OP_piece) + { + uint64_t bytes; + + data = safe_read_uleb128 (data + 1, end, &bytes); + + if (empty) + fprintf_filtered (stream, _("an empty %s-byte piece"), + pulongest (bytes)); + else + fprintf_filtered (stream, _(" [%s-byte piece]"), + pulongest (bytes)); + } + else if (data[0] == DW_OP_bit_piece) + { + uint64_t bits, offset; + + data = safe_read_uleb128 (data + 1, end, &bits); + data = safe_read_uleb128 (data, end, &offset); + + if (empty) + fprintf_filtered (stream, + _("an empty %s-bit piece"), + pulongest (bits)); + else + fprintf_filtered (stream, + _(" [%s-bit piece, offset %s bits]"), + pulongest (bits), pulongest (offset)); + } + else + { + bad = 1; + break; + } + } + } + + if (bad || data > end) + error (_("Corrupted DWARF2 expression for \"%s\"."), + symbol->print_name ()); +} + +/* Print a natural-language description of SYMBOL to STREAM. This + version is for a symbol with a single location. */ + +static void +locexpr_describe_location (struct symbol *symbol, CORE_ADDR addr, + struct ui_file *stream) +{ + struct dwarf2_locexpr_baton *dlbaton + = (struct dwarf2_locexpr_baton *) SYMBOL_LOCATION_BATON (symbol); + unsigned int addr_size = dlbaton->per_cu->addr_size (); + int offset_size = dlbaton->per_cu->offset_size (); + + locexpr_describe_location_1 (symbol, addr, stream, + dlbaton->data, dlbaton->size, + addr_size, offset_size, + dlbaton->per_cu, dlbaton->per_objfile); +} + +/* Describe the location of SYMBOL as an agent value in VALUE, generating + any necessary bytecode in AX. */ + +static void +locexpr_tracepoint_var_ref (struct symbol *symbol, struct agent_expr *ax, + struct axs_value *value) +{ + struct dwarf2_locexpr_baton *dlbaton + = (struct dwarf2_locexpr_baton *) SYMBOL_LOCATION_BATON (symbol); + unsigned int addr_size = dlbaton->per_cu->addr_size (); + + if (dlbaton->size == 0) + value->optimized_out = 1; + else + dwarf2_compile_expr_to_ax (ax, value, addr_size, dlbaton->data, + dlbaton->data + dlbaton->size, dlbaton->per_cu, + dlbaton->per_objfile); +} + +/* symbol_computed_ops 'generate_c_location' method. */ + +static void +locexpr_generate_c_location (struct symbol *sym, string_file *stream, + struct gdbarch *gdbarch, + unsigned char *registers_used, + CORE_ADDR pc, const char *result_name) +{ + struct dwarf2_locexpr_baton *dlbaton + = (struct dwarf2_locexpr_baton *) SYMBOL_LOCATION_BATON (sym); + unsigned int addr_size = dlbaton->per_cu->addr_size (); + + if (dlbaton->size == 0) + error (_("symbol \"%s\" is optimized out"), sym->natural_name ()); + + compile_dwarf_expr_to_c (stream, result_name, + sym, pc, gdbarch, registers_used, addr_size, + dlbaton->data, dlbaton->data + dlbaton->size, + dlbaton->per_cu, dlbaton->per_objfile); +} + +/* The set of location functions used with the DWARF-2 expression + evaluator. */ +const struct symbol_computed_ops dwarf2_locexpr_funcs = { + locexpr_read_variable, + locexpr_read_variable_at_entry, + locexpr_get_symbol_read_needs, + locexpr_describe_location, + 0, /* location_has_loclist */ + locexpr_tracepoint_var_ref, + locexpr_generate_c_location +}; + + +/* Wrapper functions for location lists. These generally find + the appropriate location expression and call something above. */ + +/* Return the value of SYMBOL in FRAME using the DWARF-2 expression + evaluator to calculate the location. */ +static struct value * +loclist_read_variable (struct symbol *symbol, struct frame_info *frame) +{ + struct dwarf2_loclist_baton *dlbaton + = (struct dwarf2_loclist_baton *) SYMBOL_LOCATION_BATON (symbol); + struct value *val; + const gdb_byte *data; + size_t size; + CORE_ADDR pc = frame ? get_frame_address_in_block (frame) : 0; + + data = dwarf2_find_location_expression (dlbaton, &size, pc); + val = dwarf2_evaluate_loc_desc (SYMBOL_TYPE (symbol), frame, data, size, + dlbaton->per_cu, dlbaton->per_objfile); + + return val; +} + +/* Read variable SYMBOL like loclist_read_variable at (callee) FRAME's function + entry. SYMBOL should be a function parameter, otherwise NO_ENTRY_VALUE_ERROR + will be thrown. + + Function always returns non-NULL value, it may be marked optimized out if + inferior frame information is not available. It throws NO_ENTRY_VALUE_ERROR + if it cannot resolve the parameter for any reason. */ + +static struct value * +loclist_read_variable_at_entry (struct symbol *symbol, struct frame_info *frame) +{ + struct dwarf2_loclist_baton *dlbaton + = (struct dwarf2_loclist_baton *) SYMBOL_LOCATION_BATON (symbol); + const gdb_byte *data; + size_t size; + CORE_ADDR pc; + + if (frame == NULL || !get_frame_func_if_available (frame, &pc)) + return allocate_optimized_out_value (SYMBOL_TYPE (symbol)); + + data = dwarf2_find_location_expression (dlbaton, &size, pc); + if (data == NULL) + return allocate_optimized_out_value (SYMBOL_TYPE (symbol)); + + return value_of_dwarf_block_entry (SYMBOL_TYPE (symbol), frame, data, size); +} + +/* Implementation of get_symbol_read_needs from + symbol_computed_ops. */ + +static enum symbol_needs_kind +loclist_symbol_needs (struct symbol *symbol) +{ + /* If there's a location list, then assume we need to have a frame + to choose the appropriate location expression. With tracking of + global variables this is not necessarily true, but such tracking + is disabled in GCC at the moment until we figure out how to + represent it. */ + + return SYMBOL_NEEDS_FRAME; +} + +/* Print a natural-language description of SYMBOL to STREAM. This + version applies when there is a list of different locations, each + with a specified address range. */ + +static void +loclist_describe_location (struct symbol *symbol, CORE_ADDR addr, + struct ui_file *stream) +{ + struct dwarf2_loclist_baton *dlbaton + = (struct dwarf2_loclist_baton *) SYMBOL_LOCATION_BATON (symbol); + const gdb_byte *loc_ptr, *buf_end; + dwarf2_per_objfile *per_objfile = dlbaton->per_objfile; + struct objfile *objfile = per_objfile->objfile; + struct gdbarch *gdbarch = objfile->arch (); + enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); + unsigned int addr_size = dlbaton->per_cu->addr_size (); + int offset_size = dlbaton->per_cu->offset_size (); + int signed_addr_p = bfd_get_sign_extend_vma (objfile->obfd); + /* Adjust base_address for relocatable objects. */ + CORE_ADDR base_offset = objfile->text_section_offset (); + CORE_ADDR base_address = dlbaton->base_address + base_offset; + int done = 0; + + loc_ptr = dlbaton->data; + buf_end = dlbaton->data + dlbaton->size; + + fprintf_filtered (stream, _("multi-location:\n")); + + /* Iterate through locations until we run out. */ + while (!done) + { + CORE_ADDR low = 0, high = 0; /* init for gcc -Wall */ + int length; + enum debug_loc_kind kind; + const gdb_byte *new_ptr = NULL; /* init for gcc -Wall */ + + if (dlbaton->per_cu->version () < 5 && dlbaton->from_dwo) + kind = decode_debug_loc_dwo_addresses (dlbaton->per_cu, + dlbaton->per_objfile, + loc_ptr, buf_end, &new_ptr, + &low, &high, byte_order); + else if (dlbaton->per_cu->version () < 5) + kind = decode_debug_loc_addresses (loc_ptr, buf_end, &new_ptr, + &low, &high, + byte_order, addr_size, + signed_addr_p); + else + kind = decode_debug_loclists_addresses (dlbaton->per_cu, + dlbaton->per_objfile, + loc_ptr, buf_end, &new_ptr, + &low, &high, byte_order, + addr_size, signed_addr_p); + loc_ptr = new_ptr; + switch (kind) + { + case DEBUG_LOC_END_OF_LIST: + done = 1; + continue; + + case DEBUG_LOC_BASE_ADDRESS: + base_address = high + base_offset; + fprintf_filtered (stream, _(" Base address %s"), + paddress (gdbarch, base_address)); + continue; + + case DEBUG_LOC_START_END: + case DEBUG_LOC_START_LENGTH: + case DEBUG_LOC_OFFSET_PAIR: + break; + + case DEBUG_LOC_BUFFER_OVERFLOW: + case DEBUG_LOC_INVALID_ENTRY: + error (_("Corrupted DWARF expression for symbol \"%s\"."), + symbol->print_name ()); + + default: + gdb_assert_not_reached ("bad debug_loc_kind"); + } + + /* Otherwise, a location expression entry. */ + low += base_address; + high += base_address; + + low = gdbarch_adjust_dwarf2_addr (gdbarch, low); + high = gdbarch_adjust_dwarf2_addr (gdbarch, high); + + if (dlbaton->per_cu->version () < 5) + { + length = extract_unsigned_integer (loc_ptr, 2, byte_order); + loc_ptr += 2; + } + else + { + unsigned int bytes_read; + length = read_unsigned_leb128 (NULL, loc_ptr, &bytes_read); + loc_ptr += bytes_read; + } + + /* (It would improve readability to print only the minimum + necessary digits of the second number of the range.) */ + fprintf_filtered (stream, _(" Range %s-%s: "), + paddress (gdbarch, low), paddress (gdbarch, high)); + + /* Now describe this particular location. */ + locexpr_describe_location_1 (symbol, low, stream, loc_ptr, length, + addr_size, offset_size, + dlbaton->per_cu, dlbaton->per_objfile); + + fprintf_filtered (stream, "\n"); + + loc_ptr += length; + } +} + +/* Describe the location of SYMBOL as an agent value in VALUE, generating + any necessary bytecode in AX. */ +static void +loclist_tracepoint_var_ref (struct symbol *symbol, struct agent_expr *ax, + struct axs_value *value) +{ + struct dwarf2_loclist_baton *dlbaton + = (struct dwarf2_loclist_baton *) SYMBOL_LOCATION_BATON (symbol); + const gdb_byte *data; + size_t size; + unsigned int addr_size = dlbaton->per_cu->addr_size (); + + data = dwarf2_find_location_expression (dlbaton, &size, ax->scope); + if (size == 0) + value->optimized_out = 1; + else + dwarf2_compile_expr_to_ax (ax, value, addr_size, data, data + size, + dlbaton->per_cu, dlbaton->per_objfile); +} + +/* symbol_computed_ops 'generate_c_location' method. */ + +static void +loclist_generate_c_location (struct symbol *sym, string_file *stream, + struct gdbarch *gdbarch, + unsigned char *registers_used, + CORE_ADDR pc, const char *result_name) +{ + struct dwarf2_loclist_baton *dlbaton + = (struct dwarf2_loclist_baton *) SYMBOL_LOCATION_BATON (sym); + unsigned int addr_size = dlbaton->per_cu->addr_size (); + const gdb_byte *data; + size_t size; + + data = dwarf2_find_location_expression (dlbaton, &size, pc); + if (size == 0) + error (_("symbol \"%s\" is optimized out"), sym->natural_name ()); + + compile_dwarf_expr_to_c (stream, result_name, + sym, pc, gdbarch, registers_used, addr_size, + data, data + size, + dlbaton->per_cu, + dlbaton->per_objfile); +} + +/* The set of location functions used with the DWARF-2 expression + evaluator and location lists. */ +const struct symbol_computed_ops dwarf2_loclist_funcs = { + loclist_read_variable, + loclist_read_variable_at_entry, + loclist_symbol_needs, + loclist_describe_location, + 1, /* location_has_loclist */ + loclist_tracepoint_var_ref, + loclist_generate_c_location +}; + +void _initialize_dwarf2loc (); +void +_initialize_dwarf2loc () +{ + add_setshow_zuinteger_cmd ("entry-values", class_maintenance, + &entry_values_debug, + _("Set entry values and tail call frames " + "debugging."), + _("Show entry values and tail call frames " + "debugging."), + _("When non-zero, the process of determining " + "parameter values from function entry point " + "and tail call frames will be printed."), + NULL, + show_entry_values_debug, + &setdebuglist, &showdebuglist); + + add_setshow_boolean_cmd ("always-disassemble", class_obscure, + &dwarf_always_disassemble, _("\ +Set whether `info address' always disassembles DWARF expressions."), _("\ +Show whether `info address' always disassembles DWARF expressions."), _("\ +When enabled, DWARF expressions are always printed in an assembly-like\n\ +syntax. When disabled, expressions will be printed in a more\n\ +conversational style, when possible."), + NULL, + show_dwarf_always_disassemble, + &set_dwarf_cmdlist, + &show_dwarf_cmdlist); +} diff -Nru gdb-9.1/gdb/dwarf2/loc.h gdb-10.2/gdb/dwarf2/loc.h --- gdb-9.1/gdb/dwarf2/loc.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/dwarf2/loc.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,267 @@ +/* DWARF 2 location expression support for GDB. + + Copyright (C) 2003-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#if !defined (DWARF2LOC_H) +#define DWARF2LOC_H + +#include "dwarf2/expr.h" + +struct symbol_computed_ops; +struct dwarf2_per_objfile; +struct dwarf2_per_cu_data; +struct dwarf2_loclist_baton; +struct agent_expr; +struct axs_value; + +/* This header is private to the DWARF-2 reader. It is shared between + dwarf2read.c and dwarf2loc.c. */ + +/* `set debug entry-values' setting. */ +extern unsigned int entry_values_debug; + +/* Find a particular location expression from a location list. */ +const gdb_byte *dwarf2_find_location_expression + (struct dwarf2_loclist_baton *baton, + size_t *locexpr_length, + CORE_ADDR pc); + +/* Find the frame base information for FRAMEFUNC at PC. START is an + out parameter which is set to point to the DWARF expression to + compute. LENGTH is an out parameter which is set to the length of + the DWARF expression. This throws an exception on error or if an + expression is not found; the returned length will never be + zero. */ + +extern void func_get_frame_base_dwarf_block (struct symbol *framefunc, + CORE_ADDR pc, + const gdb_byte **start, + size_t *length); + +/* Evaluate a location description, starting at DATA and with length + SIZE, to find the current location of variable of TYPE in the context + of FRAME. */ + +struct value *dwarf2_evaluate_loc_desc (struct type *type, + struct frame_info *frame, + const gdb_byte *data, + size_t size, + dwarf2_per_cu_data *per_cu, + dwarf2_per_objfile *per_objfile); + +/* A chain of addresses that might be needed to resolve a dynamic + property. */ + +struct property_addr_info +{ + /* The type of the object whose dynamic properties, if any, are + being resolved. */ + struct type *type; + + /* If not NULL, a buffer containing the object's value. */ + gdb::array_view<const gdb_byte> valaddr; + + /* The address of that object. */ + CORE_ADDR addr; + + /* If not NULL, a pointer to the info for the object containing + the object described by this node. */ + struct property_addr_info *next; +}; + +/* Converts a dynamic property into a static one. FRAME is the frame in which + the property is evaluated; if NULL, the selected frame (if any) is used + instead. + + ADDR_STACK is the stack of addresses that might be needed to evaluate the + property. When evaluating a property that is not related to a type, it can + be NULL. + + Returns true if PROP could be converted and the static value is passed + back into VALUE, otherwise returns false. + + If PUSH_INITIAL_VALUE is true, then the top value of ADDR_STACK + will be pushed before evaluating a location expression. */ + +bool dwarf2_evaluate_property (const struct dynamic_prop *prop, + struct frame_info *frame, + const struct property_addr_info *addr_stack, + CORE_ADDR *value, + bool push_initial_value = false); + +/* A helper for the compiler interface that compiles a single dynamic + property to C code. + + STREAM is where the C code is to be written. + RESULT_NAME is the name of the generated variable. + GDBARCH is the architecture to use. + REGISTERS_USED is a bit-vector that is filled to note which + registers are required by the generated expression. + PROP is the property for which code is generated. + ADDRESS is the address at which the property is considered to be + evaluated. + SYM the originating symbol, used for error reporting. */ + +void dwarf2_compile_property_to_c (string_file *stream, + const char *result_name, + struct gdbarch *gdbarch, + unsigned char *registers_used, + const struct dynamic_prop *prop, + CORE_ADDR address, + struct symbol *sym); + +/* The symbol location baton types used by the DWARF-2 reader (i.e. + SYMBOL_LOCATION_BATON for a LOC_COMPUTED symbol). "struct + dwarf2_locexpr_baton" is for a symbol with a single location + expression; "struct dwarf2_loclist_baton" is for a symbol with a + location list. */ + +struct dwarf2_locexpr_baton +{ + /* Pointer to the start of the location expression. Valid only if SIZE is + not zero. */ + const gdb_byte *data; + + /* Length of the location expression. For optimized out expressions it is + zero. */ + size_t size; + + /* When true this location expression is a reference and actually + describes the address at which the value of the attribute can be + found. When false the expression provides the value of the attribute + directly. */ + bool is_reference; + + /* The objfile that was used when creating this. */ + dwarf2_per_objfile *per_objfile; + + /* The compilation unit containing the symbol whose location + we're computing. */ + struct dwarf2_per_cu_data *per_cu; +}; + +struct dwarf2_loclist_baton +{ + /* The initial base address for the location list, based on the compilation + unit. */ + CORE_ADDR base_address; + + /* Pointer to the start of the location list. */ + const gdb_byte *data; + + /* Length of the location list. */ + size_t size; + + /* The objfile that was used when creating this. */ + dwarf2_per_objfile *per_objfile; + + /* The compilation unit containing the symbol whose location + we're computing. */ + struct dwarf2_per_cu_data *per_cu; + + /* Non-zero if the location list lives in .debug_loc.dwo. + The format of entries in this section are different. */ + unsigned char from_dwo; +}; + +/* The baton used when a dynamic property is an offset to a parent + type. This can be used, for instance, then the bound of an array + inside a record is determined by the value of another field inside + that record. */ + +struct dwarf2_offset_baton +{ + /* The offset from the parent type where the value of the property + is stored. In the example provided above, this would be the offset + of the field being used as the array bound. */ + LONGEST offset; + + /* The type of the object whose property is dynamic. In the example + provided above, this would the array's index type. */ + struct type *type; +}; + +/* A dynamic property is either expressed as a single location expression + or a location list. If the property is an indirection, pointing to + another die, keep track of the targeted type in PROPERTY_TYPE. + Alternatively, if the property location gives the property value + directly then it will have PROPERTY_TYPE. */ + +struct dwarf2_property_baton +{ + /* If the property is an indirection, we need to evaluate the location + in the context of the type PROPERTY_TYPE. If the property is supplied + by value then it will be of PROPERTY_TYPE. This field should never be + NULL. */ + struct type *property_type; + union + { + /* Location expression either evaluated in the context of + PROPERTY_TYPE, or a value of type PROPERTY_TYPE. */ + struct dwarf2_locexpr_baton locexpr; + + /* Location list to be evaluated in the context of PROPERTY_TYPE. */ + struct dwarf2_loclist_baton loclist; + + /* The location is an offset to PROPERTY_TYPE. */ + struct dwarf2_offset_baton offset_info; + }; +}; + +extern const struct symbol_computed_ops dwarf2_locexpr_funcs; +extern const struct symbol_computed_ops dwarf2_loclist_funcs; + +extern const struct symbol_block_ops dwarf2_block_frame_base_locexpr_funcs; +extern const struct symbol_block_ops dwarf2_block_frame_base_loclist_funcs; + +/* Determined tail calls for constructing virtual tail call frames. */ + +struct call_site_chain + { + /* Initially CALLERS == CALLEES == LENGTH. For partially ambiguous result + CALLERS + CALLEES < LENGTH. */ + int callers, callees, length; + + /* Variably sized array with LENGTH elements. Later [0..CALLERS-1] contain + top (GDB "prev") sites and [LENGTH-CALLEES..LENGTH-1] contain bottom + (GDB "next") sites. One is interested primarily in the PC field. */ + struct call_site *call_site[1]; + }; + +struct call_site_stuff; +extern gdb::unique_xmalloc_ptr<call_site_chain> call_site_find_chain + (struct gdbarch *gdbarch, CORE_ADDR caller_pc, CORE_ADDR callee_pc); + +/* A helper function to convert a DWARF register to an arch register. + ARCH is the architecture. + DWARF_REG is the register. + If DWARF_REG is bad then a complaint is issued and -1 is returned. + Note: Some targets get this wrong. */ + +extern int dwarf_reg_to_regnum (struct gdbarch *arch, int dwarf_reg); + +/* A wrapper on dwarf_reg_to_regnum to throw an exception if the + DWARF register cannot be translated to an architecture register. + This takes a ULONGEST instead of an int because some callers actually have + a ULONGEST. Negative values passed as ints will still be flagged as + invalid. */ + +extern int dwarf_reg_to_regnum_or_error (struct gdbarch *arch, + ULONGEST dwarf_reg); + +#endif /* dwarf2loc.h */ diff -Nru gdb-9.1/gdb/dwarf2/macro.c gdb-10.2/gdb/dwarf2/macro.c --- gdb-9.1/gdb/dwarf2/macro.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/dwarf2/macro.c 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,865 @@ +/* Read DWARF macro information + + Copyright (C) 1994-2021 Free Software Foundation, Inc. + + Adapted by Gary Funck (gary@intrepid.com), Intrepid Technology, + Inc. with support from Florida State University (under contract + with the Ada Joint Program Office), and Silicon Graphics, Inc. + Initial contribution by Brent Benson, Harris Computer Systems, Inc., + based on Fred Fish's (Cygnus Support) implementation of DWARF 1 + support. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "defs.h" +#include "dwarf2/read.h" +#include "dwarf2/leb.h" +#include "dwarf2/expr.h" +#include "dwarf2/line-header.h" +#include "dwarf2/section.h" +#include "dwarf2/macro.h" +#include "dwarf2/dwz.h" +#include "buildsym.h" +#include "macrotab.h" +#include "complaints.h" + +static void +dwarf2_macro_malformed_definition_complaint (const char *arg1) +{ + complaint (_("macro debug info contains a " + "malformed macro definition:\n`%s'"), + arg1); +} + +static struct macro_source_file * +macro_start_file (buildsym_compunit *builder, + int file, int line, + struct macro_source_file *current_file, + const struct line_header *lh) +{ + /* File name relative to the compilation directory of this source file. */ + gdb::unique_xmalloc_ptr<char> file_name = lh->file_file_name (file); + + if (! current_file) + { + /* Note: We don't create a macro table for this compilation unit + at all until we actually get a filename. */ + struct macro_table *macro_table = builder->get_macro_table (); + + /* If we have no current file, then this must be the start_file + directive for the compilation unit's main source file. */ + current_file = macro_set_main (macro_table, file_name.get ()); + macro_define_special (macro_table); + } + else + current_file = macro_include (current_file, line, file_name.get ()); + + return current_file; +} + +static const char * +consume_improper_spaces (const char *p, const char *body) +{ + if (*p == ' ') + { + complaint (_("macro definition contains spaces " + "in formal argument list:\n`%s'"), + body); + + while (*p == ' ') + p++; + } + + return p; +} + + +static void +parse_macro_definition (struct macro_source_file *file, int line, + const char *body) +{ + const char *p; + + /* The body string takes one of two forms. For object-like macro + definitions, it should be: + + <macro name> " " <definition> + + For function-like macro definitions, it should be: + + <macro name> "() " <definition> + or + <macro name> "(" <arg name> ( "," <arg name> ) * ") " <definition> + + Spaces may appear only where explicitly indicated, and in the + <definition>. + + The Dwarf 2 spec says that an object-like macro's name is always + followed by a space, but versions of GCC around March 2002 omit + the space when the macro's definition is the empty string. + + The Dwarf 2 spec says that there should be no spaces between the + formal arguments in a function-like macro's formal argument list, + but versions of GCC around March 2002 include spaces after the + commas. */ + + + /* Find the extent of the macro name. The macro name is terminated + by either a space or null character (for an object-like macro) or + an opening paren (for a function-like macro). */ + for (p = body; *p; p++) + if (*p == ' ' || *p == '(') + break; + + if (*p == ' ' || *p == '\0') + { + /* It's an object-like macro. */ + int name_len = p - body; + std::string name (body, name_len); + const char *replacement; + + if (*p == ' ') + replacement = body + name_len + 1; + else + { + dwarf2_macro_malformed_definition_complaint (body); + replacement = body + name_len; + } + + macro_define_object (file, line, name.c_str (), replacement); + } + else if (*p == '(') + { + /* It's a function-like macro. */ + std::string name (body, p - body); + int argc = 0; + int argv_size = 1; + char **argv = XNEWVEC (char *, argv_size); + + p++; + + p = consume_improper_spaces (p, body); + + /* Parse the formal argument list. */ + while (*p && *p != ')') + { + /* Find the extent of the current argument name. */ + const char *arg_start = p; + + while (*p && *p != ',' && *p != ')' && *p != ' ') + p++; + + if (! *p || p == arg_start) + dwarf2_macro_malformed_definition_complaint (body); + else + { + /* Make sure argv has room for the new argument. */ + if (argc >= argv_size) + { + argv_size *= 2; + argv = XRESIZEVEC (char *, argv, argv_size); + } + + argv[argc++] = savestring (arg_start, p - arg_start); + } + + p = consume_improper_spaces (p, body); + + /* Consume the comma, if present. */ + if (*p == ',') + { + p++; + + p = consume_improper_spaces (p, body); + } + } + + if (*p == ')') + { + p++; + + if (*p == ' ') + /* Perfectly formed definition, no complaints. */ + macro_define_function (file, line, name.c_str (), + argc, (const char **) argv, + p + 1); + else if (*p == '\0') + { + /* Complain, but do define it. */ + dwarf2_macro_malformed_definition_complaint (body); + macro_define_function (file, line, name.c_str (), + argc, (const char **) argv, + p); + } + else + /* Just complain. */ + dwarf2_macro_malformed_definition_complaint (body); + } + else + /* Just complain. */ + dwarf2_macro_malformed_definition_complaint (body); + + { + int i; + + for (i = 0; i < argc; i++) + xfree (argv[i]); + } + xfree (argv); + } + else + dwarf2_macro_malformed_definition_complaint (body); +} + +/* Skip some bytes from BYTES according to the form given in FORM. + Returns the new pointer. */ + +static const gdb_byte * +skip_form_bytes (bfd *abfd, const gdb_byte *bytes, const gdb_byte *buffer_end, + enum dwarf_form form, + unsigned int offset_size, + const struct dwarf2_section_info *section) +{ + unsigned int bytes_read; + + switch (form) + { + case DW_FORM_data1: + case DW_FORM_flag: + ++bytes; + break; + + case DW_FORM_data2: + bytes += 2; + break; + + case DW_FORM_data4: + bytes += 4; + break; + + case DW_FORM_data8: + bytes += 8; + break; + + case DW_FORM_data16: + bytes += 16; + break; + + case DW_FORM_string: + read_direct_string (abfd, bytes, &bytes_read); + bytes += bytes_read; + break; + + case DW_FORM_sec_offset: + case DW_FORM_strp: + case DW_FORM_GNU_strp_alt: + bytes += offset_size; + break; + + case DW_FORM_block: + bytes += read_unsigned_leb128 (abfd, bytes, &bytes_read); + bytes += bytes_read; + break; + + case DW_FORM_block1: + bytes += 1 + read_1_byte (abfd, bytes); + break; + case DW_FORM_block2: + bytes += 2 + read_2_bytes (abfd, bytes); + break; + case DW_FORM_block4: + bytes += 4 + read_4_bytes (abfd, bytes); + break; + + case DW_FORM_addrx: + case DW_FORM_sdata: + case DW_FORM_strx: + case DW_FORM_udata: + case DW_FORM_GNU_addr_index: + case DW_FORM_GNU_str_index: + bytes = gdb_skip_leb128 (bytes, buffer_end); + if (bytes == NULL) + { + section->overflow_complaint (); + return NULL; + } + break; + + case DW_FORM_implicit_const: + break; + + default: + { + complaint (_("invalid form 0x%x in `%s'"), + form, section->get_name ()); + return NULL; + } + } + + return bytes; +} + +/* A helper for dwarf_decode_macros that handles skipping an unknown + opcode. Returns an updated pointer to the macro data buffer; or, + on error, issues a complaint and returns NULL. */ + +static const gdb_byte * +skip_unknown_opcode (unsigned int opcode, + const gdb_byte **opcode_definitions, + const gdb_byte *mac_ptr, const gdb_byte *mac_end, + bfd *abfd, + unsigned int offset_size, + const struct dwarf2_section_info *section) +{ + unsigned int bytes_read, i; + unsigned long arg; + const gdb_byte *defn; + + if (opcode_definitions[opcode] == NULL) + { + complaint (_("unrecognized DW_MACFINO opcode 0x%x"), + opcode); + return NULL; + } + + defn = opcode_definitions[opcode]; + arg = read_unsigned_leb128 (abfd, defn, &bytes_read); + defn += bytes_read; + + for (i = 0; i < arg; ++i) + { + mac_ptr = skip_form_bytes (abfd, mac_ptr, mac_end, + (enum dwarf_form) defn[i], offset_size, + section); + if (mac_ptr == NULL) + { + /* skip_form_bytes already issued the complaint. */ + return NULL; + } + } + + return mac_ptr; +} + +/* A helper function which parses the header of a macro section. + If the macro section is the extended (for now called "GNU") type, + then this updates *OFFSET_SIZE. Returns a pointer to just after + the header, or issues a complaint and returns NULL on error. */ + +static const gdb_byte * +dwarf_parse_macro_header (const gdb_byte **opcode_definitions, + bfd *abfd, + const gdb_byte *mac_ptr, + unsigned int *offset_size, + int section_is_gnu) +{ + memset (opcode_definitions, 0, 256 * sizeof (gdb_byte *)); + + if (section_is_gnu) + { + unsigned int version, flags; + + version = read_2_bytes (abfd, mac_ptr); + if (version != 4 && version != 5) + { + complaint (_("unrecognized version `%d' in .debug_macro section"), + version); + return NULL; + } + mac_ptr += 2; + + flags = read_1_byte (abfd, mac_ptr); + ++mac_ptr; + *offset_size = (flags & 1) ? 8 : 4; + + if ((flags & 2) != 0) + /* We don't need the line table offset. */ + mac_ptr += *offset_size; + + /* Vendor opcode descriptions. */ + if ((flags & 4) != 0) + { + unsigned int i, count; + + count = read_1_byte (abfd, mac_ptr); + ++mac_ptr; + for (i = 0; i < count; ++i) + { + unsigned int opcode, bytes_read; + unsigned long arg; + + opcode = read_1_byte (abfd, mac_ptr); + ++mac_ptr; + opcode_definitions[opcode] = mac_ptr; + arg = read_unsigned_leb128 (abfd, mac_ptr, &bytes_read); + mac_ptr += bytes_read; + mac_ptr += arg; + } + } + } + + return mac_ptr; +} + +/* A helper for dwarf_decode_macros that handles the GNU extensions, + including DW_MACRO_import. */ + +static void +dwarf_decode_macro_bytes (dwarf2_per_objfile *per_objfile, + buildsym_compunit *builder, + bfd *abfd, + const gdb_byte *mac_ptr, const gdb_byte *mac_end, + struct macro_source_file *current_file, + const struct line_header *lh, + const struct dwarf2_section_info *section, + int section_is_gnu, int section_is_dwz, + unsigned int offset_size, + htab_t include_hash) +{ + struct objfile *objfile = per_objfile->objfile; + enum dwarf_macro_record_type macinfo_type; + int at_commandline; + const gdb_byte *opcode_definitions[256]; + + mac_ptr = dwarf_parse_macro_header (opcode_definitions, abfd, mac_ptr, + &offset_size, section_is_gnu); + if (mac_ptr == NULL) + { + /* We already issued a complaint. */ + return; + } + + /* Determines if GDB is still before first DW_MACINFO_start_file. If true + GDB is still reading the definitions from command line. First + DW_MACINFO_start_file will need to be ignored as it was already executed + to create CURRENT_FILE for the main source holding also the command line + definitions. On first met DW_MACINFO_start_file this flag is reset to + normally execute all the remaining DW_MACINFO_start_file macinfos. */ + + at_commandline = 1; + + do + { + /* Do we at least have room for a macinfo type byte? */ + if (mac_ptr >= mac_end) + { + section->overflow_complaint (); + break; + } + + macinfo_type = (enum dwarf_macro_record_type) read_1_byte (abfd, mac_ptr); + mac_ptr++; + + /* Note that we rely on the fact that the corresponding GNU and + DWARF constants are the same. */ + DIAGNOSTIC_PUSH + DIAGNOSTIC_IGNORE_SWITCH_DIFFERENT_ENUM_TYPES + switch (macinfo_type) + { + /* A zero macinfo type indicates the end of the macro + information. */ + case 0: + break; + + case DW_MACRO_define: + case DW_MACRO_undef: + case DW_MACRO_define_strp: + case DW_MACRO_undef_strp: + case DW_MACRO_define_sup: + case DW_MACRO_undef_sup: + { + unsigned int bytes_read; + int line; + const char *body; + int is_define; + + line = read_unsigned_leb128 (abfd, mac_ptr, &bytes_read); + mac_ptr += bytes_read; + + if (macinfo_type == DW_MACRO_define + || macinfo_type == DW_MACRO_undef) + { + body = read_direct_string (abfd, mac_ptr, &bytes_read); + mac_ptr += bytes_read; + } + else + { + LONGEST str_offset; + + str_offset = read_offset (abfd, mac_ptr, offset_size); + mac_ptr += offset_size; + + if (macinfo_type == DW_MACRO_define_sup + || macinfo_type == DW_MACRO_undef_sup + || section_is_dwz) + { + dwz_file *dwz = dwarf2_get_dwz_file (per_objfile->per_bfd); + + body = dwz->read_string (objfile, str_offset); + } + else + body = per_objfile->per_bfd->str.read_string (objfile, + str_offset, + "DW_FORM_strp"); + } + + is_define = (macinfo_type == DW_MACRO_define + || macinfo_type == DW_MACRO_define_strp + || macinfo_type == DW_MACRO_define_sup); + if (! current_file) + { + /* DWARF violation as no main source is present. */ + complaint (_("debug info with no main source gives macro %s " + "on line %d: %s"), + is_define ? _("definition") : _("undefinition"), + line, body); + break; + } + if ((line == 0 && !at_commandline) + || (line != 0 && at_commandline)) + complaint (_("debug info gives %s macro %s with %s line %d: %s"), + at_commandline ? _("command-line") : _("in-file"), + is_define ? _("definition") : _("undefinition"), + line == 0 ? _("zero") : _("non-zero"), line, body); + + if (body == NULL) + { + /* Fedora's rpm-build's "debugedit" binary + corrupted .debug_macro sections. + + For more info, see + https://bugzilla.redhat.com/show_bug.cgi?id=1708786 */ + complaint (_("debug info gives %s invalid macro %s " + "without body (corrupted?) at line %d " + "on file %s"), + at_commandline ? _("command-line") : _("in-file"), + is_define ? _("definition") : _("undefinition"), + line, current_file->filename); + } + else if (is_define) + parse_macro_definition (current_file, line, body); + else + { + gdb_assert (macinfo_type == DW_MACRO_undef + || macinfo_type == DW_MACRO_undef_strp + || macinfo_type == DW_MACRO_undef_sup); + macro_undef (current_file, line, body); + } + } + break; + + case DW_MACRO_start_file: + { + unsigned int bytes_read; + int line, file; + + line = read_unsigned_leb128 (abfd, mac_ptr, &bytes_read); + mac_ptr += bytes_read; + file = read_unsigned_leb128 (abfd, mac_ptr, &bytes_read); + mac_ptr += bytes_read; + + if ((line == 0 && !at_commandline) + || (line != 0 && at_commandline)) + complaint (_("debug info gives source %d included " + "from %s at %s line %d"), + file, at_commandline ? _("command-line") : _("file"), + line == 0 ? _("zero") : _("non-zero"), line); + + if (at_commandline) + { + /* This DW_MACRO_start_file was executed in the + pass one. */ + at_commandline = 0; + } + else + current_file = macro_start_file (builder, file, line, + current_file, lh); + } + break; + + case DW_MACRO_end_file: + if (! current_file) + complaint (_("macro debug info has an unmatched " + "`close_file' directive")); + else + { + current_file = current_file->included_by; + if (! current_file) + { + enum dwarf_macro_record_type next_type; + + /* GCC circa March 2002 doesn't produce the zero + type byte marking the end of the compilation + unit. Complain if it's not there, but exit no + matter what. */ + + /* Do we at least have room for a macinfo type byte? */ + if (mac_ptr >= mac_end) + { + section->overflow_complaint (); + return; + } + + /* We don't increment mac_ptr here, so this is just + a look-ahead. */ + next_type + = (enum dwarf_macro_record_type) read_1_byte (abfd, + mac_ptr); + if (next_type != 0) + complaint (_("no terminating 0-type entry for " + "macros in `.debug_macinfo' section")); + + return; + } + } + break; + + case DW_MACRO_import: + case DW_MACRO_import_sup: + { + LONGEST offset; + void **slot; + bfd *include_bfd = abfd; + const struct dwarf2_section_info *include_section = section; + const gdb_byte *include_mac_end = mac_end; + int is_dwz = section_is_dwz; + const gdb_byte *new_mac_ptr; + + offset = read_offset (abfd, mac_ptr, offset_size); + mac_ptr += offset_size; + + if (macinfo_type == DW_MACRO_import_sup) + { + dwz_file *dwz = dwarf2_get_dwz_file (per_objfile->per_bfd); + + dwz->macro.read (objfile); + + include_section = &dwz->macro; + include_bfd = include_section->get_bfd_owner (); + include_mac_end = dwz->macro.buffer + dwz->macro.size; + is_dwz = 1; + } + + new_mac_ptr = include_section->buffer + offset; + slot = htab_find_slot (include_hash, new_mac_ptr, INSERT); + + if (*slot != NULL) + { + /* This has actually happened; see + http://sourceware.org/bugzilla/show_bug.cgi?id=13568. */ + complaint (_("recursive DW_MACRO_import in " + ".debug_macro section")); + } + else + { + *slot = (void *) new_mac_ptr; + + dwarf_decode_macro_bytes (per_objfile, builder, include_bfd, + new_mac_ptr, include_mac_end, + current_file, lh, section, + section_is_gnu, is_dwz, offset_size, + include_hash); + + htab_remove_elt (include_hash, (void *) new_mac_ptr); + } + } + break; + + case DW_MACINFO_vendor_ext: + if (!section_is_gnu) + { + unsigned int bytes_read; + + /* This reads the constant, but since we don't recognize + any vendor extensions, we ignore it. */ + read_unsigned_leb128 (abfd, mac_ptr, &bytes_read); + mac_ptr += bytes_read; + read_direct_string (abfd, mac_ptr, &bytes_read); + mac_ptr += bytes_read; + + /* We don't recognize any vendor extensions. */ + break; + } + /* FALLTHROUGH */ + + default: + mac_ptr = skip_unknown_opcode (macinfo_type, opcode_definitions, + mac_ptr, mac_end, abfd, offset_size, + section); + if (mac_ptr == NULL) + return; + break; + } + DIAGNOSTIC_POP + } while (macinfo_type != 0); +} + +void +dwarf_decode_macros (dwarf2_per_objfile *per_objfile, + buildsym_compunit *builder, + const dwarf2_section_info *section, + const struct line_header *lh, unsigned int offset_size, + unsigned int offset, int section_is_gnu) +{ + bfd *abfd; + const gdb_byte *mac_ptr, *mac_end; + struct macro_source_file *current_file = 0; + enum dwarf_macro_record_type macinfo_type; + const gdb_byte *opcode_definitions[256]; + void **slot; + + abfd = section->get_bfd_owner (); + + /* First pass: Find the name of the base filename. + This filename is needed in order to process all macros whose definition + (or undefinition) comes from the command line. These macros are defined + before the first DW_MACINFO_start_file entry, and yet still need to be + associated to the base file. + + To determine the base file name, we scan the macro definitions until we + reach the first DW_MACINFO_start_file entry. We then initialize + CURRENT_FILE accordingly so that any macro definition found before the + first DW_MACINFO_start_file can still be associated to the base file. */ + + mac_ptr = section->buffer + offset; + mac_end = section->buffer + section->size; + + mac_ptr = dwarf_parse_macro_header (opcode_definitions, abfd, mac_ptr, + &offset_size, section_is_gnu); + if (mac_ptr == NULL) + { + /* We already issued a complaint. */ + return; + } + + do + { + /* Do we at least have room for a macinfo type byte? */ + if (mac_ptr >= mac_end) + { + /* Complaint is printed during the second pass as GDB will probably + stop the first pass earlier upon finding + DW_MACINFO_start_file. */ + break; + } + + macinfo_type = (enum dwarf_macro_record_type) read_1_byte (abfd, mac_ptr); + mac_ptr++; + + /* Note that we rely on the fact that the corresponding GNU and + DWARF constants are the same. */ + DIAGNOSTIC_PUSH + DIAGNOSTIC_IGNORE_SWITCH_DIFFERENT_ENUM_TYPES + switch (macinfo_type) + { + /* A zero macinfo type indicates the end of the macro + information. */ + case 0: + break; + + case DW_MACRO_define: + case DW_MACRO_undef: + /* Only skip the data by MAC_PTR. */ + { + unsigned int bytes_read; + + read_unsigned_leb128 (abfd, mac_ptr, &bytes_read); + mac_ptr += bytes_read; + read_direct_string (abfd, mac_ptr, &bytes_read); + mac_ptr += bytes_read; + } + break; + + case DW_MACRO_start_file: + { + unsigned int bytes_read; + int line, file; + + line = read_unsigned_leb128 (abfd, mac_ptr, &bytes_read); + mac_ptr += bytes_read; + file = read_unsigned_leb128 (abfd, mac_ptr, &bytes_read); + mac_ptr += bytes_read; + + current_file = macro_start_file (builder, file, line, + current_file, lh); + } + break; + + case DW_MACRO_end_file: + /* No data to skip by MAC_PTR. */ + break; + + case DW_MACRO_define_strp: + case DW_MACRO_undef_strp: + case DW_MACRO_define_sup: + case DW_MACRO_undef_sup: + { + unsigned int bytes_read; + + read_unsigned_leb128 (abfd, mac_ptr, &bytes_read); + mac_ptr += bytes_read; + mac_ptr += offset_size; + } + break; + + case DW_MACRO_import: + case DW_MACRO_import_sup: + /* Note that, according to the spec, a transparent include + chain cannot call DW_MACRO_start_file. So, we can just + skip this opcode. */ + mac_ptr += offset_size; + break; + + case DW_MACINFO_vendor_ext: + /* Only skip the data by MAC_PTR. */ + if (!section_is_gnu) + { + unsigned int bytes_read; + + read_unsigned_leb128 (abfd, mac_ptr, &bytes_read); + mac_ptr += bytes_read; + read_direct_string (abfd, mac_ptr, &bytes_read); + mac_ptr += bytes_read; + } + /* FALLTHROUGH */ + + default: + mac_ptr = skip_unknown_opcode (macinfo_type, opcode_definitions, + mac_ptr, mac_end, abfd, offset_size, + section); + if (mac_ptr == NULL) + return; + break; + } + DIAGNOSTIC_POP + } while (macinfo_type != 0 && current_file == NULL); + + /* Second pass: Process all entries. + + Use the AT_COMMAND_LINE flag to determine whether we are still processing + command-line macro definitions/undefinitions. This flag is unset when we + reach the first DW_MACINFO_start_file entry. */ + + htab_up include_hash (htab_create_alloc (1, htab_hash_pointer, + htab_eq_pointer, + NULL, xcalloc, xfree)); + mac_ptr = section->buffer + offset; + slot = htab_find_slot (include_hash.get (), mac_ptr, INSERT); + *slot = (void *) mac_ptr; + dwarf_decode_macro_bytes (per_objfile, builder, abfd, mac_ptr, mac_end, + current_file, lh, section, section_is_gnu, 0, + offset_size, include_hash.get ()); +} diff -Nru gdb-9.1/gdb/dwarf2/macro.h gdb-10.2/gdb/dwarf2/macro.h --- gdb-9.1/gdb/dwarf2/macro.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/dwarf2/macro.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,33 @@ +/* DWARF macro support for GDB. + + Copyright (C) 2003-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef GDB_DWARF2_MACRO_H +#define GDB_DWARF2_MACRO_H + +struct buildsym_compunit; + +extern void dwarf_decode_macros (dwarf2_per_objfile *per_objfile, + buildsym_compunit *builder, + const dwarf2_section_info *section, + const struct line_header *lh, + unsigned int offset_size, + unsigned int offset, + int section_is_gnu); + +#endif /* GDB_DWARF2_MACRO_H */ diff -Nru gdb-9.1/gdb/dwarf2/read.c gdb-10.2/gdb/dwarf2/read.c --- gdb-9.1/gdb/dwarf2/read.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/dwarf2/read.c 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,24824 @@ +/* DWARF 2 debugging format support for GDB. + + Copyright (C) 1994-2021 Free Software Foundation, Inc. + + Adapted by Gary Funck (gary@intrepid.com), Intrepid Technology, + Inc. with support from Florida State University (under contract + with the Ada Joint Program Office), and Silicon Graphics, Inc. + Initial contribution by Brent Benson, Harris Computer Systems, Inc., + based on Fred Fish's (Cygnus Support) implementation of DWARF 1 + support. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +/* FIXME: Various die-reading functions need to be more careful with + reading off the end of the section. + E.g., load_partial_dies, read_partial_die. */ + +#include "defs.h" +#include "dwarf2/read.h" +#include "dwarf2/abbrev.h" +#include "dwarf2/attribute.h" +#include "dwarf2/comp-unit.h" +#include "dwarf2/index-cache.h" +#include "dwarf2/index-common.h" +#include "dwarf2/leb.h" +#include "dwarf2/line-header.h" +#include "dwarf2/dwz.h" +#include "dwarf2/macro.h" +#include "dwarf2/die.h" +#include "dwarf2/stringify.h" +#include "bfd.h" +#include "elf-bfd.h" +#include "symtab.h" +#include "gdbtypes.h" +#include "objfiles.h" +#include "dwarf2.h" +#include "buildsym.h" +#include "demangle.h" +#include "gdb-demangle.h" +#include "filenames.h" /* for DOSish file names */ +#include "language.h" +#include "complaints.h" +#include "dwarf2/expr.h" +#include "dwarf2/loc.h" +#include "cp-support.h" +#include "hashtab.h" +#include "command.h" +#include "gdbcmd.h" +#include "block.h" +#include "addrmap.h" +#include "typeprint.h" +#include "psympriv.h" +#include "c-lang.h" +#include "go-lang.h" +#include "valprint.h" +#include "gdbcore.h" /* for gnutarget */ +#include "gdb/gdb-index.h" +#include "gdb_bfd.h" +#include "f-lang.h" +#include "source.h" +#include "build-id.h" +#include "namespace.h" +#include "gdbsupport/function-view.h" +#include "gdbsupport/gdb_optional.h" +#include "gdbsupport/underlying.h" +#include "gdbsupport/hash_enum.h" +#include "filename-seen-cache.h" +#include "producer.h" +#include <fcntl.h> +#include <algorithm> +#include <unordered_map> +#include "gdbsupport/selftest.h" +#include "rust-lang.h" +#include "gdbsupport/pathstuff.h" +#include "count-one-bits.h" +#include "debuginfod-support.h" + +/* When == 1, print basic high level tracing messages. + When > 1, be more verbose. + This is in contrast to the low level DIE reading of dwarf_die_debug. */ +static unsigned int dwarf_read_debug = 0; + +/* When non-zero, dump DIEs after they are read in. */ +static unsigned int dwarf_die_debug = 0; + +/* When non-zero, dump line number entries as they are read in. */ +unsigned int dwarf_line_debug = 0; + +/* When true, cross-check physname against demangler. */ +static bool check_physname = false; + +/* When true, do not reject deprecated .gdb_index sections. */ +static bool use_deprecated_index_sections = false; + +/* This is used to store the data that is always per objfile. */ +static const objfile_key<dwarf2_per_objfile> dwarf2_objfile_data_key; + +/* These are used to store the dwarf2_per_bfd objects. + + objfiles having the same BFD, which doesn't require relocations, are going to + share a dwarf2_per_bfd object, which is held in the _bfd_data_key version. + + Other objfiles are not going to share a dwarf2_per_bfd with any other + objfiles, so they'll have their own version kept in the _objfile_data_key + version. */ +static const struct bfd_key<dwarf2_per_bfd> dwarf2_per_bfd_bfd_data_key; +static const struct objfile_key<dwarf2_per_bfd> dwarf2_per_bfd_objfile_data_key; + +/* The "aclass" indices for various kinds of computed DWARF symbols. */ + +static int dwarf2_locexpr_index; +static int dwarf2_loclist_index; +static int dwarf2_locexpr_block_index; +static int dwarf2_loclist_block_index; + +/* Size of .debug_loclists section header for 32-bit DWARF format. */ +#define LOCLIST_HEADER_SIZE32 12 + +/* Size of .debug_loclists section header for 64-bit DWARF format. */ +#define LOCLIST_HEADER_SIZE64 20 + +/* Size of .debug_rnglists section header for 32-bit DWARF format. */ +#define RNGLIST_HEADER_SIZE32 12 + +/* Size of .debug_rnglists section header for 64-bit DWARF format. */ +#define RNGLIST_HEADER_SIZE64 20 + +/* An index into a (C++) symbol name component in a symbol name as + recorded in the mapped_index's symbol table. For each C++ symbol + in the symbol table, we record one entry for the start of each + component in the symbol in a table of name components, and then + sort the table, in order to be able to binary search symbol names, + ignoring leading namespaces, both completion and regular look up. + For example, for symbol "A::B::C", we'll have an entry that points + to "A::B::C", another that points to "B::C", and another for "C". + Note that function symbols in GDB index have no parameter + information, just the function/method names. You can convert a + name_component to a "const char *" using the + 'mapped_index::symbol_name_at(offset_type)' method. */ + +struct name_component +{ + /* Offset in the symbol name where the component starts. Stored as + a (32-bit) offset instead of a pointer to save memory and improve + locality on 64-bit architectures. */ + offset_type name_offset; + + /* The symbol's index in the symbol and constant pool tables of a + mapped_index. */ + offset_type idx; +}; + +/* Base class containing bits shared by both .gdb_index and + .debug_name indexes. */ + +struct mapped_index_base +{ + mapped_index_base () = default; + DISABLE_COPY_AND_ASSIGN (mapped_index_base); + + /* The name_component table (a sorted vector). See name_component's + description above. */ + std::vector<name_component> name_components; + + /* How NAME_COMPONENTS is sorted. */ + enum case_sensitivity name_components_casing; + + /* Return the number of names in the symbol table. */ + virtual size_t symbol_name_count () const = 0; + + /* Get the name of the symbol at IDX in the symbol table. */ + virtual const char *symbol_name_at + (offset_type idx, dwarf2_per_objfile *per_objfile) const = 0; + + /* Return whether the name at IDX in the symbol table should be + ignored. */ + virtual bool symbol_name_slot_invalid (offset_type idx) const + { + return false; + } + + /* Build the symbol name component sorted vector, if we haven't + yet. */ + void build_name_components (dwarf2_per_objfile *per_objfile); + + /* Returns the lower (inclusive) and upper (exclusive) bounds of the + possible matches for LN_NO_PARAMS in the name component + vector. */ + std::pair<std::vector<name_component>::const_iterator, + std::vector<name_component>::const_iterator> + find_name_components_bounds (const lookup_name_info &ln_no_params, + enum language lang, + dwarf2_per_objfile *per_objfile) const; + + /* Prevent deleting/destroying via a base class pointer. */ +protected: + ~mapped_index_base() = default; +}; + +/* A description of the mapped index. The file format is described in + a comment by the code that writes the index. */ +struct mapped_index final : public mapped_index_base +{ + /* A slot/bucket in the symbol table hash. */ + struct symbol_table_slot + { + const offset_type name; + const offset_type vec; + }; + + /* Index data format version. */ + int version = 0; + + /* The address table data. */ + gdb::array_view<const gdb_byte> address_table; + + /* The symbol table, implemented as a hash table. */ + gdb::array_view<symbol_table_slot> symbol_table; + + /* A pointer to the constant pool. */ + const char *constant_pool = nullptr; + + bool symbol_name_slot_invalid (offset_type idx) const override + { + const auto &bucket = this->symbol_table[idx]; + return bucket.name == 0 && bucket.vec == 0; + } + + /* Convenience method to get at the name of the symbol at IDX in the + symbol table. */ + const char *symbol_name_at + (offset_type idx, dwarf2_per_objfile *per_objfile) const override + { return this->constant_pool + MAYBE_SWAP (this->symbol_table[idx].name); } + + size_t symbol_name_count () const override + { return this->symbol_table.size (); } +}; + +/* A description of the mapped .debug_names. + Uninitialized map has CU_COUNT 0. */ +struct mapped_debug_names final : public mapped_index_base +{ + bfd_endian dwarf5_byte_order; + bool dwarf5_is_dwarf64; + bool augmentation_is_gdb; + uint8_t offset_size; + uint32_t cu_count = 0; + uint32_t tu_count, bucket_count, name_count; + const gdb_byte *cu_table_reordered, *tu_table_reordered; + const uint32_t *bucket_table_reordered, *hash_table_reordered; + const gdb_byte *name_table_string_offs_reordered; + const gdb_byte *name_table_entry_offs_reordered; + const gdb_byte *entry_pool; + + struct index_val + { + ULONGEST dwarf_tag; + struct attr + { + /* Attribute name DW_IDX_*. */ + ULONGEST dw_idx; + + /* Attribute form DW_FORM_*. */ + ULONGEST form; + + /* Value if FORM is DW_FORM_implicit_const. */ + LONGEST implicit_const; + }; + std::vector<attr> attr_vec; + }; + + std::unordered_map<ULONGEST, index_val> abbrev_map; + + const char *namei_to_name + (uint32_t namei, dwarf2_per_objfile *per_objfile) const; + + /* Implementation of the mapped_index_base virtual interface, for + the name_components cache. */ + + const char *symbol_name_at + (offset_type idx, dwarf2_per_objfile *per_objfile) const override + { return namei_to_name (idx, per_objfile); } + + size_t symbol_name_count () const override + { return this->name_count; } +}; + +/* See dwarf2read.h. */ + +dwarf2_per_objfile * +get_dwarf2_per_objfile (struct objfile *objfile) +{ + return dwarf2_objfile_data_key.get (objfile); +} + +/* Default names of the debugging sections. */ + +/* Note that if the debugging section has been compressed, it might + have a name like .zdebug_info. */ + +static const struct dwarf2_debug_sections dwarf2_elf_names = +{ + { ".debug_info", ".zdebug_info" }, + { ".debug_abbrev", ".zdebug_abbrev" }, + { ".debug_line", ".zdebug_line" }, + { ".debug_loc", ".zdebug_loc" }, + { ".debug_loclists", ".zdebug_loclists" }, + { ".debug_macinfo", ".zdebug_macinfo" }, + { ".debug_macro", ".zdebug_macro" }, + { ".debug_str", ".zdebug_str" }, + { ".debug_str_offsets", ".zdebug_str_offsets" }, + { ".debug_line_str", ".zdebug_line_str" }, + { ".debug_ranges", ".zdebug_ranges" }, + { ".debug_rnglists", ".zdebug_rnglists" }, + { ".debug_types", ".zdebug_types" }, + { ".debug_addr", ".zdebug_addr" }, + { ".debug_frame", ".zdebug_frame" }, + { ".eh_frame", NULL }, + { ".gdb_index", ".zgdb_index" }, + { ".debug_names", ".zdebug_names" }, + { ".debug_aranges", ".zdebug_aranges" }, + 23 +}; + +/* List of DWO/DWP sections. */ + +static const struct dwop_section_names +{ + struct dwarf2_section_names abbrev_dwo; + struct dwarf2_section_names info_dwo; + struct dwarf2_section_names line_dwo; + struct dwarf2_section_names loc_dwo; + struct dwarf2_section_names loclists_dwo; + struct dwarf2_section_names macinfo_dwo; + struct dwarf2_section_names macro_dwo; + struct dwarf2_section_names rnglists_dwo; + struct dwarf2_section_names str_dwo; + struct dwarf2_section_names str_offsets_dwo; + struct dwarf2_section_names types_dwo; + struct dwarf2_section_names cu_index; + struct dwarf2_section_names tu_index; +} +dwop_section_names = +{ + { ".debug_abbrev.dwo", ".zdebug_abbrev.dwo" }, + { ".debug_info.dwo", ".zdebug_info.dwo" }, + { ".debug_line.dwo", ".zdebug_line.dwo" }, + { ".debug_loc.dwo", ".zdebug_loc.dwo" }, + { ".debug_loclists.dwo", ".zdebug_loclists.dwo" }, + { ".debug_macinfo.dwo", ".zdebug_macinfo.dwo" }, + { ".debug_macro.dwo", ".zdebug_macro.dwo" }, + { ".debug_rnglists.dwo", ".zdebug_rnglists.dwo" }, + { ".debug_str.dwo", ".zdebug_str.dwo" }, + { ".debug_str_offsets.dwo", ".zdebug_str_offsets.dwo" }, + { ".debug_types.dwo", ".zdebug_types.dwo" }, + { ".debug_cu_index", ".zdebug_cu_index" }, + { ".debug_tu_index", ".zdebug_tu_index" }, +}; + +/* local data types */ + +/* The location list and range list sections (.debug_loclists & .debug_rnglists) + begin with a header, which contains the following information. */ +struct loclists_rnglists_header +{ + /* A 4-byte or 12-byte length containing the length of the + set of entries for this compilation unit, not including the + length field itself. */ + unsigned int length; + + /* A 2-byte version identifier. */ + short version; + + /* A 1-byte unsigned integer containing the size in bytes of an address on + the target system. */ + unsigned char addr_size; + + /* A 1-byte unsigned integer containing the size in bytes of a segment selector + on the target system. */ + unsigned char segment_collector_size; + + /* A 4-byte count of the number of offsets that follow the header. */ + unsigned int offset_entry_count; +}; + +/* Type used for delaying computation of method physnames. + See comments for compute_delayed_physnames. */ +struct delayed_method_info +{ + /* The type to which the method is attached, i.e., its parent class. */ + struct type *type; + + /* The index of the method in the type's function fieldlists. */ + int fnfield_index; + + /* The index of the method in the fieldlist. */ + int index; + + /* The name of the DIE. */ + const char *name; + + /* The DIE associated with this method. */ + struct die_info *die; +}; + +/* Internal state when decoding a particular compilation unit. */ +struct dwarf2_cu +{ + explicit dwarf2_cu (dwarf2_per_cu_data *per_cu, + dwarf2_per_objfile *per_objfile); + + DISABLE_COPY_AND_ASSIGN (dwarf2_cu); + + /* TU version of handle_DW_AT_stmt_list for read_type_unit_scope. + Create the set of symtabs used by this TU, or if this TU is sharing + symtabs with another TU and the symtabs have already been created + then restore those symtabs in the line header. + We don't need the pc/line-number mapping for type units. */ + void setup_type_unit_groups (struct die_info *die); + + /* Start a symtab for DWARF. NAME, COMP_DIR, LOW_PC are passed to the + buildsym_compunit constructor. */ + struct compunit_symtab *start_symtab (const char *name, + const char *comp_dir, + CORE_ADDR low_pc); + + /* Reset the builder. */ + void reset_builder () { m_builder.reset (); } + + /* Return a type that is a generic pointer type, the size of which + matches the address size given in the compilation unit header for + this CU. */ + struct type *addr_type () const; + + /* Find an integer type the same size as the address size given in + the compilation unit header for this CU. UNSIGNED_P controls if + the integer is unsigned or not. */ + struct type *addr_sized_int_type (bool unsigned_p) const; + + /* The header of the compilation unit. */ + struct comp_unit_head header {}; + + /* Base address of this compilation unit. */ + gdb::optional<CORE_ADDR> base_address; + + /* The language we are debugging. */ + enum language language = language_unknown; + const struct language_defn *language_defn = nullptr; + + const char *producer = nullptr; + +private: + /* The symtab builder for this CU. This is only non-NULL when full + symbols are being read. */ + std::unique_ptr<buildsym_compunit> m_builder; + +public: + /* The generic symbol table building routines have separate lists for + file scope symbols and all all other scopes (local scopes). So + we need to select the right one to pass to add_symbol_to_list(). + We do it by keeping a pointer to the correct list in list_in_scope. + + FIXME: The original dwarf code just treated the file scope as the + first local scope, and all other local scopes as nested local + scopes, and worked fine. Check to see if we really need to + distinguish these in buildsym.c. */ + struct pending **list_in_scope = nullptr; + + /* Hash table holding all the loaded partial DIEs + with partial_die->offset.SECT_OFF as hash. */ + htab_t partial_dies = nullptr; + + /* Storage for things with the same lifetime as this read-in compilation + unit, including partial DIEs. */ + auto_obstack comp_unit_obstack; + + /* Backlink to our per_cu entry. */ + struct dwarf2_per_cu_data *per_cu; + + /* The dwarf2_per_objfile that owns this. */ + dwarf2_per_objfile *per_objfile; + + /* How many compilation units ago was this CU last referenced? */ + int last_used = 0; + + /* A hash table of DIE cu_offset for following references with + die_info->offset.sect_off as hash. */ + htab_t die_hash = nullptr; + + /* Full DIEs if read in. */ + struct die_info *dies = nullptr; + + /* A set of pointers to dwarf2_per_cu_data objects for compilation + units referenced by this one. Only set during full symbol processing; + partial symbol tables do not have dependencies. */ + htab_t dependencies = nullptr; + + /* Header data from the line table, during full symbol processing. */ + struct line_header *line_header = nullptr; + /* Non-NULL if LINE_HEADER is owned by this DWARF_CU. Otherwise, + it's owned by dwarf2_per_bfd::line_header_hash. If non-NULL, + this is the DW_TAG_compile_unit die for this CU. We'll hold on + to the line header as long as this DIE is being processed. See + process_die_scope. */ + die_info *line_header_die_owner = nullptr; + + /* A list of methods which need to have physnames computed + after all type information has been read. */ + std::vector<delayed_method_info> method_list; + + /* To be copied to symtab->call_site_htab. */ + htab_t call_site_htab = nullptr; + + /* Non-NULL if this CU came from a DWO file. + There is an invariant here that is important to remember: + Except for attributes copied from the top level DIE in the "main" + (or "stub") file in preparation for reading the DWO file + (e.g., DW_AT_addr_base), we KISS: there is only *one* CU. + Either there isn't a DWO file (in which case this is NULL and the point + is moot), or there is and either we're not going to read it (in which + case this is NULL) or there is and we are reading it (in which case this + is non-NULL). */ + struct dwo_unit *dwo_unit = nullptr; + + /* The DW_AT_addr_base (DW_AT_GNU_addr_base) attribute if present. + Note this value comes from the Fission stub CU/TU's DIE. */ + gdb::optional<ULONGEST> addr_base; + + /* The DW_AT_rnglists_base attribute if present. + Note this value comes from the Fission stub CU/TU's DIE. + Also note that the value is zero in the non-DWO case so this value can + be used without needing to know whether DWO files are in use or not. + N.B. This does not apply to DW_AT_ranges appearing in + DW_TAG_compile_unit dies. This is a bit of a wart, consider if ever + DW_AT_ranges appeared in the DW_TAG_compile_unit of DWO DIEs: then + DW_AT_rnglists_base *would* have to be applied, and we'd have to care + whether the DW_AT_ranges attribute came from the skeleton or DWO. */ + ULONGEST ranges_base = 0; + + /* The DW_AT_loclists_base attribute if present. */ + ULONGEST loclist_base = 0; + + /* When reading debug info generated by older versions of rustc, we + have to rewrite some union types to be struct types with a + variant part. This rewriting must be done after the CU is fully + read in, because otherwise at the point of rewriting some struct + type might not have been fully processed. So, we keep a list of + all such types here and process them after expansion. */ + std::vector<struct type *> rust_unions; + + /* The DW_AT_str_offsets_base attribute if present. For DWARF 4 version DWO + files, the value is implicitly zero. For DWARF 5 version DWO files, the + value is often implicit and is the size of the header of + .debug_str_offsets section (8 or 4, depending on the address size). */ + gdb::optional<ULONGEST> str_offsets_base; + + /* Mark used when releasing cached dies. */ + bool mark : 1; + + /* This CU references .debug_loc. See the symtab->locations_valid field. + This test is imperfect as there may exist optimized debug code not using + any location list and still facing inlining issues if handled as + unoptimized code. For a future better test see GCC PR other/32998. */ + bool has_loclist : 1; + + /* These cache the results for producer_is_* fields. CHECKED_PRODUCER is true + if all the producer_is_* fields are valid. This information is cached + because profiling CU expansion showed excessive time spent in + producer_is_gxx_lt_4_6. */ + bool checked_producer : 1; + bool producer_is_gxx_lt_4_6 : 1; + bool producer_is_gcc_lt_4_3 : 1; + bool producer_is_icc : 1; + bool producer_is_icc_lt_14 : 1; + bool producer_is_codewarrior : 1; + + /* When true, the file that we're processing is known to have + debugging info for C++ namespaces. GCC 3.3.x did not produce + this information, but later versions do. */ + + bool processing_has_namespace_info : 1; + + struct partial_die_info *find_partial_die (sect_offset sect_off); + + /* If this CU was inherited by another CU (via specification, + abstract_origin, etc), this is the ancestor CU. */ + dwarf2_cu *ancestor; + + /* Get the buildsym_compunit for this CU. */ + buildsym_compunit *get_builder () + { + /* If this CU has a builder associated with it, use that. */ + if (m_builder != nullptr) + return m_builder.get (); + + /* Otherwise, search ancestors for a valid builder. */ + if (ancestor != nullptr) + return ancestor->get_builder (); + + return nullptr; + } +}; + +/* A struct that can be used as a hash key for tables based on DW_AT_stmt_list. + This includes type_unit_group and quick_file_names. */ + +struct stmt_list_hash +{ + /* The DWO unit this table is from or NULL if there is none. */ + struct dwo_unit *dwo_unit; + + /* Offset in .debug_line or .debug_line.dwo. */ + sect_offset line_sect_off; +}; + +/* Each element of dwarf2_per_bfd->type_unit_groups is a pointer to + an object of this type. This contains elements of type unit groups + that can be shared across objfiles. The non-shareable parts are in + type_unit_group_unshareable. */ + +struct type_unit_group +{ + /* dwarf2read.c's main "handle" on a TU symtab. + To simplify things we create an artificial CU that "includes" all the + type units using this stmt_list so that the rest of the code still has + a "per_cu" handle on the symtab. */ + struct dwarf2_per_cu_data per_cu; + + /* The TUs that share this DW_AT_stmt_list entry. + This is added to while parsing type units to build partial symtabs, + and is deleted afterwards and not used again. */ + std::vector<signatured_type *> *tus; + + /* The data used to construct the hash key. */ + struct stmt_list_hash hash; +}; + +/* These sections are what may appear in a (real or virtual) DWO file. */ + +struct dwo_sections +{ + struct dwarf2_section_info abbrev; + struct dwarf2_section_info line; + struct dwarf2_section_info loc; + struct dwarf2_section_info loclists; + struct dwarf2_section_info macinfo; + struct dwarf2_section_info macro; + struct dwarf2_section_info rnglists; + struct dwarf2_section_info str; + struct dwarf2_section_info str_offsets; + /* In the case of a virtual DWO file, these two are unused. */ + struct dwarf2_section_info info; + std::vector<dwarf2_section_info> types; +}; + +/* CUs/TUs in DWP/DWO files. */ + +struct dwo_unit +{ + /* Backlink to the containing struct dwo_file. */ + struct dwo_file *dwo_file; + + /* The "id" that distinguishes this CU/TU. + .debug_info calls this "dwo_id", .debug_types calls this "signature". + Since signatures came first, we stick with it for consistency. */ + ULONGEST signature; + + /* The section this CU/TU lives in, in the DWO file. */ + struct dwarf2_section_info *section; + + /* Same as dwarf2_per_cu_data:{sect_off,length} but in the DWO section. */ + sect_offset sect_off; + unsigned int length; + + /* For types, offset in the type's DIE of the type defined by this TU. */ + cu_offset type_offset_in_tu; +}; + +/* include/dwarf2.h defines the DWP section codes. + It defines a max value but it doesn't define a min value, which we + use for error checking, so provide one. */ + +enum dwp_v2_section_ids +{ + DW_SECT_MIN = 1 +}; + +/* Data for one DWO file. + + This includes virtual DWO files (a virtual DWO file is a DWO file as it + appears in a DWP file). DWP files don't really have DWO files per se - + comdat folding of types "loses" the DWO file they came from, and from + a high level view DWP files appear to contain a mass of random types. + However, to maintain consistency with the non-DWP case we pretend DWP + files contain virtual DWO files, and we assign each TU with one virtual + DWO file (generally based on the line and abbrev section offsets - + a heuristic that seems to work in practice). */ + +struct dwo_file +{ + dwo_file () = default; + DISABLE_COPY_AND_ASSIGN (dwo_file); + + /* The DW_AT_GNU_dwo_name or DW_AT_dwo_name attribute. + For virtual DWO files the name is constructed from the section offsets + of abbrev,line,loc,str_offsets so that we combine virtual DWO files + from related CU+TUs. */ + const char *dwo_name = nullptr; + + /* The DW_AT_comp_dir attribute. */ + const char *comp_dir = nullptr; + + /* The bfd, when the file is open. Otherwise this is NULL. + This is unused(NULL) for virtual DWO files where we use dwp_file.dbfd. */ + gdb_bfd_ref_ptr dbfd; + + /* The sections that make up this DWO file. + Remember that for virtual DWO files in DWP V2 or DWP V5, these are virtual + sections (for lack of a better name). */ + struct dwo_sections sections {}; + + /* The CUs in the file. + Each element is a struct dwo_unit. Multiple CUs per DWO are supported as + an extension to handle LLVM's Link Time Optimization output (where + multiple source files may be compiled into a single object/dwo pair). */ + htab_up cus; + + /* Table of TUs in the file. + Each element is a struct dwo_unit. */ + htab_up tus; +}; + +/* These sections are what may appear in a DWP file. */ + +struct dwp_sections +{ + /* These are used by all DWP versions (1, 2 and 5). */ + struct dwarf2_section_info str; + struct dwarf2_section_info cu_index; + struct dwarf2_section_info tu_index; + + /* These are only used by DWP version 2 and version 5 files. + In DWP version 1 the .debug_info.dwo, .debug_types.dwo, and other + sections are referenced by section number, and are not recorded here. + In DWP version 2 or 5 there is at most one copy of all these sections, + each section being (effectively) comprised of the concatenation of all of + the individual sections that exist in the version 1 format. + To keep the code simple we treat each of these concatenated pieces as a + section itself (a virtual section?). */ + struct dwarf2_section_info abbrev; + struct dwarf2_section_info info; + struct dwarf2_section_info line; + struct dwarf2_section_info loc; + struct dwarf2_section_info loclists; + struct dwarf2_section_info macinfo; + struct dwarf2_section_info macro; + struct dwarf2_section_info rnglists; + struct dwarf2_section_info str_offsets; + struct dwarf2_section_info types; +}; + +/* These sections are what may appear in a virtual DWO file in DWP version 1. + A virtual DWO file is a DWO file as it appears in a DWP file. */ + +struct virtual_v1_dwo_sections +{ + struct dwarf2_section_info abbrev; + struct dwarf2_section_info line; + struct dwarf2_section_info loc; + struct dwarf2_section_info macinfo; + struct dwarf2_section_info macro; + struct dwarf2_section_info str_offsets; + /* Each DWP hash table entry records one CU or one TU. + That is recorded here, and copied to dwo_unit.section. */ + struct dwarf2_section_info info_or_types; +}; + +/* Similar to virtual_v1_dwo_sections, but for DWP version 2 or 5. + In version 2, the sections of the DWO files are concatenated together + and stored in one section of that name. Thus each ELF section contains + several "virtual" sections. */ + +struct virtual_v2_or_v5_dwo_sections +{ + bfd_size_type abbrev_offset; + bfd_size_type abbrev_size; + + bfd_size_type line_offset; + bfd_size_type line_size; + + bfd_size_type loc_offset; + bfd_size_type loc_size; + + bfd_size_type loclists_offset; + bfd_size_type loclists_size; + + bfd_size_type macinfo_offset; + bfd_size_type macinfo_size; + + bfd_size_type macro_offset; + bfd_size_type macro_size; + + bfd_size_type rnglists_offset; + bfd_size_type rnglists_size; + + bfd_size_type str_offsets_offset; + bfd_size_type str_offsets_size; + + /* Each DWP hash table entry records one CU or one TU. + That is recorded here, and copied to dwo_unit.section. */ + bfd_size_type info_or_types_offset; + bfd_size_type info_or_types_size; +}; + +/* Contents of DWP hash tables. */ + +struct dwp_hash_table +{ + uint32_t version, nr_columns; + uint32_t nr_units, nr_slots; + const gdb_byte *hash_table, *unit_table; + union + { + struct + { + const gdb_byte *indices; + } v1; + struct + { + /* This is indexed by column number and gives the id of the section + in that column. */ +#define MAX_NR_V2_DWO_SECTIONS \ + (1 /* .debug_info or .debug_types */ \ + + 1 /* .debug_abbrev */ \ + + 1 /* .debug_line */ \ + + 1 /* .debug_loc */ \ + + 1 /* .debug_str_offsets */ \ + + 1 /* .debug_macro or .debug_macinfo */) + int section_ids[MAX_NR_V2_DWO_SECTIONS]; + const gdb_byte *offsets; + const gdb_byte *sizes; + } v2; + struct + { + /* This is indexed by column number and gives the id of the section + in that column. */ +#define MAX_NR_V5_DWO_SECTIONS \ + (1 /* .debug_info */ \ + + 1 /* .debug_abbrev */ \ + + 1 /* .debug_line */ \ + + 1 /* .debug_loclists */ \ + + 1 /* .debug_str_offsets */ \ + + 1 /* .debug_macro */ \ + + 1 /* .debug_rnglists */) + int section_ids[MAX_NR_V5_DWO_SECTIONS]; + const gdb_byte *offsets; + const gdb_byte *sizes; + } v5; + } section_pool; +}; + +/* Data for one DWP file. */ + +struct dwp_file +{ + dwp_file (const char *name_, gdb_bfd_ref_ptr &&abfd) + : name (name_), + dbfd (std::move (abfd)) + { + } + + /* Name of the file. */ + const char *name; + + /* File format version. */ + int version = 0; + + /* The bfd. */ + gdb_bfd_ref_ptr dbfd; + + /* Section info for this file. */ + struct dwp_sections sections {}; + + /* Table of CUs in the file. */ + const struct dwp_hash_table *cus = nullptr; + + /* Table of TUs in the file. */ + const struct dwp_hash_table *tus = nullptr; + + /* Tables of loaded CUs/TUs. Each entry is a struct dwo_unit *. */ + htab_up loaded_cus; + htab_up loaded_tus; + + /* Table to map ELF section numbers to their sections. + This is only needed for the DWP V1 file format. */ + unsigned int num_sections = 0; + asection **elf_sections = nullptr; +}; + +/* Struct used to pass misc. parameters to read_die_and_children, et + al. which are used for both .debug_info and .debug_types dies. + All parameters here are unchanging for the life of the call. This + struct exists to abstract away the constant parameters of die reading. */ + +struct die_reader_specs +{ + /* The bfd of die_section. */ + bfd* abfd; + + /* The CU of the DIE we are parsing. */ + struct dwarf2_cu *cu; + + /* Non-NULL if reading a DWO file (including one packaged into a DWP). */ + struct dwo_file *dwo_file; + + /* The section the die comes from. + This is either .debug_info or .debug_types, or the .dwo variants. */ + struct dwarf2_section_info *die_section; + + /* die_section->buffer. */ + const gdb_byte *buffer; + + /* The end of the buffer. */ + const gdb_byte *buffer_end; + + /* The abbreviation table to use when reading the DIEs. */ + struct abbrev_table *abbrev_table; +}; + +/* A subclass of die_reader_specs that holds storage and has complex + constructor and destructor behavior. */ + +class cutu_reader : public die_reader_specs +{ +public: + + cutu_reader (dwarf2_per_cu_data *this_cu, + dwarf2_per_objfile *per_objfile, + struct abbrev_table *abbrev_table, + dwarf2_cu *existing_cu, + bool skip_partial); + + explicit cutu_reader (struct dwarf2_per_cu_data *this_cu, + dwarf2_per_objfile *per_objfile, + struct dwarf2_cu *parent_cu = nullptr, + struct dwo_file *dwo_file = nullptr); + + DISABLE_COPY_AND_ASSIGN (cutu_reader); + + const gdb_byte *info_ptr = nullptr; + struct die_info *comp_unit_die = nullptr; + bool dummy_p = false; + + /* Release the new CU, putting it on the chain. This cannot be done + for dummy CUs. */ + void keep (); + +private: + void init_tu_and_read_dwo_dies (dwarf2_per_cu_data *this_cu, + dwarf2_per_objfile *per_objfile, + dwarf2_cu *existing_cu); + + struct dwarf2_per_cu_data *m_this_cu; + std::unique_ptr<dwarf2_cu> m_new_cu; + + /* The ordinary abbreviation table. */ + abbrev_table_up m_abbrev_table_holder; + + /* The DWO abbreviation table. */ + abbrev_table_up m_dwo_abbrev_table; +}; + +/* When we construct a partial symbol table entry we only + need this much information. */ +struct partial_die_info : public allocate_on_obstack + { + partial_die_info (sect_offset sect_off, struct abbrev_info *abbrev); + + /* Disable assign but still keep copy ctor, which is needed + load_partial_dies. */ + partial_die_info& operator=(const partial_die_info& rhs) = delete; + + /* Adjust the partial die before generating a symbol for it. This + function may set the is_external flag or change the DIE's + name. */ + void fixup (struct dwarf2_cu *cu); + + /* Read a minimal amount of information into the minimal die + structure. */ + const gdb_byte *read (const struct die_reader_specs *reader, + const struct abbrev_info &abbrev, + const gdb_byte *info_ptr); + + /* Compute the name of this partial DIE. This memoizes the + result, so it is safe to call multiple times. */ + const char *name (dwarf2_cu *cu); + + /* Offset of this DIE. */ + const sect_offset sect_off; + + /* DWARF-2 tag for this DIE. */ + const ENUM_BITFIELD(dwarf_tag) tag : 16; + + /* Assorted flags describing the data found in this DIE. */ + const unsigned int has_children : 1; + + unsigned int is_external : 1; + unsigned int is_declaration : 1; + unsigned int has_type : 1; + unsigned int has_specification : 1; + unsigned int has_pc_info : 1; + unsigned int may_be_inlined : 1; + + /* This DIE has been marked DW_AT_main_subprogram. */ + unsigned int main_subprogram : 1; + + /* Flag set if the SCOPE field of this structure has been + computed. */ + unsigned int scope_set : 1; + + /* Flag set if the DIE has a byte_size attribute. */ + unsigned int has_byte_size : 1; + + /* Flag set if the DIE has a DW_AT_const_value attribute. */ + unsigned int has_const_value : 1; + + /* Flag set if any of the DIE's children are template arguments. */ + unsigned int has_template_arguments : 1; + + /* Flag set if fixup has been called on this die. */ + unsigned int fixup_called : 1; + + /* Flag set if DW_TAG_imported_unit uses DW_FORM_GNU_ref_alt. */ + unsigned int is_dwz : 1; + + /* Flag set if spec_offset uses DW_FORM_GNU_ref_alt. */ + unsigned int spec_is_dwz : 1; + + unsigned int canonical_name : 1; + + /* The name of this DIE. Normally the value of DW_AT_name, but + sometimes a default name for unnamed DIEs. */ + const char *raw_name = nullptr; + + /* The linkage name, if present. */ + const char *linkage_name = nullptr; + + /* The scope to prepend to our children. This is generally + allocated on the comp_unit_obstack, so will disappear + when this compilation unit leaves the cache. */ + const char *scope = nullptr; + + /* Some data associated with the partial DIE. The tag determines + which field is live. */ + union + { + /* The location description associated with this DIE, if any. */ + struct dwarf_block *locdesc; + /* The offset of an import, for DW_TAG_imported_unit. */ + sect_offset sect_off; + } d {}; + + /* If HAS_PC_INFO, the PC range associated with this DIE. */ + CORE_ADDR lowpc = 0; + CORE_ADDR highpc = 0; + + /* Pointer into the info_buffer (or types_buffer) pointing at the target of + DW_AT_sibling, if any. */ + /* NOTE: This member isn't strictly necessary, partial_die_info::read + could return DW_AT_sibling values to its caller load_partial_dies. */ + const gdb_byte *sibling = nullptr; + + /* If HAS_SPECIFICATION, the offset of the DIE referred to by + DW_AT_specification (or DW_AT_abstract_origin or + DW_AT_extension). */ + sect_offset spec_offset {}; + + /* Pointers to this DIE's parent, first child, and next sibling, + if any. */ + struct partial_die_info *die_parent = nullptr; + struct partial_die_info *die_child = nullptr; + struct partial_die_info *die_sibling = nullptr; + + friend struct partial_die_info * + dwarf2_cu::find_partial_die (sect_offset sect_off); + + private: + /* Only need to do look up in dwarf2_cu::find_partial_die. */ + partial_die_info (sect_offset sect_off) + : partial_die_info (sect_off, DW_TAG_padding, 0) + { + } + + partial_die_info (sect_offset sect_off_, enum dwarf_tag tag_, + int has_children_) + : sect_off (sect_off_), tag (tag_), has_children (has_children_) + { + is_external = 0; + is_declaration = 0; + has_type = 0; + has_specification = 0; + has_pc_info = 0; + may_be_inlined = 0; + main_subprogram = 0; + scope_set = 0; + has_byte_size = 0; + has_const_value = 0; + has_template_arguments = 0; + fixup_called = 0; + is_dwz = 0; + spec_is_dwz = 0; + canonical_name = 0; + } + }; + +/* FIXME: We might want to set this from BFD via bfd_arch_bits_per_byte, + but this would require a corresponding change in unpack_field_as_long + and friends. */ +static int bits_per_byte = 8; + +struct variant_part_builder; + +/* When reading a variant, we track a bit more information about the + field, and store it in an object of this type. */ + +struct variant_field +{ + int first_field = -1; + int last_field = -1; + + /* A variant can contain other variant parts. */ + std::vector<variant_part_builder> variant_parts; + + /* If we see a DW_TAG_variant, then this will be set if this is the + default branch. */ + bool default_branch = false; + /* If we see a DW_AT_discr_value, then this will be the discriminant + value. */ + ULONGEST discriminant_value = 0; + /* If we see a DW_AT_discr_list, then this is a pointer to the list + data. */ + struct dwarf_block *discr_list_data = nullptr; +}; + +/* This represents a DW_TAG_variant_part. */ + +struct variant_part_builder +{ + /* The offset of the discriminant field. */ + sect_offset discriminant_offset {}; + + /* Variants that are direct children of this variant part. */ + std::vector<variant_field> variants; + + /* True if we're currently reading a variant. */ + bool processing_variant = false; +}; + +struct nextfield +{ + int accessibility = 0; + int virtuality = 0; + /* Variant parts need to find the discriminant, which is a DIE + reference. We track the section offset of each field to make + this link. */ + sect_offset offset; + struct field field {}; +}; + +struct fnfieldlist +{ + const char *name = nullptr; + std::vector<struct fn_field> fnfields; +}; + +/* The routines that read and process dies for a C struct or C++ class + pass lists of data member fields and lists of member function fields + in an instance of a field_info structure, as defined below. */ +struct field_info +{ + /* List of data member and baseclasses fields. */ + std::vector<struct nextfield> fields; + std::vector<struct nextfield> baseclasses; + + /* Set if the accessibility of one of the fields is not public. */ + bool non_public_fields = false; + + /* Member function fieldlist array, contains name of possibly overloaded + member function, number of overloaded member functions and a pointer + to the head of the member function field chain. */ + std::vector<struct fnfieldlist> fnfieldlists; + + /* typedefs defined inside this class. TYPEDEF_FIELD_LIST contains head of + a NULL terminated list of TYPEDEF_FIELD_LIST_COUNT elements. */ + std::vector<struct decl_field> typedef_field_list; + + /* Nested types defined by this class and the number of elements in this + list. */ + std::vector<struct decl_field> nested_types_list; + + /* If non-null, this is the variant part we are currently + reading. */ + variant_part_builder *current_variant_part = nullptr; + /* This holds all the top-level variant parts attached to the type + we're reading. */ + std::vector<variant_part_builder> variant_parts; + + /* Return the total number of fields (including baseclasses). */ + int nfields () const + { + return fields.size () + baseclasses.size (); + } +}; + +/* Loaded secondary compilation units are kept in memory until they + have not been referenced for the processing of this many + compilation units. Set this to zero to disable caching. Cache + sizes of up to at least twenty will improve startup time for + typical inter-CU-reference binaries, at an obvious memory cost. */ +static int dwarf_max_cache_age = 5; +static void +show_dwarf_max_cache_age (struct ui_file *file, int from_tty, + struct cmd_list_element *c, const char *value) +{ + fprintf_filtered (file, _("The upper bound on the age of cached " + "DWARF compilation units is %s.\n"), + value); +} + +/* local function prototypes */ + +static void dwarf2_find_base_address (struct die_info *die, + struct dwarf2_cu *cu); + +static dwarf2_psymtab *create_partial_symtab + (dwarf2_per_cu_data *per_cu, dwarf2_per_objfile *per_objfile, + const char *name); + +static void build_type_psymtabs_reader (const struct die_reader_specs *reader, + const gdb_byte *info_ptr, + struct die_info *type_unit_die); + +static void dwarf2_build_psymtabs_hard (dwarf2_per_objfile *per_objfile); + +static void scan_partial_symbols (struct partial_die_info *, + CORE_ADDR *, CORE_ADDR *, + int, struct dwarf2_cu *); + +static void add_partial_symbol (struct partial_die_info *, + struct dwarf2_cu *); + +static void add_partial_namespace (struct partial_die_info *pdi, + CORE_ADDR *lowpc, CORE_ADDR *highpc, + int set_addrmap, struct dwarf2_cu *cu); + +static void add_partial_module (struct partial_die_info *pdi, CORE_ADDR *lowpc, + CORE_ADDR *highpc, int set_addrmap, + struct dwarf2_cu *cu); + +static void add_partial_enumeration (struct partial_die_info *enum_pdi, + struct dwarf2_cu *cu); + +static void add_partial_subprogram (struct partial_die_info *pdi, + CORE_ADDR *lowpc, CORE_ADDR *highpc, + int need_pc, struct dwarf2_cu *cu); + +static unsigned int peek_abbrev_code (bfd *, const gdb_byte *); + +static struct partial_die_info *load_partial_dies + (const struct die_reader_specs *, const gdb_byte *, int); + +/* A pair of partial_die_info and compilation unit. */ +struct cu_partial_die_info +{ + /* The compilation unit of the partial_die_info. */ + struct dwarf2_cu *cu; + /* A partial_die_info. */ + struct partial_die_info *pdi; + + cu_partial_die_info (struct dwarf2_cu *cu, struct partial_die_info *pdi) + : cu (cu), + pdi (pdi) + { /* Nothing. */ } + +private: + cu_partial_die_info () = delete; +}; + +static const struct cu_partial_die_info find_partial_die (sect_offset, int, + struct dwarf2_cu *); + +static const gdb_byte *read_attribute (const struct die_reader_specs *, + struct attribute *, struct attr_abbrev *, + const gdb_byte *, bool *need_reprocess); + +static void read_attribute_reprocess (const struct die_reader_specs *reader, + struct attribute *attr, dwarf_tag tag); + +static CORE_ADDR read_addr_index (struct dwarf2_cu *cu, unsigned int addr_index); + +static sect_offset read_abbrev_offset (dwarf2_per_objfile *per_objfile, + dwarf2_section_info *, sect_offset); + +static const char *read_indirect_string + (dwarf2_per_objfile *per_objfile, bfd *, const gdb_byte *, + const struct comp_unit_head *, unsigned int *); + +static const char *read_indirect_string_at_offset + (dwarf2_per_objfile *per_objfile, LONGEST str_offset); + +static CORE_ADDR read_addr_index_from_leb128 (struct dwarf2_cu *, + const gdb_byte *, + unsigned int *); + +static const char *read_dwo_str_index (const struct die_reader_specs *reader, + ULONGEST str_index); + +static const char *read_stub_str_index (struct dwarf2_cu *cu, + ULONGEST str_index); + +static void set_cu_language (unsigned int, struct dwarf2_cu *); + +static struct attribute *dwarf2_attr (struct die_info *, unsigned int, + struct dwarf2_cu *); + +static const char *dwarf2_string_attr (struct die_info *die, unsigned int name, + struct dwarf2_cu *cu); + +static const char *dwarf2_dwo_name (struct die_info *die, struct dwarf2_cu *cu); + +static int dwarf2_flag_true_p (struct die_info *die, unsigned name, + struct dwarf2_cu *cu); + +static int die_is_declaration (struct die_info *, struct dwarf2_cu *cu); + +static struct die_info *die_specification (struct die_info *die, + struct dwarf2_cu **); + +static line_header_up dwarf_decode_line_header (sect_offset sect_off, + struct dwarf2_cu *cu); + +static void dwarf_decode_lines (struct line_header *, const char *, + struct dwarf2_cu *, dwarf2_psymtab *, + CORE_ADDR, int decode_mapping); + +static void dwarf2_start_subfile (struct dwarf2_cu *, const char *, + const char *); + +static struct symbol *new_symbol (struct die_info *, struct type *, + struct dwarf2_cu *, struct symbol * = NULL); + +static void dwarf2_const_value (const struct attribute *, struct symbol *, + struct dwarf2_cu *); + +static void dwarf2_const_value_attr (const struct attribute *attr, + struct type *type, + const char *name, + struct obstack *obstack, + struct dwarf2_cu *cu, LONGEST *value, + const gdb_byte **bytes, + struct dwarf2_locexpr_baton **baton); + +static struct type *die_type (struct die_info *, struct dwarf2_cu *); + +static int need_gnat_info (struct dwarf2_cu *); + +static struct type *die_descriptive_type (struct die_info *, + struct dwarf2_cu *); + +static void set_descriptive_type (struct type *, struct die_info *, + struct dwarf2_cu *); + +static struct type *die_containing_type (struct die_info *, + struct dwarf2_cu *); + +static struct type *lookup_die_type (struct die_info *, const struct attribute *, + struct dwarf2_cu *); + +static struct type *read_type_die (struct die_info *, struct dwarf2_cu *); + +static struct type *read_type_die_1 (struct die_info *, struct dwarf2_cu *); + +static const char *determine_prefix (struct die_info *die, struct dwarf2_cu *); + +static char *typename_concat (struct obstack *obs, const char *prefix, + const char *suffix, int physname, + struct dwarf2_cu *cu); + +static void read_file_scope (struct die_info *, struct dwarf2_cu *); + +static void read_type_unit_scope (struct die_info *, struct dwarf2_cu *); + +static void read_func_scope (struct die_info *, struct dwarf2_cu *); + +static void read_lexical_block_scope (struct die_info *, struct dwarf2_cu *); + +static void read_call_site_scope (struct die_info *die, struct dwarf2_cu *cu); + +static void read_variable (struct die_info *die, struct dwarf2_cu *cu); + +/* Return the .debug_loclists section to use for cu. */ +static struct dwarf2_section_info *cu_debug_loc_section (struct dwarf2_cu *cu); + +/* Return the .debug_rnglists section to use for cu. */ +static struct dwarf2_section_info *cu_debug_rnglists_section + (struct dwarf2_cu *cu, dwarf_tag tag); + +/* How dwarf2_get_pc_bounds constructed its *LOWPC and *HIGHPC return + values. Keep the items ordered with increasing constraints compliance. */ +enum pc_bounds_kind +{ + /* No attribute DW_AT_low_pc, DW_AT_high_pc or DW_AT_ranges was found. */ + PC_BOUNDS_NOT_PRESENT, + + /* Some of the attributes DW_AT_low_pc, DW_AT_high_pc or DW_AT_ranges + were present but they do not form a valid range of PC addresses. */ + PC_BOUNDS_INVALID, + + /* Discontiguous range was found - that is DW_AT_ranges was found. */ + PC_BOUNDS_RANGES, + + /* Contiguous range was found - DW_AT_low_pc and DW_AT_high_pc were found. */ + PC_BOUNDS_HIGH_LOW, +}; + +static enum pc_bounds_kind dwarf2_get_pc_bounds (struct die_info *, + CORE_ADDR *, CORE_ADDR *, + struct dwarf2_cu *, + dwarf2_psymtab *); + +static void get_scope_pc_bounds (struct die_info *, + CORE_ADDR *, CORE_ADDR *, + struct dwarf2_cu *); + +static void dwarf2_record_block_ranges (struct die_info *, struct block *, + CORE_ADDR, struct dwarf2_cu *); + +static void dwarf2_add_field (struct field_info *, struct die_info *, + struct dwarf2_cu *); + +static void dwarf2_attach_fields_to_type (struct field_info *, + struct type *, struct dwarf2_cu *); + +static void dwarf2_add_member_fn (struct field_info *, + struct die_info *, struct type *, + struct dwarf2_cu *); + +static void dwarf2_attach_fn_fields_to_type (struct field_info *, + struct type *, + struct dwarf2_cu *); + +static void process_structure_scope (struct die_info *, struct dwarf2_cu *); + +static void read_common_block (struct die_info *, struct dwarf2_cu *); + +static void read_namespace (struct die_info *die, struct dwarf2_cu *); + +static void read_module (struct die_info *die, struct dwarf2_cu *cu); + +static struct using_direct **using_directives (struct dwarf2_cu *cu); + +static void read_import_statement (struct die_info *die, struct dwarf2_cu *); + +static int read_namespace_alias (struct die_info *die, struct dwarf2_cu *cu); + +static struct type *read_module_type (struct die_info *die, + struct dwarf2_cu *cu); + +static const char *namespace_name (struct die_info *die, + int *is_anonymous, struct dwarf2_cu *); + +static void process_enumeration_scope (struct die_info *, struct dwarf2_cu *); + +static CORE_ADDR decode_locdesc (struct dwarf_block *, struct dwarf2_cu *, + bool * = nullptr); + +static enum dwarf_array_dim_ordering read_array_order (struct die_info *, + struct dwarf2_cu *); + +static struct die_info *read_die_and_siblings_1 + (const struct die_reader_specs *, const gdb_byte *, const gdb_byte **, + struct die_info *); + +static struct die_info *read_die_and_siblings (const struct die_reader_specs *, + const gdb_byte *info_ptr, + const gdb_byte **new_info_ptr, + struct die_info *parent); + +static const gdb_byte *read_full_die_1 (const struct die_reader_specs *, + struct die_info **, const gdb_byte *, + int); + +static const gdb_byte *read_full_die (const struct die_reader_specs *, + struct die_info **, const gdb_byte *); + +static void process_die (struct die_info *, struct dwarf2_cu *); + +static const char *dwarf2_canonicalize_name (const char *, struct dwarf2_cu *, + struct objfile *); + +static const char *dwarf2_name (struct die_info *die, struct dwarf2_cu *); + +static const char *dwarf2_full_name (const char *name, + struct die_info *die, + struct dwarf2_cu *cu); + +static const char *dwarf2_physname (const char *name, struct die_info *die, + struct dwarf2_cu *cu); + +static struct die_info *dwarf2_extension (struct die_info *die, + struct dwarf2_cu **); + +static void dump_die_shallow (struct ui_file *, int indent, struct die_info *); + +static void dump_die_for_error (struct die_info *); + +static void dump_die_1 (struct ui_file *, int level, int max_level, + struct die_info *); + +/*static*/ void dump_die (struct die_info *, int max_level); + +static void store_in_ref_table (struct die_info *, + struct dwarf2_cu *); + +static struct die_info *follow_die_ref_or_sig (struct die_info *, + const struct attribute *, + struct dwarf2_cu **); + +static struct die_info *follow_die_ref (struct die_info *, + const struct attribute *, + struct dwarf2_cu **); + +static struct die_info *follow_die_sig (struct die_info *, + const struct attribute *, + struct dwarf2_cu **); + +static struct type *get_signatured_type (struct die_info *, ULONGEST, + struct dwarf2_cu *); + +static struct type *get_DW_AT_signature_type (struct die_info *, + const struct attribute *, + struct dwarf2_cu *); + +static void load_full_type_unit (dwarf2_per_cu_data *per_cu, + dwarf2_per_objfile *per_objfile); + +static void read_signatured_type (signatured_type *sig_type, + dwarf2_per_objfile *per_objfile); + +static int attr_to_dynamic_prop (const struct attribute *attr, + struct die_info *die, struct dwarf2_cu *cu, + struct dynamic_prop *prop, struct type *type); + +/* memory allocation interface */ + +static struct dwarf_block *dwarf_alloc_block (struct dwarf2_cu *); + +static struct die_info *dwarf_alloc_die (struct dwarf2_cu *, int); + +static void dwarf_decode_macros (struct dwarf2_cu *, unsigned int, int); + +static void fill_in_loclist_baton (struct dwarf2_cu *cu, + struct dwarf2_loclist_baton *baton, + const struct attribute *attr); + +static void dwarf2_symbol_mark_computed (const struct attribute *attr, + struct symbol *sym, + struct dwarf2_cu *cu, + int is_block); + +static const gdb_byte *skip_one_die (const struct die_reader_specs *reader, + const gdb_byte *info_ptr, + struct abbrev_info *abbrev); + +static hashval_t partial_die_hash (const void *item); + +static int partial_die_eq (const void *item_lhs, const void *item_rhs); + +static struct dwarf2_per_cu_data *dwarf2_find_containing_comp_unit + (sect_offset sect_off, unsigned int offset_in_dwz, + dwarf2_per_objfile *per_objfile); + +static void prepare_one_comp_unit (struct dwarf2_cu *cu, + struct die_info *comp_unit_die, + enum language pretend_language); + +static struct type *set_die_type (struct die_info *, struct type *, + struct dwarf2_cu *); + +static void create_all_comp_units (dwarf2_per_objfile *per_objfile); + +static int create_all_type_units (dwarf2_per_objfile *per_objfile); + +static void load_full_comp_unit (dwarf2_per_cu_data *per_cu, + dwarf2_per_objfile *per_objfile, + dwarf2_cu *existing_cu, + bool skip_partial, + enum language pretend_language); + +static void process_full_comp_unit (dwarf2_cu *cu, + enum language pretend_language); + +static void process_full_type_unit (dwarf2_cu *cu, + enum language pretend_language); + +static void dwarf2_add_dependence (struct dwarf2_cu *, + struct dwarf2_per_cu_data *); + +static void dwarf2_mark (struct dwarf2_cu *); + +static struct type *get_die_type_at_offset (sect_offset, + dwarf2_per_cu_data *per_cu, + dwarf2_per_objfile *per_objfile); + +static struct type *get_die_type (struct die_info *die, struct dwarf2_cu *cu); + +static void queue_comp_unit (dwarf2_per_cu_data *per_cu, + dwarf2_per_objfile *per_objfile, + enum language pretend_language); + +static void process_queue (dwarf2_per_objfile *per_objfile); + +/* Class, the destructor of which frees all allocated queue entries. This + will only have work to do if an error was thrown while processing the + dwarf. If no error was thrown then the queue entries should have all + been processed, and freed, as we went along. */ + +class dwarf2_queue_guard +{ +public: + explicit dwarf2_queue_guard (dwarf2_per_objfile *per_objfile) + : m_per_objfile (per_objfile) + { + gdb_assert (!m_per_objfile->per_bfd->queue.has_value ()); + + m_per_objfile->per_bfd->queue.emplace (); + } + + /* Free any entries remaining on the queue. There should only be + entries left if we hit an error while processing the dwarf. */ + ~dwarf2_queue_guard () + { + gdb_assert (m_per_objfile->per_bfd->queue.has_value ()); + + m_per_objfile->per_bfd->queue.reset (); + } + + DISABLE_COPY_AND_ASSIGN (dwarf2_queue_guard); + +private: + dwarf2_per_objfile *m_per_objfile; +}; + +dwarf2_queue_item::~dwarf2_queue_item () +{ + /* Anything still marked queued is likely to be in an + inconsistent state, so discard it. */ + if (per_cu->queued) + { + per_objfile->remove_cu (per_cu); + per_cu->queued = 0; + } +} + +/* The return type of find_file_and_directory. Note, the enclosed + string pointers are only valid while this object is valid. */ + +struct file_and_directory +{ + /* The filename. This is never NULL. */ + const char *name; + + /* The compilation directory. NULL if not known. If we needed to + compute a new string, this points to COMP_DIR_STORAGE, otherwise, + points directly to the DW_AT_comp_dir string attribute owned by + the obstack that owns the DIE. */ + const char *comp_dir; + + /* If we needed to build a new string for comp_dir, this is what + owns the storage. */ + std::string comp_dir_storage; +}; + +static file_and_directory find_file_and_directory (struct die_info *die, + struct dwarf2_cu *cu); + +static htab_up allocate_signatured_type_table (); + +static htab_up allocate_dwo_unit_table (); + +static struct dwo_unit *lookup_dwo_unit_in_dwp + (dwarf2_per_objfile *per_objfile, struct dwp_file *dwp_file, + const char *comp_dir, ULONGEST signature, int is_debug_types); + +static struct dwp_file *get_dwp_file (dwarf2_per_objfile *per_objfile); + +static struct dwo_unit *lookup_dwo_comp_unit + (dwarf2_cu *cu, const char *dwo_name, const char *comp_dir, + ULONGEST signature); + +static struct dwo_unit *lookup_dwo_type_unit + (dwarf2_cu *cu, const char *dwo_name, const char *comp_dir); + +static void queue_and_load_all_dwo_tus (dwarf2_cu *cu); + +/* A unique pointer to a dwo_file. */ + +typedef std::unique_ptr<struct dwo_file> dwo_file_up; + +static void process_cu_includes (dwarf2_per_objfile *per_objfile); + +static void check_producer (struct dwarf2_cu *cu); + +static void free_line_header_voidp (void *arg); + +/* Various complaints about symbol reading that don't abort the process. */ + +static void +dwarf2_debug_line_missing_file_complaint (void) +{ + complaint (_(".debug_line section has line data without a file")); +} + +static void +dwarf2_debug_line_missing_end_sequence_complaint (void) +{ + complaint (_(".debug_line section has line " + "program sequence without an end")); +} + +static void +dwarf2_complex_location_expr_complaint (void) +{ + complaint (_("location expression too complex")); +} + +static void +dwarf2_const_value_length_mismatch_complaint (const char *arg1, int arg2, + int arg3) +{ + complaint (_("const value length mismatch for '%s', got %d, expected %d"), + arg1, arg2, arg3); +} + +static void +dwarf2_invalid_attrib_class_complaint (const char *arg1, const char *arg2) +{ + complaint (_("invalid attribute class or form for '%s' in '%s'"), + arg1, arg2); +} + +/* Hash function for line_header_hash. */ + +static hashval_t +line_header_hash (const struct line_header *ofs) +{ + return to_underlying (ofs->sect_off) ^ ofs->offset_in_dwz; +} + +/* Hash function for htab_create_alloc_ex for line_header_hash. */ + +static hashval_t +line_header_hash_voidp (const void *item) +{ + const struct line_header *ofs = (const struct line_header *) item; + + return line_header_hash (ofs); +} + +/* Equality function for line_header_hash. */ + +static int +line_header_eq_voidp (const void *item_lhs, const void *item_rhs) +{ + const struct line_header *ofs_lhs = (const struct line_header *) item_lhs; + const struct line_header *ofs_rhs = (const struct line_header *) item_rhs; + + return (ofs_lhs->sect_off == ofs_rhs->sect_off + && ofs_lhs->offset_in_dwz == ofs_rhs->offset_in_dwz); +} + + + +/* See declaration. */ + +dwarf2_per_bfd::dwarf2_per_bfd (bfd *obfd, const dwarf2_debug_sections *names, + bool can_copy_) + : obfd (obfd), + can_copy (can_copy_) +{ + if (names == NULL) + names = &dwarf2_elf_names; + + for (asection *sec = obfd->sections; sec != NULL; sec = sec->next) + locate_sections (obfd, sec, *names); +} + +dwarf2_per_bfd::~dwarf2_per_bfd () +{ + for (dwarf2_per_cu_data *per_cu : all_comp_units) + per_cu->imported_symtabs_free (); + + for (signatured_type *sig_type : all_type_units) + sig_type->per_cu.imported_symtabs_free (); + + /* Everything else should be on this->obstack. */ +} + +/* See read.h. */ + +void +dwarf2_per_objfile::remove_all_cus () +{ + gdb_assert (!this->per_bfd->queue.has_value ()); + + for (auto pair : m_dwarf2_cus) + delete pair.second; + + m_dwarf2_cus.clear (); +} + +/* A helper class that calls free_cached_comp_units on + destruction. */ + +class free_cached_comp_units +{ +public: + + explicit free_cached_comp_units (dwarf2_per_objfile *per_objfile) + : m_per_objfile (per_objfile) + { + } + + ~free_cached_comp_units () + { + m_per_objfile->remove_all_cus (); + } + + DISABLE_COPY_AND_ASSIGN (free_cached_comp_units); + +private: + + dwarf2_per_objfile *m_per_objfile; +}; + +/* See read.h. */ + +bool +dwarf2_per_objfile::symtab_set_p (const dwarf2_per_cu_data *per_cu) const +{ + gdb_assert (per_cu->index < this->m_symtabs.size ()); + + return this->m_symtabs[per_cu->index] != nullptr; +} + +/* See read.h. */ + +compunit_symtab * +dwarf2_per_objfile::get_symtab (const dwarf2_per_cu_data *per_cu) const +{ + gdb_assert (per_cu->index < this->m_symtabs.size ()); + + return this->m_symtabs[per_cu->index]; +} + +/* See read.h. */ + +void +dwarf2_per_objfile::set_symtab (const dwarf2_per_cu_data *per_cu, + compunit_symtab *symtab) +{ + gdb_assert (per_cu->index < this->m_symtabs.size ()); + gdb_assert (this->m_symtabs[per_cu->index] == nullptr); + + this->m_symtabs[per_cu->index] = symtab; +} + +/* Try to locate the sections we need for DWARF 2 debugging + information and return true if we have enough to do something. + NAMES points to the dwarf2 section names, or is NULL if the standard + ELF names are used. CAN_COPY is true for formats where symbol + interposition is possible and so symbol values must follow copy + relocation rules. */ + +int +dwarf2_has_info (struct objfile *objfile, + const struct dwarf2_debug_sections *names, + bool can_copy) +{ + if (objfile->flags & OBJF_READNEVER) + return 0; + + dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile); + + if (per_objfile == NULL) + { + dwarf2_per_bfd *per_bfd; + + /* We can share a "dwarf2_per_bfd" with other objfiles if the BFD + doesn't require relocations and if there aren't partial symbols + from some other reader. + + We don't share with objfiles for which -readnow was requested, + because it would complicate things when loading the same BFD with + -readnow and then without -readnow. */ + if (!objfile_has_partial_symbols (objfile) + && !gdb_bfd_requires_relocations (objfile->obfd) + && (objfile->flags & OBJF_READNOW) == 0) + { + /* See if one has been created for this BFD yet. */ + per_bfd = dwarf2_per_bfd_bfd_data_key.get (objfile->obfd); + + if (per_bfd == nullptr) + { + /* No, create it now. */ + per_bfd = new dwarf2_per_bfd (objfile->obfd, names, can_copy); + dwarf2_per_bfd_bfd_data_key.set (objfile->obfd, per_bfd); + } + } + else + { + /* No sharing possible, create one specifically for this objfile. */ + per_bfd = new dwarf2_per_bfd (objfile->obfd, names, can_copy); + dwarf2_per_bfd_objfile_data_key.set (objfile, per_bfd); + } + + per_objfile = dwarf2_objfile_data_key.emplace (objfile, objfile, per_bfd); + } + + return (!per_objfile->per_bfd->info.is_virtual + && per_objfile->per_bfd->info.s.section != NULL + && !per_objfile->per_bfd->abbrev.is_virtual + && per_objfile->per_bfd->abbrev.s.section != NULL); +} + +/* When loading sections, we look either for uncompressed section or for + compressed section names. */ + +static int +section_is_p (const char *section_name, + const struct dwarf2_section_names *names) +{ + if (names->normal != NULL + && strcmp (section_name, names->normal) == 0) + return 1; + if (names->compressed != NULL + && strcmp (section_name, names->compressed) == 0) + return 1; + return 0; +} + +/* See declaration. */ + +void +dwarf2_per_bfd::locate_sections (bfd *abfd, asection *sectp, + const dwarf2_debug_sections &names) +{ + flagword aflag = bfd_section_flags (sectp); + + if ((aflag & SEC_HAS_CONTENTS) == 0) + { + } + else if (elf_section_data (sectp)->this_hdr.sh_size + > bfd_get_file_size (abfd)) + { + bfd_size_type size = elf_section_data (sectp)->this_hdr.sh_size; + warning (_("Discarding section %s which has a section size (%s" + ") larger than the file size [in module %s]"), + bfd_section_name (sectp), phex_nz (size, sizeof (size)), + bfd_get_filename (abfd)); + } + else if (section_is_p (sectp->name, &names.info)) + { + this->info.s.section = sectp; + this->info.size = bfd_section_size (sectp); + } + else if (section_is_p (sectp->name, &names.abbrev)) + { + this->abbrev.s.section = sectp; + this->abbrev.size = bfd_section_size (sectp); + } + else if (section_is_p (sectp->name, &names.line)) + { + this->line.s.section = sectp; + this->line.size = bfd_section_size (sectp); + } + else if (section_is_p (sectp->name, &names.loc)) + { + this->loc.s.section = sectp; + this->loc.size = bfd_section_size (sectp); + } + else if (section_is_p (sectp->name, &names.loclists)) + { + this->loclists.s.section = sectp; + this->loclists.size = bfd_section_size (sectp); + } + else if (section_is_p (sectp->name, &names.macinfo)) + { + this->macinfo.s.section = sectp; + this->macinfo.size = bfd_section_size (sectp); + } + else if (section_is_p (sectp->name, &names.macro)) + { + this->macro.s.section = sectp; + this->macro.size = bfd_section_size (sectp); + } + else if (section_is_p (sectp->name, &names.str)) + { + this->str.s.section = sectp; + this->str.size = bfd_section_size (sectp); + } + else if (section_is_p (sectp->name, &names.str_offsets)) + { + this->str_offsets.s.section = sectp; + this->str_offsets.size = bfd_section_size (sectp); + } + else if (section_is_p (sectp->name, &names.line_str)) + { + this->line_str.s.section = sectp; + this->line_str.size = bfd_section_size (sectp); + } + else if (section_is_p (sectp->name, &names.addr)) + { + this->addr.s.section = sectp; + this->addr.size = bfd_section_size (sectp); + } + else if (section_is_p (sectp->name, &names.frame)) + { + this->frame.s.section = sectp; + this->frame.size = bfd_section_size (sectp); + } + else if (section_is_p (sectp->name, &names.eh_frame)) + { + this->eh_frame.s.section = sectp; + this->eh_frame.size = bfd_section_size (sectp); + } + else if (section_is_p (sectp->name, &names.ranges)) + { + this->ranges.s.section = sectp; + this->ranges.size = bfd_section_size (sectp); + } + else if (section_is_p (sectp->name, &names.rnglists)) + { + this->rnglists.s.section = sectp; + this->rnglists.size = bfd_section_size (sectp); + } + else if (section_is_p (sectp->name, &names.types)) + { + struct dwarf2_section_info type_section; + + memset (&type_section, 0, sizeof (type_section)); + type_section.s.section = sectp; + type_section.size = bfd_section_size (sectp); + + this->types.push_back (type_section); + } + else if (section_is_p (sectp->name, &names.gdb_index)) + { + this->gdb_index.s.section = sectp; + this->gdb_index.size = bfd_section_size (sectp); + } + else if (section_is_p (sectp->name, &names.debug_names)) + { + this->debug_names.s.section = sectp; + this->debug_names.size = bfd_section_size (sectp); + } + else if (section_is_p (sectp->name, &names.debug_aranges)) + { + this->debug_aranges.s.section = sectp; + this->debug_aranges.size = bfd_section_size (sectp); + } + + if ((bfd_section_flags (sectp) & (SEC_LOAD | SEC_ALLOC)) + && bfd_section_vma (sectp) == 0) + this->has_section_at_zero = true; +} + +/* Fill in SECTP, BUFP and SIZEP with section info, given OBJFILE and + SECTION_NAME. */ + +void +dwarf2_get_section_info (struct objfile *objfile, + enum dwarf2_section_enum sect, + asection **sectp, const gdb_byte **bufp, + bfd_size_type *sizep) +{ + dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile); + struct dwarf2_section_info *info; + + /* We may see an objfile without any DWARF, in which case we just + return nothing. */ + if (per_objfile == NULL) + { + *sectp = NULL; + *bufp = NULL; + *sizep = 0; + return; + } + switch (sect) + { + case DWARF2_DEBUG_FRAME: + info = &per_objfile->per_bfd->frame; + break; + case DWARF2_EH_FRAME: + info = &per_objfile->per_bfd->eh_frame; + break; + default: + gdb_assert_not_reached ("unexpected section"); + } + + info->read (objfile); + + *sectp = info->get_bfd_section (); + *bufp = info->buffer; + *sizep = info->size; +} + +/* A helper function to find the sections for a .dwz file. */ + +static void +locate_dwz_sections (bfd *abfd, asection *sectp, void *arg) +{ + struct dwz_file *dwz_file = (struct dwz_file *) arg; + + /* Note that we only support the standard ELF names, because .dwz + is ELF-only (at the time of writing). */ + if (section_is_p (sectp->name, &dwarf2_elf_names.abbrev)) + { + dwz_file->abbrev.s.section = sectp; + dwz_file->abbrev.size = bfd_section_size (sectp); + } + else if (section_is_p (sectp->name, &dwarf2_elf_names.info)) + { + dwz_file->info.s.section = sectp; + dwz_file->info.size = bfd_section_size (sectp); + } + else if (section_is_p (sectp->name, &dwarf2_elf_names.str)) + { + dwz_file->str.s.section = sectp; + dwz_file->str.size = bfd_section_size (sectp); + } + else if (section_is_p (sectp->name, &dwarf2_elf_names.line)) + { + dwz_file->line.s.section = sectp; + dwz_file->line.size = bfd_section_size (sectp); + } + else if (section_is_p (sectp->name, &dwarf2_elf_names.macro)) + { + dwz_file->macro.s.section = sectp; + dwz_file->macro.size = bfd_section_size (sectp); + } + else if (section_is_p (sectp->name, &dwarf2_elf_names.gdb_index)) + { + dwz_file->gdb_index.s.section = sectp; + dwz_file->gdb_index.size = bfd_section_size (sectp); + } + else if (section_is_p (sectp->name, &dwarf2_elf_names.debug_names)) + { + dwz_file->debug_names.s.section = sectp; + dwz_file->debug_names.size = bfd_section_size (sectp); + } +} + +/* See dwarf2read.h. */ + +struct dwz_file * +dwarf2_get_dwz_file (dwarf2_per_bfd *per_bfd) +{ + const char *filename; + bfd_size_type buildid_len_arg; + size_t buildid_len; + bfd_byte *buildid; + + if (per_bfd->dwz_file != NULL) + return per_bfd->dwz_file.get (); + + bfd_set_error (bfd_error_no_error); + gdb::unique_xmalloc_ptr<char> data + (bfd_get_alt_debug_link_info (per_bfd->obfd, + &buildid_len_arg, &buildid)); + if (data == NULL) + { + if (bfd_get_error () == bfd_error_no_error) + return NULL; + error (_("could not read '.gnu_debugaltlink' section: %s"), + bfd_errmsg (bfd_get_error ())); + } + + gdb::unique_xmalloc_ptr<bfd_byte> buildid_holder (buildid); + + buildid_len = (size_t) buildid_len_arg; + + filename = data.get (); + + std::string abs_storage; + if (!IS_ABSOLUTE_PATH (filename)) + { + gdb::unique_xmalloc_ptr<char> abs + = gdb_realpath (bfd_get_filename (per_bfd->obfd)); + + abs_storage = ldirname (abs.get ()) + SLASH_STRING + filename; + filename = abs_storage.c_str (); + } + + /* First try the file name given in the section. If that doesn't + work, try to use the build-id instead. */ + gdb_bfd_ref_ptr dwz_bfd (gdb_bfd_open (filename, gnutarget)); + if (dwz_bfd != NULL) + { + if (!build_id_verify (dwz_bfd.get (), buildid_len, buildid)) + dwz_bfd.reset (nullptr); + } + + if (dwz_bfd == NULL) + dwz_bfd = build_id_to_debug_bfd (buildid_len, buildid); + + if (dwz_bfd == nullptr) + { + gdb::unique_xmalloc_ptr<char> alt_filename; + const char *origname = bfd_get_filename (per_bfd->obfd); + + scoped_fd fd (debuginfod_debuginfo_query (buildid, + buildid_len, + origname, + &alt_filename)); + + if (fd.get () >= 0) + { + /* File successfully retrieved from server. */ + dwz_bfd = gdb_bfd_open (alt_filename.get (), gnutarget); + + if (dwz_bfd == nullptr) + warning (_("File \"%s\" from debuginfod cannot be opened as bfd"), + alt_filename.get ()); + else if (!build_id_verify (dwz_bfd.get (), buildid_len, buildid)) + dwz_bfd.reset (nullptr); + } + } + + if (dwz_bfd == NULL) + error (_("could not find '.gnu_debugaltlink' file for %s"), + bfd_get_filename (per_bfd->obfd)); + + std::unique_ptr<struct dwz_file> result + (new struct dwz_file (std::move (dwz_bfd))); + + bfd_map_over_sections (result->dwz_bfd.get (), locate_dwz_sections, + result.get ()); + + gdb_bfd_record_inclusion (per_bfd->obfd, result->dwz_bfd.get ()); + per_bfd->dwz_file = std::move (result); + return per_bfd->dwz_file.get (); +} + +/* DWARF quick_symbols_functions support. */ + +/* TUs can share .debug_line entries, and there can be a lot more TUs than + unique line tables, so we maintain a separate table of all .debug_line + derived entries to support the sharing. + All the quick functions need is the list of file names. We discard the + line_header when we're done and don't need to record it here. */ +struct quick_file_names +{ + /* The data used to construct the hash key. */ + struct stmt_list_hash hash; + + /* The number of entries in file_names, real_names. */ + unsigned int num_file_names; + + /* The file names from the line table, after being run through + file_full_name. */ + const char **file_names; + + /* The file names from the line table after being run through + gdb_realpath. These are computed lazily. */ + const char **real_names; +}; + +/* When using the index (and thus not using psymtabs), each CU has an + object of this type. This is used to hold information needed by + the various "quick" methods. */ +struct dwarf2_per_cu_quick_data +{ + /* The file table. This can be NULL if there was no file table + or it's currently not read in. + NOTE: This points into dwarf2_per_objfile->per_bfd->quick_file_names_table. */ + struct quick_file_names *file_names; + + /* A temporary mark bit used when iterating over all CUs in + expand_symtabs_matching. */ + unsigned int mark : 1; + + /* True if we've tried to read the file table and found there isn't one. + There will be no point in trying to read it again next time. */ + unsigned int no_file_data : 1; +}; + +/* Utility hash function for a stmt_list_hash. */ + +static hashval_t +hash_stmt_list_entry (const struct stmt_list_hash *stmt_list_hash) +{ + hashval_t v = 0; + + if (stmt_list_hash->dwo_unit != NULL) + v += (uintptr_t) stmt_list_hash->dwo_unit->dwo_file; + v += to_underlying (stmt_list_hash->line_sect_off); + return v; +} + +/* Utility equality function for a stmt_list_hash. */ + +static int +eq_stmt_list_entry (const struct stmt_list_hash *lhs, + const struct stmt_list_hash *rhs) +{ + if ((lhs->dwo_unit != NULL) != (rhs->dwo_unit != NULL)) + return 0; + if (lhs->dwo_unit != NULL + && lhs->dwo_unit->dwo_file != rhs->dwo_unit->dwo_file) + return 0; + + return lhs->line_sect_off == rhs->line_sect_off; +} + +/* Hash function for a quick_file_names. */ + +static hashval_t +hash_file_name_entry (const void *e) +{ + const struct quick_file_names *file_data + = (const struct quick_file_names *) e; + + return hash_stmt_list_entry (&file_data->hash); +} + +/* Equality function for a quick_file_names. */ + +static int +eq_file_name_entry (const void *a, const void *b) +{ + const struct quick_file_names *ea = (const struct quick_file_names *) a; + const struct quick_file_names *eb = (const struct quick_file_names *) b; + + return eq_stmt_list_entry (&ea->hash, &eb->hash); +} + +/* Delete function for a quick_file_names. */ + +static void +delete_file_name_entry (void *e) +{ + struct quick_file_names *file_data = (struct quick_file_names *) e; + int i; + + for (i = 0; i < file_data->num_file_names; ++i) + { + xfree ((void*) file_data->file_names[i]); + if (file_data->real_names) + xfree ((void*) file_data->real_names[i]); + } + + /* The space for the struct itself lives on the obstack, so we don't + free it here. */ +} + +/* Create a quick_file_names hash table. */ + +static htab_up +create_quick_file_names_table (unsigned int nr_initial_entries) +{ + return htab_up (htab_create_alloc (nr_initial_entries, + hash_file_name_entry, eq_file_name_entry, + delete_file_name_entry, xcalloc, xfree)); +} + +/* Read in CU (dwarf2_cu object) for PER_CU in the context of PER_OBJFILE. This + function is unrelated to symtabs, symtab would have to be created afterwards. + You should call age_cached_comp_units after processing the CU. */ + +static dwarf2_cu * +load_cu (dwarf2_per_cu_data *per_cu, dwarf2_per_objfile *per_objfile, + bool skip_partial) +{ + if (per_cu->is_debug_types) + load_full_type_unit (per_cu, per_objfile); + else + load_full_comp_unit (per_cu, per_objfile, per_objfile->get_cu (per_cu), + skip_partial, language_minimal); + + dwarf2_cu *cu = per_objfile->get_cu (per_cu); + if (cu == nullptr) + return nullptr; /* Dummy CU. */ + + dwarf2_find_base_address (cu->dies, cu); + + return cu; +} + +/* Read in the symbols for PER_CU in the context of DWARF"_PER_OBJFILE. */ + +static void +dw2_do_instantiate_symtab (dwarf2_per_cu_data *per_cu, + dwarf2_per_objfile *per_objfile, bool skip_partial) +{ + /* Skip type_unit_groups, reading the type units they contain + is handled elsewhere. */ + if (per_cu->type_unit_group_p ()) + return; + + { + /* The destructor of dwarf2_queue_guard frees any entries left on + the queue. After this point we're guaranteed to leave this function + with the dwarf queue empty. */ + dwarf2_queue_guard q_guard (per_objfile); + + if (!per_objfile->symtab_set_p (per_cu)) + { + queue_comp_unit (per_cu, per_objfile, language_minimal); + dwarf2_cu *cu = load_cu (per_cu, per_objfile, skip_partial); + + /* If we just loaded a CU from a DWO, and we're working with an index + that may badly handle TUs, load all the TUs in that DWO as well. + http://sourceware.org/bugzilla/show_bug.cgi?id=15021 */ + if (!per_cu->is_debug_types + && cu != NULL + && cu->dwo_unit != NULL + && per_objfile->per_bfd->index_table != NULL + && per_objfile->per_bfd->index_table->version <= 7 + /* DWP files aren't supported yet. */ + && get_dwp_file (per_objfile) == NULL) + queue_and_load_all_dwo_tus (cu); + } + + process_queue (per_objfile); + } + + /* Age the cache, releasing compilation units that have not + been used recently. */ + per_objfile->age_comp_units (); +} + +/* Ensure that the symbols for PER_CU have been read in. DWARF2_PER_OBJFILE is + the per-objfile for which this symtab is instantiated. + + Returns the resulting symbol table. */ + +static struct compunit_symtab * +dw2_instantiate_symtab (dwarf2_per_cu_data *per_cu, + dwarf2_per_objfile *per_objfile, + bool skip_partial) +{ + gdb_assert (per_objfile->per_bfd->using_index); + + if (!per_objfile->symtab_set_p (per_cu)) + { + free_cached_comp_units freer (per_objfile); + scoped_restore decrementer = increment_reading_symtab (); + dw2_do_instantiate_symtab (per_cu, per_objfile, skip_partial); + process_cu_includes (per_objfile); + } + + return per_objfile->get_symtab (per_cu); +} + +/* See declaration. */ + +dwarf2_per_cu_data * +dwarf2_per_bfd::get_cutu (int index) +{ + if (index >= this->all_comp_units.size ()) + { + index -= this->all_comp_units.size (); + gdb_assert (index < this->all_type_units.size ()); + return &this->all_type_units[index]->per_cu; + } + + return this->all_comp_units[index]; +} + +/* See declaration. */ + +dwarf2_per_cu_data * +dwarf2_per_bfd::get_cu (int index) +{ + gdb_assert (index >= 0 && index < this->all_comp_units.size ()); + + return this->all_comp_units[index]; +} + +/* See declaration. */ + +signatured_type * +dwarf2_per_bfd::get_tu (int index) +{ + gdb_assert (index >= 0 && index < this->all_type_units.size ()); + + return this->all_type_units[index]; +} + +/* See read.h. */ + +dwarf2_per_cu_data * +dwarf2_per_bfd::allocate_per_cu () +{ + dwarf2_per_cu_data *result = OBSTACK_ZALLOC (&obstack, dwarf2_per_cu_data); + result->per_bfd = this; + result->index = m_num_psymtabs++; + return result; +} + +/* See read.h. */ + +signatured_type * +dwarf2_per_bfd::allocate_signatured_type () +{ + signatured_type *result = OBSTACK_ZALLOC (&obstack, signatured_type); + result->per_cu.per_bfd = this; + result->per_cu.index = m_num_psymtabs++; + return result; +} + +/* Return a new dwarf2_per_cu_data allocated on the per-bfd + obstack, and constructed with the specified field values. */ + +static dwarf2_per_cu_data * +create_cu_from_index_list (dwarf2_per_bfd *per_bfd, + struct dwarf2_section_info *section, + int is_dwz, + sect_offset sect_off, ULONGEST length) +{ + dwarf2_per_cu_data *the_cu = per_bfd->allocate_per_cu (); + the_cu->sect_off = sect_off; + the_cu->length = length; + the_cu->section = section; + the_cu->v.quick = OBSTACK_ZALLOC (&per_bfd->obstack, + struct dwarf2_per_cu_quick_data); + the_cu->is_dwz = is_dwz; + return the_cu; +} + +/* A helper for create_cus_from_index that handles a given list of + CUs. */ + +static void +create_cus_from_index_list (dwarf2_per_bfd *per_bfd, + const gdb_byte *cu_list, offset_type n_elements, + struct dwarf2_section_info *section, + int is_dwz) +{ + for (offset_type i = 0; i < n_elements; i += 2) + { + gdb_static_assert (sizeof (ULONGEST) >= 8); + + sect_offset sect_off + = (sect_offset) extract_unsigned_integer (cu_list, 8, BFD_ENDIAN_LITTLE); + ULONGEST length = extract_unsigned_integer (cu_list + 8, 8, BFD_ENDIAN_LITTLE); + cu_list += 2 * 8; + + dwarf2_per_cu_data *per_cu + = create_cu_from_index_list (per_bfd, section, is_dwz, sect_off, + length); + per_bfd->all_comp_units.push_back (per_cu); + } +} + +/* Read the CU list from the mapped index, and use it to create all + the CU objects for PER_BFD. */ + +static void +create_cus_from_index (dwarf2_per_bfd *per_bfd, + const gdb_byte *cu_list, offset_type cu_list_elements, + const gdb_byte *dwz_list, offset_type dwz_elements) +{ + gdb_assert (per_bfd->all_comp_units.empty ()); + per_bfd->all_comp_units.reserve ((cu_list_elements + dwz_elements) / 2); + + create_cus_from_index_list (per_bfd, cu_list, cu_list_elements, + &per_bfd->info, 0); + + if (dwz_elements == 0) + return; + + dwz_file *dwz = dwarf2_get_dwz_file (per_bfd); + create_cus_from_index_list (per_bfd, dwz_list, dwz_elements, + &dwz->info, 1); +} + +/* Create the signatured type hash table from the index. */ + +static void +create_signatured_type_table_from_index + (dwarf2_per_bfd *per_bfd, struct dwarf2_section_info *section, + const gdb_byte *bytes, offset_type elements) +{ + gdb_assert (per_bfd->all_type_units.empty ()); + per_bfd->all_type_units.reserve (elements / 3); + + htab_up sig_types_hash = allocate_signatured_type_table (); + + for (offset_type i = 0; i < elements; i += 3) + { + struct signatured_type *sig_type; + ULONGEST signature; + void **slot; + cu_offset type_offset_in_tu; + + gdb_static_assert (sizeof (ULONGEST) >= 8); + sect_offset sect_off + = (sect_offset) extract_unsigned_integer (bytes, 8, BFD_ENDIAN_LITTLE); + type_offset_in_tu + = (cu_offset) extract_unsigned_integer (bytes + 8, 8, + BFD_ENDIAN_LITTLE); + signature = extract_unsigned_integer (bytes + 16, 8, BFD_ENDIAN_LITTLE); + bytes += 3 * 8; + + sig_type = per_bfd->allocate_signatured_type (); + sig_type->signature = signature; + sig_type->type_offset_in_tu = type_offset_in_tu; + sig_type->per_cu.is_debug_types = 1; + sig_type->per_cu.section = section; + sig_type->per_cu.sect_off = sect_off; + sig_type->per_cu.v.quick + = OBSTACK_ZALLOC (&per_bfd->obstack, + struct dwarf2_per_cu_quick_data); + + slot = htab_find_slot (sig_types_hash.get (), sig_type, INSERT); + *slot = sig_type; + + per_bfd->all_type_units.push_back (sig_type); + } + + per_bfd->signatured_types = std::move (sig_types_hash); +} + +/* Create the signatured type hash table from .debug_names. */ + +static void +create_signatured_type_table_from_debug_names + (dwarf2_per_objfile *per_objfile, + const mapped_debug_names &map, + struct dwarf2_section_info *section, + struct dwarf2_section_info *abbrev_section) +{ + struct objfile *objfile = per_objfile->objfile; + + section->read (objfile); + abbrev_section->read (objfile); + + gdb_assert (per_objfile->per_bfd->all_type_units.empty ()); + per_objfile->per_bfd->all_type_units.reserve (map.tu_count); + + htab_up sig_types_hash = allocate_signatured_type_table (); + + for (uint32_t i = 0; i < map.tu_count; ++i) + { + struct signatured_type *sig_type; + void **slot; + + sect_offset sect_off + = (sect_offset) (extract_unsigned_integer + (map.tu_table_reordered + i * map.offset_size, + map.offset_size, + map.dwarf5_byte_order)); + + comp_unit_head cu_header; + read_and_check_comp_unit_head (per_objfile, &cu_header, section, + abbrev_section, + section->buffer + to_underlying (sect_off), + rcuh_kind::TYPE); + + sig_type = per_objfile->per_bfd->allocate_signatured_type (); + sig_type->signature = cu_header.signature; + sig_type->type_offset_in_tu = cu_header.type_cu_offset_in_tu; + sig_type->per_cu.is_debug_types = 1; + sig_type->per_cu.section = section; + sig_type->per_cu.sect_off = sect_off; + sig_type->per_cu.v.quick + = OBSTACK_ZALLOC (&per_objfile->per_bfd->obstack, + struct dwarf2_per_cu_quick_data); + + slot = htab_find_slot (sig_types_hash.get (), sig_type, INSERT); + *slot = sig_type; + + per_objfile->per_bfd->all_type_units.push_back (sig_type); + } + + per_objfile->per_bfd->signatured_types = std::move (sig_types_hash); +} + +/* Read the address map data from the mapped index, and use it to + populate the objfile's psymtabs_addrmap. */ + +static void +create_addrmap_from_index (dwarf2_per_objfile *per_objfile, + struct mapped_index *index) +{ + struct objfile *objfile = per_objfile->objfile; + struct gdbarch *gdbarch = objfile->arch (); + const gdb_byte *iter, *end; + struct addrmap *mutable_map; + CORE_ADDR baseaddr; + + auto_obstack temp_obstack; + + mutable_map = addrmap_create_mutable (&temp_obstack); + + iter = index->address_table.data (); + end = iter + index->address_table.size (); + + baseaddr = objfile->text_section_offset (); + + while (iter < end) + { + ULONGEST hi, lo, cu_index; + lo = extract_unsigned_integer (iter, 8, BFD_ENDIAN_LITTLE); + iter += 8; + hi = extract_unsigned_integer (iter, 8, BFD_ENDIAN_LITTLE); + iter += 8; + cu_index = extract_unsigned_integer (iter, 4, BFD_ENDIAN_LITTLE); + iter += 4; + + if (lo > hi) + { + complaint (_(".gdb_index address table has invalid range (%s - %s)"), + hex_string (lo), hex_string (hi)); + continue; + } + + if (cu_index >= per_objfile->per_bfd->all_comp_units.size ()) + { + complaint (_(".gdb_index address table has invalid CU number %u"), + (unsigned) cu_index); + continue; + } + + lo = gdbarch_adjust_dwarf2_addr (gdbarch, lo + baseaddr) - baseaddr; + hi = gdbarch_adjust_dwarf2_addr (gdbarch, hi + baseaddr) - baseaddr; + addrmap_set_empty (mutable_map, lo, hi - 1, + per_objfile->per_bfd->get_cu (cu_index)); + } + + objfile->partial_symtabs->psymtabs_addrmap + = addrmap_create_fixed (mutable_map, objfile->partial_symtabs->obstack ()); +} + +/* Read the address map data from DWARF-5 .debug_aranges, and use it to + populate the objfile's psymtabs_addrmap. */ + +static void +create_addrmap_from_aranges (dwarf2_per_objfile *per_objfile, + struct dwarf2_section_info *section) +{ + struct objfile *objfile = per_objfile->objfile; + bfd *abfd = objfile->obfd; + struct gdbarch *gdbarch = objfile->arch (); + const CORE_ADDR baseaddr = objfile->text_section_offset (); + + auto_obstack temp_obstack; + addrmap *mutable_map = addrmap_create_mutable (&temp_obstack); + + std::unordered_map<sect_offset, + dwarf2_per_cu_data *, + gdb::hash_enum<sect_offset>> + debug_info_offset_to_per_cu; + for (dwarf2_per_cu_data *per_cu : per_objfile->per_bfd->all_comp_units) + { + const auto insertpair + = debug_info_offset_to_per_cu.emplace (per_cu->sect_off, per_cu); + 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; + } + } + + section->read (objfile); + + const bfd_endian dwarf5_byte_order = gdbarch_byte_order (gdbarch); + + const gdb_byte *addr = section->buffer; + + while (addr < section->buffer + section->size) + { + const gdb_byte *const entry_addr = addr; + unsigned int bytes_read; + + const LONGEST entry_length = read_initial_length (abfd, addr, + &bytes_read); + addr += bytes_read; + + const gdb_byte *const entry_end = addr + entry_length; + const bool dwarf5_is_dwarf64 = bytes_read != 4; + const uint8_t offset_size = dwarf5_is_dwarf64 ? 8 : 4; + if (addr + entry_length > section->buffer + section->size) + { + warning (_("Section .debug_aranges in %s entry at offset %s " + "length %s exceeds section length %s, " + "ignoring .debug_aranges."), + objfile_name (objfile), + plongest (entry_addr - section->buffer), + plongest (bytes_read + entry_length), + pulongest (section->size)); + return; + } + + /* The version number. */ + const uint16_t version = read_2_bytes (abfd, addr); + addr += 2; + if (version != 2) + { + warning (_("Section .debug_aranges in %s entry at offset %s " + "has unsupported version %d, ignoring .debug_aranges."), + objfile_name (objfile), + plongest (entry_addr - section->buffer), version); + return; + } + + const uint64_t debug_info_offset + = extract_unsigned_integer (addr, offset_size, dwarf5_byte_order); + addr += offset_size; + const auto per_cu_it + = debug_info_offset_to_per_cu.find (sect_offset (debug_info_offset)); + if (per_cu_it == debug_info_offset_to_per_cu.cend ()) + { + warning (_("Section .debug_aranges in %s entry at offset %s " + "debug_info_offset %s does not exists, " + "ignoring .debug_aranges."), + objfile_name (objfile), + plongest (entry_addr - section->buffer), + pulongest (debug_info_offset)); + return; + } + dwarf2_per_cu_data *const per_cu = per_cu_it->second; + + const uint8_t address_size = *addr++; + if (address_size < 1 || address_size > 8) + { + warning (_("Section .debug_aranges in %s entry at offset %s " + "address_size %u is invalid, ignoring .debug_aranges."), + objfile_name (objfile), + plongest (entry_addr - section->buffer), address_size); + return; + } + + const uint8_t segment_selector_size = *addr++; + if (segment_selector_size != 0) + { + warning (_("Section .debug_aranges in %s entry at offset %s " + "segment_selector_size %u is not supported, " + "ignoring .debug_aranges."), + objfile_name (objfile), + plongest (entry_addr - section->buffer), + segment_selector_size); + return; + } + + /* Must pad to an alignment boundary that is twice the address + size. It is undocumented by the DWARF standard but GCC does + use it. */ + for (size_t padding = ((-(addr - section->buffer)) + & (2 * address_size - 1)); + padding > 0; padding--) + if (*addr++ != 0) + { + warning (_("Section .debug_aranges in %s entry at offset %s " + "padding is not zero, ignoring .debug_aranges."), + objfile_name (objfile), + plongest (entry_addr - section->buffer)); + return; + } + + for (;;) + { + if (addr + 2 * address_size > entry_end) + { + warning (_("Section .debug_aranges in %s entry at offset %s " + "address list is not properly terminated, " + "ignoring .debug_aranges."), + objfile_name (objfile), + plongest (entry_addr - section->buffer)); + return; + } + ULONGEST start = extract_unsigned_integer (addr, address_size, + dwarf5_byte_order); + addr += address_size; + ULONGEST length = extract_unsigned_integer (addr, address_size, + dwarf5_byte_order); + addr += address_size; + if (start == 0 && length == 0) + break; + if (start == 0 && !per_objfile->per_bfd->has_section_at_zero) + { + /* Symbol was eliminated due to a COMDAT group. */ + continue; + } + ULONGEST end = start + length; + start = (gdbarch_adjust_dwarf2_addr (gdbarch, start + baseaddr) + - baseaddr); + end = (gdbarch_adjust_dwarf2_addr (gdbarch, end + baseaddr) + - baseaddr); + addrmap_set_empty (mutable_map, start, end - 1, per_cu); + } + } + + objfile->partial_symtabs->psymtabs_addrmap + = addrmap_create_fixed (mutable_map, objfile->partial_symtabs->obstack ()); +} + +/* Find a slot in the mapped index INDEX for the object named NAME. + If NAME is found, set *VEC_OUT to point to the CU vector in the + constant pool and return true. If NAME cannot be found, return + false. */ + +static bool +find_slot_in_mapped_hash (struct mapped_index *index, const char *name, + offset_type **vec_out) +{ + offset_type hash; + offset_type slot, step; + int (*cmp) (const char *, const char *); + + gdb::unique_xmalloc_ptr<char> without_params; + if (current_language->la_language == language_cplus + || current_language->la_language == language_fortran + || current_language->la_language == language_d) + { + /* NAME is already canonical. Drop any qualifiers as .gdb_index does + not contain any. */ + + if (strchr (name, '(') != NULL) + { + without_params = cp_remove_params (name); + + if (without_params != NULL) + name = without_params.get (); + } + } + + /* Index version 4 did not support case insensitive searches. But the + indices for case insensitive languages are built in lowercase, therefore + simulate our NAME being searched is also lowercased. */ + hash = mapped_index_string_hash ((index->version == 4 + && case_sensitivity == case_sensitive_off + ? 5 : index->version), + name); + + slot = hash & (index->symbol_table.size () - 1); + step = ((hash * 17) & (index->symbol_table.size () - 1)) | 1; + cmp = (case_sensitivity == case_sensitive_on ? strcmp : strcasecmp); + + for (;;) + { + const char *str; + + const auto &bucket = index->symbol_table[slot]; + if (bucket.name == 0 && bucket.vec == 0) + return false; + + str = index->constant_pool + MAYBE_SWAP (bucket.name); + if (!cmp (name, str)) + { + *vec_out = (offset_type *) (index->constant_pool + + MAYBE_SWAP (bucket.vec)); + return true; + } + + slot = (slot + step) & (index->symbol_table.size () - 1); + } +} + +/* A helper function that reads the .gdb_index from BUFFER and fills + in MAP. FILENAME is the name of the file containing the data; + it is used for error reporting. DEPRECATED_OK is true if it is + ok to use deprecated sections. + + CU_LIST, CU_LIST_ELEMENTS, TYPES_LIST, and TYPES_LIST_ELEMENTS are + out parameters that are filled in with information about the CU and + TU lists in the section. + + Returns true if all went well, false otherwise. */ + +static bool +read_gdb_index_from_buffer (const char *filename, + bool deprecated_ok, + gdb::array_view<const gdb_byte> buffer, + struct mapped_index *map, + const gdb_byte **cu_list, + offset_type *cu_list_elements, + const gdb_byte **types_list, + offset_type *types_list_elements) +{ + const gdb_byte *addr = &buffer[0]; + + /* Version check. */ + offset_type version = MAYBE_SWAP (*(offset_type *) addr); + /* Versions earlier than 3 emitted every copy of a psymbol. This + causes the index to behave very poorly for certain requests. Version 3 + contained incomplete addrmap. So, it seems better to just ignore such + indices. */ + if (version < 4) + { + static int warning_printed = 0; + if (!warning_printed) + { + warning (_("Skipping obsolete .gdb_index section in %s."), + filename); + warning_printed = 1; + } + return 0; + } + /* Index version 4 uses a different hash function than index version + 5 and later. + + Versions earlier than 6 did not emit psymbols for inlined + functions. Using these files will cause GDB not to be able to + set breakpoints on inlined functions by name, so we ignore these + indices unless the user has done + "set use-deprecated-index-sections on". */ + if (version < 6 && !deprecated_ok) + { + static int warning_printed = 0; + if (!warning_printed) + { + warning (_("\ +Skipping deprecated .gdb_index section in %s.\n\ +Do \"set use-deprecated-index-sections on\" before the file is read\n\ +to use the section anyway."), + filename); + warning_printed = 1; + } + return 0; + } + /* Version 7 indices generated by gold refer to the CU for a symbol instead + of the TU (for symbols coming from TUs), + http://sourceware.org/bugzilla/show_bug.cgi?id=15021. + Plus gold-generated indices can have duplicate entries for global symbols, + http://sourceware.org/bugzilla/show_bug.cgi?id=15646. + These are just performance bugs, and we can't distinguish gdb-generated + indices from gold-generated ones, so issue no warning here. */ + + /* Indexes with higher version than the one supported by GDB may be no + longer backward compatible. */ + if (version > 8) + return 0; + + map->version = version; + + offset_type *metadata = (offset_type *) (addr + sizeof (offset_type)); + + int i = 0; + *cu_list = addr + MAYBE_SWAP (metadata[i]); + *cu_list_elements = ((MAYBE_SWAP (metadata[i + 1]) - MAYBE_SWAP (metadata[i])) + / 8); + ++i; + + *types_list = addr + MAYBE_SWAP (metadata[i]); + *types_list_elements = ((MAYBE_SWAP (metadata[i + 1]) + - MAYBE_SWAP (metadata[i])) + / 8); + ++i; + + const gdb_byte *address_table = addr + MAYBE_SWAP (metadata[i]); + const gdb_byte *address_table_end = addr + MAYBE_SWAP (metadata[i + 1]); + map->address_table + = gdb::array_view<const gdb_byte> (address_table, address_table_end); + ++i; + + const gdb_byte *symbol_table = addr + MAYBE_SWAP (metadata[i]); + const gdb_byte *symbol_table_end = addr + MAYBE_SWAP (metadata[i + 1]); + map->symbol_table + = gdb::array_view<mapped_index::symbol_table_slot> + ((mapped_index::symbol_table_slot *) symbol_table, + (mapped_index::symbol_table_slot *) symbol_table_end); + + ++i; + map->constant_pool = (char *) (addr + MAYBE_SWAP (metadata[i])); + + return 1; +} + +/* Callback types for dwarf2_read_gdb_index. */ + +typedef gdb::function_view + <gdb::array_view<const gdb_byte>(objfile *, dwarf2_per_bfd *)> + get_gdb_index_contents_ftype; +typedef gdb::function_view + <gdb::array_view<const gdb_byte>(objfile *, dwz_file *)> + get_gdb_index_contents_dwz_ftype; + +/* Read .gdb_index. If everything went ok, initialize the "quick" + elements of all the CUs and return 1. Otherwise, return 0. */ + +static int +dwarf2_read_gdb_index + (dwarf2_per_objfile *per_objfile, + get_gdb_index_contents_ftype get_gdb_index_contents, + get_gdb_index_contents_dwz_ftype get_gdb_index_contents_dwz) +{ + const gdb_byte *cu_list, *types_list, *dwz_list = NULL; + offset_type cu_list_elements, types_list_elements, dwz_list_elements = 0; + struct dwz_file *dwz; + struct objfile *objfile = per_objfile->objfile; + dwarf2_per_bfd *per_bfd = per_objfile->per_bfd; + + gdb::array_view<const gdb_byte> main_index_contents + = get_gdb_index_contents (objfile, per_bfd); + + if (main_index_contents.empty ()) + return 0; + + std::unique_ptr<struct mapped_index> map (new struct mapped_index); + if (!read_gdb_index_from_buffer (objfile_name (objfile), + use_deprecated_index_sections, + main_index_contents, map.get (), &cu_list, + &cu_list_elements, &types_list, + &types_list_elements)) + return 0; + + /* Don't use the index if it's empty. */ + if (map->symbol_table.empty ()) + return 0; + + /* If there is a .dwz file, read it so we can get its CU list as + well. */ + dwz = dwarf2_get_dwz_file (per_bfd); + if (dwz != NULL) + { + struct mapped_index dwz_map; + const gdb_byte *dwz_types_ignore; + offset_type dwz_types_elements_ignore; + + gdb::array_view<const gdb_byte> dwz_index_content + = get_gdb_index_contents_dwz (objfile, dwz); + + if (dwz_index_content.empty ()) + return 0; + + if (!read_gdb_index_from_buffer (bfd_get_filename (dwz->dwz_bfd.get ()), + 1, dwz_index_content, &dwz_map, + &dwz_list, &dwz_list_elements, + &dwz_types_ignore, + &dwz_types_elements_ignore)) + { + warning (_("could not read '.gdb_index' section from %s; skipping"), + bfd_get_filename (dwz->dwz_bfd.get ())); + return 0; + } + } + + create_cus_from_index (per_bfd, cu_list, cu_list_elements, dwz_list, + dwz_list_elements); + + if (types_list_elements) + { + /* We can only handle a single .debug_types when we have an + index. */ + if (per_bfd->types.size () != 1) + return 0; + + dwarf2_section_info *section = &per_bfd->types[0]; + + create_signatured_type_table_from_index (per_bfd, section, types_list, + types_list_elements); + } + + create_addrmap_from_index (per_objfile, map.get ()); + + per_bfd->index_table = std::move (map); + per_bfd->using_index = 1; + per_bfd->quick_file_names_table = + create_quick_file_names_table (per_bfd->all_comp_units.size ()); + + /* Save partial symtabs in the per_bfd object, for the benefit of subsequent + objfiles using the same BFD. */ + gdb_assert (per_bfd->partial_symtabs == nullptr); + per_bfd->partial_symtabs = objfile->partial_symtabs; + + return 1; +} + +/* die_reader_func for dw2_get_file_names. */ + +static void +dw2_get_file_names_reader (const struct die_reader_specs *reader, + const gdb_byte *info_ptr, + struct die_info *comp_unit_die) +{ + struct dwarf2_cu *cu = reader->cu; + struct dwarf2_per_cu_data *this_cu = cu->per_cu; + dwarf2_per_objfile *per_objfile = cu->per_objfile; + struct dwarf2_per_cu_data *lh_cu; + struct attribute *attr; + void **slot; + struct quick_file_names *qfn; + + gdb_assert (! this_cu->is_debug_types); + + /* Our callers never want to match partial units -- instead they + will match the enclosing full CU. */ + if (comp_unit_die->tag == DW_TAG_partial_unit) + { + this_cu->v.quick->no_file_data = 1; + return; + } + + lh_cu = this_cu; + slot = NULL; + + line_header_up lh; + sect_offset line_offset {}; + + attr = dwarf2_attr (comp_unit_die, DW_AT_stmt_list, cu); + if (attr != nullptr) + { + struct quick_file_names find_entry; + + line_offset = (sect_offset) DW_UNSND (attr); + + /* We may have already read in this line header (TU line header sharing). + If we have we're done. */ + find_entry.hash.dwo_unit = cu->dwo_unit; + find_entry.hash.line_sect_off = line_offset; + slot = htab_find_slot (per_objfile->per_bfd->quick_file_names_table.get (), + &find_entry, INSERT); + if (*slot != NULL) + { + lh_cu->v.quick->file_names = (struct quick_file_names *) *slot; + return; + } + + lh = dwarf_decode_line_header (line_offset, cu); + } + if (lh == NULL) + { + lh_cu->v.quick->no_file_data = 1; + return; + } + + qfn = XOBNEW (&per_objfile->per_bfd->obstack, struct quick_file_names); + qfn->hash.dwo_unit = cu->dwo_unit; + qfn->hash.line_sect_off = line_offset; + gdb_assert (slot != NULL); + *slot = qfn; + + file_and_directory fnd = find_file_and_directory (comp_unit_die, cu); + + int offset = 0; + if (strcmp (fnd.name, "<unknown>") != 0) + ++offset; + + qfn->num_file_names = offset + lh->file_names_size (); + qfn->file_names = + XOBNEWVEC (&per_objfile->per_bfd->obstack, const char *, + qfn->num_file_names); + if (offset != 0) + qfn->file_names[0] = xstrdup (fnd.name); + for (int i = 0; i < lh->file_names_size (); ++i) + qfn->file_names[i + offset] = lh->file_full_name (i + 1, + fnd.comp_dir).release (); + qfn->real_names = NULL; + + lh_cu->v.quick->file_names = qfn; +} + +/* A helper for the "quick" functions which attempts to read the line + table for THIS_CU. */ + +static struct quick_file_names * +dw2_get_file_names (dwarf2_per_cu_data *this_cu, + dwarf2_per_objfile *per_objfile) +{ + /* This should never be called for TUs. */ + gdb_assert (! this_cu->is_debug_types); + /* Nor type unit groups. */ + gdb_assert (! this_cu->type_unit_group_p ()); + + if (this_cu->v.quick->file_names != NULL) + return this_cu->v.quick->file_names; + /* If we know there is no line data, no point in looking again. */ + if (this_cu->v.quick->no_file_data) + return NULL; + + cutu_reader reader (this_cu, per_objfile); + if (!reader.dummy_p) + dw2_get_file_names_reader (&reader, reader.info_ptr, reader.comp_unit_die); + + if (this_cu->v.quick->no_file_data) + return NULL; + return this_cu->v.quick->file_names; +} + +/* A helper for the "quick" functions which computes and caches the + real path for a given file name from the line table. */ + +static const char * +dw2_get_real_path (dwarf2_per_objfile *per_objfile, + struct quick_file_names *qfn, int index) +{ + if (qfn->real_names == NULL) + qfn->real_names = OBSTACK_CALLOC (&per_objfile->per_bfd->obstack, + qfn->num_file_names, const char *); + + if (qfn->real_names[index] == NULL) + qfn->real_names[index] = gdb_realpath (qfn->file_names[index]).release (); + + return qfn->real_names[index]; +} + +static struct symtab * +dw2_find_last_source_symtab (struct objfile *objfile) +{ + dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile); + dwarf2_per_cu_data *dwarf_cu = per_objfile->per_bfd->all_comp_units.back (); + compunit_symtab *cust = dw2_instantiate_symtab (dwarf_cu, per_objfile, false); + + if (cust == NULL) + return NULL; + + return compunit_primary_filetab (cust); +} + +/* Traversal function for dw2_forget_cached_source_info. */ + +static int +dw2_free_cached_file_names (void **slot, void *info) +{ + struct quick_file_names *file_data = (struct quick_file_names *) *slot; + + if (file_data->real_names) + { + int i; + + for (i = 0; i < file_data->num_file_names; ++i) + { + xfree ((void*) file_data->real_names[i]); + file_data->real_names[i] = NULL; + } + } + + return 1; +} + +static void +dw2_forget_cached_source_info (struct objfile *objfile) +{ + dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile); + + htab_traverse_noresize (per_objfile->per_bfd->quick_file_names_table.get (), + dw2_free_cached_file_names, NULL); +} + +/* Helper function for dw2_map_symtabs_matching_filename that expands + the symtabs and calls the iterator. */ + +static int +dw2_map_expand_apply (struct objfile *objfile, + struct dwarf2_per_cu_data *per_cu, + const char *name, const char *real_path, + gdb::function_view<bool (symtab *)> callback) +{ + struct compunit_symtab *last_made = objfile->compunit_symtabs; + + /* Don't visit already-expanded CUs. */ + dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile); + if (per_objfile->symtab_set_p (per_cu)) + return 0; + + /* This may expand more than one symtab, and we want to iterate over + all of them. */ + dw2_instantiate_symtab (per_cu, per_objfile, false); + + return iterate_over_some_symtabs (name, real_path, objfile->compunit_symtabs, + last_made, callback); +} + +/* Implementation of the map_symtabs_matching_filename method. */ + +static bool +dw2_map_symtabs_matching_filename + (struct objfile *objfile, const char *name, const char *real_path, + gdb::function_view<bool (symtab *)> callback) +{ + const char *name_basename = lbasename (name); + dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile); + + /* The rule is CUs specify all the files, including those used by + any TU, so there's no need to scan TUs here. */ + + for (dwarf2_per_cu_data *per_cu : per_objfile->per_bfd->all_comp_units) + { + /* We only need to look at symtabs not already expanded. */ + if (per_objfile->symtab_set_p (per_cu)) + continue; + + quick_file_names *file_data = dw2_get_file_names (per_cu, per_objfile); + if (file_data == NULL) + continue; + + for (int j = 0; j < file_data->num_file_names; ++j) + { + const char *this_name = file_data->file_names[j]; + const char *this_real_name; + + if (compare_filenames_for_search (this_name, name)) + { + if (dw2_map_expand_apply (objfile, per_cu, name, real_path, + callback)) + return true; + continue; + } + + /* Before we invoke realpath, which can get expensive when many + files are involved, do a quick comparison of the basenames. */ + if (! basenames_may_differ + && FILENAME_CMP (lbasename (this_name), name_basename) != 0) + continue; + + this_real_name = dw2_get_real_path (per_objfile, file_data, j); + if (compare_filenames_for_search (this_real_name, name)) + { + if (dw2_map_expand_apply (objfile, per_cu, name, real_path, + callback)) + return true; + continue; + } + + if (real_path != NULL) + { + gdb_assert (IS_ABSOLUTE_PATH (real_path)); + gdb_assert (IS_ABSOLUTE_PATH (name)); + if (this_real_name != NULL + && FILENAME_CMP (real_path, this_real_name) == 0) + { + if (dw2_map_expand_apply (objfile, per_cu, name, real_path, + callback)) + return true; + continue; + } + } + } + } + + return false; +} + +/* Struct used to manage iterating over all CUs looking for a symbol. */ + +struct dw2_symtab_iterator +{ + /* The dwarf2_per_objfile owning the CUs we are iterating on. */ + dwarf2_per_objfile *per_objfile; + /* If set, only look for symbols that match that block. Valid values are + GLOBAL_BLOCK and STATIC_BLOCK. */ + gdb::optional<block_enum> block_index; + /* The kind of symbol we're looking for. */ + domain_enum domain; + /* The list of CUs from the index entry of the symbol, + or NULL if not found. */ + offset_type *vec; + /* The next element in VEC to look at. */ + int next; + /* The number of elements in VEC, or zero if there is no match. */ + int length; + /* Have we seen a global version of the symbol? + If so we can ignore all further global instances. + This is to work around gold/15646, inefficient gold-generated + indices. */ + int global_seen; +}; + +/* Initialize the index symtab iterator ITER, common part. */ + +static void +dw2_symtab_iter_init_common (struct dw2_symtab_iterator *iter, + dwarf2_per_objfile *per_objfile, + gdb::optional<block_enum> block_index, + domain_enum domain) +{ + iter->per_objfile = per_objfile; + iter->block_index = block_index; + iter->domain = domain; + iter->next = 0; + iter->global_seen = 0; + iter->vec = NULL; + iter->length = 0; +} + +/* Initialize the index symtab iterator ITER, const char *NAME variant. */ + +static void +dw2_symtab_iter_init (struct dw2_symtab_iterator *iter, + dwarf2_per_objfile *per_objfile, + gdb::optional<block_enum> block_index, + domain_enum domain, + const char *name) +{ + dw2_symtab_iter_init_common (iter, per_objfile, block_index, domain); + + mapped_index *index = per_objfile->per_bfd->index_table.get (); + /* index is NULL if OBJF_READNOW. */ + if (index == NULL) + return; + + if (find_slot_in_mapped_hash (index, name, &iter->vec)) + iter->length = MAYBE_SWAP (*iter->vec); +} + +/* Initialize the index symtab iterator ITER, offset_type NAMEI variant. */ + +static void +dw2_symtab_iter_init (struct dw2_symtab_iterator *iter, + dwarf2_per_objfile *per_objfile, + gdb::optional<block_enum> block_index, + domain_enum domain, offset_type namei) +{ + dw2_symtab_iter_init_common (iter, per_objfile, block_index, domain); + + mapped_index *index = per_objfile->per_bfd->index_table.get (); + /* index is NULL if OBJF_READNOW. */ + if (index == NULL) + return; + + gdb_assert (!index->symbol_name_slot_invalid (namei)); + const auto &bucket = index->symbol_table[namei]; + + iter->vec = (offset_type *) (index->constant_pool + + MAYBE_SWAP (bucket.vec)); + iter->length = MAYBE_SWAP (*iter->vec); +} + +/* Return the next matching CU or NULL if there are no more. */ + +static struct dwarf2_per_cu_data * +dw2_symtab_iter_next (struct dw2_symtab_iterator *iter) +{ + dwarf2_per_objfile *per_objfile = iter->per_objfile; + + for ( ; iter->next < iter->length; ++iter->next) + { + offset_type cu_index_and_attrs = + MAYBE_SWAP (iter->vec[iter->next + 1]); + offset_type cu_index = GDB_INDEX_CU_VALUE (cu_index_and_attrs); + gdb_index_symbol_kind symbol_kind = + GDB_INDEX_SYMBOL_KIND_VALUE (cu_index_and_attrs); + /* Only check the symbol attributes if they're present. + Indices prior to version 7 don't record them, + and indices >= 7 may elide them for certain symbols + (gold does this). */ + int attrs_valid = + (per_objfile->per_bfd->index_table->version >= 7 + && symbol_kind != GDB_INDEX_SYMBOL_KIND_NONE); + + /* Don't crash on bad data. */ + if (cu_index >= (per_objfile->per_bfd->all_comp_units.size () + + per_objfile->per_bfd->all_type_units.size ())) + { + complaint (_(".gdb_index entry has bad CU index" + " [in module %s]"), objfile_name (per_objfile->objfile)); + continue; + } + + dwarf2_per_cu_data *per_cu = per_objfile->per_bfd->get_cutu (cu_index); + + /* Skip if already read in. */ + if (per_objfile->symtab_set_p (per_cu)) + continue; + + /* Check static vs global. */ + if (attrs_valid) + { + bool is_static = GDB_INDEX_SYMBOL_STATIC_VALUE (cu_index_and_attrs); + + if (iter->block_index.has_value ()) + { + bool want_static = *iter->block_index == STATIC_BLOCK; + + if (is_static != want_static) + continue; + } + + /* Work around gold/15646. */ + if (!is_static + && symbol_kind == GDB_INDEX_SYMBOL_KIND_TYPE) + { + if (iter->global_seen) + continue; + + iter->global_seen = 1; + } + } + + /* Only check the symbol's kind if it has one. */ + if (attrs_valid) + { + switch (iter->domain) + { + case VAR_DOMAIN: + if (symbol_kind != GDB_INDEX_SYMBOL_KIND_VARIABLE + && symbol_kind != GDB_INDEX_SYMBOL_KIND_FUNCTION + /* Some types are also in VAR_DOMAIN. */ + && symbol_kind != GDB_INDEX_SYMBOL_KIND_TYPE) + continue; + break; + case STRUCT_DOMAIN: + if (symbol_kind != GDB_INDEX_SYMBOL_KIND_TYPE) + continue; + break; + case LABEL_DOMAIN: + if (symbol_kind != GDB_INDEX_SYMBOL_KIND_OTHER) + continue; + break; + case MODULE_DOMAIN: + if (symbol_kind != GDB_INDEX_SYMBOL_KIND_OTHER) + continue; + break; + default: + break; + } + } + + ++iter->next; + return per_cu; + } + + return NULL; +} + +static struct compunit_symtab * +dw2_lookup_symbol (struct objfile *objfile, block_enum block_index, + const char *name, domain_enum domain) +{ + struct compunit_symtab *stab_best = NULL; + dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile); + + lookup_name_info lookup_name (name, symbol_name_match_type::FULL); + + struct dw2_symtab_iterator iter; + struct dwarf2_per_cu_data *per_cu; + + dw2_symtab_iter_init (&iter, per_objfile, block_index, domain, name); + + while ((per_cu = dw2_symtab_iter_next (&iter)) != NULL) + { + struct symbol *sym, *with_opaque = NULL; + struct compunit_symtab *stab + = dw2_instantiate_symtab (per_cu, per_objfile, false); + const struct blockvector *bv = COMPUNIT_BLOCKVECTOR (stab); + const struct block *block = BLOCKVECTOR_BLOCK (bv, block_index); + + sym = block_find_symbol (block, name, domain, + block_find_non_opaque_type_preferred, + &with_opaque); + + /* Some caution must be observed with overloaded functions + and methods, since the index will not contain any overload + information (but NAME might contain it). */ + + if (sym != NULL + && SYMBOL_MATCHES_SEARCH_NAME (sym, lookup_name)) + return stab; + if (with_opaque != NULL + && SYMBOL_MATCHES_SEARCH_NAME (with_opaque, lookup_name)) + stab_best = stab; + + /* Keep looking through other CUs. */ + } + + return stab_best; +} + +static void +dw2_print_stats (struct objfile *objfile) +{ + dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile); + int total = (per_objfile->per_bfd->all_comp_units.size () + + per_objfile->per_bfd->all_type_units.size ()); + int count = 0; + + for (int i = 0; i < total; ++i) + { + dwarf2_per_cu_data *per_cu = per_objfile->per_bfd->get_cutu (i); + + if (!per_objfile->symtab_set_p (per_cu)) + ++count; + } + printf_filtered (_(" Number of read CUs: %d\n"), total - count); + printf_filtered (_(" Number of unread CUs: %d\n"), count); +} + +/* This dumps minimal information about the index. + It is called via "mt print objfiles". + One use is to verify .gdb_index has been loaded by the + gdb.dwarf2/gdb-index.exp testcase. */ + +static void +dw2_dump (struct objfile *objfile) +{ + dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile); + + gdb_assert (per_objfile->per_bfd->using_index); + printf_filtered (".gdb_index:"); + if (per_objfile->per_bfd->index_table != NULL) + { + printf_filtered (" version %d\n", + per_objfile->per_bfd->index_table->version); + } + else + printf_filtered (" faked for \"readnow\"\n"); + printf_filtered ("\n"); +} + +static void +dw2_expand_symtabs_for_function (struct objfile *objfile, + const char *func_name) +{ + dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile); + + struct dw2_symtab_iterator iter; + struct dwarf2_per_cu_data *per_cu; + + dw2_symtab_iter_init (&iter, per_objfile, {}, VAR_DOMAIN, func_name); + + while ((per_cu = dw2_symtab_iter_next (&iter)) != NULL) + dw2_instantiate_symtab (per_cu, per_objfile, false); + +} + +static void +dw2_expand_all_symtabs (struct objfile *objfile) +{ + dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile); + int total_units = (per_objfile->per_bfd->all_comp_units.size () + + per_objfile->per_bfd->all_type_units.size ()); + + for (int i = 0; i < total_units; ++i) + { + dwarf2_per_cu_data *per_cu = per_objfile->per_bfd->get_cutu (i); + + /* We don't want to directly expand a partial CU, because if we + read it with the wrong language, then assertion failures can + be triggered later on. See PR symtab/23010. So, tell + dw2_instantiate_symtab to skip partial CUs -- any important + partial CU will be read via DW_TAG_imported_unit anyway. */ + dw2_instantiate_symtab (per_cu, per_objfile, true); + } +} + +static void +dw2_expand_symtabs_with_fullname (struct objfile *objfile, + const char *fullname) +{ + dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile); + + /* We don't need to consider type units here. + This is only called for examining code, e.g. expand_line_sal. + There can be an order of magnitude (or more) more type units + than comp units, and we avoid them if we can. */ + + for (dwarf2_per_cu_data *per_cu : per_objfile->per_bfd->all_comp_units) + { + /* We only need to look at symtabs not already expanded. */ + if (per_objfile->symtab_set_p (per_cu)) + continue; + + quick_file_names *file_data = dw2_get_file_names (per_cu, per_objfile); + if (file_data == NULL) + continue; + + for (int j = 0; j < file_data->num_file_names; ++j) + { + const char *this_fullname = file_data->file_names[j]; + + if (filename_cmp (this_fullname, fullname) == 0) + { + dw2_instantiate_symtab (per_cu, per_objfile, false); + break; + } + } + } +} + +static void +dw2_expand_symtabs_matching_symbol + (mapped_index_base &index, + const lookup_name_info &lookup_name_in, + gdb::function_view<expand_symtabs_symbol_matcher_ftype> symbol_matcher, + enum search_domain kind, + gdb::function_view<bool (offset_type)> match_callback, + dwarf2_per_objfile *per_objfile); + +static void +dw2_expand_symtabs_matching_one + (dwarf2_per_cu_data *per_cu, + dwarf2_per_objfile *per_objfile, + gdb::function_view<expand_symtabs_file_matcher_ftype> file_matcher, + gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify); + +static void +dw2_map_matching_symbols + (struct objfile *objfile, + const lookup_name_info &name, domain_enum domain, + int global, + gdb::function_view<symbol_found_callback_ftype> callback, + symbol_compare_ftype *ordered_compare) +{ + /* Used for Ada. */ + dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile); + + const block_enum block_kind = global ? GLOBAL_BLOCK : STATIC_BLOCK; + + if (per_objfile->per_bfd->index_table != nullptr) + { + mapped_index &index = *per_objfile->per_bfd->index_table; + + const char *match_name = name.ada ().lookup_name ().c_str (); + auto matcher = [&] (const char *symname) + { + if (ordered_compare == nullptr) + return true; + return ordered_compare (symname, match_name) == 0; + }; + + dw2_expand_symtabs_matching_symbol (index, name, matcher, ALL_DOMAIN, + [&] (offset_type namei) + { + struct dw2_symtab_iterator iter; + struct dwarf2_per_cu_data *per_cu; + + dw2_symtab_iter_init (&iter, per_objfile, block_kind, domain, + namei); + while ((per_cu = dw2_symtab_iter_next (&iter)) != NULL) + dw2_expand_symtabs_matching_one (per_cu, per_objfile, nullptr, + nullptr); + return true; + }, per_objfile); + } + else + { + /* We have -readnow: no .gdb_index, but no partial symtabs either. So, + proceed assuming all symtabs have been read in. */ + } + + for (compunit_symtab *cust : objfile->compunits ()) + { + const struct block *block; + + if (cust == NULL) + continue; + block = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (cust), block_kind); + if (!iterate_over_symbols_terminated (block, name, + domain, callback)) + return; + } +} + +/* Starting from a search name, return the string that finds the upper + bound of all strings that start with SEARCH_NAME in a sorted name + list. Returns the empty string to indicate that the upper bound is + the end of the list. */ + +static std::string +make_sort_after_prefix_name (const char *search_name) +{ + /* When looking to complete "func", we find the upper bound of all + symbols that start with "func" by looking for where we'd insert + the closest string that would follow "func" in lexicographical + order. Usually, that's "func"-with-last-character-incremented, + i.e. "fund". Mind non-ASCII characters, though. Usually those + will be UTF-8 multi-byte sequences, but we can't be certain. + Especially mind the 0xff character, which is a valid character in + non-UTF-8 source character sets (e.g. Latin1 'ÿ'), and we can't + rule out compilers allowing it in identifiers. Note that + conveniently, strcmp/strcasecmp are specified to compare + characters interpreted as unsigned char. So what we do is treat + the whole string as a base 256 number composed of a sequence of + base 256 "digits" and add 1 to it. I.e., adding 1 to 0xff wraps + to 0, and carries 1 to the following more-significant position. + If the very first character in SEARCH_NAME ends up incremented + and carries/overflows, then the upper bound is the end of the + list. The string after the empty string is also the empty + string. + + Some examples of this operation: + + SEARCH_NAME => "+1" RESULT + + "abc" => "abd" + "ab\xff" => "ac" + "\xff" "a" "\xff" => "\xff" "b" + "\xff" => "" + "\xff\xff" => "" + "" => "" + + Then, with these symbols for example: + + func + func1 + fund + + completing "func" looks for symbols between "func" and + "func"-with-last-character-incremented, i.e. "fund" (exclusive), + which finds "func" and "func1", but not "fund". + + And with: + + funcÿ (Latin1 'ÿ' [0xff]) + funcÿ1 + fund + + completing "funcÿ" looks for symbols between "funcÿ" and "fund" + (exclusive), which finds "funcÿ" and "funcÿ1", but not "fund". + + And with: + + ÿÿ (Latin1 'ÿ' [0xff]) + ÿÿ1 + + completing "ÿ" or "ÿÿ" looks for symbols between between "ÿÿ" and + the end of the list. + */ + std::string after = search_name; + while (!after.empty () && (unsigned char) after.back () == 0xff) + after.pop_back (); + if (!after.empty ()) + after.back () = (unsigned char) after.back () + 1; + return after; +} + +/* See declaration. */ + +std::pair<std::vector<name_component>::const_iterator, + std::vector<name_component>::const_iterator> +mapped_index_base::find_name_components_bounds + (const lookup_name_info &lookup_name_without_params, language lang, + dwarf2_per_objfile *per_objfile) const +{ + auto *name_cmp + = this->name_components_casing == case_sensitive_on ? strcmp : strcasecmp; + + const char *lang_name + = lookup_name_without_params.language_lookup_name (lang); + + /* Comparison function object for lower_bound that matches against a + given symbol name. */ + auto lookup_compare_lower = [&] (const name_component &elem, + const char *name) + { + const char *elem_qualified = this->symbol_name_at (elem.idx, per_objfile); + const char *elem_name = elem_qualified + elem.name_offset; + return name_cmp (elem_name, name) < 0; + }; + + /* Comparison function object for upper_bound that matches against a + given symbol name. */ + auto lookup_compare_upper = [&] (const char *name, + const name_component &elem) + { + const char *elem_qualified = this->symbol_name_at (elem.idx, per_objfile); + const char *elem_name = elem_qualified + elem.name_offset; + return name_cmp (name, elem_name) < 0; + }; + + auto begin = this->name_components.begin (); + auto end = this->name_components.end (); + + /* Find the lower bound. */ + auto lower = [&] () + { + if (lookup_name_without_params.completion_mode () && lang_name[0] == '\0') + return begin; + else + return std::lower_bound (begin, end, lang_name, lookup_compare_lower); + } (); + + /* Find the upper bound. */ + auto upper = [&] () + { + if (lookup_name_without_params.completion_mode ()) + { + /* In completion mode, we want UPPER to point past all + symbols names that have the same prefix. I.e., with + these symbols, and completing "func": + + function << lower bound + function1 + other_function << upper bound + + We find the upper bound by looking for the insertion + point of "func"-with-last-character-incremented, + i.e. "fund". */ + std::string after = make_sort_after_prefix_name (lang_name); + if (after.empty ()) + return end; + return std::lower_bound (lower, end, after.c_str (), + lookup_compare_lower); + } + else + return std::upper_bound (lower, end, lang_name, lookup_compare_upper); + } (); + + return {lower, upper}; +} + +/* See declaration. */ + +void +mapped_index_base::build_name_components (dwarf2_per_objfile *per_objfile) +{ + if (!this->name_components.empty ()) + return; + + this->name_components_casing = case_sensitivity; + auto *name_cmp + = this->name_components_casing == case_sensitive_on ? strcmp : strcasecmp; + + /* The code below only knows how to break apart components of C++ + symbol names (and other languages that use '::' as + namespace/module separator) and Ada symbol names. */ + auto count = this->symbol_name_count (); + for (offset_type idx = 0; idx < count; idx++) + { + if (this->symbol_name_slot_invalid (idx)) + continue; + + const char *name = this->symbol_name_at (idx, per_objfile); + + /* Add each name component to the name component table. */ + unsigned int previous_len = 0; + + if (strstr (name, "::") != nullptr) + { + for (unsigned int current_len = cp_find_first_component (name); + name[current_len] != '\0'; + current_len += cp_find_first_component (name + current_len)) + { + gdb_assert (name[current_len] == ':'); + this->name_components.push_back ({previous_len, idx}); + /* Skip the '::'. */ + current_len += 2; + previous_len = current_len; + } + } + else + { + /* Handle the Ada encoded (aka mangled) form here. */ + for (const char *iter = strstr (name, "__"); + iter != nullptr; + iter = strstr (iter, "__")) + { + this->name_components.push_back ({previous_len, idx}); + iter += 2; + previous_len = iter - name; + } + } + + this->name_components.push_back ({previous_len, idx}); + } + + /* Sort name_components elements by name. */ + auto name_comp_compare = [&] (const name_component &left, + const name_component &right) + { + const char *left_qualified + = this->symbol_name_at (left.idx, per_objfile); + const char *right_qualified + = this->symbol_name_at (right.idx, per_objfile); + + const char *left_name = left_qualified + left.name_offset; + const char *right_name = right_qualified + right.name_offset; + + return name_cmp (left_name, right_name) < 0; + }; + + std::sort (this->name_components.begin (), + this->name_components.end (), + name_comp_compare); +} + +/* Helper for dw2_expand_symtabs_matching that works with a + mapped_index_base instead of the containing objfile. This is split + to a separate function in order to be able to unit test the + name_components matching using a mock mapped_index_base. For each + symbol name that matches, calls MATCH_CALLBACK, passing it the + symbol's index in the mapped_index_base symbol table. */ + +static void +dw2_expand_symtabs_matching_symbol + (mapped_index_base &index, + const lookup_name_info &lookup_name_in, + gdb::function_view<expand_symtabs_symbol_matcher_ftype> symbol_matcher, + enum search_domain kind, + gdb::function_view<bool (offset_type)> match_callback, + dwarf2_per_objfile *per_objfile) +{ + lookup_name_info lookup_name_without_params + = lookup_name_in.make_ignore_params (); + + /* Build the symbol name component sorted vector, if we haven't + yet. */ + index.build_name_components (per_objfile); + + /* The same symbol may appear more than once in the range though. + E.g., if we're looking for symbols that complete "w", and we have + a symbol named "w1::w2", we'll find the two name components for + that same symbol in the range. To be sure we only call the + callback once per symbol, we first collect the symbol name + indexes that matched in a temporary vector and ignore + duplicates. */ + std::vector<offset_type> matches; + + struct name_and_matcher + { + symbol_name_matcher_ftype *matcher; + const char *name; + + bool operator== (const name_and_matcher &other) const + { + return matcher == other.matcher && strcmp (name, other.name) == 0; + } + }; + + /* A vector holding all the different symbol name matchers, for all + languages. */ + std::vector<name_and_matcher> matchers; + + for (int i = 0; i < nr_languages; i++) + { + enum language lang_e = (enum language) i; + + const language_defn *lang = language_def (lang_e); + symbol_name_matcher_ftype *name_matcher + = lang->get_symbol_name_matcher (lookup_name_without_params); + + name_and_matcher key { + name_matcher, + lookup_name_without_params.language_lookup_name (lang_e) + }; + + /* Don't insert the same comparison routine more than once. + Note that we do this linear walk. This is not a problem in + practice because the number of supported languages is + low. */ + if (std::find (matchers.begin (), matchers.end (), key) + != matchers.end ()) + continue; + matchers.push_back (std::move (key)); + + auto bounds + = index.find_name_components_bounds (lookup_name_without_params, + lang_e, per_objfile); + + /* Now for each symbol name in range, check to see if we have a name + match, and if so, call the MATCH_CALLBACK callback. */ + + for (; bounds.first != bounds.second; ++bounds.first) + { + const char *qualified + = index.symbol_name_at (bounds.first->idx, per_objfile); + + if (!name_matcher (qualified, lookup_name_without_params, NULL) + || (symbol_matcher != NULL && !symbol_matcher (qualified))) + continue; + + matches.push_back (bounds.first->idx); + } + } + + std::sort (matches.begin (), matches.end ()); + + /* Finally call the callback, once per match. */ + ULONGEST prev = -1; + for (offset_type idx : matches) + { + if (prev != idx) + { + if (!match_callback (idx)) + break; + prev = idx; + } + } + + /* Above we use a type wider than idx's for 'prev', since 0 and + (offset_type)-1 are both possible values. */ + static_assert (sizeof (prev) > sizeof (offset_type), ""); +} + +#if GDB_SELF_TEST + +namespace selftests { namespace dw2_expand_symtabs_matching { + +/* A mock .gdb_index/.debug_names-like name index table, enough to + exercise dw2_expand_symtabs_matching_symbol, which works with the + mapped_index_base interface. Builds an index from the symbol list + passed as parameter to the constructor. */ +class mock_mapped_index : public mapped_index_base +{ +public: + mock_mapped_index (gdb::array_view<const char *> symbols) + : m_symbol_table (symbols) + {} + + DISABLE_COPY_AND_ASSIGN (mock_mapped_index); + + /* Return the number of names in the symbol table. */ + size_t symbol_name_count () const override + { + return m_symbol_table.size (); + } + + /* Get the name of the symbol at IDX in the symbol table. */ + const char *symbol_name_at + (offset_type idx, dwarf2_per_objfile *per_objfile) const override + { + return m_symbol_table[idx]; + } + +private: + gdb::array_view<const char *> m_symbol_table; +}; + +/* Convenience function that converts a NULL pointer to a "<null>" + string, to pass to print routines. */ + +static const char * +string_or_null (const char *str) +{ + return str != NULL ? str : "<null>"; +} + +/* Check if a lookup_name_info built from + NAME/MATCH_TYPE/COMPLETION_MODE matches the symbols in the mock + index. EXPECTED_LIST is the list of expected matches, in expected + matching order. If no match expected, then an empty list is + specified. Returns true on success. On failure prints a warning + indicating the file:line that failed, and returns false. */ + +static bool +check_match (const char *file, int line, + mock_mapped_index &mock_index, + const char *name, symbol_name_match_type match_type, + bool completion_mode, + std::initializer_list<const char *> expected_list, + dwarf2_per_objfile *per_objfile) +{ + lookup_name_info lookup_name (name, match_type, completion_mode); + + bool matched = true; + + auto mismatch = [&] (const char *expected_str, + const char *got) + { + warning (_("%s:%d: match_type=%s, looking-for=\"%s\", " + "expected=\"%s\", got=\"%s\"\n"), + file, line, + (match_type == symbol_name_match_type::FULL + ? "FULL" : "WILD"), + name, string_or_null (expected_str), string_or_null (got)); + matched = false; + }; + + auto expected_it = expected_list.begin (); + auto expected_end = expected_list.end (); + + dw2_expand_symtabs_matching_symbol (mock_index, lookup_name, + NULL, ALL_DOMAIN, + [&] (offset_type idx) + { + const char *matched_name = mock_index.symbol_name_at (idx, per_objfile); + const char *expected_str + = expected_it == expected_end ? NULL : *expected_it++; + + if (expected_str == NULL || strcmp (expected_str, matched_name) != 0) + mismatch (expected_str, matched_name); + return true; + }, per_objfile); + + const char *expected_str + = expected_it == expected_end ? NULL : *expected_it++; + if (expected_str != NULL) + mismatch (expected_str, NULL); + + return matched; +} + +/* The symbols added to the mock mapped_index for testing (in + canonical form). */ +static const char *test_symbols[] = { + "function", + "std::bar", + "std::zfunction", + "std::zfunction2", + "w1::w2", + "ns::foo<char*>", + "ns::foo<int>", + "ns::foo<long>", + "ns2::tmpl<int>::foo2", + "(anonymous namespace)::A::B::C", + + /* These are used to check that the increment-last-char in the + matching algorithm for completion doesn't match "t1_fund" when + completing "t1_func". */ + "t1_func", + "t1_func1", + "t1_fund", + "t1_fund1", + + /* A UTF-8 name with multi-byte sequences to make sure that + cp-name-parser understands this as a single identifier ("função" + is "function" in PT). */ + u8"u8função", + + /* \377 (0xff) is Latin1 'ÿ'. */ + "yfunc\377", + + /* \377 (0xff) is Latin1 'ÿ'. */ + "\377", + "\377\377123", + + /* A name with all sorts of complications. Starts with "z" to make + it easier for the completion tests below. */ +#define Z_SYM_NAME \ + "z::std::tuple<(anonymous namespace)::ui*, std::bar<(anonymous namespace)::ui> >" \ + "::tuple<(anonymous namespace)::ui*, " \ + "std::default_delete<(anonymous namespace)::ui>, void>" + + Z_SYM_NAME +}; + +/* Returns true if the mapped_index_base::find_name_component_bounds + method finds EXPECTED_SYMS in INDEX when looking for SEARCH_NAME, + in completion mode. */ + +static bool +check_find_bounds_finds (mapped_index_base &index, + const char *search_name, + gdb::array_view<const char *> expected_syms, + dwarf2_per_objfile *per_objfile) +{ + lookup_name_info lookup_name (search_name, + symbol_name_match_type::FULL, true); + + auto bounds = index.find_name_components_bounds (lookup_name, + language_cplus, + per_objfile); + + size_t distance = std::distance (bounds.first, bounds.second); + if (distance != expected_syms.size ()) + return false; + + for (size_t exp_elem = 0; exp_elem < distance; exp_elem++) + { + auto nc_elem = bounds.first + exp_elem; + const char *qualified = index.symbol_name_at (nc_elem->idx, per_objfile); + if (strcmp (qualified, expected_syms[exp_elem]) != 0) + return false; + } + + return true; +} + +/* Test the lower-level mapped_index::find_name_component_bounds + method. */ + +static void +test_mapped_index_find_name_component_bounds () +{ + mock_mapped_index mock_index (test_symbols); + + mock_index.build_name_components (NULL /* per_objfile */); + + /* Test the lower-level mapped_index::find_name_component_bounds + method in completion mode. */ + { + static const char *expected_syms[] = { + "t1_func", + "t1_func1", + }; + + SELF_CHECK (check_find_bounds_finds + (mock_index, "t1_func", expected_syms, + NULL /* per_objfile */)); + } + + /* Check that the increment-last-char in the name matching algorithm + for completion doesn't get confused with Ansi1 'ÿ' / 0xff. */ + { + static const char *expected_syms1[] = { + "\377", + "\377\377123", + }; + SELF_CHECK (check_find_bounds_finds + (mock_index, "\377", expected_syms1, NULL /* per_objfile */)); + + static const char *expected_syms2[] = { + "\377\377123", + }; + SELF_CHECK (check_find_bounds_finds + (mock_index, "\377\377", expected_syms2, + NULL /* per_objfile */)); + } +} + +/* Test dw2_expand_symtabs_matching_symbol. */ + +static void +test_dw2_expand_symtabs_matching_symbol () +{ + mock_mapped_index mock_index (test_symbols); + + /* We let all tests run until the end even if some fails, for debug + convenience. */ + bool any_mismatch = false; + + /* Create the expected symbols list (an initializer_list). Needed + because lists have commas, and we need to pass them to CHECK, + which is a macro. */ +#define EXPECT(...) { __VA_ARGS__ } + + /* Wrapper for check_match that passes down the current + __FILE__/__LINE__. */ +#define CHECK_MATCH(NAME, MATCH_TYPE, COMPLETION_MODE, EXPECTED_LIST) \ + any_mismatch |= !check_match (__FILE__, __LINE__, \ + mock_index, \ + NAME, MATCH_TYPE, COMPLETION_MODE, \ + EXPECTED_LIST, NULL) + + /* Identity checks. */ + for (const char *sym : test_symbols) + { + /* Should be able to match all existing symbols. */ + CHECK_MATCH (sym, symbol_name_match_type::FULL, false, + EXPECT (sym)); + + /* Should be able to match all existing symbols with + parameters. */ + std::string with_params = std::string (sym) + "(int)"; + CHECK_MATCH (with_params.c_str (), symbol_name_match_type::FULL, false, + EXPECT (sym)); + + /* Should be able to match all existing symbols with + parameters and qualifiers. */ + with_params = std::string (sym) + " ( int ) const"; + CHECK_MATCH (with_params.c_str (), symbol_name_match_type::FULL, false, + EXPECT (sym)); + + /* This should really find sym, but cp-name-parser.y doesn't + know about lvalue/rvalue qualifiers yet. */ + with_params = std::string (sym) + " ( int ) &&"; + CHECK_MATCH (with_params.c_str (), symbol_name_match_type::FULL, false, + {}); + } + + /* Check that the name matching algorithm for completion doesn't get + confused with Latin1 'ÿ' / 0xff. */ + { + static const char str[] = "\377"; + CHECK_MATCH (str, symbol_name_match_type::FULL, true, + EXPECT ("\377", "\377\377123")); + } + + /* Check that the increment-last-char in the matching algorithm for + completion doesn't match "t1_fund" when completing "t1_func". */ + { + static const char str[] = "t1_func"; + CHECK_MATCH (str, symbol_name_match_type::FULL, true, + EXPECT ("t1_func", "t1_func1")); + } + + /* Check that completion mode works at each prefix of the expected + symbol name. */ + { + static const char str[] = "function(int)"; + size_t len = strlen (str); + std::string lookup; + + for (size_t i = 1; i < len; i++) + { + lookup.assign (str, i); + CHECK_MATCH (lookup.c_str (), symbol_name_match_type::FULL, true, + EXPECT ("function")); + } + } + + /* While "w" is a prefix of both components, the match function + should still only be called once. */ + { + CHECK_MATCH ("w", symbol_name_match_type::FULL, true, + EXPECT ("w1::w2")); + CHECK_MATCH ("w", symbol_name_match_type::WILD, true, + EXPECT ("w1::w2")); + } + + /* Same, with a "complicated" symbol. */ + { + static const char str[] = Z_SYM_NAME; + size_t len = strlen (str); + std::string lookup; + + for (size_t i = 1; i < len; i++) + { + lookup.assign (str, i); + CHECK_MATCH (lookup.c_str (), symbol_name_match_type::FULL, true, + EXPECT (Z_SYM_NAME)); + } + } + + /* In FULL mode, an incomplete symbol doesn't match. */ + { + CHECK_MATCH ("std::zfunction(int", symbol_name_match_type::FULL, false, + {}); + } + + /* A complete symbol with parameters matches any overload, since the + index has no overload info. */ + { + CHECK_MATCH ("std::zfunction(int)", symbol_name_match_type::FULL, true, + EXPECT ("std::zfunction", "std::zfunction2")); + CHECK_MATCH ("zfunction(int)", symbol_name_match_type::WILD, true, + EXPECT ("std::zfunction", "std::zfunction2")); + CHECK_MATCH ("zfunc", symbol_name_match_type::WILD, true, + EXPECT ("std::zfunction", "std::zfunction2")); + } + + /* Check that whitespace is ignored appropriately. A symbol with a + template argument list. */ + { + static const char expected[] = "ns::foo<int>"; + CHECK_MATCH ("ns :: foo < int > ", symbol_name_match_type::FULL, false, + EXPECT (expected)); + CHECK_MATCH ("foo < int > ", symbol_name_match_type::WILD, false, + EXPECT (expected)); + } + + /* Check that whitespace is ignored appropriately. A symbol with a + template argument list that includes a pointer. */ + { + static const char expected[] = "ns::foo<char*>"; + /* Try both completion and non-completion modes. */ + static const bool completion_mode[2] = {false, true}; + for (size_t i = 0; i < 2; i++) + { + CHECK_MATCH ("ns :: foo < char * >", symbol_name_match_type::FULL, + completion_mode[i], EXPECT (expected)); + CHECK_MATCH ("foo < char * >", symbol_name_match_type::WILD, + completion_mode[i], EXPECT (expected)); + + CHECK_MATCH ("ns :: foo < char * > (int)", symbol_name_match_type::FULL, + completion_mode[i], EXPECT (expected)); + CHECK_MATCH ("foo < char * > (int)", symbol_name_match_type::WILD, + completion_mode[i], EXPECT (expected)); + } + } + + { + /* Check method qualifiers are ignored. */ + static const char expected[] = "ns::foo<char*>"; + CHECK_MATCH ("ns :: foo < char * > ( int ) const", + symbol_name_match_type::FULL, true, EXPECT (expected)); + CHECK_MATCH ("ns :: foo < char * > ( int ) &&", + symbol_name_match_type::FULL, true, EXPECT (expected)); + CHECK_MATCH ("foo < char * > ( int ) const", + symbol_name_match_type::WILD, true, EXPECT (expected)); + CHECK_MATCH ("foo < char * > ( int ) &&", + symbol_name_match_type::WILD, true, EXPECT (expected)); + } + + /* Test lookup names that don't match anything. */ + { + CHECK_MATCH ("bar2", symbol_name_match_type::WILD, false, + {}); + + CHECK_MATCH ("doesntexist", symbol_name_match_type::FULL, false, + {}); + } + + /* Some wild matching tests, exercising "(anonymous namespace)", + which should not be confused with a parameter list. */ + { + static const char *syms[] = { + "A::B::C", + "B::C", + "C", + "A :: B :: C ( int )", + "B :: C ( int )", + "C ( int )", + }; + + for (const char *s : syms) + { + CHECK_MATCH (s, symbol_name_match_type::WILD, false, + EXPECT ("(anonymous namespace)::A::B::C")); + } + } + + { + static const char expected[] = "ns2::tmpl<int>::foo2"; + CHECK_MATCH ("tmp", symbol_name_match_type::WILD, true, + EXPECT (expected)); + CHECK_MATCH ("tmpl<", symbol_name_match_type::WILD, true, + EXPECT (expected)); + } + + SELF_CHECK (!any_mismatch); + +#undef EXPECT +#undef CHECK_MATCH +} + +static void +run_test () +{ + test_mapped_index_find_name_component_bounds (); + test_dw2_expand_symtabs_matching_symbol (); +} + +}} // namespace selftests::dw2_expand_symtabs_matching + +#endif /* GDB_SELF_TEST */ + +/* If FILE_MATCHER is NULL or if PER_CU has + dwarf2_per_cu_quick_data::MARK set (see + dw_expand_symtabs_matching_file_matcher), expand the CU and call + EXPANSION_NOTIFY on it. */ + +static void +dw2_expand_symtabs_matching_one + (dwarf2_per_cu_data *per_cu, + dwarf2_per_objfile *per_objfile, + gdb::function_view<expand_symtabs_file_matcher_ftype> file_matcher, + gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify) +{ + if (file_matcher == NULL || per_cu->v.quick->mark) + { + bool symtab_was_null = !per_objfile->symtab_set_p (per_cu); + + compunit_symtab *symtab + = dw2_instantiate_symtab (per_cu, per_objfile, false); + gdb_assert (symtab != nullptr); + + if (expansion_notify != NULL && symtab_was_null) + expansion_notify (symtab); + } +} + +/* Helper for dw2_expand_matching symtabs. Called on each symbol + matched, to expand corresponding CUs that were marked. IDX is the + index of the symbol name that matched. */ + +static void +dw2_expand_marked_cus + (dwarf2_per_objfile *per_objfile, offset_type idx, + gdb::function_view<expand_symtabs_file_matcher_ftype> file_matcher, + gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify, + search_domain kind) +{ + offset_type *vec, vec_len, vec_idx; + bool global_seen = false; + mapped_index &index = *per_objfile->per_bfd->index_table; + + vec = (offset_type *) (index.constant_pool + + MAYBE_SWAP (index.symbol_table[idx].vec)); + vec_len = MAYBE_SWAP (vec[0]); + for (vec_idx = 0; vec_idx < vec_len; ++vec_idx) + { + offset_type cu_index_and_attrs = MAYBE_SWAP (vec[vec_idx + 1]); + /* This value is only valid for index versions >= 7. */ + int is_static = GDB_INDEX_SYMBOL_STATIC_VALUE (cu_index_and_attrs); + gdb_index_symbol_kind symbol_kind = + GDB_INDEX_SYMBOL_KIND_VALUE (cu_index_and_attrs); + int cu_index = GDB_INDEX_CU_VALUE (cu_index_and_attrs); + /* Only check the symbol attributes if they're present. + Indices prior to version 7 don't record them, + and indices >= 7 may elide them for certain symbols + (gold does this). */ + int attrs_valid = + (index.version >= 7 + && symbol_kind != GDB_INDEX_SYMBOL_KIND_NONE); + + /* Work around gold/15646. */ + if (attrs_valid + && !is_static + && symbol_kind == GDB_INDEX_SYMBOL_KIND_TYPE) + { + if (global_seen) + continue; + + global_seen = true; + } + + /* Only check the symbol's kind if it has one. */ + if (attrs_valid) + { + switch (kind) + { + case VARIABLES_DOMAIN: + if (symbol_kind != GDB_INDEX_SYMBOL_KIND_VARIABLE) + continue; + break; + case FUNCTIONS_DOMAIN: + if (symbol_kind != GDB_INDEX_SYMBOL_KIND_FUNCTION) + continue; + break; + case TYPES_DOMAIN: + if (symbol_kind != GDB_INDEX_SYMBOL_KIND_TYPE) + continue; + break; + case MODULES_DOMAIN: + if (symbol_kind != GDB_INDEX_SYMBOL_KIND_OTHER) + continue; + break; + default: + break; + } + } + + /* Don't crash on bad data. */ + if (cu_index >= (per_objfile->per_bfd->all_comp_units.size () + + per_objfile->per_bfd->all_type_units.size ())) + { + complaint (_(".gdb_index entry has bad CU index" + " [in module %s]"), objfile_name (per_objfile->objfile)); + continue; + } + + dwarf2_per_cu_data *per_cu = per_objfile->per_bfd->get_cutu (cu_index); + dw2_expand_symtabs_matching_one (per_cu, per_objfile, file_matcher, + expansion_notify); + } +} + +/* If FILE_MATCHER is non-NULL, set all the + dwarf2_per_cu_quick_data::MARK of the current DWARF2_PER_OBJFILE + that match FILE_MATCHER. */ + +static void +dw_expand_symtabs_matching_file_matcher + (dwarf2_per_objfile *per_objfile, + gdb::function_view<expand_symtabs_file_matcher_ftype> file_matcher) +{ + if (file_matcher == NULL) + return; + + htab_up visited_found (htab_create_alloc (10, htab_hash_pointer, + htab_eq_pointer, + NULL, xcalloc, xfree)); + htab_up visited_not_found (htab_create_alloc (10, htab_hash_pointer, + htab_eq_pointer, + NULL, xcalloc, xfree)); + + /* The rule is CUs specify all the files, including those used by + any TU, so there's no need to scan TUs here. */ + + for (dwarf2_per_cu_data *per_cu : per_objfile->per_bfd->all_comp_units) + { + QUIT; + + per_cu->v.quick->mark = 0; + + /* We only need to look at symtabs not already expanded. */ + if (per_objfile->symtab_set_p (per_cu)) + continue; + + quick_file_names *file_data = dw2_get_file_names (per_cu, per_objfile); + if (file_data == NULL) + continue; + + if (htab_find (visited_not_found.get (), file_data) != NULL) + continue; + else if (htab_find (visited_found.get (), file_data) != NULL) + { + per_cu->v.quick->mark = 1; + continue; + } + + for (int j = 0; j < file_data->num_file_names; ++j) + { + const char *this_real_name; + + if (file_matcher (file_data->file_names[j], false)) + { + per_cu->v.quick->mark = 1; + break; + } + + /* Before we invoke realpath, which can get expensive when many + files are involved, do a quick comparison of the basenames. */ + if (!basenames_may_differ + && !file_matcher (lbasename (file_data->file_names[j]), + true)) + continue; + + this_real_name = dw2_get_real_path (per_objfile, file_data, j); + if (file_matcher (this_real_name, false)) + { + per_cu->v.quick->mark = 1; + break; + } + } + + void **slot = htab_find_slot (per_cu->v.quick->mark + ? visited_found.get () + : visited_not_found.get (), + file_data, INSERT); + *slot = file_data; + } +} + +static void +dw2_expand_symtabs_matching + (struct objfile *objfile, + gdb::function_view<expand_symtabs_file_matcher_ftype> file_matcher, + const lookup_name_info *lookup_name, + gdb::function_view<expand_symtabs_symbol_matcher_ftype> symbol_matcher, + gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify, + enum search_domain kind) +{ + dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile); + + /* index_table is NULL if OBJF_READNOW. */ + if (!per_objfile->per_bfd->index_table) + return; + + dw_expand_symtabs_matching_file_matcher (per_objfile, file_matcher); + + if (symbol_matcher == NULL && lookup_name == NULL) + { + for (dwarf2_per_cu_data *per_cu : per_objfile->per_bfd->all_comp_units) + { + QUIT; + + dw2_expand_symtabs_matching_one (per_cu, per_objfile, + file_matcher, expansion_notify); + } + return; + } + + mapped_index &index = *per_objfile->per_bfd->index_table; + + dw2_expand_symtabs_matching_symbol (index, *lookup_name, + symbol_matcher, + kind, [&] (offset_type idx) + { + dw2_expand_marked_cus (per_objfile, idx, file_matcher, expansion_notify, + kind); + return true; + }, per_objfile); +} + +/* A helper for dw2_find_pc_sect_compunit_symtab which finds the most specific + symtab. */ + +static struct compunit_symtab * +recursively_find_pc_sect_compunit_symtab (struct compunit_symtab *cust, + CORE_ADDR pc) +{ + int i; + + if (COMPUNIT_BLOCKVECTOR (cust) != NULL + && blockvector_contains_pc (COMPUNIT_BLOCKVECTOR (cust), pc)) + return cust; + + if (cust->includes == NULL) + return NULL; + + for (i = 0; cust->includes[i]; ++i) + { + struct compunit_symtab *s = cust->includes[i]; + + s = recursively_find_pc_sect_compunit_symtab (s, pc); + if (s != NULL) + return s; + } + + return NULL; +} + +static struct compunit_symtab * +dw2_find_pc_sect_compunit_symtab (struct objfile *objfile, + struct bound_minimal_symbol msymbol, + CORE_ADDR pc, + struct obj_section *section, + int warn_if_readin) +{ + struct dwarf2_per_cu_data *data; + struct compunit_symtab *result; + + if (!objfile->partial_symtabs->psymtabs_addrmap) + return NULL; + + CORE_ADDR baseaddr = objfile->text_section_offset (); + data = (struct dwarf2_per_cu_data *) addrmap_find + (objfile->partial_symtabs->psymtabs_addrmap, pc - baseaddr); + if (!data) + return NULL; + + dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile); + if (warn_if_readin && per_objfile->symtab_set_p (data)) + warning (_("(Internal error: pc %s in read in CU, but not in symtab.)"), + paddress (objfile->arch (), pc)); + + result = recursively_find_pc_sect_compunit_symtab + (dw2_instantiate_symtab (data, per_objfile, false), pc); + + gdb_assert (result != NULL); + return result; +} + +static void +dw2_map_symbol_filenames (struct objfile *objfile, symbol_filename_ftype *fun, + void *data, int need_fullname) +{ + dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile); + + if (!per_objfile->per_bfd->filenames_cache) + { + per_objfile->per_bfd->filenames_cache.emplace (); + + htab_up visited (htab_create_alloc (10, + htab_hash_pointer, htab_eq_pointer, + NULL, xcalloc, xfree)); + + /* The rule is CUs specify all the files, including those used + by any TU, so there's no need to scan TUs here. We can + ignore file names coming from already-expanded CUs. */ + + for (dwarf2_per_cu_data *per_cu : per_objfile->per_bfd->all_comp_units) + { + if (per_objfile->symtab_set_p (per_cu)) + { + void **slot = htab_find_slot (visited.get (), + per_cu->v.quick->file_names, + INSERT); + + *slot = per_cu->v.quick->file_names; + } + } + + for (dwarf2_per_cu_data *per_cu : per_objfile->per_bfd->all_comp_units) + { + /* We only need to look at symtabs not already expanded. */ + if (per_objfile->symtab_set_p (per_cu)) + continue; + + quick_file_names *file_data + = dw2_get_file_names (per_cu, per_objfile); + if (file_data == NULL) + continue; + + void **slot = htab_find_slot (visited.get (), file_data, INSERT); + if (*slot) + { + /* Already visited. */ + continue; + } + *slot = file_data; + + for (int j = 0; j < file_data->num_file_names; ++j) + { + const char *filename = file_data->file_names[j]; + per_objfile->per_bfd->filenames_cache->seen (filename); + } + } + } + + per_objfile->per_bfd->filenames_cache->traverse ([&] (const char *filename) + { + gdb::unique_xmalloc_ptr<char> this_real_name; + + if (need_fullname) + this_real_name = gdb_realpath (filename); + (*fun) (filename, this_real_name.get (), data); + }); +} + +static int +dw2_has_symbols (struct objfile *objfile) +{ + return 1; +} + +const struct quick_symbol_functions dwarf2_gdb_index_functions = +{ + dw2_has_symbols, + dw2_find_last_source_symtab, + dw2_forget_cached_source_info, + dw2_map_symtabs_matching_filename, + dw2_lookup_symbol, + NULL, + dw2_print_stats, + dw2_dump, + dw2_expand_symtabs_for_function, + dw2_expand_all_symtabs, + dw2_expand_symtabs_with_fullname, + dw2_map_matching_symbols, + dw2_expand_symtabs_matching, + dw2_find_pc_sect_compunit_symtab, + NULL, + dw2_map_symbol_filenames +}; + +/* DWARF-5 debug_names reader. */ + +/* DWARF-5 augmentation string for GDB's DW_IDX_GNU_* extension. */ +static const gdb_byte dwarf5_augmentation[] = { 'G', 'D', 'B', 0 }; + +/* A helper function that reads the .debug_names section in SECTION + and fills in MAP. FILENAME is the name of the file containing the + section; it is used for error reporting. + + Returns true if all went well, false otherwise. */ + +static bool +read_debug_names_from_section (struct objfile *objfile, + const char *filename, + struct dwarf2_section_info *section, + mapped_debug_names &map) +{ + if (section->empty ()) + return false; + + /* Older elfutils strip versions could keep the section in the main + executable while splitting it for the separate debug info file. */ + if ((section->get_flags () & SEC_HAS_CONTENTS) == 0) + return false; + + section->read (objfile); + + map.dwarf5_byte_order = gdbarch_byte_order (objfile->arch ()); + + const gdb_byte *addr = section->buffer; + + bfd *const abfd = section->get_bfd_owner (); + + unsigned int bytes_read; + LONGEST length = read_initial_length (abfd, addr, &bytes_read); + addr += bytes_read; + + map.dwarf5_is_dwarf64 = bytes_read != 4; + map.offset_size = map.dwarf5_is_dwarf64 ? 8 : 4; + if (bytes_read + length != section->size) + { + /* There may be multiple per-CU indices. */ + warning (_("Section .debug_names in %s length %s does not match " + "section length %s, ignoring .debug_names."), + filename, plongest (bytes_read + length), + pulongest (section->size)); + return false; + } + + /* The version number. */ + uint16_t version = read_2_bytes (abfd, addr); + addr += 2; + if (version != 5) + { + warning (_("Section .debug_names in %s has unsupported version %d, " + "ignoring .debug_names."), + filename, version); + return false; + } + + /* Padding. */ + uint16_t padding = read_2_bytes (abfd, addr); + addr += 2; + if (padding != 0) + { + warning (_("Section .debug_names in %s has unsupported padding %d, " + "ignoring .debug_names."), + filename, padding); + return false; + } + + /* comp_unit_count - The number of CUs in the CU list. */ + map.cu_count = read_4_bytes (abfd, addr); + addr += 4; + + /* local_type_unit_count - The number of TUs in the local TU + list. */ + map.tu_count = read_4_bytes (abfd, addr); + addr += 4; + + /* foreign_type_unit_count - The number of TUs in the foreign TU + list. */ + uint32_t foreign_tu_count = read_4_bytes (abfd, addr); + addr += 4; + if (foreign_tu_count != 0) + { + warning (_("Section .debug_names in %s has unsupported %lu foreign TUs, " + "ignoring .debug_names."), + filename, static_cast<unsigned long> (foreign_tu_count)); + return false; + } + + /* bucket_count - The number of hash buckets in the hash lookup + table. */ + map.bucket_count = read_4_bytes (abfd, addr); + addr += 4; + + /* name_count - The number of unique names in the index. */ + map.name_count = read_4_bytes (abfd, addr); + addr += 4; + + /* abbrev_table_size - The size in bytes of the abbreviations + table. */ + uint32_t abbrev_table_size = read_4_bytes (abfd, addr); + addr += 4; + + /* augmentation_string_size - The size in bytes of the augmentation + string. This value is rounded up to a multiple of 4. */ + uint32_t augmentation_string_size = read_4_bytes (abfd, addr); + addr += 4; + map.augmentation_is_gdb = ((augmentation_string_size + == sizeof (dwarf5_augmentation)) + && memcmp (addr, dwarf5_augmentation, + sizeof (dwarf5_augmentation)) == 0); + augmentation_string_size += (-augmentation_string_size) & 3; + addr += augmentation_string_size; + + /* List of CUs */ + map.cu_table_reordered = addr; + addr += map.cu_count * map.offset_size; + + /* List of Local TUs */ + map.tu_table_reordered = addr; + addr += map.tu_count * map.offset_size; + + /* Hash Lookup Table */ + map.bucket_table_reordered = reinterpret_cast<const uint32_t *> (addr); + addr += map.bucket_count * 4; + map.hash_table_reordered = reinterpret_cast<const uint32_t *> (addr); + addr += map.name_count * 4; + + /* Name Table */ + map.name_table_string_offs_reordered = addr; + addr += map.name_count * map.offset_size; + map.name_table_entry_offs_reordered = addr; + addr += map.name_count * map.offset_size; + + const gdb_byte *abbrev_table_start = addr; + for (;;) + { + const ULONGEST index_num = read_unsigned_leb128 (abfd, addr, &bytes_read); + addr += bytes_read; + if (index_num == 0) + break; + + const auto insertpair + = map.abbrev_map.emplace (index_num, mapped_debug_names::index_val ()); + if (!insertpair.second) + { + warning (_("Section .debug_names in %s has duplicate index %s, " + "ignoring .debug_names."), + filename, pulongest (index_num)); + return false; + } + mapped_debug_names::index_val &indexval = insertpair.first->second; + indexval.dwarf_tag = read_unsigned_leb128 (abfd, addr, &bytes_read); + addr += bytes_read; + + for (;;) + { + mapped_debug_names::index_val::attr attr; + attr.dw_idx = read_unsigned_leb128 (abfd, addr, &bytes_read); + addr += bytes_read; + attr.form = read_unsigned_leb128 (abfd, addr, &bytes_read); + addr += bytes_read; + if (attr.form == DW_FORM_implicit_const) + { + attr.implicit_const = read_signed_leb128 (abfd, addr, + &bytes_read); + addr += bytes_read; + } + if (attr.dw_idx == 0 && attr.form == 0) + break; + indexval.attr_vec.push_back (std::move (attr)); + } + } + if (addr != abbrev_table_start + abbrev_table_size) + { + warning (_("Section .debug_names in %s has abbreviation_table " + "of size %s vs. written as %u, ignoring .debug_names."), + filename, plongest (addr - abbrev_table_start), + abbrev_table_size); + return false; + } + map.entry_pool = addr; + + return true; +} + +/* A helper for create_cus_from_debug_names that handles the MAP's CU + list. */ + +static void +create_cus_from_debug_names_list (dwarf2_per_bfd *per_bfd, + const mapped_debug_names &map, + dwarf2_section_info §ion, + bool is_dwz) +{ + if (!map.augmentation_is_gdb) + { + for (uint32_t i = 0; i < map.cu_count; ++i) + { + sect_offset sect_off + = (sect_offset) (extract_unsigned_integer + (map.cu_table_reordered + i * map.offset_size, + map.offset_size, + map.dwarf5_byte_order)); + /* We don't know the length of the CU, because the CU list in a + .debug_names index can be incomplete, so we can't use the start of + the next CU as end of this CU. We create the CUs here with length 0, + and in cutu_reader::cutu_reader we'll fill in the actual length. */ + dwarf2_per_cu_data *per_cu + = create_cu_from_index_list (per_bfd, §ion, is_dwz, sect_off, 0); + per_bfd->all_comp_units.push_back (per_cu); + } + } + + sect_offset sect_off_prev; + for (uint32_t i = 0; i <= map.cu_count; ++i) + { + sect_offset sect_off_next; + if (i < map.cu_count) + { + sect_off_next + = (sect_offset) (extract_unsigned_integer + (map.cu_table_reordered + i * map.offset_size, + map.offset_size, + map.dwarf5_byte_order)); + } + else + sect_off_next = (sect_offset) section.size; + if (i >= 1) + { + const ULONGEST length = sect_off_next - sect_off_prev; + dwarf2_per_cu_data *per_cu + = create_cu_from_index_list (per_bfd, §ion, is_dwz, + sect_off_prev, length); + per_bfd->all_comp_units.push_back (per_cu); + } + sect_off_prev = sect_off_next; + } +} + +/* Read the CU list from the mapped index, and use it to create all + the CU objects for this dwarf2_per_objfile. */ + +static void +create_cus_from_debug_names (dwarf2_per_bfd *per_bfd, + const mapped_debug_names &map, + const mapped_debug_names &dwz_map) +{ + gdb_assert (per_bfd->all_comp_units.empty ()); + per_bfd->all_comp_units.reserve (map.cu_count + dwz_map.cu_count); + + create_cus_from_debug_names_list (per_bfd, map, per_bfd->info, + false /* is_dwz */); + + if (dwz_map.cu_count == 0) + return; + + dwz_file *dwz = dwarf2_get_dwz_file (per_bfd); + create_cus_from_debug_names_list (per_bfd, dwz_map, dwz->info, + true /* is_dwz */); +} + +/* Read .debug_names. If everything went ok, initialize the "quick" + elements of all the CUs and return true. Otherwise, return false. */ + +static bool +dwarf2_read_debug_names (dwarf2_per_objfile *per_objfile) +{ + std::unique_ptr<mapped_debug_names> map (new mapped_debug_names); + mapped_debug_names dwz_map; + struct objfile *objfile = per_objfile->objfile; + dwarf2_per_bfd *per_bfd = per_objfile->per_bfd; + + if (!read_debug_names_from_section (objfile, objfile_name (objfile), + &per_objfile->per_bfd->debug_names, *map)) + return false; + + /* Don't use the index if it's empty. */ + if (map->name_count == 0) + return false; + + /* If there is a .dwz file, read it so we can get its CU list as + well. */ + dwz_file *dwz = dwarf2_get_dwz_file (per_bfd); + if (dwz != NULL) + { + if (!read_debug_names_from_section (objfile, + bfd_get_filename (dwz->dwz_bfd.get ()), + &dwz->debug_names, dwz_map)) + { + warning (_("could not read '.debug_names' section from %s; skipping"), + bfd_get_filename (dwz->dwz_bfd.get ())); + return false; + } + } + + create_cus_from_debug_names (per_bfd, *map, dwz_map); + + 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; + + dwarf2_section_info *section = &per_bfd->types[0]; + + create_signatured_type_table_from_debug_names + (per_objfile, *map, section, &per_bfd->abbrev); + } + + create_addrmap_from_aranges (per_objfile, &per_bfd->debug_aranges); + + per_bfd->debug_names_table = std::move (map); + per_bfd->using_index = 1; + per_bfd->quick_file_names_table = + create_quick_file_names_table (per_objfile->per_bfd->all_comp_units.size ()); + + /* Save partial symtabs in the per_bfd object, for the benefit of subsequent + objfiles using the same BFD. */ + gdb_assert (per_bfd->partial_symtabs == nullptr); + per_bfd->partial_symtabs = objfile->partial_symtabs; + + return true; +} + +/* Type used to manage iterating over all CUs looking for a symbol for + .debug_names. */ + +class dw2_debug_names_iterator +{ +public: + dw2_debug_names_iterator (const mapped_debug_names &map, + gdb::optional<block_enum> block_index, + domain_enum domain, + const char *name, dwarf2_per_objfile *per_objfile) + : m_map (map), m_block_index (block_index), m_domain (domain), + m_addr (find_vec_in_debug_names (map, name, per_objfile)), + m_per_objfile (per_objfile) + {} + + dw2_debug_names_iterator (const mapped_debug_names &map, + search_domain search, uint32_t namei, dwarf2_per_objfile *per_objfile) + : m_map (map), + m_search (search), + m_addr (find_vec_in_debug_names (map, namei, per_objfile)), + m_per_objfile (per_objfile) + {} + + dw2_debug_names_iterator (const mapped_debug_names &map, + block_enum block_index, domain_enum domain, + uint32_t namei, dwarf2_per_objfile *per_objfile) + : m_map (map), m_block_index (block_index), m_domain (domain), + m_addr (find_vec_in_debug_names (map, namei, per_objfile)), + m_per_objfile (per_objfile) + {} + + /* Return the next matching CU or NULL if there are no more. */ + dwarf2_per_cu_data *next (); + +private: + static const gdb_byte *find_vec_in_debug_names (const mapped_debug_names &map, + const char *name, + dwarf2_per_objfile *per_objfile); + static const gdb_byte *find_vec_in_debug_names (const mapped_debug_names &map, + uint32_t namei, + dwarf2_per_objfile *per_objfile); + + /* The internalized form of .debug_names. */ + const mapped_debug_names &m_map; + + /* If set, only look for symbols that match that block. Valid values are + GLOBAL_BLOCK and STATIC_BLOCK. */ + const gdb::optional<block_enum> m_block_index; + + /* The kind of symbol we're looking for. */ + const domain_enum m_domain = UNDEF_DOMAIN; + const search_domain m_search = ALL_DOMAIN; + + /* The list of CUs from the index entry of the symbol, or NULL if + not found. */ + const gdb_byte *m_addr; + + dwarf2_per_objfile *m_per_objfile; +}; + +const char * +mapped_debug_names::namei_to_name + (uint32_t namei, dwarf2_per_objfile *per_objfile) const +{ + const ULONGEST namei_string_offs + = extract_unsigned_integer ((name_table_string_offs_reordered + + namei * offset_size), + offset_size, + dwarf5_byte_order); + return read_indirect_string_at_offset (per_objfile, namei_string_offs); +} + +/* Find a slot in .debug_names for the object named NAME. If NAME is + found, return pointer to its pool data. If NAME cannot be found, + return NULL. */ + +const gdb_byte * +dw2_debug_names_iterator::find_vec_in_debug_names + (const mapped_debug_names &map, const char *name, + dwarf2_per_objfile *per_objfile) +{ + int (*cmp) (const char *, const char *); + + gdb::unique_xmalloc_ptr<char> without_params; + if (current_language->la_language == language_cplus + || current_language->la_language == language_fortran + || current_language->la_language == language_d) + { + /* NAME is already canonical. Drop any qualifiers as + .debug_names does not contain any. */ + + if (strchr (name, '(') != NULL) + { + without_params = cp_remove_params (name); + if (without_params != NULL) + name = without_params.get (); + } + } + + cmp = (case_sensitivity == case_sensitive_on ? strcmp : strcasecmp); + + const uint32_t full_hash = dwarf5_djb_hash (name); + uint32_t namei + = extract_unsigned_integer (reinterpret_cast<const gdb_byte *> + (map.bucket_table_reordered + + (full_hash % map.bucket_count)), 4, + map.dwarf5_byte_order); + if (namei == 0) + return NULL; + --namei; + if (namei >= map.name_count) + { + complaint (_("Wrong .debug_names with name index %u but name_count=%u " + "[in module %s]"), + namei, map.name_count, + objfile_name (per_objfile->objfile)); + return NULL; + } + + for (;;) + { + const uint32_t namei_full_hash + = extract_unsigned_integer (reinterpret_cast<const gdb_byte *> + (map.hash_table_reordered + namei), 4, + map.dwarf5_byte_order); + if (full_hash % map.bucket_count != namei_full_hash % map.bucket_count) + return NULL; + + if (full_hash == namei_full_hash) + { + const char *const namei_string = map.namei_to_name (namei, per_objfile); + +#if 0 /* An expensive sanity check. */ + if (namei_full_hash != dwarf5_djb_hash (namei_string)) + { + complaint (_("Wrong .debug_names hash for string at index %u " + "[in module %s]"), + namei, objfile_name (dwarf2_per_objfile->objfile)); + return NULL; + } +#endif + + if (cmp (namei_string, name) == 0) + { + const ULONGEST namei_entry_offs + = extract_unsigned_integer ((map.name_table_entry_offs_reordered + + namei * map.offset_size), + map.offset_size, map.dwarf5_byte_order); + return map.entry_pool + namei_entry_offs; + } + } + + ++namei; + if (namei >= map.name_count) + return NULL; + } +} + +const gdb_byte * +dw2_debug_names_iterator::find_vec_in_debug_names + (const mapped_debug_names &map, uint32_t namei, dwarf2_per_objfile *per_objfile) +{ + if (namei >= map.name_count) + { + complaint (_("Wrong .debug_names with name index %u but name_count=%u " + "[in module %s]"), + namei, map.name_count, + objfile_name (per_objfile->objfile)); + return NULL; + } + + const ULONGEST namei_entry_offs + = extract_unsigned_integer ((map.name_table_entry_offs_reordered + + namei * map.offset_size), + map.offset_size, map.dwarf5_byte_order); + return map.entry_pool + namei_entry_offs; +} + +/* See dw2_debug_names_iterator. */ + +dwarf2_per_cu_data * +dw2_debug_names_iterator::next () +{ + if (m_addr == NULL) + return NULL; + + dwarf2_per_bfd *per_bfd = m_per_objfile->per_bfd; + struct objfile *objfile = m_per_objfile->objfile; + bfd *const abfd = objfile->obfd; + + again: + + unsigned int bytes_read; + const ULONGEST abbrev = read_unsigned_leb128 (abfd, m_addr, &bytes_read); + m_addr += bytes_read; + if (abbrev == 0) + return NULL; + + const auto indexval_it = m_map.abbrev_map.find (abbrev); + if (indexval_it == m_map.abbrev_map.cend ()) + { + complaint (_("Wrong .debug_names undefined abbrev code %s " + "[in module %s]"), + pulongest (abbrev), objfile_name (objfile)); + return NULL; + } + const mapped_debug_names::index_val &indexval = indexval_it->second; + enum class symbol_linkage { + unknown, + static_, + extern_, + } symbol_linkage_ = symbol_linkage::unknown; + dwarf2_per_cu_data *per_cu = NULL; + for (const mapped_debug_names::index_val::attr &attr : indexval.attr_vec) + { + ULONGEST ull; + switch (attr.form) + { + case DW_FORM_implicit_const: + ull = attr.implicit_const; + break; + case DW_FORM_flag_present: + ull = 1; + break; + case DW_FORM_udata: + ull = read_unsigned_leb128 (abfd, m_addr, &bytes_read); + m_addr += bytes_read; + break; + case DW_FORM_ref4: + ull = read_4_bytes (abfd, m_addr); + m_addr += 4; + break; + case DW_FORM_ref8: + ull = read_8_bytes (abfd, m_addr); + m_addr += 8; + break; + case DW_FORM_ref_sig8: + ull = read_8_bytes (abfd, m_addr); + m_addr += 8; + break; + default: + complaint (_("Unsupported .debug_names form %s [in module %s]"), + dwarf_form_name (attr.form), + objfile_name (objfile)); + return NULL; + } + switch (attr.dw_idx) + { + case DW_IDX_compile_unit: + /* Don't crash on bad data. */ + if (ull >= m_per_objfile->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_cutu (ull); + break; + case DW_IDX_type_unit: + /* Don't crash on bad data. */ + if (ull >= per_bfd->all_type_units.size ()) + { + complaint (_(".debug_names entry has bad TU index %s" + " [in module %s]"), + pulongest (ull), + objfile_name (objfile)); + continue; + } + per_cu = &per_bfd->get_tu (ull)->per_cu; + break; + case DW_IDX_die_offset: + /* In a per-CU index (as opposed to a per-module index), index + entries without CU attribute implicitly refer to the single CU. */ + if (per_cu == NULL) + per_cu = per_bfd->get_cu (0); + break; + case DW_IDX_GNU_internal: + if (!m_map.augmentation_is_gdb) + break; + symbol_linkage_ = symbol_linkage::static_; + break; + case DW_IDX_GNU_external: + if (!m_map.augmentation_is_gdb) + break; + symbol_linkage_ = symbol_linkage::extern_; + break; + } + } + + /* Skip if already read in. */ + if (m_per_objfile->symtab_set_p (per_cu)) + goto again; + + /* Check static vs global. */ + if (symbol_linkage_ != symbol_linkage::unknown && m_block_index.has_value ()) + { + const bool want_static = *m_block_index == STATIC_BLOCK; + const bool symbol_is_static = + symbol_linkage_ == symbol_linkage::static_; + if (want_static != symbol_is_static) + goto again; + } + + /* Match dw2_symtab_iter_next, symbol_kind + and debug_names::psymbol_tag. */ + switch (m_domain) + { + case VAR_DOMAIN: + switch (indexval.dwarf_tag) + { + case DW_TAG_variable: + case DW_TAG_subprogram: + /* Some types are also in VAR_DOMAIN. */ + case DW_TAG_typedef: + case DW_TAG_structure_type: + break; + default: + goto again; + } + break; + case STRUCT_DOMAIN: + switch (indexval.dwarf_tag) + { + case DW_TAG_typedef: + case DW_TAG_structure_type: + break; + default: + goto again; + } + break; + case LABEL_DOMAIN: + switch (indexval.dwarf_tag) + { + case 0: + case DW_TAG_variable: + break; + default: + goto again; + } + break; + case MODULE_DOMAIN: + switch (indexval.dwarf_tag) + { + case DW_TAG_module: + break; + default: + goto again; + } + break; + default: + break; + } + + /* Match dw2_expand_symtabs_matching, symbol_kind and + debug_names::psymbol_tag. */ + switch (m_search) + { + case VARIABLES_DOMAIN: + switch (indexval.dwarf_tag) + { + case DW_TAG_variable: + break; + default: + goto again; + } + break; + case FUNCTIONS_DOMAIN: + switch (indexval.dwarf_tag) + { + case DW_TAG_subprogram: + break; + default: + goto again; + } + break; + case TYPES_DOMAIN: + switch (indexval.dwarf_tag) + { + case DW_TAG_typedef: + case DW_TAG_structure_type: + break; + default: + goto again; + } + break; + case MODULES_DOMAIN: + switch (indexval.dwarf_tag) + { + case DW_TAG_module: + break; + default: + goto again; + } + default: + break; + } + + return per_cu; +} + +static struct compunit_symtab * +dw2_debug_names_lookup_symbol (struct objfile *objfile, block_enum block_index, + const char *name, domain_enum domain) +{ + dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile); + + const auto &mapp = per_objfile->per_bfd->debug_names_table; + if (!mapp) + { + /* index is NULL if OBJF_READNOW. */ + return NULL; + } + const auto &map = *mapp; + + dw2_debug_names_iterator iter (map, block_index, domain, name, per_objfile); + + struct compunit_symtab *stab_best = NULL; + struct dwarf2_per_cu_data *per_cu; + while ((per_cu = iter.next ()) != NULL) + { + struct symbol *sym, *with_opaque = NULL; + compunit_symtab *stab + = dw2_instantiate_symtab (per_cu, per_objfile, false); + const struct blockvector *bv = COMPUNIT_BLOCKVECTOR (stab); + const struct block *block = BLOCKVECTOR_BLOCK (bv, block_index); + + sym = block_find_symbol (block, name, domain, + block_find_non_opaque_type_preferred, + &with_opaque); + + /* Some caution must be observed with overloaded functions and + methods, since the index will not contain any overload + information (but NAME might contain it). */ + + if (sym != NULL + && strcmp_iw (sym->search_name (), name) == 0) + return stab; + if (with_opaque != NULL + && strcmp_iw (with_opaque->search_name (), name) == 0) + stab_best = stab; + + /* Keep looking through other CUs. */ + } + + return stab_best; +} + +/* This dumps minimal information about .debug_names. It is called + via "mt print objfiles". The gdb.dwarf2/gdb-index.exp testcase + uses this to verify that .debug_names has been loaded. */ + +static void +dw2_debug_names_dump (struct objfile *objfile) +{ + dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile); + + gdb_assert (per_objfile->per_bfd->using_index); + printf_filtered (".debug_names:"); + if (per_objfile->per_bfd->debug_names_table) + printf_filtered (" exists\n"); + else + printf_filtered (" faked for \"readnow\"\n"); + printf_filtered ("\n"); +} + +static void +dw2_debug_names_expand_symtabs_for_function (struct objfile *objfile, + const char *func_name) +{ + dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile); + + /* per_objfile->per_bfd->debug_names_table is NULL if OBJF_READNOW. */ + if (per_objfile->per_bfd->debug_names_table) + { + const mapped_debug_names &map = *per_objfile->per_bfd->debug_names_table; + + dw2_debug_names_iterator iter (map, {}, VAR_DOMAIN, func_name, + per_objfile); + + struct dwarf2_per_cu_data *per_cu; + while ((per_cu = iter.next ()) != NULL) + dw2_instantiate_symtab (per_cu, per_objfile, false); + } +} + +static void +dw2_debug_names_map_matching_symbols + (struct objfile *objfile, + const lookup_name_info &name, domain_enum domain, + int global, + gdb::function_view<symbol_found_callback_ftype> callback, + symbol_compare_ftype *ordered_compare) +{ + dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile); + + /* debug_names_table is NULL if OBJF_READNOW. */ + if (!per_objfile->per_bfd->debug_names_table) + return; + + mapped_debug_names &map = *per_objfile->per_bfd->debug_names_table; + const block_enum block_kind = global ? GLOBAL_BLOCK : STATIC_BLOCK; + + const char *match_name = name.ada ().lookup_name ().c_str (); + auto matcher = [&] (const char *symname) + { + if (ordered_compare == nullptr) + return true; + return ordered_compare (symname, match_name) == 0; + }; + + dw2_expand_symtabs_matching_symbol (map, name, matcher, ALL_DOMAIN, + [&] (offset_type namei) + { + /* The name was matched, now expand corresponding CUs that were + marked. */ + dw2_debug_names_iterator iter (map, block_kind, domain, namei, + per_objfile); + + struct dwarf2_per_cu_data *per_cu; + while ((per_cu = iter.next ()) != NULL) + dw2_expand_symtabs_matching_one (per_cu, per_objfile, nullptr, + nullptr); + return true; + }, per_objfile); + + /* It's a shame we couldn't do this inside the + dw2_expand_symtabs_matching_symbol callback, but that skips CUs + that have already been expanded. Instead, this loop matches what + the psymtab code does. */ + for (dwarf2_per_cu_data *per_cu : per_objfile->per_bfd->all_comp_units) + { + compunit_symtab *symtab = per_objfile->get_symtab (per_cu); + if (symtab != nullptr) + { + const struct block *block + = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (symtab), block_kind); + if (!iterate_over_symbols_terminated (block, name, + domain, callback)) + break; + } + } +} + +static void +dw2_debug_names_expand_symtabs_matching + (struct objfile *objfile, + gdb::function_view<expand_symtabs_file_matcher_ftype> file_matcher, + const lookup_name_info *lookup_name, + gdb::function_view<expand_symtabs_symbol_matcher_ftype> symbol_matcher, + gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify, + enum search_domain kind) +{ + dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile); + + /* debug_names_table is NULL if OBJF_READNOW. */ + if (!per_objfile->per_bfd->debug_names_table) + return; + + dw_expand_symtabs_matching_file_matcher (per_objfile, file_matcher); + + if (symbol_matcher == NULL && lookup_name == NULL) + { + for (dwarf2_per_cu_data *per_cu : per_objfile->per_bfd->all_comp_units) + { + QUIT; + + dw2_expand_symtabs_matching_one (per_cu, per_objfile, file_matcher, + expansion_notify); + } + return; + } + + mapped_debug_names &map = *per_objfile->per_bfd->debug_names_table; + + dw2_expand_symtabs_matching_symbol (map, *lookup_name, + symbol_matcher, + kind, [&] (offset_type namei) + { + /* The name was matched, now expand corresponding CUs that were + marked. */ + dw2_debug_names_iterator iter (map, kind, namei, per_objfile); + + struct dwarf2_per_cu_data *per_cu; + while ((per_cu = iter.next ()) != NULL) + dw2_expand_symtabs_matching_one (per_cu, per_objfile, file_matcher, + expansion_notify); + return true; + }, per_objfile); +} + +const struct quick_symbol_functions dwarf2_debug_names_functions = +{ + dw2_has_symbols, + dw2_find_last_source_symtab, + dw2_forget_cached_source_info, + dw2_map_symtabs_matching_filename, + dw2_debug_names_lookup_symbol, + NULL, + dw2_print_stats, + dw2_debug_names_dump, + dw2_debug_names_expand_symtabs_for_function, + dw2_expand_all_symtabs, + dw2_expand_symtabs_with_fullname, + dw2_debug_names_map_matching_symbols, + dw2_debug_names_expand_symtabs_matching, + dw2_find_pc_sect_compunit_symtab, + NULL, + dw2_map_symbol_filenames +}; + +/* Get the content of the .gdb_index section of OBJ. SECTION_OWNER should point + to either a dwarf2_per_bfd or dwz_file object. */ + +template <typename T> +static gdb::array_view<const gdb_byte> +get_gdb_index_contents_from_section (objfile *obj, T *section_owner) +{ + dwarf2_section_info *section = §ion_owner->gdb_index; + + if (section->empty ()) + return {}; + + /* Older elfutils strip versions could keep the section in the main + executable while splitting it for the separate debug info file. */ + if ((section->get_flags () & SEC_HAS_CONTENTS) == 0) + return {}; + + section->read (obj); + + /* dwarf2_section_info::size is a bfd_size_type, while + gdb::array_view works with size_t. On 32-bit hosts, with + --enable-64-bit-bfd, bfd_size_type is a 64-bit type, while size_t + is 32-bit. So we need an explicit narrowing conversion here. + This is fine, because it's impossible to allocate or mmap an + array/buffer larger than what size_t can represent. */ + return gdb::make_array_view (section->buffer, section->size); +} + +/* Lookup the index cache for the contents of the index associated to + DWARF2_OBJ. */ + +static gdb::array_view<const gdb_byte> +get_gdb_index_contents_from_cache (objfile *obj, dwarf2_per_bfd *dwarf2_per_bfd) +{ + const bfd_build_id *build_id = build_id_bfd_get (obj->obfd); + if (build_id == nullptr) + return {}; + + return global_index_cache.lookup_gdb_index (build_id, + &dwarf2_per_bfd->index_cache_res); +} + +/* Same as the above, but for DWZ. */ + +static gdb::array_view<const gdb_byte> +get_gdb_index_contents_from_cache_dwz (objfile *obj, dwz_file *dwz) +{ + const bfd_build_id *build_id = build_id_bfd_get (dwz->dwz_bfd.get ()); + if (build_id == nullptr) + return {}; + + return global_index_cache.lookup_gdb_index (build_id, &dwz->index_cache_res); +} + +/* See symfile.h. */ + +bool +dwarf2_initialize_objfile (struct objfile *objfile, dw_index_kind *index_kind) +{ + dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile); + dwarf2_per_bfd *per_bfd = per_objfile->per_bfd; + + /* If we're about to read full symbols, don't bother with the + indices. In this case we also don't care if some other debug + format is making psymtabs, because they are all about to be + expanded anyway. */ + if ((objfile->flags & OBJF_READNOW)) + { + /* When using READNOW, the using_index flag (set below) indicates that + PER_BFD was already initialized, when we loaded some other objfile. */ + if (per_bfd->using_index) + { + *index_kind = dw_index_kind::GDB_INDEX; + per_objfile->resize_symtabs (); + return true; + } + + per_bfd->using_index = 1; + create_all_comp_units (per_objfile); + create_all_type_units (per_objfile); + per_bfd->quick_file_names_table + = create_quick_file_names_table (per_bfd->all_comp_units.size ()); + per_objfile->resize_symtabs (); + + for (int i = 0; i < (per_bfd->all_comp_units.size () + + per_bfd->all_type_units.size ()); ++i) + { + dwarf2_per_cu_data *per_cu = per_bfd->get_cutu (i); + + per_cu->v.quick = OBSTACK_ZALLOC (&per_bfd->obstack, + struct dwarf2_per_cu_quick_data); + } + + /* Return 1 so that gdb sees the "quick" functions. However, + these functions will be no-ops because we will have expanded + all symtabs. */ + *index_kind = dw_index_kind::GDB_INDEX; + return true; + } + + /* Was a debug names index already read when we processed an objfile sharing + PER_BFD? */ + if (per_bfd->debug_names_table != nullptr) + { + *index_kind = dw_index_kind::DEBUG_NAMES; + per_objfile->objfile->partial_symtabs = per_bfd->partial_symtabs; + per_objfile->resize_symtabs (); + return true; + } + + /* Was a GDB index already read when we processed an objfile sharing + PER_BFD? */ + if (per_bfd->index_table != nullptr) + { + *index_kind = dw_index_kind::GDB_INDEX; + per_objfile->objfile->partial_symtabs = per_bfd->partial_symtabs; + per_objfile->resize_symtabs (); + return true; + } + + /* There might already be partial symtabs built for this BFD. This happens + when loading the same binary twice with the index-cache enabled. If so, + don't try to read an index. The objfile / per_objfile initialization will + be completed in dwarf2_build_psymtabs, in the standard partial symtabs + code path. */ + if (per_bfd->partial_symtabs != nullptr) + return false; + + if (dwarf2_read_debug_names (per_objfile)) + { + *index_kind = dw_index_kind::DEBUG_NAMES; + per_objfile->resize_symtabs (); + return true; + } + + if (dwarf2_read_gdb_index (per_objfile, + get_gdb_index_contents_from_section<struct dwarf2_per_bfd>, + get_gdb_index_contents_from_section<dwz_file>)) + { + *index_kind = dw_index_kind::GDB_INDEX; + per_objfile->resize_symtabs (); + return true; + } + + /* ... otherwise, try to find the index in the index cache. */ + if (dwarf2_read_gdb_index (per_objfile, + get_gdb_index_contents_from_cache, + get_gdb_index_contents_from_cache_dwz)) + { + global_index_cache.hit (); + *index_kind = dw_index_kind::GDB_INDEX; + per_objfile->resize_symtabs (); + return true; + } + + global_index_cache.miss (); + return false; +} + + + +/* Build a partial symbol table. */ + +void +dwarf2_build_psymtabs (struct objfile *objfile) +{ + dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile); + dwarf2_per_bfd *per_bfd = per_objfile->per_bfd; + + if (per_bfd->partial_symtabs != nullptr) + { + /* Partial symbols were already read, so now we can simply + attach them. */ + objfile->partial_symtabs = per_bfd->partial_symtabs; + per_objfile->resize_symtabs (); + return; + } + + init_psymbol_list (objfile, 1024); + + try + { + /* This isn't really ideal: all the data we allocate on the + objfile's obstack is still uselessly kept around. However, + freeing it seems unsafe. */ + psymtab_discarder psymtabs (objfile); + dwarf2_build_psymtabs_hard (per_objfile); + psymtabs.keep (); + + per_objfile->resize_symtabs (); + + /* (maybe) store an index in the cache. */ + global_index_cache.store (per_objfile); + } + catch (const gdb_exception_error &except) + { + exception_print (gdb_stderr, except); + } + + /* Finish by setting the local reference to partial symtabs, so that + we don't try to read them again if reading another objfile with the same + BFD. If we can't in fact share, this won't make a difference anyway as + the dwarf2_per_bfd object won't be shared. */ + per_bfd->partial_symtabs = objfile->partial_symtabs; +} + +/* Find the base address of the compilation unit for range lists and + location lists. It will normally be specified by DW_AT_low_pc. + In DWARF-3 draft 4, the base address could be overridden by + DW_AT_entry_pc. It's been removed, but GCC still uses this for + compilation units with discontinuous ranges. */ + +static void +dwarf2_find_base_address (struct die_info *die, struct dwarf2_cu *cu) +{ + struct attribute *attr; + + cu->base_address.reset (); + + attr = dwarf2_attr (die, DW_AT_entry_pc, cu); + if (attr != nullptr) + cu->base_address = attr->value_as_address (); + else + { + attr = dwarf2_attr (die, DW_AT_low_pc, cu); + if (attr != nullptr) + cu->base_address = attr->value_as_address (); + } +} + +/* Helper function that returns the proper abbrev section for + THIS_CU. */ + +static struct dwarf2_section_info * +get_abbrev_section_for_cu (struct dwarf2_per_cu_data *this_cu) +{ + struct dwarf2_section_info *abbrev; + dwarf2_per_bfd *per_bfd = this_cu->per_bfd; + + if (this_cu->is_dwz) + abbrev = &dwarf2_get_dwz_file (per_bfd)->abbrev; + else + abbrev = &per_bfd->abbrev; + + return abbrev; +} + +/* Fetch the abbreviation table offset from a comp or type unit header. */ + +static sect_offset +read_abbrev_offset (dwarf2_per_objfile *per_objfile, + struct dwarf2_section_info *section, + sect_offset sect_off) +{ + bfd *abfd = section->get_bfd_owner (); + const gdb_byte *info_ptr; + unsigned int initial_length_size, offset_size; + uint16_t version; + + section->read (per_objfile->objfile); + info_ptr = section->buffer + to_underlying (sect_off); + read_initial_length (abfd, info_ptr, &initial_length_size); + offset_size = initial_length_size == 4 ? 4 : 8; + info_ptr += initial_length_size; + + version = read_2_bytes (abfd, info_ptr); + info_ptr += 2; + if (version >= 5) + { + /* Skip unit type and address size. */ + info_ptr += 2; + } + + return (sect_offset) read_offset (abfd, info_ptr, offset_size); +} + +/* A partial symtab that is used only for include files. */ +struct dwarf2_include_psymtab : public partial_symtab +{ + dwarf2_include_psymtab (const char *filename, struct objfile *objfile) + : partial_symtab (filename, objfile) + { + } + + void read_symtab (struct objfile *objfile) override + { + /* It's an include file, no symbols to read for it. + Everything is in the includer symtab. */ + + /* The expansion of a dwarf2_include_psymtab is just a trigger for + expansion of the includer psymtab. We use the dependencies[0] field to + model the includer. But if we go the regular route of calling + expand_psymtab here, and having expand_psymtab call expand_dependencies + to expand the includer, we'll only use expand_psymtab on the includer + (making it a non-toplevel psymtab), while if we expand the includer via + another path, we'll use read_symtab (making it a toplevel psymtab). + So, don't pretend a dwarf2_include_psymtab is an actual toplevel + psymtab, and trigger read_symtab on the includer here directly. */ + includer ()->read_symtab (objfile); + } + + void expand_psymtab (struct objfile *objfile) override + { + /* This is not called by read_symtab, and should not be called by any + expand_dependencies. */ + gdb_assert (false); + } + + bool readin_p (struct objfile *objfile) const override + { + return includer ()->readin_p (objfile); + } + + compunit_symtab *get_compunit_symtab (struct objfile *objfile) const override + { + return nullptr; + } + +private: + partial_symtab *includer () const + { + /* An include psymtab has exactly one dependency: the psymtab that + includes it. */ + gdb_assert (this->number_of_dependencies == 1); + return this->dependencies[0]; + } +}; + +/* Allocate a new partial symtab for file named NAME and mark this new + partial symtab as being an include of PST. */ + +static void +dwarf2_create_include_psymtab (const char *name, dwarf2_psymtab *pst, + struct objfile *objfile) +{ + dwarf2_include_psymtab *subpst = new dwarf2_include_psymtab (name, objfile); + + if (!IS_ABSOLUTE_PATH (subpst->filename)) + subpst->dirname = pst->dirname; + + subpst->dependencies = objfile->partial_symtabs->allocate_dependencies (1); + subpst->dependencies[0] = pst; + subpst->number_of_dependencies = 1; +} + +/* Read the Line Number Program data and extract the list of files + included by the source file represented by PST. Build an include + partial symtab for each of these included files. */ + +static void +dwarf2_build_include_psymtabs (struct dwarf2_cu *cu, + struct die_info *die, + dwarf2_psymtab *pst) +{ + line_header_up lh; + struct attribute *attr; + + attr = dwarf2_attr (die, DW_AT_stmt_list, cu); + if (attr != nullptr) + lh = dwarf_decode_line_header ((sect_offset) DW_UNSND (attr), cu); + if (lh == NULL) + return; /* No linetable, so no includes. */ + + /* NOTE: pst->dirname is DW_AT_comp_dir (if present). Also note + that we pass in the raw text_low here; that is ok because we're + only decoding the line table to make include partial symtabs, and + so the addresses aren't really used. */ + dwarf_decode_lines (lh.get (), pst->dirname, cu, pst, + pst->raw_text_low (), 1); +} + +static hashval_t +hash_signatured_type (const void *item) +{ + const struct signatured_type *sig_type + = (const struct signatured_type *) item; + + /* This drops the top 32 bits of the signature, but is ok for a hash. */ + return sig_type->signature; +} + +static int +eq_signatured_type (const void *item_lhs, const void *item_rhs) +{ + const struct signatured_type *lhs = (const struct signatured_type *) item_lhs; + const struct signatured_type *rhs = (const struct signatured_type *) item_rhs; + + return lhs->signature == rhs->signature; +} + +/* Allocate a hash table for signatured types. */ + +static htab_up +allocate_signatured_type_table () +{ + return htab_up (htab_create_alloc (41, + hash_signatured_type, + eq_signatured_type, + NULL, xcalloc, xfree)); +} + +/* A helper function to add a signatured type CU to a table. */ + +static int +add_signatured_type_cu_to_table (void **slot, void *datum) +{ + struct signatured_type *sigt = (struct signatured_type *) *slot; + std::vector<signatured_type *> *all_type_units + = (std::vector<signatured_type *> *) datum; + + all_type_units->push_back (sigt); + + return 1; +} + +/* A helper for create_debug_types_hash_table. Read types from SECTION + and fill them into TYPES_HTAB. It will process only type units, + therefore DW_UT_type. */ + +static void +create_debug_type_hash_table (dwarf2_per_objfile *per_objfile, + struct dwo_file *dwo_file, + dwarf2_section_info *section, htab_up &types_htab, + rcuh_kind section_kind) +{ + struct objfile *objfile = per_objfile->objfile; + struct dwarf2_section_info *abbrev_section; + bfd *abfd; + const gdb_byte *info_ptr, *end_ptr; + + abbrev_section = (dwo_file != NULL + ? &dwo_file->sections.abbrev + : &per_objfile->per_bfd->abbrev); + + if (dwarf_read_debug) + fprintf_unfiltered (gdb_stdlog, "Reading %s for %s:\n", + section->get_name (), + abbrev_section->get_file_name ()); + + section->read (objfile); + info_ptr = section->buffer; + + if (info_ptr == NULL) + return; + + /* We can't set abfd until now because the section may be empty or + not present, in which case the bfd is unknown. */ + abfd = section->get_bfd_owner (); + + /* We don't use cutu_reader here because we don't need to read + any dies: the signature is in the header. */ + + end_ptr = info_ptr + section->size; + while (info_ptr < end_ptr) + { + struct signatured_type *sig_type; + struct dwo_unit *dwo_tu; + void **slot; + const gdb_byte *ptr = info_ptr; + struct comp_unit_head header; + unsigned int length; + + sect_offset sect_off = (sect_offset) (ptr - section->buffer); + + /* Initialize it due to a false compiler warning. */ + header.signature = -1; + header.type_cu_offset_in_tu = (cu_offset) -1; + + /* We need to read the type's signature in order to build the hash + table, but we don't need anything else just yet. */ + + ptr = read_and_check_comp_unit_head (per_objfile, &header, section, + abbrev_section, ptr, section_kind); + + length = header.get_length (); + + /* Skip dummy type units. */ + if (ptr >= info_ptr + length + || peek_abbrev_code (abfd, ptr) == 0 + || (header.unit_type != DW_UT_type + && header.unit_type != DW_UT_split_type)) + { + info_ptr += length; + continue; + } + + if (types_htab == NULL) + { + if (dwo_file) + types_htab = allocate_dwo_unit_table (); + else + types_htab = allocate_signatured_type_table (); + } + + if (dwo_file) + { + sig_type = NULL; + dwo_tu = OBSTACK_ZALLOC (&per_objfile->per_bfd->obstack, dwo_unit); + dwo_tu->dwo_file = dwo_file; + dwo_tu->signature = header.signature; + dwo_tu->type_offset_in_tu = header.type_cu_offset_in_tu; + dwo_tu->section = section; + dwo_tu->sect_off = sect_off; + dwo_tu->length = length; + } + else + { + /* N.B.: type_offset is not usable if this type uses a DWO file. + The real type_offset is in the DWO file. */ + dwo_tu = NULL; + sig_type = per_objfile->per_bfd->allocate_signatured_type (); + sig_type->signature = header.signature; + sig_type->type_offset_in_tu = header.type_cu_offset_in_tu; + sig_type->per_cu.is_debug_types = 1; + sig_type->per_cu.section = section; + sig_type->per_cu.sect_off = sect_off; + sig_type->per_cu.length = length; + } + + slot = htab_find_slot (types_htab.get (), + dwo_file ? (void*) dwo_tu : (void *) sig_type, + INSERT); + gdb_assert (slot != NULL); + if (*slot != NULL) + { + sect_offset dup_sect_off; + + if (dwo_file) + { + const struct dwo_unit *dup_tu + = (const struct dwo_unit *) *slot; + + dup_sect_off = dup_tu->sect_off; + } + else + { + const struct signatured_type *dup_tu + = (const struct signatured_type *) *slot; + + dup_sect_off = dup_tu->per_cu.sect_off; + } + + complaint (_("debug type entry at offset %s is duplicate to" + " the entry at offset %s, signature %s"), + sect_offset_str (sect_off), sect_offset_str (dup_sect_off), + hex_string (header.signature)); + } + *slot = dwo_file ? (void *) dwo_tu : (void *) sig_type; + + if (dwarf_read_debug > 1) + fprintf_unfiltered (gdb_stdlog, " offset %s, signature %s\n", + sect_offset_str (sect_off), + hex_string (header.signature)); + + info_ptr += length; + } +} + +/* Create the hash table of all entries in the .debug_types + (or .debug_types.dwo) section(s). + If reading a DWO file, then DWO_FILE is a pointer to the DWO file object, + otherwise it is NULL. + + The result is a pointer to the hash table or NULL if there are no types. + + Note: This function processes DWO files only, not DWP files. */ + +static void +create_debug_types_hash_table (dwarf2_per_objfile *per_objfile, + struct dwo_file *dwo_file, + gdb::array_view<dwarf2_section_info> type_sections, + htab_up &types_htab) +{ + for (dwarf2_section_info §ion : type_sections) + create_debug_type_hash_table (per_objfile, dwo_file, §ion, types_htab, + rcuh_kind::TYPE); +} + +/* Create the hash table of all entries in the .debug_types section, + and initialize all_type_units. + The result is zero if there is an error (e.g. missing .debug_types section), + otherwise non-zero. */ + +static int +create_all_type_units (dwarf2_per_objfile *per_objfile) +{ + htab_up types_htab; + + create_debug_type_hash_table (per_objfile, NULL, &per_objfile->per_bfd->info, + types_htab, rcuh_kind::COMPILE); + create_debug_types_hash_table (per_objfile, NULL, per_objfile->per_bfd->types, + types_htab); + if (types_htab == NULL) + { + per_objfile->per_bfd->signatured_types = NULL; + return 0; + } + + per_objfile->per_bfd->signatured_types = std::move (types_htab); + + gdb_assert (per_objfile->per_bfd->all_type_units.empty ()); + per_objfile->per_bfd->all_type_units.reserve + (htab_elements (per_objfile->per_bfd->signatured_types.get ())); + + htab_traverse_noresize (per_objfile->per_bfd->signatured_types.get (), + add_signatured_type_cu_to_table, + &per_objfile->per_bfd->all_type_units); + + return 1; +} + +/* Add an entry for signature SIG to dwarf2_per_objfile->per_bfd->signatured_types. + If SLOT is non-NULL, it is the entry to use in the hash table. + Otherwise we find one. */ + +static struct signatured_type * +add_type_unit (dwarf2_per_objfile *per_objfile, ULONGEST sig, void **slot) +{ + if (per_objfile->per_bfd->all_type_units.size () + == per_objfile->per_bfd->all_type_units.capacity ()) + ++per_objfile->per_bfd->tu_stats.nr_all_type_units_reallocs; + + signatured_type *sig_type = per_objfile->per_bfd->allocate_signatured_type (); + + per_objfile->resize_symtabs (); + + per_objfile->per_bfd->all_type_units.push_back (sig_type); + sig_type->signature = sig; + sig_type->per_cu.is_debug_types = 1; + if (per_objfile->per_bfd->using_index) + { + sig_type->per_cu.v.quick = + OBSTACK_ZALLOC (&per_objfile->per_bfd->obstack, + struct dwarf2_per_cu_quick_data); + } + + if (slot == NULL) + { + slot = htab_find_slot (per_objfile->per_bfd->signatured_types.get (), + sig_type, INSERT); + } + gdb_assert (*slot == NULL); + *slot = sig_type; + /* The rest of sig_type must be filled in by the caller. */ + return sig_type; +} + +/* Subroutine of lookup_dwo_signatured_type and lookup_dwp_signatured_type. + Fill in SIG_ENTRY with DWO_ENTRY. */ + +static void +fill_in_sig_entry_from_dwo_entry (dwarf2_per_objfile *per_objfile, + struct signatured_type *sig_entry, + struct dwo_unit *dwo_entry) +{ + dwarf2_per_bfd *per_bfd = per_objfile->per_bfd; + + /* Make sure we're not clobbering something we don't expect to. */ + gdb_assert (! sig_entry->per_cu.queued); + gdb_assert (per_objfile->get_cu (&sig_entry->per_cu) == NULL); + if (per_bfd->using_index) + { + gdb_assert (sig_entry->per_cu.v.quick != NULL); + gdb_assert (!per_objfile->symtab_set_p (&sig_entry->per_cu)); + } + else + gdb_assert (sig_entry->per_cu.v.psymtab == NULL); + gdb_assert (sig_entry->signature == dwo_entry->signature); + gdb_assert (to_underlying (sig_entry->type_offset_in_section) == 0); + gdb_assert (sig_entry->type_unit_group == NULL); + gdb_assert (sig_entry->dwo_unit == NULL); + + sig_entry->per_cu.section = dwo_entry->section; + sig_entry->per_cu.sect_off = dwo_entry->sect_off; + sig_entry->per_cu.length = dwo_entry->length; + sig_entry->per_cu.reading_dwo_directly = 1; + sig_entry->per_cu.per_bfd = per_bfd; + sig_entry->type_offset_in_tu = dwo_entry->type_offset_in_tu; + sig_entry->dwo_unit = dwo_entry; +} + +/* Subroutine of lookup_signatured_type. + If we haven't read the TU yet, create the signatured_type data structure + for a TU to be read in directly from a DWO file, bypassing the stub. + This is the "Stay in DWO Optimization": When there is no DWP file and we're + using .gdb_index, then when reading a CU we want to stay in the DWO file + containing that CU. Otherwise we could end up reading several other DWO + files (due to comdat folding) to process the transitive closure of all the + mentioned TUs, and that can be slow. The current DWO file will have every + type signature that it needs. + We only do this for .gdb_index because in the psymtab case we already have + to read all the DWOs to build the type unit groups. */ + +static struct signatured_type * +lookup_dwo_signatured_type (struct dwarf2_cu *cu, ULONGEST sig) +{ + dwarf2_per_objfile *per_objfile = cu->per_objfile; + struct dwo_file *dwo_file; + struct dwo_unit find_dwo_entry, *dwo_entry; + struct signatured_type find_sig_entry, *sig_entry; + void **slot; + + gdb_assert (cu->dwo_unit && per_objfile->per_bfd->using_index); + + /* If TU skeletons have been removed then we may not have read in any + TUs yet. */ + if (per_objfile->per_bfd->signatured_types == NULL) + per_objfile->per_bfd->signatured_types = allocate_signatured_type_table (); + + /* We only ever need to read in one copy of a signatured type. + Use the global signatured_types array to do our own comdat-folding + of types. If this is the first time we're reading this TU, and + the TU has an entry in .gdb_index, replace the recorded data from + .gdb_index with this TU. */ + + find_sig_entry.signature = sig; + slot = htab_find_slot (per_objfile->per_bfd->signatured_types.get (), + &find_sig_entry, INSERT); + sig_entry = (struct signatured_type *) *slot; + + /* We can get here with the TU already read, *or* in the process of being + read. Don't reassign the global entry to point to this DWO if that's + the case. Also note that if the TU is already being read, it may not + have come from a DWO, the program may be a mix of Fission-compiled + code and non-Fission-compiled code. */ + + /* Have we already tried to read this TU? + Note: sig_entry can be NULL if the skeleton TU was removed (thus it + needn't exist in the global table yet). */ + if (sig_entry != NULL && sig_entry->per_cu.tu_read) + return sig_entry; + + /* Note: cu->dwo_unit is the dwo_unit that references this TU, not the + dwo_unit of the TU itself. */ + dwo_file = cu->dwo_unit->dwo_file; + + /* Ok, this is the first time we're reading this TU. */ + if (dwo_file->tus == NULL) + return NULL; + find_dwo_entry.signature = sig; + dwo_entry = (struct dwo_unit *) htab_find (dwo_file->tus.get (), + &find_dwo_entry); + if (dwo_entry == NULL) + return NULL; + + /* If the global table doesn't have an entry for this TU, add one. */ + if (sig_entry == NULL) + sig_entry = add_type_unit (per_objfile, sig, slot); + + fill_in_sig_entry_from_dwo_entry (per_objfile, sig_entry, dwo_entry); + sig_entry->per_cu.tu_read = 1; + return sig_entry; +} + +/* Subroutine of lookup_signatured_type. + Look up the type for signature SIG, and if we can't find SIG in .gdb_index + then try the DWP file. If the TU stub (skeleton) has been removed then + it won't be in .gdb_index. */ + +static struct signatured_type * +lookup_dwp_signatured_type (struct dwarf2_cu *cu, ULONGEST sig) +{ + dwarf2_per_objfile *per_objfile = cu->per_objfile; + struct dwp_file *dwp_file = get_dwp_file (per_objfile); + struct dwo_unit *dwo_entry; + struct signatured_type find_sig_entry, *sig_entry; + void **slot; + + gdb_assert (cu->dwo_unit && per_objfile->per_bfd->using_index); + gdb_assert (dwp_file != NULL); + + /* If TU skeletons have been removed then we may not have read in any + TUs yet. */ + if (per_objfile->per_bfd->signatured_types == NULL) + per_objfile->per_bfd->signatured_types = allocate_signatured_type_table (); + + find_sig_entry.signature = sig; + slot = htab_find_slot (per_objfile->per_bfd->signatured_types.get (), + &find_sig_entry, INSERT); + sig_entry = (struct signatured_type *) *slot; + + /* Have we already tried to read this TU? + Note: sig_entry can be NULL if the skeleton TU was removed (thus it + needn't exist in the global table yet). */ + if (sig_entry != NULL) + return sig_entry; + + if (dwp_file->tus == NULL) + return NULL; + dwo_entry = lookup_dwo_unit_in_dwp (per_objfile, dwp_file, NULL, sig, + 1 /* is_debug_types */); + if (dwo_entry == NULL) + return NULL; + + sig_entry = add_type_unit (per_objfile, sig, slot); + fill_in_sig_entry_from_dwo_entry (per_objfile, sig_entry, dwo_entry); + + return sig_entry; +} + +/* Lookup a signature based type for DW_FORM_ref_sig8. + Returns NULL if signature SIG is not present in the table. + It is up to the caller to complain about this. */ + +static struct signatured_type * +lookup_signatured_type (struct dwarf2_cu *cu, ULONGEST sig) +{ + dwarf2_per_objfile *per_objfile = cu->per_objfile; + + if (cu->dwo_unit && per_objfile->per_bfd->using_index) + { + /* We're in a DWO/DWP file, and we're using .gdb_index. + These cases require special processing. */ + if (get_dwp_file (per_objfile) == NULL) + return lookup_dwo_signatured_type (cu, sig); + else + return lookup_dwp_signatured_type (cu, sig); + } + else + { + struct signatured_type find_entry, *entry; + + if (per_objfile->per_bfd->signatured_types == NULL) + return NULL; + find_entry.signature = sig; + entry = ((struct signatured_type *) + htab_find (per_objfile->per_bfd->signatured_types.get (), + &find_entry)); + return entry; + } +} + +/* Low level DIE reading support. */ + +/* Initialize a die_reader_specs struct from a dwarf2_cu struct. */ + +static void +init_cu_die_reader (struct die_reader_specs *reader, + struct dwarf2_cu *cu, + struct dwarf2_section_info *section, + struct dwo_file *dwo_file, + struct abbrev_table *abbrev_table) +{ + gdb_assert (section->readin && section->buffer != NULL); + reader->abfd = section->get_bfd_owner (); + reader->cu = cu; + reader->dwo_file = dwo_file; + reader->die_section = section; + reader->buffer = section->buffer; + reader->buffer_end = section->buffer + section->size; + reader->abbrev_table = abbrev_table; +} + +/* Subroutine of cutu_reader to simplify it. + Read in the rest of a CU/TU top level DIE from DWO_UNIT. + There's just a lot of work to do, and cutu_reader is big enough + already. + + STUB_COMP_UNIT_DIE is for the stub DIE, we copy over certain attributes + from it to the DIE in the DWO. If NULL we are skipping the stub. + STUB_COMP_DIR is similar to STUB_COMP_UNIT_DIE: When reading a TU directly + from the DWO file, bypassing the stub, it contains the DW_AT_comp_dir + attribute of the referencing CU. At most one of STUB_COMP_UNIT_DIE and + STUB_COMP_DIR may be non-NULL. + *RESULT_READER,*RESULT_INFO_PTR,*RESULT_COMP_UNIT_DIE + are filled in with the info of the DIE from the DWO file. + *RESULT_DWO_ABBREV_TABLE will be filled in with the abbrev table allocated + from the dwo. Since *RESULT_READER references this abbrev table, it must be + kept around for at least as long as *RESULT_READER. + + The result is non-zero if a valid (non-dummy) DIE was found. */ + +static int +read_cutu_die_from_dwo (dwarf2_cu *cu, + struct dwo_unit *dwo_unit, + struct die_info *stub_comp_unit_die, + const char *stub_comp_dir, + struct die_reader_specs *result_reader, + const gdb_byte **result_info_ptr, + struct die_info **result_comp_unit_die, + abbrev_table_up *result_dwo_abbrev_table) +{ + dwarf2_per_objfile *per_objfile = cu->per_objfile; + dwarf2_per_cu_data *per_cu = cu->per_cu; + struct objfile *objfile = per_objfile->objfile; + bfd *abfd; + const gdb_byte *begin_info_ptr, *info_ptr; + struct attribute *comp_dir, *stmt_list, *low_pc, *high_pc, *ranges; + int i,num_extra_attrs; + struct dwarf2_section_info *dwo_abbrev_section; + struct die_info *comp_unit_die; + + /* At most one of these may be provided. */ + gdb_assert ((stub_comp_unit_die != NULL) + (stub_comp_dir != NULL) <= 1); + + /* These attributes aren't processed until later: + DW_AT_stmt_list, DW_AT_low_pc, DW_AT_high_pc, DW_AT_ranges. + DW_AT_comp_dir is used now, to find the DWO file, but it is also + referenced later. However, these attributes are found in the stub + which we won't have later. In order to not impose this complication + on the rest of the code, we read them here and copy them to the + DWO CU/TU die. */ + + stmt_list = NULL; + low_pc = NULL; + high_pc = NULL; + ranges = NULL; + comp_dir = NULL; + + if (stub_comp_unit_die != NULL) + { + /* For TUs in DWO files, the DW_AT_stmt_list attribute lives in the + DWO file. */ + if (!per_cu->is_debug_types) + stmt_list = dwarf2_attr (stub_comp_unit_die, DW_AT_stmt_list, cu); + low_pc = dwarf2_attr (stub_comp_unit_die, DW_AT_low_pc, cu); + high_pc = dwarf2_attr (stub_comp_unit_die, DW_AT_high_pc, cu); + ranges = dwarf2_attr (stub_comp_unit_die, DW_AT_ranges, cu); + comp_dir = dwarf2_attr (stub_comp_unit_die, DW_AT_comp_dir, cu); + + cu->addr_base = stub_comp_unit_die->addr_base (); + + /* There should be a DW_AT_rnglists_base (DW_AT_GNU_ranges_base) attribute + here (if needed). We need the value before we can process + DW_AT_ranges. */ + cu->ranges_base = stub_comp_unit_die->ranges_base (); + } + else if (stub_comp_dir != NULL) + { + /* Reconstruct the comp_dir attribute to simplify the code below. */ + comp_dir = XOBNEW (&cu->comp_unit_obstack, struct attribute); + comp_dir->name = DW_AT_comp_dir; + comp_dir->form = DW_FORM_string; + DW_STRING_IS_CANONICAL (comp_dir) = 0; + DW_STRING (comp_dir) = stub_comp_dir; + } + + /* Set up for reading the DWO CU/TU. */ + cu->dwo_unit = dwo_unit; + dwarf2_section_info *section = dwo_unit->section; + section->read (objfile); + abfd = section->get_bfd_owner (); + begin_info_ptr = info_ptr = (section->buffer + + to_underlying (dwo_unit->sect_off)); + dwo_abbrev_section = &dwo_unit->dwo_file->sections.abbrev; + + if (per_cu->is_debug_types) + { + signatured_type *sig_type = (struct signatured_type *) per_cu; + + info_ptr = read_and_check_comp_unit_head (per_objfile, &cu->header, + section, dwo_abbrev_section, + info_ptr, rcuh_kind::TYPE); + /* This is not an assert because it can be caused by bad debug info. */ + if (sig_type->signature != cu->header.signature) + { + error (_("Dwarf Error: signature mismatch %s vs %s while reading" + " TU at offset %s [in module %s]"), + hex_string (sig_type->signature), + hex_string (cu->header.signature), + sect_offset_str (dwo_unit->sect_off), + bfd_get_filename (abfd)); + } + gdb_assert (dwo_unit->sect_off == cu->header.sect_off); + /* For DWOs coming from DWP files, we don't know the CU length + nor the type's offset in the TU until now. */ + dwo_unit->length = cu->header.get_length (); + dwo_unit->type_offset_in_tu = cu->header.type_cu_offset_in_tu; + + /* Establish the type offset that can be used to lookup the type. + For DWO files, we don't know it until now. */ + sig_type->type_offset_in_section + = dwo_unit->sect_off + to_underlying (dwo_unit->type_offset_in_tu); + } + else + { + info_ptr = read_and_check_comp_unit_head (per_objfile, &cu->header, + section, dwo_abbrev_section, + info_ptr, rcuh_kind::COMPILE); + gdb_assert (dwo_unit->sect_off == cu->header.sect_off); + /* For DWOs coming from DWP files, we don't know the CU length + until now. */ + dwo_unit->length = cu->header.get_length (); + } + + *result_dwo_abbrev_table + = abbrev_table::read (objfile, dwo_abbrev_section, + cu->header.abbrev_sect_off); + init_cu_die_reader (result_reader, cu, section, dwo_unit->dwo_file, + result_dwo_abbrev_table->get ()); + + /* Read in the die, but leave space to copy over the attributes + from the stub. This has the benefit of simplifying the rest of + the code - all the work to maintain the illusion of a single + DW_TAG_{compile,type}_unit DIE is done here. */ + num_extra_attrs = ((stmt_list != NULL) + + (low_pc != NULL) + + (high_pc != NULL) + + (ranges != NULL) + + (comp_dir != NULL)); + info_ptr = read_full_die_1 (result_reader, result_comp_unit_die, info_ptr, + num_extra_attrs); + + /* Copy over the attributes from the stub to the DIE we just read in. */ + comp_unit_die = *result_comp_unit_die; + i = comp_unit_die->num_attrs; + if (stmt_list != NULL) + comp_unit_die->attrs[i++] = *stmt_list; + if (low_pc != NULL) + comp_unit_die->attrs[i++] = *low_pc; + if (high_pc != NULL) + comp_unit_die->attrs[i++] = *high_pc; + if (ranges != NULL) + comp_unit_die->attrs[i++] = *ranges; + if (comp_dir != NULL) + comp_unit_die->attrs[i++] = *comp_dir; + comp_unit_die->num_attrs += num_extra_attrs; + + if (dwarf_die_debug) + { + fprintf_unfiltered (gdb_stdlog, + "Read die from %s@0x%x of %s:\n", + section->get_name (), + (unsigned) (begin_info_ptr - section->buffer), + bfd_get_filename (abfd)); + dump_die (comp_unit_die, dwarf_die_debug); + } + + /* Skip dummy compilation units. */ + if (info_ptr >= begin_info_ptr + dwo_unit->length + || peek_abbrev_code (abfd, info_ptr) == 0) + return 0; + + *result_info_ptr = info_ptr; + return 1; +} + +/* Return the signature of the compile unit, if found. In DWARF 4 and before, + the signature is in the DW_AT_GNU_dwo_id attribute. In DWARF 5 and later, the + signature is part of the header. */ +static gdb::optional<ULONGEST> +lookup_dwo_id (struct dwarf2_cu *cu, struct die_info* comp_unit_die) +{ + if (cu->header.version >= 5) + return cu->header.signature; + struct attribute *attr; + attr = dwarf2_attr (comp_unit_die, DW_AT_GNU_dwo_id, cu); + if (attr == nullptr) + return gdb::optional<ULONGEST> (); + return DW_UNSND (attr); +} + +/* Subroutine of cutu_reader to simplify it. + Look up the DWO unit specified by COMP_UNIT_DIE of THIS_CU. + Returns NULL if the specified DWO unit cannot be found. */ + +static struct dwo_unit * +lookup_dwo_unit (dwarf2_cu *cu, die_info *comp_unit_die, const char *dwo_name) +{ + dwarf2_per_cu_data *per_cu = cu->per_cu; + struct dwo_unit *dwo_unit; + const char *comp_dir; + + gdb_assert (cu != NULL); + + /* Yeah, we look dwo_name up again, but it simplifies the code. */ + dwo_name = dwarf2_dwo_name (comp_unit_die, cu); + comp_dir = dwarf2_string_attr (comp_unit_die, DW_AT_comp_dir, cu); + + if (per_cu->is_debug_types) + dwo_unit = lookup_dwo_type_unit (cu, dwo_name, comp_dir); + else + { + gdb::optional<ULONGEST> signature = lookup_dwo_id (cu, comp_unit_die); + + if (!signature.has_value ()) + error (_("Dwarf Error: missing dwo_id for dwo_name %s" + " [in module %s]"), + dwo_name, bfd_get_filename (per_cu->per_bfd->obfd)); + + dwo_unit = lookup_dwo_comp_unit (cu, dwo_name, comp_dir, *signature); + } + + return dwo_unit; +} + +/* Subroutine of cutu_reader to simplify it. + See it for a description of the parameters. + Read a TU directly from a DWO file, bypassing the stub. */ + +void +cutu_reader::init_tu_and_read_dwo_dies (dwarf2_per_cu_data *this_cu, + dwarf2_per_objfile *per_objfile, + dwarf2_cu *existing_cu) +{ + struct signatured_type *sig_type; + + /* Verify we can do the following downcast, and that we have the + data we need. */ + gdb_assert (this_cu->is_debug_types && this_cu->reading_dwo_directly); + sig_type = (struct signatured_type *) this_cu; + gdb_assert (sig_type->dwo_unit != NULL); + + dwarf2_cu *cu; + + if (existing_cu != nullptr) + { + cu = existing_cu; + gdb_assert (cu->dwo_unit == sig_type->dwo_unit); + /* There's no need to do the rereading_dwo_cu handling that + cutu_reader does since we don't read the stub. */ + } + else + { + /* If an existing_cu is provided, a dwarf2_cu must not exist for this_cu + in per_objfile yet. */ + gdb_assert (per_objfile->get_cu (this_cu) == nullptr); + m_new_cu.reset (new dwarf2_cu (this_cu, per_objfile)); + cu = m_new_cu.get (); + } + + /* A future optimization, if needed, would be to use an existing + abbrev table. When reading DWOs with skeletonless TUs, all the TUs + could share abbrev tables. */ + + if (read_cutu_die_from_dwo (cu, sig_type->dwo_unit, + NULL /* stub_comp_unit_die */, + sig_type->dwo_unit->dwo_file->comp_dir, + this, &info_ptr, + &comp_unit_die, + &m_dwo_abbrev_table) == 0) + { + /* Dummy die. */ + dummy_p = true; + } +} + +/* Initialize a CU (or TU) and read its DIEs. + If the CU defers to a DWO file, read the DWO file as well. + + ABBREV_TABLE, if non-NULL, is the abbreviation table to use. + Otherwise the table specified in the comp unit header is read in and used. + This is an optimization for when we already have the abbrev table. + + If EXISTING_CU is non-NULL, then use it. Otherwise, a new CU is + allocated. */ + +cutu_reader::cutu_reader (dwarf2_per_cu_data *this_cu, + dwarf2_per_objfile *per_objfile, + struct abbrev_table *abbrev_table, + dwarf2_cu *existing_cu, + bool skip_partial) + : die_reader_specs {}, + m_this_cu (this_cu) +{ + struct objfile *objfile = per_objfile->objfile; + struct dwarf2_section_info *section = this_cu->section; + bfd *abfd = section->get_bfd_owner (); + const gdb_byte *begin_info_ptr; + struct signatured_type *sig_type = NULL; + struct dwarf2_section_info *abbrev_section; + /* Non-zero if CU currently points to a DWO file and we need to + reread it. When this happens we need to reread the skeleton die + before we can reread the DWO file (this only applies to CUs, not TUs). */ + int rereading_dwo_cu = 0; + + if (dwarf_die_debug) + fprintf_unfiltered (gdb_stdlog, "Reading %s unit at offset %s\n", + this_cu->is_debug_types ? "type" : "comp", + sect_offset_str (this_cu->sect_off)); + + /* If we're reading a TU directly from a DWO file, including a virtual DWO + file (instead of going through the stub), short-circuit all of this. */ + if (this_cu->reading_dwo_directly) + { + /* Narrow down the scope of possibilities to have to understand. */ + gdb_assert (this_cu->is_debug_types); + gdb_assert (abbrev_table == NULL); + init_tu_and_read_dwo_dies (this_cu, per_objfile, existing_cu); + return; + } + + /* This is cheap if the section is already read in. */ + section->read (objfile); + + begin_info_ptr = info_ptr = section->buffer + to_underlying (this_cu->sect_off); + + abbrev_section = get_abbrev_section_for_cu (this_cu); + + dwarf2_cu *cu; + + if (existing_cu != nullptr) + { + cu = existing_cu; + /* If this CU is from a DWO file we need to start over, we need to + refetch the attributes from the skeleton CU. + This could be optimized by retrieving those attributes from when we + were here the first time: the previous comp_unit_die was stored in + comp_unit_obstack. But there's no data yet that we need this + optimization. */ + if (cu->dwo_unit != NULL) + rereading_dwo_cu = 1; + } + else + { + /* If an existing_cu is provided, a dwarf2_cu must not exist for this_cu + in per_objfile yet. */ + gdb_assert (per_objfile->get_cu (this_cu) == nullptr); + m_new_cu.reset (new dwarf2_cu (this_cu, per_objfile)); + cu = m_new_cu.get (); + } + + /* Get the header. */ + if (to_underlying (cu->header.first_die_cu_offset) != 0 && !rereading_dwo_cu) + { + /* We already have the header, there's no need to read it in again. */ + info_ptr += to_underlying (cu->header.first_die_cu_offset); + } + else + { + if (this_cu->is_debug_types) + { + info_ptr = read_and_check_comp_unit_head (per_objfile, &cu->header, + section, abbrev_section, + info_ptr, rcuh_kind::TYPE); + + /* Since per_cu is the first member of struct signatured_type, + we can go from a pointer to one to a pointer to the other. */ + sig_type = (struct signatured_type *) this_cu; + gdb_assert (sig_type->signature == cu->header.signature); + gdb_assert (sig_type->type_offset_in_tu + == cu->header.type_cu_offset_in_tu); + gdb_assert (this_cu->sect_off == cu->header.sect_off); + + /* LENGTH has not been set yet for type units if we're + using .gdb_index. */ + this_cu->length = cu->header.get_length (); + + /* Establish the type offset that can be used to lookup the type. */ + sig_type->type_offset_in_section = + this_cu->sect_off + to_underlying (sig_type->type_offset_in_tu); + + this_cu->dwarf_version = cu->header.version; + } + else + { + info_ptr = read_and_check_comp_unit_head (per_objfile, &cu->header, + section, abbrev_section, + info_ptr, + rcuh_kind::COMPILE); + + gdb_assert (this_cu->sect_off == cu->header.sect_off); + if (this_cu->length == 0) + this_cu->length = cu->header.get_length (); + else + gdb_assert (this_cu->length == cu->header.get_length ()); + this_cu->dwarf_version = cu->header.version; + } + } + + /* Skip dummy compilation units. */ + if (info_ptr >= begin_info_ptr + this_cu->length + || peek_abbrev_code (abfd, info_ptr) == 0) + { + dummy_p = true; + return; + } + + /* If we don't have them yet, read the abbrevs for this compilation unit. + And if we need to read them now, make sure they're freed when we're + done. */ + if (abbrev_table != NULL) + gdb_assert (cu->header.abbrev_sect_off == abbrev_table->sect_off); + else + { + m_abbrev_table_holder + = abbrev_table::read (objfile, abbrev_section, + cu->header.abbrev_sect_off); + abbrev_table = m_abbrev_table_holder.get (); + } + + /* Read the top level CU/TU die. */ + init_cu_die_reader (this, cu, section, NULL, abbrev_table); + info_ptr = read_full_die (this, &comp_unit_die, info_ptr); + + if (skip_partial && comp_unit_die->tag == DW_TAG_partial_unit) + { + dummy_p = true; + return; + } + + /* If we are in a DWO stub, process it and then read in the "real" CU/TU + from the DWO file. read_cutu_die_from_dwo will allocate the abbreviation + table from the DWO file and pass the ownership over to us. It will be + referenced from READER, so we must make sure to free it after we're done + with READER. + + Note that if USE_EXISTING_OK != 0, and THIS_CU->cu already contains a + DWO CU, that this test will fail (the attribute will not be present). */ + const char *dwo_name = dwarf2_dwo_name (comp_unit_die, cu); + if (dwo_name != nullptr) + { + struct dwo_unit *dwo_unit; + struct die_info *dwo_comp_unit_die; + + if (comp_unit_die->has_children) + { + complaint (_("compilation unit with DW_AT_GNU_dwo_name" + " has children (offset %s) [in module %s]"), + sect_offset_str (this_cu->sect_off), + bfd_get_filename (abfd)); + } + dwo_unit = lookup_dwo_unit (cu, comp_unit_die, dwo_name); + if (dwo_unit != NULL) + { + if (read_cutu_die_from_dwo (cu, dwo_unit, + comp_unit_die, NULL, + this, &info_ptr, + &dwo_comp_unit_die, + &m_dwo_abbrev_table) == 0) + { + /* Dummy die. */ + dummy_p = true; + return; + } + comp_unit_die = dwo_comp_unit_die; + } + else + { + /* Yikes, we couldn't find the rest of the DIE, we only have + the stub. A complaint has already been logged. There's + not much more we can do except pass on the stub DIE to + die_reader_func. We don't want to throw an error on bad + debug info. */ + } + } +} + +void +cutu_reader::keep () +{ + /* Done, clean up. */ + gdb_assert (!dummy_p); + if (m_new_cu != NULL) + { + /* Save this dwarf2_cu in the per_objfile. The per_objfile owns it + now. */ + dwarf2_per_objfile *per_objfile = m_new_cu->per_objfile; + per_objfile->set_cu (m_this_cu, m_new_cu.release ()); + } +} + +/* Read CU/TU THIS_CU but do not follow DW_AT_GNU_dwo_name (DW_AT_dwo_name) + if present. DWO_FILE, if non-NULL, is the DWO file to read (the caller is + assumed to have already done the lookup to find the DWO file). + + The caller is required to fill in THIS_CU->section, THIS_CU->offset, and + THIS_CU->is_debug_types, but nothing else. + + We fill in THIS_CU->length. + + THIS_CU->cu is always freed when done. + This is done in order to not leave THIS_CU->cu in a state where we have + to care whether it refers to the "main" CU or the DWO CU. + + When parent_cu is passed, it is used to provide a default value for + str_offsets_base and addr_base from the parent. */ + +cutu_reader::cutu_reader (dwarf2_per_cu_data *this_cu, + dwarf2_per_objfile *per_objfile, + struct dwarf2_cu *parent_cu, + struct dwo_file *dwo_file) + : die_reader_specs {}, + m_this_cu (this_cu) +{ + struct objfile *objfile = per_objfile->objfile; + struct dwarf2_section_info *section = this_cu->section; + bfd *abfd = section->get_bfd_owner (); + struct dwarf2_section_info *abbrev_section; + const gdb_byte *begin_info_ptr, *info_ptr; + + if (dwarf_die_debug) + fprintf_unfiltered (gdb_stdlog, "Reading %s unit at offset %s\n", + this_cu->is_debug_types ? "type" : "comp", + sect_offset_str (this_cu->sect_off)); + + gdb_assert (per_objfile->get_cu (this_cu) == nullptr); + + abbrev_section = (dwo_file != NULL + ? &dwo_file->sections.abbrev + : get_abbrev_section_for_cu (this_cu)); + + /* This is cheap if the section is already read in. */ + section->read (objfile); + + m_new_cu.reset (new dwarf2_cu (this_cu, per_objfile)); + + begin_info_ptr = info_ptr = section->buffer + to_underlying (this_cu->sect_off); + info_ptr = read_and_check_comp_unit_head (per_objfile, &m_new_cu->header, + section, abbrev_section, info_ptr, + (this_cu->is_debug_types + ? rcuh_kind::TYPE + : rcuh_kind::COMPILE)); + + if (parent_cu != nullptr) + { + m_new_cu->str_offsets_base = parent_cu->str_offsets_base; + m_new_cu->addr_base = parent_cu->addr_base; + } + this_cu->length = m_new_cu->header.get_length (); + + /* Skip dummy compilation units. */ + if (info_ptr >= begin_info_ptr + this_cu->length + || peek_abbrev_code (abfd, info_ptr) == 0) + { + dummy_p = true; + return; + } + + m_abbrev_table_holder + = abbrev_table::read (objfile, abbrev_section, + m_new_cu->header.abbrev_sect_off); + + init_cu_die_reader (this, m_new_cu.get (), section, dwo_file, + m_abbrev_table_holder.get ()); + info_ptr = read_full_die (this, &comp_unit_die, info_ptr); +} + + +/* Type Unit Groups. + + Type Unit Groups are a way to collapse the set of all TUs (type units) into + a more manageable set. The grouping is done by DW_AT_stmt_list entry + so that all types coming from the same compilation (.o file) are grouped + together. A future step could be to put the types in the same symtab as + the CU the types ultimately came from. */ + +static hashval_t +hash_type_unit_group (const void *item) +{ + const struct type_unit_group *tu_group + = (const struct type_unit_group *) item; + + return hash_stmt_list_entry (&tu_group->hash); +} + +static int +eq_type_unit_group (const void *item_lhs, const void *item_rhs) +{ + const struct type_unit_group *lhs = (const struct type_unit_group *) item_lhs; + const struct type_unit_group *rhs = (const struct type_unit_group *) item_rhs; + + return eq_stmt_list_entry (&lhs->hash, &rhs->hash); +} + +/* Allocate a hash table for type unit groups. */ + +static htab_up +allocate_type_unit_groups_table () +{ + return htab_up (htab_create_alloc (3, + hash_type_unit_group, + eq_type_unit_group, + NULL, xcalloc, xfree)); +} + +/* Type units that don't have DW_AT_stmt_list are grouped into their own + partial symtabs. We combine several TUs per psymtab to not let the size + of any one psymtab grow too big. */ +#define NO_STMT_LIST_TYPE_UNIT_PSYMTAB (1 << 31) +#define NO_STMT_LIST_TYPE_UNIT_PSYMTAB_SIZE 10 + +/* Helper routine for get_type_unit_group. + Create the type_unit_group object used to hold one or more TUs. */ + +static struct type_unit_group * +create_type_unit_group (struct dwarf2_cu *cu, sect_offset line_offset_struct) +{ + dwarf2_per_objfile *per_objfile = cu->per_objfile; + dwarf2_per_bfd *per_bfd = per_objfile->per_bfd; + struct dwarf2_per_cu_data *per_cu; + struct type_unit_group *tu_group; + + tu_group = OBSTACK_ZALLOC (&per_objfile->per_bfd->obstack, type_unit_group); + per_cu = &tu_group->per_cu; + per_cu->per_bfd = per_bfd; + + if (per_bfd->using_index) + { + per_cu->v.quick = OBSTACK_ZALLOC (&per_bfd->obstack, + struct dwarf2_per_cu_quick_data); + } + else + { + unsigned int line_offset = to_underlying (line_offset_struct); + dwarf2_psymtab *pst; + std::string name; + + /* Give the symtab a useful name for debug purposes. */ + if ((line_offset & NO_STMT_LIST_TYPE_UNIT_PSYMTAB) != 0) + name = string_printf ("<type_units_%d>", + (line_offset & ~NO_STMT_LIST_TYPE_UNIT_PSYMTAB)); + else + name = string_printf ("<type_units_at_0x%x>", line_offset); + + pst = create_partial_symtab (per_cu, per_objfile, name.c_str ()); + pst->anonymous = true; + } + + tu_group->hash.dwo_unit = cu->dwo_unit; + tu_group->hash.line_sect_off = line_offset_struct; + + return tu_group; +} + +/* Look up the type_unit_group for type unit CU, and create it if necessary. + STMT_LIST is a DW_AT_stmt_list attribute. */ + +static struct type_unit_group * +get_type_unit_group (struct dwarf2_cu *cu, const struct attribute *stmt_list) +{ + dwarf2_per_objfile *per_objfile = cu->per_objfile; + struct tu_stats *tu_stats = &per_objfile->per_bfd->tu_stats; + struct type_unit_group *tu_group; + void **slot; + unsigned int line_offset; + struct type_unit_group type_unit_group_for_lookup; + + if (per_objfile->per_bfd->type_unit_groups == NULL) + per_objfile->per_bfd->type_unit_groups = allocate_type_unit_groups_table (); + + /* Do we need to create a new group, or can we use an existing one? */ + + if (stmt_list) + { + line_offset = DW_UNSND (stmt_list); + ++tu_stats->nr_symtab_sharers; + } + else + { + /* Ugh, no stmt_list. Rare, but we have to handle it. + We can do various things here like create one group per TU or + spread them over multiple groups to split up the expansion work. + To avoid worst case scenarios (too many groups or too large groups) + we, umm, group them in bunches. */ + line_offset = (NO_STMT_LIST_TYPE_UNIT_PSYMTAB + | (tu_stats->nr_stmt_less_type_units + / NO_STMT_LIST_TYPE_UNIT_PSYMTAB_SIZE)); + ++tu_stats->nr_stmt_less_type_units; + } + + type_unit_group_for_lookup.hash.dwo_unit = cu->dwo_unit; + type_unit_group_for_lookup.hash.line_sect_off = (sect_offset) line_offset; + slot = htab_find_slot (per_objfile->per_bfd->type_unit_groups.get (), + &type_unit_group_for_lookup, INSERT); + if (*slot != NULL) + { + tu_group = (struct type_unit_group *) *slot; + gdb_assert (tu_group != NULL); + } + else + { + sect_offset line_offset_struct = (sect_offset) line_offset; + tu_group = create_type_unit_group (cu, line_offset_struct); + *slot = tu_group; + ++tu_stats->nr_symtabs; + } + + return tu_group; +} + +/* Partial symbol tables. */ + +/* Create a psymtab named NAME and assign it to PER_CU. + + The caller must fill in the following details: + dirname, textlow, texthigh. */ + +static dwarf2_psymtab * +create_partial_symtab (dwarf2_per_cu_data *per_cu, + dwarf2_per_objfile *per_objfile, + const char *name) +{ + struct objfile *objfile = per_objfile->objfile; + dwarf2_psymtab *pst; + + pst = new dwarf2_psymtab (name, objfile, per_cu); + + pst->psymtabs_addrmap_supported = true; + + /* This is the glue that links PST into GDB's symbol API. */ + per_cu->v.psymtab = pst; + + return pst; +} + +/* DIE reader function for process_psymtab_comp_unit. */ + +static void +process_psymtab_comp_unit_reader (const struct die_reader_specs *reader, + const gdb_byte *info_ptr, + struct die_info *comp_unit_die, + enum language pretend_language) +{ + struct dwarf2_cu *cu = reader->cu; + dwarf2_per_objfile *per_objfile = cu->per_objfile; + struct objfile *objfile = per_objfile->objfile; + struct gdbarch *gdbarch = objfile->arch (); + struct dwarf2_per_cu_data *per_cu = cu->per_cu; + CORE_ADDR baseaddr; + CORE_ADDR best_lowpc = 0, best_highpc = 0; + dwarf2_psymtab *pst; + enum pc_bounds_kind cu_bounds_kind; + const char *filename; + + gdb_assert (! per_cu->is_debug_types); + + prepare_one_comp_unit (cu, comp_unit_die, pretend_language); + + /* Allocate a new partial symbol table structure. */ + gdb::unique_xmalloc_ptr<char> debug_filename; + static const char artificial[] = "<artificial>"; + filename = dwarf2_string_attr (comp_unit_die, DW_AT_name, cu); + if (filename == NULL) + filename = ""; + else if (strcmp (filename, artificial) == 0) + { + debug_filename.reset (concat (artificial, "@", + sect_offset_str (per_cu->sect_off), + (char *) NULL)); + filename = debug_filename.get (); + } + + pst = create_partial_symtab (per_cu, per_objfile, filename); + + /* This must be done before calling dwarf2_build_include_psymtabs. */ + pst->dirname = dwarf2_string_attr (comp_unit_die, DW_AT_comp_dir, cu); + + baseaddr = objfile->text_section_offset (); + + dwarf2_find_base_address (comp_unit_die, cu); + + /* Possibly set the default values of LOWPC and HIGHPC from + `DW_AT_ranges'. */ + cu_bounds_kind = dwarf2_get_pc_bounds (comp_unit_die, &best_lowpc, + &best_highpc, cu, pst); + if (cu_bounds_kind == PC_BOUNDS_HIGH_LOW && best_lowpc < best_highpc) + { + CORE_ADDR low + = (gdbarch_adjust_dwarf2_addr (gdbarch, best_lowpc + baseaddr) + - baseaddr); + CORE_ADDR high + = (gdbarch_adjust_dwarf2_addr (gdbarch, best_highpc + baseaddr) + - baseaddr - 1); + /* Store the contiguous range if it is not empty; it can be + empty for CUs with no code. */ + addrmap_set_empty (objfile->partial_symtabs->psymtabs_addrmap, + low, high, pst); + } + + /* Check if comp unit has_children. + If so, read the rest of the partial symbols from this comp unit. + If not, there's no more debug_info for this comp unit. */ + if (comp_unit_die->has_children) + { + struct partial_die_info *first_die; + CORE_ADDR lowpc, highpc; + + lowpc = ((CORE_ADDR) -1); + highpc = ((CORE_ADDR) 0); + + first_die = load_partial_dies (reader, info_ptr, 1); + + scan_partial_symbols (first_die, &lowpc, &highpc, + cu_bounds_kind <= PC_BOUNDS_INVALID, cu); + + /* If we didn't find a lowpc, set it to highpc to avoid + complaints from `maint check'. */ + if (lowpc == ((CORE_ADDR) -1)) + lowpc = highpc; + + /* If the compilation unit didn't have an explicit address range, + then use the information extracted from its child dies. */ + if (cu_bounds_kind <= PC_BOUNDS_INVALID) + { + best_lowpc = lowpc; + best_highpc = highpc; + } + } + pst->set_text_low (gdbarch_adjust_dwarf2_addr (gdbarch, + best_lowpc + baseaddr) + - baseaddr); + pst->set_text_high (gdbarch_adjust_dwarf2_addr (gdbarch, + best_highpc + baseaddr) + - baseaddr); + + end_psymtab_common (objfile, pst); + + if (!cu->per_cu->imported_symtabs_empty ()) + { + int i; + int len = cu->per_cu->imported_symtabs_size (); + + /* Fill in 'dependencies' here; we fill in 'users' in a + post-pass. */ + pst->number_of_dependencies = len; + pst->dependencies + = objfile->partial_symtabs->allocate_dependencies (len); + for (i = 0; i < len; ++i) + { + pst->dependencies[i] + = cu->per_cu->imported_symtabs->at (i)->v.psymtab; + } + + cu->per_cu->imported_symtabs_free (); + } + + /* Get the list of files included in the current compilation unit, + and build a psymtab for each of them. */ + dwarf2_build_include_psymtabs (cu, comp_unit_die, pst); + + if (dwarf_read_debug) + fprintf_unfiltered (gdb_stdlog, + "Psymtab for %s unit @%s: %s - %s" + ", %d global, %d static syms\n", + per_cu->is_debug_types ? "type" : "comp", + sect_offset_str (per_cu->sect_off), + paddress (gdbarch, pst->text_low (objfile)), + paddress (gdbarch, pst->text_high (objfile)), + pst->n_global_syms, pst->n_static_syms); +} + +/* Subroutine of dwarf2_build_psymtabs_hard to simplify it. + Process compilation unit THIS_CU for a psymtab. */ + +static void +process_psymtab_comp_unit (dwarf2_per_cu_data *this_cu, + dwarf2_per_objfile *per_objfile, + bool want_partial_unit, + enum language pretend_language) +{ + /* If this compilation unit was already read in, free the + cached copy in order to read it in again. This is + necessary because we skipped some symbols when we first + read in the compilation unit (see load_partial_dies). + This problem could be avoided, but the benefit is unclear. */ + per_objfile->remove_cu (this_cu); + + cutu_reader reader (this_cu, per_objfile, nullptr, nullptr, false); + + switch (reader.comp_unit_die->tag) + { + case DW_TAG_compile_unit: + this_cu->unit_type = DW_UT_compile; + break; + case DW_TAG_partial_unit: + this_cu->unit_type = DW_UT_partial; + break; + case DW_TAG_type_unit: + this_cu->unit_type = DW_UT_type; + break; + default: + abort (); + } + + if (reader.dummy_p) + { + /* Nothing. */ + } + else if (this_cu->is_debug_types) + build_type_psymtabs_reader (&reader, reader.info_ptr, + reader.comp_unit_die); + else if (want_partial_unit + || reader.comp_unit_die->tag != DW_TAG_partial_unit) + process_psymtab_comp_unit_reader (&reader, reader.info_ptr, + reader.comp_unit_die, + pretend_language); + + this_cu->lang = reader.cu->language; + + /* Age out any secondary CUs. */ + per_objfile->age_comp_units (); +} + +/* Reader function for build_type_psymtabs. */ + +static void +build_type_psymtabs_reader (const struct die_reader_specs *reader, + const gdb_byte *info_ptr, + struct die_info *type_unit_die) +{ + dwarf2_per_objfile *per_objfile = reader->cu->per_objfile; + struct objfile *objfile = per_objfile->objfile; + struct dwarf2_cu *cu = reader->cu; + struct dwarf2_per_cu_data *per_cu = cu->per_cu; + struct signatured_type *sig_type; + struct type_unit_group *tu_group; + struct attribute *attr; + struct partial_die_info *first_die; + CORE_ADDR lowpc, highpc; + dwarf2_psymtab *pst; + + gdb_assert (per_cu->is_debug_types); + sig_type = (struct signatured_type *) per_cu; + + if (! type_unit_die->has_children) + return; + + attr = type_unit_die->attr (DW_AT_stmt_list); + tu_group = get_type_unit_group (cu, attr); + + if (tu_group->tus == nullptr) + tu_group->tus = new std::vector<signatured_type *>; + tu_group->tus->push_back (sig_type); + + prepare_one_comp_unit (cu, type_unit_die, language_minimal); + pst = create_partial_symtab (per_cu, per_objfile, ""); + pst->anonymous = true; + + first_die = load_partial_dies (reader, info_ptr, 1); + + lowpc = (CORE_ADDR) -1; + highpc = (CORE_ADDR) 0; + scan_partial_symbols (first_die, &lowpc, &highpc, 0, cu); + + end_psymtab_common (objfile, pst); +} + +/* Struct used to sort TUs by their abbreviation table offset. */ + +struct tu_abbrev_offset +{ + tu_abbrev_offset (signatured_type *sig_type_, sect_offset abbrev_offset_) + : sig_type (sig_type_), abbrev_offset (abbrev_offset_) + {} + + signatured_type *sig_type; + sect_offset abbrev_offset; +}; + +/* Helper routine for build_type_psymtabs_1, passed to std::sort. */ + +static bool +sort_tu_by_abbrev_offset (const struct tu_abbrev_offset &a, + const struct tu_abbrev_offset &b) +{ + return a.abbrev_offset < b.abbrev_offset; +} + +/* Efficiently read all the type units. + This does the bulk of the work for build_type_psymtabs. + + The efficiency is because we sort TUs by the abbrev table they use and + only read each abbrev table once. In one program there are 200K TUs + sharing 8K abbrev tables. + + The main purpose of this function is to support building the + dwarf2_per_objfile->per_bfd->type_unit_groups table. + TUs typically share the DW_AT_stmt_list of the CU they came from, so we + can collapse the search space by grouping them by stmt_list. + The savings can be significant, in the same program from above the 200K TUs + share 8K stmt_list tables. + + FUNC is expected to call get_type_unit_group, which will create the + struct type_unit_group if necessary and add it to + dwarf2_per_objfile->per_bfd->type_unit_groups. */ + +static void +build_type_psymtabs_1 (dwarf2_per_objfile *per_objfile) +{ + struct tu_stats *tu_stats = &per_objfile->per_bfd->tu_stats; + abbrev_table_up abbrev_table; + sect_offset abbrev_offset; + + /* It's up to the caller to not call us multiple times. */ + gdb_assert (per_objfile->per_bfd->type_unit_groups == NULL); + + if (per_objfile->per_bfd->all_type_units.empty ()) + return; + + /* TUs typically share abbrev tables, and there can be way more TUs than + abbrev tables. Sort by abbrev table to reduce the number of times we + read each abbrev table in. + Alternatives are to punt or to maintain a cache of abbrev tables. + This is simpler and efficient enough for now. + + Later we group TUs by their DW_AT_stmt_list value (as this defines the + symtab to use). Typically TUs with the same abbrev offset have the same + stmt_list value too so in practice this should work well. + + The basic algorithm here is: + + sort TUs by abbrev table + for each TU with same abbrev table: + read abbrev table if first user + read TU top level DIE + [IWBN if DWO skeletons had DW_AT_stmt_list] + call FUNC */ + + if (dwarf_read_debug) + fprintf_unfiltered (gdb_stdlog, "Building type unit groups ...\n"); + + /* Sort in a separate table to maintain the order of all_type_units + for .gdb_index: TU indices directly index all_type_units. */ + std::vector<tu_abbrev_offset> sorted_by_abbrev; + sorted_by_abbrev.reserve (per_objfile->per_bfd->all_type_units.size ()); + + for (signatured_type *sig_type : per_objfile->per_bfd->all_type_units) + sorted_by_abbrev.emplace_back + (sig_type, read_abbrev_offset (per_objfile, sig_type->per_cu.section, + sig_type->per_cu.sect_off)); + + std::sort (sorted_by_abbrev.begin (), sorted_by_abbrev.end (), + sort_tu_by_abbrev_offset); + + abbrev_offset = (sect_offset) ~(unsigned) 0; + + for (const tu_abbrev_offset &tu : sorted_by_abbrev) + { + /* Switch to the next abbrev table if necessary. */ + if (abbrev_table == NULL + || tu.abbrev_offset != abbrev_offset) + { + abbrev_offset = tu.abbrev_offset; + abbrev_table = + abbrev_table::read (per_objfile->objfile, + &per_objfile->per_bfd->abbrev, abbrev_offset); + ++tu_stats->nr_uniq_abbrev_tables; + } + + cutu_reader reader (&tu.sig_type->per_cu, per_objfile, + abbrev_table.get (), nullptr, false); + if (!reader.dummy_p) + build_type_psymtabs_reader (&reader, reader.info_ptr, + reader.comp_unit_die); + } +} + +/* Print collected type unit statistics. */ + +static void +print_tu_stats (dwarf2_per_objfile *per_objfile) +{ + struct tu_stats *tu_stats = &per_objfile->per_bfd->tu_stats; + + fprintf_unfiltered (gdb_stdlog, "Type unit statistics:\n"); + fprintf_unfiltered (gdb_stdlog, " %zu TUs\n", + per_objfile->per_bfd->all_type_units.size ()); + fprintf_unfiltered (gdb_stdlog, " %d uniq abbrev tables\n", + tu_stats->nr_uniq_abbrev_tables); + fprintf_unfiltered (gdb_stdlog, " %d symtabs from stmt_list entries\n", + tu_stats->nr_symtabs); + fprintf_unfiltered (gdb_stdlog, " %d symtab sharers\n", + tu_stats->nr_symtab_sharers); + fprintf_unfiltered (gdb_stdlog, " %d type units without a stmt_list\n", + tu_stats->nr_stmt_less_type_units); + fprintf_unfiltered (gdb_stdlog, " %d all_type_units reallocs\n", + tu_stats->nr_all_type_units_reallocs); +} + +/* Traversal function for build_type_psymtabs. */ + +static int +build_type_psymtab_dependencies (void **slot, void *info) +{ + dwarf2_per_objfile *per_objfile = (dwarf2_per_objfile *) info; + struct objfile *objfile = per_objfile->objfile; + struct type_unit_group *tu_group = (struct type_unit_group *) *slot; + struct dwarf2_per_cu_data *per_cu = &tu_group->per_cu; + dwarf2_psymtab *pst = per_cu->v.psymtab; + int len = (tu_group->tus == nullptr) ? 0 : tu_group->tus->size (); + int i; + + gdb_assert (len > 0); + gdb_assert (per_cu->type_unit_group_p ()); + + pst->number_of_dependencies = len; + pst->dependencies = objfile->partial_symtabs->allocate_dependencies (len); + for (i = 0; i < len; ++i) + { + struct signatured_type *iter = tu_group->tus->at (i); + gdb_assert (iter->per_cu.is_debug_types); + pst->dependencies[i] = iter->per_cu.v.psymtab; + iter->type_unit_group = tu_group; + } + + delete tu_group->tus; + tu_group->tus = nullptr; + + return 1; +} + +/* Subroutine of dwarf2_build_psymtabs_hard to simplify it. + Build partial symbol tables for the .debug_types comp-units. */ + +static void +build_type_psymtabs (dwarf2_per_objfile *per_objfile) +{ + if (! create_all_type_units (per_objfile)) + return; + + build_type_psymtabs_1 (per_objfile); +} + +/* Traversal function for process_skeletonless_type_unit. + Read a TU in a DWO file and build partial symbols for it. */ + +static int +process_skeletonless_type_unit (void **slot, void *info) +{ + struct dwo_unit *dwo_unit = (struct dwo_unit *) *slot; + dwarf2_per_objfile *per_objfile = (dwarf2_per_objfile *) info; + struct signatured_type find_entry, *entry; + + /* If this TU doesn't exist in the global table, add it and read it in. */ + + if (per_objfile->per_bfd->signatured_types == NULL) + per_objfile->per_bfd->signatured_types = allocate_signatured_type_table (); + + find_entry.signature = dwo_unit->signature; + slot = htab_find_slot (per_objfile->per_bfd->signatured_types.get (), + &find_entry, INSERT); + /* If we've already seen this type there's nothing to do. What's happening + is we're doing our own version of comdat-folding here. */ + if (*slot != NULL) + return 1; + + /* This does the job that create_all_type_units would have done for + this TU. */ + entry = add_type_unit (per_objfile, dwo_unit->signature, slot); + fill_in_sig_entry_from_dwo_entry (per_objfile, entry, dwo_unit); + *slot = entry; + + /* This does the job that build_type_psymtabs_1 would have done. */ + cutu_reader reader (&entry->per_cu, per_objfile, nullptr, nullptr, false); + if (!reader.dummy_p) + build_type_psymtabs_reader (&reader, reader.info_ptr, + reader.comp_unit_die); + + return 1; +} + +/* Traversal function for process_skeletonless_type_units. */ + +static int +process_dwo_file_for_skeletonless_type_units (void **slot, void *info) +{ + struct dwo_file *dwo_file = (struct dwo_file *) *slot; + + if (dwo_file->tus != NULL) + htab_traverse_noresize (dwo_file->tus.get (), + process_skeletonless_type_unit, info); + + return 1; +} + +/* Scan all TUs of DWO files, verifying we've processed them. + This is needed in case a TU was emitted without its skeleton. + Note: This can't be done until we know what all the DWO files are. */ + +static void +process_skeletonless_type_units (dwarf2_per_objfile *per_objfile) +{ + /* Skeletonless TUs in DWP files without .gdb_index is not supported yet. */ + if (get_dwp_file (per_objfile) == NULL + && per_objfile->per_bfd->dwo_files != NULL) + { + htab_traverse_noresize (per_objfile->per_bfd->dwo_files.get (), + process_dwo_file_for_skeletonless_type_units, + per_objfile); + } +} + +/* Compute the 'user' field for each psymtab in DWARF2_PER_OBJFILE. */ + +static void +set_partial_user (dwarf2_per_objfile *per_objfile) +{ + for (dwarf2_per_cu_data *per_cu : per_objfile->per_bfd->all_comp_units) + { + dwarf2_psymtab *pst = per_cu->v.psymtab; + + if (pst == NULL) + continue; + + for (int j = 0; j < pst->number_of_dependencies; ++j) + { + /* Set the 'user' field only if it is not already set. */ + if (pst->dependencies[j]->user == NULL) + pst->dependencies[j]->user = pst; + } + } +} + +/* Build the partial symbol table by doing a quick pass through the + .debug_info and .debug_abbrev sections. */ + +static void +dwarf2_build_psymtabs_hard (dwarf2_per_objfile *per_objfile) +{ + struct objfile *objfile = per_objfile->objfile; + + if (dwarf_read_debug) + { + fprintf_unfiltered (gdb_stdlog, "Building psymtabs of objfile %s ...\n", + objfile_name (objfile)); + } + + scoped_restore restore_reading_psyms + = make_scoped_restore (&per_objfile->per_bfd->reading_partial_symbols, + true); + + per_objfile->per_bfd->info.read (objfile); + + /* Any cached compilation units will be linked by the per-objfile + read_in_chain. Make sure to free them when we're done. */ + free_cached_comp_units freer (per_objfile); + + build_type_psymtabs (per_objfile); + + create_all_comp_units (per_objfile); + + /* Create a temporary address map on a temporary obstack. We later + copy this to the final obstack. */ + auto_obstack temp_obstack; + + scoped_restore save_psymtabs_addrmap + = make_scoped_restore (&objfile->partial_symtabs->psymtabs_addrmap, + addrmap_create_mutable (&temp_obstack)); + + for (dwarf2_per_cu_data *per_cu : per_objfile->per_bfd->all_comp_units) + { + if (per_cu->v.psymtab != NULL) + /* In case a forward DW_TAG_imported_unit has read the CU already. */ + continue; + process_psymtab_comp_unit (per_cu, per_objfile, false, + language_minimal); + } + + /* This has to wait until we read the CUs, we need the list of DWOs. */ + process_skeletonless_type_units (per_objfile); + + /* Now that all TUs have been processed we can fill in the dependencies. */ + if (per_objfile->per_bfd->type_unit_groups != NULL) + { + htab_traverse_noresize (per_objfile->per_bfd->type_unit_groups.get (), + build_type_psymtab_dependencies, per_objfile); + } + + if (dwarf_read_debug) + print_tu_stats (per_objfile); + + set_partial_user (per_objfile); + + objfile->partial_symtabs->psymtabs_addrmap + = addrmap_create_fixed (objfile->partial_symtabs->psymtabs_addrmap, + objfile->partial_symtabs->obstack ()); + /* At this point we want to keep the address map. */ + save_psymtabs_addrmap.release (); + + if (dwarf_read_debug) + fprintf_unfiltered (gdb_stdlog, "Done building psymtabs of %s\n", + objfile_name (objfile)); +} + +/* Load the partial DIEs for a secondary CU into memory. + This is also used when rereading a primary CU with load_all_dies. */ + +static void +load_partial_comp_unit (dwarf2_per_cu_data *this_cu, + dwarf2_per_objfile *per_objfile, + dwarf2_cu *existing_cu) +{ + cutu_reader reader (this_cu, per_objfile, nullptr, existing_cu, false); + + if (!reader.dummy_p) + { + prepare_one_comp_unit (reader.cu, reader.comp_unit_die, + language_minimal); + + /* Check if comp unit has_children. + If so, read the rest of the partial symbols from this comp unit. + If not, there's no more debug_info for this comp unit. */ + if (reader.comp_unit_die->has_children) + load_partial_dies (&reader, reader.info_ptr, 0); + + reader.keep (); + } +} + +static void +read_comp_units_from_section (dwarf2_per_objfile *per_objfile, + struct dwarf2_section_info *section, + struct dwarf2_section_info *abbrev_section, + unsigned int is_dwz) +{ + const gdb_byte *info_ptr; + struct objfile *objfile = per_objfile->objfile; + + if (dwarf_read_debug) + fprintf_unfiltered (gdb_stdlog, "Reading %s for %s\n", + section->get_name (), + section->get_file_name ()); + + section->read (objfile); + + info_ptr = section->buffer; + + while (info_ptr < section->buffer + section->size) + { + struct dwarf2_per_cu_data *this_cu; + + sect_offset sect_off = (sect_offset) (info_ptr - section->buffer); + + comp_unit_head cu_header; + read_and_check_comp_unit_head (per_objfile, &cu_header, section, + abbrev_section, info_ptr, + rcuh_kind::COMPILE); + + /* Save the compilation unit for later lookup. */ + if (cu_header.unit_type != DW_UT_type) + this_cu = per_objfile->per_bfd->allocate_per_cu (); + else + { + auto sig_type = per_objfile->per_bfd->allocate_signatured_type (); + sig_type->signature = cu_header.signature; + sig_type->type_offset_in_tu = cu_header.type_cu_offset_in_tu; + this_cu = &sig_type->per_cu; + } + this_cu->is_debug_types = (cu_header.unit_type == DW_UT_type); + this_cu->sect_off = sect_off; + this_cu->length = cu_header.length + cu_header.initial_length_size; + this_cu->is_dwz = is_dwz; + this_cu->section = section; + + per_objfile->per_bfd->all_comp_units.push_back (this_cu); + + info_ptr = info_ptr + this_cu->length; + } +} + +/* Create a list of all compilation units in OBJFILE. + This is only done for -readnow and building partial symtabs. */ + +static void +create_all_comp_units (dwarf2_per_objfile *per_objfile) +{ + gdb_assert (per_objfile->per_bfd->all_comp_units.empty ()); + read_comp_units_from_section (per_objfile, &per_objfile->per_bfd->info, + &per_objfile->per_bfd->abbrev, 0); + + dwz_file *dwz = dwarf2_get_dwz_file (per_objfile->per_bfd); + if (dwz != NULL) + read_comp_units_from_section (per_objfile, &dwz->info, &dwz->abbrev, 1); +} + +/* Process all loaded DIEs for compilation unit CU, starting at + FIRST_DIE. The caller should pass SET_ADDRMAP == 1 if the compilation + unit DIE did not have PC info (DW_AT_low_pc and DW_AT_high_pc, or + DW_AT_ranges). See the comments of add_partial_subprogram on how + SET_ADDRMAP is used and how *LOWPC and *HIGHPC are updated. */ + +static void +scan_partial_symbols (struct partial_die_info *first_die, CORE_ADDR *lowpc, + CORE_ADDR *highpc, int set_addrmap, + struct dwarf2_cu *cu) +{ + struct partial_die_info *pdi; + + /* Now, march along the PDI's, descending into ones which have + interesting children but skipping the children of the other ones, + until we reach the end of the compilation unit. */ + + pdi = first_die; + + while (pdi != NULL) + { + pdi->fixup (cu); + + /* Anonymous namespaces or modules have no name but have interesting + children, so we need to look at them. Ditto for anonymous + enums. */ + + if (pdi->raw_name != NULL || pdi->tag == DW_TAG_namespace + || pdi->tag == DW_TAG_module || pdi->tag == DW_TAG_enumeration_type + || pdi->tag == DW_TAG_imported_unit + || pdi->tag == DW_TAG_inlined_subroutine) + { + switch (pdi->tag) + { + case DW_TAG_subprogram: + case DW_TAG_inlined_subroutine: + add_partial_subprogram (pdi, lowpc, highpc, set_addrmap, cu); + if (cu->language == language_cplus) + scan_partial_symbols (pdi->die_child, lowpc, highpc, + set_addrmap, cu); + break; + case DW_TAG_constant: + case DW_TAG_variable: + case DW_TAG_typedef: + case DW_TAG_union_type: + if (!pdi->is_declaration + || (pdi->tag == DW_TAG_variable && pdi->is_external)) + { + add_partial_symbol (pdi, cu); + } + break; + case DW_TAG_class_type: + case DW_TAG_interface_type: + case DW_TAG_structure_type: + if (!pdi->is_declaration) + { + add_partial_symbol (pdi, cu); + } + if ((cu->language == language_rust + || cu->language == language_cplus) && pdi->has_children) + scan_partial_symbols (pdi->die_child, lowpc, highpc, + set_addrmap, cu); + break; + case DW_TAG_enumeration_type: + if (!pdi->is_declaration) + add_partial_enumeration (pdi, cu); + break; + case DW_TAG_base_type: + case DW_TAG_subrange_type: + /* File scope base type definitions are added to the partial + symbol table. */ + add_partial_symbol (pdi, cu); + break; + case DW_TAG_namespace: + add_partial_namespace (pdi, lowpc, highpc, set_addrmap, cu); + break; + case DW_TAG_module: + if (!pdi->is_declaration) + add_partial_module (pdi, lowpc, highpc, set_addrmap, cu); + break; + case DW_TAG_imported_unit: + { + struct dwarf2_per_cu_data *per_cu; + + /* For now we don't handle imported units in type units. */ + if (cu->per_cu->is_debug_types) + { + error (_("Dwarf Error: DW_TAG_imported_unit is not" + " supported in type units [in module %s]"), + objfile_name (cu->per_objfile->objfile)); + } + + per_cu = dwarf2_find_containing_comp_unit + (pdi->d.sect_off, pdi->is_dwz, cu->per_objfile); + + /* Go read the partial unit, if needed. */ + if (per_cu->v.psymtab == NULL) + process_psymtab_comp_unit (per_cu, cu->per_objfile, true, + cu->language); + + cu->per_cu->imported_symtabs_push (per_cu); + } + break; + case DW_TAG_imported_declaration: + add_partial_symbol (pdi, cu); + break; + default: + break; + } + } + + /* If the die has a sibling, skip to the sibling. */ + + pdi = pdi->die_sibling; + } +} + +/* Functions used to compute the fully scoped name of a partial DIE. + + Normally, this is simple. For C++, the parent DIE's fully scoped + name is concatenated with "::" and the partial DIE's name. + Enumerators are an exception; they use the scope of their parent + enumeration type, i.e. the name of the enumeration type is not + prepended to the enumerator. + + There are two complexities. One is DW_AT_specification; in this + case "parent" means the parent of the target of the specification, + instead of the direct parent of the DIE. The other is compilers + which do not emit DW_TAG_namespace; in this case we try to guess + the fully qualified name of structure types from their members' + linkage names. This must be done using the DIE's children rather + than the children of any DW_AT_specification target. We only need + to do this for structures at the top level, i.e. if the target of + any DW_AT_specification (if any; otherwise the DIE itself) does not + have a parent. */ + +/* Compute the scope prefix associated with PDI's parent, in + compilation unit CU. The result will be allocated on CU's + comp_unit_obstack, or a copy of the already allocated PDI->NAME + field. NULL is returned if no prefix is necessary. */ +static const char * +partial_die_parent_scope (struct partial_die_info *pdi, + struct dwarf2_cu *cu) +{ + const char *grandparent_scope; + struct partial_die_info *parent, *real_pdi; + + /* We need to look at our parent DIE; if we have a DW_AT_specification, + then this means the parent of the specification DIE. */ + + real_pdi = pdi; + while (real_pdi->has_specification) + { + auto res = find_partial_die (real_pdi->spec_offset, + real_pdi->spec_is_dwz, cu); + real_pdi = res.pdi; + cu = res.cu; + } + + parent = real_pdi->die_parent; + if (parent == NULL) + return NULL; + + if (parent->scope_set) + return parent->scope; + + parent->fixup (cu); + + grandparent_scope = partial_die_parent_scope (parent, cu); + + /* GCC 4.0 and 4.1 had a bug (PR c++/28460) where they generated bogus + DW_TAG_namespace DIEs with a name of "::" for the global namespace. + Work around this problem here. */ + if (cu->language == language_cplus + && parent->tag == DW_TAG_namespace + && strcmp (parent->name (cu), "::") == 0 + && grandparent_scope == NULL) + { + parent->scope = NULL; + parent->scope_set = 1; + return NULL; + } + + /* Nested subroutines in Fortran get a prefix. */ + if (pdi->tag == DW_TAG_enumerator) + /* Enumerators should not get the name of the enumeration as a prefix. */ + parent->scope = grandparent_scope; + else if (parent->tag == DW_TAG_namespace + || parent->tag == DW_TAG_module + || parent->tag == DW_TAG_structure_type + || parent->tag == DW_TAG_class_type + || parent->tag == DW_TAG_interface_type + || parent->tag == DW_TAG_union_type + || parent->tag == DW_TAG_enumeration_type + || (cu->language == language_fortran + && parent->tag == DW_TAG_subprogram + && pdi->tag == DW_TAG_subprogram)) + { + if (grandparent_scope == NULL) + parent->scope = parent->name (cu); + else + parent->scope = typename_concat (&cu->comp_unit_obstack, + grandparent_scope, + parent->name (cu), 0, cu); + } + else + { + /* FIXME drow/2004-04-01: What should we be doing with + function-local names? For partial symbols, we should probably be + ignoring them. */ + complaint (_("unhandled containing DIE tag %s for DIE at %s"), + dwarf_tag_name (parent->tag), + sect_offset_str (pdi->sect_off)); + parent->scope = grandparent_scope; + } + + parent->scope_set = 1; + return parent->scope; +} + +/* Return the fully scoped name associated with PDI, from compilation unit + CU. The result will be allocated with malloc. */ + +static gdb::unique_xmalloc_ptr<char> +partial_die_full_name (struct partial_die_info *pdi, + struct dwarf2_cu *cu) +{ + const char *parent_scope; + + /* If this is a template instantiation, we can not work out the + template arguments from partial DIEs. So, unfortunately, we have + to go through the full DIEs. At least any work we do building + types here will be reused if full symbols are loaded later. */ + if (pdi->has_template_arguments) + { + pdi->fixup (cu); + + if (pdi->name (cu) != NULL && strchr (pdi->name (cu), '<') == NULL) + { + struct die_info *die; + struct attribute attr; + struct dwarf2_cu *ref_cu = cu; + + /* DW_FORM_ref_addr is using section offset. */ + attr.name = (enum dwarf_attribute) 0; + attr.form = DW_FORM_ref_addr; + attr.u.unsnd = to_underlying (pdi->sect_off); + die = follow_die_ref (NULL, &attr, &ref_cu); + + return make_unique_xstrdup (dwarf2_full_name (NULL, die, ref_cu)); + } + } + + parent_scope = partial_die_parent_scope (pdi, cu); + if (parent_scope == NULL) + return NULL; + else + return gdb::unique_xmalloc_ptr<char> (typename_concat (NULL, parent_scope, + pdi->name (cu), + 0, cu)); +} + +static void +add_partial_symbol (struct partial_die_info *pdi, struct dwarf2_cu *cu) +{ + dwarf2_per_objfile *per_objfile = cu->per_objfile; + struct objfile *objfile = per_objfile->objfile; + struct gdbarch *gdbarch = objfile->arch (); + CORE_ADDR addr = 0; + const char *actual_name = NULL; + CORE_ADDR baseaddr; + + baseaddr = objfile->text_section_offset (); + + gdb::unique_xmalloc_ptr<char> built_actual_name + = partial_die_full_name (pdi, cu); + if (built_actual_name != NULL) + actual_name = built_actual_name.get (); + + if (actual_name == NULL) + actual_name = pdi->name (cu); + + partial_symbol psymbol; + memset (&psymbol, 0, sizeof (psymbol)); + psymbol.ginfo.set_language (cu->language, &objfile->objfile_obstack); + psymbol.ginfo.section = -1; + + /* The code below indicates that the psymbol should be installed by + setting this. */ + gdb::optional<psymbol_placement> where; + + switch (pdi->tag) + { + case DW_TAG_inlined_subroutine: + case DW_TAG_subprogram: + addr = (gdbarch_adjust_dwarf2_addr (gdbarch, pdi->lowpc + baseaddr) + - baseaddr); + if (pdi->is_external + || cu->language == language_ada + || (cu->language == language_fortran + && pdi->die_parent != NULL + && pdi->die_parent->tag == DW_TAG_subprogram)) + { + /* Normally, only "external" DIEs are part of the global scope. + But in Ada and Fortran, we want to be able to access nested + procedures globally. So all Ada and Fortran subprograms are + stored in the global scope. */ + where = psymbol_placement::GLOBAL; + } + else + where = psymbol_placement::STATIC; + + psymbol.domain = VAR_DOMAIN; + psymbol.aclass = LOC_BLOCK; + psymbol.ginfo.section = SECT_OFF_TEXT (objfile); + psymbol.ginfo.value.address = addr; + + if (pdi->main_subprogram && actual_name != NULL) + set_objfile_main_name (objfile, actual_name, cu->language); + break; + case DW_TAG_constant: + psymbol.domain = VAR_DOMAIN; + psymbol.aclass = LOC_STATIC; + where = (pdi->is_external + ? psymbol_placement::GLOBAL + : psymbol_placement::STATIC); + break; + case DW_TAG_variable: + if (pdi->d.locdesc) + addr = decode_locdesc (pdi->d.locdesc, cu); + + if (pdi->d.locdesc + && addr == 0 + && !per_objfile->per_bfd->has_section_at_zero) + { + /* A global or static variable may also have been stripped + out by the linker if unused, in which case its address + will be nullified; do not add such variables into partial + symbol table then. */ + } + else if (pdi->is_external) + { + /* Global Variable. + Don't enter into the minimal symbol tables as there is + a minimal symbol table entry from the ELF symbols already. + Enter into partial symbol table if it has a location + descriptor or a type. + If the location descriptor is missing, new_symbol will create + a LOC_UNRESOLVED symbol, the address of the variable will then + be determined from the minimal symbol table whenever the variable + is referenced. + The address for the partial symbol table entry is not + used by GDB, but it comes in handy for debugging partial symbol + table building. */ + + if (pdi->d.locdesc || pdi->has_type) + { + psymbol.domain = VAR_DOMAIN; + psymbol.aclass = LOC_STATIC; + psymbol.ginfo.section = SECT_OFF_TEXT (objfile); + psymbol.ginfo.value.address = addr; + where = psymbol_placement::GLOBAL; + } + } + else + { + int has_loc = pdi->d.locdesc != NULL; + + /* Static Variable. Skip symbols whose value we cannot know (those + without location descriptors or constant values). */ + if (!has_loc && !pdi->has_const_value) + return; + + psymbol.domain = VAR_DOMAIN; + psymbol.aclass = LOC_STATIC; + psymbol.ginfo.section = SECT_OFF_TEXT (objfile); + if (has_loc) + psymbol.ginfo.value.address = addr; + where = psymbol_placement::STATIC; + } + break; + case DW_TAG_typedef: + case DW_TAG_base_type: + case DW_TAG_subrange_type: + psymbol.domain = VAR_DOMAIN; + psymbol.aclass = LOC_TYPEDEF; + where = psymbol_placement::STATIC; + break; + case DW_TAG_imported_declaration: + case DW_TAG_namespace: + psymbol.domain = VAR_DOMAIN; + psymbol.aclass = LOC_TYPEDEF; + where = psymbol_placement::GLOBAL; + break; + case DW_TAG_module: + /* With Fortran 77 there might be a "BLOCK DATA" module + available without any name. If so, we skip the module as it + doesn't bring any value. */ + if (actual_name != nullptr) + { + psymbol.domain = MODULE_DOMAIN; + psymbol.aclass = LOC_TYPEDEF; + where = psymbol_placement::GLOBAL; + } + break; + case DW_TAG_class_type: + case DW_TAG_interface_type: + case DW_TAG_structure_type: + case DW_TAG_union_type: + case DW_TAG_enumeration_type: + /* Skip external references. The DWARF standard says in the section + about "Structure, Union, and Class Type Entries": "An incomplete + structure, union or class type is represented by a structure, + union or class entry that does not have a byte size attribute + and that has a DW_AT_declaration attribute." */ + if (!pdi->has_byte_size && pdi->is_declaration) + return; + + /* NOTE: carlton/2003-10-07: See comment in new_symbol about + static vs. global. */ + psymbol.domain = STRUCT_DOMAIN; + psymbol.aclass = LOC_TYPEDEF; + where = (cu->language == language_cplus + ? psymbol_placement::GLOBAL + : psymbol_placement::STATIC); + break; + case DW_TAG_enumerator: + psymbol.domain = VAR_DOMAIN; + psymbol.aclass = LOC_CONST; + where = (cu->language == language_cplus + ? psymbol_placement::GLOBAL + : psymbol_placement::STATIC); + break; + default: + break; + } + + if (where.has_value ()) + { + if (built_actual_name != nullptr) + actual_name = objfile->intern (actual_name); + if (pdi->linkage_name == nullptr || cu->language == language_ada) + psymbol.ginfo.set_linkage_name (actual_name); + else + { + psymbol.ginfo.set_demangled_name (actual_name, + &objfile->objfile_obstack); + psymbol.ginfo.set_linkage_name (pdi->linkage_name); + } + add_psymbol_to_list (psymbol, *where, objfile); + } +} + +/* Read a partial die corresponding to a namespace; also, add a symbol + corresponding to that namespace to the symbol table. NAMESPACE is + the name of the enclosing namespace. */ + +static void +add_partial_namespace (struct partial_die_info *pdi, + CORE_ADDR *lowpc, CORE_ADDR *highpc, + int set_addrmap, struct dwarf2_cu *cu) +{ + /* Add a symbol for the namespace. */ + + add_partial_symbol (pdi, cu); + + /* Now scan partial symbols in that namespace. */ + + if (pdi->has_children) + scan_partial_symbols (pdi->die_child, lowpc, highpc, set_addrmap, cu); +} + +/* Read a partial die corresponding to a Fortran module. */ + +static void +add_partial_module (struct partial_die_info *pdi, CORE_ADDR *lowpc, + CORE_ADDR *highpc, int set_addrmap, struct dwarf2_cu *cu) +{ + /* Add a symbol for the namespace. */ + + add_partial_symbol (pdi, cu); + + /* Now scan partial symbols in that module. */ + + if (pdi->has_children) + scan_partial_symbols (pdi->die_child, lowpc, highpc, set_addrmap, cu); +} + +/* Read a partial die corresponding to a subprogram or an inlined + subprogram and create a partial symbol for that subprogram. + When the CU language allows it, this routine also defines a partial + symbol for each nested subprogram that this subprogram contains. + If SET_ADDRMAP is true, record the covered ranges in the addrmap. + Set *LOWPC and *HIGHPC to the lowest and highest PC values found in PDI. + + PDI may also be a lexical block, in which case we simply search + recursively for subprograms defined inside that lexical block. + Again, this is only performed when the CU language allows this + type of definitions. */ + +static void +add_partial_subprogram (struct partial_die_info *pdi, + CORE_ADDR *lowpc, CORE_ADDR *highpc, + int set_addrmap, struct dwarf2_cu *cu) +{ + if (pdi->tag == DW_TAG_subprogram || pdi->tag == DW_TAG_inlined_subroutine) + { + if (pdi->has_pc_info) + { + if (pdi->lowpc < *lowpc) + *lowpc = pdi->lowpc; + if (pdi->highpc > *highpc) + *highpc = pdi->highpc; + if (set_addrmap) + { + struct objfile *objfile = cu->per_objfile->objfile; + struct gdbarch *gdbarch = objfile->arch (); + CORE_ADDR baseaddr; + CORE_ADDR this_highpc; + CORE_ADDR this_lowpc; + + baseaddr = objfile->text_section_offset (); + this_lowpc + = (gdbarch_adjust_dwarf2_addr (gdbarch, + pdi->lowpc + baseaddr) + - baseaddr); + this_highpc + = (gdbarch_adjust_dwarf2_addr (gdbarch, + pdi->highpc + baseaddr) + - baseaddr); + addrmap_set_empty (objfile->partial_symtabs->psymtabs_addrmap, + this_lowpc, this_highpc - 1, + cu->per_cu->v.psymtab); + } + } + + if (pdi->has_pc_info || (!pdi->is_external && pdi->may_be_inlined)) + { + if (!pdi->is_declaration) + /* Ignore subprogram DIEs that do not have a name, they are + illegal. Do not emit a complaint at this point, we will + do so when we convert this psymtab into a symtab. */ + if (pdi->name (cu)) + add_partial_symbol (pdi, cu); + } + } + + if (! pdi->has_children) + return; + + if (cu->language == language_ada || cu->language == language_fortran) + { + pdi = pdi->die_child; + while (pdi != NULL) + { + pdi->fixup (cu); + if (pdi->tag == DW_TAG_subprogram + || pdi->tag == DW_TAG_inlined_subroutine + || pdi->tag == DW_TAG_lexical_block) + add_partial_subprogram (pdi, lowpc, highpc, set_addrmap, cu); + pdi = pdi->die_sibling; + } + } +} + +/* Read a partial die corresponding to an enumeration type. */ + +static void +add_partial_enumeration (struct partial_die_info *enum_pdi, + struct dwarf2_cu *cu) +{ + struct partial_die_info *pdi; + + if (enum_pdi->name (cu) != NULL) + add_partial_symbol (enum_pdi, cu); + + pdi = enum_pdi->die_child; + while (pdi) + { + if (pdi->tag != DW_TAG_enumerator || pdi->raw_name == NULL) + complaint (_("malformed enumerator DIE ignored")); + else + add_partial_symbol (pdi, cu); + pdi = pdi->die_sibling; + } +} + +/* Return the initial uleb128 in the die at INFO_PTR. */ + +static unsigned int +peek_abbrev_code (bfd *abfd, const gdb_byte *info_ptr) +{ + unsigned int bytes_read; + + return read_unsigned_leb128 (abfd, info_ptr, &bytes_read); +} + +/* Read the initial uleb128 in the die at INFO_PTR in compilation unit + READER::CU. Use READER::ABBREV_TABLE to lookup any abbreviation. + + Return the corresponding abbrev, or NULL if the number is zero (indicating + an empty DIE). In either case *BYTES_READ will be set to the length of + the initial number. */ + +static struct abbrev_info * +peek_die_abbrev (const die_reader_specs &reader, + const gdb_byte *info_ptr, unsigned int *bytes_read) +{ + dwarf2_cu *cu = reader.cu; + bfd *abfd = cu->per_objfile->objfile->obfd; + unsigned int abbrev_number + = read_unsigned_leb128 (abfd, info_ptr, bytes_read); + + if (abbrev_number == 0) + return NULL; + + abbrev_info *abbrev = reader.abbrev_table->lookup_abbrev (abbrev_number); + if (!abbrev) + { + error (_("Dwarf Error: Could not find abbrev number %d in %s" + " at offset %s [in module %s]"), + abbrev_number, cu->per_cu->is_debug_types ? "TU" : "CU", + sect_offset_str (cu->header.sect_off), bfd_get_filename (abfd)); + } + + return abbrev; +} + +/* Scan the debug information for CU starting at INFO_PTR in buffer BUFFER. + Returns a pointer to the end of a series of DIEs, terminated by an empty + DIE. Any children of the skipped DIEs will also be skipped. */ + +static const gdb_byte * +skip_children (const struct die_reader_specs *reader, const gdb_byte *info_ptr) +{ + while (1) + { + unsigned int bytes_read; + abbrev_info *abbrev = peek_die_abbrev (*reader, info_ptr, &bytes_read); + + if (abbrev == NULL) + return info_ptr + bytes_read; + else + info_ptr = skip_one_die (reader, info_ptr + bytes_read, abbrev); + } +} + +/* Scan the debug information for CU starting at INFO_PTR in buffer BUFFER. + INFO_PTR should point just after the initial uleb128 of a DIE, and the + abbrev corresponding to that skipped uleb128 should be passed in + ABBREV. Returns a pointer to this DIE's sibling, skipping any + children. */ + +static const gdb_byte * +skip_one_die (const struct die_reader_specs *reader, const gdb_byte *info_ptr, + struct abbrev_info *abbrev) +{ + unsigned int bytes_read; + struct attribute attr; + bfd *abfd = reader->abfd; + struct dwarf2_cu *cu = reader->cu; + const gdb_byte *buffer = reader->buffer; + const gdb_byte *buffer_end = reader->buffer_end; + unsigned int form, i; + + for (i = 0; i < abbrev->num_attrs; i++) + { + /* The only abbrev we care about is DW_AT_sibling. */ + if (abbrev->attrs[i].name == DW_AT_sibling) + { + bool ignored; + read_attribute (reader, &attr, &abbrev->attrs[i], info_ptr, + &ignored); + if (attr.form == DW_FORM_ref_addr) + complaint (_("ignoring absolute DW_AT_sibling")); + else + { + sect_offset off = attr.get_ref_die_offset (); + const gdb_byte *sibling_ptr = buffer + to_underlying (off); + + if (sibling_ptr < info_ptr) + complaint (_("DW_AT_sibling points backwards")); + else if (sibling_ptr > reader->buffer_end) + reader->die_section->overflow_complaint (); + else + return sibling_ptr; + } + } + + /* If it isn't DW_AT_sibling, skip this attribute. */ + form = abbrev->attrs[i].form; + skip_attribute: + switch (form) + { + case DW_FORM_ref_addr: + /* In DWARF 2, DW_FORM_ref_addr is address sized; in DWARF 3 + and later it is offset sized. */ + if (cu->header.version == 2) + info_ptr += cu->header.addr_size; + else + info_ptr += cu->header.offset_size; + break; + case DW_FORM_GNU_ref_alt: + info_ptr += cu->header.offset_size; + break; + case DW_FORM_addr: + info_ptr += cu->header.addr_size; + break; + case DW_FORM_data1: + case DW_FORM_ref1: + case DW_FORM_flag: + case DW_FORM_strx1: + info_ptr += 1; + break; + case DW_FORM_flag_present: + case DW_FORM_implicit_const: + break; + case DW_FORM_data2: + case DW_FORM_ref2: + case DW_FORM_strx2: + info_ptr += 2; + break; + case DW_FORM_strx3: + info_ptr += 3; + break; + case DW_FORM_data4: + case DW_FORM_ref4: + case DW_FORM_strx4: + info_ptr += 4; + break; + case DW_FORM_data8: + case DW_FORM_ref8: + case DW_FORM_ref_sig8: + info_ptr += 8; + break; + case DW_FORM_data16: + info_ptr += 16; + break; + case DW_FORM_string: + read_direct_string (abfd, info_ptr, &bytes_read); + info_ptr += bytes_read; + break; + case DW_FORM_sec_offset: + case DW_FORM_strp: + case DW_FORM_GNU_strp_alt: + info_ptr += cu->header.offset_size; + break; + case DW_FORM_exprloc: + case DW_FORM_block: + info_ptr += read_unsigned_leb128 (abfd, info_ptr, &bytes_read); + info_ptr += bytes_read; + break; + case DW_FORM_block1: + info_ptr += 1 + read_1_byte (abfd, info_ptr); + break; + case DW_FORM_block2: + info_ptr += 2 + read_2_bytes (abfd, info_ptr); + break; + case DW_FORM_block4: + info_ptr += 4 + read_4_bytes (abfd, info_ptr); + break; + case DW_FORM_addrx: + case DW_FORM_strx: + case DW_FORM_sdata: + case DW_FORM_udata: + case DW_FORM_ref_udata: + case DW_FORM_GNU_addr_index: + case DW_FORM_GNU_str_index: + case DW_FORM_rnglistx: + case DW_FORM_loclistx: + info_ptr = safe_skip_leb128 (info_ptr, buffer_end); + break; + case DW_FORM_indirect: + form = read_unsigned_leb128 (abfd, info_ptr, &bytes_read); + info_ptr += bytes_read; + /* We need to continue parsing from here, so just go back to + the top. */ + goto skip_attribute; + + default: + error (_("Dwarf Error: Cannot handle %s " + "in DWARF reader [in module %s]"), + dwarf_form_name (form), + bfd_get_filename (abfd)); + } + } + + if (abbrev->has_children) + return skip_children (reader, info_ptr); + else + return info_ptr; +} + +/* Locate ORIG_PDI's sibling. + INFO_PTR should point to the start of the next DIE after ORIG_PDI. */ + +static const gdb_byte * +locate_pdi_sibling (const struct die_reader_specs *reader, + struct partial_die_info *orig_pdi, + const gdb_byte *info_ptr) +{ + /* Do we know the sibling already? */ + + if (orig_pdi->sibling) + return orig_pdi->sibling; + + /* Are there any children to deal with? */ + + if (!orig_pdi->has_children) + return info_ptr; + + /* Skip the children the long way. */ + + return skip_children (reader, info_ptr); +} + +/* Expand this partial symbol table into a full symbol table. SELF is + not NULL. */ + +void +dwarf2_psymtab::read_symtab (struct objfile *objfile) +{ + dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile); + + gdb_assert (!per_objfile->symtab_set_p (per_cu_data)); + + /* If this psymtab is constructed from a debug-only objfile, the + has_section_at_zero flag will not necessarily be correct. We + can get the correct value for this flag by looking at the data + associated with the (presumably stripped) associated objfile. */ + if (objfile->separate_debug_objfile_backlink) + { + dwarf2_per_objfile *per_objfile_backlink + = get_dwarf2_per_objfile (objfile->separate_debug_objfile_backlink); + + per_objfile->per_bfd->has_section_at_zero + = per_objfile_backlink->per_bfd->has_section_at_zero; + } + + expand_psymtab (objfile); + + process_cu_includes (per_objfile); +} + +/* Reading in full CUs. */ + +/* Add PER_CU to the queue. */ + +static void +queue_comp_unit (dwarf2_per_cu_data *per_cu, + dwarf2_per_objfile *per_objfile, + enum language pretend_language) +{ + per_cu->queued = 1; + + gdb_assert (per_objfile->per_bfd->queue.has_value ()); + per_cu->per_bfd->queue->emplace (per_cu, per_objfile, pretend_language); +} + +/* If PER_CU is not yet expanded of queued for expansion, add it to the queue. + + If DEPENDENT_CU is non-NULL, it has a reference to PER_CU so add a + dependency. + + Return true if maybe_queue_comp_unit requires the caller to load the CU's + DIEs, false otherwise. + + Explanation: there is an invariant that if a CU is queued for expansion + (present in `dwarf2_per_bfd::queue`), then its DIEs are loaded + (a dwarf2_cu object exists for this CU, and `dwarf2_per_objfile::get_cu` + returns non-nullptr). If the CU gets enqueued by this function but its DIEs + are not yet loaded, the the caller must load the CU's DIEs to ensure the + invariant is respected. + + The caller is therefore not required to load the CU's DIEs (we return false) + if: + + - the CU is already expanded, and therefore does not get enqueued + - the CU gets enqueued for expansion, but its DIEs are already loaded + + Note that the caller should not use this function's return value as an + indicator of whether the CU's DIEs are loaded right now, it should check + that by calling `dwarf2_per_objfile::get_cu` instead. */ + +static int +maybe_queue_comp_unit (struct dwarf2_cu *dependent_cu, + dwarf2_per_cu_data *per_cu, + dwarf2_per_objfile *per_objfile, + enum language pretend_language) +{ + /* We may arrive here during partial symbol reading, if we need full + DIEs to process an unusual case (e.g. template arguments). Do + not queue PER_CU, just tell our caller to load its DIEs. */ + if (per_cu->per_bfd->reading_partial_symbols) + { + dwarf2_cu *cu = per_objfile->get_cu (per_cu); + + if (cu == NULL || cu->dies == NULL) + return 1; + return 0; + } + + /* Mark the dependence relation so that we don't flush PER_CU + too early. */ + if (dependent_cu != NULL) + dwarf2_add_dependence (dependent_cu, per_cu); + + /* If it's already on the queue, we have nothing to do. */ + if (per_cu->queued) + { + /* Verify the invariant that if a CU is queued for expansion, its DIEs are + loaded. */ + gdb_assert (per_objfile->get_cu (per_cu) != nullptr); + + /* If the CU is queued for expansion, it should not already be + expanded. */ + gdb_assert (!per_objfile->symtab_set_p (per_cu)); + + /* The DIEs are already loaded, the caller doesn't need to do it. */ + return 0; + } + + bool queued = false; + if (!per_objfile->symtab_set_p (per_cu)) + { + /* Add it to the queue. */ + queue_comp_unit (per_cu, per_objfile, pretend_language); + queued = true; + } + + /* If the compilation unit is already loaded, just mark it as + used. */ + dwarf2_cu *cu = per_objfile->get_cu (per_cu); + if (cu != nullptr) + cu->last_used = 0; + + /* Ask the caller to load the CU's DIEs if the CU got enqueued for expansion + and the DIEs are not already loaded. */ + return queued && cu == nullptr; +} + +/* Process the queue. */ + +static void +process_queue (dwarf2_per_objfile *per_objfile) +{ + if (dwarf_read_debug) + { + fprintf_unfiltered (gdb_stdlog, + "Expanding one or more symtabs of objfile %s ...\n", + objfile_name (per_objfile->objfile)); + } + + /* The queue starts out with one item, but following a DIE reference + may load a new CU, adding it to the end of the queue. */ + while (!per_objfile->per_bfd->queue->empty ()) + { + dwarf2_queue_item &item = per_objfile->per_bfd->queue->front (); + dwarf2_per_cu_data *per_cu = item.per_cu; + + if (!per_objfile->symtab_set_p (per_cu)) + { + dwarf2_cu *cu = per_objfile->get_cu (per_cu); + + /* Skip dummy CUs. */ + if (cu != nullptr) + { + unsigned int debug_print_threshold; + char buf[100]; + + if (per_cu->is_debug_types) + { + struct signatured_type *sig_type = + (struct signatured_type *) per_cu; + + sprintf (buf, "TU %s at offset %s", + hex_string (sig_type->signature), + sect_offset_str (per_cu->sect_off)); + /* There can be 100s of TUs. + Only print them in verbose mode. */ + debug_print_threshold = 2; + } + else + { + sprintf (buf, "CU at offset %s", + sect_offset_str (per_cu->sect_off)); + debug_print_threshold = 1; + } + + if (dwarf_read_debug >= debug_print_threshold) + fprintf_unfiltered (gdb_stdlog, "Expanding symtab of %s\n", buf); + + if (per_cu->is_debug_types) + process_full_type_unit (cu, item.pretend_language); + else + process_full_comp_unit (cu, item.pretend_language); + + if (dwarf_read_debug >= debug_print_threshold) + fprintf_unfiltered (gdb_stdlog, "Done expanding %s\n", buf); + } + } + + per_cu->queued = 0; + per_objfile->per_bfd->queue->pop (); + } + + if (dwarf_read_debug) + { + fprintf_unfiltered (gdb_stdlog, "Done expanding symtabs of %s.\n", + objfile_name (per_objfile->objfile)); + } +} + +/* Read in full symbols for PST, and anything it depends on. */ + +void +dwarf2_psymtab::expand_psymtab (struct objfile *objfile) +{ + gdb_assert (!readin_p (objfile)); + + dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile); + free_cached_comp_units freer (per_objfile); + expand_dependencies (objfile); + + dw2_do_instantiate_symtab (per_cu_data, per_objfile, false); + gdb_assert (get_compunit_symtab (objfile) != nullptr); +} + +/* See psympriv.h. */ + +bool +dwarf2_psymtab::readin_p (struct objfile *objfile) const +{ + dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile); + return per_objfile->symtab_set_p (per_cu_data); +} + +/* See psympriv.h. */ + +compunit_symtab * +dwarf2_psymtab::get_compunit_symtab (struct objfile *objfile) const +{ + dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile); + return per_objfile->get_symtab (per_cu_data); +} + +/* Trivial hash function for die_info: the hash value of a DIE + is its offset in .debug_info for this objfile. */ + +static hashval_t +die_hash (const void *item) +{ + const struct die_info *die = (const struct die_info *) item; + + return to_underlying (die->sect_off); +} + +/* Trivial comparison function for die_info structures: two DIEs + are equal if they have the same offset. */ + +static int +die_eq (const void *item_lhs, const void *item_rhs) +{ + const struct die_info *die_lhs = (const struct die_info *) item_lhs; + const struct die_info *die_rhs = (const struct die_info *) item_rhs; + + return die_lhs->sect_off == die_rhs->sect_off; +} + +/* Load the DIEs associated with PER_CU into memory. + + In some cases, the caller, while reading partial symbols, will need to load + the full symbols for the CU for some reason. It will already have a + dwarf2_cu object for THIS_CU and pass it as EXISTING_CU, so it can be re-used + rather than creating a new one. */ + +static void +load_full_comp_unit (dwarf2_per_cu_data *this_cu, + dwarf2_per_objfile *per_objfile, + dwarf2_cu *existing_cu, + bool skip_partial, + enum language pretend_language) +{ + gdb_assert (! this_cu->is_debug_types); + + cutu_reader reader (this_cu, per_objfile, NULL, existing_cu, skip_partial); + if (reader.dummy_p) + return; + + struct dwarf2_cu *cu = reader.cu; + const gdb_byte *info_ptr = reader.info_ptr; + + gdb_assert (cu->die_hash == NULL); + cu->die_hash = + htab_create_alloc_ex (cu->header.length / 12, + die_hash, + die_eq, + NULL, + &cu->comp_unit_obstack, + hashtab_obstack_allocate, + dummy_obstack_deallocate); + + if (reader.comp_unit_die->has_children) + reader.comp_unit_die->child + = read_die_and_siblings (&reader, reader.info_ptr, + &info_ptr, reader.comp_unit_die); + cu->dies = reader.comp_unit_die; + /* comp_unit_die is not stored in die_hash, no need. */ + + /* We try not to read any attributes in this function, because not + all CUs needed for references have been loaded yet, and symbol + table processing isn't initialized. But we have to set the CU language, + or we won't be able to build types correctly. + Similarly, if we do not read the producer, we can not apply + producer-specific interpretation. */ + prepare_one_comp_unit (cu, cu->dies, pretend_language); + + reader.keep (); +} + +/* Add a DIE to the delayed physname list. */ + +static void +add_to_method_list (struct type *type, int fnfield_index, int index, + const char *name, struct die_info *die, + struct dwarf2_cu *cu) +{ + struct delayed_method_info mi; + mi.type = type; + mi.fnfield_index = fnfield_index; + mi.index = index; + mi.name = name; + mi.die = die; + cu->method_list.push_back (mi); +} + +/* Check whether [PHYSNAME, PHYSNAME+LEN) ends with a modifier like + "const" / "volatile". If so, decrements LEN by the length of the + modifier and return true. Otherwise return false. */ + +template<size_t N> +static bool +check_modifier (const char *physname, size_t &len, const char (&mod)[N]) +{ + size_t mod_len = sizeof (mod) - 1; + if (len > mod_len && startswith (physname + (len - mod_len), mod)) + { + len -= mod_len; + return true; + } + return false; +} + +/* Compute the physnames of any methods on the CU's method list. + + The computation of method physnames is delayed in order to avoid the + (bad) condition that one of the method's formal parameters is of an as yet + incomplete type. */ + +static void +compute_delayed_physnames (struct dwarf2_cu *cu) +{ + /* Only C++ delays computing physnames. */ + if (cu->method_list.empty ()) + return; + gdb_assert (cu->language == language_cplus); + + for (const delayed_method_info &mi : cu->method_list) + { + const char *physname; + struct fn_fieldlist *fn_flp + = &TYPE_FN_FIELDLIST (mi.type, mi.fnfield_index); + physname = dwarf2_physname (mi.name, mi.die, cu); + TYPE_FN_FIELD_PHYSNAME (fn_flp->fn_fields, mi.index) + = physname ? physname : ""; + + /* Since there's no tag to indicate whether a method is a + const/volatile overload, extract that information out of the + demangled name. */ + if (physname != NULL) + { + size_t len = strlen (physname); + + while (1) + { + if (physname[len] == ')') /* shortcut */ + break; + else if (check_modifier (physname, len, " const")) + TYPE_FN_FIELD_CONST (fn_flp->fn_fields, mi.index) = 1; + else if (check_modifier (physname, len, " volatile")) + TYPE_FN_FIELD_VOLATILE (fn_flp->fn_fields, mi.index) = 1; + else + break; + } + } + } + + /* The list is no longer needed. */ + cu->method_list.clear (); +} + +/* Go objects should be embedded in a DW_TAG_module DIE, + and it's not clear if/how imported objects will appear. + To keep Go support simple until that's worked out, + go back through what we've read and create something usable. + We could do this while processing each DIE, and feels kinda cleaner, + but that way is more invasive. + This is to, for example, allow the user to type "p var" or "b main" + without having to specify the package name, and allow lookups + of module.object to work in contexts that use the expression + parser. */ + +static void +fixup_go_packaging (struct dwarf2_cu *cu) +{ + gdb::unique_xmalloc_ptr<char> package_name; + struct pending *list; + int i; + + for (list = *cu->get_builder ()->get_global_symbols (); + list != NULL; + list = list->next) + { + for (i = 0; i < list->nsyms; ++i) + { + struct symbol *sym = list->symbol[i]; + + if (sym->language () == language_go + && SYMBOL_CLASS (sym) == LOC_BLOCK) + { + gdb::unique_xmalloc_ptr<char> this_package_name + (go_symbol_package_name (sym)); + + if (this_package_name == NULL) + continue; + if (package_name == NULL) + package_name = std::move (this_package_name); + else + { + struct objfile *objfile = cu->per_objfile->objfile; + if (strcmp (package_name.get (), this_package_name.get ()) != 0) + complaint (_("Symtab %s has objects from two different Go packages: %s and %s"), + (symbol_symtab (sym) != NULL + ? symtab_to_filename_for_display + (symbol_symtab (sym)) + : objfile_name (objfile)), + this_package_name.get (), package_name.get ()); + } + } + } + } + + if (package_name != NULL) + { + struct objfile *objfile = cu->per_objfile->objfile; + const char *saved_package_name = objfile->intern (package_name.get ()); + struct type *type = init_type (objfile, TYPE_CODE_MODULE, 0, + saved_package_name); + struct symbol *sym; + + sym = new (&objfile->objfile_obstack) symbol; + sym->set_language (language_go, &objfile->objfile_obstack); + sym->compute_and_set_names (saved_package_name, false, objfile->per_bfd); + /* This is not VAR_DOMAIN because we want a way to ensure a lookup of, + e.g., "main" finds the "main" module and not C's main(). */ + SYMBOL_DOMAIN (sym) = STRUCT_DOMAIN; + SYMBOL_ACLASS_INDEX (sym) = LOC_TYPEDEF; + SYMBOL_TYPE (sym) = type; + + add_symbol_to_list (sym, cu->get_builder ()->get_global_symbols ()); + } +} + +/* Allocate a fully-qualified name consisting of the two parts on the + obstack. */ + +static const char * +rust_fully_qualify (struct obstack *obstack, const char *p1, const char *p2) +{ + return obconcat (obstack, p1, "::", p2, (char *) NULL); +} + +/* A helper that allocates a variant part to attach to a Rust enum + type. OBSTACK is where the results should be allocated. TYPE is + the type we're processing. DISCRIMINANT_INDEX is the index of the + discriminant. It must be the index of one of the fields of TYPE, + or -1 to mean there is no discriminant (univariant enum). + DEFAULT_INDEX is the index of the default field; or -1 if there is + no default. RANGES is indexed by "effective" field number (the + field index, but omitting the discriminant and default fields) and + must hold the discriminant values used by the variants. Note that + RANGES must have a lifetime at least as long as OBSTACK -- either + already allocated on it, or static. */ + +static void +alloc_rust_variant (struct obstack *obstack, struct type *type, + int discriminant_index, int default_index, + gdb::array_view<discriminant_range> ranges) +{ + /* When DISCRIMINANT_INDEX == -1, we have a univariant enum. */ + gdb_assert (discriminant_index == -1 + || (discriminant_index >= 0 + && discriminant_index < type->num_fields ())); + gdb_assert (default_index == -1 + || (default_index >= 0 && default_index < type->num_fields ())); + + /* We have one variant for each non-discriminant field. */ + int n_variants = type->num_fields (); + if (discriminant_index != -1) + --n_variants; + + variant *variants = new (obstack) variant[n_variants]; + int var_idx = 0; + int range_idx = 0; + for (int i = 0; i < type->num_fields (); ++i) + { + if (i == discriminant_index) + continue; + + variants[var_idx].first_field = i; + variants[var_idx].last_field = i + 1; + + /* The default field does not need a range, but other fields do. + We skipped the discriminant above. */ + if (i != default_index) + { + variants[var_idx].discriminants = ranges.slice (range_idx, 1); + ++range_idx; + } + + ++var_idx; + } + + gdb_assert (range_idx == ranges.size ()); + gdb_assert (var_idx == n_variants); + + variant_part *part = new (obstack) variant_part; + part->discriminant_index = discriminant_index; + /* If there is no discriminant, then whether it is signed is of no + consequence. */ + part->is_unsigned + = (discriminant_index == -1 + ? false + : TYPE_UNSIGNED (type->field (discriminant_index).type ())); + part->variants = gdb::array_view<variant> (variants, n_variants); + + void *storage = obstack_alloc (obstack, sizeof (gdb::array_view<variant_part>)); + gdb::array_view<variant_part> *prop_value + = new (storage) gdb::array_view<variant_part> (part, 1); + + struct dynamic_prop prop; + prop.set_variant_parts (prop_value); + + type->add_dyn_prop (DYN_PROP_VARIANT_PARTS, prop); +} + +/* Some versions of rustc emitted enums in an unusual way. + + Ordinary enums were emitted as unions. The first element of each + structure in the union was named "RUST$ENUM$DISR". This element + held the discriminant. + + These versions of Rust also implemented the "non-zero" + optimization. When the enum had two values, and one is empty and + the other holds a pointer that cannot be zero, the pointer is used + as the discriminant, with a zero value meaning the empty variant. + Here, the union's first member is of the form + RUST$ENCODED$ENUM$<fieldno>$<fieldno>$...$<variantname> + where the fieldnos are the indices of the fields that should be + traversed in order to find the field (which may be several fields deep) + and the variantname is the name of the variant of the case when the + field is zero. + + This function recognizes whether TYPE is of one of these forms, + and, if so, smashes it to be a variant type. */ + +static void +quirk_rust_enum (struct type *type, struct objfile *objfile) +{ + gdb_assert (type->code () == TYPE_CODE_UNION); + + /* We don't need to deal with empty enums. */ + if (type->num_fields () == 0) + return; + +#define RUST_ENUM_PREFIX "RUST$ENCODED$ENUM$" + if (type->num_fields () == 1 + && startswith (TYPE_FIELD_NAME (type, 0), RUST_ENUM_PREFIX)) + { + const char *name = TYPE_FIELD_NAME (type, 0) + strlen (RUST_ENUM_PREFIX); + + /* Decode the field name to find the offset of the + discriminant. */ + ULONGEST bit_offset = 0; + struct type *field_type = type->field (0).type (); + while (name[0] >= '0' && name[0] <= '9') + { + char *tail; + unsigned long index = strtoul (name, &tail, 10); + name = tail; + if (*name != '$' + || index >= field_type->num_fields () + || (TYPE_FIELD_LOC_KIND (field_type, index) + != FIELD_LOC_KIND_BITPOS)) + { + complaint (_("Could not parse Rust enum encoding string \"%s\"" + "[in module %s]"), + TYPE_FIELD_NAME (type, 0), + objfile_name (objfile)); + return; + } + ++name; + + bit_offset += TYPE_FIELD_BITPOS (field_type, index); + field_type = field_type->field (index).type (); + } + + /* Smash this type to be a structure type. We have to do this + because the type has already been recorded. */ + type->set_code (TYPE_CODE_STRUCT); + type->set_num_fields (3); + /* Save the field we care about. */ + struct field saved_field = type->field (0); + type->set_fields + ((struct field *) TYPE_ZALLOC (type, 3 * sizeof (struct field))); + + /* Put the discriminant at index 0. */ + type->field (0).set_type (field_type); + TYPE_FIELD_ARTIFICIAL (type, 0) = 1; + TYPE_FIELD_NAME (type, 0) = "<<discriminant>>"; + SET_FIELD_BITPOS (type->field (0), bit_offset); + + /* The order of fields doesn't really matter, so put the real + field at index 1 and the data-less field at index 2. */ + type->field (1) = saved_field; + TYPE_FIELD_NAME (type, 1) + = rust_last_path_segment (type->field (1).type ()->name ()); + type->field (1).type ()->set_name + (rust_fully_qualify (&objfile->objfile_obstack, type->name (), + TYPE_FIELD_NAME (type, 1))); + + const char *dataless_name + = rust_fully_qualify (&objfile->objfile_obstack, type->name (), + name); + struct type *dataless_type = init_type (objfile, TYPE_CODE_VOID, 0, + dataless_name); + type->field (2).set_type (dataless_type); + /* NAME points into the original discriminant name, which + already has the correct lifetime. */ + TYPE_FIELD_NAME (type, 2) = name; + SET_FIELD_BITPOS (type->field (2), 0); + + /* Indicate that this is a variant type. */ + static discriminant_range ranges[1] = { { 0, 0 } }; + alloc_rust_variant (&objfile->objfile_obstack, type, 0, 1, ranges); + } + /* A union with a single anonymous field is probably an old-style + univariant enum. */ + else if (type->num_fields () == 1 && streq (TYPE_FIELD_NAME (type, 0), "")) + { + /* Smash this type to be a structure type. We have to do this + because the type has already been recorded. */ + type->set_code (TYPE_CODE_STRUCT); + + struct type *field_type = type->field (0).type (); + const char *variant_name + = rust_last_path_segment (field_type->name ()); + TYPE_FIELD_NAME (type, 0) = variant_name; + field_type->set_name + (rust_fully_qualify (&objfile->objfile_obstack, + type->name (), variant_name)); + + alloc_rust_variant (&objfile->objfile_obstack, type, -1, 0, {}); + } + else + { + struct type *disr_type = nullptr; + for (int i = 0; i < type->num_fields (); ++i) + { + disr_type = type->field (i).type (); + + if (disr_type->code () != TYPE_CODE_STRUCT) + { + /* All fields of a true enum will be structs. */ + return; + } + else if (disr_type->num_fields () == 0) + { + /* Could be data-less variant, so keep going. */ + disr_type = nullptr; + } + else if (strcmp (TYPE_FIELD_NAME (disr_type, 0), + "RUST$ENUM$DISR") != 0) + { + /* Not a Rust enum. */ + return; + } + else + { + /* Found one. */ + break; + } + } + + /* If we got here without a discriminant, then it's probably + just a union. */ + if (disr_type == nullptr) + return; + + /* Smash this type to be a structure type. We have to do this + because the type has already been recorded. */ + type->set_code (TYPE_CODE_STRUCT); + + /* Make space for the discriminant field. */ + struct field *disr_field = &disr_type->field (0); + field *new_fields + = (struct field *) TYPE_ZALLOC (type, ((type->num_fields () + 1) + * sizeof (struct field))); + memcpy (new_fields + 1, type->fields (), + type->num_fields () * sizeof (struct field)); + type->set_fields (new_fields); + type->set_num_fields (type->num_fields () + 1); + + /* Install the discriminant at index 0 in the union. */ + type->field (0) = *disr_field; + TYPE_FIELD_ARTIFICIAL (type, 0) = 1; + TYPE_FIELD_NAME (type, 0) = "<<discriminant>>"; + + /* We need a way to find the correct discriminant given a + variant name. For convenience we build a map here. */ + struct type *enum_type = disr_field->type (); + std::unordered_map<std::string, ULONGEST> discriminant_map; + for (int i = 0; i < enum_type->num_fields (); ++i) + { + if (TYPE_FIELD_LOC_KIND (enum_type, i) == FIELD_LOC_KIND_ENUMVAL) + { + const char *name + = rust_last_path_segment (TYPE_FIELD_NAME (enum_type, i)); + discriminant_map[name] = TYPE_FIELD_ENUMVAL (enum_type, i); + } + } + + int n_fields = type->num_fields (); + /* We don't need a range entry for the discriminant, but we do + need one for every other field, as there is no default + variant. */ + discriminant_range *ranges = XOBNEWVEC (&objfile->objfile_obstack, + discriminant_range, + n_fields - 1); + /* Skip the discriminant here. */ + for (int i = 1; i < n_fields; ++i) + { + /* Find the final word in the name of this variant's type. + That name can be used to look up the correct + discriminant. */ + const char *variant_name + = rust_last_path_segment (type->field (i).type ()->name ()); + + auto iter = discriminant_map.find (variant_name); + if (iter != discriminant_map.end ()) + { + ranges[i - 1].low = iter->second; + ranges[i - 1].high = iter->second; + } + + /* In Rust, each element should have the size of the + enclosing enum. */ + TYPE_LENGTH (type->field (i).type ()) = TYPE_LENGTH (type); + + /* Remove the discriminant field, if it exists. */ + struct type *sub_type = type->field (i).type (); + if (sub_type->num_fields () > 0) + { + sub_type->set_num_fields (sub_type->num_fields () - 1); + sub_type->set_fields (sub_type->fields () + 1); + } + TYPE_FIELD_NAME (type, i) = variant_name; + sub_type->set_name + (rust_fully_qualify (&objfile->objfile_obstack, + type->name (), variant_name)); + } + + /* Indicate that this is a variant type. */ + alloc_rust_variant (&objfile->objfile_obstack, type, 0, -1, + gdb::array_view<discriminant_range> (ranges, + n_fields - 1)); + } +} + +/* Rewrite some Rust unions to be structures with variants parts. */ + +static void +rust_union_quirks (struct dwarf2_cu *cu) +{ + gdb_assert (cu->language == language_rust); + for (type *type_ : cu->rust_unions) + quirk_rust_enum (type_, cu->per_objfile->objfile); + /* We don't need this any more. */ + cu->rust_unions.clear (); +} + +/* See read.h. */ + +type_unit_group_unshareable * +dwarf2_per_objfile::get_type_unit_group_unshareable (type_unit_group *tu_group) +{ + auto iter = this->m_type_units.find (tu_group); + if (iter != this->m_type_units.end ()) + return iter->second.get (); + + type_unit_group_unshareable_up uniq (new type_unit_group_unshareable); + type_unit_group_unshareable *result = uniq.get (); + this->m_type_units[tu_group] = std::move (uniq); + return result; +} + +struct type * +dwarf2_per_objfile::get_type_for_signatured_type + (signatured_type *sig_type) const +{ + auto iter = this->m_type_map.find (sig_type); + if (iter == this->m_type_map.end ()) + return nullptr; + + return iter->second; +} + +void dwarf2_per_objfile::set_type_for_signatured_type + (signatured_type *sig_type, struct type *type) +{ + gdb_assert (this->m_type_map.find (sig_type) == this->m_type_map.end ()); + + this->m_type_map[sig_type] = type; +} + +/* A helper function for computing the list of all symbol tables + included by PER_CU. */ + +static void +recursively_compute_inclusions (std::vector<compunit_symtab *> *result, + htab_t all_children, htab_t all_type_symtabs, + dwarf2_per_cu_data *per_cu, + dwarf2_per_objfile *per_objfile, + struct compunit_symtab *immediate_parent) +{ + void **slot = htab_find_slot (all_children, per_cu, INSERT); + if (*slot != NULL) + { + /* This inclusion and its children have been processed. */ + return; + } + + *slot = per_cu; + + /* Only add a CU if it has a symbol table. */ + compunit_symtab *cust = per_objfile->get_symtab (per_cu); + if (cust != NULL) + { + /* If this is a type unit only add its symbol table if we haven't + seen it yet (type unit per_cu's can share symtabs). */ + if (per_cu->is_debug_types) + { + slot = htab_find_slot (all_type_symtabs, cust, INSERT); + if (*slot == NULL) + { + *slot = cust; + result->push_back (cust); + if (cust->user == NULL) + cust->user = immediate_parent; + } + } + else + { + result->push_back (cust); + if (cust->user == NULL) + cust->user = immediate_parent; + } + } + + if (!per_cu->imported_symtabs_empty ()) + for (dwarf2_per_cu_data *ptr : *per_cu->imported_symtabs) + { + recursively_compute_inclusions (result, all_children, + all_type_symtabs, ptr, per_objfile, + cust); + } +} + +/* Compute the compunit_symtab 'includes' fields for the compunit_symtab of + PER_CU. */ + +static void +compute_compunit_symtab_includes (dwarf2_per_cu_data *per_cu, + dwarf2_per_objfile *per_objfile) +{ + gdb_assert (! per_cu->is_debug_types); + + if (!per_cu->imported_symtabs_empty ()) + { + int len; + std::vector<compunit_symtab *> result_symtabs; + htab_t all_children, all_type_symtabs; + compunit_symtab *cust = per_objfile->get_symtab (per_cu); + + /* If we don't have a symtab, we can just skip this case. */ + if (cust == NULL) + return; + + all_children = htab_create_alloc (1, htab_hash_pointer, htab_eq_pointer, + NULL, xcalloc, xfree); + all_type_symtabs = htab_create_alloc (1, htab_hash_pointer, htab_eq_pointer, + NULL, xcalloc, xfree); + + for (dwarf2_per_cu_data *ptr : *per_cu->imported_symtabs) + { + recursively_compute_inclusions (&result_symtabs, all_children, + all_type_symtabs, ptr, per_objfile, + cust); + } + + /* Now we have a transitive closure of all the included symtabs. */ + len = result_symtabs.size (); + cust->includes + = XOBNEWVEC (&per_objfile->objfile->objfile_obstack, + struct compunit_symtab *, len + 1); + memcpy (cust->includes, result_symtabs.data (), + len * sizeof (compunit_symtab *)); + cust->includes[len] = NULL; + + htab_delete (all_children); + htab_delete (all_type_symtabs); + } +} + +/* Compute the 'includes' field for the symtabs of all the CUs we just + read. */ + +static void +process_cu_includes (dwarf2_per_objfile *per_objfile) +{ + for (dwarf2_per_cu_data *iter : per_objfile->per_bfd->just_read_cus) + { + if (! iter->is_debug_types) + compute_compunit_symtab_includes (iter, per_objfile); + } + + per_objfile->per_bfd->just_read_cus.clear (); +} + +/* Generate full symbol information for CU, whose DIEs have + already been loaded into memory. */ + +static void +process_full_comp_unit (dwarf2_cu *cu, enum language pretend_language) +{ + dwarf2_per_objfile *per_objfile = cu->per_objfile; + struct objfile *objfile = per_objfile->objfile; + struct gdbarch *gdbarch = objfile->arch (); + CORE_ADDR lowpc, highpc; + struct compunit_symtab *cust; + CORE_ADDR baseaddr; + struct block *static_block; + CORE_ADDR addr; + + baseaddr = objfile->text_section_offset (); + + /* Clear the list here in case something was left over. */ + cu->method_list.clear (); + + cu->language = pretend_language; + cu->language_defn = language_def (cu->language); + + /* Do line number decoding in read_file_scope () */ + process_die (cu->dies, cu); + + /* For now fudge the Go package. */ + if (cu->language == language_go) + fixup_go_packaging (cu); + + /* Now that we have processed all the DIEs in the CU, all the types + should be complete, and it should now be safe to compute all of the + physnames. */ + compute_delayed_physnames (cu); + + if (cu->language == language_rust) + rust_union_quirks (cu); + + /* Some compilers don't define a DW_AT_high_pc attribute for the + compilation unit. If the DW_AT_high_pc is missing, synthesize + it, by scanning the DIE's below the compilation unit. */ + get_scope_pc_bounds (cu->dies, &lowpc, &highpc, cu); + + addr = gdbarch_adjust_dwarf2_addr (gdbarch, highpc + baseaddr); + static_block = cu->get_builder ()->end_symtab_get_static_block (addr, 0, 1); + + /* If the comp unit has DW_AT_ranges, it may have discontiguous ranges. + Also, DW_AT_ranges may record ranges not belonging to any child DIEs + (such as virtual method tables). Record the ranges in STATIC_BLOCK's + addrmap to help ensure it has an accurate map of pc values belonging to + this comp unit. */ + dwarf2_record_block_ranges (cu->dies, static_block, baseaddr, cu); + + cust = cu->get_builder ()->end_symtab_from_static_block (static_block, + SECT_OFF_TEXT (objfile), + 0); + + if (cust != NULL) + { + int gcc_4_minor = producer_is_gcc_ge_4 (cu->producer); + + /* Set symtab language to language from DW_AT_language. If the + compilation is from a C file generated by language preprocessors, do + not set the language if it was already deduced by start_subfile. */ + if (!(cu->language == language_c + && COMPUNIT_FILETABS (cust)->language != language_unknown)) + COMPUNIT_FILETABS (cust)->language = cu->language; + + /* GCC-4.0 has started to support -fvar-tracking. GCC-3.x still can + produce DW_AT_location with location lists but it can be possibly + invalid without -fvar-tracking. Still up to GCC-4.4.x incl. 4.4.0 + there were bugs in prologue debug info, fixed later in GCC-4.5 + by "unwind info for epilogues" patch (which is not directly related). + + For -gdwarf-4 type units LOCATIONS_VALID indication is fortunately not + needed, it would be wrong due to missing DW_AT_producer there. + + Still one can confuse GDB by using non-standard GCC compilation + options - this waits on GCC PR other/32998 (-frecord-gcc-switches). + */ + if (cu->has_loclist && gcc_4_minor >= 5) + cust->locations_valid = 1; + + if (gcc_4_minor >= 5) + cust->epilogue_unwind_valid = 1; + + cust->call_site_htab = cu->call_site_htab; + } + + per_objfile->set_symtab (cu->per_cu, cust); + + /* Push it for inclusion processing later. */ + per_objfile->per_bfd->just_read_cus.push_back (cu->per_cu); + + /* Not needed any more. */ + cu->reset_builder (); +} + +/* Generate full symbol information for type unit CU, whose DIEs have + already been loaded into memory. */ + +static void +process_full_type_unit (dwarf2_cu *cu, + enum language pretend_language) +{ + dwarf2_per_objfile *per_objfile = cu->per_objfile; + struct objfile *objfile = per_objfile->objfile; + struct compunit_symtab *cust; + struct signatured_type *sig_type; + + gdb_assert (cu->per_cu->is_debug_types); + sig_type = (struct signatured_type *) cu->per_cu; + + /* Clear the list here in case something was left over. */ + cu->method_list.clear (); + + cu->language = pretend_language; + cu->language_defn = language_def (cu->language); + + /* The symbol tables are set up in read_type_unit_scope. */ + process_die (cu->dies, cu); + + /* For now fudge the Go package. */ + if (cu->language == language_go) + fixup_go_packaging (cu); + + /* Now that we have processed all the DIEs in the CU, all the types + should be complete, and it should now be safe to compute all of the + physnames. */ + compute_delayed_physnames (cu); + + if (cu->language == language_rust) + rust_union_quirks (cu); + + /* TUs share symbol tables. + If this is the first TU to use this symtab, complete the construction + of it with end_expandable_symtab. Otherwise, complete the addition of + this TU's symbols to the existing symtab. */ + type_unit_group_unshareable *tug_unshare = + per_objfile->get_type_unit_group_unshareable (sig_type->type_unit_group); + if (tug_unshare->compunit_symtab == NULL) + { + buildsym_compunit *builder = cu->get_builder (); + cust = builder->end_expandable_symtab (0, SECT_OFF_TEXT (objfile)); + tug_unshare->compunit_symtab = cust; + + if (cust != NULL) + { + /* Set symtab language to language from DW_AT_language. If the + compilation is from a C file generated by language preprocessors, + do not set the language if it was already deduced by + start_subfile. */ + if (!(cu->language == language_c + && COMPUNIT_FILETABS (cust)->language != language_c)) + COMPUNIT_FILETABS (cust)->language = cu->language; + } + } + else + { + cu->get_builder ()->augment_type_symtab (); + cust = tug_unshare->compunit_symtab; + } + + per_objfile->set_symtab (cu->per_cu, cust); + + /* Not needed any more. */ + cu->reset_builder (); +} + +/* Process an imported unit DIE. */ + +static void +process_imported_unit_die (struct die_info *die, struct dwarf2_cu *cu) +{ + struct attribute *attr; + + /* For now we don't handle imported units in type units. */ + if (cu->per_cu->is_debug_types) + { + error (_("Dwarf Error: DW_TAG_imported_unit is not" + " supported in type units [in module %s]"), + objfile_name (cu->per_objfile->objfile)); + } + + attr = dwarf2_attr (die, DW_AT_import, cu); + if (attr != NULL) + { + sect_offset sect_off = attr->get_ref_die_offset (); + bool is_dwz = (attr->form == DW_FORM_GNU_ref_alt || cu->per_cu->is_dwz); + dwarf2_per_objfile *per_objfile = cu->per_objfile; + dwarf2_per_cu_data *per_cu + = dwarf2_find_containing_comp_unit (sect_off, is_dwz, per_objfile); + + /* 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; + + /* If necessary, add it to the queue and load its DIEs. */ + if (maybe_queue_comp_unit (cu, per_cu, per_objfile, cu->language)) + load_full_comp_unit (per_cu, per_objfile, per_objfile->get_cu (per_cu), + false, cu->language); + + cu->per_cu->imported_symtabs_push (per_cu); + } +} + +/* RAII object that represents a process_die scope: i.e., + starts/finishes processing a DIE. */ +class process_die_scope +{ +public: + process_die_scope (die_info *die, dwarf2_cu *cu) + : m_die (die), m_cu (cu) + { + /* We should only be processing DIEs not already in process. */ + gdb_assert (!m_die->in_process); + m_die->in_process = true; + } + + ~process_die_scope () + { + m_die->in_process = false; + + /* If we're done processing the DIE for the CU that owns the line + header, we don't need the line header anymore. */ + if (m_cu->line_header_die_owner == m_die) + { + delete m_cu->line_header; + m_cu->line_header = NULL; + m_cu->line_header_die_owner = NULL; + } + } + +private: + die_info *m_die; + dwarf2_cu *m_cu; +}; + +/* Process a die and its children. */ + +static void +process_die (struct die_info *die, struct dwarf2_cu *cu) +{ + process_die_scope scope (die, cu); + + switch (die->tag) + { + case DW_TAG_padding: + break; + case DW_TAG_compile_unit: + case DW_TAG_partial_unit: + read_file_scope (die, cu); + break; + case DW_TAG_type_unit: + read_type_unit_scope (die, cu); + break; + case DW_TAG_subprogram: + /* Nested subprograms in Fortran get a prefix. */ + if (cu->language == language_fortran + && die->parent != NULL + && die->parent->tag == DW_TAG_subprogram) + cu->processing_has_namespace_info = true; + /* Fall through. */ + case DW_TAG_inlined_subroutine: + read_func_scope (die, cu); + break; + case DW_TAG_lexical_block: + case DW_TAG_try_block: + case DW_TAG_catch_block: + read_lexical_block_scope (die, cu); + break; + case DW_TAG_call_site: + case DW_TAG_GNU_call_site: + read_call_site_scope (die, cu); + break; + case DW_TAG_class_type: + case DW_TAG_interface_type: + case DW_TAG_structure_type: + case DW_TAG_union_type: + process_structure_scope (die, cu); + break; + case DW_TAG_enumeration_type: + process_enumeration_scope (die, cu); + break; + + /* 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. */ + case DW_TAG_subroutine_type: + case DW_TAG_set_type: + case DW_TAG_array_type: + case DW_TAG_pointer_type: + case DW_TAG_ptr_to_member_type: + case DW_TAG_reference_type: + case DW_TAG_rvalue_reference_type: + case DW_TAG_string_type: + break; + + case DW_TAG_base_type: + case DW_TAG_subrange_type: + case DW_TAG_typedef: + /* Add a typedef symbol for the type definition, if it has a + DW_AT_name. */ + new_symbol (die, read_type_die (die, cu), cu); + break; + case DW_TAG_common_block: + read_common_block (die, cu); + break; + case DW_TAG_common_inclusion: + break; + case DW_TAG_namespace: + cu->processing_has_namespace_info = true; + read_namespace (die, cu); + break; + case DW_TAG_module: + cu->processing_has_namespace_info = true; + read_module (die, cu); + break; + case DW_TAG_imported_declaration: + cu->processing_has_namespace_info = true; + if (read_namespace_alias (die, cu)) + break; + /* The declaration is not a global namespace alias. */ + /* Fall through. */ + case DW_TAG_imported_module: + cu->processing_has_namespace_info = true; + if (die->child != NULL && (die->tag == DW_TAG_imported_declaration + || cu->language != language_fortran)) + complaint (_("Tag '%s' has unexpected children"), + dwarf_tag_name (die->tag)); + read_import_statement (die, cu); + break; + + case DW_TAG_imported_unit: + process_imported_unit_die (die, cu); + break; + + case DW_TAG_variable: + read_variable (die, cu); + break; + + default: + new_symbol (die, NULL, cu); + break; + } +} + +/* DWARF name computation. */ + +/* A helper function for dwarf2_compute_name which determines whether DIE + needs to have the name of the scope prepended to the name listed in the + die. */ + +static int +die_needs_namespace (struct die_info *die, struct dwarf2_cu *cu) +{ + struct attribute *attr; + + switch (die->tag) + { + case DW_TAG_namespace: + case DW_TAG_typedef: + case DW_TAG_class_type: + case DW_TAG_interface_type: + case DW_TAG_structure_type: + case DW_TAG_union_type: + case DW_TAG_enumeration_type: + case DW_TAG_enumerator: + case DW_TAG_subprogram: + case DW_TAG_inlined_subroutine: + case DW_TAG_member: + case DW_TAG_imported_declaration: + return 1; + + case DW_TAG_variable: + case DW_TAG_constant: + /* We only need to prefix "globally" visible variables. These include + any variable marked with DW_AT_external or any variable that + lives in a namespace. [Variables in anonymous namespaces + require prefixing, but they are not DW_AT_external.] */ + + if (dwarf2_attr (die, DW_AT_specification, cu)) + { + struct dwarf2_cu *spec_cu = cu; + + return die_needs_namespace (die_specification (die, &spec_cu), + spec_cu); + } + + attr = dwarf2_attr (die, DW_AT_external, cu); + if (attr == NULL && die->parent->tag != DW_TAG_namespace + && die->parent->tag != DW_TAG_module) + return 0; + /* A variable in a lexical block of some kind does not need a + namespace, even though in C++ such variables may be external + and have a mangled name. */ + if (die->parent->tag == DW_TAG_lexical_block + || die->parent->tag == DW_TAG_try_block + || die->parent->tag == DW_TAG_catch_block + || die->parent->tag == DW_TAG_subprogram) + return 0; + return 1; + + default: + return 0; + } +} + +/* Return the DIE's linkage name attribute, either DW_AT_linkage_name + or DW_AT_MIPS_linkage_name. Returns NULL if the attribute is not + defined for the given DIE. */ + +static struct attribute * +dw2_linkage_name_attr (struct die_info *die, struct dwarf2_cu *cu) +{ + struct attribute *attr; + + attr = dwarf2_attr (die, DW_AT_linkage_name, cu); + if (attr == NULL) + attr = dwarf2_attr (die, DW_AT_MIPS_linkage_name, cu); + + return attr; +} + +/* Return the DIE's linkage name as a string, either DW_AT_linkage_name + or DW_AT_MIPS_linkage_name. Returns NULL if the attribute is not + defined for the given DIE. */ + +static const char * +dw2_linkage_name (struct die_info *die, struct dwarf2_cu *cu) +{ + const char *linkage_name; + + linkage_name = dwarf2_string_attr (die, DW_AT_linkage_name, cu); + if (linkage_name == NULL) + linkage_name = dwarf2_string_attr (die, DW_AT_MIPS_linkage_name, cu); + + /* rustc emits invalid values for DW_AT_linkage_name. Ignore these. + See https://github.com/rust-lang/rust/issues/32925. */ + if (cu->language == language_rust && linkage_name != NULL + && strchr (linkage_name, '{') != NULL) + linkage_name = NULL; + + return linkage_name; +} + +/* Compute the fully qualified name of DIE in CU. If PHYSNAME is nonzero, + compute the physname for the object, which include a method's: + - formal parameters (C++), + - receiver type (Go), + + The term "physname" is a bit confusing. + For C++, for example, it is the demangled name. + For Go, for example, it's the mangled name. + + For Ada, return the DIE's linkage name rather than the fully qualified + name. PHYSNAME is ignored.. + + The result is allocated on the objfile->per_bfd's obstack and + canonicalized. */ + +static const char * +dwarf2_compute_name (const char *name, + struct die_info *die, struct dwarf2_cu *cu, + int physname) +{ + struct objfile *objfile = cu->per_objfile->objfile; + + if (name == NULL) + name = dwarf2_name (die, cu); + + /* For Fortran GDB prefers DW_AT_*linkage_name for the physname if present + but otherwise compute it by typename_concat inside GDB. + FIXME: Actually this is not really true, or at least not always true. + It's all very confusing. compute_and_set_names doesn't try to demangle + Fortran names because there is no mangling standard. So new_symbol + will set the demangled name to the result of dwarf2_full_name, and it is + the demangled name that GDB uses if it exists. */ + if (cu->language == language_ada + || (cu->language == language_fortran && physname)) + { + /* For Ada unit, we prefer the linkage name over the name, as + the former contains the exported name, which the user expects + to be able to reference. Ideally, we want the user to be able + to reference this entity using either natural or linkage name, + but we haven't started looking at this enhancement yet. */ + const char *linkage_name = dw2_linkage_name (die, cu); + + if (linkage_name != NULL) + return linkage_name; + } + + /* These are the only languages we know how to qualify names in. */ + if (name != NULL + && (cu->language == language_cplus + || cu->language == language_fortran || cu->language == language_d + || cu->language == language_rust)) + { + if (die_needs_namespace (die, cu)) + { + const char *prefix; + const char *canonical_name = NULL; + + string_file buf; + + prefix = determine_prefix (die, cu); + if (*prefix != '\0') + { + gdb::unique_xmalloc_ptr<char> prefixed_name + (typename_concat (NULL, prefix, name, physname, cu)); + + buf.puts (prefixed_name.get ()); + } + else + buf.puts (name); + + /* Template parameters may be specified in the DIE's DW_AT_name, or + as children with DW_TAG_template_type_param or + DW_TAG_value_type_param. If the latter, add them to the name + here. If the name already has template parameters, then + skip this step; some versions of GCC emit both, and + it is more efficient to use the pre-computed name. + + Something to keep in mind about this process: it is very + unlikely, or in some cases downright impossible, to produce + something that will match the mangled name of a function. + If the definition of the function has the same debug info, + we should be able to match up with it anyway. But fallbacks + using the minimal symbol, for instance to find a method + implemented in a stripped copy of libstdc++, will not work. + If we do not have debug info for the definition, we will have to + match them up some other way. + + When we do name matching there is a related problem with function + templates; two instantiated function templates are allowed to + differ only by their return types, which we do not add here. */ + + if (cu->language == language_cplus && strchr (name, '<') == NULL) + { + struct attribute *attr; + struct die_info *child; + int first = 1; + + die->building_fullname = 1; + + for (child = die->child; child != NULL; child = child->sibling) + { + struct type *type; + LONGEST value; + const gdb_byte *bytes; + struct dwarf2_locexpr_baton *baton; + struct value *v; + + if (child->tag != DW_TAG_template_type_param + && child->tag != DW_TAG_template_value_param) + continue; + + if (first) + { + buf.puts ("<"); + first = 0; + } + else + buf.puts (", "); + + attr = dwarf2_attr (child, DW_AT_type, cu); + if (attr == NULL) + { + complaint (_("template parameter missing DW_AT_type")); + buf.puts ("UNKNOWN_TYPE"); + continue; + } + type = die_type (child, cu); + + if (child->tag == DW_TAG_template_type_param) + { + c_print_type (type, "", &buf, -1, 0, cu->language, + &type_print_raw_options); + continue; + } + + attr = dwarf2_attr (child, DW_AT_const_value, cu); + if (attr == NULL) + { + complaint (_("template parameter missing " + "DW_AT_const_value")); + buf.puts ("UNKNOWN_VALUE"); + continue; + } + + dwarf2_const_value_attr (attr, type, name, + &cu->comp_unit_obstack, cu, + &value, &bytes, &baton); + + if (TYPE_NOSIGN (type)) + /* GDB prints characters as NUMBER 'CHAR'. If that's + changed, this can use value_print instead. */ + c_printchar (value, type, &buf); + else + { + struct value_print_options opts; + + if (baton != NULL) + v = dwarf2_evaluate_loc_desc (type, NULL, + baton->data, + baton->size, + baton->per_cu, + baton->per_objfile); + else if (bytes != NULL) + { + v = allocate_value (type); + memcpy (value_contents_writeable (v), bytes, + TYPE_LENGTH (type)); + } + else + v = value_from_longest (type, value); + + /* Specify decimal so that we do not depend on + the radix. */ + get_formatted_print_options (&opts, 'd'); + opts.raw = 1; + value_print (v, &buf, &opts); + release_value (v); + } + } + + die->building_fullname = 0; + + if (!first) + { + /* Close the argument list, with a space if necessary + (nested templates). */ + if (!buf.empty () && buf.string ().back () == '>') + buf.puts (" >"); + else + buf.puts (">"); + } + } + + /* For C++ methods, append formal parameter type + information, if PHYSNAME. */ + + if (physname && die->tag == DW_TAG_subprogram + && cu->language == language_cplus) + { + struct type *type = read_type_die (die, cu); + + c_type_print_args (type, &buf, 1, cu->language, + &type_print_raw_options); + + if (cu->language == language_cplus) + { + /* Assume that an artificial first parameter is + "this", but do not crash if it is not. RealView + marks unnamed (and thus unused) parameters as + artificial; there is no way to differentiate + the two cases. */ + if (type->num_fields () > 0 + && TYPE_FIELD_ARTIFICIAL (type, 0) + && type->field (0).type ()->code () == TYPE_CODE_PTR + && TYPE_CONST (TYPE_TARGET_TYPE (type->field (0).type ()))) + buf.puts (" const"); + } + } + + const std::string &intermediate_name = buf.string (); + + if (cu->language == language_cplus) + canonical_name + = dwarf2_canonicalize_name (intermediate_name.c_str (), cu, + objfile); + + /* If we only computed INTERMEDIATE_NAME, or if + INTERMEDIATE_NAME is already canonical, then we need to + intern it. */ + if (canonical_name == NULL || canonical_name == intermediate_name.c_str ()) + name = objfile->intern (intermediate_name); + else + name = canonical_name; + } + } + + return name; +} + +/* Return the fully qualified name of DIE, based on its DW_AT_name. + If scope qualifiers are appropriate they will be added. The result + will be allocated on the storage_obstack, or NULL if the DIE does + not have a name. NAME may either be from a previous call to + dwarf2_name or NULL. + + The output string will be canonicalized (if C++). */ + +static const char * +dwarf2_full_name (const char *name, struct die_info *die, struct dwarf2_cu *cu) +{ + return dwarf2_compute_name (name, die, cu, 0); +} + +/* Construct a physname for the given DIE in CU. NAME may either be + from a previous call to dwarf2_name or NULL. The result will be + allocated on the objfile_objstack or NULL if the DIE does not have a + name. + + The output string will be canonicalized (if C++). */ + +static const char * +dwarf2_physname (const char *name, struct die_info *die, struct dwarf2_cu *cu) +{ + struct objfile *objfile = cu->per_objfile->objfile; + const char *retval, *mangled = NULL, *canon = NULL; + int need_copy = 1; + + /* In this case dwarf2_compute_name is just a shortcut not building anything + on its own. */ + if (!die_needs_namespace (die, cu)) + return dwarf2_compute_name (name, die, cu, 1); + + if (cu->language != language_rust) + mangled = dw2_linkage_name (die, cu); + + /* DW_AT_linkage_name is missing in some cases - depend on what GDB + has computed. */ + gdb::unique_xmalloc_ptr<char> demangled; + if (mangled != NULL) + { + + if (language_def (cu->language)->la_store_sym_names_in_linkage_form_p) + { + /* Do nothing (do not demangle the symbol name). */ + } + else if (cu->language == language_go) + { + /* This is a lie, but we already lie to the caller new_symbol. + new_symbol assumes we return the mangled name. + This just undoes that lie until things are cleaned up. */ + } + else + { + /* Use DMGL_RET_DROP for C++ template functions to suppress + their return type. It is easier for GDB users to search + for such functions as `name(params)' than `long name(params)'. + In such case the minimal symbol names do not match the full + symbol names but for template functions there is never a need + to look up their definition from their declaration so + the only disadvantage remains the minimal symbol variant + `long name(params)' does not have the proper inferior type. */ + demangled.reset (gdb_demangle (mangled, + (DMGL_PARAMS | DMGL_ANSI + | DMGL_RET_DROP))); + } + if (demangled) + canon = demangled.get (); + else + { + canon = mangled; + need_copy = 0; + } + } + + if (canon == NULL || check_physname) + { + const char *physname = dwarf2_compute_name (name, die, cu, 1); + + if (canon != NULL && strcmp (physname, canon) != 0) + { + /* It may not mean a bug in GDB. The compiler could also + compute DW_AT_linkage_name incorrectly. But in such case + GDB would need to be bug-to-bug compatible. */ + + complaint (_("Computed physname <%s> does not match demangled <%s> " + "(from linkage <%s>) - DIE at %s [in module %s]"), + physname, canon, mangled, sect_offset_str (die->sect_off), + objfile_name (objfile)); + + /* Prefer DW_AT_linkage_name (in the CANON form) - when it + is available here - over computed PHYSNAME. It is safer + against both buggy GDB and buggy compilers. */ + + retval = canon; + } + else + { + retval = physname; + need_copy = 0; + } + } + else + retval = canon; + + if (need_copy) + retval = objfile->intern (retval); + + return retval; +} + +/* Inspect DIE in CU for a namespace alias. If one exists, record + a new symbol for it. + + Returns 1 if a namespace alias was recorded, 0 otherwise. */ + +static int +read_namespace_alias (struct die_info *die, struct dwarf2_cu *cu) +{ + struct attribute *attr; + + /* If the die does not have a name, this is not a namespace + alias. */ + attr = dwarf2_attr (die, DW_AT_name, cu); + if (attr != NULL) + { + int num; + struct die_info *d = die; + struct dwarf2_cu *imported_cu = cu; + + /* If the compiler has nested DW_AT_imported_declaration DIEs, + keep inspecting DIEs until we hit the underlying import. */ +#define MAX_NESTED_IMPORTED_DECLARATIONS 100 + for (num = 0; num < MAX_NESTED_IMPORTED_DECLARATIONS; ++num) + { + attr = dwarf2_attr (d, DW_AT_import, cu); + if (attr == NULL) + break; + + d = follow_die_ref (d, attr, &imported_cu); + if (d->tag != DW_TAG_imported_declaration) + break; + } + + if (num == MAX_NESTED_IMPORTED_DECLARATIONS) + { + complaint (_("DIE at %s has too many recursively imported " + "declarations"), sect_offset_str (d->sect_off)); + return 0; + } + + if (attr != NULL) + { + struct type *type; + sect_offset sect_off = attr->get_ref_die_offset (); + + type = get_die_type_at_offset (sect_off, cu->per_cu, cu->per_objfile); + if (type != NULL && type->code () == TYPE_CODE_NAMESPACE) + { + /* This declaration is a global namespace alias. Add + a symbol for it whose type is the aliased namespace. */ + new_symbol (die, type, cu); + return 1; + } + } + } + + return 0; +} + +/* Return the using directives repository (global or local?) to use in the + current context for CU. + + For Ada, imported declarations can materialize renamings, which *may* be + global. However it is impossible (for now?) in DWARF to distinguish + "external" imported declarations and "static" ones. As all imported + declarations seem to be static in all other languages, make them all CU-wide + global only in Ada. */ + +static struct using_direct ** +using_directives (struct dwarf2_cu *cu) +{ + if (cu->language == language_ada + && cu->get_builder ()->outermost_context_p ()) + return cu->get_builder ()->get_global_using_directives (); + else + return cu->get_builder ()->get_local_using_directives (); +} + +/* Read the import statement specified by the given die and record it. */ + +static void +read_import_statement (struct die_info *die, struct dwarf2_cu *cu) +{ + struct objfile *objfile = cu->per_objfile->objfile; + struct attribute *import_attr; + struct die_info *imported_die, *child_die; + struct dwarf2_cu *imported_cu; + const char *imported_name; + const char *imported_name_prefix; + const char *canonical_name; + const char *import_alias; + const char *imported_declaration = NULL; + const char *import_prefix; + std::vector<const char *> excludes; + + import_attr = dwarf2_attr (die, DW_AT_import, cu); + if (import_attr == NULL) + { + complaint (_("Tag '%s' has no DW_AT_import"), + dwarf_tag_name (die->tag)); + return; + } + + imported_cu = cu; + imported_die = follow_die_ref_or_sig (die, import_attr, &imported_cu); + imported_name = dwarf2_name (imported_die, imported_cu); + if (imported_name == NULL) + { + /* GCC bug: https://bugzilla.redhat.com/show_bug.cgi?id=506524 + + The import in the following code: + namespace A + { + typedef int B; + } + + int main () + { + using A::B; + B b; + return b; + } + + ... + <2><51>: Abbrev Number: 3 (DW_TAG_imported_declaration) + <52> DW_AT_decl_file : 1 + <53> DW_AT_decl_line : 6 + <54> DW_AT_import : <0x75> + <2><58>: Abbrev Number: 4 (DW_TAG_typedef) + <59> DW_AT_name : B + <5b> DW_AT_decl_file : 1 + <5c> DW_AT_decl_line : 2 + <5d> DW_AT_type : <0x6e> + ... + <1><75>: Abbrev Number: 7 (DW_TAG_base_type) + <76> DW_AT_byte_size : 4 + <77> DW_AT_encoding : 5 (signed) + + imports the wrong die ( 0x75 instead of 0x58 ). + This case will be ignored until the gcc bug is fixed. */ + return; + } + + /* Figure out the local name after import. */ + import_alias = dwarf2_name (die, cu); + + /* Figure out where the statement is being imported to. */ + import_prefix = determine_prefix (die, cu); + + /* Figure out what the scope of the imported die is and prepend it + to the name of the imported die. */ + imported_name_prefix = determine_prefix (imported_die, imported_cu); + + if (imported_die->tag != DW_TAG_namespace + && imported_die->tag != DW_TAG_module) + { + imported_declaration = imported_name; + canonical_name = imported_name_prefix; + } + else if (strlen (imported_name_prefix) > 0) + canonical_name = obconcat (&objfile->objfile_obstack, + imported_name_prefix, + (cu->language == language_d ? "." : "::"), + imported_name, (char *) NULL); + else + canonical_name = imported_name; + + if (die->tag == DW_TAG_imported_module && cu->language == language_fortran) + for (child_die = die->child; child_die && child_die->tag; + child_die = child_die->sibling) + { + /* DWARF-4: A Fortran use statement with a “rename list†may be + represented by an imported module entry with an import attribute + referring to the module and owned entries corresponding to those + entities that are renamed as part of being imported. */ + + if (child_die->tag != DW_TAG_imported_declaration) + { + complaint (_("child DW_TAG_imported_declaration expected " + "- DIE at %s [in module %s]"), + sect_offset_str (child_die->sect_off), + objfile_name (objfile)); + continue; + } + + import_attr = dwarf2_attr (child_die, DW_AT_import, cu); + if (import_attr == NULL) + { + complaint (_("Tag '%s' has no DW_AT_import"), + dwarf_tag_name (child_die->tag)); + continue; + } + + imported_cu = cu; + imported_die = follow_die_ref_or_sig (child_die, import_attr, + &imported_cu); + imported_name = dwarf2_name (imported_die, imported_cu); + if (imported_name == NULL) + { + complaint (_("child DW_TAG_imported_declaration has unknown " + "imported name - DIE at %s [in module %s]"), + sect_offset_str (child_die->sect_off), + objfile_name (objfile)); + continue; + } + + excludes.push_back (imported_name); + + process_die (child_die, cu); + } + + add_using_directive (using_directives (cu), + import_prefix, + canonical_name, + import_alias, + imported_declaration, + excludes, + 0, + &objfile->objfile_obstack); +} + +/* ICC<14 does not output the required DW_AT_declaration on incomplete + types, but gives them a size of zero. Starting with version 14, + ICC is compatible with GCC. */ + +static bool +producer_is_icc_lt_14 (struct dwarf2_cu *cu) +{ + if (!cu->checked_producer) + check_producer (cu); + + return cu->producer_is_icc_lt_14; +} + +/* ICC generates a DW_AT_type for C void functions. This was observed on + ICC 14.0.5.212, and appears to be against the DWARF spec (V5 3.3.2) + which says that void functions should not have a DW_AT_type. */ + +static bool +producer_is_icc (struct dwarf2_cu *cu) +{ + if (!cu->checked_producer) + check_producer (cu); + + return cu->producer_is_icc; +} + +/* Check for possibly missing DW_AT_comp_dir with relative .debug_line + directory paths. GCC SVN r127613 (new option -fdebug-prefix-map) fixed + this, it was first present in GCC release 4.3.0. */ + +static bool +producer_is_gcc_lt_4_3 (struct dwarf2_cu *cu) +{ + if (!cu->checked_producer) + check_producer (cu); + + return cu->producer_is_gcc_lt_4_3; +} + +static file_and_directory +find_file_and_directory (struct die_info *die, struct dwarf2_cu *cu) +{ + file_and_directory res; + + /* Find the filename. Do not use dwarf2_name here, since the filename + is not a source language identifier. */ + res.name = dwarf2_string_attr (die, DW_AT_name, cu); + res.comp_dir = dwarf2_string_attr (die, DW_AT_comp_dir, cu); + + if (res.comp_dir == NULL + && producer_is_gcc_lt_4_3 (cu) && res.name != NULL + && IS_ABSOLUTE_PATH (res.name)) + { + res.comp_dir_storage = ldirname (res.name); + if (!res.comp_dir_storage.empty ()) + res.comp_dir = res.comp_dir_storage.c_str (); + } + if (res.comp_dir != NULL) + { + /* Irix 6.2 native cc prepends <machine>.: to the compilation + directory, get rid of it. */ + const char *cp = strchr (res.comp_dir, ':'); + + if (cp && cp != res.comp_dir && cp[-1] == '.' && cp[1] == '/') + res.comp_dir = cp + 1; + } + + if (res.name == NULL) + res.name = "<unknown>"; + + return res; +} + +/* Handle DW_AT_stmt_list for a compilation unit. + DIE is the DW_TAG_compile_unit die for CU. + COMP_DIR is the compilation directory. LOWPC is passed to + dwarf_decode_lines. See dwarf_decode_lines comments about it. */ + +static void +handle_DW_AT_stmt_list (struct die_info *die, struct dwarf2_cu *cu, + const char *comp_dir, CORE_ADDR lowpc) /* ARI: editCase function */ +{ + dwarf2_per_objfile *per_objfile = cu->per_objfile; + struct attribute *attr; + struct line_header line_header_local; + hashval_t line_header_local_hash; + void **slot; + int decode_mapping; + + gdb_assert (! cu->per_cu->is_debug_types); + + attr = dwarf2_attr (die, DW_AT_stmt_list, cu); + if (attr == NULL) + return; + + sect_offset line_offset = (sect_offset) DW_UNSND (attr); + + /* The line header hash table is only created if needed (it exists to + prevent redundant reading of the line table for partial_units). + If we're given a partial_unit, we'll need it. If we're given a + compile_unit, then use the line header hash table if it's already + created, but don't create one just yet. */ + + if (per_objfile->line_header_hash == NULL + && die->tag == DW_TAG_partial_unit) + { + per_objfile->line_header_hash + .reset (htab_create_alloc (127, line_header_hash_voidp, + line_header_eq_voidp, + free_line_header_voidp, + xcalloc, xfree)); + } + + line_header_local.sect_off = line_offset; + line_header_local.offset_in_dwz = cu->per_cu->is_dwz; + line_header_local_hash = line_header_hash (&line_header_local); + if (per_objfile->line_header_hash != NULL) + { + slot = htab_find_slot_with_hash (per_objfile->line_header_hash.get (), + &line_header_local, + line_header_local_hash, NO_INSERT); + + /* For DW_TAG_compile_unit we need info like symtab::linetable which + is not present in *SLOT (since if there is something in *SLOT then + it will be for a partial_unit). */ + if (die->tag == DW_TAG_partial_unit && slot != NULL) + { + gdb_assert (*slot != NULL); + cu->line_header = (struct line_header *) *slot; + return; + } + } + + /* dwarf_decode_line_header does not yet provide sufficient information. + We always have to call also dwarf_decode_lines for it. */ + line_header_up lh = dwarf_decode_line_header (line_offset, cu); + if (lh == NULL) + return; + + cu->line_header = lh.release (); + cu->line_header_die_owner = die; + + if (per_objfile->line_header_hash == NULL) + slot = NULL; + else + { + slot = htab_find_slot_with_hash (per_objfile->line_header_hash.get (), + &line_header_local, + line_header_local_hash, INSERT); + gdb_assert (slot != NULL); + } + if (slot != NULL && *slot == NULL) + { + /* This newly decoded line number information unit will be owned + by line_header_hash hash table. */ + *slot = cu->line_header; + cu->line_header_die_owner = NULL; + } + else + { + /* We cannot free any current entry in (*slot) as that struct line_header + may be already used by multiple CUs. Create only temporary decoded + line_header for this CU - it may happen at most once for each line + number information unit. And if we're not using line_header_hash + then this is what we want as well. */ + gdb_assert (die->tag != DW_TAG_partial_unit); + } + decode_mapping = (die->tag != DW_TAG_partial_unit); + dwarf_decode_lines (cu->line_header, comp_dir, cu, NULL, lowpc, + decode_mapping); + +} + +/* Process DW_TAG_compile_unit or DW_TAG_partial_unit. */ + +static void +read_file_scope (struct die_info *die, struct dwarf2_cu *cu) +{ + dwarf2_per_objfile *per_objfile = cu->per_objfile; + struct objfile *objfile = per_objfile->objfile; + struct gdbarch *gdbarch = objfile->arch (); + CORE_ADDR lowpc = ((CORE_ADDR) -1); + CORE_ADDR highpc = ((CORE_ADDR) 0); + struct attribute *attr; + struct die_info *child_die; + CORE_ADDR baseaddr; + + prepare_one_comp_unit (cu, die, cu->language); + baseaddr = objfile->text_section_offset (); + + get_scope_pc_bounds (die, &lowpc, &highpc, cu); + + /* If we didn't find a lowpc, set it to highpc to avoid complaints + from finish_block. */ + if (lowpc == ((CORE_ADDR) -1)) + lowpc = highpc; + lowpc = gdbarch_adjust_dwarf2_addr (gdbarch, lowpc + baseaddr); + + file_and_directory fnd = find_file_and_directory (die, cu); + + /* The XLCL doesn't generate DW_LANG_OpenCL because this attribute is not + standardised yet. As a workaround for the language detection we fall + back to the DW_AT_producer string. */ + if (cu->producer && strstr (cu->producer, "IBM XL C for OpenCL") != NULL) + cu->language = language_opencl; + + /* Similar hack for Go. */ + if (cu->producer && strstr (cu->producer, "GNU Go ") != NULL) + set_cu_language (DW_LANG_Go, cu); + + cu->start_symtab (fnd.name, fnd.comp_dir, lowpc); + + /* Decode line number information if present. We do this before + processing child DIEs, so that the line header table is available + for DW_AT_decl_file. */ + handle_DW_AT_stmt_list (die, cu, fnd.comp_dir, lowpc); + + /* Process all dies in compilation unit. */ + if (die->child != NULL) + { + child_die = die->child; + while (child_die && child_die->tag) + { + process_die (child_die, cu); + child_die = child_die->sibling; + } + } + + /* Decode macro information, if present. Dwarf 2 macro information + refers to information in the line number info statement program + header, so we can only read it if we've read the header + successfully. */ + attr = dwarf2_attr (die, DW_AT_macros, cu); + if (attr == NULL) + attr = dwarf2_attr (die, DW_AT_GNU_macros, cu); + if (attr && cu->line_header) + { + if (dwarf2_attr (die, DW_AT_macro_info, cu)) + complaint (_("CU refers to both DW_AT_macros and DW_AT_macro_info")); + + dwarf_decode_macros (cu, DW_UNSND (attr), 1); + } + else + { + attr = dwarf2_attr (die, DW_AT_macro_info, cu); + if (attr && cu->line_header) + { + unsigned int macro_offset = DW_UNSND (attr); + + dwarf_decode_macros (cu, macro_offset, 0); + } + } +} + +void +dwarf2_cu::setup_type_unit_groups (struct die_info *die) +{ + struct type_unit_group *tu_group; + int first_time; + struct attribute *attr; + unsigned int i; + struct signatured_type *sig_type; + + gdb_assert (per_cu->is_debug_types); + sig_type = (struct signatured_type *) per_cu; + + attr = dwarf2_attr (die, DW_AT_stmt_list, this); + + /* If we're using .gdb_index (includes -readnow) then + per_cu->type_unit_group may not have been set up yet. */ + if (sig_type->type_unit_group == NULL) + sig_type->type_unit_group = get_type_unit_group (this, attr); + tu_group = sig_type->type_unit_group; + + /* If we've already processed this stmt_list there's no real need to + do it again, we could fake it and just recreate the part we need + (file name,index -> symtab mapping). If data shows this optimization + is useful we can do it then. */ + type_unit_group_unshareable *tug_unshare + = per_objfile->get_type_unit_group_unshareable (tu_group); + first_time = tug_unshare->compunit_symtab == NULL; + + /* We have to handle the case of both a missing DW_AT_stmt_list or bad + debug info. */ + line_header_up lh; + if (attr != NULL) + { + sect_offset line_offset = (sect_offset) DW_UNSND (attr); + lh = dwarf_decode_line_header (line_offset, this); + } + if (lh == NULL) + { + if (first_time) + start_symtab ("", NULL, 0); + else + { + gdb_assert (tug_unshare->symtabs == NULL); + gdb_assert (m_builder == nullptr); + struct compunit_symtab *cust = tug_unshare->compunit_symtab; + m_builder.reset (new struct buildsym_compunit + (COMPUNIT_OBJFILE (cust), "", + COMPUNIT_DIRNAME (cust), + compunit_language (cust), + 0, cust)); + list_in_scope = get_builder ()->get_file_symbols (); + } + return; + } + + line_header = lh.release (); + line_header_die_owner = die; + + if (first_time) + { + struct compunit_symtab *cust = start_symtab ("", NULL, 0); + + /* Note: We don't assign tu_group->compunit_symtab yet because we're + still initializing it, and our caller (a few levels up) + process_full_type_unit still needs to know if this is the first + time. */ + + tug_unshare->symtabs + = XOBNEWVEC (&COMPUNIT_OBJFILE (cust)->objfile_obstack, + struct symtab *, line_header->file_names_size ()); + + auto &file_names = line_header->file_names (); + for (i = 0; i < file_names.size (); ++i) + { + file_entry &fe = file_names[i]; + dwarf2_start_subfile (this, fe.name, + fe.include_dir (line_header)); + buildsym_compunit *b = get_builder (); + if (b->get_current_subfile ()->symtab == NULL) + { + /* NOTE: start_subfile will recognize when it's been + passed a file it has already seen. So we can't + assume there's a simple mapping from + cu->line_header->file_names to subfiles, plus + cu->line_header->file_names may contain dups. */ + b->get_current_subfile ()->symtab + = allocate_symtab (cust, b->get_current_subfile ()->name); + } + + fe.symtab = b->get_current_subfile ()->symtab; + tug_unshare->symtabs[i] = fe.symtab; + } + } + else + { + gdb_assert (m_builder == nullptr); + struct compunit_symtab *cust = tug_unshare->compunit_symtab; + m_builder.reset (new struct buildsym_compunit + (COMPUNIT_OBJFILE (cust), "", + COMPUNIT_DIRNAME (cust), + compunit_language (cust), + 0, cust)); + list_in_scope = get_builder ()->get_file_symbols (); + + auto &file_names = line_header->file_names (); + for (i = 0; i < file_names.size (); ++i) + { + file_entry &fe = file_names[i]; + fe.symtab = tug_unshare->symtabs[i]; + } + } + + /* The main symtab is allocated last. Type units don't have DW_AT_name + so they don't have a "real" (so to speak) symtab anyway. + There is later code that will assign the main symtab to all symbols + that don't have one. We need to handle the case of a symbol with a + missing symtab (DW_AT_decl_file) anyway. */ +} + +/* Process DW_TAG_type_unit. + For TUs we want to skip the first top level sibling if it's not the + actual type being defined by this TU. In this case the first top + level sibling is there to provide context only. */ + +static void +read_type_unit_scope (struct die_info *die, struct dwarf2_cu *cu) +{ + struct die_info *child_die; + + prepare_one_comp_unit (cu, die, language_minimal); + + /* Initialize (or reinitialize) the machinery for building symtabs. + We do this before processing child DIEs, so that the line header table + is available for DW_AT_decl_file. */ + cu->setup_type_unit_groups (die); + + if (die->child != NULL) + { + child_die = die->child; + while (child_die && child_die->tag) + { + process_die (child_die, cu); + child_die = child_die->sibling; + } + } +} + +/* DWO/DWP files. + + http://gcc.gnu.org/wiki/DebugFission + http://gcc.gnu.org/wiki/DebugFissionDWP + + To simplify handling of both DWO files ("object" files with the DWARF info) + and DWP files (a file with the DWOs packaged up into one file), we treat + DWP files as having a collection of virtual DWO files. */ + +static hashval_t +hash_dwo_file (const void *item) +{ + const struct dwo_file *dwo_file = (const struct dwo_file *) item; + hashval_t hash; + + hash = htab_hash_string (dwo_file->dwo_name); + if (dwo_file->comp_dir != NULL) + hash += htab_hash_string (dwo_file->comp_dir); + return hash; +} + +static int +eq_dwo_file (const void *item_lhs, const void *item_rhs) +{ + const struct dwo_file *lhs = (const struct dwo_file *) item_lhs; + const struct dwo_file *rhs = (const struct dwo_file *) item_rhs; + + if (strcmp (lhs->dwo_name, rhs->dwo_name) != 0) + return 0; + if (lhs->comp_dir == NULL || rhs->comp_dir == NULL) + return lhs->comp_dir == rhs->comp_dir; + return strcmp (lhs->comp_dir, rhs->comp_dir) == 0; +} + +/* Allocate a hash table for DWO files. */ + +static htab_up +allocate_dwo_file_hash_table () +{ + auto delete_dwo_file = [] (void *item) + { + struct dwo_file *dwo_file = (struct dwo_file *) item; + + delete dwo_file; + }; + + return htab_up (htab_create_alloc (41, + hash_dwo_file, + eq_dwo_file, + delete_dwo_file, + xcalloc, xfree)); +} + +/* Lookup DWO file DWO_NAME. */ + +static void ** +lookup_dwo_file_slot (dwarf2_per_objfile *per_objfile, + const char *dwo_name, + const char *comp_dir) +{ + struct dwo_file find_entry; + void **slot; + + if (per_objfile->per_bfd->dwo_files == NULL) + per_objfile->per_bfd->dwo_files = allocate_dwo_file_hash_table (); + + find_entry.dwo_name = dwo_name; + find_entry.comp_dir = comp_dir; + slot = htab_find_slot (per_objfile->per_bfd->dwo_files.get (), &find_entry, + INSERT); + + return slot; +} + +static hashval_t +hash_dwo_unit (const void *item) +{ + const struct dwo_unit *dwo_unit = (const struct dwo_unit *) item; + + /* This drops the top 32 bits of the id, but is ok for a hash. */ + return dwo_unit->signature; +} + +static int +eq_dwo_unit (const void *item_lhs, const void *item_rhs) +{ + const struct dwo_unit *lhs = (const struct dwo_unit *) item_lhs; + const struct dwo_unit *rhs = (const struct dwo_unit *) item_rhs; + + /* The signature is assumed to be unique within the DWO file. + So while object file CU dwo_id's always have the value zero, + that's OK, assuming each object file DWO file has only one CU, + and that's the rule for now. */ + return lhs->signature == rhs->signature; +} + +/* Allocate a hash table for DWO CUs,TUs. + There is one of these tables for each of CUs,TUs for each DWO file. */ + +static htab_up +allocate_dwo_unit_table () +{ + /* Start out with a pretty small number. + Generally DWO files contain only one CU and maybe some TUs. */ + return htab_up (htab_create_alloc (3, + hash_dwo_unit, + eq_dwo_unit, + NULL, xcalloc, xfree)); +} + +/* die_reader_func for create_dwo_cu. */ + +static void +create_dwo_cu_reader (const struct die_reader_specs *reader, + const gdb_byte *info_ptr, + struct die_info *comp_unit_die, + struct dwo_file *dwo_file, + struct dwo_unit *dwo_unit) +{ + struct dwarf2_cu *cu = reader->cu; + sect_offset sect_off = cu->per_cu->sect_off; + struct dwarf2_section_info *section = cu->per_cu->section; + + gdb::optional<ULONGEST> signature = lookup_dwo_id (cu, comp_unit_die); + if (!signature.has_value ()) + { + complaint (_("Dwarf Error: debug entry at offset %s is missing" + " its dwo_id [in module %s]"), + sect_offset_str (sect_off), dwo_file->dwo_name); + return; + } + + dwo_unit->dwo_file = dwo_file; + dwo_unit->signature = *signature; + dwo_unit->section = section; + dwo_unit->sect_off = sect_off; + dwo_unit->length = cu->per_cu->length; + + if (dwarf_read_debug) + fprintf_unfiltered (gdb_stdlog, " offset %s, dwo_id %s\n", + sect_offset_str (sect_off), + hex_string (dwo_unit->signature)); +} + +/* Create the dwo_units for the CUs in a DWO_FILE. + Note: This function processes DWO files only, not DWP files. */ + +static void +create_cus_hash_table (dwarf2_per_objfile *per_objfile, + dwarf2_cu *cu, struct dwo_file &dwo_file, + dwarf2_section_info §ion, htab_up &cus_htab) +{ + struct objfile *objfile = per_objfile->objfile; + dwarf2_per_bfd *per_bfd = per_objfile->per_bfd; + const gdb_byte *info_ptr, *end_ptr; + + section.read (objfile); + info_ptr = section.buffer; + + if (info_ptr == NULL) + return; + + if (dwarf_read_debug) + { + fprintf_unfiltered (gdb_stdlog, "Reading %s for %s:\n", + section.get_name (), + section.get_file_name ()); + } + + end_ptr = info_ptr + section.size; + while (info_ptr < end_ptr) + { + struct dwarf2_per_cu_data per_cu; + struct dwo_unit read_unit {}; + struct dwo_unit *dwo_unit; + void **slot; + sect_offset sect_off = (sect_offset) (info_ptr - section.buffer); + + memset (&per_cu, 0, sizeof (per_cu)); + per_cu.per_bfd = per_bfd; + per_cu.is_debug_types = 0; + per_cu.sect_off = sect_offset (info_ptr - section.buffer); + per_cu.section = §ion; + + cutu_reader reader (&per_cu, per_objfile, cu, &dwo_file); + if (!reader.dummy_p) + create_dwo_cu_reader (&reader, reader.info_ptr, reader.comp_unit_die, + &dwo_file, &read_unit); + info_ptr += per_cu.length; + + // If the unit could not be parsed, skip it. + if (read_unit.dwo_file == NULL) + continue; + + if (cus_htab == NULL) + cus_htab = allocate_dwo_unit_table (); + + dwo_unit = OBSTACK_ZALLOC (&per_bfd->obstack, + struct dwo_unit); + *dwo_unit = read_unit; + slot = htab_find_slot (cus_htab.get (), dwo_unit, INSERT); + gdb_assert (slot != NULL); + if (*slot != NULL) + { + const struct dwo_unit *dup_cu = (const struct dwo_unit *)*slot; + sect_offset dup_sect_off = dup_cu->sect_off; + + complaint (_("debug cu entry at offset %s is duplicate to" + " the entry at offset %s, signature %s"), + sect_offset_str (sect_off), sect_offset_str (dup_sect_off), + hex_string (dwo_unit->signature)); + } + *slot = (void *)dwo_unit; + } +} + +/* DWP file .debug_{cu,tu}_index section format: + [ref: http://gcc.gnu.org/wiki/DebugFissionDWP] + [ref: http://dwarfstd.org/doc/DWARF5.pdf, sect 7.3.5 "DWARF Package Files"] + + DWP Versions 1 & 2 are older, pre-standard format versions. The first + officially standard DWP format was published with DWARF v5 and is called + Version 5. There are no versions 3 or 4. + + DWP Version 1: + + Both index sections have the same format, and serve to map a 64-bit + signature to a set of section numbers. Each section begins with a header, + followed by a hash table of 64-bit signatures, a parallel table of 32-bit + indexes, and a pool of 32-bit section numbers. The index sections will be + aligned at 8-byte boundaries in the file. + + The index section header consists of: + + V, 32 bit version number + -, 32 bits unused + N, 32 bit number of compilation units or type units in the index + M, 32 bit number of slots in the hash table + + Numbers are recorded using the byte order of the application binary. + + The hash table begins at offset 16 in the section, and consists of an array + of M 64-bit slots. Each slot contains a 64-bit signature (using the byte + order of the application binary). Unused slots in the hash table are 0. + (We rely on the extreme unlikeliness of a signature being exactly 0.) + + The parallel table begins immediately after the hash table + (at offset 16 + 8 * M from the beginning of the section), and consists of an + array of 32-bit indexes (using the byte order of the application binary), + corresponding 1-1 with slots in the hash table. Each entry in the parallel + table contains a 32-bit index into the pool of section numbers. For unused + hash table slots, the corresponding entry in the parallel table will be 0. + + The pool of section numbers begins immediately following the hash table + (at offset 16 + 12 * M from the beginning of the section). The pool of + section numbers consists of an array of 32-bit words (using the byte order + of the application binary). Each item in the array is indexed starting + from 0. The hash table entry provides the index of the first section + number in the set. Additional section numbers in the set follow, and the + set is terminated by a 0 entry (section number 0 is not used in ELF). + + In each set of section numbers, the .debug_info.dwo or .debug_types.dwo + section must be the first entry in the set, and the .debug_abbrev.dwo must + be the second entry. Other members of the set may follow in any order. + + --- + + DWP Versions 2 and 5: + + DWP Versions 2 and 5 combine all the .debug_info, etc. sections into one, + and the entries in the index tables are now offsets into these sections. + CU offsets begin at 0. TU offsets begin at the size of the .debug_info + section. + + Index Section Contents: + Header + Hash Table of Signatures dwp_hash_table.hash_table + Parallel Table of Indices dwp_hash_table.unit_table + Table of Section Offsets dwp_hash_table.{v2|v5}.{section_ids,offsets} + Table of Section Sizes dwp_hash_table.{v2|v5}.sizes + + The index section header consists of: + + V, 32 bit version number + L, 32 bit number of columns in the table of section offsets + N, 32 bit number of compilation units or type units in the index + M, 32 bit number of slots in the hash table + + Numbers are recorded using the byte order of the application binary. + + The hash table has the same format as version 1. + The parallel table of indices has the same format as version 1, + except that the entries are origin-1 indices into the table of sections + offsets and the table of section sizes. + + The table of offsets begins immediately following the parallel table + (at offset 16 + 12 * M from the beginning of the section). The table is + a two-dimensional array of 32-bit words (using the byte order of the + application binary), with L columns and N+1 rows, in row-major order. + Each row in the array is indexed starting from 0. The first row provides + a key to the remaining rows: each column in this row provides an identifier + for a debug section, and the offsets in the same column of subsequent rows + refer to that section. The section identifiers for Version 2 are: + + DW_SECT_INFO 1 .debug_info.dwo + DW_SECT_TYPES 2 .debug_types.dwo + DW_SECT_ABBREV 3 .debug_abbrev.dwo + DW_SECT_LINE 4 .debug_line.dwo + DW_SECT_LOC 5 .debug_loc.dwo + DW_SECT_STR_OFFSETS 6 .debug_str_offsets.dwo + DW_SECT_MACINFO 7 .debug_macinfo.dwo + DW_SECT_MACRO 8 .debug_macro.dwo + + The section identifiers for Version 5 are: + + DW_SECT_INFO_V5 1 .debug_info.dwo + DW_SECT_RESERVED_V5 2 -- + DW_SECT_ABBREV_V5 3 .debug_abbrev.dwo + DW_SECT_LINE_V5 4 .debug_line.dwo + DW_SECT_LOCLISTS_V5 5 .debug_loclists.dwo + DW_SECT_STR_OFFSETS_V5 6 .debug_str_offsets.dwo + DW_SECT_MACRO_V5 7 .debug_macro.dwo + DW_SECT_RNGLISTS_V5 8 .debug_rnglists.dwo + + The offsets provided by the CU and TU index sections are the base offsets + for the contributions made by each CU or TU to the corresponding section + in the package file. Each CU and TU header contains an abbrev_offset + field, used to find the abbreviations table for that CU or TU within the + contribution to the .debug_abbrev.dwo section for that CU or TU, and should + be interpreted as relative to the base offset given in the index section. + Likewise, offsets into .debug_line.dwo from DW_AT_stmt_list attributes + should be interpreted as relative to the base offset for .debug_line.dwo, + and offsets into other debug sections obtained from DWARF attributes should + also be interpreted as relative to the corresponding base offset. + + The table of sizes begins immediately following the table of offsets. + Like the table of offsets, it is a two-dimensional array of 32-bit words, + with L columns and N rows, in row-major order. Each row in the array is + indexed starting from 1 (row 0 is shared by the two tables). + + --- + + Hash table lookup is handled the same in version 1 and 2: + + We assume that N and M will not exceed 2^32 - 1. + The size of the hash table, M, must be 2^k such that 2^k > 3*N/2. + + Given a 64-bit compilation unit signature or a type signature S, an entry + in the hash table is located as follows: + + 1) Calculate a primary hash H = S & MASK(k), where MASK(k) is a mask with + the low-order k bits all set to 1. + + 2) Calculate a secondary hash H' = (((S >> 32) & MASK(k)) | 1). + + 3) If the hash table entry at index H matches the signature, use that + entry. If the hash table entry at index H is unused (all zeroes), + terminate the search: the signature is not present in the table. + + 4) Let H = (H + H') modulo M. Repeat at Step 3. + + Because M > N and H' and M are relatively prime, the search is guaranteed + to stop at an unused slot or find the match. */ + +/* Create a hash table to map DWO IDs to their CU/TU entry in + .debug_{info,types}.dwo in DWP_FILE. + Returns NULL if there isn't one. + Note: This function processes DWP files only, not DWO files. */ + +static struct dwp_hash_table * +create_dwp_hash_table (dwarf2_per_objfile *per_objfile, + struct dwp_file *dwp_file, int is_debug_types) +{ + struct objfile *objfile = per_objfile->objfile; + bfd *dbfd = dwp_file->dbfd.get (); + const gdb_byte *index_ptr, *index_end; + struct dwarf2_section_info *index; + uint32_t version, nr_columns, nr_units, nr_slots; + struct dwp_hash_table *htab; + + if (is_debug_types) + index = &dwp_file->sections.tu_index; + else + index = &dwp_file->sections.cu_index; + + if (index->empty ()) + return NULL; + index->read (objfile); + + index_ptr = index->buffer; + index_end = index_ptr + index->size; + + /* For Version 5, the version is really 2 bytes of data & 2 bytes of padding. + For now it's safe to just read 4 bytes (particularly as it's difficult to + tell if you're dealing with Version 5 before you've read the version). */ + version = read_4_bytes (dbfd, index_ptr); + index_ptr += 4; + if (version == 2 || version == 5) + nr_columns = read_4_bytes (dbfd, index_ptr); + else + nr_columns = 0; + index_ptr += 4; + nr_units = read_4_bytes (dbfd, index_ptr); + index_ptr += 4; + nr_slots = read_4_bytes (dbfd, index_ptr); + index_ptr += 4; + + if (version != 1 && version != 2 && version != 5) + { + error (_("Dwarf Error: unsupported DWP file version (%s)" + " [in module %s]"), + pulongest (version), dwp_file->name); + } + if (nr_slots != (nr_slots & -nr_slots)) + { + error (_("Dwarf Error: number of slots in DWP hash table (%s)" + " is not power of 2 [in module %s]"), + pulongest (nr_slots), dwp_file->name); + } + + htab = OBSTACK_ZALLOC (&per_objfile->per_bfd->obstack, struct dwp_hash_table); + htab->version = version; + htab->nr_columns = nr_columns; + htab->nr_units = nr_units; + htab->nr_slots = nr_slots; + htab->hash_table = index_ptr; + htab->unit_table = htab->hash_table + sizeof (uint64_t) * nr_slots; + + /* Exit early if the table is empty. */ + if (nr_slots == 0 || nr_units == 0 + || (version == 2 && nr_columns == 0) + || (version == 5 && nr_columns == 0)) + { + /* All must be zero. */ + if (nr_slots != 0 || nr_units != 0 + || (version == 2 && nr_columns != 0) + || (version == 5 && nr_columns != 0)) + { + complaint (_("Empty DWP but nr_slots,nr_units,nr_columns not" + " all zero [in modules %s]"), + dwp_file->name); + } + return htab; + } + + if (version == 1) + { + htab->section_pool.v1.indices = + htab->unit_table + sizeof (uint32_t) * nr_slots; + /* It's harder to decide whether the section is too small in v1. + V1 is deprecated anyway so we punt. */ + } + else if (version == 2) + { + const gdb_byte *ids_ptr = htab->unit_table + sizeof (uint32_t) * nr_slots; + int *ids = htab->section_pool.v2.section_ids; + size_t sizeof_ids = sizeof (htab->section_pool.v2.section_ids); + /* Reverse map for error checking. */ + int ids_seen[DW_SECT_MAX + 1]; + int i; + + if (nr_columns < 2) + { + error (_("Dwarf Error: bad DWP hash table, too few columns" + " in section table [in module %s]"), + dwp_file->name); + } + if (nr_columns > MAX_NR_V2_DWO_SECTIONS) + { + error (_("Dwarf Error: bad DWP hash table, too many columns" + " in section table [in module %s]"), + dwp_file->name); + } + memset (ids, 255, sizeof_ids); + memset (ids_seen, 255, sizeof (ids_seen)); + for (i = 0; i < nr_columns; ++i) + { + int id = read_4_bytes (dbfd, ids_ptr + i * sizeof (uint32_t)); + + if (id < DW_SECT_MIN || id > DW_SECT_MAX) + { + error (_("Dwarf Error: bad DWP hash table, bad section id %d" + " in section table [in module %s]"), + id, dwp_file->name); + } + if (ids_seen[id] != -1) + { + error (_("Dwarf Error: bad DWP hash table, duplicate section" + " id %d in section table [in module %s]"), + id, dwp_file->name); + } + ids_seen[id] = i; + ids[i] = id; + } + /* Must have exactly one info or types section. */ + if (((ids_seen[DW_SECT_INFO] != -1) + + (ids_seen[DW_SECT_TYPES] != -1)) + != 1) + { + error (_("Dwarf Error: bad DWP hash table, missing/duplicate" + " DWO info/types section [in module %s]"), + dwp_file->name); + } + /* Must have an abbrev section. */ + if (ids_seen[DW_SECT_ABBREV] == -1) + { + error (_("Dwarf Error: bad DWP hash table, missing DWO abbrev" + " section [in module %s]"), + dwp_file->name); + } + htab->section_pool.v2.offsets = ids_ptr + sizeof (uint32_t) * nr_columns; + htab->section_pool.v2.sizes = + htab->section_pool.v2.offsets + (sizeof (uint32_t) + * nr_units * nr_columns); + if ((htab->section_pool.v2.sizes + (sizeof (uint32_t) + * nr_units * nr_columns)) + > index_end) + { + error (_("Dwarf Error: DWP index section is corrupt (too small)" + " [in module %s]"), + dwp_file->name); + } + } + else /* version == 5 */ + { + const gdb_byte *ids_ptr = htab->unit_table + sizeof (uint32_t) * nr_slots; + int *ids = htab->section_pool.v5.section_ids; + size_t sizeof_ids = sizeof (htab->section_pool.v5.section_ids); + /* Reverse map for error checking. */ + int ids_seen[DW_SECT_MAX_V5 + 1]; + + if (nr_columns < 2) + { + error (_("Dwarf Error: bad DWP hash table, too few columns" + " in section table [in module %s]"), + dwp_file->name); + } + if (nr_columns > MAX_NR_V5_DWO_SECTIONS) + { + error (_("Dwarf Error: bad DWP hash table, too many columns" + " in section table [in module %s]"), + dwp_file->name); + } + memset (ids, 255, sizeof_ids); + memset (ids_seen, 255, sizeof (ids_seen)); + for (int i = 0; i < nr_columns; ++i) + { + int id = read_4_bytes (dbfd, ids_ptr + i * sizeof (uint32_t)); + + if (id < DW_SECT_MIN || id > DW_SECT_MAX_V5) + { + error (_("Dwarf Error: bad DWP hash table, bad section id %d" + " in section table [in module %s]"), + id, dwp_file->name); + } + if (ids_seen[id] != -1) + { + error (_("Dwarf Error: bad DWP hash table, duplicate section" + " id %d in section table [in module %s]"), + id, dwp_file->name); + } + ids_seen[id] = i; + ids[i] = id; + } + /* Must have seen an info section. */ + if (ids_seen[DW_SECT_INFO_V5] == -1) + { + error (_("Dwarf Error: bad DWP hash table, missing/duplicate" + " DWO info/types section [in module %s]"), + dwp_file->name); + } + /* Must have an abbrev section. */ + if (ids_seen[DW_SECT_ABBREV_V5] == -1) + { + error (_("Dwarf Error: bad DWP hash table, missing DWO abbrev" + " section [in module %s]"), + dwp_file->name); + } + htab->section_pool.v5.offsets = ids_ptr + sizeof (uint32_t) * nr_columns; + htab->section_pool.v5.sizes + = htab->section_pool.v5.offsets + (sizeof (uint32_t) + * nr_units * nr_columns); + if ((htab->section_pool.v5.sizes + (sizeof (uint32_t) + * nr_units * nr_columns)) + > index_end) + { + error (_("Dwarf Error: DWP index section is corrupt (too small)" + " [in module %s]"), + dwp_file->name); + } + } + + return htab; +} + +/* Update SECTIONS with the data from SECTP. + + This function is like the other "locate" section routines that are + passed to bfd_map_over_sections, but in this context the sections to + read comes from the DWP V1 hash table, not the full ELF section table. + + The result is non-zero for success, or zero if an error was found. */ + +static int +locate_v1_virtual_dwo_sections (asection *sectp, + struct virtual_v1_dwo_sections *sections) +{ + const struct dwop_section_names *names = &dwop_section_names; + + if (section_is_p (sectp->name, &names->abbrev_dwo)) + { + /* There can be only one. */ + if (sections->abbrev.s.section != NULL) + return 0; + sections->abbrev.s.section = sectp; + sections->abbrev.size = bfd_section_size (sectp); + } + else if (section_is_p (sectp->name, &names->info_dwo) + || section_is_p (sectp->name, &names->types_dwo)) + { + /* There can be only one. */ + if (sections->info_or_types.s.section != NULL) + return 0; + sections->info_or_types.s.section = sectp; + sections->info_or_types.size = bfd_section_size (sectp); + } + else if (section_is_p (sectp->name, &names->line_dwo)) + { + /* There can be only one. */ + if (sections->line.s.section != NULL) + return 0; + sections->line.s.section = sectp; + sections->line.size = bfd_section_size (sectp); + } + else if (section_is_p (sectp->name, &names->loc_dwo)) + { + /* There can be only one. */ + if (sections->loc.s.section != NULL) + return 0; + sections->loc.s.section = sectp; + sections->loc.size = bfd_section_size (sectp); + } + else if (section_is_p (sectp->name, &names->macinfo_dwo)) + { + /* There can be only one. */ + if (sections->macinfo.s.section != NULL) + return 0; + sections->macinfo.s.section = sectp; + sections->macinfo.size = bfd_section_size (sectp); + } + else if (section_is_p (sectp->name, &names->macro_dwo)) + { + /* There can be only one. */ + if (sections->macro.s.section != NULL) + return 0; + sections->macro.s.section = sectp; + sections->macro.size = bfd_section_size (sectp); + } + else if (section_is_p (sectp->name, &names->str_offsets_dwo)) + { + /* There can be only one. */ + if (sections->str_offsets.s.section != NULL) + return 0; + sections->str_offsets.s.section = sectp; + sections->str_offsets.size = bfd_section_size (sectp); + } + else + { + /* No other kind of section is valid. */ + return 0; + } + + return 1; +} + +/* Create a dwo_unit object for the DWO unit with signature SIGNATURE. + UNIT_INDEX is the index of the DWO unit in the DWP hash table. + COMP_DIR is the DW_AT_comp_dir attribute of the referencing CU. + This is for DWP version 1 files. */ + +static struct dwo_unit * +create_dwo_unit_in_dwp_v1 (dwarf2_per_objfile *per_objfile, + struct dwp_file *dwp_file, + uint32_t unit_index, + const char *comp_dir, + ULONGEST signature, int is_debug_types) +{ + const struct dwp_hash_table *dwp_htab = + is_debug_types ? dwp_file->tus : dwp_file->cus; + bfd *dbfd = dwp_file->dbfd.get (); + const char *kind = is_debug_types ? "TU" : "CU"; + struct dwo_file *dwo_file; + struct dwo_unit *dwo_unit; + struct virtual_v1_dwo_sections sections; + void **dwo_file_slot; + int i; + + gdb_assert (dwp_file->version == 1); + + if (dwarf_read_debug) + { + fprintf_unfiltered (gdb_stdlog, "Reading %s %s/%s in DWP V1 file: %s\n", + kind, + pulongest (unit_index), hex_string (signature), + dwp_file->name); + } + + /* Fetch the sections of this DWO unit. + Put a limit on the number of sections we look for so that bad data + doesn't cause us to loop forever. */ + +#define MAX_NR_V1_DWO_SECTIONS \ + (1 /* .debug_info or .debug_types */ \ + + 1 /* .debug_abbrev */ \ + + 1 /* .debug_line */ \ + + 1 /* .debug_loc */ \ + + 1 /* .debug_str_offsets */ \ + + 1 /* .debug_macro or .debug_macinfo */ \ + + 1 /* trailing zero */) + + memset (§ions, 0, sizeof (sections)); + + for (i = 0; i < MAX_NR_V1_DWO_SECTIONS; ++i) + { + asection *sectp; + uint32_t section_nr = + read_4_bytes (dbfd, + dwp_htab->section_pool.v1.indices + + (unit_index + i) * sizeof (uint32_t)); + + if (section_nr == 0) + break; + if (section_nr >= dwp_file->num_sections) + { + error (_("Dwarf Error: bad DWP hash table, section number too large" + " [in module %s]"), + dwp_file->name); + } + + sectp = dwp_file->elf_sections[section_nr]; + if (! locate_v1_virtual_dwo_sections (sectp, §ions)) + { + error (_("Dwarf Error: bad DWP hash table, invalid section found" + " [in module %s]"), + dwp_file->name); + } + } + + if (i < 2 + || sections.info_or_types.empty () + || sections.abbrev.empty ()) + { + error (_("Dwarf Error: bad DWP hash table, missing DWO sections" + " [in module %s]"), + dwp_file->name); + } + if (i == MAX_NR_V1_DWO_SECTIONS) + { + error (_("Dwarf Error: bad DWP hash table, too many DWO sections" + " [in module %s]"), + dwp_file->name); + } + + /* It's easier for the rest of the code if we fake a struct dwo_file and + have dwo_unit "live" in that. At least for now. + + The DWP file can be made up of a random collection of CUs and TUs. + However, for each CU + set of TUs that came from the same original DWO + file, we can combine them back into a virtual DWO file to save space + (fewer struct dwo_file objects to allocate). Remember that for really + large apps there can be on the order of 8K CUs and 200K TUs, or more. */ + + std::string virtual_dwo_name = + string_printf ("virtual-dwo/%d-%d-%d-%d", + sections.abbrev.get_id (), + sections.line.get_id (), + sections.loc.get_id (), + sections.str_offsets.get_id ()); + /* Can we use an existing virtual DWO file? */ + dwo_file_slot = lookup_dwo_file_slot (per_objfile, virtual_dwo_name.c_str (), + comp_dir); + /* Create one if necessary. */ + if (*dwo_file_slot == NULL) + { + if (dwarf_read_debug) + { + fprintf_unfiltered (gdb_stdlog, "Creating virtual DWO: %s\n", + virtual_dwo_name.c_str ()); + } + dwo_file = new struct dwo_file; + dwo_file->dwo_name = per_objfile->objfile->intern (virtual_dwo_name); + dwo_file->comp_dir = comp_dir; + dwo_file->sections.abbrev = sections.abbrev; + dwo_file->sections.line = sections.line; + dwo_file->sections.loc = sections.loc; + dwo_file->sections.macinfo = sections.macinfo; + dwo_file->sections.macro = sections.macro; + dwo_file->sections.str_offsets = sections.str_offsets; + /* The "str" section is global to the entire DWP file. */ + dwo_file->sections.str = dwp_file->sections.str; + /* The info or types section is assigned below to dwo_unit, + there's no need to record it in dwo_file. + Also, we can't simply record type sections in dwo_file because + we record a pointer into the vector in dwo_unit. As we collect more + types we'll grow the vector and eventually have to reallocate space + for it, invalidating all copies of pointers into the previous + contents. */ + *dwo_file_slot = dwo_file; + } + else + { + if (dwarf_read_debug) + { + fprintf_unfiltered (gdb_stdlog, "Using existing virtual DWO: %s\n", + virtual_dwo_name.c_str ()); + } + dwo_file = (struct dwo_file *) *dwo_file_slot; + } + + dwo_unit = OBSTACK_ZALLOC (&per_objfile->per_bfd->obstack, struct dwo_unit); + dwo_unit->dwo_file = dwo_file; + dwo_unit->signature = signature; + dwo_unit->section = + XOBNEW (&per_objfile->per_bfd->obstack, struct dwarf2_section_info); + *dwo_unit->section = sections.info_or_types; + /* dwo_unit->{offset,length,type_offset_in_tu} are set later. */ + + return dwo_unit; +} + +/* Subroutine of create_dwo_unit_in_dwp_v2 and create_dwo_unit_in_dwp_v5 to + simplify them. Given a pointer to the containing section SECTION, and + OFFSET,SIZE of the piece within that section used by a TU/CU, return a + virtual section of just that piece. */ + +static struct dwarf2_section_info +create_dwp_v2_or_v5_section (dwarf2_per_objfile *per_objfile, + struct dwarf2_section_info *section, + bfd_size_type offset, bfd_size_type size) +{ + struct dwarf2_section_info result; + asection *sectp; + + gdb_assert (section != NULL); + gdb_assert (!section->is_virtual); + + memset (&result, 0, sizeof (result)); + result.s.containing_section = section; + result.is_virtual = true; + + if (size == 0) + return result; + + sectp = section->get_bfd_section (); + + /* Flag an error if the piece denoted by OFFSET,SIZE is outside the + bounds of the real section. This is a pretty-rare event, so just + flag an error (easier) instead of a warning and trying to cope. */ + if (sectp == NULL + || offset + size > bfd_section_size (sectp)) + { + error (_("Dwarf Error: Bad DWP V2 or V5 section info, doesn't fit" + " in section %s [in module %s]"), + sectp ? bfd_section_name (sectp) : "<unknown>", + objfile_name (per_objfile->objfile)); + } + + result.virtual_offset = offset; + result.size = size; + return result; +} + +/* Create a dwo_unit object for the DWO unit with signature SIGNATURE. + UNIT_INDEX is the index of the DWO unit in the DWP hash table. + COMP_DIR is the DW_AT_comp_dir attribute of the referencing CU. + This is for DWP version 2 files. */ + +static struct dwo_unit * +create_dwo_unit_in_dwp_v2 (dwarf2_per_objfile *per_objfile, + struct dwp_file *dwp_file, + uint32_t unit_index, + const char *comp_dir, + ULONGEST signature, int is_debug_types) +{ + const struct dwp_hash_table *dwp_htab = + is_debug_types ? dwp_file->tus : dwp_file->cus; + bfd *dbfd = dwp_file->dbfd.get (); + const char *kind = is_debug_types ? "TU" : "CU"; + struct dwo_file *dwo_file; + struct dwo_unit *dwo_unit; + struct virtual_v2_or_v5_dwo_sections sections; + void **dwo_file_slot; + int i; + + gdb_assert (dwp_file->version == 2); + + if (dwarf_read_debug) + { + fprintf_unfiltered (gdb_stdlog, "Reading %s %s/%s in DWP V2 file: %s\n", + kind, + pulongest (unit_index), hex_string (signature), + dwp_file->name); + } + + /* Fetch the section offsets of this DWO unit. */ + + memset (§ions, 0, sizeof (sections)); + + for (i = 0; i < dwp_htab->nr_columns; ++i) + { + uint32_t offset = read_4_bytes (dbfd, + dwp_htab->section_pool.v2.offsets + + (((unit_index - 1) * dwp_htab->nr_columns + + i) + * sizeof (uint32_t))); + uint32_t size = read_4_bytes (dbfd, + dwp_htab->section_pool.v2.sizes + + (((unit_index - 1) * dwp_htab->nr_columns + + i) + * sizeof (uint32_t))); + + switch (dwp_htab->section_pool.v2.section_ids[i]) + { + case DW_SECT_INFO: + case DW_SECT_TYPES: + sections.info_or_types_offset = offset; + sections.info_or_types_size = size; + break; + case DW_SECT_ABBREV: + sections.abbrev_offset = offset; + sections.abbrev_size = size; + break; + case DW_SECT_LINE: + sections.line_offset = offset; + sections.line_size = size; + break; + case DW_SECT_LOC: + sections.loc_offset = offset; + sections.loc_size = size; + break; + case DW_SECT_STR_OFFSETS: + sections.str_offsets_offset = offset; + sections.str_offsets_size = size; + break; + case DW_SECT_MACINFO: + sections.macinfo_offset = offset; + sections.macinfo_size = size; + break; + case DW_SECT_MACRO: + sections.macro_offset = offset; + sections.macro_size = size; + break; + } + } + + /* It's easier for the rest of the code if we fake a struct dwo_file and + have dwo_unit "live" in that. At least for now. + + The DWP file can be made up of a random collection of CUs and TUs. + However, for each CU + set of TUs that came from the same original DWO + file, we can combine them back into a virtual DWO file to save space + (fewer struct dwo_file objects to allocate). Remember that for really + large apps there can be on the order of 8K CUs and 200K TUs, or more. */ + + std::string virtual_dwo_name = + string_printf ("virtual-dwo/%ld-%ld-%ld-%ld", + (long) (sections.abbrev_size ? sections.abbrev_offset : 0), + (long) (sections.line_size ? sections.line_offset : 0), + (long) (sections.loc_size ? sections.loc_offset : 0), + (long) (sections.str_offsets_size + ? sections.str_offsets_offset : 0)); + /* Can we use an existing virtual DWO file? */ + dwo_file_slot = lookup_dwo_file_slot (per_objfile, virtual_dwo_name.c_str (), + comp_dir); + /* Create one if necessary. */ + if (*dwo_file_slot == NULL) + { + if (dwarf_read_debug) + { + fprintf_unfiltered (gdb_stdlog, "Creating virtual DWO: %s\n", + virtual_dwo_name.c_str ()); + } + dwo_file = new struct dwo_file; + dwo_file->dwo_name = per_objfile->objfile->intern (virtual_dwo_name); + dwo_file->comp_dir = comp_dir; + dwo_file->sections.abbrev = + create_dwp_v2_or_v5_section (per_objfile, &dwp_file->sections.abbrev, + sections.abbrev_offset, + sections.abbrev_size); + dwo_file->sections.line = + create_dwp_v2_or_v5_section (per_objfile, &dwp_file->sections.line, + sections.line_offset, + sections.line_size); + dwo_file->sections.loc = + create_dwp_v2_or_v5_section (per_objfile, &dwp_file->sections.loc, + sections.loc_offset, sections.loc_size); + dwo_file->sections.macinfo = + create_dwp_v2_or_v5_section (per_objfile, &dwp_file->sections.macinfo, + sections.macinfo_offset, + sections.macinfo_size); + dwo_file->sections.macro = + create_dwp_v2_or_v5_section (per_objfile, &dwp_file->sections.macro, + sections.macro_offset, + sections.macro_size); + dwo_file->sections.str_offsets = + create_dwp_v2_or_v5_section (per_objfile, + &dwp_file->sections.str_offsets, + sections.str_offsets_offset, + sections.str_offsets_size); + /* The "str" section is global to the entire DWP file. */ + dwo_file->sections.str = dwp_file->sections.str; + /* The info or types section is assigned below to dwo_unit, + there's no need to record it in dwo_file. + Also, we can't simply record type sections in dwo_file because + we record a pointer into the vector in dwo_unit. As we collect more + types we'll grow the vector and eventually have to reallocate space + for it, invalidating all copies of pointers into the previous + contents. */ + *dwo_file_slot = dwo_file; + } + else + { + if (dwarf_read_debug) + { + fprintf_unfiltered (gdb_stdlog, "Using existing virtual DWO: %s\n", + virtual_dwo_name.c_str ()); + } + dwo_file = (struct dwo_file *) *dwo_file_slot; + } + + dwo_unit = OBSTACK_ZALLOC (&per_objfile->per_bfd->obstack, struct dwo_unit); + dwo_unit->dwo_file = dwo_file; + dwo_unit->signature = signature; + dwo_unit->section = + XOBNEW (&per_objfile->per_bfd->obstack, struct dwarf2_section_info); + *dwo_unit->section = create_dwp_v2_or_v5_section + (per_objfile, + is_debug_types + ? &dwp_file->sections.types + : &dwp_file->sections.info, + sections.info_or_types_offset, + sections.info_or_types_size); + /* dwo_unit->{offset,length,type_offset_in_tu} are set later. */ + + return dwo_unit; +} + +/* Create a dwo_unit object for the DWO unit with signature SIGNATURE. + UNIT_INDEX is the index of the DWO unit in the DWP hash table. + COMP_DIR is the DW_AT_comp_dir attribute of the referencing CU. + This is for DWP version 5 files. */ + +static struct dwo_unit * +create_dwo_unit_in_dwp_v5 (dwarf2_per_objfile *per_objfile, + struct dwp_file *dwp_file, + uint32_t unit_index, + const char *comp_dir, + ULONGEST signature, int is_debug_types) +{ + const struct dwp_hash_table *dwp_htab + = is_debug_types ? dwp_file->tus : dwp_file->cus; + bfd *dbfd = dwp_file->dbfd.get (); + const char *kind = is_debug_types ? "TU" : "CU"; + struct dwo_file *dwo_file; + struct dwo_unit *dwo_unit; + struct virtual_v2_or_v5_dwo_sections sections {}; + void **dwo_file_slot; + + gdb_assert (dwp_file->version == 5); + + if (dwarf_read_debug) + { + fprintf_unfiltered (gdb_stdlog, "Reading %s %s/%s in DWP V5 file: %s\n", + kind, + pulongest (unit_index), hex_string (signature), + dwp_file->name); + } + + /* Fetch the section offsets of this DWO unit. */ + + /* memset (§ions, 0, sizeof (sections)); */ + + for (int i = 0; i < dwp_htab->nr_columns; ++i) + { + uint32_t offset = read_4_bytes (dbfd, + dwp_htab->section_pool.v5.offsets + + (((unit_index - 1) + * dwp_htab->nr_columns + + i) + * sizeof (uint32_t))); + uint32_t size = read_4_bytes (dbfd, + dwp_htab->section_pool.v5.sizes + + (((unit_index - 1) * dwp_htab->nr_columns + + i) + * sizeof (uint32_t))); + + switch (dwp_htab->section_pool.v5.section_ids[i]) + { + case DW_SECT_ABBREV_V5: + sections.abbrev_offset = offset; + sections.abbrev_size = size; + break; + case DW_SECT_INFO_V5: + sections.info_or_types_offset = offset; + sections.info_or_types_size = size; + break; + case DW_SECT_LINE_V5: + sections.line_offset = offset; + sections.line_size = size; + break; + case DW_SECT_LOCLISTS_V5: + sections.loclists_offset = offset; + sections.loclists_size = size; + break; + case DW_SECT_MACRO_V5: + sections.macro_offset = offset; + sections.macro_size = size; + break; + case DW_SECT_RNGLISTS_V5: + sections.rnglists_offset = offset; + sections.rnglists_size = size; + break; + case DW_SECT_STR_OFFSETS_V5: + sections.str_offsets_offset = offset; + sections.str_offsets_size = size; + break; + case DW_SECT_RESERVED_V5: + default: + break; + } + } + + /* It's easier for the rest of the code if we fake a struct dwo_file and + have dwo_unit "live" in that. At least for now. + + The DWP file can be made up of a random collection of CUs and TUs. + However, for each CU + set of TUs that came from the same original DWO + file, we can combine them back into a virtual DWO file to save space + (fewer struct dwo_file objects to allocate). Remember that for really + large apps there can be on the order of 8K CUs and 200K TUs, or more. */ + + std::string virtual_dwo_name = + string_printf ("virtual-dwo/%ld-%ld-%ld-%ld-%ld-%ld", + (long) (sections.abbrev_size ? sections.abbrev_offset : 0), + (long) (sections.line_size ? sections.line_offset : 0), + (long) (sections.loclists_size ? sections.loclists_offset : 0), + (long) (sections.str_offsets_size + ? sections.str_offsets_offset : 0), + (long) (sections.macro_size ? sections.macro_offset : 0), + (long) (sections.rnglists_size ? sections.rnglists_offset: 0)); + /* Can we use an existing virtual DWO file? */ + dwo_file_slot = lookup_dwo_file_slot (per_objfile, + virtual_dwo_name.c_str (), + comp_dir); + /* Create one if necessary. */ + if (*dwo_file_slot == NULL) + { + if (dwarf_read_debug) + { + fprintf_unfiltered (gdb_stdlog, "Creating virtual DWO: %s\n", + virtual_dwo_name.c_str ()); + } + dwo_file = new struct dwo_file; + dwo_file->dwo_name = per_objfile->objfile->intern (virtual_dwo_name); + dwo_file->comp_dir = comp_dir; + dwo_file->sections.abbrev = + create_dwp_v2_or_v5_section (per_objfile, + &dwp_file->sections.abbrev, + sections.abbrev_offset, + sections.abbrev_size); + dwo_file->sections.line = + create_dwp_v2_or_v5_section (per_objfile, + &dwp_file->sections.line, + sections.line_offset, sections.line_size); + dwo_file->sections.macro = + create_dwp_v2_or_v5_section (per_objfile, + &dwp_file->sections.macro, + sections.macro_offset, + sections.macro_size); + dwo_file->sections.loclists = + create_dwp_v2_or_v5_section (per_objfile, + &dwp_file->sections.loclists, + sections.loclists_offset, + sections.loclists_size); + dwo_file->sections.rnglists = + create_dwp_v2_or_v5_section (per_objfile, + &dwp_file->sections.rnglists, + sections.rnglists_offset, + sections.rnglists_size); + dwo_file->sections.str_offsets = + create_dwp_v2_or_v5_section (per_objfile, + &dwp_file->sections.str_offsets, + sections.str_offsets_offset, + sections.str_offsets_size); + /* The "str" section is global to the entire DWP file. */ + dwo_file->sections.str = dwp_file->sections.str; + /* The info or types section is assigned below to dwo_unit, + there's no need to record it in dwo_file. + Also, we can't simply record type sections in dwo_file because + we record a pointer into the vector in dwo_unit. As we collect more + types we'll grow the vector and eventually have to reallocate space + for it, invalidating all copies of pointers into the previous + contents. */ + *dwo_file_slot = dwo_file; + } + else + { + if (dwarf_read_debug) + { + fprintf_unfiltered (gdb_stdlog, "Using existing virtual DWO: %s\n", + virtual_dwo_name.c_str ()); + } + dwo_file = (struct dwo_file *) *dwo_file_slot; + } + + dwo_unit = OBSTACK_ZALLOC (&per_objfile->per_bfd->obstack, struct dwo_unit); + dwo_unit->dwo_file = dwo_file; + dwo_unit->signature = signature; + dwo_unit->section + = XOBNEW (&per_objfile->per_bfd->obstack, struct dwarf2_section_info); + *dwo_unit->section = create_dwp_v2_or_v5_section (per_objfile, + &dwp_file->sections.info, + sections.info_or_types_offset, + sections.info_or_types_size); + /* dwo_unit->{offset,length,type_offset_in_tu} are set later. */ + + return dwo_unit; +} + +/* Lookup the DWO unit with SIGNATURE in DWP_FILE. + Returns NULL if the signature isn't found. */ + +static struct dwo_unit * +lookup_dwo_unit_in_dwp (dwarf2_per_objfile *per_objfile, + struct dwp_file *dwp_file, const char *comp_dir, + ULONGEST signature, int is_debug_types) +{ + const struct dwp_hash_table *dwp_htab = + is_debug_types ? dwp_file->tus : dwp_file->cus; + bfd *dbfd = dwp_file->dbfd.get (); + uint32_t mask = dwp_htab->nr_slots - 1; + uint32_t hash = signature & mask; + uint32_t hash2 = ((signature >> 32) & mask) | 1; + unsigned int i; + void **slot; + struct dwo_unit find_dwo_cu; + + memset (&find_dwo_cu, 0, sizeof (find_dwo_cu)); + find_dwo_cu.signature = signature; + slot = htab_find_slot (is_debug_types + ? dwp_file->loaded_tus.get () + : dwp_file->loaded_cus.get (), + &find_dwo_cu, INSERT); + + if (*slot != NULL) + return (struct dwo_unit *) *slot; + + /* Use a for loop so that we don't loop forever on bad debug info. */ + for (i = 0; i < dwp_htab->nr_slots; ++i) + { + ULONGEST signature_in_table; + + signature_in_table = + read_8_bytes (dbfd, dwp_htab->hash_table + hash * sizeof (uint64_t)); + if (signature_in_table == signature) + { + uint32_t unit_index = + read_4_bytes (dbfd, + dwp_htab->unit_table + hash * sizeof (uint32_t)); + + if (dwp_file->version == 1) + { + *slot = create_dwo_unit_in_dwp_v1 (per_objfile, dwp_file, + unit_index, comp_dir, + signature, is_debug_types); + } + else if (dwp_file->version == 2) + { + *slot = create_dwo_unit_in_dwp_v2 (per_objfile, dwp_file, + unit_index, comp_dir, + signature, is_debug_types); + } + else /* version == 5 */ + { + *slot = create_dwo_unit_in_dwp_v5 (per_objfile, dwp_file, + unit_index, comp_dir, + signature, is_debug_types); + } + return (struct dwo_unit *) *slot; + } + if (signature_in_table == 0) + return NULL; + hash = (hash + hash2) & mask; + } + + error (_("Dwarf Error: bad DWP hash table, lookup didn't terminate" + " [in module %s]"), + dwp_file->name); +} + +/* Subroutine of open_dwo_file,open_dwp_file to simplify them. + Open the file specified by FILE_NAME and hand it off to BFD for + preliminary analysis. Return a newly initialized bfd *, which + includes a canonicalized copy of FILE_NAME. + If IS_DWP is TRUE, we're opening a DWP file, otherwise a DWO file. + SEARCH_CWD is true if the current directory is to be searched. + It will be searched before debug-file-directory. + If successful, the file is added to the bfd include table of the + objfile's bfd (see gdb_bfd_record_inclusion). + If unable to find/open the file, return NULL. + NOTE: This function is derived from symfile_bfd_open. */ + +static gdb_bfd_ref_ptr +try_open_dwop_file (dwarf2_per_objfile *per_objfile, + const char *file_name, int is_dwp, int search_cwd) +{ + int desc; + /* Blech. OPF_TRY_CWD_FIRST also disables searching the path list if + FILE_NAME contains a '/'. So we can't use it. Instead prepend "." + to debug_file_directory. */ + const char *search_path; + static const char dirname_separator_string[] = { DIRNAME_SEPARATOR, '\0' }; + + gdb::unique_xmalloc_ptr<char> search_path_holder; + if (search_cwd) + { + if (*debug_file_directory != '\0') + { + search_path_holder.reset (concat (".", dirname_separator_string, + debug_file_directory, + (char *) NULL)); + search_path = search_path_holder.get (); + } + else + search_path = "."; + } + else + search_path = debug_file_directory; + + openp_flags flags = OPF_RETURN_REALPATH; + if (is_dwp) + flags |= OPF_SEARCH_IN_PATH; + + gdb::unique_xmalloc_ptr<char> absolute_name; + desc = openp (search_path, flags, file_name, + O_RDONLY | O_BINARY, &absolute_name); + if (desc < 0) + return NULL; + + gdb_bfd_ref_ptr sym_bfd (gdb_bfd_open (absolute_name.get (), + gnutarget, desc)); + if (sym_bfd == NULL) + return NULL; + bfd_set_cacheable (sym_bfd.get (), 1); + + if (!bfd_check_format (sym_bfd.get (), bfd_object)) + return NULL; + + /* Success. Record the bfd as having been included by the objfile's bfd. + This is important because things like demangled_names_hash lives in the + objfile's per_bfd space and may have references to things like symbol + names that live in the DWO/DWP file's per_bfd space. PR 16426. */ + gdb_bfd_record_inclusion (per_objfile->objfile->obfd, sym_bfd.get ()); + + return sym_bfd; +} + +/* Try to open DWO file FILE_NAME. + COMP_DIR is the DW_AT_comp_dir attribute. + The result is the bfd handle of the file. + If there is a problem finding or opening the file, return NULL. + Upon success, the canonicalized path of the file is stored in the bfd, + same as symfile_bfd_open. */ + +static gdb_bfd_ref_ptr +open_dwo_file (dwarf2_per_objfile *per_objfile, + const char *file_name, const char *comp_dir) +{ + if (IS_ABSOLUTE_PATH (file_name)) + return try_open_dwop_file (per_objfile, file_name, + 0 /*is_dwp*/, 0 /*search_cwd*/); + + /* Before trying the search path, try DWO_NAME in COMP_DIR. */ + + if (comp_dir != NULL) + { + gdb::unique_xmalloc_ptr<char> path_to_try + (concat (comp_dir, SLASH_STRING, file_name, (char *) NULL)); + + /* NOTE: If comp_dir is a relative path, this will also try the + search path, which seems useful. */ + gdb_bfd_ref_ptr abfd (try_open_dwop_file (per_objfile, path_to_try.get (), + 0 /*is_dwp*/, + 1 /*search_cwd*/)); + if (abfd != NULL) + return abfd; + } + + /* That didn't work, try debug-file-directory, which, despite its name, + is a list of paths. */ + + if (*debug_file_directory == '\0') + return NULL; + + return try_open_dwop_file (per_objfile, file_name, + 0 /*is_dwp*/, 1 /*search_cwd*/); +} + +/* This function is mapped across the sections and remembers the offset and + size of each of the DWO debugging sections we are interested in. */ + +static void +dwarf2_locate_dwo_sections (bfd *abfd, asection *sectp, void *dwo_sections_ptr) +{ + struct dwo_sections *dwo_sections = (struct dwo_sections *) dwo_sections_ptr; + const struct dwop_section_names *names = &dwop_section_names; + + if (section_is_p (sectp->name, &names->abbrev_dwo)) + { + dwo_sections->abbrev.s.section = sectp; + dwo_sections->abbrev.size = bfd_section_size (sectp); + } + else if (section_is_p (sectp->name, &names->info_dwo)) + { + dwo_sections->info.s.section = sectp; + dwo_sections->info.size = bfd_section_size (sectp); + } + else if (section_is_p (sectp->name, &names->line_dwo)) + { + dwo_sections->line.s.section = sectp; + dwo_sections->line.size = bfd_section_size (sectp); + } + else if (section_is_p (sectp->name, &names->loc_dwo)) + { + dwo_sections->loc.s.section = sectp; + dwo_sections->loc.size = bfd_section_size (sectp); + } + else if (section_is_p (sectp->name, &names->loclists_dwo)) + { + dwo_sections->loclists.s.section = sectp; + dwo_sections->loclists.size = bfd_section_size (sectp); + } + else if (section_is_p (sectp->name, &names->macinfo_dwo)) + { + dwo_sections->macinfo.s.section = sectp; + dwo_sections->macinfo.size = bfd_section_size (sectp); + } + else if (section_is_p (sectp->name, &names->macro_dwo)) + { + dwo_sections->macro.s.section = sectp; + dwo_sections->macro.size = bfd_section_size (sectp); + } + else if (section_is_p (sectp->name, &names->rnglists_dwo)) + { + dwo_sections->rnglists.s.section = sectp; + dwo_sections->rnglists.size = bfd_section_size (sectp); + } + else if (section_is_p (sectp->name, &names->str_dwo)) + { + dwo_sections->str.s.section = sectp; + dwo_sections->str.size = bfd_section_size (sectp); + } + else if (section_is_p (sectp->name, &names->str_offsets_dwo)) + { + dwo_sections->str_offsets.s.section = sectp; + dwo_sections->str_offsets.size = bfd_section_size (sectp); + } + else if (section_is_p (sectp->name, &names->types_dwo)) + { + struct dwarf2_section_info type_section; + + memset (&type_section, 0, sizeof (type_section)); + type_section.s.section = sectp; + type_section.size = bfd_section_size (sectp); + dwo_sections->types.push_back (type_section); + } +} + +/* Initialize the use of the DWO file specified by DWO_NAME and referenced + by PER_CU. This is for the non-DWP case. + The result is NULL if DWO_NAME can't be found. */ + +static struct dwo_file * +open_and_init_dwo_file (dwarf2_cu *cu, const char *dwo_name, + const char *comp_dir) +{ + dwarf2_per_objfile *per_objfile = cu->per_objfile; + + gdb_bfd_ref_ptr dbfd = open_dwo_file (per_objfile, dwo_name, comp_dir); + if (dbfd == NULL) + { + if (dwarf_read_debug) + fprintf_unfiltered (gdb_stdlog, "DWO file not found: %s\n", dwo_name); + return NULL; + } + + dwo_file_up dwo_file (new struct dwo_file); + dwo_file->dwo_name = dwo_name; + dwo_file->comp_dir = comp_dir; + dwo_file->dbfd = std::move (dbfd); + + bfd_map_over_sections (dwo_file->dbfd.get (), dwarf2_locate_dwo_sections, + &dwo_file->sections); + + create_cus_hash_table (per_objfile, cu, *dwo_file, dwo_file->sections.info, + dwo_file->cus); + + if (cu->per_cu->dwarf_version < 5) + { + create_debug_types_hash_table (per_objfile, dwo_file.get (), + dwo_file->sections.types, dwo_file->tus); + } + else + { + create_debug_type_hash_table (per_objfile, dwo_file.get (), + &dwo_file->sections.info, dwo_file->tus, + rcuh_kind::TYPE); + } + + if (dwarf_read_debug) + fprintf_unfiltered (gdb_stdlog, "DWO file found: %s\n", dwo_name); + + return dwo_file.release (); +} + +/* This function is mapped across the sections and remembers the offset and + size of each of the DWP debugging sections common to version 1 and 2 that + we are interested in. */ + +static void +dwarf2_locate_common_dwp_sections (bfd *abfd, asection *sectp, + void *dwp_file_ptr) +{ + struct dwp_file *dwp_file = (struct dwp_file *) dwp_file_ptr; + const struct dwop_section_names *names = &dwop_section_names; + unsigned int elf_section_nr = elf_section_data (sectp)->this_idx; + + /* Record the ELF section number for later lookup: this is what the + .debug_cu_index,.debug_tu_index tables use in DWP V1. */ + gdb_assert (elf_section_nr < dwp_file->num_sections); + dwp_file->elf_sections[elf_section_nr] = sectp; + + /* Look for specific sections that we need. */ + if (section_is_p (sectp->name, &names->str_dwo)) + { + dwp_file->sections.str.s.section = sectp; + dwp_file->sections.str.size = bfd_section_size (sectp); + } + else if (section_is_p (sectp->name, &names->cu_index)) + { + dwp_file->sections.cu_index.s.section = sectp; + dwp_file->sections.cu_index.size = bfd_section_size (sectp); + } + else if (section_is_p (sectp->name, &names->tu_index)) + { + dwp_file->sections.tu_index.s.section = sectp; + dwp_file->sections.tu_index.size = bfd_section_size (sectp); + } +} + +/* This function is mapped across the sections and remembers the offset and + size of each of the DWP version 2 debugging sections that we are interested + in. This is split into a separate function because we don't know if we + have version 1 or 2 or 5 until we parse the cu_index/tu_index sections. */ + +static void +dwarf2_locate_v2_dwp_sections (bfd *abfd, asection *sectp, void *dwp_file_ptr) +{ + struct dwp_file *dwp_file = (struct dwp_file *) dwp_file_ptr; + const struct dwop_section_names *names = &dwop_section_names; + unsigned int elf_section_nr = elf_section_data (sectp)->this_idx; + + /* Record the ELF section number for later lookup: this is what the + .debug_cu_index,.debug_tu_index tables use in DWP V1. */ + gdb_assert (elf_section_nr < dwp_file->num_sections); + dwp_file->elf_sections[elf_section_nr] = sectp; + + /* Look for specific sections that we need. */ + if (section_is_p (sectp->name, &names->abbrev_dwo)) + { + dwp_file->sections.abbrev.s.section = sectp; + dwp_file->sections.abbrev.size = bfd_section_size (sectp); + } + else if (section_is_p (sectp->name, &names->info_dwo)) + { + dwp_file->sections.info.s.section = sectp; + dwp_file->sections.info.size = bfd_section_size (sectp); + } + else if (section_is_p (sectp->name, &names->line_dwo)) + { + dwp_file->sections.line.s.section = sectp; + dwp_file->sections.line.size = bfd_section_size (sectp); + } + else if (section_is_p (sectp->name, &names->loc_dwo)) + { + dwp_file->sections.loc.s.section = sectp; + dwp_file->sections.loc.size = bfd_section_size (sectp); + } + else if (section_is_p (sectp->name, &names->macinfo_dwo)) + { + dwp_file->sections.macinfo.s.section = sectp; + dwp_file->sections.macinfo.size = bfd_section_size (sectp); + } + else if (section_is_p (sectp->name, &names->macro_dwo)) + { + dwp_file->sections.macro.s.section = sectp; + dwp_file->sections.macro.size = bfd_section_size (sectp); + } + else if (section_is_p (sectp->name, &names->str_offsets_dwo)) + { + dwp_file->sections.str_offsets.s.section = sectp; + dwp_file->sections.str_offsets.size = bfd_section_size (sectp); + } + else if (section_is_p (sectp->name, &names->types_dwo)) + { + dwp_file->sections.types.s.section = sectp; + dwp_file->sections.types.size = bfd_section_size (sectp); + } +} + +/* This function is mapped across the sections and remembers the offset and + size of each of the DWP version 5 debugging sections that we are interested + in. This is split into a separate function because we don't know if we + have version 1 or 2 or 5 until we parse the cu_index/tu_index sections. */ + +static void +dwarf2_locate_v5_dwp_sections (bfd *abfd, asection *sectp, void *dwp_file_ptr) +{ + struct dwp_file *dwp_file = (struct dwp_file *) dwp_file_ptr; + const struct dwop_section_names *names = &dwop_section_names; + unsigned int elf_section_nr = elf_section_data (sectp)->this_idx; + + /* Record the ELF section number for later lookup: this is what the + .debug_cu_index,.debug_tu_index tables use in DWP V1. */ + gdb_assert (elf_section_nr < dwp_file->num_sections); + dwp_file->elf_sections[elf_section_nr] = sectp; + + /* Look for specific sections that we need. */ + if (section_is_p (sectp->name, &names->abbrev_dwo)) + { + dwp_file->sections.abbrev.s.section = sectp; + dwp_file->sections.abbrev.size = bfd_section_size (sectp); + } + else if (section_is_p (sectp->name, &names->info_dwo)) + { + dwp_file->sections.info.s.section = sectp; + dwp_file->sections.info.size = bfd_section_size (sectp); + } + else if (section_is_p (sectp->name, &names->line_dwo)) + { + dwp_file->sections.line.s.section = sectp; + dwp_file->sections.line.size = bfd_section_size (sectp); + } + else if (section_is_p (sectp->name, &names->loclists_dwo)) + { + dwp_file->sections.loclists.s.section = sectp; + dwp_file->sections.loclists.size = bfd_section_size (sectp); + } + else if (section_is_p (sectp->name, &names->macro_dwo)) + { + dwp_file->sections.macro.s.section = sectp; + dwp_file->sections.macro.size = bfd_section_size (sectp); + } + else if (section_is_p (sectp->name, &names->rnglists_dwo)) + { + dwp_file->sections.rnglists.s.section = sectp; + dwp_file->sections.rnglists.size = bfd_section_size (sectp); + } + else if (section_is_p (sectp->name, &names->str_offsets_dwo)) + { + dwp_file->sections.str_offsets.s.section = sectp; + dwp_file->sections.str_offsets.size = bfd_section_size (sectp); + } +} + +/* Hash function for dwp_file loaded CUs/TUs. */ + +static hashval_t +hash_dwp_loaded_cutus (const void *item) +{ + const struct dwo_unit *dwo_unit = (const struct dwo_unit *) item; + + /* This drops the top 32 bits of the signature, but is ok for a hash. */ + return dwo_unit->signature; +} + +/* Equality function for dwp_file loaded CUs/TUs. */ + +static int +eq_dwp_loaded_cutus (const void *a, const void *b) +{ + const struct dwo_unit *dua = (const struct dwo_unit *) a; + const struct dwo_unit *dub = (const struct dwo_unit *) b; + + return dua->signature == dub->signature; +} + +/* Allocate a hash table for dwp_file loaded CUs/TUs. */ + +static htab_up +allocate_dwp_loaded_cutus_table () +{ + return htab_up (htab_create_alloc (3, + hash_dwp_loaded_cutus, + eq_dwp_loaded_cutus, + NULL, xcalloc, xfree)); +} + +/* Try to open DWP file FILE_NAME. + The result is the bfd handle of the file. + If there is a problem finding or opening the file, return NULL. + Upon success, the canonicalized path of the file is stored in the bfd, + same as symfile_bfd_open. */ + +static gdb_bfd_ref_ptr +open_dwp_file (dwarf2_per_objfile *per_objfile, const char *file_name) +{ + gdb_bfd_ref_ptr abfd (try_open_dwop_file (per_objfile, file_name, + 1 /*is_dwp*/, + 1 /*search_cwd*/)); + if (abfd != NULL) + return abfd; + + /* Work around upstream bug 15652. + http://sourceware.org/bugzilla/show_bug.cgi?id=15652 + [Whether that's a "bug" is debatable, but it is getting in our way.] + We have no real idea where the dwp file is, because gdb's realpath-ing + of the executable's path may have discarded the needed info. + [IWBN if the dwp file name was recorded in the executable, akin to + .gnu_debuglink, but that doesn't exist yet.] + Strip the directory from FILE_NAME and search again. */ + if (*debug_file_directory != '\0') + { + /* Don't implicitly search the current directory here. + If the user wants to search "." to handle this case, + it must be added to debug-file-directory. */ + return try_open_dwop_file (per_objfile, lbasename (file_name), + 1 /*is_dwp*/, + 0 /*search_cwd*/); + } + + return NULL; +} + +/* Initialize the use of the DWP file for the current objfile. + By convention the name of the DWP file is ${objfile}.dwp. + The result is NULL if it can't be found. */ + +static std::unique_ptr<struct dwp_file> +open_and_init_dwp_file (dwarf2_per_objfile *per_objfile) +{ + struct objfile *objfile = per_objfile->objfile; + + /* Try to find first .dwp for the binary file before any symbolic links + resolving. */ + + /* If the objfile is a debug file, find the name of the real binary + file and get the name of dwp file from there. */ + std::string dwp_name; + if (objfile->separate_debug_objfile_backlink != NULL) + { + struct objfile *backlink = objfile->separate_debug_objfile_backlink; + const char *backlink_basename = lbasename (backlink->original_name); + + dwp_name = ldirname (objfile->original_name) + SLASH_STRING + backlink_basename; + } + else + dwp_name = objfile->original_name; + + dwp_name += ".dwp"; + + gdb_bfd_ref_ptr dbfd (open_dwp_file (per_objfile, dwp_name.c_str ())); + if (dbfd == NULL + && strcmp (objfile->original_name, objfile_name (objfile)) != 0) + { + /* Try to find .dwp for the binary file after gdb_realpath resolving. */ + dwp_name = objfile_name (objfile); + dwp_name += ".dwp"; + dbfd = open_dwp_file (per_objfile, dwp_name.c_str ()); + } + + if (dbfd == NULL) + { + if (dwarf_read_debug) + fprintf_unfiltered (gdb_stdlog, "DWP file not found: %s\n", dwp_name.c_str ()); + return std::unique_ptr<dwp_file> (); + } + + const char *name = bfd_get_filename (dbfd.get ()); + std::unique_ptr<struct dwp_file> dwp_file + (new struct dwp_file (name, std::move (dbfd))); + + dwp_file->num_sections = elf_numsections (dwp_file->dbfd); + dwp_file->elf_sections = + OBSTACK_CALLOC (&per_objfile->per_bfd->obstack, + dwp_file->num_sections, asection *); + + bfd_map_over_sections (dwp_file->dbfd.get (), + dwarf2_locate_common_dwp_sections, + dwp_file.get ()); + + dwp_file->cus = create_dwp_hash_table (per_objfile, dwp_file.get (), 0); + + dwp_file->tus = create_dwp_hash_table (per_objfile, dwp_file.get (), 1); + + /* The DWP file version is stored in the hash table. Oh well. */ + if (dwp_file->cus && dwp_file->tus + && dwp_file->cus->version != dwp_file->tus->version) + { + /* Technically speaking, we should try to limp along, but this is + pretty bizarre. We use pulongest here because that's the established + portability solution (e.g, we cannot use %u for uint32_t). */ + error (_("Dwarf Error: DWP file CU version %s doesn't match" + " TU version %s [in DWP file %s]"), + pulongest (dwp_file->cus->version), + pulongest (dwp_file->tus->version), dwp_name.c_str ()); + } + + if (dwp_file->cus) + dwp_file->version = dwp_file->cus->version; + else if (dwp_file->tus) + dwp_file->version = dwp_file->tus->version; + else + dwp_file->version = 2; + + if (dwp_file->version == 2) + bfd_map_over_sections (dwp_file->dbfd.get (), + dwarf2_locate_v2_dwp_sections, + dwp_file.get ()); + else if (dwp_file->version == 5) + bfd_map_over_sections (dwp_file->dbfd.get (), + dwarf2_locate_v5_dwp_sections, + dwp_file.get ()); + + + dwp_file->loaded_cus = allocate_dwp_loaded_cutus_table (); + dwp_file->loaded_tus = allocate_dwp_loaded_cutus_table (); + + if (dwarf_read_debug) + { + fprintf_unfiltered (gdb_stdlog, "DWP file found: %s\n", dwp_file->name); + fprintf_unfiltered (gdb_stdlog, + " %s CUs, %s TUs\n", + pulongest (dwp_file->cus ? dwp_file->cus->nr_units : 0), + pulongest (dwp_file->tus ? dwp_file->tus->nr_units : 0)); + } + + return dwp_file; +} + +/* Wrapper around open_and_init_dwp_file, only open it once. */ + +static struct dwp_file * +get_dwp_file (dwarf2_per_objfile *per_objfile) +{ + if (!per_objfile->per_bfd->dwp_checked) + { + per_objfile->per_bfd->dwp_file = open_and_init_dwp_file (per_objfile); + per_objfile->per_bfd->dwp_checked = 1; + } + return per_objfile->per_bfd->dwp_file.get (); +} + +/* Subroutine of lookup_dwo_comp_unit, lookup_dwo_type_unit. + Look up the CU/TU with signature SIGNATURE, either in DWO file DWO_NAME + or in the DWP file for the objfile, referenced by THIS_UNIT. + If non-NULL, comp_dir is the DW_AT_comp_dir attribute. + IS_DEBUG_TYPES is non-zero if reading a TU, otherwise read a CU. + + This is called, for example, when wanting to read a variable with a + complex location. Therefore we don't want to do file i/o for every call. + Therefore we don't want to look for a DWO file on every call. + Therefore we first see if we've already seen SIGNATURE in a DWP file, + then we check if we've already seen DWO_NAME, and only THEN do we check + for a DWO file. + + The result is a pointer to the dwo_unit object or NULL if we didn't find it + (dwo_id mismatch or couldn't find the DWO/DWP file). */ + +static struct dwo_unit * +lookup_dwo_cutu (dwarf2_cu *cu, const char *dwo_name, const char *comp_dir, + ULONGEST signature, int is_debug_types) +{ + dwarf2_per_objfile *per_objfile = cu->per_objfile; + struct objfile *objfile = per_objfile->objfile; + const char *kind = is_debug_types ? "TU" : "CU"; + void **dwo_file_slot; + struct dwo_file *dwo_file; + struct dwp_file *dwp_file; + + /* First see if there's a DWP file. + If we have a DWP file but didn't find the DWO inside it, don't + look for the original DWO file. It makes gdb behave differently + depending on whether one is debugging in the build tree. */ + + dwp_file = get_dwp_file (per_objfile); + if (dwp_file != NULL) + { + const struct dwp_hash_table *dwp_htab = + is_debug_types ? dwp_file->tus : dwp_file->cus; + + if (dwp_htab != NULL) + { + struct dwo_unit *dwo_cutu = + lookup_dwo_unit_in_dwp (per_objfile, dwp_file, comp_dir, signature, + is_debug_types); + + if (dwo_cutu != NULL) + { + if (dwarf_read_debug) + { + fprintf_unfiltered (gdb_stdlog, + "Virtual DWO %s %s found: @%s\n", + kind, hex_string (signature), + host_address_to_string (dwo_cutu)); + } + return dwo_cutu; + } + } + } + else + { + /* No DWP file, look for the DWO file. */ + + dwo_file_slot = lookup_dwo_file_slot (per_objfile, dwo_name, comp_dir); + if (*dwo_file_slot == NULL) + { + /* Read in the file and build a table of the CUs/TUs it contains. */ + *dwo_file_slot = open_and_init_dwo_file (cu, dwo_name, comp_dir); + } + /* NOTE: This will be NULL if unable to open the file. */ + dwo_file = (struct dwo_file *) *dwo_file_slot; + + if (dwo_file != NULL) + { + struct dwo_unit *dwo_cutu = NULL; + + if (is_debug_types && dwo_file->tus) + { + struct dwo_unit find_dwo_cutu; + + memset (&find_dwo_cutu, 0, sizeof (find_dwo_cutu)); + find_dwo_cutu.signature = signature; + dwo_cutu + = (struct dwo_unit *) htab_find (dwo_file->tus.get (), + &find_dwo_cutu); + } + else if (!is_debug_types && dwo_file->cus) + { + struct dwo_unit find_dwo_cutu; + + memset (&find_dwo_cutu, 0, sizeof (find_dwo_cutu)); + find_dwo_cutu.signature = signature; + dwo_cutu = (struct dwo_unit *)htab_find (dwo_file->cus.get (), + &find_dwo_cutu); + } + + if (dwo_cutu != NULL) + { + if (dwarf_read_debug) + { + fprintf_unfiltered (gdb_stdlog, "DWO %s %s(%s) found: @%s\n", + kind, dwo_name, hex_string (signature), + host_address_to_string (dwo_cutu)); + } + return dwo_cutu; + } + } + } + + /* We didn't find it. This could mean a dwo_id mismatch, or + someone deleted the DWO/DWP file, or the search path isn't set up + correctly to find the file. */ + + if (dwarf_read_debug) + { + fprintf_unfiltered (gdb_stdlog, "DWO %s %s(%s) not found\n", + kind, dwo_name, hex_string (signature)); + } + + /* This is a warning and not a complaint because it can be caused by + pilot error (e.g., user accidentally deleting the DWO). */ + { + /* Print the name of the DWP file if we looked there, helps the user + better diagnose the problem. */ + std::string dwp_text; + + if (dwp_file != NULL) + dwp_text = string_printf (" [in DWP file %s]", + lbasename (dwp_file->name)); + + warning (_("Could not find DWO %s %s(%s)%s referenced by %s at offset %s" + " [in module %s]"), + kind, dwo_name, hex_string (signature), dwp_text.c_str (), kind, + sect_offset_str (cu->per_cu->sect_off), objfile_name (objfile)); + } + return NULL; +} + +/* Lookup the DWO CU DWO_NAME/SIGNATURE referenced from THIS_CU. + See lookup_dwo_cutu_unit for details. */ + +static struct dwo_unit * +lookup_dwo_comp_unit (dwarf2_cu *cu, const char *dwo_name, const char *comp_dir, + ULONGEST signature) +{ + gdb_assert (!cu->per_cu->is_debug_types); + + return lookup_dwo_cutu (cu, dwo_name, comp_dir, signature, 0); +} + +/* Lookup the DWO TU DWO_NAME/SIGNATURE referenced from THIS_TU. + See lookup_dwo_cutu_unit for details. */ + +static struct dwo_unit * +lookup_dwo_type_unit (dwarf2_cu *cu, const char *dwo_name, const char *comp_dir) +{ + gdb_assert (cu->per_cu->is_debug_types); + + signatured_type *sig_type = (signatured_type *) cu->per_cu; + + return lookup_dwo_cutu (cu, dwo_name, comp_dir, sig_type->signature, 1); +} + +/* Traversal function for queue_and_load_all_dwo_tus. */ + +static int +queue_and_load_dwo_tu (void **slot, void *info) +{ + struct dwo_unit *dwo_unit = (struct dwo_unit *) *slot; + dwarf2_cu *cu = (dwarf2_cu *) info; + ULONGEST signature = dwo_unit->signature; + signatured_type *sig_type = lookup_dwo_signatured_type (cu, signature); + + if (sig_type != NULL) + { + struct dwarf2_per_cu_data *sig_cu = &sig_type->per_cu; + + /* We pass NULL for DEPENDENT_CU because we don't yet know if there's + a real dependency of PER_CU on SIG_TYPE. That is detected later + while processing PER_CU. */ + if (maybe_queue_comp_unit (NULL, sig_cu, cu->per_objfile, cu->language)) + load_full_type_unit (sig_cu, cu->per_objfile); + cu->per_cu->imported_symtabs_push (sig_cu); + } + + return 1; +} + +/* Queue all TUs contained in the DWO of CU to be read in. + The DWO may have the only definition of the type, though it may not be + referenced anywhere in PER_CU. Thus we have to load *all* its TUs. + http://sourceware.org/bugzilla/show_bug.cgi?id=15021 */ + +static void +queue_and_load_all_dwo_tus (dwarf2_cu *cu) +{ + struct dwo_unit *dwo_unit; + struct dwo_file *dwo_file; + + gdb_assert (cu != nullptr); + gdb_assert (!cu->per_cu->is_debug_types); + gdb_assert (get_dwp_file (cu->per_objfile) == nullptr); + + dwo_unit = cu->dwo_unit; + gdb_assert (dwo_unit != NULL); + + dwo_file = dwo_unit->dwo_file; + if (dwo_file->tus != NULL) + htab_traverse_noresize (dwo_file->tus.get (), queue_and_load_dwo_tu, cu); +} + +/* Read in various DIEs. */ + +/* DW_AT_abstract_origin inherits whole DIEs (not just their attributes). + Inherit only the children of the DW_AT_abstract_origin DIE not being + already referenced by DW_AT_abstract_origin from the children of the + current DIE. */ + +static void +inherit_abstract_dies (struct die_info *die, struct dwarf2_cu *cu) +{ + struct die_info *child_die; + sect_offset *offsetp; + /* Parent of DIE - referenced by DW_AT_abstract_origin. */ + struct die_info *origin_die; + /* Iterator of the ORIGIN_DIE children. */ + struct die_info *origin_child_die; + struct attribute *attr; + struct dwarf2_cu *origin_cu; + struct pending **origin_previous_list_in_scope; + + attr = dwarf2_attr (die, DW_AT_abstract_origin, cu); + if (!attr) + return; + + /* Note that following die references may follow to a die in a + different cu. */ + + origin_cu = cu; + origin_die = follow_die_ref (die, attr, &origin_cu); + + /* We're inheriting ORIGIN's children into the scope we'd put DIE's + symbols in. */ + origin_previous_list_in_scope = origin_cu->list_in_scope; + origin_cu->list_in_scope = cu->list_in_scope; + + if (die->tag != origin_die->tag + && !(die->tag == DW_TAG_inlined_subroutine + && origin_die->tag == DW_TAG_subprogram)) + complaint (_("DIE %s and its abstract origin %s have different tags"), + sect_offset_str (die->sect_off), + sect_offset_str (origin_die->sect_off)); + + std::vector<sect_offset> offsets; + + for (child_die = die->child; + child_die && child_die->tag; + child_die = child_die->sibling) + { + struct die_info *child_origin_die; + struct dwarf2_cu *child_origin_cu; + + /* We are trying to process concrete instance entries: + DW_TAG_call_site DIEs indeed have a DW_AT_abstract_origin tag, but + it's not relevant to our analysis here. i.e. detecting DIEs that are + present in the abstract instance but not referenced in the concrete + one. */ + if (child_die->tag == DW_TAG_call_site + || child_die->tag == DW_TAG_GNU_call_site) + continue; + + /* For each CHILD_DIE, find the corresponding child of + ORIGIN_DIE. If there is more than one layer of + DW_AT_abstract_origin, follow them all; there shouldn't be, + but GCC versions at least through 4.4 generate this (GCC PR + 40573). */ + child_origin_die = child_die; + child_origin_cu = cu; + while (1) + { + attr = dwarf2_attr (child_origin_die, DW_AT_abstract_origin, + child_origin_cu); + if (attr == NULL) + break; + child_origin_die = follow_die_ref (child_origin_die, attr, + &child_origin_cu); + } + + /* According to DWARF3 3.3.8.2 #3 new entries without their abstract + counterpart may exist. */ + if (child_origin_die != child_die) + { + if (child_die->tag != child_origin_die->tag + && !(child_die->tag == DW_TAG_inlined_subroutine + && child_origin_die->tag == DW_TAG_subprogram)) + complaint (_("Child DIE %s and its abstract origin %s have " + "different tags"), + sect_offset_str (child_die->sect_off), + sect_offset_str (child_origin_die->sect_off)); + if (child_origin_die->parent != origin_die) + complaint (_("Child DIE %s and its abstract origin %s have " + "different parents"), + sect_offset_str (child_die->sect_off), + sect_offset_str (child_origin_die->sect_off)); + else + offsets.push_back (child_origin_die->sect_off); + } + } + std::sort (offsets.begin (), offsets.end ()); + sect_offset *offsets_end = offsets.data () + offsets.size (); + for (offsetp = offsets.data () + 1; offsetp < offsets_end; offsetp++) + if (offsetp[-1] == *offsetp) + complaint (_("Multiple children of DIE %s refer " + "to DIE %s as their abstract origin"), + sect_offset_str (die->sect_off), sect_offset_str (*offsetp)); + + offsetp = offsets.data (); + origin_child_die = origin_die->child; + while (origin_child_die && origin_child_die->tag) + { + /* Is ORIGIN_CHILD_DIE referenced by any of the DIE children? */ + while (offsetp < offsets_end + && *offsetp < origin_child_die->sect_off) + offsetp++; + if (offsetp >= offsets_end + || *offsetp > origin_child_die->sect_off) + { + /* Found that ORIGIN_CHILD_DIE is really not referenced. + Check whether we're already processing ORIGIN_CHILD_DIE. + This can happen with mutually referenced abstract_origins. + PR 16581. */ + if (!origin_child_die->in_process) + process_die (origin_child_die, origin_cu); + } + origin_child_die = origin_child_die->sibling; + } + origin_cu->list_in_scope = origin_previous_list_in_scope; + + if (cu != origin_cu) + compute_delayed_physnames (origin_cu); +} + +static void +read_func_scope (struct die_info *die, struct dwarf2_cu *cu) +{ + struct objfile *objfile = cu->per_objfile->objfile; + struct gdbarch *gdbarch = objfile->arch (); + struct context_stack *newobj; + CORE_ADDR lowpc; + CORE_ADDR highpc; + struct die_info *child_die; + struct attribute *attr, *call_line, *call_file; + const char *name; + CORE_ADDR baseaddr; + struct block *block; + int inlined_func = (die->tag == DW_TAG_inlined_subroutine); + std::vector<struct symbol *> template_args; + struct template_symbol *templ_func = NULL; + + if (inlined_func) + { + /* If we do not have call site information, we can't show the + caller of this inlined function. That's too confusing, so + only use the scope for local variables. */ + call_line = dwarf2_attr (die, DW_AT_call_line, cu); + call_file = dwarf2_attr (die, DW_AT_call_file, cu); + if (call_line == NULL || call_file == NULL) + { + read_lexical_block_scope (die, cu); + return; + } + } + + baseaddr = objfile->text_section_offset (); + + name = dwarf2_name (die, cu); + + /* Ignore functions with missing or empty names. These are actually + illegal according to the DWARF standard. */ + if (name == NULL) + { + complaint (_("missing name for subprogram DIE at %s"), + sect_offset_str (die->sect_off)); + return; + } + + /* Ignore functions with missing or invalid low and high pc attributes. */ + if (dwarf2_get_pc_bounds (die, &lowpc, &highpc, cu, NULL) + <= PC_BOUNDS_INVALID) + { + attr = dwarf2_attr (die, DW_AT_external, cu); + if (!attr || !DW_UNSND (attr)) + complaint (_("cannot get low and high bounds " + "for subprogram DIE at %s"), + sect_offset_str (die->sect_off)); + return; + } + + lowpc = gdbarch_adjust_dwarf2_addr (gdbarch, lowpc + baseaddr); + highpc = gdbarch_adjust_dwarf2_addr (gdbarch, highpc + baseaddr); + + /* If we have any template arguments, then we must allocate a + different sort of symbol. */ + for (child_die = die->child; child_die; child_die = child_die->sibling) + { + if (child_die->tag == DW_TAG_template_type_param + || child_die->tag == DW_TAG_template_value_param) + { + templ_func = new (&objfile->objfile_obstack) template_symbol; + templ_func->subclass = SYMBOL_TEMPLATE; + break; + } + } + + newobj = cu->get_builder ()->push_context (0, lowpc); + newobj->name = new_symbol (die, read_type_die (die, cu), cu, + (struct symbol *) templ_func); + + if (dwarf2_flag_true_p (die, DW_AT_main_subprogram, cu)) + set_objfile_main_name (objfile, newobj->name->linkage_name (), + cu->language); + + /* If there is a location expression for DW_AT_frame_base, record + it. */ + attr = dwarf2_attr (die, DW_AT_frame_base, cu); + if (attr != nullptr) + dwarf2_symbol_mark_computed (attr, newobj->name, cu, 1); + + /* If there is a location for the static link, record it. */ + newobj->static_link = NULL; + attr = dwarf2_attr (die, DW_AT_static_link, cu); + if (attr != nullptr) + { + newobj->static_link + = XOBNEW (&objfile->objfile_obstack, struct dynamic_prop); + attr_to_dynamic_prop (attr, die, cu, newobj->static_link, + cu->addr_type ()); + } + + cu->list_in_scope = cu->get_builder ()->get_local_symbols (); + + if (die->child != NULL) + { + child_die = die->child; + while (child_die && child_die->tag) + { + if (child_die->tag == DW_TAG_template_type_param + || child_die->tag == DW_TAG_template_value_param) + { + struct symbol *arg = new_symbol (child_die, NULL, cu); + + if (arg != NULL) + template_args.push_back (arg); + } + else + process_die (child_die, cu); + child_die = child_die->sibling; + } + } + + inherit_abstract_dies (die, cu); + + /* If we have a DW_AT_specification, we might need to import using + directives from the context of the specification DIE. See the + comment in determine_prefix. */ + if (cu->language == language_cplus + && dwarf2_attr (die, DW_AT_specification, cu)) + { + struct dwarf2_cu *spec_cu = cu; + struct die_info *spec_die = die_specification (die, &spec_cu); + + while (spec_die) + { + child_die = spec_die->child; + while (child_die && child_die->tag) + { + if (child_die->tag == DW_TAG_imported_module) + process_die (child_die, spec_cu); + child_die = child_die->sibling; + } + + /* In some cases, GCC generates specification DIEs that + themselves contain DW_AT_specification attributes. */ + spec_die = die_specification (spec_die, &spec_cu); + } + } + + struct context_stack cstk = cu->get_builder ()->pop_context (); + /* Make a block for the local symbols within. */ + block = cu->get_builder ()->finish_block (cstk.name, cstk.old_blocks, + cstk.static_link, lowpc, highpc); + + /* For C++, set the block's scope. */ + if ((cu->language == language_cplus + || cu->language == language_fortran + || cu->language == language_d + || cu->language == language_rust) + && cu->processing_has_namespace_info) + block_set_scope (block, determine_prefix (die, cu), + &objfile->objfile_obstack); + + /* If we have address ranges, record them. */ + dwarf2_record_block_ranges (die, block, baseaddr, cu); + + gdbarch_make_symbol_special (gdbarch, cstk.name, objfile); + + /* Attach template arguments to function. */ + if (!template_args.empty ()) + { + gdb_assert (templ_func != NULL); + + templ_func->n_template_arguments = template_args.size (); + templ_func->template_arguments + = XOBNEWVEC (&objfile->objfile_obstack, struct symbol *, + templ_func->n_template_arguments); + memcpy (templ_func->template_arguments, + template_args.data (), + (templ_func->n_template_arguments * sizeof (struct symbol *))); + + /* Make sure that the symtab is set on the new symbols. Even + though they don't appear in this symtab directly, other parts + of gdb assume that symbols do, and this is reasonably + true. */ + for (symbol *sym : template_args) + symbol_set_symtab (sym, symbol_symtab (templ_func)); + } + + /* In C++, we can have functions nested inside functions (e.g., when + a function declares a class that has methods). This means that + when we finish processing a function scope, we may need to go + back to building a containing block's symbol lists. */ + *cu->get_builder ()->get_local_symbols () = cstk.locals; + cu->get_builder ()->set_local_using_directives (cstk.local_using_directives); + + /* If we've finished processing a top-level function, subsequent + symbols go in the file symbol list. */ + if (cu->get_builder ()->outermost_context_p ()) + cu->list_in_scope = cu->get_builder ()->get_file_symbols (); +} + +/* Process all the DIES contained within a lexical block scope. Start + a new scope, process the dies, and then close the scope. */ + +static void +read_lexical_block_scope (struct die_info *die, struct dwarf2_cu *cu) +{ + struct objfile *objfile = cu->per_objfile->objfile; + struct gdbarch *gdbarch = objfile->arch (); + CORE_ADDR lowpc, highpc; + struct die_info *child_die; + CORE_ADDR baseaddr; + + baseaddr = objfile->text_section_offset (); + + /* Ignore blocks with missing or invalid low and high pc attributes. */ + /* ??? Perhaps consider discontiguous blocks defined by DW_AT_ranges + as multiple lexical blocks? Handling children in a sane way would + be nasty. Might be easier to properly extend generic blocks to + describe ranges. */ + switch (dwarf2_get_pc_bounds (die, &lowpc, &highpc, cu, NULL)) + { + case PC_BOUNDS_NOT_PRESENT: + /* DW_TAG_lexical_block has no attributes, process its children as if + there was no wrapping by that DW_TAG_lexical_block. + GCC does no longer produces such DWARF since GCC r224161. */ + for (child_die = die->child; + child_die != NULL && child_die->tag; + child_die = child_die->sibling) + { + /* We might already be processing this DIE. This can happen + in an unusual circumstance -- where a subroutine A + appears lexically in another subroutine B, but A actually + inlines B. The recursion is broken here, rather than in + inherit_abstract_dies, because it seems better to simply + drop concrete children here. */ + if (!child_die->in_process) + process_die (child_die, cu); + } + return; + case PC_BOUNDS_INVALID: + return; + } + lowpc = gdbarch_adjust_dwarf2_addr (gdbarch, lowpc + baseaddr); + highpc = gdbarch_adjust_dwarf2_addr (gdbarch, highpc + baseaddr); + + cu->get_builder ()->push_context (0, lowpc); + if (die->child != NULL) + { + child_die = die->child; + while (child_die && child_die->tag) + { + process_die (child_die, cu); + child_die = child_die->sibling; + } + } + inherit_abstract_dies (die, cu); + struct context_stack cstk = cu->get_builder ()->pop_context (); + + if (*cu->get_builder ()->get_local_symbols () != NULL + || (*cu->get_builder ()->get_local_using_directives ()) != NULL) + { + struct block *block + = cu->get_builder ()->finish_block (0, cstk.old_blocks, NULL, + cstk.start_addr, highpc); + + /* Note that recording ranges after traversing children, as we + do here, means that recording a parent's ranges entails + walking across all its children's ranges as they appear in + the address map, which is quadratic behavior. + + It would be nicer to record the parent's ranges before + traversing its children, simply overriding whatever you find + there. But since we don't even decide whether to create a + block until after we've traversed its children, that's hard + to do. */ + dwarf2_record_block_ranges (die, block, baseaddr, cu); + } + *cu->get_builder ()->get_local_symbols () = cstk.locals; + cu->get_builder ()->set_local_using_directives (cstk.local_using_directives); +} + +/* Read in DW_TAG_call_site and insert it to CU->call_site_htab. */ + +static void +read_call_site_scope (struct die_info *die, struct dwarf2_cu *cu) +{ + dwarf2_per_objfile *per_objfile = cu->per_objfile; + struct objfile *objfile = per_objfile->objfile; + struct gdbarch *gdbarch = objfile->arch (); + CORE_ADDR pc, baseaddr; + struct attribute *attr; + struct call_site *call_site, call_site_local; + void **slot; + int nparams; + struct die_info *child_die; + + baseaddr = objfile->text_section_offset (); + + attr = dwarf2_attr (die, DW_AT_call_return_pc, cu); + if (attr == NULL) + { + /* This was a pre-DWARF-5 GNU extension alias + for DW_AT_call_return_pc. */ + attr = dwarf2_attr (die, DW_AT_low_pc, cu); + } + if (!attr) + { + complaint (_("missing DW_AT_call_return_pc for DW_TAG_call_site " + "DIE %s [in module %s]"), + sect_offset_str (die->sect_off), objfile_name (objfile)); + return; + } + pc = attr->value_as_address () + baseaddr; + pc = gdbarch_adjust_dwarf2_addr (gdbarch, pc); + + if (cu->call_site_htab == NULL) + cu->call_site_htab = htab_create_alloc_ex (16, core_addr_hash, core_addr_eq, + NULL, &objfile->objfile_obstack, + hashtab_obstack_allocate, NULL); + call_site_local.pc = pc; + slot = htab_find_slot (cu->call_site_htab, &call_site_local, INSERT); + if (*slot != NULL) + { + complaint (_("Duplicate PC %s for DW_TAG_call_site " + "DIE %s [in module %s]"), + paddress (gdbarch, pc), sect_offset_str (die->sect_off), + objfile_name (objfile)); + return; + } + + /* Count parameters at the caller. */ + + nparams = 0; + for (child_die = die->child; child_die && child_die->tag; + child_die = child_die->sibling) + { + if (child_die->tag != DW_TAG_call_site_parameter + && child_die->tag != DW_TAG_GNU_call_site_parameter) + { + complaint (_("Tag %d is not DW_TAG_call_site_parameter in " + "DW_TAG_call_site child DIE %s [in module %s]"), + child_die->tag, sect_offset_str (child_die->sect_off), + objfile_name (objfile)); + continue; + } + + nparams++; + } + + call_site + = ((struct call_site *) + obstack_alloc (&objfile->objfile_obstack, + sizeof (*call_site) + + (sizeof (*call_site->parameter) * (nparams - 1)))); + *slot = call_site; + memset (call_site, 0, sizeof (*call_site) - sizeof (*call_site->parameter)); + call_site->pc = pc; + + if (dwarf2_flag_true_p (die, DW_AT_call_tail_call, cu) + || dwarf2_flag_true_p (die, DW_AT_GNU_tail_call, cu)) + { + struct die_info *func_die; + + /* Skip also over DW_TAG_inlined_subroutine. */ + for (func_die = die->parent; + func_die && func_die->tag != DW_TAG_subprogram + && func_die->tag != DW_TAG_subroutine_type; + func_die = func_die->parent); + + /* DW_AT_call_all_calls is a superset + of DW_AT_call_all_tail_calls. */ + if (func_die + && !dwarf2_flag_true_p (func_die, DW_AT_call_all_calls, cu) + && !dwarf2_flag_true_p (func_die, DW_AT_GNU_all_call_sites, cu) + && !dwarf2_flag_true_p (func_die, DW_AT_call_all_tail_calls, cu) + && !dwarf2_flag_true_p (func_die, DW_AT_GNU_all_tail_call_sites, cu)) + { + /* TYPE_TAIL_CALL_LIST is not interesting in functions where it is + not complete. But keep CALL_SITE for look ups via call_site_htab, + both the initial caller containing the real return address PC and + the final callee containing the current PC of a chain of tail + calls do not need to have the tail call list complete. But any + function candidate for a virtual tail call frame searched via + TYPE_TAIL_CALL_LIST must have the tail call list complete to be + determined unambiguously. */ + } + else + { + struct type *func_type = NULL; + + if (func_die) + func_type = get_die_type (func_die, cu); + if (func_type != NULL) + { + gdb_assert (func_type->code () == TYPE_CODE_FUNC); + + /* Enlist this call site to the function. */ + call_site->tail_call_next = TYPE_TAIL_CALL_LIST (func_type); + TYPE_TAIL_CALL_LIST (func_type) = call_site; + } + else + complaint (_("Cannot find function owning DW_TAG_call_site " + "DIE %s [in module %s]"), + sect_offset_str (die->sect_off), objfile_name (objfile)); + } + } + + attr = dwarf2_attr (die, DW_AT_call_target, cu); + if (attr == NULL) + attr = dwarf2_attr (die, DW_AT_GNU_call_site_target, cu); + if (attr == NULL) + attr = dwarf2_attr (die, DW_AT_call_origin, cu); + if (attr == NULL) + { + /* This was a pre-DWARF-5 GNU extension alias for DW_AT_call_origin. */ + attr = dwarf2_attr (die, DW_AT_abstract_origin, cu); + } + SET_FIELD_DWARF_BLOCK (call_site->target, NULL); + if (!attr || (attr->form_is_block () && DW_BLOCK (attr)->size == 0)) + /* Keep NULL DWARF_BLOCK. */; + else if (attr->form_is_block ()) + { + struct dwarf2_locexpr_baton *dlbaton; + + dlbaton = XOBNEW (&objfile->objfile_obstack, struct dwarf2_locexpr_baton); + dlbaton->data = DW_BLOCK (attr)->data; + dlbaton->size = DW_BLOCK (attr)->size; + dlbaton->per_objfile = per_objfile; + dlbaton->per_cu = cu->per_cu; + + SET_FIELD_DWARF_BLOCK (call_site->target, dlbaton); + } + else if (attr->form_is_ref ()) + { + struct dwarf2_cu *target_cu = cu; + struct die_info *target_die; + + target_die = follow_die_ref (die, attr, &target_cu); + gdb_assert (target_cu->per_objfile->objfile == objfile); + if (die_is_declaration (target_die, target_cu)) + { + const char *target_physname; + + /* Prefer the mangled name; otherwise compute the demangled one. */ + target_physname = dw2_linkage_name (target_die, target_cu); + if (target_physname == NULL) + target_physname = dwarf2_physname (NULL, target_die, target_cu); + if (target_physname == NULL) + complaint (_("DW_AT_call_target target DIE has invalid " + "physname, for referencing DIE %s [in module %s]"), + sect_offset_str (die->sect_off), objfile_name (objfile)); + else + SET_FIELD_PHYSNAME (call_site->target, target_physname); + } + else + { + CORE_ADDR lowpc; + + /* DW_AT_entry_pc should be preferred. */ + if (dwarf2_get_pc_bounds (target_die, &lowpc, NULL, target_cu, NULL) + <= PC_BOUNDS_INVALID) + complaint (_("DW_AT_call_target target DIE has invalid " + "low pc, for referencing DIE %s [in module %s]"), + sect_offset_str (die->sect_off), objfile_name (objfile)); + else + { + lowpc = gdbarch_adjust_dwarf2_addr (gdbarch, lowpc + baseaddr); + SET_FIELD_PHYSADDR (call_site->target, lowpc); + } + } + } + else + complaint (_("DW_TAG_call_site DW_AT_call_target is neither " + "block nor reference, for DIE %s [in module %s]"), + sect_offset_str (die->sect_off), objfile_name (objfile)); + + call_site->per_cu = cu->per_cu; + call_site->per_objfile = per_objfile; + + for (child_die = die->child; + child_die && child_die->tag; + child_die = child_die->sibling) + { + struct call_site_parameter *parameter; + struct attribute *loc, *origin; + + if (child_die->tag != DW_TAG_call_site_parameter + && child_die->tag != DW_TAG_GNU_call_site_parameter) + { + /* Already printed the complaint above. */ + continue; + } + + gdb_assert (call_site->parameter_count < nparams); + parameter = &call_site->parameter[call_site->parameter_count]; + + /* DW_AT_location specifies the register number or DW_AT_abstract_origin + specifies DW_TAG_formal_parameter. Value of the data assumed for the + register is contained in DW_AT_call_value. */ + + loc = dwarf2_attr (child_die, DW_AT_location, cu); + origin = dwarf2_attr (child_die, DW_AT_call_parameter, cu); + if (origin == NULL) + { + /* This was a pre-DWARF-5 GNU extension alias + for DW_AT_call_parameter. */ + origin = dwarf2_attr (child_die, DW_AT_abstract_origin, cu); + } + if (loc == NULL && origin != NULL && origin->form_is_ref ()) + { + parameter->kind = CALL_SITE_PARAMETER_PARAM_OFFSET; + + sect_offset sect_off = origin->get_ref_die_offset (); + if (!cu->header.offset_in_cu_p (sect_off)) + { + /* As DW_OP_GNU_parameter_ref uses CU-relative offset this + binding can be done only inside one CU. Such referenced DIE + therefore cannot be even moved to DW_TAG_partial_unit. */ + complaint (_("DW_AT_call_parameter offset is not in CU for " + "DW_TAG_call_site child DIE %s [in module %s]"), + sect_offset_str (child_die->sect_off), + objfile_name (objfile)); + continue; + } + parameter->u.param_cu_off + = (cu_offset) (sect_off - cu->header.sect_off); + } + else if (loc == NULL || origin != NULL || !loc->form_is_block ()) + { + complaint (_("No DW_FORM_block* DW_AT_location for " + "DW_TAG_call_site child DIE %s [in module %s]"), + sect_offset_str (child_die->sect_off), objfile_name (objfile)); + continue; + } + else + { + parameter->u.dwarf_reg = dwarf_block_to_dwarf_reg + (DW_BLOCK (loc)->data, &DW_BLOCK (loc)->data[DW_BLOCK (loc)->size]); + if (parameter->u.dwarf_reg != -1) + parameter->kind = CALL_SITE_PARAMETER_DWARF_REG; + else if (dwarf_block_to_sp_offset (gdbarch, DW_BLOCK (loc)->data, + &DW_BLOCK (loc)->data[DW_BLOCK (loc)->size], + ¶meter->u.fb_offset)) + parameter->kind = CALL_SITE_PARAMETER_FB_OFFSET; + else + { + complaint (_("Only single DW_OP_reg or DW_OP_fbreg is supported " + "for DW_FORM_block* DW_AT_location is supported for " + "DW_TAG_call_site child DIE %s " + "[in module %s]"), + sect_offset_str (child_die->sect_off), + objfile_name (objfile)); + continue; + } + } + + attr = dwarf2_attr (child_die, DW_AT_call_value, cu); + if (attr == NULL) + attr = dwarf2_attr (child_die, DW_AT_GNU_call_site_value, cu); + if (attr == NULL || !attr->form_is_block ()) + { + complaint (_("No DW_FORM_block* DW_AT_call_value for " + "DW_TAG_call_site child DIE %s [in module %s]"), + sect_offset_str (child_die->sect_off), + objfile_name (objfile)); + continue; + } + parameter->value = DW_BLOCK (attr)->data; + parameter->value_size = DW_BLOCK (attr)->size; + + /* Parameters are not pre-cleared by memset above. */ + parameter->data_value = NULL; + parameter->data_value_size = 0; + call_site->parameter_count++; + + attr = dwarf2_attr (child_die, DW_AT_call_data_value, cu); + if (attr == NULL) + attr = dwarf2_attr (child_die, DW_AT_GNU_call_site_data_value, cu); + if (attr != nullptr) + { + if (!attr->form_is_block ()) + complaint (_("No DW_FORM_block* DW_AT_call_data_value for " + "DW_TAG_call_site child DIE %s [in module %s]"), + sect_offset_str (child_die->sect_off), + objfile_name (objfile)); + else + { + parameter->data_value = DW_BLOCK (attr)->data; + parameter->data_value_size = DW_BLOCK (attr)->size; + } + } + } +} + +/* Helper function for read_variable. If DIE represents a virtual + table, then return the type of the concrete object that is + associated with the virtual table. Otherwise, return NULL. */ + +static struct type * +rust_containing_type (struct die_info *die, struct dwarf2_cu *cu) +{ + struct attribute *attr = dwarf2_attr (die, DW_AT_type, cu); + if (attr == NULL) + return NULL; + + /* Find the type DIE. */ + struct die_info *type_die = NULL; + struct dwarf2_cu *type_cu = cu; + + if (attr->form_is_ref ()) + type_die = follow_die_ref (die, attr, &type_cu); + if (type_die == NULL) + return NULL; + + if (dwarf2_attr (type_die, DW_AT_containing_type, type_cu) == NULL) + return NULL; + return die_containing_type (type_die, type_cu); +} + +/* Read a variable (DW_TAG_variable) DIE and create a new symbol. */ + +static void +read_variable (struct die_info *die, struct dwarf2_cu *cu) +{ + struct rust_vtable_symbol *storage = NULL; + + if (cu->language == language_rust) + { + struct type *containing_type = rust_containing_type (die, cu); + + if (containing_type != NULL) + { + struct objfile *objfile = cu->per_objfile->objfile; + + storage = new (&objfile->objfile_obstack) rust_vtable_symbol; + storage->concrete_type = containing_type; + storage->subclass = SYMBOL_RUST_VTABLE; + } + } + + struct symbol *res = new_symbol (die, NULL, cu, storage); + struct attribute *abstract_origin + = dwarf2_attr (die, DW_AT_abstract_origin, cu); + struct attribute *loc = dwarf2_attr (die, DW_AT_location, cu); + if (res == NULL && loc && abstract_origin) + { + /* We have a variable without a name, but with a location and an abstract + origin. This may be a concrete instance of an abstract variable + referenced from an DW_OP_GNU_variable_value, so save it to find it back + later. */ + struct dwarf2_cu *origin_cu = cu; + struct die_info *origin_die + = follow_die_ref (die, abstract_origin, &origin_cu); + dwarf2_per_objfile *per_objfile = cu->per_objfile; + per_objfile->per_bfd->abstract_to_concrete + [origin_die->sect_off].push_back (die->sect_off); + } +} + +/* Call CALLBACK from DW_AT_ranges attribute value OFFSET + reading .debug_rnglists. + Callback's type should be: + void (CORE_ADDR range_beginning, CORE_ADDR range_end) + Return true if the attributes are present and valid, otherwise, + return false. */ + +template <typename Callback> +static bool +dwarf2_rnglists_process (unsigned offset, struct dwarf2_cu *cu, + dwarf_tag tag, Callback &&callback) +{ + dwarf2_per_objfile *per_objfile = cu->per_objfile; + struct objfile *objfile = per_objfile->objfile; + bfd *obfd = objfile->obfd; + /* Base address selection entry. */ + gdb::optional<CORE_ADDR> base; + const gdb_byte *buffer; + CORE_ADDR baseaddr; + bool overflow = false; + ULONGEST addr_index; + struct dwarf2_section_info *rnglists_section; + + base = cu->base_address; + rnglists_section = cu_debug_rnglists_section (cu, tag); + rnglists_section->read (objfile); + + if (offset >= rnglists_section->size) + { + complaint (_("Offset %d out of bounds for DW_AT_ranges attribute"), + offset); + return false; + } + buffer = rnglists_section->buffer + offset; + + baseaddr = objfile->text_section_offset (); + + while (1) + { + /* Initialize it due to a false compiler warning. */ + CORE_ADDR range_beginning = 0, range_end = 0; + const gdb_byte *buf_end = (rnglists_section->buffer + + rnglists_section->size); + unsigned int bytes_read; + + if (buffer == buf_end) + { + overflow = true; + break; + } + const auto rlet = static_cast<enum dwarf_range_list_entry>(*buffer++); + switch (rlet) + { + case DW_RLE_end_of_list: + break; + case DW_RLE_base_address: + if (buffer + cu->header.addr_size > buf_end) + { + overflow = true; + break; + } + base = cu->header.read_address (obfd, buffer, &bytes_read); + buffer += bytes_read; + break; + case DW_RLE_base_addressx: + addr_index = read_unsigned_leb128 (obfd, buffer, &bytes_read); + buffer += bytes_read; + base = read_addr_index (cu, addr_index); + break; + case DW_RLE_start_length: + if (buffer + cu->header.addr_size > buf_end) + { + overflow = true; + break; + } + range_beginning = cu->header.read_address (obfd, buffer, + &bytes_read); + buffer += bytes_read; + range_end = (range_beginning + + read_unsigned_leb128 (obfd, buffer, &bytes_read)); + buffer += bytes_read; + if (buffer > buf_end) + { + overflow = true; + break; + } + break; + case DW_RLE_startx_length: + addr_index = read_unsigned_leb128 (obfd, buffer, &bytes_read); + buffer += bytes_read; + range_beginning = read_addr_index (cu, addr_index); + if (buffer > buf_end) + { + overflow = true; + break; + } + range_end = (range_beginning + + read_unsigned_leb128 (obfd, buffer, &bytes_read)); + buffer += bytes_read; + break; + case DW_RLE_offset_pair: + range_beginning = read_unsigned_leb128 (obfd, buffer, &bytes_read); + buffer += bytes_read; + if (buffer > buf_end) + { + overflow = true; + break; + } + range_end = read_unsigned_leb128 (obfd, buffer, &bytes_read); + buffer += bytes_read; + if (buffer > buf_end) + { + overflow = true; + break; + } + break; + case DW_RLE_start_end: + if (buffer + 2 * cu->header.addr_size > buf_end) + { + overflow = true; + break; + } + range_beginning = cu->header.read_address (obfd, buffer, + &bytes_read); + buffer += bytes_read; + range_end = cu->header.read_address (obfd, buffer, &bytes_read); + buffer += bytes_read; + break; + case DW_RLE_startx_endx: + addr_index = read_unsigned_leb128 (obfd, buffer, &bytes_read); + buffer += bytes_read; + range_beginning = read_addr_index (cu, addr_index); + if (buffer > buf_end) + { + overflow = true; + break; + } + addr_index = read_unsigned_leb128 (obfd, buffer, &bytes_read); + buffer += bytes_read; + range_end = read_addr_index (cu, addr_index); + break; + default: + complaint (_("Invalid .debug_rnglists data (no base address)")); + return false; + } + if (rlet == DW_RLE_end_of_list || overflow) + break; + if (rlet == DW_RLE_base_address) + continue; + + if (range_beginning > range_end) + { + /* Inverted range entries are invalid. */ + complaint (_("Invalid .debug_rnglists data (inverted range)")); + return false; + } + + /* Empty range entries have no effect. */ + if (range_beginning == range_end) + continue; + + /* Only DW_RLE_offset_pair needs the base address added. */ + if (rlet == DW_RLE_offset_pair) + { + if (!base.has_value ()) + { + /* We have no valid base address for the DW_RLE_offset_pair. */ + complaint (_("Invalid .debug_rnglists data (no base address for " + "DW_RLE_offset_pair)")); + return false; + } + + range_beginning += *base; + range_end += *base; + } + + /* 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; + } + + callback (range_beginning, range_end); + } + + if (overflow) + { + complaint (_("Offset %d is not terminated " + "for DW_AT_ranges attribute"), + offset); + return false; + } + + return true; +} + +/* Call CALLBACK from DW_AT_ranges attribute value OFFSET reading .debug_ranges. + Callback's type should be: + void (CORE_ADDR range_beginning, CORE_ADDR range_end) + Return 1 if the attributes are present and valid, otherwise, return 0. */ + +template <typename Callback> +static int +dwarf2_ranges_process (unsigned offset, struct dwarf2_cu *cu, dwarf_tag tag, + Callback &&callback) +{ + dwarf2_per_objfile *per_objfile = cu->per_objfile; + struct objfile *objfile = per_objfile->objfile; + struct comp_unit_head *cu_header = &cu->header; + bfd *obfd = objfile->obfd; + unsigned int addr_size = cu_header->addr_size; + CORE_ADDR mask = ~(~(CORE_ADDR)1 << (addr_size * 8 - 1)); + /* Base address selection entry. */ + gdb::optional<CORE_ADDR> base; + unsigned int dummy; + const gdb_byte *buffer; + CORE_ADDR baseaddr; + + if (cu_header->version >= 5) + return dwarf2_rnglists_process (offset, cu, tag, callback); + + base = cu->base_address; + + per_objfile->per_bfd->ranges.read (objfile); + if (offset >= per_objfile->per_bfd->ranges.size) + { + complaint (_("Offset %d out of bounds for DW_AT_ranges attribute"), + offset); + return 0; + } + buffer = per_objfile->per_bfd->ranges.buffer + offset; + + baseaddr = objfile->text_section_offset (); + + while (1) + { + CORE_ADDR range_beginning, range_end; + + range_beginning = cu->header.read_address (obfd, buffer, &dummy); + buffer += addr_size; + range_end = cu->header.read_address (obfd, buffer, &dummy); + buffer += addr_size; + offset += 2 * addr_size; + + /* An end of list marker is a pair of zero addresses. */ + if (range_beginning == 0 && range_end == 0) + /* Found the end of list entry. */ + break; + + /* Each base address selection entry is a pair of 2 values. + The first is the largest possible address, the second is + the base address. Check for a base address here. */ + if ((range_beginning & mask) == mask) + { + /* If we found the largest possible address, then we already + have the base address in range_end. */ + base = range_end; + continue; + } + + if (!base.has_value ()) + { + /* We have no valid base address for the ranges + data. */ + complaint (_("Invalid .debug_ranges data (no base address)")); + return 0; + } + + if (range_beginning > range_end) + { + /* Inverted range entries are invalid. */ + complaint (_("Invalid .debug_ranges data (inverted range)")); + return 0; + } + + /* Empty range entries have no effect. */ + if (range_beginning == range_end) + continue; + + range_beginning += *base; + range_end += *base; + + /* 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_ranges entry has start address of zero" + " [in module %s]"), objfile_name (objfile)); + continue; + } + + callback (range_beginning, range_end); + } + + return 1; +} + +/* Get low and high pc attributes from DW_AT_ranges attribute value OFFSET. + Return 1 if the attributes are present and valid, otherwise, return 0. + If RANGES_PST is not NULL we should setup `objfile->psymtabs_addrmap'. */ + +static int +dwarf2_ranges_read (unsigned offset, CORE_ADDR *low_return, + CORE_ADDR *high_return, struct dwarf2_cu *cu, + dwarf2_psymtab *ranges_pst, dwarf_tag tag) +{ + struct objfile *objfile = cu->per_objfile->objfile; + struct gdbarch *gdbarch = objfile->arch (); + const CORE_ADDR baseaddr = objfile->text_section_offset (); + int low_set = 0; + CORE_ADDR low = 0; + CORE_ADDR high = 0; + int retval; + + retval = dwarf2_ranges_process (offset, cu, tag, + [&] (CORE_ADDR range_beginning, CORE_ADDR range_end) + { + if (ranges_pst != NULL) + { + CORE_ADDR lowpc; + CORE_ADDR highpc; + + lowpc = (gdbarch_adjust_dwarf2_addr (gdbarch, + range_beginning + baseaddr) + - baseaddr); + highpc = (gdbarch_adjust_dwarf2_addr (gdbarch, + range_end + baseaddr) + - baseaddr); + addrmap_set_empty (objfile->partial_symtabs->psymtabs_addrmap, + lowpc, highpc - 1, ranges_pst); + } + + /* FIXME: This is recording everything as a low-high + segment of consecutive addresses. We should have a + data structure for discontiguous block ranges + instead. */ + if (! low_set) + { + low = range_beginning; + high = range_end; + low_set = 1; + } + else + { + if (range_beginning < low) + low = range_beginning; + if (range_end > high) + high = range_end; + } + }); + if (!retval) + return 0; + + if (! low_set) + /* If the first entry is an end-of-list marker, the range + describes an empty scope, i.e. no instructions. */ + return 0; + + if (low_return) + *low_return = low; + if (high_return) + *high_return = high; + return 1; +} + +/* Get low and high pc attributes from a die. See enum pc_bounds_kind + definition for the return value. *LOWPC and *HIGHPC are set iff + neither PC_BOUNDS_NOT_PRESENT nor PC_BOUNDS_INVALID are returned. */ + +static enum pc_bounds_kind +dwarf2_get_pc_bounds (struct die_info *die, CORE_ADDR *lowpc, + CORE_ADDR *highpc, struct dwarf2_cu *cu, + dwarf2_psymtab *pst) +{ + dwarf2_per_objfile *per_objfile = cu->per_objfile; + struct attribute *attr; + struct attribute *attr_high; + CORE_ADDR low = 0; + CORE_ADDR high = 0; + enum pc_bounds_kind ret; + + attr_high = dwarf2_attr (die, DW_AT_high_pc, cu); + if (attr_high) + { + attr = dwarf2_attr (die, DW_AT_low_pc, cu); + if (attr != nullptr) + { + low = attr->value_as_address (); + high = attr_high->value_as_address (); + if (cu->header.version >= 4 && attr_high->form_is_constant ()) + high += low; + } + else + /* Found high w/o low attribute. */ + return PC_BOUNDS_INVALID; + + /* Found consecutive range of addresses. */ + ret = PC_BOUNDS_HIGH_LOW; + } + else + { + attr = dwarf2_attr (die, DW_AT_ranges, cu); + if (attr != NULL) + { + /* DW_AT_rnglists_base does not apply to DIEs from the DWO skeleton. + We take advantage of the fact that DW_AT_ranges does not appear + in DW_TAG_compile_unit of DWO files. + + Attributes of the form DW_FORM_rnglistx have already had their + value changed by read_rnglist_index and already include + DW_AT_rnglists_base, so don't need to add the ranges base, + either. */ + int need_ranges_base = (die->tag != DW_TAG_compile_unit + && attr->form != DW_FORM_rnglistx); + unsigned int ranges_offset = (DW_UNSND (attr) + + (need_ranges_base + ? cu->ranges_base + : 0)); + + /* Value of the DW_AT_ranges attribute is the offset in the + .debug_ranges section. */ + if (!dwarf2_ranges_read (ranges_offset, &low, &high, cu, pst, + die->tag)) + return PC_BOUNDS_INVALID; + /* Found discontinuous range of addresses. */ + ret = PC_BOUNDS_RANGES; + } + else + return PC_BOUNDS_NOT_PRESENT; + } + + /* partial_die_info::read has also the strict LOW < HIGH requirement. */ + if (high <= low) + return PC_BOUNDS_INVALID; + + /* When using the GNU linker, .gnu.linkonce. sections are used to + eliminate duplicate copies of functions and vtables and such. + The linker will arbitrarily choose one and discard the others. + The AT_*_pc values for such functions refer to local labels in + these sections. If the section from that file was discarded, the + labels are not in the output, so the relocs get a value of 0. + If this is a discarded function, mark the pc bounds as invalid, + so that GDB will ignore it. */ + if (low == 0 && !per_objfile->per_bfd->has_section_at_zero) + return PC_BOUNDS_INVALID; + + *lowpc = low; + if (highpc) + *highpc = high; + return ret; +} + +/* Assuming that DIE represents a subprogram DIE or a lexical block, get + its low and high PC addresses. Do nothing if these addresses could not + be determined. Otherwise, set LOWPC to the low address if it is smaller, + and HIGHPC to the high address if greater than HIGHPC. */ + +static void +dwarf2_get_subprogram_pc_bounds (struct die_info *die, + CORE_ADDR *lowpc, CORE_ADDR *highpc, + struct dwarf2_cu *cu) +{ + CORE_ADDR low, high; + struct die_info *child = die->child; + + if (dwarf2_get_pc_bounds (die, &low, &high, cu, NULL) >= PC_BOUNDS_RANGES) + { + *lowpc = std::min (*lowpc, low); + *highpc = std::max (*highpc, high); + } + + /* If the language does not allow nested subprograms (either inside + subprograms or lexical blocks), we're done. */ + if (cu->language != language_ada) + return; + + /* Check all the children of the given DIE. If it contains nested + subprograms, then check their pc bounds. Likewise, we need to + check lexical blocks as well, as they may also contain subprogram + definitions. */ + while (child && child->tag) + { + if (child->tag == DW_TAG_subprogram + || child->tag == DW_TAG_lexical_block) + dwarf2_get_subprogram_pc_bounds (child, lowpc, highpc, cu); + child = child->sibling; + } +} + +/* Get the low and high pc's represented by the scope DIE, and store + them in *LOWPC and *HIGHPC. If the correct values can't be + determined, set *LOWPC to -1 and *HIGHPC to 0. */ + +static void +get_scope_pc_bounds (struct die_info *die, + CORE_ADDR *lowpc, CORE_ADDR *highpc, + struct dwarf2_cu *cu) +{ + CORE_ADDR best_low = (CORE_ADDR) -1; + CORE_ADDR best_high = (CORE_ADDR) 0; + CORE_ADDR current_low, current_high; + + if (dwarf2_get_pc_bounds (die, ¤t_low, ¤t_high, cu, NULL) + >= PC_BOUNDS_RANGES) + { + best_low = current_low; + best_high = current_high; + } + else + { + struct die_info *child = die->child; + + while (child && child->tag) + { + switch (child->tag) { + case DW_TAG_subprogram: + dwarf2_get_subprogram_pc_bounds (child, &best_low, &best_high, cu); + break; + case DW_TAG_namespace: + case DW_TAG_module: + /* FIXME: carlton/2004-01-16: Should we do this for + DW_TAG_class_type/DW_TAG_structure_type, too? I think + that current GCC's always emit the DIEs corresponding + to definitions of methods of classes as children of a + DW_TAG_compile_unit or DW_TAG_namespace (as opposed to + the DIEs giving the declarations, which could be + anywhere). But I don't see any reason why the + standards says that they have to be there. */ + get_scope_pc_bounds (child, ¤t_low, ¤t_high, cu); + + if (current_low != ((CORE_ADDR) -1)) + { + best_low = std::min (best_low, current_low); + best_high = std::max (best_high, current_high); + } + break; + default: + /* Ignore. */ + break; + } + + child = child->sibling; + } + } + + *lowpc = best_low; + *highpc = best_high; +} + +/* Record the address ranges for BLOCK, offset by BASEADDR, as given + in DIE. */ + +static void +dwarf2_record_block_ranges (struct die_info *die, struct block *block, + CORE_ADDR baseaddr, struct dwarf2_cu *cu) +{ + struct objfile *objfile = cu->per_objfile->objfile; + struct gdbarch *gdbarch = objfile->arch (); + struct attribute *attr; + struct attribute *attr_high; + + attr_high = dwarf2_attr (die, DW_AT_high_pc, cu); + if (attr_high) + { + attr = dwarf2_attr (die, DW_AT_low_pc, cu); + if (attr != nullptr) + { + CORE_ADDR low = attr->value_as_address (); + CORE_ADDR high = attr_high->value_as_address (); + + if (cu->header.version >= 4 && attr_high->form_is_constant ()) + high += low; + + low = gdbarch_adjust_dwarf2_addr (gdbarch, low + baseaddr); + high = gdbarch_adjust_dwarf2_addr (gdbarch, high + baseaddr); + cu->get_builder ()->record_block_range (block, low, high - 1); + } + } + + attr = dwarf2_attr (die, DW_AT_ranges, cu); + if (attr != nullptr) + { + /* DW_AT_rnglists_base does not apply to DIEs from the DWO skeleton. + We take advantage of the fact that DW_AT_ranges does not appear + in DW_TAG_compile_unit of DWO files. + + Attributes of the form DW_FORM_rnglistx have already had their + value changed by read_rnglist_index and already include + DW_AT_rnglists_base, so don't need to add the ranges base, + either. */ + int need_ranges_base = (die->tag != DW_TAG_compile_unit + && attr->form != DW_FORM_rnglistx); + + /* The value of the DW_AT_ranges attribute is the offset of the + address range list in the .debug_ranges section. */ + unsigned long offset = (DW_UNSND (attr) + + (need_ranges_base ? cu->ranges_base : 0)); + + std::vector<blockrange> blockvec; + dwarf2_ranges_process (offset, cu, die->tag, + [&] (CORE_ADDR start, CORE_ADDR end) + { + start += baseaddr; + end += baseaddr; + start = gdbarch_adjust_dwarf2_addr (gdbarch, start); + end = gdbarch_adjust_dwarf2_addr (gdbarch, end); + cu->get_builder ()->record_block_range (block, start, end - 1); + blockvec.emplace_back (start, end); + }); + + BLOCK_RANGES(block) = make_blockranges (objfile, blockvec); + } +} + +/* Check whether the producer field indicates either of GCC < 4.6, or the + Intel C/C++ compiler, and cache the result in CU. */ + +static void +check_producer (struct dwarf2_cu *cu) +{ + int major, minor; + + if (cu->producer == NULL) + { + /* For unknown compilers expect their behavior is DWARF version + compliant. + + GCC started to support .debug_types sections by -gdwarf-4 since + gcc-4.5.x. As the .debug_types sections are missing DW_AT_producer + for their space efficiency GDB cannot workaround gcc-4.5.x -gdwarf-4 + combination. gcc-4.5.x -gdwarf-4 binaries have DW_AT_accessibility + interpreted incorrectly by GDB now - GCC PR debug/48229. */ + } + else if (producer_is_gcc (cu->producer, &major, &minor)) + { + cu->producer_is_gxx_lt_4_6 = major < 4 || (major == 4 && minor < 6); + cu->producer_is_gcc_lt_4_3 = major < 4 || (major == 4 && minor < 3); + } + else if (producer_is_icc (cu->producer, &major, &minor)) + { + cu->producer_is_icc = true; + cu->producer_is_icc_lt_14 = major < 14; + } + else if (startswith (cu->producer, "CodeWarrior S12/L-ISA")) + cu->producer_is_codewarrior = true; + else + { + /* For other non-GCC compilers, expect their behavior is DWARF version + compliant. */ + } + + cu->checked_producer = true; +} + +/* Check for GCC PR debug/45124 fix which is not present in any G++ version up + to 4.5.any while it is present already in G++ 4.6.0 - the PR has been fixed + during 4.6.0 experimental. */ + +static bool +producer_is_gxx_lt_4_6 (struct dwarf2_cu *cu) +{ + if (!cu->checked_producer) + check_producer (cu); + + return cu->producer_is_gxx_lt_4_6; +} + + +/* Codewarrior (at least as of version 5.0.40) generates dwarf line information + with incorrect is_stmt attributes. */ + +static bool +producer_is_codewarrior (struct dwarf2_cu *cu) +{ + if (!cu->checked_producer) + check_producer (cu); + + return cu->producer_is_codewarrior; +} + +/* Return the default accessibility type if it is not overridden by + DW_AT_accessibility. */ + +static enum dwarf_access_attribute +dwarf2_default_access_attribute (struct die_info *die, struct dwarf2_cu *cu) +{ + if (cu->header.version < 3 || producer_is_gxx_lt_4_6 (cu)) + { + /* The default DWARF 2 accessibility for members is public, the default + accessibility for inheritance is private. */ + + if (die->tag != DW_TAG_inheritance) + return DW_ACCESS_public; + else + return DW_ACCESS_private; + } + else + { + /* DWARF 3+ defines the default accessibility a different way. The same + rules apply now for DW_TAG_inheritance as for the members and it only + depends on the container kind. */ + + if (die->parent->tag == DW_TAG_class_type) + return DW_ACCESS_private; + else + return DW_ACCESS_public; + } +} + +/* Look for DW_AT_data_member_location. Set *OFFSET to the byte + offset. If the attribute was not found return 0, otherwise return + 1. If it was found but could not properly be handled, set *OFFSET + to 0. */ + +static int +handle_data_member_location (struct die_info *die, struct dwarf2_cu *cu, + LONGEST *offset) +{ + struct attribute *attr; + + attr = dwarf2_attr (die, DW_AT_data_member_location, cu); + if (attr != NULL) + { + *offset = 0; + + /* Note that we do not check for a section offset first here. + This is because DW_AT_data_member_location is new in DWARF 4, + so if we see it, we can assume that a constant form is really + a constant and not a section offset. */ + if (attr->form_is_constant ()) + *offset = attr->constant_value (0); + else if (attr->form_is_section_offset ()) + dwarf2_complex_location_expr_complaint (); + else if (attr->form_is_block ()) + *offset = decode_locdesc (DW_BLOCK (attr), cu); + else + dwarf2_complex_location_expr_complaint (); + + return 1; + } + + return 0; +} + +/* Look for DW_AT_data_member_location and store the results in FIELD. */ + +static void +handle_data_member_location (struct die_info *die, struct dwarf2_cu *cu, + struct field *field) +{ + struct attribute *attr; + + attr = dwarf2_attr (die, DW_AT_data_member_location, cu); + if (attr != NULL) + { + if (attr->form_is_constant ()) + { + LONGEST offset = attr->constant_value (0); + SET_FIELD_BITPOS (*field, offset * bits_per_byte); + } + else if (attr->form_is_section_offset ()) + dwarf2_complex_location_expr_complaint (); + else if (attr->form_is_block ()) + { + bool handled; + CORE_ADDR offset = decode_locdesc (DW_BLOCK (attr), cu, &handled); + if (handled) + SET_FIELD_BITPOS (*field, offset * bits_per_byte); + else + { + dwarf2_per_objfile *per_objfile = cu->per_objfile; + struct objfile *objfile = per_objfile->objfile; + struct dwarf2_locexpr_baton *dlbaton + = XOBNEW (&objfile->objfile_obstack, + struct dwarf2_locexpr_baton); + dlbaton->data = DW_BLOCK (attr)->data; + dlbaton->size = DW_BLOCK (attr)->size; + /* When using this baton, we want to compute the address + of the field, not the value. This is why + is_reference is set to false here. */ + dlbaton->is_reference = false; + dlbaton->per_objfile = per_objfile; + dlbaton->per_cu = cu->per_cu; + + SET_FIELD_DWARF_BLOCK (*field, dlbaton); + } + } + else + dwarf2_complex_location_expr_complaint (); + } +} + +/* Add an aggregate field to the field list. */ + +static void +dwarf2_add_field (struct field_info *fip, struct die_info *die, + struct dwarf2_cu *cu) +{ + struct objfile *objfile = cu->per_objfile->objfile; + struct gdbarch *gdbarch = objfile->arch (); + struct nextfield *new_field; + struct attribute *attr; + struct field *fp; + const char *fieldname = ""; + + if (die->tag == DW_TAG_inheritance) + { + fip->baseclasses.emplace_back (); + new_field = &fip->baseclasses.back (); + } + else + { + fip->fields.emplace_back (); + new_field = &fip->fields.back (); + } + + new_field->offset = die->sect_off; + + attr = dwarf2_attr (die, DW_AT_accessibility, cu); + if (attr != nullptr) + new_field->accessibility = DW_UNSND (attr); + else + new_field->accessibility = dwarf2_default_access_attribute (die, cu); + if (new_field->accessibility != DW_ACCESS_public) + fip->non_public_fields = true; + + attr = dwarf2_attr (die, DW_AT_virtuality, cu); + if (attr != nullptr) + new_field->virtuality = DW_UNSND (attr); + else + new_field->virtuality = DW_VIRTUALITY_none; + + fp = &new_field->field; + + if (die->tag == DW_TAG_member && ! die_is_declaration (die, cu)) + { + /* Data member other than a C++ static data member. */ + + /* Get type of field. */ + fp->set_type (die_type (die, cu)); + + SET_FIELD_BITPOS (*fp, 0); + + /* Get bit size of field (zero if none). */ + attr = dwarf2_attr (die, DW_AT_bit_size, cu); + if (attr != nullptr) + { + FIELD_BITSIZE (*fp) = DW_UNSND (attr); + } + else + { + FIELD_BITSIZE (*fp) = 0; + } + + /* Get bit offset of field. */ + handle_data_member_location (die, cu, fp); + attr = dwarf2_attr (die, DW_AT_bit_offset, cu); + if (attr != nullptr) + { + if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG) + { + /* For big endian bits, the DW_AT_bit_offset gives the + additional bit offset from the MSB of the containing + anonymous object to the MSB of the field. We don't + have to do anything special since we don't need to + know the size of the anonymous object. */ + SET_FIELD_BITPOS (*fp, FIELD_BITPOS (*fp) + DW_UNSND (attr)); + } + else + { + /* For little endian bits, compute the bit offset to the + MSB of the anonymous object, subtract off the number of + bits from the MSB of the field to the MSB of the + object, and then subtract off the number of bits of + the field itself. The result is the bit offset of + the LSB of the field. */ + int anonymous_size; + int bit_offset = DW_UNSND (attr); + + attr = dwarf2_attr (die, DW_AT_byte_size, cu); + if (attr != nullptr) + { + /* The size of the anonymous object containing + the bit field is explicit, so use the + indicated size (in bytes). */ + anonymous_size = DW_UNSND (attr); + } + else + { + /* The size of the anonymous object containing + the bit field must be inferred from the type + attribute of the data member containing the + bit field. */ + anonymous_size = TYPE_LENGTH (fp->type ()); + } + SET_FIELD_BITPOS (*fp, + (FIELD_BITPOS (*fp) + + anonymous_size * bits_per_byte + - bit_offset - FIELD_BITSIZE (*fp))); + } + } + attr = dwarf2_attr (die, DW_AT_data_bit_offset, cu); + if (attr != NULL) + SET_FIELD_BITPOS (*fp, (FIELD_BITPOS (*fp) + + attr->constant_value (0))); + + /* Get name of field. */ + fieldname = dwarf2_name (die, cu); + if (fieldname == NULL) + fieldname = ""; + + /* The name is already allocated along with this objfile, so we don't + need to duplicate it for the type. */ + fp->name = fieldname; + + /* Change accessibility for artificial fields (e.g. virtual table + pointer or virtual base class pointer) to private. */ + if (dwarf2_attr (die, DW_AT_artificial, cu)) + { + FIELD_ARTIFICIAL (*fp) = 1; + new_field->accessibility = DW_ACCESS_private; + fip->non_public_fields = true; + } + } + else if (die->tag == DW_TAG_member || die->tag == DW_TAG_variable) + { + /* C++ static member. */ + + /* NOTE: carlton/2002-11-05: It should be a DW_TAG_member that + is a declaration, but all versions of G++ as of this writing + (so through at least 3.2.1) incorrectly generate + DW_TAG_variable tags. */ + + const char *physname; + + /* Get name of field. */ + fieldname = dwarf2_name (die, cu); + if (fieldname == NULL) + return; + + attr = dwarf2_attr (die, DW_AT_const_value, cu); + if (attr + /* Only create a symbol if this is an external value. + new_symbol checks this and puts the value in the global symbol + table, which we want. If it is not external, new_symbol + will try to put the value in cu->list_in_scope which is wrong. */ + && dwarf2_flag_true_p (die, DW_AT_external, cu)) + { + /* A static const member, not much different than an enum as far as + we're concerned, except that we can support more types. */ + new_symbol (die, NULL, cu); + } + + /* Get physical name. */ + physname = dwarf2_physname (fieldname, die, cu); + + /* The name is already allocated along with this objfile, so we don't + need to duplicate it for the type. */ + SET_FIELD_PHYSNAME (*fp, physname ? physname : ""); + fp->set_type (die_type (die, cu)); + FIELD_NAME (*fp) = fieldname; + } + else if (die->tag == DW_TAG_inheritance) + { + /* C++ base class field. */ + handle_data_member_location (die, cu, fp); + FIELD_BITSIZE (*fp) = 0; + fp->set_type (die_type (die, cu)); + FIELD_NAME (*fp) = fp->type ()->name (); + } + else + gdb_assert_not_reached ("missing case in dwarf2_add_field"); +} + +/* Can the type given by DIE define another type? */ + +static bool +type_can_define_types (const struct die_info *die) +{ + switch (die->tag) + { + case DW_TAG_typedef: + case DW_TAG_class_type: + case DW_TAG_structure_type: + case DW_TAG_union_type: + case DW_TAG_enumeration_type: + return true; + + default: + return false; + } +} + +/* Add a type definition defined in the scope of the FIP's class. */ + +static void +dwarf2_add_type_defn (struct field_info *fip, struct die_info *die, + struct dwarf2_cu *cu) +{ + struct decl_field fp; + memset (&fp, 0, sizeof (fp)); + + gdb_assert (type_can_define_types (die)); + + /* Get name of field. NULL is okay here, meaning an anonymous type. */ + fp.name = dwarf2_name (die, cu); + fp.type = read_type_die (die, cu); + + /* Save accessibility. */ + enum dwarf_access_attribute accessibility; + struct attribute *attr = dwarf2_attr (die, DW_AT_accessibility, cu); + if (attr != NULL) + accessibility = (enum dwarf_access_attribute) DW_UNSND (attr); + else + accessibility = dwarf2_default_access_attribute (die, cu); + switch (accessibility) + { + case DW_ACCESS_public: + /* The assumed value if neither private nor protected. */ + break; + case DW_ACCESS_private: + fp.is_private = 1; + break; + case DW_ACCESS_protected: + fp.is_protected = 1; + break; + default: + complaint (_("Unhandled DW_AT_accessibility value (%x)"), accessibility); + } + + if (die->tag == DW_TAG_typedef) + fip->typedef_field_list.push_back (fp); + else + fip->nested_types_list.push_back (fp); +} + +/* A convenience typedef that's used when finding the discriminant + field for a variant part. */ +typedef std::unordered_map<sect_offset, int, gdb::hash_enum<sect_offset>> + offset_map_type; + +/* Compute the discriminant range for a given variant. OBSTACK is + where the results will be stored. VARIANT is the variant to + process. IS_UNSIGNED indicates whether the discriminant is signed + or unsigned. */ + +static const gdb::array_view<discriminant_range> +convert_variant_range (struct obstack *obstack, const variant_field &variant, + bool is_unsigned) +{ + std::vector<discriminant_range> ranges; + + if (variant.default_branch) + return {}; + + if (variant.discr_list_data == nullptr) + { + discriminant_range r + = {variant.discriminant_value, variant.discriminant_value}; + ranges.push_back (r); + } + else + { + gdb::array_view<const gdb_byte> data (variant.discr_list_data->data, + variant.discr_list_data->size); + while (!data.empty ()) + { + if (data[0] != DW_DSC_range && data[0] != DW_DSC_label) + { + complaint (_("invalid discriminant marker: %d"), data[0]); + break; + } + bool is_range = data[0] == DW_DSC_range; + data = data.slice (1); + + ULONGEST low, high; + unsigned int bytes_read; + + if (data.empty ()) + { + complaint (_("DW_AT_discr_list missing low value")); + break; + } + if (is_unsigned) + low = read_unsigned_leb128 (nullptr, data.data (), &bytes_read); + else + low = (ULONGEST) read_signed_leb128 (nullptr, data.data (), + &bytes_read); + data = data.slice (bytes_read); + + if (is_range) + { + if (data.empty ()) + { + complaint (_("DW_AT_discr_list missing high value")); + break; + } + if (is_unsigned) + high = read_unsigned_leb128 (nullptr, data.data (), + &bytes_read); + else + high = (LONGEST) read_signed_leb128 (nullptr, data.data (), + &bytes_read); + data = data.slice (bytes_read); + } + else + high = low; + + ranges.push_back ({ low, high }); + } + } + + discriminant_range *result = XOBNEWVEC (obstack, discriminant_range, + ranges.size ()); + std::copy (ranges.begin (), ranges.end (), result); + return gdb::array_view<discriminant_range> (result, ranges.size ()); +} + +static const gdb::array_view<variant_part> create_variant_parts + (struct obstack *obstack, + const offset_map_type &offset_map, + struct field_info *fi, + const std::vector<variant_part_builder> &variant_parts); + +/* Fill in a "struct variant" for a given variant field. RESULT is + the variant to fill in. OBSTACK is where any needed allocations + will be done. OFFSET_MAP holds the mapping from section offsets to + fields for the type. FI describes the fields of the type we're + processing. FIELD is the variant field we're converting. */ + +static void +create_one_variant (variant &result, struct obstack *obstack, + const offset_map_type &offset_map, + struct field_info *fi, const variant_field &field) +{ + result.discriminants = convert_variant_range (obstack, field, false); + result.first_field = field.first_field + fi->baseclasses.size (); + result.last_field = field.last_field + fi->baseclasses.size (); + result.parts = create_variant_parts (obstack, offset_map, fi, + field.variant_parts); +} + +/* Fill in a "struct variant_part" for a given variant part. RESULT + is the variant part to fill in. OBSTACK is where any needed + allocations will be done. OFFSET_MAP holds the mapping from + section offsets to fields for the type. FI describes the fields of + the type we're processing. BUILDER is the variant part to be + converted. */ + +static void +create_one_variant_part (variant_part &result, + struct obstack *obstack, + const offset_map_type &offset_map, + struct field_info *fi, + const variant_part_builder &builder) +{ + auto iter = offset_map.find (builder.discriminant_offset); + if (iter == offset_map.end ()) + { + result.discriminant_index = -1; + /* Doesn't matter. */ + result.is_unsigned = false; + } + else + { + result.discriminant_index = iter->second; + result.is_unsigned + = TYPE_UNSIGNED (fi->fields[result.discriminant_index].field.type ()); + } + + size_t n = builder.variants.size (); + variant *output = new (obstack) variant[n]; + for (size_t i = 0; i < n; ++i) + create_one_variant (output[i], obstack, offset_map, fi, + builder.variants[i]); + + result.variants = gdb::array_view<variant> (output, n); +} + +/* Create a vector of variant parts that can be attached to a type. + OBSTACK is where any needed allocations will be done. OFFSET_MAP + holds the mapping from section offsets to fields for the type. FI + describes the fields of the type we're processing. VARIANT_PARTS + is the vector to convert. */ + +static const gdb::array_view<variant_part> +create_variant_parts (struct obstack *obstack, + const offset_map_type &offset_map, + struct field_info *fi, + const std::vector<variant_part_builder> &variant_parts) +{ + if (variant_parts.empty ()) + return {}; + + size_t n = variant_parts.size (); + variant_part *result = new (obstack) variant_part[n]; + for (size_t i = 0; i < n; ++i) + create_one_variant_part (result[i], obstack, offset_map, fi, + variant_parts[i]); + + return gdb::array_view<variant_part> (result, n); +} + +/* Compute the variant part vector for FIP, attaching it to TYPE when + done. */ + +static void +add_variant_property (struct field_info *fip, struct type *type, + struct dwarf2_cu *cu) +{ + /* Map section offsets of fields to their field index. Note the + field index here does not take the number of baseclasses into + account. */ + offset_map_type offset_map; + for (int i = 0; i < fip->fields.size (); ++i) + offset_map[fip->fields[i].offset] = i; + + struct objfile *objfile = cu->per_objfile->objfile; + gdb::array_view<variant_part> parts + = create_variant_parts (&objfile->objfile_obstack, offset_map, fip, + fip->variant_parts); + + struct dynamic_prop prop; + prop.set_variant_parts ((gdb::array_view<variant_part> *) + obstack_copy (&objfile->objfile_obstack, &parts, + sizeof (parts))); + + type->add_dyn_prop (DYN_PROP_VARIANT_PARTS, prop); +} + +/* Create the vector of fields, and attach it to the type. */ + +static void +dwarf2_attach_fields_to_type (struct field_info *fip, struct type *type, + struct dwarf2_cu *cu) +{ + int nfields = fip->nfields (); + + /* Record the field count, allocate space for the array of fields, + and create blank accessibility bitfields if necessary. */ + type->set_num_fields (nfields); + type->set_fields + ((struct field *) TYPE_ZALLOC (type, sizeof (struct field) * nfields)); + + if (fip->non_public_fields && cu->language != language_ada) + { + ALLOCATE_CPLUS_STRUCT_TYPE (type); + + TYPE_FIELD_PRIVATE_BITS (type) = + (B_TYPE *) TYPE_ALLOC (type, B_BYTES (nfields)); + B_CLRALL (TYPE_FIELD_PRIVATE_BITS (type), nfields); + + TYPE_FIELD_PROTECTED_BITS (type) = + (B_TYPE *) TYPE_ALLOC (type, B_BYTES (nfields)); + B_CLRALL (TYPE_FIELD_PROTECTED_BITS (type), nfields); + + TYPE_FIELD_IGNORE_BITS (type) = + (B_TYPE *) TYPE_ALLOC (type, B_BYTES (nfields)); + B_CLRALL (TYPE_FIELD_IGNORE_BITS (type), nfields); + } + + /* If the type has baseclasses, allocate and clear a bit vector for + TYPE_FIELD_VIRTUAL_BITS. */ + if (!fip->baseclasses.empty () && cu->language != language_ada) + { + int num_bytes = B_BYTES (fip->baseclasses.size ()); + unsigned char *pointer; + + ALLOCATE_CPLUS_STRUCT_TYPE (type); + pointer = (unsigned char *) TYPE_ALLOC (type, num_bytes); + TYPE_FIELD_VIRTUAL_BITS (type) = pointer; + B_CLRALL (TYPE_FIELD_VIRTUAL_BITS (type), fip->baseclasses.size ()); + TYPE_N_BASECLASSES (type) = fip->baseclasses.size (); + } + + if (!fip->variant_parts.empty ()) + add_variant_property (fip, type, cu); + + /* Copy the saved-up fields into the field vector. */ + for (int i = 0; i < nfields; ++i) + { + struct nextfield &field + = ((i < fip->baseclasses.size ()) ? fip->baseclasses[i] + : fip->fields[i - fip->baseclasses.size ()]); + + type->field (i) = field.field; + switch (field.accessibility) + { + case DW_ACCESS_private: + if (cu->language != language_ada) + SET_TYPE_FIELD_PRIVATE (type, i); + break; + + case DW_ACCESS_protected: + if (cu->language != language_ada) + SET_TYPE_FIELD_PROTECTED (type, i); + break; + + case DW_ACCESS_public: + break; + + default: + /* Unknown accessibility. Complain and treat it as public. */ + { + complaint (_("unsupported accessibility %d"), + field.accessibility); + } + break; + } + if (i < fip->baseclasses.size ()) + { + switch (field.virtuality) + { + case DW_VIRTUALITY_virtual: + case DW_VIRTUALITY_pure_virtual: + if (cu->language == language_ada) + error (_("unexpected virtuality in component of Ada type")); + SET_TYPE_FIELD_VIRTUAL (type, i); + break; + } + } + } +} + +/* Return true if this member function is a constructor, false + otherwise. */ + +static int +dwarf2_is_constructor (struct die_info *die, struct dwarf2_cu *cu) +{ + const char *fieldname; + const char *type_name; + int len; + + if (die->parent == NULL) + return 0; + + if (die->parent->tag != DW_TAG_structure_type + && die->parent->tag != DW_TAG_union_type + && die->parent->tag != DW_TAG_class_type) + return 0; + + fieldname = dwarf2_name (die, cu); + type_name = dwarf2_name (die->parent, cu); + if (fieldname == NULL || type_name == NULL) + return 0; + + len = strlen (fieldname); + return (strncmp (fieldname, type_name, len) == 0 + && (type_name[len] == '\0' || type_name[len] == '<')); +} + +/* Check if the given VALUE is a recognized enum + dwarf_defaulted_attribute constant according to DWARF5 spec, + Table 7.24. */ + +static bool +is_valid_DW_AT_defaulted (ULONGEST value) +{ + switch (value) + { + case DW_DEFAULTED_no: + case DW_DEFAULTED_in_class: + case DW_DEFAULTED_out_of_class: + return true; + } + + complaint (_("unrecognized DW_AT_defaulted value (%s)"), pulongest (value)); + return false; +} + +/* Add a member function to the proper fieldlist. */ + +static void +dwarf2_add_member_fn (struct field_info *fip, struct die_info *die, + struct type *type, struct dwarf2_cu *cu) +{ + struct objfile *objfile = cu->per_objfile->objfile; + struct attribute *attr; + int i; + struct fnfieldlist *flp = nullptr; + struct fn_field *fnp; + const char *fieldname; + struct type *this_type; + enum dwarf_access_attribute accessibility; + + if (cu->language == language_ada) + error (_("unexpected member function in Ada type")); + + /* Get name of member function. */ + fieldname = dwarf2_name (die, cu); + if (fieldname == NULL) + return; + + /* Look up member function name in fieldlist. */ + for (i = 0; i < fip->fnfieldlists.size (); i++) + { + if (strcmp (fip->fnfieldlists[i].name, fieldname) == 0) + { + flp = &fip->fnfieldlists[i]; + break; + } + } + + /* Create a new fnfieldlist if necessary. */ + if (flp == nullptr) + { + fip->fnfieldlists.emplace_back (); + flp = &fip->fnfieldlists.back (); + flp->name = fieldname; + i = fip->fnfieldlists.size () - 1; + } + + /* Create a new member function field and add it to the vector of + fnfieldlists. */ + flp->fnfields.emplace_back (); + fnp = &flp->fnfields.back (); + + /* Delay processing of the physname until later. */ + if (cu->language == language_cplus) + add_to_method_list (type, i, flp->fnfields.size () - 1, fieldname, + die, cu); + else + { + const char *physname = dwarf2_physname (fieldname, die, cu); + fnp->physname = physname ? physname : ""; + } + + fnp->type = alloc_type (objfile); + this_type = read_type_die (die, cu); + if (this_type && this_type->code () == TYPE_CODE_FUNC) + { + int nparams = this_type->num_fields (); + + /* TYPE is the domain of this method, and THIS_TYPE is the type + of the method itself (TYPE_CODE_METHOD). */ + smash_to_method_type (fnp->type, type, + TYPE_TARGET_TYPE (this_type), + this_type->fields (), + this_type->num_fields (), + TYPE_VARARGS (this_type)); + + /* Handle static member functions. + Dwarf2 has no clean way to discern C++ static and non-static + member functions. G++ helps GDB by marking the first + parameter for non-static member functions (which is the this + pointer) as artificial. We obtain this information from + read_subroutine_type via TYPE_FIELD_ARTIFICIAL. */ + if (nparams == 0 || TYPE_FIELD_ARTIFICIAL (this_type, 0) == 0) + fnp->voffset = VOFFSET_STATIC; + } + else + complaint (_("member function type missing for '%s'"), + dwarf2_full_name (fieldname, die, cu)); + + /* Get fcontext from DW_AT_containing_type if present. */ + if (dwarf2_attr (die, DW_AT_containing_type, cu) != NULL) + fnp->fcontext = die_containing_type (die, cu); + + /* dwarf2 doesn't have stubbed physical names, so the setting of is_const and + is_volatile is irrelevant, as it is needed by gdb_mangle_name only. */ + + /* Get accessibility. */ + attr = dwarf2_attr (die, DW_AT_accessibility, cu); + if (attr != nullptr) + accessibility = (enum dwarf_access_attribute) DW_UNSND (attr); + else + accessibility = dwarf2_default_access_attribute (die, cu); + switch (accessibility) + { + case DW_ACCESS_private: + fnp->is_private = 1; + break; + case DW_ACCESS_protected: + fnp->is_protected = 1; + break; + } + + /* Check for artificial methods. */ + attr = dwarf2_attr (die, DW_AT_artificial, cu); + if (attr && DW_UNSND (attr) != 0) + fnp->is_artificial = 1; + + /* Check for defaulted methods. */ + attr = dwarf2_attr (die, DW_AT_defaulted, cu); + if (attr != nullptr && is_valid_DW_AT_defaulted (DW_UNSND (attr))) + fnp->defaulted = (enum dwarf_defaulted_attribute) DW_UNSND (attr); + + /* Check for deleted methods. */ + attr = dwarf2_attr (die, DW_AT_deleted, cu); + if (attr != nullptr && DW_UNSND (attr) != 0) + fnp->is_deleted = 1; + + fnp->is_constructor = dwarf2_is_constructor (die, cu); + + /* Get index in virtual function table if it is a virtual member + function. For older versions of GCC, this is an offset in the + appropriate virtual table, as specified by DW_AT_containing_type. + For everyone else, it is an expression to be evaluated relative + to the object address. */ + + attr = dwarf2_attr (die, DW_AT_vtable_elem_location, cu); + if (attr != nullptr) + { + if (attr->form_is_block () && DW_BLOCK (attr)->size > 0) + { + if (DW_BLOCK (attr)->data[0] == DW_OP_constu) + { + /* Old-style GCC. */ + fnp->voffset = decode_locdesc (DW_BLOCK (attr), cu) + 2; + } + else if (DW_BLOCK (attr)->data[0] == DW_OP_deref + || (DW_BLOCK (attr)->size > 1 + && DW_BLOCK (attr)->data[0] == DW_OP_deref_size + && DW_BLOCK (attr)->data[1] == cu->header.addr_size)) + { + fnp->voffset = decode_locdesc (DW_BLOCK (attr), cu); + if ((fnp->voffset % cu->header.addr_size) != 0) + dwarf2_complex_location_expr_complaint (); + else + fnp->voffset /= cu->header.addr_size; + fnp->voffset += 2; + } + else + dwarf2_complex_location_expr_complaint (); + + if (!fnp->fcontext) + { + /* If there is no `this' field and no DW_AT_containing_type, + we cannot actually find a base class context for the + vtable! */ + if (this_type->num_fields () == 0 + || !TYPE_FIELD_ARTIFICIAL (this_type, 0)) + { + complaint (_("cannot determine context for virtual member " + "function \"%s\" (offset %s)"), + fieldname, sect_offset_str (die->sect_off)); + } + else + { + fnp->fcontext + = TYPE_TARGET_TYPE (this_type->field (0).type ()); + } + } + } + else if (attr->form_is_section_offset ()) + { + dwarf2_complex_location_expr_complaint (); + } + else + { + dwarf2_invalid_attrib_class_complaint ("DW_AT_vtable_elem_location", + fieldname); + } + } + else + { + attr = dwarf2_attr (die, DW_AT_virtuality, cu); + if (attr && DW_UNSND (attr)) + { + /* GCC does this, as of 2008-08-25; PR debug/37237. */ + complaint (_("Member function \"%s\" (offset %s) is virtual " + "but the vtable offset is not specified"), + fieldname, sect_offset_str (die->sect_off)); + ALLOCATE_CPLUS_STRUCT_TYPE (type); + TYPE_CPLUS_DYNAMIC (type) = 1; + } + } +} + +/* Create the vector of member function fields, and attach it to the type. */ + +static void +dwarf2_attach_fn_fields_to_type (struct field_info *fip, struct type *type, + struct dwarf2_cu *cu) +{ + if (cu->language == language_ada) + error (_("unexpected member functions in Ada type")); + + ALLOCATE_CPLUS_STRUCT_TYPE (type); + TYPE_FN_FIELDLISTS (type) = (struct fn_fieldlist *) + TYPE_ALLOC (type, + sizeof (struct fn_fieldlist) * fip->fnfieldlists.size ()); + + for (int i = 0; i < fip->fnfieldlists.size (); i++) + { + struct fnfieldlist &nf = fip->fnfieldlists[i]; + struct fn_fieldlist *fn_flp = &TYPE_FN_FIELDLIST (type, i); + + TYPE_FN_FIELDLIST_NAME (type, i) = nf.name; + TYPE_FN_FIELDLIST_LENGTH (type, i) = nf.fnfields.size (); + fn_flp->fn_fields = (struct fn_field *) + TYPE_ALLOC (type, sizeof (struct fn_field) * nf.fnfields.size ()); + + for (int k = 0; k < nf.fnfields.size (); ++k) + fn_flp->fn_fields[k] = nf.fnfields[k]; + } + + TYPE_NFN_FIELDS (type) = fip->fnfieldlists.size (); +} + +/* Returns non-zero if NAME is the name of a vtable member in CU's + language, zero otherwise. */ +static int +is_vtable_name (const char *name, struct dwarf2_cu *cu) +{ + static const char vptr[] = "_vptr"; + + /* Look for the C++ form of the vtable. */ + if (startswith (name, vptr) && is_cplus_marker (name[sizeof (vptr) - 1])) + return 1; + + return 0; +} + +/* GCC outputs unnamed structures that are really pointers to member + functions, with the ABI-specified layout. If TYPE describes + such a structure, smash it into a member function type. + + GCC shouldn't do this; it should just output pointer to member DIEs. + This is GCC PR debug/28767. */ + +static void +quirk_gcc_member_function_pointer (struct type *type, struct objfile *objfile) +{ + struct type *pfn_type, *self_type, *new_type; + + /* Check for a structure with no name and two children. */ + if (type->code () != TYPE_CODE_STRUCT || type->num_fields () != 2) + return; + + /* Check for __pfn and __delta members. */ + if (TYPE_FIELD_NAME (type, 0) == NULL + || strcmp (TYPE_FIELD_NAME (type, 0), "__pfn") != 0 + || TYPE_FIELD_NAME (type, 1) == NULL + || strcmp (TYPE_FIELD_NAME (type, 1), "__delta") != 0) + return; + + /* Find the type of the method. */ + pfn_type = type->field (0).type (); + if (pfn_type == NULL + || pfn_type->code () != TYPE_CODE_PTR + || TYPE_TARGET_TYPE (pfn_type)->code () != TYPE_CODE_FUNC) + return; + + /* Look for the "this" argument. */ + pfn_type = TYPE_TARGET_TYPE (pfn_type); + if (pfn_type->num_fields () == 0 + /* || pfn_type->field (0).type () == NULL */ + || pfn_type->field (0).type ()->code () != TYPE_CODE_PTR) + return; + + self_type = TYPE_TARGET_TYPE (pfn_type->field (0).type ()); + new_type = alloc_type (objfile); + smash_to_method_type (new_type, self_type, TYPE_TARGET_TYPE (pfn_type), + pfn_type->fields (), pfn_type->num_fields (), + TYPE_VARARGS (pfn_type)); + smash_to_methodptr_type (type, new_type); +} + +/* If the DIE has a DW_AT_alignment attribute, return its value, doing + appropriate error checking and issuing complaints if there is a + problem. */ + +static ULONGEST +get_alignment (struct dwarf2_cu *cu, struct die_info *die) +{ + struct attribute *attr = dwarf2_attr (die, DW_AT_alignment, cu); + + if (attr == nullptr) + return 0; + + if (!attr->form_is_constant ()) + { + complaint (_("DW_AT_alignment must have constant form" + " - DIE at %s [in module %s]"), + sect_offset_str (die->sect_off), + objfile_name (cu->per_objfile->objfile)); + return 0; + } + + ULONGEST align; + if (attr->form == DW_FORM_sdata) + { + LONGEST val = DW_SND (attr); + if (val < 0) + { + complaint (_("DW_AT_alignment value must not be negative" + " - DIE at %s [in module %s]"), + sect_offset_str (die->sect_off), + objfile_name (cu->per_objfile->objfile)); + return 0; + } + align = val; + } + else + align = DW_UNSND (attr); + + if (align == 0) + { + complaint (_("DW_AT_alignment value must not be zero" + " - DIE at %s [in module %s]"), + sect_offset_str (die->sect_off), + objfile_name (cu->per_objfile->objfile)); + return 0; + } + if ((align & (align - 1)) != 0) + { + complaint (_("DW_AT_alignment value must be a power of 2" + " - DIE at %s [in module %s]"), + sect_offset_str (die->sect_off), + objfile_name (cu->per_objfile->objfile)); + return 0; + } + + return align; +} + +/* If the DIE has a DW_AT_alignment attribute, use its value to set + the alignment for TYPE. */ + +static void +maybe_set_alignment (struct dwarf2_cu *cu, struct die_info *die, + struct type *type) +{ + if (!set_type_align (type, get_alignment (cu, die))) + complaint (_("DW_AT_alignment value too large" + " - DIE at %s [in module %s]"), + sect_offset_str (die->sect_off), + objfile_name (cu->per_objfile->objfile)); +} + +/* Check if the given VALUE is a valid enum dwarf_calling_convention + constant for a type, according to DWARF5 spec, Table 5.5. */ + +static bool +is_valid_DW_AT_calling_convention_for_type (ULONGEST value) +{ + switch (value) + { + case DW_CC_normal: + case DW_CC_pass_by_reference: + case DW_CC_pass_by_value: + return true; + + default: + complaint (_("unrecognized DW_AT_calling_convention value " + "(%s) for a type"), pulongest (value)); + return false; + } +} + +/* Check if the given VALUE is a valid enum dwarf_calling_convention + constant for a subroutine, according to DWARF5 spec, Table 3.3, and + also according to GNU-specific values (see include/dwarf2.h). */ + +static bool +is_valid_DW_AT_calling_convention_for_subroutine (ULONGEST value) +{ + switch (value) + { + case DW_CC_normal: + case DW_CC_program: + case DW_CC_nocall: + return true; + + case DW_CC_GNU_renesas_sh: + case DW_CC_GNU_borland_fastcall_i386: + case DW_CC_GDB_IBM_OpenCL: + return true; + + default: + complaint (_("unrecognized DW_AT_calling_convention value " + "(%s) for a subroutine"), pulongest (value)); + return false; + } +} + +/* Called when we find the DIE that starts a structure or union scope + (definition) to create a type for the structure or union. Fill in + the type's name and general properties; the members will not be + processed until process_structure_scope. A symbol table entry for + the type will also not be done until process_structure_scope (assuming + the type has a name). + + NOTE: we need to call these functions regardless of whether or not the + DIE has a DW_AT_name attribute, since it might be an anonymous + structure or union. This gets the type entered into our set of + user defined types. */ + +static struct type * +read_structure_type (struct die_info *die, struct dwarf2_cu *cu) +{ + struct objfile *objfile = cu->per_objfile->objfile; + struct type *type; + struct attribute *attr; + const char *name; + + /* If the definition of this type lives in .debug_types, read that type. + Don't follow DW_AT_specification though, that will take us back up + the chain and we want to go down. */ + attr = die->attr (DW_AT_signature); + if (attr != nullptr) + { + type = get_DW_AT_signature_type (die, attr, cu); + + /* The type's CU may not be the same as CU. + Ensure TYPE is recorded with CU in die_type_hash. */ + return set_die_type (die, type, cu); + } + + type = alloc_type (objfile); + INIT_CPLUS_SPECIFIC (type); + + name = dwarf2_name (die, cu); + if (name != NULL) + { + if (cu->language == language_cplus + || cu->language == language_d + || cu->language == language_rust) + { + const char *full_name = dwarf2_full_name (name, die, cu); + + /* dwarf2_full_name might have already finished building the DIE's + type. If so, there is no need to continue. */ + if (get_die_type (die, cu) != NULL) + return get_die_type (die, cu); + + type->set_name (full_name); + } + else + { + /* The name is already allocated along with this objfile, so + we don't need to duplicate it for the type. */ + type->set_name (name); + } + } + + if (die->tag == DW_TAG_structure_type) + { + type->set_code (TYPE_CODE_STRUCT); + } + else if (die->tag == DW_TAG_union_type) + { + type->set_code (TYPE_CODE_UNION); + } + else + { + type->set_code (TYPE_CODE_STRUCT); + } + + if (cu->language == language_cplus && die->tag == DW_TAG_class_type) + TYPE_DECLARED_CLASS (type) = 1; + + /* Store the calling convention in the type if it's available in + the die. Otherwise the calling convention remains set to + the default value DW_CC_normal. */ + attr = dwarf2_attr (die, DW_AT_calling_convention, cu); + if (attr != nullptr + && is_valid_DW_AT_calling_convention_for_type (DW_UNSND (attr))) + { + ALLOCATE_CPLUS_STRUCT_TYPE (type); + TYPE_CPLUS_CALLING_CONVENTION (type) + = (enum dwarf_calling_convention) (DW_UNSND (attr)); + } + + attr = dwarf2_attr (die, DW_AT_byte_size, cu); + if (attr != nullptr) + { + if (attr->form_is_constant ()) + TYPE_LENGTH (type) = DW_UNSND (attr); + else + { + struct dynamic_prop prop; + if (attr_to_dynamic_prop (attr, die, cu, &prop, cu->addr_type ())) + type->add_dyn_prop (DYN_PROP_BYTE_SIZE, prop); + TYPE_LENGTH (type) = 0; + } + } + else + { + TYPE_LENGTH (type) = 0; + } + + maybe_set_alignment (cu, die, type); + + if (producer_is_icc_lt_14 (cu) && (TYPE_LENGTH (type) == 0)) + { + /* ICC<14 does not output the required DW_AT_declaration on + incomplete types, but gives them a size of zero. */ + TYPE_STUB (type) = 1; + } + else + TYPE_STUB_SUPPORTED (type) = 1; + + if (die_is_declaration (die, cu)) + TYPE_STUB (type) = 1; + else if (attr == NULL && die->child == NULL + && producer_is_realview (cu->producer)) + /* RealView does not output the required DW_AT_declaration + on incomplete types. */ + TYPE_STUB (type) = 1; + + /* We need to add the type field to the die immediately so we don't + infinitely recurse when dealing with pointers to the structure + type within the structure itself. */ + set_die_type (die, type, cu); + + /* set_die_type should be already done. */ + set_descriptive_type (type, die, cu); + + return type; +} + +static void handle_struct_member_die + (struct die_info *child_die, + struct type *type, + struct field_info *fi, + std::vector<struct symbol *> *template_args, + struct dwarf2_cu *cu); + +/* A helper for handle_struct_member_die that handles + DW_TAG_variant_part. */ + +static void +handle_variant_part (struct die_info *die, struct type *type, + struct field_info *fi, + std::vector<struct symbol *> *template_args, + struct dwarf2_cu *cu) +{ + variant_part_builder *new_part; + if (fi->current_variant_part == nullptr) + { + fi->variant_parts.emplace_back (); + new_part = &fi->variant_parts.back (); + } + else if (!fi->current_variant_part->processing_variant) + { + complaint (_("nested DW_TAG_variant_part seen " + "- DIE at %s [in module %s]"), + sect_offset_str (die->sect_off), + objfile_name (cu->per_objfile->objfile)); + return; + } + else + { + variant_field ¤t = fi->current_variant_part->variants.back (); + current.variant_parts.emplace_back (); + new_part = ¤t.variant_parts.back (); + } + + /* When we recurse, we want callees to add to this new variant + part. */ + scoped_restore save_current_variant_part + = make_scoped_restore (&fi->current_variant_part, new_part); + + struct attribute *discr = dwarf2_attr (die, DW_AT_discr, cu); + if (discr == NULL) + { + /* It's a univariant form, an extension we support. */ + } + else if (discr->form_is_ref ()) + { + struct dwarf2_cu *target_cu = cu; + struct die_info *target_die = follow_die_ref (die, discr, &target_cu); + + new_part->discriminant_offset = target_die->sect_off; + } + else + { + complaint (_("DW_AT_discr does not have DIE reference form" + " - DIE at %s [in module %s]"), + sect_offset_str (die->sect_off), + objfile_name (cu->per_objfile->objfile)); + } + + for (die_info *child_die = die->child; + child_die != NULL; + child_die = child_die->sibling) + handle_struct_member_die (child_die, type, fi, template_args, cu); +} + +/* A helper for handle_struct_member_die that handles + DW_TAG_variant. */ + +static void +handle_variant (struct die_info *die, struct type *type, + struct field_info *fi, + std::vector<struct symbol *> *template_args, + struct dwarf2_cu *cu) +{ + if (fi->current_variant_part == nullptr) + { + complaint (_("saw DW_TAG_variant outside DW_TAG_variant_part " + "- DIE at %s [in module %s]"), + sect_offset_str (die->sect_off), + objfile_name (cu->per_objfile->objfile)); + return; + } + if (fi->current_variant_part->processing_variant) + { + complaint (_("nested DW_TAG_variant seen " + "- DIE at %s [in module %s]"), + sect_offset_str (die->sect_off), + objfile_name (cu->per_objfile->objfile)); + return; + } + + scoped_restore save_processing_variant + = make_scoped_restore (&fi->current_variant_part->processing_variant, + true); + + fi->current_variant_part->variants.emplace_back (); + variant_field &variant = fi->current_variant_part->variants.back (); + variant.first_field = fi->fields.size (); + + /* In a variant we want to get the discriminant and also add a + field for our sole member child. */ + struct attribute *discr = dwarf2_attr (die, DW_AT_discr_value, cu); + if (discr == nullptr) + { + discr = dwarf2_attr (die, DW_AT_discr_list, cu); + if (discr == nullptr || DW_BLOCK (discr)->size == 0) + variant.default_branch = true; + else + variant.discr_list_data = DW_BLOCK (discr); + } + else + variant.discriminant_value = DW_UNSND (discr); + + for (die_info *variant_child = die->child; + variant_child != NULL; + variant_child = variant_child->sibling) + handle_struct_member_die (variant_child, type, fi, template_args, cu); + + variant.last_field = fi->fields.size (); +} + +/* A helper for process_structure_scope that handles a single member + DIE. */ + +static void +handle_struct_member_die (struct die_info *child_die, struct type *type, + struct field_info *fi, + std::vector<struct symbol *> *template_args, + struct dwarf2_cu *cu) +{ + if (child_die->tag == DW_TAG_member + || child_die->tag == DW_TAG_variable) + { + /* NOTE: carlton/2002-11-05: A C++ static data member + should be a DW_TAG_member that is a declaration, but + all versions of G++ as of this writing (so through at + least 3.2.1) incorrectly generate DW_TAG_variable + tags for them instead. */ + dwarf2_add_field (fi, child_die, cu); + } + else if (child_die->tag == DW_TAG_subprogram) + { + /* Rust doesn't have member functions in the C++ sense. + However, it does emit ordinary functions as children + of a struct DIE. */ + if (cu->language == language_rust) + read_func_scope (child_die, cu); + else + { + /* C++ member function. */ + dwarf2_add_member_fn (fi, child_die, type, cu); + } + } + else if (child_die->tag == DW_TAG_inheritance) + { + /* C++ base class field. */ + dwarf2_add_field (fi, child_die, cu); + } + else if (type_can_define_types (child_die)) + dwarf2_add_type_defn (fi, child_die, cu); + else if (child_die->tag == DW_TAG_template_type_param + || child_die->tag == DW_TAG_template_value_param) + { + struct symbol *arg = new_symbol (child_die, NULL, cu); + + if (arg != NULL) + template_args->push_back (arg); + } + else if (child_die->tag == DW_TAG_variant_part) + handle_variant_part (child_die, type, fi, template_args, cu); + else if (child_die->tag == DW_TAG_variant) + handle_variant (child_die, type, fi, template_args, cu); +} + +/* Finish creating a structure or union type, including filling in + its members and creating a symbol for it. */ + +static void +process_structure_scope (struct die_info *die, struct dwarf2_cu *cu) +{ + struct objfile *objfile = cu->per_objfile->objfile; + struct die_info *child_die; + struct type *type; + + type = get_die_type (die, cu); + if (type == NULL) + type = read_structure_type (die, cu); + + bool has_template_parameters = false; + if (die->child != NULL && ! die_is_declaration (die, cu)) + { + struct field_info fi; + std::vector<struct symbol *> template_args; + + child_die = die->child; + + while (child_die && child_die->tag) + { + handle_struct_member_die (child_die, type, &fi, &template_args, cu); + child_die = child_die->sibling; + } + + /* Attach template arguments to type. */ + if (!template_args.empty ()) + { + has_template_parameters = true; + ALLOCATE_CPLUS_STRUCT_TYPE (type); + TYPE_N_TEMPLATE_ARGUMENTS (type) = template_args.size (); + TYPE_TEMPLATE_ARGUMENTS (type) + = XOBNEWVEC (&objfile->objfile_obstack, + struct symbol *, + TYPE_N_TEMPLATE_ARGUMENTS (type)); + memcpy (TYPE_TEMPLATE_ARGUMENTS (type), + template_args.data (), + (TYPE_N_TEMPLATE_ARGUMENTS (type) + * sizeof (struct symbol *))); + } + + /* Attach fields and member functions to the type. */ + if (fi.nfields () > 0) + dwarf2_attach_fields_to_type (&fi, type, cu); + if (!fi.fnfieldlists.empty ()) + { + dwarf2_attach_fn_fields_to_type (&fi, type, cu); + + /* Get the type which refers to the base class (possibly this + class itself) which contains the vtable pointer for the current + class from the DW_AT_containing_type attribute. This use of + DW_AT_containing_type is a GNU extension. */ + + if (dwarf2_attr (die, DW_AT_containing_type, cu) != NULL) + { + struct type *t = die_containing_type (die, cu); + + set_type_vptr_basetype (type, t); + if (type == t) + { + int i; + + /* Our own class provides vtbl ptr. */ + for (i = t->num_fields () - 1; + i >= TYPE_N_BASECLASSES (t); + --i) + { + const char *fieldname = TYPE_FIELD_NAME (t, i); + + if (is_vtable_name (fieldname, cu)) + { + set_type_vptr_fieldno (type, i); + break; + } + } + + /* Complain if virtual function table field not found. */ + if (i < TYPE_N_BASECLASSES (t)) + complaint (_("virtual function table pointer " + "not found when defining class '%s'"), + type->name () ? type->name () : ""); + } + else + { + set_type_vptr_fieldno (type, TYPE_VPTR_FIELDNO (t)); + } + } + else if (cu->producer + && startswith (cu->producer, "IBM(R) XL C/C++ Advanced Edition")) + { + /* The IBM XLC compiler does not provide direct indication + of the containing type, but the vtable pointer is + always named __vfp. */ + + int i; + + for (i = type->num_fields () - 1; + i >= TYPE_N_BASECLASSES (type); + --i) + { + if (strcmp (TYPE_FIELD_NAME (type, i), "__vfp") == 0) + { + set_type_vptr_fieldno (type, i); + set_type_vptr_basetype (type, type); + break; + } + } + } + } + + /* Copy fi.typedef_field_list linked list elements content into the + allocated array TYPE_TYPEDEF_FIELD_ARRAY (type). */ + if (!fi.typedef_field_list.empty ()) + { + int count = fi.typedef_field_list.size (); + + ALLOCATE_CPLUS_STRUCT_TYPE (type); + TYPE_TYPEDEF_FIELD_ARRAY (type) + = ((struct decl_field *) + TYPE_ALLOC (type, + sizeof (TYPE_TYPEDEF_FIELD (type, 0)) * count)); + TYPE_TYPEDEF_FIELD_COUNT (type) = count; + + for (int i = 0; i < fi.typedef_field_list.size (); ++i) + TYPE_TYPEDEF_FIELD (type, i) = fi.typedef_field_list[i]; + } + + /* Copy fi.nested_types_list linked list elements content into the + allocated array TYPE_NESTED_TYPES_ARRAY (type). */ + if (!fi.nested_types_list.empty () && cu->language != language_ada) + { + int count = fi.nested_types_list.size (); + + ALLOCATE_CPLUS_STRUCT_TYPE (type); + TYPE_NESTED_TYPES_ARRAY (type) + = ((struct decl_field *) + TYPE_ALLOC (type, sizeof (struct decl_field) * count)); + TYPE_NESTED_TYPES_COUNT (type) = count; + + for (int i = 0; i < fi.nested_types_list.size (); ++i) + TYPE_NESTED_TYPES_FIELD (type, i) = fi.nested_types_list[i]; + } + } + + quirk_gcc_member_function_pointer (type, objfile); + if (cu->language == language_rust && die->tag == DW_TAG_union_type) + cu->rust_unions.push_back (type); + + /* NOTE: carlton/2004-03-16: GCC 3.4 (or at least one of its + snapshots) has been known to create a die giving a declaration + for a class that has, as a child, a die giving a definition for a + nested class. So we have to process our children even if the + current die is a declaration. Normally, of course, a declaration + won't have any children at all. */ + + child_die = die->child; + + while (child_die != NULL && child_die->tag) + { + if (child_die->tag == DW_TAG_member + || child_die->tag == DW_TAG_variable + || child_die->tag == DW_TAG_inheritance + || child_die->tag == DW_TAG_template_value_param + || child_die->tag == DW_TAG_template_type_param) + { + /* Do nothing. */ + } + else + process_die (child_die, cu); + + child_die = child_die->sibling; + } + + /* Do not consider external references. According to the DWARF standard, + these DIEs are identified by the fact that they have no byte_size + attribute, and a declaration attribute. */ + if (dwarf2_attr (die, DW_AT_byte_size, cu) != NULL + || !die_is_declaration (die, cu) + || dwarf2_attr (die, DW_AT_signature, cu) != NULL) + { + struct symbol *sym = new_symbol (die, type, cu); + + if (has_template_parameters) + { + struct symtab *symtab; + if (sym != nullptr) + symtab = symbol_symtab (sym); + else if (cu->line_header != nullptr) + { + /* Any related symtab will do. */ + symtab + = cu->line_header->file_names ()[0].symtab; + } + else + { + symtab = nullptr; + complaint (_("could not find suitable " + "symtab for template parameter" + " - DIE at %s [in module %s]"), + sect_offset_str (die->sect_off), + objfile_name (objfile)); + } + + if (symtab != nullptr) + { + /* Make sure that the symtab is set on the new symbols. + Even though they don't appear in this symtab directly, + other parts of gdb assume that symbols do, and this is + reasonably true. */ + for (int i = 0; i < TYPE_N_TEMPLATE_ARGUMENTS (type); ++i) + symbol_set_symtab (TYPE_TEMPLATE_ARGUMENT (type, i), symtab); + } + } + } +} + +/* Assuming DIE is an enumeration type, and TYPE is its associated + type, update TYPE using some information only available in DIE's + children. In particular, the fields are computed. */ + +static void +update_enumeration_type_from_children (struct die_info *die, + struct type *type, + struct dwarf2_cu *cu) +{ + struct die_info *child_die; + int unsigned_enum = 1; + int flag_enum = 1; + + auto_obstack obstack; + std::vector<struct field> fields; + + for (child_die = die->child; + child_die != NULL && child_die->tag; + child_die = child_die->sibling) + { + struct attribute *attr; + LONGEST value; + const gdb_byte *bytes; + struct dwarf2_locexpr_baton *baton; + const char *name; + + if (child_die->tag != DW_TAG_enumerator) + continue; + + attr = dwarf2_attr (child_die, DW_AT_const_value, cu); + if (attr == NULL) + continue; + + name = dwarf2_name (child_die, cu); + if (name == NULL) + name = "<anonymous enumerator>"; + + dwarf2_const_value_attr (attr, type, name, &obstack, cu, + &value, &bytes, &baton); + if (value < 0) + { + unsigned_enum = 0; + flag_enum = 0; + } + else + { + if (count_one_bits_ll (value) >= 2) + flag_enum = 0; + } + + fields.emplace_back (); + struct field &field = fields.back (); + FIELD_NAME (field) = dwarf2_physname (name, child_die, cu); + SET_FIELD_ENUMVAL (field, value); + } + + if (!fields.empty ()) + { + type->set_num_fields (fields.size ()); + type->set_fields + ((struct field *) + TYPE_ALLOC (type, sizeof (struct field) * fields.size ())); + memcpy (type->fields (), fields.data (), + sizeof (struct field) * fields.size ()); + } + + if (unsigned_enum) + TYPE_UNSIGNED (type) = 1; + if (flag_enum) + TYPE_FLAG_ENUM (type) = 1; +} + +/* Given a DW_AT_enumeration_type die, set its type. We do not + complete the type's fields yet, or create any symbols. */ + +static struct type * +read_enumeration_type (struct die_info *die, struct dwarf2_cu *cu) +{ + struct objfile *objfile = cu->per_objfile->objfile; + struct type *type; + struct attribute *attr; + const char *name; + + /* If the definition of this type lives in .debug_types, read that type. + Don't follow DW_AT_specification though, that will take us back up + the chain and we want to go down. */ + attr = die->attr (DW_AT_signature); + if (attr != nullptr) + { + type = get_DW_AT_signature_type (die, attr, cu); + + /* The type's CU may not be the same as CU. + Ensure TYPE is recorded with CU in die_type_hash. */ + return set_die_type (die, type, cu); + } + + type = alloc_type (objfile); + + type->set_code (TYPE_CODE_ENUM); + name = dwarf2_full_name (NULL, die, cu); + if (name != NULL) + type->set_name (name); + + attr = dwarf2_attr (die, DW_AT_type, cu); + if (attr != NULL) + { + struct type *underlying_type = die_type (die, cu); + + TYPE_TARGET_TYPE (type) = underlying_type; + } + + attr = dwarf2_attr (die, DW_AT_byte_size, cu); + if (attr != nullptr) + { + TYPE_LENGTH (type) = DW_UNSND (attr); + } + else + { + TYPE_LENGTH (type) = 0; + } + + maybe_set_alignment (cu, die, type); + + /* The enumeration DIE can be incomplete. In Ada, any type can be + declared as private in the package spec, and then defined only + inside the package body. Such types are known as Taft Amendment + Types. When another package uses such a type, an incomplete DIE + may be generated by the compiler. */ + if (die_is_declaration (die, cu)) + TYPE_STUB (type) = 1; + + /* If this type has an underlying type that is not a stub, then we + may use its attributes. We always use the "unsigned" attribute + in this situation, because ordinarily we guess whether the type + is unsigned -- but the guess can be wrong and the underlying type + can tell us the reality. However, we defer to a local size + attribute if one exists, because this lets the compiler override + the underlying type if needed. */ + if (TYPE_TARGET_TYPE (type) != NULL && !TYPE_STUB (TYPE_TARGET_TYPE (type))) + { + struct type *underlying_type = TYPE_TARGET_TYPE (type); + underlying_type = check_typedef (underlying_type); + TYPE_UNSIGNED (type) = TYPE_UNSIGNED (underlying_type); + if (TYPE_LENGTH (type) == 0) + TYPE_LENGTH (type) = TYPE_LENGTH (underlying_type); + if (TYPE_RAW_ALIGN (type) == 0 + && TYPE_RAW_ALIGN (underlying_type) != 0) + set_type_align (type, TYPE_RAW_ALIGN (underlying_type)); + } + + TYPE_DECLARED_CLASS (type) = dwarf2_flag_true_p (die, DW_AT_enum_class, cu); + + set_die_type (die, type, cu); + + /* Finish the creation of this type by using the enum's children. + Note that, as usual, this must come after set_die_type to avoid + infinite recursion when trying to compute the names of the + enumerators. */ + update_enumeration_type_from_children (die, type, cu); + + return type; +} + +/* Given a pointer to a die which begins an enumeration, process all + the dies that define the members of the enumeration, and create the + symbol for the enumeration type. + + NOTE: We reverse the order of the element list. */ + +static void +process_enumeration_scope (struct die_info *die, struct dwarf2_cu *cu) +{ + struct type *this_type; + + this_type = get_die_type (die, cu); + if (this_type == NULL) + this_type = read_enumeration_type (die, cu); + + if (die->child != NULL) + { + struct die_info *child_die; + const char *name; + + child_die = die->child; + while (child_die && child_die->tag) + { + if (child_die->tag != DW_TAG_enumerator) + { + process_die (child_die, cu); + } + else + { + name = dwarf2_name (child_die, cu); + if (name) + new_symbol (child_die, this_type, cu); + } + + child_die = child_die->sibling; + } + } + + /* If we are reading an enum from a .debug_types unit, and the enum + is a declaration, and the enum is not the signatured type in the + unit, then we do not want to add a symbol for it. Adding a + symbol would in some cases obscure the true definition of the + enum, giving users an incomplete type when the definition is + actually available. Note that we do not want to do this for all + enums which are just declarations, because C++0x allows forward + enum declarations. */ + if (cu->per_cu->is_debug_types + && die_is_declaration (die, cu)) + { + struct signatured_type *sig_type; + + sig_type = (struct signatured_type *) cu->per_cu; + gdb_assert (to_underlying (sig_type->type_offset_in_section) != 0); + if (sig_type->type_offset_in_section != die->sect_off) + return; + } + + new_symbol (die, this_type, cu); +} + +/* Extract all information from a DW_TAG_array_type DIE and put it in + the DIE's type field. For now, this only handles one dimensional + arrays. */ + +static struct type * +read_array_type (struct die_info *die, struct dwarf2_cu *cu) +{ + struct objfile *objfile = cu->per_objfile->objfile; + struct die_info *child_die; + struct type *type; + struct type *element_type, *range_type, *index_type; + struct attribute *attr; + const char *name; + struct dynamic_prop *byte_stride_prop = NULL; + unsigned int bit_stride = 0; + + element_type = die_type (die, cu); + + /* The die_type call above may have already set the type for this DIE. */ + type = get_die_type (die, cu); + if (type) + return type; + + attr = dwarf2_attr (die, DW_AT_byte_stride, cu); + if (attr != NULL) + { + int stride_ok; + struct type *prop_type = cu->addr_sized_int_type (false); + + byte_stride_prop + = (struct dynamic_prop *) alloca (sizeof (struct dynamic_prop)); + stride_ok = attr_to_dynamic_prop (attr, die, cu, byte_stride_prop, + prop_type); + if (!stride_ok) + { + complaint (_("unable to read array DW_AT_byte_stride " + " - DIE at %s [in module %s]"), + sect_offset_str (die->sect_off), + objfile_name (cu->per_objfile->objfile)); + /* Ignore this attribute. We will likely not be able to print + arrays of this type correctly, but there is little we can do + to help if we cannot read the attribute's value. */ + byte_stride_prop = NULL; + } + } + + attr = dwarf2_attr (die, DW_AT_bit_stride, cu); + if (attr != NULL) + bit_stride = DW_UNSND (attr); + + /* Irix 6.2 native cc creates array types without children for + arrays with unspecified length. */ + if (die->child == NULL) + { + index_type = objfile_type (objfile)->builtin_int; + range_type = create_static_range_type (NULL, index_type, 0, -1); + type = create_array_type_with_stride (NULL, element_type, range_type, + byte_stride_prop, bit_stride); + return set_die_type (die, type, cu); + } + + std::vector<struct type *> range_types; + child_die = die->child; + while (child_die && child_die->tag) + { + if (child_die->tag == DW_TAG_subrange_type) + { + struct type *child_type = read_type_die (child_die, cu); + + if (child_type != NULL) + { + /* The range type was succesfully read. Save it for the + array type creation. */ + range_types.push_back (child_type); + } + } + child_die = child_die->sibling; + } + + if (range_types.empty ()) + { + complaint (_("unable to find array range - DIE at %s [in module %s]"), + sect_offset_str (die->sect_off), + objfile_name (cu->per_objfile->objfile)); + return NULL; + } + + /* Dwarf2 dimensions are output from left to right, create the + necessary array types in backwards order. */ + + type = element_type; + + if (read_array_order (die, cu) == DW_ORD_col_major) + { + int i = 0; + + while (i < range_types.size ()) + type = create_array_type_with_stride (NULL, type, range_types[i++], + byte_stride_prop, bit_stride); + } + else + { + size_t ndim = range_types.size (); + while (ndim-- > 0) + type = create_array_type_with_stride (NULL, type, range_types[ndim], + byte_stride_prop, bit_stride); + } + + gdb_assert (type != element_type); + + /* Understand Dwarf2 support for vector types (like they occur on + the PowerPC w/ AltiVec). Gcc just adds another attribute to the + array type. This is not part of the Dwarf2/3 standard yet, but a + custom vendor extension. The main difference between a regular + array and the vector variant is that vectors are passed by value + to functions. */ + attr = dwarf2_attr (die, DW_AT_GNU_vector, cu); + if (attr != nullptr) + make_vector_type (type); + + /* The DIE may have DW_AT_byte_size set. For example an OpenCL + implementation may choose to implement triple vectors using this + attribute. */ + attr = dwarf2_attr (die, DW_AT_byte_size, cu); + if (attr != nullptr) + { + if (DW_UNSND (attr) >= TYPE_LENGTH (type)) + TYPE_LENGTH (type) = DW_UNSND (attr); + else + complaint (_("DW_AT_byte_size for array type smaller " + "than the total size of elements")); + } + + name = dwarf2_name (die, cu); + if (name) + type->set_name (name); + + maybe_set_alignment (cu, die, type); + + /* Install the type in the die. */ + set_die_type (die, type, cu); + + /* set_die_type should be already done. */ + set_descriptive_type (type, die, cu); + + return type; +} + +static enum dwarf_array_dim_ordering +read_array_order (struct die_info *die, struct dwarf2_cu *cu) +{ + struct attribute *attr; + + attr = dwarf2_attr (die, DW_AT_ordering, cu); + + if (attr != nullptr) + return (enum dwarf_array_dim_ordering) DW_SND (attr); + + /* GNU F77 is a special case, as at 08/2004 array type info is the + opposite order to the dwarf2 specification, but data is still + laid out as per normal fortran. + + FIXME: dsl/2004-8-20: If G77 is ever fixed, this will also need + version checking. */ + + if (cu->language == language_fortran + && cu->producer && strstr (cu->producer, "GNU F77")) + { + return DW_ORD_row_major; + } + + switch (cu->language_defn->la_array_ordering) + { + case array_column_major: + return DW_ORD_col_major; + case array_row_major: + default: + return DW_ORD_row_major; + }; +} + +/* Extract all information from a DW_TAG_set_type DIE and put it in + the DIE's type field. */ + +static struct type * +read_set_type (struct die_info *die, struct dwarf2_cu *cu) +{ + struct type *domain_type, *set_type; + struct attribute *attr; + + domain_type = die_type (die, cu); + + /* The die_type call above may have already set the type for this DIE. */ + set_type = get_die_type (die, cu); + if (set_type) + return set_type; + + set_type = create_set_type (NULL, domain_type); + + attr = dwarf2_attr (die, DW_AT_byte_size, cu); + if (attr != nullptr) + TYPE_LENGTH (set_type) = DW_UNSND (attr); + + maybe_set_alignment (cu, die, set_type); + + return set_die_type (die, set_type, cu); +} + +/* A helper for read_common_block that creates a locexpr baton. + SYM is the symbol which we are marking as computed. + COMMON_DIE is the DIE for the common block. + COMMON_LOC is the location expression attribute for the common + block itself. + MEMBER_LOC is the location expression attribute for the particular + member of the common block that we are processing. + CU is the CU from which the above come. */ + +static void +mark_common_block_symbol_computed (struct symbol *sym, + struct die_info *common_die, + struct attribute *common_loc, + struct attribute *member_loc, + struct dwarf2_cu *cu) +{ + dwarf2_per_objfile *per_objfile = cu->per_objfile; + struct objfile *objfile = per_objfile->objfile; + struct dwarf2_locexpr_baton *baton; + gdb_byte *ptr; + unsigned int cu_off; + enum bfd_endian byte_order = gdbarch_byte_order (objfile->arch ()); + LONGEST offset = 0; + + gdb_assert (common_loc && member_loc); + gdb_assert (common_loc->form_is_block ()); + gdb_assert (member_loc->form_is_block () + || member_loc->form_is_constant ()); + + baton = XOBNEW (&objfile->objfile_obstack, struct dwarf2_locexpr_baton); + baton->per_objfile = per_objfile; + baton->per_cu = cu->per_cu; + gdb_assert (baton->per_cu); + + baton->size = 5 /* DW_OP_call4 */ + 1 /* DW_OP_plus */; + + if (member_loc->form_is_constant ()) + { + offset = member_loc->constant_value (0); + baton->size += 1 /* DW_OP_addr */ + cu->header.addr_size; + } + else + baton->size += DW_BLOCK (member_loc)->size; + + ptr = (gdb_byte *) obstack_alloc (&objfile->objfile_obstack, baton->size); + baton->data = ptr; + + *ptr++ = DW_OP_call4; + cu_off = common_die->sect_off - cu->per_cu->sect_off; + store_unsigned_integer (ptr, 4, byte_order, cu_off); + ptr += 4; + + if (member_loc->form_is_constant ()) + { + *ptr++ = DW_OP_addr; + store_unsigned_integer (ptr, cu->header.addr_size, byte_order, offset); + ptr += cu->header.addr_size; + } + else + { + /* We have to copy the data here, because DW_OP_call4 will only + use a DW_AT_location attribute. */ + memcpy (ptr, DW_BLOCK (member_loc)->data, DW_BLOCK (member_loc)->size); + ptr += DW_BLOCK (member_loc)->size; + } + + *ptr++ = DW_OP_plus; + gdb_assert (ptr - baton->data == baton->size); + + SYMBOL_LOCATION_BATON (sym) = baton; + SYMBOL_ACLASS_INDEX (sym) = dwarf2_locexpr_index; +} + +/* Create appropriate locally-scoped variables for all the + DW_TAG_common_block entries. Also create a struct common_block + listing all such variables for `info common'. COMMON_BLOCK_DOMAIN + is used to separate the common blocks name namespace from regular + variable names. */ + +static void +read_common_block (struct die_info *die, struct dwarf2_cu *cu) +{ + struct attribute *attr; + + attr = dwarf2_attr (die, DW_AT_location, cu); + if (attr != nullptr) + { + /* Support the .debug_loc offsets. */ + if (attr->form_is_block ()) + { + /* Ok. */ + } + else if (attr->form_is_section_offset ()) + { + dwarf2_complex_location_expr_complaint (); + attr = NULL; + } + else + { + dwarf2_invalid_attrib_class_complaint ("DW_AT_location", + "common block member"); + attr = NULL; + } + } + + if (die->child != NULL) + { + struct objfile *objfile = cu->per_objfile->objfile; + struct die_info *child_die; + size_t n_entries = 0, size; + struct common_block *common_block; + struct symbol *sym; + + for (child_die = die->child; + child_die && child_die->tag; + child_die = child_die->sibling) + ++n_entries; + + size = (sizeof (struct common_block) + + (n_entries - 1) * sizeof (struct symbol *)); + common_block + = (struct common_block *) obstack_alloc (&objfile->objfile_obstack, + size); + memset (common_block->contents, 0, n_entries * sizeof (struct symbol *)); + common_block->n_entries = 0; + + for (child_die = die->child; + child_die && child_die->tag; + child_die = child_die->sibling) + { + /* Create the symbol in the DW_TAG_common_block block in the current + symbol scope. */ + sym = new_symbol (child_die, NULL, cu); + if (sym != NULL) + { + struct attribute *member_loc; + + common_block->contents[common_block->n_entries++] = sym; + + member_loc = dwarf2_attr (child_die, DW_AT_data_member_location, + cu); + if (member_loc) + { + /* GDB has handled this for a long time, but it is + not specified by DWARF. It seems to have been + emitted by gfortran at least as recently as: + http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23057. */ + complaint (_("Variable in common block has " + "DW_AT_data_member_location " + "- DIE at %s [in module %s]"), + sect_offset_str (child_die->sect_off), + objfile_name (objfile)); + + if (member_loc->form_is_section_offset ()) + dwarf2_complex_location_expr_complaint (); + else if (member_loc->form_is_constant () + || member_loc->form_is_block ()) + { + if (attr != nullptr) + mark_common_block_symbol_computed (sym, die, attr, + member_loc, cu); + } + else + dwarf2_complex_location_expr_complaint (); + } + } + } + + sym = new_symbol (die, objfile_type (objfile)->builtin_void, cu); + SYMBOL_VALUE_COMMON_BLOCK (sym) = common_block; + } +} + +/* Create a type for a C++ namespace. */ + +static struct type * +read_namespace_type (struct die_info *die, struct dwarf2_cu *cu) +{ + struct objfile *objfile = cu->per_objfile->objfile; + const char *previous_prefix, *name; + int is_anonymous; + struct type *type; + + /* For extensions, reuse the type of the original namespace. */ + if (dwarf2_attr (die, DW_AT_extension, cu) != NULL) + { + struct die_info *ext_die; + struct dwarf2_cu *ext_cu = cu; + + ext_die = dwarf2_extension (die, &ext_cu); + type = read_type_die (ext_die, ext_cu); + + /* EXT_CU may not be the same as CU. + Ensure TYPE is recorded with CU in die_type_hash. */ + return set_die_type (die, type, cu); + } + + name = namespace_name (die, &is_anonymous, cu); + + /* Now build the name of the current namespace. */ + + previous_prefix = determine_prefix (die, cu); + if (previous_prefix[0] != '\0') + name = typename_concat (&objfile->objfile_obstack, + previous_prefix, name, 0, cu); + + /* Create the type. */ + type = init_type (objfile, TYPE_CODE_NAMESPACE, 0, name); + + return set_die_type (die, type, cu); +} + +/* Read a namespace scope. */ + +static void +read_namespace (struct die_info *die, struct dwarf2_cu *cu) +{ + struct objfile *objfile = cu->per_objfile->objfile; + int is_anonymous; + + /* Add a symbol associated to this if we haven't seen the namespace + before. Also, add a using directive if it's an anonymous + namespace. */ + + if (dwarf2_attr (die, DW_AT_extension, cu) == NULL) + { + struct type *type; + + type = read_type_die (die, cu); + new_symbol (die, type, cu); + + namespace_name (die, &is_anonymous, cu); + if (is_anonymous) + { + const char *previous_prefix = determine_prefix (die, cu); + + std::vector<const char *> excludes; + add_using_directive (using_directives (cu), + previous_prefix, type->name (), NULL, + NULL, excludes, 0, &objfile->objfile_obstack); + } + } + + if (die->child != NULL) + { + struct die_info *child_die = die->child; + + while (child_die && child_die->tag) + { + process_die (child_die, cu); + child_die = child_die->sibling; + } + } +} + +/* Read a Fortran module as type. This DIE can be only a declaration used for + imported module. Still we need that type as local Fortran "use ... only" + declaration imports depend on the created type in determine_prefix. */ + +static struct type * +read_module_type (struct die_info *die, struct dwarf2_cu *cu) +{ + struct objfile *objfile = cu->per_objfile->objfile; + const char *module_name; + struct type *type; + + module_name = dwarf2_name (die, cu); + type = init_type (objfile, TYPE_CODE_MODULE, 0, module_name); + + return set_die_type (die, type, cu); +} + +/* Read a Fortran module. */ + +static void +read_module (struct die_info *die, struct dwarf2_cu *cu) +{ + struct die_info *child_die = die->child; + struct type *type; + + type = read_type_die (die, cu); + new_symbol (die, type, cu); + + while (child_die && child_die->tag) + { + process_die (child_die, cu); + child_die = child_die->sibling; + } +} + +/* Return the name of the namespace represented by DIE. Set + *IS_ANONYMOUS to tell whether or not the namespace is an anonymous + namespace. */ + +static const char * +namespace_name (struct die_info *die, int *is_anonymous, struct dwarf2_cu *cu) +{ + struct die_info *current_die; + const char *name = NULL; + + /* Loop through the extensions until we find a name. */ + + for (current_die = die; + current_die != NULL; + current_die = dwarf2_extension (die, &cu)) + { + /* We don't use dwarf2_name here so that we can detect the absence + of a name -> anonymous namespace. */ + name = dwarf2_string_attr (die, DW_AT_name, cu); + + if (name != NULL) + break; + } + + /* Is it an anonymous namespace? */ + + *is_anonymous = (name == NULL); + if (*is_anonymous) + name = CP_ANONYMOUS_NAMESPACE_STR; + + return name; +} + +/* Extract all information from a DW_TAG_pointer_type DIE and add to + the user defined type vector. */ + +static struct type * +read_tag_pointer_type (struct die_info *die, struct dwarf2_cu *cu) +{ + struct gdbarch *gdbarch = cu->per_objfile->objfile->arch (); + struct comp_unit_head *cu_header = &cu->header; + struct type *type; + struct attribute *attr_byte_size; + struct attribute *attr_address_class; + int byte_size, addr_class; + struct type *target_type; + + target_type = die_type (die, cu); + + /* The die_type call above may have already set the type for this DIE. */ + type = get_die_type (die, cu); + if (type) + return type; + + type = lookup_pointer_type (target_type); + + attr_byte_size = dwarf2_attr (die, DW_AT_byte_size, cu); + if (attr_byte_size) + byte_size = DW_UNSND (attr_byte_size); + else + byte_size = cu_header->addr_size; + + attr_address_class = dwarf2_attr (die, DW_AT_address_class, cu); + if (attr_address_class) + addr_class = DW_UNSND (attr_address_class); + else + addr_class = DW_ADDR_none; + + ULONGEST alignment = get_alignment (cu, die); + + /* If the pointer size, alignment, or address class is different + than the default, create a type variant marked as such and set + the length accordingly. */ + if (TYPE_LENGTH (type) != byte_size + || (alignment != 0 && TYPE_RAW_ALIGN (type) != 0 + && alignment != TYPE_RAW_ALIGN (type)) + || addr_class != DW_ADDR_none) + { + if (gdbarch_address_class_type_flags_p (gdbarch)) + { + int type_flags; + + type_flags = gdbarch_address_class_type_flags + (gdbarch, byte_size, addr_class); + gdb_assert ((type_flags & ~TYPE_INSTANCE_FLAG_ADDRESS_CLASS_ALL) + == 0); + type = make_type_with_address_space (type, type_flags); + } + else if (TYPE_LENGTH (type) != byte_size) + { + complaint (_("invalid pointer size %d"), byte_size); + } + else if (TYPE_RAW_ALIGN (type) != alignment) + { + complaint (_("Invalid DW_AT_alignment" + " - DIE at %s [in module %s]"), + sect_offset_str (die->sect_off), + objfile_name (cu->per_objfile->objfile)); + } + else + { + /* Should we also complain about unhandled address classes? */ + } + } + + TYPE_LENGTH (type) = byte_size; + set_type_align (type, alignment); + return set_die_type (die, type, cu); +} + +/* Extract all information from a DW_TAG_ptr_to_member_type DIE and add to + the user defined type vector. */ + +static struct type * +read_tag_ptr_to_member_type (struct die_info *die, struct dwarf2_cu *cu) +{ + struct type *type; + struct type *to_type; + struct type *domain; + + to_type = die_type (die, cu); + domain = die_containing_type (die, cu); + + /* The calls above may have already set the type for this DIE. */ + type = get_die_type (die, cu); + if (type) + return type; + + if (check_typedef (to_type)->code () == TYPE_CODE_METHOD) + type = lookup_methodptr_type (to_type); + else if (check_typedef (to_type)->code () == TYPE_CODE_FUNC) + { + struct type *new_type = alloc_type (cu->per_objfile->objfile); + + smash_to_method_type (new_type, domain, TYPE_TARGET_TYPE (to_type), + to_type->fields (), to_type->num_fields (), + TYPE_VARARGS (to_type)); + type = lookup_methodptr_type (new_type); + } + else + type = lookup_memberptr_type (to_type, domain); + + return set_die_type (die, type, cu); +} + +/* Extract all information from a DW_TAG_{rvalue_,}reference_type DIE and add to + the user defined type vector. */ + +static struct type * +read_tag_reference_type (struct die_info *die, struct dwarf2_cu *cu, + enum type_code refcode) +{ + struct comp_unit_head *cu_header = &cu->header; + struct type *type, *target_type; + struct attribute *attr; + + gdb_assert (refcode == TYPE_CODE_REF || refcode == TYPE_CODE_RVALUE_REF); + + target_type = die_type (die, cu); + + /* The die_type call above may have already set the type for this DIE. */ + type = get_die_type (die, cu); + if (type) + return type; + + type = lookup_reference_type (target_type, refcode); + attr = dwarf2_attr (die, DW_AT_byte_size, cu); + if (attr != nullptr) + { + TYPE_LENGTH (type) = DW_UNSND (attr); + } + else + { + TYPE_LENGTH (type) = cu_header->addr_size; + } + maybe_set_alignment (cu, die, type); + return set_die_type (die, type, cu); +} + +/* Add the given cv-qualifiers to the element type of the array. GCC + outputs DWARF type qualifiers that apply to an array, not the + element type. But GDB relies on the array element type to carry + the cv-qualifiers. This mimics section 6.7.3 of the C99 + specification. */ + +static struct type * +add_array_cv_type (struct die_info *die, struct dwarf2_cu *cu, + struct type *base_type, int cnst, int voltl) +{ + struct type *el_type, *inner_array; + + base_type = copy_type (base_type); + inner_array = base_type; + + while (TYPE_TARGET_TYPE (inner_array)->code () == TYPE_CODE_ARRAY) + { + TYPE_TARGET_TYPE (inner_array) = + copy_type (TYPE_TARGET_TYPE (inner_array)); + inner_array = TYPE_TARGET_TYPE (inner_array); + } + + el_type = TYPE_TARGET_TYPE (inner_array); + cnst |= TYPE_CONST (el_type); + voltl |= TYPE_VOLATILE (el_type); + TYPE_TARGET_TYPE (inner_array) = make_cv_type (cnst, voltl, el_type, NULL); + + return set_die_type (die, base_type, cu); +} + +static struct type * +read_tag_const_type (struct die_info *die, struct dwarf2_cu *cu) +{ + struct type *base_type, *cv_type; + + base_type = die_type (die, cu); + + /* The die_type call above may have already set the type for this DIE. */ + cv_type = get_die_type (die, cu); + if (cv_type) + return cv_type; + + /* In case the const qualifier is applied to an array type, the element type + is so qualified, not the array type (section 6.7.3 of C99). */ + if (base_type->code () == TYPE_CODE_ARRAY) + return add_array_cv_type (die, cu, base_type, 1, 0); + + cv_type = make_cv_type (1, TYPE_VOLATILE (base_type), base_type, 0); + return set_die_type (die, cv_type, cu); +} + +static struct type * +read_tag_volatile_type (struct die_info *die, struct dwarf2_cu *cu) +{ + struct type *base_type, *cv_type; + + base_type = die_type (die, cu); + + /* The die_type call above may have already set the type for this DIE. */ + cv_type = get_die_type (die, cu); + if (cv_type) + return cv_type; + + /* In case the volatile qualifier is applied to an array type, the + element type is so qualified, not the array type (section 6.7.3 + of C99). */ + if (base_type->code () == TYPE_CODE_ARRAY) + return add_array_cv_type (die, cu, base_type, 0, 1); + + cv_type = make_cv_type (TYPE_CONST (base_type), 1, base_type, 0); + return set_die_type (die, cv_type, cu); +} + +/* Handle DW_TAG_restrict_type. */ + +static struct type * +read_tag_restrict_type (struct die_info *die, struct dwarf2_cu *cu) +{ + struct type *base_type, *cv_type; + + base_type = die_type (die, cu); + + /* The die_type call above may have already set the type for this DIE. */ + cv_type = get_die_type (die, cu); + if (cv_type) + return cv_type; + + cv_type = make_restrict_type (base_type); + return set_die_type (die, cv_type, cu); +} + +/* Handle DW_TAG_atomic_type. */ + +static struct type * +read_tag_atomic_type (struct die_info *die, struct dwarf2_cu *cu) +{ + struct type *base_type, *cv_type; + + base_type = die_type (die, cu); + + /* The die_type call above may have already set the type for this DIE. */ + cv_type = get_die_type (die, cu); + if (cv_type) + return cv_type; + + cv_type = make_atomic_type (base_type); + return set_die_type (die, cv_type, cu); +} + +/* Extract all information from a DW_TAG_string_type DIE and add to + the user defined type vector. It isn't really a user defined type, + but it behaves like one, with other DIE's using an AT_user_def_type + attribute to reference it. */ + +static struct type * +read_tag_string_type (struct die_info *die, struct dwarf2_cu *cu) +{ + struct objfile *objfile = cu->per_objfile->objfile; + struct gdbarch *gdbarch = objfile->arch (); + struct type *type, *range_type, *index_type, *char_type; + struct attribute *attr; + struct dynamic_prop prop; + bool length_is_constant = true; + LONGEST length; + + /* There are a couple of places where bit sizes might be made use of + when parsing a DW_TAG_string_type, however, no producer that we know + of make use of these. Handling bit sizes that are a multiple of the + byte size is easy enough, but what about other bit sizes? Lets deal + with that problem when we have to. Warn about these attributes being + unsupported, then parse the type and ignore them like we always + have. */ + if (dwarf2_attr (die, DW_AT_bit_size, cu) != nullptr + || dwarf2_attr (die, DW_AT_string_length_bit_size, cu) != nullptr) + { + static bool warning_printed = false; + if (!warning_printed) + { + warning (_("DW_AT_bit_size and DW_AT_string_length_bit_size not " + "currently supported on DW_TAG_string_type.")); + warning_printed = true; + } + } + + attr = dwarf2_attr (die, DW_AT_string_length, cu); + if (attr != nullptr && !attr->form_is_constant ()) + { + /* The string length describes the location at which the length of + the string can be found. The size of the length field can be + specified with one of the attributes below. */ + struct type *prop_type; + struct attribute *len + = dwarf2_attr (die, DW_AT_string_length_byte_size, cu); + if (len == nullptr) + len = dwarf2_attr (die, DW_AT_byte_size, cu); + if (len != nullptr && len->form_is_constant ()) + { + /* Pass 0 as the default as we know this attribute is constant + and the default value will not be returned. */ + LONGEST sz = len->constant_value (0); + prop_type = cu->per_objfile->int_type (sz, true); + } + else + { + /* If the size is not specified then we assume it is the size of + an address on this target. */ + prop_type = cu->addr_sized_int_type (true); + } + + /* Convert the attribute into a dynamic property. */ + if (!attr_to_dynamic_prop (attr, die, cu, &prop, prop_type)) + length = 1; + else + length_is_constant = false; + } + else if (attr != nullptr) + { + /* This DW_AT_string_length just contains the length with no + indirection. There's no need to create a dynamic property in this + case. Pass 0 for the default value as we know it will not be + returned in this case. */ + length = attr->constant_value (0); + } + else if ((attr = dwarf2_attr (die, DW_AT_byte_size, cu)) != nullptr) + { + /* We don't currently support non-constant byte sizes for strings. */ + length = attr->constant_value (1); + } + else + { + /* Use 1 as a fallback length if we have nothing else. */ + length = 1; + } + + index_type = objfile_type (objfile)->builtin_int; + if (length_is_constant) + range_type = create_static_range_type (NULL, index_type, 1, length); + else + { + struct dynamic_prop low_bound; + + low_bound.set_const_val (1); + range_type = create_range_type (NULL, index_type, &low_bound, &prop, 0); + } + char_type = language_string_char_type (cu->language_defn, gdbarch); + type = create_string_type (NULL, char_type, range_type); + + return set_die_type (die, type, cu); +} + +/* Assuming that DIE corresponds to a function, returns nonzero + if the function is prototyped. */ + +static int +prototyped_function_p (struct die_info *die, struct dwarf2_cu *cu) +{ + struct attribute *attr; + + attr = dwarf2_attr (die, DW_AT_prototyped, cu); + if (attr && (DW_UNSND (attr) != 0)) + return 1; + + /* The DWARF standard implies that the DW_AT_prototyped attribute + is only meaningful for C, but the concept also extends to other + languages that allow unprototyped functions (Eg: Objective C). + For all other languages, assume that functions are always + prototyped. */ + if (cu->language != language_c + && cu->language != language_objc + && cu->language != language_opencl) + return 1; + + /* RealView does not emit DW_AT_prototyped. We can not distinguish + prototyped and unprototyped functions; default to prototyped, + since that is more common in modern code (and RealView warns + about unprototyped functions). */ + if (producer_is_realview (cu->producer)) + return 1; + + return 0; +} + +/* Handle DIES due to C code like: + + struct foo + { + int (*funcp)(int a, long l); + int b; + }; + + ('funcp' generates a DW_TAG_subroutine_type DIE). */ + +static struct type * +read_subroutine_type (struct die_info *die, struct dwarf2_cu *cu) +{ + struct objfile *objfile = cu->per_objfile->objfile; + struct type *type; /* Type that this function returns. */ + struct type *ftype; /* Function that returns above type. */ + struct attribute *attr; + + type = die_type (die, cu); + + /* The die_type call above may have already set the type for this DIE. */ + ftype = get_die_type (die, cu); + if (ftype) + return ftype; + + ftype = lookup_function_type (type); + + if (prototyped_function_p (die, cu)) + TYPE_PROTOTYPED (ftype) = 1; + + /* Store the calling convention in the type if it's available in + the subroutine die. Otherwise set the calling convention to + the default value DW_CC_normal. */ + attr = dwarf2_attr (die, DW_AT_calling_convention, cu); + if (attr != nullptr + && is_valid_DW_AT_calling_convention_for_subroutine (DW_UNSND (attr))) + TYPE_CALLING_CONVENTION (ftype) + = (enum dwarf_calling_convention) (DW_UNSND (attr)); + else if (cu->producer && strstr (cu->producer, "IBM XL C for OpenCL")) + TYPE_CALLING_CONVENTION (ftype) = DW_CC_GDB_IBM_OpenCL; + else + TYPE_CALLING_CONVENTION (ftype) = DW_CC_normal; + + /* Record whether the function returns normally to its caller or not + if the DWARF producer set that information. */ + attr = dwarf2_attr (die, DW_AT_noreturn, cu); + if (attr && (DW_UNSND (attr) != 0)) + TYPE_NO_RETURN (ftype) = 1; + + /* We need to add the subroutine type to the die immediately so + we don't infinitely recurse when dealing with parameters + declared as the same subroutine type. */ + set_die_type (die, ftype, cu); + + if (die->child != NULL) + { + struct type *void_type = objfile_type (objfile)->builtin_void; + struct die_info *child_die; + int nparams, iparams; + + /* Count the number of parameters. + FIXME: GDB currently ignores vararg functions, but knows about + vararg member functions. */ + nparams = 0; + child_die = die->child; + while (child_die && child_die->tag) + { + if (child_die->tag == DW_TAG_formal_parameter) + nparams++; + else if (child_die->tag == DW_TAG_unspecified_parameters) + TYPE_VARARGS (ftype) = 1; + child_die = child_die->sibling; + } + + /* Allocate storage for parameters and fill them in. */ + ftype->set_num_fields (nparams); + ftype->set_fields + ((struct field *) TYPE_ZALLOC (ftype, nparams * sizeof (struct field))); + + /* TYPE_FIELD_TYPE must never be NULL. Pre-fill the array to ensure it + even if we error out during the parameters reading below. */ + for (iparams = 0; iparams < nparams; iparams++) + ftype->field (iparams).set_type (void_type); + + iparams = 0; + child_die = die->child; + while (child_die && child_die->tag) + { + if (child_die->tag == DW_TAG_formal_parameter) + { + struct type *arg_type; + + /* DWARF version 2 has no clean way to discern C++ + static and non-static member functions. G++ helps + GDB by marking the first parameter for non-static + member functions (which is the this pointer) as + artificial. We pass this information to + dwarf2_add_member_fn via TYPE_FIELD_ARTIFICIAL. + + DWARF version 3 added DW_AT_object_pointer, which GCC + 4.5 does not yet generate. */ + attr = dwarf2_attr (child_die, DW_AT_artificial, cu); + if (attr != nullptr) + TYPE_FIELD_ARTIFICIAL (ftype, iparams) = DW_UNSND (attr); + else + TYPE_FIELD_ARTIFICIAL (ftype, iparams) = 0; + arg_type = die_type (child_die, cu); + + /* RealView does not mark THIS as const, which the testsuite + expects. GCC marks THIS as const in method definitions, + but not in the class specifications (GCC PR 43053). */ + if (cu->language == language_cplus && !TYPE_CONST (arg_type) + && TYPE_FIELD_ARTIFICIAL (ftype, iparams)) + { + int is_this = 0; + struct dwarf2_cu *arg_cu = cu; + const char *name = dwarf2_name (child_die, cu); + + attr = dwarf2_attr (die, DW_AT_object_pointer, cu); + if (attr != nullptr) + { + /* If the compiler emits this, use it. */ + if (follow_die_ref (die, attr, &arg_cu) == child_die) + is_this = 1; + } + else if (name && strcmp (name, "this") == 0) + /* Function definitions will have the argument names. */ + is_this = 1; + else if (name == NULL && iparams == 0) + /* Declarations may not have the names, so like + elsewhere in GDB, assume an artificial first + argument is "this". */ + is_this = 1; + + if (is_this) + arg_type = make_cv_type (1, TYPE_VOLATILE (arg_type), + arg_type, 0); + } + + ftype->field (iparams).set_type (arg_type); + iparams++; + } + child_die = child_die->sibling; + } + } + + return ftype; +} + +static struct type * +read_typedef (struct die_info *die, struct dwarf2_cu *cu) +{ + struct objfile *objfile = cu->per_objfile->objfile; + const char *name = NULL; + struct type *this_type, *target_type; + + name = dwarf2_full_name (NULL, die, cu); + this_type = init_type (objfile, TYPE_CODE_TYPEDEF, 0, name); + TYPE_TARGET_STUB (this_type) = 1; + set_die_type (die, this_type, cu); + target_type = die_type (die, cu); + if (target_type != this_type) + TYPE_TARGET_TYPE (this_type) = target_type; + else + { + /* Self-referential typedefs are, it seems, not allowed by the DWARF + spec and cause infinite loops in GDB. */ + complaint (_("Self-referential DW_TAG_typedef " + "- DIE at %s [in module %s]"), + sect_offset_str (die->sect_off), objfile_name (objfile)); + TYPE_TARGET_TYPE (this_type) = NULL; + } + if (name == NULL) + { + /* Gcc-7 and before supports -feliminate-dwarf2-dups, which generates + anonymous typedefs, which is, strictly speaking, invalid DWARF. + Handle these by just returning the target type, rather than + constructing an anonymous typedef type and trying to handle this + elsewhere. */ + set_die_type (die, target_type, cu); + return target_type; + } + return this_type; +} + +/* Allocate a floating-point type of size BITS and name NAME. Pass NAME_HINT + (which may be different from NAME) to the architecture back-end to allow + it to guess the correct format if necessary. */ + +static struct type * +dwarf2_init_float_type (struct objfile *objfile, int bits, const char *name, + const char *name_hint, enum bfd_endian byte_order) +{ + struct gdbarch *gdbarch = objfile->arch (); + const struct floatformat **format; + struct type *type; + + format = gdbarch_floatformat_for_type (gdbarch, name_hint, bits); + if (format) + type = init_float_type (objfile, bits, name, format, byte_order); + else + type = init_type (objfile, TYPE_CODE_ERROR, bits, name); + + return type; +} + +/* Allocate an integer type of size BITS and name NAME. */ + +static struct type * +dwarf2_init_integer_type (struct dwarf2_cu *cu, struct objfile *objfile, + int bits, int unsigned_p, const char *name) +{ + struct type *type; + + /* Versions of Intel's C Compiler generate an integer type called "void" + instead of using DW_TAG_unspecified_type. This has been seen on + at least versions 14, 17, and 18. */ + if (bits == 0 && producer_is_icc (cu) && name != nullptr + && strcmp (name, "void") == 0) + type = objfile_type (objfile)->builtin_void; + else + type = init_integer_type (objfile, bits, unsigned_p, name); + + return type; +} + +/* Initialise and return a floating point type of size BITS suitable for + use as a component of a complex number. The NAME_HINT is passed through + when initialising the floating point type and is the name of the complex + type. + + As DWARF doesn't currently provide an explicit name for the components + of a complex number, but it can be helpful to have these components + named, we try to select a suitable name based on the size of the + component. */ +static struct type * +dwarf2_init_complex_target_type (struct dwarf2_cu *cu, + struct objfile *objfile, + int bits, const char *name_hint, + enum bfd_endian byte_order) +{ + gdbarch *gdbarch = objfile->arch (); + struct type *tt = nullptr; + + /* Try to find a suitable floating point builtin type of size BITS. + We're going to use the name of this type as the name for the complex + target type that we are about to create. */ + switch (cu->language) + { + case language_fortran: + switch (bits) + { + case 32: + tt = builtin_f_type (gdbarch)->builtin_real; + break; + case 64: + tt = builtin_f_type (gdbarch)->builtin_real_s8; + break; + case 96: /* The x86-32 ABI specifies 96-bit long double. */ + case 128: + tt = builtin_f_type (gdbarch)->builtin_real_s16; + break; + } + break; + default: + switch (bits) + { + case 32: + tt = builtin_type (gdbarch)->builtin_float; + break; + case 64: + tt = builtin_type (gdbarch)->builtin_double; + break; + case 96: /* The x86-32 ABI specifies 96-bit long double. */ + case 128: + tt = builtin_type (gdbarch)->builtin_long_double; + break; + } + break; + } + + /* If the type we found doesn't match the size we were looking for, then + pretend we didn't find a type at all, the complex target type we + create will then be nameless. */ + if (tt != nullptr && TYPE_LENGTH (tt) * TARGET_CHAR_BIT != bits) + tt = nullptr; + + const char *name = (tt == nullptr) ? nullptr : tt->name (); + return dwarf2_init_float_type (objfile, bits, name, name_hint, byte_order); +} + +/* Find a representation of a given base type and install + it in the TYPE field of the die. */ + +static struct type * +read_base_type (struct die_info *die, struct dwarf2_cu *cu) +{ + struct objfile *objfile = cu->per_objfile->objfile; + struct type *type; + struct attribute *attr; + int encoding = 0, bits = 0; + const char *name; + gdbarch *arch; + + attr = dwarf2_attr (die, DW_AT_encoding, cu); + if (attr != nullptr) + encoding = DW_UNSND (attr); + attr = dwarf2_attr (die, DW_AT_byte_size, cu); + if (attr != nullptr) + bits = DW_UNSND (attr) * TARGET_CHAR_BIT; + name = dwarf2_name (die, cu); + if (!name) + complaint (_("DW_AT_name missing from DW_TAG_base_type")); + + arch = objfile->arch (); + enum bfd_endian byte_order = gdbarch_byte_order (arch); + + attr = dwarf2_attr (die, DW_AT_endianity, cu); + if (attr) + { + int endianity = DW_UNSND (attr); + + switch (endianity) + { + case DW_END_big: + byte_order = BFD_ENDIAN_BIG; + break; + case DW_END_little: + byte_order = BFD_ENDIAN_LITTLE; + break; + default: + complaint (_("DW_AT_endianity has unrecognized value %d"), endianity); + break; + } + } + + switch (encoding) + { + case DW_ATE_address: + /* Turn DW_ATE_address into a void * pointer. */ + type = init_type (objfile, TYPE_CODE_VOID, TARGET_CHAR_BIT, NULL); + type = init_pointer_type (objfile, bits, name, type); + break; + case DW_ATE_boolean: + type = init_boolean_type (objfile, bits, 1, name); + break; + case DW_ATE_complex_float: + type = dwarf2_init_complex_target_type (cu, objfile, bits / 2, name, + byte_order); + if (type->code () == TYPE_CODE_ERROR) + { + if (name == nullptr) + { + struct obstack *obstack + = &cu->per_objfile->objfile->objfile_obstack; + name = obconcat (obstack, "_Complex ", type->name (), + nullptr); + } + type = init_type (objfile, TYPE_CODE_ERROR, bits, name); + } + else + type = init_complex_type (name, type); + break; + case DW_ATE_decimal_float: + type = init_decfloat_type (objfile, bits, name); + break; + case DW_ATE_float: + type = dwarf2_init_float_type (objfile, bits, name, name, byte_order); + break; + case DW_ATE_signed: + type = dwarf2_init_integer_type (cu, objfile, bits, 0, name); + break; + case DW_ATE_unsigned: + if (cu->language == language_fortran + && name + && startswith (name, "character(")) + type = init_character_type (objfile, bits, 1, name); + else + type = dwarf2_init_integer_type (cu, objfile, bits, 1, name); + break; + case DW_ATE_signed_char: + if (cu->language == language_ada || cu->language == language_m2 + || cu->language == language_pascal + || cu->language == language_fortran) + type = init_character_type (objfile, bits, 0, name); + else + type = dwarf2_init_integer_type (cu, objfile, bits, 0, name); + break; + case DW_ATE_unsigned_char: + if (cu->language == language_ada || cu->language == language_m2 + || cu->language == language_pascal + || cu->language == language_fortran + || cu->language == language_rust) + type = init_character_type (objfile, bits, 1, name); + else + type = dwarf2_init_integer_type (cu, objfile, bits, 1, name); + break; + case DW_ATE_UTF: + { + if (bits == 16) + type = builtin_type (arch)->builtin_char16; + else if (bits == 32) + type = builtin_type (arch)->builtin_char32; + else + { + complaint (_("unsupported DW_ATE_UTF bit size: '%d'"), + bits); + type = dwarf2_init_integer_type (cu, objfile, bits, 1, name); + } + return set_die_type (die, type, cu); + } + break; + + default: + complaint (_("unsupported DW_AT_encoding: '%s'"), + dwarf_type_encoding_name (encoding)); + type = init_type (objfile, TYPE_CODE_ERROR, bits, name); + break; + } + + if (name && strcmp (name, "char") == 0) + TYPE_NOSIGN (type) = 1; + + maybe_set_alignment (cu, die, type); + + TYPE_ENDIANITY_NOT_DEFAULT (type) = gdbarch_byte_order (arch) != byte_order; + + return set_die_type (die, type, cu); +} + +/* Parse dwarf attribute if it's a block, reference or constant and put the + resulting value of the attribute into struct bound_prop. + Returns 1 if ATTR could be resolved into PROP, 0 otherwise. */ + +static int +attr_to_dynamic_prop (const struct attribute *attr, struct die_info *die, + struct dwarf2_cu *cu, struct dynamic_prop *prop, + struct type *default_type) +{ + struct dwarf2_property_baton *baton; + dwarf2_per_objfile *per_objfile = cu->per_objfile; + struct objfile *objfile = per_objfile->objfile; + struct obstack *obstack = &objfile->objfile_obstack; + + gdb_assert (default_type != NULL); + + if (attr == NULL || prop == NULL) + return 0; + + if (attr->form_is_block ()) + { + baton = XOBNEW (obstack, struct dwarf2_property_baton); + baton->property_type = default_type; + baton->locexpr.per_cu = cu->per_cu; + baton->locexpr.per_objfile = per_objfile; + baton->locexpr.size = DW_BLOCK (attr)->size; + baton->locexpr.data = DW_BLOCK (attr)->data; + switch (attr->name) + { + case DW_AT_string_length: + baton->locexpr.is_reference = true; + break; + default: + baton->locexpr.is_reference = false; + break; + } + + prop->set_locexpr (baton); + gdb_assert (prop->baton () != NULL); + } + else if (attr->form_is_ref ()) + { + struct dwarf2_cu *target_cu = cu; + struct die_info *target_die; + struct attribute *target_attr; + + target_die = follow_die_ref (die, attr, &target_cu); + target_attr = dwarf2_attr (target_die, DW_AT_location, target_cu); + if (target_attr == NULL) + target_attr = dwarf2_attr (target_die, DW_AT_data_member_location, + target_cu); + if (target_attr == NULL) + return 0; + + switch (target_attr->name) + { + case DW_AT_location: + if (target_attr->form_is_section_offset ()) + { + baton = XOBNEW (obstack, struct dwarf2_property_baton); + baton->property_type = die_type (target_die, target_cu); + fill_in_loclist_baton (cu, &baton->loclist, target_attr); + prop->set_loclist (baton); + gdb_assert (prop->baton () != NULL); + } + else if (target_attr->form_is_block ()) + { + baton = XOBNEW (obstack, struct dwarf2_property_baton); + baton->property_type = die_type (target_die, target_cu); + baton->locexpr.per_cu = cu->per_cu; + baton->locexpr.per_objfile = per_objfile; + baton->locexpr.size = DW_BLOCK (target_attr)->size; + baton->locexpr.data = DW_BLOCK (target_attr)->data; + baton->locexpr.is_reference = true; + prop->set_locexpr (baton); + gdb_assert (prop->baton () != NULL); + } + else + { + dwarf2_invalid_attrib_class_complaint ("DW_AT_location", + "dynamic property"); + return 0; + } + break; + case DW_AT_data_member_location: + { + LONGEST offset; + + if (!handle_data_member_location (target_die, target_cu, + &offset)) + return 0; + + baton = XOBNEW (obstack, struct dwarf2_property_baton); + baton->property_type = read_type_die (target_die->parent, + target_cu); + baton->offset_info.offset = offset; + baton->offset_info.type = die_type (target_die, target_cu); + prop->set_addr_offset (baton); + break; + } + } + } + else if (attr->form_is_constant ()) + prop->set_const_val (attr->constant_value (0)); + else + { + dwarf2_invalid_attrib_class_complaint (dwarf_form_name (attr->form), + dwarf2_name (die, cu)); + return 0; + } + + return 1; +} + +/* See read.h. */ + +struct type * +dwarf2_per_objfile::int_type (int size_in_bytes, bool unsigned_p) const +{ + struct type *int_type; + + /* Helper macro to examine the various builtin types. */ +#define TRY_TYPE(F) \ + int_type = (unsigned_p \ + ? objfile_type (objfile)->builtin_unsigned_ ## F \ + : objfile_type (objfile)->builtin_ ## F); \ + if (int_type != NULL && TYPE_LENGTH (int_type) == size_in_bytes) \ + return int_type + + TRY_TYPE (char); + TRY_TYPE (short); + TRY_TYPE (int); + TRY_TYPE (long); + TRY_TYPE (long_long); + +#undef TRY_TYPE + + gdb_assert_not_reached ("unable to find suitable integer type"); +} + +/* See read.h. */ + +struct type * +dwarf2_cu::addr_sized_int_type (bool unsigned_p) const +{ + int addr_size = this->per_cu->addr_size (); + return this->per_objfile->int_type (addr_size, unsigned_p); +} + +/* Read the DW_AT_type attribute for a sub-range. If this attribute is not + present (which is valid) then compute the default type based on the + compilation units address size. */ + +static struct type * +read_subrange_index_type (struct die_info *die, struct dwarf2_cu *cu) +{ + struct type *index_type = die_type (die, cu); + + /* Dwarf-2 specifications explicitly allows to create subrange types + without specifying a base type. + In that case, the base type must be set to the type of + the lower bound, upper bound or count, in that order, if any of these + three attributes references an object that has a type. + If no base type is found, the Dwarf-2 specifications say that + a signed integer type of size equal to the size of an address should + be used. + For the following C code: `extern char gdb_int [];' + GCC produces an empty range DIE. + FIXME: muller/2010-05-28: Possible references to object for low bound, + high bound or count are not yet handled by this code. */ + if (index_type->code () == TYPE_CODE_VOID) + index_type = cu->addr_sized_int_type (false); + + return index_type; +} + +/* Read the given DW_AT_subrange DIE. */ + +static struct type * +read_subrange_type (struct die_info *die, struct dwarf2_cu *cu) +{ + struct type *base_type, *orig_base_type; + struct type *range_type; + struct attribute *attr; + struct dynamic_prop low, high; + int low_default_is_valid; + int high_bound_is_count = 0; + const char *name; + ULONGEST negative_mask; + + orig_base_type = read_subrange_index_type (die, cu); + + /* If ORIG_BASE_TYPE is a typedef, it will not be TYPE_UNSIGNED, + whereas the real type might be. So, we use ORIG_BASE_TYPE when + creating the range type, but we use the result of check_typedef + when examining properties of the type. */ + base_type = check_typedef (orig_base_type); + + /* The die_type call above may have already set the type for this DIE. */ + range_type = get_die_type (die, cu); + if (range_type) + return range_type; + + high.set_const_val (0); + + /* Set LOW_DEFAULT_IS_VALID if current language and DWARF version allow + omitting DW_AT_lower_bound. */ + switch (cu->language) + { + case language_c: + case language_cplus: + low.set_const_val (0); + low_default_is_valid = 1; + break; + case language_fortran: + low.set_const_val (1); + low_default_is_valid = 1; + break; + case language_d: + case language_objc: + case language_rust: + low.set_const_val (0); + low_default_is_valid = (cu->header.version >= 4); + break; + case language_ada: + case language_m2: + case language_pascal: + low.set_const_val (1); + low_default_is_valid = (cu->header.version >= 4); + break; + default: + low.set_const_val (0); + low_default_is_valid = 0; + break; + } + + attr = dwarf2_attr (die, DW_AT_lower_bound, cu); + if (attr != nullptr) + attr_to_dynamic_prop (attr, die, cu, &low, base_type); + else if (!low_default_is_valid) + complaint (_("Missing DW_AT_lower_bound " + "- DIE at %s [in module %s]"), + sect_offset_str (die->sect_off), + objfile_name (cu->per_objfile->objfile)); + + struct attribute *attr_ub, *attr_count; + attr = attr_ub = dwarf2_attr (die, DW_AT_upper_bound, cu); + if (!attr_to_dynamic_prop (attr, die, cu, &high, base_type)) + { + attr = attr_count = dwarf2_attr (die, DW_AT_count, cu); + if (attr_to_dynamic_prop (attr, die, cu, &high, base_type)) + { + /* If bounds are constant do the final calculation here. */ + if (low.kind () == PROP_CONST && high.kind () == PROP_CONST) + high.set_const_val (low.const_val () + high.const_val () - 1); + else + high_bound_is_count = 1; + } + else + { + if (attr_ub != NULL) + complaint (_("Unresolved DW_AT_upper_bound " + "- DIE at %s [in module %s]"), + sect_offset_str (die->sect_off), + objfile_name (cu->per_objfile->objfile)); + if (attr_count != NULL) + complaint (_("Unresolved DW_AT_count " + "- DIE at %s [in module %s]"), + sect_offset_str (die->sect_off), + objfile_name (cu->per_objfile->objfile)); + } + } + + LONGEST bias = 0; + struct attribute *bias_attr = dwarf2_attr (die, DW_AT_GNU_bias, cu); + if (bias_attr != nullptr && bias_attr->form_is_constant ()) + bias = bias_attr->constant_value (0); + + /* 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 << (TYPE_LENGTH (base_type) * TARGET_CHAR_BIT - 1)); + if (low.kind () == PROP_CONST + && !TYPE_UNSIGNED (base_type) && (low.const_val () & negative_mask)) + low.set_const_val (low.const_val () | negative_mask); + if (high.kind () == PROP_CONST + && !TYPE_UNSIGNED (base_type) && (high.const_val () & negative_mask)) + high.set_const_val (high.const_val () | negative_mask); + + /* Check for bit and byte strides. */ + struct dynamic_prop byte_stride_prop; + attribute *attr_byte_stride = dwarf2_attr (die, DW_AT_byte_stride, cu); + if (attr_byte_stride != nullptr) + { + struct type *prop_type = cu->addr_sized_int_type (false); + attr_to_dynamic_prop (attr_byte_stride, die, cu, &byte_stride_prop, + prop_type); + } + + struct dynamic_prop bit_stride_prop; + attribute *attr_bit_stride = dwarf2_attr (die, DW_AT_bit_stride, cu); + if (attr_bit_stride != nullptr) + { + /* It only makes sense to have either a bit or byte stride. */ + if (attr_byte_stride != nullptr) + { + complaint (_("Found DW_AT_bit_stride and DW_AT_byte_stride " + "- DIE at %s [in module %s]"), + sect_offset_str (die->sect_off), + objfile_name (cu->per_objfile->objfile)); + attr_bit_stride = nullptr; + } + else + { + struct type *prop_type = cu->addr_sized_int_type (false); + attr_to_dynamic_prop (attr_bit_stride, die, cu, &bit_stride_prop, + prop_type); + } + } + + if (attr_byte_stride != nullptr + || attr_bit_stride != nullptr) + { + bool byte_stride_p = (attr_byte_stride != nullptr); + struct dynamic_prop *stride + = byte_stride_p ? &byte_stride_prop : &bit_stride_prop; + + range_type + = create_range_type_with_stride (NULL, orig_base_type, &low, + &high, bias, stride, byte_stride_p); + } + else + range_type = create_range_type (NULL, orig_base_type, &low, &high, bias); + + if (high_bound_is_count) + range_type->bounds ()->flag_upper_bound_is_count = 1; + + /* Ada expects an empty array on no boundary attributes. */ + if (attr == NULL && cu->language != language_ada) + range_type->bounds ()->high.set_undefined (); + + name = dwarf2_name (die, cu); + if (name) + range_type->set_name (name); + + attr = dwarf2_attr (die, DW_AT_byte_size, cu); + if (attr != nullptr) + TYPE_LENGTH (range_type) = DW_UNSND (attr); + + maybe_set_alignment (cu, die, range_type); + + set_die_type (die, range_type, cu); + + /* set_die_type should be already done. */ + set_descriptive_type (range_type, die, cu); + + return range_type; +} + +static struct type * +read_unspecified_type (struct die_info *die, struct dwarf2_cu *cu) +{ + struct type *type; + + type = init_type (cu->per_objfile->objfile, TYPE_CODE_VOID, 0, NULL); + type->set_name (dwarf2_name (die, cu)); + + /* In Ada, an unspecified type is typically used when the description + of the type is deferred to a different unit. When encountering + such a type, we treat it as a stub, and try to resolve it later on, + when needed. */ + if (cu->language == language_ada) + TYPE_STUB (type) = 1; + + return set_die_type (die, type, cu); +} + +/* Read a single die and all its descendents. Set the die's sibling + field to NULL; set other fields in the die correctly, and set all + of the descendents' fields correctly. Set *NEW_INFO_PTR to the + location of the info_ptr after reading all of those dies. PARENT + is the parent of the die in question. */ + +static struct die_info * +read_die_and_children (const struct die_reader_specs *reader, + const gdb_byte *info_ptr, + const gdb_byte **new_info_ptr, + struct die_info *parent) +{ + struct die_info *die; + const gdb_byte *cur_ptr; + + cur_ptr = read_full_die_1 (reader, &die, info_ptr, 0); + if (die == NULL) + { + *new_info_ptr = cur_ptr; + return NULL; + } + store_in_ref_table (die, reader->cu); + + if (die->has_children) + die->child = read_die_and_siblings_1 (reader, cur_ptr, new_info_ptr, die); + else + { + die->child = NULL; + *new_info_ptr = cur_ptr; + } + + die->sibling = NULL; + die->parent = parent; + return die; +} + +/* Read a die, all of its descendents, and all of its siblings; set + all of the fields of all of the dies correctly. Arguments are as + in read_die_and_children. */ + +static struct die_info * +read_die_and_siblings_1 (const struct die_reader_specs *reader, + const gdb_byte *info_ptr, + const gdb_byte **new_info_ptr, + struct die_info *parent) +{ + struct die_info *first_die, *last_sibling; + const gdb_byte *cur_ptr; + + cur_ptr = info_ptr; + first_die = last_sibling = NULL; + + while (1) + { + struct die_info *die + = read_die_and_children (reader, cur_ptr, &cur_ptr, parent); + + if (die == NULL) + { + *new_info_ptr = cur_ptr; + return first_die; + } + + if (!first_die) + first_die = die; + else + last_sibling->sibling = die; + + last_sibling = die; + } +} + +/* Read a die, all of its descendents, and all of its siblings; set + all of the fields of all of the dies correctly. Arguments are as + in read_die_and_children. + This the main entry point for reading a DIE and all its children. */ + +static struct die_info * +read_die_and_siblings (const struct die_reader_specs *reader, + const gdb_byte *info_ptr, + const gdb_byte **new_info_ptr, + struct die_info *parent) +{ + struct die_info *die = read_die_and_siblings_1 (reader, info_ptr, + new_info_ptr, parent); + + if (dwarf_die_debug) + { + fprintf_unfiltered (gdb_stdlog, + "Read die from %s@0x%x of %s:\n", + reader->die_section->get_name (), + (unsigned) (info_ptr - reader->die_section->buffer), + bfd_get_filename (reader->abfd)); + dump_die (die, dwarf_die_debug); + } + + return die; +} + +/* Read a die and all its attributes, leave space for NUM_EXTRA_ATTRS + attributes. + The caller is responsible for filling in the extra attributes + and updating (*DIEP)->num_attrs. + Set DIEP to point to a newly allocated die with its information, + except for its child, sibling, and parent fields. */ + +static const gdb_byte * +read_full_die_1 (const struct die_reader_specs *reader, + struct die_info **diep, const gdb_byte *info_ptr, + int num_extra_attrs) +{ + unsigned int abbrev_number, bytes_read, i; + struct abbrev_info *abbrev; + struct die_info *die; + struct dwarf2_cu *cu = reader->cu; + bfd *abfd = reader->abfd; + + sect_offset sect_off = (sect_offset) (info_ptr - reader->buffer); + abbrev_number = read_unsigned_leb128 (abfd, info_ptr, &bytes_read); + info_ptr += bytes_read; + if (!abbrev_number) + { + *diep = NULL; + return info_ptr; + } + + abbrev = reader->abbrev_table->lookup_abbrev (abbrev_number); + if (!abbrev) + error (_("Dwarf Error: could not find abbrev number %d [in module %s]"), + abbrev_number, + bfd_get_filename (abfd)); + + die = dwarf_alloc_die (cu, abbrev->num_attrs + num_extra_attrs); + die->sect_off = sect_off; + die->tag = abbrev->tag; + die->abbrev = abbrev_number; + die->has_children = abbrev->has_children; + + /* Make the result usable. + The caller needs to update num_attrs after adding the extra + attributes. */ + die->num_attrs = abbrev->num_attrs; + + std::vector<int> indexes_that_need_reprocess; + for (i = 0; i < abbrev->num_attrs; ++i) + { + bool need_reprocess; + info_ptr = + read_attribute (reader, &die->attrs[i], &abbrev->attrs[i], + info_ptr, &need_reprocess); + if (need_reprocess) + indexes_that_need_reprocess.push_back (i); + } + + struct attribute *attr = die->attr (DW_AT_str_offsets_base); + if (attr != nullptr) + cu->str_offsets_base = DW_UNSND (attr); + + attr = die->attr (DW_AT_loclists_base); + if (attr != nullptr) + cu->loclist_base = DW_UNSND (attr); + + auto maybe_addr_base = die->addr_base (); + if (maybe_addr_base.has_value ()) + cu->addr_base = *maybe_addr_base; + + attr = die->attr (DW_AT_rnglists_base); + if (attr != nullptr) + cu->ranges_base = DW_UNSND (attr); + + for (int index : indexes_that_need_reprocess) + read_attribute_reprocess (reader, &die->attrs[index], die->tag); + *diep = die; + return info_ptr; +} + +/* Read a die and all its attributes. + Set DIEP to point to a newly allocated die with its information, + except for its child, sibling, and parent fields. */ + +static const gdb_byte * +read_full_die (const struct die_reader_specs *reader, + struct die_info **diep, const gdb_byte *info_ptr) +{ + const gdb_byte *result; + + result = read_full_die_1 (reader, diep, info_ptr, 0); + + if (dwarf_die_debug) + { + fprintf_unfiltered (gdb_stdlog, + "Read die from %s@0x%x of %s:\n", + reader->die_section->get_name (), + (unsigned) (info_ptr - reader->die_section->buffer), + bfd_get_filename (reader->abfd)); + dump_die (*diep, dwarf_die_debug); + } + + return result; +} + + +/* Returns nonzero if TAG represents a type that we might generate a partial + symbol for. */ + +static int +is_type_tag_for_partial (int tag) +{ + switch (tag) + { +#if 0 + /* Some types that would be reasonable to generate partial symbols for, + that we don't at present. */ + case DW_TAG_array_type: + case DW_TAG_file_type: + case DW_TAG_ptr_to_member_type: + case DW_TAG_set_type: + case DW_TAG_string_type: + case DW_TAG_subroutine_type: +#endif + case DW_TAG_base_type: + case DW_TAG_class_type: + case DW_TAG_interface_type: + case DW_TAG_enumeration_type: + case DW_TAG_structure_type: + case DW_TAG_subrange_type: + case DW_TAG_typedef: + case DW_TAG_union_type: + return 1; + default: + return 0; + } +} + +/* Load all DIEs that are interesting for partial symbols into memory. */ + +static struct partial_die_info * +load_partial_dies (const struct die_reader_specs *reader, + const gdb_byte *info_ptr, int building_psymtab) +{ + struct dwarf2_cu *cu = reader->cu; + struct objfile *objfile = cu->per_objfile->objfile; + struct partial_die_info *parent_die, *last_die, *first_die = NULL; + unsigned int bytes_read; + unsigned int load_all = 0; + int nesting_level = 1; + + parent_die = NULL; + last_die = NULL; + + gdb_assert (cu->per_cu != NULL); + if (cu->per_cu->load_all_dies) + load_all = 1; + + cu->partial_dies + = htab_create_alloc_ex (cu->header.length / 12, + partial_die_hash, + partial_die_eq, + NULL, + &cu->comp_unit_obstack, + hashtab_obstack_allocate, + dummy_obstack_deallocate); + + while (1) + { + abbrev_info *abbrev = peek_die_abbrev (*reader, info_ptr, &bytes_read); + + /* A NULL abbrev means the end of a series of children. */ + if (abbrev == NULL) + { + if (--nesting_level == 0) + return first_die; + + info_ptr += bytes_read; + last_die = parent_die; + parent_die = parent_die->die_parent; + continue; + } + + /* Check for template arguments. We never save these; if + they're seen, we just mark the parent, and go on our way. */ + if (parent_die != NULL + && cu->language == language_cplus + && (abbrev->tag == DW_TAG_template_type_param + || abbrev->tag == DW_TAG_template_value_param)) + { + parent_die->has_template_arguments = 1; + + if (!load_all) + { + /* We don't need a partial DIE for the template argument. */ + info_ptr = skip_one_die (reader, info_ptr + bytes_read, abbrev); + continue; + } + } + + /* We only recurse into c++ subprograms looking for template arguments. + Skip their other children. */ + if (!load_all + && cu->language == language_cplus + && parent_die != NULL + && parent_die->tag == DW_TAG_subprogram + && abbrev->tag != DW_TAG_inlined_subroutine) + { + info_ptr = skip_one_die (reader, info_ptr + bytes_read, abbrev); + continue; + } + + /* Check whether this DIE is interesting enough to save. Normally + we would not be interested in members here, but there may be + later variables referencing them via DW_AT_specification (for + static members). */ + if (!load_all + && !is_type_tag_for_partial (abbrev->tag) + && abbrev->tag != DW_TAG_constant + && abbrev->tag != DW_TAG_enumerator + && abbrev->tag != DW_TAG_subprogram + && abbrev->tag != DW_TAG_inlined_subroutine + && abbrev->tag != DW_TAG_lexical_block + && abbrev->tag != DW_TAG_variable + && abbrev->tag != DW_TAG_namespace + && abbrev->tag != DW_TAG_module + && abbrev->tag != DW_TAG_member + && abbrev->tag != DW_TAG_imported_unit + && abbrev->tag != DW_TAG_imported_declaration) + { + /* Otherwise we skip to the next sibling, if any. */ + info_ptr = skip_one_die (reader, info_ptr + bytes_read, abbrev); + continue; + } + + struct partial_die_info pdi ((sect_offset) (info_ptr - reader->buffer), + abbrev); + + info_ptr = pdi.read (reader, *abbrev, info_ptr + bytes_read); + + /* This two-pass algorithm for processing partial symbols has a + high cost in cache pressure. Thus, handle some simple cases + here which cover the majority of C partial symbols. DIEs + which neither have specification tags in them, nor could have + specification tags elsewhere pointing at them, can simply be + processed and discarded. + + This segment is also optional; scan_partial_symbols and + add_partial_symbol will handle these DIEs if we chain + them in normally. When compilers which do not emit large + quantities of duplicate debug information are more common, + this code can probably be removed. */ + + /* Any complete simple types at the top level (pretty much all + of them, for a language without namespaces), can be processed + directly. */ + if (parent_die == NULL + && pdi.has_specification == 0 + && pdi.is_declaration == 0 + && ((pdi.tag == DW_TAG_typedef && !pdi.has_children) + || pdi.tag == DW_TAG_base_type + || pdi.tag == DW_TAG_subrange_type)) + { + if (building_psymtab && pdi.raw_name != NULL) + add_partial_symbol (&pdi, cu); + + info_ptr = locate_pdi_sibling (reader, &pdi, info_ptr); + continue; + } + + /* The exception for DW_TAG_typedef with has_children above is + a workaround of GCC PR debug/47510. In the case of this complaint + type_name_or_error will error on such types later. + + GDB skipped children of DW_TAG_typedef by the shortcut above and then + it could not find the child DIEs referenced later, this is checked + above. In correct DWARF DW_TAG_typedef should have no children. */ + + if (pdi.tag == DW_TAG_typedef && pdi.has_children) + complaint (_("DW_TAG_typedef has childen - GCC PR debug/47510 bug " + "- DIE at %s [in module %s]"), + sect_offset_str (pdi.sect_off), objfile_name (objfile)); + + /* If we're at the second level, and we're an enumerator, and + our parent has no specification (meaning possibly lives in a + namespace elsewhere), then we can add the partial symbol now + instead of queueing it. */ + if (pdi.tag == DW_TAG_enumerator + && parent_die != NULL + && parent_die->die_parent == NULL + && parent_die->tag == DW_TAG_enumeration_type + && parent_die->has_specification == 0) + { + if (pdi.raw_name == NULL) + complaint (_("malformed enumerator DIE ignored")); + else if (building_psymtab) + add_partial_symbol (&pdi, cu); + + info_ptr = locate_pdi_sibling (reader, &pdi, info_ptr); + continue; + } + + struct partial_die_info *part_die + = new (&cu->comp_unit_obstack) partial_die_info (pdi); + + /* We'll save this DIE so link it in. */ + part_die->die_parent = parent_die; + part_die->die_sibling = NULL; + part_die->die_child = NULL; + + if (last_die && last_die == parent_die) + last_die->die_child = part_die; + else if (last_die) + last_die->die_sibling = part_die; + + last_die = part_die; + + if (first_die == NULL) + first_die = part_die; + + /* Maybe add the DIE to the hash table. Not all DIEs that we + find interesting need to be in the hash table, because we + also have the parent/sibling/child chains; only those that we + might refer to by offset later during partial symbol reading. + + For now this means things that might have be the target of a + DW_AT_specification, DW_AT_abstract_origin, or + DW_AT_extension. DW_AT_extension will refer only to + namespaces; DW_AT_abstract_origin refers to functions (and + many things under the function DIE, but we do not recurse + into function DIEs during partial symbol reading) and + possibly variables as well; DW_AT_specification refers to + declarations. Declarations ought to have the DW_AT_declaration + flag. It happens that GCC forgets to put it in sometimes, but + only for functions, not for types. + + Adding more things than necessary to the hash table is harmless + except for the performance cost. Adding too few will result in + wasted time in find_partial_die, when we reread the compilation + unit with load_all_dies set. */ + + if (load_all + || abbrev->tag == DW_TAG_constant + || abbrev->tag == DW_TAG_subprogram + || abbrev->tag == DW_TAG_variable + || abbrev->tag == DW_TAG_namespace + || part_die->is_declaration) + { + void **slot; + + slot = htab_find_slot_with_hash (cu->partial_dies, part_die, + to_underlying (part_die->sect_off), + INSERT); + *slot = part_die; + } + + /* For some DIEs we want to follow their children (if any). For C + we have no reason to follow the children of structures; for other + languages we have to, so that we can get at method physnames + to infer fully qualified class names, for DW_AT_specification, + and for C++ template arguments. For C++, we also look one level + inside functions to find template arguments (if the name of the + function does not already contain the template arguments). + + For Ada and Fortran, we need to scan the children of subprograms + and lexical blocks as well because these languages allow the + definition of nested entities that could be interesting for the + debugger, such as nested subprograms for instance. */ + if (last_die->has_children + && (load_all + || last_die->tag == DW_TAG_namespace + || last_die->tag == DW_TAG_module + || last_die->tag == DW_TAG_enumeration_type + || (cu->language == language_cplus + && last_die->tag == DW_TAG_subprogram + && (last_die->raw_name == NULL + || strchr (last_die->raw_name, '<') == NULL)) + || (cu->language != language_c + && (last_die->tag == DW_TAG_class_type + || last_die->tag == DW_TAG_interface_type + || last_die->tag == DW_TAG_structure_type + || last_die->tag == DW_TAG_union_type)) + || ((cu->language == language_ada + || cu->language == language_fortran) + && (last_die->tag == DW_TAG_subprogram + || last_die->tag == DW_TAG_lexical_block)))) + { + nesting_level++; + parent_die = last_die; + continue; + } + + /* Otherwise we skip to the next sibling, if any. */ + info_ptr = locate_pdi_sibling (reader, last_die, info_ptr); + + /* Back to the top, do it again. */ + } +} + +partial_die_info::partial_die_info (sect_offset sect_off_, + struct abbrev_info *abbrev) + : partial_die_info (sect_off_, abbrev->tag, abbrev->has_children) +{ +} + +/* See class definition. */ + +const char * +partial_die_info::name (dwarf2_cu *cu) +{ + if (!canonical_name && raw_name != nullptr) + { + struct objfile *objfile = cu->per_objfile->objfile; + raw_name = dwarf2_canonicalize_name (raw_name, cu, objfile); + canonical_name = 1; + } + + return raw_name; +} + +/* Read a minimal amount of information into the minimal die structure. + INFO_PTR should point just after the initial uleb128 of a DIE. */ + +const gdb_byte * +partial_die_info::read (const struct die_reader_specs *reader, + const struct abbrev_info &abbrev, const gdb_byte *info_ptr) +{ + struct dwarf2_cu *cu = reader->cu; + dwarf2_per_objfile *per_objfile = cu->per_objfile; + unsigned int i; + int has_low_pc_attr = 0; + int has_high_pc_attr = 0; + int high_pc_relative = 0; + + for (i = 0; i < abbrev.num_attrs; ++i) + { + attribute attr; + bool need_reprocess; + info_ptr = read_attribute (reader, &attr, &abbrev.attrs[i], + info_ptr, &need_reprocess); + /* String and address offsets that need to do the reprocessing have + already been read at this point, so there is no need to wait until + the loop terminates to do the reprocessing. */ + if (need_reprocess) + read_attribute_reprocess (reader, &attr, tag); + /* Store the data if it is of an attribute we want to keep in a + partial symbol table. */ + switch (attr.name) + { + case DW_AT_name: + switch (tag) + { + case DW_TAG_compile_unit: + case DW_TAG_partial_unit: + case DW_TAG_type_unit: + /* Compilation units have a DW_AT_name that is a filename, not + a source language identifier. */ + case DW_TAG_enumeration_type: + case DW_TAG_enumerator: + /* These tags always have simple identifiers already; no need + to canonicalize them. */ + canonical_name = 1; + raw_name = DW_STRING (&attr); + break; + default: + canonical_name = 0; + raw_name = DW_STRING (&attr); + break; + } + break; + case DW_AT_linkage_name: + case DW_AT_MIPS_linkage_name: + /* Note that both forms of linkage name might appear. We + assume they will be the same, and we only store the last + one we see. */ + linkage_name = attr.value_as_string (); + /* rustc emits invalid values for DW_AT_linkage_name. Ignore these. + See https://github.com/rust-lang/rust/issues/32925. */ + if (cu->language == language_rust && linkage_name != NULL + && strchr (linkage_name, '{') != NULL) + linkage_name = NULL; + break; + case DW_AT_low_pc: + has_low_pc_attr = 1; + lowpc = attr.value_as_address (); + break; + case DW_AT_high_pc: + has_high_pc_attr = 1; + highpc = attr.value_as_address (); + if (cu->header.version >= 4 && attr.form_is_constant ()) + high_pc_relative = 1; + break; + case DW_AT_location: + /* Support the .debug_loc offsets. */ + if (attr.form_is_block ()) + { + d.locdesc = DW_BLOCK (&attr); + } + else if (attr.form_is_section_offset ()) + { + dwarf2_complex_location_expr_complaint (); + } + else + { + dwarf2_invalid_attrib_class_complaint ("DW_AT_location", + "partial symbol information"); + } + break; + case DW_AT_external: + is_external = DW_UNSND (&attr); + break; + case DW_AT_declaration: + is_declaration = DW_UNSND (&attr); + break; + case DW_AT_type: + has_type = 1; + break; + case DW_AT_abstract_origin: + case DW_AT_specification: + case DW_AT_extension: + has_specification = 1; + spec_offset = attr.get_ref_die_offset (); + spec_is_dwz = (attr.form == DW_FORM_GNU_ref_alt + || cu->per_cu->is_dwz); + break; + case DW_AT_sibling: + /* Ignore absolute siblings, they might point outside of + the current compile unit. */ + if (attr.form == DW_FORM_ref_addr) + complaint (_("ignoring absolute DW_AT_sibling")); + else + { + const gdb_byte *buffer = reader->buffer; + sect_offset off = attr.get_ref_die_offset (); + const gdb_byte *sibling_ptr = buffer + to_underlying (off); + + if (sibling_ptr < info_ptr) + complaint (_("DW_AT_sibling points backwards")); + else if (sibling_ptr > reader->buffer_end) + reader->die_section->overflow_complaint (); + else + sibling = sibling_ptr; + } + break; + case DW_AT_byte_size: + has_byte_size = 1; + break; + case DW_AT_const_value: + has_const_value = 1; + break; + case DW_AT_calling_convention: + /* DWARF doesn't provide a way to identify a program's source-level + entry point. DW_AT_calling_convention attributes are only meant + to describe functions' calling conventions. + + However, because it's a necessary piece of information in + Fortran, and before DWARF 4 DW_CC_program was the only + piece of debugging information whose definition refers to + a 'main program' at all, several compilers marked Fortran + main programs with DW_CC_program --- even when those + functions use the standard calling conventions. + + Although DWARF now specifies a way to provide this + information, we support this practice for backward + compatibility. */ + if (DW_UNSND (&attr) == DW_CC_program + && cu->language == language_fortran) + main_subprogram = 1; + break; + case DW_AT_inline: + if (DW_UNSND (&attr) == DW_INL_inlined + || DW_UNSND (&attr) == DW_INL_declared_inlined) + may_be_inlined = 1; + break; + + case DW_AT_import: + if (tag == DW_TAG_imported_unit) + { + d.sect_off = attr.get_ref_die_offset (); + is_dwz = (attr.form == DW_FORM_GNU_ref_alt + || cu->per_cu->is_dwz); + } + break; + + case DW_AT_main_subprogram: + main_subprogram = DW_UNSND (&attr); + break; + + case DW_AT_ranges: + { + /* DW_AT_rnglists_base does not apply to DIEs from the DWO + skeleton. We take advantage of the fact the DW_AT_ranges + does not appear in DW_TAG_compile_unit of DWO files. + + Attributes of the form DW_FORM_rnglistx have already had + their value changed by read_rnglist_index and already + include DW_AT_rnglists_base, so don't need to add the ranges + base, either. */ + int need_ranges_base = (tag != DW_TAG_compile_unit + && attr.form != DW_FORM_rnglistx); + unsigned int ranges_offset = (DW_UNSND (&attr) + + (need_ranges_base + ? cu->ranges_base + : 0)); + + /* Value of the DW_AT_ranges attribute is the offset in the + .debug_ranges section. */ + if (dwarf2_ranges_read (ranges_offset, &lowpc, &highpc, cu, + nullptr, tag)) + has_pc_info = 1; + } + break; + + default: + break; + } + } + + /* For Ada, if both the name and the linkage name appear, we prefer + the latter. This lets "catch exception" work better, regardless + of the order in which the name and linkage name were emitted. + Really, though, this is just a workaround for the fact that gdb + doesn't store both the name and the linkage name. */ + if (cu->language == language_ada && linkage_name != nullptr) + raw_name = linkage_name; + + if (high_pc_relative) + highpc += lowpc; + + if (has_low_pc_attr && has_high_pc_attr) + { + /* When using the GNU linker, .gnu.linkonce. sections are used to + eliminate duplicate copies of functions and vtables and such. + The linker will arbitrarily choose one and discard the others. + The AT_*_pc values for such functions refer to local labels in + these sections. If the section from that file was discarded, the + labels are not in the output, so the relocs get a value of 0. + If this is a discarded function, mark the pc bounds as invalid, + so that GDB will ignore it. */ + if (lowpc == 0 && !per_objfile->per_bfd->has_section_at_zero) + { + struct objfile *objfile = per_objfile->objfile; + struct gdbarch *gdbarch = objfile->arch (); + + complaint (_("DW_AT_low_pc %s is zero " + "for DIE at %s [in module %s]"), + paddress (gdbarch, lowpc), + sect_offset_str (sect_off), + objfile_name (objfile)); + } + /* dwarf2_get_pc_bounds has also the strict low < high requirement. */ + else if (lowpc >= highpc) + { + struct objfile *objfile = per_objfile->objfile; + struct gdbarch *gdbarch = objfile->arch (); + + complaint (_("DW_AT_low_pc %s is not < DW_AT_high_pc %s " + "for DIE at %s [in module %s]"), + paddress (gdbarch, lowpc), + paddress (gdbarch, highpc), + sect_offset_str (sect_off), + objfile_name (objfile)); + } + else + has_pc_info = 1; + } + + return info_ptr; +} + +/* Find a cached partial DIE at OFFSET in CU. */ + +struct partial_die_info * +dwarf2_cu::find_partial_die (sect_offset sect_off) +{ + struct partial_die_info *lookup_die = NULL; + struct partial_die_info part_die (sect_off); + + lookup_die = ((struct partial_die_info *) + htab_find_with_hash (partial_dies, &part_die, + to_underlying (sect_off))); + + return lookup_die; +} + +/* Find a partial DIE at OFFSET, which may or may not be in CU, + except in the case of .debug_types DIEs which do not reference + outside their CU (they do however referencing other types via + DW_FORM_ref_sig8). */ + +static const struct cu_partial_die_info +find_partial_die (sect_offset sect_off, int offset_in_dwz, struct dwarf2_cu *cu) +{ + dwarf2_per_objfile *per_objfile = cu->per_objfile; + struct objfile *objfile = per_objfile->objfile; + struct partial_die_info *pd = NULL; + + if (offset_in_dwz == cu->per_cu->is_dwz + && cu->header.offset_in_cu_p (sect_off)) + { + pd = cu->find_partial_die (sect_off); + if (pd != NULL) + return { cu, pd }; + /* We missed recording what we needed. + Load all dies and try again. */ + } + else + { + /* TUs don't reference other CUs/TUs (except via type signatures). */ + if (cu->per_cu->is_debug_types) + { + error (_("Dwarf Error: Type Unit at offset %s contains" + " external reference to offset %s [in module %s].\n"), + sect_offset_str (cu->header.sect_off), sect_offset_str (sect_off), + bfd_get_filename (objfile->obfd)); + } + dwarf2_per_cu_data *per_cu + = dwarf2_find_containing_comp_unit (sect_off, offset_in_dwz, + per_objfile); + + cu = per_objfile->get_cu (per_cu); + if (cu == NULL || cu->partial_dies == NULL) + load_partial_comp_unit (per_cu, per_objfile, nullptr); + + cu = per_objfile->get_cu (per_cu); + + cu->last_used = 0; + pd = cu->find_partial_die (sect_off); + } + + /* If we didn't find it, and not all dies have been loaded, + load them all and try again. */ + + if (pd == NULL && cu->per_cu->load_all_dies == 0) + { + cu->per_cu->load_all_dies = 1; + + /* This is nasty. When we reread the DIEs, somewhere up the call chain + THIS_CU->cu may already be in use. So we can't just free it and + replace its DIEs with the ones we read in. Instead, we leave those + DIEs alone (which can still be in use, e.g. in scan_partial_symbols), + and clobber THIS_CU->cu->partial_dies with the hash table for the new + set. */ + load_partial_comp_unit (cu->per_cu, per_objfile, cu); + + pd = cu->find_partial_die (sect_off); + } + + if (pd == NULL) + error (_("Dwarf Error: Cannot not find DIE at %s [from module %s]\n"), + sect_offset_str (sect_off), bfd_get_filename (objfile->obfd)); + return { cu, pd }; +} + +/* See if we can figure out if the class lives in a namespace. We do + this by looking for a member function; its demangled name will + contain namespace info, if there is any. */ + +static void +guess_partial_die_structure_name (struct partial_die_info *struct_pdi, + struct dwarf2_cu *cu) +{ + /* NOTE: carlton/2003-10-07: Getting the info this way changes + what template types look like, because the demangler + frequently doesn't give the same name as the debug info. We + could fix this by only using the demangled name to get the + prefix (but see comment in read_structure_type). */ + + struct partial_die_info *real_pdi; + struct partial_die_info *child_pdi; + + /* If this DIE (this DIE's specification, if any) has a parent, then + we should not do this. We'll prepend the parent's fully qualified + name when we create the partial symbol. */ + + real_pdi = struct_pdi; + while (real_pdi->has_specification) + { + auto res = find_partial_die (real_pdi->spec_offset, + real_pdi->spec_is_dwz, cu); + real_pdi = res.pdi; + cu = res.cu; + } + + if (real_pdi->die_parent != NULL) + return; + + for (child_pdi = struct_pdi->die_child; + child_pdi != NULL; + child_pdi = child_pdi->die_sibling) + { + if (child_pdi->tag == DW_TAG_subprogram + && child_pdi->linkage_name != NULL) + { + gdb::unique_xmalloc_ptr<char> actual_class_name + (cu->language_defn->class_name_from_physname + (child_pdi->linkage_name)); + if (actual_class_name != NULL) + { + struct objfile *objfile = cu->per_objfile->objfile; + struct_pdi->raw_name = objfile->intern (actual_class_name.get ()); + struct_pdi->canonical_name = 1; + } + break; + } + } +} + +/* Return true if a DIE with TAG may have the DW_AT_const_value + attribute. */ + +static bool +can_have_DW_AT_const_value_p (enum dwarf_tag tag) +{ + switch (tag) + { + case DW_TAG_constant: + case DW_TAG_enumerator: + case DW_TAG_formal_parameter: + case DW_TAG_template_value_param: + case DW_TAG_variable: + return true; + } + + return false; +} + +void +partial_die_info::fixup (struct dwarf2_cu *cu) +{ + /* Once we've fixed up a die, there's no point in doing so again. + This also avoids a memory leak if we were to call + guess_partial_die_structure_name multiple times. */ + if (fixup_called) + return; + + /* If we found a reference attribute and the DIE has no name, try + to find a name in the referred to DIE. */ + + if (raw_name == NULL && has_specification) + { + struct partial_die_info *spec_die; + + auto res = find_partial_die (spec_offset, spec_is_dwz, cu); + spec_die = res.pdi; + cu = res.cu; + + spec_die->fixup (cu); + + if (spec_die->raw_name) + { + raw_name = spec_die->raw_name; + canonical_name = spec_die->canonical_name; + + /* Copy DW_AT_external attribute if it is set. */ + if (spec_die->is_external) + is_external = spec_die->is_external; + } + } + + if (!has_const_value && has_specification + && can_have_DW_AT_const_value_p (tag)) + { + struct partial_die_info *spec_die; + + auto res = find_partial_die (spec_offset, spec_is_dwz, cu); + spec_die = res.pdi; + cu = res.cu; + + spec_die->fixup (cu); + + if (spec_die->has_const_value) + { + /* Copy DW_AT_const_value attribute if it is set. */ + has_const_value = spec_die->has_const_value; + } + } + + /* Set default names for some unnamed DIEs. */ + + if (raw_name == NULL && tag == DW_TAG_namespace) + { + raw_name = CP_ANONYMOUS_NAMESPACE_STR; + canonical_name = 1; + } + + /* If there is no parent die to provide a namespace, and there are + children, see if we can determine the namespace from their linkage + name. */ + if (cu->language == language_cplus + && !cu->per_objfile->per_bfd->types.empty () + && die_parent == NULL + && has_children + && (tag == DW_TAG_class_type + || tag == DW_TAG_structure_type + || tag == DW_TAG_union_type)) + guess_partial_die_structure_name (this, cu); + + /* GCC might emit a nameless struct or union that has a linkage + name. See http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47510. */ + if (raw_name == NULL + && (tag == DW_TAG_class_type + || tag == DW_TAG_interface_type + || tag == DW_TAG_structure_type + || tag == DW_TAG_union_type) + && linkage_name != NULL) + { + gdb::unique_xmalloc_ptr<char> demangled + (gdb_demangle (linkage_name, DMGL_TYPES)); + if (demangled != nullptr) + { + const char *base; + + /* Strip any leading namespaces/classes, keep only the base name. + DW_AT_name for named DIEs does not contain the prefixes. */ + base = strrchr (demangled.get (), ':'); + if (base && base > demangled.get () && base[-1] == ':') + base++; + else + base = demangled.get (); + + struct objfile *objfile = cu->per_objfile->objfile; + raw_name = objfile->intern (base); + canonical_name = 1; + } + } + + fixup_called = 1; +} + +/* Read the .debug_loclists or .debug_rnglists header (they are the same format) + contents from the given SECTION in the HEADER. + + HEADER_OFFSET is the offset of the header in the section. */ +static void +read_loclists_rnglists_header (struct loclists_rnglists_header *header, + struct dwarf2_section_info *section, + sect_offset header_offset) +{ + unsigned int bytes_read; + bfd *abfd = section->get_bfd_owner (); + const gdb_byte *info_ptr = section->buffer + to_underlying (header_offset); + + header->length = read_initial_length (abfd, info_ptr, &bytes_read); + info_ptr += bytes_read; + + header->version = read_2_bytes (abfd, info_ptr); + info_ptr += 2; + + header->addr_size = read_1_byte (abfd, info_ptr); + info_ptr += 1; + + header->segment_collector_size = read_1_byte (abfd, info_ptr); + info_ptr += 1; + + header->offset_entry_count = read_4_bytes (abfd, info_ptr); +} + +/* Return the DW_AT_loclists_base value for the CU. */ +static ULONGEST +lookup_loclist_base (struct dwarf2_cu *cu) +{ + /* For the .dwo unit, the loclist_base points to the first offset following + the header. The header consists of the following entities- + 1. Unit Length (4 bytes for 32 bit DWARF format, and 12 bytes for the 64 + bit format) + 2. version (2 bytes) + 3. address size (1 byte) + 4. segment selector size (1 byte) + 5. offset entry count (4 bytes) + These sizes are derived as per the DWARFv5 standard. */ + if (cu->dwo_unit != nullptr) + { + if (cu->header.initial_length_size == 4) + return LOCLIST_HEADER_SIZE32; + return LOCLIST_HEADER_SIZE64; + } + return cu->loclist_base; +} + +/* Given a DW_FORM_loclistx value LOCLIST_INDEX, fetch the offset from the + array of offsets in the .debug_loclists section. */ +static CORE_ADDR +read_loclist_index (struct dwarf2_cu *cu, ULONGEST loclist_index) +{ + dwarf2_per_objfile *per_objfile = cu->per_objfile; + struct objfile *objfile = per_objfile->objfile; + bfd *abfd = objfile->obfd; + ULONGEST loclist_header_size = + (cu->header.initial_length_size == 4 ? LOCLIST_HEADER_SIZE32 + : LOCLIST_HEADER_SIZE64); + ULONGEST loclist_base = lookup_loclist_base (cu); + + /* Offset in .debug_loclists of the offset for LOCLIST_INDEX. */ + ULONGEST start_offset = + loclist_base + loclist_index * cu->header.offset_size; + + /* Get loclists section. */ + struct dwarf2_section_info *section = cu_debug_loc_section (cu); + + /* Read the loclists section content. */ + section->read (objfile); + if (section->buffer == NULL) + error (_("DW_FORM_loclistx used without .debug_loclists " + "section [in module %s]"), objfile_name (objfile)); + + /* DW_AT_loclists_base points after the .debug_loclists contribution header, + so if loclist_base is smaller than the header size, we have a problem. */ + if (loclist_base < loclist_header_size) + error (_("DW_AT_loclists_base is smaller than header size [in module %s]"), + objfile_name (objfile)); + + /* Read the header of the loclists contribution. */ + struct loclists_rnglists_header header; + read_loclists_rnglists_header (&header, section, + (sect_offset) (loclist_base - loclist_header_size)); + + /* Verify the loclist index is valid. */ + if (loclist_index >= header.offset_entry_count) + error (_("DW_FORM_loclistx pointing outside of " + ".debug_loclists offset array [in module %s]"), + objfile_name (objfile)); + + if (start_offset >= section->size) + error (_("DW_FORM_loclistx pointing outside of " + ".debug_loclists section [in module %s]"), + objfile_name (objfile)); + + /* Validate that reading won't go beyond the end of the section. */ + if (start_offset + cu->header.offset_size > section->size) + error (_("Reading DW_FORM_loclistx index beyond end of" + ".debug_loclists section [in module %s]"), + objfile_name (objfile)); + + const gdb_byte *info_ptr = section->buffer + start_offset; + + if (cu->header.offset_size == 4) + return bfd_get_32 (abfd, info_ptr) + loclist_base; + else + return bfd_get_64 (abfd, info_ptr) + loclist_base; +} + +/* Given a DW_FORM_rnglistx value RNGLIST_INDEX, fetch the offset from the + array of offsets in the .debug_rnglists section. */ +static CORE_ADDR +read_rnglist_index (struct dwarf2_cu *cu, ULONGEST rnglist_index, + dwarf_tag tag) +{ + struct dwarf2_per_objfile *dwarf2_per_objfile = cu->per_objfile; + struct objfile *objfile = dwarf2_per_objfile->objfile; + bfd *abfd = objfile->obfd; + ULONGEST rnglist_header_size = + (cu->header.initial_length_size == 4 ? RNGLIST_HEADER_SIZE32 + : RNGLIST_HEADER_SIZE64); + ULONGEST rnglist_base = + (cu->dwo_unit != nullptr) ? rnglist_header_size : cu->ranges_base; + + /* Offset in .debug_rnglists of the offset for RNGLIST_INDEX. */ + ULONGEST start_offset = + rnglist_base + rnglist_index * cu->header.offset_size; + + /* Get rnglists section. */ + struct dwarf2_section_info *section = cu_debug_rnglists_section (cu, tag); + + /* Read the rnglists section content. */ + section->read (objfile); + if (section->buffer == nullptr) + error (_("DW_FORM_rnglistx used without .debug_rnglists section " + "[in module %s]"), + objfile_name (objfile)); + + /* DW_AT_rnglists_base points after the .debug_rnglists contribution header, + so if rnglist_base is smaller than the header size, we have a problem. */ + if (rnglist_base < rnglist_header_size) + error (_("DW_AT_rnglists_base is smaller than header size [in module %s]"), + objfile_name (objfile)); + + /* Read the header of the rnglists contribution. */ + struct loclists_rnglists_header header; + read_loclists_rnglists_header (&header, section, + (sect_offset) (rnglist_base - rnglist_header_size)); + + /* Verify the rnglist index is valid. */ + if (rnglist_index >= header.offset_entry_count) + error (_("DW_FORM_rnglistx index pointing outside of " + ".debug_rnglists offset array [in module %s]"), + objfile_name (objfile)); + + /* Validate that the offset is within the section's range. */ + if (start_offset >= section->size) + error (_("DW_FORM_rnglistx pointing outside of " + ".debug_rnglists section [in module %s]"), + objfile_name (objfile)); + + /* Validate that reading won't go beyond the end of the section. */ + if (start_offset + cu->header.offset_size > section->size) + error (_("Reading DW_FORM_rnglistx index beyond end of" + ".debug_rnglists section [in module %s]"), + objfile_name (objfile)); + + const gdb_byte *info_ptr = section->buffer + start_offset; + + if (cu->header.offset_size == 4) + return read_4_bytes (abfd, info_ptr) + rnglist_base; + else + return read_8_bytes (abfd, info_ptr) + rnglist_base; +} + +/* Process the attributes that had to be skipped in the first round. These + attributes are the ones that need str_offsets_base or addr_base attributes. + They could not have been processed in the first round, because at the time + the values of str_offsets_base or addr_base may not have been known. */ +static void +read_attribute_reprocess (const struct die_reader_specs *reader, + struct attribute *attr, dwarf_tag tag) +{ + struct dwarf2_cu *cu = reader->cu; + switch (attr->form) + { + case DW_FORM_addrx: + case DW_FORM_GNU_addr_index: + DW_ADDR (attr) = read_addr_index (cu, DW_UNSND (attr)); + break; + case DW_FORM_loclistx: + DW_UNSND (attr) = read_loclist_index (cu, DW_UNSND (attr)); + break; + case DW_FORM_rnglistx: + DW_UNSND (attr) = read_rnglist_index (cu, DW_UNSND (attr), tag); + break; + case DW_FORM_strx: + case DW_FORM_strx1: + case DW_FORM_strx2: + case DW_FORM_strx3: + case DW_FORM_strx4: + case DW_FORM_GNU_str_index: + { + unsigned int str_index = DW_UNSND (attr); + if (reader->dwo_file != NULL) + { + DW_STRING (attr) = read_dwo_str_index (reader, str_index); + DW_STRING_IS_CANONICAL (attr) = 0; + } + else + { + DW_STRING (attr) = read_stub_str_index (cu, str_index); + DW_STRING_IS_CANONICAL (attr) = 0; + } + break; + } + default: + gdb_assert_not_reached (_("Unexpected DWARF form.")); + } +} + +/* Read an attribute value described by an attribute form. */ + +static const gdb_byte * +read_attribute_value (const struct die_reader_specs *reader, + struct attribute *attr, unsigned form, + LONGEST implicit_const, const gdb_byte *info_ptr, + bool *need_reprocess) +{ + struct dwarf2_cu *cu = reader->cu; + dwarf2_per_objfile *per_objfile = cu->per_objfile; + struct objfile *objfile = per_objfile->objfile; + bfd *abfd = reader->abfd; + struct comp_unit_head *cu_header = &cu->header; + unsigned int bytes_read; + struct dwarf_block *blk; + *need_reprocess = false; + + attr->form = (enum dwarf_form) form; + switch (form) + { + case DW_FORM_ref_addr: + if (cu->header.version == 2) + DW_UNSND (attr) = cu->header.read_address (abfd, info_ptr, + &bytes_read); + else + DW_UNSND (attr) = cu->header.read_offset (abfd, info_ptr, + &bytes_read); + info_ptr += bytes_read; + break; + case DW_FORM_GNU_ref_alt: + DW_UNSND (attr) = cu->header.read_offset (abfd, info_ptr, &bytes_read); + info_ptr += bytes_read; + break; + case DW_FORM_addr: + { + struct gdbarch *gdbarch = objfile->arch (); + DW_ADDR (attr) = cu->header.read_address (abfd, info_ptr, &bytes_read); + DW_ADDR (attr) = gdbarch_adjust_dwarf2_addr (gdbarch, DW_ADDR (attr)); + info_ptr += bytes_read; + } + break; + case DW_FORM_block2: + blk = dwarf_alloc_block (cu); + blk->size = read_2_bytes (abfd, info_ptr); + info_ptr += 2; + blk->data = read_n_bytes (abfd, info_ptr, blk->size); + info_ptr += blk->size; + DW_BLOCK (attr) = blk; + break; + case DW_FORM_block4: + blk = dwarf_alloc_block (cu); + blk->size = read_4_bytes (abfd, info_ptr); + info_ptr += 4; + blk->data = read_n_bytes (abfd, info_ptr, blk->size); + info_ptr += blk->size; + DW_BLOCK (attr) = blk; + break; + case DW_FORM_data2: + DW_UNSND (attr) = read_2_bytes (abfd, info_ptr); + info_ptr += 2; + break; + case DW_FORM_data4: + DW_UNSND (attr) = read_4_bytes (abfd, info_ptr); + info_ptr += 4; + break; + case DW_FORM_data8: + DW_UNSND (attr) = read_8_bytes (abfd, info_ptr); + info_ptr += 8; + break; + case DW_FORM_data16: + blk = dwarf_alloc_block (cu); + blk->size = 16; + blk->data = read_n_bytes (abfd, info_ptr, 16); + info_ptr += 16; + DW_BLOCK (attr) = blk; + break; + case DW_FORM_sec_offset: + DW_UNSND (attr) = cu->header.read_offset (abfd, info_ptr, &bytes_read); + info_ptr += bytes_read; + break; + case DW_FORM_loclistx: + { + *need_reprocess = true; + DW_UNSND (attr) = read_unsigned_leb128 (abfd, info_ptr, &bytes_read); + info_ptr += bytes_read; + } + break; + case DW_FORM_string: + DW_STRING (attr) = read_direct_string (abfd, info_ptr, &bytes_read); + DW_STRING_IS_CANONICAL (attr) = 0; + info_ptr += bytes_read; + break; + case DW_FORM_strp: + if (!cu->per_cu->is_dwz) + { + DW_STRING (attr) = read_indirect_string (per_objfile, + abfd, info_ptr, cu_header, + &bytes_read); + DW_STRING_IS_CANONICAL (attr) = 0; + info_ptr += bytes_read; + break; + } + /* FALLTHROUGH */ + case DW_FORM_line_strp: + if (!cu->per_cu->is_dwz) + { + DW_STRING (attr) = per_objfile->read_line_string (info_ptr, cu_header, + &bytes_read); + DW_STRING_IS_CANONICAL (attr) = 0; + info_ptr += bytes_read; + break; + } + /* FALLTHROUGH */ + case DW_FORM_GNU_strp_alt: + { + dwz_file *dwz = dwarf2_get_dwz_file (per_objfile->per_bfd); + LONGEST str_offset = cu_header->read_offset (abfd, info_ptr, + &bytes_read); + + DW_STRING (attr) = dwz->read_string (objfile, str_offset); + DW_STRING_IS_CANONICAL (attr) = 0; + info_ptr += bytes_read; + } + break; + case DW_FORM_exprloc: + case DW_FORM_block: + blk = dwarf_alloc_block (cu); + blk->size = read_unsigned_leb128 (abfd, info_ptr, &bytes_read); + info_ptr += bytes_read; + blk->data = read_n_bytes (abfd, info_ptr, blk->size); + info_ptr += blk->size; + DW_BLOCK (attr) = blk; + break; + case DW_FORM_block1: + blk = dwarf_alloc_block (cu); + blk->size = read_1_byte (abfd, info_ptr); + info_ptr += 1; + blk->data = read_n_bytes (abfd, info_ptr, blk->size); + info_ptr += blk->size; + DW_BLOCK (attr) = blk; + break; + case DW_FORM_data1: + DW_UNSND (attr) = read_1_byte (abfd, info_ptr); + info_ptr += 1; + break; + case DW_FORM_flag: + DW_UNSND (attr) = read_1_byte (abfd, info_ptr); + info_ptr += 1; + break; + case DW_FORM_flag_present: + DW_UNSND (attr) = 1; + break; + case DW_FORM_sdata: + DW_SND (attr) = read_signed_leb128 (abfd, info_ptr, &bytes_read); + info_ptr += bytes_read; + break; + case DW_FORM_rnglistx: + *need_reprocess = true; + /* FALLTHROUGH */ + case DW_FORM_udata: + DW_UNSND (attr) = read_unsigned_leb128 (abfd, info_ptr, &bytes_read); + info_ptr += bytes_read; + break; + case DW_FORM_ref1: + DW_UNSND (attr) = (to_underlying (cu->header.sect_off) + + read_1_byte (abfd, info_ptr)); + info_ptr += 1; + break; + case DW_FORM_ref2: + DW_UNSND (attr) = (to_underlying (cu->header.sect_off) + + read_2_bytes (abfd, info_ptr)); + info_ptr += 2; + break; + case DW_FORM_ref4: + DW_UNSND (attr) = (to_underlying (cu->header.sect_off) + + read_4_bytes (abfd, info_ptr)); + info_ptr += 4; + break; + case DW_FORM_ref8: + DW_UNSND (attr) = (to_underlying (cu->header.sect_off) + + read_8_bytes (abfd, info_ptr)); + info_ptr += 8; + break; + case DW_FORM_ref_sig8: + DW_SIGNATURE (attr) = read_8_bytes (abfd, info_ptr); + info_ptr += 8; + break; + case DW_FORM_ref_udata: + DW_UNSND (attr) = (to_underlying (cu->header.sect_off) + + read_unsigned_leb128 (abfd, info_ptr, &bytes_read)); + info_ptr += bytes_read; + break; + case DW_FORM_indirect: + form = read_unsigned_leb128 (abfd, info_ptr, &bytes_read); + info_ptr += bytes_read; + if (form == DW_FORM_implicit_const) + { + implicit_const = read_signed_leb128 (abfd, info_ptr, &bytes_read); + info_ptr += bytes_read; + } + info_ptr = read_attribute_value (reader, attr, form, implicit_const, + info_ptr, need_reprocess); + break; + case DW_FORM_implicit_const: + DW_SND (attr) = implicit_const; + break; + case DW_FORM_addrx: + case DW_FORM_GNU_addr_index: + *need_reprocess = true; + DW_UNSND (attr) = read_unsigned_leb128 (abfd, info_ptr, &bytes_read); + info_ptr += bytes_read; + break; + case DW_FORM_strx: + case DW_FORM_strx1: + case DW_FORM_strx2: + case DW_FORM_strx3: + case DW_FORM_strx4: + case DW_FORM_GNU_str_index: + { + ULONGEST str_index; + if (form == DW_FORM_strx1) + { + str_index = read_1_byte (abfd, info_ptr); + info_ptr += 1; + } + else if (form == DW_FORM_strx2) + { + str_index = read_2_bytes (abfd, info_ptr); + info_ptr += 2; + } + else if (form == DW_FORM_strx3) + { + str_index = read_3_bytes (abfd, info_ptr); + info_ptr += 3; + } + else if (form == DW_FORM_strx4) + { + str_index = read_4_bytes (abfd, info_ptr); + info_ptr += 4; + } + else + { + str_index = read_unsigned_leb128 (abfd, info_ptr, &bytes_read); + info_ptr += bytes_read; + } + *need_reprocess = true; + DW_UNSND (attr) = str_index; + } + break; + default: + error (_("Dwarf Error: Cannot handle %s in DWARF reader [in module %s]"), + dwarf_form_name (form), + bfd_get_filename (abfd)); + } + + /* Super hack. */ + if (cu->per_cu->is_dwz && attr->form_is_ref ()) + attr->form = DW_FORM_GNU_ref_alt; + + /* We have seen instances where the compiler tried to emit a byte + size attribute of -1 which ended up being encoded as an unsigned + 0xffffffff. Although 0xffffffff is technically a valid size value, + an object of this size seems pretty unlikely so we can relatively + safely treat these cases as if the size attribute was invalid and + treat them as zero by default. */ + if (attr->name == DW_AT_byte_size + && form == DW_FORM_data4 + && DW_UNSND (attr) >= 0xffffffff) + { + complaint + (_("Suspicious DW_AT_byte_size value treated as zero instead of %s"), + hex_string (DW_UNSND (attr))); + DW_UNSND (attr) = 0; + } + + return info_ptr; +} + +/* Read an attribute described by an abbreviated attribute. */ + +static const gdb_byte * +read_attribute (const struct die_reader_specs *reader, + struct attribute *attr, struct attr_abbrev *abbrev, + const gdb_byte *info_ptr, bool *need_reprocess) +{ + attr->name = abbrev->name; + return read_attribute_value (reader, attr, abbrev->form, + abbrev->implicit_const, info_ptr, + need_reprocess); +} + +/* Return pointer to string at .debug_str offset STR_OFFSET. */ + +static const char * +read_indirect_string_at_offset (dwarf2_per_objfile *per_objfile, + LONGEST str_offset) +{ + return per_objfile->per_bfd->str.read_string (per_objfile->objfile, + str_offset, "DW_FORM_strp"); +} + +/* Return pointer to string at .debug_str offset as read from BUF. + BUF is assumed to be in a compilation unit described by CU_HEADER. + Return *BYTES_READ_PTR count of bytes read from BUF. */ + +static const char * +read_indirect_string (dwarf2_per_objfile *per_objfile, bfd *abfd, + const gdb_byte *buf, + const struct comp_unit_head *cu_header, + unsigned int *bytes_read_ptr) +{ + LONGEST str_offset = cu_header->read_offset (abfd, buf, bytes_read_ptr); + + return read_indirect_string_at_offset (per_objfile, str_offset); +} + +/* See read.h. */ + +const char * +dwarf2_per_objfile::read_line_string (const gdb_byte *buf, + const struct comp_unit_head *cu_header, + unsigned int *bytes_read_ptr) +{ + bfd *abfd = objfile->obfd; + LONGEST str_offset = cu_header->read_offset (abfd, buf, bytes_read_ptr); + + return per_bfd->line_str.read_string (objfile, str_offset, "DW_FORM_line_strp"); +} + +/* Given index ADDR_INDEX in .debug_addr, fetch the value. + ADDR_BASE is the DW_AT_addr_base (DW_AT_GNU_addr_base) attribute or zero. + ADDR_SIZE is the size of addresses from the CU header. */ + +static CORE_ADDR +read_addr_index_1 (dwarf2_per_objfile *per_objfile, unsigned int addr_index, + gdb::optional<ULONGEST> addr_base, int addr_size) +{ + struct objfile *objfile = per_objfile->objfile; + bfd *abfd = objfile->obfd; + const gdb_byte *info_ptr; + ULONGEST addr_base_or_zero = addr_base.has_value () ? *addr_base : 0; + + per_objfile->per_bfd->addr.read (objfile); + if (per_objfile->per_bfd->addr.buffer == NULL) + error (_("DW_FORM_addr_index used without .debug_addr section [in module %s]"), + objfile_name (objfile)); + if (addr_base_or_zero + addr_index * addr_size + >= per_objfile->per_bfd->addr.size) + error (_("DW_FORM_addr_index pointing outside of " + ".debug_addr section [in module %s]"), + objfile_name (objfile)); + info_ptr = (per_objfile->per_bfd->addr.buffer + addr_base_or_zero + + addr_index * addr_size); + if (addr_size == 4) + return bfd_get_32 (abfd, info_ptr); + else + return bfd_get_64 (abfd, info_ptr); +} + +/* Given index ADDR_INDEX in .debug_addr, fetch the value. */ + +static CORE_ADDR +read_addr_index (struct dwarf2_cu *cu, unsigned int addr_index) +{ + return read_addr_index_1 (cu->per_objfile, addr_index, + cu->addr_base, cu->header.addr_size); +} + +/* Given a pointer to an leb128 value, fetch the value from .debug_addr. */ + +static CORE_ADDR +read_addr_index_from_leb128 (struct dwarf2_cu *cu, const gdb_byte *info_ptr, + unsigned int *bytes_read) +{ + bfd *abfd = cu->per_objfile->objfile->obfd; + unsigned int addr_index = read_unsigned_leb128 (abfd, info_ptr, bytes_read); + + return read_addr_index (cu, addr_index); +} + +/* See read.h. */ + +CORE_ADDR +dwarf2_read_addr_index (dwarf2_per_cu_data *per_cu, + dwarf2_per_objfile *per_objfile, + unsigned int addr_index) +{ + struct dwarf2_cu *cu = per_objfile->get_cu (per_cu); + gdb::optional<ULONGEST> addr_base; + int addr_size; + + /* We need addr_base and addr_size. + If we don't have PER_CU->cu, we have to get it. + Nasty, but the alternative is storing the needed info in PER_CU, + which at this point doesn't seem justified: it's not clear how frequently + it would get used and it would increase the size of every PER_CU. + Entry points like dwarf2_per_cu_addr_size do a similar thing + so we're not in uncharted territory here. + Alas we need to be a bit more complicated as addr_base is contained + in the DIE. + + We don't need to read the entire CU(/TU). + We just need the header and top level die. + + IWBN to use the aging mechanism to let us lazily later discard the CU. + For now we skip this optimization. */ + + if (cu != NULL) + { + addr_base = cu->addr_base; + addr_size = cu->header.addr_size; + } + else + { + cutu_reader reader (per_cu, per_objfile, nullptr, nullptr, false); + addr_base = reader.cu->addr_base; + addr_size = reader.cu->header.addr_size; + } + + return read_addr_index_1 (per_objfile, addr_index, addr_base, addr_size); +} + +/* Given a DW_FORM_GNU_str_index value STR_INDEX, fetch the string. + STR_SECTION, STR_OFFSETS_SECTION can be from a Fission stub or a + DWO file. */ + +static const char * +read_str_index (struct dwarf2_cu *cu, + struct dwarf2_section_info *str_section, + struct dwarf2_section_info *str_offsets_section, + ULONGEST str_offsets_base, ULONGEST str_index) +{ + dwarf2_per_objfile *per_objfile = cu->per_objfile; + struct objfile *objfile = per_objfile->objfile; + const char *objf_name = objfile_name (objfile); + bfd *abfd = objfile->obfd; + const gdb_byte *info_ptr; + ULONGEST str_offset; + static const char form_name[] = "DW_FORM_GNU_str_index or DW_FORM_strx"; + + str_section->read (objfile); + str_offsets_section->read (objfile); + if (str_section->buffer == NULL) + error (_("%s used without %s section" + " in CU at offset %s [in module %s]"), + form_name, str_section->get_name (), + sect_offset_str (cu->header.sect_off), objf_name); + if (str_offsets_section->buffer == NULL) + error (_("%s used without %s section" + " in CU at offset %s [in module %s]"), + form_name, str_section->get_name (), + sect_offset_str (cu->header.sect_off), objf_name); + info_ptr = (str_offsets_section->buffer + + str_offsets_base + + str_index * cu->header.offset_size); + if (cu->header.offset_size == 4) + str_offset = bfd_get_32 (abfd, info_ptr); + else + str_offset = bfd_get_64 (abfd, info_ptr); + if (str_offset >= str_section->size) + error (_("Offset from %s pointing outside of" + " .debug_str.dwo section in CU at offset %s [in module %s]"), + form_name, sect_offset_str (cu->header.sect_off), objf_name); + return (const char *) (str_section->buffer + str_offset); +} + +/* Given a DW_FORM_GNU_str_index from a DWO file, fetch the string. */ + +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; + return read_str_index (reader->cu, + &reader->dwo_file->sections.str, + &reader->dwo_file->sections.str_offsets, + str_offsets_base, str_index); +} + +/* Given a DW_FORM_GNU_str_index from a Fission stub, fetch the string. */ + +static const char * +read_stub_str_index (struct dwarf2_cu *cu, ULONGEST str_index) +{ + struct objfile *objfile = cu->per_objfile->objfile; + const char *objf_name = objfile_name (objfile); + static const char form_name[] = "DW_FORM_GNU_str_index"; + static const char str_offsets_attr_name[] = "DW_AT_str_offsets"; + + if (!cu->str_offsets_base.has_value ()) + error (_("%s used in Fission stub without %s" + " in CU at offset 0x%lx [in module %s]"), + form_name, str_offsets_attr_name, + (long) cu->header.offset_size, objf_name); + + return read_str_index (cu, + &cu->per_objfile->per_bfd->str, + &cu->per_objfile->per_bfd->str_offsets, + *cu->str_offsets_base, str_index); +} + +/* Return the length of an LEB128 number in BUF. */ + +static int +leb128_size (const gdb_byte *buf) +{ + const gdb_byte *begin = buf; + gdb_byte byte; + + while (1) + { + byte = *buf++; + if ((byte & 128) == 0) + return buf - begin; + } +} + +static void +set_cu_language (unsigned int lang, struct dwarf2_cu *cu) +{ + switch (lang) + { + case DW_LANG_C89: + case DW_LANG_C99: + case DW_LANG_C11: + case DW_LANG_C: + case DW_LANG_UPC: + cu->language = language_c; + break; + case DW_LANG_Java: + case DW_LANG_C_plus_plus: + case DW_LANG_C_plus_plus_11: + case DW_LANG_C_plus_plus_14: + cu->language = language_cplus; + break; + case DW_LANG_D: + cu->language = language_d; + break; + case DW_LANG_Fortran77: + case DW_LANG_Fortran90: + case DW_LANG_Fortran95: + case DW_LANG_Fortran03: + case DW_LANG_Fortran08: + cu->language = language_fortran; + break; + case DW_LANG_Go: + cu->language = language_go; + break; + case DW_LANG_Mips_Assembler: + cu->language = language_asm; + break; + case DW_LANG_Ada83: + case DW_LANG_Ada95: + cu->language = language_ada; + break; + case DW_LANG_Modula2: + cu->language = language_m2; + break; + case DW_LANG_Pascal83: + cu->language = language_pascal; + break; + case DW_LANG_ObjC: + cu->language = language_objc; + break; + case DW_LANG_Rust: + case DW_LANG_Rust_old: + cu->language = language_rust; + break; + case DW_LANG_Cobol74: + case DW_LANG_Cobol85: + default: + cu->language = language_minimal; + break; + } + cu->language_defn = language_def (cu->language); +} + +/* Return the named attribute or NULL if not there. */ + +static struct attribute * +dwarf2_attr (struct die_info *die, unsigned int name, struct dwarf2_cu *cu) +{ + for (;;) + { + unsigned int i; + struct attribute *spec = NULL; + + for (i = 0; i < die->num_attrs; ++i) + { + if (die->attrs[i].name == name) + return &die->attrs[i]; + if (die->attrs[i].name == DW_AT_specification + || die->attrs[i].name == DW_AT_abstract_origin) + spec = &die->attrs[i]; + } + + if (!spec) + break; + + die = follow_die_ref (die, spec, &cu); + } + + return NULL; +} + +/* Return the string associated with a string-typed attribute, or NULL if it + is either not found or is of an incorrect type. */ + +static const char * +dwarf2_string_attr (struct die_info *die, unsigned int name, struct dwarf2_cu *cu) +{ + struct attribute *attr; + const char *str = NULL; + + attr = dwarf2_attr (die, name, cu); + + if (attr != NULL) + { + str = attr->value_as_string (); + if (str == nullptr) + complaint (_("string type expected for attribute %s for " + "DIE at %s in module %s"), + dwarf_attr_name (name), sect_offset_str (die->sect_off), + objfile_name (cu->per_objfile->objfile)); + } + + return str; +} + +/* Return the dwo name or NULL if not present. If present, it is in either + DW_AT_GNU_dwo_name or DW_AT_dwo_name attribute. */ +static const char * +dwarf2_dwo_name (struct die_info *die, struct dwarf2_cu *cu) +{ + const char *dwo_name = dwarf2_string_attr (die, DW_AT_GNU_dwo_name, cu); + if (dwo_name == nullptr) + dwo_name = dwarf2_string_attr (die, DW_AT_dwo_name, cu); + return dwo_name; +} + +/* Return non-zero iff the attribute NAME is defined for the given DIE, + and holds a non-zero value. This function should only be used for + DW_FORM_flag or DW_FORM_flag_present attributes. */ + +static int +dwarf2_flag_true_p (struct die_info *die, unsigned name, struct dwarf2_cu *cu) +{ + struct attribute *attr = dwarf2_attr (die, name, cu); + + return (attr && DW_UNSND (attr)); +} + +static int +die_is_declaration (struct die_info *die, struct dwarf2_cu *cu) +{ + /* A DIE is a declaration if it has a DW_AT_declaration attribute + which value is non-zero. However, we have to be careful with + DIEs having a DW_AT_specification attribute, because dwarf2_attr() + (via dwarf2_flag_true_p) follows this attribute. So we may + end up accidently finding a declaration attribute that belongs + to a different DIE referenced by the specification attribute, + even though the given DIE does not have a declaration attribute. */ + return (dwarf2_flag_true_p (die, DW_AT_declaration, cu) + && dwarf2_attr (die, DW_AT_specification, cu) == NULL); +} + +/* Return the die giving the specification for DIE, if there is + one. *SPEC_CU is the CU containing DIE on input, and the CU + containing the return value on output. If there is no + specification, but there is an abstract origin, that is + returned. */ + +static struct die_info * +die_specification (struct die_info *die, struct dwarf2_cu **spec_cu) +{ + struct attribute *spec_attr = dwarf2_attr (die, DW_AT_specification, + *spec_cu); + + if (spec_attr == NULL) + spec_attr = dwarf2_attr (die, DW_AT_abstract_origin, *spec_cu); + + if (spec_attr == NULL) + return NULL; + else + return follow_die_ref (die, spec_attr, spec_cu); +} + +/* Stub for free_line_header to match void * callback types. */ + +static void +free_line_header_voidp (void *arg) +{ + struct line_header *lh = (struct line_header *) arg; + + delete lh; +} + +/* A convenience function to find the proper .debug_line section for a CU. */ + +static struct dwarf2_section_info * +get_debug_line_section (struct dwarf2_cu *cu) +{ + struct dwarf2_section_info *section; + dwarf2_per_objfile *per_objfile = cu->per_objfile; + + /* For TUs in DWO files, the DW_AT_stmt_list attribute lives in the + DWO file. */ + if (cu->dwo_unit && cu->per_cu->is_debug_types) + section = &cu->dwo_unit->dwo_file->sections.line; + else if (cu->per_cu->is_dwz) + { + dwz_file *dwz = dwarf2_get_dwz_file (per_objfile->per_bfd); + + section = &dwz->line; + } + else + section = &per_objfile->per_bfd->line; + + return section; +} + +/* Read the statement program header starting at OFFSET in + .debug_line, or .debug_line.dwo. Return a pointer + to a struct line_header, allocated using xmalloc. + Returns NULL if there is a problem reading the header, e.g., if it + has a version we don't understand. + + NOTE: the strings in the include directory and file name tables of + the returned object point into the dwarf line section buffer, + and must not be freed. */ + +static line_header_up +dwarf_decode_line_header (sect_offset sect_off, struct dwarf2_cu *cu) +{ + struct dwarf2_section_info *section; + dwarf2_per_objfile *per_objfile = cu->per_objfile; + + section = get_debug_line_section (cu); + section->read (per_objfile->objfile); + if (section->buffer == NULL) + { + if (cu->dwo_unit && cu->per_cu->is_debug_types) + complaint (_("missing .debug_line.dwo section")); + else + complaint (_("missing .debug_line section")); + return 0; + } + + return dwarf_decode_line_header (sect_off, cu->per_cu->is_dwz, + per_objfile, section, &cu->header); +} + +/* Subroutine of dwarf_decode_lines to simplify it. + Return the file name of the psymtab for the given file_entry. + COMP_DIR is the compilation directory (DW_AT_comp_dir) or NULL if unknown. + If space for the result is malloc'd, *NAME_HOLDER will be set. + Returns NULL if FILE_INDEX should be ignored, i.e., it is pst->filename. */ + +static const char * +psymtab_include_file_name (const struct line_header *lh, const file_entry &fe, + const dwarf2_psymtab *pst, + const char *comp_dir, + gdb::unique_xmalloc_ptr<char> *name_holder) +{ + const char *include_name = fe.name; + const char *include_name_to_compare = include_name; + const char *pst_filename; + int file_is_pst; + + const char *dir_name = fe.include_dir (lh); + + gdb::unique_xmalloc_ptr<char> hold_compare; + if (!IS_ABSOLUTE_PATH (include_name) + && (dir_name != NULL || comp_dir != NULL)) + { + /* Avoid creating a duplicate psymtab for PST. + We do this by comparing INCLUDE_NAME and PST_FILENAME. + Before we do the comparison, however, we need to account + for DIR_NAME and COMP_DIR. + First prepend dir_name (if non-NULL). If we still don't + have an absolute path prepend comp_dir (if non-NULL). + However, the directory we record in the include-file's + psymtab does not contain COMP_DIR (to match the + corresponding symtab(s)). + + Example: + + bash$ cd /tmp + bash$ gcc -g ./hello.c + include_name = "hello.c" + dir_name = "." + DW_AT_comp_dir = comp_dir = "/tmp" + DW_AT_name = "./hello.c" + + */ + + if (dir_name != NULL) + { + name_holder->reset (concat (dir_name, SLASH_STRING, + include_name, (char *) NULL)); + include_name = name_holder->get (); + include_name_to_compare = include_name; + } + if (!IS_ABSOLUTE_PATH (include_name) && comp_dir != NULL) + { + hold_compare.reset (concat (comp_dir, SLASH_STRING, + include_name, (char *) NULL)); + include_name_to_compare = hold_compare.get (); + } + } + + pst_filename = pst->filename; + gdb::unique_xmalloc_ptr<char> copied_name; + if (!IS_ABSOLUTE_PATH (pst_filename) && pst->dirname != NULL) + { + copied_name.reset (concat (pst->dirname, SLASH_STRING, + pst_filename, (char *) NULL)); + pst_filename = copied_name.get (); + } + + file_is_pst = FILENAME_CMP (include_name_to_compare, pst_filename) == 0; + + if (file_is_pst) + return NULL; + return include_name; +} + +/* State machine to track the state of the line number program. */ + +class lnp_state_machine +{ +public: + /* Initialize a machine state for the start of a line number + program. */ + lnp_state_machine (struct dwarf2_cu *cu, gdbarch *arch, line_header *lh, + bool record_lines_p); + + file_entry *current_file () + { + /* lh->file_names is 0-based, but the file name numbers in the + statement program are 1-based. */ + return m_line_header->file_name_at (m_file); + } + + /* Record the line in the state machine. END_SEQUENCE is true if + we're processing the end of a sequence. */ + void record_line (bool end_sequence); + + /* Check ADDRESS is -1, or zero and less than UNRELOCATED_LOWPC, and if true + nop-out rest of the lines in this sequence. */ + void check_line_address (struct dwarf2_cu *cu, + const gdb_byte *line_ptr, + CORE_ADDR unrelocated_lowpc, CORE_ADDR address); + + void handle_set_discriminator (unsigned int discriminator) + { + m_discriminator = discriminator; + m_line_has_non_zero_discriminator |= discriminator != 0; + } + + /* Handle DW_LNE_set_address. */ + void handle_set_address (CORE_ADDR baseaddr, CORE_ADDR address) + { + m_op_index = 0; + address += baseaddr; + m_address = gdbarch_adjust_dwarf2_line (m_gdbarch, address, false); + } + + /* Handle DW_LNS_advance_pc. */ + void handle_advance_pc (CORE_ADDR adjust); + + /* Handle a special opcode. */ + void handle_special_opcode (unsigned char op_code); + + /* Handle DW_LNS_advance_line. */ + void handle_advance_line (int line_delta) + { + advance_line (line_delta); + } + + /* Handle DW_LNS_set_file. */ + void handle_set_file (file_name_index file); + + /* Handle DW_LNS_negate_stmt. */ + void handle_negate_stmt () + { + m_is_stmt = !m_is_stmt; + } + + /* Handle DW_LNS_const_add_pc. */ + void handle_const_add_pc (); + + /* Handle DW_LNS_fixed_advance_pc. */ + void handle_fixed_advance_pc (CORE_ADDR addr_adj) + { + m_address += gdbarch_adjust_dwarf2_line (m_gdbarch, addr_adj, true); + m_op_index = 0; + } + + /* Handle DW_LNS_copy. */ + void handle_copy () + { + record_line (false); + m_discriminator = 0; + } + + /* Handle DW_LNE_end_sequence. */ + void handle_end_sequence () + { + m_currently_recording_lines = true; + } + +private: + /* Advance the line by LINE_DELTA. */ + void advance_line (int line_delta) + { + m_line += line_delta; + + if (line_delta != 0) + m_line_has_non_zero_discriminator = m_discriminator != 0; + } + + struct dwarf2_cu *m_cu; + + gdbarch *m_gdbarch; + + /* True if we're recording lines. + Otherwise we're building partial symtabs and are just interested in + finding include files mentioned by the line number program. */ + bool m_record_lines_p; + + /* The line number header. */ + line_header *m_line_header; + + /* These are part of the standard DWARF line number state machine, + and initialized according to the DWARF spec. */ + + unsigned char m_op_index = 0; + /* The line table index of the current file. */ + file_name_index m_file = 1; + unsigned int m_line = 1; + + /* These are initialized in the constructor. */ + + CORE_ADDR m_address; + bool m_is_stmt; + unsigned int m_discriminator; + + /* Additional bits of state we need to track. */ + + /* The last file that we called dwarf2_start_subfile for. + This is only used for TLLs. */ + unsigned int m_last_file = 0; + /* The last file a line number was recorded for. */ + struct subfile *m_last_subfile = NULL; + + /* The address of the last line entry. */ + CORE_ADDR m_last_address; + + /* Set to true when a previous line at the same address (using + m_last_address) had m_is_stmt true. This is reset to false when a + line entry at a new address (m_address different to m_last_address) is + processed. */ + bool m_stmt_at_address = false; + + /* When true, record the lines we decode. */ + bool m_currently_recording_lines = false; + + /* The last line number that was recorded, used to coalesce + consecutive entries for the same line. This can happen, for + example, when discriminators are present. PR 17276. */ + unsigned int m_last_line = 0; + bool m_line_has_non_zero_discriminator = false; +}; + +void +lnp_state_machine::handle_advance_pc (CORE_ADDR adjust) +{ + CORE_ADDR addr_adj = (((m_op_index + adjust) + / m_line_header->maximum_ops_per_instruction) + * m_line_header->minimum_instruction_length); + m_address += gdbarch_adjust_dwarf2_line (m_gdbarch, addr_adj, true); + m_op_index = ((m_op_index + adjust) + % m_line_header->maximum_ops_per_instruction); +} + +void +lnp_state_machine::handle_special_opcode (unsigned char op_code) +{ + unsigned char adj_opcode = op_code - m_line_header->opcode_base; + unsigned char adj_opcode_d = adj_opcode / m_line_header->line_range; + unsigned char adj_opcode_r = adj_opcode % m_line_header->line_range; + CORE_ADDR addr_adj = (((m_op_index + adj_opcode_d) + / m_line_header->maximum_ops_per_instruction) + * m_line_header->minimum_instruction_length); + m_address += gdbarch_adjust_dwarf2_line (m_gdbarch, addr_adj, true); + m_op_index = ((m_op_index + adj_opcode_d) + % m_line_header->maximum_ops_per_instruction); + + int line_delta = m_line_header->line_base + adj_opcode_r; + advance_line (line_delta); + record_line (false); + m_discriminator = 0; +} + +void +lnp_state_machine::handle_set_file (file_name_index file) +{ + m_file = file; + + const file_entry *fe = current_file (); + if (fe == NULL) + dwarf2_debug_line_missing_file_complaint (); + else if (m_record_lines_p) + { + const char *dir = fe->include_dir (m_line_header); + + m_last_subfile = m_cu->get_builder ()->get_current_subfile (); + m_line_has_non_zero_discriminator = m_discriminator != 0; + dwarf2_start_subfile (m_cu, fe->name, dir); + } +} + +void +lnp_state_machine::handle_const_add_pc () +{ + CORE_ADDR adjust + = (255 - m_line_header->opcode_base) / m_line_header->line_range; + + CORE_ADDR addr_adj + = (((m_op_index + adjust) + / m_line_header->maximum_ops_per_instruction) + * m_line_header->minimum_instruction_length); + + m_address += gdbarch_adjust_dwarf2_line (m_gdbarch, addr_adj, true); + m_op_index = ((m_op_index + adjust) + % m_line_header->maximum_ops_per_instruction); +} + +/* Return non-zero if we should add LINE to the line number table. + LINE is the line to add, LAST_LINE is the last line that was added, + LAST_SUBFILE is the subfile for LAST_LINE. + LINE_HAS_NON_ZERO_DISCRIMINATOR is non-zero if LINE has ever + had a non-zero discriminator. + + We have to be careful in the presence of discriminators. + E.g., for this line: + + for (i = 0; i < 100000; i++); + + clang can emit four line number entries for that one line, + each with a different discriminator. + See gdb.dwarf2/dw2-single-line-discriminators.exp for an example. + + However, we want gdb to coalesce all four entries into one. + Otherwise the user could stepi into the middle of the line and + gdb would get confused about whether the pc really was in the + middle of the line. + + Things are further complicated by the fact that two consecutive + line number entries for the same line is a heuristic used by gcc + to denote the end of the prologue. So we can't just discard duplicate + entries, we have to be selective about it. The heuristic we use is + that we only collapse consecutive entries for the same line if at least + one of those entries has a non-zero discriminator. PR 17276. + + Note: Addresses in the line number state machine can never go backwards + within one sequence, thus this coalescing is ok. */ + +static int +dwarf_record_line_p (struct dwarf2_cu *cu, + unsigned int line, unsigned int last_line, + int line_has_non_zero_discriminator, + struct subfile *last_subfile) +{ + if (cu->get_builder ()->get_current_subfile () != last_subfile) + return 1; + if (line != last_line) + return 1; + /* Same line for the same file that we've seen already. + As a last check, for pr 17276, only record the line if the line + has never had a non-zero discriminator. */ + if (!line_has_non_zero_discriminator) + return 1; + return 0; +} + +/* Use the CU's builder to record line number LINE beginning at + address ADDRESS in the line table of subfile SUBFILE. */ + +static void +dwarf_record_line_1 (struct gdbarch *gdbarch, struct subfile *subfile, + unsigned int line, CORE_ADDR address, bool is_stmt, + struct dwarf2_cu *cu) +{ + CORE_ADDR addr = gdbarch_addr_bits_remove (gdbarch, address); + + if (dwarf_line_debug) + { + fprintf_unfiltered (gdb_stdlog, + "Recording line %u, file %s, address %s\n", + line, lbasename (subfile->name), + paddress (gdbarch, address)); + } + + if (cu != nullptr) + cu->get_builder ()->record_line (subfile, line, addr, is_stmt); +} + +/* Subroutine of dwarf_decode_lines_1 to simplify it. + Mark the end of a set of line number records. + The arguments are the same as for dwarf_record_line_1. + If SUBFILE is NULL the request is ignored. */ + +static void +dwarf_finish_line (struct gdbarch *gdbarch, struct subfile *subfile, + CORE_ADDR address, struct dwarf2_cu *cu) +{ + if (subfile == NULL) + return; + + if (dwarf_line_debug) + { + fprintf_unfiltered (gdb_stdlog, + "Finishing current line, file %s, address %s\n", + lbasename (subfile->name), + paddress (gdbarch, address)); + } + + dwarf_record_line_1 (gdbarch, subfile, 0, address, true, cu); +} + +void +lnp_state_machine::record_line (bool end_sequence) +{ + if (dwarf_line_debug) + { + fprintf_unfiltered (gdb_stdlog, + "Processing actual line %u: file %u," + " address %s, is_stmt %u, discrim %u%s\n", + m_line, m_file, + paddress (m_gdbarch, m_address), + m_is_stmt, m_discriminator, + (end_sequence ? "\t(end sequence)" : "")); + } + + file_entry *fe = current_file (); + + if (fe == NULL) + dwarf2_debug_line_missing_file_complaint (); + /* For now we ignore lines not starting on an instruction boundary. + But not when processing end_sequence for compatibility with the + previous version of the code. */ + else if (m_op_index == 0 || end_sequence) + { + fe->included_p = 1; + if (m_record_lines_p) + { + /* When we switch files we insert an end maker in the first file, + switch to the second file and add a new line entry. The + problem is that the end marker inserted in the first file will + discard any previous line entries at the same address. If the + line entries in the first file are marked as is-stmt, while + the new line in the second file is non-stmt, then this means + the end marker will discard is-stmt lines so we can have a + non-stmt line. This means that there are less addresses at + which the user can insert a breakpoint. + + To improve this we track the last address in m_last_address, + and whether we have seen an is-stmt at this address. Then + when switching files, if we have seen a stmt at the current + address, and we are switching to create a non-stmt line, then + discard the new line. */ + bool file_changed + = m_last_subfile != m_cu->get_builder ()->get_current_subfile (); + bool ignore_this_line + = ((file_changed && !end_sequence && m_last_address == m_address + && !m_is_stmt && m_stmt_at_address) + || (!end_sequence && m_line == 0)); + + if ((file_changed && !ignore_this_line) || end_sequence) + { + dwarf_finish_line (m_gdbarch, m_last_subfile, m_address, + m_currently_recording_lines ? m_cu : nullptr); + } + + if (!end_sequence && !ignore_this_line) + { + bool is_stmt = producer_is_codewarrior (m_cu) || m_is_stmt; + + if (dwarf_record_line_p (m_cu, m_line, m_last_line, + m_line_has_non_zero_discriminator, + m_last_subfile)) + { + buildsym_compunit *builder = m_cu->get_builder (); + dwarf_record_line_1 (m_gdbarch, + builder->get_current_subfile (), + m_line, m_address, is_stmt, + m_currently_recording_lines ? m_cu : nullptr); + } + m_last_subfile = m_cu->get_builder ()->get_current_subfile (); + m_last_line = m_line; + } + } + } + + /* Track whether we have seen any m_is_stmt true at m_address in case we + have multiple line table entries all at m_address. */ + if (m_last_address != m_address) + { + m_stmt_at_address = false; + m_last_address = m_address; + } + m_stmt_at_address |= m_is_stmt; +} + +lnp_state_machine::lnp_state_machine (struct dwarf2_cu *cu, gdbarch *arch, + line_header *lh, bool record_lines_p) +{ + m_cu = cu; + m_gdbarch = arch; + m_record_lines_p = record_lines_p; + m_line_header = lh; + + m_currently_recording_lines = true; + + /* Call `gdbarch_adjust_dwarf2_line' on the initial 0 address as if there + was a line entry for it so that the backend has a chance to adjust it + and also record it in case it needs it. This is currently used by MIPS + code, cf. `mips_adjust_dwarf2_line'. */ + m_address = gdbarch_adjust_dwarf2_line (arch, 0, 0); + m_is_stmt = lh->default_is_stmt; + m_discriminator = 0; + + m_last_address = m_address; + m_stmt_at_address = false; +} + +void +lnp_state_machine::check_line_address (struct dwarf2_cu *cu, + const gdb_byte *line_ptr, + CORE_ADDR unrelocated_lowpc, CORE_ADDR address) +{ + /* Linkers resolve a symbolic relocation referencing a GC'd function to 0 or + -1. If ADDRESS is 0, ignoring the opcode will err if the text section is + located at 0x0. In this case, additionally check that if + ADDRESS < UNRELOCATED_LOWPC. */ + + if ((address == 0 && address < unrelocated_lowpc) + || address == (CORE_ADDR) -1) + { + /* This line table is for a function which has been + GCd by the linker. Ignore it. PR gdb/12528 */ + + struct objfile *objfile = cu->per_objfile->objfile; + long line_offset = line_ptr - get_debug_line_section (cu)->buffer; + + complaint (_(".debug_line address at offset 0x%lx is 0 [in module %s]"), + line_offset, objfile_name (objfile)); + m_currently_recording_lines = false; + /* Note: m_currently_recording_lines is left as false until we see + DW_LNE_end_sequence. */ + } +} + +/* Subroutine of dwarf_decode_lines to simplify it. + Process the line number information in LH. + If DECODE_FOR_PST_P is non-zero, all we do is process the line number + program in order to set included_p for every referenced header. */ + +static void +dwarf_decode_lines_1 (struct line_header *lh, struct dwarf2_cu *cu, + const int decode_for_pst_p, CORE_ADDR lowpc) +{ + const gdb_byte *line_ptr, *extended_end; + const gdb_byte *line_end; + unsigned int bytes_read, extended_len; + unsigned char op_code, extended_op; + CORE_ADDR baseaddr; + struct objfile *objfile = cu->per_objfile->objfile; + bfd *abfd = objfile->obfd; + struct gdbarch *gdbarch = objfile->arch (); + /* True if we're recording line info (as opposed to building partial + symtabs and just interested in finding include files mentioned by + the line number program). */ + bool record_lines_p = !decode_for_pst_p; + + baseaddr = objfile->text_section_offset (); + + line_ptr = lh->statement_program_start; + line_end = lh->statement_program_end; + + /* Read the statement sequences until there's nothing left. */ + while (line_ptr < line_end) + { + /* The DWARF line number program state machine. Reset the state + machine at the start of each sequence. */ + lnp_state_machine state_machine (cu, gdbarch, lh, record_lines_p); + bool end_sequence = false; + + if (record_lines_p) + { + /* Start a subfile for the current file of the state + machine. */ + const file_entry *fe = state_machine.current_file (); + + if (fe != NULL) + dwarf2_start_subfile (cu, fe->name, fe->include_dir (lh)); + } + + /* Decode the table. */ + while (line_ptr < line_end && !end_sequence) + { + op_code = read_1_byte (abfd, line_ptr); + line_ptr += 1; + + if (op_code >= lh->opcode_base) + { + /* Special opcode. */ + state_machine.handle_special_opcode (op_code); + } + else switch (op_code) + { + case DW_LNS_extended_op: + extended_len = read_unsigned_leb128 (abfd, line_ptr, + &bytes_read); + line_ptr += bytes_read; + extended_end = line_ptr + extended_len; + extended_op = read_1_byte (abfd, line_ptr); + line_ptr += 1; + if (DW_LNE_lo_user <= extended_op + && extended_op <= DW_LNE_hi_user) + { + /* Vendor extension, ignore. */ + line_ptr = extended_end; + break; + } + switch (extended_op) + { + case DW_LNE_end_sequence: + state_machine.handle_end_sequence (); + end_sequence = true; + break; + case DW_LNE_set_address: + { + CORE_ADDR address + = cu->header.read_address (abfd, line_ptr, &bytes_read); + line_ptr += bytes_read; + + state_machine.check_line_address (cu, line_ptr, + lowpc - baseaddr, address); + state_machine.handle_set_address (baseaddr, address); + } + break; + case DW_LNE_define_file: + { + const char *cur_file; + unsigned int mod_time, length; + dir_index dindex; + + cur_file = read_direct_string (abfd, line_ptr, + &bytes_read); + line_ptr += bytes_read; + dindex = (dir_index) + read_unsigned_leb128 (abfd, line_ptr, &bytes_read); + line_ptr += bytes_read; + mod_time = + read_unsigned_leb128 (abfd, line_ptr, &bytes_read); + line_ptr += bytes_read; + length = + read_unsigned_leb128 (abfd, line_ptr, &bytes_read); + line_ptr += bytes_read; + lh->add_file_name (cur_file, dindex, mod_time, length); + } + break; + case DW_LNE_set_discriminator: + { + /* The discriminator is not interesting to the + debugger; just ignore it. We still need to + check its value though: + if there are consecutive entries for the same + (non-prologue) line we want to coalesce them. + PR 17276. */ + unsigned int discr + = read_unsigned_leb128 (abfd, line_ptr, &bytes_read); + line_ptr += bytes_read; + + state_machine.handle_set_discriminator (discr); + } + break; + default: + complaint (_("mangled .debug_line section")); + return; + } + /* Make sure that we parsed the extended op correctly. If e.g. + we expected a different address size than the producer used, + we may have read the wrong number of bytes. */ + if (line_ptr != extended_end) + { + complaint (_("mangled .debug_line section")); + return; + } + break; + case DW_LNS_copy: + state_machine.handle_copy (); + break; + case DW_LNS_advance_pc: + { + CORE_ADDR adjust + = read_unsigned_leb128 (abfd, line_ptr, &bytes_read); + line_ptr += bytes_read; + + state_machine.handle_advance_pc (adjust); + } + break; + case DW_LNS_advance_line: + { + int line_delta + = read_signed_leb128 (abfd, line_ptr, &bytes_read); + line_ptr += bytes_read; + + state_machine.handle_advance_line (line_delta); + } + break; + case DW_LNS_set_file: + { + file_name_index file + = (file_name_index) read_unsigned_leb128 (abfd, line_ptr, + &bytes_read); + line_ptr += bytes_read; + + state_machine.handle_set_file (file); + } + break; + case DW_LNS_set_column: + (void) read_unsigned_leb128 (abfd, line_ptr, &bytes_read); + line_ptr += bytes_read; + break; + case DW_LNS_negate_stmt: + state_machine.handle_negate_stmt (); + break; + case DW_LNS_set_basic_block: + break; + /* Add to the address register of the state machine the + address increment value corresponding to special opcode + 255. I.e., this value is scaled by the minimum + instruction length since special opcode 255 would have + scaled the increment. */ + case DW_LNS_const_add_pc: + state_machine.handle_const_add_pc (); + break; + case DW_LNS_fixed_advance_pc: + { + CORE_ADDR addr_adj = read_2_bytes (abfd, line_ptr); + line_ptr += 2; + + state_machine.handle_fixed_advance_pc (addr_adj); + } + break; + default: + { + /* Unknown standard opcode, ignore it. */ + int i; + + for (i = 0; i < lh->standard_opcode_lengths[op_code]; i++) + { + (void) read_unsigned_leb128 (abfd, line_ptr, &bytes_read); + line_ptr += bytes_read; + } + } + } + } + + if (!end_sequence) + dwarf2_debug_line_missing_end_sequence_complaint (); + + /* We got a DW_LNE_end_sequence (or we ran off the end of the buffer, + in which case we still finish recording the last line). */ + state_machine.record_line (true); + } +} + +/* Decode the Line Number Program (LNP) for the given line_header + structure and CU. The actual information extracted and the type + of structures created from the LNP depends on the value of PST. + + 1. If PST is NULL, then this procedure uses the data from the program + to create all necessary symbol tables, and their linetables. + + 2. If PST is not NULL, this procedure reads the program to determine + the list of files included by the unit represented by PST, and + builds all the associated partial symbol tables. + + COMP_DIR is the compilation directory (DW_AT_comp_dir) or NULL if unknown. + It is used for relative paths in the line table. + NOTE: When processing partial symtabs (pst != NULL), + comp_dir == pst->dirname. + + NOTE: It is important that psymtabs have the same file name (via strcmp) + as the corresponding symtab. Since COMP_DIR is not used in the name of the + symtab we don't use it in the name of the psymtabs we create. + E.g. expand_line_sal requires this when finding psymtabs to expand. + A good testcase for this is mb-inline.exp. + + LOWPC is the lowest address in CU (or 0 if not known). + + Boolean DECODE_MAPPING specifies we need to fully decode .debug_line + for its PC<->lines mapping information. Otherwise only the filename + table is read in. */ + +static void +dwarf_decode_lines (struct line_header *lh, const char *comp_dir, + struct dwarf2_cu *cu, dwarf2_psymtab *pst, + CORE_ADDR lowpc, int decode_mapping) +{ + struct objfile *objfile = cu->per_objfile->objfile; + const int decode_for_pst_p = (pst != NULL); + + if (decode_mapping) + dwarf_decode_lines_1 (lh, cu, decode_for_pst_p, lowpc); + + if (decode_for_pst_p) + { + /* Now that we're done scanning the Line Header Program, we can + create the psymtab of each included file. */ + for (auto &file_entry : lh->file_names ()) + if (file_entry.included_p == 1) + { + gdb::unique_xmalloc_ptr<char> name_holder; + const char *include_name = + psymtab_include_file_name (lh, file_entry, pst, + comp_dir, &name_holder); + if (include_name != NULL) + dwarf2_create_include_psymtab (include_name, pst, objfile); + } + } + else + { + /* Make sure a symtab is created for every file, even files + which contain only variables (i.e. no code with associated + line numbers). */ + buildsym_compunit *builder = cu->get_builder (); + struct compunit_symtab *cust = builder->get_compunit_symtab (); + + for (auto &fe : lh->file_names ()) + { + dwarf2_start_subfile (cu, fe.name, fe.include_dir (lh)); + if (builder->get_current_subfile ()->symtab == NULL) + { + builder->get_current_subfile ()->symtab + = allocate_symtab (cust, + builder->get_current_subfile ()->name); + } + fe.symtab = builder->get_current_subfile ()->symtab; + } + } +} + +/* Start a subfile for DWARF. FILENAME is the name of the file and + DIRNAME the name of the source directory which contains FILENAME + or NULL if not known. + This routine tries to keep line numbers from identical absolute and + relative file names in a common subfile. + + Using the `list' example from the GDB testsuite, which resides in + /srcdir and compiling it with Irix6.2 cc in /compdir using a filename + of /srcdir/list0.c yields the following debugging information for list0.c: + + DW_AT_name: /srcdir/list0.c + DW_AT_comp_dir: /compdir + files.files[0].name: list0.h + files.files[0].dir: /srcdir + files.files[1].name: list0.c + files.files[1].dir: /srcdir + + The line number information for list0.c has to end up in a single + subfile, so that `break /srcdir/list0.c:1' works as expected. + start_subfile will ensure that this happens provided that we pass the + concatenation of files.files[1].dir and files.files[1].name as the + subfile's name. */ + +static void +dwarf2_start_subfile (struct dwarf2_cu *cu, const char *filename, + const char *dirname) +{ + gdb::unique_xmalloc_ptr<char> copy; + + /* In order not to lose the line information directory, + we concatenate it to the filename when it makes sense. + Note that the Dwarf3 standard says (speaking of filenames in line + information): ``The directory index is ignored for file names + that represent full path names''. Thus ignoring dirname in the + `else' branch below isn't an issue. */ + + if (!IS_ABSOLUTE_PATH (filename) && dirname != NULL) + { + copy.reset (concat (dirname, SLASH_STRING, filename, (char *) NULL)); + filename = copy.get (); + } + + cu->get_builder ()->start_subfile (filename); +} + +/* Start a symtab for DWARF. NAME, COMP_DIR, LOW_PC are passed to the + buildsym_compunit constructor. */ + +struct compunit_symtab * +dwarf2_cu::start_symtab (const char *name, const char *comp_dir, + CORE_ADDR low_pc) +{ + gdb_assert (m_builder == nullptr); + + m_builder.reset (new struct buildsym_compunit + (this->per_objfile->objfile, + name, comp_dir, language, low_pc)); + + list_in_scope = get_builder ()->get_file_symbols (); + + get_builder ()->record_debugformat ("DWARF 2"); + get_builder ()->record_producer (producer); + + processing_has_namespace_info = false; + + return get_builder ()->get_compunit_symtab (); +} + +static void +var_decode_location (struct attribute *attr, struct symbol *sym, + struct dwarf2_cu *cu) +{ + struct objfile *objfile = cu->per_objfile->objfile; + struct comp_unit_head *cu_header = &cu->header; + + /* NOTE drow/2003-01-30: There used to be a comment and some special + code here to turn a symbol with DW_AT_external and a + SYMBOL_VALUE_ADDRESS of 0 into a LOC_UNRESOLVED symbol. This was + necessary for platforms (maybe Alpha, certainly PowerPC GNU/Linux + with some versions of binutils) where shared libraries could have + relocations against symbols in their debug information - the + minimal symbol would have the right address, but the debug info + would not. It's no longer necessary, because we will explicitly + apply relocations when we read in the debug information now. */ + + /* A DW_AT_location attribute with no contents indicates that a + variable has been optimized away. */ + if (attr->form_is_block () && DW_BLOCK (attr)->size == 0) + { + SYMBOL_ACLASS_INDEX (sym) = LOC_OPTIMIZED_OUT; + return; + } + + /* Handle one degenerate form of location expression specially, to + preserve GDB's previous behavior when section offsets are + specified. If this is just a DW_OP_addr, DW_OP_addrx, or + DW_OP_GNU_addr_index then mark this symbol as LOC_STATIC. */ + + if (attr->form_is_block () + && ((DW_BLOCK (attr)->data[0] == DW_OP_addr + && DW_BLOCK (attr)->size == 1 + cu_header->addr_size) + || ((DW_BLOCK (attr)->data[0] == DW_OP_GNU_addr_index + || DW_BLOCK (attr)->data[0] == DW_OP_addrx) + && (DW_BLOCK (attr)->size + == 1 + leb128_size (&DW_BLOCK (attr)->data[1]))))) + { + unsigned int dummy; + + if (DW_BLOCK (attr)->data[0] == DW_OP_addr) + SET_SYMBOL_VALUE_ADDRESS + (sym, cu->header.read_address (objfile->obfd, + DW_BLOCK (attr)->data + 1, + &dummy)); + else + SET_SYMBOL_VALUE_ADDRESS + (sym, read_addr_index_from_leb128 (cu, DW_BLOCK (attr)->data + 1, + &dummy)); + SYMBOL_ACLASS_INDEX (sym) = LOC_STATIC; + fixup_symbol_section (sym, objfile); + SET_SYMBOL_VALUE_ADDRESS + (sym, + SYMBOL_VALUE_ADDRESS (sym) + + objfile->section_offsets[SYMBOL_SECTION (sym)]); + return; + } + + /* NOTE drow/2002-01-30: It might be worthwhile to have a static + expression evaluator, and use LOC_COMPUTED only when necessary + (i.e. when the value of a register or memory location is + referenced, or a thread-local block, etc.). Then again, it might + not be worthwhile. I'm assuming that it isn't unless performance + or memory numbers show me otherwise. */ + + dwarf2_symbol_mark_computed (attr, sym, cu, 0); + + if (SYMBOL_COMPUTED_OPS (sym)->location_has_loclist) + cu->has_loclist = true; +} + +/* Given a pointer to a DWARF information entry, figure out if we need + to make a symbol table entry for it, and if so, create a new entry + and return a pointer to it. + If TYPE is NULL, determine symbol type from the die, otherwise + used the passed type. + If SPACE is not NULL, use it to hold the new symbol. If it is + NULL, allocate a new symbol on the objfile's obstack. */ + +static struct symbol * +new_symbol (struct die_info *die, struct type *type, struct dwarf2_cu *cu, + struct symbol *space) +{ + dwarf2_per_objfile *per_objfile = cu->per_objfile; + struct objfile *objfile = per_objfile->objfile; + struct gdbarch *gdbarch = objfile->arch (); + struct symbol *sym = NULL; + const char *name; + struct attribute *attr = NULL; + struct attribute *attr2 = NULL; + CORE_ADDR baseaddr; + struct pending **list_to_add = NULL; + + int inlined_func = (die->tag == DW_TAG_inlined_subroutine); + + baseaddr = objfile->text_section_offset (); + + name = dwarf2_name (die, cu); + if (name) + { + int suppress_add = 0; + + if (space) + sym = space; + else + sym = new (&objfile->objfile_obstack) symbol; + OBJSTAT (objfile, n_syms++); + + /* Cache this symbol's name and the name's demangled form (if any). */ + sym->set_language (cu->language, &objfile->objfile_obstack); + /* Fortran does not have mangling standard and the mangling does differ + between gfortran, iFort etc. */ + const char *physname + = (cu->language == language_fortran + ? dwarf2_full_name (name, die, cu) + : dwarf2_physname (name, die, cu)); + const char *linkagename = dw2_linkage_name (die, cu); + + if (linkagename == nullptr || cu->language == language_ada) + sym->set_linkage_name (physname); + else + { + sym->set_demangled_name (physname, &objfile->objfile_obstack); + sym->set_linkage_name (linkagename); + } + + /* Default assumptions. + Use the passed type or decode it from the die. */ + SYMBOL_DOMAIN (sym) = VAR_DOMAIN; + SYMBOL_ACLASS_INDEX (sym) = LOC_OPTIMIZED_OUT; + if (type != NULL) + SYMBOL_TYPE (sym) = type; + else + SYMBOL_TYPE (sym) = die_type (die, cu); + attr = dwarf2_attr (die, + inlined_func ? DW_AT_call_line : DW_AT_decl_line, + cu); + if (attr != nullptr) + { + SYMBOL_LINE (sym) = DW_UNSND (attr); + } + + attr = dwarf2_attr (die, + inlined_func ? DW_AT_call_file : DW_AT_decl_file, + cu); + if (attr != nullptr) + { + file_name_index file_index = (file_name_index) DW_UNSND (attr); + struct file_entry *fe; + + if (cu->line_header != NULL) + fe = cu->line_header->file_name_at (file_index); + else + fe = NULL; + + if (fe == NULL) + complaint (_("file index out of range")); + else + symbol_set_symtab (sym, fe->symtab); + } + + switch (die->tag) + { + case DW_TAG_label: + attr = dwarf2_attr (die, DW_AT_low_pc, cu); + if (attr != nullptr) + { + CORE_ADDR addr; + + addr = attr->value_as_address (); + addr = gdbarch_adjust_dwarf2_addr (gdbarch, addr + baseaddr); + SET_SYMBOL_VALUE_ADDRESS (sym, addr); + SYMBOL_ACLASS_INDEX (sym) = LOC_LABEL; + } + else + SYMBOL_ACLASS_INDEX (sym) = LOC_OPTIMIZED_OUT; + SYMBOL_TYPE (sym) = objfile_type (objfile)->builtin_core_addr; + SYMBOL_DOMAIN (sym) = LABEL_DOMAIN; + add_symbol_to_list (sym, cu->list_in_scope); + break; + case DW_TAG_subprogram: + /* SYMBOL_BLOCK_VALUE (sym) will be filled in later by + finish_block. */ + SYMBOL_ACLASS_INDEX (sym) = LOC_BLOCK; + attr2 = dwarf2_attr (die, DW_AT_external, cu); + if ((attr2 && (DW_UNSND (attr2) != 0)) + || cu->language == language_ada + || cu->language == language_fortran) + { + /* Subprograms marked external are stored as a global symbol. + Ada and Fortran subprograms, whether marked external or + not, are always stored as a global symbol, because we want + to be able to access them globally. For instance, we want + to be able to break on a nested subprogram without having + to specify the context. */ + list_to_add = cu->get_builder ()->get_global_symbols (); + } + else + { + list_to_add = cu->list_in_scope; + } + break; + case DW_TAG_inlined_subroutine: + /* SYMBOL_BLOCK_VALUE (sym) will be filled in later by + finish_block. */ + SYMBOL_ACLASS_INDEX (sym) = LOC_BLOCK; + SYMBOL_INLINED (sym) = 1; + list_to_add = cu->list_in_scope; + break; + case DW_TAG_template_value_param: + suppress_add = 1; + /* Fall through. */ + case DW_TAG_constant: + case DW_TAG_variable: + case DW_TAG_member: + /* Compilation with minimal debug info may result in + variables with missing type entries. Change the + misleading `void' type to something sensible. */ + if (SYMBOL_TYPE (sym)->code () == TYPE_CODE_VOID) + SYMBOL_TYPE (sym) = objfile_type (objfile)->builtin_int; + + attr = dwarf2_attr (die, DW_AT_const_value, cu); + /* In the case of DW_TAG_member, we should only be called for + static const members. */ + if (die->tag == DW_TAG_member) + { + /* dwarf2_add_field uses die_is_declaration, + so we do the same. */ + gdb_assert (die_is_declaration (die, cu)); + gdb_assert (attr); + } + if (attr != nullptr) + { + dwarf2_const_value (attr, sym, cu); + attr2 = dwarf2_attr (die, DW_AT_external, cu); + if (!suppress_add) + { + if (attr2 && (DW_UNSND (attr2) != 0)) + list_to_add = cu->get_builder ()->get_global_symbols (); + else + list_to_add = cu->list_in_scope; + } + break; + } + attr = dwarf2_attr (die, DW_AT_location, cu); + if (attr != nullptr) + { + var_decode_location (attr, sym, cu); + attr2 = dwarf2_attr (die, DW_AT_external, cu); + + /* Fortran explicitly imports any global symbols to the local + scope by DW_TAG_common_block. */ + if (cu->language == language_fortran && die->parent + && die->parent->tag == DW_TAG_common_block) + attr2 = NULL; + + if (SYMBOL_CLASS (sym) == LOC_STATIC + && SYMBOL_VALUE_ADDRESS (sym) == 0 + && !per_objfile->per_bfd->has_section_at_zero) + { + /* When a static variable is eliminated by the linker, + the corresponding debug information is not stripped + out, but the variable address is set to null; + do not add such variables into symbol table. */ + } + else if (attr2 && (DW_UNSND (attr2) != 0)) + { + if (SYMBOL_CLASS (sym) == LOC_STATIC + && (objfile->flags & OBJF_MAINLINE) == 0 + && per_objfile->per_bfd->can_copy) + { + /* A global static variable might be subject to + copy relocation. We first check for a local + minsym, though, because maybe the symbol was + marked hidden, in which case this would not + apply. */ + bound_minimal_symbol found + = (lookup_minimal_symbol_linkage + (sym->linkage_name (), objfile)); + if (found.minsym != nullptr) + sym->maybe_copied = 1; + } + + /* A variable with DW_AT_external is never static, + but it may be block-scoped. */ + list_to_add + = ((cu->list_in_scope + == cu->get_builder ()->get_file_symbols ()) + ? cu->get_builder ()->get_global_symbols () + : cu->list_in_scope); + } + else + list_to_add = cu->list_in_scope; + } + else + { + /* We do not know the address of this symbol. + If it is an external symbol and we have type information + for it, enter the symbol as a LOC_UNRESOLVED symbol. + The address of the variable will then be determined from + the minimal symbol table whenever the variable is + referenced. */ + attr2 = dwarf2_attr (die, DW_AT_external, cu); + + /* Fortran explicitly imports any global symbols to the local + scope by DW_TAG_common_block. */ + if (cu->language == language_fortran && die->parent + && die->parent->tag == DW_TAG_common_block) + { + /* SYMBOL_CLASS doesn't matter here because + read_common_block is going to reset it. */ + if (!suppress_add) + list_to_add = cu->list_in_scope; + } + else if (attr2 && (DW_UNSND (attr2) != 0) + && dwarf2_attr (die, DW_AT_type, cu) != NULL) + { + /* A variable with DW_AT_external is never static, but it + may be block-scoped. */ + list_to_add + = ((cu->list_in_scope + == cu->get_builder ()->get_file_symbols ()) + ? cu->get_builder ()->get_global_symbols () + : cu->list_in_scope); + + SYMBOL_ACLASS_INDEX (sym) = LOC_UNRESOLVED; + } + else if (!die_is_declaration (die, cu)) + { + /* Use the default LOC_OPTIMIZED_OUT class. */ + gdb_assert (SYMBOL_CLASS (sym) == LOC_OPTIMIZED_OUT); + if (!suppress_add) + list_to_add = cu->list_in_scope; + } + } + break; + case DW_TAG_formal_parameter: + { + /* If we are inside a function, mark this as an argument. If + not, we might be looking at an argument to an inlined function + when we do not have enough information to show inlined frames; + pretend it's a local variable in that case so that the user can + still see it. */ + struct context_stack *curr + = cu->get_builder ()->get_current_context_stack (); + if (curr != nullptr && curr->name != nullptr) + SYMBOL_IS_ARGUMENT (sym) = 1; + attr = dwarf2_attr (die, DW_AT_location, cu); + if (attr != nullptr) + { + var_decode_location (attr, sym, cu); + } + attr = dwarf2_attr (die, DW_AT_const_value, cu); + if (attr != nullptr) + { + dwarf2_const_value (attr, sym, cu); + } + + list_to_add = cu->list_in_scope; + } + break; + case DW_TAG_unspecified_parameters: + /* From varargs functions; gdb doesn't seem to have any + interest in this information, so just ignore it for now. + (FIXME?) */ + break; + case DW_TAG_template_type_param: + suppress_add = 1; + /* Fall through. */ + case DW_TAG_class_type: + case DW_TAG_interface_type: + case DW_TAG_structure_type: + case DW_TAG_union_type: + case DW_TAG_set_type: + case DW_TAG_enumeration_type: + SYMBOL_ACLASS_INDEX (sym) = LOC_TYPEDEF; + SYMBOL_DOMAIN (sym) = STRUCT_DOMAIN; + + { + /* NOTE: carlton/2003-11-10: C++ class symbols shouldn't + really ever be static objects: otherwise, if you try + to, say, break of a class's method and you're in a file + which doesn't mention that class, it won't work unless + the check for all static symbols in lookup_symbol_aux + saves you. See the OtherFileClass tests in + gdb.c++/namespace.exp. */ + + if (!suppress_add) + { + buildsym_compunit *builder = cu->get_builder (); + list_to_add + = (cu->list_in_scope == builder->get_file_symbols () + && cu->language == language_cplus + ? builder->get_global_symbols () + : cu->list_in_scope); + + /* The semantics of C++ state that "struct foo { + ... }" also defines a typedef for "foo". */ + if (cu->language == language_cplus + || cu->language == language_ada + || cu->language == language_d + || cu->language == language_rust) + { + /* The symbol's name is already allocated along + with this objfile, so we don't need to + duplicate it for the type. */ + if (SYMBOL_TYPE (sym)->name () == 0) + SYMBOL_TYPE (sym)->set_name (sym->search_name ()); + } + } + } + break; + case DW_TAG_typedef: + SYMBOL_ACLASS_INDEX (sym) = LOC_TYPEDEF; + SYMBOL_DOMAIN (sym) = VAR_DOMAIN; + list_to_add = cu->list_in_scope; + break; + case DW_TAG_base_type: + case DW_TAG_subrange_type: + SYMBOL_ACLASS_INDEX (sym) = LOC_TYPEDEF; + SYMBOL_DOMAIN (sym) = VAR_DOMAIN; + list_to_add = cu->list_in_scope; + break; + case DW_TAG_enumerator: + attr = dwarf2_attr (die, DW_AT_const_value, cu); + if (attr != nullptr) + { + dwarf2_const_value (attr, sym, cu); + } + { + /* NOTE: carlton/2003-11-10: See comment above in the + DW_TAG_class_type, etc. block. */ + + list_to_add + = (cu->list_in_scope == cu->get_builder ()->get_file_symbols () + && cu->language == language_cplus + ? cu->get_builder ()->get_global_symbols () + : cu->list_in_scope); + } + break; + case DW_TAG_imported_declaration: + case DW_TAG_namespace: + SYMBOL_ACLASS_INDEX (sym) = LOC_TYPEDEF; + list_to_add = cu->get_builder ()->get_global_symbols (); + break; + case DW_TAG_module: + SYMBOL_ACLASS_INDEX (sym) = LOC_TYPEDEF; + SYMBOL_DOMAIN (sym) = MODULE_DOMAIN; + list_to_add = cu->get_builder ()->get_global_symbols (); + break; + case DW_TAG_common_block: + SYMBOL_ACLASS_INDEX (sym) = LOC_COMMON_BLOCK; + SYMBOL_DOMAIN (sym) = COMMON_BLOCK_DOMAIN; + add_symbol_to_list (sym, cu->list_in_scope); + break; + default: + /* Not a tag we recognize. Hopefully we aren't processing + trash data, but since we must specifically ignore things + we don't recognize, there is nothing else we should do at + this point. */ + complaint (_("unsupported tag: '%s'"), + dwarf_tag_name (die->tag)); + break; + } + + if (suppress_add) + { + sym->hash_next = objfile->template_symbols; + objfile->template_symbols = sym; + list_to_add = NULL; + } + + if (list_to_add != NULL) + add_symbol_to_list (sym, list_to_add); + + /* For the benefit of old versions of GCC, check for anonymous + namespaces based on the demangled name. */ + if (!cu->processing_has_namespace_info + && cu->language == language_cplus) + cp_scan_for_anonymous_namespaces (cu->get_builder (), sym, objfile); + } + return (sym); +} + +/* Given an attr with a DW_FORM_dataN value in host byte order, + zero-extend it as appropriate for the symbol's type. The DWARF + standard (v4) is not entirely clear about the meaning of using + DW_FORM_dataN for a constant with a signed type, where the type is + wider than the data. The conclusion of a discussion on the DWARF + list was that this is unspecified. We choose to always zero-extend + because that is the interpretation long in use by GCC. */ + +static gdb_byte * +dwarf2_const_value_data (const struct attribute *attr, struct obstack *obstack, + struct dwarf2_cu *cu, LONGEST *value, int bits) +{ + struct objfile *objfile = cu->per_objfile->objfile; + enum bfd_endian byte_order = bfd_big_endian (objfile->obfd) ? + BFD_ENDIAN_BIG : BFD_ENDIAN_LITTLE; + LONGEST l = DW_UNSND (attr); + + if (bits < sizeof (*value) * 8) + { + l &= ((LONGEST) 1 << bits) - 1; + *value = l; + } + else if (bits == sizeof (*value) * 8) + *value = l; + else + { + gdb_byte *bytes = (gdb_byte *) obstack_alloc (obstack, bits / 8); + store_unsigned_integer (bytes, bits / 8, byte_order, l); + return bytes; + } + + return NULL; +} + +/* Read a constant value from an attribute. Either set *VALUE, or if + the value does not fit in *VALUE, set *BYTES - either already + allocated on the objfile obstack, or newly allocated on OBSTACK, + or, set *BATON, if we translated the constant to a location + expression. */ + +static void +dwarf2_const_value_attr (const struct attribute *attr, struct type *type, + const char *name, struct obstack *obstack, + struct dwarf2_cu *cu, + LONGEST *value, const gdb_byte **bytes, + struct dwarf2_locexpr_baton **baton) +{ + dwarf2_per_objfile *per_objfile = cu->per_objfile; + struct objfile *objfile = per_objfile->objfile; + struct comp_unit_head *cu_header = &cu->header; + struct dwarf_block *blk; + enum bfd_endian byte_order = (bfd_big_endian (objfile->obfd) ? + BFD_ENDIAN_BIG : BFD_ENDIAN_LITTLE); + + *value = 0; + *bytes = NULL; + *baton = NULL; + + switch (attr->form) + { + case DW_FORM_addr: + case DW_FORM_addrx: + case DW_FORM_GNU_addr_index: + { + gdb_byte *data; + + if (TYPE_LENGTH (type) != cu_header->addr_size) + dwarf2_const_value_length_mismatch_complaint (name, + cu_header->addr_size, + TYPE_LENGTH (type)); + /* Symbols of this form are reasonably rare, so we just + piggyback on the existing location code rather than writing + a new implementation of symbol_computed_ops. */ + *baton = XOBNEW (obstack, struct dwarf2_locexpr_baton); + (*baton)->per_objfile = per_objfile; + (*baton)->per_cu = cu->per_cu; + gdb_assert ((*baton)->per_cu); + + (*baton)->size = 2 + cu_header->addr_size; + data = (gdb_byte *) obstack_alloc (obstack, (*baton)->size); + (*baton)->data = data; + + data[0] = DW_OP_addr; + store_unsigned_integer (&data[1], cu_header->addr_size, + byte_order, DW_ADDR (attr)); + data[cu_header->addr_size + 1] = DW_OP_stack_value; + } + break; + case DW_FORM_string: + case DW_FORM_strp: + case DW_FORM_strx: + case DW_FORM_GNU_str_index: + case DW_FORM_GNU_strp_alt: + /* DW_STRING is already allocated on the objfile obstack, point + directly to it. */ + *bytes = (const gdb_byte *) DW_STRING (attr); + break; + case DW_FORM_block1: + case DW_FORM_block2: + case DW_FORM_block4: + case DW_FORM_block: + case DW_FORM_exprloc: + case DW_FORM_data16: + blk = DW_BLOCK (attr); + if (TYPE_LENGTH (type) != blk->size) + dwarf2_const_value_length_mismatch_complaint (name, blk->size, + TYPE_LENGTH (type)); + *bytes = blk->data; + break; + + /* The DW_AT_const_value attributes are supposed to carry the + symbol's value "represented as it would be on the target + architecture." By the time we get here, it's already been + converted to host endianness, so we just need to sign- or + zero-extend it as appropriate. */ + case DW_FORM_data1: + *bytes = dwarf2_const_value_data (attr, obstack, cu, value, 8); + break; + case DW_FORM_data2: + *bytes = dwarf2_const_value_data (attr, obstack, cu, value, 16); + break; + case DW_FORM_data4: + *bytes = dwarf2_const_value_data (attr, obstack, cu, value, 32); + break; + case DW_FORM_data8: + *bytes = dwarf2_const_value_data (attr, obstack, cu, value, 64); + break; + + case DW_FORM_sdata: + case DW_FORM_implicit_const: + *value = DW_SND (attr); + break; + + case DW_FORM_udata: + *value = DW_UNSND (attr); + break; + + default: + complaint (_("unsupported const value attribute form: '%s'"), + dwarf_form_name (attr->form)); + *value = 0; + break; + } +} + + +/* Copy constant value from an attribute to a symbol. */ + +static void +dwarf2_const_value (const struct attribute *attr, struct symbol *sym, + struct dwarf2_cu *cu) +{ + struct objfile *objfile = cu->per_objfile->objfile; + LONGEST value; + const gdb_byte *bytes; + struct dwarf2_locexpr_baton *baton; + + dwarf2_const_value_attr (attr, SYMBOL_TYPE (sym), + sym->print_name (), + &objfile->objfile_obstack, cu, + &value, &bytes, &baton); + + if (baton != NULL) + { + SYMBOL_LOCATION_BATON (sym) = baton; + SYMBOL_ACLASS_INDEX (sym) = dwarf2_locexpr_index; + } + else if (bytes != NULL) + { + SYMBOL_VALUE_BYTES (sym) = bytes; + SYMBOL_ACLASS_INDEX (sym) = LOC_CONST_BYTES; + } + else + { + SYMBOL_VALUE (sym) = value; + SYMBOL_ACLASS_INDEX (sym) = LOC_CONST; + } +} + +/* Return the type of the die in question using its DW_AT_type attribute. */ + +static struct type * +die_type (struct die_info *die, struct dwarf2_cu *cu) +{ + struct attribute *type_attr; + + type_attr = dwarf2_attr (die, DW_AT_type, cu); + if (!type_attr) + { + struct objfile *objfile = cu->per_objfile->objfile; + /* A missing DW_AT_type represents a void type. */ + return objfile_type (objfile)->builtin_void; + } + + return lookup_die_type (die, type_attr, cu); +} + +/* True iff CU's producer generates GNAT Ada auxiliary information + that allows to find parallel types through that information instead + of having to do expensive parallel lookups by type name. */ + +static int +need_gnat_info (struct dwarf2_cu *cu) +{ + /* Assume that the Ada compiler was GNAT, which always produces + the auxiliary information. */ + return (cu->language == language_ada); +} + +/* Return the auxiliary type of the die in question using its + DW_AT_GNAT_descriptive_type attribute. Returns NULL if the + attribute is not present. */ + +static struct type * +die_descriptive_type (struct die_info *die, struct dwarf2_cu *cu) +{ + struct attribute *type_attr; + + type_attr = dwarf2_attr (die, DW_AT_GNAT_descriptive_type, cu); + if (!type_attr) + return NULL; + + return lookup_die_type (die, type_attr, cu); +} + +/* If DIE has a descriptive_type attribute, then set the TYPE's + descriptive type accordingly. */ + +static void +set_descriptive_type (struct type *type, struct die_info *die, + struct dwarf2_cu *cu) +{ + struct type *descriptive_type = die_descriptive_type (die, cu); + + if (descriptive_type) + { + ALLOCATE_GNAT_AUX_TYPE (type); + TYPE_DESCRIPTIVE_TYPE (type) = descriptive_type; + } +} + +/* Return the containing type of the die in question using its + DW_AT_containing_type attribute. */ + +static struct type * +die_containing_type (struct die_info *die, struct dwarf2_cu *cu) +{ + struct attribute *type_attr; + struct objfile *objfile = cu->per_objfile->objfile; + + type_attr = dwarf2_attr (die, DW_AT_containing_type, cu); + if (!type_attr) + error (_("Dwarf Error: Problem turning containing type into gdb type " + "[in module %s]"), objfile_name (objfile)); + + return lookup_die_type (die, type_attr, cu); +} + +/* Return an error marker type to use for the ill formed type in DIE/CU. */ + +static struct type * +build_error_marker_type (struct dwarf2_cu *cu, struct die_info *die) +{ + dwarf2_per_objfile *per_objfile = cu->per_objfile; + struct objfile *objfile = per_objfile->objfile; + char *saved; + + std::string message + = string_printf (_("<unknown type in %s, CU %s, DIE %s>"), + objfile_name (objfile), + sect_offset_str (cu->header.sect_off), + sect_offset_str (die->sect_off)); + saved = obstack_strdup (&objfile->objfile_obstack, message); + + return init_type (objfile, TYPE_CODE_ERROR, 0, saved); +} + +/* Look up the type of DIE in CU using its type attribute ATTR. + ATTR must be one of: DW_AT_type, DW_AT_GNAT_descriptive_type, + DW_AT_containing_type. + If there is no type substitute an error marker. */ + +static struct type * +lookup_die_type (struct die_info *die, const struct attribute *attr, + struct dwarf2_cu *cu) +{ + dwarf2_per_objfile *per_objfile = cu->per_objfile; + struct objfile *objfile = per_objfile->objfile; + struct type *this_type; + + gdb_assert (attr->name == DW_AT_type + || attr->name == DW_AT_GNAT_descriptive_type + || attr->name == DW_AT_containing_type); + + /* First see if we have it cached. */ + + if (attr->form == DW_FORM_GNU_ref_alt) + { + struct dwarf2_per_cu_data *per_cu; + sect_offset sect_off = attr->get_ref_die_offset (); + + per_cu = dwarf2_find_containing_comp_unit (sect_off, 1, per_objfile); + this_type = get_die_type_at_offset (sect_off, per_cu, per_objfile); + } + else if (attr->form_is_ref ()) + { + sect_offset sect_off = attr->get_ref_die_offset (); + + this_type = get_die_type_at_offset (sect_off, cu->per_cu, per_objfile); + } + else if (attr->form == DW_FORM_ref_sig8) + { + ULONGEST signature = DW_SIGNATURE (attr); + + return get_signatured_type (die, signature, cu); + } + else + { + complaint (_("Dwarf Error: Bad type attribute %s in DIE" + " at %s [in module %s]"), + dwarf_attr_name (attr->name), sect_offset_str (die->sect_off), + objfile_name (objfile)); + return build_error_marker_type (cu, die); + } + + /* If not cached we need to read it in. */ + + if (this_type == NULL) + { + struct die_info *type_die = NULL; + struct dwarf2_cu *type_cu = cu; + + if (attr->form_is_ref ()) + type_die = follow_die_ref (die, attr, &type_cu); + if (type_die == NULL) + return build_error_marker_type (cu, die); + /* If we find the type now, it's probably because the type came + from an inter-CU reference and the type's CU got expanded before + ours. */ + this_type = read_type_die (type_die, type_cu); + } + + /* If we still don't have a type use an error marker. */ + + if (this_type == NULL) + return build_error_marker_type (cu, die); + + return this_type; +} + +/* Return the type in DIE, CU. + Returns NULL for invalid types. + + This first does a lookup in die_type_hash, + and only reads the die in if necessary. + + NOTE: This can be called when reading in partial or full symbols. */ + +static struct type * +read_type_die (struct die_info *die, struct dwarf2_cu *cu) +{ + struct type *this_type; + + this_type = get_die_type (die, cu); + if (this_type) + return this_type; + + return read_type_die_1 (die, cu); +} + +/* Read the type in DIE, CU. + Returns NULL for invalid types. */ + +static struct type * +read_type_die_1 (struct die_info *die, struct dwarf2_cu *cu) +{ + struct type *this_type = NULL; + + switch (die->tag) + { + case DW_TAG_class_type: + case DW_TAG_interface_type: + case DW_TAG_structure_type: + case DW_TAG_union_type: + this_type = read_structure_type (die, cu); + break; + case DW_TAG_enumeration_type: + this_type = read_enumeration_type (die, cu); + break; + case DW_TAG_subprogram: + case DW_TAG_subroutine_type: + case DW_TAG_inlined_subroutine: + this_type = read_subroutine_type (die, cu); + break; + case DW_TAG_array_type: + this_type = read_array_type (die, cu); + break; + case DW_TAG_set_type: + this_type = read_set_type (die, cu); + break; + case DW_TAG_pointer_type: + this_type = read_tag_pointer_type (die, cu); + break; + case DW_TAG_ptr_to_member_type: + this_type = read_tag_ptr_to_member_type (die, cu); + break; + case DW_TAG_reference_type: + this_type = read_tag_reference_type (die, cu, TYPE_CODE_REF); + break; + case DW_TAG_rvalue_reference_type: + this_type = read_tag_reference_type (die, cu, TYPE_CODE_RVALUE_REF); + break; + case DW_TAG_const_type: + this_type = read_tag_const_type (die, cu); + break; + case DW_TAG_volatile_type: + this_type = read_tag_volatile_type (die, cu); + break; + case DW_TAG_restrict_type: + this_type = read_tag_restrict_type (die, cu); + break; + case DW_TAG_string_type: + this_type = read_tag_string_type (die, cu); + break; + case DW_TAG_typedef: + this_type = read_typedef (die, cu); + break; + case DW_TAG_subrange_type: + this_type = read_subrange_type (die, cu); + break; + case DW_TAG_base_type: + this_type = read_base_type (die, cu); + break; + case DW_TAG_unspecified_type: + this_type = read_unspecified_type (die, cu); + break; + case DW_TAG_namespace: + this_type = read_namespace_type (die, cu); + break; + case DW_TAG_module: + this_type = read_module_type (die, cu); + break; + case DW_TAG_atomic_type: + this_type = read_tag_atomic_type (die, cu); + break; + default: + complaint (_("unexpected tag in read_type_die: '%s'"), + dwarf_tag_name (die->tag)); + break; + } + + return this_type; +} + +/* See if we can figure out if the class lives in a namespace. We do + this by looking for a member function; its demangled name will + contain namespace info, if there is any. + Return the computed name or NULL. + Space for the result is allocated on the objfile's obstack. + This is the full-die version of guess_partial_die_structure_name. + In this case we know DIE has no useful parent. */ + +static const char * +guess_full_die_structure_name (struct die_info *die, struct dwarf2_cu *cu) +{ + struct die_info *spec_die; + struct dwarf2_cu *spec_cu; + struct die_info *child; + struct objfile *objfile = cu->per_objfile->objfile; + + spec_cu = cu; + spec_die = die_specification (die, &spec_cu); + if (spec_die != NULL) + { + die = spec_die; + cu = spec_cu; + } + + for (child = die->child; + child != NULL; + child = child->sibling) + { + if (child->tag == DW_TAG_subprogram) + { + const char *linkage_name = dw2_linkage_name (child, cu); + + if (linkage_name != NULL) + { + gdb::unique_xmalloc_ptr<char> actual_name + (cu->language_defn->class_name_from_physname (linkage_name)); + const char *name = NULL; + + if (actual_name != NULL) + { + const char *die_name = dwarf2_name (die, cu); + + if (die_name != NULL + && strcmp (die_name, actual_name.get ()) != 0) + { + /* Strip off the class name from the full name. + We want the prefix. */ + int die_name_len = strlen (die_name); + int actual_name_len = strlen (actual_name.get ()); + const char *ptr = actual_name.get (); + + /* Test for '::' as a sanity check. */ + if (actual_name_len > die_name_len + 2 + && ptr[actual_name_len - die_name_len - 1] == ':') + name = obstack_strndup ( + &objfile->per_bfd->storage_obstack, + ptr, actual_name_len - die_name_len - 2); + } + } + return name; + } + } + } + + return NULL; +} + +/* GCC might emit a nameless typedef that has a linkage name. Determine the + prefix part in such case. See + http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47510. */ + +static const char * +anonymous_struct_prefix (struct die_info *die, struct dwarf2_cu *cu) +{ + struct attribute *attr; + const char *base; + + if (die->tag != DW_TAG_class_type && die->tag != DW_TAG_interface_type + && die->tag != DW_TAG_structure_type && die->tag != DW_TAG_union_type) + return NULL; + + if (dwarf2_string_attr (die, DW_AT_name, cu) != NULL) + return NULL; + + attr = dw2_linkage_name_attr (die, cu); + if (attr == NULL || DW_STRING (attr) == NULL) + return NULL; + + /* dwarf2_name had to be already called. */ + gdb_assert (DW_STRING_IS_CANONICAL (attr)); + + /* Strip the base name, keep any leading namespaces/classes. */ + base = strrchr (DW_STRING (attr), ':'); + if (base == NULL || base == DW_STRING (attr) || base[-1] != ':') + return ""; + + struct objfile *objfile = cu->per_objfile->objfile; + return obstack_strndup (&objfile->per_bfd->storage_obstack, + DW_STRING (attr), + &base[-1] - DW_STRING (attr)); +} + +/* Return the name of the namespace/class that DIE is defined within, + or "" if we can't tell. The caller should not xfree the result. + + For example, if we're within the method foo() in the following + code: + + namespace N { + class C { + void foo () { + } + }; + } + + then determine_prefix on foo's die will return "N::C". */ + +static const char * +determine_prefix (struct die_info *die, struct dwarf2_cu *cu) +{ + dwarf2_per_objfile *per_objfile = cu->per_objfile; + struct die_info *parent, *spec_die; + struct dwarf2_cu *spec_cu; + struct type *parent_type; + const char *retval; + + if (cu->language != language_cplus + && cu->language != language_fortran && cu->language != language_d + && cu->language != language_rust) + return ""; + + retval = anonymous_struct_prefix (die, cu); + if (retval) + return retval; + + /* We have to be careful in the presence of DW_AT_specification. + For example, with GCC 3.4, given the code + + namespace N { + void foo() { + // Definition of N::foo. + } + } + + then we'll have a tree of DIEs like this: + + 1: DW_TAG_compile_unit + 2: DW_TAG_namespace // N + 3: DW_TAG_subprogram // declaration of N::foo + 4: DW_TAG_subprogram // definition of N::foo + DW_AT_specification // refers to die #3 + + Thus, when processing die #4, we have to pretend that we're in + the context of its DW_AT_specification, namely the contex of die + #3. */ + spec_cu = cu; + spec_die = die_specification (die, &spec_cu); + if (spec_die == NULL) + parent = die->parent; + else + { + parent = spec_die->parent; + cu = spec_cu; + } + + if (parent == NULL) + return ""; + else if (parent->building_fullname) + { + const char *name; + const char *parent_name; + + /* It has been seen on RealView 2.2 built binaries, + DW_TAG_template_type_param types actually _defined_ as + children of the parent class: + + enum E {}; + template class <class Enum> Class{}; + Class<enum E> class_e; + + 1: DW_TAG_class_type (Class) + 2: DW_TAG_enumeration_type (E) + 3: DW_TAG_enumerator (enum1:0) + 3: DW_TAG_enumerator (enum2:1) + ... + 2: DW_TAG_template_type_param + DW_AT_type DW_FORM_ref_udata (E) + + Besides being broken debug info, it can put GDB into an + infinite loop. Consider: + + When we're building the full name for Class<E>, we'll start + at Class, and go look over its template type parameters, + finding E. We'll then try to build the full name of E, and + reach here. We're now trying to build the full name of E, + and look over the parent DIE for containing scope. In the + broken case, if we followed the parent DIE of E, we'd again + find Class, and once again go look at its template type + arguments, etc., etc. Simply don't consider such parent die + as source-level parent of this die (it can't be, the language + doesn't allow it), and break the loop here. */ + name = dwarf2_name (die, cu); + parent_name = dwarf2_name (parent, cu); + complaint (_("template param type '%s' defined within parent '%s'"), + name ? name : "<unknown>", + parent_name ? parent_name : "<unknown>"); + return ""; + } + else + switch (parent->tag) + { + case DW_TAG_namespace: + parent_type = read_type_die (parent, cu); + /* GCC 4.0 and 4.1 had a bug (PR c++/28460) where they generated bogus + DW_TAG_namespace DIEs with a name of "::" for the global namespace. + Work around this problem here. */ + if (cu->language == language_cplus + && strcmp (parent_type->name (), "::") == 0) + return ""; + /* We give a name to even anonymous namespaces. */ + return parent_type->name (); + case DW_TAG_class_type: + case DW_TAG_interface_type: + case DW_TAG_structure_type: + case DW_TAG_union_type: + case DW_TAG_module: + parent_type = read_type_die (parent, cu); + if (parent_type->name () != NULL) + return parent_type->name (); + else + /* An anonymous structure is only allowed non-static data + members; no typedefs, no member functions, et cetera. + So it does not need a prefix. */ + return ""; + case DW_TAG_compile_unit: + case DW_TAG_partial_unit: + /* gcc-4.5 -gdwarf-4 can drop the enclosing namespace. Cope. */ + if (cu->language == language_cplus + && !per_objfile->per_bfd->types.empty () + && die->child != NULL + && (die->tag == DW_TAG_class_type + || die->tag == DW_TAG_structure_type + || die->tag == DW_TAG_union_type)) + { + const char *name = guess_full_die_structure_name (die, cu); + if (name != NULL) + return name; + } + return ""; + case DW_TAG_subprogram: + /* Nested subroutines in Fortran get a prefix with the name + of the parent's subroutine. */ + if (cu->language == language_fortran) + { + if ((die->tag == DW_TAG_subprogram) + && (dwarf2_name (parent, cu) != NULL)) + return dwarf2_name (parent, cu); + } + return determine_prefix (parent, cu); + case DW_TAG_enumeration_type: + parent_type = read_type_die (parent, cu); + if (TYPE_DECLARED_CLASS (parent_type)) + { + if (parent_type->name () != NULL) + return parent_type->name (); + return ""; + } + /* Fall through. */ + default: + return determine_prefix (parent, cu); + } +} + +/* Return a newly-allocated string formed by concatenating PREFIX and SUFFIX + with appropriate separator. If PREFIX or SUFFIX is NULL or empty, then + simply copy the SUFFIX or PREFIX, respectively. If OBS is non-null, perform + an obconcat, otherwise allocate storage for the result. The CU argument is + used to determine the language and hence, the appropriate separator. */ + +#define MAX_SEP_LEN 7 /* strlen ("__") + strlen ("_MOD_") */ + +static char * +typename_concat (struct obstack *obs, const char *prefix, const char *suffix, + int physname, struct dwarf2_cu *cu) +{ + const char *lead = ""; + const char *sep; + + if (suffix == NULL || suffix[0] == '\0' + || prefix == NULL || prefix[0] == '\0') + sep = ""; + else if (cu->language == language_d) + { + /* For D, the 'main' function could be defined in any module, but it + should never be prefixed. */ + if (strcmp (suffix, "D main") == 0) + { + prefix = ""; + sep = ""; + } + else + sep = "."; + } + else if (cu->language == language_fortran && physname) + { + /* This is gfortran specific mangling. Normally DW_AT_linkage_name or + DW_AT_MIPS_linkage_name is preferred and used instead. */ + + lead = "__"; + sep = "_MOD_"; + } + else + sep = "::"; + + if (prefix == NULL) + prefix = ""; + if (suffix == NULL) + suffix = ""; + + if (obs == NULL) + { + char *retval + = ((char *) + xmalloc (strlen (prefix) + MAX_SEP_LEN + strlen (suffix) + 1)); + + strcpy (retval, lead); + strcat (retval, prefix); + strcat (retval, sep); + strcat (retval, suffix); + return retval; + } + else + { + /* We have an obstack. */ + return obconcat (obs, lead, prefix, sep, suffix, (char *) NULL); + } +} + +/* Get name of a die, return NULL if not found. */ + +static const char * +dwarf2_canonicalize_name (const char *name, struct dwarf2_cu *cu, + struct objfile *objfile) +{ + if (name && cu->language == language_cplus) + { + gdb::unique_xmalloc_ptr<char> canon_name + = cp_canonicalize_string (name); + + if (canon_name != nullptr) + name = objfile->intern (canon_name.get ()); + } + + return name; +} + +/* Get name of a die, return NULL if not found. + Anonymous namespaces are converted to their magic string. */ + +static const char * +dwarf2_name (struct die_info *die, struct dwarf2_cu *cu) +{ + struct attribute *attr; + struct objfile *objfile = cu->per_objfile->objfile; + + attr = dwarf2_attr (die, DW_AT_name, cu); + if ((!attr || !DW_STRING (attr)) + && die->tag != DW_TAG_namespace + && die->tag != DW_TAG_class_type + && die->tag != DW_TAG_interface_type + && die->tag != DW_TAG_structure_type + && die->tag != DW_TAG_union_type) + return NULL; + + switch (die->tag) + { + case DW_TAG_compile_unit: + case DW_TAG_partial_unit: + /* Compilation units have a DW_AT_name that is a filename, not + a source language identifier. */ + case DW_TAG_enumeration_type: + case DW_TAG_enumerator: + /* These tags always have simple identifiers already; no need + to canonicalize them. */ + return DW_STRING (attr); + + case DW_TAG_namespace: + if (attr != NULL && DW_STRING (attr) != NULL) + return DW_STRING (attr); + return CP_ANONYMOUS_NAMESPACE_STR; + + case DW_TAG_class_type: + case DW_TAG_interface_type: + case DW_TAG_structure_type: + case DW_TAG_union_type: + /* Some GCC versions emit spurious DW_AT_name attributes for unnamed + structures or unions. These were of the form "._%d" in GCC 4.1, + or simply "<anonymous struct>" or "<anonymous union>" in GCC 4.3 + and GCC 4.4. We work around this problem by ignoring these. */ + if (attr && DW_STRING (attr) + && (startswith (DW_STRING (attr), "._") + || startswith (DW_STRING (attr), "<anonymous"))) + return NULL; + + /* GCC might emit a nameless typedef that has a linkage name. See + http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47510. */ + if (!attr || DW_STRING (attr) == NULL) + { + attr = dw2_linkage_name_attr (die, cu); + if (attr == NULL || DW_STRING (attr) == NULL) + return NULL; + + /* Avoid demangling DW_STRING (attr) the second time on a second + call for the same DIE. */ + if (!DW_STRING_IS_CANONICAL (attr)) + { + gdb::unique_xmalloc_ptr<char> demangled + (gdb_demangle (DW_STRING (attr), DMGL_TYPES)); + if (demangled == nullptr) + return nullptr; + + DW_STRING (attr) = objfile->intern (demangled.get ()); + DW_STRING_IS_CANONICAL (attr) = 1; + } + + /* Strip any leading namespaces/classes, keep only the base name. + DW_AT_name for named DIEs does not contain the prefixes. */ + const char *base = strrchr (DW_STRING (attr), ':'); + if (base && base > DW_STRING (attr) && base[-1] == ':') + return &base[1]; + else + return DW_STRING (attr); + } + break; + + default: + break; + } + + if (!DW_STRING_IS_CANONICAL (attr)) + { + DW_STRING (attr) = dwarf2_canonicalize_name (DW_STRING (attr), cu, + objfile); + DW_STRING_IS_CANONICAL (attr) = 1; + } + return DW_STRING (attr); +} + +/* Return the die that this die in an extension of, or NULL if there + is none. *EXT_CU is the CU containing DIE on input, and the CU + containing the return value on output. */ + +static struct die_info * +dwarf2_extension (struct die_info *die, struct dwarf2_cu **ext_cu) +{ + struct attribute *attr; + + attr = dwarf2_attr (die, DW_AT_extension, *ext_cu); + if (attr == NULL) + return NULL; + + return follow_die_ref (die, attr, ext_cu); +} + +static void +dump_die_shallow (struct ui_file *f, int indent, struct die_info *die) +{ + unsigned int i; + + print_spaces (indent, f); + fprintf_unfiltered (f, "Die: %s (abbrev %d, offset %s)\n", + dwarf_tag_name (die->tag), die->abbrev, + sect_offset_str (die->sect_off)); + + if (die->parent != NULL) + { + print_spaces (indent, f); + fprintf_unfiltered (f, " parent at offset: %s\n", + sect_offset_str (die->parent->sect_off)); + } + + print_spaces (indent, f); + fprintf_unfiltered (f, " has children: %s\n", + dwarf_bool_name (die->child != NULL)); + + print_spaces (indent, f); + fprintf_unfiltered (f, " attributes:\n"); + + for (i = 0; i < die->num_attrs; ++i) + { + print_spaces (indent, f); + fprintf_unfiltered (f, " %s (%s) ", + dwarf_attr_name (die->attrs[i].name), + dwarf_form_name (die->attrs[i].form)); + + switch (die->attrs[i].form) + { + case DW_FORM_addr: + case DW_FORM_addrx: + case DW_FORM_GNU_addr_index: + fprintf_unfiltered (f, "address: "); + fputs_filtered (hex_string (DW_ADDR (&die->attrs[i])), f); + break; + case DW_FORM_block2: + case DW_FORM_block4: + case DW_FORM_block: + case DW_FORM_block1: + fprintf_unfiltered (f, "block: size %s", + pulongest (DW_BLOCK (&die->attrs[i])->size)); + break; + case DW_FORM_exprloc: + fprintf_unfiltered (f, "expression: size %s", + pulongest (DW_BLOCK (&die->attrs[i])->size)); + break; + case DW_FORM_data16: + fprintf_unfiltered (f, "constant of 16 bytes"); + break; + case DW_FORM_ref_addr: + fprintf_unfiltered (f, "ref address: "); + fputs_filtered (hex_string (DW_UNSND (&die->attrs[i])), f); + break; + case DW_FORM_GNU_ref_alt: + fprintf_unfiltered (f, "alt ref address: "); + fputs_filtered (hex_string (DW_UNSND (&die->attrs[i])), f); + break; + case DW_FORM_ref1: + case DW_FORM_ref2: + case DW_FORM_ref4: + case DW_FORM_ref8: + case DW_FORM_ref_udata: + fprintf_unfiltered (f, "constant ref: 0x%lx (adjusted)", + (long) (DW_UNSND (&die->attrs[i]))); + break; + case DW_FORM_data1: + case DW_FORM_data2: + case DW_FORM_data4: + case DW_FORM_data8: + case DW_FORM_udata: + case DW_FORM_sdata: + fprintf_unfiltered (f, "constant: %s", + pulongest (DW_UNSND (&die->attrs[i]))); + break; + case DW_FORM_sec_offset: + fprintf_unfiltered (f, "section offset: %s", + pulongest (DW_UNSND (&die->attrs[i]))); + break; + case DW_FORM_ref_sig8: + fprintf_unfiltered (f, "signature: %s", + hex_string (DW_SIGNATURE (&die->attrs[i]))); + break; + case DW_FORM_string: + case DW_FORM_strp: + case DW_FORM_line_strp: + case DW_FORM_strx: + case DW_FORM_GNU_str_index: + case DW_FORM_GNU_strp_alt: + fprintf_unfiltered (f, "string: \"%s\" (%s canonicalized)", + DW_STRING (&die->attrs[i]) + ? DW_STRING (&die->attrs[i]) : "", + DW_STRING_IS_CANONICAL (&die->attrs[i]) ? "is" : "not"); + break; + case DW_FORM_flag: + if (DW_UNSND (&die->attrs[i])) + fprintf_unfiltered (f, "flag: TRUE"); + else + fprintf_unfiltered (f, "flag: FALSE"); + break; + case DW_FORM_flag_present: + fprintf_unfiltered (f, "flag: TRUE"); + break; + case DW_FORM_indirect: + /* The reader will have reduced the indirect form to + the "base form" so this form should not occur. */ + fprintf_unfiltered (f, + "unexpected attribute form: DW_FORM_indirect"); + break; + case DW_FORM_implicit_const: + fprintf_unfiltered (f, "constant: %s", + plongest (DW_SND (&die->attrs[i]))); + break; + default: + fprintf_unfiltered (f, "unsupported attribute form: %d.", + die->attrs[i].form); + break; + } + fprintf_unfiltered (f, "\n"); + } +} + +static void +dump_die_for_error (struct die_info *die) +{ + dump_die_shallow (gdb_stderr, 0, die); +} + +static void +dump_die_1 (struct ui_file *f, int level, int max_level, struct die_info *die) +{ + int indent = level * 4; + + gdb_assert (die != NULL); + + if (level >= max_level) + return; + + dump_die_shallow (f, indent, die); + + if (die->child != NULL) + { + print_spaces (indent, f); + fprintf_unfiltered (f, " Children:"); + if (level + 1 < max_level) + { + fprintf_unfiltered (f, "\n"); + dump_die_1 (f, level + 1, max_level, die->child); + } + else + { + fprintf_unfiltered (f, + " [not printed, max nesting level reached]\n"); + } + } + + if (die->sibling != NULL && level > 0) + { + dump_die_1 (f, level, max_level, die->sibling); + } +} + +/* This is called from the pdie macro in gdbinit.in. + It's not static so gcc will keep a copy callable from gdb. */ + +void +dump_die (struct die_info *die, int max_level) +{ + dump_die_1 (gdb_stdlog, 0, max_level, die); +} + +static void +store_in_ref_table (struct die_info *die, struct dwarf2_cu *cu) +{ + void **slot; + + slot = htab_find_slot_with_hash (cu->die_hash, die, + to_underlying (die->sect_off), + INSERT); + + *slot = die; +} + +/* Follow reference or signature attribute ATTR of SRC_DIE. + On entry *REF_CU is the CU of SRC_DIE. + On exit *REF_CU is the CU of the result. */ + +static struct die_info * +follow_die_ref_or_sig (struct die_info *src_die, const struct attribute *attr, + struct dwarf2_cu **ref_cu) +{ + struct die_info *die; + + if (attr->form_is_ref ()) + die = follow_die_ref (src_die, attr, ref_cu); + else if (attr->form == DW_FORM_ref_sig8) + die = follow_die_sig (src_die, attr, ref_cu); + else + { + dump_die_for_error (src_die); + error (_("Dwarf Error: Expected reference attribute [in module %s]"), + objfile_name ((*ref_cu)->per_objfile->objfile)); + } + + return die; +} + +/* Follow reference OFFSET. + On entry *REF_CU is the CU of the source die referencing OFFSET. + On exit *REF_CU is the CU of the result. + Returns NULL if OFFSET is invalid. */ + +static struct die_info * +follow_die_offset (sect_offset sect_off, int offset_in_dwz, + struct dwarf2_cu **ref_cu) +{ + struct die_info temp_die; + struct dwarf2_cu *target_cu, *cu = *ref_cu; + dwarf2_per_objfile *per_objfile = cu->per_objfile; + + gdb_assert (cu->per_cu != NULL); + + target_cu = cu; + + if (cu->per_cu->is_debug_types) + { + /* .debug_types CUs cannot reference anything outside their CU. + If they need to, they have to reference a signatured type via + DW_FORM_ref_sig8. */ + if (!cu->header.offset_in_cu_p (sect_off)) + return NULL; + } + else if (offset_in_dwz != cu->per_cu->is_dwz + || !cu->header.offset_in_cu_p (sect_off)) + { + struct dwarf2_per_cu_data *per_cu; + + per_cu = dwarf2_find_containing_comp_unit (sect_off, offset_in_dwz, + per_objfile); + + if (dwarf_read_debug > 1) + fprintf_unfiltered (gdb_stdlog, + "target CU offset: %s, target CU DIEs loaded: %d\n", + sect_offset_str (per_cu->sect_off), + per_objfile->get_cu (per_cu) != nullptr); + + /* If necessary, add it to the queue and load its DIEs. + + Even if maybe_queue_comp_unit doesn't require us to load the CU's DIEs, + it doesn't mean they are currently loaded. Since we require them + to be loaded, we must check for ourselves. */ + if (maybe_queue_comp_unit (cu, per_cu, per_objfile, cu->language) + || per_objfile->get_cu (per_cu) == nullptr) + load_full_comp_unit (per_cu, per_objfile, per_objfile->get_cu (per_cu), + false, cu->language); + + target_cu = per_objfile->get_cu (per_cu); + gdb_assert (target_cu != nullptr); + } + else if (cu->dies == NULL) + { + /* We're loading full DIEs during partial symbol reading. */ + gdb_assert (per_objfile->per_bfd->reading_partial_symbols); + load_full_comp_unit (cu->per_cu, per_objfile, cu, false, + language_minimal); + } + + *ref_cu = target_cu; + temp_die.sect_off = sect_off; + + if (target_cu != cu) + target_cu->ancestor = cu; + + return (struct die_info *) htab_find_with_hash (target_cu->die_hash, + &temp_die, + to_underlying (sect_off)); +} + +/* Follow reference attribute ATTR of SRC_DIE. + On entry *REF_CU is the CU of SRC_DIE. + On exit *REF_CU is the CU of the result. */ + +static struct die_info * +follow_die_ref (struct die_info *src_die, const struct attribute *attr, + struct dwarf2_cu **ref_cu) +{ + sect_offset sect_off = attr->get_ref_die_offset (); + struct dwarf2_cu *cu = *ref_cu; + struct die_info *die; + + die = follow_die_offset (sect_off, + (attr->form == DW_FORM_GNU_ref_alt + || cu->per_cu->is_dwz), + ref_cu); + if (!die) + error (_("Dwarf Error: Cannot find DIE at %s referenced from DIE " + "at %s [in module %s]"), + sect_offset_str (sect_off), sect_offset_str (src_die->sect_off), + objfile_name (cu->per_objfile->objfile)); + + return die; +} + +/* See read.h. */ + +struct dwarf2_locexpr_baton +dwarf2_fetch_die_loc_sect_off (sect_offset sect_off, + dwarf2_per_cu_data *per_cu, + dwarf2_per_objfile *per_objfile, + gdb::function_view<CORE_ADDR ()> get_frame_pc, + bool resolve_abstract_p) +{ + struct die_info *die; + struct attribute *attr; + struct dwarf2_locexpr_baton retval; + struct objfile *objfile = per_objfile->objfile; + + dwarf2_cu *cu = per_objfile->get_cu (per_cu); + if (cu == nullptr) + cu = load_cu (per_cu, per_objfile, false); + + if (cu == nullptr) + { + /* We shouldn't get here for a dummy CU, but don't crash on the user. + Instead just throw an error, not much else we can do. */ + error (_("Dwarf Error: Dummy CU at %s referenced in module %s"), + sect_offset_str (sect_off), objfile_name (objfile)); + } + + die = follow_die_offset (sect_off, per_cu->is_dwz, &cu); + if (!die) + error (_("Dwarf Error: Cannot find DIE at %s referenced in module %s"), + sect_offset_str (sect_off), objfile_name (objfile)); + + attr = dwarf2_attr (die, DW_AT_location, cu); + if (!attr && resolve_abstract_p + && (per_objfile->per_bfd->abstract_to_concrete.find (die->sect_off) + != per_objfile->per_bfd->abstract_to_concrete.end ())) + { + CORE_ADDR pc = get_frame_pc (); + CORE_ADDR baseaddr = objfile->text_section_offset (); + struct gdbarch *gdbarch = objfile->arch (); + + for (const auto &cand_off + : per_objfile->per_bfd->abstract_to_concrete[die->sect_off]) + { + struct dwarf2_cu *cand_cu = cu; + struct die_info *cand + = follow_die_offset (cand_off, per_cu->is_dwz, &cand_cu); + if (!cand + || !cand->parent + || cand->parent->tag != DW_TAG_subprogram) + continue; + + CORE_ADDR pc_low, pc_high; + get_scope_pc_bounds (cand->parent, &pc_low, &pc_high, cu); + if (pc_low == ((CORE_ADDR) -1)) + continue; + pc_low = gdbarch_adjust_dwarf2_addr (gdbarch, pc_low + baseaddr); + pc_high = gdbarch_adjust_dwarf2_addr (gdbarch, pc_high + baseaddr); + if (!(pc_low <= pc && pc < pc_high)) + continue; + + die = cand; + attr = dwarf2_attr (die, DW_AT_location, cu); + break; + } + } + + if (!attr) + { + /* DWARF: "If there is no such attribute, then there is no effect.". + DATA is ignored if SIZE is 0. */ + + retval.data = NULL; + retval.size = 0; + } + else if (attr->form_is_section_offset ()) + { + struct dwarf2_loclist_baton loclist_baton; + CORE_ADDR pc = get_frame_pc (); + size_t size; + + fill_in_loclist_baton (cu, &loclist_baton, attr); + + retval.data = dwarf2_find_location_expression (&loclist_baton, + &size, pc); + retval.size = size; + } + else + { + if (!attr->form_is_block ()) + error (_("Dwarf Error: DIE at %s referenced in module %s " + "is neither DW_FORM_block* nor DW_FORM_exprloc"), + sect_offset_str (sect_off), objfile_name (objfile)); + + retval.data = DW_BLOCK (attr)->data; + retval.size = DW_BLOCK (attr)->size; + } + retval.per_objfile = per_objfile; + retval.per_cu = cu->per_cu; + + per_objfile->age_comp_units (); + + return retval; +} + +/* See read.h. */ + +struct dwarf2_locexpr_baton +dwarf2_fetch_die_loc_cu_off (cu_offset offset_in_cu, + dwarf2_per_cu_data *per_cu, + dwarf2_per_objfile *per_objfile, + gdb::function_view<CORE_ADDR ()> get_frame_pc) +{ + sect_offset sect_off = per_cu->sect_off + to_underlying (offset_in_cu); + + return dwarf2_fetch_die_loc_sect_off (sect_off, per_cu, per_objfile, + get_frame_pc); +} + +/* Write a constant of a given type as target-ordered bytes into + OBSTACK. */ + +static const gdb_byte * +write_constant_as_bytes (struct obstack *obstack, + enum bfd_endian byte_order, + struct type *type, + ULONGEST value, + LONGEST *len) +{ + gdb_byte *result; + + *len = TYPE_LENGTH (type); + result = (gdb_byte *) obstack_alloc (obstack, *len); + store_unsigned_integer (result, *len, byte_order, value); + + return result; +} + +/* See read.h. */ + +const gdb_byte * +dwarf2_fetch_constant_bytes (sect_offset sect_off, + dwarf2_per_cu_data *per_cu, + dwarf2_per_objfile *per_objfile, + obstack *obstack, + LONGEST *len) +{ + struct die_info *die; + struct attribute *attr; + const gdb_byte *result = NULL; + struct type *type; + LONGEST value; + enum bfd_endian byte_order; + struct objfile *objfile = per_objfile->objfile; + + dwarf2_cu *cu = per_objfile->get_cu (per_cu); + if (cu == nullptr) + cu = load_cu (per_cu, per_objfile, false); + + if (cu == nullptr) + { + /* We shouldn't get here for a dummy CU, but don't crash on the user. + Instead just throw an error, not much else we can do. */ + error (_("Dwarf Error: Dummy CU at %s referenced in module %s"), + sect_offset_str (sect_off), objfile_name (objfile)); + } + + die = follow_die_offset (sect_off, per_cu->is_dwz, &cu); + if (!die) + error (_("Dwarf Error: Cannot find DIE at %s referenced in module %s"), + sect_offset_str (sect_off), objfile_name (objfile)); + + attr = dwarf2_attr (die, DW_AT_const_value, cu); + if (attr == NULL) + return NULL; + + byte_order = (bfd_big_endian (objfile->obfd) + ? BFD_ENDIAN_BIG : BFD_ENDIAN_LITTLE); + + switch (attr->form) + { + case DW_FORM_addr: + case DW_FORM_addrx: + case DW_FORM_GNU_addr_index: + { + gdb_byte *tem; + + *len = cu->header.addr_size; + tem = (gdb_byte *) obstack_alloc (obstack, *len); + store_unsigned_integer (tem, *len, byte_order, DW_ADDR (attr)); + result = tem; + } + break; + case DW_FORM_string: + case DW_FORM_strp: + case DW_FORM_strx: + case DW_FORM_GNU_str_index: + case DW_FORM_GNU_strp_alt: + /* DW_STRING is already allocated on the objfile obstack, point + directly to it. */ + result = (const gdb_byte *) DW_STRING (attr); + *len = strlen (DW_STRING (attr)); + break; + case DW_FORM_block1: + case DW_FORM_block2: + case DW_FORM_block4: + case DW_FORM_block: + case DW_FORM_exprloc: + case DW_FORM_data16: + result = DW_BLOCK (attr)->data; + *len = DW_BLOCK (attr)->size; + break; + + /* The DW_AT_const_value attributes are supposed to carry the + symbol's value "represented as it would be on the target + architecture." By the time we get here, it's already been + converted to host endianness, so we just need to sign- or + zero-extend it as appropriate. */ + case DW_FORM_data1: + type = die_type (die, cu); + result = dwarf2_const_value_data (attr, obstack, cu, &value, 8); + if (result == NULL) + result = write_constant_as_bytes (obstack, byte_order, + type, value, len); + break; + case DW_FORM_data2: + type = die_type (die, cu); + result = dwarf2_const_value_data (attr, obstack, cu, &value, 16); + if (result == NULL) + result = write_constant_as_bytes (obstack, byte_order, + type, value, len); + break; + case DW_FORM_data4: + type = die_type (die, cu); + result = dwarf2_const_value_data (attr, obstack, cu, &value, 32); + if (result == NULL) + result = write_constant_as_bytes (obstack, byte_order, + type, value, len); + break; + case DW_FORM_data8: + type = die_type (die, cu); + result = dwarf2_const_value_data (attr, obstack, cu, &value, 64); + if (result == NULL) + result = write_constant_as_bytes (obstack, byte_order, + type, value, len); + break; + + case DW_FORM_sdata: + case DW_FORM_implicit_const: + type = die_type (die, cu); + result = write_constant_as_bytes (obstack, byte_order, + type, DW_SND (attr), len); + break; + + case DW_FORM_udata: + type = die_type (die, cu); + result = write_constant_as_bytes (obstack, byte_order, + type, DW_UNSND (attr), len); + break; + + default: + complaint (_("unsupported const value attribute form: '%s'"), + dwarf_form_name (attr->form)); + break; + } + + return result; +} + +/* See read.h. */ + +struct type * +dwarf2_fetch_die_type_sect_off (sect_offset sect_off, + dwarf2_per_cu_data *per_cu, + dwarf2_per_objfile *per_objfile) +{ + struct die_info *die; + + dwarf2_cu *cu = per_objfile->get_cu (per_cu); + if (cu == nullptr) + cu = load_cu (per_cu, per_objfile, false); + + if (cu == nullptr) + return nullptr; + + die = follow_die_offset (sect_off, per_cu->is_dwz, &cu); + if (!die) + return NULL; + + return die_type (die, cu); +} + +/* See read.h. */ + +struct type * +dwarf2_get_die_type (cu_offset die_offset, + dwarf2_per_cu_data *per_cu, + dwarf2_per_objfile *per_objfile) +{ + sect_offset die_offset_sect = per_cu->sect_off + to_underlying (die_offset); + return get_die_type_at_offset (die_offset_sect, per_cu, per_objfile); +} + +/* Follow type unit SIG_TYPE referenced by SRC_DIE. + On entry *REF_CU is the CU of SRC_DIE. + On exit *REF_CU is the CU of the result. + Returns NULL if the referenced DIE isn't found. */ + +static struct die_info * +follow_die_sig_1 (struct die_info *src_die, struct signatured_type *sig_type, + struct dwarf2_cu **ref_cu) +{ + struct die_info temp_die; + struct dwarf2_cu *sig_cu, *cu = *ref_cu; + struct die_info *die; + dwarf2_per_objfile *per_objfile = (*ref_cu)->per_objfile; + + + /* While it might be nice to assert sig_type->type == NULL here, + we can get here for DW_AT_imported_declaration where we need + the DIE not the type. */ + + /* If necessary, add it to the queue and load its DIEs. + + Even if maybe_queue_comp_unit doesn't require us to load the CU's DIEs, + it doesn't mean they are currently loaded. Since we require them + to be loaded, we must check for ourselves. */ + if (maybe_queue_comp_unit (*ref_cu, &sig_type->per_cu, per_objfile, + language_minimal) + || per_objfile->get_cu (&sig_type->per_cu) == nullptr) + read_signatured_type (sig_type, per_objfile); + + sig_cu = per_objfile->get_cu (&sig_type->per_cu); + gdb_assert (sig_cu != NULL); + gdb_assert (to_underlying (sig_type->type_offset_in_section) != 0); + temp_die.sect_off = sig_type->type_offset_in_section; + die = (struct die_info *) htab_find_with_hash (sig_cu->die_hash, &temp_die, + to_underlying (temp_die.sect_off)); + if (die) + { + /* For .gdb_index version 7 keep track of included TUs. + http://sourceware.org/bugzilla/show_bug.cgi?id=15021. */ + if (per_objfile->per_bfd->index_table != NULL + && per_objfile->per_bfd->index_table->version <= 7) + { + (*ref_cu)->per_cu->imported_symtabs_push (sig_cu->per_cu); + } + + *ref_cu = sig_cu; + if (sig_cu != cu) + sig_cu->ancestor = cu; + + return die; + } + + return NULL; +} + +/* Follow signatured type referenced by ATTR in SRC_DIE. + On entry *REF_CU is the CU of SRC_DIE. + On exit *REF_CU is the CU of the result. + The result is the DIE of the type. + If the referenced type cannot be found an error is thrown. */ + +static struct die_info * +follow_die_sig (struct die_info *src_die, const struct attribute *attr, + struct dwarf2_cu **ref_cu) +{ + ULONGEST signature = DW_SIGNATURE (attr); + struct signatured_type *sig_type; + struct die_info *die; + + gdb_assert (attr->form == DW_FORM_ref_sig8); + + sig_type = lookup_signatured_type (*ref_cu, signature); + /* sig_type will be NULL if the signatured type is missing from + the debug info. */ + if (sig_type == NULL) + { + error (_("Dwarf Error: Cannot find signatured DIE %s referenced" + " from DIE at %s [in module %s]"), + hex_string (signature), sect_offset_str (src_die->sect_off), + objfile_name ((*ref_cu)->per_objfile->objfile)); + } + + die = follow_die_sig_1 (src_die, sig_type, ref_cu); + if (die == NULL) + { + dump_die_for_error (src_die); + error (_("Dwarf Error: Problem reading signatured DIE %s referenced" + " from DIE at %s [in module %s]"), + hex_string (signature), sect_offset_str (src_die->sect_off), + objfile_name ((*ref_cu)->per_objfile->objfile)); + } + + return die; +} + +/* Get the type specified by SIGNATURE referenced in DIE/CU, + reading in and processing the type unit if necessary. */ + +static struct type * +get_signatured_type (struct die_info *die, ULONGEST signature, + struct dwarf2_cu *cu) +{ + dwarf2_per_objfile *per_objfile = cu->per_objfile; + struct signatured_type *sig_type; + struct dwarf2_cu *type_cu; + struct die_info *type_die; + struct type *type; + + sig_type = lookup_signatured_type (cu, signature); + /* sig_type will be NULL if the signatured type is missing from + the debug info. */ + if (sig_type == NULL) + { + complaint (_("Dwarf Error: Cannot find signatured DIE %s referenced" + " from DIE at %s [in module %s]"), + hex_string (signature), sect_offset_str (die->sect_off), + objfile_name (per_objfile->objfile)); + return build_error_marker_type (cu, die); + } + + /* If we already know the type we're done. */ + type = per_objfile->get_type_for_signatured_type (sig_type); + if (type != nullptr) + return type; + + type_cu = cu; + type_die = follow_die_sig_1 (die, sig_type, &type_cu); + if (type_die != NULL) + { + /* N.B. We need to call get_die_type to ensure only one type for this DIE + is created. This is important, for example, because for c++ classes + we need TYPE_NAME set which is only done by new_symbol. Blech. */ + type = read_type_die (type_die, type_cu); + if (type == NULL) + { + complaint (_("Dwarf Error: Cannot build signatured type %s" + " referenced from DIE at %s [in module %s]"), + hex_string (signature), sect_offset_str (die->sect_off), + objfile_name (per_objfile->objfile)); + type = build_error_marker_type (cu, die); + } + } + else + { + complaint (_("Dwarf Error: Problem reading signatured DIE %s referenced" + " from DIE at %s [in module %s]"), + hex_string (signature), sect_offset_str (die->sect_off), + objfile_name (per_objfile->objfile)); + type = build_error_marker_type (cu, die); + } + + per_objfile->set_type_for_signatured_type (sig_type, type); + + return type; +} + +/* Get the type specified by the DW_AT_signature ATTR in DIE/CU, + reading in and processing the type unit if necessary. */ + +static struct type * +get_DW_AT_signature_type (struct die_info *die, const struct attribute *attr, + struct dwarf2_cu *cu) /* ARI: editCase function */ +{ + /* Yes, DW_AT_signature can use a non-ref_sig8 reference. */ + if (attr->form_is_ref ()) + { + struct dwarf2_cu *type_cu = cu; + struct die_info *type_die = follow_die_ref (die, attr, &type_cu); + + return read_type_die (type_die, type_cu); + } + else if (attr->form == DW_FORM_ref_sig8) + { + return get_signatured_type (die, DW_SIGNATURE (attr), cu); + } + else + { + dwarf2_per_objfile *per_objfile = cu->per_objfile; + + complaint (_("Dwarf Error: DW_AT_signature has bad form %s in DIE" + " at %s [in module %s]"), + dwarf_form_name (attr->form), sect_offset_str (die->sect_off), + objfile_name (per_objfile->objfile)); + return build_error_marker_type (cu, die); + } +} + +/* Load the DIEs associated with type unit PER_CU into memory. */ + +static void +load_full_type_unit (dwarf2_per_cu_data *per_cu, + dwarf2_per_objfile *per_objfile) +{ + struct signatured_type *sig_type; + + /* Caller is responsible for ensuring type_unit_groups don't get here. */ + gdb_assert (! per_cu->type_unit_group_p ()); + + /* We have the per_cu, but we need the signatured_type. + Fortunately this is an easy translation. */ + gdb_assert (per_cu->is_debug_types); + sig_type = (struct signatured_type *) per_cu; + + gdb_assert (per_objfile->get_cu (per_cu) == nullptr); + + read_signatured_type (sig_type, per_objfile); + + gdb_assert (per_objfile->get_cu (per_cu) != nullptr); +} + +/* Read in a signatured type and build its CU and DIEs. + If the type is a stub for the real type in a DWO file, + read in the real type from the DWO file as well. */ + +static void +read_signatured_type (signatured_type *sig_type, + dwarf2_per_objfile *per_objfile) +{ + struct dwarf2_per_cu_data *per_cu = &sig_type->per_cu; + + gdb_assert (per_cu->is_debug_types); + gdb_assert (per_objfile->get_cu (per_cu) == nullptr); + + cutu_reader reader (per_cu, per_objfile, nullptr, nullptr, false); + + if (!reader.dummy_p) + { + struct dwarf2_cu *cu = reader.cu; + const gdb_byte *info_ptr = reader.info_ptr; + + gdb_assert (cu->die_hash == NULL); + cu->die_hash = + htab_create_alloc_ex (cu->header.length / 12, + die_hash, + die_eq, + NULL, + &cu->comp_unit_obstack, + hashtab_obstack_allocate, + dummy_obstack_deallocate); + + if (reader.comp_unit_die->has_children) + reader.comp_unit_die->child + = read_die_and_siblings (&reader, info_ptr, &info_ptr, + reader.comp_unit_die); + cu->dies = reader.comp_unit_die; + /* comp_unit_die is not stored in die_hash, no need. */ + + /* We try not to read any attributes in this function, because + not all CUs needed for references have been loaded yet, and + symbol table processing isn't initialized. But we have to + set the CU language, or we won't be able to build types + correctly. Similarly, if we do not read the producer, we can + not apply producer-specific interpretation. */ + prepare_one_comp_unit (cu, cu->dies, language_minimal); + + reader.keep (); + } + + sig_type->per_cu.tu_read = 1; +} + +/* Decode simple location descriptions. + Given a pointer to a dwarf block that defines a location, compute + the location and return the value. If COMPUTED is non-null, it is + set to true to indicate that decoding was successful, and false + otherwise. If COMPUTED is null, then this function may emit a + complaint. */ + +static CORE_ADDR +decode_locdesc (struct dwarf_block *blk, struct dwarf2_cu *cu, bool *computed) +{ + struct objfile *objfile = cu->per_objfile->objfile; + size_t i; + size_t size = blk->size; + const gdb_byte *data = blk->data; + CORE_ADDR stack[64]; + int stacki; + unsigned int bytes_read, unsnd; + gdb_byte op; + + if (computed != nullptr) + *computed = false; + + i = 0; + stacki = 0; + stack[stacki] = 0; + stack[++stacki] = 0; + + while (i < size) + { + op = data[i++]; + switch (op) + { + case DW_OP_lit0: + case DW_OP_lit1: + case DW_OP_lit2: + case DW_OP_lit3: + case DW_OP_lit4: + case DW_OP_lit5: + case DW_OP_lit6: + case DW_OP_lit7: + case DW_OP_lit8: + case DW_OP_lit9: + case DW_OP_lit10: + case DW_OP_lit11: + case DW_OP_lit12: + case DW_OP_lit13: + case DW_OP_lit14: + case DW_OP_lit15: + case DW_OP_lit16: + case DW_OP_lit17: + case DW_OP_lit18: + case DW_OP_lit19: + case DW_OP_lit20: + case DW_OP_lit21: + case DW_OP_lit22: + case DW_OP_lit23: + case DW_OP_lit24: + case DW_OP_lit25: + case DW_OP_lit26: + case DW_OP_lit27: + case DW_OP_lit28: + case DW_OP_lit29: + case DW_OP_lit30: + case DW_OP_lit31: + stack[++stacki] = op - DW_OP_lit0; + break; + + case DW_OP_reg0: + case DW_OP_reg1: + case DW_OP_reg2: + case DW_OP_reg3: + case DW_OP_reg4: + case DW_OP_reg5: + case DW_OP_reg6: + case DW_OP_reg7: + case DW_OP_reg8: + case DW_OP_reg9: + case DW_OP_reg10: + case DW_OP_reg11: + case DW_OP_reg12: + case DW_OP_reg13: + case DW_OP_reg14: + case DW_OP_reg15: + case DW_OP_reg16: + case DW_OP_reg17: + case DW_OP_reg18: + case DW_OP_reg19: + case DW_OP_reg20: + case DW_OP_reg21: + case DW_OP_reg22: + case DW_OP_reg23: + case DW_OP_reg24: + case DW_OP_reg25: + case DW_OP_reg26: + case DW_OP_reg27: + case DW_OP_reg28: + case DW_OP_reg29: + case DW_OP_reg30: + case DW_OP_reg31: + stack[++stacki] = op - DW_OP_reg0; + if (i < size) + { + if (computed == nullptr) + dwarf2_complex_location_expr_complaint (); + else + return 0; + } + break; + + case DW_OP_regx: + unsnd = read_unsigned_leb128 (NULL, (data + i), &bytes_read); + i += bytes_read; + stack[++stacki] = unsnd; + if (i < size) + { + if (computed == nullptr) + dwarf2_complex_location_expr_complaint (); + else + return 0; + } + break; + + case DW_OP_addr: + stack[++stacki] = cu->header.read_address (objfile->obfd, &data[i], + &bytes_read); + i += bytes_read; + break; + + case DW_OP_const1u: + stack[++stacki] = read_1_byte (objfile->obfd, &data[i]); + i += 1; + break; + + case DW_OP_const1s: + stack[++stacki] = read_1_signed_byte (objfile->obfd, &data[i]); + i += 1; + break; + + case DW_OP_const2u: + stack[++stacki] = read_2_bytes (objfile->obfd, &data[i]); + i += 2; + break; + + case DW_OP_const2s: + stack[++stacki] = read_2_signed_bytes (objfile->obfd, &data[i]); + i += 2; + break; + + case DW_OP_const4u: + stack[++stacki] = read_4_bytes (objfile->obfd, &data[i]); + i += 4; + break; + + case DW_OP_const4s: + stack[++stacki] = read_4_signed_bytes (objfile->obfd, &data[i]); + i += 4; + break; + + case DW_OP_const8u: + stack[++stacki] = read_8_bytes (objfile->obfd, &data[i]); + i += 8; + break; + + case DW_OP_constu: + stack[++stacki] = read_unsigned_leb128 (NULL, (data + i), + &bytes_read); + i += bytes_read; + break; + + case DW_OP_consts: + stack[++stacki] = read_signed_leb128 (NULL, (data + i), &bytes_read); + i += bytes_read; + break; + + case DW_OP_dup: + stack[stacki + 1] = stack[stacki]; + stacki++; + break; + + case DW_OP_plus: + stack[stacki - 1] += stack[stacki]; + stacki--; + break; + + case DW_OP_plus_uconst: + stack[stacki] += read_unsigned_leb128 (NULL, (data + i), + &bytes_read); + i += bytes_read; + break; + + case DW_OP_minus: + stack[stacki - 1] -= stack[stacki]; + stacki--; + break; + + case DW_OP_deref: + /* If we're not the last op, then we definitely can't encode + this using GDB's address_class enum. This is valid for partial + global symbols, although the variable's address will be bogus + in the psymtab. */ + if (i < size) + { + if (computed == nullptr) + dwarf2_complex_location_expr_complaint (); + else + return 0; + } + break; + + case DW_OP_GNU_push_tls_address: + case DW_OP_form_tls_address: + /* The top of the stack has the offset from the beginning + of the thread control block at which the variable is located. */ + /* Nothing should follow this operator, so the top of stack would + be returned. */ + /* This is valid for partial global symbols, but the variable's + address will be bogus in the psymtab. Make it always at least + non-zero to not look as a variable garbage collected by linker + which have DW_OP_addr 0. */ + if (i < size) + { + if (computed == nullptr) + dwarf2_complex_location_expr_complaint (); + else + return 0; + } + stack[stacki]++; + break; + + case DW_OP_GNU_uninit: + if (computed != nullptr) + return 0; + break; + + case DW_OP_addrx: + case DW_OP_GNU_addr_index: + case DW_OP_GNU_const_index: + stack[++stacki] = read_addr_index_from_leb128 (cu, &data[i], + &bytes_read); + i += bytes_read; + break; + + default: + if (computed == nullptr) + { + const char *name = get_DW_OP_name (op); + + if (name) + complaint (_("unsupported stack op: '%s'"), + name); + else + complaint (_("unsupported stack op: '%02x'"), + op); + } + + return (stack[stacki]); + } + + /* Enforce maximum stack depth of SIZE-1 to avoid writing + outside of the allocated space. Also enforce minimum>0. */ + if (stacki >= ARRAY_SIZE (stack) - 1) + { + if (computed == nullptr) + complaint (_("location description stack overflow")); + return 0; + } + + if (stacki <= 0) + { + if (computed == nullptr) + complaint (_("location description stack underflow")); + return 0; + } + } + + if (computed != nullptr) + *computed = true; + return (stack[stacki]); +} + +/* memory allocation interface */ + +static struct dwarf_block * +dwarf_alloc_block (struct dwarf2_cu *cu) +{ + return XOBNEW (&cu->comp_unit_obstack, struct dwarf_block); +} + +static struct die_info * +dwarf_alloc_die (struct dwarf2_cu *cu, int num_attrs) +{ + struct die_info *die; + size_t size = sizeof (struct die_info); + + if (num_attrs > 1) + size += (num_attrs - 1) * sizeof (struct attribute); + + die = (struct die_info *) obstack_alloc (&cu->comp_unit_obstack, size); + memset (die, 0, sizeof (struct die_info)); + return (die); +} + + + +/* Macro support. */ + +/* An overload of dwarf_decode_macros that finds the correct section + and ensures it is read in before calling the other overload. */ + +static void +dwarf_decode_macros (struct dwarf2_cu *cu, unsigned int offset, + int section_is_gnu) +{ + dwarf2_per_objfile *per_objfile = cu->per_objfile; + struct objfile *objfile = per_objfile->objfile; + const struct line_header *lh = cu->line_header; + unsigned int offset_size = cu->header.offset_size; + struct dwarf2_section_info *section; + const char *section_name; + + if (cu->dwo_unit != nullptr) + { + if (section_is_gnu) + { + section = &cu->dwo_unit->dwo_file->sections.macro; + section_name = ".debug_macro.dwo"; + } + else + { + section = &cu->dwo_unit->dwo_file->sections.macinfo; + section_name = ".debug_macinfo.dwo"; + } + } + else + { + if (section_is_gnu) + { + section = &per_objfile->per_bfd->macro; + section_name = ".debug_macro"; + } + else + { + section = &per_objfile->per_bfd->macinfo; + section_name = ".debug_macinfo"; + } + } + + section->read (objfile); + if (section->buffer == nullptr) + { + complaint (_("missing %s section"), section_name); + return; + } + + buildsym_compunit *builder = cu->get_builder (); + + dwarf_decode_macros (per_objfile, builder, section, lh, + offset_size, offset, section_is_gnu); +} + +/* Return the .debug_loc section to use for CU. + For DWO files use .debug_loc.dwo. */ + +static struct dwarf2_section_info * +cu_debug_loc_section (struct dwarf2_cu *cu) +{ + dwarf2_per_objfile *per_objfile = cu->per_objfile; + + if (cu->dwo_unit) + { + struct dwo_sections *sections = &cu->dwo_unit->dwo_file->sections; + + return cu->header.version >= 5 ? §ions->loclists : §ions->loc; + } + return (cu->header.version >= 5 ? &per_objfile->per_bfd->loclists + : &per_objfile->per_bfd->loc); +} + +/* Return the .debug_rnglists section to use for CU. */ +static struct dwarf2_section_info * +cu_debug_rnglists_section (struct dwarf2_cu *cu, dwarf_tag tag) +{ + if (cu->header.version < 5) + error (_(".debug_rnglists section cannot be used in DWARF %d"), + cu->header.version); + struct dwarf2_per_objfile *dwarf2_per_objfile = cu->per_objfile; + + /* Make sure we read the .debug_rnglists section from the file that + contains the DW_AT_ranges attribute we are reading. Normally that + would be the .dwo file, if there is one. However for DW_TAG_compile_unit + or DW_TAG_skeleton unit, we always want to read from objfile/linked + program. */ + if (cu->dwo_unit != nullptr + && tag != DW_TAG_compile_unit + && tag != DW_TAG_skeleton_unit) + { + struct dwo_sections *sections = &cu->dwo_unit->dwo_file->sections; + + if (sections->rnglists.size > 0) + return §ions->rnglists; + else + error (_(".debug_rnglists section is missing from .dwo file.")); + } + return &dwarf2_per_objfile->per_bfd->rnglists; +} + +/* A helper function that fills in a dwarf2_loclist_baton. */ + +static void +fill_in_loclist_baton (struct dwarf2_cu *cu, + struct dwarf2_loclist_baton *baton, + const struct attribute *attr) +{ + dwarf2_per_objfile *per_objfile = cu->per_objfile; + struct dwarf2_section_info *section = cu_debug_loc_section (cu); + + section->read (per_objfile->objfile); + + baton->per_objfile = per_objfile; + baton->per_cu = cu->per_cu; + gdb_assert (baton->per_cu); + /* We don't know how long the location list is, but make sure we + don't run off the edge of the section. */ + baton->size = section->size - DW_UNSND (attr); + baton->data = section->buffer + DW_UNSND (attr); + if (cu->base_address.has_value ()) + baton->base_address = *cu->base_address; + else + baton->base_address = 0; + baton->from_dwo = cu->dwo_unit != NULL; +} + +static void +dwarf2_symbol_mark_computed (const struct attribute *attr, struct symbol *sym, + struct dwarf2_cu *cu, int is_block) +{ + dwarf2_per_objfile *per_objfile = cu->per_objfile; + struct objfile *objfile = per_objfile->objfile; + struct dwarf2_section_info *section = cu_debug_loc_section (cu); + + if (attr->form_is_section_offset () + /* .debug_loc{,.dwo} may not exist at all, or the offset may be outside + the section. If so, fall through to the complaint in the + other branch. */ + && DW_UNSND (attr) < section->get_size (objfile)) + { + struct dwarf2_loclist_baton *baton; + + baton = XOBNEW (&objfile->objfile_obstack, struct dwarf2_loclist_baton); + + fill_in_loclist_baton (cu, baton, attr); + + if (!cu->base_address.has_value ()) + complaint (_("Location list used without " + "specifying the CU base address.")); + + SYMBOL_ACLASS_INDEX (sym) = (is_block + ? dwarf2_loclist_block_index + : dwarf2_loclist_index); + SYMBOL_LOCATION_BATON (sym) = baton; + } + else + { + struct dwarf2_locexpr_baton *baton; + + baton = XOBNEW (&objfile->objfile_obstack, struct dwarf2_locexpr_baton); + baton->per_objfile = per_objfile; + baton->per_cu = cu->per_cu; + gdb_assert (baton->per_cu); + + if (attr->form_is_block ()) + { + /* Note that we're just copying the block's data pointer + here, not the actual data. We're still pointing into the + info_buffer for SYM's objfile; right now we never release + that buffer, but when we do clean up properly this may + need to change. */ + baton->size = DW_BLOCK (attr)->size; + baton->data = DW_BLOCK (attr)->data; + } + else + { + dwarf2_invalid_attrib_class_complaint ("location description", + sym->natural_name ()); + baton->size = 0; + } + + SYMBOL_ACLASS_INDEX (sym) = (is_block + ? dwarf2_locexpr_block_index + : dwarf2_locexpr_index); + SYMBOL_LOCATION_BATON (sym) = baton; + } +} + +/* See read.h. */ + +const comp_unit_head * +dwarf2_per_cu_data::get_header () const +{ + if (!m_header_read_in) + { + const gdb_byte *info_ptr + = this->section->buffer + to_underlying (this->sect_off); + + memset (&m_header, 0, sizeof (m_header)); + + read_comp_unit_head (&m_header, info_ptr, this->section, + rcuh_kind::COMPILE); + } + + return &m_header; +} + +/* See read.h. */ + +int +dwarf2_per_cu_data::addr_size () const +{ + return this->get_header ()->addr_size; +} + +/* See read.h. */ + +int +dwarf2_per_cu_data::offset_size () const +{ + return this->get_header ()->offset_size; +} + +/* See read.h. */ + +int +dwarf2_per_cu_data::ref_addr_size () const +{ + const comp_unit_head *header = this->get_header (); + + if (header->version == 2) + return header->addr_size; + else + return header->offset_size; +} + +/* See read.h. */ + +struct type * +dwarf2_cu::addr_type () const +{ + struct objfile *objfile = this->per_objfile->objfile; + struct type *void_type = objfile_type (objfile)->builtin_void; + struct type *addr_type = lookup_pointer_type (void_type); + int addr_size = this->per_cu->addr_size (); + + if (TYPE_LENGTH (addr_type) == addr_size) + return addr_type; + + addr_type = addr_sized_int_type (TYPE_UNSIGNED (addr_type)); + return addr_type; +} + +/* A helper function for dwarf2_find_containing_comp_unit that returns + the index of the result, and that searches a vector. It will + return a result even if the offset in question does not actually + occur in any CU. This is separate so that it can be unit + tested. */ + +static int +dwarf2_find_containing_comp_unit + (sect_offset sect_off, + unsigned int offset_in_dwz, + const std::vector<dwarf2_per_cu_data *> &all_comp_units) +{ + int low, high; + + low = 0; + high = all_comp_units.size () - 1; + while (high > low) + { + struct dwarf2_per_cu_data *mid_cu; + int mid = low + (high - low) / 2; + + mid_cu = all_comp_units[mid]; + if (mid_cu->is_dwz > offset_in_dwz + || (mid_cu->is_dwz == offset_in_dwz + && mid_cu->sect_off + mid_cu->length > sect_off)) + high = mid; + else + low = mid + 1; + } + gdb_assert (low == high); + return low; +} + +/* Locate the .debug_info compilation unit from CU's objfile which contains + the DIE at OFFSET. Raises an error on failure. */ + +static struct dwarf2_per_cu_data * +dwarf2_find_containing_comp_unit (sect_offset sect_off, + unsigned int offset_in_dwz, + dwarf2_per_objfile *per_objfile) +{ + int low = dwarf2_find_containing_comp_unit + (sect_off, offset_in_dwz, per_objfile->per_bfd->all_comp_units); + dwarf2_per_cu_data *this_cu = per_objfile->per_bfd->all_comp_units[low]; + + if (this_cu->is_dwz != offset_in_dwz || this_cu->sect_off > sect_off) + { + if (low == 0 || this_cu->is_dwz != offset_in_dwz) + error (_("Dwarf Error: could not find partial DIE containing " + "offset %s [in module %s]"), + sect_offset_str (sect_off), + bfd_get_filename (per_objfile->objfile->obfd)); + + gdb_assert (per_objfile->per_bfd->all_comp_units[low-1]->sect_off + <= sect_off); + return per_objfile->per_bfd->all_comp_units[low-1]; + } + else + { + if (low == per_objfile->per_bfd->all_comp_units.size () - 1 + && sect_off >= this_cu->sect_off + this_cu->length) + error (_("invalid dwarf2 offset %s"), sect_offset_str (sect_off)); + gdb_assert (sect_off < this_cu->sect_off + this_cu->length); + return this_cu; + } +} + +#if GDB_SELF_TEST + +namespace selftests { +namespace find_containing_comp_unit { + +static void +run_test () +{ + struct dwarf2_per_cu_data one {}; + struct dwarf2_per_cu_data two {}; + struct dwarf2_per_cu_data three {}; + struct dwarf2_per_cu_data four {}; + + one.length = 5; + two.sect_off = sect_offset (one.length); + two.length = 7; + + three.length = 5; + three.is_dwz = 1; + four.sect_off = sect_offset (three.length); + four.length = 7; + four.is_dwz = 1; + + std::vector<dwarf2_per_cu_data *> units; + units.push_back (&one); + units.push_back (&two); + units.push_back (&three); + units.push_back (&four); + + int result; + + result = dwarf2_find_containing_comp_unit (sect_offset (0), 0, units); + SELF_CHECK (units[result] == &one); + result = dwarf2_find_containing_comp_unit (sect_offset (3), 0, units); + SELF_CHECK (units[result] == &one); + result = dwarf2_find_containing_comp_unit (sect_offset (5), 0, units); + SELF_CHECK (units[result] == &two); + + result = dwarf2_find_containing_comp_unit (sect_offset (0), 1, units); + SELF_CHECK (units[result] == &three); + result = dwarf2_find_containing_comp_unit (sect_offset (3), 1, units); + SELF_CHECK (units[result] == &three); + result = dwarf2_find_containing_comp_unit (sect_offset (5), 1, units); + SELF_CHECK (units[result] == &four); +} + +} +} + +#endif /* GDB_SELF_TEST */ + +/* Initialize dwarf2_cu to read PER_CU, in the context of PER_OBJFILE. */ + +dwarf2_cu::dwarf2_cu (dwarf2_per_cu_data *per_cu, + dwarf2_per_objfile *per_objfile) + : per_cu (per_cu), + per_objfile (per_objfile), + mark (false), + has_loclist (false), + checked_producer (false), + producer_is_gxx_lt_4_6 (false), + producer_is_gcc_lt_4_3 (false), + producer_is_icc (false), + producer_is_icc_lt_14 (false), + producer_is_codewarrior (false), + processing_has_namespace_info (false) +{ +} + +/* Initialize basic fields of dwarf_cu CU according to DIE COMP_UNIT_DIE. */ + +static void +prepare_one_comp_unit (struct dwarf2_cu *cu, struct die_info *comp_unit_die, + enum language pretend_language) +{ + struct attribute *attr; + + /* Set the language we're debugging. */ + attr = dwarf2_attr (comp_unit_die, DW_AT_language, cu); + if (attr != nullptr) + set_cu_language (DW_UNSND (attr), cu); + else + { + cu->language = pretend_language; + cu->language_defn = language_def (cu->language); + } + + cu->producer = dwarf2_string_attr (comp_unit_die, DW_AT_producer, cu); +} + +/* See read.h. */ + +dwarf2_cu * +dwarf2_per_objfile::get_cu (dwarf2_per_cu_data *per_cu) +{ + auto it = m_dwarf2_cus.find (per_cu); + if (it == m_dwarf2_cus.end ()) + return nullptr; + + return it->second; +} + +/* See read.h. */ + +void +dwarf2_per_objfile::set_cu (dwarf2_per_cu_data *per_cu, dwarf2_cu *cu) +{ + gdb_assert (this->get_cu (per_cu) == nullptr); + + m_dwarf2_cus[per_cu] = cu; +} + +/* See read.h. */ + +void +dwarf2_per_objfile::age_comp_units () +{ + if (dwarf_read_debug > 1) + fprintf_unfiltered (gdb_stdlog, "age_comp_units: running\n"); + + /* This is not expected to be called in the middle of CU expansion. There is + an invariant that if a CU is in the CUs-to-expand queue, its DIEs are + loaded in memory. Calling age_comp_units while the queue is in use could + make us free the DIEs for a CU that is in the queue and therefore break + that invariant. */ + gdb_assert (!this->per_bfd->queue.has_value ()); + + /* Start by clearing all marks. */ + for (auto pair : m_dwarf2_cus) + pair.second->mark = false; + + /* Traverse all CUs, mark them and their dependencies if used recently + enough. */ + for (auto pair : m_dwarf2_cus) + { + dwarf2_cu *cu = pair.second; + + cu->last_used++; + if (cu->last_used <= dwarf_max_cache_age) + dwarf2_mark (cu); + } + + /* Delete all CUs still not marked. */ + for (auto it = m_dwarf2_cus.begin (); it != m_dwarf2_cus.end ();) + { + dwarf2_cu *cu = it->second; + + if (!cu->mark) + { + delete cu; + it = m_dwarf2_cus.erase (it); + } + else + it++; + } +} + +/* See read.h. */ + +void +dwarf2_per_objfile::remove_cu (dwarf2_per_cu_data *per_cu) +{ + auto it = m_dwarf2_cus.find (per_cu); + if (it == m_dwarf2_cus.end ()) + return; + + delete it->second; + + m_dwarf2_cus.erase (it); +} + +dwarf2_per_objfile::~dwarf2_per_objfile () +{ + remove_all_cus (); +} + +/* A set of CU "per_cu" pointer, DIE offset, and GDB type pointer. + We store these in a hash table separate from the DIEs, and preserve them + when the DIEs are flushed out of cache. + + The CU "per_cu" pointer is needed because offset alone is not enough to + uniquely identify the type. A file may have multiple .debug_types sections, + or the type may come from a DWO file. Furthermore, while it's more logical + to use per_cu->section+offset, with Fission the section with the data is in + the DWO file but we don't know that section at the point we need it. + We have to use something in dwarf2_per_cu_data (or the pointer to it) + because we can enter the lookup routine, get_die_type_at_offset, from + outside this file, and thus won't necessarily have PER_CU->cu. + Fortunately, PER_CU is stable for the life of the objfile. */ + +struct dwarf2_per_cu_offset_and_type +{ + const struct dwarf2_per_cu_data *per_cu; + sect_offset sect_off; + struct type *type; +}; + +/* Hash function for a dwarf2_per_cu_offset_and_type. */ + +static hashval_t +per_cu_offset_and_type_hash (const void *item) +{ + const struct dwarf2_per_cu_offset_and_type *ofs + = (const struct dwarf2_per_cu_offset_and_type *) item; + + return (uintptr_t) ofs->per_cu + to_underlying (ofs->sect_off); +} + +/* Equality function for a dwarf2_per_cu_offset_and_type. */ + +static int +per_cu_offset_and_type_eq (const void *item_lhs, const void *item_rhs) +{ + const struct dwarf2_per_cu_offset_and_type *ofs_lhs + = (const struct dwarf2_per_cu_offset_and_type *) item_lhs; + const struct dwarf2_per_cu_offset_and_type *ofs_rhs + = (const struct dwarf2_per_cu_offset_and_type *) item_rhs; + + return (ofs_lhs->per_cu == ofs_rhs->per_cu + && ofs_lhs->sect_off == ofs_rhs->sect_off); +} + +/* Set the type associated with DIE to TYPE. Save it in CU's hash + table if necessary. For convenience, return TYPE. + + The DIEs reading must have careful ordering to: + * Not cause infinite loops trying to read in DIEs as a prerequisite for + reading current DIE. + * Not trying to dereference contents of still incompletely read in types + while reading in other DIEs. + * Enable referencing still incompletely read in types just by a pointer to + the type without accessing its fields. + + Therefore caller should follow these rules: + * Try to fetch any prerequisite types we may need to build this DIE type + before building the type and calling set_die_type. + * After building type call set_die_type for current DIE as soon as + possible before fetching more types to complete the current type. + * Make the type as complete as possible before fetching more types. */ + +static struct type * +set_die_type (struct die_info *die, struct type *type, struct dwarf2_cu *cu) +{ + dwarf2_per_objfile *per_objfile = cu->per_objfile; + struct dwarf2_per_cu_offset_and_type **slot, ofs; + struct objfile *objfile = per_objfile->objfile; + struct attribute *attr; + struct dynamic_prop prop; + + /* For Ada types, make sure that the gnat-specific data is always + initialized (if not already set). There are a few types where + we should not be doing so, because the type-specific area is + already used to hold some other piece of info (eg: TYPE_CODE_FLT + where the type-specific area is used to store the floatformat). + But this is not a problem, because the gnat-specific information + is actually not needed for these types. */ + if (need_gnat_info (cu) + && type->code () != TYPE_CODE_FUNC + && type->code () != TYPE_CODE_FLT + && type->code () != TYPE_CODE_METHODPTR + && type->code () != TYPE_CODE_MEMBERPTR + && type->code () != TYPE_CODE_METHOD + && !HAVE_GNAT_AUX_INFO (type)) + INIT_GNAT_SPECIFIC (type); + + /* Read DW_AT_allocated and set in type. */ + attr = dwarf2_attr (die, DW_AT_allocated, cu); + if (attr != NULL) + { + struct type *prop_type = cu->addr_sized_int_type (false); + if (attr_to_dynamic_prop (attr, die, cu, &prop, prop_type)) + type->add_dyn_prop (DYN_PROP_ALLOCATED, prop); + } + + /* Read DW_AT_associated and set in type. */ + attr = dwarf2_attr (die, DW_AT_associated, cu); + if (attr != NULL) + { + struct type *prop_type = cu->addr_sized_int_type (false); + if (attr_to_dynamic_prop (attr, die, cu, &prop, prop_type)) + type->add_dyn_prop (DYN_PROP_ASSOCIATED, prop); + } + + /* Read DW_AT_data_location and set in type. */ + attr = dwarf2_attr (die, DW_AT_data_location, cu); + if (attr_to_dynamic_prop (attr, die, cu, &prop, cu->addr_type ())) + type->add_dyn_prop (DYN_PROP_DATA_LOCATION, prop); + + if (per_objfile->die_type_hash == NULL) + per_objfile->die_type_hash + = htab_up (htab_create_alloc (127, + per_cu_offset_and_type_hash, + per_cu_offset_and_type_eq, + NULL, xcalloc, xfree)); + + ofs.per_cu = cu->per_cu; + ofs.sect_off = die->sect_off; + ofs.type = type; + slot = (struct dwarf2_per_cu_offset_and_type **) + htab_find_slot (per_objfile->die_type_hash.get (), &ofs, INSERT); + if (*slot) + complaint (_("A problem internal to GDB: DIE %s has type already set"), + sect_offset_str (die->sect_off)); + *slot = XOBNEW (&objfile->objfile_obstack, + struct dwarf2_per_cu_offset_and_type); + **slot = ofs; + return type; +} + +/* Look up the type for the die at SECT_OFF in PER_CU in die_type_hash, + or return NULL if the die does not have a saved type. */ + +static struct type * +get_die_type_at_offset (sect_offset sect_off, + dwarf2_per_cu_data *per_cu, + dwarf2_per_objfile *per_objfile) +{ + struct dwarf2_per_cu_offset_and_type *slot, ofs; + + if (per_objfile->die_type_hash == NULL) + return NULL; + + ofs.per_cu = per_cu; + ofs.sect_off = sect_off; + slot = ((struct dwarf2_per_cu_offset_and_type *) + htab_find (per_objfile->die_type_hash.get (), &ofs)); + if (slot) + return slot->type; + else + return NULL; +} + +/* Look up the type for DIE in CU in die_type_hash, + or return NULL if DIE does not have a saved type. */ + +static struct type * +get_die_type (struct die_info *die, struct dwarf2_cu *cu) +{ + return get_die_type_at_offset (die->sect_off, cu->per_cu, cu->per_objfile); +} + +/* Add a dependence relationship from CU to REF_PER_CU. */ + +static void +dwarf2_add_dependence (struct dwarf2_cu *cu, + struct dwarf2_per_cu_data *ref_per_cu) +{ + void **slot; + + if (cu->dependencies == NULL) + cu->dependencies + = htab_create_alloc_ex (5, htab_hash_pointer, htab_eq_pointer, + NULL, &cu->comp_unit_obstack, + hashtab_obstack_allocate, + dummy_obstack_deallocate); + + slot = htab_find_slot (cu->dependencies, ref_per_cu, INSERT); + if (*slot == NULL) + *slot = ref_per_cu; +} + +/* Subroutine of dwarf2_mark to pass to htab_traverse. + Set the mark field in every compilation unit in the + cache that we must keep because we are keeping CU. + + DATA is the dwarf2_per_objfile object in which to look up CUs. */ + +static int +dwarf2_mark_helper (void **slot, void *data) +{ + dwarf2_per_cu_data *per_cu = (dwarf2_per_cu_data *) *slot; + dwarf2_per_objfile *per_objfile = (dwarf2_per_objfile *) data; + dwarf2_cu *cu = per_objfile->get_cu (per_cu); + + /* cu->dependencies references may not yet have been ever read if QUIT aborts + reading of the chain. As such dependencies remain valid it is not much + useful to track and undo them during QUIT cleanups. */ + if (cu == nullptr) + return 1; + + if (cu->mark) + return 1; + + cu->mark = true; + + if (cu->dependencies != nullptr) + htab_traverse (cu->dependencies, dwarf2_mark_helper, per_objfile); + + return 1; +} + +/* Set the mark field in CU and in every other compilation unit in the + cache that we must keep because we are keeping CU. */ + +static void +dwarf2_mark (struct dwarf2_cu *cu) +{ + if (cu->mark) + return; + + cu->mark = true; + + if (cu->dependencies != nullptr) + htab_traverse (cu->dependencies, dwarf2_mark_helper, cu->per_objfile); +} + +/* Trivial hash function for partial_die_info: the hash value of a DIE + is its offset in .debug_info for this objfile. */ + +static hashval_t +partial_die_hash (const void *item) +{ + const struct partial_die_info *part_die + = (const struct partial_die_info *) item; + + return to_underlying (part_die->sect_off); +} + +/* Trivial comparison function for partial_die_info structures: two DIEs + are equal if they have the same offset. */ + +static int +partial_die_eq (const void *item_lhs, const void *item_rhs) +{ + const struct partial_die_info *part_die_lhs + = (const struct partial_die_info *) item_lhs; + const struct partial_die_info *part_die_rhs + = (const struct partial_die_info *) item_rhs; + + return part_die_lhs->sect_off == part_die_rhs->sect_off; +} + +struct cmd_list_element *set_dwarf_cmdlist; +struct cmd_list_element *show_dwarf_cmdlist; + +static void +show_check_physname (struct ui_file *file, int from_tty, + struct cmd_list_element *c, const char *value) +{ + fprintf_filtered (file, + _("Whether to check \"physname\" is %s.\n"), + value); +} + +void _initialize_dwarf2_read (); +void +_initialize_dwarf2_read () +{ + add_basic_prefix_cmd ("dwarf", class_maintenance, _("\ +Set DWARF specific variables.\n\ +Configure DWARF variables such as the cache size."), + &set_dwarf_cmdlist, "maintenance set dwarf ", + 0/*allow-unknown*/, &maintenance_set_cmdlist); + + add_show_prefix_cmd ("dwarf", class_maintenance, _("\ +Show DWARF specific variables.\n\ +Show DWARF variables such as the cache size."), + &show_dwarf_cmdlist, "maintenance show dwarf ", + 0/*allow-unknown*/, &maintenance_show_cmdlist); + + add_setshow_zinteger_cmd ("max-cache-age", class_obscure, + &dwarf_max_cache_age, _("\ +Set the upper bound on the age of cached DWARF compilation units."), _("\ +Show the upper bound on the age of cached DWARF compilation units."), _("\ +A higher limit means that cached compilation units will be stored\n\ +in memory longer, and more total memory will be used. Zero disables\n\ +caching, which can slow down startup."), + NULL, + show_dwarf_max_cache_age, + &set_dwarf_cmdlist, + &show_dwarf_cmdlist); + + add_setshow_zuinteger_cmd ("dwarf-read", no_class, &dwarf_read_debug, _("\ +Set debugging of the DWARF reader."), _("\ +Show debugging of the DWARF reader."), _("\ +When enabled (non-zero), debugging messages are printed during DWARF\n\ +reading and symtab expansion. A value of 1 (one) provides basic\n\ +information. A value greater than 1 provides more verbose information."), + NULL, + NULL, + &setdebuglist, &showdebuglist); + + add_setshow_zuinteger_cmd ("dwarf-die", no_class, &dwarf_die_debug, _("\ +Set debugging of the DWARF DIE reader."), _("\ +Show debugging of the DWARF DIE reader."), _("\ +When enabled (non-zero), DIEs are dumped after they are read in.\n\ +The value is the maximum depth to print."), + NULL, + NULL, + &setdebuglist, &showdebuglist); + + add_setshow_zuinteger_cmd ("dwarf-line", no_class, &dwarf_line_debug, _("\ +Set debugging of the dwarf line reader."), _("\ +Show debugging of the dwarf line reader."), _("\ +When enabled (non-zero), line number entries are dumped as they are read in.\n\ +A value of 1 (one) provides basic information.\n\ +A value greater than 1 provides more verbose information."), + NULL, + NULL, + &setdebuglist, &showdebuglist); + + add_setshow_boolean_cmd ("check-physname", no_class, &check_physname, _("\ +Set cross-checking of \"physname\" code against demangler."), _("\ +Show cross-checking of \"physname\" code against demangler."), _("\ +When enabled, GDB's internal \"physname\" code is checked against\n\ +the demangler."), + NULL, show_check_physname, + &setdebuglist, &showdebuglist); + + add_setshow_boolean_cmd ("use-deprecated-index-sections", + no_class, &use_deprecated_index_sections, _("\ +Set whether to use deprecated gdb_index sections."), _("\ +Show whether to use deprecated gdb_index sections."), _("\ +When enabled, deprecated .gdb_index sections are used anyway.\n\ +Normally they are ignored either because of a missing feature or\n\ +performance issue.\n\ +Warning: This option must be enabled before gdb reads the file."), + NULL, + NULL, + &setlist, &showlist); + + dwarf2_locexpr_index = register_symbol_computed_impl (LOC_COMPUTED, + &dwarf2_locexpr_funcs); + dwarf2_loclist_index = register_symbol_computed_impl (LOC_COMPUTED, + &dwarf2_loclist_funcs); + + dwarf2_locexpr_block_index = register_symbol_block_impl (LOC_BLOCK, + &dwarf2_block_frame_base_locexpr_funcs); + dwarf2_loclist_block_index = register_symbol_block_impl (LOC_BLOCK, + &dwarf2_block_frame_base_loclist_funcs); + +#if GDB_SELF_TEST + selftests::register_test ("dw2_expand_symtabs_matching", + selftests::dw2_expand_symtabs_matching::run_test); + selftests::register_test ("dwarf2_find_containing_comp_unit", + selftests::find_containing_comp_unit::run_test); +#endif +} diff -Nru gdb-9.1/gdb/dwarf2/read.h gdb-10.2/gdb/dwarf2/read.h --- gdb-9.1/gdb/dwarf2/read.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/dwarf2/read.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,697 @@ +/* DWARF 2 debugging format support for GDB. + + Copyright (C) 1994-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef DWARF2READ_H +#define DWARF2READ_H + +#include <queue> +#include <unordered_map> +#include "dwarf2/comp-unit.h" +#include "dwarf2/index-cache.h" +#include "dwarf2/section.h" +#include "filename-seen-cache.h" +#include "gdb_obstack.h" +#include "gdbsupport/hash_enum.h" +#include "gdbsupport/function-view.h" +#include "psympriv.h" + +/* Hold 'maintenance (set|show) dwarf' commands. */ +extern struct cmd_list_element *set_dwarf_cmdlist; +extern struct cmd_list_element *show_dwarf_cmdlist; + +struct tu_stats +{ + int nr_uniq_abbrev_tables; + int nr_symtabs; + int nr_symtab_sharers; + int nr_stmt_less_type_units; + int nr_all_type_units_reallocs; +}; + +struct dwarf2_cu; +struct dwarf2_debug_sections; +struct dwarf2_per_cu_data; +struct mapped_index; +struct mapped_debug_names; +struct signatured_type; +struct type_unit_group; + +/* One item on the queue of compilation units to read in full symbols + for. */ +struct dwarf2_queue_item +{ + dwarf2_queue_item (dwarf2_per_cu_data *cu, dwarf2_per_objfile *per_objfile, + enum language lang) + : per_cu (cu), + per_objfile (per_objfile), + pretend_language (lang) + { + } + + ~dwarf2_queue_item (); + + DISABLE_COPY_AND_ASSIGN (dwarf2_queue_item); + + dwarf2_per_cu_data *per_cu; + dwarf2_per_objfile *per_objfile; + enum language pretend_language; +}; + +/* Some DWARF data can be shared across objfiles who share the same BFD, + this data is stored in this object. + + Two dwarf2_per_objfile objects representing objfiles sharing the same BFD + will point to the same instance of dwarf2_per_bfd, unless the BFD requires + relocation. */ + +struct dwarf2_per_bfd +{ + /* Construct a dwarf2_per_bfd for OBFD. NAMES points to the + dwarf2 section names, or is NULL if the standard ELF names are + used. CAN_COPY is true for formats where symbol + interposition is possible and so symbol values must follow copy + relocation rules. */ + dwarf2_per_bfd (bfd *obfd, const dwarf2_debug_sections *names, bool can_copy); + + ~dwarf2_per_bfd (); + + DISABLE_COPY_AND_ASSIGN (dwarf2_per_bfd); + + /* Return the CU/TU given its index. + + This is intended for loops like: + + for (i = 0; i < (dwarf2_per_bfd->n_comp_units + + dwarf2_per_bfd->n_type_units); ++i) + { + dwarf2_per_cu_data *per_cu = dwarf2_per_bfd->get_cutu (i); + + ...; + } + */ + dwarf2_per_cu_data *get_cutu (int index); + + /* Return the CU given its index. + This differs from get_cutu in that it's for when you know INDEX refers to a + CU. */ + dwarf2_per_cu_data *get_cu (int index); + + /* Return the TU given its index. + This differs from get_cutu in that it's for when you know INDEX refers to a + TU. */ + signatured_type *get_tu (int index); + + /* A convenience function to allocate a dwarf2_per_cu_data. The + returned object has its "index" field set properly. The object + is allocated on the dwarf2_per_bfd obstack. */ + dwarf2_per_cu_data *allocate_per_cu (); + + /* A convenience function to allocate a signatured_type. The + returned object has its "index" field set properly. The object + is allocated on the dwarf2_per_bfd obstack. */ + signatured_type *allocate_signatured_type (); + + /* Return the number of partial symtabs allocated with allocate_per_cu + and allocate_signatured_type so far. */ + int num_psymtabs () const + { return m_num_psymtabs; } + +private: + /* This function is mapped across the sections and remembers the + offset and size of each of the debugging sections we are + interested in. */ + void locate_sections (bfd *abfd, asection *sectp, + const dwarf2_debug_sections &names); + +public: + /* The corresponding BFD. */ + bfd *obfd; + + /* Objects that can be shared across objfiles are stored in this + obstack or on the psymtab obstack, while objects that are + objfile-specific are stored on the objfile obstack. */ + auto_obstack obstack; + + dwarf2_section_info info {}; + dwarf2_section_info abbrev {}; + dwarf2_section_info line {}; + dwarf2_section_info loc {}; + dwarf2_section_info loclists {}; + dwarf2_section_info macinfo {}; + dwarf2_section_info macro {}; + dwarf2_section_info str {}; + dwarf2_section_info str_offsets {}; + dwarf2_section_info line_str {}; + dwarf2_section_info ranges {}; + dwarf2_section_info rnglists {}; + dwarf2_section_info addr {}; + dwarf2_section_info frame {}; + dwarf2_section_info eh_frame {}; + dwarf2_section_info gdb_index {}; + dwarf2_section_info debug_names {}; + dwarf2_section_info debug_aranges {}; + + std::vector<dwarf2_section_info> types; + + /* Table of all the compilation units. This is used to locate + the target compilation unit of a particular reference. */ + std::vector<dwarf2_per_cu_data *> all_comp_units; + + /* The .debug_types-related CUs (TUs). */ + std::vector<signatured_type *> all_type_units; + + /* Table of struct type_unit_group objects. + The hash key is the DW_AT_stmt_list value. */ + htab_up type_unit_groups; + + /* A table mapping .debug_types signatures to its signatured_type entry. + This is NULL if the .debug_types section hasn't been read in yet. */ + htab_up signatured_types; + + /* Type unit statistics, to see how well the scaling improvements + are doing. */ + struct tu_stats tu_stats {}; + + /* A table mapping DW_AT_dwo_name values to struct dwo_file objects. + This is NULL if the table hasn't been allocated yet. */ + htab_up dwo_files; + + /* True if we've checked for whether there is a DWP file. */ + bool dwp_checked = false; + + /* The DWP file if there is one, or NULL. */ + std::unique_ptr<struct dwp_file> dwp_file; + + /* The shared '.dwz' file, if one exists. This is used when the + original data was compressed using 'dwz -m'. */ + std::unique_ptr<struct dwz_file> dwz_file; + + /* Whether copy relocations are supported by this object format. */ + bool can_copy; + + /* A flag indicating whether this objfile has a section loaded at a + VMA of 0. */ + bool has_section_at_zero = false; + + /* True if we are using the mapped index, + or we are faking it for OBJF_READNOW's sake. */ + bool using_index = false; + + /* The mapped index, or NULL if .gdb_index is missing or not being used. */ + std::unique_ptr<mapped_index> index_table; + + /* The mapped index, or NULL if .debug_names is missing or not being used. */ + std::unique_ptr<mapped_debug_names> debug_names_table; + + /* When using index_table, this keeps track of all quick_file_names entries. + TUs typically share line table entries with a CU, so we maintain a + separate table of all line table entries to support the sharing. + Note that while there can be way more TUs than CUs, we've already + sorted all the TUs into "type unit groups", grouped by their + DW_AT_stmt_list value. Therefore the only sharing done here is with a + CU and its associated TU group if there is one. */ + htab_up quick_file_names_table; + + /* Set during partial symbol reading, to prevent queueing of full + symbols. */ + bool reading_partial_symbols = false; + + /* The CUs we recently read. */ + std::vector<dwarf2_per_cu_data *> just_read_cus; + + /* Table containing all filenames. This is an optional because the + table is lazily constructed on first access. */ + gdb::optional<filename_seen_cache> filenames_cache; + + /* If we loaded the index from an external file, this contains the + resources associated to the open file, memory mapping, etc. */ + std::unique_ptr<index_cache_resource> index_cache_res; + + /* Mapping from abstract origin DIE to concrete DIEs that reference it as + DW_AT_abstract_origin. */ + std::unordered_map<sect_offset, std::vector<sect_offset>, + gdb::hash_enum<sect_offset>> + abstract_to_concrete; + + /* CUs that are queued to be read. */ + gdb::optional<std::queue<dwarf2_queue_item>> queue; + + /* We keep a separate reference to the partial symtabs, in case we + are sharing them between objfiles. This is only set after + partial symbols have been read the first time. */ + std::shared_ptr<psymtab_storage> partial_symtabs; + +private: + + /* The total number of per_cu and signatured_type objects that have + been created so far for this reader. */ + size_t m_num_psymtabs = 0; +}; + +/* This is the per-objfile data associated with a type_unit_group. */ + +struct type_unit_group_unshareable +{ + /* The compunit symtab. + Type units in a group needn't all be defined in the same source file, + so we create an essentially anonymous symtab as the compunit symtab. */ + struct compunit_symtab *compunit_symtab = nullptr; + + /* The number of symtabs from the line header. + The value here must match line_header.num_file_names. */ + unsigned int num_symtabs = 0; + + /* The symbol tables for this TU (obtained from the files listed in + DW_AT_stmt_list). + WARNING: The order of entries here must match the order of entries + in the line header. After the first TU using this type_unit_group, the + line header for the subsequent TUs is recreated from this. This is done + because we need to use the same symtabs for each TU using the same + DW_AT_stmt_list value. Also note that symtabs may be repeated here, + there's no guarantee the line header doesn't have duplicate entries. */ + struct symtab **symtabs = nullptr; +}; + +/* Collection of data recorded per objfile. + This hangs off of dwarf2_objfile_data_key. + + Some DWARF data cannot (currently) be shared across objfiles. Such + data is stored in this object. */ + +struct dwarf2_per_objfile +{ + dwarf2_per_objfile (struct objfile *objfile, dwarf2_per_bfd *per_bfd) + : objfile (objfile), per_bfd (per_bfd) + {} + + ~dwarf2_per_objfile (); + + /* Return pointer to string at .debug_line_str offset as read from BUF. + BUF is assumed to be in a compilation unit described by CU_HEADER. + Return *BYTES_READ_PTR count of bytes read from BUF. */ + const char *read_line_string (const gdb_byte *buf, + const struct comp_unit_head *cu_header, + unsigned int *bytes_read_ptr); + + /* Resize the M_SYMTABS vector to the needed size (the number of partial + symtabs allocated by the per-bfd). */ + void resize_symtabs () + { + /* The symtabs vector should only grow, not shrink. */ + gdb_assert (per_bfd->num_psymtabs () >= m_symtabs.size ()); + + m_symtabs.resize (per_bfd->num_psymtabs ()); + } + + /* Return true if the symtab corresponding to PER_CU has been set, + false otherwise. */ + bool symtab_set_p (const dwarf2_per_cu_data *per_cu) const; + + /* Return the compunit_symtab associated to PER_CU, if it has been created. */ + compunit_symtab *get_symtab (const dwarf2_per_cu_data *per_cu) const; + + /* Set the compunit_symtab associated to PER_CU. */ + void set_symtab (const dwarf2_per_cu_data *per_cu, compunit_symtab *symtab); + + /* Get the type_unit_group_unshareable corresponding to TU_GROUP. If one + does not exist, create it. */ + type_unit_group_unshareable *get_type_unit_group_unshareable + (type_unit_group *tu_group); + + struct type *get_type_for_signatured_type (signatured_type *sig_type) const; + + void set_type_for_signatured_type (signatured_type *sig_type, + struct type *type); + + /* Find an integer type SIZE_IN_BYTES bytes in size and return it. + UNSIGNED_P controls if the integer is unsigned or not. */ + struct type *int_type (int size_in_bytes, bool unsigned_p) const; + + /* Get the dwarf2_cu matching PER_CU for this objfile. */ + dwarf2_cu *get_cu (dwarf2_per_cu_data *per_cu); + + /* Set the dwarf2_cu matching PER_CU for this objfile. */ + void set_cu (dwarf2_per_cu_data *per_cu, dwarf2_cu *cu); + + /* Remove/free the dwarf2_cu matching PER_CU for this objfile. */ + void remove_cu (dwarf2_per_cu_data *per_cu); + + /* Free all cached compilation units. */ + void remove_all_cus (); + + /* Increase the age counter on each CU compilation unit and free + any that are too old. */ + void age_comp_units (); + + /* Back link. */ + struct objfile *objfile; + + /* Pointer to the data that is (possibly) shared between this objfile and + other objfiles backed by the same BFD. */ + struct dwarf2_per_bfd *per_bfd; + + /* Table mapping type DIEs to their struct type *. + This is nullptr if not allocated yet. + The mapping is done via (CU/TU + DIE offset) -> type. */ + htab_up die_type_hash; + + /* Table containing line_header indexed by offset and offset_in_dwz. */ + htab_up line_header_hash; + +private: + /* Hold the corresponding compunit_symtab for each CU or TU. This + is indexed by dwarf2_per_cu_data::index. A NULL value means + that the CU/TU has not been expanded yet. */ + std::vector<compunit_symtab *> m_symtabs; + + /* Map from a type unit group to the corresponding unshared + structure. */ + typedef std::unique_ptr<type_unit_group_unshareable> + type_unit_group_unshareable_up; + + std::unordered_map<type_unit_group *, type_unit_group_unshareable_up> + m_type_units; + + /* Map from signatured types to the corresponding struct type. */ + std::unordered_map<signatured_type *, struct type *> m_type_map; + + /* Map from the objfile-independent dwarf2_per_cu_data instances to the + corresponding objfile-dependent dwarf2_cu instances. */ + std::unordered_map<dwarf2_per_cu_data *, dwarf2_cu *> m_dwarf2_cus; +}; + +/* Get the dwarf2_per_objfile associated to OBJFILE. */ + +dwarf2_per_objfile *get_dwarf2_per_objfile (struct objfile *objfile); + +/* A partial symtab specialized for DWARF. */ +struct dwarf2_psymtab : public partial_symtab +{ + dwarf2_psymtab (const char *filename, struct objfile *objfile, + dwarf2_per_cu_data *per_cu) + : partial_symtab (filename, objfile, 0), + per_cu_data (per_cu) + { + } + + void read_symtab (struct objfile *) override; + void expand_psymtab (struct objfile *) override; + bool readin_p (struct objfile *) const override; + compunit_symtab *get_compunit_symtab (struct objfile *) const override; + + struct dwarf2_per_cu_data *per_cu_data; +}; + +/* Persistent data held for a compilation unit, even when not + processing it. We put a pointer to this structure in the + psymtab. */ + +struct dwarf2_per_cu_data +{ + /* The start offset and length of this compilation unit. + NOTE: Unlike comp_unit_head.length, this length includes + initial_length_size. + If the DIE refers to a DWO file, this is always of the original die, + not the DWO file. */ + sect_offset sect_off; + unsigned int length; + + /* DWARF standard version this data has been read from (such as 4 or 5). */ + short dwarf_version; + + /* Flag indicating this compilation unit will be read in before + any of the current compilation units are processed. */ + unsigned int queued : 1; + + /* This flag will be set when reading partial DIEs if we need to load + absolutely all DIEs for this compilation unit, instead of just the ones + we think are interesting. It gets set if we look for a DIE in the + hash table and don't find it. */ + unsigned int load_all_dies : 1; + + /* Non-zero if this CU is from .debug_types. + Struct dwarf2_per_cu_data is contained in struct signatured_type iff + this is non-zero. */ + unsigned int is_debug_types : 1; + + /* Non-zero if this CU is from the .dwz file. */ + unsigned int is_dwz : 1; + + /* Non-zero if reading a TU directly from a DWO file, bypassing the stub. + This flag is only valid if is_debug_types is true. + We can't read a CU directly from a DWO file: There are required + attributes in the stub. */ + unsigned int reading_dwo_directly : 1; + + /* Non-zero if the TU has been read. + This is used to assist the "Stay in DWO Optimization" for Fission: + When reading a DWO, it's faster to read TUs from the DWO instead of + fetching them from random other DWOs (due to comdat folding). + If the TU has already been read, the optimization is unnecessary + (and unwise - we don't want to change where gdb thinks the TU lives + "midflight"). + This flag is only valid if is_debug_types is true. */ + unsigned int tu_read : 1; + + /* Our index in the unshared "symtabs" vector. */ + unsigned index; + + /* The section this CU/TU lives in. + If the DIE refers to a DWO file, this is always the original die, + not the DWO file. */ + struct dwarf2_section_info *section; + + /* The unit type of this CU. */ + enum dwarf_unit_type unit_type; + + /* The language of this CU. */ + enum language lang; + + /* Backlink to the owner of this. */ + dwarf2_per_bfd *per_bfd; + + /* DWARF header of this CU. Note that dwarf2_cu reads its own version of the + header, which may differ from this one, since it may pass rcuh_kind::TYPE + to read_comp_unit_head, whereas for dwarf2_per_cu_data we always pass + rcuh_kind::COMPILE. + + Don't access this field directly, use the get_header method instead. It + should be private, but we can't make it private at the moment. */ + mutable comp_unit_head m_header; + + /* True if HEADER has been read in. + + Don't access this field directly. It should be private, but we can't make + it private at the moment. */ + mutable bool m_header_read_in; + + /* When dwarf2_per_bfd::using_index is true, the 'quick' field + is active. Otherwise, the 'psymtab' field is active. */ + union + { + /* The partial symbol table associated with this compilation unit, + or NULL for unread partial units. */ + dwarf2_psymtab *psymtab; + + /* Data needed by the "quick" functions. */ + struct dwarf2_per_cu_quick_data *quick; + } v; + + /* The CUs we import using DW_TAG_imported_unit. This is filled in + while reading psymtabs, used to compute the psymtab dependencies, + and then cleared. Then it is filled in again while reading full + symbols, and only deleted when the objfile is destroyed. + + This is also used to work around a difference between the way gold + generates .gdb_index version <=7 and the way gdb does. Arguably this + is a gold bug. For symbols coming from TUs, gold records in the index + the CU that includes the TU instead of the TU itself. This breaks + dw2_lookup_symbol: It assumes that if the index says symbol X lives + in CU/TU Y, then one need only expand Y and a subsequent lookup in Y + will find X. Alas TUs live in their own symtab, so after expanding CU Y + we need to look in TU Z to find X. Fortunately, this is akin to + DW_TAG_imported_unit, so we just use the same mechanism: For + .gdb_index version <=7 this also records the TUs that the CU referred + to. Concurrently with this change gdb was modified to emit version 8 + indices so we only pay a price for gold generated indices. + http://sourceware.org/bugzilla/show_bug.cgi?id=15021. + + This currently needs to be a public member due to how + dwarf2_per_cu_data is allocated and used. Ideally in future things + could be refactored to make this private. Until then please try to + avoid direct access to this member, and instead use the helper + functions above. */ + std::vector <dwarf2_per_cu_data *> *imported_symtabs; + + /* Return true of IMPORTED_SYMTABS is empty or not yet allocated. */ + bool imported_symtabs_empty () const + { + return (imported_symtabs == nullptr || imported_symtabs->empty ()); + } + + /* Push P to the back of IMPORTED_SYMTABS, allocated IMPORTED_SYMTABS + first if required. */ + void imported_symtabs_push (dwarf2_per_cu_data *p) + { + if (imported_symtabs == nullptr) + imported_symtabs = new std::vector <dwarf2_per_cu_data *>; + imported_symtabs->push_back (p); + } + + /* Return the size of IMPORTED_SYMTABS if it is allocated, otherwise + return 0. */ + size_t imported_symtabs_size () const + { + if (imported_symtabs == nullptr) + return 0; + return imported_symtabs->size (); + } + + /* Delete IMPORTED_SYMTABS and set the pointer back to nullptr. */ + void imported_symtabs_free () + { + delete imported_symtabs; + imported_symtabs = nullptr; + } + + /* Get the header of this per_cu, reading it if necessary. */ + const comp_unit_head *get_header () const; + + /* Return the address size given in the compilation unit header for + this CU. */ + int addr_size () const; + + /* Return the offset size given in the compilation unit header for + this CU. */ + int offset_size () const; + + /* Return the DW_FORM_ref_addr size given in the compilation unit + header for this CU. */ + int ref_addr_size () const; + + /* Return DWARF version number of this CU. */ + short version () const + { + return dwarf_version; + } + + /* A type unit group has a per_cu object that is recognized by + having no section. */ + bool type_unit_group_p () const + { + return section == nullptr; + } +}; + +/* Entry in the signatured_types hash table. */ + +struct signatured_type +{ + /* The "per_cu" object of this type. + This struct is used iff per_cu.is_debug_types. + N.B.: This is the first member so that it's easy to convert pointers + between them. */ + struct dwarf2_per_cu_data per_cu; + + /* The type's signature. */ + ULONGEST signature; + + /* Offset in the TU of the type's DIE, as read from the TU header. + If this TU is a DWO stub and the definition lives in a DWO file + (specified by DW_AT_GNU_dwo_name), this value is unusable. */ + cu_offset type_offset_in_tu; + + /* Offset in the section of the type's DIE. + If the definition lives in a DWO file, this is the offset in the + .debug_types.dwo section. + The value is zero until the actual value is known. + Zero is otherwise not a valid section offset. */ + sect_offset type_offset_in_section; + + /* Type units are grouped by their DW_AT_stmt_list entry so that they + can share them. This points to the containing symtab. */ + struct type_unit_group *type_unit_group; + + /* Containing DWO unit. + This field is valid iff per_cu.reading_dwo_directly. */ + struct dwo_unit *dwo_unit; +}; + +/* Open the separate '.dwz' debug file, if needed. Return NULL if + there is no .gnu_debugaltlink section in the file. Error if there + is such a section but the file cannot be found. */ + +extern dwz_file *dwarf2_get_dwz_file (dwarf2_per_bfd *per_bfd); + +/* Return the type of the DIE at DIE_OFFSET in the CU named by + PER_CU. */ + +struct type *dwarf2_get_die_type (cu_offset die_offset, + dwarf2_per_cu_data *per_cu, + dwarf2_per_objfile *per_objfile); + +/* Given an index in .debug_addr, fetch the value. + NOTE: This can be called during dwarf expression evaluation, + long after the debug information has been read, and thus per_cu->cu + may no longer exist. */ + +CORE_ADDR dwarf2_read_addr_index (dwarf2_per_cu_data *per_cu, + dwarf2_per_objfile *per_objfile, + unsigned int addr_index); + +/* Return DWARF block referenced by DW_AT_location of DIE at SECT_OFF at PER_CU. + Returned value is intended for DW_OP_call*. Returned + dwarf2_locexpr_baton->data has lifetime of + PER_CU->DWARF2_PER_OBJFILE->OBJFILE. */ + +struct dwarf2_locexpr_baton dwarf2_fetch_die_loc_sect_off + (sect_offset sect_off, dwarf2_per_cu_data *per_cu, + dwarf2_per_objfile *per_objfile, + gdb::function_view<CORE_ADDR ()> get_frame_pc, + bool resolve_abstract_p = false); + +/* Like dwarf2_fetch_die_loc_sect_off, but take a CU + offset. */ + +struct dwarf2_locexpr_baton dwarf2_fetch_die_loc_cu_off + (cu_offset offset_in_cu, dwarf2_per_cu_data *per_cu, + dwarf2_per_objfile *per_objfile, + gdb::function_view<CORE_ADDR ()> get_frame_pc); + +/* If the DIE at SECT_OFF in PER_CU has a DW_AT_const_value, return a + pointer to the constant bytes and set LEN to the length of the + data. If memory is needed, allocate it on OBSTACK. If the DIE + does not have a DW_AT_const_value, return NULL. */ + +extern const gdb_byte *dwarf2_fetch_constant_bytes + (sect_offset sect_off, dwarf2_per_cu_data *per_cu, + dwarf2_per_objfile *per_objfile, obstack *obstack, + LONGEST *len); + +/* Return the type of the die at SECT_OFF in PER_CU. Return NULL if no + valid type for this die is found. */ + +struct type *dwarf2_fetch_die_type_sect_off + (sect_offset sect_off, dwarf2_per_cu_data *per_cu, + dwarf2_per_objfile *per_objfile); + +/* When non-zero, dump line number entries as they are read in. */ +extern unsigned int dwarf_line_debug; + +#endif /* DWARF2READ_H */ diff -Nru gdb-9.1/gdb/dwarf2/section.c gdb-10.2/gdb/dwarf2/section.c --- gdb-9.1/gdb/dwarf2/section.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/dwarf2/section.c 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,206 @@ +/* DWARF 2 low-level section code + + Copyright (C) 1994-2021 Free Software Foundation, Inc. + + Adapted by Gary Funck (gary@intrepid.com), Intrepid Technology, + Inc. with support from Florida State University (under contract + with the Ada Joint Program Office), and Silicon Graphics, Inc. + Initial contribution by Brent Benson, Harris Computer Systems, Inc., + based on Fred Fish's (Cygnus Support) implementation of DWARF 1 + support. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "defs.h" +#include "dwarf2/section.h" +#include "gdb_bfd.h" +#include "objfiles.h" +#include "complaints.h" + +void +dwarf2_section_info::overflow_complaint () const +{ + complaint (_("debug info runs off end of %s section" + " [in module %s]"), + get_name (), get_file_name ()); +} + +struct dwarf2_section_info * +dwarf2_section_info::get_containing_section () const +{ + gdb_assert (is_virtual); + return s.containing_section; +} + +struct bfd * +dwarf2_section_info::get_bfd_owner () const +{ + const dwarf2_section_info *section = this; + if (is_virtual) + { + section = get_containing_section (); + gdb_assert (!section->is_virtual); + } + return section->s.section->owner; +} + +asection * +dwarf2_section_info::get_bfd_section () const +{ + const dwarf2_section_info *section = this; + if (section->is_virtual) + { + section = get_containing_section (); + gdb_assert (!section->is_virtual); + } + return section->s.section; +} + +const char * +dwarf2_section_info::get_name () const +{ + asection *sectp = get_bfd_section (); + + gdb_assert (sectp != NULL); + return bfd_section_name (sectp); +} + +const char * +dwarf2_section_info::get_file_name () const +{ + bfd *abfd = get_bfd_owner (); + + return bfd_get_filename (abfd); +} + +int +dwarf2_section_info::get_id () const +{ + asection *sectp = get_bfd_section (); + + if (sectp == NULL) + return 0; + return sectp->id; +} + +int +dwarf2_section_info::get_flags () const +{ + asection *sectp = get_bfd_section (); + + gdb_assert (sectp != NULL); + return bfd_section_flags (sectp); +} + +bool +dwarf2_section_info::empty () const +{ + if (is_virtual) + return size == 0; + return s.section == NULL || size == 0; +} + +void +dwarf2_section_info::read (struct objfile *objfile) +{ + asection *sectp; + bfd *abfd; + gdb_byte *buf, *retbuf; + + if (readin) + return; + buffer = NULL; + readin = true; + + if (empty ()) + return; + + sectp = get_bfd_section (); + + /* If this is a virtual section we need to read in the real one first. */ + if (is_virtual) + { + struct dwarf2_section_info *containing_section = + get_containing_section (); + + gdb_assert (sectp != NULL); + if ((sectp->flags & SEC_RELOC) != 0) + { + error (_("Dwarf Error: DWP format V2 with relocations is not" + " supported in section %s [in module %s]"), + get_name (), get_file_name ()); + } + containing_section->read (objfile); + /* Other code should have already caught virtual sections that don't + fit. */ + gdb_assert (virtual_offset + size <= containing_section->size); + /* If the real section is empty or there was a problem reading the + section we shouldn't get here. */ + gdb_assert (containing_section->buffer != NULL); + buffer = containing_section->buffer + virtual_offset; + return; + } + + /* If the section has relocations, we must read it ourselves. + Otherwise we attach it to the BFD. */ + if ((sectp->flags & SEC_RELOC) == 0) + { + buffer = gdb_bfd_map_section (sectp, &size); + return; + } + + buf = (gdb_byte *) obstack_alloc (&objfile->objfile_obstack, size); + buffer = buf; + + /* When debugging .o files, we may need to apply relocations; see + http://sourceware.org/ml/gdb-patches/2002-04/msg00136.html . + We never compress sections in .o files, so we only need to + try this when the section is not compressed. */ + retbuf = symfile_relocate_debug_section (objfile, sectp, buf); + if (retbuf != NULL) + { + buffer = retbuf; + return; + } + + abfd = get_bfd_owner (); + gdb_assert (abfd != NULL); + + if (bfd_seek (abfd, sectp->filepos, SEEK_SET) != 0 + || bfd_bread (buf, size, abfd) != size) + { + error (_("Dwarf Error: Can't read DWARF data" + " in section %s [in module %s]"), + bfd_section_name (sectp), bfd_get_filename (abfd)); + } +} + +const char * +dwarf2_section_info::read_string (struct objfile *objfile, LONGEST str_offset, + const char *form_name) +{ + read (objfile); + if (buffer == NULL) + error (_("%s used without %s section [in module %s]"), + form_name, get_name (), get_file_name ()); + if (str_offset >= size) + error (_("%s pointing outside of %s section [in module %s]"), + form_name, get_name (), get_file_name ()); + gdb_assert (HOST_CHAR_BIT == 8); + if (buffer[str_offset] == '\0') + return NULL; + return (const char *) (buffer + str_offset); +} diff -Nru gdb-9.1/gdb/dwarf2/section.h gdb-10.2/gdb/dwarf2/section.h --- gdb-9.1/gdb/dwarf2/section.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/dwarf2/section.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,128 @@ +/* DWARF 2 low-level section code + + Copyright (C) 1994-2021 Free Software Foundation, Inc. + + Adapted by Gary Funck (gary@intrepid.com), Intrepid Technology, + Inc. with support from Florida State University (under contract + with the Ada Joint Program Office), and Silicon Graphics, Inc. + Initial contribution by Brent Benson, Harris Computer Systems, Inc., + based on Fred Fish's (Cygnus Support) implementation of DWARF 1 + support. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef GDB_DWARF2_SECTION_H +#define GDB_DWARF2_SECTION_H + +/* A descriptor for dwarf sections. + + S.ASECTION, SIZE are typically initialized when the objfile is first + scanned. BUFFER, READIN are filled in later when the section is read. + If the section contained compressed data then SIZE is updated to record + the uncompressed size of the section. + + DWP file format V2 introduces a wrinkle that is easiest to handle by + creating the concept of virtual sections contained within a real section. + In DWP V2 the sections of the input DWO files are concatenated together + into one section, but section offsets are kept relative to the original + input section. + If this is a virtual dwp-v2 section, S.CONTAINING_SECTION is a backlink to + the real section this "virtual" section is contained in, and BUFFER,SIZE + describe the virtual section. */ + +struct dwarf2_section_info +{ + /* Return the name of this section. */ + const char *get_name () const; + + /* Return the containing section of this section, which must be a + virtual section. */ + struct dwarf2_section_info *get_containing_section () const; + + /* Return the bfd owner of this section. */ + struct bfd *get_bfd_owner () const; + + /* Return the bfd section of this section. + Returns NULL if the section is not present. */ + asection *get_bfd_section () const; + + /* Return the name of the file this section is in. */ + const char *get_file_name () const; + + /* Return the id of this section. + Returns 0 if this section doesn't exist. */ + int get_id () const; + + /* Return the flags of this section. This section (or containing + section if this is a virtual section) must exist. */ + int get_flags () const; + + /* Return true if this section does not exist or if it has no + contents. */ + bool empty () const; + + /* Read the contents of this section. + OBJFILE is the main object file, but not necessarily the file where + the section comes from. E.g., for DWO files the bfd of INFO is the bfd + of the DWO file. + If the section is compressed, uncompress it before returning. */ + void read (struct objfile *objfile); + + /* A helper function that returns the size of a section in a safe way. + If you are positive that the section has been read before using the + size, then it is safe to refer to the dwarf2_section_info object's + "size" field directly. In other cases, you must call this + function, because for compressed sections the size field is not set + correctly until the section has been read. */ + bfd_size_type get_size (struct objfile *objfile) + { + if (!readin) + read (objfile); + return size; + } + + /* Issue a complaint that something was outside the bounds of this + buffer. */ + void overflow_complaint () const; + + /* Return pointer to string in this section at offset STR_OFFSET + with error reporting string FORM_NAME. */ + const char *read_string (struct objfile *objfile, LONGEST str_offset, + const char *form_name); + + union + { + /* If this is a real section, the bfd section. */ + asection *section; + /* If this is a virtual section, pointer to the containing ("real") + section. */ + struct dwarf2_section_info *containing_section; + } s; + /* Pointer to section data, only valid if readin. */ + const gdb_byte *buffer; + /* The size of the section, real or virtual. */ + bfd_size_type size; + /* If this is a virtual section, the offset in the real section. + Only valid if is_virtual. */ + bfd_size_type virtual_offset; + /* True if we have tried to read this section. */ + bool readin; + /* True if this is a virtual section, False otherwise. + This specifies which of s.section and s.containing_section to use. */ + bool is_virtual; +}; + +#endif /* GDB_DWARF2_SECTION_H */ diff -Nru gdb-9.1/gdb/dwarf2/stringify.c gdb-10.2/gdb/dwarf2/stringify.c --- gdb-9.1/gdb/dwarf2/stringify.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/dwarf2/stringify.c 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,114 @@ +/* DWARF stringify code + + Copyright (C) 1994-2021 Free Software Foundation, Inc. + + Adapted by Gary Funck (gary@intrepid.com), Intrepid Technology, + Inc. with support from Florida State University (under contract + with the Ada Joint Program Office), and Silicon Graphics, Inc. + Initial contribution by Brent Benson, Harris Computer Systems, Inc., + based on Fred Fish's (Cygnus Support) implementation of DWARF 1 + support. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "defs.h" +#include "dwarf2.h" +#include "dwarf2/stringify.h" + +/* A convenience function that returns an "unknown" DWARF name, + including the value of V. STR is the name of the entity being + printed, e.g., "TAG". */ + +static const char * +dwarf_unknown (const char *str, unsigned v) +{ + char *cell = get_print_cell (); + xsnprintf (cell, PRINT_CELL_SIZE, "DW_%s_<unknown: %u>", str, v); + return cell; +} + +/* See stringify.h. */ + +const char * +dwarf_tag_name (unsigned tag) +{ + const char *name = get_DW_TAG_name (tag); + + if (name == NULL) + return dwarf_unknown ("TAG", tag); + + return name; +} + +/* See stringify.h. */ + +const char * +dwarf_attr_name (unsigned attr) +{ + const char *name; + +#ifdef MIPS /* collides with DW_AT_HP_block_index */ + if (attr == DW_AT_MIPS_fde) + return "DW_AT_MIPS_fde"; +#else + if (attr == DW_AT_HP_block_index) + return "DW_AT_HP_block_index"; +#endif + + name = get_DW_AT_name (attr); + + if (name == NULL) + return dwarf_unknown ("AT", attr); + + return name; +} + +/* See stringify.h. */ + +const char * +dwarf_form_name (unsigned form) +{ + const char *name = get_DW_FORM_name (form); + + if (name == NULL) + return dwarf_unknown ("FORM", form); + + return name; +} + +/* See stringify.h. */ + +const char * +dwarf_bool_name (unsigned mybool) +{ + if (mybool) + return "TRUE"; + else + return "FALSE"; +} + +/* See stringify.h. */ + +const char * +dwarf_type_encoding_name (unsigned enc) +{ + const char *name = get_DW_ATE_name (enc); + + if (name == NULL) + return dwarf_unknown ("ATE", enc); + + return name; +} diff -Nru gdb-9.1/gdb/dwarf2/stringify.h gdb-10.2/gdb/dwarf2/stringify.h --- gdb-9.1/gdb/dwarf2/stringify.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/dwarf2/stringify.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,38 @@ +/* DWARF stringify code + + Copyright (C) 2003-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef GDB_DWARF2_STRINGIFY_H +#define GDB_DWARF2_STRINGIFY_H + +/* Convert a DIE tag into its string name. */ +extern const char *dwarf_tag_name (unsigned tag); + +/* Convert a DWARF attribute code into its string name. */ +extern const char *dwarf_attr_name (unsigned attr); + +/* Convert a DWARF value form code into its string name. */ +extern const char *dwarf_form_name (unsigned form); + +/* Convert a boolean to a string form. */ +extern const char *dwarf_bool_name (unsigned mybool); + +/* Convert a DWARF type code into its string name. */ +extern const char *dwarf_type_encoding_name (unsigned enc); + +#endif /* GDB_DWARF2_STRINGIFY_H */ diff -Nru gdb-9.1/gdb/dwarf2expr.c gdb-10.2/gdb/dwarf2expr.c --- gdb-9.1/gdb/dwarf2expr.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/dwarf2expr.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,1427 +0,0 @@ -/* DWARF 2 Expression Evaluator. - - Copyright (C) 2001-2020 Free Software Foundation, Inc. - - Contributed by Daniel Berlin (dan@dberlin.org) - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "defs.h" -#include "symtab.h" -#include "gdbtypes.h" -#include "value.h" -#include "gdbcore.h" -#include "dwarf2.h" -#include "dwarf2expr.h" -#include "dwarf2loc.h" -#include "gdbsupport/underlying.h" -#include "gdbarch.h" - -/* Cookie for gdbarch data. */ - -static struct gdbarch_data *dwarf_arch_cookie; - -/* This holds gdbarch-specific types used by the DWARF expression - evaluator. See comments in execute_stack_op. */ - -struct dwarf_gdbarch_types -{ - struct type *dw_types[3]; -}; - -/* Allocate and fill in dwarf_gdbarch_types for an arch. */ - -static void * -dwarf_gdbarch_types_init (struct gdbarch *gdbarch) -{ - struct dwarf_gdbarch_types *types - = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct dwarf_gdbarch_types); - - /* The types themselves are lazily initialized. */ - - return types; -} - -/* Return the type used for DWARF operations where the type is - unspecified in the DWARF spec. Only certain sizes are - supported. */ - -struct type * -dwarf_expr_context::address_type () const -{ - struct dwarf_gdbarch_types *types - = (struct dwarf_gdbarch_types *) gdbarch_data (this->gdbarch, - dwarf_arch_cookie); - int ndx; - - if (this->addr_size == 2) - ndx = 0; - else if (this->addr_size == 4) - ndx = 1; - else if (this->addr_size == 8) - ndx = 2; - else - error (_("Unsupported address size in DWARF expressions: %d bits"), - 8 * this->addr_size); - - if (types->dw_types[ndx] == NULL) - types->dw_types[ndx] - = arch_integer_type (this->gdbarch, - 8 * this->addr_size, - 0, "<signed DWARF address type>"); - - return types->dw_types[ndx]; -} - -/* Create a new context for the expression evaluator. */ - -dwarf_expr_context::dwarf_expr_context () -: gdbarch (NULL), - addr_size (0), - ref_addr_size (0), - offset (0), - recursion_depth (0), - max_recursion_depth (0x100), - location (DWARF_VALUE_MEMORY), - len (0), - data (NULL), - initialized (0) -{ -} - -/* Push VALUE onto the stack. */ - -void -dwarf_expr_context::push (struct value *value, bool in_stack_memory) -{ - stack.emplace_back (value, in_stack_memory); -} - -/* Push VALUE onto the stack. */ - -void -dwarf_expr_context::push_address (CORE_ADDR value, bool in_stack_memory) -{ - push (value_from_ulongest (address_type (), value), in_stack_memory); -} - -/* Pop the top item off of the stack. */ - -void -dwarf_expr_context::pop () -{ - if (stack.empty ()) - error (_("dwarf expression stack underflow")); - - stack.pop_back (); -} - -/* Retrieve the N'th item on the stack. */ - -struct value * -dwarf_expr_context::fetch (int n) -{ - if (stack.size () <= n) - error (_("Asked for position %d of stack, " - "stack only has %zu elements on it."), - n, stack.size ()); - return stack[stack.size () - (1 + n)].value; -} - -/* Require that TYPE be an integral type; throw an exception if not. */ - -static void -dwarf_require_integral (struct type *type) -{ - if (TYPE_CODE (type) != TYPE_CODE_INT - && TYPE_CODE (type) != TYPE_CODE_CHAR - && TYPE_CODE (type) != TYPE_CODE_BOOL) - error (_("integral type expected in DWARF expression")); -} - -/* Return the unsigned form of TYPE. TYPE is necessarily an integral - type. */ - -static struct type * -get_unsigned_type (struct gdbarch *gdbarch, struct type *type) -{ - switch (TYPE_LENGTH (type)) - { - case 1: - return builtin_type (gdbarch)->builtin_uint8; - case 2: - return builtin_type (gdbarch)->builtin_uint16; - case 4: - return builtin_type (gdbarch)->builtin_uint32; - case 8: - return builtin_type (gdbarch)->builtin_uint64; - default: - error (_("no unsigned variant found for type, while evaluating " - "DWARF expression")); - } -} - -/* Return the signed form of TYPE. TYPE is necessarily an integral - type. */ - -static struct type * -get_signed_type (struct gdbarch *gdbarch, struct type *type) -{ - switch (TYPE_LENGTH (type)) - { - case 1: - return builtin_type (gdbarch)->builtin_int8; - case 2: - return builtin_type (gdbarch)->builtin_int16; - case 4: - return builtin_type (gdbarch)->builtin_int32; - case 8: - return builtin_type (gdbarch)->builtin_int64; - default: - error (_("no signed variant found for type, while evaluating " - "DWARF expression")); - } -} - -/* Retrieve the N'th item on the stack, converted to an address. */ - -CORE_ADDR -dwarf_expr_context::fetch_address (int n) -{ - struct value *result_val = fetch (n); - enum bfd_endian byte_order = gdbarch_byte_order (this->gdbarch); - ULONGEST result; - - dwarf_require_integral (value_type (result_val)); - result = extract_unsigned_integer (value_contents (result_val), - TYPE_LENGTH (value_type (result_val)), - byte_order); - - /* For most architectures, calling extract_unsigned_integer() alone - is sufficient for extracting an address. However, some - architectures (e.g. MIPS) use signed addresses and using - extract_unsigned_integer() will not produce a correct - result. Make sure we invoke gdbarch_integer_to_address() - for those architectures which require it. */ - if (gdbarch_integer_to_address_p (this->gdbarch)) - { - gdb_byte *buf = (gdb_byte *) alloca (this->addr_size); - struct type *int_type = get_unsigned_type (this->gdbarch, - value_type (result_val)); - - store_unsigned_integer (buf, this->addr_size, byte_order, result); - return gdbarch_integer_to_address (this->gdbarch, int_type, buf); - } - - return (CORE_ADDR) result; -} - -/* Retrieve the in_stack_memory flag of the N'th item on the stack. */ - -bool -dwarf_expr_context::fetch_in_stack_memory (int n) -{ - if (stack.size () <= n) - error (_("Asked for position %d of stack, " - "stack only has %zu elements on it."), - n, stack.size ()); - return stack[stack.size () - (1 + n)].in_stack_memory; -} - -/* Return true if the expression stack is empty. */ - -bool -dwarf_expr_context::stack_empty_p () const -{ - return stack.empty (); -} - -/* Add a new piece to the dwarf_expr_context's piece list. */ -void -dwarf_expr_context::add_piece (ULONGEST size, ULONGEST offset) -{ - this->pieces.emplace_back (); - dwarf_expr_piece &p = this->pieces.back (); - - p.location = this->location; - p.size = size; - p.offset = offset; - - if (p.location == DWARF_VALUE_LITERAL) - { - p.v.literal.data = this->data; - p.v.literal.length = this->len; - } - else if (stack_empty_p ()) - { - p.location = DWARF_VALUE_OPTIMIZED_OUT; - /* Also reset the context's location, for our callers. This is - a somewhat strange approach, but this lets us avoid setting - the location to DWARF_VALUE_MEMORY in all the individual - cases in the evaluator. */ - this->location = DWARF_VALUE_OPTIMIZED_OUT; - } - else if (p.location == DWARF_VALUE_MEMORY) - { - p.v.mem.addr = fetch_address (0); - p.v.mem.in_stack_memory = fetch_in_stack_memory (0); - } - else if (p.location == DWARF_VALUE_IMPLICIT_POINTER) - { - p.v.ptr.die_sect_off = (sect_offset) this->len; - p.v.ptr.offset = value_as_long (fetch (0)); - } - else if (p.location == DWARF_VALUE_REGISTER) - p.v.regno = value_as_long (fetch (0)); - else - { - p.v.value = fetch (0); - } -} - -/* Evaluate the expression at ADDR (LEN bytes long). */ - -void -dwarf_expr_context::eval (const gdb_byte *addr, size_t len) -{ - int old_recursion_depth = this->recursion_depth; - - execute_stack_op (addr, addr + len); - - /* RECURSION_DEPTH becomes invalid if an exception was thrown here. */ - - gdb_assert (this->recursion_depth == old_recursion_depth); -} - -/* Helper to read a uleb128 value or throw an error. */ - -const gdb_byte * -safe_read_uleb128 (const gdb_byte *buf, const gdb_byte *buf_end, - uint64_t *r) -{ - buf = gdb_read_uleb128 (buf, buf_end, r); - if (buf == NULL) - error (_("DWARF expression error: ran off end of buffer reading uleb128 value")); - return buf; -} - -/* Helper to read a sleb128 value or throw an error. */ - -const gdb_byte * -safe_read_sleb128 (const gdb_byte *buf, const gdb_byte *buf_end, - int64_t *r) -{ - buf = gdb_read_sleb128 (buf, buf_end, r); - if (buf == NULL) - error (_("DWARF expression error: ran off end of buffer reading sleb128 value")); - return buf; -} - -const gdb_byte * -safe_skip_leb128 (const gdb_byte *buf, const gdb_byte *buf_end) -{ - buf = gdb_skip_leb128 (buf, buf_end); - if (buf == NULL) - error (_("DWARF expression error: ran off end of buffer reading leb128 value")); - return buf; -} - - -/* Check that the current operator is either at the end of an - expression, or that it is followed by a composition operator or by - DW_OP_GNU_uninit (which should terminate the expression). */ - -void -dwarf_expr_require_composition (const gdb_byte *op_ptr, const gdb_byte *op_end, - const char *op_name) -{ - if (op_ptr != op_end && *op_ptr != DW_OP_piece && *op_ptr != DW_OP_bit_piece - && *op_ptr != DW_OP_GNU_uninit) - error (_("DWARF-2 expression error: `%s' operations must be " - "used either alone or in conjunction with DW_OP_piece " - "or DW_OP_bit_piece."), - op_name); -} - -/* Return true iff the types T1 and T2 are "the same". This only does - checks that might reasonably be needed to compare DWARF base - types. */ - -static int -base_types_equal_p (struct type *t1, struct type *t2) -{ - if (TYPE_CODE (t1) != TYPE_CODE (t2)) - return 0; - if (TYPE_UNSIGNED (t1) != TYPE_UNSIGNED (t2)) - return 0; - return TYPE_LENGTH (t1) == TYPE_LENGTH (t2); -} - -/* If <BUF..BUF_END] contains DW_FORM_block* with single DW_OP_reg* return the - DWARF register number. Otherwise return -1. */ - -int -dwarf_block_to_dwarf_reg (const gdb_byte *buf, const gdb_byte *buf_end) -{ - uint64_t dwarf_reg; - - if (buf_end <= buf) - return -1; - if (*buf >= DW_OP_reg0 && *buf <= DW_OP_reg31) - { - if (buf_end - buf != 1) - return -1; - return *buf - DW_OP_reg0; - } - - if (*buf == DW_OP_regval_type || *buf == DW_OP_GNU_regval_type) - { - buf++; - buf = gdb_read_uleb128 (buf, buf_end, &dwarf_reg); - if (buf == NULL) - return -1; - buf = gdb_skip_leb128 (buf, buf_end); - if (buf == NULL) - return -1; - } - else if (*buf == DW_OP_regx) - { - buf++; - buf = gdb_read_uleb128 (buf, buf_end, &dwarf_reg); - if (buf == NULL) - return -1; - } - else - return -1; - if (buf != buf_end || (int) dwarf_reg != dwarf_reg) - return -1; - return dwarf_reg; -} - -/* If <BUF..BUF_END] contains DW_FORM_block* with just DW_OP_breg*(0) and - DW_OP_deref* return the DWARF register number. Otherwise return -1. - DEREF_SIZE_RETURN contains -1 for DW_OP_deref; otherwise it contains the - size from DW_OP_deref_size. */ - -int -dwarf_block_to_dwarf_reg_deref (const gdb_byte *buf, const gdb_byte *buf_end, - CORE_ADDR *deref_size_return) -{ - uint64_t dwarf_reg; - int64_t offset; - - if (buf_end <= buf) - return -1; - - if (*buf >= DW_OP_breg0 && *buf <= DW_OP_breg31) - { - dwarf_reg = *buf - DW_OP_breg0; - buf++; - if (buf >= buf_end) - return -1; - } - else if (*buf == DW_OP_bregx) - { - buf++; - buf = gdb_read_uleb128 (buf, buf_end, &dwarf_reg); - if (buf == NULL) - return -1; - if ((int) dwarf_reg != dwarf_reg) - return -1; - } - else - return -1; - - buf = gdb_read_sleb128 (buf, buf_end, &offset); - if (buf == NULL) - return -1; - if (offset != 0) - return -1; - - if (*buf == DW_OP_deref) - { - buf++; - *deref_size_return = -1; - } - else if (*buf == DW_OP_deref_size) - { - buf++; - if (buf >= buf_end) - return -1; - *deref_size_return = *buf++; - } - else - return -1; - - if (buf != buf_end) - return -1; - - return dwarf_reg; -} - -/* If <BUF..BUF_END] contains DW_FORM_block* with single DW_OP_fbreg(X) fill - in FB_OFFSET_RETURN with the X offset and return 1. Otherwise return 0. */ - -int -dwarf_block_to_fb_offset (const gdb_byte *buf, const gdb_byte *buf_end, - CORE_ADDR *fb_offset_return) -{ - int64_t fb_offset; - - if (buf_end <= buf) - return 0; - - if (*buf != DW_OP_fbreg) - return 0; - buf++; - - buf = gdb_read_sleb128 (buf, buf_end, &fb_offset); - if (buf == NULL) - return 0; - *fb_offset_return = fb_offset; - if (buf != buf_end || fb_offset != (LONGEST) *fb_offset_return) - return 0; - - return 1; -} - -/* If <BUF..BUF_END] contains DW_FORM_block* with single DW_OP_bregSP(X) fill - in SP_OFFSET_RETURN with the X offset and return 1. Otherwise return 0. - The matched SP register number depends on GDBARCH. */ - -int -dwarf_block_to_sp_offset (struct gdbarch *gdbarch, const gdb_byte *buf, - const gdb_byte *buf_end, CORE_ADDR *sp_offset_return) -{ - uint64_t dwarf_reg; - int64_t sp_offset; - - if (buf_end <= buf) - return 0; - if (*buf >= DW_OP_breg0 && *buf <= DW_OP_breg31) - { - dwarf_reg = *buf - DW_OP_breg0; - buf++; - } - else - { - if (*buf != DW_OP_bregx) - return 0; - buf++; - buf = gdb_read_uleb128 (buf, buf_end, &dwarf_reg); - if (buf == NULL) - return 0; - } - - if (dwarf_reg_to_regnum (gdbarch, dwarf_reg) - != gdbarch_sp_regnum (gdbarch)) - return 0; - - buf = gdb_read_sleb128 (buf, buf_end, &sp_offset); - if (buf == NULL) - return 0; - *sp_offset_return = sp_offset; - if (buf != buf_end || sp_offset != (LONGEST) *sp_offset_return) - return 0; - - return 1; -} - -/* The engine for the expression evaluator. Using the context in this - object, evaluate the expression between OP_PTR and OP_END. */ - -void -dwarf_expr_context::execute_stack_op (const gdb_byte *op_ptr, - const gdb_byte *op_end) -{ - enum bfd_endian byte_order = gdbarch_byte_order (this->gdbarch); - /* Old-style "untyped" DWARF values need special treatment in a - couple of places, specifically DW_OP_mod and DW_OP_shr. We need - a special type for these values so we can distinguish them from - values that have an explicit type, because explicitly-typed - values do not need special treatment. This special type must be - different (in the `==' sense) from any base type coming from the - CU. */ - struct type *address_type = this->address_type (); - - this->location = DWARF_VALUE_MEMORY; - this->initialized = 1; /* Default is initialized. */ - - if (this->recursion_depth > this->max_recursion_depth) - error (_("DWARF-2 expression error: Loop detected (%d)."), - this->recursion_depth); - this->recursion_depth++; - - while (op_ptr < op_end) - { - enum dwarf_location_atom op = (enum dwarf_location_atom) *op_ptr++; - ULONGEST result; - /* Assume the value is not in stack memory. - Code that knows otherwise sets this to true. - Some arithmetic on stack addresses can probably be assumed to still - be a stack address, but we skip this complication for now. - This is just an optimization, so it's always ok to punt - and leave this as false. */ - bool in_stack_memory = false; - uint64_t uoffset, reg; - int64_t offset; - struct value *result_val = NULL; - - /* The DWARF expression might have a bug causing an infinite - loop. In that case, quitting is the only way out. */ - QUIT; - - switch (op) - { - case DW_OP_lit0: - case DW_OP_lit1: - case DW_OP_lit2: - case DW_OP_lit3: - case DW_OP_lit4: - case DW_OP_lit5: - case DW_OP_lit6: - case DW_OP_lit7: - case DW_OP_lit8: - case DW_OP_lit9: - case DW_OP_lit10: - case DW_OP_lit11: - case DW_OP_lit12: - case DW_OP_lit13: - case DW_OP_lit14: - case DW_OP_lit15: - case DW_OP_lit16: - case DW_OP_lit17: - case DW_OP_lit18: - case DW_OP_lit19: - case DW_OP_lit20: - case DW_OP_lit21: - case DW_OP_lit22: - case DW_OP_lit23: - case DW_OP_lit24: - case DW_OP_lit25: - case DW_OP_lit26: - case DW_OP_lit27: - case DW_OP_lit28: - case DW_OP_lit29: - case DW_OP_lit30: - case DW_OP_lit31: - result = op - DW_OP_lit0; - result_val = value_from_ulongest (address_type, result); - break; - - case DW_OP_addr: - result = extract_unsigned_integer (op_ptr, - this->addr_size, byte_order); - op_ptr += this->addr_size; - /* Some versions of GCC emit DW_OP_addr before - DW_OP_GNU_push_tls_address. In this case the value is an - index, not an address. We don't support things like - branching between the address and the TLS op. */ - if (op_ptr >= op_end || *op_ptr != DW_OP_GNU_push_tls_address) - result += this->offset; - result_val = value_from_ulongest (address_type, result); - break; - - case DW_OP_addrx: - case DW_OP_GNU_addr_index: - op_ptr = safe_read_uleb128 (op_ptr, op_end, &uoffset); - result = this->get_addr_index (uoffset); - result += this->offset; - result_val = value_from_ulongest (address_type, result); - break; - case DW_OP_GNU_const_index: - op_ptr = safe_read_uleb128 (op_ptr, op_end, &uoffset); - result = this->get_addr_index (uoffset); - result_val = value_from_ulongest (address_type, result); - break; - - case DW_OP_const1u: - result = extract_unsigned_integer (op_ptr, 1, byte_order); - result_val = value_from_ulongest (address_type, result); - op_ptr += 1; - break; - case DW_OP_const1s: - result = extract_signed_integer (op_ptr, 1, byte_order); - result_val = value_from_ulongest (address_type, result); - op_ptr += 1; - break; - case DW_OP_const2u: - result = extract_unsigned_integer (op_ptr, 2, byte_order); - result_val = value_from_ulongest (address_type, result); - op_ptr += 2; - break; - case DW_OP_const2s: - result = extract_signed_integer (op_ptr, 2, byte_order); - result_val = value_from_ulongest (address_type, result); - op_ptr += 2; - break; - case DW_OP_const4u: - result = extract_unsigned_integer (op_ptr, 4, byte_order); - result_val = value_from_ulongest (address_type, result); - op_ptr += 4; - break; - case DW_OP_const4s: - result = extract_signed_integer (op_ptr, 4, byte_order); - result_val = value_from_ulongest (address_type, result); - op_ptr += 4; - break; - case DW_OP_const8u: - result = extract_unsigned_integer (op_ptr, 8, byte_order); - result_val = value_from_ulongest (address_type, result); - op_ptr += 8; - break; - case DW_OP_const8s: - result = extract_signed_integer (op_ptr, 8, byte_order); - result_val = value_from_ulongest (address_type, result); - op_ptr += 8; - break; - case DW_OP_constu: - op_ptr = safe_read_uleb128 (op_ptr, op_end, &uoffset); - result = uoffset; - result_val = value_from_ulongest (address_type, result); - break; - case DW_OP_consts: - op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset); - result = offset; - result_val = value_from_ulongest (address_type, result); - break; - - /* The DW_OP_reg operations are required to occur alone in - location expressions. */ - case DW_OP_reg0: - case DW_OP_reg1: - case DW_OP_reg2: - case DW_OP_reg3: - case DW_OP_reg4: - case DW_OP_reg5: - case DW_OP_reg6: - case DW_OP_reg7: - case DW_OP_reg8: - case DW_OP_reg9: - case DW_OP_reg10: - case DW_OP_reg11: - case DW_OP_reg12: - case DW_OP_reg13: - case DW_OP_reg14: - case DW_OP_reg15: - case DW_OP_reg16: - case DW_OP_reg17: - case DW_OP_reg18: - case DW_OP_reg19: - case DW_OP_reg20: - case DW_OP_reg21: - case DW_OP_reg22: - case DW_OP_reg23: - case DW_OP_reg24: - case DW_OP_reg25: - case DW_OP_reg26: - case DW_OP_reg27: - case DW_OP_reg28: - case DW_OP_reg29: - case DW_OP_reg30: - case DW_OP_reg31: - dwarf_expr_require_composition (op_ptr, op_end, "DW_OP_reg"); - - result = op - DW_OP_reg0; - result_val = value_from_ulongest (address_type, result); - this->location = DWARF_VALUE_REGISTER; - break; - - case DW_OP_regx: - op_ptr = safe_read_uleb128 (op_ptr, op_end, ®); - dwarf_expr_require_composition (op_ptr, op_end, "DW_OP_regx"); - - result = reg; - result_val = value_from_ulongest (address_type, result); - this->location = DWARF_VALUE_REGISTER; - break; - - case DW_OP_implicit_value: - { - uint64_t len; - - op_ptr = safe_read_uleb128 (op_ptr, op_end, &len); - if (op_ptr + len > op_end) - error (_("DW_OP_implicit_value: too few bytes available.")); - this->len = len; - this->data = op_ptr; - this->location = DWARF_VALUE_LITERAL; - op_ptr += len; - dwarf_expr_require_composition (op_ptr, op_end, - "DW_OP_implicit_value"); - } - goto no_push; - - case DW_OP_stack_value: - this->location = DWARF_VALUE_STACK; - dwarf_expr_require_composition (op_ptr, op_end, "DW_OP_stack_value"); - goto no_push; - - case DW_OP_implicit_pointer: - case DW_OP_GNU_implicit_pointer: - { - int64_t len; - - if (this->ref_addr_size == -1) - error (_("DWARF-2 expression error: DW_OP_implicit_pointer " - "is not allowed in frame context")); - - /* The referred-to DIE of sect_offset kind. */ - this->len = extract_unsigned_integer (op_ptr, this->ref_addr_size, - byte_order); - op_ptr += this->ref_addr_size; - - /* The byte offset into the data. */ - op_ptr = safe_read_sleb128 (op_ptr, op_end, &len); - result = (ULONGEST) len; - result_val = value_from_ulongest (address_type, result); - - this->location = DWARF_VALUE_IMPLICIT_POINTER; - dwarf_expr_require_composition (op_ptr, op_end, - "DW_OP_implicit_pointer"); - } - break; - - case DW_OP_breg0: - case DW_OP_breg1: - case DW_OP_breg2: - case DW_OP_breg3: - case DW_OP_breg4: - case DW_OP_breg5: - case DW_OP_breg6: - case DW_OP_breg7: - case DW_OP_breg8: - case DW_OP_breg9: - case DW_OP_breg10: - case DW_OP_breg11: - case DW_OP_breg12: - case DW_OP_breg13: - case DW_OP_breg14: - case DW_OP_breg15: - case DW_OP_breg16: - case DW_OP_breg17: - case DW_OP_breg18: - case DW_OP_breg19: - case DW_OP_breg20: - case DW_OP_breg21: - case DW_OP_breg22: - case DW_OP_breg23: - case DW_OP_breg24: - case DW_OP_breg25: - case DW_OP_breg26: - case DW_OP_breg27: - case DW_OP_breg28: - case DW_OP_breg29: - case DW_OP_breg30: - case DW_OP_breg31: - { - op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset); - result = this->read_addr_from_reg (op - DW_OP_breg0); - result += offset; - result_val = value_from_ulongest (address_type, result); - } - break; - case DW_OP_bregx: - { - op_ptr = safe_read_uleb128 (op_ptr, op_end, ®); - op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset); - result = this->read_addr_from_reg (reg); - result += offset; - result_val = value_from_ulongest (address_type, result); - } - break; - case DW_OP_fbreg: - { - const gdb_byte *datastart; - size_t datalen; - - op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset); - - /* Rather than create a whole new context, we simply - backup the current stack locally and install a new empty stack, - then reset it afterwards, effectively erasing whatever the - recursive call put there. */ - std::vector<dwarf_stack_value> saved_stack = std::move (stack); - stack.clear (); - - /* FIXME: cagney/2003-03-26: This code should be using - get_frame_base_address(), and then implement a dwarf2 - specific this_base method. */ - this->get_frame_base (&datastart, &datalen); - eval (datastart, datalen); - if (this->location == DWARF_VALUE_MEMORY) - result = fetch_address (0); - else if (this->location == DWARF_VALUE_REGISTER) - result = this->read_addr_from_reg (value_as_long (fetch (0))); - else - error (_("Not implemented: computing frame " - "base using explicit value operator")); - result = result + offset; - result_val = value_from_ulongest (address_type, result); - in_stack_memory = true; - - /* Restore the content of the original stack. */ - stack = std::move (saved_stack); - - this->location = DWARF_VALUE_MEMORY; - } - break; - - case DW_OP_dup: - result_val = fetch (0); - in_stack_memory = fetch_in_stack_memory (0); - break; - - case DW_OP_drop: - pop (); - goto no_push; - - case DW_OP_pick: - offset = *op_ptr++; - result_val = fetch (offset); - in_stack_memory = fetch_in_stack_memory (offset); - break; - - case DW_OP_swap: - { - if (stack.size () < 2) - error (_("Not enough elements for " - "DW_OP_swap. Need 2, have %zu."), - stack.size ()); - - dwarf_stack_value &t1 = stack[stack.size () - 1]; - dwarf_stack_value &t2 = stack[stack.size () - 2]; - std::swap (t1, t2); - goto no_push; - } - - case DW_OP_over: - result_val = fetch (1); - in_stack_memory = fetch_in_stack_memory (1); - break; - - case DW_OP_rot: - { - if (stack.size () < 3) - error (_("Not enough elements for " - "DW_OP_rot. Need 3, have %zu."), - stack.size ()); - - dwarf_stack_value temp = stack[stack.size () - 1]; - stack[stack.size () - 1] = stack[stack.size () - 2]; - stack[stack.size () - 2] = stack[stack.size () - 3]; - stack[stack.size () - 3] = temp; - goto no_push; - } - - case DW_OP_deref: - case DW_OP_deref_size: - case DW_OP_deref_type: - case DW_OP_GNU_deref_type: - { - int addr_size = (op == DW_OP_deref ? this->addr_size : *op_ptr++); - gdb_byte *buf = (gdb_byte *) alloca (addr_size); - CORE_ADDR addr = fetch_address (0); - struct type *type; - - pop (); - - if (op == DW_OP_deref_type || op == DW_OP_GNU_deref_type) - { - op_ptr = safe_read_uleb128 (op_ptr, op_end, &uoffset); - cu_offset type_die_cu_off = (cu_offset) uoffset; - type = get_base_type (type_die_cu_off, 0); - } - else - type = address_type; - - this->read_mem (buf, addr, addr_size); - - /* If the size of the object read from memory is different - from the type length, we need to zero-extend it. */ - if (TYPE_LENGTH (type) != addr_size) - { - ULONGEST datum = - extract_unsigned_integer (buf, addr_size, byte_order); - - buf = (gdb_byte *) alloca (TYPE_LENGTH (type)); - store_unsigned_integer (buf, TYPE_LENGTH (type), - byte_order, datum); - } - - result_val = value_from_contents_and_address (type, buf, addr); - break; - } - - case DW_OP_abs: - case DW_OP_neg: - case DW_OP_not: - case DW_OP_plus_uconst: - { - /* Unary operations. */ - result_val = fetch (0); - pop (); - - switch (op) - { - case DW_OP_abs: - if (value_less (result_val, - value_zero (value_type (result_val), not_lval))) - result_val = value_neg (result_val); - break; - case DW_OP_neg: - result_val = value_neg (result_val); - break; - case DW_OP_not: - dwarf_require_integral (value_type (result_val)); - result_val = value_complement (result_val); - break; - case DW_OP_plus_uconst: - dwarf_require_integral (value_type (result_val)); - result = value_as_long (result_val); - op_ptr = safe_read_uleb128 (op_ptr, op_end, ®); - result += reg; - result_val = value_from_ulongest (address_type, result); - break; - } - } - break; - - case DW_OP_and: - case DW_OP_div: - case DW_OP_minus: - case DW_OP_mod: - case DW_OP_mul: - case DW_OP_or: - case DW_OP_plus: - case DW_OP_shl: - case DW_OP_shr: - case DW_OP_shra: - case DW_OP_xor: - case DW_OP_le: - case DW_OP_ge: - case DW_OP_eq: - case DW_OP_lt: - case DW_OP_gt: - case DW_OP_ne: - { - /* Binary operations. */ - struct value *first, *second; - - second = fetch (0); - pop (); - - first = fetch (0); - pop (); - - if (! base_types_equal_p (value_type (first), value_type (second))) - error (_("Incompatible types on DWARF stack")); - - switch (op) - { - case DW_OP_and: - dwarf_require_integral (value_type (first)); - dwarf_require_integral (value_type (second)); - result_val = value_binop (first, second, BINOP_BITWISE_AND); - break; - case DW_OP_div: - result_val = value_binop (first, second, BINOP_DIV); - break; - case DW_OP_minus: - result_val = value_binop (first, second, BINOP_SUB); - break; - case DW_OP_mod: - { - int cast_back = 0; - struct type *orig_type = value_type (first); - - /* We have to special-case "old-style" untyped values - -- these must have mod computed using unsigned - math. */ - if (orig_type == address_type) - { - struct type *utype - = get_unsigned_type (this->gdbarch, orig_type); - - cast_back = 1; - first = value_cast (utype, first); - second = value_cast (utype, second); - } - /* Note that value_binop doesn't handle float or - decimal float here. This seems unimportant. */ - result_val = value_binop (first, second, BINOP_MOD); - if (cast_back) - result_val = value_cast (orig_type, result_val); - } - break; - case DW_OP_mul: - result_val = value_binop (first, second, BINOP_MUL); - break; - case DW_OP_or: - dwarf_require_integral (value_type (first)); - dwarf_require_integral (value_type (second)); - result_val = value_binop (first, second, BINOP_BITWISE_IOR); - break; - case DW_OP_plus: - result_val = value_binop (first, second, BINOP_ADD); - break; - case DW_OP_shl: - dwarf_require_integral (value_type (first)); - dwarf_require_integral (value_type (second)); - result_val = value_binop (first, second, BINOP_LSH); - break; - case DW_OP_shr: - dwarf_require_integral (value_type (first)); - dwarf_require_integral (value_type (second)); - if (!TYPE_UNSIGNED (value_type (first))) - { - struct type *utype - = get_unsigned_type (this->gdbarch, value_type (first)); - - first = value_cast (utype, first); - } - - result_val = value_binop (first, second, BINOP_RSH); - /* Make sure we wind up with the same type we started - with. */ - if (value_type (result_val) != value_type (second)) - result_val = value_cast (value_type (second), result_val); - break; - case DW_OP_shra: - dwarf_require_integral (value_type (first)); - dwarf_require_integral (value_type (second)); - if (TYPE_UNSIGNED (value_type (first))) - { - struct type *stype - = get_signed_type (this->gdbarch, value_type (first)); - - first = value_cast (stype, first); - } - - result_val = value_binop (first, second, BINOP_RSH); - /* Make sure we wind up with the same type we started - with. */ - if (value_type (result_val) != value_type (second)) - result_val = value_cast (value_type (second), result_val); - break; - case DW_OP_xor: - dwarf_require_integral (value_type (first)); - dwarf_require_integral (value_type (second)); - result_val = value_binop (first, second, BINOP_BITWISE_XOR); - break; - case DW_OP_le: - /* A <= B is !(B < A). */ - result = ! value_less (second, first); - result_val = value_from_ulongest (address_type, result); - break; - case DW_OP_ge: - /* A >= B is !(A < B). */ - result = ! value_less (first, second); - result_val = value_from_ulongest (address_type, result); - break; - case DW_OP_eq: - result = value_equal (first, second); - result_val = value_from_ulongest (address_type, result); - break; - case DW_OP_lt: - result = value_less (first, second); - result_val = value_from_ulongest (address_type, result); - break; - case DW_OP_gt: - /* A > B is B < A. */ - result = value_less (second, first); - result_val = value_from_ulongest (address_type, result); - break; - case DW_OP_ne: - result = ! value_equal (first, second); - result_val = value_from_ulongest (address_type, result); - break; - default: - internal_error (__FILE__, __LINE__, - _("Can't be reached.")); - } - } - break; - - case DW_OP_call_frame_cfa: - result = this->get_frame_cfa (); - result_val = value_from_ulongest (address_type, result); - in_stack_memory = true; - break; - - case DW_OP_GNU_push_tls_address: - case DW_OP_form_tls_address: - /* Variable is at a constant offset in the thread-local - storage block into the objfile for the current thread and - the dynamic linker module containing this expression. Here - we return returns the offset from that base. The top of the - stack has the offset from the beginning of the thread - control block at which the variable is located. Nothing - should follow this operator, so the top of stack would be - returned. */ - result = value_as_long (fetch (0)); - pop (); - result = this->get_tls_address (result); - result_val = value_from_ulongest (address_type, result); - break; - - case DW_OP_skip: - offset = extract_signed_integer (op_ptr, 2, byte_order); - op_ptr += 2; - op_ptr += offset; - goto no_push; - - case DW_OP_bra: - { - struct value *val; - - offset = extract_signed_integer (op_ptr, 2, byte_order); - op_ptr += 2; - val = fetch (0); - dwarf_require_integral (value_type (val)); - if (value_as_long (val) != 0) - op_ptr += offset; - pop (); - } - goto no_push; - - case DW_OP_nop: - goto no_push; - - case DW_OP_piece: - { - uint64_t size; - - /* Record the piece. */ - op_ptr = safe_read_uleb128 (op_ptr, op_end, &size); - add_piece (8 * size, 0); - - /* Pop off the address/regnum, and reset the location - type. */ - if (this->location != DWARF_VALUE_LITERAL - && this->location != DWARF_VALUE_OPTIMIZED_OUT) - pop (); - this->location = DWARF_VALUE_MEMORY; - } - goto no_push; - - case DW_OP_bit_piece: - { - uint64_t size, uleb_offset; - - /* Record the piece. */ - op_ptr = safe_read_uleb128 (op_ptr, op_end, &size); - op_ptr = safe_read_uleb128 (op_ptr, op_end, &uleb_offset); - add_piece (size, uleb_offset); - - /* Pop off the address/regnum, and reset the location - type. */ - if (this->location != DWARF_VALUE_LITERAL - && this->location != DWARF_VALUE_OPTIMIZED_OUT) - pop (); - this->location = DWARF_VALUE_MEMORY; - } - goto no_push; - - case DW_OP_GNU_uninit: - if (op_ptr != op_end) - error (_("DWARF-2 expression error: DW_OP_GNU_uninit must always " - "be the very last op.")); - - this->initialized = 0; - goto no_push; - - case DW_OP_call2: - { - cu_offset cu_off - = (cu_offset) extract_unsigned_integer (op_ptr, 2, byte_order); - op_ptr += 2; - this->dwarf_call (cu_off); - } - goto no_push; - - case DW_OP_call4: - { - cu_offset cu_off - = (cu_offset) extract_unsigned_integer (op_ptr, 4, byte_order); - op_ptr += 4; - this->dwarf_call (cu_off); - } - goto no_push; - - case DW_OP_GNU_variable_value: - { - sect_offset sect_off - = (sect_offset) extract_unsigned_integer (op_ptr, - this->ref_addr_size, - byte_order); - op_ptr += this->ref_addr_size; - result_val = this->dwarf_variable_value (sect_off); - } - break; - - case DW_OP_entry_value: - case DW_OP_GNU_entry_value: - { - uint64_t len; - CORE_ADDR deref_size; - union call_site_parameter_u kind_u; - - op_ptr = safe_read_uleb128 (op_ptr, op_end, &len); - if (op_ptr + len > op_end) - error (_("DW_OP_entry_value: too few bytes available.")); - - kind_u.dwarf_reg = dwarf_block_to_dwarf_reg (op_ptr, op_ptr + len); - if (kind_u.dwarf_reg != -1) - { - op_ptr += len; - this->push_dwarf_reg_entry_value (CALL_SITE_PARAMETER_DWARF_REG, - kind_u, - -1 /* deref_size */); - goto no_push; - } - - kind_u.dwarf_reg = dwarf_block_to_dwarf_reg_deref (op_ptr, - op_ptr + len, - &deref_size); - if (kind_u.dwarf_reg != -1) - { - if (deref_size == -1) - deref_size = this->addr_size; - op_ptr += len; - this->push_dwarf_reg_entry_value (CALL_SITE_PARAMETER_DWARF_REG, - kind_u, deref_size); - goto no_push; - } - - error (_("DWARF-2 expression error: DW_OP_entry_value is " - "supported only for single DW_OP_reg* " - "or for DW_OP_breg*(0)+DW_OP_deref*")); - } - - case DW_OP_GNU_parameter_ref: - { - union call_site_parameter_u kind_u; - - kind_u.param_cu_off - = (cu_offset) extract_unsigned_integer (op_ptr, 4, byte_order); - op_ptr += 4; - this->push_dwarf_reg_entry_value (CALL_SITE_PARAMETER_PARAM_OFFSET, - kind_u, - -1 /* deref_size */); - } - goto no_push; - - case DW_OP_const_type: - case DW_OP_GNU_const_type: - { - int n; - const gdb_byte *data; - struct type *type; - - op_ptr = safe_read_uleb128 (op_ptr, op_end, &uoffset); - cu_offset type_die_cu_off = (cu_offset) uoffset; - - n = *op_ptr++; - data = op_ptr; - op_ptr += n; - - type = get_base_type (type_die_cu_off, n); - result_val = value_from_contents (type, data); - } - break; - - case DW_OP_regval_type: - case DW_OP_GNU_regval_type: - { - struct type *type; - - op_ptr = safe_read_uleb128 (op_ptr, op_end, ®); - op_ptr = safe_read_uleb128 (op_ptr, op_end, &uoffset); - cu_offset type_die_cu_off = (cu_offset) uoffset; - - type = get_base_type (type_die_cu_off, 0); - result_val = this->get_reg_value (type, reg); - } - break; - - case DW_OP_convert: - case DW_OP_GNU_convert: - case DW_OP_reinterpret: - case DW_OP_GNU_reinterpret: - { - struct type *type; - - op_ptr = safe_read_uleb128 (op_ptr, op_end, &uoffset); - cu_offset type_die_cu_off = (cu_offset) uoffset; - - if (to_underlying (type_die_cu_off) == 0) - type = address_type; - else - type = get_base_type (type_die_cu_off, 0); - - result_val = fetch (0); - pop (); - - if (op == DW_OP_convert || op == DW_OP_GNU_convert) - result_val = value_cast (type, result_val); - else if (type == value_type (result_val)) - { - /* Nothing. */ - } - else if (TYPE_LENGTH (type) - != TYPE_LENGTH (value_type (result_val))) - error (_("DW_OP_reinterpret has wrong size")); - else - result_val - = value_from_contents (type, - value_contents_all (result_val)); - } - break; - - case DW_OP_push_object_address: - /* Return the address of the object we are currently observing. */ - result = this->get_object_address (); - result_val = value_from_ulongest (address_type, result); - break; - - default: - error (_("Unhandled dwarf expression opcode 0x%x"), op); - } - - /* Most things push a result value. */ - gdb_assert (result_val != NULL); - push (result_val, in_stack_memory); - no_push: - ; - } - - /* To simplify our main caller, if the result is an implicit - pointer, then make a pieced value. This is ok because we can't - have implicit pointers in contexts where pieces are invalid. */ - if (this->location == DWARF_VALUE_IMPLICIT_POINTER) - add_piece (8 * this->addr_size, 0); - - this->recursion_depth--; - gdb_assert (this->recursion_depth >= 0); -} - -void -_initialize_dwarf2expr (void) -{ - dwarf_arch_cookie - = gdbarch_data_register_post_init (dwarf_gdbarch_types_init); -} diff -Nru gdb-9.1/gdb/dwarf2expr.h gdb-10.2/gdb/dwarf2expr.h --- gdb-9.1/gdb/dwarf2expr.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/dwarf2expr.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,325 +0,0 @@ -/* DWARF 2 Expression Evaluator. - - Copyright (C) 2001-2020 Free Software Foundation, Inc. - - Contributed by Daniel Berlin <dan@dberlin.org>. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#if !defined (DWARF2EXPR_H) -#define DWARF2EXPR_H - -#include "leb128.h" -#include "gdbtypes.h" - -/* The location of a value. */ -enum dwarf_value_location -{ - /* The piece is in memory. - The value on the dwarf stack is its address. */ - DWARF_VALUE_MEMORY, - - /* The piece is in a register. - The value on the dwarf stack is the register number. */ - DWARF_VALUE_REGISTER, - - /* The piece is on the dwarf stack. */ - DWARF_VALUE_STACK, - - /* The piece is a literal. */ - DWARF_VALUE_LITERAL, - - /* The piece was optimized out. */ - DWARF_VALUE_OPTIMIZED_OUT, - - /* The piece is an implicit pointer. */ - DWARF_VALUE_IMPLICIT_POINTER -}; - -/* A piece of an object, as recorded by DW_OP_piece or DW_OP_bit_piece. */ -struct dwarf_expr_piece -{ - enum dwarf_value_location location; - - union - { - struct - { - /* This piece's address, for DWARF_VALUE_MEMORY pieces. */ - CORE_ADDR addr; - /* Non-zero if the piece is known to be in memory and on - the program's stack. */ - bool in_stack_memory; - } mem; - - /* The piece's register number, for DWARF_VALUE_REGISTER pieces. */ - int regno; - - /* The piece's literal value, for DWARF_VALUE_STACK pieces. */ - struct value *value; - - struct - { - /* A pointer to the data making up this piece, - for DWARF_VALUE_LITERAL pieces. */ - const gdb_byte *data; - /* The length of the available data. */ - ULONGEST length; - } literal; - - /* Used for DWARF_VALUE_IMPLICIT_POINTER. */ - struct - { - /* The referent DIE from DW_OP_implicit_pointer. */ - sect_offset die_sect_off; - /* The byte offset into the resulting data. */ - LONGEST offset; - } ptr; - } v; - - /* The length of the piece, in bits. */ - ULONGEST size; - /* The piece offset, in bits. */ - ULONGEST offset; -}; - -/* The dwarf expression stack. */ - -struct dwarf_stack_value -{ - dwarf_stack_value (struct value *value_, int in_stack_memory_) - : value (value_), in_stack_memory (in_stack_memory_) - {} - - struct value *value; - - /* True if the piece is in memory and is known to be on the program's stack. - It is always ok to set this to zero. This is used, for example, to - optimize memory access from the target. It can vastly speed up backtraces - on long latency connections when "set stack-cache on". */ - bool in_stack_memory; -}; - -/* The expression evaluator works with a dwarf_expr_context, describing - its current state and its callbacks. */ -struct dwarf_expr_context -{ - dwarf_expr_context (); - virtual ~dwarf_expr_context () = default; - - void push_address (CORE_ADDR value, bool in_stack_memory); - void eval (const gdb_byte *addr, size_t len); - struct value *fetch (int n); - CORE_ADDR fetch_address (int n); - bool fetch_in_stack_memory (int n); - - /* The stack of values. */ - std::vector<dwarf_stack_value> stack; - - /* Target architecture to use for address operations. */ - struct gdbarch *gdbarch; - - /* Target address size in bytes. */ - int addr_size; - - /* DW_FORM_ref_addr size in bytes. If -1 DWARF is executed from a frame - context and operations depending on DW_FORM_ref_addr are not allowed. */ - int ref_addr_size; - - /* Offset used to relocate DW_OP_addr, DW_OP_addrx, and - DW_OP_GNU_addr_index arguments. */ - CORE_ADDR offset; - - /* The current depth of dwarf expression recursion, via DW_OP_call*, - DW_OP_fbreg, DW_OP_push_object_address, etc., and the maximum - depth we'll tolerate before raising an error. */ - int recursion_depth, max_recursion_depth; - - /* Location of the value. */ - enum dwarf_value_location location; - - /* For DWARF_VALUE_LITERAL, the current literal value's length and - data. For DWARF_VALUE_IMPLICIT_POINTER, LEN is the offset of the - target DIE of sect_offset kind. */ - ULONGEST len; - const gdb_byte *data; - - /* Initialization status of variable: Non-zero if variable has been - initialized; zero otherwise. */ - int initialized; - - /* A vector of pieces. - - Each time DW_OP_piece is executed, we add a new element to the - end of this array, recording the current top of the stack, the - current location, and the size given as the operand to - DW_OP_piece. We then pop the top value from the stack, reset the - location, and resume evaluation. - - The Dwarf spec doesn't say whether DW_OP_piece pops the top value - from the stack. We do, ensuring that clients of this interface - expecting to see a value left on the top of the stack (say, code - evaluating frame base expressions or CFA's specified with - DW_CFA_def_cfa_expression) will get an error if the expression - actually marks all the values it computes as pieces. - - If an expression never uses DW_OP_piece, num_pieces will be zero. - (It would be nice to present these cases as expressions yielding - a single piece, so that callers need not distinguish between the - no-DW_OP_piece and one-DW_OP_piece cases. But expressions with - no DW_OP_piece operations have no value to place in a piece's - 'size' field; the size comes from the surrounding data. So the - two cases need to be handled separately.) */ - std::vector<dwarf_expr_piece> pieces; - - /* Return the value of register number REGNUM (a DWARF register number), - read as an address. */ - virtual CORE_ADDR read_addr_from_reg (int regnum) = 0; - - /* Return a value of type TYPE, stored in register number REGNUM - of the frame associated to the given BATON. - - REGNUM is a DWARF register number. */ - virtual struct value *get_reg_value (struct type *type, int regnum) = 0; - - /* Read LENGTH bytes at ADDR into BUF. */ - virtual void read_mem (gdb_byte *buf, CORE_ADDR addr, size_t length) = 0; - - /* Return the location expression for the frame base attribute, in - START and LENGTH. The result must be live until the current - expression evaluation is complete. */ - virtual void get_frame_base (const gdb_byte **start, size_t *length) = 0; - - /* Return the CFA for the frame. */ - virtual CORE_ADDR get_frame_cfa () = 0; - - /* Return the PC for the frame. */ - virtual CORE_ADDR get_frame_pc () - { - error (_("%s is invalid in this context"), "DW_OP_implicit_pointer"); - } - - /* Return the thread-local storage address for - DW_OP_GNU_push_tls_address or DW_OP_form_tls_address. */ - virtual CORE_ADDR get_tls_address (CORE_ADDR offset) = 0; - - /* Execute DW_AT_location expression for the DWARF expression - subroutine in the DIE at DIE_CU_OFF in the CU. Do not touch - STACK while it being passed to and returned from the called DWARF - subroutine. */ - virtual void dwarf_call (cu_offset die_cu_off) = 0; - - /* Execute "variable value" operation on the DIE at SECT_OFF. */ - virtual struct value *dwarf_variable_value (sect_offset sect_off) = 0; - - /* Return the base type given by the indicated DIE at DIE_CU_OFF. - This can throw an exception if the DIE is invalid or does not - represent a base type. SIZE is non-zero if this function should - verify that the resulting type has the correct size. */ - virtual struct type *get_base_type (cu_offset die_cu_off, int size) - { - /* Anything will do. */ - return builtin_type (this->gdbarch)->builtin_int; - } - - /* Push on DWARF stack an entry evaluated for DW_TAG_call_site's - parameter matching KIND and KIND_U at the caller of specified BATON. - If DEREF_SIZE is not -1 then use DW_AT_call_data_value instead of - DW_AT_call_value. */ - virtual void push_dwarf_reg_entry_value (enum call_site_parameter_kind kind, - union call_site_parameter_u kind_u, - int deref_size) = 0; - - /* Return the address indexed by DW_OP_addrx or DW_OP_GNU_addr_index. - This can throw an exception if the index is out of range. */ - virtual CORE_ADDR get_addr_index (unsigned int index) = 0; - - /* Return the `object address' for DW_OP_push_object_address. */ - virtual CORE_ADDR get_object_address () = 0; - -private: - - struct type *address_type () const; - void push (struct value *value, bool in_stack_memory); - bool stack_empty_p () const; - void add_piece (ULONGEST size, ULONGEST offset); - void execute_stack_op (const gdb_byte *op_ptr, const gdb_byte *op_end); - void pop (); -}; - -void dwarf_expr_require_composition (const gdb_byte *, const gdb_byte *, - const char *); - -int dwarf_block_to_dwarf_reg (const gdb_byte *buf, const gdb_byte *buf_end); - -int dwarf_block_to_dwarf_reg_deref (const gdb_byte *buf, - const gdb_byte *buf_end, - CORE_ADDR *deref_size_return); - -int dwarf_block_to_fb_offset (const gdb_byte *buf, const gdb_byte *buf_end, - CORE_ADDR *fb_offset_return); - -int dwarf_block_to_sp_offset (struct gdbarch *gdbarch, const gdb_byte *buf, - const gdb_byte *buf_end, - CORE_ADDR *sp_offset_return); - -/* Wrappers around the leb128 reader routines to simplify them for our - purposes. */ - -static inline const gdb_byte * -gdb_read_uleb128 (const gdb_byte *buf, const gdb_byte *buf_end, - uint64_t *r) -{ - size_t bytes_read = read_uleb128_to_uint64 (buf, buf_end, r); - - if (bytes_read == 0) - return NULL; - return buf + bytes_read; -} - -static inline const gdb_byte * -gdb_read_sleb128 (const gdb_byte *buf, const gdb_byte *buf_end, - int64_t *r) -{ - size_t bytes_read = read_sleb128_to_int64 (buf, buf_end, r); - - if (bytes_read == 0) - return NULL; - return buf + bytes_read; -} - -static inline const gdb_byte * -gdb_skip_leb128 (const gdb_byte *buf, const gdb_byte *buf_end) -{ - size_t bytes_read = skip_leb128 (buf, buf_end); - - if (bytes_read == 0) - return NULL; - return buf + bytes_read; -} - -extern const gdb_byte *safe_read_uleb128 (const gdb_byte *buf, - const gdb_byte *buf_end, - uint64_t *r); - -extern const gdb_byte *safe_read_sleb128 (const gdb_byte *buf, - const gdb_byte *buf_end, - int64_t *r); - -extern const gdb_byte *safe_skip_leb128 (const gdb_byte *buf, - const gdb_byte *buf_end); - -#endif /* dwarf2expr.h */ diff -Nru gdb-9.1/gdb/dwarf2-frame.c gdb-10.2/gdb/dwarf2-frame.c --- gdb-9.1/gdb/dwarf2-frame.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/dwarf2-frame.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,2379 +0,0 @@ -/* Frame unwinder for frames with DWARF Call Frame Information. - - Copyright (C) 2003-2020 Free Software Foundation, Inc. - - Contributed by Mark Kettenis. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "defs.h" -#include "dwarf2expr.h" -#include "dwarf2.h" -#include "frame.h" -#include "frame-base.h" -#include "frame-unwind.h" -#include "gdbcore.h" -#include "gdbtypes.h" -#include "symtab.h" -#include "objfiles.h" -#include "regcache.h" -#include "value.h" -#include "record.h" - -#include "complaints.h" -#include "dwarf2-frame.h" -#include "dwarf2read.h" -#include "ax.h" -#include "dwarf2loc.h" -#include "dwarf2-frame-tailcall.h" -#include "gdbsupport/gdb_binary_search.h" -#if GDB_SELF_TEST -#include "gdbsupport/selftest.h" -#include "selftest-arch.h" -#endif -#include <unordered_map> - -#include <algorithm> - -struct comp_unit; - -/* Call Frame Information (CFI). */ - -/* Common Information Entry (CIE). */ - -struct dwarf2_cie -{ - /* Computation Unit for this CIE. */ - struct comp_unit *unit; - - /* Offset into the .debug_frame section where this CIE was found. - Used to identify this CIE. */ - ULONGEST cie_pointer; - - /* Constant that is factored out of all advance location - instructions. */ - ULONGEST code_alignment_factor; - - /* Constants that is factored out of all offset instructions. */ - LONGEST data_alignment_factor; - - /* Return address column. */ - ULONGEST return_address_register; - - /* Instruction sequence to initialize a register set. */ - const gdb_byte *initial_instructions; - const gdb_byte *end; - - /* Saved augmentation, in case it's needed later. */ - char *augmentation; - - /* Encoding of addresses. */ - gdb_byte encoding; - - /* Target address size in bytes. */ - int addr_size; - - /* Target pointer size in bytes. */ - int ptr_size; - - /* True if a 'z' augmentation existed. */ - unsigned char saw_z_augmentation; - - /* True if an 'S' augmentation existed. */ - unsigned char signal_frame; - - /* The version recorded in the CIE. */ - unsigned char version; - - /* The segment size. */ - unsigned char segment_size; -}; - -/* The CIE table is used to find CIEs during parsing, but then - discarded. It maps from the CIE's offset to the CIE. */ -typedef std::unordered_map<ULONGEST, dwarf2_cie *> dwarf2_cie_table; - -/* Frame Description Entry (FDE). */ - -struct dwarf2_fde -{ - /* CIE for this FDE. */ - struct dwarf2_cie *cie; - - /* First location associated with this FDE. */ - CORE_ADDR initial_location; - - /* Number of bytes of program instructions described by this FDE. */ - CORE_ADDR address_range; - - /* Instruction sequence. */ - const gdb_byte *instructions; - const gdb_byte *end; - - /* True if this FDE is read from a .eh_frame instead of a .debug_frame - section. */ - unsigned char eh_frame_p; -}; - -struct dwarf2_fde_table -{ - int num_entries; - struct dwarf2_fde **entries; -}; - -/* A minimal decoding of DWARF2 compilation units. We only decode - what's needed to get to the call frame information. */ - -struct comp_unit -{ - /* Keep the bfd convenient. */ - bfd *abfd; - - struct objfile *objfile; - - /* Pointer to the .debug_frame section loaded into memory. */ - const gdb_byte *dwarf_frame_buffer; - - /* Length of the loaded .debug_frame section. */ - bfd_size_type dwarf_frame_size; - - /* Pointer to the .debug_frame section. */ - asection *dwarf_frame_section; - - /* Base for DW_EH_PE_datarel encodings. */ - bfd_vma dbase; - - /* Base for DW_EH_PE_textrel encodings. */ - bfd_vma tbase; -}; - -static struct dwarf2_fde *dwarf2_frame_find_fde (CORE_ADDR *pc, - CORE_ADDR *out_offset); - -static int dwarf2_frame_adjust_regnum (struct gdbarch *gdbarch, int regnum, - int eh_frame_p); - -static CORE_ADDR read_encoded_value (struct comp_unit *unit, gdb_byte encoding, - int ptr_len, const gdb_byte *buf, - unsigned int *bytes_read_ptr, - CORE_ADDR func_base); - - -/* See dwarf2-frame.h. */ -bool dwarf2_frame_unwinders_enabled_p = true; - -/* Store the length the expression for the CFA in the `cfa_reg' field, - which is unused in that case. */ -#define cfa_exp_len cfa_reg - -dwarf2_frame_state::dwarf2_frame_state (CORE_ADDR pc_, struct dwarf2_cie *cie) - : pc (pc_), data_align (cie->data_alignment_factor), - code_align (cie->code_alignment_factor), - retaddr_column (cie->return_address_register) -{ -} - - -/* Helper functions for execute_stack_op. */ - -static CORE_ADDR -read_addr_from_reg (struct frame_info *this_frame, int reg) -{ - struct gdbarch *gdbarch = get_frame_arch (this_frame); - int regnum = dwarf_reg_to_regnum_or_error (gdbarch, reg); - - return address_from_register (regnum, this_frame); -} - -/* Execute the required actions for both the DW_CFA_restore and -DW_CFA_restore_extended instructions. */ -static void -dwarf2_restore_rule (struct gdbarch *gdbarch, ULONGEST reg_num, - struct dwarf2_frame_state *fs, int eh_frame_p) -{ - ULONGEST reg; - - reg = dwarf2_frame_adjust_regnum (gdbarch, reg_num, eh_frame_p); - fs->regs.alloc_regs (reg + 1); - - /* Check if this register was explicitly initialized in the - CIE initial instructions. If not, default the rule to - UNSPECIFIED. */ - if (reg < fs->initial.reg.size ()) - fs->regs.reg[reg] = fs->initial.reg[reg]; - else - fs->regs.reg[reg].how = DWARF2_FRAME_REG_UNSPECIFIED; - - if (fs->regs.reg[reg].how == DWARF2_FRAME_REG_UNSPECIFIED) - { - int regnum = dwarf_reg_to_regnum (gdbarch, reg); - - complaint (_("\ -incomplete CFI data; DW_CFA_restore unspecified\n\ -register %s (#%d) at %s"), - gdbarch_register_name (gdbarch, regnum), regnum, - paddress (gdbarch, fs->pc)); - } -} - -class dwarf_expr_executor : public dwarf_expr_context -{ - public: - - struct frame_info *this_frame; - - CORE_ADDR read_addr_from_reg (int reg) override - { - return ::read_addr_from_reg (this_frame, reg); - } - - struct value *get_reg_value (struct type *type, int reg) override - { - struct gdbarch *gdbarch = get_frame_arch (this_frame); - int regnum = dwarf_reg_to_regnum_or_error (gdbarch, reg); - - return value_from_register (type, regnum, this_frame); - } - - void read_mem (gdb_byte *buf, CORE_ADDR addr, size_t len) override - { - read_memory (addr, buf, len); - } - - void get_frame_base (const gdb_byte **start, size_t *length) override - { - invalid ("DW_OP_fbreg"); - } - - void push_dwarf_reg_entry_value (enum call_site_parameter_kind kind, - union call_site_parameter_u kind_u, - int deref_size) override - { - invalid ("DW_OP_entry_value"); - } - - CORE_ADDR get_object_address () override - { - invalid ("DW_OP_push_object_address"); - } - - CORE_ADDR get_frame_cfa () override - { - invalid ("DW_OP_call_frame_cfa"); - } - - CORE_ADDR get_tls_address (CORE_ADDR offset) override - { - invalid ("DW_OP_form_tls_address"); - } - - void dwarf_call (cu_offset die_offset) override - { - invalid ("DW_OP_call*"); - } - - struct value *dwarf_variable_value (sect_offset sect_off) override - { - invalid ("DW_OP_GNU_variable_value"); - } - - CORE_ADDR get_addr_index (unsigned int index) override - { - invalid ("DW_OP_addrx or DW_OP_GNU_addr_index"); - } - - private: - - void invalid (const char *op) ATTRIBUTE_NORETURN - { - error (_("%s is invalid in this context"), op); - } -}; - -static CORE_ADDR -execute_stack_op (const gdb_byte *exp, ULONGEST len, int addr_size, - CORE_ADDR offset, struct frame_info *this_frame, - CORE_ADDR initial, int initial_in_stack_memory) -{ - CORE_ADDR result; - - dwarf_expr_executor ctx; - scoped_value_mark free_values; - - ctx.this_frame = this_frame; - ctx.gdbarch = get_frame_arch (this_frame); - ctx.addr_size = addr_size; - ctx.ref_addr_size = -1; - ctx.offset = offset; - - ctx.push_address (initial, initial_in_stack_memory); - ctx.eval (exp, len); - - if (ctx.location == DWARF_VALUE_MEMORY) - result = ctx.fetch_address (0); - else if (ctx.location == DWARF_VALUE_REGISTER) - result = ctx.read_addr_from_reg (value_as_long (ctx.fetch (0))); - else - { - /* This is actually invalid DWARF, but if we ever do run across - it somehow, we might as well support it. So, instead, report - it as unimplemented. */ - error (_("\ -Not implemented: computing unwound register using explicit value operator")); - } - - return result; -} - - -/* Execute FDE program from INSN_PTR possibly up to INSN_END or up to inferior - PC. Modify FS state accordingly. Return current INSN_PTR where the - execution has stopped, one can resume it on the next call. */ - -static const gdb_byte * -execute_cfa_program (struct dwarf2_fde *fde, const gdb_byte *insn_ptr, - const gdb_byte *insn_end, struct gdbarch *gdbarch, - CORE_ADDR pc, struct dwarf2_frame_state *fs) -{ - int eh_frame_p = fde->eh_frame_p; - unsigned int bytes_read; - enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); - - while (insn_ptr < insn_end && fs->pc <= pc) - { - gdb_byte insn = *insn_ptr++; - uint64_t utmp, reg; - int64_t offset; - - if ((insn & 0xc0) == DW_CFA_advance_loc) - fs->pc += (insn & 0x3f) * fs->code_align; - else if ((insn & 0xc0) == DW_CFA_offset) - { - reg = insn & 0x3f; - reg = dwarf2_frame_adjust_regnum (gdbarch, reg, eh_frame_p); - insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &utmp); - offset = utmp * fs->data_align; - fs->regs.alloc_regs (reg + 1); - fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_OFFSET; - fs->regs.reg[reg].loc.offset = offset; - } - else if ((insn & 0xc0) == DW_CFA_restore) - { - reg = insn & 0x3f; - dwarf2_restore_rule (gdbarch, reg, fs, eh_frame_p); - } - else - { - switch (insn) - { - case DW_CFA_set_loc: - fs->pc = read_encoded_value (fde->cie->unit, fde->cie->encoding, - fde->cie->ptr_size, insn_ptr, - &bytes_read, fde->initial_location); - /* Apply the objfile offset for relocatable objects. */ - fs->pc += ANOFFSET (fde->cie->unit->objfile->section_offsets, - SECT_OFF_TEXT (fde->cie->unit->objfile)); - insn_ptr += bytes_read; - break; - - case DW_CFA_advance_loc1: - utmp = extract_unsigned_integer (insn_ptr, 1, byte_order); - fs->pc += utmp * fs->code_align; - insn_ptr++; - break; - case DW_CFA_advance_loc2: - utmp = extract_unsigned_integer (insn_ptr, 2, byte_order); - fs->pc += utmp * fs->code_align; - insn_ptr += 2; - break; - case DW_CFA_advance_loc4: - utmp = extract_unsigned_integer (insn_ptr, 4, byte_order); - fs->pc += utmp * fs->code_align; - insn_ptr += 4; - break; - - case DW_CFA_offset_extended: - insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, ®); - reg = dwarf2_frame_adjust_regnum (gdbarch, reg, eh_frame_p); - insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &utmp); - offset = utmp * fs->data_align; - fs->regs.alloc_regs (reg + 1); - fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_OFFSET; - fs->regs.reg[reg].loc.offset = offset; - break; - - case DW_CFA_restore_extended: - insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, ®); - dwarf2_restore_rule (gdbarch, reg, fs, eh_frame_p); - break; - - case DW_CFA_undefined: - insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, ®); - reg = dwarf2_frame_adjust_regnum (gdbarch, reg, eh_frame_p); - fs->regs.alloc_regs (reg + 1); - fs->regs.reg[reg].how = DWARF2_FRAME_REG_UNDEFINED; - break; - - case DW_CFA_same_value: - insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, ®); - reg = dwarf2_frame_adjust_regnum (gdbarch, reg, eh_frame_p); - fs->regs.alloc_regs (reg + 1); - fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAME_VALUE; - break; - - case DW_CFA_register: - insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, ®); - reg = dwarf2_frame_adjust_regnum (gdbarch, reg, eh_frame_p); - insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &utmp); - utmp = dwarf2_frame_adjust_regnum (gdbarch, utmp, eh_frame_p); - fs->regs.alloc_regs (reg + 1); - fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_REG; - fs->regs.reg[reg].loc.reg = utmp; - break; - - case DW_CFA_remember_state: - { - struct dwarf2_frame_state_reg_info *new_rs; - - new_rs = new dwarf2_frame_state_reg_info (fs->regs); - fs->regs.prev = new_rs; - } - break; - - case DW_CFA_restore_state: - { - struct dwarf2_frame_state_reg_info *old_rs = fs->regs.prev; - - if (old_rs == NULL) - { - complaint (_("\ -bad CFI data; mismatched DW_CFA_restore_state at %s"), - paddress (gdbarch, fs->pc)); - } - else - fs->regs = std::move (*old_rs); - } - break; - - case DW_CFA_def_cfa: - insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, ®); - fs->regs.cfa_reg = reg; - insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &utmp); - - if (fs->armcc_cfa_offsets_sf) - utmp *= fs->data_align; - - fs->regs.cfa_offset = utmp; - fs->regs.cfa_how = CFA_REG_OFFSET; - break; - - case DW_CFA_def_cfa_register: - insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, ®); - fs->regs.cfa_reg = dwarf2_frame_adjust_regnum (gdbarch, reg, - eh_frame_p); - fs->regs.cfa_how = CFA_REG_OFFSET; - break; - - case DW_CFA_def_cfa_offset: - insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &utmp); - - if (fs->armcc_cfa_offsets_sf) - utmp *= fs->data_align; - - fs->regs.cfa_offset = utmp; - /* cfa_how deliberately not set. */ - break; - - case DW_CFA_nop: - break; - - case DW_CFA_def_cfa_expression: - insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &utmp); - fs->regs.cfa_exp_len = utmp; - fs->regs.cfa_exp = insn_ptr; - fs->regs.cfa_how = CFA_EXP; - insn_ptr += fs->regs.cfa_exp_len; - break; - - case DW_CFA_expression: - insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, ®); - reg = dwarf2_frame_adjust_regnum (gdbarch, reg, eh_frame_p); - fs->regs.alloc_regs (reg + 1); - insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &utmp); - fs->regs.reg[reg].loc.exp.start = insn_ptr; - fs->regs.reg[reg].loc.exp.len = utmp; - fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_EXP; - insn_ptr += utmp; - break; - - case DW_CFA_offset_extended_sf: - insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, ®); - reg = dwarf2_frame_adjust_regnum (gdbarch, reg, eh_frame_p); - insn_ptr = safe_read_sleb128 (insn_ptr, insn_end, &offset); - offset *= fs->data_align; - fs->regs.alloc_regs (reg + 1); - fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_OFFSET; - fs->regs.reg[reg].loc.offset = offset; - break; - - case DW_CFA_val_offset: - insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, ®); - fs->regs.alloc_regs (reg + 1); - insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &utmp); - offset = utmp * fs->data_align; - fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_VAL_OFFSET; - fs->regs.reg[reg].loc.offset = offset; - break; - - case DW_CFA_val_offset_sf: - insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, ®); - fs->regs.alloc_regs (reg + 1); - insn_ptr = safe_read_sleb128 (insn_ptr, insn_end, &offset); - offset *= fs->data_align; - fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_VAL_OFFSET; - fs->regs.reg[reg].loc.offset = offset; - break; - - case DW_CFA_val_expression: - insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, ®); - fs->regs.alloc_regs (reg + 1); - insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &utmp); - fs->regs.reg[reg].loc.exp.start = insn_ptr; - fs->regs.reg[reg].loc.exp.len = utmp; - fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_VAL_EXP; - insn_ptr += utmp; - break; - - case DW_CFA_def_cfa_sf: - insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, ®); - fs->regs.cfa_reg = dwarf2_frame_adjust_regnum (gdbarch, reg, - eh_frame_p); - insn_ptr = safe_read_sleb128 (insn_ptr, insn_end, &offset); - fs->regs.cfa_offset = offset * fs->data_align; - fs->regs.cfa_how = CFA_REG_OFFSET; - break; - - case DW_CFA_def_cfa_offset_sf: - insn_ptr = safe_read_sleb128 (insn_ptr, insn_end, &offset); - fs->regs.cfa_offset = offset * fs->data_align; - /* cfa_how deliberately not set. */ - break; - - case DW_CFA_GNU_args_size: - /* Ignored. */ - insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &utmp); - break; - - case DW_CFA_GNU_negative_offset_extended: - insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, ®); - reg = dwarf2_frame_adjust_regnum (gdbarch, reg, eh_frame_p); - insn_ptr = safe_read_uleb128 (insn_ptr, insn_end, &utmp); - offset = utmp * fs->data_align; - fs->regs.alloc_regs (reg + 1); - fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_OFFSET; - fs->regs.reg[reg].loc.offset = -offset; - break; - - default: - if (insn >= DW_CFA_lo_user && insn <= DW_CFA_hi_user) - { - /* Handle vendor-specific CFI for different architectures. */ - if (!gdbarch_execute_dwarf_cfa_vendor_op (gdbarch, insn, fs)) - error (_("Call Frame Instruction op %d in vendor extension " - "space is not handled on this architecture."), - insn); - } - else - internal_error (__FILE__, __LINE__, - _("Unknown CFI encountered.")); - } - } - } - - if (fs->initial.reg.empty ()) - { - /* Don't allow remember/restore between CIE and FDE programs. */ - delete fs->regs.prev; - fs->regs.prev = NULL; - } - - return insn_ptr; -} - -#if GDB_SELF_TEST - -namespace selftests { - -/* Unit test to function execute_cfa_program. */ - -static void -execute_cfa_program_test (struct gdbarch *gdbarch) -{ - struct dwarf2_fde fde; - struct dwarf2_cie cie; - - memset (&fde, 0, sizeof fde); - memset (&cie, 0, sizeof cie); - - cie.data_alignment_factor = -4; - cie.code_alignment_factor = 2; - fde.cie = &cie; - - dwarf2_frame_state fs (0, fde.cie); - - gdb_byte insns[] = - { - DW_CFA_def_cfa, 1, 4, /* DW_CFA_def_cfa: r1 ofs 4 */ - DW_CFA_offset | 0x2, 1, /* DW_CFA_offset: r2 at cfa-4 */ - DW_CFA_remember_state, - DW_CFA_restore_state, - }; - - const gdb_byte *insn_end = insns + sizeof (insns); - const gdb_byte *out = execute_cfa_program (&fde, insns, insn_end, gdbarch, - 0, &fs); - - SELF_CHECK (out == insn_end); - SELF_CHECK (fs.pc == 0); - - /* The instructions above only use r1 and r2, but the register numbers - used are adjusted by dwarf2_frame_adjust_regnum. */ - auto r1 = dwarf2_frame_adjust_regnum (gdbarch, 1, fde.eh_frame_p); - auto r2 = dwarf2_frame_adjust_regnum (gdbarch, 2, fde.eh_frame_p); - - SELF_CHECK (fs.regs.reg.size () == (std::max (r1, r2) + 1)); - - SELF_CHECK (fs.regs.reg[r2].how == DWARF2_FRAME_REG_SAVED_OFFSET); - SELF_CHECK (fs.regs.reg[r2].loc.offset == -4); - - for (auto i = 0; i < fs.regs.reg.size (); i++) - if (i != r2) - SELF_CHECK (fs.regs.reg[i].how == DWARF2_FRAME_REG_UNSPECIFIED); - - SELF_CHECK (fs.regs.cfa_reg == 1); - SELF_CHECK (fs.regs.cfa_offset == 4); - SELF_CHECK (fs.regs.cfa_how == CFA_REG_OFFSET); - SELF_CHECK (fs.regs.cfa_exp == NULL); - SELF_CHECK (fs.regs.prev == NULL); -} - -} // namespace selftests -#endif /* GDB_SELF_TEST */ - - - -/* Architecture-specific operations. */ - -/* Per-architecture data key. */ -static struct gdbarch_data *dwarf2_frame_data; - -struct dwarf2_frame_ops -{ - /* Pre-initialize the register state REG for register REGNUM. */ - void (*init_reg) (struct gdbarch *, int, struct dwarf2_frame_state_reg *, - struct frame_info *); - - /* Check whether the THIS_FRAME is a signal trampoline. */ - int (*signal_frame_p) (struct gdbarch *, struct frame_info *); - - /* Convert .eh_frame register number to DWARF register number, or - adjust .debug_frame register number. */ - int (*adjust_regnum) (struct gdbarch *, int, int); -}; - -/* Default architecture-specific register state initialization - function. */ - -static void -dwarf2_frame_default_init_reg (struct gdbarch *gdbarch, int regnum, - struct dwarf2_frame_state_reg *reg, - struct frame_info *this_frame) -{ - /* If we have a register that acts as a program counter, mark it as - a destination for the return address. If we have a register that - serves as the stack pointer, arrange for it to be filled with the - call frame address (CFA). The other registers are marked as - unspecified. - - We copy the return address to the program counter, since many - parts in GDB assume that it is possible to get the return address - by unwinding the program counter register. However, on ISA's - with a dedicated return address register, the CFI usually only - contains information to unwind that return address register. - - The reason we're treating the stack pointer special here is - because in many cases GCC doesn't emit CFI for the stack pointer - and implicitly assumes that it is equal to the CFA. This makes - some sense since the DWARF specification (version 3, draft 8, - p. 102) says that: - - "Typically, the CFA is defined to be the value of the stack - pointer at the call site in the previous frame (which may be - different from its value on entry to the current frame)." - - However, this isn't true for all platforms supported by GCC - (e.g. IBM S/390 and zSeries). Those architectures should provide - their own architecture-specific initialization function. */ - - if (regnum == gdbarch_pc_regnum (gdbarch)) - reg->how = DWARF2_FRAME_REG_RA; - else if (regnum == gdbarch_sp_regnum (gdbarch)) - reg->how = DWARF2_FRAME_REG_CFA; -} - -/* Return a default for the architecture-specific operations. */ - -static void * -dwarf2_frame_init (struct obstack *obstack) -{ - struct dwarf2_frame_ops *ops; - - ops = OBSTACK_ZALLOC (obstack, struct dwarf2_frame_ops); - ops->init_reg = dwarf2_frame_default_init_reg; - return ops; -} - -/* Set the architecture-specific register state initialization - function for GDBARCH to INIT_REG. */ - -void -dwarf2_frame_set_init_reg (struct gdbarch *gdbarch, - void (*init_reg) (struct gdbarch *, int, - struct dwarf2_frame_state_reg *, - struct frame_info *)) -{ - struct dwarf2_frame_ops *ops - = (struct dwarf2_frame_ops *) gdbarch_data (gdbarch, dwarf2_frame_data); - - ops->init_reg = init_reg; -} - -/* Pre-initialize the register state REG for register REGNUM. */ - -static void -dwarf2_frame_init_reg (struct gdbarch *gdbarch, int regnum, - struct dwarf2_frame_state_reg *reg, - struct frame_info *this_frame) -{ - struct dwarf2_frame_ops *ops - = (struct dwarf2_frame_ops *) gdbarch_data (gdbarch, dwarf2_frame_data); - - ops->init_reg (gdbarch, regnum, reg, this_frame); -} - -/* Set the architecture-specific signal trampoline recognition - function for GDBARCH to SIGNAL_FRAME_P. */ - -void -dwarf2_frame_set_signal_frame_p (struct gdbarch *gdbarch, - int (*signal_frame_p) (struct gdbarch *, - struct frame_info *)) -{ - struct dwarf2_frame_ops *ops - = (struct dwarf2_frame_ops *) gdbarch_data (gdbarch, dwarf2_frame_data); - - ops->signal_frame_p = signal_frame_p; -} - -/* Query the architecture-specific signal frame recognizer for - THIS_FRAME. */ - -static int -dwarf2_frame_signal_frame_p (struct gdbarch *gdbarch, - struct frame_info *this_frame) -{ - struct dwarf2_frame_ops *ops - = (struct dwarf2_frame_ops *) gdbarch_data (gdbarch, dwarf2_frame_data); - - if (ops->signal_frame_p == NULL) - return 0; - return ops->signal_frame_p (gdbarch, this_frame); -} - -/* Set the architecture-specific adjustment of .eh_frame and .debug_frame - register numbers. */ - -void -dwarf2_frame_set_adjust_regnum (struct gdbarch *gdbarch, - int (*adjust_regnum) (struct gdbarch *, - int, int)) -{ - struct dwarf2_frame_ops *ops - = (struct dwarf2_frame_ops *) gdbarch_data (gdbarch, dwarf2_frame_data); - - ops->adjust_regnum = adjust_regnum; -} - -/* Translate a .eh_frame register to DWARF register, or adjust a .debug_frame - register. */ - -static int -dwarf2_frame_adjust_regnum (struct gdbarch *gdbarch, - int regnum, int eh_frame_p) -{ - struct dwarf2_frame_ops *ops - = (struct dwarf2_frame_ops *) gdbarch_data (gdbarch, dwarf2_frame_data); - - if (ops->adjust_regnum == NULL) - return regnum; - return ops->adjust_regnum (gdbarch, regnum, eh_frame_p); -} - -static void -dwarf2_frame_find_quirks (struct dwarf2_frame_state *fs, - struct dwarf2_fde *fde) -{ - struct compunit_symtab *cust; - - cust = find_pc_compunit_symtab (fs->pc); - if (cust == NULL) - return; - - if (producer_is_realview (COMPUNIT_PRODUCER (cust))) - { - if (fde->cie->version == 1) - fs->armcc_cfa_offsets_sf = 1; - - if (fde->cie->version == 1) - fs->armcc_cfa_offsets_reversed = 1; - - /* The reversed offset problem is present in some compilers - using DWARF3, but it was eventually fixed. Check the ARM - defined augmentations, which are in the format "armcc" followed - by a list of one-character options. The "+" option means - this problem is fixed (no quirk needed). If the armcc - augmentation is missing, the quirk is needed. */ - if (fde->cie->version == 3 - && (!startswith (fde->cie->augmentation, "armcc") - || strchr (fde->cie->augmentation + 5, '+') == NULL)) - fs->armcc_cfa_offsets_reversed = 1; - - return; - } -} - - -/* See dwarf2-frame.h. */ - -int -dwarf2_fetch_cfa_info (struct gdbarch *gdbarch, CORE_ADDR pc, - struct dwarf2_per_cu_data *data, - int *regnum_out, LONGEST *offset_out, - CORE_ADDR *text_offset_out, - const gdb_byte **cfa_start_out, - const gdb_byte **cfa_end_out) -{ - struct dwarf2_fde *fde; - CORE_ADDR text_offset; - CORE_ADDR pc1 = pc; - - /* Find the correct FDE. */ - fde = dwarf2_frame_find_fde (&pc1, &text_offset); - if (fde == NULL) - error (_("Could not compute CFA; needed to translate this expression")); - - dwarf2_frame_state fs (pc1, fde->cie); - - /* Check for "quirks" - known bugs in producers. */ - dwarf2_frame_find_quirks (&fs, fde); - - /* First decode all the insns in the CIE. */ - execute_cfa_program (fde, fde->cie->initial_instructions, - fde->cie->end, gdbarch, pc, &fs); - - /* Save the initialized register set. */ - fs.initial = fs.regs; - - /* Then decode the insns in the FDE up to our target PC. */ - execute_cfa_program (fde, fde->instructions, fde->end, gdbarch, pc, &fs); - - /* Calculate the CFA. */ - switch (fs.regs.cfa_how) - { - case CFA_REG_OFFSET: - { - int regnum = dwarf_reg_to_regnum_or_error (gdbarch, fs.regs.cfa_reg); - - *regnum_out = regnum; - if (fs.armcc_cfa_offsets_reversed) - *offset_out = -fs.regs.cfa_offset; - else - *offset_out = fs.regs.cfa_offset; - return 1; - } - - case CFA_EXP: - *text_offset_out = text_offset; - *cfa_start_out = fs.regs.cfa_exp; - *cfa_end_out = fs.regs.cfa_exp + fs.regs.cfa_exp_len; - return 0; - - default: - internal_error (__FILE__, __LINE__, _("Unknown CFA rule.")); - } -} - - -struct dwarf2_frame_cache -{ - /* DWARF Call Frame Address. */ - CORE_ADDR cfa; - - /* Set if the return address column was marked as unavailable - (required non-collected memory or registers to compute). */ - int unavailable_retaddr; - - /* Set if the return address column was marked as undefined. */ - int undefined_retaddr; - - /* Saved registers, indexed by GDB register number, not by DWARF - register number. */ - struct dwarf2_frame_state_reg *reg; - - /* Return address register. */ - struct dwarf2_frame_state_reg retaddr_reg; - - /* Target address size in bytes. */ - int addr_size; - - /* The .text offset. */ - CORE_ADDR text_offset; - - /* True if we already checked whether this frame is the bottom frame - of a virtual tail call frame chain. */ - int checked_tailcall_bottom; - - /* If not NULL then this frame is the bottom frame of a TAILCALL_FRAME - sequence. If NULL then it is a normal case with no TAILCALL_FRAME - involved. Non-bottom frames of a virtual tail call frames chain use - dwarf2_tailcall_frame_unwind unwinder so this field does not apply for - them. */ - void *tailcall_cache; - - /* The number of bytes to subtract from TAILCALL_FRAME frames frame - base to get the SP, to simulate the return address pushed on the - stack. */ - LONGEST entry_cfa_sp_offset; - int entry_cfa_sp_offset_p; -}; - -static struct dwarf2_frame_cache * -dwarf2_frame_cache (struct frame_info *this_frame, void **this_cache) -{ - struct gdbarch *gdbarch = get_frame_arch (this_frame); - const int num_regs = gdbarch_num_cooked_regs (gdbarch); - struct dwarf2_frame_cache *cache; - struct dwarf2_fde *fde; - CORE_ADDR entry_pc; - const gdb_byte *instr; - - if (*this_cache) - return (struct dwarf2_frame_cache *) *this_cache; - - /* Allocate a new cache. */ - cache = FRAME_OBSTACK_ZALLOC (struct dwarf2_frame_cache); - cache->reg = FRAME_OBSTACK_CALLOC (num_regs, struct dwarf2_frame_state_reg); - *this_cache = cache; - - /* Unwind the PC. - - Note that if the next frame is never supposed to return (i.e. a call - to abort), the compiler might optimize away the instruction at - its return address. As a result the return address will - point at some random instruction, and the CFI for that - instruction is probably worthless to us. GCC's unwinder solves - this problem by substracting 1 from the return address to get an - address in the middle of a presumed call instruction (or the - instruction in the associated delay slot). This should only be - done for "normal" frames and not for resume-type frames (signal - handlers, sentinel frames, dummy frames). The function - get_frame_address_in_block does just this. It's not clear how - reliable the method is though; there is the potential for the - register state pre-call being different to that on return. */ - CORE_ADDR pc1 = get_frame_address_in_block (this_frame); - - /* Find the correct FDE. */ - fde = dwarf2_frame_find_fde (&pc1, &cache->text_offset); - gdb_assert (fde != NULL); - - /* Allocate and initialize the frame state. */ - struct dwarf2_frame_state fs (pc1, fde->cie); - - cache->addr_size = fde->cie->addr_size; - - /* Check for "quirks" - known bugs in producers. */ - dwarf2_frame_find_quirks (&fs, fde); - - /* First decode all the insns in the CIE. */ - execute_cfa_program (fde, fde->cie->initial_instructions, - fde->cie->end, gdbarch, - get_frame_address_in_block (this_frame), &fs); - - /* Save the initialized register set. */ - fs.initial = fs.regs; - - /* Fetching the entry pc for THIS_FRAME won't necessarily result - in an address that's within the range of FDE locations. This - is due to the possibility of the function occupying non-contiguous - ranges. */ - if (get_frame_func_if_available (this_frame, &entry_pc) - && fde->initial_location <= entry_pc - && entry_pc < fde->initial_location + fde->address_range) - { - /* Decode the insns in the FDE up to the entry PC. */ - instr = execute_cfa_program (fde, fde->instructions, fde->end, gdbarch, - entry_pc, &fs); - - if (fs.regs.cfa_how == CFA_REG_OFFSET - && (dwarf_reg_to_regnum (gdbarch, fs.regs.cfa_reg) - == gdbarch_sp_regnum (gdbarch))) - { - cache->entry_cfa_sp_offset = fs.regs.cfa_offset; - cache->entry_cfa_sp_offset_p = 1; - } - } - else - instr = fde->instructions; - - /* Then decode the insns in the FDE up to our target PC. */ - execute_cfa_program (fde, instr, fde->end, gdbarch, - get_frame_address_in_block (this_frame), &fs); - - try - { - /* Calculate the CFA. */ - switch (fs.regs.cfa_how) - { - case CFA_REG_OFFSET: - cache->cfa = read_addr_from_reg (this_frame, fs.regs.cfa_reg); - if (fs.armcc_cfa_offsets_reversed) - cache->cfa -= fs.regs.cfa_offset; - else - cache->cfa += fs.regs.cfa_offset; - break; - - case CFA_EXP: - cache->cfa = - execute_stack_op (fs.regs.cfa_exp, fs.regs.cfa_exp_len, - cache->addr_size, cache->text_offset, - this_frame, 0, 0); - break; - - default: - internal_error (__FILE__, __LINE__, _("Unknown CFA rule.")); - } - } - catch (const gdb_exception_error &ex) - { - if (ex.error == NOT_AVAILABLE_ERROR) - { - cache->unavailable_retaddr = 1; - return cache; - } - - throw; - } - - /* Initialize the register state. */ - { - int regnum; - - for (regnum = 0; regnum < num_regs; regnum++) - dwarf2_frame_init_reg (gdbarch, regnum, &cache->reg[regnum], this_frame); - } - - /* Go through the DWARF2 CFI generated table and save its register - location information in the cache. Note that we don't skip the - return address column; it's perfectly all right for it to - correspond to a real register. */ - { - int column; /* CFI speak for "register number". */ - - for (column = 0; column < fs.regs.reg.size (); column++) - { - /* Use the GDB register number as the destination index. */ - int regnum = dwarf_reg_to_regnum (gdbarch, column); - - /* Protect against a target returning a bad register. */ - if (regnum < 0 || regnum >= num_regs) - continue; - - /* NOTE: cagney/2003-09-05: CFI should specify the disposition - of all debug info registers. If it doesn't, complain (but - not too loudly). It turns out that GCC assumes that an - unspecified register implies "same value" when CFI (draft - 7) specifies nothing at all. Such a register could equally - be interpreted as "undefined". Also note that this check - isn't sufficient; it only checks that all registers in the - range [0 .. max column] are specified, and won't detect - problems when a debug info register falls outside of the - table. We need a way of iterating through all the valid - DWARF2 register numbers. */ - if (fs.regs.reg[column].how == DWARF2_FRAME_REG_UNSPECIFIED) - { - if (cache->reg[regnum].how == DWARF2_FRAME_REG_UNSPECIFIED) - complaint (_("\ -incomplete CFI data; unspecified registers (e.g., %s) at %s"), - gdbarch_register_name (gdbarch, regnum), - paddress (gdbarch, fs.pc)); - } - else - cache->reg[regnum] = fs.regs.reg[column]; - } - } - - /* Eliminate any DWARF2_FRAME_REG_RA rules, and save the information - we need for evaluating DWARF2_FRAME_REG_RA_OFFSET rules. */ - { - int regnum; - - for (regnum = 0; regnum < num_regs; regnum++) - { - if (cache->reg[regnum].how == DWARF2_FRAME_REG_RA - || cache->reg[regnum].how == DWARF2_FRAME_REG_RA_OFFSET) - { - const std::vector<struct dwarf2_frame_state_reg> ®s - = fs.regs.reg; - ULONGEST retaddr_column = fs.retaddr_column; - - /* It seems rather bizarre to specify an "empty" column as - the return adress column. However, this is exactly - what GCC does on some targets. It turns out that GCC - assumes that the return address can be found in the - register corresponding to the return address column. - Incidentally, that's how we should treat a return - address column specifying "same value" too. */ - if (fs.retaddr_column < fs.regs.reg.size () - && regs[retaddr_column].how != DWARF2_FRAME_REG_UNSPECIFIED - && regs[retaddr_column].how != DWARF2_FRAME_REG_SAME_VALUE) - { - if (cache->reg[regnum].how == DWARF2_FRAME_REG_RA) - cache->reg[regnum] = regs[retaddr_column]; - else - cache->retaddr_reg = regs[retaddr_column]; - } - else - { - if (cache->reg[regnum].how == DWARF2_FRAME_REG_RA) - { - cache->reg[regnum].loc.reg = fs.retaddr_column; - cache->reg[regnum].how = DWARF2_FRAME_REG_SAVED_REG; - } - else - { - cache->retaddr_reg.loc.reg = fs.retaddr_column; - cache->retaddr_reg.how = DWARF2_FRAME_REG_SAVED_REG; - } - } - } - } - } - - if (fs.retaddr_column < fs.regs.reg.size () - && fs.regs.reg[fs.retaddr_column].how == DWARF2_FRAME_REG_UNDEFINED) - cache->undefined_retaddr = 1; - - return cache; -} - -static enum unwind_stop_reason -dwarf2_frame_unwind_stop_reason (struct frame_info *this_frame, - void **this_cache) -{ - struct dwarf2_frame_cache *cache - = dwarf2_frame_cache (this_frame, this_cache); - - if (cache->unavailable_retaddr) - return UNWIND_UNAVAILABLE; - - if (cache->undefined_retaddr) - return UNWIND_OUTERMOST; - - return UNWIND_NO_REASON; -} - -static void -dwarf2_frame_this_id (struct frame_info *this_frame, void **this_cache, - struct frame_id *this_id) -{ - struct dwarf2_frame_cache *cache = - dwarf2_frame_cache (this_frame, this_cache); - - if (cache->unavailable_retaddr) - (*this_id) = frame_id_build_unavailable_stack (get_frame_func (this_frame)); - else if (cache->undefined_retaddr) - return; - else - (*this_id) = frame_id_build (cache->cfa, get_frame_func (this_frame)); -} - -static struct value * -dwarf2_frame_prev_register (struct frame_info *this_frame, void **this_cache, - int regnum) -{ - struct gdbarch *gdbarch = get_frame_arch (this_frame); - struct dwarf2_frame_cache *cache = - dwarf2_frame_cache (this_frame, this_cache); - CORE_ADDR addr; - int realnum; - - /* Check whether THIS_FRAME is the bottom frame of a virtual tail - call frame chain. */ - if (!cache->checked_tailcall_bottom) - { - cache->checked_tailcall_bottom = 1; - dwarf2_tailcall_sniffer_first (this_frame, &cache->tailcall_cache, - (cache->entry_cfa_sp_offset_p - ? &cache->entry_cfa_sp_offset : NULL)); - } - - /* Non-bottom frames of a virtual tail call frames chain use - dwarf2_tailcall_frame_unwind unwinder so this code does not apply for - them. If dwarf2_tailcall_prev_register_first does not have specific value - unwind the register, tail call frames are assumed to have the register set - of the top caller. */ - if (cache->tailcall_cache) - { - struct value *val; - - val = dwarf2_tailcall_prev_register_first (this_frame, - &cache->tailcall_cache, - regnum); - if (val) - return val; - } - - switch (cache->reg[regnum].how) - { - case DWARF2_FRAME_REG_UNDEFINED: - /* If CFI explicitly specified that the value isn't defined, - mark it as optimized away; the value isn't available. */ - return frame_unwind_got_optimized (this_frame, regnum); - - case DWARF2_FRAME_REG_SAVED_OFFSET: - addr = cache->cfa + cache->reg[regnum].loc.offset; - return frame_unwind_got_memory (this_frame, regnum, addr); - - case DWARF2_FRAME_REG_SAVED_REG: - realnum = dwarf_reg_to_regnum_or_error - (gdbarch, cache->reg[regnum].loc.reg); - return frame_unwind_got_register (this_frame, regnum, realnum); - - case DWARF2_FRAME_REG_SAVED_EXP: - addr = execute_stack_op (cache->reg[regnum].loc.exp.start, - cache->reg[regnum].loc.exp.len, - cache->addr_size, cache->text_offset, - this_frame, cache->cfa, 1); - return frame_unwind_got_memory (this_frame, regnum, addr); - - case DWARF2_FRAME_REG_SAVED_VAL_OFFSET: - addr = cache->cfa + cache->reg[regnum].loc.offset; - return frame_unwind_got_constant (this_frame, regnum, addr); - - case DWARF2_FRAME_REG_SAVED_VAL_EXP: - addr = execute_stack_op (cache->reg[regnum].loc.exp.start, - cache->reg[regnum].loc.exp.len, - cache->addr_size, cache->text_offset, - this_frame, cache->cfa, 1); - return frame_unwind_got_constant (this_frame, regnum, addr); - - case DWARF2_FRAME_REG_UNSPECIFIED: - /* GCC, in its infinite wisdom decided to not provide unwind - information for registers that are "same value". Since - DWARF2 (3 draft 7) doesn't define such behavior, said - registers are actually undefined (which is different to CFI - "undefined"). Code above issues a complaint about this. - Here just fudge the books, assume GCC, and that the value is - more inner on the stack. */ - return frame_unwind_got_register (this_frame, regnum, regnum); - - case DWARF2_FRAME_REG_SAME_VALUE: - return frame_unwind_got_register (this_frame, regnum, regnum); - - case DWARF2_FRAME_REG_CFA: - return frame_unwind_got_address (this_frame, regnum, cache->cfa); - - case DWARF2_FRAME_REG_CFA_OFFSET: - addr = cache->cfa + cache->reg[regnum].loc.offset; - return frame_unwind_got_address (this_frame, regnum, addr); - - case DWARF2_FRAME_REG_RA_OFFSET: - addr = cache->reg[regnum].loc.offset; - regnum = dwarf_reg_to_regnum_or_error - (gdbarch, cache->retaddr_reg.loc.reg); - addr += get_frame_register_unsigned (this_frame, regnum); - return frame_unwind_got_address (this_frame, regnum, addr); - - case DWARF2_FRAME_REG_FN: - return cache->reg[regnum].loc.fn (this_frame, this_cache, regnum); - - default: - internal_error (__FILE__, __LINE__, _("Unknown register rule.")); - } -} - -/* Proxy for tailcall_frame_dealloc_cache for bottom frame of a virtual tail - call frames chain. */ - -static void -dwarf2_frame_dealloc_cache (struct frame_info *self, void *this_cache) -{ - struct dwarf2_frame_cache *cache = dwarf2_frame_cache (self, &this_cache); - - if (cache->tailcall_cache) - dwarf2_tailcall_frame_unwind.dealloc_cache (self, cache->tailcall_cache); -} - -static int -dwarf2_frame_sniffer (const struct frame_unwind *self, - struct frame_info *this_frame, void **this_cache) -{ - if (!dwarf2_frame_unwinders_enabled_p) - return 0; - - /* Grab an address that is guaranteed to reside somewhere within the - function. get_frame_pc(), with a no-return next function, can - end up returning something past the end of this function's body. - If the frame we're sniffing for is a signal frame whose start - address is placed on the stack by the OS, its FDE must - extend one byte before its start address or we could potentially - select the FDE of the previous function. */ - CORE_ADDR block_addr = get_frame_address_in_block (this_frame); - struct dwarf2_fde *fde = dwarf2_frame_find_fde (&block_addr, NULL); - - if (!fde) - return 0; - - /* On some targets, signal trampolines may have unwind information. - We need to recognize them so that we set the frame type - correctly. */ - - if (fde->cie->signal_frame - || dwarf2_frame_signal_frame_p (get_frame_arch (this_frame), - this_frame)) - return self->type == SIGTRAMP_FRAME; - - if (self->type != NORMAL_FRAME) - return 0; - - return 1; -} - -static const struct frame_unwind dwarf2_frame_unwind = -{ - NORMAL_FRAME, - dwarf2_frame_unwind_stop_reason, - dwarf2_frame_this_id, - dwarf2_frame_prev_register, - NULL, - dwarf2_frame_sniffer, - dwarf2_frame_dealloc_cache -}; - -static const struct frame_unwind dwarf2_signal_frame_unwind = -{ - SIGTRAMP_FRAME, - dwarf2_frame_unwind_stop_reason, - dwarf2_frame_this_id, - dwarf2_frame_prev_register, - NULL, - dwarf2_frame_sniffer, - - /* TAILCALL_CACHE can never be in such frame to need dealloc_cache. */ - NULL -}; - -/* Append the DWARF-2 frame unwinders to GDBARCH's list. */ - -void -dwarf2_append_unwinders (struct gdbarch *gdbarch) -{ - /* TAILCALL_FRAME must be first to find the record by - dwarf2_tailcall_sniffer_first. */ - frame_unwind_append_unwinder (gdbarch, &dwarf2_tailcall_frame_unwind); - - frame_unwind_append_unwinder (gdbarch, &dwarf2_frame_unwind); - frame_unwind_append_unwinder (gdbarch, &dwarf2_signal_frame_unwind); -} - - -/* There is no explicitly defined relationship between the CFA and the - location of frame's local variables and arguments/parameters. - Therefore, frame base methods on this page should probably only be - used as a last resort, just to avoid printing total garbage as a - response to the "info frame" command. */ - -static CORE_ADDR -dwarf2_frame_base_address (struct frame_info *this_frame, void **this_cache) -{ - struct dwarf2_frame_cache *cache = - dwarf2_frame_cache (this_frame, this_cache); - - return cache->cfa; -} - -static const struct frame_base dwarf2_frame_base = -{ - &dwarf2_frame_unwind, - dwarf2_frame_base_address, - dwarf2_frame_base_address, - dwarf2_frame_base_address -}; - -const struct frame_base * -dwarf2_frame_base_sniffer (struct frame_info *this_frame) -{ - CORE_ADDR block_addr = get_frame_address_in_block (this_frame); - - if (dwarf2_frame_find_fde (&block_addr, NULL)) - return &dwarf2_frame_base; - - return NULL; -} - -/* Compute the CFA for THIS_FRAME, but only if THIS_FRAME came from - the DWARF unwinder. This is used to implement - DW_OP_call_frame_cfa. */ - -CORE_ADDR -dwarf2_frame_cfa (struct frame_info *this_frame) -{ - if (frame_unwinder_is (this_frame, &record_btrace_tailcall_frame_unwind) - || frame_unwinder_is (this_frame, &record_btrace_frame_unwind)) - throw_error (NOT_AVAILABLE_ERROR, - _("cfa not available for record btrace target")); - - while (get_frame_type (this_frame) == INLINE_FRAME) - this_frame = get_prev_frame (this_frame); - if (get_frame_unwind_stop_reason (this_frame) == UNWIND_UNAVAILABLE) - throw_error (NOT_AVAILABLE_ERROR, - _("can't compute CFA for this frame: " - "required registers or memory are unavailable")); - - if (get_frame_id (this_frame).stack_status != FID_STACK_VALID) - throw_error (NOT_AVAILABLE_ERROR, - _("can't compute CFA for this frame: " - "frame base not available")); - - return get_frame_base (this_frame); -} - -const struct objfile_key<dwarf2_fde_table, - gdb::noop_deleter<dwarf2_fde_table>> - dwarf2_frame_objfile_data; - -static unsigned int -read_1_byte (bfd *abfd, const gdb_byte *buf) -{ - return bfd_get_8 (abfd, buf); -} - -static unsigned int -read_4_bytes (bfd *abfd, const gdb_byte *buf) -{ - return bfd_get_32 (abfd, buf); -} - -static ULONGEST -read_8_bytes (bfd *abfd, const gdb_byte *buf) -{ - return bfd_get_64 (abfd, buf); -} - -static ULONGEST -read_initial_length (bfd *abfd, const gdb_byte *buf, - unsigned int *bytes_read_ptr) -{ - ULONGEST result; - - result = bfd_get_32 (abfd, buf); - if (result == 0xffffffff) - { - result = bfd_get_64 (abfd, buf + 4); - *bytes_read_ptr = 12; - } - else - *bytes_read_ptr = 4; - - return result; -} - - -/* Pointer encoding helper functions. */ - -/* GCC supports exception handling based on DWARF2 CFI. However, for - technical reasons, it encodes addresses in its FDE's in a different - way. Several "pointer encodings" are supported. The encoding - that's used for a particular FDE is determined by the 'R' - augmentation in the associated CIE. The argument of this - augmentation is a single byte. - - The address can be encoded as 2 bytes, 4 bytes, 8 bytes, or as a - LEB128. This is encoded in bits 0, 1 and 2. Bit 3 encodes whether - the address is signed or unsigned. Bits 4, 5 and 6 encode how the - address should be interpreted (absolute, relative to the current - position in the FDE, ...). Bit 7, indicates that the address - should be dereferenced. */ - -static gdb_byte -encoding_for_size (unsigned int size) -{ - switch (size) - { - case 2: - return DW_EH_PE_udata2; - case 4: - return DW_EH_PE_udata4; - case 8: - return DW_EH_PE_udata8; - default: - internal_error (__FILE__, __LINE__, _("Unsupported address size")); - } -} - -static CORE_ADDR -read_encoded_value (struct comp_unit *unit, gdb_byte encoding, - int ptr_len, const gdb_byte *buf, - unsigned int *bytes_read_ptr, - CORE_ADDR func_base) -{ - ptrdiff_t offset; - CORE_ADDR base; - - /* GCC currently doesn't generate DW_EH_PE_indirect encodings for - FDE's. */ - if (encoding & DW_EH_PE_indirect) - internal_error (__FILE__, __LINE__, - _("Unsupported encoding: DW_EH_PE_indirect")); - - *bytes_read_ptr = 0; - - switch (encoding & 0x70) - { - case DW_EH_PE_absptr: - base = 0; - break; - case DW_EH_PE_pcrel: - base = bfd_section_vma (unit->dwarf_frame_section); - base += (buf - unit->dwarf_frame_buffer); - break; - case DW_EH_PE_datarel: - base = unit->dbase; - break; - case DW_EH_PE_textrel: - base = unit->tbase; - break; - case DW_EH_PE_funcrel: - base = func_base; - break; - case DW_EH_PE_aligned: - base = 0; - offset = buf - unit->dwarf_frame_buffer; - if ((offset % ptr_len) != 0) - { - *bytes_read_ptr = ptr_len - (offset % ptr_len); - buf += *bytes_read_ptr; - } - break; - default: - internal_error (__FILE__, __LINE__, - _("Invalid or unsupported encoding")); - } - - if ((encoding & 0x07) == 0x00) - { - encoding |= encoding_for_size (ptr_len); - if (bfd_get_sign_extend_vma (unit->abfd)) - encoding |= DW_EH_PE_signed; - } - - switch (encoding & 0x0f) - { - case DW_EH_PE_uleb128: - { - uint64_t value; - const gdb_byte *end_buf = buf + (sizeof (value) + 1) * 8 / 7; - - *bytes_read_ptr += safe_read_uleb128 (buf, end_buf, &value) - buf; - return base + value; - } - case DW_EH_PE_udata2: - *bytes_read_ptr += 2; - return (base + bfd_get_16 (unit->abfd, (bfd_byte *) buf)); - case DW_EH_PE_udata4: - *bytes_read_ptr += 4; - return (base + bfd_get_32 (unit->abfd, (bfd_byte *) buf)); - case DW_EH_PE_udata8: - *bytes_read_ptr += 8; - return (base + bfd_get_64 (unit->abfd, (bfd_byte *) buf)); - case DW_EH_PE_sleb128: - { - int64_t value; - const gdb_byte *end_buf = buf + (sizeof (value) + 1) * 8 / 7; - - *bytes_read_ptr += safe_read_sleb128 (buf, end_buf, &value) - buf; - return base + value; - } - case DW_EH_PE_sdata2: - *bytes_read_ptr += 2; - return (base + bfd_get_signed_16 (unit->abfd, (bfd_byte *) buf)); - case DW_EH_PE_sdata4: - *bytes_read_ptr += 4; - return (base + bfd_get_signed_32 (unit->abfd, (bfd_byte *) buf)); - case DW_EH_PE_sdata8: - *bytes_read_ptr += 8; - return (base + bfd_get_signed_64 (unit->abfd, (bfd_byte *) buf)); - default: - internal_error (__FILE__, __LINE__, - _("Invalid or unsupported encoding")); - } -} - - -/* Find CIE with the given CIE_POINTER in CIE_TABLE. */ -static struct dwarf2_cie * -find_cie (const dwarf2_cie_table &cie_table, ULONGEST cie_pointer) -{ - auto iter = cie_table.find (cie_pointer); - if (iter != cie_table.end ()) - return iter->second; - return NULL; -} - -static inline int -bsearch_fde_cmp (const dwarf2_fde *fde, CORE_ADDR seek_pc) -{ - if (fde->initial_location + fde->address_range <= seek_pc) - return -1; - if (fde->initial_location <= seek_pc) - return 0; - return 1; -} - -/* Find the FDE for *PC. Return a pointer to the FDE, and store the - initial location associated with it into *PC. */ - -static struct dwarf2_fde * -dwarf2_frame_find_fde (CORE_ADDR *pc, CORE_ADDR *out_offset) -{ - for (objfile *objfile : current_program_space->objfiles ()) - { - struct dwarf2_fde_table *fde_table; - CORE_ADDR offset; - CORE_ADDR seek_pc; - - fde_table = dwarf2_frame_objfile_data.get (objfile); - if (fde_table == NULL) - { - dwarf2_build_frame_info (objfile); - fde_table = dwarf2_frame_objfile_data.get (objfile); - } - gdb_assert (fde_table != NULL); - - if (fde_table->num_entries == 0) - continue; - - gdb_assert (objfile->section_offsets); - offset = ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile)); - - gdb_assert (fde_table->num_entries > 0); - if (*pc < offset + fde_table->entries[0]->initial_location) - continue; - - seek_pc = *pc - offset; - auto end = fde_table->entries + fde_table->num_entries; - auto it = gdb::binary_search (fde_table->entries, end, seek_pc, bsearch_fde_cmp); - if (it != end) - { - *pc = (*it)->initial_location + offset; - if (out_offset) - *out_offset = offset; - return *it; - } - } - return NULL; -} - -/* Add a pointer to new FDE to the FDE_TABLE, allocating space for it. */ -static void -add_fde (struct dwarf2_fde_table *fde_table, struct dwarf2_fde *fde) -{ - if (fde->address_range == 0) - /* Discard useless FDEs. */ - return; - - fde_table->num_entries += 1; - fde_table->entries = XRESIZEVEC (struct dwarf2_fde *, fde_table->entries, - fde_table->num_entries); - fde_table->entries[fde_table->num_entries - 1] = fde; -} - -#define DW64_CIE_ID 0xffffffffffffffffULL - -/* Defines the type of eh_frames that are expected to be decoded: CIE, FDE - or any of them. */ - -enum eh_frame_type -{ - EH_CIE_TYPE_ID = 1 << 0, - EH_FDE_TYPE_ID = 1 << 1, - EH_CIE_OR_FDE_TYPE_ID = EH_CIE_TYPE_ID | EH_FDE_TYPE_ID -}; - -static const gdb_byte *decode_frame_entry (struct comp_unit *unit, - const gdb_byte *start, - int eh_frame_p, - dwarf2_cie_table &cie_table, - struct dwarf2_fde_table *fde_table, - enum eh_frame_type entry_type); - -/* Decode the next CIE or FDE, entry_type specifies the expected type. - Return NULL if invalid input, otherwise the next byte to be processed. */ - -static const gdb_byte * -decode_frame_entry_1 (struct comp_unit *unit, const gdb_byte *start, - int eh_frame_p, - dwarf2_cie_table &cie_table, - struct dwarf2_fde_table *fde_table, - enum eh_frame_type entry_type) -{ - struct gdbarch *gdbarch = get_objfile_arch (unit->objfile); - const gdb_byte *buf, *end; - ULONGEST length; - unsigned int bytes_read; - int dwarf64_p; - ULONGEST cie_id; - ULONGEST cie_pointer; - int64_t sleb128; - uint64_t uleb128; - - buf = start; - length = read_initial_length (unit->abfd, buf, &bytes_read); - buf += bytes_read; - end = buf + (size_t) length; - - if (length == 0) - return end; - - /* Are we still within the section? */ - if (end <= buf || end > unit->dwarf_frame_buffer + unit->dwarf_frame_size) - return NULL; - - /* Distinguish between 32 and 64-bit encoded frame info. */ - dwarf64_p = (bytes_read == 12); - - /* In a .eh_frame section, zero is used to distinguish CIEs from FDEs. */ - if (eh_frame_p) - cie_id = 0; - else if (dwarf64_p) - cie_id = DW64_CIE_ID; - else - cie_id = DW_CIE_ID; - - if (dwarf64_p) - { - cie_pointer = read_8_bytes (unit->abfd, buf); - buf += 8; - } - else - { - cie_pointer = read_4_bytes (unit->abfd, buf); - buf += 4; - } - - if (cie_pointer == cie_id) - { - /* This is a CIE. */ - struct dwarf2_cie *cie; - char *augmentation; - unsigned int cie_version; - - /* Check that a CIE was expected. */ - if ((entry_type & EH_CIE_TYPE_ID) == 0) - error (_("Found a CIE when not expecting it.")); - - /* Record the offset into the .debug_frame section of this CIE. */ - cie_pointer = start - unit->dwarf_frame_buffer; - - /* Check whether we've already read it. */ - if (find_cie (cie_table, cie_pointer)) - return end; - - cie = XOBNEW (&unit->objfile->objfile_obstack, struct dwarf2_cie); - cie->initial_instructions = NULL; - cie->cie_pointer = cie_pointer; - - /* The encoding for FDE's in a normal .debug_frame section - depends on the target address size. */ - cie->encoding = DW_EH_PE_absptr; - - /* We'll determine the final value later, but we need to - initialize it conservatively. */ - cie->signal_frame = 0; - - /* Check version number. */ - cie_version = read_1_byte (unit->abfd, buf); - if (cie_version != 1 && cie_version != 3 && cie_version != 4) - return NULL; - cie->version = cie_version; - buf += 1; - - /* Interpret the interesting bits of the augmentation. */ - cie->augmentation = augmentation = (char *) buf; - buf += (strlen (augmentation) + 1); - - /* Ignore armcc augmentations. We only use them for quirks, - and that doesn't happen until later. */ - if (startswith (augmentation, "armcc")) - augmentation += strlen (augmentation); - - /* The GCC 2.x "eh" augmentation has a pointer immediately - following the augmentation string, so it must be handled - first. */ - if (augmentation[0] == 'e' && augmentation[1] == 'h') - { - /* Skip. */ - buf += gdbarch_ptr_bit (gdbarch) / TARGET_CHAR_BIT; - augmentation += 2; - } - - if (cie->version >= 4) - { - /* FIXME: check that this is the same as from the CU header. */ - cie->addr_size = read_1_byte (unit->abfd, buf); - ++buf; - cie->segment_size = read_1_byte (unit->abfd, buf); - ++buf; - } - else - { - cie->addr_size = gdbarch_dwarf2_addr_size (gdbarch); - cie->segment_size = 0; - } - /* Address values in .eh_frame sections are defined to have the - target's pointer size. Watchout: This breaks frame info for - targets with pointer size < address size, unless a .debug_frame - section exists as well. */ - if (eh_frame_p) - cie->ptr_size = gdbarch_ptr_bit (gdbarch) / TARGET_CHAR_BIT; - else - cie->ptr_size = cie->addr_size; - - buf = gdb_read_uleb128 (buf, end, &uleb128); - if (buf == NULL) - return NULL; - cie->code_alignment_factor = uleb128; - - buf = gdb_read_sleb128 (buf, end, &sleb128); - if (buf == NULL) - return NULL; - cie->data_alignment_factor = sleb128; - - if (cie_version == 1) - { - cie->return_address_register = read_1_byte (unit->abfd, buf); - ++buf; - } - else - { - buf = gdb_read_uleb128 (buf, end, &uleb128); - if (buf == NULL) - return NULL; - cie->return_address_register = uleb128; - } - - cie->return_address_register - = dwarf2_frame_adjust_regnum (gdbarch, - cie->return_address_register, - eh_frame_p); - - cie->saw_z_augmentation = (*augmentation == 'z'); - if (cie->saw_z_augmentation) - { - uint64_t uleb_length; - - buf = gdb_read_uleb128 (buf, end, &uleb_length); - if (buf == NULL) - return NULL; - cie->initial_instructions = buf + uleb_length; - augmentation++; - } - - while (*augmentation) - { - /* "L" indicates a byte showing how the LSDA pointer is encoded. */ - if (*augmentation == 'L') - { - /* Skip. */ - buf++; - augmentation++; - } - - /* "R" indicates a byte indicating how FDE addresses are encoded. */ - else if (*augmentation == 'R') - { - cie->encoding = *buf++; - augmentation++; - } - - /* "P" indicates a personality routine in the CIE augmentation. */ - else if (*augmentation == 'P') - { - /* Skip. Avoid indirection since we throw away the result. */ - gdb_byte encoding = (*buf++) & ~DW_EH_PE_indirect; - read_encoded_value (unit, encoding, cie->ptr_size, - buf, &bytes_read, 0); - buf += bytes_read; - augmentation++; - } - - /* "S" indicates a signal frame, such that the return - address must not be decremented to locate the call frame - info for the previous frame; it might even be the first - instruction of a function, so decrementing it would take - us to a different function. */ - else if (*augmentation == 'S') - { - cie->signal_frame = 1; - augmentation++; - } - - /* Otherwise we have an unknown augmentation. Assume that either - there is no augmentation data, or we saw a 'z' prefix. */ - else - { - if (cie->initial_instructions) - buf = cie->initial_instructions; - break; - } - } - - cie->initial_instructions = buf; - cie->end = end; - cie->unit = unit; - - cie_table[cie->cie_pointer] = cie; - } - else - { - /* This is a FDE. */ - struct dwarf2_fde *fde; - CORE_ADDR addr; - - /* Check that an FDE was expected. */ - if ((entry_type & EH_FDE_TYPE_ID) == 0) - error (_("Found an FDE when not expecting it.")); - - /* In an .eh_frame section, the CIE pointer is the delta between the - address within the FDE where the CIE pointer is stored and the - address of the CIE. Convert it to an offset into the .eh_frame - section. */ - if (eh_frame_p) - { - cie_pointer = buf - unit->dwarf_frame_buffer - cie_pointer; - cie_pointer -= (dwarf64_p ? 8 : 4); - } - - /* In either case, validate the result is still within the section. */ - if (cie_pointer >= unit->dwarf_frame_size) - return NULL; - - fde = XOBNEW (&unit->objfile->objfile_obstack, struct dwarf2_fde); - fde->cie = find_cie (cie_table, cie_pointer); - if (fde->cie == NULL) - { - decode_frame_entry (unit, unit->dwarf_frame_buffer + cie_pointer, - eh_frame_p, cie_table, fde_table, - EH_CIE_TYPE_ID); - fde->cie = find_cie (cie_table, cie_pointer); - } - - gdb_assert (fde->cie != NULL); - - addr = read_encoded_value (unit, fde->cie->encoding, fde->cie->ptr_size, - buf, &bytes_read, 0); - fde->initial_location = gdbarch_adjust_dwarf2_addr (gdbarch, addr); - buf += bytes_read; - - fde->address_range = - read_encoded_value (unit, fde->cie->encoding & 0x0f, - fde->cie->ptr_size, buf, &bytes_read, 0); - addr = gdbarch_adjust_dwarf2_addr (gdbarch, addr + fde->address_range); - fde->address_range = addr - fde->initial_location; - buf += bytes_read; - - /* A 'z' augmentation in the CIE implies the presence of an - augmentation field in the FDE as well. The only thing known - to be in here at present is the LSDA entry for EH. So we - can skip the whole thing. */ - if (fde->cie->saw_z_augmentation) - { - uint64_t uleb_length; - - buf = gdb_read_uleb128 (buf, end, &uleb_length); - if (buf == NULL) - return NULL; - buf += uleb_length; - if (buf > end) - return NULL; - } - - fde->instructions = buf; - fde->end = end; - - fde->eh_frame_p = eh_frame_p; - - add_fde (fde_table, fde); - } - - return end; -} - -/* Read a CIE or FDE in BUF and decode it. Entry_type specifies whether we - expect an FDE or a CIE. */ - -static const gdb_byte * -decode_frame_entry (struct comp_unit *unit, const gdb_byte *start, - int eh_frame_p, - dwarf2_cie_table &cie_table, - struct dwarf2_fde_table *fde_table, - enum eh_frame_type entry_type) -{ - enum { NONE, ALIGN4, ALIGN8, FAIL } workaround = NONE; - const gdb_byte *ret; - ptrdiff_t start_offset; - - while (1) - { - ret = decode_frame_entry_1 (unit, start, eh_frame_p, - cie_table, fde_table, entry_type); - if (ret != NULL) - break; - - /* We have corrupt input data of some form. */ - - /* ??? Try, weakly, to work around compiler/assembler/linker bugs - and mismatches wrt padding and alignment of debug sections. */ - /* Note that there is no requirement in the standard for any - alignment at all in the frame unwind sections. Testing for - alignment before trying to interpret data would be incorrect. - - However, GCC traditionally arranged for frame sections to be - sized such that the FDE length and CIE fields happen to be - aligned (in theory, for performance). This, unfortunately, - was done with .align directives, which had the side effect of - forcing the section to be aligned by the linker. - - This becomes a problem when you have some other producer that - creates frame sections that are not as strictly aligned. That - produces a hole in the frame info that gets filled by the - linker with zeros. - - The GCC behaviour is arguably a bug, but it's effectively now - part of the ABI, so we're now stuck with it, at least at the - object file level. A smart linker may decide, in the process - of compressing duplicate CIE information, that it can rewrite - the entire output section without this extra padding. */ - - start_offset = start - unit->dwarf_frame_buffer; - if (workaround < ALIGN4 && (start_offset & 3) != 0) - { - start += 4 - (start_offset & 3); - workaround = ALIGN4; - continue; - } - if (workaround < ALIGN8 && (start_offset & 7) != 0) - { - start += 8 - (start_offset & 7); - workaround = ALIGN8; - continue; - } - - /* Nothing left to try. Arrange to return as if we've consumed - the entire input section. Hopefully we'll get valid info from - the other of .debug_frame/.eh_frame. */ - workaround = FAIL; - ret = unit->dwarf_frame_buffer + unit->dwarf_frame_size; - break; - } - - switch (workaround) - { - case NONE: - break; - - case ALIGN4: - complaint (_("\ -Corrupt data in %s:%s; align 4 workaround apparently succeeded"), - unit->dwarf_frame_section->owner->filename, - unit->dwarf_frame_section->name); - break; - - case ALIGN8: - complaint (_("\ -Corrupt data in %s:%s; align 8 workaround apparently succeeded"), - unit->dwarf_frame_section->owner->filename, - unit->dwarf_frame_section->name); - break; - - default: - complaint (_("Corrupt data in %s:%s"), - unit->dwarf_frame_section->owner->filename, - unit->dwarf_frame_section->name); - break; - } - - return ret; -} - -static bool -fde_is_less_than (const dwarf2_fde *aa, const dwarf2_fde *bb) -{ - if (aa->initial_location == bb->initial_location) - { - if (aa->address_range != bb->address_range - && aa->eh_frame_p == 0 && bb->eh_frame_p == 0) - /* Linker bug, e.g. gold/10400. - Work around it by keeping stable sort order. */ - return aa < bb; - else - /* Put eh_frame entries after debug_frame ones. */ - return aa->eh_frame_p < bb->eh_frame_p; - } - - return aa->initial_location < bb->initial_location; -} - -void -dwarf2_build_frame_info (struct objfile *objfile) -{ - struct comp_unit *unit; - const gdb_byte *frame_ptr; - dwarf2_cie_table cie_table; - struct dwarf2_fde_table fde_table; - struct dwarf2_fde_table *fde_table2; - - fde_table.num_entries = 0; - fde_table.entries = NULL; - - /* Build a minimal decoding of the DWARF2 compilation unit. */ - unit = XOBNEW (&objfile->objfile_obstack, comp_unit); - unit->abfd = objfile->obfd; - unit->objfile = objfile; - unit->dbase = 0; - unit->tbase = 0; - - if (objfile->separate_debug_objfile_backlink == NULL) - { - /* Do not read .eh_frame from separate file as they must be also - present in the main file. */ - dwarf2_get_section_info (objfile, DWARF2_EH_FRAME, - &unit->dwarf_frame_section, - &unit->dwarf_frame_buffer, - &unit->dwarf_frame_size); - if (unit->dwarf_frame_size) - { - asection *got, *txt; - - /* FIXME: kettenis/20030602: This is the DW_EH_PE_datarel base - that is used for the i386/amd64 target, which currently is - the only target in GCC that supports/uses the - DW_EH_PE_datarel encoding. */ - got = bfd_get_section_by_name (unit->abfd, ".got"); - if (got) - unit->dbase = got->vma; - - /* GCC emits the DW_EH_PE_textrel encoding type on sh and ia64 - so far. */ - txt = bfd_get_section_by_name (unit->abfd, ".text"); - if (txt) - unit->tbase = txt->vma; - - try - { - frame_ptr = unit->dwarf_frame_buffer; - while (frame_ptr < unit->dwarf_frame_buffer + unit->dwarf_frame_size) - frame_ptr = decode_frame_entry (unit, frame_ptr, 1, - cie_table, &fde_table, - EH_CIE_OR_FDE_TYPE_ID); - } - - catch (const gdb_exception_error &e) - { - warning (_("skipping .eh_frame info of %s: %s"), - objfile_name (objfile), e.what ()); - - if (fde_table.num_entries != 0) - { - xfree (fde_table.entries); - fde_table.entries = NULL; - fde_table.num_entries = 0; - } - /* The cie_table is discarded below. */ - } - - cie_table.clear (); - } - } - - dwarf2_get_section_info (objfile, DWARF2_DEBUG_FRAME, - &unit->dwarf_frame_section, - &unit->dwarf_frame_buffer, - &unit->dwarf_frame_size); - if (unit->dwarf_frame_size) - { - int num_old_fde_entries = fde_table.num_entries; - - try - { - frame_ptr = unit->dwarf_frame_buffer; - while (frame_ptr < unit->dwarf_frame_buffer + unit->dwarf_frame_size) - frame_ptr = decode_frame_entry (unit, frame_ptr, 0, - cie_table, &fde_table, - EH_CIE_OR_FDE_TYPE_ID); - } - catch (const gdb_exception_error &e) - { - warning (_("skipping .debug_frame info of %s: %s"), - objfile_name (objfile), e.what ()); - - if (fde_table.num_entries != 0) - { - fde_table.num_entries = num_old_fde_entries; - if (num_old_fde_entries == 0) - { - xfree (fde_table.entries); - fde_table.entries = NULL; - } - else - { - fde_table.entries - = XRESIZEVEC (struct dwarf2_fde *, fde_table.entries, - fde_table.num_entries); - } - } - fde_table.num_entries = num_old_fde_entries; - } - } - - /* Copy fde_table to obstack: it is needed at runtime. */ - fde_table2 = XOBNEW (&objfile->objfile_obstack, struct dwarf2_fde_table); - - if (fde_table.num_entries == 0) - { - fde_table2->entries = NULL; - fde_table2->num_entries = 0; - } - else - { - struct dwarf2_fde *fde_prev = NULL; - struct dwarf2_fde *first_non_zero_fde = NULL; - int i; - - /* Prepare FDE table for lookups. */ - std::sort (fde_table.entries, fde_table.entries + fde_table.num_entries, - fde_is_less_than); - - /* Check for leftovers from --gc-sections. The GNU linker sets - the relevant symbols to zero, but doesn't zero the FDE *end* - ranges because there's no relocation there. It's (offset, - length), not (start, end). On targets where address zero is - just another valid address this can be a problem, since the - FDEs appear to be non-empty in the output --- we could pick - out the wrong FDE. To work around this, when overlaps are - detected, we prefer FDEs that do not start at zero. - - Start by finding the first FDE with non-zero start. Below - we'll discard all FDEs that start at zero and overlap this - one. */ - for (i = 0; i < fde_table.num_entries; i++) - { - struct dwarf2_fde *fde = fde_table.entries[i]; - - if (fde->initial_location != 0) - { - first_non_zero_fde = fde; - break; - } - } - - /* Since we'll be doing bsearch, squeeze out identical (except - for eh_frame_p) fde entries so bsearch result is predictable. - Also discard leftovers from --gc-sections. */ - fde_table2->num_entries = 0; - for (i = 0; i < fde_table.num_entries; i++) - { - struct dwarf2_fde *fde = fde_table.entries[i]; - - if (fde->initial_location == 0 - && first_non_zero_fde != NULL - && (first_non_zero_fde->initial_location - < fde->initial_location + fde->address_range)) - continue; - - if (fde_prev != NULL - && fde_prev->initial_location == fde->initial_location) - continue; - - obstack_grow (&objfile->objfile_obstack, &fde_table.entries[i], - sizeof (fde_table.entries[0])); - ++fde_table2->num_entries; - fde_prev = fde; - } - fde_table2->entries - = (struct dwarf2_fde **) obstack_finish (&objfile->objfile_obstack); - - /* Discard the original fde_table. */ - xfree (fde_table.entries); - } - - dwarf2_frame_objfile_data.set (objfile, fde_table2); -} - -/* Handle 'maintenance show dwarf unwinders'. */ - -static void -show_dwarf_unwinders_enabled_p (struct ui_file *file, int from_tty, - struct cmd_list_element *c, - const char *value) -{ - fprintf_filtered (file, - _("The DWARF stack unwinders are currently %s.\n"), - value); -} - -void -_initialize_dwarf2_frame (void) -{ - dwarf2_frame_data = gdbarch_data_register_pre_init (dwarf2_frame_init); - - add_setshow_boolean_cmd ("unwinders", class_obscure, - &dwarf2_frame_unwinders_enabled_p , _("\ -Set whether the DWARF stack frame unwinders are used."), _("\ -Show whether the DWARF stack frame unwinders are used."), _("\ -When enabled the DWARF stack frame unwinders can be used for architectures\n\ -that support the DWARF unwinders. Enabling the DWARF unwinders for an\n\ -architecture that doesn't support them will have no effect."), - NULL, - show_dwarf_unwinders_enabled_p, - &set_dwarf_cmdlist, - &show_dwarf_cmdlist); - -#if GDB_SELF_TEST - selftests::register_test_foreach_arch ("execute_cfa_program", - selftests::execute_cfa_program_test); -#endif -} diff -Nru gdb-9.1/gdb/dwarf2-frame.h gdb-10.2/gdb/dwarf2-frame.h --- gdb-9.1/gdb/dwarf2-frame.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/dwarf2-frame.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,266 +0,0 @@ -/* Frame unwinder for frames with DWARF Call Frame Information. - - Copyright (C) 2003-2020 Free Software Foundation, Inc. - - Contributed by Mark Kettenis. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef DWARF2_FRAME_H -#define DWARF2_FRAME_H 1 - -struct gdbarch; -struct objfile; -struct frame_info; -struct dwarf2_per_cu_data; -struct agent_expr; -struct axs_value; - -/* Register rule. */ - -enum dwarf2_frame_reg_rule -{ - /* Make certain that 0 maps onto the correct enum value; the - corresponding structure is being initialized using memset zero. - This indicates that CFI didn't provide any information at all - about a register, leaving how to obtain its value totally - unspecified. */ - DWARF2_FRAME_REG_UNSPECIFIED = 0, - - /* The term "undefined" comes from the DWARF2 CFI spec which this - code is modeling; it indicates that the register's value is - "undefined". GCC uses the less formal term "unsaved". Its - definition is a combination of REG_UNDEFINED and REG_UNSPECIFIED. - The failure to differentiate the two helps explain a few problems - with the CFI generated by GCC. */ - DWARF2_FRAME_REG_UNDEFINED, - DWARF2_FRAME_REG_SAVED_OFFSET, - DWARF2_FRAME_REG_SAVED_REG, - DWARF2_FRAME_REG_SAVED_EXP, - DWARF2_FRAME_REG_SAME_VALUE, - - /* These are defined in Dwarf3. */ - DWARF2_FRAME_REG_SAVED_VAL_OFFSET, - DWARF2_FRAME_REG_SAVED_VAL_EXP, - - /* These aren't defined by the DWARF2 CFI specification, but are - used internally by GDB. */ - DWARF2_FRAME_REG_FN, /* Call a registered function. */ - DWARF2_FRAME_REG_RA, /* Return Address. */ - DWARF2_FRAME_REG_RA_OFFSET, /* Return Address with offset. */ - DWARF2_FRAME_REG_CFA, /* Call Frame Address. */ - DWARF2_FRAME_REG_CFA_OFFSET /* Call Frame Address with offset. */ -}; - -/* Register state. */ - -struct dwarf2_frame_state_reg -{ - /* Each register save state can be described in terms of a CFA slot, - another register, or a location expression. */ - union { - LONGEST offset; - ULONGEST reg; - struct - { - const gdb_byte *start; - ULONGEST len; - } exp; - struct value *(*fn) (struct frame_info *this_frame, void **this_cache, - int regnum); - } loc; - enum dwarf2_frame_reg_rule how; -}; - -enum cfa_how_kind -{ - CFA_UNSET, - CFA_REG_OFFSET, - CFA_EXP -}; - -struct dwarf2_frame_state_reg_info -{ - dwarf2_frame_state_reg_info () = default; - ~dwarf2_frame_state_reg_info () - { - delete prev; - } - - /* Copy constructor. */ - dwarf2_frame_state_reg_info (const dwarf2_frame_state_reg_info &src) - : reg (src.reg), cfa_offset (src.cfa_offset), - cfa_reg (src.cfa_reg), cfa_how (src.cfa_how), cfa_exp (src.cfa_exp), - prev (src.prev) - { - } - - /* Assignment operator for both move-assignment and copy-assignment. */ - dwarf2_frame_state_reg_info& - operator= (dwarf2_frame_state_reg_info rhs) - { - swap (*this, rhs); - return *this; - } - - /* Move constructor. */ - dwarf2_frame_state_reg_info (dwarf2_frame_state_reg_info &&rhs) noexcept - : reg (std::move (rhs.reg)), cfa_offset (rhs.cfa_offset), - cfa_reg (rhs.cfa_reg), cfa_how (rhs.cfa_how), cfa_exp (rhs.cfa_exp), - prev (rhs.prev) - { - rhs.prev = nullptr; - } - - /* If necessary, enlarge the register set to hold NUM_REGS_REQUESTED - registers. */ - void alloc_regs (int num_regs_requested) - { - gdb_assert (num_regs_requested > 0); - - if (num_regs_requested <= reg.size ()) - return; - - reg.resize (num_regs_requested); - } - - std::vector<struct dwarf2_frame_state_reg> reg; - - LONGEST cfa_offset = 0; - ULONGEST cfa_reg = 0; - enum cfa_how_kind cfa_how = CFA_UNSET; - const gdb_byte *cfa_exp = NULL; - - /* Used to implement DW_CFA_remember_state. */ - struct dwarf2_frame_state_reg_info *prev = NULL; - -private: - friend void swap (dwarf2_frame_state_reg_info& lhs, - dwarf2_frame_state_reg_info& rhs) - { - using std::swap; - - swap (lhs.reg, rhs.reg); - swap (lhs.cfa_offset, rhs.cfa_offset); - swap (lhs.cfa_reg, rhs.cfa_reg); - swap (lhs.cfa_how, rhs.cfa_how); - swap (lhs.cfa_exp, rhs.cfa_exp); - swap (lhs.prev, rhs.prev); - } -}; - -struct dwarf2_cie; - -/* Structure describing a frame state. */ - -struct dwarf2_frame_state -{ - dwarf2_frame_state (CORE_ADDR pc, struct dwarf2_cie *cie); - - /* Each register save state can be described in terms of a CFA slot, - another register, or a location expression. */ - struct dwarf2_frame_state_reg_info regs {}; - - /* The PC described by the current frame state. */ - CORE_ADDR pc; - - /* Initial register set from the CIE. - Used to implement DW_CFA_restore. */ - struct dwarf2_frame_state_reg_info initial {}; - - /* The information we care about from the CIE. */ - const LONGEST data_align; - const ULONGEST code_align; - const ULONGEST retaddr_column; - - /* Flags for known producer quirks. */ - - /* The ARM compilers, in DWARF2 mode, assume that DW_CFA_def_cfa - and DW_CFA_def_cfa_offset takes a factored offset. */ - bool armcc_cfa_offsets_sf = false; - - /* The ARM compilers, in DWARF2 or DWARF3 mode, may assume that - the CFA is defined as REG - OFFSET rather than REG + OFFSET. */ - bool armcc_cfa_offsets_reversed = false; -}; - -/* When this is true the DWARF frame unwinders can be used if they are - registered with the gdbarch. Not all architectures can or do use the - DWARF unwinders. Setting this to true on a target that does not - otherwise support the DWARF unwinders has no effect. */ -extern bool dwarf2_frame_unwinders_enabled_p; - -/* Set the architecture-specific register state initialization - function for GDBARCH to INIT_REG. */ - -extern void dwarf2_frame_set_init_reg (struct gdbarch *gdbarch, - void (*init_reg) (struct gdbarch *, int, - struct dwarf2_frame_state_reg *, - struct frame_info *)); - -/* Set the architecture-specific signal trampoline recognition - function for GDBARCH to SIGNAL_FRAME_P. */ - -extern void - dwarf2_frame_set_signal_frame_p (struct gdbarch *gdbarch, - int (*signal_frame_p) (struct gdbarch *, - struct frame_info *)); - -/* Set the architecture-specific adjustment of .eh_frame and .debug_frame - register numbers. */ - -extern void - dwarf2_frame_set_adjust_regnum (struct gdbarch *gdbarch, - int (*adjust_regnum) (struct gdbarch *, - int, int)); - -/* Append the DWARF-2 frame unwinders to GDBARCH's list. */ - -void dwarf2_append_unwinders (struct gdbarch *gdbarch); - -/* Return the frame base methods for the function that contains PC, or - NULL if it can't be handled by the DWARF CFI frame unwinder. */ - -extern const struct frame_base * - dwarf2_frame_base_sniffer (struct frame_info *this_frame); - -/* Compute the DWARF CFA for a frame. */ - -CORE_ADDR dwarf2_frame_cfa (struct frame_info *this_frame); - -/* Find the CFA information for PC. - - Return 1 if a register is used for the CFA, or 0 if another - expression is used. Throw an exception on error. - - GDBARCH is the architecture to use. - DATA is the per-CU data. - - REGNUM_OUT is an out parameter that is set to the register number. - OFFSET_OUT is the offset to use from this register. - These are only filled in when 1 is returned. - - TEXT_OFFSET_OUT, CFA_START_OUT, and CFA_END_OUT describe the CFA - in other cases. These are only used when 0 is returned. */ - -extern int dwarf2_fetch_cfa_info (struct gdbarch *gdbarch, CORE_ADDR pc, - struct dwarf2_per_cu_data *data, - int *regnum_out, LONGEST *offset_out, - CORE_ADDR *text_offset_out, - const gdb_byte **cfa_start_out, - const gdb_byte **cfa_end_out); - -#endif /* dwarf2-frame.h */ diff -Nru gdb-9.1/gdb/dwarf2-frame-tailcall.c gdb-10.2/gdb/dwarf2-frame-tailcall.c --- gdb-9.1/gdb/dwarf2-frame-tailcall.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/dwarf2-frame-tailcall.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,475 +0,0 @@ -/* Virtual tail call frames unwinder for GDB. - - Copyright (C) 2010-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "defs.h" -#include "frame.h" -#include "dwarf2-frame-tailcall.h" -#include "dwarf2loc.h" -#include "frame-unwind.h" -#include "block.h" -#include "hashtab.h" -#include "gdbtypes.h" -#include "regcache.h" -#include "value.h" -#include "dwarf2-frame.h" -#include "gdbarch.h" - -/* Contains struct tailcall_cache indexed by next_bottom_frame. */ -static htab_t cache_htab; - -/* Associate structure of the unwinder to call_site_chain. Lifetime of this - structure is maintained by REFC decremented by dealloc_cache, all of them - get deleted during reinit_frame_cache. */ -struct tailcall_cache -{ - /* It must be the first one of this struct. It is the furthest callee. */ - struct frame_info *next_bottom_frame; - - /* Reference count. The whole chain of virtual tail call frames shares one - tailcall_cache. */ - int refc; - - /* Associated found virtual tail call frames chain, it is never NULL. */ - struct call_site_chain *chain; - - /* Cached pretended_chain_levels result. */ - int chain_levels; - - /* Unwound PC from the top (caller) frame, as it is not contained - in CHAIN. */ - CORE_ADDR prev_pc; - - /* Compensate SP in caller frames appropriately. prev_sp and - entry_cfa_sp_offset are valid only if PREV_SP_P. PREV_SP is SP at the top - (caller) frame. ENTRY_CFA_SP_OFFSET is shift of SP in tail call frames - against next_bottom_frame SP. */ - unsigned prev_sp_p : 1; - CORE_ADDR prev_sp; - LONGEST entry_cfa_sp_offset; -}; - -/* hash_f for htab_create_alloc of cache_htab. */ - -static hashval_t -cache_hash (const void *arg) -{ - const struct tailcall_cache *cache = (const struct tailcall_cache *) arg; - - return htab_hash_pointer (cache->next_bottom_frame); -} - -/* eq_f for htab_create_alloc of cache_htab. */ - -static int -cache_eq (const void *arg1, const void *arg2) -{ - const struct tailcall_cache *cache1 = (const struct tailcall_cache *) arg1; - const struct tailcall_cache *cache2 = (const struct tailcall_cache *) arg2; - - return cache1->next_bottom_frame == cache2->next_bottom_frame; -} - -/* Create new tailcall_cache for NEXT_BOTTOM_FRAME, NEXT_BOTTOM_FRAME must not - yet have been indexed by cache_htab. Caller holds one reference of the new - tailcall_cache. */ - -static struct tailcall_cache * -cache_new_ref1 (struct frame_info *next_bottom_frame) -{ - struct tailcall_cache *cache = XCNEW (struct tailcall_cache); - void **slot; - - cache->next_bottom_frame = next_bottom_frame; - cache->refc = 1; - - slot = htab_find_slot (cache_htab, cache, INSERT); - gdb_assert (*slot == NULL); - *slot = cache; - - return cache; -} - -/* Create new reference to CACHE. */ - -static void -cache_ref (struct tailcall_cache *cache) -{ - gdb_assert (cache->refc > 0); - - cache->refc++; -} - -/* Drop reference to CACHE, possibly fully freeing it and unregistering it from - cache_htab. */ - -static void -cache_unref (struct tailcall_cache *cache) -{ - gdb_assert (cache->refc > 0); - - if (!--cache->refc) - { - gdb_assert (htab_find_slot (cache_htab, cache, NO_INSERT) != NULL); - htab_remove_elt (cache_htab, cache); - - xfree (cache->chain); - xfree (cache); - } -} - -/* Return 1 if FI is a non-bottom (not the callee) tail call frame. Otherwise - return 0. */ - -static int -frame_is_tailcall (struct frame_info *fi) -{ - return frame_unwinder_is (fi, &dwarf2_tailcall_frame_unwind); -} - -/* Try to find tailcall_cache in cache_htab if FI is a part of its virtual tail - call chain. Otherwise return NULL. No new reference is created. */ - -static struct tailcall_cache * -cache_find (struct frame_info *fi) -{ - struct tailcall_cache *cache; - void **slot; - - while (frame_is_tailcall (fi)) - { - fi = get_next_frame (fi); - gdb_assert (fi != NULL); - } - - slot = htab_find_slot (cache_htab, &fi, NO_INSERT); - if (slot == NULL) - return NULL; - - cache = (struct tailcall_cache *) *slot; - gdb_assert (cache != NULL); - return cache; -} - -/* Number of virtual frames between THIS_FRAME and CACHE->NEXT_BOTTOM_FRAME. - If THIS_FRAME is CACHE-> NEXT_BOTTOM_FRAME return -1. */ - -static int -existing_next_levels (struct frame_info *this_frame, - struct tailcall_cache *cache) -{ - int retval = (frame_relative_level (this_frame) - - frame_relative_level (cache->next_bottom_frame) - 1); - - gdb_assert (retval >= -1); - - return retval; -} - -/* The number of virtual tail call frames in CHAIN. With no virtual tail call - frames the function would return 0 (but CHAIN does not exist in such - case). */ - -static int -pretended_chain_levels (struct call_site_chain *chain) -{ - int chain_levels; - - gdb_assert (chain != NULL); - - if (chain->callers == chain->length && chain->callees == chain->length) - return chain->length; - - chain_levels = chain->callers + chain->callees; - gdb_assert (chain_levels <= chain->length); - - return chain_levels; -} - -/* Implementation of frame_this_id_ftype. THIS_CACHE must be already - initialized with tailcall_cache, THIS_FRAME must be a part of THIS_CACHE. - - Specific virtual tail call frames are tracked by INLINE_DEPTH. */ - -static void -tailcall_frame_this_id (struct frame_info *this_frame, void **this_cache, - struct frame_id *this_id) -{ - struct tailcall_cache *cache = (struct tailcall_cache *) *this_cache; - struct frame_info *next_frame; - - /* Tail call does not make sense for a sentinel frame. */ - next_frame = get_next_frame (this_frame); - gdb_assert (next_frame != NULL); - - *this_id = get_frame_id (next_frame); - (*this_id).code_addr = get_frame_pc (this_frame); - (*this_id).code_addr_p = 1; - (*this_id).artificial_depth = (cache->chain_levels - - existing_next_levels (this_frame, cache)); - gdb_assert ((*this_id).artificial_depth > 0); -} - -/* Find PC to be unwound from THIS_FRAME. THIS_FRAME must be a part of - CACHE. */ - -static CORE_ADDR -pretend_pc (struct frame_info *this_frame, struct tailcall_cache *cache) -{ - int next_levels = existing_next_levels (this_frame, cache); - struct call_site_chain *chain = cache->chain; - - gdb_assert (chain != NULL); - - next_levels++; - gdb_assert (next_levels >= 0); - - if (next_levels < chain->callees) - return chain->call_site[chain->length - next_levels - 1]->pc; - next_levels -= chain->callees; - - /* Otherwise CHAIN->CALLEES are already covered by CHAIN->CALLERS. */ - if (chain->callees != chain->length) - { - if (next_levels < chain->callers) - return chain->call_site[chain->callers - next_levels - 1]->pc; - next_levels -= chain->callers; - } - - gdb_assert (next_levels == 0); - return cache->prev_pc; -} - -/* Implementation of frame_prev_register_ftype. If no specific register - override is supplied NULL is returned (this is incompatible with - frame_prev_register_ftype semantics). next_bottom_frame and tail call - frames unwind the NULL case differently. */ - -struct value * -dwarf2_tailcall_prev_register_first (struct frame_info *this_frame, - void **tailcall_cachep, int regnum) -{ - struct gdbarch *this_gdbarch = get_frame_arch (this_frame); - struct tailcall_cache *cache = (struct tailcall_cache *) *tailcall_cachep; - CORE_ADDR addr; - - if (regnum == gdbarch_pc_regnum (this_gdbarch)) - addr = pretend_pc (this_frame, cache); - else if (cache->prev_sp_p && regnum == gdbarch_sp_regnum (this_gdbarch)) - { - int next_levels = existing_next_levels (this_frame, cache); - - if (next_levels == cache->chain_levels - 1) - addr = cache->prev_sp; - else - addr = dwarf2_frame_cfa (this_frame) - cache->entry_cfa_sp_offset; - } - else - return NULL; - - return frame_unwind_got_address (this_frame, regnum, addr); -} - -/* Implementation of frame_prev_register_ftype for tail call frames. Register - set of virtual tail call frames is assumed to be the one of the top (caller) - frame - assume unchanged register value for NULL from - dwarf2_tailcall_prev_register_first. */ - -static struct value * -tailcall_frame_prev_register (struct frame_info *this_frame, - void **this_cache, int regnum) -{ - struct tailcall_cache *cache = (struct tailcall_cache *) *this_cache; - struct value *val; - - gdb_assert (this_frame != cache->next_bottom_frame); - - val = dwarf2_tailcall_prev_register_first (this_frame, this_cache, regnum); - if (val) - return val; - - return frame_unwind_got_register (this_frame, regnum, regnum); -} - -/* Implementation of frame_sniffer_ftype. It will never find a new chain, use - dwarf2_tailcall_sniffer_first for the bottom (callee) frame. It will find - all the predecessing virtual tail call frames, it will return false when - there exist no more tail call frames in this chain. */ - -static int -tailcall_frame_sniffer (const struct frame_unwind *self, - struct frame_info *this_frame, void **this_cache) -{ - struct frame_info *next_frame; - int next_levels; - struct tailcall_cache *cache; - - if (!dwarf2_frame_unwinders_enabled_p) - return 0; - - /* Inner tail call element does not make sense for a sentinel frame. */ - next_frame = get_next_frame (this_frame); - if (next_frame == NULL) - return 0; - - cache = cache_find (next_frame); - if (cache == NULL) - return 0; - - cache_ref (cache); - - next_levels = existing_next_levels (this_frame, cache); - - /* NEXT_LEVELS is -1 only in dwarf2_tailcall_sniffer_first. */ - gdb_assert (next_levels >= 0); - gdb_assert (next_levels <= cache->chain_levels); - - if (next_levels == cache->chain_levels) - { - cache_unref (cache); - return 0; - } - - *this_cache = cache; - return 1; -} - -/* The initial "sniffer" whether THIS_FRAME is a bottom (callee) frame of a new - chain to create. Keep TAILCALL_CACHEP NULL if it did not find any chain, - initialize it otherwise. No tail call chain is created if there are no - unambiguous virtual tail call frames to report. - - ENTRY_CFA_SP_OFFSETP is NULL if no special SP handling is possible, - otherwise *ENTRY_CFA_SP_OFFSETP is the number of bytes to subtract from tail - call frames frame base to get the SP value there - to simulate return - address pushed on the stack. */ - -void -dwarf2_tailcall_sniffer_first (struct frame_info *this_frame, - void **tailcall_cachep, - const LONGEST *entry_cfa_sp_offsetp) -{ - CORE_ADDR prev_pc = 0, prev_sp = 0; /* GCC warning. */ - int prev_sp_p = 0; - CORE_ADDR this_pc; - struct gdbarch *prev_gdbarch; - struct call_site_chain *chain = NULL; - struct tailcall_cache *cache; - - gdb_assert (*tailcall_cachep == NULL); - - /* PC may be after the function if THIS_FRAME calls noreturn function, - get_frame_address_in_block will decrease it by 1 in such case. */ - this_pc = get_frame_address_in_block (this_frame); - - /* Catch any unwinding errors. */ - try - { - int sp_regnum; - - prev_gdbarch = frame_unwind_arch (this_frame); - - /* Simulate frame_unwind_pc without setting this_frame->prev_pc.p. */ - prev_pc = gdbarch_unwind_pc (prev_gdbarch, this_frame); - - /* call_site_find_chain can throw an exception. */ - chain = call_site_find_chain (prev_gdbarch, prev_pc, this_pc); - - if (entry_cfa_sp_offsetp != NULL) - { - sp_regnum = gdbarch_sp_regnum (prev_gdbarch); - if (sp_regnum != -1) - { - prev_sp = frame_unwind_register_unsigned (this_frame, sp_regnum); - prev_sp_p = 1; - } - } - } - catch (const gdb_exception_error &except) - { - if (entry_values_debug) - exception_print (gdb_stdout, except); - return; - } - - /* Ambiguous unwind or unambiguous unwind verified as matching. */ - if (chain == NULL || chain->length == 0) - { - xfree (chain); - return; - } - - cache = cache_new_ref1 (this_frame); - *tailcall_cachep = cache; - cache->chain = chain; - cache->prev_pc = prev_pc; - cache->chain_levels = pretended_chain_levels (chain); - cache->prev_sp_p = prev_sp_p; - if (cache->prev_sp_p) - { - cache->prev_sp = prev_sp; - cache->entry_cfa_sp_offset = *entry_cfa_sp_offsetp; - } - gdb_assert (cache->chain_levels > 0); -} - -/* Implementation of frame_dealloc_cache_ftype. It can be called even for the - bottom chain frame from dwarf2_frame_dealloc_cache which is not a real - TAILCALL_FRAME. */ - -static void -tailcall_frame_dealloc_cache (struct frame_info *self, void *this_cache) -{ - struct tailcall_cache *cache = (struct tailcall_cache *) this_cache; - - cache_unref (cache); -} - -/* Implementation of frame_prev_arch_ftype. We assume all the virtual tail - call frames have gdbarch of the bottom (callee) frame. */ - -static struct gdbarch * -tailcall_frame_prev_arch (struct frame_info *this_frame, - void **this_prologue_cache) -{ - struct tailcall_cache *cache = (struct tailcall_cache *) *this_prologue_cache; - - return get_frame_arch (cache->next_bottom_frame); -} - -/* Virtual tail call frame unwinder if dwarf2_tailcall_sniffer_first finds - a chain to create. */ - -const struct frame_unwind dwarf2_tailcall_frame_unwind = -{ - TAILCALL_FRAME, - default_frame_unwind_stop_reason, - tailcall_frame_this_id, - tailcall_frame_prev_register, - NULL, - tailcall_frame_sniffer, - tailcall_frame_dealloc_cache, - tailcall_frame_prev_arch -}; - -void -_initialize_tailcall_frame (void) -{ - cache_htab = htab_create_alloc (50, cache_hash, cache_eq, NULL, xcalloc, - xfree); -} diff -Nru gdb-9.1/gdb/dwarf2-frame-tailcall.h gdb-10.2/gdb/dwarf2-frame-tailcall.h --- gdb-9.1/gdb/dwarf2-frame-tailcall.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/dwarf2-frame-tailcall.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,39 +0,0 @@ -/* Definitions for virtual tail call frames unwinder for GDB. - - Copyright (C) 2010-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef DWARF2_FRAME_TAILCALL_H -#define DWARF2_FRAME_TAILCALL_H 1 - -struct frame_info; -struct frame_unwind; - -/* The tail call frame unwinder. */ - -extern void - dwarf2_tailcall_sniffer_first (struct frame_info *this_frame, - void **tailcall_cachep, - const LONGEST *entry_cfa_sp_offsetp); - -extern struct value * - dwarf2_tailcall_prev_register_first (struct frame_info *this_frame, - void **tailcall_cachep, int regnum); - -extern const struct frame_unwind dwarf2_tailcall_frame_unwind; - -#endif /* !DWARF2_FRAME_TAILCALL_H */ diff -Nru gdb-9.1/gdb/dwarf2loc.c gdb-10.2/gdb/dwarf2loc.c --- gdb-9.1/gdb/dwarf2loc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/dwarf2loc.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,4532 +0,0 @@ -/* DWARF 2 location expression support for GDB. - - Copyright (C) 2003-2020 Free Software Foundation, Inc. - - Contributed by Daniel Jacobowitz, MontaVista Software, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "defs.h" -#include "ui-out.h" -#include "value.h" -#include "frame.h" -#include "gdbcore.h" -#include "target.h" -#include "inferior.h" -#include "ax.h" -#include "ax-gdb.h" -#include "regcache.h" -#include "objfiles.h" -#include "block.h" -#include "gdbcmd.h" -#include "complaints.h" -#include "dwarf2.h" -#include "dwarf2expr.h" -#include "dwarf2loc.h" -#include "dwarf2read.h" -#include "dwarf2-frame.h" -#include "compile/compile.h" -#include "gdbsupport/selftest.h" -#include <algorithm> -#include <vector> -#include <unordered_set> -#include "gdbsupport/underlying.h" -#include "gdbsupport/byte-vector.h" - -static struct value *dwarf2_evaluate_loc_desc_full (struct type *type, - struct frame_info *frame, - const gdb_byte *data, - size_t size, - struct dwarf2_per_cu_data *per_cu, - struct type *subobj_type, - LONGEST subobj_byte_offset); - -static struct call_site_parameter *dwarf_expr_reg_to_entry_parameter - (struct frame_info *frame, - enum call_site_parameter_kind kind, - union call_site_parameter_u kind_u, - struct dwarf2_per_cu_data **per_cu_return); - -static struct value *indirect_synthetic_pointer - (sect_offset die, LONGEST byte_offset, - struct dwarf2_per_cu_data *per_cu, - struct frame_info *frame, - struct type *type, bool resolve_abstract_p = false); - -/* Until these have formal names, we define these here. - ref: http://gcc.gnu.org/wiki/DebugFission - Each entry in .debug_loc.dwo begins with a byte that describes the entry, - and is then followed by data specific to that entry. */ - -enum debug_loc_kind -{ - /* Indicates the end of the list of entries. */ - DEBUG_LOC_END_OF_LIST = 0, - - /* This is followed by an unsigned LEB128 number that is an index into - .debug_addr and specifies the base address for all following entries. */ - DEBUG_LOC_BASE_ADDRESS = 1, - - /* This is followed by two unsigned LEB128 numbers that are indices into - .debug_addr and specify the beginning and ending addresses, and then - a normal location expression as in .debug_loc. */ - DEBUG_LOC_START_END = 2, - - /* This is followed by an unsigned LEB128 number that is an index into - .debug_addr and specifies the beginning address, and a 4 byte unsigned - number that specifies the length, and then a normal location expression - as in .debug_loc. */ - DEBUG_LOC_START_LENGTH = 3, - - /* An internal value indicating there is insufficient data. */ - DEBUG_LOC_BUFFER_OVERFLOW = -1, - - /* An internal value indicating an invalid kind of entry was found. */ - DEBUG_LOC_INVALID_ENTRY = -2 -}; - -/* Helper function which throws an error if a synthetic pointer is - invalid. */ - -static void -invalid_synthetic_pointer (void) -{ - error (_("access outside bounds of object " - "referenced via synthetic pointer")); -} - -/* Decode the addresses in a non-dwo .debug_loc entry. - A pointer to the next byte to examine is returned in *NEW_PTR. - The encoded low,high addresses are return in *LOW,*HIGH. - The result indicates the kind of entry found. */ - -static enum debug_loc_kind -decode_debug_loc_addresses (const gdb_byte *loc_ptr, const gdb_byte *buf_end, - const gdb_byte **new_ptr, - CORE_ADDR *low, CORE_ADDR *high, - enum bfd_endian byte_order, - unsigned int addr_size, - int signed_addr_p) -{ - CORE_ADDR base_mask = ~(~(CORE_ADDR)1 << (addr_size * 8 - 1)); - - if (buf_end - loc_ptr < 2 * addr_size) - return DEBUG_LOC_BUFFER_OVERFLOW; - - if (signed_addr_p) - *low = extract_signed_integer (loc_ptr, addr_size, byte_order); - else - *low = extract_unsigned_integer (loc_ptr, addr_size, byte_order); - loc_ptr += addr_size; - - if (signed_addr_p) - *high = extract_signed_integer (loc_ptr, addr_size, byte_order); - else - *high = extract_unsigned_integer (loc_ptr, addr_size, byte_order); - loc_ptr += addr_size; - - *new_ptr = loc_ptr; - - /* A base-address-selection entry. */ - if ((*low & base_mask) == base_mask) - return DEBUG_LOC_BASE_ADDRESS; - - /* An end-of-list entry. */ - if (*low == 0 && *high == 0) - return DEBUG_LOC_END_OF_LIST; - - return DEBUG_LOC_START_END; -} - -/* Decode the addresses in .debug_loclists entry. - A pointer to the next byte to examine is returned in *NEW_PTR. - The encoded low,high addresses are return in *LOW,*HIGH. - The result indicates the kind of entry found. */ - -static enum debug_loc_kind -decode_debug_loclists_addresses (struct dwarf2_per_cu_data *per_cu, - const gdb_byte *loc_ptr, - const gdb_byte *buf_end, - const gdb_byte **new_ptr, - CORE_ADDR *low, CORE_ADDR *high, - enum bfd_endian byte_order, - unsigned int addr_size, - int signed_addr_p) -{ - uint64_t u64; - - if (loc_ptr == buf_end) - return DEBUG_LOC_BUFFER_OVERFLOW; - - switch (*loc_ptr++) - { - case DW_LLE_end_of_list: - *new_ptr = loc_ptr; - return DEBUG_LOC_END_OF_LIST; - case DW_LLE_base_address: - if (loc_ptr + addr_size > buf_end) - return DEBUG_LOC_BUFFER_OVERFLOW; - if (signed_addr_p) - *high = extract_signed_integer (loc_ptr, addr_size, byte_order); - else - *high = extract_unsigned_integer (loc_ptr, addr_size, byte_order); - loc_ptr += addr_size; - *new_ptr = loc_ptr; - return DEBUG_LOC_BASE_ADDRESS; - case DW_LLE_offset_pair: - loc_ptr = gdb_read_uleb128 (loc_ptr, buf_end, &u64); - if (loc_ptr == NULL) - return DEBUG_LOC_BUFFER_OVERFLOW; - *low = u64; - loc_ptr = gdb_read_uleb128 (loc_ptr, buf_end, &u64); - if (loc_ptr == NULL) - return DEBUG_LOC_BUFFER_OVERFLOW; - *high = u64; - *new_ptr = loc_ptr; - return DEBUG_LOC_START_END; - default: - return DEBUG_LOC_INVALID_ENTRY; - } -} - -/* Decode the addresses in .debug_loc.dwo entry. - A pointer to the next byte to examine is returned in *NEW_PTR. - The encoded low,high addresses are return in *LOW,*HIGH. - The result indicates the kind of entry found. */ - -static enum debug_loc_kind -decode_debug_loc_dwo_addresses (struct dwarf2_per_cu_data *per_cu, - const gdb_byte *loc_ptr, - const gdb_byte *buf_end, - const gdb_byte **new_ptr, - CORE_ADDR *low, CORE_ADDR *high, - enum bfd_endian byte_order) -{ - uint64_t low_index, high_index; - - if (loc_ptr == buf_end) - return DEBUG_LOC_BUFFER_OVERFLOW; - - switch (*loc_ptr++) - { - case DW_LLE_GNU_end_of_list_entry: - *new_ptr = loc_ptr; - return DEBUG_LOC_END_OF_LIST; - case DW_LLE_GNU_base_address_selection_entry: - *low = 0; - loc_ptr = gdb_read_uleb128 (loc_ptr, buf_end, &high_index); - if (loc_ptr == NULL) - return DEBUG_LOC_BUFFER_OVERFLOW; - *high = dwarf2_read_addr_index (per_cu, high_index); - *new_ptr = loc_ptr; - return DEBUG_LOC_BASE_ADDRESS; - case DW_LLE_GNU_start_end_entry: - loc_ptr = gdb_read_uleb128 (loc_ptr, buf_end, &low_index); - if (loc_ptr == NULL) - return DEBUG_LOC_BUFFER_OVERFLOW; - *low = dwarf2_read_addr_index (per_cu, low_index); - loc_ptr = gdb_read_uleb128 (loc_ptr, buf_end, &high_index); - if (loc_ptr == NULL) - return DEBUG_LOC_BUFFER_OVERFLOW; - *high = dwarf2_read_addr_index (per_cu, high_index); - *new_ptr = loc_ptr; - return DEBUG_LOC_START_END; - case DW_LLE_GNU_start_length_entry: - loc_ptr = gdb_read_uleb128 (loc_ptr, buf_end, &low_index); - if (loc_ptr == NULL) - return DEBUG_LOC_BUFFER_OVERFLOW; - *low = dwarf2_read_addr_index (per_cu, low_index); - if (loc_ptr + 4 > buf_end) - return DEBUG_LOC_BUFFER_OVERFLOW; - *high = *low; - *high += extract_unsigned_integer (loc_ptr, 4, byte_order); - *new_ptr = loc_ptr + 4; - return DEBUG_LOC_START_LENGTH; - default: - return DEBUG_LOC_INVALID_ENTRY; - } -} - -/* A function for dealing with location lists. Given a - symbol baton (BATON) and a pc value (PC), find the appropriate - location expression, set *LOCEXPR_LENGTH, and return a pointer - to the beginning of the expression. Returns NULL on failure. - - For now, only return the first matching location expression; there - can be more than one in the list. */ - -const gdb_byte * -dwarf2_find_location_expression (struct dwarf2_loclist_baton *baton, - size_t *locexpr_length, CORE_ADDR pc) -{ - struct objfile *objfile = dwarf2_per_cu_objfile (baton->per_cu); - struct gdbarch *gdbarch = get_objfile_arch (objfile); - enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); - unsigned int addr_size = dwarf2_per_cu_addr_size (baton->per_cu); - int signed_addr_p = bfd_get_sign_extend_vma (objfile->obfd); - /* Adjust base_address for relocatable objects. */ - CORE_ADDR base_offset = dwarf2_per_cu_text_offset (baton->per_cu); - CORE_ADDR base_address = baton->base_address + base_offset; - const gdb_byte *loc_ptr, *buf_end; - - loc_ptr = baton->data; - buf_end = baton->data + baton->size; - - while (1) - { - CORE_ADDR low = 0, high = 0; /* init for gcc -Wall */ - int length; - enum debug_loc_kind kind; - const gdb_byte *new_ptr = NULL; /* init for gcc -Wall */ - - if (baton->from_dwo) - kind = decode_debug_loc_dwo_addresses (baton->per_cu, - loc_ptr, buf_end, &new_ptr, - &low, &high, byte_order); - else if (dwarf2_version (baton->per_cu) < 5) - kind = decode_debug_loc_addresses (loc_ptr, buf_end, &new_ptr, - &low, &high, - byte_order, addr_size, - signed_addr_p); - else - kind = decode_debug_loclists_addresses (baton->per_cu, - loc_ptr, buf_end, &new_ptr, - &low, &high, byte_order, - addr_size, signed_addr_p); - - loc_ptr = new_ptr; - switch (kind) - { - case DEBUG_LOC_END_OF_LIST: - *locexpr_length = 0; - return NULL; - case DEBUG_LOC_BASE_ADDRESS: - base_address = high + base_offset; - continue; - case DEBUG_LOC_START_END: - case DEBUG_LOC_START_LENGTH: - break; - case DEBUG_LOC_BUFFER_OVERFLOW: - case DEBUG_LOC_INVALID_ENTRY: - error (_("dwarf2_find_location_expression: " - "Corrupted DWARF expression.")); - default: - gdb_assert_not_reached ("bad debug_loc_kind"); - } - - /* Otherwise, a location expression entry. - If the entry is from a DWO, don't add base address: the entry is from - .debug_addr which already has the DWARF "base address". We still add - base_offset in case we're debugging a PIE executable. */ - if (baton->from_dwo) - { - low += base_offset; - high += base_offset; - } - else - { - low += base_address; - high += base_address; - } - - if (dwarf2_version (baton->per_cu) < 5) - { - length = extract_unsigned_integer (loc_ptr, 2, byte_order); - loc_ptr += 2; - } - else - { - unsigned int bytes_read; - - length = read_unsigned_leb128 (NULL, loc_ptr, &bytes_read); - loc_ptr += bytes_read; - } - - if (low == high && pc == low) - { - /* This is entry PC record present only at entry point - of a function. Verify it is really the function entry point. */ - - const struct block *pc_block = block_for_pc (pc); - struct symbol *pc_func = NULL; - - if (pc_block) - pc_func = block_linkage_function (pc_block); - - if (pc_func && pc == BLOCK_ENTRY_PC (SYMBOL_BLOCK_VALUE (pc_func))) - { - *locexpr_length = length; - return loc_ptr; - } - } - - if (pc >= low && pc < high) - { - *locexpr_length = length; - return loc_ptr; - } - - loc_ptr += length; - } -} - -/* This is the baton used when performing dwarf2 expression - evaluation. */ -struct dwarf_expr_baton -{ - struct frame_info *frame; - struct dwarf2_per_cu_data *per_cu; - CORE_ADDR obj_address; -}; - -/* Implement find_frame_base_location method for LOC_BLOCK functions using - DWARF expression for its DW_AT_frame_base. */ - -static void -locexpr_find_frame_base_location (struct symbol *framefunc, CORE_ADDR pc, - const gdb_byte **start, size_t *length) -{ - struct dwarf2_locexpr_baton *symbaton - = (struct dwarf2_locexpr_baton *) SYMBOL_LOCATION_BATON (framefunc); - - *length = symbaton->size; - *start = symbaton->data; -} - -/* Implement the struct symbol_block_ops::get_frame_base method for - LOC_BLOCK functions using a DWARF expression as its DW_AT_frame_base. */ - -static CORE_ADDR -locexpr_get_frame_base (struct symbol *framefunc, struct frame_info *frame) -{ - struct gdbarch *gdbarch; - struct type *type; - struct dwarf2_locexpr_baton *dlbaton; - const gdb_byte *start; - size_t length; - struct value *result; - - /* If this method is called, then FRAMEFUNC is supposed to be a DWARF block. - Thus, it's supposed to provide the find_frame_base_location method as - well. */ - gdb_assert (SYMBOL_BLOCK_OPS (framefunc)->find_frame_base_location != NULL); - - gdbarch = get_frame_arch (frame); - type = builtin_type (gdbarch)->builtin_data_ptr; - dlbaton = (struct dwarf2_locexpr_baton *) SYMBOL_LOCATION_BATON (framefunc); - - SYMBOL_BLOCK_OPS (framefunc)->find_frame_base_location - (framefunc, get_frame_pc (frame), &start, &length); - result = dwarf2_evaluate_loc_desc (type, frame, start, length, - dlbaton->per_cu); - - /* The DW_AT_frame_base attribute contains a location description which - computes the base address itself. However, the call to - dwarf2_evaluate_loc_desc returns a value representing a variable at - that address. The frame base address is thus this variable's - address. */ - return value_address (result); -} - -/* Vector for inferior functions as represented by LOC_BLOCK, if the inferior - function uses DWARF expression for its DW_AT_frame_base. */ - -const struct symbol_block_ops dwarf2_block_frame_base_locexpr_funcs = -{ - locexpr_find_frame_base_location, - locexpr_get_frame_base -}; - -/* Implement find_frame_base_location method for LOC_BLOCK functions using - DWARF location list for its DW_AT_frame_base. */ - -static void -loclist_find_frame_base_location (struct symbol *framefunc, CORE_ADDR pc, - const gdb_byte **start, size_t *length) -{ - struct dwarf2_loclist_baton *symbaton - = (struct dwarf2_loclist_baton *) SYMBOL_LOCATION_BATON (framefunc); - - *start = dwarf2_find_location_expression (symbaton, length, pc); -} - -/* Implement the struct symbol_block_ops::get_frame_base method for - LOC_BLOCK functions using a DWARF location list as its DW_AT_frame_base. */ - -static CORE_ADDR -loclist_get_frame_base (struct symbol *framefunc, struct frame_info *frame) -{ - struct gdbarch *gdbarch; - struct type *type; - struct dwarf2_loclist_baton *dlbaton; - const gdb_byte *start; - size_t length; - struct value *result; - - /* If this method is called, then FRAMEFUNC is supposed to be a DWARF block. - Thus, it's supposed to provide the find_frame_base_location method as - well. */ - gdb_assert (SYMBOL_BLOCK_OPS (framefunc)->find_frame_base_location != NULL); - - gdbarch = get_frame_arch (frame); - type = builtin_type (gdbarch)->builtin_data_ptr; - dlbaton = (struct dwarf2_loclist_baton *) SYMBOL_LOCATION_BATON (framefunc); - - SYMBOL_BLOCK_OPS (framefunc)->find_frame_base_location - (framefunc, get_frame_pc (frame), &start, &length); - result = dwarf2_evaluate_loc_desc (type, frame, start, length, - dlbaton->per_cu); - - /* The DW_AT_frame_base attribute contains a location description which - computes the base address itself. However, the call to - dwarf2_evaluate_loc_desc returns a value representing a variable at - that address. The frame base address is thus this variable's - address. */ - return value_address (result); -} - -/* Vector for inferior functions as represented by LOC_BLOCK, if the inferior - function uses DWARF location list for its DW_AT_frame_base. */ - -const struct symbol_block_ops dwarf2_block_frame_base_loclist_funcs = -{ - loclist_find_frame_base_location, - loclist_get_frame_base -}; - -/* See dwarf2loc.h. */ - -void -func_get_frame_base_dwarf_block (struct symbol *framefunc, CORE_ADDR pc, - const gdb_byte **start, size_t *length) -{ - if (SYMBOL_BLOCK_OPS (framefunc) != NULL) - { - const struct symbol_block_ops *ops_block = SYMBOL_BLOCK_OPS (framefunc); - - ops_block->find_frame_base_location (framefunc, pc, start, length); - } - else - *length = 0; - - if (*length == 0) - error (_("Could not find the frame base for \"%s\"."), - framefunc->natural_name ()); -} - -static CORE_ADDR -get_frame_pc_for_per_cu_dwarf_call (void *baton) -{ - dwarf_expr_context *ctx = (dwarf_expr_context *) baton; - - return ctx->get_frame_pc (); -} - -static void -per_cu_dwarf_call (struct dwarf_expr_context *ctx, cu_offset die_offset, - struct dwarf2_per_cu_data *per_cu) -{ - struct dwarf2_locexpr_baton block; - - block = dwarf2_fetch_die_loc_cu_off (die_offset, per_cu, - get_frame_pc_for_per_cu_dwarf_call, - ctx); - - /* DW_OP_call_ref is currently not supported. */ - gdb_assert (block.per_cu == per_cu); - - ctx->eval (block.data, block.size); -} - -/* Given context CTX, section offset SECT_OFF, and compilation unit - data PER_CU, execute the "variable value" operation on the DIE - found at SECT_OFF. */ - -static struct value * -sect_variable_value (struct dwarf_expr_context *ctx, sect_offset sect_off, - struct dwarf2_per_cu_data *per_cu) -{ - struct type *die_type = dwarf2_fetch_die_type_sect_off (sect_off, per_cu); - - if (die_type == NULL) - error (_("Bad DW_OP_GNU_variable_value DIE.")); - - /* Note: Things still work when the following test is removed. This - test and error is here to conform to the proposed specification. */ - if (TYPE_CODE (die_type) != TYPE_CODE_INT - && TYPE_CODE (die_type) != TYPE_CODE_PTR) - error (_("Type of DW_OP_GNU_variable_value DIE must be an integer or pointer.")); - - struct type *type = lookup_pointer_type (die_type); - struct frame_info *frame = get_selected_frame (_("No frame selected.")); - return indirect_synthetic_pointer (sect_off, 0, per_cu, frame, type, true); -} - -class dwarf_evaluate_loc_desc : public dwarf_expr_context -{ - public: - - struct frame_info *frame; - struct dwarf2_per_cu_data *per_cu; - CORE_ADDR obj_address; - - /* Helper function for dwarf2_evaluate_loc_desc. Computes the CFA for - the frame in BATON. */ - - CORE_ADDR get_frame_cfa () override - { - return dwarf2_frame_cfa (frame); - } - - /* Helper function for dwarf2_evaluate_loc_desc. Computes the PC for - the frame in BATON. */ - - CORE_ADDR get_frame_pc () override - { - return get_frame_address_in_block (frame); - } - - /* Using the objfile specified in BATON, find the address for the - current thread's thread-local storage with offset OFFSET. */ - CORE_ADDR get_tls_address (CORE_ADDR offset) override - { - struct objfile *objfile = dwarf2_per_cu_objfile (per_cu); - - return target_translate_tls_address (objfile, offset); - } - - /* Helper interface of per_cu_dwarf_call for - dwarf2_evaluate_loc_desc. */ - - void dwarf_call (cu_offset die_offset) override - { - per_cu_dwarf_call (this, die_offset, per_cu); - } - - /* Helper interface of sect_variable_value for - dwarf2_evaluate_loc_desc. */ - - struct value *dwarf_variable_value (sect_offset sect_off) override - { - return sect_variable_value (this, sect_off, per_cu); - } - - struct type *get_base_type (cu_offset die_offset, int size) override - { - struct type *result = dwarf2_get_die_type (die_offset, per_cu); - if (result == NULL) - error (_("Could not find type for DW_OP_const_type")); - if (size != 0 && TYPE_LENGTH (result) != size) - error (_("DW_OP_const_type has different sizes for type and data")); - return result; - } - - /* Callback function for dwarf2_evaluate_loc_desc. - Fetch the address indexed by DW_OP_addrx or DW_OP_GNU_addr_index. */ - - CORE_ADDR get_addr_index (unsigned int index) override - { - return dwarf2_read_addr_index (per_cu, index); - } - - /* Callback function for get_object_address. Return the address of the VLA - object. */ - - CORE_ADDR get_object_address () override - { - if (obj_address == 0) - error (_("Location address is not set.")); - return obj_address; - } - - /* Execute DWARF block of call_site_parameter which matches KIND and - KIND_U. Choose DEREF_SIZE value of that parameter. Search - caller of this objects's frame. - - The caller can be from a different CU - per_cu_dwarf_call - implementation can be more simple as it does not support cross-CU - DWARF executions. */ - - void push_dwarf_reg_entry_value (enum call_site_parameter_kind kind, - union call_site_parameter_u kind_u, - int deref_size) override - { - struct frame_info *caller_frame; - struct dwarf2_per_cu_data *caller_per_cu; - struct call_site_parameter *parameter; - const gdb_byte *data_src; - size_t size; - - caller_frame = get_prev_frame (frame); - - parameter = dwarf_expr_reg_to_entry_parameter (frame, kind, kind_u, - &caller_per_cu); - data_src = deref_size == -1 ? parameter->value : parameter->data_value; - size = deref_size == -1 ? parameter->value_size : parameter->data_value_size; - - /* DEREF_SIZE size is not verified here. */ - if (data_src == NULL) - throw_error (NO_ENTRY_VALUE_ERROR, - _("Cannot resolve DW_AT_call_data_value")); - - scoped_restore save_frame = make_scoped_restore (&this->frame, - caller_frame); - scoped_restore save_per_cu = make_scoped_restore (&this->per_cu, - caller_per_cu); - scoped_restore save_obj_addr = make_scoped_restore (&this->obj_address, - (CORE_ADDR) 0); - - scoped_restore save_arch = make_scoped_restore (&this->gdbarch); - this->gdbarch - = get_objfile_arch (dwarf2_per_cu_objfile (per_cu)); - scoped_restore save_addr_size = make_scoped_restore (&this->addr_size); - this->addr_size = dwarf2_per_cu_addr_size (per_cu); - scoped_restore save_offset = make_scoped_restore (&this->offset); - this->offset = dwarf2_per_cu_text_offset (per_cu); - - this->eval (data_src, size); - } - - /* Using the frame specified in BATON, find the location expression - describing the frame base. Return a pointer to it in START and - its length in LENGTH. */ - void get_frame_base (const gdb_byte **start, size_t * length) override - { - /* FIXME: cagney/2003-03-26: This code should be using - get_frame_base_address(), and then implement a dwarf2 specific - this_base method. */ - struct symbol *framefunc; - const struct block *bl = get_frame_block (frame, NULL); - - if (bl == NULL) - error (_("frame address is not available.")); - - /* Use block_linkage_function, which returns a real (not inlined) - function, instead of get_frame_function, which may return an - inlined function. */ - framefunc = block_linkage_function (bl); - - /* If we found a frame-relative symbol then it was certainly within - some function associated with a frame. If we can't find the frame, - something has gone wrong. */ - gdb_assert (framefunc != NULL); - - func_get_frame_base_dwarf_block (framefunc, - get_frame_address_in_block (frame), - start, length); - } - - /* Read memory at ADDR (length LEN) into BUF. */ - - void read_mem (gdb_byte *buf, CORE_ADDR addr, size_t len) override - { - read_memory (addr, buf, len); - } - - /* Using the frame specified in BATON, return the value of register - REGNUM, treated as a pointer. */ - CORE_ADDR read_addr_from_reg (int dwarf_regnum) override - { - struct gdbarch *gdbarch = get_frame_arch (frame); - int regnum = dwarf_reg_to_regnum_or_error (gdbarch, dwarf_regnum); - - return address_from_register (regnum, frame); - } - - /* Implement "get_reg_value" callback. */ - - struct value *get_reg_value (struct type *type, int dwarf_regnum) override - { - struct gdbarch *gdbarch = get_frame_arch (frame); - int regnum = dwarf_reg_to_regnum_or_error (gdbarch, dwarf_regnum); - - return value_from_register (type, regnum, frame); - } -}; - -/* See dwarf2loc.h. */ - -unsigned int entry_values_debug = 0; - -/* Helper to set entry_values_debug. */ - -static void -show_entry_values_debug (struct ui_file *file, int from_tty, - struct cmd_list_element *c, const char *value) -{ - fprintf_filtered (file, - _("Entry values and tail call frames debugging is %s.\n"), - value); -} - -/* Find DW_TAG_call_site's DW_AT_call_target address. - CALLER_FRAME (for registers) can be NULL if it is not known. This function - always returns valid address or it throws NO_ENTRY_VALUE_ERROR. */ - -static CORE_ADDR -call_site_to_target_addr (struct gdbarch *call_site_gdbarch, - struct call_site *call_site, - struct frame_info *caller_frame) -{ - switch (FIELD_LOC_KIND (call_site->target)) - { - case FIELD_LOC_KIND_DWARF_BLOCK: - { - struct dwarf2_locexpr_baton *dwarf_block; - struct value *val; - struct type *caller_core_addr_type; - struct gdbarch *caller_arch; - - dwarf_block = FIELD_DWARF_BLOCK (call_site->target); - if (dwarf_block == NULL) - { - struct bound_minimal_symbol msym; - - msym = lookup_minimal_symbol_by_pc (call_site->pc - 1); - throw_error (NO_ENTRY_VALUE_ERROR, - _("DW_AT_call_target is not specified at %s in %s"), - paddress (call_site_gdbarch, call_site->pc), - (msym.minsym == NULL ? "???" - : msym.minsym->print_name ())); - - } - if (caller_frame == NULL) - { - struct bound_minimal_symbol msym; - - msym = lookup_minimal_symbol_by_pc (call_site->pc - 1); - throw_error (NO_ENTRY_VALUE_ERROR, - _("DW_AT_call_target DWARF block resolving " - "requires known frame which is currently not " - "available at %s in %s"), - paddress (call_site_gdbarch, call_site->pc), - (msym.minsym == NULL ? "???" - : msym.minsym->print_name ())); - - } - caller_arch = get_frame_arch (caller_frame); - caller_core_addr_type = builtin_type (caller_arch)->builtin_func_ptr; - val = dwarf2_evaluate_loc_desc (caller_core_addr_type, caller_frame, - dwarf_block->data, dwarf_block->size, - dwarf_block->per_cu); - /* DW_AT_call_target is a DWARF expression, not a DWARF location. */ - if (VALUE_LVAL (val) == lval_memory) - return value_address (val); - else - return value_as_address (val); - } - - case FIELD_LOC_KIND_PHYSNAME: - { - const char *physname; - struct bound_minimal_symbol msym; - - physname = FIELD_STATIC_PHYSNAME (call_site->target); - - /* Handle both the mangled and demangled PHYSNAME. */ - msym = lookup_minimal_symbol (physname, NULL, NULL); - if (msym.minsym == NULL) - { - msym = lookup_minimal_symbol_by_pc (call_site->pc - 1); - throw_error (NO_ENTRY_VALUE_ERROR, - _("Cannot find function \"%s\" for a call site target " - "at %s in %s"), - physname, paddress (call_site_gdbarch, call_site->pc), - (msym.minsym == NULL ? "???" - : msym.minsym->print_name ())); - - } - return BMSYMBOL_VALUE_ADDRESS (msym); - } - - case FIELD_LOC_KIND_PHYSADDR: - return FIELD_STATIC_PHYSADDR (call_site->target); - - default: - internal_error (__FILE__, __LINE__, _("invalid call site target kind")); - } -} - -/* Convert function entry point exact address ADDR to the function which is - compliant with TAIL_CALL_LIST_COMPLETE condition. Throw - NO_ENTRY_VALUE_ERROR otherwise. */ - -static struct symbol * -func_addr_to_tail_call_list (struct gdbarch *gdbarch, CORE_ADDR addr) -{ - struct symbol *sym = find_pc_function (addr); - struct type *type; - - if (sym == NULL || BLOCK_ENTRY_PC (SYMBOL_BLOCK_VALUE (sym)) != addr) - throw_error (NO_ENTRY_VALUE_ERROR, - _("DW_TAG_call_site resolving failed to find function " - "name for address %s"), - paddress (gdbarch, addr)); - - type = SYMBOL_TYPE (sym); - gdb_assert (TYPE_CODE (type) == TYPE_CODE_FUNC); - gdb_assert (TYPE_SPECIFIC_FIELD (type) == TYPE_SPECIFIC_FUNC); - - return sym; -} - -/* Verify function with entry point exact address ADDR can never call itself - via its tail calls (incl. transitively). Throw NO_ENTRY_VALUE_ERROR if it - can call itself via tail calls. - - If a funtion can tail call itself its entry value based parameters are - unreliable. There is no verification whether the value of some/all - parameters is unchanged through the self tail call, we expect if there is - a self tail call all the parameters can be modified. */ - -static void -func_verify_no_selftailcall (struct gdbarch *gdbarch, CORE_ADDR verify_addr) -{ - CORE_ADDR addr; - - /* The verification is completely unordered. Track here function addresses - which still need to be iterated. */ - std::vector<CORE_ADDR> todo; - - /* Track here CORE_ADDRs which were already visited. */ - std::unordered_set<CORE_ADDR> addr_hash; - - todo.push_back (verify_addr); - while (!todo.empty ()) - { - struct symbol *func_sym; - struct call_site *call_site; - - addr = todo.back (); - todo.pop_back (); - - func_sym = func_addr_to_tail_call_list (gdbarch, addr); - - for (call_site = TYPE_TAIL_CALL_LIST (SYMBOL_TYPE (func_sym)); - call_site; call_site = call_site->tail_call_next) - { - CORE_ADDR target_addr; - - /* CALLER_FRAME with registers is not available for tail-call jumped - frames. */ - target_addr = call_site_to_target_addr (gdbarch, call_site, NULL); - - if (target_addr == verify_addr) - { - struct bound_minimal_symbol msym; - - msym = lookup_minimal_symbol_by_pc (verify_addr); - throw_error (NO_ENTRY_VALUE_ERROR, - _("DW_OP_entry_value resolving has found " - "function \"%s\" at %s can call itself via tail " - "calls"), - (msym.minsym == NULL ? "???" - : msym.minsym->print_name ()), - paddress (gdbarch, verify_addr)); - } - - if (addr_hash.insert (target_addr).second) - todo.push_back (target_addr); - } - } -} - -/* Print user readable form of CALL_SITE->PC to gdb_stdlog. Used only for - ENTRY_VALUES_DEBUG. */ - -static void -tailcall_dump (struct gdbarch *gdbarch, const struct call_site *call_site) -{ - CORE_ADDR addr = call_site->pc; - struct bound_minimal_symbol msym = lookup_minimal_symbol_by_pc (addr - 1); - - fprintf_unfiltered (gdb_stdlog, " %s(%s)", paddress (gdbarch, addr), - (msym.minsym == NULL ? "???" - : msym.minsym->print_name ())); - -} - -/* Intersect RESULTP with CHAIN to keep RESULTP unambiguous, keep in RESULTP - only top callers and bottom callees which are present in both. GDBARCH is - used only for ENTRY_VALUES_DEBUG. RESULTP is NULL after return if there are - no remaining possibilities to provide unambiguous non-trivial result. - RESULTP should point to NULL on the first (initialization) call. Caller is - responsible for xfree of any RESULTP data. */ - -static void -chain_candidate (struct gdbarch *gdbarch, - gdb::unique_xmalloc_ptr<struct call_site_chain> *resultp, - std::vector<struct call_site *> *chain) -{ - long length = chain->size (); - int callers, callees, idx; - - if (*resultp == NULL) - { - /* Create the initial chain containing all the passed PCs. */ - - struct call_site_chain *result - = ((struct call_site_chain *) - xmalloc (sizeof (*result) - + sizeof (*result->call_site) * (length - 1))); - result->length = length; - result->callers = result->callees = length; - if (!chain->empty ()) - memcpy (result->call_site, chain->data (), - sizeof (*result->call_site) * length); - resultp->reset (result); - - if (entry_values_debug) - { - fprintf_unfiltered (gdb_stdlog, "tailcall: initial:"); - for (idx = 0; idx < length; idx++) - tailcall_dump (gdbarch, result->call_site[idx]); - fputc_unfiltered ('\n', gdb_stdlog); - } - - return; - } - - if (entry_values_debug) - { - fprintf_unfiltered (gdb_stdlog, "tailcall: compare:"); - for (idx = 0; idx < length; idx++) - tailcall_dump (gdbarch, chain->at (idx)); - fputc_unfiltered ('\n', gdb_stdlog); - } - - /* Intersect callers. */ - - callers = std::min ((long) (*resultp)->callers, length); - for (idx = 0; idx < callers; idx++) - if ((*resultp)->call_site[idx] != chain->at (idx)) - { - (*resultp)->callers = idx; - break; - } - - /* Intersect callees. */ - - callees = std::min ((long) (*resultp)->callees, length); - for (idx = 0; idx < callees; idx++) - if ((*resultp)->call_site[(*resultp)->length - 1 - idx] - != chain->at (length - 1 - idx)) - { - (*resultp)->callees = idx; - break; - } - - if (entry_values_debug) - { - fprintf_unfiltered (gdb_stdlog, "tailcall: reduced:"); - for (idx = 0; idx < (*resultp)->callers; idx++) - tailcall_dump (gdbarch, (*resultp)->call_site[idx]); - fputs_unfiltered (" |", gdb_stdlog); - for (idx = 0; idx < (*resultp)->callees; idx++) - tailcall_dump (gdbarch, - (*resultp)->call_site[(*resultp)->length - - (*resultp)->callees + idx]); - fputc_unfiltered ('\n', gdb_stdlog); - } - - if ((*resultp)->callers == 0 && (*resultp)->callees == 0) - { - /* There are no common callers or callees. It could be also a direct - call (which has length 0) with ambiguous possibility of an indirect - call - CALLERS == CALLEES == 0 is valid during the first allocation - but any subsequence processing of such entry means ambiguity. */ - resultp->reset (NULL); - return; - } - - /* See call_site_find_chain_1 why there is no way to reach the bottom callee - PC again. In such case there must be two different code paths to reach - it. CALLERS + CALLEES equal to LENGTH in the case of self tail-call. */ - gdb_assert ((*resultp)->callers + (*resultp)->callees <= (*resultp)->length); -} - -/* Create and return call_site_chain for CALLER_PC and CALLEE_PC. All the - assumed frames between them use GDBARCH. Use depth first search so we can - keep single CHAIN of call_site's back to CALLER_PC. Function recursion - would have needless GDB stack overhead. Caller is responsible for xfree of - the returned result. Any unreliability results in thrown - NO_ENTRY_VALUE_ERROR. */ - -static struct call_site_chain * -call_site_find_chain_1 (struct gdbarch *gdbarch, CORE_ADDR caller_pc, - CORE_ADDR callee_pc) -{ - CORE_ADDR save_callee_pc = callee_pc; - gdb::unique_xmalloc_ptr<struct call_site_chain> retval; - struct call_site *call_site; - - /* CHAIN contains only the intermediate CALL_SITEs. Neither CALLER_PC's - call_site nor any possible call_site at CALLEE_PC's function is there. - Any CALL_SITE in CHAIN will be iterated to its siblings - via - TAIL_CALL_NEXT. This is inappropriate for CALLER_PC's call_site. */ - std::vector<struct call_site *> chain; - - /* We are not interested in the specific PC inside the callee function. */ - callee_pc = get_pc_function_start (callee_pc); - if (callee_pc == 0) - throw_error (NO_ENTRY_VALUE_ERROR, _("Unable to find function for PC %s"), - paddress (gdbarch, save_callee_pc)); - - /* Mark CALL_SITEs so we do not visit the same ones twice. */ - std::unordered_set<CORE_ADDR> addr_hash; - - /* Do not push CALL_SITE to CHAIN. Push there only the first tail call site - at the target's function. All the possible tail call sites in the - target's function will get iterated as already pushed into CHAIN via their - TAIL_CALL_NEXT. */ - call_site = call_site_for_pc (gdbarch, caller_pc); - - while (call_site) - { - CORE_ADDR target_func_addr; - struct call_site *target_call_site; - - /* CALLER_FRAME with registers is not available for tail-call jumped - frames. */ - target_func_addr = call_site_to_target_addr (gdbarch, call_site, NULL); - - if (target_func_addr == callee_pc) - { - chain_candidate (gdbarch, &retval, &chain); - if (retval == NULL) - break; - - /* There is no way to reach CALLEE_PC again as we would prevent - entering it twice as being already marked in ADDR_HASH. */ - target_call_site = NULL; - } - else - { - struct symbol *target_func; - - target_func = func_addr_to_tail_call_list (gdbarch, target_func_addr); - target_call_site = TYPE_TAIL_CALL_LIST (SYMBOL_TYPE (target_func)); - } - - do - { - /* Attempt to visit TARGET_CALL_SITE. */ - - if (target_call_site) - { - if (addr_hash.insert (target_call_site->pc).second) - { - /* Successfully entered TARGET_CALL_SITE. */ - - chain.push_back (target_call_site); - break; - } - } - - /* Backtrack (without revisiting the originating call_site). Try the - callers's sibling; if there isn't any try the callers's callers's - sibling etc. */ - - target_call_site = NULL; - while (!chain.empty ()) - { - call_site = chain.back (); - chain.pop_back (); - - size_t removed = addr_hash.erase (call_site->pc); - gdb_assert (removed == 1); - - target_call_site = call_site->tail_call_next; - if (target_call_site) - break; - } - } - while (target_call_site); - - if (chain.empty ()) - call_site = NULL; - else - call_site = chain.back (); - } - - if (retval == NULL) - { - struct bound_minimal_symbol msym_caller, msym_callee; - - msym_caller = lookup_minimal_symbol_by_pc (caller_pc); - msym_callee = lookup_minimal_symbol_by_pc (callee_pc); - throw_error (NO_ENTRY_VALUE_ERROR, - _("There are no unambiguously determinable intermediate " - "callers or callees between caller function \"%s\" at %s " - "and callee function \"%s\" at %s"), - (msym_caller.minsym == NULL - ? "???" : msym_caller.minsym->print_name ()), - paddress (gdbarch, caller_pc), - (msym_callee.minsym == NULL - ? "???" : msym_callee.minsym->print_name ()), - paddress (gdbarch, callee_pc)); - } - - return retval.release (); -} - -/* Create and return call_site_chain for CALLER_PC and CALLEE_PC. All the - assumed frames between them use GDBARCH. If valid call_site_chain cannot be - constructed return NULL. Caller is responsible for xfree of the returned - result. */ - -struct call_site_chain * -call_site_find_chain (struct gdbarch *gdbarch, CORE_ADDR caller_pc, - CORE_ADDR callee_pc) -{ - struct call_site_chain *retval = NULL; - - try - { - retval = call_site_find_chain_1 (gdbarch, caller_pc, callee_pc); - } - catch (const gdb_exception_error &e) - { - if (e.error == NO_ENTRY_VALUE_ERROR) - { - if (entry_values_debug) - exception_print (gdb_stdout, e); - - return NULL; - } - else - throw; - } - - return retval; -} - -/* Return 1 if KIND and KIND_U match PARAMETER. Return 0 otherwise. */ - -static int -call_site_parameter_matches (struct call_site_parameter *parameter, - enum call_site_parameter_kind kind, - union call_site_parameter_u kind_u) -{ - if (kind == parameter->kind) - switch (kind) - { - case CALL_SITE_PARAMETER_DWARF_REG: - return kind_u.dwarf_reg == parameter->u.dwarf_reg; - case CALL_SITE_PARAMETER_FB_OFFSET: - return kind_u.fb_offset == parameter->u.fb_offset; - case CALL_SITE_PARAMETER_PARAM_OFFSET: - return kind_u.param_cu_off == parameter->u.param_cu_off; - } - return 0; -} - -/* Fetch call_site_parameter from caller matching KIND and KIND_U. - FRAME is for callee. - - Function always returns non-NULL, it throws NO_ENTRY_VALUE_ERROR - otherwise. */ - -static struct call_site_parameter * -dwarf_expr_reg_to_entry_parameter (struct frame_info *frame, - enum call_site_parameter_kind kind, - union call_site_parameter_u kind_u, - struct dwarf2_per_cu_data **per_cu_return) -{ - CORE_ADDR func_addr, caller_pc; - struct gdbarch *gdbarch; - struct frame_info *caller_frame; - struct call_site *call_site; - int iparams; - /* Initialize it just to avoid a GCC false warning. */ - struct call_site_parameter *parameter = NULL; - CORE_ADDR target_addr; - - while (get_frame_type (frame) == INLINE_FRAME) - { - frame = get_prev_frame (frame); - gdb_assert (frame != NULL); - } - - func_addr = get_frame_func (frame); - gdbarch = get_frame_arch (frame); - caller_frame = get_prev_frame (frame); - if (gdbarch != frame_unwind_arch (frame)) - { - struct bound_minimal_symbol msym - = lookup_minimal_symbol_by_pc (func_addr); - struct gdbarch *caller_gdbarch = frame_unwind_arch (frame); - - throw_error (NO_ENTRY_VALUE_ERROR, - _("DW_OP_entry_value resolving callee gdbarch %s " - "(of %s (%s)) does not match caller gdbarch %s"), - gdbarch_bfd_arch_info (gdbarch)->printable_name, - paddress (gdbarch, func_addr), - (msym.minsym == NULL ? "???" - : msym.minsym->print_name ()), - gdbarch_bfd_arch_info (caller_gdbarch)->printable_name); - } - - if (caller_frame == NULL) - { - struct bound_minimal_symbol msym - = lookup_minimal_symbol_by_pc (func_addr); - - throw_error (NO_ENTRY_VALUE_ERROR, _("DW_OP_entry_value resolving " - "requires caller of %s (%s)"), - paddress (gdbarch, func_addr), - (msym.minsym == NULL ? "???" - : msym.minsym->print_name ())); - } - caller_pc = get_frame_pc (caller_frame); - call_site = call_site_for_pc (gdbarch, caller_pc); - - target_addr = call_site_to_target_addr (gdbarch, call_site, caller_frame); - if (target_addr != func_addr) - { - struct minimal_symbol *target_msym, *func_msym; - - target_msym = lookup_minimal_symbol_by_pc (target_addr).minsym; - func_msym = lookup_minimal_symbol_by_pc (func_addr).minsym; - throw_error (NO_ENTRY_VALUE_ERROR, - _("DW_OP_entry_value resolving expects callee %s at %s " - "but the called frame is for %s at %s"), - (target_msym == NULL ? "???" - : target_msym->print_name ()), - paddress (gdbarch, target_addr), - func_msym == NULL ? "???" : func_msym->print_name (), - paddress (gdbarch, func_addr)); - } - - /* No entry value based parameters would be reliable if this function can - call itself via tail calls. */ - func_verify_no_selftailcall (gdbarch, func_addr); - - for (iparams = 0; iparams < call_site->parameter_count; iparams++) - { - parameter = &call_site->parameter[iparams]; - if (call_site_parameter_matches (parameter, kind, kind_u)) - break; - } - if (iparams == call_site->parameter_count) - { - struct minimal_symbol *msym - = lookup_minimal_symbol_by_pc (caller_pc).minsym; - - /* DW_TAG_call_site_parameter will be missing just if GCC could not - determine its value. */ - throw_error (NO_ENTRY_VALUE_ERROR, _("Cannot find matching parameter " - "at DW_TAG_call_site %s at %s"), - paddress (gdbarch, caller_pc), - msym == NULL ? "???" : msym->print_name ()); - } - - *per_cu_return = call_site->per_cu; - return parameter; -} - -/* Return value for PARAMETER matching DEREF_SIZE. If DEREF_SIZE is -1, return - the normal DW_AT_call_value block. Otherwise return the - DW_AT_call_data_value (dereferenced) block. - - TYPE and CALLER_FRAME specify how to evaluate the DWARF block into returned - struct value. - - Function always returns non-NULL, non-optimized out value. It throws - NO_ENTRY_VALUE_ERROR if it cannot resolve the value for any reason. */ - -static struct value * -dwarf_entry_parameter_to_value (struct call_site_parameter *parameter, - CORE_ADDR deref_size, struct type *type, - struct frame_info *caller_frame, - struct dwarf2_per_cu_data *per_cu) -{ - const gdb_byte *data_src; - gdb_byte *data; - size_t size; - - data_src = deref_size == -1 ? parameter->value : parameter->data_value; - size = deref_size == -1 ? parameter->value_size : parameter->data_value_size; - - /* DEREF_SIZE size is not verified here. */ - if (data_src == NULL) - throw_error (NO_ENTRY_VALUE_ERROR, - _("Cannot resolve DW_AT_call_data_value")); - - /* DW_AT_call_value is a DWARF expression, not a DWARF - location. Postprocessing of DWARF_VALUE_MEMORY would lose the type from - DWARF block. */ - data = (gdb_byte *) alloca (size + 1); - memcpy (data, data_src, size); - data[size] = DW_OP_stack_value; - - return dwarf2_evaluate_loc_desc (type, caller_frame, data, size + 1, per_cu); -} - -/* VALUE must be of type lval_computed with entry_data_value_funcs. Perform - the indirect method on it, that is use its stored target value, the sole - purpose of entry_data_value_funcs.. */ - -static struct value * -entry_data_value_coerce_ref (const struct value *value) -{ - struct type *checked_type = check_typedef (value_type (value)); - struct value *target_val; - - if (!TYPE_IS_REFERENCE (checked_type)) - return NULL; - - target_val = (struct value *) value_computed_closure (value); - value_incref (target_val); - return target_val; -} - -/* Implement copy_closure. */ - -static void * -entry_data_value_copy_closure (const struct value *v) -{ - struct value *target_val = (struct value *) value_computed_closure (v); - - value_incref (target_val); - return target_val; -} - -/* Implement free_closure. */ - -static void -entry_data_value_free_closure (struct value *v) -{ - struct value *target_val = (struct value *) value_computed_closure (v); - - value_decref (target_val); -} - -/* Vector for methods for an entry value reference where the referenced value - is stored in the caller. On the first dereference use - DW_AT_call_data_value in the caller. */ - -static const struct lval_funcs entry_data_value_funcs = -{ - NULL, /* read */ - NULL, /* write */ - NULL, /* indirect */ - entry_data_value_coerce_ref, - NULL, /* check_synthetic_pointer */ - entry_data_value_copy_closure, - entry_data_value_free_closure -}; - -/* Read parameter of TYPE at (callee) FRAME's function entry. KIND and KIND_U - are used to match DW_AT_location at the caller's - DW_TAG_call_site_parameter. - - Function always returns non-NULL value. It throws NO_ENTRY_VALUE_ERROR if it - cannot resolve the parameter for any reason. */ - -static struct value * -value_of_dwarf_reg_entry (struct type *type, struct frame_info *frame, - enum call_site_parameter_kind kind, - union call_site_parameter_u kind_u) -{ - struct type *checked_type = check_typedef (type); - struct type *target_type = TYPE_TARGET_TYPE (checked_type); - struct frame_info *caller_frame = get_prev_frame (frame); - struct value *outer_val, *target_val, *val; - struct call_site_parameter *parameter; - struct dwarf2_per_cu_data *caller_per_cu; - - parameter = dwarf_expr_reg_to_entry_parameter (frame, kind, kind_u, - &caller_per_cu); - - outer_val = dwarf_entry_parameter_to_value (parameter, -1 /* deref_size */, - type, caller_frame, - caller_per_cu); - - /* Check if DW_AT_call_data_value cannot be used. If it should be - used and it is not available do not fall back to OUTER_VAL - dereferencing - TYPE_CODE_REF with non-entry data value would give current value - not the - entry value. */ - - if (!TYPE_IS_REFERENCE (checked_type) - || TYPE_TARGET_TYPE (checked_type) == NULL) - return outer_val; - - target_val = dwarf_entry_parameter_to_value (parameter, - TYPE_LENGTH (target_type), - target_type, caller_frame, - caller_per_cu); - - val = allocate_computed_value (type, &entry_data_value_funcs, - release_value (target_val).release ()); - - /* Copy the referencing pointer to the new computed value. */ - memcpy (value_contents_raw (val), value_contents_raw (outer_val), - TYPE_LENGTH (checked_type)); - set_value_lazy (val, 0); - - return val; -} - -/* Read parameter of TYPE at (callee) FRAME's function entry. DATA and - SIZE are DWARF block used to match DW_AT_location at the caller's - DW_TAG_call_site_parameter. - - Function always returns non-NULL value. It throws NO_ENTRY_VALUE_ERROR if it - cannot resolve the parameter for any reason. */ - -static struct value * -value_of_dwarf_block_entry (struct type *type, struct frame_info *frame, - const gdb_byte *block, size_t block_len) -{ - union call_site_parameter_u kind_u; - - kind_u.dwarf_reg = dwarf_block_to_dwarf_reg (block, block + block_len); - if (kind_u.dwarf_reg != -1) - return value_of_dwarf_reg_entry (type, frame, CALL_SITE_PARAMETER_DWARF_REG, - kind_u); - - if (dwarf_block_to_fb_offset (block, block + block_len, &kind_u.fb_offset)) - return value_of_dwarf_reg_entry (type, frame, CALL_SITE_PARAMETER_FB_OFFSET, - kind_u); - - /* This can normally happen - throw NO_ENTRY_VALUE_ERROR to get the message - suppressed during normal operation. The expression can be arbitrary if - there is no caller-callee entry value binding expected. */ - throw_error (NO_ENTRY_VALUE_ERROR, - _("DWARF-2 expression error: DW_OP_entry_value is supported " - "only for single DW_OP_reg* or for DW_OP_fbreg(*)")); -} - -struct piece_closure -{ - /* Reference count. */ - int refc = 0; - - /* The CU from which this closure's expression came. */ - struct dwarf2_per_cu_data *per_cu = NULL; - - /* The pieces describing this variable. */ - std::vector<dwarf_expr_piece> pieces; - - /* Frame ID of frame to which a register value is relative, used - only by DWARF_VALUE_REGISTER. */ - struct frame_id frame_id; -}; - -/* Allocate a closure for a value formed from separately-described - PIECES. */ - -static struct piece_closure * -allocate_piece_closure (struct dwarf2_per_cu_data *per_cu, - std::vector<dwarf_expr_piece> &&pieces, - struct frame_info *frame) -{ - struct piece_closure *c = new piece_closure; - - c->refc = 1; - c->per_cu = per_cu; - c->pieces = std::move (pieces); - if (frame == NULL) - c->frame_id = null_frame_id; - else - c->frame_id = get_frame_id (frame); - - for (dwarf_expr_piece &piece : c->pieces) - if (piece.location == DWARF_VALUE_STACK) - value_incref (piece.v.value); - - return c; -} - -/* Return the number of bytes overlapping a contiguous chunk of N_BITS - bits whose first bit is located at bit offset START. */ - -static size_t -bits_to_bytes (ULONGEST start, ULONGEST n_bits) -{ - return (start % 8 + n_bits + 7) / 8; -} - -/* Read or write a pieced value V. If FROM != NULL, operate in "write - mode": copy FROM into the pieces comprising V. If FROM == NULL, - operate in "read mode": fetch the contents of the (lazy) value V by - composing it from its pieces. */ - -static void -rw_pieced_value (struct value *v, struct value *from) -{ - int i; - LONGEST offset = 0, max_offset; - ULONGEST bits_to_skip; - gdb_byte *v_contents; - const gdb_byte *from_contents; - struct piece_closure *c - = (struct piece_closure *) value_computed_closure (v); - gdb::byte_vector buffer; - bool bits_big_endian = type_byte_order (value_type (v)) == BFD_ENDIAN_BIG; - - if (from != NULL) - { - from_contents = value_contents (from); - v_contents = NULL; - } - else - { - if (value_type (v) != value_enclosing_type (v)) - internal_error (__FILE__, __LINE__, - _("Should not be able to create a lazy value with " - "an enclosing type")); - v_contents = value_contents_raw (v); - from_contents = NULL; - } - - bits_to_skip = 8 * value_offset (v); - if (value_bitsize (v)) - { - bits_to_skip += (8 * value_offset (value_parent (v)) - + value_bitpos (v)); - if (from != NULL - && (type_byte_order (value_type (from)) - == BFD_ENDIAN_BIG)) - { - /* Use the least significant bits of FROM. */ - max_offset = 8 * TYPE_LENGTH (value_type (from)); - offset = max_offset - value_bitsize (v); - } - else - max_offset = value_bitsize (v); - } - else - max_offset = 8 * TYPE_LENGTH (value_type (v)); - - /* Advance to the first non-skipped piece. */ - for (i = 0; i < c->pieces.size () && bits_to_skip >= c->pieces[i].size; i++) - bits_to_skip -= c->pieces[i].size; - - for (; i < c->pieces.size () && offset < max_offset; i++) - { - struct dwarf_expr_piece *p = &c->pieces[i]; - size_t this_size_bits, this_size; - - this_size_bits = p->size - bits_to_skip; - if (this_size_bits > max_offset - offset) - this_size_bits = max_offset - offset; - - switch (p->location) - { - case DWARF_VALUE_REGISTER: - { - struct frame_info *frame = frame_find_by_id (c->frame_id); - struct gdbarch *arch = get_frame_arch (frame); - int gdb_regnum = dwarf_reg_to_regnum_or_error (arch, p->v.regno); - ULONGEST reg_bits = 8 * register_size (arch, gdb_regnum); - int optim, unavail; - - if (gdbarch_byte_order (arch) == BFD_ENDIAN_BIG - && p->offset + p->size < reg_bits) - { - /* Big-endian, and we want less than full size. */ - bits_to_skip += reg_bits - (p->offset + p->size); - } - else - bits_to_skip += p->offset; - - this_size = bits_to_bytes (bits_to_skip, this_size_bits); - buffer.resize (this_size); - - if (from == NULL) - { - /* Read mode. */ - if (!get_frame_register_bytes (frame, gdb_regnum, - bits_to_skip / 8, - this_size, buffer.data (), - &optim, &unavail)) - { - if (optim) - mark_value_bits_optimized_out (v, offset, - this_size_bits); - if (unavail) - mark_value_bits_unavailable (v, offset, - this_size_bits); - break; - } - - copy_bitwise (v_contents, offset, - buffer.data (), bits_to_skip % 8, - this_size_bits, bits_big_endian); - } - else - { - /* Write mode. */ - if (bits_to_skip % 8 != 0 || this_size_bits % 8 != 0) - { - /* Data is copied non-byte-aligned into the register. - Need some bits from original register value. */ - get_frame_register_bytes (frame, gdb_regnum, - bits_to_skip / 8, - this_size, buffer.data (), - &optim, &unavail); - if (optim) - throw_error (OPTIMIZED_OUT_ERROR, - _("Can't do read-modify-write to " - "update bitfield; containing word " - "has been optimized out")); - if (unavail) - throw_error (NOT_AVAILABLE_ERROR, - _("Can't do read-modify-write to " - "update bitfield; containing word " - "is unavailable")); - } - - copy_bitwise (buffer.data (), bits_to_skip % 8, - from_contents, offset, - this_size_bits, bits_big_endian); - put_frame_register_bytes (frame, gdb_regnum, - bits_to_skip / 8, - this_size, buffer.data ()); - } - } - break; - - case DWARF_VALUE_MEMORY: - { - bits_to_skip += p->offset; - - CORE_ADDR start_addr = p->v.mem.addr + bits_to_skip / 8; - - if (bits_to_skip % 8 == 0 && this_size_bits % 8 == 0 - && offset % 8 == 0) - { - /* Everything is byte-aligned; no buffer needed. */ - if (from != NULL) - write_memory_with_notification (start_addr, - (from_contents - + offset / 8), - this_size_bits / 8); - else - read_value_memory (v, offset, - p->v.mem.in_stack_memory, - p->v.mem.addr + bits_to_skip / 8, - v_contents + offset / 8, - this_size_bits / 8); - break; - } - - this_size = bits_to_bytes (bits_to_skip, this_size_bits); - buffer.resize (this_size); - - if (from == NULL) - { - /* Read mode. */ - read_value_memory (v, offset, - p->v.mem.in_stack_memory, - p->v.mem.addr + bits_to_skip / 8, - buffer.data (), this_size); - copy_bitwise (v_contents, offset, - buffer.data (), bits_to_skip % 8, - this_size_bits, bits_big_endian); - } - else - { - /* Write mode. */ - if (bits_to_skip % 8 != 0 || this_size_bits % 8 != 0) - { - if (this_size <= 8) - { - /* Perform a single read for small sizes. */ - read_memory (start_addr, buffer.data (), - this_size); - } - else - { - /* Only the first and last bytes can possibly have - any bits reused. */ - read_memory (start_addr, buffer.data (), 1); - read_memory (start_addr + this_size - 1, - &buffer[this_size - 1], 1); - } - } - - copy_bitwise (buffer.data (), bits_to_skip % 8, - from_contents, offset, - this_size_bits, bits_big_endian); - write_memory_with_notification (start_addr, - buffer.data (), - this_size); - } - } - break; - - case DWARF_VALUE_STACK: - { - if (from != NULL) - { - mark_value_bits_optimized_out (v, offset, this_size_bits); - break; - } - - struct objfile *objfile = dwarf2_per_cu_objfile (c->per_cu); - struct gdbarch *objfile_gdbarch = get_objfile_arch (objfile); - ULONGEST stack_value_size_bits - = 8 * TYPE_LENGTH (value_type (p->v.value)); - - /* Use zeroes if piece reaches beyond stack value. */ - if (p->offset + p->size > stack_value_size_bits) - break; - - /* Piece is anchored at least significant bit end. */ - if (gdbarch_byte_order (objfile_gdbarch) == BFD_ENDIAN_BIG) - bits_to_skip += stack_value_size_bits - p->offset - p->size; - else - bits_to_skip += p->offset; - - copy_bitwise (v_contents, offset, - value_contents_all (p->v.value), - bits_to_skip, - this_size_bits, bits_big_endian); - } - break; - - case DWARF_VALUE_LITERAL: - { - if (from != NULL) - { - mark_value_bits_optimized_out (v, offset, this_size_bits); - break; - } - - ULONGEST literal_size_bits = 8 * p->v.literal.length; - size_t n = this_size_bits; - - /* Cut off at the end of the implicit value. */ - bits_to_skip += p->offset; - if (bits_to_skip >= literal_size_bits) - break; - if (n > literal_size_bits - bits_to_skip) - n = literal_size_bits - bits_to_skip; - - copy_bitwise (v_contents, offset, - p->v.literal.data, bits_to_skip, - n, bits_big_endian); - } - break; - - case DWARF_VALUE_IMPLICIT_POINTER: - if (from != NULL) - { - mark_value_bits_optimized_out (v, offset, this_size_bits); - break; - } - - /* These bits show up as zeros -- but do not cause the value to - be considered optimized-out. */ - break; - - case DWARF_VALUE_OPTIMIZED_OUT: - mark_value_bits_optimized_out (v, offset, this_size_bits); - break; - - default: - internal_error (__FILE__, __LINE__, _("invalid location type")); - } - - offset += this_size_bits; - bits_to_skip = 0; - } -} - - -static void -read_pieced_value (struct value *v) -{ - rw_pieced_value (v, NULL); -} - -static void -write_pieced_value (struct value *to, struct value *from) -{ - rw_pieced_value (to, from); -} - -/* An implementation of an lval_funcs method to see whether a value is - a synthetic pointer. */ - -static int -check_pieced_synthetic_pointer (const struct value *value, LONGEST bit_offset, - int bit_length) -{ - struct piece_closure *c - = (struct piece_closure *) value_computed_closure (value); - int i; - - bit_offset += 8 * value_offset (value); - if (value_bitsize (value)) - bit_offset += value_bitpos (value); - - for (i = 0; i < c->pieces.size () && bit_length > 0; i++) - { - struct dwarf_expr_piece *p = &c->pieces[i]; - size_t this_size_bits = p->size; - - if (bit_offset > 0) - { - if (bit_offset >= this_size_bits) - { - bit_offset -= this_size_bits; - continue; - } - - bit_length -= this_size_bits - bit_offset; - bit_offset = 0; - } - else - bit_length -= this_size_bits; - - if (p->location != DWARF_VALUE_IMPLICIT_POINTER) - return 0; - } - - return 1; -} - -/* A wrapper function for get_frame_address_in_block. */ - -static CORE_ADDR -get_frame_address_in_block_wrapper (void *baton) -{ - return get_frame_address_in_block ((struct frame_info *) baton); -} - -/* Fetch a DW_AT_const_value through a synthetic pointer. */ - -static struct value * -fetch_const_value_from_synthetic_pointer (sect_offset die, LONGEST byte_offset, - struct dwarf2_per_cu_data *per_cu, - struct type *type) -{ - struct value *result = NULL; - const gdb_byte *bytes; - LONGEST len; - - auto_obstack temp_obstack; - bytes = dwarf2_fetch_constant_bytes (die, per_cu, &temp_obstack, &len); - - if (bytes != NULL) - { - if (byte_offset >= 0 - && byte_offset + TYPE_LENGTH (TYPE_TARGET_TYPE (type)) <= len) - { - bytes += byte_offset; - result = value_from_contents (TYPE_TARGET_TYPE (type), bytes); - } - else - invalid_synthetic_pointer (); - } - else - result = allocate_optimized_out_value (TYPE_TARGET_TYPE (type)); - - return result; -} - -/* Fetch the value pointed to by a synthetic pointer. */ - -static struct value * -indirect_synthetic_pointer (sect_offset die, LONGEST byte_offset, - struct dwarf2_per_cu_data *per_cu, - struct frame_info *frame, struct type *type, - bool resolve_abstract_p) -{ - /* Fetch the location expression of the DIE we're pointing to. */ - struct dwarf2_locexpr_baton baton - = dwarf2_fetch_die_loc_sect_off (die, per_cu, - get_frame_address_in_block_wrapper, frame, - resolve_abstract_p); - - /* Get type of pointed-to DIE. */ - struct type *orig_type = dwarf2_fetch_die_type_sect_off (die, per_cu); - if (orig_type == NULL) - invalid_synthetic_pointer (); - - /* If pointed-to DIE has a DW_AT_location, evaluate it and return the - resulting value. Otherwise, it may have a DW_AT_const_value instead, - or it may've been optimized out. */ - if (baton.data != NULL) - return dwarf2_evaluate_loc_desc_full (orig_type, frame, baton.data, - baton.size, baton.per_cu, - TYPE_TARGET_TYPE (type), - byte_offset); - else - return fetch_const_value_from_synthetic_pointer (die, byte_offset, per_cu, - type); -} - -/* An implementation of an lval_funcs method to indirect through a - pointer. This handles the synthetic pointer case when needed. */ - -static struct value * -indirect_pieced_value (struct value *value) -{ - struct piece_closure *c - = (struct piece_closure *) value_computed_closure (value); - struct type *type; - struct frame_info *frame; - int i, bit_length; - LONGEST bit_offset; - struct dwarf_expr_piece *piece = NULL; - LONGEST byte_offset; - enum bfd_endian byte_order; - - type = check_typedef (value_type (value)); - if (TYPE_CODE (type) != TYPE_CODE_PTR) - return NULL; - - bit_length = 8 * TYPE_LENGTH (type); - bit_offset = 8 * value_offset (value); - if (value_bitsize (value)) - bit_offset += value_bitpos (value); - - for (i = 0; i < c->pieces.size () && bit_length > 0; i++) - { - struct dwarf_expr_piece *p = &c->pieces[i]; - size_t this_size_bits = p->size; - - if (bit_offset > 0) - { - if (bit_offset >= this_size_bits) - { - bit_offset -= this_size_bits; - continue; - } - - bit_length -= this_size_bits - bit_offset; - bit_offset = 0; - } - else - bit_length -= this_size_bits; - - if (p->location != DWARF_VALUE_IMPLICIT_POINTER) - return NULL; - - if (bit_length != 0) - error (_("Invalid use of DW_OP_implicit_pointer")); - - piece = p; - break; - } - - gdb_assert (piece != NULL); - frame = get_selected_frame (_("No frame selected.")); - - /* This is an offset requested by GDB, such as value subscripts. - However, due to how synthetic pointers are implemented, this is - always presented to us as a pointer type. This means we have to - sign-extend it manually as appropriate. Use raw - extract_signed_integer directly rather than value_as_address and - sign extend afterwards on architectures that would need it - (mostly everywhere except MIPS, which has signed addresses) as - the later would go through gdbarch_pointer_to_address and thus - return a CORE_ADDR with high bits set on architectures that - encode address spaces and other things in CORE_ADDR. */ - byte_order = gdbarch_byte_order (get_frame_arch (frame)); - byte_offset = extract_signed_integer (value_contents (value), - TYPE_LENGTH (type), byte_order); - byte_offset += piece->v.ptr.offset; - - return indirect_synthetic_pointer (piece->v.ptr.die_sect_off, - byte_offset, c->per_cu, - frame, type); -} - -/* Implementation of the coerce_ref method of lval_funcs for synthetic C++ - references. */ - -static struct value * -coerce_pieced_ref (const struct value *value) -{ - struct type *type = check_typedef (value_type (value)); - - if (value_bits_synthetic_pointer (value, value_embedded_offset (value), - TARGET_CHAR_BIT * TYPE_LENGTH (type))) - { - const struct piece_closure *closure - = (struct piece_closure *) value_computed_closure (value); - struct frame_info *frame - = get_selected_frame (_("No frame selected.")); - - /* gdb represents synthetic pointers as pieced values with a single - piece. */ - gdb_assert (closure != NULL); - gdb_assert (closure->pieces.size () == 1); - - return indirect_synthetic_pointer - (closure->pieces[0].v.ptr.die_sect_off, - closure->pieces[0].v.ptr.offset, - closure->per_cu, frame, type); - } - else - { - /* Else: not a synthetic reference; do nothing. */ - return NULL; - } -} - -static void * -copy_pieced_value_closure (const struct value *v) -{ - struct piece_closure *c - = (struct piece_closure *) value_computed_closure (v); - - ++c->refc; - return c; -} - -static void -free_pieced_value_closure (struct value *v) -{ - struct piece_closure *c - = (struct piece_closure *) value_computed_closure (v); - - --c->refc; - if (c->refc == 0) - { - for (dwarf_expr_piece &p : c->pieces) - if (p.location == DWARF_VALUE_STACK) - value_decref (p.v.value); - - delete c; - } -} - -/* Functions for accessing a variable described by DW_OP_piece. */ -static const struct lval_funcs pieced_value_funcs = { - read_pieced_value, - write_pieced_value, - indirect_pieced_value, - coerce_pieced_ref, - check_pieced_synthetic_pointer, - copy_pieced_value_closure, - free_pieced_value_closure -}; - -/* Evaluate a location description, starting at DATA and with length - SIZE, to find the current location of variable of TYPE in the - context of FRAME. If SUBOBJ_TYPE is non-NULL, return instead the - location of the subobject of type SUBOBJ_TYPE at byte offset - SUBOBJ_BYTE_OFFSET within the variable of type TYPE. */ - -static struct value * -dwarf2_evaluate_loc_desc_full (struct type *type, struct frame_info *frame, - const gdb_byte *data, size_t size, - struct dwarf2_per_cu_data *per_cu, - struct type *subobj_type, - LONGEST subobj_byte_offset) -{ - struct value *retval; - struct objfile *objfile = dwarf2_per_cu_objfile (per_cu); - - if (subobj_type == NULL) - { - subobj_type = type; - subobj_byte_offset = 0; - } - else if (subobj_byte_offset < 0) - invalid_synthetic_pointer (); - - if (size == 0) - return allocate_optimized_out_value (subobj_type); - - dwarf_evaluate_loc_desc ctx; - ctx.frame = frame; - ctx.per_cu = per_cu; - ctx.obj_address = 0; - - scoped_value_mark free_values; - - ctx.gdbarch = get_objfile_arch (objfile); - ctx.addr_size = dwarf2_per_cu_addr_size (per_cu); - ctx.ref_addr_size = dwarf2_per_cu_ref_addr_size (per_cu); - ctx.offset = dwarf2_per_cu_text_offset (per_cu); - - try - { - ctx.eval (data, size); - } - catch (const gdb_exception_error &ex) - { - if (ex.error == NOT_AVAILABLE_ERROR) - { - free_values.free_to_mark (); - retval = allocate_value (subobj_type); - mark_value_bytes_unavailable (retval, 0, - TYPE_LENGTH (subobj_type)); - return retval; - } - else if (ex.error == NO_ENTRY_VALUE_ERROR) - { - if (entry_values_debug) - exception_print (gdb_stdout, ex); - free_values.free_to_mark (); - return allocate_optimized_out_value (subobj_type); - } - else - throw; - } - - if (ctx.pieces.size () > 0) - { - struct piece_closure *c; - ULONGEST bit_size = 0; - - for (dwarf_expr_piece &piece : ctx.pieces) - bit_size += piece.size; - /* Complain if the expression is larger than the size of the - outer type. */ - if (bit_size > 8 * TYPE_LENGTH (type)) - invalid_synthetic_pointer (); - - c = allocate_piece_closure (per_cu, std::move (ctx.pieces), frame); - /* We must clean up the value chain after creating the piece - closure but before allocating the result. */ - free_values.free_to_mark (); - retval = allocate_computed_value (subobj_type, - &pieced_value_funcs, c); - set_value_offset (retval, subobj_byte_offset); - } - else - { - switch (ctx.location) - { - case DWARF_VALUE_REGISTER: - { - struct gdbarch *arch = get_frame_arch (frame); - int dwarf_regnum - = longest_to_int (value_as_long (ctx.fetch (0))); - int gdb_regnum = dwarf_reg_to_regnum_or_error (arch, dwarf_regnum); - - if (subobj_byte_offset != 0) - error (_("cannot use offset on synthetic pointer to register")); - free_values.free_to_mark (); - retval = value_from_register (subobj_type, gdb_regnum, frame); - if (value_optimized_out (retval)) - { - struct value *tmp; - - /* This means the register has undefined value / was - not saved. As we're computing the location of some - variable etc. in the program, not a value for - inspecting a register ($pc, $sp, etc.), return a - generic optimized out value instead, so that we show - <optimized out> instead of <not saved>. */ - tmp = allocate_value (subobj_type); - value_contents_copy (tmp, 0, retval, 0, - TYPE_LENGTH (subobj_type)); - retval = tmp; - } - } - break; - - case DWARF_VALUE_MEMORY: - { - struct type *ptr_type; - CORE_ADDR address = ctx.fetch_address (0); - bool in_stack_memory = ctx.fetch_in_stack_memory (0); - - /* DW_OP_deref_size (and possibly other operations too) may - create a pointer instead of an address. Ideally, the - pointer to address conversion would be performed as part - of those operations, but the type of the object to - which the address refers is not known at the time of - the operation. Therefore, we do the conversion here - since the type is readily available. */ - - switch (TYPE_CODE (subobj_type)) - { - case TYPE_CODE_FUNC: - case TYPE_CODE_METHOD: - ptr_type = builtin_type (ctx.gdbarch)->builtin_func_ptr; - break; - default: - ptr_type = builtin_type (ctx.gdbarch)->builtin_data_ptr; - break; - } - address = value_as_address (value_from_pointer (ptr_type, address)); - - free_values.free_to_mark (); - retval = value_at_lazy (subobj_type, - address + subobj_byte_offset); - if (in_stack_memory) - set_value_stack (retval, 1); - } - break; - - case DWARF_VALUE_STACK: - { - struct value *value = ctx.fetch (0); - size_t n = TYPE_LENGTH (value_type (value)); - size_t len = TYPE_LENGTH (subobj_type); - size_t max = TYPE_LENGTH (type); - struct gdbarch *objfile_gdbarch = get_objfile_arch (objfile); - - if (subobj_byte_offset + len > max) - invalid_synthetic_pointer (); - - /* Preserve VALUE because we are going to free values back - to the mark, but we still need the value contents - below. */ - value_ref_ptr value_holder = value_ref_ptr::new_reference (value); - free_values.free_to_mark (); - - retval = allocate_value (subobj_type); - - /* The given offset is relative to the actual object. */ - if (gdbarch_byte_order (objfile_gdbarch) == BFD_ENDIAN_BIG) - subobj_byte_offset += n - max; - - memcpy (value_contents_raw (retval), - value_contents_all (value) + subobj_byte_offset, len); - } - break; - - case DWARF_VALUE_LITERAL: - { - bfd_byte *contents; - size_t n = TYPE_LENGTH (subobj_type); - - if (subobj_byte_offset + n > ctx.len) - invalid_synthetic_pointer (); - - free_values.free_to_mark (); - retval = allocate_value (subobj_type); - contents = value_contents_raw (retval); - memcpy (contents, ctx.data + subobj_byte_offset, n); - } - break; - - case DWARF_VALUE_OPTIMIZED_OUT: - free_values.free_to_mark (); - retval = allocate_optimized_out_value (subobj_type); - break; - - /* DWARF_VALUE_IMPLICIT_POINTER was converted to a pieced - operation by execute_stack_op. */ - case DWARF_VALUE_IMPLICIT_POINTER: - /* DWARF_VALUE_OPTIMIZED_OUT can't occur in this context -- - it can only be encountered when making a piece. */ - default: - internal_error (__FILE__, __LINE__, _("invalid location type")); - } - } - - set_value_initialized (retval, ctx.initialized); - - return retval; -} - -/* The exported interface to dwarf2_evaluate_loc_desc_full; it always - passes 0 as the byte_offset. */ - -struct value * -dwarf2_evaluate_loc_desc (struct type *type, struct frame_info *frame, - const gdb_byte *data, size_t size, - struct dwarf2_per_cu_data *per_cu) -{ - return dwarf2_evaluate_loc_desc_full (type, frame, data, size, per_cu, - NULL, 0); -} - -/* Evaluates a dwarf expression and stores the result in VAL, expecting - that the dwarf expression only produces a single CORE_ADDR. FRAME is the - frame in which the expression is evaluated. ADDR is a context (location of - a variable) and might be needed to evaluate the location expression. - Returns 1 on success, 0 otherwise. */ - -static int -dwarf2_locexpr_baton_eval (const struct dwarf2_locexpr_baton *dlbaton, - struct frame_info *frame, - CORE_ADDR addr, - CORE_ADDR *valp) -{ - struct objfile *objfile; - - if (dlbaton == NULL || dlbaton->size == 0) - return 0; - - dwarf_evaluate_loc_desc ctx; - - ctx.frame = frame; - ctx.per_cu = dlbaton->per_cu; - ctx.obj_address = addr; - - objfile = dwarf2_per_cu_objfile (dlbaton->per_cu); - - ctx.gdbarch = get_objfile_arch (objfile); - ctx.addr_size = dwarf2_per_cu_addr_size (dlbaton->per_cu); - ctx.ref_addr_size = dwarf2_per_cu_ref_addr_size (dlbaton->per_cu); - ctx.offset = dwarf2_per_cu_text_offset (dlbaton->per_cu); - - try - { - ctx.eval (dlbaton->data, dlbaton->size); - } - catch (const gdb_exception_error &ex) - { - if (ex.error == NOT_AVAILABLE_ERROR) - { - return 0; - } - else if (ex.error == NO_ENTRY_VALUE_ERROR) - { - if (entry_values_debug) - exception_print (gdb_stdout, ex); - return 0; - } - else - throw; - } - - switch (ctx.location) - { - case DWARF_VALUE_REGISTER: - case DWARF_VALUE_MEMORY: - case DWARF_VALUE_STACK: - *valp = ctx.fetch_address (0); - if (ctx.location == DWARF_VALUE_REGISTER) - *valp = ctx.read_addr_from_reg (*valp); - return 1; - case DWARF_VALUE_LITERAL: - *valp = extract_signed_integer (ctx.data, ctx.len, - gdbarch_byte_order (ctx.gdbarch)); - return 1; - /* Unsupported dwarf values. */ - case DWARF_VALUE_OPTIMIZED_OUT: - case DWARF_VALUE_IMPLICIT_POINTER: - break; - } - - return 0; -} - -/* See dwarf2loc.h. */ - -bool -dwarf2_evaluate_property (const struct dynamic_prop *prop, - struct frame_info *frame, - struct property_addr_info *addr_stack, - CORE_ADDR *value) -{ - if (prop == NULL) - return false; - - if (frame == NULL && has_stack_frames ()) - frame = get_selected_frame (NULL); - - switch (prop->kind) - { - case PROP_LOCEXPR: - { - const struct dwarf2_property_baton *baton - = (const struct dwarf2_property_baton *) prop->data.baton; - gdb_assert (baton->property_type != NULL); - - if (dwarf2_locexpr_baton_eval (&baton->locexpr, frame, - addr_stack ? addr_stack->addr : 0, - value)) - { - if (baton->locexpr.is_reference) - { - struct value *val = value_at (baton->property_type, *value); - *value = value_as_address (val); - } - else - { - gdb_assert (baton->property_type != NULL); - - struct type *type = check_typedef (baton->property_type); - if (TYPE_LENGTH (type) < sizeof (CORE_ADDR) - && !TYPE_UNSIGNED (type)) - { - /* If we have a valid return candidate and it's value - is signed, we have to sign-extend the value because - CORE_ADDR on 64bit machine has 8 bytes but address - size of an 32bit application is bytes. */ - const int addr_size - = (dwarf2_per_cu_addr_size (baton->locexpr.per_cu) - * TARGET_CHAR_BIT); - const CORE_ADDR neg_mask - = (~((CORE_ADDR) 0) << (addr_size - 1)); - - /* Check if signed bit is set and sign-extend values. */ - if (*value & neg_mask) - *value |= neg_mask; - } - } - return true; - } - } - break; - - case PROP_LOCLIST: - { - struct dwarf2_property_baton *baton - = (struct dwarf2_property_baton *) prop->data.baton; - CORE_ADDR pc = get_frame_address_in_block (frame); - const gdb_byte *data; - struct value *val; - size_t size; - - data = dwarf2_find_location_expression (&baton->loclist, &size, pc); - if (data != NULL) - { - val = dwarf2_evaluate_loc_desc (baton->property_type, frame, data, - size, baton->loclist.per_cu); - if (!value_optimized_out (val)) - { - *value = value_as_address (val); - return true; - } - } - } - break; - - case PROP_CONST: - *value = prop->data.const_val; - return true; - - case PROP_ADDR_OFFSET: - { - struct dwarf2_property_baton *baton - = (struct dwarf2_property_baton *) prop->data.baton; - struct property_addr_info *pinfo; - struct value *val; - - for (pinfo = addr_stack; pinfo != NULL; pinfo = pinfo->next) - { - /* This approach lets us avoid checking the qualifiers. */ - if (TYPE_MAIN_TYPE (pinfo->type) - == TYPE_MAIN_TYPE (baton->property_type)) - break; - } - if (pinfo == NULL) - error (_("cannot find reference address for offset property")); - if (pinfo->valaddr != NULL) - val = value_from_contents - (baton->offset_info.type, - pinfo->valaddr + baton->offset_info.offset); - else - val = value_at (baton->offset_info.type, - pinfo->addr + baton->offset_info.offset); - *value = value_as_address (val); - return true; - } - } - - return false; -} - -/* See dwarf2loc.h. */ - -void -dwarf2_compile_property_to_c (string_file *stream, - const char *result_name, - struct gdbarch *gdbarch, - unsigned char *registers_used, - const struct dynamic_prop *prop, - CORE_ADDR pc, - struct symbol *sym) -{ - struct dwarf2_property_baton *baton - = (struct dwarf2_property_baton *) prop->data.baton; - const gdb_byte *data; - size_t size; - struct dwarf2_per_cu_data *per_cu; - - if (prop->kind == PROP_LOCEXPR) - { - data = baton->locexpr.data; - size = baton->locexpr.size; - per_cu = baton->locexpr.per_cu; - } - else - { - gdb_assert (prop->kind == PROP_LOCLIST); - - data = dwarf2_find_location_expression (&baton->loclist, &size, pc); - per_cu = baton->loclist.per_cu; - } - - compile_dwarf_bounds_to_c (stream, result_name, prop, sym, pc, - gdbarch, registers_used, - dwarf2_per_cu_addr_size (per_cu), - data, data + size, per_cu); -} - - -/* Helper functions and baton for dwarf2_loc_desc_get_symbol_read_needs. */ - -class symbol_needs_eval_context : public dwarf_expr_context -{ - public: - - enum symbol_needs_kind needs; - struct dwarf2_per_cu_data *per_cu; - - /* Reads from registers do require a frame. */ - CORE_ADDR read_addr_from_reg (int regnum) override - { - needs = SYMBOL_NEEDS_FRAME; - return 1; - } - - /* "get_reg_value" callback: Reads from registers do require a - frame. */ - - struct value *get_reg_value (struct type *type, int regnum) override - { - needs = SYMBOL_NEEDS_FRAME; - return value_zero (type, not_lval); - } - - /* Reads from memory do not require a frame. */ - void read_mem (gdb_byte *buf, CORE_ADDR addr, size_t len) override - { - memset (buf, 0, len); - } - - /* Frame-relative accesses do require a frame. */ - void get_frame_base (const gdb_byte **start, size_t *length) override - { - static gdb_byte lit0 = DW_OP_lit0; - - *start = &lit0; - *length = 1; - - needs = SYMBOL_NEEDS_FRAME; - } - - /* CFA accesses require a frame. */ - CORE_ADDR get_frame_cfa () override - { - needs = SYMBOL_NEEDS_FRAME; - return 1; - } - - CORE_ADDR get_frame_pc () override - { - needs = SYMBOL_NEEDS_FRAME; - return 1; - } - - /* Thread-local accesses require registers, but not a frame. */ - CORE_ADDR get_tls_address (CORE_ADDR offset) override - { - if (needs <= SYMBOL_NEEDS_REGISTERS) - needs = SYMBOL_NEEDS_REGISTERS; - return 1; - } - - /* Helper interface of per_cu_dwarf_call for - dwarf2_loc_desc_get_symbol_read_needs. */ - - void dwarf_call (cu_offset die_offset) override - { - per_cu_dwarf_call (this, die_offset, per_cu); - } - - /* Helper interface of sect_variable_value for - dwarf2_loc_desc_get_symbol_read_needs. */ - - struct value *dwarf_variable_value (sect_offset sect_off) override - { - return sect_variable_value (this, sect_off, per_cu); - } - - /* DW_OP_entry_value accesses require a caller, therefore a - frame. */ - - void push_dwarf_reg_entry_value (enum call_site_parameter_kind kind, - union call_site_parameter_u kind_u, - int deref_size) override - { - needs = SYMBOL_NEEDS_FRAME; - - /* The expression may require some stub values on DWARF stack. */ - push_address (0, 0); - } - - /* DW_OP_addrx and DW_OP_GNU_addr_index doesn't require a frame. */ - - CORE_ADDR get_addr_index (unsigned int index) override - { - /* Nothing to do. */ - return 1; - } - - /* DW_OP_push_object_address has a frame already passed through. */ - - CORE_ADDR get_object_address () override - { - /* Nothing to do. */ - return 1; - } -}; - -/* Compute the correct symbol_needs_kind value for the location - expression at DATA (length SIZE). */ - -static enum symbol_needs_kind -dwarf2_loc_desc_get_symbol_read_needs (const gdb_byte *data, size_t size, - struct dwarf2_per_cu_data *per_cu) -{ - int in_reg; - struct objfile *objfile = dwarf2_per_cu_objfile (per_cu); - - scoped_value_mark free_values; - - symbol_needs_eval_context ctx; - - ctx.needs = SYMBOL_NEEDS_NONE; - ctx.per_cu = per_cu; - ctx.gdbarch = get_objfile_arch (objfile); - ctx.addr_size = dwarf2_per_cu_addr_size (per_cu); - ctx.ref_addr_size = dwarf2_per_cu_ref_addr_size (per_cu); - ctx.offset = dwarf2_per_cu_text_offset (per_cu); - - ctx.eval (data, size); - - in_reg = ctx.location == DWARF_VALUE_REGISTER; - - /* If the location has several pieces, and any of them are in - registers, then we will need a frame to fetch them from. */ - for (dwarf_expr_piece &p : ctx.pieces) - if (p.location == DWARF_VALUE_REGISTER) - in_reg = 1; - - if (in_reg) - ctx.needs = SYMBOL_NEEDS_FRAME; - return ctx.needs; -} - -/* A helper function that throws an unimplemented error mentioning a - given DWARF operator. */ - -static void ATTRIBUTE_NORETURN -unimplemented (unsigned int op) -{ - const char *name = get_DW_OP_name (op); - - if (name) - error (_("DWARF operator %s cannot be translated to an agent expression"), - name); - else - error (_("Unknown DWARF operator 0x%02x cannot be translated " - "to an agent expression"), - op); -} - -/* See dwarf2loc.h. - - This is basically a wrapper on gdbarch_dwarf2_reg_to_regnum so that we - can issue a complaint, which is better than having every target's - implementation of dwarf2_reg_to_regnum do it. */ - -int -dwarf_reg_to_regnum (struct gdbarch *arch, int dwarf_reg) -{ - int reg = gdbarch_dwarf2_reg_to_regnum (arch, dwarf_reg); - - if (reg == -1) - { - complaint (_("bad DWARF register number %d"), dwarf_reg); - } - return reg; -} - -/* Subroutine of dwarf_reg_to_regnum_or_error to simplify it. - Throw an error because DWARF_REG is bad. */ - -static void -throw_bad_regnum_error (ULONGEST dwarf_reg) -{ - /* Still want to print -1 as "-1". - We *could* have int and ULONGEST versions of dwarf2_reg_to_regnum_or_error - but that's overkill for now. */ - if ((int) dwarf_reg == dwarf_reg) - error (_("Unable to access DWARF register number %d"), (int) dwarf_reg); - error (_("Unable to access DWARF register number %s"), - pulongest (dwarf_reg)); -} - -/* See dwarf2loc.h. */ - -int -dwarf_reg_to_regnum_or_error (struct gdbarch *arch, ULONGEST dwarf_reg) -{ - int reg; - - if (dwarf_reg > INT_MAX) - throw_bad_regnum_error (dwarf_reg); - /* Yes, we will end up issuing a complaint and an error if DWARF_REG is - bad, but that's ok. */ - reg = dwarf_reg_to_regnum (arch, (int) dwarf_reg); - if (reg == -1) - throw_bad_regnum_error (dwarf_reg); - return reg; -} - -/* A helper function that emits an access to memory. ARCH is the - target architecture. EXPR is the expression which we are building. - NBITS is the number of bits we want to read. This emits the - opcodes needed to read the memory and then extract the desired - bits. */ - -static void -access_memory (struct gdbarch *arch, struct agent_expr *expr, ULONGEST nbits) -{ - ULONGEST nbytes = (nbits + 7) / 8; - - gdb_assert (nbytes > 0 && nbytes <= sizeof (LONGEST)); - - if (expr->tracing) - ax_trace_quick (expr, nbytes); - - if (nbits <= 8) - ax_simple (expr, aop_ref8); - else if (nbits <= 16) - ax_simple (expr, aop_ref16); - else if (nbits <= 32) - ax_simple (expr, aop_ref32); - else - ax_simple (expr, aop_ref64); - - /* If we read exactly the number of bytes we wanted, we're done. */ - if (8 * nbytes == nbits) - return; - - if (gdbarch_byte_order (arch) == BFD_ENDIAN_BIG) - { - /* On a bits-big-endian machine, we want the high-order - NBITS. */ - ax_const_l (expr, 8 * nbytes - nbits); - ax_simple (expr, aop_rsh_unsigned); - } - else - { - /* On a bits-little-endian box, we want the low-order NBITS. */ - ax_zero_ext (expr, nbits); - } -} - -/* A helper function to return the frame's PC. */ - -static CORE_ADDR -get_ax_pc (void *baton) -{ - struct agent_expr *expr = (struct agent_expr *) baton; - - return expr->scope; -} - -/* Compile a DWARF location expression to an agent expression. - - EXPR is the agent expression we are building. - LOC is the agent value we modify. - ARCH is the architecture. - ADDR_SIZE is the size of addresses, in bytes. - OP_PTR is the start of the location expression. - OP_END is one past the last byte of the location expression. - - This will throw an exception for various kinds of errors -- for - example, if the expression cannot be compiled, or if the expression - is invalid. */ - -void -dwarf2_compile_expr_to_ax (struct agent_expr *expr, struct axs_value *loc, - unsigned int addr_size, const gdb_byte *op_ptr, - const gdb_byte *op_end, - struct dwarf2_per_cu_data *per_cu) -{ - gdbarch *arch = expr->gdbarch; - std::vector<int> dw_labels, patches; - const gdb_byte * const base = op_ptr; - const gdb_byte *previous_piece = op_ptr; - enum bfd_endian byte_order = gdbarch_byte_order (arch); - ULONGEST bits_collected = 0; - unsigned int addr_size_bits = 8 * addr_size; - bool bits_big_endian = byte_order == BFD_ENDIAN_BIG; - - std::vector<int> offsets (op_end - op_ptr, -1); - - /* By default we are making an address. */ - loc->kind = axs_lvalue_memory; - - while (op_ptr < op_end) - { - enum dwarf_location_atom op = (enum dwarf_location_atom) *op_ptr; - uint64_t uoffset, reg; - int64_t offset; - int i; - - offsets[op_ptr - base] = expr->len; - ++op_ptr; - - /* Our basic approach to code generation is to map DWARF - operations directly to AX operations. However, there are - some differences. - - First, DWARF works on address-sized units, but AX always uses - LONGEST. For most operations we simply ignore this - difference; instead we generate sign extensions as needed - before division and comparison operations. It would be nice - to omit the sign extensions, but there is no way to determine - the size of the target's LONGEST. (This code uses the size - of the host LONGEST in some cases -- that is a bug but it is - difficult to fix.) - - Second, some DWARF operations cannot be translated to AX. - For these we simply fail. See - http://sourceware.org/bugzilla/show_bug.cgi?id=11662. */ - switch (op) - { - case DW_OP_lit0: - case DW_OP_lit1: - case DW_OP_lit2: - case DW_OP_lit3: - case DW_OP_lit4: - case DW_OP_lit5: - case DW_OP_lit6: - case DW_OP_lit7: - case DW_OP_lit8: - case DW_OP_lit9: - case DW_OP_lit10: - case DW_OP_lit11: - case DW_OP_lit12: - case DW_OP_lit13: - case DW_OP_lit14: - case DW_OP_lit15: - case DW_OP_lit16: - case DW_OP_lit17: - case DW_OP_lit18: - case DW_OP_lit19: - case DW_OP_lit20: - case DW_OP_lit21: - case DW_OP_lit22: - case DW_OP_lit23: - case DW_OP_lit24: - case DW_OP_lit25: - case DW_OP_lit26: - case DW_OP_lit27: - case DW_OP_lit28: - case DW_OP_lit29: - case DW_OP_lit30: - case DW_OP_lit31: - ax_const_l (expr, op - DW_OP_lit0); - break; - - case DW_OP_addr: - uoffset = extract_unsigned_integer (op_ptr, addr_size, byte_order); - op_ptr += addr_size; - /* Some versions of GCC emit DW_OP_addr before - DW_OP_GNU_push_tls_address. In this case the value is an - index, not an address. We don't support things like - branching between the address and the TLS op. */ - if (op_ptr >= op_end || *op_ptr != DW_OP_GNU_push_tls_address) - uoffset += dwarf2_per_cu_text_offset (per_cu); - ax_const_l (expr, uoffset); - break; - - case DW_OP_const1u: - ax_const_l (expr, extract_unsigned_integer (op_ptr, 1, byte_order)); - op_ptr += 1; - break; - case DW_OP_const1s: - ax_const_l (expr, extract_signed_integer (op_ptr, 1, byte_order)); - op_ptr += 1; - break; - case DW_OP_const2u: - ax_const_l (expr, extract_unsigned_integer (op_ptr, 2, byte_order)); - op_ptr += 2; - break; - case DW_OP_const2s: - ax_const_l (expr, extract_signed_integer (op_ptr, 2, byte_order)); - op_ptr += 2; - break; - case DW_OP_const4u: - ax_const_l (expr, extract_unsigned_integer (op_ptr, 4, byte_order)); - op_ptr += 4; - break; - case DW_OP_const4s: - ax_const_l (expr, extract_signed_integer (op_ptr, 4, byte_order)); - op_ptr += 4; - break; - case DW_OP_const8u: - ax_const_l (expr, extract_unsigned_integer (op_ptr, 8, byte_order)); - op_ptr += 8; - break; - case DW_OP_const8s: - ax_const_l (expr, extract_signed_integer (op_ptr, 8, byte_order)); - op_ptr += 8; - break; - case DW_OP_constu: - op_ptr = safe_read_uleb128 (op_ptr, op_end, &uoffset); - ax_const_l (expr, uoffset); - break; - case DW_OP_consts: - op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset); - ax_const_l (expr, offset); - break; - - case DW_OP_reg0: - case DW_OP_reg1: - case DW_OP_reg2: - case DW_OP_reg3: - case DW_OP_reg4: - case DW_OP_reg5: - case DW_OP_reg6: - case DW_OP_reg7: - case DW_OP_reg8: - case DW_OP_reg9: - case DW_OP_reg10: - case DW_OP_reg11: - case DW_OP_reg12: - case DW_OP_reg13: - case DW_OP_reg14: - case DW_OP_reg15: - case DW_OP_reg16: - case DW_OP_reg17: - case DW_OP_reg18: - case DW_OP_reg19: - case DW_OP_reg20: - case DW_OP_reg21: - case DW_OP_reg22: - case DW_OP_reg23: - case DW_OP_reg24: - case DW_OP_reg25: - case DW_OP_reg26: - case DW_OP_reg27: - case DW_OP_reg28: - case DW_OP_reg29: - case DW_OP_reg30: - case DW_OP_reg31: - dwarf_expr_require_composition (op_ptr, op_end, "DW_OP_regx"); - loc->u.reg = dwarf_reg_to_regnum_or_error (arch, op - DW_OP_reg0); - loc->kind = axs_lvalue_register; - break; - - case DW_OP_regx: - op_ptr = safe_read_uleb128 (op_ptr, op_end, ®); - dwarf_expr_require_composition (op_ptr, op_end, "DW_OP_regx"); - loc->u.reg = dwarf_reg_to_regnum_or_error (arch, reg); - loc->kind = axs_lvalue_register; - break; - - case DW_OP_implicit_value: - { - uint64_t len; - - op_ptr = safe_read_uleb128 (op_ptr, op_end, &len); - if (op_ptr + len > op_end) - error (_("DW_OP_implicit_value: too few bytes available.")); - if (len > sizeof (ULONGEST)) - error (_("Cannot translate DW_OP_implicit_value of %d bytes"), - (int) len); - - ax_const_l (expr, extract_unsigned_integer (op_ptr, len, - byte_order)); - op_ptr += len; - dwarf_expr_require_composition (op_ptr, op_end, - "DW_OP_implicit_value"); - - loc->kind = axs_rvalue; - } - break; - - case DW_OP_stack_value: - dwarf_expr_require_composition (op_ptr, op_end, "DW_OP_stack_value"); - loc->kind = axs_rvalue; - break; - - case DW_OP_breg0: - case DW_OP_breg1: - case DW_OP_breg2: - case DW_OP_breg3: - case DW_OP_breg4: - case DW_OP_breg5: - case DW_OP_breg6: - case DW_OP_breg7: - case DW_OP_breg8: - case DW_OP_breg9: - case DW_OP_breg10: - case DW_OP_breg11: - case DW_OP_breg12: - case DW_OP_breg13: - case DW_OP_breg14: - case DW_OP_breg15: - case DW_OP_breg16: - case DW_OP_breg17: - case DW_OP_breg18: - case DW_OP_breg19: - case DW_OP_breg20: - case DW_OP_breg21: - case DW_OP_breg22: - case DW_OP_breg23: - case DW_OP_breg24: - case DW_OP_breg25: - case DW_OP_breg26: - case DW_OP_breg27: - case DW_OP_breg28: - case DW_OP_breg29: - case DW_OP_breg30: - case DW_OP_breg31: - op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset); - i = dwarf_reg_to_regnum_or_error (arch, op - DW_OP_breg0); - ax_reg (expr, i); - if (offset != 0) - { - ax_const_l (expr, offset); - ax_simple (expr, aop_add); - } - break; - case DW_OP_bregx: - { - op_ptr = safe_read_uleb128 (op_ptr, op_end, ®); - op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset); - i = dwarf_reg_to_regnum_or_error (arch, reg); - ax_reg (expr, i); - if (offset != 0) - { - ax_const_l (expr, offset); - ax_simple (expr, aop_add); - } - } - break; - case DW_OP_fbreg: - { - const gdb_byte *datastart; - size_t datalen; - const struct block *b; - struct symbol *framefunc; - - b = block_for_pc (expr->scope); - - if (!b) - error (_("No block found for address")); - - framefunc = block_linkage_function (b); - - if (!framefunc) - error (_("No function found for block")); - - func_get_frame_base_dwarf_block (framefunc, expr->scope, - &datastart, &datalen); - - op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset); - dwarf2_compile_expr_to_ax (expr, loc, addr_size, datastart, - datastart + datalen, per_cu); - if (loc->kind == axs_lvalue_register) - require_rvalue (expr, loc); - - if (offset != 0) - { - ax_const_l (expr, offset); - ax_simple (expr, aop_add); - } - - loc->kind = axs_lvalue_memory; - } - break; - - case DW_OP_dup: - ax_simple (expr, aop_dup); - break; - - case DW_OP_drop: - ax_simple (expr, aop_pop); - break; - - case DW_OP_pick: - offset = *op_ptr++; - ax_pick (expr, offset); - break; - - case DW_OP_swap: - ax_simple (expr, aop_swap); - break; - - case DW_OP_over: - ax_pick (expr, 1); - break; - - case DW_OP_rot: - ax_simple (expr, aop_rot); - break; - - case DW_OP_deref: - case DW_OP_deref_size: - { - int size; - - if (op == DW_OP_deref_size) - size = *op_ptr++; - else - size = addr_size; - - if (size != 1 && size != 2 && size != 4 && size != 8) - error (_("Unsupported size %d in %s"), - size, get_DW_OP_name (op)); - access_memory (arch, expr, size * TARGET_CHAR_BIT); - } - break; - - case DW_OP_abs: - /* Sign extend the operand. */ - ax_ext (expr, addr_size_bits); - ax_simple (expr, aop_dup); - ax_const_l (expr, 0); - ax_simple (expr, aop_less_signed); - ax_simple (expr, aop_log_not); - i = ax_goto (expr, aop_if_goto); - /* We have to emit 0 - X. */ - ax_const_l (expr, 0); - ax_simple (expr, aop_swap); - ax_simple (expr, aop_sub); - ax_label (expr, i, expr->len); - break; - - case DW_OP_neg: - /* No need to sign extend here. */ - ax_const_l (expr, 0); - ax_simple (expr, aop_swap); - ax_simple (expr, aop_sub); - break; - - case DW_OP_not: - /* Sign extend the operand. */ - ax_ext (expr, addr_size_bits); - ax_simple (expr, aop_bit_not); - break; - - case DW_OP_plus_uconst: - op_ptr = safe_read_uleb128 (op_ptr, op_end, ®); - /* It would be really weird to emit `DW_OP_plus_uconst 0', - but we micro-optimize anyhow. */ - if (reg != 0) - { - ax_const_l (expr, reg); - ax_simple (expr, aop_add); - } - break; - - case DW_OP_and: - ax_simple (expr, aop_bit_and); - break; - - case DW_OP_div: - /* Sign extend the operands. */ - ax_ext (expr, addr_size_bits); - ax_simple (expr, aop_swap); - ax_ext (expr, addr_size_bits); - ax_simple (expr, aop_swap); - ax_simple (expr, aop_div_signed); - break; - - case DW_OP_minus: - ax_simple (expr, aop_sub); - break; - - case DW_OP_mod: - ax_simple (expr, aop_rem_unsigned); - break; - - case DW_OP_mul: - ax_simple (expr, aop_mul); - break; - - case DW_OP_or: - ax_simple (expr, aop_bit_or); - break; - - case DW_OP_plus: - ax_simple (expr, aop_add); - break; - - case DW_OP_shl: - ax_simple (expr, aop_lsh); - break; - - case DW_OP_shr: - ax_simple (expr, aop_rsh_unsigned); - break; - - case DW_OP_shra: - ax_simple (expr, aop_rsh_signed); - break; - - case DW_OP_xor: - ax_simple (expr, aop_bit_xor); - break; - - case DW_OP_le: - /* Sign extend the operands. */ - ax_ext (expr, addr_size_bits); - ax_simple (expr, aop_swap); - ax_ext (expr, addr_size_bits); - /* Note no swap here: A <= B is !(B < A). */ - ax_simple (expr, aop_less_signed); - ax_simple (expr, aop_log_not); - break; - - case DW_OP_ge: - /* Sign extend the operands. */ - ax_ext (expr, addr_size_bits); - ax_simple (expr, aop_swap); - ax_ext (expr, addr_size_bits); - ax_simple (expr, aop_swap); - /* A >= B is !(A < B). */ - ax_simple (expr, aop_less_signed); - ax_simple (expr, aop_log_not); - break; - - case DW_OP_eq: - /* Sign extend the operands. */ - ax_ext (expr, addr_size_bits); - ax_simple (expr, aop_swap); - ax_ext (expr, addr_size_bits); - /* No need for a second swap here. */ - ax_simple (expr, aop_equal); - break; - - case DW_OP_lt: - /* Sign extend the operands. */ - ax_ext (expr, addr_size_bits); - ax_simple (expr, aop_swap); - ax_ext (expr, addr_size_bits); - ax_simple (expr, aop_swap); - ax_simple (expr, aop_less_signed); - break; - - case DW_OP_gt: - /* Sign extend the operands. */ - ax_ext (expr, addr_size_bits); - ax_simple (expr, aop_swap); - ax_ext (expr, addr_size_bits); - /* Note no swap here: A > B is B < A. */ - ax_simple (expr, aop_less_signed); - break; - - case DW_OP_ne: - /* Sign extend the operands. */ - ax_ext (expr, addr_size_bits); - ax_simple (expr, aop_swap); - ax_ext (expr, addr_size_bits); - /* No need for a swap here. */ - ax_simple (expr, aop_equal); - ax_simple (expr, aop_log_not); - break; - - case DW_OP_call_frame_cfa: - { - int regnum; - CORE_ADDR text_offset; - LONGEST off; - const gdb_byte *cfa_start, *cfa_end; - - if (dwarf2_fetch_cfa_info (arch, expr->scope, per_cu, - ®num, &off, - &text_offset, &cfa_start, &cfa_end)) - { - /* Register. */ - ax_reg (expr, regnum); - if (off != 0) - { - ax_const_l (expr, off); - ax_simple (expr, aop_add); - } - } - else - { - /* Another expression. */ - ax_const_l (expr, text_offset); - dwarf2_compile_expr_to_ax (expr, loc, addr_size, cfa_start, - cfa_end, per_cu); - } - - loc->kind = axs_lvalue_memory; - } - break; - - case DW_OP_GNU_push_tls_address: - case DW_OP_form_tls_address: - unimplemented (op); - break; - - case DW_OP_push_object_address: - unimplemented (op); - break; - - case DW_OP_skip: - offset = extract_signed_integer (op_ptr, 2, byte_order); - op_ptr += 2; - i = ax_goto (expr, aop_goto); - dw_labels.push_back (op_ptr + offset - base); - patches.push_back (i); - break; - - case DW_OP_bra: - offset = extract_signed_integer (op_ptr, 2, byte_order); - op_ptr += 2; - /* Zero extend the operand. */ - ax_zero_ext (expr, addr_size_bits); - i = ax_goto (expr, aop_if_goto); - dw_labels.push_back (op_ptr + offset - base); - patches.push_back (i); - break; - - case DW_OP_nop: - break; - - case DW_OP_piece: - case DW_OP_bit_piece: - { - uint64_t size; - - if (op_ptr - 1 == previous_piece) - error (_("Cannot translate empty pieces to agent expressions")); - previous_piece = op_ptr - 1; - - op_ptr = safe_read_uleb128 (op_ptr, op_end, &size); - if (op == DW_OP_piece) - { - size *= 8; - uoffset = 0; - } - else - op_ptr = safe_read_uleb128 (op_ptr, op_end, &uoffset); - - if (bits_collected + size > 8 * sizeof (LONGEST)) - error (_("Expression pieces exceed word size")); - - /* Access the bits. */ - switch (loc->kind) - { - case axs_lvalue_register: - ax_reg (expr, loc->u.reg); - break; - - case axs_lvalue_memory: - /* Offset the pointer, if needed. */ - if (uoffset > 8) - { - ax_const_l (expr, uoffset / 8); - ax_simple (expr, aop_add); - uoffset %= 8; - } - access_memory (arch, expr, size); - break; - } - - /* For a bits-big-endian target, shift up what we already - have. For a bits-little-endian target, shift up the - new data. Note that there is a potential bug here if - the DWARF expression leaves multiple values on the - stack. */ - if (bits_collected > 0) - { - if (bits_big_endian) - { - ax_simple (expr, aop_swap); - ax_const_l (expr, size); - ax_simple (expr, aop_lsh); - /* We don't need a second swap here, because - aop_bit_or is symmetric. */ - } - else - { - ax_const_l (expr, size); - ax_simple (expr, aop_lsh); - } - ax_simple (expr, aop_bit_or); - } - - bits_collected += size; - loc->kind = axs_rvalue; - } - break; - - case DW_OP_GNU_uninit: - unimplemented (op); - - case DW_OP_call2: - case DW_OP_call4: - { - struct dwarf2_locexpr_baton block; - int size = (op == DW_OP_call2 ? 2 : 4); - - uoffset = extract_unsigned_integer (op_ptr, size, byte_order); - op_ptr += size; - - cu_offset cuoffset = (cu_offset) uoffset; - block = dwarf2_fetch_die_loc_cu_off (cuoffset, per_cu, - get_ax_pc, expr); - - /* DW_OP_call_ref is currently not supported. */ - gdb_assert (block.per_cu == per_cu); - - dwarf2_compile_expr_to_ax (expr, loc, addr_size, block.data, - block.data + block.size, per_cu); - } - break; - - case DW_OP_call_ref: - unimplemented (op); - - case DW_OP_GNU_variable_value: - unimplemented (op); - - default: - unimplemented (op); - } - } - - /* Patch all the branches we emitted. */ - for (int i = 0; i < patches.size (); ++i) - { - int targ = offsets[dw_labels[i]]; - if (targ == -1) - internal_error (__FILE__, __LINE__, _("invalid label")); - ax_label (expr, patches[i], targ); - } -} - - -/* Return the value of SYMBOL in FRAME using the DWARF-2 expression - evaluator to calculate the location. */ -static struct value * -locexpr_read_variable (struct symbol *symbol, struct frame_info *frame) -{ - struct dwarf2_locexpr_baton *dlbaton - = (struct dwarf2_locexpr_baton *) SYMBOL_LOCATION_BATON (symbol); - struct value *val; - - val = dwarf2_evaluate_loc_desc (SYMBOL_TYPE (symbol), frame, dlbaton->data, - dlbaton->size, dlbaton->per_cu); - - return val; -} - -/* Return the value of SYMBOL in FRAME at (callee) FRAME's function - entry. SYMBOL should be a function parameter, otherwise NO_ENTRY_VALUE_ERROR - will be thrown. */ - -static struct value * -locexpr_read_variable_at_entry (struct symbol *symbol, struct frame_info *frame) -{ - struct dwarf2_locexpr_baton *dlbaton - = (struct dwarf2_locexpr_baton *) SYMBOL_LOCATION_BATON (symbol); - - return value_of_dwarf_block_entry (SYMBOL_TYPE (symbol), frame, dlbaton->data, - dlbaton->size); -} - -/* Implementation of get_symbol_read_needs from - symbol_computed_ops. */ - -static enum symbol_needs_kind -locexpr_get_symbol_read_needs (struct symbol *symbol) -{ - struct dwarf2_locexpr_baton *dlbaton - = (struct dwarf2_locexpr_baton *) SYMBOL_LOCATION_BATON (symbol); - - return dwarf2_loc_desc_get_symbol_read_needs (dlbaton->data, dlbaton->size, - dlbaton->per_cu); -} - -/* Return true if DATA points to the end of a piece. END is one past - the last byte in the expression. */ - -static int -piece_end_p (const gdb_byte *data, const gdb_byte *end) -{ - return data == end || data[0] == DW_OP_piece || data[0] == DW_OP_bit_piece; -} - -/* Helper for locexpr_describe_location_piece that finds the name of a - DWARF register. */ - -static const char * -locexpr_regname (struct gdbarch *gdbarch, int dwarf_regnum) -{ - int regnum; - - /* This doesn't use dwarf_reg_to_regnum_or_error on purpose. - We'd rather print *something* here than throw an error. */ - regnum = dwarf_reg_to_regnum (gdbarch, dwarf_regnum); - /* gdbarch_register_name may just return "", return something more - descriptive for bad register numbers. */ - if (regnum == -1) - { - /* The text is output as "$bad_register_number". - That is why we use the underscores. */ - return _("bad_register_number"); - } - return gdbarch_register_name (gdbarch, regnum); -} - -/* Nicely describe a single piece of a location, returning an updated - position in the bytecode sequence. This function cannot recognize - all locations; if a location is not recognized, it simply returns - DATA. If there is an error during reading, e.g. we run off the end - of the buffer, an error is thrown. */ - -static const gdb_byte * -locexpr_describe_location_piece (struct symbol *symbol, struct ui_file *stream, - CORE_ADDR addr, struct objfile *objfile, - struct dwarf2_per_cu_data *per_cu, - const gdb_byte *data, const gdb_byte *end, - unsigned int addr_size) -{ - struct gdbarch *gdbarch = get_objfile_arch (objfile); - size_t leb128_size; - - if (data[0] >= DW_OP_reg0 && data[0] <= DW_OP_reg31) - { - fprintf_filtered (stream, _("a variable in $%s"), - locexpr_regname (gdbarch, data[0] - DW_OP_reg0)); - data += 1; - } - else if (data[0] == DW_OP_regx) - { - uint64_t reg; - - data = safe_read_uleb128 (data + 1, end, ®); - fprintf_filtered (stream, _("a variable in $%s"), - locexpr_regname (gdbarch, reg)); - } - else if (data[0] == DW_OP_fbreg) - { - const struct block *b; - struct symbol *framefunc; - int frame_reg = 0; - int64_t frame_offset; - const gdb_byte *base_data, *new_data, *save_data = data; - size_t base_size; - int64_t base_offset = 0; - - new_data = safe_read_sleb128 (data + 1, end, &frame_offset); - if (!piece_end_p (new_data, end)) - return data; - data = new_data; - - b = block_for_pc (addr); - - if (!b) - error (_("No block found for address for symbol \"%s\"."), - symbol->print_name ()); - - framefunc = block_linkage_function (b); - - if (!framefunc) - error (_("No function found for block for symbol \"%s\"."), - symbol->print_name ()); - - func_get_frame_base_dwarf_block (framefunc, addr, &base_data, &base_size); - - if (base_data[0] >= DW_OP_breg0 && base_data[0] <= DW_OP_breg31) - { - const gdb_byte *buf_end; - - frame_reg = base_data[0] - DW_OP_breg0; - buf_end = safe_read_sleb128 (base_data + 1, base_data + base_size, - &base_offset); - if (buf_end != base_data + base_size) - error (_("Unexpected opcode after " - "DW_OP_breg%u for symbol \"%s\"."), - frame_reg, symbol->print_name ()); - } - else if (base_data[0] >= DW_OP_reg0 && base_data[0] <= DW_OP_reg31) - { - /* The frame base is just the register, with no offset. */ - frame_reg = base_data[0] - DW_OP_reg0; - base_offset = 0; - } - else - { - /* We don't know what to do with the frame base expression, - so we can't trace this variable; give up. */ - return save_data; - } - - fprintf_filtered (stream, - _("a variable at frame base reg $%s offset %s+%s"), - locexpr_regname (gdbarch, frame_reg), - plongest (base_offset), plongest (frame_offset)); - } - else if (data[0] >= DW_OP_breg0 && data[0] <= DW_OP_breg31 - && piece_end_p (data, end)) - { - int64_t offset; - - data = safe_read_sleb128 (data + 1, end, &offset); - - fprintf_filtered (stream, - _("a variable at offset %s from base reg $%s"), - plongest (offset), - locexpr_regname (gdbarch, data[0] - DW_OP_breg0)); - } - - /* The location expression for a TLS variable looks like this (on a - 64-bit LE machine): - - DW_AT_location : 10 byte block: 3 4 0 0 0 0 0 0 0 e0 - (DW_OP_addr: 4; DW_OP_GNU_push_tls_address) - - 0x3 is the encoding for DW_OP_addr, which has an operand as long - as the size of an address on the target machine (here is 8 - bytes). Note that more recent version of GCC emit DW_OP_const4u - or DW_OP_const8u, depending on address size, rather than - DW_OP_addr. 0xe0 is the encoding for DW_OP_GNU_push_tls_address. - The operand represents the offset at which the variable is within - the thread local storage. */ - - else if (data + 1 + addr_size < end - && (data[0] == DW_OP_addr - || (addr_size == 4 && data[0] == DW_OP_const4u) - || (addr_size == 8 && data[0] == DW_OP_const8u)) - && (data[1 + addr_size] == DW_OP_GNU_push_tls_address - || data[1 + addr_size] == DW_OP_form_tls_address) - && piece_end_p (data + 2 + addr_size, end)) - { - ULONGEST offset; - offset = extract_unsigned_integer (data + 1, addr_size, - gdbarch_byte_order (gdbarch)); - - fprintf_filtered (stream, - _("a thread-local variable at offset 0x%s " - "in the thread-local storage for `%s'"), - phex_nz (offset, addr_size), objfile_name (objfile)); - - data += 1 + addr_size + 1; - } - - /* With -gsplit-dwarf a TLS variable can also look like this: - DW_AT_location : 3 byte block: fc 4 e0 - (DW_OP_GNU_const_index: 4; - DW_OP_GNU_push_tls_address) */ - else if (data + 3 <= end - && data + 1 + (leb128_size = skip_leb128 (data + 1, end)) < end - && data[0] == DW_OP_GNU_const_index - && leb128_size > 0 - && (data[1 + leb128_size] == DW_OP_GNU_push_tls_address - || data[1 + leb128_size] == DW_OP_form_tls_address) - && piece_end_p (data + 2 + leb128_size, end)) - { - uint64_t offset; - - data = safe_read_uleb128 (data + 1, end, &offset); - offset = dwarf2_read_addr_index (per_cu, offset); - fprintf_filtered (stream, - _("a thread-local variable at offset 0x%s " - "in the thread-local storage for `%s'"), - phex_nz (offset, addr_size), objfile_name (objfile)); - ++data; - } - - else if (data[0] >= DW_OP_lit0 - && data[0] <= DW_OP_lit31 - && data + 1 < end - && data[1] == DW_OP_stack_value) - { - fprintf_filtered (stream, _("the constant %d"), data[0] - DW_OP_lit0); - data += 2; - } - - return data; -} - -/* Disassemble an expression, stopping at the end of a piece or at the - end of the expression. Returns a pointer to the next unread byte - in the input expression. If ALL is nonzero, then this function - will keep going until it reaches the end of the expression. - If there is an error during reading, e.g. we run off the end - of the buffer, an error is thrown. */ - -static const gdb_byte * -disassemble_dwarf_expression (struct ui_file *stream, - struct gdbarch *arch, unsigned int addr_size, - int offset_size, const gdb_byte *start, - const gdb_byte *data, const gdb_byte *end, - int indent, int all, - struct dwarf2_per_cu_data *per_cu) -{ - while (data < end - && (all - || (data[0] != DW_OP_piece && data[0] != DW_OP_bit_piece))) - { - enum dwarf_location_atom op = (enum dwarf_location_atom) *data++; - uint64_t ul; - int64_t l; - const char *name; - - name = get_DW_OP_name (op); - - if (!name) - error (_("Unrecognized DWARF opcode 0x%02x at %ld"), - op, (long) (data - 1 - start)); - fprintf_filtered (stream, " %*ld: %s", indent + 4, - (long) (data - 1 - start), name); - - switch (op) - { - case DW_OP_addr: - ul = extract_unsigned_integer (data, addr_size, - gdbarch_byte_order (arch)); - data += addr_size; - fprintf_filtered (stream, " 0x%s", phex_nz (ul, addr_size)); - break; - - case DW_OP_const1u: - ul = extract_unsigned_integer (data, 1, gdbarch_byte_order (arch)); - data += 1; - fprintf_filtered (stream, " %s", pulongest (ul)); - break; - case DW_OP_const1s: - l = extract_signed_integer (data, 1, gdbarch_byte_order (arch)); - data += 1; - fprintf_filtered (stream, " %s", plongest (l)); - break; - case DW_OP_const2u: - ul = extract_unsigned_integer (data, 2, gdbarch_byte_order (arch)); - data += 2; - fprintf_filtered (stream, " %s", pulongest (ul)); - break; - case DW_OP_const2s: - l = extract_signed_integer (data, 2, gdbarch_byte_order (arch)); - data += 2; - fprintf_filtered (stream, " %s", plongest (l)); - break; - case DW_OP_const4u: - ul = extract_unsigned_integer (data, 4, gdbarch_byte_order (arch)); - data += 4; - fprintf_filtered (stream, " %s", pulongest (ul)); - break; - case DW_OP_const4s: - l = extract_signed_integer (data, 4, gdbarch_byte_order (arch)); - data += 4; - fprintf_filtered (stream, " %s", plongest (l)); - break; - case DW_OP_const8u: - ul = extract_unsigned_integer (data, 8, gdbarch_byte_order (arch)); - data += 8; - fprintf_filtered (stream, " %s", pulongest (ul)); - break; - case DW_OP_const8s: - l = extract_signed_integer (data, 8, gdbarch_byte_order (arch)); - data += 8; - fprintf_filtered (stream, " %s", plongest (l)); - break; - case DW_OP_constu: - data = safe_read_uleb128 (data, end, &ul); - fprintf_filtered (stream, " %s", pulongest (ul)); - break; - case DW_OP_consts: - data = safe_read_sleb128 (data, end, &l); - fprintf_filtered (stream, " %s", plongest (l)); - break; - - case DW_OP_reg0: - case DW_OP_reg1: - case DW_OP_reg2: - case DW_OP_reg3: - case DW_OP_reg4: - case DW_OP_reg5: - case DW_OP_reg6: - case DW_OP_reg7: - case DW_OP_reg8: - case DW_OP_reg9: - case DW_OP_reg10: - case DW_OP_reg11: - case DW_OP_reg12: - case DW_OP_reg13: - case DW_OP_reg14: - case DW_OP_reg15: - case DW_OP_reg16: - case DW_OP_reg17: - case DW_OP_reg18: - case DW_OP_reg19: - case DW_OP_reg20: - case DW_OP_reg21: - case DW_OP_reg22: - case DW_OP_reg23: - case DW_OP_reg24: - case DW_OP_reg25: - case DW_OP_reg26: - case DW_OP_reg27: - case DW_OP_reg28: - case DW_OP_reg29: - case DW_OP_reg30: - case DW_OP_reg31: - fprintf_filtered (stream, " [$%s]", - locexpr_regname (arch, op - DW_OP_reg0)); - break; - - case DW_OP_regx: - data = safe_read_uleb128 (data, end, &ul); - fprintf_filtered (stream, " %s [$%s]", pulongest (ul), - locexpr_regname (arch, (int) ul)); - break; - - case DW_OP_implicit_value: - data = safe_read_uleb128 (data, end, &ul); - data += ul; - fprintf_filtered (stream, " %s", pulongest (ul)); - break; - - case DW_OP_breg0: - case DW_OP_breg1: - case DW_OP_breg2: - case DW_OP_breg3: - case DW_OP_breg4: - case DW_OP_breg5: - case DW_OP_breg6: - case DW_OP_breg7: - case DW_OP_breg8: - case DW_OP_breg9: - case DW_OP_breg10: - case DW_OP_breg11: - case DW_OP_breg12: - case DW_OP_breg13: - case DW_OP_breg14: - case DW_OP_breg15: - case DW_OP_breg16: - case DW_OP_breg17: - case DW_OP_breg18: - case DW_OP_breg19: - case DW_OP_breg20: - case DW_OP_breg21: - case DW_OP_breg22: - case DW_OP_breg23: - case DW_OP_breg24: - case DW_OP_breg25: - case DW_OP_breg26: - case DW_OP_breg27: - case DW_OP_breg28: - case DW_OP_breg29: - case DW_OP_breg30: - case DW_OP_breg31: - data = safe_read_sleb128 (data, end, &l); - fprintf_filtered (stream, " %s [$%s]", plongest (l), - locexpr_regname (arch, op - DW_OP_breg0)); - break; - - case DW_OP_bregx: - data = safe_read_uleb128 (data, end, &ul); - data = safe_read_sleb128 (data, end, &l); - fprintf_filtered (stream, " register %s [$%s] offset %s", - pulongest (ul), - locexpr_regname (arch, (int) ul), - plongest (l)); - break; - - case DW_OP_fbreg: - data = safe_read_sleb128 (data, end, &l); - fprintf_filtered (stream, " %s", plongest (l)); - break; - - case DW_OP_xderef_size: - case DW_OP_deref_size: - case DW_OP_pick: - fprintf_filtered (stream, " %d", *data); - ++data; - break; - - case DW_OP_plus_uconst: - data = safe_read_uleb128 (data, end, &ul); - fprintf_filtered (stream, " %s", pulongest (ul)); - break; - - case DW_OP_skip: - l = extract_signed_integer (data, 2, gdbarch_byte_order (arch)); - data += 2; - fprintf_filtered (stream, " to %ld", - (long) (data + l - start)); - break; - - case DW_OP_bra: - l = extract_signed_integer (data, 2, gdbarch_byte_order (arch)); - data += 2; - fprintf_filtered (stream, " %ld", - (long) (data + l - start)); - break; - - case DW_OP_call2: - ul = extract_unsigned_integer (data, 2, gdbarch_byte_order (arch)); - data += 2; - fprintf_filtered (stream, " offset %s", phex_nz (ul, 2)); - break; - - case DW_OP_call4: - ul = extract_unsigned_integer (data, 4, gdbarch_byte_order (arch)); - data += 4; - fprintf_filtered (stream, " offset %s", phex_nz (ul, 4)); - break; - - case DW_OP_call_ref: - ul = extract_unsigned_integer (data, offset_size, - gdbarch_byte_order (arch)); - data += offset_size; - fprintf_filtered (stream, " offset %s", phex_nz (ul, offset_size)); - break; - - case DW_OP_piece: - data = safe_read_uleb128 (data, end, &ul); - fprintf_filtered (stream, " %s (bytes)", pulongest (ul)); - break; - - case DW_OP_bit_piece: - { - uint64_t offset; - - data = safe_read_uleb128 (data, end, &ul); - data = safe_read_uleb128 (data, end, &offset); - fprintf_filtered (stream, " size %s offset %s (bits)", - pulongest (ul), pulongest (offset)); - } - break; - - case DW_OP_implicit_pointer: - case DW_OP_GNU_implicit_pointer: - { - ul = extract_unsigned_integer (data, offset_size, - gdbarch_byte_order (arch)); - data += offset_size; - - data = safe_read_sleb128 (data, end, &l); - - fprintf_filtered (stream, " DIE %s offset %s", - phex_nz (ul, offset_size), - plongest (l)); - } - break; - - case DW_OP_deref_type: - case DW_OP_GNU_deref_type: - { - int deref_addr_size = *data++; - struct type *type; - - data = safe_read_uleb128 (data, end, &ul); - cu_offset offset = (cu_offset) ul; - type = dwarf2_get_die_type (offset, per_cu); - fprintf_filtered (stream, "<"); - type_print (type, "", stream, -1); - fprintf_filtered (stream, " [0x%s]> %d", - phex_nz (to_underlying (offset), 0), - deref_addr_size); - } - break; - - case DW_OP_const_type: - case DW_OP_GNU_const_type: - { - struct type *type; - - data = safe_read_uleb128 (data, end, &ul); - cu_offset type_die = (cu_offset) ul; - type = dwarf2_get_die_type (type_die, per_cu); - fprintf_filtered (stream, "<"); - type_print (type, "", stream, -1); - fprintf_filtered (stream, " [0x%s]>", - phex_nz (to_underlying (type_die), 0)); - } - break; - - case DW_OP_regval_type: - case DW_OP_GNU_regval_type: - { - uint64_t reg; - struct type *type; - - data = safe_read_uleb128 (data, end, ®); - data = safe_read_uleb128 (data, end, &ul); - cu_offset type_die = (cu_offset) ul; - - type = dwarf2_get_die_type (type_die, per_cu); - fprintf_filtered (stream, "<"); - type_print (type, "", stream, -1); - fprintf_filtered (stream, " [0x%s]> [$%s]", - phex_nz (to_underlying (type_die), 0), - locexpr_regname (arch, reg)); - } - break; - - case DW_OP_convert: - case DW_OP_GNU_convert: - case DW_OP_reinterpret: - case DW_OP_GNU_reinterpret: - { - data = safe_read_uleb128 (data, end, &ul); - cu_offset type_die = (cu_offset) ul; - - if (to_underlying (type_die) == 0) - fprintf_filtered (stream, "<0>"); - else - { - struct type *type; - - type = dwarf2_get_die_type (type_die, per_cu); - fprintf_filtered (stream, "<"); - type_print (type, "", stream, -1); - fprintf_filtered (stream, " [0x%s]>", - phex_nz (to_underlying (type_die), 0)); - } - } - break; - - case DW_OP_entry_value: - case DW_OP_GNU_entry_value: - data = safe_read_uleb128 (data, end, &ul); - fputc_filtered ('\n', stream); - disassemble_dwarf_expression (stream, arch, addr_size, offset_size, - start, data, data + ul, indent + 2, - all, per_cu); - data += ul; - continue; - - case DW_OP_GNU_parameter_ref: - ul = extract_unsigned_integer (data, 4, gdbarch_byte_order (arch)); - data += 4; - fprintf_filtered (stream, " offset %s", phex_nz (ul, 4)); - break; - - case DW_OP_addrx: - case DW_OP_GNU_addr_index: - data = safe_read_uleb128 (data, end, &ul); - ul = dwarf2_read_addr_index (per_cu, ul); - fprintf_filtered (stream, " 0x%s", phex_nz (ul, addr_size)); - break; - case DW_OP_GNU_const_index: - data = safe_read_uleb128 (data, end, &ul); - ul = dwarf2_read_addr_index (per_cu, ul); - fprintf_filtered (stream, " %s", pulongest (ul)); - break; - - case DW_OP_GNU_variable_value: - ul = extract_unsigned_integer (data, offset_size, - gdbarch_byte_order (arch)); - data += offset_size; - fprintf_filtered (stream, " offset %s", phex_nz (ul, offset_size)); - break; - } - - fprintf_filtered (stream, "\n"); - } - - return data; -} - -/* Describe a single location, which may in turn consist of multiple - pieces. */ - -static void -locexpr_describe_location_1 (struct symbol *symbol, CORE_ADDR addr, - struct ui_file *stream, - const gdb_byte *data, size_t size, - struct objfile *objfile, unsigned int addr_size, - int offset_size, struct dwarf2_per_cu_data *per_cu) -{ - const gdb_byte *end = data + size; - int first_piece = 1, bad = 0; - - while (data < end) - { - const gdb_byte *here = data; - int disassemble = 1; - - if (first_piece) - first_piece = 0; - else - fprintf_filtered (stream, _(", and ")); - - if (!dwarf_always_disassemble) - { - data = locexpr_describe_location_piece (symbol, stream, - addr, objfile, per_cu, - data, end, addr_size); - /* If we printed anything, or if we have an empty piece, - then don't disassemble. */ - if (data != here - || data[0] == DW_OP_piece - || data[0] == DW_OP_bit_piece) - disassemble = 0; - } - if (disassemble) - { - fprintf_filtered (stream, _("a complex DWARF expression:\n")); - data = disassemble_dwarf_expression (stream, - get_objfile_arch (objfile), - addr_size, offset_size, data, - data, end, 0, - dwarf_always_disassemble, - per_cu); - } - - if (data < end) - { - int empty = data == here; - - if (disassemble) - fprintf_filtered (stream, " "); - if (data[0] == DW_OP_piece) - { - uint64_t bytes; - - data = safe_read_uleb128 (data + 1, end, &bytes); - - if (empty) - fprintf_filtered (stream, _("an empty %s-byte piece"), - pulongest (bytes)); - else - fprintf_filtered (stream, _(" [%s-byte piece]"), - pulongest (bytes)); - } - else if (data[0] == DW_OP_bit_piece) - { - uint64_t bits, offset; - - data = safe_read_uleb128 (data + 1, end, &bits); - data = safe_read_uleb128 (data, end, &offset); - - if (empty) - fprintf_filtered (stream, - _("an empty %s-bit piece"), - pulongest (bits)); - else - fprintf_filtered (stream, - _(" [%s-bit piece, offset %s bits]"), - pulongest (bits), pulongest (offset)); - } - else - { - bad = 1; - break; - } - } - } - - if (bad || data > end) - error (_("Corrupted DWARF2 expression for \"%s\"."), - symbol->print_name ()); -} - -/* Print a natural-language description of SYMBOL to STREAM. This - version is for a symbol with a single location. */ - -static void -locexpr_describe_location (struct symbol *symbol, CORE_ADDR addr, - struct ui_file *stream) -{ - struct dwarf2_locexpr_baton *dlbaton - = (struct dwarf2_locexpr_baton *) SYMBOL_LOCATION_BATON (symbol); - struct objfile *objfile = dwarf2_per_cu_objfile (dlbaton->per_cu); - unsigned int addr_size = dwarf2_per_cu_addr_size (dlbaton->per_cu); - int offset_size = dwarf2_per_cu_offset_size (dlbaton->per_cu); - - locexpr_describe_location_1 (symbol, addr, stream, - dlbaton->data, dlbaton->size, - objfile, addr_size, offset_size, - dlbaton->per_cu); -} - -/* Describe the location of SYMBOL as an agent value in VALUE, generating - any necessary bytecode in AX. */ - -static void -locexpr_tracepoint_var_ref (struct symbol *symbol, struct agent_expr *ax, - struct axs_value *value) -{ - struct dwarf2_locexpr_baton *dlbaton - = (struct dwarf2_locexpr_baton *) SYMBOL_LOCATION_BATON (symbol); - unsigned int addr_size = dwarf2_per_cu_addr_size (dlbaton->per_cu); - - if (dlbaton->size == 0) - value->optimized_out = 1; - else - dwarf2_compile_expr_to_ax (ax, value, addr_size, dlbaton->data, - dlbaton->data + dlbaton->size, dlbaton->per_cu); -} - -/* symbol_computed_ops 'generate_c_location' method. */ - -static void -locexpr_generate_c_location (struct symbol *sym, string_file *stream, - struct gdbarch *gdbarch, - unsigned char *registers_used, - CORE_ADDR pc, const char *result_name) -{ - struct dwarf2_locexpr_baton *dlbaton - = (struct dwarf2_locexpr_baton *) SYMBOL_LOCATION_BATON (sym); - unsigned int addr_size = dwarf2_per_cu_addr_size (dlbaton->per_cu); - - if (dlbaton->size == 0) - error (_("symbol \"%s\" is optimized out"), sym->natural_name ()); - - compile_dwarf_expr_to_c (stream, result_name, - sym, pc, gdbarch, registers_used, addr_size, - dlbaton->data, dlbaton->data + dlbaton->size, - dlbaton->per_cu); -} - -/* The set of location functions used with the DWARF-2 expression - evaluator. */ -const struct symbol_computed_ops dwarf2_locexpr_funcs = { - locexpr_read_variable, - locexpr_read_variable_at_entry, - locexpr_get_symbol_read_needs, - locexpr_describe_location, - 0, /* location_has_loclist */ - locexpr_tracepoint_var_ref, - locexpr_generate_c_location -}; - - -/* Wrapper functions for location lists. These generally find - the appropriate location expression and call something above. */ - -/* Return the value of SYMBOL in FRAME using the DWARF-2 expression - evaluator to calculate the location. */ -static struct value * -loclist_read_variable (struct symbol *symbol, struct frame_info *frame) -{ - struct dwarf2_loclist_baton *dlbaton - = (struct dwarf2_loclist_baton *) SYMBOL_LOCATION_BATON (symbol); - struct value *val; - const gdb_byte *data; - size_t size; - CORE_ADDR pc = frame ? get_frame_address_in_block (frame) : 0; - - data = dwarf2_find_location_expression (dlbaton, &size, pc); - val = dwarf2_evaluate_loc_desc (SYMBOL_TYPE (symbol), frame, data, size, - dlbaton->per_cu); - - return val; -} - -/* Read variable SYMBOL like loclist_read_variable at (callee) FRAME's function - entry. SYMBOL should be a function parameter, otherwise NO_ENTRY_VALUE_ERROR - will be thrown. - - Function always returns non-NULL value, it may be marked optimized out if - inferior frame information is not available. It throws NO_ENTRY_VALUE_ERROR - if it cannot resolve the parameter for any reason. */ - -static struct value * -loclist_read_variable_at_entry (struct symbol *symbol, struct frame_info *frame) -{ - struct dwarf2_loclist_baton *dlbaton - = (struct dwarf2_loclist_baton *) SYMBOL_LOCATION_BATON (symbol); - const gdb_byte *data; - size_t size; - CORE_ADDR pc; - - if (frame == NULL || !get_frame_func_if_available (frame, &pc)) - return allocate_optimized_out_value (SYMBOL_TYPE (symbol)); - - data = dwarf2_find_location_expression (dlbaton, &size, pc); - if (data == NULL) - return allocate_optimized_out_value (SYMBOL_TYPE (symbol)); - - return value_of_dwarf_block_entry (SYMBOL_TYPE (symbol), frame, data, size); -} - -/* Implementation of get_symbol_read_needs from - symbol_computed_ops. */ - -static enum symbol_needs_kind -loclist_symbol_needs (struct symbol *symbol) -{ - /* If there's a location list, then assume we need to have a frame - to choose the appropriate location expression. With tracking of - global variables this is not necessarily true, but such tracking - is disabled in GCC at the moment until we figure out how to - represent it. */ - - return SYMBOL_NEEDS_FRAME; -} - -/* Print a natural-language description of SYMBOL to STREAM. This - version applies when there is a list of different locations, each - with a specified address range. */ - -static void -loclist_describe_location (struct symbol *symbol, CORE_ADDR addr, - struct ui_file *stream) -{ - struct dwarf2_loclist_baton *dlbaton - = (struct dwarf2_loclist_baton *) SYMBOL_LOCATION_BATON (symbol); - const gdb_byte *loc_ptr, *buf_end; - struct objfile *objfile = dwarf2_per_cu_objfile (dlbaton->per_cu); - struct gdbarch *gdbarch = get_objfile_arch (objfile); - enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); - unsigned int addr_size = dwarf2_per_cu_addr_size (dlbaton->per_cu); - int offset_size = dwarf2_per_cu_offset_size (dlbaton->per_cu); - int signed_addr_p = bfd_get_sign_extend_vma (objfile->obfd); - /* Adjust base_address for relocatable objects. */ - CORE_ADDR base_offset = dwarf2_per_cu_text_offset (dlbaton->per_cu); - CORE_ADDR base_address = dlbaton->base_address + base_offset; - int done = 0; - - loc_ptr = dlbaton->data; - buf_end = dlbaton->data + dlbaton->size; - - fprintf_filtered (stream, _("multi-location:\n")); - - /* Iterate through locations until we run out. */ - while (!done) - { - CORE_ADDR low = 0, high = 0; /* init for gcc -Wall */ - int length; - enum debug_loc_kind kind; - const gdb_byte *new_ptr = NULL; /* init for gcc -Wall */ - - if (dlbaton->from_dwo) - kind = decode_debug_loc_dwo_addresses (dlbaton->per_cu, - loc_ptr, buf_end, &new_ptr, - &low, &high, byte_order); - else - kind = decode_debug_loc_addresses (loc_ptr, buf_end, &new_ptr, - &low, &high, - byte_order, addr_size, - signed_addr_p); - loc_ptr = new_ptr; - switch (kind) - { - case DEBUG_LOC_END_OF_LIST: - done = 1; - continue; - case DEBUG_LOC_BASE_ADDRESS: - base_address = high + base_offset; - fprintf_filtered (stream, _(" Base address %s"), - paddress (gdbarch, base_address)); - continue; - case DEBUG_LOC_START_END: - case DEBUG_LOC_START_LENGTH: - break; - case DEBUG_LOC_BUFFER_OVERFLOW: - case DEBUG_LOC_INVALID_ENTRY: - error (_("Corrupted DWARF expression for symbol \"%s\"."), - symbol->print_name ()); - default: - gdb_assert_not_reached ("bad debug_loc_kind"); - } - - /* Otherwise, a location expression entry. */ - low += base_address; - high += base_address; - - low = gdbarch_adjust_dwarf2_addr (gdbarch, low); - high = gdbarch_adjust_dwarf2_addr (gdbarch, high); - - length = extract_unsigned_integer (loc_ptr, 2, byte_order); - loc_ptr += 2; - - /* (It would improve readability to print only the minimum - necessary digits of the second number of the range.) */ - fprintf_filtered (stream, _(" Range %s-%s: "), - paddress (gdbarch, low), paddress (gdbarch, high)); - - /* Now describe this particular location. */ - locexpr_describe_location_1 (symbol, low, stream, loc_ptr, length, - objfile, addr_size, offset_size, - dlbaton->per_cu); - - fprintf_filtered (stream, "\n"); - - loc_ptr += length; - } -} - -/* Describe the location of SYMBOL as an agent value in VALUE, generating - any necessary bytecode in AX. */ -static void -loclist_tracepoint_var_ref (struct symbol *symbol, struct agent_expr *ax, - struct axs_value *value) -{ - struct dwarf2_loclist_baton *dlbaton - = (struct dwarf2_loclist_baton *) SYMBOL_LOCATION_BATON (symbol); - const gdb_byte *data; - size_t size; - unsigned int addr_size = dwarf2_per_cu_addr_size (dlbaton->per_cu); - - data = dwarf2_find_location_expression (dlbaton, &size, ax->scope); - if (size == 0) - value->optimized_out = 1; - else - dwarf2_compile_expr_to_ax (ax, value, addr_size, data, data + size, - dlbaton->per_cu); -} - -/* symbol_computed_ops 'generate_c_location' method. */ - -static void -loclist_generate_c_location (struct symbol *sym, string_file *stream, - struct gdbarch *gdbarch, - unsigned char *registers_used, - CORE_ADDR pc, const char *result_name) -{ - struct dwarf2_loclist_baton *dlbaton - = (struct dwarf2_loclist_baton *) SYMBOL_LOCATION_BATON (sym); - unsigned int addr_size = dwarf2_per_cu_addr_size (dlbaton->per_cu); - const gdb_byte *data; - size_t size; - - data = dwarf2_find_location_expression (dlbaton, &size, pc); - if (size == 0) - error (_("symbol \"%s\" is optimized out"), sym->natural_name ()); - - compile_dwarf_expr_to_c (stream, result_name, - sym, pc, gdbarch, registers_used, addr_size, - data, data + size, - dlbaton->per_cu); -} - -/* The set of location functions used with the DWARF-2 expression - evaluator and location lists. */ -const struct symbol_computed_ops dwarf2_loclist_funcs = { - loclist_read_variable, - loclist_read_variable_at_entry, - loclist_symbol_needs, - loclist_describe_location, - 1, /* location_has_loclist */ - loclist_tracepoint_var_ref, - loclist_generate_c_location -}; - -void -_initialize_dwarf2loc (void) -{ - add_setshow_zuinteger_cmd ("entry-values", class_maintenance, - &entry_values_debug, - _("Set entry values and tail call frames " - "debugging."), - _("Show entry values and tail call frames " - "debugging."), - _("When non-zero, the process of determining " - "parameter values from function entry point " - "and tail call frames will be printed."), - NULL, - show_entry_values_debug, - &setdebuglist, &showdebuglist); -} diff -Nru gdb-9.1/gdb/dwarf2loc.h gdb-10.2/gdb/dwarf2loc.h --- gdb-9.1/gdb/dwarf2loc.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/dwarf2loc.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,324 +0,0 @@ -/* DWARF 2 location expression support for GDB. - - Copyright (C) 2003-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#if !defined (DWARF2LOC_H) -#define DWARF2LOC_H - -#include "dwarf2expr.h" - -struct symbol_computed_ops; -struct objfile; -struct dwarf2_per_cu_data; -struct dwarf2_loclist_baton; -struct agent_expr; -struct axs_value; - -/* This header is private to the DWARF-2 reader. It is shared between - dwarf2read.c and dwarf2loc.c. */ - -/* `set debug entry-values' setting. */ -extern unsigned int entry_values_debug; - -/* Return the OBJFILE associated with the compilation unit CU. If CU - came from a separate debuginfo file, then the master objfile is - returned. */ -struct objfile *dwarf2_per_cu_objfile (struct dwarf2_per_cu_data *cu); - -/* Return the address size given in the compilation unit header for CU. */ -int dwarf2_per_cu_addr_size (struct dwarf2_per_cu_data *cu); - -/* Return the DW_FORM_ref_addr size given in the compilation unit header for - CU. */ -int dwarf2_per_cu_ref_addr_size (struct dwarf2_per_cu_data *cu); - -/* Return the offset size given in the compilation unit header for CU. */ -int dwarf2_per_cu_offset_size (struct dwarf2_per_cu_data *cu); - -/* Return the text offset of the CU. The returned offset comes from - this CU's objfile. If this objfile came from a separate debuginfo - file, then the offset may be different from the corresponding - offset in the parent objfile. */ -CORE_ADDR dwarf2_per_cu_text_offset (struct dwarf2_per_cu_data *cu); - -short dwarf2_version (struct dwarf2_per_cu_data *per_cu); - -/* Find a particular location expression from a location list. */ -const gdb_byte *dwarf2_find_location_expression - (struct dwarf2_loclist_baton *baton, - size_t *locexpr_length, - CORE_ADDR pc); - -struct dwarf2_locexpr_baton dwarf2_fetch_die_loc_sect_off - (sect_offset offset_in_cu, struct dwarf2_per_cu_data *per_cu, - CORE_ADDR (*get_frame_pc) (void *baton), - void *baton, bool resolve_abstract_p = false); - -struct dwarf2_locexpr_baton dwarf2_fetch_die_loc_cu_off - (cu_offset offset_in_cu, struct dwarf2_per_cu_data *per_cu, - CORE_ADDR (*get_frame_pc) (void *baton), - void *baton); - -extern const gdb_byte *dwarf2_fetch_constant_bytes (sect_offset, - struct dwarf2_per_cu_data *, - struct obstack *, - LONGEST *); - -struct type *dwarf2_fetch_die_type_sect_off (sect_offset, - struct dwarf2_per_cu_data *); - -struct type *dwarf2_get_die_type (cu_offset die_offset, - struct dwarf2_per_cu_data *per_cu); - -/* Find the frame base information for FRAMEFUNC at PC. START is an - out parameter which is set to point to the DWARF expression to - compute. LENGTH is an out parameter which is set to the length of - the DWARF expression. This throws an exception on error or if an - expression is not found; the returned length will never be - zero. */ - -extern void func_get_frame_base_dwarf_block (struct symbol *framefunc, - CORE_ADDR pc, - const gdb_byte **start, - size_t *length); - -/* Evaluate a location description, starting at DATA and with length - SIZE, to find the current location of variable of TYPE in the context - of FRAME. */ - -struct value *dwarf2_evaluate_loc_desc (struct type *type, - struct frame_info *frame, - const gdb_byte *data, - size_t size, - struct dwarf2_per_cu_data *per_cu); - -/* A chain of addresses that might be needed to resolve a dynamic - property. */ - -struct property_addr_info -{ - /* The type of the object whose dynamic properties, if any, are - being resolved. */ - struct type *type; - - /* If not NULL, a buffer containing the object's value. */ - const gdb_byte *valaddr; - - /* The address of that object. */ - CORE_ADDR addr; - - /* If not NULL, a pointer to the info for the object containing - the object described by this node. */ - struct property_addr_info *next; -}; - -/* Converts a dynamic property into a static one. FRAME is the frame in which - the property is evaluated; if NULL, the selected frame (if any) is used - instead. - - ADDR_STACK is the stack of addresses that might be needed to evaluate the - property. When evaluating a property that is not related to a type, it can - be NULL. - - Returns true if PROP could be converted and the static value is passed - back into VALUE, otherwise returns false. */ - -bool dwarf2_evaluate_property (const struct dynamic_prop *prop, - struct frame_info *frame, - struct property_addr_info *addr_stack, - CORE_ADDR *value); - -/* A helper for the compiler interface that compiles a single dynamic - property to C code. - - STREAM is where the C code is to be written. - RESULT_NAME is the name of the generated variable. - GDBARCH is the architecture to use. - REGISTERS_USED is a bit-vector that is filled to note which - registers are required by the generated expression. - PROP is the property for which code is generated. - ADDRESS is the address at which the property is considered to be - evaluated. - SYM the originating symbol, used for error reporting. */ - -void dwarf2_compile_property_to_c (string_file *stream, - const char *result_name, - struct gdbarch *gdbarch, - unsigned char *registers_used, - const struct dynamic_prop *prop, - CORE_ADDR address, - struct symbol *sym); - -CORE_ADDR dwarf2_read_addr_index (struct dwarf2_per_cu_data *per_cu, - unsigned int addr_index); - -/* The symbol location baton types used by the DWARF-2 reader (i.e. - SYMBOL_LOCATION_BATON for a LOC_COMPUTED symbol). "struct - dwarf2_locexpr_baton" is for a symbol with a single location - expression; "struct dwarf2_loclist_baton" is for a symbol with a - location list. */ - -struct dwarf2_locexpr_baton -{ - /* Pointer to the start of the location expression. Valid only if SIZE is - not zero. */ - const gdb_byte *data; - - /* Length of the location expression. For optimized out expressions it is - zero. */ - size_t size; - - /* When true this location expression is a reference and actually - describes the address at which the value of the attribute can be - found. When false the expression provides the value of the attribute - directly. */ - bool is_reference; - - /* The compilation unit containing the symbol whose location - we're computing. */ - struct dwarf2_per_cu_data *per_cu; -}; - -struct dwarf2_loclist_baton -{ - /* The initial base address for the location list, based on the compilation - unit. */ - CORE_ADDR base_address; - - /* Pointer to the start of the location list. */ - const gdb_byte *data; - - /* Length of the location list. */ - size_t size; - - /* The compilation unit containing the symbol whose location - we're computing. */ - struct dwarf2_per_cu_data *per_cu; - - /* Non-zero if the location list lives in .debug_loc.dwo. - The format of entries in this section are different. */ - unsigned char from_dwo; -}; - -/* The baton used when a dynamic property is an offset to a parent - type. This can be used, for instance, then the bound of an array - inside a record is determined by the value of another field inside - that record. */ - -struct dwarf2_offset_baton -{ - /* The offset from the parent type where the value of the property - is stored. In the example provided above, this would be the offset - of the field being used as the array bound. */ - LONGEST offset; - - /* The type of the object whose property is dynamic. In the example - provided above, this would the array's index type. */ - struct type *type; -}; - -/* A dynamic property is either expressed as a single location expression - or a location list. If the property is an indirection, pointing to - another die, keep track of the targeted type in PROPERTY_TYPE. - Alternatively, if the property location gives the property value - directly then it will have PROPERTY_TYPE. */ - -struct dwarf2_property_baton -{ - /* If the property is an indirection, we need to evaluate the location - in the context of the type PROPERTY_TYPE. If the property is supplied - by value then it will be of PROPERTY_TYPE. This field should never be - NULL. */ - struct type *property_type; - union - { - /* Location expression either evaluated in the context of - PROPERTY_TYPE, or a value of type PROPERTY_TYPE. */ - struct dwarf2_locexpr_baton locexpr; - - /* Location list to be evaluated in the context of PROPERTY_TYPE. */ - struct dwarf2_loclist_baton loclist; - - /* The location is an offset to PROPERTY_TYPE. */ - struct dwarf2_offset_baton offset_info; - }; -}; - -extern const struct symbol_computed_ops dwarf2_locexpr_funcs; -extern const struct symbol_computed_ops dwarf2_loclist_funcs; - -extern const struct symbol_block_ops dwarf2_block_frame_base_locexpr_funcs; -extern const struct symbol_block_ops dwarf2_block_frame_base_loclist_funcs; - -/* Compile a DWARF location expression to an agent expression. - - EXPR is the agent expression we are building. - LOC is the agent value we modify. - ARCH is the architecture. - ADDR_SIZE is the size of addresses, in bytes. - OP_PTR is the start of the location expression. - OP_END is one past the last byte of the location expression. - - This will throw an exception for various kinds of errors -- for - example, if the expression cannot be compiled, or if the expression - is invalid. */ - -extern void dwarf2_compile_expr_to_ax (struct agent_expr *expr, - struct axs_value *loc, - unsigned int addr_size, - const gdb_byte *op_ptr, - const gdb_byte *op_end, - struct dwarf2_per_cu_data *per_cu); - -/* Determined tail calls for constructing virtual tail call frames. */ - -struct call_site_chain - { - /* Initially CALLERS == CALLEES == LENGTH. For partially ambiguous result - CALLERS + CALLEES < LENGTH. */ - int callers, callees, length; - - /* Variably sized array with LENGTH elements. Later [0..CALLERS-1] contain - top (GDB "prev") sites and [LENGTH-CALLEES..LENGTH-1] contain bottom - (GDB "next") sites. One is interested primarily in the PC field. */ - struct call_site *call_site[1]; - }; - -struct call_site_stuff; -extern struct call_site_chain *call_site_find_chain (struct gdbarch *gdbarch, - CORE_ADDR caller_pc, - CORE_ADDR callee_pc); - -/* A helper function to convert a DWARF register to an arch register. - ARCH is the architecture. - DWARF_REG is the register. - If DWARF_REG is bad then a complaint is issued and -1 is returned. - Note: Some targets get this wrong. */ - -extern int dwarf_reg_to_regnum (struct gdbarch *arch, int dwarf_reg); - -/* A wrapper on dwarf_reg_to_regnum to throw an exception if the - DWARF register cannot be translated to an architecture register. - This takes a ULONGEST instead of an int because some callers actually have - a ULONGEST. Negative values passed as ints will still be flagged as - invalid. */ - -extern int dwarf_reg_to_regnum_or_error (struct gdbarch *arch, - ULONGEST dwarf_reg); - -#endif /* dwarf2loc.h */ diff -Nru gdb-9.1/gdb/dwarf2read.c gdb-10.2/gdb/dwarf2read.c --- gdb-9.1/gdb/dwarf2read.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/dwarf2read.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,26207 +0,0 @@ -/* DWARF 2 debugging format support for GDB. - - Copyright (C) 1994-2020 Free Software Foundation, Inc. - - Adapted by Gary Funck (gary@intrepid.com), Intrepid Technology, - Inc. with support from Florida State University (under contract - with the Ada Joint Program Office), and Silicon Graphics, Inc. - Initial contribution by Brent Benson, Harris Computer Systems, Inc., - based on Fred Fish's (Cygnus Support) implementation of DWARF 1 - support. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -/* FIXME: Various die-reading functions need to be more careful with - reading off the end of the section. - E.g., load_partial_dies, read_partial_die. */ - -#include "defs.h" -#include "dwarf2read.h" -#include "dwarf-index-cache.h" -#include "dwarf-index-common.h" -#include "bfd.h" -#include "elf-bfd.h" -#include "symtab.h" -#include "gdbtypes.h" -#include "objfiles.h" -#include "dwarf2.h" -#include "buildsym.h" -#include "demangle.h" -#include "gdb-demangle.h" -#include "filenames.h" /* for DOSish file names */ -#include "macrotab.h" -#include "language.h" -#include "complaints.h" -#include "dwarf2expr.h" -#include "dwarf2loc.h" -#include "cp-support.h" -#include "hashtab.h" -#include "command.h" -#include "gdbcmd.h" -#include "block.h" -#include "addrmap.h" -#include "typeprint.h" -#include "psympriv.h" -#include "c-lang.h" -#include "go-lang.h" -#include "valprint.h" -#include "gdbcore.h" /* for gnutarget */ -#include "gdb/gdb-index.h" -#include "gdb_bfd.h" -#include "f-lang.h" -#include "source.h" -#include "build-id.h" -#include "namespace.h" -#include "gdbsupport/function-view.h" -#include "gdbsupport/gdb_optional.h" -#include "gdbsupport/underlying.h" -#include "gdbsupport/hash_enum.h" -#include "filename-seen-cache.h" -#include "producer.h" -#include <fcntl.h> -#include <algorithm> -#include <unordered_map> -#include "gdbsupport/selftest.h" -#include "rust-lang.h" -#include "gdbsupport/pathstuff.h" - -/* When == 1, print basic high level tracing messages. - When > 1, be more verbose. - This is in contrast to the low level DIE reading of dwarf_die_debug. */ -static unsigned int dwarf_read_debug = 0; - -/* When non-zero, dump DIEs after they are read in. */ -static unsigned int dwarf_die_debug = 0; - -/* When non-zero, dump line number entries as they are read in. */ -static unsigned int dwarf_line_debug = 0; - -/* When true, cross-check physname against demangler. */ -static bool check_physname = false; - -/* When true, do not reject deprecated .gdb_index sections. */ -static bool use_deprecated_index_sections = false; - -static const struct objfile_key<dwarf2_per_objfile> dwarf2_objfile_data_key; - -/* The "aclass" indices for various kinds of computed DWARF symbols. */ - -static int dwarf2_locexpr_index; -static int dwarf2_loclist_index; -static int dwarf2_locexpr_block_index; -static int dwarf2_loclist_block_index; - -/* An index into a (C++) symbol name component in a symbol name as - recorded in the mapped_index's symbol table. For each C++ symbol - in the symbol table, we record one entry for the start of each - component in the symbol in a table of name components, and then - sort the table, in order to be able to binary search symbol names, - ignoring leading namespaces, both completion and regular look up. - For example, for symbol "A::B::C", we'll have an entry that points - to "A::B::C", another that points to "B::C", and another for "C". - Note that function symbols in GDB index have no parameter - information, just the function/method names. You can convert a - name_component to a "const char *" using the - 'mapped_index::symbol_name_at(offset_type)' method. */ - -struct name_component -{ - /* Offset in the symbol name where the component starts. Stored as - a (32-bit) offset instead of a pointer to save memory and improve - locality on 64-bit architectures. */ - offset_type name_offset; - - /* The symbol's index in the symbol and constant pool tables of a - mapped_index. */ - offset_type idx; -}; - -/* Base class containing bits shared by both .gdb_index and - .debug_name indexes. */ - -struct mapped_index_base -{ - mapped_index_base () = default; - DISABLE_COPY_AND_ASSIGN (mapped_index_base); - - /* The name_component table (a sorted vector). See name_component's - description above. */ - std::vector<name_component> name_components; - - /* How NAME_COMPONENTS is sorted. */ - enum case_sensitivity name_components_casing; - - /* Return the number of names in the symbol table. */ - virtual size_t symbol_name_count () const = 0; - - /* Get the name of the symbol at IDX in the symbol table. */ - virtual const char *symbol_name_at (offset_type idx) const = 0; - - /* Return whether the name at IDX in the symbol table should be - ignored. */ - virtual bool symbol_name_slot_invalid (offset_type idx) const - { - return false; - } - - /* Build the symbol name component sorted vector, if we haven't - yet. */ - void build_name_components (); - - /* Returns the lower (inclusive) and upper (exclusive) bounds of the - possible matches for LN_NO_PARAMS in the name component - vector. */ - std::pair<std::vector<name_component>::const_iterator, - std::vector<name_component>::const_iterator> - find_name_components_bounds (const lookup_name_info &ln_no_params, - enum language lang) const; - - /* Prevent deleting/destroying via a base class pointer. */ -protected: - ~mapped_index_base() = default; -}; - -/* A description of the mapped index. The file format is described in - a comment by the code that writes the index. */ -struct mapped_index final : public mapped_index_base -{ - /* A slot/bucket in the symbol table hash. */ - struct symbol_table_slot - { - const offset_type name; - const offset_type vec; - }; - - /* Index data format version. */ - int version = 0; - - /* The address table data. */ - gdb::array_view<const gdb_byte> address_table; - - /* The symbol table, implemented as a hash table. */ - gdb::array_view<symbol_table_slot> symbol_table; - - /* A pointer to the constant pool. */ - const char *constant_pool = nullptr; - - bool symbol_name_slot_invalid (offset_type idx) const override - { - const auto &bucket = this->symbol_table[idx]; - return bucket.name == 0 && bucket.vec == 0; - } - - /* Convenience method to get at the name of the symbol at IDX in the - symbol table. */ - const char *symbol_name_at (offset_type idx) const override - { return this->constant_pool + MAYBE_SWAP (this->symbol_table[idx].name); } - - size_t symbol_name_count () const override - { return this->symbol_table.size (); } -}; - -/* A description of the mapped .debug_names. - Uninitialized map has CU_COUNT 0. */ -struct mapped_debug_names final : public mapped_index_base -{ - mapped_debug_names (struct dwarf2_per_objfile *dwarf2_per_objfile_) - : dwarf2_per_objfile (dwarf2_per_objfile_) - {} - - struct dwarf2_per_objfile *dwarf2_per_objfile; - bfd_endian dwarf5_byte_order; - bool dwarf5_is_dwarf64; - bool augmentation_is_gdb; - uint8_t offset_size; - uint32_t cu_count = 0; - uint32_t tu_count, bucket_count, name_count; - const gdb_byte *cu_table_reordered, *tu_table_reordered; - const uint32_t *bucket_table_reordered, *hash_table_reordered; - const gdb_byte *name_table_string_offs_reordered; - const gdb_byte *name_table_entry_offs_reordered; - const gdb_byte *entry_pool; - - struct index_val - { - ULONGEST dwarf_tag; - struct attr - { - /* Attribute name DW_IDX_*. */ - ULONGEST dw_idx; - - /* Attribute form DW_FORM_*. */ - ULONGEST form; - - /* Value if FORM is DW_FORM_implicit_const. */ - LONGEST implicit_const; - }; - std::vector<attr> attr_vec; - }; - - std::unordered_map<ULONGEST, index_val> abbrev_map; - - const char *namei_to_name (uint32_t namei) const; - - /* Implementation of the mapped_index_base virtual interface, for - the name_components cache. */ - - const char *symbol_name_at (offset_type idx) const override - { return namei_to_name (idx); } - - size_t symbol_name_count () const override - { return this->name_count; } -}; - -/* See dwarf2read.h. */ - -dwarf2_per_objfile * -get_dwarf2_per_objfile (struct objfile *objfile) -{ - return dwarf2_objfile_data_key.get (objfile); -} - -/* Default names of the debugging sections. */ - -/* Note that if the debugging section has been compressed, it might - have a name like .zdebug_info. */ - -static const struct dwarf2_debug_sections dwarf2_elf_names = -{ - { ".debug_info", ".zdebug_info" }, - { ".debug_abbrev", ".zdebug_abbrev" }, - { ".debug_line", ".zdebug_line" }, - { ".debug_loc", ".zdebug_loc" }, - { ".debug_loclists", ".zdebug_loclists" }, - { ".debug_macinfo", ".zdebug_macinfo" }, - { ".debug_macro", ".zdebug_macro" }, - { ".debug_str", ".zdebug_str" }, - { ".debug_line_str", ".zdebug_line_str" }, - { ".debug_ranges", ".zdebug_ranges" }, - { ".debug_rnglists", ".zdebug_rnglists" }, - { ".debug_types", ".zdebug_types" }, - { ".debug_addr", ".zdebug_addr" }, - { ".debug_frame", ".zdebug_frame" }, - { ".eh_frame", NULL }, - { ".gdb_index", ".zgdb_index" }, - { ".debug_names", ".zdebug_names" }, - { ".debug_aranges", ".zdebug_aranges" }, - 23 -}; - -/* List of DWO/DWP sections. */ - -static const struct dwop_section_names -{ - struct dwarf2_section_names abbrev_dwo; - struct dwarf2_section_names info_dwo; - struct dwarf2_section_names line_dwo; - struct dwarf2_section_names loc_dwo; - struct dwarf2_section_names loclists_dwo; - struct dwarf2_section_names macinfo_dwo; - struct dwarf2_section_names macro_dwo; - struct dwarf2_section_names str_dwo; - struct dwarf2_section_names str_offsets_dwo; - struct dwarf2_section_names types_dwo; - struct dwarf2_section_names cu_index; - struct dwarf2_section_names tu_index; -} -dwop_section_names = -{ - { ".debug_abbrev.dwo", ".zdebug_abbrev.dwo" }, - { ".debug_info.dwo", ".zdebug_info.dwo" }, - { ".debug_line.dwo", ".zdebug_line.dwo" }, - { ".debug_loc.dwo", ".zdebug_loc.dwo" }, - { ".debug_loclists.dwo", ".zdebug_loclists.dwo" }, - { ".debug_macinfo.dwo", ".zdebug_macinfo.dwo" }, - { ".debug_macro.dwo", ".zdebug_macro.dwo" }, - { ".debug_str.dwo", ".zdebug_str.dwo" }, - { ".debug_str_offsets.dwo", ".zdebug_str_offsets.dwo" }, - { ".debug_types.dwo", ".zdebug_types.dwo" }, - { ".debug_cu_index", ".zdebug_cu_index" }, - { ".debug_tu_index", ".zdebug_tu_index" }, -}; - -/* local data types */ - -/* The data in a compilation unit header, after target2host - translation, looks like this. */ -struct comp_unit_head -{ - unsigned int length; - short version; - unsigned char addr_size; - unsigned char signed_addr_p; - sect_offset abbrev_sect_off; - - /* Size of file offsets; either 4 or 8. */ - unsigned int offset_size; - - /* Size of the length field; either 4 or 12. */ - unsigned int initial_length_size; - - enum dwarf_unit_type unit_type; - - /* Offset to the first byte of this compilation unit header in the - .debug_info section, for resolving relative reference dies. */ - sect_offset sect_off; - - /* Offset to first die in this cu from the start of the cu. - This will be the first byte following the compilation unit header. */ - cu_offset first_die_cu_offset; - - - /* 64-bit signature of this unit. For type units, it denotes the signature of - the type (DW_UT_type in DWARF 4, additionally DW_UT_split_type in DWARF 5). - Also used in DWARF 5, to denote the dwo id when the unit type is - DW_UT_skeleton or DW_UT_split_compile. */ - ULONGEST signature; - - /* For types, offset in the type's DIE of the type defined by this TU. */ - cu_offset type_cu_offset_in_tu; -}; - -/* Type used for delaying computation of method physnames. - See comments for compute_delayed_physnames. */ -struct delayed_method_info -{ - /* The type to which the method is attached, i.e., its parent class. */ - struct type *type; - - /* The index of the method in the type's function fieldlists. */ - int fnfield_index; - - /* The index of the method in the fieldlist. */ - int index; - - /* The name of the DIE. */ - const char *name; - - /* The DIE associated with this method. */ - struct die_info *die; -}; - -/* Internal state when decoding a particular compilation unit. */ -struct dwarf2_cu -{ - explicit dwarf2_cu (struct dwarf2_per_cu_data *per_cu); - ~dwarf2_cu (); - - DISABLE_COPY_AND_ASSIGN (dwarf2_cu); - - /* TU version of handle_DW_AT_stmt_list for read_type_unit_scope. - Create the set of symtabs used by this TU, or if this TU is sharing - symtabs with another TU and the symtabs have already been created - then restore those symtabs in the line header. - We don't need the pc/line-number mapping for type units. */ - void setup_type_unit_groups (struct die_info *die); - - /* Start a symtab for DWARF. NAME, COMP_DIR, LOW_PC are passed to the - buildsym_compunit constructor. */ - struct compunit_symtab *start_symtab (const char *name, - const char *comp_dir, - CORE_ADDR low_pc); - - /* Reset the builder. */ - void reset_builder () { m_builder.reset (); } - - /* The header of the compilation unit. */ - struct comp_unit_head header {}; - - /* Base address of this compilation unit. */ - CORE_ADDR base_address = 0; - - /* Non-zero if base_address has been set. */ - int base_known = 0; - - /* The language we are debugging. */ - enum language language = language_unknown; - const struct language_defn *language_defn = nullptr; - - const char *producer = nullptr; - -private: - /* The symtab builder for this CU. This is only non-NULL when full - symbols are being read. */ - std::unique_ptr<buildsym_compunit> m_builder; - -public: - /* The generic symbol table building routines have separate lists for - file scope symbols and all all other scopes (local scopes). So - we need to select the right one to pass to add_symbol_to_list(). - We do it by keeping a pointer to the correct list in list_in_scope. - - FIXME: The original dwarf code just treated the file scope as the - first local scope, and all other local scopes as nested local - scopes, and worked fine. Check to see if we really need to - distinguish these in buildsym.c. */ - struct pending **list_in_scope = nullptr; - - /* Hash table holding all the loaded partial DIEs - with partial_die->offset.SECT_OFF as hash. */ - htab_t partial_dies = nullptr; - - /* Storage for things with the same lifetime as this read-in compilation - unit, including partial DIEs. */ - auto_obstack comp_unit_obstack; - - /* When multiple dwarf2_cu structures are living in memory, this field - chains them all together, so that they can be released efficiently. - We will probably also want a generation counter so that most-recently-used - compilation units are cached... */ - struct dwarf2_per_cu_data *read_in_chain = nullptr; - - /* Backlink to our per_cu entry. */ - struct dwarf2_per_cu_data *per_cu; - - /* How many compilation units ago was this CU last referenced? */ - int last_used = 0; - - /* A hash table of DIE cu_offset for following references with - die_info->offset.sect_off as hash. */ - htab_t die_hash = nullptr; - - /* Full DIEs if read in. */ - struct die_info *dies = nullptr; - - /* A set of pointers to dwarf2_per_cu_data objects for compilation - units referenced by this one. Only set during full symbol processing; - partial symbol tables do not have dependencies. */ - htab_t dependencies = nullptr; - - /* Header data from the line table, during full symbol processing. */ - struct line_header *line_header = nullptr; - /* Non-NULL if LINE_HEADER is owned by this DWARF_CU. Otherwise, - it's owned by dwarf2_per_objfile::line_header_hash. If non-NULL, - this is the DW_TAG_compile_unit die for this CU. We'll hold on - to the line header as long as this DIE is being processed. See - process_die_scope. */ - die_info *line_header_die_owner = nullptr; - - /* A list of methods which need to have physnames computed - after all type information has been read. */ - std::vector<delayed_method_info> method_list; - - /* To be copied to symtab->call_site_htab. */ - htab_t call_site_htab = nullptr; - - /* Non-NULL if this CU came from a DWO file. - There is an invariant here that is important to remember: - Except for attributes copied from the top level DIE in the "main" - (or "stub") file in preparation for reading the DWO file - (e.g., DW_AT_GNU_addr_base), we KISS: there is only *one* CU. - Either there isn't a DWO file (in which case this is NULL and the point - is moot), or there is and either we're not going to read it (in which - case this is NULL) or there is and we are reading it (in which case this - is non-NULL). */ - struct dwo_unit *dwo_unit = nullptr; - - /* The DW_AT_addr_base attribute if present, zero otherwise - (zero is a valid value though). - Note this value comes from the Fission stub CU/TU's DIE. */ - ULONGEST addr_base = 0; - - /* The DW_AT_ranges_base attribute if present, zero otherwise - (zero is a valid value though). - Note this value comes from the Fission stub CU/TU's DIE. - Also note that the value is zero in the non-DWO case so this value can - be used without needing to know whether DWO files are in use or not. - N.B. This does not apply to DW_AT_ranges appearing in - DW_TAG_compile_unit dies. This is a bit of a wart, consider if ever - DW_AT_ranges appeared in the DW_TAG_compile_unit of DWO DIEs: then - DW_AT_ranges_base *would* have to be applied, and we'd have to care - whether the DW_AT_ranges attribute came from the skeleton or DWO. */ - ULONGEST ranges_base = 0; - - /* When reading debug info generated by older versions of rustc, we - have to rewrite some union types to be struct types with a - variant part. This rewriting must be done after the CU is fully - read in, because otherwise at the point of rewriting some struct - type might not have been fully processed. So, we keep a list of - all such types here and process them after expansion. */ - std::vector<struct type *> rust_unions; - - /* Mark used when releasing cached dies. */ - bool mark : 1; - - /* This CU references .debug_loc. See the symtab->locations_valid field. - This test is imperfect as there may exist optimized debug code not using - any location list and still facing inlining issues if handled as - unoptimized code. For a future better test see GCC PR other/32998. */ - bool has_loclist : 1; - - /* These cache the results for producer_is_* fields. CHECKED_PRODUCER is true - if all the producer_is_* fields are valid. This information is cached - because profiling CU expansion showed excessive time spent in - producer_is_gxx_lt_4_6. */ - bool checked_producer : 1; - bool producer_is_gxx_lt_4_6 : 1; - bool producer_is_gcc_lt_4_3 : 1; - bool producer_is_icc : 1; - bool producer_is_icc_lt_14 : 1; - bool producer_is_codewarrior : 1; - - /* When true, the file that we're processing is known to have - debugging info for C++ namespaces. GCC 3.3.x did not produce - this information, but later versions do. */ - - bool processing_has_namespace_info : 1; - - struct partial_die_info *find_partial_die (sect_offset sect_off); - - /* If this CU was inherited by another CU (via specification, - abstract_origin, etc), this is the ancestor CU. */ - dwarf2_cu *ancestor; - - /* Get the buildsym_compunit for this CU. */ - buildsym_compunit *get_builder () - { - /* If this CU has a builder associated with it, use that. */ - if (m_builder != nullptr) - return m_builder.get (); - - /* Otherwise, search ancestors for a valid builder. */ - if (ancestor != nullptr) - return ancestor->get_builder (); - - return nullptr; - } -}; - -/* A struct that can be used as a hash key for tables based on DW_AT_stmt_list. - This includes type_unit_group and quick_file_names. */ - -struct stmt_list_hash -{ - /* The DWO unit this table is from or NULL if there is none. */ - struct dwo_unit *dwo_unit; - - /* Offset in .debug_line or .debug_line.dwo. */ - sect_offset line_sect_off; -}; - -/* Each element of dwarf2_per_objfile->type_unit_groups is a pointer to - an object of this type. */ - -struct type_unit_group -{ - /* dwarf2read.c's main "handle" on a TU symtab. - To simplify things we create an artificial CU that "includes" all the - type units using this stmt_list so that the rest of the code still has - a "per_cu" handle on the symtab. - This PER_CU is recognized by having no section. */ -#define IS_TYPE_UNIT_GROUP(per_cu) ((per_cu)->section == NULL) - struct dwarf2_per_cu_data per_cu; - - /* The TUs that share this DW_AT_stmt_list entry. - This is added to while parsing type units to build partial symtabs, - and is deleted afterwards and not used again. */ - std::vector<signatured_type *> *tus; - - /* The compunit symtab. - Type units in a group needn't all be defined in the same source file, - so we create an essentially anonymous symtab as the compunit symtab. */ - struct compunit_symtab *compunit_symtab; - - /* The data used to construct the hash key. */ - struct stmt_list_hash hash; - - /* The number of symtabs from the line header. - The value here must match line_header.num_file_names. */ - unsigned int num_symtabs; - - /* The symbol tables for this TU (obtained from the files listed in - DW_AT_stmt_list). - WARNING: The order of entries here must match the order of entries - in the line header. After the first TU using this type_unit_group, the - line header for the subsequent TUs is recreated from this. This is done - because we need to use the same symtabs for each TU using the same - DW_AT_stmt_list value. Also note that symtabs may be repeated here, - there's no guarantee the line header doesn't have duplicate entries. */ - struct symtab **symtabs; -}; - -/* These sections are what may appear in a (real or virtual) DWO file. */ - -struct dwo_sections -{ - struct dwarf2_section_info abbrev; - struct dwarf2_section_info line; - struct dwarf2_section_info loc; - struct dwarf2_section_info loclists; - struct dwarf2_section_info macinfo; - struct dwarf2_section_info macro; - struct dwarf2_section_info str; - struct dwarf2_section_info str_offsets; - /* In the case of a virtual DWO file, these two are unused. */ - struct dwarf2_section_info info; - std::vector<dwarf2_section_info> types; -}; - -/* CUs/TUs in DWP/DWO files. */ - -struct dwo_unit -{ - /* Backlink to the containing struct dwo_file. */ - struct dwo_file *dwo_file; - - /* The "id" that distinguishes this CU/TU. - .debug_info calls this "dwo_id", .debug_types calls this "signature". - Since signatures came first, we stick with it for consistency. */ - ULONGEST signature; - - /* The section this CU/TU lives in, in the DWO file. */ - struct dwarf2_section_info *section; - - /* Same as dwarf2_per_cu_data:{sect_off,length} but in the DWO section. */ - sect_offset sect_off; - unsigned int length; - - /* For types, offset in the type's DIE of the type defined by this TU. */ - cu_offset type_offset_in_tu; -}; - -/* include/dwarf2.h defines the DWP section codes. - It defines a max value but it doesn't define a min value, which we - use for error checking, so provide one. */ - -enum dwp_v2_section_ids -{ - DW_SECT_MIN = 1 -}; - -/* Data for one DWO file. - - This includes virtual DWO files (a virtual DWO file is a DWO file as it - appears in a DWP file). DWP files don't really have DWO files per se - - comdat folding of types "loses" the DWO file they came from, and from - a high level view DWP files appear to contain a mass of random types. - However, to maintain consistency with the non-DWP case we pretend DWP - files contain virtual DWO files, and we assign each TU with one virtual - DWO file (generally based on the line and abbrev section offsets - - a heuristic that seems to work in practice). */ - -struct dwo_file -{ - dwo_file () = default; - DISABLE_COPY_AND_ASSIGN (dwo_file); - - /* The DW_AT_GNU_dwo_name attribute. - For virtual DWO files the name is constructed from the section offsets - of abbrev,line,loc,str_offsets so that we combine virtual DWO files - from related CU+TUs. */ - const char *dwo_name = nullptr; - - /* The DW_AT_comp_dir attribute. */ - const char *comp_dir = nullptr; - - /* The bfd, when the file is open. Otherwise this is NULL. - This is unused(NULL) for virtual DWO files where we use dwp_file.dbfd. */ - gdb_bfd_ref_ptr dbfd; - - /* The sections that make up this DWO file. - Remember that for virtual DWO files in DWP V2, these are virtual - sections (for lack of a better name). */ - struct dwo_sections sections {}; - - /* The CUs in the file. - Each element is a struct dwo_unit. Multiple CUs per DWO are supported as - an extension to handle LLVM's Link Time Optimization output (where - multiple source files may be compiled into a single object/dwo pair). */ - htab_t cus {}; - - /* Table of TUs in the file. - Each element is a struct dwo_unit. */ - htab_t tus {}; -}; - -/* These sections are what may appear in a DWP file. */ - -struct dwp_sections -{ - /* These are used by both DWP version 1 and 2. */ - struct dwarf2_section_info str; - struct dwarf2_section_info cu_index; - struct dwarf2_section_info tu_index; - - /* These are only used by DWP version 2 files. - In DWP version 1 the .debug_info.dwo, .debug_types.dwo, and other - sections are referenced by section number, and are not recorded here. - In DWP version 2 there is at most one copy of all these sections, each - section being (effectively) comprised of the concatenation of all of the - individual sections that exist in the version 1 format. - To keep the code simple we treat each of these concatenated pieces as a - section itself (a virtual section?). */ - struct dwarf2_section_info abbrev; - struct dwarf2_section_info info; - struct dwarf2_section_info line; - struct dwarf2_section_info loc; - struct dwarf2_section_info macinfo; - struct dwarf2_section_info macro; - struct dwarf2_section_info str_offsets; - struct dwarf2_section_info types; -}; - -/* These sections are what may appear in a virtual DWO file in DWP version 1. - A virtual DWO file is a DWO file as it appears in a DWP file. */ - -struct virtual_v1_dwo_sections -{ - struct dwarf2_section_info abbrev; - struct dwarf2_section_info line; - struct dwarf2_section_info loc; - struct dwarf2_section_info macinfo; - struct dwarf2_section_info macro; - struct dwarf2_section_info str_offsets; - /* Each DWP hash table entry records one CU or one TU. - That is recorded here, and copied to dwo_unit.section. */ - struct dwarf2_section_info info_or_types; -}; - -/* Similar to virtual_v1_dwo_sections, but for DWP version 2. - In version 2, the sections of the DWO files are concatenated together - and stored in one section of that name. Thus each ELF section contains - several "virtual" sections. */ - -struct virtual_v2_dwo_sections -{ - bfd_size_type abbrev_offset; - bfd_size_type abbrev_size; - - bfd_size_type line_offset; - bfd_size_type line_size; - - bfd_size_type loc_offset; - bfd_size_type loc_size; - - bfd_size_type macinfo_offset; - bfd_size_type macinfo_size; - - bfd_size_type macro_offset; - bfd_size_type macro_size; - - bfd_size_type str_offsets_offset; - bfd_size_type str_offsets_size; - - /* Each DWP hash table entry records one CU or one TU. - That is recorded here, and copied to dwo_unit.section. */ - bfd_size_type info_or_types_offset; - bfd_size_type info_or_types_size; -}; - -/* Contents of DWP hash tables. */ - -struct dwp_hash_table -{ - uint32_t version, nr_columns; - uint32_t nr_units, nr_slots; - const gdb_byte *hash_table, *unit_table; - union - { - struct - { - const gdb_byte *indices; - } v1; - struct - { - /* This is indexed by column number and gives the id of the section - in that column. */ -#define MAX_NR_V2_DWO_SECTIONS \ - (1 /* .debug_info or .debug_types */ \ - + 1 /* .debug_abbrev */ \ - + 1 /* .debug_line */ \ - + 1 /* .debug_loc */ \ - + 1 /* .debug_str_offsets */ \ - + 1 /* .debug_macro or .debug_macinfo */) - int section_ids[MAX_NR_V2_DWO_SECTIONS]; - const gdb_byte *offsets; - const gdb_byte *sizes; - } v2; - } section_pool; -}; - -/* Data for one DWP file. */ - -struct dwp_file -{ - dwp_file (const char *name_, gdb_bfd_ref_ptr &&abfd) - : name (name_), - dbfd (std::move (abfd)) - { - } - - /* Name of the file. */ - const char *name; - - /* File format version. */ - int version = 0; - - /* The bfd. */ - gdb_bfd_ref_ptr dbfd; - - /* Section info for this file. */ - struct dwp_sections sections {}; - - /* Table of CUs in the file. */ - const struct dwp_hash_table *cus = nullptr; - - /* Table of TUs in the file. */ - const struct dwp_hash_table *tus = nullptr; - - /* Tables of loaded CUs/TUs. Each entry is a struct dwo_unit *. */ - htab_t loaded_cus {}; - htab_t loaded_tus {}; - - /* Table to map ELF section numbers to their sections. - This is only needed for the DWP V1 file format. */ - unsigned int num_sections = 0; - asection **elf_sections = nullptr; -}; - -/* Struct used to pass misc. parameters to read_die_and_children, et - al. which are used for both .debug_info and .debug_types dies. - All parameters here are unchanging for the life of the call. This - struct exists to abstract away the constant parameters of die reading. */ - -struct die_reader_specs -{ - /* The bfd of die_section. */ - bfd* abfd; - - /* The CU of the DIE we are parsing. */ - struct dwarf2_cu *cu; - - /* Non-NULL if reading a DWO file (including one packaged into a DWP). */ - struct dwo_file *dwo_file; - - /* The section the die comes from. - This is either .debug_info or .debug_types, or the .dwo variants. */ - struct dwarf2_section_info *die_section; - - /* die_section->buffer. */ - const gdb_byte *buffer; - - /* The end of the buffer. */ - const gdb_byte *buffer_end; - - /* The value of the DW_AT_comp_dir attribute. */ - const char *comp_dir; - - /* The abbreviation table to use when reading the DIEs. */ - struct abbrev_table *abbrev_table; -}; - -/* Type of function passed to init_cutu_and_read_dies, et.al. */ -typedef void (die_reader_func_ftype) (const struct die_reader_specs *reader, - const gdb_byte *info_ptr, - struct die_info *comp_unit_die, - int has_children, - void *data); - -/* dir_index is 1-based in DWARF 4 and before, and is 0-based in DWARF 5 and - later. */ -typedef int dir_index; - -/* file_name_index is 1-based in DWARF 4 and before, and is 0-based in DWARF 5 - and later. */ -typedef int file_name_index; - -struct file_entry -{ - file_entry () = default; - - file_entry (const char *name_, dir_index d_index_, - unsigned int mod_time_, unsigned int length_) - : name (name_), - d_index (d_index_), - mod_time (mod_time_), - length (length_) - {} - - /* Return the include directory at D_INDEX stored in LH. Returns - NULL if D_INDEX is out of bounds. */ - const char *include_dir (const line_header *lh) const; - - /* The file name. Note this is an observing pointer. The memory is - owned by debug_line_buffer. */ - const char *name {}; - - /* The directory index (1-based). */ - dir_index d_index {}; - - unsigned int mod_time {}; - - unsigned int length {}; - - /* True if referenced by the Line Number Program. */ - bool included_p {}; - - /* The associated symbol table, if any. */ - struct symtab *symtab {}; -}; - -/* The line number information for a compilation unit (found in the - .debug_line section) begins with a "statement program header", - which contains the following information. */ -struct line_header -{ - line_header () - : offset_in_dwz {} - {} - - /* Add an entry to the include directory table. */ - void add_include_dir (const char *include_dir); - - /* Add an entry to the file name table. */ - void add_file_name (const char *name, dir_index d_index, - unsigned int mod_time, unsigned int length); - - /* Return the include dir at INDEX (0-based in DWARF 5 and 1-based before). - Returns NULL if INDEX is out of bounds. */ - const char *include_dir_at (dir_index index) const - { - int vec_index; - if (version >= 5) - vec_index = index; - else - vec_index = index - 1; - if (vec_index < 0 || vec_index >= m_include_dirs.size ()) - return NULL; - return m_include_dirs[vec_index]; - } - - bool is_valid_file_index (int file_index) - { - if (version >= 5) - return 0 <= file_index && file_index < file_names_size (); - return 1 <= file_index && file_index <= file_names_size (); - } - - /* Return the file name at INDEX (0-based in DWARF 5 and 1-based before). - Returns NULL if INDEX is out of bounds. */ - file_entry *file_name_at (file_name_index index) - { - int vec_index; - if (version >= 5) - vec_index = index; - else - vec_index = index - 1; - if (vec_index < 0 || vec_index >= m_file_names.size ()) - return NULL; - return &m_file_names[vec_index]; - } - - /* The indexes are 0-based in DWARF 5 and 1-based in DWARF 4. Therefore, - this method should only be used to iterate through all file entries in an - index-agnostic manner. */ - std::vector<file_entry> &file_names () - { return m_file_names; } - - /* Offset of line number information in .debug_line section. */ - sect_offset sect_off {}; - - /* OFFSET is for struct dwz_file associated with dwarf2_per_objfile. */ - unsigned offset_in_dwz : 1; /* Can't initialize bitfields in-class. */ - - unsigned int total_length {}; - unsigned short version {}; - unsigned int header_length {}; - unsigned char minimum_instruction_length {}; - unsigned char maximum_ops_per_instruction {}; - unsigned char default_is_stmt {}; - int line_base {}; - unsigned char line_range {}; - unsigned char opcode_base {}; - - /* standard_opcode_lengths[i] is the number of operands for the - standard opcode whose value is i. This means that - standard_opcode_lengths[0] is unused, and the last meaningful - element is standard_opcode_lengths[opcode_base - 1]. */ - std::unique_ptr<unsigned char[]> standard_opcode_lengths; - - int file_names_size () - { return m_file_names.size(); } - - /* The start and end of the statement program following this - header. These point into dwarf2_per_objfile->line_buffer. */ - const gdb_byte *statement_program_start {}, *statement_program_end {}; - - private: - /* The include_directories table. Note these are observing - pointers. The memory is owned by debug_line_buffer. */ - std::vector<const char *> m_include_dirs; - - /* The file_names table. This is private because the meaning of indexes - differs among DWARF versions (The first valid index is 1 in DWARF 4 and - before, and is 0 in DWARF 5 and later). So the client should use - file_name_at method for access. */ - std::vector<file_entry> m_file_names; -}; - -typedef std::unique_ptr<line_header> line_header_up; - -const char * -file_entry::include_dir (const line_header *lh) const -{ - return lh->include_dir_at (d_index); -} - -/* When we construct a partial symbol table entry we only - need this much information. */ -struct partial_die_info : public allocate_on_obstack - { - partial_die_info (sect_offset sect_off, struct abbrev_info *abbrev); - - /* Disable assign but still keep copy ctor, which is needed - load_partial_dies. */ - partial_die_info& operator=(const partial_die_info& rhs) = delete; - - /* Adjust the partial die before generating a symbol for it. This - function may set the is_external flag or change the DIE's - name. */ - void fixup (struct dwarf2_cu *cu); - - /* Read a minimal amount of information into the minimal die - structure. */ - const gdb_byte *read (const struct die_reader_specs *reader, - const struct abbrev_info &abbrev, - const gdb_byte *info_ptr); - - /* Offset of this DIE. */ - const sect_offset sect_off; - - /* DWARF-2 tag for this DIE. */ - const ENUM_BITFIELD(dwarf_tag) tag : 16; - - /* Assorted flags describing the data found in this DIE. */ - const unsigned int has_children : 1; - - unsigned int is_external : 1; - unsigned int is_declaration : 1; - unsigned int has_type : 1; - unsigned int has_specification : 1; - unsigned int has_pc_info : 1; - unsigned int may_be_inlined : 1; - - /* This DIE has been marked DW_AT_main_subprogram. */ - unsigned int main_subprogram : 1; - - /* Flag set if the SCOPE field of this structure has been - computed. */ - unsigned int scope_set : 1; - - /* Flag set if the DIE has a byte_size attribute. */ - unsigned int has_byte_size : 1; - - /* Flag set if the DIE has a DW_AT_const_value attribute. */ - unsigned int has_const_value : 1; - - /* Flag set if any of the DIE's children are template arguments. */ - unsigned int has_template_arguments : 1; - - /* Flag set if fixup has been called on this die. */ - unsigned int fixup_called : 1; - - /* Flag set if DW_TAG_imported_unit uses DW_FORM_GNU_ref_alt. */ - unsigned int is_dwz : 1; - - /* Flag set if spec_offset uses DW_FORM_GNU_ref_alt. */ - unsigned int spec_is_dwz : 1; - - /* The name of this DIE. Normally the value of DW_AT_name, but - sometimes a default name for unnamed DIEs. */ - const char *name = nullptr; - - /* The linkage name, if present. */ - const char *linkage_name = nullptr; - - /* The scope to prepend to our children. This is generally - allocated on the comp_unit_obstack, so will disappear - when this compilation unit leaves the cache. */ - const char *scope = nullptr; - - /* Some data associated with the partial DIE. The tag determines - which field is live. */ - union - { - /* The location description associated with this DIE, if any. */ - struct dwarf_block *locdesc; - /* The offset of an import, for DW_TAG_imported_unit. */ - sect_offset sect_off; - } d {}; - - /* If HAS_PC_INFO, the PC range associated with this DIE. */ - CORE_ADDR lowpc = 0; - CORE_ADDR highpc = 0; - - /* Pointer into the info_buffer (or types_buffer) pointing at the target of - DW_AT_sibling, if any. */ - /* NOTE: This member isn't strictly necessary, partial_die_info::read - could return DW_AT_sibling values to its caller load_partial_dies. */ - const gdb_byte *sibling = nullptr; - - /* If HAS_SPECIFICATION, the offset of the DIE referred to by - DW_AT_specification (or DW_AT_abstract_origin or - DW_AT_extension). */ - sect_offset spec_offset {}; - - /* Pointers to this DIE's parent, first child, and next sibling, - if any. */ - struct partial_die_info *die_parent = nullptr; - struct partial_die_info *die_child = nullptr; - struct partial_die_info *die_sibling = nullptr; - - friend struct partial_die_info * - dwarf2_cu::find_partial_die (sect_offset sect_off); - - private: - /* Only need to do look up in dwarf2_cu::find_partial_die. */ - partial_die_info (sect_offset sect_off) - : partial_die_info (sect_off, DW_TAG_padding, 0) - { - } - - partial_die_info (sect_offset sect_off_, enum dwarf_tag tag_, - int has_children_) - : sect_off (sect_off_), tag (tag_), has_children (has_children_) - { - is_external = 0; - is_declaration = 0; - has_type = 0; - has_specification = 0; - has_pc_info = 0; - may_be_inlined = 0; - main_subprogram = 0; - scope_set = 0; - has_byte_size = 0; - has_const_value = 0; - has_template_arguments = 0; - fixup_called = 0; - is_dwz = 0; - spec_is_dwz = 0; - } - }; - -/* This data structure holds the information of an abbrev. */ -struct abbrev_info - { - unsigned int number; /* number identifying abbrev */ - enum dwarf_tag tag; /* dwarf tag */ - unsigned short has_children; /* boolean */ - unsigned short num_attrs; /* number of attributes */ - struct attr_abbrev *attrs; /* an array of attribute descriptions */ - struct abbrev_info *next; /* next in chain */ - }; - -struct attr_abbrev - { - ENUM_BITFIELD(dwarf_attribute) name : 16; - ENUM_BITFIELD(dwarf_form) form : 16; - - /* It is valid only if FORM is DW_FORM_implicit_const. */ - LONGEST implicit_const; - }; - -/* Size of abbrev_table.abbrev_hash_table. */ -#define ABBREV_HASH_SIZE 121 - -/* Top level data structure to contain an abbreviation table. */ - -struct abbrev_table -{ - explicit abbrev_table (sect_offset off) - : sect_off (off) - { - m_abbrevs = - XOBNEWVEC (&abbrev_obstack, struct abbrev_info *, ABBREV_HASH_SIZE); - memset (m_abbrevs, 0, ABBREV_HASH_SIZE * sizeof (struct abbrev_info *)); - } - - DISABLE_COPY_AND_ASSIGN (abbrev_table); - - /* Allocate space for a struct abbrev_info object in - ABBREV_TABLE. */ - struct abbrev_info *alloc_abbrev (); - - /* Add an abbreviation to the table. */ - void add_abbrev (unsigned int abbrev_number, struct abbrev_info *abbrev); - - /* Look up an abbrev in the table. - Returns NULL if the abbrev is not found. */ - - struct abbrev_info *lookup_abbrev (unsigned int abbrev_number); - - - /* Where the abbrev table came from. - This is used as a sanity check when the table is used. */ - const sect_offset sect_off; - - /* Storage for the abbrev table. */ - auto_obstack abbrev_obstack; - -private: - - /* Hash table of abbrevs. - This is an array of size ABBREV_HASH_SIZE allocated in abbrev_obstack. - It could be statically allocated, but the previous code didn't so we - don't either. */ - struct abbrev_info **m_abbrevs; -}; - -typedef std::unique_ptr<struct abbrev_table> abbrev_table_up; - -/* Attributes have a name and a value. */ -struct attribute - { - ENUM_BITFIELD(dwarf_attribute) name : 16; - ENUM_BITFIELD(dwarf_form) form : 15; - - /* Has DW_STRING already been updated by dwarf2_canonicalize_name? This - field should be in u.str (existing only for DW_STRING) but it is kept - here for better struct attribute alignment. */ - unsigned int string_is_canonical : 1; - - union - { - const char *str; - struct dwarf_block *blk; - ULONGEST unsnd; - LONGEST snd; - CORE_ADDR addr; - ULONGEST signature; - } - u; - }; - -/* This data structure holds a complete die structure. */ -struct die_info - { - /* DWARF-2 tag for this DIE. */ - ENUM_BITFIELD(dwarf_tag) tag : 16; - - /* Number of attributes */ - unsigned char num_attrs; - - /* True if we're presently building the full type name for the - type derived from this DIE. */ - unsigned char building_fullname : 1; - - /* True if this die is in process. PR 16581. */ - unsigned char in_process : 1; - - /* Abbrev number */ - unsigned int abbrev; - - /* Offset in .debug_info or .debug_types section. */ - sect_offset sect_off; - - /* The dies in a compilation unit form an n-ary tree. PARENT - points to this die's parent; CHILD points to the first child of - this node; and all the children of a given node are chained - together via their SIBLING fields. */ - struct die_info *child; /* Its first child, if any. */ - struct die_info *sibling; /* Its next sibling, if any. */ - struct die_info *parent; /* Its parent, if any. */ - - /* An array of attributes, with NUM_ATTRS elements. There may be - zero, but it's not common and zero-sized arrays are not - sufficiently portable C. */ - struct attribute attrs[1]; - }; - -/* Get at parts of an attribute structure. */ - -#define DW_STRING(attr) ((attr)->u.str) -#define DW_STRING_IS_CANONICAL(attr) ((attr)->string_is_canonical) -#define DW_UNSND(attr) ((attr)->u.unsnd) -#define DW_BLOCK(attr) ((attr)->u.blk) -#define DW_SND(attr) ((attr)->u.snd) -#define DW_ADDR(attr) ((attr)->u.addr) -#define DW_SIGNATURE(attr) ((attr)->u.signature) - -/* Blocks are a bunch of untyped bytes. */ -struct dwarf_block - { - size_t size; - - /* Valid only if SIZE is not zero. */ - const gdb_byte *data; - }; - -#ifndef ATTR_ALLOC_CHUNK -#define ATTR_ALLOC_CHUNK 4 -#endif - -/* Allocate fields for structs, unions and enums in this size. */ -#ifndef DW_FIELD_ALLOC_CHUNK -#define DW_FIELD_ALLOC_CHUNK 4 -#endif - -/* FIXME: We might want to set this from BFD via bfd_arch_bits_per_byte, - but this would require a corresponding change in unpack_field_as_long - and friends. */ -static int bits_per_byte = 8; - -/* When reading a variant or variant part, we track a bit more - information about the field, and store it in an object of this - type. */ - -struct variant_field -{ - /* If we see a DW_TAG_variant, then this will be the discriminant - value. */ - ULONGEST discriminant_value; - /* If we see a DW_TAG_variant, then this will be set if this is the - default branch. */ - bool default_branch; - /* While reading a DW_TAG_variant_part, this will be set if this - field is the discriminant. */ - bool is_discriminant; -}; - -struct nextfield -{ - int accessibility = 0; - int virtuality = 0; - /* Extra information to describe a variant or variant part. */ - struct variant_field variant {}; - struct field field {}; -}; - -struct fnfieldlist -{ - const char *name = nullptr; - std::vector<struct fn_field> fnfields; -}; - -/* The routines that read and process dies for a C struct or C++ class - pass lists of data member fields and lists of member function fields - in an instance of a field_info structure, as defined below. */ -struct field_info - { - /* List of data member and baseclasses fields. */ - std::vector<struct nextfield> fields; - std::vector<struct nextfield> baseclasses; - - /* Number of fields (including baseclasses). */ - int nfields = 0; - - /* Set if the accessibility of one of the fields is not public. */ - int non_public_fields = 0; - - /* Member function fieldlist array, contains name of possibly overloaded - member function, number of overloaded member functions and a pointer - to the head of the member function field chain. */ - std::vector<struct fnfieldlist> fnfieldlists; - - /* typedefs defined inside this class. TYPEDEF_FIELD_LIST contains head of - a NULL terminated list of TYPEDEF_FIELD_LIST_COUNT elements. */ - std::vector<struct decl_field> typedef_field_list; - - /* Nested types defined by this class and the number of elements in this - list. */ - std::vector<struct decl_field> nested_types_list; - }; - -/* One item on the queue of compilation units to read in full symbols - for. */ -struct dwarf2_queue_item -{ - struct dwarf2_per_cu_data *per_cu; - enum language pretend_language; - struct dwarf2_queue_item *next; -}; - -/* The current queue. */ -static struct dwarf2_queue_item *dwarf2_queue, *dwarf2_queue_tail; - -/* Loaded secondary compilation units are kept in memory until they - have not been referenced for the processing of this many - compilation units. Set this to zero to disable caching. Cache - sizes of up to at least twenty will improve startup time for - typical inter-CU-reference binaries, at an obvious memory cost. */ -static int dwarf_max_cache_age = 5; -static void -show_dwarf_max_cache_age (struct ui_file *file, int from_tty, - struct cmd_list_element *c, const char *value) -{ - fprintf_filtered (file, _("The upper bound on the age of cached " - "DWARF compilation units is %s.\n"), - value); -} - -/* local function prototypes */ - -static const char *get_section_name (const struct dwarf2_section_info *); - -static const char *get_section_file_name (const struct dwarf2_section_info *); - -static void dwarf2_find_base_address (struct die_info *die, - struct dwarf2_cu *cu); - -static struct partial_symtab *create_partial_symtab - (struct dwarf2_per_cu_data *per_cu, const char *name); - -static void build_type_psymtabs_reader (const struct die_reader_specs *reader, - const gdb_byte *info_ptr, - struct die_info *type_unit_die, - int has_children, void *data); - -static void dwarf2_build_psymtabs_hard - (struct dwarf2_per_objfile *dwarf2_per_objfile); - -static void scan_partial_symbols (struct partial_die_info *, - CORE_ADDR *, CORE_ADDR *, - int, struct dwarf2_cu *); - -static void add_partial_symbol (struct partial_die_info *, - struct dwarf2_cu *); - -static void add_partial_namespace (struct partial_die_info *pdi, - CORE_ADDR *lowpc, CORE_ADDR *highpc, - int set_addrmap, struct dwarf2_cu *cu); - -static void add_partial_module (struct partial_die_info *pdi, CORE_ADDR *lowpc, - CORE_ADDR *highpc, int set_addrmap, - struct dwarf2_cu *cu); - -static void add_partial_enumeration (struct partial_die_info *enum_pdi, - struct dwarf2_cu *cu); - -static void add_partial_subprogram (struct partial_die_info *pdi, - CORE_ADDR *lowpc, CORE_ADDR *highpc, - int need_pc, struct dwarf2_cu *cu); - -static void dwarf2_read_symtab (struct partial_symtab *, - struct objfile *); - -static void psymtab_to_symtab_1 (struct partial_symtab *); - -static abbrev_table_up abbrev_table_read_table - (struct dwarf2_per_objfile *dwarf2_per_objfile, struct dwarf2_section_info *, - sect_offset); - -static unsigned int peek_abbrev_code (bfd *, const gdb_byte *); - -static struct partial_die_info *load_partial_dies - (const struct die_reader_specs *, const gdb_byte *, int); - -/* A pair of partial_die_info and compilation unit. */ -struct cu_partial_die_info -{ - /* The compilation unit of the partial_die_info. */ - struct dwarf2_cu *cu; - /* A partial_die_info. */ - struct partial_die_info *pdi; - - cu_partial_die_info (struct dwarf2_cu *cu, struct partial_die_info *pdi) - : cu (cu), - pdi (pdi) - { /* Nothing. */ } - -private: - cu_partial_die_info () = delete; -}; - -static const struct cu_partial_die_info find_partial_die (sect_offset, int, - struct dwarf2_cu *); - -static const gdb_byte *read_attribute (const struct die_reader_specs *, - struct attribute *, struct attr_abbrev *, - const gdb_byte *); - -static unsigned int read_1_byte (bfd *, const gdb_byte *); - -static int read_1_signed_byte (bfd *, const gdb_byte *); - -static unsigned int read_2_bytes (bfd *, const gdb_byte *); - -/* Read the next three bytes (little-endian order) as an unsigned integer. */ -static unsigned int read_3_bytes (bfd *, const gdb_byte *); - -static unsigned int read_4_bytes (bfd *, const gdb_byte *); - -static ULONGEST read_8_bytes (bfd *, const gdb_byte *); - -static CORE_ADDR read_address (bfd *, const gdb_byte *ptr, struct dwarf2_cu *, - unsigned int *); - -static LONGEST read_initial_length (bfd *, const gdb_byte *, unsigned int *); - -static LONGEST read_checked_initial_length_and_offset - (bfd *, const gdb_byte *, const struct comp_unit_head *, - unsigned int *, unsigned int *); - -static LONGEST read_offset (bfd *, const gdb_byte *, - const struct comp_unit_head *, - unsigned int *); - -static LONGEST read_offset_1 (bfd *, const gdb_byte *, unsigned int); - -static sect_offset read_abbrev_offset - (struct dwarf2_per_objfile *dwarf2_per_objfile, - struct dwarf2_section_info *, sect_offset); - -static const gdb_byte *read_n_bytes (bfd *, const gdb_byte *, unsigned int); - -static const char *read_direct_string (bfd *, const gdb_byte *, unsigned int *); - -static const char *read_indirect_string - (struct dwarf2_per_objfile *dwarf2_per_objfile, bfd *, const gdb_byte *, - const struct comp_unit_head *, unsigned int *); - -static const char *read_indirect_line_string - (struct dwarf2_per_objfile *dwarf2_per_objfile, bfd *, const gdb_byte *, - const struct comp_unit_head *, unsigned int *); - -static const char *read_indirect_string_at_offset - (struct dwarf2_per_objfile *dwarf2_per_objfile, bfd *abfd, - LONGEST str_offset); - -static const char *read_indirect_string_from_dwz - (struct objfile *objfile, struct dwz_file *, LONGEST); - -static LONGEST read_signed_leb128 (bfd *, const gdb_byte *, unsigned int *); - -static CORE_ADDR read_addr_index_from_leb128 (struct dwarf2_cu *, - const gdb_byte *, - unsigned int *); - -static const char *read_str_index (const struct die_reader_specs *reader, - ULONGEST str_index); - -static void set_cu_language (unsigned int, struct dwarf2_cu *); - -static struct attribute *dwarf2_attr (struct die_info *, unsigned int, - struct dwarf2_cu *); - -static struct attribute *dwarf2_attr_no_follow (struct die_info *, - unsigned int); - -static const char *dwarf2_string_attr (struct die_info *die, unsigned int name, - struct dwarf2_cu *cu); - -static const char *dwarf2_dwo_name (struct die_info *die, struct dwarf2_cu *cu); - -static int dwarf2_flag_true_p (struct die_info *die, unsigned name, - struct dwarf2_cu *cu); - -static int die_is_declaration (struct die_info *, struct dwarf2_cu *cu); - -static struct die_info *die_specification (struct die_info *die, - struct dwarf2_cu **); - -static line_header_up dwarf_decode_line_header (sect_offset sect_off, - struct dwarf2_cu *cu); - -static void dwarf_decode_lines (struct line_header *, const char *, - struct dwarf2_cu *, struct partial_symtab *, - CORE_ADDR, int decode_mapping); - -static void dwarf2_start_subfile (struct dwarf2_cu *, const char *, - const char *); - -static struct symbol *new_symbol (struct die_info *, struct type *, - struct dwarf2_cu *, struct symbol * = NULL); - -static void dwarf2_const_value (const struct attribute *, struct symbol *, - struct dwarf2_cu *); - -static void dwarf2_const_value_attr (const struct attribute *attr, - struct type *type, - const char *name, - struct obstack *obstack, - struct dwarf2_cu *cu, LONGEST *value, - const gdb_byte **bytes, - struct dwarf2_locexpr_baton **baton); - -static struct type *die_type (struct die_info *, struct dwarf2_cu *); - -static int need_gnat_info (struct dwarf2_cu *); - -static struct type *die_descriptive_type (struct die_info *, - struct dwarf2_cu *); - -static void set_descriptive_type (struct type *, struct die_info *, - struct dwarf2_cu *); - -static struct type *die_containing_type (struct die_info *, - struct dwarf2_cu *); - -static struct type *lookup_die_type (struct die_info *, const struct attribute *, - struct dwarf2_cu *); - -static struct type *read_type_die (struct die_info *, struct dwarf2_cu *); - -static struct type *read_type_die_1 (struct die_info *, struct dwarf2_cu *); - -static const char *determine_prefix (struct die_info *die, struct dwarf2_cu *); - -static char *typename_concat (struct obstack *obs, const char *prefix, - const char *suffix, int physname, - struct dwarf2_cu *cu); - -static void read_file_scope (struct die_info *, struct dwarf2_cu *); - -static void read_type_unit_scope (struct die_info *, struct dwarf2_cu *); - -static void read_func_scope (struct die_info *, struct dwarf2_cu *); - -static void read_lexical_block_scope (struct die_info *, struct dwarf2_cu *); - -static void read_call_site_scope (struct die_info *die, struct dwarf2_cu *cu); - -static void read_variable (struct die_info *die, struct dwarf2_cu *cu); - -static int dwarf2_ranges_read (unsigned, CORE_ADDR *, CORE_ADDR *, - struct dwarf2_cu *, struct partial_symtab *); - -/* How dwarf2_get_pc_bounds constructed its *LOWPC and *HIGHPC return - values. Keep the items ordered with increasing constraints compliance. */ -enum pc_bounds_kind -{ - /* No attribute DW_AT_low_pc, DW_AT_high_pc or DW_AT_ranges was found. */ - PC_BOUNDS_NOT_PRESENT, - - /* Some of the attributes DW_AT_low_pc, DW_AT_high_pc or DW_AT_ranges - were present but they do not form a valid range of PC addresses. */ - PC_BOUNDS_INVALID, - - /* Discontiguous range was found - that is DW_AT_ranges was found. */ - PC_BOUNDS_RANGES, - - /* Contiguous range was found - DW_AT_low_pc and DW_AT_high_pc were found. */ - PC_BOUNDS_HIGH_LOW, -}; - -static enum pc_bounds_kind dwarf2_get_pc_bounds (struct die_info *, - CORE_ADDR *, CORE_ADDR *, - struct dwarf2_cu *, - struct partial_symtab *); - -static void get_scope_pc_bounds (struct die_info *, - CORE_ADDR *, CORE_ADDR *, - struct dwarf2_cu *); - -static void dwarf2_record_block_ranges (struct die_info *, struct block *, - CORE_ADDR, struct dwarf2_cu *); - -static void dwarf2_add_field (struct field_info *, struct die_info *, - struct dwarf2_cu *); - -static void dwarf2_attach_fields_to_type (struct field_info *, - struct type *, struct dwarf2_cu *); - -static void dwarf2_add_member_fn (struct field_info *, - struct die_info *, struct type *, - struct dwarf2_cu *); - -static void dwarf2_attach_fn_fields_to_type (struct field_info *, - struct type *, - struct dwarf2_cu *); - -static void process_structure_scope (struct die_info *, struct dwarf2_cu *); - -static void read_common_block (struct die_info *, struct dwarf2_cu *); - -static void read_namespace (struct die_info *die, struct dwarf2_cu *); - -static void read_module (struct die_info *die, struct dwarf2_cu *cu); - -static struct using_direct **using_directives (struct dwarf2_cu *cu); - -static void read_import_statement (struct die_info *die, struct dwarf2_cu *); - -static int read_namespace_alias (struct die_info *die, struct dwarf2_cu *cu); - -static struct type *read_module_type (struct die_info *die, - struct dwarf2_cu *cu); - -static const char *namespace_name (struct die_info *die, - int *is_anonymous, struct dwarf2_cu *); - -static void process_enumeration_scope (struct die_info *, struct dwarf2_cu *); - -static CORE_ADDR decode_locdesc (struct dwarf_block *, struct dwarf2_cu *); - -static enum dwarf_array_dim_ordering read_array_order (struct die_info *, - struct dwarf2_cu *); - -static struct die_info *read_die_and_siblings_1 - (const struct die_reader_specs *, const gdb_byte *, const gdb_byte **, - struct die_info *); - -static struct die_info *read_die_and_siblings (const struct die_reader_specs *, - const gdb_byte *info_ptr, - const gdb_byte **new_info_ptr, - struct die_info *parent); - -static const gdb_byte *read_full_die_1 (const struct die_reader_specs *, - struct die_info **, const gdb_byte *, - int *, int); - -static const gdb_byte *read_full_die (const struct die_reader_specs *, - struct die_info **, const gdb_byte *, - int *); - -static void process_die (struct die_info *, struct dwarf2_cu *); - -static const char *dwarf2_canonicalize_name (const char *, struct dwarf2_cu *, - struct obstack *); - -static const char *dwarf2_name (struct die_info *die, struct dwarf2_cu *); - -static const char *dwarf2_full_name (const char *name, - struct die_info *die, - struct dwarf2_cu *cu); - -static const char *dwarf2_physname (const char *name, struct die_info *die, - struct dwarf2_cu *cu); - -static struct die_info *dwarf2_extension (struct die_info *die, - struct dwarf2_cu **); - -static const char *dwarf_tag_name (unsigned int); - -static const char *dwarf_attr_name (unsigned int); - -static const char *dwarf_unit_type_name (int unit_type); - -static const char *dwarf_form_name (unsigned int); - -static const char *dwarf_bool_name (unsigned int); - -static const char *dwarf_type_encoding_name (unsigned int); - -static struct die_info *sibling_die (struct die_info *); - -static void dump_die_shallow (struct ui_file *, int indent, struct die_info *); - -static void dump_die_for_error (struct die_info *); - -static void dump_die_1 (struct ui_file *, int level, int max_level, - struct die_info *); - -/*static*/ void dump_die (struct die_info *, int max_level); - -static void store_in_ref_table (struct die_info *, - struct dwarf2_cu *); - -static sect_offset dwarf2_get_ref_die_offset (const struct attribute *); - -static LONGEST dwarf2_get_attr_constant_value (const struct attribute *, int); - -static struct die_info *follow_die_ref_or_sig (struct die_info *, - const struct attribute *, - struct dwarf2_cu **); - -static struct die_info *follow_die_ref (struct die_info *, - const struct attribute *, - struct dwarf2_cu **); - -static struct die_info *follow_die_sig (struct die_info *, - const struct attribute *, - struct dwarf2_cu **); - -static struct type *get_signatured_type (struct die_info *, ULONGEST, - struct dwarf2_cu *); - -static struct type *get_DW_AT_signature_type (struct die_info *, - const struct attribute *, - struct dwarf2_cu *); - -static void load_full_type_unit (struct dwarf2_per_cu_data *per_cu); - -static void read_signatured_type (struct signatured_type *); - -static int attr_to_dynamic_prop (const struct attribute *attr, - struct die_info *die, struct dwarf2_cu *cu, - struct dynamic_prop *prop, struct type *type); - -/* memory allocation interface */ - -static struct dwarf_block *dwarf_alloc_block (struct dwarf2_cu *); - -static struct die_info *dwarf_alloc_die (struct dwarf2_cu *, int); - -static void dwarf_decode_macros (struct dwarf2_cu *, unsigned int, int); - -static int attr_form_is_block (const struct attribute *); - -static int attr_form_is_section_offset (const struct attribute *); - -static int attr_form_is_constant (const struct attribute *); - -static int attr_form_is_ref (const struct attribute *); - -static void fill_in_loclist_baton (struct dwarf2_cu *cu, - struct dwarf2_loclist_baton *baton, - const struct attribute *attr); - -static void dwarf2_symbol_mark_computed (const struct attribute *attr, - struct symbol *sym, - struct dwarf2_cu *cu, - int is_block); - -static const gdb_byte *skip_one_die (const struct die_reader_specs *reader, - const gdb_byte *info_ptr, - struct abbrev_info *abbrev); - -static hashval_t partial_die_hash (const void *item); - -static int partial_die_eq (const void *item_lhs, const void *item_rhs); - -static struct dwarf2_per_cu_data *dwarf2_find_containing_comp_unit - (sect_offset sect_off, unsigned int offset_in_dwz, - struct dwarf2_per_objfile *dwarf2_per_objfile); - -static void prepare_one_comp_unit (struct dwarf2_cu *cu, - struct die_info *comp_unit_die, - enum language pretend_language); - -static void age_cached_comp_units (struct dwarf2_per_objfile *dwarf2_per_objfile); - -static void free_one_cached_comp_unit (struct dwarf2_per_cu_data *); - -static struct type *set_die_type (struct die_info *, struct type *, - struct dwarf2_cu *); - -static void create_all_comp_units (struct dwarf2_per_objfile *dwarf2_per_objfile); - -static int create_all_type_units (struct dwarf2_per_objfile *dwarf2_per_objfile); - -static void load_full_comp_unit (struct dwarf2_per_cu_data *, bool, - enum language); - -static void process_full_comp_unit (struct dwarf2_per_cu_data *, - enum language); - -static void process_full_type_unit (struct dwarf2_per_cu_data *, - enum language); - -static void dwarf2_add_dependence (struct dwarf2_cu *, - struct dwarf2_per_cu_data *); - -static void dwarf2_mark (struct dwarf2_cu *); - -static void dwarf2_clear_marks (struct dwarf2_per_cu_data *); - -static struct type *get_die_type_at_offset (sect_offset, - struct dwarf2_per_cu_data *); - -static struct type *get_die_type (struct die_info *die, struct dwarf2_cu *cu); - -static void queue_comp_unit (struct dwarf2_per_cu_data *per_cu, - enum language pretend_language); - -static void process_queue (struct dwarf2_per_objfile *dwarf2_per_objfile); - -static struct type *dwarf2_per_cu_addr_type (struct dwarf2_per_cu_data *per_cu); -static struct type *dwarf2_per_cu_addr_sized_int_type - (struct dwarf2_per_cu_data *per_cu, bool unsigned_p); -static struct type *dwarf2_per_cu_int_type - (struct dwarf2_per_cu_data *per_cu, int size_in_bytes, - bool unsigned_p); - -/* Class, the destructor of which frees all allocated queue entries. This - will only have work to do if an error was thrown while processing the - dwarf. If no error was thrown then the queue entries should have all - been processed, and freed, as we went along. */ - -class dwarf2_queue_guard -{ -public: - dwarf2_queue_guard () = default; - - /* Free any entries remaining on the queue. There should only be - entries left if we hit an error while processing the dwarf. */ - ~dwarf2_queue_guard () - { - struct dwarf2_queue_item *item, *last; - - item = dwarf2_queue; - while (item) - { - /* Anything still marked queued is likely to be in an - inconsistent state, so discard it. */ - if (item->per_cu->queued) - { - if (item->per_cu->cu != NULL) - free_one_cached_comp_unit (item->per_cu); - item->per_cu->queued = 0; - } - - last = item; - item = item->next; - xfree (last); - } - - dwarf2_queue = dwarf2_queue_tail = NULL; - } -}; - -/* The return type of find_file_and_directory. Note, the enclosed - string pointers are only valid while this object is valid. */ - -struct file_and_directory -{ - /* The filename. This is never NULL. */ - const char *name; - - /* The compilation directory. NULL if not known. If we needed to - compute a new string, this points to COMP_DIR_STORAGE, otherwise, - points directly to the DW_AT_comp_dir string attribute owned by - the obstack that owns the DIE. */ - const char *comp_dir; - - /* If we needed to build a new string for comp_dir, this is what - owns the storage. */ - std::string comp_dir_storage; -}; - -static file_and_directory find_file_and_directory (struct die_info *die, - struct dwarf2_cu *cu); - -static char *file_full_name (int file, struct line_header *lh, - const char *comp_dir); - -/* Expected enum dwarf_unit_type for read_comp_unit_head. */ -enum class rcuh_kind { COMPILE, TYPE }; - -static const gdb_byte *read_and_check_comp_unit_head - (struct dwarf2_per_objfile* dwarf2_per_objfile, - struct comp_unit_head *header, - struct dwarf2_section_info *section, - struct dwarf2_section_info *abbrev_section, const gdb_byte *info_ptr, - rcuh_kind section_kind); - -static void init_cutu_and_read_dies - (struct dwarf2_per_cu_data *this_cu, struct abbrev_table *abbrev_table, - int use_existing_cu, int keep, bool skip_partial, - die_reader_func_ftype *die_reader_func, void *data); - -static void init_cutu_and_read_dies_simple - (struct dwarf2_per_cu_data *this_cu, - die_reader_func_ftype *die_reader_func, void *data); - -static htab_t allocate_signatured_type_table (struct objfile *objfile); - -static htab_t allocate_dwo_unit_table (struct objfile *objfile); - -static struct dwo_unit *lookup_dwo_unit_in_dwp - (struct dwarf2_per_objfile *dwarf2_per_objfile, - struct dwp_file *dwp_file, const char *comp_dir, - ULONGEST signature, int is_debug_types); - -static struct dwp_file *get_dwp_file - (struct dwarf2_per_objfile *dwarf2_per_objfile); - -static struct dwo_unit *lookup_dwo_comp_unit - (struct dwarf2_per_cu_data *, const char *, const char *, ULONGEST); - -static struct dwo_unit *lookup_dwo_type_unit - (struct signatured_type *, const char *, const char *); - -static void queue_and_load_all_dwo_tus (struct dwarf2_per_cu_data *); - -/* A unique pointer to a dwo_file. */ - -typedef std::unique_ptr<struct dwo_file> dwo_file_up; - -static void process_cu_includes (struct dwarf2_per_objfile *dwarf2_per_objfile); - -static void check_producer (struct dwarf2_cu *cu); - -static void free_line_header_voidp (void *arg); - -/* Various complaints about symbol reading that don't abort the process. */ - -static void -dwarf2_statement_list_fits_in_line_number_section_complaint (void) -{ - complaint (_("statement list doesn't fit in .debug_line section")); -} - -static void -dwarf2_debug_line_missing_file_complaint (void) -{ - complaint (_(".debug_line section has line data without a file")); -} - -static void -dwarf2_debug_line_missing_end_sequence_complaint (void) -{ - complaint (_(".debug_line section has line " - "program sequence without an end")); -} - -static void -dwarf2_complex_location_expr_complaint (void) -{ - complaint (_("location expression too complex")); -} - -static void -dwarf2_const_value_length_mismatch_complaint (const char *arg1, int arg2, - int arg3) -{ - complaint (_("const value length mismatch for '%s', got %d, expected %d"), - arg1, arg2, arg3); -} - -static void -dwarf2_section_buffer_overflow_complaint (struct dwarf2_section_info *section) -{ - complaint (_("debug info runs off end of %s section" - " [in module %s]"), - get_section_name (section), - get_section_file_name (section)); -} - -static void -dwarf2_macro_malformed_definition_complaint (const char *arg1) -{ - complaint (_("macro debug info contains a " - "malformed macro definition:\n`%s'"), - arg1); -} - -static void -dwarf2_invalid_attrib_class_complaint (const char *arg1, const char *arg2) -{ - complaint (_("invalid attribute class or form for '%s' in '%s'"), - arg1, arg2); -} - -/* Hash function for line_header_hash. */ - -static hashval_t -line_header_hash (const struct line_header *ofs) -{ - return to_underlying (ofs->sect_off) ^ ofs->offset_in_dwz; -} - -/* Hash function for htab_create_alloc_ex for line_header_hash. */ - -static hashval_t -line_header_hash_voidp (const void *item) -{ - const struct line_header *ofs = (const struct line_header *) item; - - return line_header_hash (ofs); -} - -/* Equality function for line_header_hash. */ - -static int -line_header_eq_voidp (const void *item_lhs, const void *item_rhs) -{ - const struct line_header *ofs_lhs = (const struct line_header *) item_lhs; - const struct line_header *ofs_rhs = (const struct line_header *) item_rhs; - - return (ofs_lhs->sect_off == ofs_rhs->sect_off - && ofs_lhs->offset_in_dwz == ofs_rhs->offset_in_dwz); -} - - - -/* Read the given attribute value as an address, taking the attribute's - form into account. */ - -static CORE_ADDR -attr_value_as_address (struct attribute *attr) -{ - CORE_ADDR addr; - - if (attr->form != DW_FORM_addr && attr->form != DW_FORM_addrx - && attr->form != DW_FORM_GNU_addr_index) - { - /* Aside from a few clearly defined exceptions, attributes that - contain an address must always be in DW_FORM_addr form. - Unfortunately, some compilers happen to be violating this - requirement by encoding addresses using other forms, such - as DW_FORM_data4 for example. For those broken compilers, - we try to do our best, without any guarantee of success, - to interpret the address correctly. It would also be nice - to generate a complaint, but that would require us to maintain - a list of legitimate cases where a non-address form is allowed, - as well as update callers to pass in at least the CU's DWARF - version. This is more overhead than what we're willing to - expand for a pretty rare case. */ - addr = DW_UNSND (attr); - } - else - addr = DW_ADDR (attr); - - return addr; -} - -/* See declaration. */ - -dwarf2_per_objfile::dwarf2_per_objfile (struct objfile *objfile_, - const dwarf2_debug_sections *names, - bool can_copy_) - : objfile (objfile_), - can_copy (can_copy_) -{ - if (names == NULL) - names = &dwarf2_elf_names; - - bfd *obfd = objfile->obfd; - - for (asection *sec = obfd->sections; sec != NULL; sec = sec->next) - locate_sections (obfd, sec, *names); -} - -dwarf2_per_objfile::~dwarf2_per_objfile () -{ - /* Cached DIE trees use xmalloc and the comp_unit_obstack. */ - free_cached_comp_units (); - - if (quick_file_names_table) - htab_delete (quick_file_names_table); - - if (line_header_hash) - htab_delete (line_header_hash); - - for (dwarf2_per_cu_data *per_cu : all_comp_units) - per_cu->imported_symtabs_free (); - - for (signatured_type *sig_type : all_type_units) - sig_type->per_cu.imported_symtabs_free (); - - /* Everything else should be on the objfile obstack. */ -} - -/* See declaration. */ - -void -dwarf2_per_objfile::free_cached_comp_units () -{ - dwarf2_per_cu_data *per_cu = read_in_chain; - dwarf2_per_cu_data **last_chain = &read_in_chain; - while (per_cu != NULL) - { - dwarf2_per_cu_data *next_cu = per_cu->cu->read_in_chain; - - delete per_cu->cu; - *last_chain = next_cu; - per_cu = next_cu; - } -} - -/* A helper class that calls free_cached_comp_units on - destruction. */ - -class free_cached_comp_units -{ -public: - - explicit free_cached_comp_units (dwarf2_per_objfile *per_objfile) - : m_per_objfile (per_objfile) - { - } - - ~free_cached_comp_units () - { - m_per_objfile->free_cached_comp_units (); - } - - DISABLE_COPY_AND_ASSIGN (free_cached_comp_units); - -private: - - dwarf2_per_objfile *m_per_objfile; -}; - -/* Try to locate the sections we need for DWARF 2 debugging - information and return true if we have enough to do something. - NAMES points to the dwarf2 section names, or is NULL if the standard - ELF names are used. CAN_COPY is true for formats where symbol - interposition is possible and so symbol values must follow copy - relocation rules. */ - -int -dwarf2_has_info (struct objfile *objfile, - const struct dwarf2_debug_sections *names, - bool can_copy) -{ - if (objfile->flags & OBJF_READNEVER) - return 0; - - struct dwarf2_per_objfile *dwarf2_per_objfile - = get_dwarf2_per_objfile (objfile); - - if (dwarf2_per_objfile == NULL) - dwarf2_per_objfile = dwarf2_objfile_data_key.emplace (objfile, objfile, - names, - can_copy); - - return (!dwarf2_per_objfile->info.is_virtual - && dwarf2_per_objfile->info.s.section != NULL - && !dwarf2_per_objfile->abbrev.is_virtual - && dwarf2_per_objfile->abbrev.s.section != NULL); -} - -/* Return the containing section of virtual section SECTION. */ - -static struct dwarf2_section_info * -get_containing_section (const struct dwarf2_section_info *section) -{ - gdb_assert (section->is_virtual); - return section->s.containing_section; -} - -/* Return the bfd owner of SECTION. */ - -static struct bfd * -get_section_bfd_owner (const struct dwarf2_section_info *section) -{ - if (section->is_virtual) - { - section = get_containing_section (section); - gdb_assert (!section->is_virtual); - } - return section->s.section->owner; -} - -/* Return the bfd section of SECTION. - Returns NULL if the section is not present. */ - -static asection * -get_section_bfd_section (const struct dwarf2_section_info *section) -{ - if (section->is_virtual) - { - section = get_containing_section (section); - gdb_assert (!section->is_virtual); - } - return section->s.section; -} - -/* Return the name of SECTION. */ - -static const char * -get_section_name (const struct dwarf2_section_info *section) -{ - asection *sectp = get_section_bfd_section (section); - - gdb_assert (sectp != NULL); - return bfd_section_name (sectp); -} - -/* Return the name of the file SECTION is in. */ - -static const char * -get_section_file_name (const struct dwarf2_section_info *section) -{ - bfd *abfd = get_section_bfd_owner (section); - - return bfd_get_filename (abfd); -} - -/* Return the id of SECTION. - Returns 0 if SECTION doesn't exist. */ - -static int -get_section_id (const struct dwarf2_section_info *section) -{ - asection *sectp = get_section_bfd_section (section); - - if (sectp == NULL) - return 0; - return sectp->id; -} - -/* Return the flags of SECTION. - SECTION (or containing section if this is a virtual section) must exist. */ - -static int -get_section_flags (const struct dwarf2_section_info *section) -{ - asection *sectp = get_section_bfd_section (section); - - gdb_assert (sectp != NULL); - return bfd_section_flags (sectp); -} - -/* When loading sections, we look either for uncompressed section or for - compressed section names. */ - -static int -section_is_p (const char *section_name, - const struct dwarf2_section_names *names) -{ - if (names->normal != NULL - && strcmp (section_name, names->normal) == 0) - return 1; - if (names->compressed != NULL - && strcmp (section_name, names->compressed) == 0) - return 1; - return 0; -} - -/* See declaration. */ - -void -dwarf2_per_objfile::locate_sections (bfd *abfd, asection *sectp, - const dwarf2_debug_sections &names) -{ - flagword aflag = bfd_section_flags (sectp); - - if ((aflag & SEC_HAS_CONTENTS) == 0) - { - } - else if (elf_section_data (sectp)->this_hdr.sh_size - > bfd_get_file_size (abfd)) - { - bfd_size_type size = elf_section_data (sectp)->this_hdr.sh_size; - warning (_("Discarding section %s which has a section size (%s" - ") larger than the file size [in module %s]"), - bfd_section_name (sectp), phex_nz (size, sizeof (size)), - bfd_get_filename (abfd)); - } - else if (section_is_p (sectp->name, &names.info)) - { - this->info.s.section = sectp; - this->info.size = bfd_section_size (sectp); - } - else if (section_is_p (sectp->name, &names.abbrev)) - { - this->abbrev.s.section = sectp; - this->abbrev.size = bfd_section_size (sectp); - } - else if (section_is_p (sectp->name, &names.line)) - { - this->line.s.section = sectp; - this->line.size = bfd_section_size (sectp); - } - else if (section_is_p (sectp->name, &names.loc)) - { - this->loc.s.section = sectp; - this->loc.size = bfd_section_size (sectp); - } - else if (section_is_p (sectp->name, &names.loclists)) - { - this->loclists.s.section = sectp; - this->loclists.size = bfd_section_size (sectp); - } - else if (section_is_p (sectp->name, &names.macinfo)) - { - this->macinfo.s.section = sectp; - this->macinfo.size = bfd_section_size (sectp); - } - else if (section_is_p (sectp->name, &names.macro)) - { - this->macro.s.section = sectp; - this->macro.size = bfd_section_size (sectp); - } - else if (section_is_p (sectp->name, &names.str)) - { - this->str.s.section = sectp; - this->str.size = bfd_section_size (sectp); - } - else if (section_is_p (sectp->name, &names.line_str)) - { - this->line_str.s.section = sectp; - this->line_str.size = bfd_section_size (sectp); - } - else if (section_is_p (sectp->name, &names.addr)) - { - this->addr.s.section = sectp; - this->addr.size = bfd_section_size (sectp); - } - else if (section_is_p (sectp->name, &names.frame)) - { - this->frame.s.section = sectp; - this->frame.size = bfd_section_size (sectp); - } - else if (section_is_p (sectp->name, &names.eh_frame)) - { - this->eh_frame.s.section = sectp; - this->eh_frame.size = bfd_section_size (sectp); - } - else if (section_is_p (sectp->name, &names.ranges)) - { - this->ranges.s.section = sectp; - this->ranges.size = bfd_section_size (sectp); - } - else if (section_is_p (sectp->name, &names.rnglists)) - { - this->rnglists.s.section = sectp; - this->rnglists.size = bfd_section_size (sectp); - } - else if (section_is_p (sectp->name, &names.types)) - { - struct dwarf2_section_info type_section; - - memset (&type_section, 0, sizeof (type_section)); - type_section.s.section = sectp; - type_section.size = bfd_section_size (sectp); - - this->types.push_back (type_section); - } - else if (section_is_p (sectp->name, &names.gdb_index)) - { - this->gdb_index.s.section = sectp; - this->gdb_index.size = bfd_section_size (sectp); - } - else if (section_is_p (sectp->name, &names.debug_names)) - { - this->debug_names.s.section = sectp; - this->debug_names.size = bfd_section_size (sectp); - } - else if (section_is_p (sectp->name, &names.debug_aranges)) - { - this->debug_aranges.s.section = sectp; - this->debug_aranges.size = bfd_section_size (sectp); - } - - if ((bfd_section_flags (sectp) & (SEC_LOAD | SEC_ALLOC)) - && bfd_section_vma (sectp) == 0) - this->has_section_at_zero = true; -} - -/* A helper function that decides whether a section is empty, - or not present. */ - -static int -dwarf2_section_empty_p (const struct dwarf2_section_info *section) -{ - if (section->is_virtual) - return section->size == 0; - return section->s.section == NULL || section->size == 0; -} - -/* See dwarf2read.h. */ - -void -dwarf2_read_section (struct objfile *objfile, dwarf2_section_info *info) -{ - asection *sectp; - bfd *abfd; - gdb_byte *buf, *retbuf; - - if (info->readin) - return; - info->buffer = NULL; - info->readin = true; - - if (dwarf2_section_empty_p (info)) - return; - - sectp = get_section_bfd_section (info); - - /* If this is a virtual section we need to read in the real one first. */ - if (info->is_virtual) - { - struct dwarf2_section_info *containing_section = - get_containing_section (info); - - gdb_assert (sectp != NULL); - if ((sectp->flags & SEC_RELOC) != 0) - { - error (_("Dwarf Error: DWP format V2 with relocations is not" - " supported in section %s [in module %s]"), - get_section_name (info), get_section_file_name (info)); - } - dwarf2_read_section (objfile, containing_section); - /* Other code should have already caught virtual sections that don't - fit. */ - gdb_assert (info->virtual_offset + info->size - <= containing_section->size); - /* If the real section is empty or there was a problem reading the - section we shouldn't get here. */ - gdb_assert (containing_section->buffer != NULL); - info->buffer = containing_section->buffer + info->virtual_offset; - return; - } - - /* If the section has relocations, we must read it ourselves. - Otherwise we attach it to the BFD. */ - if ((sectp->flags & SEC_RELOC) == 0) - { - info->buffer = gdb_bfd_map_section (sectp, &info->size); - return; - } - - buf = (gdb_byte *) obstack_alloc (&objfile->objfile_obstack, info->size); - info->buffer = buf; - - /* When debugging .o files, we may need to apply relocations; see - http://sourceware.org/ml/gdb-patches/2002-04/msg00136.html . - We never compress sections in .o files, so we only need to - try this when the section is not compressed. */ - retbuf = symfile_relocate_debug_section (objfile, sectp, buf); - if (retbuf != NULL) - { - info->buffer = retbuf; - return; - } - - abfd = get_section_bfd_owner (info); - gdb_assert (abfd != NULL); - - if (bfd_seek (abfd, sectp->filepos, SEEK_SET) != 0 - || bfd_bread (buf, info->size, abfd) != info->size) - { - error (_("Dwarf Error: Can't read DWARF data" - " in section %s [in module %s]"), - bfd_section_name (sectp), bfd_get_filename (abfd)); - } -} - -/* A helper function that returns the size of a section in a safe way. - If you are positive that the section has been read before using the - size, then it is safe to refer to the dwarf2_section_info object's - "size" field directly. In other cases, you must call this - function, because for compressed sections the size field is not set - correctly until the section has been read. */ - -static bfd_size_type -dwarf2_section_size (struct objfile *objfile, - struct dwarf2_section_info *info) -{ - if (!info->readin) - dwarf2_read_section (objfile, info); - return info->size; -} - -/* Fill in SECTP, BUFP and SIZEP with section info, given OBJFILE and - SECTION_NAME. */ - -void -dwarf2_get_section_info (struct objfile *objfile, - enum dwarf2_section_enum sect, - asection **sectp, const gdb_byte **bufp, - bfd_size_type *sizep) -{ - struct dwarf2_per_objfile *data = dwarf2_objfile_data_key.get (objfile); - struct dwarf2_section_info *info; - - /* We may see an objfile without any DWARF, in which case we just - return nothing. */ - if (data == NULL) - { - *sectp = NULL; - *bufp = NULL; - *sizep = 0; - return; - } - switch (sect) - { - case DWARF2_DEBUG_FRAME: - info = &data->frame; - break; - case DWARF2_EH_FRAME: - info = &data->eh_frame; - break; - default: - gdb_assert_not_reached ("unexpected section"); - } - - dwarf2_read_section (objfile, info); - - *sectp = get_section_bfd_section (info); - *bufp = info->buffer; - *sizep = info->size; -} - -/* A helper function to find the sections for a .dwz file. */ - -static void -locate_dwz_sections (bfd *abfd, asection *sectp, void *arg) -{ - struct dwz_file *dwz_file = (struct dwz_file *) arg; - - /* Note that we only support the standard ELF names, because .dwz - is ELF-only (at the time of writing). */ - if (section_is_p (sectp->name, &dwarf2_elf_names.abbrev)) - { - dwz_file->abbrev.s.section = sectp; - dwz_file->abbrev.size = bfd_section_size (sectp); - } - else if (section_is_p (sectp->name, &dwarf2_elf_names.info)) - { - dwz_file->info.s.section = sectp; - dwz_file->info.size = bfd_section_size (sectp); - } - else if (section_is_p (sectp->name, &dwarf2_elf_names.str)) - { - dwz_file->str.s.section = sectp; - dwz_file->str.size = bfd_section_size (sectp); - } - else if (section_is_p (sectp->name, &dwarf2_elf_names.line)) - { - dwz_file->line.s.section = sectp; - dwz_file->line.size = bfd_section_size (sectp); - } - else if (section_is_p (sectp->name, &dwarf2_elf_names.macro)) - { - dwz_file->macro.s.section = sectp; - dwz_file->macro.size = bfd_section_size (sectp); - } - else if (section_is_p (sectp->name, &dwarf2_elf_names.gdb_index)) - { - dwz_file->gdb_index.s.section = sectp; - dwz_file->gdb_index.size = bfd_section_size (sectp); - } - else if (section_is_p (sectp->name, &dwarf2_elf_names.debug_names)) - { - dwz_file->debug_names.s.section = sectp; - dwz_file->debug_names.size = bfd_section_size (sectp); - } -} - -/* See dwarf2read.h. */ - -struct dwz_file * -dwarf2_get_dwz_file (struct dwarf2_per_objfile *dwarf2_per_objfile) -{ - const char *filename; - bfd_size_type buildid_len_arg; - size_t buildid_len; - bfd_byte *buildid; - - if (dwarf2_per_objfile->dwz_file != NULL) - return dwarf2_per_objfile->dwz_file.get (); - - bfd_set_error (bfd_error_no_error); - gdb::unique_xmalloc_ptr<char> data - (bfd_get_alt_debug_link_info (dwarf2_per_objfile->objfile->obfd, - &buildid_len_arg, &buildid)); - if (data == NULL) - { - if (bfd_get_error () == bfd_error_no_error) - return NULL; - error (_("could not read '.gnu_debugaltlink' section: %s"), - bfd_errmsg (bfd_get_error ())); - } - - gdb::unique_xmalloc_ptr<bfd_byte> buildid_holder (buildid); - - buildid_len = (size_t) buildid_len_arg; - - filename = data.get (); - - std::string abs_storage; - if (!IS_ABSOLUTE_PATH (filename)) - { - gdb::unique_xmalloc_ptr<char> abs - = gdb_realpath (objfile_name (dwarf2_per_objfile->objfile)); - - abs_storage = ldirname (abs.get ()) + SLASH_STRING + filename; - filename = abs_storage.c_str (); - } - - /* First try the file name given in the section. If that doesn't - work, try to use the build-id instead. */ - gdb_bfd_ref_ptr dwz_bfd (gdb_bfd_open (filename, gnutarget, -1)); - if (dwz_bfd != NULL) - { - if (!build_id_verify (dwz_bfd.get (), buildid_len, buildid)) - dwz_bfd.reset (nullptr); - } - - if (dwz_bfd == NULL) - dwz_bfd = build_id_to_debug_bfd (buildid_len, buildid); - - if (dwz_bfd == NULL) - error (_("could not find '.gnu_debugaltlink' file for %s"), - objfile_name (dwarf2_per_objfile->objfile)); - - std::unique_ptr<struct dwz_file> result - (new struct dwz_file (std::move (dwz_bfd))); - - bfd_map_over_sections (result->dwz_bfd.get (), locate_dwz_sections, - result.get ()); - - gdb_bfd_record_inclusion (dwarf2_per_objfile->objfile->obfd, - result->dwz_bfd.get ()); - dwarf2_per_objfile->dwz_file = std::move (result); - return dwarf2_per_objfile->dwz_file.get (); -} - -/* DWARF quick_symbols_functions support. */ - -/* TUs can share .debug_line entries, and there can be a lot more TUs than - unique line tables, so we maintain a separate table of all .debug_line - derived entries to support the sharing. - All the quick functions need is the list of file names. We discard the - line_header when we're done and don't need to record it here. */ -struct quick_file_names -{ - /* The data used to construct the hash key. */ - struct stmt_list_hash hash; - - /* The number of entries in file_names, real_names. */ - unsigned int num_file_names; - - /* The file names from the line table, after being run through - file_full_name. */ - const char **file_names; - - /* The file names from the line table after being run through - gdb_realpath. These are computed lazily. */ - const char **real_names; -}; - -/* When using the index (and thus not using psymtabs), each CU has an - object of this type. This is used to hold information needed by - the various "quick" methods. */ -struct dwarf2_per_cu_quick_data -{ - /* The file table. This can be NULL if there was no file table - or it's currently not read in. - NOTE: This points into dwarf2_per_objfile->quick_file_names_table. */ - struct quick_file_names *file_names; - - /* The corresponding symbol table. This is NULL if symbols for this - CU have not yet been read. */ - struct compunit_symtab *compunit_symtab; - - /* A temporary mark bit used when iterating over all CUs in - expand_symtabs_matching. */ - unsigned int mark : 1; - - /* True if we've tried to read the file table and found there isn't one. - There will be no point in trying to read it again next time. */ - unsigned int no_file_data : 1; -}; - -/* Utility hash function for a stmt_list_hash. */ - -static hashval_t -hash_stmt_list_entry (const struct stmt_list_hash *stmt_list_hash) -{ - hashval_t v = 0; - - if (stmt_list_hash->dwo_unit != NULL) - v += (uintptr_t) stmt_list_hash->dwo_unit->dwo_file; - v += to_underlying (stmt_list_hash->line_sect_off); - return v; -} - -/* Utility equality function for a stmt_list_hash. */ - -static int -eq_stmt_list_entry (const struct stmt_list_hash *lhs, - const struct stmt_list_hash *rhs) -{ - if ((lhs->dwo_unit != NULL) != (rhs->dwo_unit != NULL)) - return 0; - if (lhs->dwo_unit != NULL - && lhs->dwo_unit->dwo_file != rhs->dwo_unit->dwo_file) - return 0; - - return lhs->line_sect_off == rhs->line_sect_off; -} - -/* Hash function for a quick_file_names. */ - -static hashval_t -hash_file_name_entry (const void *e) -{ - const struct quick_file_names *file_data - = (const struct quick_file_names *) e; - - return hash_stmt_list_entry (&file_data->hash); -} - -/* Equality function for a quick_file_names. */ - -static int -eq_file_name_entry (const void *a, const void *b) -{ - const struct quick_file_names *ea = (const struct quick_file_names *) a; - const struct quick_file_names *eb = (const struct quick_file_names *) b; - - return eq_stmt_list_entry (&ea->hash, &eb->hash); -} - -/* Delete function for a quick_file_names. */ - -static void -delete_file_name_entry (void *e) -{ - struct quick_file_names *file_data = (struct quick_file_names *) e; - int i; - - for (i = 0; i < file_data->num_file_names; ++i) - { - xfree ((void*) file_data->file_names[i]); - if (file_data->real_names) - xfree ((void*) file_data->real_names[i]); - } - - /* The space for the struct itself lives on objfile_obstack, - so we don't free it here. */ -} - -/* Create a quick_file_names hash table. */ - -static htab_t -create_quick_file_names_table (unsigned int nr_initial_entries) -{ - return htab_create_alloc (nr_initial_entries, - hash_file_name_entry, eq_file_name_entry, - delete_file_name_entry, xcalloc, xfree); -} - -/* Read in PER_CU->CU. This function is unrelated to symtabs, symtab would - have to be created afterwards. You should call age_cached_comp_units after - processing PER_CU->CU. dw2_setup must have been already called. */ - -static void -load_cu (struct dwarf2_per_cu_data *per_cu, bool skip_partial) -{ - if (per_cu->is_debug_types) - load_full_type_unit (per_cu); - else - load_full_comp_unit (per_cu, skip_partial, language_minimal); - - if (per_cu->cu == NULL) - return; /* Dummy CU. */ - - dwarf2_find_base_address (per_cu->cu->dies, per_cu->cu); -} - -/* Read in the symbols for PER_CU. */ - -static void -dw2_do_instantiate_symtab (struct dwarf2_per_cu_data *per_cu, bool skip_partial) -{ - struct dwarf2_per_objfile *dwarf2_per_objfile = per_cu->dwarf2_per_objfile; - - /* Skip type_unit_groups, reading the type units they contain - is handled elsewhere. */ - if (IS_TYPE_UNIT_GROUP (per_cu)) - return; - - /* The destructor of dwarf2_queue_guard frees any entries left on - the queue. After this point we're guaranteed to leave this function - with the dwarf queue empty. */ - dwarf2_queue_guard q_guard; - - if (dwarf2_per_objfile->using_index - ? per_cu->v.quick->compunit_symtab == NULL - : (per_cu->v.psymtab == NULL || !per_cu->v.psymtab->readin)) - { - queue_comp_unit (per_cu, language_minimal); - load_cu (per_cu, skip_partial); - - /* If we just loaded a CU from a DWO, and we're working with an index - that may badly handle TUs, load all the TUs in that DWO as well. - http://sourceware.org/bugzilla/show_bug.cgi?id=15021 */ - if (!per_cu->is_debug_types - && per_cu->cu != NULL - && per_cu->cu->dwo_unit != NULL - && dwarf2_per_objfile->index_table != NULL - && dwarf2_per_objfile->index_table->version <= 7 - /* DWP files aren't supported yet. */ - && get_dwp_file (dwarf2_per_objfile) == NULL) - queue_and_load_all_dwo_tus (per_cu); - } - - process_queue (dwarf2_per_objfile); - - /* Age the cache, releasing compilation units that have not - been used recently. */ - age_cached_comp_units (dwarf2_per_objfile); -} - -/* Ensure that the symbols for PER_CU have been read in. OBJFILE is - the objfile from which this CU came. Returns the resulting symbol - table. */ - -static struct compunit_symtab * -dw2_instantiate_symtab (struct dwarf2_per_cu_data *per_cu, bool skip_partial) -{ - struct dwarf2_per_objfile *dwarf2_per_objfile = per_cu->dwarf2_per_objfile; - - gdb_assert (dwarf2_per_objfile->using_index); - if (!per_cu->v.quick->compunit_symtab) - { - free_cached_comp_units freer (dwarf2_per_objfile); - scoped_restore decrementer = increment_reading_symtab (); - dw2_do_instantiate_symtab (per_cu, skip_partial); - process_cu_includes (dwarf2_per_objfile); - } - - return per_cu->v.quick->compunit_symtab; -} - -/* See declaration. */ - -dwarf2_per_cu_data * -dwarf2_per_objfile::get_cutu (int index) -{ - if (index >= this->all_comp_units.size ()) - { - index -= this->all_comp_units.size (); - gdb_assert (index < this->all_type_units.size ()); - return &this->all_type_units[index]->per_cu; - } - - return this->all_comp_units[index]; -} - -/* See declaration. */ - -dwarf2_per_cu_data * -dwarf2_per_objfile::get_cu (int index) -{ - gdb_assert (index >= 0 && index < this->all_comp_units.size ()); - - return this->all_comp_units[index]; -} - -/* See declaration. */ - -signatured_type * -dwarf2_per_objfile::get_tu (int index) -{ - gdb_assert (index >= 0 && index < this->all_type_units.size ()); - - return this->all_type_units[index]; -} - -/* Return a new dwarf2_per_cu_data allocated on OBJFILE's - objfile_obstack, and constructed with the specified field - values. */ - -static dwarf2_per_cu_data * -create_cu_from_index_list (struct dwarf2_per_objfile *dwarf2_per_objfile, - struct dwarf2_section_info *section, - int is_dwz, - sect_offset sect_off, ULONGEST length) -{ - struct objfile *objfile = dwarf2_per_objfile->objfile; - dwarf2_per_cu_data *the_cu - = OBSTACK_ZALLOC (&objfile->objfile_obstack, - struct dwarf2_per_cu_data); - the_cu->sect_off = sect_off; - the_cu->length = length; - the_cu->dwarf2_per_objfile = dwarf2_per_objfile; - the_cu->section = section; - the_cu->v.quick = OBSTACK_ZALLOC (&objfile->objfile_obstack, - struct dwarf2_per_cu_quick_data); - the_cu->is_dwz = is_dwz; - return the_cu; -} - -/* A helper for create_cus_from_index that handles a given list of - CUs. */ - -static void -create_cus_from_index_list (struct dwarf2_per_objfile *dwarf2_per_objfile, - const gdb_byte *cu_list, offset_type n_elements, - struct dwarf2_section_info *section, - int is_dwz) -{ - for (offset_type i = 0; i < n_elements; i += 2) - { - gdb_static_assert (sizeof (ULONGEST) >= 8); - - sect_offset sect_off - = (sect_offset) extract_unsigned_integer (cu_list, 8, BFD_ENDIAN_LITTLE); - ULONGEST length = extract_unsigned_integer (cu_list + 8, 8, BFD_ENDIAN_LITTLE); - cu_list += 2 * 8; - - dwarf2_per_cu_data *per_cu - = create_cu_from_index_list (dwarf2_per_objfile, section, is_dwz, - sect_off, length); - dwarf2_per_objfile->all_comp_units.push_back (per_cu); - } -} - -/* Read the CU list from the mapped index, and use it to create all - the CU objects for this objfile. */ - -static void -create_cus_from_index (struct dwarf2_per_objfile *dwarf2_per_objfile, - const gdb_byte *cu_list, offset_type cu_list_elements, - const gdb_byte *dwz_list, offset_type dwz_elements) -{ - gdb_assert (dwarf2_per_objfile->all_comp_units.empty ()); - dwarf2_per_objfile->all_comp_units.reserve - ((cu_list_elements + dwz_elements) / 2); - - create_cus_from_index_list (dwarf2_per_objfile, cu_list, cu_list_elements, - &dwarf2_per_objfile->info, 0); - - if (dwz_elements == 0) - return; - - dwz_file *dwz = dwarf2_get_dwz_file (dwarf2_per_objfile); - create_cus_from_index_list (dwarf2_per_objfile, dwz_list, dwz_elements, - &dwz->info, 1); -} - -/* Create the signatured type hash table from the index. */ - -static void -create_signatured_type_table_from_index - (struct dwarf2_per_objfile *dwarf2_per_objfile, - struct dwarf2_section_info *section, - const gdb_byte *bytes, - offset_type elements) -{ - struct objfile *objfile = dwarf2_per_objfile->objfile; - - gdb_assert (dwarf2_per_objfile->all_type_units.empty ()); - dwarf2_per_objfile->all_type_units.reserve (elements / 3); - - htab_t sig_types_hash = allocate_signatured_type_table (objfile); - - for (offset_type i = 0; i < elements; i += 3) - { - struct signatured_type *sig_type; - ULONGEST signature; - void **slot; - cu_offset type_offset_in_tu; - - gdb_static_assert (sizeof (ULONGEST) >= 8); - sect_offset sect_off - = (sect_offset) extract_unsigned_integer (bytes, 8, BFD_ENDIAN_LITTLE); - type_offset_in_tu - = (cu_offset) extract_unsigned_integer (bytes + 8, 8, - BFD_ENDIAN_LITTLE); - signature = extract_unsigned_integer (bytes + 16, 8, BFD_ENDIAN_LITTLE); - bytes += 3 * 8; - - sig_type = OBSTACK_ZALLOC (&objfile->objfile_obstack, - struct signatured_type); - sig_type->signature = signature; - sig_type->type_offset_in_tu = type_offset_in_tu; - sig_type->per_cu.is_debug_types = 1; - sig_type->per_cu.section = section; - sig_type->per_cu.sect_off = sect_off; - sig_type->per_cu.dwarf2_per_objfile = dwarf2_per_objfile; - sig_type->per_cu.v.quick - = OBSTACK_ZALLOC (&objfile->objfile_obstack, - struct dwarf2_per_cu_quick_data); - - slot = htab_find_slot (sig_types_hash, sig_type, INSERT); - *slot = sig_type; - - dwarf2_per_objfile->all_type_units.push_back (sig_type); - } - - dwarf2_per_objfile->signatured_types = sig_types_hash; -} - -/* Create the signatured type hash table from .debug_names. */ - -static void -create_signatured_type_table_from_debug_names - (struct dwarf2_per_objfile *dwarf2_per_objfile, - const mapped_debug_names &map, - struct dwarf2_section_info *section, - struct dwarf2_section_info *abbrev_section) -{ - struct objfile *objfile = dwarf2_per_objfile->objfile; - - dwarf2_read_section (objfile, section); - dwarf2_read_section (objfile, abbrev_section); - - gdb_assert (dwarf2_per_objfile->all_type_units.empty ()); - dwarf2_per_objfile->all_type_units.reserve (map.tu_count); - - htab_t sig_types_hash = allocate_signatured_type_table (objfile); - - for (uint32_t i = 0; i < map.tu_count; ++i) - { - struct signatured_type *sig_type; - void **slot; - - sect_offset sect_off - = (sect_offset) (extract_unsigned_integer - (map.tu_table_reordered + i * map.offset_size, - map.offset_size, - map.dwarf5_byte_order)); - - comp_unit_head cu_header; - read_and_check_comp_unit_head (dwarf2_per_objfile, &cu_header, section, - abbrev_section, - section->buffer + to_underlying (sect_off), - rcuh_kind::TYPE); - - sig_type = OBSTACK_ZALLOC (&objfile->objfile_obstack, - struct signatured_type); - sig_type->signature = cu_header.signature; - sig_type->type_offset_in_tu = cu_header.type_cu_offset_in_tu; - sig_type->per_cu.is_debug_types = 1; - sig_type->per_cu.section = section; - sig_type->per_cu.sect_off = sect_off; - sig_type->per_cu.dwarf2_per_objfile = dwarf2_per_objfile; - sig_type->per_cu.v.quick - = OBSTACK_ZALLOC (&objfile->objfile_obstack, - struct dwarf2_per_cu_quick_data); - - slot = htab_find_slot (sig_types_hash, sig_type, INSERT); - *slot = sig_type; - - dwarf2_per_objfile->all_type_units.push_back (sig_type); - } - - dwarf2_per_objfile->signatured_types = sig_types_hash; -} - -/* Read the address map data from the mapped index, and use it to - populate the objfile's psymtabs_addrmap. */ - -static void -create_addrmap_from_index (struct dwarf2_per_objfile *dwarf2_per_objfile, - struct mapped_index *index) -{ - struct objfile *objfile = dwarf2_per_objfile->objfile; - struct gdbarch *gdbarch = get_objfile_arch (objfile); - const gdb_byte *iter, *end; - struct addrmap *mutable_map; - CORE_ADDR baseaddr; - - auto_obstack temp_obstack; - - mutable_map = addrmap_create_mutable (&temp_obstack); - - iter = index->address_table.data (); - end = iter + index->address_table.size (); - - baseaddr = ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile)); - - while (iter < end) - { - ULONGEST hi, lo, cu_index; - lo = extract_unsigned_integer (iter, 8, BFD_ENDIAN_LITTLE); - iter += 8; - hi = extract_unsigned_integer (iter, 8, BFD_ENDIAN_LITTLE); - iter += 8; - cu_index = extract_unsigned_integer (iter, 4, BFD_ENDIAN_LITTLE); - iter += 4; - - if (lo > hi) - { - complaint (_(".gdb_index address table has invalid range (%s - %s)"), - hex_string (lo), hex_string (hi)); - continue; - } - - if (cu_index >= dwarf2_per_objfile->all_comp_units.size ()) - { - complaint (_(".gdb_index address table has invalid CU number %u"), - (unsigned) cu_index); - continue; - } - - lo = gdbarch_adjust_dwarf2_addr (gdbarch, lo + baseaddr) - baseaddr; - hi = gdbarch_adjust_dwarf2_addr (gdbarch, hi + baseaddr) - baseaddr; - addrmap_set_empty (mutable_map, lo, hi - 1, - dwarf2_per_objfile->get_cu (cu_index)); - } - - objfile->partial_symtabs->psymtabs_addrmap - = addrmap_create_fixed (mutable_map, objfile->partial_symtabs->obstack ()); -} - -/* Read the address map data from DWARF-5 .debug_aranges, and use it to - populate the objfile's psymtabs_addrmap. */ - -static void -create_addrmap_from_aranges (struct dwarf2_per_objfile *dwarf2_per_objfile, - struct dwarf2_section_info *section) -{ - struct objfile *objfile = dwarf2_per_objfile->objfile; - bfd *abfd = objfile->obfd; - struct gdbarch *gdbarch = get_objfile_arch (objfile); - const CORE_ADDR baseaddr = ANOFFSET (objfile->section_offsets, - SECT_OFF_TEXT (objfile)); - - auto_obstack temp_obstack; - addrmap *mutable_map = addrmap_create_mutable (&temp_obstack); - - std::unordered_map<sect_offset, - dwarf2_per_cu_data *, - gdb::hash_enum<sect_offset>> - debug_info_offset_to_per_cu; - for (dwarf2_per_cu_data *per_cu : dwarf2_per_objfile->all_comp_units) - { - const auto insertpair - = debug_info_offset_to_per_cu.emplace (per_cu->sect_off, per_cu); - 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; - } - } - - dwarf2_read_section (objfile, section); - - const bfd_endian dwarf5_byte_order = gdbarch_byte_order (gdbarch); - - const gdb_byte *addr = section->buffer; - - while (addr < section->buffer + section->size) - { - const gdb_byte *const entry_addr = addr; - unsigned int bytes_read; - - const LONGEST entry_length = read_initial_length (abfd, addr, - &bytes_read); - addr += bytes_read; - - const gdb_byte *const entry_end = addr + entry_length; - const bool dwarf5_is_dwarf64 = bytes_read != 4; - const uint8_t offset_size = dwarf5_is_dwarf64 ? 8 : 4; - if (addr + entry_length > section->buffer + section->size) - { - warning (_("Section .debug_aranges in %s entry at offset %s " - "length %s exceeds section length %s, " - "ignoring .debug_aranges."), - objfile_name (objfile), - plongest (entry_addr - section->buffer), - plongest (bytes_read + entry_length), - pulongest (section->size)); - return; - } - - /* The version number. */ - const uint16_t version = read_2_bytes (abfd, addr); - addr += 2; - if (version != 2) - { - warning (_("Section .debug_aranges in %s entry at offset %s " - "has unsupported version %d, ignoring .debug_aranges."), - objfile_name (objfile), - plongest (entry_addr - section->buffer), version); - return; - } - - const uint64_t debug_info_offset - = extract_unsigned_integer (addr, offset_size, dwarf5_byte_order); - addr += offset_size; - const auto per_cu_it - = debug_info_offset_to_per_cu.find (sect_offset (debug_info_offset)); - if (per_cu_it == debug_info_offset_to_per_cu.cend ()) - { - warning (_("Section .debug_aranges in %s entry at offset %s " - "debug_info_offset %s does not exists, " - "ignoring .debug_aranges."), - objfile_name (objfile), - plongest (entry_addr - section->buffer), - pulongest (debug_info_offset)); - return; - } - dwarf2_per_cu_data *const per_cu = per_cu_it->second; - - const uint8_t address_size = *addr++; - if (address_size < 1 || address_size > 8) - { - warning (_("Section .debug_aranges in %s entry at offset %s " - "address_size %u is invalid, ignoring .debug_aranges."), - objfile_name (objfile), - plongest (entry_addr - section->buffer), address_size); - return; - } - - const uint8_t segment_selector_size = *addr++; - if (segment_selector_size != 0) - { - warning (_("Section .debug_aranges in %s entry at offset %s " - "segment_selector_size %u is not supported, " - "ignoring .debug_aranges."), - objfile_name (objfile), - plongest (entry_addr - section->buffer), - segment_selector_size); - return; - } - - /* Must pad to an alignment boundary that is twice the address - size. It is undocumented by the DWARF standard but GCC does - use it. */ - for (size_t padding = ((-(addr - section->buffer)) - & (2 * address_size - 1)); - padding > 0; padding--) - if (*addr++ != 0) - { - warning (_("Section .debug_aranges in %s entry at offset %s " - "padding is not zero, ignoring .debug_aranges."), - objfile_name (objfile), - plongest (entry_addr - section->buffer)); - return; - } - - for (;;) - { - if (addr + 2 * address_size > entry_end) - { - warning (_("Section .debug_aranges in %s entry at offset %s " - "address list is not properly terminated, " - "ignoring .debug_aranges."), - objfile_name (objfile), - plongest (entry_addr - section->buffer)); - return; - } - ULONGEST start = extract_unsigned_integer (addr, address_size, - dwarf5_byte_order); - addr += address_size; - ULONGEST length = extract_unsigned_integer (addr, address_size, - dwarf5_byte_order); - addr += address_size; - if (start == 0 && length == 0) - break; - if (start == 0 && !dwarf2_per_objfile->has_section_at_zero) - { - /* Symbol was eliminated due to a COMDAT group. */ - continue; - } - ULONGEST end = start + length; - start = (gdbarch_adjust_dwarf2_addr (gdbarch, start + baseaddr) - - baseaddr); - end = (gdbarch_adjust_dwarf2_addr (gdbarch, end + baseaddr) - - baseaddr); - addrmap_set_empty (mutable_map, start, end - 1, per_cu); - } - } - - objfile->partial_symtabs->psymtabs_addrmap - = addrmap_create_fixed (mutable_map, objfile->partial_symtabs->obstack ()); -} - -/* Find a slot in the mapped index INDEX for the object named NAME. - If NAME is found, set *VEC_OUT to point to the CU vector in the - constant pool and return true. If NAME cannot be found, return - false. */ - -static bool -find_slot_in_mapped_hash (struct mapped_index *index, const char *name, - offset_type **vec_out) -{ - offset_type hash; - offset_type slot, step; - int (*cmp) (const char *, const char *); - - gdb::unique_xmalloc_ptr<char> without_params; - if (current_language->la_language == language_cplus - || current_language->la_language == language_fortran - || current_language->la_language == language_d) - { - /* NAME is already canonical. Drop any qualifiers as .gdb_index does - not contain any. */ - - if (strchr (name, '(') != NULL) - { - without_params = cp_remove_params (name); - - if (without_params != NULL) - name = without_params.get (); - } - } - - /* Index version 4 did not support case insensitive searches. But the - indices for case insensitive languages are built in lowercase, therefore - simulate our NAME being searched is also lowercased. */ - hash = mapped_index_string_hash ((index->version == 4 - && case_sensitivity == case_sensitive_off - ? 5 : index->version), - name); - - slot = hash & (index->symbol_table.size () - 1); - step = ((hash * 17) & (index->symbol_table.size () - 1)) | 1; - cmp = (case_sensitivity == case_sensitive_on ? strcmp : strcasecmp); - - for (;;) - { - const char *str; - - const auto &bucket = index->symbol_table[slot]; - if (bucket.name == 0 && bucket.vec == 0) - return false; - - str = index->constant_pool + MAYBE_SWAP (bucket.name); - if (!cmp (name, str)) - { - *vec_out = (offset_type *) (index->constant_pool - + MAYBE_SWAP (bucket.vec)); - return true; - } - - slot = (slot + step) & (index->symbol_table.size () - 1); - } -} - -/* A helper function that reads the .gdb_index from BUFFER and fills - in MAP. FILENAME is the name of the file containing the data; - it is used for error reporting. DEPRECATED_OK is true if it is - ok to use deprecated sections. - - CU_LIST, CU_LIST_ELEMENTS, TYPES_LIST, and TYPES_LIST_ELEMENTS are - out parameters that are filled in with information about the CU and - TU lists in the section. - - Returns true if all went well, false otherwise. */ - -static bool -read_gdb_index_from_buffer (struct objfile *objfile, - const char *filename, - bool deprecated_ok, - gdb::array_view<const gdb_byte> buffer, - struct mapped_index *map, - const gdb_byte **cu_list, - offset_type *cu_list_elements, - const gdb_byte **types_list, - offset_type *types_list_elements) -{ - const gdb_byte *addr = &buffer[0]; - - /* Version check. */ - offset_type version = MAYBE_SWAP (*(offset_type *) addr); - /* Versions earlier than 3 emitted every copy of a psymbol. This - causes the index to behave very poorly for certain requests. Version 3 - contained incomplete addrmap. So, it seems better to just ignore such - indices. */ - if (version < 4) - { - static int warning_printed = 0; - if (!warning_printed) - { - warning (_("Skipping obsolete .gdb_index section in %s."), - filename); - warning_printed = 1; - } - return 0; - } - /* Index version 4 uses a different hash function than index version - 5 and later. - - Versions earlier than 6 did not emit psymbols for inlined - functions. Using these files will cause GDB not to be able to - set breakpoints on inlined functions by name, so we ignore these - indices unless the user has done - "set use-deprecated-index-sections on". */ - if (version < 6 && !deprecated_ok) - { - static int warning_printed = 0; - if (!warning_printed) - { - warning (_("\ -Skipping deprecated .gdb_index section in %s.\n\ -Do \"set use-deprecated-index-sections on\" before the file is read\n\ -to use the section anyway."), - filename); - warning_printed = 1; - } - return 0; - } - /* Version 7 indices generated by gold refer to the CU for a symbol instead - of the TU (for symbols coming from TUs), - http://sourceware.org/bugzilla/show_bug.cgi?id=15021. - Plus gold-generated indices can have duplicate entries for global symbols, - http://sourceware.org/bugzilla/show_bug.cgi?id=15646. - These are just performance bugs, and we can't distinguish gdb-generated - indices from gold-generated ones, so issue no warning here. */ - - /* Indexes with higher version than the one supported by GDB may be no - longer backward compatible. */ - if (version > 8) - return 0; - - map->version = version; - - offset_type *metadata = (offset_type *) (addr + sizeof (offset_type)); - - int i = 0; - *cu_list = addr + MAYBE_SWAP (metadata[i]); - *cu_list_elements = ((MAYBE_SWAP (metadata[i + 1]) - MAYBE_SWAP (metadata[i])) - / 8); - ++i; - - *types_list = addr + MAYBE_SWAP (metadata[i]); - *types_list_elements = ((MAYBE_SWAP (metadata[i + 1]) - - MAYBE_SWAP (metadata[i])) - / 8); - ++i; - - const gdb_byte *address_table = addr + MAYBE_SWAP (metadata[i]); - const gdb_byte *address_table_end = addr + MAYBE_SWAP (metadata[i + 1]); - map->address_table - = gdb::array_view<const gdb_byte> (address_table, address_table_end); - ++i; - - const gdb_byte *symbol_table = addr + MAYBE_SWAP (metadata[i]); - const gdb_byte *symbol_table_end = addr + MAYBE_SWAP (metadata[i + 1]); - map->symbol_table - = gdb::array_view<mapped_index::symbol_table_slot> - ((mapped_index::symbol_table_slot *) symbol_table, - (mapped_index::symbol_table_slot *) symbol_table_end); - - ++i; - map->constant_pool = (char *) (addr + MAYBE_SWAP (metadata[i])); - - return 1; -} - -/* Callback types for dwarf2_read_gdb_index. */ - -typedef gdb::function_view - <gdb::array_view<const gdb_byte>(objfile *, dwarf2_per_objfile *)> - get_gdb_index_contents_ftype; -typedef gdb::function_view - <gdb::array_view<const gdb_byte>(objfile *, dwz_file *)> - get_gdb_index_contents_dwz_ftype; - -/* Read .gdb_index. If everything went ok, initialize the "quick" - elements of all the CUs and return 1. Otherwise, return 0. */ - -static int -dwarf2_read_gdb_index - (struct dwarf2_per_objfile *dwarf2_per_objfile, - get_gdb_index_contents_ftype get_gdb_index_contents, - get_gdb_index_contents_dwz_ftype get_gdb_index_contents_dwz) -{ - const gdb_byte *cu_list, *types_list, *dwz_list = NULL; - offset_type cu_list_elements, types_list_elements, dwz_list_elements = 0; - struct dwz_file *dwz; - struct objfile *objfile = dwarf2_per_objfile->objfile; - - gdb::array_view<const gdb_byte> main_index_contents - = get_gdb_index_contents (objfile, dwarf2_per_objfile); - - if (main_index_contents.empty ()) - return 0; - - std::unique_ptr<struct mapped_index> map (new struct mapped_index); - if (!read_gdb_index_from_buffer (objfile, objfile_name (objfile), - use_deprecated_index_sections, - main_index_contents, map.get (), &cu_list, - &cu_list_elements, &types_list, - &types_list_elements)) - return 0; - - /* Don't use the index if it's empty. */ - if (map->symbol_table.empty ()) - return 0; - - /* If there is a .dwz file, read it so we can get its CU list as - well. */ - dwz = dwarf2_get_dwz_file (dwarf2_per_objfile); - if (dwz != NULL) - { - struct mapped_index dwz_map; - const gdb_byte *dwz_types_ignore; - offset_type dwz_types_elements_ignore; - - gdb::array_view<const gdb_byte> dwz_index_content - = get_gdb_index_contents_dwz (objfile, dwz); - - if (dwz_index_content.empty ()) - return 0; - - if (!read_gdb_index_from_buffer (objfile, - bfd_get_filename (dwz->dwz_bfd.get ()), - 1, dwz_index_content, &dwz_map, - &dwz_list, &dwz_list_elements, - &dwz_types_ignore, - &dwz_types_elements_ignore)) - { - warning (_("could not read '.gdb_index' section from %s; skipping"), - bfd_get_filename (dwz->dwz_bfd.get ())); - return 0; - } - } - - create_cus_from_index (dwarf2_per_objfile, cu_list, cu_list_elements, - dwz_list, dwz_list_elements); - - if (types_list_elements) - { - /* We can only handle a single .debug_types when we have an - index. */ - if (dwarf2_per_objfile->types.size () != 1) - return 0; - - dwarf2_section_info *section = &dwarf2_per_objfile->types[0]; - - create_signatured_type_table_from_index (dwarf2_per_objfile, section, - types_list, types_list_elements); - } - - create_addrmap_from_index (dwarf2_per_objfile, map.get ()); - - dwarf2_per_objfile->index_table = std::move (map); - dwarf2_per_objfile->using_index = 1; - dwarf2_per_objfile->quick_file_names_table = - create_quick_file_names_table (dwarf2_per_objfile->all_comp_units.size ()); - - return 1; -} - -/* die_reader_func for dw2_get_file_names. */ - -static void -dw2_get_file_names_reader (const struct die_reader_specs *reader, - const gdb_byte *info_ptr, - struct die_info *comp_unit_die, - int has_children, - void *data) -{ - struct dwarf2_cu *cu = reader->cu; - struct dwarf2_per_cu_data *this_cu = cu->per_cu; - struct dwarf2_per_objfile *dwarf2_per_objfile - = cu->per_cu->dwarf2_per_objfile; - struct objfile *objfile = dwarf2_per_objfile->objfile; - struct dwarf2_per_cu_data *lh_cu; - struct attribute *attr; - void **slot; - struct quick_file_names *qfn; - - gdb_assert (! this_cu->is_debug_types); - - /* Our callers never want to match partial units -- instead they - will match the enclosing full CU. */ - if (comp_unit_die->tag == DW_TAG_partial_unit) - { - this_cu->v.quick->no_file_data = 1; - return; - } - - lh_cu = this_cu; - slot = NULL; - - line_header_up lh; - sect_offset line_offset {}; - - attr = dwarf2_attr (comp_unit_die, DW_AT_stmt_list, cu); - if (attr != nullptr) - { - struct quick_file_names find_entry; - - line_offset = (sect_offset) DW_UNSND (attr); - - /* We may have already read in this line header (TU line header sharing). - If we have we're done. */ - find_entry.hash.dwo_unit = cu->dwo_unit; - find_entry.hash.line_sect_off = line_offset; - slot = htab_find_slot (dwarf2_per_objfile->quick_file_names_table, - &find_entry, INSERT); - if (*slot != NULL) - { - lh_cu->v.quick->file_names = (struct quick_file_names *) *slot; - return; - } - - lh = dwarf_decode_line_header (line_offset, cu); - } - if (lh == NULL) - { - lh_cu->v.quick->no_file_data = 1; - return; - } - - qfn = XOBNEW (&objfile->objfile_obstack, struct quick_file_names); - qfn->hash.dwo_unit = cu->dwo_unit; - qfn->hash.line_sect_off = line_offset; - gdb_assert (slot != NULL); - *slot = qfn; - - file_and_directory fnd = find_file_and_directory (comp_unit_die, cu); - - int offset = 0; - if (strcmp (fnd.name, "<unknown>") != 0) - ++offset; - - qfn->num_file_names = offset + lh->file_names_size (); - qfn->file_names = - XOBNEWVEC (&objfile->objfile_obstack, const char *, qfn->num_file_names); - if (offset != 0) - qfn->file_names[0] = xstrdup (fnd.name); - for (int i = 0; i < lh->file_names_size (); ++i) - qfn->file_names[i + offset] = file_full_name (i + 1, lh.get (), fnd.comp_dir); - qfn->real_names = NULL; - - lh_cu->v.quick->file_names = qfn; -} - -/* A helper for the "quick" functions which attempts to read the line - table for THIS_CU. */ - -static struct quick_file_names * -dw2_get_file_names (struct dwarf2_per_cu_data *this_cu) -{ - /* This should never be called for TUs. */ - gdb_assert (! this_cu->is_debug_types); - /* Nor type unit groups. */ - gdb_assert (! IS_TYPE_UNIT_GROUP (this_cu)); - - if (this_cu->v.quick->file_names != NULL) - return this_cu->v.quick->file_names; - /* If we know there is no line data, no point in looking again. */ - if (this_cu->v.quick->no_file_data) - return NULL; - - init_cutu_and_read_dies_simple (this_cu, dw2_get_file_names_reader, NULL); - - if (this_cu->v.quick->no_file_data) - return NULL; - return this_cu->v.quick->file_names; -} - -/* A helper for the "quick" functions which computes and caches the - real path for a given file name from the line table. */ - -static const char * -dw2_get_real_path (struct objfile *objfile, - struct quick_file_names *qfn, int index) -{ - if (qfn->real_names == NULL) - qfn->real_names = OBSTACK_CALLOC (&objfile->objfile_obstack, - qfn->num_file_names, const char *); - - if (qfn->real_names[index] == NULL) - qfn->real_names[index] = gdb_realpath (qfn->file_names[index]).release (); - - return qfn->real_names[index]; -} - -static struct symtab * -dw2_find_last_source_symtab (struct objfile *objfile) -{ - struct dwarf2_per_objfile *dwarf2_per_objfile - = get_dwarf2_per_objfile (objfile); - dwarf2_per_cu_data *dwarf_cu = dwarf2_per_objfile->all_comp_units.back (); - compunit_symtab *cust = dw2_instantiate_symtab (dwarf_cu, false); - - if (cust == NULL) - return NULL; - - return compunit_primary_filetab (cust); -} - -/* Traversal function for dw2_forget_cached_source_info. */ - -static int -dw2_free_cached_file_names (void **slot, void *info) -{ - struct quick_file_names *file_data = (struct quick_file_names *) *slot; - - if (file_data->real_names) - { - int i; - - for (i = 0; i < file_data->num_file_names; ++i) - { - xfree ((void*) file_data->real_names[i]); - file_data->real_names[i] = NULL; - } - } - - return 1; -} - -static void -dw2_forget_cached_source_info (struct objfile *objfile) -{ - struct dwarf2_per_objfile *dwarf2_per_objfile - = get_dwarf2_per_objfile (objfile); - - htab_traverse_noresize (dwarf2_per_objfile->quick_file_names_table, - dw2_free_cached_file_names, NULL); -} - -/* Helper function for dw2_map_symtabs_matching_filename that expands - the symtabs and calls the iterator. */ - -static int -dw2_map_expand_apply (struct objfile *objfile, - struct dwarf2_per_cu_data *per_cu, - const char *name, const char *real_path, - gdb::function_view<bool (symtab *)> callback) -{ - struct compunit_symtab *last_made = objfile->compunit_symtabs; - - /* Don't visit already-expanded CUs. */ - if (per_cu->v.quick->compunit_symtab) - return 0; - - /* This may expand more than one symtab, and we want to iterate over - all of them. */ - dw2_instantiate_symtab (per_cu, false); - - return iterate_over_some_symtabs (name, real_path, objfile->compunit_symtabs, - last_made, callback); -} - -/* Implementation of the map_symtabs_matching_filename method. */ - -static bool -dw2_map_symtabs_matching_filename - (struct objfile *objfile, const char *name, const char *real_path, - gdb::function_view<bool (symtab *)> callback) -{ - const char *name_basename = lbasename (name); - struct dwarf2_per_objfile *dwarf2_per_objfile - = get_dwarf2_per_objfile (objfile); - - /* The rule is CUs specify all the files, including those used by - any TU, so there's no need to scan TUs here. */ - - for (dwarf2_per_cu_data *per_cu : dwarf2_per_objfile->all_comp_units) - { - /* We only need to look at symtabs not already expanded. */ - if (per_cu->v.quick->compunit_symtab) - continue; - - quick_file_names *file_data = dw2_get_file_names (per_cu); - if (file_data == NULL) - continue; - - for (int j = 0; j < file_data->num_file_names; ++j) - { - const char *this_name = file_data->file_names[j]; - const char *this_real_name; - - if (compare_filenames_for_search (this_name, name)) - { - if (dw2_map_expand_apply (objfile, per_cu, name, real_path, - callback)) - return true; - continue; - } - - /* Before we invoke realpath, which can get expensive when many - files are involved, do a quick comparison of the basenames. */ - if (! basenames_may_differ - && FILENAME_CMP (lbasename (this_name), name_basename) != 0) - continue; - - this_real_name = dw2_get_real_path (objfile, file_data, j); - if (compare_filenames_for_search (this_real_name, name)) - { - if (dw2_map_expand_apply (objfile, per_cu, name, real_path, - callback)) - return true; - continue; - } - - if (real_path != NULL) - { - gdb_assert (IS_ABSOLUTE_PATH (real_path)); - gdb_assert (IS_ABSOLUTE_PATH (name)); - if (this_real_name != NULL - && FILENAME_CMP (real_path, this_real_name) == 0) - { - if (dw2_map_expand_apply (objfile, per_cu, name, real_path, - callback)) - return true; - continue; - } - } - } - } - - return false; -} - -/* Struct used to manage iterating over all CUs looking for a symbol. */ - -struct dw2_symtab_iterator -{ - /* The dwarf2_per_objfile owning the CUs we are iterating on. */ - struct dwarf2_per_objfile *dwarf2_per_objfile; - /* If set, only look for symbols that match that block. Valid values are - GLOBAL_BLOCK and STATIC_BLOCK. */ - gdb::optional<block_enum> block_index; - /* The kind of symbol we're looking for. */ - domain_enum domain; - /* The list of CUs from the index entry of the symbol, - or NULL if not found. */ - offset_type *vec; - /* The next element in VEC to look at. */ - int next; - /* The number of elements in VEC, or zero if there is no match. */ - int length; - /* Have we seen a global version of the symbol? - If so we can ignore all further global instances. - This is to work around gold/15646, inefficient gold-generated - indices. */ - int global_seen; -}; - -/* Initialize the index symtab iterator ITER. */ - -static void -dw2_symtab_iter_init (struct dw2_symtab_iterator *iter, - struct dwarf2_per_objfile *dwarf2_per_objfile, - gdb::optional<block_enum> block_index, - domain_enum domain, - const char *name) -{ - iter->dwarf2_per_objfile = dwarf2_per_objfile; - iter->block_index = block_index; - iter->domain = domain; - iter->next = 0; - iter->global_seen = 0; - - mapped_index *index = dwarf2_per_objfile->index_table.get (); - - /* index is NULL if OBJF_READNOW. */ - if (index != NULL && find_slot_in_mapped_hash (index, name, &iter->vec)) - iter->length = MAYBE_SWAP (*iter->vec); - else - { - iter->vec = NULL; - iter->length = 0; - } -} - -/* Return the next matching CU or NULL if there are no more. */ - -static struct dwarf2_per_cu_data * -dw2_symtab_iter_next (struct dw2_symtab_iterator *iter) -{ - struct dwarf2_per_objfile *dwarf2_per_objfile = iter->dwarf2_per_objfile; - - for ( ; iter->next < iter->length; ++iter->next) - { - offset_type cu_index_and_attrs = - MAYBE_SWAP (iter->vec[iter->next + 1]); - offset_type cu_index = GDB_INDEX_CU_VALUE (cu_index_and_attrs); - gdb_index_symbol_kind symbol_kind = - GDB_INDEX_SYMBOL_KIND_VALUE (cu_index_and_attrs); - /* Only check the symbol attributes if they're present. - Indices prior to version 7 don't record them, - and indices >= 7 may elide them for certain symbols - (gold does this). */ - int attrs_valid = - (dwarf2_per_objfile->index_table->version >= 7 - && symbol_kind != GDB_INDEX_SYMBOL_KIND_NONE); - - /* Don't crash on bad data. */ - if (cu_index >= (dwarf2_per_objfile->all_comp_units.size () - + dwarf2_per_objfile->all_type_units.size ())) - { - complaint (_(".gdb_index entry has bad CU index" - " [in module %s]"), - objfile_name (dwarf2_per_objfile->objfile)); - continue; - } - - dwarf2_per_cu_data *per_cu = dwarf2_per_objfile->get_cutu (cu_index); - - /* Skip if already read in. */ - if (per_cu->v.quick->compunit_symtab) - continue; - - /* Check static vs global. */ - if (attrs_valid) - { - bool is_static = GDB_INDEX_SYMBOL_STATIC_VALUE (cu_index_and_attrs); - - if (iter->block_index.has_value ()) - { - bool want_static = *iter->block_index == STATIC_BLOCK; - - if (is_static != want_static) - continue; - } - - /* Work around gold/15646. */ - if (!is_static && iter->global_seen) - continue; - if (!is_static) - iter->global_seen = 1; - } - - /* Only check the symbol's kind if it has one. */ - if (attrs_valid) - { - switch (iter->domain) - { - case VAR_DOMAIN: - if (symbol_kind != GDB_INDEX_SYMBOL_KIND_VARIABLE - && symbol_kind != GDB_INDEX_SYMBOL_KIND_FUNCTION - /* Some types are also in VAR_DOMAIN. */ - && symbol_kind != GDB_INDEX_SYMBOL_KIND_TYPE) - continue; - break; - case STRUCT_DOMAIN: - if (symbol_kind != GDB_INDEX_SYMBOL_KIND_TYPE) - continue; - break; - case LABEL_DOMAIN: - if (symbol_kind != GDB_INDEX_SYMBOL_KIND_OTHER) - continue; - break; - case MODULE_DOMAIN: - if (symbol_kind != GDB_INDEX_SYMBOL_KIND_OTHER) - continue; - break; - default: - break; - } - } - - ++iter->next; - return per_cu; - } - - return NULL; -} - -static struct compunit_symtab * -dw2_lookup_symbol (struct objfile *objfile, block_enum block_index, - const char *name, domain_enum domain) -{ - struct compunit_symtab *stab_best = NULL; - struct dwarf2_per_objfile *dwarf2_per_objfile - = get_dwarf2_per_objfile (objfile); - - lookup_name_info lookup_name (name, symbol_name_match_type::FULL); - - struct dw2_symtab_iterator iter; - struct dwarf2_per_cu_data *per_cu; - - dw2_symtab_iter_init (&iter, dwarf2_per_objfile, block_index, domain, name); - - while ((per_cu = dw2_symtab_iter_next (&iter)) != NULL) - { - struct symbol *sym, *with_opaque = NULL; - struct compunit_symtab *stab = dw2_instantiate_symtab (per_cu, false); - const struct blockvector *bv = COMPUNIT_BLOCKVECTOR (stab); - const struct block *block = BLOCKVECTOR_BLOCK (bv, block_index); - - sym = block_find_symbol (block, name, domain, - block_find_non_opaque_type_preferred, - &with_opaque); - - /* Some caution must be observed with overloaded functions - and methods, since the index will not contain any overload - information (but NAME might contain it). */ - - if (sym != NULL - && SYMBOL_MATCHES_SEARCH_NAME (sym, lookup_name)) - return stab; - if (with_opaque != NULL - && SYMBOL_MATCHES_SEARCH_NAME (with_opaque, lookup_name)) - stab_best = stab; - - /* Keep looking through other CUs. */ - } - - return stab_best; -} - -static void -dw2_print_stats (struct objfile *objfile) -{ - struct dwarf2_per_objfile *dwarf2_per_objfile - = get_dwarf2_per_objfile (objfile); - int total = (dwarf2_per_objfile->all_comp_units.size () - + dwarf2_per_objfile->all_type_units.size ()); - int count = 0; - - for (int i = 0; i < total; ++i) - { - dwarf2_per_cu_data *per_cu = dwarf2_per_objfile->get_cutu (i); - - if (!per_cu->v.quick->compunit_symtab) - ++count; - } - printf_filtered (_(" Number of read CUs: %d\n"), total - count); - printf_filtered (_(" Number of unread CUs: %d\n"), count); -} - -/* This dumps minimal information about the index. - It is called via "mt print objfiles". - One use is to verify .gdb_index has been loaded by the - gdb.dwarf2/gdb-index.exp testcase. */ - -static void -dw2_dump (struct objfile *objfile) -{ - struct dwarf2_per_objfile *dwarf2_per_objfile - = get_dwarf2_per_objfile (objfile); - - gdb_assert (dwarf2_per_objfile->using_index); - printf_filtered (".gdb_index:"); - if (dwarf2_per_objfile->index_table != NULL) - { - printf_filtered (" version %d\n", - dwarf2_per_objfile->index_table->version); - } - else - printf_filtered (" faked for \"readnow\"\n"); - printf_filtered ("\n"); -} - -static void -dw2_expand_symtabs_for_function (struct objfile *objfile, - const char *func_name) -{ - struct dwarf2_per_objfile *dwarf2_per_objfile - = get_dwarf2_per_objfile (objfile); - - struct dw2_symtab_iterator iter; - struct dwarf2_per_cu_data *per_cu; - - dw2_symtab_iter_init (&iter, dwarf2_per_objfile, {}, VAR_DOMAIN, func_name); - - while ((per_cu = dw2_symtab_iter_next (&iter)) != NULL) - dw2_instantiate_symtab (per_cu, false); - -} - -static void -dw2_expand_all_symtabs (struct objfile *objfile) -{ - struct dwarf2_per_objfile *dwarf2_per_objfile - = get_dwarf2_per_objfile (objfile); - int total_units = (dwarf2_per_objfile->all_comp_units.size () - + dwarf2_per_objfile->all_type_units.size ()); - - for (int i = 0; i < total_units; ++i) - { - dwarf2_per_cu_data *per_cu = dwarf2_per_objfile->get_cutu (i); - - /* We don't want to directly expand a partial CU, because if we - read it with the wrong language, then assertion failures can - be triggered later on. See PR symtab/23010. So, tell - dw2_instantiate_symtab to skip partial CUs -- any important - partial CU will be read via DW_TAG_imported_unit anyway. */ - dw2_instantiate_symtab (per_cu, true); - } -} - -static void -dw2_expand_symtabs_with_fullname (struct objfile *objfile, - const char *fullname) -{ - struct dwarf2_per_objfile *dwarf2_per_objfile - = get_dwarf2_per_objfile (objfile); - - /* We don't need to consider type units here. - This is only called for examining code, e.g. expand_line_sal. - There can be an order of magnitude (or more) more type units - than comp units, and we avoid them if we can. */ - - for (dwarf2_per_cu_data *per_cu : dwarf2_per_objfile->all_comp_units) - { - /* We only need to look at symtabs not already expanded. */ - if (per_cu->v.quick->compunit_symtab) - continue; - - quick_file_names *file_data = dw2_get_file_names (per_cu); - if (file_data == NULL) - continue; - - for (int j = 0; j < file_data->num_file_names; ++j) - { - const char *this_fullname = file_data->file_names[j]; - - if (filename_cmp (this_fullname, fullname) == 0) - { - dw2_instantiate_symtab (per_cu, false); - break; - } - } - } -} - -static void -dw2_map_matching_symbols - (struct objfile *objfile, - const lookup_name_info &name, domain_enum domain, - int global, - gdb::function_view<symbol_found_callback_ftype> callback, - symbol_compare_ftype *ordered_compare) -{ - /* Currently unimplemented; used for Ada. The function can be called if the - current language is Ada for a non-Ada objfile using GNU index. As Ada - does not look for non-Ada symbols this function should just return. */ -} - -/* Starting from a search name, return the string that finds the upper - bound of all strings that start with SEARCH_NAME in a sorted name - list. Returns the empty string to indicate that the upper bound is - the end of the list. */ - -static std::string -make_sort_after_prefix_name (const char *search_name) -{ - /* When looking to complete "func", we find the upper bound of all - symbols that start with "func" by looking for where we'd insert - the closest string that would follow "func" in lexicographical - order. Usually, that's "func"-with-last-character-incremented, - i.e. "fund". Mind non-ASCII characters, though. Usually those - will be UTF-8 multi-byte sequences, but we can't be certain. - Especially mind the 0xff character, which is a valid character in - non-UTF-8 source character sets (e.g. Latin1 'ÿ'), and we can't - rule out compilers allowing it in identifiers. Note that - conveniently, strcmp/strcasecmp are specified to compare - characters interpreted as unsigned char. So what we do is treat - the whole string as a base 256 number composed of a sequence of - base 256 "digits" and add 1 to it. I.e., adding 1 to 0xff wraps - to 0, and carries 1 to the following more-significant position. - If the very first character in SEARCH_NAME ends up incremented - and carries/overflows, then the upper bound is the end of the - list. The string after the empty string is also the empty - string. - - Some examples of this operation: - - SEARCH_NAME => "+1" RESULT - - "abc" => "abd" - "ab\xff" => "ac" - "\xff" "a" "\xff" => "\xff" "b" - "\xff" => "" - "\xff\xff" => "" - "" => "" - - Then, with these symbols for example: - - func - func1 - fund - - completing "func" looks for symbols between "func" and - "func"-with-last-character-incremented, i.e. "fund" (exclusive), - which finds "func" and "func1", but not "fund". - - And with: - - funcÿ (Latin1 'ÿ' [0xff]) - funcÿ1 - fund - - completing "funcÿ" looks for symbols between "funcÿ" and "fund" - (exclusive), which finds "funcÿ" and "funcÿ1", but not "fund". - - And with: - - ÿÿ (Latin1 'ÿ' [0xff]) - ÿÿ1 - - completing "ÿ" or "ÿÿ" looks for symbols between between "ÿÿ" and - the end of the list. - */ - std::string after = search_name; - while (!after.empty () && (unsigned char) after.back () == 0xff) - after.pop_back (); - if (!after.empty ()) - after.back () = (unsigned char) after.back () + 1; - return after; -} - -/* See declaration. */ - -std::pair<std::vector<name_component>::const_iterator, - std::vector<name_component>::const_iterator> -mapped_index_base::find_name_components_bounds - (const lookup_name_info &lookup_name_without_params, language lang) const -{ - auto *name_cmp - = this->name_components_casing == case_sensitive_on ? strcmp : strcasecmp; - - const char *lang_name - = lookup_name_without_params.language_lookup_name (lang).c_str (); - - /* Comparison function object for lower_bound that matches against a - given symbol name. */ - auto lookup_compare_lower = [&] (const name_component &elem, - const char *name) - { - const char *elem_qualified = this->symbol_name_at (elem.idx); - const char *elem_name = elem_qualified + elem.name_offset; - return name_cmp (elem_name, name) < 0; - }; - - /* Comparison function object for upper_bound that matches against a - given symbol name. */ - auto lookup_compare_upper = [&] (const char *name, - const name_component &elem) - { - const char *elem_qualified = this->symbol_name_at (elem.idx); - const char *elem_name = elem_qualified + elem.name_offset; - return name_cmp (name, elem_name) < 0; - }; - - auto begin = this->name_components.begin (); - auto end = this->name_components.end (); - - /* Find the lower bound. */ - auto lower = [&] () - { - if (lookup_name_without_params.completion_mode () && lang_name[0] == '\0') - return begin; - else - return std::lower_bound (begin, end, lang_name, lookup_compare_lower); - } (); - - /* Find the upper bound. */ - auto upper = [&] () - { - if (lookup_name_without_params.completion_mode ()) - { - /* In completion mode, we want UPPER to point past all - symbols names that have the same prefix. I.e., with - these symbols, and completing "func": - - function << lower bound - function1 - other_function << upper bound - - We find the upper bound by looking for the insertion - point of "func"-with-last-character-incremented, - i.e. "fund". */ - std::string after = make_sort_after_prefix_name (lang_name); - if (after.empty ()) - return end; - return std::lower_bound (lower, end, after.c_str (), - lookup_compare_lower); - } - else - return std::upper_bound (lower, end, lang_name, lookup_compare_upper); - } (); - - return {lower, upper}; -} - -/* See declaration. */ - -void -mapped_index_base::build_name_components () -{ - if (!this->name_components.empty ()) - return; - - this->name_components_casing = case_sensitivity; - auto *name_cmp - = this->name_components_casing == case_sensitive_on ? strcmp : strcasecmp; - - /* The code below only knows how to break apart components of C++ - symbol names (and other languages that use '::' as - namespace/module separator) and Ada symbol names. */ - auto count = this->symbol_name_count (); - for (offset_type idx = 0; idx < count; idx++) - { - if (this->symbol_name_slot_invalid (idx)) - continue; - - const char *name = this->symbol_name_at (idx); - - /* Add each name component to the name component table. */ - unsigned int previous_len = 0; - - if (strstr (name, "::") != nullptr) - { - for (unsigned int current_len = cp_find_first_component (name); - name[current_len] != '\0'; - current_len += cp_find_first_component (name + current_len)) - { - gdb_assert (name[current_len] == ':'); - this->name_components.push_back ({previous_len, idx}); - /* Skip the '::'. */ - current_len += 2; - previous_len = current_len; - } - } - else - { - /* Handle the Ada encoded (aka mangled) form here. */ - for (const char *iter = strstr (name, "__"); - iter != nullptr; - iter = strstr (iter, "__")) - { - this->name_components.push_back ({previous_len, idx}); - iter += 2; - previous_len = iter - name; - } - } - - this->name_components.push_back ({previous_len, idx}); - } - - /* Sort name_components elements by name. */ - auto name_comp_compare = [&] (const name_component &left, - const name_component &right) - { - const char *left_qualified = this->symbol_name_at (left.idx); - const char *right_qualified = this->symbol_name_at (right.idx); - - const char *left_name = left_qualified + left.name_offset; - const char *right_name = right_qualified + right.name_offset; - - return name_cmp (left_name, right_name) < 0; - }; - - std::sort (this->name_components.begin (), - this->name_components.end (), - name_comp_compare); -} - -/* Helper for dw2_expand_symtabs_matching that works with a - mapped_index_base instead of the containing objfile. This is split - to a separate function in order to be able to unit test the - name_components matching using a mock mapped_index_base. For each - symbol name that matches, calls MATCH_CALLBACK, passing it the - symbol's index in the mapped_index_base symbol table. */ - -static void -dw2_expand_symtabs_matching_symbol - (mapped_index_base &index, - const lookup_name_info &lookup_name_in, - gdb::function_view<expand_symtabs_symbol_matcher_ftype> symbol_matcher, - enum search_domain kind, - gdb::function_view<bool (offset_type)> match_callback) -{ - lookup_name_info lookup_name_without_params - = lookup_name_in.make_ignore_params (); - - /* Build the symbol name component sorted vector, if we haven't - yet. */ - index.build_name_components (); - - /* The same symbol may appear more than once in the range though. - E.g., if we're looking for symbols that complete "w", and we have - a symbol named "w1::w2", we'll find the two name components for - that same symbol in the range. To be sure we only call the - callback once per symbol, we first collect the symbol name - indexes that matched in a temporary vector and ignore - duplicates. */ - std::vector<offset_type> matches; - - struct name_and_matcher - { - symbol_name_matcher_ftype *matcher; - const std::string &name; - - bool operator== (const name_and_matcher &other) const - { - return matcher == other.matcher && name == other.name; - } - }; - - /* A vector holding all the different symbol name matchers, for all - languages. */ - std::vector<name_and_matcher> matchers; - - for (int i = 0; i < nr_languages; i++) - { - enum language lang_e = (enum language) i; - - const language_defn *lang = language_def (lang_e); - symbol_name_matcher_ftype *name_matcher - = get_symbol_name_matcher (lang, lookup_name_without_params); - - name_and_matcher key { - name_matcher, - lookup_name_without_params.language_lookup_name (lang_e) - }; - - /* Don't insert the same comparison routine more than once. - Note that we do this linear walk. This is not a problem in - practice because the number of supported languages is - low. */ - if (std::find (matchers.begin (), matchers.end (), key) - != matchers.end ()) - continue; - matchers.push_back (std::move (key)); - - auto bounds - = index.find_name_components_bounds (lookup_name_without_params, - lang_e); - - /* Now for each symbol name in range, check to see if we have a name - match, and if so, call the MATCH_CALLBACK callback. */ - - for (; bounds.first != bounds.second; ++bounds.first) - { - const char *qualified = index.symbol_name_at (bounds.first->idx); - - if (!name_matcher (qualified, lookup_name_without_params, NULL) - || (symbol_matcher != NULL && !symbol_matcher (qualified))) - continue; - - matches.push_back (bounds.first->idx); - } - } - - std::sort (matches.begin (), matches.end ()); - - /* Finally call the callback, once per match. */ - ULONGEST prev = -1; - for (offset_type idx : matches) - { - if (prev != idx) - { - if (!match_callback (idx)) - break; - prev = idx; - } - } - - /* Above we use a type wider than idx's for 'prev', since 0 and - (offset_type)-1 are both possible values. */ - static_assert (sizeof (prev) > sizeof (offset_type), ""); -} - -#if GDB_SELF_TEST - -namespace selftests { namespace dw2_expand_symtabs_matching { - -/* A mock .gdb_index/.debug_names-like name index table, enough to - exercise dw2_expand_symtabs_matching_symbol, which works with the - mapped_index_base interface. Builds an index from the symbol list - passed as parameter to the constructor. */ -class mock_mapped_index : public mapped_index_base -{ -public: - mock_mapped_index (gdb::array_view<const char *> symbols) - : m_symbol_table (symbols) - {} - - DISABLE_COPY_AND_ASSIGN (mock_mapped_index); - - /* Return the number of names in the symbol table. */ - size_t symbol_name_count () const override - { - return m_symbol_table.size (); - } - - /* Get the name of the symbol at IDX in the symbol table. */ - const char *symbol_name_at (offset_type idx) const override - { - return m_symbol_table[idx]; - } - -private: - gdb::array_view<const char *> m_symbol_table; -}; - -/* Convenience function that converts a NULL pointer to a "<null>" - string, to pass to print routines. */ - -static const char * -string_or_null (const char *str) -{ - return str != NULL ? str : "<null>"; -} - -/* Check if a lookup_name_info built from - NAME/MATCH_TYPE/COMPLETION_MODE matches the symbols in the mock - index. EXPECTED_LIST is the list of expected matches, in expected - matching order. If no match expected, then an empty list is - specified. Returns true on success. On failure prints a warning - indicating the file:line that failed, and returns false. */ - -static bool -check_match (const char *file, int line, - mock_mapped_index &mock_index, - const char *name, symbol_name_match_type match_type, - bool completion_mode, - std::initializer_list<const char *> expected_list) -{ - lookup_name_info lookup_name (name, match_type, completion_mode); - - bool matched = true; - - auto mismatch = [&] (const char *expected_str, - const char *got) - { - warning (_("%s:%d: match_type=%s, looking-for=\"%s\", " - "expected=\"%s\", got=\"%s\"\n"), - file, line, - (match_type == symbol_name_match_type::FULL - ? "FULL" : "WILD"), - name, string_or_null (expected_str), string_or_null (got)); - matched = false; - }; - - auto expected_it = expected_list.begin (); - auto expected_end = expected_list.end (); - - dw2_expand_symtabs_matching_symbol (mock_index, lookup_name, - NULL, ALL_DOMAIN, - [&] (offset_type idx) - { - const char *matched_name = mock_index.symbol_name_at (idx); - const char *expected_str - = expected_it == expected_end ? NULL : *expected_it++; - - if (expected_str == NULL || strcmp (expected_str, matched_name) != 0) - mismatch (expected_str, matched_name); - return true; - }); - - const char *expected_str - = expected_it == expected_end ? NULL : *expected_it++; - if (expected_str != NULL) - mismatch (expected_str, NULL); - - return matched; -} - -/* The symbols added to the mock mapped_index for testing (in - canonical form). */ -static const char *test_symbols[] = { - "function", - "std::bar", - "std::zfunction", - "std::zfunction2", - "w1::w2", - "ns::foo<char*>", - "ns::foo<int>", - "ns::foo<long>", - "ns2::tmpl<int>::foo2", - "(anonymous namespace)::A::B::C", - - /* These are used to check that the increment-last-char in the - matching algorithm for completion doesn't match "t1_fund" when - completing "t1_func". */ - "t1_func", - "t1_func1", - "t1_fund", - "t1_fund1", - - /* A UTF-8 name with multi-byte sequences to make sure that - cp-name-parser understands this as a single identifier ("função" - is "function" in PT). */ - u8"u8função", - - /* \377 (0xff) is Latin1 'ÿ'. */ - "yfunc\377", - - /* \377 (0xff) is Latin1 'ÿ'. */ - "\377", - "\377\377123", - - /* A name with all sorts of complications. Starts with "z" to make - it easier for the completion tests below. */ -#define Z_SYM_NAME \ - "z::std::tuple<(anonymous namespace)::ui*, std::bar<(anonymous namespace)::ui> >" \ - "::tuple<(anonymous namespace)::ui*, " \ - "std::default_delete<(anonymous namespace)::ui>, void>" - - Z_SYM_NAME -}; - -/* Returns true if the mapped_index_base::find_name_component_bounds - method finds EXPECTED_SYMS in INDEX when looking for SEARCH_NAME, - in completion mode. */ - -static bool -check_find_bounds_finds (mapped_index_base &index, - const char *search_name, - gdb::array_view<const char *> expected_syms) -{ - lookup_name_info lookup_name (search_name, - symbol_name_match_type::FULL, true); - - auto bounds = index.find_name_components_bounds (lookup_name, - language_cplus); - - size_t distance = std::distance (bounds.first, bounds.second); - if (distance != expected_syms.size ()) - return false; - - for (size_t exp_elem = 0; exp_elem < distance; exp_elem++) - { - auto nc_elem = bounds.first + exp_elem; - const char *qualified = index.symbol_name_at (nc_elem->idx); - if (strcmp (qualified, expected_syms[exp_elem]) != 0) - return false; - } - - return true; -} - -/* Test the lower-level mapped_index::find_name_component_bounds - method. */ - -static void -test_mapped_index_find_name_component_bounds () -{ - mock_mapped_index mock_index (test_symbols); - - mock_index.build_name_components (); - - /* Test the lower-level mapped_index::find_name_component_bounds - method in completion mode. */ - { - static const char *expected_syms[] = { - "t1_func", - "t1_func1", - }; - - SELF_CHECK (check_find_bounds_finds (mock_index, - "t1_func", expected_syms)); - } - - /* Check that the increment-last-char in the name matching algorithm - for completion doesn't get confused with Ansi1 'ÿ' / 0xff. */ - { - static const char *expected_syms1[] = { - "\377", - "\377\377123", - }; - SELF_CHECK (check_find_bounds_finds (mock_index, - "\377", expected_syms1)); - - static const char *expected_syms2[] = { - "\377\377123", - }; - SELF_CHECK (check_find_bounds_finds (mock_index, - "\377\377", expected_syms2)); - } -} - -/* Test dw2_expand_symtabs_matching_symbol. */ - -static void -test_dw2_expand_symtabs_matching_symbol () -{ - mock_mapped_index mock_index (test_symbols); - - /* We let all tests run until the end even if some fails, for debug - convenience. */ - bool any_mismatch = false; - - /* Create the expected symbols list (an initializer_list). Needed - because lists have commas, and we need to pass them to CHECK, - which is a macro. */ -#define EXPECT(...) { __VA_ARGS__ } - - /* Wrapper for check_match that passes down the current - __FILE__/__LINE__. */ -#define CHECK_MATCH(NAME, MATCH_TYPE, COMPLETION_MODE, EXPECTED_LIST) \ - any_mismatch |= !check_match (__FILE__, __LINE__, \ - mock_index, \ - NAME, MATCH_TYPE, COMPLETION_MODE, \ - EXPECTED_LIST) - - /* Identity checks. */ - for (const char *sym : test_symbols) - { - /* Should be able to match all existing symbols. */ - CHECK_MATCH (sym, symbol_name_match_type::FULL, false, - EXPECT (sym)); - - /* Should be able to match all existing symbols with - parameters. */ - std::string with_params = std::string (sym) + "(int)"; - CHECK_MATCH (with_params.c_str (), symbol_name_match_type::FULL, false, - EXPECT (sym)); - - /* Should be able to match all existing symbols with - parameters and qualifiers. */ - with_params = std::string (sym) + " ( int ) const"; - CHECK_MATCH (with_params.c_str (), symbol_name_match_type::FULL, false, - EXPECT (sym)); - - /* This should really find sym, but cp-name-parser.y doesn't - know about lvalue/rvalue qualifiers yet. */ - with_params = std::string (sym) + " ( int ) &&"; - CHECK_MATCH (with_params.c_str (), symbol_name_match_type::FULL, false, - {}); - } - - /* Check that the name matching algorithm for completion doesn't get - confused with Latin1 'ÿ' / 0xff. */ - { - static const char str[] = "\377"; - CHECK_MATCH (str, symbol_name_match_type::FULL, true, - EXPECT ("\377", "\377\377123")); - } - - /* Check that the increment-last-char in the matching algorithm for - completion doesn't match "t1_fund" when completing "t1_func". */ - { - static const char str[] = "t1_func"; - CHECK_MATCH (str, symbol_name_match_type::FULL, true, - EXPECT ("t1_func", "t1_func1")); - } - - /* Check that completion mode works at each prefix of the expected - symbol name. */ - { - static const char str[] = "function(int)"; - size_t len = strlen (str); - std::string lookup; - - for (size_t i = 1; i < len; i++) - { - lookup.assign (str, i); - CHECK_MATCH (lookup.c_str (), symbol_name_match_type::FULL, true, - EXPECT ("function")); - } - } - - /* While "w" is a prefix of both components, the match function - should still only be called once. */ - { - CHECK_MATCH ("w", symbol_name_match_type::FULL, true, - EXPECT ("w1::w2")); - CHECK_MATCH ("w", symbol_name_match_type::WILD, true, - EXPECT ("w1::w2")); - } - - /* Same, with a "complicated" symbol. */ - { - static const char str[] = Z_SYM_NAME; - size_t len = strlen (str); - std::string lookup; - - for (size_t i = 1; i < len; i++) - { - lookup.assign (str, i); - CHECK_MATCH (lookup.c_str (), symbol_name_match_type::FULL, true, - EXPECT (Z_SYM_NAME)); - } - } - - /* In FULL mode, an incomplete symbol doesn't match. */ - { - CHECK_MATCH ("std::zfunction(int", symbol_name_match_type::FULL, false, - {}); - } - - /* A complete symbol with parameters matches any overload, since the - index has no overload info. */ - { - CHECK_MATCH ("std::zfunction(int)", symbol_name_match_type::FULL, true, - EXPECT ("std::zfunction", "std::zfunction2")); - CHECK_MATCH ("zfunction(int)", symbol_name_match_type::WILD, true, - EXPECT ("std::zfunction", "std::zfunction2")); - CHECK_MATCH ("zfunc", symbol_name_match_type::WILD, true, - EXPECT ("std::zfunction", "std::zfunction2")); - } - - /* Check that whitespace is ignored appropriately. A symbol with a - template argument list. */ - { - static const char expected[] = "ns::foo<int>"; - CHECK_MATCH ("ns :: foo < int > ", symbol_name_match_type::FULL, false, - EXPECT (expected)); - CHECK_MATCH ("foo < int > ", symbol_name_match_type::WILD, false, - EXPECT (expected)); - } - - /* Check that whitespace is ignored appropriately. A symbol with a - template argument list that includes a pointer. */ - { - static const char expected[] = "ns::foo<char*>"; - /* Try both completion and non-completion modes. */ - static const bool completion_mode[2] = {false, true}; - for (size_t i = 0; i < 2; i++) - { - CHECK_MATCH ("ns :: foo < char * >", symbol_name_match_type::FULL, - completion_mode[i], EXPECT (expected)); - CHECK_MATCH ("foo < char * >", symbol_name_match_type::WILD, - completion_mode[i], EXPECT (expected)); - - CHECK_MATCH ("ns :: foo < char * > (int)", symbol_name_match_type::FULL, - completion_mode[i], EXPECT (expected)); - CHECK_MATCH ("foo < char * > (int)", symbol_name_match_type::WILD, - completion_mode[i], EXPECT (expected)); - } - } - - { - /* Check method qualifiers are ignored. */ - static const char expected[] = "ns::foo<char*>"; - CHECK_MATCH ("ns :: foo < char * > ( int ) const", - symbol_name_match_type::FULL, true, EXPECT (expected)); - CHECK_MATCH ("ns :: foo < char * > ( int ) &&", - symbol_name_match_type::FULL, true, EXPECT (expected)); - CHECK_MATCH ("foo < char * > ( int ) const", - symbol_name_match_type::WILD, true, EXPECT (expected)); - CHECK_MATCH ("foo < char * > ( int ) &&", - symbol_name_match_type::WILD, true, EXPECT (expected)); - } - - /* Test lookup names that don't match anything. */ - { - CHECK_MATCH ("bar2", symbol_name_match_type::WILD, false, - {}); - - CHECK_MATCH ("doesntexist", symbol_name_match_type::FULL, false, - {}); - } - - /* Some wild matching tests, exercising "(anonymous namespace)", - which should not be confused with a parameter list. */ - { - static const char *syms[] = { - "A::B::C", - "B::C", - "C", - "A :: B :: C ( int )", - "B :: C ( int )", - "C ( int )", - }; - - for (const char *s : syms) - { - CHECK_MATCH (s, symbol_name_match_type::WILD, false, - EXPECT ("(anonymous namespace)::A::B::C")); - } - } - - { - static const char expected[] = "ns2::tmpl<int>::foo2"; - CHECK_MATCH ("tmp", symbol_name_match_type::WILD, true, - EXPECT (expected)); - CHECK_MATCH ("tmpl<", symbol_name_match_type::WILD, true, - EXPECT (expected)); - } - - SELF_CHECK (!any_mismatch); - -#undef EXPECT -#undef CHECK_MATCH -} - -static void -run_test () -{ - test_mapped_index_find_name_component_bounds (); - test_dw2_expand_symtabs_matching_symbol (); -} - -}} // namespace selftests::dw2_expand_symtabs_matching - -#endif /* GDB_SELF_TEST */ - -/* If FILE_MATCHER is NULL or if PER_CU has - dwarf2_per_cu_quick_data::MARK set (see - dw_expand_symtabs_matching_file_matcher), expand the CU and call - EXPANSION_NOTIFY on it. */ - -static void -dw2_expand_symtabs_matching_one - (struct dwarf2_per_cu_data *per_cu, - gdb::function_view<expand_symtabs_file_matcher_ftype> file_matcher, - gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify) -{ - if (file_matcher == NULL || per_cu->v.quick->mark) - { - bool symtab_was_null - = (per_cu->v.quick->compunit_symtab == NULL); - - dw2_instantiate_symtab (per_cu, false); - - if (expansion_notify != NULL - && symtab_was_null - && per_cu->v.quick->compunit_symtab != NULL) - expansion_notify (per_cu->v.quick->compunit_symtab); - } -} - -/* Helper for dw2_expand_matching symtabs. Called on each symbol - matched, to expand corresponding CUs that were marked. IDX is the - index of the symbol name that matched. */ - -static void -dw2_expand_marked_cus - (struct dwarf2_per_objfile *dwarf2_per_objfile, offset_type idx, - gdb::function_view<expand_symtabs_file_matcher_ftype> file_matcher, - gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify, - search_domain kind) -{ - offset_type *vec, vec_len, vec_idx; - bool global_seen = false; - mapped_index &index = *dwarf2_per_objfile->index_table; - - vec = (offset_type *) (index.constant_pool - + MAYBE_SWAP (index.symbol_table[idx].vec)); - vec_len = MAYBE_SWAP (vec[0]); - for (vec_idx = 0; vec_idx < vec_len; ++vec_idx) - { - offset_type cu_index_and_attrs = MAYBE_SWAP (vec[vec_idx + 1]); - /* This value is only valid for index versions >= 7. */ - int is_static = GDB_INDEX_SYMBOL_STATIC_VALUE (cu_index_and_attrs); - gdb_index_symbol_kind symbol_kind = - GDB_INDEX_SYMBOL_KIND_VALUE (cu_index_and_attrs); - int cu_index = GDB_INDEX_CU_VALUE (cu_index_and_attrs); - /* Only check the symbol attributes if they're present. - Indices prior to version 7 don't record them, - and indices >= 7 may elide them for certain symbols - (gold does this). */ - int attrs_valid = - (index.version >= 7 - && symbol_kind != GDB_INDEX_SYMBOL_KIND_NONE); - - /* Work around gold/15646. */ - if (attrs_valid) - { - if (!is_static && global_seen) - continue; - if (!is_static) - global_seen = true; - } - - /* Only check the symbol's kind if it has one. */ - if (attrs_valid) - { - switch (kind) - { - case VARIABLES_DOMAIN: - if (symbol_kind != GDB_INDEX_SYMBOL_KIND_VARIABLE) - continue; - break; - case FUNCTIONS_DOMAIN: - if (symbol_kind != GDB_INDEX_SYMBOL_KIND_FUNCTION) - continue; - break; - case TYPES_DOMAIN: - if (symbol_kind != GDB_INDEX_SYMBOL_KIND_TYPE) - continue; - break; - case MODULES_DOMAIN: - if (symbol_kind != GDB_INDEX_SYMBOL_KIND_OTHER) - continue; - break; - default: - break; - } - } - - /* Don't crash on bad data. */ - if (cu_index >= (dwarf2_per_objfile->all_comp_units.size () - + dwarf2_per_objfile->all_type_units.size ())) - { - complaint (_(".gdb_index entry has bad CU index" - " [in module %s]"), - objfile_name (dwarf2_per_objfile->objfile)); - continue; - } - - dwarf2_per_cu_data *per_cu = dwarf2_per_objfile->get_cutu (cu_index); - dw2_expand_symtabs_matching_one (per_cu, file_matcher, - expansion_notify); - } -} - -/* If FILE_MATCHER is non-NULL, set all the - dwarf2_per_cu_quick_data::MARK of the current DWARF2_PER_OBJFILE - that match FILE_MATCHER. */ - -static void -dw_expand_symtabs_matching_file_matcher - (struct dwarf2_per_objfile *dwarf2_per_objfile, - gdb::function_view<expand_symtabs_file_matcher_ftype> file_matcher) -{ - if (file_matcher == NULL) - return; - - objfile *const objfile = dwarf2_per_objfile->objfile; - - htab_up visited_found (htab_create_alloc (10, htab_hash_pointer, - htab_eq_pointer, - NULL, xcalloc, xfree)); - htab_up visited_not_found (htab_create_alloc (10, htab_hash_pointer, - htab_eq_pointer, - NULL, xcalloc, xfree)); - - /* The rule is CUs specify all the files, including those used by - any TU, so there's no need to scan TUs here. */ - - for (dwarf2_per_cu_data *per_cu : dwarf2_per_objfile->all_comp_units) - { - QUIT; - - per_cu->v.quick->mark = 0; - - /* We only need to look at symtabs not already expanded. */ - if (per_cu->v.quick->compunit_symtab) - continue; - - quick_file_names *file_data = dw2_get_file_names (per_cu); - if (file_data == NULL) - continue; - - if (htab_find (visited_not_found.get (), file_data) != NULL) - continue; - else if (htab_find (visited_found.get (), file_data) != NULL) - { - per_cu->v.quick->mark = 1; - continue; - } - - for (int j = 0; j < file_data->num_file_names; ++j) - { - const char *this_real_name; - - if (file_matcher (file_data->file_names[j], false)) - { - per_cu->v.quick->mark = 1; - break; - } - - /* Before we invoke realpath, which can get expensive when many - files are involved, do a quick comparison of the basenames. */ - if (!basenames_may_differ - && !file_matcher (lbasename (file_data->file_names[j]), - true)) - continue; - - this_real_name = dw2_get_real_path (objfile, file_data, j); - if (file_matcher (this_real_name, false)) - { - per_cu->v.quick->mark = 1; - break; - } - } - - void **slot = htab_find_slot (per_cu->v.quick->mark - ? visited_found.get () - : visited_not_found.get (), - file_data, INSERT); - *slot = file_data; - } -} - -static void -dw2_expand_symtabs_matching - (struct objfile *objfile, - gdb::function_view<expand_symtabs_file_matcher_ftype> file_matcher, - const lookup_name_info &lookup_name, - gdb::function_view<expand_symtabs_symbol_matcher_ftype> symbol_matcher, - gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify, - enum search_domain kind) -{ - struct dwarf2_per_objfile *dwarf2_per_objfile - = get_dwarf2_per_objfile (objfile); - - /* index_table is NULL if OBJF_READNOW. */ - if (!dwarf2_per_objfile->index_table) - return; - - dw_expand_symtabs_matching_file_matcher (dwarf2_per_objfile, file_matcher); - - mapped_index &index = *dwarf2_per_objfile->index_table; - - dw2_expand_symtabs_matching_symbol (index, lookup_name, - symbol_matcher, - kind, [&] (offset_type idx) - { - dw2_expand_marked_cus (dwarf2_per_objfile, idx, file_matcher, - expansion_notify, kind); - return true; - }); -} - -/* A helper for dw2_find_pc_sect_compunit_symtab which finds the most specific - symtab. */ - -static struct compunit_symtab * -recursively_find_pc_sect_compunit_symtab (struct compunit_symtab *cust, - CORE_ADDR pc) -{ - int i; - - if (COMPUNIT_BLOCKVECTOR (cust) != NULL - && blockvector_contains_pc (COMPUNIT_BLOCKVECTOR (cust), pc)) - return cust; - - if (cust->includes == NULL) - return NULL; - - for (i = 0; cust->includes[i]; ++i) - { - struct compunit_symtab *s = cust->includes[i]; - - s = recursively_find_pc_sect_compunit_symtab (s, pc); - if (s != NULL) - return s; - } - - return NULL; -} - -static struct compunit_symtab * -dw2_find_pc_sect_compunit_symtab (struct objfile *objfile, - struct bound_minimal_symbol msymbol, - CORE_ADDR pc, - struct obj_section *section, - int warn_if_readin) -{ - struct dwarf2_per_cu_data *data; - struct compunit_symtab *result; - - if (!objfile->partial_symtabs->psymtabs_addrmap) - return NULL; - - CORE_ADDR baseaddr = ANOFFSET (objfile->section_offsets, - SECT_OFF_TEXT (objfile)); - data = (struct dwarf2_per_cu_data *) addrmap_find - (objfile->partial_symtabs->psymtabs_addrmap, pc - baseaddr); - if (!data) - return NULL; - - if (warn_if_readin && data->v.quick->compunit_symtab) - warning (_("(Internal error: pc %s in read in CU, but not in symtab.)"), - paddress (get_objfile_arch (objfile), pc)); - - result - = recursively_find_pc_sect_compunit_symtab (dw2_instantiate_symtab (data, - false), - pc); - gdb_assert (result != NULL); - return result; -} - -static void -dw2_map_symbol_filenames (struct objfile *objfile, symbol_filename_ftype *fun, - void *data, int need_fullname) -{ - struct dwarf2_per_objfile *dwarf2_per_objfile - = get_dwarf2_per_objfile (objfile); - - if (!dwarf2_per_objfile->filenames_cache) - { - dwarf2_per_objfile->filenames_cache.emplace (); - - htab_up visited (htab_create_alloc (10, - htab_hash_pointer, htab_eq_pointer, - NULL, xcalloc, xfree)); - - /* The rule is CUs specify all the files, including those used - by any TU, so there's no need to scan TUs here. We can - ignore file names coming from already-expanded CUs. */ - - for (dwarf2_per_cu_data *per_cu : dwarf2_per_objfile->all_comp_units) - { - if (per_cu->v.quick->compunit_symtab) - { - void **slot = htab_find_slot (visited.get (), - per_cu->v.quick->file_names, - INSERT); - - *slot = per_cu->v.quick->file_names; - } - } - - for (dwarf2_per_cu_data *per_cu : dwarf2_per_objfile->all_comp_units) - { - /* We only need to look at symtabs not already expanded. */ - if (per_cu->v.quick->compunit_symtab) - continue; - - quick_file_names *file_data = dw2_get_file_names (per_cu); - if (file_data == NULL) - continue; - - void **slot = htab_find_slot (visited.get (), file_data, INSERT); - if (*slot) - { - /* Already visited. */ - continue; - } - *slot = file_data; - - for (int j = 0; j < file_data->num_file_names; ++j) - { - const char *filename = file_data->file_names[j]; - dwarf2_per_objfile->filenames_cache->seen (filename); - } - } - } - - dwarf2_per_objfile->filenames_cache->traverse ([&] (const char *filename) - { - gdb::unique_xmalloc_ptr<char> this_real_name; - - if (need_fullname) - this_real_name = gdb_realpath (filename); - (*fun) (filename, this_real_name.get (), data); - }); -} - -static int -dw2_has_symbols (struct objfile *objfile) -{ - return 1; -} - -const struct quick_symbol_functions dwarf2_gdb_index_functions = -{ - dw2_has_symbols, - dw2_find_last_source_symtab, - dw2_forget_cached_source_info, - dw2_map_symtabs_matching_filename, - dw2_lookup_symbol, - dw2_print_stats, - dw2_dump, - dw2_expand_symtabs_for_function, - dw2_expand_all_symtabs, - dw2_expand_symtabs_with_fullname, - dw2_map_matching_symbols, - dw2_expand_symtabs_matching, - dw2_find_pc_sect_compunit_symtab, - NULL, - dw2_map_symbol_filenames -}; - -/* DWARF-5 debug_names reader. */ - -/* DWARF-5 augmentation string for GDB's DW_IDX_GNU_* extension. */ -static const gdb_byte dwarf5_augmentation[] = { 'G', 'D', 'B', 0 }; - -/* A helper function that reads the .debug_names section in SECTION - and fills in MAP. FILENAME is the name of the file containing the - section; it is used for error reporting. - - Returns true if all went well, false otherwise. */ - -static bool -read_debug_names_from_section (struct objfile *objfile, - const char *filename, - struct dwarf2_section_info *section, - mapped_debug_names &map) -{ - if (dwarf2_section_empty_p (section)) - return false; - - /* Older elfutils strip versions could keep the section in the main - executable while splitting it for the separate debug info file. */ - if ((get_section_flags (section) & SEC_HAS_CONTENTS) == 0) - return false; - - dwarf2_read_section (objfile, section); - - map.dwarf5_byte_order = gdbarch_byte_order (get_objfile_arch (objfile)); - - const gdb_byte *addr = section->buffer; - - bfd *const abfd = get_section_bfd_owner (section); - - unsigned int bytes_read; - LONGEST length = read_initial_length (abfd, addr, &bytes_read); - addr += bytes_read; - - map.dwarf5_is_dwarf64 = bytes_read != 4; - map.offset_size = map.dwarf5_is_dwarf64 ? 8 : 4; - if (bytes_read + length != section->size) - { - /* There may be multiple per-CU indices. */ - warning (_("Section .debug_names in %s length %s does not match " - "section length %s, ignoring .debug_names."), - filename, plongest (bytes_read + length), - pulongest (section->size)); - return false; - } - - /* The version number. */ - uint16_t version = read_2_bytes (abfd, addr); - addr += 2; - if (version != 5) - { - warning (_("Section .debug_names in %s has unsupported version %d, " - "ignoring .debug_names."), - filename, version); - return false; - } - - /* Padding. */ - uint16_t padding = read_2_bytes (abfd, addr); - addr += 2; - if (padding != 0) - { - warning (_("Section .debug_names in %s has unsupported padding %d, " - "ignoring .debug_names."), - filename, padding); - return false; - } - - /* comp_unit_count - The number of CUs in the CU list. */ - map.cu_count = read_4_bytes (abfd, addr); - addr += 4; - - /* local_type_unit_count - The number of TUs in the local TU - list. */ - map.tu_count = read_4_bytes (abfd, addr); - addr += 4; - - /* foreign_type_unit_count - The number of TUs in the foreign TU - list. */ - uint32_t foreign_tu_count = read_4_bytes (abfd, addr); - addr += 4; - if (foreign_tu_count != 0) - { - warning (_("Section .debug_names in %s has unsupported %lu foreign TUs, " - "ignoring .debug_names."), - filename, static_cast<unsigned long> (foreign_tu_count)); - return false; - } - - /* bucket_count - The number of hash buckets in the hash lookup - table. */ - map.bucket_count = read_4_bytes (abfd, addr); - addr += 4; - - /* name_count - The number of unique names in the index. */ - map.name_count = read_4_bytes (abfd, addr); - addr += 4; - - /* abbrev_table_size - The size in bytes of the abbreviations - table. */ - uint32_t abbrev_table_size = read_4_bytes (abfd, addr); - addr += 4; - - /* augmentation_string_size - The size in bytes of the augmentation - string. This value is rounded up to a multiple of 4. */ - uint32_t augmentation_string_size = read_4_bytes (abfd, addr); - addr += 4; - map.augmentation_is_gdb = ((augmentation_string_size - == sizeof (dwarf5_augmentation)) - && memcmp (addr, dwarf5_augmentation, - sizeof (dwarf5_augmentation)) == 0); - augmentation_string_size += (-augmentation_string_size) & 3; - addr += augmentation_string_size; - - /* List of CUs */ - map.cu_table_reordered = addr; - addr += map.cu_count * map.offset_size; - - /* List of Local TUs */ - map.tu_table_reordered = addr; - addr += map.tu_count * map.offset_size; - - /* Hash Lookup Table */ - map.bucket_table_reordered = reinterpret_cast<const uint32_t *> (addr); - addr += map.bucket_count * 4; - map.hash_table_reordered = reinterpret_cast<const uint32_t *> (addr); - addr += map.name_count * 4; - - /* Name Table */ - map.name_table_string_offs_reordered = addr; - addr += map.name_count * map.offset_size; - map.name_table_entry_offs_reordered = addr; - addr += map.name_count * map.offset_size; - - const gdb_byte *abbrev_table_start = addr; - for (;;) - { - const ULONGEST index_num = read_unsigned_leb128 (abfd, addr, &bytes_read); - addr += bytes_read; - if (index_num == 0) - break; - - const auto insertpair - = map.abbrev_map.emplace (index_num, mapped_debug_names::index_val ()); - if (!insertpair.second) - { - warning (_("Section .debug_names in %s has duplicate index %s, " - "ignoring .debug_names."), - filename, pulongest (index_num)); - return false; - } - mapped_debug_names::index_val &indexval = insertpair.first->second; - indexval.dwarf_tag = read_unsigned_leb128 (abfd, addr, &bytes_read); - addr += bytes_read; - - for (;;) - { - mapped_debug_names::index_val::attr attr; - attr.dw_idx = read_unsigned_leb128 (abfd, addr, &bytes_read); - addr += bytes_read; - attr.form = read_unsigned_leb128 (abfd, addr, &bytes_read); - addr += bytes_read; - if (attr.form == DW_FORM_implicit_const) - { - attr.implicit_const = read_signed_leb128 (abfd, addr, - &bytes_read); - addr += bytes_read; - } - if (attr.dw_idx == 0 && attr.form == 0) - break; - indexval.attr_vec.push_back (std::move (attr)); - } - } - if (addr != abbrev_table_start + abbrev_table_size) - { - warning (_("Section .debug_names in %s has abbreviation_table " - "of size %s vs. written as %u, ignoring .debug_names."), - filename, plongest (addr - abbrev_table_start), - abbrev_table_size); - return false; - } - map.entry_pool = addr; - - return true; -} - -/* A helper for create_cus_from_debug_names that handles the MAP's CU - list. */ - -static void -create_cus_from_debug_names_list (struct dwarf2_per_objfile *dwarf2_per_objfile, - const mapped_debug_names &map, - dwarf2_section_info §ion, - bool is_dwz) -{ - sect_offset sect_off_prev; - for (uint32_t i = 0; i <= map.cu_count; ++i) - { - sect_offset sect_off_next; - if (i < map.cu_count) - { - sect_off_next - = (sect_offset) (extract_unsigned_integer - (map.cu_table_reordered + i * map.offset_size, - map.offset_size, - map.dwarf5_byte_order)); - } - else - sect_off_next = (sect_offset) section.size; - if (i >= 1) - { - const ULONGEST length = sect_off_next - sect_off_prev; - dwarf2_per_cu_data *per_cu - = create_cu_from_index_list (dwarf2_per_objfile, §ion, is_dwz, - sect_off_prev, length); - dwarf2_per_objfile->all_comp_units.push_back (per_cu); - } - sect_off_prev = sect_off_next; - } -} - -/* Read the CU list from the mapped index, and use it to create all - the CU objects for this dwarf2_per_objfile. */ - -static void -create_cus_from_debug_names (struct dwarf2_per_objfile *dwarf2_per_objfile, - const mapped_debug_names &map, - const mapped_debug_names &dwz_map) -{ - gdb_assert (dwarf2_per_objfile->all_comp_units.empty ()); - dwarf2_per_objfile->all_comp_units.reserve (map.cu_count + dwz_map.cu_count); - - create_cus_from_debug_names_list (dwarf2_per_objfile, map, - dwarf2_per_objfile->info, - false /* is_dwz */); - - if (dwz_map.cu_count == 0) - return; - - dwz_file *dwz = dwarf2_get_dwz_file (dwarf2_per_objfile); - create_cus_from_debug_names_list (dwarf2_per_objfile, dwz_map, dwz->info, - true /* is_dwz */); -} - -/* Read .debug_names. If everything went ok, initialize the "quick" - elements of all the CUs and return true. Otherwise, return false. */ - -static bool -dwarf2_read_debug_names (struct dwarf2_per_objfile *dwarf2_per_objfile) -{ - std::unique_ptr<mapped_debug_names> map - (new mapped_debug_names (dwarf2_per_objfile)); - mapped_debug_names dwz_map (dwarf2_per_objfile); - struct objfile *objfile = dwarf2_per_objfile->objfile; - - if (!read_debug_names_from_section (objfile, objfile_name (objfile), - &dwarf2_per_objfile->debug_names, - *map)) - return false; - - /* Don't use the index if it's empty. */ - if (map->name_count == 0) - return false; - - /* If there is a .dwz file, read it so we can get its CU list as - well. */ - dwz_file *dwz = dwarf2_get_dwz_file (dwarf2_per_objfile); - if (dwz != NULL) - { - if (!read_debug_names_from_section (objfile, - bfd_get_filename (dwz->dwz_bfd.get ()), - &dwz->debug_names, dwz_map)) - { - warning (_("could not read '.debug_names' section from %s; skipping"), - bfd_get_filename (dwz->dwz_bfd.get ())); - return false; - } - } - - create_cus_from_debug_names (dwarf2_per_objfile, *map, dwz_map); - - if (map->tu_count != 0) - { - /* We can only handle a single .debug_types when we have an - index. */ - if (dwarf2_per_objfile->types.size () != 1) - return false; - - dwarf2_section_info *section = &dwarf2_per_objfile->types[0]; - - create_signatured_type_table_from_debug_names - (dwarf2_per_objfile, *map, section, &dwarf2_per_objfile->abbrev); - } - - create_addrmap_from_aranges (dwarf2_per_objfile, - &dwarf2_per_objfile->debug_aranges); - - dwarf2_per_objfile->debug_names_table = std::move (map); - dwarf2_per_objfile->using_index = 1; - dwarf2_per_objfile->quick_file_names_table = - create_quick_file_names_table (dwarf2_per_objfile->all_comp_units.size ()); - - return true; -} - -/* Type used to manage iterating over all CUs looking for a symbol for - .debug_names. */ - -class dw2_debug_names_iterator -{ -public: - dw2_debug_names_iterator (const mapped_debug_names &map, - gdb::optional<block_enum> block_index, - domain_enum domain, - const char *name) - : m_map (map), m_block_index (block_index), m_domain (domain), - m_addr (find_vec_in_debug_names (map, name)) - {} - - dw2_debug_names_iterator (const mapped_debug_names &map, - search_domain search, uint32_t namei) - : m_map (map), - m_search (search), - m_addr (find_vec_in_debug_names (map, namei)) - {} - - dw2_debug_names_iterator (const mapped_debug_names &map, - block_enum block_index, domain_enum domain, - uint32_t namei) - : m_map (map), m_block_index (block_index), m_domain (domain), - m_addr (find_vec_in_debug_names (map, namei)) - {} - - /* Return the next matching CU or NULL if there are no more. */ - dwarf2_per_cu_data *next (); - -private: - static const gdb_byte *find_vec_in_debug_names (const mapped_debug_names &map, - const char *name); - static const gdb_byte *find_vec_in_debug_names (const mapped_debug_names &map, - uint32_t namei); - - /* The internalized form of .debug_names. */ - const mapped_debug_names &m_map; - - /* If set, only look for symbols that match that block. Valid values are - GLOBAL_BLOCK and STATIC_BLOCK. */ - const gdb::optional<block_enum> m_block_index; - - /* The kind of symbol we're looking for. */ - const domain_enum m_domain = UNDEF_DOMAIN; - const search_domain m_search = ALL_DOMAIN; - - /* The list of CUs from the index entry of the symbol, or NULL if - not found. */ - const gdb_byte *m_addr; -}; - -const char * -mapped_debug_names::namei_to_name (uint32_t namei) const -{ - const ULONGEST namei_string_offs - = extract_unsigned_integer ((name_table_string_offs_reordered - + namei * offset_size), - offset_size, - dwarf5_byte_order); - return read_indirect_string_at_offset - (dwarf2_per_objfile, dwarf2_per_objfile->objfile->obfd, namei_string_offs); -} - -/* Find a slot in .debug_names for the object named NAME. If NAME is - found, return pointer to its pool data. If NAME cannot be found, - return NULL. */ - -const gdb_byte * -dw2_debug_names_iterator::find_vec_in_debug_names - (const mapped_debug_names &map, const char *name) -{ - int (*cmp) (const char *, const char *); - - gdb::unique_xmalloc_ptr<char> without_params; - if (current_language->la_language == language_cplus - || current_language->la_language == language_fortran - || current_language->la_language == language_d) - { - /* NAME is already canonical. Drop any qualifiers as - .debug_names does not contain any. */ - - if (strchr (name, '(') != NULL) - { - without_params = cp_remove_params (name); - if (without_params != NULL) - name = without_params.get (); - } - } - - cmp = (case_sensitivity == case_sensitive_on ? strcmp : strcasecmp); - - const uint32_t full_hash = dwarf5_djb_hash (name); - uint32_t namei - = extract_unsigned_integer (reinterpret_cast<const gdb_byte *> - (map.bucket_table_reordered - + (full_hash % map.bucket_count)), 4, - map.dwarf5_byte_order); - if (namei == 0) - return NULL; - --namei; - if (namei >= map.name_count) - { - complaint (_("Wrong .debug_names with name index %u but name_count=%u " - "[in module %s]"), - namei, map.name_count, - objfile_name (map.dwarf2_per_objfile->objfile)); - return NULL; - } - - for (;;) - { - const uint32_t namei_full_hash - = extract_unsigned_integer (reinterpret_cast<const gdb_byte *> - (map.hash_table_reordered + namei), 4, - map.dwarf5_byte_order); - if (full_hash % map.bucket_count != namei_full_hash % map.bucket_count) - return NULL; - - if (full_hash == namei_full_hash) - { - const char *const namei_string = map.namei_to_name (namei); - -#if 0 /* An expensive sanity check. */ - if (namei_full_hash != dwarf5_djb_hash (namei_string)) - { - complaint (_("Wrong .debug_names hash for string at index %u " - "[in module %s]"), - namei, objfile_name (dwarf2_per_objfile->objfile)); - return NULL; - } -#endif - - if (cmp (namei_string, name) == 0) - { - const ULONGEST namei_entry_offs - = extract_unsigned_integer ((map.name_table_entry_offs_reordered - + namei * map.offset_size), - map.offset_size, map.dwarf5_byte_order); - return map.entry_pool + namei_entry_offs; - } - } - - ++namei; - if (namei >= map.name_count) - return NULL; - } -} - -const gdb_byte * -dw2_debug_names_iterator::find_vec_in_debug_names - (const mapped_debug_names &map, uint32_t namei) -{ - if (namei >= map.name_count) - { - complaint (_("Wrong .debug_names with name index %u but name_count=%u " - "[in module %s]"), - namei, map.name_count, - objfile_name (map.dwarf2_per_objfile->objfile)); - return NULL; - } - - const ULONGEST namei_entry_offs - = extract_unsigned_integer ((map.name_table_entry_offs_reordered - + namei * map.offset_size), - map.offset_size, map.dwarf5_byte_order); - return map.entry_pool + namei_entry_offs; -} - -/* See dw2_debug_names_iterator. */ - -dwarf2_per_cu_data * -dw2_debug_names_iterator::next () -{ - if (m_addr == NULL) - return NULL; - - struct dwarf2_per_objfile *dwarf2_per_objfile = m_map.dwarf2_per_objfile; - struct objfile *objfile = dwarf2_per_objfile->objfile; - bfd *const abfd = objfile->obfd; - - again: - - unsigned int bytes_read; - const ULONGEST abbrev = read_unsigned_leb128 (abfd, m_addr, &bytes_read); - m_addr += bytes_read; - if (abbrev == 0) - return NULL; - - const auto indexval_it = m_map.abbrev_map.find (abbrev); - if (indexval_it == m_map.abbrev_map.cend ()) - { - complaint (_("Wrong .debug_names undefined abbrev code %s " - "[in module %s]"), - pulongest (abbrev), objfile_name (objfile)); - return NULL; - } - const mapped_debug_names::index_val &indexval = indexval_it->second; - enum class symbol_linkage { - unknown, - static_, - extern_, - } symbol_linkage_ = symbol_linkage::unknown; - dwarf2_per_cu_data *per_cu = NULL; - for (const mapped_debug_names::index_val::attr &attr : indexval.attr_vec) - { - ULONGEST ull; - switch (attr.form) - { - case DW_FORM_implicit_const: - ull = attr.implicit_const; - break; - case DW_FORM_flag_present: - ull = 1; - break; - case DW_FORM_udata: - ull = read_unsigned_leb128 (abfd, m_addr, &bytes_read); - m_addr += bytes_read; - break; - default: - complaint (_("Unsupported .debug_names form %s [in module %s]"), - dwarf_form_name (attr.form), - objfile_name (objfile)); - return NULL; - } - switch (attr.dw_idx) - { - case DW_IDX_compile_unit: - /* Don't crash on bad data. */ - if (ull >= dwarf2_per_objfile->all_comp_units.size ()) - { - complaint (_(".debug_names entry has bad CU index %s" - " [in module %s]"), - pulongest (ull), - objfile_name (dwarf2_per_objfile->objfile)); - continue; - } - per_cu = dwarf2_per_objfile->get_cutu (ull); - break; - case DW_IDX_type_unit: - /* Don't crash on bad data. */ - if (ull >= dwarf2_per_objfile->all_type_units.size ()) - { - complaint (_(".debug_names entry has bad TU index %s" - " [in module %s]"), - pulongest (ull), - objfile_name (dwarf2_per_objfile->objfile)); - continue; - } - per_cu = &dwarf2_per_objfile->get_tu (ull)->per_cu; - break; - case DW_IDX_GNU_internal: - if (!m_map.augmentation_is_gdb) - break; - symbol_linkage_ = symbol_linkage::static_; - break; - case DW_IDX_GNU_external: - if (!m_map.augmentation_is_gdb) - break; - symbol_linkage_ = symbol_linkage::extern_; - break; - } - } - - /* Skip if already read in. */ - if (per_cu->v.quick->compunit_symtab) - goto again; - - /* Check static vs global. */ - if (symbol_linkage_ != symbol_linkage::unknown && m_block_index.has_value ()) - { - const bool want_static = *m_block_index == STATIC_BLOCK; - const bool symbol_is_static = - symbol_linkage_ == symbol_linkage::static_; - if (want_static != symbol_is_static) - goto again; - } - - /* Match dw2_symtab_iter_next, symbol_kind - and debug_names::psymbol_tag. */ - switch (m_domain) - { - case VAR_DOMAIN: - switch (indexval.dwarf_tag) - { - case DW_TAG_variable: - case DW_TAG_subprogram: - /* Some types are also in VAR_DOMAIN. */ - case DW_TAG_typedef: - case DW_TAG_structure_type: - break; - default: - goto again; - } - break; - case STRUCT_DOMAIN: - switch (indexval.dwarf_tag) - { - case DW_TAG_typedef: - case DW_TAG_structure_type: - break; - default: - goto again; - } - break; - case LABEL_DOMAIN: - switch (indexval.dwarf_tag) - { - case 0: - case DW_TAG_variable: - break; - default: - goto again; - } - break; - case MODULE_DOMAIN: - switch (indexval.dwarf_tag) - { - case DW_TAG_module: - break; - default: - goto again; - } - break; - default: - break; - } - - /* Match dw2_expand_symtabs_matching, symbol_kind and - debug_names::psymbol_tag. */ - switch (m_search) - { - case VARIABLES_DOMAIN: - switch (indexval.dwarf_tag) - { - case DW_TAG_variable: - break; - default: - goto again; - } - break; - case FUNCTIONS_DOMAIN: - switch (indexval.dwarf_tag) - { - case DW_TAG_subprogram: - break; - default: - goto again; - } - break; - case TYPES_DOMAIN: - switch (indexval.dwarf_tag) - { - case DW_TAG_typedef: - case DW_TAG_structure_type: - break; - default: - goto again; - } - break; - case MODULES_DOMAIN: - switch (indexval.dwarf_tag) - { - case DW_TAG_module: - break; - default: - goto again; - } - default: - break; - } - - return per_cu; -} - -static struct compunit_symtab * -dw2_debug_names_lookup_symbol (struct objfile *objfile, block_enum block_index, - const char *name, domain_enum domain) -{ - struct dwarf2_per_objfile *dwarf2_per_objfile - = get_dwarf2_per_objfile (objfile); - - const auto &mapp = dwarf2_per_objfile->debug_names_table; - if (!mapp) - { - /* index is NULL if OBJF_READNOW. */ - return NULL; - } - const auto &map = *mapp; - - dw2_debug_names_iterator iter (map, block_index, domain, name); - - struct compunit_symtab *stab_best = NULL; - struct dwarf2_per_cu_data *per_cu; - while ((per_cu = iter.next ()) != NULL) - { - struct symbol *sym, *with_opaque = NULL; - struct compunit_symtab *stab = dw2_instantiate_symtab (per_cu, false); - const struct blockvector *bv = COMPUNIT_BLOCKVECTOR (stab); - const struct block *block = BLOCKVECTOR_BLOCK (bv, block_index); - - sym = block_find_symbol (block, name, domain, - block_find_non_opaque_type_preferred, - &with_opaque); - - /* Some caution must be observed with overloaded functions and - methods, since the index will not contain any overload - information (but NAME might contain it). */ - - if (sym != NULL - && strcmp_iw (sym->search_name (), name) == 0) - return stab; - if (with_opaque != NULL - && strcmp_iw (with_opaque->search_name (), name) == 0) - stab_best = stab; - - /* Keep looking through other CUs. */ - } - - return stab_best; -} - -/* This dumps minimal information about .debug_names. It is called - via "mt print objfiles". The gdb.dwarf2/gdb-index.exp testcase - uses this to verify that .debug_names has been loaded. */ - -static void -dw2_debug_names_dump (struct objfile *objfile) -{ - struct dwarf2_per_objfile *dwarf2_per_objfile - = get_dwarf2_per_objfile (objfile); - - gdb_assert (dwarf2_per_objfile->using_index); - printf_filtered (".debug_names:"); - if (dwarf2_per_objfile->debug_names_table) - printf_filtered (" exists\n"); - else - printf_filtered (" faked for \"readnow\"\n"); - printf_filtered ("\n"); -} - -static void -dw2_debug_names_expand_symtabs_for_function (struct objfile *objfile, - const char *func_name) -{ - struct dwarf2_per_objfile *dwarf2_per_objfile - = get_dwarf2_per_objfile (objfile); - - /* dwarf2_per_objfile->debug_names_table is NULL if OBJF_READNOW. */ - if (dwarf2_per_objfile->debug_names_table) - { - const mapped_debug_names &map = *dwarf2_per_objfile->debug_names_table; - - dw2_debug_names_iterator iter (map, {}, VAR_DOMAIN, func_name); - - struct dwarf2_per_cu_data *per_cu; - while ((per_cu = iter.next ()) != NULL) - dw2_instantiate_symtab (per_cu, false); - } -} - -static void -dw2_debug_names_map_matching_symbols - (struct objfile *objfile, - const lookup_name_info &name, domain_enum domain, - int global, - gdb::function_view<symbol_found_callback_ftype> callback, - symbol_compare_ftype *ordered_compare) -{ - struct dwarf2_per_objfile *dwarf2_per_objfile - = get_dwarf2_per_objfile (objfile); - - /* debug_names_table is NULL if OBJF_READNOW. */ - if (!dwarf2_per_objfile->debug_names_table) - return; - - mapped_debug_names &map = *dwarf2_per_objfile->debug_names_table; - const block_enum block_kind = global ? GLOBAL_BLOCK : STATIC_BLOCK; - - const char *match_name = name.ada ().lookup_name ().c_str (); - auto matcher = [&] (const char *symname) - { - if (ordered_compare == nullptr) - return true; - return ordered_compare (symname, match_name) == 0; - }; - - dw2_expand_symtabs_matching_symbol (map, name, matcher, ALL_DOMAIN, - [&] (offset_type namei) - { - /* The name was matched, now expand corresponding CUs that were - marked. */ - dw2_debug_names_iterator iter (map, block_kind, domain, namei); - - struct dwarf2_per_cu_data *per_cu; - while ((per_cu = iter.next ()) != NULL) - dw2_expand_symtabs_matching_one (per_cu, nullptr, nullptr); - return true; - }); - - /* It's a shame we couldn't do this inside the - dw2_expand_symtabs_matching_symbol callback, but that skips CUs - that have already been expanded. Instead, this loop matches what - the psymtab code does. */ - for (dwarf2_per_cu_data *per_cu : dwarf2_per_objfile->all_comp_units) - { - struct compunit_symtab *cust = per_cu->v.quick->compunit_symtab; - if (cust != nullptr) - { - const struct block *block - = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (cust), block_kind); - if (!iterate_over_symbols_terminated (block, name, - domain, callback)) - break; - } - } -} - -static void -dw2_debug_names_expand_symtabs_matching - (struct objfile *objfile, - gdb::function_view<expand_symtabs_file_matcher_ftype> file_matcher, - const lookup_name_info &lookup_name, - gdb::function_view<expand_symtabs_symbol_matcher_ftype> symbol_matcher, - gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify, - enum search_domain kind) -{ - struct dwarf2_per_objfile *dwarf2_per_objfile - = get_dwarf2_per_objfile (objfile); - - /* debug_names_table is NULL if OBJF_READNOW. */ - if (!dwarf2_per_objfile->debug_names_table) - return; - - dw_expand_symtabs_matching_file_matcher (dwarf2_per_objfile, file_matcher); - - mapped_debug_names &map = *dwarf2_per_objfile->debug_names_table; - - dw2_expand_symtabs_matching_symbol (map, lookup_name, - symbol_matcher, - kind, [&] (offset_type namei) - { - /* The name was matched, now expand corresponding CUs that were - marked. */ - dw2_debug_names_iterator iter (map, kind, namei); - - struct dwarf2_per_cu_data *per_cu; - while ((per_cu = iter.next ()) != NULL) - dw2_expand_symtabs_matching_one (per_cu, file_matcher, - expansion_notify); - return true; - }); -} - -const struct quick_symbol_functions dwarf2_debug_names_functions = -{ - dw2_has_symbols, - dw2_find_last_source_symtab, - dw2_forget_cached_source_info, - dw2_map_symtabs_matching_filename, - dw2_debug_names_lookup_symbol, - dw2_print_stats, - dw2_debug_names_dump, - dw2_debug_names_expand_symtabs_for_function, - dw2_expand_all_symtabs, - dw2_expand_symtabs_with_fullname, - dw2_debug_names_map_matching_symbols, - dw2_debug_names_expand_symtabs_matching, - dw2_find_pc_sect_compunit_symtab, - NULL, - dw2_map_symbol_filenames -}; - -/* Get the content of the .gdb_index section of OBJ. SECTION_OWNER should point - to either a dwarf2_per_objfile or dwz_file object. */ - -template <typename T> -static gdb::array_view<const gdb_byte> -get_gdb_index_contents_from_section (objfile *obj, T *section_owner) -{ - dwarf2_section_info *section = §ion_owner->gdb_index; - - if (dwarf2_section_empty_p (section)) - return {}; - - /* Older elfutils strip versions could keep the section in the main - executable while splitting it for the separate debug info file. */ - if ((get_section_flags (section) & SEC_HAS_CONTENTS) == 0) - return {}; - - dwarf2_read_section (obj, section); - - /* dwarf2_section_info::size is a bfd_size_type, while - gdb::array_view works with size_t. On 32-bit hosts, with - --enable-64-bit-bfd, bfd_size_type is a 64-bit type, while size_t - is 32-bit. So we need an explicit narrowing conversion here. - This is fine, because it's impossible to allocate or mmap an - array/buffer larger than what size_t can represent. */ - return gdb::make_array_view (section->buffer, section->size); -} - -/* Lookup the index cache for the contents of the index associated to - DWARF2_OBJ. */ - -static gdb::array_view<const gdb_byte> -get_gdb_index_contents_from_cache (objfile *obj, dwarf2_per_objfile *dwarf2_obj) -{ - const bfd_build_id *build_id = build_id_bfd_get (obj->obfd); - if (build_id == nullptr) - return {}; - - return global_index_cache.lookup_gdb_index (build_id, - &dwarf2_obj->index_cache_res); -} - -/* Same as the above, but for DWZ. */ - -static gdb::array_view<const gdb_byte> -get_gdb_index_contents_from_cache_dwz (objfile *obj, dwz_file *dwz) -{ - const bfd_build_id *build_id = build_id_bfd_get (dwz->dwz_bfd.get ()); - if (build_id == nullptr) - return {}; - - return global_index_cache.lookup_gdb_index (build_id, &dwz->index_cache_res); -} - -/* See symfile.h. */ - -bool -dwarf2_initialize_objfile (struct objfile *objfile, dw_index_kind *index_kind) -{ - struct dwarf2_per_objfile *dwarf2_per_objfile - = get_dwarf2_per_objfile (objfile); - - /* If we're about to read full symbols, don't bother with the - indices. In this case we also don't care if some other debug - format is making psymtabs, because they are all about to be - expanded anyway. */ - if ((objfile->flags & OBJF_READNOW)) - { - dwarf2_per_objfile->using_index = 1; - create_all_comp_units (dwarf2_per_objfile); - create_all_type_units (dwarf2_per_objfile); - dwarf2_per_objfile->quick_file_names_table - = create_quick_file_names_table - (dwarf2_per_objfile->all_comp_units.size ()); - - for (int i = 0; i < (dwarf2_per_objfile->all_comp_units.size () - + dwarf2_per_objfile->all_type_units.size ()); ++i) - { - dwarf2_per_cu_data *per_cu = dwarf2_per_objfile->get_cutu (i); - - per_cu->v.quick = OBSTACK_ZALLOC (&objfile->objfile_obstack, - struct dwarf2_per_cu_quick_data); - } - - /* Return 1 so that gdb sees the "quick" functions. However, - these functions will be no-ops because we will have expanded - all symtabs. */ - *index_kind = dw_index_kind::GDB_INDEX; - return true; - } - - if (dwarf2_read_debug_names (dwarf2_per_objfile)) - { - *index_kind = dw_index_kind::DEBUG_NAMES; - return true; - } - - if (dwarf2_read_gdb_index (dwarf2_per_objfile, - get_gdb_index_contents_from_section<struct dwarf2_per_objfile>, - get_gdb_index_contents_from_section<dwz_file>)) - { - *index_kind = dw_index_kind::GDB_INDEX; - return true; - } - - /* ... otherwise, try to find the index in the index cache. */ - if (dwarf2_read_gdb_index (dwarf2_per_objfile, - get_gdb_index_contents_from_cache, - get_gdb_index_contents_from_cache_dwz)) - { - global_index_cache.hit (); - *index_kind = dw_index_kind::GDB_INDEX; - return true; - } - - global_index_cache.miss (); - return false; -} - - - -/* Build a partial symbol table. */ - -void -dwarf2_build_psymtabs (struct objfile *objfile) -{ - struct dwarf2_per_objfile *dwarf2_per_objfile - = get_dwarf2_per_objfile (objfile); - - init_psymbol_list (objfile, 1024); - - try - { - /* This isn't really ideal: all the data we allocate on the - objfile's obstack is still uselessly kept around. However, - freeing it seems unsafe. */ - psymtab_discarder psymtabs (objfile); - dwarf2_build_psymtabs_hard (dwarf2_per_objfile); - psymtabs.keep (); - - /* (maybe) store an index in the cache. */ - global_index_cache.store (dwarf2_per_objfile); - } - catch (const gdb_exception_error &except) - { - exception_print (gdb_stderr, except); - } -} - -/* Return the total length of the CU described by HEADER. */ - -static unsigned int -get_cu_length (const struct comp_unit_head *header) -{ - return header->initial_length_size + header->length; -} - -/* Return TRUE if SECT_OFF is within CU_HEADER. */ - -static inline bool -offset_in_cu_p (const comp_unit_head *cu_header, sect_offset sect_off) -{ - sect_offset bottom = cu_header->sect_off; - sect_offset top = cu_header->sect_off + get_cu_length (cu_header); - - return sect_off >= bottom && sect_off < top; -} - -/* Find the base address of the compilation unit for range lists and - location lists. It will normally be specified by DW_AT_low_pc. - In DWARF-3 draft 4, the base address could be overridden by - DW_AT_entry_pc. It's been removed, but GCC still uses this for - compilation units with discontinuous ranges. */ - -static void -dwarf2_find_base_address (struct die_info *die, struct dwarf2_cu *cu) -{ - struct attribute *attr; - - cu->base_known = 0; - cu->base_address = 0; - - attr = dwarf2_attr (die, DW_AT_entry_pc, cu); - if (attr != nullptr) - { - cu->base_address = attr_value_as_address (attr); - cu->base_known = 1; - } - else - { - attr = dwarf2_attr (die, DW_AT_low_pc, cu); - if (attr != nullptr) - { - cu->base_address = attr_value_as_address (attr); - cu->base_known = 1; - } - } -} - -/* Read in the comp unit header information from the debug_info at info_ptr. - Use rcuh_kind::COMPILE as the default type if not known by the caller. - NOTE: This leaves members offset, first_die_offset to be filled in - by the caller. */ - -static const gdb_byte * -read_comp_unit_head (struct comp_unit_head *cu_header, - const gdb_byte *info_ptr, - struct dwarf2_section_info *section, - rcuh_kind section_kind) -{ - int signed_addr; - unsigned int bytes_read; - const char *filename = get_section_file_name (section); - bfd *abfd = get_section_bfd_owner (section); - - cu_header->length = read_initial_length (abfd, info_ptr, &bytes_read); - cu_header->initial_length_size = bytes_read; - cu_header->offset_size = (bytes_read == 4) ? 4 : 8; - info_ptr += bytes_read; - cu_header->version = read_2_bytes (abfd, info_ptr); - if (cu_header->version < 2 || cu_header->version > 5) - error (_("Dwarf Error: wrong version in compilation unit header " - "(is %d, should be 2, 3, 4 or 5) [in module %s]"), - cu_header->version, filename); - info_ptr += 2; - if (cu_header->version < 5) - switch (section_kind) - { - case rcuh_kind::COMPILE: - cu_header->unit_type = DW_UT_compile; - break; - case rcuh_kind::TYPE: - cu_header->unit_type = DW_UT_type; - break; - default: - internal_error (__FILE__, __LINE__, - _("read_comp_unit_head: invalid section_kind")); - } - else - { - cu_header->unit_type = static_cast<enum dwarf_unit_type> - (read_1_byte (abfd, info_ptr)); - info_ptr += 1; - switch (cu_header->unit_type) - { - case DW_UT_compile: - case DW_UT_partial: - case DW_UT_skeleton: - case DW_UT_split_compile: - if (section_kind != rcuh_kind::COMPILE) - error (_("Dwarf Error: wrong unit_type in compilation unit header " - "(is %s, should be %s) [in module %s]"), - dwarf_unit_type_name (cu_header->unit_type), - dwarf_unit_type_name (DW_UT_type), filename); - break; - case DW_UT_type: - case DW_UT_split_type: - section_kind = rcuh_kind::TYPE; - break; - default: - error (_("Dwarf Error: wrong unit_type in compilation unit header " - "(is %#04x, should be one of: %s, %s, %s, %s or %s) " - "[in module %s]"), cu_header->unit_type, - dwarf_unit_type_name (DW_UT_compile), - dwarf_unit_type_name (DW_UT_skeleton), - dwarf_unit_type_name (DW_UT_split_compile), - dwarf_unit_type_name (DW_UT_type), - dwarf_unit_type_name (DW_UT_split_type), filename); - } - - cu_header->addr_size = read_1_byte (abfd, info_ptr); - info_ptr += 1; - } - cu_header->abbrev_sect_off = (sect_offset) read_offset (abfd, info_ptr, - cu_header, - &bytes_read); - info_ptr += bytes_read; - if (cu_header->version < 5) - { - cu_header->addr_size = read_1_byte (abfd, info_ptr); - info_ptr += 1; - } - signed_addr = bfd_get_sign_extend_vma (abfd); - if (signed_addr < 0) - internal_error (__FILE__, __LINE__, - _("read_comp_unit_head: dwarf from non elf file")); - cu_header->signed_addr_p = signed_addr; - - bool header_has_signature = section_kind == rcuh_kind::TYPE - || cu_header->unit_type == DW_UT_skeleton - || cu_header->unit_type == DW_UT_split_compile; - - if (header_has_signature) - { - cu_header->signature = read_8_bytes (abfd, info_ptr); - info_ptr += 8; - } - - if (section_kind == rcuh_kind::TYPE) - { - LONGEST type_offset; - type_offset = read_offset (abfd, info_ptr, cu_header, &bytes_read); - info_ptr += bytes_read; - cu_header->type_cu_offset_in_tu = (cu_offset) type_offset; - if (to_underlying (cu_header->type_cu_offset_in_tu) != type_offset) - error (_("Dwarf Error: Too big type_offset in compilation unit " - "header (is %s) [in module %s]"), plongest (type_offset), - filename); - } - - return info_ptr; -} - -/* Helper function that returns the proper abbrev section for - THIS_CU. */ - -static struct dwarf2_section_info * -get_abbrev_section_for_cu (struct dwarf2_per_cu_data *this_cu) -{ - struct dwarf2_section_info *abbrev; - struct dwarf2_per_objfile *dwarf2_per_objfile = this_cu->dwarf2_per_objfile; - - if (this_cu->is_dwz) - abbrev = &dwarf2_get_dwz_file (dwarf2_per_objfile)->abbrev; - else - abbrev = &dwarf2_per_objfile->abbrev; - - return abbrev; -} - -/* Subroutine of read_and_check_comp_unit_head and - read_and_check_type_unit_head to simplify them. - Perform various error checking on the header. */ - -static void -error_check_comp_unit_head (struct dwarf2_per_objfile *dwarf2_per_objfile, - struct comp_unit_head *header, - struct dwarf2_section_info *section, - struct dwarf2_section_info *abbrev_section) -{ - const char *filename = get_section_file_name (section); - - if (to_underlying (header->abbrev_sect_off) - >= dwarf2_section_size (dwarf2_per_objfile->objfile, abbrev_section)) - error (_("Dwarf Error: bad offset (%s) in compilation unit header " - "(offset %s + 6) [in module %s]"), - sect_offset_str (header->abbrev_sect_off), - sect_offset_str (header->sect_off), - filename); - - /* Cast to ULONGEST to use 64-bit arithmetic when possible to - avoid potential 32-bit overflow. */ - if (((ULONGEST) header->sect_off + get_cu_length (header)) - > section->size) - error (_("Dwarf Error: bad length (0x%x) in compilation unit header " - "(offset %s + 0) [in module %s]"), - header->length, sect_offset_str (header->sect_off), - filename); -} - -/* Read in a CU/TU header and perform some basic error checking. - The contents of the header are stored in HEADER. - The result is a pointer to the start of the first DIE. */ - -static const gdb_byte * -read_and_check_comp_unit_head (struct dwarf2_per_objfile *dwarf2_per_objfile, - struct comp_unit_head *header, - struct dwarf2_section_info *section, - struct dwarf2_section_info *abbrev_section, - const gdb_byte *info_ptr, - rcuh_kind section_kind) -{ - const gdb_byte *beg_of_comp_unit = info_ptr; - - header->sect_off = (sect_offset) (beg_of_comp_unit - section->buffer); - - info_ptr = read_comp_unit_head (header, info_ptr, section, section_kind); - - header->first_die_cu_offset = (cu_offset) (info_ptr - beg_of_comp_unit); - - error_check_comp_unit_head (dwarf2_per_objfile, header, section, - abbrev_section); - - return info_ptr; -} - -/* Fetch the abbreviation table offset from a comp or type unit header. */ - -static sect_offset -read_abbrev_offset (struct dwarf2_per_objfile *dwarf2_per_objfile, - struct dwarf2_section_info *section, - sect_offset sect_off) -{ - bfd *abfd = get_section_bfd_owner (section); - const gdb_byte *info_ptr; - unsigned int initial_length_size, offset_size; - uint16_t version; - - dwarf2_read_section (dwarf2_per_objfile->objfile, section); - info_ptr = section->buffer + to_underlying (sect_off); - read_initial_length (abfd, info_ptr, &initial_length_size); - offset_size = initial_length_size == 4 ? 4 : 8; - info_ptr += initial_length_size; - - version = read_2_bytes (abfd, info_ptr); - info_ptr += 2; - if (version >= 5) - { - /* Skip unit type and address size. */ - info_ptr += 2; - } - - return (sect_offset) read_offset_1 (abfd, info_ptr, offset_size); -} - -/* Allocate a new partial symtab for file named NAME and mark this new - partial symtab as being an include of PST. */ - -static void -dwarf2_create_include_psymtab (const char *name, struct partial_symtab *pst, - struct objfile *objfile) -{ - struct partial_symtab *subpst = allocate_psymtab (name, objfile); - - if (!IS_ABSOLUTE_PATH (subpst->filename)) - { - /* It shares objfile->objfile_obstack. */ - subpst->dirname = pst->dirname; - } - - subpst->dependencies = objfile->partial_symtabs->allocate_dependencies (1); - subpst->dependencies[0] = pst; - subpst->number_of_dependencies = 1; - - subpst->read_symtab = pst->read_symtab; - - /* No private part is necessary for include psymtabs. This property - can be used to differentiate between such include psymtabs and - the regular ones. */ - subpst->read_symtab_private = NULL; -} - -/* Read the Line Number Program data and extract the list of files - included by the source file represented by PST. Build an include - partial symtab for each of these included files. */ - -static void -dwarf2_build_include_psymtabs (struct dwarf2_cu *cu, - struct die_info *die, - struct partial_symtab *pst) -{ - line_header_up lh; - struct attribute *attr; - - attr = dwarf2_attr (die, DW_AT_stmt_list, cu); - if (attr != nullptr) - lh = dwarf_decode_line_header ((sect_offset) DW_UNSND (attr), cu); - if (lh == NULL) - return; /* No linetable, so no includes. */ - - /* NOTE: pst->dirname is DW_AT_comp_dir (if present). Also note - that we pass in the raw text_low here; that is ok because we're - only decoding the line table to make include partial symtabs, and - so the addresses aren't really used. */ - dwarf_decode_lines (lh.get (), pst->dirname, cu, pst, - pst->raw_text_low (), 1); -} - -static hashval_t -hash_signatured_type (const void *item) -{ - const struct signatured_type *sig_type - = (const struct signatured_type *) item; - - /* This drops the top 32 bits of the signature, but is ok for a hash. */ - return sig_type->signature; -} - -static int -eq_signatured_type (const void *item_lhs, const void *item_rhs) -{ - const struct signatured_type *lhs = (const struct signatured_type *) item_lhs; - const struct signatured_type *rhs = (const struct signatured_type *) item_rhs; - - return lhs->signature == rhs->signature; -} - -/* Allocate a hash table for signatured types. */ - -static htab_t -allocate_signatured_type_table (struct objfile *objfile) -{ - return htab_create_alloc_ex (41, - hash_signatured_type, - eq_signatured_type, - NULL, - &objfile->objfile_obstack, - hashtab_obstack_allocate, - dummy_obstack_deallocate); -} - -/* A helper function to add a signatured type CU to a table. */ - -static int -add_signatured_type_cu_to_table (void **slot, void *datum) -{ - struct signatured_type *sigt = (struct signatured_type *) *slot; - std::vector<signatured_type *> *all_type_units - = (std::vector<signatured_type *> *) datum; - - all_type_units->push_back (sigt); - - return 1; -} - -/* A helper for create_debug_types_hash_table. Read types from SECTION - and fill them into TYPES_HTAB. It will process only type units, - therefore DW_UT_type. */ - -static void -create_debug_type_hash_table (struct dwarf2_per_objfile *dwarf2_per_objfile, - struct dwo_file *dwo_file, - dwarf2_section_info *section, htab_t &types_htab, - rcuh_kind section_kind) -{ - struct objfile *objfile = dwarf2_per_objfile->objfile; - struct dwarf2_section_info *abbrev_section; - bfd *abfd; - const gdb_byte *info_ptr, *end_ptr; - - abbrev_section = (dwo_file != NULL - ? &dwo_file->sections.abbrev - : &dwarf2_per_objfile->abbrev); - - if (dwarf_read_debug) - fprintf_unfiltered (gdb_stdlog, "Reading %s for %s:\n", - get_section_name (section), - get_section_file_name (abbrev_section)); - - dwarf2_read_section (objfile, section); - info_ptr = section->buffer; - - if (info_ptr == NULL) - return; - - /* We can't set abfd until now because the section may be empty or - not present, in which case the bfd is unknown. */ - abfd = get_section_bfd_owner (section); - - /* We don't use init_cutu_and_read_dies_simple, or some such, here - because we don't need to read any dies: the signature is in the - header. */ - - end_ptr = info_ptr + section->size; - while (info_ptr < end_ptr) - { - struct signatured_type *sig_type; - struct dwo_unit *dwo_tu; - void **slot; - const gdb_byte *ptr = info_ptr; - struct comp_unit_head header; - unsigned int length; - - sect_offset sect_off = (sect_offset) (ptr - section->buffer); - - /* Initialize it due to a false compiler warning. */ - header.signature = -1; - header.type_cu_offset_in_tu = (cu_offset) -1; - - /* We need to read the type's signature in order to build the hash - table, but we don't need anything else just yet. */ - - ptr = read_and_check_comp_unit_head (dwarf2_per_objfile, &header, section, - abbrev_section, ptr, section_kind); - - length = get_cu_length (&header); - - /* Skip dummy type units. */ - if (ptr >= info_ptr + length - || peek_abbrev_code (abfd, ptr) == 0 - || header.unit_type != DW_UT_type) - { - info_ptr += length; - continue; - } - - if (types_htab == NULL) - { - if (dwo_file) - types_htab = allocate_dwo_unit_table (objfile); - else - types_htab = allocate_signatured_type_table (objfile); - } - - if (dwo_file) - { - sig_type = NULL; - dwo_tu = OBSTACK_ZALLOC (&objfile->objfile_obstack, - struct dwo_unit); - dwo_tu->dwo_file = dwo_file; - dwo_tu->signature = header.signature; - dwo_tu->type_offset_in_tu = header.type_cu_offset_in_tu; - dwo_tu->section = section; - dwo_tu->sect_off = sect_off; - dwo_tu->length = length; - } - else - { - /* N.B.: type_offset is not usable if this type uses a DWO file. - The real type_offset is in the DWO file. */ - dwo_tu = NULL; - sig_type = OBSTACK_ZALLOC (&objfile->objfile_obstack, - struct signatured_type); - sig_type->signature = header.signature; - sig_type->type_offset_in_tu = header.type_cu_offset_in_tu; - sig_type->per_cu.dwarf2_per_objfile = dwarf2_per_objfile; - sig_type->per_cu.is_debug_types = 1; - sig_type->per_cu.section = section; - sig_type->per_cu.sect_off = sect_off; - sig_type->per_cu.length = length; - } - - slot = htab_find_slot (types_htab, - dwo_file ? (void*) dwo_tu : (void *) sig_type, - INSERT); - gdb_assert (slot != NULL); - if (*slot != NULL) - { - sect_offset dup_sect_off; - - if (dwo_file) - { - const struct dwo_unit *dup_tu - = (const struct dwo_unit *) *slot; - - dup_sect_off = dup_tu->sect_off; - } - else - { - const struct signatured_type *dup_tu - = (const struct signatured_type *) *slot; - - dup_sect_off = dup_tu->per_cu.sect_off; - } - - complaint (_("debug type entry at offset %s is duplicate to" - " the entry at offset %s, signature %s"), - sect_offset_str (sect_off), sect_offset_str (dup_sect_off), - hex_string (header.signature)); - } - *slot = dwo_file ? (void *) dwo_tu : (void *) sig_type; - - if (dwarf_read_debug > 1) - fprintf_unfiltered (gdb_stdlog, " offset %s, signature %s\n", - sect_offset_str (sect_off), - hex_string (header.signature)); - - info_ptr += length; - } -} - -/* Create the hash table of all entries in the .debug_types - (or .debug_types.dwo) section(s). - If reading a DWO file, then DWO_FILE is a pointer to the DWO file object, - otherwise it is NULL. - - The result is a pointer to the hash table or NULL if there are no types. - - Note: This function processes DWO files only, not DWP files. */ - -static void -create_debug_types_hash_table (struct dwarf2_per_objfile *dwarf2_per_objfile, - struct dwo_file *dwo_file, - gdb::array_view<dwarf2_section_info> type_sections, - htab_t &types_htab) -{ - for (dwarf2_section_info §ion : type_sections) - create_debug_type_hash_table (dwarf2_per_objfile, dwo_file, §ion, - types_htab, rcuh_kind::TYPE); -} - -/* Create the hash table of all entries in the .debug_types section, - and initialize all_type_units. - The result is zero if there is an error (e.g. missing .debug_types section), - otherwise non-zero. */ - -static int -create_all_type_units (struct dwarf2_per_objfile *dwarf2_per_objfile) -{ - htab_t types_htab = NULL; - - create_debug_type_hash_table (dwarf2_per_objfile, NULL, - &dwarf2_per_objfile->info, types_htab, - rcuh_kind::COMPILE); - create_debug_types_hash_table (dwarf2_per_objfile, NULL, - dwarf2_per_objfile->types, types_htab); - if (types_htab == NULL) - { - dwarf2_per_objfile->signatured_types = NULL; - return 0; - } - - dwarf2_per_objfile->signatured_types = types_htab; - - gdb_assert (dwarf2_per_objfile->all_type_units.empty ()); - dwarf2_per_objfile->all_type_units.reserve (htab_elements (types_htab)); - - htab_traverse_noresize (types_htab, add_signatured_type_cu_to_table, - &dwarf2_per_objfile->all_type_units); - - return 1; -} - -/* Add an entry for signature SIG to dwarf2_per_objfile->signatured_types. - If SLOT is non-NULL, it is the entry to use in the hash table. - Otherwise we find one. */ - -static struct signatured_type * -add_type_unit (struct dwarf2_per_objfile *dwarf2_per_objfile, ULONGEST sig, - void **slot) -{ - struct objfile *objfile = dwarf2_per_objfile->objfile; - - if (dwarf2_per_objfile->all_type_units.size () - == dwarf2_per_objfile->all_type_units.capacity ()) - ++dwarf2_per_objfile->tu_stats.nr_all_type_units_reallocs; - - signatured_type *sig_type = OBSTACK_ZALLOC (&objfile->objfile_obstack, - struct signatured_type); - - dwarf2_per_objfile->all_type_units.push_back (sig_type); - sig_type->signature = sig; - sig_type->per_cu.is_debug_types = 1; - if (dwarf2_per_objfile->using_index) - { - sig_type->per_cu.v.quick = - OBSTACK_ZALLOC (&objfile->objfile_obstack, - struct dwarf2_per_cu_quick_data); - } - - if (slot == NULL) - { - slot = htab_find_slot (dwarf2_per_objfile->signatured_types, - sig_type, INSERT); - } - gdb_assert (*slot == NULL); - *slot = sig_type; - /* The rest of sig_type must be filled in by the caller. */ - return sig_type; -} - -/* Subroutine of lookup_dwo_signatured_type and lookup_dwp_signatured_type. - Fill in SIG_ENTRY with DWO_ENTRY. */ - -static void -fill_in_sig_entry_from_dwo_entry (struct dwarf2_per_objfile *dwarf2_per_objfile, - struct signatured_type *sig_entry, - struct dwo_unit *dwo_entry) -{ - /* Make sure we're not clobbering something we don't expect to. */ - gdb_assert (! sig_entry->per_cu.queued); - gdb_assert (sig_entry->per_cu.cu == NULL); - if (dwarf2_per_objfile->using_index) - { - gdb_assert (sig_entry->per_cu.v.quick != NULL); - gdb_assert (sig_entry->per_cu.v.quick->compunit_symtab == NULL); - } - else - gdb_assert (sig_entry->per_cu.v.psymtab == NULL); - gdb_assert (sig_entry->signature == dwo_entry->signature); - gdb_assert (to_underlying (sig_entry->type_offset_in_section) == 0); - gdb_assert (sig_entry->type_unit_group == NULL); - gdb_assert (sig_entry->dwo_unit == NULL); - - sig_entry->per_cu.section = dwo_entry->section; - sig_entry->per_cu.sect_off = dwo_entry->sect_off; - sig_entry->per_cu.length = dwo_entry->length; - sig_entry->per_cu.reading_dwo_directly = 1; - sig_entry->per_cu.dwarf2_per_objfile = dwarf2_per_objfile; - sig_entry->type_offset_in_tu = dwo_entry->type_offset_in_tu; - sig_entry->dwo_unit = dwo_entry; -} - -/* Subroutine of lookup_signatured_type. - If we haven't read the TU yet, create the signatured_type data structure - for a TU to be read in directly from a DWO file, bypassing the stub. - This is the "Stay in DWO Optimization": When there is no DWP file and we're - using .gdb_index, then when reading a CU we want to stay in the DWO file - containing that CU. Otherwise we could end up reading several other DWO - files (due to comdat folding) to process the transitive closure of all the - mentioned TUs, and that can be slow. The current DWO file will have every - type signature that it needs. - We only do this for .gdb_index because in the psymtab case we already have - to read all the DWOs to build the type unit groups. */ - -static struct signatured_type * -lookup_dwo_signatured_type (struct dwarf2_cu *cu, ULONGEST sig) -{ - struct dwarf2_per_objfile *dwarf2_per_objfile - = cu->per_cu->dwarf2_per_objfile; - struct objfile *objfile = dwarf2_per_objfile->objfile; - struct dwo_file *dwo_file; - struct dwo_unit find_dwo_entry, *dwo_entry; - struct signatured_type find_sig_entry, *sig_entry; - void **slot; - - gdb_assert (cu->dwo_unit && dwarf2_per_objfile->using_index); - - /* If TU skeletons have been removed then we may not have read in any - TUs yet. */ - if (dwarf2_per_objfile->signatured_types == NULL) - { - dwarf2_per_objfile->signatured_types - = allocate_signatured_type_table (objfile); - } - - /* We only ever need to read in one copy of a signatured type. - Use the global signatured_types array to do our own comdat-folding - of types. If this is the first time we're reading this TU, and - the TU has an entry in .gdb_index, replace the recorded data from - .gdb_index with this TU. */ - - find_sig_entry.signature = sig; - slot = htab_find_slot (dwarf2_per_objfile->signatured_types, - &find_sig_entry, INSERT); - sig_entry = (struct signatured_type *) *slot; - - /* We can get here with the TU already read, *or* in the process of being - read. Don't reassign the global entry to point to this DWO if that's - the case. Also note that if the TU is already being read, it may not - have come from a DWO, the program may be a mix of Fission-compiled - code and non-Fission-compiled code. */ - - /* Have we already tried to read this TU? - Note: sig_entry can be NULL if the skeleton TU was removed (thus it - needn't exist in the global table yet). */ - if (sig_entry != NULL && sig_entry->per_cu.tu_read) - return sig_entry; - - /* Note: cu->dwo_unit is the dwo_unit that references this TU, not the - dwo_unit of the TU itself. */ - dwo_file = cu->dwo_unit->dwo_file; - - /* Ok, this is the first time we're reading this TU. */ - if (dwo_file->tus == NULL) - return NULL; - find_dwo_entry.signature = sig; - dwo_entry = (struct dwo_unit *) htab_find (dwo_file->tus, &find_dwo_entry); - if (dwo_entry == NULL) - return NULL; - - /* If the global table doesn't have an entry for this TU, add one. */ - if (sig_entry == NULL) - sig_entry = add_type_unit (dwarf2_per_objfile, sig, slot); - - fill_in_sig_entry_from_dwo_entry (dwarf2_per_objfile, sig_entry, dwo_entry); - sig_entry->per_cu.tu_read = 1; - return sig_entry; -} - -/* Subroutine of lookup_signatured_type. - Look up the type for signature SIG, and if we can't find SIG in .gdb_index - then try the DWP file. If the TU stub (skeleton) has been removed then - it won't be in .gdb_index. */ - -static struct signatured_type * -lookup_dwp_signatured_type (struct dwarf2_cu *cu, ULONGEST sig) -{ - struct dwarf2_per_objfile *dwarf2_per_objfile - = cu->per_cu->dwarf2_per_objfile; - struct objfile *objfile = dwarf2_per_objfile->objfile; - struct dwp_file *dwp_file = get_dwp_file (dwarf2_per_objfile); - struct dwo_unit *dwo_entry; - struct signatured_type find_sig_entry, *sig_entry; - void **slot; - - gdb_assert (cu->dwo_unit && dwarf2_per_objfile->using_index); - gdb_assert (dwp_file != NULL); - - /* If TU skeletons have been removed then we may not have read in any - TUs yet. */ - if (dwarf2_per_objfile->signatured_types == NULL) - { - dwarf2_per_objfile->signatured_types - = allocate_signatured_type_table (objfile); - } - - find_sig_entry.signature = sig; - slot = htab_find_slot (dwarf2_per_objfile->signatured_types, - &find_sig_entry, INSERT); - sig_entry = (struct signatured_type *) *slot; - - /* Have we already tried to read this TU? - Note: sig_entry can be NULL if the skeleton TU was removed (thus it - needn't exist in the global table yet). */ - if (sig_entry != NULL) - return sig_entry; - - if (dwp_file->tus == NULL) - return NULL; - dwo_entry = lookup_dwo_unit_in_dwp (dwarf2_per_objfile, dwp_file, NULL, - sig, 1 /* is_debug_types */); - if (dwo_entry == NULL) - return NULL; - - sig_entry = add_type_unit (dwarf2_per_objfile, sig, slot); - fill_in_sig_entry_from_dwo_entry (dwarf2_per_objfile, sig_entry, dwo_entry); - - return sig_entry; -} - -/* Lookup a signature based type for DW_FORM_ref_sig8. - Returns NULL if signature SIG is not present in the table. - It is up to the caller to complain about this. */ - -static struct signatured_type * -lookup_signatured_type (struct dwarf2_cu *cu, ULONGEST sig) -{ - struct dwarf2_per_objfile *dwarf2_per_objfile - = cu->per_cu->dwarf2_per_objfile; - - if (cu->dwo_unit - && dwarf2_per_objfile->using_index) - { - /* We're in a DWO/DWP file, and we're using .gdb_index. - These cases require special processing. */ - if (get_dwp_file (dwarf2_per_objfile) == NULL) - return lookup_dwo_signatured_type (cu, sig); - else - return lookup_dwp_signatured_type (cu, sig); - } - else - { - struct signatured_type find_entry, *entry; - - if (dwarf2_per_objfile->signatured_types == NULL) - return NULL; - find_entry.signature = sig; - entry = ((struct signatured_type *) - htab_find (dwarf2_per_objfile->signatured_types, &find_entry)); - return entry; - } -} - -/* Low level DIE reading support. */ - -/* Initialize a die_reader_specs struct from a dwarf2_cu struct. */ - -static void -init_cu_die_reader (struct die_reader_specs *reader, - struct dwarf2_cu *cu, - struct dwarf2_section_info *section, - struct dwo_file *dwo_file, - struct abbrev_table *abbrev_table) -{ - gdb_assert (section->readin && section->buffer != NULL); - reader->abfd = get_section_bfd_owner (section); - reader->cu = cu; - reader->dwo_file = dwo_file; - reader->die_section = section; - reader->buffer = section->buffer; - reader->buffer_end = section->buffer + section->size; - reader->comp_dir = NULL; - reader->abbrev_table = abbrev_table; -} - -/* Subroutine of init_cutu_and_read_dies to simplify it. - Read in the rest of a CU/TU top level DIE from DWO_UNIT. - There's just a lot of work to do, and init_cutu_and_read_dies is big enough - already. - - STUB_COMP_UNIT_DIE is for the stub DIE, we copy over certain attributes - from it to the DIE in the DWO. If NULL we are skipping the stub. - STUB_COMP_DIR is similar to STUB_COMP_UNIT_DIE: When reading a TU directly - from the DWO file, bypassing the stub, it contains the DW_AT_comp_dir - attribute of the referencing CU. At most one of STUB_COMP_UNIT_DIE and - STUB_COMP_DIR may be non-NULL. - *RESULT_READER,*RESULT_INFO_PTR,*RESULT_COMP_UNIT_DIE,*RESULT_HAS_CHILDREN - are filled in with the info of the DIE from the DWO file. - *RESULT_DWO_ABBREV_TABLE will be filled in with the abbrev table allocated - from the dwo. Since *RESULT_READER references this abbrev table, it must be - kept around for at least as long as *RESULT_READER. - - The result is non-zero if a valid (non-dummy) DIE was found. */ - -static int -read_cutu_die_from_dwo (struct dwarf2_per_cu_data *this_cu, - struct dwo_unit *dwo_unit, - struct die_info *stub_comp_unit_die, - const char *stub_comp_dir, - struct die_reader_specs *result_reader, - const gdb_byte **result_info_ptr, - struct die_info **result_comp_unit_die, - int *result_has_children, - abbrev_table_up *result_dwo_abbrev_table) -{ - struct dwarf2_per_objfile *dwarf2_per_objfile = this_cu->dwarf2_per_objfile; - struct objfile *objfile = dwarf2_per_objfile->objfile; - struct dwarf2_cu *cu = this_cu->cu; - bfd *abfd; - const gdb_byte *begin_info_ptr, *info_ptr; - struct attribute *comp_dir, *stmt_list, *low_pc, *high_pc, *ranges; - int i,num_extra_attrs; - struct dwarf2_section_info *dwo_abbrev_section; - struct attribute *attr; - struct die_info *comp_unit_die; - - /* At most one of these may be provided. */ - gdb_assert ((stub_comp_unit_die != NULL) + (stub_comp_dir != NULL) <= 1); - - /* These attributes aren't processed until later: - DW_AT_stmt_list, DW_AT_low_pc, DW_AT_high_pc, DW_AT_ranges. - DW_AT_comp_dir is used now, to find the DWO file, but it is also - referenced later. However, these attributes are found in the stub - which we won't have later. In order to not impose this complication - on the rest of the code, we read them here and copy them to the - DWO CU/TU die. */ - - stmt_list = NULL; - low_pc = NULL; - high_pc = NULL; - ranges = NULL; - comp_dir = NULL; - - if (stub_comp_unit_die != NULL) - { - /* For TUs in DWO files, the DW_AT_stmt_list attribute lives in the - DWO file. */ - if (! this_cu->is_debug_types) - stmt_list = dwarf2_attr (stub_comp_unit_die, DW_AT_stmt_list, cu); - low_pc = dwarf2_attr (stub_comp_unit_die, DW_AT_low_pc, cu); - high_pc = dwarf2_attr (stub_comp_unit_die, DW_AT_high_pc, cu); - ranges = dwarf2_attr (stub_comp_unit_die, DW_AT_ranges, cu); - comp_dir = dwarf2_attr (stub_comp_unit_die, DW_AT_comp_dir, cu); - - /* There should be a DW_AT_addr_base attribute here (if needed). - We need the value before we can process DW_FORM_GNU_addr_index - or DW_FORM_addrx. */ - cu->addr_base = 0; - attr = dwarf2_attr (stub_comp_unit_die, DW_AT_GNU_addr_base, cu); - if (attr != nullptr) - cu->addr_base = DW_UNSND (attr); - - /* There should be a DW_AT_ranges_base attribute here (if needed). - We need the value before we can process DW_AT_ranges. */ - cu->ranges_base = 0; - attr = dwarf2_attr (stub_comp_unit_die, DW_AT_GNU_ranges_base, cu); - if (attr != nullptr) - cu->ranges_base = DW_UNSND (attr); - } - else if (stub_comp_dir != NULL) - { - /* Reconstruct the comp_dir attribute to simplify the code below. */ - comp_dir = XOBNEW (&cu->comp_unit_obstack, struct attribute); - comp_dir->name = DW_AT_comp_dir; - comp_dir->form = DW_FORM_string; - DW_STRING_IS_CANONICAL (comp_dir) = 0; - DW_STRING (comp_dir) = stub_comp_dir; - } - - /* Set up for reading the DWO CU/TU. */ - cu->dwo_unit = dwo_unit; - dwarf2_section_info *section = dwo_unit->section; - dwarf2_read_section (objfile, section); - abfd = get_section_bfd_owner (section); - begin_info_ptr = info_ptr = (section->buffer - + to_underlying (dwo_unit->sect_off)); - dwo_abbrev_section = &dwo_unit->dwo_file->sections.abbrev; - - if (this_cu->is_debug_types) - { - struct signatured_type *sig_type = (struct signatured_type *) this_cu; - - info_ptr = read_and_check_comp_unit_head (dwarf2_per_objfile, - &cu->header, section, - dwo_abbrev_section, - info_ptr, rcuh_kind::TYPE); - /* This is not an assert because it can be caused by bad debug info. */ - if (sig_type->signature != cu->header.signature) - { - error (_("Dwarf Error: signature mismatch %s vs %s while reading" - " TU at offset %s [in module %s]"), - hex_string (sig_type->signature), - hex_string (cu->header.signature), - sect_offset_str (dwo_unit->sect_off), - bfd_get_filename (abfd)); - } - gdb_assert (dwo_unit->sect_off == cu->header.sect_off); - /* For DWOs coming from DWP files, we don't know the CU length - nor the type's offset in the TU until now. */ - dwo_unit->length = get_cu_length (&cu->header); - dwo_unit->type_offset_in_tu = cu->header.type_cu_offset_in_tu; - - /* Establish the type offset that can be used to lookup the type. - For DWO files, we don't know it until now. */ - sig_type->type_offset_in_section - = dwo_unit->sect_off + to_underlying (dwo_unit->type_offset_in_tu); - } - else - { - info_ptr = read_and_check_comp_unit_head (dwarf2_per_objfile, - &cu->header, section, - dwo_abbrev_section, - info_ptr, rcuh_kind::COMPILE); - gdb_assert (dwo_unit->sect_off == cu->header.sect_off); - /* For DWOs coming from DWP files, we don't know the CU length - until now. */ - dwo_unit->length = get_cu_length (&cu->header); - } - - *result_dwo_abbrev_table - = abbrev_table_read_table (dwarf2_per_objfile, dwo_abbrev_section, - cu->header.abbrev_sect_off); - init_cu_die_reader (result_reader, cu, section, dwo_unit->dwo_file, - result_dwo_abbrev_table->get ()); - - /* Read in the die, but leave space to copy over the attributes - from the stub. This has the benefit of simplifying the rest of - the code - all the work to maintain the illusion of a single - DW_TAG_{compile,type}_unit DIE is done here. */ - num_extra_attrs = ((stmt_list != NULL) - + (low_pc != NULL) - + (high_pc != NULL) - + (ranges != NULL) - + (comp_dir != NULL)); - info_ptr = read_full_die_1 (result_reader, result_comp_unit_die, info_ptr, - result_has_children, num_extra_attrs); - - /* Copy over the attributes from the stub to the DIE we just read in. */ - comp_unit_die = *result_comp_unit_die; - i = comp_unit_die->num_attrs; - if (stmt_list != NULL) - comp_unit_die->attrs[i++] = *stmt_list; - if (low_pc != NULL) - comp_unit_die->attrs[i++] = *low_pc; - if (high_pc != NULL) - comp_unit_die->attrs[i++] = *high_pc; - if (ranges != NULL) - comp_unit_die->attrs[i++] = *ranges; - if (comp_dir != NULL) - comp_unit_die->attrs[i++] = *comp_dir; - comp_unit_die->num_attrs += num_extra_attrs; - - if (dwarf_die_debug) - { - fprintf_unfiltered (gdb_stdlog, - "Read die from %s@0x%x of %s:\n", - get_section_name (section), - (unsigned) (begin_info_ptr - section->buffer), - bfd_get_filename (abfd)); - dump_die (comp_unit_die, dwarf_die_debug); - } - - /* Save the comp_dir attribute. If there is no DWP file then we'll read - TUs by skipping the stub and going directly to the entry in the DWO file. - However, skipping the stub means we won't get DW_AT_comp_dir, so we have - to get it via circuitous means. Blech. */ - if (comp_dir != NULL) - result_reader->comp_dir = DW_STRING (comp_dir); - - /* Skip dummy compilation units. */ - if (info_ptr >= begin_info_ptr + dwo_unit->length - || peek_abbrev_code (abfd, info_ptr) == 0) - return 0; - - *result_info_ptr = info_ptr; - return 1; -} - -/* Return the signature of the compile unit, if found. In DWARF 4 and before, - the signature is in the DW_AT_GNU_dwo_id attribute. In DWARF 5 and later, the - signature is part of the header. */ -static gdb::optional<ULONGEST> -lookup_dwo_id (struct dwarf2_cu *cu, struct die_info* comp_unit_die) -{ - if (cu->header.version >= 5) - return cu->header.signature; - struct attribute *attr; - attr = dwarf2_attr (comp_unit_die, DW_AT_GNU_dwo_id, cu); - if (attr == nullptr) - return gdb::optional<ULONGEST> (); - return DW_UNSND (attr); -} - -/* Subroutine of init_cutu_and_read_dies to simplify it. - Look up the DWO unit specified by COMP_UNIT_DIE of THIS_CU. - Returns NULL if the specified DWO unit cannot be found. */ - -static struct dwo_unit * -lookup_dwo_unit (struct dwarf2_per_cu_data *this_cu, - struct die_info *comp_unit_die) -{ - struct dwarf2_cu *cu = this_cu->cu; - struct dwo_unit *dwo_unit; - const char *comp_dir, *dwo_name; - - gdb_assert (cu != NULL); - - /* Yeah, we look dwo_name up again, but it simplifies the code. */ - dwo_name = dwarf2_dwo_name (comp_unit_die, cu); - comp_dir = dwarf2_string_attr (comp_unit_die, DW_AT_comp_dir, cu); - - if (this_cu->is_debug_types) - { - struct signatured_type *sig_type; - - /* Since this_cu is the first member of struct signatured_type, - we can go from a pointer to one to a pointer to the other. */ - sig_type = (struct signatured_type *) this_cu; - dwo_unit = lookup_dwo_type_unit (sig_type, dwo_name, comp_dir); - } - else - { - gdb::optional<ULONGEST> signature = lookup_dwo_id (cu, comp_unit_die); - if (!signature.has_value ()) - error (_("Dwarf Error: missing dwo_id for dwo_name %s" - " [in module %s]"), - dwo_name, objfile_name (this_cu->dwarf2_per_objfile->objfile)); - dwo_unit = lookup_dwo_comp_unit (this_cu, dwo_name, comp_dir, - *signature); - } - - return dwo_unit; -} - -/* Subroutine of init_cutu_and_read_dies to simplify it. - See it for a description of the parameters. - Read a TU directly from a DWO file, bypassing the stub. */ - -static void -init_tu_and_read_dwo_dies (struct dwarf2_per_cu_data *this_cu, - int use_existing_cu, int keep, - die_reader_func_ftype *die_reader_func, - void *data) -{ - std::unique_ptr<dwarf2_cu> new_cu; - struct signatured_type *sig_type; - struct die_reader_specs reader; - const gdb_byte *info_ptr; - struct die_info *comp_unit_die; - int has_children; - struct dwarf2_per_objfile *dwarf2_per_objfile = this_cu->dwarf2_per_objfile; - - /* Verify we can do the following downcast, and that we have the - data we need. */ - gdb_assert (this_cu->is_debug_types && this_cu->reading_dwo_directly); - sig_type = (struct signatured_type *) this_cu; - gdb_assert (sig_type->dwo_unit != NULL); - - if (use_existing_cu && this_cu->cu != NULL) - { - gdb_assert (this_cu->cu->dwo_unit == sig_type->dwo_unit); - /* There's no need to do the rereading_dwo_cu handling that - init_cutu_and_read_dies does since we don't read the stub. */ - } - else - { - /* If !use_existing_cu, this_cu->cu must be NULL. */ - gdb_assert (this_cu->cu == NULL); - new_cu.reset (new dwarf2_cu (this_cu)); - } - - /* A future optimization, if needed, would be to use an existing - abbrev table. When reading DWOs with skeletonless TUs, all the TUs - could share abbrev tables. */ - - /* The abbreviation table used by READER, this must live at least as long as - READER. */ - abbrev_table_up dwo_abbrev_table; - - if (read_cutu_die_from_dwo (this_cu, sig_type->dwo_unit, - NULL /* stub_comp_unit_die */, - sig_type->dwo_unit->dwo_file->comp_dir, - &reader, &info_ptr, - &comp_unit_die, &has_children, - &dwo_abbrev_table) == 0) - { - /* Dummy die. */ - return; - } - - /* All the "real" work is done here. */ - die_reader_func (&reader, info_ptr, comp_unit_die, has_children, data); - - /* This duplicates the code in init_cutu_and_read_dies, - but the alternative is making the latter more complex. - This function is only for the special case of using DWO files directly: - no point in overly complicating the general case just to handle this. */ - if (new_cu != NULL && keep) - { - /* Link this CU into read_in_chain. */ - this_cu->cu->read_in_chain = dwarf2_per_objfile->read_in_chain; - dwarf2_per_objfile->read_in_chain = this_cu; - /* The chain owns it now. */ - new_cu.release (); - } -} - -/* Initialize a CU (or TU) and read its DIEs. - If the CU defers to a DWO file, read the DWO file as well. - - ABBREV_TABLE, if non-NULL, is the abbreviation table to use. - Otherwise the table specified in the comp unit header is read in and used. - This is an optimization for when we already have the abbrev table. - - If USE_EXISTING_CU is non-zero, and THIS_CU->cu is non-NULL, then use it. - Otherwise, a new CU is allocated with xmalloc. - - If KEEP is non-zero, then if we allocated a dwarf2_cu we add it to - read_in_chain. Otherwise the dwarf2_cu data is freed at the end. - - WARNING: If THIS_CU is a "dummy CU" (used as filler by the incremental - linker) then DIE_READER_FUNC will not get called. */ - -static void -init_cutu_and_read_dies (struct dwarf2_per_cu_data *this_cu, - struct abbrev_table *abbrev_table, - int use_existing_cu, int keep, - bool skip_partial, - die_reader_func_ftype *die_reader_func, - void *data) -{ - struct dwarf2_per_objfile *dwarf2_per_objfile = this_cu->dwarf2_per_objfile; - struct objfile *objfile = dwarf2_per_objfile->objfile; - struct dwarf2_section_info *section = this_cu->section; - bfd *abfd = get_section_bfd_owner (section); - struct dwarf2_cu *cu; - const gdb_byte *begin_info_ptr, *info_ptr; - struct die_reader_specs reader; - struct die_info *comp_unit_die; - int has_children; - struct signatured_type *sig_type = NULL; - struct dwarf2_section_info *abbrev_section; - /* Non-zero if CU currently points to a DWO file and we need to - reread it. When this happens we need to reread the skeleton die - before we can reread the DWO file (this only applies to CUs, not TUs). */ - int rereading_dwo_cu = 0; - - if (dwarf_die_debug) - fprintf_unfiltered (gdb_stdlog, "Reading %s unit at offset %s\n", - this_cu->is_debug_types ? "type" : "comp", - sect_offset_str (this_cu->sect_off)); - - if (use_existing_cu) - gdb_assert (keep); - - /* If we're reading a TU directly from a DWO file, including a virtual DWO - file (instead of going through the stub), short-circuit all of this. */ - if (this_cu->reading_dwo_directly) - { - /* Narrow down the scope of possibilities to have to understand. */ - gdb_assert (this_cu->is_debug_types); - gdb_assert (abbrev_table == NULL); - init_tu_and_read_dwo_dies (this_cu, use_existing_cu, keep, - die_reader_func, data); - return; - } - - /* This is cheap if the section is already read in. */ - dwarf2_read_section (objfile, section); - - begin_info_ptr = info_ptr = section->buffer + to_underlying (this_cu->sect_off); - - abbrev_section = get_abbrev_section_for_cu (this_cu); - - std::unique_ptr<dwarf2_cu> new_cu; - if (use_existing_cu && this_cu->cu != NULL) - { - cu = this_cu->cu; - /* If this CU is from a DWO file we need to start over, we need to - refetch the attributes from the skeleton CU. - This could be optimized by retrieving those attributes from when we - were here the first time: the previous comp_unit_die was stored in - comp_unit_obstack. But there's no data yet that we need this - optimization. */ - if (cu->dwo_unit != NULL) - rereading_dwo_cu = 1; - } - else - { - /* If !use_existing_cu, this_cu->cu must be NULL. */ - gdb_assert (this_cu->cu == NULL); - new_cu.reset (new dwarf2_cu (this_cu)); - cu = new_cu.get (); - } - - /* Get the header. */ - if (to_underlying (cu->header.first_die_cu_offset) != 0 && !rereading_dwo_cu) - { - /* We already have the header, there's no need to read it in again. */ - info_ptr += to_underlying (cu->header.first_die_cu_offset); - } - else - { - if (this_cu->is_debug_types) - { - info_ptr = read_and_check_comp_unit_head (dwarf2_per_objfile, - &cu->header, section, - abbrev_section, info_ptr, - rcuh_kind::TYPE); - - /* Since per_cu is the first member of struct signatured_type, - we can go from a pointer to one to a pointer to the other. */ - sig_type = (struct signatured_type *) this_cu; - gdb_assert (sig_type->signature == cu->header.signature); - gdb_assert (sig_type->type_offset_in_tu - == cu->header.type_cu_offset_in_tu); - gdb_assert (this_cu->sect_off == cu->header.sect_off); - - /* LENGTH has not been set yet for type units if we're - using .gdb_index. */ - this_cu->length = get_cu_length (&cu->header); - - /* Establish the type offset that can be used to lookup the type. */ - sig_type->type_offset_in_section = - this_cu->sect_off + to_underlying (sig_type->type_offset_in_tu); - - this_cu->dwarf_version = cu->header.version; - } - else - { - info_ptr = read_and_check_comp_unit_head (dwarf2_per_objfile, - &cu->header, section, - abbrev_section, - info_ptr, - rcuh_kind::COMPILE); - - gdb_assert (this_cu->sect_off == cu->header.sect_off); - gdb_assert (this_cu->length == get_cu_length (&cu->header)); - this_cu->dwarf_version = cu->header.version; - } - } - - /* Skip dummy compilation units. */ - if (info_ptr >= begin_info_ptr + this_cu->length - || peek_abbrev_code (abfd, info_ptr) == 0) - return; - - /* If we don't have them yet, read the abbrevs for this compilation unit. - And if we need to read them now, make sure they're freed when we're - done (own the table through ABBREV_TABLE_HOLDER). */ - abbrev_table_up abbrev_table_holder; - if (abbrev_table != NULL) - gdb_assert (cu->header.abbrev_sect_off == abbrev_table->sect_off); - else - { - abbrev_table_holder - = abbrev_table_read_table (dwarf2_per_objfile, abbrev_section, - cu->header.abbrev_sect_off); - abbrev_table = abbrev_table_holder.get (); - } - - /* Read the top level CU/TU die. */ - init_cu_die_reader (&reader, cu, section, NULL, abbrev_table); - info_ptr = read_full_die (&reader, &comp_unit_die, info_ptr, &has_children); - - if (skip_partial && comp_unit_die->tag == DW_TAG_partial_unit) - return; - - /* If we are in a DWO stub, process it and then read in the "real" CU/TU - from the DWO file. read_cutu_die_from_dwo will allocate the abbreviation - table from the DWO file and pass the ownership over to us. It will be - referenced from READER, so we must make sure to free it after we're done - with READER. - - Note that if USE_EXISTING_OK != 0, and THIS_CU->cu already contains a - DWO CU, that this test will fail (the attribute will not be present). */ - const char *dwo_name = dwarf2_dwo_name (comp_unit_die, cu); - abbrev_table_up dwo_abbrev_table; - if (dwo_name != nullptr) - { - struct dwo_unit *dwo_unit; - struct die_info *dwo_comp_unit_die; - - if (has_children) - { - complaint (_("compilation unit with DW_AT_GNU_dwo_name" - " has children (offset %s) [in module %s]"), - sect_offset_str (this_cu->sect_off), - bfd_get_filename (abfd)); - } - dwo_unit = lookup_dwo_unit (this_cu, comp_unit_die); - if (dwo_unit != NULL) - { - if (read_cutu_die_from_dwo (this_cu, dwo_unit, - comp_unit_die, NULL, - &reader, &info_ptr, - &dwo_comp_unit_die, &has_children, - &dwo_abbrev_table) == 0) - { - /* Dummy die. */ - return; - } - comp_unit_die = dwo_comp_unit_die; - } - else - { - /* Yikes, we couldn't find the rest of the DIE, we only have - the stub. A complaint has already been logged. There's - not much more we can do except pass on the stub DIE to - die_reader_func. We don't want to throw an error on bad - debug info. */ - } - } - - /* All of the above is setup for this call. Yikes. */ - die_reader_func (&reader, info_ptr, comp_unit_die, has_children, data); - - /* Done, clean up. */ - if (new_cu != NULL && keep) - { - /* Link this CU into read_in_chain. */ - this_cu->cu->read_in_chain = dwarf2_per_objfile->read_in_chain; - dwarf2_per_objfile->read_in_chain = this_cu; - /* The chain owns it now. */ - new_cu.release (); - } -} - -/* Read CU/TU THIS_CU but do not follow DW_AT_GNU_dwo_name if present. - DWO_FILE, if non-NULL, is the DWO file to read (the caller is assumed - to have already done the lookup to find the DWO file). - - The caller is required to fill in THIS_CU->section, THIS_CU->offset, and - THIS_CU->is_debug_types, but nothing else. - - We fill in THIS_CU->length. - - WARNING: If THIS_CU is a "dummy CU" (used as filler by the incremental - linker) then DIE_READER_FUNC will not get called. - - THIS_CU->cu is always freed when done. - This is done in order to not leave THIS_CU->cu in a state where we have - to care whether it refers to the "main" CU or the DWO CU. */ - -static void -init_cutu_and_read_dies_no_follow (struct dwarf2_per_cu_data *this_cu, - struct dwo_file *dwo_file, - die_reader_func_ftype *die_reader_func, - void *data) -{ - struct dwarf2_per_objfile *dwarf2_per_objfile = this_cu->dwarf2_per_objfile; - struct objfile *objfile = dwarf2_per_objfile->objfile; - struct dwarf2_section_info *section = this_cu->section; - bfd *abfd = get_section_bfd_owner (section); - struct dwarf2_section_info *abbrev_section; - const gdb_byte *begin_info_ptr, *info_ptr; - struct die_reader_specs reader; - struct die_info *comp_unit_die; - int has_children; - - if (dwarf_die_debug) - fprintf_unfiltered (gdb_stdlog, "Reading %s unit at offset %s\n", - this_cu->is_debug_types ? "type" : "comp", - sect_offset_str (this_cu->sect_off)); - - gdb_assert (this_cu->cu == NULL); - - abbrev_section = (dwo_file != NULL - ? &dwo_file->sections.abbrev - : get_abbrev_section_for_cu (this_cu)); - - /* This is cheap if the section is already read in. */ - dwarf2_read_section (objfile, section); - - struct dwarf2_cu cu (this_cu); - - begin_info_ptr = info_ptr = section->buffer + to_underlying (this_cu->sect_off); - info_ptr = read_and_check_comp_unit_head (dwarf2_per_objfile, - &cu.header, section, - abbrev_section, info_ptr, - (this_cu->is_debug_types - ? rcuh_kind::TYPE - : rcuh_kind::COMPILE)); - - this_cu->length = get_cu_length (&cu.header); - - /* Skip dummy compilation units. */ - if (info_ptr >= begin_info_ptr + this_cu->length - || peek_abbrev_code (abfd, info_ptr) == 0) - return; - - abbrev_table_up abbrev_table - = abbrev_table_read_table (dwarf2_per_objfile, abbrev_section, - cu.header.abbrev_sect_off); - - init_cu_die_reader (&reader, &cu, section, dwo_file, abbrev_table.get ()); - info_ptr = read_full_die (&reader, &comp_unit_die, info_ptr, &has_children); - - die_reader_func (&reader, info_ptr, comp_unit_die, has_children, data); -} - -/* Read a CU/TU, except that this does not look for DW_AT_GNU_dwo_name and - does not lookup the specified DWO file. - This cannot be used to read DWO files. - - THIS_CU->cu is always freed when done. - This is done in order to not leave THIS_CU->cu in a state where we have - to care whether it refers to the "main" CU or the DWO CU. - We can revisit this if the data shows there's a performance issue. */ - -static void -init_cutu_and_read_dies_simple (struct dwarf2_per_cu_data *this_cu, - die_reader_func_ftype *die_reader_func, - void *data) -{ - init_cutu_and_read_dies_no_follow (this_cu, NULL, die_reader_func, data); -} - -/* Type Unit Groups. - - Type Unit Groups are a way to collapse the set of all TUs (type units) into - a more manageable set. The grouping is done by DW_AT_stmt_list entry - so that all types coming from the same compilation (.o file) are grouped - together. A future step could be to put the types in the same symtab as - the CU the types ultimately came from. */ - -static hashval_t -hash_type_unit_group (const void *item) -{ - const struct type_unit_group *tu_group - = (const struct type_unit_group *) item; - - return hash_stmt_list_entry (&tu_group->hash); -} - -static int -eq_type_unit_group (const void *item_lhs, const void *item_rhs) -{ - const struct type_unit_group *lhs = (const struct type_unit_group *) item_lhs; - const struct type_unit_group *rhs = (const struct type_unit_group *) item_rhs; - - return eq_stmt_list_entry (&lhs->hash, &rhs->hash); -} - -/* Allocate a hash table for type unit groups. */ - -static htab_t -allocate_type_unit_groups_table (struct objfile *objfile) -{ - return htab_create_alloc_ex (3, - hash_type_unit_group, - eq_type_unit_group, - NULL, - &objfile->objfile_obstack, - hashtab_obstack_allocate, - dummy_obstack_deallocate); -} - -/* Type units that don't have DW_AT_stmt_list are grouped into their own - partial symtabs. We combine several TUs per psymtab to not let the size - of any one psymtab grow too big. */ -#define NO_STMT_LIST_TYPE_UNIT_PSYMTAB (1 << 31) -#define NO_STMT_LIST_TYPE_UNIT_PSYMTAB_SIZE 10 - -/* Helper routine for get_type_unit_group. - Create the type_unit_group object used to hold one or more TUs. */ - -static struct type_unit_group * -create_type_unit_group (struct dwarf2_cu *cu, sect_offset line_offset_struct) -{ - struct dwarf2_per_objfile *dwarf2_per_objfile - = cu->per_cu->dwarf2_per_objfile; - struct objfile *objfile = dwarf2_per_objfile->objfile; - struct dwarf2_per_cu_data *per_cu; - struct type_unit_group *tu_group; - - tu_group = OBSTACK_ZALLOC (&objfile->objfile_obstack, - struct type_unit_group); - per_cu = &tu_group->per_cu; - per_cu->dwarf2_per_objfile = dwarf2_per_objfile; - - if (dwarf2_per_objfile->using_index) - { - per_cu->v.quick = OBSTACK_ZALLOC (&objfile->objfile_obstack, - struct dwarf2_per_cu_quick_data); - } - else - { - unsigned int line_offset = to_underlying (line_offset_struct); - struct partial_symtab *pst; - std::string name; - - /* Give the symtab a useful name for debug purposes. */ - if ((line_offset & NO_STMT_LIST_TYPE_UNIT_PSYMTAB) != 0) - name = string_printf ("<type_units_%d>", - (line_offset & ~NO_STMT_LIST_TYPE_UNIT_PSYMTAB)); - else - name = string_printf ("<type_units_at_0x%x>", line_offset); - - pst = create_partial_symtab (per_cu, name.c_str ()); - pst->anonymous = 1; - } - - tu_group->hash.dwo_unit = cu->dwo_unit; - tu_group->hash.line_sect_off = line_offset_struct; - - return tu_group; -} - -/* Look up the type_unit_group for type unit CU, and create it if necessary. - STMT_LIST is a DW_AT_stmt_list attribute. */ - -static struct type_unit_group * -get_type_unit_group (struct dwarf2_cu *cu, const struct attribute *stmt_list) -{ - struct dwarf2_per_objfile *dwarf2_per_objfile - = cu->per_cu->dwarf2_per_objfile; - struct tu_stats *tu_stats = &dwarf2_per_objfile->tu_stats; - struct type_unit_group *tu_group; - void **slot; - unsigned int line_offset; - struct type_unit_group type_unit_group_for_lookup; - - if (dwarf2_per_objfile->type_unit_groups == NULL) - { - dwarf2_per_objfile->type_unit_groups = - allocate_type_unit_groups_table (dwarf2_per_objfile->objfile); - } - - /* Do we need to create a new group, or can we use an existing one? */ - - if (stmt_list) - { - line_offset = DW_UNSND (stmt_list); - ++tu_stats->nr_symtab_sharers; - } - else - { - /* Ugh, no stmt_list. Rare, but we have to handle it. - We can do various things here like create one group per TU or - spread them over multiple groups to split up the expansion work. - To avoid worst case scenarios (too many groups or too large groups) - we, umm, group them in bunches. */ - line_offset = (NO_STMT_LIST_TYPE_UNIT_PSYMTAB - | (tu_stats->nr_stmt_less_type_units - / NO_STMT_LIST_TYPE_UNIT_PSYMTAB_SIZE)); - ++tu_stats->nr_stmt_less_type_units; - } - - type_unit_group_for_lookup.hash.dwo_unit = cu->dwo_unit; - type_unit_group_for_lookup.hash.line_sect_off = (sect_offset) line_offset; - slot = htab_find_slot (dwarf2_per_objfile->type_unit_groups, - &type_unit_group_for_lookup, INSERT); - if (*slot != NULL) - { - tu_group = (struct type_unit_group *) *slot; - gdb_assert (tu_group != NULL); - } - else - { - sect_offset line_offset_struct = (sect_offset) line_offset; - tu_group = create_type_unit_group (cu, line_offset_struct); - *slot = tu_group; - ++tu_stats->nr_symtabs; - } - - return tu_group; -} - -/* Partial symbol tables. */ - -/* Create a psymtab named NAME and assign it to PER_CU. - - The caller must fill in the following details: - dirname, textlow, texthigh. */ - -static struct partial_symtab * -create_partial_symtab (struct dwarf2_per_cu_data *per_cu, const char *name) -{ - struct objfile *objfile = per_cu->dwarf2_per_objfile->objfile; - struct partial_symtab *pst; - - pst = start_psymtab_common (objfile, name, 0); - - pst->psymtabs_addrmap_supported = 1; - - /* This is the glue that links PST into GDB's symbol API. */ - pst->read_symtab_private = per_cu; - pst->read_symtab = dwarf2_read_symtab; - per_cu->v.psymtab = pst; - - return pst; -} - -/* The DATA object passed to process_psymtab_comp_unit_reader has this - type. */ - -struct process_psymtab_comp_unit_data -{ - /* True if we are reading a DW_TAG_partial_unit. */ - - int want_partial_unit; - - /* The "pretend" language that is used if the CU doesn't declare a - language. */ - - enum language pretend_language; -}; - -/* die_reader_func for process_psymtab_comp_unit. */ - -static void -process_psymtab_comp_unit_reader (const struct die_reader_specs *reader, - const gdb_byte *info_ptr, - struct die_info *comp_unit_die, - int has_children, - void *data) -{ - struct dwarf2_cu *cu = reader->cu; - struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile; - struct gdbarch *gdbarch = get_objfile_arch (objfile); - struct dwarf2_per_cu_data *per_cu = cu->per_cu; - CORE_ADDR baseaddr; - CORE_ADDR best_lowpc = 0, best_highpc = 0; - struct partial_symtab *pst; - enum pc_bounds_kind cu_bounds_kind; - const char *filename; - struct process_psymtab_comp_unit_data *info - = (struct process_psymtab_comp_unit_data *) data; - - if (comp_unit_die->tag == DW_TAG_partial_unit && !info->want_partial_unit) - return; - - gdb_assert (! per_cu->is_debug_types); - - prepare_one_comp_unit (cu, comp_unit_die, info->pretend_language); - - /* Allocate a new partial symbol table structure. */ - filename = dwarf2_string_attr (comp_unit_die, DW_AT_name, cu); - if (filename == NULL) - filename = ""; - - pst = create_partial_symtab (per_cu, filename); - - /* This must be done before calling dwarf2_build_include_psymtabs. */ - pst->dirname = dwarf2_string_attr (comp_unit_die, DW_AT_comp_dir, cu); - - baseaddr = ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile)); - - dwarf2_find_base_address (comp_unit_die, cu); - - /* Possibly set the default values of LOWPC and HIGHPC from - `DW_AT_ranges'. */ - cu_bounds_kind = dwarf2_get_pc_bounds (comp_unit_die, &best_lowpc, - &best_highpc, cu, pst); - if (cu_bounds_kind == PC_BOUNDS_HIGH_LOW && best_lowpc < best_highpc) - { - CORE_ADDR low - = (gdbarch_adjust_dwarf2_addr (gdbarch, best_lowpc + baseaddr) - - baseaddr); - CORE_ADDR high - = (gdbarch_adjust_dwarf2_addr (gdbarch, best_highpc + baseaddr) - - baseaddr - 1); - /* Store the contiguous range if it is not empty; it can be - empty for CUs with no code. */ - addrmap_set_empty (objfile->partial_symtabs->psymtabs_addrmap, - low, high, pst); - } - - /* Check if comp unit has_children. - If so, read the rest of the partial symbols from this comp unit. - If not, there's no more debug_info for this comp unit. */ - if (has_children) - { - struct partial_die_info *first_die; - CORE_ADDR lowpc, highpc; - - lowpc = ((CORE_ADDR) -1); - highpc = ((CORE_ADDR) 0); - - first_die = load_partial_dies (reader, info_ptr, 1); - - scan_partial_symbols (first_die, &lowpc, &highpc, - cu_bounds_kind <= PC_BOUNDS_INVALID, cu); - - /* If we didn't find a lowpc, set it to highpc to avoid - complaints from `maint check'. */ - if (lowpc == ((CORE_ADDR) -1)) - lowpc = highpc; - - /* If the compilation unit didn't have an explicit address range, - then use the information extracted from its child dies. */ - if (cu_bounds_kind <= PC_BOUNDS_INVALID) - { - best_lowpc = lowpc; - best_highpc = highpc; - } - } - pst->set_text_low (gdbarch_adjust_dwarf2_addr (gdbarch, - best_lowpc + baseaddr) - - baseaddr); - pst->set_text_high (gdbarch_adjust_dwarf2_addr (gdbarch, - best_highpc + baseaddr) - - baseaddr); - - end_psymtab_common (objfile, pst); - - if (!cu->per_cu->imported_symtabs_empty ()) - { - int i; - int len = cu->per_cu->imported_symtabs_size (); - - /* Fill in 'dependencies' here; we fill in 'users' in a - post-pass. */ - pst->number_of_dependencies = len; - pst->dependencies - = objfile->partial_symtabs->allocate_dependencies (len); - for (i = 0; i < len; ++i) - { - pst->dependencies[i] - = cu->per_cu->imported_symtabs->at (i)->v.psymtab; - } - - cu->per_cu->imported_symtabs_free (); - } - - /* Get the list of files included in the current compilation unit, - and build a psymtab for each of them. */ - dwarf2_build_include_psymtabs (cu, comp_unit_die, pst); - - if (dwarf_read_debug) - fprintf_unfiltered (gdb_stdlog, - "Psymtab for %s unit @%s: %s - %s" - ", %d global, %d static syms\n", - per_cu->is_debug_types ? "type" : "comp", - sect_offset_str (per_cu->sect_off), - paddress (gdbarch, pst->text_low (objfile)), - paddress (gdbarch, pst->text_high (objfile)), - pst->n_global_syms, pst->n_static_syms); -} - -/* Subroutine of dwarf2_build_psymtabs_hard to simplify it. - Process compilation unit THIS_CU for a psymtab. */ - -static void -process_psymtab_comp_unit (struct dwarf2_per_cu_data *this_cu, - int want_partial_unit, - enum language pretend_language) -{ - /* If this compilation unit was already read in, free the - cached copy in order to read it in again. This is - necessary because we skipped some symbols when we first - read in the compilation unit (see load_partial_dies). - This problem could be avoided, but the benefit is unclear. */ - if (this_cu->cu != NULL) - free_one_cached_comp_unit (this_cu); - - if (this_cu->is_debug_types) - init_cutu_and_read_dies (this_cu, NULL, 0, 0, false, - build_type_psymtabs_reader, NULL); - else - { - process_psymtab_comp_unit_data info; - info.want_partial_unit = want_partial_unit; - info.pretend_language = pretend_language; - init_cutu_and_read_dies (this_cu, NULL, 0, 0, false, - process_psymtab_comp_unit_reader, &info); - } - - /* Age out any secondary CUs. */ - age_cached_comp_units (this_cu->dwarf2_per_objfile); -} - -/* Reader function for build_type_psymtabs. */ - -static void -build_type_psymtabs_reader (const struct die_reader_specs *reader, - const gdb_byte *info_ptr, - struct die_info *type_unit_die, - int has_children, - void *data) -{ - struct dwarf2_per_objfile *dwarf2_per_objfile - = reader->cu->per_cu->dwarf2_per_objfile; - struct objfile *objfile = dwarf2_per_objfile->objfile; - struct dwarf2_cu *cu = reader->cu; - struct dwarf2_per_cu_data *per_cu = cu->per_cu; - struct signatured_type *sig_type; - struct type_unit_group *tu_group; - struct attribute *attr; - struct partial_die_info *first_die; - CORE_ADDR lowpc, highpc; - struct partial_symtab *pst; - - gdb_assert (data == NULL); - gdb_assert (per_cu->is_debug_types); - sig_type = (struct signatured_type *) per_cu; - - if (! has_children) - return; - - attr = dwarf2_attr_no_follow (type_unit_die, DW_AT_stmt_list); - tu_group = get_type_unit_group (cu, attr); - - if (tu_group->tus == nullptr) - tu_group->tus = new std::vector<signatured_type *>; - tu_group->tus->push_back (sig_type); - - prepare_one_comp_unit (cu, type_unit_die, language_minimal); - pst = create_partial_symtab (per_cu, ""); - pst->anonymous = 1; - - first_die = load_partial_dies (reader, info_ptr, 1); - - lowpc = (CORE_ADDR) -1; - highpc = (CORE_ADDR) 0; - scan_partial_symbols (first_die, &lowpc, &highpc, 0, cu); - - end_psymtab_common (objfile, pst); -} - -/* Struct used to sort TUs by their abbreviation table offset. */ - -struct tu_abbrev_offset -{ - tu_abbrev_offset (signatured_type *sig_type_, sect_offset abbrev_offset_) - : sig_type (sig_type_), abbrev_offset (abbrev_offset_) - {} - - signatured_type *sig_type; - sect_offset abbrev_offset; -}; - -/* Helper routine for build_type_psymtabs_1, passed to std::sort. */ - -static bool -sort_tu_by_abbrev_offset (const struct tu_abbrev_offset &a, - const struct tu_abbrev_offset &b) -{ - return a.abbrev_offset < b.abbrev_offset; -} - -/* Efficiently read all the type units. - This does the bulk of the work for build_type_psymtabs. - - The efficiency is because we sort TUs by the abbrev table they use and - only read each abbrev table once. In one program there are 200K TUs - sharing 8K abbrev tables. - - The main purpose of this function is to support building the - dwarf2_per_objfile->type_unit_groups table. - TUs typically share the DW_AT_stmt_list of the CU they came from, so we - can collapse the search space by grouping them by stmt_list. - The savings can be significant, in the same program from above the 200K TUs - share 8K stmt_list tables. - - FUNC is expected to call get_type_unit_group, which will create the - struct type_unit_group if necessary and add it to - dwarf2_per_objfile->type_unit_groups. */ - -static void -build_type_psymtabs_1 (struct dwarf2_per_objfile *dwarf2_per_objfile) -{ - struct tu_stats *tu_stats = &dwarf2_per_objfile->tu_stats; - abbrev_table_up abbrev_table; - sect_offset abbrev_offset; - - /* It's up to the caller to not call us multiple times. */ - gdb_assert (dwarf2_per_objfile->type_unit_groups == NULL); - - if (dwarf2_per_objfile->all_type_units.empty ()) - return; - - /* TUs typically share abbrev tables, and there can be way more TUs than - abbrev tables. Sort by abbrev table to reduce the number of times we - read each abbrev table in. - Alternatives are to punt or to maintain a cache of abbrev tables. - This is simpler and efficient enough for now. - - Later we group TUs by their DW_AT_stmt_list value (as this defines the - symtab to use). Typically TUs with the same abbrev offset have the same - stmt_list value too so in practice this should work well. - - The basic algorithm here is: - - sort TUs by abbrev table - for each TU with same abbrev table: - read abbrev table if first user - read TU top level DIE - [IWBN if DWO skeletons had DW_AT_stmt_list] - call FUNC */ - - if (dwarf_read_debug) - fprintf_unfiltered (gdb_stdlog, "Building type unit groups ...\n"); - - /* Sort in a separate table to maintain the order of all_type_units - for .gdb_index: TU indices directly index all_type_units. */ - std::vector<tu_abbrev_offset> sorted_by_abbrev; - sorted_by_abbrev.reserve (dwarf2_per_objfile->all_type_units.size ()); - - for (signatured_type *sig_type : dwarf2_per_objfile->all_type_units) - sorted_by_abbrev.emplace_back - (sig_type, read_abbrev_offset (dwarf2_per_objfile, - sig_type->per_cu.section, - sig_type->per_cu.sect_off)); - - std::sort (sorted_by_abbrev.begin (), sorted_by_abbrev.end (), - sort_tu_by_abbrev_offset); - - abbrev_offset = (sect_offset) ~(unsigned) 0; - - for (const tu_abbrev_offset &tu : sorted_by_abbrev) - { - /* Switch to the next abbrev table if necessary. */ - if (abbrev_table == NULL - || tu.abbrev_offset != abbrev_offset) - { - abbrev_offset = tu.abbrev_offset; - abbrev_table = - abbrev_table_read_table (dwarf2_per_objfile, - &dwarf2_per_objfile->abbrev, - abbrev_offset); - ++tu_stats->nr_uniq_abbrev_tables; - } - - init_cutu_and_read_dies (&tu.sig_type->per_cu, abbrev_table.get (), - 0, 0, false, build_type_psymtabs_reader, NULL); - } -} - -/* Print collected type unit statistics. */ - -static void -print_tu_stats (struct dwarf2_per_objfile *dwarf2_per_objfile) -{ - struct tu_stats *tu_stats = &dwarf2_per_objfile->tu_stats; - - fprintf_unfiltered (gdb_stdlog, "Type unit statistics:\n"); - fprintf_unfiltered (gdb_stdlog, " %zu TUs\n", - dwarf2_per_objfile->all_type_units.size ()); - fprintf_unfiltered (gdb_stdlog, " %d uniq abbrev tables\n", - tu_stats->nr_uniq_abbrev_tables); - fprintf_unfiltered (gdb_stdlog, " %d symtabs from stmt_list entries\n", - tu_stats->nr_symtabs); - fprintf_unfiltered (gdb_stdlog, " %d symtab sharers\n", - tu_stats->nr_symtab_sharers); - fprintf_unfiltered (gdb_stdlog, " %d type units without a stmt_list\n", - tu_stats->nr_stmt_less_type_units); - fprintf_unfiltered (gdb_stdlog, " %d all_type_units reallocs\n", - tu_stats->nr_all_type_units_reallocs); -} - -/* Traversal function for build_type_psymtabs. */ - -static int -build_type_psymtab_dependencies (void **slot, void *info) -{ - struct dwarf2_per_objfile *dwarf2_per_objfile - = (struct dwarf2_per_objfile *) info; - struct objfile *objfile = dwarf2_per_objfile->objfile; - struct type_unit_group *tu_group = (struct type_unit_group *) *slot; - struct dwarf2_per_cu_data *per_cu = &tu_group->per_cu; - struct partial_symtab *pst = per_cu->v.psymtab; - int len = (tu_group->tus == nullptr) ? 0 : tu_group->tus->size (); - int i; - - gdb_assert (len > 0); - gdb_assert (IS_TYPE_UNIT_GROUP (per_cu)); - - pst->number_of_dependencies = len; - pst->dependencies = objfile->partial_symtabs->allocate_dependencies (len); - for (i = 0; i < len; ++i) - { - struct signatured_type *iter = tu_group->tus->at (i); - gdb_assert (iter->per_cu.is_debug_types); - pst->dependencies[i] = iter->per_cu.v.psymtab; - iter->type_unit_group = tu_group; - } - - delete tu_group->tus; - tu_group->tus = nullptr; - - return 1; -} - -/* Subroutine of dwarf2_build_psymtabs_hard to simplify it. - Build partial symbol tables for the .debug_types comp-units. */ - -static void -build_type_psymtabs (struct dwarf2_per_objfile *dwarf2_per_objfile) -{ - if (! create_all_type_units (dwarf2_per_objfile)) - return; - - build_type_psymtabs_1 (dwarf2_per_objfile); -} - -/* Traversal function for process_skeletonless_type_unit. - Read a TU in a DWO file and build partial symbols for it. */ - -static int -process_skeletonless_type_unit (void **slot, void *info) -{ - struct dwo_unit *dwo_unit = (struct dwo_unit *) *slot; - struct dwarf2_per_objfile *dwarf2_per_objfile - = (struct dwarf2_per_objfile *) info; - struct signatured_type find_entry, *entry; - - /* If this TU doesn't exist in the global table, add it and read it in. */ - - if (dwarf2_per_objfile->signatured_types == NULL) - { - dwarf2_per_objfile->signatured_types - = allocate_signatured_type_table (dwarf2_per_objfile->objfile); - } - - find_entry.signature = dwo_unit->signature; - slot = htab_find_slot (dwarf2_per_objfile->signatured_types, &find_entry, - INSERT); - /* If we've already seen this type there's nothing to do. What's happening - is we're doing our own version of comdat-folding here. */ - if (*slot != NULL) - return 1; - - /* This does the job that create_all_type_units would have done for - this TU. */ - entry = add_type_unit (dwarf2_per_objfile, dwo_unit->signature, slot); - fill_in_sig_entry_from_dwo_entry (dwarf2_per_objfile, entry, dwo_unit); - *slot = entry; - - /* This does the job that build_type_psymtabs_1 would have done. */ - init_cutu_and_read_dies (&entry->per_cu, NULL, 0, 0, false, - build_type_psymtabs_reader, NULL); - - return 1; -} - -/* Traversal function for process_skeletonless_type_units. */ - -static int -process_dwo_file_for_skeletonless_type_units (void **slot, void *info) -{ - struct dwo_file *dwo_file = (struct dwo_file *) *slot; - - if (dwo_file->tus != NULL) - { - htab_traverse_noresize (dwo_file->tus, - process_skeletonless_type_unit, info); - } - - return 1; -} - -/* Scan all TUs of DWO files, verifying we've processed them. - This is needed in case a TU was emitted without its skeleton. - Note: This can't be done until we know what all the DWO files are. */ - -static void -process_skeletonless_type_units (struct dwarf2_per_objfile *dwarf2_per_objfile) -{ - /* Skeletonless TUs in DWP files without .gdb_index is not supported yet. */ - if (get_dwp_file (dwarf2_per_objfile) == NULL - && dwarf2_per_objfile->dwo_files != NULL) - { - htab_traverse_noresize (dwarf2_per_objfile->dwo_files.get (), - process_dwo_file_for_skeletonless_type_units, - dwarf2_per_objfile); - } -} - -/* Compute the 'user' field for each psymtab in DWARF2_PER_OBJFILE. */ - -static void -set_partial_user (struct dwarf2_per_objfile *dwarf2_per_objfile) -{ - for (dwarf2_per_cu_data *per_cu : dwarf2_per_objfile->all_comp_units) - { - struct partial_symtab *pst = per_cu->v.psymtab; - - if (pst == NULL) - continue; - - for (int j = 0; j < pst->number_of_dependencies; ++j) - { - /* Set the 'user' field only if it is not already set. */ - if (pst->dependencies[j]->user == NULL) - pst->dependencies[j]->user = pst; - } - } -} - -/* Build the partial symbol table by doing a quick pass through the - .debug_info and .debug_abbrev sections. */ - -static void -dwarf2_build_psymtabs_hard (struct dwarf2_per_objfile *dwarf2_per_objfile) -{ - struct objfile *objfile = dwarf2_per_objfile->objfile; - - if (dwarf_read_debug) - { - fprintf_unfiltered (gdb_stdlog, "Building psymtabs of objfile %s ...\n", - objfile_name (objfile)); - } - - dwarf2_per_objfile->reading_partial_symbols = 1; - - dwarf2_read_section (objfile, &dwarf2_per_objfile->info); - - /* Any cached compilation units will be linked by the per-objfile - read_in_chain. Make sure to free them when we're done. */ - free_cached_comp_units freer (dwarf2_per_objfile); - - build_type_psymtabs (dwarf2_per_objfile); - - create_all_comp_units (dwarf2_per_objfile); - - /* Create a temporary address map on a temporary obstack. We later - copy this to the final obstack. */ - auto_obstack temp_obstack; - - scoped_restore save_psymtabs_addrmap - = make_scoped_restore (&objfile->partial_symtabs->psymtabs_addrmap, - addrmap_create_mutable (&temp_obstack)); - - for (dwarf2_per_cu_data *per_cu : dwarf2_per_objfile->all_comp_units) - process_psymtab_comp_unit (per_cu, 0, language_minimal); - - /* This has to wait until we read the CUs, we need the list of DWOs. */ - process_skeletonless_type_units (dwarf2_per_objfile); - - /* Now that all TUs have been processed we can fill in the dependencies. */ - if (dwarf2_per_objfile->type_unit_groups != NULL) - { - htab_traverse_noresize (dwarf2_per_objfile->type_unit_groups, - build_type_psymtab_dependencies, dwarf2_per_objfile); - } - - if (dwarf_read_debug) - print_tu_stats (dwarf2_per_objfile); - - set_partial_user (dwarf2_per_objfile); - - objfile->partial_symtabs->psymtabs_addrmap - = addrmap_create_fixed (objfile->partial_symtabs->psymtabs_addrmap, - objfile->partial_symtabs->obstack ()); - /* At this point we want to keep the address map. */ - save_psymtabs_addrmap.release (); - - if (dwarf_read_debug) - fprintf_unfiltered (gdb_stdlog, "Done building psymtabs of %s\n", - objfile_name (objfile)); -} - -/* die_reader_func for load_partial_comp_unit. */ - -static void -load_partial_comp_unit_reader (const struct die_reader_specs *reader, - const gdb_byte *info_ptr, - struct die_info *comp_unit_die, - int has_children, - void *data) -{ - struct dwarf2_cu *cu = reader->cu; - - prepare_one_comp_unit (cu, comp_unit_die, language_minimal); - - /* Check if comp unit has_children. - If so, read the rest of the partial symbols from this comp unit. - If not, there's no more debug_info for this comp unit. */ - if (has_children) - load_partial_dies (reader, info_ptr, 0); -} - -/* Load the partial DIEs for a secondary CU into memory. - This is also used when rereading a primary CU with load_all_dies. */ - -static void -load_partial_comp_unit (struct dwarf2_per_cu_data *this_cu) -{ - init_cutu_and_read_dies (this_cu, NULL, 1, 1, false, - load_partial_comp_unit_reader, NULL); -} - -static void -read_comp_units_from_section (struct dwarf2_per_objfile *dwarf2_per_objfile, - struct dwarf2_section_info *section, - struct dwarf2_section_info *abbrev_section, - unsigned int is_dwz) -{ - const gdb_byte *info_ptr; - struct objfile *objfile = dwarf2_per_objfile->objfile; - - if (dwarf_read_debug) - fprintf_unfiltered (gdb_stdlog, "Reading %s for %s\n", - get_section_name (section), - get_section_file_name (section)); - - dwarf2_read_section (objfile, section); - - info_ptr = section->buffer; - - while (info_ptr < section->buffer + section->size) - { - struct dwarf2_per_cu_data *this_cu; - - sect_offset sect_off = (sect_offset) (info_ptr - section->buffer); - - comp_unit_head cu_header; - read_and_check_comp_unit_head (dwarf2_per_objfile, &cu_header, section, - abbrev_section, info_ptr, - rcuh_kind::COMPILE); - - /* Save the compilation unit for later lookup. */ - if (cu_header.unit_type != DW_UT_type) - { - this_cu = XOBNEW (&objfile->objfile_obstack, - struct dwarf2_per_cu_data); - memset (this_cu, 0, sizeof (*this_cu)); - } - else - { - auto sig_type = XOBNEW (&objfile->objfile_obstack, - struct signatured_type); - memset (sig_type, 0, sizeof (*sig_type)); - sig_type->signature = cu_header.signature; - sig_type->type_offset_in_tu = cu_header.type_cu_offset_in_tu; - this_cu = &sig_type->per_cu; - } - this_cu->is_debug_types = (cu_header.unit_type == DW_UT_type); - this_cu->sect_off = sect_off; - this_cu->length = cu_header.length + cu_header.initial_length_size; - this_cu->is_dwz = is_dwz; - this_cu->dwarf2_per_objfile = dwarf2_per_objfile; - this_cu->section = section; - - dwarf2_per_objfile->all_comp_units.push_back (this_cu); - - info_ptr = info_ptr + this_cu->length; - } -} - -/* Create a list of all compilation units in OBJFILE. - This is only done for -readnow and building partial symtabs. */ - -static void -create_all_comp_units (struct dwarf2_per_objfile *dwarf2_per_objfile) -{ - gdb_assert (dwarf2_per_objfile->all_comp_units.empty ()); - read_comp_units_from_section (dwarf2_per_objfile, &dwarf2_per_objfile->info, - &dwarf2_per_objfile->abbrev, 0); - - dwz_file *dwz = dwarf2_get_dwz_file (dwarf2_per_objfile); - if (dwz != NULL) - read_comp_units_from_section (dwarf2_per_objfile, &dwz->info, &dwz->abbrev, - 1); -} - -/* Process all loaded DIEs for compilation unit CU, starting at - FIRST_DIE. The caller should pass SET_ADDRMAP == 1 if the compilation - unit DIE did not have PC info (DW_AT_low_pc and DW_AT_high_pc, or - DW_AT_ranges). See the comments of add_partial_subprogram on how - SET_ADDRMAP is used and how *LOWPC and *HIGHPC are updated. */ - -static void -scan_partial_symbols (struct partial_die_info *first_die, CORE_ADDR *lowpc, - CORE_ADDR *highpc, int set_addrmap, - struct dwarf2_cu *cu) -{ - struct partial_die_info *pdi; - - /* Now, march along the PDI's, descending into ones which have - interesting children but skipping the children of the other ones, - until we reach the end of the compilation unit. */ - - pdi = first_die; - - while (pdi != NULL) - { - pdi->fixup (cu); - - /* Anonymous namespaces or modules have no name but have interesting - children, so we need to look at them. Ditto for anonymous - enums. */ - - if (pdi->name != NULL || pdi->tag == DW_TAG_namespace - || pdi->tag == DW_TAG_module || pdi->tag == DW_TAG_enumeration_type - || pdi->tag == DW_TAG_imported_unit - || pdi->tag == DW_TAG_inlined_subroutine) - { - switch (pdi->tag) - { - case DW_TAG_subprogram: - case DW_TAG_inlined_subroutine: - add_partial_subprogram (pdi, lowpc, highpc, set_addrmap, cu); - break; - case DW_TAG_constant: - case DW_TAG_variable: - case DW_TAG_typedef: - case DW_TAG_union_type: - if (!pdi->is_declaration) - { - add_partial_symbol (pdi, cu); - } - break; - case DW_TAG_class_type: - case DW_TAG_interface_type: - case DW_TAG_structure_type: - if (!pdi->is_declaration) - { - add_partial_symbol (pdi, cu); - } - if ((cu->language == language_rust - || cu->language == language_cplus) && pdi->has_children) - scan_partial_symbols (pdi->die_child, lowpc, highpc, - set_addrmap, cu); - break; - case DW_TAG_enumeration_type: - if (!pdi->is_declaration) - add_partial_enumeration (pdi, cu); - break; - case DW_TAG_base_type: - case DW_TAG_subrange_type: - /* File scope base type definitions are added to the partial - symbol table. */ - add_partial_symbol (pdi, cu); - break; - case DW_TAG_namespace: - add_partial_namespace (pdi, lowpc, highpc, set_addrmap, cu); - break; - case DW_TAG_module: - if (!pdi->is_declaration) - add_partial_module (pdi, lowpc, highpc, set_addrmap, cu); - break; - case DW_TAG_imported_unit: - { - struct dwarf2_per_cu_data *per_cu; - - /* For now we don't handle imported units in type units. */ - if (cu->per_cu->is_debug_types) - { - error (_("Dwarf Error: DW_TAG_imported_unit is not" - " supported in type units [in module %s]"), - objfile_name (cu->per_cu->dwarf2_per_objfile->objfile)); - } - - per_cu = dwarf2_find_containing_comp_unit - (pdi->d.sect_off, pdi->is_dwz, - cu->per_cu->dwarf2_per_objfile); - - /* Go read the partial unit, if needed. */ - if (per_cu->v.psymtab == NULL) - process_psymtab_comp_unit (per_cu, 1, cu->language); - - cu->per_cu->imported_symtabs_push (per_cu); - } - break; - case DW_TAG_imported_declaration: - add_partial_symbol (pdi, cu); - break; - default: - break; - } - } - - /* If the die has a sibling, skip to the sibling. */ - - pdi = pdi->die_sibling; - } -} - -/* Functions used to compute the fully scoped name of a partial DIE. - - Normally, this is simple. For C++, the parent DIE's fully scoped - name is concatenated with "::" and the partial DIE's name. - Enumerators are an exception; they use the scope of their parent - enumeration type, i.e. the name of the enumeration type is not - prepended to the enumerator. - - There are two complexities. One is DW_AT_specification; in this - case "parent" means the parent of the target of the specification, - instead of the direct parent of the DIE. The other is compilers - which do not emit DW_TAG_namespace; in this case we try to guess - the fully qualified name of structure types from their members' - linkage names. This must be done using the DIE's children rather - than the children of any DW_AT_specification target. We only need - to do this for structures at the top level, i.e. if the target of - any DW_AT_specification (if any; otherwise the DIE itself) does not - have a parent. */ - -/* Compute the scope prefix associated with PDI's parent, in - compilation unit CU. The result will be allocated on CU's - comp_unit_obstack, or a copy of the already allocated PDI->NAME - field. NULL is returned if no prefix is necessary. */ -static const char * -partial_die_parent_scope (struct partial_die_info *pdi, - struct dwarf2_cu *cu) -{ - const char *grandparent_scope; - struct partial_die_info *parent, *real_pdi; - - /* We need to look at our parent DIE; if we have a DW_AT_specification, - then this means the parent of the specification DIE. */ - - real_pdi = pdi; - while (real_pdi->has_specification) - { - auto res = find_partial_die (real_pdi->spec_offset, - real_pdi->spec_is_dwz, cu); - real_pdi = res.pdi; - cu = res.cu; - } - - parent = real_pdi->die_parent; - if (parent == NULL) - return NULL; - - if (parent->scope_set) - return parent->scope; - - parent->fixup (cu); - - grandparent_scope = partial_die_parent_scope (parent, cu); - - /* GCC 4.0 and 4.1 had a bug (PR c++/28460) where they generated bogus - DW_TAG_namespace DIEs with a name of "::" for the global namespace. - Work around this problem here. */ - if (cu->language == language_cplus - && parent->tag == DW_TAG_namespace - && strcmp (parent->name, "::") == 0 - && grandparent_scope == NULL) - { - parent->scope = NULL; - parent->scope_set = 1; - return NULL; - } - - /* Nested subroutines in Fortran get a prefix. */ - if (pdi->tag == DW_TAG_enumerator) - /* Enumerators should not get the name of the enumeration as a prefix. */ - parent->scope = grandparent_scope; - else if (parent->tag == DW_TAG_namespace - || parent->tag == DW_TAG_module - || parent->tag == DW_TAG_structure_type - || parent->tag == DW_TAG_class_type - || parent->tag == DW_TAG_interface_type - || parent->tag == DW_TAG_union_type - || parent->tag == DW_TAG_enumeration_type - || (cu->language == language_fortran - && parent->tag == DW_TAG_subprogram - && pdi->tag == DW_TAG_subprogram)) - { - if (grandparent_scope == NULL) - parent->scope = parent->name; - else - parent->scope = typename_concat (&cu->comp_unit_obstack, - grandparent_scope, - parent->name, 0, cu); - } - else - { - /* FIXME drow/2004-04-01: What should we be doing with - function-local names? For partial symbols, we should probably be - ignoring them. */ - complaint (_("unhandled containing DIE tag %s for DIE at %s"), - dwarf_tag_name (parent->tag), - sect_offset_str (pdi->sect_off)); - parent->scope = grandparent_scope; - } - - parent->scope_set = 1; - return parent->scope; -} - -/* Return the fully scoped name associated with PDI, from compilation unit - CU. The result will be allocated with malloc. */ - -static char * -partial_die_full_name (struct partial_die_info *pdi, - struct dwarf2_cu *cu) -{ - const char *parent_scope; - - /* If this is a template instantiation, we can not work out the - template arguments from partial DIEs. So, unfortunately, we have - to go through the full DIEs. At least any work we do building - types here will be reused if full symbols are loaded later. */ - if (pdi->has_template_arguments) - { - pdi->fixup (cu); - - if (pdi->name != NULL && strchr (pdi->name, '<') == NULL) - { - struct die_info *die; - struct attribute attr; - struct dwarf2_cu *ref_cu = cu; - - /* DW_FORM_ref_addr is using section offset. */ - attr.name = (enum dwarf_attribute) 0; - attr.form = DW_FORM_ref_addr; - attr.u.unsnd = to_underlying (pdi->sect_off); - die = follow_die_ref (NULL, &attr, &ref_cu); - - return xstrdup (dwarf2_full_name (NULL, die, ref_cu)); - } - } - - parent_scope = partial_die_parent_scope (pdi, cu); - if (parent_scope == NULL) - return NULL; - else - return typename_concat (NULL, parent_scope, pdi->name, 0, cu); -} - -static void -add_partial_symbol (struct partial_die_info *pdi, struct dwarf2_cu *cu) -{ - struct dwarf2_per_objfile *dwarf2_per_objfile - = cu->per_cu->dwarf2_per_objfile; - struct objfile *objfile = dwarf2_per_objfile->objfile; - struct gdbarch *gdbarch = get_objfile_arch (objfile); - CORE_ADDR addr = 0; - const char *actual_name = NULL; - CORE_ADDR baseaddr; - char *built_actual_name; - - baseaddr = ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile)); - - built_actual_name = partial_die_full_name (pdi, cu); - if (built_actual_name != NULL) - actual_name = built_actual_name; - - if (actual_name == NULL) - actual_name = pdi->name; - - switch (pdi->tag) - { - case DW_TAG_inlined_subroutine: - case DW_TAG_subprogram: - addr = (gdbarch_adjust_dwarf2_addr (gdbarch, pdi->lowpc + baseaddr) - - baseaddr); - if (pdi->is_external - || cu->language == language_ada - || (cu->language == language_fortran - && pdi->die_parent != NULL - && pdi->die_parent->tag == DW_TAG_subprogram)) - { - /* Normally, only "external" DIEs are part of the global scope. - But in Ada and Fortran, we want to be able to access nested - procedures globally. So all Ada and Fortran subprograms are - stored in the global scope. */ - add_psymbol_to_list (actual_name, - built_actual_name != NULL, - VAR_DOMAIN, LOC_BLOCK, - SECT_OFF_TEXT (objfile), - psymbol_placement::GLOBAL, - addr, - cu->language, objfile); - } - else - { - add_psymbol_to_list (actual_name, - built_actual_name != NULL, - VAR_DOMAIN, LOC_BLOCK, - SECT_OFF_TEXT (objfile), - psymbol_placement::STATIC, - addr, cu->language, objfile); - } - - if (pdi->main_subprogram && actual_name != NULL) - set_objfile_main_name (objfile, actual_name, cu->language); - break; - case DW_TAG_constant: - add_psymbol_to_list (actual_name, - built_actual_name != NULL, VAR_DOMAIN, LOC_STATIC, - -1, (pdi->is_external - ? psymbol_placement::GLOBAL - : psymbol_placement::STATIC), - 0, cu->language, objfile); - break; - case DW_TAG_variable: - if (pdi->d.locdesc) - addr = decode_locdesc (pdi->d.locdesc, cu); - - if (pdi->d.locdesc - && addr == 0 - && !dwarf2_per_objfile->has_section_at_zero) - { - /* A global or static variable may also have been stripped - out by the linker if unused, in which case its address - will be nullified; do not add such variables into partial - symbol table then. */ - } - else if (pdi->is_external) - { - /* Global Variable. - Don't enter into the minimal symbol tables as there is - a minimal symbol table entry from the ELF symbols already. - Enter into partial symbol table if it has a location - descriptor or a type. - If the location descriptor is missing, new_symbol will create - a LOC_UNRESOLVED symbol, the address of the variable will then - be determined from the minimal symbol table whenever the variable - is referenced. - The address for the partial symbol table entry is not - used by GDB, but it comes in handy for debugging partial symbol - table building. */ - - if (pdi->d.locdesc || pdi->has_type) - add_psymbol_to_list (actual_name, - built_actual_name != NULL, - VAR_DOMAIN, LOC_STATIC, - SECT_OFF_TEXT (objfile), - psymbol_placement::GLOBAL, - addr, cu->language, objfile); - } - else - { - int has_loc = pdi->d.locdesc != NULL; - - /* Static Variable. Skip symbols whose value we cannot know (those - without location descriptors or constant values). */ - if (!has_loc && !pdi->has_const_value) - { - xfree (built_actual_name); - return; - } - - add_psymbol_to_list (actual_name, - built_actual_name != NULL, - VAR_DOMAIN, LOC_STATIC, - SECT_OFF_TEXT (objfile), - psymbol_placement::STATIC, - has_loc ? addr : 0, - cu->language, objfile); - } - break; - case DW_TAG_typedef: - case DW_TAG_base_type: - case DW_TAG_subrange_type: - add_psymbol_to_list (actual_name, - built_actual_name != NULL, - VAR_DOMAIN, LOC_TYPEDEF, -1, - psymbol_placement::STATIC, - 0, cu->language, objfile); - break; - case DW_TAG_imported_declaration: - case DW_TAG_namespace: - add_psymbol_to_list (actual_name, - built_actual_name != NULL, - VAR_DOMAIN, LOC_TYPEDEF, -1, - psymbol_placement::GLOBAL, - 0, cu->language, objfile); - break; - case DW_TAG_module: - /* With Fortran 77 there might be a "BLOCK DATA" module - available without any name. If so, we skip the module as it - doesn't bring any value. */ - if (actual_name != nullptr) - add_psymbol_to_list (actual_name, - built_actual_name != NULL, - MODULE_DOMAIN, LOC_TYPEDEF, -1, - psymbol_placement::GLOBAL, - 0, cu->language, objfile); - break; - case DW_TAG_class_type: - case DW_TAG_interface_type: - case DW_TAG_structure_type: - case DW_TAG_union_type: - case DW_TAG_enumeration_type: - /* Skip external references. The DWARF standard says in the section - about "Structure, Union, and Class Type Entries": "An incomplete - structure, union or class type is represented by a structure, - union or class entry that does not have a byte size attribute - and that has a DW_AT_declaration attribute." */ - if (!pdi->has_byte_size && pdi->is_declaration) - { - xfree (built_actual_name); - return; - } - - /* NOTE: carlton/2003-10-07: See comment in new_symbol about - static vs. global. */ - add_psymbol_to_list (actual_name, - built_actual_name != NULL, - STRUCT_DOMAIN, LOC_TYPEDEF, -1, - cu->language == language_cplus - ? psymbol_placement::GLOBAL - : psymbol_placement::STATIC, - 0, cu->language, objfile); - - break; - case DW_TAG_enumerator: - add_psymbol_to_list (actual_name, - built_actual_name != NULL, - VAR_DOMAIN, LOC_CONST, -1, - cu->language == language_cplus - ? psymbol_placement::GLOBAL - : psymbol_placement::STATIC, - 0, cu->language, objfile); - break; - default: - break; - } - - xfree (built_actual_name); -} - -/* Read a partial die corresponding to a namespace; also, add a symbol - corresponding to that namespace to the symbol table. NAMESPACE is - the name of the enclosing namespace. */ - -static void -add_partial_namespace (struct partial_die_info *pdi, - CORE_ADDR *lowpc, CORE_ADDR *highpc, - int set_addrmap, struct dwarf2_cu *cu) -{ - /* Add a symbol for the namespace. */ - - add_partial_symbol (pdi, cu); - - /* Now scan partial symbols in that namespace. */ - - if (pdi->has_children) - scan_partial_symbols (pdi->die_child, lowpc, highpc, set_addrmap, cu); -} - -/* Read a partial die corresponding to a Fortran module. */ - -static void -add_partial_module (struct partial_die_info *pdi, CORE_ADDR *lowpc, - CORE_ADDR *highpc, int set_addrmap, struct dwarf2_cu *cu) -{ - /* Add a symbol for the namespace. */ - - add_partial_symbol (pdi, cu); - - /* Now scan partial symbols in that module. */ - - if (pdi->has_children) - scan_partial_symbols (pdi->die_child, lowpc, highpc, set_addrmap, cu); -} - -/* Read a partial die corresponding to a subprogram or an inlined - subprogram and create a partial symbol for that subprogram. - When the CU language allows it, this routine also defines a partial - symbol for each nested subprogram that this subprogram contains. - If SET_ADDRMAP is true, record the covered ranges in the addrmap. - Set *LOWPC and *HIGHPC to the lowest and highest PC values found in PDI. - - PDI may also be a lexical block, in which case we simply search - recursively for subprograms defined inside that lexical block. - Again, this is only performed when the CU language allows this - type of definitions. */ - -static void -add_partial_subprogram (struct partial_die_info *pdi, - CORE_ADDR *lowpc, CORE_ADDR *highpc, - int set_addrmap, struct dwarf2_cu *cu) -{ - if (pdi->tag == DW_TAG_subprogram || pdi->tag == DW_TAG_inlined_subroutine) - { - if (pdi->has_pc_info) - { - if (pdi->lowpc < *lowpc) - *lowpc = pdi->lowpc; - if (pdi->highpc > *highpc) - *highpc = pdi->highpc; - if (set_addrmap) - { - struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile; - struct gdbarch *gdbarch = get_objfile_arch (objfile); - CORE_ADDR baseaddr; - CORE_ADDR this_highpc; - CORE_ADDR this_lowpc; - - baseaddr = ANOFFSET (objfile->section_offsets, - SECT_OFF_TEXT (objfile)); - this_lowpc - = (gdbarch_adjust_dwarf2_addr (gdbarch, - pdi->lowpc + baseaddr) - - baseaddr); - this_highpc - = (gdbarch_adjust_dwarf2_addr (gdbarch, - pdi->highpc + baseaddr) - - baseaddr); - addrmap_set_empty (objfile->partial_symtabs->psymtabs_addrmap, - this_lowpc, this_highpc - 1, - cu->per_cu->v.psymtab); - } - } - - if (pdi->has_pc_info || (!pdi->is_external && pdi->may_be_inlined)) - { - if (!pdi->is_declaration) - /* Ignore subprogram DIEs that do not have a name, they are - illegal. Do not emit a complaint at this point, we will - do so when we convert this psymtab into a symtab. */ - if (pdi->name) - add_partial_symbol (pdi, cu); - } - } - - if (! pdi->has_children) - return; - - if (cu->language == language_ada || cu->language == language_fortran) - { - pdi = pdi->die_child; - while (pdi != NULL) - { - pdi->fixup (cu); - if (pdi->tag == DW_TAG_subprogram - || pdi->tag == DW_TAG_inlined_subroutine - || pdi->tag == DW_TAG_lexical_block) - add_partial_subprogram (pdi, lowpc, highpc, set_addrmap, cu); - pdi = pdi->die_sibling; - } - } -} - -/* Read a partial die corresponding to an enumeration type. */ - -static void -add_partial_enumeration (struct partial_die_info *enum_pdi, - struct dwarf2_cu *cu) -{ - struct partial_die_info *pdi; - - if (enum_pdi->name != NULL) - add_partial_symbol (enum_pdi, cu); - - pdi = enum_pdi->die_child; - while (pdi) - { - if (pdi->tag != DW_TAG_enumerator || pdi->name == NULL) - complaint (_("malformed enumerator DIE ignored")); - else - add_partial_symbol (pdi, cu); - pdi = pdi->die_sibling; - } -} - -/* Return the initial uleb128 in the die at INFO_PTR. */ - -static unsigned int -peek_abbrev_code (bfd *abfd, const gdb_byte *info_ptr) -{ - unsigned int bytes_read; - - return read_unsigned_leb128 (abfd, info_ptr, &bytes_read); -} - -/* Read the initial uleb128 in the die at INFO_PTR in compilation unit - READER::CU. Use READER::ABBREV_TABLE to lookup any abbreviation. - - Return the corresponding abbrev, or NULL if the number is zero (indicating - an empty DIE). In either case *BYTES_READ will be set to the length of - the initial number. */ - -static struct abbrev_info * -peek_die_abbrev (const die_reader_specs &reader, - const gdb_byte *info_ptr, unsigned int *bytes_read) -{ - dwarf2_cu *cu = reader.cu; - bfd *abfd = cu->per_cu->dwarf2_per_objfile->objfile->obfd; - unsigned int abbrev_number - = read_unsigned_leb128 (abfd, info_ptr, bytes_read); - - if (abbrev_number == 0) - return NULL; - - abbrev_info *abbrev = reader.abbrev_table->lookup_abbrev (abbrev_number); - if (!abbrev) - { - error (_("Dwarf Error: Could not find abbrev number %d in %s" - " at offset %s [in module %s]"), - abbrev_number, cu->per_cu->is_debug_types ? "TU" : "CU", - sect_offset_str (cu->header.sect_off), bfd_get_filename (abfd)); - } - - return abbrev; -} - -/* Scan the debug information for CU starting at INFO_PTR in buffer BUFFER. - Returns a pointer to the end of a series of DIEs, terminated by an empty - DIE. Any children of the skipped DIEs will also be skipped. */ - -static const gdb_byte * -skip_children (const struct die_reader_specs *reader, const gdb_byte *info_ptr) -{ - while (1) - { - unsigned int bytes_read; - abbrev_info *abbrev = peek_die_abbrev (*reader, info_ptr, &bytes_read); - - if (abbrev == NULL) - return info_ptr + bytes_read; - else - info_ptr = skip_one_die (reader, info_ptr + bytes_read, abbrev); - } -} - -/* Scan the debug information for CU starting at INFO_PTR in buffer BUFFER. - INFO_PTR should point just after the initial uleb128 of a DIE, and the - abbrev corresponding to that skipped uleb128 should be passed in - ABBREV. Returns a pointer to this DIE's sibling, skipping any - children. */ - -static const gdb_byte * -skip_one_die (const struct die_reader_specs *reader, const gdb_byte *info_ptr, - struct abbrev_info *abbrev) -{ - unsigned int bytes_read; - struct attribute attr; - bfd *abfd = reader->abfd; - struct dwarf2_cu *cu = reader->cu; - const gdb_byte *buffer = reader->buffer; - const gdb_byte *buffer_end = reader->buffer_end; - unsigned int form, i; - - for (i = 0; i < abbrev->num_attrs; i++) - { - /* The only abbrev we care about is DW_AT_sibling. */ - if (abbrev->attrs[i].name == DW_AT_sibling) - { - read_attribute (reader, &attr, &abbrev->attrs[i], info_ptr); - if (attr.form == DW_FORM_ref_addr) - complaint (_("ignoring absolute DW_AT_sibling")); - else - { - sect_offset off = dwarf2_get_ref_die_offset (&attr); - const gdb_byte *sibling_ptr = buffer + to_underlying (off); - - if (sibling_ptr < info_ptr) - complaint (_("DW_AT_sibling points backwards")); - else if (sibling_ptr > reader->buffer_end) - dwarf2_section_buffer_overflow_complaint (reader->die_section); - else - return sibling_ptr; - } - } - - /* If it isn't DW_AT_sibling, skip this attribute. */ - form = abbrev->attrs[i].form; - skip_attribute: - switch (form) - { - case DW_FORM_ref_addr: - /* In DWARF 2, DW_FORM_ref_addr is address sized; in DWARF 3 - and later it is offset sized. */ - if (cu->header.version == 2) - info_ptr += cu->header.addr_size; - else - info_ptr += cu->header.offset_size; - break; - case DW_FORM_GNU_ref_alt: - info_ptr += cu->header.offset_size; - break; - case DW_FORM_addr: - info_ptr += cu->header.addr_size; - break; - case DW_FORM_data1: - case DW_FORM_ref1: - case DW_FORM_flag: - case DW_FORM_strx1: - info_ptr += 1; - break; - case DW_FORM_flag_present: - case DW_FORM_implicit_const: - break; - case DW_FORM_data2: - case DW_FORM_ref2: - case DW_FORM_strx2: - info_ptr += 2; - break; - case DW_FORM_strx3: - info_ptr += 3; - break; - case DW_FORM_data4: - case DW_FORM_ref4: - case DW_FORM_strx4: - info_ptr += 4; - break; - case DW_FORM_data8: - case DW_FORM_ref8: - case DW_FORM_ref_sig8: - info_ptr += 8; - break; - case DW_FORM_data16: - info_ptr += 16; - break; - case DW_FORM_string: - read_direct_string (abfd, info_ptr, &bytes_read); - info_ptr += bytes_read; - break; - case DW_FORM_sec_offset: - case DW_FORM_strp: - case DW_FORM_GNU_strp_alt: - info_ptr += cu->header.offset_size; - break; - case DW_FORM_exprloc: - case DW_FORM_block: - info_ptr += read_unsigned_leb128 (abfd, info_ptr, &bytes_read); - info_ptr += bytes_read; - break; - case DW_FORM_block1: - info_ptr += 1 + read_1_byte (abfd, info_ptr); - break; - case DW_FORM_block2: - info_ptr += 2 + read_2_bytes (abfd, info_ptr); - break; - case DW_FORM_block4: - info_ptr += 4 + read_4_bytes (abfd, info_ptr); - break; - case DW_FORM_addrx: - case DW_FORM_strx: - case DW_FORM_sdata: - case DW_FORM_udata: - case DW_FORM_ref_udata: - case DW_FORM_GNU_addr_index: - case DW_FORM_GNU_str_index: - info_ptr = safe_skip_leb128 (info_ptr, buffer_end); - break; - case DW_FORM_indirect: - form = read_unsigned_leb128 (abfd, info_ptr, &bytes_read); - info_ptr += bytes_read; - /* We need to continue parsing from here, so just go back to - the top. */ - goto skip_attribute; - - default: - error (_("Dwarf Error: Cannot handle %s " - "in DWARF reader [in module %s]"), - dwarf_form_name (form), - bfd_get_filename (abfd)); - } - } - - if (abbrev->has_children) - return skip_children (reader, info_ptr); - else - return info_ptr; -} - -/* Locate ORIG_PDI's sibling. - INFO_PTR should point to the start of the next DIE after ORIG_PDI. */ - -static const gdb_byte * -locate_pdi_sibling (const struct die_reader_specs *reader, - struct partial_die_info *orig_pdi, - const gdb_byte *info_ptr) -{ - /* Do we know the sibling already? */ - - if (orig_pdi->sibling) - return orig_pdi->sibling; - - /* Are there any children to deal with? */ - - if (!orig_pdi->has_children) - return info_ptr; - - /* Skip the children the long way. */ - - return skip_children (reader, info_ptr); -} - -/* Expand this partial symbol table into a full symbol table. SELF is - not NULL. */ - -static void -dwarf2_read_symtab (struct partial_symtab *self, - struct objfile *objfile) -{ - struct dwarf2_per_objfile *dwarf2_per_objfile - = get_dwarf2_per_objfile (objfile); - - if (self->readin) - { - warning (_("bug: psymtab for %s is already read in."), - self->filename); - } - else - { - if (info_verbose) - { - printf_filtered (_("Reading in symbols for %s..."), - self->filename); - gdb_flush (gdb_stdout); - } - - /* If this psymtab is constructed from a debug-only objfile, the - has_section_at_zero flag will not necessarily be correct. We - can get the correct value for this flag by looking at the data - associated with the (presumably stripped) associated objfile. */ - if (objfile->separate_debug_objfile_backlink) - { - struct dwarf2_per_objfile *dpo_backlink - = get_dwarf2_per_objfile (objfile->separate_debug_objfile_backlink); - - dwarf2_per_objfile->has_section_at_zero - = dpo_backlink->has_section_at_zero; - } - - dwarf2_per_objfile->reading_partial_symbols = 0; - - psymtab_to_symtab_1 (self); - - /* Finish up the debug error message. */ - if (info_verbose) - printf_filtered (_("done.\n")); - } - - process_cu_includes (dwarf2_per_objfile); -} - -/* Reading in full CUs. */ - -/* Add PER_CU to the queue. */ - -static void -queue_comp_unit (struct dwarf2_per_cu_data *per_cu, - enum language pretend_language) -{ - struct dwarf2_queue_item *item; - - per_cu->queued = 1; - item = XNEW (struct dwarf2_queue_item); - item->per_cu = per_cu; - item->pretend_language = pretend_language; - item->next = NULL; - - if (dwarf2_queue == NULL) - dwarf2_queue = item; - else - dwarf2_queue_tail->next = item; - - dwarf2_queue_tail = item; -} - -/* If PER_CU is not yet queued, add it to the queue. - If DEPENDENT_CU is non-NULL, it has a reference to PER_CU so add a - dependency. - The result is non-zero if PER_CU was queued, otherwise the result is zero - meaning either PER_CU is already queued or it is already loaded. - - N.B. There is an invariant here that if a CU is queued then it is loaded. - The caller is required to load PER_CU if we return non-zero. */ - -static int -maybe_queue_comp_unit (struct dwarf2_cu *dependent_cu, - struct dwarf2_per_cu_data *per_cu, - enum language pretend_language) -{ - /* We may arrive here during partial symbol reading, if we need full - DIEs to process an unusual case (e.g. template arguments). Do - not queue PER_CU, just tell our caller to load its DIEs. */ - if (per_cu->dwarf2_per_objfile->reading_partial_symbols) - { - if (per_cu->cu == NULL || per_cu->cu->dies == NULL) - return 1; - return 0; - } - - /* Mark the dependence relation so that we don't flush PER_CU - too early. */ - if (dependent_cu != NULL) - dwarf2_add_dependence (dependent_cu, per_cu); - - /* If it's already on the queue, we have nothing to do. */ - if (per_cu->queued) - return 0; - - /* If the compilation unit is already loaded, just mark it as - used. */ - if (per_cu->cu != NULL) - { - per_cu->cu->last_used = 0; - return 0; - } - - /* Add it to the queue. */ - queue_comp_unit (per_cu, pretend_language); - - return 1; -} - -/* Process the queue. */ - -static void -process_queue (struct dwarf2_per_objfile *dwarf2_per_objfile) -{ - struct dwarf2_queue_item *item, *next_item; - - if (dwarf_read_debug) - { - fprintf_unfiltered (gdb_stdlog, - "Expanding one or more symtabs of objfile %s ...\n", - objfile_name (dwarf2_per_objfile->objfile)); - } - - /* The queue starts out with one item, but following a DIE reference - may load a new CU, adding it to the end of the queue. */ - for (item = dwarf2_queue; item != NULL; dwarf2_queue = item = next_item) - { - if ((dwarf2_per_objfile->using_index - ? !item->per_cu->v.quick->compunit_symtab - : (item->per_cu->v.psymtab && !item->per_cu->v.psymtab->readin)) - /* Skip dummy CUs. */ - && item->per_cu->cu != NULL) - { - struct dwarf2_per_cu_data *per_cu = item->per_cu; - unsigned int debug_print_threshold; - char buf[100]; - - if (per_cu->is_debug_types) - { - struct signatured_type *sig_type = - (struct signatured_type *) per_cu; - - sprintf (buf, "TU %s at offset %s", - hex_string (sig_type->signature), - sect_offset_str (per_cu->sect_off)); - /* There can be 100s of TUs. - Only print them in verbose mode. */ - debug_print_threshold = 2; - } - else - { - sprintf (buf, "CU at offset %s", - sect_offset_str (per_cu->sect_off)); - debug_print_threshold = 1; - } - - if (dwarf_read_debug >= debug_print_threshold) - fprintf_unfiltered (gdb_stdlog, "Expanding symtab of %s\n", buf); - - if (per_cu->is_debug_types) - process_full_type_unit (per_cu, item->pretend_language); - else - process_full_comp_unit (per_cu, item->pretend_language); - - if (dwarf_read_debug >= debug_print_threshold) - fprintf_unfiltered (gdb_stdlog, "Done expanding %s\n", buf); - } - - item->per_cu->queued = 0; - next_item = item->next; - xfree (item); - } - - dwarf2_queue_tail = NULL; - - if (dwarf_read_debug) - { - fprintf_unfiltered (gdb_stdlog, "Done expanding symtabs of %s.\n", - objfile_name (dwarf2_per_objfile->objfile)); - } -} - -/* Read in full symbols for PST, and anything it depends on. */ - -static void -psymtab_to_symtab_1 (struct partial_symtab *pst) -{ - struct dwarf2_per_cu_data *per_cu; - int i; - - if (pst->readin) - return; - - for (i = 0; i < pst->number_of_dependencies; i++) - if (!pst->dependencies[i]->readin - && pst->dependencies[i]->user == NULL) - { - /* Inform about additional files that need to be read in. */ - if (info_verbose) - { - /* FIXME: i18n: Need to make this a single string. */ - fputs_filtered (" ", gdb_stdout); - wrap_here (""); - fputs_filtered ("and ", gdb_stdout); - wrap_here (""); - printf_filtered ("%s...", pst->dependencies[i]->filename); - wrap_here (""); /* Flush output. */ - gdb_flush (gdb_stdout); - } - psymtab_to_symtab_1 (pst->dependencies[i]); - } - - per_cu = (struct dwarf2_per_cu_data *) pst->read_symtab_private; - - if (per_cu == NULL) - { - /* It's an include file, no symbols to read for it. - Everything is in the parent symtab. */ - pst->readin = 1; - return; - } - - dw2_do_instantiate_symtab (per_cu, false); -} - -/* Trivial hash function for die_info: the hash value of a DIE - is its offset in .debug_info for this objfile. */ - -static hashval_t -die_hash (const void *item) -{ - const struct die_info *die = (const struct die_info *) item; - - return to_underlying (die->sect_off); -} - -/* Trivial comparison function for die_info structures: two DIEs - are equal if they have the same offset. */ - -static int -die_eq (const void *item_lhs, const void *item_rhs) -{ - const struct die_info *die_lhs = (const struct die_info *) item_lhs; - const struct die_info *die_rhs = (const struct die_info *) item_rhs; - - return die_lhs->sect_off == die_rhs->sect_off; -} - -/* die_reader_func for load_full_comp_unit. - This is identical to read_signatured_type_reader, - but is kept separate for now. */ - -static void -load_full_comp_unit_reader (const struct die_reader_specs *reader, - const gdb_byte *info_ptr, - struct die_info *comp_unit_die, - int has_children, - void *data) -{ - struct dwarf2_cu *cu = reader->cu; - enum language *language_ptr = (enum language *) data; - - gdb_assert (cu->die_hash == NULL); - cu->die_hash = - htab_create_alloc_ex (cu->header.length / 12, - die_hash, - die_eq, - NULL, - &cu->comp_unit_obstack, - hashtab_obstack_allocate, - dummy_obstack_deallocate); - - if (has_children) - comp_unit_die->child = read_die_and_siblings (reader, info_ptr, - &info_ptr, comp_unit_die); - cu->dies = comp_unit_die; - /* comp_unit_die is not stored in die_hash, no need. */ - - /* We try not to read any attributes in this function, because not - all CUs needed for references have been loaded yet, and symbol - table processing isn't initialized. But we have to set the CU language, - or we won't be able to build types correctly. - Similarly, if we do not read the producer, we can not apply - producer-specific interpretation. */ - prepare_one_comp_unit (cu, cu->dies, *language_ptr); -} - -/* Load the DIEs associated with PER_CU into memory. */ - -static void -load_full_comp_unit (struct dwarf2_per_cu_data *this_cu, - bool skip_partial, - enum language pretend_language) -{ - gdb_assert (! this_cu->is_debug_types); - - init_cutu_and_read_dies (this_cu, NULL, 1, 1, skip_partial, - load_full_comp_unit_reader, &pretend_language); -} - -/* Add a DIE to the delayed physname list. */ - -static void -add_to_method_list (struct type *type, int fnfield_index, int index, - const char *name, struct die_info *die, - struct dwarf2_cu *cu) -{ - struct delayed_method_info mi; - mi.type = type; - mi.fnfield_index = fnfield_index; - mi.index = index; - mi.name = name; - mi.die = die; - cu->method_list.push_back (mi); -} - -/* Check whether [PHYSNAME, PHYSNAME+LEN) ends with a modifier like - "const" / "volatile". If so, decrements LEN by the length of the - modifier and return true. Otherwise return false. */ - -template<size_t N> -static bool -check_modifier (const char *physname, size_t &len, const char (&mod)[N]) -{ - size_t mod_len = sizeof (mod) - 1; - if (len > mod_len && startswith (physname + (len - mod_len), mod)) - { - len -= mod_len; - return true; - } - return false; -} - -/* Compute the physnames of any methods on the CU's method list. - - The computation of method physnames is delayed in order to avoid the - (bad) condition that one of the method's formal parameters is of an as yet - incomplete type. */ - -static void -compute_delayed_physnames (struct dwarf2_cu *cu) -{ - /* Only C++ delays computing physnames. */ - if (cu->method_list.empty ()) - return; - gdb_assert (cu->language == language_cplus); - - for (const delayed_method_info &mi : cu->method_list) - { - const char *physname; - struct fn_fieldlist *fn_flp - = &TYPE_FN_FIELDLIST (mi.type, mi.fnfield_index); - physname = dwarf2_physname (mi.name, mi.die, cu); - TYPE_FN_FIELD_PHYSNAME (fn_flp->fn_fields, mi.index) - = physname ? physname : ""; - - /* Since there's no tag to indicate whether a method is a - const/volatile overload, extract that information out of the - demangled name. */ - if (physname != NULL) - { - size_t len = strlen (physname); - - while (1) - { - if (physname[len] == ')') /* shortcut */ - break; - else if (check_modifier (physname, len, " const")) - TYPE_FN_FIELD_CONST (fn_flp->fn_fields, mi.index) = 1; - else if (check_modifier (physname, len, " volatile")) - TYPE_FN_FIELD_VOLATILE (fn_flp->fn_fields, mi.index) = 1; - else - break; - } - } - } - - /* The list is no longer needed. */ - cu->method_list.clear (); -} - -/* Go objects should be embedded in a DW_TAG_module DIE, - and it's not clear if/how imported objects will appear. - To keep Go support simple until that's worked out, - go back through what we've read and create something usable. - We could do this while processing each DIE, and feels kinda cleaner, - but that way is more invasive. - This is to, for example, allow the user to type "p var" or "b main" - without having to specify the package name, and allow lookups - of module.object to work in contexts that use the expression - parser. */ - -static void -fixup_go_packaging (struct dwarf2_cu *cu) -{ - char *package_name = NULL; - struct pending *list; - int i; - - for (list = *cu->get_builder ()->get_global_symbols (); - list != NULL; - list = list->next) - { - for (i = 0; i < list->nsyms; ++i) - { - struct symbol *sym = list->symbol[i]; - - if (SYMBOL_LANGUAGE (sym) == language_go - && SYMBOL_CLASS (sym) == LOC_BLOCK) - { - char *this_package_name = go_symbol_package_name (sym); - - if (this_package_name == NULL) - continue; - if (package_name == NULL) - package_name = this_package_name; - else - { - struct objfile *objfile - = cu->per_cu->dwarf2_per_objfile->objfile; - if (strcmp (package_name, this_package_name) != 0) - complaint (_("Symtab %s has objects from two different Go packages: %s and %s"), - (symbol_symtab (sym) != NULL - ? symtab_to_filename_for_display - (symbol_symtab (sym)) - : objfile_name (objfile)), - this_package_name, package_name); - xfree (this_package_name); - } - } - } - } - - if (package_name != NULL) - { - struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile; - const char *saved_package_name - = obstack_strdup (&objfile->per_bfd->storage_obstack, package_name); - struct type *type = init_type (objfile, TYPE_CODE_MODULE, 0, - saved_package_name); - struct symbol *sym; - - sym = allocate_symbol (objfile); - SYMBOL_SET_LANGUAGE (sym, language_go, &objfile->objfile_obstack); - SYMBOL_SET_NAMES (sym, saved_package_name, false, objfile); - /* This is not VAR_DOMAIN because we want a way to ensure a lookup of, - e.g., "main" finds the "main" module and not C's main(). */ - SYMBOL_DOMAIN (sym) = STRUCT_DOMAIN; - SYMBOL_ACLASS_INDEX (sym) = LOC_TYPEDEF; - SYMBOL_TYPE (sym) = type; - - add_symbol_to_list (sym, cu->get_builder ()->get_global_symbols ()); - - xfree (package_name); - } -} - -/* Allocate a fully-qualified name consisting of the two parts on the - obstack. */ - -static const char * -rust_fully_qualify (struct obstack *obstack, const char *p1, const char *p2) -{ - return obconcat (obstack, p1, "::", p2, (char *) NULL); -} - -/* A helper that allocates a struct discriminant_info to attach to a - union type. */ - -static struct discriminant_info * -alloc_discriminant_info (struct type *type, int discriminant_index, - int default_index) -{ - gdb_assert (TYPE_CODE (type) == TYPE_CODE_UNION); - gdb_assert (discriminant_index == -1 - || (discriminant_index >= 0 - && discriminant_index < TYPE_NFIELDS (type))); - gdb_assert (default_index == -1 - || (default_index >= 0 && default_index < TYPE_NFIELDS (type))); - - TYPE_FLAG_DISCRIMINATED_UNION (type) = 1; - - struct discriminant_info *disc - = ((struct discriminant_info *) - TYPE_ZALLOC (type, - offsetof (struct discriminant_info, discriminants) - + TYPE_NFIELDS (type) * sizeof (disc->discriminants[0]))); - disc->default_index = default_index; - disc->discriminant_index = discriminant_index; - - struct dynamic_prop prop; - prop.kind = PROP_UNDEFINED; - prop.data.baton = disc; - - add_dyn_prop (DYN_PROP_DISCRIMINATED, prop, type); - - return disc; -} - -/* Some versions of rustc emitted enums in an unusual way. - - Ordinary enums were emitted as unions. The first element of each - structure in the union was named "RUST$ENUM$DISR". This element - held the discriminant. - - These versions of Rust also implemented the "non-zero" - optimization. When the enum had two values, and one is empty and - the other holds a pointer that cannot be zero, the pointer is used - as the discriminant, with a zero value meaning the empty variant. - Here, the union's first member is of the form - RUST$ENCODED$ENUM$<fieldno>$<fieldno>$...$<variantname> - where the fieldnos are the indices of the fields that should be - traversed in order to find the field (which may be several fields deep) - and the variantname is the name of the variant of the case when the - field is zero. - - This function recognizes whether TYPE is of one of these forms, - and, if so, smashes it to be a variant type. */ - -static void -quirk_rust_enum (struct type *type, struct objfile *objfile) -{ - gdb_assert (TYPE_CODE (type) == TYPE_CODE_UNION); - - /* We don't need to deal with empty enums. */ - if (TYPE_NFIELDS (type) == 0) - return; - -#define RUST_ENUM_PREFIX "RUST$ENCODED$ENUM$" - if (TYPE_NFIELDS (type) == 1 - && startswith (TYPE_FIELD_NAME (type, 0), RUST_ENUM_PREFIX)) - { - const char *name = TYPE_FIELD_NAME (type, 0) + strlen (RUST_ENUM_PREFIX); - - /* Decode the field name to find the offset of the - discriminant. */ - ULONGEST bit_offset = 0; - struct type *field_type = TYPE_FIELD_TYPE (type, 0); - while (name[0] >= '0' && name[0] <= '9') - { - char *tail; - unsigned long index = strtoul (name, &tail, 10); - name = tail; - if (*name != '$' - || index >= TYPE_NFIELDS (field_type) - || (TYPE_FIELD_LOC_KIND (field_type, index) - != FIELD_LOC_KIND_BITPOS)) - { - complaint (_("Could not parse Rust enum encoding string \"%s\"" - "[in module %s]"), - TYPE_FIELD_NAME (type, 0), - objfile_name (objfile)); - return; - } - ++name; - - bit_offset += TYPE_FIELD_BITPOS (field_type, index); - field_type = TYPE_FIELD_TYPE (field_type, index); - } - - /* Make a union to hold the variants. */ - struct type *union_type = alloc_type (objfile); - TYPE_CODE (union_type) = TYPE_CODE_UNION; - TYPE_NFIELDS (union_type) = 3; - TYPE_FIELDS (union_type) - = (struct field *) TYPE_ZALLOC (type, 3 * sizeof (struct field)); - TYPE_LENGTH (union_type) = TYPE_LENGTH (type); - set_type_align (union_type, TYPE_RAW_ALIGN (type)); - - /* Put the discriminant must at index 0. */ - TYPE_FIELD_TYPE (union_type, 0) = field_type; - TYPE_FIELD_ARTIFICIAL (union_type, 0) = 1; - TYPE_FIELD_NAME (union_type, 0) = "<<discriminant>>"; - SET_FIELD_BITPOS (TYPE_FIELD (union_type, 0), bit_offset); - - /* The order of fields doesn't really matter, so put the real - field at index 1 and the data-less field at index 2. */ - struct discriminant_info *disc - = alloc_discriminant_info (union_type, 0, 1); - TYPE_FIELD (union_type, 1) = TYPE_FIELD (type, 0); - TYPE_FIELD_NAME (union_type, 1) - = rust_last_path_segment (TYPE_NAME (TYPE_FIELD_TYPE (union_type, 1))); - TYPE_NAME (TYPE_FIELD_TYPE (union_type, 1)) - = rust_fully_qualify (&objfile->objfile_obstack, TYPE_NAME (type), - TYPE_FIELD_NAME (union_type, 1)); - - const char *dataless_name - = rust_fully_qualify (&objfile->objfile_obstack, TYPE_NAME (type), - name); - struct type *dataless_type = init_type (objfile, TYPE_CODE_VOID, 0, - dataless_name); - TYPE_FIELD_TYPE (union_type, 2) = dataless_type; - /* NAME points into the original discriminant name, which - already has the correct lifetime. */ - TYPE_FIELD_NAME (union_type, 2) = name; - SET_FIELD_BITPOS (TYPE_FIELD (union_type, 2), 0); - disc->discriminants[2] = 0; - - /* Smash this type to be a structure type. We have to do this - because the type has already been recorded. */ - TYPE_CODE (type) = TYPE_CODE_STRUCT; - TYPE_NFIELDS (type) = 1; - TYPE_FIELDS (type) - = (struct field *) TYPE_ZALLOC (type, sizeof (struct field)); - - /* Install the variant part. */ - TYPE_FIELD_TYPE (type, 0) = union_type; - SET_FIELD_BITPOS (TYPE_FIELD (type, 0), 0); - TYPE_FIELD_NAME (type, 0) = "<<variants>>"; - } - /* A union with a single anonymous field is probably an old-style - univariant enum. */ - else if (TYPE_NFIELDS (type) == 1 && streq (TYPE_FIELD_NAME (type, 0), "")) - { - /* Smash this type to be a structure type. We have to do this - because the type has already been recorded. */ - TYPE_CODE (type) = TYPE_CODE_STRUCT; - - /* Make a union to hold the variants. */ - struct type *union_type = alloc_type (objfile); - TYPE_CODE (union_type) = TYPE_CODE_UNION; - TYPE_NFIELDS (union_type) = TYPE_NFIELDS (type); - TYPE_LENGTH (union_type) = TYPE_LENGTH (type); - set_type_align (union_type, TYPE_RAW_ALIGN (type)); - TYPE_FIELDS (union_type) = TYPE_FIELDS (type); - - struct type *field_type = TYPE_FIELD_TYPE (union_type, 0); - const char *variant_name - = rust_last_path_segment (TYPE_NAME (field_type)); - TYPE_FIELD_NAME (union_type, 0) = variant_name; - TYPE_NAME (field_type) - = rust_fully_qualify (&objfile->objfile_obstack, - TYPE_NAME (type), variant_name); - - /* Install the union in the outer struct type. */ - TYPE_NFIELDS (type) = 1; - TYPE_FIELDS (type) - = (struct field *) TYPE_ZALLOC (union_type, sizeof (struct field)); - TYPE_FIELD_TYPE (type, 0) = union_type; - TYPE_FIELD_NAME (type, 0) = "<<variants>>"; - SET_FIELD_BITPOS (TYPE_FIELD (type, 0), 0); - - alloc_discriminant_info (union_type, -1, 0); - } - else - { - struct type *disr_type = nullptr; - for (int i = 0; i < TYPE_NFIELDS (type); ++i) - { - disr_type = TYPE_FIELD_TYPE (type, i); - - if (TYPE_CODE (disr_type) != TYPE_CODE_STRUCT) - { - /* All fields of a true enum will be structs. */ - return; - } - else if (TYPE_NFIELDS (disr_type) == 0) - { - /* Could be data-less variant, so keep going. */ - disr_type = nullptr; - } - else if (strcmp (TYPE_FIELD_NAME (disr_type, 0), - "RUST$ENUM$DISR") != 0) - { - /* Not a Rust enum. */ - return; - } - else - { - /* Found one. */ - break; - } - } - - /* If we got here without a discriminant, then it's probably - just a union. */ - if (disr_type == nullptr) - return; - - /* Smash this type to be a structure type. We have to do this - because the type has already been recorded. */ - TYPE_CODE (type) = TYPE_CODE_STRUCT; - - /* Make a union to hold the variants. */ - struct field *disr_field = &TYPE_FIELD (disr_type, 0); - struct type *union_type = alloc_type (objfile); - TYPE_CODE (union_type) = TYPE_CODE_UNION; - TYPE_NFIELDS (union_type) = 1 + TYPE_NFIELDS (type); - TYPE_LENGTH (union_type) = TYPE_LENGTH (type); - set_type_align (union_type, TYPE_RAW_ALIGN (type)); - TYPE_FIELDS (union_type) - = (struct field *) TYPE_ZALLOC (union_type, - (TYPE_NFIELDS (union_type) - * sizeof (struct field))); - - memcpy (TYPE_FIELDS (union_type) + 1, TYPE_FIELDS (type), - TYPE_NFIELDS (type) * sizeof (struct field)); - - /* Install the discriminant at index 0 in the union. */ - TYPE_FIELD (union_type, 0) = *disr_field; - TYPE_FIELD_ARTIFICIAL (union_type, 0) = 1; - TYPE_FIELD_NAME (union_type, 0) = "<<discriminant>>"; - - /* Install the union in the outer struct type. */ - TYPE_FIELD_TYPE (type, 0) = union_type; - TYPE_FIELD_NAME (type, 0) = "<<variants>>"; - TYPE_NFIELDS (type) = 1; - - /* Set the size and offset of the union type. */ - SET_FIELD_BITPOS (TYPE_FIELD (type, 0), 0); - - /* We need a way to find the correct discriminant given a - variant name. For convenience we build a map here. */ - struct type *enum_type = FIELD_TYPE (*disr_field); - std::unordered_map<std::string, ULONGEST> discriminant_map; - for (int i = 0; i < TYPE_NFIELDS (enum_type); ++i) - { - if (TYPE_FIELD_LOC_KIND (enum_type, i) == FIELD_LOC_KIND_ENUMVAL) - { - const char *name - = rust_last_path_segment (TYPE_FIELD_NAME (enum_type, i)); - discriminant_map[name] = TYPE_FIELD_ENUMVAL (enum_type, i); - } - } - - int n_fields = TYPE_NFIELDS (union_type); - struct discriminant_info *disc - = alloc_discriminant_info (union_type, 0, -1); - /* Skip the discriminant here. */ - for (int i = 1; i < n_fields; ++i) - { - /* Find the final word in the name of this variant's type. - That name can be used to look up the correct - discriminant. */ - const char *variant_name - = rust_last_path_segment (TYPE_NAME (TYPE_FIELD_TYPE (union_type, - i))); - - auto iter = discriminant_map.find (variant_name); - if (iter != discriminant_map.end ()) - disc->discriminants[i] = iter->second; - - /* Remove the discriminant field, if it exists. */ - struct type *sub_type = TYPE_FIELD_TYPE (union_type, i); - if (TYPE_NFIELDS (sub_type) > 0) - { - --TYPE_NFIELDS (sub_type); - ++TYPE_FIELDS (sub_type); - } - TYPE_FIELD_NAME (union_type, i) = variant_name; - TYPE_NAME (sub_type) - = rust_fully_qualify (&objfile->objfile_obstack, - TYPE_NAME (type), variant_name); - } - } -} - -/* Rewrite some Rust unions to be structures with variants parts. */ - -static void -rust_union_quirks (struct dwarf2_cu *cu) -{ - gdb_assert (cu->language == language_rust); - for (type *type_ : cu->rust_unions) - quirk_rust_enum (type_, cu->per_cu->dwarf2_per_objfile->objfile); - /* We don't need this any more. */ - cu->rust_unions.clear (); -} - -/* Return the symtab for PER_CU. This works properly regardless of - whether we're using the index or psymtabs. */ - -static struct compunit_symtab * -get_compunit_symtab (struct dwarf2_per_cu_data *per_cu) -{ - return (per_cu->dwarf2_per_objfile->using_index - ? per_cu->v.quick->compunit_symtab - : per_cu->v.psymtab->compunit_symtab); -} - -/* A helper function for computing the list of all symbol tables - included by PER_CU. */ - -static void -recursively_compute_inclusions (std::vector<compunit_symtab *> *result, - htab_t all_children, htab_t all_type_symtabs, - struct dwarf2_per_cu_data *per_cu, - struct compunit_symtab *immediate_parent) -{ - void **slot; - struct compunit_symtab *cust; - - slot = htab_find_slot (all_children, per_cu, INSERT); - if (*slot != NULL) - { - /* This inclusion and its children have been processed. */ - return; - } - - *slot = per_cu; - /* Only add a CU if it has a symbol table. */ - cust = get_compunit_symtab (per_cu); - if (cust != NULL) - { - /* If this is a type unit only add its symbol table if we haven't - seen it yet (type unit per_cu's can share symtabs). */ - if (per_cu->is_debug_types) - { - slot = htab_find_slot (all_type_symtabs, cust, INSERT); - if (*slot == NULL) - { - *slot = cust; - result->push_back (cust); - if (cust->user == NULL) - cust->user = immediate_parent; - } - } - else - { - result->push_back (cust); - if (cust->user == NULL) - cust->user = immediate_parent; - } - } - - if (!per_cu->imported_symtabs_empty ()) - for (dwarf2_per_cu_data *ptr : *per_cu->imported_symtabs) - { - recursively_compute_inclusions (result, all_children, - all_type_symtabs, ptr, cust); - } -} - -/* Compute the compunit_symtab 'includes' fields for the compunit_symtab of - PER_CU. */ - -static void -compute_compunit_symtab_includes (struct dwarf2_per_cu_data *per_cu) -{ - gdb_assert (! per_cu->is_debug_types); - - if (!per_cu->imported_symtabs_empty ()) - { - int len; - std::vector<compunit_symtab *> result_symtabs; - htab_t all_children, all_type_symtabs; - struct compunit_symtab *cust = get_compunit_symtab (per_cu); - - /* If we don't have a symtab, we can just skip this case. */ - if (cust == NULL) - return; - - all_children = htab_create_alloc (1, htab_hash_pointer, htab_eq_pointer, - NULL, xcalloc, xfree); - all_type_symtabs = htab_create_alloc (1, htab_hash_pointer, htab_eq_pointer, - NULL, xcalloc, xfree); - - for (dwarf2_per_cu_data *ptr : *per_cu->imported_symtabs) - { - recursively_compute_inclusions (&result_symtabs, all_children, - all_type_symtabs, ptr, cust); - } - - /* Now we have a transitive closure of all the included symtabs. */ - len = result_symtabs.size (); - cust->includes - = XOBNEWVEC (&per_cu->dwarf2_per_objfile->objfile->objfile_obstack, - struct compunit_symtab *, len + 1); - memcpy (cust->includes, result_symtabs.data (), - len * sizeof (compunit_symtab *)); - cust->includes[len] = NULL; - - htab_delete (all_children); - htab_delete (all_type_symtabs); - } -} - -/* Compute the 'includes' field for the symtabs of all the CUs we just - read. */ - -static void -process_cu_includes (struct dwarf2_per_objfile *dwarf2_per_objfile) -{ - for (dwarf2_per_cu_data *iter : dwarf2_per_objfile->just_read_cus) - { - if (! iter->is_debug_types) - compute_compunit_symtab_includes (iter); - } - - dwarf2_per_objfile->just_read_cus.clear (); -} - -/* Generate full symbol information for PER_CU, whose DIEs have - already been loaded into memory. */ - -static void -process_full_comp_unit (struct dwarf2_per_cu_data *per_cu, - enum language pretend_language) -{ - struct dwarf2_cu *cu = per_cu->cu; - struct dwarf2_per_objfile *dwarf2_per_objfile = per_cu->dwarf2_per_objfile; - struct objfile *objfile = dwarf2_per_objfile->objfile; - struct gdbarch *gdbarch = get_objfile_arch (objfile); - CORE_ADDR lowpc, highpc; - struct compunit_symtab *cust; - CORE_ADDR baseaddr; - struct block *static_block; - CORE_ADDR addr; - - baseaddr = ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile)); - - /* Clear the list here in case something was left over. */ - cu->method_list.clear (); - - cu->language = pretend_language; - cu->language_defn = language_def (cu->language); - - /* Do line number decoding in read_file_scope () */ - process_die (cu->dies, cu); - - /* For now fudge the Go package. */ - if (cu->language == language_go) - fixup_go_packaging (cu); - - /* Now that we have processed all the DIEs in the CU, all the types - should be complete, and it should now be safe to compute all of the - physnames. */ - compute_delayed_physnames (cu); - - if (cu->language == language_rust) - rust_union_quirks (cu); - - /* Some compilers don't define a DW_AT_high_pc attribute for the - compilation unit. If the DW_AT_high_pc is missing, synthesize - it, by scanning the DIE's below the compilation unit. */ - get_scope_pc_bounds (cu->dies, &lowpc, &highpc, cu); - - addr = gdbarch_adjust_dwarf2_addr (gdbarch, highpc + baseaddr); - static_block = cu->get_builder ()->end_symtab_get_static_block (addr, 0, 1); - - /* If the comp unit has DW_AT_ranges, it may have discontiguous ranges. - Also, DW_AT_ranges may record ranges not belonging to any child DIEs - (such as virtual method tables). Record the ranges in STATIC_BLOCK's - addrmap to help ensure it has an accurate map of pc values belonging to - this comp unit. */ - dwarf2_record_block_ranges (cu->dies, static_block, baseaddr, cu); - - cust = cu->get_builder ()->end_symtab_from_static_block (static_block, - SECT_OFF_TEXT (objfile), - 0); - - if (cust != NULL) - { - int gcc_4_minor = producer_is_gcc_ge_4 (cu->producer); - - /* Set symtab language to language from DW_AT_language. If the - compilation is from a C file generated by language preprocessors, do - not set the language if it was already deduced by start_subfile. */ - if (!(cu->language == language_c - && COMPUNIT_FILETABS (cust)->language != language_unknown)) - COMPUNIT_FILETABS (cust)->language = cu->language; - - /* GCC-4.0 has started to support -fvar-tracking. GCC-3.x still can - produce DW_AT_location with location lists but it can be possibly - invalid without -fvar-tracking. Still up to GCC-4.4.x incl. 4.4.0 - there were bugs in prologue debug info, fixed later in GCC-4.5 - by "unwind info for epilogues" patch (which is not directly related). - - For -gdwarf-4 type units LOCATIONS_VALID indication is fortunately not - needed, it would be wrong due to missing DW_AT_producer there. - - Still one can confuse GDB by using non-standard GCC compilation - options - this waits on GCC PR other/32998 (-frecord-gcc-switches). - */ - if (cu->has_loclist && gcc_4_minor >= 5) - cust->locations_valid = 1; - - if (gcc_4_minor >= 5) - cust->epilogue_unwind_valid = 1; - - cust->call_site_htab = cu->call_site_htab; - } - - if (dwarf2_per_objfile->using_index) - per_cu->v.quick->compunit_symtab = cust; - else - { - struct partial_symtab *pst = per_cu->v.psymtab; - pst->compunit_symtab = cust; - pst->readin = 1; - } - - /* Push it for inclusion processing later. */ - dwarf2_per_objfile->just_read_cus.push_back (per_cu); - - /* Not needed any more. */ - cu->reset_builder (); -} - -/* Generate full symbol information for type unit PER_CU, whose DIEs have - already been loaded into memory. */ - -static void -process_full_type_unit (struct dwarf2_per_cu_data *per_cu, - enum language pretend_language) -{ - struct dwarf2_cu *cu = per_cu->cu; - struct dwarf2_per_objfile *dwarf2_per_objfile = per_cu->dwarf2_per_objfile; - struct objfile *objfile = dwarf2_per_objfile->objfile; - struct compunit_symtab *cust; - struct signatured_type *sig_type; - - gdb_assert (per_cu->is_debug_types); - sig_type = (struct signatured_type *) per_cu; - - /* Clear the list here in case something was left over. */ - cu->method_list.clear (); - - cu->language = pretend_language; - cu->language_defn = language_def (cu->language); - - /* The symbol tables are set up in read_type_unit_scope. */ - process_die (cu->dies, cu); - - /* For now fudge the Go package. */ - if (cu->language == language_go) - fixup_go_packaging (cu); - - /* Now that we have processed all the DIEs in the CU, all the types - should be complete, and it should now be safe to compute all of the - physnames. */ - compute_delayed_physnames (cu); - - if (cu->language == language_rust) - rust_union_quirks (cu); - - /* TUs share symbol tables. - If this is the first TU to use this symtab, complete the construction - of it with end_expandable_symtab. Otherwise, complete the addition of - this TU's symbols to the existing symtab. */ - if (sig_type->type_unit_group->compunit_symtab == NULL) - { - buildsym_compunit *builder = cu->get_builder (); - cust = builder->end_expandable_symtab (0, SECT_OFF_TEXT (objfile)); - sig_type->type_unit_group->compunit_symtab = cust; - - if (cust != NULL) - { - /* Set symtab language to language from DW_AT_language. If the - compilation is from a C file generated by language preprocessors, - do not set the language if it was already deduced by - start_subfile. */ - if (!(cu->language == language_c - && COMPUNIT_FILETABS (cust)->language != language_c)) - COMPUNIT_FILETABS (cust)->language = cu->language; - } - } - else - { - cu->get_builder ()->augment_type_symtab (); - cust = sig_type->type_unit_group->compunit_symtab; - } - - if (dwarf2_per_objfile->using_index) - per_cu->v.quick->compunit_symtab = cust; - else - { - struct partial_symtab *pst = per_cu->v.psymtab; - pst->compunit_symtab = cust; - pst->readin = 1; - } - - /* Not needed any more. */ - cu->reset_builder (); -} - -/* Process an imported unit DIE. */ - -static void -process_imported_unit_die (struct die_info *die, struct dwarf2_cu *cu) -{ - struct attribute *attr; - - /* For now we don't handle imported units in type units. */ - if (cu->per_cu->is_debug_types) - { - error (_("Dwarf Error: DW_TAG_imported_unit is not" - " supported in type units [in module %s]"), - objfile_name (cu->per_cu->dwarf2_per_objfile->objfile)); - } - - attr = dwarf2_attr (die, DW_AT_import, cu); - if (attr != NULL) - { - sect_offset sect_off = dwarf2_get_ref_die_offset (attr); - bool is_dwz = (attr->form == DW_FORM_GNU_ref_alt || cu->per_cu->is_dwz); - dwarf2_per_cu_data *per_cu - = dwarf2_find_containing_comp_unit (sect_off, is_dwz, - cu->per_cu->dwarf2_per_objfile); - - /* If necessary, add it to the queue and load its DIEs. */ - if (maybe_queue_comp_unit (cu, per_cu, cu->language)) - load_full_comp_unit (per_cu, false, cu->language); - - cu->per_cu->imported_symtabs_push (per_cu); - } -} - -/* RAII object that represents a process_die scope: i.e., - starts/finishes processing a DIE. */ -class process_die_scope -{ -public: - process_die_scope (die_info *die, dwarf2_cu *cu) - : m_die (die), m_cu (cu) - { - /* We should only be processing DIEs not already in process. */ - gdb_assert (!m_die->in_process); - m_die->in_process = true; - } - - ~process_die_scope () - { - m_die->in_process = false; - - /* If we're done processing the DIE for the CU that owns the line - header, we don't need the line header anymore. */ - if (m_cu->line_header_die_owner == m_die) - { - delete m_cu->line_header; - m_cu->line_header = NULL; - m_cu->line_header_die_owner = NULL; - } - } - -private: - die_info *m_die; - dwarf2_cu *m_cu; -}; - -/* Process a die and its children. */ - -static void -process_die (struct die_info *die, struct dwarf2_cu *cu) -{ - process_die_scope scope (die, cu); - - switch (die->tag) - { - case DW_TAG_padding: - break; - case DW_TAG_compile_unit: - case DW_TAG_partial_unit: - read_file_scope (die, cu); - break; - case DW_TAG_type_unit: - read_type_unit_scope (die, cu); - break; - case DW_TAG_subprogram: - /* Nested subprograms in Fortran get a prefix. */ - if (cu->language == language_fortran - && die->parent != NULL - && die->parent->tag == DW_TAG_subprogram) - cu->processing_has_namespace_info = true; - /* Fall through. */ - case DW_TAG_inlined_subroutine: - read_func_scope (die, cu); - break; - case DW_TAG_lexical_block: - case DW_TAG_try_block: - case DW_TAG_catch_block: - read_lexical_block_scope (die, cu); - break; - case DW_TAG_call_site: - case DW_TAG_GNU_call_site: - read_call_site_scope (die, cu); - break; - case DW_TAG_class_type: - case DW_TAG_interface_type: - case DW_TAG_structure_type: - case DW_TAG_union_type: - process_structure_scope (die, cu); - break; - case DW_TAG_enumeration_type: - process_enumeration_scope (die, cu); - break; - - /* 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. */ - case DW_TAG_subroutine_type: - case DW_TAG_set_type: - case DW_TAG_array_type: - case DW_TAG_pointer_type: - case DW_TAG_ptr_to_member_type: - case DW_TAG_reference_type: - case DW_TAG_rvalue_reference_type: - case DW_TAG_string_type: - break; - - case DW_TAG_base_type: - case DW_TAG_subrange_type: - case DW_TAG_typedef: - /* Add a typedef symbol for the type definition, if it has a - DW_AT_name. */ - new_symbol (die, read_type_die (die, cu), cu); - break; - case DW_TAG_common_block: - read_common_block (die, cu); - break; - case DW_TAG_common_inclusion: - break; - case DW_TAG_namespace: - cu->processing_has_namespace_info = true; - read_namespace (die, cu); - break; - case DW_TAG_module: - cu->processing_has_namespace_info = true; - read_module (die, cu); - break; - case DW_TAG_imported_declaration: - cu->processing_has_namespace_info = true; - if (read_namespace_alias (die, cu)) - break; - /* The declaration is not a global namespace alias. */ - /* Fall through. */ - case DW_TAG_imported_module: - cu->processing_has_namespace_info = true; - if (die->child != NULL && (die->tag == DW_TAG_imported_declaration - || cu->language != language_fortran)) - complaint (_("Tag '%s' has unexpected children"), - dwarf_tag_name (die->tag)); - read_import_statement (die, cu); - break; - - case DW_TAG_imported_unit: - process_imported_unit_die (die, cu); - break; - - case DW_TAG_variable: - read_variable (die, cu); - break; - - default: - new_symbol (die, NULL, cu); - break; - } -} - -/* DWARF name computation. */ - -/* A helper function for dwarf2_compute_name which determines whether DIE - needs to have the name of the scope prepended to the name listed in the - die. */ - -static int -die_needs_namespace (struct die_info *die, struct dwarf2_cu *cu) -{ - struct attribute *attr; - - switch (die->tag) - { - case DW_TAG_namespace: - case DW_TAG_typedef: - case DW_TAG_class_type: - case DW_TAG_interface_type: - case DW_TAG_structure_type: - case DW_TAG_union_type: - case DW_TAG_enumeration_type: - case DW_TAG_enumerator: - case DW_TAG_subprogram: - case DW_TAG_inlined_subroutine: - case DW_TAG_member: - case DW_TAG_imported_declaration: - return 1; - - case DW_TAG_variable: - case DW_TAG_constant: - /* We only need to prefix "globally" visible variables. These include - any variable marked with DW_AT_external or any variable that - lives in a namespace. [Variables in anonymous namespaces - require prefixing, but they are not DW_AT_external.] */ - - if (dwarf2_attr (die, DW_AT_specification, cu)) - { - struct dwarf2_cu *spec_cu = cu; - - return die_needs_namespace (die_specification (die, &spec_cu), - spec_cu); - } - - attr = dwarf2_attr (die, DW_AT_external, cu); - if (attr == NULL && die->parent->tag != DW_TAG_namespace - && die->parent->tag != DW_TAG_module) - return 0; - /* A variable in a lexical block of some kind does not need a - namespace, even though in C++ such variables may be external - and have a mangled name. */ - if (die->parent->tag == DW_TAG_lexical_block - || die->parent->tag == DW_TAG_try_block - || die->parent->tag == DW_TAG_catch_block - || die->parent->tag == DW_TAG_subprogram) - return 0; - return 1; - - default: - return 0; - } -} - -/* Return the DIE's linkage name attribute, either DW_AT_linkage_name - or DW_AT_MIPS_linkage_name. Returns NULL if the attribute is not - defined for the given DIE. */ - -static struct attribute * -dw2_linkage_name_attr (struct die_info *die, struct dwarf2_cu *cu) -{ - struct attribute *attr; - - attr = dwarf2_attr (die, DW_AT_linkage_name, cu); - if (attr == NULL) - attr = dwarf2_attr (die, DW_AT_MIPS_linkage_name, cu); - - return attr; -} - -/* Return the DIE's linkage name as a string, either DW_AT_linkage_name - or DW_AT_MIPS_linkage_name. Returns NULL if the attribute is not - defined for the given DIE. */ - -static const char * -dw2_linkage_name (struct die_info *die, struct dwarf2_cu *cu) -{ - const char *linkage_name; - - linkage_name = dwarf2_string_attr (die, DW_AT_linkage_name, cu); - if (linkage_name == NULL) - linkage_name = dwarf2_string_attr (die, DW_AT_MIPS_linkage_name, cu); - - return linkage_name; -} - -/* Compute the fully qualified name of DIE in CU. If PHYSNAME is nonzero, - compute the physname for the object, which include a method's: - - formal parameters (C++), - - receiver type (Go), - - The term "physname" is a bit confusing. - For C++, for example, it is the demangled name. - For Go, for example, it's the mangled name. - - For Ada, return the DIE's linkage name rather than the fully qualified - name. PHYSNAME is ignored.. - - The result is allocated on the objfile_obstack and canonicalized. */ - -static const char * -dwarf2_compute_name (const char *name, - struct die_info *die, struct dwarf2_cu *cu, - int physname) -{ - struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile; - - if (name == NULL) - name = dwarf2_name (die, cu); - - /* For Fortran GDB prefers DW_AT_*linkage_name for the physname if present - but otherwise compute it by typename_concat inside GDB. - FIXME: Actually this is not really true, or at least not always true. - It's all very confusing. SYMBOL_SET_NAMES doesn't try to demangle - Fortran names because there is no mangling standard. So new_symbol - will set the demangled name to the result of dwarf2_full_name, and it is - the demangled name that GDB uses if it exists. */ - if (cu->language == language_ada - || (cu->language == language_fortran && physname)) - { - /* For Ada unit, we prefer the linkage name over the name, as - the former contains the exported name, which the user expects - to be able to reference. Ideally, we want the user to be able - to reference this entity using either natural or linkage name, - but we haven't started looking at this enhancement yet. */ - const char *linkage_name = dw2_linkage_name (die, cu); - - if (linkage_name != NULL) - return linkage_name; - } - - /* These are the only languages we know how to qualify names in. */ - if (name != NULL - && (cu->language == language_cplus - || cu->language == language_fortran || cu->language == language_d - || cu->language == language_rust)) - { - if (die_needs_namespace (die, cu)) - { - const char *prefix; - const char *canonical_name = NULL; - - string_file buf; - - prefix = determine_prefix (die, cu); - if (*prefix != '\0') - { - char *prefixed_name = typename_concat (NULL, prefix, name, - physname, cu); - - buf.puts (prefixed_name); - xfree (prefixed_name); - } - else - buf.puts (name); - - /* Template parameters may be specified in the DIE's DW_AT_name, or - as children with DW_TAG_template_type_param or - DW_TAG_value_type_param. If the latter, add them to the name - here. If the name already has template parameters, then - skip this step; some versions of GCC emit both, and - it is more efficient to use the pre-computed name. - - Something to keep in mind about this process: it is very - unlikely, or in some cases downright impossible, to produce - something that will match the mangled name of a function. - If the definition of the function has the same debug info, - we should be able to match up with it anyway. But fallbacks - using the minimal symbol, for instance to find a method - implemented in a stripped copy of libstdc++, will not work. - If we do not have debug info for the definition, we will have to - match them up some other way. - - When we do name matching there is a related problem with function - templates; two instantiated function templates are allowed to - differ only by their return types, which we do not add here. */ - - if (cu->language == language_cplus && strchr (name, '<') == NULL) - { - struct attribute *attr; - struct die_info *child; - int first = 1; - - die->building_fullname = 1; - - for (child = die->child; child != NULL; child = child->sibling) - { - struct type *type; - LONGEST value; - const gdb_byte *bytes; - struct dwarf2_locexpr_baton *baton; - struct value *v; - - if (child->tag != DW_TAG_template_type_param - && child->tag != DW_TAG_template_value_param) - continue; - - if (first) - { - buf.puts ("<"); - first = 0; - } - else - buf.puts (", "); - - attr = dwarf2_attr (child, DW_AT_type, cu); - if (attr == NULL) - { - complaint (_("template parameter missing DW_AT_type")); - buf.puts ("UNKNOWN_TYPE"); - continue; - } - type = die_type (child, cu); - - if (child->tag == DW_TAG_template_type_param) - { - c_print_type (type, "", &buf, -1, 0, cu->language, - &type_print_raw_options); - continue; - } - - attr = dwarf2_attr (child, DW_AT_const_value, cu); - if (attr == NULL) - { - complaint (_("template parameter missing " - "DW_AT_const_value")); - buf.puts ("UNKNOWN_VALUE"); - continue; - } - - dwarf2_const_value_attr (attr, type, name, - &cu->comp_unit_obstack, cu, - &value, &bytes, &baton); - - if (TYPE_NOSIGN (type)) - /* GDB prints characters as NUMBER 'CHAR'. If that's - changed, this can use value_print instead. */ - c_printchar (value, type, &buf); - else - { - struct value_print_options opts; - - if (baton != NULL) - v = dwarf2_evaluate_loc_desc (type, NULL, - baton->data, - baton->size, - baton->per_cu); - else if (bytes != NULL) - { - v = allocate_value (type); - memcpy (value_contents_writeable (v), bytes, - TYPE_LENGTH (type)); - } - else - v = value_from_longest (type, value); - - /* Specify decimal so that we do not depend on - the radix. */ - get_formatted_print_options (&opts, 'd'); - opts.raw = 1; - value_print (v, &buf, &opts); - release_value (v); - } - } - - die->building_fullname = 0; - - if (!first) - { - /* Close the argument list, with a space if necessary - (nested templates). */ - if (!buf.empty () && buf.string ().back () == '>') - buf.puts (" >"); - else - buf.puts (">"); - } - } - - /* For C++ methods, append formal parameter type - information, if PHYSNAME. */ - - if (physname && die->tag == DW_TAG_subprogram - && cu->language == language_cplus) - { - struct type *type = read_type_die (die, cu); - - c_type_print_args (type, &buf, 1, cu->language, - &type_print_raw_options); - - if (cu->language == language_cplus) - { - /* Assume that an artificial first parameter is - "this", but do not crash if it is not. RealView - marks unnamed (and thus unused) parameters as - artificial; there is no way to differentiate - the two cases. */ - if (TYPE_NFIELDS (type) > 0 - && TYPE_FIELD_ARTIFICIAL (type, 0) - && TYPE_CODE (TYPE_FIELD_TYPE (type, 0)) == TYPE_CODE_PTR - && TYPE_CONST (TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (type, - 0)))) - buf.puts (" const"); - } - } - - const std::string &intermediate_name = buf.string (); - - if (cu->language == language_cplus) - canonical_name - = dwarf2_canonicalize_name (intermediate_name.c_str (), cu, - &objfile->per_bfd->storage_obstack); - - /* If we only computed INTERMEDIATE_NAME, or if - INTERMEDIATE_NAME is already canonical, then we need to - copy it to the appropriate obstack. */ - if (canonical_name == NULL || canonical_name == intermediate_name.c_str ()) - name = obstack_strdup (&objfile->per_bfd->storage_obstack, - intermediate_name); - else - name = canonical_name; - } - } - - return name; -} - -/* Return the fully qualified name of DIE, based on its DW_AT_name. - If scope qualifiers are appropriate they will be added. The result - will be allocated on the storage_obstack, or NULL if the DIE does - not have a name. NAME may either be from a previous call to - dwarf2_name or NULL. - - The output string will be canonicalized (if C++). */ - -static const char * -dwarf2_full_name (const char *name, struct die_info *die, struct dwarf2_cu *cu) -{ - return dwarf2_compute_name (name, die, cu, 0); -} - -/* Construct a physname for the given DIE in CU. NAME may either be - from a previous call to dwarf2_name or NULL. The result will be - allocated on the objfile_objstack or NULL if the DIE does not have a - name. - - The output string will be canonicalized (if C++). */ - -static const char * -dwarf2_physname (const char *name, struct die_info *die, struct dwarf2_cu *cu) -{ - struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile; - const char *retval, *mangled = NULL, *canon = NULL; - int need_copy = 1; - - /* In this case dwarf2_compute_name is just a shortcut not building anything - on its own. */ - if (!die_needs_namespace (die, cu)) - return dwarf2_compute_name (name, die, cu, 1); - - mangled = dw2_linkage_name (die, cu); - - /* rustc emits invalid values for DW_AT_linkage_name. Ignore these. - See https://github.com/rust-lang/rust/issues/32925. */ - if (cu->language == language_rust && mangled != NULL - && strchr (mangled, '{') != NULL) - mangled = NULL; - - /* DW_AT_linkage_name is missing in some cases - depend on what GDB - has computed. */ - gdb::unique_xmalloc_ptr<char> demangled; - if (mangled != NULL) - { - - if (language_def (cu->language)->la_store_sym_names_in_linkage_form_p) - { - /* Do nothing (do not demangle the symbol name). */ - } - else if (cu->language == language_go) - { - /* This is a lie, but we already lie to the caller new_symbol. - new_symbol assumes we return the mangled name. - This just undoes that lie until things are cleaned up. */ - } - else - { - /* Use DMGL_RET_DROP for C++ template functions to suppress - their return type. It is easier for GDB users to search - for such functions as `name(params)' than `long name(params)'. - In such case the minimal symbol names do not match the full - symbol names but for template functions there is never a need - to look up their definition from their declaration so - the only disadvantage remains the minimal symbol variant - `long name(params)' does not have the proper inferior type. */ - demangled.reset (gdb_demangle (mangled, - (DMGL_PARAMS | DMGL_ANSI - | DMGL_RET_DROP))); - } - if (demangled) - canon = demangled.get (); - else - { - canon = mangled; - need_copy = 0; - } - } - - if (canon == NULL || check_physname) - { - const char *physname = dwarf2_compute_name (name, die, cu, 1); - - if (canon != NULL && strcmp (physname, canon) != 0) - { - /* It may not mean a bug in GDB. The compiler could also - compute DW_AT_linkage_name incorrectly. But in such case - GDB would need to be bug-to-bug compatible. */ - - complaint (_("Computed physname <%s> does not match demangled <%s> " - "(from linkage <%s>) - DIE at %s [in module %s]"), - physname, canon, mangled, sect_offset_str (die->sect_off), - objfile_name (objfile)); - - /* Prefer DW_AT_linkage_name (in the CANON form) - when it - is available here - over computed PHYSNAME. It is safer - against both buggy GDB and buggy compilers. */ - - retval = canon; - } - else - { - retval = physname; - need_copy = 0; - } - } - else - retval = canon; - - if (need_copy) - retval = obstack_strdup (&objfile->per_bfd->storage_obstack, retval); - - return retval; -} - -/* Inspect DIE in CU for a namespace alias. If one exists, record - a new symbol for it. - - Returns 1 if a namespace alias was recorded, 0 otherwise. */ - -static int -read_namespace_alias (struct die_info *die, struct dwarf2_cu *cu) -{ - struct attribute *attr; - - /* If the die does not have a name, this is not a namespace - alias. */ - attr = dwarf2_attr (die, DW_AT_name, cu); - if (attr != NULL) - { - int num; - struct die_info *d = die; - struct dwarf2_cu *imported_cu = cu; - - /* If the compiler has nested DW_AT_imported_declaration DIEs, - keep inspecting DIEs until we hit the underlying import. */ -#define MAX_NESTED_IMPORTED_DECLARATIONS 100 - for (num = 0; num < MAX_NESTED_IMPORTED_DECLARATIONS; ++num) - { - attr = dwarf2_attr (d, DW_AT_import, cu); - if (attr == NULL) - break; - - d = follow_die_ref (d, attr, &imported_cu); - if (d->tag != DW_TAG_imported_declaration) - break; - } - - if (num == MAX_NESTED_IMPORTED_DECLARATIONS) - { - complaint (_("DIE at %s has too many recursively imported " - "declarations"), sect_offset_str (d->sect_off)); - return 0; - } - - if (attr != NULL) - { - struct type *type; - sect_offset sect_off = dwarf2_get_ref_die_offset (attr); - - type = get_die_type_at_offset (sect_off, cu->per_cu); - if (type != NULL && TYPE_CODE (type) == TYPE_CODE_NAMESPACE) - { - /* This declaration is a global namespace alias. Add - a symbol for it whose type is the aliased namespace. */ - new_symbol (die, type, cu); - return 1; - } - } - } - - return 0; -} - -/* Return the using directives repository (global or local?) to use in the - current context for CU. - - For Ada, imported declarations can materialize renamings, which *may* be - global. However it is impossible (for now?) in DWARF to distinguish - "external" imported declarations and "static" ones. As all imported - declarations seem to be static in all other languages, make them all CU-wide - global only in Ada. */ - -static struct using_direct ** -using_directives (struct dwarf2_cu *cu) -{ - if (cu->language == language_ada - && cu->get_builder ()->outermost_context_p ()) - return cu->get_builder ()->get_global_using_directives (); - else - return cu->get_builder ()->get_local_using_directives (); -} - -/* Read the import statement specified by the given die and record it. */ - -static void -read_import_statement (struct die_info *die, struct dwarf2_cu *cu) -{ - struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile; - struct attribute *import_attr; - struct die_info *imported_die, *child_die; - struct dwarf2_cu *imported_cu; - const char *imported_name; - const char *imported_name_prefix; - const char *canonical_name; - const char *import_alias; - const char *imported_declaration = NULL; - const char *import_prefix; - std::vector<const char *> excludes; - - import_attr = dwarf2_attr (die, DW_AT_import, cu); - if (import_attr == NULL) - { - complaint (_("Tag '%s' has no DW_AT_import"), - dwarf_tag_name (die->tag)); - return; - } - - imported_cu = cu; - imported_die = follow_die_ref_or_sig (die, import_attr, &imported_cu); - imported_name = dwarf2_name (imported_die, imported_cu); - if (imported_name == NULL) - { - /* GCC bug: https://bugzilla.redhat.com/show_bug.cgi?id=506524 - - The import in the following code: - namespace A - { - typedef int B; - } - - int main () - { - using A::B; - B b; - return b; - } - - ... - <2><51>: Abbrev Number: 3 (DW_TAG_imported_declaration) - <52> DW_AT_decl_file : 1 - <53> DW_AT_decl_line : 6 - <54> DW_AT_import : <0x75> - <2><58>: Abbrev Number: 4 (DW_TAG_typedef) - <59> DW_AT_name : B - <5b> DW_AT_decl_file : 1 - <5c> DW_AT_decl_line : 2 - <5d> DW_AT_type : <0x6e> - ... - <1><75>: Abbrev Number: 7 (DW_TAG_base_type) - <76> DW_AT_byte_size : 4 - <77> DW_AT_encoding : 5 (signed) - - imports the wrong die ( 0x75 instead of 0x58 ). - This case will be ignored until the gcc bug is fixed. */ - return; - } - - /* Figure out the local name after import. */ - import_alias = dwarf2_name (die, cu); - - /* Figure out where the statement is being imported to. */ - import_prefix = determine_prefix (die, cu); - - /* Figure out what the scope of the imported die is and prepend it - to the name of the imported die. */ - imported_name_prefix = determine_prefix (imported_die, imported_cu); - - if (imported_die->tag != DW_TAG_namespace - && imported_die->tag != DW_TAG_module) - { - imported_declaration = imported_name; - canonical_name = imported_name_prefix; - } - else if (strlen (imported_name_prefix) > 0) - canonical_name = obconcat (&objfile->objfile_obstack, - imported_name_prefix, - (cu->language == language_d ? "." : "::"), - imported_name, (char *) NULL); - else - canonical_name = imported_name; - - if (die->tag == DW_TAG_imported_module && cu->language == language_fortran) - for (child_die = die->child; child_die && child_die->tag; - child_die = sibling_die (child_die)) - { - /* DWARF-4: A Fortran use statement with a “rename list†may be - represented by an imported module entry with an import attribute - referring to the module and owned entries corresponding to those - entities that are renamed as part of being imported. */ - - if (child_die->tag != DW_TAG_imported_declaration) - { - complaint (_("child DW_TAG_imported_declaration expected " - "- DIE at %s [in module %s]"), - sect_offset_str (child_die->sect_off), - objfile_name (objfile)); - continue; - } - - import_attr = dwarf2_attr (child_die, DW_AT_import, cu); - if (import_attr == NULL) - { - complaint (_("Tag '%s' has no DW_AT_import"), - dwarf_tag_name (child_die->tag)); - continue; - } - - imported_cu = cu; - imported_die = follow_die_ref_or_sig (child_die, import_attr, - &imported_cu); - imported_name = dwarf2_name (imported_die, imported_cu); - if (imported_name == NULL) - { - complaint (_("child DW_TAG_imported_declaration has unknown " - "imported name - DIE at %s [in module %s]"), - sect_offset_str (child_die->sect_off), - objfile_name (objfile)); - continue; - } - - excludes.push_back (imported_name); - - process_die (child_die, cu); - } - - add_using_directive (using_directives (cu), - import_prefix, - canonical_name, - import_alias, - imported_declaration, - excludes, - 0, - &objfile->objfile_obstack); -} - -/* ICC<14 does not output the required DW_AT_declaration on incomplete - types, but gives them a size of zero. Starting with version 14, - ICC is compatible with GCC. */ - -static bool -producer_is_icc_lt_14 (struct dwarf2_cu *cu) -{ - if (!cu->checked_producer) - check_producer (cu); - - return cu->producer_is_icc_lt_14; -} - -/* ICC generates a DW_AT_type for C void functions. This was observed on - ICC 14.0.5.212, and appears to be against the DWARF spec (V5 3.3.2) - which says that void functions should not have a DW_AT_type. */ - -static bool -producer_is_icc (struct dwarf2_cu *cu) -{ - if (!cu->checked_producer) - check_producer (cu); - - return cu->producer_is_icc; -} - -/* Check for possibly missing DW_AT_comp_dir with relative .debug_line - directory paths. GCC SVN r127613 (new option -fdebug-prefix-map) fixed - this, it was first present in GCC release 4.3.0. */ - -static bool -producer_is_gcc_lt_4_3 (struct dwarf2_cu *cu) -{ - if (!cu->checked_producer) - check_producer (cu); - - return cu->producer_is_gcc_lt_4_3; -} - -static file_and_directory -find_file_and_directory (struct die_info *die, struct dwarf2_cu *cu) -{ - file_and_directory res; - - /* Find the filename. Do not use dwarf2_name here, since the filename - is not a source language identifier. */ - res.name = dwarf2_string_attr (die, DW_AT_name, cu); - res.comp_dir = dwarf2_string_attr (die, DW_AT_comp_dir, cu); - - if (res.comp_dir == NULL - && producer_is_gcc_lt_4_3 (cu) && res.name != NULL - && IS_ABSOLUTE_PATH (res.name)) - { - res.comp_dir_storage = ldirname (res.name); - if (!res.comp_dir_storage.empty ()) - res.comp_dir = res.comp_dir_storage.c_str (); - } - if (res.comp_dir != NULL) - { - /* Irix 6.2 native cc prepends <machine>.: to the compilation - directory, get rid of it. */ - const char *cp = strchr (res.comp_dir, ':'); - - if (cp && cp != res.comp_dir && cp[-1] == '.' && cp[1] == '/') - res.comp_dir = cp + 1; - } - - if (res.name == NULL) - res.name = "<unknown>"; - - return res; -} - -/* Handle DW_AT_stmt_list for a compilation unit. - DIE is the DW_TAG_compile_unit die for CU. - COMP_DIR is the compilation directory. LOWPC is passed to - dwarf_decode_lines. See dwarf_decode_lines comments about it. */ - -static void -handle_DW_AT_stmt_list (struct die_info *die, struct dwarf2_cu *cu, - const char *comp_dir, CORE_ADDR lowpc) /* ARI: editCase function */ -{ - struct dwarf2_per_objfile *dwarf2_per_objfile - = cu->per_cu->dwarf2_per_objfile; - struct objfile *objfile = dwarf2_per_objfile->objfile; - struct attribute *attr; - struct line_header line_header_local; - hashval_t line_header_local_hash; - void **slot; - int decode_mapping; - - gdb_assert (! cu->per_cu->is_debug_types); - - attr = dwarf2_attr (die, DW_AT_stmt_list, cu); - if (attr == NULL) - return; - - sect_offset line_offset = (sect_offset) DW_UNSND (attr); - - /* The line header hash table is only created if needed (it exists to - prevent redundant reading of the line table for partial_units). - If we're given a partial_unit, we'll need it. If we're given a - compile_unit, then use the line header hash table if it's already - created, but don't create one just yet. */ - - if (dwarf2_per_objfile->line_header_hash == NULL - && die->tag == DW_TAG_partial_unit) - { - dwarf2_per_objfile->line_header_hash - = htab_create_alloc_ex (127, line_header_hash_voidp, - line_header_eq_voidp, - free_line_header_voidp, - &objfile->objfile_obstack, - hashtab_obstack_allocate, - dummy_obstack_deallocate); - } - - line_header_local.sect_off = line_offset; - line_header_local.offset_in_dwz = cu->per_cu->is_dwz; - line_header_local_hash = line_header_hash (&line_header_local); - if (dwarf2_per_objfile->line_header_hash != NULL) - { - slot = htab_find_slot_with_hash (dwarf2_per_objfile->line_header_hash, - &line_header_local, - line_header_local_hash, NO_INSERT); - - /* For DW_TAG_compile_unit we need info like symtab::linetable which - is not present in *SLOT (since if there is something in *SLOT then - it will be for a partial_unit). */ - if (die->tag == DW_TAG_partial_unit && slot != NULL) - { - gdb_assert (*slot != NULL); - cu->line_header = (struct line_header *) *slot; - return; - } - } - - /* dwarf_decode_line_header does not yet provide sufficient information. - We always have to call also dwarf_decode_lines for it. */ - line_header_up lh = dwarf_decode_line_header (line_offset, cu); - if (lh == NULL) - return; - - cu->line_header = lh.release (); - cu->line_header_die_owner = die; - - if (dwarf2_per_objfile->line_header_hash == NULL) - slot = NULL; - else - { - slot = htab_find_slot_with_hash (dwarf2_per_objfile->line_header_hash, - &line_header_local, - line_header_local_hash, INSERT); - gdb_assert (slot != NULL); - } - if (slot != NULL && *slot == NULL) - { - /* This newly decoded line number information unit will be owned - by line_header_hash hash table. */ - *slot = cu->line_header; - cu->line_header_die_owner = NULL; - } - else - { - /* We cannot free any current entry in (*slot) as that struct line_header - may be already used by multiple CUs. Create only temporary decoded - line_header for this CU - it may happen at most once for each line - number information unit. And if we're not using line_header_hash - then this is what we want as well. */ - gdb_assert (die->tag != DW_TAG_partial_unit); - } - decode_mapping = (die->tag != DW_TAG_partial_unit); - dwarf_decode_lines (cu->line_header, comp_dir, cu, NULL, lowpc, - decode_mapping); - -} - -/* Process DW_TAG_compile_unit or DW_TAG_partial_unit. */ - -static void -read_file_scope (struct die_info *die, struct dwarf2_cu *cu) -{ - struct dwarf2_per_objfile *dwarf2_per_objfile - = cu->per_cu->dwarf2_per_objfile; - struct objfile *objfile = dwarf2_per_objfile->objfile; - struct gdbarch *gdbarch = get_objfile_arch (objfile); - CORE_ADDR lowpc = ((CORE_ADDR) -1); - CORE_ADDR highpc = ((CORE_ADDR) 0); - struct attribute *attr; - struct die_info *child_die; - CORE_ADDR baseaddr; - - prepare_one_comp_unit (cu, die, cu->language); - baseaddr = ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile)); - - get_scope_pc_bounds (die, &lowpc, &highpc, cu); - - /* If we didn't find a lowpc, set it to highpc to avoid complaints - from finish_block. */ - if (lowpc == ((CORE_ADDR) -1)) - lowpc = highpc; - lowpc = gdbarch_adjust_dwarf2_addr (gdbarch, lowpc + baseaddr); - - file_and_directory fnd = find_file_and_directory (die, cu); - - /* The XLCL doesn't generate DW_LANG_OpenCL because this attribute is not - standardised yet. As a workaround for the language detection we fall - back to the DW_AT_producer string. */ - if (cu->producer && strstr (cu->producer, "IBM XL C for OpenCL") != NULL) - cu->language = language_opencl; - - /* Similar hack for Go. */ - if (cu->producer && strstr (cu->producer, "GNU Go ") != NULL) - set_cu_language (DW_LANG_Go, cu); - - cu->start_symtab (fnd.name, fnd.comp_dir, lowpc); - - /* Decode line number information if present. We do this before - processing child DIEs, so that the line header table is available - for DW_AT_decl_file. */ - handle_DW_AT_stmt_list (die, cu, fnd.comp_dir, lowpc); - - /* Process all dies in compilation unit. */ - if (die->child != NULL) - { - child_die = die->child; - while (child_die && child_die->tag) - { - process_die (child_die, cu); - child_die = sibling_die (child_die); - } - } - - /* Decode macro information, if present. Dwarf 2 macro information - refers to information in the line number info statement program - header, so we can only read it if we've read the header - successfully. */ - attr = dwarf2_attr (die, DW_AT_macros, cu); - if (attr == NULL) - attr = dwarf2_attr (die, DW_AT_GNU_macros, cu); - if (attr && cu->line_header) - { - if (dwarf2_attr (die, DW_AT_macro_info, cu)) - complaint (_("CU refers to both DW_AT_macros and DW_AT_macro_info")); - - dwarf_decode_macros (cu, DW_UNSND (attr), 1); - } - else - { - attr = dwarf2_attr (die, DW_AT_macro_info, cu); - if (attr && cu->line_header) - { - unsigned int macro_offset = DW_UNSND (attr); - - dwarf_decode_macros (cu, macro_offset, 0); - } - } -} - -void -dwarf2_cu::setup_type_unit_groups (struct die_info *die) -{ - struct type_unit_group *tu_group; - int first_time; - struct attribute *attr; - unsigned int i; - struct signatured_type *sig_type; - - gdb_assert (per_cu->is_debug_types); - sig_type = (struct signatured_type *) per_cu; - - attr = dwarf2_attr (die, DW_AT_stmt_list, this); - - /* If we're using .gdb_index (includes -readnow) then - per_cu->type_unit_group may not have been set up yet. */ - if (sig_type->type_unit_group == NULL) - sig_type->type_unit_group = get_type_unit_group (this, attr); - tu_group = sig_type->type_unit_group; - - /* If we've already processed this stmt_list there's no real need to - do it again, we could fake it and just recreate the part we need - (file name,index -> symtab mapping). If data shows this optimization - is useful we can do it then. */ - first_time = tu_group->compunit_symtab == NULL; - - /* We have to handle the case of both a missing DW_AT_stmt_list or bad - debug info. */ - line_header_up lh; - if (attr != NULL) - { - sect_offset line_offset = (sect_offset) DW_UNSND (attr); - lh = dwarf_decode_line_header (line_offset, this); - } - if (lh == NULL) - { - if (first_time) - start_symtab ("", NULL, 0); - else - { - gdb_assert (tu_group->symtabs == NULL); - gdb_assert (m_builder == nullptr); - struct compunit_symtab *cust = tu_group->compunit_symtab; - m_builder.reset (new struct buildsym_compunit - (COMPUNIT_OBJFILE (cust), "", - COMPUNIT_DIRNAME (cust), - compunit_language (cust), - 0, cust)); - } - return; - } - - line_header = lh.release (); - line_header_die_owner = die; - - if (first_time) - { - struct compunit_symtab *cust = start_symtab ("", NULL, 0); - - /* Note: We don't assign tu_group->compunit_symtab yet because we're - still initializing it, and our caller (a few levels up) - process_full_type_unit still needs to know if this is the first - time. */ - - tu_group->num_symtabs = line_header->file_names_size (); - tu_group->symtabs = XNEWVEC (struct symtab *, - line_header->file_names_size ()); - - auto &file_names = line_header->file_names (); - for (i = 0; i < file_names.size (); ++i) - { - file_entry &fe = file_names[i]; - dwarf2_start_subfile (this, fe.name, - fe.include_dir (line_header)); - buildsym_compunit *b = get_builder (); - if (b->get_current_subfile ()->symtab == NULL) - { - /* NOTE: start_subfile will recognize when it's been - passed a file it has already seen. So we can't - assume there's a simple mapping from - cu->line_header->file_names to subfiles, plus - cu->line_header->file_names may contain dups. */ - b->get_current_subfile ()->symtab - = allocate_symtab (cust, b->get_current_subfile ()->name); - } - - fe.symtab = b->get_current_subfile ()->symtab; - tu_group->symtabs[i] = fe.symtab; - } - } - else - { - gdb_assert (m_builder == nullptr); - struct compunit_symtab *cust = tu_group->compunit_symtab; - m_builder.reset (new struct buildsym_compunit - (COMPUNIT_OBJFILE (cust), "", - COMPUNIT_DIRNAME (cust), - compunit_language (cust), - 0, cust)); - - auto &file_names = line_header->file_names (); - for (i = 0; i < file_names.size (); ++i) - { - file_entry &fe = file_names[i]; - fe.symtab = tu_group->symtabs[i]; - } - } - - /* The main symtab is allocated last. Type units don't have DW_AT_name - so they don't have a "real" (so to speak) symtab anyway. - There is later code that will assign the main symtab to all symbols - that don't have one. We need to handle the case of a symbol with a - missing symtab (DW_AT_decl_file) anyway. */ -} - -/* Process DW_TAG_type_unit. - For TUs we want to skip the first top level sibling if it's not the - actual type being defined by this TU. In this case the first top - level sibling is there to provide context only. */ - -static void -read_type_unit_scope (struct die_info *die, struct dwarf2_cu *cu) -{ - struct die_info *child_die; - - prepare_one_comp_unit (cu, die, language_minimal); - - /* Initialize (or reinitialize) the machinery for building symtabs. - We do this before processing child DIEs, so that the line header table - is available for DW_AT_decl_file. */ - cu->setup_type_unit_groups (die); - - if (die->child != NULL) - { - child_die = die->child; - while (child_die && child_die->tag) - { - process_die (child_die, cu); - child_die = sibling_die (child_die); - } - } -} - -/* DWO/DWP files. - - http://gcc.gnu.org/wiki/DebugFission - http://gcc.gnu.org/wiki/DebugFissionDWP - - To simplify handling of both DWO files ("object" files with the DWARF info) - and DWP files (a file with the DWOs packaged up into one file), we treat - DWP files as having a collection of virtual DWO files. */ - -static hashval_t -hash_dwo_file (const void *item) -{ - const struct dwo_file *dwo_file = (const struct dwo_file *) item; - hashval_t hash; - - hash = htab_hash_string (dwo_file->dwo_name); - if (dwo_file->comp_dir != NULL) - hash += htab_hash_string (dwo_file->comp_dir); - return hash; -} - -static int -eq_dwo_file (const void *item_lhs, const void *item_rhs) -{ - const struct dwo_file *lhs = (const struct dwo_file *) item_lhs; - const struct dwo_file *rhs = (const struct dwo_file *) item_rhs; - - if (strcmp (lhs->dwo_name, rhs->dwo_name) != 0) - return 0; - if (lhs->comp_dir == NULL || rhs->comp_dir == NULL) - return lhs->comp_dir == rhs->comp_dir; - return strcmp (lhs->comp_dir, rhs->comp_dir) == 0; -} - -/* Allocate a hash table for DWO files. */ - -static htab_up -allocate_dwo_file_hash_table (struct objfile *objfile) -{ - auto delete_dwo_file = [] (void *item) - { - struct dwo_file *dwo_file = (struct dwo_file *) item; - - delete dwo_file; - }; - - return htab_up (htab_create_alloc_ex (41, - hash_dwo_file, - eq_dwo_file, - delete_dwo_file, - &objfile->objfile_obstack, - hashtab_obstack_allocate, - dummy_obstack_deallocate)); -} - -/* Lookup DWO file DWO_NAME. */ - -static void ** -lookup_dwo_file_slot (struct dwarf2_per_objfile *dwarf2_per_objfile, - const char *dwo_name, - const char *comp_dir) -{ - struct dwo_file find_entry; - void **slot; - - if (dwarf2_per_objfile->dwo_files == NULL) - dwarf2_per_objfile->dwo_files - = allocate_dwo_file_hash_table (dwarf2_per_objfile->objfile); - - find_entry.dwo_name = dwo_name; - find_entry.comp_dir = comp_dir; - slot = htab_find_slot (dwarf2_per_objfile->dwo_files.get (), &find_entry, - INSERT); - - return slot; -} - -static hashval_t -hash_dwo_unit (const void *item) -{ - const struct dwo_unit *dwo_unit = (const struct dwo_unit *) item; - - /* This drops the top 32 bits of the id, but is ok for a hash. */ - return dwo_unit->signature; -} - -static int -eq_dwo_unit (const void *item_lhs, const void *item_rhs) -{ - const struct dwo_unit *lhs = (const struct dwo_unit *) item_lhs; - const struct dwo_unit *rhs = (const struct dwo_unit *) item_rhs; - - /* The signature is assumed to be unique within the DWO file. - So while object file CU dwo_id's always have the value zero, - that's OK, assuming each object file DWO file has only one CU, - and that's the rule for now. */ - return lhs->signature == rhs->signature; -} - -/* Allocate a hash table for DWO CUs,TUs. - There is one of these tables for each of CUs,TUs for each DWO file. */ - -static htab_t -allocate_dwo_unit_table (struct objfile *objfile) -{ - /* Start out with a pretty small number. - Generally DWO files contain only one CU and maybe some TUs. */ - return htab_create_alloc_ex (3, - hash_dwo_unit, - eq_dwo_unit, - NULL, - &objfile->objfile_obstack, - hashtab_obstack_allocate, - dummy_obstack_deallocate); -} - -/* Structure used to pass data to create_dwo_debug_info_hash_table_reader. */ - -struct create_dwo_cu_data -{ - struct dwo_file *dwo_file; - struct dwo_unit dwo_unit; -}; - -/* die_reader_func for create_dwo_cu. */ - -static void -create_dwo_cu_reader (const struct die_reader_specs *reader, - const gdb_byte *info_ptr, - struct die_info *comp_unit_die, - int has_children, - void *datap) -{ - struct dwarf2_cu *cu = reader->cu; - sect_offset sect_off = cu->per_cu->sect_off; - struct dwarf2_section_info *section = cu->per_cu->section; - struct create_dwo_cu_data *data = (struct create_dwo_cu_data *) datap; - struct dwo_file *dwo_file = data->dwo_file; - struct dwo_unit *dwo_unit = &data->dwo_unit; - - gdb::optional<ULONGEST> signature = lookup_dwo_id (cu, comp_unit_die); - if (!signature.has_value ()) - { - complaint (_("Dwarf Error: debug entry at offset %s is missing" - " its dwo_id [in module %s]"), - sect_offset_str (sect_off), dwo_file->dwo_name); - return; - } - - dwo_unit->dwo_file = dwo_file; - dwo_unit->signature = *signature; - dwo_unit->section = section; - dwo_unit->sect_off = sect_off; - dwo_unit->length = cu->per_cu->length; - - if (dwarf_read_debug) - fprintf_unfiltered (gdb_stdlog, " offset %s, dwo_id %s\n", - sect_offset_str (sect_off), - hex_string (dwo_unit->signature)); -} - -/* Create the dwo_units for the CUs in a DWO_FILE. - Note: This function processes DWO files only, not DWP files. */ - -static void -create_cus_hash_table (struct dwarf2_per_objfile *dwarf2_per_objfile, - struct dwo_file &dwo_file, dwarf2_section_info §ion, - htab_t &cus_htab) -{ - struct objfile *objfile = dwarf2_per_objfile->objfile; - const gdb_byte *info_ptr, *end_ptr; - - dwarf2_read_section (objfile, §ion); - info_ptr = section.buffer; - - if (info_ptr == NULL) - return; - - if (dwarf_read_debug) - { - fprintf_unfiltered (gdb_stdlog, "Reading %s for %s:\n", - get_section_name (§ion), - get_section_file_name (§ion)); - } - - end_ptr = info_ptr + section.size; - while (info_ptr < end_ptr) - { - struct dwarf2_per_cu_data per_cu; - struct create_dwo_cu_data create_dwo_cu_data; - struct dwo_unit *dwo_unit; - void **slot; - sect_offset sect_off = (sect_offset) (info_ptr - section.buffer); - - memset (&create_dwo_cu_data.dwo_unit, 0, - sizeof (create_dwo_cu_data.dwo_unit)); - memset (&per_cu, 0, sizeof (per_cu)); - per_cu.dwarf2_per_objfile = dwarf2_per_objfile; - per_cu.is_debug_types = 0; - per_cu.sect_off = sect_offset (info_ptr - section.buffer); - per_cu.section = §ion; - create_dwo_cu_data.dwo_file = &dwo_file; - - init_cutu_and_read_dies_no_follow ( - &per_cu, &dwo_file, create_dwo_cu_reader, &create_dwo_cu_data); - info_ptr += per_cu.length; - - // If the unit could not be parsed, skip it. - if (create_dwo_cu_data.dwo_unit.dwo_file == NULL) - continue; - - if (cus_htab == NULL) - cus_htab = allocate_dwo_unit_table (objfile); - - dwo_unit = OBSTACK_ZALLOC (&objfile->objfile_obstack, struct dwo_unit); - *dwo_unit = create_dwo_cu_data.dwo_unit; - slot = htab_find_slot (cus_htab, dwo_unit, INSERT); - gdb_assert (slot != NULL); - if (*slot != NULL) - { - const struct dwo_unit *dup_cu = (const struct dwo_unit *)*slot; - sect_offset dup_sect_off = dup_cu->sect_off; - - complaint (_("debug cu entry at offset %s is duplicate to" - " the entry at offset %s, signature %s"), - sect_offset_str (sect_off), sect_offset_str (dup_sect_off), - hex_string (dwo_unit->signature)); - } - *slot = (void *)dwo_unit; - } -} - -/* DWP file .debug_{cu,tu}_index section format: - [ref: http://gcc.gnu.org/wiki/DebugFissionDWP] - - DWP Version 1: - - Both index sections have the same format, and serve to map a 64-bit - signature to a set of section numbers. Each section begins with a header, - followed by a hash table of 64-bit signatures, a parallel table of 32-bit - indexes, and a pool of 32-bit section numbers. The index sections will be - aligned at 8-byte boundaries in the file. - - The index section header consists of: - - V, 32 bit version number - -, 32 bits unused - N, 32 bit number of compilation units or type units in the index - M, 32 bit number of slots in the hash table - - Numbers are recorded using the byte order of the application binary. - - The hash table begins at offset 16 in the section, and consists of an array - of M 64-bit slots. Each slot contains a 64-bit signature (using the byte - order of the application binary). Unused slots in the hash table are 0. - (We rely on the extreme unlikeliness of a signature being exactly 0.) - - The parallel table begins immediately after the hash table - (at offset 16 + 8 * M from the beginning of the section), and consists of an - array of 32-bit indexes (using the byte order of the application binary), - corresponding 1-1 with slots in the hash table. Each entry in the parallel - table contains a 32-bit index into the pool of section numbers. For unused - hash table slots, the corresponding entry in the parallel table will be 0. - - The pool of section numbers begins immediately following the hash table - (at offset 16 + 12 * M from the beginning of the section). The pool of - section numbers consists of an array of 32-bit words (using the byte order - of the application binary). Each item in the array is indexed starting - from 0. The hash table entry provides the index of the first section - number in the set. Additional section numbers in the set follow, and the - set is terminated by a 0 entry (section number 0 is not used in ELF). - - In each set of section numbers, the .debug_info.dwo or .debug_types.dwo - section must be the first entry in the set, and the .debug_abbrev.dwo must - be the second entry. Other members of the set may follow in any order. - - --- - - DWP Version 2: - - DWP Version 2 combines all the .debug_info, etc. sections into one, - and the entries in the index tables are now offsets into these sections. - CU offsets begin at 0. TU offsets begin at the size of the .debug_info - section. - - Index Section Contents: - Header - Hash Table of Signatures dwp_hash_table.hash_table - Parallel Table of Indices dwp_hash_table.unit_table - Table of Section Offsets dwp_hash_table.v2.{section_ids,offsets} - Table of Section Sizes dwp_hash_table.v2.sizes - - The index section header consists of: - - V, 32 bit version number - L, 32 bit number of columns in the table of section offsets - N, 32 bit number of compilation units or type units in the index - M, 32 bit number of slots in the hash table - - Numbers are recorded using the byte order of the application binary. - - The hash table has the same format as version 1. - The parallel table of indices has the same format as version 1, - except that the entries are origin-1 indices into the table of sections - offsets and the table of section sizes. - - The table of offsets begins immediately following the parallel table - (at offset 16 + 12 * M from the beginning of the section). The table is - a two-dimensional array of 32-bit words (using the byte order of the - application binary), with L columns and N+1 rows, in row-major order. - Each row in the array is indexed starting from 0. The first row provides - a key to the remaining rows: each column in this row provides an identifier - for a debug section, and the offsets in the same column of subsequent rows - refer to that section. The section identifiers are: - - DW_SECT_INFO 1 .debug_info.dwo - DW_SECT_TYPES 2 .debug_types.dwo - DW_SECT_ABBREV 3 .debug_abbrev.dwo - DW_SECT_LINE 4 .debug_line.dwo - DW_SECT_LOC 5 .debug_loc.dwo - DW_SECT_STR_OFFSETS 6 .debug_str_offsets.dwo - DW_SECT_MACINFO 7 .debug_macinfo.dwo - DW_SECT_MACRO 8 .debug_macro.dwo - - The offsets provided by the CU and TU index sections are the base offsets - for the contributions made by each CU or TU to the corresponding section - in the package file. Each CU and TU header contains an abbrev_offset - field, used to find the abbreviations table for that CU or TU within the - contribution to the .debug_abbrev.dwo section for that CU or TU, and should - be interpreted as relative to the base offset given in the index section. - Likewise, offsets into .debug_line.dwo from DW_AT_stmt_list attributes - should be interpreted as relative to the base offset for .debug_line.dwo, - and offsets into other debug sections obtained from DWARF attributes should - also be interpreted as relative to the corresponding base offset. - - The table of sizes begins immediately following the table of offsets. - Like the table of offsets, it is a two-dimensional array of 32-bit words, - with L columns and N rows, in row-major order. Each row in the array is - indexed starting from 1 (row 0 is shared by the two tables). - - --- - - Hash table lookup is handled the same in version 1 and 2: - - We assume that N and M will not exceed 2^32 - 1. - The size of the hash table, M, must be 2^k such that 2^k > 3*N/2. - - Given a 64-bit compilation unit signature or a type signature S, an entry - in the hash table is located as follows: - - 1) Calculate a primary hash H = S & MASK(k), where MASK(k) is a mask with - the low-order k bits all set to 1. - - 2) Calculate a secondary hash H' = (((S >> 32) & MASK(k)) | 1). - - 3) If the hash table entry at index H matches the signature, use that - entry. If the hash table entry at index H is unused (all zeroes), - terminate the search: the signature is not present in the table. - - 4) Let H = (H + H') modulo M. Repeat at Step 3. - - Because M > N and H' and M are relatively prime, the search is guaranteed - to stop at an unused slot or find the match. */ - -/* Create a hash table to map DWO IDs to their CU/TU entry in - .debug_{info,types}.dwo in DWP_FILE. - Returns NULL if there isn't one. - Note: This function processes DWP files only, not DWO files. */ - -static struct dwp_hash_table * -create_dwp_hash_table (struct dwarf2_per_objfile *dwarf2_per_objfile, - struct dwp_file *dwp_file, int is_debug_types) -{ - struct objfile *objfile = dwarf2_per_objfile->objfile; - bfd *dbfd = dwp_file->dbfd.get (); - const gdb_byte *index_ptr, *index_end; - struct dwarf2_section_info *index; - uint32_t version, nr_columns, nr_units, nr_slots; - struct dwp_hash_table *htab; - - if (is_debug_types) - index = &dwp_file->sections.tu_index; - else - index = &dwp_file->sections.cu_index; - - if (dwarf2_section_empty_p (index)) - return NULL; - dwarf2_read_section (objfile, index); - - index_ptr = index->buffer; - index_end = index_ptr + index->size; - - version = read_4_bytes (dbfd, index_ptr); - index_ptr += 4; - if (version == 2) - nr_columns = read_4_bytes (dbfd, index_ptr); - else - nr_columns = 0; - index_ptr += 4; - nr_units = read_4_bytes (dbfd, index_ptr); - index_ptr += 4; - nr_slots = read_4_bytes (dbfd, index_ptr); - index_ptr += 4; - - if (version != 1 && version != 2) - { - error (_("Dwarf Error: unsupported DWP file version (%s)" - " [in module %s]"), - pulongest (version), dwp_file->name); - } - if (nr_slots != (nr_slots & -nr_slots)) - { - error (_("Dwarf Error: number of slots in DWP hash table (%s)" - " is not power of 2 [in module %s]"), - pulongest (nr_slots), dwp_file->name); - } - - htab = OBSTACK_ZALLOC (&objfile->objfile_obstack, struct dwp_hash_table); - htab->version = version; - htab->nr_columns = nr_columns; - htab->nr_units = nr_units; - htab->nr_slots = nr_slots; - htab->hash_table = index_ptr; - htab->unit_table = htab->hash_table + sizeof (uint64_t) * nr_slots; - - /* Exit early if the table is empty. */ - if (nr_slots == 0 || nr_units == 0 - || (version == 2 && nr_columns == 0)) - { - /* All must be zero. */ - if (nr_slots != 0 || nr_units != 0 - || (version == 2 && nr_columns != 0)) - { - complaint (_("Empty DWP but nr_slots,nr_units,nr_columns not" - " all zero [in modules %s]"), - dwp_file->name); - } - return htab; - } - - if (version == 1) - { - htab->section_pool.v1.indices = - htab->unit_table + sizeof (uint32_t) * nr_slots; - /* It's harder to decide whether the section is too small in v1. - V1 is deprecated anyway so we punt. */ - } - else - { - const gdb_byte *ids_ptr = htab->unit_table + sizeof (uint32_t) * nr_slots; - int *ids = htab->section_pool.v2.section_ids; - size_t sizeof_ids = sizeof (htab->section_pool.v2.section_ids); - /* Reverse map for error checking. */ - int ids_seen[DW_SECT_MAX + 1]; - int i; - - if (nr_columns < 2) - { - error (_("Dwarf Error: bad DWP hash table, too few columns" - " in section table [in module %s]"), - dwp_file->name); - } - if (nr_columns > MAX_NR_V2_DWO_SECTIONS) - { - error (_("Dwarf Error: bad DWP hash table, too many columns" - " in section table [in module %s]"), - dwp_file->name); - } - memset (ids, 255, sizeof_ids); - memset (ids_seen, 255, sizeof (ids_seen)); - for (i = 0; i < nr_columns; ++i) - { - int id = read_4_bytes (dbfd, ids_ptr + i * sizeof (uint32_t)); - - if (id < DW_SECT_MIN || id > DW_SECT_MAX) - { - error (_("Dwarf Error: bad DWP hash table, bad section id %d" - " in section table [in module %s]"), - id, dwp_file->name); - } - if (ids_seen[id] != -1) - { - error (_("Dwarf Error: bad DWP hash table, duplicate section" - " id %d in section table [in module %s]"), - id, dwp_file->name); - } - ids_seen[id] = i; - ids[i] = id; - } - /* Must have exactly one info or types section. */ - if (((ids_seen[DW_SECT_INFO] != -1) - + (ids_seen[DW_SECT_TYPES] != -1)) - != 1) - { - error (_("Dwarf Error: bad DWP hash table, missing/duplicate" - " DWO info/types section [in module %s]"), - dwp_file->name); - } - /* Must have an abbrev section. */ - if (ids_seen[DW_SECT_ABBREV] == -1) - { - error (_("Dwarf Error: bad DWP hash table, missing DWO abbrev" - " section [in module %s]"), - dwp_file->name); - } - htab->section_pool.v2.offsets = ids_ptr + sizeof (uint32_t) * nr_columns; - htab->section_pool.v2.sizes = - htab->section_pool.v2.offsets + (sizeof (uint32_t) - * nr_units * nr_columns); - if ((htab->section_pool.v2.sizes + (sizeof (uint32_t) - * nr_units * nr_columns)) - > index_end) - { - error (_("Dwarf Error: DWP index section is corrupt (too small)" - " [in module %s]"), - dwp_file->name); - } - } - - return htab; -} - -/* Update SECTIONS with the data from SECTP. - - This function is like the other "locate" section routines that are - passed to bfd_map_over_sections, but in this context the sections to - read comes from the DWP V1 hash table, not the full ELF section table. - - The result is non-zero for success, or zero if an error was found. */ - -static int -locate_v1_virtual_dwo_sections (asection *sectp, - struct virtual_v1_dwo_sections *sections) -{ - const struct dwop_section_names *names = &dwop_section_names; - - if (section_is_p (sectp->name, &names->abbrev_dwo)) - { - /* There can be only one. */ - if (sections->abbrev.s.section != NULL) - return 0; - sections->abbrev.s.section = sectp; - sections->abbrev.size = bfd_section_size (sectp); - } - else if (section_is_p (sectp->name, &names->info_dwo) - || section_is_p (sectp->name, &names->types_dwo)) - { - /* There can be only one. */ - if (sections->info_or_types.s.section != NULL) - return 0; - sections->info_or_types.s.section = sectp; - sections->info_or_types.size = bfd_section_size (sectp); - } - else if (section_is_p (sectp->name, &names->line_dwo)) - { - /* There can be only one. */ - if (sections->line.s.section != NULL) - return 0; - sections->line.s.section = sectp; - sections->line.size = bfd_section_size (sectp); - } - else if (section_is_p (sectp->name, &names->loc_dwo)) - { - /* There can be only one. */ - if (sections->loc.s.section != NULL) - return 0; - sections->loc.s.section = sectp; - sections->loc.size = bfd_section_size (sectp); - } - else if (section_is_p (sectp->name, &names->macinfo_dwo)) - { - /* There can be only one. */ - if (sections->macinfo.s.section != NULL) - return 0; - sections->macinfo.s.section = sectp; - sections->macinfo.size = bfd_section_size (sectp); - } - else if (section_is_p (sectp->name, &names->macro_dwo)) - { - /* There can be only one. */ - if (sections->macro.s.section != NULL) - return 0; - sections->macro.s.section = sectp; - sections->macro.size = bfd_section_size (sectp); - } - else if (section_is_p (sectp->name, &names->str_offsets_dwo)) - { - /* There can be only one. */ - if (sections->str_offsets.s.section != NULL) - return 0; - sections->str_offsets.s.section = sectp; - sections->str_offsets.size = bfd_section_size (sectp); - } - else - { - /* No other kind of section is valid. */ - return 0; - } - - return 1; -} - -/* Create a dwo_unit object for the DWO unit with signature SIGNATURE. - UNIT_INDEX is the index of the DWO unit in the DWP hash table. - COMP_DIR is the DW_AT_comp_dir attribute of the referencing CU. - This is for DWP version 1 files. */ - -static struct dwo_unit * -create_dwo_unit_in_dwp_v1 (struct dwarf2_per_objfile *dwarf2_per_objfile, - struct dwp_file *dwp_file, - uint32_t unit_index, - const char *comp_dir, - ULONGEST signature, int is_debug_types) -{ - struct objfile *objfile = dwarf2_per_objfile->objfile; - const struct dwp_hash_table *dwp_htab = - is_debug_types ? dwp_file->tus : dwp_file->cus; - bfd *dbfd = dwp_file->dbfd.get (); - const char *kind = is_debug_types ? "TU" : "CU"; - struct dwo_file *dwo_file; - struct dwo_unit *dwo_unit; - struct virtual_v1_dwo_sections sections; - void **dwo_file_slot; - int i; - - gdb_assert (dwp_file->version == 1); - - if (dwarf_read_debug) - { - fprintf_unfiltered (gdb_stdlog, "Reading %s %s/%s in DWP V1 file: %s\n", - kind, - pulongest (unit_index), hex_string (signature), - dwp_file->name); - } - - /* Fetch the sections of this DWO unit. - Put a limit on the number of sections we look for so that bad data - doesn't cause us to loop forever. */ - -#define MAX_NR_V1_DWO_SECTIONS \ - (1 /* .debug_info or .debug_types */ \ - + 1 /* .debug_abbrev */ \ - + 1 /* .debug_line */ \ - + 1 /* .debug_loc */ \ - + 1 /* .debug_str_offsets */ \ - + 1 /* .debug_macro or .debug_macinfo */ \ - + 1 /* trailing zero */) - - memset (§ions, 0, sizeof (sections)); - - for (i = 0; i < MAX_NR_V1_DWO_SECTIONS; ++i) - { - asection *sectp; - uint32_t section_nr = - read_4_bytes (dbfd, - dwp_htab->section_pool.v1.indices - + (unit_index + i) * sizeof (uint32_t)); - - if (section_nr == 0) - break; - if (section_nr >= dwp_file->num_sections) - { - error (_("Dwarf Error: bad DWP hash table, section number too large" - " [in module %s]"), - dwp_file->name); - } - - sectp = dwp_file->elf_sections[section_nr]; - if (! locate_v1_virtual_dwo_sections (sectp, §ions)) - { - error (_("Dwarf Error: bad DWP hash table, invalid section found" - " [in module %s]"), - dwp_file->name); - } - } - - if (i < 2 - || dwarf2_section_empty_p (§ions.info_or_types) - || dwarf2_section_empty_p (§ions.abbrev)) - { - error (_("Dwarf Error: bad DWP hash table, missing DWO sections" - " [in module %s]"), - dwp_file->name); - } - if (i == MAX_NR_V1_DWO_SECTIONS) - { - error (_("Dwarf Error: bad DWP hash table, too many DWO sections" - " [in module %s]"), - dwp_file->name); - } - - /* It's easier for the rest of the code if we fake a struct dwo_file and - have dwo_unit "live" in that. At least for now. - - The DWP file can be made up of a random collection of CUs and TUs. - However, for each CU + set of TUs that came from the same original DWO - file, we can combine them back into a virtual DWO file to save space - (fewer struct dwo_file objects to allocate). Remember that for really - large apps there can be on the order of 8K CUs and 200K TUs, or more. */ - - std::string virtual_dwo_name = - string_printf ("virtual-dwo/%d-%d-%d-%d", - get_section_id (§ions.abbrev), - get_section_id (§ions.line), - get_section_id (§ions.loc), - get_section_id (§ions.str_offsets)); - /* Can we use an existing virtual DWO file? */ - dwo_file_slot = lookup_dwo_file_slot (dwarf2_per_objfile, - virtual_dwo_name.c_str (), - comp_dir); - /* Create one if necessary. */ - if (*dwo_file_slot == NULL) - { - if (dwarf_read_debug) - { - fprintf_unfiltered (gdb_stdlog, "Creating virtual DWO: %s\n", - virtual_dwo_name.c_str ()); - } - dwo_file = new struct dwo_file; - dwo_file->dwo_name = obstack_strdup (&objfile->objfile_obstack, - virtual_dwo_name); - dwo_file->comp_dir = comp_dir; - dwo_file->sections.abbrev = sections.abbrev; - dwo_file->sections.line = sections.line; - dwo_file->sections.loc = sections.loc; - dwo_file->sections.macinfo = sections.macinfo; - dwo_file->sections.macro = sections.macro; - dwo_file->sections.str_offsets = sections.str_offsets; - /* The "str" section is global to the entire DWP file. */ - dwo_file->sections.str = dwp_file->sections.str; - /* The info or types section is assigned below to dwo_unit, - there's no need to record it in dwo_file. - Also, we can't simply record type sections in dwo_file because - we record a pointer into the vector in dwo_unit. As we collect more - types we'll grow the vector and eventually have to reallocate space - for it, invalidating all copies of pointers into the previous - contents. */ - *dwo_file_slot = dwo_file; - } - else - { - if (dwarf_read_debug) - { - fprintf_unfiltered (gdb_stdlog, "Using existing virtual DWO: %s\n", - virtual_dwo_name.c_str ()); - } - dwo_file = (struct dwo_file *) *dwo_file_slot; - } - - dwo_unit = OBSTACK_ZALLOC (&objfile->objfile_obstack, struct dwo_unit); - dwo_unit->dwo_file = dwo_file; - dwo_unit->signature = signature; - dwo_unit->section = - XOBNEW (&objfile->objfile_obstack, struct dwarf2_section_info); - *dwo_unit->section = sections.info_or_types; - /* dwo_unit->{offset,length,type_offset_in_tu} are set later. */ - - return dwo_unit; -} - -/* Subroutine of create_dwo_unit_in_dwp_v2 to simplify it. - Given a pointer to the containing section SECTION, and OFFSET,SIZE of the - piece within that section used by a TU/CU, return a virtual section - of just that piece. */ - -static struct dwarf2_section_info -create_dwp_v2_section (struct dwarf2_per_objfile *dwarf2_per_objfile, - struct dwarf2_section_info *section, - bfd_size_type offset, bfd_size_type size) -{ - struct dwarf2_section_info result; - asection *sectp; - - gdb_assert (section != NULL); - gdb_assert (!section->is_virtual); - - memset (&result, 0, sizeof (result)); - result.s.containing_section = section; - result.is_virtual = true; - - if (size == 0) - return result; - - sectp = get_section_bfd_section (section); - - /* Flag an error if the piece denoted by OFFSET,SIZE is outside the - bounds of the real section. This is a pretty-rare event, so just - flag an error (easier) instead of a warning and trying to cope. */ - if (sectp == NULL - || offset + size > bfd_section_size (sectp)) - { - error (_("Dwarf Error: Bad DWP V2 section info, doesn't fit" - " in section %s [in module %s]"), - sectp ? bfd_section_name (sectp) : "<unknown>", - objfile_name (dwarf2_per_objfile->objfile)); - } - - result.virtual_offset = offset; - result.size = size; - return result; -} - -/* Create a dwo_unit object for the DWO unit with signature SIGNATURE. - UNIT_INDEX is the index of the DWO unit in the DWP hash table. - COMP_DIR is the DW_AT_comp_dir attribute of the referencing CU. - This is for DWP version 2 files. */ - -static struct dwo_unit * -create_dwo_unit_in_dwp_v2 (struct dwarf2_per_objfile *dwarf2_per_objfile, - struct dwp_file *dwp_file, - uint32_t unit_index, - const char *comp_dir, - ULONGEST signature, int is_debug_types) -{ - struct objfile *objfile = dwarf2_per_objfile->objfile; - const struct dwp_hash_table *dwp_htab = - is_debug_types ? dwp_file->tus : dwp_file->cus; - bfd *dbfd = dwp_file->dbfd.get (); - const char *kind = is_debug_types ? "TU" : "CU"; - struct dwo_file *dwo_file; - struct dwo_unit *dwo_unit; - struct virtual_v2_dwo_sections sections; - void **dwo_file_slot; - int i; - - gdb_assert (dwp_file->version == 2); - - if (dwarf_read_debug) - { - fprintf_unfiltered (gdb_stdlog, "Reading %s %s/%s in DWP V2 file: %s\n", - kind, - pulongest (unit_index), hex_string (signature), - dwp_file->name); - } - - /* Fetch the section offsets of this DWO unit. */ - - memset (§ions, 0, sizeof (sections)); - - for (i = 0; i < dwp_htab->nr_columns; ++i) - { - uint32_t offset = read_4_bytes (dbfd, - dwp_htab->section_pool.v2.offsets - + (((unit_index - 1) * dwp_htab->nr_columns - + i) - * sizeof (uint32_t))); - uint32_t size = read_4_bytes (dbfd, - dwp_htab->section_pool.v2.sizes - + (((unit_index - 1) * dwp_htab->nr_columns - + i) - * sizeof (uint32_t))); - - switch (dwp_htab->section_pool.v2.section_ids[i]) - { - case DW_SECT_INFO: - case DW_SECT_TYPES: - sections.info_or_types_offset = offset; - sections.info_or_types_size = size; - break; - case DW_SECT_ABBREV: - sections.abbrev_offset = offset; - sections.abbrev_size = size; - break; - case DW_SECT_LINE: - sections.line_offset = offset; - sections.line_size = size; - break; - case DW_SECT_LOC: - sections.loc_offset = offset; - sections.loc_size = size; - break; - case DW_SECT_STR_OFFSETS: - sections.str_offsets_offset = offset; - sections.str_offsets_size = size; - break; - case DW_SECT_MACINFO: - sections.macinfo_offset = offset; - sections.macinfo_size = size; - break; - case DW_SECT_MACRO: - sections.macro_offset = offset; - sections.macro_size = size; - break; - } - } - - /* It's easier for the rest of the code if we fake a struct dwo_file and - have dwo_unit "live" in that. At least for now. - - The DWP file can be made up of a random collection of CUs and TUs. - However, for each CU + set of TUs that came from the same original DWO - file, we can combine them back into a virtual DWO file to save space - (fewer struct dwo_file objects to allocate). Remember that for really - large apps there can be on the order of 8K CUs and 200K TUs, or more. */ - - std::string virtual_dwo_name = - string_printf ("virtual-dwo/%ld-%ld-%ld-%ld", - (long) (sections.abbrev_size ? sections.abbrev_offset : 0), - (long) (sections.line_size ? sections.line_offset : 0), - (long) (sections.loc_size ? sections.loc_offset : 0), - (long) (sections.str_offsets_size - ? sections.str_offsets_offset : 0)); - /* Can we use an existing virtual DWO file? */ - dwo_file_slot = lookup_dwo_file_slot (dwarf2_per_objfile, - virtual_dwo_name.c_str (), - comp_dir); - /* Create one if necessary. */ - if (*dwo_file_slot == NULL) - { - if (dwarf_read_debug) - { - fprintf_unfiltered (gdb_stdlog, "Creating virtual DWO: %s\n", - virtual_dwo_name.c_str ()); - } - dwo_file = new struct dwo_file; - dwo_file->dwo_name = obstack_strdup (&objfile->objfile_obstack, - virtual_dwo_name); - dwo_file->comp_dir = comp_dir; - dwo_file->sections.abbrev = - create_dwp_v2_section (dwarf2_per_objfile, &dwp_file->sections.abbrev, - sections.abbrev_offset, sections.abbrev_size); - dwo_file->sections.line = - create_dwp_v2_section (dwarf2_per_objfile, &dwp_file->sections.line, - sections.line_offset, sections.line_size); - dwo_file->sections.loc = - create_dwp_v2_section (dwarf2_per_objfile, &dwp_file->sections.loc, - sections.loc_offset, sections.loc_size); - dwo_file->sections.macinfo = - create_dwp_v2_section (dwarf2_per_objfile, &dwp_file->sections.macinfo, - sections.macinfo_offset, sections.macinfo_size); - dwo_file->sections.macro = - create_dwp_v2_section (dwarf2_per_objfile, &dwp_file->sections.macro, - sections.macro_offset, sections.macro_size); - dwo_file->sections.str_offsets = - create_dwp_v2_section (dwarf2_per_objfile, - &dwp_file->sections.str_offsets, - sections.str_offsets_offset, - sections.str_offsets_size); - /* The "str" section is global to the entire DWP file. */ - dwo_file->sections.str = dwp_file->sections.str; - /* The info or types section is assigned below to dwo_unit, - there's no need to record it in dwo_file. - Also, we can't simply record type sections in dwo_file because - we record a pointer into the vector in dwo_unit. As we collect more - types we'll grow the vector and eventually have to reallocate space - for it, invalidating all copies of pointers into the previous - contents. */ - *dwo_file_slot = dwo_file; - } - else - { - if (dwarf_read_debug) - { - fprintf_unfiltered (gdb_stdlog, "Using existing virtual DWO: %s\n", - virtual_dwo_name.c_str ()); - } - dwo_file = (struct dwo_file *) *dwo_file_slot; - } - - dwo_unit = OBSTACK_ZALLOC (&objfile->objfile_obstack, struct dwo_unit); - dwo_unit->dwo_file = dwo_file; - dwo_unit->signature = signature; - dwo_unit->section = - XOBNEW (&objfile->objfile_obstack, struct dwarf2_section_info); - *dwo_unit->section = create_dwp_v2_section (dwarf2_per_objfile, - is_debug_types - ? &dwp_file->sections.types - : &dwp_file->sections.info, - sections.info_or_types_offset, - sections.info_or_types_size); - /* dwo_unit->{offset,length,type_offset_in_tu} are set later. */ - - return dwo_unit; -} - -/* Lookup the DWO unit with SIGNATURE in DWP_FILE. - Returns NULL if the signature isn't found. */ - -static struct dwo_unit * -lookup_dwo_unit_in_dwp (struct dwarf2_per_objfile *dwarf2_per_objfile, - struct dwp_file *dwp_file, const char *comp_dir, - ULONGEST signature, int is_debug_types) -{ - const struct dwp_hash_table *dwp_htab = - is_debug_types ? dwp_file->tus : dwp_file->cus; - bfd *dbfd = dwp_file->dbfd.get (); - uint32_t mask = dwp_htab->nr_slots - 1; - uint32_t hash = signature & mask; - uint32_t hash2 = ((signature >> 32) & mask) | 1; - unsigned int i; - void **slot; - struct dwo_unit find_dwo_cu; - - memset (&find_dwo_cu, 0, sizeof (find_dwo_cu)); - find_dwo_cu.signature = signature; - slot = htab_find_slot (is_debug_types - ? dwp_file->loaded_tus - : dwp_file->loaded_cus, - &find_dwo_cu, INSERT); - - if (*slot != NULL) - return (struct dwo_unit *) *slot; - - /* Use a for loop so that we don't loop forever on bad debug info. */ - for (i = 0; i < dwp_htab->nr_slots; ++i) - { - ULONGEST signature_in_table; - - signature_in_table = - read_8_bytes (dbfd, dwp_htab->hash_table + hash * sizeof (uint64_t)); - if (signature_in_table == signature) - { - uint32_t unit_index = - read_4_bytes (dbfd, - dwp_htab->unit_table + hash * sizeof (uint32_t)); - - if (dwp_file->version == 1) - { - *slot = create_dwo_unit_in_dwp_v1 (dwarf2_per_objfile, - dwp_file, unit_index, - comp_dir, signature, - is_debug_types); - } - else - { - *slot = create_dwo_unit_in_dwp_v2 (dwarf2_per_objfile, - dwp_file, unit_index, - comp_dir, signature, - is_debug_types); - } - return (struct dwo_unit *) *slot; - } - if (signature_in_table == 0) - return NULL; - hash = (hash + hash2) & mask; - } - - error (_("Dwarf Error: bad DWP hash table, lookup didn't terminate" - " [in module %s]"), - dwp_file->name); -} - -/* Subroutine of open_dwo_file,open_dwp_file to simplify them. - Open the file specified by FILE_NAME and hand it off to BFD for - preliminary analysis. Return a newly initialized bfd *, which - includes a canonicalized copy of FILE_NAME. - If IS_DWP is TRUE, we're opening a DWP file, otherwise a DWO file. - SEARCH_CWD is true if the current directory is to be searched. - It will be searched before debug-file-directory. - If successful, the file is added to the bfd include table of the - objfile's bfd (see gdb_bfd_record_inclusion). - If unable to find/open the file, return NULL. - NOTE: This function is derived from symfile_bfd_open. */ - -static gdb_bfd_ref_ptr -try_open_dwop_file (struct dwarf2_per_objfile *dwarf2_per_objfile, - const char *file_name, int is_dwp, int search_cwd) -{ - int desc; - /* Blech. OPF_TRY_CWD_FIRST also disables searching the path list if - FILE_NAME contains a '/'. So we can't use it. Instead prepend "." - to debug_file_directory. */ - const char *search_path; - static const char dirname_separator_string[] = { DIRNAME_SEPARATOR, '\0' }; - - gdb::unique_xmalloc_ptr<char> search_path_holder; - if (search_cwd) - { - if (*debug_file_directory != '\0') - { - search_path_holder.reset (concat (".", dirname_separator_string, - debug_file_directory, - (char *) NULL)); - search_path = search_path_holder.get (); - } - else - search_path = "."; - } - else - search_path = debug_file_directory; - - openp_flags flags = OPF_RETURN_REALPATH; - if (is_dwp) - flags |= OPF_SEARCH_IN_PATH; - - gdb::unique_xmalloc_ptr<char> absolute_name; - desc = openp (search_path, flags, file_name, - O_RDONLY | O_BINARY, &absolute_name); - if (desc < 0) - return NULL; - - gdb_bfd_ref_ptr sym_bfd (gdb_bfd_open (absolute_name.get (), - gnutarget, desc)); - if (sym_bfd == NULL) - return NULL; - bfd_set_cacheable (sym_bfd.get (), 1); - - if (!bfd_check_format (sym_bfd.get (), bfd_object)) - return NULL; - - /* Success. Record the bfd as having been included by the objfile's bfd. - This is important because things like demangled_names_hash lives in the - objfile's per_bfd space and may have references to things like symbol - names that live in the DWO/DWP file's per_bfd space. PR 16426. */ - gdb_bfd_record_inclusion (dwarf2_per_objfile->objfile->obfd, sym_bfd.get ()); - - return sym_bfd; -} - -/* Try to open DWO file FILE_NAME. - COMP_DIR is the DW_AT_comp_dir attribute. - The result is the bfd handle of the file. - If there is a problem finding or opening the file, return NULL. - Upon success, the canonicalized path of the file is stored in the bfd, - same as symfile_bfd_open. */ - -static gdb_bfd_ref_ptr -open_dwo_file (struct dwarf2_per_objfile *dwarf2_per_objfile, - const char *file_name, const char *comp_dir) -{ - if (IS_ABSOLUTE_PATH (file_name)) - return try_open_dwop_file (dwarf2_per_objfile, file_name, - 0 /*is_dwp*/, 0 /*search_cwd*/); - - /* Before trying the search path, try DWO_NAME in COMP_DIR. */ - - if (comp_dir != NULL) - { - char *path_to_try = concat (comp_dir, SLASH_STRING, - file_name, (char *) NULL); - - /* NOTE: If comp_dir is a relative path, this will also try the - search path, which seems useful. */ - gdb_bfd_ref_ptr abfd (try_open_dwop_file (dwarf2_per_objfile, - path_to_try, - 0 /*is_dwp*/, - 1 /*search_cwd*/)); - xfree (path_to_try); - if (abfd != NULL) - return abfd; - } - - /* That didn't work, try debug-file-directory, which, despite its name, - is a list of paths. */ - - if (*debug_file_directory == '\0') - return NULL; - - return try_open_dwop_file (dwarf2_per_objfile, file_name, - 0 /*is_dwp*/, 1 /*search_cwd*/); -} - -/* This function is mapped across the sections and remembers the offset and - size of each of the DWO debugging sections we are interested in. */ - -static void -dwarf2_locate_dwo_sections (bfd *abfd, asection *sectp, void *dwo_sections_ptr) -{ - struct dwo_sections *dwo_sections = (struct dwo_sections *) dwo_sections_ptr; - const struct dwop_section_names *names = &dwop_section_names; - - if (section_is_p (sectp->name, &names->abbrev_dwo)) - { - dwo_sections->abbrev.s.section = sectp; - dwo_sections->abbrev.size = bfd_section_size (sectp); - } - else if (section_is_p (sectp->name, &names->info_dwo)) - { - dwo_sections->info.s.section = sectp; - dwo_sections->info.size = bfd_section_size (sectp); - } - else if (section_is_p (sectp->name, &names->line_dwo)) - { - dwo_sections->line.s.section = sectp; - dwo_sections->line.size = bfd_section_size (sectp); - } - else if (section_is_p (sectp->name, &names->loc_dwo)) - { - dwo_sections->loc.s.section = sectp; - dwo_sections->loc.size = bfd_section_size (sectp); - } - else if (section_is_p (sectp->name, &names->macinfo_dwo)) - { - dwo_sections->macinfo.s.section = sectp; - dwo_sections->macinfo.size = bfd_section_size (sectp); - } - else if (section_is_p (sectp->name, &names->macro_dwo)) - { - dwo_sections->macro.s.section = sectp; - dwo_sections->macro.size = bfd_section_size (sectp); - } - else if (section_is_p (sectp->name, &names->str_dwo)) - { - dwo_sections->str.s.section = sectp; - dwo_sections->str.size = bfd_section_size (sectp); - } - else if (section_is_p (sectp->name, &names->str_offsets_dwo)) - { - dwo_sections->str_offsets.s.section = sectp; - dwo_sections->str_offsets.size = bfd_section_size (sectp); - } - else if (section_is_p (sectp->name, &names->types_dwo)) - { - struct dwarf2_section_info type_section; - - memset (&type_section, 0, sizeof (type_section)); - type_section.s.section = sectp; - type_section.size = bfd_section_size (sectp); - dwo_sections->types.push_back (type_section); - } -} - -/* Initialize the use of the DWO file specified by DWO_NAME and referenced - by PER_CU. This is for the non-DWP case. - The result is NULL if DWO_NAME can't be found. */ - -static struct dwo_file * -open_and_init_dwo_file (struct dwarf2_per_cu_data *per_cu, - const char *dwo_name, const char *comp_dir) -{ - struct dwarf2_per_objfile *dwarf2_per_objfile = per_cu->dwarf2_per_objfile; - - gdb_bfd_ref_ptr dbfd = open_dwo_file (dwarf2_per_objfile, dwo_name, comp_dir); - if (dbfd == NULL) - { - if (dwarf_read_debug) - fprintf_unfiltered (gdb_stdlog, "DWO file not found: %s\n", dwo_name); - return NULL; - } - - dwo_file_up dwo_file (new struct dwo_file); - dwo_file->dwo_name = dwo_name; - dwo_file->comp_dir = comp_dir; - dwo_file->dbfd = std::move (dbfd); - - bfd_map_over_sections (dwo_file->dbfd.get (), dwarf2_locate_dwo_sections, - &dwo_file->sections); - - create_cus_hash_table (dwarf2_per_objfile, *dwo_file, dwo_file->sections.info, - dwo_file->cus); - - create_debug_types_hash_table (dwarf2_per_objfile, dwo_file.get (), - dwo_file->sections.types, dwo_file->tus); - - if (dwarf_read_debug) - fprintf_unfiltered (gdb_stdlog, "DWO file found: %s\n", dwo_name); - - return dwo_file.release (); -} - -/* This function is mapped across the sections and remembers the offset and - size of each of the DWP debugging sections common to version 1 and 2 that - we are interested in. */ - -static void -dwarf2_locate_common_dwp_sections (bfd *abfd, asection *sectp, - void *dwp_file_ptr) -{ - struct dwp_file *dwp_file = (struct dwp_file *) dwp_file_ptr; - const struct dwop_section_names *names = &dwop_section_names; - unsigned int elf_section_nr = elf_section_data (sectp)->this_idx; - - /* Record the ELF section number for later lookup: this is what the - .debug_cu_index,.debug_tu_index tables use in DWP V1. */ - gdb_assert (elf_section_nr < dwp_file->num_sections); - dwp_file->elf_sections[elf_section_nr] = sectp; - - /* Look for specific sections that we need. */ - if (section_is_p (sectp->name, &names->str_dwo)) - { - dwp_file->sections.str.s.section = sectp; - dwp_file->sections.str.size = bfd_section_size (sectp); - } - else if (section_is_p (sectp->name, &names->cu_index)) - { - dwp_file->sections.cu_index.s.section = sectp; - dwp_file->sections.cu_index.size = bfd_section_size (sectp); - } - else if (section_is_p (sectp->name, &names->tu_index)) - { - dwp_file->sections.tu_index.s.section = sectp; - dwp_file->sections.tu_index.size = bfd_section_size (sectp); - } -} - -/* This function is mapped across the sections and remembers the offset and - size of each of the DWP version 2 debugging sections that we are interested - in. This is split into a separate function because we don't know if we - have version 1 or 2 until we parse the cu_index/tu_index sections. */ - -static void -dwarf2_locate_v2_dwp_sections (bfd *abfd, asection *sectp, void *dwp_file_ptr) -{ - struct dwp_file *dwp_file = (struct dwp_file *) dwp_file_ptr; - const struct dwop_section_names *names = &dwop_section_names; - unsigned int elf_section_nr = elf_section_data (sectp)->this_idx; - - /* Record the ELF section number for later lookup: this is what the - .debug_cu_index,.debug_tu_index tables use in DWP V1. */ - gdb_assert (elf_section_nr < dwp_file->num_sections); - dwp_file->elf_sections[elf_section_nr] = sectp; - - /* Look for specific sections that we need. */ - if (section_is_p (sectp->name, &names->abbrev_dwo)) - { - dwp_file->sections.abbrev.s.section = sectp; - dwp_file->sections.abbrev.size = bfd_section_size (sectp); - } - else if (section_is_p (sectp->name, &names->info_dwo)) - { - dwp_file->sections.info.s.section = sectp; - dwp_file->sections.info.size = bfd_section_size (sectp); - } - else if (section_is_p (sectp->name, &names->line_dwo)) - { - dwp_file->sections.line.s.section = sectp; - dwp_file->sections.line.size = bfd_section_size (sectp); - } - else if (section_is_p (sectp->name, &names->loc_dwo)) - { - dwp_file->sections.loc.s.section = sectp; - dwp_file->sections.loc.size = bfd_section_size (sectp); - } - else if (section_is_p (sectp->name, &names->macinfo_dwo)) - { - dwp_file->sections.macinfo.s.section = sectp; - dwp_file->sections.macinfo.size = bfd_section_size (sectp); - } - else if (section_is_p (sectp->name, &names->macro_dwo)) - { - dwp_file->sections.macro.s.section = sectp; - dwp_file->sections.macro.size = bfd_section_size (sectp); - } - else if (section_is_p (sectp->name, &names->str_offsets_dwo)) - { - dwp_file->sections.str_offsets.s.section = sectp; - dwp_file->sections.str_offsets.size = bfd_section_size (sectp); - } - else if (section_is_p (sectp->name, &names->types_dwo)) - { - dwp_file->sections.types.s.section = sectp; - dwp_file->sections.types.size = bfd_section_size (sectp); - } -} - -/* Hash function for dwp_file loaded CUs/TUs. */ - -static hashval_t -hash_dwp_loaded_cutus (const void *item) -{ - const struct dwo_unit *dwo_unit = (const struct dwo_unit *) item; - - /* This drops the top 32 bits of the signature, but is ok for a hash. */ - return dwo_unit->signature; -} - -/* Equality function for dwp_file loaded CUs/TUs. */ - -static int -eq_dwp_loaded_cutus (const void *a, const void *b) -{ - const struct dwo_unit *dua = (const struct dwo_unit *) a; - const struct dwo_unit *dub = (const struct dwo_unit *) b; - - return dua->signature == dub->signature; -} - -/* Allocate a hash table for dwp_file loaded CUs/TUs. */ - -static htab_t -allocate_dwp_loaded_cutus_table (struct objfile *objfile) -{ - return htab_create_alloc_ex (3, - hash_dwp_loaded_cutus, - eq_dwp_loaded_cutus, - NULL, - &objfile->objfile_obstack, - hashtab_obstack_allocate, - dummy_obstack_deallocate); -} - -/* Try to open DWP file FILE_NAME. - The result is the bfd handle of the file. - If there is a problem finding or opening the file, return NULL. - Upon success, the canonicalized path of the file is stored in the bfd, - same as symfile_bfd_open. */ - -static gdb_bfd_ref_ptr -open_dwp_file (struct dwarf2_per_objfile *dwarf2_per_objfile, - const char *file_name) -{ - gdb_bfd_ref_ptr abfd (try_open_dwop_file (dwarf2_per_objfile, file_name, - 1 /*is_dwp*/, - 1 /*search_cwd*/)); - if (abfd != NULL) - return abfd; - - /* Work around upstream bug 15652. - http://sourceware.org/bugzilla/show_bug.cgi?id=15652 - [Whether that's a "bug" is debatable, but it is getting in our way.] - We have no real idea where the dwp file is, because gdb's realpath-ing - of the executable's path may have discarded the needed info. - [IWBN if the dwp file name was recorded in the executable, akin to - .gnu_debuglink, but that doesn't exist yet.] - Strip the directory from FILE_NAME and search again. */ - if (*debug_file_directory != '\0') - { - /* Don't implicitly search the current directory here. - If the user wants to search "." to handle this case, - it must be added to debug-file-directory. */ - return try_open_dwop_file (dwarf2_per_objfile, - lbasename (file_name), 1 /*is_dwp*/, - 0 /*search_cwd*/); - } - - return NULL; -} - -/* Initialize the use of the DWP file for the current objfile. - By convention the name of the DWP file is ${objfile}.dwp. - The result is NULL if it can't be found. */ - -static std::unique_ptr<struct dwp_file> -open_and_init_dwp_file (struct dwarf2_per_objfile *dwarf2_per_objfile) -{ - struct objfile *objfile = dwarf2_per_objfile->objfile; - - /* Try to find first .dwp for the binary file before any symbolic links - resolving. */ - - /* If the objfile is a debug file, find the name of the real binary - file and get the name of dwp file from there. */ - std::string dwp_name; - if (objfile->separate_debug_objfile_backlink != NULL) - { - struct objfile *backlink = objfile->separate_debug_objfile_backlink; - const char *backlink_basename = lbasename (backlink->original_name); - - dwp_name = ldirname (objfile->original_name) + SLASH_STRING + backlink_basename; - } - else - dwp_name = objfile->original_name; - - dwp_name += ".dwp"; - - gdb_bfd_ref_ptr dbfd (open_dwp_file (dwarf2_per_objfile, dwp_name.c_str ())); - if (dbfd == NULL - && strcmp (objfile->original_name, objfile_name (objfile)) != 0) - { - /* Try to find .dwp for the binary file after gdb_realpath resolving. */ - dwp_name = objfile_name (objfile); - dwp_name += ".dwp"; - dbfd = open_dwp_file (dwarf2_per_objfile, dwp_name.c_str ()); - } - - if (dbfd == NULL) - { - if (dwarf_read_debug) - fprintf_unfiltered (gdb_stdlog, "DWP file not found: %s\n", dwp_name.c_str ()); - return std::unique_ptr<dwp_file> (); - } - - const char *name = bfd_get_filename (dbfd.get ()); - std::unique_ptr<struct dwp_file> dwp_file - (new struct dwp_file (name, std::move (dbfd))); - - dwp_file->num_sections = elf_numsections (dwp_file->dbfd); - dwp_file->elf_sections = - OBSTACK_CALLOC (&objfile->objfile_obstack, - dwp_file->num_sections, asection *); - - bfd_map_over_sections (dwp_file->dbfd.get (), - dwarf2_locate_common_dwp_sections, - dwp_file.get ()); - - dwp_file->cus = create_dwp_hash_table (dwarf2_per_objfile, dwp_file.get (), - 0); - - dwp_file->tus = create_dwp_hash_table (dwarf2_per_objfile, dwp_file.get (), - 1); - - /* The DWP file version is stored in the hash table. Oh well. */ - if (dwp_file->cus && dwp_file->tus - && dwp_file->cus->version != dwp_file->tus->version) - { - /* Technically speaking, we should try to limp along, but this is - pretty bizarre. We use pulongest here because that's the established - portability solution (e.g, we cannot use %u for uint32_t). */ - error (_("Dwarf Error: DWP file CU version %s doesn't match" - " TU version %s [in DWP file %s]"), - pulongest (dwp_file->cus->version), - pulongest (dwp_file->tus->version), dwp_name.c_str ()); - } - - if (dwp_file->cus) - dwp_file->version = dwp_file->cus->version; - else if (dwp_file->tus) - dwp_file->version = dwp_file->tus->version; - else - dwp_file->version = 2; - - if (dwp_file->version == 2) - bfd_map_over_sections (dwp_file->dbfd.get (), - dwarf2_locate_v2_dwp_sections, - dwp_file.get ()); - - dwp_file->loaded_cus = allocate_dwp_loaded_cutus_table (objfile); - dwp_file->loaded_tus = allocate_dwp_loaded_cutus_table (objfile); - - if (dwarf_read_debug) - { - fprintf_unfiltered (gdb_stdlog, "DWP file found: %s\n", dwp_file->name); - fprintf_unfiltered (gdb_stdlog, - " %s CUs, %s TUs\n", - pulongest (dwp_file->cus ? dwp_file->cus->nr_units : 0), - pulongest (dwp_file->tus ? dwp_file->tus->nr_units : 0)); - } - - return dwp_file; -} - -/* Wrapper around open_and_init_dwp_file, only open it once. */ - -static struct dwp_file * -get_dwp_file (struct dwarf2_per_objfile *dwarf2_per_objfile) -{ - if (! dwarf2_per_objfile->dwp_checked) - { - dwarf2_per_objfile->dwp_file - = open_and_init_dwp_file (dwarf2_per_objfile); - dwarf2_per_objfile->dwp_checked = 1; - } - return dwarf2_per_objfile->dwp_file.get (); -} - -/* Subroutine of lookup_dwo_comp_unit, lookup_dwo_type_unit. - Look up the CU/TU with signature SIGNATURE, either in DWO file DWO_NAME - or in the DWP file for the objfile, referenced by THIS_UNIT. - If non-NULL, comp_dir is the DW_AT_comp_dir attribute. - IS_DEBUG_TYPES is non-zero if reading a TU, otherwise read a CU. - - This is called, for example, when wanting to read a variable with a - complex location. Therefore we don't want to do file i/o for every call. - Therefore we don't want to look for a DWO file on every call. - Therefore we first see if we've already seen SIGNATURE in a DWP file, - then we check if we've already seen DWO_NAME, and only THEN do we check - for a DWO file. - - The result is a pointer to the dwo_unit object or NULL if we didn't find it - (dwo_id mismatch or couldn't find the DWO/DWP file). */ - -static struct dwo_unit * -lookup_dwo_cutu (struct dwarf2_per_cu_data *this_unit, - const char *dwo_name, const char *comp_dir, - ULONGEST signature, int is_debug_types) -{ - struct dwarf2_per_objfile *dwarf2_per_objfile = this_unit->dwarf2_per_objfile; - struct objfile *objfile = dwarf2_per_objfile->objfile; - const char *kind = is_debug_types ? "TU" : "CU"; - void **dwo_file_slot; - struct dwo_file *dwo_file; - struct dwp_file *dwp_file; - - /* First see if there's a DWP file. - If we have a DWP file but didn't find the DWO inside it, don't - look for the original DWO file. It makes gdb behave differently - depending on whether one is debugging in the build tree. */ - - dwp_file = get_dwp_file (dwarf2_per_objfile); - if (dwp_file != NULL) - { - const struct dwp_hash_table *dwp_htab = - is_debug_types ? dwp_file->tus : dwp_file->cus; - - if (dwp_htab != NULL) - { - struct dwo_unit *dwo_cutu = - lookup_dwo_unit_in_dwp (dwarf2_per_objfile, dwp_file, comp_dir, - signature, is_debug_types); - - if (dwo_cutu != NULL) - { - if (dwarf_read_debug) - { - fprintf_unfiltered (gdb_stdlog, - "Virtual DWO %s %s found: @%s\n", - kind, hex_string (signature), - host_address_to_string (dwo_cutu)); - } - return dwo_cutu; - } - } - } - else - { - /* No DWP file, look for the DWO file. */ - - dwo_file_slot = lookup_dwo_file_slot (dwarf2_per_objfile, - dwo_name, comp_dir); - if (*dwo_file_slot == NULL) - { - /* Read in the file and build a table of the CUs/TUs it contains. */ - *dwo_file_slot = open_and_init_dwo_file (this_unit, dwo_name, comp_dir); - } - /* NOTE: This will be NULL if unable to open the file. */ - dwo_file = (struct dwo_file *) *dwo_file_slot; - - if (dwo_file != NULL) - { - struct dwo_unit *dwo_cutu = NULL; - - if (is_debug_types && dwo_file->tus) - { - struct dwo_unit find_dwo_cutu; - - memset (&find_dwo_cutu, 0, sizeof (find_dwo_cutu)); - find_dwo_cutu.signature = signature; - dwo_cutu - = (struct dwo_unit *) htab_find (dwo_file->tus, &find_dwo_cutu); - } - else if (!is_debug_types && dwo_file->cus) - { - struct dwo_unit find_dwo_cutu; - - memset (&find_dwo_cutu, 0, sizeof (find_dwo_cutu)); - find_dwo_cutu.signature = signature; - dwo_cutu = (struct dwo_unit *)htab_find (dwo_file->cus, - &find_dwo_cutu); - } - - if (dwo_cutu != NULL) - { - if (dwarf_read_debug) - { - fprintf_unfiltered (gdb_stdlog, "DWO %s %s(%s) found: @%s\n", - kind, dwo_name, hex_string (signature), - host_address_to_string (dwo_cutu)); - } - return dwo_cutu; - } - } - } - - /* We didn't find it. This could mean a dwo_id mismatch, or - someone deleted the DWO/DWP file, or the search path isn't set up - correctly to find the file. */ - - if (dwarf_read_debug) - { - fprintf_unfiltered (gdb_stdlog, "DWO %s %s(%s) not found\n", - kind, dwo_name, hex_string (signature)); - } - - /* This is a warning and not a complaint because it can be caused by - pilot error (e.g., user accidentally deleting the DWO). */ - { - /* Print the name of the DWP file if we looked there, helps the user - better diagnose the problem. */ - std::string dwp_text; - - if (dwp_file != NULL) - dwp_text = string_printf (" [in DWP file %s]", - lbasename (dwp_file->name)); - - warning (_("Could not find DWO %s %s(%s)%s referenced by %s at offset %s" - " [in module %s]"), - kind, dwo_name, hex_string (signature), - dwp_text.c_str (), - this_unit->is_debug_types ? "TU" : "CU", - sect_offset_str (this_unit->sect_off), objfile_name (objfile)); - } - return NULL; -} - -/* Lookup the DWO CU DWO_NAME/SIGNATURE referenced from THIS_CU. - See lookup_dwo_cutu_unit for details. */ - -static struct dwo_unit * -lookup_dwo_comp_unit (struct dwarf2_per_cu_data *this_cu, - const char *dwo_name, const char *comp_dir, - ULONGEST signature) -{ - return lookup_dwo_cutu (this_cu, dwo_name, comp_dir, signature, 0); -} - -/* Lookup the DWO TU DWO_NAME/SIGNATURE referenced from THIS_TU. - See lookup_dwo_cutu_unit for details. */ - -static struct dwo_unit * -lookup_dwo_type_unit (struct signatured_type *this_tu, - const char *dwo_name, const char *comp_dir) -{ - return lookup_dwo_cutu (&this_tu->per_cu, dwo_name, comp_dir, this_tu->signature, 1); -} - -/* Traversal function for queue_and_load_all_dwo_tus. */ - -static int -queue_and_load_dwo_tu (void **slot, void *info) -{ - struct dwo_unit *dwo_unit = (struct dwo_unit *) *slot; - struct dwarf2_per_cu_data *per_cu = (struct dwarf2_per_cu_data *) info; - ULONGEST signature = dwo_unit->signature; - struct signatured_type *sig_type = - lookup_dwo_signatured_type (per_cu->cu, signature); - - if (sig_type != NULL) - { - struct dwarf2_per_cu_data *sig_cu = &sig_type->per_cu; - - /* We pass NULL for DEPENDENT_CU because we don't yet know if there's - a real dependency of PER_CU on SIG_TYPE. That is detected later - while processing PER_CU. */ - if (maybe_queue_comp_unit (NULL, sig_cu, per_cu->cu->language)) - load_full_type_unit (sig_cu); - per_cu->imported_symtabs_push (sig_cu); - } - - return 1; -} - -/* Queue all TUs contained in the DWO of PER_CU to be read in. - The DWO may have the only definition of the type, though it may not be - referenced anywhere in PER_CU. Thus we have to load *all* its TUs. - http://sourceware.org/bugzilla/show_bug.cgi?id=15021 */ - -static void -queue_and_load_all_dwo_tus (struct dwarf2_per_cu_data *per_cu) -{ - struct dwo_unit *dwo_unit; - struct dwo_file *dwo_file; - - gdb_assert (!per_cu->is_debug_types); - gdb_assert (get_dwp_file (per_cu->dwarf2_per_objfile) == NULL); - gdb_assert (per_cu->cu != NULL); - - dwo_unit = per_cu->cu->dwo_unit; - gdb_assert (dwo_unit != NULL); - - dwo_file = dwo_unit->dwo_file; - if (dwo_file->tus != NULL) - htab_traverse_noresize (dwo_file->tus, queue_and_load_dwo_tu, per_cu); -} - -/* Read in various DIEs. */ - -/* DW_AT_abstract_origin inherits whole DIEs (not just their attributes). - Inherit only the children of the DW_AT_abstract_origin DIE not being - already referenced by DW_AT_abstract_origin from the children of the - current DIE. */ - -static void -inherit_abstract_dies (struct die_info *die, struct dwarf2_cu *cu) -{ - struct die_info *child_die; - sect_offset *offsetp; - /* Parent of DIE - referenced by DW_AT_abstract_origin. */ - struct die_info *origin_die; - /* Iterator of the ORIGIN_DIE children. */ - struct die_info *origin_child_die; - struct attribute *attr; - struct dwarf2_cu *origin_cu; - struct pending **origin_previous_list_in_scope; - - attr = dwarf2_attr (die, DW_AT_abstract_origin, cu); - if (!attr) - return; - - /* Note that following die references may follow to a die in a - different cu. */ - - origin_cu = cu; - origin_die = follow_die_ref (die, attr, &origin_cu); - - /* We're inheriting ORIGIN's children into the scope we'd put DIE's - symbols in. */ - origin_previous_list_in_scope = origin_cu->list_in_scope; - origin_cu->list_in_scope = cu->list_in_scope; - - if (die->tag != origin_die->tag - && !(die->tag == DW_TAG_inlined_subroutine - && origin_die->tag == DW_TAG_subprogram)) - complaint (_("DIE %s and its abstract origin %s have different tags"), - sect_offset_str (die->sect_off), - sect_offset_str (origin_die->sect_off)); - - std::vector<sect_offset> offsets; - - for (child_die = die->child; - child_die && child_die->tag; - child_die = sibling_die (child_die)) - { - struct die_info *child_origin_die; - struct dwarf2_cu *child_origin_cu; - - /* We are trying to process concrete instance entries: - DW_TAG_call_site DIEs indeed have a DW_AT_abstract_origin tag, but - it's not relevant to our analysis here. i.e. detecting DIEs that are - present in the abstract instance but not referenced in the concrete - one. */ - if (child_die->tag == DW_TAG_call_site - || child_die->tag == DW_TAG_GNU_call_site) - continue; - - /* For each CHILD_DIE, find the corresponding child of - ORIGIN_DIE. If there is more than one layer of - DW_AT_abstract_origin, follow them all; there shouldn't be, - but GCC versions at least through 4.4 generate this (GCC PR - 40573). */ - child_origin_die = child_die; - child_origin_cu = cu; - while (1) - { - attr = dwarf2_attr (child_origin_die, DW_AT_abstract_origin, - child_origin_cu); - if (attr == NULL) - break; - child_origin_die = follow_die_ref (child_origin_die, attr, - &child_origin_cu); - } - - /* According to DWARF3 3.3.8.2 #3 new entries without their abstract - counterpart may exist. */ - if (child_origin_die != child_die) - { - if (child_die->tag != child_origin_die->tag - && !(child_die->tag == DW_TAG_inlined_subroutine - && child_origin_die->tag == DW_TAG_subprogram)) - complaint (_("Child DIE %s and its abstract origin %s have " - "different tags"), - sect_offset_str (child_die->sect_off), - sect_offset_str (child_origin_die->sect_off)); - if (child_origin_die->parent != origin_die) - complaint (_("Child DIE %s and its abstract origin %s have " - "different parents"), - sect_offset_str (child_die->sect_off), - sect_offset_str (child_origin_die->sect_off)); - else - offsets.push_back (child_origin_die->sect_off); - } - } - std::sort (offsets.begin (), offsets.end ()); - sect_offset *offsets_end = offsets.data () + offsets.size (); - for (offsetp = offsets.data () + 1; offsetp < offsets_end; offsetp++) - if (offsetp[-1] == *offsetp) - complaint (_("Multiple children of DIE %s refer " - "to DIE %s as their abstract origin"), - sect_offset_str (die->sect_off), sect_offset_str (*offsetp)); - - offsetp = offsets.data (); - origin_child_die = origin_die->child; - while (origin_child_die && origin_child_die->tag) - { - /* Is ORIGIN_CHILD_DIE referenced by any of the DIE children? */ - while (offsetp < offsets_end - && *offsetp < origin_child_die->sect_off) - offsetp++; - if (offsetp >= offsets_end - || *offsetp > origin_child_die->sect_off) - { - /* Found that ORIGIN_CHILD_DIE is really not referenced. - Check whether we're already processing ORIGIN_CHILD_DIE. - This can happen with mutually referenced abstract_origins. - PR 16581. */ - if (!origin_child_die->in_process) - process_die (origin_child_die, origin_cu); - } - origin_child_die = sibling_die (origin_child_die); - } - origin_cu->list_in_scope = origin_previous_list_in_scope; - - if (cu != origin_cu) - compute_delayed_physnames (origin_cu); -} - -static void -read_func_scope (struct die_info *die, struct dwarf2_cu *cu) -{ - struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile; - struct gdbarch *gdbarch = get_objfile_arch (objfile); - struct context_stack *newobj; - CORE_ADDR lowpc; - CORE_ADDR highpc; - struct die_info *child_die; - struct attribute *attr, *call_line, *call_file; - const char *name; - CORE_ADDR baseaddr; - struct block *block; - int inlined_func = (die->tag == DW_TAG_inlined_subroutine); - std::vector<struct symbol *> template_args; - struct template_symbol *templ_func = NULL; - - if (inlined_func) - { - /* If we do not have call site information, we can't show the - caller of this inlined function. That's too confusing, so - only use the scope for local variables. */ - call_line = dwarf2_attr (die, DW_AT_call_line, cu); - call_file = dwarf2_attr (die, DW_AT_call_file, cu); - if (call_line == NULL || call_file == NULL) - { - read_lexical_block_scope (die, cu); - return; - } - } - - baseaddr = ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile)); - - name = dwarf2_name (die, cu); - - /* Ignore functions with missing or empty names. These are actually - illegal according to the DWARF standard. */ - if (name == NULL) - { - complaint (_("missing name for subprogram DIE at %s"), - sect_offset_str (die->sect_off)); - return; - } - - /* Ignore functions with missing or invalid low and high pc attributes. */ - if (dwarf2_get_pc_bounds (die, &lowpc, &highpc, cu, NULL) - <= PC_BOUNDS_INVALID) - { - attr = dwarf2_attr (die, DW_AT_external, cu); - if (!attr || !DW_UNSND (attr)) - complaint (_("cannot get low and high bounds " - "for subprogram DIE at %s"), - sect_offset_str (die->sect_off)); - return; - } - - lowpc = gdbarch_adjust_dwarf2_addr (gdbarch, lowpc + baseaddr); - highpc = gdbarch_adjust_dwarf2_addr (gdbarch, highpc + baseaddr); - - /* If we have any template arguments, then we must allocate a - different sort of symbol. */ - for (child_die = die->child; child_die; child_die = sibling_die (child_die)) - { - if (child_die->tag == DW_TAG_template_type_param - || child_die->tag == DW_TAG_template_value_param) - { - templ_func = allocate_template_symbol (objfile); - templ_func->subclass = SYMBOL_TEMPLATE; - break; - } - } - - newobj = cu->get_builder ()->push_context (0, lowpc); - newobj->name = new_symbol (die, read_type_die (die, cu), cu, - (struct symbol *) templ_func); - - if (dwarf2_flag_true_p (die, DW_AT_main_subprogram, cu)) - set_objfile_main_name (objfile, newobj->name->linkage_name (), - cu->language); - - /* If there is a location expression for DW_AT_frame_base, record - it. */ - attr = dwarf2_attr (die, DW_AT_frame_base, cu); - if (attr != nullptr) - dwarf2_symbol_mark_computed (attr, newobj->name, cu, 1); - - /* If there is a location for the static link, record it. */ - newobj->static_link = NULL; - attr = dwarf2_attr (die, DW_AT_static_link, cu); - if (attr != nullptr) - { - newobj->static_link - = XOBNEW (&objfile->objfile_obstack, struct dynamic_prop); - attr_to_dynamic_prop (attr, die, cu, newobj->static_link, - dwarf2_per_cu_addr_type (cu->per_cu)); - } - - cu->list_in_scope = cu->get_builder ()->get_local_symbols (); - - if (die->child != NULL) - { - child_die = die->child; - while (child_die && child_die->tag) - { - if (child_die->tag == DW_TAG_template_type_param - || child_die->tag == DW_TAG_template_value_param) - { - struct symbol *arg = new_symbol (child_die, NULL, cu); - - if (arg != NULL) - template_args.push_back (arg); - } - else - process_die (child_die, cu); - child_die = sibling_die (child_die); - } - } - - inherit_abstract_dies (die, cu); - - /* If we have a DW_AT_specification, we might need to import using - directives from the context of the specification DIE. See the - comment in determine_prefix. */ - if (cu->language == language_cplus - && dwarf2_attr (die, DW_AT_specification, cu)) - { - struct dwarf2_cu *spec_cu = cu; - struct die_info *spec_die = die_specification (die, &spec_cu); - - while (spec_die) - { - child_die = spec_die->child; - while (child_die && child_die->tag) - { - if (child_die->tag == DW_TAG_imported_module) - process_die (child_die, spec_cu); - child_die = sibling_die (child_die); - } - - /* In some cases, GCC generates specification DIEs that - themselves contain DW_AT_specification attributes. */ - spec_die = die_specification (spec_die, &spec_cu); - } - } - - struct context_stack cstk = cu->get_builder ()->pop_context (); - /* Make a block for the local symbols within. */ - block = cu->get_builder ()->finish_block (cstk.name, cstk.old_blocks, - cstk.static_link, lowpc, highpc); - - /* For C++, set the block's scope. */ - if ((cu->language == language_cplus - || cu->language == language_fortran - || cu->language == language_d - || cu->language == language_rust) - && cu->processing_has_namespace_info) - block_set_scope (block, determine_prefix (die, cu), - &objfile->objfile_obstack); - - /* If we have address ranges, record them. */ - dwarf2_record_block_ranges (die, block, baseaddr, cu); - - gdbarch_make_symbol_special (gdbarch, cstk.name, objfile); - - /* Attach template arguments to function. */ - if (!template_args.empty ()) - { - gdb_assert (templ_func != NULL); - - templ_func->n_template_arguments = template_args.size (); - templ_func->template_arguments - = XOBNEWVEC (&objfile->objfile_obstack, struct symbol *, - templ_func->n_template_arguments); - memcpy (templ_func->template_arguments, - template_args.data (), - (templ_func->n_template_arguments * sizeof (struct symbol *))); - - /* Make sure that the symtab is set on the new symbols. Even - though they don't appear in this symtab directly, other parts - of gdb assume that symbols do, and this is reasonably - true. */ - for (symbol *sym : template_args) - symbol_set_symtab (sym, symbol_symtab (templ_func)); - } - - /* In C++, we can have functions nested inside functions (e.g., when - a function declares a class that has methods). This means that - when we finish processing a function scope, we may need to go - back to building a containing block's symbol lists. */ - *cu->get_builder ()->get_local_symbols () = cstk.locals; - cu->get_builder ()->set_local_using_directives (cstk.local_using_directives); - - /* If we've finished processing a top-level function, subsequent - symbols go in the file symbol list. */ - if (cu->get_builder ()->outermost_context_p ()) - cu->list_in_scope = cu->get_builder ()->get_file_symbols (); -} - -/* Process all the DIES contained within a lexical block scope. Start - a new scope, process the dies, and then close the scope. */ - -static void -read_lexical_block_scope (struct die_info *die, struct dwarf2_cu *cu) -{ - struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile; - struct gdbarch *gdbarch = get_objfile_arch (objfile); - CORE_ADDR lowpc, highpc; - struct die_info *child_die; - CORE_ADDR baseaddr; - - baseaddr = ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile)); - - /* Ignore blocks with missing or invalid low and high pc attributes. */ - /* ??? Perhaps consider discontiguous blocks defined by DW_AT_ranges - as multiple lexical blocks? Handling children in a sane way would - be nasty. Might be easier to properly extend generic blocks to - describe ranges. */ - switch (dwarf2_get_pc_bounds (die, &lowpc, &highpc, cu, NULL)) - { - case PC_BOUNDS_NOT_PRESENT: - /* DW_TAG_lexical_block has no attributes, process its children as if - there was no wrapping by that DW_TAG_lexical_block. - GCC does no longer produces such DWARF since GCC r224161. */ - for (child_die = die->child; - child_die != NULL && child_die->tag; - child_die = sibling_die (child_die)) - process_die (child_die, cu); - return; - case PC_BOUNDS_INVALID: - return; - } - lowpc = gdbarch_adjust_dwarf2_addr (gdbarch, lowpc + baseaddr); - highpc = gdbarch_adjust_dwarf2_addr (gdbarch, highpc + baseaddr); - - cu->get_builder ()->push_context (0, lowpc); - if (die->child != NULL) - { - child_die = die->child; - while (child_die && child_die->tag) - { - process_die (child_die, cu); - child_die = sibling_die (child_die); - } - } - inherit_abstract_dies (die, cu); - struct context_stack cstk = cu->get_builder ()->pop_context (); - - if (*cu->get_builder ()->get_local_symbols () != NULL - || (*cu->get_builder ()->get_local_using_directives ()) != NULL) - { - struct block *block - = cu->get_builder ()->finish_block (0, cstk.old_blocks, NULL, - cstk.start_addr, highpc); - - /* Note that recording ranges after traversing children, as we - do here, means that recording a parent's ranges entails - walking across all its children's ranges as they appear in - the address map, which is quadratic behavior. - - It would be nicer to record the parent's ranges before - traversing its children, simply overriding whatever you find - there. But since we don't even decide whether to create a - block until after we've traversed its children, that's hard - to do. */ - dwarf2_record_block_ranges (die, block, baseaddr, cu); - } - *cu->get_builder ()->get_local_symbols () = cstk.locals; - cu->get_builder ()->set_local_using_directives (cstk.local_using_directives); -} - -/* Read in DW_TAG_call_site and insert it to CU->call_site_htab. */ - -static void -read_call_site_scope (struct die_info *die, struct dwarf2_cu *cu) -{ - struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile; - struct gdbarch *gdbarch = get_objfile_arch (objfile); - CORE_ADDR pc, baseaddr; - struct attribute *attr; - struct call_site *call_site, call_site_local; - void **slot; - int nparams; - struct die_info *child_die; - - baseaddr = ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile)); - - attr = dwarf2_attr (die, DW_AT_call_return_pc, cu); - if (attr == NULL) - { - /* This was a pre-DWARF-5 GNU extension alias - for DW_AT_call_return_pc. */ - attr = dwarf2_attr (die, DW_AT_low_pc, cu); - } - if (!attr) - { - complaint (_("missing DW_AT_call_return_pc for DW_TAG_call_site " - "DIE %s [in module %s]"), - sect_offset_str (die->sect_off), objfile_name (objfile)); - return; - } - pc = attr_value_as_address (attr) + baseaddr; - pc = gdbarch_adjust_dwarf2_addr (gdbarch, pc); - - if (cu->call_site_htab == NULL) - cu->call_site_htab = htab_create_alloc_ex (16, core_addr_hash, core_addr_eq, - NULL, &objfile->objfile_obstack, - hashtab_obstack_allocate, NULL); - call_site_local.pc = pc; - slot = htab_find_slot (cu->call_site_htab, &call_site_local, INSERT); - if (*slot != NULL) - { - complaint (_("Duplicate PC %s for DW_TAG_call_site " - "DIE %s [in module %s]"), - paddress (gdbarch, pc), sect_offset_str (die->sect_off), - objfile_name (objfile)); - return; - } - - /* Count parameters at the caller. */ - - nparams = 0; - for (child_die = die->child; child_die && child_die->tag; - child_die = sibling_die (child_die)) - { - if (child_die->tag != DW_TAG_call_site_parameter - && child_die->tag != DW_TAG_GNU_call_site_parameter) - { - complaint (_("Tag %d is not DW_TAG_call_site_parameter in " - "DW_TAG_call_site child DIE %s [in module %s]"), - child_die->tag, sect_offset_str (child_die->sect_off), - objfile_name (objfile)); - continue; - } - - nparams++; - } - - call_site - = ((struct call_site *) - obstack_alloc (&objfile->objfile_obstack, - sizeof (*call_site) - + (sizeof (*call_site->parameter) * (nparams - 1)))); - *slot = call_site; - memset (call_site, 0, sizeof (*call_site) - sizeof (*call_site->parameter)); - call_site->pc = pc; - - if (dwarf2_flag_true_p (die, DW_AT_call_tail_call, cu) - || dwarf2_flag_true_p (die, DW_AT_GNU_tail_call, cu)) - { - struct die_info *func_die; - - /* Skip also over DW_TAG_inlined_subroutine. */ - for (func_die = die->parent; - func_die && func_die->tag != DW_TAG_subprogram - && func_die->tag != DW_TAG_subroutine_type; - func_die = func_die->parent); - - /* DW_AT_call_all_calls is a superset - of DW_AT_call_all_tail_calls. */ - if (func_die - && !dwarf2_flag_true_p (func_die, DW_AT_call_all_calls, cu) - && !dwarf2_flag_true_p (func_die, DW_AT_GNU_all_call_sites, cu) - && !dwarf2_flag_true_p (func_die, DW_AT_call_all_tail_calls, cu) - && !dwarf2_flag_true_p (func_die, DW_AT_GNU_all_tail_call_sites, cu)) - { - /* TYPE_TAIL_CALL_LIST is not interesting in functions where it is - not complete. But keep CALL_SITE for look ups via call_site_htab, - both the initial caller containing the real return address PC and - the final callee containing the current PC of a chain of tail - calls do not need to have the tail call list complete. But any - function candidate for a virtual tail call frame searched via - TYPE_TAIL_CALL_LIST must have the tail call list complete to be - determined unambiguously. */ - } - else - { - struct type *func_type = NULL; - - if (func_die) - func_type = get_die_type (func_die, cu); - if (func_type != NULL) - { - gdb_assert (TYPE_CODE (func_type) == TYPE_CODE_FUNC); - - /* Enlist this call site to the function. */ - call_site->tail_call_next = TYPE_TAIL_CALL_LIST (func_type); - TYPE_TAIL_CALL_LIST (func_type) = call_site; - } - else - complaint (_("Cannot find function owning DW_TAG_call_site " - "DIE %s [in module %s]"), - sect_offset_str (die->sect_off), objfile_name (objfile)); - } - } - - attr = dwarf2_attr (die, DW_AT_call_target, cu); - if (attr == NULL) - attr = dwarf2_attr (die, DW_AT_GNU_call_site_target, cu); - if (attr == NULL) - attr = dwarf2_attr (die, DW_AT_call_origin, cu); - if (attr == NULL) - { - /* This was a pre-DWARF-5 GNU extension alias for DW_AT_call_origin. */ - attr = dwarf2_attr (die, DW_AT_abstract_origin, cu); - } - SET_FIELD_DWARF_BLOCK (call_site->target, NULL); - if (!attr || (attr_form_is_block (attr) && DW_BLOCK (attr)->size == 0)) - /* Keep NULL DWARF_BLOCK. */; - else if (attr_form_is_block (attr)) - { - struct dwarf2_locexpr_baton *dlbaton; - - dlbaton = XOBNEW (&objfile->objfile_obstack, struct dwarf2_locexpr_baton); - dlbaton->data = DW_BLOCK (attr)->data; - dlbaton->size = DW_BLOCK (attr)->size; - dlbaton->per_cu = cu->per_cu; - - SET_FIELD_DWARF_BLOCK (call_site->target, dlbaton); - } - else if (attr_form_is_ref (attr)) - { - struct dwarf2_cu *target_cu = cu; - struct die_info *target_die; - - target_die = follow_die_ref (die, attr, &target_cu); - gdb_assert (target_cu->per_cu->dwarf2_per_objfile->objfile == objfile); - if (die_is_declaration (target_die, target_cu)) - { - const char *target_physname; - - /* Prefer the mangled name; otherwise compute the demangled one. */ - target_physname = dw2_linkage_name (target_die, target_cu); - if (target_physname == NULL) - target_physname = dwarf2_physname (NULL, target_die, target_cu); - if (target_physname == NULL) - complaint (_("DW_AT_call_target target DIE has invalid " - "physname, for referencing DIE %s [in module %s]"), - sect_offset_str (die->sect_off), objfile_name (objfile)); - else - SET_FIELD_PHYSNAME (call_site->target, target_physname); - } - else - { - CORE_ADDR lowpc; - - /* DW_AT_entry_pc should be preferred. */ - if (dwarf2_get_pc_bounds (target_die, &lowpc, NULL, target_cu, NULL) - <= PC_BOUNDS_INVALID) - complaint (_("DW_AT_call_target target DIE has invalid " - "low pc, for referencing DIE %s [in module %s]"), - sect_offset_str (die->sect_off), objfile_name (objfile)); - else - { - lowpc = gdbarch_adjust_dwarf2_addr (gdbarch, lowpc + baseaddr); - SET_FIELD_PHYSADDR (call_site->target, lowpc); - } - } - } - else - complaint (_("DW_TAG_call_site DW_AT_call_target is neither " - "block nor reference, for DIE %s [in module %s]"), - sect_offset_str (die->sect_off), objfile_name (objfile)); - - call_site->per_cu = cu->per_cu; - - for (child_die = die->child; - child_die && child_die->tag; - child_die = sibling_die (child_die)) - { - struct call_site_parameter *parameter; - struct attribute *loc, *origin; - - if (child_die->tag != DW_TAG_call_site_parameter - && child_die->tag != DW_TAG_GNU_call_site_parameter) - { - /* Already printed the complaint above. */ - continue; - } - - gdb_assert (call_site->parameter_count < nparams); - parameter = &call_site->parameter[call_site->parameter_count]; - - /* DW_AT_location specifies the register number or DW_AT_abstract_origin - specifies DW_TAG_formal_parameter. Value of the data assumed for the - register is contained in DW_AT_call_value. */ - - loc = dwarf2_attr (child_die, DW_AT_location, cu); - origin = dwarf2_attr (child_die, DW_AT_call_parameter, cu); - if (origin == NULL) - { - /* This was a pre-DWARF-5 GNU extension alias - for DW_AT_call_parameter. */ - origin = dwarf2_attr (child_die, DW_AT_abstract_origin, cu); - } - if (loc == NULL && origin != NULL && attr_form_is_ref (origin)) - { - parameter->kind = CALL_SITE_PARAMETER_PARAM_OFFSET; - - sect_offset sect_off - = (sect_offset) dwarf2_get_ref_die_offset (origin); - if (!offset_in_cu_p (&cu->header, sect_off)) - { - /* As DW_OP_GNU_parameter_ref uses CU-relative offset this - binding can be done only inside one CU. Such referenced DIE - therefore cannot be even moved to DW_TAG_partial_unit. */ - complaint (_("DW_AT_call_parameter offset is not in CU for " - "DW_TAG_call_site child DIE %s [in module %s]"), - sect_offset_str (child_die->sect_off), - objfile_name (objfile)); - continue; - } - parameter->u.param_cu_off - = (cu_offset) (sect_off - cu->header.sect_off); - } - else if (loc == NULL || origin != NULL || !attr_form_is_block (loc)) - { - complaint (_("No DW_FORM_block* DW_AT_location for " - "DW_TAG_call_site child DIE %s [in module %s]"), - sect_offset_str (child_die->sect_off), objfile_name (objfile)); - continue; - } - else - { - parameter->u.dwarf_reg = dwarf_block_to_dwarf_reg - (DW_BLOCK (loc)->data, &DW_BLOCK (loc)->data[DW_BLOCK (loc)->size]); - if (parameter->u.dwarf_reg != -1) - parameter->kind = CALL_SITE_PARAMETER_DWARF_REG; - else if (dwarf_block_to_sp_offset (gdbarch, DW_BLOCK (loc)->data, - &DW_BLOCK (loc)->data[DW_BLOCK (loc)->size], - ¶meter->u.fb_offset)) - parameter->kind = CALL_SITE_PARAMETER_FB_OFFSET; - else - { - complaint (_("Only single DW_OP_reg or DW_OP_fbreg is supported " - "for DW_FORM_block* DW_AT_location is supported for " - "DW_TAG_call_site child DIE %s " - "[in module %s]"), - sect_offset_str (child_die->sect_off), - objfile_name (objfile)); - continue; - } - } - - attr = dwarf2_attr (child_die, DW_AT_call_value, cu); - if (attr == NULL) - attr = dwarf2_attr (child_die, DW_AT_GNU_call_site_value, cu); - if (!attr_form_is_block (attr)) - { - complaint (_("No DW_FORM_block* DW_AT_call_value for " - "DW_TAG_call_site child DIE %s [in module %s]"), - sect_offset_str (child_die->sect_off), - objfile_name (objfile)); - continue; - } - parameter->value = DW_BLOCK (attr)->data; - parameter->value_size = DW_BLOCK (attr)->size; - - /* Parameters are not pre-cleared by memset above. */ - parameter->data_value = NULL; - parameter->data_value_size = 0; - call_site->parameter_count++; - - attr = dwarf2_attr (child_die, DW_AT_call_data_value, cu); - if (attr == NULL) - attr = dwarf2_attr (child_die, DW_AT_GNU_call_site_data_value, cu); - if (attr != nullptr) - { - if (!attr_form_is_block (attr)) - complaint (_("No DW_FORM_block* DW_AT_call_data_value for " - "DW_TAG_call_site child DIE %s [in module %s]"), - sect_offset_str (child_die->sect_off), - objfile_name (objfile)); - else - { - parameter->data_value = DW_BLOCK (attr)->data; - parameter->data_value_size = DW_BLOCK (attr)->size; - } - } - } -} - -/* Helper function for read_variable. If DIE represents a virtual - table, then return the type of the concrete object that is - associated with the virtual table. Otherwise, return NULL. */ - -static struct type * -rust_containing_type (struct die_info *die, struct dwarf2_cu *cu) -{ - struct attribute *attr = dwarf2_attr (die, DW_AT_type, cu); - if (attr == NULL) - return NULL; - - /* Find the type DIE. */ - struct die_info *type_die = NULL; - struct dwarf2_cu *type_cu = cu; - - if (attr_form_is_ref (attr)) - type_die = follow_die_ref (die, attr, &type_cu); - if (type_die == NULL) - return NULL; - - if (dwarf2_attr (type_die, DW_AT_containing_type, type_cu) == NULL) - return NULL; - return die_containing_type (type_die, type_cu); -} - -/* Read a variable (DW_TAG_variable) DIE and create a new symbol. */ - -static void -read_variable (struct die_info *die, struct dwarf2_cu *cu) -{ - struct rust_vtable_symbol *storage = NULL; - - if (cu->language == language_rust) - { - struct type *containing_type = rust_containing_type (die, cu); - - if (containing_type != NULL) - { - struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile; - - storage = new (&objfile->objfile_obstack) rust_vtable_symbol (); - initialize_objfile_symbol (storage); - storage->concrete_type = containing_type; - storage->subclass = SYMBOL_RUST_VTABLE; - } - } - - struct symbol *res = new_symbol (die, NULL, cu, storage); - struct attribute *abstract_origin - = dwarf2_attr (die, DW_AT_abstract_origin, cu); - struct attribute *loc = dwarf2_attr (die, DW_AT_location, cu); - if (res == NULL && loc && abstract_origin) - { - /* We have a variable without a name, but with a location and an abstract - origin. This may be a concrete instance of an abstract variable - referenced from an DW_OP_GNU_variable_value, so save it to find it back - later. */ - struct dwarf2_cu *origin_cu = cu; - struct die_info *origin_die - = follow_die_ref (die, abstract_origin, &origin_cu); - dwarf2_per_objfile *dpo = cu->per_cu->dwarf2_per_objfile; - dpo->abstract_to_concrete[origin_die->sect_off].push_back (die->sect_off); - } -} - -/* Call CALLBACK from DW_AT_ranges attribute value OFFSET - reading .debug_rnglists. - Callback's type should be: - void (CORE_ADDR range_beginning, CORE_ADDR range_end) - Return true if the attributes are present and valid, otherwise, - return false. */ - -template <typename Callback> -static bool -dwarf2_rnglists_process (unsigned offset, struct dwarf2_cu *cu, - Callback &&callback) -{ - struct dwarf2_per_objfile *dwarf2_per_objfile - = cu->per_cu->dwarf2_per_objfile; - struct objfile *objfile = dwarf2_per_objfile->objfile; - bfd *obfd = objfile->obfd; - /* Base address selection entry. */ - CORE_ADDR base; - int found_base; - const gdb_byte *buffer; - CORE_ADDR baseaddr; - bool overflow = false; - - found_base = cu->base_known; - base = cu->base_address; - - dwarf2_read_section (objfile, &dwarf2_per_objfile->rnglists); - if (offset >= dwarf2_per_objfile->rnglists.size) - { - complaint (_("Offset %d out of bounds for DW_AT_ranges attribute"), - offset); - return false; - } - buffer = dwarf2_per_objfile->rnglists.buffer + offset; - - baseaddr = ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile)); - - while (1) - { - /* Initialize it due to a false compiler warning. */ - CORE_ADDR range_beginning = 0, range_end = 0; - const gdb_byte *buf_end = (dwarf2_per_objfile->rnglists.buffer - + dwarf2_per_objfile->rnglists.size); - unsigned int bytes_read; - - if (buffer == buf_end) - { - overflow = true; - break; - } - const auto rlet = static_cast<enum dwarf_range_list_entry>(*buffer++); - switch (rlet) - { - case DW_RLE_end_of_list: - break; - case DW_RLE_base_address: - if (buffer + cu->header.addr_size > buf_end) - { - overflow = true; - break; - } - base = read_address (obfd, buffer, cu, &bytes_read); - found_base = 1; - buffer += bytes_read; - break; - case DW_RLE_start_length: - if (buffer + cu->header.addr_size > buf_end) - { - overflow = true; - break; - } - range_beginning = read_address (obfd, buffer, cu, &bytes_read); - buffer += bytes_read; - range_end = (range_beginning - + read_unsigned_leb128 (obfd, buffer, &bytes_read)); - buffer += bytes_read; - if (buffer > buf_end) - { - overflow = true; - break; - } - break; - case DW_RLE_offset_pair: - range_beginning = read_unsigned_leb128 (obfd, buffer, &bytes_read); - buffer += bytes_read; - if (buffer > buf_end) - { - overflow = true; - break; - } - range_end = read_unsigned_leb128 (obfd, buffer, &bytes_read); - buffer += bytes_read; - if (buffer > buf_end) - { - overflow = true; - break; - } - break; - case DW_RLE_start_end: - if (buffer + 2 * cu->header.addr_size > buf_end) - { - overflow = true; - break; - } - range_beginning = read_address (obfd, buffer, cu, &bytes_read); - buffer += bytes_read; - range_end = read_address (obfd, buffer, cu, &bytes_read); - buffer += bytes_read; - break; - default: - complaint (_("Invalid .debug_rnglists data (no base address)")); - return false; - } - if (rlet == DW_RLE_end_of_list || overflow) - break; - if (rlet == DW_RLE_base_address) - continue; - - if (!found_base) - { - /* We have no valid base address for the ranges - data. */ - complaint (_("Invalid .debug_rnglists data (no base address)")); - return false; - } - - if (range_beginning > range_end) - { - /* Inverted range entries are invalid. */ - complaint (_("Invalid .debug_rnglists data (inverted range)")); - return false; - } - - /* Empty range entries have no effect. */ - if (range_beginning == range_end) - continue; - - range_beginning += base; - range_end += base; - - /* A not-uncommon case of bad debug info. - Don't pollute the addrmap with bad data. */ - if (range_beginning + baseaddr == 0 - && !dwarf2_per_objfile->has_section_at_zero) - { - complaint (_(".debug_rnglists entry has start address of zero" - " [in module %s]"), objfile_name (objfile)); - continue; - } - - callback (range_beginning, range_end); - } - - if (overflow) - { - complaint (_("Offset %d is not terminated " - "for DW_AT_ranges attribute"), - offset); - return false; - } - - return true; -} - -/* Call CALLBACK from DW_AT_ranges attribute value OFFSET reading .debug_ranges. - Callback's type should be: - void (CORE_ADDR range_beginning, CORE_ADDR range_end) - Return 1 if the attributes are present and valid, otherwise, return 0. */ - -template <typename Callback> -static int -dwarf2_ranges_process (unsigned offset, struct dwarf2_cu *cu, - Callback &&callback) -{ - struct dwarf2_per_objfile *dwarf2_per_objfile - = cu->per_cu->dwarf2_per_objfile; - struct objfile *objfile = dwarf2_per_objfile->objfile; - struct comp_unit_head *cu_header = &cu->header; - bfd *obfd = objfile->obfd; - unsigned int addr_size = cu_header->addr_size; - CORE_ADDR mask = ~(~(CORE_ADDR)1 << (addr_size * 8 - 1)); - /* Base address selection entry. */ - CORE_ADDR base; - int found_base; - unsigned int dummy; - const gdb_byte *buffer; - CORE_ADDR baseaddr; - - if (cu_header->version >= 5) - return dwarf2_rnglists_process (offset, cu, callback); - - found_base = cu->base_known; - base = cu->base_address; - - dwarf2_read_section (objfile, &dwarf2_per_objfile->ranges); - if (offset >= dwarf2_per_objfile->ranges.size) - { - complaint (_("Offset %d out of bounds for DW_AT_ranges attribute"), - offset); - return 0; - } - buffer = dwarf2_per_objfile->ranges.buffer + offset; - - baseaddr = ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile)); - - while (1) - { - CORE_ADDR range_beginning, range_end; - - range_beginning = read_address (obfd, buffer, cu, &dummy); - buffer += addr_size; - range_end = read_address (obfd, buffer, cu, &dummy); - buffer += addr_size; - offset += 2 * addr_size; - - /* An end of list marker is a pair of zero addresses. */ - if (range_beginning == 0 && range_end == 0) - /* Found the end of list entry. */ - break; - - /* Each base address selection entry is a pair of 2 values. - The first is the largest possible address, the second is - the base address. Check for a base address here. */ - if ((range_beginning & mask) == mask) - { - /* If we found the largest possible address, then we already - have the base address in range_end. */ - base = range_end; - found_base = 1; - continue; - } - - if (!found_base) - { - /* We have no valid base address for the ranges - data. */ - complaint (_("Invalid .debug_ranges data (no base address)")); - return 0; - } - - if (range_beginning > range_end) - { - /* Inverted range entries are invalid. */ - complaint (_("Invalid .debug_ranges data (inverted range)")); - return 0; - } - - /* Empty range entries have no effect. */ - if (range_beginning == range_end) - continue; - - range_beginning += base; - range_end += base; - - /* A not-uncommon case of bad debug info. - Don't pollute the addrmap with bad data. */ - if (range_beginning + baseaddr == 0 - && !dwarf2_per_objfile->has_section_at_zero) - { - complaint (_(".debug_ranges entry has start address of zero" - " [in module %s]"), objfile_name (objfile)); - continue; - } - - callback (range_beginning, range_end); - } - - return 1; -} - -/* Get low and high pc attributes from DW_AT_ranges attribute value OFFSET. - Return 1 if the attributes are present and valid, otherwise, return 0. - If RANGES_PST is not NULL we should setup `objfile->psymtabs_addrmap'. */ - -static int -dwarf2_ranges_read (unsigned offset, CORE_ADDR *low_return, - CORE_ADDR *high_return, struct dwarf2_cu *cu, - struct partial_symtab *ranges_pst) -{ - struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile; - struct gdbarch *gdbarch = get_objfile_arch (objfile); - const CORE_ADDR baseaddr = ANOFFSET (objfile->section_offsets, - SECT_OFF_TEXT (objfile)); - int low_set = 0; - CORE_ADDR low = 0; - CORE_ADDR high = 0; - int retval; - - retval = dwarf2_ranges_process (offset, cu, - [&] (CORE_ADDR range_beginning, CORE_ADDR range_end) - { - if (ranges_pst != NULL) - { - CORE_ADDR lowpc; - CORE_ADDR highpc; - - lowpc = (gdbarch_adjust_dwarf2_addr (gdbarch, - range_beginning + baseaddr) - - baseaddr); - highpc = (gdbarch_adjust_dwarf2_addr (gdbarch, - range_end + baseaddr) - - baseaddr); - addrmap_set_empty (objfile->partial_symtabs->psymtabs_addrmap, - lowpc, highpc - 1, ranges_pst); - } - - /* FIXME: This is recording everything as a low-high - segment of consecutive addresses. We should have a - data structure for discontiguous block ranges - instead. */ - if (! low_set) - { - low = range_beginning; - high = range_end; - low_set = 1; - } - else - { - if (range_beginning < low) - low = range_beginning; - if (range_end > high) - high = range_end; - } - }); - if (!retval) - return 0; - - if (! low_set) - /* If the first entry is an end-of-list marker, the range - describes an empty scope, i.e. no instructions. */ - return 0; - - if (low_return) - *low_return = low; - if (high_return) - *high_return = high; - return 1; -} - -/* Get low and high pc attributes from a die. See enum pc_bounds_kind - definition for the return value. *LOWPC and *HIGHPC are set iff - neither PC_BOUNDS_NOT_PRESENT nor PC_BOUNDS_INVALID are returned. */ - -static enum pc_bounds_kind -dwarf2_get_pc_bounds (struct die_info *die, CORE_ADDR *lowpc, - CORE_ADDR *highpc, struct dwarf2_cu *cu, - struct partial_symtab *pst) -{ - struct dwarf2_per_objfile *dwarf2_per_objfile - = cu->per_cu->dwarf2_per_objfile; - struct attribute *attr; - struct attribute *attr_high; - CORE_ADDR low = 0; - CORE_ADDR high = 0; - enum pc_bounds_kind ret; - - attr_high = dwarf2_attr (die, DW_AT_high_pc, cu); - if (attr_high) - { - attr = dwarf2_attr (die, DW_AT_low_pc, cu); - if (attr != nullptr) - { - low = attr_value_as_address (attr); - high = attr_value_as_address (attr_high); - if (cu->header.version >= 4 && attr_form_is_constant (attr_high)) - high += low; - } - else - /* Found high w/o low attribute. */ - return PC_BOUNDS_INVALID; - - /* Found consecutive range of addresses. */ - ret = PC_BOUNDS_HIGH_LOW; - } - else - { - attr = dwarf2_attr (die, DW_AT_ranges, cu); - if (attr != NULL) - { - /* DW_AT_ranges_base does not apply to DIEs from the DWO skeleton. - We take advantage of the fact that DW_AT_ranges does not appear - in DW_TAG_compile_unit of DWO files. */ - int need_ranges_base = die->tag != DW_TAG_compile_unit; - unsigned int ranges_offset = (DW_UNSND (attr) - + (need_ranges_base - ? cu->ranges_base - : 0)); - - /* Value of the DW_AT_ranges attribute is the offset in the - .debug_ranges section. */ - if (!dwarf2_ranges_read (ranges_offset, &low, &high, cu, pst)) - return PC_BOUNDS_INVALID; - /* Found discontinuous range of addresses. */ - ret = PC_BOUNDS_RANGES; - } - else - return PC_BOUNDS_NOT_PRESENT; - } - - /* partial_die_info::read has also the strict LOW < HIGH requirement. */ - if (high <= low) - return PC_BOUNDS_INVALID; - - /* When using the GNU linker, .gnu.linkonce. sections are used to - eliminate duplicate copies of functions and vtables and such. - The linker will arbitrarily choose one and discard the others. - The AT_*_pc values for such functions refer to local labels in - these sections. If the section from that file was discarded, the - labels are not in the output, so the relocs get a value of 0. - If this is a discarded function, mark the pc bounds as invalid, - so that GDB will ignore it. */ - if (low == 0 && !dwarf2_per_objfile->has_section_at_zero) - return PC_BOUNDS_INVALID; - - *lowpc = low; - if (highpc) - *highpc = high; - return ret; -} - -/* Assuming that DIE represents a subprogram DIE or a lexical block, get - its low and high PC addresses. Do nothing if these addresses could not - be determined. Otherwise, set LOWPC to the low address if it is smaller, - and HIGHPC to the high address if greater than HIGHPC. */ - -static void -dwarf2_get_subprogram_pc_bounds (struct die_info *die, - CORE_ADDR *lowpc, CORE_ADDR *highpc, - struct dwarf2_cu *cu) -{ - CORE_ADDR low, high; - struct die_info *child = die->child; - - if (dwarf2_get_pc_bounds (die, &low, &high, cu, NULL) >= PC_BOUNDS_RANGES) - { - *lowpc = std::min (*lowpc, low); - *highpc = std::max (*highpc, high); - } - - /* If the language does not allow nested subprograms (either inside - subprograms or lexical blocks), we're done. */ - if (cu->language != language_ada) - return; - - /* Check all the children of the given DIE. If it contains nested - subprograms, then check their pc bounds. Likewise, we need to - check lexical blocks as well, as they may also contain subprogram - definitions. */ - while (child && child->tag) - { - if (child->tag == DW_TAG_subprogram - || child->tag == DW_TAG_lexical_block) - dwarf2_get_subprogram_pc_bounds (child, lowpc, highpc, cu); - child = sibling_die (child); - } -} - -/* Get the low and high pc's represented by the scope DIE, and store - them in *LOWPC and *HIGHPC. If the correct values can't be - determined, set *LOWPC to -1 and *HIGHPC to 0. */ - -static void -get_scope_pc_bounds (struct die_info *die, - CORE_ADDR *lowpc, CORE_ADDR *highpc, - struct dwarf2_cu *cu) -{ - CORE_ADDR best_low = (CORE_ADDR) -1; - CORE_ADDR best_high = (CORE_ADDR) 0; - CORE_ADDR current_low, current_high; - - if (dwarf2_get_pc_bounds (die, ¤t_low, ¤t_high, cu, NULL) - >= PC_BOUNDS_RANGES) - { - best_low = current_low; - best_high = current_high; - } - else - { - struct die_info *child = die->child; - - while (child && child->tag) - { - switch (child->tag) { - case DW_TAG_subprogram: - dwarf2_get_subprogram_pc_bounds (child, &best_low, &best_high, cu); - break; - case DW_TAG_namespace: - case DW_TAG_module: - /* FIXME: carlton/2004-01-16: Should we do this for - DW_TAG_class_type/DW_TAG_structure_type, too? I think - that current GCC's always emit the DIEs corresponding - to definitions of methods of classes as children of a - DW_TAG_compile_unit or DW_TAG_namespace (as opposed to - the DIEs giving the declarations, which could be - anywhere). But I don't see any reason why the - standards says that they have to be there. */ - get_scope_pc_bounds (child, ¤t_low, ¤t_high, cu); - - if (current_low != ((CORE_ADDR) -1)) - { - best_low = std::min (best_low, current_low); - best_high = std::max (best_high, current_high); - } - break; - default: - /* Ignore. */ - break; - } - - child = sibling_die (child); - } - } - - *lowpc = best_low; - *highpc = best_high; -} - -/* Record the address ranges for BLOCK, offset by BASEADDR, as given - in DIE. */ - -static void -dwarf2_record_block_ranges (struct die_info *die, struct block *block, - CORE_ADDR baseaddr, struct dwarf2_cu *cu) -{ - struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile; - struct gdbarch *gdbarch = get_objfile_arch (objfile); - struct attribute *attr; - struct attribute *attr_high; - - attr_high = dwarf2_attr (die, DW_AT_high_pc, cu); - if (attr_high) - { - attr = dwarf2_attr (die, DW_AT_low_pc, cu); - if (attr != nullptr) - { - CORE_ADDR low = attr_value_as_address (attr); - CORE_ADDR high = attr_value_as_address (attr_high); - - if (cu->header.version >= 4 && attr_form_is_constant (attr_high)) - high += low; - - low = gdbarch_adjust_dwarf2_addr (gdbarch, low + baseaddr); - high = gdbarch_adjust_dwarf2_addr (gdbarch, high + baseaddr); - cu->get_builder ()->record_block_range (block, low, high - 1); - } - } - - attr = dwarf2_attr (die, DW_AT_ranges, cu); - if (attr != nullptr) - { - /* DW_AT_ranges_base does not apply to DIEs from the DWO skeleton. - We take advantage of the fact that DW_AT_ranges does not appear - in DW_TAG_compile_unit of DWO files. */ - int need_ranges_base = die->tag != DW_TAG_compile_unit; - - /* The value of the DW_AT_ranges attribute is the offset of the - address range list in the .debug_ranges section. */ - unsigned long offset = (DW_UNSND (attr) - + (need_ranges_base ? cu->ranges_base : 0)); - - std::vector<blockrange> blockvec; - dwarf2_ranges_process (offset, cu, - [&] (CORE_ADDR start, CORE_ADDR end) - { - start += baseaddr; - end += baseaddr; - start = gdbarch_adjust_dwarf2_addr (gdbarch, start); - end = gdbarch_adjust_dwarf2_addr (gdbarch, end); - cu->get_builder ()->record_block_range (block, start, end - 1); - blockvec.emplace_back (start, end); - }); - - BLOCK_RANGES(block) = make_blockranges (objfile, blockvec); - } -} - -/* Check whether the producer field indicates either of GCC < 4.6, or the - Intel C/C++ compiler, and cache the result in CU. */ - -static void -check_producer (struct dwarf2_cu *cu) -{ - int major, minor; - - if (cu->producer == NULL) - { - /* For unknown compilers expect their behavior is DWARF version - compliant. - - GCC started to support .debug_types sections by -gdwarf-4 since - gcc-4.5.x. As the .debug_types sections are missing DW_AT_producer - for their space efficiency GDB cannot workaround gcc-4.5.x -gdwarf-4 - combination. gcc-4.5.x -gdwarf-4 binaries have DW_AT_accessibility - interpreted incorrectly by GDB now - GCC PR debug/48229. */ - } - else if (producer_is_gcc (cu->producer, &major, &minor)) - { - cu->producer_is_gxx_lt_4_6 = major < 4 || (major == 4 && minor < 6); - cu->producer_is_gcc_lt_4_3 = major < 4 || (major == 4 && minor < 3); - } - else if (producer_is_icc (cu->producer, &major, &minor)) - { - cu->producer_is_icc = true; - cu->producer_is_icc_lt_14 = major < 14; - } - else if (startswith (cu->producer, "CodeWarrior S12/L-ISA")) - cu->producer_is_codewarrior = true; - else - { - /* For other non-GCC compilers, expect their behavior is DWARF version - compliant. */ - } - - cu->checked_producer = true; -} - -/* Check for GCC PR debug/45124 fix which is not present in any G++ version up - to 4.5.any while it is present already in G++ 4.6.0 - the PR has been fixed - during 4.6.0 experimental. */ - -static bool -producer_is_gxx_lt_4_6 (struct dwarf2_cu *cu) -{ - if (!cu->checked_producer) - check_producer (cu); - - return cu->producer_is_gxx_lt_4_6; -} - - -/* Codewarrior (at least as of version 5.0.40) generates dwarf line information - with incorrect is_stmt attributes. */ - -static bool -producer_is_codewarrior (struct dwarf2_cu *cu) -{ - if (!cu->checked_producer) - check_producer (cu); - - return cu->producer_is_codewarrior; -} - -/* Return the default accessibility type if it is not overridden by - DW_AT_accessibility. */ - -static enum dwarf_access_attribute -dwarf2_default_access_attribute (struct die_info *die, struct dwarf2_cu *cu) -{ - if (cu->header.version < 3 || producer_is_gxx_lt_4_6 (cu)) - { - /* The default DWARF 2 accessibility for members is public, the default - accessibility for inheritance is private. */ - - if (die->tag != DW_TAG_inheritance) - return DW_ACCESS_public; - else - return DW_ACCESS_private; - } - else - { - /* DWARF 3+ defines the default accessibility a different way. The same - rules apply now for DW_TAG_inheritance as for the members and it only - depends on the container kind. */ - - if (die->parent->tag == DW_TAG_class_type) - return DW_ACCESS_private; - else - return DW_ACCESS_public; - } -} - -/* Look for DW_AT_data_member_location. Set *OFFSET to the byte - offset. If the attribute was not found return 0, otherwise return - 1. If it was found but could not properly be handled, set *OFFSET - to 0. */ - -static int -handle_data_member_location (struct die_info *die, struct dwarf2_cu *cu, - LONGEST *offset) -{ - struct attribute *attr; - - attr = dwarf2_attr (die, DW_AT_data_member_location, cu); - if (attr != NULL) - { - *offset = 0; - - /* Note that we do not check for a section offset first here. - This is because DW_AT_data_member_location is new in DWARF 4, - so if we see it, we can assume that a constant form is really - a constant and not a section offset. */ - if (attr_form_is_constant (attr)) - *offset = dwarf2_get_attr_constant_value (attr, 0); - else if (attr_form_is_section_offset (attr)) - dwarf2_complex_location_expr_complaint (); - else if (attr_form_is_block (attr)) - *offset = decode_locdesc (DW_BLOCK (attr), cu); - else - dwarf2_complex_location_expr_complaint (); - - return 1; - } - - return 0; -} - -/* Add an aggregate field to the field list. */ - -static void -dwarf2_add_field (struct field_info *fip, struct die_info *die, - struct dwarf2_cu *cu) -{ - struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile; - struct gdbarch *gdbarch = get_objfile_arch (objfile); - struct nextfield *new_field; - struct attribute *attr; - struct field *fp; - const char *fieldname = ""; - - if (die->tag == DW_TAG_inheritance) - { - fip->baseclasses.emplace_back (); - new_field = &fip->baseclasses.back (); - } - else - { - fip->fields.emplace_back (); - new_field = &fip->fields.back (); - } - - fip->nfields++; - - attr = dwarf2_attr (die, DW_AT_accessibility, cu); - if (attr != nullptr) - new_field->accessibility = DW_UNSND (attr); - else - new_field->accessibility = dwarf2_default_access_attribute (die, cu); - if (new_field->accessibility != DW_ACCESS_public) - fip->non_public_fields = 1; - - attr = dwarf2_attr (die, DW_AT_virtuality, cu); - if (attr != nullptr) - new_field->virtuality = DW_UNSND (attr); - else - new_field->virtuality = DW_VIRTUALITY_none; - - fp = &new_field->field; - - if (die->tag == DW_TAG_member && ! die_is_declaration (die, cu)) - { - LONGEST offset; - - /* Data member other than a C++ static data member. */ - - /* Get type of field. */ - fp->type = die_type (die, cu); - - SET_FIELD_BITPOS (*fp, 0); - - /* Get bit size of field (zero if none). */ - attr = dwarf2_attr (die, DW_AT_bit_size, cu); - if (attr != nullptr) - { - FIELD_BITSIZE (*fp) = DW_UNSND (attr); - } - else - { - FIELD_BITSIZE (*fp) = 0; - } - - /* Get bit offset of field. */ - if (handle_data_member_location (die, cu, &offset)) - SET_FIELD_BITPOS (*fp, offset * bits_per_byte); - attr = dwarf2_attr (die, DW_AT_bit_offset, cu); - if (attr != nullptr) - { - if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG) - { - /* For big endian bits, the DW_AT_bit_offset gives the - additional bit offset from the MSB of the containing - anonymous object to the MSB of the field. We don't - have to do anything special since we don't need to - know the size of the anonymous object. */ - SET_FIELD_BITPOS (*fp, FIELD_BITPOS (*fp) + DW_UNSND (attr)); - } - else - { - /* For little endian bits, compute the bit offset to the - MSB of the anonymous object, subtract off the number of - bits from the MSB of the field to the MSB of the - object, and then subtract off the number of bits of - the field itself. The result is the bit offset of - the LSB of the field. */ - int anonymous_size; - int bit_offset = DW_UNSND (attr); - - attr = dwarf2_attr (die, DW_AT_byte_size, cu); - if (attr != nullptr) - { - /* The size of the anonymous object containing - the bit field is explicit, so use the - indicated size (in bytes). */ - anonymous_size = DW_UNSND (attr); - } - else - { - /* The size of the anonymous object containing - the bit field must be inferred from the type - attribute of the data member containing the - bit field. */ - anonymous_size = TYPE_LENGTH (fp->type); - } - SET_FIELD_BITPOS (*fp, - (FIELD_BITPOS (*fp) - + anonymous_size * bits_per_byte - - bit_offset - FIELD_BITSIZE (*fp))); - } - } - attr = dwarf2_attr (die, DW_AT_data_bit_offset, cu); - if (attr != NULL) - SET_FIELD_BITPOS (*fp, (FIELD_BITPOS (*fp) - + dwarf2_get_attr_constant_value (attr, 0))); - - /* Get name of field. */ - fieldname = dwarf2_name (die, cu); - if (fieldname == NULL) - fieldname = ""; - - /* The name is already allocated along with this objfile, so we don't - need to duplicate it for the type. */ - fp->name = fieldname; - - /* Change accessibility for artificial fields (e.g. virtual table - pointer or virtual base class pointer) to private. */ - if (dwarf2_attr (die, DW_AT_artificial, cu)) - { - FIELD_ARTIFICIAL (*fp) = 1; - new_field->accessibility = DW_ACCESS_private; - fip->non_public_fields = 1; - } - } - else if (die->tag == DW_TAG_member || die->tag == DW_TAG_variable) - { - /* C++ static member. */ - - /* NOTE: carlton/2002-11-05: It should be a DW_TAG_member that - is a declaration, but all versions of G++ as of this writing - (so through at least 3.2.1) incorrectly generate - DW_TAG_variable tags. */ - - const char *physname; - - /* Get name of field. */ - fieldname = dwarf2_name (die, cu); - if (fieldname == NULL) - return; - - attr = dwarf2_attr (die, DW_AT_const_value, cu); - if (attr - /* Only create a symbol if this is an external value. - new_symbol checks this and puts the value in the global symbol - table, which we want. If it is not external, new_symbol - will try to put the value in cu->list_in_scope which is wrong. */ - && dwarf2_flag_true_p (die, DW_AT_external, cu)) - { - /* A static const member, not much different than an enum as far as - we're concerned, except that we can support more types. */ - new_symbol (die, NULL, cu); - } - - /* Get physical name. */ - physname = dwarf2_physname (fieldname, die, cu); - - /* The name is already allocated along with this objfile, so we don't - need to duplicate it for the type. */ - SET_FIELD_PHYSNAME (*fp, physname ? physname : ""); - FIELD_TYPE (*fp) = die_type (die, cu); - FIELD_NAME (*fp) = fieldname; - } - else if (die->tag == DW_TAG_inheritance) - { - LONGEST offset; - - /* C++ base class field. */ - if (handle_data_member_location (die, cu, &offset)) - SET_FIELD_BITPOS (*fp, offset * bits_per_byte); - FIELD_BITSIZE (*fp) = 0; - FIELD_TYPE (*fp) = die_type (die, cu); - FIELD_NAME (*fp) = TYPE_NAME (fp->type); - } - else if (die->tag == DW_TAG_variant_part) - { - /* process_structure_scope will treat this DIE as a union. */ - process_structure_scope (die, cu); - - /* The variant part is relative to the start of the enclosing - structure. */ - SET_FIELD_BITPOS (*fp, 0); - fp->type = get_die_type (die, cu); - fp->artificial = 1; - fp->name = "<<variant>>"; - - /* Normally a DW_TAG_variant_part won't have a size, but our - representation requires one, so set it to the maximum of the - child sizes, being sure to account for the offset at which - each child is seen. */ - if (TYPE_LENGTH (fp->type) == 0) - { - unsigned max = 0; - for (int i = 0; i < TYPE_NFIELDS (fp->type); ++i) - { - unsigned len = ((TYPE_FIELD_BITPOS (fp->type, i) + 7) / 8 - + TYPE_LENGTH (TYPE_FIELD_TYPE (fp->type, i))); - if (len > max) - max = len; - } - TYPE_LENGTH (fp->type) = max; - } - } - else - gdb_assert_not_reached ("missing case in dwarf2_add_field"); -} - -/* Can the type given by DIE define another type? */ - -static bool -type_can_define_types (const struct die_info *die) -{ - switch (die->tag) - { - case DW_TAG_typedef: - case DW_TAG_class_type: - case DW_TAG_structure_type: - case DW_TAG_union_type: - case DW_TAG_enumeration_type: - return true; - - default: - return false; - } -} - -/* Add a type definition defined in the scope of the FIP's class. */ - -static void -dwarf2_add_type_defn (struct field_info *fip, struct die_info *die, - struct dwarf2_cu *cu) -{ - struct decl_field fp; - memset (&fp, 0, sizeof (fp)); - - gdb_assert (type_can_define_types (die)); - - /* Get name of field. NULL is okay here, meaning an anonymous type. */ - fp.name = dwarf2_name (die, cu); - fp.type = read_type_die (die, cu); - - /* Save accessibility. */ - enum dwarf_access_attribute accessibility; - struct attribute *attr = dwarf2_attr (die, DW_AT_accessibility, cu); - if (attr != NULL) - accessibility = (enum dwarf_access_attribute) DW_UNSND (attr); - else - accessibility = dwarf2_default_access_attribute (die, cu); - switch (accessibility) - { - case DW_ACCESS_public: - /* The assumed value if neither private nor protected. */ - break; - case DW_ACCESS_private: - fp.is_private = 1; - break; - case DW_ACCESS_protected: - fp.is_protected = 1; - break; - default: - complaint (_("Unhandled DW_AT_accessibility value (%x)"), accessibility); - } - - if (die->tag == DW_TAG_typedef) - fip->typedef_field_list.push_back (fp); - else - fip->nested_types_list.push_back (fp); -} - -/* Create the vector of fields, and attach it to the type. */ - -static void -dwarf2_attach_fields_to_type (struct field_info *fip, struct type *type, - struct dwarf2_cu *cu) -{ - int nfields = fip->nfields; - - /* Record the field count, allocate space for the array of fields, - and create blank accessibility bitfields if necessary. */ - TYPE_NFIELDS (type) = nfields; - TYPE_FIELDS (type) = (struct field *) - TYPE_ZALLOC (type, sizeof (struct field) * nfields); - - if (fip->non_public_fields && cu->language != language_ada) - { - ALLOCATE_CPLUS_STRUCT_TYPE (type); - - TYPE_FIELD_PRIVATE_BITS (type) = - (B_TYPE *) TYPE_ALLOC (type, B_BYTES (nfields)); - B_CLRALL (TYPE_FIELD_PRIVATE_BITS (type), nfields); - - TYPE_FIELD_PROTECTED_BITS (type) = - (B_TYPE *) TYPE_ALLOC (type, B_BYTES (nfields)); - B_CLRALL (TYPE_FIELD_PROTECTED_BITS (type), nfields); - - TYPE_FIELD_IGNORE_BITS (type) = - (B_TYPE *) TYPE_ALLOC (type, B_BYTES (nfields)); - B_CLRALL (TYPE_FIELD_IGNORE_BITS (type), nfields); - } - - /* If the type has baseclasses, allocate and clear a bit vector for - TYPE_FIELD_VIRTUAL_BITS. */ - if (!fip->baseclasses.empty () && cu->language != language_ada) - { - int num_bytes = B_BYTES (fip->baseclasses.size ()); - unsigned char *pointer; - - ALLOCATE_CPLUS_STRUCT_TYPE (type); - pointer = (unsigned char *) TYPE_ALLOC (type, num_bytes); - TYPE_FIELD_VIRTUAL_BITS (type) = pointer; - B_CLRALL (TYPE_FIELD_VIRTUAL_BITS (type), fip->baseclasses.size ()); - TYPE_N_BASECLASSES (type) = fip->baseclasses.size (); - } - - if (TYPE_FLAG_DISCRIMINATED_UNION (type)) - { - struct discriminant_info *di = alloc_discriminant_info (type, -1, -1); - - for (int index = 0; index < nfields; ++index) - { - struct nextfield &field = fip->fields[index]; - - if (field.variant.is_discriminant) - di->discriminant_index = index; - else if (field.variant.default_branch) - di->default_index = index; - else - di->discriminants[index] = field.variant.discriminant_value; - } - } - - /* Copy the saved-up fields into the field vector. */ - for (int i = 0; i < nfields; ++i) - { - struct nextfield &field - = ((i < fip->baseclasses.size ()) ? fip->baseclasses[i] - : fip->fields[i - fip->baseclasses.size ()]); - - TYPE_FIELD (type, i) = field.field; - switch (field.accessibility) - { - case DW_ACCESS_private: - if (cu->language != language_ada) - SET_TYPE_FIELD_PRIVATE (type, i); - break; - - case DW_ACCESS_protected: - if (cu->language != language_ada) - SET_TYPE_FIELD_PROTECTED (type, i); - break; - - case DW_ACCESS_public: - break; - - default: - /* Unknown accessibility. Complain and treat it as public. */ - { - complaint (_("unsupported accessibility %d"), - field.accessibility); - } - break; - } - if (i < fip->baseclasses.size ()) - { - switch (field.virtuality) - { - case DW_VIRTUALITY_virtual: - case DW_VIRTUALITY_pure_virtual: - if (cu->language == language_ada) - error (_("unexpected virtuality in component of Ada type")); - SET_TYPE_FIELD_VIRTUAL (type, i); - break; - } - } - } -} - -/* Return true if this member function is a constructor, false - otherwise. */ - -static int -dwarf2_is_constructor (struct die_info *die, struct dwarf2_cu *cu) -{ - const char *fieldname; - const char *type_name; - int len; - - if (die->parent == NULL) - return 0; - - if (die->parent->tag != DW_TAG_structure_type - && die->parent->tag != DW_TAG_union_type - && die->parent->tag != DW_TAG_class_type) - return 0; - - fieldname = dwarf2_name (die, cu); - type_name = dwarf2_name (die->parent, cu); - if (fieldname == NULL || type_name == NULL) - return 0; - - len = strlen (fieldname); - return (strncmp (fieldname, type_name, len) == 0 - && (type_name[len] == '\0' || type_name[len] == '<')); -} - -/* Add a member function to the proper fieldlist. */ - -static void -dwarf2_add_member_fn (struct field_info *fip, struct die_info *die, - struct type *type, struct dwarf2_cu *cu) -{ - struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile; - struct attribute *attr; - int i; - struct fnfieldlist *flp = nullptr; - struct fn_field *fnp; - const char *fieldname; - struct type *this_type; - enum dwarf_access_attribute accessibility; - - if (cu->language == language_ada) - error (_("unexpected member function in Ada type")); - - /* Get name of member function. */ - fieldname = dwarf2_name (die, cu); - if (fieldname == NULL) - return; - - /* Look up member function name in fieldlist. */ - for (i = 0; i < fip->fnfieldlists.size (); i++) - { - if (strcmp (fip->fnfieldlists[i].name, fieldname) == 0) - { - flp = &fip->fnfieldlists[i]; - break; - } - } - - /* Create a new fnfieldlist if necessary. */ - if (flp == nullptr) - { - fip->fnfieldlists.emplace_back (); - flp = &fip->fnfieldlists.back (); - flp->name = fieldname; - i = fip->fnfieldlists.size () - 1; - } - - /* Create a new member function field and add it to the vector of - fnfieldlists. */ - flp->fnfields.emplace_back (); - fnp = &flp->fnfields.back (); - - /* Delay processing of the physname until later. */ - if (cu->language == language_cplus) - add_to_method_list (type, i, flp->fnfields.size () - 1, fieldname, - die, cu); - else - { - const char *physname = dwarf2_physname (fieldname, die, cu); - fnp->physname = physname ? physname : ""; - } - - fnp->type = alloc_type (objfile); - this_type = read_type_die (die, cu); - if (this_type && TYPE_CODE (this_type) == TYPE_CODE_FUNC) - { - int nparams = TYPE_NFIELDS (this_type); - - /* TYPE is the domain of this method, and THIS_TYPE is the type - of the method itself (TYPE_CODE_METHOD). */ - smash_to_method_type (fnp->type, type, - TYPE_TARGET_TYPE (this_type), - TYPE_FIELDS (this_type), - TYPE_NFIELDS (this_type), - TYPE_VARARGS (this_type)); - - /* Handle static member functions. - Dwarf2 has no clean way to discern C++ static and non-static - member functions. G++ helps GDB by marking the first - parameter for non-static member functions (which is the this - pointer) as artificial. We obtain this information from - read_subroutine_type via TYPE_FIELD_ARTIFICIAL. */ - if (nparams == 0 || TYPE_FIELD_ARTIFICIAL (this_type, 0) == 0) - fnp->voffset = VOFFSET_STATIC; - } - else - complaint (_("member function type missing for '%s'"), - dwarf2_full_name (fieldname, die, cu)); - - /* Get fcontext from DW_AT_containing_type if present. */ - if (dwarf2_attr (die, DW_AT_containing_type, cu) != NULL) - fnp->fcontext = die_containing_type (die, cu); - - /* dwarf2 doesn't have stubbed physical names, so the setting of is_const and - is_volatile is irrelevant, as it is needed by gdb_mangle_name only. */ - - /* Get accessibility. */ - attr = dwarf2_attr (die, DW_AT_accessibility, cu); - if (attr != nullptr) - accessibility = (enum dwarf_access_attribute) DW_UNSND (attr); - else - accessibility = dwarf2_default_access_attribute (die, cu); - switch (accessibility) - { - case DW_ACCESS_private: - fnp->is_private = 1; - break; - case DW_ACCESS_protected: - fnp->is_protected = 1; - break; - } - - /* Check for artificial methods. */ - attr = dwarf2_attr (die, DW_AT_artificial, cu); - if (attr && DW_UNSND (attr) != 0) - fnp->is_artificial = 1; - - fnp->is_constructor = dwarf2_is_constructor (die, cu); - - /* Get index in virtual function table if it is a virtual member - function. For older versions of GCC, this is an offset in the - appropriate virtual table, as specified by DW_AT_containing_type. - For everyone else, it is an expression to be evaluated relative - to the object address. */ - - attr = dwarf2_attr (die, DW_AT_vtable_elem_location, cu); - if (attr != nullptr) - { - if (attr_form_is_block (attr) && DW_BLOCK (attr)->size > 0) - { - if (DW_BLOCK (attr)->data[0] == DW_OP_constu) - { - /* Old-style GCC. */ - fnp->voffset = decode_locdesc (DW_BLOCK (attr), cu) + 2; - } - else if (DW_BLOCK (attr)->data[0] == DW_OP_deref - || (DW_BLOCK (attr)->size > 1 - && DW_BLOCK (attr)->data[0] == DW_OP_deref_size - && DW_BLOCK (attr)->data[1] == cu->header.addr_size)) - { - fnp->voffset = decode_locdesc (DW_BLOCK (attr), cu); - if ((fnp->voffset % cu->header.addr_size) != 0) - dwarf2_complex_location_expr_complaint (); - else - fnp->voffset /= cu->header.addr_size; - fnp->voffset += 2; - } - else - dwarf2_complex_location_expr_complaint (); - - if (!fnp->fcontext) - { - /* If there is no `this' field and no DW_AT_containing_type, - we cannot actually find a base class context for the - vtable! */ - if (TYPE_NFIELDS (this_type) == 0 - || !TYPE_FIELD_ARTIFICIAL (this_type, 0)) - { - complaint (_("cannot determine context for virtual member " - "function \"%s\" (offset %s)"), - fieldname, sect_offset_str (die->sect_off)); - } - else - { - fnp->fcontext - = TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (this_type, 0)); - } - } - } - else if (attr_form_is_section_offset (attr)) - { - dwarf2_complex_location_expr_complaint (); - } - else - { - dwarf2_invalid_attrib_class_complaint ("DW_AT_vtable_elem_location", - fieldname); - } - } - else - { - attr = dwarf2_attr (die, DW_AT_virtuality, cu); - if (attr && DW_UNSND (attr)) - { - /* GCC does this, as of 2008-08-25; PR debug/37237. */ - complaint (_("Member function \"%s\" (offset %s) is virtual " - "but the vtable offset is not specified"), - fieldname, sect_offset_str (die->sect_off)); - ALLOCATE_CPLUS_STRUCT_TYPE (type); - TYPE_CPLUS_DYNAMIC (type) = 1; - } - } -} - -/* Create the vector of member function fields, and attach it to the type. */ - -static void -dwarf2_attach_fn_fields_to_type (struct field_info *fip, struct type *type, - struct dwarf2_cu *cu) -{ - if (cu->language == language_ada) - error (_("unexpected member functions in Ada type")); - - ALLOCATE_CPLUS_STRUCT_TYPE (type); - TYPE_FN_FIELDLISTS (type) = (struct fn_fieldlist *) - TYPE_ALLOC (type, - sizeof (struct fn_fieldlist) * fip->fnfieldlists.size ()); - - for (int i = 0; i < fip->fnfieldlists.size (); i++) - { - struct fnfieldlist &nf = fip->fnfieldlists[i]; - struct fn_fieldlist *fn_flp = &TYPE_FN_FIELDLIST (type, i); - - TYPE_FN_FIELDLIST_NAME (type, i) = nf.name; - TYPE_FN_FIELDLIST_LENGTH (type, i) = nf.fnfields.size (); - fn_flp->fn_fields = (struct fn_field *) - TYPE_ALLOC (type, sizeof (struct fn_field) * nf.fnfields.size ()); - - for (int k = 0; k < nf.fnfields.size (); ++k) - fn_flp->fn_fields[k] = nf.fnfields[k]; - } - - TYPE_NFN_FIELDS (type) = fip->fnfieldlists.size (); -} - -/* Returns non-zero if NAME is the name of a vtable member in CU's - language, zero otherwise. */ -static int -is_vtable_name (const char *name, struct dwarf2_cu *cu) -{ - static const char vptr[] = "_vptr"; - - /* Look for the C++ form of the vtable. */ - if (startswith (name, vptr) && is_cplus_marker (name[sizeof (vptr) - 1])) - return 1; - - return 0; -} - -/* GCC outputs unnamed structures that are really pointers to member - functions, with the ABI-specified layout. If TYPE describes - such a structure, smash it into a member function type. - - GCC shouldn't do this; it should just output pointer to member DIEs. - This is GCC PR debug/28767. */ - -static void -quirk_gcc_member_function_pointer (struct type *type, struct objfile *objfile) -{ - struct type *pfn_type, *self_type, *new_type; - - /* Check for a structure with no name and two children. */ - if (TYPE_CODE (type) != TYPE_CODE_STRUCT || TYPE_NFIELDS (type) != 2) - return; - - /* Check for __pfn and __delta members. */ - if (TYPE_FIELD_NAME (type, 0) == NULL - || strcmp (TYPE_FIELD_NAME (type, 0), "__pfn") != 0 - || TYPE_FIELD_NAME (type, 1) == NULL - || strcmp (TYPE_FIELD_NAME (type, 1), "__delta") != 0) - return; - - /* Find the type of the method. */ - pfn_type = TYPE_FIELD_TYPE (type, 0); - if (pfn_type == NULL - || TYPE_CODE (pfn_type) != TYPE_CODE_PTR - || TYPE_CODE (TYPE_TARGET_TYPE (pfn_type)) != TYPE_CODE_FUNC) - return; - - /* Look for the "this" argument. */ - pfn_type = TYPE_TARGET_TYPE (pfn_type); - if (TYPE_NFIELDS (pfn_type) == 0 - /* || TYPE_FIELD_TYPE (pfn_type, 0) == NULL */ - || TYPE_CODE (TYPE_FIELD_TYPE (pfn_type, 0)) != TYPE_CODE_PTR) - return; - - self_type = TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (pfn_type, 0)); - new_type = alloc_type (objfile); - smash_to_method_type (new_type, self_type, TYPE_TARGET_TYPE (pfn_type), - TYPE_FIELDS (pfn_type), TYPE_NFIELDS (pfn_type), - TYPE_VARARGS (pfn_type)); - smash_to_methodptr_type (type, new_type); -} - -/* If the DIE has a DW_AT_alignment attribute, return its value, doing - appropriate error checking and issuing complaints if there is a - problem. */ - -static ULONGEST -get_alignment (struct dwarf2_cu *cu, struct die_info *die) -{ - struct attribute *attr = dwarf2_attr (die, DW_AT_alignment, cu); - - if (attr == nullptr) - return 0; - - if (!attr_form_is_constant (attr)) - { - complaint (_("DW_AT_alignment must have constant form" - " - DIE at %s [in module %s]"), - sect_offset_str (die->sect_off), - objfile_name (cu->per_cu->dwarf2_per_objfile->objfile)); - return 0; - } - - ULONGEST align; - if (attr->form == DW_FORM_sdata) - { - LONGEST val = DW_SND (attr); - if (val < 0) - { - complaint (_("DW_AT_alignment value must not be negative" - " - DIE at %s [in module %s]"), - sect_offset_str (die->sect_off), - objfile_name (cu->per_cu->dwarf2_per_objfile->objfile)); - return 0; - } - align = val; - } - else - align = DW_UNSND (attr); - - if (align == 0) - { - complaint (_("DW_AT_alignment value must not be zero" - " - DIE at %s [in module %s]"), - sect_offset_str (die->sect_off), - objfile_name (cu->per_cu->dwarf2_per_objfile->objfile)); - return 0; - } - if ((align & (align - 1)) != 0) - { - complaint (_("DW_AT_alignment value must be a power of 2" - " - DIE at %s [in module %s]"), - sect_offset_str (die->sect_off), - objfile_name (cu->per_cu->dwarf2_per_objfile->objfile)); - return 0; - } - - return align; -} - -/* If the DIE has a DW_AT_alignment attribute, use its value to set - the alignment for TYPE. */ - -static void -maybe_set_alignment (struct dwarf2_cu *cu, struct die_info *die, - struct type *type) -{ - if (!set_type_align (type, get_alignment (cu, die))) - complaint (_("DW_AT_alignment value too large" - " - DIE at %s [in module %s]"), - sect_offset_str (die->sect_off), - objfile_name (cu->per_cu->dwarf2_per_objfile->objfile)); -} - -/* Called when we find the DIE that starts a structure or union scope - (definition) to create a type for the structure or union. Fill in - the type's name and general properties; the members will not be - processed until process_structure_scope. A symbol table entry for - the type will also not be done until process_structure_scope (assuming - the type has a name). - - NOTE: we need to call these functions regardless of whether or not the - DIE has a DW_AT_name attribute, since it might be an anonymous - structure or union. This gets the type entered into our set of - user defined types. */ - -static struct type * -read_structure_type (struct die_info *die, struct dwarf2_cu *cu) -{ - struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile; - struct type *type; - struct attribute *attr; - const char *name; - - /* If the definition of this type lives in .debug_types, read that type. - Don't follow DW_AT_specification though, that will take us back up - the chain and we want to go down. */ - attr = dwarf2_attr_no_follow (die, DW_AT_signature); - if (attr != nullptr) - { - type = get_DW_AT_signature_type (die, attr, cu); - - /* The type's CU may not be the same as CU. - Ensure TYPE is recorded with CU in die_type_hash. */ - return set_die_type (die, type, cu); - } - - type = alloc_type (objfile); - INIT_CPLUS_SPECIFIC (type); - - name = dwarf2_name (die, cu); - if (name != NULL) - { - if (cu->language == language_cplus - || cu->language == language_d - || cu->language == language_rust) - { - const char *full_name = dwarf2_full_name (name, die, cu); - - /* dwarf2_full_name might have already finished building the DIE's - type. If so, there is no need to continue. */ - if (get_die_type (die, cu) != NULL) - return get_die_type (die, cu); - - TYPE_NAME (type) = full_name; - } - else - { - /* The name is already allocated along with this objfile, so - we don't need to duplicate it for the type. */ - TYPE_NAME (type) = name; - } - } - - if (die->tag == DW_TAG_structure_type) - { - TYPE_CODE (type) = TYPE_CODE_STRUCT; - } - else if (die->tag == DW_TAG_union_type) - { - TYPE_CODE (type) = TYPE_CODE_UNION; - } - else if (die->tag == DW_TAG_variant_part) - { - TYPE_CODE (type) = TYPE_CODE_UNION; - TYPE_FLAG_DISCRIMINATED_UNION (type) = 1; - } - else - { - TYPE_CODE (type) = TYPE_CODE_STRUCT; - } - - if (cu->language == language_cplus && die->tag == DW_TAG_class_type) - TYPE_DECLARED_CLASS (type) = 1; - - attr = dwarf2_attr (die, DW_AT_byte_size, cu); - if (attr != nullptr) - { - if (attr_form_is_constant (attr)) - TYPE_LENGTH (type) = DW_UNSND (attr); - else - { - /* For the moment, dynamic type sizes are not supported - by GDB's struct type. The actual size is determined - on-demand when resolving the type of a given object, - so set the type's length to zero for now. Otherwise, - we record an expression as the length, and that expression - could lead to a very large value, which could eventually - lead to us trying to allocate that much memory when creating - a value of that type. */ - TYPE_LENGTH (type) = 0; - } - } - else - { - TYPE_LENGTH (type) = 0; - } - - maybe_set_alignment (cu, die, type); - - if (producer_is_icc_lt_14 (cu) && (TYPE_LENGTH (type) == 0)) - { - /* ICC<14 does not output the required DW_AT_declaration on - incomplete types, but gives them a size of zero. */ - TYPE_STUB (type) = 1; - } - else - TYPE_STUB_SUPPORTED (type) = 1; - - if (die_is_declaration (die, cu)) - TYPE_STUB (type) = 1; - else if (attr == NULL && die->child == NULL - && producer_is_realview (cu->producer)) - /* RealView does not output the required DW_AT_declaration - on incomplete types. */ - TYPE_STUB (type) = 1; - - /* We need to add the type field to the die immediately so we don't - infinitely recurse when dealing with pointers to the structure - type within the structure itself. */ - set_die_type (die, type, cu); - - /* set_die_type should be already done. */ - set_descriptive_type (type, die, cu); - - return type; -} - -/* A helper for process_structure_scope that handles a single member - DIE. */ - -static void -handle_struct_member_die (struct die_info *child_die, struct type *type, - struct field_info *fi, - std::vector<struct symbol *> *template_args, - struct dwarf2_cu *cu) -{ - if (child_die->tag == DW_TAG_member - || child_die->tag == DW_TAG_variable - || child_die->tag == DW_TAG_variant_part) - { - /* NOTE: carlton/2002-11-05: A C++ static data member - should be a DW_TAG_member that is a declaration, but - all versions of G++ as of this writing (so through at - least 3.2.1) incorrectly generate DW_TAG_variable - tags for them instead. */ - dwarf2_add_field (fi, child_die, cu); - } - else if (child_die->tag == DW_TAG_subprogram) - { - /* Rust doesn't have member functions in the C++ sense. - However, it does emit ordinary functions as children - of a struct DIE. */ - if (cu->language == language_rust) - read_func_scope (child_die, cu); - else - { - /* C++ member function. */ - dwarf2_add_member_fn (fi, child_die, type, cu); - } - } - else if (child_die->tag == DW_TAG_inheritance) - { - /* C++ base class field. */ - dwarf2_add_field (fi, child_die, cu); - } - else if (type_can_define_types (child_die)) - dwarf2_add_type_defn (fi, child_die, cu); - else if (child_die->tag == DW_TAG_template_type_param - || child_die->tag == DW_TAG_template_value_param) - { - struct symbol *arg = new_symbol (child_die, NULL, cu); - - if (arg != NULL) - template_args->push_back (arg); - } - else if (child_die->tag == DW_TAG_variant) - { - /* In a variant we want to get the discriminant and also add a - field for our sole member child. */ - struct attribute *discr = dwarf2_attr (child_die, DW_AT_discr_value, cu); - - for (die_info *variant_child = child_die->child; - variant_child != NULL; - variant_child = sibling_die (variant_child)) - { - if (variant_child->tag == DW_TAG_member) - { - handle_struct_member_die (variant_child, type, fi, - template_args, cu); - /* Only handle the one. */ - break; - } - } - - /* We don't handle this but we might as well report it if we see - it. */ - if (dwarf2_attr (child_die, DW_AT_discr_list, cu) != nullptr) - complaint (_("DW_AT_discr_list is not supported yet" - " - DIE at %s [in module %s]"), - sect_offset_str (child_die->sect_off), - objfile_name (cu->per_cu->dwarf2_per_objfile->objfile)); - - /* The first field was just added, so we can stash the - discriminant there. */ - gdb_assert (!fi->fields.empty ()); - if (discr == NULL) - fi->fields.back ().variant.default_branch = true; - else - fi->fields.back ().variant.discriminant_value = DW_UNSND (discr); - } -} - -/* Finish creating a structure or union type, including filling in - its members and creating a symbol for it. */ - -static void -process_structure_scope (struct die_info *die, struct dwarf2_cu *cu) -{ - struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile; - struct die_info *child_die; - struct type *type; - - type = get_die_type (die, cu); - if (type == NULL) - type = read_structure_type (die, cu); - - /* When reading a DW_TAG_variant_part, we need to notice when we - read the discriminant member, so we can record it later in the - discriminant_info. */ - bool is_variant_part = TYPE_FLAG_DISCRIMINATED_UNION (type); - sect_offset discr_offset {}; - bool has_template_parameters = false; - - if (is_variant_part) - { - struct attribute *discr = dwarf2_attr (die, DW_AT_discr, cu); - if (discr == NULL) - { - /* Maybe it's a univariant form, an extension we support. - In this case arrange not to check the offset. */ - is_variant_part = false; - } - else if (attr_form_is_ref (discr)) - { - struct dwarf2_cu *target_cu = cu; - struct die_info *target_die = follow_die_ref (die, discr, &target_cu); - - discr_offset = target_die->sect_off; - } - else - { - complaint (_("DW_AT_discr does not have DIE reference form" - " - DIE at %s [in module %s]"), - sect_offset_str (die->sect_off), - objfile_name (cu->per_cu->dwarf2_per_objfile->objfile)); - is_variant_part = false; - } - } - - if (die->child != NULL && ! die_is_declaration (die, cu)) - { - struct field_info fi; - std::vector<struct symbol *> template_args; - - child_die = die->child; - - while (child_die && child_die->tag) - { - handle_struct_member_die (child_die, type, &fi, &template_args, cu); - - if (is_variant_part && discr_offset == child_die->sect_off) - fi.fields.back ().variant.is_discriminant = true; - - child_die = sibling_die (child_die); - } - - /* Attach template arguments to type. */ - if (!template_args.empty ()) - { - has_template_parameters = true; - ALLOCATE_CPLUS_STRUCT_TYPE (type); - TYPE_N_TEMPLATE_ARGUMENTS (type) = template_args.size (); - TYPE_TEMPLATE_ARGUMENTS (type) - = XOBNEWVEC (&objfile->objfile_obstack, - struct symbol *, - TYPE_N_TEMPLATE_ARGUMENTS (type)); - memcpy (TYPE_TEMPLATE_ARGUMENTS (type), - template_args.data (), - (TYPE_N_TEMPLATE_ARGUMENTS (type) - * sizeof (struct symbol *))); - } - - /* Attach fields and member functions to the type. */ - if (fi.nfields) - dwarf2_attach_fields_to_type (&fi, type, cu); - if (!fi.fnfieldlists.empty ()) - { - dwarf2_attach_fn_fields_to_type (&fi, type, cu); - - /* Get the type which refers to the base class (possibly this - class itself) which contains the vtable pointer for the current - class from the DW_AT_containing_type attribute. This use of - DW_AT_containing_type is a GNU extension. */ - - if (dwarf2_attr (die, DW_AT_containing_type, cu) != NULL) - { - struct type *t = die_containing_type (die, cu); - - set_type_vptr_basetype (type, t); - if (type == t) - { - int i; - - /* Our own class provides vtbl ptr. */ - for (i = TYPE_NFIELDS (t) - 1; - i >= TYPE_N_BASECLASSES (t); - --i) - { - const char *fieldname = TYPE_FIELD_NAME (t, i); - - if (is_vtable_name (fieldname, cu)) - { - set_type_vptr_fieldno (type, i); - break; - } - } - - /* Complain if virtual function table field not found. */ - if (i < TYPE_N_BASECLASSES (t)) - complaint (_("virtual function table pointer " - "not found when defining class '%s'"), - TYPE_NAME (type) ? TYPE_NAME (type) : ""); - } - else - { - set_type_vptr_fieldno (type, TYPE_VPTR_FIELDNO (t)); - } - } - else if (cu->producer - && startswith (cu->producer, "IBM(R) XL C/C++ Advanced Edition")) - { - /* The IBM XLC compiler does not provide direct indication - of the containing type, but the vtable pointer is - always named __vfp. */ - - int i; - - for (i = TYPE_NFIELDS (type) - 1; - i >= TYPE_N_BASECLASSES (type); - --i) - { - if (strcmp (TYPE_FIELD_NAME (type, i), "__vfp") == 0) - { - set_type_vptr_fieldno (type, i); - set_type_vptr_basetype (type, type); - break; - } - } - } - } - - /* Copy fi.typedef_field_list linked list elements content into the - allocated array TYPE_TYPEDEF_FIELD_ARRAY (type). */ - if (!fi.typedef_field_list.empty ()) - { - int count = fi.typedef_field_list.size (); - - ALLOCATE_CPLUS_STRUCT_TYPE (type); - TYPE_TYPEDEF_FIELD_ARRAY (type) - = ((struct decl_field *) - TYPE_ALLOC (type, - sizeof (TYPE_TYPEDEF_FIELD (type, 0)) * count)); - TYPE_TYPEDEF_FIELD_COUNT (type) = count; - - for (int i = 0; i < fi.typedef_field_list.size (); ++i) - TYPE_TYPEDEF_FIELD (type, i) = fi.typedef_field_list[i]; - } - - /* Copy fi.nested_types_list linked list elements content into the - allocated array TYPE_NESTED_TYPES_ARRAY (type). */ - if (!fi.nested_types_list.empty () && cu->language != language_ada) - { - int count = fi.nested_types_list.size (); - - ALLOCATE_CPLUS_STRUCT_TYPE (type); - TYPE_NESTED_TYPES_ARRAY (type) - = ((struct decl_field *) - TYPE_ALLOC (type, sizeof (struct decl_field) * count)); - TYPE_NESTED_TYPES_COUNT (type) = count; - - for (int i = 0; i < fi.nested_types_list.size (); ++i) - TYPE_NESTED_TYPES_FIELD (type, i) = fi.nested_types_list[i]; - } - } - - quirk_gcc_member_function_pointer (type, objfile); - if (cu->language == language_rust && die->tag == DW_TAG_union_type) - cu->rust_unions.push_back (type); - - /* NOTE: carlton/2004-03-16: GCC 3.4 (or at least one of its - snapshots) has been known to create a die giving a declaration - for a class that has, as a child, a die giving a definition for a - nested class. So we have to process our children even if the - current die is a declaration. Normally, of course, a declaration - won't have any children at all. */ - - child_die = die->child; - - while (child_die != NULL && child_die->tag) - { - if (child_die->tag == DW_TAG_member - || child_die->tag == DW_TAG_variable - || child_die->tag == DW_TAG_inheritance - || child_die->tag == DW_TAG_template_value_param - || child_die->tag == DW_TAG_template_type_param) - { - /* Do nothing. */ - } - else - process_die (child_die, cu); - - child_die = sibling_die (child_die); - } - - /* Do not consider external references. According to the DWARF standard, - these DIEs are identified by the fact that they have no byte_size - attribute, and a declaration attribute. */ - if (dwarf2_attr (die, DW_AT_byte_size, cu) != NULL - || !die_is_declaration (die, cu)) - { - struct symbol *sym = new_symbol (die, type, cu); - - if (has_template_parameters) - { - struct symtab *symtab; - if (sym != nullptr) - symtab = symbol_symtab (sym); - else if (cu->line_header != nullptr) - { - /* Any related symtab will do. */ - symtab - = cu->line_header->file_names ()[0].symtab; - } - else - { - symtab = nullptr; - complaint (_("could not find suitable " - "symtab for template parameter" - " - DIE at %s [in module %s]"), - sect_offset_str (die->sect_off), - objfile_name (objfile)); - } - - if (symtab != nullptr) - { - /* Make sure that the symtab is set on the new symbols. - Even though they don't appear in this symtab directly, - other parts of gdb assume that symbols do, and this is - reasonably true. */ - for (int i = 0; i < TYPE_N_TEMPLATE_ARGUMENTS (type); ++i) - symbol_set_symtab (TYPE_TEMPLATE_ARGUMENT (type, i), symtab); - } - } - } -} - -/* Assuming DIE is an enumeration type, and TYPE is its associated type, - update TYPE using some information only available in DIE's children. */ - -static void -update_enumeration_type_from_children (struct die_info *die, - struct type *type, - struct dwarf2_cu *cu) -{ - struct die_info *child_die; - int unsigned_enum = 1; - int flag_enum = 1; - ULONGEST mask = 0; - - auto_obstack obstack; - - for (child_die = die->child; - child_die != NULL && child_die->tag; - child_die = sibling_die (child_die)) - { - struct attribute *attr; - LONGEST value; - const gdb_byte *bytes; - struct dwarf2_locexpr_baton *baton; - const char *name; - - if (child_die->tag != DW_TAG_enumerator) - continue; - - attr = dwarf2_attr (child_die, DW_AT_const_value, cu); - if (attr == NULL) - continue; - - name = dwarf2_name (child_die, cu); - if (name == NULL) - name = "<anonymous enumerator>"; - - dwarf2_const_value_attr (attr, type, name, &obstack, cu, - &value, &bytes, &baton); - if (value < 0) - { - unsigned_enum = 0; - flag_enum = 0; - } - else if ((mask & value) != 0) - flag_enum = 0; - else - mask |= value; - - /* If we already know that the enum type is neither unsigned, nor - a flag type, no need to look at the rest of the enumerates. */ - if (!unsigned_enum && !flag_enum) - break; - } - - if (unsigned_enum) - TYPE_UNSIGNED (type) = 1; - if (flag_enum) - TYPE_FLAG_ENUM (type) = 1; -} - -/* Given a DW_AT_enumeration_type die, set its type. We do not - complete the type's fields yet, or create any symbols. */ - -static struct type * -read_enumeration_type (struct die_info *die, struct dwarf2_cu *cu) -{ - struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile; - struct type *type; - struct attribute *attr; - const char *name; - - /* If the definition of this type lives in .debug_types, read that type. - Don't follow DW_AT_specification though, that will take us back up - the chain and we want to go down. */ - attr = dwarf2_attr_no_follow (die, DW_AT_signature); - if (attr != nullptr) - { - type = get_DW_AT_signature_type (die, attr, cu); - - /* The type's CU may not be the same as CU. - Ensure TYPE is recorded with CU in die_type_hash. */ - return set_die_type (die, type, cu); - } - - type = alloc_type (objfile); - - TYPE_CODE (type) = TYPE_CODE_ENUM; - name = dwarf2_full_name (NULL, die, cu); - if (name != NULL) - TYPE_NAME (type) = name; - - attr = dwarf2_attr (die, DW_AT_type, cu); - if (attr != NULL) - { - struct type *underlying_type = die_type (die, cu); - - TYPE_TARGET_TYPE (type) = underlying_type; - } - - attr = dwarf2_attr (die, DW_AT_byte_size, cu); - if (attr != nullptr) - { - TYPE_LENGTH (type) = DW_UNSND (attr); - } - else - { - TYPE_LENGTH (type) = 0; - } - - maybe_set_alignment (cu, die, type); - - /* The enumeration DIE can be incomplete. In Ada, any type can be - declared as private in the package spec, and then defined only - inside the package body. Such types are known as Taft Amendment - Types. When another package uses such a type, an incomplete DIE - may be generated by the compiler. */ - if (die_is_declaration (die, cu)) - TYPE_STUB (type) = 1; - - /* Finish the creation of this type by using the enum's children. - We must call this even when the underlying type has been provided - so that we can determine if we're looking at a "flag" enum. */ - update_enumeration_type_from_children (die, type, cu); - - /* If this type has an underlying type that is not a stub, then we - may use its attributes. We always use the "unsigned" attribute - in this situation, because ordinarily we guess whether the type - is unsigned -- but the guess can be wrong and the underlying type - can tell us the reality. However, we defer to a local size - attribute if one exists, because this lets the compiler override - the underlying type if needed. */ - if (TYPE_TARGET_TYPE (type) != NULL && !TYPE_STUB (TYPE_TARGET_TYPE (type))) - { - TYPE_UNSIGNED (type) = TYPE_UNSIGNED (TYPE_TARGET_TYPE (type)); - if (TYPE_LENGTH (type) == 0) - TYPE_LENGTH (type) = TYPE_LENGTH (TYPE_TARGET_TYPE (type)); - if (TYPE_RAW_ALIGN (type) == 0 - && TYPE_RAW_ALIGN (TYPE_TARGET_TYPE (type)) != 0) - set_type_align (type, TYPE_RAW_ALIGN (TYPE_TARGET_TYPE (type))); - } - - TYPE_DECLARED_CLASS (type) = dwarf2_flag_true_p (die, DW_AT_enum_class, cu); - - return set_die_type (die, type, cu); -} - -/* Given a pointer to a die which begins an enumeration, process all - the dies that define the members of the enumeration, and create the - symbol for the enumeration type. - - NOTE: We reverse the order of the element list. */ - -static void -process_enumeration_scope (struct die_info *die, struct dwarf2_cu *cu) -{ - struct type *this_type; - - this_type = get_die_type (die, cu); - if (this_type == NULL) - this_type = read_enumeration_type (die, cu); - - if (die->child != NULL) - { - struct die_info *child_die; - struct symbol *sym; - struct field *fields = NULL; - int num_fields = 0; - const char *name; - - child_die = die->child; - while (child_die && child_die->tag) - { - if (child_die->tag != DW_TAG_enumerator) - { - process_die (child_die, cu); - } - else - { - name = dwarf2_name (child_die, cu); - if (name) - { - sym = new_symbol (child_die, this_type, cu); - - if ((num_fields % DW_FIELD_ALLOC_CHUNK) == 0) - { - fields = (struct field *) - xrealloc (fields, - (num_fields + DW_FIELD_ALLOC_CHUNK) - * sizeof (struct field)); - } - - FIELD_NAME (fields[num_fields]) = sym->linkage_name (); - FIELD_TYPE (fields[num_fields]) = NULL; - SET_FIELD_ENUMVAL (fields[num_fields], SYMBOL_VALUE (sym)); - FIELD_BITSIZE (fields[num_fields]) = 0; - - num_fields++; - } - } - - child_die = sibling_die (child_die); - } - - if (num_fields) - { - TYPE_NFIELDS (this_type) = num_fields; - TYPE_FIELDS (this_type) = (struct field *) - TYPE_ALLOC (this_type, sizeof (struct field) * num_fields); - memcpy (TYPE_FIELDS (this_type), fields, - sizeof (struct field) * num_fields); - xfree (fields); - } - } - - /* If we are reading an enum from a .debug_types unit, and the enum - is a declaration, and the enum is not the signatured type in the - unit, then we do not want to add a symbol for it. Adding a - symbol would in some cases obscure the true definition of the - enum, giving users an incomplete type when the definition is - actually available. Note that we do not want to do this for all - enums which are just declarations, because C++0x allows forward - enum declarations. */ - if (cu->per_cu->is_debug_types - && die_is_declaration (die, cu)) - { - struct signatured_type *sig_type; - - sig_type = (struct signatured_type *) cu->per_cu; - gdb_assert (to_underlying (sig_type->type_offset_in_section) != 0); - if (sig_type->type_offset_in_section != die->sect_off) - return; - } - - new_symbol (die, this_type, cu); -} - -/* Extract all information from a DW_TAG_array_type DIE and put it in - the DIE's type field. For now, this only handles one dimensional - arrays. */ - -static struct type * -read_array_type (struct die_info *die, struct dwarf2_cu *cu) -{ - struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile; - struct die_info *child_die; - struct type *type; - struct type *element_type, *range_type, *index_type; - struct attribute *attr; - const char *name; - struct dynamic_prop *byte_stride_prop = NULL; - unsigned int bit_stride = 0; - - element_type = die_type (die, cu); - - /* The die_type call above may have already set the type for this DIE. */ - type = get_die_type (die, cu); - if (type) - return type; - - attr = dwarf2_attr (die, DW_AT_byte_stride, cu); - if (attr != NULL) - { - int stride_ok; - struct type *prop_type - = dwarf2_per_cu_addr_sized_int_type (cu->per_cu, false); - - byte_stride_prop - = (struct dynamic_prop *) alloca (sizeof (struct dynamic_prop)); - stride_ok = attr_to_dynamic_prop (attr, die, cu, byte_stride_prop, - prop_type); - if (!stride_ok) - { - complaint (_("unable to read array DW_AT_byte_stride " - " - DIE at %s [in module %s]"), - sect_offset_str (die->sect_off), - objfile_name (cu->per_cu->dwarf2_per_objfile->objfile)); - /* Ignore this attribute. We will likely not be able to print - arrays of this type correctly, but there is little we can do - to help if we cannot read the attribute's value. */ - byte_stride_prop = NULL; - } - } - - attr = dwarf2_attr (die, DW_AT_bit_stride, cu); - if (attr != NULL) - bit_stride = DW_UNSND (attr); - - /* Irix 6.2 native cc creates array types without children for - arrays with unspecified length. */ - if (die->child == NULL) - { - index_type = objfile_type (objfile)->builtin_int; - range_type = create_static_range_type (NULL, index_type, 0, -1); - type = create_array_type_with_stride (NULL, element_type, range_type, - byte_stride_prop, bit_stride); - return set_die_type (die, type, cu); - } - - std::vector<struct type *> range_types; - child_die = die->child; - while (child_die && child_die->tag) - { - if (child_die->tag == DW_TAG_subrange_type) - { - struct type *child_type = read_type_die (child_die, cu); - - if (child_type != NULL) - { - /* The range type was succesfully read. Save it for the - array type creation. */ - range_types.push_back (child_type); - } - } - child_die = sibling_die (child_die); - } - - /* Dwarf2 dimensions are output from left to right, create the - necessary array types in backwards order. */ - - type = element_type; - - if (read_array_order (die, cu) == DW_ORD_col_major) - { - int i = 0; - - while (i < range_types.size ()) - type = create_array_type_with_stride (NULL, type, range_types[i++], - byte_stride_prop, bit_stride); - } - else - { - size_t ndim = range_types.size (); - while (ndim-- > 0) - type = create_array_type_with_stride (NULL, type, range_types[ndim], - byte_stride_prop, bit_stride); - } - - /* Understand Dwarf2 support for vector types (like they occur on - the PowerPC w/ AltiVec). Gcc just adds another attribute to the - array type. This is not part of the Dwarf2/3 standard yet, but a - custom vendor extension. The main difference between a regular - array and the vector variant is that vectors are passed by value - to functions. */ - attr = dwarf2_attr (die, DW_AT_GNU_vector, cu); - if (attr != nullptr) - make_vector_type (type); - - /* The DIE may have DW_AT_byte_size set. For example an OpenCL - implementation may choose to implement triple vectors using this - attribute. */ - attr = dwarf2_attr (die, DW_AT_byte_size, cu); - if (attr != nullptr) - { - if (DW_UNSND (attr) >= TYPE_LENGTH (type)) - TYPE_LENGTH (type) = DW_UNSND (attr); - else - complaint (_("DW_AT_byte_size for array type smaller " - "than the total size of elements")); - } - - name = dwarf2_name (die, cu); - if (name) - TYPE_NAME (type) = name; - - maybe_set_alignment (cu, die, type); - - /* Install the type in the die. */ - set_die_type (die, type, cu); - - /* set_die_type should be already done. */ - set_descriptive_type (type, die, cu); - - return type; -} - -static enum dwarf_array_dim_ordering -read_array_order (struct die_info *die, struct dwarf2_cu *cu) -{ - struct attribute *attr; - - attr = dwarf2_attr (die, DW_AT_ordering, cu); - - if (attr != nullptr) - return (enum dwarf_array_dim_ordering) DW_SND (attr); - - /* GNU F77 is a special case, as at 08/2004 array type info is the - opposite order to the dwarf2 specification, but data is still - laid out as per normal fortran. - - FIXME: dsl/2004-8-20: If G77 is ever fixed, this will also need - version checking. */ - - if (cu->language == language_fortran - && cu->producer && strstr (cu->producer, "GNU F77")) - { - return DW_ORD_row_major; - } - - switch (cu->language_defn->la_array_ordering) - { - case array_column_major: - return DW_ORD_col_major; - case array_row_major: - default: - return DW_ORD_row_major; - }; -} - -/* Extract all information from a DW_TAG_set_type DIE and put it in - the DIE's type field. */ - -static struct type * -read_set_type (struct die_info *die, struct dwarf2_cu *cu) -{ - struct type *domain_type, *set_type; - struct attribute *attr; - - domain_type = die_type (die, cu); - - /* The die_type call above may have already set the type for this DIE. */ - set_type = get_die_type (die, cu); - if (set_type) - return set_type; - - set_type = create_set_type (NULL, domain_type); - - attr = dwarf2_attr (die, DW_AT_byte_size, cu); - if (attr != nullptr) - TYPE_LENGTH (set_type) = DW_UNSND (attr); - - maybe_set_alignment (cu, die, set_type); - - return set_die_type (die, set_type, cu); -} - -/* A helper for read_common_block that creates a locexpr baton. - SYM is the symbol which we are marking as computed. - COMMON_DIE is the DIE for the common block. - COMMON_LOC is the location expression attribute for the common - block itself. - MEMBER_LOC is the location expression attribute for the particular - member of the common block that we are processing. - CU is the CU from which the above come. */ - -static void -mark_common_block_symbol_computed (struct symbol *sym, - struct die_info *common_die, - struct attribute *common_loc, - struct attribute *member_loc, - struct dwarf2_cu *cu) -{ - struct dwarf2_per_objfile *dwarf2_per_objfile - = cu->per_cu->dwarf2_per_objfile; - struct objfile *objfile = dwarf2_per_objfile->objfile; - struct dwarf2_locexpr_baton *baton; - gdb_byte *ptr; - unsigned int cu_off; - enum bfd_endian byte_order = gdbarch_byte_order (get_objfile_arch (objfile)); - LONGEST offset = 0; - - gdb_assert (common_loc && member_loc); - gdb_assert (attr_form_is_block (common_loc)); - gdb_assert (attr_form_is_block (member_loc) - || attr_form_is_constant (member_loc)); - - baton = XOBNEW (&objfile->objfile_obstack, struct dwarf2_locexpr_baton); - baton->per_cu = cu->per_cu; - gdb_assert (baton->per_cu); - - baton->size = 5 /* DW_OP_call4 */ + 1 /* DW_OP_plus */; - - if (attr_form_is_constant (member_loc)) - { - offset = dwarf2_get_attr_constant_value (member_loc, 0); - baton->size += 1 /* DW_OP_addr */ + cu->header.addr_size; - } - else - baton->size += DW_BLOCK (member_loc)->size; - - ptr = (gdb_byte *) obstack_alloc (&objfile->objfile_obstack, baton->size); - baton->data = ptr; - - *ptr++ = DW_OP_call4; - cu_off = common_die->sect_off - cu->per_cu->sect_off; - store_unsigned_integer (ptr, 4, byte_order, cu_off); - ptr += 4; - - if (attr_form_is_constant (member_loc)) - { - *ptr++ = DW_OP_addr; - store_unsigned_integer (ptr, cu->header.addr_size, byte_order, offset); - ptr += cu->header.addr_size; - } - else - { - /* We have to copy the data here, because DW_OP_call4 will only - use a DW_AT_location attribute. */ - memcpy (ptr, DW_BLOCK (member_loc)->data, DW_BLOCK (member_loc)->size); - ptr += DW_BLOCK (member_loc)->size; - } - - *ptr++ = DW_OP_plus; - gdb_assert (ptr - baton->data == baton->size); - - SYMBOL_LOCATION_BATON (sym) = baton; - SYMBOL_ACLASS_INDEX (sym) = dwarf2_locexpr_index; -} - -/* Create appropriate locally-scoped variables for all the - DW_TAG_common_block entries. Also create a struct common_block - listing all such variables for `info common'. COMMON_BLOCK_DOMAIN - is used to separate the common blocks name namespace from regular - variable names. */ - -static void -read_common_block (struct die_info *die, struct dwarf2_cu *cu) -{ - struct attribute *attr; - - attr = dwarf2_attr (die, DW_AT_location, cu); - if (attr != nullptr) - { - /* Support the .debug_loc offsets. */ - if (attr_form_is_block (attr)) - { - /* Ok. */ - } - else if (attr_form_is_section_offset (attr)) - { - dwarf2_complex_location_expr_complaint (); - attr = NULL; - } - else - { - dwarf2_invalid_attrib_class_complaint ("DW_AT_location", - "common block member"); - attr = NULL; - } - } - - if (die->child != NULL) - { - struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile; - struct die_info *child_die; - size_t n_entries = 0, size; - struct common_block *common_block; - struct symbol *sym; - - for (child_die = die->child; - child_die && child_die->tag; - child_die = sibling_die (child_die)) - ++n_entries; - - size = (sizeof (struct common_block) - + (n_entries - 1) * sizeof (struct symbol *)); - common_block - = (struct common_block *) obstack_alloc (&objfile->objfile_obstack, - size); - memset (common_block->contents, 0, n_entries * sizeof (struct symbol *)); - common_block->n_entries = 0; - - for (child_die = die->child; - child_die && child_die->tag; - child_die = sibling_die (child_die)) - { - /* Create the symbol in the DW_TAG_common_block block in the current - symbol scope. */ - sym = new_symbol (child_die, NULL, cu); - if (sym != NULL) - { - struct attribute *member_loc; - - common_block->contents[common_block->n_entries++] = sym; - - member_loc = dwarf2_attr (child_die, DW_AT_data_member_location, - cu); - if (member_loc) - { - /* GDB has handled this for a long time, but it is - not specified by DWARF. It seems to have been - emitted by gfortran at least as recently as: - http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23057. */ - complaint (_("Variable in common block has " - "DW_AT_data_member_location " - "- DIE at %s [in module %s]"), - sect_offset_str (child_die->sect_off), - objfile_name (objfile)); - - if (attr_form_is_section_offset (member_loc)) - dwarf2_complex_location_expr_complaint (); - else if (attr_form_is_constant (member_loc) - || attr_form_is_block (member_loc)) - { - if (attr != nullptr) - mark_common_block_symbol_computed (sym, die, attr, - member_loc, cu); - } - else - dwarf2_complex_location_expr_complaint (); - } - } - } - - sym = new_symbol (die, objfile_type (objfile)->builtin_void, cu); - SYMBOL_VALUE_COMMON_BLOCK (sym) = common_block; - } -} - -/* Create a type for a C++ namespace. */ - -static struct type * -read_namespace_type (struct die_info *die, struct dwarf2_cu *cu) -{ - struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile; - const char *previous_prefix, *name; - int is_anonymous; - struct type *type; - - /* For extensions, reuse the type of the original namespace. */ - if (dwarf2_attr (die, DW_AT_extension, cu) != NULL) - { - struct die_info *ext_die; - struct dwarf2_cu *ext_cu = cu; - - ext_die = dwarf2_extension (die, &ext_cu); - type = read_type_die (ext_die, ext_cu); - - /* EXT_CU may not be the same as CU. - Ensure TYPE is recorded with CU in die_type_hash. */ - return set_die_type (die, type, cu); - } - - name = namespace_name (die, &is_anonymous, cu); - - /* Now build the name of the current namespace. */ - - previous_prefix = determine_prefix (die, cu); - if (previous_prefix[0] != '\0') - name = typename_concat (&objfile->objfile_obstack, - previous_prefix, name, 0, cu); - - /* Create the type. */ - type = init_type (objfile, TYPE_CODE_NAMESPACE, 0, name); - - return set_die_type (die, type, cu); -} - -/* Read a namespace scope. */ - -static void -read_namespace (struct die_info *die, struct dwarf2_cu *cu) -{ - struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile; - int is_anonymous; - - /* Add a symbol associated to this if we haven't seen the namespace - before. Also, add a using directive if it's an anonymous - namespace. */ - - if (dwarf2_attr (die, DW_AT_extension, cu) == NULL) - { - struct type *type; - - type = read_type_die (die, cu); - new_symbol (die, type, cu); - - namespace_name (die, &is_anonymous, cu); - if (is_anonymous) - { - const char *previous_prefix = determine_prefix (die, cu); - - std::vector<const char *> excludes; - add_using_directive (using_directives (cu), - previous_prefix, TYPE_NAME (type), NULL, - NULL, excludes, 0, &objfile->objfile_obstack); - } - } - - if (die->child != NULL) - { - struct die_info *child_die = die->child; - - while (child_die && child_die->tag) - { - process_die (child_die, cu); - child_die = sibling_die (child_die); - } - } -} - -/* Read a Fortran module as type. This DIE can be only a declaration used for - imported module. Still we need that type as local Fortran "use ... only" - declaration imports depend on the created type in determine_prefix. */ - -static struct type * -read_module_type (struct die_info *die, struct dwarf2_cu *cu) -{ - struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile; - const char *module_name; - struct type *type; - - module_name = dwarf2_name (die, cu); - type = init_type (objfile, TYPE_CODE_MODULE, 0, module_name); - - return set_die_type (die, type, cu); -} - -/* Read a Fortran module. */ - -static void -read_module (struct die_info *die, struct dwarf2_cu *cu) -{ - struct die_info *child_die = die->child; - struct type *type; - - type = read_type_die (die, cu); - new_symbol (die, type, cu); - - while (child_die && child_die->tag) - { - process_die (child_die, cu); - child_die = sibling_die (child_die); - } -} - -/* Return the name of the namespace represented by DIE. Set - *IS_ANONYMOUS to tell whether or not the namespace is an anonymous - namespace. */ - -static const char * -namespace_name (struct die_info *die, int *is_anonymous, struct dwarf2_cu *cu) -{ - struct die_info *current_die; - const char *name = NULL; - - /* Loop through the extensions until we find a name. */ - - for (current_die = die; - current_die != NULL; - current_die = dwarf2_extension (die, &cu)) - { - /* We don't use dwarf2_name here so that we can detect the absence - of a name -> anonymous namespace. */ - name = dwarf2_string_attr (die, DW_AT_name, cu); - - if (name != NULL) - break; - } - - /* Is it an anonymous namespace? */ - - *is_anonymous = (name == NULL); - if (*is_anonymous) - name = CP_ANONYMOUS_NAMESPACE_STR; - - return name; -} - -/* Extract all information from a DW_TAG_pointer_type DIE and add to - the user defined type vector. */ - -static struct type * -read_tag_pointer_type (struct die_info *die, struct dwarf2_cu *cu) -{ - struct gdbarch *gdbarch - = get_objfile_arch (cu->per_cu->dwarf2_per_objfile->objfile); - struct comp_unit_head *cu_header = &cu->header; - struct type *type; - struct attribute *attr_byte_size; - struct attribute *attr_address_class; - int byte_size, addr_class; - struct type *target_type; - - target_type = die_type (die, cu); - - /* The die_type call above may have already set the type for this DIE. */ - type = get_die_type (die, cu); - if (type) - return type; - - type = lookup_pointer_type (target_type); - - attr_byte_size = dwarf2_attr (die, DW_AT_byte_size, cu); - if (attr_byte_size) - byte_size = DW_UNSND (attr_byte_size); - else - byte_size = cu_header->addr_size; - - attr_address_class = dwarf2_attr (die, DW_AT_address_class, cu); - if (attr_address_class) - addr_class = DW_UNSND (attr_address_class); - else - addr_class = DW_ADDR_none; - - ULONGEST alignment = get_alignment (cu, die); - - /* If the pointer size, alignment, or address class is different - than the default, create a type variant marked as such and set - the length accordingly. */ - if (TYPE_LENGTH (type) != byte_size - || (alignment != 0 && TYPE_RAW_ALIGN (type) != 0 - && alignment != TYPE_RAW_ALIGN (type)) - || addr_class != DW_ADDR_none) - { - if (gdbarch_address_class_type_flags_p (gdbarch)) - { - int type_flags; - - type_flags = gdbarch_address_class_type_flags - (gdbarch, byte_size, addr_class); - gdb_assert ((type_flags & ~TYPE_INSTANCE_FLAG_ADDRESS_CLASS_ALL) - == 0); - type = make_type_with_address_space (type, type_flags); - } - else if (TYPE_LENGTH (type) != byte_size) - { - complaint (_("invalid pointer size %d"), byte_size); - } - else if (TYPE_RAW_ALIGN (type) != alignment) - { - complaint (_("Invalid DW_AT_alignment" - " - DIE at %s [in module %s]"), - sect_offset_str (die->sect_off), - objfile_name (cu->per_cu->dwarf2_per_objfile->objfile)); - } - else - { - /* Should we also complain about unhandled address classes? */ - } - } - - TYPE_LENGTH (type) = byte_size; - set_type_align (type, alignment); - return set_die_type (die, type, cu); -} - -/* Extract all information from a DW_TAG_ptr_to_member_type DIE and add to - the user defined type vector. */ - -static struct type * -read_tag_ptr_to_member_type (struct die_info *die, struct dwarf2_cu *cu) -{ - struct type *type; - struct type *to_type; - struct type *domain; - - to_type = die_type (die, cu); - domain = die_containing_type (die, cu); - - /* The calls above may have already set the type for this DIE. */ - type = get_die_type (die, cu); - if (type) - return type; - - if (TYPE_CODE (check_typedef (to_type)) == TYPE_CODE_METHOD) - type = lookup_methodptr_type (to_type); - else if (TYPE_CODE (check_typedef (to_type)) == TYPE_CODE_FUNC) - { - struct type *new_type - = alloc_type (cu->per_cu->dwarf2_per_objfile->objfile); - - smash_to_method_type (new_type, domain, TYPE_TARGET_TYPE (to_type), - TYPE_FIELDS (to_type), TYPE_NFIELDS (to_type), - TYPE_VARARGS (to_type)); - type = lookup_methodptr_type (new_type); - } - else - type = lookup_memberptr_type (to_type, domain); - - return set_die_type (die, type, cu); -} - -/* Extract all information from a DW_TAG_{rvalue_,}reference_type DIE and add to - the user defined type vector. */ - -static struct type * -read_tag_reference_type (struct die_info *die, struct dwarf2_cu *cu, - enum type_code refcode) -{ - struct comp_unit_head *cu_header = &cu->header; - struct type *type, *target_type; - struct attribute *attr; - - gdb_assert (refcode == TYPE_CODE_REF || refcode == TYPE_CODE_RVALUE_REF); - - target_type = die_type (die, cu); - - /* The die_type call above may have already set the type for this DIE. */ - type = get_die_type (die, cu); - if (type) - return type; - - type = lookup_reference_type (target_type, refcode); - attr = dwarf2_attr (die, DW_AT_byte_size, cu); - if (attr != nullptr) - { - TYPE_LENGTH (type) = DW_UNSND (attr); - } - else - { - TYPE_LENGTH (type) = cu_header->addr_size; - } - maybe_set_alignment (cu, die, type); - return set_die_type (die, type, cu); -} - -/* Add the given cv-qualifiers to the element type of the array. GCC - outputs DWARF type qualifiers that apply to an array, not the - element type. But GDB relies on the array element type to carry - the cv-qualifiers. This mimics section 6.7.3 of the C99 - specification. */ - -static struct type * -add_array_cv_type (struct die_info *die, struct dwarf2_cu *cu, - struct type *base_type, int cnst, int voltl) -{ - struct type *el_type, *inner_array; - - base_type = copy_type (base_type); - inner_array = base_type; - - while (TYPE_CODE (TYPE_TARGET_TYPE (inner_array)) == TYPE_CODE_ARRAY) - { - TYPE_TARGET_TYPE (inner_array) = - copy_type (TYPE_TARGET_TYPE (inner_array)); - inner_array = TYPE_TARGET_TYPE (inner_array); - } - - el_type = TYPE_TARGET_TYPE (inner_array); - cnst |= TYPE_CONST (el_type); - voltl |= TYPE_VOLATILE (el_type); - TYPE_TARGET_TYPE (inner_array) = make_cv_type (cnst, voltl, el_type, NULL); - - return set_die_type (die, base_type, cu); -} - -static struct type * -read_tag_const_type (struct die_info *die, struct dwarf2_cu *cu) -{ - struct type *base_type, *cv_type; - - base_type = die_type (die, cu); - - /* The die_type call above may have already set the type for this DIE. */ - cv_type = get_die_type (die, cu); - if (cv_type) - return cv_type; - - /* In case the const qualifier is applied to an array type, the element type - is so qualified, not the array type (section 6.7.3 of C99). */ - if (TYPE_CODE (base_type) == TYPE_CODE_ARRAY) - return add_array_cv_type (die, cu, base_type, 1, 0); - - cv_type = make_cv_type (1, TYPE_VOLATILE (base_type), base_type, 0); - return set_die_type (die, cv_type, cu); -} - -static struct type * -read_tag_volatile_type (struct die_info *die, struct dwarf2_cu *cu) -{ - struct type *base_type, *cv_type; - - base_type = die_type (die, cu); - - /* The die_type call above may have already set the type for this DIE. */ - cv_type = get_die_type (die, cu); - if (cv_type) - return cv_type; - - /* In case the volatile qualifier is applied to an array type, the - element type is so qualified, not the array type (section 6.7.3 - of C99). */ - if (TYPE_CODE (base_type) == TYPE_CODE_ARRAY) - return add_array_cv_type (die, cu, base_type, 0, 1); - - cv_type = make_cv_type (TYPE_CONST (base_type), 1, base_type, 0); - return set_die_type (die, cv_type, cu); -} - -/* Handle DW_TAG_restrict_type. */ - -static struct type * -read_tag_restrict_type (struct die_info *die, struct dwarf2_cu *cu) -{ - struct type *base_type, *cv_type; - - base_type = die_type (die, cu); - - /* The die_type call above may have already set the type for this DIE. */ - cv_type = get_die_type (die, cu); - if (cv_type) - return cv_type; - - cv_type = make_restrict_type (base_type); - return set_die_type (die, cv_type, cu); -} - -/* Handle DW_TAG_atomic_type. */ - -static struct type * -read_tag_atomic_type (struct die_info *die, struct dwarf2_cu *cu) -{ - struct type *base_type, *cv_type; - - base_type = die_type (die, cu); - - /* The die_type call above may have already set the type for this DIE. */ - cv_type = get_die_type (die, cu); - if (cv_type) - return cv_type; - - cv_type = make_atomic_type (base_type); - return set_die_type (die, cv_type, cu); -} - -/* Extract all information from a DW_TAG_string_type DIE and add to - the user defined type vector. It isn't really a user defined type, - but it behaves like one, with other DIE's using an AT_user_def_type - attribute to reference it. */ - -static struct type * -read_tag_string_type (struct die_info *die, struct dwarf2_cu *cu) -{ - struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile; - struct gdbarch *gdbarch = get_objfile_arch (objfile); - struct type *type, *range_type, *index_type, *char_type; - struct attribute *attr; - struct dynamic_prop prop; - bool length_is_constant = true; - LONGEST length; - - /* There are a couple of places where bit sizes might be made use of - when parsing a DW_TAG_string_type, however, no producer that we know - of make use of these. Handling bit sizes that are a multiple of the - byte size is easy enough, but what about other bit sizes? Lets deal - with that problem when we have to. Warn about these attributes being - unsupported, then parse the type and ignore them like we always - have. */ - if (dwarf2_attr (die, DW_AT_bit_size, cu) != nullptr - || dwarf2_attr (die, DW_AT_string_length_bit_size, cu) != nullptr) - { - static bool warning_printed = false; - if (!warning_printed) - { - warning (_("DW_AT_bit_size and DW_AT_string_length_bit_size not " - "currently supported on DW_TAG_string_type.")); - warning_printed = true; - } - } - - attr = dwarf2_attr (die, DW_AT_string_length, cu); - if (attr != nullptr && !attr_form_is_constant (attr)) - { - /* The string length describes the location at which the length of - the string can be found. The size of the length field can be - specified with one of the attributes below. */ - struct type *prop_type; - struct attribute *len - = dwarf2_attr (die, DW_AT_string_length_byte_size, cu); - if (len == nullptr) - len = dwarf2_attr (die, DW_AT_byte_size, cu); - if (len != nullptr && attr_form_is_constant (len)) - { - /* Pass 0 as the default as we know this attribute is constant - and the default value will not be returned. */ - LONGEST sz = dwarf2_get_attr_constant_value (len, 0); - prop_type = dwarf2_per_cu_int_type (cu->per_cu, sz, true); - } - else - { - /* If the size is not specified then we assume it is the size of - an address on this target. */ - prop_type = dwarf2_per_cu_addr_sized_int_type (cu->per_cu, true); - } - - /* Convert the attribute into a dynamic property. */ - if (!attr_to_dynamic_prop (attr, die, cu, &prop, prop_type)) - length = 1; - else - length_is_constant = false; - } - else if (attr != nullptr) - { - /* This DW_AT_string_length just contains the length with no - indirection. There's no need to create a dynamic property in this - case. Pass 0 for the default value as we know it will not be - returned in this case. */ - length = dwarf2_get_attr_constant_value (attr, 0); - } - else if ((attr = dwarf2_attr (die, DW_AT_byte_size, cu)) != nullptr) - { - /* We don't currently support non-constant byte sizes for strings. */ - length = dwarf2_get_attr_constant_value (attr, 1); - } - else - { - /* Use 1 as a fallback length if we have nothing else. */ - length = 1; - } - - index_type = objfile_type (objfile)->builtin_int; - if (length_is_constant) - range_type = create_static_range_type (NULL, index_type, 1, length); - else - { - struct dynamic_prop low_bound; - - low_bound.kind = PROP_CONST; - low_bound.data.const_val = 1; - range_type = create_range_type (NULL, index_type, &low_bound, &prop, 0); - } - char_type = language_string_char_type (cu->language_defn, gdbarch); - type = create_string_type (NULL, char_type, range_type); - - return set_die_type (die, type, cu); -} - -/* Assuming that DIE corresponds to a function, returns nonzero - if the function is prototyped. */ - -static int -prototyped_function_p (struct die_info *die, struct dwarf2_cu *cu) -{ - struct attribute *attr; - - attr = dwarf2_attr (die, DW_AT_prototyped, cu); - if (attr && (DW_UNSND (attr) != 0)) - return 1; - - /* The DWARF standard implies that the DW_AT_prototyped attribute - is only meaningful for C, but the concept also extends to other - languages that allow unprototyped functions (Eg: Objective C). - For all other languages, assume that functions are always - prototyped. */ - if (cu->language != language_c - && cu->language != language_objc - && cu->language != language_opencl) - return 1; - - /* RealView does not emit DW_AT_prototyped. We can not distinguish - prototyped and unprototyped functions; default to prototyped, - since that is more common in modern code (and RealView warns - about unprototyped functions). */ - if (producer_is_realview (cu->producer)) - return 1; - - return 0; -} - -/* Handle DIES due to C code like: - - struct foo - { - int (*funcp)(int a, long l); - int b; - }; - - ('funcp' generates a DW_TAG_subroutine_type DIE). */ - -static struct type * -read_subroutine_type (struct die_info *die, struct dwarf2_cu *cu) -{ - struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile; - struct type *type; /* Type that this function returns. */ - struct type *ftype; /* Function that returns above type. */ - struct attribute *attr; - - type = die_type (die, cu); - - /* The die_type call above may have already set the type for this DIE. */ - ftype = get_die_type (die, cu); - if (ftype) - return ftype; - - ftype = lookup_function_type (type); - - if (prototyped_function_p (die, cu)) - TYPE_PROTOTYPED (ftype) = 1; - - /* Store the calling convention in the type if it's available in - the subroutine die. Otherwise set the calling convention to - the default value DW_CC_normal. */ - attr = dwarf2_attr (die, DW_AT_calling_convention, cu); - if (attr != nullptr) - TYPE_CALLING_CONVENTION (ftype) = DW_UNSND (attr); - else if (cu->producer && strstr (cu->producer, "IBM XL C for OpenCL")) - TYPE_CALLING_CONVENTION (ftype) = DW_CC_GDB_IBM_OpenCL; - else - TYPE_CALLING_CONVENTION (ftype) = DW_CC_normal; - - /* Record whether the function returns normally to its caller or not - if the DWARF producer set that information. */ - attr = dwarf2_attr (die, DW_AT_noreturn, cu); - if (attr && (DW_UNSND (attr) != 0)) - TYPE_NO_RETURN (ftype) = 1; - - /* We need to add the subroutine type to the die immediately so - we don't infinitely recurse when dealing with parameters - declared as the same subroutine type. */ - set_die_type (die, ftype, cu); - - if (die->child != NULL) - { - struct type *void_type = objfile_type (objfile)->builtin_void; - struct die_info *child_die; - int nparams, iparams; - - /* Count the number of parameters. - FIXME: GDB currently ignores vararg functions, but knows about - vararg member functions. */ - nparams = 0; - child_die = die->child; - while (child_die && child_die->tag) - { - if (child_die->tag == DW_TAG_formal_parameter) - nparams++; - else if (child_die->tag == DW_TAG_unspecified_parameters) - TYPE_VARARGS (ftype) = 1; - child_die = sibling_die (child_die); - } - - /* Allocate storage for parameters and fill them in. */ - TYPE_NFIELDS (ftype) = nparams; - TYPE_FIELDS (ftype) = (struct field *) - TYPE_ZALLOC (ftype, nparams * sizeof (struct field)); - - /* TYPE_FIELD_TYPE must never be NULL. Pre-fill the array to ensure it - even if we error out during the parameters reading below. */ - for (iparams = 0; iparams < nparams; iparams++) - TYPE_FIELD_TYPE (ftype, iparams) = void_type; - - iparams = 0; - child_die = die->child; - while (child_die && child_die->tag) - { - if (child_die->tag == DW_TAG_formal_parameter) - { - struct type *arg_type; - - /* DWARF version 2 has no clean way to discern C++ - static and non-static member functions. G++ helps - GDB by marking the first parameter for non-static - member functions (which is the this pointer) as - artificial. We pass this information to - dwarf2_add_member_fn via TYPE_FIELD_ARTIFICIAL. - - DWARF version 3 added DW_AT_object_pointer, which GCC - 4.5 does not yet generate. */ - attr = dwarf2_attr (child_die, DW_AT_artificial, cu); - if (attr != nullptr) - TYPE_FIELD_ARTIFICIAL (ftype, iparams) = DW_UNSND (attr); - else - TYPE_FIELD_ARTIFICIAL (ftype, iparams) = 0; - arg_type = die_type (child_die, cu); - - /* RealView does not mark THIS as const, which the testsuite - expects. GCC marks THIS as const in method definitions, - but not in the class specifications (GCC PR 43053). */ - if (cu->language == language_cplus && !TYPE_CONST (arg_type) - && TYPE_FIELD_ARTIFICIAL (ftype, iparams)) - { - int is_this = 0; - struct dwarf2_cu *arg_cu = cu; - const char *name = dwarf2_name (child_die, cu); - - attr = dwarf2_attr (die, DW_AT_object_pointer, cu); - if (attr != nullptr) - { - /* If the compiler emits this, use it. */ - if (follow_die_ref (die, attr, &arg_cu) == child_die) - is_this = 1; - } - else if (name && strcmp (name, "this") == 0) - /* Function definitions will have the argument names. */ - is_this = 1; - else if (name == NULL && iparams == 0) - /* Declarations may not have the names, so like - elsewhere in GDB, assume an artificial first - argument is "this". */ - is_this = 1; - - if (is_this) - arg_type = make_cv_type (1, TYPE_VOLATILE (arg_type), - arg_type, 0); - } - - TYPE_FIELD_TYPE (ftype, iparams) = arg_type; - iparams++; - } - child_die = sibling_die (child_die); - } - } - - return ftype; -} - -static struct type * -read_typedef (struct die_info *die, struct dwarf2_cu *cu) -{ - struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile; - const char *name = NULL; - struct type *this_type, *target_type; - - name = dwarf2_full_name (NULL, die, cu); - this_type = init_type (objfile, TYPE_CODE_TYPEDEF, 0, name); - TYPE_TARGET_STUB (this_type) = 1; - set_die_type (die, this_type, cu); - target_type = die_type (die, cu); - if (target_type != this_type) - TYPE_TARGET_TYPE (this_type) = target_type; - else - { - /* Self-referential typedefs are, it seems, not allowed by the DWARF - spec and cause infinite loops in GDB. */ - complaint (_("Self-referential DW_TAG_typedef " - "- DIE at %s [in module %s]"), - sect_offset_str (die->sect_off), objfile_name (objfile)); - TYPE_TARGET_TYPE (this_type) = NULL; - } - return this_type; -} - -/* Allocate a floating-point type of size BITS and name NAME. Pass NAME_HINT - (which may be different from NAME) to the architecture back-end to allow - it to guess the correct format if necessary. */ - -static struct type * -dwarf2_init_float_type (struct objfile *objfile, int bits, const char *name, - const char *name_hint, enum bfd_endian byte_order) -{ - struct gdbarch *gdbarch = get_objfile_arch (objfile); - const struct floatformat **format; - struct type *type; - - format = gdbarch_floatformat_for_type (gdbarch, name_hint, bits); - if (format) - type = init_float_type (objfile, bits, name, format, byte_order); - else - type = init_type (objfile, TYPE_CODE_ERROR, bits, name); - - return type; -} - -/* Allocate an integer type of size BITS and name NAME. */ - -static struct type * -dwarf2_init_integer_type (struct dwarf2_cu *cu, struct objfile *objfile, - int bits, int unsigned_p, const char *name) -{ - struct type *type; - - /* Versions of Intel's C Compiler generate an integer type called "void" - instead of using DW_TAG_unspecified_type. This has been seen on - at least versions 14, 17, and 18. */ - if (bits == 0 && producer_is_icc (cu) && name != nullptr - && strcmp (name, "void") == 0) - type = objfile_type (objfile)->builtin_void; - else - type = init_integer_type (objfile, bits, unsigned_p, name); - - return type; -} - -/* Initialise and return a floating point type of size BITS suitable for - use as a component of a complex number. The NAME_HINT is passed through - when initialising the floating point type and is the name of the complex - type. - - As DWARF doesn't currently provide an explicit name for the components - of a complex number, but it can be helpful to have these components - named, we try to select a suitable name based on the size of the - component. */ -static struct type * -dwarf2_init_complex_target_type (struct dwarf2_cu *cu, - struct objfile *objfile, - int bits, const char *name_hint, - enum bfd_endian byte_order) -{ - gdbarch *gdbarch = get_objfile_arch (objfile); - struct type *tt = nullptr; - - /* Try to find a suitable floating point builtin type of size BITS. - We're going to use the name of this type as the name for the complex - target type that we are about to create. */ - switch (cu->language) - { - case language_fortran: - switch (bits) - { - case 32: - tt = builtin_f_type (gdbarch)->builtin_real; - break; - case 64: - tt = builtin_f_type (gdbarch)->builtin_real_s8; - break; - case 96: /* The x86-32 ABI specifies 96-bit long double. */ - case 128: - tt = builtin_f_type (gdbarch)->builtin_real_s16; - break; - } - break; - default: - switch (bits) - { - case 32: - tt = builtin_type (gdbarch)->builtin_float; - break; - case 64: - tt = builtin_type (gdbarch)->builtin_double; - break; - case 96: /* The x86-32 ABI specifies 96-bit long double. */ - case 128: - tt = builtin_type (gdbarch)->builtin_long_double; - break; - } - break; - } - - /* If the type we found doesn't match the size we were looking for, then - pretend we didn't find a type at all, the complex target type we - create will then be nameless. */ - if (tt != nullptr && TYPE_LENGTH (tt) * TARGET_CHAR_BIT != bits) - tt = nullptr; - - const char *name = (tt == nullptr) ? nullptr : TYPE_NAME (tt); - return dwarf2_init_float_type (objfile, bits, name, name_hint, byte_order); -} - -/* Find a representation of a given base type and install - it in the TYPE field of the die. */ - -static struct type * -read_base_type (struct die_info *die, struct dwarf2_cu *cu) -{ - struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile; - struct type *type; - struct attribute *attr; - int encoding = 0, bits = 0; - const char *name; - gdbarch *arch; - - attr = dwarf2_attr (die, DW_AT_encoding, cu); - if (attr != nullptr) - encoding = DW_UNSND (attr); - attr = dwarf2_attr (die, DW_AT_byte_size, cu); - if (attr != nullptr) - bits = DW_UNSND (attr) * TARGET_CHAR_BIT; - name = dwarf2_name (die, cu); - if (!name) - complaint (_("DW_AT_name missing from DW_TAG_base_type")); - - arch = get_objfile_arch (objfile); - enum bfd_endian byte_order = gdbarch_byte_order (arch); - - attr = dwarf2_attr (die, DW_AT_endianity, cu); - if (attr) - { - int endianity = DW_UNSND (attr); - - switch (endianity) - { - case DW_END_big: - byte_order = BFD_ENDIAN_BIG; - break; - case DW_END_little: - byte_order = BFD_ENDIAN_LITTLE; - break; - default: - complaint (_("DW_AT_endianity has unrecognized value %d"), endianity); - break; - } - } - - switch (encoding) - { - case DW_ATE_address: - /* Turn DW_ATE_address into a void * pointer. */ - type = init_type (objfile, TYPE_CODE_VOID, TARGET_CHAR_BIT, NULL); - type = init_pointer_type (objfile, bits, name, type); - break; - case DW_ATE_boolean: - type = init_boolean_type (objfile, bits, 1, name); - break; - case DW_ATE_complex_float: - type = dwarf2_init_complex_target_type (cu, objfile, bits / 2, name, - byte_order); - type = init_complex_type (objfile, name, type); - break; - case DW_ATE_decimal_float: - type = init_decfloat_type (objfile, bits, name); - break; - case DW_ATE_float: - type = dwarf2_init_float_type (objfile, bits, name, name, byte_order); - break; - case DW_ATE_signed: - type = dwarf2_init_integer_type (cu, objfile, bits, 0, name); - break; - case DW_ATE_unsigned: - if (cu->language == language_fortran - && name - && startswith (name, "character(")) - type = init_character_type (objfile, bits, 1, name); - else - type = dwarf2_init_integer_type (cu, objfile, bits, 1, name); - break; - case DW_ATE_signed_char: - if (cu->language == language_ada || cu->language == language_m2 - || cu->language == language_pascal - || cu->language == language_fortran) - type = init_character_type (objfile, bits, 0, name); - else - type = dwarf2_init_integer_type (cu, objfile, bits, 0, name); - break; - case DW_ATE_unsigned_char: - if (cu->language == language_ada || cu->language == language_m2 - || cu->language == language_pascal - || cu->language == language_fortran - || cu->language == language_rust) - type = init_character_type (objfile, bits, 1, name); - else - type = dwarf2_init_integer_type (cu, objfile, bits, 1, name); - break; - case DW_ATE_UTF: - { - if (bits == 16) - type = builtin_type (arch)->builtin_char16; - else if (bits == 32) - type = builtin_type (arch)->builtin_char32; - else - { - complaint (_("unsupported DW_ATE_UTF bit size: '%d'"), - bits); - type = dwarf2_init_integer_type (cu, objfile, bits, 1, name); - } - return set_die_type (die, type, cu); - } - break; - - default: - complaint (_("unsupported DW_AT_encoding: '%s'"), - dwarf_type_encoding_name (encoding)); - type = init_type (objfile, TYPE_CODE_ERROR, bits, name); - break; - } - - if (name && strcmp (name, "char") == 0) - TYPE_NOSIGN (type) = 1; - - maybe_set_alignment (cu, die, type); - - TYPE_ENDIANITY_NOT_DEFAULT (type) = gdbarch_byte_order (arch) != byte_order; - - return set_die_type (die, type, cu); -} - -/* Parse dwarf attribute if it's a block, reference or constant and put the - resulting value of the attribute into struct bound_prop. - Returns 1 if ATTR could be resolved into PROP, 0 otherwise. */ - -static int -attr_to_dynamic_prop (const struct attribute *attr, struct die_info *die, - struct dwarf2_cu *cu, struct dynamic_prop *prop, - struct type *default_type) -{ - struct dwarf2_property_baton *baton; - struct obstack *obstack - = &cu->per_cu->dwarf2_per_objfile->objfile->objfile_obstack; - - gdb_assert (default_type != NULL); - - if (attr == NULL || prop == NULL) - return 0; - - if (attr_form_is_block (attr)) - { - baton = XOBNEW (obstack, struct dwarf2_property_baton); - baton->property_type = default_type; - baton->locexpr.per_cu = cu->per_cu; - baton->locexpr.size = DW_BLOCK (attr)->size; - baton->locexpr.data = DW_BLOCK (attr)->data; - switch (attr->name) - { - case DW_AT_string_length: - baton->locexpr.is_reference = true; - break; - default: - baton->locexpr.is_reference = false; - break; - } - prop->data.baton = baton; - prop->kind = PROP_LOCEXPR; - gdb_assert (prop->data.baton != NULL); - } - else if (attr_form_is_ref (attr)) - { - struct dwarf2_cu *target_cu = cu; - struct die_info *target_die; - struct attribute *target_attr; - - target_die = follow_die_ref (die, attr, &target_cu); - target_attr = dwarf2_attr (target_die, DW_AT_location, target_cu); - if (target_attr == NULL) - target_attr = dwarf2_attr (target_die, DW_AT_data_member_location, - target_cu); - if (target_attr == NULL) - return 0; - - switch (target_attr->name) - { - case DW_AT_location: - if (attr_form_is_section_offset (target_attr)) - { - baton = XOBNEW (obstack, struct dwarf2_property_baton); - baton->property_type = die_type (target_die, target_cu); - fill_in_loclist_baton (cu, &baton->loclist, target_attr); - prop->data.baton = baton; - prop->kind = PROP_LOCLIST; - gdb_assert (prop->data.baton != NULL); - } - else if (attr_form_is_block (target_attr)) - { - baton = XOBNEW (obstack, struct dwarf2_property_baton); - baton->property_type = die_type (target_die, target_cu); - baton->locexpr.per_cu = cu->per_cu; - baton->locexpr.size = DW_BLOCK (target_attr)->size; - baton->locexpr.data = DW_BLOCK (target_attr)->data; - baton->locexpr.is_reference = true; - prop->data.baton = baton; - prop->kind = PROP_LOCEXPR; - gdb_assert (prop->data.baton != NULL); - } - else - { - dwarf2_invalid_attrib_class_complaint ("DW_AT_location", - "dynamic property"); - return 0; - } - break; - case DW_AT_data_member_location: - { - LONGEST offset; - - if (!handle_data_member_location (target_die, target_cu, - &offset)) - return 0; - - baton = XOBNEW (obstack, struct dwarf2_property_baton); - baton->property_type = read_type_die (target_die->parent, - target_cu); - baton->offset_info.offset = offset; - baton->offset_info.type = die_type (target_die, target_cu); - prop->data.baton = baton; - prop->kind = PROP_ADDR_OFFSET; - break; - } - } - } - else if (attr_form_is_constant (attr)) - { - prop->data.const_val = dwarf2_get_attr_constant_value (attr, 0); - prop->kind = PROP_CONST; - } - else - { - dwarf2_invalid_attrib_class_complaint (dwarf_form_name (attr->form), - dwarf2_name (die, cu)); - return 0; - } - - return 1; -} - -/* Find an integer type SIZE_IN_BYTES bytes in size and return it. - UNSIGNED_P controls if the integer is unsigned or not. */ - -static struct type * -dwarf2_per_cu_int_type (struct dwarf2_per_cu_data *per_cu, - int size_in_bytes, bool unsigned_p) -{ - struct objfile *objfile = per_cu->dwarf2_per_objfile->objfile; - struct type *int_type; - - /* Helper macro to examine the various builtin types. */ -#define TRY_TYPE(F) \ - int_type = (unsigned_p \ - ? objfile_type (objfile)->builtin_unsigned_ ## F \ - : objfile_type (objfile)->builtin_ ## F); \ - if (int_type != NULL && TYPE_LENGTH (int_type) == size_in_bytes) \ - return int_type - - TRY_TYPE (char); - TRY_TYPE (short); - TRY_TYPE (int); - TRY_TYPE (long); - TRY_TYPE (long_long); - -#undef TRY_TYPE - - gdb_assert_not_reached ("unable to find suitable integer type"); -} - -/* Find an integer type the same size as the address size given in the - compilation unit header for PER_CU. UNSIGNED_P controls if the integer - is unsigned or not. */ - -static struct type * -dwarf2_per_cu_addr_sized_int_type (struct dwarf2_per_cu_data *per_cu, - bool unsigned_p) -{ - int addr_size = dwarf2_per_cu_addr_size (per_cu); - return dwarf2_per_cu_int_type (per_cu, addr_size, unsigned_p); -} - -/* Read the DW_AT_type attribute for a sub-range. If this attribute is not - present (which is valid) then compute the default type based on the - compilation units address size. */ - -static struct type * -read_subrange_index_type (struct die_info *die, struct dwarf2_cu *cu) -{ - struct type *index_type = die_type (die, cu); - - /* Dwarf-2 specifications explicitly allows to create subrange types - without specifying a base type. - In that case, the base type must be set to the type of - the lower bound, upper bound or count, in that order, if any of these - three attributes references an object that has a type. - If no base type is found, the Dwarf-2 specifications say that - a signed integer type of size equal to the size of an address should - be used. - For the following C code: `extern char gdb_int [];' - GCC produces an empty range DIE. - FIXME: muller/2010-05-28: Possible references to object for low bound, - high bound or count are not yet handled by this code. */ - if (TYPE_CODE (index_type) == TYPE_CODE_VOID) - index_type = dwarf2_per_cu_addr_sized_int_type (cu->per_cu, false); - - return index_type; -} - -/* Read the given DW_AT_subrange DIE. */ - -static struct type * -read_subrange_type (struct die_info *die, struct dwarf2_cu *cu) -{ - struct type *base_type, *orig_base_type; - struct type *range_type; - struct attribute *attr; - struct dynamic_prop low, high; - int low_default_is_valid; - int high_bound_is_count = 0; - const char *name; - ULONGEST negative_mask; - - orig_base_type = read_subrange_index_type (die, cu); - - /* If ORIG_BASE_TYPE is a typedef, it will not be TYPE_UNSIGNED, - whereas the real type might be. So, we use ORIG_BASE_TYPE when - creating the range type, but we use the result of check_typedef - when examining properties of the type. */ - base_type = check_typedef (orig_base_type); - - /* The die_type call above may have already set the type for this DIE. */ - range_type = get_die_type (die, cu); - if (range_type) - return range_type; - - low.kind = PROP_CONST; - high.kind = PROP_CONST; - high.data.const_val = 0; - - /* Set LOW_DEFAULT_IS_VALID if current language and DWARF version allow - omitting DW_AT_lower_bound. */ - switch (cu->language) - { - case language_c: - case language_cplus: - low.data.const_val = 0; - low_default_is_valid = 1; - break; - case language_fortran: - low.data.const_val = 1; - low_default_is_valid = 1; - break; - case language_d: - case language_objc: - case language_rust: - low.data.const_val = 0; - low_default_is_valid = (cu->header.version >= 4); - break; - case language_ada: - case language_m2: - case language_pascal: - low.data.const_val = 1; - low_default_is_valid = (cu->header.version >= 4); - break; - default: - low.data.const_val = 0; - low_default_is_valid = 0; - break; - } - - attr = dwarf2_attr (die, DW_AT_lower_bound, cu); - if (attr != nullptr) - attr_to_dynamic_prop (attr, die, cu, &low, base_type); - else if (!low_default_is_valid) - complaint (_("Missing DW_AT_lower_bound " - "- DIE at %s [in module %s]"), - sect_offset_str (die->sect_off), - objfile_name (cu->per_cu->dwarf2_per_objfile->objfile)); - - struct attribute *attr_ub, *attr_count; - attr = attr_ub = dwarf2_attr (die, DW_AT_upper_bound, cu); - if (!attr_to_dynamic_prop (attr, die, cu, &high, base_type)) - { - attr = attr_count = dwarf2_attr (die, DW_AT_count, cu); - if (attr_to_dynamic_prop (attr, die, cu, &high, base_type)) - { - /* If bounds are constant do the final calculation here. */ - if (low.kind == PROP_CONST && high.kind == PROP_CONST) - high.data.const_val = low.data.const_val + high.data.const_val - 1; - else - high_bound_is_count = 1; - } - else - { - if (attr_ub != NULL) - complaint (_("Unresolved DW_AT_upper_bound " - "- DIE at %s [in module %s]"), - sect_offset_str (die->sect_off), - objfile_name (cu->per_cu->dwarf2_per_objfile->objfile)); - if (attr_count != NULL) - complaint (_("Unresolved DW_AT_count " - "- DIE at %s [in module %s]"), - sect_offset_str (die->sect_off), - objfile_name (cu->per_cu->dwarf2_per_objfile->objfile)); - } - } - - LONGEST bias = 0; - struct attribute *bias_attr = dwarf2_attr (die, DW_AT_GNU_bias, cu); - if (bias_attr != nullptr && attr_form_is_constant (bias_attr)) - bias = dwarf2_get_attr_constant_value (bias_attr, 0); - - /* 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 << (TYPE_LENGTH (base_type) * TARGET_CHAR_BIT - 1)); - if (low.kind == PROP_CONST - && !TYPE_UNSIGNED (base_type) && (low.data.const_val & negative_mask)) - low.data.const_val |= negative_mask; - if (high.kind == PROP_CONST - && !TYPE_UNSIGNED (base_type) && (high.data.const_val & negative_mask)) - high.data.const_val |= negative_mask; - - /* Check for bit and byte strides. */ - struct dynamic_prop byte_stride_prop; - attribute *attr_byte_stride = dwarf2_attr (die, DW_AT_byte_stride, cu); - if (attr_byte_stride != nullptr) - { - struct type *prop_type - = dwarf2_per_cu_addr_sized_int_type (cu->per_cu, false); - attr_to_dynamic_prop (attr_byte_stride, die, cu, &byte_stride_prop, - prop_type); - } - - struct dynamic_prop bit_stride_prop; - attribute *attr_bit_stride = dwarf2_attr (die, DW_AT_bit_stride, cu); - if (attr_bit_stride != nullptr) - { - /* It only makes sense to have either a bit or byte stride. */ - if (attr_byte_stride != nullptr) - { - complaint (_("Found DW_AT_bit_stride and DW_AT_byte_stride " - "- DIE at %s [in module %s]"), - sect_offset_str (die->sect_off), - objfile_name (cu->per_cu->dwarf2_per_objfile->objfile)); - attr_bit_stride = nullptr; - } - else - { - struct type *prop_type - = dwarf2_per_cu_addr_sized_int_type (cu->per_cu, false); - attr_to_dynamic_prop (attr_bit_stride, die, cu, &bit_stride_prop, - prop_type); - } - } - - if (attr_byte_stride != nullptr - || attr_bit_stride != nullptr) - { - bool byte_stride_p = (attr_byte_stride != nullptr); - struct dynamic_prop *stride - = byte_stride_p ? &byte_stride_prop : &bit_stride_prop; - - range_type - = create_range_type_with_stride (NULL, orig_base_type, &low, - &high, bias, stride, byte_stride_p); - } - else - range_type = create_range_type (NULL, orig_base_type, &low, &high, bias); - - if (high_bound_is_count) - TYPE_RANGE_DATA (range_type)->flag_upper_bound_is_count = 1; - - /* Ada expects an empty array on no boundary attributes. */ - if (attr == NULL && cu->language != language_ada) - TYPE_HIGH_BOUND_KIND (range_type) = PROP_UNDEFINED; - - name = dwarf2_name (die, cu); - if (name) - TYPE_NAME (range_type) = name; - - attr = dwarf2_attr (die, DW_AT_byte_size, cu); - if (attr != nullptr) - TYPE_LENGTH (range_type) = DW_UNSND (attr); - - maybe_set_alignment (cu, die, range_type); - - set_die_type (die, range_type, cu); - - /* set_die_type should be already done. */ - set_descriptive_type (range_type, die, cu); - - return range_type; -} - -static struct type * -read_unspecified_type (struct die_info *die, struct dwarf2_cu *cu) -{ - struct type *type; - - type = init_type (cu->per_cu->dwarf2_per_objfile->objfile, TYPE_CODE_VOID,0, - NULL); - TYPE_NAME (type) = dwarf2_name (die, cu); - - /* In Ada, an unspecified type is typically used when the description - of the type is deferred to a different unit. When encountering - such a type, we treat it as a stub, and try to resolve it later on, - when needed. */ - if (cu->language == language_ada) - TYPE_STUB (type) = 1; - - return set_die_type (die, type, cu); -} - -/* Read a single die and all its descendents. Set the die's sibling - field to NULL; set other fields in the die correctly, and set all - of the descendents' fields correctly. Set *NEW_INFO_PTR to the - location of the info_ptr after reading all of those dies. PARENT - is the parent of the die in question. */ - -static struct die_info * -read_die_and_children (const struct die_reader_specs *reader, - const gdb_byte *info_ptr, - const gdb_byte **new_info_ptr, - struct die_info *parent) -{ - struct die_info *die; - const gdb_byte *cur_ptr; - int has_children; - - cur_ptr = read_full_die_1 (reader, &die, info_ptr, &has_children, 0); - if (die == NULL) - { - *new_info_ptr = cur_ptr; - return NULL; - } - store_in_ref_table (die, reader->cu); - - if (has_children) - die->child = read_die_and_siblings_1 (reader, cur_ptr, new_info_ptr, die); - else - { - die->child = NULL; - *new_info_ptr = cur_ptr; - } - - die->sibling = NULL; - die->parent = parent; - return die; -} - -/* Read a die, all of its descendents, and all of its siblings; set - all of the fields of all of the dies correctly. Arguments are as - in read_die_and_children. */ - -static struct die_info * -read_die_and_siblings_1 (const struct die_reader_specs *reader, - const gdb_byte *info_ptr, - const gdb_byte **new_info_ptr, - struct die_info *parent) -{ - struct die_info *first_die, *last_sibling; - const gdb_byte *cur_ptr; - - cur_ptr = info_ptr; - first_die = last_sibling = NULL; - - while (1) - { - struct die_info *die - = read_die_and_children (reader, cur_ptr, &cur_ptr, parent); - - if (die == NULL) - { - *new_info_ptr = cur_ptr; - return first_die; - } - - if (!first_die) - first_die = die; - else - last_sibling->sibling = die; - - last_sibling = die; - } -} - -/* Read a die, all of its descendents, and all of its siblings; set - all of the fields of all of the dies correctly. Arguments are as - in read_die_and_children. - This the main entry point for reading a DIE and all its children. */ - -static struct die_info * -read_die_and_siblings (const struct die_reader_specs *reader, - const gdb_byte *info_ptr, - const gdb_byte **new_info_ptr, - struct die_info *parent) -{ - struct die_info *die = read_die_and_siblings_1 (reader, info_ptr, - new_info_ptr, parent); - - if (dwarf_die_debug) - { - fprintf_unfiltered (gdb_stdlog, - "Read die from %s@0x%x of %s:\n", - get_section_name (reader->die_section), - (unsigned) (info_ptr - reader->die_section->buffer), - bfd_get_filename (reader->abfd)); - dump_die (die, dwarf_die_debug); - } - - return die; -} - -/* Read a die and all its attributes, leave space for NUM_EXTRA_ATTRS - attributes. - The caller is responsible for filling in the extra attributes - and updating (*DIEP)->num_attrs. - Set DIEP to point to a newly allocated die with its information, - except for its child, sibling, and parent fields. - Set HAS_CHILDREN to tell whether the die has children or not. */ - -static const gdb_byte * -read_full_die_1 (const struct die_reader_specs *reader, - struct die_info **diep, const gdb_byte *info_ptr, - int *has_children, int num_extra_attrs) -{ - unsigned int abbrev_number, bytes_read, i; - struct abbrev_info *abbrev; - struct die_info *die; - struct dwarf2_cu *cu = reader->cu; - bfd *abfd = reader->abfd; - - sect_offset sect_off = (sect_offset) (info_ptr - reader->buffer); - abbrev_number = read_unsigned_leb128 (abfd, info_ptr, &bytes_read); - info_ptr += bytes_read; - if (!abbrev_number) - { - *diep = NULL; - *has_children = 0; - return info_ptr; - } - - abbrev = reader->abbrev_table->lookup_abbrev (abbrev_number); - if (!abbrev) - error (_("Dwarf Error: could not find abbrev number %d [in module %s]"), - abbrev_number, - bfd_get_filename (abfd)); - - die = dwarf_alloc_die (cu, abbrev->num_attrs + num_extra_attrs); - die->sect_off = sect_off; - die->tag = abbrev->tag; - die->abbrev = abbrev_number; - - /* Make the result usable. - The caller needs to update num_attrs after adding the extra - attributes. */ - die->num_attrs = abbrev->num_attrs; - - for (i = 0; i < abbrev->num_attrs; ++i) - info_ptr = read_attribute (reader, &die->attrs[i], &abbrev->attrs[i], - info_ptr); - - *diep = die; - *has_children = abbrev->has_children; - return info_ptr; -} - -/* Read a die and all its attributes. - Set DIEP to point to a newly allocated die with its information, - except for its child, sibling, and parent fields. - Set HAS_CHILDREN to tell whether the die has children or not. */ - -static const gdb_byte * -read_full_die (const struct die_reader_specs *reader, - struct die_info **diep, const gdb_byte *info_ptr, - int *has_children) -{ - const gdb_byte *result; - - result = read_full_die_1 (reader, diep, info_ptr, has_children, 0); - - if (dwarf_die_debug) - { - fprintf_unfiltered (gdb_stdlog, - "Read die from %s@0x%x of %s:\n", - get_section_name (reader->die_section), - (unsigned) (info_ptr - reader->die_section->buffer), - bfd_get_filename (reader->abfd)); - dump_die (*diep, dwarf_die_debug); - } - - return result; -} - -/* Abbreviation tables. - - In DWARF version 2, the description of the debugging information is - stored in a separate .debug_abbrev section. Before we read any - dies from a section we read in all abbreviations and install them - in a hash table. */ - -/* Allocate space for a struct abbrev_info object in ABBREV_TABLE. */ - -struct abbrev_info * -abbrev_table::alloc_abbrev () -{ - struct abbrev_info *abbrev; - - abbrev = XOBNEW (&abbrev_obstack, struct abbrev_info); - memset (abbrev, 0, sizeof (struct abbrev_info)); - - return abbrev; -} - -/* Add an abbreviation to the table. */ - -void -abbrev_table::add_abbrev (unsigned int abbrev_number, - struct abbrev_info *abbrev) -{ - unsigned int hash_number; - - hash_number = abbrev_number % ABBREV_HASH_SIZE; - abbrev->next = m_abbrevs[hash_number]; - m_abbrevs[hash_number] = abbrev; -} - -/* Look up an abbrev in the table. - Returns NULL if the abbrev is not found. */ - -struct abbrev_info * -abbrev_table::lookup_abbrev (unsigned int abbrev_number) -{ - unsigned int hash_number; - struct abbrev_info *abbrev; - - hash_number = abbrev_number % ABBREV_HASH_SIZE; - abbrev = m_abbrevs[hash_number]; - - while (abbrev) - { - if (abbrev->number == abbrev_number) - return abbrev; - abbrev = abbrev->next; - } - return NULL; -} - -/* Read in an abbrev table. */ - -static abbrev_table_up -abbrev_table_read_table (struct dwarf2_per_objfile *dwarf2_per_objfile, - struct dwarf2_section_info *section, - sect_offset sect_off) -{ - struct objfile *objfile = dwarf2_per_objfile->objfile; - bfd *abfd = get_section_bfd_owner (section); - const gdb_byte *abbrev_ptr; - struct abbrev_info *cur_abbrev; - unsigned int abbrev_number, bytes_read, abbrev_name; - unsigned int abbrev_form; - struct attr_abbrev *cur_attrs; - unsigned int allocated_attrs; - - abbrev_table_up abbrev_table (new struct abbrev_table (sect_off)); - - dwarf2_read_section (objfile, section); - abbrev_ptr = section->buffer + to_underlying (sect_off); - abbrev_number = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read); - abbrev_ptr += bytes_read; - - allocated_attrs = ATTR_ALLOC_CHUNK; - cur_attrs = XNEWVEC (struct attr_abbrev, allocated_attrs); - - /* Loop until we reach an abbrev number of 0. */ - while (abbrev_number) - { - cur_abbrev = abbrev_table->alloc_abbrev (); - - /* read in abbrev header */ - cur_abbrev->number = abbrev_number; - cur_abbrev->tag - = (enum dwarf_tag) read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read); - abbrev_ptr += bytes_read; - cur_abbrev->has_children = read_1_byte (abfd, abbrev_ptr); - abbrev_ptr += 1; - - /* now read in declarations */ - for (;;) - { - LONGEST implicit_const; - - abbrev_name = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read); - abbrev_ptr += bytes_read; - abbrev_form = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read); - abbrev_ptr += bytes_read; - if (abbrev_form == DW_FORM_implicit_const) - { - implicit_const = read_signed_leb128 (abfd, abbrev_ptr, - &bytes_read); - abbrev_ptr += bytes_read; - } - else - { - /* Initialize it due to a false compiler warning. */ - implicit_const = -1; - } - - if (abbrev_name == 0) - break; - - if (cur_abbrev->num_attrs == allocated_attrs) - { - allocated_attrs += ATTR_ALLOC_CHUNK; - cur_attrs - = XRESIZEVEC (struct attr_abbrev, cur_attrs, allocated_attrs); - } - - cur_attrs[cur_abbrev->num_attrs].name - = (enum dwarf_attribute) abbrev_name; - cur_attrs[cur_abbrev->num_attrs].form - = (enum dwarf_form) abbrev_form; - cur_attrs[cur_abbrev->num_attrs].implicit_const = implicit_const; - ++cur_abbrev->num_attrs; - } - - cur_abbrev->attrs = - XOBNEWVEC (&abbrev_table->abbrev_obstack, struct attr_abbrev, - cur_abbrev->num_attrs); - memcpy (cur_abbrev->attrs, cur_attrs, - cur_abbrev->num_attrs * sizeof (struct attr_abbrev)); - - abbrev_table->add_abbrev (abbrev_number, cur_abbrev); - - /* Get next abbreviation. - Under Irix6 the abbreviations for a compilation unit are not - always properly terminated with an abbrev number of 0. - Exit loop if we encounter an abbreviation which we have - already read (which means we are about to read the abbreviations - for the next compile unit) or if the end of the abbreviation - table is reached. */ - if ((unsigned int) (abbrev_ptr - section->buffer) >= section->size) - break; - abbrev_number = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read); - abbrev_ptr += bytes_read; - if (abbrev_table->lookup_abbrev (abbrev_number) != NULL) - break; - } - - xfree (cur_attrs); - return abbrev_table; -} - -/* Returns nonzero if TAG represents a type that we might generate a partial - symbol for. */ - -static int -is_type_tag_for_partial (int tag) -{ - switch (tag) - { -#if 0 - /* Some types that would be reasonable to generate partial symbols for, - that we don't at present. */ - case DW_TAG_array_type: - case DW_TAG_file_type: - case DW_TAG_ptr_to_member_type: - case DW_TAG_set_type: - case DW_TAG_string_type: - case DW_TAG_subroutine_type: -#endif - case DW_TAG_base_type: - case DW_TAG_class_type: - case DW_TAG_interface_type: - case DW_TAG_enumeration_type: - case DW_TAG_structure_type: - case DW_TAG_subrange_type: - case DW_TAG_typedef: - case DW_TAG_union_type: - return 1; - default: - return 0; - } -} - -/* Load all DIEs that are interesting for partial symbols into memory. */ - -static struct partial_die_info * -load_partial_dies (const struct die_reader_specs *reader, - const gdb_byte *info_ptr, int building_psymtab) -{ - struct dwarf2_cu *cu = reader->cu; - struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile; - struct partial_die_info *parent_die, *last_die, *first_die = NULL; - unsigned int bytes_read; - unsigned int load_all = 0; - int nesting_level = 1; - - parent_die = NULL; - last_die = NULL; - - gdb_assert (cu->per_cu != NULL); - if (cu->per_cu->load_all_dies) - load_all = 1; - - cu->partial_dies - = htab_create_alloc_ex (cu->header.length / 12, - partial_die_hash, - partial_die_eq, - NULL, - &cu->comp_unit_obstack, - hashtab_obstack_allocate, - dummy_obstack_deallocate); - - while (1) - { - abbrev_info *abbrev = peek_die_abbrev (*reader, info_ptr, &bytes_read); - - /* A NULL abbrev means the end of a series of children. */ - if (abbrev == NULL) - { - if (--nesting_level == 0) - return first_die; - - info_ptr += bytes_read; - last_die = parent_die; - parent_die = parent_die->die_parent; - continue; - } - - /* Check for template arguments. We never save these; if - they're seen, we just mark the parent, and go on our way. */ - if (parent_die != NULL - && cu->language == language_cplus - && (abbrev->tag == DW_TAG_template_type_param - || abbrev->tag == DW_TAG_template_value_param)) - { - parent_die->has_template_arguments = 1; - - if (!load_all) - { - /* We don't need a partial DIE for the template argument. */ - info_ptr = skip_one_die (reader, info_ptr + bytes_read, abbrev); - continue; - } - } - - /* We only recurse into c++ subprograms looking for template arguments. - Skip their other children. */ - if (!load_all - && cu->language == language_cplus - && parent_die != NULL - && parent_die->tag == DW_TAG_subprogram) - { - info_ptr = skip_one_die (reader, info_ptr + bytes_read, abbrev); - continue; - } - - /* Check whether this DIE is interesting enough to save. Normally - we would not be interested in members here, but there may be - later variables referencing them via DW_AT_specification (for - static members). */ - if (!load_all - && !is_type_tag_for_partial (abbrev->tag) - && abbrev->tag != DW_TAG_constant - && abbrev->tag != DW_TAG_enumerator - && abbrev->tag != DW_TAG_subprogram - && abbrev->tag != DW_TAG_inlined_subroutine - && abbrev->tag != DW_TAG_lexical_block - && abbrev->tag != DW_TAG_variable - && abbrev->tag != DW_TAG_namespace - && abbrev->tag != DW_TAG_module - && abbrev->tag != DW_TAG_member - && abbrev->tag != DW_TAG_imported_unit - && abbrev->tag != DW_TAG_imported_declaration) - { - /* Otherwise we skip to the next sibling, if any. */ - info_ptr = skip_one_die (reader, info_ptr + bytes_read, abbrev); - continue; - } - - struct partial_die_info pdi ((sect_offset) (info_ptr - reader->buffer), - abbrev); - - info_ptr = pdi.read (reader, *abbrev, info_ptr + bytes_read); - - /* This two-pass algorithm for processing partial symbols has a - high cost in cache pressure. Thus, handle some simple cases - here which cover the majority of C partial symbols. DIEs - which neither have specification tags in them, nor could have - specification tags elsewhere pointing at them, can simply be - processed and discarded. - - This segment is also optional; scan_partial_symbols and - add_partial_symbol will handle these DIEs if we chain - them in normally. When compilers which do not emit large - quantities of duplicate debug information are more common, - this code can probably be removed. */ - - /* Any complete simple types at the top level (pretty much all - of them, for a language without namespaces), can be processed - directly. */ - if (parent_die == NULL - && pdi.has_specification == 0 - && pdi.is_declaration == 0 - && ((pdi.tag == DW_TAG_typedef && !pdi.has_children) - || pdi.tag == DW_TAG_base_type - || pdi.tag == DW_TAG_subrange_type)) - { - if (building_psymtab && pdi.name != NULL) - add_psymbol_to_list (pdi.name, false, - VAR_DOMAIN, LOC_TYPEDEF, -1, - psymbol_placement::STATIC, - 0, cu->language, objfile); - info_ptr = locate_pdi_sibling (reader, &pdi, info_ptr); - continue; - } - - /* The exception for DW_TAG_typedef with has_children above is - a workaround of GCC PR debug/47510. In the case of this complaint - type_name_or_error will error on such types later. - - GDB skipped children of DW_TAG_typedef by the shortcut above and then - it could not find the child DIEs referenced later, this is checked - above. In correct DWARF DW_TAG_typedef should have no children. */ - - if (pdi.tag == DW_TAG_typedef && pdi.has_children) - complaint (_("DW_TAG_typedef has childen - GCC PR debug/47510 bug " - "- DIE at %s [in module %s]"), - sect_offset_str (pdi.sect_off), objfile_name (objfile)); - - /* If we're at the second level, and we're an enumerator, and - our parent has no specification (meaning possibly lives in a - namespace elsewhere), then we can add the partial symbol now - instead of queueing it. */ - if (pdi.tag == DW_TAG_enumerator - && parent_die != NULL - && parent_die->die_parent == NULL - && parent_die->tag == DW_TAG_enumeration_type - && parent_die->has_specification == 0) - { - if (pdi.name == NULL) - complaint (_("malformed enumerator DIE ignored")); - else if (building_psymtab) - add_psymbol_to_list (pdi.name, false, - VAR_DOMAIN, LOC_CONST, -1, - cu->language == language_cplus - ? psymbol_placement::GLOBAL - : psymbol_placement::STATIC, - 0, cu->language, objfile); - - info_ptr = locate_pdi_sibling (reader, &pdi, info_ptr); - continue; - } - - struct partial_die_info *part_die - = new (&cu->comp_unit_obstack) partial_die_info (pdi); - - /* We'll save this DIE so link it in. */ - part_die->die_parent = parent_die; - part_die->die_sibling = NULL; - part_die->die_child = NULL; - - if (last_die && last_die == parent_die) - last_die->die_child = part_die; - else if (last_die) - last_die->die_sibling = part_die; - - last_die = part_die; - - if (first_die == NULL) - first_die = part_die; - - /* Maybe add the DIE to the hash table. Not all DIEs that we - find interesting need to be in the hash table, because we - also have the parent/sibling/child chains; only those that we - might refer to by offset later during partial symbol reading. - - For now this means things that might have be the target of a - DW_AT_specification, DW_AT_abstract_origin, or - DW_AT_extension. DW_AT_extension will refer only to - namespaces; DW_AT_abstract_origin refers to functions (and - many things under the function DIE, but we do not recurse - into function DIEs during partial symbol reading) and - possibly variables as well; DW_AT_specification refers to - declarations. Declarations ought to have the DW_AT_declaration - flag. It happens that GCC forgets to put it in sometimes, but - only for functions, not for types. - - Adding more things than necessary to the hash table is harmless - except for the performance cost. Adding too few will result in - wasted time in find_partial_die, when we reread the compilation - unit with load_all_dies set. */ - - if (load_all - || abbrev->tag == DW_TAG_constant - || abbrev->tag == DW_TAG_subprogram - || abbrev->tag == DW_TAG_variable - || abbrev->tag == DW_TAG_namespace - || part_die->is_declaration) - { - void **slot; - - slot = htab_find_slot_with_hash (cu->partial_dies, part_die, - to_underlying (part_die->sect_off), - INSERT); - *slot = part_die; - } - - /* For some DIEs we want to follow their children (if any). For C - we have no reason to follow the children of structures; for other - languages we have to, so that we can get at method physnames - to infer fully qualified class names, for DW_AT_specification, - and for C++ template arguments. For C++, we also look one level - inside functions to find template arguments (if the name of the - function does not already contain the template arguments). - - For Ada and Fortran, we need to scan the children of subprograms - and lexical blocks as well because these languages allow the - definition of nested entities that could be interesting for the - debugger, such as nested subprograms for instance. */ - if (last_die->has_children - && (load_all - || last_die->tag == DW_TAG_namespace - || last_die->tag == DW_TAG_module - || last_die->tag == DW_TAG_enumeration_type - || (cu->language == language_cplus - && last_die->tag == DW_TAG_subprogram - && (last_die->name == NULL - || strchr (last_die->name, '<') == NULL)) - || (cu->language != language_c - && (last_die->tag == DW_TAG_class_type - || last_die->tag == DW_TAG_interface_type - || last_die->tag == DW_TAG_structure_type - || last_die->tag == DW_TAG_union_type)) - || ((cu->language == language_ada - || cu->language == language_fortran) - && (last_die->tag == DW_TAG_subprogram - || last_die->tag == DW_TAG_lexical_block)))) - { - nesting_level++; - parent_die = last_die; - continue; - } - - /* Otherwise we skip to the next sibling, if any. */ - info_ptr = locate_pdi_sibling (reader, last_die, info_ptr); - - /* Back to the top, do it again. */ - } -} - -partial_die_info::partial_die_info (sect_offset sect_off_, - struct abbrev_info *abbrev) - : partial_die_info (sect_off_, abbrev->tag, abbrev->has_children) -{ -} - -/* Read a minimal amount of information into the minimal die structure. - INFO_PTR should point just after the initial uleb128 of a DIE. */ - -const gdb_byte * -partial_die_info::read (const struct die_reader_specs *reader, - const struct abbrev_info &abbrev, const gdb_byte *info_ptr) -{ - struct dwarf2_cu *cu = reader->cu; - struct dwarf2_per_objfile *dwarf2_per_objfile - = cu->per_cu->dwarf2_per_objfile; - unsigned int i; - int has_low_pc_attr = 0; - int has_high_pc_attr = 0; - int high_pc_relative = 0; - - for (i = 0; i < abbrev.num_attrs; ++i) - { - struct attribute attr; - - info_ptr = read_attribute (reader, &attr, &abbrev.attrs[i], info_ptr); - - /* Store the data if it is of an attribute we want to keep in a - partial symbol table. */ - switch (attr.name) - { - case DW_AT_name: - switch (tag) - { - case DW_TAG_compile_unit: - case DW_TAG_partial_unit: - case DW_TAG_type_unit: - /* Compilation units have a DW_AT_name that is a filename, not - a source language identifier. */ - case DW_TAG_enumeration_type: - case DW_TAG_enumerator: - /* These tags always have simple identifiers already; no need - to canonicalize them. */ - name = DW_STRING (&attr); - break; - default: - { - struct objfile *objfile = dwarf2_per_objfile->objfile; - - name - = dwarf2_canonicalize_name (DW_STRING (&attr), cu, - &objfile->per_bfd->storage_obstack); - } - break; - } - break; - case DW_AT_linkage_name: - case DW_AT_MIPS_linkage_name: - /* Note that both forms of linkage name might appear. We - assume they will be the same, and we only store the last - one we see. */ - linkage_name = DW_STRING (&attr); - break; - case DW_AT_low_pc: - has_low_pc_attr = 1; - lowpc = attr_value_as_address (&attr); - break; - case DW_AT_high_pc: - has_high_pc_attr = 1; - highpc = attr_value_as_address (&attr); - if (cu->header.version >= 4 && attr_form_is_constant (&attr)) - high_pc_relative = 1; - break; - case DW_AT_location: - /* Support the .debug_loc offsets. */ - if (attr_form_is_block (&attr)) - { - d.locdesc = DW_BLOCK (&attr); - } - else if (attr_form_is_section_offset (&attr)) - { - dwarf2_complex_location_expr_complaint (); - } - else - { - dwarf2_invalid_attrib_class_complaint ("DW_AT_location", - "partial symbol information"); - } - break; - case DW_AT_external: - is_external = DW_UNSND (&attr); - break; - case DW_AT_declaration: - is_declaration = DW_UNSND (&attr); - break; - case DW_AT_type: - has_type = 1; - break; - case DW_AT_abstract_origin: - case DW_AT_specification: - case DW_AT_extension: - has_specification = 1; - spec_offset = dwarf2_get_ref_die_offset (&attr); - spec_is_dwz = (attr.form == DW_FORM_GNU_ref_alt - || cu->per_cu->is_dwz); - break; - case DW_AT_sibling: - /* Ignore absolute siblings, they might point outside of - the current compile unit. */ - if (attr.form == DW_FORM_ref_addr) - complaint (_("ignoring absolute DW_AT_sibling")); - else - { - const gdb_byte *buffer = reader->buffer; - sect_offset off = dwarf2_get_ref_die_offset (&attr); - const gdb_byte *sibling_ptr = buffer + to_underlying (off); - - if (sibling_ptr < info_ptr) - complaint (_("DW_AT_sibling points backwards")); - else if (sibling_ptr > reader->buffer_end) - dwarf2_section_buffer_overflow_complaint (reader->die_section); - else - sibling = sibling_ptr; - } - break; - case DW_AT_byte_size: - has_byte_size = 1; - break; - case DW_AT_const_value: - has_const_value = 1; - break; - case DW_AT_calling_convention: - /* DWARF doesn't provide a way to identify a program's source-level - entry point. DW_AT_calling_convention attributes are only meant - to describe functions' calling conventions. - - However, because it's a necessary piece of information in - Fortran, and before DWARF 4 DW_CC_program was the only - piece of debugging information whose definition refers to - a 'main program' at all, several compilers marked Fortran - main programs with DW_CC_program --- even when those - functions use the standard calling conventions. - - Although DWARF now specifies a way to provide this - information, we support this practice for backward - compatibility. */ - if (DW_UNSND (&attr) == DW_CC_program - && cu->language == language_fortran) - main_subprogram = 1; - break; - case DW_AT_inline: - if (DW_UNSND (&attr) == DW_INL_inlined - || DW_UNSND (&attr) == DW_INL_declared_inlined) - may_be_inlined = 1; - break; - - case DW_AT_import: - if (tag == DW_TAG_imported_unit) - { - d.sect_off = dwarf2_get_ref_die_offset (&attr); - is_dwz = (attr.form == DW_FORM_GNU_ref_alt - || cu->per_cu->is_dwz); - } - break; - - case DW_AT_main_subprogram: - main_subprogram = DW_UNSND (&attr); - break; - - case DW_AT_ranges: - { - /* It would be nice to reuse dwarf2_get_pc_bounds here, - but that requires a full DIE, so instead we just - reimplement it. */ - int need_ranges_base = tag != DW_TAG_compile_unit; - unsigned int ranges_offset = (DW_UNSND (&attr) - + (need_ranges_base - ? cu->ranges_base - : 0)); - - /* Value of the DW_AT_ranges attribute is the offset in the - .debug_ranges section. */ - if (dwarf2_ranges_read (ranges_offset, &lowpc, &highpc, cu, - nullptr)) - has_pc_info = 1; - } - break; - - default: - break; - } - } - - /* For Ada, if both the name and the linkage name appear, we prefer - the latter. This lets "catch exception" work better, regardless - of the order in which the name and linkage name were emitted. - Really, though, this is just a workaround for the fact that gdb - doesn't store both the name and the linkage name. */ - if (cu->language == language_ada && linkage_name != nullptr) - name = linkage_name; - - if (high_pc_relative) - highpc += lowpc; - - if (has_low_pc_attr && has_high_pc_attr) - { - /* When using the GNU linker, .gnu.linkonce. sections are used to - eliminate duplicate copies of functions and vtables and such. - The linker will arbitrarily choose one and discard the others. - The AT_*_pc values for such functions refer to local labels in - these sections. If the section from that file was discarded, the - labels are not in the output, so the relocs get a value of 0. - If this is a discarded function, mark the pc bounds as invalid, - so that GDB will ignore it. */ - if (lowpc == 0 && !dwarf2_per_objfile->has_section_at_zero) - { - struct objfile *objfile = dwarf2_per_objfile->objfile; - struct gdbarch *gdbarch = get_objfile_arch (objfile); - - complaint (_("DW_AT_low_pc %s is zero " - "for DIE at %s [in module %s]"), - paddress (gdbarch, lowpc), - sect_offset_str (sect_off), - objfile_name (objfile)); - } - /* dwarf2_get_pc_bounds has also the strict low < high requirement. */ - else if (lowpc >= highpc) - { - struct objfile *objfile = dwarf2_per_objfile->objfile; - struct gdbarch *gdbarch = get_objfile_arch (objfile); - - complaint (_("DW_AT_low_pc %s is not < DW_AT_high_pc %s " - "for DIE at %s [in module %s]"), - paddress (gdbarch, lowpc), - paddress (gdbarch, highpc), - sect_offset_str (sect_off), - objfile_name (objfile)); - } - else - has_pc_info = 1; - } - - return info_ptr; -} - -/* Find a cached partial DIE at OFFSET in CU. */ - -struct partial_die_info * -dwarf2_cu::find_partial_die (sect_offset sect_off) -{ - struct partial_die_info *lookup_die = NULL; - struct partial_die_info part_die (sect_off); - - lookup_die = ((struct partial_die_info *) - htab_find_with_hash (partial_dies, &part_die, - to_underlying (sect_off))); - - return lookup_die; -} - -/* Find a partial DIE at OFFSET, which may or may not be in CU, - except in the case of .debug_types DIEs which do not reference - outside their CU (they do however referencing other types via - DW_FORM_ref_sig8). */ - -static const struct cu_partial_die_info -find_partial_die (sect_offset sect_off, int offset_in_dwz, struct dwarf2_cu *cu) -{ - struct dwarf2_per_objfile *dwarf2_per_objfile - = cu->per_cu->dwarf2_per_objfile; - struct objfile *objfile = dwarf2_per_objfile->objfile; - struct dwarf2_per_cu_data *per_cu = NULL; - struct partial_die_info *pd = NULL; - - if (offset_in_dwz == cu->per_cu->is_dwz - && offset_in_cu_p (&cu->header, sect_off)) - { - pd = cu->find_partial_die (sect_off); - if (pd != NULL) - return { cu, pd }; - /* We missed recording what we needed. - Load all dies and try again. */ - per_cu = cu->per_cu; - } - else - { - /* TUs don't reference other CUs/TUs (except via type signatures). */ - if (cu->per_cu->is_debug_types) - { - error (_("Dwarf Error: Type Unit at offset %s contains" - " external reference to offset %s [in module %s].\n"), - sect_offset_str (cu->header.sect_off), sect_offset_str (sect_off), - bfd_get_filename (objfile->obfd)); - } - per_cu = dwarf2_find_containing_comp_unit (sect_off, offset_in_dwz, - dwarf2_per_objfile); - - if (per_cu->cu == NULL || per_cu->cu->partial_dies == NULL) - load_partial_comp_unit (per_cu); - - per_cu->cu->last_used = 0; - pd = per_cu->cu->find_partial_die (sect_off); - } - - /* If we didn't find it, and not all dies have been loaded, - load them all and try again. */ - - if (pd == NULL && per_cu->load_all_dies == 0) - { - per_cu->load_all_dies = 1; - - /* This is nasty. When we reread the DIEs, somewhere up the call chain - THIS_CU->cu may already be in use. So we can't just free it and - replace its DIEs with the ones we read in. Instead, we leave those - DIEs alone (which can still be in use, e.g. in scan_partial_symbols), - and clobber THIS_CU->cu->partial_dies with the hash table for the new - set. */ - load_partial_comp_unit (per_cu); - - pd = per_cu->cu->find_partial_die (sect_off); - } - - if (pd == NULL) - internal_error (__FILE__, __LINE__, - _("could not find partial DIE %s " - "in cache [from module %s]\n"), - sect_offset_str (sect_off), bfd_get_filename (objfile->obfd)); - return { per_cu->cu, pd }; -} - -/* See if we can figure out if the class lives in a namespace. We do - this by looking for a member function; its demangled name will - contain namespace info, if there is any. */ - -static void -guess_partial_die_structure_name (struct partial_die_info *struct_pdi, - struct dwarf2_cu *cu) -{ - /* NOTE: carlton/2003-10-07: Getting the info this way changes - what template types look like, because the demangler - frequently doesn't give the same name as the debug info. We - could fix this by only using the demangled name to get the - prefix (but see comment in read_structure_type). */ - - struct partial_die_info *real_pdi; - struct partial_die_info *child_pdi; - - /* If this DIE (this DIE's specification, if any) has a parent, then - we should not do this. We'll prepend the parent's fully qualified - name when we create the partial symbol. */ - - real_pdi = struct_pdi; - while (real_pdi->has_specification) - { - auto res = find_partial_die (real_pdi->spec_offset, - real_pdi->spec_is_dwz, cu); - real_pdi = res.pdi; - cu = res.cu; - } - - if (real_pdi->die_parent != NULL) - return; - - for (child_pdi = struct_pdi->die_child; - child_pdi != NULL; - child_pdi = child_pdi->die_sibling) - { - if (child_pdi->tag == DW_TAG_subprogram - && child_pdi->linkage_name != NULL) - { - char *actual_class_name - = language_class_name_from_physname (cu->language_defn, - child_pdi->linkage_name); - if (actual_class_name != NULL) - { - struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile; - struct_pdi->name - = obstack_strdup (&objfile->per_bfd->storage_obstack, - actual_class_name); - xfree (actual_class_name); - } - break; - } - } -} - -void -partial_die_info::fixup (struct dwarf2_cu *cu) -{ - /* Once we've fixed up a die, there's no point in doing so again. - This also avoids a memory leak if we were to call - guess_partial_die_structure_name multiple times. */ - if (fixup_called) - return; - - /* If we found a reference attribute and the DIE has no name, try - to find a name in the referred to DIE. */ - - if (name == NULL && has_specification) - { - struct partial_die_info *spec_die; - - auto res = find_partial_die (spec_offset, spec_is_dwz, cu); - spec_die = res.pdi; - cu = res.cu; - - spec_die->fixup (cu); - - if (spec_die->name) - { - name = spec_die->name; - - /* Copy DW_AT_external attribute if it is set. */ - if (spec_die->is_external) - is_external = spec_die->is_external; - } - } - - /* Set default names for some unnamed DIEs. */ - - if (name == NULL && tag == DW_TAG_namespace) - name = CP_ANONYMOUS_NAMESPACE_STR; - - /* If there is no parent die to provide a namespace, and there are - children, see if we can determine the namespace from their linkage - name. */ - if (cu->language == language_cplus - && !cu->per_cu->dwarf2_per_objfile->types.empty () - && die_parent == NULL - && has_children - && (tag == DW_TAG_class_type - || tag == DW_TAG_structure_type - || tag == DW_TAG_union_type)) - guess_partial_die_structure_name (this, cu); - - /* GCC might emit a nameless struct or union that has a linkage - name. See http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47510. */ - if (name == NULL - && (tag == DW_TAG_class_type - || tag == DW_TAG_interface_type - || tag == DW_TAG_structure_type - || tag == DW_TAG_union_type) - && linkage_name != NULL) - { - char *demangled; - - demangled = gdb_demangle (linkage_name, DMGL_TYPES); - if (demangled) - { - const char *base; - - /* Strip any leading namespaces/classes, keep only the base name. - DW_AT_name for named DIEs does not contain the prefixes. */ - base = strrchr (demangled, ':'); - if (base && base > demangled && base[-1] == ':') - base++; - else - base = demangled; - - struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile; - name = obstack_strdup (&objfile->per_bfd->storage_obstack, base); - xfree (demangled); - } - } - - fixup_called = 1; -} - -/* Read an attribute value described by an attribute form. */ - -static const gdb_byte * -read_attribute_value (const struct die_reader_specs *reader, - struct attribute *attr, unsigned form, - LONGEST implicit_const, const gdb_byte *info_ptr) -{ - struct dwarf2_cu *cu = reader->cu; - struct dwarf2_per_objfile *dwarf2_per_objfile - = cu->per_cu->dwarf2_per_objfile; - struct objfile *objfile = dwarf2_per_objfile->objfile; - struct gdbarch *gdbarch = get_objfile_arch (objfile); - bfd *abfd = reader->abfd; - struct comp_unit_head *cu_header = &cu->header; - unsigned int bytes_read; - struct dwarf_block *blk; - - attr->form = (enum dwarf_form) form; - switch (form) - { - case DW_FORM_ref_addr: - if (cu->header.version == 2) - DW_UNSND (attr) = read_address (abfd, info_ptr, cu, &bytes_read); - else - DW_UNSND (attr) = read_offset (abfd, info_ptr, - &cu->header, &bytes_read); - info_ptr += bytes_read; - break; - case DW_FORM_GNU_ref_alt: - DW_UNSND (attr) = read_offset (abfd, info_ptr, &cu->header, &bytes_read); - info_ptr += bytes_read; - break; - case DW_FORM_addr: - DW_ADDR (attr) = read_address (abfd, info_ptr, cu, &bytes_read); - DW_ADDR (attr) = gdbarch_adjust_dwarf2_addr (gdbarch, DW_ADDR (attr)); - info_ptr += bytes_read; - break; - case DW_FORM_block2: - blk = dwarf_alloc_block (cu); - blk->size = read_2_bytes (abfd, info_ptr); - info_ptr += 2; - blk->data = read_n_bytes (abfd, info_ptr, blk->size); - info_ptr += blk->size; - DW_BLOCK (attr) = blk; - break; - case DW_FORM_block4: - blk = dwarf_alloc_block (cu); - blk->size = read_4_bytes (abfd, info_ptr); - info_ptr += 4; - blk->data = read_n_bytes (abfd, info_ptr, blk->size); - info_ptr += blk->size; - DW_BLOCK (attr) = blk; - break; - case DW_FORM_data2: - DW_UNSND (attr) = read_2_bytes (abfd, info_ptr); - info_ptr += 2; - break; - case DW_FORM_data4: - DW_UNSND (attr) = read_4_bytes (abfd, info_ptr); - info_ptr += 4; - break; - case DW_FORM_data8: - DW_UNSND (attr) = read_8_bytes (abfd, info_ptr); - info_ptr += 8; - break; - case DW_FORM_data16: - blk = dwarf_alloc_block (cu); - blk->size = 16; - blk->data = read_n_bytes (abfd, info_ptr, 16); - info_ptr += 16; - DW_BLOCK (attr) = blk; - break; - case DW_FORM_sec_offset: - DW_UNSND (attr) = read_offset (abfd, info_ptr, &cu->header, &bytes_read); - info_ptr += bytes_read; - break; - case DW_FORM_string: - DW_STRING (attr) = read_direct_string (abfd, info_ptr, &bytes_read); - DW_STRING_IS_CANONICAL (attr) = 0; - info_ptr += bytes_read; - break; - case DW_FORM_strp: - if (!cu->per_cu->is_dwz) - { - DW_STRING (attr) = read_indirect_string (dwarf2_per_objfile, - abfd, info_ptr, cu_header, - &bytes_read); - DW_STRING_IS_CANONICAL (attr) = 0; - info_ptr += bytes_read; - break; - } - /* FALLTHROUGH */ - case DW_FORM_line_strp: - if (!cu->per_cu->is_dwz) - { - DW_STRING (attr) = read_indirect_line_string (dwarf2_per_objfile, - abfd, info_ptr, - cu_header, &bytes_read); - DW_STRING_IS_CANONICAL (attr) = 0; - info_ptr += bytes_read; - break; - } - /* FALLTHROUGH */ - case DW_FORM_GNU_strp_alt: - { - struct dwz_file *dwz = dwarf2_get_dwz_file (dwarf2_per_objfile); - LONGEST str_offset = read_offset (abfd, info_ptr, cu_header, - &bytes_read); - - DW_STRING (attr) = read_indirect_string_from_dwz (objfile, - dwz, str_offset); - DW_STRING_IS_CANONICAL (attr) = 0; - info_ptr += bytes_read; - } - break; - case DW_FORM_exprloc: - case DW_FORM_block: - blk = dwarf_alloc_block (cu); - blk->size = read_unsigned_leb128 (abfd, info_ptr, &bytes_read); - info_ptr += bytes_read; - blk->data = read_n_bytes (abfd, info_ptr, blk->size); - info_ptr += blk->size; - DW_BLOCK (attr) = blk; - break; - case DW_FORM_block1: - blk = dwarf_alloc_block (cu); - blk->size = read_1_byte (abfd, info_ptr); - info_ptr += 1; - blk->data = read_n_bytes (abfd, info_ptr, blk->size); - info_ptr += blk->size; - DW_BLOCK (attr) = blk; - break; - case DW_FORM_data1: - DW_UNSND (attr) = read_1_byte (abfd, info_ptr); - info_ptr += 1; - break; - case DW_FORM_flag: - DW_UNSND (attr) = read_1_byte (abfd, info_ptr); - info_ptr += 1; - break; - case DW_FORM_flag_present: - DW_UNSND (attr) = 1; - break; - case DW_FORM_sdata: - DW_SND (attr) = read_signed_leb128 (abfd, info_ptr, &bytes_read); - info_ptr += bytes_read; - break; - case DW_FORM_udata: - DW_UNSND (attr) = read_unsigned_leb128 (abfd, info_ptr, &bytes_read); - info_ptr += bytes_read; - break; - case DW_FORM_ref1: - DW_UNSND (attr) = (to_underlying (cu->header.sect_off) - + read_1_byte (abfd, info_ptr)); - info_ptr += 1; - break; - case DW_FORM_ref2: - DW_UNSND (attr) = (to_underlying (cu->header.sect_off) - + read_2_bytes (abfd, info_ptr)); - info_ptr += 2; - break; - case DW_FORM_ref4: - DW_UNSND (attr) = (to_underlying (cu->header.sect_off) - + read_4_bytes (abfd, info_ptr)); - info_ptr += 4; - break; - case DW_FORM_ref8: - DW_UNSND (attr) = (to_underlying (cu->header.sect_off) - + read_8_bytes (abfd, info_ptr)); - info_ptr += 8; - break; - case DW_FORM_ref_sig8: - DW_SIGNATURE (attr) = read_8_bytes (abfd, info_ptr); - info_ptr += 8; - break; - case DW_FORM_ref_udata: - DW_UNSND (attr) = (to_underlying (cu->header.sect_off) - + read_unsigned_leb128 (abfd, info_ptr, &bytes_read)); - info_ptr += bytes_read; - break; - case DW_FORM_indirect: - form = read_unsigned_leb128 (abfd, info_ptr, &bytes_read); - info_ptr += bytes_read; - if (form == DW_FORM_implicit_const) - { - implicit_const = read_signed_leb128 (abfd, info_ptr, &bytes_read); - info_ptr += bytes_read; - } - info_ptr = read_attribute_value (reader, attr, form, implicit_const, - info_ptr); - break; - case DW_FORM_implicit_const: - DW_SND (attr) = implicit_const; - break; - case DW_FORM_addrx: - case DW_FORM_GNU_addr_index: - if (reader->dwo_file == NULL) - { - /* For now flag a hard error. - Later we can turn this into a complaint. */ - error (_("Dwarf Error: %s found in non-DWO CU [in module %s]"), - dwarf_form_name (form), - bfd_get_filename (abfd)); - } - DW_ADDR (attr) = read_addr_index_from_leb128 (cu, info_ptr, &bytes_read); - info_ptr += bytes_read; - break; - case DW_FORM_strx: - case DW_FORM_strx1: - case DW_FORM_strx2: - case DW_FORM_strx3: - case DW_FORM_strx4: - case DW_FORM_GNU_str_index: - if (reader->dwo_file == NULL) - { - /* For now flag a hard error. - Later we can turn this into a complaint if warranted. */ - error (_("Dwarf Error: %s found in non-DWO CU [in module %s]"), - dwarf_form_name (form), - bfd_get_filename (abfd)); - } - { - ULONGEST str_index; - if (form == DW_FORM_strx1) - { - str_index = read_1_byte (abfd, info_ptr); - info_ptr += 1; - } - else if (form == DW_FORM_strx2) - { - str_index = read_2_bytes (abfd, info_ptr); - info_ptr += 2; - } - else if (form == DW_FORM_strx3) - { - str_index = read_3_bytes (abfd, info_ptr); - info_ptr += 3; - } - else if (form == DW_FORM_strx4) - { - str_index = read_4_bytes (abfd, info_ptr); - info_ptr += 4; - } - else - { - str_index = read_unsigned_leb128 (abfd, info_ptr, &bytes_read); - info_ptr += bytes_read; - } - DW_STRING (attr) = read_str_index (reader, str_index); - DW_STRING_IS_CANONICAL (attr) = 0; - } - break; - default: - error (_("Dwarf Error: Cannot handle %s in DWARF reader [in module %s]"), - dwarf_form_name (form), - bfd_get_filename (abfd)); - } - - /* Super hack. */ - if (cu->per_cu->is_dwz && attr_form_is_ref (attr)) - attr->form = DW_FORM_GNU_ref_alt; - - /* We have seen instances where the compiler tried to emit a byte - size attribute of -1 which ended up being encoded as an unsigned - 0xffffffff. Although 0xffffffff is technically a valid size value, - an object of this size seems pretty unlikely so we can relatively - safely treat these cases as if the size attribute was invalid and - treat them as zero by default. */ - if (attr->name == DW_AT_byte_size - && form == DW_FORM_data4 - && DW_UNSND (attr) >= 0xffffffff) - { - complaint - (_("Suspicious DW_AT_byte_size value treated as zero instead of %s"), - hex_string (DW_UNSND (attr))); - DW_UNSND (attr) = 0; - } - - return info_ptr; -} - -/* Read an attribute described by an abbreviated attribute. */ - -static const gdb_byte * -read_attribute (const struct die_reader_specs *reader, - struct attribute *attr, struct attr_abbrev *abbrev, - const gdb_byte *info_ptr) -{ - attr->name = abbrev->name; - return read_attribute_value (reader, attr, abbrev->form, - abbrev->implicit_const, info_ptr); -} - -/* Read dwarf information from a buffer. */ - -static unsigned int -read_1_byte (bfd *abfd, const gdb_byte *buf) -{ - return bfd_get_8 (abfd, buf); -} - -static int -read_1_signed_byte (bfd *abfd, const gdb_byte *buf) -{ - return bfd_get_signed_8 (abfd, buf); -} - -static unsigned int -read_2_bytes (bfd *abfd, const gdb_byte *buf) -{ - return bfd_get_16 (abfd, buf); -} - -static int -read_2_signed_bytes (bfd *abfd, const gdb_byte *buf) -{ - return bfd_get_signed_16 (abfd, buf); -} - -static unsigned int -read_3_bytes (bfd *abfd, const gdb_byte *buf) -{ - unsigned int result = 0; - for (int i = 0; i < 3; ++i) - { - unsigned char byte = bfd_get_8 (abfd, buf); - buf++; - result |= ((unsigned int) byte << (i * 8)); - } - return result; -} - -static unsigned int -read_4_bytes (bfd *abfd, const gdb_byte *buf) -{ - return bfd_get_32 (abfd, buf); -} - -static int -read_4_signed_bytes (bfd *abfd, const gdb_byte *buf) -{ - return bfd_get_signed_32 (abfd, buf); -} - -static ULONGEST -read_8_bytes (bfd *abfd, const gdb_byte *buf) -{ - return bfd_get_64 (abfd, buf); -} - -static CORE_ADDR -read_address (bfd *abfd, const gdb_byte *buf, struct dwarf2_cu *cu, - unsigned int *bytes_read) -{ - struct comp_unit_head *cu_header = &cu->header; - CORE_ADDR retval = 0; - - if (cu_header->signed_addr_p) - { - switch (cu_header->addr_size) - { - case 2: - retval = bfd_get_signed_16 (abfd, buf); - break; - case 4: - retval = bfd_get_signed_32 (abfd, buf); - break; - case 8: - retval = bfd_get_signed_64 (abfd, buf); - break; - default: - internal_error (__FILE__, __LINE__, - _("read_address: bad switch, signed [in module %s]"), - bfd_get_filename (abfd)); - } - } - else - { - switch (cu_header->addr_size) - { - case 2: - retval = bfd_get_16 (abfd, buf); - break; - case 4: - retval = bfd_get_32 (abfd, buf); - break; - case 8: - retval = bfd_get_64 (abfd, buf); - break; - default: - internal_error (__FILE__, __LINE__, - _("read_address: bad switch, " - "unsigned [in module %s]"), - bfd_get_filename (abfd)); - } - } - - *bytes_read = cu_header->addr_size; - return retval; -} - -/* Read the initial length from a section. The (draft) DWARF 3 - specification allows the initial length to take up either 4 bytes - or 12 bytes. If the first 4 bytes are 0xffffffff, then the next 8 - bytes describe the length and all offsets will be 8 bytes in length - instead of 4. - - An older, non-standard 64-bit format is also handled by this - function. The older format in question stores the initial length - as an 8-byte quantity without an escape value. Lengths greater - than 2^32 aren't very common which means that the initial 4 bytes - is almost always zero. Since a length value of zero doesn't make - sense for the 32-bit format, this initial zero can be considered to - be an escape value which indicates the presence of the older 64-bit - format. As written, the code can't detect (old format) lengths - greater than 4GB. If it becomes necessary to handle lengths - somewhat larger than 4GB, we could allow other small values (such - as the non-sensical values of 1, 2, and 3) to also be used as - escape values indicating the presence of the old format. - - The value returned via bytes_read should be used to increment the - relevant pointer after calling read_initial_length(). - - [ Note: read_initial_length() and read_offset() are based on the - document entitled "DWARF Debugging Information Format", revision - 3, draft 8, dated November 19, 2001. This document was obtained - from: - - http://reality.sgiweb.org/davea/dwarf3-draft8-011125.pdf - - This document is only a draft and is subject to change. (So beware.) - - Details regarding the older, non-standard 64-bit format were - determined empirically by examining 64-bit ELF files produced by - the SGI toolchain on an IRIX 6.5 machine. - - - Kevin, July 16, 2002 - ] */ - -static LONGEST -read_initial_length (bfd *abfd, const gdb_byte *buf, unsigned int *bytes_read) -{ - LONGEST length = bfd_get_32 (abfd, buf); - - if (length == 0xffffffff) - { - length = bfd_get_64 (abfd, buf + 4); - *bytes_read = 12; - } - else if (length == 0) - { - /* Handle the (non-standard) 64-bit DWARF2 format used by IRIX. */ - length = bfd_get_64 (abfd, buf); - *bytes_read = 8; - } - else - { - *bytes_read = 4; - } - - return length; -} - -/* Cover function for read_initial_length. - Returns the length of the object at BUF, and stores the size of the - initial length in *BYTES_READ and stores the size that offsets will be in - *OFFSET_SIZE. - If the initial length size is not equivalent to that specified in - CU_HEADER then issue a complaint. - This is useful when reading non-comp-unit headers. */ - -static LONGEST -read_checked_initial_length_and_offset (bfd *abfd, const gdb_byte *buf, - const struct comp_unit_head *cu_header, - unsigned int *bytes_read, - unsigned int *offset_size) -{ - LONGEST length = read_initial_length (abfd, buf, bytes_read); - - gdb_assert (cu_header->initial_length_size == 4 - || cu_header->initial_length_size == 8 - || cu_header->initial_length_size == 12); - - if (cu_header->initial_length_size != *bytes_read) - complaint (_("intermixed 32-bit and 64-bit DWARF sections")); - - *offset_size = (*bytes_read == 4) ? 4 : 8; - return length; -} - -/* Read an offset from the data stream. The size of the offset is - given by cu_header->offset_size. */ - -static LONGEST -read_offset (bfd *abfd, const gdb_byte *buf, - const struct comp_unit_head *cu_header, - unsigned int *bytes_read) -{ - LONGEST offset = read_offset_1 (abfd, buf, cu_header->offset_size); - - *bytes_read = cu_header->offset_size; - return offset; -} - -/* Read an offset from the data stream. */ - -static LONGEST -read_offset_1 (bfd *abfd, const gdb_byte *buf, unsigned int offset_size) -{ - LONGEST retval = 0; - - switch (offset_size) - { - case 4: - retval = bfd_get_32 (abfd, buf); - break; - case 8: - retval = bfd_get_64 (abfd, buf); - break; - default: - internal_error (__FILE__, __LINE__, - _("read_offset_1: bad switch [in module %s]"), - bfd_get_filename (abfd)); - } - - return retval; -} - -static const gdb_byte * -read_n_bytes (bfd *abfd, const gdb_byte *buf, unsigned int size) -{ - /* If the size of a host char is 8 bits, we can return a pointer - to the buffer, otherwise we have to copy the data to a buffer - allocated on the temporary obstack. */ - gdb_assert (HOST_CHAR_BIT == 8); - return buf; -} - -static const char * -read_direct_string (bfd *abfd, const gdb_byte *buf, - unsigned int *bytes_read_ptr) -{ - /* If the size of a host char is 8 bits, we can return a pointer - to the string, otherwise we have to copy the string to a buffer - allocated on the temporary obstack. */ - gdb_assert (HOST_CHAR_BIT == 8); - if (*buf == '\0') - { - *bytes_read_ptr = 1; - return NULL; - } - *bytes_read_ptr = strlen ((const char *) buf) + 1; - return (const char *) buf; -} - -/* Return pointer to string at section SECT offset STR_OFFSET with error - reporting strings FORM_NAME and SECT_NAME. */ - -static const char * -read_indirect_string_at_offset_from (struct objfile *objfile, - bfd *abfd, LONGEST str_offset, - struct dwarf2_section_info *sect, - const char *form_name, - const char *sect_name) -{ - dwarf2_read_section (objfile, sect); - if (sect->buffer == NULL) - error (_("%s used without %s section [in module %s]"), - form_name, sect_name, bfd_get_filename (abfd)); - if (str_offset >= sect->size) - error (_("%s pointing outside of %s section [in module %s]"), - form_name, sect_name, bfd_get_filename (abfd)); - gdb_assert (HOST_CHAR_BIT == 8); - if (sect->buffer[str_offset] == '\0') - return NULL; - return (const char *) (sect->buffer + str_offset); -} - -/* Return pointer to string at .debug_str offset STR_OFFSET. */ - -static const char * -read_indirect_string_at_offset (struct dwarf2_per_objfile *dwarf2_per_objfile, - bfd *abfd, LONGEST str_offset) -{ - return read_indirect_string_at_offset_from (dwarf2_per_objfile->objfile, - abfd, str_offset, - &dwarf2_per_objfile->str, - "DW_FORM_strp", ".debug_str"); -} - -/* Return pointer to string at .debug_line_str offset STR_OFFSET. */ - -static const char * -read_indirect_line_string_at_offset (struct dwarf2_per_objfile *dwarf2_per_objfile, - bfd *abfd, LONGEST str_offset) -{ - return read_indirect_string_at_offset_from (dwarf2_per_objfile->objfile, - abfd, str_offset, - &dwarf2_per_objfile->line_str, - "DW_FORM_line_strp", - ".debug_line_str"); -} - -/* Read a string at offset STR_OFFSET in the .debug_str section from - the .dwz file DWZ. Throw an error if the offset is too large. If - the string consists of a single NUL byte, return NULL; otherwise - return a pointer to the string. */ - -static const char * -read_indirect_string_from_dwz (struct objfile *objfile, struct dwz_file *dwz, - LONGEST str_offset) -{ - dwarf2_read_section (objfile, &dwz->str); - - if (dwz->str.buffer == NULL) - error (_("DW_FORM_GNU_strp_alt used without .debug_str " - "section [in module %s]"), - bfd_get_filename (dwz->dwz_bfd.get ())); - if (str_offset >= dwz->str.size) - error (_("DW_FORM_GNU_strp_alt pointing outside of " - ".debug_str section [in module %s]"), - bfd_get_filename (dwz->dwz_bfd.get ())); - gdb_assert (HOST_CHAR_BIT == 8); - if (dwz->str.buffer[str_offset] == '\0') - return NULL; - return (const char *) (dwz->str.buffer + str_offset); -} - -/* Return pointer to string at .debug_str offset as read from BUF. - BUF is assumed to be in a compilation unit described by CU_HEADER. - Return *BYTES_READ_PTR count of bytes read from BUF. */ - -static const char * -read_indirect_string (struct dwarf2_per_objfile *dwarf2_per_objfile, bfd *abfd, - const gdb_byte *buf, - const struct comp_unit_head *cu_header, - unsigned int *bytes_read_ptr) -{ - LONGEST str_offset = read_offset (abfd, buf, cu_header, bytes_read_ptr); - - return read_indirect_string_at_offset (dwarf2_per_objfile, abfd, str_offset); -} - -/* Return pointer to string at .debug_line_str offset as read from BUF. - BUF is assumed to be in a compilation unit described by CU_HEADER. - Return *BYTES_READ_PTR count of bytes read from BUF. */ - -static const char * -read_indirect_line_string (struct dwarf2_per_objfile *dwarf2_per_objfile, - bfd *abfd, const gdb_byte *buf, - const struct comp_unit_head *cu_header, - unsigned int *bytes_read_ptr) -{ - LONGEST str_offset = read_offset (abfd, buf, cu_header, bytes_read_ptr); - - return read_indirect_line_string_at_offset (dwarf2_per_objfile, abfd, - str_offset); -} - -ULONGEST -read_unsigned_leb128 (bfd *abfd, const gdb_byte *buf, - unsigned int *bytes_read_ptr) -{ - ULONGEST result; - unsigned int num_read; - int shift; - unsigned char byte; - - result = 0; - shift = 0; - num_read = 0; - while (1) - { - byte = bfd_get_8 (abfd, buf); - buf++; - num_read++; - result |= ((ULONGEST) (byte & 127) << shift); - if ((byte & 128) == 0) - { - break; - } - shift += 7; - } - *bytes_read_ptr = num_read; - return result; -} - -static LONGEST -read_signed_leb128 (bfd *abfd, const gdb_byte *buf, - unsigned int *bytes_read_ptr) -{ - ULONGEST result; - int shift, num_read; - unsigned char byte; - - result = 0; - shift = 0; - num_read = 0; - while (1) - { - byte = bfd_get_8 (abfd, buf); - buf++; - num_read++; - result |= ((ULONGEST) (byte & 127) << shift); - shift += 7; - if ((byte & 128) == 0) - { - break; - } - } - if ((shift < 8 * sizeof (result)) && (byte & 0x40)) - result |= -(((ULONGEST) 1) << shift); - *bytes_read_ptr = num_read; - return result; -} - -/* Given index ADDR_INDEX in .debug_addr, fetch the value. - ADDR_BASE is the DW_AT_GNU_addr_base attribute or zero. - ADDR_SIZE is the size of addresses from the CU header. */ - -static CORE_ADDR -read_addr_index_1 (struct dwarf2_per_objfile *dwarf2_per_objfile, - unsigned int addr_index, ULONGEST addr_base, int addr_size) -{ - struct objfile *objfile = dwarf2_per_objfile->objfile; - bfd *abfd = objfile->obfd; - const gdb_byte *info_ptr; - - dwarf2_read_section (objfile, &dwarf2_per_objfile->addr); - if (dwarf2_per_objfile->addr.buffer == NULL) - error (_("DW_FORM_addr_index used without .debug_addr section [in module %s]"), - objfile_name (objfile)); - if (addr_base + addr_index * addr_size >= dwarf2_per_objfile->addr.size) - error (_("DW_FORM_addr_index pointing outside of " - ".debug_addr section [in module %s]"), - objfile_name (objfile)); - info_ptr = (dwarf2_per_objfile->addr.buffer - + addr_base + addr_index * addr_size); - if (addr_size == 4) - return bfd_get_32 (abfd, info_ptr); - else - return bfd_get_64 (abfd, info_ptr); -} - -/* Given index ADDR_INDEX in .debug_addr, fetch the value. */ - -static CORE_ADDR -read_addr_index (struct dwarf2_cu *cu, unsigned int addr_index) -{ - return read_addr_index_1 (cu->per_cu->dwarf2_per_objfile, addr_index, - cu->addr_base, cu->header.addr_size); -} - -/* Given a pointer to an leb128 value, fetch the value from .debug_addr. */ - -static CORE_ADDR -read_addr_index_from_leb128 (struct dwarf2_cu *cu, const gdb_byte *info_ptr, - unsigned int *bytes_read) -{ - bfd *abfd = cu->per_cu->dwarf2_per_objfile->objfile->obfd; - unsigned int addr_index = read_unsigned_leb128 (abfd, info_ptr, bytes_read); - - return read_addr_index (cu, addr_index); -} - -/* Data structure to pass results from dwarf2_read_addr_index_reader - back to dwarf2_read_addr_index. */ - -struct dwarf2_read_addr_index_data -{ - ULONGEST addr_base; - int addr_size; -}; - -/* die_reader_func for dwarf2_read_addr_index. */ - -static void -dwarf2_read_addr_index_reader (const struct die_reader_specs *reader, - const gdb_byte *info_ptr, - struct die_info *comp_unit_die, - int has_children, - void *data) -{ - struct dwarf2_cu *cu = reader->cu; - struct dwarf2_read_addr_index_data *aidata = - (struct dwarf2_read_addr_index_data *) data; - - aidata->addr_base = cu->addr_base; - aidata->addr_size = cu->header.addr_size; -} - -/* Given an index in .debug_addr, fetch the value. - NOTE: This can be called during dwarf expression evaluation, - long after the debug information has been read, and thus per_cu->cu - may no longer exist. */ - -CORE_ADDR -dwarf2_read_addr_index (struct dwarf2_per_cu_data *per_cu, - unsigned int addr_index) -{ - struct dwarf2_per_objfile *dwarf2_per_objfile = per_cu->dwarf2_per_objfile; - struct dwarf2_cu *cu = per_cu->cu; - ULONGEST addr_base; - int addr_size; - - /* We need addr_base and addr_size. - If we don't have PER_CU->cu, we have to get it. - Nasty, but the alternative is storing the needed info in PER_CU, - which at this point doesn't seem justified: it's not clear how frequently - it would get used and it would increase the size of every PER_CU. - Entry points like dwarf2_per_cu_addr_size do a similar thing - so we're not in uncharted territory here. - Alas we need to be a bit more complicated as addr_base is contained - in the DIE. - - We don't need to read the entire CU(/TU). - We just need the header and top level die. - - IWBN to use the aging mechanism to let us lazily later discard the CU. - For now we skip this optimization. */ - - if (cu != NULL) - { - addr_base = cu->addr_base; - addr_size = cu->header.addr_size; - } - else - { - struct dwarf2_read_addr_index_data aidata; - - /* Note: We can't use init_cutu_and_read_dies_simple here, - we need addr_base. */ - init_cutu_and_read_dies (per_cu, NULL, 0, 0, false, - dwarf2_read_addr_index_reader, &aidata); - addr_base = aidata.addr_base; - addr_size = aidata.addr_size; - } - - return read_addr_index_1 (dwarf2_per_objfile, addr_index, addr_base, - addr_size); -} - -/* Given a DW_FORM_GNU_str_index or DW_FORM_strx, fetch the string. - This is only used by the Fission support. */ - -static const char * -read_str_index (const struct die_reader_specs *reader, ULONGEST str_index) -{ - struct dwarf2_cu *cu = reader->cu; - struct dwarf2_per_objfile *dwarf2_per_objfile - = cu->per_cu->dwarf2_per_objfile; - struct objfile *objfile = dwarf2_per_objfile->objfile; - const char *objf_name = objfile_name (objfile); - bfd *abfd = objfile->obfd; - struct dwarf2_section_info *str_section = &reader->dwo_file->sections.str; - struct dwarf2_section_info *str_offsets_section = - &reader->dwo_file->sections.str_offsets; - const gdb_byte *info_ptr; - ULONGEST str_offset; - static const char form_name[] = "DW_FORM_GNU_str_index or DW_FORM_strx"; - - dwarf2_read_section (objfile, str_section); - dwarf2_read_section (objfile, str_offsets_section); - if (str_section->buffer == NULL) - error (_("%s used without .debug_str.dwo section" - " in CU at offset %s [in module %s]"), - form_name, sect_offset_str (cu->header.sect_off), objf_name); - if (str_offsets_section->buffer == NULL) - error (_("%s used without .debug_str_offsets.dwo section" - " in CU at offset %s [in module %s]"), - form_name, sect_offset_str (cu->header.sect_off), objf_name); - if (str_index * cu->header.offset_size >= str_offsets_section->size) - error (_("%s pointing outside of .debug_str_offsets.dwo" - " section in CU at offset %s [in module %s]"), - form_name, sect_offset_str (cu->header.sect_off), objf_name); - info_ptr = (str_offsets_section->buffer - + str_index * cu->header.offset_size); - if (cu->header.offset_size == 4) - str_offset = bfd_get_32 (abfd, info_ptr); - else - str_offset = bfd_get_64 (abfd, info_ptr); - if (str_offset >= str_section->size) - error (_("Offset from %s pointing outside of" - " .debug_str.dwo section in CU at offset %s [in module %s]"), - form_name, sect_offset_str (cu->header.sect_off), objf_name); - return (const char *) (str_section->buffer + str_offset); -} - -/* Return the length of an LEB128 number in BUF. */ - -static int -leb128_size (const gdb_byte *buf) -{ - const gdb_byte *begin = buf; - gdb_byte byte; - - while (1) - { - byte = *buf++; - if ((byte & 128) == 0) - return buf - begin; - } -} - -static void -set_cu_language (unsigned int lang, struct dwarf2_cu *cu) -{ - switch (lang) - { - case DW_LANG_C89: - case DW_LANG_C99: - case DW_LANG_C11: - case DW_LANG_C: - case DW_LANG_UPC: - cu->language = language_c; - break; - case DW_LANG_Java: - case DW_LANG_C_plus_plus: - case DW_LANG_C_plus_plus_11: - case DW_LANG_C_plus_plus_14: - cu->language = language_cplus; - break; - case DW_LANG_D: - cu->language = language_d; - break; - case DW_LANG_Fortran77: - case DW_LANG_Fortran90: - case DW_LANG_Fortran95: - case DW_LANG_Fortran03: - case DW_LANG_Fortran08: - cu->language = language_fortran; - break; - case DW_LANG_Go: - cu->language = language_go; - break; - case DW_LANG_Mips_Assembler: - cu->language = language_asm; - break; - case DW_LANG_Ada83: - case DW_LANG_Ada95: - cu->language = language_ada; - break; - case DW_LANG_Modula2: - cu->language = language_m2; - break; - case DW_LANG_Pascal83: - cu->language = language_pascal; - break; - case DW_LANG_ObjC: - cu->language = language_objc; - break; - case DW_LANG_Rust: - case DW_LANG_Rust_old: - cu->language = language_rust; - break; - case DW_LANG_Cobol74: - case DW_LANG_Cobol85: - default: - cu->language = language_minimal; - break; - } - cu->language_defn = language_def (cu->language); -} - -/* Return the named attribute or NULL if not there. */ - -static struct attribute * -dwarf2_attr (struct die_info *die, unsigned int name, struct dwarf2_cu *cu) -{ - for (;;) - { - unsigned int i; - struct attribute *spec = NULL; - - for (i = 0; i < die->num_attrs; ++i) - { - if (die->attrs[i].name == name) - return &die->attrs[i]; - if (die->attrs[i].name == DW_AT_specification - || die->attrs[i].name == DW_AT_abstract_origin) - spec = &die->attrs[i]; - } - - if (!spec) - break; - - die = follow_die_ref (die, spec, &cu); - } - - return NULL; -} - -/* Return the named attribute or NULL if not there, - but do not follow DW_AT_specification, etc. - This is for use in contexts where we're reading .debug_types dies. - Following DW_AT_specification, DW_AT_abstract_origin will take us - back up the chain, and we want to go down. */ - -static struct attribute * -dwarf2_attr_no_follow (struct die_info *die, unsigned int name) -{ - unsigned int i; - - for (i = 0; i < die->num_attrs; ++i) - if (die->attrs[i].name == name) - return &die->attrs[i]; - - return NULL; -} - -/* Return the string associated with a string-typed attribute, or NULL if it - is either not found or is of an incorrect type. */ - -static const char * -dwarf2_string_attr (struct die_info *die, unsigned int name, struct dwarf2_cu *cu) -{ - struct attribute *attr; - const char *str = NULL; - - attr = dwarf2_attr (die, name, cu); - - if (attr != NULL) - { - if (attr->form == DW_FORM_strp || attr->form == DW_FORM_line_strp - || attr->form == DW_FORM_string - || attr->form == DW_FORM_strx - || attr->form == DW_FORM_strx1 - || attr->form == DW_FORM_strx2 - || attr->form == DW_FORM_strx3 - || attr->form == DW_FORM_strx4 - || attr->form == DW_FORM_GNU_str_index - || attr->form == DW_FORM_GNU_strp_alt) - str = DW_STRING (attr); - else - complaint (_("string type expected for attribute %s for " - "DIE at %s in module %s"), - dwarf_attr_name (name), sect_offset_str (die->sect_off), - objfile_name (cu->per_cu->dwarf2_per_objfile->objfile)); - } - - return str; -} - -/* Return the dwo name or NULL if not present. If present, it is in either - DW_AT_GNU_dwo_name or DW_AT_dwo_name attribute. */ -static const char * -dwarf2_dwo_name (struct die_info *die, struct dwarf2_cu *cu) -{ - const char *dwo_name = dwarf2_string_attr (die, DW_AT_GNU_dwo_name, cu); - if (dwo_name == nullptr) - dwo_name = dwarf2_string_attr (die, DW_AT_dwo_name, cu); - return dwo_name; -} - -/* Return non-zero iff the attribute NAME is defined for the given DIE, - and holds a non-zero value. This function should only be used for - DW_FORM_flag or DW_FORM_flag_present attributes. */ - -static int -dwarf2_flag_true_p (struct die_info *die, unsigned name, struct dwarf2_cu *cu) -{ - struct attribute *attr = dwarf2_attr (die, name, cu); - - return (attr && DW_UNSND (attr)); -} - -static int -die_is_declaration (struct die_info *die, struct dwarf2_cu *cu) -{ - /* A DIE is a declaration if it has a DW_AT_declaration attribute - which value is non-zero. However, we have to be careful with - DIEs having a DW_AT_specification attribute, because dwarf2_attr() - (via dwarf2_flag_true_p) follows this attribute. So we may - end up accidently finding a declaration attribute that belongs - to a different DIE referenced by the specification attribute, - even though the given DIE does not have a declaration attribute. */ - return (dwarf2_flag_true_p (die, DW_AT_declaration, cu) - && dwarf2_attr (die, DW_AT_specification, cu) == NULL); -} - -/* Return the die giving the specification for DIE, if there is - one. *SPEC_CU is the CU containing DIE on input, and the CU - containing the return value on output. If there is no - specification, but there is an abstract origin, that is - returned. */ - -static struct die_info * -die_specification (struct die_info *die, struct dwarf2_cu **spec_cu) -{ - struct attribute *spec_attr = dwarf2_attr (die, DW_AT_specification, - *spec_cu); - - if (spec_attr == NULL) - spec_attr = dwarf2_attr (die, DW_AT_abstract_origin, *spec_cu); - - if (spec_attr == NULL) - return NULL; - else - return follow_die_ref (die, spec_attr, spec_cu); -} - -/* Stub for free_line_header to match void * callback types. */ - -static void -free_line_header_voidp (void *arg) -{ - struct line_header *lh = (struct line_header *) arg; - - delete lh; -} - -void -line_header::add_include_dir (const char *include_dir) -{ - if (dwarf_line_debug >= 2) - { - size_t new_size; - if (version >= 5) - new_size = m_include_dirs.size (); - else - new_size = m_include_dirs.size () + 1; - fprintf_unfiltered (gdb_stdlog, "Adding dir %zu: %s\n", - new_size, include_dir); - } - m_include_dirs.push_back (include_dir); -} - -void -line_header::add_file_name (const char *name, - dir_index d_index, - unsigned int mod_time, - unsigned int length) -{ - if (dwarf_line_debug >= 2) - { - size_t new_size; - if (version >= 5) - new_size = file_names_size (); - else - new_size = file_names_size () + 1; - fprintf_unfiltered (gdb_stdlog, "Adding file %zu: %s\n", - new_size, name); - } - m_file_names.emplace_back (name, d_index, mod_time, length); -} - -/* A convenience function to find the proper .debug_line section for a CU. */ - -static struct dwarf2_section_info * -get_debug_line_section (struct dwarf2_cu *cu) -{ - struct dwarf2_section_info *section; - struct dwarf2_per_objfile *dwarf2_per_objfile - = cu->per_cu->dwarf2_per_objfile; - - /* For TUs in DWO files, the DW_AT_stmt_list attribute lives in the - DWO file. */ - if (cu->dwo_unit && cu->per_cu->is_debug_types) - section = &cu->dwo_unit->dwo_file->sections.line; - else if (cu->per_cu->is_dwz) - { - struct dwz_file *dwz = dwarf2_get_dwz_file (dwarf2_per_objfile); - - section = &dwz->line; - } - else - section = &dwarf2_per_objfile->line; - - return section; -} - -/* Read directory or file name entry format, starting with byte of - format count entries, ULEB128 pairs of entry formats, ULEB128 of - entries count and the entries themselves in the described entry - format. */ - -static void -read_formatted_entries (struct dwarf2_per_objfile *dwarf2_per_objfile, - bfd *abfd, const gdb_byte **bufp, - struct line_header *lh, - const struct comp_unit_head *cu_header, - void (*callback) (struct line_header *lh, - const char *name, - dir_index d_index, - unsigned int mod_time, - unsigned int length)) -{ - gdb_byte format_count, formati; - ULONGEST data_count, datai; - const gdb_byte *buf = *bufp; - const gdb_byte *format_header_data; - unsigned int bytes_read; - - format_count = read_1_byte (abfd, buf); - buf += 1; - format_header_data = buf; - for (formati = 0; formati < format_count; formati++) - { - read_unsigned_leb128 (abfd, buf, &bytes_read); - buf += bytes_read; - read_unsigned_leb128 (abfd, buf, &bytes_read); - buf += bytes_read; - } - - data_count = read_unsigned_leb128 (abfd, buf, &bytes_read); - buf += bytes_read; - for (datai = 0; datai < data_count; datai++) - { - const gdb_byte *format = format_header_data; - struct file_entry fe; - - for (formati = 0; formati < format_count; formati++) - { - ULONGEST content_type = read_unsigned_leb128 (abfd, format, &bytes_read); - format += bytes_read; - - ULONGEST form = read_unsigned_leb128 (abfd, format, &bytes_read); - format += bytes_read; - - gdb::optional<const char *> string; - gdb::optional<unsigned int> uint; - - switch (form) - { - case DW_FORM_string: - string.emplace (read_direct_string (abfd, buf, &bytes_read)); - buf += bytes_read; - break; - - case DW_FORM_line_strp: - string.emplace (read_indirect_line_string (dwarf2_per_objfile, - abfd, buf, - cu_header, - &bytes_read)); - buf += bytes_read; - break; - - case DW_FORM_data1: - uint.emplace (read_1_byte (abfd, buf)); - buf += 1; - break; - - case DW_FORM_data2: - uint.emplace (read_2_bytes (abfd, buf)); - buf += 2; - break; - - case DW_FORM_data4: - uint.emplace (read_4_bytes (abfd, buf)); - buf += 4; - break; - - case DW_FORM_data8: - uint.emplace (read_8_bytes (abfd, buf)); - buf += 8; - break; - - case DW_FORM_data16: - /* This is used for MD5, but file_entry does not record MD5s. */ - buf += 16; - break; - - case DW_FORM_udata: - uint.emplace (read_unsigned_leb128 (abfd, buf, &bytes_read)); - buf += bytes_read; - break; - - case DW_FORM_block: - /* It is valid only for DW_LNCT_timestamp which is ignored by - current GDB. */ - break; - } - - switch (content_type) - { - case DW_LNCT_path: - if (string.has_value ()) - fe.name = *string; - break; - case DW_LNCT_directory_index: - if (uint.has_value ()) - fe.d_index = (dir_index) *uint; - break; - case DW_LNCT_timestamp: - if (uint.has_value ()) - fe.mod_time = *uint; - break; - case DW_LNCT_size: - if (uint.has_value ()) - fe.length = *uint; - break; - case DW_LNCT_MD5: - break; - default: - complaint (_("Unknown format content type %s"), - pulongest (content_type)); - } - } - - callback (lh, fe.name, fe.d_index, fe.mod_time, fe.length); - } - - *bufp = buf; -} - -/* Read the statement program header starting at OFFSET in - .debug_line, or .debug_line.dwo. Return a pointer - to a struct line_header, allocated using xmalloc. - Returns NULL if there is a problem reading the header, e.g., if it - has a version we don't understand. - - NOTE: the strings in the include directory and file name tables of - the returned object point into the dwarf line section buffer, - and must not be freed. */ - -static line_header_up -dwarf_decode_line_header (sect_offset sect_off, struct dwarf2_cu *cu) -{ - const gdb_byte *line_ptr; - unsigned int bytes_read, offset_size; - int i; - const char *cur_dir, *cur_file; - struct dwarf2_section_info *section; - bfd *abfd; - struct dwarf2_per_objfile *dwarf2_per_objfile - = cu->per_cu->dwarf2_per_objfile; - - section = get_debug_line_section (cu); - dwarf2_read_section (dwarf2_per_objfile->objfile, section); - if (section->buffer == NULL) - { - if (cu->dwo_unit && cu->per_cu->is_debug_types) - complaint (_("missing .debug_line.dwo section")); - else - complaint (_("missing .debug_line section")); - return 0; - } - - /* We can't do this until we know the section is non-empty. - Only then do we know we have such a section. */ - abfd = get_section_bfd_owner (section); - - /* Make sure that at least there's room for the total_length field. - That could be 12 bytes long, but we're just going to fudge that. */ - if (to_underlying (sect_off) + 4 >= section->size) - { - dwarf2_statement_list_fits_in_line_number_section_complaint (); - return 0; - } - - line_header_up lh (new line_header ()); - - lh->sect_off = sect_off; - lh->offset_in_dwz = cu->per_cu->is_dwz; - - line_ptr = section->buffer + to_underlying (sect_off); - - /* Read in the header. */ - lh->total_length = - read_checked_initial_length_and_offset (abfd, line_ptr, &cu->header, - &bytes_read, &offset_size); - line_ptr += bytes_read; - - const gdb_byte *start_here = line_ptr; - - if (line_ptr + lh->total_length > (section->buffer + section->size)) - { - dwarf2_statement_list_fits_in_line_number_section_complaint (); - return 0; - } - lh->statement_program_end = start_here + lh->total_length; - lh->version = read_2_bytes (abfd, line_ptr); - line_ptr += 2; - if (lh->version > 5) - { - /* This is a version we don't understand. The format could have - changed in ways we don't handle properly so just punt. */ - complaint (_("unsupported version in .debug_line section")); - return NULL; - } - if (lh->version >= 5) - { - gdb_byte segment_selector_size; - - /* Skip address size. */ - read_1_byte (abfd, line_ptr); - line_ptr += 1; - - segment_selector_size = read_1_byte (abfd, line_ptr); - line_ptr += 1; - if (segment_selector_size != 0) - { - complaint (_("unsupported segment selector size %u " - "in .debug_line section"), - segment_selector_size); - return NULL; - } - } - lh->header_length = read_offset_1 (abfd, line_ptr, offset_size); - line_ptr += offset_size; - lh->statement_program_start = line_ptr + lh->header_length; - lh->minimum_instruction_length = read_1_byte (abfd, line_ptr); - line_ptr += 1; - if (lh->version >= 4) - { - lh->maximum_ops_per_instruction = read_1_byte (abfd, line_ptr); - line_ptr += 1; - } - else - lh->maximum_ops_per_instruction = 1; - - if (lh->maximum_ops_per_instruction == 0) - { - lh->maximum_ops_per_instruction = 1; - complaint (_("invalid maximum_ops_per_instruction " - "in `.debug_line' section")); - } - - lh->default_is_stmt = read_1_byte (abfd, line_ptr); - line_ptr += 1; - lh->line_base = read_1_signed_byte (abfd, line_ptr); - line_ptr += 1; - lh->line_range = read_1_byte (abfd, line_ptr); - line_ptr += 1; - lh->opcode_base = read_1_byte (abfd, line_ptr); - line_ptr += 1; - lh->standard_opcode_lengths.reset (new unsigned char[lh->opcode_base]); - - lh->standard_opcode_lengths[0] = 1; /* This should never be used anyway. */ - for (i = 1; i < lh->opcode_base; ++i) - { - lh->standard_opcode_lengths[i] = read_1_byte (abfd, line_ptr); - line_ptr += 1; - } - - if (lh->version >= 5) - { - /* Read directory table. */ - read_formatted_entries (dwarf2_per_objfile, abfd, &line_ptr, lh.get (), - &cu->header, - [] (struct line_header *header, const char *name, - dir_index d_index, unsigned int mod_time, - unsigned int length) - { - header->add_include_dir (name); - }); - - /* Read file name table. */ - read_formatted_entries (dwarf2_per_objfile, abfd, &line_ptr, lh.get (), - &cu->header, - [] (struct line_header *header, const char *name, - dir_index d_index, unsigned int mod_time, - unsigned int length) - { - header->add_file_name (name, d_index, mod_time, length); - }); - } - else - { - /* Read directory table. */ - while ((cur_dir = read_direct_string (abfd, line_ptr, &bytes_read)) != NULL) - { - line_ptr += bytes_read; - lh->add_include_dir (cur_dir); - } - line_ptr += bytes_read; - - /* Read file name table. */ - while ((cur_file = read_direct_string (abfd, line_ptr, &bytes_read)) != NULL) - { - unsigned int mod_time, length; - dir_index d_index; - - line_ptr += bytes_read; - d_index = (dir_index) read_unsigned_leb128 (abfd, line_ptr, &bytes_read); - line_ptr += bytes_read; - mod_time = read_unsigned_leb128 (abfd, line_ptr, &bytes_read); - line_ptr += bytes_read; - length = read_unsigned_leb128 (abfd, line_ptr, &bytes_read); - line_ptr += bytes_read; - - lh->add_file_name (cur_file, d_index, mod_time, length); - } - line_ptr += bytes_read; - } - - if (line_ptr > (section->buffer + section->size)) - complaint (_("line number info header doesn't " - "fit in `.debug_line' section")); - - return lh; -} - -/* Subroutine of dwarf_decode_lines to simplify it. - Return the file name of the psymtab for the given file_entry. - COMP_DIR is the compilation directory (DW_AT_comp_dir) or NULL if unknown. - If space for the result is malloc'd, *NAME_HOLDER will be set. - Returns NULL if FILE_INDEX should be ignored, i.e., it is pst->filename. */ - -static const char * -psymtab_include_file_name (const struct line_header *lh, const file_entry &fe, - const struct partial_symtab *pst, - const char *comp_dir, - gdb::unique_xmalloc_ptr<char> *name_holder) -{ - const char *include_name = fe.name; - const char *include_name_to_compare = include_name; - const char *pst_filename; - int file_is_pst; - - const char *dir_name = fe.include_dir (lh); - - gdb::unique_xmalloc_ptr<char> hold_compare; - if (!IS_ABSOLUTE_PATH (include_name) - && (dir_name != NULL || comp_dir != NULL)) - { - /* Avoid creating a duplicate psymtab for PST. - We do this by comparing INCLUDE_NAME and PST_FILENAME. - Before we do the comparison, however, we need to account - for DIR_NAME and COMP_DIR. - First prepend dir_name (if non-NULL). If we still don't - have an absolute path prepend comp_dir (if non-NULL). - However, the directory we record in the include-file's - psymtab does not contain COMP_DIR (to match the - corresponding symtab(s)). - - Example: - - bash$ cd /tmp - bash$ gcc -g ./hello.c - include_name = "hello.c" - dir_name = "." - DW_AT_comp_dir = comp_dir = "/tmp" - DW_AT_name = "./hello.c" - - */ - - if (dir_name != NULL) - { - name_holder->reset (concat (dir_name, SLASH_STRING, - include_name, (char *) NULL)); - include_name = name_holder->get (); - include_name_to_compare = include_name; - } - if (!IS_ABSOLUTE_PATH (include_name) && comp_dir != NULL) - { - hold_compare.reset (concat (comp_dir, SLASH_STRING, - include_name, (char *) NULL)); - include_name_to_compare = hold_compare.get (); - } - } - - pst_filename = pst->filename; - gdb::unique_xmalloc_ptr<char> copied_name; - if (!IS_ABSOLUTE_PATH (pst_filename) && pst->dirname != NULL) - { - copied_name.reset (concat (pst->dirname, SLASH_STRING, - pst_filename, (char *) NULL)); - pst_filename = copied_name.get (); - } - - file_is_pst = FILENAME_CMP (include_name_to_compare, pst_filename) == 0; - - if (file_is_pst) - return NULL; - return include_name; -} - -/* State machine to track the state of the line number program. */ - -class lnp_state_machine -{ -public: - /* Initialize a machine state for the start of a line number - program. */ - lnp_state_machine (struct dwarf2_cu *cu, gdbarch *arch, line_header *lh, - bool record_lines_p); - - file_entry *current_file () - { - /* lh->file_names is 0-based, but the file name numbers in the - statement program are 1-based. */ - return m_line_header->file_name_at (m_file); - } - - /* Record the line in the state machine. END_SEQUENCE is true if - we're processing the end of a sequence. */ - void record_line (bool end_sequence); - - /* Check ADDRESS is zero and less than UNRELOCATED_LOWPC and if true - nop-out rest of the lines in this sequence. */ - void check_line_address (struct dwarf2_cu *cu, - const gdb_byte *line_ptr, - CORE_ADDR unrelocated_lowpc, CORE_ADDR address); - - void handle_set_discriminator (unsigned int discriminator) - { - m_discriminator = discriminator; - m_line_has_non_zero_discriminator |= discriminator != 0; - } - - /* Handle DW_LNE_set_address. */ - void handle_set_address (CORE_ADDR baseaddr, CORE_ADDR address) - { - m_op_index = 0; - address += baseaddr; - m_address = gdbarch_adjust_dwarf2_line (m_gdbarch, address, false); - } - - /* Handle DW_LNS_advance_pc. */ - void handle_advance_pc (CORE_ADDR adjust); - - /* Handle a special opcode. */ - void handle_special_opcode (unsigned char op_code); - - /* Handle DW_LNS_advance_line. */ - void handle_advance_line (int line_delta) - { - advance_line (line_delta); - } - - /* Handle DW_LNS_set_file. */ - void handle_set_file (file_name_index file); - - /* Handle DW_LNS_negate_stmt. */ - void handle_negate_stmt () - { - m_is_stmt = !m_is_stmt; - } - - /* Handle DW_LNS_const_add_pc. */ - void handle_const_add_pc (); - - /* Handle DW_LNS_fixed_advance_pc. */ - void handle_fixed_advance_pc (CORE_ADDR addr_adj) - { - m_address += gdbarch_adjust_dwarf2_line (m_gdbarch, addr_adj, true); - m_op_index = 0; - } - - /* Handle DW_LNS_copy. */ - void handle_copy () - { - record_line (false); - m_discriminator = 0; - } - - /* Handle DW_LNE_end_sequence. */ - void handle_end_sequence () - { - m_currently_recording_lines = true; - } - -private: - /* Advance the line by LINE_DELTA. */ - void advance_line (int line_delta) - { - m_line += line_delta; - - if (line_delta != 0) - m_line_has_non_zero_discriminator = m_discriminator != 0; - } - - struct dwarf2_cu *m_cu; - - gdbarch *m_gdbarch; - - /* True if we're recording lines. - Otherwise we're building partial symtabs and are just interested in - finding include files mentioned by the line number program. */ - bool m_record_lines_p; - - /* The line number header. */ - line_header *m_line_header; - - /* These are part of the standard DWARF line number state machine, - and initialized according to the DWARF spec. */ - - unsigned char m_op_index = 0; - /* The line table index of the current file. */ - file_name_index m_file = 1; - unsigned int m_line = 1; - - /* These are initialized in the constructor. */ - - CORE_ADDR m_address; - bool m_is_stmt; - unsigned int m_discriminator; - - /* Additional bits of state we need to track. */ - - /* The last file that we called dwarf2_start_subfile for. - This is only used for TLLs. */ - unsigned int m_last_file = 0; - /* The last file a line number was recorded for. */ - struct subfile *m_last_subfile = NULL; - - /* When true, record the lines we decode. */ - bool m_currently_recording_lines = false; - - /* The last line number that was recorded, used to coalesce - consecutive entries for the same line. This can happen, for - example, when discriminators are present. PR 17276. */ - unsigned int m_last_line = 0; - bool m_line_has_non_zero_discriminator = false; -}; - -void -lnp_state_machine::handle_advance_pc (CORE_ADDR adjust) -{ - CORE_ADDR addr_adj = (((m_op_index + adjust) - / m_line_header->maximum_ops_per_instruction) - * m_line_header->minimum_instruction_length); - m_address += gdbarch_adjust_dwarf2_line (m_gdbarch, addr_adj, true); - m_op_index = ((m_op_index + adjust) - % m_line_header->maximum_ops_per_instruction); -} - -void -lnp_state_machine::handle_special_opcode (unsigned char op_code) -{ - unsigned char adj_opcode = op_code - m_line_header->opcode_base; - CORE_ADDR addr_adj = (((m_op_index - + (adj_opcode / m_line_header->line_range)) - / m_line_header->maximum_ops_per_instruction) - * m_line_header->minimum_instruction_length); - m_address += gdbarch_adjust_dwarf2_line (m_gdbarch, addr_adj, true); - m_op_index = ((m_op_index + (adj_opcode / m_line_header->line_range)) - % m_line_header->maximum_ops_per_instruction); - - int line_delta = (m_line_header->line_base - + (adj_opcode % m_line_header->line_range)); - advance_line (line_delta); - record_line (false); - m_discriminator = 0; -} - -void -lnp_state_machine::handle_set_file (file_name_index file) -{ - m_file = file; - - const file_entry *fe = current_file (); - if (fe == NULL) - dwarf2_debug_line_missing_file_complaint (); - else if (m_record_lines_p) - { - const char *dir = fe->include_dir (m_line_header); - - m_last_subfile = m_cu->get_builder ()->get_current_subfile (); - m_line_has_non_zero_discriminator = m_discriminator != 0; - dwarf2_start_subfile (m_cu, fe->name, dir); - } -} - -void -lnp_state_machine::handle_const_add_pc () -{ - CORE_ADDR adjust - = (255 - m_line_header->opcode_base) / m_line_header->line_range; - - CORE_ADDR addr_adj - = (((m_op_index + adjust) - / m_line_header->maximum_ops_per_instruction) - * m_line_header->minimum_instruction_length); - - m_address += gdbarch_adjust_dwarf2_line (m_gdbarch, addr_adj, true); - m_op_index = ((m_op_index + adjust) - % m_line_header->maximum_ops_per_instruction); -} - -/* Return non-zero if we should add LINE to the line number table. - LINE is the line to add, LAST_LINE is the last line that was added, - LAST_SUBFILE is the subfile for LAST_LINE. - LINE_HAS_NON_ZERO_DISCRIMINATOR is non-zero if LINE has ever - had a non-zero discriminator. - - We have to be careful in the presence of discriminators. - E.g., for this line: - - for (i = 0; i < 100000; i++); - - clang can emit four line number entries for that one line, - each with a different discriminator. - See gdb.dwarf2/dw2-single-line-discriminators.exp for an example. - - However, we want gdb to coalesce all four entries into one. - Otherwise the user could stepi into the middle of the line and - gdb would get confused about whether the pc really was in the - middle of the line. - - Things are further complicated by the fact that two consecutive - line number entries for the same line is a heuristic used by gcc - to denote the end of the prologue. So we can't just discard duplicate - entries, we have to be selective about it. The heuristic we use is - that we only collapse consecutive entries for the same line if at least - one of those entries has a non-zero discriminator. PR 17276. - - Note: Addresses in the line number state machine can never go backwards - within one sequence, thus this coalescing is ok. */ - -static int -dwarf_record_line_p (struct dwarf2_cu *cu, - unsigned int line, unsigned int last_line, - int line_has_non_zero_discriminator, - struct subfile *last_subfile) -{ - if (cu->get_builder ()->get_current_subfile () != last_subfile) - return 1; - if (line != last_line) - return 1; - /* Same line for the same file that we've seen already. - As a last check, for pr 17276, only record the line if the line - has never had a non-zero discriminator. */ - if (!line_has_non_zero_discriminator) - return 1; - return 0; -} - -/* Use the CU's builder to record line number LINE beginning at - address ADDRESS in the line table of subfile SUBFILE. */ - -static void -dwarf_record_line_1 (struct gdbarch *gdbarch, struct subfile *subfile, - unsigned int line, CORE_ADDR address, - struct dwarf2_cu *cu) -{ - CORE_ADDR addr = gdbarch_addr_bits_remove (gdbarch, address); - - if (dwarf_line_debug) - { - fprintf_unfiltered (gdb_stdlog, - "Recording line %u, file %s, address %s\n", - line, lbasename (subfile->name), - paddress (gdbarch, address)); - } - - if (cu != nullptr) - cu->get_builder ()->record_line (subfile, line, addr); -} - -/* Subroutine of dwarf_decode_lines_1 to simplify it. - Mark the end of a set of line number records. - The arguments are the same as for dwarf_record_line_1. - If SUBFILE is NULL the request is ignored. */ - -static void -dwarf_finish_line (struct gdbarch *gdbarch, struct subfile *subfile, - CORE_ADDR address, struct dwarf2_cu *cu) -{ - if (subfile == NULL) - return; - - if (dwarf_line_debug) - { - fprintf_unfiltered (gdb_stdlog, - "Finishing current line, file %s, address %s\n", - lbasename (subfile->name), - paddress (gdbarch, address)); - } - - dwarf_record_line_1 (gdbarch, subfile, 0, address, cu); -} - -void -lnp_state_machine::record_line (bool end_sequence) -{ - if (dwarf_line_debug) - { - fprintf_unfiltered (gdb_stdlog, - "Processing actual line %u: file %u," - " address %s, is_stmt %u, discrim %u\n", - m_line, m_file, - paddress (m_gdbarch, m_address), - m_is_stmt, m_discriminator); - } - - file_entry *fe = current_file (); - - if (fe == NULL) - dwarf2_debug_line_missing_file_complaint (); - /* For now we ignore lines not starting on an instruction boundary. - But not when processing end_sequence for compatibility with the - previous version of the code. */ - else if (m_op_index == 0 || end_sequence) - { - fe->included_p = 1; - if (m_record_lines_p && (producer_is_codewarrior (m_cu) || m_is_stmt)) - { - if (m_last_subfile != m_cu->get_builder ()->get_current_subfile () - || end_sequence) - { - dwarf_finish_line (m_gdbarch, m_last_subfile, m_address, - m_currently_recording_lines ? m_cu : nullptr); - } - - if (!end_sequence) - { - if (dwarf_record_line_p (m_cu, m_line, m_last_line, - m_line_has_non_zero_discriminator, - m_last_subfile)) - { - buildsym_compunit *builder = m_cu->get_builder (); - dwarf_record_line_1 (m_gdbarch, - builder->get_current_subfile (), - m_line, m_address, - m_currently_recording_lines ? m_cu : nullptr); - } - m_last_subfile = m_cu->get_builder ()->get_current_subfile (); - m_last_line = m_line; - } - } - } -} - -lnp_state_machine::lnp_state_machine (struct dwarf2_cu *cu, gdbarch *arch, - line_header *lh, bool record_lines_p) -{ - m_cu = cu; - m_gdbarch = arch; - m_record_lines_p = record_lines_p; - m_line_header = lh; - - m_currently_recording_lines = true; - - /* Call `gdbarch_adjust_dwarf2_line' on the initial 0 address as if there - was a line entry for it so that the backend has a chance to adjust it - and also record it in case it needs it. This is currently used by MIPS - code, cf. `mips_adjust_dwarf2_line'. */ - m_address = gdbarch_adjust_dwarf2_line (arch, 0, 0); - m_is_stmt = lh->default_is_stmt; - m_discriminator = 0; -} - -void -lnp_state_machine::check_line_address (struct dwarf2_cu *cu, - const gdb_byte *line_ptr, - CORE_ADDR unrelocated_lowpc, CORE_ADDR address) -{ - /* If ADDRESS < UNRELOCATED_LOWPC then it's not a usable value, it's outside - the pc range of the CU. However, we restrict the test to only ADDRESS - values of zero to preserve GDB's previous behaviour which is to handle - the specific case of a function being GC'd by the linker. */ - - if (address == 0 && address < unrelocated_lowpc) - { - /* This line table is for a function which has been - GCd by the linker. Ignore it. PR gdb/12528 */ - - struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile; - long line_offset = line_ptr - get_debug_line_section (cu)->buffer; - - complaint (_(".debug_line address at offset 0x%lx is 0 [in module %s]"), - line_offset, objfile_name (objfile)); - m_currently_recording_lines = false; - /* Note: m_currently_recording_lines is left as false until we see - DW_LNE_end_sequence. */ - } -} - -/* Subroutine of dwarf_decode_lines to simplify it. - Process the line number information in LH. - If DECODE_FOR_PST_P is non-zero, all we do is process the line number - program in order to set included_p for every referenced header. */ - -static void -dwarf_decode_lines_1 (struct line_header *lh, struct dwarf2_cu *cu, - const int decode_for_pst_p, CORE_ADDR lowpc) -{ - const gdb_byte *line_ptr, *extended_end; - const gdb_byte *line_end; - unsigned int bytes_read, extended_len; - unsigned char op_code, extended_op; - CORE_ADDR baseaddr; - struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile; - bfd *abfd = objfile->obfd; - struct gdbarch *gdbarch = get_objfile_arch (objfile); - /* True if we're recording line info (as opposed to building partial - symtabs and just interested in finding include files mentioned by - the line number program). */ - bool record_lines_p = !decode_for_pst_p; - - baseaddr = ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile)); - - line_ptr = lh->statement_program_start; - line_end = lh->statement_program_end; - - /* Read the statement sequences until there's nothing left. */ - while (line_ptr < line_end) - { - /* The DWARF line number program state machine. Reset the state - machine at the start of each sequence. */ - lnp_state_machine state_machine (cu, gdbarch, lh, record_lines_p); - bool end_sequence = false; - - if (record_lines_p) - { - /* Start a subfile for the current file of the state - machine. */ - const file_entry *fe = state_machine.current_file (); - - if (fe != NULL) - dwarf2_start_subfile (cu, fe->name, fe->include_dir (lh)); - } - - /* Decode the table. */ - while (line_ptr < line_end && !end_sequence) - { - op_code = read_1_byte (abfd, line_ptr); - line_ptr += 1; - - if (op_code >= lh->opcode_base) - { - /* Special opcode. */ - state_machine.handle_special_opcode (op_code); - } - else switch (op_code) - { - case DW_LNS_extended_op: - extended_len = read_unsigned_leb128 (abfd, line_ptr, - &bytes_read); - line_ptr += bytes_read; - extended_end = line_ptr + extended_len; - extended_op = read_1_byte (abfd, line_ptr); - line_ptr += 1; - switch (extended_op) - { - case DW_LNE_end_sequence: - state_machine.handle_end_sequence (); - end_sequence = true; - break; - case DW_LNE_set_address: - { - CORE_ADDR address - = read_address (abfd, line_ptr, cu, &bytes_read); - line_ptr += bytes_read; - - state_machine.check_line_address (cu, line_ptr, - lowpc - baseaddr, address); - state_machine.handle_set_address (baseaddr, address); - } - break; - case DW_LNE_define_file: - { - const char *cur_file; - unsigned int mod_time, length; - dir_index dindex; - - cur_file = read_direct_string (abfd, line_ptr, - &bytes_read); - line_ptr += bytes_read; - dindex = (dir_index) - read_unsigned_leb128 (abfd, line_ptr, &bytes_read); - line_ptr += bytes_read; - mod_time = - read_unsigned_leb128 (abfd, line_ptr, &bytes_read); - line_ptr += bytes_read; - length = - read_unsigned_leb128 (abfd, line_ptr, &bytes_read); - line_ptr += bytes_read; - lh->add_file_name (cur_file, dindex, mod_time, length); - } - break; - case DW_LNE_set_discriminator: - { - /* The discriminator is not interesting to the - debugger; just ignore it. We still need to - check its value though: - if there are consecutive entries for the same - (non-prologue) line we want to coalesce them. - PR 17276. */ - unsigned int discr - = read_unsigned_leb128 (abfd, line_ptr, &bytes_read); - line_ptr += bytes_read; - - state_machine.handle_set_discriminator (discr); - } - break; - default: - complaint (_("mangled .debug_line section")); - return; - } - /* Make sure that we parsed the extended op correctly. If e.g. - we expected a different address size than the producer used, - we may have read the wrong number of bytes. */ - if (line_ptr != extended_end) - { - complaint (_("mangled .debug_line section")); - return; - } - break; - case DW_LNS_copy: - state_machine.handle_copy (); - break; - case DW_LNS_advance_pc: - { - CORE_ADDR adjust - = read_unsigned_leb128 (abfd, line_ptr, &bytes_read); - line_ptr += bytes_read; - - state_machine.handle_advance_pc (adjust); - } - break; - case DW_LNS_advance_line: - { - int line_delta - = read_signed_leb128 (abfd, line_ptr, &bytes_read); - line_ptr += bytes_read; - - state_machine.handle_advance_line (line_delta); - } - break; - case DW_LNS_set_file: - { - file_name_index file - = (file_name_index) read_unsigned_leb128 (abfd, line_ptr, - &bytes_read); - line_ptr += bytes_read; - - state_machine.handle_set_file (file); - } - break; - case DW_LNS_set_column: - (void) read_unsigned_leb128 (abfd, line_ptr, &bytes_read); - line_ptr += bytes_read; - break; - case DW_LNS_negate_stmt: - state_machine.handle_negate_stmt (); - break; - case DW_LNS_set_basic_block: - break; - /* Add to the address register of the state machine the - address increment value corresponding to special opcode - 255. I.e., this value is scaled by the minimum - instruction length since special opcode 255 would have - scaled the increment. */ - case DW_LNS_const_add_pc: - state_machine.handle_const_add_pc (); - break; - case DW_LNS_fixed_advance_pc: - { - CORE_ADDR addr_adj = read_2_bytes (abfd, line_ptr); - line_ptr += 2; - - state_machine.handle_fixed_advance_pc (addr_adj); - } - break; - default: - { - /* Unknown standard opcode, ignore it. */ - int i; - - for (i = 0; i < lh->standard_opcode_lengths[op_code]; i++) - { - (void) read_unsigned_leb128 (abfd, line_ptr, &bytes_read); - line_ptr += bytes_read; - } - } - } - } - - if (!end_sequence) - dwarf2_debug_line_missing_end_sequence_complaint (); - - /* We got a DW_LNE_end_sequence (or we ran off the end of the buffer, - in which case we still finish recording the last line). */ - state_machine.record_line (true); - } -} - -/* Decode the Line Number Program (LNP) for the given line_header - structure and CU. The actual information extracted and the type - of structures created from the LNP depends on the value of PST. - - 1. If PST is NULL, then this procedure uses the data from the program - to create all necessary symbol tables, and their linetables. - - 2. If PST is not NULL, this procedure reads the program to determine - the list of files included by the unit represented by PST, and - builds all the associated partial symbol tables. - - COMP_DIR is the compilation directory (DW_AT_comp_dir) or NULL if unknown. - It is used for relative paths in the line table. - NOTE: When processing partial symtabs (pst != NULL), - comp_dir == pst->dirname. - - NOTE: It is important that psymtabs have the same file name (via strcmp) - as the corresponding symtab. Since COMP_DIR is not used in the name of the - symtab we don't use it in the name of the psymtabs we create. - E.g. expand_line_sal requires this when finding psymtabs to expand. - A good testcase for this is mb-inline.exp. - - LOWPC is the lowest address in CU (or 0 if not known). - - Boolean DECODE_MAPPING specifies we need to fully decode .debug_line - for its PC<->lines mapping information. Otherwise only the filename - table is read in. */ - -static void -dwarf_decode_lines (struct line_header *lh, const char *comp_dir, - struct dwarf2_cu *cu, struct partial_symtab *pst, - CORE_ADDR lowpc, int decode_mapping) -{ - struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile; - const int decode_for_pst_p = (pst != NULL); - - if (decode_mapping) - dwarf_decode_lines_1 (lh, cu, decode_for_pst_p, lowpc); - - if (decode_for_pst_p) - { - /* Now that we're done scanning the Line Header Program, we can - create the psymtab of each included file. */ - for (auto &file_entry : lh->file_names ()) - if (file_entry.included_p == 1) - { - gdb::unique_xmalloc_ptr<char> name_holder; - const char *include_name = - psymtab_include_file_name (lh, file_entry, pst, - comp_dir, &name_holder); - if (include_name != NULL) - dwarf2_create_include_psymtab (include_name, pst, objfile); - } - } - else - { - /* Make sure a symtab is created for every file, even files - which contain only variables (i.e. no code with associated - line numbers). */ - buildsym_compunit *builder = cu->get_builder (); - struct compunit_symtab *cust = builder->get_compunit_symtab (); - - for (auto &fe : lh->file_names ()) - { - dwarf2_start_subfile (cu, fe.name, fe.include_dir (lh)); - if (builder->get_current_subfile ()->symtab == NULL) - { - builder->get_current_subfile ()->symtab - = allocate_symtab (cust, - builder->get_current_subfile ()->name); - } - fe.symtab = builder->get_current_subfile ()->symtab; - } - } -} - -/* Start a subfile for DWARF. FILENAME is the name of the file and - DIRNAME the name of the source directory which contains FILENAME - or NULL if not known. - This routine tries to keep line numbers from identical absolute and - relative file names in a common subfile. - - Using the `list' example from the GDB testsuite, which resides in - /srcdir and compiling it with Irix6.2 cc in /compdir using a filename - of /srcdir/list0.c yields the following debugging information for list0.c: - - DW_AT_name: /srcdir/list0.c - DW_AT_comp_dir: /compdir - files.files[0].name: list0.h - files.files[0].dir: /srcdir - files.files[1].name: list0.c - files.files[1].dir: /srcdir - - The line number information for list0.c has to end up in a single - subfile, so that `break /srcdir/list0.c:1' works as expected. - start_subfile will ensure that this happens provided that we pass the - concatenation of files.files[1].dir and files.files[1].name as the - subfile's name. */ - -static void -dwarf2_start_subfile (struct dwarf2_cu *cu, const char *filename, - const char *dirname) -{ - char *copy = NULL; - - /* In order not to lose the line information directory, - we concatenate it to the filename when it makes sense. - Note that the Dwarf3 standard says (speaking of filenames in line - information): ``The directory index is ignored for file names - that represent full path names''. Thus ignoring dirname in the - `else' branch below isn't an issue. */ - - if (!IS_ABSOLUTE_PATH (filename) && dirname != NULL) - { - copy = concat (dirname, SLASH_STRING, filename, (char *)NULL); - filename = copy; - } - - cu->get_builder ()->start_subfile (filename); - - if (copy != NULL) - xfree (copy); -} - -/* Start a symtab for DWARF. NAME, COMP_DIR, LOW_PC are passed to the - buildsym_compunit constructor. */ - -struct compunit_symtab * -dwarf2_cu::start_symtab (const char *name, const char *comp_dir, - CORE_ADDR low_pc) -{ - gdb_assert (m_builder == nullptr); - - m_builder.reset (new struct buildsym_compunit - (per_cu->dwarf2_per_objfile->objfile, - name, comp_dir, language, low_pc)); - - list_in_scope = get_builder ()->get_file_symbols (); - - get_builder ()->record_debugformat ("DWARF 2"); - get_builder ()->record_producer (producer); - - processing_has_namespace_info = false; - - return get_builder ()->get_compunit_symtab (); -} - -static void -var_decode_location (struct attribute *attr, struct symbol *sym, - struct dwarf2_cu *cu) -{ - struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile; - struct comp_unit_head *cu_header = &cu->header; - - /* NOTE drow/2003-01-30: There used to be a comment and some special - code here to turn a symbol with DW_AT_external and a - SYMBOL_VALUE_ADDRESS of 0 into a LOC_UNRESOLVED symbol. This was - necessary for platforms (maybe Alpha, certainly PowerPC GNU/Linux - with some versions of binutils) where shared libraries could have - relocations against symbols in their debug information - the - minimal symbol would have the right address, but the debug info - would not. It's no longer necessary, because we will explicitly - apply relocations when we read in the debug information now. */ - - /* A DW_AT_location attribute with no contents indicates that a - variable has been optimized away. */ - if (attr_form_is_block (attr) && DW_BLOCK (attr)->size == 0) - { - SYMBOL_ACLASS_INDEX (sym) = LOC_OPTIMIZED_OUT; - return; - } - - /* Handle one degenerate form of location expression specially, to - preserve GDB's previous behavior when section offsets are - specified. If this is just a DW_OP_addr, DW_OP_addrx, or - DW_OP_GNU_addr_index then mark this symbol as LOC_STATIC. */ - - if (attr_form_is_block (attr) - && ((DW_BLOCK (attr)->data[0] == DW_OP_addr - && DW_BLOCK (attr)->size == 1 + cu_header->addr_size) - || ((DW_BLOCK (attr)->data[0] == DW_OP_GNU_addr_index - || DW_BLOCK (attr)->data[0] == DW_OP_addrx) - && (DW_BLOCK (attr)->size - == 1 + leb128_size (&DW_BLOCK (attr)->data[1]))))) - { - unsigned int dummy; - - if (DW_BLOCK (attr)->data[0] == DW_OP_addr) - SET_SYMBOL_VALUE_ADDRESS (sym, - read_address (objfile->obfd, - DW_BLOCK (attr)->data + 1, - cu, &dummy)); - else - SET_SYMBOL_VALUE_ADDRESS - (sym, read_addr_index_from_leb128 (cu, DW_BLOCK (attr)->data + 1, - &dummy)); - SYMBOL_ACLASS_INDEX (sym) = LOC_STATIC; - fixup_symbol_section (sym, objfile); - SET_SYMBOL_VALUE_ADDRESS (sym, - SYMBOL_VALUE_ADDRESS (sym) - + ANOFFSET (objfile->section_offsets, - SYMBOL_SECTION (sym))); - return; - } - - /* NOTE drow/2002-01-30: It might be worthwhile to have a static - expression evaluator, and use LOC_COMPUTED only when necessary - (i.e. when the value of a register or memory location is - referenced, or a thread-local block, etc.). Then again, it might - not be worthwhile. I'm assuming that it isn't unless performance - or memory numbers show me otherwise. */ - - dwarf2_symbol_mark_computed (attr, sym, cu, 0); - - if (SYMBOL_COMPUTED_OPS (sym)->location_has_loclist) - cu->has_loclist = true; -} - -/* Given a pointer to a DWARF information entry, figure out if we need - to make a symbol table entry for it, and if so, create a new entry - and return a pointer to it. - If TYPE is NULL, determine symbol type from the die, otherwise - used the passed type. - If SPACE is not NULL, use it to hold the new symbol. If it is - NULL, allocate a new symbol on the objfile's obstack. */ - -static struct symbol * -new_symbol (struct die_info *die, struct type *type, struct dwarf2_cu *cu, - struct symbol *space) -{ - struct dwarf2_per_objfile *dwarf2_per_objfile - = cu->per_cu->dwarf2_per_objfile; - struct objfile *objfile = dwarf2_per_objfile->objfile; - struct gdbarch *gdbarch = get_objfile_arch (objfile); - struct symbol *sym = NULL; - const char *name; - struct attribute *attr = NULL; - struct attribute *attr2 = NULL; - CORE_ADDR baseaddr; - struct pending **list_to_add = NULL; - - int inlined_func = (die->tag == DW_TAG_inlined_subroutine); - - baseaddr = ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile)); - - name = dwarf2_name (die, cu); - if (name) - { - const char *linkagename; - int suppress_add = 0; - - if (space) - sym = space; - else - sym = allocate_symbol (objfile); - OBJSTAT (objfile, n_syms++); - - /* Cache this symbol's name and the name's demangled form (if any). */ - SYMBOL_SET_LANGUAGE (sym, cu->language, &objfile->objfile_obstack); - linkagename = dwarf2_physname (name, die, cu); - SYMBOL_SET_NAMES (sym, linkagename, false, objfile); - - /* Fortran does not have mangling standard and the mangling does differ - between gfortran, iFort etc. */ - if (cu->language == language_fortran - && symbol_get_demangled_name (sym) == NULL) - symbol_set_demangled_name (sym, - dwarf2_full_name (name, die, cu), - NULL); - - /* Default assumptions. - Use the passed type or decode it from the die. */ - SYMBOL_DOMAIN (sym) = VAR_DOMAIN; - SYMBOL_ACLASS_INDEX (sym) = LOC_OPTIMIZED_OUT; - if (type != NULL) - SYMBOL_TYPE (sym) = type; - else - SYMBOL_TYPE (sym) = die_type (die, cu); - attr = dwarf2_attr (die, - inlined_func ? DW_AT_call_line : DW_AT_decl_line, - cu); - if (attr != nullptr) - { - SYMBOL_LINE (sym) = DW_UNSND (attr); - } - - attr = dwarf2_attr (die, - inlined_func ? DW_AT_call_file : DW_AT_decl_file, - cu); - if (attr != nullptr) - { - file_name_index file_index = (file_name_index) DW_UNSND (attr); - struct file_entry *fe; - - if (cu->line_header != NULL) - fe = cu->line_header->file_name_at (file_index); - else - fe = NULL; - - if (fe == NULL) - complaint (_("file index out of range")); - else - symbol_set_symtab (sym, fe->symtab); - } - - switch (die->tag) - { - case DW_TAG_label: - attr = dwarf2_attr (die, DW_AT_low_pc, cu); - if (attr != nullptr) - { - CORE_ADDR addr; - - addr = attr_value_as_address (attr); - addr = gdbarch_adjust_dwarf2_addr (gdbarch, addr + baseaddr); - SET_SYMBOL_VALUE_ADDRESS (sym, addr); - } - SYMBOL_TYPE (sym) = objfile_type (objfile)->builtin_core_addr; - SYMBOL_DOMAIN (sym) = LABEL_DOMAIN; - SYMBOL_ACLASS_INDEX (sym) = LOC_LABEL; - add_symbol_to_list (sym, cu->list_in_scope); - break; - case DW_TAG_subprogram: - /* SYMBOL_BLOCK_VALUE (sym) will be filled in later by - finish_block. */ - SYMBOL_ACLASS_INDEX (sym) = LOC_BLOCK; - attr2 = dwarf2_attr (die, DW_AT_external, cu); - if ((attr2 && (DW_UNSND (attr2) != 0)) - || cu->language == language_ada - || cu->language == language_fortran) - { - /* Subprograms marked external are stored as a global symbol. - Ada and Fortran subprograms, whether marked external or - not, are always stored as a global symbol, because we want - to be able to access them globally. For instance, we want - to be able to break on a nested subprogram without having - to specify the context. */ - list_to_add = cu->get_builder ()->get_global_symbols (); - } - else - { - list_to_add = cu->list_in_scope; - } - break; - case DW_TAG_inlined_subroutine: - /* SYMBOL_BLOCK_VALUE (sym) will be filled in later by - finish_block. */ - SYMBOL_ACLASS_INDEX (sym) = LOC_BLOCK; - SYMBOL_INLINED (sym) = 1; - list_to_add = cu->list_in_scope; - break; - case DW_TAG_template_value_param: - suppress_add = 1; - /* Fall through. */ - case DW_TAG_constant: - case DW_TAG_variable: - case DW_TAG_member: - /* Compilation with minimal debug info may result in - variables with missing type entries. Change the - misleading `void' type to something sensible. */ - if (TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_VOID) - SYMBOL_TYPE (sym) = objfile_type (objfile)->builtin_int; - - attr = dwarf2_attr (die, DW_AT_const_value, cu); - /* In the case of DW_TAG_member, we should only be called for - static const members. */ - if (die->tag == DW_TAG_member) - { - /* dwarf2_add_field uses die_is_declaration, - so we do the same. */ - gdb_assert (die_is_declaration (die, cu)); - gdb_assert (attr); - } - if (attr != nullptr) - { - dwarf2_const_value (attr, sym, cu); - attr2 = dwarf2_attr (die, DW_AT_external, cu); - if (!suppress_add) - { - if (attr2 && (DW_UNSND (attr2) != 0)) - list_to_add = cu->get_builder ()->get_global_symbols (); - else - list_to_add = cu->list_in_scope; - } - break; - } - attr = dwarf2_attr (die, DW_AT_location, cu); - if (attr != nullptr) - { - var_decode_location (attr, sym, cu); - attr2 = dwarf2_attr (die, DW_AT_external, cu); - - /* Fortran explicitly imports any global symbols to the local - scope by DW_TAG_common_block. */ - if (cu->language == language_fortran && die->parent - && die->parent->tag == DW_TAG_common_block) - attr2 = NULL; - - if (SYMBOL_CLASS (sym) == LOC_STATIC - && SYMBOL_VALUE_ADDRESS (sym) == 0 - && !dwarf2_per_objfile->has_section_at_zero) - { - /* When a static variable is eliminated by the linker, - the corresponding debug information is not stripped - out, but the variable address is set to null; - do not add such variables into symbol table. */ - } - else if (attr2 && (DW_UNSND (attr2) != 0)) - { - if (SYMBOL_CLASS (sym) == LOC_STATIC - && (objfile->flags & OBJF_MAINLINE) == 0 - && dwarf2_per_objfile->can_copy) - { - /* A global static variable might be subject to - copy relocation. We first check for a local - minsym, though, because maybe the symbol was - marked hidden, in which case this would not - apply. */ - bound_minimal_symbol found - = (lookup_minimal_symbol_linkage - (sym->linkage_name (), objfile)); - if (found.minsym != nullptr) - sym->maybe_copied = 1; - } - - /* A variable with DW_AT_external is never static, - but it may be block-scoped. */ - list_to_add - = ((cu->list_in_scope - == cu->get_builder ()->get_file_symbols ()) - ? cu->get_builder ()->get_global_symbols () - : cu->list_in_scope); - } - else - list_to_add = cu->list_in_scope; - } - else - { - /* We do not know the address of this symbol. - If it is an external symbol and we have type information - for it, enter the symbol as a LOC_UNRESOLVED symbol. - The address of the variable will then be determined from - the minimal symbol table whenever the variable is - referenced. */ - attr2 = dwarf2_attr (die, DW_AT_external, cu); - - /* Fortran explicitly imports any global symbols to the local - scope by DW_TAG_common_block. */ - if (cu->language == language_fortran && die->parent - && die->parent->tag == DW_TAG_common_block) - { - /* SYMBOL_CLASS doesn't matter here because - read_common_block is going to reset it. */ - if (!suppress_add) - list_to_add = cu->list_in_scope; - } - else if (attr2 && (DW_UNSND (attr2) != 0) - && dwarf2_attr (die, DW_AT_type, cu) != NULL) - { - /* A variable with DW_AT_external is never static, but it - may be block-scoped. */ - list_to_add - = ((cu->list_in_scope - == cu->get_builder ()->get_file_symbols ()) - ? cu->get_builder ()->get_global_symbols () - : cu->list_in_scope); - - SYMBOL_ACLASS_INDEX (sym) = LOC_UNRESOLVED; - } - else if (!die_is_declaration (die, cu)) - { - /* Use the default LOC_OPTIMIZED_OUT class. */ - gdb_assert (SYMBOL_CLASS (sym) == LOC_OPTIMIZED_OUT); - if (!suppress_add) - list_to_add = cu->list_in_scope; - } - } - break; - case DW_TAG_formal_parameter: - { - /* If we are inside a function, mark this as an argument. If - not, we might be looking at an argument to an inlined function - when we do not have enough information to show inlined frames; - pretend it's a local variable in that case so that the user can - still see it. */ - struct context_stack *curr - = cu->get_builder ()->get_current_context_stack (); - if (curr != nullptr && curr->name != nullptr) - SYMBOL_IS_ARGUMENT (sym) = 1; - attr = dwarf2_attr (die, DW_AT_location, cu); - if (attr != nullptr) - { - var_decode_location (attr, sym, cu); - } - attr = dwarf2_attr (die, DW_AT_const_value, cu); - if (attr != nullptr) - { - dwarf2_const_value (attr, sym, cu); - } - - list_to_add = cu->list_in_scope; - } - break; - case DW_TAG_unspecified_parameters: - /* From varargs functions; gdb doesn't seem to have any - interest in this information, so just ignore it for now. - (FIXME?) */ - break; - case DW_TAG_template_type_param: - suppress_add = 1; - /* Fall through. */ - case DW_TAG_class_type: - case DW_TAG_interface_type: - case DW_TAG_structure_type: - case DW_TAG_union_type: - case DW_TAG_set_type: - case DW_TAG_enumeration_type: - SYMBOL_ACLASS_INDEX (sym) = LOC_TYPEDEF; - SYMBOL_DOMAIN (sym) = STRUCT_DOMAIN; - - { - /* NOTE: carlton/2003-11-10: C++ class symbols shouldn't - really ever be static objects: otherwise, if you try - to, say, break of a class's method and you're in a file - which doesn't mention that class, it won't work unless - the check for all static symbols in lookup_symbol_aux - saves you. See the OtherFileClass tests in - gdb.c++/namespace.exp. */ - - if (!suppress_add) - { - buildsym_compunit *builder = cu->get_builder (); - list_to_add - = (cu->list_in_scope == builder->get_file_symbols () - && cu->language == language_cplus - ? builder->get_global_symbols () - : cu->list_in_scope); - - /* The semantics of C++ state that "struct foo { - ... }" also defines a typedef for "foo". */ - if (cu->language == language_cplus - || cu->language == language_ada - || cu->language == language_d - || cu->language == language_rust) - { - /* The symbol's name is already allocated along - with this objfile, so we don't need to - duplicate it for the type. */ - if (TYPE_NAME (SYMBOL_TYPE (sym)) == 0) - TYPE_NAME (SYMBOL_TYPE (sym)) = sym->search_name (); - } - } - } - break; - case DW_TAG_typedef: - SYMBOL_ACLASS_INDEX (sym) = LOC_TYPEDEF; - SYMBOL_DOMAIN (sym) = VAR_DOMAIN; - list_to_add = cu->list_in_scope; - break; - case DW_TAG_base_type: - case DW_TAG_subrange_type: - SYMBOL_ACLASS_INDEX (sym) = LOC_TYPEDEF; - SYMBOL_DOMAIN (sym) = VAR_DOMAIN; - list_to_add = cu->list_in_scope; - break; - case DW_TAG_enumerator: - attr = dwarf2_attr (die, DW_AT_const_value, cu); - if (attr != nullptr) - { - dwarf2_const_value (attr, sym, cu); - } - { - /* NOTE: carlton/2003-11-10: See comment above in the - DW_TAG_class_type, etc. block. */ - - list_to_add - = (cu->list_in_scope == cu->get_builder ()->get_file_symbols () - && cu->language == language_cplus - ? cu->get_builder ()->get_global_symbols () - : cu->list_in_scope); - } - break; - case DW_TAG_imported_declaration: - case DW_TAG_namespace: - SYMBOL_ACLASS_INDEX (sym) = LOC_TYPEDEF; - list_to_add = cu->get_builder ()->get_global_symbols (); - break; - case DW_TAG_module: - SYMBOL_ACLASS_INDEX (sym) = LOC_TYPEDEF; - SYMBOL_DOMAIN (sym) = MODULE_DOMAIN; - list_to_add = cu->get_builder ()->get_global_symbols (); - break; - case DW_TAG_common_block: - SYMBOL_ACLASS_INDEX (sym) = LOC_COMMON_BLOCK; - SYMBOL_DOMAIN (sym) = COMMON_BLOCK_DOMAIN; - add_symbol_to_list (sym, cu->list_in_scope); - break; - default: - /* Not a tag we recognize. Hopefully we aren't processing - trash data, but since we must specifically ignore things - we don't recognize, there is nothing else we should do at - this point. */ - complaint (_("unsupported tag: '%s'"), - dwarf_tag_name (die->tag)); - break; - } - - if (suppress_add) - { - sym->hash_next = objfile->template_symbols; - objfile->template_symbols = sym; - list_to_add = NULL; - } - - if (list_to_add != NULL) - add_symbol_to_list (sym, list_to_add); - - /* For the benefit of old versions of GCC, check for anonymous - namespaces based on the demangled name. */ - if (!cu->processing_has_namespace_info - && cu->language == language_cplus) - cp_scan_for_anonymous_namespaces (cu->get_builder (), sym, objfile); - } - return (sym); -} - -/* Given an attr with a DW_FORM_dataN value in host byte order, - zero-extend it as appropriate for the symbol's type. The DWARF - standard (v4) is not entirely clear about the meaning of using - DW_FORM_dataN for a constant with a signed type, where the type is - wider than the data. The conclusion of a discussion on the DWARF - list was that this is unspecified. We choose to always zero-extend - because that is the interpretation long in use by GCC. */ - -static gdb_byte * -dwarf2_const_value_data (const struct attribute *attr, struct obstack *obstack, - struct dwarf2_cu *cu, LONGEST *value, int bits) -{ - struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile; - enum bfd_endian byte_order = bfd_big_endian (objfile->obfd) ? - BFD_ENDIAN_BIG : BFD_ENDIAN_LITTLE; - LONGEST l = DW_UNSND (attr); - - if (bits < sizeof (*value) * 8) - { - l &= ((LONGEST) 1 << bits) - 1; - *value = l; - } - else if (bits == sizeof (*value) * 8) - *value = l; - else - { - gdb_byte *bytes = (gdb_byte *) obstack_alloc (obstack, bits / 8); - store_unsigned_integer (bytes, bits / 8, byte_order, l); - return bytes; - } - - return NULL; -} - -/* Read a constant value from an attribute. Either set *VALUE, or if - the value does not fit in *VALUE, set *BYTES - either already - allocated on the objfile obstack, or newly allocated on OBSTACK, - or, set *BATON, if we translated the constant to a location - expression. */ - -static void -dwarf2_const_value_attr (const struct attribute *attr, struct type *type, - const char *name, struct obstack *obstack, - struct dwarf2_cu *cu, - LONGEST *value, const gdb_byte **bytes, - struct dwarf2_locexpr_baton **baton) -{ - struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile; - struct comp_unit_head *cu_header = &cu->header; - struct dwarf_block *blk; - enum bfd_endian byte_order = (bfd_big_endian (objfile->obfd) ? - BFD_ENDIAN_BIG : BFD_ENDIAN_LITTLE); - - *value = 0; - *bytes = NULL; - *baton = NULL; - - switch (attr->form) - { - case DW_FORM_addr: - case DW_FORM_addrx: - case DW_FORM_GNU_addr_index: - { - gdb_byte *data; - - if (TYPE_LENGTH (type) != cu_header->addr_size) - dwarf2_const_value_length_mismatch_complaint (name, - cu_header->addr_size, - TYPE_LENGTH (type)); - /* Symbols of this form are reasonably rare, so we just - piggyback on the existing location code rather than writing - a new implementation of symbol_computed_ops. */ - *baton = XOBNEW (obstack, struct dwarf2_locexpr_baton); - (*baton)->per_cu = cu->per_cu; - gdb_assert ((*baton)->per_cu); - - (*baton)->size = 2 + cu_header->addr_size; - data = (gdb_byte *) obstack_alloc (obstack, (*baton)->size); - (*baton)->data = data; - - data[0] = DW_OP_addr; - store_unsigned_integer (&data[1], cu_header->addr_size, - byte_order, DW_ADDR (attr)); - data[cu_header->addr_size + 1] = DW_OP_stack_value; - } - break; - case DW_FORM_string: - case DW_FORM_strp: - case DW_FORM_strx: - case DW_FORM_GNU_str_index: - case DW_FORM_GNU_strp_alt: - /* DW_STRING is already allocated on the objfile obstack, point - directly to it. */ - *bytes = (const gdb_byte *) DW_STRING (attr); - break; - case DW_FORM_block1: - case DW_FORM_block2: - case DW_FORM_block4: - case DW_FORM_block: - case DW_FORM_exprloc: - case DW_FORM_data16: - blk = DW_BLOCK (attr); - if (TYPE_LENGTH (type) != blk->size) - dwarf2_const_value_length_mismatch_complaint (name, blk->size, - TYPE_LENGTH (type)); - *bytes = blk->data; - break; - - /* The DW_AT_const_value attributes are supposed to carry the - symbol's value "represented as it would be on the target - architecture." By the time we get here, it's already been - converted to host endianness, so we just need to sign- or - zero-extend it as appropriate. */ - case DW_FORM_data1: - *bytes = dwarf2_const_value_data (attr, obstack, cu, value, 8); - break; - case DW_FORM_data2: - *bytes = dwarf2_const_value_data (attr, obstack, cu, value, 16); - break; - case DW_FORM_data4: - *bytes = dwarf2_const_value_data (attr, obstack, cu, value, 32); - break; - case DW_FORM_data8: - *bytes = dwarf2_const_value_data (attr, obstack, cu, value, 64); - break; - - case DW_FORM_sdata: - case DW_FORM_implicit_const: - *value = DW_SND (attr); - break; - - case DW_FORM_udata: - *value = DW_UNSND (attr); - break; - - default: - complaint (_("unsupported const value attribute form: '%s'"), - dwarf_form_name (attr->form)); - *value = 0; - break; - } -} - - -/* Copy constant value from an attribute to a symbol. */ - -static void -dwarf2_const_value (const struct attribute *attr, struct symbol *sym, - struct dwarf2_cu *cu) -{ - struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile; - LONGEST value; - const gdb_byte *bytes; - struct dwarf2_locexpr_baton *baton; - - dwarf2_const_value_attr (attr, SYMBOL_TYPE (sym), - sym->print_name (), - &objfile->objfile_obstack, cu, - &value, &bytes, &baton); - - if (baton != NULL) - { - SYMBOL_LOCATION_BATON (sym) = baton; - SYMBOL_ACLASS_INDEX (sym) = dwarf2_locexpr_index; - } - else if (bytes != NULL) - { - SYMBOL_VALUE_BYTES (sym) = bytes; - SYMBOL_ACLASS_INDEX (sym) = LOC_CONST_BYTES; - } - else - { - SYMBOL_VALUE (sym) = value; - SYMBOL_ACLASS_INDEX (sym) = LOC_CONST; - } -} - -/* Return the type of the die in question using its DW_AT_type attribute. */ - -static struct type * -die_type (struct die_info *die, struct dwarf2_cu *cu) -{ - struct attribute *type_attr; - - type_attr = dwarf2_attr (die, DW_AT_type, cu); - if (!type_attr) - { - struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile; - /* A missing DW_AT_type represents a void type. */ - return objfile_type (objfile)->builtin_void; - } - - return lookup_die_type (die, type_attr, cu); -} - -/* True iff CU's producer generates GNAT Ada auxiliary information - that allows to find parallel types through that information instead - of having to do expensive parallel lookups by type name. */ - -static int -need_gnat_info (struct dwarf2_cu *cu) -{ - /* Assume that the Ada compiler was GNAT, which always produces - the auxiliary information. */ - return (cu->language == language_ada); -} - -/* Return the auxiliary type of the die in question using its - DW_AT_GNAT_descriptive_type attribute. Returns NULL if the - attribute is not present. */ - -static struct type * -die_descriptive_type (struct die_info *die, struct dwarf2_cu *cu) -{ - struct attribute *type_attr; - - type_attr = dwarf2_attr (die, DW_AT_GNAT_descriptive_type, cu); - if (!type_attr) - return NULL; - - return lookup_die_type (die, type_attr, cu); -} - -/* If DIE has a descriptive_type attribute, then set the TYPE's - descriptive type accordingly. */ - -static void -set_descriptive_type (struct type *type, struct die_info *die, - struct dwarf2_cu *cu) -{ - struct type *descriptive_type = die_descriptive_type (die, cu); - - if (descriptive_type) - { - ALLOCATE_GNAT_AUX_TYPE (type); - TYPE_DESCRIPTIVE_TYPE (type) = descriptive_type; - } -} - -/* Return the containing type of the die in question using its - DW_AT_containing_type attribute. */ - -static struct type * -die_containing_type (struct die_info *die, struct dwarf2_cu *cu) -{ - struct attribute *type_attr; - struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile; - - type_attr = dwarf2_attr (die, DW_AT_containing_type, cu); - if (!type_attr) - error (_("Dwarf Error: Problem turning containing type into gdb type " - "[in module %s]"), objfile_name (objfile)); - - return lookup_die_type (die, type_attr, cu); -} - -/* Return an error marker type to use for the ill formed type in DIE/CU. */ - -static struct type * -build_error_marker_type (struct dwarf2_cu *cu, struct die_info *die) -{ - struct dwarf2_per_objfile *dwarf2_per_objfile - = cu->per_cu->dwarf2_per_objfile; - struct objfile *objfile = dwarf2_per_objfile->objfile; - char *saved; - - std::string message - = string_printf (_("<unknown type in %s, CU %s, DIE %s>"), - objfile_name (objfile), - sect_offset_str (cu->header.sect_off), - sect_offset_str (die->sect_off)); - saved = obstack_strdup (&objfile->objfile_obstack, message); - - return init_type (objfile, TYPE_CODE_ERROR, 0, saved); -} - -/* Look up the type of DIE in CU using its type attribute ATTR. - ATTR must be one of: DW_AT_type, DW_AT_GNAT_descriptive_type, - DW_AT_containing_type. - If there is no type substitute an error marker. */ - -static struct type * -lookup_die_type (struct die_info *die, const struct attribute *attr, - struct dwarf2_cu *cu) -{ - struct dwarf2_per_objfile *dwarf2_per_objfile - = cu->per_cu->dwarf2_per_objfile; - struct objfile *objfile = dwarf2_per_objfile->objfile; - struct type *this_type; - - gdb_assert (attr->name == DW_AT_type - || attr->name == DW_AT_GNAT_descriptive_type - || attr->name == DW_AT_containing_type); - - /* First see if we have it cached. */ - - if (attr->form == DW_FORM_GNU_ref_alt) - { - struct dwarf2_per_cu_data *per_cu; - sect_offset sect_off = dwarf2_get_ref_die_offset (attr); - - per_cu = dwarf2_find_containing_comp_unit (sect_off, 1, - dwarf2_per_objfile); - this_type = get_die_type_at_offset (sect_off, per_cu); - } - else if (attr_form_is_ref (attr)) - { - sect_offset sect_off = dwarf2_get_ref_die_offset (attr); - - this_type = get_die_type_at_offset (sect_off, cu->per_cu); - } - else if (attr->form == DW_FORM_ref_sig8) - { - ULONGEST signature = DW_SIGNATURE (attr); - - return get_signatured_type (die, signature, cu); - } - else - { - complaint (_("Dwarf Error: Bad type attribute %s in DIE" - " at %s [in module %s]"), - dwarf_attr_name (attr->name), sect_offset_str (die->sect_off), - objfile_name (objfile)); - return build_error_marker_type (cu, die); - } - - /* If not cached we need to read it in. */ - - if (this_type == NULL) - { - struct die_info *type_die = NULL; - struct dwarf2_cu *type_cu = cu; - - if (attr_form_is_ref (attr)) - type_die = follow_die_ref (die, attr, &type_cu); - if (type_die == NULL) - return build_error_marker_type (cu, die); - /* If we find the type now, it's probably because the type came - from an inter-CU reference and the type's CU got expanded before - ours. */ - this_type = read_type_die (type_die, type_cu); - } - - /* If we still don't have a type use an error marker. */ - - if (this_type == NULL) - return build_error_marker_type (cu, die); - - return this_type; -} - -/* Return the type in DIE, CU. - Returns NULL for invalid types. - - This first does a lookup in die_type_hash, - and only reads the die in if necessary. - - NOTE: This can be called when reading in partial or full symbols. */ - -static struct type * -read_type_die (struct die_info *die, struct dwarf2_cu *cu) -{ - struct type *this_type; - - this_type = get_die_type (die, cu); - if (this_type) - return this_type; - - return read_type_die_1 (die, cu); -} - -/* Read the type in DIE, CU. - Returns NULL for invalid types. */ - -static struct type * -read_type_die_1 (struct die_info *die, struct dwarf2_cu *cu) -{ - struct type *this_type = NULL; - - switch (die->tag) - { - case DW_TAG_class_type: - case DW_TAG_interface_type: - case DW_TAG_structure_type: - case DW_TAG_union_type: - this_type = read_structure_type (die, cu); - break; - case DW_TAG_enumeration_type: - this_type = read_enumeration_type (die, cu); - break; - case DW_TAG_subprogram: - case DW_TAG_subroutine_type: - case DW_TAG_inlined_subroutine: - this_type = read_subroutine_type (die, cu); - break; - case DW_TAG_array_type: - this_type = read_array_type (die, cu); - break; - case DW_TAG_set_type: - this_type = read_set_type (die, cu); - break; - case DW_TAG_pointer_type: - this_type = read_tag_pointer_type (die, cu); - break; - case DW_TAG_ptr_to_member_type: - this_type = read_tag_ptr_to_member_type (die, cu); - break; - case DW_TAG_reference_type: - this_type = read_tag_reference_type (die, cu, TYPE_CODE_REF); - break; - case DW_TAG_rvalue_reference_type: - this_type = read_tag_reference_type (die, cu, TYPE_CODE_RVALUE_REF); - break; - case DW_TAG_const_type: - this_type = read_tag_const_type (die, cu); - break; - case DW_TAG_volatile_type: - this_type = read_tag_volatile_type (die, cu); - break; - case DW_TAG_restrict_type: - this_type = read_tag_restrict_type (die, cu); - break; - case DW_TAG_string_type: - this_type = read_tag_string_type (die, cu); - break; - case DW_TAG_typedef: - this_type = read_typedef (die, cu); - break; - case DW_TAG_subrange_type: - this_type = read_subrange_type (die, cu); - break; - case DW_TAG_base_type: - this_type = read_base_type (die, cu); - break; - case DW_TAG_unspecified_type: - this_type = read_unspecified_type (die, cu); - break; - case DW_TAG_namespace: - this_type = read_namespace_type (die, cu); - break; - case DW_TAG_module: - this_type = read_module_type (die, cu); - break; - case DW_TAG_atomic_type: - this_type = read_tag_atomic_type (die, cu); - break; - default: - complaint (_("unexpected tag in read_type_die: '%s'"), - dwarf_tag_name (die->tag)); - break; - } - - return this_type; -} - -/* See if we can figure out if the class lives in a namespace. We do - this by looking for a member function; its demangled name will - contain namespace info, if there is any. - Return the computed name or NULL. - Space for the result is allocated on the objfile's obstack. - This is the full-die version of guess_partial_die_structure_name. - In this case we know DIE has no useful parent. */ - -static char * -guess_full_die_structure_name (struct die_info *die, struct dwarf2_cu *cu) -{ - struct die_info *spec_die; - struct dwarf2_cu *spec_cu; - struct die_info *child; - struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile; - - spec_cu = cu; - spec_die = die_specification (die, &spec_cu); - if (spec_die != NULL) - { - die = spec_die; - cu = spec_cu; - } - - for (child = die->child; - child != NULL; - child = child->sibling) - { - if (child->tag == DW_TAG_subprogram) - { - const char *linkage_name = dw2_linkage_name (child, cu); - - if (linkage_name != NULL) - { - char *actual_name - = language_class_name_from_physname (cu->language_defn, - linkage_name); - char *name = NULL; - - if (actual_name != NULL) - { - const char *die_name = dwarf2_name (die, cu); - - if (die_name != NULL - && strcmp (die_name, actual_name) != 0) - { - /* Strip off the class name from the full name. - We want the prefix. */ - int die_name_len = strlen (die_name); - int actual_name_len = strlen (actual_name); - - /* Test for '::' as a sanity check. */ - if (actual_name_len > die_name_len + 2 - && actual_name[actual_name_len - - die_name_len - 1] == ':') - name = obstack_strndup ( - &objfile->per_bfd->storage_obstack, - actual_name, actual_name_len - die_name_len - 2); - } - } - xfree (actual_name); - return name; - } - } - } - - return NULL; -} - -/* GCC might emit a nameless typedef that has a linkage name. Determine the - prefix part in such case. See - http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47510. */ - -static const char * -anonymous_struct_prefix (struct die_info *die, struct dwarf2_cu *cu) -{ - struct attribute *attr; - const char *base; - - if (die->tag != DW_TAG_class_type && die->tag != DW_TAG_interface_type - && die->tag != DW_TAG_structure_type && die->tag != DW_TAG_union_type) - return NULL; - - if (dwarf2_string_attr (die, DW_AT_name, cu) != NULL) - return NULL; - - attr = dw2_linkage_name_attr (die, cu); - if (attr == NULL || DW_STRING (attr) == NULL) - return NULL; - - /* dwarf2_name had to be already called. */ - gdb_assert (DW_STRING_IS_CANONICAL (attr)); - - /* Strip the base name, keep any leading namespaces/classes. */ - base = strrchr (DW_STRING (attr), ':'); - if (base == NULL || base == DW_STRING (attr) || base[-1] != ':') - return ""; - - struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile; - return obstack_strndup (&objfile->per_bfd->storage_obstack, - DW_STRING (attr), - &base[-1] - DW_STRING (attr)); -} - -/* Return the name of the namespace/class that DIE is defined within, - or "" if we can't tell. The caller should not xfree the result. - - For example, if we're within the method foo() in the following - code: - - namespace N { - class C { - void foo () { - } - }; - } - - then determine_prefix on foo's die will return "N::C". */ - -static const char * -determine_prefix (struct die_info *die, struct dwarf2_cu *cu) -{ - struct dwarf2_per_objfile *dwarf2_per_objfile - = cu->per_cu->dwarf2_per_objfile; - struct die_info *parent, *spec_die; - struct dwarf2_cu *spec_cu; - struct type *parent_type; - const char *retval; - - if (cu->language != language_cplus - && cu->language != language_fortran && cu->language != language_d - && cu->language != language_rust) - return ""; - - retval = anonymous_struct_prefix (die, cu); - if (retval) - return retval; - - /* We have to be careful in the presence of DW_AT_specification. - For example, with GCC 3.4, given the code - - namespace N { - void foo() { - // Definition of N::foo. - } - } - - then we'll have a tree of DIEs like this: - - 1: DW_TAG_compile_unit - 2: DW_TAG_namespace // N - 3: DW_TAG_subprogram // declaration of N::foo - 4: DW_TAG_subprogram // definition of N::foo - DW_AT_specification // refers to die #3 - - Thus, when processing die #4, we have to pretend that we're in - the context of its DW_AT_specification, namely the contex of die - #3. */ - spec_cu = cu; - spec_die = die_specification (die, &spec_cu); - if (spec_die == NULL) - parent = die->parent; - else - { - parent = spec_die->parent; - cu = spec_cu; - } - - if (parent == NULL) - return ""; - else if (parent->building_fullname) - { - const char *name; - const char *parent_name; - - /* It has been seen on RealView 2.2 built binaries, - DW_TAG_template_type_param types actually _defined_ as - children of the parent class: - - enum E {}; - template class <class Enum> Class{}; - Class<enum E> class_e; - - 1: DW_TAG_class_type (Class) - 2: DW_TAG_enumeration_type (E) - 3: DW_TAG_enumerator (enum1:0) - 3: DW_TAG_enumerator (enum2:1) - ... - 2: DW_TAG_template_type_param - DW_AT_type DW_FORM_ref_udata (E) - - Besides being broken debug info, it can put GDB into an - infinite loop. Consider: - - When we're building the full name for Class<E>, we'll start - at Class, and go look over its template type parameters, - finding E. We'll then try to build the full name of E, and - reach here. We're now trying to build the full name of E, - and look over the parent DIE for containing scope. In the - broken case, if we followed the parent DIE of E, we'd again - find Class, and once again go look at its template type - arguments, etc., etc. Simply don't consider such parent die - as source-level parent of this die (it can't be, the language - doesn't allow it), and break the loop here. */ - name = dwarf2_name (die, cu); - parent_name = dwarf2_name (parent, cu); - complaint (_("template param type '%s' defined within parent '%s'"), - name ? name : "<unknown>", - parent_name ? parent_name : "<unknown>"); - return ""; - } - else - switch (parent->tag) - { - case DW_TAG_namespace: - parent_type = read_type_die (parent, cu); - /* GCC 4.0 and 4.1 had a bug (PR c++/28460) where they generated bogus - DW_TAG_namespace DIEs with a name of "::" for the global namespace. - Work around this problem here. */ - if (cu->language == language_cplus - && strcmp (TYPE_NAME (parent_type), "::") == 0) - return ""; - /* We give a name to even anonymous namespaces. */ - return TYPE_NAME (parent_type); - case DW_TAG_class_type: - case DW_TAG_interface_type: - case DW_TAG_structure_type: - case DW_TAG_union_type: - case DW_TAG_module: - parent_type = read_type_die (parent, cu); - if (TYPE_NAME (parent_type) != NULL) - return TYPE_NAME (parent_type); - else - /* An anonymous structure is only allowed non-static data - members; no typedefs, no member functions, et cetera. - So it does not need a prefix. */ - return ""; - case DW_TAG_compile_unit: - case DW_TAG_partial_unit: - /* gcc-4.5 -gdwarf-4 can drop the enclosing namespace. Cope. */ - if (cu->language == language_cplus - && !dwarf2_per_objfile->types.empty () - && die->child != NULL - && (die->tag == DW_TAG_class_type - || die->tag == DW_TAG_structure_type - || die->tag == DW_TAG_union_type)) - { - char *name = guess_full_die_structure_name (die, cu); - if (name != NULL) - return name; - } - return ""; - case DW_TAG_subprogram: - /* Nested subroutines in Fortran get a prefix with the name - of the parent's subroutine. */ - if (cu->language == language_fortran) - { - if ((die->tag == DW_TAG_subprogram) - && (dwarf2_name (parent, cu) != NULL)) - return dwarf2_name (parent, cu); - } - return determine_prefix (parent, cu); - case DW_TAG_enumeration_type: - parent_type = read_type_die (parent, cu); - if (TYPE_DECLARED_CLASS (parent_type)) - { - if (TYPE_NAME (parent_type) != NULL) - return TYPE_NAME (parent_type); - return ""; - } - /* Fall through. */ - default: - return determine_prefix (parent, cu); - } -} - -/* Return a newly-allocated string formed by concatenating PREFIX and SUFFIX - with appropriate separator. If PREFIX or SUFFIX is NULL or empty, then - simply copy the SUFFIX or PREFIX, respectively. If OBS is non-null, perform - an obconcat, otherwise allocate storage for the result. The CU argument is - used to determine the language and hence, the appropriate separator. */ - -#define MAX_SEP_LEN 7 /* strlen ("__") + strlen ("_MOD_") */ - -static char * -typename_concat (struct obstack *obs, const char *prefix, const char *suffix, - int physname, struct dwarf2_cu *cu) -{ - const char *lead = ""; - const char *sep; - - if (suffix == NULL || suffix[0] == '\0' - || prefix == NULL || prefix[0] == '\0') - sep = ""; - else if (cu->language == language_d) - { - /* For D, the 'main' function could be defined in any module, but it - should never be prefixed. */ - if (strcmp (suffix, "D main") == 0) - { - prefix = ""; - sep = ""; - } - else - sep = "."; - } - else if (cu->language == language_fortran && physname) - { - /* This is gfortran specific mangling. Normally DW_AT_linkage_name or - DW_AT_MIPS_linkage_name is preferred and used instead. */ - - lead = "__"; - sep = "_MOD_"; - } - else - sep = "::"; - - if (prefix == NULL) - prefix = ""; - if (suffix == NULL) - suffix = ""; - - if (obs == NULL) - { - char *retval - = ((char *) - xmalloc (strlen (prefix) + MAX_SEP_LEN + strlen (suffix) + 1)); - - strcpy (retval, lead); - strcat (retval, prefix); - strcat (retval, sep); - strcat (retval, suffix); - return retval; - } - else - { - /* We have an obstack. */ - return obconcat (obs, lead, prefix, sep, suffix, (char *) NULL); - } -} - -/* Return sibling of die, NULL if no sibling. */ - -static struct die_info * -sibling_die (struct die_info *die) -{ - return die->sibling; -} - -/* Get name of a die, return NULL if not found. */ - -static const char * -dwarf2_canonicalize_name (const char *name, struct dwarf2_cu *cu, - struct obstack *obstack) -{ - if (name && cu->language == language_cplus) - { - std::string canon_name = cp_canonicalize_string (name); - - if (!canon_name.empty ()) - { - if (canon_name != name) - name = obstack_strdup (obstack, canon_name); - } - } - - return name; -} - -/* Get name of a die, return NULL if not found. - Anonymous namespaces are converted to their magic string. */ - -static const char * -dwarf2_name (struct die_info *die, struct dwarf2_cu *cu) -{ - struct attribute *attr; - struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile; - - attr = dwarf2_attr (die, DW_AT_name, cu); - if ((!attr || !DW_STRING (attr)) - && die->tag != DW_TAG_namespace - && die->tag != DW_TAG_class_type - && die->tag != DW_TAG_interface_type - && die->tag != DW_TAG_structure_type - && die->tag != DW_TAG_union_type) - return NULL; - - switch (die->tag) - { - case DW_TAG_compile_unit: - case DW_TAG_partial_unit: - /* Compilation units have a DW_AT_name that is a filename, not - a source language identifier. */ - case DW_TAG_enumeration_type: - case DW_TAG_enumerator: - /* These tags always have simple identifiers already; no need - to canonicalize them. */ - return DW_STRING (attr); - - case DW_TAG_namespace: - if (attr != NULL && DW_STRING (attr) != NULL) - return DW_STRING (attr); - return CP_ANONYMOUS_NAMESPACE_STR; - - case DW_TAG_class_type: - case DW_TAG_interface_type: - case DW_TAG_structure_type: - case DW_TAG_union_type: - /* Some GCC versions emit spurious DW_AT_name attributes for unnamed - structures or unions. These were of the form "._%d" in GCC 4.1, - or simply "<anonymous struct>" or "<anonymous union>" in GCC 4.3 - and GCC 4.4. We work around this problem by ignoring these. */ - if (attr && DW_STRING (attr) - && (startswith (DW_STRING (attr), "._") - || startswith (DW_STRING (attr), "<anonymous"))) - return NULL; - - /* GCC might emit a nameless typedef that has a linkage name. See - http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47510. */ - if (!attr || DW_STRING (attr) == NULL) - { - char *demangled = NULL; - - attr = dw2_linkage_name_attr (die, cu); - if (attr == NULL || DW_STRING (attr) == NULL) - return NULL; - - /* Avoid demangling DW_STRING (attr) the second time on a second - call for the same DIE. */ - if (!DW_STRING_IS_CANONICAL (attr)) - demangled = gdb_demangle (DW_STRING (attr), DMGL_TYPES); - - if (demangled) - { - const char *base; - - /* FIXME: we already did this for the partial symbol... */ - DW_STRING (attr) - = obstack_strdup (&objfile->per_bfd->storage_obstack, - demangled); - DW_STRING_IS_CANONICAL (attr) = 1; - xfree (demangled); - - /* Strip any leading namespaces/classes, keep only the base name. - DW_AT_name for named DIEs does not contain the prefixes. */ - base = strrchr (DW_STRING (attr), ':'); - if (base && base > DW_STRING (attr) && base[-1] == ':') - return &base[1]; - else - return DW_STRING (attr); - } - } - break; - - default: - break; - } - - if (!DW_STRING_IS_CANONICAL (attr)) - { - DW_STRING (attr) - = dwarf2_canonicalize_name (DW_STRING (attr), cu, - &objfile->per_bfd->storage_obstack); - DW_STRING_IS_CANONICAL (attr) = 1; - } - return DW_STRING (attr); -} - -/* Return the die that this die in an extension of, or NULL if there - is none. *EXT_CU is the CU containing DIE on input, and the CU - containing the return value on output. */ - -static struct die_info * -dwarf2_extension (struct die_info *die, struct dwarf2_cu **ext_cu) -{ - struct attribute *attr; - - attr = dwarf2_attr (die, DW_AT_extension, *ext_cu); - if (attr == NULL) - return NULL; - - return follow_die_ref (die, attr, ext_cu); -} - -/* A convenience function that returns an "unknown" DWARF name, - including the value of V. STR is the name of the entity being - printed, e.g., "TAG". */ - -static const char * -dwarf_unknown (const char *str, unsigned v) -{ - char *cell = get_print_cell (); - xsnprintf (cell, PRINT_CELL_SIZE, "DW_%s_<unknown: %u>", str, v); - return cell; -} - -/* Convert a DIE tag into its string name. */ - -static const char * -dwarf_tag_name (unsigned tag) -{ - const char *name = get_DW_TAG_name (tag); - - if (name == NULL) - return dwarf_unknown ("TAG", tag); - - return name; -} - -/* Convert a DWARF attribute code into its string name. */ - -static const char * -dwarf_attr_name (unsigned attr) -{ - const char *name; - -#ifdef MIPS /* collides with DW_AT_HP_block_index */ - if (attr == DW_AT_MIPS_fde) - return "DW_AT_MIPS_fde"; -#else - if (attr == DW_AT_HP_block_index) - return "DW_AT_HP_block_index"; -#endif - - name = get_DW_AT_name (attr); - - if (name == NULL) - return dwarf_unknown ("AT", attr); - - return name; -} - -/* Convert a unit type to corresponding DW_UT name. */ - -static const char * -dwarf_unit_type_name (int unit_type) { - switch (unit_type) - { - case 0x01: - return "DW_UT_compile (0x01)"; - case 0x02: - return "DW_UT_type (0x02)"; - case 0x03: - return "DW_UT_partial (0x03)"; - case 0x04: - return "DW_UT_skeleton (0x04)"; - case 0x05: - return "DW_UT_split_compile (0x05)"; - case 0x06: - return "DW_UT_split_type (0x06)"; - case 0x80: - return "DW_UT_lo_user (0x80)"; - case 0xff: - return "DW_UT_hi_user (0xff)"; - default: - return nullptr; - } -} - -/* Convert a DWARF value form code into its string name. */ - -static const char * -dwarf_form_name (unsigned form) -{ - const char *name = get_DW_FORM_name (form); - - if (name == NULL) - return dwarf_unknown ("FORM", form); - - return name; -} - -static const char * -dwarf_bool_name (unsigned mybool) -{ - if (mybool) - return "TRUE"; - else - return "FALSE"; -} - -/* Convert a DWARF type code into its string name. */ - -static const char * -dwarf_type_encoding_name (unsigned enc) -{ - const char *name = get_DW_ATE_name (enc); - - if (name == NULL) - return dwarf_unknown ("ATE", enc); - - return name; -} - -static void -dump_die_shallow (struct ui_file *f, int indent, struct die_info *die) -{ - unsigned int i; - - print_spaces (indent, f); - fprintf_unfiltered (f, "Die: %s (abbrev %d, offset %s)\n", - dwarf_tag_name (die->tag), die->abbrev, - sect_offset_str (die->sect_off)); - - if (die->parent != NULL) - { - print_spaces (indent, f); - fprintf_unfiltered (f, " parent at offset: %s\n", - sect_offset_str (die->parent->sect_off)); - } - - print_spaces (indent, f); - fprintf_unfiltered (f, " has children: %s\n", - dwarf_bool_name (die->child != NULL)); - - print_spaces (indent, f); - fprintf_unfiltered (f, " attributes:\n"); - - for (i = 0; i < die->num_attrs; ++i) - { - print_spaces (indent, f); - fprintf_unfiltered (f, " %s (%s) ", - dwarf_attr_name (die->attrs[i].name), - dwarf_form_name (die->attrs[i].form)); - - switch (die->attrs[i].form) - { - case DW_FORM_addr: - case DW_FORM_addrx: - case DW_FORM_GNU_addr_index: - fprintf_unfiltered (f, "address: "); - fputs_filtered (hex_string (DW_ADDR (&die->attrs[i])), f); - break; - case DW_FORM_block2: - case DW_FORM_block4: - case DW_FORM_block: - case DW_FORM_block1: - fprintf_unfiltered (f, "block: size %s", - pulongest (DW_BLOCK (&die->attrs[i])->size)); - break; - case DW_FORM_exprloc: - fprintf_unfiltered (f, "expression: size %s", - pulongest (DW_BLOCK (&die->attrs[i])->size)); - break; - case DW_FORM_data16: - fprintf_unfiltered (f, "constant of 16 bytes"); - break; - case DW_FORM_ref_addr: - fprintf_unfiltered (f, "ref address: "); - fputs_filtered (hex_string (DW_UNSND (&die->attrs[i])), f); - break; - case DW_FORM_GNU_ref_alt: - fprintf_unfiltered (f, "alt ref address: "); - fputs_filtered (hex_string (DW_UNSND (&die->attrs[i])), f); - break; - case DW_FORM_ref1: - case DW_FORM_ref2: - case DW_FORM_ref4: - case DW_FORM_ref8: - case DW_FORM_ref_udata: - fprintf_unfiltered (f, "constant ref: 0x%lx (adjusted)", - (long) (DW_UNSND (&die->attrs[i]))); - break; - case DW_FORM_data1: - case DW_FORM_data2: - case DW_FORM_data4: - case DW_FORM_data8: - case DW_FORM_udata: - case DW_FORM_sdata: - fprintf_unfiltered (f, "constant: %s", - pulongest (DW_UNSND (&die->attrs[i]))); - break; - case DW_FORM_sec_offset: - fprintf_unfiltered (f, "section offset: %s", - pulongest (DW_UNSND (&die->attrs[i]))); - break; - case DW_FORM_ref_sig8: - fprintf_unfiltered (f, "signature: %s", - hex_string (DW_SIGNATURE (&die->attrs[i]))); - break; - case DW_FORM_string: - case DW_FORM_strp: - case DW_FORM_line_strp: - case DW_FORM_strx: - case DW_FORM_GNU_str_index: - case DW_FORM_GNU_strp_alt: - fprintf_unfiltered (f, "string: \"%s\" (%s canonicalized)", - DW_STRING (&die->attrs[i]) - ? DW_STRING (&die->attrs[i]) : "", - DW_STRING_IS_CANONICAL (&die->attrs[i]) ? "is" : "not"); - break; - case DW_FORM_flag: - if (DW_UNSND (&die->attrs[i])) - fprintf_unfiltered (f, "flag: TRUE"); - else - fprintf_unfiltered (f, "flag: FALSE"); - break; - case DW_FORM_flag_present: - fprintf_unfiltered (f, "flag: TRUE"); - break; - case DW_FORM_indirect: - /* The reader will have reduced the indirect form to - the "base form" so this form should not occur. */ - fprintf_unfiltered (f, - "unexpected attribute form: DW_FORM_indirect"); - break; - case DW_FORM_implicit_const: - fprintf_unfiltered (f, "constant: %s", - plongest (DW_SND (&die->attrs[i]))); - break; - default: - fprintf_unfiltered (f, "unsupported attribute form: %d.", - die->attrs[i].form); - break; - } - fprintf_unfiltered (f, "\n"); - } -} - -static void -dump_die_for_error (struct die_info *die) -{ - dump_die_shallow (gdb_stderr, 0, die); -} - -static void -dump_die_1 (struct ui_file *f, int level, int max_level, struct die_info *die) -{ - int indent = level * 4; - - gdb_assert (die != NULL); - - if (level >= max_level) - return; - - dump_die_shallow (f, indent, die); - - if (die->child != NULL) - { - print_spaces (indent, f); - fprintf_unfiltered (f, " Children:"); - if (level + 1 < max_level) - { - fprintf_unfiltered (f, "\n"); - dump_die_1 (f, level + 1, max_level, die->child); - } - else - { - fprintf_unfiltered (f, - " [not printed, max nesting level reached]\n"); - } - } - - if (die->sibling != NULL && level > 0) - { - dump_die_1 (f, level, max_level, die->sibling); - } -} - -/* This is called from the pdie macro in gdbinit.in. - It's not static so gcc will keep a copy callable from gdb. */ - -void -dump_die (struct die_info *die, int max_level) -{ - dump_die_1 (gdb_stdlog, 0, max_level, die); -} - -static void -store_in_ref_table (struct die_info *die, struct dwarf2_cu *cu) -{ - void **slot; - - slot = htab_find_slot_with_hash (cu->die_hash, die, - to_underlying (die->sect_off), - INSERT); - - *slot = die; -} - -/* Return DIE offset of ATTR. Return 0 with complaint if ATTR is not of the - required kind. */ - -static sect_offset -dwarf2_get_ref_die_offset (const struct attribute *attr) -{ - if (attr_form_is_ref (attr)) - return (sect_offset) DW_UNSND (attr); - - complaint (_("unsupported die ref attribute form: '%s'"), - dwarf_form_name (attr->form)); - return {}; -} - -/* Return the constant value held by ATTR. Return DEFAULT_VALUE if - * the value held by the attribute is not constant. */ - -static LONGEST -dwarf2_get_attr_constant_value (const struct attribute *attr, int default_value) -{ - if (attr->form == DW_FORM_sdata || attr->form == DW_FORM_implicit_const) - return DW_SND (attr); - else if (attr->form == DW_FORM_udata - || attr->form == DW_FORM_data1 - || attr->form == DW_FORM_data2 - || attr->form == DW_FORM_data4 - || attr->form == DW_FORM_data8) - return DW_UNSND (attr); - else - { - /* For DW_FORM_data16 see attr_form_is_constant. */ - complaint (_("Attribute value is not a constant (%s)"), - dwarf_form_name (attr->form)); - return default_value; - } -} - -/* Follow reference or signature attribute ATTR of SRC_DIE. - On entry *REF_CU is the CU of SRC_DIE. - On exit *REF_CU is the CU of the result. */ - -static struct die_info * -follow_die_ref_or_sig (struct die_info *src_die, const struct attribute *attr, - struct dwarf2_cu **ref_cu) -{ - struct die_info *die; - - if (attr_form_is_ref (attr)) - die = follow_die_ref (src_die, attr, ref_cu); - else if (attr->form == DW_FORM_ref_sig8) - die = follow_die_sig (src_die, attr, ref_cu); - else - { - dump_die_for_error (src_die); - error (_("Dwarf Error: Expected reference attribute [in module %s]"), - objfile_name ((*ref_cu)->per_cu->dwarf2_per_objfile->objfile)); - } - - return die; -} - -/* Follow reference OFFSET. - On entry *REF_CU is the CU of the source die referencing OFFSET. - On exit *REF_CU is the CU of the result. - Returns NULL if OFFSET is invalid. */ - -static struct die_info * -follow_die_offset (sect_offset sect_off, int offset_in_dwz, - struct dwarf2_cu **ref_cu) -{ - struct die_info temp_die; - struct dwarf2_cu *target_cu, *cu = *ref_cu; - struct dwarf2_per_objfile *dwarf2_per_objfile - = cu->per_cu->dwarf2_per_objfile; - - gdb_assert (cu->per_cu != NULL); - - target_cu = cu; - - if (cu->per_cu->is_debug_types) - { - /* .debug_types CUs cannot reference anything outside their CU. - If they need to, they have to reference a signatured type via - DW_FORM_ref_sig8. */ - if (!offset_in_cu_p (&cu->header, sect_off)) - return NULL; - } - else if (offset_in_dwz != cu->per_cu->is_dwz - || !offset_in_cu_p (&cu->header, sect_off)) - { - struct dwarf2_per_cu_data *per_cu; - - per_cu = dwarf2_find_containing_comp_unit (sect_off, offset_in_dwz, - dwarf2_per_objfile); - - /* If necessary, add it to the queue and load its DIEs. */ - if (maybe_queue_comp_unit (cu, per_cu, cu->language)) - load_full_comp_unit (per_cu, false, cu->language); - - target_cu = per_cu->cu; - } - else if (cu->dies == NULL) - { - /* We're loading full DIEs during partial symbol reading. */ - gdb_assert (dwarf2_per_objfile->reading_partial_symbols); - load_full_comp_unit (cu->per_cu, false, language_minimal); - } - - *ref_cu = target_cu; - temp_die.sect_off = sect_off; - - if (target_cu != cu) - target_cu->ancestor = cu; - - return (struct die_info *) htab_find_with_hash (target_cu->die_hash, - &temp_die, - to_underlying (sect_off)); -} - -/* Follow reference attribute ATTR of SRC_DIE. - On entry *REF_CU is the CU of SRC_DIE. - On exit *REF_CU is the CU of the result. */ - -static struct die_info * -follow_die_ref (struct die_info *src_die, const struct attribute *attr, - struct dwarf2_cu **ref_cu) -{ - sect_offset sect_off = dwarf2_get_ref_die_offset (attr); - struct dwarf2_cu *cu = *ref_cu; - struct die_info *die; - - die = follow_die_offset (sect_off, - (attr->form == DW_FORM_GNU_ref_alt - || cu->per_cu->is_dwz), - ref_cu); - if (!die) - error (_("Dwarf Error: Cannot find DIE at %s referenced from DIE " - "at %s [in module %s]"), - sect_offset_str (sect_off), sect_offset_str (src_die->sect_off), - objfile_name (cu->per_cu->dwarf2_per_objfile->objfile)); - - return die; -} - -/* Return DWARF block referenced by DW_AT_location of DIE at SECT_OFF at PER_CU. - Returned value is intended for DW_OP_call*. Returned - dwarf2_locexpr_baton->data has lifetime of - PER_CU->DWARF2_PER_OBJFILE->OBJFILE. */ - -struct dwarf2_locexpr_baton -dwarf2_fetch_die_loc_sect_off (sect_offset sect_off, - struct dwarf2_per_cu_data *per_cu, - CORE_ADDR (*get_frame_pc) (void *baton), - void *baton, bool resolve_abstract_p) -{ - struct dwarf2_cu *cu; - struct die_info *die; - struct attribute *attr; - struct dwarf2_locexpr_baton retval; - struct dwarf2_per_objfile *dwarf2_per_objfile = per_cu->dwarf2_per_objfile; - struct objfile *objfile = dwarf2_per_objfile->objfile; - - if (per_cu->cu == NULL) - load_cu (per_cu, false); - cu = per_cu->cu; - if (cu == NULL) - { - /* We shouldn't get here for a dummy CU, but don't crash on the user. - Instead just throw an error, not much else we can do. */ - error (_("Dwarf Error: Dummy CU at %s referenced in module %s"), - sect_offset_str (sect_off), objfile_name (objfile)); - } - - die = follow_die_offset (sect_off, per_cu->is_dwz, &cu); - if (!die) - error (_("Dwarf Error: Cannot find DIE at %s referenced in module %s"), - sect_offset_str (sect_off), objfile_name (objfile)); - - attr = dwarf2_attr (die, DW_AT_location, cu); - if (!attr && resolve_abstract_p - && (dwarf2_per_objfile->abstract_to_concrete.find (die->sect_off) - != dwarf2_per_objfile->abstract_to_concrete.end ())) - { - CORE_ADDR pc = (*get_frame_pc) (baton); - CORE_ADDR baseaddr - = ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile)); - struct gdbarch *gdbarch = get_objfile_arch (objfile); - - for (const auto &cand_off - : dwarf2_per_objfile->abstract_to_concrete[die->sect_off]) - { - struct dwarf2_cu *cand_cu = cu; - struct die_info *cand - = follow_die_offset (cand_off, per_cu->is_dwz, &cand_cu); - if (!cand - || !cand->parent - || cand->parent->tag != DW_TAG_subprogram) - continue; - - CORE_ADDR pc_low, pc_high; - get_scope_pc_bounds (cand->parent, &pc_low, &pc_high, cu); - if (pc_low == ((CORE_ADDR) -1)) - continue; - pc_low = gdbarch_adjust_dwarf2_addr (gdbarch, pc_low + baseaddr); - pc_high = gdbarch_adjust_dwarf2_addr (gdbarch, pc_high + baseaddr); - if (!(pc_low <= pc && pc < pc_high)) - continue; - - die = cand; - attr = dwarf2_attr (die, DW_AT_location, cu); - break; - } - } - - if (!attr) - { - /* DWARF: "If there is no such attribute, then there is no effect.". - DATA is ignored if SIZE is 0. */ - - retval.data = NULL; - retval.size = 0; - } - else if (attr_form_is_section_offset (attr)) - { - struct dwarf2_loclist_baton loclist_baton; - CORE_ADDR pc = (*get_frame_pc) (baton); - size_t size; - - fill_in_loclist_baton (cu, &loclist_baton, attr); - - retval.data = dwarf2_find_location_expression (&loclist_baton, - &size, pc); - retval.size = size; - } - else - { - if (!attr_form_is_block (attr)) - error (_("Dwarf Error: DIE at %s referenced in module %s " - "is neither DW_FORM_block* nor DW_FORM_exprloc"), - sect_offset_str (sect_off), objfile_name (objfile)); - - retval.data = DW_BLOCK (attr)->data; - retval.size = DW_BLOCK (attr)->size; - } - retval.per_cu = cu->per_cu; - - age_cached_comp_units (dwarf2_per_objfile); - - return retval; -} - -/* Like dwarf2_fetch_die_loc_sect_off, but take a CU - offset. */ - -struct dwarf2_locexpr_baton -dwarf2_fetch_die_loc_cu_off (cu_offset offset_in_cu, - struct dwarf2_per_cu_data *per_cu, - CORE_ADDR (*get_frame_pc) (void *baton), - void *baton) -{ - sect_offset sect_off = per_cu->sect_off + to_underlying (offset_in_cu); - - return dwarf2_fetch_die_loc_sect_off (sect_off, per_cu, get_frame_pc, baton); -} - -/* Write a constant of a given type as target-ordered bytes into - OBSTACK. */ - -static const gdb_byte * -write_constant_as_bytes (struct obstack *obstack, - enum bfd_endian byte_order, - struct type *type, - ULONGEST value, - LONGEST *len) -{ - gdb_byte *result; - - *len = TYPE_LENGTH (type); - result = (gdb_byte *) obstack_alloc (obstack, *len); - store_unsigned_integer (result, *len, byte_order, value); - - return result; -} - -/* If the DIE at OFFSET in PER_CU has a DW_AT_const_value, return a - pointer to the constant bytes and set LEN to the length of the - data. If memory is needed, allocate it on OBSTACK. If the DIE - does not have a DW_AT_const_value, return NULL. */ - -const gdb_byte * -dwarf2_fetch_constant_bytes (sect_offset sect_off, - struct dwarf2_per_cu_data *per_cu, - struct obstack *obstack, - LONGEST *len) -{ - struct dwarf2_cu *cu; - struct die_info *die; - struct attribute *attr; - const gdb_byte *result = NULL; - struct type *type; - LONGEST value; - enum bfd_endian byte_order; - struct objfile *objfile = per_cu->dwarf2_per_objfile->objfile; - - if (per_cu->cu == NULL) - load_cu (per_cu, false); - cu = per_cu->cu; - if (cu == NULL) - { - /* We shouldn't get here for a dummy CU, but don't crash on the user. - Instead just throw an error, not much else we can do. */ - error (_("Dwarf Error: Dummy CU at %s referenced in module %s"), - sect_offset_str (sect_off), objfile_name (objfile)); - } - - die = follow_die_offset (sect_off, per_cu->is_dwz, &cu); - if (!die) - error (_("Dwarf Error: Cannot find DIE at %s referenced in module %s"), - sect_offset_str (sect_off), objfile_name (objfile)); - - attr = dwarf2_attr (die, DW_AT_const_value, cu); - if (attr == NULL) - return NULL; - - byte_order = (bfd_big_endian (objfile->obfd) - ? BFD_ENDIAN_BIG : BFD_ENDIAN_LITTLE); - - switch (attr->form) - { - case DW_FORM_addr: - case DW_FORM_addrx: - case DW_FORM_GNU_addr_index: - { - gdb_byte *tem; - - *len = cu->header.addr_size; - tem = (gdb_byte *) obstack_alloc (obstack, *len); - store_unsigned_integer (tem, *len, byte_order, DW_ADDR (attr)); - result = tem; - } - break; - case DW_FORM_string: - case DW_FORM_strp: - case DW_FORM_strx: - case DW_FORM_GNU_str_index: - case DW_FORM_GNU_strp_alt: - /* DW_STRING is already allocated on the objfile obstack, point - directly to it. */ - result = (const gdb_byte *) DW_STRING (attr); - *len = strlen (DW_STRING (attr)); - break; - case DW_FORM_block1: - case DW_FORM_block2: - case DW_FORM_block4: - case DW_FORM_block: - case DW_FORM_exprloc: - case DW_FORM_data16: - result = DW_BLOCK (attr)->data; - *len = DW_BLOCK (attr)->size; - break; - - /* The DW_AT_const_value attributes are supposed to carry the - symbol's value "represented as it would be on the target - architecture." By the time we get here, it's already been - converted to host endianness, so we just need to sign- or - zero-extend it as appropriate. */ - case DW_FORM_data1: - type = die_type (die, cu); - result = dwarf2_const_value_data (attr, obstack, cu, &value, 8); - if (result == NULL) - result = write_constant_as_bytes (obstack, byte_order, - type, value, len); - break; - case DW_FORM_data2: - type = die_type (die, cu); - result = dwarf2_const_value_data (attr, obstack, cu, &value, 16); - if (result == NULL) - result = write_constant_as_bytes (obstack, byte_order, - type, value, len); - break; - case DW_FORM_data4: - type = die_type (die, cu); - result = dwarf2_const_value_data (attr, obstack, cu, &value, 32); - if (result == NULL) - result = write_constant_as_bytes (obstack, byte_order, - type, value, len); - break; - case DW_FORM_data8: - type = die_type (die, cu); - result = dwarf2_const_value_data (attr, obstack, cu, &value, 64); - if (result == NULL) - result = write_constant_as_bytes (obstack, byte_order, - type, value, len); - break; - - case DW_FORM_sdata: - case DW_FORM_implicit_const: - type = die_type (die, cu); - result = write_constant_as_bytes (obstack, byte_order, - type, DW_SND (attr), len); - break; - - case DW_FORM_udata: - type = die_type (die, cu); - result = write_constant_as_bytes (obstack, byte_order, - type, DW_UNSND (attr), len); - break; - - default: - complaint (_("unsupported const value attribute form: '%s'"), - dwarf_form_name (attr->form)); - break; - } - - return result; -} - -/* Return the type of the die at OFFSET in PER_CU. Return NULL if no - valid type for this die is found. */ - -struct type * -dwarf2_fetch_die_type_sect_off (sect_offset sect_off, - struct dwarf2_per_cu_data *per_cu) -{ - struct dwarf2_cu *cu; - struct die_info *die; - - if (per_cu->cu == NULL) - load_cu (per_cu, false); - cu = per_cu->cu; - if (!cu) - return NULL; - - die = follow_die_offset (sect_off, per_cu->is_dwz, &cu); - if (!die) - return NULL; - - return die_type (die, cu); -} - -/* Return the type of the DIE at DIE_OFFSET in the CU named by - PER_CU. */ - -struct type * -dwarf2_get_die_type (cu_offset die_offset, - struct dwarf2_per_cu_data *per_cu) -{ - sect_offset die_offset_sect = per_cu->sect_off + to_underlying (die_offset); - return get_die_type_at_offset (die_offset_sect, per_cu); -} - -/* Follow type unit SIG_TYPE referenced by SRC_DIE. - On entry *REF_CU is the CU of SRC_DIE. - On exit *REF_CU is the CU of the result. - Returns NULL if the referenced DIE isn't found. */ - -static struct die_info * -follow_die_sig_1 (struct die_info *src_die, struct signatured_type *sig_type, - struct dwarf2_cu **ref_cu) -{ - struct die_info temp_die; - struct dwarf2_cu *sig_cu, *cu = *ref_cu; - struct die_info *die; - - /* While it might be nice to assert sig_type->type == NULL here, - we can get here for DW_AT_imported_declaration where we need - the DIE not the type. */ - - /* If necessary, add it to the queue and load its DIEs. */ - - if (maybe_queue_comp_unit (*ref_cu, &sig_type->per_cu, language_minimal)) - read_signatured_type (sig_type); - - sig_cu = sig_type->per_cu.cu; - gdb_assert (sig_cu != NULL); - gdb_assert (to_underlying (sig_type->type_offset_in_section) != 0); - temp_die.sect_off = sig_type->type_offset_in_section; - die = (struct die_info *) htab_find_with_hash (sig_cu->die_hash, &temp_die, - to_underlying (temp_die.sect_off)); - if (die) - { - struct dwarf2_per_objfile *dwarf2_per_objfile - = (*ref_cu)->per_cu->dwarf2_per_objfile; - - /* For .gdb_index version 7 keep track of included TUs. - http://sourceware.org/bugzilla/show_bug.cgi?id=15021. */ - if (dwarf2_per_objfile->index_table != NULL - && dwarf2_per_objfile->index_table->version <= 7) - { - (*ref_cu)->per_cu->imported_symtabs_push (sig_cu->per_cu); - } - - *ref_cu = sig_cu; - if (sig_cu != cu) - sig_cu->ancestor = cu; - - return die; - } - - return NULL; -} - -/* Follow signatured type referenced by ATTR in SRC_DIE. - On entry *REF_CU is the CU of SRC_DIE. - On exit *REF_CU is the CU of the result. - The result is the DIE of the type. - If the referenced type cannot be found an error is thrown. */ - -static struct die_info * -follow_die_sig (struct die_info *src_die, const struct attribute *attr, - struct dwarf2_cu **ref_cu) -{ - ULONGEST signature = DW_SIGNATURE (attr); - struct signatured_type *sig_type; - struct die_info *die; - - gdb_assert (attr->form == DW_FORM_ref_sig8); - - sig_type = lookup_signatured_type (*ref_cu, signature); - /* sig_type will be NULL if the signatured type is missing from - the debug info. */ - if (sig_type == NULL) - { - error (_("Dwarf Error: Cannot find signatured DIE %s referenced" - " from DIE at %s [in module %s]"), - hex_string (signature), sect_offset_str (src_die->sect_off), - objfile_name ((*ref_cu)->per_cu->dwarf2_per_objfile->objfile)); - } - - die = follow_die_sig_1 (src_die, sig_type, ref_cu); - if (die == NULL) - { - dump_die_for_error (src_die); - error (_("Dwarf Error: Problem reading signatured DIE %s referenced" - " from DIE at %s [in module %s]"), - hex_string (signature), sect_offset_str (src_die->sect_off), - objfile_name ((*ref_cu)->per_cu->dwarf2_per_objfile->objfile)); - } - - return die; -} - -/* Get the type specified by SIGNATURE referenced in DIE/CU, - reading in and processing the type unit if necessary. */ - -static struct type * -get_signatured_type (struct die_info *die, ULONGEST signature, - struct dwarf2_cu *cu) -{ - struct dwarf2_per_objfile *dwarf2_per_objfile - = cu->per_cu->dwarf2_per_objfile; - struct signatured_type *sig_type; - struct dwarf2_cu *type_cu; - struct die_info *type_die; - struct type *type; - - sig_type = lookup_signatured_type (cu, signature); - /* sig_type will be NULL if the signatured type is missing from - the debug info. */ - if (sig_type == NULL) - { - complaint (_("Dwarf Error: Cannot find signatured DIE %s referenced" - " from DIE at %s [in module %s]"), - hex_string (signature), sect_offset_str (die->sect_off), - objfile_name (dwarf2_per_objfile->objfile)); - return build_error_marker_type (cu, die); - } - - /* If we already know the type we're done. */ - if (sig_type->type != NULL) - return sig_type->type; - - type_cu = cu; - type_die = follow_die_sig_1 (die, sig_type, &type_cu); - if (type_die != NULL) - { - /* N.B. We need to call get_die_type to ensure only one type for this DIE - is created. This is important, for example, because for c++ classes - we need TYPE_NAME set which is only done by new_symbol. Blech. */ - type = read_type_die (type_die, type_cu); - if (type == NULL) - { - complaint (_("Dwarf Error: Cannot build signatured type %s" - " referenced from DIE at %s [in module %s]"), - hex_string (signature), sect_offset_str (die->sect_off), - objfile_name (dwarf2_per_objfile->objfile)); - type = build_error_marker_type (cu, die); - } - } - else - { - complaint (_("Dwarf Error: Problem reading signatured DIE %s referenced" - " from DIE at %s [in module %s]"), - hex_string (signature), sect_offset_str (die->sect_off), - objfile_name (dwarf2_per_objfile->objfile)); - type = build_error_marker_type (cu, die); - } - sig_type->type = type; - - return type; -} - -/* Get the type specified by the DW_AT_signature ATTR in DIE/CU, - reading in and processing the type unit if necessary. */ - -static struct type * -get_DW_AT_signature_type (struct die_info *die, const struct attribute *attr, - struct dwarf2_cu *cu) /* ARI: editCase function */ -{ - /* Yes, DW_AT_signature can use a non-ref_sig8 reference. */ - if (attr_form_is_ref (attr)) - { - struct dwarf2_cu *type_cu = cu; - struct die_info *type_die = follow_die_ref (die, attr, &type_cu); - - return read_type_die (type_die, type_cu); - } - else if (attr->form == DW_FORM_ref_sig8) - { - return get_signatured_type (die, DW_SIGNATURE (attr), cu); - } - else - { - struct dwarf2_per_objfile *dwarf2_per_objfile - = cu->per_cu->dwarf2_per_objfile; - - complaint (_("Dwarf Error: DW_AT_signature has bad form %s in DIE" - " at %s [in module %s]"), - dwarf_form_name (attr->form), sect_offset_str (die->sect_off), - objfile_name (dwarf2_per_objfile->objfile)); - return build_error_marker_type (cu, die); - } -} - -/* Load the DIEs associated with type unit PER_CU into memory. */ - -static void -load_full_type_unit (struct dwarf2_per_cu_data *per_cu) -{ - struct signatured_type *sig_type; - - /* Caller is responsible for ensuring type_unit_groups don't get here. */ - gdb_assert (! IS_TYPE_UNIT_GROUP (per_cu)); - - /* We have the per_cu, but we need the signatured_type. - Fortunately this is an easy translation. */ - gdb_assert (per_cu->is_debug_types); - sig_type = (struct signatured_type *) per_cu; - - gdb_assert (per_cu->cu == NULL); - - read_signatured_type (sig_type); - - gdb_assert (per_cu->cu != NULL); -} - -/* die_reader_func for read_signatured_type. - This is identical to load_full_comp_unit_reader, - but is kept separate for now. */ - -static void -read_signatured_type_reader (const struct die_reader_specs *reader, - const gdb_byte *info_ptr, - struct die_info *comp_unit_die, - int has_children, - void *data) -{ - struct dwarf2_cu *cu = reader->cu; - - gdb_assert (cu->die_hash == NULL); - cu->die_hash = - htab_create_alloc_ex (cu->header.length / 12, - die_hash, - die_eq, - NULL, - &cu->comp_unit_obstack, - hashtab_obstack_allocate, - dummy_obstack_deallocate); - - if (has_children) - comp_unit_die->child = read_die_and_siblings (reader, info_ptr, - &info_ptr, comp_unit_die); - cu->dies = comp_unit_die; - /* comp_unit_die is not stored in die_hash, no need. */ - - /* We try not to read any attributes in this function, because not - all CUs needed for references have been loaded yet, and symbol - table processing isn't initialized. But we have to set the CU language, - or we won't be able to build types correctly. - Similarly, if we do not read the producer, we can not apply - producer-specific interpretation. */ - prepare_one_comp_unit (cu, cu->dies, language_minimal); -} - -/* Read in a signatured type and build its CU and DIEs. - If the type is a stub for the real type in a DWO file, - read in the real type from the DWO file as well. */ - -static void -read_signatured_type (struct signatured_type *sig_type) -{ - struct dwarf2_per_cu_data *per_cu = &sig_type->per_cu; - - gdb_assert (per_cu->is_debug_types); - gdb_assert (per_cu->cu == NULL); - - init_cutu_and_read_dies (per_cu, NULL, 0, 1, false, - read_signatured_type_reader, NULL); - sig_type->per_cu.tu_read = 1; -} - -/* Decode simple location descriptions. - Given a pointer to a dwarf block that defines a location, compute - the location and return the value. - - NOTE drow/2003-11-18: This function is called in two situations - now: for the address of static or global variables (partial symbols - only) and for offsets into structures which are expected to be - (more or less) constant. The partial symbol case should go away, - and only the constant case should remain. That will let this - function complain more accurately. A few special modes are allowed - without complaint for global variables (for instance, global - register values and thread-local values). - - A location description containing no operations indicates that the - object is optimized out. The return value is 0 for that case. - FIXME drow/2003-11-16: No callers check for this case any more; soon all - callers will only want a very basic result and this can become a - complaint. - - Note that stack[0] is unused except as a default error return. */ - -static CORE_ADDR -decode_locdesc (struct dwarf_block *blk, struct dwarf2_cu *cu) -{ - struct objfile *objfile = cu->per_cu->dwarf2_per_objfile->objfile; - size_t i; - size_t size = blk->size; - const gdb_byte *data = blk->data; - CORE_ADDR stack[64]; - int stacki; - unsigned int bytes_read, unsnd; - gdb_byte op; - - i = 0; - stacki = 0; - stack[stacki] = 0; - stack[++stacki] = 0; - - while (i < size) - { - op = data[i++]; - switch (op) - { - case DW_OP_lit0: - case DW_OP_lit1: - case DW_OP_lit2: - case DW_OP_lit3: - case DW_OP_lit4: - case DW_OP_lit5: - case DW_OP_lit6: - case DW_OP_lit7: - case DW_OP_lit8: - case DW_OP_lit9: - case DW_OP_lit10: - case DW_OP_lit11: - case DW_OP_lit12: - case DW_OP_lit13: - case DW_OP_lit14: - case DW_OP_lit15: - case DW_OP_lit16: - case DW_OP_lit17: - case DW_OP_lit18: - case DW_OP_lit19: - case DW_OP_lit20: - case DW_OP_lit21: - case DW_OP_lit22: - case DW_OP_lit23: - case DW_OP_lit24: - case DW_OP_lit25: - case DW_OP_lit26: - case DW_OP_lit27: - case DW_OP_lit28: - case DW_OP_lit29: - case DW_OP_lit30: - case DW_OP_lit31: - stack[++stacki] = op - DW_OP_lit0; - break; - - case DW_OP_reg0: - case DW_OP_reg1: - case DW_OP_reg2: - case DW_OP_reg3: - case DW_OP_reg4: - case DW_OP_reg5: - case DW_OP_reg6: - case DW_OP_reg7: - case DW_OP_reg8: - case DW_OP_reg9: - case DW_OP_reg10: - case DW_OP_reg11: - case DW_OP_reg12: - case DW_OP_reg13: - case DW_OP_reg14: - case DW_OP_reg15: - case DW_OP_reg16: - case DW_OP_reg17: - case DW_OP_reg18: - case DW_OP_reg19: - case DW_OP_reg20: - case DW_OP_reg21: - case DW_OP_reg22: - case DW_OP_reg23: - case DW_OP_reg24: - case DW_OP_reg25: - case DW_OP_reg26: - case DW_OP_reg27: - case DW_OP_reg28: - case DW_OP_reg29: - case DW_OP_reg30: - case DW_OP_reg31: - stack[++stacki] = op - DW_OP_reg0; - if (i < size) - dwarf2_complex_location_expr_complaint (); - break; - - case DW_OP_regx: - unsnd = read_unsigned_leb128 (NULL, (data + i), &bytes_read); - i += bytes_read; - stack[++stacki] = unsnd; - if (i < size) - dwarf2_complex_location_expr_complaint (); - break; - - case DW_OP_addr: - stack[++stacki] = read_address (objfile->obfd, &data[i], - cu, &bytes_read); - i += bytes_read; - break; - - case DW_OP_const1u: - stack[++stacki] = read_1_byte (objfile->obfd, &data[i]); - i += 1; - break; - - case DW_OP_const1s: - stack[++stacki] = read_1_signed_byte (objfile->obfd, &data[i]); - i += 1; - break; - - case DW_OP_const2u: - stack[++stacki] = read_2_bytes (objfile->obfd, &data[i]); - i += 2; - break; - - case DW_OP_const2s: - stack[++stacki] = read_2_signed_bytes (objfile->obfd, &data[i]); - i += 2; - break; - - case DW_OP_const4u: - stack[++stacki] = read_4_bytes (objfile->obfd, &data[i]); - i += 4; - break; - - case DW_OP_const4s: - stack[++stacki] = read_4_signed_bytes (objfile->obfd, &data[i]); - i += 4; - break; - - case DW_OP_const8u: - stack[++stacki] = read_8_bytes (objfile->obfd, &data[i]); - i += 8; - break; - - case DW_OP_constu: - stack[++stacki] = read_unsigned_leb128 (NULL, (data + i), - &bytes_read); - i += bytes_read; - break; - - case DW_OP_consts: - stack[++stacki] = read_signed_leb128 (NULL, (data + i), &bytes_read); - i += bytes_read; - break; - - case DW_OP_dup: - stack[stacki + 1] = stack[stacki]; - stacki++; - break; - - case DW_OP_plus: - stack[stacki - 1] += stack[stacki]; - stacki--; - break; - - case DW_OP_plus_uconst: - stack[stacki] += read_unsigned_leb128 (NULL, (data + i), - &bytes_read); - i += bytes_read; - break; - - case DW_OP_minus: - stack[stacki - 1] -= stack[stacki]; - stacki--; - break; - - case DW_OP_deref: - /* If we're not the last op, then we definitely can't encode - this using GDB's address_class enum. This is valid for partial - global symbols, although the variable's address will be bogus - in the psymtab. */ - if (i < size) - dwarf2_complex_location_expr_complaint (); - break; - - case DW_OP_GNU_push_tls_address: - case DW_OP_form_tls_address: - /* The top of the stack has the offset from the beginning - of the thread control block at which the variable is located. */ - /* Nothing should follow this operator, so the top of stack would - be returned. */ - /* This is valid for partial global symbols, but the variable's - address will be bogus in the psymtab. Make it always at least - non-zero to not look as a variable garbage collected by linker - which have DW_OP_addr 0. */ - if (i < size) - dwarf2_complex_location_expr_complaint (); - stack[stacki]++; - break; - - case DW_OP_GNU_uninit: - break; - - case DW_OP_addrx: - case DW_OP_GNU_addr_index: - case DW_OP_GNU_const_index: - stack[++stacki] = read_addr_index_from_leb128 (cu, &data[i], - &bytes_read); - i += bytes_read; - break; - - default: - { - const char *name = get_DW_OP_name (op); - - if (name) - complaint (_("unsupported stack op: '%s'"), - name); - else - complaint (_("unsupported stack op: '%02x'"), - op); - } - - return (stack[stacki]); - } - - /* Enforce maximum stack depth of SIZE-1 to avoid writing - outside of the allocated space. Also enforce minimum>0. */ - if (stacki >= ARRAY_SIZE (stack) - 1) - { - complaint (_("location description stack overflow")); - return 0; - } - - if (stacki <= 0) - { - complaint (_("location description stack underflow")); - return 0; - } - } - return (stack[stacki]); -} - -/* memory allocation interface */ - -static struct dwarf_block * -dwarf_alloc_block (struct dwarf2_cu *cu) -{ - return XOBNEW (&cu->comp_unit_obstack, struct dwarf_block); -} - -static struct die_info * -dwarf_alloc_die (struct dwarf2_cu *cu, int num_attrs) -{ - struct die_info *die; - size_t size = sizeof (struct die_info); - - if (num_attrs > 1) - size += (num_attrs - 1) * sizeof (struct attribute); - - die = (struct die_info *) obstack_alloc (&cu->comp_unit_obstack, size); - memset (die, 0, sizeof (struct die_info)); - return (die); -} - - -/* Macro support. */ - -/* Return file name relative to the compilation directory of file number I in - *LH's file name table. The result is allocated using xmalloc; the caller is - responsible for freeing it. */ - -static char * -file_file_name (int file, struct line_header *lh) -{ - /* Is the file number a valid index into the line header's file name - table? Remember that file numbers start with one, not zero. */ - if (lh->is_valid_file_index (file)) - { - const file_entry *fe = lh->file_name_at (file); - - if (!IS_ABSOLUTE_PATH (fe->name)) - { - const char *dir = fe->include_dir (lh); - if (dir != NULL) - return concat (dir, SLASH_STRING, fe->name, (char *) NULL); - } - return xstrdup (fe->name); - } - else - { - /* The compiler produced a bogus file number. We can at least - record the macro definitions made in the file, even if we - won't be able to find the file by name. */ - char fake_name[80]; - - xsnprintf (fake_name, sizeof (fake_name), - "<bad macro file number %d>", file); - - complaint (_("bad file number in macro information (%d)"), - file); - - return xstrdup (fake_name); - } -} - -/* Return the full name of file number I in *LH's file name table. - Use COMP_DIR as the name of the current directory of the - compilation. The result is allocated using xmalloc; the caller is - responsible for freeing it. */ -static char * -file_full_name (int file, struct line_header *lh, const char *comp_dir) -{ - /* Is the file number a valid index into the line header's file name - table? Remember that file numbers start with one, not zero. */ - if (lh->is_valid_file_index (file)) - { - char *relative = file_file_name (file, lh); - - if (IS_ABSOLUTE_PATH (relative) || comp_dir == NULL) - return relative; - return reconcat (relative, comp_dir, SLASH_STRING, - relative, (char *) NULL); - } - else - return file_file_name (file, lh); -} - - -static struct macro_source_file * -macro_start_file (struct dwarf2_cu *cu, - int file, int line, - struct macro_source_file *current_file, - struct line_header *lh) -{ - /* File name relative to the compilation directory of this source file. */ - char *file_name = file_file_name (file, lh); - - if (! current_file) - { - /* Note: We don't create a macro table for this compilation unit - at all until we actually get a filename. */ - struct macro_table *macro_table = cu->get_builder ()->get_macro_table (); - - /* If we have no current file, then this must be the start_file - directive for the compilation unit's main source file. */ - current_file = macro_set_main (macro_table, file_name); - macro_define_special (macro_table); - } - else - current_file = macro_include (current_file, line, file_name); - - xfree (file_name); - - return current_file; -} - -static const char * -consume_improper_spaces (const char *p, const char *body) -{ - if (*p == ' ') - { - complaint (_("macro definition contains spaces " - "in formal argument list:\n`%s'"), - body); - - while (*p == ' ') - p++; - } - - return p; -} - - -static void -parse_macro_definition (struct macro_source_file *file, int line, - const char *body) -{ - const char *p; - - /* The body string takes one of two forms. For object-like macro - definitions, it should be: - - <macro name> " " <definition> - - For function-like macro definitions, it should be: - - <macro name> "() " <definition> - or - <macro name> "(" <arg name> ( "," <arg name> ) * ") " <definition> - - Spaces may appear only where explicitly indicated, and in the - <definition>. - - The Dwarf 2 spec says that an object-like macro's name is always - followed by a space, but versions of GCC around March 2002 omit - the space when the macro's definition is the empty string. - - The Dwarf 2 spec says that there should be no spaces between the - formal arguments in a function-like macro's formal argument list, - but versions of GCC around March 2002 include spaces after the - commas. */ - - - /* Find the extent of the macro name. The macro name is terminated - by either a space or null character (for an object-like macro) or - an opening paren (for a function-like macro). */ - for (p = body; *p; p++) - if (*p == ' ' || *p == '(') - break; - - if (*p == ' ' || *p == '\0') - { - /* It's an object-like macro. */ - int name_len = p - body; - char *name = savestring (body, name_len); - const char *replacement; - - if (*p == ' ') - replacement = body + name_len + 1; - else - { - dwarf2_macro_malformed_definition_complaint (body); - replacement = body + name_len; - } - - macro_define_object (file, line, name, replacement); - - xfree (name); - } - else if (*p == '(') - { - /* It's a function-like macro. */ - char *name = savestring (body, p - body); - int argc = 0; - int argv_size = 1; - char **argv = XNEWVEC (char *, argv_size); - - p++; - - p = consume_improper_spaces (p, body); - - /* Parse the formal argument list. */ - while (*p && *p != ')') - { - /* Find the extent of the current argument name. */ - const char *arg_start = p; - - while (*p && *p != ',' && *p != ')' && *p != ' ') - p++; - - if (! *p || p == arg_start) - dwarf2_macro_malformed_definition_complaint (body); - else - { - /* Make sure argv has room for the new argument. */ - if (argc >= argv_size) - { - argv_size *= 2; - argv = XRESIZEVEC (char *, argv, argv_size); - } - - argv[argc++] = savestring (arg_start, p - arg_start); - } - - p = consume_improper_spaces (p, body); - - /* Consume the comma, if present. */ - if (*p == ',') - { - p++; - - p = consume_improper_spaces (p, body); - } - } - - if (*p == ')') - { - p++; - - if (*p == ' ') - /* Perfectly formed definition, no complaints. */ - macro_define_function (file, line, name, - argc, (const char **) argv, - p + 1); - else if (*p == '\0') - { - /* Complain, but do define it. */ - dwarf2_macro_malformed_definition_complaint (body); - macro_define_function (file, line, name, - argc, (const char **) argv, - p); - } - else - /* Just complain. */ - dwarf2_macro_malformed_definition_complaint (body); - } - else - /* Just complain. */ - dwarf2_macro_malformed_definition_complaint (body); - - xfree (name); - { - int i; - - for (i = 0; i < argc; i++) - xfree (argv[i]); - } - xfree (argv); - } - else - dwarf2_macro_malformed_definition_complaint (body); -} - -/* Skip some bytes from BYTES according to the form given in FORM. - Returns the new pointer. */ - -static const gdb_byte * -skip_form_bytes (bfd *abfd, const gdb_byte *bytes, const gdb_byte *buffer_end, - enum dwarf_form form, - unsigned int offset_size, - struct dwarf2_section_info *section) -{ - unsigned int bytes_read; - - switch (form) - { - case DW_FORM_data1: - case DW_FORM_flag: - ++bytes; - break; - - case DW_FORM_data2: - bytes += 2; - break; - - case DW_FORM_data4: - bytes += 4; - break; - - case DW_FORM_data8: - bytes += 8; - break; - - case DW_FORM_data16: - bytes += 16; - break; - - case DW_FORM_string: - read_direct_string (abfd, bytes, &bytes_read); - bytes += bytes_read; - break; - - case DW_FORM_sec_offset: - case DW_FORM_strp: - case DW_FORM_GNU_strp_alt: - bytes += offset_size; - break; - - case DW_FORM_block: - bytes += read_unsigned_leb128 (abfd, bytes, &bytes_read); - bytes += bytes_read; - break; - - case DW_FORM_block1: - bytes += 1 + read_1_byte (abfd, bytes); - break; - case DW_FORM_block2: - bytes += 2 + read_2_bytes (abfd, bytes); - break; - case DW_FORM_block4: - bytes += 4 + read_4_bytes (abfd, bytes); - break; - - case DW_FORM_addrx: - case DW_FORM_sdata: - case DW_FORM_strx: - case DW_FORM_udata: - case DW_FORM_GNU_addr_index: - case DW_FORM_GNU_str_index: - bytes = gdb_skip_leb128 (bytes, buffer_end); - if (bytes == NULL) - { - dwarf2_section_buffer_overflow_complaint (section); - return NULL; - } - break; - - case DW_FORM_implicit_const: - break; - - default: - { - complaint (_("invalid form 0x%x in `%s'"), - form, get_section_name (section)); - return NULL; - } - } - - return bytes; -} - -/* A helper for dwarf_decode_macros that handles skipping an unknown - opcode. Returns an updated pointer to the macro data buffer; or, - on error, issues a complaint and returns NULL. */ - -static const gdb_byte * -skip_unknown_opcode (unsigned int opcode, - const gdb_byte **opcode_definitions, - const gdb_byte *mac_ptr, const gdb_byte *mac_end, - bfd *abfd, - unsigned int offset_size, - struct dwarf2_section_info *section) -{ - unsigned int bytes_read, i; - unsigned long arg; - const gdb_byte *defn; - - if (opcode_definitions[opcode] == NULL) - { - complaint (_("unrecognized DW_MACFINO opcode 0x%x"), - opcode); - return NULL; - } - - defn = opcode_definitions[opcode]; - arg = read_unsigned_leb128 (abfd, defn, &bytes_read); - defn += bytes_read; - - for (i = 0; i < arg; ++i) - { - mac_ptr = skip_form_bytes (abfd, mac_ptr, mac_end, - (enum dwarf_form) defn[i], offset_size, - section); - if (mac_ptr == NULL) - { - /* skip_form_bytes already issued the complaint. */ - return NULL; - } - } - - return mac_ptr; -} - -/* A helper function which parses the header of a macro section. - If the macro section is the extended (for now called "GNU") type, - then this updates *OFFSET_SIZE. Returns a pointer to just after - the header, or issues a complaint and returns NULL on error. */ - -static const gdb_byte * -dwarf_parse_macro_header (const gdb_byte **opcode_definitions, - bfd *abfd, - const gdb_byte *mac_ptr, - unsigned int *offset_size, - int section_is_gnu) -{ - memset (opcode_definitions, 0, 256 * sizeof (gdb_byte *)); - - if (section_is_gnu) - { - unsigned int version, flags; - - version = read_2_bytes (abfd, mac_ptr); - if (version != 4 && version != 5) - { - complaint (_("unrecognized version `%d' in .debug_macro section"), - version); - return NULL; - } - mac_ptr += 2; - - flags = read_1_byte (abfd, mac_ptr); - ++mac_ptr; - *offset_size = (flags & 1) ? 8 : 4; - - if ((flags & 2) != 0) - /* We don't need the line table offset. */ - mac_ptr += *offset_size; - - /* Vendor opcode descriptions. */ - if ((flags & 4) != 0) - { - unsigned int i, count; - - count = read_1_byte (abfd, mac_ptr); - ++mac_ptr; - for (i = 0; i < count; ++i) - { - unsigned int opcode, bytes_read; - unsigned long arg; - - opcode = read_1_byte (abfd, mac_ptr); - ++mac_ptr; - opcode_definitions[opcode] = mac_ptr; - arg = read_unsigned_leb128 (abfd, mac_ptr, &bytes_read); - mac_ptr += bytes_read; - mac_ptr += arg; - } - } - } - - return mac_ptr; -} - -/* A helper for dwarf_decode_macros that handles the GNU extensions, - including DW_MACRO_import. */ - -static void -dwarf_decode_macro_bytes (struct dwarf2_cu *cu, - bfd *abfd, - const gdb_byte *mac_ptr, const gdb_byte *mac_end, - struct macro_source_file *current_file, - struct line_header *lh, - struct dwarf2_section_info *section, - int section_is_gnu, int section_is_dwz, - unsigned int offset_size, - htab_t include_hash) -{ - struct dwarf2_per_objfile *dwarf2_per_objfile - = cu->per_cu->dwarf2_per_objfile; - struct objfile *objfile = dwarf2_per_objfile->objfile; - enum dwarf_macro_record_type macinfo_type; - int at_commandline; - const gdb_byte *opcode_definitions[256]; - - mac_ptr = dwarf_parse_macro_header (opcode_definitions, abfd, mac_ptr, - &offset_size, section_is_gnu); - if (mac_ptr == NULL) - { - /* We already issued a complaint. */ - return; - } - - /* Determines if GDB is still before first DW_MACINFO_start_file. If true - GDB is still reading the definitions from command line. First - DW_MACINFO_start_file will need to be ignored as it was already executed - to create CURRENT_FILE for the main source holding also the command line - definitions. On first met DW_MACINFO_start_file this flag is reset to - normally execute all the remaining DW_MACINFO_start_file macinfos. */ - - at_commandline = 1; - - do - { - /* Do we at least have room for a macinfo type byte? */ - if (mac_ptr >= mac_end) - { - dwarf2_section_buffer_overflow_complaint (section); - break; - } - - macinfo_type = (enum dwarf_macro_record_type) read_1_byte (abfd, mac_ptr); - mac_ptr++; - - /* Note that we rely on the fact that the corresponding GNU and - DWARF constants are the same. */ - DIAGNOSTIC_PUSH - DIAGNOSTIC_IGNORE_SWITCH_DIFFERENT_ENUM_TYPES - switch (macinfo_type) - { - /* A zero macinfo type indicates the end of the macro - information. */ - case 0: - break; - - case DW_MACRO_define: - case DW_MACRO_undef: - case DW_MACRO_define_strp: - case DW_MACRO_undef_strp: - case DW_MACRO_define_sup: - case DW_MACRO_undef_sup: - { - unsigned int bytes_read; - int line; - const char *body; - int is_define; - - line = read_unsigned_leb128 (abfd, mac_ptr, &bytes_read); - mac_ptr += bytes_read; - - if (macinfo_type == DW_MACRO_define - || macinfo_type == DW_MACRO_undef) - { - body = read_direct_string (abfd, mac_ptr, &bytes_read); - mac_ptr += bytes_read; - } - else - { - LONGEST str_offset; - - str_offset = read_offset_1 (abfd, mac_ptr, offset_size); - mac_ptr += offset_size; - - if (macinfo_type == DW_MACRO_define_sup - || macinfo_type == DW_MACRO_undef_sup - || section_is_dwz) - { - struct dwz_file *dwz - = dwarf2_get_dwz_file (dwarf2_per_objfile); - - body = read_indirect_string_from_dwz (objfile, - dwz, str_offset); - } - else - body = read_indirect_string_at_offset (dwarf2_per_objfile, - abfd, str_offset); - } - - is_define = (macinfo_type == DW_MACRO_define - || macinfo_type == DW_MACRO_define_strp - || macinfo_type == DW_MACRO_define_sup); - if (! current_file) - { - /* DWARF violation as no main source is present. */ - complaint (_("debug info with no main source gives macro %s " - "on line %d: %s"), - is_define ? _("definition") : _("undefinition"), - line, body); - break; - } - if ((line == 0 && !at_commandline) - || (line != 0 && at_commandline)) - complaint (_("debug info gives %s macro %s with %s line %d: %s"), - at_commandline ? _("command-line") : _("in-file"), - is_define ? _("definition") : _("undefinition"), - line == 0 ? _("zero") : _("non-zero"), line, body); - - if (body == NULL) - { - /* Fedora's rpm-build's "debugedit" binary - corrupted .debug_macro sections. - - For more info, see - https://bugzilla.redhat.com/show_bug.cgi?id=1708786 */ - complaint (_("debug info gives %s invalid macro %s " - "without body (corrupted?) at line %d " - "on file %s"), - at_commandline ? _("command-line") : _("in-file"), - is_define ? _("definition") : _("undefinition"), - line, current_file->filename); - } - else if (is_define) - parse_macro_definition (current_file, line, body); - else - { - gdb_assert (macinfo_type == DW_MACRO_undef - || macinfo_type == DW_MACRO_undef_strp - || macinfo_type == DW_MACRO_undef_sup); - macro_undef (current_file, line, body); - } - } - break; - - case DW_MACRO_start_file: - { - unsigned int bytes_read; - int line, file; - - line = read_unsigned_leb128 (abfd, mac_ptr, &bytes_read); - mac_ptr += bytes_read; - file = read_unsigned_leb128 (abfd, mac_ptr, &bytes_read); - mac_ptr += bytes_read; - - if ((line == 0 && !at_commandline) - || (line != 0 && at_commandline)) - complaint (_("debug info gives source %d included " - "from %s at %s line %d"), - file, at_commandline ? _("command-line") : _("file"), - line == 0 ? _("zero") : _("non-zero"), line); - - if (at_commandline) - { - /* This DW_MACRO_start_file was executed in the - pass one. */ - at_commandline = 0; - } - else - current_file = macro_start_file (cu, file, line, current_file, - lh); - } - break; - - case DW_MACRO_end_file: - if (! current_file) - complaint (_("macro debug info has an unmatched " - "`close_file' directive")); - else - { - current_file = current_file->included_by; - if (! current_file) - { - enum dwarf_macro_record_type next_type; - - /* GCC circa March 2002 doesn't produce the zero - type byte marking the end of the compilation - unit. Complain if it's not there, but exit no - matter what. */ - - /* Do we at least have room for a macinfo type byte? */ - if (mac_ptr >= mac_end) - { - dwarf2_section_buffer_overflow_complaint (section); - return; - } - - /* We don't increment mac_ptr here, so this is just - a look-ahead. */ - next_type - = (enum dwarf_macro_record_type) read_1_byte (abfd, - mac_ptr); - if (next_type != 0) - complaint (_("no terminating 0-type entry for " - "macros in `.debug_macinfo' section")); - - return; - } - } - break; - - case DW_MACRO_import: - case DW_MACRO_import_sup: - { - LONGEST offset; - void **slot; - bfd *include_bfd = abfd; - struct dwarf2_section_info *include_section = section; - const gdb_byte *include_mac_end = mac_end; - int is_dwz = section_is_dwz; - const gdb_byte *new_mac_ptr; - - offset = read_offset_1 (abfd, mac_ptr, offset_size); - mac_ptr += offset_size; - - if (macinfo_type == DW_MACRO_import_sup) - { - struct dwz_file *dwz = dwarf2_get_dwz_file (dwarf2_per_objfile); - - dwarf2_read_section (objfile, &dwz->macro); - - include_section = &dwz->macro; - include_bfd = get_section_bfd_owner (include_section); - include_mac_end = dwz->macro.buffer + dwz->macro.size; - is_dwz = 1; - } - - new_mac_ptr = include_section->buffer + offset; - slot = htab_find_slot (include_hash, new_mac_ptr, INSERT); - - if (*slot != NULL) - { - /* This has actually happened; see - http://sourceware.org/bugzilla/show_bug.cgi?id=13568. */ - complaint (_("recursive DW_MACRO_import in " - ".debug_macro section")); - } - else - { - *slot = (void *) new_mac_ptr; - - dwarf_decode_macro_bytes (cu, include_bfd, new_mac_ptr, - include_mac_end, current_file, lh, - section, section_is_gnu, is_dwz, - offset_size, include_hash); - - htab_remove_elt (include_hash, (void *) new_mac_ptr); - } - } - break; - - case DW_MACINFO_vendor_ext: - if (!section_is_gnu) - { - unsigned int bytes_read; - - /* This reads the constant, but since we don't recognize - any vendor extensions, we ignore it. */ - read_unsigned_leb128 (abfd, mac_ptr, &bytes_read); - mac_ptr += bytes_read; - read_direct_string (abfd, mac_ptr, &bytes_read); - mac_ptr += bytes_read; - - /* We don't recognize any vendor extensions. */ - break; - } - /* FALLTHROUGH */ - - default: - mac_ptr = skip_unknown_opcode (macinfo_type, opcode_definitions, - mac_ptr, mac_end, abfd, offset_size, - section); - if (mac_ptr == NULL) - return; - break; - } - DIAGNOSTIC_POP - } while (macinfo_type != 0); -} - -static void -dwarf_decode_macros (struct dwarf2_cu *cu, unsigned int offset, - int section_is_gnu) -{ - struct dwarf2_per_objfile *dwarf2_per_objfile - = cu->per_cu->dwarf2_per_objfile; - struct objfile *objfile = dwarf2_per_objfile->objfile; - struct line_header *lh = cu->line_header; - bfd *abfd; - const gdb_byte *mac_ptr, *mac_end; - struct macro_source_file *current_file = 0; - enum dwarf_macro_record_type macinfo_type; - unsigned int offset_size = cu->header.offset_size; - const gdb_byte *opcode_definitions[256]; - void **slot; - struct dwarf2_section_info *section; - const char *section_name; - - if (cu->dwo_unit != NULL) - { - if (section_is_gnu) - { - section = &cu->dwo_unit->dwo_file->sections.macro; - section_name = ".debug_macro.dwo"; - } - else - { - section = &cu->dwo_unit->dwo_file->sections.macinfo; - section_name = ".debug_macinfo.dwo"; - } - } - else - { - if (section_is_gnu) - { - section = &dwarf2_per_objfile->macro; - section_name = ".debug_macro"; - } - else - { - section = &dwarf2_per_objfile->macinfo; - section_name = ".debug_macinfo"; - } - } - - dwarf2_read_section (objfile, section); - if (section->buffer == NULL) - { - complaint (_("missing %s section"), section_name); - return; - } - abfd = get_section_bfd_owner (section); - - /* First pass: Find the name of the base filename. - This filename is needed in order to process all macros whose definition - (or undefinition) comes from the command line. These macros are defined - before the first DW_MACINFO_start_file entry, and yet still need to be - associated to the base file. - - To determine the base file name, we scan the macro definitions until we - reach the first DW_MACINFO_start_file entry. We then initialize - CURRENT_FILE accordingly so that any macro definition found before the - first DW_MACINFO_start_file can still be associated to the base file. */ - - mac_ptr = section->buffer + offset; - mac_end = section->buffer + section->size; - - mac_ptr = dwarf_parse_macro_header (opcode_definitions, abfd, mac_ptr, - &offset_size, section_is_gnu); - if (mac_ptr == NULL) - { - /* We already issued a complaint. */ - return; - } - - do - { - /* Do we at least have room for a macinfo type byte? */ - if (mac_ptr >= mac_end) - { - /* Complaint is printed during the second pass as GDB will probably - stop the first pass earlier upon finding - DW_MACINFO_start_file. */ - break; - } - - macinfo_type = (enum dwarf_macro_record_type) read_1_byte (abfd, mac_ptr); - mac_ptr++; - - /* Note that we rely on the fact that the corresponding GNU and - DWARF constants are the same. */ - DIAGNOSTIC_PUSH - DIAGNOSTIC_IGNORE_SWITCH_DIFFERENT_ENUM_TYPES - switch (macinfo_type) - { - /* A zero macinfo type indicates the end of the macro - information. */ - case 0: - break; - - case DW_MACRO_define: - case DW_MACRO_undef: - /* Only skip the data by MAC_PTR. */ - { - unsigned int bytes_read; - - read_unsigned_leb128 (abfd, mac_ptr, &bytes_read); - mac_ptr += bytes_read; - read_direct_string (abfd, mac_ptr, &bytes_read); - mac_ptr += bytes_read; - } - break; - - case DW_MACRO_start_file: - { - unsigned int bytes_read; - int line, file; - - line = read_unsigned_leb128 (abfd, mac_ptr, &bytes_read); - mac_ptr += bytes_read; - file = read_unsigned_leb128 (abfd, mac_ptr, &bytes_read); - mac_ptr += bytes_read; - - current_file = macro_start_file (cu, file, line, current_file, lh); - } - break; - - case DW_MACRO_end_file: - /* No data to skip by MAC_PTR. */ - break; - - case DW_MACRO_define_strp: - case DW_MACRO_undef_strp: - case DW_MACRO_define_sup: - case DW_MACRO_undef_sup: - { - unsigned int bytes_read; - - read_unsigned_leb128 (abfd, mac_ptr, &bytes_read); - mac_ptr += bytes_read; - mac_ptr += offset_size; - } - break; - - case DW_MACRO_import: - case DW_MACRO_import_sup: - /* Note that, according to the spec, a transparent include - chain cannot call DW_MACRO_start_file. So, we can just - skip this opcode. */ - mac_ptr += offset_size; - break; - - case DW_MACINFO_vendor_ext: - /* Only skip the data by MAC_PTR. */ - if (!section_is_gnu) - { - unsigned int bytes_read; - - read_unsigned_leb128 (abfd, mac_ptr, &bytes_read); - mac_ptr += bytes_read; - read_direct_string (abfd, mac_ptr, &bytes_read); - mac_ptr += bytes_read; - } - /* FALLTHROUGH */ - - default: - mac_ptr = skip_unknown_opcode (macinfo_type, opcode_definitions, - mac_ptr, mac_end, abfd, offset_size, - section); - if (mac_ptr == NULL) - return; - break; - } - DIAGNOSTIC_POP - } while (macinfo_type != 0 && current_file == NULL); - - /* Second pass: Process all entries. - - Use the AT_COMMAND_LINE flag to determine whether we are still processing - command-line macro definitions/undefinitions. This flag is unset when we - reach the first DW_MACINFO_start_file entry. */ - - htab_up include_hash (htab_create_alloc (1, htab_hash_pointer, - htab_eq_pointer, - NULL, xcalloc, xfree)); - mac_ptr = section->buffer + offset; - slot = htab_find_slot (include_hash.get (), mac_ptr, INSERT); - *slot = (void *) mac_ptr; - dwarf_decode_macro_bytes (cu, abfd, mac_ptr, mac_end, - current_file, lh, section, - section_is_gnu, 0, offset_size, - include_hash.get ()); -} - -/* Check if the attribute's form is a DW_FORM_block* - if so return true else false. */ - -static int -attr_form_is_block (const struct attribute *attr) -{ - return (attr == NULL ? 0 : - attr->form == DW_FORM_block1 - || attr->form == DW_FORM_block2 - || attr->form == DW_FORM_block4 - || attr->form == DW_FORM_block - || attr->form == DW_FORM_exprloc); -} - -/* Return non-zero if ATTR's value is a section offset --- classes - lineptr, loclistptr, macptr or rangelistptr --- or zero, otherwise. - You may use DW_UNSND (attr) to retrieve such offsets. - - Section 7.5.4, "Attribute Encodings", explains that no attribute - may have a value that belongs to more than one of these classes; it - would be ambiguous if we did, because we use the same forms for all - of them. */ - -static int -attr_form_is_section_offset (const struct attribute *attr) -{ - return (attr->form == DW_FORM_data4 - || attr->form == DW_FORM_data8 - || attr->form == DW_FORM_sec_offset); -} - -/* Return non-zero if ATTR's value falls in the 'constant' class, or - zero otherwise. When this function returns true, you can apply - dwarf2_get_attr_constant_value to it. - - However, note that for some attributes you must check - attr_form_is_section_offset before using this test. DW_FORM_data4 - and DW_FORM_data8 are members of both the constant class, and of - the classes that contain offsets into other debug sections - (lineptr, loclistptr, macptr or rangelistptr). The DWARF spec says - that, if an attribute's can be either a constant or one of the - section offset classes, DW_FORM_data4 and DW_FORM_data8 should be - taken as section offsets, not constants. - - DW_FORM_data16 is not considered as dwarf2_get_attr_constant_value - cannot handle that. */ - -static int -attr_form_is_constant (const struct attribute *attr) -{ - switch (attr->form) - { - case DW_FORM_sdata: - case DW_FORM_udata: - case DW_FORM_data1: - case DW_FORM_data2: - case DW_FORM_data4: - case DW_FORM_data8: - case DW_FORM_implicit_const: - return 1; - default: - return 0; - } -} - - -/* DW_ADDR is always stored already as sect_offset; despite for the forms - besides DW_FORM_ref_addr it is stored as cu_offset in the DWARF file. */ - -static int -attr_form_is_ref (const struct attribute *attr) -{ - switch (attr->form) - { - case DW_FORM_ref_addr: - case DW_FORM_ref1: - case DW_FORM_ref2: - case DW_FORM_ref4: - case DW_FORM_ref8: - case DW_FORM_ref_udata: - case DW_FORM_GNU_ref_alt: - return 1; - default: - return 0; - } -} - -/* Return the .debug_loc section to use for CU. - For DWO files use .debug_loc.dwo. */ - -static struct dwarf2_section_info * -cu_debug_loc_section (struct dwarf2_cu *cu) -{ - struct dwarf2_per_objfile *dwarf2_per_objfile - = cu->per_cu->dwarf2_per_objfile; - - if (cu->dwo_unit) - { - struct dwo_sections *sections = &cu->dwo_unit->dwo_file->sections; - - return cu->header.version >= 5 ? §ions->loclists : §ions->loc; - } - return (cu->header.version >= 5 ? &dwarf2_per_objfile->loclists - : &dwarf2_per_objfile->loc); -} - -/* A helper function that fills in a dwarf2_loclist_baton. */ - -static void -fill_in_loclist_baton (struct dwarf2_cu *cu, - struct dwarf2_loclist_baton *baton, - const struct attribute *attr) -{ - struct dwarf2_per_objfile *dwarf2_per_objfile - = cu->per_cu->dwarf2_per_objfile; - struct dwarf2_section_info *section = cu_debug_loc_section (cu); - - dwarf2_read_section (dwarf2_per_objfile->objfile, section); - - baton->per_cu = cu->per_cu; - gdb_assert (baton->per_cu); - /* We don't know how long the location list is, but make sure we - don't run off the edge of the section. */ - baton->size = section->size - DW_UNSND (attr); - baton->data = section->buffer + DW_UNSND (attr); - baton->base_address = cu->base_address; - baton->from_dwo = cu->dwo_unit != NULL; -} - -static void -dwarf2_symbol_mark_computed (const struct attribute *attr, struct symbol *sym, - struct dwarf2_cu *cu, int is_block) -{ - struct dwarf2_per_objfile *dwarf2_per_objfile - = cu->per_cu->dwarf2_per_objfile; - struct objfile *objfile = dwarf2_per_objfile->objfile; - struct dwarf2_section_info *section = cu_debug_loc_section (cu); - - if (attr_form_is_section_offset (attr) - /* .debug_loc{,.dwo} may not exist at all, or the offset may be outside - the section. If so, fall through to the complaint in the - other branch. */ - && DW_UNSND (attr) < dwarf2_section_size (objfile, section)) - { - struct dwarf2_loclist_baton *baton; - - baton = XOBNEW (&objfile->objfile_obstack, struct dwarf2_loclist_baton); - - fill_in_loclist_baton (cu, baton, attr); - - if (cu->base_known == 0) - complaint (_("Location list used without " - "specifying the CU base address.")); - - SYMBOL_ACLASS_INDEX (sym) = (is_block - ? dwarf2_loclist_block_index - : dwarf2_loclist_index); - SYMBOL_LOCATION_BATON (sym) = baton; - } - else - { - struct dwarf2_locexpr_baton *baton; - - baton = XOBNEW (&objfile->objfile_obstack, struct dwarf2_locexpr_baton); - baton->per_cu = cu->per_cu; - gdb_assert (baton->per_cu); - - if (attr_form_is_block (attr)) - { - /* Note that we're just copying the block's data pointer - here, not the actual data. We're still pointing into the - info_buffer for SYM's objfile; right now we never release - that buffer, but when we do clean up properly this may - need to change. */ - baton->size = DW_BLOCK (attr)->size; - baton->data = DW_BLOCK (attr)->data; - } - else - { - dwarf2_invalid_attrib_class_complaint ("location description", - sym->natural_name ()); - baton->size = 0; - } - - SYMBOL_ACLASS_INDEX (sym) = (is_block - ? dwarf2_locexpr_block_index - : dwarf2_locexpr_index); - SYMBOL_LOCATION_BATON (sym) = baton; - } -} - -/* Return the OBJFILE associated with the compilation unit CU. If CU - came from a separate debuginfo file, then the master objfile is - returned. */ - -struct objfile * -dwarf2_per_cu_objfile (struct dwarf2_per_cu_data *per_cu) -{ - struct objfile *objfile = per_cu->dwarf2_per_objfile->objfile; - - /* Return the master objfile, so that we can report and look up the - correct file containing this variable. */ - if (objfile->separate_debug_objfile_backlink) - objfile = objfile->separate_debug_objfile_backlink; - - return objfile; -} - -/* Return comp_unit_head for PER_CU, either already available in PER_CU->CU - (CU_HEADERP is unused in such case) or prepare a temporary copy at - CU_HEADERP first. */ - -static const struct comp_unit_head * -per_cu_header_read_in (struct comp_unit_head *cu_headerp, - struct dwarf2_per_cu_data *per_cu) -{ - const gdb_byte *info_ptr; - - if (per_cu->cu) - return &per_cu->cu->header; - - info_ptr = per_cu->section->buffer + to_underlying (per_cu->sect_off); - - memset (cu_headerp, 0, sizeof (*cu_headerp)); - read_comp_unit_head (cu_headerp, info_ptr, per_cu->section, - rcuh_kind::COMPILE); - - return cu_headerp; -} - -/* Return the address size given in the compilation unit header for CU. */ - -int -dwarf2_per_cu_addr_size (struct dwarf2_per_cu_data *per_cu) -{ - struct comp_unit_head cu_header_local; - const struct comp_unit_head *cu_headerp; - - cu_headerp = per_cu_header_read_in (&cu_header_local, per_cu); - - return cu_headerp->addr_size; -} - -/* Return the offset size given in the compilation unit header for CU. */ - -int -dwarf2_per_cu_offset_size (struct dwarf2_per_cu_data *per_cu) -{ - struct comp_unit_head cu_header_local; - const struct comp_unit_head *cu_headerp; - - cu_headerp = per_cu_header_read_in (&cu_header_local, per_cu); - - return cu_headerp->offset_size; -} - -/* See its dwarf2loc.h declaration. */ - -int -dwarf2_per_cu_ref_addr_size (struct dwarf2_per_cu_data *per_cu) -{ - struct comp_unit_head cu_header_local; - const struct comp_unit_head *cu_headerp; - - cu_headerp = per_cu_header_read_in (&cu_header_local, per_cu); - - if (cu_headerp->version == 2) - return cu_headerp->addr_size; - else - return cu_headerp->offset_size; -} - -/* Return the text offset of the CU. The returned offset comes from - this CU's objfile. If this objfile came from a separate debuginfo - file, then the offset may be different from the corresponding - offset in the parent objfile. */ - -CORE_ADDR -dwarf2_per_cu_text_offset (struct dwarf2_per_cu_data *per_cu) -{ - struct objfile *objfile = per_cu->dwarf2_per_objfile->objfile; - - return ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile)); -} - -/* Return a type that is a generic pointer type, the size of which matches - the address size given in the compilation unit header for PER_CU. */ -static struct type * -dwarf2_per_cu_addr_type (struct dwarf2_per_cu_data *per_cu) -{ - struct objfile *objfile = per_cu->dwarf2_per_objfile->objfile; - struct type *void_type = objfile_type (objfile)->builtin_void; - struct type *addr_type = lookup_pointer_type (void_type); - int addr_size = dwarf2_per_cu_addr_size (per_cu); - - if (TYPE_LENGTH (addr_type) == addr_size) - return addr_type; - - addr_type - = dwarf2_per_cu_addr_sized_int_type (per_cu, TYPE_UNSIGNED (addr_type)); - return addr_type; -} - -/* Return DWARF version number of PER_CU. */ - -short -dwarf2_version (struct dwarf2_per_cu_data *per_cu) -{ - return per_cu->dwarf_version; -} - -/* Locate the .debug_info compilation unit from CU's objfile which contains - the DIE at OFFSET. Raises an error on failure. */ - -static struct dwarf2_per_cu_data * -dwarf2_find_containing_comp_unit (sect_offset sect_off, - unsigned int offset_in_dwz, - struct dwarf2_per_objfile *dwarf2_per_objfile) -{ - struct dwarf2_per_cu_data *this_cu; - int low, high; - - low = 0; - high = dwarf2_per_objfile->all_comp_units.size () - 1; - while (high > low) - { - struct dwarf2_per_cu_data *mid_cu; - int mid = low + (high - low) / 2; - - mid_cu = dwarf2_per_objfile->all_comp_units[mid]; - if (mid_cu->is_dwz > offset_in_dwz - || (mid_cu->is_dwz == offset_in_dwz - && mid_cu->sect_off + mid_cu->length >= sect_off)) - high = mid; - else - low = mid + 1; - } - gdb_assert (low == high); - this_cu = dwarf2_per_objfile->all_comp_units[low]; - if (this_cu->is_dwz != offset_in_dwz || this_cu->sect_off > sect_off) - { - if (low == 0 || this_cu->is_dwz != offset_in_dwz) - error (_("Dwarf Error: could not find partial DIE containing " - "offset %s [in module %s]"), - sect_offset_str (sect_off), - bfd_get_filename (dwarf2_per_objfile->objfile->obfd)); - - gdb_assert (dwarf2_per_objfile->all_comp_units[low-1]->sect_off - <= sect_off); - return dwarf2_per_objfile->all_comp_units[low-1]; - } - else - { - if (low == dwarf2_per_objfile->all_comp_units.size () - 1 - && sect_off >= this_cu->sect_off + this_cu->length) - error (_("invalid dwarf2 offset %s"), sect_offset_str (sect_off)); - gdb_assert (sect_off < this_cu->sect_off + this_cu->length); - return this_cu; - } -} - -/* Initialize dwarf2_cu CU, owned by PER_CU. */ - -dwarf2_cu::dwarf2_cu (struct dwarf2_per_cu_data *per_cu_) - : per_cu (per_cu_), - mark (false), - has_loclist (false), - checked_producer (false), - producer_is_gxx_lt_4_6 (false), - producer_is_gcc_lt_4_3 (false), - producer_is_icc (false), - producer_is_icc_lt_14 (false), - producer_is_codewarrior (false), - processing_has_namespace_info (false) -{ - per_cu->cu = this; -} - -/* Destroy a dwarf2_cu. */ - -dwarf2_cu::~dwarf2_cu () -{ - per_cu->cu = NULL; -} - -/* Initialize basic fields of dwarf_cu CU according to DIE COMP_UNIT_DIE. */ - -static void -prepare_one_comp_unit (struct dwarf2_cu *cu, struct die_info *comp_unit_die, - enum language pretend_language) -{ - struct attribute *attr; - - /* Set the language we're debugging. */ - attr = dwarf2_attr (comp_unit_die, DW_AT_language, cu); - if (attr != nullptr) - set_cu_language (DW_UNSND (attr), cu); - else - { - cu->language = pretend_language; - cu->language_defn = language_def (cu->language); - } - - cu->producer = dwarf2_string_attr (comp_unit_die, DW_AT_producer, cu); -} - -/* Increase the age counter on each cached compilation unit, and free - any that are too old. */ - -static void -age_cached_comp_units (struct dwarf2_per_objfile *dwarf2_per_objfile) -{ - struct dwarf2_per_cu_data *per_cu, **last_chain; - - dwarf2_clear_marks (dwarf2_per_objfile->read_in_chain); - per_cu = dwarf2_per_objfile->read_in_chain; - while (per_cu != NULL) - { - per_cu->cu->last_used ++; - if (per_cu->cu->last_used <= dwarf_max_cache_age) - dwarf2_mark (per_cu->cu); - per_cu = per_cu->cu->read_in_chain; - } - - per_cu = dwarf2_per_objfile->read_in_chain; - last_chain = &dwarf2_per_objfile->read_in_chain; - while (per_cu != NULL) - { - struct dwarf2_per_cu_data *next_cu; - - next_cu = per_cu->cu->read_in_chain; - - if (!per_cu->cu->mark) - { - delete per_cu->cu; - *last_chain = next_cu; - } - else - last_chain = &per_cu->cu->read_in_chain; - - per_cu = next_cu; - } -} - -/* Remove a single compilation unit from the cache. */ - -static void -free_one_cached_comp_unit (struct dwarf2_per_cu_data *target_per_cu) -{ - struct dwarf2_per_cu_data *per_cu, **last_chain; - struct dwarf2_per_objfile *dwarf2_per_objfile - = target_per_cu->dwarf2_per_objfile; - - per_cu = dwarf2_per_objfile->read_in_chain; - last_chain = &dwarf2_per_objfile->read_in_chain; - while (per_cu != NULL) - { - struct dwarf2_per_cu_data *next_cu; - - next_cu = per_cu->cu->read_in_chain; - - if (per_cu == target_per_cu) - { - delete per_cu->cu; - per_cu->cu = NULL; - *last_chain = next_cu; - break; - } - else - last_chain = &per_cu->cu->read_in_chain; - - per_cu = next_cu; - } -} - -/* A set of CU "per_cu" pointer, DIE offset, and GDB type pointer. - We store these in a hash table separate from the DIEs, and preserve them - when the DIEs are flushed out of cache. - - The CU "per_cu" pointer is needed because offset alone is not enough to - uniquely identify the type. A file may have multiple .debug_types sections, - or the type may come from a DWO file. Furthermore, while it's more logical - to use per_cu->section+offset, with Fission the section with the data is in - the DWO file but we don't know that section at the point we need it. - We have to use something in dwarf2_per_cu_data (or the pointer to it) - because we can enter the lookup routine, get_die_type_at_offset, from - outside this file, and thus won't necessarily have PER_CU->cu. - Fortunately, PER_CU is stable for the life of the objfile. */ - -struct dwarf2_per_cu_offset_and_type -{ - const struct dwarf2_per_cu_data *per_cu; - sect_offset sect_off; - struct type *type; -}; - -/* Hash function for a dwarf2_per_cu_offset_and_type. */ - -static hashval_t -per_cu_offset_and_type_hash (const void *item) -{ - const struct dwarf2_per_cu_offset_and_type *ofs - = (const struct dwarf2_per_cu_offset_and_type *) item; - - return (uintptr_t) ofs->per_cu + to_underlying (ofs->sect_off); -} - -/* Equality function for a dwarf2_per_cu_offset_and_type. */ - -static int -per_cu_offset_and_type_eq (const void *item_lhs, const void *item_rhs) -{ - const struct dwarf2_per_cu_offset_and_type *ofs_lhs - = (const struct dwarf2_per_cu_offset_and_type *) item_lhs; - const struct dwarf2_per_cu_offset_and_type *ofs_rhs - = (const struct dwarf2_per_cu_offset_and_type *) item_rhs; - - return (ofs_lhs->per_cu == ofs_rhs->per_cu - && ofs_lhs->sect_off == ofs_rhs->sect_off); -} - -/* Set the type associated with DIE to TYPE. Save it in CU's hash - table if necessary. For convenience, return TYPE. - - The DIEs reading must have careful ordering to: - * Not cause infinite loops trying to read in DIEs as a prerequisite for - reading current DIE. - * Not trying to dereference contents of still incompletely read in types - while reading in other DIEs. - * Enable referencing still incompletely read in types just by a pointer to - the type without accessing its fields. - - Therefore caller should follow these rules: - * Try to fetch any prerequisite types we may need to build this DIE type - before building the type and calling set_die_type. - * After building type call set_die_type for current DIE as soon as - possible before fetching more types to complete the current type. - * Make the type as complete as possible before fetching more types. */ - -static struct type * -set_die_type (struct die_info *die, struct type *type, struct dwarf2_cu *cu) -{ - struct dwarf2_per_objfile *dwarf2_per_objfile - = cu->per_cu->dwarf2_per_objfile; - struct dwarf2_per_cu_offset_and_type **slot, ofs; - struct objfile *objfile = dwarf2_per_objfile->objfile; - struct attribute *attr; - struct dynamic_prop prop; - - /* For Ada types, make sure that the gnat-specific data is always - initialized (if not already set). There are a few types where - we should not be doing so, because the type-specific area is - already used to hold some other piece of info (eg: TYPE_CODE_FLT - where the type-specific area is used to store the floatformat). - But this is not a problem, because the gnat-specific information - is actually not needed for these types. */ - if (need_gnat_info (cu) - && TYPE_CODE (type) != TYPE_CODE_FUNC - && TYPE_CODE (type) != TYPE_CODE_FLT - && TYPE_CODE (type) != TYPE_CODE_METHODPTR - && TYPE_CODE (type) != TYPE_CODE_MEMBERPTR - && TYPE_CODE (type) != TYPE_CODE_METHOD - && !HAVE_GNAT_AUX_INFO (type)) - INIT_GNAT_SPECIFIC (type); - - /* Read DW_AT_allocated and set in type. */ - attr = dwarf2_attr (die, DW_AT_allocated, cu); - if (attr_form_is_block (attr)) - { - struct type *prop_type - = dwarf2_per_cu_addr_sized_int_type (cu->per_cu, false); - if (attr_to_dynamic_prop (attr, die, cu, &prop, prop_type)) - add_dyn_prop (DYN_PROP_ALLOCATED, prop, type); - } - else if (attr != NULL) - { - complaint (_("DW_AT_allocated has the wrong form (%s) at DIE %s"), - (attr != NULL ? dwarf_form_name (attr->form) : "n/a"), - sect_offset_str (die->sect_off)); - } - - /* Read DW_AT_associated and set in type. */ - attr = dwarf2_attr (die, DW_AT_associated, cu); - if (attr_form_is_block (attr)) - { - struct type *prop_type - = dwarf2_per_cu_addr_sized_int_type (cu->per_cu, false); - if (attr_to_dynamic_prop (attr, die, cu, &prop, prop_type)) - add_dyn_prop (DYN_PROP_ASSOCIATED, prop, type); - } - else if (attr != NULL) - { - complaint (_("DW_AT_associated has the wrong form (%s) at DIE %s"), - (attr != NULL ? dwarf_form_name (attr->form) : "n/a"), - sect_offset_str (die->sect_off)); - } - - /* Read DW_AT_data_location and set in type. */ - attr = dwarf2_attr (die, DW_AT_data_location, cu); - if (attr_to_dynamic_prop (attr, die, cu, &prop, - dwarf2_per_cu_addr_type (cu->per_cu))) - add_dyn_prop (DYN_PROP_DATA_LOCATION, prop, type); - - if (dwarf2_per_objfile->die_type_hash == NULL) - { - dwarf2_per_objfile->die_type_hash = - htab_create_alloc_ex (127, - per_cu_offset_and_type_hash, - per_cu_offset_and_type_eq, - NULL, - &objfile->objfile_obstack, - hashtab_obstack_allocate, - dummy_obstack_deallocate); - } - - ofs.per_cu = cu->per_cu; - ofs.sect_off = die->sect_off; - ofs.type = type; - slot = (struct dwarf2_per_cu_offset_and_type **) - htab_find_slot (dwarf2_per_objfile->die_type_hash, &ofs, INSERT); - if (*slot) - complaint (_("A problem internal to GDB: DIE %s has type already set"), - sect_offset_str (die->sect_off)); - *slot = XOBNEW (&objfile->objfile_obstack, - struct dwarf2_per_cu_offset_and_type); - **slot = ofs; - return type; -} - -/* Look up the type for the die at SECT_OFF in PER_CU in die_type_hash, - or return NULL if the die does not have a saved type. */ - -static struct type * -get_die_type_at_offset (sect_offset sect_off, - struct dwarf2_per_cu_data *per_cu) -{ - struct dwarf2_per_cu_offset_and_type *slot, ofs; - struct dwarf2_per_objfile *dwarf2_per_objfile = per_cu->dwarf2_per_objfile; - - if (dwarf2_per_objfile->die_type_hash == NULL) - return NULL; - - ofs.per_cu = per_cu; - ofs.sect_off = sect_off; - slot = ((struct dwarf2_per_cu_offset_and_type *) - htab_find (dwarf2_per_objfile->die_type_hash, &ofs)); - if (slot) - return slot->type; - else - return NULL; -} - -/* Look up the type for DIE in CU in die_type_hash, - or return NULL if DIE does not have a saved type. */ - -static struct type * -get_die_type (struct die_info *die, struct dwarf2_cu *cu) -{ - return get_die_type_at_offset (die->sect_off, cu->per_cu); -} - -/* Add a dependence relationship from CU to REF_PER_CU. */ - -static void -dwarf2_add_dependence (struct dwarf2_cu *cu, - struct dwarf2_per_cu_data *ref_per_cu) -{ - void **slot; - - if (cu->dependencies == NULL) - cu->dependencies - = htab_create_alloc_ex (5, htab_hash_pointer, htab_eq_pointer, - NULL, &cu->comp_unit_obstack, - hashtab_obstack_allocate, - dummy_obstack_deallocate); - - slot = htab_find_slot (cu->dependencies, ref_per_cu, INSERT); - if (*slot == NULL) - *slot = ref_per_cu; -} - -/* Subroutine of dwarf2_mark to pass to htab_traverse. - Set the mark field in every compilation unit in the - cache that we must keep because we are keeping CU. */ - -static int -dwarf2_mark_helper (void **slot, void *data) -{ - struct dwarf2_per_cu_data *per_cu; - - per_cu = (struct dwarf2_per_cu_data *) *slot; - - /* cu->dependencies references may not yet have been ever read if QUIT aborts - reading of the chain. As such dependencies remain valid it is not much - useful to track and undo them during QUIT cleanups. */ - if (per_cu->cu == NULL) - return 1; - - if (per_cu->cu->mark) - return 1; - per_cu->cu->mark = true; - - if (per_cu->cu->dependencies != NULL) - htab_traverse (per_cu->cu->dependencies, dwarf2_mark_helper, NULL); - - return 1; -} - -/* Set the mark field in CU and in every other compilation unit in the - cache that we must keep because we are keeping CU. */ - -static void -dwarf2_mark (struct dwarf2_cu *cu) -{ - if (cu->mark) - return; - cu->mark = true; - if (cu->dependencies != NULL) - htab_traverse (cu->dependencies, dwarf2_mark_helper, NULL); -} - -static void -dwarf2_clear_marks (struct dwarf2_per_cu_data *per_cu) -{ - while (per_cu) - { - per_cu->cu->mark = false; - per_cu = per_cu->cu->read_in_chain; - } -} - -/* Trivial hash function for partial_die_info: the hash value of a DIE - is its offset in .debug_info for this objfile. */ - -static hashval_t -partial_die_hash (const void *item) -{ - const struct partial_die_info *part_die - = (const struct partial_die_info *) item; - - return to_underlying (part_die->sect_off); -} - -/* Trivial comparison function for partial_die_info structures: two DIEs - are equal if they have the same offset. */ - -static int -partial_die_eq (const void *item_lhs, const void *item_rhs) -{ - const struct partial_die_info *part_die_lhs - = (const struct partial_die_info *) item_lhs; - const struct partial_die_info *part_die_rhs - = (const struct partial_die_info *) item_rhs; - - return part_die_lhs->sect_off == part_die_rhs->sect_off; -} - -struct cmd_list_element *set_dwarf_cmdlist; -struct cmd_list_element *show_dwarf_cmdlist; - -static void -set_dwarf_cmd (const char *args, int from_tty) -{ - help_list (set_dwarf_cmdlist, "maintenance set dwarf ", all_commands, - gdb_stdout); -} - -static void -show_dwarf_cmd (const char *args, int from_tty) -{ - cmd_show_list (show_dwarf_cmdlist, from_tty, ""); -} - -bool dwarf_always_disassemble; - -static void -show_dwarf_always_disassemble (struct ui_file *file, int from_tty, - struct cmd_list_element *c, const char *value) -{ - fprintf_filtered (file, - _("Whether to always disassemble " - "DWARF expressions is %s.\n"), - value); -} - -static void -show_check_physname (struct ui_file *file, int from_tty, - struct cmd_list_element *c, const char *value) -{ - fprintf_filtered (file, - _("Whether to check \"physname\" is %s.\n"), - value); -} - -void -_initialize_dwarf2_read (void) -{ - add_prefix_cmd ("dwarf", class_maintenance, set_dwarf_cmd, _("\ -Set DWARF specific variables.\n\ -Configure DWARF variables such as the cache size."), - &set_dwarf_cmdlist, "maintenance set dwarf ", - 0/*allow-unknown*/, &maintenance_set_cmdlist); - - add_prefix_cmd ("dwarf", class_maintenance, show_dwarf_cmd, _("\ -Show DWARF specific variables.\n\ -Show DWARF variables such as the cache size."), - &show_dwarf_cmdlist, "maintenance show dwarf ", - 0/*allow-unknown*/, &maintenance_show_cmdlist); - - add_setshow_zinteger_cmd ("max-cache-age", class_obscure, - &dwarf_max_cache_age, _("\ -Set the upper bound on the age of cached DWARF compilation units."), _("\ -Show the upper bound on the age of cached DWARF compilation units."), _("\ -A higher limit means that cached compilation units will be stored\n\ -in memory longer, and more total memory will be used. Zero disables\n\ -caching, which can slow down startup."), - NULL, - show_dwarf_max_cache_age, - &set_dwarf_cmdlist, - &show_dwarf_cmdlist); - - add_setshow_boolean_cmd ("always-disassemble", class_obscure, - &dwarf_always_disassemble, _("\ -Set whether `info address' always disassembles DWARF expressions."), _("\ -Show whether `info address' always disassembles DWARF expressions."), _("\ -When enabled, DWARF expressions are always printed in an assembly-like\n\ -syntax. When disabled, expressions will be printed in a more\n\ -conversational style, when possible."), - NULL, - show_dwarf_always_disassemble, - &set_dwarf_cmdlist, - &show_dwarf_cmdlist); - - add_setshow_zuinteger_cmd ("dwarf-read", no_class, &dwarf_read_debug, _("\ -Set debugging of the DWARF reader."), _("\ -Show debugging of the DWARF reader."), _("\ -When enabled (non-zero), debugging messages are printed during DWARF\n\ -reading and symtab expansion. A value of 1 (one) provides basic\n\ -information. A value greater than 1 provides more verbose information."), - NULL, - NULL, - &setdebuglist, &showdebuglist); - - add_setshow_zuinteger_cmd ("dwarf-die", no_class, &dwarf_die_debug, _("\ -Set debugging of the DWARF DIE reader."), _("\ -Show debugging of the DWARF DIE reader."), _("\ -When enabled (non-zero), DIEs are dumped after they are read in.\n\ -The value is the maximum depth to print."), - NULL, - NULL, - &setdebuglist, &showdebuglist); - - add_setshow_zuinteger_cmd ("dwarf-line", no_class, &dwarf_line_debug, _("\ -Set debugging of the dwarf line reader."), _("\ -Show debugging of the dwarf line reader."), _("\ -When enabled (non-zero), line number entries are dumped as they are read in.\n\ -A value of 1 (one) provides basic information.\n\ -A value greater than 1 provides more verbose information."), - NULL, - NULL, - &setdebuglist, &showdebuglist); - - add_setshow_boolean_cmd ("check-physname", no_class, &check_physname, _("\ -Set cross-checking of \"physname\" code against demangler."), _("\ -Show cross-checking of \"physname\" code against demangler."), _("\ -When enabled, GDB's internal \"physname\" code is checked against\n\ -the demangler."), - NULL, show_check_physname, - &setdebuglist, &showdebuglist); - - add_setshow_boolean_cmd ("use-deprecated-index-sections", - no_class, &use_deprecated_index_sections, _("\ -Set whether to use deprecated gdb_index sections."), _("\ -Show whether to use deprecated gdb_index sections."), _("\ -When enabled, deprecated .gdb_index sections are used anyway.\n\ -Normally they are ignored either because of a missing feature or\n\ -performance issue.\n\ -Warning: This option must be enabled before gdb reads the file."), - NULL, - NULL, - &setlist, &showlist); - - dwarf2_locexpr_index = register_symbol_computed_impl (LOC_COMPUTED, - &dwarf2_locexpr_funcs); - dwarf2_loclist_index = register_symbol_computed_impl (LOC_COMPUTED, - &dwarf2_loclist_funcs); - - dwarf2_locexpr_block_index = register_symbol_block_impl (LOC_BLOCK, - &dwarf2_block_frame_base_locexpr_funcs); - dwarf2_loclist_block_index = register_symbol_block_impl (LOC_BLOCK, - &dwarf2_block_frame_base_loclist_funcs); - -#if GDB_SELF_TEST - selftests::register_test ("dw2_expand_symtabs_matching", - selftests::dw2_expand_symtabs_matching::run_test); -#endif -} diff -Nru gdb-9.1/gdb/dwarf2read.h gdb-10.2/gdb/dwarf2read.h --- gdb-9.1/gdb/dwarf2read.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/dwarf2read.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,484 +0,0 @@ -/* DWARF 2 debugging format support for GDB. - - Copyright (C) 1994-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef DWARF2READ_H -#define DWARF2READ_H - -#include <unordered_map> -#include "dwarf-index-cache.h" -#include "filename-seen-cache.h" -#include "gdb_obstack.h" -#include "gdbsupport/hash_enum.h" - -/* Hold 'maintenance (set|show) dwarf' commands. */ -extern struct cmd_list_element *set_dwarf_cmdlist; -extern struct cmd_list_element *show_dwarf_cmdlist; - -extern bool dwarf_always_disassemble; - -/* A descriptor for dwarf sections. - - S.ASECTION, SIZE are typically initialized when the objfile is first - scanned. BUFFER, READIN are filled in later when the section is read. - If the section contained compressed data then SIZE is updated to record - the uncompressed size of the section. - - DWP file format V2 introduces a wrinkle that is easiest to handle by - creating the concept of virtual sections contained within a real section. - In DWP V2 the sections of the input DWO files are concatenated together - into one section, but section offsets are kept relative to the original - input section. - If this is a virtual dwp-v2 section, S.CONTAINING_SECTION is a backlink to - the real section this "virtual" section is contained in, and BUFFER,SIZE - describe the virtual section. */ - -struct dwarf2_section_info -{ - union - { - /* If this is a real section, the bfd section. */ - asection *section; - /* If this is a virtual section, pointer to the containing ("real") - section. */ - struct dwarf2_section_info *containing_section; - } s; - /* Pointer to section data, only valid if readin. */ - const gdb_byte *buffer; - /* The size of the section, real or virtual. */ - bfd_size_type size; - /* If this is a virtual section, the offset in the real section. - Only valid if is_virtual. */ - bfd_size_type virtual_offset; - /* True if we have tried to read this section. */ - bool readin; - /* True if this is a virtual section, False otherwise. - This specifies which of s.section and s.containing_section to use. */ - bool is_virtual; -}; - -/* Read the contents of the section INFO. - OBJFILE is the main object file, but not necessarily the file where - the section comes from. E.g., for DWO files the bfd of INFO is the bfd - of the DWO file. - If the section is compressed, uncompress it before returning. */ - -void dwarf2_read_section (struct objfile *objfile, dwarf2_section_info *info); - -struct tu_stats -{ - int nr_uniq_abbrev_tables; - int nr_symtabs; - int nr_symtab_sharers; - int nr_stmt_less_type_units; - int nr_all_type_units_reallocs; -}; - -struct dwarf2_debug_sections; -struct mapped_index; -struct mapped_debug_names; -struct signatured_type; -struct die_info; -typedef struct die_info *die_info_ptr; - -/* Collection of data recorded per objfile. - This hangs off of dwarf2_objfile_data_key. */ - -struct dwarf2_per_objfile -{ - /* Construct a dwarf2_per_objfile for OBJFILE. NAMES points to the - dwarf2 section names, or is NULL if the standard ELF names are - used. CAN_COPY is true for formats where symbol - interposition is possible and so symbol values must follow copy - relocation rules. */ - dwarf2_per_objfile (struct objfile *objfile, - const dwarf2_debug_sections *names, - bool can_copy); - - ~dwarf2_per_objfile (); - - DISABLE_COPY_AND_ASSIGN (dwarf2_per_objfile); - - /* Return the CU/TU given its index. - - This is intended for loops like: - - for (i = 0; i < (dwarf2_per_objfile->n_comp_units - + dwarf2_per_objfile->n_type_units); ++i) - { - dwarf2_per_cu_data *per_cu = dwarf2_per_objfile->get_cutu (i); - - ...; - } - */ - dwarf2_per_cu_data *get_cutu (int index); - - /* Return the CU given its index. - This differs from get_cutu in that it's for when you know INDEX refers to a - CU. */ - dwarf2_per_cu_data *get_cu (int index); - - /* Return the TU given its index. - This differs from get_cutu in that it's for when you know INDEX refers to a - TU. */ - signatured_type *get_tu (int index); - - /* Free all cached compilation units. */ - void free_cached_comp_units (); -private: - /* This function is mapped across the sections and remembers the - offset and size of each of the debugging sections we are - interested in. */ - void locate_sections (bfd *abfd, asection *sectp, - const dwarf2_debug_sections &names); - -public: - dwarf2_section_info info {}; - dwarf2_section_info abbrev {}; - dwarf2_section_info line {}; - dwarf2_section_info loc {}; - dwarf2_section_info loclists {}; - dwarf2_section_info macinfo {}; - dwarf2_section_info macro {}; - dwarf2_section_info str {}; - dwarf2_section_info line_str {}; - dwarf2_section_info ranges {}; - dwarf2_section_info rnglists {}; - dwarf2_section_info addr {}; - dwarf2_section_info frame {}; - dwarf2_section_info eh_frame {}; - dwarf2_section_info gdb_index {}; - dwarf2_section_info debug_names {}; - dwarf2_section_info debug_aranges {}; - - std::vector<dwarf2_section_info> types; - - /* Back link. */ - struct objfile *objfile = NULL; - - /* Table of all the compilation units. This is used to locate - the target compilation unit of a particular reference. */ - std::vector<dwarf2_per_cu_data *> all_comp_units; - - /* The .debug_types-related CUs (TUs). */ - std::vector<signatured_type *> all_type_units; - - /* Table of struct type_unit_group objects. - The hash key is the DW_AT_stmt_list value. */ - htab_t type_unit_groups {}; - - /* A table mapping .debug_types signatures to its signatured_type entry. - This is NULL if the .debug_types section hasn't been read in yet. */ - htab_t signatured_types {}; - - /* Type unit statistics, to see how well the scaling improvements - are doing. */ - struct tu_stats tu_stats {}; - - /* A chain of compilation units that are currently read in, so that - they can be freed later. */ - dwarf2_per_cu_data *read_in_chain = NULL; - - /* A table mapping DW_AT_dwo_name values to struct dwo_file objects. - This is NULL if the table hasn't been allocated yet. */ - htab_up dwo_files; - - /* True if we've checked for whether there is a DWP file. */ - bool dwp_checked = false; - - /* The DWP file if there is one, or NULL. */ - std::unique_ptr<struct dwp_file> dwp_file; - - /* The shared '.dwz' file, if one exists. This is used when the - original data was compressed using 'dwz -m'. */ - std::unique_ptr<struct dwz_file> dwz_file; - - /* Whether copy relocations are supported by this object format. */ - bool can_copy; - - /* A flag indicating whether this objfile has a section loaded at a - VMA of 0. */ - bool has_section_at_zero = false; - - /* True if we are using the mapped index, - or we are faking it for OBJF_READNOW's sake. */ - bool using_index = false; - - /* The mapped index, or NULL if .gdb_index is missing or not being used. */ - std::unique_ptr<mapped_index> index_table; - - /* The mapped index, or NULL if .debug_names is missing or not being used. */ - std::unique_ptr<mapped_debug_names> debug_names_table; - - /* When using index_table, this keeps track of all quick_file_names entries. - TUs typically share line table entries with a CU, so we maintain a - separate table of all line table entries to support the sharing. - Note that while there can be way more TUs than CUs, we've already - sorted all the TUs into "type unit groups", grouped by their - DW_AT_stmt_list value. Therefore the only sharing done here is with a - CU and its associated TU group if there is one. */ - htab_t quick_file_names_table {}; - - /* Set during partial symbol reading, to prevent queueing of full - symbols. */ - bool reading_partial_symbols = false; - - /* Table mapping type DIEs to their struct type *. - This is NULL if not allocated yet. - The mapping is done via (CU/TU + DIE offset) -> type. */ - htab_t die_type_hash {}; - - /* The CUs we recently read. */ - std::vector<dwarf2_per_cu_data *> just_read_cus; - - /* Table containing line_header indexed by offset and offset_in_dwz. */ - htab_t line_header_hash {}; - - /* Table containing all filenames. This is an optional because the - table is lazily constructed on first access. */ - gdb::optional<filename_seen_cache> filenames_cache; - - /* If we loaded the index from an external file, this contains the - resources associated to the open file, memory mapping, etc. */ - std::unique_ptr<index_cache_resource> index_cache_res; - - /* Mapping from abstract origin DIE to concrete DIEs that reference it as - DW_AT_abstract_origin. */ - std::unordered_map<sect_offset, std::vector<sect_offset>, - gdb::hash_enum<sect_offset>> - abstract_to_concrete; -}; - -/* Get the dwarf2_per_objfile associated to OBJFILE. */ - -dwarf2_per_objfile *get_dwarf2_per_objfile (struct objfile *objfile); - -/* Persistent data held for a compilation unit, even when not - processing it. We put a pointer to this structure in the - read_symtab_private field of the psymtab. */ - -struct dwarf2_per_cu_data -{ - /* The start offset and length of this compilation unit. - NOTE: Unlike comp_unit_head.length, this length includes - initial_length_size. - If the DIE refers to a DWO file, this is always of the original die, - not the DWO file. */ - sect_offset sect_off; - unsigned int length; - - /* DWARF standard version this data has been read from (such as 4 or 5). */ - short dwarf_version; - - /* Flag indicating this compilation unit will be read in before - any of the current compilation units are processed. */ - unsigned int queued : 1; - - /* This flag will be set when reading partial DIEs if we need to load - absolutely all DIEs for this compilation unit, instead of just the ones - we think are interesting. It gets set if we look for a DIE in the - hash table and don't find it. */ - unsigned int load_all_dies : 1; - - /* Non-zero if this CU is from .debug_types. - Struct dwarf2_per_cu_data is contained in struct signatured_type iff - this is non-zero. */ - unsigned int is_debug_types : 1; - - /* Non-zero if this CU is from the .dwz file. */ - unsigned int is_dwz : 1; - - /* Non-zero if reading a TU directly from a DWO file, bypassing the stub. - This flag is only valid if is_debug_types is true. - We can't read a CU directly from a DWO file: There are required - attributes in the stub. */ - unsigned int reading_dwo_directly : 1; - - /* Non-zero if the TU has been read. - This is used to assist the "Stay in DWO Optimization" for Fission: - When reading a DWO, it's faster to read TUs from the DWO instead of - fetching them from random other DWOs (due to comdat folding). - If the TU has already been read, the optimization is unnecessary - (and unwise - we don't want to change where gdb thinks the TU lives - "midflight"). - This flag is only valid if is_debug_types is true. */ - unsigned int tu_read : 1; - - /* The section this CU/TU lives in. - If the DIE refers to a DWO file, this is always the original die, - not the DWO file. */ - struct dwarf2_section_info *section; - - /* Set to non-NULL iff this CU is currently loaded. When it gets freed out - of the CU cache it gets reset to NULL again. This is left as NULL for - dummy CUs (a CU header, but nothing else). */ - struct dwarf2_cu *cu; - - /* The corresponding dwarf2_per_objfile. */ - struct dwarf2_per_objfile *dwarf2_per_objfile; - - /* When dwarf2_per_objfile->using_index is true, the 'quick' field - is active. Otherwise, the 'psymtab' field is active. */ - union - { - /* The partial symbol table associated with this compilation unit, - or NULL for unread partial units. */ - struct partial_symtab *psymtab; - - /* Data needed by the "quick" functions. */ - struct dwarf2_per_cu_quick_data *quick; - } v; - - /* Return true of IMPORTED_SYMTABS is empty or not yet allocated. */ - bool imported_symtabs_empty () const - { - return (imported_symtabs == nullptr || imported_symtabs->empty ()); - } - - /* Push P to the back of IMPORTED_SYMTABS, allocated IMPORTED_SYMTABS - first if required. */ - void imported_symtabs_push (dwarf2_per_cu_data *p) - { - if (imported_symtabs == nullptr) - imported_symtabs = new std::vector <dwarf2_per_cu_data *>; - imported_symtabs->push_back (p); - } - - /* Return the size of IMPORTED_SYMTABS if it is allocated, otherwise - return 0. */ - size_t imported_symtabs_size () const - { - if (imported_symtabs == nullptr) - return 0; - return imported_symtabs->size (); - } - - /* Delete IMPORTED_SYMTABS and set the pointer back to nullptr. */ - void imported_symtabs_free () - { - delete imported_symtabs; - imported_symtabs = nullptr; - } - - /* The CUs we import using DW_TAG_imported_unit. This is filled in - while reading psymtabs, used to compute the psymtab dependencies, - and then cleared. Then it is filled in again while reading full - symbols, and only deleted when the objfile is destroyed. - - This is also used to work around a difference between the way gold - generates .gdb_index version <=7 and the way gdb does. Arguably this - is a gold bug. For symbols coming from TUs, gold records in the index - the CU that includes the TU instead of the TU itself. This breaks - dw2_lookup_symbol: It assumes that if the index says symbol X lives - in CU/TU Y, then one need only expand Y and a subsequent lookup in Y - will find X. Alas TUs live in their own symtab, so after expanding CU Y - we need to look in TU Z to find X. Fortunately, this is akin to - DW_TAG_imported_unit, so we just use the same mechanism: For - .gdb_index version <=7 this also records the TUs that the CU referred - to. Concurrently with this change gdb was modified to emit version 8 - indices so we only pay a price for gold generated indices. - http://sourceware.org/bugzilla/show_bug.cgi?id=15021. - - This currently needs to be a public member due to how - dwarf2_per_cu_data is allocated and used. Ideally in future things - could be refactored to make this private. Until then please try to - avoid direct access to this member, and instead use the helper - functions above. */ - std::vector <dwarf2_per_cu_data *> *imported_symtabs; -}; - -/* Entry in the signatured_types hash table. */ - -struct signatured_type -{ - /* The "per_cu" object of this type. - This struct is used iff per_cu.is_debug_types. - N.B.: This is the first member so that it's easy to convert pointers - between them. */ - struct dwarf2_per_cu_data per_cu; - - /* The type's signature. */ - ULONGEST signature; - - /* Offset in the TU of the type's DIE, as read from the TU header. - If this TU is a DWO stub and the definition lives in a DWO file - (specified by DW_AT_GNU_dwo_name), this value is unusable. */ - cu_offset type_offset_in_tu; - - /* Offset in the section of the type's DIE. - If the definition lives in a DWO file, this is the offset in the - .debug_types.dwo section. - The value is zero until the actual value is known. - Zero is otherwise not a valid section offset. */ - sect_offset type_offset_in_section; - - /* Type units are grouped by their DW_AT_stmt_list entry so that they - can share them. This points to the containing symtab. */ - struct type_unit_group *type_unit_group; - - /* The type. - The first time we encounter this type we fully read it in and install it - in the symbol tables. Subsequent times we only need the type. */ - struct type *type; - - /* Containing DWO unit. - This field is valid iff per_cu.reading_dwo_directly. */ - struct dwo_unit *dwo_unit; -}; - -ULONGEST read_unsigned_leb128 (bfd *, const gdb_byte *, unsigned int *); - -/* This represents a '.dwz' file. */ - -struct dwz_file -{ - dwz_file (gdb_bfd_ref_ptr &&bfd) - : dwz_bfd (std::move (bfd)) - { - } - - const char *filename () const - { - return bfd_get_filename (this->dwz_bfd.get ()); - } - - /* A dwz file can only contain a few sections. */ - struct dwarf2_section_info abbrev {}; - struct dwarf2_section_info info {}; - struct dwarf2_section_info str {}; - struct dwarf2_section_info line {}; - struct dwarf2_section_info macro {}; - struct dwarf2_section_info gdb_index {}; - struct dwarf2_section_info debug_names {}; - - /* The dwz's BFD. */ - gdb_bfd_ref_ptr dwz_bfd; - - /* If we loaded the index from an external file, this contains the - resources associated to the open file, memory mapping, etc. */ - std::unique_ptr<index_cache_resource> index_cache_res; -}; - -/* Open the separate '.dwz' debug file, if needed. Return NULL if - there is no .gnu_debugaltlink section in the file. Error if there - is such a section but the file cannot be found. */ - -extern struct dwz_file *dwarf2_get_dwz_file - (struct dwarf2_per_objfile *dwarf2_per_objfile); - -#endif /* DWARF2READ_H */ diff -Nru gdb-9.1/gdb/dwarf-index-cache.c gdb-10.2/gdb/dwarf-index-cache.c --- gdb-9.1/gdb/dwarf-index-cache.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/dwarf-index-cache.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,382 +0,0 @@ -/* Caching of GDB/DWARF index files. - - Copyright (C) 1994-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "defs.h" -#include "dwarf-index-cache.h" - -#include "build-id.h" -#include "cli/cli-cmds.h" -#include "command.h" -#include "gdbsupport/scoped_mmap.h" -#include "gdbsupport/pathstuff.h" -#include "dwarf-index-write.h" -#include "dwarf2read.h" -#include "objfiles.h" -#include "gdbsupport/selftest.h" -#include <string> -#include <stdlib.h> - -/* When set to true, show debug messages about the index cache. */ -static bool debug_index_cache = false; - -/* The index cache directory, used for "set/show index-cache directory". */ -static char *index_cache_directory = NULL; - -/* See dwarf-index.cache.h. */ -index_cache global_index_cache; - -/* set/show index-cache commands. */ -static cmd_list_element *set_index_cache_prefix_list; -static cmd_list_element *show_index_cache_prefix_list; - -/* Default destructor of index_cache_resource. */ -index_cache_resource::~index_cache_resource () = default; - -/* See dwarf-index-cache.h. */ - -void -index_cache::set_directory (std::string dir) -{ - gdb_assert (!dir.empty ()); - - m_dir = std::move (dir); - - if (debug_index_cache) - printf_unfiltered ("index cache: now using directory %s\n", m_dir.c_str ()); -} - -/* See dwarf-index-cache.h. */ - -void -index_cache::enable () -{ - if (debug_index_cache) - printf_unfiltered ("index cache: enabling (%s)\n", m_dir.c_str ()); - - m_enabled = true; -} - -/* See dwarf-index-cache.h. */ - -void -index_cache::disable () -{ - if (debug_index_cache) - printf_unfiltered ("index cache: disabling\n"); - - m_enabled = false; -} - -/* See dwarf-index-cache.h. */ - -void -index_cache::store (struct dwarf2_per_objfile *dwarf2_per_objfile) -{ - objfile *obj = dwarf2_per_objfile->objfile; - - if (!enabled ()) - return; - - /* Get build id of objfile. */ - const bfd_build_id *build_id = build_id_bfd_get (obj->obfd); - if (build_id == nullptr) - { - if (debug_index_cache) - printf_unfiltered ("index cache: objfile %s has no build id\n", - objfile_name (obj)); - return; - } - - std::string build_id_str = build_id_to_string (build_id); - - /* Get build id of dwz file, if present. */ - gdb::optional<std::string> dwz_build_id_str; - const dwz_file *dwz = dwarf2_get_dwz_file (dwarf2_per_objfile); - const char *dwz_build_id_ptr = NULL; - - if (dwz != nullptr) - { - const bfd_build_id *dwz_build_id = build_id_bfd_get (dwz->dwz_bfd.get ()); - - if (dwz_build_id == nullptr) - { - if (debug_index_cache) - printf_unfiltered ("index cache: dwz objfile %s has no build id\n", - dwz->filename ()); - return; - } - - dwz_build_id_str = build_id_to_string (dwz_build_id); - dwz_build_id_ptr = dwz_build_id_str->c_str (); - } - - if (m_dir.empty ()) - { - warning (_("The index cache directory name is empty, skipping store.")); - return; - } - - try - { - /* Try to create the containing directory. */ - if (!mkdir_recursive (m_dir.c_str ())) - { - warning (_("index cache: could not make cache directory: %s"), - safe_strerror (errno)); - return; - } - - if (debug_index_cache) - printf_unfiltered ("index cache: writing index cache for objfile %s\n", - objfile_name (obj)); - - /* Write the index itself to the directory, using the build id as the - filename. */ - write_psymtabs_to_index (dwarf2_per_objfile, m_dir.c_str (), - build_id_str.c_str (), dwz_build_id_ptr, - dw_index_kind::GDB_INDEX); - } - catch (const gdb_exception_error &except) - { - if (debug_index_cache) - printf_unfiltered ("index cache: couldn't store index cache for objfile " - "%s: %s", objfile_name (obj), except.what ()); - } -} - -#if HAVE_SYS_MMAN_H - -/* Hold the resources for an mmapped index file. */ - -struct index_cache_resource_mmap final : public index_cache_resource -{ - /* Try to mmap FILENAME. Throw an exception on failure, including if the - file doesn't exist. */ - index_cache_resource_mmap (const char *filename) - : mapping (mmap_file (filename)) - {} - - scoped_mmap mapping; -}; - -/* See dwarf-index-cache.h. */ - -gdb::array_view<const gdb_byte> -index_cache::lookup_gdb_index (const bfd_build_id *build_id, - std::unique_ptr<index_cache_resource> *resource) -{ - if (!enabled ()) - return {}; - - if (m_dir.empty ()) - { - warning (_("The index cache directory name is empty, skipping cache " - "lookup.")); - return {}; - } - - /* Compute where we would expect a gdb index file for this build id to be. */ - std::string filename = make_index_filename (build_id, INDEX4_SUFFIX); - - try - { - if (debug_index_cache) - printf_unfiltered ("index cache: trying to read %s\n", - filename.c_str ()); - - /* Try to map that file. */ - index_cache_resource_mmap *mmap_resource - = new index_cache_resource_mmap (filename.c_str ()); - - /* Yay, it worked! Hand the resource to the caller. */ - resource->reset (mmap_resource); - - return gdb::array_view<const gdb_byte> - ((const gdb_byte *) mmap_resource->mapping.get (), - mmap_resource->mapping.size ()); - } - catch (const gdb_exception_error &except) - { - if (debug_index_cache) - printf_unfiltered ("index cache: couldn't read %s: %s\n", - filename.c_str (), except.what ()); - } - - return {}; -} - -#else /* !HAVE_SYS_MMAN_H */ - -/* See dwarf-index-cache.h. This is a no-op on unsupported systems. */ - -gdb::array_view<const gdb_byte> -index_cache::lookup_gdb_index (const bfd_build_id *build_id, - std::unique_ptr<index_cache_resource> *resource) -{ - return {}; -} - -#endif - -/* See dwarf-index-cache.h. */ - -std::string -index_cache::make_index_filename (const bfd_build_id *build_id, - const char *suffix) const -{ - std::string build_id_str = build_id_to_string (build_id); - - return m_dir + SLASH_STRING + build_id_str + suffix; -} - -/* "set index-cache" handler. */ - -static void -set_index_cache_command (const char *arg, int from_tty) -{ - printf_unfiltered (_("\ -Missing arguments. See \"help set index-cache\" for help.\n")); -} - -/* True when we are executing "show index-cache". This is used to improve the - printout a little bit. */ -static bool in_show_index_cache_command = false; - -/* "show index-cache" handler. */ - -static void -show_index_cache_command (const char *arg, int from_tty) -{ - /* Note that we are executing "show index-cache". */ - auto restore_flag = make_scoped_restore (&in_show_index_cache_command, true); - - /* Call all "show index-cache" subcommands. */ - cmd_show_list (show_index_cache_prefix_list, from_tty, ""); - - printf_unfiltered ("\n"); - printf_unfiltered - (_("The index cache is currently %s.\n"), - global_index_cache.enabled () ? _("enabled") : _("disabled")); -} - -/* "set index-cache on" handler. */ - -static void -set_index_cache_on_command (const char *arg, int from_tty) -{ - global_index_cache.enable (); -} - -/* "set index-cache off" handler. */ - -static void -set_index_cache_off_command (const char *arg, int from_tty) -{ - global_index_cache.disable (); -} - -/* "set index-cache directory" handler. */ - -static void -set_index_cache_directory_command (const char *arg, int from_tty, - cmd_list_element *element) -{ - /* Make sure the index cache directory is absolute and tilde-expanded. */ - gdb::unique_xmalloc_ptr<char> abs (gdb_abspath (index_cache_directory)); - xfree (index_cache_directory); - index_cache_directory = abs.release (); - global_index_cache.set_directory (index_cache_directory); -} - -/* "show index-cache stats" handler. */ - -static void -show_index_cache_stats_command (const char *arg, int from_tty) -{ - const char *indent = ""; - - /* If this command is invoked through "show index-cache", make the display a - bit nicer. */ - if (in_show_index_cache_command) - { - indent = " "; - printf_unfiltered ("\n"); - } - - printf_unfiltered (_("%s Cache hits (this session): %u\n"), - indent, global_index_cache.n_hits ()); - printf_unfiltered (_("%sCache misses (this session): %u\n"), - indent, global_index_cache.n_misses ()); -} - -void -_initialize_index_cache () -{ - /* Set the default index cache directory. */ - std::string cache_dir = get_standard_cache_dir (); - if (!cache_dir.empty ()) - { - index_cache_directory = xstrdup (cache_dir.c_str ()); - global_index_cache.set_directory (std::move (cache_dir)); - } - else - warning (_("Couldn't determine a path for the index cache directory.")); - - /* set index-cache */ - add_prefix_cmd ("index-cache", class_files, set_index_cache_command, - _("Set index-cache options."), &set_index_cache_prefix_list, - "set index-cache ", false, &setlist); - - /* show index-cache */ - add_prefix_cmd ("index-cache", class_files, show_index_cache_command, - _("Show index-cache options."), &show_index_cache_prefix_list, - "show index-cache ", false, &showlist); - - /* set index-cache on */ - add_cmd ("on", class_files, set_index_cache_on_command, - _("Enable the index cache."), &set_index_cache_prefix_list); - - /* set index-cache off */ - add_cmd ("off", class_files, set_index_cache_off_command, - _("Disable the index cache."), &set_index_cache_prefix_list); - - /* set index-cache directory */ - add_setshow_filename_cmd ("directory", class_files, &index_cache_directory, - _("Set the directory of the index cache."), - _("Show the directory of the index cache."), - NULL, - set_index_cache_directory_command, NULL, - &set_index_cache_prefix_list, - &show_index_cache_prefix_list); - - /* show index-cache stats */ - add_cmd ("stats", class_files, show_index_cache_stats_command, - _("Show some stats about the index cache."), - &show_index_cache_prefix_list); - - /* set debug index-cache */ - add_setshow_boolean_cmd ("index-cache", class_maintenance, - &debug_index_cache, - _("Set display of index-cache debug messages."), - _("Show display of index-cache debug messages."), - _("\ -When non-zero, debugging output for the index cache is displayed."), - NULL, NULL, - &setdebuglist, &showdebuglist); -} diff -Nru gdb-9.1/gdb/dwarf-index-cache.h gdb-10.2/gdb/dwarf-index-cache.h --- gdb-9.1/gdb/dwarf-index-cache.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/dwarf-index-cache.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,112 +0,0 @@ -/* Caching of GDB/DWARF index files. - - Copyright (C) 2018-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef DWARF_INDEX_CACHE_H -#define DWARF_INDEX_CACHE_H - -#include "dwarf-index-common.h" -#include "gdbsupport/array-view.h" -#include "symfile.h" - -/* Base of the classes used to hold the resources of the indices loaded from - the cache (e.g. mmapped files). */ - -struct index_cache_resource -{ - virtual ~index_cache_resource () = 0; -}; - -/* Class to manage the access to the DWARF index cache. */ - -class index_cache -{ -public: - /* Change the directory used to save/load index files. */ - void set_directory (std::string dir); - - /* Return true if the usage of the cache is enabled. */ - bool enabled () const - { - return m_enabled; - } - - /* Enable the cache. */ - void enable (); - - /* Disable the cache. */ - void disable (); - - /* Store an index for the specified object file in the cache. */ - void store (struct dwarf2_per_objfile *dwarf2_per_objfile); - - /* Look for an index file matching BUILD_ID. If found, return the contents - as an array_view and store the underlying resources (allocated memory, - mapped file, etc) in RESOURCE. The returned array_view is valid as long - as RESOURCE is not destroyed. - - If no matching index file is found, return an empty array view. */ - gdb::array_view<const gdb_byte> - lookup_gdb_index (const bfd_build_id *build_id, - std::unique_ptr<index_cache_resource> *resource); - - /* Return the number of cache hits. */ - unsigned int n_hits () const - { return m_n_hits; } - - /* Record a cache hit. */ - void hit () - { - if (enabled ()) - m_n_hits++; - } - - /* Return the number of cache misses. */ - unsigned int n_misses () const - { return m_n_misses; } - - /* Record a cache miss. */ - void miss () - { - if (enabled ()) - m_n_misses++; - } - -private: - - /* Compute the absolute filename where the index of the objfile with build - id BUILD_ID will be stored. SUFFIX is appended at the end of the - filename. */ - std::string make_index_filename (const bfd_build_id *build_id, - const char *suffix) const; - - /* The base directory where we are storing and looking up index files. */ - std::string m_dir; - - /* Whether the cache is enabled. */ - bool m_enabled = false; - - /* Number of cache hits and misses during this GDB session. */ - unsigned int m_n_hits = 0; - unsigned int m_n_misses = 0; -}; - -/* The global instance of the index cache. */ -extern index_cache global_index_cache; - -#endif /* DWARF_INDEX_CACHE_H */ diff -Nru gdb-9.1/gdb/dwarf-index-common.c gdb-10.2/gdb/dwarf-index-common.c --- gdb-9.1/gdb/dwarf-index-common.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/dwarf-index-common.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,56 +0,0 @@ -/* Things needed for both reading and writing DWARF indices. - - Copyright (C) 1994-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "defs.h" -#include "dwarf-index-common.h" - -/* See dwarf-index-common.h. */ - -hashval_t -mapped_index_string_hash (int index_version, const void *p) -{ - const unsigned char *str = (const unsigned char *) p; - hashval_t r = 0; - unsigned char c; - - while ((c = *str++) != 0) - { - if (index_version >= 5) - c = tolower (c); - r = r * 67 + c - 113; - } - - return r; -} - -/* See dwarf-index-common.h. */ - -uint32_t -dwarf5_djb_hash (const char *str_) -{ - const unsigned char *str = (const unsigned char *) str_; - - /* Note: tolower here ignores UTF-8, which isn't fully compliant. - See http://dwarfstd.org/ShowIssue.php?issue=161027.1. */ - - uint32_t hash = 5381; - while (int c = *str++) - hash = hash * 33 + tolower (c); - return hash; -} diff -Nru gdb-9.1/gdb/dwarf-index-common.h gdb-10.2/gdb/dwarf-index-common.h --- gdb-9.1/gdb/dwarf-index-common.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/dwarf-index-common.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,68 +0,0 @@ -/* Things needed for both reading and writing DWARF indices. - - Copyright (C) 1994-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef DWARF_INDEX_COMMON_H -#define DWARF_INDEX_COMMON_H - -/* The suffix for an index file. */ -#define INDEX4_SUFFIX ".gdb-index" -#define INDEX5_SUFFIX ".debug_names" -#define DEBUG_STR_SUFFIX ".debug_str" - -/* All offsets in the index are of this type. It must be - architecture-independent. */ -typedef uint32_t offset_type; - -#if WORDS_BIGENDIAN - -/* Convert VALUE between big- and little-endian. */ - -static inline offset_type -byte_swap (offset_type value) -{ - offset_type result; - - result = (value & 0xff) << 24; - result |= (value & 0xff00) << 8; - result |= (value & 0xff0000) >> 8; - result |= (value & 0xff000000) >> 24; - return result; -} - -#define MAYBE_SWAP(V) byte_swap (V) - -#else -#define MAYBE_SWAP(V) static_cast<offset_type> (V) -#endif /* WORDS_BIGENDIAN */ - -/* The hash function for strings in the mapped index. This is the same as - SYMBOL_HASH_NEXT, but we keep a separate copy to maintain control over the - implementation. This is necessary because the hash function is tied to the - format of the mapped index file. The hash values do not have to match with - SYMBOL_HASH_NEXT. - - Use INT_MAX for INDEX_VERSION if you generate the current index format. */ - -hashval_t mapped_index_string_hash (int index_version, const void *p); - -/* Symbol name hashing function as specified by DWARF-5. */ - -uint32_t dwarf5_djb_hash (const char *str_); - -#endif /* DWARF_INDEX_COMMON_H */ diff -Nru gdb-9.1/gdb/dwarf-index-write.c gdb-10.2/gdb/dwarf-index-write.c --- gdb-9.1/gdb/dwarf-index-write.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/dwarf-index-write.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,1797 +0,0 @@ -/* DWARF index writing support for GDB. - - Copyright (C) 1994-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "defs.h" - -#include "dwarf-index-write.h" - -#include "addrmap.h" -#include "cli/cli-decode.h" -#include "gdbsupport/byte-vector.h" -#include "gdbsupport/filestuff.h" -#include "gdbsupport/gdb_unlinker.h" -#include "gdbsupport/pathstuff.h" -#include "gdbsupport/scoped_fd.h" -#include "complaints.h" -#include "dwarf-index-common.h" -#include "dwarf2.h" -#include "dwarf2read.h" -#include "gdb/gdb-index.h" -#include "gdbcmd.h" -#include "objfiles.h" -#include "psympriv.h" -#include "ada-lang.h" - -#include <algorithm> -#include <cmath> -#include <set> -#include <unordered_map> -#include <unordered_set> - -/* Ensure only legit values are used. */ -#define DW2_GDB_INDEX_SYMBOL_STATIC_SET_VALUE(cu_index, value) \ - do { \ - gdb_assert ((unsigned int) (value) <= 1); \ - GDB_INDEX_SYMBOL_STATIC_SET_VALUE((cu_index), (value)); \ - } while (0) - -/* Ensure only legit values are used. */ -#define DW2_GDB_INDEX_SYMBOL_KIND_SET_VALUE(cu_index, value) \ - do { \ - gdb_assert ((value) >= GDB_INDEX_SYMBOL_KIND_TYPE \ - && (value) <= GDB_INDEX_SYMBOL_KIND_OTHER); \ - GDB_INDEX_SYMBOL_KIND_SET_VALUE((cu_index), (value)); \ - } while (0) - -/* Ensure we don't use more than the allotted number of bits for the CU. */ -#define DW2_GDB_INDEX_CU_SET_VALUE(cu_index, value) \ - do { \ - gdb_assert (((value) & ~GDB_INDEX_CU_MASK) == 0); \ - GDB_INDEX_CU_SET_VALUE((cu_index), (value)); \ - } while (0) - -/* The "save gdb-index" command. */ - -/* Write SIZE bytes from the buffer pointed to by DATA to FILE, with - error checking. */ - -static void -file_write (FILE *file, const void *data, size_t size) -{ - if (fwrite (data, 1, size, file) != size) - error (_("couldn't data write to file")); -} - -/* Write the contents of VEC to FILE, with error checking. */ - -template<typename Elem, typename Alloc> -static void -file_write (FILE *file, const std::vector<Elem, Alloc> &vec) -{ - if (!vec.empty ()) - file_write (file, vec.data (), vec.size () * sizeof (vec[0])); -} - -/* In-memory buffer to prepare data to be written later to a file. */ -class data_buf -{ -public: - /* Copy DATA to the end of the buffer. */ - template<typename T> - void append_data (const T &data) - { - std::copy (reinterpret_cast<const gdb_byte *> (&data), - reinterpret_cast<const gdb_byte *> (&data + 1), - grow (sizeof (data))); - } - - /* Copy CSTR (a zero-terminated string) to the end of buffer. The - terminating zero is appended too. */ - void append_cstr0 (const char *cstr) - { - const size_t size = strlen (cstr) + 1; - std::copy (cstr, cstr + size, grow (size)); - } - - /* Store INPUT as ULEB128 to the end of buffer. */ - void append_unsigned_leb128 (ULONGEST input) - { - for (;;) - { - gdb_byte output = input & 0x7f; - input >>= 7; - if (input) - output |= 0x80; - append_data (output); - if (input == 0) - break; - } - } - - /* Accept a host-format integer in VAL and append it to the buffer - as a target-format integer which is LEN bytes long. */ - void append_uint (size_t len, bfd_endian byte_order, ULONGEST val) - { - ::store_unsigned_integer (grow (len), len, byte_order, val); - } - - /* Return the size of the buffer. */ - size_t size () const - { - return m_vec.size (); - } - - /* Return true iff the buffer is empty. */ - bool empty () const - { - return m_vec.empty (); - } - - /* Write the buffer to FILE. */ - void file_write (FILE *file) const - { - ::file_write (file, m_vec); - } - -private: - /* Grow SIZE bytes at the end of the buffer. Returns a pointer to - the start of the new block. */ - gdb_byte *grow (size_t size) - { - m_vec.resize (m_vec.size () + size); - return &*(m_vec.end () - size); - } - - gdb::byte_vector m_vec; -}; - -/* An entry in the symbol table. */ -struct symtab_index_entry -{ - /* The name of the symbol. */ - const char *name; - /* The offset of the name in the constant pool. */ - offset_type index_offset; - /* A sorted vector of the indices of all the CUs that hold an object - of this name. */ - std::vector<offset_type> cu_indices; -}; - -/* The symbol table. This is a power-of-2-sized hash table. */ -struct mapped_symtab -{ - mapped_symtab () - { - data.resize (1024); - } - - offset_type n_elements = 0; - std::vector<symtab_index_entry> data; -}; - -/* Find a slot in SYMTAB for the symbol NAME. Returns a reference to - the slot. - - Function is used only during write_hash_table so no index format backward - compatibility is needed. */ - -static symtab_index_entry & -find_slot (struct mapped_symtab *symtab, const char *name) -{ - offset_type index, step, hash = mapped_index_string_hash (INT_MAX, name); - - index = hash & (symtab->data.size () - 1); - step = ((hash * 17) & (symtab->data.size () - 1)) | 1; - - for (;;) - { - if (symtab->data[index].name == NULL - || strcmp (name, symtab->data[index].name) == 0) - return symtab->data[index]; - index = (index + step) & (symtab->data.size () - 1); - } -} - -/* Expand SYMTAB's hash table. */ - -static void -hash_expand (struct mapped_symtab *symtab) -{ - auto old_entries = std::move (symtab->data); - - symtab->data.clear (); - symtab->data.resize (old_entries.size () * 2); - - for (auto &it : old_entries) - if (it.name != NULL) - { - auto &ref = find_slot (symtab, it.name); - ref = std::move (it); - } -} - -/* Add an entry to SYMTAB. NAME is the name of the symbol. - CU_INDEX is the index of the CU in which the symbol appears. - IS_STATIC is one if the symbol is static, otherwise zero (global). */ - -static void -add_index_entry (struct mapped_symtab *symtab, const char *name, - int is_static, gdb_index_symbol_kind kind, - offset_type cu_index) -{ - offset_type cu_index_and_attrs; - - ++symtab->n_elements; - if (4 * symtab->n_elements / 3 >= symtab->data.size ()) - hash_expand (symtab); - - symtab_index_entry &slot = find_slot (symtab, name); - if (slot.name == NULL) - { - slot.name = name; - /* index_offset is set later. */ - } - - cu_index_and_attrs = 0; - DW2_GDB_INDEX_CU_SET_VALUE (cu_index_and_attrs, cu_index); - DW2_GDB_INDEX_SYMBOL_STATIC_SET_VALUE (cu_index_and_attrs, is_static); - DW2_GDB_INDEX_SYMBOL_KIND_SET_VALUE (cu_index_and_attrs, kind); - - /* We don't want to record an index value twice as we want to avoid the - duplication. - We process all global symbols and then all static symbols - (which would allow us to avoid the duplication by only having to check - the last entry pushed), but a symbol could have multiple kinds in one CU. - To keep things simple we don't worry about the duplication here and - sort and uniquify the list after we've processed all symbols. */ - slot.cu_indices.push_back (cu_index_and_attrs); -} - -/* Sort and remove duplicates of all symbols' cu_indices lists. */ - -static void -uniquify_cu_indices (struct mapped_symtab *symtab) -{ - for (auto &entry : symtab->data) - { - if (entry.name != NULL && !entry.cu_indices.empty ()) - { - auto &cu_indices = entry.cu_indices; - std::sort (cu_indices.begin (), cu_indices.end ()); - auto from = std::unique (cu_indices.begin (), cu_indices.end ()); - cu_indices.erase (from, cu_indices.end ()); - } - } -} - -/* A form of 'const char *' suitable for container keys. Only the - pointer is stored. The strings themselves are compared, not the - pointers. */ -class c_str_view -{ -public: - c_str_view (const char *cstr) - : m_cstr (cstr) - {} - - bool operator== (const c_str_view &other) const - { - return strcmp (m_cstr, other.m_cstr) == 0; - } - - /* Return the underlying C string. Note, the returned string is - only a reference with lifetime of this object. */ - const char *c_str () const - { - return m_cstr; - } - -private: - friend class c_str_view_hasher; - const char *const m_cstr; -}; - -/* A std::unordered_map::hasher for c_str_view that uses the right - hash function for strings in a mapped index. */ -class c_str_view_hasher -{ -public: - size_t operator () (const c_str_view &x) const - { - return mapped_index_string_hash (INT_MAX, x.m_cstr); - } -}; - -/* A std::unordered_map::hasher for std::vector<>. */ -template<typename T> -class vector_hasher -{ -public: - size_t operator () (const std::vector<T> &key) const - { - return iterative_hash (key.data (), - sizeof (key.front ()) * key.size (), 0); - } -}; - -/* Write the mapped hash table SYMTAB to the data buffer OUTPUT, with - constant pool entries going into the data buffer CPOOL. */ - -static void -write_hash_table (mapped_symtab *symtab, data_buf &output, data_buf &cpool) -{ - { - /* Elements are sorted vectors of the indices of all the CUs that - hold an object of this name. */ - std::unordered_map<std::vector<offset_type>, offset_type, - vector_hasher<offset_type>> - symbol_hash_table; - - /* We add all the index vectors to the constant pool first, to - ensure alignment is ok. */ - for (symtab_index_entry &entry : symtab->data) - { - if (entry.name == NULL) - continue; - gdb_assert (entry.index_offset == 0); - - /* Finding before inserting is faster than always trying to - insert, because inserting always allocates a node, does the - lookup, and then destroys the new node if another node - already had the same key. C++17 try_emplace will avoid - this. */ - const auto found - = symbol_hash_table.find (entry.cu_indices); - if (found != symbol_hash_table.end ()) - { - entry.index_offset = found->second; - continue; - } - - symbol_hash_table.emplace (entry.cu_indices, cpool.size ()); - entry.index_offset = cpool.size (); - cpool.append_data (MAYBE_SWAP (entry.cu_indices.size ())); - for (const auto index : entry.cu_indices) - cpool.append_data (MAYBE_SWAP (index)); - } - } - - /* Now write out the hash table. */ - std::unordered_map<c_str_view, offset_type, c_str_view_hasher> str_table; - for (const auto &entry : symtab->data) - { - offset_type str_off, vec_off; - - if (entry.name != NULL) - { - const auto insertpair = str_table.emplace (entry.name, cpool.size ()); - if (insertpair.second) - cpool.append_cstr0 (entry.name); - str_off = insertpair.first->second; - vec_off = entry.index_offset; - } - else - { - /* While 0 is a valid constant pool index, it is not valid - to have 0 for both offsets. */ - str_off = 0; - vec_off = 0; - } - - output.append_data (MAYBE_SWAP (str_off)); - output.append_data (MAYBE_SWAP (vec_off)); - } -} - -typedef std::unordered_map<partial_symtab *, unsigned int> psym_index_map; - -/* Helper struct for building the address table. */ -struct addrmap_index_data -{ - addrmap_index_data (data_buf &addr_vec_, psym_index_map &cu_index_htab_) - : addr_vec (addr_vec_), cu_index_htab (cu_index_htab_) - {} - - struct objfile *objfile; - data_buf &addr_vec; - psym_index_map &cu_index_htab; - - /* Non-zero if the previous_* fields are valid. - We can't write an entry until we see the next entry (since it is only then - that we know the end of the entry). */ - int previous_valid; - /* Index of the CU in the table of all CUs in the index file. */ - unsigned int previous_cu_index; - /* Start address of the CU. */ - CORE_ADDR previous_cu_start; -}; - -/* Write an address entry to ADDR_VEC. */ - -static void -add_address_entry (struct objfile *objfile, data_buf &addr_vec, - CORE_ADDR start, CORE_ADDR end, unsigned int cu_index) -{ - addr_vec.append_uint (8, BFD_ENDIAN_LITTLE, start); - addr_vec.append_uint (8, BFD_ENDIAN_LITTLE, end); - addr_vec.append_data (MAYBE_SWAP (cu_index)); -} - -/* Worker function for traversing an addrmap to build the address table. */ - -static int -add_address_entry_worker (void *datap, CORE_ADDR start_addr, void *obj) -{ - struct addrmap_index_data *data = (struct addrmap_index_data *) datap; - struct partial_symtab *pst = (struct partial_symtab *) obj; - - if (data->previous_valid) - add_address_entry (data->objfile, data->addr_vec, - data->previous_cu_start, start_addr, - data->previous_cu_index); - - data->previous_cu_start = start_addr; - if (pst != NULL) - { - const auto it = data->cu_index_htab.find (pst); - gdb_assert (it != data->cu_index_htab.cend ()); - data->previous_cu_index = it->second; - data->previous_valid = 1; - } - else - data->previous_valid = 0; - - return 0; -} - -/* Write OBJFILE's address map to ADDR_VEC. - CU_INDEX_HTAB is used to map addrmap entries to their CU indices - in the index file. */ - -static void -write_address_map (struct objfile *objfile, data_buf &addr_vec, - psym_index_map &cu_index_htab) -{ - struct addrmap_index_data addrmap_index_data (addr_vec, cu_index_htab); - - /* When writing the address table, we have to cope with the fact that - the addrmap iterator only provides the start of a region; we have to - wait until the next invocation to get the start of the next region. */ - - addrmap_index_data.objfile = objfile; - addrmap_index_data.previous_valid = 0; - - addrmap_foreach (objfile->partial_symtabs->psymtabs_addrmap, - add_address_entry_worker, &addrmap_index_data); - - /* It's highly unlikely the last entry (end address = 0xff...ff) - is valid, but we should still handle it. - The end address is recorded as the start of the next region, but that - doesn't work here. To cope we pass 0xff...ff, this is a rare situation - anyway. */ - if (addrmap_index_data.previous_valid) - add_address_entry (objfile, addr_vec, - addrmap_index_data.previous_cu_start, (CORE_ADDR) -1, - addrmap_index_data.previous_cu_index); -} - -/* Return the symbol kind of PSYM. */ - -static gdb_index_symbol_kind -symbol_kind (struct partial_symbol *psym) -{ - domain_enum domain = psym->domain; - enum address_class aclass = psym->aclass; - - switch (domain) - { - case VAR_DOMAIN: - switch (aclass) - { - case LOC_BLOCK: - return GDB_INDEX_SYMBOL_KIND_FUNCTION; - case LOC_TYPEDEF: - return GDB_INDEX_SYMBOL_KIND_TYPE; - case LOC_COMPUTED: - case LOC_CONST_BYTES: - case LOC_OPTIMIZED_OUT: - case LOC_STATIC: - return GDB_INDEX_SYMBOL_KIND_VARIABLE; - case LOC_CONST: - /* Note: It's currently impossible to recognize psyms as enum values - short of reading the type info. For now punt. */ - return GDB_INDEX_SYMBOL_KIND_VARIABLE; - default: - /* There are other LOC_FOO values that one might want to classify - as variables, but dwarf2read.c doesn't currently use them. */ - return GDB_INDEX_SYMBOL_KIND_OTHER; - } - case STRUCT_DOMAIN: - return GDB_INDEX_SYMBOL_KIND_TYPE; - default: - return GDB_INDEX_SYMBOL_KIND_OTHER; - } -} - -/* Add a list of partial symbols to SYMTAB. */ - -static void -write_psymbols (struct mapped_symtab *symtab, - std::unordered_set<partial_symbol *> &psyms_seen, - struct partial_symbol **psymp, - int count, - offset_type cu_index, - int is_static) -{ - for (; count-- > 0; ++psymp) - { - struct partial_symbol *psym = *psymp; - - if (psym->ginfo.language == language_ada) - error (_("Ada is not currently supported by the index; " - "use the DWARF 5 index instead")); - - /* Only add a given psymbol once. */ - if (psyms_seen.insert (psym).second) - { - gdb_index_symbol_kind kind = symbol_kind (psym); - - add_index_entry (symtab, psym->ginfo.search_name (), - is_static, kind, cu_index); - } - } -} - -/* A helper struct used when iterating over debug_types. */ -struct signatured_type_index_data -{ - signatured_type_index_data (data_buf &types_list_, - std::unordered_set<partial_symbol *> &psyms_seen_) - : types_list (types_list_), psyms_seen (psyms_seen_) - {} - - struct objfile *objfile; - struct mapped_symtab *symtab; - data_buf &types_list; - std::unordered_set<partial_symbol *> &psyms_seen; - int cu_index; -}; - -/* A helper function that writes a single signatured_type to an - obstack. */ - -static int -write_one_signatured_type (void **slot, void *d) -{ - struct signatured_type_index_data *info - = (struct signatured_type_index_data *) d; - struct signatured_type *entry = (struct signatured_type *) *slot; - struct partial_symtab *psymtab = entry->per_cu.v.psymtab; - - write_psymbols (info->symtab, - info->psyms_seen, - (info->objfile->partial_symtabs->global_psymbols.data () - + psymtab->globals_offset), - psymtab->n_global_syms, info->cu_index, - 0); - write_psymbols (info->symtab, - info->psyms_seen, - (info->objfile->partial_symtabs->static_psymbols.data () - + psymtab->statics_offset), - psymtab->n_static_syms, info->cu_index, - 1); - - info->types_list.append_uint (8, BFD_ENDIAN_LITTLE, - to_underlying (entry->per_cu.sect_off)); - info->types_list.append_uint (8, BFD_ENDIAN_LITTLE, - to_underlying (entry->type_offset_in_tu)); - info->types_list.append_uint (8, BFD_ENDIAN_LITTLE, entry->signature); - - ++info->cu_index; - - return 1; -} - -/* Recurse into all "included" dependencies and count their symbols as - if they appeared in this psymtab. */ - -static void -recursively_count_psymbols (struct partial_symtab *psymtab, - size_t &psyms_seen) -{ - for (int i = 0; i < psymtab->number_of_dependencies; ++i) - if (psymtab->dependencies[i]->user != NULL) - recursively_count_psymbols (psymtab->dependencies[i], - psyms_seen); - - psyms_seen += psymtab->n_global_syms; - psyms_seen += psymtab->n_static_syms; -} - -/* Recurse into all "included" dependencies and write their symbols as - if they appeared in this psymtab. */ - -static void -recursively_write_psymbols (struct objfile *objfile, - struct partial_symtab *psymtab, - struct mapped_symtab *symtab, - std::unordered_set<partial_symbol *> &psyms_seen, - offset_type cu_index) -{ - int i; - - for (i = 0; i < psymtab->number_of_dependencies; ++i) - if (psymtab->dependencies[i]->user != NULL) - recursively_write_psymbols (objfile, psymtab->dependencies[i], - symtab, psyms_seen, cu_index); - - write_psymbols (symtab, - psyms_seen, - (objfile->partial_symtabs->global_psymbols.data () - + psymtab->globals_offset), - psymtab->n_global_syms, cu_index, - 0); - write_psymbols (symtab, - psyms_seen, - (objfile->partial_symtabs->static_psymbols.data () - + psymtab->statics_offset), - psymtab->n_static_syms, cu_index, - 1); -} - -/* DWARF-5 .debug_names builder. */ -class debug_names -{ -public: - debug_names (struct dwarf2_per_objfile *dwarf2_per_objfile, bool is_dwarf64, - bfd_endian dwarf5_byte_order) - : m_dwarf5_byte_order (dwarf5_byte_order), - m_dwarf32 (dwarf5_byte_order), - m_dwarf64 (dwarf5_byte_order), - m_dwarf (is_dwarf64 - ? static_cast<dwarf &> (m_dwarf64) - : static_cast<dwarf &> (m_dwarf32)), - m_name_table_string_offs (m_dwarf.name_table_string_offs), - m_name_table_entry_offs (m_dwarf.name_table_entry_offs), - m_debugstrlookup (dwarf2_per_objfile) - {} - - int dwarf5_offset_size () const - { - const bool dwarf5_is_dwarf64 = &m_dwarf == &m_dwarf64; - return dwarf5_is_dwarf64 ? 8 : 4; - } - - /* Is this symbol from DW_TAG_compile_unit or DW_TAG_type_unit? */ - enum class unit_kind { cu, tu }; - - /* Insert one symbol. */ - void insert (const partial_symbol *psym, int cu_index, bool is_static, - unit_kind kind) - { - const int dwarf_tag = psymbol_tag (psym); - if (dwarf_tag == 0) - return; - const char *name = psym->ginfo.search_name (); - - if (psym->ginfo.language == language_ada) - { - /* We want to ensure that the Ada main function's name appears - verbatim in the index. However, this name will be of the - form "_ada_mumble", and will be rewritten by ada_decode. - So, recognize it specially here and add it to the index by - hand. */ - if (strcmp (main_name (), name) == 0) - { - const auto insertpair - = m_name_to_value_set.emplace (c_str_view (name), - std::set<symbol_value> ()); - std::set<symbol_value> &value_set = insertpair.first->second; - value_set.emplace (symbol_value (dwarf_tag, cu_index, is_static, - kind)); - } - - /* In order for the index to work when read back into gdb, it - has to supply a funny form of the name: it should be the - encoded name, with any suffixes stripped. Using the - ordinary encoded name will not work properly with the - searching logic in find_name_components_bounds; nor will - using the decoded name. Furthermore, an Ada "verbatim" - name (of the form "<MumBle>") must be entered without the - angle brackets. Note that the current index is unusual, - see PR symtab/24820 for details. */ - std::string decoded = ada_decode (name); - if (decoded[0] == '<') - name = (char *) obstack_copy0 (&m_string_obstack, - decoded.c_str () + 1, - decoded.length () - 2); - else - name = obstack_strdup (&m_string_obstack, - ada_encode (decoded.c_str ())); - } - - const auto insertpair - = m_name_to_value_set.emplace (c_str_view (name), - std::set<symbol_value> ()); - std::set<symbol_value> &value_set = insertpair.first->second; - value_set.emplace (symbol_value (dwarf_tag, cu_index, is_static, kind)); - } - - /* Build all the tables. All symbols must be already inserted. - This function does not call file_write, caller has to do it - afterwards. */ - void build () - { - /* Verify the build method has not be called twice. */ - gdb_assert (m_abbrev_table.empty ()); - const size_t name_count = m_name_to_value_set.size (); - m_bucket_table.resize - (std::pow (2, std::ceil (std::log2 (name_count * 4 / 3)))); - m_hash_table.reserve (name_count); - m_name_table_string_offs.reserve (name_count); - m_name_table_entry_offs.reserve (name_count); - - /* Map each hash of symbol to its name and value. */ - struct hash_it_pair - { - uint32_t hash; - decltype (m_name_to_value_set)::const_iterator it; - }; - std::vector<std::forward_list<hash_it_pair>> bucket_hash; - bucket_hash.resize (m_bucket_table.size ()); - for (decltype (m_name_to_value_set)::const_iterator it - = m_name_to_value_set.cbegin (); - it != m_name_to_value_set.cend (); - ++it) - { - const char *const name = it->first.c_str (); - const uint32_t hash = dwarf5_djb_hash (name); - hash_it_pair hashitpair; - hashitpair.hash = hash; - hashitpair.it = it; - auto &slot = bucket_hash[hash % bucket_hash.size()]; - slot.push_front (std::move (hashitpair)); - } - for (size_t bucket_ix = 0; bucket_ix < bucket_hash.size (); ++bucket_ix) - { - const std::forward_list<hash_it_pair> &hashitlist - = bucket_hash[bucket_ix]; - if (hashitlist.empty ()) - continue; - uint32_t &bucket_slot = m_bucket_table[bucket_ix]; - /* The hashes array is indexed starting at 1. */ - store_unsigned_integer (reinterpret_cast<gdb_byte *> (&bucket_slot), - sizeof (bucket_slot), m_dwarf5_byte_order, - m_hash_table.size () + 1); - for (const hash_it_pair &hashitpair : hashitlist) - { - m_hash_table.push_back (0); - store_unsigned_integer (reinterpret_cast<gdb_byte *> - (&m_hash_table.back ()), - sizeof (m_hash_table.back ()), - m_dwarf5_byte_order, hashitpair.hash); - const c_str_view &name = hashitpair.it->first; - const std::set<symbol_value> &value_set = hashitpair.it->second; - m_name_table_string_offs.push_back_reorder - (m_debugstrlookup.lookup (name.c_str ())); - m_name_table_entry_offs.push_back_reorder (m_entry_pool.size ()); - gdb_assert (!value_set.empty ()); - for (const symbol_value &value : value_set) - { - int &idx = m_indexkey_to_idx[index_key (value.dwarf_tag, - value.is_static, - value.kind)]; - if (idx == 0) - { - idx = m_idx_next++; - m_abbrev_table.append_unsigned_leb128 (idx); - m_abbrev_table.append_unsigned_leb128 (value.dwarf_tag); - m_abbrev_table.append_unsigned_leb128 - (value.kind == unit_kind::cu ? DW_IDX_compile_unit - : DW_IDX_type_unit); - m_abbrev_table.append_unsigned_leb128 (DW_FORM_udata); - m_abbrev_table.append_unsigned_leb128 (value.is_static - ? DW_IDX_GNU_internal - : DW_IDX_GNU_external); - m_abbrev_table.append_unsigned_leb128 (DW_FORM_flag_present); - - /* Terminate attributes list. */ - m_abbrev_table.append_unsigned_leb128 (0); - m_abbrev_table.append_unsigned_leb128 (0); - } - - m_entry_pool.append_unsigned_leb128 (idx); - m_entry_pool.append_unsigned_leb128 (value.cu_index); - } - - /* Terminate the list of CUs. */ - m_entry_pool.append_unsigned_leb128 (0); - } - } - gdb_assert (m_hash_table.size () == name_count); - - /* Terminate tags list. */ - m_abbrev_table.append_unsigned_leb128 (0); - } - - /* Return .debug_names bucket count. This must be called only after - calling the build method. */ - uint32_t bucket_count () const - { - /* Verify the build method has been already called. */ - gdb_assert (!m_abbrev_table.empty ()); - const uint32_t retval = m_bucket_table.size (); - - /* Check for overflow. */ - gdb_assert (retval == m_bucket_table.size ()); - return retval; - } - - /* Return .debug_names names count. This must be called only after - calling the build method. */ - uint32_t name_count () const - { - /* Verify the build method has been already called. */ - gdb_assert (!m_abbrev_table.empty ()); - const uint32_t retval = m_hash_table.size (); - - /* Check for overflow. */ - gdb_assert (retval == m_hash_table.size ()); - return retval; - } - - /* Return number of bytes of .debug_names abbreviation table. This - must be called only after calling the build method. */ - uint32_t abbrev_table_bytes () const - { - gdb_assert (!m_abbrev_table.empty ()); - return m_abbrev_table.size (); - } - - /* Recurse into all "included" dependencies and store their symbols - as if they appeared in this psymtab. */ - void recursively_write_psymbols - (struct objfile *objfile, - struct partial_symtab *psymtab, - std::unordered_set<partial_symbol *> &psyms_seen, - int cu_index) - { - for (int i = 0; i < psymtab->number_of_dependencies; ++i) - if (psymtab->dependencies[i]->user != NULL) - recursively_write_psymbols (objfile, psymtab->dependencies[i], - psyms_seen, cu_index); - - write_psymbols (psyms_seen, - (objfile->partial_symtabs->global_psymbols.data () - + psymtab->globals_offset), - psymtab->n_global_syms, cu_index, false, unit_kind::cu); - write_psymbols (psyms_seen, - (objfile->partial_symtabs->static_psymbols.data () - + psymtab->statics_offset), - psymtab->n_static_syms, cu_index, true, unit_kind::cu); - } - - /* Return number of bytes the .debug_names section will have. This - must be called only after calling the build method. */ - size_t bytes () const - { - /* Verify the build method has been already called. */ - gdb_assert (!m_abbrev_table.empty ()); - size_t expected_bytes = 0; - expected_bytes += m_bucket_table.size () * sizeof (m_bucket_table[0]); - expected_bytes += m_hash_table.size () * sizeof (m_hash_table[0]); - expected_bytes += m_name_table_string_offs.bytes (); - expected_bytes += m_name_table_entry_offs.bytes (); - expected_bytes += m_abbrev_table.size (); - expected_bytes += m_entry_pool.size (); - return expected_bytes; - } - - /* Write .debug_names to FILE_NAMES and .debug_str addition to - FILE_STR. This must be called only after calling the build - method. */ - void file_write (FILE *file_names, FILE *file_str) const - { - /* Verify the build method has been already called. */ - gdb_assert (!m_abbrev_table.empty ()); - ::file_write (file_names, m_bucket_table); - ::file_write (file_names, m_hash_table); - m_name_table_string_offs.file_write (file_names); - m_name_table_entry_offs.file_write (file_names); - m_abbrev_table.file_write (file_names); - m_entry_pool.file_write (file_names); - m_debugstrlookup.file_write (file_str); - } - - /* A helper user data for write_one_signatured_type. */ - class write_one_signatured_type_data - { - public: - write_one_signatured_type_data (debug_names &nametable_, - signatured_type_index_data &&info_) - : nametable (nametable_), info (std::move (info_)) - {} - debug_names &nametable; - struct signatured_type_index_data info; - }; - - /* A helper function to pass write_one_signatured_type to - htab_traverse_noresize. */ - static int - write_one_signatured_type (void **slot, void *d) - { - write_one_signatured_type_data *data = (write_one_signatured_type_data *) d; - struct signatured_type_index_data *info = &data->info; - struct signatured_type *entry = (struct signatured_type *) *slot; - - data->nametable.write_one_signatured_type (entry, info); - - return 1; - } - -private: - - /* Storage for symbol names mapping them to their .debug_str section - offsets. */ - class debug_str_lookup - { - public: - - /* Object constructor to be called for current DWARF2_PER_OBJFILE. - All .debug_str section strings are automatically stored. */ - debug_str_lookup (struct dwarf2_per_objfile *dwarf2_per_objfile) - : m_abfd (dwarf2_per_objfile->objfile->obfd), - m_dwarf2_per_objfile (dwarf2_per_objfile) - { - dwarf2_read_section (dwarf2_per_objfile->objfile, - &dwarf2_per_objfile->str); - if (dwarf2_per_objfile->str.buffer == NULL) - return; - for (const gdb_byte *data = dwarf2_per_objfile->str.buffer; - data < (dwarf2_per_objfile->str.buffer - + dwarf2_per_objfile->str.size);) - { - const char *const s = reinterpret_cast<const char *> (data); - const auto insertpair - = m_str_table.emplace (c_str_view (s), - data - dwarf2_per_objfile->str.buffer); - if (!insertpair.second) - complaint (_("Duplicate string \"%s\" in " - ".debug_str section [in module %s]"), - s, bfd_get_filename (m_abfd)); - data += strlen (s) + 1; - } - } - - /* Return offset of symbol name S in the .debug_str section. Add - such symbol to the section's end if it does not exist there - yet. */ - size_t lookup (const char *s) - { - const auto it = m_str_table.find (c_str_view (s)); - if (it != m_str_table.end ()) - return it->second; - const size_t offset = (m_dwarf2_per_objfile->str.size - + m_str_add_buf.size ()); - m_str_table.emplace (c_str_view (s), offset); - m_str_add_buf.append_cstr0 (s); - return offset; - } - - /* Append the end of the .debug_str section to FILE. */ - void file_write (FILE *file) const - { - m_str_add_buf.file_write (file); - } - - private: - std::unordered_map<c_str_view, size_t, c_str_view_hasher> m_str_table; - bfd *const m_abfd; - struct dwarf2_per_objfile *m_dwarf2_per_objfile; - - /* Data to add at the end of .debug_str for new needed symbol names. */ - data_buf m_str_add_buf; - }; - - /* Container to map used DWARF tags to their .debug_names abbreviation - tags. */ - class index_key - { - public: - index_key (int dwarf_tag_, bool is_static_, unit_kind kind_) - : dwarf_tag (dwarf_tag_), is_static (is_static_), kind (kind_) - { - } - - bool - operator== (const index_key &other) const - { - return (dwarf_tag == other.dwarf_tag && is_static == other.is_static - && kind == other.kind); - } - - const int dwarf_tag; - const bool is_static; - const unit_kind kind; - }; - - /* Provide std::unordered_map::hasher for index_key. */ - class index_key_hasher - { - public: - size_t - operator () (const index_key &key) const - { - return (std::hash<int>() (key.dwarf_tag) << 1) | key.is_static; - } - }; - - /* Parameters of one symbol entry. */ - class symbol_value - { - public: - const int dwarf_tag, cu_index; - const bool is_static; - const unit_kind kind; - - symbol_value (int dwarf_tag_, int cu_index_, bool is_static_, - unit_kind kind_) - : dwarf_tag (dwarf_tag_), cu_index (cu_index_), is_static (is_static_), - kind (kind_) - {} - - bool - operator< (const symbol_value &other) const - { -#define X(n) \ - do \ - { \ - if (n < other.n) \ - return true; \ - if (n > other.n) \ - return false; \ - } \ - while (0) - X (dwarf_tag); - X (is_static); - X (kind); - X (cu_index); -#undef X - return false; - } - }; - - /* Abstract base class to unify DWARF-32 and DWARF-64 name table - output. */ - class offset_vec - { - protected: - const bfd_endian dwarf5_byte_order; - public: - explicit offset_vec (bfd_endian dwarf5_byte_order_) - : dwarf5_byte_order (dwarf5_byte_order_) - {} - - /* Call std::vector::reserve for NELEM elements. */ - virtual void reserve (size_t nelem) = 0; - - /* Call std::vector::push_back with store_unsigned_integer byte - reordering for ELEM. */ - virtual void push_back_reorder (size_t elem) = 0; - - /* Return expected output size in bytes. */ - virtual size_t bytes () const = 0; - - /* Write name table to FILE. */ - virtual void file_write (FILE *file) const = 0; - }; - - /* Template to unify DWARF-32 and DWARF-64 output. */ - template<typename OffsetSize> - class offset_vec_tmpl : public offset_vec - { - public: - explicit offset_vec_tmpl (bfd_endian dwarf5_byte_order_) - : offset_vec (dwarf5_byte_order_) - {} - - /* Implement offset_vec::reserve. */ - void reserve (size_t nelem) override - { - m_vec.reserve (nelem); - } - - /* Implement offset_vec::push_back_reorder. */ - void push_back_reorder (size_t elem) override - { - m_vec.push_back (elem); - /* Check for overflow. */ - gdb_assert (m_vec.back () == elem); - store_unsigned_integer (reinterpret_cast<gdb_byte *> (&m_vec.back ()), - sizeof (m_vec.back ()), dwarf5_byte_order, elem); - } - - /* Implement offset_vec::bytes. */ - size_t bytes () const override - { - return m_vec.size () * sizeof (m_vec[0]); - } - - /* Implement offset_vec::file_write. */ - void file_write (FILE *file) const override - { - ::file_write (file, m_vec); - } - - private: - std::vector<OffsetSize> m_vec; - }; - - /* Base class to unify DWARF-32 and DWARF-64 .debug_names output - respecting name table width. */ - class dwarf - { - public: - offset_vec &name_table_string_offs, &name_table_entry_offs; - - dwarf (offset_vec &name_table_string_offs_, - offset_vec &name_table_entry_offs_) - : name_table_string_offs (name_table_string_offs_), - name_table_entry_offs (name_table_entry_offs_) - { - } - }; - - /* Template to unify DWARF-32 and DWARF-64 .debug_names output - respecting name table width. */ - template<typename OffsetSize> - class dwarf_tmpl : public dwarf - { - public: - explicit dwarf_tmpl (bfd_endian dwarf5_byte_order_) - : dwarf (m_name_table_string_offs, m_name_table_entry_offs), - m_name_table_string_offs (dwarf5_byte_order_), - m_name_table_entry_offs (dwarf5_byte_order_) - {} - - private: - offset_vec_tmpl<OffsetSize> m_name_table_string_offs; - offset_vec_tmpl<OffsetSize> m_name_table_entry_offs; - }; - - /* Try to reconstruct original DWARF tag for given partial_symbol. - This function is not DWARF-5 compliant but it is sufficient for - GDB as a DWARF-5 index consumer. */ - static int psymbol_tag (const struct partial_symbol *psym) - { - domain_enum domain = psym->domain; - enum address_class aclass = psym->aclass; - - switch (domain) - { - case VAR_DOMAIN: - switch (aclass) - { - case LOC_BLOCK: - return DW_TAG_subprogram; - case LOC_TYPEDEF: - return DW_TAG_typedef; - case LOC_COMPUTED: - case LOC_CONST_BYTES: - case LOC_OPTIMIZED_OUT: - case LOC_STATIC: - return DW_TAG_variable; - case LOC_CONST: - /* Note: It's currently impossible to recognize psyms as enum values - short of reading the type info. For now punt. */ - return DW_TAG_variable; - default: - /* There are other LOC_FOO values that one might want to classify - as variables, but dwarf2read.c doesn't currently use them. */ - return DW_TAG_variable; - } - case STRUCT_DOMAIN: - return DW_TAG_structure_type; - default: - return 0; - } - } - - /* Call insert for all partial symbols and mark them in PSYMS_SEEN. */ - void write_psymbols (std::unordered_set<partial_symbol *> &psyms_seen, - struct partial_symbol **psymp, int count, int cu_index, - bool is_static, unit_kind kind) - { - for (; count-- > 0; ++psymp) - { - struct partial_symbol *psym = *psymp; - - /* Only add a given psymbol once. */ - if (psyms_seen.insert (psym).second) - insert (psym, cu_index, is_static, kind); - } - } - - /* A helper function that writes a single signatured_type - to a debug_names. */ - void - write_one_signatured_type (struct signatured_type *entry, - struct signatured_type_index_data *info) - { - struct partial_symtab *psymtab = entry->per_cu.v.psymtab; - - write_psymbols (info->psyms_seen, - (info->objfile->partial_symtabs->global_psymbols.data () - + psymtab->globals_offset), - psymtab->n_global_syms, info->cu_index, false, - unit_kind::tu); - write_psymbols (info->psyms_seen, - (info->objfile->partial_symtabs->static_psymbols.data () - + psymtab->statics_offset), - psymtab->n_static_syms, info->cu_index, true, - unit_kind::tu); - - info->types_list.append_uint (dwarf5_offset_size (), m_dwarf5_byte_order, - to_underlying (entry->per_cu.sect_off)); - - ++info->cu_index; - } - - /* Store value of each symbol. */ - std::unordered_map<c_str_view, std::set<symbol_value>, c_str_view_hasher> - m_name_to_value_set; - - /* Tables of DWARF-5 .debug_names. They are in object file byte - order. */ - std::vector<uint32_t> m_bucket_table; - std::vector<uint32_t> m_hash_table; - - const bfd_endian m_dwarf5_byte_order; - dwarf_tmpl<uint32_t> m_dwarf32; - dwarf_tmpl<uint64_t> m_dwarf64; - dwarf &m_dwarf; - offset_vec &m_name_table_string_offs, &m_name_table_entry_offs; - debug_str_lookup m_debugstrlookup; - - /* Map each used .debug_names abbreviation tag parameter to its - index value. */ - std::unordered_map<index_key, int, index_key_hasher> m_indexkey_to_idx; - - /* Next unused .debug_names abbreviation tag for - m_indexkey_to_idx. */ - int m_idx_next = 1; - - /* .debug_names abbreviation table. */ - data_buf m_abbrev_table; - - /* .debug_names entry pool. */ - data_buf m_entry_pool; - - /* Temporary storage for Ada names. */ - auto_obstack m_string_obstack; -}; - -/* Return iff any of the needed offsets does not fit into 32-bit - .debug_names section. */ - -static bool -check_dwarf64_offsets (struct dwarf2_per_objfile *dwarf2_per_objfile) -{ - for (dwarf2_per_cu_data *per_cu : dwarf2_per_objfile->all_comp_units) - { - if (to_underlying (per_cu->sect_off) >= (static_cast<uint64_t> (1) << 32)) - return true; - } - for (const signatured_type *sigtype : dwarf2_per_objfile->all_type_units) - { - const dwarf2_per_cu_data &per_cu = sigtype->per_cu; - - if (to_underlying (per_cu.sect_off) >= (static_cast<uint64_t> (1) << 32)) - return true; - } - return false; -} - -/* The psyms_seen set is potentially going to be largish (~40k - elements when indexing a -g3 build of GDB itself). Estimate the - number of elements in order to avoid too many rehashes, which - require rebuilding buckets and thus many trips to - malloc/free. */ - -static size_t -psyms_seen_size (struct dwarf2_per_objfile *dwarf2_per_objfile) -{ - size_t psyms_count = 0; - for (dwarf2_per_cu_data *per_cu : dwarf2_per_objfile->all_comp_units) - { - struct partial_symtab *psymtab = per_cu->v.psymtab; - - if (psymtab != NULL && psymtab->user == NULL) - recursively_count_psymbols (psymtab, psyms_count); - } - /* Generating an index for gdb itself shows a ratio of - TOTAL_SEEN_SYMS/UNIQUE_SYMS or ~5. 4 seems like a good bet. */ - return psyms_count / 4; -} - -/* Assert that FILE's size is EXPECTED_SIZE. Assumes file's seek - position is at the end of the file. */ - -static void -assert_file_size (FILE *file, size_t expected_size) -{ - const auto file_size = ftell (file); - if (file_size == -1) - perror_with_name (("ftell")); - gdb_assert (file_size == expected_size); -} - -/* Write a gdb index file to OUT_FILE from all the sections passed as - arguments. */ - -static void -write_gdbindex_1 (FILE *out_file, - const data_buf &cu_list, - const data_buf &types_cu_list, - const data_buf &addr_vec, - const data_buf &symtab_vec, - const data_buf &constant_pool) -{ - data_buf contents; - const offset_type size_of_header = 6 * sizeof (offset_type); - offset_type total_len = size_of_header; - - /* The version number. */ - contents.append_data (MAYBE_SWAP (8)); - - /* The offset of the CU list from the start of the file. */ - contents.append_data (MAYBE_SWAP (total_len)); - total_len += cu_list.size (); - - /* The offset of the types CU list from the start of the file. */ - contents.append_data (MAYBE_SWAP (total_len)); - total_len += types_cu_list.size (); - - /* The offset of the address table from the start of the file. */ - contents.append_data (MAYBE_SWAP (total_len)); - total_len += addr_vec.size (); - - /* The offset of the symbol table from the start of the file. */ - contents.append_data (MAYBE_SWAP (total_len)); - total_len += symtab_vec.size (); - - /* The offset of the constant pool from the start of the file. */ - contents.append_data (MAYBE_SWAP (total_len)); - total_len += constant_pool.size (); - - gdb_assert (contents.size () == size_of_header); - - contents.file_write (out_file); - cu_list.file_write (out_file); - types_cu_list.file_write (out_file); - addr_vec.file_write (out_file); - symtab_vec.file_write (out_file); - constant_pool.file_write (out_file); - - assert_file_size (out_file, total_len); -} - -/* Write contents of a .gdb_index section for OBJFILE into OUT_FILE. - If OBJFILE has an associated dwz file, write contents of a .gdb_index - section for that dwz file into DWZ_OUT_FILE. If OBJFILE does not have an - associated dwz file, DWZ_OUT_FILE must be NULL. */ - -static void -write_gdbindex (struct dwarf2_per_objfile *dwarf2_per_objfile, FILE *out_file, - FILE *dwz_out_file) -{ - struct objfile *objfile = dwarf2_per_objfile->objfile; - mapped_symtab symtab; - data_buf objfile_cu_list; - data_buf dwz_cu_list; - - /* While we're scanning CU's create a table that maps a psymtab pointer - (which is what addrmap records) to its index (which is what is recorded - in the index file). This will later be needed to write the address - table. */ - psym_index_map cu_index_htab; - cu_index_htab.reserve (dwarf2_per_objfile->all_comp_units.size ()); - - /* The CU list is already sorted, so we don't need to do additional - work here. Also, the debug_types entries do not appear in - all_comp_units, but only in their own hash table. */ - - std::unordered_set<partial_symbol *> psyms_seen - (psyms_seen_size (dwarf2_per_objfile)); - for (int i = 0; i < dwarf2_per_objfile->all_comp_units.size (); ++i) - { - struct dwarf2_per_cu_data *per_cu - = dwarf2_per_objfile->all_comp_units[i]; - struct partial_symtab *psymtab = per_cu->v.psymtab; - - /* 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 .gdb_index. */ - if (psymtab == NULL) - continue; - - if (psymtab->user == NULL) - recursively_write_psymbols (objfile, psymtab, &symtab, - psyms_seen, i); - - const auto insertpair = cu_index_htab.emplace (psymtab, i); - gdb_assert (insertpair.second); - - /* The all_comp_units list contains CUs read from the objfile as well as - from the eventual dwz file. We need to place the entry in the - corresponding index. */ - data_buf &cu_list = per_cu->is_dwz ? dwz_cu_list : objfile_cu_list; - cu_list.append_uint (8, BFD_ENDIAN_LITTLE, - to_underlying (per_cu->sect_off)); - cu_list.append_uint (8, BFD_ENDIAN_LITTLE, per_cu->length); - } - - /* Dump the address map. */ - data_buf addr_vec; - write_address_map (objfile, addr_vec, cu_index_htab); - - /* Write out the .debug_type entries, if any. */ - data_buf types_cu_list; - if (dwarf2_per_objfile->signatured_types) - { - signatured_type_index_data sig_data (types_cu_list, - psyms_seen); - - sig_data.objfile = objfile; - sig_data.symtab = &symtab; - sig_data.cu_index = dwarf2_per_objfile->all_comp_units.size (); - htab_traverse_noresize (dwarf2_per_objfile->signatured_types, - write_one_signatured_type, &sig_data); - } - - /* Now that we've processed all symbols we can shrink their cu_indices - lists. */ - uniquify_cu_indices (&symtab); - - data_buf symtab_vec, constant_pool; - write_hash_table (&symtab, symtab_vec, constant_pool); - - write_gdbindex_1(out_file, objfile_cu_list, types_cu_list, addr_vec, - symtab_vec, constant_pool); - - if (dwz_out_file != NULL) - write_gdbindex_1 (dwz_out_file, dwz_cu_list, {}, {}, {}, {}); - else - gdb_assert (dwz_cu_list.empty ()); -} - -/* DWARF-5 augmentation string for GDB's DW_IDX_GNU_* extension. */ -static const gdb_byte dwarf5_gdb_augmentation[] = { 'G', 'D', 'B', 0 }; - -/* Write a new .debug_names section for OBJFILE into OUT_FILE, write - needed addition to .debug_str section to OUT_FILE_STR. Return how - many bytes were expected to be written into OUT_FILE. */ - -static void -write_debug_names (struct dwarf2_per_objfile *dwarf2_per_objfile, - FILE *out_file, FILE *out_file_str) -{ - const bool dwarf5_is_dwarf64 = check_dwarf64_offsets (dwarf2_per_objfile); - struct objfile *objfile = dwarf2_per_objfile->objfile; - const enum bfd_endian dwarf5_byte_order - = gdbarch_byte_order (get_objfile_arch (objfile)); - - /* The CU list is already sorted, so we don't need to do additional - work here. Also, the debug_types entries do not appear in - all_comp_units, but only in their own hash table. */ - data_buf cu_list; - debug_names nametable (dwarf2_per_objfile, dwarf5_is_dwarf64, - dwarf5_byte_order); - std::unordered_set<partial_symbol *> - psyms_seen (psyms_seen_size (dwarf2_per_objfile)); - for (int i = 0; i < dwarf2_per_objfile->all_comp_units.size (); ++i) - { - const dwarf2_per_cu_data *per_cu = dwarf2_per_objfile->all_comp_units[i]; - partial_symtab *psymtab = per_cu->v.psymtab; - - /* 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; - - if (psymtab->user == NULL) - nametable.recursively_write_psymbols (objfile, psymtab, psyms_seen, i); - - cu_list.append_uint (nametable.dwarf5_offset_size (), dwarf5_byte_order, - to_underlying (per_cu->sect_off)); - } - - /* Write out the .debug_type entries, if any. */ - data_buf types_cu_list; - if (dwarf2_per_objfile->signatured_types) - { - debug_names::write_one_signatured_type_data sig_data (nametable, - signatured_type_index_data (types_cu_list, psyms_seen)); - - sig_data.info.objfile = objfile; - /* It is used only for gdb_index. */ - sig_data.info.symtab = nullptr; - sig_data.info.cu_index = 0; - htab_traverse_noresize (dwarf2_per_objfile->signatured_types, - debug_names::write_one_signatured_type, - &sig_data); - } - - nametable.build (); - - /* No addr_vec - DWARF-5 uses .debug_aranges generated by GCC. */ - - const offset_type bytes_of_header - = ((dwarf5_is_dwarf64 ? 12 : 4) - + 2 + 2 + 7 * 4 - + sizeof (dwarf5_gdb_augmentation)); - size_t expected_bytes = 0; - expected_bytes += bytes_of_header; - expected_bytes += cu_list.size (); - expected_bytes += types_cu_list.size (); - expected_bytes += nametable.bytes (); - data_buf header; - - if (!dwarf5_is_dwarf64) - { - const uint64_t size64 = expected_bytes - 4; - gdb_assert (size64 < 0xfffffff0); - header.append_uint (4, dwarf5_byte_order, size64); - } - else - { - header.append_uint (4, dwarf5_byte_order, 0xffffffff); - header.append_uint (8, dwarf5_byte_order, expected_bytes - 12); - } - - /* The version number. */ - header.append_uint (2, dwarf5_byte_order, 5); - - /* Padding. */ - header.append_uint (2, dwarf5_byte_order, 0); - - /* comp_unit_count - The number of CUs in the CU list. */ - header.append_uint (4, dwarf5_byte_order, - dwarf2_per_objfile->all_comp_units.size ()); - - /* local_type_unit_count - The number of TUs in the local TU - list. */ - header.append_uint (4, dwarf5_byte_order, - dwarf2_per_objfile->all_type_units.size ()); - - /* foreign_type_unit_count - The number of TUs in the foreign TU - list. */ - header.append_uint (4, dwarf5_byte_order, 0); - - /* bucket_count - The number of hash buckets in the hash lookup - table. */ - header.append_uint (4, dwarf5_byte_order, nametable.bucket_count ()); - - /* name_count - The number of unique names in the index. */ - header.append_uint (4, dwarf5_byte_order, nametable.name_count ()); - - /* abbrev_table_size - The size in bytes of the abbreviations - table. */ - header.append_uint (4, dwarf5_byte_order, nametable.abbrev_table_bytes ()); - - /* augmentation_string_size - The size in bytes of the augmentation - string. This value is rounded up to a multiple of 4. */ - static_assert (sizeof (dwarf5_gdb_augmentation) % 4 == 0, ""); - header.append_uint (4, dwarf5_byte_order, sizeof (dwarf5_gdb_augmentation)); - header.append_data (dwarf5_gdb_augmentation); - - gdb_assert (header.size () == bytes_of_header); - - header.file_write (out_file); - cu_list.file_write (out_file); - types_cu_list.file_write (out_file); - nametable.file_write (out_file, out_file_str); - - assert_file_size (out_file, expected_bytes); -} - -/* This represents an index file being written (work-in-progress). - - The data is initially written to a temporary file. When the finalize method - is called, the file is closed and moved to its final location. - - On failure (if this object is being destroyed with having called finalize), - the temporary file is closed and deleted. */ - -struct index_wip_file -{ - index_wip_file (const char *dir, const char *basename, - const char *suffix) - { - filename = (std::string (dir) + SLASH_STRING + basename - + suffix); - - filename_temp = make_temp_filename (filename); - - scoped_fd out_file_fd (gdb_mkostemp_cloexec (filename_temp.data (), - O_BINARY)); - if (out_file_fd.get () == -1) - perror_with_name (("mkstemp")); - - out_file = out_file_fd.to_file ("wb"); - - if (out_file == nullptr) - error (_("Can't open `%s' for writing"), filename_temp.data ()); - - unlink_file.emplace (filename_temp.data ()); - } - - void finalize () - { - /* We want to keep the file. */ - unlink_file->keep (); - - /* Close and move the str file in place. */ - unlink_file.reset (); - if (rename (filename_temp.data (), filename.c_str ()) != 0) - perror_with_name (("rename")); - } - - std::string filename; - gdb::char_vector filename_temp; - - /* Order matters here; we want FILE to be closed before - FILENAME_TEMP is unlinked, because on MS-Windows one cannot - delete a file that is still open. So, we wrap the unlinker in an - optional and emplace it once we know the file name. */ - gdb::optional<gdb::unlinker> unlink_file; - - gdb_file_up out_file; -}; - -/* See dwarf-index-write.h. */ - -void -write_psymtabs_to_index (struct dwarf2_per_objfile *dwarf2_per_objfile, - const char *dir, const char *basename, - const char *dwz_basename, - dw_index_kind index_kind) -{ - struct objfile *objfile = dwarf2_per_objfile->objfile; - - if (dwarf2_per_objfile->using_index) - error (_("Cannot use an index to create the index")); - - if (dwarf2_per_objfile->types.size () > 1) - error (_("Cannot make an index when the file has multiple .debug_types sections")); - - if (!objfile->partial_symtabs->psymtabs - || !objfile->partial_symtabs->psymtabs_addrmap) - return; - - struct stat st; - if (stat (objfile_name (objfile), &st) < 0) - perror_with_name (objfile_name (objfile)); - - const char *index_suffix = (index_kind == dw_index_kind::DEBUG_NAMES - ? INDEX5_SUFFIX : INDEX4_SUFFIX); - - index_wip_file objfile_index_wip (dir, basename, index_suffix); - gdb::optional<index_wip_file> dwz_index_wip; - - if (dwz_basename != NULL) - dwz_index_wip.emplace (dir, dwz_basename, index_suffix); - - if (index_kind == dw_index_kind::DEBUG_NAMES) - { - index_wip_file str_wip_file (dir, basename, DEBUG_STR_SUFFIX); - - write_debug_names (dwarf2_per_objfile, objfile_index_wip.out_file.get (), - str_wip_file.out_file.get ()); - - str_wip_file.finalize (); - } - else - write_gdbindex (dwarf2_per_objfile, objfile_index_wip.out_file.get (), - (dwz_index_wip.has_value () - ? dwz_index_wip->out_file.get () : NULL)); - - objfile_index_wip.finalize (); - - if (dwz_index_wip.has_value ()) - dwz_index_wip->finalize (); -} - -/* Implementation of the `save gdb-index' command. - - Note that the .gdb_index file format used by this command is - documented in the GDB manual. Any changes here must be documented - there. */ - -static void -save_gdb_index_command (const char *arg, int from_tty) -{ - const char dwarf5space[] = "-dwarf-5 "; - dw_index_kind index_kind = dw_index_kind::GDB_INDEX; - - if (!arg) - arg = ""; - - arg = skip_spaces (arg); - if (strncmp (arg, dwarf5space, strlen (dwarf5space)) == 0) - { - index_kind = dw_index_kind::DEBUG_NAMES; - arg += strlen (dwarf5space); - arg = skip_spaces (arg); - } - - if (!*arg) - error (_("usage: save gdb-index [-dwarf-5] DIRECTORY")); - - for (objfile *objfile : current_program_space->objfiles ()) - { - struct stat st; - - /* If the objfile does not correspond to an actual file, skip it. */ - if (stat (objfile_name (objfile), &st) < 0) - continue; - - struct dwarf2_per_objfile *dwarf2_per_objfile - = get_dwarf2_per_objfile (objfile); - - if (dwarf2_per_objfile != NULL) - { - try - { - const char *basename = lbasename (objfile_name (objfile)); - const dwz_file *dwz = dwarf2_get_dwz_file (dwarf2_per_objfile); - const char *dwz_basename = NULL; - - if (dwz != NULL) - dwz_basename = lbasename (dwz->filename ()); - - write_psymtabs_to_index (dwarf2_per_objfile, arg, basename, - dwz_basename, index_kind); - } - catch (const gdb_exception_error &except) - { - exception_fprintf (gdb_stderr, except, - _("Error while writing index for `%s': "), - objfile_name (objfile)); - } - } - - } -} - -void -_initialize_dwarf_index_write () -{ - cmd_list_element *c = add_cmd ("gdb-index", class_files, - save_gdb_index_command, _("\ -Save a gdb-index file.\n\ -Usage: save gdb-index [-dwarf-5] DIRECTORY\n\ -\n\ -No options create one file with .gdb-index extension for pre-DWARF-5\n\ -compatible .gdb_index section. With -dwarf-5 creates two files with\n\ -extension .debug_names and .debug_str for DWARF-5 .debug_names section."), - &save_cmdlist); - set_cmd_completer (c, filename_completer); -} diff -Nru gdb-9.1/gdb/dwarf-index-write.h gdb-10.2/gdb/dwarf-index-write.h --- gdb-9.1/gdb/dwarf-index-write.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/dwarf-index-write.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,39 +0,0 @@ -/* DWARF index writing support for GDB. - - Copyright (C) 2018-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef DWARF_INDEX_WRITE_H -#define DWARF_INDEX_WRITE_H - -#include "symfile.h" -#include "dwarf2read.h" - -/* Create index files for OBJFILE in the directory DIR. - - An index file is created for OBJFILE itself, and is created for its - associated dwz file, if it has one. - - BASENAME is the desired filename base for OBJFILE's index. An extension - derived from INDEX_KIND is added to this base name. DWZ_BASENAME is the - same, but for the dwz file's index. */ - -extern void write_psymtabs_to_index - (struct dwarf2_per_objfile *dwarf2_per_objfile, const char *dir, - const char *basename, const char *dwz_basename, dw_index_kind index_kind); - -#endif /* DWARF_INDEX_WRITE_H */ diff -Nru gdb-9.1/gdb/elfread.c gdb-10.2/gdb/elfread.c --- gdb-9.1/gdb/elfread.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/elfread.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Read ELF (Executable and Linking Format) object files for GDB. - Copyright (C) 1991-2020 Free Software Foundation, Inc. + Copyright (C) 1991-2021 Free Software Foundation, Inc. Written by Fred Fish at Cygnus Support. @@ -49,6 +49,8 @@ #include "mdebugread.h" #include "ctfread.h" #include "gdbsupport/gdb_string_view.h" +#include "gdbsupport/scoped_fd.h" +#include "debuginfod-support.h" /* Forward declarations. */ extern const struct sym_fns elf_sym_fns_gdb_index; @@ -83,14 +85,13 @@ /* Locate the segments in ABFD. */ -static struct symfile_segment_data * +static symfile_segment_data_up elf_symfile_segments (bfd *abfd) { Elf_Internal_Phdr *phdrs, **segments; long phdrs_size; int num_phdrs, num_segments, num_sections, i; asection *sect; - struct symfile_segment_data *data; phdrs_size = bfd_get_elf_phdr_upper_bound (abfd); if (phdrs_size == -1) @@ -110,19 +111,16 @@ if (num_segments == 0) return NULL; - data = XCNEW (struct symfile_segment_data); - data->num_segments = num_segments; - data->segment_bases = XCNEWVEC (CORE_ADDR, num_segments); - data->segment_sizes = XCNEWVEC (CORE_ADDR, num_segments); + symfile_segment_data_up data (new symfile_segment_data); + data->segments.reserve (num_segments); for (i = 0; i < num_segments; i++) - { - data->segment_bases[i] = segments[i]->p_vaddr; - data->segment_sizes[i] = segments[i]->p_memsz; - } + data->segments.emplace_back (segments[i]->p_vaddr, segments[i]->p_memsz); num_sections = bfd_count_sections (abfd); - data->segment_info = XCNEWVEC (int, num_sections); + + /* All elements are initialized to 0 (map to no segment). */ + data->segment_info.resize (num_sections); for (i = 0, sect = abfd->sections; sect != NULL; i++, sect = sect->next) { @@ -204,17 +202,22 @@ enum minimal_symbol_type ms_type, asection *bfd_section, struct objfile *objfile) { - struct gdbarch *gdbarch = get_objfile_arch (objfile); + struct gdbarch *gdbarch = objfile->arch (); if (ms_type == mst_text || ms_type == mst_file_text || ms_type == mst_text_gnu_ifunc) address = gdbarch_addr_bits_remove (gdbarch, address); + /* We only setup section information for allocatable sections. Usually + we'd only expect to find msymbols for allocatable sections, but if the + ELF is malformed then this might not be the case. In that case don't + create an msymbol that references an uninitialised section object. */ + int section_index = 0; + if ((bfd_section_flags (bfd_section) & SEC_ALLOC) == SEC_ALLOC) + section_index = gdb_bfd_section_index (objfile->obfd, bfd_section); + struct minimal_symbol *result - = reader.record_full (name, copy_name, address, - ms_type, - gdb_bfd_section_index (objfile->obfd, - bfd_section)); + = reader.record_full (name, copy_name, address, ms_type, section_index); if ((objfile->flags & OBJF_MAINLINE) == 0 && (ms_type == mst_data || ms_type == mst_bss)) result->maybe_copied = 1; @@ -244,7 +247,7 @@ long number_of_symbols, asymbol **symbol_table, bool copy_names) { - struct gdbarch *gdbarch = get_objfile_arch (objfile); + struct gdbarch *gdbarch = objfile->arch (); asymbol *sym; long i; CORE_ADDR symaddr; @@ -348,11 +351,7 @@ if (type == ST_DYNAMIC && !stripped) continue; if (sym->flags & BSF_FILE) - { - filesymname - = ((const char *) objfile->per_bfd->filename_cache.insert - (sym->name, strlen (sym->name) + 1)); - } + filesymname = objfile->intern (sym->name); else if (sym->flags & BSF_SECTION_SYM) continue; else if (sym->flags & (BSF_GLOBAL | BSF_LOCAL | BSF_WEAK @@ -556,7 +555,7 @@ const struct elf_backend_data *bed = get_elf_backend_data (obfd); asection *relplt, *got_plt; bfd_size_type reloc_count, reloc; - struct gdbarch *gdbarch = get_objfile_arch (objfile); + struct gdbarch *gdbarch = objfile->arch (); struct type *ptr_type = builtin_type (gdbarch)->builtin_data_ptr; size_t ptr_size = TYPE_LENGTH (ptr_type); @@ -744,7 +743,7 @@ { struct elf_gnu_ifunc_cache *entry_found_p = (struct elf_gnu_ifunc_cache *) *slot; - struct gdbarch *gdbarch = get_objfile_arch (objfile); + struct gdbarch *gdbarch = objfile->arch (); if (entry_found_p->addr != addr) { @@ -822,7 +821,7 @@ for (objfile *objfile : current_program_space->objfiles ()) { bfd *obfd = objfile->obfd; - struct gdbarch *gdbarch = get_objfile_arch (objfile); + struct gdbarch *gdbarch = objfile->arch (); struct type *ptr_type = builtin_type (gdbarch)->builtin_data_ptr; size_t ptr_size = TYPE_LENGTH (ptr_type); CORE_ADDR pointer_address, addr; @@ -1311,8 +1310,36 @@ symbol_file_add_separate (debug_bfd.get (), debugfile.c_str (), symfile_flags, objfile); } - else + else + { has_dwarf2 = false; + const struct bfd_build_id *build_id = build_id_bfd_get (objfile->obfd); + + if (build_id != nullptr) + { + gdb::unique_xmalloc_ptr<char> symfile_path; + scoped_fd fd (debuginfod_debuginfo_query (build_id->data, + build_id->size, + objfile->original_name, + &symfile_path)); + + if (fd.get () >= 0) + { + /* File successfully retrieved from server. */ + gdb_bfd_ref_ptr debug_bfd (symfile_bfd_open (symfile_path.get ())); + + if (debug_bfd == nullptr) + warning (_("File \"%s\" from debuginfod cannot be opened as bfd"), + objfile->original_name); + else if (build_id_verify (debug_bfd.get (), build_id->size, build_id->data)) + { + symbol_file_add_separate (debug_bfd.get (), symfile_path.get (), + symfile_flags, objfile); + has_dwarf2 = true; + } + } + } + } } /* Read the CTF section only if there is no DWARF info. */ @@ -1469,8 +1496,9 @@ elf_gnu_ifunc_resolver_return_stop }; +void _initialize_elfread (); void -_initialize_elfread (void) +_initialize_elfread () { add_symtab_fns (bfd_target_elf_flavour, &elf_sym_fns); diff -Nru gdb-9.1/gdb/eval.c gdb-10.2/gdb/eval.c --- gdb-9.1/gdb/eval.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/eval.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Evaluate expressions for GDB. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -135,7 +135,7 @@ { int pc = 0; - return evaluate_subexp (NULL_TYPE, exp, &pc, EVAL_NORMAL); + return evaluate_subexp (nullptr, exp, &pc, EVAL_NORMAL); } /* Evaluate an expression, avoiding all memory references @@ -146,7 +146,7 @@ { int pc = 0; - return evaluate_subexp (NULL_TYPE, exp, &pc, EVAL_AVOID_SIDE_EFFECTS); + return evaluate_subexp (nullptr, exp, &pc, EVAL_AVOID_SIDE_EFFECTS); } /* Evaluate a subexpression, avoiding all memory references and @@ -155,7 +155,7 @@ struct value * evaluate_subexpression_type (struct expression *exp, int subexp) { - return evaluate_subexp (NULL_TYPE, exp, &subexp, EVAL_AVOID_SIDE_EFFECTS); + return evaluate_subexp (nullptr, exp, &subexp, EVAL_AVOID_SIDE_EFFECTS); } /* Find the current value of a watchpoint on EXP. Return the value in @@ -200,7 +200,7 @@ try { - result = evaluate_subexp (NULL_TYPE, exp, pc, EVAL_NORMAL); + result = evaluate_subexp (nullptr, exp, pc, EVAL_NORMAL); } catch (const gdb_exception &ex) { @@ -295,14 +295,13 @@ fieldno++; /* Skip static fields. */ - while (fieldno < TYPE_NFIELDS (struct_type) - && field_is_static (&TYPE_FIELD (struct_type, - fieldno))) + while (fieldno < struct_type->num_fields () + && field_is_static (&struct_type->field (fieldno))) fieldno++; - if (fieldno >= TYPE_NFIELDS (struct_type)) + if (fieldno >= struct_type->num_fields ()) error (_("too many initializers")); - field_type = TYPE_FIELD_TYPE (struct_type, fieldno); - if (TYPE_CODE (field_type) == TYPE_CODE_UNION + field_type = struct_type->field (fieldno).type (); + if (field_type->code () == TYPE_CODE_UNION && TYPE_FIELD_NAME (struct_type, fieldno)[0] == '0') error (_("don't know which variant you want to set")); @@ -315,7 +314,7 @@ subfieldno is the index of the actual real (named inner) field in substruct_type. */ - field_type = TYPE_FIELD_TYPE (struct_type, fieldno); + field_type = struct_type->field (fieldno).type (); if (val == 0) val = evaluate_subexp (field_type, exp, pos, noside); @@ -363,7 +362,7 @@ } else { - index = value_as_long (evaluate_subexp (NULL_TYPE, exp, pos, noside)); + index = value_as_long (evaluate_subexp (nullptr, exp, pos, noside)); if (index < low_bound || index > high_bound) error (_("tuple index out of range")); memcpy (value_contents_raw (array) + (index - low_bound) * element_size, @@ -378,21 +377,21 @@ { int pc = (*pos) + 1; LONGEST low_bound, high_bound; - struct type *range = check_typedef (TYPE_INDEX_TYPE (value_type (array))); + struct type *range = check_typedef (value_type (array)->index_type ()); enum range_type range_type = (enum range_type) longest_to_int (exp->elts[pc].longconst); *pos += 3; if (range_type == LOW_BOUND_DEFAULT || range_type == BOTH_BOUND_DEFAULT) - low_bound = TYPE_LOW_BOUND (range); + low_bound = range->bounds ()->low.const_val (); else - low_bound = value_as_long (evaluate_subexp (NULL_TYPE, exp, pos, noside)); + low_bound = value_as_long (evaluate_subexp (nullptr, exp, pos, noside)); if (range_type == HIGH_BOUND_DEFAULT || range_type == BOTH_BOUND_DEFAULT) - high_bound = TYPE_HIGH_BOUND (range); + high_bound = range->bounds ()->high.const_val (); else - high_bound = value_as_long (evaluate_subexp (NULL_TYPE, exp, pos, noside)); + high_bound = value_as_long (evaluate_subexp (nullptr, exp, pos, noside)); return value_slice (array, low_bound, high_bound - low_bound + 1); } @@ -450,21 +449,21 @@ type1 = check_typedef (value_type (*arg1)); type2 = check_typedef (value_type (*arg2)); - if ((TYPE_CODE (type1) != TYPE_CODE_FLT - && TYPE_CODE (type1) != TYPE_CODE_DECFLOAT + if ((type1->code () != TYPE_CODE_FLT + && type1->code () != TYPE_CODE_DECFLOAT && !is_integral_type (type1)) - || (TYPE_CODE (type2) != TYPE_CODE_FLT - && TYPE_CODE (type2) != TYPE_CODE_DECFLOAT + || (type2->code () != TYPE_CODE_FLT + && type2->code () != TYPE_CODE_DECFLOAT && !is_integral_type (type2))) return; - if (TYPE_CODE (type1) == TYPE_CODE_DECFLOAT - || TYPE_CODE (type2) == TYPE_CODE_DECFLOAT) + if (type1->code () == TYPE_CODE_DECFLOAT + || type2->code () == TYPE_CODE_DECFLOAT) { /* No promotion required. */ } - else if (TYPE_CODE (type1) == TYPE_CODE_FLT - || TYPE_CODE (type2) == TYPE_CODE_FLT) + else if (type1->code () == TYPE_CODE_FLT + || type2->code () == TYPE_CODE_FLT) { switch (language->la_language) { @@ -489,8 +488,8 @@ break; } } - else if (TYPE_CODE (type1) == TYPE_CODE_BOOL - && TYPE_CODE (type2) == TYPE_CODE_BOOL) + else if (type1->code () == TYPE_CODE_BOOL + && type2->code () == TYPE_CODE_BOOL) { /* No promotion required. */ } @@ -616,7 +615,7 @@ if (TYPE_IS_REFERENCE (type)) type = TYPE_TARGET_TYPE (type); - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_PTR: case TYPE_CODE_FUNC: @@ -658,7 +657,7 @@ TYPE_MAIN_TYPE (type) = &m_main_type; TYPE_LENGTH (type) = 1; - TYPE_CODE (type) = TYPE_CODE_METHOD; + type->set_code (TYPE_CODE_METHOD); TYPE_CHAIN (type) = type; TYPE_INSTANCE_FLAGS (type) = flags; if (num_types > 0) @@ -668,7 +667,7 @@ --num_types; TYPE_VARARGS (type) = 1; } - else if (TYPE_CODE (check_typedef (param_types[num_types - 1])) + else if (check_typedef (param_types[num_types - 1])->code () == TYPE_CODE_VOID) { --num_types; @@ -682,17 +681,17 @@ neither an objfile nor a gdbarch. As a result we must manually allocate memory for auxiliary fields, and free the memory ourselves when we are done with it. */ - TYPE_NFIELDS (type) = num_types; - TYPE_FIELDS (type) = (struct field *) - xzalloc (sizeof (struct field) * num_types); + type->set_num_fields (num_types); + type->set_fields + ((struct field *) xzalloc (sizeof (struct field) * num_types)); while (num_types-- > 0) - TYPE_FIELD_TYPE (type, num_types) = param_types[num_types]; + type->field (num_types).set_type (param_types[num_types]); } fake_method::~fake_method () { - xfree (TYPE_FIELDS (&m_type)); + xfree (m_type.fields ()); } /* Helper for evaluating an OP_VAR_VALUE. */ @@ -772,7 +771,7 @@ type *ftype = value_type (argvec[0]); - if (TYPE_CODE (ftype) == TYPE_CODE_INTERNAL_FUNCTION) + if (ftype->code () == TYPE_CODE_INTERNAL_FUNCTION) { /* We don't know anything about what the internal function might return, but we have to return @@ -780,7 +779,7 @@ return value_zero (builtin_type (exp->gdbarch)->builtin_int, not_lval); } - else if (TYPE_CODE (ftype) == TYPE_CODE_XMETHOD) + else if (ftype->code () == TYPE_CODE_XMETHOD) { type *return_type = result_type_of_xmethod (argvec[0], @@ -791,8 +790,8 @@ error (_("Xmethod is missing return type.")); return value_zero (return_type, not_lval); } - else if (TYPE_CODE (ftype) == TYPE_CODE_FUNC - || TYPE_CODE (ftype) == TYPE_CODE_METHOD) + else if (ftype->code () == TYPE_CODE_FUNC + || ftype->code () == TYPE_CODE_METHOD) { if (TYPE_GNU_IFUNC (ftype)) { @@ -817,7 +816,7 @@ error (_("Expression of type other than " "\"Function returning ...\" used as function")); } - switch (TYPE_CODE (value_type (argvec[0]))) + switch (value_type (argvec[0])->code ()) { case TYPE_CODE_INTERNAL_FUNCTION: return call_internal_function (exp->gdbarch, exp->language_defn, @@ -865,7 +864,7 @@ } else { - arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside); + arg2 = evaluate_subexp (nullptr, exp, pos, noside); } /* If the function is a virtual function, then the aggregate @@ -873,13 +872,13 @@ the vtable. Otherwise, it is just along for the ride: call the function directly. */ - arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside); + arg1 = evaluate_subexp (nullptr, exp, pos, noside); type *a1_type = check_typedef (value_type (arg1)); if (noside == EVAL_SKIP) tem = 1; /* Set it to the right arg index so that all arguments can also be skipped. */ - else if (TYPE_CODE (a1_type) == TYPE_CODE_METHODPTR) + else if (a1_type->code () == TYPE_CODE_METHODPTR) { if (noside == EVAL_AVOID_SIDE_EFFECTS) arg1 = value_zero (TYPE_TARGET_TYPE (a1_type), not_lval); @@ -891,7 +890,7 @@ tem = 2; argvec[1] = arg2; } - else if (TYPE_CODE (a1_type) == TYPE_CODE_MEMBERPTR) + else if (a1_type->code () == TYPE_CODE_MEMBERPTR) { struct type *type_ptr = lookup_pointer_type (TYPE_SELF_TYPE (a1_type)); @@ -942,7 +941,7 @@ } else { - arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside); + arg2 = evaluate_subexp (nullptr, exp, pos, noside); /* Check to see if the operator '->' has been overloaded. If the operator has been overloaded replace arg2 with the @@ -987,23 +986,23 @@ function = NULL; function_name = NULL; - if (TYPE_CODE (type) == TYPE_CODE_NAMESPACE) + if (type->code () == TYPE_CODE_NAMESPACE) { - function = cp_lookup_symbol_namespace (TYPE_NAME (type), + function = cp_lookup_symbol_namespace (type->name (), name, get_selected_block (0), VAR_DOMAIN).symbol; if (function == NULL) error (_("No symbol \"%s\" in namespace \"%s\"."), - name, TYPE_NAME (type)); + name, type->name ()); tem = 1; /* arg2 is left as NULL on purpose. */ } else { - gdb_assert (TYPE_CODE (type) == TYPE_CODE_STRUCT - || TYPE_CODE (type) == TYPE_CODE_UNION); + gdb_assert (type->code () == TYPE_CODE_STRUCT + || type->code () == TYPE_CODE_UNION); function_name = name; /* We need a properly typed value for method lookup. For @@ -1054,14 +1053,13 @@ argvec[0] = evaluate_subexp_with_coercion (exp, pos, noside); type *type = value_type (argvec[0]); - if (type && TYPE_CODE (type) == TYPE_CODE_PTR) + if (type && type->code () == TYPE_CODE_PTR) type = TYPE_TARGET_TYPE (type); - if (type && TYPE_CODE (type) == TYPE_CODE_FUNC) + if (type && type->code () == TYPE_CODE_FUNC) { - for (; tem <= nargs && tem <= TYPE_NFIELDS (type); tem++) + for (; tem <= nargs && tem <= type->num_fields (); tem++) { - argvec[tem] = evaluate_subexp (TYPE_FIELD_TYPE (type, - tem - 1), + argvec[tem] = evaluate_subexp (type->field (tem - 1).type (), exp, pos, noside); } } @@ -1245,7 +1243,21 @@ enum noside noside) { for (int i = 0; i < nargs; ++i) - evaluate_subexp (NULL_TYPE, exp, pos, noside); + evaluate_subexp (nullptr, exp, pos, noside); +} + +/* Return true if type is integral or reference to integral */ + +static bool +is_integral_or_integral_reference (struct type *type) +{ + if (is_integral_type (type)) + return true; + + type = check_typedef (type); + return (type != nullptr + && TYPE_IS_REFERENCE (type) + && is_integral_type (TYPE_TARGET_TYPE (type))); } struct value * @@ -1299,7 +1311,7 @@ { (*pos) += 3; symbol *var = exp->elts[pc + 2].symbol; - if (TYPE_CODE (SYMBOL_TYPE (var)) == TYPE_CODE_ERROR) + if (SYMBOL_TYPE (var)->code () == TYPE_CODE_ERROR) error_unknown_type (var->print_name ()); if (noside != EVAL_SKIP) return evaluate_var_value (noside, exp->elts[pc + 1].block, var); @@ -1321,7 +1333,7 @@ msymbol); type = value_type (val); - if (TYPE_CODE (type) == TYPE_CODE_ERROR + if (type->code () == TYPE_CODE_ERROR && (noside != EVAL_AVOID_SIDE_EFFECTS || pc != 0)) error_unknown_type (msymbol->print_name ()); return val; @@ -1432,10 +1444,10 @@ tem2 = longest_to_int (exp->elts[pc + 1].longconst); tem3 = longest_to_int (exp->elts[pc + 2].longconst); nargs = tem3 - tem2 + 1; - type = expect_type ? check_typedef (expect_type) : NULL_TYPE; + type = expect_type ? check_typedef (expect_type) : nullptr; - if (expect_type != NULL_TYPE && noside != EVAL_SKIP - && TYPE_CODE (type) == TYPE_CODE_STRUCT) + if (expect_type != nullptr && noside != EVAL_SKIP + && type->code () == TYPE_CODE_STRUCT) { struct value *rec = allocate_value (expect_type); @@ -1443,16 +1455,16 @@ return evaluate_struct_tuple (rec, exp, pos, noside, nargs); } - if (expect_type != NULL_TYPE && noside != EVAL_SKIP - && TYPE_CODE (type) == TYPE_CODE_ARRAY) + if (expect_type != nullptr && noside != EVAL_SKIP + && type->code () == TYPE_CODE_ARRAY) { - struct type *range_type = TYPE_INDEX_TYPE (type); + struct type *range_type = type->index_type (); struct type *element_type = TYPE_TARGET_TYPE (type); struct value *array = allocate_value (expect_type); int element_size = TYPE_LENGTH (check_typedef (element_type)); LONGEST low_bound, high_bound, index; - if (get_discrete_bounds (range_type, &low_bound, &high_bound) < 0) + if (!get_discrete_bounds (range_type, &low_bound, &high_bound)) { low_bound = 0; high_bound = (TYPE_LENGTH (type) / element_size) - 1; @@ -1491,21 +1503,21 @@ return array; } - if (expect_type != NULL_TYPE && noside != EVAL_SKIP - && TYPE_CODE (type) == TYPE_CODE_SET) + if (expect_type != nullptr && noside != EVAL_SKIP + && type->code () == TYPE_CODE_SET) { struct value *set = allocate_value (expect_type); gdb_byte *valaddr = value_contents_raw (set); - struct type *element_type = TYPE_INDEX_TYPE (type); + struct type *element_type = type->index_type (); struct type *check_type = element_type; LONGEST low_bound, high_bound; /* Get targettype of elementtype. */ - while (TYPE_CODE (check_type) == TYPE_CODE_RANGE - || TYPE_CODE (check_type) == TYPE_CODE_TYPEDEF) + while (check_type->code () == TYPE_CODE_RANGE + || check_type->code () == TYPE_CODE_TYPEDEF) check_type = TYPE_TARGET_TYPE (check_type); - if (get_discrete_bounds (element_type, &low_bound, &high_bound) < 0) + if (!get_discrete_bounds (element_type, &low_bound, &high_bound)) error (_("(power)set type with unknown size")); memset (valaddr, '\0', TYPE_LENGTH (type)); for (tem = 0; tem < nargs; tem++) @@ -1521,17 +1533,17 @@ /* Check types of elements to avoid mixture of elements from different types. Also check if type of element is "compatible" with element type of powerset. */ - if (TYPE_CODE (range_low_type) == TYPE_CODE_RANGE) + if (range_low_type->code () == TYPE_CODE_RANGE) range_low_type = TYPE_TARGET_TYPE (range_low_type); - if (TYPE_CODE (range_high_type) == TYPE_CODE_RANGE) + if (range_high_type->code () == TYPE_CODE_RANGE) range_high_type = TYPE_TARGET_TYPE (range_high_type); - if ((TYPE_CODE (range_low_type) != TYPE_CODE (range_high_type)) - || (TYPE_CODE (range_low_type) == TYPE_CODE_ENUM + if ((range_low_type->code () != range_high_type->code ()) + || (range_low_type->code () == TYPE_CODE_ENUM && (range_low_type != range_high_type))) /* different element modes. */ error (_("POWERSET tuple elements of different mode")); - if ((TYPE_CODE (check_type) != TYPE_CODE (range_low_type)) - || (TYPE_CODE (check_type) == TYPE_CODE_ENUM + if ((check_type->code () != range_low_type->code ()) + || (check_type->code () == TYPE_CODE_ENUM && range_low_type != check_type)) error (_("incompatible POWERSET tuple elements")); if (range_low > range_high) @@ -1569,11 +1581,10 @@ case TERNOP_SLICE: { - struct value *array = evaluate_subexp (NULL_TYPE, exp, pos, noside); + struct value *array = evaluate_subexp (nullptr, exp, pos, noside); int lowbound - = value_as_long (evaluate_subexp (NULL_TYPE, exp, pos, noside)); - int upper - = value_as_long (evaluate_subexp (NULL_TYPE, exp, pos, noside)); + = value_as_long (evaluate_subexp (nullptr, exp, pos, noside)); + int upper = value_as_long (evaluate_subexp (nullptr, exp, pos, noside)); if (noside == EVAL_SKIP) return eval_skip_value (exp); @@ -1582,16 +1593,16 @@ case TERNOP_COND: /* Skip third and second args to evaluate the first one. */ - arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside); + arg1 = evaluate_subexp (nullptr, exp, pos, noside); if (value_logical_not (arg1)) { - evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP); - return evaluate_subexp (NULL_TYPE, exp, pos, noside); + evaluate_subexp (nullptr, exp, pos, EVAL_SKIP); + return evaluate_subexp (nullptr, exp, pos, noside); } else { - arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside); - evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP); + arg2 = evaluate_subexp (nullptr, exp, pos, noside); + evaluate_subexp (nullptr, exp, pos, EVAL_SKIP); return arg2; } @@ -1785,9 +1796,9 @@ block_for_pc (funaddr); val_type = check_typedef (val_type); - - if ((val_type == NULL) - || (TYPE_CODE(val_type) == TYPE_CODE_ERROR)) + + if ((val_type == NULL) + || (val_type->code () == TYPE_CODE_ERROR)) { if (expect_type != NULL) val_type = expect_type; @@ -1801,7 +1812,7 @@ struct_return = using_struct_return (exp->gdbarch, NULL, check_typedef (expect_type)); } - + /* Found a function symbol. Now we will substitute its value in place of the message dispatcher (obj_msgSend), so that we call the method directly instead of thru @@ -1817,7 +1828,7 @@ if (method) { - if (TYPE_CODE (value_type (method)) != TYPE_CODE_FUNC) + if (value_type (method)->code () != TYPE_CODE_FUNC) error (_("method address has symbol information " "with non-function type; skipping")); @@ -1859,13 +1870,13 @@ struct type *callee_type = value_type (called_method); - if (callee_type && TYPE_CODE (callee_type) == TYPE_CODE_PTR) + if (callee_type && callee_type->code () == TYPE_CODE_PTR) callee_type = TYPE_TARGET_TYPE (callee_type); callee_type = TYPE_TARGET_TYPE (callee_type); if (callee_type) { - if ((TYPE_CODE (callee_type) == TYPE_CODE_ERROR) && expect_type) + if ((callee_type->code () == TYPE_CODE_ERROR) && expect_type) return allocate_value (expect_type); else return allocate_value (callee_type); @@ -1917,9 +1928,9 @@ (*pos) += 2; /* First determine the type code we are dealing with. */ - arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside); + arg1 = evaluate_subexp (nullptr, exp, pos, noside); type = check_typedef (value_type (arg1)); - code = TYPE_CODE (type); + code = type->code (); if (code == TYPE_CODE_PTR) { @@ -1929,13 +1940,13 @@ to the target value the original one points to. */ struct type *target_type = check_typedef (TYPE_TARGET_TYPE (type)); - if (TYPE_CODE (target_type) == TYPE_CODE_ARRAY - || TYPE_CODE (target_type) == TYPE_CODE_STRING - || TYPE_CODE (target_type) == TYPE_CODE_FUNC) + if (target_type->code () == TYPE_CODE_ARRAY + || target_type->code () == TYPE_CODE_STRING + || target_type->code () == TYPE_CODE_FUNC) { arg1 = value_ind (arg1); type = check_typedef (value_type (arg1)); - code = TYPE_CODE (type); + code = type->code (); } } @@ -2011,15 +2022,15 @@ /* We have a complex number, There should be 2 floating point numbers that compose it. */ (*pos) += 2; - arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside); - arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside); + arg1 = evaluate_subexp (nullptr, exp, pos, noside); + arg2 = evaluate_subexp (nullptr, exp, pos, noside); return value_literal_complex (arg1, arg2, exp->elts[pc + 1].type); case STRUCTOP_STRUCT: tem = longest_to_int (exp->elts[pc + 1].longconst); (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1); - arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside); + arg1 = evaluate_subexp (nullptr, exp, pos, noside); if (noside == EVAL_SKIP) return eval_skip_value (exp); arg3 = value_struct_elt (&arg1, NULL, &exp->elts[pc + 2].string, @@ -2031,7 +2042,7 @@ case STRUCTOP_PTR: tem = longest_to_int (exp->elts[pc + 1].longconst); (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1); - arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside); + arg1 = evaluate_subexp (nullptr, exp, pos, noside); if (noside == EVAL_SKIP) return eval_skip_value (exp); @@ -2068,7 +2079,7 @@ get_user_print_options (&opts); if (opts.objectprint && TYPE_TARGET_TYPE (arg_type) - && (TYPE_CODE (TYPE_TARGET_TYPE (arg_type)) == TYPE_CODE_STRUCT)) + && (TYPE_TARGET_TYPE (arg_type)->code () == TYPE_CODE_STRUCT)) { real_type = value_rtti_indirect_type (arg1, &full, &top, &using_enc); @@ -2088,15 +2099,15 @@ if (op == STRUCTOP_MEMBER) arg1 = evaluate_subexp_for_address (exp, pos, noside); else - arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside); + arg1 = evaluate_subexp (nullptr, exp, pos, noside); - arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside); + arg2 = evaluate_subexp (nullptr, exp, pos, noside); if (noside == EVAL_SKIP) return eval_skip_value (exp); type = check_typedef (value_type (arg2)); - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_METHODPTR: if (noside == EVAL_AVOID_SIDE_EFFECTS) @@ -2104,7 +2115,7 @@ else { arg2 = cplus_method_ptr_to_value (&arg1, arg2); - gdb_assert (TYPE_CODE (value_type (arg2)) == TYPE_CODE_PTR); + gdb_assert (value_type (arg2)->code () == TYPE_CODE_PTR); return value_ind (arg2); } @@ -2150,14 +2161,15 @@ return value_concat (arg1, arg2); case BINOP_ASSIGN: - arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside); + arg1 = evaluate_subexp (nullptr, exp, pos, noside); /* Special-case assignments where the left-hand-side is a convenience variable -- in these, don't bother setting an expected type. This avoids a weird case where re-assigning a string or array to an internal variable could error with "Too many array elements". */ arg2 = evaluate_subexp (VALUE_LVAL (arg1) == lval_internalvar - ? NULL_TYPE : value_type (arg1), + ? nullptr + : value_type (arg1), exp, pos, noside); if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS) @@ -2169,7 +2181,7 @@ case BINOP_ASSIGN_MODIFY: (*pos) += 2; - arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside); + arg1 = evaluate_subexp (nullptr, exp, pos, noside); arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside); if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS) return arg1; @@ -2208,10 +2220,10 @@ if (binop_user_defined_p (op, arg1, arg2)) return value_x_binop (arg1, arg2, op, OP_NULL, noside); else if (ptrmath_type_p (exp->language_defn, value_type (arg1)) - && is_integral_type (value_type (arg2))) + && is_integral_or_integral_reference (value_type (arg2))) return value_ptradd (arg1, value_as_long (arg2)); else if (ptrmath_type_p (exp->language_defn, value_type (arg2)) - && is_integral_type (value_type (arg1))) + && is_integral_or_integral_reference (value_type (arg1))) return value_ptradd (arg2, value_as_long (arg1)); else { @@ -2234,7 +2246,7 @@ return value_from_longest (type, value_ptrdiff (arg1, arg2)); } else if (ptrmath_type_p (exp->language_defn, value_type (arg1)) - && is_integral_type (value_type (arg2))) + && is_integral_or_integral_reference (value_type (arg2))) return value_ptradd (arg1, - value_as_long (arg2)); else { @@ -2253,8 +2265,8 @@ case BINOP_BITWISE_AND: case BINOP_BITWISE_IOR: case BINOP_BITWISE_XOR: - arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside); - arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside); + arg1 = evaluate_subexp (nullptr, exp, pos, noside); + arg2 = evaluate_subexp (nullptr, exp, pos, noside); if (noside == EVAL_SKIP) return eval_skip_value (exp); if (binop_user_defined_p (op, arg1, arg2)) @@ -2296,8 +2308,8 @@ } case BINOP_SUBSCRIPT: - arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside); - arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside); + arg1 = evaluate_subexp (nullptr, exp, pos, noside); + arg2 = evaluate_subexp (nullptr, exp, pos, noside); if (noside == EVAL_SKIP) return eval_skip_value (exp); if (binop_user_defined_p (op, arg1, arg2)) @@ -2310,12 +2322,12 @@ arg1 = coerce_ref (arg1); type = check_typedef (value_type (arg1)); - if (TYPE_CODE (type) != TYPE_CODE_ARRAY - && TYPE_CODE (type) != TYPE_CODE_PTR) + if (type->code () != TYPE_CODE_ARRAY + && type->code () != TYPE_CODE_PTR) { - if (TYPE_NAME (type)) + if (type->name ()) error (_("cannot subscript something of type `%s'"), - TYPE_NAME (type)); + type->name ()); else error (_("cannot subscript requested type")); } @@ -2356,7 +2368,7 @@ else { error (_("cannot subscript something of type `%s'"), - TYPE_NAME (value_type (arg1))); + value_type (arg1)->name ()); } } @@ -2369,7 +2381,7 @@ arg1 = coerce_ref (arg1); type = check_typedef (value_type (arg1)); - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_PTR: case TYPE_CODE_ARRAY: @@ -2378,9 +2390,9 @@ break; default: - if (TYPE_NAME (type)) + if (type->name ()) error (_("cannot subscript something of type `%s'"), - TYPE_NAME (type)); + type->name ()); else error (_("cannot subscript requested type")); } @@ -2432,61 +2444,61 @@ } case BINOP_LOGICAL_AND: - arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside); + arg1 = evaluate_subexp (nullptr, exp, pos, noside); if (noside == EVAL_SKIP) { - evaluate_subexp (NULL_TYPE, exp, pos, noside); + evaluate_subexp (nullptr, exp, pos, noside); return eval_skip_value (exp); } oldpos = *pos; - arg2 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS); + arg2 = evaluate_subexp (nullptr, exp, pos, EVAL_AVOID_SIDE_EFFECTS); *pos = oldpos; if (binop_user_defined_p (op, arg1, arg2)) { - arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside); + arg2 = evaluate_subexp (nullptr, exp, pos, noside); return value_x_binop (arg1, arg2, op, OP_NULL, noside); } else { tem = value_logical_not (arg1); - arg2 = evaluate_subexp (NULL_TYPE, exp, pos, - (tem ? EVAL_SKIP : noside)); + arg2 + = evaluate_subexp (nullptr, exp, pos, (tem ? EVAL_SKIP : noside)); type = language_bool_type (exp->language_defn, exp->gdbarch); return value_from_longest (type, (LONGEST) (!tem && !value_logical_not (arg2))); } case BINOP_LOGICAL_OR: - arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside); + arg1 = evaluate_subexp (nullptr, exp, pos, noside); if (noside == EVAL_SKIP) { - evaluate_subexp (NULL_TYPE, exp, pos, noside); + evaluate_subexp (nullptr, exp, pos, noside); return eval_skip_value (exp); } oldpos = *pos; - arg2 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS); + arg2 = evaluate_subexp (nullptr, exp, pos, EVAL_AVOID_SIDE_EFFECTS); *pos = oldpos; if (binop_user_defined_p (op, arg1, arg2)) { - arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside); + arg2 = evaluate_subexp (nullptr, exp, pos, noside); return value_x_binop (arg1, arg2, op, OP_NULL, noside); } else { tem = value_logical_not (arg1); - arg2 = evaluate_subexp (NULL_TYPE, exp, pos, - (!tem ? EVAL_SKIP : noside)); + arg2 + = evaluate_subexp (nullptr, exp, pos, (!tem ? EVAL_SKIP : noside)); type = language_bool_type (exp->language_defn, exp->gdbarch); return value_from_longest (type, (LONGEST) (!tem || !value_logical_not (arg2))); } case BINOP_EQUAL: - arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside); + arg1 = evaluate_subexp (nullptr, exp, pos, noside); arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside); if (noside == EVAL_SKIP) return eval_skip_value (exp); @@ -2503,7 +2515,7 @@ } case BINOP_NOTEQUAL: - arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside); + arg1 = evaluate_subexp (nullptr, exp, pos, noside); arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside); if (noside == EVAL_SKIP) return eval_skip_value (exp); @@ -2520,7 +2532,7 @@ } case BINOP_LESS: - arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside); + arg1 = evaluate_subexp (nullptr, exp, pos, noside); arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside); if (noside == EVAL_SKIP) return eval_skip_value (exp); @@ -2537,7 +2549,7 @@ } case BINOP_GTR: - arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside); + arg1 = evaluate_subexp (nullptr, exp, pos, noside); arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside); if (noside == EVAL_SKIP) return eval_skip_value (exp); @@ -2554,7 +2566,7 @@ } case BINOP_GEQ: - arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside); + arg1 = evaluate_subexp (nullptr, exp, pos, noside); arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside); if (noside == EVAL_SKIP) return eval_skip_value (exp); @@ -2571,7 +2583,7 @@ } case BINOP_LEQ: - arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside); + arg1 = evaluate_subexp (nullptr, exp, pos, noside); arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside); if (noside == EVAL_SKIP) return eval_skip_value (exp); @@ -2588,13 +2600,13 @@ } case BINOP_REPEAT: - arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside); - arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside); + arg1 = evaluate_subexp (nullptr, exp, pos, noside); + arg2 = evaluate_subexp (nullptr, exp, pos, noside); if (noside == EVAL_SKIP) return eval_skip_value (exp); type = check_typedef (value_type (arg2)); - if (TYPE_CODE (type) != TYPE_CODE_INT - && TYPE_CODE (type) != TYPE_CODE_ENUM) + if (type->code () != TYPE_CODE_INT + && type->code () != TYPE_CODE_ENUM) error (_("Non-integral right operand for \"@\" operator.")); if (noside == EVAL_AVOID_SIDE_EFFECTS) { @@ -2605,11 +2617,11 @@ return value_repeat (arg1, longest_to_int (value_as_long (arg2))); case BINOP_COMMA: - evaluate_subexp (NULL_TYPE, exp, pos, noside); - return evaluate_subexp (NULL_TYPE, exp, pos, noside); + evaluate_subexp (nullptr, exp, pos, noside); + return evaluate_subexp (nullptr, exp, pos, noside); case UNOP_PLUS: - arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside); + arg1 = evaluate_subexp (nullptr, exp, pos, noside); if (noside == EVAL_SKIP) return eval_skip_value (exp); if (unop_user_defined_p (op, arg1)) @@ -2621,7 +2633,7 @@ } case UNOP_NEG: - arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside); + arg1 = evaluate_subexp (nullptr, exp, pos, noside); if (noside == EVAL_SKIP) return eval_skip_value (exp); if (unop_user_defined_p (op, arg1)) @@ -2635,7 +2647,7 @@ case UNOP_COMPLEMENT: /* C++: check for and handle destructor names. */ - arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside); + arg1 = evaluate_subexp (nullptr, exp, pos, noside); if (noside == EVAL_SKIP) return eval_skip_value (exp); if (unop_user_defined_p (UNOP_COMPLEMENT, arg1)) @@ -2647,7 +2659,7 @@ } case UNOP_LOGICAL_NOT: - arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside); + arg1 = evaluate_subexp (nullptr, exp, pos, noside); if (noside == EVAL_SKIP) return eval_skip_value (exp); if (unop_user_defined_p (op, arg1)) @@ -2659,12 +2671,12 @@ } case UNOP_IND: - if (expect_type && TYPE_CODE (expect_type) == TYPE_CODE_PTR) + if (expect_type && expect_type->code () == TYPE_CODE_PTR) expect_type = TYPE_TARGET_TYPE (check_typedef (expect_type)); arg1 = evaluate_subexp (expect_type, exp, pos, noside); type = check_typedef (value_type (arg1)); - if (TYPE_CODE (type) == TYPE_CODE_METHODPTR - || TYPE_CODE (type) == TYPE_CODE_MEMBERPTR) + if (type->code () == TYPE_CODE_METHODPTR + || type->code () == TYPE_CODE_MEMBERPTR) error (_("Attempt to dereference pointer " "to member without an object")); if (noside == EVAL_SKIP) @@ -2674,14 +2686,14 @@ else if (noside == EVAL_AVOID_SIDE_EFFECTS) { type = check_typedef (value_type (arg1)); - if (TYPE_CODE (type) == TYPE_CODE_PTR + if (type->code () == TYPE_CODE_PTR || TYPE_IS_REFERENCE (type) /* In C you can dereference an array to get the 1st elt. */ - || TYPE_CODE (type) == TYPE_CODE_ARRAY + || type->code () == TYPE_CODE_ARRAY ) return value_zero (TYPE_TARGET_TYPE (type), lval_memory); - else if (TYPE_CODE (type) == TYPE_CODE_INT) + else if (type->code () == TYPE_CODE_INT) /* GDB allows dereferencing an int. */ return value_zero (builtin_type (exp->gdbarch)->builtin_int, lval_memory); @@ -2693,7 +2705,7 @@ This returns an int, which seems like the most C-like thing to do. "long long" variables are rare enough that BUILTIN_TYPE_LONGEST would seem to be a mistake. */ - if (TYPE_CODE (type) == TYPE_CODE_INT) + if (type->code () == TYPE_CODE_INT) return value_at_lazy (builtin_type (exp->gdbarch)->builtin_int, (CORE_ADDR) value_as_address (arg1)); return value_ind (arg1); @@ -2703,7 +2715,7 @@ if (noside == EVAL_SKIP) { - evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP); + evaluate_subexp (nullptr, exp, pos, EVAL_SKIP); return eval_skip_value (exp); } else @@ -2717,15 +2729,15 @@ case UNOP_SIZEOF: if (noside == EVAL_SKIP) { - evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP); + evaluate_subexp (nullptr, exp, pos, EVAL_SKIP); return eval_skip_value (exp); } return evaluate_subexp_for_sizeof (exp, pos, noside); case UNOP_ALIGNOF: { - type = value_type (evaluate_subexp (NULL_TYPE, exp, pos, - EVAL_AVOID_SIDE_EFFECTS)); + type = value_type ( + evaluate_subexp (nullptr, exp, pos, EVAL_AVOID_SIDE_EFFECTS)); /* FIXME: This should be size_t. */ struct type *size_type = builtin_type (exp->gdbarch)->builtin_int; ULONGEST align = type_align (type); @@ -2903,7 +2915,7 @@ case OP_DECLTYPE: if (noside == EVAL_SKIP) { - evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP); + evaluate_subexp (nullptr, exp, pos, EVAL_SKIP); return eval_skip_value (exp); } else if (noside == EVAL_AVOID_SIDE_EFFECTS) @@ -2911,8 +2923,7 @@ enum exp_opcode sub_op = exp->elts[*pos].opcode; struct value *result; - result = evaluate_subexp (NULL_TYPE, exp, pos, - EVAL_AVOID_SIDE_EFFECTS); + result = evaluate_subexp (nullptr, exp, pos, EVAL_AVOID_SIDE_EFFECTS); /* 'decltype' has special semantics for lvalues. */ if (op == OP_DECLTYPE @@ -2944,10 +2955,9 @@ enum exp_opcode sub_op = exp->elts[*pos].opcode; if (sub_op == OP_TYPE || sub_op == OP_DECLTYPE || sub_op == OP_TYPEOF) - result = evaluate_subexp (NULL_TYPE, exp, pos, - EVAL_AVOID_SIDE_EFFECTS); + result = evaluate_subexp (nullptr, exp, pos, EVAL_AVOID_SIDE_EFFECTS); else - result = evaluate_subexp (NULL_TYPE, exp, pos, noside); + result = evaluate_subexp (nullptr, exp, pos, noside); if (noside != EVAL_NORMAL) return allocate_value (cplus_typeid_type (exp->gdbarch)); @@ -2996,7 +3006,7 @@ { case UNOP_IND: (*pos)++; - x = evaluate_subexp (NULL_TYPE, exp, pos, noside); + x = evaluate_subexp (nullptr, exp, pos, noside); /* We can't optimize out "&*" if there's a user-defined operator*. */ if (unop_user_defined_p (op, x)) @@ -3010,17 +3020,17 @@ case UNOP_MEMVAL: (*pos) += 3; return value_cast (lookup_pointer_type (exp->elts[pc + 1].type), - evaluate_subexp (NULL_TYPE, exp, pos, noside)); + evaluate_subexp (nullptr, exp, pos, noside)); case UNOP_MEMVAL_TYPE: { struct type *type; (*pos) += 1; - x = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS); + x = evaluate_subexp (nullptr, exp, pos, EVAL_AVOID_SIDE_EFFECTS); type = value_type (x); return value_cast (lookup_pointer_type (type), - evaluate_subexp (NULL_TYPE, exp, pos, noside)); + evaluate_subexp (nullptr, exp, pos, noside)); } case OP_VAR_VALUE: @@ -3077,7 +3087,7 @@ default: default_case: - x = evaluate_subexp (NULL_TYPE, exp, pos, noside); + x = evaluate_subexp (nullptr, exp, pos, noside); default_case_after_eval: if (noside == EVAL_AVOID_SIDE_EFFECTS) { @@ -3126,7 +3136,7 @@ case OP_VAR_VALUE: var = exp->elts[pc + 2].symbol; type = check_typedef (SYMBOL_TYPE (var)); - if (TYPE_CODE (type) == TYPE_CODE_ARRAY + if (type->code () == TYPE_CODE_ARRAY && !TYPE_VECTOR (type) && CAST_IS_CONVERSION (exp->language_defn)) { @@ -3138,7 +3148,7 @@ /* FALLTHROUGH */ default: - return evaluate_subexp (NULL_TYPE, exp, pos, noside); + return evaluate_subexp (nullptr, exp, pos, noside); } } @@ -3170,11 +3180,11 @@ create a value unnecessarily. */ case UNOP_IND: (*pos)++; - val = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS); + val = evaluate_subexp (nullptr, exp, pos, EVAL_AVOID_SIDE_EFFECTS); type = check_typedef (value_type (val)); - if (TYPE_CODE (type) != TYPE_CODE_PTR + if (type->code () != TYPE_CODE_PTR && !TYPE_IS_REFERENCE (type) - && TYPE_CODE (type) != TYPE_CODE_ARRAY) + && type->code () != TYPE_CODE_ARRAY) error (_("Attempt to take contents of a non-pointer value.")); type = TYPE_TARGET_TYPE (type); if (is_dynamic_type (type)) @@ -3196,11 +3206,11 @@ type = SYMBOL_TYPE (exp->elts[pc + 2].symbol); if (is_dynamic_type (type)) { - val = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_NORMAL); + val = evaluate_subexp (nullptr, exp, pos, EVAL_NORMAL); type = value_type (val); - if (TYPE_CODE (type) == TYPE_CODE_ARRAY - && is_dynamic_type (TYPE_INDEX_TYPE (type)) - && TYPE_HIGH_BOUND_UNDEFINED (TYPE_INDEX_TYPE (type))) + if (type->code () == TYPE_CODE_ARRAY + && is_dynamic_type (type->index_type ()) + && type->bounds ()->high.kind () == PROP_UNDEFINED) return allocate_optimized_out_value (size_type); } else @@ -3217,7 +3227,7 @@ msymbol); type = value_type (mval); - if (TYPE_CODE (type) == TYPE_CODE_ERROR) + if (type->code () == TYPE_CODE_ERROR) error_unknown_type (msymbol->print_name ()); return value_from_longest (size_type, TYPE_LENGTH (type)); @@ -3233,19 +3243,19 @@ { int npc = (*pos) + 1; - val = evaluate_subexp (NULL_TYPE, exp, &npc, EVAL_AVOID_SIDE_EFFECTS); + val = evaluate_subexp (nullptr, exp, &npc, EVAL_AVOID_SIDE_EFFECTS); type = check_typedef (value_type (val)); - if (TYPE_CODE (type) == TYPE_CODE_ARRAY) + if (type->code () == TYPE_CODE_ARRAY) { type = check_typedef (TYPE_TARGET_TYPE (type)); - if (TYPE_CODE (type) == TYPE_CODE_ARRAY) + if (type->code () == TYPE_CODE_ARRAY) { - type = TYPE_INDEX_TYPE (type); + type = type->index_type (); /* Only re-evaluate the right hand side if the resulting type is a variable length type. */ - if (TYPE_RANGE_DATA (type)->flag_bound_evaluated) + if (type->bounds ()->flag_bound_evaluated) { - val = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_NORMAL); + val = evaluate_subexp (nullptr, exp, pos, EVAL_NORMAL); return value_from_longest (size_type, (LONGEST) TYPE_LENGTH (value_type (val))); } @@ -3256,7 +3266,7 @@ /* Fall through. */ default: - val = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS); + val = evaluate_subexp (nullptr, exp, pos, EVAL_AVOID_SIDE_EFFECTS); type = value_type (val); break; } @@ -3350,14 +3360,14 @@ int ndimen = 1; struct type *tmp_type; - if ((TYPE_CODE (array_type) != TYPE_CODE_ARRAY)) + if ((array_type->code () != TYPE_CODE_ARRAY)) error (_("Can't get dimensions for a non-array type")); tmp_type = array_type; while ((tmp_type = TYPE_TARGET_TYPE (tmp_type))) { - if (TYPE_CODE (tmp_type) == TYPE_CODE_ARRAY) + if (tmp_type->code () == TYPE_CODE_ARRAY) ++ndimen; } return ndimen; diff -Nru gdb-9.1/gdb/event-loop.c gdb-10.2/gdb/event-loop.c --- gdb-9.1/gdb/event-loop.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/event-loop.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,1280 +0,0 @@ -/* Event loop machinery for GDB, the GNU debugger. - Copyright (C) 1999-2020 Free Software Foundation, Inc. - Written by Elena Zannoni <ezannoni@cygnus.com> of Cygnus Solutions. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "defs.h" -#include "event-loop.h" -#include "event-top.h" -#include "ser-event.h" - -#ifdef HAVE_POLL -#if defined (HAVE_POLL_H) -#include <poll.h> -#elif defined (HAVE_SYS_POLL_H) -#include <sys/poll.h> -#endif -#endif - -#include <sys/types.h> -#include "gdbsupport/gdb_sys_time.h" -#include "gdb_select.h" -#include "observable.h" -#include "top.h" - -/* Tell create_file_handler what events we are interested in. - This is used by the select version of the event loop. */ - -#define GDB_READABLE (1<<1) -#define GDB_WRITABLE (1<<2) -#define GDB_EXCEPTION (1<<3) - -/* Data point to pass to the event handler. */ -typedef union event_data -{ - void *ptr; - int integer; -} event_data; - -typedef struct gdb_event gdb_event; -typedef void (event_handler_func) (event_data); - -/* Event for the GDB event system. Events are queued by calling - async_queue_event and serviced later on by gdb_do_one_event. An - event can be, for instance, a file descriptor becoming ready to be - read. Servicing an event simply means that the procedure PROC will - be called. We have 2 queues, one for file handlers that we listen - to in the event loop, and one for the file handlers+events that are - ready. The procedure PROC associated with each event is dependant - of the event source. In the case of monitored file descriptors, it - is always the same (handle_file_event). Its duty is to invoke the - handler associated with the file descriptor whose state change - generated the event, plus doing other cleanups and such. In the - case of async signal handlers, it is - invoke_async_signal_handler. */ - -typedef struct gdb_event - { - /* Procedure to call to service this event. */ - event_handler_func *proc; - - /* Data to pass to the event handler. */ - event_data data; - } *gdb_event_p; - -/* Information about each file descriptor we register with the event - loop. */ - -typedef struct file_handler - { - int fd; /* File descriptor. */ - int mask; /* Events we want to monitor: POLLIN, etc. */ - int ready_mask; /* Events that have been seen since - the last time. */ - handler_func *proc; /* Procedure to call when fd is ready. */ - gdb_client_data client_data; /* Argument to pass to proc. */ - int error; /* Was an error detected on this fd? */ - struct file_handler *next_file; /* Next registered file descriptor. */ - } -file_handler; - -/* PROC is a function to be invoked when the READY flag is set. This - happens when there has been a signal and the corresponding signal - handler has 'triggered' this async_signal_handler for execution. - The actual work to be done in response to a signal will be carried - out by PROC at a later time, within process_event. This provides a - deferred execution of signal handlers. - - Async_init_signals takes care of setting up such an - async_signal_handler for each interesting signal. */ - -typedef struct async_signal_handler - { - int ready; /* If ready, call this handler - from the main event loop, using - invoke_async_handler. */ - struct async_signal_handler *next_handler; /* Ptr to next handler. */ - sig_handler_func *proc; /* Function to call to do the work. */ - gdb_client_data client_data; /* Argument to async_handler_func. */ - } -async_signal_handler; - -/* PROC is a function to be invoked when the READY flag is set. This - happens when the event has been marked with - MARK_ASYNC_EVENT_HANDLER. The actual work to be done in response - to an event will be carried out by PROC at a later time, within - process_event. This provides a deferred execution of event - handlers. */ -typedef struct async_event_handler - { - /* If ready, call this handler from the main event loop, using - invoke_event_handler. */ - int ready; - - /* Point to next handler. */ - struct async_event_handler *next_handler; - - /* Function to call to do the work. */ - async_event_handler_func *proc; - - /* Argument to PROC. */ - gdb_client_data client_data; - } -async_event_handler; - -/* Gdb_notifier is just a list of file descriptors gdb is interested in. - These are the input file descriptor, and the target file - descriptor. We have two flavors of the notifier, one for platforms - that have the POLL function, the other for those that don't, and - only support SELECT. Each of the elements in the gdb_notifier list is - basically a description of what kind of events gdb is interested - in, for each fd. */ - -/* As of 1999-04-30 only the input file descriptor is registered with the - event loop. */ - -/* Do we use poll or select ? */ -#ifdef HAVE_POLL -#define USE_POLL 1 -#else -#define USE_POLL 0 -#endif /* HAVE_POLL */ - -static unsigned char use_poll = USE_POLL; - -#ifdef USE_WIN32API -#include <windows.h> -#include <io.h> -#endif - -static struct - { - /* Ptr to head of file handler list. */ - file_handler *first_file_handler; - - /* Next file handler to handle, for the select variant. To level - the fairness across event sources, we serve file handlers in a - round-robin-like fashion. The number and order of the polled - file handlers may change between invocations, but this is good - enough. */ - file_handler *next_file_handler; - -#ifdef HAVE_POLL - /* Ptr to array of pollfd structures. */ - struct pollfd *poll_fds; - - /* Next file descriptor to handle, for the poll variant. To level - the fairness across event sources, we poll the file descriptors - in a round-robin-like fashion. The number and order of the - polled file descriptors may change between invocations, but - this is good enough. */ - int next_poll_fds_index; - - /* Timeout in milliseconds for calls to poll(). */ - int poll_timeout; -#endif - - /* Masks to be used in the next call to select. - Bits are set in response to calls to create_file_handler. */ - fd_set check_masks[3]; - - /* What file descriptors were found ready by select. */ - fd_set ready_masks[3]; - - /* Number of file descriptors to monitor (for poll). */ - /* Number of valid bits (highest fd value + 1) (for select). */ - int num_fds; - - /* Time structure for calls to select(). */ - struct timeval select_timeout; - - /* Flag to tell whether the timeout should be used. */ - int timeout_valid; - } -gdb_notifier; - -/* Structure associated with a timer. PROC will be executed at the - first occasion after WHEN. */ -struct gdb_timer - { - std::chrono::steady_clock::time_point when; - int timer_id; - struct gdb_timer *next; - timer_handler_func *proc; /* Function to call to do the work. */ - gdb_client_data client_data; /* Argument to async_handler_func. */ - }; - -/* List of currently active timers. It is sorted in order of - increasing timers. */ -static struct - { - /* Pointer to first in timer list. */ - struct gdb_timer *first_timer; - - /* Id of the last timer created. */ - int num_timers; - } -timer_list; - -/* All the async_signal_handlers gdb is interested in are kept onto - this list. */ -static struct - { - /* Pointer to first in handler list. */ - async_signal_handler *first_handler; - - /* Pointer to last in handler list. */ - async_signal_handler *last_handler; - } -sighandler_list; - -/* All the async_event_handlers gdb is interested in are kept onto - this list. */ -static struct - { - /* Pointer to first in handler list. */ - async_event_handler *first_handler; - - /* Pointer to last in handler list. */ - async_event_handler *last_handler; - } -async_event_handler_list; - -static int invoke_async_signal_handlers (void); -static void create_file_handler (int fd, int mask, handler_func *proc, - gdb_client_data client_data); -static int check_async_event_handlers (void); -static int gdb_wait_for_event (int); -static int update_wait_timeout (void); -static int poll_timers (void); - - -/* This event is signalled whenever an asynchronous handler needs to - defer an action to the event loop. */ -static struct serial_event *async_signal_handlers_serial_event; - -/* Callback registered with ASYNC_SIGNAL_HANDLERS_SERIAL_EVENT. */ - -static void -async_signals_handler (int error, gdb_client_data client_data) -{ - /* Do nothing. Handlers are run by invoke_async_signal_handlers - from instead. */ -} - -void -initialize_async_signal_handlers (void) -{ - async_signal_handlers_serial_event = make_serial_event (); - - add_file_handler (serial_event_fd (async_signal_handlers_serial_event), - async_signals_handler, NULL); -} - -/* Process one high level event. If nothing is ready at this time, - wait for something to happen (via gdb_wait_for_event), then process - it. Returns >0 if something was done otherwise returns <0 (this - can happen if there are no event sources to wait for). */ - -int -gdb_do_one_event (void) -{ - static int event_source_head = 0; - const int number_of_sources = 3; - int current = 0; - - /* First let's see if there are any asynchronous signal handlers - that are ready. These would be the result of invoking any of the - signal handlers. */ - if (invoke_async_signal_handlers ()) - return 1; - - /* To level the fairness across event sources, we poll them in a - round-robin fashion. */ - for (current = 0; current < number_of_sources; current++) - { - int res; - - switch (event_source_head) - { - case 0: - /* Are any timers that are ready? */ - res = poll_timers (); - break; - case 1: - /* Are there events already waiting to be collected on the - monitored file descriptors? */ - res = gdb_wait_for_event (0); - break; - case 2: - /* Are there any asynchronous event handlers ready? */ - res = check_async_event_handlers (); - break; - default: - internal_error (__FILE__, __LINE__, - "unexpected event_source_head %d", - event_source_head); - } - - event_source_head++; - if (event_source_head == number_of_sources) - event_source_head = 0; - - if (res > 0) - return 1; - } - - /* Block waiting for a new event. If gdb_wait_for_event returns -1, - we should get out because this means that there are no event - sources left. This will make the event loop stop, and the - application exit. */ - - if (gdb_wait_for_event (1) < 0) - return -1; - - /* If gdb_wait_for_event has returned 1, it means that one event has - been handled. We break out of the loop. */ - return 1; -} - -/* Start up the event loop. This is the entry point to the event loop - from the command loop. */ - -void -start_event_loop (void) -{ - /* Loop until there is nothing to do. This is the entry point to - the event loop engine. gdb_do_one_event will process one event - for each invocation. It blocks waiting for an event and then - processes it. */ - while (1) - { - int result = 0; - - try - { - result = gdb_do_one_event (); - } - catch (const gdb_exception &ex) - { - exception_print (gdb_stderr, ex); - - /* If any exception escaped to here, we better enable - stdin. Otherwise, any command that calls async_disable_stdin, - and then throws, will leave stdin inoperable. */ - async_enable_stdin (); - /* If we long-jumped out of do_one_event, we probably didn't - get around to resetting the prompt, which leaves readline - in a messed-up state. Reset it here. */ - current_ui->prompt_state = PROMPT_NEEDED; - gdb::observers::command_error.notify (); - /* This call looks bizarre, but it is required. If the user - entered a command that caused an error, - after_char_processing_hook won't be called from - rl_callback_read_char_wrapper. Using a cleanup there - won't work, since we want this function to be called - after a new prompt is printed. */ - if (after_char_processing_hook) - (*after_char_processing_hook) (); - /* Maybe better to set a flag to be checked somewhere as to - whether display the prompt or not. */ - } - - if (result < 0) - break; - } - - /* We are done with the event loop. There are no more event sources - to listen to. So we exit GDB. */ - return; -} - - -/* Wrapper function for create_file_handler, so that the caller - doesn't have to know implementation details about the use of poll - vs. select. */ -void -add_file_handler (int fd, handler_func * proc, gdb_client_data client_data) -{ -#ifdef HAVE_POLL - struct pollfd fds; -#endif - - if (use_poll) - { -#ifdef HAVE_POLL - /* Check to see if poll () is usable. If not, we'll switch to - use select. This can happen on systems like - m68k-motorola-sys, `poll' cannot be used to wait for `stdin'. - On m68k-motorola-sysv, tty's are not stream-based and not - `poll'able. */ - fds.fd = fd; - fds.events = POLLIN; - if (poll (&fds, 1, 0) == 1 && (fds.revents & POLLNVAL)) - use_poll = 0; -#else - internal_error (__FILE__, __LINE__, - _("use_poll without HAVE_POLL")); -#endif /* HAVE_POLL */ - } - if (use_poll) - { -#ifdef HAVE_POLL - create_file_handler (fd, POLLIN, proc, client_data); -#else - internal_error (__FILE__, __LINE__, - _("use_poll without HAVE_POLL")); -#endif - } - else - create_file_handler (fd, GDB_READABLE | GDB_EXCEPTION, - proc, client_data); -} - -/* Add a file handler/descriptor to the list of descriptors we are - interested in. - - FD is the file descriptor for the file/stream to be listened to. - - For the poll case, MASK is a combination (OR) of POLLIN, - POLLRDNORM, POLLRDBAND, POLLPRI, POLLOUT, POLLWRNORM, POLLWRBAND: - these are the events we are interested in. If any of them occurs, - proc should be called. - - For the select case, MASK is a combination of READABLE, WRITABLE, - EXCEPTION. PROC is the procedure that will be called when an event - occurs for FD. CLIENT_DATA is the argument to pass to PROC. */ - -static void -create_file_handler (int fd, int mask, handler_func * proc, - gdb_client_data client_data) -{ - file_handler *file_ptr; - - /* Do we already have a file handler for this file? (We may be - changing its associated procedure). */ - for (file_ptr = gdb_notifier.first_file_handler; file_ptr != NULL; - file_ptr = file_ptr->next_file) - { - if (file_ptr->fd == fd) - break; - } - - /* It is a new file descriptor. Add it to the list. Otherwise, just - change the data associated with it. */ - if (file_ptr == NULL) - { - file_ptr = XNEW (file_handler); - file_ptr->fd = fd; - file_ptr->ready_mask = 0; - file_ptr->next_file = gdb_notifier.first_file_handler; - gdb_notifier.first_file_handler = file_ptr; - - if (use_poll) - { -#ifdef HAVE_POLL - gdb_notifier.num_fds++; - if (gdb_notifier.poll_fds) - gdb_notifier.poll_fds = - (struct pollfd *) xrealloc (gdb_notifier.poll_fds, - (gdb_notifier.num_fds - * sizeof (struct pollfd))); - else - gdb_notifier.poll_fds = - XNEW (struct pollfd); - (gdb_notifier.poll_fds + gdb_notifier.num_fds - 1)->fd = fd; - (gdb_notifier.poll_fds + gdb_notifier.num_fds - 1)->events = mask; - (gdb_notifier.poll_fds + gdb_notifier.num_fds - 1)->revents = 0; -#else - internal_error (__FILE__, __LINE__, - _("use_poll without HAVE_POLL")); -#endif /* HAVE_POLL */ - } - else - { - if (mask & GDB_READABLE) - FD_SET (fd, &gdb_notifier.check_masks[0]); - else - FD_CLR (fd, &gdb_notifier.check_masks[0]); - - if (mask & GDB_WRITABLE) - FD_SET (fd, &gdb_notifier.check_masks[1]); - else - FD_CLR (fd, &gdb_notifier.check_masks[1]); - - if (mask & GDB_EXCEPTION) - FD_SET (fd, &gdb_notifier.check_masks[2]); - else - FD_CLR (fd, &gdb_notifier.check_masks[2]); - - if (gdb_notifier.num_fds <= fd) - gdb_notifier.num_fds = fd + 1; - } - } - - file_ptr->proc = proc; - file_ptr->client_data = client_data; - file_ptr->mask = mask; -} - -/* Return the next file handler to handle, and advance to the next - file handler, wrapping around if the end of the list is - reached. */ - -static file_handler * -get_next_file_handler_to_handle_and_advance (void) -{ - file_handler *curr_next; - - /* The first time around, this is still NULL. */ - if (gdb_notifier.next_file_handler == NULL) - gdb_notifier.next_file_handler = gdb_notifier.first_file_handler; - - curr_next = gdb_notifier.next_file_handler; - gdb_assert (curr_next != NULL); - - /* Advance. */ - gdb_notifier.next_file_handler = curr_next->next_file; - /* Wrap around, if necessary. */ - if (gdb_notifier.next_file_handler == NULL) - gdb_notifier.next_file_handler = gdb_notifier.first_file_handler; - - return curr_next; -} - -/* Remove the file descriptor FD from the list of monitored fd's: - i.e. we don't care anymore about events on the FD. */ -void -delete_file_handler (int fd) -{ - file_handler *file_ptr, *prev_ptr = NULL; - int i; -#ifdef HAVE_POLL - int j; - struct pollfd *new_poll_fds; -#endif - - /* Find the entry for the given file. */ - - for (file_ptr = gdb_notifier.first_file_handler; file_ptr != NULL; - file_ptr = file_ptr->next_file) - { - if (file_ptr->fd == fd) - break; - } - - if (file_ptr == NULL) - return; - - if (use_poll) - { -#ifdef HAVE_POLL - /* Create a new poll_fds array by copying every fd's information - but the one we want to get rid of. */ - - new_poll_fds = (struct pollfd *) - xmalloc ((gdb_notifier.num_fds - 1) * sizeof (struct pollfd)); - - for (i = 0, j = 0; i < gdb_notifier.num_fds; i++) - { - if ((gdb_notifier.poll_fds + i)->fd != fd) - { - (new_poll_fds + j)->fd = (gdb_notifier.poll_fds + i)->fd; - (new_poll_fds + j)->events = (gdb_notifier.poll_fds + i)->events; - (new_poll_fds + j)->revents - = (gdb_notifier.poll_fds + i)->revents; - j++; - } - } - xfree (gdb_notifier.poll_fds); - gdb_notifier.poll_fds = new_poll_fds; - gdb_notifier.num_fds--; -#else - internal_error (__FILE__, __LINE__, - _("use_poll without HAVE_POLL")); -#endif /* HAVE_POLL */ - } - else - { - if (file_ptr->mask & GDB_READABLE) - FD_CLR (fd, &gdb_notifier.check_masks[0]); - if (file_ptr->mask & GDB_WRITABLE) - FD_CLR (fd, &gdb_notifier.check_masks[1]); - if (file_ptr->mask & GDB_EXCEPTION) - FD_CLR (fd, &gdb_notifier.check_masks[2]); - - /* Find current max fd. */ - - if ((fd + 1) == gdb_notifier.num_fds) - { - gdb_notifier.num_fds--; - for (i = gdb_notifier.num_fds; i; i--) - { - if (FD_ISSET (i - 1, &gdb_notifier.check_masks[0]) - || FD_ISSET (i - 1, &gdb_notifier.check_masks[1]) - || FD_ISSET (i - 1, &gdb_notifier.check_masks[2])) - break; - } - gdb_notifier.num_fds = i; - } - } - - /* Deactivate the file descriptor, by clearing its mask, - so that it will not fire again. */ - - file_ptr->mask = 0; - - /* If this file handler was going to be the next one to be handled, - advance to the next's next, if any. */ - if (gdb_notifier.next_file_handler == file_ptr) - { - if (file_ptr->next_file == NULL - && file_ptr == gdb_notifier.first_file_handler) - gdb_notifier.next_file_handler = NULL; - else - get_next_file_handler_to_handle_and_advance (); - } - - /* Get rid of the file handler in the file handler list. */ - if (file_ptr == gdb_notifier.first_file_handler) - gdb_notifier.first_file_handler = file_ptr->next_file; - else - { - for (prev_ptr = gdb_notifier.first_file_handler; - prev_ptr->next_file != file_ptr; - prev_ptr = prev_ptr->next_file) - ; - prev_ptr->next_file = file_ptr->next_file; - } - xfree (file_ptr); -} - -/* Handle the given event by calling the procedure associated to the - corresponding file handler. */ - -static void -handle_file_event (file_handler *file_ptr, int ready_mask) -{ - int mask; -#ifdef HAVE_POLL - int error_mask; -#endif - - { - { - /* With poll, the ready_mask could have any of three events - set to 1: POLLHUP, POLLERR, POLLNVAL. These events - cannot be used in the requested event mask (events), but - they can be returned in the return mask (revents). We - need to check for those event too, and add them to the - mask which will be passed to the handler. */ - - /* See if the desired events (mask) match the received - events (ready_mask). */ - - if (use_poll) - { -#ifdef HAVE_POLL - /* POLLHUP means EOF, but can be combined with POLLIN to - signal more data to read. */ - error_mask = POLLHUP | POLLERR | POLLNVAL; - mask = ready_mask & (file_ptr->mask | error_mask); - - if ((mask & (POLLERR | POLLNVAL)) != 0) - { - /* Work in progress. We may need to tell somebody - what kind of error we had. */ - if (mask & POLLERR) - printf_unfiltered (_("Error detected on fd %d\n"), - file_ptr->fd); - if (mask & POLLNVAL) - printf_unfiltered (_("Invalid or non-`poll'able fd %d\n"), - file_ptr->fd); - file_ptr->error = 1; - } - else - file_ptr->error = 0; -#else - internal_error (__FILE__, __LINE__, - _("use_poll without HAVE_POLL")); -#endif /* HAVE_POLL */ - } - else - { - if (ready_mask & GDB_EXCEPTION) - { - printf_unfiltered (_("Exception condition detected " - "on fd %d\n"), file_ptr->fd); - file_ptr->error = 1; - } - else - file_ptr->error = 0; - mask = ready_mask & file_ptr->mask; - } - - /* If there was a match, then call the handler. */ - if (mask != 0) - (*file_ptr->proc) (file_ptr->error, file_ptr->client_data); - } - } -} - -/* Wait for new events on the monitored file descriptors. Run the - event handler if the first descriptor that is detected by the poll. - If BLOCK and if there are no events, this function will block in - the call to poll. Return 1 if an event was handled. Return -1 if - there are no file descriptors to monitor. Return 1 if an event was - handled, otherwise returns 0. */ - -static int -gdb_wait_for_event (int block) -{ - file_handler *file_ptr; - int num_found = 0; - - /* Make sure all output is done before getting another event. */ - ui_file_flush (gdb_stdout); - ui_file_flush (gdb_stderr); - - if (gdb_notifier.num_fds == 0) - return -1; - - if (block) - update_wait_timeout (); - - if (use_poll) - { -#ifdef HAVE_POLL - int timeout; - - if (block) - timeout = gdb_notifier.timeout_valid ? gdb_notifier.poll_timeout : -1; - else - timeout = 0; - - num_found = poll (gdb_notifier.poll_fds, - (unsigned long) gdb_notifier.num_fds, timeout); - - /* Don't print anything if we get out of poll because of a - signal. */ - if (num_found == -1 && errno != EINTR) - perror_with_name (("poll")); -#else - internal_error (__FILE__, __LINE__, - _("use_poll without HAVE_POLL")); -#endif /* HAVE_POLL */ - } - else - { - struct timeval select_timeout; - struct timeval *timeout_p; - - if (block) - timeout_p = gdb_notifier.timeout_valid - ? &gdb_notifier.select_timeout : NULL; - else - { - memset (&select_timeout, 0, sizeof (select_timeout)); - timeout_p = &select_timeout; - } - - gdb_notifier.ready_masks[0] = gdb_notifier.check_masks[0]; - gdb_notifier.ready_masks[1] = gdb_notifier.check_masks[1]; - gdb_notifier.ready_masks[2] = gdb_notifier.check_masks[2]; - num_found = gdb_select (gdb_notifier.num_fds, - &gdb_notifier.ready_masks[0], - &gdb_notifier.ready_masks[1], - &gdb_notifier.ready_masks[2], - timeout_p); - - /* Clear the masks after an error from select. */ - if (num_found == -1) - { - FD_ZERO (&gdb_notifier.ready_masks[0]); - FD_ZERO (&gdb_notifier.ready_masks[1]); - FD_ZERO (&gdb_notifier.ready_masks[2]); - - /* Dont print anything if we got a signal, let gdb handle - it. */ - if (errno != EINTR) - perror_with_name (("select")); - } - } - - /* Avoid looking at poll_fds[i]->revents if no event fired. */ - if (num_found <= 0) - return 0; - - /* Run event handlers. We always run just one handler and go back - to polling, in case a handler changes the notifier list. Since - events for sources we haven't consumed yet wake poll/select - immediately, no event is lost. */ - - /* To level the fairness across event descriptors, we handle them in - a round-robin-like fashion. The number and order of descriptors - may change between invocations, but this is good enough. */ - if (use_poll) - { -#ifdef HAVE_POLL - int i; - int mask; - - while (1) - { - if (gdb_notifier.next_poll_fds_index >= gdb_notifier.num_fds) - gdb_notifier.next_poll_fds_index = 0; - i = gdb_notifier.next_poll_fds_index++; - - gdb_assert (i < gdb_notifier.num_fds); - if ((gdb_notifier.poll_fds + i)->revents) - break; - } - - for (file_ptr = gdb_notifier.first_file_handler; - file_ptr != NULL; - file_ptr = file_ptr->next_file) - { - if (file_ptr->fd == (gdb_notifier.poll_fds + i)->fd) - break; - } - gdb_assert (file_ptr != NULL); - - mask = (gdb_notifier.poll_fds + i)->revents; - handle_file_event (file_ptr, mask); - return 1; -#else - internal_error (__FILE__, __LINE__, - _("use_poll without HAVE_POLL")); -#endif /* HAVE_POLL */ - } - else - { - /* See comment about even source fairness above. */ - int mask = 0; - - do - { - file_ptr = get_next_file_handler_to_handle_and_advance (); - - if (FD_ISSET (file_ptr->fd, &gdb_notifier.ready_masks[0])) - mask |= GDB_READABLE; - if (FD_ISSET (file_ptr->fd, &gdb_notifier.ready_masks[1])) - mask |= GDB_WRITABLE; - if (FD_ISSET (file_ptr->fd, &gdb_notifier.ready_masks[2])) - mask |= GDB_EXCEPTION; - } - while (mask == 0); - - handle_file_event (file_ptr, mask); - return 1; - } - return 0; -} - - -/* Create an asynchronous handler, allocating memory for it. - Return a pointer to the newly created handler. - This pointer will be used to invoke the handler by - invoke_async_signal_handler. - PROC is the function to call with CLIENT_DATA argument - whenever the handler is invoked. */ -async_signal_handler * -create_async_signal_handler (sig_handler_func * proc, - gdb_client_data client_data) -{ - async_signal_handler *async_handler_ptr; - - async_handler_ptr = XNEW (async_signal_handler); - async_handler_ptr->ready = 0; - async_handler_ptr->next_handler = NULL; - async_handler_ptr->proc = proc; - async_handler_ptr->client_data = client_data; - if (sighandler_list.first_handler == NULL) - sighandler_list.first_handler = async_handler_ptr; - else - sighandler_list.last_handler->next_handler = async_handler_ptr; - sighandler_list.last_handler = async_handler_ptr; - return async_handler_ptr; -} - -/* Mark the handler (ASYNC_HANDLER_PTR) as ready. This information - will be used when the handlers are invoked, after we have waited - for some event. The caller of this function is the interrupt - handler associated with a signal. */ -void -mark_async_signal_handler (async_signal_handler * async_handler_ptr) -{ - async_handler_ptr->ready = 1; - serial_event_set (async_signal_handlers_serial_event); -} - -/* See event-loop.h. */ - -void -clear_async_signal_handler (async_signal_handler *async_handler_ptr) -{ - async_handler_ptr->ready = 0; -} - -/* See event-loop.h. */ - -int -async_signal_handler_is_marked (async_signal_handler *async_handler_ptr) -{ - return async_handler_ptr->ready; -} - -/* Call all the handlers that are ready. Returns true if any was - indeed ready. */ - -static int -invoke_async_signal_handlers (void) -{ - async_signal_handler *async_handler_ptr; - int any_ready = 0; - - /* We're going to handle all pending signals, so no need to wake up - the event loop again the next time around. Note this must be - cleared _before_ calling the callbacks, to avoid races. */ - serial_event_clear (async_signal_handlers_serial_event); - - /* Invoke all ready handlers. */ - - while (1) - { - for (async_handler_ptr = sighandler_list.first_handler; - async_handler_ptr != NULL; - async_handler_ptr = async_handler_ptr->next_handler) - { - if (async_handler_ptr->ready) - break; - } - if (async_handler_ptr == NULL) - break; - any_ready = 1; - async_handler_ptr->ready = 0; - /* Async signal handlers have no connection to whichever was the - current UI, and thus always run on the main one. */ - current_ui = main_ui; - (*async_handler_ptr->proc) (async_handler_ptr->client_data); - } - - return any_ready; -} - -/* Delete an asynchronous handler (ASYNC_HANDLER_PTR). - Free the space allocated for it. */ -void -delete_async_signal_handler (async_signal_handler ** async_handler_ptr) -{ - async_signal_handler *prev_ptr; - - if (sighandler_list.first_handler == (*async_handler_ptr)) - { - sighandler_list.first_handler = (*async_handler_ptr)->next_handler; - if (sighandler_list.first_handler == NULL) - sighandler_list.last_handler = NULL; - } - else - { - prev_ptr = sighandler_list.first_handler; - while (prev_ptr && prev_ptr->next_handler != (*async_handler_ptr)) - prev_ptr = prev_ptr->next_handler; - gdb_assert (prev_ptr); - prev_ptr->next_handler = (*async_handler_ptr)->next_handler; - if (sighandler_list.last_handler == (*async_handler_ptr)) - sighandler_list.last_handler = prev_ptr; - } - xfree ((*async_handler_ptr)); - (*async_handler_ptr) = NULL; -} - -/* Create an asynchronous event handler, allocating memory for it. - Return a pointer to the newly created handler. PROC is the - function to call with CLIENT_DATA argument whenever the handler is - invoked. */ -async_event_handler * -create_async_event_handler (async_event_handler_func *proc, - gdb_client_data client_data) -{ - async_event_handler *h; - - h = XNEW (struct async_event_handler); - h->ready = 0; - h->next_handler = NULL; - h->proc = proc; - h->client_data = client_data; - if (async_event_handler_list.first_handler == NULL) - async_event_handler_list.first_handler = h; - else - async_event_handler_list.last_handler->next_handler = h; - async_event_handler_list.last_handler = h; - return h; -} - -/* Mark the handler (ASYNC_HANDLER_PTR) as ready. This information - will be used by gdb_do_one_event. The caller will be whoever - created the event source, and wants to signal that the event is - ready to be handled. */ -void -mark_async_event_handler (async_event_handler *async_handler_ptr) -{ - async_handler_ptr->ready = 1; -} - -/* See event-loop.h. */ - -void -clear_async_event_handler (async_event_handler *async_handler_ptr) -{ - async_handler_ptr->ready = 0; -} - -/* Check if asynchronous event handlers are ready, and call the - handler function for one that is. */ - -static int -check_async_event_handlers (void) -{ - async_event_handler *async_handler_ptr; - - for (async_handler_ptr = async_event_handler_list.first_handler; - async_handler_ptr != NULL; - async_handler_ptr = async_handler_ptr->next_handler) - { - if (async_handler_ptr->ready) - { - async_handler_ptr->ready = 0; - (*async_handler_ptr->proc) (async_handler_ptr->client_data); - return 1; - } - } - - return 0; -} - -/* Delete an asynchronous handler (ASYNC_HANDLER_PTR). - Free the space allocated for it. */ -void -delete_async_event_handler (async_event_handler **async_handler_ptr) -{ - async_event_handler *prev_ptr; - - if (async_event_handler_list.first_handler == *async_handler_ptr) - { - async_event_handler_list.first_handler - = (*async_handler_ptr)->next_handler; - if (async_event_handler_list.first_handler == NULL) - async_event_handler_list.last_handler = NULL; - } - else - { - prev_ptr = async_event_handler_list.first_handler; - while (prev_ptr && prev_ptr->next_handler != *async_handler_ptr) - prev_ptr = prev_ptr->next_handler; - gdb_assert (prev_ptr); - prev_ptr->next_handler = (*async_handler_ptr)->next_handler; - if (async_event_handler_list.last_handler == (*async_handler_ptr)) - async_event_handler_list.last_handler = prev_ptr; - } - xfree (*async_handler_ptr); - *async_handler_ptr = NULL; -} - -/* Create a timer that will expire in MS milliseconds from now. When - the timer is ready, PROC will be executed. At creation, the timer - is added to the timers queue. This queue is kept sorted in order - of increasing timers. Return a handle to the timer struct. */ - -int -create_timer (int ms, timer_handler_func *proc, - gdb_client_data client_data) -{ - using namespace std::chrono; - struct gdb_timer *timer_ptr, *timer_index, *prev_timer; - - steady_clock::time_point time_now = steady_clock::now (); - - timer_ptr = new gdb_timer (); - timer_ptr->when = time_now + milliseconds (ms); - timer_ptr->proc = proc; - timer_ptr->client_data = client_data; - timer_list.num_timers++; - timer_ptr->timer_id = timer_list.num_timers; - - /* Now add the timer to the timer queue, making sure it is sorted in - increasing order of expiration. */ - - for (timer_index = timer_list.first_timer; - timer_index != NULL; - timer_index = timer_index->next) - { - if (timer_index->when > timer_ptr->when) - break; - } - - if (timer_index == timer_list.first_timer) - { - timer_ptr->next = timer_list.first_timer; - timer_list.first_timer = timer_ptr; - - } - else - { - for (prev_timer = timer_list.first_timer; - prev_timer->next != timer_index; - prev_timer = prev_timer->next) - ; - - prev_timer->next = timer_ptr; - timer_ptr->next = timer_index; - } - - gdb_notifier.timeout_valid = 0; - return timer_ptr->timer_id; -} - -/* There is a chance that the creator of the timer wants to get rid of - it before it expires. */ -void -delete_timer (int id) -{ - struct gdb_timer *timer_ptr, *prev_timer = NULL; - - /* Find the entry for the given timer. */ - - for (timer_ptr = timer_list.first_timer; timer_ptr != NULL; - timer_ptr = timer_ptr->next) - { - if (timer_ptr->timer_id == id) - break; - } - - if (timer_ptr == NULL) - return; - /* Get rid of the timer in the timer list. */ - if (timer_ptr == timer_list.first_timer) - timer_list.first_timer = timer_ptr->next; - else - { - for (prev_timer = timer_list.first_timer; - prev_timer->next != timer_ptr; - prev_timer = prev_timer->next) - ; - prev_timer->next = timer_ptr->next; - } - delete timer_ptr; - - gdb_notifier.timeout_valid = 0; -} - -/* Convert a std::chrono duration to a struct timeval. */ - -template<typename Duration> -static struct timeval -duration_cast_timeval (const Duration &d) -{ - using namespace std::chrono; - seconds sec = duration_cast<seconds> (d); - microseconds msec = duration_cast<microseconds> (d - sec); - - struct timeval tv; - tv.tv_sec = sec.count (); - tv.tv_usec = msec.count (); - return tv; -} - -/* Update the timeout for the select() or poll(). Returns true if the - timer has already expired, false otherwise. */ - -static int -update_wait_timeout (void) -{ - if (timer_list.first_timer != NULL) - { - using namespace std::chrono; - steady_clock::time_point time_now = steady_clock::now (); - struct timeval timeout; - - if (timer_list.first_timer->when < time_now) - { - /* It expired already. */ - timeout.tv_sec = 0; - timeout.tv_usec = 0; - } - else - { - steady_clock::duration d = timer_list.first_timer->when - time_now; - timeout = duration_cast_timeval (d); - } - - /* Update the timeout for select/ poll. */ - if (use_poll) - { -#ifdef HAVE_POLL - gdb_notifier.poll_timeout = timeout.tv_sec * 1000; -#else - internal_error (__FILE__, __LINE__, - _("use_poll without HAVE_POLL")); -#endif /* HAVE_POLL */ - } - else - { - gdb_notifier.select_timeout.tv_sec = timeout.tv_sec; - gdb_notifier.select_timeout.tv_usec = timeout.tv_usec; - } - gdb_notifier.timeout_valid = 1; - - if (timer_list.first_timer->when < time_now) - return 1; - } - else - gdb_notifier.timeout_valid = 0; - - return 0; -} - -/* Check whether a timer in the timers queue is ready. If a timer is - ready, call its handler and return. Update the timeout for the - select() or poll() as well. Return 1 if an event was handled, - otherwise returns 0.*/ - -static int -poll_timers (void) -{ - if (update_wait_timeout ()) - { - struct gdb_timer *timer_ptr = timer_list.first_timer; - timer_handler_func *proc = timer_ptr->proc; - gdb_client_data client_data = timer_ptr->client_data; - - /* Get rid of the timer from the beginning of the list. */ - timer_list.first_timer = timer_ptr->next; - - /* Delete the timer before calling the callback, not after, in - case the callback itself decides to try deleting the timer - too. */ - delete timer_ptr; - - /* Call the procedure associated with that timer. */ - (proc) (client_data); - - return 1; - } - - return 0; -} diff -Nru gdb-9.1/gdb/event-loop.h gdb-10.2/gdb/event-loop.h --- gdb-9.1/gdb/event-loop.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/event-loop.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,134 +0,0 @@ -/* Definitions used by the GDB event loop. - Copyright (C) 1999-2020 Free Software Foundation, Inc. - Written by Elena Zannoni <ezannoni@cygnus.com> of Cygnus Solutions. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef EVENT_LOOP_H -#define EVENT_LOOP_H - -/* An event loop listens for events from multiple event sources. When - an event arrives, it is queued and processed by calling the - appropriate event handler. The event loop then continues to listen - for more events. An event loop completes when there are no event - sources to listen on. External event sources can be plugged into - the loop. - - There are 4 main components: - - a list of file descriptors to be monitored, GDB_NOTIFIER. - - a list of asynchronous event sources to be monitored, - ASYNC_EVENT_HANDLER_LIST. - - a list of events that have occurred, EVENT_QUEUE. - - a list of signal handling functions, SIGHANDLER_LIST. - - GDB_NOTIFIER keeps track of the file descriptor based event - sources. ASYNC_EVENT_HANDLER_LIST keeps track of asynchronous - event sources that are signalled by some component of gdb, usually - a target_ops instance. Event sources for gdb are currently the UI - and the target. Gdb communicates with the command line user - interface via the readline library and usually communicates with - remote targets via a serial port. Serial ports are represented in - GDB as file descriptors and select/poll calls. For native targets - instead, the communication varies across operating system debug - APIs, but usually consists of calls to ptrace and waits (via - signals) or calls to poll/select (via file descriptors). In the - current gdb, the code handling events related to the target resides - in wait_for_inferior for synchronous targets; or, for asynchronous - capable targets, by having the target register either a target - controlled file descriptor and/or an asynchronous event source in - the event loop, with the fetch_inferior_event function as the event - callback. In both the synchronous and asynchronous cases, usually - the target event is collected through the target_wait interface. - The target is free to install other event sources in the event loop - if it so requires. - - EVENT_QUEUE keeps track of the events that have happened during the - last iteration of the event loop, and need to be processed. An - event is represented by a procedure to be invoked in order to - process the event. The queue is scanned head to tail. If the - event of interest is a change of state in a file descriptor, then a - call to poll or select will be made to detect it. - - If the events generate signals, they are also queued by special - functions that are invoked through traditional signal handlers. - The actions to be taken is response to such events will be executed - when the SIGHANDLER_LIST is scanned, the next time through the - infinite loop. - - Corollary tasks are the creation and deletion of event sources. */ - -typedef void *gdb_client_data; -struct async_signal_handler; -struct async_event_handler; -typedef void (handler_func) (int, gdb_client_data); -typedef void (sig_handler_func) (gdb_client_data); -typedef void (async_event_handler_func) (gdb_client_data); -typedef void (timer_handler_func) (gdb_client_data); - -/* Exported functions from event-loop.c */ - -extern void start_event_loop (void); -extern int gdb_do_one_event (void); -extern void delete_file_handler (int fd); -extern void add_file_handler (int fd, handler_func *proc, - gdb_client_data client_data); -extern struct async_signal_handler * - create_async_signal_handler (sig_handler_func *proc, - gdb_client_data client_data); -extern void delete_async_signal_handler (struct async_signal_handler **); -extern int create_timer (int milliseconds, - timer_handler_func *proc, - gdb_client_data client_data); -extern void delete_timer (int id); - -/* Call the handler from HANDLER the next time through the event - loop. */ -extern void mark_async_signal_handler (struct async_signal_handler *handler); - -/* Returns true if HANDLER is marked ready. */ - -extern int - async_signal_handler_is_marked (struct async_signal_handler *handler); - -/* Mark HANDLER as NOT ready. */ - -extern void clear_async_signal_handler (struct async_signal_handler *handler); - -/* Create and register an asynchronous event source in the event loop, - and set PROC as its callback. CLIENT_DATA is passed as argument to - PROC upon its invocation. Returns a pointer to an opaque structure - used to mark as ready and to later delete this event source from - the event loop. */ -extern struct async_event_handler * - create_async_event_handler (async_event_handler_func *proc, - gdb_client_data client_data); - -/* Remove the event source pointed by HANDLER_PTR created by - CREATE_ASYNC_EVENT_HANDLER from the event loop, and release it. */ -extern void - delete_async_event_handler (struct async_event_handler **handler_ptr); - -/* Call the handler from HANDLER the next time through the event - loop. */ -extern void mark_async_event_handler (struct async_event_handler *handler); - -/* Mark the handler (ASYNC_HANDLER_PTR) as NOT ready. */ - -extern void clear_async_event_handler (struct async_event_handler *handler); - -extern void initialize_async_signal_handlers (void); - -#endif /* EVENT_LOOP_H */ diff -Nru gdb-9.1/gdb/event-top.c gdb-10.2/gdb/event-top.c --- gdb-9.1/gdb/event-top.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/event-top.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Top level stuff for GDB, the GNU debugger. - Copyright (C) 1999-2020 Free Software Foundation, Inc. + Copyright (C) 1999-2021 Free Software Foundation, Inc. Written by Elena Zannoni <ezannoni@cygnus.com> of Cygnus Solutions. @@ -25,7 +25,7 @@ #include "infrun.h" #include "target.h" #include "terminal.h" -#include "event-loop.h" +#include "gdbsupport/event-loop.h" #include "event-top.h" #include "interps.h" #include <signal.h> @@ -39,8 +39,9 @@ #include "maint.h" #include "gdbsupport/buffer.h" #include "ser-event.h" -#include "gdb_select.h" +#include "gdbsupport/gdb_select.h" #include "gdbsupport/gdb-sigmask.h" +#include "async-event.h" /* readline include files. */ #include "readline/readline.h" @@ -848,9 +849,17 @@ } -/* See event-top.h. */ +/* The SIGSEGV handler for this thread, or NULL if there is none. GDB + always installs a global SIGSEGV handler, and then lets threads + indicate their interest in handling the signal by setting this + thread-local variable. + + This is a static variable instead of extern because on various platforms + (notably Cygwin) extern thread_local variables cause link errors. So + instead, we have scoped_segv_handler_restore, which also makes it impossible + to accidentally forget to restore it to the original value. */ -thread_local void (*thread_local_segv_handler) (int); +static thread_local void (*thread_local_segv_handler) (int); static void handle_sigsegv (int sig); @@ -881,7 +890,7 @@ install_handle_sigsegv (); if (thread_local_segv_handler == nullptr) - abort (); + abort (); /* ARI: abort */ thread_local_segv_handler (sig); } @@ -1137,12 +1146,16 @@ exception_print (gdb_stderr, exception); } - try - { - pop_all_targets (); - } - catch (const gdb_exception &exception) + for (inferior *inf : all_inferiors ()) { + switch_to_inferior_no_thread (inf); + try + { + pop_all_targets (); + } + catch (const gdb_exception &exception) + { + } } signal (SIGHUP, SIG_DFL); /*FIXME: ??????????? */ @@ -1281,3 +1294,14 @@ gdb_rl_callback_handler_remove (); delete_file_handler (ui->input_fd); } + +scoped_segv_handler_restore::scoped_segv_handler_restore (segv_handler_t new_handler) +{ + m_old_handler = thread_local_segv_handler; + thread_local_segv_handler = new_handler; +} + +scoped_segv_handler_restore::~scoped_segv_handler_restore() +{ + thread_local_segv_handler = m_old_handler; +} diff -Nru gdb-9.1/gdb/event-top.h gdb-10.2/gdb/event-top.h --- gdb-9.1/gdb/event-top.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/event-top.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Definitions used by event-top.c, for GDB, the GNU debugger. - Copyright (C) 1999-2020 Free Software Foundation, Inc. + Copyright (C) 1999-2021 Free Software Foundation, Inc. Written by Elena Zannoni <ezannoni@cygnus.com> of Cygnus Solutions. @@ -70,10 +70,19 @@ currently installed. */ extern void gdb_rl_callback_handler_reinstall (void); -/* The SIGSEGV handler for this thread, or NULL if there is none. GDB - always installs a global SIGSEGV handler, and then lets threads - indicate their interest in handling the signal by setting this - thread-local variable. */ -extern thread_local void (*thread_local_segv_handler) (int); +typedef void (*segv_handler_t) (int); + +/* On construction, replaces the current thread's SIGSEGV handler with + the provided one. On destruction, restores the handler to the + original one. */ +class scoped_segv_handler_restore +{ + public: + scoped_segv_handler_restore (segv_handler_t new_handler); + ~scoped_segv_handler_restore (); + + private: + segv_handler_t m_old_handler; +}; #endif diff -Nru gdb-9.1/gdb/exceptions.c gdb-10.2/gdb/exceptions.c --- gdb-9.1/gdb/exceptions.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/exceptions.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Exception (throw catch) mechanism, for GDB, the GNU debugger. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -39,11 +39,7 @@ deprecated_error_begin_hook (); gdb::optional<target_terminal::scoped_restore_terminal_state> term_state; - /* While normally there's always something pushed on the target - stack, the NULL check is needed here because we can get here very - early during startup, before the target stack is first - initialized. */ - if (current_top_target () != NULL && target_supports_terminal_ours ()) + if (target_supports_terminal_ours ()) { term_state.emplace (); target_terminal::ours_for_output (); @@ -89,7 +85,7 @@ else { end++; - ui_file_write (file, start, end - start); + file->write (start, end - start); } } fprintf_filtered (file, "\n"); diff -Nru gdb-9.1/gdb/exceptions.h gdb-10.2/gdb/exceptions.h --- gdb-9.1/gdb/exceptions.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/exceptions.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Exception (throw catch) mechanism, for GDB, the GNU debugger. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/exec.c gdb-10.2/gdb/exec.c --- gdb-9.1/gdb/exec.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/exec.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Work with executable files, for GDB. - Copyright (C) 1988-2020 Free Software Foundation, Inc. + Copyright (C) 1988-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -33,9 +33,11 @@ #include "arch-utils.h" #include "gdbthread.h" #include "progspace.h" +#include "progspace-and-thread.h" #include "gdb_bfd.h" #include "gcore.h" #include "source.h" +#include "build-id.h" #include <fcntl.h> #include "readline/tilde.h" @@ -46,6 +48,7 @@ #include "solist.h" #include <algorithm> #include "gdbsupport/pathstuff.h" +#include "cli/cli-style.h" void (*deprecated_file_changed_hook) (const char *); @@ -82,6 +85,50 @@ static exec_target exec_ops; +/* How to handle a mismatch between the current exec file and the exec + file determined from target. */ + +static const char *const exec_file_mismatch_names[] + = {"ask", "warn", "off", NULL }; +enum exec_file_mismatch_mode + { + exec_file_mismatch_ask, exec_file_mismatch_warn, exec_file_mismatch_off + }; +static const char *exec_file_mismatch = exec_file_mismatch_names[0]; +static enum exec_file_mismatch_mode exec_file_mismatch_mode + = exec_file_mismatch_ask; + +/* Show command. */ +static void +show_exec_file_mismatch_command (struct ui_file *file, int from_tty, + struct cmd_list_element *c, const char *value) +{ + fprintf_filtered (gdb_stdout, + _("exec-file-mismatch handling is currently \"%s\".\n"), + exec_file_mismatch_names[exec_file_mismatch_mode]); +} + +/* Set command. Change the setting for range checking. */ +static void +set_exec_file_mismatch_command (const char *ignore, + int from_tty, struct cmd_list_element *c) +{ + for (enum exec_file_mismatch_mode mode = exec_file_mismatch_ask; + ; + mode = static_cast<enum exec_file_mismatch_mode>(1 + (int) mode)) + { + if (strcmp (exec_file_mismatch, exec_file_mismatch_names[mode]) == 0) + { + exec_file_mismatch_mode = mode; + return; + } + if (mode == exec_file_mismatch_off) + internal_error (__FILE__, __LINE__, + _("Unrecognized exec-file-mismatch setting: \"%s\""), + exec_file_mismatch); + } +} + /* Whether to open exec and core files read-only or read-write. */ bool write_files = false; @@ -131,10 +178,9 @@ void exec_target::close () { - struct program_space *ss; scoped_restore_current_program_space restore_pspace; - ALL_PSPACES (ss) + for (struct program_space *ss : program_spaces) { set_current_program_space (ss); clear_section_table (current_target_sections); @@ -192,6 +238,106 @@ /* See gdbcore.h. */ void +validate_exec_file (int from_tty) +{ + /* If user asked to ignore the mismatch, do nothing. */ + if (exec_file_mismatch_mode == exec_file_mismatch_off) + return; + + const char *current_exec_file = get_exec_file (0); + struct inferior *inf = current_inferior (); + /* Try to determine a filename from the process itself. */ + const char *pid_exec_file = target_pid_to_exec_file (inf->pid); + bool build_id_mismatch = false; + + /* If we cannot validate the exec file, return. */ + if (current_exec_file == NULL || pid_exec_file == NULL) + return; + + /* Try validating via build-id, if available. This is the most + reliable check. */ + + /* In case current_exec_file was changed, reopen_exec_file ensures + an up to date build_id (will do nothing if the file timestamp + did not change). If exec file changed, reopen_exec_file has + allocated another file name, so get_exec_file again. */ + reopen_exec_file (); + current_exec_file = get_exec_file (0); + + const bfd_build_id *exec_file_build_id = build_id_bfd_get (exec_bfd); + if (exec_file_build_id != nullptr) + { + /* Prepend the target prefix, to force gdb_bfd_open to open the + file on the remote file system (if indeed remote). */ + std::string target_pid_exec_file + = std::string (TARGET_SYSROOT_PREFIX) + pid_exec_file; + + gdb_bfd_ref_ptr abfd (gdb_bfd_open (target_pid_exec_file.c_str (), + gnutarget, -1, false)); + if (abfd != nullptr) + { + const bfd_build_id *target_exec_file_build_id + = build_id_bfd_get (abfd.get ()); + + if (target_exec_file_build_id != nullptr) + { + if (exec_file_build_id->size == target_exec_file_build_id->size + && memcmp (exec_file_build_id->data, + target_exec_file_build_id->data, + exec_file_build_id->size) == 0) + { + /* Match. */ + return; + } + else + build_id_mismatch = true; + } + } + } + + if (build_id_mismatch) + { + std::string exec_file_target (pid_exec_file); + + /* In case the exec file is not local, exec_file_target has to point at + the target file system. */ + if (is_target_filename (current_exec_file) && !target_filesystem_is_local ()) + exec_file_target = TARGET_SYSROOT_PREFIX + exec_file_target; + + warning + (_("Build ID mismatch between current exec-file %ps\n" + "and automatically determined exec-file %ps\n" + "exec-file-mismatch handling is currently \"%s\""), + styled_string (file_name_style.style (), current_exec_file), + styled_string (file_name_style.style (), exec_file_target.c_str ()), + exec_file_mismatch_names[exec_file_mismatch_mode]); + if (exec_file_mismatch_mode == exec_file_mismatch_ask) + { + symfile_add_flags add_flags = SYMFILE_MAINLINE; + if (from_tty) + { + add_flags |= SYMFILE_VERBOSE; + add_flags |= SYMFILE_ALWAYS_CONFIRM; + } + try + { + symbol_file_add_main (exec_file_target.c_str (), add_flags); + exec_file_attach (exec_file_target.c_str (), from_tty); + } + catch (gdb_exception_error &err) + { + warning (_("loading %ps %s"), + styled_string (file_name_style.style (), + exec_file_target.c_str ()), + err.message != NULL ? err.what () : "error"); + } + } + } +} + +/* See gdbcore.h. */ + +void exec_file_locate_attach (int pid, int defer_bp_reset, int from_tty) { char *exec_file_target; @@ -300,6 +446,7 @@ #if defined(__GO32__) || defined(_WIN32) || defined(__CYGWIN__) if (scratch_chan < 0) { + int first_errno = errno; char *exename = (char *) alloca (strlen (filename) + 5); strcat (strcpy (exename, filename), ".exe"); @@ -308,6 +455,8 @@ O_RDWR | O_BINARY : O_RDONLY | O_BINARY, &scratch_storage); + if (scratch_chan < 0) + errno = first_errno; } #endif if (scratch_chan < 0) @@ -331,8 +480,9 @@ if (!exec_bfd) { - error (_("\"%s\": could not open as an executable file: %s."), - scratch_pathname, bfd_errmsg (bfd_get_error ())); + error (_("\"%ps\": could not open as an executable file: %s."), + styled_string (file_name_style.style (), scratch_pathname), + bfd_errmsg (bfd_get_error ())); } /* gdb_realpath_keepfile resolves symlinks on the local @@ -348,8 +498,8 @@ /* Make sure to close exec_bfd, or else "run" might try to use it. */ exec_close (); - error (_("\"%s\": not in executable format: %s"), - scratch_pathname, + error (_("\"%ps\": not in executable format: %s"), + styled_string (file_name_style.style (), scratch_pathname), gdb_bfd_errmsg (bfd_get_error (), matching).c_str ()); } @@ -358,8 +508,9 @@ /* Make sure to close exec_bfd, or else "run" might try to use it. */ exec_close (); - error (_("\"%s\": can't find the file sections: %s"), - scratch_pathname, bfd_errmsg (bfd_get_error ())); + error (_("\"%ps\": can't find the file sections: %s"), + styled_string (file_name_style.style (), scratch_pathname), + bfd_errmsg (bfd_get_error ())); } exec_bfd_mtime = bfd_get_mtime (exec_bfd); @@ -511,14 +662,13 @@ unsigned count; count = bfd_count_sections (some_bfd); - if (*start) - xfree (* start); + xfree (*start); *start = XNEWVEC (struct target_section, count); *end = *start; bfd_map_over_sections (some_bfd, add_to_section_table, (char *) end); - if (*end > *start + count) - internal_error (__FILE__, __LINE__, - _("failed internal consistency check")); + + gdb_assert (*end <= *start + count); + /* We could realloc the table, but it probably loses for most files. */ return 0; } @@ -547,10 +697,23 @@ table->sections[space + i].owner = owner; } + scoped_restore_current_pspace_and_thread restore_pspace_thread; + program_space *curr_pspace = current_program_space; + /* If these are the first file sections we can provide memory - from, push the file_stratum target. */ - if (!target_is_pushed (&exec_ops)) - push_target (&exec_ops); + from, push the file_stratum target. Must do this in all + inferiors sharing the program space. */ + for (inferior *inf : all_inferiors ()) + { + if (inf->pspace != curr_pspace) + continue; + + if (inf->target_is_pushed (&exec_ops)) + continue; + + switch_to_inferior_no_thread (inf); + push_target (&exec_ops); + } } } @@ -628,21 +791,39 @@ old_count = resize_section_table (table, dest - src); /* If we don't have any more sections to read memory from, - remove the file_stratum target from the stack. */ + remove the file_stratum target from the stack of each + inferior sharing the program space. */ if (old_count + (dest - src) == 0) { - struct program_space *pspace; + scoped_restore_current_pspace_and_thread restore_pspace_thread; + program_space *curr_pspace = current_program_space; + + for (inferior *inf : all_inferiors ()) + { + if (inf->pspace != curr_pspace) + continue; - ALL_PSPACES (pspace) - if (pspace->target_sections.sections - != pspace->target_sections.sections_end) - return; + if (inf->pspace->target_sections.sections + != inf->pspace->target_sections.sections_end) + continue; - unpush_target (&exec_ops); + switch_to_inferior_no_thread (inf); + unpush_target (&exec_ops); + } } } } +/* See exec.h. */ + +void +exec_on_vfork () +{ + if (current_program_space->target_sections.sections + != current_program_space->target_sections.sections_end) + push_target (&exec_ops); +} + enum target_xfer_status @@ -775,23 +956,22 @@ ULONGEST *xfered_len, struct target_section *sections, struct target_section *sections_end, - const char *section_name) + gdb::function_view<bool + (const struct target_section *)> match_cb) { int res; struct target_section *p; ULONGEST memaddr = offset; ULONGEST memend = memaddr + len; - if (len == 0) - internal_error (__FILE__, __LINE__, - _("failed internal consistency check")); + gdb_assert (len != 0); for (p = sections; p < sections_end; p++) { struct bfd_section *asect = p->the_bfd_section; bfd *abfd = asect->owner; - if (section_name && strcmp (section_name, asect->name) != 0) + if (match_cb != nullptr && !match_cb (p)) continue; /* not the section we need. */ if (memaddr >= p->addr) { @@ -864,8 +1044,7 @@ return section_table_xfer_memory_partial (readbuf, writebuf, offset, len, xfered_len, table->sections, - table->sections_end, - NULL); + table->sections_end); else return TARGET_XFER_E_IO; } @@ -879,7 +1058,9 @@ /* FIXME: 16 is not wide enough when gdbarch_addr_bit > 64. */ int wid = gdbarch_addr_bit (gdbarch) <= 32 ? 8 : 16; - printf_filtered ("\t`%s', ", bfd_get_filename (abfd)); + printf_filtered ("\t`%ps', ", + styled_string (file_name_style.style (), + bfd_get_filename (abfd))); wrap_here (" "); printf_filtered (_("file type %s.\n"), bfd_get_target (abfd)); if (abfd == exec_bfd) @@ -906,8 +1087,9 @@ } } if (p == t->sections_end) - warning (_("Cannot find section for the entry point of %s."), - bfd_get_filename (abfd)); + warning (_("Cannot find section for the entry point of %ps."), + styled_string (file_name_style.style (), + bfd_get_filename (abfd))); entry_point = gdbarch_addr_bits_remove (gdbarch, bfd_get_start_address (abfd) @@ -934,7 +1116,9 @@ hex_string_custom (psect->filepos, 8)); printf_filtered (" is %s", bfd_section_name (psect)); if (pbfd != abfd) - printf_filtered (" in %s", bfd_get_filename (pbfd)); + printf_filtered (" in %ps", + styled_string (file_name_style.style (), + bfd_get_filename (pbfd))); printf_filtered ("\n"); } } @@ -1002,7 +1186,8 @@ table = current_target_sections; for (p = table->sections; p < table->sections_end; p++) { - if (filename_cmp (filename, p->the_bfd_section->owner->filename) == 0 + if (filename_cmp (filename, + bfd_get_filename (p->the_bfd_section->owner)) == 0 && index == p->the_bfd_section->index) { p->endaddr += address - p->addr; @@ -1032,8 +1217,9 @@ return objfile_find_memory_regions (this, func, data); } +void _initialize_exec (); void -_initialize_exec (void) +_initialize_exec () { struct cmd_list_element *c; @@ -1070,5 +1256,27 @@ show_write_files, &setlist, &showlist); + add_setshow_enum_cmd ("exec-file-mismatch", class_support, + exec_file_mismatch_names, + &exec_file_mismatch, + _("\ +Set exec-file-mismatch handling (ask|warn|off)."), + _("\ +Show exec-file-mismatch handling (ask|warn|off)."), + _("\ +Specifies how to handle a mismatch between the current exec-file\n\ +loaded by GDB and the exec-file automatically determined when attaching\n\ +to a process:\n\n\ + ask - warn the user and ask whether to load the determined exec-file.\n\ + warn - warn the user, but do not change the exec-file.\n\ + off - do not check for mismatch.\n\ +\n\ +GDB detects a mismatch by comparing the build IDs of the files.\n\ +If the user confirms loading the determined exec-file, then its symbols\n\ +will be loaded as well."), + set_exec_file_mismatch_command, + show_exec_file_mismatch_command, + &setlist, &showlist); + add_target (exec_target_info, exec_target_open, filename_completer); } diff -Nru gdb-9.1/gdb/exec.h gdb-10.2/gdb/exec.h --- gdb-9.1/gdb/exec.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/exec.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Work with executable files, for GDB, the GNU debugger. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -44,6 +44,13 @@ extern void clear_section_table (struct target_section_table *table); +/* The current inferior is a child vforked and its program space is + shared with its parent. This pushes the exec target on the + current/child inferior's target stack if there are sections in the + program space's section table. */ + +extern void exec_on_vfork (); + /* Read from mappable read-only sections of BFD executable files. Return TARGET_XFER_OK, if read is successful. Return TARGET_XFER_EOF if read is done. Return TARGET_XFER_E_IO @@ -58,8 +65,13 @@ Request to transfer up to LEN 8-bit bytes of the target sections defined by SECTIONS and SECTIONS_END. The OFFSET specifies the starting address. - If SECTION_NAME is not NULL, only access sections with that same - name. + + The MATCH_CB predicate is optional; when provided it will be called + for each section under consideration. When MATCH_CB evaluates as + true, the section remains under consideration; a false result + removes it from consideration for performing the memory transfers + noted above. See memory_xfer_partial_1() in target.c for an + example. Return the number of bytes actually transfered, or zero when no data is available for the requested range. @@ -76,7 +88,9 @@ ULONGEST, ULONGEST, ULONGEST *, struct target_section *, struct target_section *, - const char *); + gdb::function_view<bool + (const struct target_section *)> match_cb + = nullptr); /* Read from mappable read-only sections of BFD executable files. Similar to exec_read_partial_read_only, but return diff -Nru gdb-9.1/gdb/expprint.c gdb-10.2/gdb/expprint.c --- gdb-9.1/gdb/expprint.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/expprint.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Print in infix form a struct expression. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -87,7 +87,7 @@ case OP_SCOPE: myprec = PREC_PREFIX; assoc = 0; - fputs_filtered (TYPE_NAME (exp->elts[pc + 1].type), stream); + fputs_filtered (exp->elts[pc + 1].type->name (), stream); fputs_filtered ("::", stream); nargs = longest_to_int (exp->elts[pc + 2].longconst); (*pos) += 4 + BYTES_TO_EXP_ELEM (nargs + 1); @@ -241,18 +241,14 @@ case OP_OBJC_MSGCALL: { /* Objective C message (method) call. */ - gdb::unique_xmalloc_ptr<char> selector; - (*pos) += 3; nargs = longest_to_int (exp->elts[pc + 2].longconst); fprintf_unfiltered (stream, "["); print_subexp (exp, pos, stream, PREC_SUFFIX); - if (0 == target_read_string (exp->elts[pc + 1].longconst, - &selector, 1024, NULL)) - { - error (_("bad selector")); - return; - } + gdb::unique_xmalloc_ptr<char> selector + = target_read_string (exp->elts[pc + 1].longconst, 1024); + if (selector == nullptr) + error (_("bad selector")); if (nargs) { char *s, *nextS; @@ -448,7 +444,7 @@ (*pos) += 2; if ((int) prec > (int) PREC_PREFIX) fputs_filtered ("(", stream); - if (TYPE_CODE (exp->elts[pc + 1].type) == TYPE_CODE_FUNC + if (exp->elts[pc + 1].type->code () == TYPE_CODE_FUNC && exp->elts[pc + 3].opcode == OP_LONG) { struct value_print_options opts; diff -Nru gdb-9.1/gdb/expression.h gdb-10.2/gdb/expression.h --- gdb-9.1/gdb/expression.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/expression.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Definitions for expressions stored in reversed prefix form, for GDB. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/extension.c gdb-10.2/gdb/extension.c --- gdb-9.1/gdb/extension.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/extension.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Interface between gdb and its extension languages. - Copyright (C) 2014-2020 Free Software Foundation, Inc. + Copyright (C) 2014-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -32,24 +32,7 @@ #include "cli/cli-script.h" #include "python/python.h" #include "guile/guile.h" - -/* Iterate over all external extension languages, regardless of whether the - support has been compiled in or not. - This does not include GDB's own scripting language. */ - -#define ALL_EXTENSION_LANGUAGES(i, extlang) \ - for (/*int*/ i = 0, extlang = extension_languages[0]; \ - extlang != NULL; \ - extlang = extension_languages[++i]) - -/* Iterate over all external extension languages that are supported. - This does not include GDB's own scripting language. */ - -#define ALL_ENABLED_EXTENSION_LANGUAGES(i, extlang) \ - for (/*int*/ i = 0, extlang = extension_languages[0]; \ - extlang != NULL; \ - extlang = extension_languages[++i]) \ - if (extlang->ops != NULL) +#include <array> static script_sourcer_func source_gdb_script; static objfile_script_sourcer_func source_gdb_objfile_script; @@ -99,12 +82,11 @@ pretty-printed value is the one that is used. This algorithm is employed throughout. */ -static const struct extension_language_defn * const extension_languages[] = +static const std::array<const extension_language_defn *, 2> extension_languages { /* To preserve existing behaviour, python should always appear first. */ &extension_language_python, &extension_language_guile, - NULL }; /* Return a pointer to the struct extension_language_defn object of @@ -115,15 +97,12 @@ const struct extension_language_defn * get_ext_lang_defn (enum extension_language lang) { - int i; - const struct extension_language_defn *extlang; - gdb_assert (lang != EXT_LANG_NONE); if (lang == EXT_LANG_GDB) return &extension_language_gdb; - ALL_EXTENSION_LANGUAGES (i, extlang) + for (const struct extension_language_defn *extlang : extension_languages) { if (extlang->language == lang) return extlang; @@ -151,13 +130,10 @@ const struct extension_language_defn * get_ext_lang_of_file (const char *file) { - int i; - const struct extension_language_defn *extlang; - if (has_extension (file, extension_language_gdb.suffix)) return &extension_language_gdb; - ALL_EXTENSION_LANGUAGES (i, extlang) + for (const struct extension_language_defn *extlang : extension_languages) { if (has_extension (file, extlang->suffix)) return extlang; @@ -331,12 +307,10 @@ void finish_ext_lang_initialization (void) { - int i; - const struct extension_language_defn *extlang; - - ALL_ENABLED_EXTENSION_LANGUAGES (i, extlang) + for (const struct extension_language_defn *extlang : extension_languages) { - if (extlang->ops->finish_initialization != NULL) + if (extlang->ops != nullptr + && extlang->ops->finish_initialization != NULL) extlang->ops->finish_initialization (extlang); } } @@ -355,10 +329,7 @@ void eval_ext_lang_from_control_command (struct command_line *cmd) { - int i; - const struct extension_language_defn *extlang; - - ALL_EXTENSION_LANGUAGES (i, extlang) + for (const struct extension_language_defn *extlang : extension_languages) { if (extlang->cli_control_type == cmd->control_type) { @@ -385,16 +356,14 @@ void auto_load_ext_lang_scripts_for_objfile (struct objfile *objfile) { - int i; - const struct extension_language_defn *extlang; - - extlang = &extension_language_gdb; - if (ext_lang_auto_load_enabled (extlang)) - auto_load_objfile_script (objfile, extlang); + const struct extension_language_defn *gdb = &extension_language_gdb; + if (ext_lang_auto_load_enabled (gdb)) + auto_load_objfile_script (objfile, gdb); - ALL_ENABLED_EXTENSION_LANGUAGES (i, extlang) + for (const struct extension_language_defn *extlang : extension_languages) { - if (ext_lang_auto_load_enabled (extlang)) + if (extlang->ops != nullptr + && ext_lang_auto_load_enabled (extlang)) auto_load_objfile_script (objfile, extlang); } } @@ -410,12 +379,10 @@ ext_lang_type_printers::ext_lang_type_printers () { - int i; - const struct extension_language_defn *extlang; - - ALL_ENABLED_EXTENSION_LANGUAGES (i, extlang) + for (const struct extension_language_defn *extlang : extension_languages) { - if (extlang->ops->start_type_printers != NULL) + if (extlang->ops != nullptr + && extlang->ops->start_type_printers != NULL) extlang->ops->start_type_printers (extlang, this); } } @@ -429,15 +396,13 @@ apply_ext_lang_type_printers (struct ext_lang_type_printers *printers, struct type *type) { - int i; - const struct extension_language_defn *extlang; - - ALL_ENABLED_EXTENSION_LANGUAGES (i, extlang) + for (const struct extension_language_defn *extlang : extension_languages) { char *result = NULL; enum ext_lang_rc rc; - if (extlang->ops->apply_type_printers == NULL) + if (extlang->ops == nullptr + || extlang->ops->apply_type_printers == NULL) continue; rc = extlang->ops->apply_type_printers (extlang, printers, type, &result); @@ -460,22 +425,17 @@ ext_lang_type_printers::~ext_lang_type_printers () { - int i; - const struct extension_language_defn *extlang; - - ALL_ENABLED_EXTENSION_LANGUAGES (i, extlang) + for (const struct extension_language_defn *extlang : extension_languages) { - if (extlang->ops->free_type_printers != NULL) + if (extlang->ops != nullptr + && extlang->ops->free_type_printers != NULL) extlang->ops->free_type_printers (extlang, this); } } -/* Try to pretty-print a value of type TYPE located at VAL's contents - buffer + EMBEDDED_OFFSET, which came from the inferior at address - ADDRESS + EMBEDDED_OFFSET, onto stdio stream STREAM according to - OPTIONS. - VAL is the whole object that came from ADDRESS. - Returns non-zero if the value was successfully pretty-printed. +/* Try to pretty-print a value onto stdio stream STREAM according to + OPTIONS. VAL is the object to print. Returns non-zero if the + value was successfully pretty-printed. Extension languages are tried in the order specified by extension_languages. The first one to provide a pretty-printed @@ -488,26 +448,20 @@ errors that trigger an exception in the extension language. */ int -apply_ext_lang_val_pretty_printer (struct type *type, - LONGEST embedded_offset, CORE_ADDR address, +apply_ext_lang_val_pretty_printer (struct value *val, struct ui_file *stream, int recurse, - struct value *val, const struct value_print_options *options, const struct language_defn *language) { - int i; - const struct extension_language_defn *extlang; - - ALL_ENABLED_EXTENSION_LANGUAGES (i, extlang) + for (const struct extension_language_defn *extlang : extension_languages) { enum ext_lang_rc rc; - if (extlang->ops->apply_val_pretty_printer == NULL) + if (extlang->ops == nullptr + || extlang->ops->apply_val_pretty_printer == NULL) continue; - rc = extlang->ops->apply_val_pretty_printer (extlang, type, - embedded_offset, address, - stream, recurse, val, - options, language); + rc = extlang->ops->apply_val_pretty_printer (extlang, val, stream, + recurse, options, language); switch (rc) { case EXT_LANG_RC_OK: @@ -551,14 +505,12 @@ struct ui_out *out, int frame_low, int frame_high) { - int i; - const struct extension_language_defn *extlang; - - ALL_ENABLED_EXTENSION_LANGUAGES (i, extlang) + for (const struct extension_language_defn *extlang : extension_languages) { enum ext_lang_bt_status status; - if (extlang->ops->apply_frame_filter == NULL) + if (extlang->ops == nullptr + || extlang->ops->apply_frame_filter == NULL) continue; status = extlang->ops->apply_frame_filter (extlang, frame, flags, args_type, out, @@ -584,12 +536,10 @@ void preserve_ext_lang_values (struct objfile *objfile, htab_t copied_types) { - int i; - const struct extension_language_defn *extlang; - - ALL_ENABLED_EXTENSION_LANGUAGES (i, extlang) + for (const struct extension_language_defn *extlang : extension_languages) { - if (extlang->ops->preserve_values != NULL) + if (extlang->ops != nullptr + && extlang->ops->preserve_values != NULL) extlang->ops->preserve_values (extlang, objfile, copied_types); } } @@ -607,12 +557,10 @@ get_breakpoint_cond_ext_lang (struct breakpoint *b, enum extension_language skip_lang) { - int i; - const struct extension_language_defn *extlang; - - ALL_ENABLED_EXTENSION_LANGUAGES (i, extlang) + for (const struct extension_language_defn *extlang : extension_languages) { - if (extlang->language != skip_lang + if (extlang->ops != nullptr + && extlang->language != skip_lang && extlang->ops->breakpoint_has_cond != NULL && extlang->ops->breakpoint_has_cond (extlang, b)) return extlang; @@ -627,18 +575,17 @@ int breakpoint_ext_lang_cond_says_stop (struct breakpoint *b) { - int i; - const struct extension_language_defn *extlang; enum ext_lang_bp_stop stop = EXT_LANG_BP_STOP_UNSET; - ALL_ENABLED_EXTENSION_LANGUAGES (i, extlang) + for (const struct extension_language_defn *extlang : extension_languages) { /* There is a rule that a breakpoint can have at most one of any of a CLI or extension language condition. However, Python hacks in "finish breakpoints" on top of the "stop" check, so we have to call this for every language, even if we could first determine whether a "stop" method exists. */ - if (extlang->ops->breakpoint_cond_says_stop != NULL) + if (extlang->ops != nullptr + && extlang->ops->breakpoint_cond_says_stop != NULL) { enum ext_lang_bp_stop this_stop = extlang->ops->breakpoint_cond_says_stop (extlang, b); @@ -820,12 +767,12 @@ int check_quit_flag (void) { - int i, result = 0; - const struct extension_language_defn *extlang; + int result = 0; - ALL_ENABLED_EXTENSION_LANGUAGES (i, extlang) + for (const struct extension_language_defn *extlang : extension_languages) { - if (extlang->ops->check_quit_flag != NULL) + if (extlang->ops != nullptr + && extlang->ops->check_quit_flag != NULL) if (extlang->ops->check_quit_flag (extlang) != 0) result = 1; } @@ -850,16 +797,14 @@ get_matching_xmethod_workers (struct type *type, const char *method_name, std::vector<xmethod_worker_up> *workers) { - int i; - const struct extension_language_defn *extlang; - - ALL_ENABLED_EXTENSION_LANGUAGES (i, extlang) + for (const struct extension_language_defn *extlang : extension_languages) { enum ext_lang_rc rc; /* If an extension language does not support xmethods, ignore it. */ - if (extlang->ops->get_matching_xmethod_workers == NULL) + if (extlang->ops == nullptr + || extlang->ops->get_matching_xmethod_workers == NULL) continue; rc = extlang->ops->get_matching_xmethod_workers (extlang, @@ -903,6 +848,26 @@ return result_type; } +/* See extension.h. */ + +gdb::optional<std::string> +ext_lang_colorize (const std::string &filename, const std::string &contents) +{ + gdb::optional<std::string> result; + + for (const struct extension_language_defn *extlang : extension_languages) + { + if (extlang->ops == nullptr + || extlang->ops->colorize == nullptr) + continue; + result = extlang->ops->colorize (filename, contents); + if (result.has_value ()) + return result; + } + + return result; +} + /* Called via an observer before gdb prints its prompt. Iterate over the extension languages giving them a chance to change the prompt. The first one to change the prompt wins, @@ -911,14 +876,12 @@ static void ext_lang_before_prompt (const char *current_gdb_prompt) { - int i; - const struct extension_language_defn *extlang; - - ALL_ENABLED_EXTENSION_LANGUAGES (i, extlang) + for (const struct extension_language_defn *extlang : extension_languages) { enum ext_lang_rc rc; - if (extlang->ops->before_prompt == NULL) + if (extlang->ops == nullptr + || extlang->ops->before_prompt == NULL) continue; rc = extlang->ops->before_prompt (extlang, current_gdb_prompt); switch (rc) @@ -934,8 +897,9 @@ } } +void _initialize_extension (); void -_initialize_extension (void) +_initialize_extension () { gdb::observers::before_prompt.attach (ext_lang_before_prompt); } diff -Nru gdb-9.1/gdb/extension.h gdb-10.2/gdb/extension.h --- gdb-9.1/gdb/extension.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/extension.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Interface between gdb and its extension languages. - Copyright (C) 2014-2020 Free Software Foundation, Inc. + Copyright (C) 2014-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -22,6 +22,7 @@ #include "mi/mi-cmds.h" /* For PRINT_NO_VALUES, etc. */ #include "gdbsupport/array-view.h" +#include "gdbsupport/gdb_optional.h" struct breakpoint; struct command_line; @@ -282,10 +283,8 @@ struct type *); extern int apply_ext_lang_val_pretty_printer - (struct type *type, - LONGEST embedded_offset, CORE_ADDR address, - struct ui_file *stream, int recurse, - struct value *val, const struct value_print_options *options, + (struct value *value, struct ui_file *stream, int recurse, + const struct value_print_options *options, const struct language_defn *language); extern enum ext_lang_bt_status apply_ext_lang_frame_filter @@ -309,4 +308,12 @@ (struct type *type, const char *method_name, std::vector<xmethod_worker_up> *workers); +/* Try to colorize some source code. FILENAME is the name of the file + holding the code. CONTENTS is the source code itself. This will + either a colorized (using ANSI terminal escapes) version of the + source code, or an empty value if colorizing could not be done. */ + +extern gdb::optional<std::string> ext_lang_colorize + (const std::string &filename, const std::string &contents); + #endif /* EXTENSION_H */ diff -Nru gdb-9.1/gdb/extension-priv.h gdb-10.2/gdb/extension-priv.h --- gdb-9.1/gdb/extension-priv.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/extension-priv.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,7 +1,7 @@ /* Private implementation details of interface between gdb and its extension languages. - Copyright (C) 2014-2020 Free Software Foundation, Inc. + Copyright (C) 2014-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -152,19 +152,14 @@ void (*free_type_printers) (const struct extension_language_defn *, struct ext_lang_type_printers *); - /* Try to pretty-print a value of type TYPE located at VAL's contents - buffer + EMBEDDED_OFFSET, which came from the inferior at address - ADDRESS + EMBEDDED_OFFSET, onto stdio stream STREAM according to - OPTIONS. - VAL is the whole object that came from ADDRESS. - Returns EXT_LANG_RC_OK upon success, EXT_LANG_RC_NOP if the value - is not recognized, and EXT_LANG_RC_ERROR if an error was encountered. */ + /* Try to pretty-print a value, onto stdio stream STREAM according + to OPTIONS. VAL is the object to print. Returns EXT_LANG_RC_OK + upon success, EXT_LANG_RC_NOP if the value is not recognized, and + EXT_LANG_RC_ERROR if an error was encountered. */ enum ext_lang_rc (*apply_val_pretty_printer) (const struct extension_language_defn *, - struct type *type, - LONGEST embedded_offset, CORE_ADDR address, - struct ui_file *stream, int recurse, - struct value *val, const struct value_print_options *options, + struct value *val, struct ui_file *stream, int recurse, + const struct value_print_options *options, const struct language_defn *language); /* GDB access to the "frame filter" feature. @@ -254,6 +249,13 @@ struct type *obj_type, const char *method_name, std::vector<xmethod_worker_up> *dm_vec); + + /* Colorize a source file. NAME is the source file's name, and + CONTENTS is the contents of the file. This should either return + colorized (using ANSI terminal escapes) version of the contents, + or an empty option. */ + gdb::optional<std::string> (*colorize) (const std::string &name, + const std::string &contents); }; /* State necessary to restore a signal handler to its previous value. */ diff -Nru gdb-9.1/gdb/fbsd-nat.c gdb-10.2/gdb/fbsd-nat.c --- gdb-9.1/gdb/fbsd-nat.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/fbsd-nat.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Native-dependent code for FreeBSD. - Copyright (C) 2002-2020 Free Software Foundation, Inc. + Copyright (C) 2002-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -86,12 +86,12 @@ #ifdef HAVE_KINFO_GETVMMAP /* Iterate over all the memory regions in the current inferior, - calling FUNC for each memory region. OBFD is passed as the last + calling FUNC for each memory region. DATA is passed as the last argument to FUNC. */ int fbsd_nat_target::find_memory_regions (find_memory_region_ftype func, - void *obfd) + void *data) { pid_t pid = inferior_ptid.pid (); struct kinfo_vmentry *kve; @@ -133,7 +133,7 @@ Pass MODIFIED as true, we do not know the real modification state. */ func (kve->kve_start, size, kve->kve_protection & KVME_PROT_READ, kve->kve_protection & KVME_PROT_WRITE, - kve->kve_protection & KVME_PROT_EXEC, 1, obfd); + kve->kve_protection & KVME_PROT_EXEC, 1, data); } return 0; } @@ -160,12 +160,12 @@ } /* Iterate over all the memory regions in the current inferior, - calling FUNC for each memory region. OBFD is passed as the last + calling FUNC for each memory region. DATA is passed as the last argument to FUNC. */ int fbsd_nat_target::find_memory_regions (find_memory_region_ftype func, - void *obfd) + void *data) { pid_t pid = inferior_ptid.pid (); unsigned long start, end, size; @@ -202,7 +202,7 @@ /* Invoke the callback function to create the corefile segment. Pass MODIFIED as true, we do not know the real modification state. */ - func (start, size, read, write, exec, 1, obfd); + func (start, size, read, write, exec, 1, data); } return 0; @@ -991,11 +991,11 @@ called to discover new threads each time the thread list is updated. */ static void -fbsd_add_threads (pid_t pid) +fbsd_add_threads (fbsd_nat_target *target, pid_t pid) { int i, nlwps; - gdb_assert (!in_thread_list (ptid_t (pid))); + gdb_assert (!in_thread_list (target, ptid_t (pid))); nlwps = ptrace (PT_GETNUMLWPS, pid, NULL, 0); if (nlwps == -1) perror_with_name (("ptrace")); @@ -1010,7 +1010,7 @@ { ptid_t ptid = ptid_t (pid, lwps[i], 0); - if (!in_thread_list (ptid)) + if (!in_thread_list (target, ptid)) { #ifdef PT_LWP_EVENTS struct ptrace_lwpinfo pl; @@ -1026,7 +1026,7 @@ fprintf_unfiltered (gdb_stdlog, "FLWP: adding thread for LWP %u\n", lwps[i]); - add_thread (ptid); + add_thread (target, ptid); } } } @@ -1043,7 +1043,7 @@ #else prune_threads (); - fbsd_add_threads (inferior_ptid.pid ()); + fbsd_add_threads (this, inferior_ptid.pid ()); #endif } @@ -1174,7 +1174,7 @@ if (ptid.lwp_p ()) { /* If ptid is a specific LWP, suspend all other LWPs in the process. */ - inferior *inf = find_inferior_ptid (ptid); + inferior *inf = find_inferior_ptid (this, ptid); for (thread_info *tp : inf->non_exited_threads ()) { @@ -1193,7 +1193,7 @@ { /* If ptid is a wildcard, resume all matching threads (they won't run until the process is continued however). */ - for (thread_info *tp : all_non_exited_threads (ptid)) + for (thread_info *tp : all_non_exited_threads (this, ptid)) if (ptrace (PT_RESUME, tp->ptid.lwp (), NULL, 0) == -1) perror_with_name (("ptrace")); ptid = inferior_ptid; @@ -1239,7 +1239,8 @@ core, return true. */ static bool -fbsd_handle_debug_trap (ptid_t ptid, const struct ptrace_lwpinfo &pl) +fbsd_handle_debug_trap (fbsd_nat_target *target, ptid_t ptid, + const struct ptrace_lwpinfo &pl) { /* Ignore traps without valid siginfo or for signals other than @@ -1266,7 +1267,7 @@ if (pl.pl_siginfo.si_code == TRAP_BRKPT) { /* Fixup PC for the software breakpoint. */ - struct regcache *regcache = get_thread_regcache (ptid); + struct regcache *regcache = get_thread_regcache (target, ptid); struct gdbarch *gdbarch = regcache->arch (); int decr_pc = gdbarch_decr_pc_after_break (gdbarch); @@ -1340,7 +1341,7 @@ threads might be skipped during post_attach that have not yet reported their PL_FLAG_EXITED event. Ignore EXITED events for an unknown LWP. */ - thread_info *thr = find_thread_ptid (wptid); + thread_info *thr = find_thread_ptid (this, wptid); if (thr != nullptr) { if (debug_fbsd_lwp) @@ -1364,13 +1365,13 @@ PL_FLAG_BORN in case the first stop reported after attaching to an existing process is a PL_FLAG_BORN event. */ - if (in_thread_list (ptid_t (pid))) + if (in_thread_list (this, ptid_t (pid))) { if (debug_fbsd_lwp) fprintf_unfiltered (gdb_stdlog, "FLWP: using LWP %u for first thread\n", pl.pl_lwpid); - thread_change_ptid (ptid_t (pid), wptid); + thread_change_ptid (this, ptid_t (pid), wptid); } #ifdef PT_LWP_EVENTS @@ -1380,13 +1381,13 @@ threads might be added by fbsd_add_threads that have not yet reported their PL_FLAG_BORN event. Ignore BORN events for an already-known LWP. */ - if (!in_thread_list (wptid)) + if (!in_thread_list (this, wptid)) { if (debug_fbsd_lwp) fprintf_unfiltered (gdb_stdlog, "FLWP: adding thread for LWP %u\n", pl.pl_lwpid); - add_thread (wptid); + add_thread (this, wptid); } ourstatus->kind = TARGET_WAITKIND_SPURIOUS; return wptid; @@ -1474,7 +1475,7 @@ #endif #ifdef USE_SIGTRAP_SIGINFO - if (fbsd_handle_debug_trap (wptid, pl)) + if (fbsd_handle_debug_trap (this, wptid, pl)) return wptid; #endif @@ -1547,8 +1548,8 @@ /* Target hook for follow_fork. On entry and at return inferior_ptid is the ptid of the followed inferior. */ -int -fbsd_nat_target::follow_fork (int follow_child, int detach_fork) +bool +fbsd_nat_target::follow_fork (bool follow_child, bool detach_fork) { if (!follow_child && detach_fork) { @@ -1591,7 +1592,7 @@ #endif } - return 0; + return false; } int @@ -1633,7 +1634,7 @@ fbsd_nat_target::post_attach (int pid) { fbsd_enable_proc_events (pid); - fbsd_add_threads (pid); + fbsd_add_threads (this, pid); } #ifdef PL_FLAG_EXEC @@ -1668,8 +1669,15 @@ #endif #endif +bool +fbsd_nat_target::supports_multi_process () +{ + return true; +} + +void _initialize_fbsd_nat (); void -_initialize_fbsd_nat (void) +_initialize_fbsd_nat () { #ifdef PT_LWPINFO add_setshow_boolean_cmd ("fbsd-lwp", class_maintenance, diff -Nru gdb-9.1/gdb/fbsd-nat.h gdb-10.2/gdb/fbsd-nat.h --- gdb-9.1/gdb/fbsd-nat.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/fbsd-nat.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Native-dependent code for FreeBSD. - Copyright (C) 2004-2020 Free Software Foundation, Inc. + Copyright (C) 2004-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -21,11 +21,17 @@ #define FBSD_NAT_H #include "inf-ptrace.h" +#include <osreldate.h> #include <sys/proc.h> -#ifdef TRAP_BRKPT -/* MIPS does not set si_code for SIGTRAP. sparc64 reports - non-standard values in si_code for SIGTRAP. */ +/* FreeBSD kernels 11.3 and later report valid si_code values for + SIGTRAP on all architectures. Older FreeBSD kernels that supported + TRAP_BRKPT did not report valid values for MIPS and sparc64. Even + older kernels without TRAP_BRKPT support did not report valid + values on any architecture. */ +#if (__FreeBSD_kernel_version >= 1102502) || (__FreeBSD_version >= 1102502) +# define USE_SIGTRAP_SIGINFO +#elif defined(TRAP_BRKPT) # if !defined(__mips__) && !defined(__sparc64__) # define USE_SIGTRAP_SIGINFO # endif @@ -75,7 +81,7 @@ #endif #ifdef TDP_RFPPWAIT - int follow_fork (int, int) override; + bool follow_fork (bool, bool) override; int insert_fork_catchpoint (int) override; int remove_fork_catchpoint (int) override; @@ -94,6 +100,8 @@ override; #endif #endif /* PT_LWPINFO */ + + bool supports_multi_process () override; }; #endif /* fbsd-nat.h */ diff -Nru gdb-9.1/gdb/fbsd-tdep.c gdb-10.2/gdb/fbsd-tdep.c --- gdb-9.1/gdb/fbsd-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/fbsd-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for FreeBSD, architecture-independent. - Copyright (C) 2002-2020 Free Software Foundation, Inc. + Copyright (C) 2002-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -21,6 +21,7 @@ #include "auxv.h" #include "gdbcore.h" #include "inferior.h" +#include "objfiles.h" #include "regcache.h" #include "regset.h" #include "gdbthread.h" @@ -673,7 +674,8 @@ { struct regcache *regcache; - regcache = get_thread_arch_regcache (info->ptid, args->gdbarch); + regcache = get_thread_arch_regcache (info->inf->process_target (), + info->ptid, args->gdbarch); target_fetch_registers (regcache, -1); @@ -724,14 +726,14 @@ if (get_exec_file (0)) { const char *fname = lbasename (get_exec_file (0)); - char *psargs = xstrdup (fname); + std::string psargs = fname; - if (get_inferior_args ()) - psargs = reconcat (psargs, psargs, " ", get_inferior_args (), - (char *) NULL); + const char *infargs = get_inferior_args (); + if (infargs != NULL) + psargs = psargs + " " + infargs; note_data = elfcore_write_prpsinfo (obfd, note_data, note_size, - fname, psargs); + fname, psargs.c_str ()); } /* Thread register information. */ @@ -1018,12 +1020,12 @@ /* For local sockets, print out the first non-nul path rather than both paths. */ - const struct fbsd_sockaddr_un *sun + const struct fbsd_sockaddr_un *saddr_un = reinterpret_cast<const struct fbsd_sockaddr_un *> (kf_sa_local); - if (sun->sun_path[0] == 0) - sun = reinterpret_cast<const struct fbsd_sockaddr_un *> + if (saddr_un->sun_path[0] == 0) + saddr_un = reinterpret_cast<const struct fbsd_sockaddr_un *> (kf_sa_peer); - printf_filtered ("%s", sun->sun_path); + printf_filtered ("%s", saddr_un->sun_path); break; } case FBSD_AF_INET: @@ -1596,6 +1598,12 @@ TAG (EHDRFLAGS, _("ELF header e_flags"), AUXV_FORMAT_HEX); TAG (HWCAP, _("Machine-dependent CPU capability hints"), AUXV_FORMAT_HEX); TAG (HWCAP2, _("Extension of AT_HWCAP"), AUXV_FORMAT_HEX); + TAG (BSDFLAGS, _("ELF BSD flags"), AUXV_FORMAT_HEX); + TAG (ARGC, _("Argument count"), AUXV_FORMAT_DEC); + TAG (ARGV, _("Argument vector"), AUXV_FORMAT_HEX); + TAG (ENVC, _("Environment count"), AUXV_FORMAT_DEC); + TAG (ENVV, _("Environment vector"), AUXV_FORMAT_HEX); + TAG (PS_STRINGS, _("Pointer to ps_strings"), AUXV_FORMAT_HEX); } fprint_auxv_entry (file, name, description, format, type, val); @@ -1627,7 +1635,7 @@ /* union sigval */ sigval_type = arch_composite_type (gdbarch, NULL, TYPE_CODE_UNION); - TYPE_NAME (sigval_type) = xstrdup ("sigval"); + sigval_type->set_name (xstrdup ("sigval")); append_composite_type_field (sigval_type, "sival_int", int_type); append_composite_type_field (sigval_type, "sival_ptr", void_ptr_type); @@ -1677,7 +1685,7 @@ /* struct siginfo */ siginfo_type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT); - TYPE_NAME (siginfo_type) = xstrdup ("siginfo"); + siginfo_type->set_name (xstrdup ("siginfo")); append_composite_type_field (siginfo_type, "si_signo", int_type); append_composite_type_field (siginfo_type, "si_errno", int_type); append_composite_type_field (siginfo_type, "si_code", int_type); @@ -1981,9 +1989,9 @@ language_c, NULL).symbol; if (obj_entry_sym == NULL) error (_("Unable to find Struct_Obj_Entry symbol")); - data->off_linkmap = lookup_struct_elt (SYMBOL_TYPE(obj_entry_sym), + data->off_linkmap = lookup_struct_elt (SYMBOL_TYPE (obj_entry_sym), "linkmap", 0).offset / 8; - data->off_tlsindex = lookup_struct_elt (SYMBOL_TYPE(obj_entry_sym), + data->off_tlsindex = lookup_struct_elt (SYMBOL_TYPE (obj_entry_sym), "tlsindex", 0).offset / 8; data->rtld_offsets_valid = true; return; @@ -2064,6 +2072,18 @@ return addr + offset; } +/* See fbsd-tdep.h. */ + +CORE_ADDR +fbsd_skip_solib_resolver (struct gdbarch *gdbarch, CORE_ADDR pc) +{ + struct bound_minimal_symbol msym = lookup_bound_minimal_symbol ("_rtld_bind"); + if (msym.minsym != nullptr && BMSYMBOL_VALUE_ADDRESS (msym) == pc) + return frame_unwind_caller_pc (get_current_frame ()); + + return 0; +} + /* To be called from GDB_OSABI_FREEBSD handlers. */ void @@ -2078,14 +2098,16 @@ set_gdbarch_get_siginfo_type (gdbarch, fbsd_get_siginfo_type); set_gdbarch_gdb_signal_from_target (gdbarch, fbsd_gdb_signal_from_target); set_gdbarch_gdb_signal_to_target (gdbarch, fbsd_gdb_signal_to_target); + set_gdbarch_skip_solib_resolver (gdbarch, fbsd_skip_solib_resolver); /* `catch syscall' */ set_xml_syscall_file_name (gdbarch, "syscalls/freebsd.xml"); set_gdbarch_get_syscall_number (gdbarch, fbsd_get_syscall_number); } +void _initialize_fbsd_tdep (); void -_initialize_fbsd_tdep (void) +_initialize_fbsd_tdep () { fbsd_gdbarch_data_handle = gdbarch_data_register_post_init (init_fbsd_gdbarch_data); diff -Nru gdb-9.1/gdb/fbsd-tdep.h gdb-10.2/gdb/fbsd-tdep.h --- gdb-9.1/gdb/fbsd-tdep.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/fbsd-tdep.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for FreeBSD, architecture independent. - Copyright (C) 2009-2020 Free Software Foundation, Inc. + Copyright (C) 2009-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -71,4 +71,9 @@ CORE_ADDR lm_addr, CORE_ADDR offset); +/* Implement the "skip_solib_resolver" gdbarch method. */ + +extern CORE_ADDR fbsd_skip_solib_resolver (struct gdbarch *gdbarch, + CORE_ADDR pc); + #endif /* fbsd-tdep.h */ diff -Nru gdb-9.1/gdb/features/aarch64-core.xml gdb-10.2/gdb/features/aarch64-core.xml --- gdb-9.1/gdb/features/aarch64-core.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/aarch64-core.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2009-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2009-2021 Free Software Foundation, Inc. Contributed by ARM Ltd. Copying and distribution of this file, with or without modification, diff -Nru gdb-9.1/gdb/features/aarch64-fpu.xml gdb-10.2/gdb/features/aarch64-fpu.xml --- gdb-9.1/gdb/features/aarch64-fpu.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/aarch64-fpu.xml 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2009-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2009-2021 Free Software Foundation, Inc. Contributed by ARM Ltd. Copying and distribution of this file, with or without modification, diff -Nru gdb-9.1/gdb/features/aarch64-pauth.xml gdb-10.2/gdb/features/aarch64-pauth.xml --- gdb-9.1/gdb/features/aarch64-pauth.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/aarch64-pauth.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2018-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2018-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/aarch64-sve.c gdb-10.2/gdb/features/aarch64-sve.c --- gdb-9.1/gdb/features/aarch64-sve.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/aarch64-sve.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2018-2020 Free Software Foundation, Inc. +/* Copyright (C) 2018-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/features/arc/v1-aux.c gdb-10.2/gdb/features/arc/v1-aux.c --- gdb-9.1/gdb/features/arc/v1-aux.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/features/arc/v1-aux.c 2020-09-13 02:33:41.000000000 +0000 @@ -0,0 +1,34 @@ +/* THIS FILE IS GENERATED. -*- buffer-read-only: t -*- vi:set ro: + Original: v1-aux.xml */ + +#include "gdbsupport/tdesc.h" + +static int +create_feature_arc_v1_aux (struct target_desc *result, long regnum) +{ + struct tdesc_feature *feature; + + feature = tdesc_create_feature (result, "org.gnu.gdb.arc.aux"); + tdesc_type_with_fields *type_with_fields; + type_with_fields = tdesc_create_flags (feature, "status32_type", 4); + tdesc_add_flag (type_with_fields, 0, "H"); + tdesc_add_bitfield (type_with_fields, "E", 1, 2); + tdesc_add_bitfield (type_with_fields, "A", 3, 4); + tdesc_add_flag (type_with_fields, 5, "AE"); + tdesc_add_flag (type_with_fields, 6, "DE"); + tdesc_add_flag (type_with_fields, 7, "U"); + tdesc_add_flag (type_with_fields, 8, "V"); + tdesc_add_flag (type_with_fields, 9, "C"); + tdesc_add_flag (type_with_fields, 10, "N"); + tdesc_add_flag (type_with_fields, 11, "Z"); + tdesc_add_flag (type_with_fields, 12, "L"); + tdesc_add_flag (type_with_fields, 13, "R"); + tdesc_add_flag (type_with_fields, 14, "SE"); + + tdesc_create_reg (feature, "pc", regnum++, 1, NULL, 32, "code_ptr"); + tdesc_create_reg (feature, "status32", regnum++, 1, NULL, 32, "status32_type"); + tdesc_create_reg (feature, "lp_start", regnum++, 1, NULL, 32, "code_ptr"); + tdesc_create_reg (feature, "lp_end", regnum++, 1, NULL, 32, "code_ptr"); + tdesc_create_reg (feature, "bta", regnum++, 1, NULL, 32, "code_ptr"); + return regnum; +} diff -Nru gdb-9.1/gdb/features/arc/v1-aux.xml gdb-10.2/gdb/features/arc/v1-aux.xml --- gdb-9.1/gdb/features/arc/v1-aux.xml 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/features/arc/v1-aux.xml 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,31 @@ +<?xml version="1.0"?> +<!-- Copyright (C) 2015-2021 Free Software Foundation, Inc. + + Copying and distribution of this file, with or without modification, + are permitted in any medium without royalty provided the copyright + notice and this notice are preserved. --> + +<!DOCTYPE target SYSTEM "gdb-target.dtd"> +<feature name="org.gnu.gdb.arc.aux"> + <flags id="status32_type" size="4"> + <field name="H" start="0" end="0"/> + <field name="E" start="1" end="2"/> + <field name="A" start="3" end="4"/> + <field name="AE" start="5" end="5"/> + <field name="DE" start="6" end="6"/> + <field name="U" start="7" end="7"/> + <field name="V" start="8" end="8"/> + <field name="C" start="9" end="9"/> + <field name="N" start="10" end="10"/> + <field name="Z" start="11" end="11"/> + <field name="L" start="12" end="12"/> + <field name="R" start="13" end="13"/> + <field name="SE" start="14" end="14"/> + </flags> + + <reg name="pc" bitsize="32" type="code_ptr"/> + <reg name="status32" bitsize="32" type="status32_type"/> + <reg name="lp_start" bitsize="32" type="code_ptr"/> + <reg name="lp_end" bitsize="32" type="code_ptr"/> + <reg name="bta" bitsize="32" type="code_ptr"/> +</feature> diff -Nru gdb-9.1/gdb/features/arc/v1-core.c gdb-10.2/gdb/features/arc/v1-core.c --- gdb-9.1/gdb/features/arc/v1-core.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/features/arc/v1-core.c 2020-09-13 02:33:41.000000000 +0000 @@ -0,0 +1,45 @@ +/* THIS FILE IS GENERATED. -*- buffer-read-only: t -*- vi:set ro: + Original: v1-core.xml */ + +#include "gdbsupport/tdesc.h" + +static int +create_feature_arc_v1_core (struct target_desc *result, long regnum) +{ + struct tdesc_feature *feature; + + feature = tdesc_create_feature (result, "org.gnu.gdb.arc.core"); + tdesc_create_reg (feature, "r0", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r1", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r2", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r3", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r4", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r5", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r6", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r7", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r8", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r9", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r10", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r11", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r12", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r13", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r14", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r15", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r16", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r17", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r18", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r19", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r20", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r21", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r22", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r23", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r24", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r25", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "gp", regnum++, 1, NULL, 32, "data_ptr"); + tdesc_create_reg (feature, "fp", regnum++, 1, NULL, 32, "data_ptr"); + tdesc_create_reg (feature, "sp", regnum++, 1, NULL, 32, "data_ptr"); + tdesc_create_reg (feature, "blink", regnum++, 1, NULL, 32, "code_ptr"); + tdesc_create_reg (feature, "lp_count", regnum++, 1, NULL, 32, "uint32"); + tdesc_create_reg (feature, "pcl", regnum++, 1, NULL, 32, "code_ptr"); + return regnum; +} diff -Nru gdb-9.1/gdb/features/arc/v1-core.xml gdb-10.2/gdb/features/arc/v1-core.xml --- gdb-9.1/gdb/features/arc/v1-core.xml 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/features/arc/v1-core.xml 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,56 @@ +<?xml version="1.0"?> +<!-- Copyright (C) 2015-2021 Free Software Foundation, Inc. + + Copying and distribution of this file, with or without modification, + are permitted in any medium without royalty provided the copyright + notice and this notice are preserved. --> + +<!DOCTYPE target SYSTEM "gdb-target.dtd"> +<feature name="org.gnu.gdb.arc.core"> + <reg name="r0" bitsize="32"/> + <reg name="r1" bitsize="32"/> + <reg name="r2" bitsize="32"/> + <reg name="r3" bitsize="32"/> + <reg name="r4" bitsize="32"/> + <reg name="r5" bitsize="32"/> + <reg name="r6" bitsize="32"/> + <reg name="r7" bitsize="32"/> + <reg name="r8" bitsize="32"/> + <reg name="r9" bitsize="32"/> + <reg name="r10" bitsize="32"/> + <reg name="r11" bitsize="32"/> + <reg name="r12" bitsize="32"/> + <reg name="r13" bitsize="32"/> + <reg name="r14" bitsize="32"/> + <reg name="r15" bitsize="32"/> + <reg name="r16" bitsize="32"/> + <reg name="r17" bitsize="32"/> + <reg name="r18" bitsize="32"/> + <reg name="r19" bitsize="32"/> + <reg name="r20" bitsize="32"/> + <reg name="r21" bitsize="32"/> + <reg name="r22" bitsize="32"/> + <reg name="r23" bitsize="32"/> + <reg name="r24" bitsize="32"/> + <reg name="r25" bitsize="32"/> + + <!-- ARC core data pointer registers. --> + <reg name="gp" bitsize="32" type="data_ptr"/> + <reg name="fp" bitsize="32" type="data_ptr"/> + <reg name="sp" bitsize="32" type="data_ptr"/> + + <!-- Code pointers. --> + <reg name="blink" bitsize="32" type="code_ptr"/> + + <!-- Here goes extension core registers: r32 - r59 --> + + <!-- Loop counter. --> + <reg name="lp_count" bitsize="32" type="uint32"/> + + <!-- r61 is a reserved register address. --> + + <!-- r62 is a long immediate value, not a real register. --> + + <!-- 4-byte aligned read-only program counter. --> + <reg name="pcl" bitsize="32" type="code_ptr" group=""/> +</feature> diff -Nru gdb-9.1/gdb/features/arc/v2-aux.c gdb-10.2/gdb/features/arc/v2-aux.c --- gdb-9.1/gdb/features/arc/v2-aux.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/features/arc/v2-aux.c 2020-09-13 02:33:41.000000000 +0000 @@ -0,0 +1,38 @@ +/* THIS FILE IS GENERATED. -*- buffer-read-only: t -*- vi:set ro: + Original: v2-aux.xml */ + +#include "gdbsupport/tdesc.h" + +static int +create_feature_arc_v2_aux (struct target_desc *result, long regnum) +{ + struct tdesc_feature *feature; + + feature = tdesc_create_feature (result, "org.gnu.gdb.arc.aux"); + tdesc_type_with_fields *type_with_fields; + type_with_fields = tdesc_create_flags (feature, "status32_type", 4); + tdesc_add_flag (type_with_fields, 0, "H"); + tdesc_add_bitfield (type_with_fields, "E", 1, 4); + tdesc_add_flag (type_with_fields, 5, "AE"); + tdesc_add_flag (type_with_fields, 6, "DE"); + tdesc_add_flag (type_with_fields, 7, "U"); + tdesc_add_flag (type_with_fields, 8, "V"); + tdesc_add_flag (type_with_fields, 9, "C"); + tdesc_add_flag (type_with_fields, 10, "N"); + tdesc_add_flag (type_with_fields, 11, "Z"); + tdesc_add_flag (type_with_fields, 12, "L"); + tdesc_add_flag (type_with_fields, 13, "DZ"); + tdesc_add_flag (type_with_fields, 14, "SC"); + tdesc_add_flag (type_with_fields, 15, "ES"); + tdesc_add_bitfield (type_with_fields, "RB", 16, 18); + tdesc_add_flag (type_with_fields, 19, "AD"); + tdesc_add_flag (type_with_fields, 20, "US"); + tdesc_add_flag (type_with_fields, 31, "IE"); + + tdesc_create_reg (feature, "pc", regnum++, 1, NULL, 32, "code_ptr"); + tdesc_create_reg (feature, "status32", regnum++, 1, NULL, 32, "status32_type"); + tdesc_create_reg (feature, "lp_start", regnum++, 1, NULL, 32, "code_ptr"); + tdesc_create_reg (feature, "lp_end", regnum++, 1, NULL, 32, "code_ptr"); + tdesc_create_reg (feature, "bta", regnum++, 1, NULL, 32, "code_ptr"); + return regnum; +} diff -Nru gdb-9.1/gdb/features/arc/v2-aux.xml gdb-10.2/gdb/features/arc/v2-aux.xml --- gdb-9.1/gdb/features/arc/v2-aux.xml 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/features/arc/v2-aux.xml 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,35 @@ +<?xml version="1.0"?> +<!-- Copyright (C) 2015-2021 Free Software Foundation, Inc. + + Copying and distribution of this file, with or without modification, + are permitted in any medium without royalty provided the copyright + notice and this notice are preserved. --> + +<!DOCTYPE target SYSTEM "gdb-target.dtd"> +<feature name="org.gnu.gdb.arc.aux"> + <flags id="status32_type" size="4"> + <field name="H" start="0" end="0"/> + <field name="E" start="1" end="4"/> + <field name="AE" start="5" end="5"/> + <field name="DE" start="6" end="6"/> + <field name="U" start="7" end="7"/> + <field name="V" start="8" end="8"/> + <field name="C" start="9" end="9"/> + <field name="N" start="10" end="10"/> + <field name="Z" start="11" end="11"/> + <field name="L" start="12" end="12"/> + <field name="DZ" start="13" end="13"/> + <field name="SC" start="14" end="14"/> + <field name="ES" start="15" end="15"/> + <field name="RB" start="16" end="18"/> + <field name="AD" start="19" end="19"/> + <field name="US" start="20" end="20"/> + <field name="IE" start="31" end="31"/> + </flags> + + <reg name="pc" bitsize="32" type="code_ptr"/> + <reg name="status32" bitsize="32" type="status32_type"/> + <reg name="lp_start" bitsize="32" type="code_ptr"/> + <reg name="lp_end" bitsize="32" type="code_ptr"/> + <reg name="bta" bitsize="32" type="code_ptr"/> +</feature> diff -Nru gdb-9.1/gdb/features/arc/v2-core.c gdb-10.2/gdb/features/arc/v2-core.c --- gdb-9.1/gdb/features/arc/v2-core.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/features/arc/v2-core.c 2020-09-13 02:33:41.000000000 +0000 @@ -0,0 +1,46 @@ +/* THIS FILE IS GENERATED. -*- buffer-read-only: t -*- vi:set ro: + Original: v2-core.xml */ + +#include "gdbsupport/tdesc.h" + +static int +create_feature_arc_v2_core (struct target_desc *result, long regnum) +{ + struct tdesc_feature *feature; + + feature = tdesc_create_feature (result, "org.gnu.gdb.arc.core"); + tdesc_create_reg (feature, "r0", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r1", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r2", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r3", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r4", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r5", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r6", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r7", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r8", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r9", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r10", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r11", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r12", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r13", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r14", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r15", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r16", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r17", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r18", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r19", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r20", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r21", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r22", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r23", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r24", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r25", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "gp", regnum++, 1, NULL, 32, "data_ptr"); + tdesc_create_reg (feature, "fp", regnum++, 1, NULL, 32, "data_ptr"); + tdesc_create_reg (feature, "sp", regnum++, 1, NULL, 32, "data_ptr"); + tdesc_create_reg (feature, "r30", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "blink", regnum++, 1, NULL, 32, "code_ptr"); + tdesc_create_reg (feature, "lp_count", regnum++, 1, NULL, 32, "uint32"); + tdesc_create_reg (feature, "pcl", regnum++, 1, NULL, 32, "code_ptr"); + return regnum; +} diff -Nru gdb-9.1/gdb/features/arc/v2-core.xml gdb-10.2/gdb/features/arc/v2-core.xml --- gdb-9.1/gdb/features/arc/v2-core.xml 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/features/arc/v2-core.xml 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,60 @@ +<?xml version="1.0"?> +<!-- Copyright (C) 2015-2021 Free Software Foundation, Inc. + + Copying and distribution of this file, with or without modification, + are permitted in any medium without royalty provided the copyright + notice and this notice are preserved. --> + +<!DOCTYPE target SYSTEM "gdb-target.dtd"> +<feature name="org.gnu.gdb.arc.core"> + <reg name="r0" bitsize="32"/> + <reg name="r1" bitsize="32"/> + <reg name="r2" bitsize="32"/> + <reg name="r3" bitsize="32"/> + <reg name="r4" bitsize="32"/> + <reg name="r5" bitsize="32"/> + <reg name="r6" bitsize="32"/> + <reg name="r7" bitsize="32"/> + <reg name="r8" bitsize="32"/> + <reg name="r9" bitsize="32"/> + <reg name="r10" bitsize="32"/> + <reg name="r11" bitsize="32"/> + <reg name="r12" bitsize="32"/> + <reg name="r13" bitsize="32"/> + <reg name="r14" bitsize="32"/> + <reg name="r15" bitsize="32"/> + <reg name="r16" bitsize="32"/> + <reg name="r17" bitsize="32"/> + <reg name="r18" bitsize="32"/> + <reg name="r19" bitsize="32"/> + <reg name="r20" bitsize="32"/> + <reg name="r21" bitsize="32"/> + <reg name="r22" bitsize="32"/> + <reg name="r23" bitsize="32"/> + <reg name="r24" bitsize="32"/> + <reg name="r25" bitsize="32"/> + + <!-- ARC core data pointer registers. --> + <reg name="gp" bitsize="32" type="data_ptr"/> + <reg name="fp" bitsize="32" type="data_ptr"/> + <reg name="sp" bitsize="32" type="data_ptr"/> + + <!-- Code pointers. R30 is general purpose, but it used to be ILINK2 in + ARCompact, thus its odd position in between of special purpose registers. + GCC does't use this register, so it isn't a member of a general group. --> + <reg name="r30" bitsize="32" group=""/> + <reg name="blink" bitsize="32" type="code_ptr"/> + + <!-- Extension core registers: r32 - r57. --> + <!-- ACCL/ACCH registers: r58, r59. --> + + <!-- Loop counter. --> + <reg name="lp_count" bitsize="32" type="uint32"/> + + <!-- r61 is a reserved register address. --> + + <!-- r62 is a long immediate value, not a real register. --> + + <!-- 4-byte aligned read-only program counter. --> + <reg name="pcl" bitsize="32" type="code_ptr" group=""/> +</feature> diff -Nru gdb-9.1/gdb/features/arc-arcompact.c gdb-10.2/gdb/features/arc-arcompact.c --- gdb-9.1/gdb/features/arc-arcompact.c 2019-02-23 12:20:11.000000000 +0000 +++ gdb-10.2/gdb/features/arc-arcompact.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,74 +0,0 @@ -/* THIS FILE IS GENERATED. -*- buffer-read-only: t -*- vi:set ro: - Original: arc-arcompact.xml */ - -#include "defs.h" -#include "osabi.h" -#include "target-descriptions.h" - -struct target_desc *tdesc_arc_arcompact; -static void -initialize_tdesc_arc_arcompact (void) -{ - struct target_desc *result = allocate_target_description (); - set_tdesc_architecture (result, bfd_scan_arch ("ARC700")); - - struct tdesc_feature *feature; - - feature = tdesc_create_feature (result, "org.gnu.gdb.arc.core.arcompact"); - tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r2", 2, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r3", 3, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r4", 4, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r5", 5, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r6", 6, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r7", 7, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r8", 8, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r9", 9, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r10", 10, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r11", 11, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r12", 12, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r13", 13, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r14", 14, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r15", 15, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r16", 16, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r17", 17, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r18", 18, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r19", 19, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r20", 20, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r21", 21, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r22", 22, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r23", 23, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r24", 24, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r25", 25, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "gp", 26, 1, NULL, 32, "data_ptr"); - tdesc_create_reg (feature, "fp", 27, 1, NULL, 32, "data_ptr"); - tdesc_create_reg (feature, "sp", 28, 1, NULL, 32, "data_ptr"); - tdesc_create_reg (feature, "ilink1", 29, 1, NULL, 32, "code_ptr"); - tdesc_create_reg (feature, "ilink2", 30, 1, NULL, 32, "code_ptr"); - tdesc_create_reg (feature, "blink", 31, 1, NULL, 32, "code_ptr"); - tdesc_create_reg (feature, "lp_count", 32, 1, NULL, 32, "uint32"); - tdesc_create_reg (feature, "pcl", 33, 1, NULL, 32, "code_ptr"); - - feature = tdesc_create_feature (result, "org.gnu.gdb.arc.aux-minimal"); - tdesc_type_with_fields *type_with_fields; - type_with_fields = tdesc_create_flags (feature, "status32_type", 4); - tdesc_add_flag (type_with_fields, 0, "H"); - tdesc_add_bitfield (type_with_fields, "E", 1, 2); - tdesc_add_bitfield (type_with_fields, "A", 3, 4); - tdesc_add_flag (type_with_fields, 5, "AE"); - tdesc_add_flag (type_with_fields, 6, "DE"); - tdesc_add_flag (type_with_fields, 7, "U"); - tdesc_add_flag (type_with_fields, 8, "V"); - tdesc_add_flag (type_with_fields, 9, "C"); - tdesc_add_flag (type_with_fields, 10, "N"); - tdesc_add_flag (type_with_fields, 11, "Z"); - tdesc_add_flag (type_with_fields, 12, "L"); - tdesc_add_flag (type_with_fields, 13, "R"); - tdesc_add_flag (type_with_fields, 14, "SE"); - - tdesc_create_reg (feature, "pc", 34, 1, NULL, 32, "code_ptr"); - tdesc_create_reg (feature, "status32", 35, 1, NULL, 32, "status32_type"); - - tdesc_arc_arcompact = result; -} diff -Nru gdb-9.1/gdb/features/arc-arcompact.xml gdb-10.2/gdb/features/arc-arcompact.xml --- gdb-9.1/gdb/features/arc-arcompact.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/arc-arcompact.xml 1970-01-01 00:00:00.000000000 +0000 @@ -1,85 +0,0 @@ -<?xml version="1.0"?> -<!-- Copyright (C) 2015-2020 Free Software Foundation, Inc. - - Copying and distribution of this file, with or without modification, - are permitted in any medium without royalty provided the copyright - notice and this notice are preserved. --> - -<!DOCTYPE target SYSTEM "gdb-target.dtd"> -<target> - <architecture>arc:ARC700</architecture> - <!-- No OSABI for bare metal. --> - <!-- No compatibility for ARC. --> - - <feature name="org.gnu.gdb.arc.core.arcompact"> - <reg name="r0" bitsize="32"/> - <reg name="r1" bitsize="32"/> - <reg name="r2" bitsize="32"/> - <reg name="r3" bitsize="32"/> - <reg name="r4" bitsize="32"/> - <reg name="r5" bitsize="32"/> - <reg name="r6" bitsize="32"/> - <reg name="r7" bitsize="32"/> - <reg name="r8" bitsize="32"/> - <reg name="r9" bitsize="32"/> - <reg name="r10" bitsize="32"/> - <reg name="r11" bitsize="32"/> - <reg name="r12" bitsize="32"/> - <reg name="r13" bitsize="32"/> - <reg name="r14" bitsize="32"/> - <reg name="r15" bitsize="32"/> - <reg name="r16" bitsize="32"/> - <reg name="r17" bitsize="32"/> - <reg name="r18" bitsize="32"/> - <reg name="r19" bitsize="32"/> - <reg name="r20" bitsize="32"/> - <reg name="r21" bitsize="32"/> - <reg name="r22" bitsize="32"/> - <reg name="r23" bitsize="32"/> - <reg name="r24" bitsize="32"/> - <reg name="r25" bitsize="32"/> - - <!-- ARC core data pointer registers. --> - <reg name="gp" bitsize="32" type="data_ptr"/> - <reg name="fp" bitsize="32" type="data_ptr"/> - <reg name="sp" bitsize="32" type="data_ptr"/> - - <!-- Code pointers. --> - <reg name="ilink1" bitsize="32" type="code_ptr"/> - <reg name="ilink2" bitsize="32" type="code_ptr"/> - <reg name="blink" bitsize="32" type="code_ptr"/> - - <!-- Here goes extension core registers: r32 - r59 --> - - <!-- Loop counter. --> - <reg name="lp_count" bitsize="32" type="uint32"/> - - <!-- r61 is a reserved register address. --> - - <!-- r62 is a long immediate value, not a real register. --> - - <!-- 4-byte aligned read-only program counter. --> - <reg name="pcl" bitsize="32" type="code_ptr" group=""/> - </feature> - - <feature name="org.gnu.gdb.arc.aux-minimal"> - <flags id="status32_type" size="4"> - <field name="H" start="0" end="0"/> - <field name="E" start="1" end="2"/> - <field name="A" start="3" end="4"/> - <field name="AE" start="5" end="5"/> - <field name="DE" start="6" end="6"/> - <field name="U" start="7" end="7"/> - <field name="V" start="8" end="8"/> - <field name="C" start="9" end="9"/> - <field name="N" start="10" end="10"/> - <field name="Z" start="11" end="11"/> - <field name="L" start="12" end="12"/> - <field name="R" start="13" end="13"/> - <field name="SE" start="14" end="14"/> - </flags> - - <reg name="pc" bitsize="32" type="code_ptr"/> - <reg name="status32" bitsize="32" type="status32_type"/> - </feature> -</target> diff -Nru gdb-9.1/gdb/features/arc-v2.c gdb-10.2/gdb/features/arc-v2.c --- gdb-9.1/gdb/features/arc-v2.c 2019-02-23 12:20:11.000000000 +0000 +++ gdb-10.2/gdb/features/arc-v2.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,78 +0,0 @@ -/* THIS FILE IS GENERATED. -*- buffer-read-only: t -*- vi:set ro: - Original: arc-v2.xml */ - -#include "defs.h" -#include "osabi.h" -#include "target-descriptions.h" - -struct target_desc *tdesc_arc_v2; -static void -initialize_tdesc_arc_v2 (void) -{ - struct target_desc *result = allocate_target_description (); - set_tdesc_architecture (result, bfd_scan_arch ("ARCv2")); - - struct tdesc_feature *feature; - - feature = tdesc_create_feature (result, "org.gnu.gdb.arc.core.v2"); - tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r2", 2, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r3", 3, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r4", 4, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r5", 5, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r6", 6, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r7", 7, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r8", 8, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r9", 9, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r10", 10, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r11", 11, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r12", 12, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r13", 13, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r14", 14, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r15", 15, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r16", 16, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r17", 17, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r18", 18, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r19", 19, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r20", 20, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r21", 21, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r22", 22, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r23", 23, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r24", 24, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "r25", 25, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "gp", 26, 1, NULL, 32, "data_ptr"); - tdesc_create_reg (feature, "fp", 27, 1, NULL, 32, "data_ptr"); - tdesc_create_reg (feature, "sp", 28, 1, NULL, 32, "data_ptr"); - tdesc_create_reg (feature, "ilink", 29, 1, NULL, 32, "code_ptr"); - tdesc_create_reg (feature, "r30", 30, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "blink", 31, 1, NULL, 32, "code_ptr"); - tdesc_create_reg (feature, "lp_count", 32, 1, NULL, 32, "uint32"); - tdesc_create_reg (feature, "pcl", 33, 1, NULL, 32, "code_ptr"); - - feature = tdesc_create_feature (result, "org.gnu.gdb.arc.aux-minimal"); - tdesc_type_with_fields *type_with_fields; - type_with_fields = tdesc_create_flags (feature, "status32_type", 4); - tdesc_add_flag (type_with_fields, 0, "H"); - tdesc_add_bitfield (type_with_fields, "E", 1, 4); - tdesc_add_flag (type_with_fields, 5, "AE"); - tdesc_add_flag (type_with_fields, 6, "DE"); - tdesc_add_flag (type_with_fields, 7, "U"); - tdesc_add_flag (type_with_fields, 8, "V"); - tdesc_add_flag (type_with_fields, 9, "C"); - tdesc_add_flag (type_with_fields, 10, "N"); - tdesc_add_flag (type_with_fields, 11, "Z"); - tdesc_add_flag (type_with_fields, 12, "L"); - tdesc_add_flag (type_with_fields, 13, "DZ"); - tdesc_add_flag (type_with_fields, 14, "SC"); - tdesc_add_flag (type_with_fields, 15, "ES"); - tdesc_add_bitfield (type_with_fields, "RB", 16, 18); - tdesc_add_flag (type_with_fields, 19, "AD"); - tdesc_add_flag (type_with_fields, 20, "US"); - tdesc_add_flag (type_with_fields, 31, "IE"); - - tdesc_create_reg (feature, "pc", 34, 1, NULL, 32, "code_ptr"); - tdesc_create_reg (feature, "status32", 35, 1, NULL, 32, "status32_type"); - - tdesc_arc_v2 = result; -} diff -Nru gdb-9.1/gdb/features/arc-v2.xml gdb-10.2/gdb/features/arc-v2.xml --- gdb-9.1/gdb/features/arc-v2.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/arc-v2.xml 1970-01-01 00:00:00.000000000 +0000 @@ -1,92 +0,0 @@ -<?xml version="1.0"?> -<!-- Copyright (C) 2015-2020 Free Software Foundation, Inc. - - Copying and distribution of this file, with or without modification, - are permitted in any medium without royalty provided the copyright - notice and this notice are preserved. --> - -<!DOCTYPE target SYSTEM "gdb-target.dtd"> -<target> - <architecture>arc:ARCv2</architecture> - <!-- No OSABI for bare metal. --> - <!-- No compatibility for ARC. --> - - <feature name="org.gnu.gdb.arc.core.v2"> - <reg name="r0" bitsize="32"/> - <reg name="r1" bitsize="32"/> - <reg name="r2" bitsize="32"/> - <reg name="r3" bitsize="32"/> - <reg name="r4" bitsize="32"/> - <reg name="r5" bitsize="32"/> - <reg name="r6" bitsize="32"/> - <reg name="r7" bitsize="32"/> - <reg name="r8" bitsize="32"/> - <reg name="r9" bitsize="32"/> - <reg name="r10" bitsize="32"/> - <reg name="r11" bitsize="32"/> - <reg name="r12" bitsize="32"/> - <reg name="r13" bitsize="32"/> - <reg name="r14" bitsize="32"/> - <reg name="r15" bitsize="32"/> - <reg name="r16" bitsize="32"/> - <reg name="r17" bitsize="32"/> - <reg name="r18" bitsize="32"/> - <reg name="r19" bitsize="32"/> - <reg name="r20" bitsize="32"/> - <reg name="r21" bitsize="32"/> - <reg name="r22" bitsize="32"/> - <reg name="r23" bitsize="32"/> - <reg name="r24" bitsize="32"/> - <reg name="r25" bitsize="32"/> - - <!-- ARC core data pointer registers. --> - <reg name="gp" bitsize="32" type="data_ptr"/> - <reg name="fp" bitsize="32" type="data_ptr"/> - <reg name="sp" bitsize="32" type="data_ptr"/> - - <!-- Code pointers. R30 is general purpose, but it used to be ILINK2 in - ARCompact, thus its odd position in between of special purpose registers. - GCC does't use this register, so it isn't a member of a general group. --> - <reg name="ilink" bitsize="32" type="code_ptr"/> - <reg name="r30" bitsize="32" group=""/> - <reg name="blink" bitsize="32" type="code_ptr"/> - - <!-- Here goes extension core registers: r32 - r57. --> - <!-- Here goes ACCL/ACCH registers, r58, r59. --> - - <!-- Loop counter. --> - <reg name="lp_count" bitsize="32" type="uint32"/> - - <!-- r61 is a reserved register address. --> - - <!-- r62 is a long immediate value, not a real register. --> - - <!-- 4-byte aligned read-only program counter. --> - <reg name="pcl" bitsize="32" type="code_ptr" group=""/> - </feature> - - <feature name="org.gnu.gdb.arc.aux-minimal"> - <flags id="status32_type" size="4"> - <field name="H" start="0" end="0"/> - <field name="E" start="1" end="4"/> - <field name="AE" start="5" end="5"/> - <field name="DE" start="6" end="6"/> - <field name="U" start="7" end="7"/> - <field name="V" start="8" end="8"/> - <field name="C" start="9" end="9"/> - <field name="N" start="10" end="10"/> - <field name="Z" start="11" end="11"/> - <field name="L" start="12" end="12"/> - <field name="DZ" start="13" end="13"/> - <field name="SC" start="14" end="14"/> - <field name="ES" start="15" end="15"/> - <field name="RB" start="16" end="18"/> - <field name="AD" start="19" end="19"/> - <field name="US" start="20" end="20"/> - <field name="IE" start="31" end="31"/> - </flags> - - <reg name="pc" bitsize="32" type="code_ptr"/> - <reg name="status32" bitsize="32" type="status32_type"/> - </feature> -</target> diff -Nru gdb-9.1/gdb/features/arm/arm-core.xml gdb-10.2/gdb/features/arm/arm-core.xml --- gdb-9.1/gdb/features/arm/arm-core.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/arm/arm-core.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2007-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2007-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/arm/arm-fpa.xml gdb-10.2/gdb/features/arm/arm-fpa.xml --- gdb-9.1/gdb/features/arm/arm-fpa.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/arm/arm-fpa.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2007-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2007-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/arm/arm-m-profile-with-fpa.xml gdb-10.2/gdb/features/arm/arm-m-profile-with-fpa.xml --- gdb-9.1/gdb/features/arm/arm-m-profile-with-fpa.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/arm/arm-m-profile-with-fpa.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2019-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2019-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/arm/arm-m-profile.xml gdb-10.2/gdb/features/arm/arm-m-profile.xml --- gdb-9.1/gdb/features/arm/arm-m-profile.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/arm/arm-m-profile.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2010-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2010-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/arm/arm-vfpv2.xml gdb-10.2/gdb/features/arm/arm-vfpv2.xml --- gdb-9.1/gdb/features/arm/arm-vfpv2.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/arm/arm-vfpv2.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2009-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2009-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/arm/arm-vfpv3.xml gdb-10.2/gdb/features/arm/arm-vfpv3.xml --- gdb-9.1/gdb/features/arm/arm-vfpv3.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/arm/arm-vfpv3.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2009-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2009-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/arm/xscale-iwmmxt.xml gdb-10.2/gdb/features/arm/xscale-iwmmxt.xml --- gdb-9.1/gdb/features/arm/xscale-iwmmxt.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/arm/xscale-iwmmxt.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2007-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2007-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/btrace-conf.dtd gdb-10.2/gdb/features/btrace-conf.dtd --- gdb-9.1/gdb/features/btrace-conf.dtd 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/btrace-conf.dtd 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -<!-- Copyright (C) 2013-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2013-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/btrace.dtd gdb-10.2/gdb/features/btrace.dtd --- gdb-9.1/gdb/features/btrace.dtd 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/btrace.dtd 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -<!-- Copyright (C) 2013-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2013-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/feature_to_c.sh gdb-10.2/gdb/features/feature_to_c.sh --- gdb-9.1/gdb/features/feature_to_c.sh 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/feature_to_c.sh 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ # Convert text files to compilable C arrays. # -# Copyright (C) 2007-2020 Free Software Foundation, Inc. +# Copyright (C) 2007-2021 Free Software Foundation, Inc. # # This file is part of GDB. # diff -Nru gdb-9.1/gdb/features/gdb-target.dtd gdb-10.2/gdb/features/gdb-target.dtd --- gdb-9.1/gdb/features/gdb-target.dtd 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/gdb-target.dtd 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -<!-- Copyright (C) 2007-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2007-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/i386/32bit-avx512.xml gdb-10.2/gdb/features/i386/32bit-avx512.xml --- gdb-9.1/gdb/features/i386/32bit-avx512.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/i386/32bit-avx512.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2014-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2014-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/i386/32bit-avx.xml gdb-10.2/gdb/features/i386/32bit-avx.xml --- gdb-9.1/gdb/features/i386/32bit-avx.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/i386/32bit-avx.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2010-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2010-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/i386/32bit-core.xml gdb-10.2/gdb/features/i386/32bit-core.xml --- gdb-9.1/gdb/features/i386/32bit-core.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/i386/32bit-core.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2010-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2010-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/i386/32bit-linux.xml gdb-10.2/gdb/features/i386/32bit-linux.xml --- gdb-9.1/gdb/features/i386/32bit-linux.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/i386/32bit-linux.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2010-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2010-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/i386/32bit-mpx.xml gdb-10.2/gdb/features/i386/32bit-mpx.xml --- gdb-9.1/gdb/features/i386/32bit-mpx.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/i386/32bit-mpx.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2013-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2013-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/i386/32bit-pkeys.xml gdb-10.2/gdb/features/i386/32bit-pkeys.xml --- gdb-9.1/gdb/features/i386/32bit-pkeys.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/i386/32bit-pkeys.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2016-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2016-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/i386/32bit-segments.xml gdb-10.2/gdb/features/i386/32bit-segments.xml --- gdb-9.1/gdb/features/i386/32bit-segments.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/i386/32bit-segments.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2016-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2016-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/i386/32bit-sse.xml gdb-10.2/gdb/features/i386/32bit-sse.xml --- gdb-9.1/gdb/features/i386/32bit-sse.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/i386/32bit-sse.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2010-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2010-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/i386/64bit-avx512.c gdb-10.2/gdb/features/i386/64bit-avx512.c --- gdb-9.1/gdb/features/i386/64bit-avx512.c 2019-09-20 21:58:17.000000000 +0000 +++ gdb-10.2/gdb/features/i386/64bit-avx512.c 2020-09-13 02:33:41.000000000 +0000 @@ -10,6 +10,9 @@ feature = tdesc_create_feature (result, "org.gnu.gdb.i386.avx512"); tdesc_type *element_type; + element_type = tdesc_named_type (feature, "bfloat16"); + tdesc_create_vector (feature, "v8bf16", element_type, 8); + element_type = tdesc_named_type (feature, "ieee_single"); tdesc_create_vector (feature, "v4f", element_type, 4); @@ -31,6 +34,8 @@ tdesc_type_with_fields *type_with_fields; type_with_fields = tdesc_create_union (feature, "vec128"); tdesc_type *field_type; + field_type = tdesc_named_type (feature, "v8bf16"); + tdesc_add_field (type_with_fields, "v8_bfloat16", field_type); field_type = tdesc_named_type (feature, "v4f"); tdesc_add_field (type_with_fields, "v4_float", field_type); field_type = tdesc_named_type (feature, "v2d"); diff -Nru gdb-9.1/gdb/features/i386/64bit-avx512.xml gdb-10.2/gdb/features/i386/64bit-avx512.xml --- gdb-9.1/gdb/features/i386/64bit-avx512.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/i386/64bit-avx512.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2014-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2014-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright @@ -7,13 +7,15 @@ <!DOCTYPE feature SYSTEM "gdb-target.dtd"> <feature name="org.gnu.gdb.i386.avx512"> -<vector id="v4f" type="ieee_single" count="4"/> + <vector id="v8bf16" type="bfloat16" count="8"/> + <vector id="v4f" type="ieee_single" count="4"/> <vector id="v2d" type="ieee_double" count="2"/> <vector id="v16i8" type="int8" count="16"/> <vector id="v8i16" type="int16" count="8"/> <vector id="v4i32" type="int32" count="4"/> <vector id="v2i64" type="int64" count="2"/> <union id="vec128"> + <field name="v8_bfloat16" type="v8bf16"/> <field name="v4_float" type="v4f"/> <field name="v2_double" type="v2d"/> <field name="v16_int8" type="v16i8"/> diff -Nru gdb-9.1/gdb/features/i386/64bit-avx.xml gdb-10.2/gdb/features/i386/64bit-avx.xml --- gdb-9.1/gdb/features/i386/64bit-avx.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/i386/64bit-avx.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2010-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2010-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/i386/64bit-core.xml gdb-10.2/gdb/features/i386/64bit-core.xml --- gdb-9.1/gdb/features/i386/64bit-core.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/i386/64bit-core.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2010-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2010-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/i386/64bit-linux.xml gdb-10.2/gdb/features/i386/64bit-linux.xml --- gdb-9.1/gdb/features/i386/64bit-linux.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/i386/64bit-linux.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2010-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2010-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/i386/64bit-mpx.xml gdb-10.2/gdb/features/i386/64bit-mpx.xml --- gdb-9.1/gdb/features/i386/64bit-mpx.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/i386/64bit-mpx.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2013-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2013-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/i386/64bit-pkeys.xml gdb-10.2/gdb/features/i386/64bit-pkeys.xml --- gdb-9.1/gdb/features/i386/64bit-pkeys.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/i386/64bit-pkeys.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2016-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2016-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/i386/64bit-segments.xml gdb-10.2/gdb/features/i386/64bit-segments.xml --- gdb-9.1/gdb/features/i386/64bit-segments.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/i386/64bit-segments.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2016-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2016-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/i386/64bit-sse.c gdb-10.2/gdb/features/i386/64bit-sse.c --- gdb-9.1/gdb/features/i386/64bit-sse.c 2019-09-20 21:58:17.000000000 +0000 +++ gdb-10.2/gdb/features/i386/64bit-sse.c 2020-09-13 02:33:41.000000000 +0000 @@ -10,6 +10,9 @@ feature = tdesc_create_feature (result, "org.gnu.gdb.i386.sse"); tdesc_type *element_type; + element_type = tdesc_named_type (feature, "bfloat16"); + tdesc_create_vector (feature, "v8bf16", element_type, 8); + element_type = tdesc_named_type (feature, "ieee_single"); tdesc_create_vector (feature, "v4f", element_type, 4); @@ -31,6 +34,8 @@ tdesc_type_with_fields *type_with_fields; type_with_fields = tdesc_create_union (feature, "vec128"); tdesc_type *field_type; + field_type = tdesc_named_type (feature, "v8bf16"); + tdesc_add_field (type_with_fields, "v8_bfloat16", field_type); field_type = tdesc_named_type (feature, "v4f"); tdesc_add_field (type_with_fields, "v4_float", field_type); field_type = tdesc_named_type (feature, "v2d"); diff -Nru gdb-9.1/gdb/features/i386/64bit-sse.xml gdb-10.2/gdb/features/i386/64bit-sse.xml --- gdb-9.1/gdb/features/i386/64bit-sse.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/i386/64bit-sse.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2010-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2010-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright @@ -7,6 +7,7 @@ <!DOCTYPE feature SYSTEM "gdb-target.dtd"> <feature name="org.gnu.gdb.i386.sse"> + <vector id="v8bf16" type="bfloat16" count="8"/> <vector id="v4f" type="ieee_single" count="4"/> <vector id="v2d" type="ieee_double" count="2"/> <vector id="v16i8" type="int8" count="16"/> @@ -14,6 +15,7 @@ <vector id="v4i32" type="int32" count="4"/> <vector id="v2i64" type="int64" count="2"/> <union id="vec128"> + <field name="v8_bfloat16" type="v8bf16"/> <field name="v4_float" type="v4f"/> <field name="v2_double" type="v2d"/> <field name="v16_int8" type="v16i8"/> diff -Nru gdb-9.1/gdb/features/i386/x32-core.xml gdb-10.2/gdb/features/i386/x32-core.xml --- gdb-9.1/gdb/features/i386/x32-core.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/i386/x32-core.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2012-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2012-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/library-list-aix.dtd gdb-10.2/gdb/features/library-list-aix.dtd --- gdb-9.1/gdb/features/library-list-aix.dtd 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/library-list-aix.dtd 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -<!-- Copyright (C) 2013-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2013-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/library-list.dtd gdb-10.2/gdb/features/library-list.dtd --- gdb-9.1/gdb/features/library-list.dtd 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/library-list.dtd 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -<!-- Copyright (C) 2007-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2007-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/library-list-svr4.dtd gdb-10.2/gdb/features/library-list-svr4.dtd --- gdb-9.1/gdb/features/library-list-svr4.dtd 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/library-list-svr4.dtd 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -<!-- Copyright (C) 2011-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2011-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/Makefile gdb-10.2/gdb/features/Makefile --- gdb-9.1/gdb/features/Makefile 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/Makefile 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2007-2020 Free Software Foundation, Inc. +# Copyright (C) 2007-2021 Free Software Foundation, Inc. # This file is part of GDB. @@ -44,9 +44,7 @@ # make GDB=/path/to/gdb XMLTOC="xml files" FEATURE_XMLFILES="xml files" cfiles # List of .dat files to create in ../regformats/ -WHICH = arm/arm-with-iwmmxt arm/arm-with-vfpv2 arm/arm-with-vfpv3 \ - arm/arm-with-neon \ - mips-linux mips-dsp-linux \ +WHICH = mips-linux mips-dsp-linux \ microblaze-with-stack-protect \ mips64-linux mips64-dsp-linux \ nios2-linux \ @@ -108,8 +106,6 @@ # --enable-targets=all GDB. You can override this by passing XMLTOC # to make on the command line. XMLTOC = \ - arc-v2.xml \ - arc-arcompact.xml \ microblaze-with-stack-protect.xml \ microblaze.xml \ mips-dsp-linux.xml \ @@ -157,7 +153,6 @@ rs6000/powerpc-vsx64.xml \ rs6000/powerpc-vsx64l.xml \ rs6000/rs6000.xml \ - rx.xml \ s390-linux32.xml \ s390-linux32v1.xml \ s390-linux32v2.xml \ @@ -206,6 +201,10 @@ FEATURE_XMLFILES = aarch64-core.xml \ aarch64-fpu.xml \ aarch64-pauth.xml \ + arc/v1-core.xml \ + arc/v1-aux.xml \ + arc/v2-core.xml \ + arc/v2-aux.xml \ arm/arm-core.xml \ arm/arm-fpa.xml \ arm/arm-m-profile.xml \ @@ -230,10 +229,8 @@ i386/64bit-sse.xml \ i386/x32-core.xml \ riscv/32bit-cpu.xml \ - riscv/32bit-csr.xml \ riscv/32bit-fpu.xml \ riscv/64bit-cpu.xml \ - riscv/64bit-csr.xml \ riscv/64bit-fpu.xml \ rx.xml \ tic6x-c6xp.xml \ @@ -266,10 +263,6 @@ echo "</target>" >> $@.tmp sh ../../move-if-change $@.tmp $@ -# Regenerate RISC-V CSR feature lists. -riscv/32bit-csr.xml riscv/64bit-csr.xml: ../../include/opcode/riscv-opc.h - ./riscv/rebuild-csr-xml.sh ../../include/opcode/riscv-opc.h ./riscv - # 'all' doesn't build the C files, so don't delete them in 'clean' # either. clean-cfiles: diff -Nru gdb-9.1/gdb/features/microblaze-core.xml gdb-10.2/gdb/features/microblaze-core.xml --- gdb-9.1/gdb/features/microblaze-core.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/microblaze-core.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2014-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2014-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/microblaze-stack-protect.xml gdb-10.2/gdb/features/microblaze-stack-protect.xml --- gdb-9.1/gdb/features/microblaze-stack-protect.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/microblaze-stack-protect.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2014-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2014-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/microblaze-with-stack-protect.xml gdb-10.2/gdb/features/microblaze-with-stack-protect.xml --- gdb-9.1/gdb/features/microblaze-with-stack-protect.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/microblaze-with-stack-protect.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2014-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2014-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/microblaze.xml gdb-10.2/gdb/features/microblaze.xml --- gdb-9.1/gdb/features/microblaze.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/microblaze.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2014-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2014-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/mips64-cp0.xml gdb-10.2/gdb/features/mips64-cp0.xml --- gdb-9.1/gdb/features/mips64-cp0.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/mips64-cp0.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2007-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2007-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/mips64-cpu.xml gdb-10.2/gdb/features/mips64-cpu.xml --- gdb-9.1/gdb/features/mips64-cpu.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/mips64-cpu.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2007-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2007-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/mips64-dsp-linux.xml gdb-10.2/gdb/features/mips64-dsp-linux.xml --- gdb-9.1/gdb/features/mips64-dsp-linux.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/mips64-dsp-linux.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2012-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2012-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/mips64-dsp.xml gdb-10.2/gdb/features/mips64-dsp.xml --- gdb-9.1/gdb/features/mips64-dsp.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/mips64-dsp.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2012-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2012-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/mips64-fpu.xml gdb-10.2/gdb/features/mips64-fpu.xml --- gdb-9.1/gdb/features/mips64-fpu.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/mips64-fpu.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2007-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2007-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/mips64-linux.xml gdb-10.2/gdb/features/mips64-linux.xml --- gdb-9.1/gdb/features/mips64-linux.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/mips64-linux.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2007-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2007-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/mips-cp0.xml gdb-10.2/gdb/features/mips-cp0.xml --- gdb-9.1/gdb/features/mips-cp0.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/mips-cp0.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2007-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2007-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/mips-cpu.xml gdb-10.2/gdb/features/mips-cpu.xml --- gdb-9.1/gdb/features/mips-cpu.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/mips-cpu.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2007-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2007-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/mips-dsp-linux.xml gdb-10.2/gdb/features/mips-dsp-linux.xml --- gdb-9.1/gdb/features/mips-dsp-linux.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/mips-dsp-linux.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2012-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2012-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/mips-dsp.xml gdb-10.2/gdb/features/mips-dsp.xml --- gdb-9.1/gdb/features/mips-dsp.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/mips-dsp.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2012-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2012-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/mips-fpu.xml gdb-10.2/gdb/features/mips-fpu.xml --- gdb-9.1/gdb/features/mips-fpu.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/mips-fpu.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2007-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2007-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/mips-linux.xml gdb-10.2/gdb/features/mips-linux.xml --- gdb-9.1/gdb/features/mips-linux.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/mips-linux.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2007-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2007-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/nds32-core.xml gdb-10.2/gdb/features/nds32-core.xml --- gdb-9.1/gdb/features/nds32-core.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/nds32-core.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2013-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2013-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/nds32-fpu.xml gdb-10.2/gdb/features/nds32-fpu.xml --- gdb-9.1/gdb/features/nds32-fpu.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/nds32-fpu.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2013-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2013-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/nds32-system.xml gdb-10.2/gdb/features/nds32-system.xml --- gdb-9.1/gdb/features/nds32-system.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/nds32-system.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2013-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2013-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/nds32.xml gdb-10.2/gdb/features/nds32.xml --- gdb-9.1/gdb/features/nds32.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/nds32.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2013-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2013-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/nios2-cpu.xml gdb-10.2/gdb/features/nios2-cpu.xml --- gdb-9.1/gdb/features/nios2-cpu.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/nios2-cpu.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2012-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2012-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/nios2-linux.xml gdb-10.2/gdb/features/nios2-linux.xml --- gdb-9.1/gdb/features/nios2-linux.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/nios2-linux.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2012-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2012-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/nios2.xml gdb-10.2/gdb/features/nios2.xml --- gdb-9.1/gdb/features/nios2.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/nios2.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2013-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2013-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/or1k-core.xml gdb-10.2/gdb/features/or1k-core.xml --- gdb-9.1/gdb/features/or1k-core.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/or1k-core.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2017-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2017-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/or1k.xml gdb-10.2/gdb/features/or1k.xml --- gdb-9.1/gdb/features/or1k.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/or1k.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2016-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2016-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/osdata.dtd gdb-10.2/gdb/features/osdata.dtd --- gdb-9.1/gdb/features/osdata.dtd 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/osdata.dtd 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -<!-- Copyright (C) 2008-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2008-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/riscv/32bit-cpu.xml gdb-10.2/gdb/features/riscv/32bit-cpu.xml --- gdb-9.1/gdb/features/riscv/32bit-cpu.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/riscv/32bit-cpu.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2018-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2018-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/riscv/32bit-csr.c gdb-10.2/gdb/features/riscv/32bit-csr.c --- gdb-9.1/gdb/features/riscv/32bit-csr.c 2019-09-20 21:58:17.000000000 +0000 +++ gdb-10.2/gdb/features/riscv/32bit-csr.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,253 +0,0 @@ -/* THIS FILE IS GENERATED. -*- buffer-read-only: t -*- vi:set ro: - Original: 32bit-csr.xml */ - -#include "gdbsupport/tdesc.h" - -static int -create_feature_riscv_32bit_csr (struct target_desc *result, long regnum) -{ - struct tdesc_feature *feature; - - feature = tdesc_create_feature (result, "org.gnu.gdb.riscv.csr"); - tdesc_create_reg (feature, "ustatus", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "uie", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "utvec", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "uscratch", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "uepc", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "ucause", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "utval", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "uip", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "fflags", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "frm", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "fcsr", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "cycle", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "time", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "instret", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "hpmcounter3", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "hpmcounter4", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "hpmcounter5", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "hpmcounter6", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "hpmcounter7", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "hpmcounter8", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "hpmcounter9", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "hpmcounter10", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "hpmcounter11", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "hpmcounter12", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "hpmcounter13", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "hpmcounter14", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "hpmcounter15", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "hpmcounter16", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "hpmcounter17", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "hpmcounter18", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "hpmcounter19", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "hpmcounter20", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "hpmcounter21", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "hpmcounter22", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "hpmcounter23", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "hpmcounter24", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "hpmcounter25", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "hpmcounter26", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "hpmcounter27", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "hpmcounter28", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "hpmcounter29", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "hpmcounter30", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "hpmcounter31", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "cycleh", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "timeh", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "instreth", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "hpmcounter3h", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "hpmcounter4h", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "hpmcounter5h", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "hpmcounter6h", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "hpmcounter7h", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "hpmcounter8h", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "hpmcounter9h", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "hpmcounter10h", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "hpmcounter11h", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "hpmcounter12h", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "hpmcounter13h", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "hpmcounter14h", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "hpmcounter15h", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "hpmcounter16h", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "hpmcounter17h", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "hpmcounter18h", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "hpmcounter19h", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "hpmcounter20h", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "hpmcounter21h", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "hpmcounter22h", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "hpmcounter23h", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "hpmcounter24h", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "hpmcounter25h", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "hpmcounter26h", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "hpmcounter27h", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "hpmcounter28h", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "hpmcounter29h", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "hpmcounter30h", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "hpmcounter31h", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "sstatus", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "sedeleg", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "sideleg", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "sie", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "stvec", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "scounteren", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "sscratch", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "sepc", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "scause", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "stval", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "sip", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "satp", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mvendorid", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "marchid", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mimpid", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhartid", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mstatus", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "misa", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "medeleg", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mideleg", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mie", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mtvec", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mcounteren", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mscratch", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mepc", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mcause", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mtval", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mip", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "pmpcfg0", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "pmpcfg1", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "pmpcfg2", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "pmpcfg3", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "pmpaddr0", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "pmpaddr1", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "pmpaddr2", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "pmpaddr3", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "pmpaddr4", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "pmpaddr5", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "pmpaddr6", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "pmpaddr7", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "pmpaddr8", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "pmpaddr9", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "pmpaddr10", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "pmpaddr11", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "pmpaddr12", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "pmpaddr13", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "pmpaddr14", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "pmpaddr15", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mcycle", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "minstret", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmcounter3", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmcounter4", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmcounter5", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmcounter6", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmcounter7", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmcounter8", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmcounter9", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmcounter10", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmcounter11", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmcounter12", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmcounter13", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmcounter14", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmcounter15", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmcounter16", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmcounter17", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmcounter18", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmcounter19", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmcounter20", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmcounter21", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmcounter22", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmcounter23", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmcounter24", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmcounter25", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmcounter26", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmcounter27", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmcounter28", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmcounter29", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmcounter30", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmcounter31", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mcycleh", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "minstreth", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmcounter3h", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmcounter4h", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmcounter5h", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmcounter6h", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmcounter7h", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmcounter8h", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmcounter9h", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmcounter10h", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmcounter11h", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmcounter12h", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmcounter13h", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmcounter14h", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmcounter15h", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmcounter16h", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmcounter17h", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmcounter18h", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmcounter19h", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmcounter20h", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmcounter21h", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmcounter22h", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmcounter23h", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmcounter24h", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmcounter25h", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmcounter26h", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmcounter27h", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmcounter28h", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmcounter29h", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmcounter30h", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmcounter31h", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmevent3", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmevent4", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmevent5", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmevent6", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmevent7", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmevent8", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmevent9", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmevent10", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmevent11", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmevent12", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmevent13", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmevent14", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmevent15", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmevent16", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmevent17", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmevent18", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmevent19", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmevent20", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmevent21", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmevent22", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmevent23", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmevent24", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmevent25", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmevent26", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmevent27", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmevent28", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmevent29", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmevent30", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhpmevent31", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "tselect", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "tdata1", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "tdata2", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "tdata3", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "dcsr", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "dpc", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "dscratch", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "hstatus", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "hedeleg", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "hideleg", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "hie", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "htvec", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "hscratch", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "hepc", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "hcause", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "hbadaddr", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "hip", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mbase", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mbound", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mibase", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mibound", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mdbase", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mdbound", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mucounteren", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mscounteren", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "mhcounteren", regnum++, 1, NULL, 32, "int"); - return regnum; -} diff -Nru gdb-9.1/gdb/features/riscv/32bit-csr.xml gdb-10.2/gdb/features/riscv/32bit-csr.xml --- gdb-9.1/gdb/features/riscv/32bit-csr.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/riscv/32bit-csr.xml 1970-01-01 00:00:00.000000000 +0000 @@ -1,250 +0,0 @@ -<?xml version="1.0"?> -<!-- Copyright (C) 2018-2020 Free Software Foundation, Inc. - - Copying and distribution of this file, with or without modification, - are permitted in any medium without royalty provided the copyright - notice and this notice are preserved. --> - -<!DOCTYPE feature SYSTEM "gdb-target.dtd"> -<feature name="org.gnu.gdb.riscv.csr"> - <reg name="ustatus" bitsize="32"/> - <reg name="uie" bitsize="32"/> - <reg name="utvec" bitsize="32"/> - <reg name="uscratch" bitsize="32"/> - <reg name="uepc" bitsize="32"/> - <reg name="ucause" bitsize="32"/> - <reg name="utval" bitsize="32"/> - <reg name="uip" bitsize="32"/> - <reg name="fflags" bitsize="32"/> - <reg name="frm" bitsize="32"/> - <reg name="fcsr" bitsize="32"/> - <reg name="cycle" bitsize="32"/> - <reg name="time" bitsize="32"/> - <reg name="instret" bitsize="32"/> - <reg name="hpmcounter3" bitsize="32"/> - <reg name="hpmcounter4" bitsize="32"/> - <reg name="hpmcounter5" bitsize="32"/> - <reg name="hpmcounter6" bitsize="32"/> - <reg name="hpmcounter7" bitsize="32"/> - <reg name="hpmcounter8" bitsize="32"/> - <reg name="hpmcounter9" bitsize="32"/> - <reg name="hpmcounter10" bitsize="32"/> - <reg name="hpmcounter11" bitsize="32"/> - <reg name="hpmcounter12" bitsize="32"/> - <reg name="hpmcounter13" bitsize="32"/> - <reg name="hpmcounter14" bitsize="32"/> - <reg name="hpmcounter15" bitsize="32"/> - <reg name="hpmcounter16" bitsize="32"/> - <reg name="hpmcounter17" bitsize="32"/> - <reg name="hpmcounter18" bitsize="32"/> - <reg name="hpmcounter19" bitsize="32"/> - <reg name="hpmcounter20" bitsize="32"/> - <reg name="hpmcounter21" bitsize="32"/> - <reg name="hpmcounter22" bitsize="32"/> - <reg name="hpmcounter23" bitsize="32"/> - <reg name="hpmcounter24" bitsize="32"/> - <reg name="hpmcounter25" bitsize="32"/> - <reg name="hpmcounter26" bitsize="32"/> - <reg name="hpmcounter27" bitsize="32"/> - <reg name="hpmcounter28" bitsize="32"/> - <reg name="hpmcounter29" bitsize="32"/> - <reg name="hpmcounter30" bitsize="32"/> - <reg name="hpmcounter31" bitsize="32"/> - <reg name="cycleh" bitsize="32"/> - <reg name="timeh" bitsize="32"/> - <reg name="instreth" bitsize="32"/> - <reg name="hpmcounter3h" bitsize="32"/> - <reg name="hpmcounter4h" bitsize="32"/> - <reg name="hpmcounter5h" bitsize="32"/> - <reg name="hpmcounter6h" bitsize="32"/> - <reg name="hpmcounter7h" bitsize="32"/> - <reg name="hpmcounter8h" bitsize="32"/> - <reg name="hpmcounter9h" bitsize="32"/> - <reg name="hpmcounter10h" bitsize="32"/> - <reg name="hpmcounter11h" bitsize="32"/> - <reg name="hpmcounter12h" bitsize="32"/> - <reg name="hpmcounter13h" bitsize="32"/> - <reg name="hpmcounter14h" bitsize="32"/> - <reg name="hpmcounter15h" bitsize="32"/> - <reg name="hpmcounter16h" bitsize="32"/> - <reg name="hpmcounter17h" bitsize="32"/> - <reg name="hpmcounter18h" bitsize="32"/> - <reg name="hpmcounter19h" bitsize="32"/> - <reg name="hpmcounter20h" bitsize="32"/> - <reg name="hpmcounter21h" bitsize="32"/> - <reg name="hpmcounter22h" bitsize="32"/> - <reg name="hpmcounter23h" bitsize="32"/> - <reg name="hpmcounter24h" bitsize="32"/> - <reg name="hpmcounter25h" bitsize="32"/> - <reg name="hpmcounter26h" bitsize="32"/> - <reg name="hpmcounter27h" bitsize="32"/> - <reg name="hpmcounter28h" bitsize="32"/> - <reg name="hpmcounter29h" bitsize="32"/> - <reg name="hpmcounter30h" bitsize="32"/> - <reg name="hpmcounter31h" bitsize="32"/> - <reg name="sstatus" bitsize="32"/> - <reg name="sedeleg" bitsize="32"/> - <reg name="sideleg" bitsize="32"/> - <reg name="sie" bitsize="32"/> - <reg name="stvec" bitsize="32"/> - <reg name="scounteren" bitsize="32"/> - <reg name="sscratch" bitsize="32"/> - <reg name="sepc" bitsize="32"/> - <reg name="scause" bitsize="32"/> - <reg name="stval" bitsize="32"/> - <reg name="sip" bitsize="32"/> - <reg name="satp" bitsize="32"/> - <reg name="mvendorid" bitsize="32"/> - <reg name="marchid" bitsize="32"/> - <reg name="mimpid" bitsize="32"/> - <reg name="mhartid" bitsize="32"/> - <reg name="mstatus" bitsize="32"/> - <reg name="misa" bitsize="32"/> - <reg name="medeleg" bitsize="32"/> - <reg name="mideleg" bitsize="32"/> - <reg name="mie" bitsize="32"/> - <reg name="mtvec" bitsize="32"/> - <reg name="mcounteren" bitsize="32"/> - <reg name="mscratch" bitsize="32"/> - <reg name="mepc" bitsize="32"/> - <reg name="mcause" bitsize="32"/> - <reg name="mtval" bitsize="32"/> - <reg name="mip" bitsize="32"/> - <reg name="pmpcfg0" bitsize="32"/> - <reg name="pmpcfg1" bitsize="32"/> - <reg name="pmpcfg2" bitsize="32"/> - <reg name="pmpcfg3" bitsize="32"/> - <reg name="pmpaddr0" bitsize="32"/> - <reg name="pmpaddr1" bitsize="32"/> - <reg name="pmpaddr2" bitsize="32"/> - <reg name="pmpaddr3" bitsize="32"/> - <reg name="pmpaddr4" bitsize="32"/> - <reg name="pmpaddr5" bitsize="32"/> - <reg name="pmpaddr6" bitsize="32"/> - <reg name="pmpaddr7" bitsize="32"/> - <reg name="pmpaddr8" bitsize="32"/> - <reg name="pmpaddr9" bitsize="32"/> - <reg name="pmpaddr10" bitsize="32"/> - <reg name="pmpaddr11" bitsize="32"/> - <reg name="pmpaddr12" bitsize="32"/> - <reg name="pmpaddr13" bitsize="32"/> - <reg name="pmpaddr14" bitsize="32"/> - <reg name="pmpaddr15" bitsize="32"/> - <reg name="mcycle" bitsize="32"/> - <reg name="minstret" bitsize="32"/> - <reg name="mhpmcounter3" bitsize="32"/> - <reg name="mhpmcounter4" bitsize="32"/> - <reg name="mhpmcounter5" bitsize="32"/> - <reg name="mhpmcounter6" bitsize="32"/> - <reg name="mhpmcounter7" bitsize="32"/> - <reg name="mhpmcounter8" bitsize="32"/> - <reg name="mhpmcounter9" bitsize="32"/> - <reg name="mhpmcounter10" bitsize="32"/> - <reg name="mhpmcounter11" bitsize="32"/> - <reg name="mhpmcounter12" bitsize="32"/> - <reg name="mhpmcounter13" bitsize="32"/> - <reg name="mhpmcounter14" bitsize="32"/> - <reg name="mhpmcounter15" bitsize="32"/> - <reg name="mhpmcounter16" bitsize="32"/> - <reg name="mhpmcounter17" bitsize="32"/> - <reg name="mhpmcounter18" bitsize="32"/> - <reg name="mhpmcounter19" bitsize="32"/> - <reg name="mhpmcounter20" bitsize="32"/> - <reg name="mhpmcounter21" bitsize="32"/> - <reg name="mhpmcounter22" bitsize="32"/> - <reg name="mhpmcounter23" bitsize="32"/> - <reg name="mhpmcounter24" bitsize="32"/> - <reg name="mhpmcounter25" bitsize="32"/> - <reg name="mhpmcounter26" bitsize="32"/> - <reg name="mhpmcounter27" bitsize="32"/> - <reg name="mhpmcounter28" bitsize="32"/> - <reg name="mhpmcounter29" bitsize="32"/> - <reg name="mhpmcounter30" bitsize="32"/> - <reg name="mhpmcounter31" bitsize="32"/> - <reg name="mcycleh" bitsize="32"/> - <reg name="minstreth" bitsize="32"/> - <reg name="mhpmcounter3h" bitsize="32"/> - <reg name="mhpmcounter4h" bitsize="32"/> - <reg name="mhpmcounter5h" bitsize="32"/> - <reg name="mhpmcounter6h" bitsize="32"/> - <reg name="mhpmcounter7h" bitsize="32"/> - <reg name="mhpmcounter8h" bitsize="32"/> - <reg name="mhpmcounter9h" bitsize="32"/> - <reg name="mhpmcounter10h" bitsize="32"/> - <reg name="mhpmcounter11h" bitsize="32"/> - <reg name="mhpmcounter12h" bitsize="32"/> - <reg name="mhpmcounter13h" bitsize="32"/> - <reg name="mhpmcounter14h" bitsize="32"/> - <reg name="mhpmcounter15h" bitsize="32"/> - <reg name="mhpmcounter16h" bitsize="32"/> - <reg name="mhpmcounter17h" bitsize="32"/> - <reg name="mhpmcounter18h" bitsize="32"/> - <reg name="mhpmcounter19h" bitsize="32"/> - <reg name="mhpmcounter20h" bitsize="32"/> - <reg name="mhpmcounter21h" bitsize="32"/> - <reg name="mhpmcounter22h" bitsize="32"/> - <reg name="mhpmcounter23h" bitsize="32"/> - <reg name="mhpmcounter24h" bitsize="32"/> - <reg name="mhpmcounter25h" bitsize="32"/> - <reg name="mhpmcounter26h" bitsize="32"/> - <reg name="mhpmcounter27h" bitsize="32"/> - <reg name="mhpmcounter28h" bitsize="32"/> - <reg name="mhpmcounter29h" bitsize="32"/> - <reg name="mhpmcounter30h" bitsize="32"/> - <reg name="mhpmcounter31h" bitsize="32"/> - <reg name="mhpmevent3" bitsize="32"/> - <reg name="mhpmevent4" bitsize="32"/> - <reg name="mhpmevent5" bitsize="32"/> - <reg name="mhpmevent6" bitsize="32"/> - <reg name="mhpmevent7" bitsize="32"/> - <reg name="mhpmevent8" bitsize="32"/> - <reg name="mhpmevent9" bitsize="32"/> - <reg name="mhpmevent10" bitsize="32"/> - <reg name="mhpmevent11" bitsize="32"/> - <reg name="mhpmevent12" bitsize="32"/> - <reg name="mhpmevent13" bitsize="32"/> - <reg name="mhpmevent14" bitsize="32"/> - <reg name="mhpmevent15" bitsize="32"/> - <reg name="mhpmevent16" bitsize="32"/> - <reg name="mhpmevent17" bitsize="32"/> - <reg name="mhpmevent18" bitsize="32"/> - <reg name="mhpmevent19" bitsize="32"/> - <reg name="mhpmevent20" bitsize="32"/> - <reg name="mhpmevent21" bitsize="32"/> - <reg name="mhpmevent22" bitsize="32"/> - <reg name="mhpmevent23" bitsize="32"/> - <reg name="mhpmevent24" bitsize="32"/> - <reg name="mhpmevent25" bitsize="32"/> - <reg name="mhpmevent26" bitsize="32"/> - <reg name="mhpmevent27" bitsize="32"/> - <reg name="mhpmevent28" bitsize="32"/> - <reg name="mhpmevent29" bitsize="32"/> - <reg name="mhpmevent30" bitsize="32"/> - <reg name="mhpmevent31" bitsize="32"/> - <reg name="tselect" bitsize="32"/> - <reg name="tdata1" bitsize="32"/> - <reg name="tdata2" bitsize="32"/> - <reg name="tdata3" bitsize="32"/> - <reg name="dcsr" bitsize="32"/> - <reg name="dpc" bitsize="32"/> - <reg name="dscratch" bitsize="32"/> - <reg name="hstatus" bitsize="32"/> - <reg name="hedeleg" bitsize="32"/> - <reg name="hideleg" bitsize="32"/> - <reg name="hie" bitsize="32"/> - <reg name="htvec" bitsize="32"/> - <reg name="hscratch" bitsize="32"/> - <reg name="hepc" bitsize="32"/> - <reg name="hcause" bitsize="32"/> - <reg name="hbadaddr" bitsize="32"/> - <reg name="hip" bitsize="32"/> - <reg name="mbase" bitsize="32"/> - <reg name="mbound" bitsize="32"/> - <reg name="mibase" bitsize="32"/> - <reg name="mibound" bitsize="32"/> - <reg name="mdbase" bitsize="32"/> - <reg name="mdbound" bitsize="32"/> - <reg name="mucounteren" bitsize="32"/> - <reg name="mscounteren" bitsize="32"/> - <reg name="mhcounteren" bitsize="32"/> -</feature> diff -Nru gdb-9.1/gdb/features/riscv/32bit-fpu.xml gdb-10.2/gdb/features/riscv/32bit-fpu.xml --- gdb-9.1/gdb/features/riscv/32bit-fpu.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/riscv/32bit-fpu.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2018-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2018-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/riscv/64bit-cpu.xml gdb-10.2/gdb/features/riscv/64bit-cpu.xml --- gdb-9.1/gdb/features/riscv/64bit-cpu.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/riscv/64bit-cpu.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2018-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2018-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/riscv/64bit-csr.c gdb-10.2/gdb/features/riscv/64bit-csr.c --- gdb-9.1/gdb/features/riscv/64bit-csr.c 2019-09-20 21:58:17.000000000 +0000 +++ gdb-10.2/gdb/features/riscv/64bit-csr.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,253 +0,0 @@ -/* THIS FILE IS GENERATED. -*- buffer-read-only: t -*- vi:set ro: - Original: 64bit-csr.xml */ - -#include "gdbsupport/tdesc.h" - -static int -create_feature_riscv_64bit_csr (struct target_desc *result, long regnum) -{ - struct tdesc_feature *feature; - - feature = tdesc_create_feature (result, "org.gnu.gdb.riscv.csr"); - tdesc_create_reg (feature, "ustatus", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "uie", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "utvec", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "uscratch", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "uepc", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "ucause", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "utval", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "uip", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "fflags", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "frm", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "fcsr", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "cycle", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "time", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "instret", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "hpmcounter3", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "hpmcounter4", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "hpmcounter5", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "hpmcounter6", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "hpmcounter7", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "hpmcounter8", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "hpmcounter9", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "hpmcounter10", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "hpmcounter11", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "hpmcounter12", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "hpmcounter13", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "hpmcounter14", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "hpmcounter15", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "hpmcounter16", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "hpmcounter17", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "hpmcounter18", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "hpmcounter19", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "hpmcounter20", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "hpmcounter21", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "hpmcounter22", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "hpmcounter23", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "hpmcounter24", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "hpmcounter25", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "hpmcounter26", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "hpmcounter27", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "hpmcounter28", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "hpmcounter29", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "hpmcounter30", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "hpmcounter31", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "cycleh", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "timeh", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "instreth", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "hpmcounter3h", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "hpmcounter4h", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "hpmcounter5h", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "hpmcounter6h", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "hpmcounter7h", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "hpmcounter8h", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "hpmcounter9h", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "hpmcounter10h", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "hpmcounter11h", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "hpmcounter12h", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "hpmcounter13h", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "hpmcounter14h", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "hpmcounter15h", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "hpmcounter16h", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "hpmcounter17h", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "hpmcounter18h", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "hpmcounter19h", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "hpmcounter20h", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "hpmcounter21h", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "hpmcounter22h", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "hpmcounter23h", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "hpmcounter24h", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "hpmcounter25h", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "hpmcounter26h", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "hpmcounter27h", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "hpmcounter28h", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "hpmcounter29h", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "hpmcounter30h", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "hpmcounter31h", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "sstatus", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "sedeleg", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "sideleg", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "sie", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "stvec", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "scounteren", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "sscratch", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "sepc", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "scause", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "stval", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "sip", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "satp", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mvendorid", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "marchid", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mimpid", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhartid", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mstatus", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "misa", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "medeleg", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mideleg", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mie", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mtvec", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mcounteren", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mscratch", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mepc", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mcause", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mtval", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mip", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "pmpcfg0", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "pmpcfg1", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "pmpcfg2", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "pmpcfg3", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "pmpaddr0", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "pmpaddr1", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "pmpaddr2", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "pmpaddr3", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "pmpaddr4", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "pmpaddr5", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "pmpaddr6", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "pmpaddr7", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "pmpaddr8", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "pmpaddr9", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "pmpaddr10", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "pmpaddr11", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "pmpaddr12", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "pmpaddr13", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "pmpaddr14", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "pmpaddr15", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mcycle", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "minstret", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmcounter3", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmcounter4", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmcounter5", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmcounter6", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmcounter7", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmcounter8", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmcounter9", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmcounter10", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmcounter11", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmcounter12", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmcounter13", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmcounter14", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmcounter15", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmcounter16", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmcounter17", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmcounter18", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmcounter19", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmcounter20", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmcounter21", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmcounter22", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmcounter23", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmcounter24", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmcounter25", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmcounter26", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmcounter27", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmcounter28", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmcounter29", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmcounter30", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmcounter31", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mcycleh", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "minstreth", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmcounter3h", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmcounter4h", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmcounter5h", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmcounter6h", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmcounter7h", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmcounter8h", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmcounter9h", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmcounter10h", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmcounter11h", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmcounter12h", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmcounter13h", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmcounter14h", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmcounter15h", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmcounter16h", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmcounter17h", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmcounter18h", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmcounter19h", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmcounter20h", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmcounter21h", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmcounter22h", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmcounter23h", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmcounter24h", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmcounter25h", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmcounter26h", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmcounter27h", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmcounter28h", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmcounter29h", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmcounter30h", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmcounter31h", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmevent3", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmevent4", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmevent5", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmevent6", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmevent7", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmevent8", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmevent9", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmevent10", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmevent11", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmevent12", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmevent13", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmevent14", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmevent15", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmevent16", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmevent17", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmevent18", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmevent19", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmevent20", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmevent21", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmevent22", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmevent23", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmevent24", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmevent25", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmevent26", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmevent27", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmevent28", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmevent29", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmevent30", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhpmevent31", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "tselect", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "tdata1", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "tdata2", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "tdata3", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "dcsr", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "dpc", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "dscratch", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "hstatus", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "hedeleg", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "hideleg", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "hie", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "htvec", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "hscratch", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "hepc", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "hcause", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "hbadaddr", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "hip", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mbase", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mbound", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mibase", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mibound", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mdbase", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mdbound", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mucounteren", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mscounteren", regnum++, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "mhcounteren", regnum++, 1, NULL, 64, "int"); - return regnum; -} diff -Nru gdb-9.1/gdb/features/riscv/64bit-csr.xml gdb-10.2/gdb/features/riscv/64bit-csr.xml --- gdb-9.1/gdb/features/riscv/64bit-csr.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/riscv/64bit-csr.xml 1970-01-01 00:00:00.000000000 +0000 @@ -1,250 +0,0 @@ -<?xml version="1.0"?> -<!-- Copyright (C) 2018-2020 Free Software Foundation, Inc. - - Copying and distribution of this file, with or without modification, - are permitted in any medium without royalty provided the copyright - notice and this notice are preserved. --> - -<!DOCTYPE feature SYSTEM "gdb-target.dtd"> -<feature name="org.gnu.gdb.riscv.csr"> - <reg name="ustatus" bitsize="64"/> - <reg name="uie" bitsize="64"/> - <reg name="utvec" bitsize="64"/> - <reg name="uscratch" bitsize="64"/> - <reg name="uepc" bitsize="64"/> - <reg name="ucause" bitsize="64"/> - <reg name="utval" bitsize="64"/> - <reg name="uip" bitsize="64"/> - <reg name="fflags" bitsize="64"/> - <reg name="frm" bitsize="64"/> - <reg name="fcsr" bitsize="64"/> - <reg name="cycle" bitsize="64"/> - <reg name="time" bitsize="64"/> - <reg name="instret" bitsize="64"/> - <reg name="hpmcounter3" bitsize="64"/> - <reg name="hpmcounter4" bitsize="64"/> - <reg name="hpmcounter5" bitsize="64"/> - <reg name="hpmcounter6" bitsize="64"/> - <reg name="hpmcounter7" bitsize="64"/> - <reg name="hpmcounter8" bitsize="64"/> - <reg name="hpmcounter9" bitsize="64"/> - <reg name="hpmcounter10" bitsize="64"/> - <reg name="hpmcounter11" bitsize="64"/> - <reg name="hpmcounter12" bitsize="64"/> - <reg name="hpmcounter13" bitsize="64"/> - <reg name="hpmcounter14" bitsize="64"/> - <reg name="hpmcounter15" bitsize="64"/> - <reg name="hpmcounter16" bitsize="64"/> - <reg name="hpmcounter17" bitsize="64"/> - <reg name="hpmcounter18" bitsize="64"/> - <reg name="hpmcounter19" bitsize="64"/> - <reg name="hpmcounter20" bitsize="64"/> - <reg name="hpmcounter21" bitsize="64"/> - <reg name="hpmcounter22" bitsize="64"/> - <reg name="hpmcounter23" bitsize="64"/> - <reg name="hpmcounter24" bitsize="64"/> - <reg name="hpmcounter25" bitsize="64"/> - <reg name="hpmcounter26" bitsize="64"/> - <reg name="hpmcounter27" bitsize="64"/> - <reg name="hpmcounter28" bitsize="64"/> - <reg name="hpmcounter29" bitsize="64"/> - <reg name="hpmcounter30" bitsize="64"/> - <reg name="hpmcounter31" bitsize="64"/> - <reg name="cycleh" bitsize="64"/> - <reg name="timeh" bitsize="64"/> - <reg name="instreth" bitsize="64"/> - <reg name="hpmcounter3h" bitsize="64"/> - <reg name="hpmcounter4h" bitsize="64"/> - <reg name="hpmcounter5h" bitsize="64"/> - <reg name="hpmcounter6h" bitsize="64"/> - <reg name="hpmcounter7h" bitsize="64"/> - <reg name="hpmcounter8h" bitsize="64"/> - <reg name="hpmcounter9h" bitsize="64"/> - <reg name="hpmcounter10h" bitsize="64"/> - <reg name="hpmcounter11h" bitsize="64"/> - <reg name="hpmcounter12h" bitsize="64"/> - <reg name="hpmcounter13h" bitsize="64"/> - <reg name="hpmcounter14h" bitsize="64"/> - <reg name="hpmcounter15h" bitsize="64"/> - <reg name="hpmcounter16h" bitsize="64"/> - <reg name="hpmcounter17h" bitsize="64"/> - <reg name="hpmcounter18h" bitsize="64"/> - <reg name="hpmcounter19h" bitsize="64"/> - <reg name="hpmcounter20h" bitsize="64"/> - <reg name="hpmcounter21h" bitsize="64"/> - <reg name="hpmcounter22h" bitsize="64"/> - <reg name="hpmcounter23h" bitsize="64"/> - <reg name="hpmcounter24h" bitsize="64"/> - <reg name="hpmcounter25h" bitsize="64"/> - <reg name="hpmcounter26h" bitsize="64"/> - <reg name="hpmcounter27h" bitsize="64"/> - <reg name="hpmcounter28h" bitsize="64"/> - <reg name="hpmcounter29h" bitsize="64"/> - <reg name="hpmcounter30h" bitsize="64"/> - <reg name="hpmcounter31h" bitsize="64"/> - <reg name="sstatus" bitsize="64"/> - <reg name="sedeleg" bitsize="64"/> - <reg name="sideleg" bitsize="64"/> - <reg name="sie" bitsize="64"/> - <reg name="stvec" bitsize="64"/> - <reg name="scounteren" bitsize="64"/> - <reg name="sscratch" bitsize="64"/> - <reg name="sepc" bitsize="64"/> - <reg name="scause" bitsize="64"/> - <reg name="stval" bitsize="64"/> - <reg name="sip" bitsize="64"/> - <reg name="satp" bitsize="64"/> - <reg name="mvendorid" bitsize="64"/> - <reg name="marchid" bitsize="64"/> - <reg name="mimpid" bitsize="64"/> - <reg name="mhartid" bitsize="64"/> - <reg name="mstatus" bitsize="64"/> - <reg name="misa" bitsize="64"/> - <reg name="medeleg" bitsize="64"/> - <reg name="mideleg" bitsize="64"/> - <reg name="mie" bitsize="64"/> - <reg name="mtvec" bitsize="64"/> - <reg name="mcounteren" bitsize="64"/> - <reg name="mscratch" bitsize="64"/> - <reg name="mepc" bitsize="64"/> - <reg name="mcause" bitsize="64"/> - <reg name="mtval" bitsize="64"/> - <reg name="mip" bitsize="64"/> - <reg name="pmpcfg0" bitsize="64"/> - <reg name="pmpcfg1" bitsize="64"/> - <reg name="pmpcfg2" bitsize="64"/> - <reg name="pmpcfg3" bitsize="64"/> - <reg name="pmpaddr0" bitsize="64"/> - <reg name="pmpaddr1" bitsize="64"/> - <reg name="pmpaddr2" bitsize="64"/> - <reg name="pmpaddr3" bitsize="64"/> - <reg name="pmpaddr4" bitsize="64"/> - <reg name="pmpaddr5" bitsize="64"/> - <reg name="pmpaddr6" bitsize="64"/> - <reg name="pmpaddr7" bitsize="64"/> - <reg name="pmpaddr8" bitsize="64"/> - <reg name="pmpaddr9" bitsize="64"/> - <reg name="pmpaddr10" bitsize="64"/> - <reg name="pmpaddr11" bitsize="64"/> - <reg name="pmpaddr12" bitsize="64"/> - <reg name="pmpaddr13" bitsize="64"/> - <reg name="pmpaddr14" bitsize="64"/> - <reg name="pmpaddr15" bitsize="64"/> - <reg name="mcycle" bitsize="64"/> - <reg name="minstret" bitsize="64"/> - <reg name="mhpmcounter3" bitsize="64"/> - <reg name="mhpmcounter4" bitsize="64"/> - <reg name="mhpmcounter5" bitsize="64"/> - <reg name="mhpmcounter6" bitsize="64"/> - <reg name="mhpmcounter7" bitsize="64"/> - <reg name="mhpmcounter8" bitsize="64"/> - <reg name="mhpmcounter9" bitsize="64"/> - <reg name="mhpmcounter10" bitsize="64"/> - <reg name="mhpmcounter11" bitsize="64"/> - <reg name="mhpmcounter12" bitsize="64"/> - <reg name="mhpmcounter13" bitsize="64"/> - <reg name="mhpmcounter14" bitsize="64"/> - <reg name="mhpmcounter15" bitsize="64"/> - <reg name="mhpmcounter16" bitsize="64"/> - <reg name="mhpmcounter17" bitsize="64"/> - <reg name="mhpmcounter18" bitsize="64"/> - <reg name="mhpmcounter19" bitsize="64"/> - <reg name="mhpmcounter20" bitsize="64"/> - <reg name="mhpmcounter21" bitsize="64"/> - <reg name="mhpmcounter22" bitsize="64"/> - <reg name="mhpmcounter23" bitsize="64"/> - <reg name="mhpmcounter24" bitsize="64"/> - <reg name="mhpmcounter25" bitsize="64"/> - <reg name="mhpmcounter26" bitsize="64"/> - <reg name="mhpmcounter27" bitsize="64"/> - <reg name="mhpmcounter28" bitsize="64"/> - <reg name="mhpmcounter29" bitsize="64"/> - <reg name="mhpmcounter30" bitsize="64"/> - <reg name="mhpmcounter31" bitsize="64"/> - <reg name="mcycleh" bitsize="64"/> - <reg name="minstreth" bitsize="64"/> - <reg name="mhpmcounter3h" bitsize="64"/> - <reg name="mhpmcounter4h" bitsize="64"/> - <reg name="mhpmcounter5h" bitsize="64"/> - <reg name="mhpmcounter6h" bitsize="64"/> - <reg name="mhpmcounter7h" bitsize="64"/> - <reg name="mhpmcounter8h" bitsize="64"/> - <reg name="mhpmcounter9h" bitsize="64"/> - <reg name="mhpmcounter10h" bitsize="64"/> - <reg name="mhpmcounter11h" bitsize="64"/> - <reg name="mhpmcounter12h" bitsize="64"/> - <reg name="mhpmcounter13h" bitsize="64"/> - <reg name="mhpmcounter14h" bitsize="64"/> - <reg name="mhpmcounter15h" bitsize="64"/> - <reg name="mhpmcounter16h" bitsize="64"/> - <reg name="mhpmcounter17h" bitsize="64"/> - <reg name="mhpmcounter18h" bitsize="64"/> - <reg name="mhpmcounter19h" bitsize="64"/> - <reg name="mhpmcounter20h" bitsize="64"/> - <reg name="mhpmcounter21h" bitsize="64"/> - <reg name="mhpmcounter22h" bitsize="64"/> - <reg name="mhpmcounter23h" bitsize="64"/> - <reg name="mhpmcounter24h" bitsize="64"/> - <reg name="mhpmcounter25h" bitsize="64"/> - <reg name="mhpmcounter26h" bitsize="64"/> - <reg name="mhpmcounter27h" bitsize="64"/> - <reg name="mhpmcounter28h" bitsize="64"/> - <reg name="mhpmcounter29h" bitsize="64"/> - <reg name="mhpmcounter30h" bitsize="64"/> - <reg name="mhpmcounter31h" bitsize="64"/> - <reg name="mhpmevent3" bitsize="64"/> - <reg name="mhpmevent4" bitsize="64"/> - <reg name="mhpmevent5" bitsize="64"/> - <reg name="mhpmevent6" bitsize="64"/> - <reg name="mhpmevent7" bitsize="64"/> - <reg name="mhpmevent8" bitsize="64"/> - <reg name="mhpmevent9" bitsize="64"/> - <reg name="mhpmevent10" bitsize="64"/> - <reg name="mhpmevent11" bitsize="64"/> - <reg name="mhpmevent12" bitsize="64"/> - <reg name="mhpmevent13" bitsize="64"/> - <reg name="mhpmevent14" bitsize="64"/> - <reg name="mhpmevent15" bitsize="64"/> - <reg name="mhpmevent16" bitsize="64"/> - <reg name="mhpmevent17" bitsize="64"/> - <reg name="mhpmevent18" bitsize="64"/> - <reg name="mhpmevent19" bitsize="64"/> - <reg name="mhpmevent20" bitsize="64"/> - <reg name="mhpmevent21" bitsize="64"/> - <reg name="mhpmevent22" bitsize="64"/> - <reg name="mhpmevent23" bitsize="64"/> - <reg name="mhpmevent24" bitsize="64"/> - <reg name="mhpmevent25" bitsize="64"/> - <reg name="mhpmevent26" bitsize="64"/> - <reg name="mhpmevent27" bitsize="64"/> - <reg name="mhpmevent28" bitsize="64"/> - <reg name="mhpmevent29" bitsize="64"/> - <reg name="mhpmevent30" bitsize="64"/> - <reg name="mhpmevent31" bitsize="64"/> - <reg name="tselect" bitsize="64"/> - <reg name="tdata1" bitsize="64"/> - <reg name="tdata2" bitsize="64"/> - <reg name="tdata3" bitsize="64"/> - <reg name="dcsr" bitsize="64"/> - <reg name="dpc" bitsize="64"/> - <reg name="dscratch" bitsize="64"/> - <reg name="hstatus" bitsize="64"/> - <reg name="hedeleg" bitsize="64"/> - <reg name="hideleg" bitsize="64"/> - <reg name="hie" bitsize="64"/> - <reg name="htvec" bitsize="64"/> - <reg name="hscratch" bitsize="64"/> - <reg name="hepc" bitsize="64"/> - <reg name="hcause" bitsize="64"/> - <reg name="hbadaddr" bitsize="64"/> - <reg name="hip" bitsize="64"/> - <reg name="mbase" bitsize="64"/> - <reg name="mbound" bitsize="64"/> - <reg name="mibase" bitsize="64"/> - <reg name="mibound" bitsize="64"/> - <reg name="mdbase" bitsize="64"/> - <reg name="mdbound" bitsize="64"/> - <reg name="mucounteren" bitsize="64"/> - <reg name="mscounteren" bitsize="64"/> - <reg name="mhcounteren" bitsize="64"/> -</feature> diff -Nru gdb-9.1/gdb/features/riscv/64bit-fpu.xml gdb-10.2/gdb/features/riscv/64bit-fpu.xml --- gdb-9.1/gdb/features/riscv/64bit-fpu.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/riscv/64bit-fpu.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2018-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2018-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/riscv/rebuild-csr-xml.sh gdb-10.2/gdb/features/riscv/rebuild-csr-xml.sh --- gdb-9.1/gdb/features/riscv/rebuild-csr-xml.sh 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/riscv/rebuild-csr-xml.sh 1970-01-01 00:00:00.000000000 +0000 @@ -1,29 +0,0 @@ -#! /bin/bash - -RISCV_OPC_FILE=$1 -RISCV_FEATURE_DIR=$2 - -function gen_csr_xml () -{ - bitsize=$1 - - cat <<EOF -<?xml version="1.0"?> -<!-- Copyright (C) 2018-2020 Free Software Foundation, Inc. - - Copying and distribution of this file, with or without modification, - are permitted in any medium without royalty provided the copyright - notice and this notice are preserved. --> - -<!DOCTYPE feature SYSTEM "gdb-target.dtd"> -<feature name="org.gnu.gdb.riscv.csr"> -EOF - - grep "^DECLARE_CSR(" ${RISCV_OPC_FILE} \ - | sed -e "s!DECLARE_CSR(\(.*\), .*! <reg name=\"\1\" bitsize=\"$bitsize\"/>!" - - echo "</feature>" -} - -gen_csr_xml 32 > ${RISCV_FEATURE_DIR}/32bit-csr.xml -gen_csr_xml 64 > ${RISCV_FEATURE_DIR}/64bit-csr.xml diff -Nru gdb-9.1/gdb/features/rs6000/power64-core.xml gdb-10.2/gdb/features/rs6000/power64-core.xml --- gdb-9.1/gdb/features/rs6000/power64-core.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/rs6000/power64-core.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2007-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2007-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/rs6000/power64-htm-core.xml gdb-10.2/gdb/features/rs6000/power64-htm-core.xml --- gdb-9.1/gdb/features/rs6000/power64-htm-core.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/rs6000/power64-htm-core.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2018-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2018-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/rs6000/power64-linux.xml gdb-10.2/gdb/features/rs6000/power64-linux.xml --- gdb-9.1/gdb/features/rs6000/power64-linux.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/rs6000/power64-linux.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2007-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2007-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/rs6000/power-altivec.xml gdb-10.2/gdb/features/rs6000/power-altivec.xml --- gdb-9.1/gdb/features/rs6000/power-altivec.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/rs6000/power-altivec.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2007-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2007-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/rs6000/power-core.xml gdb-10.2/gdb/features/rs6000/power-core.xml --- gdb-9.1/gdb/features/rs6000/power-core.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/rs6000/power-core.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2007-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2007-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/rs6000/power-dscr.xml gdb-10.2/gdb/features/rs6000/power-dscr.xml --- gdb-9.1/gdb/features/rs6000/power-dscr.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/rs6000/power-dscr.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2018-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2018-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/rs6000/power-ebb.xml gdb-10.2/gdb/features/rs6000/power-ebb.xml --- gdb-9.1/gdb/features/rs6000/power-ebb.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/rs6000/power-ebb.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2018-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2018-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/rs6000/power-fpu-isa205.xml gdb-10.2/gdb/features/rs6000/power-fpu-isa205.xml --- gdb-9.1/gdb/features/rs6000/power-fpu-isa205.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/rs6000/power-fpu-isa205.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2007-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2007-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/rs6000/power-fpu.xml gdb-10.2/gdb/features/rs6000/power-fpu.xml --- gdb-9.1/gdb/features/rs6000/power-fpu.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/rs6000/power-fpu.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2007-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2007-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/rs6000/power-htm-altivec.xml gdb-10.2/gdb/features/rs6000/power-htm-altivec.xml --- gdb-9.1/gdb/features/rs6000/power-htm-altivec.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/rs6000/power-htm-altivec.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2018-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2018-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/rs6000/power-htm-core.xml gdb-10.2/gdb/features/rs6000/power-htm-core.xml --- gdb-9.1/gdb/features/rs6000/power-htm-core.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/rs6000/power-htm-core.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2018-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2018-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/rs6000/power-htm-dscr.xml gdb-10.2/gdb/features/rs6000/power-htm-dscr.xml --- gdb-9.1/gdb/features/rs6000/power-htm-dscr.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/rs6000/power-htm-dscr.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2018-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2018-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/rs6000/power-htm-fpu.xml gdb-10.2/gdb/features/rs6000/power-htm-fpu.xml --- gdb-9.1/gdb/features/rs6000/power-htm-fpu.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/rs6000/power-htm-fpu.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2018-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2018-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/rs6000/power-htm-ppr.xml gdb-10.2/gdb/features/rs6000/power-htm-ppr.xml --- gdb-9.1/gdb/features/rs6000/power-htm-ppr.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/rs6000/power-htm-ppr.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2018-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2018-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/rs6000/power-htm-spr.xml gdb-10.2/gdb/features/rs6000/power-htm-spr.xml --- gdb-9.1/gdb/features/rs6000/power-htm-spr.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/rs6000/power-htm-spr.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2018-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2018-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/rs6000/power-htm-tar.xml gdb-10.2/gdb/features/rs6000/power-htm-tar.xml --- gdb-9.1/gdb/features/rs6000/power-htm-tar.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/rs6000/power-htm-tar.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2018-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2018-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/rs6000/power-htm-vsx.xml gdb-10.2/gdb/features/rs6000/power-htm-vsx.xml --- gdb-9.1/gdb/features/rs6000/power-htm-vsx.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/rs6000/power-htm-vsx.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2018-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2018-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/rs6000/power-linux-pmu.xml gdb-10.2/gdb/features/rs6000/power-linux-pmu.xml --- gdb-9.1/gdb/features/rs6000/power-linux-pmu.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/rs6000/power-linux-pmu.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2018-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2018-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/rs6000/power-linux.xml gdb-10.2/gdb/features/rs6000/power-linux.xml --- gdb-9.1/gdb/features/rs6000/power-linux.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/rs6000/power-linux.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2007-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2007-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/rs6000/power-oea.xml gdb-10.2/gdb/features/rs6000/power-oea.xml --- gdb-9.1/gdb/features/rs6000/power-oea.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/rs6000/power-oea.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2007-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2007-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/rs6000/powerpc-32l.xml gdb-10.2/gdb/features/rs6000/powerpc-32l.xml --- gdb-9.1/gdb/features/rs6000/powerpc-32l.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/rs6000/powerpc-32l.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2008-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2008-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/rs6000/powerpc-32.xml gdb-10.2/gdb/features/rs6000/powerpc-32.xml --- gdb-9.1/gdb/features/rs6000/powerpc-32.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/rs6000/powerpc-32.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2007-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2007-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/rs6000/powerpc-403gc.xml gdb-10.2/gdb/features/rs6000/powerpc-403gc.xml --- gdb-9.1/gdb/features/rs6000/powerpc-403gc.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/rs6000/powerpc-403gc.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2007-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2007-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/rs6000/powerpc-403.xml gdb-10.2/gdb/features/rs6000/powerpc-403.xml --- gdb-9.1/gdb/features/rs6000/powerpc-403.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/rs6000/powerpc-403.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2007-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2007-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/rs6000/powerpc-405.xml gdb-10.2/gdb/features/rs6000/powerpc-405.xml --- gdb-9.1/gdb/features/rs6000/powerpc-405.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/rs6000/powerpc-405.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2009-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2009-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/rs6000/powerpc-505.xml gdb-10.2/gdb/features/rs6000/powerpc-505.xml --- gdb-9.1/gdb/features/rs6000/powerpc-505.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/rs6000/powerpc-505.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2007-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2007-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/rs6000/powerpc-601.xml gdb-10.2/gdb/features/rs6000/powerpc-601.xml --- gdb-9.1/gdb/features/rs6000/powerpc-601.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/rs6000/powerpc-601.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2007-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2007-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/rs6000/powerpc-602.xml gdb-10.2/gdb/features/rs6000/powerpc-602.xml --- gdb-9.1/gdb/features/rs6000/powerpc-602.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/rs6000/powerpc-602.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2007-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2007-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/rs6000/powerpc-603.xml gdb-10.2/gdb/features/rs6000/powerpc-603.xml --- gdb-9.1/gdb/features/rs6000/powerpc-603.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/rs6000/powerpc-603.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2007-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2007-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/rs6000/powerpc-604.xml gdb-10.2/gdb/features/rs6000/powerpc-604.xml --- gdb-9.1/gdb/features/rs6000/powerpc-604.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/rs6000/powerpc-604.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2007-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2007-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/rs6000/powerpc-64l.xml gdb-10.2/gdb/features/rs6000/powerpc-64l.xml --- gdb-9.1/gdb/features/rs6000/powerpc-64l.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/rs6000/powerpc-64l.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2008-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2008-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/rs6000/powerpc-64.xml gdb-10.2/gdb/features/rs6000/powerpc-64.xml --- gdb-9.1/gdb/features/rs6000/powerpc-64.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/rs6000/powerpc-64.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2007-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2007-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/rs6000/powerpc-7400.xml gdb-10.2/gdb/features/rs6000/powerpc-7400.xml --- gdb-9.1/gdb/features/rs6000/powerpc-7400.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/rs6000/powerpc-7400.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2007-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2007-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/rs6000/powerpc-750.xml gdb-10.2/gdb/features/rs6000/powerpc-750.xml --- gdb-9.1/gdb/features/rs6000/powerpc-750.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/rs6000/powerpc-750.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2007-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2007-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/rs6000/powerpc-860.xml gdb-10.2/gdb/features/rs6000/powerpc-860.xml --- gdb-9.1/gdb/features/rs6000/powerpc-860.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/rs6000/powerpc-860.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2007-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2007-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/rs6000/powerpc-altivec32l.xml gdb-10.2/gdb/features/rs6000/powerpc-altivec32l.xml --- gdb-9.1/gdb/features/rs6000/powerpc-altivec32l.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/rs6000/powerpc-altivec32l.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2008-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2008-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/rs6000/powerpc-altivec32.xml gdb-10.2/gdb/features/rs6000/powerpc-altivec32.xml --- gdb-9.1/gdb/features/rs6000/powerpc-altivec32.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/rs6000/powerpc-altivec32.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2008-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2008-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/rs6000/powerpc-altivec64l.xml gdb-10.2/gdb/features/rs6000/powerpc-altivec64l.xml --- gdb-9.1/gdb/features/rs6000/powerpc-altivec64l.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/rs6000/powerpc-altivec64l.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2008-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2008-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/rs6000/powerpc-altivec64.xml gdb-10.2/gdb/features/rs6000/powerpc-altivec64.xml --- gdb-9.1/gdb/features/rs6000/powerpc-altivec64.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/rs6000/powerpc-altivec64.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2008-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2008-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/rs6000/powerpc-e500l.xml gdb-10.2/gdb/features/rs6000/powerpc-e500l.xml --- gdb-9.1/gdb/features/rs6000/powerpc-e500l.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/rs6000/powerpc-e500l.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2008-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2008-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/rs6000/powerpc-e500.xml gdb-10.2/gdb/features/rs6000/powerpc-e500.xml --- gdb-9.1/gdb/features/rs6000/powerpc-e500.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/rs6000/powerpc-e500.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2007-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2007-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/rs6000/powerpc-isa205-32l.xml gdb-10.2/gdb/features/rs6000/powerpc-isa205-32l.xml --- gdb-9.1/gdb/features/rs6000/powerpc-isa205-32l.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/rs6000/powerpc-isa205-32l.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2008-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2008-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/rs6000/powerpc-isa205-64l.xml gdb-10.2/gdb/features/rs6000/powerpc-isa205-64l.xml --- gdb-9.1/gdb/features/rs6000/powerpc-isa205-64l.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/rs6000/powerpc-isa205-64l.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2008-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2008-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/rs6000/powerpc-isa205-altivec32l.xml gdb-10.2/gdb/features/rs6000/powerpc-isa205-altivec32l.xml --- gdb-9.1/gdb/features/rs6000/powerpc-isa205-altivec32l.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/rs6000/powerpc-isa205-altivec32l.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2008-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2008-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/rs6000/powerpc-isa205-altivec64l.xml gdb-10.2/gdb/features/rs6000/powerpc-isa205-altivec64l.xml --- gdb-9.1/gdb/features/rs6000/powerpc-isa205-altivec64l.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/rs6000/powerpc-isa205-altivec64l.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2008-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2008-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/rs6000/powerpc-isa205-ppr-dscr-vsx32l.xml gdb-10.2/gdb/features/rs6000/powerpc-isa205-ppr-dscr-vsx32l.xml --- gdb-9.1/gdb/features/rs6000/powerpc-isa205-ppr-dscr-vsx32l.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/rs6000/powerpc-isa205-ppr-dscr-vsx32l.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2018-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2018-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/rs6000/powerpc-isa205-ppr-dscr-vsx64l.xml gdb-10.2/gdb/features/rs6000/powerpc-isa205-ppr-dscr-vsx64l.xml --- gdb-9.1/gdb/features/rs6000/powerpc-isa205-ppr-dscr-vsx64l.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/rs6000/powerpc-isa205-ppr-dscr-vsx64l.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2018-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2018-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/rs6000/powerpc-isa205-vsx32l.xml gdb-10.2/gdb/features/rs6000/powerpc-isa205-vsx32l.xml --- gdb-9.1/gdb/features/rs6000/powerpc-isa205-vsx32l.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/rs6000/powerpc-isa205-vsx32l.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2008-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2008-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/rs6000/powerpc-isa205-vsx64l.xml gdb-10.2/gdb/features/rs6000/powerpc-isa205-vsx64l.xml --- gdb-9.1/gdb/features/rs6000/powerpc-isa205-vsx64l.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/rs6000/powerpc-isa205-vsx64l.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2008-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2008-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/rs6000/powerpc-isa207-htm-vsx32l.xml gdb-10.2/gdb/features/rs6000/powerpc-isa207-htm-vsx32l.xml --- gdb-9.1/gdb/features/rs6000/powerpc-isa207-htm-vsx32l.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/rs6000/powerpc-isa207-htm-vsx32l.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2018-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2018-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/rs6000/powerpc-isa207-htm-vsx64l.xml gdb-10.2/gdb/features/rs6000/powerpc-isa207-htm-vsx64l.xml --- gdb-9.1/gdb/features/rs6000/powerpc-isa207-htm-vsx64l.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/rs6000/powerpc-isa207-htm-vsx64l.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2018-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2018-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/rs6000/powerpc-isa207-vsx32l.xml gdb-10.2/gdb/features/rs6000/powerpc-isa207-vsx32l.xml --- gdb-9.1/gdb/features/rs6000/powerpc-isa207-vsx32l.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/rs6000/powerpc-isa207-vsx32l.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2018-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2018-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/rs6000/powerpc-isa207-vsx64l.xml gdb-10.2/gdb/features/rs6000/powerpc-isa207-vsx64l.xml --- gdb-9.1/gdb/features/rs6000/powerpc-isa207-vsx64l.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/rs6000/powerpc-isa207-vsx64l.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2018-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2018-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/rs6000/powerpc-vsx32l.xml gdb-10.2/gdb/features/rs6000/powerpc-vsx32l.xml --- gdb-9.1/gdb/features/rs6000/powerpc-vsx32l.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/rs6000/powerpc-vsx32l.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2008-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2008-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/rs6000/powerpc-vsx32.xml gdb-10.2/gdb/features/rs6000/powerpc-vsx32.xml --- gdb-9.1/gdb/features/rs6000/powerpc-vsx32.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/rs6000/powerpc-vsx32.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2008-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2008-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/rs6000/powerpc-vsx64l.xml gdb-10.2/gdb/features/rs6000/powerpc-vsx64l.xml --- gdb-9.1/gdb/features/rs6000/powerpc-vsx64l.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/rs6000/powerpc-vsx64l.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2008-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2008-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/rs6000/powerpc-vsx64.xml gdb-10.2/gdb/features/rs6000/powerpc-vsx64.xml --- gdb-9.1/gdb/features/rs6000/powerpc-vsx64.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/rs6000/powerpc-vsx64.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2008-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2008-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/rs6000/power-ppr.xml gdb-10.2/gdb/features/rs6000/power-ppr.xml --- gdb-9.1/gdb/features/rs6000/power-ppr.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/rs6000/power-ppr.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2018-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2018-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/rs6000/power-spe.xml gdb-10.2/gdb/features/rs6000/power-spe.xml --- gdb-9.1/gdb/features/rs6000/power-spe.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/rs6000/power-spe.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2007-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2007-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/rs6000/power-tar.xml gdb-10.2/gdb/features/rs6000/power-tar.xml --- gdb-9.1/gdb/features/rs6000/power-tar.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/rs6000/power-tar.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2018-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2018-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/rs6000/power-vsx.xml gdb-10.2/gdb/features/rs6000/power-vsx.xml --- gdb-9.1/gdb/features/rs6000/power-vsx.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/rs6000/power-vsx.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2008-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2008-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/rs6000/rs6000.xml gdb-10.2/gdb/features/rs6000/rs6000.xml --- gdb-9.1/gdb/features/rs6000/rs6000.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/rs6000/rs6000.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2007-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2007-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/rx.xml gdb-10.2/gdb/features/rx.xml --- gdb-9.1/gdb/features/rx.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/rx.xml 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2019-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2019-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/s390-acr.xml gdb-10.2/gdb/features/s390-acr.xml --- gdb-9.1/gdb/features/s390-acr.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/s390-acr.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2010-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2010-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/s390-core32.xml gdb-10.2/gdb/features/s390-core32.xml --- gdb-9.1/gdb/features/s390-core32.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/s390-core32.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2010-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2010-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/s390-core64.xml gdb-10.2/gdb/features/s390-core64.xml --- gdb-9.1/gdb/features/s390-core64.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/s390-core64.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2010-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2010-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/s390-fpr.xml gdb-10.2/gdb/features/s390-fpr.xml --- gdb-9.1/gdb/features/s390-fpr.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/s390-fpr.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2010-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2010-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/s390-gsbc.xml gdb-10.2/gdb/features/s390-gsbc.xml --- gdb-9.1/gdb/features/s390-gsbc.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/s390-gsbc.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2017-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2017-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/s390-gs-linux64.xml gdb-10.2/gdb/features/s390-gs-linux64.xml --- gdb-9.1/gdb/features/s390-gs-linux64.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/s390-gs-linux64.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2017-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2017-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/s390-gs.xml gdb-10.2/gdb/features/s390-gs.xml --- gdb-9.1/gdb/features/s390-gs.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/s390-gs.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2017-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2017-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/s390-linux32v1.xml gdb-10.2/gdb/features/s390-linux32v1.xml --- gdb-9.1/gdb/features/s390-linux32v1.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/s390-linux32v1.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2010-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2010-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/s390-linux32v2.xml gdb-10.2/gdb/features/s390-linux32v2.xml --- gdb-9.1/gdb/features/s390-linux32v2.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/s390-linux32v2.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2010-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2010-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/s390-linux32.xml gdb-10.2/gdb/features/s390-linux32.xml --- gdb-9.1/gdb/features/s390-linux32.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/s390-linux32.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2010-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2010-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/s390-linux64v1.xml gdb-10.2/gdb/features/s390-linux64v1.xml --- gdb-9.1/gdb/features/s390-linux64v1.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/s390-linux64v1.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2010-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2010-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/s390-linux64v2.xml gdb-10.2/gdb/features/s390-linux64v2.xml --- gdb-9.1/gdb/features/s390-linux64v2.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/s390-linux64v2.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2010-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2010-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/s390-linux64.xml gdb-10.2/gdb/features/s390-linux64.xml --- gdb-9.1/gdb/features/s390-linux64.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/s390-linux64.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2010-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2010-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/s390-tdb.xml gdb-10.2/gdb/features/s390-tdb.xml --- gdb-9.1/gdb/features/s390-tdb.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/s390-tdb.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2010-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2010-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/s390-te-linux64.xml gdb-10.2/gdb/features/s390-te-linux64.xml --- gdb-9.1/gdb/features/s390-te-linux64.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/s390-te-linux64.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2010-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2010-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/s390-tevx-linux64.xml gdb-10.2/gdb/features/s390-tevx-linux64.xml --- gdb-9.1/gdb/features/s390-tevx-linux64.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/s390-tevx-linux64.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2015-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2015-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/s390-vx-linux64.xml gdb-10.2/gdb/features/s390-vx-linux64.xml --- gdb-9.1/gdb/features/s390-vx-linux64.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/s390-vx-linux64.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2015-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2015-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/s390-vx.xml gdb-10.2/gdb/features/s390-vx.xml --- gdb-9.1/gdb/features/s390-vx.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/s390-vx.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2015-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2015-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/s390x-core64.xml gdb-10.2/gdb/features/s390x-core64.xml --- gdb-9.1/gdb/features/s390x-core64.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/s390x-core64.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2010-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2010-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/s390x-gs-linux64.xml gdb-10.2/gdb/features/s390x-gs-linux64.xml --- gdb-9.1/gdb/features/s390x-gs-linux64.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/s390x-gs-linux64.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2017-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2017-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/s390x-linux64v1.xml gdb-10.2/gdb/features/s390x-linux64v1.xml --- gdb-9.1/gdb/features/s390x-linux64v1.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/s390x-linux64v1.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2010-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2010-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/s390x-linux64v2.xml gdb-10.2/gdb/features/s390x-linux64v2.xml --- gdb-9.1/gdb/features/s390x-linux64v2.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/s390x-linux64v2.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2010-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2010-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/s390x-linux64.xml gdb-10.2/gdb/features/s390x-linux64.xml --- gdb-9.1/gdb/features/s390x-linux64.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/s390x-linux64.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2010-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2010-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/s390x-te-linux64.xml gdb-10.2/gdb/features/s390x-te-linux64.xml --- gdb-9.1/gdb/features/s390x-te-linux64.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/s390x-te-linux64.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2010-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2010-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/s390x-tevx-linux64.xml gdb-10.2/gdb/features/s390x-tevx-linux64.xml --- gdb-9.1/gdb/features/s390x-tevx-linux64.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/s390x-tevx-linux64.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2015-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2015-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/s390x-vx-linux64.xml gdb-10.2/gdb/features/s390x-vx-linux64.xml --- gdb-9.1/gdb/features/s390x-vx-linux64.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/s390x-vx-linux64.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2015-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2015-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/sparc/sparc32-cp0.xml gdb-10.2/gdb/features/sparc/sparc32-cp0.xml --- gdb-9.1/gdb/features/sparc/sparc32-cp0.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/sparc/sparc32-cp0.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2013-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2013-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/sparc/sparc32-cpu.xml gdb-10.2/gdb/features/sparc/sparc32-cpu.xml --- gdb-9.1/gdb/features/sparc/sparc32-cpu.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/sparc/sparc32-cpu.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2013-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2013-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/sparc/sparc32-fpu.xml gdb-10.2/gdb/features/sparc/sparc32-fpu.xml --- gdb-9.1/gdb/features/sparc/sparc32-fpu.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/sparc/sparc32-fpu.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2013-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2013-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/sparc/sparc32-solaris.xml gdb-10.2/gdb/features/sparc/sparc32-solaris.xml --- gdb-9.1/gdb/features/sparc/sparc32-solaris.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/sparc/sparc32-solaris.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2013-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2013-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/sparc/sparc64-cp0.xml gdb-10.2/gdb/features/sparc/sparc64-cp0.xml --- gdb-9.1/gdb/features/sparc/sparc64-cp0.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/sparc/sparc64-cp0.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2013-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2013-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/sparc/sparc64-cpu.xml gdb-10.2/gdb/features/sparc/sparc64-cpu.xml --- gdb-9.1/gdb/features/sparc/sparc64-cpu.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/sparc/sparc64-cpu.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2013-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2013-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/sparc/sparc64-fpu.xml gdb-10.2/gdb/features/sparc/sparc64-fpu.xml --- gdb-9.1/gdb/features/sparc/sparc64-fpu.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/sparc/sparc64-fpu.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2013-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2013-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/sparc/sparc64-solaris.xml gdb-10.2/gdb/features/sparc/sparc64-solaris.xml --- gdb-9.1/gdb/features/sparc/sparc64-solaris.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/sparc/sparc64-solaris.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2013-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2013-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/threads.dtd gdb-10.2/gdb/features/threads.dtd --- gdb-9.1/gdb/features/threads.dtd 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/threads.dtd 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -<!-- Copyright (C) 2008-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2008-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/tic6x-c62x-linux.xml gdb-10.2/gdb/features/tic6x-c62x-linux.xml --- gdb-9.1/gdb/features/tic6x-c62x-linux.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/tic6x-c62x-linux.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2010-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2010-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/tic6x-c64x-linux.xml gdb-10.2/gdb/features/tic6x-c64x-linux.xml --- gdb-9.1/gdb/features/tic6x-c64x-linux.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/tic6x-c64x-linux.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2010-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2010-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/tic6x-c64xp-linux.xml gdb-10.2/gdb/features/tic6x-c64xp-linux.xml --- gdb-9.1/gdb/features/tic6x-c64xp-linux.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/tic6x-c64xp-linux.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2010-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2010-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/tic6x-c6xp.xml gdb-10.2/gdb/features/tic6x-c6xp.xml --- gdb-9.1/gdb/features/tic6x-c6xp.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/tic6x-c6xp.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2010-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2010-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/tic6x-core.xml gdb-10.2/gdb/features/tic6x-core.xml --- gdb-9.1/gdb/features/tic6x-core.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/tic6x-core.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2010-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2010-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/tic6x-gp.xml gdb-10.2/gdb/features/tic6x-gp.xml --- gdb-9.1/gdb/features/tic6x-gp.xml 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/tic6x-gp.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2010-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2010-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/traceframe-info.dtd gdb-10.2/gdb/features/traceframe-info.dtd --- gdb-9.1/gdb/features/traceframe-info.dtd 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/traceframe-info.dtd 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -<!-- Copyright (C) 2010-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2010-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/features/xinclude.dtd gdb-10.2/gdb/features/xinclude.dtd --- gdb-9.1/gdb/features/xinclude.dtd 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/features/xinclude.dtd 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -<!-- Copyright (C) 2007-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2007-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/f-exp.c gdb-10.2/gdb/f-exp.c --- gdb-9.1/gdb/f-exp.c 2020-02-08 12:54:11.000000000 +0000 +++ gdb-10.2/gdb/f-exp.c 2021-04-25 04:10:37.000000000 +0000 @@ -1,8 +1,9 @@ -/* A Bison parser, made by GNU Bison 3.0.4. */ +/* A Bison parser, made by GNU Bison 3.5.1. */ /* Bison implementation for Yacc-like parsers in C - Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc. + Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2020 Free Software Foundation, + Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -40,11 +41,14 @@ define necessary library symbols; they are noted "INFRINGES ON USER NAME SPACE" below. */ +/* Undocumented macros, especially those whose name start with YY_, + are private implementation details. Do not rely on them. */ + /* Identify Bison output. */ #define YYBISON 1 /* Bison version. */ -#define YYBISON_VERSION "3.0.4" +#define YYBISON_VERSION "3.5.1" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" @@ -61,8 +65,8 @@ -/* Copy the first part of user declarations. */ -#line 43 "f-exp.y" /* yacc.c:339 */ +/* First part of user prologue. */ +#line 43 "f-exp.y" #include "defs.h" @@ -113,13 +117,26 @@ static struct type *convert_to_kind_type (struct type *basetype, int kind); -#line 117 "f-exp.c.tmp" /* yacc.c:339 */ +#line 121 "f-exp.c.tmp" +# ifndef YY_CAST +# ifdef __cplusplus +# define YY_CAST(Type, Val) static_cast<Type> (Val) +# define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast<Type> (Val) +# else +# define YY_CAST(Type, Val) ((Type) (Val)) +# define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val)) +# endif +# endif # ifndef YY_NULLPTRPTR -# if defined __cplusplus && 201103L <= __cplusplus -# define YY_NULLPTRPTR nullptr +# if defined __cplusplus +# if 201103L <= __cplusplus +# define YY_NULLPTRPTR nullptr +# else +# define YY_NULLPTRPTR 0 +# endif # else -# define YY_NULLPTRPTR 0 +# define YY_NULLPTRPTR ((void*)0) # endif # endif @@ -241,10 +258,9 @@ /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED - union YYSTYPE { -#line 99 "f-exp.y" /* yacc.c:355 */ +#line 99 "f-exp.y" LONGEST lval; struct { @@ -268,9 +284,9 @@ int *ivec; -#line 272 "f-exp.c.tmp" /* yacc.c:355 */ -}; +#line 288 "f-exp.c.tmp" +}; typedef union YYSTYPE YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define YYSTYPE_IS_DECLARED 1 @@ -283,41 +299,89 @@ -/* Copy the second part of user declarations. */ -#line 122 "f-exp.y" /* yacc.c:358 */ +/* Second part of user prologue. */ +#line 122 "f-exp.y" /* YYSTYPE gets defined by %union */ static int parse_number (struct parser_state *, const char *, int, int, YYSTYPE *); -#line 294 "f-exp.c.tmp" /* yacc.c:358 */ +#line 310 "f-exp.c.tmp" + #ifdef short # undef short #endif -#ifdef YYTYPE_UINT8 -typedef YYTYPE_UINT8 yytype_uint8; -#else -typedef unsigned char yytype_uint8; +/* On compilers that do not define __PTRDIFF_MAX__ etc., make sure + <limits.h> and (if available) <stdint.h> are included + so that the code can choose integer types of a good width. */ + +#ifndef __PTRDIFF_MAX__ +# include <limits.h> /* INFRINGES ON USER NAME SPACE */ +# if defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__ +# include <stdint.h> /* INFRINGES ON USER NAME SPACE */ +# define YY_STDINT_H +# endif #endif -#ifdef YYTYPE_INT8 -typedef YYTYPE_INT8 yytype_int8; +/* Narrow types that promote to a signed type and that can represent a + signed or unsigned integer of at least N bits. In tables they can + save space and decrease cache pressure. Promoting to a signed type + helps avoid bugs in integer arithmetic. */ + +#ifdef __INT_LEAST8_MAX__ +typedef __INT_LEAST8_TYPE__ yytype_int8; +#elif defined YY_STDINT_H +typedef int_least8_t yytype_int8; #else typedef signed char yytype_int8; #endif -#ifdef YYTYPE_UINT16 -typedef YYTYPE_UINT16 yytype_uint16; +#ifdef __INT_LEAST16_MAX__ +typedef __INT_LEAST16_TYPE__ yytype_int16; +#elif defined YY_STDINT_H +typedef int_least16_t yytype_int16; #else -typedef unsigned short int yytype_uint16; +typedef short yytype_int16; #endif -#ifdef YYTYPE_INT16 -typedef YYTYPE_INT16 yytype_int16; +#if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__ +typedef __UINT_LEAST8_TYPE__ yytype_uint8; +#elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \ + && UINT_LEAST8_MAX <= INT_MAX) +typedef uint_least8_t yytype_uint8; +#elif !defined __UINT_LEAST8_MAX__ && UCHAR_MAX <= INT_MAX +typedef unsigned char yytype_uint8; #else -typedef short int yytype_int16; +typedef short yytype_uint8; +#endif + +#if defined __UINT_LEAST16_MAX__ && __UINT_LEAST16_MAX__ <= __INT_MAX__ +typedef __UINT_LEAST16_TYPE__ yytype_uint16; +#elif (!defined __UINT_LEAST16_MAX__ && defined YY_STDINT_H \ + && UINT_LEAST16_MAX <= INT_MAX) +typedef uint_least16_t yytype_uint16; +#elif !defined __UINT_LEAST16_MAX__ && USHRT_MAX <= INT_MAX +typedef unsigned short yytype_uint16; +#else +typedef int yytype_uint16; +#endif + +#ifndef YYPTRDIFF_T +# if defined __PTRDIFF_TYPE__ && defined __PTRDIFF_MAX__ +# define YYPTRDIFF_T __PTRDIFF_TYPE__ +# define YYPTRDIFF_MAXIMUM __PTRDIFF_MAX__ +# elif defined PTRDIFF_MAX +# ifndef ptrdiff_t +# include <stddef.h> /* INFRINGES ON USER NAME SPACE */ +# endif +# define YYPTRDIFF_T ptrdiff_t +# define YYPTRDIFF_MAXIMUM PTRDIFF_MAX +# else +# define YYPTRDIFF_T long +# define YYPTRDIFF_MAXIMUM LONG_MAX +# endif #endif #ifndef YYSIZE_T @@ -325,15 +389,27 @@ # define YYSIZE_T __SIZE_TYPE__ # elif defined size_t # define YYSIZE_T size_t -# elif ! defined YYSIZE_T +# elif defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__ # include <stddef.h> /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # else -# define YYSIZE_T unsigned int +# define YYSIZE_T unsigned # endif #endif -#define YYSIZE_MAXIMUM ((YYSIZE_T) -1) +#define YYSIZE_MAXIMUM \ + YY_CAST (YYPTRDIFF_T, \ + (YYPTRDIFF_MAXIMUM < YY_CAST (YYSIZE_T, -1) \ + ? YYPTRDIFF_MAXIMUM \ + : YY_CAST (YYSIZE_T, -1))) + +#define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X)) + +/* Stored state numbers (used for stacks). */ +typedef yytype_uint8 yy_state_t; + +/* State numbers in computations. */ +typedef int yy_state_fast_t; #ifndef YY_ # if defined YYENABLE_NLS && YYENABLE_NLS @@ -347,30 +423,19 @@ # endif #endif -#ifndef YY_ATTRIBUTE -# if (defined __GNUC__ \ - && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__))) \ - || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C -# define YY_ATTRIBUTE(Spec) __attribute__(Spec) +#ifndef YY_ATTRIBUTE_PURE +# if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__) +# define YY_ATTRIBUTE_PURE __attribute__ ((__pure__)) # else -# define YY_ATTRIBUTE(Spec) /* empty */ +# define YY_ATTRIBUTE_PURE # endif #endif -#ifndef YY_ATTRIBUTE_PURE -# define YY_ATTRIBUTE_PURE YY_ATTRIBUTE ((__pure__)) -#endif - #ifndef YY_ATTRIBUTE_UNUSED -# define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__)) -#endif - -#if !defined _Noreturn \ - && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112) -# if defined _MSC_VER && 1200 <= _MSC_VER -# define _Noreturn __declspec (noreturn) +# if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__) +# define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__)) # else -# define _Noreturn YY_ATTRIBUTE ((__noreturn__)) +# define YY_ATTRIBUTE_UNUSED # endif #endif @@ -381,13 +446,13 @@ # define YYUSE(E) /* empty */ #endif -#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ +#if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ /* Suppress an incorrect diagnostic about yylval being uninitialized. */ -# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ - _Pragma ("GCC diagnostic push") \ - _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\ +# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ + _Pragma ("GCC diagnostic push") \ + _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \ _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") -# define YY_IGNORE_MAYBE_UNINITIALIZED_END \ +# define YY_IGNORE_MAYBE_UNINITIALIZED_END \ _Pragma ("GCC diagnostic pop") #else # define YY_INITIAL_VALUE(Value) Value @@ -400,6 +465,20 @@ # define YY_INITIAL_VALUE(Value) /* Nothing. */ #endif +#if defined __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__ +# define YY_IGNORE_USELESS_CAST_BEGIN \ + _Pragma ("GCC diagnostic push") \ + _Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"") +# define YY_IGNORE_USELESS_CAST_END \ + _Pragma ("GCC diagnostic pop") +#endif +#ifndef YY_IGNORE_USELESS_CAST_BEGIN +# define YY_IGNORE_USELESS_CAST_BEGIN +# define YY_IGNORE_USELESS_CAST_END +#endif + + +#define YY_ASSERT(E) ((void) (0 && (E))) #if ! defined yyoverflow || YYERROR_VERBOSE @@ -475,17 +554,17 @@ /* A type that is properly aligned for any stack member. */ union yyalloc { - yytype_int16 yyss_alloc; + yy_state_t yyss_alloc; YYSTYPE yyvs_alloc; }; /* The size of the maximum gap between one aligned stack and the next. */ -# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) +# define YYSTACK_GAP_MAXIMUM (YYSIZEOF (union yyalloc) - 1) /* The size of an array large to enough to hold all stacks, each with N elements. */ # define YYSTACK_BYTES(N) \ - ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ + ((N) * (YYSIZEOF (yy_state_t) + YYSIZEOF (YYSTYPE)) \ + YYSTACK_GAP_MAXIMUM) # define YYCOPY_NEEDED 1 @@ -498,11 +577,11 @@ # define YYSTACK_RELOCATE(Stack_alloc, Stack) \ do \ { \ - YYSIZE_T yynewbytes; \ + YYPTRDIFF_T yynewbytes; \ YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ Stack = &yyptr->Stack_alloc; \ - yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ - yyptr += yynewbytes / sizeof (*yyptr); \ + yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \ + yyptr += yynewbytes / YYSIZEOF (*yyptr); \ } \ while (0) @@ -514,12 +593,12 @@ # ifndef YYCOPY # if defined __GNUC__ && 1 < __GNUC__ # define YYCOPY(Dst, Src, Count) \ - __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src))) + __builtin_memcpy (Dst, Src, YY_CAST (YYSIZE_T, (Count)) * sizeof (*(Src))) # else # define YYCOPY(Dst, Src, Count) \ do \ { \ - YYSIZE_T yyi; \ + YYPTRDIFF_T yyi; \ for (yyi = 0; yyi < (Count); yyi++) \ (Dst)[yyi] = (Src)[yyi]; \ } \ @@ -542,17 +621,18 @@ /* YYNSTATES -- Number of states. */ #define YYNSTATES 157 -/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned - by yylex, with out-of-bounds checking. */ #define YYUNDEFTOK 2 #define YYMAXUTOK 302 + +/* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM + as returned by yylex, with out-of-bounds checking. */ #define YYTRANSLATE(YYX) \ - ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) + (0 <= (YYX) && (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) /* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM - as returned by yylex, without out-of-bounds checking. */ -static const yytype_uint8 yytranslate[] = + as returned by yylex. */ +static const yytype_int8 yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -589,7 +669,7 @@ #if YYDEBUG /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ -static const yytype_uint16 yyrline[] = +static const yytype_int16 yyrline[] = { 0, 205, 205, 206, 209, 215, 220, 224, 228, 232, 236, 240, 244, 254, 253, 264, 268, 272, 275, 279, @@ -630,7 +710,7 @@ # ifdef YYPRINT /* YYTOKNUM[NUM] -- (External) token number corresponding to the (internal) symbol number NUM (which must be that of a token). */ -static const yytype_uint16 yytoknum[] = +static const yytype_int16 yytoknum[] = { 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, @@ -642,14 +722,14 @@ }; # endif -#define YYPACT_NINF -59 +#define YYPACT_NINF (-59) -#define yypact_value_is_default(Yystate) \ - (!!((Yystate) == (-59))) +#define yypact_value_is_default(Yyn) \ + ((Yyn) == YYPACT_NINF) -#define YYTABLE_NINF -1 +#define YYTABLE_NINF (-1) -#define yytable_value_is_error(Yytable_value) \ +#define yytable_value_is_error(Yyn) \ 0 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing @@ -677,7 +757,7 @@ /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. Performed when YYTABLE does not specify something else to do. Zero means the default is an error. */ -static const yytype_uint8 yydefact[] = +static const yytype_int8 yydefact[] = { 0, 50, 52, 57, 56, 96, 74, 51, 0, 0, 75, 76, 81, 80, 78, 79, 82, 83, 84, 85, @@ -870,7 +950,7 @@ /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ -static const yytype_uint8 yystos[] = +static const yytype_int8 yystos[] = { 0, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, @@ -891,7 +971,7 @@ }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ -static const yytype_uint8 yyr1[] = +static const yytype_int8 yyr1[] = { 0, 64, 65, 65, 66, 67, 67, 67, 67, 67, 67, 67, 67, 68, 67, 67, 67, 69, 69, 69, @@ -906,7 +986,7 @@ }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ -static const yytype_uint8 yyr2[] = +static const yytype_int8 yyr2[] = { 0, 2, 1, 1, 1, 3, 2, 2, 2, 2, 2, 2, 4, 0, 5, 4, 6, 0, 1, 1, @@ -933,22 +1013,22 @@ #define YYRECOVERING() (!!yyerrstatus) -#define YYBACKUP(Token, Value) \ -do \ - if (yychar == YYEMPTY) \ - { \ - yychar = (Token); \ - yylval = (Value); \ - YYPOPSTACK (yylen); \ - yystate = *yyssp; \ - goto yybackup; \ - } \ - else \ - { \ - yyerror (YY_("syntax error: cannot back up")); \ - YYERROR; \ - } \ -while (0) +#define YYBACKUP(Token, Value) \ + do \ + if (yychar == YYEMPTY) \ + { \ + yychar = (Token); \ + yylval = (Value); \ + YYPOPSTACK (yylen); \ + yystate = *yyssp; \ + goto yybackup; \ + } \ + else \ + { \ + yyerror (YY_("syntax error: cannot back up")); \ + YYERROR; \ + } \ + while (0) /* Error token number */ #define YYTERROR 1 @@ -988,37 +1068,39 @@ } while (0) -/*----------------------------------------. -| Print this symbol's value on YYOUTPUT. | -`----------------------------------------*/ +/*-----------------------------------. +| Print this symbol's value on YYO. | +`-----------------------------------*/ static void -yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) +yy_symbol_value_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep) { - FILE *yyo = yyoutput; - YYUSE (yyo); + FILE *yyoutput = yyo; + YYUSE (yyoutput); if (!yyvaluep) return; # ifdef YYPRINT if (yytype < YYNTOKENS) - YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); + YYPRINT (yyo, yytoknum[yytype], *yyvaluep); # endif + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN YYUSE (yytype); + YY_IGNORE_MAYBE_UNINITIALIZED_END } -/*--------------------------------. -| Print this symbol on YYOUTPUT. | -`--------------------------------*/ +/*---------------------------. +| Print this symbol on YYO. | +`---------------------------*/ static void -yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) +yy_symbol_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep) { - YYFPRINTF (yyoutput, "%s %s (", + YYFPRINTF (yyo, "%s %s (", yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]); - yy_symbol_value_print (yyoutput, yytype, yyvaluep); - YYFPRINTF (yyoutput, ")"); + yy_symbol_value_print (yyo, yytype, yyvaluep); + YYFPRINTF (yyo, ")"); } /*------------------------------------------------------------------. @@ -1027,7 +1109,7 @@ `------------------------------------------------------------------*/ static void -yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop) +yy_stack_print (yy_state_t *yybottom, yy_state_t *yytop) { YYFPRINTF (stderr, "Stack now"); for (; yybottom <= yytop; yybottom++) @@ -1050,20 +1132,20 @@ `------------------------------------------------*/ static void -yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule) +yy_reduce_print (yy_state_t *yyssp, YYSTYPE *yyvsp, int yyrule) { - unsigned long int yylno = yyrline[yyrule]; + int yylno = yyrline[yyrule]; int yynrhs = yyr2[yyrule]; int yyi; - YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", + YYFPRINTF (stderr, "Reducing stack by rule %d (line %d):\n", yyrule - 1, yylno); /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { YYFPRINTF (stderr, " $%d = ", yyi + 1); yy_symbol_print (stderr, - yystos[yyssp[yyi + 1 - yynrhs]], - &(yyvsp[(yyi + 1) - (yynrhs)]) + yystos[+yyssp[yyi + 1 - yynrhs]], + &yyvsp[(yyi + 1) - (yynrhs)] ); YYFPRINTF (stderr, "\n"); } @@ -1107,13 +1189,13 @@ # ifndef yystrlen # if defined __GLIBC__ && defined _STRING_H -# define yystrlen strlen +# define yystrlen(S) (YY_CAST (YYPTRDIFF_T, strlen (S))) # else /* Return the length of YYSTR. */ -static YYSIZE_T +static YYPTRDIFF_T yystrlen (const char *yystr) { - YYSIZE_T yylen; + YYPTRDIFF_T yylen; for (yylen = 0; yystr[yylen]; yylen++) continue; return yylen; @@ -1149,12 +1231,12 @@ backslash-backslash). YYSTR is taken from yytname. If YYRES is null, do not copy; instead, return the length of what the result would have been. */ -static YYSIZE_T +static YYPTRDIFF_T yytnamerr (char *yyres, const char *yystr) { if (*yystr == '"') { - YYSIZE_T yyn = 0; + YYPTRDIFF_T yyn = 0; char const *yyp = yystr; for (;;) @@ -1167,7 +1249,10 @@ case '\\': if (*++yyp != '\\') goto do_not_strip_quotes; - /* Fall through. */ + else + goto append; + + append: default: if (yyres) yyres[yyn] = *yyp; @@ -1182,10 +1267,10 @@ do_not_strip_quotes: ; } - if (! yyres) + if (yyres) + return yystpcpy (yyres, yystr) - yyres; + else return yystrlen (yystr); - - return yystpcpy (yyres, yystr) - yyres; } # endif @@ -1198,19 +1283,19 @@ *YYMSG_ALLOC to the required number of bytes. Return 2 if the required number of bytes is too large to store. */ static int -yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, - yytype_int16 *yyssp, int yytoken) +yysyntax_error (YYPTRDIFF_T *yymsg_alloc, char **yymsg, + yy_state_t *yyssp, int yytoken) { - YYSIZE_T yysize0 = yytnamerr (YY_NULLPTRPTR, yytname[yytoken]); - YYSIZE_T yysize = yysize0; enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; /* Internationalized format string. */ const char *yyformat = YY_NULLPTRPTR; - /* Arguments of yyformat. */ + /* Arguments of yyformat: reported tokens (one for the "unexpected", + one per "expected"). */ char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; - /* Number of reported tokens (one for the "unexpected", one per - "expected"). */ + /* Actual size of YYARG. */ int yycount = 0; + /* Cumulated lengths of YYARG. */ + YYPTRDIFF_T yysize = 0; /* There are many possibilities here to consider: - If this state is a consistent state with a default action, then @@ -1237,7 +1322,9 @@ */ if (yytoken != YYEMPTY) { - int yyn = yypact[*yyssp]; + int yyn = yypact[+*yyssp]; + YYPTRDIFF_T yysize0 = yytnamerr (YY_NULLPTRPTR, yytname[yytoken]); + yysize = yysize0; yyarg[yycount++] = yytname[yytoken]; if (!yypact_value_is_default (yyn)) { @@ -1262,11 +1349,12 @@ } yyarg[yycount++] = yytname[yyx]; { - YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTRPTR, yytname[yyx]); - if (! (yysize <= yysize1 - && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) + YYPTRDIFF_T yysize1 + = yysize + yytnamerr (YY_NULLPTRPTR, yytname[yyx]); + if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM) + yysize = yysize1; + else return 2; - yysize = yysize1; } } } @@ -1278,6 +1366,7 @@ case N: \ yyformat = S; \ break + default: /* Avoid compiler warnings. */ YYCASE_(0, YY_("syntax error")); YYCASE_(1, YY_("syntax error, unexpected %s")); YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); @@ -1288,10 +1377,13 @@ } { - YYSIZE_T yysize1 = yysize + yystrlen (yyformat); - if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) + /* Don't count the "%s"s in the final size, but reserve room for + the terminator. */ + YYPTRDIFF_T yysize1 = yysize + (yystrlen (yyformat) - 2 * yycount) + 1; + if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM) + yysize = yysize1; + else return 2; - yysize = yysize1; } if (*yymsg_alloc < yysize) @@ -1317,8 +1409,8 @@ } else { - yyp++; - yyformat++; + ++yyp; + ++yyformat; } } return 0; @@ -1361,7 +1453,7 @@ int yyparse (void) { - int yystate; + yy_state_fast_t yystate; /* Number of tokens to shift before error messages enabled. */ int yyerrstatus; @@ -1373,16 +1465,16 @@ to xreallocate them elsewhere. */ /* The state stack. */ - yytype_int16 yyssa[YYINITDEPTH]; - yytype_int16 *yyss; - yytype_int16 *yyssp; + yy_state_t yyssa[YYINITDEPTH]; + yy_state_t *yyss; + yy_state_t *yyssp; /* The semantic value stack. */ YYSTYPE yyvsa[YYINITDEPTH]; YYSTYPE *yyvs; YYSTYPE *yyvsp; - YYSIZE_T yystacksize; + YYPTRDIFF_T yystacksize; int yyn; int yyresult; @@ -1396,7 +1488,7 @@ /* Buffer for error messages, and its allocated size. */ char yymsgbuf[128]; char *yymsg = yymsgbuf; - YYSIZE_T yymsg_alloc = sizeof yymsgbuf; + YYPTRDIFF_T yymsg_alloc = sizeof yymsgbuf; #endif #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) @@ -1417,46 +1509,54 @@ yychar = YYEMPTY; /* Cause a token to be read. */ goto yysetstate; + /*------------------------------------------------------------. -| yynewstate -- Push a new state, which is found in yystate. | +| yynewstate -- push a new state, which is found in yystate. | `------------------------------------------------------------*/ - yynewstate: +yynewstate: /* In all cases, when you get here, the value and location stacks have just been pushed. So pushing a state here evens the stacks. */ yyssp++; - yysetstate: - *yyssp = yystate; + +/*--------------------------------------------------------------------. +| yysetstate -- set current state (the top of the stack) to yystate. | +`--------------------------------------------------------------------*/ +yysetstate: + YYDPRINTF ((stderr, "Entering state %d\n", yystate)); + YY_ASSERT (0 <= yystate && yystate < YYNSTATES); + YY_IGNORE_USELESS_CAST_BEGIN + *yyssp = YY_CAST (yy_state_t, yystate); + YY_IGNORE_USELESS_CAST_END if (yyss + yystacksize - 1 <= yyssp) +#if !defined yyoverflow && !defined YYSTACK_RELOCATE + goto yyexhaustedlab; +#else { /* Get the current used size of the three stacks, in elements. */ - YYSIZE_T yysize = yyssp - yyss + 1; + YYPTRDIFF_T yysize = yyssp - yyss + 1; -#ifdef yyoverflow +# if defined yyoverflow { /* Give user a chance to xreallocate the stack. Use copies of these so that the &'s don't force the real ones into memory. */ + yy_state_t *yyss1 = yyss; YYSTYPE *yyvs1 = yyvs; - yytype_int16 *yyss1 = yyss; /* Each stack pointer address is followed by the size of the data in use in that stack, in bytes. This used to be a conditional around just the two extra args, but that might be undefined if yyoverflow is a macro. */ yyoverflow (YY_("memory exhausted"), - &yyss1, yysize * sizeof (*yyssp), - &yyvs1, yysize * sizeof (*yyvsp), + &yyss1, yysize * YYSIZEOF (*yyssp), + &yyvs1, yysize * YYSIZEOF (*yyvsp), &yystacksize); - yyss = yyss1; yyvs = yyvs1; } -#else /* no yyoverflow */ -# ifndef YYSTACK_RELOCATE - goto yyexhaustedlab; -# else +# else /* defined YYSTACK_RELOCATE */ /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) goto yyexhaustedlab; @@ -1465,42 +1565,43 @@ yystacksize = YYMAXDEPTH; { - yytype_int16 *yyss1 = yyss; + yy_state_t *yyss1 = yyss; union yyalloc *yyptr = - (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); + YY_CAST (union yyalloc *, + YYSTACK_ALLOC (YY_CAST (YYSIZE_T, YYSTACK_BYTES (yystacksize)))); if (! yyptr) goto yyexhaustedlab; YYSTACK_RELOCATE (yyss_alloc, yyss); YYSTACK_RELOCATE (yyvs_alloc, yyvs); -# undef YYSTACK_RELOCATE +# undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); } # endif -#endif /* no yyoverflow */ yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; - YYDPRINTF ((stderr, "Stack size increased to %lu\n", - (unsigned long int) yystacksize)); + YY_IGNORE_USELESS_CAST_BEGIN + YYDPRINTF ((stderr, "Stack size increased to %ld\n", + YY_CAST (long, yystacksize))); + YY_IGNORE_USELESS_CAST_END if (yyss + yystacksize - 1 <= yyssp) YYABORT; } - - YYDPRINTF ((stderr, "Entering state %d\n", yystate)); +#endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */ if (yystate == YYFINAL) YYACCEPT; goto yybackup; + /*-----------. | yybackup. | `-----------*/ yybackup: - /* Do appropriate processing given the current state. Read a lookahead token if we need one and don't already have one. */ @@ -1550,15 +1651,13 @@ /* Shift the lookahead token. */ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); - - /* Discard the shifted token. */ - yychar = YYEMPTY; - yystate = yyn; YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; YY_IGNORE_MAYBE_UNINITIALIZED_END + /* Discard the shifted token. */ + yychar = YYEMPTY; goto yynewstate; @@ -1573,7 +1672,7 @@ /*-----------------------------. -| yyreduce -- Do a reduction. | +| yyreduce -- do a reduction. | `-----------------------------*/ yyreduce: /* yyn is the number of a rule to reduce with. */ @@ -1593,313 +1692,313 @@ YY_REDUCE_PRINT (yyn); switch (yyn) { - case 4: -#line 210 "f-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, OP_TYPE); + case 4: +#line 210 "f-exp.y" + { write_exp_elt_opcode (pstate, OP_TYPE); write_exp_elt_type (pstate, (yyvsp[0].tval)); write_exp_elt_opcode (pstate, OP_TYPE); } -#line 1603 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 1702 "f-exp.c.tmp" break; case 5: -#line 216 "f-exp.y" /* yacc.c:1646 */ - { } -#line 1609 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 216 "f-exp.y" + { } +#line 1708 "f-exp.c.tmp" break; case 6: -#line 221 "f-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_IND); } -#line 1615 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 221 "f-exp.y" + { write_exp_elt_opcode (pstate, UNOP_IND); } +#line 1714 "f-exp.c.tmp" break; case 7: -#line 225 "f-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_ADDR); } -#line 1621 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 225 "f-exp.y" + { write_exp_elt_opcode (pstate, UNOP_ADDR); } +#line 1720 "f-exp.c.tmp" break; case 8: -#line 229 "f-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_NEG); } -#line 1627 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 229 "f-exp.y" + { write_exp_elt_opcode (pstate, UNOP_NEG); } +#line 1726 "f-exp.c.tmp" break; case 9: -#line 233 "f-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_LOGICAL_NOT); } -#line 1633 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 233 "f-exp.y" + { write_exp_elt_opcode (pstate, UNOP_LOGICAL_NOT); } +#line 1732 "f-exp.c.tmp" break; case 10: -#line 237 "f-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_COMPLEMENT); } -#line 1639 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 237 "f-exp.y" + { write_exp_elt_opcode (pstate, UNOP_COMPLEMENT); } +#line 1738 "f-exp.c.tmp" break; case 11: -#line 241 "f-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_SIZEOF); } -#line 1645 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 241 "f-exp.y" + { write_exp_elt_opcode (pstate, UNOP_SIZEOF); } +#line 1744 "f-exp.c.tmp" break; case 12: -#line 245 "f-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_FORTRAN_KIND); } -#line 1651 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 245 "f-exp.y" + { write_exp_elt_opcode (pstate, UNOP_FORTRAN_KIND); } +#line 1750 "f-exp.c.tmp" break; case 13: -#line 254 "f-exp.y" /* yacc.c:1646 */ - { pstate->start_arglist (); } -#line 1657 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 254 "f-exp.y" + { pstate->start_arglist (); } +#line 1756 "f-exp.c.tmp" break; case 14: -#line 256 "f-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, +#line 256 "f-exp.y" + { write_exp_elt_opcode (pstate, OP_F77_UNDETERMINED_ARGLIST); write_exp_elt_longcst (pstate, pstate->end_arglist ()); write_exp_elt_opcode (pstate, OP_F77_UNDETERMINED_ARGLIST); } -#line 1668 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 1767 "f-exp.c.tmp" break; case 15: -#line 265 "f-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, (yyvsp[-3].opcode)); } -#line 1674 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 265 "f-exp.y" + { write_exp_elt_opcode (pstate, (yyvsp[-3].opcode)); } +#line 1773 "f-exp.c.tmp" break; case 16: -#line 269 "f-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, (yyvsp[-5].opcode)); } -#line 1680 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 269 "f-exp.y" + { write_exp_elt_opcode (pstate, (yyvsp[-5].opcode)); } +#line 1779 "f-exp.c.tmp" break; case 18: -#line 276 "f-exp.y" /* yacc.c:1646 */ - { pstate->arglist_len = 1; } -#line 1686 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 276 "f-exp.y" + { pstate->arglist_len = 1; } +#line 1785 "f-exp.c.tmp" break; case 19: -#line 280 "f-exp.y" /* yacc.c:1646 */ - { pstate->arglist_len = 1; } -#line 1692 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 280 "f-exp.y" + { pstate->arglist_len = 1; } +#line 1791 "f-exp.c.tmp" break; case 20: -#line 284 "f-exp.y" /* yacc.c:1646 */ - { pstate->arglist_len++; } -#line 1698 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 284 "f-exp.y" + { pstate->arglist_len++; } +#line 1797 "f-exp.c.tmp" break; case 21: -#line 290 "f-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, OP_RANGE); +#line 290 "f-exp.y" + { write_exp_elt_opcode (pstate, OP_RANGE); write_exp_elt_longcst (pstate, NONE_BOUND_DEFAULT); write_exp_elt_opcode (pstate, OP_RANGE); } -#line 1706 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 1805 "f-exp.c.tmp" break; case 22: -#line 296 "f-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, OP_RANGE); +#line 296 "f-exp.y" + { write_exp_elt_opcode (pstate, OP_RANGE); write_exp_elt_longcst (pstate, HIGH_BOUND_DEFAULT); write_exp_elt_opcode (pstate, OP_RANGE); } -#line 1714 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 1813 "f-exp.c.tmp" break; case 23: -#line 302 "f-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, OP_RANGE); +#line 302 "f-exp.y" + { write_exp_elt_opcode (pstate, OP_RANGE); write_exp_elt_longcst (pstate, LOW_BOUND_DEFAULT); write_exp_elt_opcode (pstate, OP_RANGE); } -#line 1722 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 1821 "f-exp.c.tmp" break; case 24: -#line 308 "f-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, OP_RANGE); +#line 308 "f-exp.y" + { write_exp_elt_opcode (pstate, OP_RANGE); write_exp_elt_longcst (pstate, BOTH_BOUND_DEFAULT); write_exp_elt_opcode (pstate, OP_RANGE); } -#line 1730 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 1829 "f-exp.c.tmp" break; case 25: -#line 314 "f-exp.y" /* yacc.c:1646 */ - { } -#line 1736 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 314 "f-exp.y" + { } +#line 1835 "f-exp.c.tmp" break; case 26: -#line 318 "f-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, OP_COMPLEX); +#line 318 "f-exp.y" + { write_exp_elt_opcode (pstate, OP_COMPLEX); write_exp_elt_type (pstate, parse_f_type (pstate) ->builtin_complex_s16); write_exp_elt_opcode (pstate, OP_COMPLEX); } -#line 1746 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 1845 "f-exp.c.tmp" break; case 27: -#line 326 "f-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_CAST); +#line 326 "f-exp.y" + { write_exp_elt_opcode (pstate, UNOP_CAST); write_exp_elt_type (pstate, (yyvsp[-2].tval)); write_exp_elt_opcode (pstate, UNOP_CAST); } -#line 1754 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 1853 "f-exp.c.tmp" break; case 28: -#line 332 "f-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); +#line 332 "f-exp.y" + { write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); write_exp_string (pstate, (yyvsp[0].sval)); write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); } -#line 1762 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 1861 "f-exp.c.tmp" break; case 29: -#line 340 "f-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_REPEAT); } -#line 1768 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 340 "f-exp.y" + { write_exp_elt_opcode (pstate, BINOP_REPEAT); } +#line 1867 "f-exp.c.tmp" break; case 30: -#line 344 "f-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_EXP); } -#line 1774 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 344 "f-exp.y" + { write_exp_elt_opcode (pstate, BINOP_EXP); } +#line 1873 "f-exp.c.tmp" break; case 31: -#line 348 "f-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_MUL); } -#line 1780 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 348 "f-exp.y" + { write_exp_elt_opcode (pstate, BINOP_MUL); } +#line 1879 "f-exp.c.tmp" break; case 32: -#line 352 "f-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_DIV); } -#line 1786 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 352 "f-exp.y" + { write_exp_elt_opcode (pstate, BINOP_DIV); } +#line 1885 "f-exp.c.tmp" break; case 33: -#line 356 "f-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_ADD); } -#line 1792 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 356 "f-exp.y" + { write_exp_elt_opcode (pstate, BINOP_ADD); } +#line 1891 "f-exp.c.tmp" break; case 34: -#line 360 "f-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_SUB); } -#line 1798 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 360 "f-exp.y" + { write_exp_elt_opcode (pstate, BINOP_SUB); } +#line 1897 "f-exp.c.tmp" break; case 35: -#line 364 "f-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_LSH); } -#line 1804 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 364 "f-exp.y" + { write_exp_elt_opcode (pstate, BINOP_LSH); } +#line 1903 "f-exp.c.tmp" break; case 36: -#line 368 "f-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_RSH); } -#line 1810 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 368 "f-exp.y" + { write_exp_elt_opcode (pstate, BINOP_RSH); } +#line 1909 "f-exp.c.tmp" break; case 37: -#line 372 "f-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_EQUAL); } -#line 1816 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 372 "f-exp.y" + { write_exp_elt_opcode (pstate, BINOP_EQUAL); } +#line 1915 "f-exp.c.tmp" break; case 38: -#line 376 "f-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_NOTEQUAL); } -#line 1822 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 376 "f-exp.y" + { write_exp_elt_opcode (pstate, BINOP_NOTEQUAL); } +#line 1921 "f-exp.c.tmp" break; case 39: -#line 380 "f-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_LEQ); } -#line 1828 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 380 "f-exp.y" + { write_exp_elt_opcode (pstate, BINOP_LEQ); } +#line 1927 "f-exp.c.tmp" break; case 40: -#line 384 "f-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_GEQ); } -#line 1834 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 384 "f-exp.y" + { write_exp_elt_opcode (pstate, BINOP_GEQ); } +#line 1933 "f-exp.c.tmp" break; case 41: -#line 388 "f-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_LESS); } -#line 1840 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 388 "f-exp.y" + { write_exp_elt_opcode (pstate, BINOP_LESS); } +#line 1939 "f-exp.c.tmp" break; case 42: -#line 392 "f-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_GTR); } -#line 1846 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 392 "f-exp.y" + { write_exp_elt_opcode (pstate, BINOP_GTR); } +#line 1945 "f-exp.c.tmp" break; case 43: -#line 396 "f-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_BITWISE_AND); } -#line 1852 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 396 "f-exp.y" + { write_exp_elt_opcode (pstate, BINOP_BITWISE_AND); } +#line 1951 "f-exp.c.tmp" break; case 44: -#line 400 "f-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_BITWISE_XOR); } -#line 1858 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 400 "f-exp.y" + { write_exp_elt_opcode (pstate, BINOP_BITWISE_XOR); } +#line 1957 "f-exp.c.tmp" break; case 45: -#line 404 "f-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_BITWISE_IOR); } -#line 1864 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 404 "f-exp.y" + { write_exp_elt_opcode (pstate, BINOP_BITWISE_IOR); } +#line 1963 "f-exp.c.tmp" break; case 46: -#line 408 "f-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_LOGICAL_AND); } -#line 1870 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 408 "f-exp.y" + { write_exp_elt_opcode (pstate, BINOP_LOGICAL_AND); } +#line 1969 "f-exp.c.tmp" break; case 47: -#line 413 "f-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_LOGICAL_OR); } -#line 1876 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 413 "f-exp.y" + { write_exp_elt_opcode (pstate, BINOP_LOGICAL_OR); } +#line 1975 "f-exp.c.tmp" break; case 48: -#line 417 "f-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_ASSIGN); } -#line 1882 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 417 "f-exp.y" + { write_exp_elt_opcode (pstate, BINOP_ASSIGN); } +#line 1981 "f-exp.c.tmp" break; case 49: -#line 421 "f-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_ASSIGN_MODIFY); +#line 421 "f-exp.y" + { write_exp_elt_opcode (pstate, BINOP_ASSIGN_MODIFY); write_exp_elt_opcode (pstate, (yyvsp[-1].opcode)); write_exp_elt_opcode (pstate, BINOP_ASSIGN_MODIFY); } -#line 1890 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 1989 "f-exp.c.tmp" break; case 50: -#line 427 "f-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, OP_LONG); +#line 427 "f-exp.y" + { write_exp_elt_opcode (pstate, OP_LONG); write_exp_elt_type (pstate, (yyvsp[0].typed_val).type); write_exp_elt_longcst (pstate, (LONGEST) ((yyvsp[0].typed_val).val)); write_exp_elt_opcode (pstate, OP_LONG); } -#line 1899 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 1998 "f-exp.c.tmp" break; case 51: -#line 434 "f-exp.y" /* yacc.c:1646 */ - { YYSTYPE val; +#line 434 "f-exp.y" + { YYSTYPE val; parse_number (pstate, (yyvsp[0].ssym).stoken.ptr, (yyvsp[0].ssym).stoken.length, 0, &val); write_exp_elt_opcode (pstate, OP_LONG); @@ -1907,21 +2006,21 @@ write_exp_elt_longcst (pstate, (LONGEST)val.typed_val.val); write_exp_elt_opcode (pstate, OP_LONG); } -#line 1912 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 2011 "f-exp.c.tmp" break; case 52: -#line 445 "f-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, OP_FLOAT); +#line 445 "f-exp.y" + { write_exp_elt_opcode (pstate, OP_FLOAT); write_exp_elt_type (pstate, (yyvsp[0].typed_val_float).type); write_exp_elt_floatcst (pstate, (yyvsp[0].typed_val_float).val); write_exp_elt_opcode (pstate, OP_FLOAT); } -#line 1921 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 2020 "f-exp.c.tmp" break; case 55: -#line 458 "f-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, OP_LONG); +#line 458 "f-exp.y" + { write_exp_elt_opcode (pstate, OP_LONG); write_exp_elt_type (pstate, parse_f_type (pstate) ->builtin_integer); @@ -1929,31 +2028,31 @@ write_exp_elt_longcst (pstate, (LONGEST) TYPE_LENGTH ((yyvsp[-1].tval))); write_exp_elt_opcode (pstate, OP_LONG); } -#line 1934 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 2033 "f-exp.c.tmp" break; case 56: -#line 469 "f-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, OP_BOOL); +#line 469 "f-exp.y" + { write_exp_elt_opcode (pstate, OP_BOOL); write_exp_elt_longcst (pstate, (LONGEST) (yyvsp[0].lval)); write_exp_elt_opcode (pstate, OP_BOOL); } -#line 1943 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 2042 "f-exp.c.tmp" break; case 57: -#line 476 "f-exp.y" /* yacc.c:1646 */ - { +#line 476 "f-exp.y" + { write_exp_elt_opcode (pstate, OP_STRING); write_exp_string (pstate, (yyvsp[0].sval)); write_exp_elt_opcode (pstate, OP_STRING); } -#line 1953 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 2052 "f-exp.c.tmp" break; case 58: -#line 484 "f-exp.y" /* yacc.c:1646 */ - { struct block_symbol sym = (yyvsp[0].ssym).sym; +#line 484 "f-exp.y" + { struct block_symbol sym = (yyvsp[0].ssym).sym; if (sym.symbol) { @@ -1981,12 +2080,12 @@ arg.c_str ()); } } -#line 1986 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 2085 "f-exp.c.tmp" break; case 61: -#line 520 "f-exp.y" /* yacc.c:1646 */ - { +#line 520 "f-exp.y" + { /* This is where the interesting stuff happens. */ int done = 0; int array_size; @@ -2034,215 +2133,216 @@ } (yyval.tval) = follow_type; } -#line 2039 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 2138 "f-exp.c.tmp" break; case 62: -#line 571 "f-exp.y" /* yacc.c:1646 */ - { type_stack->push (tp_pointer); (yyval.voidval) = 0; } -#line 2045 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 571 "f-exp.y" + { type_stack->push (tp_pointer); (yyval.voidval) = 0; } +#line 2144 "f-exp.c.tmp" break; case 63: -#line 573 "f-exp.y" /* yacc.c:1646 */ - { type_stack->push (tp_pointer); (yyval.voidval) = (yyvsp[0].voidval); } -#line 2051 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 573 "f-exp.y" + { type_stack->push (tp_pointer); (yyval.voidval) = (yyvsp[0].voidval); } +#line 2150 "f-exp.c.tmp" break; case 64: -#line 575 "f-exp.y" /* yacc.c:1646 */ - { type_stack->push (tp_reference); (yyval.voidval) = 0; } -#line 2057 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 575 "f-exp.y" + { type_stack->push (tp_reference); (yyval.voidval) = 0; } +#line 2156 "f-exp.c.tmp" break; case 65: -#line 577 "f-exp.y" /* yacc.c:1646 */ - { type_stack->push (tp_reference); (yyval.voidval) = (yyvsp[0].voidval); } -#line 2063 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 577 "f-exp.y" + { type_stack->push (tp_reference); (yyval.voidval) = (yyvsp[0].voidval); } +#line 2162 "f-exp.c.tmp" break; case 67: -#line 582 "f-exp.y" /* yacc.c:1646 */ - { (yyval.voidval) = (yyvsp[-1].voidval); } -#line 2069 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 582 "f-exp.y" + { (yyval.voidval) = (yyvsp[-1].voidval); } +#line 2168 "f-exp.c.tmp" break; case 68: -#line 584 "f-exp.y" /* yacc.c:1646 */ - { push_kind_type ((yyvsp[-1].typed_val).val, (yyvsp[-1].typed_val).type); } -#line 2075 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 584 "f-exp.y" + { push_kind_type ((yyvsp[-1].typed_val).val, (yyvsp[-1].typed_val).type); } +#line 2174 "f-exp.c.tmp" break; case 69: -#line 586 "f-exp.y" /* yacc.c:1646 */ - { push_kind_type ((yyvsp[0].typed_val).val, (yyvsp[0].typed_val).type); } -#line 2081 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 586 "f-exp.y" + { push_kind_type ((yyvsp[0].typed_val).val, (yyvsp[0].typed_val).type); } +#line 2180 "f-exp.c.tmp" break; case 70: -#line 588 "f-exp.y" /* yacc.c:1646 */ - { type_stack->push (tp_function); } -#line 2087 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 588 "f-exp.y" + { type_stack->push (tp_function); } +#line 2186 "f-exp.c.tmp" break; case 71: -#line 590 "f-exp.y" /* yacc.c:1646 */ - { type_stack->push (tp_function); } -#line 2093 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 590 "f-exp.y" + { type_stack->push (tp_function); } +#line 2192 "f-exp.c.tmp" break; case 72: -#line 594 "f-exp.y" /* yacc.c:1646 */ - { (yyval.voidval) = 0; } -#line 2099 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 594 "f-exp.y" + { (yyval.voidval) = 0; } +#line 2198 "f-exp.c.tmp" break; case 73: -#line 596 "f-exp.y" /* yacc.c:1646 */ - { xfree ((yyvsp[-1].tvec)); (yyval.voidval) = 0; } -#line 2105 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 596 "f-exp.y" + { xfree ((yyvsp[-1].tvec)); (yyval.voidval) = 0; } +#line 2204 "f-exp.c.tmp" break; case 74: -#line 601 "f-exp.y" /* yacc.c:1646 */ - { (yyval.tval) = (yyvsp[0].tsym).type; } -#line 2111 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 601 "f-exp.y" + { (yyval.tval) = (yyvsp[0].tsym).type; } +#line 2210 "f-exp.c.tmp" break; case 75: -#line 603 "f-exp.y" /* yacc.c:1646 */ - { (yyval.tval) = parse_f_type (pstate)->builtin_integer; } -#line 2117 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 603 "f-exp.y" + { (yyval.tval) = parse_f_type (pstate)->builtin_integer; } +#line 2216 "f-exp.c.tmp" break; case 76: -#line 605 "f-exp.y" /* yacc.c:1646 */ - { (yyval.tval) = parse_f_type (pstate)->builtin_integer_s2; } -#line 2123 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 605 "f-exp.y" + { (yyval.tval) = parse_f_type (pstate)->builtin_integer_s2; } +#line 2222 "f-exp.c.tmp" break; case 77: -#line 607 "f-exp.y" /* yacc.c:1646 */ - { (yyval.tval) = parse_f_type (pstate)->builtin_character; } -#line 2129 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 607 "f-exp.y" + { (yyval.tval) = parse_f_type (pstate)->builtin_character; } +#line 2228 "f-exp.c.tmp" break; case 78: -#line 609 "f-exp.y" /* yacc.c:1646 */ - { (yyval.tval) = parse_f_type (pstate)->builtin_logical_s8; } -#line 2135 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 609 "f-exp.y" + { (yyval.tval) = parse_f_type (pstate)->builtin_logical_s8; } +#line 2234 "f-exp.c.tmp" break; case 79: -#line 611 "f-exp.y" /* yacc.c:1646 */ - { (yyval.tval) = parse_f_type (pstate)->builtin_logical; } -#line 2141 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 611 "f-exp.y" + { (yyval.tval) = parse_f_type (pstate)->builtin_logical; } +#line 2240 "f-exp.c.tmp" break; case 80: -#line 613 "f-exp.y" /* yacc.c:1646 */ - { (yyval.tval) = parse_f_type (pstate)->builtin_logical_s2; } -#line 2147 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 613 "f-exp.y" + { (yyval.tval) = parse_f_type (pstate)->builtin_logical_s2; } +#line 2246 "f-exp.c.tmp" break; case 81: -#line 615 "f-exp.y" /* yacc.c:1646 */ - { (yyval.tval) = parse_f_type (pstate)->builtin_logical_s1; } -#line 2153 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 615 "f-exp.y" + { (yyval.tval) = parse_f_type (pstate)->builtin_logical_s1; } +#line 2252 "f-exp.c.tmp" break; case 82: -#line 617 "f-exp.y" /* yacc.c:1646 */ - { (yyval.tval) = parse_f_type (pstate)->builtin_real; } -#line 2159 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 617 "f-exp.y" + { (yyval.tval) = parse_f_type (pstate)->builtin_real; } +#line 2258 "f-exp.c.tmp" break; case 83: -#line 619 "f-exp.y" /* yacc.c:1646 */ - { (yyval.tval) = parse_f_type (pstate)->builtin_real_s8; } -#line 2165 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 619 "f-exp.y" + { (yyval.tval) = parse_f_type (pstate)->builtin_real_s8; } +#line 2264 "f-exp.c.tmp" break; case 84: -#line 621 "f-exp.y" /* yacc.c:1646 */ - { (yyval.tval) = parse_f_type (pstate)->builtin_real_s16; } -#line 2171 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 621 "f-exp.y" + { (yyval.tval) = parse_f_type (pstate)->builtin_real_s16; } +#line 2270 "f-exp.c.tmp" break; case 85: -#line 623 "f-exp.y" /* yacc.c:1646 */ - { (yyval.tval) = parse_f_type (pstate)->builtin_complex_s8; } -#line 2177 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 623 "f-exp.y" + { (yyval.tval) = parse_f_type (pstate)->builtin_complex_s8; } +#line 2276 "f-exp.c.tmp" break; case 86: -#line 625 "f-exp.y" /* yacc.c:1646 */ - { (yyval.tval) = parse_f_type (pstate)->builtin_complex_s8; } -#line 2183 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 625 "f-exp.y" + { (yyval.tval) = parse_f_type (pstate)->builtin_complex_s8; } +#line 2282 "f-exp.c.tmp" break; case 87: -#line 627 "f-exp.y" /* yacc.c:1646 */ - { (yyval.tval) = parse_f_type (pstate)->builtin_complex_s16; } -#line 2189 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 627 "f-exp.y" + { (yyval.tval) = parse_f_type (pstate)->builtin_complex_s16; } +#line 2288 "f-exp.c.tmp" break; case 88: -#line 629 "f-exp.y" /* yacc.c:1646 */ - { (yyval.tval) = parse_f_type (pstate)->builtin_complex_s32; } -#line 2195 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 629 "f-exp.y" + { (yyval.tval) = parse_f_type (pstate)->builtin_complex_s32; } +#line 2294 "f-exp.c.tmp" break; case 89: -#line 631 "f-exp.y" /* yacc.c:1646 */ - { (yyval.tval) = parse_f_type (pstate)->builtin_real;} -#line 2201 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 631 "f-exp.y" + { (yyval.tval) = parse_f_type (pstate)->builtin_real;} +#line 2300 "f-exp.c.tmp" break; case 90: -#line 633 "f-exp.y" /* yacc.c:1646 */ - { (yyval.tval) = parse_f_type (pstate)->builtin_real_s8;} -#line 2207 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 633 "f-exp.y" + { (yyval.tval) = parse_f_type (pstate)->builtin_real_s8;} +#line 2306 "f-exp.c.tmp" break; case 91: -#line 635 "f-exp.y" /* yacc.c:1646 */ - { (yyval.tval) = parse_f_type (pstate)->builtin_complex_s8;} -#line 2213 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 635 "f-exp.y" + { (yyval.tval) = parse_f_type (pstate)->builtin_complex_s8;} +#line 2312 "f-exp.c.tmp" break; case 92: -#line 637 "f-exp.y" /* yacc.c:1646 */ - { (yyval.tval) = parse_f_type (pstate)->builtin_complex_s16;} -#line 2219 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 637 "f-exp.y" + { (yyval.tval) = parse_f_type (pstate)->builtin_complex_s16;} +#line 2318 "f-exp.c.tmp" break; case 93: -#line 642 "f-exp.y" /* yacc.c:1646 */ - { (yyval.tvec) = (struct type **) xmalloc (sizeof (struct type *) * 2); +#line 642 "f-exp.y" + { (yyval.tvec) = (struct type **) xmalloc (sizeof (struct type *) * 2); (yyval.ivec)[0] = 1; /* Number of types in vector */ (yyval.tvec)[1] = (yyvsp[0].tval); } -#line 2228 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 2327 "f-exp.c.tmp" break; case 94: -#line 647 "f-exp.y" /* yacc.c:1646 */ - { int len = sizeof (struct type *) * (++((yyvsp[-2].ivec)[0]) + 1); +#line 647 "f-exp.y" + { int len = sizeof (struct type *) * (++((yyvsp[-2].ivec)[0]) + 1); (yyval.tvec) = (struct type **) xrealloc ((char *) (yyvsp[-2].tvec), len); (yyval.tvec)[(yyval.ivec)[0]] = (yyvsp[0].tval); } -#line 2237 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 2336 "f-exp.c.tmp" break; case 95: -#line 654 "f-exp.y" /* yacc.c:1646 */ - { (yyval.sval) = (yyvsp[0].ssym).stoken; } -#line 2243 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 654 "f-exp.y" + { (yyval.sval) = (yyvsp[0].ssym).stoken; } +#line 2342 "f-exp.c.tmp" break; -#line 2247 "f-exp.c.tmp" /* yacc.c:1646 */ +#line 2346 "f-exp.c.tmp" + default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -2267,14 +2367,13 @@ /* Now 'shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ - - yyn = yyr1[yyn]; - - yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; - if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) - yystate = yytable[yystate]; - else - yystate = yydefgoto[yyn - YYNTOKENS]; + { + const int yylhs = yyr1[yyn] - YYNTOKENS; + const int yyi = yypgoto[yylhs] + *yyssp; + yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp + ? yytable[yyi] + : yydefgoto[yylhs]); + } goto yynewstate; @@ -2306,7 +2405,7 @@ { if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); - yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc); + yymsg = YY_CAST (char *, YYSTACK_ALLOC (YY_CAST (YYSIZE_T, yymsg_alloc))); if (!yymsg) { yymsg = yymsgbuf; @@ -2357,12 +2456,10 @@ | yyerrorlab -- error raised explicitly by YYERROR. | `---------------------------------------------------*/ yyerrorlab: - - /* Pacify compilers like GCC when the user code never invokes - YYERROR and the label yyerrorlab therefore never appears in user - code. */ - if (/*CONSTCOND*/ 0) - goto yyerrorlab; + /* Pacify compilers when the user code never invokes YYERROR and the + label yyerrorlab therefore never appears in user code. */ + if (0) + YYERROR; /* Do not reclaim the symbols of the rule whose action triggered this YYERROR. */ @@ -2424,6 +2521,7 @@ yyresult = 0; goto yyreturn; + /*-----------------------------------. | yyabortlab -- YYABORT comes here. | `-----------------------------------*/ @@ -2431,6 +2529,7 @@ yyresult = 1; goto yyreturn; + #if !defined yyoverflow || YYERROR_VERBOSE /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | @@ -2441,6 +2540,10 @@ /* Fall through. */ #endif + +/*-----------------------------------------------------. +| yyreturn -- parsing is finished, return the result. | +`-----------------------------------------------------*/ yyreturn: if (yychar != YYEMPTY) { @@ -2457,7 +2560,7 @@ while (yyssp != yyss) { yydestruct ("Cleanup: popping", - yystos[*yyssp], yyvsp); + yystos[+*yyssp], yyvsp); YYPOPSTACK (1); } #ifndef yyoverflow @@ -2470,7 +2573,7 @@ #endif return yyresult; } -#line 667 "f-exp.y" /* yacc.c:1906 */ +#line 667 "f-exp.y" /* Take care of parsing a number (anything that starts with a digit). diff -Nru gdb-9.1/gdb/f-exp.y gdb-10.2/gdb/f-exp.y --- gdb-9.1/gdb/f-exp.y 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/f-exp.y 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* YACC parser for Fortran expressions, for GDB. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. Contributed by Motorola. Adapted from the C parser by Farooq Butt (fmbutt@engage.sps.mot.com). diff -Nru gdb-9.1/gdb/filename-seen-cache.c gdb-10.2/gdb/filename-seen-cache.c --- gdb-9.1/gdb/filename-seen-cache.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/filename-seen-cache.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Filename-seen cache for the GNU debugger, GDB. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/filename-seen-cache.h gdb-10.2/gdb/filename-seen-cache.h --- gdb-9.1/gdb/filename-seen-cache.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/filename-seen-cache.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Filename-seen cache for the GNU debugger, GDB. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/filesystem.c gdb-10.2/gdb/filesystem.c --- gdb-9.1/gdb/filesystem.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/filesystem.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Handle different target file systems for GDB, the GNU Debugger. - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -76,8 +76,9 @@ value); } +void _initialize_filesystem (); void -_initialize_filesystem (void) +_initialize_filesystem () { add_setshow_enum_cmd ("target-file-system-kind", class_files, diff -Nru gdb-9.1/gdb/filesystem.h gdb-10.2/gdb/filesystem.h --- gdb-9.1/gdb/filesystem.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/filesystem.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Handle different target file systems for GDB, the GNU Debugger. - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/findcmd.c gdb-10.2/gdb/findcmd.c --- gdb-9.1/gdb/findcmd.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/findcmd.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* The find command. - Copyright (C) 2008-2020 Free Software Foundation, Inc. + Copyright (C) 2008-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -280,8 +280,9 @@ found_count > 1 ? "s" : ""); } +void _initialize_mem_search (); void -_initialize_mem_search (void) +_initialize_mem_search () { add_cmd ("find", class_vars, find_command, _("\ Search memory for a sequence of bytes.\n\ diff -Nru gdb-9.1/gdb/findvar.c gdb-10.2/gdb/findvar.c --- gdb-9.1/gdb/findvar.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/findvar.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Find a variable's value in memory, for GDB, the GNU debugger. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -31,7 +31,7 @@ #include "block.h" #include "objfiles.h" #include "language.h" -#include "dwarf2loc.h" +#include "dwarf2/loc.h" #include "gdbsupport/selftest.h" /* Basic byte-swapping routines. All 'extract' functions return a @@ -153,7 +153,7 @@ CORE_ADDR extract_typed_address (const gdb_byte *buf, struct type *type) { - if (TYPE_CODE (type) != TYPE_CODE_PTR && !TYPE_IS_REFERENCE (type)) + if (type->code () != TYPE_CODE_PTR && !TYPE_IS_REFERENCE (type)) internal_error (__FILE__, __LINE__, _("extract_typed_address: " "type is not a pointer or reference")); @@ -206,7 +206,7 @@ void store_typed_address (gdb_byte *buf, struct type *type, CORE_ADDR addr) { - if (TYPE_CODE (type) != TYPE_CODE_PTR && !TYPE_IS_REFERENCE (type)) + if (type->code () != TYPE_CODE_PTR && !TYPE_IS_REFERENCE (type)) internal_error (__FILE__, __LINE__, _("store_typed_address: " "type is not a pointer or reference")); @@ -257,7 +257,7 @@ /* Return a `value' with the contents of (virtual or cooked) register REGNUM as found in the specified FRAME. The register's type is - determined by register_type(). */ + determined by register_type (). */ struct value * value_of_register (int regnum, struct frame_info *frame) @@ -277,7 +277,7 @@ /* Return a `value' with the contents of (virtual or cooked) register REGNUM as found in the specified FRAME. The register's type is - determined by register_type(). The value is not fetched. */ + determined by register_type (). The value is not fetched. */ struct value * value_of_register_lazy (struct frame_info *frame, int regnum) @@ -292,6 +292,14 @@ next_frame = get_next_frame_sentinel_okay (frame); + /* In some cases NEXT_FRAME may not have a valid frame-id yet. This can + happen if we end up trying to unwind a register as part of the frame + sniffer. The only time that we get here without a valid frame-id is + if NEXT_FRAME is an inline frame. If this is the case then we can + avoid getting into trouble here by skipping past the inline frames. */ + while (get_frame_type (next_frame) == INLINE_FRAME) + next_frame = get_next_frame_sentinel_okay (next_frame); + /* We should have a valid next frame. */ gdb_assert (frame_id_p (get_frame_id (next_frame))); @@ -578,12 +586,12 @@ return frame; } -/* A default implementation for the "la_read_var_value" hook in - the language vector which should work in most situations. */ +/* See language.h. */ struct value * -default_read_var_value (struct symbol *var, const struct block *var_block, - struct frame_info *frame) +language_defn::read_var_value (struct symbol *var, + const struct block *var_block, + struct frame_info *frame) const { struct value *v; struct type *type = SYMBOL_TYPE (var); @@ -615,7 +623,7 @@ if (is_dynamic_type (type)) { /* Value is a constant byte-sequence and needs no memory access. */ - type = resolve_dynamic_type (type, NULL, /* Unused address. */ 0); + type = resolve_dynamic_type (type, {}, /* Unused address. */ 0); } /* Put the constant back in target format. */ v = allocate_value (type); @@ -647,7 +655,7 @@ if (is_dynamic_type (type)) { /* Value is a constant byte-sequence and needs no memory access. */ - type = resolve_dynamic_type (type, NULL, /* Unused address. */ 0); + type = resolve_dynamic_type (type, {}, /* Unused address. */ 0); } v = allocate_value (type); memcpy (value_contents_raw (v), SYMBOL_VALUE_BYTES (var), @@ -788,7 +796,7 @@ case LOC_OPTIMIZED_OUT: if (is_dynamic_type (type)) - type = resolve_dynamic_type (type, NULL, /* Unused address. */ 0); + type = resolve_dynamic_type (type, {}, /* Unused address. */ 0); return allocate_optimized_out_value (type); default: @@ -801,18 +809,17 @@ return v; } -/* Calls VAR's language la_read_var_value hook with the given arguments. */ +/* Calls VAR's language read_var_value hook with the given arguments. */ struct value * read_var_value (struct symbol *var, const struct block *var_block, struct frame_info *frame) { - const struct language_defn *lang = language_def (SYMBOL_LANGUAGE (var)); + const struct language_defn *lang = language_def (var->language ()); gdb_assert (lang != NULL); - gdb_assert (lang->la_read_var_value != NULL); - return lang->la_read_var_value (var, var_block, frame); + return lang->read_var_value (var, var_block, frame); } /* Install default attributes for register values. */ @@ -1088,8 +1095,9 @@ #endif +void _initialize_findvar (); void -_initialize_findvar (void) +_initialize_findvar () { #if GDB_SELF_TEST selftests::register_test diff -Nru gdb-9.1/gdb/f-lang.c gdb-10.2/gdb/f-lang.c --- gdb-9.1/gdb/f-lang.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/f-lang.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Fortran language support routines for GDB, the GNU debugger. - Copyright (C) 1993-2020 Free Software Foundation, Inc. + Copyright (C) 1993-2021 Free Software Foundation, Inc. Contributed by Motorola. Adapted from the C parser by Farooq Butt (fmbutt@engage.sps.mot.com). @@ -41,10 +41,6 @@ /* Local functions */ -static void f_printchar (int c, struct type *type, struct ui_file * stream); -static void f_emit_char (int c, struct type *type, - struct ui_file * stream, int quoter); - /* Return the encoding that should be used for the character type TYPE. */ @@ -72,53 +68,6 @@ return encoding; } -/* Print the character C on STREAM as part of the contents of a literal - string whose delimiter is QUOTER. Note that that format for printing - characters and strings is language specific. - FIXME: This is a copy of the same function from c-exp.y. It should - be replaced with a true F77 version. */ - -static void -f_emit_char (int c, struct type *type, struct ui_file *stream, int quoter) -{ - const char *encoding = f_get_encoding (type); - - generic_emit_char (c, type, stream, quoter, encoding); -} - -/* Implementation of la_printchar. */ - -static void -f_printchar (int c, struct type *type, struct ui_file *stream) -{ - fputs_filtered ("'", stream); - LA_EMIT_CHAR (c, type, stream, '\''); - fputs_filtered ("'", stream); -} - -/* Print the character string STRING, printing at most LENGTH characters. - Printing stops early if the number hits print_max; repeat counts - are printed as appropriate. Print ellipses at the end if we - had to stop before printing LENGTH characters, or if FORCE_ELLIPSES. - FIXME: This is a copy of the same function from c-exp.y. It should - be replaced with a true F77 version. */ - -static void -f_printstr (struct ui_file *stream, struct type *type, const gdb_byte *string, - unsigned int length, const char *encoding, int force_ellipses, - const struct value_print_options *options) -{ - const char *type_encoding = f_get_encoding (type); - - if (TYPE_LENGTH (type) == 4) - fputs_filtered ("4_", stream); - - if (!encoding || !*encoding) - encoding = type_encoding; - - generic_printstr (stream, type, string, length, encoding, - force_ellipses, '\'', 0, options); -} /* Table of operators and their precedences for printing expressions. */ @@ -165,83 +114,6 @@ nr_f_primitive_types }; -static void -f_language_arch_info (struct gdbarch *gdbarch, - struct language_arch_info *lai) -{ - const struct builtin_f_type *builtin = builtin_f_type (gdbarch); - - lai->string_char_type = builtin->builtin_character; - lai->primitive_type_vector - = GDBARCH_OBSTACK_CALLOC (gdbarch, nr_f_primitive_types + 1, - struct type *); - - lai->primitive_type_vector [f_primitive_type_character] - = builtin->builtin_character; - lai->primitive_type_vector [f_primitive_type_logical] - = builtin->builtin_logical; - lai->primitive_type_vector [f_primitive_type_logical_s1] - = builtin->builtin_logical_s1; - lai->primitive_type_vector [f_primitive_type_logical_s2] - = builtin->builtin_logical_s2; - lai->primitive_type_vector [f_primitive_type_logical_s8] - = builtin->builtin_logical_s8; - lai->primitive_type_vector [f_primitive_type_real] - = builtin->builtin_real; - lai->primitive_type_vector [f_primitive_type_real_s8] - = builtin->builtin_real_s8; - lai->primitive_type_vector [f_primitive_type_real_s16] - = builtin->builtin_real_s16; - lai->primitive_type_vector [f_primitive_type_complex_s8] - = builtin->builtin_complex_s8; - lai->primitive_type_vector [f_primitive_type_complex_s16] - = builtin->builtin_complex_s16; - lai->primitive_type_vector [f_primitive_type_void] - = builtin->builtin_void; - - lai->bool_type_symbol = "logical"; - lai->bool_type_default = builtin->builtin_logical_s2; -} - -/* Remove the modules separator :: from the default break list. */ - -static const char * -f_word_break_characters (void) -{ - static char *retval; - - if (!retval) - { - char *s; - - retval = xstrdup (default_word_break_characters ()); - s = strchr (retval, ':'); - if (s) - { - char *last_char = &s[strlen (s) - 1]; - - *s = *last_char; - *last_char = 0; - } - } - return retval; -} - -/* Consider the modules separator :: as a valid symbol name character - class. */ - -static void -f_collect_symbol_completion_matches (completion_tracker &tracker, - complete_symbol_mode mode, - symbol_name_match_type compare_name, - const char *text, const char *word, - enum type_code code) -{ - default_collect_symbol_completion_matches_break_on (tracker, mode, - compare_name, - text, word, ":", code); -} - /* Special expression evaluation cases for Fortran. */ static struct value * @@ -264,11 +136,11 @@ return evaluate_subexp_standard (expect_type, exp, pos, noside); case UNOP_ABS: - arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside); + arg1 = evaluate_subexp (nullptr, exp, pos, noside); if (noside == EVAL_SKIP) return eval_skip_value (exp); type = value_type (arg1); - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_FLT: { @@ -287,14 +159,14 @@ error (_("ABS of type %s not supported"), TYPE_SAFE_NAME (type)); case BINOP_MOD: - arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside); + arg1 = evaluate_subexp (nullptr, exp, pos, noside); arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside); if (noside == EVAL_SKIP) return eval_skip_value (exp); type = value_type (arg1); - if (TYPE_CODE (type) != TYPE_CODE (value_type (arg2))) + if (type->code () != value_type (arg2)->code ()) error (_("non-matching types for parameters to MOD ()")); - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_FLT: { @@ -321,11 +193,11 @@ case UNOP_FORTRAN_CEILING: { - arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside); + arg1 = evaluate_subexp (nullptr, exp, pos, noside); if (noside == EVAL_SKIP) return eval_skip_value (exp); type = value_type (arg1); - if (TYPE_CODE (type) != TYPE_CODE_FLT) + if (type->code () != TYPE_CODE_FLT) error (_("argument to CEILING must be of type float")); double val = target_float_to_host_double (value_contents (arg1), @@ -336,11 +208,11 @@ case UNOP_FORTRAN_FLOOR: { - arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside); + arg1 = evaluate_subexp (nullptr, exp, pos, noside); if (noside == EVAL_SKIP) return eval_skip_value (exp); type = value_type (arg1); - if (TYPE_CODE (type) != TYPE_CODE_FLT) + if (type->code () != TYPE_CODE_FLT) error (_("argument to FLOOR must be of type float")); double val = target_float_to_host_double (value_contents (arg1), @@ -351,15 +223,15 @@ case BINOP_FORTRAN_MODULO: { - arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside); + arg1 = evaluate_subexp (nullptr, exp, pos, noside); arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside); if (noside == EVAL_SKIP) return eval_skip_value (exp); type = value_type (arg1); - if (TYPE_CODE (type) != TYPE_CODE (value_type (arg2))) + if (type->code () != value_type (arg2)->code ()) error (_("non-matching types for parameters to MODULO ()")); /* MODULO(A, P) = A - FLOOR (A / P) * P */ - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_INT: { @@ -388,7 +260,7 @@ } case BINOP_FORTRAN_CMPLX: - arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside); + arg1 = evaluate_subexp (nullptr, exp, pos, noside); arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside); if (noside == EVAL_SKIP) return eval_skip_value (exp); @@ -399,7 +271,7 @@ arg1 = evaluate_subexp (NULL, exp, pos, EVAL_AVOID_SIDE_EFFECTS); type = value_type (arg1); - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_STRUCT: case TYPE_CODE_UNION: @@ -412,24 +284,13 @@ return value_from_longest (builtin_type (exp->gdbarch)->builtin_int, TYPE_LENGTH (type)); return value_from_longest (builtin_type (exp->gdbarch)->builtin_int, - TYPE_LENGTH (TYPE_TARGET_TYPE(type))); + TYPE_LENGTH (TYPE_TARGET_TYPE (type))); } /* Should be unreachable. */ return nullptr; } -/* Return true if TYPE is a string. */ - -static bool -f_is_string_type_p (struct type *type) -{ - type = check_typedef (type); - return (TYPE_CODE (type) == TYPE_CODE_STRING - || (TYPE_CODE (type) == TYPE_CODE_ARRAY - && TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_CHAR)); -} - /* Special expression lengths for Fortran. */ static void @@ -628,7 +489,9 @@ evaluate_subexp_f }; -extern const struct language_defn f_language_defn = +/* Constant data that describes the Fortran language. */ + +extern const struct language_data f_language_data = { "fortran", "Fortran", @@ -639,50 +502,226 @@ macro_expansion_no, f_extensions, &exp_descriptor_f, - f_parse, /* parser */ - null_post_parser, - f_printchar, /* Print character constant */ - f_printstr, /* function to print string constant */ - f_emit_char, /* Function to print a single character */ - f_print_type, /* Print a type using appropriate syntax */ - f_print_typedef, /* Print a typedef using appropriate syntax */ - f_val_print, /* Print a value using appropriate syntax */ - c_value_print, /* FIXME */ - default_read_var_value, /* la_read_var_value */ - NULL, /* Language specific skip_trampoline */ NULL, /* name_of_this */ false, /* la_store_sym_names_in_linkage_form_p */ - cp_lookup_symbol_nonlocal, /* lookup_symbol_nonlocal */ - basic_lookup_transparent_type,/* lookup_transparent_type */ - - /* We could support demangling here to provide module namespaces - also for inferiors with only minimal symbol table (ELF symbols). - Just the mangling standard is not standardized across compilers - and there is no DW_AT_producer available for inferiors with only - the ELF symbols to check the mangling kind. */ - NULL, /* Language specific symbol demangler */ - NULL, - NULL, /* Language specific - class_name_from_physname */ f_op_print_tab, /* expression operators for printing */ 0, /* arrays are first-class (not c-style) */ 1, /* String lower bound */ - f_word_break_characters, - f_collect_symbol_completion_matches, - f_language_arch_info, - default_print_array_index, - default_pass_by_reference, - c_watch_location_expression, - cp_get_symbol_name_matcher, /* la_get_symbol_name_matcher */ - iterate_over_symbols, - cp_search_name_hash, &default_varobj_ops, - NULL, - NULL, - f_is_string_type_p, "(...)" /* la_struct_too_deep_ellipsis */ }; +/* Class representing the Fortran language. */ + +class f_language : public language_defn +{ +public: + f_language () + : language_defn (language_fortran, f_language_data) + { /* Nothing. */ } + + /* See language.h. */ + void language_arch_info (struct gdbarch *gdbarch, + struct language_arch_info *lai) const override + { + const struct builtin_f_type *builtin = builtin_f_type (gdbarch); + + lai->string_char_type = builtin->builtin_character; + lai->primitive_type_vector + = GDBARCH_OBSTACK_CALLOC (gdbarch, nr_f_primitive_types + 1, + struct type *); + + lai->primitive_type_vector [f_primitive_type_character] + = builtin->builtin_character; + lai->primitive_type_vector [f_primitive_type_logical] + = builtin->builtin_logical; + lai->primitive_type_vector [f_primitive_type_logical_s1] + = builtin->builtin_logical_s1; + lai->primitive_type_vector [f_primitive_type_logical_s2] + = builtin->builtin_logical_s2; + lai->primitive_type_vector [f_primitive_type_logical_s8] + = builtin->builtin_logical_s8; + lai->primitive_type_vector [f_primitive_type_real] + = builtin->builtin_real; + lai->primitive_type_vector [f_primitive_type_real_s8] + = builtin->builtin_real_s8; + lai->primitive_type_vector [f_primitive_type_real_s16] + = builtin->builtin_real_s16; + lai->primitive_type_vector [f_primitive_type_complex_s8] + = builtin->builtin_complex_s8; + lai->primitive_type_vector [f_primitive_type_complex_s16] + = builtin->builtin_complex_s16; + lai->primitive_type_vector [f_primitive_type_void] + = builtin->builtin_void; + + lai->bool_type_symbol = "logical"; + lai->bool_type_default = builtin->builtin_logical_s2; + } + + /* See language.h. */ + unsigned int search_name_hash (const char *name) const override + { + return cp_search_name_hash (name); + } + + /* See language.h. */ + + char *demangle (const char *mangled, int options) const override + { + /* We could support demangling here to provide module namespaces + also for inferiors with only minimal symbol table (ELF symbols). + Just the mangling standard is not standardized across compilers + and there is no DW_AT_producer available for inferiors with only + the ELF symbols to check the mangling kind. */ + return nullptr; + } + + /* See language.h. */ + + void print_type (struct type *type, const char *varstring, + struct ui_file *stream, int show, int level, + const struct type_print_options *flags) const override + { + f_print_type (type, varstring, stream, show, level, flags); + } + + /* See language.h. This just returns default set of word break + characters but with the modules separator `::' removed. */ + + const char *word_break_characters (void) const override + { + static char *retval; + + if (!retval) + { + char *s; + + retval = xstrdup (language_defn::word_break_characters ()); + s = strchr (retval, ':'); + if (s) + { + char *last_char = &s[strlen (s) - 1]; + + *s = *last_char; + *last_char = 0; + } + } + return retval; + } + + + /* See language.h. */ + + void collect_symbol_completion_matches (completion_tracker &tracker, + complete_symbol_mode mode, + symbol_name_match_type name_match_type, + const char *text, const char *word, + enum type_code code) const override + { + /* Consider the modules separator :: as a valid symbol name character + class. */ + default_collect_symbol_completion_matches_break_on (tracker, mode, + name_match_type, + text, word, ":", + code); + } + + /* See language.h. */ + + void value_print_inner + (struct value *val, struct ui_file *stream, int recurse, + const struct value_print_options *options) const override + { + return f_value_print_inner (val, stream, recurse, options); + } + + /* See language.h. */ + + struct block_symbol lookup_symbol_nonlocal + (const char *name, const struct block *block, + const domain_enum domain) const override + { + return cp_lookup_symbol_nonlocal (this, name, block, domain); + } + + /* See language.h. */ + + int parser (struct parser_state *ps) const override + { + return f_parse (ps); + } + + /* See language.h. */ + + void emitchar (int ch, struct type *chtype, + struct ui_file *stream, int quoter) const override + { + const char *encoding = f_get_encoding (chtype); + generic_emit_char (ch, chtype, stream, quoter, encoding); + } + + /* See language.h. */ + + void printchar (int ch, struct type *chtype, + struct ui_file *stream) const override + { + fputs_filtered ("'", stream); + LA_EMIT_CHAR (ch, chtype, stream, '\''); + fputs_filtered ("'", stream); + } + + /* See language.h. */ + + void printstr (struct ui_file *stream, struct type *elttype, + const gdb_byte *string, unsigned int length, + const char *encoding, int force_ellipses, + const struct value_print_options *options) const override + { + const char *type_encoding = f_get_encoding (elttype); + + if (TYPE_LENGTH (elttype) == 4) + fputs_filtered ("4_", stream); + + if (!encoding || !*encoding) + encoding = type_encoding; + + generic_printstr (stream, elttype, string, length, encoding, + force_ellipses, '\'', 0, options); + } + + /* See language.h. */ + + void print_typedef (struct type *type, struct symbol *new_symbol, + struct ui_file *stream) const override + { + f_print_typedef (type, new_symbol, stream); + } + + /* See language.h. */ + + bool is_string_type_p (struct type *type) const override + { + type = check_typedef (type); + return (type->code () == TYPE_CODE_STRING + || (type->code () == TYPE_CODE_ARRAY + && TYPE_TARGET_TYPE (type)->code () == TYPE_CODE_CHAR)); + } + +protected: + + /* See language.h. */ + + symbol_name_matcher_ftype *get_symbol_name_matcher_inner + (const lookup_name_info &lookup_name) const override + { + return cp_get_symbol_name_matcher (lookup_name); + } +}; + +/* Single instance of the Fortran language class. */ + +static f_language f_language_defn; + static void * build_fortran_types (struct gdbarch *gdbarch) { @@ -741,14 +780,16 @@ = arch_type (gdbarch, TYPE_CODE_ERROR, 128, "real*16"); builtin_f_type->builtin_complex_s8 - = arch_complex_type (gdbarch, "complex*8", - builtin_f_type->builtin_real); + = init_complex_type ("complex*8", builtin_f_type->builtin_real); builtin_f_type->builtin_complex_s16 - = arch_complex_type (gdbarch, "complex*16", - builtin_f_type->builtin_real_s8); - builtin_f_type->builtin_complex_s32 - = arch_complex_type (gdbarch, "complex*32", - builtin_f_type->builtin_real_s16); + = init_complex_type ("complex*16", builtin_f_type->builtin_real_s8); + + if (builtin_f_type->builtin_real_s16->code () == TYPE_CODE_ERROR) + builtin_f_type->builtin_complex_s32 + = arch_type (gdbarch, TYPE_CODE_ERROR, 256, "complex*32"); + else + builtin_f_type->builtin_complex_s32 + = init_complex_type ("complex*32", builtin_f_type->builtin_real_s16); return builtin_f_type; } @@ -761,8 +802,9 @@ return (const struct builtin_f_type *) gdbarch_data (gdbarch, f_type_data); } +void _initialize_f_language (); void -_initialize_f_language (void) +_initialize_f_language () { f_type_data = gdbarch_data_register_post_init (build_fortran_types); } @@ -799,7 +841,7 @@ struct type * fortran_preserve_arg_pointer (struct value *arg, struct type *type) { - if (TYPE_CODE (value_type (arg)) == TYPE_CODE_PTR) + if (value_type (arg)->code () == TYPE_CODE_PTR) return value_type (arg); return type; } diff -Nru gdb-9.1/gdb/f-lang.h gdb-10.2/gdb/f-lang.h --- gdb-9.1/gdb/f-lang.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/f-lang.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Fortran language support definitions for GDB, the GNU debugger. - Copyright (C) 1992-2020 Free Software Foundation, Inc. + Copyright (C) 1992-2021 Free Software Foundation, Inc. Contributed by Motorola. Adapted from the C definitions by Farooq Butt (fmbutt@engage.sps.mot.com). @@ -36,10 +36,11 @@ extern void f_print_type (struct type *, const char *, struct ui_file *, int, int, const struct type_print_options *); -extern void f_val_print (struct type *, int, CORE_ADDR, - struct ui_file *, int, - struct value *, - const struct value_print_options *); +/* Implement la_value_print_inner for Fortran. */ + +extern void f_value_print_inner (struct value *val, struct ui_file *stream, + int recurse, + const struct value_print_options *options); /* Language-specific data structures */ diff -Nru gdb-9.1/gdb/fork-child.c gdb-10.2/gdb/fork-child.c --- gdb-9.1/gdb/fork-child.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/fork-child.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Fork a Unix child process, and set up to debug it, for GDB. - Copyright (C) 1990-2020 Free Software Foundation, Inc. + Copyright (C) 1990-2021 Free Software Foundation, Inc. Contributed by Cygnus Support. @@ -61,8 +61,6 @@ void prefork_hook (const char *args) { - const char *inferior_io_terminal = get_inferior_io_terminal (); - gdb_assert (saved_ui == NULL); /* Retain a copy of our UI, since the child will replace this value and if we're vforked, we have to restore it. */ @@ -70,7 +68,7 @@ /* Tell the terminal handling subsystem what tty we plan to run on; it will just record the information for later. */ - new_tty_prefork (inferior_io_terminal); + new_tty_prefork (current_inferior ()->tty ()); } /* See nat/fork-inferior.h. */ @@ -82,9 +80,6 @@ inferior_appeared (inf, pid); - /* Needed for wait_for_inferior stuff. */ - inferior_ptid = ptid_t (pid); - gdb_assert (saved_ui != NULL); current_ui = saved_ui; saved_ui = NULL; @@ -128,10 +123,13 @@ ptid_t gdb_startup_inferior (pid_t pid, int num_traps) { - ptid_t ptid = startup_inferior (pid, num_traps, NULL, NULL); + inferior *inf = current_inferior (); + process_stratum_target *proc_target = inf->process_target (); + + ptid_t ptid = startup_inferior (proc_target, pid, num_traps, NULL, NULL); /* Mark all threads non-executing. */ - set_executing (ptid, 0); + set_executing (proc_target, ptid, false); return ptid; } @@ -154,8 +152,9 @@ value); } +void _initialize_fork_child (); void -_initialize_fork_child (void) +_initialize_fork_child () { add_setshow_filename_cmd ("exec-wrapper", class_run, &exec_wrapper, _("\ Set a wrapper for running programs.\n\ diff -Nru gdb-9.1/gdb/fortran-operator.def gdb-10.2/gdb/fortran-operator.def --- gdb-9.1/gdb/fortran-operator.def 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/fortran-operator.def 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Fortran language operator definitions for GDB, the GNU debugger. - Copyright (C) 2019-2020 Free Software Foundation, Inc. + Copyright (C) 2019-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/frame-base.c gdb-10.2/gdb/frame-base.c --- gdb-9.1/gdb/frame-base.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/frame-base.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Definitions for frame address handler, for GDB, the GNU debugger. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -121,8 +121,9 @@ return table->default_base; } +void _initialize_frame_base (); void -_initialize_frame_base (void) +_initialize_frame_base () { frame_base_data = gdbarch_data_register_pre_init (frame_base_init); } diff -Nru gdb-9.1/gdb/frame-base.h gdb-10.2/gdb/frame-base.h --- gdb-9.1/gdb/frame-base.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/frame-base.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Definitions for a frame base, for GDB, the GNU debugger. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/frame.c gdb-10.2/gdb/frame.c --- gdb-9.1/gdb/frame.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/frame.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Cache and manage frames for GDB, the GNU debugger. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -53,6 +53,17 @@ static struct frame_info *sentinel_frame; +/* Number of calls to reinit_frame_cache. */ +static unsigned int frame_cache_generation = 0; + +/* See frame.h. */ + +unsigned int +get_frame_cache_generation () +{ + return frame_cache_generation; +} + /* The values behind the global "set backtrace ..." settings. */ set_backtrace_options user_set_backtrace_options; @@ -76,6 +87,18 @@ CC_UNAVAILABLE }; +enum class frame_id_status +{ + /* Frame id is not computed. */ + NOT_COMPUTED = 0, + + /* Frame id is being computed (compute_frame_id is active). */ + COMPUTING, + + /* Frame id has been computed. */ + COMPUTED, +}; + /* We keep a cache of stack frames, each of which is a "struct frame_info". The innermost one gets allocated (in wait_for_inferior) each time the inferior stops; sentinel_frame @@ -116,32 +139,32 @@ /* Cached copy of the previous frame's architecture. */ struct { - int p; + bool p; struct gdbarch *arch; } prev_arch; /* Cached copy of the previous frame's resume address. */ struct { - enum cached_copy_status status; + cached_copy_status status; /* Did VALUE require unmasking when being read. */ bool masked; CORE_ADDR value; } prev_pc; - + /* Cached copy of the previous frame's function address. */ struct { CORE_ADDR addr; - int p; + cached_copy_status status; } prev_func; - + /* This frame's ID. */ struct { - int p; + frame_id_status p; struct frame_id value; } this_id; - + /* The frame's high-level base methods, and corresponding cache. The high level base methods are selected based on the frame's debug info. */ @@ -151,7 +174,7 @@ /* Pointers to the next (down, inner, younger) and previous (up, outer, older) frame_info's in the frame cache. */ struct frame_info *next; /* down, inner, younger */ - int prev_p; + bool prev_p; struct frame_info *prev; /* up, outer, older */ /* The reason why we could not set PREV, or UNWIND_NO_REASON if we @@ -246,27 +269,24 @@ Returns false if a frame with the same ID was already stashed, true otherwise. */ -static int -frame_stash_add (struct frame_info *frame) +static bool +frame_stash_add (frame_info *frame) { - struct frame_info **slot; - /* Do not try to stash the sentinel frame. */ gdb_assert (frame->level >= 0); - slot = (struct frame_info **) htab_find_slot (frame_stash, - frame, - INSERT); + frame_info **slot = (struct frame_info **) htab_find_slot (frame_stash, + frame, INSERT); /* If we already have a frame in the stack with the same id, we either have a stack cycle (corrupted stack?), or some bug elsewhere in GDB. In any case, ignore the duplicate and return an indication to the caller. */ - if (*slot != NULL) - return 0; + if (*slot != nullptr) + return false; *slot = frame; - return 1; + return true; } /* Internal function to search the frame stash for an entry with the @@ -376,8 +396,11 @@ fprintf_unfiltered (file, "stack=<unavailable>"); else if (id.stack_status == FID_STACK_SENTINEL) fprintf_unfiltered (file, "stack=<sentinel>"); + else if (id.stack_status == FID_STACK_OUTER) + fprintf_unfiltered (file, "stack=<outer>"); else fprintf_unfiltered (file, "stack=%s", hex_string (id.stack_addr)); + fprintf_unfiltered (file, ","); fprint_field (file, "code", id.code_addr_p, id.code_addr); @@ -431,21 +454,25 @@ fprintf_unfiltered (file, "<NULL frame>"); return; } + fprintf_unfiltered (file, "{"); fprintf_unfiltered (file, "level=%d", fi->level); fprintf_unfiltered (file, ","); + fprintf_unfiltered (file, "type="); if (fi->unwind != NULL) fprint_frame_type (file, fi->unwind->type); else fprintf_unfiltered (file, "<unknown>"); fprintf_unfiltered (file, ","); + fprintf_unfiltered (file, "unwind="); if (fi->unwind != NULL) gdb_print_host_address (fi->unwind, file); else fprintf_unfiltered (file, "<unknown>"); fprintf_unfiltered (file, ","); + fprintf_unfiltered (file, "pc="); if (fi->next == NULL || fi->next->prev_pc.status == CC_UNKNOWN) fprintf_unfiltered (file, "<unknown>"); @@ -460,14 +487,18 @@ else if (fi->next->prev_pc.status == CC_UNAVAILABLE) val_print_unavailable (file); fprintf_unfiltered (file, ","); + fprintf_unfiltered (file, "id="); - if (fi->this_id.p) - fprint_frame_id (file, fi->this_id.value); + if (fi->this_id.p == frame_id_status::NOT_COMPUTED) + fprintf_unfiltered (file, "<not computed>"); + else if (fi->this_id.p == frame_id_status::COMPUTING) + fprintf_unfiltered (file, "<computing>"); else - fprintf_unfiltered (file, "<unknown>"); + fprint_frame_id (file, fi->this_id.value); fprintf_unfiltered (file, ","); + fprintf_unfiltered (file, "func="); - if (fi->next != NULL && fi->next->prev_func.p) + if (fi->next != NULL && fi->next->prev_func.status == CC_VALUE) fprintf_unfiltered (file, "%s", hex_string (fi->next->prev_func.addr)); else fprintf_unfiltered (file, "<unknown>"); @@ -536,25 +567,48 @@ static void compute_frame_id (struct frame_info *fi) { - gdb_assert (!fi->this_id.p); + gdb_assert (fi->this_id.p == frame_id_status::NOT_COMPUTED); - if (frame_debug) - fprintf_unfiltered (gdb_stdlog, "{ compute_frame_id (fi=%d) ", - fi->level); - /* Find the unwinder. */ - if (fi->unwind == NULL) - frame_unwind_find_by_frame (fi, &fi->prologue_cache); - /* Find THIS frame's ID. */ - /* Default to outermost if no ID is found. */ - 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)); - fi->this_id.p = 1; - if (frame_debug) + unsigned int entry_generation = get_frame_cache_generation (); + + try { - fprintf_unfiltered (gdb_stdlog, "-> "); - fprint_frame_id (gdb_stdlog, fi->this_id.value); - fprintf_unfiltered (gdb_stdlog, " }\n"); + /* Mark this frame's id as "being computed. */ + fi->this_id.p = frame_id_status::COMPUTING; + + if (frame_debug) + fprintf_unfiltered (gdb_stdlog, "{ compute_frame_id (fi=%d) ", + fi->level); + + /* Find the unwinder. */ + if (fi->unwind == NULL) + frame_unwind_find_by_frame (fi, &fi->prologue_cache); + + /* Find THIS frame's ID. */ + /* Default to outermost if no ID is found. */ + 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)); + + /* Mark this frame's id as "computed". */ + fi->this_id.p = frame_id_status::COMPUTED; + + if (frame_debug) + { + fprintf_unfiltered (gdb_stdlog, "-> "); + fprint_frame_id (gdb_stdlog, fi->this_id.value); + fprintf_unfiltered (gdb_stdlog, " }\n"); + } + } + catch (const gdb_exception &ex) + { + /* On error, revert the frame id status to not computed. If the frame + cache generation changed, the frame object doesn't exist anymore, so + don't touch it. */ + if (get_frame_cache_generation () == entry_generation) + fi->this_id.p = frame_id_status::NOT_COMPUTED; + + throw; } } @@ -567,10 +621,12 @@ if (fi == NULL) return null_frame_id; - if (!fi->this_id.p) - { - int stashed; + /* It's always invalid to try to get a frame's id while it is being + computed. */ + gdb_assert (fi->this_id.p != frame_id_status::COMPUTING); + if (fi->this_id.p == frame_id_status::NOT_COMPUTED) + { /* If we haven't computed the frame id yet, then it must be that this is the current frame. Compute it now, and stash the result. The IDs of other frames are computed as soon as @@ -583,7 +639,7 @@ /* Since this is the first frame in the chain, this should always succeed. */ - stashed = frame_stash_add (fi); + bool stashed = frame_stash_add (fi); gdb_assert (stashed); } @@ -619,7 +675,7 @@ const struct frame_id null_frame_id = { 0 }; /* All zeros. */ const struct frame_id sentinel_frame_id = { 0, 0, 0, FID_STACK_SENTINEL, 0, 1, 0 }; -const struct frame_id outer_frame_id = { 0, 0, 0, FID_STACK_INVALID, 0, 1, 0 }; +const struct frame_id outer_frame_id = { 0, 0, 0, FID_STACK_OUTER, 0, 1, 0 }; struct frame_id frame_id_build_special (CORE_ADDR stack_addr, CORE_ADDR code_addr, @@ -630,9 +686,9 @@ id.stack_addr = stack_addr; id.stack_status = FID_STACK_VALID; id.code_addr = code_addr; - id.code_addr_p = 1; + id.code_addr_p = true; id.special_addr = special_addr; - id.special_addr_p = 1; + id.special_addr_p = true; return id; } @@ -645,7 +701,7 @@ id.stack_status = FID_STACK_UNAVAILABLE; id.code_addr = code_addr; - id.code_addr_p = 1; + id.code_addr_p = true; return id; } @@ -659,9 +715,9 @@ id.stack_status = FID_STACK_UNAVAILABLE; id.code_addr = code_addr; - id.code_addr_p = 1; + id.code_addr_p = true; id.special_addr = special_addr; - id.special_addr_p = 1; + id.special_addr_p = true; return id; } @@ -673,7 +729,7 @@ id.stack_addr = stack_addr; id.stack_status = FID_STACK_VALID; id.code_addr = code_addr; - id.code_addr_p = 1; + id.code_addr_p = true; return id; } @@ -687,70 +743,59 @@ return id; } -int -frame_id_p (struct frame_id l) +bool +frame_id_p (frame_id l) { - int p; - /* The frame is valid iff it has a valid stack address. */ - p = l.stack_status != FID_STACK_INVALID; - /* outer_frame_id is also valid. */ - if (!p && memcmp (&l, &outer_frame_id, sizeof (l)) == 0) - p = 1; + bool p = l.stack_status != FID_STACK_INVALID; + if (frame_debug) { fprintf_unfiltered (gdb_stdlog, "{ frame_id_p (l="); fprint_frame_id (gdb_stdlog, l); fprintf_unfiltered (gdb_stdlog, ") -> %d }\n", p); } + return p; } -int -frame_id_artificial_p (struct frame_id l) +bool +frame_id_artificial_p (frame_id l) { if (!frame_id_p (l)) - return 0; + return false; - return (l.artificial_depth != 0); + return l.artificial_depth != 0; } -int -frame_id_eq (struct frame_id l, struct frame_id r) +bool +frame_id_eq (frame_id l, frame_id r) { - int eq; + bool eq; - if (l.stack_status == FID_STACK_INVALID && l.special_addr_p - && r.stack_status == FID_STACK_INVALID && r.special_addr_p) - /* The outermost frame marker is equal to itself. This is the - dodgy thing about outer_frame_id, since between execution steps - we might step into another function - from which we can't - unwind either. More thought required to get rid of - outer_frame_id. */ - eq = 1; - else if (l.stack_status == FID_STACK_INVALID - || r.stack_status == FID_STACK_INVALID) + if (l.stack_status == FID_STACK_INVALID + || r.stack_status == FID_STACK_INVALID) /* Like a NaN, if either ID is invalid, the result is false. Note that a frame ID is invalid iff it is the null frame ID. */ - eq = 0; + eq = false; else if (l.stack_status != r.stack_status || l.stack_addr != r.stack_addr) /* If .stack addresses are different, the frames are different. */ - eq = 0; + eq = false; else if (l.code_addr_p && r.code_addr_p && l.code_addr != r.code_addr) /* An invalid code addr is a wild card. If .code addresses are different, the frames are different. */ - eq = 0; + eq = false; else if (l.special_addr_p && r.special_addr_p && l.special_addr != r.special_addr) /* An invalid special addr is a wild card (or unused). Otherwise if special addresses are different, the frames are different. */ - eq = 0; + eq = false; else if (l.artificial_depth != r.artificial_depth) /* If artificial depths are different, the frames must be different. */ - eq = 0; + eq = false; else /* Frames are equal. */ - eq = 1; + eq = true; if (frame_debug) { @@ -760,6 +805,7 @@ fprint_frame_id (gdb_stdlog, r); fprintf_unfiltered (gdb_stdlog, ") -> %d }\n", eq); } + return eq; } @@ -795,15 +841,15 @@ a stack overflow strategy that cause the handler to be run on a different stack. */ -static int +static bool frame_id_inner (struct gdbarch *gdbarch, struct frame_id l, struct frame_id r) { - int inner; + bool inner; if (l.stack_status != FID_STACK_VALID || r.stack_status != FID_STACK_VALID) /* Like NaN, any operation involving an invalid ID always fails. Likewise if either ID has an unavailable stack address. */ - inner = 0; + inner = false; else if (l.artificial_depth > r.artificial_depth && l.stack_addr == r.stack_addr && l.code_addr_p == r.code_addr_p @@ -820,7 +866,7 @@ if (lb == NULL || rb == NULL) /* Something's gone wrong. */ - inner = 0; + inner = false; else /* This will return true if LB and RB are the same block, or if the block with the smaller depth lexically encloses the @@ -833,6 +879,7 @@ functions are not strictly inner than (same .stack but different .code and/or .special address). */ inner = gdbarch_inner_than (gdbarch, l.stack_addr, r.stack_addr); + if (frame_debug) { fprintf_unfiltered (gdb_stdlog, "{ frame_id_inner (l="); @@ -841,6 +888,7 @@ fprint_frame_id (gdb_stdlog, r); fprintf_unfiltered (gdb_stdlog, ") -> %d }\n", inner); } + return inner; } @@ -903,7 +951,7 @@ { struct gdbarch *prev_gdbarch; CORE_ADDR pc = 0; - int pc_p = 0; + bool pc_p = false; /* The right way. The `pure' way. The one true way. This method depends solely on the register-unwind code to @@ -926,7 +974,7 @@ try { pc = gdbarch_unwind_pc (prev_gdbarch, this_frame); - pc_p = 1; + pc_p = true; } catch (const gdb_exception_error &ex) { @@ -992,12 +1040,12 @@ return frame_unwind_pc (this_frame); } -int -get_frame_func_if_available (struct frame_info *this_frame, CORE_ADDR *pc) +bool +get_frame_func_if_available (frame_info *this_frame, CORE_ADDR *pc) { struct frame_info *next_frame = this_frame->next; - if (!next_frame->prev_func.p) + if (next_frame->prev_func.status == CC_UNKNOWN) { CORE_ADDR addr_in_block; @@ -1005,7 +1053,7 @@ found. */ if (!get_frame_address_in_block_if_available (this_frame, &addr_in_block)) { - next_frame->prev_func.p = -1; + next_frame->prev_func.status = CC_UNAVAILABLE; if (frame_debug) fprintf_unfiltered (gdb_stdlog, "{ get_frame_func (this_frame=%d)" @@ -1014,7 +1062,7 @@ } else { - next_frame->prev_func.p = 1; + next_frame->prev_func.status = CC_VALUE; next_frame->prev_func.addr = get_pc_function_start (addr_in_block); if (frame_debug) fprintf_unfiltered (gdb_stdlog, @@ -1024,15 +1072,17 @@ } } - if (next_frame->prev_func.p < 0) + if (next_frame->prev_func.status == CC_UNAVAILABLE) { *pc = -1; - return 0; + return false; } else { + gdb_assert (next_frame->prev_func.status == CC_VALUE); + *pc = next_frame->prev_func.addr; - return 1; + return true; } } @@ -1236,7 +1286,7 @@ if (value_optimized_out (value)) { fprintf_unfiltered (gdb_stdlog, " "); - val_print_optimized_out (value, gdb_stdlog); + val_print_not_saved (gdb_stdlog); } else { @@ -1345,8 +1395,8 @@ return frame_unwind_register_unsigned (frame->next, regnum); } -int -read_frame_register_unsigned (struct frame_info *frame, int regnum, +bool +read_frame_register_unsigned (frame_info *frame, int regnum, ULONGEST *val) { struct value *regval = get_frame_register_value (frame, regnum); @@ -1359,10 +1409,10 @@ int size = register_size (gdbarch, VALUE_REGNUM (regval)); *val = extract_unsigned_integer (value_contents (regval), size, byte_order); - return 1; + return true; } - return 0; + return false; } void @@ -1403,9 +1453,9 @@ Returns 0 if the register value could not be found. */ -int -deprecated_frame_register_read (struct frame_info *frame, int regnum, - gdb_byte *myaddr) +bool +deprecated_frame_register_read (frame_info *frame, int regnum, + gdb_byte *myaddr) { int optimized; int unavailable; @@ -1419,8 +1469,8 @@ return !optimized && !unavailable; } -int -get_frame_register_bytes (struct frame_info *frame, int regnum, +bool +get_frame_register_bytes (frame_info *frame, int regnum, CORE_ADDR offset, int len, gdb_byte *myaddr, int *optimizedp, int *unavailablep) { @@ -1469,7 +1519,7 @@ frame_register (frame, regnum, optimizedp, unavailablep, &lval, &addr, &realnum, myaddr); if (*optimizedp || *unavailablep) - return 0; + return false; } else { @@ -1482,8 +1532,9 @@ if (*optimizedp || *unavailablep) { release_value (value); - return 0; + return false; } + memcpy (myaddr, value_contents_all (value) + offset, curr_len); release_value (value); } @@ -1496,7 +1547,8 @@ *optimizedp = 0; *unavailablep = 0; - return 1; + + return true; } void @@ -1563,7 +1615,7 @@ (the unwound PC is the same as the pc), so make it so. */ frame->next = frame; /* The sentinel frame has a special ID. */ - frame->this_id.p = 1; + frame->this_id.p = frame_id_status::COMPUTED; frame->this_id.value = sentinel_frame_id; if (frame_debug) { @@ -1637,30 +1689,30 @@ static struct frame_info *selected_frame; -int -has_stack_frames (void) +bool +has_stack_frames () { if (!target_has_registers || !target_has_stack || !target_has_memory) - return 0; + return false; /* Traceframes are effectively a substitute for the live inferior. */ if (get_traceframe_number () < 0) { /* No current inferior, no frame. */ if (inferior_ptid == null_ptid) - return 0; + return false; thread_info *tp = inferior_thread (); /* Don't try to read from a dead thread. */ if (tp->state == THREAD_EXITED) - return 0; + return false; /* ... or from a spinning thread. */ if (tp->executing) - return 0; + return false; } - return 1; + return true; } /* Return the selected frame. Always non-NULL (unless there isn't an @@ -1783,7 +1835,7 @@ based on the PC. */ frame_unwind_find_by_frame (fi, &fi->prologue_cache); - fi->this_id.p = 1; + fi->this_id.p = frame_id_status::COMPUTED; fi->this_id.value = frame_id_build (addr, pc); if (frame_debug) @@ -1843,6 +1895,8 @@ { struct frame_info *fi; + ++frame_cache_generation; + /* Tear down all frame caches. */ for (fi = sentinel_frame; fi != NULL; fi = fi->prev) { @@ -1922,6 +1976,8 @@ if (prev_frame->level == 0) return prev_frame; + unsigned int entry_generation = get_frame_cache_generation (); + try { compute_frame_id (prev_frame); @@ -1944,8 +2000,11 @@ } catch (const gdb_exception &ex) { - prev_frame->next = NULL; - this_frame->prev = NULL; + if (get_frame_cache_generation () == entry_generation) + { + prev_frame->next = NULL; + this_frame->prev = NULL; + } throw; } @@ -1994,7 +2053,7 @@ if (this_frame->unwind == NULL) frame_unwind_find_by_frame (this_frame, &this_frame->prologue_cache); - this_frame->prev_p = 1; + this_frame->prev_p = true; this_frame->stop_reason = UNWIND_NO_REASON; /* If we are unwinding from an inline frame, all of the below tests @@ -2229,34 +2288,36 @@ /* Is this (non-sentinel) frame in the "main"() function? */ -static int -inside_main_func (struct frame_info *this_frame) +static bool +inside_main_func (frame_info *this_frame) { - struct bound_minimal_symbol msymbol; - CORE_ADDR maddr; + if (symfile_objfile == nullptr) + return false; + + bound_minimal_symbol msymbol + = lookup_minimal_symbol (main_name (), NULL, symfile_objfile); + if (msymbol.minsym == nullptr) + return false; - if (symfile_objfile == 0) - return 0; - msymbol = lookup_minimal_symbol (main_name (), NULL, symfile_objfile); - if (msymbol.minsym == NULL) - return 0; /* Make certain that the code, and not descriptor, address is returned. */ - maddr = gdbarch_convert_from_func_ptr_addr (get_frame_arch (this_frame), - BMSYMBOL_VALUE_ADDRESS (msymbol), - current_top_target ()); + CORE_ADDR maddr + = gdbarch_convert_from_func_ptr_addr (get_frame_arch (this_frame), + BMSYMBOL_VALUE_ADDRESS (msymbol), + current_top_target ()); + return maddr == get_frame_func (this_frame); } /* Test whether THIS_FRAME is inside the process entry point function. */ -static int -inside_entry_func (struct frame_info *this_frame) +static bool +inside_entry_func (frame_info *this_frame) { CORE_ADDR entry_point; if (!entry_point_address_query (&entry_point)) - return 0; + return false; return get_frame_func (this_frame) == entry_point; } @@ -2399,8 +2460,8 @@ return frame_unwind_pc (frame->next); } -int -get_frame_pc_if_available (struct frame_info *frame, CORE_ADDR *pc) +bool +get_frame_pc_if_available (frame_info *frame, CORE_ADDR *pc) { gdb_assert (frame->next != NULL); @@ -2412,12 +2473,12 @@ catch (const gdb_exception_error &ex) { if (ex.error == NOT_AVAILABLE_ERROR) - return 0; + return false; else throw; } - return 1; + return true; } /* Return an address that falls within THIS_FRAME's code block. */ @@ -2482,8 +2543,8 @@ return pc; } -int -get_frame_address_in_block_if_available (struct frame_info *this_frame, +bool +get_frame_address_in_block_if_available (frame_info *this_frame, CORE_ADDR *pc) { @@ -2494,11 +2555,11 @@ catch (const gdb_exception_error &ex) { if (ex.error == NOT_AVAILABLE_ERROR) - return 0; + return false; throw; } - return 1; + return true; } symtab_and_line @@ -2508,14 +2569,15 @@ int notcurrent; CORE_ADDR pc; - /* If the next frame represents an inlined function call, this frame's - sal is the "call site" of that inlined function, which can not - be inferred from get_frame_pc. */ - next_frame = get_next_frame (frame); if (frame_inlined_callees (frame) > 0) { struct symbol *sym; + /* If the current frame has some inlined callees, and we have a next + frame, then that frame must be an inlined frame. In this case + this frame's sal is the "call site" of the next frame's inlined + function, which can not be inferred from get_frame_pc. */ + next_frame = get_next_frame (frame); if (next_frame) sym = get_frame_function (next_frame); else @@ -2613,11 +2675,12 @@ /* Return true if the frame unwinder for frame FI is UNWINDER; false otherwise. */ -int -frame_unwinder_is (struct frame_info *fi, const struct frame_unwind *unwinder) +bool +frame_unwinder_is (frame_info *fi, const frame_unwind *unwinder) { - if (fi->unwind == NULL) + if (fi->unwind == nullptr) frame_unwind_find_by_frame (fi, &fi->prologue_cache); + return fi->unwind == unwinder; } @@ -2695,12 +2758,12 @@ return read_memory_unsigned_integer (addr, len, byte_order); } -int +bool safe_frame_unwind_memory (struct frame_info *this_frame, CORE_ADDR addr, gdb_byte *buf, int len) { /* NOTE: target_read_memory returns zero on success! */ - return !target_read_memory (addr, buf, len); + return target_read_memory (addr, buf, len) == 0; } /* Architecture methods. */ @@ -2728,7 +2791,7 @@ arch = get_frame_arch (next_frame); next_frame->prev_arch.arch = arch; - next_frame->prev_arch.p = 1; + next_frame->prev_arch.p = true; if (frame_debug) fprintf_unfiltered (gdb_stdlog, "{ frame_unwind_arch (next_frame=%d) -> %s }\n", @@ -2758,7 +2821,7 @@ get_frame_language (struct frame_info *frame) { CORE_ADDR pc = 0; - int pc_p = 0; + bool pc_p = false; gdb_assert (frame!= NULL); @@ -2774,7 +2837,7 @@ try { pc = get_frame_address_in_block (frame); - pc_p = 1; + pc_p = true; } catch (const gdb_exception_error &ex) { @@ -2883,13 +2946,13 @@ gdb_assert (!frame->prev_p); /* The sniffer should not check the frame's ID; that's circular. */ - gdb_assert (!frame->this_id.p); + gdb_assert (frame->this_id.p != frame_id_status::COMPUTED); /* Clear cached fields dependent on the unwinder. The previous PC is independent of the unwinder, but the previous function is not (see get_frame_address_in_block). */ - frame->prev_func.p = 0; + frame->prev_func.status = CC_UNKNOWN; frame->prev_func.addr = 0; /* Discard the unwinder last, so that we can easily find it if an assertion @@ -2912,19 +2975,6 @@ static struct cmd_list_element *set_backtrace_cmdlist; static struct cmd_list_element *show_backtrace_cmdlist; -static void -set_backtrace_cmd (const char *args, int from_tty) -{ - help_list (set_backtrace_cmdlist, "set backtrace ", all_commands, - gdb_stdout); -} - -static void -show_backtrace_cmd (const char *args, int from_tty) -{ - cmd_show_list (show_backtrace_cmdlist, from_tty, ""); -} - /* Definition of the "set backtrace" settings that are exposed as "backtrace" command options. */ @@ -2958,8 +3008,9 @@ }, }; +void _initialize_frame (); void -_initialize_frame (void) +_initialize_frame () { obstack_init (&frame_cache_obstack); @@ -2967,16 +3018,16 @@ gdb::observers::target_changed.attach (frame_observer_target_changed); - add_prefix_cmd ("backtrace", class_maintenance, set_backtrace_cmd, _("\ + add_basic_prefix_cmd ("backtrace", class_maintenance, _("\ Set backtrace specific variables.\n\ Configure backtrace variables such as the backtrace limit"), - &set_backtrace_cmdlist, "set backtrace ", - 0/*allow-unknown*/, &setlist); - add_prefix_cmd ("backtrace", class_maintenance, show_backtrace_cmd, _("\ + &set_backtrace_cmdlist, "set backtrace ", + 0/*allow-unknown*/, &setlist); + add_show_prefix_cmd ("backtrace", class_maintenance, _("\ Show backtrace specific variables.\n\ Show backtrace variables such as the backtrace limit."), - &show_backtrace_cmdlist, "show backtrace ", - 0/*allow-unknown*/, &showlist); + &show_backtrace_cmdlist, "show backtrace ", + 0/*allow-unknown*/, &showlist); add_setshow_uinteger_cmd ("limit", class_obscure, &user_set_backtrace_options.backtrace_limit, _("\ diff -Nru gdb-9.1/gdb/frame.h gdb-10.2/gdb/frame.h --- gdb-9.1/gdb/frame.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/frame.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Definitions for dealing with stack frames, for GDB, the GNU debugger. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -45,8 +45,8 @@ strongly hinting at its unsafeness) safe_....(): Safer version of various functions, doesn't throw an - error (leave this for later?). Returns non-zero / non-NULL if the - request succeeds, zero / NULL otherwize. + error (leave this for later?). Returns true / non-NULL if the request + succeeds, false / NULL otherwise. Suffixes: @@ -85,8 +85,7 @@ enum frame_id_stack_status { - /* Stack address is invalid. E.g., this frame is the outermost - (i.e., _start), and the stack hasn't been setup yet. */ + /* Stack address is invalid. */ FID_STACK_INVALID = 0, /* Stack address is valid, and is found in the stack_addr field. */ @@ -95,6 +94,12 @@ /* Sentinel frame. */ FID_STACK_SENTINEL = 2, + /* Outer frame. Since a frame's stack address is typically defined as the + value the stack pointer had prior to the activation of the frame, an outer + frame doesn't have a stack address. The frame ids of frames inlined in the + outer frame are also of this type. */ + FID_STACK_OUTER = 3, + /* Stack address is unavailable. I.e., there's a valid stack, but we don't know where it is (because memory or registers we'd compute it from were not collected). */ @@ -236,19 +241,16 @@ as the special identifier address are set to indicate wild cards. */ extern struct frame_id frame_id_build_wild (CORE_ADDR stack_addr); -/* Returns non-zero when L is a valid frame (a valid frame has a - non-zero .base). The outermost frame is valid even without an - ID. */ -extern int frame_id_p (struct frame_id l); +/* Returns true when L is a valid frame. */ +extern bool frame_id_p (frame_id l); -/* Returns non-zero when L is a valid frame representing a frame made up by GDB +/* Returns true when L is a valid frame representing a frame made up by GDB without stack data representation in inferior, such as INLINE_FRAME or TAILCALL_FRAME. */ -extern int frame_id_artificial_p (struct frame_id l); +extern bool frame_id_artificial_p (frame_id l); -/* Returns non-zero when L and R identify the same frame, or, if - either L or R have a zero .func, then the same frame base. */ -extern int frame_id_eq (struct frame_id l, struct frame_id r); +/* Returns true when L and R identify the same frame. */ +extern bool frame_id_eq (frame_id l, frame_id r); /* Write the internal representation of a frame ID on the specified stream. */ @@ -303,7 +305,7 @@ /* Does the current target interface have enough state to be able to query the current inferior for frame info, and is the inferior in a state where that is possible? */ -extern int has_stack_frames (void); +extern bool has_stack_frames (); /* Invalidates the frame cache (this function should have been called invalidate_cached_frames). @@ -317,7 +319,7 @@ /* On demand, create the selected frame and then return it. If the selected frame can not be created, this function prints then throws an error. When MESSAGE is non-NULL, use it for the error message, - otherwize use a generic error message. */ + otherwise use a generic error message. */ /* FIXME: cagney/2002-11-28: At present, when there is no selected frame, this function always returns the current (inner most) frame. It should instead, when a thread has previously had its frame @@ -367,8 +369,7 @@ /* Same as get_frame_pc, but return a boolean indication of whether the PC is actually available, instead of throwing an error. */ -extern int get_frame_pc_if_available (struct frame_info *frame, - CORE_ADDR *pc); +extern bool get_frame_pc_if_available (frame_info *frame, CORE_ADDR *pc); /* An address (not necessarily aligned to an instruction boundary) that falls within THIS frame's code block. @@ -390,9 +391,8 @@ PC is unavailable, it will not be), instead of possibly throwing an error trying to read an unavailable PC. */ -extern int - get_frame_address_in_block_if_available (struct frame_info *this_frame, - CORE_ADDR *pc); +extern bool get_frame_address_in_block_if_available (frame_info *this_frame, + CORE_ADDR *pc); /* The frame's inner-most bound. AKA the stack-pointer. Confusingly known as top-of-stack. */ @@ -409,7 +409,7 @@ will not be), instead of possibly throwing an error trying to read an unavailable PC. */ -extern int get_frame_func_if_available (struct frame_info *fi, CORE_ADDR *); +extern bool get_frame_func_if_available (frame_info *fi, CORE_ADDR *); /* Closely related to the resume address, various symbol table attributes that are determined by the PC. Note that for a normal @@ -597,8 +597,8 @@ get_frame_register_value, that do not throw if the result is optimized out or unavailable. */ -extern int read_frame_register_unsigned (struct frame_info *frame, - int regnum, ULONGEST *val); +extern bool read_frame_register_unsigned (frame_info *frame, + int regnum, ULONGEST *val); /* Get the value of the register that belongs to this FRAME. This function is a wrapper to the call sequence ``frame_register_unwind @@ -621,10 +621,10 @@ in frame FRAME, starting at OFFSET, into BUF. If the register contents are optimized out or unavailable, set *OPTIMIZEDP, *UNAVAILABLEP accordingly. */ -extern int get_frame_register_bytes (struct frame_info *frame, int regnum, - CORE_ADDR offset, int len, - gdb_byte *myaddr, - int *optimizedp, int *unavailablep); +extern bool get_frame_register_bytes (frame_info *frame, int regnum, + CORE_ADDR offset, int len, + gdb_byte *myaddr, + int *optimizedp, int *unavailablep); /* Write LEN bytes to one or multiple registers starting with REGNUM in frame FRAME, starting at OFFSET, into BUF. */ @@ -662,10 +662,10 @@ extern ULONGEST get_frame_memory_unsigned (struct frame_info *this_frame, CORE_ADDR memaddr, int len); -/* Same as above, but return non-zero when the entire memory read - succeeds, zero otherwize. */ -extern int safe_frame_unwind_memory (struct frame_info *this_frame, - CORE_ADDR addr, gdb_byte *buf, int len); +/* Same as above, but return true zero when the entire memory read + succeeds, false otherwise. */ +extern bool safe_frame_unwind_memory (frame_info *this_frame, CORE_ADDR addr, + gdb_byte *buf, int len); /* Return this frame's architecture. */ extern struct gdbarch *get_frame_arch (struct frame_info *this_frame); @@ -772,8 +772,8 @@ extern struct frame_info *block_innermost_frame (const struct block *); -extern int deprecated_frame_register_read (struct frame_info *frame, int regnum, - gdb_byte *buf); +extern bool deprecated_frame_register_read (frame_info *frame, int regnum, + gdb_byte *buf); /* From stack.c. */ @@ -907,8 +907,7 @@ /* Return true if the frame unwinder for frame FI is UNWINDER; false otherwise. */ -extern int frame_unwinder_is (struct frame_info *fi, - const struct frame_unwind *unwinder); +extern bool frame_unwinder_is (frame_info *fi, const frame_unwind *unwinder); /* Return the language of FRAME. */ @@ -949,6 +948,10 @@ /* The values behind the global "set backtrace ..." settings. */ extern set_backtrace_options user_set_backtrace_options; +/* Get the number of calls to reinit_frame_cache. */ + +unsigned int get_frame_cache_generation (); + /* Mark that the PC value is masked for the previous frame. */ extern void set_frame_previous_pc_masked (struct frame_info *frame); diff -Nru gdb-9.1/gdb/frame-unwind.c gdb-10.2/gdb/frame-unwind.c --- gdb-9.1/gdb/frame-unwind.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/frame-unwind.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Definitions for frame unwinder, for GDB, the GNU debugger. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -27,6 +27,7 @@ #include "gdb_obstack.h" #include "target.h" #include "gdbarch.h" +#include "dwarf2/frame-tailcall.h" static struct gdbarch_data *frame_unwind_data; @@ -43,6 +44,18 @@ struct frame_unwind_table_entry **osabi_head; }; +/* A helper function to add an unwinder to a list. LINK says where to + install the new unwinder. The new link is returned. */ + +static struct frame_unwind_table_entry ** +add_unwinder (struct obstack *obstack, const struct frame_unwind *unwinder, + struct frame_unwind_table_entry **link) +{ + *link = OBSTACK_ZALLOC (obstack, struct frame_unwind_table_entry); + (*link)->unwinder = unwinder; + return &(*link)->next; +} + static void * frame_unwind_init (struct obstack *obstack) { @@ -51,13 +64,21 @@ /* Start the table out with a few default sniffers. OSABI code can't override this. */ - table->list = OBSTACK_ZALLOC (obstack, struct frame_unwind_table_entry); - table->list->unwinder = &dummy_frame_unwind; - table->list->next = OBSTACK_ZALLOC (obstack, - struct frame_unwind_table_entry); - table->list->next->unwinder = &inline_frame_unwind; + struct frame_unwind_table_entry **link = &table->list; + + link = add_unwinder (obstack, &dummy_frame_unwind, link); + /* The DWARF tailcall sniffer must come before the inline sniffer. + Otherwise, we can end up in a situation where a DWARF frame finds + tailcall information, but then the inline sniffer claims a frame + before the tailcall sniffer, resulting in confusion. This is + safe to do always because the tailcall sniffer can only ever be + activated if the newer frame was created using the DWARF + unwinder, and it also found tailcall information. */ + link = add_unwinder (obstack, &dwarf2_tailcall_frame_unwind, link); + link = add_unwinder (obstack, &inline_frame_unwind, link); + /* The insertion point for OSABI sniffers. */ - table->osabi_head = &table->list->next->next; + table->osabi_head = link; return table; } @@ -100,6 +121,8 @@ { int res = 0; + unsigned int entry_generation = get_frame_cache_generation (); + frame_prepare_for_sniffer (this_frame, unwinder); try @@ -109,9 +132,14 @@ catch (const gdb_exception &ex) { /* Catch all exceptions, caused by either interrupt or error. - Reset *THIS_CACHE. */ - *this_cache = NULL; - frame_cleanup_after_sniffer (this_frame); + Reset *THIS_CACHE, unless something reinitialized the frame + cache meanwhile, in which case THIS_FRAME/THIS_CACHE are now + dangling. */ + if (get_frame_cache_generation () == entry_generation) + { + *this_cache = NULL; + frame_cleanup_after_sniffer (this_frame); + } if (ex.error == NOT_AVAILABLE_ERROR) { @@ -223,18 +251,8 @@ { struct gdbarch *gdbarch = frame_unwind_arch (frame); struct type *type = register_type (gdbarch, regnum); - struct value *val; - /* Return an lval_register value, so that we print it as - "<not saved>". */ - val = allocate_value_lazy (type); - set_value_lazy (val, 0); - mark_value_bytes_optimized_out (val, 0, TYPE_LENGTH (type)); - VALUE_LVAL (val) = lval_register; - VALUE_REGNUM (val) = regnum; - VALUE_NEXT_FRAME_ID (val) - = get_frame_id (get_next_frame_sentinel_okay (frame)); - return val; + return allocate_optimized_out_value (type); } /* Return a value which indicates that FRAME copied REGNUM into @@ -305,8 +323,9 @@ return reg_val; } +void _initialize_frame_unwind (); void -_initialize_frame_unwind (void) +_initialize_frame_unwind () { frame_unwind_data = gdbarch_data_register_pre_init (frame_unwind_init); } diff -Nru gdb-9.1/gdb/frame-unwind.h gdb-10.2/gdb/frame-unwind.h --- gdb-9.1/gdb/frame-unwind.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/frame-unwind.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Definitions for a frame unwinder, for GDB, the GNU debugger. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -133,6 +133,9 @@ may be a lazy reference to memory, a lazy reference to the value of a register in THIS frame, or a non-lvalue. + If the previous frame's register was not saved by THIS_FRAME and is + therefore undefined, return a wholly optimized-out not_lval value. + THIS_PROLOGUE_CACHE can be used to share any prolog analysis data with the other unwind methods. Memory for that cache should be allocated using FRAME_OBSTACK_ZALLOC(). */ diff -Nru gdb-9.1/gdb/frv-linux-tdep.c gdb-10.2/gdb/frv-linux-tdep.c --- gdb-9.1/gdb/frv-linux-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/frv-linux-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,7 +1,7 @@ /* Target-dependent code for GNU/Linux running on the Fujitsu FR-V, for GDB. - Copyright (C) 2004-2020 Free Software Foundation, Inc. + Copyright (C) 2004-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -481,8 +481,9 @@ return GDB_OSABI_UNKNOWN; } +void _initialize_frv_linux_tdep (); void -_initialize_frv_linux_tdep (void) +_initialize_frv_linux_tdep () { gdbarch_register_osabi (bfd_arch_frv, 0, GDB_OSABI_LINUX, frv_linux_init_abi); diff -Nru gdb-9.1/gdb/frv-tdep.c gdb-10.2/gdb/frv-tdep.c --- gdb-9.1/gdb/frv-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/frv-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for the Fujitsu FR-V, for GDB, the GNU Debugger. - Copyright (C) 2002-2020 Free Software Foundation, Inc. + Copyright (C) 2002-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -1240,7 +1240,7 @@ arg = args[argnum]; arg_type = check_typedef (value_type (arg)); len = TYPE_LENGTH (arg_type); - typecode = TYPE_CODE (arg_type); + typecode = arg_type->code (); if (typecode == TYPE_CODE_STRUCT || typecode == TYPE_CODE_UNION) { @@ -1253,7 +1253,7 @@ else if (abi == FRV_ABI_FDPIC && len == 4 && typecode == TYPE_CODE_PTR - && TYPE_CODE (TYPE_TARGET_TYPE (arg_type)) == TYPE_CODE_FUNC) + && TYPE_TARGET_TYPE (arg_type)->code () == TYPE_CODE_FUNC) { /* The FDPIC ABI requires function descriptors to be passed instead of entry points. */ @@ -1345,9 +1345,9 @@ struct type *valtype, struct regcache *regcache, gdb_byte *readbuf, const gdb_byte *writebuf) { - int struct_return = TYPE_CODE (valtype) == TYPE_CODE_STRUCT - || TYPE_CODE (valtype) == TYPE_CODE_UNION - || TYPE_CODE (valtype) == TYPE_CODE_ARRAY; + int struct_return = valtype->code () == TYPE_CODE_STRUCT + || valtype->code () == TYPE_CODE_UNION + || valtype->code () == TYPE_CODE_ARRAY; if (writebuf != NULL) { @@ -1573,8 +1573,9 @@ return gdbarch; } +void _initialize_frv_tdep (); void -_initialize_frv_tdep (void) +_initialize_frv_tdep () { register_gdbarch_init (bfd_arch_frv, frv_gdbarch_init); } diff -Nru gdb-9.1/gdb/frv-tdep.h gdb-10.2/gdb/frv-tdep.h --- gdb-9.1/gdb/frv-tdep.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/frv-tdep.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Architecture-dependent code for the Fujitsu FR-V, for GDB, the GNU Debugger. - Copyright (C) 2004-2020 Free Software Foundation, Inc. + Copyright (C) 2004-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/ft32-tdep.c gdb-10.2/gdb/ft32-tdep.c --- gdb-9.1/gdb/ft32-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/ft32-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for FT32. - Copyright (C) 2009-2020 Free Software Foundation, Inc. + Copyright (C) 2009-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -299,7 +299,7 @@ /* Found a function. */ sym = lookup_symbol (func_name, NULL, VAR_DOMAIN, NULL).symbol; /* Don't use line number debug info for assembly source files. */ - if ((sym != NULL) && SYMBOL_LANGUAGE (sym) != language_asm) + if ((sym != NULL) && sym->language () != language_asm) { sal = find_pc_line (func_addr, 0); if (sal.end && sal.end < func_end) @@ -616,8 +616,9 @@ /* Register this machine's init routine. */ +void _initialize_ft32_tdep (); void -_initialize_ft32_tdep (void) +_initialize_ft32_tdep () { register_gdbarch_init (bfd_arch_ft32, ft32_gdbarch_init); } diff -Nru gdb-9.1/gdb/ft32-tdep.h gdb-10.2/gdb/ft32-tdep.h --- gdb-9.1/gdb/ft32-tdep.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/ft32-tdep.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for the FT32. - Copyright (C) 2002-2020 Free Software Foundation, Inc. + Copyright (C) 2002-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/f-typeprint.c gdb-10.2/gdb/f-typeprint.c --- gdb-9.1/gdb/f-typeprint.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/f-typeprint.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Support for printing Fortran types for GDB, the GNU debugger. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. Contributed by Motorola. Adapted from the C version by Farooq Butt (fmbutt@engage.sps.mot.com). @@ -65,21 +65,21 @@ enum type_code code; f_type_print_base (type, stream, show, level); - code = TYPE_CODE (type); + code = type->code (); if ((varstring != NULL && *varstring != '\0') /* Need a space if going to print stars or brackets; but not if we will print just a type name. */ || ((show > 0 - || TYPE_NAME (type) == 0) + || type->name () == 0) && (code == TYPE_CODE_FUNC || code == TYPE_CODE_METHOD || code == TYPE_CODE_ARRAY || ((code == TYPE_CODE_PTR || code == TYPE_CODE_REF) - && (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_FUNC - || (TYPE_CODE (TYPE_TARGET_TYPE (type)) + && (TYPE_TARGET_TYPE (type)->code () == TYPE_CODE_FUNC + || (TYPE_TARGET_TYPE (type)->code () == TYPE_CODE_METHOD) - || (TYPE_CODE (TYPE_TARGET_TYPE (type)) + || (TYPE_TARGET_TYPE (type)->code () == TYPE_CODE_ARRAY)))))) fputs_filtered (" ", stream); f_type_print_varspec_prefix (type, stream, show, 0); @@ -114,12 +114,12 @@ if (type == 0) return; - if (TYPE_NAME (type) && show <= 0) + if (type->name () && show <= 0) return; QUIT; - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_PTR: f_type_print_varspec_prefix (TYPE_TARGET_TYPE (type), stream, 0, 1); @@ -178,12 +178,12 @@ if (type == 0) return; - if (TYPE_NAME (type) && show <= 0) + if (type->name () && show <= 0) return; QUIT; - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_ARRAY: arrayprint_recurse_level++; @@ -196,18 +196,18 @@ else if (type_not_allocated (type)) print_rank_only = true; else if ((TYPE_ASSOCIATED_PROP (type) - && PROP_CONST != TYPE_DYN_PROP_KIND (TYPE_ASSOCIATED_PROP (type))) + && PROP_CONST != TYPE_ASSOCIATED_PROP (type)->kind ()) || (TYPE_ALLOCATED_PROP (type) - && PROP_CONST != TYPE_DYN_PROP_KIND (TYPE_ALLOCATED_PROP (type))) + && PROP_CONST != TYPE_ALLOCATED_PROP (type)->kind ()) || (TYPE_DATA_LOCATION (type) - && PROP_CONST != TYPE_DYN_PROP_KIND (TYPE_DATA_LOCATION (type)))) + && PROP_CONST != TYPE_DATA_LOCATION (type)->kind ())) { /* This case exist when we ptype a typename which has the dynamic properties but cannot be resolved as there is no object. */ print_rank_only = true; } - if (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_ARRAY) + if (TYPE_TARGET_TYPE (type)->code () == TYPE_CODE_ARRAY) f_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0, 0, 0, arrayprint_recurse_level, print_rank_only); @@ -223,7 +223,7 @@ /* Make sure that, if we have an assumed size array, we print out a warning and print the upperbound as '*'. */ - if (TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED (type)) + if (type->bounds ()->high.kind () == PROP_UNDEFINED) fprintf_filtered (stream, "*"); else { @@ -233,7 +233,7 @@ } } - if (TYPE_CODE (TYPE_TARGET_TYPE (type)) != TYPE_CODE_ARRAY) + if (TYPE_TARGET_TYPE (type)->code () != TYPE_CODE_ARRAY) f_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0, 0, 0, arrayprint_recurse_level, print_rank_only); @@ -254,7 +254,7 @@ case TYPE_CODE_FUNC: { - int i, nfields = TYPE_NFIELDS (type); + int i, nfields = type->num_fields (); f_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0, passed_a_ptr, 0, @@ -273,7 +273,7 @@ fputs_filtered (", ", stream); wrap_here (" "); } - f_print_type (TYPE_FIELD_TYPE (type, i), "", stream, -1, 0, 0); + f_print_type (type->field (i).type (), "", stream, -1, 0, 0); } fprintf_filtered (stream, ")"); } @@ -332,21 +332,21 @@ /* When SHOW is zero or less, and there is a valid type name, then always just print the type name directly from the type. */ - if ((show <= 0) && (TYPE_NAME (type) != NULL)) + if ((show <= 0) && (type->name () != NULL)) { const char *prefix = ""; - if (TYPE_CODE (type) == TYPE_CODE_UNION) + if (type->code () == TYPE_CODE_UNION) prefix = "Type, C_Union :: "; - else if (TYPE_CODE (type) == TYPE_CODE_STRUCT) + else if (type->code () == TYPE_CODE_STRUCT) prefix = "Type "; - fprintfi_filtered (level, stream, "%s%s", prefix, TYPE_NAME (type)); + fprintfi_filtered (level, stream, "%s%s", prefix, type->name ()); return; } - if (TYPE_CODE (type) != TYPE_CODE_TYPEDEF) + if (type->code () != TYPE_CODE_TYPEDEF) type = check_typedef (type); - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_TYPEDEF: f_type_print_base (TYPE_TARGET_TYPE (type), stream, 0, level); @@ -376,7 +376,7 @@ { gdbarch *gdbarch = get_type_arch (type); struct type *void_type = builtin_f_type (gdbarch)->builtin_void; - fprintfi_filtered (level, stream, "%s", TYPE_NAME (void_type)); + fprintfi_filtered (level, stream, "%s", void_type->name ()); } break; @@ -399,54 +399,59 @@ through as TYPE_CODE_INT since dbxstclass.h is so C-oriented, we must change these to "character" from "char". */ - if (strcmp (TYPE_NAME (type), "char") == 0) + if (strcmp (type->name (), "char") == 0) fprintfi_filtered (level, stream, "character"); else goto default_case; break; case TYPE_CODE_STRING: - /* Strings may have dynamic upperbounds (lengths) like arrays. */ + /* Strings may have dynamic upperbounds (lengths) like arrays. We + check specifically for the PROP_CONST case to indicate that the + dynamic type has been resolved. If we arrive here having been + asked to print the type of a value with a dynamic type then the + bounds will not have been resolved. */ - if (TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED (type)) - fprintfi_filtered (level, stream, "character*(*)"); - else + if (type->bounds ()->high.kind () == PROP_CONST) { LONGEST upper_bound = f77_get_upperbound (type); fprintf_filtered (stream, "character*%s", pulongest (upper_bound)); } + else + fprintfi_filtered (level, stream, "character*(*)"); break; case TYPE_CODE_STRUCT: case TYPE_CODE_UNION: - if (TYPE_CODE (type) == TYPE_CODE_UNION) + if (type->code () == TYPE_CODE_UNION) fprintfi_filtered (level, stream, "Type, C_Union :: "); else fprintfi_filtered (level, stream, "Type "); - fputs_filtered (TYPE_NAME (type), stream); + fputs_filtered (type->name (), stream); /* According to the definition, we only print structure elements in case show > 0. */ if (show > 0) { fputs_filtered ("\n", stream); - for (index = 0; index < TYPE_NFIELDS (type); index++) + for (index = 0; index < type->num_fields (); index++) { - f_type_print_base (TYPE_FIELD_TYPE (type, index), stream, + f_type_print_base (type->field (index).type (), stream, show - 1, level + 4); fputs_filtered (" :: ", stream); - fputs_filtered (TYPE_FIELD_NAME (type, index), stream); - f_type_print_varspec_suffix (TYPE_FIELD_TYPE (type, index), + fputs_styled (TYPE_FIELD_NAME (type, index), + variable_name_style.style (), stream); + f_type_print_varspec_suffix (type->field (index).type (), stream, show - 1, 0, 0, 0, false); fputs_filtered ("\n", stream); } fprintfi_filtered (level, stream, "End Type "); - fputs_filtered (TYPE_NAME (type), stream); + fputs_filtered (type->name (), stream); } break; case TYPE_CODE_MODULE: - fprintfi_filtered (level, stream, "module %s", TYPE_NAME (type)); + fprintfi_filtered (level, stream, "module %s", type->name ()); break; default_case: @@ -455,10 +460,10 @@ such as fundamental types. For these, just print whatever the type name is, as recorded in the type itself. If there is no type name, then complain. */ - if (TYPE_NAME (type) != NULL) - fprintfi_filtered (level, stream, "%s", TYPE_NAME (type)); + if (type->name () != NULL) + fprintfi_filtered (level, stream, "%s", type->name ()); else - error (_("Invalid type code (%d) in symbol table."), TYPE_CODE (type)); + error (_("Invalid type code (%d) in symbol table."), type->code ()); break; } diff -Nru gdb-9.1/gdb/f-valprint.c gdb-10.2/gdb/f-valprint.c --- gdb-9.1/gdb/f-valprint.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/f-valprint.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Support for printing Fortran values for GDB, the GNU debugger. - Copyright (C) 1993-2020 Free Software Foundation, Inc. + Copyright (C) 1993-2021 Free Software Foundation, Inc. Contributed by Motorola. Adapted from the C definitions by Farooq Butt (fmbutt@engage.sps.mot.com), additionally worked over by Stan Shebs. @@ -46,16 +46,16 @@ LONGEST f77_get_lowerbound (struct type *type) { - if (TYPE_ARRAY_LOWER_BOUND_IS_UNDEFINED (type)) + if (type->bounds ()->low.kind () == PROP_UNDEFINED) error (_("Lower bound may not be '*' in F77")); - return TYPE_ARRAY_LOWER_BOUND_VALUE (type); + return type->bounds ()->low.const_val (); } LONGEST f77_get_upperbound (struct type *type) { - if (TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED (type)) + if (type->bounds ()->high.kind () == PROP_UNDEFINED) { /* We have an assumed size array on our hands. Assume that upper_bound == lower_bound so that we show at least 1 element. @@ -65,7 +65,7 @@ return f77_get_lowerbound (type); } - return TYPE_ARRAY_UPPER_BOUND_VALUE (type); + return type->bounds ()->high.const_val (); } /* Obtain F77 adjustable array dimensions. */ @@ -85,8 +85,8 @@ This function also works for strings which behave very similarly to arrays. */ - if (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_ARRAY - || TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_STRING) + if (TYPE_TARGET_TYPE (type)->code () == TYPE_CODE_ARRAY + || TYPE_TARGET_TYPE (type)->code () == TYPE_CODE_STRING) f77_get_dynamic_length_of_aggregate (TYPE_TARGET_TYPE (type)); /* Recursion ends here, start setting up lengths. */ @@ -112,10 +112,10 @@ const struct value_print_options *options, int *elts) { - struct type *range_type = TYPE_INDEX_TYPE (check_typedef (type)); + struct type *range_type = check_typedef (type)->index_type (); CORE_ADDR addr = address + embedded_offset; LONGEST lowerbound, upperbound; - int i; + LONGEST i; get_discrete_bounds (range_type, &lowerbound, &upperbound); @@ -124,7 +124,7 @@ struct gdbarch *gdbarch = get_type_arch (type); size_t dim_size = type_length_units (TYPE_TARGET_TYPE (type)); int unit_size = gdbarch_addressable_memory_unit_size (gdbarch); - size_t byte_stride = TYPE_ARRAY_BIT_STRIDE (type) / (unit_size * 8); + size_t byte_stride = type->bit_stride () / (unit_size * 8); if (byte_stride == 0) byte_stride = dim_size; size_t offs = 0; @@ -156,10 +156,7 @@ { struct value *elt = value_subscript ((struct value *)val, i); - val_print (value_type (elt), - value_embedded_offset (elt), - value_address (elt), stream, recurse, - elt, options, current_language); + common_val_print (elt, stream, recurse, options, current_language); if (i != upperbound) fprintf_filtered (stream, ", "); @@ -211,38 +208,35 @@ "}" }; -/* See val_print for a description of the various parameters of this - function; they are identical. */ +/* See f-lang.h. */ void -f_val_print (struct type *type, int embedded_offset, - CORE_ADDR address, struct ui_file *stream, int recurse, - struct value *original_value, - const struct value_print_options *options) +f_value_print_inner (struct value *val, struct ui_file *stream, int recurse, + const struct value_print_options *options) { + struct type *type = check_typedef (value_type (val)); struct gdbarch *gdbarch = get_type_arch (type); int printed_field = 0; /* Number of fields printed. */ struct type *elttype; CORE_ADDR addr; int index; - const gdb_byte *valaddr =value_contents_for_printing (original_value); + const gdb_byte *valaddr = value_contents_for_printing (val); + const CORE_ADDR address = value_address (val); - type = check_typedef (type); - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_STRING: f77_get_dynamic_length_of_aggregate (type); LA_PRINT_STRING (stream, builtin_type (gdbarch)->builtin_char, - valaddr + embedded_offset, - TYPE_LENGTH (type), NULL, 0, options); + valaddr, TYPE_LENGTH (type), NULL, 0, options); break; case TYPE_CODE_ARRAY: - if (TYPE_CODE (TYPE_TARGET_TYPE (type)) != TYPE_CODE_CHAR) + if (TYPE_TARGET_TYPE (type)->code () != TYPE_CODE_CHAR) { fprintf_filtered (stream, "("); - f77_print_array (type, valaddr, embedded_offset, - address, stream, recurse, original_value, options); + f77_print_array (type, valaddr, 0, + address, stream, recurse, val, options); fprintf_filtered (stream, ")"); } else @@ -250,8 +244,7 @@ struct type *ch_type = TYPE_TARGET_TYPE (type); f77_get_dynamic_length_of_aggregate (type); - LA_PRINT_STRING (stream, ch_type, - valaddr + embedded_offset, + LA_PRINT_STRING (stream, ch_type, valaddr, TYPE_LENGTH (type) / TYPE_LENGTH (ch_type), NULL, 0, options); } @@ -260,18 +253,17 @@ case TYPE_CODE_PTR: if (options->format && options->format != 's') { - val_print_scalar_formatted (type, embedded_offset, - original_value, options, 0, stream); + value_print_scalar_formatted (val, options, 0, stream); break; } else { int want_space = 0; - addr = unpack_pointer (type, valaddr + embedded_offset); + addr = unpack_pointer (type, valaddr); elttype = check_typedef (TYPE_TARGET_TYPE (type)); - if (TYPE_CODE (elttype) == TYPE_CODE_FUNC) + if (elttype->code () == TYPE_CODE_FUNC) { /* Try to print what function it points to. */ print_function_pointer_address (options, gdbarch, addr, stream); @@ -290,7 +282,7 @@ /* For a pointer to char or unsigned char, also print the string pointed to, unless pointer is null. */ if (TYPE_LENGTH (elttype) == 1 - && TYPE_CODE (elttype) == TYPE_CODE_INT + && elttype->code () == TYPE_CODE_INT && (options->format == 0 || options->format == 's') && addr != 0) { @@ -310,12 +302,10 @@ opts.format = (options->format ? options->format : options->output_format); - val_print_scalar_formatted (type, embedded_offset, - original_value, &opts, 0, stream); + value_print_scalar_formatted (val, &opts, 0, stream); } else - val_print_scalar_formatted (type, embedded_offset, - original_value, options, 0, stream); + value_print_scalar_formatted (val, options, 0, stream); break; case TYPE_CODE_STRUCT: @@ -323,15 +313,14 @@ /* Starting from the Fortran 90 standard, Fortran supports derived types. */ fprintf_filtered (stream, "( "); - for (index = 0; index < TYPE_NFIELDS (type); index++) + for (index = 0; index < type->num_fields (); index++) { - struct value *field = value_field - ((struct value *)original_value, index); + struct value *field = value_field (val, index); - struct type *field_type = check_typedef (TYPE_FIELD_TYPE (type, index)); + struct type *field_type = check_typedef (type->field (index).type ()); - if (TYPE_CODE (field_type) != TYPE_CODE_FUNC) + if (field_type->code () != TYPE_CODE_FUNC) { const char *field_name; @@ -341,14 +330,13 @@ field_name = TYPE_FIELD_NAME (type, index); if (field_name != NULL) { - fputs_filtered (field_name, stream); + fputs_styled (field_name, variable_name_style.style (), + stream); fputs_filtered (" = ", stream); } - val_print (value_type (field), - value_embedded_offset (field), - value_address (field), stream, recurse + 1, - field, options, current_language); + common_val_print (field, stream, recurse + 1, + options, current_language); ++printed_field; } @@ -356,6 +344,27 @@ fprintf_filtered (stream, " )"); break; + case TYPE_CODE_BOOL: + if (options->format || options->output_format) + { + struct value_print_options opts = *options; + opts.format = (options->format ? options->format + : options->output_format); + value_print_scalar_formatted (val, &opts, 0, stream); + } + else + { + LONGEST longval = value_as_long (val); + /* The Fortran standard doesn't specify how logical types are + represented. Different compilers use different non zero + values to represent logical true. */ + if (longval == 0) + fputs_filtered (f_decorations.false_name, stream); + else + fputs_filtered (f_decorations.true_name, stream); + } + break; + case TYPE_CODE_REF: case TYPE_CODE_FUNC: case TYPE_CODE_FLAGS: @@ -365,12 +374,9 @@ case TYPE_CODE_RANGE: case TYPE_CODE_UNDEF: case TYPE_CODE_COMPLEX: - case TYPE_CODE_BOOL: case TYPE_CODE_CHAR: default: - generic_val_print (type, embedded_offset, address, - stream, recurse, original_value, options, - &f_decorations); + generic_value_print (val, stream, recurse, options, &f_decorations); break; } } @@ -479,8 +485,9 @@ } } +void _initialize_f_valprint (); void -_initialize_f_valprint (void) +_initialize_f_valprint () { add_info ("common", info_common_command, _("Print out the values contained in a Fortran COMMON block.")); diff -Nru gdb-9.1/gdb/gcore gdb-10.2/gdb/gcore --- gdb-9.1/gdb/gcore 2020-02-08 12:54:04.000000000 +0000 +++ gdb-10.2/gdb/gcore 2021-04-25 04:10:28.000000000 +0000 @@ -1,6 +1,6 @@ #!/usr/bin/env bash -# Copyright (C) 2003-2020 Free Software Foundation, Inc. +# Copyright (C) 2003-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/gcore.c gdb-10.2/gdb/gcore.c --- gdb-9.1/gdb/gcore.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gcore.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Generate a core file for the inferior process. - Copyright (C) 2001-2020 Free Software Foundation, Inc. + Copyright (C) 2001-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -145,17 +145,22 @@ "Opening corefile '%s' for output.\n", corefilename.get ()); - /* Open the output file. */ - gdb_bfd_ref_ptr obfd (create_gcore_bfd (corefilename.get ())); + if (target_supports_dumpcore ()) + target_dumpcore (corefilename.get ()); + else + { + /* Open the output file. */ + gdb_bfd_ref_ptr obfd (create_gcore_bfd (corefilename.get ())); - /* Arrange to unlink the file on failure. */ - gdb::unlinker unlink_file (corefilename.get ()); + /* Arrange to unlink the file on failure. */ + gdb::unlinker unlink_file (corefilename.get ()); - /* Call worker function. */ - write_gcore_file (obfd.get ()); + /* Call worker function. */ + write_gcore_file (obfd.get ()); - /* Succeeded. */ - unlink_file.keep (); + /* Succeeded. */ + unlink_file.keep (); + } fprintf_filtered (gdb_stdout, "Saved corefile %s\n", corefilename.get ()); } @@ -282,7 +287,7 @@ else return (bfd_vma) 0; - gdbarch = get_objfile_arch (sbrk_objf); + gdbarch = sbrk_objf->arch (); target_sbrk_arg = value_from_longest (builtin_type (gdbarch)->builtin_int, sbrk_arg); gdb_assert (target_sbrk_arg); @@ -590,8 +595,9 @@ return 1; } +void _initialize_gcore (); void -_initialize_gcore (void) +_initialize_gcore () { add_com ("generate-core-file", class_files, gcore_command, _("\ Save a core file with the current state of the debugged process.\n\ diff -Nru gdb-9.1/gdb/gcore.h gdb-10.2/gdb/gcore.h --- gdb-9.1/gdb/gcore.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/gcore.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Support for reading/writing gcore files. - Copyright (C) 2009-2020 Free Software Foundation, Inc. + Copyright (C) 2009-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -24,7 +24,6 @@ extern gdb_bfd_ref_ptr create_gcore_bfd (const char *filename); extern void write_gcore_file (bfd *obfd); -extern bfd *load_corefile (char *filename, int from_tty); extern int objfile_find_memory_regions (struct target_ops *self, find_memory_region_ftype func, void *obfd); diff -Nru gdb-9.1/gdb/gcore.in gdb-10.2/gdb/gcore.in --- gdb-9.1/gdb/gcore.in 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/gcore.in 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ #!/usr/bin/env bash -# Copyright (C) 2003-2020 Free Software Foundation, Inc. +# Copyright (C) 2003-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/gdbarch.c gdb-10.2/gdb/gdbarch.c --- gdb-9.1/gdb/gdbarch.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbarch.c 2021-04-25 04:06:26.000000000 +0000 @@ -3,7 +3,7 @@ /* Dynamic architecture support for GDB, the GNU debugger. - Copyright (C) 1998-2020 Free Software Foundation, Inc. + Copyright (C) 1998-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -20,17 +20,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ -/* This file was created with the aid of ``gdbarch.sh''. - - The Bourne shell script ``gdbarch.sh'' creates the files - ``new-gdbarch.c'' and ``new-gdbarch.h and then compares them - against the existing ``gdbarch.[hc]''. Any differences found - being reported. - - If editing this file, please also run gdbarch.sh and merge any - changes into that script. Conversely, when making sweeping changes - to this file, modifying gdbarch.sh and using its output may prove - easier. */ +/* This file was created with the aid of ``gdbarch.sh''. */ #include "defs.h" @@ -176,6 +166,8 @@ int int_bit; int long_bit; int long_long_bit; + int bfloat16_bit; + const struct floatformat ** bfloat16_format; int half_bit; const struct floatformat ** half_format; int float_bit; @@ -201,7 +193,7 @@ int num_pseudo_regs; gdbarch_ax_pseudo_register_collect_ftype *ax_pseudo_register_collect; gdbarch_ax_pseudo_register_push_stack_ftype *ax_pseudo_register_push_stack; - gdbarch_handle_segmentation_fault_ftype *handle_segmentation_fault; + gdbarch_report_signal_info_ftype *report_signal_info; int sp_regnum; int pc_regnum; int ps_regnum; @@ -302,7 +294,6 @@ gdbarch_relocate_instruction_ftype *relocate_instruction; gdbarch_overlay_update_ftype *overlay_update; gdbarch_core_read_description_ftype *core_read_description; - gdbarch_static_transform_name_ftype *static_transform_name; int sofun_address_maybe_missing; gdbarch_process_record_ftype *process_record; gdbarch_process_record_signal_ftype *process_record_signal; @@ -345,6 +336,7 @@ gdbarch_insn_is_call_ftype *insn_is_call; gdbarch_insn_is_ret_ftype *insn_is_ret; gdbarch_insn_is_jump_ftype *insn_is_jump; + gdbarch_program_breakpoint_here_p_ftype *program_breakpoint_here_p; gdbarch_auxv_parse_ftype *auxv_parse; gdbarch_print_auxv_entry_ftype *print_auxv_entry; gdbarch_vsyscall_range_ftype *vsyscall_range; @@ -358,6 +350,7 @@ const disasm_options_and_args_t * valid_disassembler_options; gdbarch_type_align_ftype *type_align; gdbarch_get_pc_address_flags_ftype *get_pc_address_flags; + gdbarch_read_core_file_mappings_ftype *read_core_file_mappings; }; /* Create a new ``struct gdbarch'' based on information provided by @@ -392,6 +385,7 @@ gdbarch->int_bit = 4*TARGET_CHAR_BIT; gdbarch->long_bit = 4*TARGET_CHAR_BIT; gdbarch->long_long_bit = 2*gdbarch->long_bit; + gdbarch->bfloat16_bit = 2*TARGET_CHAR_BIT; gdbarch->half_bit = 2*TARGET_CHAR_BIT; gdbarch->float_bit = 4*TARGET_CHAR_BIT; gdbarch->double_bit = 8*TARGET_CHAR_BIT; @@ -464,6 +458,7 @@ gdbarch->insn_is_call = default_insn_is_call; gdbarch->insn_is_ret = default_insn_is_ret; gdbarch->insn_is_jump = default_insn_is_jump; + gdbarch->program_breakpoint_here_p = default_program_breakpoint_here_p; gdbarch->print_auxv_entry = default_print_auxv_entry; gdbarch->vsyscall_range = default_vsyscall_range; gdbarch->infcall_mmap = default_infcall_mmap; @@ -473,6 +468,7 @@ gdbarch->addressable_memory_unit_size = default_addressable_memory_unit_size; gdbarch->type_align = default_type_align; gdbarch->get_pc_address_flags = default_get_pc_address_flags; + gdbarch->read_core_file_mappings = default_read_core_file_mappings; /* gdbarch_alloc() */ return gdbarch; @@ -530,6 +526,9 @@ /* Skip verify of int_bit, invalid_p == 0 */ /* Skip verify of long_bit, invalid_p == 0 */ /* Skip verify of long_long_bit, invalid_p == 0 */ + /* Skip verify of bfloat16_bit, invalid_p == 0 */ + if (gdbarch->bfloat16_format == 0) + gdbarch->bfloat16_format = floatformats_bfloat16; /* Skip verify of half_bit, invalid_p == 0 */ if (gdbarch->half_format == 0) gdbarch->half_format = floatformats_ieee_half; @@ -564,7 +563,7 @@ /* Skip verify of num_pseudo_regs, invalid_p == 0 */ /* Skip verify of ax_pseudo_register_collect, has predicate. */ /* Skip verify of ax_pseudo_register_push_stack, has predicate. */ - /* Skip verify of handle_segmentation_fault, has predicate. */ + /* Skip verify of report_signal_info, has predicate. */ /* Skip verify of sp_regnum, invalid_p == 0 */ /* Skip verify of pc_regnum, invalid_p == 0 */ /* Skip verify of ps_regnum, invalid_p == 0 */ @@ -666,7 +665,6 @@ /* Skip verify of relocate_instruction, has predicate. */ /* Skip verify of overlay_update, has predicate. */ /* Skip verify of core_read_description, has predicate. */ - /* Skip verify of static_transform_name, has predicate. */ /* Skip verify of sofun_address_maybe_missing, invalid_p == 0 */ /* Skip verify of process_record, has predicate. */ /* Skip verify of process_record_signal, has predicate. */ @@ -708,6 +706,7 @@ /* Skip verify of insn_is_call, invalid_p == 0 */ /* Skip verify of insn_is_ret, invalid_p == 0 */ /* Skip verify of insn_is_jump, invalid_p == 0 */ + /* Skip verify of program_breakpoint_here_p, invalid_p == 0 */ /* Skip verify of auxv_parse, has predicate. */ /* Skip verify of print_auxv_entry, invalid_p == 0 */ /* Skip verify of vsyscall_range, invalid_p == 0 */ @@ -721,6 +720,7 @@ /* Skip verify of valid_disassembler_options, invalid_p == 0 */ /* Skip verify of type_align, invalid_p == 0 */ /* Skip verify of get_pc_address_flags, invalid_p == 0 */ + /* Skip verify of read_core_file_mappings, invalid_p == 0 */ if (!log.empty ()) internal_error (__FILE__, __LINE__, _("verify_gdbarch: the following are invalid ...%s"), @@ -814,6 +814,12 @@ "gdbarch_dump: bfd_arch_info = %s\n", gdbarch_bfd_arch_info (gdbarch)->printable_name); fprintf_unfiltered (file, + "gdbarch_dump: bfloat16_bit = %s\n", + plongest (gdbarch->bfloat16_bit)); + fprintf_unfiltered (file, + "gdbarch_dump: bfloat16_format = %s\n", + pformat (gdbarch->bfloat16_format)); + fprintf_unfiltered (file, "gdbarch_dump: breakpoint_from_pc = <%s>\n", host_address_to_string (gdbarch->breakpoint_from_pc)); fprintf_unfiltered (file, @@ -1096,12 +1102,6 @@ "gdbarch_dump: half_format = %s\n", pformat (gdbarch->half_format)); fprintf_unfiltered (file, - "gdbarch_dump: gdbarch_handle_segmentation_fault_p() = %d\n", - gdbarch_handle_segmentation_fault_p (gdbarch)); - fprintf_unfiltered (file, - "gdbarch_dump: handle_segmentation_fault = <%s>\n", - host_address_to_string (gdbarch->handle_segmentation_fault)); - fprintf_unfiltered (file, "gdbarch_dump: has_dos_based_file_system = %s\n", plongest (gdbarch->has_dos_based_file_system)); fprintf_unfiltered (file, @@ -1249,6 +1249,9 @@ "gdbarch_dump: process_record_signal = <%s>\n", host_address_to_string (gdbarch->process_record_signal)); fprintf_unfiltered (file, + "gdbarch_dump: program_breakpoint_here_p = <%s>\n", + host_address_to_string (gdbarch->program_breakpoint_here_p)); + fprintf_unfiltered (file, "gdbarch_dump: ps_regnum = %s\n", plongest (gdbarch->ps_regnum)); fprintf_unfiltered (file, @@ -1288,6 +1291,9 @@ "gdbarch_dump: ravenscar_ops = %s\n", host_address_to_string (gdbarch->ravenscar_ops)); fprintf_unfiltered (file, + "gdbarch_dump: read_core_file_mappings = <%s>\n", + host_address_to_string (gdbarch->read_core_file_mappings)); + fprintf_unfiltered (file, "gdbarch_dump: gdbarch_read_pc_p() = %d\n", gdbarch_read_pc_p (gdbarch)); fprintf_unfiltered (file, @@ -1327,6 +1333,12 @@ "gdbarch_dump: remote_register_number = <%s>\n", host_address_to_string (gdbarch->remote_register_number)); fprintf_unfiltered (file, + "gdbarch_dump: gdbarch_report_signal_info_p() = %d\n", + gdbarch_report_signal_info_p (gdbarch)); + fprintf_unfiltered (file, + "gdbarch_dump: report_signal_info = <%s>\n", + host_address_to_string (gdbarch->report_signal_info)); + fprintf_unfiltered (file, "gdbarch_dump: return_in_first_hidden_param_p = <%s>\n", host_address_to_string (gdbarch->return_in_first_hidden_param_p)); fprintf_unfiltered (file, @@ -1441,12 +1453,6 @@ "gdbarch_dump: stap_register_suffixes = %s\n", pstring_list (gdbarch->stap_register_suffixes)); fprintf_unfiltered (file, - "gdbarch_dump: gdbarch_static_transform_name_p() = %d\n", - gdbarch_static_transform_name_p (gdbarch)); - fprintf_unfiltered (file, - "gdbarch_dump: static_transform_name = <%s>\n", - host_address_to_string (gdbarch->static_transform_name)); - fprintf_unfiltered (file, "gdbarch_dump: sw_breakpoint_from_kind = <%s>\n", host_address_to_string (gdbarch->sw_breakpoint_from_kind)); fprintf_unfiltered (file, @@ -1627,6 +1633,39 @@ } int +gdbarch_bfloat16_bit (struct gdbarch *gdbarch) +{ + gdb_assert (gdbarch != NULL); + /* Skip verify of bfloat16_bit, invalid_p == 0 */ + if (gdbarch_debug >= 2) + fprintf_unfiltered (gdb_stdlog, "gdbarch_bfloat16_bit called\n"); + return gdbarch->bfloat16_bit; +} + +void +set_gdbarch_bfloat16_bit (struct gdbarch *gdbarch, + int bfloat16_bit) +{ + gdbarch->bfloat16_bit = bfloat16_bit; +} + +const struct floatformat ** +gdbarch_bfloat16_format (struct gdbarch *gdbarch) +{ + gdb_assert (gdbarch != NULL); + if (gdbarch_debug >= 2) + fprintf_unfiltered (gdb_stdlog, "gdbarch_bfloat16_format called\n"); + return gdbarch->bfloat16_format; +} + +void +set_gdbarch_bfloat16_format (struct gdbarch *gdbarch, + const struct floatformat ** bfloat16_format) +{ + gdbarch->bfloat16_format = bfloat16_format; +} + +int gdbarch_half_bit (struct gdbarch *gdbarch) { gdb_assert (gdbarch != NULL); @@ -2102,27 +2141,27 @@ } int -gdbarch_handle_segmentation_fault_p (struct gdbarch *gdbarch) +gdbarch_report_signal_info_p (struct gdbarch *gdbarch) { gdb_assert (gdbarch != NULL); - return gdbarch->handle_segmentation_fault != NULL; + return gdbarch->report_signal_info != NULL; } void -gdbarch_handle_segmentation_fault (struct gdbarch *gdbarch, struct ui_out *uiout) +gdbarch_report_signal_info (struct gdbarch *gdbarch, struct ui_out *uiout, enum gdb_signal siggnal) { gdb_assert (gdbarch != NULL); - gdb_assert (gdbarch->handle_segmentation_fault != NULL); + gdb_assert (gdbarch->report_signal_info != NULL); if (gdbarch_debug >= 2) - fprintf_unfiltered (gdb_stdlog, "gdbarch_handle_segmentation_fault called\n"); - gdbarch->handle_segmentation_fault (gdbarch, uiout); + fprintf_unfiltered (gdb_stdlog, "gdbarch_report_signal_info called\n"); + gdbarch->report_signal_info (gdbarch, uiout, siggnal); } void -set_gdbarch_handle_segmentation_fault (struct gdbarch *gdbarch, - gdbarch_handle_segmentation_fault_ftype handle_segmentation_fault) +set_gdbarch_report_signal_info (struct gdbarch *gdbarch, + gdbarch_report_signal_info_ftype report_signal_info) { - gdbarch->handle_segmentation_fault = handle_segmentation_fault; + gdbarch->report_signal_info = report_signal_info; } int @@ -3930,7 +3969,7 @@ return gdbarch->displaced_step_copy_insn != NULL; } -struct displaced_step_closure * +displaced_step_closure_up gdbarch_displaced_step_copy_insn (struct gdbarch *gdbarch, CORE_ADDR from, CORE_ADDR to, struct regcache *regs) { gdb_assert (gdbarch != NULL); @@ -4080,30 +4119,6 @@ } int -gdbarch_static_transform_name_p (struct gdbarch *gdbarch) -{ - gdb_assert (gdbarch != NULL); - return gdbarch->static_transform_name != NULL; -} - -const char * -gdbarch_static_transform_name (struct gdbarch *gdbarch, const char *name) -{ - gdb_assert (gdbarch != NULL); - gdb_assert (gdbarch->static_transform_name != NULL); - if (gdbarch_debug >= 2) - fprintf_unfiltered (gdb_stdlog, "gdbarch_static_transform_name called\n"); - return gdbarch->static_transform_name (name); -} - -void -set_gdbarch_static_transform_name (struct gdbarch *gdbarch, - gdbarch_static_transform_name_ftype static_transform_name) -{ - gdbarch->static_transform_name = static_transform_name; -} - -int gdbarch_sofun_address_maybe_missing (struct gdbarch *gdbarch) { gdb_assert (gdbarch != NULL); @@ -4928,6 +4943,23 @@ gdbarch->insn_is_jump = insn_is_jump; } +bool +gdbarch_program_breakpoint_here_p (struct gdbarch *gdbarch, CORE_ADDR address) +{ + gdb_assert (gdbarch != NULL); + gdb_assert (gdbarch->program_breakpoint_here_p != NULL); + if (gdbarch_debug >= 2) + fprintf_unfiltered (gdb_stdlog, "gdbarch_program_breakpoint_here_p called\n"); + return gdbarch->program_breakpoint_here_p (gdbarch, address); +} + +void +set_gdbarch_program_breakpoint_here_p (struct gdbarch *gdbarch, + gdbarch_program_breakpoint_here_p_ftype program_breakpoint_here_p) +{ + gdbarch->program_breakpoint_here_p = program_breakpoint_here_p; +} + int gdbarch_auxv_parse_p (struct gdbarch *gdbarch) { @@ -5156,6 +5188,23 @@ gdbarch->get_pc_address_flags = get_pc_address_flags; } +void +gdbarch_read_core_file_mappings (struct gdbarch *gdbarch, struct bfd *cbfd,gdb::function_view<void (ULONGEST count)> pre_loop_cb,gdb::function_view<void (int num, ULONGEST start, ULONGEST end, ULONGEST file_ofs, const char *filename, const void *other)> loop_cb) +{ + gdb_assert (gdbarch != NULL); + gdb_assert (gdbarch->read_core_file_mappings != NULL); + if (gdbarch_debug >= 2) + fprintf_unfiltered (gdb_stdlog, "gdbarch_read_core_file_mappings called\n"); + gdbarch->read_core_file_mappings (gdbarch, cbfd, pre_loop_cb, loop_cb); +} + +void +set_gdbarch_read_core_file_mappings (struct gdbarch *gdbarch, + gdbarch_read_core_file_mappings_ftype read_core_file_mappings) +{ + gdbarch->read_core_file_mappings = read_core_file_mappings; +} + /* Keep a registry of per-architecture data-pointers required by GDB modules. */ @@ -5227,20 +5276,6 @@ gdbarch->data = GDBARCH_OBSTACK_CALLOC (gdbarch, gdbarch->nr_data, void *); } -/* Initialize the current value of the specified per-architecture - data-pointer. */ - -void -deprecated_set_gdbarch_data (struct gdbarch *gdbarch, - struct gdbarch_data *data, - void *pointer) -{ - gdb_assert (data->index < gdbarch->nr_data); - gdb_assert (gdbarch->data[data->index] == NULL); - gdb_assert (data->pre_init == NULL); - gdbarch->data[data->index] = pointer; -} - /* Return the current value of the specified per-architecture data-pointer. */ @@ -5270,11 +5305,9 @@ data->init_p = 1; } else - /* The architecture initialization hasn't completed - punt - - hope that the caller knows what they are doing. Once - deprecated_set_gdbarch_data has been initialized, this can be - changed to an internal error. */ - return NULL; + internal_error (__FILE__, __LINE__, + _("gdbarch post-init data field can only be used " + "after gdbarch is fully initialised")); gdb_assert (gdbarch->data[data->index] != NULL); } return gdbarch->data[data->index]; @@ -5548,8 +5581,9 @@ return current_inferior ()->gdbarch; } +void _initialize_gdbarch (); void -_initialize_gdbarch (void) +_initialize_gdbarch () { add_setshow_zuinteger_cmd ("arch", class_maintenance, &gdbarch_debug, _("\ Set architecture debugging."), _("\ diff -Nru gdb-9.1/gdb/gdbarch.h gdb-10.2/gdb/gdbarch.h --- gdb-9.1/gdb/gdbarch.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbarch.h 2021-04-25 04:06:26.000000000 +0000 @@ -3,7 +3,7 @@ /* Dynamic architecture support for GDB, the GNU debugger. - Copyright (C) 1998-2020 Free Software Foundation, Inc. + Copyright (C) 1998-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -20,17 +20,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ -/* This file was created with the aid of ``gdbarch.sh''. - - The Bourne shell script ``gdbarch.sh'' creates the files - ``new-gdbarch.c'' and ``new-gdbarch.h and then compares them - against the existing ``gdbarch.[hc]''. Any differences found - being reported. - - If editing this file, please also run gdbarch.sh and merge any - changes into that script. Conversely, when making sweeping changes - to this file, modifying gdbarch.sh and using its output may prove - easier. */ +/* This file was created with the aid of ``gdbarch.sh''. */ #ifndef GDBARCH_H #define GDBARCH_H @@ -39,6 +29,8 @@ #include "frame.h" #include "dis-asm.h" #include "gdb_obstack.h" +#include "infrun.h" +#include "osabi.h" struct floatformat; struct ui_file; @@ -55,7 +47,6 @@ struct bp_target_info; struct target_desc; struct symbol; -struct displaced_step_closure; struct syscall; struct agent_expr; struct axs_value; @@ -167,12 +158,18 @@ extern int gdbarch_long_long_bit (struct gdbarch *gdbarch); extern void set_gdbarch_long_long_bit (struct gdbarch *gdbarch, int long_long_bit); -/* The ABI default bit-size and format for "half", "float", "double", and +/* The ABI default bit-size and format for "bfloat16", "half", "float", "double", and "long double". These bit/format pairs should eventually be combined into a single object. For the moment, just initialize them as a pair. Each format describes both the big and little endian layouts (if useful). */ +extern int gdbarch_bfloat16_bit (struct gdbarch *gdbarch); +extern void set_gdbarch_bfloat16_bit (struct gdbarch *gdbarch, int bfloat16_bit); + +extern const struct floatformat ** gdbarch_bfloat16_format (struct gdbarch *gdbarch); +extern void set_gdbarch_bfloat16_format (struct gdbarch *gdbarch, const struct floatformat ** bfloat16_format); + extern int gdbarch_half_bit (struct gdbarch *gdbarch); extern void set_gdbarch_half_bit (struct gdbarch *gdbarch, int half_bit); @@ -330,16 +327,15 @@ extern int gdbarch_ax_pseudo_register_push_stack (struct gdbarch *gdbarch, struct agent_expr *ax, int reg); extern void set_gdbarch_ax_pseudo_register_push_stack (struct gdbarch *gdbarch, gdbarch_ax_pseudo_register_push_stack_ftype *ax_pseudo_register_push_stack); -/* Some targets/architectures can do extra processing/display of - segmentation faults. E.g., Intel MPX boundary faults. - Call the architecture dependent function to handle the fault. +/* Some architectures can display additional information for specific + signals. UIOUT is the output stream where the handler will place information. */ -extern int gdbarch_handle_segmentation_fault_p (struct gdbarch *gdbarch); +extern int gdbarch_report_signal_info_p (struct gdbarch *gdbarch); -typedef void (gdbarch_handle_segmentation_fault_ftype) (struct gdbarch *gdbarch, struct ui_out *uiout); -extern void gdbarch_handle_segmentation_fault (struct gdbarch *gdbarch, struct ui_out *uiout); -extern void set_gdbarch_handle_segmentation_fault (struct gdbarch *gdbarch, gdbarch_handle_segmentation_fault_ftype *handle_segmentation_fault); +typedef void (gdbarch_report_signal_info_ftype) (struct gdbarch *gdbarch, struct ui_out *uiout, enum gdb_signal siggnal); +extern void gdbarch_report_signal_info (struct gdbarch *gdbarch, struct ui_out *uiout, enum gdb_signal siggnal); +extern void set_gdbarch_report_signal_info (struct gdbarch *gdbarch, gdbarch_report_signal_info_ftype *report_signal_info); /* GDB's standard (or well known) register numbers. These can map onto a real register or a pseudo (computed) register or not be defined at @@ -1016,9 +1012,7 @@ not the copy at TO. The caller should update it to point at TO later. Return a pointer to data of the architecture's choice to be passed - to gdbarch_displaced_step_fixup. Or, return NULL to indicate that - the instruction's effects have been completely simulated, with the - resulting state written back to REGS. + to gdbarch_displaced_step_fixup. For a general explanation of displaced stepping and how GDB uses it, see the comments in infrun.c. @@ -1036,8 +1030,8 @@ extern int gdbarch_displaced_step_copy_insn_p (struct gdbarch *gdbarch); -typedef struct displaced_step_closure * (gdbarch_displaced_step_copy_insn_ftype) (struct gdbarch *gdbarch, CORE_ADDR from, CORE_ADDR to, struct regcache *regs); -extern struct displaced_step_closure * gdbarch_displaced_step_copy_insn (struct gdbarch *gdbarch, CORE_ADDR from, CORE_ADDR to, struct regcache *regs); +typedef displaced_step_closure_up (gdbarch_displaced_step_copy_insn_ftype) (struct gdbarch *gdbarch, CORE_ADDR from, CORE_ADDR to, struct regcache *regs); +extern displaced_step_closure_up gdbarch_displaced_step_copy_insn (struct gdbarch *gdbarch, CORE_ADDR from, CORE_ADDR to, struct regcache *regs); extern void set_gdbarch_displaced_step_copy_insn (struct gdbarch *gdbarch, gdbarch_displaced_step_copy_insn_ftype *displaced_step_copy_insn); /* Return true if GDB should use hardware single-stepping to execute @@ -1121,14 +1115,6 @@ extern const struct target_desc * gdbarch_core_read_description (struct gdbarch *gdbarch, struct target_ops *target, bfd *abfd); extern void set_gdbarch_core_read_description (struct gdbarch *gdbarch, gdbarch_core_read_description_ftype *core_read_description); -/* Handle special encoding of static variables in stabs debug info. */ - -extern int gdbarch_static_transform_name_p (struct gdbarch *gdbarch); - -typedef const char * (gdbarch_static_transform_name_ftype) (const char *name); -extern const char * gdbarch_static_transform_name (struct gdbarch *gdbarch, const char *name); -extern void set_gdbarch_static_transform_name (struct gdbarch *gdbarch, gdbarch_static_transform_name_ftype *static_transform_name); - /* Set if the address in N_SO or N_FUN stabs may be zero. */ extern int gdbarch_sofun_address_maybe_missing (struct gdbarch *gdbarch); @@ -1545,6 +1531,13 @@ extern int gdbarch_insn_is_jump (struct gdbarch *gdbarch, CORE_ADDR addr); extern void set_gdbarch_insn_is_jump (struct gdbarch *gdbarch, gdbarch_insn_is_jump_ftype *insn_is_jump); +/* Return true if there's a program/permanent breakpoint planted in + memory at ADDRESS, return false otherwise. */ + +typedef bool (gdbarch_program_breakpoint_here_p_ftype) (struct gdbarch *gdbarch, CORE_ADDR address); +extern bool gdbarch_program_breakpoint_here_p (struct gdbarch *gdbarch, CORE_ADDR address); +extern void set_gdbarch_program_breakpoint_here_p (struct gdbarch *gdbarch, gdbarch_program_breakpoint_here_p_ftype *program_breakpoint_here_p); + /* Read one auxv entry from *READPTR, not reading locations >= ENDPTR. Return 0 if *READPTR is already at the end of the buffer. Return -1 if there is insufficient buffer for a whole entry. @@ -1640,6 +1633,12 @@ extern std::string gdbarch_get_pc_address_flags (struct gdbarch *gdbarch, frame_info *frame, CORE_ADDR pc); extern void set_gdbarch_get_pc_address_flags (struct gdbarch *gdbarch, gdbarch_get_pc_address_flags_ftype *get_pc_address_flags); +/* Read core file mappings */ + +typedef void (gdbarch_read_core_file_mappings_ftype) (struct gdbarch *gdbarch, struct bfd *cbfd,gdb::function_view<void (ULONGEST count)> pre_loop_cb,gdb::function_view<void (int num, ULONGEST start, ULONGEST end, ULONGEST file_ofs, const char *filename, const void *other)> loop_cb); +extern void gdbarch_read_core_file_mappings (struct gdbarch *gdbarch, struct bfd *cbfd,gdb::function_view<void (ULONGEST count)> pre_loop_cb,gdb::function_view<void (int num, ULONGEST start, ULONGEST end, ULONGEST file_ofs, const char *filename, const void *other)> loop_cb); +extern void set_gdbarch_read_core_file_mappings (struct gdbarch *gdbarch, gdbarch_read_core_file_mappings_ftype *read_core_file_mappings); + extern struct gdbarch_tdep *gdbarch_tdep (struct gdbarch *gdbarch); @@ -1851,9 +1850,6 @@ extern struct gdbarch_data *gdbarch_data_register_pre_init (gdbarch_data_pre_init_ftype *init); typedef void *(gdbarch_data_post_init_ftype) (struct gdbarch *gdbarch); extern struct gdbarch_data *gdbarch_data_register_post_init (gdbarch_data_post_init_ftype *init); -extern void deprecated_set_gdbarch_data (struct gdbarch *gdbarch, - struct gdbarch_data *data, - void *pointer); extern void *gdbarch_data (struct gdbarch *gdbarch, struct gdbarch_data *); diff -Nru gdb-9.1/gdb/gdbarch-selftests.c gdb-10.2/gdb/gdbarch-selftests.c --- gdb-9.1/gdb/gdbarch-selftests.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbarch-selftests.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Self tests for gdbarch for GDB, the GNU debugger. - Copyright (C) 2017-2020 Free Software Foundation, Inc. + Copyright (C) 2017-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -18,16 +18,14 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include "defs.h" -#if GDB_SELF_TEST #include "gdbsupport/selftest.h" #include "selftest-arch.h" -#include "inferior.h" -#include "gdbthread.h" #include "target.h" #include "test-target.h" #include "target-float.h" #include "gdbsupport/def-vector.h" #include "gdbarch.h" +#include "scoped-mock-context.h" namespace selftests { @@ -71,45 +69,7 @@ builtin->builtin_char32, }; - /* Error out if debugging something, because we're going to push the - test target, which would pop any existing target. */ - if (current_top_target ()->stratum () >= process_stratum) - error (_("target already pushed")); - - /* Create a mock environment. An inferior with a thread, with a - process_stratum target pushed. */ - - test_target_ops mock_target; - ptid_t mock_ptid (1, 1); - inferior mock_inferior (mock_ptid.pid ()); - address_space mock_aspace {}; - mock_inferior.gdbarch = gdbarch; - mock_inferior.aspace = &mock_aspace; - thread_info mock_thread (&mock_inferior, mock_ptid); - - scoped_restore restore_thread_list - = make_scoped_restore (&mock_inferior.thread_list, &mock_thread); - - /* Add the mock inferior to the inferior list so that look ups by - target+ptid can find it. */ - scoped_restore restore_inferior_list - = make_scoped_restore (&inferior_list); - inferior_list = &mock_inferior; - - /* Switch to the mock inferior. */ - scoped_restore_current_inferior restore_current_inferior; - set_current_inferior (&mock_inferior); - - /* Push the process_stratum target so we can mock accessing - registers. */ - push_target (&mock_target); - - /* Pop it again on exit (return/exception). */ - SCOPE_EXIT { pop_all_targets_at_and_above (process_stratum); }; - - /* Switch to the mock thread. */ - scoped_restore restore_inferior_ptid - = make_scoped_restore (&inferior_ptid, mock_ptid); + scoped_mock_context<test_target_ops> mockctx (gdbarch); struct frame_info *frame = get_current_frame (); const int num_regs = gdbarch_num_cooked_regs (gdbarch); @@ -124,7 +84,7 @@ { std::vector<gdb_byte> expected (TYPE_LENGTH (type), 0); - if (TYPE_CODE (type) == TYPE_CODE_FLT) + if (type->code () == TYPE_CODE_FLT) { /* Generate valid float format. */ target_float_from_string (expected.data (), type, "1.25"); @@ -163,13 +123,11 @@ } } // namespace selftests -#endif /* GDB_SELF_TEST */ +void _initialize_gdbarch_selftests (); void -_initialize_gdbarch_selftests (void) +_initialize_gdbarch_selftests () { -#if GDB_SELF_TEST selftests::register_test_foreach_arch ("register_to_value", selftests::register_to_value_test); -#endif } diff -Nru gdb-9.1/gdb/gdbarch.sh gdb-10.2/gdb/gdbarch.sh --- gdb-9.1/gdb/gdbarch.sh 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbarch.sh 2021-04-25 04:06:26.000000000 +0000 @@ -2,7 +2,7 @@ # Architecture commands for GDB, the GNU debugger. # -# Copyright (C) 1998-2020 Free Software Foundation, Inc. +# Copyright (C) 1998-2021 Free Software Foundation, Inc. # # This file is part of GDB. # @@ -24,22 +24,6 @@ LANG=C ; export LANG LC_ALL=C ; export LC_ALL - -compare_new () -{ - file=$1 - if test ! -r ${file} - then - echo "${file} missing? cp new-${file} ${file}" 1>&2 - elif diff -u ${file} new-${file} - then - echo "${file} unchanged" 1>&2 - else - echo "${file} has changed? cp new-${file} ${file}" 1>&2 - fi -} - - # Format of the input table read="class returntype function formal actual staticdefault predefault postdefault invalid_p print garbage_at_eol" @@ -50,6 +34,7 @@ # On some SH's, 'read' trims leading and trailing whitespace by # default (e.g., bash), while on others (e.g., dash), it doesn't. # Set IFS to empty to disable the trimming everywhere. + # shellcheck disable=SC2162 while IFS='' read line do if test "${line}" = "" @@ -67,15 +52,15 @@ # The semantics of IFS varies between different SH's. Some # treat ``;;' as three fields while some treat it as just two. # Work around this by eliminating ``;;'' .... - line="`echo "${line}" | sed -e 's/;;/; ;/g' -e 's/;;/; ;/g'`" + line="$(echo "${line}" | sed -e 's/;;/; ;/g' -e 's/;;/; ;/g')" OFS="${IFS}" ; IFS="[;]" - eval read ${read} <<EOF + eval read "${read}" <<EOF ${line} EOF IFS="${OFS}" - if test -n "${garbage_at_eol}" + if test -n "${garbage_at_eol:-}" then echo "Garbage at end-of-line in ${line}" 1>&2 kill $$ @@ -86,26 +71,26 @@ # that ended up with just that space character. for r in ${read} do - if eval test \"\${${r}}\" = \"\ \" + if eval test "\"\${${r}}\" = ' '" then - eval ${r}="" + eval "${r}=" fi done case "${class}" in - m ) staticdefault="${predefault}" ;; + m ) staticdefault="${predefault:-}" ;; M ) staticdefault="0" ;; * ) test "${staticdefault}" || staticdefault=0 ;; esac case "${class}" in F | V | M ) - case "${invalid_p}" in + case "${invalid_p:-}" in "" ) if test -n "${predefault}" then #invalid_p="gdbarch->${function} == ${predefault}" - predicate="gdbarch->${function} != ${predefault}" + predicate="gdbarch->${function:-} != ${predefault}" elif class_is_variable_p then predicate="gdbarch->${function} != 0" @@ -122,23 +107,6 @@ esac esac - # PREDEFAULT is a valid fallback definition of MEMBER when - # multi-arch is not enabled. This ensures that the - # default value, when multi-arch is the same as the - # default value when not multi-arch. POSTDEFAULT is - # always a valid definition of MEMBER as this again - # ensures consistency. - - if [ -n "${postdefault}" ] - then - fallbackdefault="${postdefault}" - elif [ -n "${predefault}" ] - then - fallbackdefault="${predefault}" - else - fallbackdefault="0" - fi - #NOT YET: See gdbarch.log for basic verification of # database @@ -156,8 +124,8 @@ fallback_default_p () { - [ -n "${postdefault}" -a "x${invalid_p}" != "x0" ] \ - || [ -n "${predefault}" -a "x${invalid_p}" = "x0" ] + { [ -n "${postdefault:-}" ] && [ "x${invalid_p}" != "x0" ]; } \ + || { [ -n "${predefault}" ] && [ "x${invalid_p}" = "x0" ]; } } class_is_variable_p () @@ -357,12 +325,14 @@ # machine. v;int;long_long_bit;;;8 * sizeof (LONGEST);2*gdbarch->long_bit;;0 -# The ABI default bit-size and format for "half", "float", "double", and +# The ABI default bit-size and format for "bfloat16", "half", "float", "double", and # "long double". These bit/format pairs should eventually be combined # into a single object. For the moment, just initialize them as a pair. # Each format describes both the big and little endian layouts (if # useful). +v;int;bfloat16_bit;;;16;2*TARGET_CHAR_BIT;;0 +v;const struct floatformat **;bfloat16_format;;;;;floatformats_bfloat16;;pformat (gdbarch->bfloat16_format) v;int;half_bit;;;16;2*TARGET_CHAR_BIT;;0 v;const struct floatformat **;half_format;;;;;floatformats_ieee_half;;pformat (gdbarch->half_format) v;int;float_bit;;;8 * sizeof (float);4*TARGET_CHAR_BIT;;0 @@ -446,11 +416,10 @@ # Return -1 if something goes wrong, 0 otherwise. M;int;ax_pseudo_register_push_stack;struct agent_expr *ax, int reg;ax, reg -# Some targets/architectures can do extra processing/display of -# segmentation faults. E.g., Intel MPX boundary faults. -# Call the architecture dependent function to handle the fault. +# Some architectures can display additional information for specific +# signals. # UIOUT is the output stream where the handler will place information. -M;void;handle_segmentation_fault;struct ui_out *uiout;uiout +M;void;report_signal_info;struct ui_out *uiout, enum gdb_signal siggnal;uiout, siggnal # GDB's standard (or well known) register numbers. These can map onto # a real register or a pseudo (computed) register or not be defined at @@ -799,9 +768,7 @@ # not the copy at TO. The caller should update it to point at TO later. # # Return a pointer to data of the architecture's choice to be passed -# to gdbarch_displaced_step_fixup. Or, return NULL to indicate that -# the instruction's effects have been completely simulated, with the -# resulting state written back to REGS. +# to gdbarch_displaced_step_fixup. # # For a general explanation of displaced stepping and how GDB uses it, # see the comments in infrun.c. @@ -816,7 +783,7 @@ # If the instruction cannot execute out of line, return NULL. The # core falls back to stepping past the instruction in-line instead in # that case. -M;struct displaced_step_closure *;displaced_step_copy_insn;CORE_ADDR from, CORE_ADDR to, struct regcache *regs;from, to, regs +M;displaced_step_closure_up;displaced_step_copy_insn;CORE_ADDR from, CORE_ADDR to, struct regcache *regs;from, to, regs # Return true if GDB should use hardware single-stepping to execute # the displaced instruction identified by CLOSURE. If false, @@ -874,8 +841,6 @@ M;const struct target_desc *;core_read_description;struct target_ops *target, bfd *abfd;target, abfd -# Handle special encoding of static variables in stabs debug info. -F;const char *;static_transform_name;const char *name;name # Set if the address in N_SO or N_FUN stabs may be zero. v;int;sofun_address_maybe_missing;;;0;0;;0 @@ -1152,6 +1117,10 @@ # Return non-zero if the instruction at ADDR is a jump; zero otherwise. m;int;insn_is_jump;CORE_ADDR addr;addr;;default_insn_is_jump;;0 +# Return true if there's a program/permanent breakpoint planted in +# memory at ADDRESS, return false otherwise. +m;bool;program_breakpoint_here_p;CORE_ADDR address;address;;default_program_breakpoint_here_p;;0 + # Read one auxv entry from *READPTR, not reading locations >= ENDPTR. # Return 0 if *READPTR is already at the end of the buffer. # Return -1 if there is insufficient buffer for a whole entry. @@ -1209,21 +1178,24 @@ # Return a string containing any flags for the given PC in the given FRAME. f;std::string;get_pc_address_flags;frame_info *frame, CORE_ADDR pc;frame, pc;;default_get_pc_address_flags;;0 +# Read core file mappings +m;void;read_core_file_mappings;struct bfd *cbfd,gdb::function_view<void (ULONGEST count)> pre_loop_cb,gdb::function_view<void (int num, ULONGEST start, ULONGEST end, ULONGEST file_ofs, const char *filename, const void *other)> loop_cb;cbfd, pre_loop_cb, loop_cb;;default_read_core_file_mappings;;0 + EOF } # # The .log file # -exec > new-gdbarch.log +exec > gdbarch.log function_list | while do_read do cat <<EOF -${class} ${returntype} ${function} ($formal) +${class} ${returntype:-} ${function} (${formal:-}) EOF for r in ${read} do - eval echo \"\ \ \ \ ${r}=\${${r}}\" + eval echo "\" ${r}=\${${r}}\"" done if class_is_predicate_p && fallback_default_p then @@ -1231,7 +1203,7 @@ kill $$ exit 1 fi - if [ "x${invalid_p}" = "x0" -a -n "${postdefault}" ] + if [ "x${invalid_p}" = "x0" ] && [ -n "${postdefault}" ] then echo "Error: postdefault is useless when invalid_p=0" 1>&2 kill $$ @@ -1251,7 +1223,6 @@ done exec 1>&2 -compare_new gdbarch.log copyright () @@ -1262,7 +1233,7 @@ /* Dynamic architecture support for GDB, the GNU debugger. - Copyright (C) 1998-2020 Free Software Foundation, Inc. + Copyright (C) 1998-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -1279,17 +1250,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ -/* This file was created with the aid of \`\`gdbarch.sh''. - - The Bourne shell script \`\`gdbarch.sh'' creates the files - \`\`new-gdbarch.c'' and \`\`new-gdbarch.h and then compares them - against the existing \`\`gdbarch.[hc]''. Any differences found - being reported. - - If editing this file, please also run gdbarch.sh and merge any - changes into that script. Conversely, when making sweeping changes - to this file, modifying gdbarch.sh and using its output may prove - easier. */ +/* This file was created with the aid of \`\`gdbarch.sh''. */ EOF } @@ -1308,6 +1269,8 @@ #include "frame.h" #include "dis-asm.h" #include "gdb_obstack.h" +#include "infrun.h" +#include "osabi.h" struct floatformat; struct ui_file; @@ -1324,7 +1287,6 @@ struct bp_target_info; struct target_desc; struct symbol; -struct displaced_step_closure; struct syscall; struct agent_expr; struct axs_value; @@ -1404,8 +1366,8 @@ if class_is_info_p then printf "\n" - printf "extern ${returntype} gdbarch_${function} (struct gdbarch *gdbarch);\n" - printf "/* set_gdbarch_${function}() - not applicable - pre-initialized. */\n" + printf "extern %s gdbarch_%s (struct gdbarch *gdbarch);\n" "$returntype" "$function" + printf "/* set_gdbarch_%s() - not applicable - pre-initialized. */\n" "$function" fi done @@ -1426,33 +1388,33 @@ if class_is_predicate_p then printf "\n" - printf "extern int gdbarch_${function}_p (struct gdbarch *gdbarch);\n" + printf "extern int gdbarch_%s_p (struct gdbarch *gdbarch);\n" "$function" fi if class_is_variable_p then printf "\n" - printf "extern ${returntype} gdbarch_${function} (struct gdbarch *gdbarch);\n" - printf "extern void set_gdbarch_${function} (struct gdbarch *gdbarch, ${returntype} ${function});\n" + printf "extern %s gdbarch_%s (struct gdbarch *gdbarch);\n" "$returntype" "$function" + printf "extern void set_gdbarch_%s (struct gdbarch *gdbarch, %s %s);\n" "$function" "$returntype" "$function" fi if class_is_function_p then printf "\n" if [ "x${formal}" = "xvoid" ] && class_is_multiarch_p then - printf "typedef ${returntype} (gdbarch_${function}_ftype) (struct gdbarch *gdbarch);\n" + printf "typedef %s (gdbarch_%s_ftype) (struct gdbarch *gdbarch);\n" "$returntype" "$function" elif class_is_multiarch_p then - printf "typedef ${returntype} (gdbarch_${function}_ftype) (struct gdbarch *gdbarch, ${formal});\n" + printf "typedef %s (gdbarch_%s_ftype) (struct gdbarch *gdbarch, %s);\n" "$returntype" "$function" "$formal" else - printf "typedef ${returntype} (gdbarch_${function}_ftype) (${formal});\n" + printf "typedef %s (gdbarch_%s_ftype) (%s);\n" "$returntype" "$function" "$formal" fi if [ "x${formal}" = "xvoid" ] then - printf "extern ${returntype} gdbarch_${function} (struct gdbarch *gdbarch);\n" + printf "extern %s gdbarch_%s (struct gdbarch *gdbarch);\n" "$returntype" "$function" else - printf "extern ${returntype} gdbarch_${function} (struct gdbarch *gdbarch, ${formal});\n" + printf "extern %s gdbarch_%s (struct gdbarch *gdbarch, %s);\n" "$returntype" "$function" "$formal" fi - printf "extern void set_gdbarch_${function} (struct gdbarch *gdbarch, gdbarch_${function}_ftype *${function});\n" + printf "extern void set_gdbarch_%s (struct gdbarch *gdbarch, gdbarch_%s_ftype *%s);\n" "$function" "$function" "$function" fi done @@ -1672,9 +1634,6 @@ extern struct gdbarch_data *gdbarch_data_register_pre_init (gdbarch_data_pre_init_ftype *init); typedef void *(gdbarch_data_post_init_ftype) (struct gdbarch *gdbarch); extern struct gdbarch_data *gdbarch_data_register_post_init (gdbarch_data_post_init_ftype *init); -extern void deprecated_set_gdbarch_data (struct gdbarch *gdbarch, - struct gdbarch_data *data, - void *pointer); extern void *gdbarch_data (struct gdbarch *gdbarch, struct gdbarch_data *); @@ -1706,8 +1665,8 @@ #endif EOF exec 1>&2 -#../move-if-change new-gdbarch.h gdbarch.h -compare_new gdbarch.h +../move-if-change new-gdbarch.h gdbarch.h +rm -f new-gdbarch.h # @@ -1827,7 +1786,7 @@ do if class_is_info_p then - printf " ${returntype} ${function};\n" + printf " %s %s;\n" "$returntype" "$function" fi done printf "\n" @@ -1868,10 +1827,10 @@ do if class_is_variable_p then - printf " ${returntype} ${function};\n" + printf " %s %s;\n" "$returntype" "$function" elif class_is_function_p then - printf " gdbarch_${function}_ftype *${function};\n" + printf " gdbarch_%s_ftype *%s;\n" "$function" "$function" fi done printf "};\n" @@ -1907,7 +1866,7 @@ do if class_is_info_p then - printf " gdbarch->${function} = info->${function};\n" + printf " gdbarch->%s = info->%s;\n" "$function" "$function" fi done printf "\n" @@ -1916,9 +1875,9 @@ do if class_is_function_p || class_is_variable_p then - if [ -n "${predefault}" -a "x${predefault}" != "x0" ] + if [ -n "${predefault}" ] && [ "x${predefault}" != "x0" ] then - printf " gdbarch->${function} = ${predefault};\n" + printf " gdbarch->%s = %s;\n" "$function" "$predefault" fi fi done @@ -1991,31 +1950,31 @@ then if [ "x${invalid_p}" = "x0" ] then - printf " /* Skip verify of ${function}, invalid_p == 0 */\n" + printf " /* Skip verify of %s, invalid_p == 0 */\n" "$function" elif class_is_predicate_p then - printf " /* Skip verify of ${function}, has predicate. */\n" + printf " /* Skip verify of %s, has predicate. */\n" "$function" # FIXME: See do_read for potential simplification - elif [ -n "${invalid_p}" -a -n "${postdefault}" ] + elif [ -n "${invalid_p}" ] && [ -n "${postdefault}" ] then - printf " if (${invalid_p})\n" - printf " gdbarch->${function} = ${postdefault};\n" - elif [ -n "${predefault}" -a -n "${postdefault}" ] + printf " if (%s)\n" "$invalid_p" + printf " gdbarch->%s = %s;\n" "$function" "$postdefault" + elif [ -n "${predefault}" ] && [ -n "${postdefault}" ] then - printf " if (gdbarch->${function} == ${predefault})\n" - printf " gdbarch->${function} = ${postdefault};\n" + printf " if (gdbarch->%s == %s)\n" "$function" "$predefault" + printf " gdbarch->%s = %s;\n" "$function" "$postdefault" elif [ -n "${postdefault}" ] then - printf " if (gdbarch->${function} == 0)\n" - printf " gdbarch->${function} = ${postdefault};\n" + printf " if (gdbarch->%s == 0)\n" "$function" + printf " gdbarch->%s = %s;\n" "$function" "$postdefault" elif [ -n "${invalid_p}" ] then - printf " if (${invalid_p})\n" - printf " log.puts (\"\\\\n\\\\t${function}\");\n" + printf " if (%s)\n" "$invalid_p" + printf " log.puts (\"\\\\n\\\\t%s\");\n" "$function" elif [ -n "${predefault}" ] then - printf " if (gdbarch->${function} == ${predefault})\n" - printf " log.puts (\"\\\\n\\\\t${function}\");\n" + printf " if (gdbarch->%s == %s)\n" "$function" "$predefault" + printf " log.puts (\"\\\\n\\\\t%s\");\n" "$function" fi fi done @@ -2051,15 +2010,15 @@ if class_is_predicate_p then printf " fprintf_unfiltered (file,\n" - printf " \"gdbarch_dump: gdbarch_${function}_p() = %%d\\\\n\",\n" - printf " gdbarch_${function}_p (gdbarch));\n" + printf " \"gdbarch_dump: gdbarch_%s_p() = %%d\\\\n\",\n" "$function" + printf " gdbarch_%s_p (gdbarch));\n" "$function" fi # Print the corresponding value. if class_is_function_p then printf " fprintf_unfiltered (file,\n" - printf " \"gdbarch_dump: ${function} = <%%s>\\\\n\",\n" - printf " host_address_to_string (gdbarch->${function}));\n" + printf " \"gdbarch_dump: %s = <%%s>\\\\n\",\n" "$function" + printf " host_address_to_string (gdbarch->%s));\n" "$function" else # It is a variable case "${print}:${returntype}" in @@ -2076,8 +2035,8 @@ ;; esac printf " fprintf_unfiltered (file,\n" - printf " \"gdbarch_dump: ${function} = %s\\\\n\",\n" "${fmt}" - printf " ${print});\n" + printf " \"gdbarch_dump: %s = %s\\\\n\",\n" "$function" "$fmt" + printf " %s);\n" "$print" fi done cat <<EOF @@ -2105,33 +2064,33 @@ then printf "\n" printf "int\n" - printf "gdbarch_${function}_p (struct gdbarch *gdbarch)\n" + printf "gdbarch_%s_p (struct gdbarch *gdbarch)\n" "$function" printf "{\n" printf " gdb_assert (gdbarch != NULL);\n" - printf " return ${predicate};\n" + printf " return %s;\n" "$predicate" printf "}\n" fi if class_is_function_p then printf "\n" - printf "${returntype}\n" + printf "%s\n" "$returntype" if [ "x${formal}" = "xvoid" ] then - printf "gdbarch_${function} (struct gdbarch *gdbarch)\n" + printf "gdbarch_%s (struct gdbarch *gdbarch)\n" "$function" else - printf "gdbarch_${function} (struct gdbarch *gdbarch, ${formal})\n" + printf "gdbarch_%s (struct gdbarch *gdbarch, %s)\n" "$function" "$formal" fi printf "{\n" printf " gdb_assert (gdbarch != NULL);\n" - printf " gdb_assert (gdbarch->${function} != NULL);\n" + printf " gdb_assert (gdbarch->%s != NULL);\n" "$function" if class_is_predicate_p && test -n "${predefault}" then # Allow a call to a function with a predicate. - printf " /* Do not check predicate: ${predicate}, allow call. */\n" + printf " /* Do not check predicate: %s, allow call. */\n" "$predicate" fi printf " if (gdbarch_debug >= 2)\n" - printf " fprintf_unfiltered (gdb_stdlog, \"gdbarch_${function} called\\\\n\");\n" - if [ "x${actual}" = "x-" -o "x${actual}" = "x" ] + printf " fprintf_unfiltered (gdb_stdlog, \"gdbarch_%s called\\\\n\");\n" "$function" + if [ "x${actual:-}" = "x-" ] || [ "x${actual:-}" = "x" ] then if class_is_multiarch_p then @@ -2149,58 +2108,58 @@ fi if [ "x${returntype}" = "xvoid" ] then - printf " gdbarch->${function} (${params});\n" + printf " gdbarch->%s (%s);\n" "$function" "$params" else - printf " return gdbarch->${function} (${params});\n" + printf " return gdbarch->%s (%s);\n" "$function" "$params" fi printf "}\n" printf "\n" printf "void\n" - printf "set_gdbarch_${function} (struct gdbarch *gdbarch,\n" - printf " `echo ${function} | sed -e 's/./ /g'` gdbarch_${function}_ftype ${function})\n" + printf "set_gdbarch_%s (struct gdbarch *gdbarch,\n" "$function" + printf " %s gdbarch_%s_ftype %s)\n" "$(echo "$function" | sed -e 's/./ /g')" "$function" "$function" printf "{\n" - printf " gdbarch->${function} = ${function};\n" + printf " gdbarch->%s = %s;\n" "$function" "$function" printf "}\n" elif class_is_variable_p then printf "\n" - printf "${returntype}\n" - printf "gdbarch_${function} (struct gdbarch *gdbarch)\n" + printf "%s\n" "$returntype" + printf "gdbarch_%s (struct gdbarch *gdbarch)\n" "$function" printf "{\n" printf " gdb_assert (gdbarch != NULL);\n" if [ "x${invalid_p}" = "x0" ] then - printf " /* Skip verify of ${function}, invalid_p == 0 */\n" + printf " /* Skip verify of %s, invalid_p == 0 */\n" "$function" elif [ -n "${invalid_p}" ] then printf " /* Check variable is valid. */\n" - printf " gdb_assert (!(${invalid_p}));\n" + printf " gdb_assert (!(%s));\n" "$invalid_p" elif [ -n "${predefault}" ] then printf " /* Check variable changed from pre-default. */\n" - printf " gdb_assert (gdbarch->${function} != ${predefault});\n" + printf " gdb_assert (gdbarch->%s != %s);\n" "$function" "$predefault" fi printf " if (gdbarch_debug >= 2)\n" - printf " fprintf_unfiltered (gdb_stdlog, \"gdbarch_${function} called\\\\n\");\n" - printf " return gdbarch->${function};\n" + printf " fprintf_unfiltered (gdb_stdlog, \"gdbarch_%s called\\\\n\");\n" "$function" + printf " return gdbarch->%s;\n" "$function" printf "}\n" printf "\n" printf "void\n" - printf "set_gdbarch_${function} (struct gdbarch *gdbarch,\n" - printf " `echo ${function} | sed -e 's/./ /g'` ${returntype} ${function})\n" + printf "set_gdbarch_%s (struct gdbarch *gdbarch,\n" "$function" + printf " %s %s %s)\n" "$(echo "$function" | sed -e 's/./ /g')" "$returntype" "$function" printf "{\n" - printf " gdbarch->${function} = ${function};\n" + printf " gdbarch->%s = %s;\n" "$function" "$function" printf "}\n" elif class_is_info_p then printf "\n" - printf "${returntype}\n" - printf "gdbarch_${function} (struct gdbarch *gdbarch)\n" + printf "%s\n" "$returntype" + printf "gdbarch_%s (struct gdbarch *gdbarch)\n" "$function" printf "{\n" printf " gdb_assert (gdbarch != NULL);\n" printf " if (gdbarch_debug >= 2)\n" - printf " fprintf_unfiltered (gdb_stdlog, \"gdbarch_${function} called\\\\n\");\n" - printf " return gdbarch->${function};\n" + printf " fprintf_unfiltered (gdb_stdlog, \"gdbarch_%s called\\\\n\");\n" "$function" + printf " return gdbarch->%s;\n" "$function" printf "}\n" fi done @@ -2279,20 +2238,6 @@ gdbarch->data = GDBARCH_OBSTACK_CALLOC (gdbarch, gdbarch->nr_data, void *); } -/* Initialize the current value of the specified per-architecture - data-pointer. */ - -void -deprecated_set_gdbarch_data (struct gdbarch *gdbarch, - struct gdbarch_data *data, - void *pointer) -{ - gdb_assert (data->index < gdbarch->nr_data); - gdb_assert (gdbarch->data[data->index] == NULL); - gdb_assert (data->pre_init == NULL); - gdbarch->data[data->index] = pointer; -} - /* Return the current value of the specified per-architecture data-pointer. */ @@ -2322,11 +2267,9 @@ data->init_p = 1; } else - /* The architecture initialization hasn't completed - punt - - hope that the caller knows what they are doing. Once - deprecated_set_gdbarch_data has been initialized, this can be - changed to an internal error. */ - return NULL; + internal_error (__FILE__, __LINE__, + _("gdbarch post-init data field can only be used " + "after gdbarch is fully initialised")); gdb_assert (gdbarch->data[data->index] != NULL); } return gdbarch->data[data->index]; @@ -2600,8 +2543,9 @@ return current_inferior ()->gdbarch; } +void _initialize_gdbarch (); void -_initialize_gdbarch (void) +_initialize_gdbarch () { add_setshow_zuinteger_cmd ("arch", class_maintenance, &gdbarch_debug, _("\\ Set architecture debugging."), _("\\ @@ -2615,5 +2559,5 @@ # close things off exec 1>&2 -#../move-if-change new-gdbarch.c gdbarch.c -compare_new gdbarch.c +../move-if-change new-gdbarch.c gdbarch.c +rm -f new-gdbarch.c diff -Nru gdb-9.1/gdb/gdb_bfd.c gdb-10.2/gdb/gdb_bfd.c --- gdb-9.1/gdb/gdb_bfd.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdb_bfd.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Definitions for BFD wrappers used by GDB. - Copyright (C) 2011-2020 Free Software Foundation, Inc. + Copyright (C) 2011-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -59,26 +59,16 @@ struct gdb_bfd_data { - gdb_bfd_data (bfd *abfd) - : mtime (bfd_get_mtime (abfd)), - size (bfd_get_size (abfd)), + /* Note that if ST is nullptr, then we simply fill in zeroes. */ + gdb_bfd_data (bfd *abfd, struct stat *st) + : mtime (st == nullptr ? 0 : st->st_mtime), + size (st == nullptr ? 0 : st->st_size), + inode (st == nullptr ? 0 : st->st_ino), + device_id (st == nullptr ? 0 : st->st_dev), relocation_computed (0), needs_relocations (0), crc_computed (0) { - struct stat buf; - - if (bfd_stat (abfd, &buf) == 0) - { - inode = buf.st_ino; - device_id = buf.st_dev; - } - else - { - /* The stat failed. */ - inode = 0; - device_id = 0; - } } ~gdb_bfd_data () @@ -271,24 +261,30 @@ return -1; } +/* bfd_openr_iovec OPEN_CLOSURE data for gdb_bfd_open. */ +struct gdb_bfd_open_closure +{ + inferior *inf; + bool warn_if_slow; +}; + /* Wrapper for target_fileio_open suitable for passing as the - OPEN_FUNC argument to gdb_bfd_openr_iovec. The supplied - OPEN_CLOSURE is unused. */ + OPEN_FUNC argument to gdb_bfd_openr_iovec. */ static void * -gdb_bfd_iovec_fileio_open (struct bfd *abfd, void *inferior) +gdb_bfd_iovec_fileio_open (struct bfd *abfd, void *open_closure) { const char *filename = bfd_get_filename (abfd); int fd, target_errno; int *stream; + gdb_bfd_open_closure *oclosure = (gdb_bfd_open_closure *) open_closure; gdb_assert (is_target_filename (filename)); - fd = target_fileio_open_warn_if_slow ((struct inferior *) inferior, - filename - + strlen (TARGET_SYSROOT_PREFIX), - FILEIO_O_RDONLY, 0, - &target_errno); + fd = target_fileio_open (oclosure->inf, + filename + strlen (TARGET_SYSROOT_PREFIX), + FILEIO_O_RDONLY, 0, oclosure->warn_if_slow, + &target_errno); if (fd == -1) { errno = fileio_errno_to_host (target_errno); @@ -376,10 +372,35 @@ return result; } +/* A helper function to initialize the data that gdb attaches to each + BFD. */ + +static void +gdb_bfd_init_data (struct bfd *abfd, struct stat *st) +{ + struct gdb_bfd_data *gdata; + void **slot; + + gdb_assert (bfd_usrdata (abfd) == nullptr); + + /* Ask BFD to decompress sections in bfd_get_full_section_contents. */ + abfd->flags |= BFD_DECOMPRESS; + + gdata = new gdb_bfd_data (abfd, st); + bfd_set_usrdata (abfd, gdata); + bfd_alloc_data (abfd); + + /* This is the first we've seen it, so add it to the hash table. */ + slot = htab_find_slot (all_bfds, abfd, INSERT); + gdb_assert (slot && !*slot); + *slot = abfd; +} + /* See gdb_bfd.h. */ gdb_bfd_ref_ptr -gdb_bfd_open (const char *name, const char *target, int fd) +gdb_bfd_open (const char *name, const char *target, int fd, + bool warn_if_slow) { hashval_t hash; void **slot; @@ -393,9 +414,10 @@ { gdb_assert (fd == -1); + gdb_bfd_open_closure open_closure { current_inferior (), warn_if_slow }; return gdb_bfd_openr_iovec (name, target, gdb_bfd_iovec_fileio_open, - current_inferior (), + &open_closure, gdb_bfd_iovec_fileio_pread, gdb_bfd_iovec_fileio_close, gdb_bfd_iovec_fileio_fstat); @@ -418,23 +440,25 @@ } } - search.filename = name; if (fstat (fd, &st) < 0) { - /* Weird situation here. */ - search.mtime = 0; - search.size = 0; - search.inode = 0; - search.device_id = 0; - } - else - { - search.mtime = st.st_mtime; - search.size = st.st_size; - search.inode = st.st_ino; - search.device_id = st.st_dev; + /* Weird situation here -- don't cache if we can't stat. */ + if (debug_bfd_cache) + fprintf_unfiltered (gdb_stdlog, + "Could not stat %s - not caching\n", + name); + abfd = bfd_fopen (name, target, FOPEN_RB, fd); + if (abfd == nullptr) + return nullptr; + return gdb_bfd_ref_ptr::new_reference (abfd); } + search.filename = name; + search.mtime = st.st_mtime; + search.size = st.st_size; + search.inode = st.st_ino; + search.device_id = st.st_dev; + /* Note that this must compute the same result as hash_bfd. */ hash = htab_hash_string (name); /* Note that we cannot use htab_find_slot_with_hash here, because @@ -469,7 +493,14 @@ *slot = abfd; } - return gdb_bfd_ref_ptr::new_reference (abfd); + /* It's important to pass the already-computed stat info here, + rather than, say, calling gdb_bfd_ref_ptr::new_reference. BFD by + default will "stat" the file each time bfd_get_mtime is called -- + and since we already entered it into the hash table using this + mtime, if the file changed at the wrong moment, the race would + lead to a hash table corruption. */ + gdb_bfd_init_data (abfd, &st); + return gdb_bfd_ref_ptr (abfd); } /* A helper function that releases any section data attached to the @@ -522,7 +553,6 @@ gdb_bfd_ref (struct bfd *abfd) { struct gdb_bfd_data *gdata; - void **slot; if (abfd == NULL) return; @@ -541,17 +571,9 @@ return; } - /* Ask BFD to decompress sections in bfd_get_full_section_contents. */ - abfd->flags |= BFD_DECOMPRESS; - - gdata = new gdb_bfd_data (abfd); - bfd_set_usrdata (abfd, gdata); - bfd_alloc_data (abfd); - - /* This is the first we've seen it, so add it to the hash table. */ - slot = htab_find_slot (all_bfds, abfd, INSERT); - gdb_assert (slot && !*slot); - *slot = abfd; + /* Caching only happens via gdb_bfd_open, so passing nullptr here is + fine. */ + gdb_bfd_init_data (abfd, nullptr); } /* See gdb_bfd.h. */ @@ -926,7 +948,19 @@ return gdata->needs_relocations; } - +/* See gdb_bfd.h. */ + +bool +gdb_bfd_get_full_section_contents (bfd *abfd, asection *section, + gdb::byte_vector *contents) +{ + bfd_size_type section_size = bfd_section_size (section); + + contents->resize (section_size); + + return bfd_get_section_contents (abfd, section, contents->data (), 0, + section_size); +} /* A callback for htab_traverse that prints a single BFD. */ @@ -962,8 +996,9 @@ htab_traverse (all_bfds, print_one_bfd, uiout); } +void _initialize_gdb_bfd (); void -_initialize_gdb_bfd (void) +_initialize_gdb_bfd () { all_bfds = htab_create_alloc (10, htab_hash_pointer, htab_eq_pointer, NULL, xcalloc, xfree); diff -Nru gdb-9.1/gdb/gdb_bfd.h gdb-10.2/gdb/gdb_bfd.h --- gdb-9.1/gdb/gdb_bfd.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/gdb_bfd.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Definitions for BFD wrappers used by GDB. - Copyright (C) 2011-2020 Free Software Foundation, Inc. + Copyright (C) 2011-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -21,7 +21,9 @@ #define GDB_BFD_H #include "registry.h" +#include "gdbsupport/byte-vector.h" #include "gdbsupport/gdb_ref_ptr.h" +#include "gdbsupport/next-iterator.h" DECLARE_REGISTRY (bfd); @@ -77,9 +79,12 @@ If the BFD was not accessed using target fileio operations then the filename associated with the BFD and accessible with bfd_get_filename will not be exactly NAME but rather NAME with - TARGET_SYSROOT_PREFIX stripped. */ + TARGET_SYSROOT_PREFIX stripped. If WARN_IF_SLOW is true, print a + warning message if the file is being accessed over a link that may + be slow. */ -gdb_bfd_ref_ptr gdb_bfd_open (const char *name, const char *target, int fd); +gdb_bfd_ref_ptr gdb_bfd_open (const char *name, const char *target, + int fd = -1, bool warn_if_slow = true); /* Mark the CHILD BFD as being a member of PARENT. Also, increment the reference count of CHILD. Calling this function ensures that @@ -181,4 +186,29 @@ int gdb_bfd_requires_relocations (bfd *abfd); +/* Alternative to bfd_get_full_section_contents that returns the section + contents in *CONTENTS, instead of an allocated buffer. + + Return true on success, false otherwise. */ + +bool gdb_bfd_get_full_section_contents (bfd *abfd, asection *section, + gdb::byte_vector *contents); + +/* Range adapter for a BFD's sections. + + To be used as: + + for (asection *sect : gdb_bfd_all_sections (bfd)) + ... use SECT ... + */ + +using gdb_bfd_section_iterator = next_iterator<asection>; +using gdb_bfd_section_range = next_adapter<asection, gdb_bfd_section_iterator>; + +static inline +gdb_bfd_section_range gdb_bfd_sections (bfd *abfd) +{ + return gdb_bfd_section_range (abfd->sections); +} + #endif /* GDB_BFD_H */ diff -Nru gdb-9.1/gdb/gdb_buildall.sh gdb-10.2/gdb/gdb_buildall.sh --- gdb-9.1/gdb/gdb_buildall.sh 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/gdb_buildall.sh 2021-04-25 04:06:26.000000000 +0000 @@ -2,7 +2,7 @@ # Build script to build GDB with all targets enabled. -# Copyright (C) 2008-2020 Free Software Foundation, Inc. +# Copyright (C) 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or diff -Nru gdb-9.1/gdb/gdb.c gdb-10.2/gdb/gdb.c --- gdb-9.1/gdb/gdb.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/gdb.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Main function for CLI gdb. - Copyright (C) 2002-2020 Free Software Foundation, Inc. + Copyright (C) 2002-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/gdbcmd.h gdb-10.2/gdb/gdbcmd.h --- gdb-9.1/gdb/gdbcmd.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/gdbcmd.h 2021-04-25 04:06:26.000000000 +0000 @@ -6,7 +6,7 @@ fnasser@redhat.com */ /* Header file for GDB-specific command-line stuff. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/gdb-code-style.el gdb-10.2/gdb/gdb-code-style.el --- gdb-9.1/gdb/gdb-code-style.el 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/gdb-code-style.el 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ ;;; gdb-code-style.el --- code style checker for GDB contributors -;; Copyright (C) 2012-2020 Free Software Foundation, Inc. +;; Copyright (C) 2012-2021 Free Software Foundation, Inc. ;; Author: Yao Qi <yao@codesourcery.com> ;; Created: 17 April 2012 diff -Nru gdb-9.1/gdb/gdbcore.h gdb-10.2/gdb/gdbcore.h --- gdb-9.1/gdb/gdbcore.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbcore.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Machine independent variables that describe the core file under GDB. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -87,12 +87,6 @@ int len, enum bfd_endian byte_order); -/* Read a null-terminated string from the debuggee's memory, given - address, a buffer into which to place the string, and the maximum - available space. */ - -extern void read_memory_string (CORE_ADDR, char *, int); - /* Read the pointer of type TYPE at ADDR, and return the address it represents. */ @@ -157,75 +151,17 @@ extern void validate_files (void); +/* Give the user a message if the current exec file does not match the exec + file determined from the target. In case of mismatch, ask the user + if the exec file determined from target must be loaded. */ +extern void validate_exec_file (int from_tty); + /* The current default bfd target. */ -extern char *gnutarget; +extern const char *gnutarget; extern void set_gnutarget (const char *); -/* Structure to keep track of core register reading functions for - various core file types. */ - -struct core_fns - { - - /* BFD flavour that a core file handler is prepared to read. This - can be used by the handler's core tasting function as a first - level filter to reject BFD's that don't have the right - flavour. */ - - enum bfd_flavour core_flavour; - - /* Core file handler function to call to recognize corefile - formats that BFD rejects. Some core file format just don't fit - into the BFD model, or may require other resources to identify - them, that simply aren't available to BFD (such as symbols from - another file). Returns nonzero if the handler recognizes the - format, zero otherwise. */ - - int (*check_format) (bfd *); - - /* Core file handler function to call to ask if it can handle a - given core file format or not. Returns zero if it can't, - nonzero otherwise. */ - - int (*core_sniffer) (struct core_fns *, bfd *); - - /* Extract the register values out of the core file and supply them - into REGCACHE. - - CORE_REG_SECT points to the register values themselves, read into - memory. - - CORE_REG_SIZE is the size of that area. - - WHICH says which set of registers we are handling: - 0 --- integer registers - 2 --- floating-point registers, on machines where they are - discontiguous - 3 --- extended floating-point registers, on machines where - these are present in yet a third area. (GNU/Linux uses - this to get at the SSE registers.) - - REG_ADDR is the offset from u.u_ar0 to the register values relative to - core_reg_sect. This is used with old-fashioned core files to locate the - registers in a large upage-plus-stack ".reg" section. Original upage - address X is at location core_reg_sect+x+reg_addr. */ - - void (*core_read_registers) (struct regcache *regcache, - char *core_reg_sect, - unsigned core_reg_size, - int which, CORE_ADDR reg_addr); - - /* Finds the next struct core_fns. They are allocated and - initialized in whatever module implements the functions pointed - to; an initializer calls deprecated_add_core_fns to add them to - the global chain. */ - - struct core_fns *next; - - }; - /* Build either a single-thread or multi-threaded section name for PTID. @@ -269,10 +205,4 @@ std::string m_storage; }; -/* NOTE: cagney/2004-04-05: Replaced by "regset.h" and - regset_from_core_section(). */ -extern void deprecated_add_core_fns (struct core_fns *cf); -extern int default_core_sniffer (struct core_fns *cf, bfd * abfd); -extern int default_check_format (bfd * abfd); - #endif /* !defined (GDBCORE_H) */ diff -Nru gdb-9.1/gdb/gdb_curses.h gdb-10.2/gdb/gdb_curses.h --- gdb-9.1/gdb/gdb_curses.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/gdb_curses.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Portable <curses.h>. - Copyright (C) 2004-2020 Free Software Foundation, Inc. + Copyright (C) 2004-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/gdb-demangle.c gdb-10.2/gdb/gdb-demangle.c --- gdb-9.1/gdb/gdb-demangle.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdb-demangle.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Basic C++ demangling support for GDB. - Copyright (C) 1991-2020 Free Software Foundation, Inc. + Copyright (C) 1991-2021 Free Software Foundation, Inc. Written by Fred Fish at Cygnus Support. @@ -212,8 +212,9 @@ error (_("Can't demangle \"%s\""), name); } +void _initialize_gdb_demangle (); void -_initialize_gdb_demangle (void) +_initialize_gdb_demangle () { int i, ndems; diff -Nru gdb-9.1/gdb/gdb-demangle.h gdb-10.2/gdb/gdb-demangle.h --- gdb-9.1/gdb/gdb-demangle.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/gdb-demangle.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Basic C++ demangling support for GDB. - Copyright (C) 2011-2020 Free Software Foundation, Inc. + Copyright (C) 2011-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/gdb_expat.h gdb-10.2/gdb/gdb_expat.h --- gdb-9.1/gdb/gdb_expat.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/gdb_expat.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Slightly more portable version of <expat.h>. - Copyright (C) 2006-2020 Free Software Foundation, Inc. + Copyright (C) 2006-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/gdb-gdb.gdb.in gdb-10.2/gdb/gdb-gdb.gdb.in --- gdb-9.1/gdb/gdb-gdb.gdb.in 2019-02-23 12:20:11.000000000 +0000 +++ gdb-10.2/gdb/gdb-gdb.gdb.in 2020-09-13 02:33:41.000000000 +0000 @@ -7,9 +7,12 @@ b internal_error + # This provides an easy way to break into the top-level GDB by + # typing "info". b info_command commands silent + # This avoids the voluminous output of "info". return end diff -Nru gdb-9.1/gdb/gdb-gdb.py.in gdb-10.2/gdb/gdb-gdb.py.in --- gdb-9.1/gdb/gdb-gdb.py.in 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/gdb-gdb.py.in 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2009-2020 Free Software Foundation, Inc. +# Copyright (C) 2009-2021 Free Software Foundation, Inc. # # This file is part of GDB. # diff -Nru gdb-9.1/gdb/gdb_mbuild.sh gdb-10.2/gdb/gdb_mbuild.sh --- gdb-9.1/gdb/gdb_mbuild.sh 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/gdb_mbuild.sh 2021-04-25 04:06:26.000000000 +0000 @@ -3,7 +3,7 @@ # Multi-build script for testing compilation of all maintained # configs of GDB. -# Copyright (C) 2002-2020 Free Software Foundation, Inc. +# Copyright (C) 2002-2021 Free Software Foundation, Inc. # Contributed by Richard Earnshaw (rearnsha@arm.com) diff -Nru gdb-9.1/gdb/gdb_obstack.c gdb-10.2/gdb/gdb_obstack.c --- gdb-9.1/gdb/gdb_obstack.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/gdb_obstack.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Obstack wrapper for GDB. - Copyright (C) 2013-2020 Free Software Foundation, Inc. + Copyright (C) 2013-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/gdb_obstack.h gdb-10.2/gdb/gdb_obstack.h --- gdb-9.1/gdb/gdb_obstack.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/gdb_obstack.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Obstack wrapper for GDB. - Copyright (C) 2002-2020 Free Software Foundation, Inc. + Copyright (C) 2002-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -125,6 +125,8 @@ ~auto_obstack () { obstack_free (this, NULL); } + DISABLE_COPY_AND_ASSIGN (auto_obstack); + /* Free all memory in the obstack but leave it valid for further allocation. */ void clear () diff -Nru gdb-9.1/gdb/gdb_proc_service.h gdb-10.2/gdb/gdb_proc_service.h --- gdb-9.1/gdb/gdb_proc_service.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/gdb_proc_service.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* <proc_service.h> replacement for systems that don't have it. - Copyright (C) 2000-2020 Free Software Foundation, Inc. + Copyright (C) 2000-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/gdb_regex.c gdb-10.2/gdb/gdb_regex.c --- gdb-9.1/gdb/gdb_regex.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/gdb_regex.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2011-2020 Free Software Foundation, Inc. +/* Copyright (C) 2011-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/gdb_regex.h gdb-10.2/gdb/gdb_regex.h --- gdb-9.1/gdb/gdb_regex.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/gdb_regex.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Portable <regex.h>. - Copyright (C) 2000-2020 Free Software Foundation, Inc. + Copyright (C) 2000-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/gdb_select.h gdb-10.2/gdb/gdb_select.h --- gdb-9.1/gdb/gdb_select.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/gdb_select.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,51 +0,0 @@ -/* Slightly more portable version of <sys/select.h>. - - Copyright (C) 2006-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#if !defined(GDB_SELECT_H) -#define GDB_SELECT_H - -#ifdef HAVE_SYS_SELECT_H -#include <sys/select.h> -#else -#include "gdbsupport/gdb_sys_time.h" -#endif - -#ifdef USE_WIN32API -#include <winsock2.h> -#endif - -extern int gdb_select (int n, fd_set *readfds, fd_set *writefds, - fd_set *exceptfds, struct timeval *timeout); - -/* Convenience wrapper around gdb_select that returns -1/EINTR if - set_quit_flag is set, either on entry or from a signal handler or - from a different thread while select is blocked. The quit flag is - not cleared on exit -- the caller is responsible to check it with - check_quit_flag or QUIT. - - Note this does NOT return -1/EINTR if any signal handler other than - SIGINT runs, nor if the current SIGINT handler does not call - set_quit_flag. */ -extern int interruptible_select (int n, - fd_set *readfds, - fd_set *writefds, - fd_set *exceptfds, - struct timeval *timeout); - -#endif /* !defined(GDB_SELECT_H) */ diff -Nru gdb-9.1/gdb/gdbserver/acinclude.m4 gdb-10.2/gdb/gdbserver/acinclude.m4 --- gdb-9.1/gdb/gdbserver/acinclude.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/acinclude.m4 1970-01-01 00:00:00.000000000 +0000 @@ -1,53 +0,0 @@ -dnl gdb/gdbserver/configure.in uses BFD_HAVE_SYS_PROCFS_TYPE. -m4_include(../../bfd/bfd.m4) - -m4_include(../acx_configure_dir.m4) - -# This gets AM_GDB_WARNINGS. -m4_include(../warning.m4) - -dnl This gets autoconf bugfixes -m4_include(../../config/override.m4) - -dnl For ACX_PKGVERSION and ACX_BUGURL. -m4_include(../../config/acx.m4) - -m4_include(../../config/depstand.m4) -m4_include(../../config/lead-dot.m4) - -dnl codeset.m4 is needed for common.m4, but not for -dnl anything else in gdbserver. -m4_include(../../config/codeset.m4) -m4_include(../gdbsupport/common.m4) - -dnl For libiberty_INIT. -m4_include(../libiberty.m4) - -dnl For GDB_AC_PTRACE. -m4_include(../ptrace.m4) - -m4_include(../ax_cxx_compile_stdcxx.m4) - -dnl For GDB_AC_SELFTEST. -m4_include(../selftest.m4) - -m4_include([../../config/ax_pthread.m4]) - -dnl Check for existence of a type $1 in libthread_db.h -dnl Based on BFD_HAVE_SYS_PROCFS_TYPE in bfd/bfd.m4. - -AC_DEFUN([GDBSERVER_HAVE_THREAD_DB_TYPE], -[AC_MSG_CHECKING([for $1 in thread_db.h]) - AC_CACHE_VAL(gdbserver_cv_have_thread_db_type_$1, - [AC_TRY_COMPILE([ -#include <thread_db.h>], - [$1 avar], - gdbserver_cv_have_thread_db_type_$1=yes, - gdbserver_cv_have_thread_db_type_$1=no - )]) - if test $gdbserver_cv_have_thread_db_type_$1 = yes; then - AC_DEFINE([HAVE_]translit($1, [a-z], [A-Z]), 1, - [Define if <thread_db.h> has $1.]) - fi - AC_MSG_RESULT($gdbserver_cv_have_thread_db_type_$1) -]) diff -Nru gdb-9.1/gdb/gdbserver/aclocal.m4 gdb-10.2/gdb/gdbserver/aclocal.m4 --- gdb-9.1/gdb/gdbserver/aclocal.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/aclocal.m4 1970-01-01 00:00:00.000000000 +0000 @@ -1,101 +0,0 @@ -# generated automatically by aclocal 1.15.1 -*- Autoconf -*- - -# Copyright (C) 1996-2017 Free Software Foundation, Inc. - -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) -# AM_CONDITIONAL -*- Autoconf -*- - -# Copyright (C) 1997-2017 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_CONDITIONAL(NAME, SHELL-CONDITION) -# ------------------------------------- -# Define a conditional. -AC_DEFUN([AM_CONDITIONAL], -[AC_PREREQ([2.52])dnl - m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], - [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl -AC_SUBST([$1_TRUE])dnl -AC_SUBST([$1_FALSE])dnl -_AM_SUBST_NOTMAKE([$1_TRUE])dnl -_AM_SUBST_NOTMAKE([$1_FALSE])dnl -m4_define([_AM_COND_VALUE_$1], [$2])dnl -if $2; then - $1_TRUE= - $1_FALSE='#' -else - $1_TRUE='#' - $1_FALSE= -fi -AC_CONFIG_COMMANDS_PRE( -[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then - AC_MSG_ERROR([[conditional "$1" was never defined. -Usually this means the macro was only invoked conditionally.]]) -fi])]) - -# Add --enable-maintainer-mode option to configure. -*- Autoconf -*- -# From Jim Meyering - -# Copyright (C) 1996-2017 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_MAINTAINER_MODE([DEFAULT-MODE]) -# ---------------------------------- -# Control maintainer-specific portions of Makefiles. -# Default is to disable them, unless 'enable' is passed literally. -# For symmetry, 'disable' may be passed as well. Anyway, the user -# can override the default with the --enable/--disable switch. -AC_DEFUN([AM_MAINTAINER_MODE], -[m4_case(m4_default([$1], [disable]), - [enable], [m4_define([am_maintainer_other], [disable])], - [disable], [m4_define([am_maintainer_other], [enable])], - [m4_define([am_maintainer_other], [enable]) - m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])]) -AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) - dnl maintainer-mode's default is 'disable' unless 'enable' is passed - AC_ARG_ENABLE([maintainer-mode], - [AS_HELP_STRING([--]am_maintainer_other[-maintainer-mode], - am_maintainer_other[ make rules and dependencies not useful - (and sometimes confusing) to the casual installer])], - [USE_MAINTAINER_MODE=$enableval], - [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) - AC_MSG_RESULT([$USE_MAINTAINER_MODE]) - AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) - MAINT=$MAINTAINER_MODE_TRUE - AC_SUBST([MAINT])dnl -] -) - -# Copyright (C) 2006-2017 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# _AM_SUBST_NOTMAKE(VARIABLE) -# --------------------------- -# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. -# This macro is traced by Automake. -AC_DEFUN([_AM_SUBST_NOTMAKE]) - -# AM_SUBST_NOTMAKE(VARIABLE) -# -------------------------- -# Public sister of _AM_SUBST_NOTMAKE. -AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) - -m4_include([acinclude.m4]) diff -Nru gdb-9.1/gdb/gdbserver/ax.c gdb-10.2/gdb/gdbserver/ax.c --- gdb-9.1/gdb/gdbserver/ax.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/ax.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,1376 +0,0 @@ -/* Agent expression code for remote server. - Copyright (C) 2009-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "server.h" -#include "ax.h" -#include "gdbsupport/format.h" -#include "tracepoint.h" -#include "gdbsupport/rsp-low.h" - -static void ax_vdebug (const char *, ...) ATTRIBUTE_PRINTF (1, 2); - -#ifdef IN_PROCESS_AGENT -int debug_agent = 0; -#endif - -static void -ax_vdebug (const char *fmt, ...) -{ - char buf[1024]; - va_list ap; - - va_start (ap, fmt); - vsprintf (buf, fmt, ap); -#ifdef IN_PROCESS_AGENT - fprintf (stderr, PROG "/ax: %s\n", buf); -#else - debug_printf (PROG "/ax: %s\n", buf); -#endif - va_end (ap); -} - -#define ax_debug_1(level, fmt, args...) \ - do { \ - if (level <= debug_threads) \ - ax_vdebug ((fmt), ##args); \ - } while (0) - -#define ax_debug(FMT, args...) \ - ax_debug_1 (1, FMT, ##args) - -/* This enum must exactly match what is documented in - gdb/doc/agentexpr.texi, including all the numerical values. */ - -enum gdb_agent_op - { -#define DEFOP(NAME, SIZE, DATA_SIZE, CONSUMED, PRODUCED, VALUE) \ - gdb_agent_op_ ## NAME = VALUE, -#include "gdbsupport/ax.def" -#undef DEFOP - gdb_agent_op_last - }; - -static const char *gdb_agent_op_names [gdb_agent_op_last] = - { - "?undef?" -#define DEFOP(NAME, SIZE, DATA_SIZE, CONSUMED, PRODUCED, VALUE) , # NAME -#include "gdbsupport/ax.def" -#undef DEFOP - }; - -#ifndef IN_PROCESS_AGENT -static const unsigned char gdb_agent_op_sizes [gdb_agent_op_last] = - { - 0 -#define DEFOP(NAME, SIZE, DATA_SIZE, CONSUMED, PRODUCED, VALUE) , SIZE -#include "gdbsupport/ax.def" -#undef DEFOP - }; -#endif - -/* A wrapper for gdb_agent_op_names that does some bounds-checking. */ - -static const char * -gdb_agent_op_name (int op) -{ - if (op < 0 || op >= gdb_agent_op_last || gdb_agent_op_names[op] == NULL) - return "?undef?"; - return gdb_agent_op_names[op]; -} - -#ifndef IN_PROCESS_AGENT - -/* The packet form of an agent expression consists of an 'X', number - of bytes in expression, a comma, and then the bytes. */ - -struct agent_expr * -gdb_parse_agent_expr (const char **actparm) -{ - const char *act = *actparm; - ULONGEST xlen; - struct agent_expr *aexpr; - - ++act; /* skip the X */ - act = unpack_varlen_hex (act, &xlen); - ++act; /* skip a comma */ - aexpr = XNEW (struct agent_expr); - aexpr->length = xlen; - aexpr->bytes = (unsigned char *) xmalloc (xlen); - hex2bin (act, aexpr->bytes, xlen); - *actparm = act + (xlen * 2); - return aexpr; -} - -void -gdb_free_agent_expr (struct agent_expr *aexpr) -{ - if (aexpr != NULL) - { - free (aexpr->bytes); - free (aexpr); - } -} - -/* Convert the bytes of an agent expression back into hex digits, so - they can be printed or uploaded. This allocates the buffer, - callers should free when they are done with it. */ - -char * -gdb_unparse_agent_expr (struct agent_expr *aexpr) -{ - char *rslt; - - rslt = (char *) xmalloc (2 * aexpr->length + 1); - bin2hex (aexpr->bytes, rslt, aexpr->length); - return rslt; -} - -/* Bytecode compilation. */ - -CORE_ADDR current_insn_ptr; - -int emit_error; - -struct bytecode_address -{ - int pc; - CORE_ADDR address; - int goto_pc; - /* Offset and size of field to be modified in the goto block. */ - int from_offset, from_size; - struct bytecode_address *next; -} *bytecode_address_table; - -void -emit_prologue (void) -{ - target_emit_ops ()->emit_prologue (); -} - -void -emit_epilogue (void) -{ - target_emit_ops ()->emit_epilogue (); -} - -static void -emit_add (void) -{ - target_emit_ops ()->emit_add (); -} - -static void -emit_sub (void) -{ - target_emit_ops ()->emit_sub (); -} - -static void -emit_mul (void) -{ - target_emit_ops ()->emit_mul (); -} - -static void -emit_lsh (void) -{ - target_emit_ops ()->emit_lsh (); -} - -static void -emit_rsh_signed (void) -{ - target_emit_ops ()->emit_rsh_signed (); -} - -static void -emit_rsh_unsigned (void) -{ - target_emit_ops ()->emit_rsh_unsigned (); -} - -static void -emit_ext (int arg) -{ - target_emit_ops ()->emit_ext (arg); -} - -static void -emit_log_not (void) -{ - target_emit_ops ()->emit_log_not (); -} - -static void -emit_bit_and (void) -{ - target_emit_ops ()->emit_bit_and (); -} - -static void -emit_bit_or (void) -{ - target_emit_ops ()->emit_bit_or (); -} - -static void -emit_bit_xor (void) -{ - target_emit_ops ()->emit_bit_xor (); -} - -static void -emit_bit_not (void) -{ - target_emit_ops ()->emit_bit_not (); -} - -static void -emit_equal (void) -{ - target_emit_ops ()->emit_equal (); -} - -static void -emit_less_signed (void) -{ - target_emit_ops ()->emit_less_signed (); -} - -static void -emit_less_unsigned (void) -{ - target_emit_ops ()->emit_less_unsigned (); -} - -static void -emit_ref (int size) -{ - target_emit_ops ()->emit_ref (size); -} - -static void -emit_if_goto (int *offset_p, int *size_p) -{ - target_emit_ops ()->emit_if_goto (offset_p, size_p); -} - -static void -emit_goto (int *offset_p, int *size_p) -{ - target_emit_ops ()->emit_goto (offset_p, size_p); -} - -static void -write_goto_address (CORE_ADDR from, CORE_ADDR to, int size) -{ - target_emit_ops ()->write_goto_address (from, to, size); -} - -static void -emit_const (LONGEST num) -{ - target_emit_ops ()->emit_const (num); -} - -static void -emit_reg (int reg) -{ - target_emit_ops ()->emit_reg (reg); -} - -static void -emit_pop (void) -{ - target_emit_ops ()->emit_pop (); -} - -static void -emit_stack_flush (void) -{ - target_emit_ops ()->emit_stack_flush (); -} - -static void -emit_zero_ext (int arg) -{ - target_emit_ops ()->emit_zero_ext (arg); -} - -static void -emit_swap (void) -{ - target_emit_ops ()->emit_swap (); -} - -static void -emit_stack_adjust (int n) -{ - target_emit_ops ()->emit_stack_adjust (n); -} - -/* FN's prototype is `LONGEST(*fn)(int)'. */ - -static void -emit_int_call_1 (CORE_ADDR fn, int arg1) -{ - target_emit_ops ()->emit_int_call_1 (fn, arg1); -} - -/* FN's prototype is `void(*fn)(int,LONGEST)'. */ - -static void -emit_void_call_2 (CORE_ADDR fn, int arg1) -{ - target_emit_ops ()->emit_void_call_2 (fn, arg1); -} - -static void -emit_eq_goto (int *offset_p, int *size_p) -{ - target_emit_ops ()->emit_eq_goto (offset_p, size_p); -} - -static void -emit_ne_goto (int *offset_p, int *size_p) -{ - target_emit_ops ()->emit_ne_goto (offset_p, size_p); -} - -static void -emit_lt_goto (int *offset_p, int *size_p) -{ - target_emit_ops ()->emit_lt_goto (offset_p, size_p); -} - -static void -emit_ge_goto (int *offset_p, int *size_p) -{ - target_emit_ops ()->emit_ge_goto (offset_p, size_p); -} - -static void -emit_gt_goto (int *offset_p, int *size_p) -{ - target_emit_ops ()->emit_gt_goto (offset_p, size_p); -} - -static void -emit_le_goto (int *offset_p, int *size_p) -{ - target_emit_ops ()->emit_le_goto (offset_p, size_p); -} - -/* Scan an agent expression for any evidence that the given PC is the - target of a jump bytecode in the expression. */ - -static int -is_goto_target (struct agent_expr *aexpr, int pc) -{ - int i; - unsigned char op; - - for (i = 0; i < aexpr->length; i += 1 + gdb_agent_op_sizes[op]) - { - op = aexpr->bytes[i]; - - if (op == gdb_agent_op_goto || op == gdb_agent_op_if_goto) - { - int target = (aexpr->bytes[i + 1] << 8) + aexpr->bytes[i + 2]; - if (target == pc) - return 1; - } - } - - return 0; -} - -/* Given an agent expression, turn it into native code. */ - -enum eval_result_type -compile_bytecodes (struct agent_expr *aexpr) -{ - int pc = 0; - int done = 0; - unsigned char op, next_op; - int arg; - /* This is only used to build 64-bit value for constants. */ - ULONGEST top; - struct bytecode_address *aentry, *aentry2; - -#define UNHANDLED \ - do \ - { \ - ax_debug ("Cannot compile op 0x%x\n", op); \ - return expr_eval_unhandled_opcode; \ - } while (0) - - if (aexpr->length == 0) - { - ax_debug ("empty agent expression\n"); - return expr_eval_empty_expression; - } - - bytecode_address_table = NULL; - - while (!done) - { - op = aexpr->bytes[pc]; - - ax_debug ("About to compile op 0x%x, pc=%d\n", op, pc); - - /* Record the compiled-code address of the bytecode, for use by - jump instructions. */ - aentry = XNEW (struct bytecode_address); - aentry->pc = pc; - aentry->address = current_insn_ptr; - aentry->goto_pc = -1; - aentry->from_offset = aentry->from_size = 0; - aentry->next = bytecode_address_table; - bytecode_address_table = aentry; - - ++pc; - - emit_error = 0; - - switch (op) - { - case gdb_agent_op_add: - emit_add (); - break; - - case gdb_agent_op_sub: - emit_sub (); - break; - - case gdb_agent_op_mul: - emit_mul (); - break; - - case gdb_agent_op_div_signed: - UNHANDLED; - break; - - case gdb_agent_op_div_unsigned: - UNHANDLED; - break; - - case gdb_agent_op_rem_signed: - UNHANDLED; - break; - - case gdb_agent_op_rem_unsigned: - UNHANDLED; - break; - - case gdb_agent_op_lsh: - emit_lsh (); - break; - - case gdb_agent_op_rsh_signed: - emit_rsh_signed (); - break; - - case gdb_agent_op_rsh_unsigned: - emit_rsh_unsigned (); - break; - - case gdb_agent_op_trace: - UNHANDLED; - break; - - case gdb_agent_op_trace_quick: - UNHANDLED; - break; - - case gdb_agent_op_log_not: - emit_log_not (); - break; - - case gdb_agent_op_bit_and: - emit_bit_and (); - break; - - case gdb_agent_op_bit_or: - emit_bit_or (); - break; - - case gdb_agent_op_bit_xor: - emit_bit_xor (); - break; - - case gdb_agent_op_bit_not: - emit_bit_not (); - break; - - case gdb_agent_op_equal: - next_op = aexpr->bytes[pc]; - if (next_op == gdb_agent_op_if_goto - && !is_goto_target (aexpr, pc) - && target_emit_ops ()->emit_eq_goto) - { - ax_debug ("Combining equal & if_goto"); - pc += 1; - aentry->pc = pc; - arg = aexpr->bytes[pc++]; - arg = (arg << 8) + aexpr->bytes[pc++]; - aentry->goto_pc = arg; - emit_eq_goto (&(aentry->from_offset), &(aentry->from_size)); - } - else if (next_op == gdb_agent_op_log_not - && (aexpr->bytes[pc + 1] == gdb_agent_op_if_goto) - && !is_goto_target (aexpr, pc + 1) - && target_emit_ops ()->emit_ne_goto) - { - ax_debug ("Combining equal & log_not & if_goto"); - pc += 2; - aentry->pc = pc; - arg = aexpr->bytes[pc++]; - arg = (arg << 8) + aexpr->bytes[pc++]; - aentry->goto_pc = arg; - emit_ne_goto (&(aentry->from_offset), &(aentry->from_size)); - } - else - emit_equal (); - break; - - case gdb_agent_op_less_signed: - next_op = aexpr->bytes[pc]; - if (next_op == gdb_agent_op_if_goto - && !is_goto_target (aexpr, pc)) - { - ax_debug ("Combining less_signed & if_goto"); - pc += 1; - aentry->pc = pc; - arg = aexpr->bytes[pc++]; - arg = (arg << 8) + aexpr->bytes[pc++]; - aentry->goto_pc = arg; - emit_lt_goto (&(aentry->from_offset), &(aentry->from_size)); - } - else if (next_op == gdb_agent_op_log_not - && !is_goto_target (aexpr, pc) - && (aexpr->bytes[pc + 1] == gdb_agent_op_if_goto) - && !is_goto_target (aexpr, pc + 1)) - { - ax_debug ("Combining less_signed & log_not & if_goto"); - pc += 2; - aentry->pc = pc; - arg = aexpr->bytes[pc++]; - arg = (arg << 8) + aexpr->bytes[pc++]; - aentry->goto_pc = arg; - emit_ge_goto (&(aentry->from_offset), &(aentry->from_size)); - } - else - emit_less_signed (); - break; - - case gdb_agent_op_less_unsigned: - emit_less_unsigned (); - break; - - case gdb_agent_op_ext: - arg = aexpr->bytes[pc++]; - if (arg < (sizeof (LONGEST) * 8)) - emit_ext (arg); - break; - - case gdb_agent_op_ref8: - emit_ref (1); - break; - - case gdb_agent_op_ref16: - emit_ref (2); - break; - - case gdb_agent_op_ref32: - emit_ref (4); - break; - - case gdb_agent_op_ref64: - emit_ref (8); - break; - - case gdb_agent_op_if_goto: - arg = aexpr->bytes[pc++]; - arg = (arg << 8) + aexpr->bytes[pc++]; - aentry->goto_pc = arg; - emit_if_goto (&(aentry->from_offset), &(aentry->from_size)); - break; - - case gdb_agent_op_goto: - arg = aexpr->bytes[pc++]; - arg = (arg << 8) + aexpr->bytes[pc++]; - aentry->goto_pc = arg; - emit_goto (&(aentry->from_offset), &(aentry->from_size)); - break; - - case gdb_agent_op_const8: - emit_stack_flush (); - top = aexpr->bytes[pc++]; - emit_const (top); - break; - - case gdb_agent_op_const16: - emit_stack_flush (); - top = aexpr->bytes[pc++]; - top = (top << 8) + aexpr->bytes[pc++]; - emit_const (top); - break; - - case gdb_agent_op_const32: - emit_stack_flush (); - top = aexpr->bytes[pc++]; - top = (top << 8) + aexpr->bytes[pc++]; - top = (top << 8) + aexpr->bytes[pc++]; - top = (top << 8) + aexpr->bytes[pc++]; - emit_const (top); - break; - - case gdb_agent_op_const64: - emit_stack_flush (); - top = aexpr->bytes[pc++]; - top = (top << 8) + aexpr->bytes[pc++]; - top = (top << 8) + aexpr->bytes[pc++]; - top = (top << 8) + aexpr->bytes[pc++]; - top = (top << 8) + aexpr->bytes[pc++]; - top = (top << 8) + aexpr->bytes[pc++]; - top = (top << 8) + aexpr->bytes[pc++]; - top = (top << 8) + aexpr->bytes[pc++]; - emit_const (top); - break; - - case gdb_agent_op_reg: - emit_stack_flush (); - arg = aexpr->bytes[pc++]; - arg = (arg << 8) + aexpr->bytes[pc++]; - emit_reg (arg); - break; - - case gdb_agent_op_end: - ax_debug ("At end of expression\n"); - - /* Assume there is one stack element left, and that it is - cached in "top" where emit_epilogue can get to it. */ - emit_stack_adjust (1); - - done = 1; - break; - - case gdb_agent_op_dup: - /* In our design, dup is equivalent to stack flushing. */ - emit_stack_flush (); - break; - - case gdb_agent_op_pop: - emit_pop (); - break; - - case gdb_agent_op_zero_ext: - arg = aexpr->bytes[pc++]; - if (arg < (sizeof (LONGEST) * 8)) - emit_zero_ext (arg); - break; - - case gdb_agent_op_swap: - next_op = aexpr->bytes[pc]; - /* Detect greater-than comparison sequences. */ - if (next_op == gdb_agent_op_less_signed - && !is_goto_target (aexpr, pc) - && (aexpr->bytes[pc + 1] == gdb_agent_op_if_goto) - && !is_goto_target (aexpr, pc + 1)) - { - ax_debug ("Combining swap & less_signed & if_goto"); - pc += 2; - aentry->pc = pc; - arg = aexpr->bytes[pc++]; - arg = (arg << 8) + aexpr->bytes[pc++]; - aentry->goto_pc = arg; - emit_gt_goto (&(aentry->from_offset), &(aentry->from_size)); - } - else if (next_op == gdb_agent_op_less_signed - && !is_goto_target (aexpr, pc) - && (aexpr->bytes[pc + 1] == gdb_agent_op_log_not) - && !is_goto_target (aexpr, pc + 1) - && (aexpr->bytes[pc + 2] == gdb_agent_op_if_goto) - && !is_goto_target (aexpr, pc + 2)) - { - ax_debug ("Combining swap & less_signed & log_not & if_goto"); - pc += 3; - aentry->pc = pc; - arg = aexpr->bytes[pc++]; - arg = (arg << 8) + aexpr->bytes[pc++]; - aentry->goto_pc = arg; - emit_le_goto (&(aentry->from_offset), &(aentry->from_size)); - } - else - emit_swap (); - break; - - case gdb_agent_op_getv: - emit_stack_flush (); - arg = aexpr->bytes[pc++]; - arg = (arg << 8) + aexpr->bytes[pc++]; - emit_int_call_1 (get_get_tsv_func_addr (), - arg); - break; - - case gdb_agent_op_setv: - arg = aexpr->bytes[pc++]; - arg = (arg << 8) + aexpr->bytes[pc++]; - emit_void_call_2 (get_set_tsv_func_addr (), - arg); - break; - - case gdb_agent_op_tracev: - UNHANDLED; - break; - - /* GDB never (currently) generates any of these ops. */ - case gdb_agent_op_float: - case gdb_agent_op_ref_float: - case gdb_agent_op_ref_double: - case gdb_agent_op_ref_long_double: - case gdb_agent_op_l_to_d: - case gdb_agent_op_d_to_l: - case gdb_agent_op_trace16: - UNHANDLED; - break; - - default: - ax_debug ("Agent expression op 0x%x not recognized\n", op); - /* Don't struggle on, things will just get worse. */ - return expr_eval_unrecognized_opcode; - } - - /* This catches errors that occur in target-specific code - emission. */ - if (emit_error) - { - ax_debug ("Error %d while emitting code for %s\n", - emit_error, gdb_agent_op_name (op)); - return expr_eval_unhandled_opcode; - } - - ax_debug ("Op %s compiled\n", gdb_agent_op_name (op)); - } - - /* Now fill in real addresses as goto destinations. */ - for (aentry = bytecode_address_table; aentry; aentry = aentry->next) - { - int written = 0; - - if (aentry->goto_pc < 0) - continue; - - /* Find the location that we are going to, and call back into - target-specific code to write the actual address or - displacement. */ - for (aentry2 = bytecode_address_table; aentry2; aentry2 = aentry2->next) - { - if (aentry2->pc == aentry->goto_pc) - { - ax_debug ("Want to jump from %s to %s\n", - paddress (aentry->address), - paddress (aentry2->address)); - write_goto_address (aentry->address + aentry->from_offset, - aentry2->address, aentry->from_size); - written = 1; - break; - } - } - - /* Error out if we didn't find a destination. */ - if (!written) - { - ax_debug ("Destination of goto %d not found\n", - aentry->goto_pc); - return expr_eval_invalid_goto; - } - } - - return expr_eval_no_error; -} - -#endif - -/* Make printf-type calls using arguments supplied from the host. We - need to parse the format string ourselves, and call the formatting - function with one argument at a time, partly because there is no - safe portable way to construct a varargs call, and partly to serve - as a security barrier against bad format strings that might get - in. */ - -static void -ax_printf (CORE_ADDR fn, CORE_ADDR chan, const char *format, - int nargs, ULONGEST *args) -{ - const char *f = format; - int i; - const char *current_substring; - int nargs_wanted; - - ax_debug ("Printf of \"%s\" with %d args", format, nargs); - - format_pieces fpieces (&f); - - nargs_wanted = 0; - for (auto &&piece : fpieces) - if (piece.argclass != literal_piece) - ++nargs_wanted; - - if (nargs != nargs_wanted) - error (_("Wrong number of arguments for specified format-string")); - - i = 0; - for (auto &&piece : fpieces) - { - current_substring = piece.string; - ax_debug ("current substring is '%s', class is %d", - current_substring, piece.argclass); - switch (piece.argclass) - { - case string_arg: - { - gdb_byte *str; - CORE_ADDR tem; - int j; - - tem = args[i]; - if (tem == 0) - { - printf (current_substring, "(null)"); - break; - } - - /* This is a %s argument. Find the length of the string. */ - for (j = 0;; j++) - { - gdb_byte c; - - read_inferior_memory (tem + j, &c, 1); - if (c == 0) - break; - } - - /* Copy the string contents into a string inside GDB. */ - str = (gdb_byte *) alloca (j + 1); - if (j != 0) - read_inferior_memory (tem, str, j); - str[j] = 0; - - printf (current_substring, (char *) str); - } - break; - - case long_long_arg: -#if defined (CC_HAS_LONG_LONG) && defined (PRINTF_HAS_LONG_LONG) - { - long long val = args[i]; - - printf (current_substring, val); - break; - } -#else - error (_("long long not supported in agent printf")); -#endif - case int_arg: - { - int val = args[i]; - - printf (current_substring, val); - break; - } - - case long_arg: - { - long val = args[i]; - - printf (current_substring, val); - break; - } - - case size_t_arg: - { - size_t val = args[i]; - - printf (current_substring, val); - break; - } - - case literal_piece: - /* Print a portion of the format string that has no - directives. Note that this will not include any - ordinary %-specs, but it might include "%%". That is - why we use printf_filtered and not puts_filtered here. - Also, we pass a dummy argument because some platforms - have modified GCC to include -Wformat-security by - default, which will warn here if there is no - argument. */ - printf (current_substring, 0); - break; - - default: - error (_("Format directive in '%s' not supported in agent printf"), - current_substring); - } - - /* Maybe advance to the next argument. */ - if (piece.argclass != literal_piece) - ++i; - } - - fflush (stdout); -} - -/* The agent expression evaluator, as specified by the GDB docs. It - returns 0 if everything went OK, and a nonzero error code - otherwise. */ - -enum eval_result_type -gdb_eval_agent_expr (struct eval_agent_expr_context *ctx, - struct agent_expr *aexpr, - ULONGEST *rslt) -{ - int pc = 0; -#define STACK_MAX 100 - ULONGEST stack[STACK_MAX], top; - int sp = 0; - unsigned char op; - int arg; - - /* This union is a convenient way to convert representations. For - now, assume a standard architecture where the hardware integer - types have 8, 16, 32, 64 bit types. A more robust solution would - be to import stdint.h from gnulib. */ - union - { - union - { - unsigned char bytes[1]; - unsigned char val; - } u8; - union - { - unsigned char bytes[2]; - unsigned short val; - } u16; - union - { - unsigned char bytes[4]; - unsigned int val; - } u32; - union - { - unsigned char bytes[8]; - ULONGEST val; - } u64; - } cnv; - - if (aexpr->length == 0) - { - ax_debug ("empty agent expression"); - return expr_eval_empty_expression; - } - - /* Cache the stack top in its own variable. Much of the time we can - operate on this variable, rather than dinking with the stack. It - needs to be copied to the stack when sp changes. */ - top = 0; - - while (1) - { - op = aexpr->bytes[pc++]; - - ax_debug ("About to interpret byte 0x%x", op); - - switch (op) - { - case gdb_agent_op_add: - top += stack[--sp]; - break; - - case gdb_agent_op_sub: - top = stack[--sp] - top; - break; - - case gdb_agent_op_mul: - top *= stack[--sp]; - break; - - case gdb_agent_op_div_signed: - if (top == 0) - { - ax_debug ("Attempted to divide by zero"); - return expr_eval_divide_by_zero; - } - top = ((LONGEST) stack[--sp]) / ((LONGEST) top); - break; - - case gdb_agent_op_div_unsigned: - if (top == 0) - { - ax_debug ("Attempted to divide by zero"); - return expr_eval_divide_by_zero; - } - top = stack[--sp] / top; - break; - - case gdb_agent_op_rem_signed: - if (top == 0) - { - ax_debug ("Attempted to divide by zero"); - return expr_eval_divide_by_zero; - } - top = ((LONGEST) stack[--sp]) % ((LONGEST) top); - break; - - case gdb_agent_op_rem_unsigned: - if (top == 0) - { - ax_debug ("Attempted to divide by zero"); - return expr_eval_divide_by_zero; - } - top = stack[--sp] % top; - break; - - case gdb_agent_op_lsh: - top = stack[--sp] << top; - break; - - case gdb_agent_op_rsh_signed: - top = ((LONGEST) stack[--sp]) >> top; - break; - - case gdb_agent_op_rsh_unsigned: - top = stack[--sp] >> top; - break; - - case gdb_agent_op_trace: - agent_mem_read (ctx, NULL, (CORE_ADDR) stack[--sp], - (ULONGEST) top); - if (--sp >= 0) - top = stack[sp]; - break; - - case gdb_agent_op_trace_quick: - arg = aexpr->bytes[pc++]; - agent_mem_read (ctx, NULL, (CORE_ADDR) top, (ULONGEST) arg); - break; - - case gdb_agent_op_log_not: - top = !top; - break; - - case gdb_agent_op_bit_and: - top &= stack[--sp]; - break; - - case gdb_agent_op_bit_or: - top |= stack[--sp]; - break; - - case gdb_agent_op_bit_xor: - top ^= stack[--sp]; - break; - - case gdb_agent_op_bit_not: - top = ~top; - break; - - case gdb_agent_op_equal: - top = (stack[--sp] == top); - break; - - case gdb_agent_op_less_signed: - top = (((LONGEST) stack[--sp]) < ((LONGEST) top)); - break; - - case gdb_agent_op_less_unsigned: - top = (stack[--sp] < top); - break; - - case gdb_agent_op_ext: - arg = aexpr->bytes[pc++]; - if (arg < (sizeof (LONGEST) * 8)) - { - LONGEST mask = 1 << (arg - 1); - top &= ((LONGEST) 1 << arg) - 1; - top = (top ^ mask) - mask; - } - break; - - case gdb_agent_op_ref8: - agent_mem_read (ctx, cnv.u8.bytes, (CORE_ADDR) top, 1); - top = cnv.u8.val; - break; - - case gdb_agent_op_ref16: - agent_mem_read (ctx, cnv.u16.bytes, (CORE_ADDR) top, 2); - top = cnv.u16.val; - break; - - case gdb_agent_op_ref32: - agent_mem_read (ctx, cnv.u32.bytes, (CORE_ADDR) top, 4); - top = cnv.u32.val; - break; - - case gdb_agent_op_ref64: - agent_mem_read (ctx, cnv.u64.bytes, (CORE_ADDR) top, 8); - top = cnv.u64.val; - break; - - case gdb_agent_op_if_goto: - if (top) - pc = (aexpr->bytes[pc] << 8) + (aexpr->bytes[pc + 1]); - else - pc += 2; - if (--sp >= 0) - top = stack[sp]; - break; - - case gdb_agent_op_goto: - pc = (aexpr->bytes[pc] << 8) + (aexpr->bytes[pc + 1]); - break; - - case gdb_agent_op_const8: - /* Flush the cached stack top. */ - stack[sp++] = top; - top = aexpr->bytes[pc++]; - break; - - case gdb_agent_op_const16: - /* Flush the cached stack top. */ - stack[sp++] = top; - top = aexpr->bytes[pc++]; - top = (top << 8) + aexpr->bytes[pc++]; - break; - - case gdb_agent_op_const32: - /* Flush the cached stack top. */ - stack[sp++] = top; - top = aexpr->bytes[pc++]; - top = (top << 8) + aexpr->bytes[pc++]; - top = (top << 8) + aexpr->bytes[pc++]; - top = (top << 8) + aexpr->bytes[pc++]; - break; - - case gdb_agent_op_const64: - /* Flush the cached stack top. */ - stack[sp++] = top; - top = aexpr->bytes[pc++]; - top = (top << 8) + aexpr->bytes[pc++]; - top = (top << 8) + aexpr->bytes[pc++]; - top = (top << 8) + aexpr->bytes[pc++]; - top = (top << 8) + aexpr->bytes[pc++]; - top = (top << 8) + aexpr->bytes[pc++]; - top = (top << 8) + aexpr->bytes[pc++]; - top = (top << 8) + aexpr->bytes[pc++]; - break; - - case gdb_agent_op_reg: - /* Flush the cached stack top. */ - stack[sp++] = top; - arg = aexpr->bytes[pc++]; - arg = (arg << 8) + aexpr->bytes[pc++]; - { - int regnum = arg; - struct regcache *regcache = ctx->regcache; - - switch (register_size (regcache->tdesc, regnum)) - { - case 8: - collect_register (regcache, regnum, cnv.u64.bytes); - top = cnv.u64.val; - break; - case 4: - collect_register (regcache, regnum, cnv.u32.bytes); - top = cnv.u32.val; - break; - case 2: - collect_register (regcache, regnum, cnv.u16.bytes); - top = cnv.u16.val; - break; - case 1: - collect_register (regcache, regnum, cnv.u8.bytes); - top = cnv.u8.val; - break; - default: - internal_error (__FILE__, __LINE__, - "unhandled register size"); - } - } - break; - - case gdb_agent_op_end: - ax_debug ("At end of expression, sp=%d, stack top cache=0x%s", - sp, pulongest (top)); - if (rslt) - { - if (sp <= 0) - { - /* This should be an error */ - ax_debug ("Stack is empty, nothing to return"); - return expr_eval_empty_stack; - } - *rslt = top; - } - return expr_eval_no_error; - - case gdb_agent_op_dup: - stack[sp++] = top; - break; - - case gdb_agent_op_pop: - if (--sp >= 0) - top = stack[sp]; - break; - - case gdb_agent_op_pick: - arg = aexpr->bytes[pc++]; - stack[sp] = top; - top = stack[sp - arg]; - ++sp; - break; - - case gdb_agent_op_rot: - { - ULONGEST tem = stack[sp - 1]; - - stack[sp - 1] = stack[sp - 2]; - stack[sp - 2] = top; - top = tem; - } - break; - - case gdb_agent_op_zero_ext: - arg = aexpr->bytes[pc++]; - if (arg < (sizeof (LONGEST) * 8)) - top &= ((LONGEST) 1 << arg) - 1; - break; - - case gdb_agent_op_swap: - /* Interchange top two stack elements, making sure top gets - copied back onto stack. */ - stack[sp] = top; - top = stack[sp - 1]; - stack[sp - 1] = stack[sp]; - break; - - case gdb_agent_op_getv: - /* Flush the cached stack top. */ - stack[sp++] = top; - arg = aexpr->bytes[pc++]; - arg = (arg << 8) + aexpr->bytes[pc++]; - top = agent_get_trace_state_variable_value (arg); - break; - - case gdb_agent_op_setv: - arg = aexpr->bytes[pc++]; - arg = (arg << 8) + aexpr->bytes[pc++]; - agent_set_trace_state_variable_value (arg, top); - /* Note that we leave the value on the stack, for the - benefit of later/enclosing expressions. */ - break; - - case gdb_agent_op_tracev: - arg = aexpr->bytes[pc++]; - arg = (arg << 8) + aexpr->bytes[pc++]; - agent_tsv_read (ctx, arg); - break; - - case gdb_agent_op_tracenz: - agent_mem_read_string (ctx, NULL, (CORE_ADDR) stack[--sp], - (ULONGEST) top); - if (--sp >= 0) - top = stack[sp]; - break; - - case gdb_agent_op_printf: - { - int nargs, slen, i; - CORE_ADDR fn = 0, chan = 0; - /* Can't have more args than the entire size of the stack. */ - ULONGEST args[STACK_MAX]; - char *format; - - nargs = aexpr->bytes[pc++]; - slen = aexpr->bytes[pc++]; - slen = (slen << 8) + aexpr->bytes[pc++]; - format = (char *) &(aexpr->bytes[pc]); - pc += slen; - /* Pop function and channel. */ - fn = top; - if (--sp >= 0) - top = stack[sp]; - chan = top; - if (--sp >= 0) - top = stack[sp]; - /* Pop arguments into a dedicated array. */ - for (i = 0; i < nargs; ++i) - { - args[i] = top; - if (--sp >= 0) - top = stack[sp]; - } - - /* A bad format string means something is very wrong; give - up immediately. */ - if (format[slen - 1] != '\0') - error (_("Unterminated format string in printf bytecode")); - - ax_printf (fn, chan, format, nargs, args); - } - break; - - /* GDB never (currently) generates any of these ops. */ - case gdb_agent_op_float: - case gdb_agent_op_ref_float: - case gdb_agent_op_ref_double: - case gdb_agent_op_ref_long_double: - case gdb_agent_op_l_to_d: - case gdb_agent_op_d_to_l: - case gdb_agent_op_trace16: - ax_debug ("Agent expression op 0x%x valid, but not handled", - op); - /* If ever GDB generates any of these, we don't have the - option of ignoring. */ - return expr_eval_unhandled_opcode; - - default: - ax_debug ("Agent expression op 0x%x not recognized", op); - /* Don't struggle on, things will just get worse. */ - return expr_eval_unrecognized_opcode; - } - - /* Check for stack badness. */ - if (sp >= (STACK_MAX - 1)) - { - ax_debug ("Expression stack overflow"); - return expr_eval_stack_overflow; - } - - if (sp < 0) - { - ax_debug ("Expression stack underflow"); - return expr_eval_stack_underflow; - } - - ax_debug ("Op %s -> sp=%d, top=0x%s", - gdb_agent_op_name (op), sp, phex_nz (top, 0)); - } -} diff -Nru gdb-9.1/gdb/gdbserver/ax.h gdb-10.2/gdb/gdbserver/ax.h --- gdb-9.1/gdb/gdbserver/ax.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/ax.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,144 +0,0 @@ -/* Data structures and functions associated with agent expressions in GDB. - Copyright (C) 2009-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef GDBSERVER_AX_H -#define GDBSERVER_AX_H - -#include "regcache.h" - -#ifdef IN_PROCESS_AGENT -#define debug_threads debug_agent -#endif - -struct traceframe; - -/* Enumeration of the different kinds of things that can happen during - agent expression evaluation. */ - -enum eval_result_type - { - expr_eval_no_error, - expr_eval_empty_expression, - expr_eval_empty_stack, - expr_eval_stack_overflow, - expr_eval_stack_underflow, - expr_eval_unhandled_opcode, - expr_eval_unrecognized_opcode, - expr_eval_divide_by_zero, - expr_eval_invalid_goto - }; - -struct agent_expr -{ - int length; - - unsigned char *bytes; -}; - -#ifndef IN_PROCESS_AGENT - -/* The packet form of an agent expression consists of an 'X', number - of bytes in expression, a comma, and then the bytes. */ -struct agent_expr *gdb_parse_agent_expr (const char **actparm); - -/* Release an agent expression. */ -void gdb_free_agent_expr (struct agent_expr *aexpr); - -/* Convert the bytes of an agent expression back into hex digits, so - they can be printed or uploaded. This allocates the buffer, - callers should free when they are done with it. */ -char *gdb_unparse_agent_expr (struct agent_expr *aexpr); -void emit_prologue (void); -void emit_epilogue (void); -enum eval_result_type compile_bytecodes (struct agent_expr *aexpr); -#endif - -/* The context when evaluating agent expression. */ - -struct eval_agent_expr_context -{ - /* The registers when evaluating agent expression. */ - struct regcache *regcache; - /* The traceframe, if any, when evaluating agent expression. */ - struct traceframe *tframe; - /* The tracepoint, if any, when evaluating agent expression. */ - struct tracepoint *tpoint; -}; - -enum eval_result_type - gdb_eval_agent_expr (struct eval_agent_expr_context *ctx, - struct agent_expr *aexpr, - ULONGEST *rslt); - -/* Bytecode compilation function vector. */ - -struct emit_ops -{ - void (*emit_prologue) (void); - void (*emit_epilogue) (void); - void (*emit_add) (void); - void (*emit_sub) (void); - void (*emit_mul) (void); - void (*emit_lsh) (void); - void (*emit_rsh_signed) (void); - void (*emit_rsh_unsigned) (void); - void (*emit_ext) (int arg); - void (*emit_log_not) (void); - void (*emit_bit_and) (void); - void (*emit_bit_or) (void); - void (*emit_bit_xor) (void); - void (*emit_bit_not) (void); - void (*emit_equal) (void); - void (*emit_less_signed) (void); - void (*emit_less_unsigned) (void); - void (*emit_ref) (int size); - void (*emit_if_goto) (int *offset_p, int *size_p); - void (*emit_goto) (int *offset_p, int *size_p); - void (*write_goto_address) (CORE_ADDR from, CORE_ADDR to, int size); - void (*emit_const) (LONGEST num); - void (*emit_call) (CORE_ADDR fn); - void (*emit_reg) (int reg); - void (*emit_pop) (void); - void (*emit_stack_flush) (void); - void (*emit_zero_ext) (int arg); - void (*emit_swap) (void); - void (*emit_stack_adjust) (int n); - - /* Emit code for a generic function that takes one fixed integer - argument and returns a 64-bit int (for instance, tsv getter). */ - void (*emit_int_call_1) (CORE_ADDR fn, int arg1); - - /* Emit code for a generic function that takes one fixed integer - argument and a 64-bit int from the top of the stack, and returns - nothing (for instance, tsv setter). */ - void (*emit_void_call_2) (CORE_ADDR fn, int arg1); - - /* Emit code specialized for common combinations of compare followed - by a goto. */ - void (*emit_eq_goto) (int *offset_p, int *size_p); - void (*emit_ne_goto) (int *offset_p, int *size_p); - void (*emit_lt_goto) (int *offset_p, int *size_p); - void (*emit_le_goto) (int *offset_p, int *size_p); - void (*emit_gt_goto) (int *offset_p, int *size_p); - void (*emit_ge_goto) (int *offset_p, int *size_p); -}; - -extern CORE_ADDR current_insn_ptr; -extern int emit_error; - -#endif /* GDBSERVER_AX_H */ diff -Nru gdb-9.1/gdb/gdbserver/ChangeLog gdb-10.2/gdb/gdbserver/ChangeLog --- gdb-9.1/gdb/gdbserver/ChangeLog 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/ChangeLog 1970-01-01 00:00:00.000000000 +0000 @@ -1,17819 +0,0 @@ -2020-01-28 Hannes Domani <ssbssa@yahoo.de> - - * server.c (handle_qxfer_libraries): Write segment-address with - paddress. - -2020-01-01 Joel Brobecker <brobecker@adacore.com> - - * server.c (gdbserver_version): Change copyright year to 2020. - * gdbreplay.c (gdbreplay_version): Likewise. - -2019-12-26 Christian Biesinger <cbiesinger@google.com> - - * configure: Regenerate. - * configure.ac: Quote variable arguments of test. - -2019-12-10 Christian Biesinger <cbiesinger@google.com> - - * Makefile.in: Add safe-strerror.c to gdbreplay and IPA, and change - UNDO_GNULIB_CFLAGS to undo strerror_r instead of strerror. - * config.in: Regenerate. - * configure: Regenerate. - * configure.ac: Don't check for strerror. - * linux-i386-ipa.c (initialize_fast_tracepoint_trampoline_buffer): - Call safe_strerror instead of strerror. - * server.h (strerror): Remove this now-unnecessary declaration. - * tracepoint.c (init_named_socket): Call safe_strerror instead of - strerror. - (gdb_agent_helper_thread): Likewise. - * utils.c (perror_with_name): Likewise. - -2019-11-26 Tom Tromey <tom@tromey.com> - - * configure, config.in: Rebuild. - -2019-11-26 Tom Tromey <tom@tromey.com> - - * remote-utils.c (block_unblock_async_io): Use gdb_sigmask. - * linux-low.c (linux_wait_for_event_filtered, linux_async): Use - gdb_sigmask. - * configure, config.in: Rebuild. - -2019-11-26 Tom Tromey <tom@tromey.com> - - * Makefile.in (PTHREAD_CFLAGS, PTHREAD_LIBS): New variables. - (INTERNAL_CFLAGS_BASE): Use PTHREAD_CFLAGS. - (GDBSERVER_LIBS): Use PTHREAD_LIBS. - * acinclude.m4: Include ax_pthread.m4. - * config.in, configure: Rebuild. - -2019-11-26 Christian Biesinger <cbiesinger@google.com> - - * debug.c (debug_set_output): Call safe_strerror instead of - strerror. - * linux-low.c (attach_proc_task_lwp_callback): Likewise. - (linux_kill_one_lwp): Likewise. - (linux_detach_one_lwp): Likewise. - (linux_wait_for_event_filtered): Likewise. - (store_register): Likewise. - * lynx-low.c (lynx_attach): Likewise. - * mem-break.c (insert_memory_breakpoint): Likewise. - (remove_memory_breakpoint): Likewise. - (delete_fast_tracepoint_jump): Likewise. - (set_fast_tracepoint_jump): Likewise. - (uninsert_fast_tracepoint_jumps_at): Likewise. - (reinsert_fast_tracepoint_jumps_at): Likewise. - * nto-low.c (nto_xfer_memory): Likewise. - (nto_resume): Likewise. - -2019-11-20 Luis Machado <luis.machado@linaro.org> - - * linux-aarch64-low.c (is_sve_tdesc): Check against target feature - instead of register count. - * tdesc.c (tdesc_contains_feature): New function. - * tdesc.h (tdesc_contains_feature): New prototype. - -2019-11-15 Christian Biesinger <cbiesinger@google.com> - - * Makefile.in: Add safe-strerror.c. - * configure: Regenerate. - * configure.ac: Don't source common.host. - -2019-11-15 Christian Biesinger <cbiesinger@google.com> - - * config.in: Regenerate. - * configure: Regenerate. - -2019-11-12 Andrew Burgess <andrew.burgess@embecosm.com> - - * ax.c (ax_printf): Handle size_t_arg. - -2019-11-06 Christian Biesinger <cbiesinger@google.com> - - * linux-tdep.c (linux_info_proc): Use strtok_r instead of strtok. - * mi/mi-main.c (output_cores): Likewise. - * nat/linux-osdata.c (linux_xfer_osdata_cpus): Likewise. - (linux_xfer_osdata_modules): Likewise. - * remote.c (register_remote_support_xml): Likewise. - * sparc64-tdep.c (adi_is_addr_mapped): Likewise. - * xml-syscall.c (syscall_create_syscall_desc): Likewise. - -2019-11-01 Christian Biesinger <cbiesinger@google.com> - - * configure: Regenerate. - * configure.ac: Remove check for strerror_r. - -2019-10-31 Christian Biesinger <cbiesinger@google.com> - - * config.in: Regenerate. - * configure: Regenerate. - * configure.ac: Also check for strerror_r. - -2019-10-31 Christian Biesinger <cbiesinger@google.com> - - * ax.h (debug_agent): Remove duplicate declaration. - -2019-10-26 Tom de Vries <tdevries@suse.de> - - * linux-aarch64-low.c: Fix typos in comments. - * linux-arm-low.c: Same. - * linux-low.c: Same. - * linux-ppc-low.c: Same. - * proc-service.c: Same. - * regcache.h: Same. - * server.c: Same. - * tracepoint.c: Same. - * win32-low.c: Same. - -2019-10-25 Tom Tromey <tromey@adacore.com> - - * utils.c (xstrdup): Remove. - -2019-10-23 Tom Tromey <tom@tromey.com> - - * configure, config.in: Rebuild. - -2019-10-23 Tom Tromey <tom@tromey.com> - - * configure: Rebuild. - * acinclude.m4: Use m4_include, not sinclude. - -2019-10-17 Tom Tromey <tromey@adacore.com> - - * configure: Rebuild. - * configure.ac: Use AC_CONFIG_HEADERS. Create stamp-h there, not - in AC_CONFIG_FILES invocation. - * Makefile.in (stamp-h, Makefile): Use new-style config.status - invocation. - -2019-10-16 Christian Biesinger <cbiesinger@google.com> - - * server.c: Include xml-builtin.h. - (get_xml_features): Don't declare xml_builtins here. - -2019-10-15 Andrew Burgess <andrew.burgess@embecosm.com> - - * Makefile.in: Remove references to vec-ipa.o. - -2019-10-15 Andrew Burgess <andrew.burgess@embecosm.com> - - * Makefile.in: Remove references to vec.c. - -2019-10-02 Christian Biesinger <cbiesinger@google.com> - - * server.c (server_waiting): Change to bool. - (extended_protocol): Likewise. - (response_needed): Likewise. - (exit_requested): Likewise. - (run_once): Likewise. - (report_no_resumed): Likewise. - (non_stop): Likewise. - (disable_packet_vCont): Likewise. - (disable_packet_Tthread): Likewise. - (disable_packet_qC): Likewise. - (disable_packet_qfThreadInfo): Likewise. - (handle_general_set): Update. - (handle_detach): Update. - (handle_monitor_command): Update. - (handle_query): Update. - (captured_main): Update. - (process_serial_event): Update. - * server.h (server_waiting): Change to bool. - (disable_packet_vCont): Likewise. - (disable_packet_Tthread): Likewise. - (disable_packet_qC): Likewise. - (disable_packet_qfThreadInfo): Likewise. - (run_once): Likewise. - (non_stop): Likewise. - * target.c (target_stop_and_wait): Update. - -2019-10-02 Tom Tromey <tromey@adacore.com> - - * Makefile.in (SFILES): Add common-inferior.c. - (OBS): Add common-inferior.o. - * server.c (startup_with_shell): Don't define. - -2019-10-02 Andrew Burgess <andrew.burgess@embecosm.com> - - * linux-low.c (linux_low_read_btrace): Update for change to - std::vector. - -2019-09-20 Christian Biesinger <cbiesinger@google.com> - - * debug.c (debug_threads): Remove comment in favor of the header. - * debug.h (using_threads): Add declaration. - (debug_threads): Add comment. - * linux-aarch64-low.c: Include debug.h and remove declaration of - debug_threads. - * nto-low.c: Likewise. - * remote-utils.c: Likewise. - * thread-db.c: Likewise. - -2019-09-20 Ulrich Weigand <uweigand@de.ibm.com> - - * configure.srv (ipa_ppc_linux_regobj): Remove powerpc-cell32l-ipa.o - and powerpc-cell64l-ipa.o. - (powerpc*-*-linux*): Remove powerpc-cell32l.o and powerpc-cell64l.o - from srv_regobj. Remove rs6000/powerpc-cell32l.xml and - rs6000/powerpc-cell64l.xml from srv_xmlfiles. - (spu*-*-*): Remove. - - * spu-low.c: Remove file. - - * linux-ppc-low.c (INSTR_SC, NR_spu_run): Remove. - (parse_spufs_run): Remove. - (ppc_get_pc): Remove Cell/B.E. support. - (ppc_set_pc): Likewise. - (ppc_breakpoint_at): Likewise. - (ppc_arch_setup): Likewise. - (ppc_get_ipa_tdesc_idx): Do not handle tdesc_powerpc_cell64l or - tdesc_powerpc_cell32l. - (initialize_low_arch): Do not call init_registers_powerpc_cell64l - or init_registers_powerpc_cell32l. - * linux-ppc-ipa.c (get_ipa_tdesc): Do not handle PPC_TDESC_CELL. - (initialize_low_tracepoint): Do not call init_registers_powerpc_cell64l - or init_registers_powerpc_cell32l. - * linux-ppc-tdesc-init.h (PPC_TDESC_CELL): Mark as unused. - (init_registers_powerpc_cell32l): Remove prototype. - (init_registers_powerpc_cell64l): Likewise. - - * target.h (struct target_ops): Remove qxfer_spu member. - * server.c (handle_qxfer_spu): Remove. - (qxfer_packets): Remove entry for "spu". - (handle_query): No longer support qXfer:spu:read or qXfer:spu:write. - * linux-low.c (SPUFS_MAGIC): Remove. - (spu_enumerate_spu_ids): Remove. - (linux_qxfer_spu): Remove. - (linux_target_ops): Remove qxfer_spu member. - * lynx-low.c (lynx_target_ops): Remove qxfer_spu member. - * nto-low.c (nto_target_ops): Remove qxfer_spu member. - * win32-low.c (win32_target_ops): Remove qxfer_spu member. - -2019-08-23 Sergio Durigan Junior <sergiodj@redhat.com> - - * Makefile.in (SFILES): Add 'gdbsupport/gdb-dlfcn.c'. - (OBS): Add 'gdbsupport/gdb-dlfcn.o'. - * config.in: Regenerate. - * configure: Regenerate. - -2019-08-15 Tom Tromey <tromey@adacore.com> - - * target.c (target_write_memory): Use gdb::byte_vector. - -2019-08-15 Tom Tromey <tromey@adacore.com> - - * tracepoint.c (write_inferior_data_pointer) - (write_inferior_integer, write_inferior_int8) - (write_inferior_uinteger, m_tracepoint_action_download) - (r_tracepoint_action_download, x_tracepoint_action_download) - (l_tracepoint_action_download, clear_inferior_trace_buffer) - (download_agent_expr, download_tracepoint_1) - (download_trace_state_variables, upload_fast_traceframes): Update. - * server.c (gdb_write_memory): Update. - * remote-utils.c (relocate_instruction): Update. - * proc-service.c (ps_pdwrite): Update. - * mem-break.c (remove_memory_breakpoint) - (delete_fast_tracepoint_jump, set_fast_tracepoint_jump) - (uninsert_fast_tracepoint_jumps_at) - (reinsert_fast_tracepoint_jumps_at): Update. - * linux-x86-low.c (append_insns) - (i386_install_fast_tracepoint_jump_pad) - (amd64_write_goto_address, i386_write_goto_address): Update. - * linux-s390-low.c (append_insns, s390_write_goto_address): - Update. - * linux-ppc-low.c (ppc_relocate_instruction) - (ppc_install_fast_tracepoint_jump_pad, emit_insns) - (ppc_write_goto_address): Update. - * linux-aarch64-low.c (append_insns): Update. - * target.h (struct target_ops): Update. - (write_inferior_memory): Don't declare. - * target.c (target_write_memory): Rename from - write_inferior_memory. Remove old target_write_memory. - -2019-08-15 Tom Tromey <tromey@adacore.com> - - * target.c (write_inferior_memory): Use std::vector. - -2019-08-06 Frank Ch. Eigler <fche@redhat.com> - - PR build/24886 - * configure.ac: Drop enable-libmcheck support. - * configure, config.in: Rebuild. - * acinclude.m4: Don't include it. - -2019-07-19 Alan Hayward <alan.hayward@arm.com> - - * configure.srv: Remove Arm xml files. - -2019-07-19 Alan Hayward <alan.hayward@arm.com> - - * configure.srv: Add new files. Remove xml generated files. - * linux-aarch32-low.c (initialize_low_arch_aarch32): Don't init - registers. - * linux-aarch32-low.h (tdesc_arm_with_neon): Remove. - * linux-aarch32-tdesc.c: New file. - * linux-aarch32-tdesc.h: New file. - * linux-aarch64-low.c (aarch64_arch_setup): Call aarch32_linux_read_description. - * linux-arm-low.c (init_registers_arm, tdesc_arm) - (init_registers_arm_with_iwmmxt, tdesc_arm_with_iwmmxt) - (init_registers_arm_with_vfpv2, tdesc_arm_with_vfpv2) - (init_registers_arm_with_vfpv3, tdesc_arm_with_vfpv3): Remove. - (arm_fill_wmmxregset, arm_store_wmmxregset, arm_fill_vfpregset) - (arm_store_vfpregset): Call arm_linux_get_tdesc_fp_type. - (arm_read_description): Call arm_linux_read_description. - (initialize_low_arch): Don't init registers. - * linux-arm-tdesc.c: New file. - * linux-arm-tdesc.h: New file. - -2019-07-10 Alan Hayward <alan.hayward@arm.com> - - * linux-arm-low.c (arm_fill_wmmxregset, arm_store_wmmxregset): - Move counter inside for. - (arm_read_description): Check ptrace earlier. - (arm_arch_setup): Call arm_linux_init_hwbp_cap here. - -2019-07-09 Tom Tromey <tom@tromey.com> - - * configure: Rebuild. - * configure.ac: Change common to gdbsupport. - * acinclude.m4: Change common to gdbsupport. - * Makefile.in (SFILES, OBS, GDBREPLAY_OBS, IPA_OBJS) - (version-generated.c, gdbsupport/%-ipa.o, gdbsupport/%.o): Change - common to gdbsupport. - * ax.c, event-loop.c, fork-child.c, gdb_proc_service.h, - gdbreplay.c, gdbthread.h, hostio-errno.c, hostio.c, i387-fp.c, - inferiors.c, inferiors.h, linux-aarch64-tdesc-selftest.c, - linux-amd64-ipa.c, linux-i386-ipa.c, linux-low.c, - linux-tic6x-low.c, linux-x86-low.c, linux-x86-tdesc-selftest.c, - linux-x86-tdesc.c, lynx-i386-low.c, lynx-low.c, mem-break.h, - nto-x86-low.c, regcache.c, regcache.h, remote-utils.c, server.c, - server.h, spu-low.c, symbol.c, target.h, tdesc.c, tdesc.h, - thread-db.c, tracepoint.c, win32-i386-low.c, win32-low.c: Change - common to gdbsupport. - -2019-07-04 Alan Hayward <alan.hayward@arm.com> - - * linux-aarch32-low.c (arm_read_description, arm_regsets): Use new - defines. - * linux-arm-low.c (arm_read_description, arm_regsets): Likewise. - -2019-07-04 Alan Hayward <alan.hayward@arm.com> - - * configure.srv: Remove legacy xml. - * linux-aarch64-low.c (initialize_low_arch): Remove - initialize_low_tdesc call. - * linux-aarch64-tdesc-selftest.c: Remove file. - * linux-aarch64-tdesc.h (initialize_low_tdesc): Remove. - * linux-x86-low.c (initialize_low_arch): Remove - initialize_low_tdesc call. - * linux-x86-tdesc-selftest.c: Remove file. - * linux-x86-tdesc.h (initialize_low_tdesc): Remove. - -2019-06-20 Tom de Vries <tdevries@suse.de> - - * linux-s390-ipa.c (get_ipa_tdesc)[!__s390x__]: Use - s390_te_linux64_ft_collect_regmap for S390_TDESC_GS. - -2019-06-19 Tom de Vries <tdevries@suse.de> - - * debug.h (debug_write): Change return type to ssize_t. - * debug.c (debug_write): Same. - -2019-06-14 Tom Tromey <tom@tromey.com> - - * configure.ac: Use new path to gnulib. - * configure: Rebuild. - * Makefile.in (INCGNU, $(GNULIB_BUILDDIR)/Makefile): Use new path - to gnulib. - -2019-06-11 Tom Tromey <tom@tromey.com> - - * Makefile.in (SFILES): Add alloc.c. - (OBS): Add alloc.o. - (IPA_OBJS): Add alloc-ipa.o. - (alloc-ipa.o): New target. - (%.o: ../%.c): New pattern rule. - -2019-06-10 Tom Tromey <tromey@adacore.com> - - * remote-utils.c (look_up_one_symbol, relocate_instruction): Don't - end warning with a newline. - * linux-s390-low.c (s390_get_wordsize): Don't end warning with a - newline. - * thread-db.c (attach_thread): Don't end warning with a newline. - (thread_db_notice_clone): Likewise. - * tracepoint.c (gdb_agent_helper_thread): Don't end warning with a - newline. - * linux-x86-low.c (x86_get_min_fast_tracepoint_insn_len): Don't - end warning with a newline. - -2019-06-04 Pedro Alves <palves@redhat.com> - - * server.c (captured_main): Use make_unique_xstrdup. - -2019-06-02 Tom Tromey <tom@tromey.com> - - * gdbreplay.c (fromhex): Remove. - * Makefile.in (GDBREPLAY_OBS): Add rsp-low.o. - -2019-05-29 Tom Tromey <tromey@adacore.com> - - * configure: Rebuild. - -2019-05-06 Kevin Buettner <kevinb@redhat.com> - - * linux-x86-low.c (x86_fill_gregset): Don't compile 64-bit - sign extension code on 32-bit builds. - -2019-05-03 Eli Zaretskii <eliz@gnu.org> - - * remote-utils.c: - * gdbreplay.c [USE_WIN32API]: Remove the _WIN32_WINNT override. - -2019-04-19 Tom Tromey <tom@tromey.com> - - * server.c (struct vstop_notif): Derive from notif_event. - <base>: Remove. - (queue_stop_reply): Update. - (remove_all_on_match_ptid): Change type. Rewrite. - (discard_queued_stop_replies): Rewrite. - (in_queued_stop_replies_ptid): Change type. - (in_queued_stop_replies): Rewrite. - (notif_stop): Update. - (queue_stop_reply_callback): Update. - (captured_main): Don't call initialize_notif. - (push_stop_notification): Update. - * notif.c (notif_write_event, handle_notif_ack) - (notif_event_enque, notif_push): Update. - (notif_event_xfree, initialize_notif): Remove. - * notif.h (struct notif_event): Include <list>, not - "common/queue.h". - (struct notif_server) <queue>: Now a std::list. - (notif_event_p): Remove typedef. - (initialize_notif): Don't declare. - (struct notif_event): Add virtual destructor. - -2019-04-17 Alan Hayward <alan.hayward@arm.com> - - * ax.c (ax_vdebug): Call debug_printf. - * debug.c (debug_write): New function. - * debug.h (debug_write): New declaration. - * linux-low.c (sigchld_handler): Call debug_write. - -2019-04-17 Alan Hayward <alan.hayward@arm.com> - - * debug.c (debug_set_output): New function. - (debug_vprintf): Send output to debug_file. - (debug_flush): Likewise. - * debug.h (debug_set_output): New declaration. - * server.c (handle_monitor_command): Add debug-file option. - (captured_main): Likewise. - -2019-04-17 Alan Hayward <alan.hayward@arm.com> - - * debug.c (remote_debug): Add definition. - * debug.h (remote_debug): Add declaration. - * hostio.c (remote_debug): Remove declaration. - * remote-utils.c (struct ui_file): Likewise. - (remote_debug): Likewise. - * remote-utils.h (remote_debug): Likewise, - * server.c (remote_debug): Remove definition. - -2019-04-10 Kevin Buettner <kevinb@redhat.com> - - * linux-x86-low.c (x86_fill_gregset): Sign extend EAX value - when using a 64-bit gdbserver. - -2019-04-09 Tom Tromey <tromey@adacore.com> - - * linux-low.c (select_event_lwp): Use find_thread_in_random. - -2019-04-08 Tom Tromey <tom@tromey.com> - - * linux-low.c (linux_detach_one_lwp): Replace throw_exception with - throw. - (linux_resume_one_lwp): Likewise. - -2019-04-08 Tom Tromey <tom@tromey.com> - - * gdbreplay.c: Update. - * linux-low.c: Update. - * server.c: Update. - -2019-04-08 Tom Tromey <tom@tromey.com> - - * server.c: Use C++ exception handling. - * linux-low.c: Use C++ exception handling. - * gdbreplay.c: Use C++ exception handling. - -2019-04-08 Tom Tromey <tom@tromey.com> - - * server.c (handle_btrace_general_set, handle_qxfer_btrace) - (handle_qxfer_btrace_conf, detach_or_kill_for_exit_cleanup) - (captured_main, main): Update. - * gdbreplay.c (main): Update. - -2019-04-05 Pedro Franco de Carvalho <pedromfc@linux.ibm.com> - - * linux-low.c (linux_get_auxv): Remove static. Return auxv entry - value in argument pointer, return 1 if the entry is found and 0 - otherwise. Move comment. - (linux_get_hwcap, linux_get_hwcap2): Use modified linux_get_auxv. - * linux-low.h (linux_get_auxv): Declare. - * linux-ppc-low.c (is_elfv2_inferior): Use linux_get_auxv. - -2019-04-05 Tom Tromey <tromey@adacore.com> - - * server.c (gdbserver_usage): Use upper-case for metasyntactic - variables. - -2019-03-28 Alan Hayward <alan.hayward@arm.com> - - * linux-low.c (AT_HWCAP2): Add define if not already included. - -2019-03-26 Alan Hayward <alan.hayward@arm.com> - - * linux-aarch64-low.c (aarch64_get_hwcap): Remove function. - (aarch64_arch_setup): Call linux_get_hwcap. - * linux-arm-low.c (arm_get_hwcap): Remove function. - (arm_read_description): Call linux_get_hwcap. - * linux-low.c (linux_get_auxv): New function. - (linux_get_hwcap): Likewise. - (linux_get_hwcap2): Likewise. - * linux-low.h (linux_get_hwcap): New declaration. - (linux_get_hwcap2): Likewise. - * linux-ppc-low.c (ppc_get_auxv): Remove function. - (ppc_arch_setup): Call linux_get_hwcap. - * linux-s390-low.c (s390_get_hwcap): Remove function. - (s390_arch_setup): Call linux_get_hwcap. - -2019-03-22 Alan Hayward <alan.hayward@arm.com> - Jiong Wang <jiong.wang@arm.com> - - * linux-aarch64-low.c (aarch64_store_pauthregset): New function. - * linux-low.c (regsets_store_inferior_registers): Allow optional reads - to fail. - * linux-low.h (enum regset_type): Add OPTIONAL_REGS. - -2019-03-22 Alan Hayward <alan.hayward@arm.com> - Jiong Wang <jiong.wang@arm.com> - - * linux-aarch64-low.c (AARCH64_HWCAP_PACA): New define. - (aarch64_get_hwcap): New function. - (aarch64_arch_setup): Read APIA hwcap. - -2019-03-22 Alan Hayward <alan.hayward@arm.com> - Jiong Wang <jiong.wang@arm.com> - - * linux-aarch64-ipa.c (get_ipa_tdesc): Add pauth param. - (initialize_low_tracepoint): Likewise. - * linux-aarch64-low.c (aarch64_arch_setup): Likewise. - * linux-aarch64-tdesc-selftest.c (aarch64_tdesc_test): Likewise. - * linux-aarch64-tdesc.c (struct target_desc): Likewise. - (aarch64_linux_read_description): Likewise. - * linux-aarch64-tdesc.h (aarch64_linux_read_description): Likewise. - -2019-03-12 John Baldwin <jhb@FreeBSD.org> - - * linux-x86-tdesc.c (i386_linux_read_description): Update call to - i386_create_target_description for 'segments' parameter. - * lynx-i386-low.c (lynx_i386_arch_setup): Likewise. - * nto-x86-low.c (nto_x86_arch_setup): Likewise. - * win32-i386-low.c (i386_arch_setup): Likewise. - -2019-03-12 Tom Tromey <tromey@adacore.com> - - * linux-low.c (iterate_over_lwps): Update. - -2019-03-06 Tom Tromey <tom@tromey.com> - - * server.c (detach_or_kill_for_exit_cleanup): Remove parameter. - (captured_main): Use SCOPE_EXIT. - -2019-03-04 Sergio Durigan Junior <sergiodj@redhat.com> - - * configure.srv: Use '$enable_unittest' instead of '$development' - when checking whether to fill 'srv_regobj' on 'aarch64*-*-linux*' - case. - -2019-02-27 Tom Tromey <tromey@adacore.com> - - * gdbreplay.c (logchar): Handle \r\n. - -2019-02-07 Alan Hayward <alan.hayward@arm.com> - - * linux-low.c (linux_attach): Add process before lwp. - * server.c (attach_inferior): Check if already attached. - -2019-02-07 Tom Tromey <tom@tromey.com> - - * x86-tdesc.h: Rename include guard. - * x86-low.h: Add include guard. - * wincecompat.h: Rename include guard. - * win32-low.h: Add include guard. - * utils.h: Rename include guard. - * tracepoint.h: Rename include guard. - * tdesc.h: Rename include guard. - * target.h: Rename include guard. - * server.h: Rename include guard. - * remote-utils.h: Rename include guard. - * regcache.h: Rename include guard. - * nto-low.h: Rename include guard. - * notif.h: Add include guard. - * mem-break.h: Rename include guard. - * lynx-low.h: Add include guard. - * linux-x86-tdesc.h: Add include guard. - * linux-s390-tdesc.h: Add include guard. - * linux-ppc-tdesc-init.h: Add include guard. - * linux-low.h: Add include guard. - * linux-aarch64-tdesc.h: Add include guard. - * linux-aarch32-low.h: Add include guard. - * inferiors.h: Rename include guard. - * i387-fp.h: Rename include guard. - * hostio.h: Rename include guard. - * gdbthread.h: Rename include guard. - * gdb_proc_service.h: Rename include guard. - * event-loop.h: Rename include guard. - * dll.h: Rename include guard. - * debug.h: Rename include guard. - * ax.h: Rename include guard. - -2018-01-30 Szabolcs Nagy <szabolcs.nagy@arm.com> - - PR gdb/23985 - * Makefile.in (IPAGENT_CFLAGS): Add UNDO_GNULIB_CFLAGS. - (UNDO_GNULIB_CFLAGS): Undo gnulib replacements. - -2019-01-25 Tom Tromey <tom@tromey.com> - - * Makefile.in (INCLUDE_CFLAGS): Don't add -I for common. - -2019-01-25 Tom Tromey <tom@tromey.com> - - * win32-low.c: Fix common/ includes. - * win32-i386-low.c: Fix common/ includes. - * tracepoint.c: Fix common/ includes. - * thread-db.c: Fix common/ includes. - * target.h: Fix common/ includes. - * symbol.c: Fix common/ includes. - * spu-low.c: Fix common/ includes. - * server.h: Fix common/ includes. - * server.c: Fix common/ includes. - * remote-utils.c: Fix common/ includes. - * regcache.h: Fix common/ includes. - * regcache.c: Fix common/ includes. - * nto-x86-low.c: Fix common/ includes. - * notif.h: Fix common/ includes. - * mem-break.h: Fix common/ includes. - * lynx-low.c: Fix common/ includes. - * lynx-i386-low.c: Fix common/ includes. - * linux-x86-tdesc-selftest.c: Fix common/ includes. - * linux-x86-low.c: Fix common/ includes. - * linux-low.c: Fix common/ includes. - * inferiors.h: Fix common/ includes. - * i387-fp.c: Fix common/ includes. - * hostio.c: Fix common/ includes. - * hostio-errno.c: Fix common/ includes. - * gdbthread.h: Fix common/ includes. - * gdbreplay.c: Fix common/ includes. - * fork-child.c: Fix common/ includes. - * event-loop.c: Fix common/ includes. - * ax.c: - (enum gdb_agent_op): Fix common/ includes. - -2019-01-21 Tom Tromey <tom@tromey.com> - - * tracepoint.c: Fix includes. - * remote-utils.c: Fix includes. - * linux-x86-low.c: Fix includes. - -2019-01-01 Joel Brobecker <brobecker@adacore.com> - - * gdbreplay.c (gdbreplay_version): Update copyright year in - version message. - * server.c (gdbserver_version): Likewise. - -2018-12-05 Alan Hayward <alan.hayward@arm.com> - - * linux-low.c (add_lwp): Switch ordering. - -2018-11-29 Tom Tromey <tom@tromey.com> - - * win32-low.c (win32_join): Take pid, not process. - * target.h (struct target_ops) <join>: Change argument type. - (join_inferior): Change argument name. - * spu-low.c (spu_join): Take pid, not process. - * server.c (handle_detach): Preserve pid before destroying - process. - * lynx-low.c (lynx_join): Take pid, not process. - * linux-low.c (linux_join): Take pid, not process. - -2018-11-23 Alan Hayward <alan.hayward@arm.com> - - * linux-aarch64-low.c (aarch64_cannot_store_register): Remove. - (aarch64_cannot_fetch_register): Likewise. - (struct linux_target_ops): Update references. - -2018-10-31 Pedro Franco de Carvalho <pedromfc@linux.ibm.com> - - * linux-ppc-low.c: Include nat/linux-ptrace.h. - -2018-10-26 Pedro Franco de Carvalho <pedromfc@linux.ibm.com> - - * configure.srv (ipa_ppc_linux_regobj): Add - powerpc-isa207-htm-vsx32l-ipa.o and - powerpc-isa207-htm-vsx64l-ipa.o. - (powerpc*-*-linux*): Add powerpc-isa207-htm-vsx32l.o and - powerpc-isa207-htm-vsx64l.o to srv_regobj. Add - rs6000/power-htm-spr.xml, rs6000/power-htm-core.xml, - rs6000/power64-htm-core.xml, rs6000/power-htm-fpu.xml, - rs6000/power-htm-altivec.xml, rs6000/power-htm-vsx.xml, - rs6000/power-htm-ppr.xml, rs6000/power-htm-dscr.xml, - rs6000/power-htm-tar.xml, rs6000/powerpc-isa207-htm-vsx32l.xml, - and rs6000/powerpc-isa207-htm-vsx64l.xml to srv_xmlfiles. - * linux-ppc-tdesc-init.h (enum ppc_linux_tdesc) - <PPC_TDESC_ISA207_HTM_VSX>: New enum value. - (init_registers_powerpc_isa207_htm_vsx32l) - (init_registers_powerpc_isa207_htm_vsx64l): Declare. - * linux-ppc-low.c (ppc_fill_tm_sprregset, ppc_store_tm_sprregset) - (ppc_store_tm_cgprregset, ppc_store_tm_cfprregset) - (ppc_store_tm_cvrregset, ppc_store_tm_cvsxregset) - (ppc_store_tm_cpprregset, ppc_store_tm_cdscrregset) - (ppc_store_tm_ctarregset): New functions. - (ppc_regsets): Add entries for HTM regsets. - (ppc_arch_setup): Set htm in features struct when needed. Set - sizes for the HTM regsets. - (ppc_get_ipa_tdesc_idx): Return PPC_TDESC_ISA207_HTM_VSX. - (initialize_low_arch): Call - init_registers_powerpc_isa207_htm_vsx32l and - init_registers_powerpc_isa207_htm_vsx64l. - * linux-ppc-ipa.c (get_ipa_tdesc): Handle - PPC_TDESC_ISA207_HTM_VSX. - (initialize_low_tracepoint): Call - init_registers_powerpc_isa207_htm_vsx32l and - init_registers_powerpc_isa207_htm_vsx64l. - -2018-10-26 Pedro Franco de Carvalho <pedromfc@linux.ibm.com> - - * configure.srv (powerpc*-*-linux*): Add rs6000/power-ebb.xml and - rs6000/power-linux-pmu.xml to srv_xmlfiles. - * linux-ppc-low.c (ppc_store_ebbregset, ppc_fill_pmuregset) - (ppc_store_pmuregset): New functions. - (ppc_regsets): Add entries for ebb and pmu regsets. - (ppc_arch_setup): Set isa207 in features struct if the ebb and - pmu regsets are available. Set sizes for these regsets. - -2018-10-26 Pedro Franco de Carvalho <pedromfc@linux.ibm.com> - - * configure.srv (ipa_ppc_linux_regobj): Add - powerpc-isa207-vsx64l-ipa.o and powerpc-isa207-vsx32l-ipa.o. - (powerpc*-*-linux*): Add powerpc-isa207-vsx32l.o and - powerpc-isa207-vsx64l.o to srv_regobj, add rs6000/power-tar.xml, - rs6000/powerpc-isa207-vsx32l.xml, and - rs6000/powerpc-isa207-vsx64l.xml to srv_xmlfiles. - * linux-ppc-tdesc-init.h (enum ppc_linux_tdesc) - <PPC_TDESC_ISA207_VSX>: New enum value. - (init_registers_powerpc_isa207_vsx32l): Declare. - (init_registers_powerpc_isa207_vsx64l): Declare. - * linux-ppc-low.c (ppc_fill_tarregset): New function. - (ppc_store_tarregset): New function. - (ppc_regsets): Add entry for the TAR regset. - (ppc_arch_setup): Set isa207 in features struct when needed. Set - size for the TAR regsets. - (ppc_get_ipa_tdesc_idx): Return PPC_TDESC_ISA207_VSX. - (initialize_low_arch): Call init_registers_powerpc_isa207_vsx32l - and init_registers_powerpc_isa207_vsx64l. - * linux-ppc-ipa.c (get_ipa_tdesc): Handle PPC_TDESC_ISA207_VSX. - (initialize_low_tracepoint): Call - init_registers_powerpc_isa207_vsx32l and - init_registers_powerpc_isa207_vsx64l. - -2018-10-26 Edjunior Barbosa Machado <emachado@linux.vnet.ibm.com> - Pedro Franco de Carvalho <pedromfc@linux.ibm.com> - - * configure.srv (ipa_ppc_linux_regobj): Add - powerpc-isa205-ppr-dscr-vsx32l-ipa.o and - powerpc-isa205-ppr-dscr-vsx64l-ipa.o. - (powerpc*-*-linux*): Add powerpc-isa205-ppr-dscr-vsx32l.o and - powerpc-isa205-ppr-dscr-vsx64l.o to srv_regobj, add - rs6000/power-dscr.xml, rs6000/power-ppr.xml, - rs6000/powerpc-isa205-ppr-dscr-vsx32l.xml and - rs6000/powerpc-isa205-ppr-dscr-vsx64l.xml to srv_xmlfiles. - * linux-ppc-tdesc-init.h (enum ppc_linux_tdesc) - <PPC_TDESC_ISA205_PPR_DSCR_VSX>: New enum value. - (init_registers_powerpc_isa205_ppr_dscr_vsx32l) - (init_registers_powerpc_isa205_ppr_dscr_vsx64l): Declare. - * linux-ppc-low.c: Include "elf/common.h" and <sys/uio.h>. - (ppc_hwcap): Add comment. - (ppc_hwcap2): New global. - (ppc_check_regset, ppc_fill_pprregset, ppc_store_pprregset) - (ppc_fill_dscrregset, ppc_store_dscrregset): New functions. - (ppc_regsets): Add entries for the DSCR and PPR regsets. - (ppc_arch_setup): Get AT_HWCAP2. Set ppr_dscr in features struct - when needed. Set sizes for the the DSCR and PPR regsets. - (ppc_get_ipa_tdesc_idx): Return PPC_TDESC_ISA205_PPR_DSCR_VSX. - (initialize_low_arch): Call - init_registers_powerpc_isa205_ppr_dscr_vsx32l and - init_registers_powerpc_isa205_ppr_dscr_vsx64l. - * linux-ppc-ipa.c (get_ipa_tdesc): Handle - PPC_TDESC_ISA205_PPR_DSCR_VSX. - (initialize_low_tracepoint): Call - init_registers_powerpc_isa205_ppr_dscr_vsx32l and - init_registers_powerpc_isa205_ppr_dscr_vsx64l. - -2018-10-26 Pedro Franco de Carvalho <pedromfc@linux.ibm.com> - - * linux-ppc-low.c (ppc_fill_vrregset): Remove memset calls. - -2018-10-10 Sergio Durigan Junior <sergiodj@redhat.com> - Simon Marchi <simark@simark.ca> - - * acinclude.m4: Include "../selftest.m4". - * configure: Regenerate. - * configure.ac: Use "GDB_AC_SELFTEST". - * configure.srv: Use "$enable_unittests" instead of - "$development" when checking whether unit tests have been - enabled. - * server.c (captured_main): Update message informing that - selftests have been disabled. - -2018-10-04 Tom Tromey <tom@tromey.com> - - * configure: Rebuild. - -2018-10-04 Tom Tromey <tom@tromey.com> - - * server.c (handle_status): Rename inner "thread". - (process_serial_event): Declare "res" in 'm' case. - * linux-low.c (last_thread_of_process_p, find_lwp_pid) - (iterate_over_lwps): Rename inner "thread". - (linux_qxfer_libraries_svr4): Rename inner "len". - * gdbthread.h (find_thread_in_random): Rename inner "thread". - -2018-10-01 Gary Benson <gbenson@redhat.com> - - * gdb_proc_service.h: Moved common code to - common/gdb_proc_service.h. - -2018-10-01 Gary Benson <gbenson@redhat.com> - - * gdb_proc_service.h: Synchronize comments and whitespace with - GDB's version of this file. - -2018-09-25 Tom Tromey <tom@tromey.com> - - * configure: Rebuild. - * configure.ac (WARN_CFLAGS): Don't remove -Wmissing-prototypes. - -2018-09-16 Simon Marchi <simon.marchi@polymtl.ca> - - * Makefile.in (gdbserver$(EXEEXT)): Sort OBS. - (gdbreplay$(EXEEXT)): Sort GDBREPLAY_OBS. - ($(IPA_LIB)): Sort IPA_OBJS. - -2018-09-16 Simon Marchi <simon.marchi@polymtl.ca> - - * Makefile.in: Remove references to $(ADD_DEPS). - -2018-09-16 Tom Tromey <tom@tromey.com> - - * remote-utils.c (remote_open): Use GNU style for metasyntactic - variables. - * gdbreplay.c (gdbreplay_usage): Use GNU style for metasyntactic - variables. - -2018-09-05 Tom Tromey <tom@tromey.com> - - * configure: Rebuild. - -2018-08-28 Simon Marchi <simon.marchi@polymtl.ca> - - PR build/23399 - * tracepoint.c (IPA_SYM_STRUCT_NAME): Define. - -2018-08-27 Tom Tromey <tom@tromey.com> - - PR build/23087: - * configure: Rebuild. - -2018-08-27 Tom Tromey <tom@tromey.com> - - * linux-s390-low.c (s390_emit_ext, s390_emit_litpool) - (s390_emit_const, s390_emit_reg, s390_emit_zero_ext) - (s390_emit_stack_adjust, s390_emit_set_r2, s390x_emit_ext) - (s390x_emit_const, s390x_emit_reg, s390x_emit_zero_ext) - (s390x_emit_stack_adjust): Add casts to unsigned char. - -2018-08-22 Simon Marchi <simon.marchi@ericsson.com> - - PR gdb/23374 - PR gdb/23375 - * server.h (struct client_state) <disable_randomization>: - Initialize to 1. - -2018-07-22 Simon Marchi <simon.marchi@polymtl.ca> - - * linux-mips-low.c (mips_collect_ptrace_register): Remove unused - variable. - (mips_supply_ptrace_register): Likewise. - -2018-07-22 Tom Tromey <tom@tromey.com> - - * configure: Rebuild. - -2018-07-22 Tom Tromey <tom@tromey.com> - - * win32-low.c (win32_create_inferior): Remove unused variables. - * gdbreplay.c (remote_open): Remove unused variable. - * remote-utils.c (remote_prepare): Remove unused variable. - * x86-tdesc.h (X86_TDESC_H): Define. - (amd64_expedite_regs): Define conditionally. - (i386_expedite_regs): Mark ATTRIBUTE_UNUSED. - * linux-x86-tdesc.c (i386_tdescs): Move inside #if. - * remote-utils.c (readchar): Remove unused variable. - -2018-07-13 Pedro Alves <palves@redhat.com> - - * linux-low.c (linux_kill): Change parameter to process_info - pointer instead of pid. Adjust. - * lynx-low.c (lynx_kill): Likewise. - * nto-low.c (nto_kill): Likewise. - * spu-low.c (spu_kill): Likewise. - * win32-low.c (win32_kill): Likewise. - * server.c (handle_v_kill, kill_inferior_callback) - (detach_or_kill_for_exit): Adjust. - * target.c (kill_inferior): Change parameter to process_info - pointer instead of pid. Adjust. - * target.h (struct target_ops) <kill>: Change parameter to - process_info pointer instead of pid. Adjust all implementations - and callers. - (kill_inferior): Likewise. - -2018-07-13 Pedro Alves <palves@redhat.com> - - * linux-low.c (linux_detach, linux_join): Change parameter to - process_info pointer instead of pid. Adjust. - * lynx-low.c (lynx_detach, lynx_join): Likewise. - * nto-low.c (nto_detach): Likewise. - * spu-low.c (spu_detach, spu_join): Likewise. - * win32-low.c (win32_detach, win32_join): Likewise. - * server.c (handle_detach, detach_or_kill_for_exit): Adjust. - * target.h (struct target_ops) <detach, join>: Change parameter to - process_info pointer instead of pid. Adjust all implementations - and callers. - (detach_inferior, join_inferior): Rename 'pid' parameter to - 'proc'. - -2018-07-11 Sergio Durigan Junior <sergiodj@redhat.com> - Jan Kratochvil <jan.kratochvil@redhat.com> - Paul Fertser <fercerpav@gmail.com> - Tsutomu Seki <sekiriki@gmail.com> - - * Makefile.in (SFILES): Add '$(srcdir)/common/netstuff.c'. - (OBS): Add 'common/netstuff.o'. - (GDBREPLAY_OBS): Likewise. - * gdbreplay.c: Include 'wspiapi.h' and 'netstuff.h'. - (remote_open): Implement support for IPv6 - connections. - * remote-utils.c: Include 'netstuff.h', 'filestuff.h' - and 'wspiapi.h'. - (handle_accept_event): Accept connections from IPv6 sources. - (remote_prepare): Handle IPv6-style hostnames; implement - support for IPv6 connections. - (remote_open): Implement support for printing connections from - IPv6 sources. - -2018-07-11 Pedro Alves <palves@redhat.com> - - PR gdb/23377 - * mem-break.c (any_persistent_commands): Add process_info - parameter and use it instead of relying on the current process. - Change return type to bool. - * mem-break.h (any_persistent_commands): Add process_info - parameter and change return type to bool. - * server.c (handle_detach): Remove require_running_or_return call. - Look up the process_info for the process we're about to detach. - If not found, return back error to GDB. Adjust - any_persistent_commands call to pass down a process pointer. - -2018-07-11 Pedro Alves <palves@redhat.com> - - * i387-fp.c (i387_cache_to_fsave, cache_to_fxsave) - (i387_cache_to_xsave): Use regcache_raw_get_unsigned_by_name - instead of collect_register_by_name. - * regcache.c (regcache_raw_get_unsigned_by_name): New. - * regcache.h (regcache_raw_get_unsigned_by_name): New. - -2018-07-04 Vyacheslav Barinov <v.barinov@samsung.com> - Pedro Alves <palves@redhat.com> - - * linux-low.c (initialize_low): Call linux_proc_init_warnings. - -2018-07-03 Tom Tromey <tom@tromey.com> - - * linux-low.c: Update. - * lynx-low.c: Update. - * mem-break.c: Update. - * nto-low.c: Update. - * remote-utils.c: Update. - * server.c: Update. - * spu-low.c: Update. - * target.c: Update. - * win32-low.c: Update. - -2018-07-03 Tom Tromey <tom@tromey.com> - - * server.c: Update. - -2018-07-03 Tom Tromey <tom@tromey.com> - - * linux-low.c: Update. - -2018-07-03 Tom Tromey <tom@tromey.com> - - * target.c: Update. - -2018-07-03 Tom Tromey <tom@tromey.com> - - * linux-low.c: Update. - * linux-mips-low.c: Update. - * lynx-low.c: Update. - * nto-low.c: Update. - * remote-utils.c: Update. - * server.c: Update. - * spu-low.c: Update. - * target.c: Update. - * thread-db.c: Update. - -2018-07-03 Tom Tromey <tom@tromey.com> - - * linux-low.c: Update. - * linux-mips-low.c: Update. - * lynx-low.c: Update. - * mem-break.c: Update. - * nto-low.c: Update. - * remote-utils.c: Update. - * server.c: Update. - * spu-low.c: Update. - * target.c: Update. - * tracepoint.c: Update. - -2018-07-03 Tom Tromey <tom@tromey.com> - - * linux-low.c: Update. - * linux-ppc-low.c: Update. - * linux-x86-low.c: Update. - * proc-service.c: Update. - * server.c: Update. - * spu-low.c: Update. - * thread-db.c: Update. - * win32-low.c: Update. - -2018-07-03 Tom Tromey <tom@tromey.com> - - * linux-low.c: Update. - * lynx-low.c: Update. - * nto-low.c: Update. - * remote-utils.c: Update. - * spu-low.c: Update. - * thread-db.c: Update. - * win32-low.c: Update. - -2018-06-29 Joel Brobecker <brobecker@adacore.com> - - * linux-x86-tdesc.c (amd64_linux_read_description): Add missing - parameter in call to 'amd64_create_target_description'. - -2018-06-28 Jan Kratochvil <jan.kratochvil@redhat.com> - - * x86-tdesc.h: Remove executable permission flag. - -2018-06-19 Simon Marchi <simon.marchi@ericsson.com> - - * configure.ac: Remove AC_PREREQ, add missing quoting. - * configure: Re-generate. - * config.in: Re-generate. - * aclocal.m4: Re-generate. - -2018-06-18 Simon Marchi <simon.marchi@ericsson.com> - - * tracepoint.h (current_traceframe): Remove declaration. - -2018-06-18 Alan Hayward <alan.hayward@arm.com> - - * linux-aarch64-low.c (is_sve_tdesc): New function. - (aarch64_sve_regs_copy_to_regcache): Likewise. - (aarch64_sve_regs_copy_from_regcache): Likewise. - (aarch64_regs_info): Add SVE checks. - (initialize_low_arch): Initialize SVE. - -2018-06-18 Alan Hayward <alan.hayward@arm.com> - - * Makefile.in: Add aarch64-sve-linux-ptrace.c. - -2018-06-11 Alan Hayward <alan.hayward@arm.com> - - * linux-aarch64-ipa.c (get_ipa_tdesc): Add null VQ param. - (initialize_low_tracepoint): Likewise - * linux-aarch64-low.c (aarch64_arch_setup): Get VQ. - * linux-aarch64-tdesc-selftest.c (aarch64_tdesc_test): Add null VQ - param. - * linux-aarch64-tdesc.c (aarch64_linux_read_description): Add VQ - checks. - * linux-aarch64-tdesc.h (aarch64_linux_read_description): Add VQ. - -2018-06-11 Alan Hayward <alan.hayward@arm.com> - - * server.h (PBUFSIZ): Increase size - -2018-06-11 Alan Hayward <alan.hayward@arm.com> - - * regcache.c (regcache::raw_compare): New function. - * regcache.h (regcache::raw_compare): New declaration. - -2018-06-11 Alan Hayward <alan.hayward@arm.com> - - * regcache.c (new_register_cache): Use new. - (free_register_cache): Use delete. - (register_data): Use const. - (supply_register): Move body inside regcache. - (regcache::raw_supply): New override function. - (collect_register): Move body inside regcache. - (regcache::raw_collect): New override function. - (regcache::get_register_status): New override function. - * regcache.h (struct regcache): Inherit from reg_buffer_common. - -2018-06-09 Tom Tromey <tom@tromey.com> - - * event-loop.c (gdb_event, gdb_event_p): Remove typedefs. Don't - declare queue. - (event_queue): Use std::queue. - (gdb_event_xfree): Remove. - (initialize_event_loop, process_event, wait_for_event): Update. - -2018-06-08 Stan Cox <scox@redhat.com> - - * win32-low.c (win32_create_inferior): last_ptid and last_status - moved to client_state. - -2018-06-08 Pedro Alves <palves@redhat.com> - - * Makefile.in (GDBREPLAY_OBS): Add common/cleanups.o, - common/common-exceptions.o, common/common-utils.o, - common/errors.o, common/print-utils.o and utils.o. - * gdbreplay.c: Include "common-defs.h" instead of the two - 'config.h's here. Don't include stdio.h, errno.h, stdlib.h, - string.h or alloca.h. - (perror_with_name): Delete. - (remote_open): Use xstrdup instead of strdup. - (main): Rename to ... - (captured_main): ... this. - (main): New. - -2018-06-08 Tom Tromey <tom@tromey.com> - - * linux-low.c (linux_low_read_btrace): Update. - -2018-06-04 Stan Cox <scox@redhat.com> - - * server.h (struct client_state): New. - * server.c (cont_thread, general_thread, multi_process) - (report_fork_events, report_vfork_events, report_exec_events) - (report_thread_events, swbreak_feature, hwbreak_feature) - (vCont_supported, disable_randomization, pass_signals) - (program_signals, program_signals_p, last_status, last_ptid, own_buf): - Moved to client_state. - * remote-utils.c (remote_debug, noack_mode) - (transport_is_reliable): Moved to client_state. - * tracepoint.c (current_traceframe): Moved to client_state. - - Update all callers. - * server.c, remote-utils.c, tracepoint.c, fork-child.c, - linux-low.c, remote-utils.h, target.c: Use client_state. - -2018-05-31 Alan Hayward <alan.hayward@arm.com> - - * configure.srv: Add new c/h file. - -2018-05-31 Alan Hayward <alan.hayward@arm.com> - - * linux-aarch64-tdesc.c (aarch64_linux_read_description): Add - null VQ. - -2018-05-25 Maciej W. Rozycki <macro@mips.com> - - * gdb.arch/mips-fpregset-core.exp: New test. - * gdb.arch/mips-fpregset-core.c: New test source. - -2018-05-23 Erik Kurzinger <ekurzinger@nvidia.com> - - PR server/23198 - * hostio.c (require_int): Do not report overflow for integers - between 0xfffffff and 0x7fffffff. - -2018-05-22 Maciej W. Rozycki <macro@mips.com> - - * linux-mips-low.c [HAVE_PTRACE_GETREGS] (mips_collect_register) - (mips_supply_register): Move outside HAVE_PTRACE_GETREGS. - (mips_collect_ptrace_register, mips_supply_ptrace_register): New - functions. - (the_low_target): Wire them. - -2018-05-22 Pedro Franco de Carvalho <pedromfc@linux.vnet.ibm.com> - - * linux-ppc-low.c (ppc_fill_vrregset): Add vscr_offset variable. - Set vscr_offset to 0 in little-endian mode and 12 in big-endian - mode. Call collect_register_by_name with vscr using - vscr_offset. Zero-pad vscr and vrsave fields in collector buffer. - (ppc_store_vrregset): Add and set vscr_offset variable as in - ppc_fill_vrregset. Call supply_register_by_name with vscr using - vscr_offset. - -2018-05-22 Pedro Franco de Carvalho <pedromfc@linux.vnet.ibm.com> - - * linux-ppc-low.c (SIZEOF_VSXREGS, SIZEOF_VRREGS): Remove. - (ppc_arch_setup): Change SIZEOF_VRREGS and SIZEOF_VSXREGS to - PPC_LINUX_SIZEOF_VRREGSET and PPC_LINUX_SIZEOF_VSXREGSET. - -2018-05-22 Pedro Franco de Carvalho <pedromfc@linux.vnet.ibm.com> - - * linux-ppc-low.c (ppc_fill_vsxregset): Remove ppc_hwcap check. - (ppc_store_vsxregset): Likewise. - (ppc_fill_vrregset): Likewise. - (ppc_store_vrregset): Likewise. - (ppc_fill_evrregset): Likewise. - (ppc_store_evrregset): Likewise. - (ppc_regsets): Set VSX/VR/EVR regset sizes to 0. - (ppc_arch_setup): Iterate through ppc_regsets and set sizes when - needed. - -2018-05-22 Pedro Franco de Carvalho <pedromfc@linux.vnet.ibm.com> - - * linux-ppc-low.c (ppc_arch_setup): Remove code for getting the - wordsize of the inferior. Call ppc_linux_target_wordsize. - -2018-05-22 Pedro Franco de Carvalho <pedromfc@linux.vnet.ibm.com> - - * configure.srv (srv_tgtobj): Add arch/ppc-linux-common.o. - * Makefile.in (SFILES): Add arch/ppc-linux-common.c. - * linux-ppc-tdesc.h: Rename to linux-ppc-tdesc-init.h. - * linux-ppc-tdesc-init.h (tdesc_powerpc_32l, tdesc_powerpc_64l) - (tdesc_powerpc_altivec32l, tdesc_powerpc_altivec64l) - (tdesc_powerpc_cell32l, tdesc_powerpc_cell64l) - (tdesc_powerpc_vsx32l, tdesc_powerpc_vsx64l) - (tdesc_powerpc_isa205_32l, tdesc_powerpc_isa205_64l) - (tdesc_powerpc_isa205_altivec32l, tdesc_powerpc_isa205_altivec64l) - (tdesc_powerpc_isa205_vsx32l, tdesc_powerpc_isa205_vsx64l) - (tdesc_powerpc_e500l): Remove. - * linux-ppc-ipa.c: Include arch/ppc-linux-tdesc.h and - linux-ppc-tdesc-init.h. Don't include linux-ppc-tdesc.h. - * linux-ppc-low.c: Include arch/ppc-linux-common.h, - arch/ppc-linux-tdesc.h, and linux-ppc-tdesc-init.h. Don't include - linux-ppc-tdesc.h. - (ppc_arch_setup): Remove target description matching code. Fill a - ppc_linux_features struct and call ppc_linux_match_description - with it. - -2018-05-22 Maciej W. Rozycki <macro@mips.com> - - * linux-mips-low.c (mips_cannot_fetch_register): Return 1 if the - width of the requested register exceeds the width of the - `ptrace' data type. - (mips_cannot_store_register): Likewise. - -2018-05-21 Maciej W. Rozycki <macro@mips.com> - - * linux-mips-low.c (mips_fetch_register): New function. Update - preceding comment. - (mips_store_gregset): Supply 0 rather than $restart for $zero. - (the_low_target): Wire `mips_fetch_register'. - -2018-05-10 Joel Brobecker <brobecker@adacore.com> - - * lynx-i386-low.c (LYNXOS_178): New macro. - [LYNXOS_178] (usr_fcontext_t): Provide a definition that matches - the layout on LynxOS-178. - (lynx_i386_fill_fpregset, lynx_i386_store_fpregset): Do not - handle floating point registers that are not supported by - LynxOS-178. - -2018-05-10 Tom Tromey <tom@tromey.com> - - * configure: Rebuild. - -2018-05-10 Joel Brobecker <brobecker@adacore.com> - - PR server/23158: - * tdesc.h (init_target_desc) <expedite_regs>: New parameter. - * tdesc.c (init_target_desc) <expedite_regs>: New parameter. - Use it to set the expedite_regs field in the given tdesc. - * x86-tdesc.h: New file. - * linux-aarch64-tdesc.c (aarch64_linux_read_description): - Adjust following the addition of the new expedite_regs parameter - to init_target_desc. - * linux-tic6x-low.c (tic6x_read_description): Likewise. - * linux-x86-tdesc.c: #include "x86-tdesc.h". - (i386_linux_read_description, amd64_linux_read_description): - Adjust following the addition of the new expedite_regs parameter - to init_target_desc. - * lynx-i386-low.c: #include "x86-tdesc.h". - (lynx_i386_arch_setup): Adjust following the addition of the new - expedite_regs parameter to init_target_desc. - * nto-x86-low.c: #include "x86-tdesc.h". - (nto_x86_arch_setup): Adjust following the addition of the new - expedite_regs parameter to init_target_desc. - * win32-i386-low.c: #include "x86-tdesc.h". - (i386_arch_setup): Adjust following the addition of the new - expedite_regs parameter to init_target_desc. - -2018-05-10 Joel Brobecker <brobecker@adacore.com> - - PR server/23158: - * win32-low.c (win32_create_inferior): Add call to my_wait - setting last_status global. - -2018-05-10 Joel Brobecker <brobecker@adacore.com> - - PR server/23158: - * win32-low.c (create_process): Only call gdb_tilde_expand if - inferior_cwd is not NULL. - -2018-05-08 Andrew Burgess <andrew.burgess@embecosm.com> - - * i387-fp.c (i387_cache_to_xsave): Only write x87 control - registers to the cache if their values have changed. - (i387_xsave_to_cache): Provide default values for x87 control - registers when these features are available, but disabled. - * regcache.c (supply_register_by_name_zeroed): New function. - * regcache.h (supply_register_by_name_zeroed): Declare new - function. - -2018-05-07 Tom Tromey <tom@tromey.com> - - * configure: Rebuild. - -2018-05-04 Tom Tromey <tom@tromey.com> - - * configure: Rebuild. - -2018-05-04 Jan Kratochvil <jan.kratochvil@redhat.com> - Pedro Alves <palves@redhat.com> - - * linux-aarch64-low.c (aarch64_stopped_data_address): - Likewise. - -2018-04-27 Tom Tromey <tom@tromey.com> - - * configure: Rebuild. - -2018-04-23 Tom Tromey <tom@tromey.com> - - * configure: Rebuild. - -2018-04-19 Simon Marchi <simon.marchi@ericsson.com> - - * Makefile.in (depcomp): Add "..". - (all_deps_files): New and use it. - -2018-04-18 Alan Hayward <alan.hayward@arm.com> - - * configure.srv (aarch64*-*-linux*): Don't include xml. - (i[34567]86-*-cygwin*): Likewise. - (i[34567]86-*-linux*): Likewise. - (i[34567]86-*-lynxos*): Likewise. - (i[34567]86-*-mingw32ce*): Likewise. - (i[34567]86-*-mingw*): Likewise. - (i[34567]86-*-nto*): Likewise. - (tic6x-*-uclinux): Likewise. - (x86_64-*-linux*): Likewise. - (x86_64-*-mingw*): Likewise. - (x86_64-*-cygwin*): Likewise. - -2018-04-18 Alan Hayward <alan.hayward@arm.com> - - * tdesc.c: Remove xml parameter. - -2018-04-18 Alan Hayward <alan.hayward@arm.com> - - * server.c (get_features_xml): Remove cast. - * tdesc.c (void target_desc::accept): Fill in function. - (tdesc_get_features_xml): Remove old xml creation. - (print_xml_feature::visit_pre): Add xml vistor. - * tdesc.h (struct target_desc): Make xmltarget mutable. - (tdesc_get_features_xml): Remove declaration. - -2018-04-18 Alan Hayward <alan.hayward@arm.com> - - * tdesc.c (tdesc_architecture_name): Add new function. - (tdesc_osabi_name): Likewise. - (tdesc_get_features_xml): Use new functions. - -2018-04-18 Alan Hayward <alan.hayward@arm.com> - - * tdesc.c (tdesc_create_flags): Remove. - (tdesc_add_flag): Likewise. - (tdesc_named_type): Likewise. - (tdesc_create_union): Likewise. - (tdesc_create_struct): Likewise. - (tdesc_create_vector): Likewise. - (tdesc_add_bitfield): Likewise. - (tdesc_add_field): Likewise. - (tdesc_set_struct_size): Likewise. - -2018-04-18 Alan Hayward <alan.hayward@arm.com> - - * tdesc.c (~target_desc): Remove implictly deleted items. - (init_target_desc): Iterate all features. - (tdesc_get_features_xml): Use vector. - (tdesc_create_feature): Create feature. - * tdesc.h (tdesc_feature) Remove - (target_desc): Add features. - -2018-04-18 Alan Hayward <alan.hayward@arm.com> - - * Makefile.in: Add common/tdesc.c - * tdesc.c (init_target_desc): init all reg_defs from register - vector. - (tdesc_create_reg): Create tdesc_reg. - * tdesc.h (tdesc_feature): Add register vector. - -2018-03-30 Simon Marchi <simon.marchi@polymtl.ca> - - * tdesc.h (struct target_desc) <features>: Change type to - std::vector<std::string>. - * tdesc.c (target_desc::~target_desc): Adjust to std::vector - changes. - (tdesc_get_features_xml): Likewise. - (tdesc_create_feature): Likewise. - -2018-03-26 Alan Hayward <alan.hayward@arm.com> - - * regcache.c (find_register_by_number): Return a ref. - (find_regno): Use references. - (register_size): Likewise. - (register_data): Likewise. - * tdesc.c (target_desc::~target_desc): Remove free calls. - (target_desc::operator==): Use std::vector compare. - (init_target_desc): Use reference. - (tdesc_create_reg): Use reg constructors. - * tdesc.h (struct target_desc): Replace pointer with object. - -2018-03-23 Alan Hayward <alan.hayward@arm.com> - - * regcache.c (find_register_by_number): Make static. - (find_regno): Use find_register_by_number - * regcache.h (struct reg): Remove declaration. - -2018-03-23 Alan Hayward <alan.hayward@arm.com> - - * tdesc.c (target_desc::~target_desc): Move to here. - (target_desc::operator==): Likewise. - * tdesc.h (target_desc::~target_desc): Move from here. - (target_desc::operator==): Likewise. - -2018-03-22 Andreas Arnez <arnez@linux.vnet.ibm.com> - - * linux-s390-low.c (s390_get_wordsize): Correct brace style. - -2018-03-21 Andreas Arnez <arnez@linux.vnet.ibm.com> - - * linux-s390-ipa.c (get_ipa_tdesc): Add handling for - S390_TDESC_GS. - * linux-s390-low.c (s390_get_ipa_tdesc_idx): Likewise. - (initialize_low_tracepoint): Call init_registers_s390x_gs_linux64 - and init_registers_s390_gs_linux64. - -2018-03-21 Andreas Arnez <arnez@linux.vnet.ibm.com> - - * linux-s390-low.c (s390_fill_gs): Remove function. - (s390_fill_gsbc): Remove function. - (s390_regsets): Set fill functions for the guarded storage regsets - to NULL. - -2018-03-21 Andreas Arnez <arnez@linux.vnet.ibm.com> - - * linux-s390-low.c (s390_get_hwcap): Replace tdesc parameter by - the word size. Add comment. - (s390_get_wordsize): New function. - (s390_arch_setup): No longer select a temporary tdesc to fetch the - pswm with it. Instead, use s390_get_wordsize to determine the - word size first and derive the correct tdesc from that directly. - -2018-03-16 Simon Marchi <simon.marchi@polymtl.ca> - - * Makefile.in: Include silent-rules.mk. - (srcdir, abs_top_srcdir, abs_srcdir, VPATH): Move up. - (COMPILE): Add ECHO_CXX. - (gdbserver$(EXEEXT)): Add SILENCE and ECHO_CXXLD. - (gdbreplay$(EXEEXT)): Add SILENCE and ECHO_CXXLD. - ($(IPA_LIB)): Add SILENCE and ECHO_CXXLD. - (version-generated.c): Add ECHO_GEN. - (stamp-xml): Add SILENCE and ECHO_GEN_XML_BUILTIN_GENERATED. - (IPAGENT_COMPILE): Add ECHO_CXX. - (%-generated.c): Add ECHO_REGDAT. - -2018-03-14 Tom Tromey <tom@tromey.com> - - PR cli/14977: - * ax.c (ax_printf): Special case for NULL. - -2018-03-08 Simon Marchi <simon.marchi@polymtl.ca> - - * linux-low.c (linux_qxfer_libraries_svr4): Use - xml_escape_text_append. - -2018-03-08 Simon Marchi <simon.marchi@polymtl.ca> - - * linux-low.c (linux_qxfer_libraries_svr4): Use std::string. - -2018-03-02 Simon Marchi <simon.marchi@polymtl.ca> - - * server.c (handle_general_set): Remove unnecessary xstrdup. - -2018-03-02 Simon Marchi <simon.marchi@polymtl.ca> - - * server.c (parse_debug_format_options): Adjust to - delim_string_to_char_ptr_vec changes. - * thread-db.c (thread_db_load_search): Adjust to - dirnames_to_char_ptr_vec changes. - -2018-03-01 Markus Metzger <markus.t.metzger@intel.com> - - * target.h (target_enable_btrace, target_disable_btrace) - (target_read_btrace, target_read_btrace_conf): Turn macro into - inline function. Throw error if target method is not defined. - * server.c (handle_qxfer_btrace handle_qxfer_btrace_conf): Remove - check for btrace target method. Be prepared to handle exceptions - from btrace target methods. - -2018-02-28 Sergio Durigan Junior <sergiodj@redhat.com> - - * server.c (captured_main): Change order of error message printed - when the current working directory cannot be found. - -2018-02-28 Sergio Durigan Junior <sergiodj@redhat.com> - - * server.c: Include "filenames.h" and "pathstuff.h". - (program_name): Delete variable. - (program_path): New anonymous class. - (get_exec_wrapper): Use "program_path" instead of - "program_name". - (handle_v_run): Likewise. - (captured_main): Likewise. - (process_serial_event): Likewise. - -2018-02-28 Sergio Durigan Junior <sergiodj@redhat.com> - - * Makefile.in (SFILES): Add "$(srcdir)/common/pathstuff.c". - (OBJS): Add "pathstuff.o". - * server.c (current_directory): New global variable. - (captured_main): Initialize "current_directory". - -2018-02-26 Alan Hayward <alan.hayward@arm.com> - - * tdesc.c: Use common/tdesc.h. - * tdesc.h: Likewise. - -2018-02-20 Alan Hayward <alan.hayward@arm.com> - Simon Marchi <simon.marchi@ericsson.com> - - * Makefile.in: Switch order of make rules. - -2018-02-19 Alan Hayward <alan.hayward@arm.com> - - * Makefile.in: Add common directory in build. - * configure.ac: Add common reference. - * configure: Regenerate. - -2018-02-09 Markus Metzger <markus.t.metzger@intel.com> - - * linux-low.c (linux_target_ops): Remove linux_supports_btrace. - * nto-low.c (nto_target_ops): Remove NULL for supports_btrace. - * spu-low.c (spu_target_ops): Likewise. - * win32-low.c (win32_target_ops): Likewise. - * server.c (supported_btrace_packets): Report packets unconditionally. - * target.h (target_ops) <supports_btrace>: Remove. - (target_supports_btrace): Remove. - -2018-02-09 Markus Metzger <markus.t.metzger@intel.com> - - * server.c (handle_btrace_enable_bts, handle_btrace_enable_pt) - (handle_btrace_disable): Change return type to void. Use exceptions - to report errors. - (handle_btrace_general_set): Catch exception and copy message to - return message. - -2018-02-08 Tom Tromey <tom@tromey.com> - - * linux-low.c (install_software_single_step_breakpoints): Use - make_scoped_restore. - * inferiors.c (make_cleanup_restore_current_thread): Remove. - (do_restore_current_thread_cleanup): Remove. - * gdbthread.h (make_cleanup_restore_current_thread): Don't - declare. - -2018-02-08 Tom Tromey <tom@tromey.com> - - * mem-break.c (set_raw_breakpoint_at): Use - gdb::unique_xmalloc_ptr. - -2018-01-30 Pedro Alves <palves@redhat.com> - - PR gdb/13211 - * target.c (target_terminal::terminal_state): Rename to ... - (target_terminal::m_terminal_state): ... this. - -2018-01-19 James Clarke <jrtc27@jrtc27.com> - - * linux-low.c (handle_extended_wait): Surround call to - thread_db_notice_clone with #ifdef USE_THREAD_DB. - -2018-01-17 Simon Marchi <simon.marchi@ericsson.com> - - * linux-low.c (attach_proc_task_lwp_callback): Adjust to - linux_ptrace_attach_fail_reason_string now returning an - std::string. - (linux_attach): Likewise. - * thread-db.c (attach_thread): Likewise. - -2018-01-17 Eldar Abusalimov <eldar.abusalimov@jetbrains.com> - - PR gdb/21559 - * configure.ac: Include <sys/types.h> prior to <sys/user.h> when - checking for fs_base/gs_base fields in struct user_regs_struct. - * configure: Regenerate. - -2018-01-16 Yao Qi <yao.qi@linaro.org> - - PR gdb/18749 - * linux-low.c (fetch_register): Call supply_register instead of - error. - -2018-01-08 Yao Qi <yao.qi@linaro.org> - Simon Marchi <simon.marchi@ericsson.com> - - * Makefile.in (OBS): Remove selftest.o. - * configure.ac: Set srv_selftest_objs if $development is true. - (GDBSERVER_DEPFILES): Append $srv_selftest_objs. - * configure: Re-generated. - * server.c (captured_main): Wrap variable selftest_filter with - GDB_SELF_TEST. - -2018-01-07 Simon Marchi <simon.marchi@polymtl.ca> - - * server.c (parse_debug_format_options): Return std::string. - (handle_monitor_command, captured_main): Adjust. - -2018-01-05 Pedro Alves <palves@redhat.com> - - PR gdb/18653 - * server.c (captured_main): Pass quiet=false to - save_original_signals_state. - -2018-01-01 Joel Brobecker <brobecker@adacore.com> - - * gdbreplay.c (gdbreplay_version): Update copyright year in - version message. - * server.c (gdbserver_version): Likewise. - -2017-12-08 Tom Tromey <tom@tromey.com> - - * ax.c (ax_printf): Update. - -2017-12-07 Yao Qi <yao.qi@linaro.org> - - * linux-aarch64-ipa.c (initialize_low_tracepoint): Call - aarch64_linux_read_description. - * linux-amd64-ipa.c (idx2mask): New array. - (get_ipa_tdesc): Move idx2mask out. - (initialize_low_tracepoint): Initialize target descriptions. - * linux-i386-ipa.c (idx2mask): New array. - (get_ipa_tdesc): Move idx2mask out. - (initialize_low_tracepoint): Initialize target descriptions. - -2017-12-05 Simon Marchi <simon.marchi@polymtl.ca> - - * tdesc.c (struct tdesc_type): Change return type. - (tdesc_add_flag): Change parameter type. - (tdesc_add_bitfield): Likewise. - (tdesc_add_field): Likewise. - (tdesc_set_struct_size): Likewise. - -2017-12-05 Simon Marchi <simon.marchi@ericsson.com> - - * regcache.c (registers_to_string): Remove unused variable. - -2017-12-02 Simon Marchi <simon.marchi@polymtl.ca> - - * inferiors.c (for_each_inferior_with_data): Remove. - * inferiors.h (for_each_inferior_with_data): Remove. - * server.c (handle_qxfer_threads_worker): Change parameter type. - (handle_qxfer_threads_proper): Use for_each_thread. - -2017-12-02 Simon Marchi <simon.marchi@polymtl.ca> - - * inferiors.c (for_each_inferior): Remove. - (clear_inferiors): Use for_each_thread. - * inferiors.h (for_each_inferior): Remove. - * linux-low.c (linux_wait_for_event_filtered): Use - for_each_thread. - (linux_stabilize_threads): Likewise. - * regcache.c (regcache_release): Likewise. - * server.c (gdb_wants_all_threads_stopped): Likewise. - (clear_pending_status_callback): Remove. - (handle_status): Use for_each_thread. - (captured_main): Likewise. - * win32-low.c (child_init_thread_list): Likewise. - (win32_clear_inferiors): Likewise. - (fake_breakpoint_event): Likewise. - -2017-12-02 Simon Marchi <simon.marchi@polymtl.ca> - - * inferiors.h (find_inferior): Remove. - * inferiors.c (find_inferior): Remove. - -2017-12-02 Simon Marchi <simon.marchi@polymtl.ca> - - * linux-low.c (resume_status_pending_p): Update comment. - (need_step_over_p): Update comment. - -2017-12-02 Simon Marchi <simon.marchi@polymtl.ca> - - * linux-low.c (proceed_one_lwp): Return void, change parameter - type. - (unsuspend_and_proceed_one_lwp): Likewise. - (proceed_all_lwps): Use for_each_thread. - (unstop_all_lwps): Likewise. - -2017-12-02 Simon Marchi <simon.marchi@polymtl.ca> - - * linux-low.c (linux_resume_one_thread): Return void, take - parameter directly. - (linux_resume): Use for_each_thread. - -2017-12-02 Simon Marchi <simon.marchi@polymtl.ca> - - * linux-low.c (send_sigstop_callback): Return void, change - parameter type. Rename to... - (send_sigstop): ... this. - (suspend_and_send_sigstop_callback): Return void, change parameter - type. Rename to... - (suspend_and_send_sigstop): ... this. - (stop_all_lwps): Use for_each_thread. - -2017-12-02 Simon Marchi <simon.marchi@polymtl.ca> - - * linux-low.c (lwp_running): Return bool, remove unused - argument. - (linux_stabilize_threads): Use find_thread. - -2017-12-02 Simon Marchi <simon.marchi@polymtl.ca> - - * linux-low.c (select_singlestep_lwp_callback): Remove. - (count_events_callback): Remove. - (select_event_lwp_callback): Remove. - (select_event_lwp): Use find_thread/for_each_thread. - -2017-12-02 Simon Marchi <simon.marchi@polymtl.ca> - - * linux-low.c (not_stopped_callback): Return bool, take filter - argument directly. - (linux_wait_for_event_filtered): Use find_thread. - (linux_wait_1): Likewise. - -2017-12-02 Simon Marchi <simon.marchi@polymtl.ca> - - * linux-low.c (same_lwp): Remove. - (find_lwp_pid): Use find_thread. - -2017-12-02 Simon Marchi <simon.marchi@polymtl.ca> - - * linux-low.c (delete_lwp_callback): Remove. - (linux_mourn): Use for_each_thread. - -2017-12-02 Simon Marchi <simon.marchi@polymtl.ca> - - * linux-low.c (linux_detach_lwp_callback): Return void, remove - args parameter, don't check for pid. - (linux_detach): Use for_each_thread. - -2017-12-02 Simon Marchi <simon.marchi@polymtl.ca> - - * linux-low.c (struct counter): Remove. - (second_thread_of_pid_p): Remove. - (last_thread_of_process_p): Use find_thread. - -2017-12-02 Simon Marchi <simon.marchi@polymtl.ca> - - * inferiors.c (find_inferior_in_random): Remove. - * inferiors.h (find_inferior_in_random): Remove. - * linux-low.c (status_pending_p_callback): Return bool, accept - parameter ptid directly. - (linux_wait_for_event_filtered): Use find_thread_in_random. - (linux_wait_1): Likewise. - -2017-12-02 Simon Marchi <simon.marchi@polymtl.ca> - - * inferiors.c (find_inferior_id): Remove. - (find_thread_ptid): Move implemention from find_inferior_id to - here. - * inferiors.h (find_inferior_id): Remove. - * server.c (handle_status): Use find_thread_ptid. - (process_serial_event): Likewise. - * thread-db.c (find_one_thread): Likewise. - (thread_db_thread_handle): Likewise. - * win32-low.c (thread_rec): Likewise. - (child_delete_thread): Likewise. - (win32_thread_alive): Likewise. - (get_child_debug_event): Likewise. - -2017-12-02 Simon Marchi <simon.marchi@polymtl.ca> - - * linux-mips-low.c (update_watch_registers_callback): Return - void, remove pid_p parameter, don't check for pid. - (mips_insert_point, mips_remove_point): Use for_each_thread. - -2017-12-02 Simon Marchi <simon.marchi@polymtl.ca> - - * lynx.low (lynx_delete_thread_callback): Remove. - (lynx_mourn): Use for_each_thread. - -2017-12-02 Simon Marchi <simon.marchi@polymtl.ca> - - * regcache.c (regcache_invalidate_one): Remove. - (regcache_invalidate_pid): use for_each_thread. - -2017-11-26 Tom Tromey <tom@tromey.com> - - * linux-low.c (linux_create_inferior): Update. - -2017-11-24 Ulrich Weigand <uweigand@de.ibm.com> - - * spu-low.c (spu_create_inferior): Fix typo in argument name. - -2017-11-24 Alan Hayward <alan.hayward@arm.com> - - * configure.srv: Add linux-aarch64-tdesc-selftest.o. - * linux-aarch64-low.c (initialize_low_arch): Call init func. - * linux-aarch64-tdesc-selftest.c: New file. - * linux-aarch64-tdesc.h (initialize_low_tdesc): New declaration. - -2017-11-24 Alan Hayward <alan.hayward@arm.com> - - * configure.srv: Add new file. - * linux-aarch64-low.c (initialize_low_arch): Call init func. - * linux-aarch64-tdesc-selftest.c: New file. - * linux-aarch64-tdesc.h (initialize_low_tdesc): New declaration. - -2017-11-24 Alan Hayward <alan.hayward@arm.com> - - * linux-aarch64-ipa.c (initialize_low_tracepoint): Remove init. - * linux-aarch64-low.c (initialize_low_arch): Remove init. - * linux-aarch64-tdesc.c (aarch64_linux_read_description): Add init. - -2017-11-24 Alan Hayward <alan.hayward@arm.com> - - * configure.srv: Add new files. - * linux-aarch64-ipa.c (get_ipa_tdesc): Call - aarch64_linux_read_description. - * linux-aarch64-low.c (aarch64_linux_read_description): - Merge with aarch64_arch_setup. - (aarch64_arch_setup): Call aarch64_linux_read_description. - * linux-aarch64-tdesc.c: New file. - * linux-aarch64-tdesc.h: New file. - -2017-11-24 Yao Qi <yao.qi@linaro.org> - - * configure.srv: Set $srv_regobj for tic6x-linux. - * linux-tic6x-low.c: Include "arch/tic6x.h" and "tdesc.h". - (tic6x_read_description): Move some code to tic6x_arch_setup. - (tic6x_tdesc_test): New function. - (initialize_low_arch): Call selftests::register_test. - -2017-11-22 Yao Qi <yao.qi@linaro.org> - - * remote-utils.c (prepare_resume_reply): Use memcpy. - -2017-11-19 Simon Marchi <simon.marchi@ericsson.com> - - * linux-low.c (kill_one_lwp_callback): Return void, take - argument directly, don't filter on pid. - (linux_kill): Use for_each_thread. - -2017-11-19 Simon Marchi <simon.marchi@ericsson.com> - - * linux-low.c (need_step_over_p): Return bool, remove dummy - argument. - (linux_resume, proceed_all_lwps): Use find_thread. - -2017-11-19 Simon Marchi <simon.marchi@ericsson.com> - - * linux-low.c (resume_status_pending_p): Return bool, remove - flag_p argument. - (linux_resume): Use find_thread. - -2017-11-19 Simon Marchi <simon.marchi@ericsson.com> - - * linux-low.c (struct thread_resume_array): Remove. - (linux_set_resume_request): Return void, take arguments - directly. - (linux_resume): Use for_each_thread. - -2017-11-19 Simon Marchi <simon.marchi@ericsson.com> - - * linux-low.c (stuck_in_jump_pad_callback): Change prototype, - return bool, remove data argument. - (linux_stabilize_threads): Use find_thread. - -2017-11-19 Simon Marchi <simon.marchi@ericsson.com> - - * linux-low.c (unsuspend_one_lwp): Remove. - (unsuspend_all_lwps): Use for_each_thread, inline code from - unsuspend_one_lwp. - -2017-11-19 Simon Marchi <simon.marchi@ericsson.com> - - * gdbthread.h (find_thread): Add overload with ptid_t filter. - * linux-low.c (struct iterate_over_lwps_args): Remove. - (iterate_over_lwps_filter): Remove. - (iterate_over_lwps): Use find_thread. - -2017-11-19 Simon Marchi <simon.marchi@ericsson.com> - - * linux-low.c (reset_lwp_ptrace_options_callback): Remove. - (linux_handle_new_gdb_connection): Use for_each_thread, inline - code from reset_lwp_ptrace_options_callback. - -2017-11-19 Simon Marchi <simon.marchi@ericsson.com> - - * linux-arm-low.c (struct update_registers_data): Remove. - (update_registers_callback): Return void, take arguments - directly, don't check thread's pid. - (arm_insert_point, arm_remove_point): Use for_each_thread. - -2017-11-19 Simon Marchi <simon.marchi@ericsson.com> - - * win32-low.c (continue_one_thread): Return void, take argument - directly. - (child_continue): Use for_each_thread. - -2017-11-19 Simon Marchi <simon.marchi@ericsson.com> - - * win32-i386-low.c (update_debug_registers_callback): Rename - to ... - (update_debug_registers): ... this, return void, remove pid_p arg. - (x86_dr_low_set_addr, x86_dr_low_set_control): Use for_each_thread. - -2017-11-17 Simon Marchi <simon.marchi@polymtl.ca> - - * inferiors.h (struct process_info): Add constructor, initialize - fields.. - <syscalls_to_catch>: Change type to std::vector<int>. - * inferiors.c (add_process): Allocate process_info with new. - (remove_process): Free process_info with delete. - * linux-low.c (handle_extended_wait): Adjust. - (gdb_catching_syscalls_p, gdb_catch_this_syscall_p): Adjust. - * server.c (handle_general_set): Adjust. - -2017-11-16 Pedro Alves <palves@redhat.com> - - * remote-utils.c (remote_close): Block SIGIO signals instead of - uninstalling the SIGIO handler. - -2017-11-16 Alan Hayward <alan.hayward@arm.com> - - * tdesc.c (tdesc_get_features_xml): Allow null osabi. - -2017-11-16 Yao Qi <yao.qi@linaro.org> - - * linux-tic6x-low.c (tic6x_fill_gregset): Cast buf. - (tic6x_store_gregset): Likewise. - (tic6x_usrregs_info): Move it up. - -2017-11-15 Alan Hayward <alan.hayward@arm.com> - - * Makefile.in: Update arch rules. - * configure.srv: Explicitly mark arch/ files. - -2017-11-13 Andreas Schwab <schwab@suse.de> - - * linux-m68k-low.c (m68k_supports_hardware_single_step): New - function. - (struct linux_target_ops) <supports_hardware_single_step>: Initialize. - -2017-11-06 Pedro Alves <palves@redhat.com> - - * config.in, configure: Regenerate. - -2017-10-27 Simon Marchi <simon.marchi@ericsson.com> - - * target.c (struct thread_search): Remove. - (thread_search_callback): Remove. - (prepare_to_access_memory): Use for_each_thread instead of - find_inferior. Inline code from thread_search_callback. - -2017-10-27 Simon Marchi <simon.marchi@ericsson.com> - - * server.c (struct visit_actioned_threads_data): Remove. - (visit_actioned_threads): Change prototype to take arguments - directly. - (resume): Use find_thread instead of find_inferior. - -2017-10-27 Simon Marchi <simon.marchi@ericsson.com> - - * server.c (queue_stop_reply_callback): Change prototype, return - void. - (find_status_pending_thread_callback): Remove. - (handle_status): Replace find_inferior with find_thread and - for_each_thread. - -2017-10-25 Alan Hayward <alan.hayward@arm.com> - - * linux-aarch64-low.c (aarch64_fill_gregset): Replace defines - with REGNO. - (aarch64_store_gregset): Likewise. - (aarch64_fill_fpregset): Likewise. - (aarch64_store_fpregset): Likewise. - -2017-10-21 Simon Marchi <simon.marchi@ericsson.com> - - * gdbthread.h (find_thread, for_each_thread): New functions. - * inferiors.c (thread_of_pid): Remove. - (find_any_thread_of_pid): Use find_thread. - * linux-low.c (num_lwps): Use for_each_thread. - -2017-10-17 Yao Qi <yao.qi@linaro.org> - - * Makefile.in: Remove one rule. - * configure.srv: Rename aarch64-insn.o with arch/aarch64-insn.o. - -2017-10-17 Yao Qi <yao.qi@linaro.org> - - * configure.srv: Rename arm-linux.o with arch/arm-linux.o. - Rename arm-get-next-pcs.o with arch/arm-get-next-pcs.o. - -2017-10-17 Yao Qi <yao.qi@linaro.org> - - * configure.srv: Rename arm.o with arch/arm.o. - -2017-10-17 Yao Qi <yao.qi@linaro.org> - - * Makefile.in (CONFIG_SRC_SUBDIR): New variable. - (clean): Remove .o files in CONFIG_SRC_SUBDIR. - (distclean): Remove DEPDIR in CONFIG_SRC_SUBDIR. - (arch-i386.o, arch-amd64.o): Remove rules. - (arch/%.o): New rule. - Update POSTCOMPILE and COMPILE.pre. - * configure.ac: Invoke AC_CONFIG_COMMANDS. - * configure: Re-generated. - * configure.srv: Replace arch-i386.o with arch/i386.o. - Replace arch-amd64.o with arch/amd64.o. - -2017-10-16 Yao Qi <yao.qi@linaro.org> - - * configure: Regenerated. - -2017-10-14 Simon Marchi <simon.marchi@polymtl.ca> - - * inferiors.h: (struct inferior_list): Remove. - (struct inferior_list_entry); Remove. - (add_inferior_to_list, clear_inferior_list, one_inferior_p, - A_I_NEXT, ALL_INFERIORS_TYPE, ALL_INFERIORS, remove_inferior, - get_first_inferior): Remove. - (for_each_inferior, for_each_inferior_with_data, find_inferior, - find_inferior_id, find_inferior_in_random): Change signature. - * inferiors.c (all_threads): Change type to - std::list<thread_info *>. - (get_thread): Remove macro. - (find_inferior, find_inferior_id): Change signature, implement - using find_thread. - (find_inferior_in_random): Change signature, implement using - find_thread_in_random. - (for_each_inferior, for_each_inferior_with_data): Change - signature, implement using for_each_thread. - (add_inferior_to_list, remove_inferior): Remove. - (add_thread, get_first_thread, thread_of_pid, - find_any_thread_of_pid, free_one_thread, remove_thread): Update. - (get_first_inferior, one_inferior_p, clear_inferior_list): - Remove. - (clear_inferiors, get_thread_process): Update. - * gdbthread.h: Include <list>. - (struct thread_info) <entry>: Remove field. - <id>: New field. - (all_threads): Change type to std::list<thread_info *>. - (get_first_inferior): Add doc. - (find_thread, for_each_thread, find_thread_in_random): New - functions. - (current_ptid, pid_of, ptid_of, lwpid_of): Update. - * linux-arm-low.c (update_registers_callback): Update. - * linux-low.c (second_thread_of_pid_p): Update. - (kill_one_lwp_callback, linux_detach_lwp_callback, - delete_lwp_callback, status_pending_p_callback, same_lwp, - find_lwp_pid, num_lwps, iterate_over_lwps_filter, - iterate_over_lwps, not_stopped_callback, - resume_stopped_resumed_lwps, count_events_callback, - select_singlestep_lwp_callback, select_event_lwp_callback, - unsuspend_one_lwp, linux_wait_1, send_sigstop_callback, - suspend_and_send_sigstop_callback, wait_for_sigstop, - stuck_in_jump_pad_callback, move_out_of_jump_pad_callback, - lwp_running, linux_set_resume_request, resume_status_pending_p, - need_step_over_p, start_step_over, linux_resume_one_thread, - proceed_one_lwp, unsuspend_and_proceed_one_lwp, - reset_lwp_ptrace_options_callback): Update. - * linux-mips-low.c (update_watch_registers_callback): Update. - * regcache.c (regcache_invalidate_one, regcache_invalidate): - Update. - (free_register_cache_thread_one): Remove. - (regcache_release): Update. - * server.c (handle_btrace_enable_bts, handle_btrace_enable_pt, - handle_qxfer_threads_worker): Update. - (handle_query): Update, use list iterator. - (visit_actioned_threads, handle_pending_status, - queue_stop_reply_callback, gdb_wants_all_threads_stopped, - clear_pending_status_callback, set_pending_status_callback, - find_status_pending_thread_callback, handle_status, - process_serial_event): Update. - * target.c (thread_search_callback): Update. - * thread-db.c (thread_db_get_tls_address): Update. - * tracepoint.c (tracepoint_finished_step, tracepoint_was_hit): - Update. - * win32-i386-low.c (update_debug_registers_callback): Update. - * win32-low.c (delete_thread_info, child_delete_thread, - continue_one_thread, suspend_one_thread, - get_child_debug_event): Adjust. - -2017-10-14 Simon Marchi <simon.marchi@polymtl.ca> - - * gdbthread.h (ptid_of, pid_of, lwpid_of): New functions. - * inferiors.h: Include <list>. - (struct process_info) <entry>: Remove field. - <pid>: New field. - (pid_of): Change macro to function. - (ptid_of, lwpid_of): Remove macro. - (all_processes): Change type to std::list<process_info *>. - (ALL_PROCESSES): Remove macro. - (for_each_process, find_process): New function. - * inferiors.c (all_processes): Change type to - std::list<process_info *>. - (find_thread_process): Adjust. - (add_process): Likewise. - (remove_process): Likewise. - (find_process_pid): Likewise. - (get_first_process): Likewise. - (started_inferior_callback): Remove. - (have_started_inferiors_p): Adjust. - (attached_inferior_callback): Remove. - (have_attached_inferiors_p): Adjust. - * linux-low.c (check_zombie_leaders): Likewise. - * linux-x86-low.c (x86_arch_setup_process_callback): Remove. - (x86_linux_update_xmltarget): Adjust. - * server.c (handle_query): Likewise. - (gdb_reattached_process): Remove. - (handle_status): Adjust. - (kill_inferior_callback): Likewise. - (detach_or_kill_inferior): Remove. - (print_started_pid): Likewise. - (print_attached_pid): Likewise. - (detach_or_kill_for_exit): Update. - (process_serial_event): Likewise. - * linux-arm-low.c (arm_new_fork): Likewise. - -2017-10-14 Simon Marchi <simon.marchi@polymtl.ca> - - * dll.h: Include <list>. - (struct dll_info): Add constructor. - <entry>: Remove field. - (all_dlls): Change type to std::list<dll_info>. - * dll.c: Include <algorithm>. - (get_dll): Remove macro. - (all_dlls): Change type to std::list<dll_info *>. - (free_one_dll): Remove. - (match_dll): Likewise. - (loaded_dll): Adjust. - (unloaded_dll): Adjust to all_dlls type change, use - std::find_if. Inline code from match_dll. - (clear_dlls): Adjust to all_dlls type change. - * server.c (emit_dll_description): Remove. - (handle_qxfer_libraries): Adjust to all_dlls type change, - integrate emit_dll_description's functionality. - -2017-10-12 Simon Marchi <simon.marchi@ericsson.com> - - * linux-low.h (struct linux_target_ops) <delete_process>: New - field. - * linux-low.c (linux_mourn): Call the_low_target.delete_process. - * linux-aarch64-low.c (aarch64_linux_delete_process): New. - (struct linux_target_ops): Add delete_process callback. - * linux-arm-low.c (arm_delete_process): New. - (struct linux_target_ops): Add delete_process callback. - * linux-bfin-low.c (struct linux_target_ops): Likewise. - * linux-crisv32-low.c (struct linux_target_ops): Likewise. - * linux-m32r-low.c (struct linux_target_ops): Likewise. - * linux-mips-low.c (mips_linux_delete_process): New. - (struct linux_target_ops): Add delete_process callback. - * linux-ppc-low.c (struct linux_target_ops): Likewise. - * linux-s390-low.c (struct linux_target_ops): Likewise. - * linux-sh-low.c (struct linux_target_ops): Likewise. - * linux-tic6x-low.c (struct linux_target_ops): Likewise. - * linux-tile-low.c (struct linux_target_ops): Likewise. - * linux-x86-low.c (x86_linux_delete_process): New. - (struct linux_target_ops): Add delete_process callback. - * linux-xtensa-low.c (struct linux_target_ops): Likewise. - -2017-10-12 Simon Marchi <simon.marchi@ericsson.com> - - * linux-aarch64-low.c (the_low_target): Add thread delete - callback. - * linux-arm-low.c (arm_delete_thread): New function. - (the_low_target): Add thread delete callback. - * linux-bfin-low.c (the_low_target): Likewise. - * linux-crisv32-low.c (the_low_target): Likewise. - * linux-low.c (delete_lwp): Invoke delete_thread callback if - set. - * linux-low.h (struct linux_target_ops) <delete_thread>: New - field. - * linux-m32r-low.c (the_low_target): Add thread delete callback. - * linux-mips-low.c (mips_linux_delete_thread): New function. - (the_low_target): Add thread delete callback. - * linux-ppc-low.c (the_low_target): Likewise. - * linux-s390-low.c (the_low_target): Likewise. - * linux-sh-low.c (the_low_target): Likewise. - * linux-tic6x-low.c (the_low_target): Likewise. - * linux-tile-low.c (the_low_target): Likewise. - * linux-x86-low.c (the_low_target): Likewise. - * linux-xtensa-low.c (the_low_target): Likewise. - -2017-10-06 Yuanhui Zhang <asmwarrior@gmail.com> - - * win32-low.c: Include "common-inferior.h". - -2017-10-04 Sergio Durigan Junior <sergiodj@redhat.com> - - * inferiors.c (set_inferior_cwd): New function. - * server.c (handle_general_set): Handle QSetWorkingDir packet. - (handle_query): Inform that QSetWorkingDir is supported. - * win32-low.c (create_process): Pass the inferior's cwd to - CreateProcess. - -2017-10-04 Sergio Durigan Junior <sergiodj@redhat.com> - - * inferiors.c (current_inferior_cwd): New global variable. - (get_inferior_cwd): New function. - * inferiors.h (struct process_info) <cwd>: New field. - -2017-10-04 Sergio Durigan Junior <sergiodj@redhat.com> - - * Makefile.in (SFILES): Add $(srcdir)/common/gdb_tilde_expand.c. - (OBS): Add gdb_tilde_expand.o. - -2017-10-02 Simon Marchi <simon.marchi@ericsson.com> - - * lynx-i386-low.c (lynx_i386_arch_setup): Call init_target_desc. - * nto-x86-low.c (nto_x86_arch_setup): Likewise. - -2017-09-29 Pedro Alves <palves@redhat.com> - - * ax.c (gdb_parse_agent_expr): Constify. - * ax.h (gdb_parse_agent_expr): Constify. - * mem-break.c (add_breakpoint_condition, add_breakpoint_commands): - Constify. - * mem-break.h (add_breakpoint_condition, add_breakpoint_commands): Constify. - * remote-utils.c (hex_or_minus_one, read_ptid): Constify. - * remote-utils.h (read_ptid): Constify. - * server.c (handle_qxfer_exec_file, handle_query, handle_v_cont) - (process_point_options, process_serial_event): Constify. - * tracepoint.c (add_tracepoint_action, cmd_qtdp, cmd_qtdpsrc) - (cmd_qtdv, cmd_qtenable_disable, cmd_qtro, cmd_qtframe, cmd_qtp) - (cmd_qtbuffer): Constify. - -2017-09-29 Pedro Alves <palves@redhat.com> - - * proc-service.c (ps_pdread): Return PS_ERR if reading memory - fails. - -2017-09-29 Pedro Alves <palves@redhat.com> - - * linux-low.c (handle_extended_wait): Pass parent thread instead - of process to thread_db_notice_clone. - * linux-low.h (thread_db_notice_clone): Replace parent process - parameter with parent thread parameter. - * thread-db.c (find_one_thread): Add comment. - (thread_db_notice_clone): Replace parent process parameter with - parent thread parameter. Temporarily switch to the parent thread. - -2017-09-26 Sergio Durigan Junior <sergiodj@redhat.com> - - * gdbthread.h: Include "common-gdbthread.h". - * inferiors.c (switch_to_thread): Use "gdb_assert" instead of - "if" when validating the ptid. - * remote-utils.c: Include "gdbthread.h". - (prepare_resume_reply): Use "switch_to_thread". - * target.c (done_accessing_memory): Likewise. - -2017-09-25 Andreas Arnez <arnez@linux.vnet.ibm.com> - - * configure.srv (s390*-*-linux*): Add s390-gs-linux64.o and - s390x-gs-linux64.o to srv_regobj. Add s390-gs-linux64.xml, - s390x-gs-linux64.xml, s390-gs.xml, and s390-gsbc.xml to - srv_xmlfiles. Add s390-gs-linux64-ipa.o and - s390x-gs-linux64-ipa.o to ipa_obj. - * linux-s390-low.c (HWCAP_S390_GS): New define. - (s390_fill_gs, s390_store_gs, s390_fill_gsbc, s390_store_gsbc): - New functions. - (s390_regsets): Add regsets for NT_S390_GS_CB and NT_S390_GS_BC. - (s390_arch_setup): Check for guarded-storage support and choose - appropriate tdesc. - (initialize_low_arch): Invoke init_registers_s390_gs_linux64 and - init_registers_s390x_gs_linux64. - * linux-s390-tdesc.h (enum s390_linux_tdesc) <S390_TDESC_GS>: New - enum value. - (init_registers_s390x_gs_linux64, tdesc_s390x_gs_linux64) - (init_registers_s390_gs_linux64, tdesc_s390_gs_linux64): Declare. - -2017-09-22 Simon Marchi <simon.marchi@ericsson.com> - - * win32-i386-low.c (i386_arch_setup): Call init_target_desc. - -2017-09-21 Kevin Buettner <kevinb@redhat.com> - - * linux-low.h (struct lwp_info): Add new field, thread_handle. - (thread_db_thread_handle): Declare. - * linux-low.c (linux_target_ops): Initialize thread_handle. - * server.c (handle_qxfer_threads_worker): Add support for - "handle" attribute. - * target.h (struct target_ops): Add new function pointer, - thread_handle. - (target_thread_handle): Define. - * thread-db.c (find_one_thread, attach_thread): Set thread_handle - field in lwp. - (thread_db_thread_handle): New function. - -2017-09-21 Kevin Buettner <kevinb@redhat.com> - - * linux-low.c (handle_extended_wait): Call thread_db_notice_clone(). - * linux-low.h (thread_db_notice_clone): Declare. - * thread-db.c (thread_db_notice_clone): New function. - -2017-09-21 Pedro Alves <palves@redhat.com> - - * server.c (gdb_read_memory, handle_status, process_serial_event) - (handle_serial_event, handle_target_event): Adjust to - set_desired_thread prototype change. - * target.c (set_desired_thread): Remove 'use_general' parameter - and adjust. - * target.h (set_desired_thread): Remove 'use_general' parameter. - -2017-09-20 Tom Tromey <tom@tromey.com> - - * target.c (target_terminal::terminal_state): Define. - (target_terminal::init): Rename from target_terminal_init. - (target_terminal::inferior): Rename from - target_terminal_inferior. - (target_terminal::ours): Rename from target_terminal_ours. - (target_terminal::ours_for_output, target_terminal::info): New. - -2017-09-16 Simon Marchi <simon.marchi@ericsson.com> - - * server.c (accumulate_file_name_length): Remove. - (emit_dll_description): Adjust to std::string change. - (handle_qxfer_libraries): Use std::string to hold document. - -2017-09-16 Simon Marchi <simon.marchi@ericsson.com> - - * linux-low.c (linux_qxfer_libraries_svr4): Adjust to change of - return type of xml_escape_text. - * server.c (emit_dll_description): Likewise. - -2017-09-16 Simon Marchi <simon.marchi@ericsson.com> - - * server.c (captured_main): Accept argument for --selftest. - Update run_tests call. - * linux-x86-tdesc-selftest.c (initialize_low_tdesc): Add names - when registering selftests. - -2017-09-16 Sergio Durigan Junior <sergiodj@redhat.com> - - * regcache.c (get_thread_regcache): Update code to use "std::vector" - instead of "VEC" for "target_desc.reg_defs". - (regcache_cpy): Likewise. - (registers_to_string): Likewise. - (registers_from_string): Likewise. - (find_regno): Likewise. - (supply_regblock): Likewise. - (regcache_raw_read_unsigned): Likewise. - * tdesc.c (init_target_desc): Likewise. - (tdesc_create_reg): Likewise. - * tdesc.h: Remove declaration of "tdesc_reg_p". Include <vector>. - (struct target_desc) <reg_defs>: Convert to "std::vector". - (target_desc): Do not initialize "reg_defs". - (~target_desc): Update code to use "std::vector" instead of "VEC" - for "target_desc.reg_defs". - (operator==): Likewise. - -2017-09-15 Simon Marchi <simon.marchi@ericsson.com> - - * inferiors.h (thread_to_gdb_id): Remove. - * inferiors.c (thread_to_gdb_id): Remove. - * server.c (handle_qxfer_threads_worker, handle_query): Adjust. - * lynx-low.c (lynx_resume, lynx_wait_1, lynx_fetch_registers, - lynx_store_registers, lynx_read_memory, lynx_write_memory): - Likewise. - * nto-low.c (nto_fetch_registers, nto_store_registers, - nto_stopped_by_watchpoint, nto_stopped_data_address): Likewise. - -2017-09-15 Simon Marchi <simon.marchi@ericsson.com> - - * inferiors.h (gdb_id_to_thread_id): Remove. - * inferiors.c (gdb_id_to_thread_id): Remove. - * server.c (process_serial_event): Adjust to gdb_id_to_thread_id - removal. Move pid declaration closer to where it's used. - -2017-09-15 Simon Marchi <simon.marchi@ericsson.com> - - * server.c (handle_detach): New function. - (process_serial_event): Move code out, call handle_detach. - -2017-09-15 Simon Marchi <simon.marchi@ericsson.com> - - * server.c (require_running): Rename to ... - (require_running_or_return): ... this ... - (require_running_or_break): ... and this. - (handle_query, process_serial_event): Adjust. - -2017-09-15 Simon Marchi <simon.marchi@ericsson.com> - - * linux-low.c (linux_set_resume_request): Remove unused - variables. - -2017-09-15 Simon Marchi <simon.marchi@ericsson.com> - - * server.c (first_thread_of): Remove. - (process_serial_event): Replace usage of first_thread_of with - find_any_thread_of_pid. - * tracepoint.c (same_process_p): Remove. - (gdb_agent_about_to_close): Replace usage of same_process_p with - find_any_thread_of_pid. - * linux-x86-low.c (same_process_callback): Remove. - (x86_arch_setup_process_callback): Replace usage of - same_process_callback with find_any_thread_of_pid. - * thread-db.c (any_thread_of): Remove. - (switch_to_process): Replace usage of any_thread_of with - find_any_thread_of_pid. - * inferiors.c (thread_pid_matches_callback): Remove. - (find_thread_process): Adjust to use find_any_thread_of_pid. - -2017-09-10 Sergio Durigan Junior <sergiodj@redhat.com> - - * regcache.c (get_thread_regcache): Guard calls to "memset" - with "!VEC_empty". - -2017-09-10 Sergio Durigan Junior <sergiodj@redhat.com> - - * linux-low.c (handle_extended_wait): Use - "allocate_target_description" instead of "XNEW". - * linux-x86-low.c (initialize_low_arch): Likewise. - -2017-09-05 Yao Qi <yao.qi@linaro.org> - - * configure.srv (srv_i386_regobj): Remove. - (srv_amd64_regobj): Remove. - (srv_regobj): Set it to "" for x86 non-linux targets. - * linux-x86-tdesc.c (i386_linux_read_description): - * lynx-i386-low.c: Include x86-xstate.h and arch/i386.h. - (init_registers_i386): Remove the declaration. - (tdesc_i386): Remove the declaration. - (lynx_i386_arch_setup): Call i386_create_target_description. - * nto-x86-low.c: Likewise. - * win32-i386-low.c [__x86_64__]: include arch/amd64.h. - [!__x86_64__]: include arch/i386.h. - (i386_arch_setup) [__x86_64__]: Call amd64_create_target_description. - -2017-09-05 Yao Qi <yao.qi@linaro.org> - - * configure.srv (srv_amd64_linux_xmlfiles): Remove - i386/amd64-XXX-linux from it. - -2017-09-05 Yao Qi <yao.qi@linaro.org> - - * configure.srv: Empty srv_amd64_linux_regobj if $development is - false. - (ipa_amd64_linux_regobj): Remove. - (ipa_x32_linux_regobj): Remove. - -2017-09-05 Yao Qi <yao.qi@linaro.org> - - * Makefile.in (arch-amd64.o): New rule. - * configure.srv: Append arch-amd64.o. - * linux-amd64-ipa.c: Include common/x86-xstate.h. - (get_ipa_tdesc): Call amd64_linux_read_description. - (initialize_low_tracepoint): Don't call init_registers_x32_XXX - and init_registers_amd64_XXX. - * linux-x86-low.c (x86_linux_read_description): Call - amd64_linux_read_description. - (x86_get_ipa_tdesc_idx): Call amd64_get_ipa_tdesc_idx. - (initialize_low_arch): Don't call init_registers_x32_XXX and - init_registers_amd64_XXX. - * linux-x86-tdesc-selftest.c: Declare init_registers_amd64_XXX - and tdesc_amd64_XXX. - [__x86_64__] (amd64_tdesc_test): New function. - (initialize_low_tdesc) [__x86_64__]: Call init_registers_x32_XXX - and init_registers_amd64_XXX. - * linux-x86-tdesc.c: Include arch/amd64.h. - (xcr0_to_tdesc_idx): New function. - (i386_linux_read_description): New function. - (amd64_get_ipa_tdesc_idx): New function. - * linux-x86-tdesc.h (amd64_get_ipa_tdesc_idx): Declare. - (amd64_get_ipa_tdesc): Declare. - -2017-09-05 Yao Qi <yao.qi@linaro.org> - - * configure.srv (srv_i386_linux_xmlfiles): Remove - i386/i386-XXX-linux.xml from it. - -2017-09-05 Yao Qi <yao.qi@linaro.org> - - * configure.srv: Set srv_i386_linux_regobj empty if $development - is false. - * linux-i386-ipa.c (initialize_low_tracepoint): Don't call - initialize_low_tdesc. - * linux-x86-low.c (initialize_low_arch): Wrap initialize_low_tdesc - with #if initialize_low_tdesc. - * linux-x86-tdesc-selftest.c: New file. - * linux-x86-tdesc.c: Move code to linux-x86-tdesc-selftest.c. - -2017-09-05 Yao Qi <yao.qi@linaro.org> - - * Makefile.in (arch-i386.o): New rule. - * configure.srv (i[34567]86-*-linux*): Add arch-i386.o. - (x86_64-*-linux*): Likewise. - * linux-x86-tdesc.c: Don't include ../features/i386/32bit-XXX.c, - include arch/i386.h. - (i386_linux_read_description): Remove code and call - i386_create_target_description. - * tdesc.c (allocate_target_description): New function. - * tdesc.h (set_tdesc_architecture): Remove declaration. - (set_tdesc_osabi): Likewise. - -2017-09-05 Yao Qi <yao.qi@linaro.org> - - * linux-x86-tdesc.c: Don't include <inttypes.h>. - (i386_linux_read_description) [!IN_PROCESS_AGENT]: Call - set_tdesc_architecture and set_tdesc_osabi. Remove code setting - .xmltarget. - * server.c (get_features_xml): Call tdesc_get_features_xml. - * tdesc.c (set_tdesc_architecture): New function. - (set_tdesc_osabi): New function. - (tdesc_get_features_xml): New function. - (tdesc_create_feature): Add an argument. - * tdesc.h (struct target_desc) <features>: New field. - <arch, osabi>: New field. - (~target_desc): xfree features, arch, and osabi. - (target_desc::oerator==): Don't compare .xmltarget. - [!IN_PROCESS_AGENT] (set_tdesc_architecture): Declare. - (set_tdesc_osabi): Likewise. - (tdesc_get_features_xml): Likewise. - -2017-09-05 Yao Qi <yao.qi@linaro.org> - - * linux-x86-tdesc.c: Include selftest.h. - (i386_tdesc_test): New function. - (initialize_low_tdesc): Call selftests::register_test. - * tdesc.h: Include regdef.h. - (target_desc): Override operator == and !=. - -2017-09-05 Yao Qi <yao.qi@linaro.org> - - * configure.srv (srv_tgtobj): Append linux-x86-tdesc.o. - (ipa_obj): Likewise. - * linux-i386-ipa.c: Include common/x86-xstate.h - (get_ipa_tdesc): Call i386_linux_read_description. - (initialize_low_tracepoint): Don't call init_registers_XXX - functions, call initialize_low_tdesc instead. - * linux-x86-low.c (x86_linux_read_description): Call - i386_linux_read_description. - (initialize_low_arch): Don't call init_registers_i386_XXX - functions, call initialize_low_tdesc. - * linux-x86-tdesc.c: New file. - * linux-x86-tdesc.h (x86_linux_tdesc): New X86_TDESC_LAST. - (i386_get_ipa_tdesc_idx): Declare. - (i386_get_ipa_tdesc): Declare. - (initialize_low_tdesc): Declare. - -2017-09-05 Yao Qi <yao.qi@linaro.org> - - * linux-x86-low.c (x86_get_ipa_tdesc_idx): Use X86_TDESC_MMX - instead of 0. - -2017-09-05 Yao Qi <yao.qi@linaro.org> - - * Makefile.in (IPA_OBJS): Add vec-ipa.o - * regcache.c (get_thread_regcache): Use VEC_length. - (init_register_cache): Likewise. - (regcache_cpy): Likewise. - (registers_to_string): Iterate reg_defs via VEC_iterate. - (find_regno): Likewise. - (find_register_by_number): Use VEC_index. - (register_size): Call find_register_by_number. - (register_data): Call find_register_by_number. - (supply_regblock): Use VEC_length. - (regcache_raw_read_unsigned): Likewise. - * tdesc.c (init_target_desc): Iterate reg_defs via - VEC_iterate. - (default_description): Update initializer. - (copy_target_description): Don't update field num_registers. - * tdesc.h (struct target_desc) <reg_defs>: Change it to VEC. - <num_registers>: Remove. - -2017-09-04 Simon Marchi <simon.marchi@ericsson.com> - - * Makefile.in (.SECONDARY): Define target. - -2017-09-03 Simon Marchi <simon.marchi@ericsson.com> - - * linux-low.c (linux_wait_1): Adjust. - * server.c (queue_stop_reply_callback): Adjust. - -2017-08-31 Sergio Durigan Junior <sergiodj@redhat.com> - - * server.c (handle_general_set): Handle QEnvironmentHexEncoded, - QEnvironmentUnset and QEnvironmentReset packets. - (handle_query): Inform remote that QEnvironmentHexEncoded, - QEnvironmentUnset and QEnvironmentReset are supported. - -2017-08-25 Simon Marchi <simon.marchi@ericsson.com> - - * inferiors.h (inferior_target_data): Rename to ... - (thread_target_data): ... this. - (inferior_regcache_data): Rename to ... - (thread_regcache_data): ... this. - (set_inferior_regcache_data): Rename to ... - (set_thread_regcache_data): ... this. - * inferiors.c (inferior_target_data): Rename to ... - (thread_target_data): ... this. - (inferior_regcache_data): Rename to ... - (thread_regcache_data): ... this. - (set_inferior_regcache_data): Rename to ... - (set_thread_regcache_data): ... this. - (free_one_thread): Update. - * linux-low.h (get_thread_lwp): Update. - * regcache.c (get_thread_regcache): Update. - (regcache_invalidate_thread): Update. - (free_register_cache_thread): Update. - * win32-i386-low.c (update_debug_registers_callback): Update. - (win32_get_current_dr): Update. - * win32-low.c (thread_rec): Update. - (delete_thread_info): Update. - (continue_one_thread): Update. - (suspend_one_thread): Update. - -2017-08-24 Simon Marchi <simon.marchi@ericsson.com> - - * inferiors.c (set_inferior_target_data): Remove. - * inferiors.h (set_inferior_target_data): Remove. - -2017-08-18 Yao Qi <yao.qi@linaro.org> - - * Makefile.in (OBS): Add selftest.o. - * configure.ac: AC_DEFINE GDB_SELF_TEST if $development. - * configure, config.in: Re-generated. - * server.c: Include common/sefltest.h. - (captured_main): Handle option --selftest. - -2017-08-09 Yao Qi <yao.qi@linaro.org> - - * configure.srv (srv_i386_regobj): Remove i386-avx.o, - i386-avx-avx512.o, i386-avx-mpx-avx512-pku.o, i386-mpx.o, - i386-avx-mpx.o and i386-mmx.o. - (srv_amd64_regobj): Remove amd64-avx.o, amd64-avx-avx512.o, - amd64-avx-mpx-avx512-pku.o, amd64-mpx.o and amd64-avx-mpx.o. - (srv_i386_xmlfiles): Remove i386/i386-avx.xml, - i386/i386-avx-avx512.xml, i386/i386-avx-mpx-avx512-pku.xml, - i386/i386-mpx.xml, i386/i386-avx-mpx.xml and i386/i386-mmx.xml. - (srv_amd64_xmlfile):i386/amd64-avx.xml, i386/amd64-avx-avx512.xml, - i386/amd64-avx-mpx-avx512-pku.xml, i386/amd64-mpx.xml, - i386/amd64-avx-mpx.xml. - -2017-08-09 Yao Qi <yao.qi@linaro.org> - - * configure.srv (srv_amd64_regobj): Remove x32.o, x32-avx.o - and x32-avx-avx512.o. - (srv_amd64_xmlfiles): Remove i386/x32.xml, i386/x32-avx.xml - i386/x32-avx-avx512.xml. - -2017-07-26 Simon Marchi <simon.marchi@ericsson.com> - - * tracepoint.h (enum class fast_tpoint_collect_result): New - enumeration. - (fast_tracepoint_collecting): Change return type to - fast_tpoint_collect_result. - * tracepoint.c (fast_tracepoint_collecting): Likewise. - * linux-low.h: Include tracepoint.h. - (struct lwp_info) <collecting_fast_tracepoint>: Change type to - fast_tpoint_collect_result. - * linux-low.c (handle_tracepoints): Adjust. - (linux_fast_tracepoint_collecting): Change return type to - fast_tpoint_collect_result. - (maybe_move_out_of_jump_pad, linux_wait_for_event_filtered, - linux_wait_1, stuck_in_jump_pad_callback, - lwp_signal_can_be_delivered, linux_resume_one_lwp_throw, - proceed_one_lwp): Adjust to type change. - -2017-07-10 Yao Qi <yao.qi@linaro.org> - - * linux-x86-low.c (x86_linux_read_description): Re-indent the code. - -2017-06-29 Yao Qi <yao.qi@linaro.org> - - * tdesc.h (struct target_desc) [IN_PROCESS_AGENT] <expedite_regs>: - Remove. - [IN_PROCESS_AGENT] <xmltarget>: Likewise. - -2017-06-20 Simon Marchi <simon.marchi@ericsson.com> - - * Makefile.in (IPA_OBJS): Sort and format one item per line. - -2017-06-20 Sergio Durigan Junior <sergiodj@redhat.com> - - * linux-low.c (linux_create_inferior): Adjust code to access the - environment information via 'gdb_environ' class. - * lynx-low.c (lynx_create_inferior): Likewise. - * server.c (our_environ): Make it an instance of 'gdb_environ'. - (get_environ): Return a pointer to 'our_environ'. - (captured_main): Initialize 'our_environ'. - * server.h (get_environ): Adjust prototype. - * spu-low.c (spu_create_inferior): Adjust code to access the - environment information via 'gdb_environ' class. - -2017-06-17 Simon Marchi <simon.marchi@ericsson.com> - - * linux-low.c (linux_read_memory, linux_write_memory): Remove - usage of "register" keyword. - -2017-06-17 Simon Marchi <simon.marchi@ericsson.com> - - * configure: Re-generate. - -2017-06-17 Simon Marchi <simon.marchi@ericsson.com> - - * configure: Re-generate. - -2017-06-17 Simon Marchi <simon.marchi@ericsson.com> - - * Makefile.in (COMPILE.pre): Add "-x c++". - -2017-06-09 Sergio Durigan Junior <sergiodj@redhat.com> - - * fork-child.c: Conditionally include <signal.h>. - -2017-06-07 Sergio Durigan Junior <sergiodj@redhat.com> - - * server.c (handle_general_set): Handle new packet - "QStartupWithShell". - (handle_query): Add "QStartupWithShell" to the list of supported - packets. - (gdbserver_usage): Add help text explaining the - new "--startup-with-shell" and "--no-startup-with-shell" CLI - options. - (captured_main): Recognize and act upon the presence of the new - CLI options. - -2017-06-07 Sergio Durigan Junior <sergiodj@redhat.com> - Pedro Alves <palves@redhat.com> - - * Makefile.in (SFILES): Add "nat/fork-inferior.o". - * configure: Regenerate. - * configure.srv (srv_linux_obj): Add "fork-child.o" and - "fork-inferior.o". - (i[34567]86-*-lynxos*): Likewise. - (spu*-*-*): Likewise. - * fork-child.c: New file. - * linux-low.c: Include "common-inferior.h", "nat/fork-inferior.h" - and "environ.h". - (linux_ptrace_fun): New function. - (linux_create_inferior): Adjust function prototype to reflect - change on "target.h". Adjust function code to use - "fork_inferior". - (linux_request_interrupt): Delete "signal_pid". - * lynx-low.c: Include "common-inferior.h" and "nat/fork-inferior.h". - (lynx_ptrace_fun): New function. - (lynx_create_inferior): Adjust function prototype to reflect - change on "target.h". Adjust function code to use - "fork_inferior". - * nto-low.c (nto_create_inferior): Adjust function prototype and - code to reflect change on "target.h". Update comments. - * server.c: Include "common-inferior.h", "nat/fork-inferior.h", - "common-terminal.h" and "environ.h". - (terminal_fd): Moved to fork-child.c. - (old_foreground_pgrp): Likewise. - (restore_old_foreground_pgrp): Likewise. - (last_status): Make it global. - (last_ptid): Likewise. - (our_environ): New variable. - (startup_with_shell): Likewise. - (program_name): Likewise. - (program_argv): Rename to... - (program_args): ...this. - (wrapper_argv): New variable. - (start_inferior): Delete function. - (get_exec_wrapper): New function. - (get_exec_file): Likewise. - (get_environ): Likewise. - (prefork_hook): Likewise. - (post_fork_inferior): Likewise. - (postfork_hook): Likewise. - (postfork_child_hook): Likewise. - (handle_v_run): Update code to deal with arguments coming from the - remote host. Update calls from "start_inferior" to - "create_inferior". - (captured_main): Likewise. Initialize environment variable. Call - "have_job_control". - * server.h (post_fork_inferior): New prototype. - (get_environ): Likewise. - (last_status): Declare. - (last_ptid): Likewise. - (signal_pid): Likewise. - * spu-low.c: Include "common-inferior.h" and "nat/fork-inferior.h". - (spu_ptrace_fun): New function. - (spu_create_inferior): Adjust function prototype to reflect change - on "target.h". Adjust function code to use "fork_inferior". - * target.c (target_terminal_init): New function. - (target_terminal_inferior): Likewise. - (target_terminal_ours): Likewise. - * target.h: Include <vector>. - (struct target_ops) <create_inferior>: Update prototype. - (create_inferior): Update macro. - * utils.c (gdb_flush_out_err): New function. - * win32-low.c (win32_create_inferior): Adjust function prototype - and code to reflect change on "target.h". - -2017-06-07 Sergio Durigan Junior <sergiodj@redhat.com> - - * inferiors.c (switch_to_thread): New function. - -2017-06-07 Sergio Durigan Junior <sergiodj@redhat.com> - - * Makefile.in (SFILE): Add "common/job-control.c". - (OBS): Add "job-control.o". - -2017-05-06 Sergio Durigan Junior <sergiodj@redhat.com> - - * Makefile: Remove "@host_makefile_frag@". - -2017-05-05 Pedro Alves <palves@redhat.com> - - * configure: Regenerate. - -2017-05-03 Sergio Durigan Junior <sergiodj@redhat.com> - - * configure: Regenerate. - -2017-05-02 Simon Marchi <simon.marchi@polymtl.ca> - - * linux-arm-low.c (arm_gdbserver_get_next_pcs): Adjust to - software_single_step change of return type to - std::vector<CORE_ADDR>. - * linux-low.c (install_software_single_step_breakpoints): - Likewise. - * linux-low.h (install_software_single_step_breakpoints): - Likewise. - -2017-04-12 Sergio Durigan Junior <sergiodj@redhat.com> - - * remote-utils.c: Include "gdb_termios.h" instead of - "terminal.h". - * terminal.h: Delete file. - -2017-04-12 Sergio Durigan Junior <sergiodj@redhat.com> - - * server.c: Include <vector>. - <program_argv, wrapper_argv>: Convert to std::vector. - (start_inferior): Rewrite function to use C++. - (handle_v_run): Likewise. Update code that calculates the argv - based on the vRun packet; use C++. - (captured_main): Likewise. - -2017-04-06 Simon Marchi <simon.marchi@ericsson.com> - - * server.c (handle_v_cont): Initialize thread_resume::thread - with null_ptid. - -2017-04-05 Pedro Alves <palves@redhat.com> - - * configure: Regenerate. - -2017-04-05 Pedro Alves <palves@redhat.com> - - * gdbreplay.c (sync_error): Constify. - * linux-x86-low.c (push_opcode): Constify. - -2017-04-05 Pedro Alves <palves@redhat.com> - - * win32-low.c (get_child_debug_event) - <CREATE_PROCESS_DEBUG_EVENT>: Don't report TARGET_WAITKIND_EXECD. - Report TARGET_WAITKIND_SPURIOUS instead. - -2017-04-05 Pedro Alves <palves@redhat.com> - - * remote-utils.c (remote_prepare, remote_open): Constify. - * remote-utils.h (remote_prepare, remote_open): Constify. - * server.c (captured_main): Constify 'port' handling. - -2017-04-04 Simon Marchi <simon.marchi@ericsson.com> - - * Makefile.in (clean): Clear .deps. - -2017-03-31 Simon Marchi <simon.marchi@polymtl.ca> - - * .gitignore: Remove generated files, replace with wildcard. - * (clean): Replace removal of generated files with wildcard. - (version.c): Replace with... - (version-generated.c): ...this. - (xml-builtin.c): Replace with... - (xml-builtin-generated.c): ...this. - (%-ipa.o: %-generated.c, %.o: %-generated.c): New rules. - (%.c: *regformats*): Replace with... - (%-generated.c: *regformats*): ...this. - -2017-03-27 Max Filippov <jcmvbkbc@gmail.com> - - * linux-xtensa-low.c (regnum::R_THREADPTR): New enum member. - (xtensa_fill_gregset): Call collect_register_by_name for - threadptr register. - (xtensa_store_gregset): Call supply_register_by_name for - threadptr register. - -2017-03-27 Max Filippov <jcmvbkbc@gmail.com> - - * linux-xtensa-low.c (xtensa_fill_gregset): Call collect_register - for all registers in a0_regnum..a0_regnum + C0_NREGS range. - (xtensa_store_gregset): Call supply_register for all registers in - a0_regnum..a0_regnum + C0_NREGS range. - -2017-03-13 Simon Marchi <simon.marchi@polymtl.ca> - - * Makefile.in (%-ipa.o: %-ipa.c): New rule. - (ax-ipa.o: ax.c): Remove. - (linux-i386-ipa.o: linux-i386-ipa.c): Remove. - (linux-amd64-ipa.o: linux-amd64-ipa.c): Remove. - (linux-aarch64-ipa.o: linux-aarch64-ipa.c): Remove. - (linux-s390-ipa.o: linux-s390-ipa.c): Remove. - (linux-ppc-ipa.o: linux-ppc-ipa.c): Remove. - -2017-03-13 Simon Marchi <simon.marchi@polymtl.ca> - - * Makefile.in (%-ipa.o: ../common/%.c): New rule. - (print-utils-ipa.o: ../common/print-utils.c): Remove. - (rsp-low-ipa.o: ../common/rsp-low.c): Remove. - (errors-ipa.o: ../common/errors.c): Remove. - (format-ipa.o: ../common/format.c): Remove. - (common-utils-ipa.o: ../common/common-utils.c): Remove. - -2017-03-13 Simon Marchi <simon.marchi@polymtl.ca> - - * Makefile.in (%-ipa.o: %.c): New rule. - (tracepoint-ipa.o: tracepoint.c): Remove. - (utils-ipa.o: utils.c): Remove. - (remote-utils-ipa.o: remote-utils.c): Remove. - (regcache-ipa.o: regcache.c): Remove. - (i386-linux-ipa.o: i386-linux.c): Remove. - (i386-mmx-linux-ipa.o: i386-mmx-linux.c): Remove. - (i386-avx-linux-ipa.o: i386-avx-linux.c): Remove. - (i386-mpx-linux-ipa.o: i386-mpx-linux.c): Remove. - (i386-avx-mpx-linux-ipa.o: i386-avx-mpx-linux.c): Remove. - (i386-avx-avx512-linux-ipa.o: i386-avx-avx512-linux.c): Remove. - (i386-avx-mpx-avx512-pku-linux-ipa.o: i386-avx-mpx-avx512-pku-linux.c): Remove. - (amd64-linux-ipa.o: amd64-linux.c): Remove. - (amd64-avx-linux-ipa.o: amd64-avx-linux.c): Remove. - (amd64-mpx-linux-ipa.o: amd64-mpx-linux.c): Remove. - (amd64-avx-mpx-linux-ipa.o: amd64-avx-mpx-linux.c): Remove. - (amd64-avx-avx512-linux-ipa.o: amd64-avx-avx512-linux.c): Remove. - (amd64-avx-mpx-avx512-pku-linux-ipa.o: amd64-avx-mpx-avx512-pku-linux.c): Remove. - (aarch64-ipa.o: aarch64.c): Remove. - (s390-linux32-ipa.o: s390-linux32.c): Remove. - (s390-linux32v1-ipa.o: s390-linux32v1.c): Remove. - (s390-linux32v2-ipa.o: s390-linux32v2.c): Remove. - (s390-linux64-ipa.o: s390-linux64.c): Remove. - (s390-linux64v1-ipa.o: s390-linux64v1.c): Remove. - (s390-linux64v2-ipa.o: s390-linux64v2.c): Remove. - (s390-te-linux64-ipa.o: s390-te-linux64.c): Remove. - (s390-vx-linux64-ipa.o: s390-vx-linux64.c): Remove. - (s390-tevx-linux64-ipa.o: s390-tevx-linux64.c): Remove. - (s390x-linux64-ipa.o: s390x-linux64.c): Remove. - (s390x-linux64v1-ipa.o: s390x-linux64v1.c): Remove. - (s390x-linux64v2-ipa.o: s390x-linux64v2.c): Remove. - (s390x-te-linux64-ipa.o: s390x-te-linux64.c): Remove. - (s390x-vx-linux64-ipa.o: s390x-vx-linux64.c): Remove. - (s390x-tevx-linux64-ipa.o: s390x-tevx-linux64.c): Remove. - (powerpc-32l-ipa.o: powerpc-32l.c): Remove. - (powerpc-altivec32l-ipa.o: powerpc-altivec32l.c): Remove. - (powerpc-cell32l-ipa.o: powerpc-cell32l.c): Remove. - (powerpc-vsx32l-ipa.o: powerpc-vsx32l.c): Remove. - (powerpc-isa205-32l-ipa.o: powerpc-isa205-32l.c): Remove. - (powerpc-isa205-altivec32l-ipa.o: powerpc-isa205-altivec32l.c): Remove. - (powerpc-isa205-vsx32l-ipa.o: powerpc-isa205-vsx32l.c): Remove. - (powerpc-e500l-ipa.o: powerpc-e500l.c): Remove. - (powerpc-64l-ipa.o: powerpc-64l.c): Remove. - (powerpc-altivec64l-ipa.o: powerpc-altivec64l.c): Remove. - (powerpc-cell64l-ipa.o: powerpc-cell64l.c): Remove. - (powerpc-vsx64l-ipa.o: powerpc-vsx64l.c): Remove. - (powerpc-isa205-64l-ipa.o: powerpc-isa205-64l.c): Remove. - (powerpc-isa205-altivec64l-ipa.o: powerpc-isa205-altivec64l.c): Remove. - (powerpc-isa205-vsx64l-ipa.o: powerpc-isa205-vsx64l.c): Remove. - (tdesc-ipa.o: tdesc.c): Remove. - (x32-linux-ipa.o: x32-linux.c): Remove. - (x32-avx-linux-ipa.o: x32-avx-linux.c): Remove. - (x32-avx512-linux-ipa.o: x32-avx512-linux.c): Remove. - -2017-03-13 Simon Marchi <simon.marchi@polymtl.ca> - - * Makefile.in (%.o: ../arch/%.c): New rule. - (arm.o: ../arch/arm.c): Remove. - (arm-linux.o: ../arch/arm-linux.c): Remove. - (arm-get-next-pcs.o: ../arch/arm-get-next-pcs.c): Remove. - (aarch64-insn.o: ../arch/aarch64-insn.c): Remove. - -2017-03-13 Simon Marchi <simon.marchi@polymtl.ca> - - * Makefile.in (%.o: ../nat/%.c): New rule. - (x86-dregs.o: ../nat/x86-dregs.c): Remove. - (amd64-linux-siginfo.o: ../nat/amd64-linux-siginfo.c): Remove. - (linux-btrace.o: ../nat/linux-btrace.c): Remove. - (linux-osdata.o: ../nat/linux-osdata.c): Remove. - (linux-procfs.o: ../nat/linux-procfs.c): Remove. - (linux-ptrace.o: ../nat/linux-ptrace.c): Remove. - (linux-waitpid.o: ../nat/linux-waitpid.c): Remove. - (mips-linux-watch.o: ../nat/mips-linux-watch.c): Remove. - (ppc-linux.o: ../nat/ppc-linux.c): Remove. - (linux-personality.o: ../nat/linux-personality.c): Remove. - (aarch64-linux-hw-point.o: ../nat/aarch64-linux-hw-point.c): Remove. - (aarch64-linux.o: ../nat/aarch64-linux.c): Remove. - (x86-linux.o: ../nat/x86-linux.c): Remove. - (x86-linux-dregs.o: ../nat/x86-linux-dregs.c): Remove. - (linux-namespaces.o: ../nat/linux-namespaces.c): Remove. - -2017-03-13 Simon Marchi <simon.marchi@polymtl.ca> - - * Makefile.in (%.o: ../common/%.c): New rule. - (signals.o: ../common/signals.c): Remove. - (print-utils.o: ../common/print-utils.c): Remove. - (rsp-low.o: ../common/rsp-low.c): Remove. - (common-utils.o: ../common/common-utils.c): Remove. - (posix-strerror.o: ../common/posix-strerror.c): Remove. - (mingw-strerror.o: ../common/mingw-strerror.c): Remove. - (vec.o: ../common/vec.c): Remove. - (gdb_vecs.o: ../common/gdb_vecs.c): Remove. - (xml-utils.o: ../common/xml-utils.c): Remove. - (ptid.o: ../common/ptid.c): Remove. - (buffer.o: ../common/buffer.c): Remove. - (format.o: ../common/format.c): Remove. - (filestuff.o: ../common/filestuff.c): Remove. - (agent.o: ../common/agent.c): Remove. - (errors.o: ../common/errors.c): Remove. - (environ.o: ../common/environ.c): Remove. - (common-debug.o: ../common/common-debug.c): Remove. - (cleanups.o: ../common/cleanups.c): Remove. - (common-exceptions.o: ../common/common-exceptions.c): Remove. - (fileio.o: ../common/fileio.c): Remove. - (common-regcache.o: ../common/common-regcache.c): Remove. - (signals-state-save-restore.o: ../common/signals-state-save-restore.c): Remove. - (new-op.o: ../common/new-op.c): Remove. - (btrace-common.o: ../common/btrace-common.c): Remove. - -2017-03-13 Simon Marchi <simon.marchi@polymtl.ca> - - * Makefile.in (%.o: ../target/%.c): New rule. - (waitstatus.o: ../target/waitstatus.c): Remove. - -2017-03-13 Simon Marchi <simon.marchi@polymtl.ca> - - * Makefile.in - (%.c: ../regformats/%.dat, - (%.c: ../regformats/arm/%.dat, - (%.c: ../regformats/i386/%.dat, - (%.c: ../regformats/rs6000/%.dat): New rules. - (aarch64.c): Remove. - (reg-arm.c): Remove. - (arm-with-iwmmxt.c): Remove. - (arm-with-vfpv2.c): Remove. - (arm-with-vfpv3.c): Remove. - (arm-with-neon.c): Remove. - (reg-bfin.c): Remove. - (reg-cris.c): Remove. - (reg-crisv32.c): Remove. - (i386.c): Remove. - (i386-linux.c): Remove. - (i386-avx.c): Remove. - (i386-avx-linux.c): Remove. - (i386-avx-avx512.c): Remove. - (i386-avx-avx512-linux.c): Remove. - (i386-mpx.c): Remove. - (i386-mpx-linux.c): Remove. - (i386-avx-mpx-avx512-pku.c): Remove. - (i386-avx-mpx-avx512-pku-linux.c): Remove. - (i386-avx-mpx.c): Remove. - (i386-avx-mpx-linux.c): Remove. - (i386-mmx.c): Remove. - (i386-mmx-linux.c): Remove. - (reg-ia64.c): Remove. - (reg-m32r.c): Remove. - (reg-m68k.c): Remove. - (reg-cf.c): Remove. - (mips-linux.c): Remove. - (mips-dsp-linux.c): Remove. - (mips64-linux.c): Remove. - (mips64-dsp-linux.c): Remove. - (nios2-linux.c): Remove. - (powerpc-32.c): Remove. - (powerpc-32l.c): Remove. - (powerpc-altivec32l.c): Remove. - (powerpc-cell32l.c): Remove. - (powerpc-vsx32l.c): Remove. - (powerpc-isa205-32l.c): Remove. - (powerpc-isa205-altivec32l.c): Remove. - (powerpc-isa205-vsx32l.c): Remove. - (powerpc-e500l.c): Remove. - (powerpc-64l.c): Remove. - (powerpc-altivec64l.c): Remove. - (powerpc-cell64l.c): Remove. - (powerpc-vsx64l.c): Remove. - (powerpc-isa205-64l.c): Remove. - (powerpc-isa205-altivec64l.c): Remove. - (powerpc-isa205-vsx64l.c): Remove. - (s390-linux32.c): Remove. - (s390-linux32v1.c): Remove. - (s390-linux32v2.c): Remove. - (s390-linux64.c): Remove. - (s390-linux64v1.c): Remove. - (s390-linux64v2.c): Remove. - (s390-te-linux64.c): Remove. - (s390-vx-linux64.c): Remove. - (s390-tevx-linux64.c): Remove. - (s390x-linux64.c): Remove. - (s390x-linux64v1.c): Remove. - (s390x-linux64v2.c): Remove. - (s390x-te-linux64.c): Remove. - (s390x-vx-linux64.c): Remove. - (s390x-tevx-linux64.c): Remove. - (tic6x-c64xp-linux.c): Remove. - (tic6x-c64x-linux.c): Remove. - (tic6x-c62x-linux.c): Remove. - (reg-sh.c): Remove. - (reg-sparc64.c): Remove. - (reg-spu.c): Remove. - (amd64.c): Remove. - (amd64-linux.c): Remove. - (amd64-avx.c): Remove. - (amd64-avx-linux.c): Remove. - (amd64-avx-avx512.c): Remove. - (amd64-avx-avx512-linux.c): Remove. - (amd64-mpx.c): Remove. - (amd64-mpx-linux.c): Remove. - (amd64-avx-mpx-avx512-pku.c): Remove. - (amd64-avx-mpx-avx512-pku-linux.c): Remove. - (amd64-avx-mpx.c): Remove. - (amd64-avx-mpx-linux.c): Remove. - (x32.c): Remove. - (x32-linux.c): Remove. - (x32-avx.c): Remove. - (x32-avx-linux.c): Remove. - (x32-avx-avx512.c): Remove. - (x32-avx-avx512-linux.c): Remove. - (reg-xtensa.c): Remove. - (reg-tilegx.c): Remove. - (reg-tilegx32.c): Remove. - -2017-03-07 Sergio Durigan Junior <sergiodj@redhat.com> - - * Makefile.in (SFILES): Add "common/environ.c". - (OBJS): Add "common/environ.h". - -2017-01-27 Walfred Tedeschi <walfred.tedeschi@intel.com> - - * configure.ac: Check if the fs_base and gs_base members of - `struct user_regs_struct' exist. - * config.in: Regenerated. - * configure: Likewise. - -2017-01-09 Antoine Tremblay <antoine.tremblay@ericsson.com> - - * linux-aarch32-low.c (arm_breakpoint_kind_from_pc): Use - target_read_memory. - * linux-arm-low.c (get_next_pcs_read_memory_unsigned_integer): Likewise. - (get_next_pcs_syscall_next_pc): Likewise. - -2016-12-23 Luis Machado <lgustavo@codesourcery.com> - - * win32-i386-low.c: Fix incorrect reference to a couple source files. - * nto-x86-low.c: Likewise. - -2016-11-30 Simon Marchi <simon.marchi@polymtl.ca> - - * Makefile.in: Include disable-implicit-rules.mk. - -2016-11-23 Pedro Alves <palves@redhat.com> - - * debug.c: Include <chrono> instead of "gdb_sys_time.h". - (debug_vprintf): Use std::chrono::steady_clock instead of - gettimeofday. Use '.' instead of ':'. - * tracepoint.c: Include <chrono> instead of "gdb_sys_time.h". - (get_timestamp): Use std::chrono::steady_clock instead of - gettimeofday. - -2016-11-22 Simon Marchi <simon.marchi@polymtl.ca> - - * Makefile.in: Fix whitespace formatting. - -2016-11-22 Simon Marchi <simon.marchi@polymtl.ca> - - * Makefile.in (SFILES, OBS): Flatten list and order - alphabetically. - -2016-11-23 Pedro Alves <palves@redhat.com> - - * event-loop.c (handle_file_event): Use warning. - * linux-low.c (linux_resume_one_lwp_throw): Use warning. - * mem-break.c (add_breakpoint_condition, add_breakpoint_commands): - Use warning. - -2016-11-23 Pedro Alves <palves@redhat.com> - - * linux-low.c (check_zombie_leaders): Use debug_printf for debug - output. - * notif.c (handle_notif_ack, notif_event_enque): Likewise. - * remote-utils.c (putpkt_binary_1, readchar, getpkt): Use - debug_printf and debug_flush for debug output. - * server.c (handle_general_set): Likewise. - * thread-db.c (try_thread_db_load): Use debug_printf for debug - output. - -2016-11-17 Simon Marchi <simon.marchi@polymtl.ca> - - * Makefile.in (.c.o): Replace rule with ... - (%.o: %.c): ... this one. - -2016-11-17 Simon Marchi <simon.marchi@polymtl.ca> - - * Makefile.in: Remove @GMAKE_TRUE@ prefixes and removes lines - prefixed with @GMAKE_FALSE@. Update comment related to non-GNU - make. - * configure.ac: Remove checks for the make program. - * configure: Re-generate. - -2016-10-28 Pedro Alves <palves@redhat.com> - - * Makefile.in (CXX_DIALECT): Get from configure. - (COMPILE.pre, CC_LD): Append $(CXX_DIALECT). - * acinclude.m4: Include ../ax_cxx_compile_stdcxx.m4. - * configure.ac: Call AX_CXX_COMPILE_STDCXX. - * config.in: Regenerate. - * configure: Regenerate. - -2016-10-27 Yao Qi <yao.qi@linaro.org> - - * linux-low.c (linux_supports_range_stepping): Return true if - can_software_single_step return true. - -2016-10-27 Yao Qi <yao.qi@linaro.org> - - * inferiors.c (find_inferior_in_random): New function. - * inferiors.h (find_inferior_in_random): Declare. - * linux-low.c (linux_wait_for_event_filtered): Call - find_inferior_in_random instead of find_inferior. - -2016-10-27 Yao Qi <yao.qi@linaro.org> - - * linux-low.c (linux_wait_1): If single-step breakpoints are - inserted, remove them. - -2016-10-26 Pedro Alves <palves@redhat.com> - - * linux-low.c (handle_extended_wait): Link parent/child fork - threads. - (linux_wait_1): Unlink them. - (linux_set_resume_request): Ignore resume requests for - already-resumed and unhandled fork child threads. - * linux-low.h (struct lwp_info) <fork_relative>: New field. - * server.c (in_queued_stop_replies_ptid, in_queued_stop_replies): - New functions. - (handle_v_requests) <vCont>: Don't call require_running. - * server.h (in_queued_stop_replies): New declaration. - -2016-10-24 Yao Qi <yao.qi@linaro.org> - - PR server/20733 - * linux-aarch64-low.c (append_insns): Cast the return value to - 'uint32_t *'. - -2016-10-10 Yao Qi <yao.qi@linaro.org> - - * linux-aarch32-low.c (enum arm_breakpoint_kinds): Remove. - -2016-10-06 Sergio Durigan Junior <sergiodj@redhat.com> - - * target.c (target_supports_multi_process): New function, moved - from... - * target.h (target_supports_multi_process): ... here. Remove - macro. - -2016-10-05 Tom Tromey <tom@tromey.com> - - PR remote/20655: - * tracepoint.c (handle_tracepoint_bkpts): Check - ipa_error_tracepoint, not ipa_stopping_tracepoint. - -2016-10-05 Yao Qi <yao.qi@linaro.org> - - * configure.srv: Update the path of arm-*.xml files. - -2016-10-05 Terry Guo <terry.guo@arm.com> - Yao Qi <yao.qi@linaro.org> - - * Makefile.in: Adjust the path of rules. - * configure.srv: Update the path of xml files. - * regformats/arm-with-iwmmxt.dat: Regenerated. - * regformats/arm-with-neon.dat: Likewise. - * regformats/arm-with-vfpv2.dat: Likewise. - * regformats/arm-with-vfpv3.dat Likewise. - -2016-09-30 Yao Qi <yao.qi@linaro.org> - - PR gdbserver/20627 - * target.c (target_stop_and_wait): Don't call - target_continue_no_signal, use resume_stop instead. - -2016-09-26 Yao Qi <yao.qi@linaro.org> - - * linux-low.c (linux_wait_1): Call debug_exit. - -2016-09-23 Pedro Alves <palves@redhat.com> - - * Makefile.in (SFILES): Add common/new-op.c. - (OBS): Add common/new-op.o. - (new-op.o): New rule. - -2016-09-21 Simon Marchi <simon.marchi@ericsson.com> - - * .gitinore: Ignore more files. - -2016-09-21 Yao Qi <yao.qi@linaro.org> - - * linux-aarch32-low.c (arm_fill_gregset): Keep bits 20 to - 23. - -2016-09-19 Sergio Durigan Junior <sergiodj@redhat.com> - - * server.c (start_inferior): Call target_mourn_inferior instead of - mourn_inferior; pass ptid_t argument to it. - (resume): Likewise. - (handle_target_event): Likewise. - * target.c (target_mourn_inferior): New function. - * target.h (mourn_inferior): Delete macro. - -2016-09-16 Andreas Arnez <arnez@linux.vnet.ibm.com> - - * linux-low.c (lwp_is_stepping): New function. - -2016-09-06 Carl Love <cel@us.ibm.com> - - * server.c (start_inferior): Fixed comment, requested comment change - didn't get updated correctly. Removed reference to ptrace () call as - it is only true on Linux systems. - -2016-09-06 Carl Love <cel@us.ibm.com> - - * server.c (start_inferior): Do not call - function target_post_create_inferior () if the - inferior process has already exited. - -2016-09-05 Pedro Alves <palves@redhat.com> - - * Makefile.in (COMPILER, COMPILER_CFLAGS): Remove. - (COMPILE.pre, CC_LD): Use CXX directly. - (INTERNAL_CFLAGS_BASE): Use CXXFLAGS directly. - * acinclude.m4: Don't include build-with-cxx.m4. - * configure.ac: Remove GDB_AC_BUILD_WITH_CXX call. - * configure: Regenerate. - -2016-09-02 Akash Trehan <akash.trehan123@gmail.com> - - PR gdb/19495 - * remote-utils.c (relocate_instruction): Remove redundant strcpy() - call writing data to own_buf. - -2016-09-01 Sergio Durigan Junior <sergiodj@redhat.com> - - * target.c (mywait): Call target_wait instead of - the_target->wait. - (target_wait): New function. - -2016-09-01 Sergio Durigan Junior <sergiodj@redhat.com> - - * server.c (start_inferior): New variable 'ptid'. Replace calls - to the_target->resume by target_continue{,_no_signal}, depending - on the case. - * target.c (target_stop_and_wait): Call target_continue_no_signal - instead of the_target->resume. - (target_continue): New function. - -2016-08-31 Antoine Tremblay <antoine.tremblay@ericsson.com> - - * linux-low.c (linux_wait_1): Move event switch after unsuspend_lwps. - -2016-08-25 Adhemerval Zanella <adhemerval.zanella@linaro.org> - - PR server/20491 - * gdb_proc_service.h (ps_get_thread_area): Remove const from struct - ps_prochandle. - * linux-aarch64-low.c (ps_get_thread_area): Likewise. - * linux-arm-low.c (ps_get_thread_area): Likewise. - * linux-crisv32-low.c (ps_get_thread_area): Likewise. - * linux-m68k-low.c (ps_get_thread_area): Likewise. - * linux-mips-low.c (ps_get_thread_area): Likewise. - * linux-nios2-low.c (ps_get_thread_area): Likewise. - * linux-tic6x-low.c (ps_get_thread_area): Likewise. - * linux-x86-low.c (ps_get_thread_area): Likewise. - * linux-xtensa-low.c (ps_get_thread_area): Likewise. - -2016-08-19 Pedro Alves <palves@redhat.com> - - * linux-x86-low.c (amd64_emit_call): Emit missing call opcode. - -2016-08-19 Pedro Alves <palves@redhat.com> - - * linux-x86-low.c (amd64_install_fast_tracepoint_jump_pad): Fix - comment. Use memcpy instead of casting through unsigned long. - -2016-08-19 Pedro Alves <palves@redhat.com> - - * linux-amd64-ipa.c (alloc_jump_pad_buffer) [__ILP32__]: Try - allocating around 0x80000000. - -2016-08-19 Pedro Alves <palves@redhat.com> - - PR gdb/20415 - * Makefile.in (x32-linux-ipa.o, x32-avx-linux-ipa.o) - (x32-avx512-linux-ipa.o): New rules. - * configure.ac (x86_64-*-linux*): New x32 check. - * configure.srv (ipa_x32_linux_regobj): New. - (x86_64-*-linux*): Use $ipa_x32_linux_regobj if building for x32. - * linux-amd64-ipa.c (get_ipa_tdesc) [__ILP32__]: Return x32 - descriptions. - (initialize_low_tracepoint) [__ILP32__]: Initialize x32 - descriptions. - * configure: Regenerate. - -2016-08-09 Pedro Alves <palves@redhat.com> - - PR gdb/18653 - * Makefile.in (OBS): Add signals-state-save-restore.o. - (signals-state-save-restore.o): New rule. - * config.in: Regenerate. - * configure: Regenerate. - * linux-low.c: Include "signals-state-save-restore.h". - (linux_create_inferior): Call - restore_original_signals_state. - * server.c: Include "dispositions-save-restore.h". - (captured_main): Call save_original_signals_state. - -2016-08-05 Pedro Alves <palves@redhat.com> - - * configure: Regenerate. - -2016-08-04 Yao Qi <yao.qi@linaro.org> - - * linux-low.c (regsets_fetch_inferior_registers): Check - errno is ESRCH or not. - -2016-08-02 Yao Qi <yao.qi@linaro.org> - - * thread-db.c (struct thread_db) <td_ta_event_getmsg_p>: Remove. - <td_ta_set_event_p, td_ta_event_addr_p>: Remove. - (thread_db_load_search): Update. - (try_thread_db_load_1): Don't look for td_ta_event_addr, - td_ta_set_event and td_ta_event_getmsg. - -2016-07-26 Pedro Alves <palves@redhat.com> - - PR server/20414 - * linux-x86-low.c (x86_get_pc, x86_set_pc): Use uint64_t instead - of unsigned long for 64-bit registers and use uint32_t instead of - unsigned int for 32-bit registers. - -2016-07-26 Pedro Alves <palves@redhat.com> - - * linux-x86-low.c (x86_siginfo_fixup): Rename 'native' parameter - to 'ptrace'. - -2016-07-21 Tom Tromey <tom@tromey.com> - - * configure: Rebuild. - -2016-07-21 Yao Qi <yao.qi@linaro.org> - - * mem-break.c (find_gdb_breakpoint): Cast bp to - 'struct gdb_breakpoint *' rather than 'gdb_breakpoint *'. - -2016-07-21 Yao Qi <yao.qi@linaro.org> - - * server.c (handle_v_requests): Support s and S actions - if target_supports_software_single_step return true. - -2016-07-21 Yao Qi <yao.qi@linaro.org> - - * linux-low.c (resume_stopped_resumed_lwps): If resume request - is resume_step, call maybe_hw_step. - (linux_wait_1): Stop all threads, remove reinsert breakpoints, - and unstop them. - (linux_resume_one_lwp_throw): Don't assert the thread has reinsert - breakpoints or not. - (proceed_one_lwp): If resume request is resume_step, install - reinsert breakpoints and call maybe_hw_step. - -2016-07-21 Yao Qi <yao.qi@linaro.org> - - * linux-low.c (proceed_one_lwp): Declare. - (linux_resume_one_thread): Remove local variable 'step'. - Lift code enqueue signal. Call proceed_one_lwp instead of - linux_resume_one_lwp. - -2016-07-21 Yao Qi <yao.qi@linaro.org> - - * linux-low.c (linux_resume_one_thread): Call - enqueue_pending_signal. - -2016-07-21 Yao Qi <yao.qi@linaro.org> - - * gdbthread.h (make_cleanup_restore_current_thread): Declare. - * inferiors.c (do_restore_current_thread_cleanup): New function. - (make_cleanup_restore_current_thread): Likewise. - * linux-low.c (install_software_single_step_breakpoints): Call - make_cleanup_restore_current_thread. Switch current_thread to - thread. - -2016-07-21 Yao Qi <yao.qi@linaro.org> - - * mem-break.c (struct reinsert_breakpoint) <ptid>: New field. - (set_reinsert_breakpoint): New parameter ptid. Callers updated. - (clone_one_breakpoint): Likewise. - (delete_reinsert_breakpoints): Change parameter to thread. - Callers updated. - (has_reinsert_breakpoints): Likewise. - (uninsert_reinsert_breakpoints): Likewise. - (reinsert_reinsert_breakpoints): Likewise. - * mem-break.h (set_reinsert_breakpoint): Update declaration. - (delete_reinsert_breakpoints): Likewise. - (reinsert_reinsert_breakpoints): Likewise. - (uninsert_reinsert_breakpoints): Likewise. - (has_reinsert_breakpoints): Likewise. - -2016-07-21 Yao Qi <yao.qi@linaro.org> - - * inferiors.c (get_thread_process): Make parameter const. - * inferiors.h (get_thread_process): Update declaration. - * mem-break.c (clone_all_breakpoints): Remove all parameters. - Add new parameters child_thread and parent_thread. Callers - updated. - * mem-break.h (clone_all_breakpoints): Update declaration. - -2016-07-21 Yao Qi <yao.qi@linaro.org> - - * mem-break.c (struct breakpoint) <cond_list>: Remove. - <command_list, handler>: Remove. - (struct gdb_breakpoint): New. - (struct other_breakpoint): New. - (struct reinsert_breakpoint): New. - (is_gdb_breakpoint): New function. - (any_persistent_commands): Update command_list if - is_gdb_breakpoint returns true. - (set_breakpoint): Create breakpoints according to their types. - (find_gdb_breakpoint): Return 'struct gdb_breakpoint *'. - (set_gdb_breakpoint_1): Likewise. - (set_gdb_breakpoint): Likewise. - (clear_breakpoint_conditions): Change parameter type to - 'struct gdb_breakpoint *'. - (clear_breakpoint_commands): Likewise. - (clear_breakpoint_conditions_and_commands): Likewise. - (add_condition_to_breakpoint): Likewise. - (add_breakpoint_condition): Likewise. - (add_commands_to_breakpoint): Likewise. - (check_breakpoints): Check other_breakpoint. - (clone_one_breakpoint): Clone breakpopint according to its type. - * mem-break.h (struct gdb_breakpoint): Declare. - (set_gdb_breakpoint): Update declaration. - (clear_breakpoint_conditions_and_commands): Likewise. - (add_breakpoint_condition): Likewise. - (add_breakpoint_commands): Likewise. - * server.c (process_point_options): Change parameter type to - 'struct gdb_breakpoint *'. - -2016-07-21 Yao Qi <yao.qi@linaro.org> - - * mem-break.c (set_breakpoint_at): Rename it to ... - (set_breakpoint_type_at): ... it. - (set_breakpoint_at): Call set_breakpoint_type_at. - (set_reinsert_breakpoint): Call set_breakpoint_type_at. - * mem-break.h (set_breakpoint_at): Update comments. - -2016-07-12 Chung-Lin Tang <cltang@codesourcery.com> - - * linux-nios2-low.c (nios2_fill_gregset): Add type cast - to buf parameter. - (nios2_store_gregset): Likewise. - -2016-07-01 Pedro Alves <palves@redhat.com> - Antoine Tremblay <antoine.tremblay@ericsson.com> - - * linux-low.c: Change interface to take the target lwp_info - pointer directly and return void. Handle detaching from a zombie - thread. - (linux_detach_lwp_callback): New function. - (linux_detach): Detach from the leader thread after detaching from - the clone threads. - -2016-06-28 Yao Qi <yao.qi@linaro.org> - - * linux-aarch64-low.c (aarch64_ftrace_insn_reloc_b): Use int64_t - for variable new_offset. - (aarch64_ftrace_insn_reloc_b_cond): Likewise. - (aarch64_ftrace_insn_reloc_cb): Likewise. - (aarch64_ftrace_insn_reloc_tb): Likewise. - (aarch64_install_fast_tracepoint_jump_pad): Likewise. Use - PRIx64 instead of PRIx32. - -2016-06-28 Yao Qi <yao.qi@linaro.org> - - * linux-arm-low.c (arm_get_syscall_trapinfo): New function. - (the_low_target): Install arm_get_syscall_trapinfo. - -2016-06-28 Yao Qi <yao.qi@linaro.org> - - * linux-aarch64-low.c (aarch64_get_syscall_trapinfo): New - function. - (the_low_target): Install aarch64_get_syscall_trapinfo. - -2016-06-28 Yao Qi <yao.qi@linaro.org> - - * linux-low.c (get_syscall_trapinfo): Remove parameter sysret. - Callers updated. - * linux-low.h (struct linux_target_ops) <get_syscall_trapinfo>: - Remove parameter sysno. - * linux-x86-low.c (x86_get_syscall_trapinfo): Remove parameter - sysret. - -2016-06-21 Andreas Arnez <arnez@linux.vnet.ibm.com> - - * linux-s390-low.c (s390_emit_eq_goto): Mark function static. - (s390_emit_ne_goto): Likewise. - (s390_emit_lt_goto): Likewise. - (s390_emit_le_goto): Likewise. - (s390_emit_gt_goto): Likewise. - (s390_emit_ge_goto): Likewise. - (s390x_emit_eq_goto): Likewise. - (s390x_emit_ne_goto): Likewise. - (s390x_emit_lt_goto): Likewise. - (s390x_emit_le_goto): Likewise. - (s390x_emit_gt_goto): Likewise. - (s390x_emit_ge_goto): Likewise. - (s390_emit_ops_impl): Mark variable static. - (s390x_emit_ops): Likewise. - -2016-06-17 Yao Qi <yao.qi@linaro.org> - - * linux-low.c (handle_extended_wait): Call - uninsert_reinsert_breakpoints for the parent process. Remove - reinsert breakpoints from the child process. Reinsert them to - the parent process when vfork is done. - * mem-break.c (uninsert_reinsert_breakpoints): New function. - (reinsert_reinsert_breakpoints): New function. - * mem-break.h (uninsert_reinsert_breakpoints): Declare - (reinsert_reinsert_breakpoints): Declare. - -2016-06-17 Yao Qi <yao.qi@linaro.org> - - * linux-low.c (handle_extended_wait): If the parent is doing - step-over, remove the reinsert breakpoints from the forked child. - -2016-06-17 Yao Qi <yao.qi@linaro.org> - - * linux-low.c (unsuspend_all_lwps): Declare. - (linux_low_filter_event): If thread exited, call finish_step_over. - If step-over is finished, unsuspend other threads. - -2016-06-17 Yao Qi <yao.qi@linaro.org> - - * linux-low.c (linux_resume_one_lwp_throw): Assert - has_reinsert_breakpoints returns false. - * mem-break.c (delete_disabled_breakpoints): Assert - bp type isn't reinsert_breakpoint. - -2016-06-17 Yao Qi <yao.qi@linaro.org> - - * linux-low.c (maybe_hw_step): New function. - (linux_resume_one_lwp_throw): Call maybe_hw_step. - (finish_step_over): Switch current_thread to lwp temporarily, - and assert has_reinsert_breakpoints returns true. - (proceed_one_lwp): Call maybe_hw_step. - * mem-break.c (has_reinsert_breakpoints): New function. - * mem-break.h (has_reinsert_breakpoints): Declare. - -2016-06-02 Jon Turney <jon.turney@dronecode.org.uk> - - * win32-low.c (win32_create_inferior): Add pointer casts for C++. - -2016-05-17 Yao Qi <yao.qi@linaro.org> - - * linux-low.c (linux_stabilize_threads): Call unsuspend_all_lwps - instead of find_inferior. - -2016-05-05 Yao Qi <yao.qi@linaro.org> - - * linux-arm-low.c (get_next_pcs_read_memory_unsigned_integer): - Initialize res to zero. - -2016-05-05 Yao Qi <yao.qi@linaro.org> - - * linux-arm-low.c (arm_sigreturn_next_pc): Change type of cpsr - to uint32_t. - -2016-05-04 Ulrich Weigand <Ulrich.Weigand@de.ibm.com> - - * spu-low.c (fetch_ppc_register): Cast PowerPC-Linux-specific value - used as first ptrace argument to PTRACE_TYPE_ARG1 for C++. - (fetch_ppc_memory_1, store_ppc_memory_1): Likewise. - -2016-04-28 Par Olsson <par.olsson@windriver.com> - Simon Marchi <simon.marchi@ericsson.com> - - * tracepoint.c (write_inferior_int8): New function. - (cmd_qtenable_disable): Write enable flag using - write_inferior_int8. - -2016-04-25 Yao Qi <yao.qi@linaro.org> - - * linux-low.c (lwp_signal_can_be_delivered): Adjust. - (need_step_over_p): Return zero if the LWP has pending signals - can be delivered on software single step target. - -2016-04-25 Yao Qi <yao.qi@linaro.org> - - * linux-low.c (reinsert_raw_breakpoint): If bp->inserted is true - return instead of error. - -2016-04-22 Yao Qi <yao.qi@linaro.org> - - * linux-aarch32-low.c (arm_store_gregset): Clear CPSR bits 20 - to 23. - -2016-04-22 Yao Qi <yao.qi@linaro.org> - - * linux-low.c (lwp_signal_can_be_delivered): Don't deliver - signal when stepping over breakpoint with software single - step. - -2016-04-21 Pedro Alves <palves@redhat.com> - - * linux-s390-low.c (s390_collect_ptrace_register) - (s390_supply_ptrace_register, s390_get_hwcap): Use gdb_byte * and - add casts. - (s390_check_regset): Use void * instead of gdb_byte *. - -2016-04-20 Pedro Alves <palves@redhat.com> - - * configure: Renegerate. - -2016-04-20 Yao Qi <yao.qi@linaro.org> - - * linux-aarch32-low.c: Include "arch/arm-linux.h". - (arm_fill_gregset): Use ARM_CPSR_GREGNUM rather than magic - number 16. - (arm_store_gregset): Likewise. - -2016-04-16 Walfred Tedeschi <walfred.tedeschi@intel.com> - - * Makefile.in (clean): Add removal for i386-avx-mpx.c, - i386-avx-mpx-linux.c, amd64-avx-mpx.c and amd64-avx-mpx-linux.c. - (i386-avx-mpx.c, i386-avx-mpx-linux.c, amd64-avx-mpx.c) - (amd64-avx-mpx-linux.c): New rules. - (amd64-avx-mpx-linux-ipa.o, i386-avx-mpx-linux-ipa.o): New rule. - * configure.srv (srv_i386_regobj): Add i386-avx-mpx.o. - (srv_i386_linux_regobj): Add i386-avx-mpx-linux.o. - (srv_amd64_regobj): Add amd64-avx-mpx.o. - (srv_amd64_linux_regobj): Add amd64-avx-mpx-linux.o. - (srv_i386_xmlfiles): Add i386/i386-avx-mpx.xml. - (srv_amd64_xmlfiles): Add i386/amd64-avx-mpx.xml. - (srv_i386_linux_xmlfiles): Add i386/i386-avx-mpx-linux.xml. - (srv_amd64_linux_xmlfiles): Add i386/amd64-avx-mpx-linux.xml. - (ipa_i386_linux_regobj): Add i386-avx-mpx-linux-ipa.o. - (ipa_amd64_linux_regobj): Add amd64-avx-mpx-linux-ipa.o. - * linux-x86-low.c (x86_linux_read_description): Add case for - X86_XSTATE_AVX_MPX_MASK. - (x86_get_ipa_tdesc_idx): Add cases for avx_mpx. - (initialize_low_arch): Call init_registers_amd64_avx_mpx_linux and - init_registers_i386_avx_mpx_linux. - * linux-i386-ipa.c (get_ipa_tdesc): Add case for avx_mpx. - (initialize_low_tracepoint): Call - init_registers_i386_avx_mpx_linux. - * linux-amd64-ipa.c (get_ipa_tdesc): Add case for avx_mpx. - (initialize_low_tracepoint): Call - init_registers_amd64_avx_mpx_linux. - * linux-x86-tdesc.h (X86_TDESC_AVX_MPX): New enum value. - (init_registers_amd64_avx_mpx_linux, tdesc_amd64_avx_mpx_linux) - (init_registers_i386_avx_mpx_linux, tdesc_i386_avx_mpx_linux): New - declarations. - -2016-04-18 Pedro Alves <palves@redhat.com> - - * configure: Regenerate. - -2016-04-13 Antoine Tremblay <antoine.tremblay@ericsson.com> - - * linux-aarch64-low.c (aarch64_emit_add): Switch x1 and x0. - (aarch64_emit_sub): Likewise. - -2016-04-12 Pedro Alves <palves@redhat.com> - - * utils.c (prepare_to_throw_exception): Delete. - -2016-04-05 Simon Marchi <simon.marchi@ericsson.com> - - * Makefile.in ($(IPA_LIB)): Set SONAME of the IPA lib. - -2016-04-05 Marcin KoÅ›cielnicki <koriakin@0x04.net> - - * tracepoint.c (getauxval): Move to #ifdef IN_PROCESS_AGENT. - -2016-04-03 Marcin KoÅ›cielnicki <koriakin@0x04.net> - - * linux-aarch64-ipa.c: Add <elf.h> include. - * linux-ppc-ipa.c: Add <elf.h> include. - * linux-s390-ipa.c: Add <elf.h> include. - -2016-03-31 Marcin KoÅ›cielnicki <koriakin@0x04.net> - - * tracepoint.c (gdb_collect_ptr): Remove const qualifier. - (get_raw_reg_ptr): Likewise. - (get_trace_state_variable_value_ptr): Likewise. - (set_trace_state_variable_value_ptr): Likewise. - (initialize_tracepoint): Cast alloc_jump_pad_buffer result to - char *. - -2016-03-31 Wei-cheng Wang <cole945@gmail.com> - Marcin KoÅ›cielnicki <koriakin@0x04.net> - - PR/17221 - * linux-ppc-low.c (emit_insns): New function. - (__EMIT_ASM, _EMIT_ASM, EMIT_ASM): New macros. - (ppc_emit_prologue): New function. - (ppc_emit_epilogue): New function. - (ppc_emit_add): New function. - (ppc_emit_sub): New function. - (ppc_emit_mul): New function. - (ppc_emit_lsh): New function. - (ppc_emit_rsh_signed): New function. - (ppc_emit_rsh_unsigned): New function. - (ppc_emit_ext): New function. - (ppc_emit_zero_ext): New function. - (ppc_emit_log_not): New function. - (ppc_emit_bit_and): New function. - (ppc_emit_bit_or): New function. - (ppc_emit_bit_xor): New function. - (ppc_emit_bit_not): New function. - (ppc_emit_equal): New function. - (ppc_emit_less_signed): New function. - (ppc_emit_less_unsigned): New function. - (ppc_emit_ref): New function. - (ppc_emit_const): New function. - (ppc_emit_reg): New function. - (ppc_emit_pop): New function. - (ppc_emit_stack_flush): New function. - (ppc_emit_swap): New function. - (ppc_emit_stack_adjust): New function. - (ppc_emit_call): New function. - (ppc_emit_int_call_1): New function. - (ppc_emit_void_call_2): New function. - (ppc_emit_if_goto): New function. - (ppc_emit_goto): New function. - (ppc_emit_eq_goto): New function. - (ppc_emit_ne_goto): New function. - (ppc_emit_lt_goto): New function. - (ppc_emit_le_goto): New function. - (ppc_emit_gt_goto): New function. - (ppc_emit_ge_goto): New function. - (ppc_write_goto_address): New function. - (ppc_emit_ops_impl): New static variable. - (ppc64v1_emit_prologue): New function. - (ppc64v2_emit_prologue): New function. - (ppc64_emit_epilogue): New function. - (ppc64_emit_add): New function. - (ppc64_emit_sub): New function. - (ppc64_emit_mul): New function. - (ppc64_emit_lsh): New function. - (ppc64_emit_rsh_signed): New function. - (ppc64_emit_rsh_unsigned): New function. - (ppc64_emit_ext): New function. - (ppc64_emit_zero_ext): New function. - (ppc64_emit_log_not): New function. - (ppc64_emit_bit_and): New function. - (ppc64_emit_bit_or): New function. - (ppc64_emit_bit_xor): New function. - (ppc64_emit_bit_not): New function. - (ppc64_emit_equal): New function. - (ppc64_emit_less_signed): New function. - (ppc64_emit_less_unsigned): New function. - (ppc64_emit_ref): New function. - (ppc64_emit_const): New function. - (ppc64v1_emit_reg): New function. - (ppc64v2_emit_reg): New function. - (ppc64_emit_pop): New function. - (ppc64_emit_stack_flush): New function. - (ppc64_emit_swap): New function. - (ppc64v1_emit_call): New function. - (ppc64v2_emit_call): New function. - (ppc64v1_emit_int_call_1): New function. - (ppc64v2_emit_int_call_1): New function. - (ppc64v1_emit_void_call_2): New function. - (ppc64v2_emit_void_call_2): New function. - (ppc64_emit_if_goto): New function. - (ppc64_emit_eq_goto): New function. - (ppc64_emit_ne_goto): New function. - (ppc64_emit_lt_goto): New function. - (ppc64_emit_le_goto): New function. - (ppc64_emit_gt_goto): New function. - (ppc64_emit_ge_goto): New function. - (ppc64v1_emit_ops_impl): New static variable. - (ppc64v2_emit_ops_impl): New static variable. - (ppc_emit_ops): New function. - (linux_low_target): Wire in ppc_emit_ops. - -2016-03-31 Wei-cheng Wang <cole945@gmail.com> - Marcin KoÅ›cielnicki <koriakin@0x04.net> - - PR/17221 - * Makefile.in: Add powerpc-*-ipa.o - * configure.srv: Add ipa_obj for powerpc*-linux. - * linux-ppc-ipa.c: New file. - * linux-ppc-low.c: Added linux-ppc-tdesc.h, ax.h, tracepoint.h - includes. - (PPC_FIELD): New macro. - (PPC_SEXT): New macro. - (PPC_OP6): New macro. - (PPC_BO): New macro. - (PPC_LI): New macro. - (PPC_BD): New macro. - (init_registers_*): Move prototype to linux-ppc-tdesc.h. - (tdesc_*): Move declaration to linux-ppc-tdesc.h. - (ppc_get_hwcap): Rename to ppc_get_auxv and add type parameter. - (ppc_get_thread_area): New function. - (is_elfv2_inferior): New function. - (gen_ds_form): New function. - (GEN_STD): New macro. - (GEN_STDU): New macro. - (GEN_LD): New macro. - (GEN_LDU): New macro. - (gen_d_form): New function. - (GEN_ADDI): New macro. - (GEN_ADDIS): New macro. - (GEN_LI): New macro. - (GEN_LIS): New macro. - (GEN_ORI): New macro. - (GEN_ORIS): New macro. - (GEN_LWZ): New macro. - (GEN_STW): New macro. - (GEN_STWU): New macro. - (gen_xfx_form): New function. - (GEN_MFSPR): New macro. - (GEN_MTSPR): New macro. - (GEN_MFCR): New macro. - (GEN_MTCR): New macro. - (GEN_SYNC): New macro. - (GEN_LWSYNC): New macro. - (gen_x_form): New function. - (GEN_OR): New macro. - (GEN_MR): New macro. - (GEN_LWARX): New macro. - (GEN_STWCX): New macro. - (GEN_CMPW): New macro. - (gen_md_form): New function. - (GEN_RLDICL): New macro. - (GEN_RLDICR): New macro. - (gen_i_form): New function. - (GEN_B): New macro. - (GEN_BL): New macro. - (gen_b_form): New function. - (GEN_BNE): New macro. - (GEN_LOAD): New macro. - (GEN_STORE): New macro. - (gen_limm): New function. - (gen_atomic_xchg): New function. - (gen_call): New function. - (ppc_relocate_instruction): New function. - (ppc_install_fast_tracepoint_jump_pad): New function. - (ppc_get_min_fast_tracepoint_insn_len): New function. - (ppc_get_ipa_tdesc_idx): New function. - (the_low_target): Wire in the new functions. - (initialize_low_arch) [!__powerpc64__]: Don'it initialize 64-bit - tdescs. - * linux-ppc-tdesc.h: New file. - -2016-03-31 Marcin KoÅ›cielnicki <koriakin@0x04.net> - - * linux-aarch64-ipa.c: Add <sys/mman.h> and <sys/auxv.h> includes. - (alloc_jump_pad_buffer): New function. - * linux-amd64-ipa.c: Add <sys/mman.h> include. - (alloc_jump_pad_buffer): New function. - * linux-i386-ipa.c (alloc_jump_pad_buffer): New function. - * linux-s390-ipa.c: Add <sys/mman.h> and <sys/auxv.h> includes. - (alloc_jump_pad_buffer): New function. - * tracepoint.c (getauxval) [!HAVE_GETAUXVAL]: New function. - (initialize_tracepoint): Delegate to alloc_jump_pad_buffer. - * tracepoint.h (alloc_jump_pad_buffer): New prototype. - (getauxval) [!HAVE_GETAUXVAL]: New prototype. - -2016-03-30 Marcin KoÅ›cielnicki <koriakin@0x04.net> - - * linux-aarch64-ipa.c: Rename gdb_agent_get_raw_reg to get_raw_reg. - * linux-amd64-ipa.c: Likewise. - * linux-i386-ipa.c: Likewise. - * linux-s390-ipa.c: Likewise. - * tracepoint.c: IPA-export gdb_collect_ptr instead of gdb_collect, - ditto for get_raw_reg_ptr, get_trace_state_variable_value_ptr, - set_trace_state_variable_value_ptr. - (struct ipa_sym_addresses): Likewise. - (symbol_list): Likewise. - (install_fast_tracepoint): Dereference gdb_collect_ptr instead of - accessing gdb_collect directly. - (gdb_collect_ptr_type): New typedef. - (get_raw_reg_ptr_type): New typedef. - (get_trace_state_variable_value_ptr_type): New typedef. - (set_trace_state_variable_value_ptr_type): New typedef. - (gdb_collect_ptr): New global. - (get_raw_reg_ptr): New global. - (get_trace_state_variable_value_ptr): New global. - (set_trace_state_variable_value_ptr): New global. - (get_raw_reg_func_addr): Dereference get_raw_reg_ptr instead of - accessing get_raw_reg directly. - (get_get_tsv_func_addr): Likewise for - get_trace_state_variable_value_ptr. - (get_set_tsv_func_addr): Likewise for - set_trace_state_variable_value_ptr. - * tracepoint.h: Rename gdb_agent_get_raw_reg to get_raw_reg. - -2016-03-30 Simon Marchi <simon.marchi@ericsson.com> - - * tracepoint.c (cmd_qtenable_disable): Remove whitespace. - -2016-03-30 Marcin KoÅ›cielnicki <koriakin@0x04.net> - - * remote-utils.c (look_up_one_symbol): Remove own_buf, handle 'v' - packets. - (relocate_instruction): Remove own_buf. - * server.c (own_buf): Make global. - (handle_v_requests): Make global. - * server.h (own_buf): New declaration. - (handle_v_requests): New prototype. - -2016-03-29 Marcin KoÅ›cielnicki <koriakin@0x04.net> - - PR 18377 - * linux-s390-low.c (add_insns): New function. - (s390_emit_prologue): New function. - (s390_emit_epilogue): New function. - (s390_emit_add): New function. - (s390_emit_sub): New function. - (s390_emit_mul): New function. - (s390_emit_lsh): New function. - (s390_emit_rsh_signed): New function. - (s390_emit_rsh_unsigned): New function. - (s390_emit_ext): New function. - (s390_emit_log_not): New function. - (s390_emit_bit_and): New function. - (s390_emit_bit_or): New function. - (s390_emit_bit_xor): New function. - (s390_emit_bit_not): New function. - (s390_emit_equal): New function. - (s390_emit_less_signed): New function. - (s390_emit_less_unsigned): New function. - (s390_emit_ref): New function. - (s390_emit_if_goto): New function. - (s390_emit_goto): New function. - (s390_write_goto_address): New function. - (s390_emit_litpool): New function. - (s390_emit_const): New function. - (s390_emit_call): New function. - (s390_emit_reg): New function. - (s390_emit_pop): New function. - (s390_emit_stack_flush): New function. - (s390_emit_zero_ext): New function. - (s390_emit_swap): New function. - (s390_emit_stack_adjust): New function. - (s390_emit_set_r2): New function. - (s390_emit_int_call_1): New function. - (s390_emit_void_call_2): New function. - (s390_emit_eq_goto): New function. - (s390_emit_ne_goto): New function. - (s390_emit_lt_goto): New function. - (s390_emit_le_goto): New function. - (s390_emit_gt_goto): New function. - (s390_emit_ge_goto): New function. - (s390x_emit_prologue): New function. - (s390x_emit_epilogue): New function. - (s390x_emit_add): New function. - (s390x_emit_sub): New function. - (s390x_emit_mul): New function. - (s390x_emit_lsh): New function. - (s390x_emit_rsh_signed): New function. - (s390x_emit_rsh_unsigned): New function. - (s390x_emit_ext): New function. - (s390x_emit_log_not): New function. - (s390x_emit_bit_and): New function. - (s390x_emit_bit_or): New function. - (s390x_emit_bit_xor): New function. - (s390x_emit_bit_not): New function. - (s390x_emit_equal): New function. - (s390x_emit_less_signed): New function. - (s390x_emit_less_unsigned): New function. - (s390x_emit_ref): New function. - (s390x_emit_if_goto): New function. - (s390x_emit_const): New function. - (s390x_emit_call): New function. - (s390x_emit_reg): New function. - (s390x_emit_pop): New function. - (s390x_emit_stack_flush): New function. - (s390x_emit_zero_ext): New function. - (s390x_emit_swap): New function. - (s390x_emit_stack_adjust): New function. - (s390x_emit_int_call_1): New function. - (s390x_emit_void_call_2): New function. - (s390x_emit_eq_goto): New function. - (s390x_emit_ne_goto): New function. - (s390x_emit_lt_goto): New function. - (s390x_emit_le_goto): New function. - (s390x_emit_gt_goto): New function. - (s390x_emit_ge_goto): New function. - (s390_emit_ops): New function. - (struct linux_target_ops): Fill in emit_ops hook. - -2016-03-29 Marcin KoÅ›cielnicki <koriakin@0x04.net> - - PR 18377 - * Makefile.in: Add s390 IPA files. - * configure.srv: Build IPA for s390. - * linux-s390-ipa.c: New file. - * linux-s390-low.c: New includes - inttypes.h and linux-s390-tdesc.h. - (init_registers_s390_linux32): Move declaration to linux-s390-tdesc.h. - (tdesc_s390_linux32): Likewise. - (init_registers_s390_linux32v1): Likewise. - (tdesc_s390_linux32v1): Likewise. - (init_registers_s390_linux32v2): Likewise. - (tdesc_s390_linux32v2): Likewise. - (init_registers_s390_linux64): Likewise. - (tdesc_s390_linux64): Likewise. - (init_registers_s390_linux64v1): Likewise. - (tdesc_s390_linux64v1): Likewise. - (init_registers_s390_linux64v2): Likewise. - (tdesc_s390_linux64v2): Likewise. - (init_registers_s390_te_linux64): Likewise. - (tdesc_s390_te_linux64): Likewise. - (init_registers_s390_vx_linux64): Likewise. - (tdesc_s390_vx_linux64): Likewise. - (init_registers_s390_tevx_linux64): Likewise. - (tdesc_s390_tevx_linux64): Likewise. - (init_registers_s390x_linux64): Likewise. - (tdesc_s390x_linux64): Likewise. - (init_registers_s390x_linux64v1): Likewise. - (tdesc_s390x_linux64v1): Likewise. - (init_registers_s390x_linux64v2): Likewise. - (tdesc_s390x_linux64v2): Likewise. - (init_registers_s390x_te_linux64): Likewise. - (tdesc_s390x_te_linux64): Likewise. - (init_registers_s390x_vx_linux64): Likewise. - (tdesc_s390x_vx_linux64): Likewise. - (init_registers_s390x_tevx_linux64): Likewise. - (tdesc_s390x_tevx_linux64): Likewise. - (have_hwcap_s390_vx): New static variable. - (s390_arch_setup): Fill have_hwcap_s390_vx. - (s390_get_thread_area): New function. - (s390_ft_entry_gpr_esa): New const. - (s390_ft_entry_gpr_zarch): New const. - (s390_ft_entry_misc): New const. - (s390_ft_entry_fr): New const. - (s390_ft_entry_vr): New const. - (s390_ft_main_31): New const. - (s390_ft_main_64): New const. - (s390_ft_exit_fr): New const. - (s390_ft_exit_vr): New const. - (s390_ft_exit_misc): New const. - (s390_ft_exit_gpr_esa): New const. - (s390_ft_exit_gpr_zarch): New const. - (append_insns): New function. - (s390_relocate_instruction): New function. - (s390_install_fast_tracepoint_jump_pad): New function. - (s390_get_min_fast_tracepoint_insn_len): New function. - (s390_get_ipa_tdesc_idx): New function. - (struct linux_target_ops): Wire in the above functions. - (initialize_low_arch) [!__s390x__]: Don't initialize s390x tdescs. - * linux-s390-tdesc.h: New file. - -2016-03-29 Marcin KoÅ›cielnicki <koriakin@0x04.net> - - * linux-s390-low.c (s390_supports_tracepoints): New function. - (struct linux_target_ops): Fill supports_tracepoints hook. - -2016-03-18 Yao Qi <yao.qi@linaro.org> - - * linux-low.c (lwp_signal_can_be_delivered): New function. - (linux_resume_one_lwp_throw): Use lwp_signal_can_be_delivered. - -2016-03-18 Yao Qi <yao.qi@linaro.org> - - * linux-low.c (linux_resume_one_lwp_throw): Set 'signal' to - 0 if signal is enqueued. Remove 'signal' from one debugging - message. Move one debugging message to some lines below. - Remove code setting 'signal' to 0. - -2016-03-18 Yao Qi <yao.qi@linaro.org> - - * linux-low.c (linux_low_filter_event): Remove redundant - WIFSTOPPED check together with linux_wstatus_maybe_breakpoint. - -2016-03-09 Marcin KoÅ›cielnicki <koriakin@0x04.net> - - * linux-ppc-low.c (ppc_supports_tracepoints): New function. - (struct linux_target_ops): Wire in the above. - -2016-03-03 Yao Qi <yao.qi@linaro.org> - - * linux-low.c: Update comments to start_step_over. - -2016-03-03 Yao Qi <yao.qi@linaro.org> - - PR server/19736 - * linux-low.c (handle_extended_wait): Set child suspended - if event_lwp->bp_reinsert isn't zero. - -2016-03-02 Yao Qi <yao.qi@linaro.org> - - * linux-low.c (linux_resume_one_lwp_throw): Replace code with - enqueue_pending_signal. - -2016-03-02 Marcin KoÅ›cielnicki <koriakin@0x04.net> - - * tracepoint.c (cmd_qtstart): Only set ipa_tdesc_idx if agent - is actually loaded. - -2016-02-25 Marcin KoÅ›cielnicki <koriakin@0x04.net> - - * linux-s390-low.c (s390_num_regs_3264): Define on 31-bit too. - (s390_regmap_3264) [!__s390x__]: New global. - (s390_collect_ptrace_register): Skip map entries containing -1. - (s390_supply_ptrace_register): Ditto. - (s390_fill_gprs_high): New function. - (s390_store_gprs_high): New function. - (s390_regsets): Add NT_S390_HIGH_GPRS. - (s390_get_hwcap): Enable on 31-bit. - (have_hwcap_s390_high_gprs): Enable on 31-bit. - (s390_arch_setup): Enable detection of high GPRs, TDB, VX on 31-bit. - Detect NT_S390_HIGH_GPRS. - (s390_usrregs_info_3264): Enable on 31-bit. - (s390_regs_info): Enable regs_info_3264 on 31-bit. - (initialize_low_arch): Initialize s390_regsets_info_3264 on 31-bit. - -2016-02-25 Marcin KoÅ›cielnicki <koriakin@0x04.net> - - PR gdb/13808 - * Makefile.in: Add i386-*-linux-ipa.o and amd64-*-linux-ipa.o. - * configure.srv: Ditto. - * linux-aarch64-ipa.c (get_ipa_tdesc): New function. - (initialize_low_tracepoint): Remove ipa_tdesc assignment. - * linux-amd64-ipa.c: Add "linux-x86-tdesc.h" include. - (init_registers_amd64_linux): Remove prototype. - (tdesc_amd64_linux): Remove declaration. - (get_ipa_tdesc): New function. - (initialize_low_tracepoint): Remove ipa_tdesc assignment, - initialize remaining tdescs. - * linux-i386-ipa.c: Add "linux-x86-tdesc.h" include. - (init_registers_i386_linux): Remove prototype. - (tdesc_i386_linux): Remove declaration. - (get_ipa_tdesc): New function. - (initialize_low_tracepoint): Remove ipa_tdesc assignment, - initialize remaining tdescs. - * linux-low.c (linux_get_ipa_tdesc_idx): New function. - (linux_target_ops): wire in linux_get_ipa_tdesc_idx. - * linux-low.h (struct linux_target_ops): Add get_ipa_tdesc_idx. - * linux-x86-low.c: Move tdesc declarations to linux-x86-tdesc.h. - (x86_get_ipa_tdesc_idx): New function. - (the_low_target): Wire in x86_get_ipa_tdesc_idx. - * linux-x86-tdesc.h: New file. - * target.h (struct target_ops): Add get_ipa_tdesc_idx. - (target_get_ipa_tdesc_idx): New macro. - * tracepoint.c (ipa_tdesc_idx): New macro. - (struct ipa_sym_addresses): Add addr_ipa_tdesc_idx. - (symbol_list): Add ipa_tdesc_idx. - (cmd_qtstart): Write ipa_tdesc_idx in the target. - (ipa_tdesc): Remove. - (ipa_tdesc_idx): New variable. - (get_context_regcache): Use get_ipa_tdesc. - (gdb_collect): Ditto. - (gdb_probe): Ditto. - * tracepoint.h (get_ipa_tdesc): New prototype. - (ipa_tdesc): Remove. - -2016-02-24 Pedro Alves <palves@redhat.com> - - * linux-low.c (check_stopped_by_breakpoint): Rename to ... - (save_stop_reason): ... this. Use GDB_ARCH_IS_TRAP_HWBKPT and - handle ambiguous GDB_ARCH_IS_TRAP_BRKPT / GDB_ARCH_IS_TRAP_HWBKPT. - Factor out common code between the USE_SIGTRAP_SIGINFO and - !USE_SIGTRAP_SIGINFO blocks. - (linux_low_filter_event): Call save_stop_reason instead of - check_stopped_by_breakpoint and check_stopped_by_watchpoint. - Update comments. - (linux_wait_1): Update comments. - -2016-02-24 Wei-cheng Wang <cole945@gmail.com> - - * linux-ppc-low.c (ppc_supports_z_point_type): New function: - (ppc_insert_point, ppc_remove_point): Insert/remove z-packet breakpoints. - (ppc64_emit_ops_vector): Add target ops - ppc_supports_z_point_type, - ppc_insert_point, ppc_remove_point. - -2016-02-17 Marcin KoÅ›cielnicki <koriakin@0x04.net> - - * linux-s390-low.c (s390_supports_z_point_type): New function. - (struct linux_target_ops): Wire s390_supports_z_point_type in. - -2016-02-16 Yao Qi <yao.qi@linaro.org> - - * linux-arm-low.c (get_next_pcs_syscall_next_pc): Remove argument - PC. Get pc from regcache_read_pc. - -2016-02-12 Yao Qi <yao.qi@linaro.org> - - * linux-aarch64-low.c (aarch64_get_pc): Call linux_get_pc_64bit - or linux_get_pc_32bit. - (aarch64_set_pc): Call linux_set_pc_64bit or linux_set_pc_32bit. - -2016-02-12 Yao Qi <yao.qi@linaro.org> - - * linux-arm-low.c (get_next_pcs_ops): Initialize it with - arm_linux_get_next_pcs_fixup. - -2016-02-12 Marcin KoÅ›cielnicki <koriakin@0x04.net> - - * tracepoint.c (x_tracepoint_action_download): Change - write_inferior_data_ptr to write_inferior_data_pointer. - (cmd_qtstart): Likewise. - (write_inferior_data_ptr): Remove. - (download_agent_expr): Change write_inferior_data_ptr to - write_inferior_data_pointer. - (download_tracepoint_1): Likewise. - (download_tracepoint): Likewise. - (download_trace_state_variables): Likewise. - -2016-02-11 Wei-cheng Wang <cole945@gmail.com> - Marcin KoÅ›cielnicki <koriakin@0x04.net> - - * tracepoint.c (struct tracepoint_action_ops): Remove. - (struct tracepoint_action): Remove ops. - (m_tracepoint_action_download, r_tracepoint_action_download) - (x_tracepoint_action_download, l_tracepoint_action_download): Adjust - size and offset accordingly. - (m_tracepoint_action_ops, r_tracepoint_action_ops) - (x_tracepoint_action_ops, l_tracepoint_action_ops): Remove. - (tracepoint_action_send, tracepoint_action_download): New functions. - Helpers for trace action handlers. - (add_tracepoint_action): Remove setup actions ops. - (download_tracepoint_1, tracepoint_send_agent): Call helper functions. - -2016-02-10 Yao Qi <yao.qi@linaro.org> - - * regcache.c (regcache_raw_read_unsigned): Clear *VAL. - -2016-02-09 Simon Marchi <simon.marchi@ericsson.com> - - * configure.ac: Use AC_CONFIG_FILES instead of passing arguments - to AC_OUTPUT. - * configure: Regenerate. - -2016-02-09 Simon Marchi <simon.marchi@ericsson.com> - - * linux-aarch64-low.c (aarch64_linux_siginfo_fixup): Change - void * to gdb_byte *. - * linux-low.c (siginfo_fixup): Likewise. - (linux_xfer_siginfo): Likewise. - * linux-low.h (struct linux_target_ops) <siginfo_fixup>: - Likewise. - * linux-x86-low.c (x86_siginfo_fixup): Likewise. - -2016-02-02 Walfred Tedeschi <walfred.tedeschi@intel.com> - - * configure.srv (x86_64-*-linux*): Add amd64-linux-siginfo.o - to srv_tgtobj. - (i[34567]86-*-linux*): Add amd64-linux-siginfo.o - to srv_tgtobj. - * linux-x86-low.c [__x86_64__]: Include - "nat/amd64-linux-siginfo.h". - (compat_siginfo_from_siginfo, siginfo_from_compat_siginfo) - (compat_x32_siginfo_from_siginfo, siginfo_from_compat_x32_siginfo) - (compat_timeval, compat_sigval, compat_x32_clock, cpt_si_pid) - (cpt_si_uid, cpt_si_timerid, cpt_si_overrun, cpt_si_status) - (cpt_si_utime, cpt_si_stime, cpt_si_ptr, cpt_si_addr, cpt_si_band) - (cpt_si_fd, si_timerid, si_overrun): Move from - nat/amd64-linux-siginfo.c. - * Makefile.in (amd64-linux-siginfo.o:): New rule. - -2016-01-28 Simon Marchi <simon.marchi@ericsson.com> - - * server.c (skip_to_semicolon): Remove. - (process_point_options): Use strchrnul instead of - skip_to_semicolon. - -2016-01-26 Yao Qi <yao.qi@linaro.org> - - * linux-arm-low.c (arm_gdbserver_get_next_pcs): Remove argument pc. - * linux-low.c (install_software_single_step_breakpoints): Don't - call regcache_read_pc. - * linux-low.h (struct linux_target_ops) <get_next_pcs>: Remove - argument pc. - -2016-01-26 Yao Qi <yao.qi@linaro.org> - - * linux-low.c (install_software_single_step_breakpoints): Call - regcache_read_pc instead of get_pc. - -2016-01-26 Yao Qi <yao.qi@linaro.org> - - * remote-utils.c (remote_close) [!USE_WIN32API]: Ignore SIGIO. - (unblock_async_io): Rename to ... - (block_unblock_async_io): ... it. New function. - (enable_async_io): Don't install SIGIO handler. Unblock it - instead. - (disable_async_io): Don't ignore SIGIO. Block it instead. - (initialize_async_io): Install SIGIO handler. Don't call - unblock_async_io. - -2016-01-26 Yao Qi <yao.qi@linaro.org> - - * remote-utils.c (getpkt): If the buffer isn't empty, and the - first character is '\003', call *the_target->request_interrupt. - -2016-01-25 Yao Qi <yao.qi@linaro.org> - - * remote-utils.c (new_thread_notify): Remove. - (dead_thread_notify): Likewise. - * remote-utils.h (new_thread_notify): Remove declaration. - (dead_thread_notify): Likewise. - -2016-01-23 Marcin KoÅ›cielnicki <koriakin@0x04.net> - - * gdb.trace/pending.exp: Fix expected message on continue. - -2016-01-22 Marcin KoÅ›cielnicki <koriakin@0x04.net> - - * tracepoint.c (write_inferior_data_ptr): Cast to uintptr_t, so that - it works properly on big-endian machines where sizeof (CORE_ADDR) - != sizeof (void *). - -2016-01-21 Pedro Alves <palves@redhat.com> - - * Makefile.in (COMPILER_CFLAGS, CXXFLAGS): New. - (INTERNAL_CFLAGS_BASE): Use COMPILER_CFLAGS instead of CFLAGS. - * configure: Regenerate. - -2016-01-21 Yao Qi <yao.qi@linaro.org> - - * linux-arm-low.c (arm_sigreturn_next_pc): Add parameter - is_thumb and set it according to CPSR saved on the stack. - (get_next_pcs_syscall_next_pc): Pass is_thumb to - arm_sigreturn_next_pc. - -2016-01-18 Yao Qi <yao.qi@linaro.org> - - * linux-low.c (linux_set_pc_64bit): New function. - (linux_get_pc_64bit): New function. - * linux-low.h (linux_set_pc_64bit, linux_get_pc_64bit): - Declare. - * linux-sparc-low.c (debug_threads): Remove declaration. - (sparc_get_pc): Remove. - (the_low_target): Use linux_get_pc_64bit instead of - sparc_get_pc. - * linux-tile-low.c (tile_get_pc, tile_set_pc): Remove. - (the_low_target): Use linux_get_pc_64bit and - linux_set_pc_64bit. - -2016-01-18 Yao Qi <yao.qi@linaro.org> - - * linux-arm-low.c (debug_threads): Remove declaration. - (arm_get_pc, arm_set_pc): Remove. - (the_low_target): Use linux_get_pc_32bit and - linux_set_pc_32bit. - * linux-bfin-low.c (bfin_get_pc, bfin_set_pc): Remove. - (the_low_target): Use linux_get_pc_32bit and - linux_set_pc_32bit. - * linux-cris-low.c (debug_threads): Remove declaration. - (cris_get_pc, cris_set_pc,): Remove. - (the_low_target): Use linux_get_pc_32bit and - linux_set_pc_32bit. - * linux-crisv32-low.c (debug_threads): Remove declaration. - (cris_get_pc, cris_set_pc): Remove. - (the_low_target): Use linux_get_pc_32bit and - linux_set_pc_32bit. - * linux-low.c: Include inttypes.h. - (linux_get_pc_32bit, linux_set_pc_32bit): New functions. - * linux-low.h (linux_get_pc_32bit, linux_set_pc_32bit): Declare. - * linux-m32r-low.c (m32r_get_pc, m32r_set_pc): Remove. - (the_low_target): Use linux_get_pc_32bit and - linux_set_pc_32bit. - * linux-m68k-low.c (m68k_get_pc, m68k_set_pc): Remove. - (the_low_target): Use linux_get_pc_32bit and - linux_set_pc_32bit. - * linux-nios2-low.c (nios2_get_pc, nios2_set_pc): Remove. - (the_low_target): Use linux_get_pc_32bit and - linux_set_pc_32bit. - * linux-sh-low.c (sh_get_pc, sh_set_pc): Remove. - (the_low_target): Use linux_get_pc_32bit and - linux_set_pc_32bit. - * linux-xtensa-low.c (xtensa_get_pc, xtensa_set_pc): Remove. - (the_low_target): Use linux_get_pc_32bit and - linux_set_pc_32bit. - -2016-01-18 Gary Benson <gbenson@redhat.com> - - * configure.ac (AC_FUNC_FORK): New check. - * config.in: Regenerate. - * configure: Likewise. - -2016-01-14 Yao Qi <yao.qi@linaro.org> - - * linux-aarch32-low.c (thumb2_breakpoint): Make it static. - * linux-aarch32-low.h (thumb2_breakpoint): Remove declaration. - * linux-arm-low.c (arm_gdbserver_get_next_pcs): Pass 1 to - arm_get_next_pcs_ctor. - -2016-01-12 Josh Stone <jistone@redhat.com> - Philippe Waroquiers <philippe.waroquiers@skynet.be> - - * inferiors.h: Include "gdb_vecs.h". - (struct process_info): Add syscalls_to_catch. - * inferiors.c (remove_process): Free syscalls_to_catch. - * remote-utils.c (prepare_resume_reply): Report syscall_entry and - syscall_return stops. - * server.h (UNKNOWN_SYSCALL, ANY_SYSCALL): Define. - * server.c (handle_general_set): Handle QCatchSyscalls. - (handle_query): Report support for QCatchSyscalls. - * target.h (struct target_ops): Add supports_catch_syscall. - (target_supports_catch_syscall): New macro. - * linux-low.h (struct linux_target_ops): Add get_syscall_trapinfo. - (struct lwp_info): Add syscall_state. - * linux-low.c (handle_extended_wait): Mark syscall_state as an entry. - Maintain syscall_state and syscalls_to_catch across exec. - (get_syscall_trapinfo): New function, proxy to the_low_target. - (linux_low_ptrace_options): Enable PTRACE_O_TRACESYSGOOD. - (linux_low_filter_event): Toggle syscall_state entry/return for - syscall traps, and set it ignored for all others. - (gdb_catching_syscalls_p): New function. - (gdb_catch_this_syscall_p): New function. - (linux_wait_1): Handle SYSCALL_SIGTRAP. - (linux_resume_one_lwp_throw): Add PTRACE_SYSCALL possibility. - (linux_supports_catch_syscall): New function. - (linux_target_ops): Install it. - * linux-x86-low.c (x86_get_syscall_trapinfo): New function. - (the_low_target): Install it. - -2016-01-12 Mike Frysinger <vapier@gentoo.org> - - * acinclude.m4: Include new ../warning.m4 file. - * configure: Regenerated. - * configure.ac: Replace all warning logic with AM_GDB_WARNINGS. - -2016-01-12 Mike Frysinger <vapier@gentoo.org> - - * ax.c (is_goto_target): Mark static. - * linux-low.c (register_addr): Likewise. - (linux_fetch_registers, linux_store_registers): Likewise. - * mem-break.c (any_persistent_commands): Fix old prototype. - (add_commands_to_breakpoint): Mark static. - * regcache.c (find_register_by_name): Delete unused func. - * remote-utils.c (hex_or_minus_one): Mark static. - * server.c (monitor_show_help): Mark static. - (handle_query, handle_v_cont, handle_v_attach, handle_v_kill, - handle_v_requests): Likewise. - -2016-01-12 Pedro Alves <palves@redhat.com> - - Remove use of the registered trademark symbol throughout. - -2016-01-08 Yao Qi <yao.qi@linaro.org> - - * remote-utils.c (getpkt): If c is '\003', call target hook - request_interrupt. - -2016-01-06 Yao Qi <yao.qi@linaro.org> - - * linux-aarch32-low.h (arm_abi_breakpoint): Move to - linux-aarch32-low.c. - (arm_eabi_breakpoint, arm_breakpoint): Likewise. - (arm_breakpoint_len, thumb_breakpoint_len): Likewise. - (thumb2_breakpoint, thumb2_breakpoint_len): Likewise. - (thumb2_breakpoint): Declare. - * linux-aarch32-low.c (arm_abi_breakpoint): Moved from - linux-aarch32-low.h. - (arm_eabi_breakpoint, arm_breakpoint): Likewise. - (arm_breakpoint_len, thumb_breakpoint_len): Likewise. - (thumb2_breakpoint, thumb2_breakpoint_len): Likewise. - -2016-01-01 Joel Brobecker <brobecker@adacore.com> - - * gdbreplay.c (gdbreplay_version): Change copyright year in - version message. - * server.c (gdbserver_version): Likewise. - -2015-12-28 Patrick Palka <patrick@parcs.ath.cx> - - * server.c (crc32_table): Delete. - (crc32): Use libiberty's xcrc32 function. - -2015-12-22 Joel Brobecker <brobecker@adacore.com> - - * lynx-low.c (lynx_delete_thread_callback): New function. - (lynx_mourn): Properly delete our process and all of its - threads. Remove call to clear_inferiors. - -2015-12-22 Joel Brobecker <brobecker@adacore.com> - - * target.c (thread_search_callback): Add check that - the thread_stopped target callback is not NULL before - calling it. - -2015-12-21 Yao Qi <yao.qi@linaro.org> - - * linux-aarch32-low.h [__aarch64__]: Use arm_abi_breakpoint - arm breakpoint. - -2015-12-18 Antoine Tremblay <antoine.tremblay@ericsson.com> - - * server.c (handle_query): Call target_supports_software_single_step. - -2015-12-18 Antoine Tremblay <antoine.tremblay@ericsson.com> - - * linux-low.c (single_step): New function. - (linux_resume_one_lwp_throw): Call single_step. - (start_step_over): Likewise. - -2015-12-18 Antoine Tremblay <antoine.tremblay@ericsson.com> - - * Makefile.in (SFILES): Append arch/arm-linux.c, - arch/arm-get-next-pcs.c. - (arm-linux.o): New rule. - (arm-get-next-pcs.o): New rule. - * configure.srv (arm*-*-linux*): Add arm-get-next-pcs.o, - arm-linux.o. - * linux-aarch32-low.c (arm_abi_breakpoint): Remove macro. Moved - to linux-aarch32-low.c. - (arm_eabi_breakpoint, arm_breakpoint): Likewise. - (arm_breakpoint_len, thumb_breakpoint): Likewise. - (thumb_breakpoint_len, thumb2_breakpoint): Likewise. - (thumb2_breakpoint_len): Likewise. - (arm_is_thumb_mode): Make non-static. - * linux-aarch32-low.h (arm_abi_breakpoint): New macro. Moved - from linux-aarch32-low.c. - (arm_eabi_breakpoint, arm_breakpoint): Likewise. - (arm_breakpoint_len, thumb_breakpoint): Likewise. - (thumb_breakpoint_len, thumb2_breakpoint): Likewise. - (thumb2_breakpoint_len): Likewise. - (arm_is_thumb_mode): New declaration. - * linux-arm-low.c: Include arch/arm-linux.h - aarch/arm-get-next-pcs.h, sys/syscall.h. - (get_next_pcs_ops): New struct. - (get_next_pcs_addr_bits_remove): New function. - (get_next_pcs_is_thumb): New function. - (get_next_pcs_read_memory_unsigned_integer): Likewise. - (arm_sigreturn_next_pc): Likewise. - (get_next_pcs_syscall_next_pc): Likewise. - (arm_gdbserver_get_next_pcs): Likewise. - (struct linux_target_ops) <arm_gdbserver_get_next_pcs>: - Initialize. - * linux-low.h: Move CORE_ADDR vector definition to gdb_vecs.h. - * server.h: Include gdb_vecs.h. - -2015-12-18 Antoine Tremblay <antoine.tremblay@ericsson.com> - - * Makefile.in (SFILES): Append common/common-regcache.c. - (OBS): Append common-regcache.o. - (common-regcache.o): New rule. - * regcache.c (init_register_cache): Initialize cache to - REG_UNAVAILABLE. - (regcache_raw_read_unsigned): New function. - * regcache.h (REG_UNAVAILABLE, REG_VALID): Replaced by shared - register_status enum. - -2015-12-18 Antoine Tremblay <antoine.tremblay@ericsson.com> - - * linux-aarch64-low.c (the_low_targets): Rename - breakpoint_reinsert_addr to get_next_pcs. - * linux-arm-low.c (the_low_targets): Likewise. - * linux-bfin-low.c (the_low_targets): Likewise. - * linux-cris-low.c (the_low_targets): Likewise. - * linux-crisv32-low.c (the_low_targets): Likewise. - * linux-low.c (can_software_single_step): Likewise. - (install_software_single_step_breakpoints): New function. - (start_step_over): Use install_software_single_step_breakpoints. - * linux-low.h: New CORE_ADDR vector. - (struct linux_target_ops) Rename breakpoint_reinsert_addr to - get_next_pcs. - * linux-mips-low.c (the_low_targets): Likewise. - * linux-nios2-low.c (the_low_targets): Likewise. - * linux-sparc-low.c (the_low_targets): Likewise. - -2015-12-17 Pedro Alves <palves@redhat.com> - - * linux-low.c (linux_kill_one_lwp): Remove references to - LinuxThreads. - (kill_lwp): Remove HAVE_TKILL_SYSCALL check. No longer fall back - to 'kill'. - (linux_init_signals): Delete. - (initialize_low): Adjust. - * thread-db.c (thread_db_init): Remove LinuxThreads reference. - -2015-12-16 Pedro Alves <palves@redhat.com> - - * configure.ac (compiler warning flags): When testing a - -Wno-foo option, check whether -Wfoo works instead. - * configure: Regenerate. - -2015-12-11 Don Breazeal <donb@codesourcery.com> - - * server.c (process_serial_event): Don't exit from gdbserver - in remote mode if there are still active inferiors. - -2015-12-11 Yao Qi <yao.qi@linaro.org> - - * linux-aarch64-low.c (aarch64_breakpoint_at): Call - arm_breakpoint_at if the process is 32-bit. - -2015-12-11 Yao Qi <yao.qi@linaro.org> - - * linux-aarch32-low.c [__aarch64__]: Use arm_abi_breakpoint - arm breakpoint. - -2015-12-07 Yao Qi <yao.qi@linaro.org> - - * configure.srv: Append arm.o to srv_tgtobj for - aarch64*-*-linux* target. - * linux-aarch32-low.c (arm_abi_breakpoint): New macro. Moved - from linux-arm-low.c. - (arm_eabi_breakpoint, arm_breakpoint): Likewise. - (arm_breakpoint_len, thumb_breakpoint): Likewise. - (thumb_breakpoint_len, thumb2_breakpoint): Likewise. - (thumb2_breakpoint_len): Likewise. - (arm_is_thumb_mode, arm_breakpoint_at): Likewise. - (arm_breakpoint_kinds): Likewise. - (arm_breakpoint_kind_from_pc): Likewise. - (arm_sw_breakpoint_from_kind): Likewise. - (arm_breakpoint_kind_from_current_state): Likewise. - * linux-aarch32-low.h (arm_breakpoint_kind_from_pc): Declare. - (arm_sw_breakpoint_from_kind): Declare. - (arm_breakpoint_kind_from_current_state): Declare. - (arm_breakpoint_at): Declare. - * linux-aarch64-low.c (aarch64_sw_breakpoint_from_kind): Call - arm_sw_breakpoint_from_kind if process is 32-bit. - (aarch64_breakpoint_kind_from_pc): New function. - (aarch64_breakpoint_kind_from_current_state): New function. - (the_low_target): Initialize fields breakpoint_kind_from_pc - and breakpoint_kind_from_current_state. - * linux-arm-low.c (arm_breakpoint_kinds): Move to - linux-aarch32-low.c. - (arm_abi_breakpoint, arm_eabi_breakpoint): Likewise. - (arm_breakpoint, arm_breakpoint_len): Likewise. - (thumb_breakpoint, thumb_breakpoint_len): Likewise. - (thumb2_breakpoint, thumb2_breakpoint_len): Likewise. - (arm_is_thumb_mode): Likewise. - (arm_breakpoint_at): Likewise. - (arm_breakpoint_kind_from_pc): Likewise. - (arm_sw_breakpoint_from_kind): Likewise. - (arm_breakpoint_kind_from_current_state): Likewise. - - Revert: - 2015-08-04 Yao Qi <yao.qi@linaro.org> - - * linux-aarch64-low.c (aarch64_supports_z_point_type): Return - 0 for Z_PACKET_SW_BP if it may be used in multi-arch debugging. - * server.c (extended_protocol): Remove "static". - * server.h (extended_protocol): Declare it. - -2015-12-04 Josh Stone <jistone@redhat.com> - - * target.h (struct target_ops) <arch_setup>: Rename to ... - (struct target_ops) <post_create_inferior>: ... this. - (target_arch_setup): Rename to ... - (target_post_create_inferior): ... this, calling post_create_inferior. - * server.c (start_inferior): Update target_arch_setup calls to - target_post_create_inferior. - * linux-low.c (linux_low_ptrace_options): Forward declare. - (linux_arch_setup): Update its comment for general use. - (linux_post_create_inferior): New, run arch_setup and setup ptrace. - (struct linux_target_ops): Use linux_post_create_inferior. - * lynx-low.c (struct lynx_target_ops): Update arch_setup stub comment - to post_create_inferior. - * nto-low.c (struct nto_target_ops): Likewise. - * spu-low.c (struct spu_target_ops): Likewise. - * win32-low.c (struct win32_target_ops): Likewise. - -2015-12-03 Antoine Tremblay <antoine.tremblay@ericsson.com> - - * linux-arm-low.c: Remove duplicate arch/arm.h include. - -2015-11-30 Antoine Tremblay <antoine.tremblay@ericsson.com> - - * linux-arm-low.c (arm_reinsert_addr): Remove function. - (struct linux_target_ops <breakpoint_reinsert_addr>: Set to NULL. - * linux-cris-low.c (cris_reinsert_addr> Remove function. - (struct linux_target_ops) <breakpoint_reinsert_addr>: Set to NULL. - * linux-crisv32-low.c (cris_reinsert_addr): Remove function. - (struct linux_target_ops) <breakpoint_reinsert_addr>: Set to NULL. - * linux-mips-low.c (mips_reinsert_addr): Remove function. - (struct linux_target_ops) <breakpoint_reinsert_addr>: Set to NULL. - * linux-nios2-low.c (nios2_reinsert_addr): Remove function. - (struct linux_target_ops) <breakpoint_reinsert_addr>: Set to NULL. - * linux-sparc-low.c (sparc_reinsert_addr): Remove function. - (struct linux_target_ops) <breakpoint_reinsert_addr>: Set to NULL. - -2015-11-30 Antoine Tremblay <antoine.tremblay@ericsson.com> - - * linux-low.c (linux_look_up_symbols): Don't call - linux_supports_traceclone. - * linux-low.h (thread_db_init): Remove use_events argument. - * thread-db.c (thread_db_use_event): Remove global variable. - (struct thread_db) <td_thr_event_enable_p>: Remove field. - (struct thread_db) <td_create_bp>: Remove field. - (thread_db_create_event): Remove function. - (thread_db_enable_reporting): Likewise. - (find_one_thread): Don't check for thread_db_use_events. - (attach_thread): Likewise. - (thread_db_load_search): Remove td_thr_event_enable_p initialization. - (try_thread_db_load_1): Don't check for thread_db_use_events. - (thread_db_init): Remove use_events argument and thread events - handling. - (remove_thread_event_breakpoints): Remove function. - (thread_db_detach): Remove call to remove_thred_event_breakpoints. - -2015-11-30 Antoine Tremblay <antoine.tremblay@ericsson.com> - - * linux-aarch64-low.c (aarch64_supports_hardware_single_step): - New function. - (struct linux_target_ops) <supports_hardware_single_step>: Initialize. - * linux-arm-low.c (arm_supports_hardware_single_step): New function. - (struct linux_target_ops) <supports_hardware_single_step>: Initialize. - * linux-bfin-low.c (bfin_supports_hardware_single_step): New function. - (struct linux_target_ops) <bfin_supports_hardware_single_step>: - Initialize. - * linux-crisv32-low.c (cris_supports_hardware_single_step): - New function. - (struct linux_target_ops) <supports_hardware_single_step>: Initialize. - * linux-low.c (can_hardware_single_step): Use - supports_hardware_single_step. - (can_software_single_step): New function. - (start_step_over): Call can_software_single_step. - (linux_supports_hardware_single_step): New function. - (struct target_ops) <supports_software_single_step>: Initialize. - * linux-low.h (struct linux_target_ops) - <supports_hardware_single_step>: Initialize. - * linux-m32r-low.c (m32r_supports_hardware_single_step): New function. - (struct linux_target_ops) <supports_hardware_single_step>: Initialize. - * linux-ppc-low.c (ppc_supports_hardware_single_step): New function. - (struct linux_target_ops) <supports_hardware_single_step> Initialize. - * linux-s390-low.c (s390_supports_hardware_single_step): New function. - (struct linux_target_ops) <supports_hardware_single_step>: Initialize. - * linux-sh-low.c (sh_supports_hardware_single_step): New function. - (struct linux_target_ops) <supports_hardware_single_step>: Initialize. - * linux-tic6x-low.c (tic6x_supports_hardware_single_step): New function. - (struct linux_target_ops) <tic6x_supports_hardware_single_step>: - Initialize. - * linux-tile-low.c (tile_supports_hardware_single_step): New function. - (struct linux_target_ops) <tile_supports_hardware_single_step>: - Initialize. - * linux-x86-low.c (x86_supports_hardware_single_step) New function. - (struct linux_target_ops) <supports_hardware_single_step>: Initialize. - * linux-xtensa-low.c (xtensa_supports_hardware_single_step): - New function. - (struct linux_target_ops) <supports_hardware_single_step>: Initialize. - * target.h (struct target_ops): <supports_software_single_step>: - New field. - (target_supports_software_single_step): New macro. - -2015-11-30 Antoine Tremblay <antoine.tremblay@ericsson.com> - - * linux-low.c (linux_wait_1): Fix pc advance condition. - * mem-break.c (reinsert_breakpoint_inserted_here): New function. - * mem-break.h (reinsert_breakpoint_inserted_here): New declaration. - -2015-11-30 Antoine Tremblay <antoine.tremblay@ericsson.com> - - * linux-arm-low.c (arm_is_thumb_mode): New function. - (arm_breakpoint_at): Use arm_is_thumb_mode. - (arm_breakpoint_kind_from_current_state): New function. - (struct linux_target_ops) <breakpoint_kind_from_current_state>: - Initialize. - * linux-low.c (linux_wait_1): Call breakpoint_kind_from_current_state. - (linux_breakpoint_kind_from_current_state): New function. - (struct target_ops <breakpoint_kind_from_current_state>: Initialize. - * linux-low.h (struct linux_target_ops) - <breakpoint_kind_from_current_state>: New field. - * target.h (struct target_ops): Likewise. - (target_breakpoint_kind_from_current_state): New macro. - -2015-11-30 Pedro Alves <palves@redhat.com> - - * linux-low.c (linux_resume): Wake up the event loop before - returning. - -2015-11-30 Pedro Alves <palves@redhat.com> - - * mem-break.c (check_gdb_bp_preconditions): Remove current_thread - check. - (set_gdb_breakpoint): If prepare_to_access_memory fails, set *ERR - to -1. - * target.c (struct thread_search): New structure. - (thread_search_callback): New function. - (prev_general_thread): New global. - (prepare_to_access_memory, done_accessing_memory): New functions. - * target.h (prepare_to_access_memory, done_accessing_memory): - Replace macros with function declarations. - -2015-11-30 Pedro Alves <palves@redhat.com> - - PR 14618 - * linux-low.c (linux_wait_1): If the last resumed thread is gone, - report TARGET_WAITKIND_NO_RESUMED. - * remote-utils.c (prepare_resume_reply): Handle - TARGET_WAITKIND_NO_RESUMED. - * server.c (report_no_resumed): New global. - (handle_query) <qSupported>: Handle "no-resumed+". Report - "no-resumed+" support. - (resume): When the target reports TARGET_WAITKIND_NO_RESUMED, only - return error if the client doesn't support no-resumed events. - (push_stop_notification): New function. - (handle_target_event): Use it. Report TARGET_WAITKIND_NO_RESUMED - events if the client supports them. - -2015-11-30 Pedro Alves <palves@redhat.com> - - * linux-low.c (thread_still_has_status_pending_p): Don't check - vCont;t here. - (lwp_resumed): New function. - (status_pending_p_callback): Return early if the LWP is not - supposed to be resumed. - -2015-11-30 Pedro Alves <palves@redhat.com> - - * linux-low.c (handle_extended_wait): Assert that the LWP's - waitstatus is TARGET_WAITKIND_IGNORE. If GDB wants to hear about - thread create events, leave the new child's status pending. - (linux_low_filter_event): If GDB wants to hear about thread exit - events, leave the LWP marked dead and don't delete it. - (linux_wait_for_event_filtered): Don't check for thread exit. - (filter_exit_event): New function. - (linux_wait_1): Use it, when returning an exit event. - (linux_resume_one_lwp_throw): Assert that the LWP's - waitstatus is TARGET_WAITKIND_IGNORE. - * remote-utils.c (prepare_resume_reply): Handle - TARGET_WAITKIND_THREAD_CREATED and TARGET_WAITKIND_THREAD_EXITED. - * server.c (report_thread_events): New global. - (handle_general_set): Handle QThreadEvents. - (handle_query) <qSupported>: Handle and report QThreadEvents+; - (handle_target_event): Handle TARGET_WAITKIND_THREAD_CREATED and - TARGET_WAITKIND_THREAD_EXITED. - * server.h (report_thread_events): Declare. - -2015-11-30 Pedro Alves <palves@redhat.com> - - * linux-low.c (resume_stopped_resumed_lwps): Don't check whether - the thread's last_resume_kind was resume_stop. - -2015-11-30 Pedro Alves <palves@redhat.com> - - * linux-low.c (linux_attach): In non-stop mode, wait for one stop - before returning. - -2015-11-30 Pedro Alves <palves@redhat.com> - - * server.c (handle_v_requests): Handle vCtrlC. - -2015-11-30 Pedro Alves <palves@redhat.com> - - * gdbthread.h (find_any_thread_of_pid): Declare. - * inferiors.c (thread_of_pid, find_any_thread_of_pid): New - functions. - * server.c (handle_query): If current_thread is NULL, look for - another thread of the selected process. - -2015-11-26 Daniel Colascione <dancol@dancol.org> - Simon Marchi <simon.marchi@ericsson.com> - - * linux-low.c (linux_target_ops): Use linux_proc_tid_get_name. - * server.c (handle_qxfer_threads_worker): Refactor to include thread - name in reply. - * target.h (struct target_ops) <thread_name>: New field. - (target_thread_name): New macro. - -2015-11-23 Joel Brobecker <brobecker@adacore.com> - - * regcache.h (regcache_invalidate_pid): Add declaration. - * regcache.c (regcache_invalidate_pid): New function, extracted - from regcache_invalidate. - (regcache_invalidate): Reimplement using regcache_invalidate_pid. - Add trivial documentation comment. - * lynx-low.c: Use regcache_invalidate_pid instead of - regcache_invalidate. - -2015-11-23 Joel Brobecker <brobecker@adacore.com> - - * configure.ac: Do not call AC_CHECK_TYPES for Elf32_auxv_t - and Elf64_auxv_t if the target is Android. - -2015-11-22 Doug Evans <xdje42@gmail.com> - - * target.h: #include <sys/types.h>. - -2015-11-19 Pedro Alves <palves@redhat.com> - - * linux-low.c (linux_process_qsupported): Change prototype. - Adjust. - * linux-low.h (struct linux_target_ops) <process_qsupported>: - Change prototype. - * linux-x86-low.c (x86_linux_process_qsupported): Change prototype - and adjust to loop over all features. - * server.c (handle_query) <qSupported>: Adjust to call - target_process_qsupported once, passing it a vector of unprocessed - features. - * target.h (struct target_ops) <process_qsupported>: Change - prototype. - (target_process_qsupported): Adjust. - -2015-11-19 Pedro Alves <palves@redhat.com> - - * configure.ac (ERROR_ON_WARNING): Don't check whether in C++ - mode. - * configure: Regenerate. - -2015-11-19 Pedro Alves <palves@redhat.com> - - * configure: Regenerate. - -2015-11-19 Yao Qi <yao.qi@linaro.org> - - * linux-aarch64-low.c (emit_data_processing_reg): Change opcode - type to uint32_t. - -2015-11-19 Yao Qi <yao.qi@linaro.org> - - * linux-aarch64-low.c (enum aarch64_operand_type): New. - (struct aarch64_operand): Move enum out. - -2015-11-19 Yao Qi <yao.qi@linaro.org> - - * linux-aarch64-low.c (aarch64_fill_fpregset): Cast buf to - struct user_fpsimd_state *. - (aarch64_store_fpregset): Likewise. - -2015-11-19 Yao Qi <yao.qi@linaro.org> - - * linux-aarch64-low.c (aarch64_fill_gregset): Cast buf to - struct user_pt_regs *. - (aarch64_store_gregset): Likewise. - -2015-11-18 Pedro Alves <palves@redhat.com> - - * Makefile.in (all_object_files): Add $IPA_OBJS. - -2015-11-17 Pedro Alves <palves@redhat.com> - - * win32-low.c (win32_resume): Use gdb_signal_from_host, - GDB_SIGNAL_0 and gdb_signal_to_string. - -2015-11-17 Pedro Alves <palves@redhat.com> - - * win32-low.c (handle_output_debug_string): Remove parameter. - (win32_kill): Remove our_status local and adjust call to - handle_output_debug_string. - (get_child_debug_event): Adjust call to - handle_output_debug_string. - -2015-11-03 Simon Marchi <simon.marchi@polymtl.ca> - - * linux-mips-low.c (mips_fill_gregset): Add cast. - (mips_store_gregset): Likewise. - (mips_fill_fpregset): Likewise. - (mips_store_fpregset): Likewise. - -2015-11-03 Simon Marchi <simon.marchi@polymtl.ca> - - * linux-mips-low.c (mips_add_watchpoint): Rename private to - priv. - -2015-11-03 Simon Marchi <simon.marchi@polymtl.ca> - - * linux-mips-low.c (mips_linux_new_thread): Change type of - watch_type to enum target_hw_bp_type. - -2015-11-03 Simon Marchi <simon.marchi@polymtl.ca> - - * linux-arm-low.c (raw_bkpt_type_to_arm_hwbp_type): - Change return type to arm_hwbp_type. - -2015-11-03 Simon Marchi <simon.marchi@polymtl.ca> - - * linux-aarch32-low.c (arm_fill_gregset): Add cast. - (arm_store_gregset): Likewise. - * linux-arm-low.c (arm_get_hwcap): Likewise. - (arm_read_description): Likewise. - -2015-11-03 Simon Marchi <simon.marchi@polymtl.ca> - - * linux-aarch32-low.c (aarch32_regsets): Use NULL_REGSET. - -2015-11-03 Simon Marchi <simon.marchi@polymtl.ca> - - * linux-ppc-low.c (ppc_get_hwcap): Add cast. - (ppc_fill_vsxregset): Likewise. - (ppc_store_vsxregset): Likewise. - (ppc_fill_vrregset): Likewise. - (ppc_store_vrregset): Likewise. - (ppc_fill_evrregset): Likewise. - (ppc_store_evrregset): Likewise. - -2015-11-03 Simon Marchi <simon.marchi@polymtl.ca> - - * linux-ppc-low.c (ppc_usrregs_info): Remove - forward-declaration. - (ppc_arch_setup): Move lower in file. - -2015-10-30 Simon Marchi <simon.marchi@ericsson.com> - - * proc-service.c (ps_pdread): Change CORE_ADDR cast to uintptr_t. - (ps_pdwrite): Likewise. - -2015-10-29 Henrik Wallin <henrik.wallin@windriver.com> - - * linux-arm-low.c (arm_new_thread): Move pointer dereference - to after assert checks. - -2015-10-29 Simon Marchi <simon.marchi@ericsson.com> - - * proc-service.c (ps_pdread): Add/adjust casts. - (ps_pdwrite): Add/adjust casts. - -2015-10-29 Simon Marchi <simon.marchi@polymtl.ca> - - * server.c (handle_search_memory_1): Cast return value of - memmem. - -2015-10-29 Simon Marchi <simon.marchi@polymtl.ca> - - * server.c (write_qxfer_response): Change type of data to - gdb_byte *. - -2015-10-29 Pedro Alves <palves@redhat.com> - - * mem-break.c (Z_packet_to_bkpt_type): Add cast. - -2015-10-29 Pedro Alves <palves@redhat.com> - - * tracepoint.c (clear_installed_tracepoints): Add casts. - -2015-10-29 Pedro Alves <palves@redhat.com> - - * server.c (handle_v_cont, process_serial_event): Add enum - gdb_signal casts to signal parsing code. - -2015-10-29 Pedro Alves <palves@redhat.com> - - * linux-low.h (NULL_REGSET): Define. - * linux-aarch64-low.c (aarch64_regsets): Use NULL_REGSET. - * linux-arm-low.c (arm_regsets): Likewise. - * linux-crisv32-low.c (cris_regsets): Likewise. - * linux-m68k-low.c (m68k_regsets): Likewise. - * linux-mips-low.c (mips_regsets): Likewise. - * linux-nios2-low.c (nios2_regsets): Likewise. - * linux-ppc-low.c (ppc_regsets): Likewise. - * linux-s390-low.c (s390_regsets): Likewise. - * linux-sh-low.c (sh_regsets): Likewise. - * linux-sparc-low.c (sparc_regsets): Likewise. - * linux-tic6x-low.c (tic6x_regsets): Likewise. - * linux-tile-low.c (tile_regsets): Likewise. - * linux-x86-low.c (x86_regsets): Likewise. - * linux-xtensa-low.c (xtensa_regsets): Likewise. - -2015-10-29 Pedro Alves <palves@redhat.com> - - * linux-low.h (NULL_REGSET): Define. - * linux-aarch64-low.c (aarch64_regsets): Use NULL_REGSET. - * linux-arm-low.c (arm_regsets): Likewise. - * linux-crisv32-low.c (cris_regsets): Likewise. - * linux-m68k-low.c (m68k_regsets): Likewise. - * linux-mips-low.c (mips_regsets): Likewise. - * linux-nios2-low.c (nios2_regsets): Likewise. - * linux-ppc-low.c (ppc_regsets): Likewise. - * linux-s390-low.c (s390_regsets): Likewise. - * linux-sh-low.c (sh_regsets): Likewise. - * linux-sparc-low.c (sparc_regsets): Likewise. - * linux-tic6x-low.c (tic6x_regsets): Likewise. - * linux-tile-low.c (tile_regsets): Likewise. - * linux-x86-low.c (x86_regsets): Likewise. - * linux-xtensa-low.c (xtensa_regsets): Likewise. - -2015-10-26 Doug Evans <dje@google.com> - - * linux-low.c (__SIGRTMIN): Move to nat/linux-nat.h. - -2015-10-26 Doug Evans <dje@google.com> - - * linux-low.c (W_STOPCODE): Moved to common/gdb_wait.h. - -2015-10-26 Doug Evans <dje@google.com> - - * thread-db.c (find_one_thread): Cast ti.ti_tid to unsigned long - for debug_printf. - (attach_thread, find_new_threads_callback): Ditto. - -2015-10-23 Antoine Tremblay <antoine.tremblay@ericsson.com> - - * mem-break.h (set_breakpoint_data): Remove. - -2015-10-23 Antoine Tremblay <antoine.tremblay@ericsson.com> - - * nto-low.c (nto_sw_breakpoint_from_kind): New function. - (struct target_ops) <sw_breakpoint_from_kind>: Initialize. - (initialize_low): Remove set_breakpoint_data call. - * spu-low.c (spu_sw_breakpoint_from_kind): New function. - (struct target_ops) <sw_breakpoint_from_kind>: Iniitalize. - (initialize_low): Remove set_breakpoint_data call. - * win32-low.c (win32_sw_breakpoint_from_kind): New function. - (struct target_ops) <sw_breakpoint_from_kind>: Initialize. - (initialize_low): Remove set_breakpoint_data call. - -2015-10-23 Antoine Tremblay <antoine.tremblay@ericsson.com> - - * linux-low.c (default_breakpoint_kind_from_pc): Move to target.c. - * mem-break.c (set_breakpoint_at): Use target_breakpoint_kind_from_pc. - * target.c (default_breakpoint_kind_from_pc): Moved from linux-low.c - * target.h (target_breakpoint_kind_from_pc): New macro. - -2015-10-22 Antoine Tremblay <antoine.tremblay@ericsson.com> - - * linux-low.c (default_breakpoint_kind_from_pc): New function. - (linux_breakpoint_kind_from_pc): Use default_breakpoint_kind_from_pc for - the default breakpoint kind. - -2015-10-21 Antoine Tremblay <antoine.tremblay@ericsson.com> - - * linux-arm-low.c (arm_supports_z_point_type): Add software - breakpoint support. - -2015-10-21 Antoine Tremblay <antoine.tremblay@ericsson.com> - - * linux-arm-low.c: Refactor breakpoint definitions. - (arm_breakpoint_at): Adjust for arm_abi_breakpoint. - (arm_sw_breakpoint_from_kind): Adjust for arm_breakpoint. - -2015-10-21 Antoine Tremblay <antoine.tremblay@ericsson.com> - - * Makefile.in: Add arm.c/o. - * configure.srv: Likewise. - * linux-arm-low.c (arm_breakpoint_kinds): New enum. - (arm_breakpoint_kind_from_pc): New function. - (arm_sw_breakpoint_from_kind): Return proper kind. - (struct linux_target_ops) <breakpoint_kind_from_pc>: Initialize. - -2015-10-21 Antoine Tremblay <antoine.tremblay@ericsson.com> - - * linux-low.c (initialize_low): Ajdust for breakpoint global variables - removal. - * mem-break.c : Remove breakpoint_data/breakpoint_len global variables. - (struct raw_breakpoint) <size>: Remove. - (struct raw_breakpoint) <kind>: Add. - (bp_size): New function. - (bp_opcode): Likewise. - (find_raw_breakpoint_at): Adjust for kind. - (insert_memory_breakpoint): Adjust for kind call bp_size,bp_opcode. - (remove_memory_breakpoint): Adjust for kind call bp_size. - (set_raw_breakpoint_at): Adjust for kind. - (set_breakpoint): Likewise. - (set_breakpoint_at): Call breakpoint_kind_from_pc. - (delete_raw_breakpoint): Adjust for kind. - (delete_breakpoint): Likewise. - (find_gdb_breakpoint): Likewise. - (set_gdb_breakpoint_1): Likewise. - (set_gdb_breakpoint): Likewise. - (delete_gdb_breakpoint_1): Likewise. - (delete_gdb_breakpoint): Likewise. - (uninsert_raw_breakpoint): Likewise. - (reinsert_raw_breakpoint): Likewise. - (set_breakpoint_data): Remove. - (validate_inserted_breakpoint): Adjust for kind call bp_size,bp_opcode. - (check_mem_read): Adjust for kind call bp_size. - (check_mem_write): Adjust for kind call bp_size,bp_opcode. - (clone_one_breakpoint): Adjust for kind. - * mem-break.h (set_gdb_breakpoint): Likewise. - (delete_gdb_breakpoint): Likewise. - * server.c (process_serial_event): Likewise. - -2015-10-21 Antoine Tremblay <antoine.tremblay@ericsson.com> - - * linux-aarch64-low.c (aarch64_sw_breakpoint_from_kind): New function. - (struct linux_target_ops) <breakpoint>: Remove. - (struct linux_target_ops) <breakpoint_len>: Remove. - (struct linux_target_ops) <breakpoint_kind_from_pc>: Initialize field. - (struct linux_target_ops) <sw_breakpoint_from_kind>: Initialize field. - * linux-arm-low.c (arm_breakpoint_kind_from_pc): New function. - (arm_sw_breakpoint_from_kind): New function. - * linux-bfin-low.c (bfin_sw_breakpoint_from_kind): New function. - (struct linux_target_ops) <breakpoint>: Remove. - (struct linux_target_ops) <breakpoint_len>: Remove. - (struct linux_target_ops) <breakpoint_kind_from_pc>: Initialize field. - (struct linux_target_ops) <sw_breakpoint_from_kind>: Initialize field. - * linux-cris-low.c (cris_sw_breakpoint_from_kind): New function. - (struct linux_target_ops) <breakpoint>: Remove. - (struct linux_target_ops) <breakpoint_len>: Remove. - (struct linux_target_ops) <breakpoint_kind_from_pc>: Initialize field. - (struct linux_target_ops) <sw_breakpoint_from_kind>: Initialize field. - * linux-crisv32-low.c (cris_sw_breakpoint_from_kind): New function. - (struct linux_target_ops) <breakpoint>: Remove. - (struct linux_target_ops) <breakpoint_len>: Remove. - (struct linux_target_ops) <breakpoint_kind_from_pc>: Initialize field. - (struct linux_target_ops) <sw_breakpoint_from_kind>: Initialize field. - * linux-low.c (linux_wait_1): Call breakpoint_kind_from_pc - and sw_breakpoint_from_kind to increment the pc. - (linux_breakpoint_kind_from_pc): New function. - (linux_sw_breakpoint_from_kind): New function. - (struct target_ops) <sw_breakpoint_from_kind>: Initialize field. - (initialize_low): Call breakpoint_kind_from_pc and - sw_breakpoint_from_kind to replace breakpoint_data/len. - * linux-low.h (struct linux_target_ops) <breakpoint_kind_from_pc>: - New field. - (struct linux_target_ops) <sw_breakpoint_from_kind>: Likewise. - * linux-m32r-low.c (m32r_sw_breakpoint_from_kind): New function. - (struct linux_target_ops) <breakpoint>: Remove. - (struct linux_target_ops) <breakpoint_len>: Remove. - (struct linux_target_ops) <breakpoint_kind_from_pc>: Initialize field. - (struct linux_target_ops) <sw_breakpoint_from_kind>: Initialize field. - * linux-m68k-low.c (m68k_sw_breakpoint_from_kind): New function. - (struct linux_target_ops) <breakpoint>: Remove. - (struct linux_target_ops) <breakpoint_len>: Remove. - (struct linux_target_ops) <breakpoint_kind_from_pc>: Initialize field. - (struct linux_target_ops) <sw_breakpoint_from_kind>: Initialize field. - * linux-mips-low.c (mips_sw_breakpoint_from_kind): New function. - (struct linux_target_ops) <breakpoint>: Remove. - (struct linux_target_ops) <breakpoint_len>: Remove. - (struct linux_target_ops) <breakpoint_kind_from_pc>: Initialize field. - (struct linux_target_ops) <sw_breakpoint_from_kind>: Initialize field. - * linux-nios2-low.c (nios2_sw_breakpoint_from_kind): New function. - (struct linux_target_ops) <breakpoint>: Remove. - (struct linux_target_ops) <breakpoint_len>: Remove. - (struct linux_target_ops) <breakpoint_kind_from_pc>: Initialize field. - (struct linux_target_ops) <sw_breakpoint_from_kind>: Initialize field. - * linux-ppc-low.c (ppc_sw_breakpoint_from_kind): New function. - (struct linux_target_ops) <breakpoint>: Remove. - (struct linux_target_ops) <breakpoint_len>: Remove. - (struct linux_target_ops) <breakpoint_kind_from_pc>: Initialize field. - (struct linux_target_ops) <sw_breakpoint_from_kind>: Initialize field. - * linux-s390-low.c (s390_sw_breakpoint_from_kind): New function. - (struct linux_target_ops) <breakpoint>: Remove. - (struct linux_target_ops) <breakpoint_len>: Remove. - (struct linux_target_ops) <breakpoint_kind_from_pc>: Initialize field. - (struct linux_target_ops) <sw_breakpoint_from_kind>: Initialize field. - * linux-sh-low.c (sh_sw_breakpoint_from_kind): New function. - (struct linux_target_ops) <breakpoint>: Remove. - (struct linux_target_ops) <breakpoint_len>: Remove. - (struct linux_target_ops) <breakpoint_kind_from_pc>: Initialize field. - (struct linux_target_ops) <sw_breakpoint_from_kind>: Initialize field. - * linux-sparc-low.c (sparc_sw_breakpoint_from_kind): New function. - (struct linux_target_ops) <breakpoint>: Remove. - (struct linux_target_ops) <breakpoint_len>: Remove. - (struct linux_target_ops) <breakpoint_kind_from_pc>: Initialize field. - (struct linux_target_ops) <sw_breakpoint_from_kind>: Initialize field. - * linux-tic6x-low.c (tic6x_sw_breakpoint_from_kind): New function. - (struct linux_target_ops) <breakpoint>: Remove. - (struct linux_target_ops) <breakpoint_len>: Remove. - (struct linux_target_ops) <breakpoint_kind_from_pc>: Initialize field. - (struct linux_target_ops) <sw_breakpoint_from_kind>: Initialize field. - * linux-tile-low.c (tile_sw_breakpoint_from_kind): New function. - * linux-x86-low.c (x86_sw_breakpoint_from_kind): New function. - (struct linux_target_ops) <breakpoint>: Remove. - (struct linux_target_ops) <breakpoint_len>: Remove. - (struct linux_target_ops) <breakpoint_kind_from_pc>: Initialize field. - (struct linux_target_ops) <sw_breakpoint_from_kind>: Initialize field. - * linux-xtensa-low.c (xtensa_sw_breakpoint_from_kind) New function. - (struct linux_target_ops) <breakpoint>: Remove. - (struct linux_target_ops) <breakpoint_len>: Remove. - (struct linux_target_ops) <breakpoint_kind_from_pc>: Initialize field. - (struct linux_target_ops) <sw_breakpoint_from_kind>: Initialize field. - -2015-10-21 Antoine Tremblay <antoine.tremblay@ericsson.com> - - * linux-cris-low.c (cris_get_pc): Remove void arg. - -2015-10-16 Aleksandar Ristovski <aristovski@qnx.com> - - * gdbserver/nto-low.c (nto_insert_point, nto_remove_point): Fix - variable name. - -2015-10-16 Aleksandar Ristovski <aristovski@qnx.com> - - * inferiors.c (thread_pid_matches_callback): New function. - (find_thread_process): New function. - (remove_thread): Reset current_thread. - (remove_process): Assert threads have been removed first. - -2015-10-15 Yao Qi <yao.qi@linaro.org> - - * linux-aarch64-low.c (aarch64_insert_point): Set len to 2 - if it is 3. - (aarch64_remove_point): Likewise. - * regcache.c (regcache_register_size): New function. - -2015-10-12 Yao Qi <yao.qi@linaro.org> - - * linux-aarch64-low.c: Update all callers as emit_load_store - is renamed to aarch64_emit_load_store. - -2015-10-12 Yao Qi <yao.qi@linaro.org> - - * linux-aarch64-low.c: Update all callers of function renaming - from emit_insn to aarch64_emit_insn. - -2015-10-12 Yao Qi <yao.qi@linaro.org> - - * linux-aarch64-low.c (enum aarch64_opcodes): Move to - arch/aarch64-insn.h. - (struct aarch64_memory_operand): Likewise. - (ENCODE): Likewise. - (emit_insn): Move to arch/aarch64-insn.c. - (emit_b, emit_bcond, emit_cb, emit_tb): Remove. - (emit_load_store): Move to arch/aarch64-insn.c. - (emit_ldr, emit_ldrb, emit_ldrsw, emit_nop): Remove. - (can_encode_int32): Remove. - -2015-10-12 Yao Qi <yao.qi@linaro.org> - - * linux-aarch64-low.c (extract_signed_bitfield): Remove. - (aarch64_decode_ldr_literal): Move to gdb/arch/aarch64-insn.c. - (aarch64_relocate_instruction): Likewise. - (struct aarch64_insn_data): Move to gdb/arch/aarch64-insn.h. - (struct aarch64_insn_visitor): Likewise. - -2015-10-12 Yao Qi <yao.qi@linaro.org> - - * linux-aarch64-low.c (struct aarch64_insn_data): New. - (struct aarch64_insn_visitor): New. - (struct aarch64_insn_relocation_data): New. - (aarch64_ftrace_insn_reloc_b): New function. - (aarch64_ftrace_insn_reloc_b_cond): Likewise. - (aarch64_ftrace_insn_reloc_cb): Likewise. - (aarch64_ftrace_insn_reloc_tb): Likewise. - (aarch64_ftrace_insn_reloc_adr): Likewise. - (aarch64_ftrace_insn_reloc_ldr_literal): Likewise. - (aarch64_ftrace_insn_reloc_others): Likewise. - (visitor): New. - (aarch64_relocate_instruction): Use visitor. - -2015-10-12 Yao Qi <yao.qi@linaro.org> - - * linux-aarch64-low.c (aarch64_relocate_instruction): Return - int. Add argument buf. - (aarch64_install_fast_tracepoint_jump_pad): Pass buf to - aarch64_relocate_instruction. - -2015-10-12 Yao Qi <yao.qi@linaro.org> - - * linux-aarch64-low.c (aarch64_relocate_instruction): Add - argument insn. Remove local variable insn. Don't call - target_read_uint32. - (aarch64_install_fast_tracepoint_jump_pad): Call - target_read_uint32. - -2015-09-30 Yao Qi <yao.qi@linaro.org> - - * linux-aarch64-low.c (emit_movk): Shorten a long line. - (emit_load_store_pair): Likewise. - -2015-09-25 Simon Marchi <simon.marchi@ericsson.com> - - * dll.c (match_dll): Add cast(s). - (unloaded_dll): Likewise. - * linux-low.c (second_thread_of_pid_p): Likewise. - (delete_lwp_callback): Likewise. - (count_events_callback): Likewise. - (select_event_lwp_callback): Likewise. - (linux_set_resume_request): Likewise. - * server.c (accumulate_file_name_length): Likewise. - (emit_dll_description): Likewise. - (handle_qxfer_threads_worker): Likewise. - (visit_actioned_threads): Likewise. - * thread-db.c (any_thread_of): Likewise. - * tracepoint.c (same_process_p): Likewise. - (match_blocktype): Likewise. - (build_traceframe_info_xml): Likewise. - -2015-09-25 Simon Marchi <simon.marchi@ericsson.com> - - * ax.c (gdb_parse_agent_expr): Add cast to allocation result - assignment. - (gdb_unparse_agent_expr): Likewise. - * hostio.c (require_data): Likewise. - (handle_pread): Likewise. - * linux-low.c (disable_regset): Likewise. - (fetch_register): Likewise. - (store_register): Likewise. - (get_dynamic): Likewise. - (linux_qxfer_libraries_svr4): Likewise. - * mem-break.c (delete_fast_tracepoint_jump): Likewise. - (set_fast_tracepoint_jump): Likewise. - (uninsert_fast_tracepoint_jumps_at): Likewise. - (reinsert_fast_tracepoint_jumps_at): Likewise. - (validate_inserted_breakpoint): Likewise. - (clone_agent_expr): Likewise. - * regcache.c (init_register_cache): Likewise. - * remote-utils.c (putpkt_binary_1): Likewise. - (decode_M_packet): Likewise. - (decode_X_packet): Likewise. - (look_up_one_symbol): Likewise. - (relocate_instruction): Likewise. - (monitor_output): Likewise. - * server.c (handle_search_memory): Likewise. - (handle_qxfer_exec_file): Likewise. - (handle_qxfer_libraries): Likewise. - (handle_qxfer): Likewise. - (handle_query): Likewise. - (handle_v_cont): Likewise. - (handle_v_run): Likewise. - (captured_main): Likewise. - * target.c (write_inferior_memory): Likewise. - * thread-db.c (try_thread_db_load_from_dir): Likewise. - * tracepoint.c (init_trace_buffer): Likewise. - (add_tracepoint_action): Likewise. - (add_traceframe): Likewise. - (add_traceframe_block): Likewise. - (cmd_qtdpsrc): Likewise. - (cmd_qtdv): Likewise. - (cmd_qtstatus): Likewise. - (response_source): Likewise. - (response_tsv): Likewise. - (cmd_qtnotes): Likewise. - (gdb_collect): Likewise. - (initialize_tracepoint): Likewise. - -2015-09-21 Pierre Langlois <pierre.langlois@arm.com> - - * linux-aarch64-low-.c: Include ax.h and tracepoint.h. - (enum aarch64_opcodes) <RET>, <SUBS>, <AND>, <ORR>, <ORN>, - <EOR>, <LSLV>, <LSRV>, <ASRV>, <SBFM>, <UBFM>, <CSINC>, <MUL>, - <NOP>: New. - (enum aarch64_condition_codes): New enum. - (w0): New static global. - (fp): Likewise. - (lr): Likewise. - (struct aarch64_memory_operand) <type>: New - MEMORY_OPERAND_POSTINDEX type. - (postindex_memory_operand): New helper function. - (emit_ret): New function. - (emit_load_store_pair): New function, factored out of emit_stp - with support for MEMORY_OPERAND_POSTINDEX. - (emit_stp): Rewrite using emit_load_store_pair. - (emit_ldp): New function. - (emit_load_store): Likewise. - (emit_ldr): Mention post-index instruction in comment. - (emit_ldrh): New function. - (emit_ldrb): New function. - (emit_ldrsw): Mention post-index instruction in comment. - (emit_str): Likewise. - (emit_subs): New function. - (emit_cmp): Likewise. - (emit_and): Likewise. - (emit_orr): Likewise. - (emit_orn): Likewise. - (emit_eor): Likewise. - (emit_mvn): Likewise. - (emit_lslv): Likewise. - (emit_lsrv): Likewise. - (emit_asrv): Likewise. - (emit_mul): Likewise. - (emit_sbfm): Likewise. - (emit_sbfx): Likewise. - (emit_ubfm): Likewise. - (emit_ubfx): Likewise. - (emit_csinc): Likewise. - (emit_cset): Likewise. - (emit_nop): Likewise. - (emit_ops_insns): New helper function. - (emit_pop): Likewise. - (emit_push): Likewise. - (aarch64_emit_prologue): New function. - (aarch64_emit_epilogue): Likewise. - (aarch64_emit_add): Likewise. - (aarch64_emit_sub): Likewise. - (aarch64_emit_mul): Likewise. - (aarch64_emit_lsh): Likewise. - (aarch64_emit_rsh_signed): Likewise. - (aarch64_emit_rsh_unsigned): Likewise. - (aarch64_emit_ext): Likewise. - (aarch64_emit_log_not): Likewise. - (aarch64_emit_bit_and): Likewise. - (aarch64_emit_bit_or): Likewise. - (aarch64_emit_bit_xor): Likewise. - (aarch64_emit_bit_not): Likewise. - (aarch64_emit_equal): Likewise. - (aarch64_emit_less_signed): Likewise. - (aarch64_emit_less_unsigned): Likewise. - (aarch64_emit_ref): Likewise. - (aarch64_emit_if_goto): Likewise. - (aarch64_emit_goto): Likewise. - (aarch64_write_goto_address): Likewise. - (aarch64_emit_const): Likewise. - (aarch64_emit_call): Likewise. - (aarch64_emit_reg): Likewise. - (aarch64_emit_pop): Likewise. - (aarch64_emit_stack_flush): Likewise. - (aarch64_emit_zero_ext): Likewise. - (aarch64_emit_swap): Likewise. - (aarch64_emit_stack_adjust): Likewise. - (aarch64_emit_int_call_1): Likewise. - (aarch64_emit_void_call_2): Likewise. - (aarch64_emit_eq_goto): Likewise. - (aarch64_emit_ne_goto): Likewise. - (aarch64_emit_lt_goto): Likewise. - (aarch64_emit_le_goto): Likewise. - (aarch64_emit_gt_goto): Likewise. - (aarch64_emit_ge_got): Likewise. - (aarch64_emit_ops_impl): New static global variable. - (aarch64_emit_ops): New target function, return - &aarch64_emit_ops_impl. - (struct linux_target_ops): Install it. - -2015-09-21 Pierre Langlois <pierre.langlois@arm.com> - - * Makefile.in (linux-aarch64-ipa.o, aarch64-ipa.o): New rules. - * configure.srv (aarch64*-*-linux*): Add linux-aarch64-ipa.o and - aarch64-ipa.o. - * linux-aarch64-ipa.c: New file. - * linux-aarch64-low.c: Include arch/aarch64-insn.h, inttypes.h - and endian.h. - (aarch64_get_thread_area): New target method. - (extract_signed_bitfield): New helper function. - (aarch64_decode_ldr_literal): New function. - (enum aarch64_opcodes): New enum. - (struct aarch64_register): New struct. - (struct aarch64_operand): New struct. - (x0): New static global. - (x1): Likewise. - (x2): Likewise. - (x3): Likewise. - (x4): Likewise. - (w2): Likewise. - (ip0): Likewise. - (sp): Likewise. - (xzr): Likewise. - (aarch64_register): New helper function. - (register_operand): Likewise. - (immediate_operand): Likewise. - (struct aarch64_memory_operand): New struct. - (offset_memory_operand): New helper function. - (preindex_memory_operand): Likewise. - (enum aarch64_system_control_registers): New enum. - (ENCODE): New macro. - (emit_insn): New helper function. - (emit_b): New function. - (emit_bcond): Likewise. - (emit_cb): Likewise. - (emit_tb): Likewise. - (emit_blr): Likewise. - (emit_stp): Likewise. - (emit_ldp_q_offset): Likewise. - (emit_stp_q_offset): Likewise. - (emit_load_store): Likewise. - (emit_ldr): Likewise. - (emit_ldrsw): Likewise. - (emit_str): Likewise. - (emit_ldaxr): Likewise. - (emit_stxr): Likewise. - (emit_stlr): Likewise. - (emit_data_processing_reg): Likewise. - (emit_data_processing): Likewise. - (emit_add): Likewise. - (emit_sub): Likewise. - (emit_mov): Likewise. - (emit_movk): Likewise. - (emit_mov_addr): Likewise. - (emit_mrs): Likewise. - (emit_msr): Likewise. - (emit_sevl): Likewise. - (emit_wfe): Likewise. - (append_insns): Likewise. - (can_encode_int32_in): New helper function. - (aarch64_relocate_instruction): New function. - (aarch64_install_fast_tracepoint_jump_pad): Likewise. - (aarch64_get_min_fast_tracepoint_insn_len): Likewise. - (struct linux_target_ops): Install aarch64_get_thread_area, - aarch64_install_fast_tracepoint_jump_pad and - aarch64_get_min_fast_tracepoint_insn_len. - -2015-09-21 Pierre Langlois <pierre.langlois@arm.com> - - * Makefile.in (aarch64-insn.o): New rule. - * configure.srv (aarch64*-*-linux*): Add aarch64-insn.o. - -2015-09-21 Yao Qi <yao.qi@linaro.org> - - * ax.c [!IN_PROCESS_AGENT] (gdb_agent_op_sizes): Define it. - -2015-09-21 Yao Qi <yao.qi@linaro.org> - - * tracepoint.c (max_jump_pad_size): Remove. - -2015-09-18 Yao Qi <yao.qi@linaro.org> - - * linux-aarch64-low.c: Don't include sys/uio.h. - (ps_get_thread_area): Call aarch64_ps_get_thread_area. - -2015-09-16 Wei-cheng Wang <cole945@gmail.com> - - * tracepoint.c (eval_result_type): Change prototype. - (condition_true_at_tracepoint): Fix argument to compiled_cond. - -2015-09-15 Pedro Alves <palves@redhat.com> - - * remote-utils.c (prepare_resume_reply) <TARGET_WAITKIND_EXECD>: - Check whether to report exec events instead of checking whether - multiprocess is enabled. - -2015-09-15 Pedro Alves <palves@redhat.com> - - PR remote/18965 - * remote-utils.c (prepare_resume_reply): Merge - TARGET_WAITKIND_VFORK_DONE switch case with the - TARGET_WAITKIND_FORKED case. - -2015-09-15 Yao Qi <yao.qi@linaro.org> - - * server.c (handle_query): Check string comparison using - "else if" instead of "if". - -2015-09-15 Yao Qi <yao.qi@linaro.org> - - * server.c (vCont_supported): New global variable. - (handle_query): Set vCont_supported to 1 if "vContSupported+" - matches. Append ";vContSupported+" to own_buf. - (handle_v_requests): Append ";s;S" to own_buf if target supports - hardware single step or vCont_supported is false. - (capture_main): Set vCont_supported to zero. - -2015-09-15 Yao Qi <yao.qi@linaro.org> - - * linux-low.c (linux_supports_conditional_breakpoints): Rename - it to ... - (linux_supports_hardware_single_step): ... New function. - (linux_target_ops): Update. - * lynx-low.c (lynx_target_ops): Set field - supports_hardware_single_step to target_can_do_hardware_single_step. - * nto-low.c (nto_target_ops): Likewise. - * spu-low.c (spu_target_ops): Likewise. - * win32-low.c (win32_target_ops): Likewise. - * target.c (target_can_do_hardware_single_step): New function. - * target.h (struct target_ops) <supports_conditional_breakpoints>: - Remove. <supports_hardware_single_step>: New field. - (target_supports_conditional_breakpoints): Remove. - (target_supports_hardware_single_step): New macro. - (target_can_do_hardware_single_step): Declare. - * server.c (handle_query): Use target_supports_hardware_single_step - instead of target_supports_conditional_breakpoints. - -2015-09-15 Yao Qi <yao.qi@linaro.org> - - * linux-aarch64-low.c (aarch64_linux_siginfo_fixup): New - function. - (struct linux_target_ops the_low_target): Install - aarch64_linux_siginfo_fixup. - -2015-09-11 Don Breazeal <donb@codesourcery.com> - Luis Machado <lgustavo@codesourcery.com> - - * linux-low.c (linux_mourn): Static declaration. - (linux_arch_setup): Move in front of - handle_extended_wait. - (linux_arch_setup_thread): New function. - (handle_extended_wait): Handle exec events. Call - linux_arch_setup_thread. Make event_lwp argument a - pointer-to-a-pointer. - (check_zombie_leaders): Do not check stopped threads. - (linux_low_ptrace_options): Add PTRACE_O_TRACEEXEC. - (linux_low_filter_event): Add lwp and thread for exec'ing - non-leader thread if leader thread has been deleted. - Refactor code into linux_arch_setup_thread and call it. - Pass child lwp pointer by reference to handle_extended_wait. - (linux_wait_for_event_filtered): Update comment. - (linux_wait_1): Prevent clobbering exec event status. - (linux_supports_exec_events): New function. - (linux_target_ops) <supports_exec_events>: Initialize new member. - * lynx-low.c (lynx_target_ops) <supports_exec_events>: Initialize - new member. - * remote-utils.c (prepare_resume_reply): New stop reason 'exec'. - * server.c (report_exec_events): New global variable. - (handle_query): Handle qSupported query for exec-events feature. - (captured_main): Initialize report_exec_events. - * server.h (report_exec_events): Declare new global variable. - * target.h (struct target_ops) <supports_exec_events>: New - member. - (target_supports_exec_events): New macro. - * win32-low.c (win32_target_ops) <supports_exec_events>: - Initialize new member. - -2015-09-09 Markus Metzger <markus.t.metzger@intel.com> - - * linux-low.c (linux_low_enable_btrace): Remove. - (linux_target_ops): Replace linux_low_enable_btrace with - linux_enable_btrace. - -2015-09-03 Yao Qi <yao.qi@linaro.org> - - * linux-aarch64-low.c (aarch64_insert_point): Call - aarch64_handle_watchpoint if aarch64_linux_region_ok_for_watchpoint - returns true. - -2015-08-27 Ulrich Weigand <Ulrich.Weigand@de.ibm.com> - - * linux-low.c (check_stopped_by_breakpoint): Use - GDB_ARCH_IS_TRAP_BRKPT instead of GDB_ARCH_TRAP_BRKPT. - -2015-08-27 Pedro Alves <palves@redhat.com> - - * proc-service.c (ps_pdwrite): Return PS_ERR/PS_OK explicily. - -2015-08-26 Simon Marchi <simon.marchi@ericsson.com> - - * ax.c (gdb_parse_agent_expr): Replace xmalloc-family function with - the XNEW-family equivalent. - (compile_bytecodes): Likewise. - * dll.c (loaded_dll): Likewise. - * event-loop.c (append_callback_event): Likewise. - (create_file_handler): Likewise. - (create_file_event): Likewise. - * hostio.c (handle_open): Likewise. - * inferiors.c (add_thread): Likewise. - (add_process): Likewise. - * linux-aarch64-low.c (aarch64_linux_new_process): Likewise. - * linux-arm-low.c (arm_new_process): Likewise. - (arm_new_thread): Likewise. - * linux-low.c (add_to_pid_list): Likewise. - (linux_add_process): Likewise. - (handle_extended_wait): Likewise. - (add_lwp): Likewise. - (enqueue_one_deferred_signal): Likewise. - (enqueue_pending_signal): Likewise. - (linux_resume_one_lwp_throw): Likewise. - (linux_resume_one_thread): Likewise. - (linux_read_memory): Likewise. - (linux_write_memory): Likewise. - * linux-mips-low.c (mips_linux_new_process): Likewise. - (mips_linux_new_thread): Likewise. - (mips_add_watchpoint): Likewise. - * linux-x86-low.c (initialize_low_arch): Likewise. - * lynx-low.c (lynx_add_process): Likewise. - * mem-break.c (set_raw_breakpoint_at): Likewise. - (set_breakpoint): Likewise. - (add_condition_to_breakpoint): Likewise. - (add_commands_to_breakpoint): Likewise. - (clone_agent_expr): Likewise. - (clone_one_breakpoint): Likewise. - * regcache.c (new_register_cache): Likewise. - * remote-utils.c (look_up_one_symbol): Likewise. - * server.c (queue_stop_reply): Likewise. - (start_inferior): Likewise. - (queue_stop_reply_callback): Likewise. - (handle_target_event): Likewise. - * spu-low.c (fetch_ppc_memory): Likewise. - (store_ppc_memory): Likewise. - * target.c (set_target_ops): Likewise. - * thread-db.c (thread_db_load_search): Likewise. - (try_thread_db_load_1): Likewise. - * tracepoint.c (add_tracepoint): Likewise. - (add_tracepoint_action): Likewise. - (create_trace_state_variable): Likewise. - (cmd_qtdpsrc): Likewise. - (cmd_qtro): Likewise. - (add_while_stepping_state): Likewise. - * win32-low.c (child_add_thread): Likewise. - (get_image_name): Likewise. - -2015-08-25 Yao Qi <yao.qi@linaro.org> - - * linux-aarch64-low.c (aarch64_linux_new_thread): Remove. - -2015-08-25 Yao Qi <yao.qi@linaro.org> - - * Makefile.in (aarch64-linux.o): New rule. - * configure.srv (aarch64*-*-linux*): Append aarch64-linux.o to - srv_tgtobj. - * linux-aarch64-low.c: Include nat/aarch64-linux.h. - (aarch64_init_debug_reg_state): Make it extern. - (aarch64_linux_prepare_to_resume): Remove. - -2015-08-25 Yao Qi <yao.qi@linaro.org> - - * linux-aarch64-low.c (aarch64_linux_prepare_to_resume): Use - lwp_arch_private_info and ptid_of_lwp. - -2015-08-25 Yao Qi <yao.qi@linaro.org> - - * linux-aarch64-low.c (aarch64_get_debug_reg_state): Add argument pid. - Find proc_info by find_process_pid. All callers updated. - -2015-08-25 Yao Qi <yao.qi@linaro.org> - - * linux-aarch64-low.c (struct arch64_dr_update_callback_param): - Remove. - (debug_reg_change_callback): Remove. - (aarch64_notify_debug_reg_change): Remove. - -2015-08-25 Yao Qi <yao.qi@linaro.org> - - * linux-aarch64-low.c (aarch64_notify_debug_reg_change): - Call current_lwp_ptid. - -2015-08-25 Yao Qi <yao.qi@linaro.org> - - * linux-aarch64-low.c (debug_reg_change_callback): Use - debug_printf. - -2015-08-25 Yao Qi <yao.qi@linaro.org> - - * linux-aarch64-low.c (debug_reg_change_callback): Use phex. - -2015-08-25 Yao Qi <yao.qi@linaro.org> - - * linux-aarch64-low.c (debug_reg_change_callback): Remove comments. - -2015-08-25 Yao Qi <yao.qi@linaro.org> - - * linux-aarch64-low.c (debug_reg_change_callback): Re-indent - the code. - -2015-08-25 Yao Qi <yao.qi@linaro.org> - - * linux-aarch64-low.c (aarch64_dr_update_callback_param) <pid>: - Remove. - (debug_reg_change_callback): Remove argument entry and add argument - lwp. Remove local variable thread. Don't print thread id in the - debugging output. Don't check whether pid of thread equals to pid. - (aarch64_notify_debug_reg_change): Don't set param.pid. Call - iterate_over_lwps instead find_inferior. - -2015-08-24 Pedro Alves <palves@redhat.com> - - * inferiors.c (get_first_process): New function. - * inferiors.h (get_first_process): New declaration. - * remote-utils.c (read_ptid): Default to the first process in the - list, instead of to the current thread's process. - -2015-08-24 Pedro Alves <palves@redhat.com> - - * debug.c: Include gdb_sys_time.h instead of sys/time.h. - * event-loop.c: Likewise. - * remote-utils.c: Likewise. - * tracepoint.c: Likewise. - -2015-08-24 Pedro Alves <palves@redhat.com> - - * spu-low.c (spu_request_interrupt): Use lwpid_of instead of - ptid_get_lwp. - -2015-08-21 Pedro Alves <palves@redhat.com> - - * ax.c (gdb_eval_agent_expr): Return expr_eval_unhandled_opcode - instead of literal 1. - -2015-08-21 Pedro Alves <palves@redhat.com> - - * tdesc.c (default_description): Explicitly zero-initialize. - -2015-08-21 Pedro Alves <palves@redhat.com> - - PR gdb/18749 - * inferiors.c (remove_thread): Discard any pending stop reply for - this thread. - * server.c (remove_all_on_match_pid): Rename to ... - (remove_all_on_match_ptid): ... this. Work with a filter ptid - instead of a pid. - (discard_queued_stop_replies): Change parameter to a ptid. Now - extern. - (handle_v_kill, kill_inferior_callback, captured_main) - (process_serial_event): Adjust. - * server.h (discard_queued_stop_replies): Declare. - -2015-08-21 Pedro Alves <palves@redhat.com> - - * linux-low.c (wait_for_sigstop): Always switch to no thread - selected if the previously current thread dies. - * lynx-low.c (lynx_request_interrupt): Use the first thread's - process instead of the current thread's. - * remote-utils.c (input_interrupt): Don't check if there's no - current thread. - * server.c (gdb_read_memory, gdb_write_memory): If setting the - current thread to the general thread fails, error out. - (handle_qxfer_auxv, handle_qxfer_libraries) - (handle_qxfer_libraries_svr4, handle_qxfer_siginfo) - (handle_qxfer_spu, handle_qxfer_statictrace, handle_qxfer_fdpic) - (handle_query): Check if there's a thread selected instead of - checking whether there's any thread in the thread list. - (handle_qxfer_threads, handle_qxfer_btrace) - (handle_qxfer_btrace_conf): Don't error out early if there's no - thread in the thread list. - (handle_v_cont, myresume): Don't set the current thread to the - continue thread. - (process_serial_event) <Hg handling>: Also set thread_id if the - previous general thread is still alive. - (process_serial_event) <g/G handling>: If setting the current - thread to the general thread fails, error out. - * spu-low.c (spu_resume, spu_request_interrupt): Use the first - thread's lwp instead of the current thread's. - * target.c (set_desired_thread): If the desired thread was not - found, leave the current thread pointing to NULL. Return an int - (boolean) indicating success. - * target.h (set_desired_thread): Change return type to int. - -2015-08-20 Max Filippov <jcmvbkbc@gmail.com> - - * configure.srv (xtensa*-*-linux*): Add srv_linux_thread_db=yes. - * linux-xtensa-low.c (arch/xtensa.h gdb_proc_service.h): New - #includes. - (ps_get_thread_area): New function. - -2015-08-19 Gary Benson <gbenson@redhat.com> - - * hostio.c (handle_pread): Do not attempt to read more data - than hostio_reply_with_data can fit in a packet. - -2015-08-18 Joel Brobecker <brobecker@adacore.com> - - * linux-aarch32-low.c (NT_ARM_VFP): Define if not already defined. - -2015-08-14 Matthew Fortune <matthew.fortune@imgtec.com> - - * linux-low.c (get_r_debug): Handle DT_MIPS_RLD_MAP_REL. - -2015-08-06 Pedro Alves <palves@redhat.com> - - * tracepoint.c (expr_eval_result): Now an int. - -2015-08-06 Pedro Alves <palves@redhat.com> - - * gdbthread.h (struct regcache): Forward declare. - (struct thread_info) <regcache_data>: Now a struct regcache - pointer. - * inferiors.c (inferior_regcache_data) - (set_inferior_regcache_data): Now work with struct regcache - pointers. - * inferiors.h (struct regcache): Forward declare. - (inferior_regcache_data, set_inferior_regcache_data): Now work - with struct regcache pointers. - * regcache.c (get_thread_regcache, regcache_invalidate_thread) - (free_register_cache_thread): Remove struct regcache pointer - casts. - -2015-08-06 Pedro Alves <palves@redhat.com> - - * server.c (captured_main): On error, print the exception message - to stderr, and if run_once is set, throw a quit. - -2015-08-06 Pedro Alves <palves@redhat.com> - - * linux-low.c (move_out_of_jump_pad_callback): Temporarily switch - the current thread. - -2015-08-06 Pedro Alves <palves@redhat.com> - - * linux-low.c (linux_write_memory): Rewrite debug output to avoid - reading beyond the passed in buffer length. - -2015-08-06 Pierre Langlois <pierre.langlois@arm.com> - - * tracepoint.c (symbol_list) <required>: Remove. - -2015-08-06 Pedro Alves <palves@redhat.com> - - * linux-low.c (handle_extended_wait): Set the fork child's suspend - count if stopping and suspending threads. - (check_stopped_by_breakpoint): If stopped by trace, set the LWP's - stop reason to TARGET_STOPPED_BY_SINGLE_STEP. - (linux_detach): Complete an ongoing step-over. - (lwp_suspended_inc, lwp_suspended_decr): New functions. Use - throughout. - (resume_stopped_resumed_lwps): Don't resume a suspended thread. - (linux_wait_1): If passing a signal to the inferior after - finishing a step-over, unsuspend and re-resume all lwps. If we - see a single-step event but the thread should be continuing, don't - pass the trap to gdb. - (stuck_in_jump_pad_callback, move_out_of_jump_pad_callback): Use - internal_error instead of gdb_assert. - (enqueue_pending_signal): New function. - (check_ptrace_stopped_lwp_gone): Add debug output. - (start_step_over): Use internal_error instead of gdb_assert. - (complete_ongoing_step_over): New function. - (linux_resume_one_thread): Don't resume a suspended thread. - (proceed_one_lwp): If the LWP is stepping over a breakpoint, reset - it stepping. - -2015-08-06 Pedro Alves <palves@redhat.com> - - * linux-low.c (add_lwp): Set waitstatus to TARGET_WAITKIND_IGNORE. - (linux_thread_alive): Use lwp_is_marked_dead. - (extended_event_reported): Delete. - (linux_wait_1): Check if waitstatus is TARGET_WAITKIND_IGNORE - instead of extended_event_reported. - (mark_lwp_dead): Don't set the 'dead' flag. Store the waitstatus - as well. - (lwp_is_marked_dead): New function. - (lwp_running): Use lwp_is_marked_dead. - * linux-low.h: Delete 'dead' field, and update 'waitstatus's - comment. - -2015-08-06 Pedro Alves <palves@redhat.com> - - * linux-low.c (linux_wait_1): Move fork event output out of the - !report_to_gdb check. Pass event_child->waitstatus to - target_waitstatus_to_string instead of ourstatus. - -2015-08-04 Yao Qi <yao.qi@linaro.org> - - * linux-aarch64-low.c (aarch64_supports_tracepoints): Return 0 - if current_thread is 32 bit. - -2015-08-04 Yao Qi <yao.qi@linaro.org> - - * linux-aarch64-low.c (aarch64_supports_z_point_type): Return - 0 for Z_PACKET_SW_BP if it may be used in multi-arch debugging. - * server.c (extended_protocol): Remove "static". - * server.h (extended_protocol): Declare it. - -2015-08-04 Yao Qi <yao.qi@linaro.org> - - * linux-aarch64-low.c (aarch64_get_pc): Get PC register on - both aarch64 and aarch32. - (aarch64_set_pc): Likewise. - -2015-08-04 Yao Qi <yao.qi@linaro.org> - - * configure.srv (case aarch64*-*-linux*): Append arm-with-neon.o - to srv_regobj and append arm-core.xml arm-vfpv3.xml and - arm-with-neon.xml to srv_xmlfiles. - * linux-aarch64-low.c: Include linux-aarch32-low.h. - (is_64bit_tdesc): New function. - (aarch64_linux_read_description): New function. - (aarch64_arch_setup): Call aarch64_linux_read_description. - (regs_info): Rename to regs_info_aarch64. - (aarch64_regs_info): Return right regs_info. - (initialize_low_arch): Call initialize_low_arch_aarch32. - -2015-08-04 Yao Qi <yao.qi@linaro.org> - - * configure.srv (srv_tgtobj): Add linux-aarch32-low.o. - * linux-aarch32-low.c: New file. - * linux-aarch32-low.h: New file. - * linux-arm-low.c (arm_fill_gregset): Move it to - linux-aarch32-low.c. - (arm_store_gregset): Likewise. - (arm_fill_vfpregset): Call arm_fill_vfpregset_num - (arm_store_vfpregset): Call arm_store_vfpregset_num. - (arm_arch_setup): Check if PTRACE_GETREGSET works. - (regs_info): Rename to regs_info_arm. - (arm_regs_info): Return regs_info_aarch32 if - have_ptrace_getregset is 1 and target description is - arm_with_neon or arm_with_vfpv3. - (initialize_low_arch): Don't call init_registers_arm_with_neon. - Call initialize_low_arch_aarch32 instead. - -2015-08-04 Yao Qi <yao.qi@linaro.org> - - * linux-x86-low.c (have_ptrace_getregset): Move it to ... - * linux-low.c: ... here. - * linux-low.h (have_ptrace_getregset): Declare it. - -2015-08-04 Pedro Alves <palves@redhat.com> - - * thread-db.c (struct thread_db): Use new typedefs. - (try_thread_db_load_1): Define local TDB_DLSYM macro and use it in - CHK calls. - (disable_thread_event_reporting): Cast result of dlsym to - destination function pointer type. - (thread_db_mourn): Use td_ta_delete_ftype. - -2015-08-03 Sandra Loosemore <sandra@codesourcery.com> - - * linux-nios2-low.c (NIOS2_BREAKPOINT): Conditionalize for - arch variant. - (CDX_BREAKPOINT): Define for R2. - (nios2_breakpoint_at): Check for CDX_BREAKPOINT when R2. - (the_low_target): Add comments. - -2015-07-30 Yao Qi <yao.qi@linaro.org> - - * linux-arm-low.c (arm_hwcap): Remove it. - (arm_read_description): New local variable arm_hwcap. Don't - set arm_hwcap to zero. - -2015-07-30 Yao Qi <yao.qi@linaro.org> - - * linux-arm-low.c (arm_fill_wmmxregset): Don't use arm_hwcap. - Use regcache->tdesc instead. - (arm_store_wmmxregset): Likewise. - (arm_fill_vfpregset): Likewise. - (arm_store_vfpregset): Likewise. - -2015-07-30 Yao Qi <yao.qi@linaro.org> - - * linux-arm-low.c: Include arch/arm.h. - (arm_fill_gregset): Don't use arm_num_regs and arm_regmap. - (arm_store_gregset): Likewise. - -2015-07-29 Simon Marchi <simon.marchi@ericsson.com> - - * linux-mips-low.c (mips_linux_prepare_to_resume): Add NULL as - ptrace's 4th parameter. - -2015-07-27 Yao Qi <yao.qi@linaro.org> - - * configure.srv (case aarch64*-*-linux*): Don't set - srv_linux_usrregs. - -2015-07-24 Pedro Alves <palves@redhat.c: Likewise.om> - - * linux-aarch64-low.c: Include nat/gdb_ptrace.h instead of - sys/ptrace.h. - * linux-arm-low.c: Likewise. - * linux-cris-low.c: Likewise. - * linux-crisv32-low.c: Likewise. - * linux-low.c: Likewise. - * linux-m68k-low.c: Likewise. - * linux-mips-low.c: Likewise. - * linux-nios2-low.c: Likewise. - * linux-s390-low.c: Likewise. - * linux-sparc-low.c: Likewise. - * linux-tic6x-low.c: Likewise. - * linux-tile-low.c: Likewise. - * linux-x86-low.c: Likewise. - -2015-07-24 Pedro Alves <palves@redhat.com> - - * config.in: Regenerate. - * configure: Regenerate. - -2015-07-24 Pedro Alves <palves@redhat.com> - - * acinclude.m4: Include ../ptrace.m4. - * configure.ac: Call GDB_AC_PTRACE. - * config.in, configure: Regenerate. - -2015-07-24 Yao Qi <yao.qi@linaro.org> - - * linux-low.c (linux_create_inferior): Remove setting to - proc->priv->new_inferior. - (linux_attach): Likewise. - (linux_low_filter_event): Likewise. - * linux-low.h (struct process_info_private) <new_inferior>: Remove. - -2015-07-24 Yao Qi <yao.qi@linaro.org> - - * linux-low.c (linux_arch_setup): New function. - (linux_low_filter_event): If proc->tdesc is NULL and - proc->attached is true, call the_low_target.arch_setup. - Otherwise, keep status pending, and return. - (linux_resume_one_lwp_throw): Don't call get_pc if - thread->while_stepping isn't NULL. Don't call - get_thread_regcache if proc->tdesc is NULL. - (need_step_over_p): Return 0 if proc->tdesc is NULL. - (linux_target_ops): Install arch_setup. - * server.c (start_inferior): Call the_target->arch_setup. - * target.h (struct target_ops) <arch_setup>: New field. - (target_arch_setup): New marco. - * lynx-low.c (lynx_target_ops): Update. - * nto-low.c (nto_target_ops): Update. - * spu-low.c (spu_target_ops): Update. - * win32-low.c (win32_target_ops): Update. - -2015-07-24 Yao Qi <yao.qi@linaro.org> - - * linux-low.c (linux_add_process): Don't set - proc->priv->new_inferior. - (linux_create_inferior): Set proc->priv->new_inferior to 1. - (linux_attach): Likewise. - -2015-07-24 Yao Qi <yao.qi@linaro.org> - - * server.c (start_inferior): Code refactor. - -2015-07-24 Yao Qi <yao.qi@linaro.org> - - * server.c (process_serial_event): Set general_thread. - -2015-07-21 Yao Qi <yao.qi@linaro.org> - - * linux-aarch64-low.c (aarch64_arch_setup): Remove code and call - aarch64_linux_get_debug_reg_capacity. - -2015-07-17 Yao Qi <yao.qi@linaro.org> - - * Makefile.in (aarch64-linux-hw-point.o): New rule. - * configure.srv (srv_tgtobj): Append aarch64-linux-hw-point.o. - * linux-aarch64-low.c: Include nat/aarch64-linux-hw-point.h. - (AARCH64_HBP_MAX_NUM): Move to nat/aarch64-linux-hw-point.h. - (AARCH64_HWP_MAX_NUM, AARCH64_HBP_ALIGNMENT): Likewise. - (AARCH64_HWP_ALIGNMENT): Likewise. - (AARCH64_HWP_MAX_LEN_PER_REG): Likewise. - (AARCH64_DEBUG_NUM_SLOTS, AARCH64_DEBUG_ARCH): Likewise. - (aarch64_num_bp_regs, aarch64_num_wp_regs): Likewise. - (AARCH64_DEBUG_ARCH_V8, DR_MARK_ALL_CHANGED): Likewise. - (DR_MARK_N_CHANGED, DR_CLEAR_CHANGED): Likewise. - (DR_HAS_CHANGED, DR_N_HAS_CHANGE): Likewise. - (struct aarch64_debug_reg_state): Likewise. - (struct arch_lwp_info): Likewise. - (aarch64_align_watchpoint): Likewise. - (DR_CONTROL_ENABLED, DR_CONTROL_LENGTH): Likewise. - (aarch64_watchpoint_length): Likewise. - (aarch64_point_encode_ctrl_reg): Likewise - (aarch64_point_is_aligned): Likewise. - (aarch64_align_watchpoint): Likewise. - (aarch64_linux_set_debug_regs): - (aarch64_dr_state_insert_one_point): Likewise. - (aarch64_dr_state_remove_one_point): Likewise. - (aarch64_handle_breakpoint): Likewise. - (aarch64_handle_aligned_watchpoint): Likewise. - (aarch64_handle_unaligned_watchpoint): Likewise. - (aarch64_handle_watchpoint): Likewise. - -2015-07-17 Yao Qi <yao.qi@linaro.org> - - * linux-aarch64-low.c (aarch64_handle_breakpoint): Add argument state - and don't aarch64_get_debug_reg_state. All callers update. - (aarch64_handle_aligned_watchpoint): Likewise. - (aarch64_handle_unaligned_watchpoint): Likewise. - (aarch64_handle_watchpoint): Likewise. - (aarch64_insert_point): Call aarch64_get_debug_reg_state earlier. - (aarch64_remove_point): Likewise. - -2015-07-17 Yao Qi <yao.qi@linaro.org> - - * linux-aarch64-low.c (aarch64_show_debug_reg_state): Use - debug_printf. - (aarch64_handle_unaligned_watchpoint): Likewise. - -2015-07-15 Jan Kratochvil <jan.kratochvil@redhat.com> - - Revert the previous 3 commits: - Move gdb_regex* to common/ - Move linux_find_memory_regions_full & co. - gdbserver build-id attribute generator - -2015-07-15 Aleksandar Ristovski <aristovski@qnx.com - Jan Kratochvil <jan.kratochvil@redhat.com> - - gdbserver build-id attribute generator. - * linux-low.c (nat/linux-maps.h, search.h, rsp-low.h): Include. - (ElfXX_Ehdr, ElfXX_Phdr, ElfXX_Nhdr): New. - (ELFXX_FLD, ELFXX_SIZEOF, ELFXX_ROUNDUP, BUILD_ID_INVALID): New. - (find_phdr): New. - (get_dynamic): Use find_pdhr to traverse program headers. - (struct mapping_entry, mapping_entry_s, free_mapping_entry_vec) - (compare_mapping_entry_range, struct find_memory_region_callback_data) - (read_build_id, find_memory_region_callback, lrfind_mapping_entry) - (get_hex_build_id): New. - (linux_qxfer_libraries_svr4): Add optional build-id attribute - to reply XML document. - -2015-07-15 Aleksandar Ristovski <aristovski@qnx.com - Jan Kratochvil <jan.kratochvil@redhat.com> - - * target.c: Include target/target-utils.h and fcntl.h. - (target_fileio_read_stralloc_1_pread, target_fileio_read_stralloc_1) - (target_fileio_read_stralloc): New functions. - -2015-07-15 Jan Kratochvil <jan.kratochvil@redhat.com> - - * Makefile.in (OBS): Add gdb_regex.o. - (gdb_regex.o): New. - * config.in: Rebuilt. - * configure: Rebuilt. - -2015-07-15 Aleksandar Ristovski <aristovski@qnx.com - Jan Kratochvil <jan.kratochvil@redhat.com> - - Create empty nat/linux-maps.[ch] and common/target-utils.[ch]. - * Makefile.in (OBS): Add target-utils.o. - (linux-maps.o, target-utils.o): New. - * configure.srv (srv_linux_obj): Add linux-maps.o. - -2015-07-15 Pierre Langlois <pierre.langlois@arm.com> - - * linux-aarch64-low.c (aarch64_supports_range_stepping): New - function, return 1. - (the_low_target): Install it. - -2015-07-14 Pedro Alves <palves@redhat.com> - - * linux-low.c (kill_wait_lwp): Don't assert if waitpid fails. - Instead, ignore ECHILD, and throw an error for other errnos. - -2015-07-10 Pedro Alves <palves@redhat.com> - - * event-loop.c (struct callback_event) <data>: Change type to - gdb_client_data instance instead of gdb_client_data pointer. - (append_callback_event): Adjust. - -2015-07-10 Pierre Langlois <pierre.langlois@arm.com> - - * linux-aarch64-low.c: Add comments for each linux_target_ops - method. Remove comments already covered in target_ops and - linux_target_ops definitions. - (the_low_target): Add comments for each unimplemented method. - -2015-07-09 Yao Qi <yao.qi@linaro.org> - - * linux-aarch64-low.c (aarch64_regmap): Remove. - (aarch64_usrregs_info): Remove. - (regs_info): Set field usrregs to NULL. - -2015-07-02 Markus Metzger <markus.t.metzger@intel.com> - - * linux-low.c: Include "rsp-low.h" - (linux_low_encode_pt_config, linux_low_encode_raw): New. - (linux_low_read_btrace): Support BTRACE_FORMAT_PT. - (linux_low_btrace_conf): Support BTRACE_FORMAT_PT. - (handle_btrace_enable_pt): New. - (handle_btrace_general_set): Support "pt". - (handle_btrace_conf_general_set): Support "pt:size". - -2015-06-29 Pierre Langlois <pierre.langlois@arm.com> - - * linux-aarch64-low.c (aarch64_supports_z_point_type): Enable for - Z_PACKET_SW_BP. - -2015-06-29 Pierre Langlois <pierre.langlois@arm.com> - - * linux-aarch64-low.c: Remove comment about endianness. - (aarch64_breakpoint): Change type to gdb_byte[]. Set to "brk #0". - (aarch64_breakpoint_at): Change type of insn to gdb_byte[]. Use - memcmp. - -2015-06-24 Gary Benson <gbenson@redhat.com> - - * linux-i386-ipa.c (stdint.h): Do not include. - * lynx-i386-low.c (stdint.h): Likewise. - * lynx-ppc-low.c (stdint.h): Likewise. - * mem-break.c (stdint.h): Likewise. - * thread-db.c (stdint.h): Likewise. - * tracepoint.c (stdint.h): Likewise. - * win32-low.c (stdint.h): Likewise. - -2015-06-18 Simon Marchi <simon.marchi@ericsson.com> - - * server.c (write_qxfer_response): Update call to - remote_escape_output. - -2015-06-15 Aleksandar Ristovski <aristovski@qnx.com - Jan Kratochvil <jan.kratochvil@redhat.com> - - Merge multiple hex conversions. - * gdbreplay.c (tohex): Rename to 'fromhex'. - (logchar): Use fromhex. - -2015-06-10 Jan Kratochvil <jan.kratochvil@redhat.com> - - * server.c (handle_qxfer_libraries): Set `version' attribute for - <library-list>. - -2015-06-10 Gary Benson <gbenson@redhat.com> - - * target.h (struct target_ops) <multifs_open>: New field. - <multifs_unlink>: Likewise. - <multifs_readlink>: Likewise. - * linux-low.c (nat/linux-namespaces.h): New include. - (linux_target_ops): Initialize the_target->multifs_open, - the_target->multifs_unlink and the_target->multifs_readlink. - * hostio.h (hostio_handle_new_gdb_connection): New declaration. - * hostio.c (hostio_fs_pid): New static variable. - (hostio_handle_new_gdb_connection): New function. - (handle_setfs): Likewise. - (handle_open): Use the_target->multifs_open as appropriate. - (handle_unlink): Use the_target->multifs_unlink as appropriate. - (handle_readlink): Use the_target->multifs_readlink as - appropriate. - (handle_vFile): Handle vFile:setfs packets. - * server.c (handle_query): Call hostio_handle_new_gdb_connection - after target_handle_new_gdb_connection. - -2015-06-10 Gary Benson <gbenson@redhat.com> - - * configure.ac (AC_CHECK_FUNCS): Add setns. - * config.in: Regenerate. - * configure: Likewise. - * Makefile.in (SFILES): Add nat/linux-namespaces.c. - (linux-namespaces.o): New rule. - * configure.srv (srv_linux_obj): Add linux-namespaces.o. - -2015-06-09 Gary Benson <gbenson@redhat.com> - - * hostio.c (handle_open): Process mode argument with - fileio_to_host_mode. - -2015-06-01 Yao Qi <yao.qi@linaro.org> - - * linux-s390-low.c (PTRACE_GETREGSET, PTRACE_SETREGSET): Remove. - * linux-x86-low.c: Likewise. - -2015-05-28 Don Breazeal <donb@codesourcery.com> - - * linux-low.c (handle_extended_wait): Initialize - thread_info.last_resume_kind for new fork children. - -2015-05-15 Pedro Alves <palves@redhat.com> - - * target.h (target_handle_new_gdb_connection): Rewrite using if - wrapped in do/while. - -2015-05-14 Joel Brobecker <brobecker@adacore.com> - - * configure.ac: Add prfpregset_t BFD_HAVE_SYS_PROCFS_TYPE check. - * configure, config.in: Regenerate. - * gdb_proc_service.h [HAVE_PRFPREGSET_T] (prfpregset_t): - Declare typedef. - -2015-05-12 Don Breazeal <donb@codesourcery.com> - - * linux-low.c (handle_extended_wait): Handle PTRACE_EVENT_FORK and - PTRACE_EVENT_VFORK_DONE. - (linux_low_ptrace_options, extended_event_reported): Add vfork - events. - * remote-utils.c (prepare_resume_reply): New stop reasons "vfork" - and "vforkdone" for RSP 'T' Stop Reply Packet. - * server.h (report_vfork_events): Declare - global variable. - -2015-05-12 Don Breazeal <donb@codesourcery.com> - - * linux-aarch64-low.c (aarch64_linux_new_fork): New function. - (the_low_target) <new_fork>: Initialize new member. - * linux-arm-low.c (arm_new_fork): New function. - (the_low_target) <new_fork>: Initialize new member. - * linux-low.c (handle_extended_wait): Call new target function - new_fork. - * linux-low.h (struct linux_target_ops) <new_fork>: New member. - * linux-mips-low.c (mips_add_watchpoint): New function - extracted from mips_insert_point. - (the_low_target) <new_fork>: Initialize new member. - (mips_linux_new_fork): New function. - (mips_insert_point): Call mips_add_watchpoint. - * linux-x86-low.c (x86_linux_new_fork): New function. - (the_low_target) <new_fork>: Initialize new member. - -2015-05-12 Don Breazeal <donb@codesourcery.com> - - * linux-low.c (handle_extended_wait): Implement return value, - rename argument 'event_child' to 'event_lwp', handle - PTRACE_EVENT_FORK, call internal_error for unrecognized event. - (linux_low_ptrace_options): New function. - (linux_low_filter_event): Call linux_low_ptrace_options, - use different argument fo linux_enable_event_reporting, - use return value from handle_extended_wait. - (extended_event_reported): New function. - (linux_wait_1): Call extended_event_reported and set - status to report fork events. - (linux_write_memory): Add pid to debug message. - (reset_lwp_ptrace_options_callback): New function. - (linux_handle_new_gdb_connection): New function. - (linux_target_ops): Initialize new structure member. - * linux-low.h (struct lwp_info) <waitstatus>: New member. - * lynx-low.c: Initialize new structure member. - * remote-utils.c (prepare_resume_reply): Implement stop reason - "fork" for "T" stop message. - * server.c (handle_query): Call handle_new_gdb_connection. - * server.h (report_fork_events): Declare global flag. - * target.h (struct target_ops) <handle_new_gdb_connection>: - New member. - (target_handle_new_gdb_connection): New macro. - * win32-low.c: Initialize new structure member. - -2015-05-12 Don Breazeal <donb@codesourcery.com> - - * mem-break.c (APPEND_TO_LIST): Define macro. - (clone_agent_expr): New function. - (clone_one_breakpoint): New function. - (clone_all_breakpoints): New function. - * mem-break.h: Declare new functions. - -2015-05-12 Don Breazeal <donb@codesourcery.com> - - * linux-low.c (linux_supports_fork_events): New function. - (linux_supports_vfork_events): New function. - (linux_target_ops): Initialize new structure members. - (initialize_low): Call linux_check_ptrace_features. - * lynx-low.c (lynx_target_ops): Initialize new structure - members. - * server.c (report_fork_events, report_vfork_events): - New global flags. - (handle_query): Add new features to qSupported packet and - response. - (captured_main): Initialize new global variables. - * target.h (struct target_ops) <supports_fork_events>: - New member. - <supports_vfork_events>: New member. - (target_supports_fork_events): New macro. - (target_supports_vfork_events): New macro. - * win32-low.c (win32_target_ops): Initialize new structure - members. - -2015-05-12 Gary Benson <gbenson@redhat.com> - - * server.c (handle_qxfer_exec_file): Use current process - if annex is empty. - -2015-05-08 Sandra Loosemore <sandra@codesourcery.com> - - * linux-nios2-low.c: Include elf/common.h. Adjust comments. - Remove HAVE_PTRACE_GETREGS conditionals. - (nios2_regsets): Use PTRACE_GETREGSET and PTRACE_SETREGSET - instead of PTRACE_GETREGS and PTRACE_SETREGS. - -2015-05-08 Yao Qi <yao.qi@linaro.org> - - * linux-low.c (linux_supports_conditional_breakpoints): New - function. - (linux_target_ops): Install new target method. - * lynx-low.c (lynx_target_ops): Install NULL hook for - supports_conditional_breakpoints. - * nto-low.c (nto_target_ops): Likewise. - * spu-low.c (spu_target_ops): Likewise. - * win32-low.c (win32_target_ops): Likewise. - * server.c (handle_query): Check - target_supports_conditional_breakpoints. - * target.h (struct target_ops) <supports_conditional_breakpoints>: - New field. - (target_supports_conditional_breakpoints): New macro. - -2015-05-06 Pedro Alves <palves@redhat.com> - - PR server/18081 - * server.c (start_inferior): If the process exits, mourn it. - -2015-04-21 Gary Benson <gbenson@redhat.com> - - * hostio.c (fileio_open_flags_to_host): Factored out to - fileio_to_host_openflags in common/fileio.c. Single use - updated. - -2015-04-17 Max Filippov <jcmvbkbc@gmail.com> - - * linux-xtensa-low.c (xtensa_fill_gregset) - (xtensa_store_gregset): Check XCHAL_HAVE_LOOPS instead of - XCHAL_HAVE_LOOP. - -2015-04-17 Max Filippov <jcmvbkbc@gmail.com> - - * linux-xtensa-low.c (xtensa_usrregs_info): Remove. - (regs_info): Replace usrregs pointer with NULL. - -2015-04-17 Gary Benson <gbenson@redhat.com> - - * target.h (struct target_ops) <pid_to_exec_file>: New field. - * linux-low.c (linux_target_ops): Initialize pid_to_exec_file. - * server.c (handle_qxfer_exec_file): New function. - (qxfer_packets): Add exec-file entry. - (handle_query): Report qXfer:exec-file:read as supported packet. - -2015-04-14 Romain Naour <romain.naour@openwide.fr> (tiny change) - - * linux-low.c (linux_read_offsets): Remove get_thread_lwp. - -2015-04-09 Gary Benson <gbenson@redhat.com> - - * hostio-errno.c (errno_to_fileio_error): Remove function. - Update caller to use remote_fileio_to_fio_error. - -2015-04-09 Yao Qi <yao.qi@linaro.org> - - * linux-low.c (linux_insert_point): Call - insert_memory_breakpoint if TYPE is raw_bkpt_type_sw. - (linux_remove_point): Call remove_memory_breakpoint if type is - raw_bkpt_type_sw. - * linux-x86-low.c (x86_insert_point): Don't call - insert_memory_breakpoint. - (x86_remove_point): Don't call remove_memory_breakpoint. - -2015-04-01 Pedro Alves <palves@redhat.com> - Cleber Rosa <crosa@redhat.com> - - * server.c (gdbserver_usage): Reorganize and extend the usage - message. - -2015-03-24 Pedro Alves <palves@redhat.com> - - * linux-low.c (check_stopped_by_breakpoint): Tweak debug log - output. Also dump TRAP_TRACE. - (linux_low_filter_event): In debug output, distinguish a - resume_stop SIGSTOP from a delayed SIGSTOP. - -2015-03-24 Gary Benson <gbenson@redhat.com> - - * linux-x86-low.c (x86_linux_new_thread): Moved to - nat/x86-linux.c. - (x86_linux_prepare_to_resume): Likewise. - -2015-03-24 Gary Benson <gbenson@redhat.com> - - * Makefile.in (x86-linux-dregs.o): New rule. - * configure.srv: Add x86-linux-dregs.o to relevant targets. - * linux-x86-low.c: Include nat/x86-linux-dregs.h. - (u_debugreg_offset): Moved to nat/x86-linux-dregs.c. - (x86_linux_dr_get): Likewise. - (x86_linux_dr_set): Likewise. - (update_debug_registers_callback): Likewise. - (x86_linux_dr_set_addr): Likewise. - (x86_linux_dr_get_addr): Likewise. - (x86_linux_dr_set_control): Likewise. - (x86_linux_dr_get_control): Likewise. - (x86_linux_dr_get_status): Likewise. - (x86_linux_update_debug_registers): Likewise. - -2015-03-24 Gary Benson <gbenson@redhat.com> - - * linux-x86-low.c (x86_linux_update_debug_registers): - New function, factored out from... - (x86_linux_prepare_to_resume): ...this. - -2015-03-24 Gary Benson <gbenson@redhat.com> - - * linux-x86-low.c (x86_linux_dr_get): Update comments. - (x86_linux_dr_set): Likewise. - (update_debug_registers_callback): Likewise. - (x86_linux_dr_set_addr): Likewise. - (x86_linux_dr_get_addr): Likewise. - (x86_linux_dr_set_control): Likewise. - (x86_linux_dr_get_control): Likewise. - (x86_linux_dr_get_status): Likewise. - (x86_linux_prepare_to_resume): Likewise. - -2015-03-24 Gary Benson <gbenson@redhat.com> - - * linux-x86-low.c (x86_linux_dr_get): Add assertion. - Use perror_with_name. Pass string through gettext. - (x86_linux_dr_set): Likewise. - -2015-03-24 Gary Benson <gbenson@redhat.com> - - * linux-x86-low.c (x86_dr_low_set_addr): Rename to... - (x86_linux_dr_set_addr): ...this. - (x86_dr_low_get_addr): Rename to... - (x86_linux_dr_get_addr): ...this. - (x86_dr_low_set_control): Rename to... - (x86_linux_dr_set_control): ...this. - (x86_dr_low_get_control): Rename to... - (x86_linux_dr_get_control): ...this. - (x86_dr_low_get_status): Rename to... - (x86_linux_dr_get_status): ...this. - (x86_dr_low): Update with new function names. - -2015-03-24 Gary Benson <gbenson@redhat.com> - - * Makefile.in (x86-linux.o): New rule. - * configure.srv: Add x86-linux.o to relevant targets. - * linux-low.c (lwp_set_arch_private_info): New function. - (lwp_arch_private_info): Likewise. - * linux-x86-low.c: Include nat/x86-linux.h. - (arch_lwp_info): Removed structure. - (update_debug_registers_callback): - Use lwp_set_debug_registers_changed. - (x86_linux_prepare_to_resume): Use lwp_debug_registers_changed - and lwp_set_debug_registers_changed. - (x86_linux_new_thread): Use lwp_set_debug_registers_changed. - -2015-03-24 Gary Benson <gbenson@redhat.com> - - * linux-low.h (linux_target_ops) <new_thread>: Changed signature. - * linux-arm-low.c (arm_new_thread): Likewise. - * linux-aarch64-low.c (aarch64_linux_new_thread): Likewise. - * linux-mips-low.c (mips_linux_new_thread): Likewise. - * linux-x86-low.c (x86_linux_new_thread): Likewise. - * linux-low.c (add_lwp): Update the_low_target.new_thread call. - -2015-03-24 Gary Benson <gbenson@redhat.com> - - * linux-low.c (ptid_of_lwp): New function. - (lwp_is_stopped): Likewise. - (lwp_stop_reason): Likewise. - * linux-x86-low.c (update_debug_registers_callback): - Use lwp_is_stopped. - (x86_linux_prepare_to_resume): Use ptid_of_lwp and - lwp_stop_reason. - -2015-03-24 Gary Benson <gbenson@redhat.com> - - * linux-low.h (linux_stop_lwp): Remove declaration. - -2015-03-24 Gary Benson <gbenson@redhat.com> - - * linux-low.h: Include nat/linux-nat.h. - * linux-low.c (iterate_over_lwps_args): New structure. - (iterate_over_lwps_filter): New function. - (iterate_over_lwps): Likewise. - * linux-x86-low.c (update_debug_registers_callback): - Update signature to what iterate_over_lwps expects. - Remove PID check that iterate_over_lwps now performs. - (x86_dr_low_set_addr): Use iterate_over_lwps. - (x86_dr_low_set_control): Likewise. - -2015-03-24 Gary Benson <gbenson@redhat.com> - - * linux-x86-low.c (x86_debug_reg_state): New function. - (x86_linux_prepare_to_resume): Use the above. - -2015-03-24 Gary Benson <gbenson@redhat.com> - - * linux-low.c (current_lwp_ptid): New function. - * linux-x86-low.c: Include nat/linux-nat.h. - (x86_dr_low_get_addr): Use current_lwp_ptid. - (x86_dr_low_get_control): Likewise. - (x86_dr_low_get_status): Likewise. - -2015-03-20 Pedro Alves <palves@redhat.com> - - * tracepoint.c (cmd_qtstatus): Make "str" const. - -2015-03-20 Pedro Alves <palves@redhat.com> - - * server.c (handle_general_set): Make "req_str" const. - -2015-03-19 Pedro Alves <palves@redhat.com> - - * linux-low.c (linux_resume_one_lwp): Rename to ... - (linux_resume_one_lwp_throw): ... this. Don't handle ESRCH here, - instead call perror_with_name. - (check_ptrace_stopped_lwp_gone): New function. - (linux_resume_one_lwp): Reimplement as wrapper around - linux_resume_one_lwp_throw that swallows errors if the LWP is - gone. - -2015-03-19 Pedro Alves <palves@redhat.com> - - * linux-low.c (count_events_callback, select_event_lwp_callback): - No longer check whether the thread has resume_stop as last resume - kind. - -2015-03-19 Pedro Alves <palves@redhat.com> - - * linux-low.c (count_events_callback, select_event_lwp_callback): - Use the lwp's status_pending_p field, not the thread's. - -2015-03-19 Pedro Alves <palves@redhat.com> - - * linux-low.c (select_event_lwp_callback): Update comments to - no longer mention SIGTRAP. - -2015-03-18 Gary Benson <gbenson@redhat.com> - - * server.c (handle_query): Do not report vFile:fstat as supported. - -2015-03-11 Gary Benson <gbenson@redhat.com> - - * hostio.c (sys/types.h): New include. - (sys/stat.h): Likewise. - (common-remote-fileio.h): Likewise. - (handle_fstat): New function. - (handle_vFile): Handle vFile:fstat packets. - -2015-03-11 Gary Benson <gbenson@redhat.com> - - * configure.ac (AC_CHECK_MEMBERS): Add checks for - struct stat.st_blocks and struct stat.st_blksize. - * configure: Regenerate. - * config.in: Likewise. - * Makefile.in (SFILES): Add common/common-remote-fileio.c. - (OBS): Add common-remote-fileio.o. - (common-remote-fileio.o): New rule. - -2015-03-09 Pedro Alves <palves@redhat.com> - - * tracepoint.c (gdb_agent_helper_thread): Cast '&sockaddr' to - 'struct sockaddr' pointer in 'accept' call. - -2015-03-09 Pedro Alves <palves@redhat.com> - - Revert: - 2015-03-07 Pedro Alves <palves@redhat.com> - * gdbreplay.c: No longer include <netinet/in.h>, <sys/socket.h>, - or <winsock2.h> here. Instead include "gdb_socket.h". - (remote_open): Use union gdb_sockaddr_u. - * remote-utils.c: No longer include <netinet/in.h>, <sys/socket.h> - or <winsock2.h> here. Instead include "gdb_socket.h". - (handle_accept_event, remote_prepare): Use union gdb_sockaddr_u. - * tracepoint.c: Include "gdb_socket.h" instead of <sys/socket.h> - or <sys/un.h>. - (init_named_socket, gdb_agent_helper_thread): Use union - gdb_sockaddr_u. - -2015-03-07 Pedro Alves <palves@redhat.com> - - * configure.ac (build_warnings): Move - -Wdeclaration-after-statement to the C-specific set. - * configure: Regenerate. - -2015-03-07 Pedro Alves <palves@redhat.com> - - * gdbreplay.c: No longer include <netinet/in.h>, <sys/socket.h>, - or <winsock2.h> here. Instead include "gdb_socket.h". - (remote_open): Use union gdb_sockaddr_u. - * remote-utils.c: No longer include <netinet/in.h>, <sys/socket.h> - or <winsock2.h> here. Instead include "gdb_socket.h". - (handle_accept_event, remote_prepare): Use union gdb_sockaddr_u. - * tracepoint.c: Include "gdb_socket.h" instead of <sys/socket.h> - or <sys/un.h>. - (init_named_socket, gdb_agent_helper_thread): Use union - gdb_sockaddr_u. - -2015-03-07 Pedro Alves <palves@redhat.com> - - Adjust all callers of TRY_CATCH to use TRY/CATCH/END_CATCH - instead. - -2015-03-06 Yao Qi <yao.qi@linaro.org> - - * linux-aarch64-low.c (aarch64_insert_point): Use - show_debug_regs as a boolean. - (aarch64_remove_point): Likewise. - -2015-03-05 Pedro Alves <palves@redhat.com> - - * lynx-low.c (lynx_target_ops): Install NULL hooks for - stopped_by_sw_breakpoint, supports_stopped_by_sw_breakpoint, - stopped_by_hw_breakpoint, supports_stopped_by_hw_breakpoint. - * nto-low.c (nto_target_ops): Likewise. - * spu-low.c (spu_target_ops): Likewise. - * win32-low.c (win32_target_ops): Likewise. - -2015-03-04 Pedro Alves <palves@redhat.com> - - * linux-low.c (check_stopped_by_breakpoint) [USE_SIGTRAP_SIGINFO]: - Decide whether a breakpoint triggered based on the SIGTRAP's - siginfo.si_code. - (thread_still_has_status_pending_p) [USE_SIGTRAP_SIGINFO]: Don't check whether a - breakpoint is inserted if relying on SIGTRAP's siginfo.si_code. - (linux_low_filter_event): Check for breakpoints before checking - watchpoints. - (linux_wait_1): Don't re-increment the PC if relying on SIGTRAP's - siginfo.si_code. - (linux_stopped_by_sw_breakpoint) - (linux_supports_stopped_by_sw_breakpoint) - (linux_stopped_by_hw_breakpoint) - (linux_supports_stopped_by_hw_breakpoint): New functions. - (linux_target_ops): Install new target methods. - -2015-03-04 Pedro Alves <palves@redhat.com> - - * remote-utils.c (prepare_resume_reply): Report swbreak/hbreak. - * server.c (swbreak_feature, hwbreak_feature): New globals. - (handle_query) <qSupported>: Handle "swbreak+" and "hwbreak+". - (captured_main): Clear swbreak_feature and hwbreak_feature. - * server.h (swbreak_feature, hwbreak_feature): Declare. - * target.h (struct target_ops) <stopped_by_sw_breakpoint, - supports_stopped_by_sw_breakpoint, stopped_by_hw_breakpoint, - supports_stopped_by_hw_breakpoint>: New fields. - (target_supports_stopped_by_sw_breakpoint) - (target_stopped_by_sw_breakpoint) - (target_supports_stopped_by_hw_breakpoint) - (target_stopped_by_hw_breakpoint): Declare. - -2015-03-04 Pedro Alves <palves@redhat.com> - - enum lwp_stop_reason -> enum target_stop_reason - * linux-low.c (check_stopped_by_breakpoint): Adjust. - (thread_still_has_status_pending_p, check_stopped_by_watchpoint) - (linux_wait_1, stuck_in_jump_pad_callback) - (move_out_of_jump_pad_callback, linux_resume_one_lwp) - (linux_stopped_by_watchpoint): - * linux-low.h (enum lwp_stop_reason): Delete. - (struct lwp_info) <stop_reason>: Now an enum target_stop_reason. - * linux-x86-low.c (x86_linux_prepare_to_resume): Adjust. - -2015-03-04 Yao Qi <yao.qi@linaro.org> - - * Makefile.in (SFILES): Add linux-aarch64-low.c. - -2015-03-03 Gary Benson <gbenson@redhat.com> - - * hostio.c (handle_vFile): Fix prefix lengths. - -2015-03-03 Markus Metzger <markus.t.metzger@intel.com> - - * linux-low.c (linux_low_enable_btrace): Do not overwrite non-zero - ptr_bits. - -2015-03-02 Andreas Arnez <arnez@linux.vnet.ibm.com> - - * Makefile.in (s390-vx-linux64.c, s390-tevx-linux64.c) - (s390x-vx-linux64.c, s390x-tevx-linux64.c): New rules. - (clean): Add "rm -f" for above C files. - * configure.srv (srv_regobj): Add s390-vx-linux64.o, - s390-tevx-linux64.o, s390x-vx-linux64.o, and s390x-tevx-linux64.o. - (srv_xmlfiles): Add s390-vx-linux64.xml, s390-tevx-linux64.xml, - s390x-vx-linux64.xml, s390x-tevx-linux64.xml, and s390-vx.xml. - * linux-s390-low.c (HWCAP_S390_VX): New macro. - (init_registers_s390_vx_linux64, init_registers_s390_tevx_linux64) - (init_registers_s390x_vx_linux64) - (init_registers_s390x_tevx_linux64) - (tdesc_s390_vx_linux64, tdesc_s390_tevx_linux64) - (tdesc_s390x_vx_linux64, tdesc_s390x_tevx_linux64): New extern - declarations. - (s390_fill_vxrs_low, s390_store_vxrs_low, s390_fill_vxrs_high) - (s390_store_vxrs_high): New functions. - (s390_regsets): Add entries for NT_S390_VXRS_LOW and - NT_S390_VXRS_HIGH. - (s390_arch_setup): Add logic for selecting one of the new target - descriptions. Activate the new vector regsets if applicable. - (initialize_low_arch): Also invoke init_registers_s390_vx_linux64, - init_registers_s390_tevx_linux64, init_registers_s390x_vx_linux64, - and init_registers_s390x_tevx_linux64. - -2015-03-01 Pedro Alves <palves@redhat.com> - - * linux-i386-ipa.c (gdb_agent_get_raw_reg): Constify 'raw_regs' - parameter. - -2015-02-27 Pedro Alves <palves@redhat.com> - - * linux-x86-low.c (u_debugreg_offset): New function. - (x86_linux_dr_get, x86_linux_dr_set): Use it. - -2015-02-27 Pedro Alves <palves@redhat.com> - - * gdb_proc_service.h: Wrap with EXTERN_C_PUSH/EXTERN_C_POP. - [!HAVE_PROC_SERVICE_H] (struct ps_prochandle): Forward declare. - [!HAVE_PROC_SERVICE_H] (ps_pdread, ps_pdwrite, ps_ptread) - ps_ptwrite, ps_lgetregs, ps_lsetregs, ps_lgetfpregs) - (ps_lsetfpregs, ps_getpid) - (ps_get_thread_area, ps_pglobal_lookup, ps_pstop, ps_pcontinue) - (ps_lstop, ps_lcontinue, ps_lgetxregsize, ps_lgetxregs) - (ps_lsetxregs, ps_plog): Declare. - -2015-02-27 Pedro Alves <palves@redhat.com> - - * linux-amd64-ipa.c (gdb_agent_get_raw_reg): Use - IP_AGENT_EXPORT_FUNC. - * linux-i386-ipa.c (gdb_agent_get_raw_reg): Use - IP_AGENT_EXPORT_FUNC. - * tracepoint.c (ATTR_USED, ATTR_NOINLINE, ATTR_CONSTRUCTOR) - (IP_AGENT_EXPORT): Delete. - (gdb_tp_heap_buffer, gdb_jump_pad_buffer, gdb_jump_pad_buffer_end) - (gdb_trampoline_buffer, gdb_trampoline_buffer_end) - (gdb_trampoline_buffer_error, collecting, gdb_collect) - (stop_tracing, flush_trace_buffer, about_to_request_buffer_space) - (trace_buffer_is_full, stopping_tracepoint, expr_eval_result) - (error_tracepoint, tracepoints, tracing, trace_buffer_ctrl) - (trace_buffer_ctrl_curr, trace_buffer_lo, trace_buffer_hi) - (traceframe_read_count, traceframe_write_count) - (traceframes_created, trace_state_variables, get_raw_reg) - (get_trace_state_variable_value, set_trace_state_variable_value) - (ust_loaded, helper_thread_id, cmd_buf): Use - IPA_SYM_EXPORTED_NAME. - (stop_tracing, flush_trace_buffer): Use IP_AGENT_EXPORT_FUNC. - (tracepoints) Use IP_AGENT_EXPORT_VAR. - (stopping_tracepoint, trace_buffer_is_full, expr_eval_result): Use - IP_AGENT_EXPORT_VAR and wrap in EXTERN_C_PUSH/EXTERN_C_POP. - (last_tracepoint): Move into !IN_PROCESS_AGENT block. - (error_tracepoint): Use IP_AGENT_EXPORT_VAR and wrap in - EXTERN_C_PUSH/EXTERN_C_POP. - (trace_state_variables): Use IP_AGENT_EXPORT_VAR. - (trace_buffer_lo, trace_buffer_hi): Use IP_AGENT_EXPORT_VAR and - wrap in EXTERN_C_PUSH/EXTERN_C_POP. - (trace_buffer_ctrl, trace_buffer_ctrl_curr) - (traceframe_write_count, traceframe_read_count) - (traceframes_created, tracing): Use IP_AGENT_EXPORT_VAR. - (about_to_request_buffer_space, get_trace_state_variable_value) - (set_trace_state_variable_value): Use IP_AGENT_EXPORT_FUNC. - (collecting): Use IP_AGENT_EXPORT_VAR and wrap in - EXTERN_C_PUSH/EXTERN_C_POP. - (gdb_collect): Use IP_AGENT_EXPORT_FUNC. - (ust_loaded, cmd_buf): Use IP_AGENT_EXPORT_VAR. - (helper_thread_id, gdb_agent_capability): Use IP_AGENT_EXPORT_VAR - and wrap in EXTERN_C_PUSH/EXTERN_C_POP. - (gdb_tp_heap_buffer, gdb_jump_pad_buffer, gdb_jump_pad_buffer_end) - (gdb_trampoline_buffer, gdb_trampoline_buffer_end) - (gdb_trampoline_buffer_error): Use IP_AGENT_EXPORT_VAR. - * tracepoint.h (ATTR_USED, ATTR_NOINLINE, EXPORTED_SYMBOL): - Define. - (IP_AGENT_EXPORT_FUNC, IP_AGENT_EXPORT_VAR) - (IP_AGENT_EXPORT_VAR_DECL): Define. - (tracing): Declare. - (gdb_agent_get_raw_reg): Declare. - -2015-02-27 Tom Tromey <tromey@redhat.com> - Pedro Alves <palves@redhat.com> - - Rename symbols whose names are reserved C++ keywords throughout. - -2015-02-27 Pedro Alves <palves@redhat.com> - - * Makefile.in (COMPILER): New, get it from autoconf. - (CXX): Get from autoconf instead. - (COMPILE.pre): Use COMPILER. - (CC-LD): Rename to ... - (CC_LD): ... this. Use COMPILER. - (gdbserver$(EXEEXT), gdbreplay$(EXEEXT), $(IPA_LIB)): Adjust. - (CXX_FOR_TARGET): Default to g++ instead of gcc. - * acinclude.m4: Include build-with-cxx.m4. - * configure.ac: Call AC_PROG_CXX and GDB_AC_BUILD_WITH_CXX. - Disable -Werror by default if building in C++ mode. - (build_warnings): Add -Wno-sign-compare, -Wno-write-strings and - -Wno-narrowing in C++ mode. Run supported-warning-flags tests with - the C++ compiler. Save/restore CXXFLAGS too. - * configure: Regenerate. - -2015-02-27 Pedro Alves <palves@redhat.com> - - * acinclude.m4: Include libiberty.m4. - * configure.ac: Call libiberty_INIT. - * config.in, configure: Regenerate. - -2015-02-26 Pedro Alves <palves@redhat.com> - - * linux-low.c (linux_wait_1): When incrementing the PC past a - program breakpoint always use the_low_target.breakpoint_len as - increment, rather than the maximum between that and - the_low_target.decr_pc_after_break. - -2015-02-23 Pedro Alves <palves@redhat.com> - - * linux-low.c (check_stopped_by_breakpoint): Don't check if the - thread was doing a step-over; always adjust the PC if - we stepped over a permanent breakpoint. - (linux_wait_1): If we stepped over breakpoint that was on top of a - permanent breakpoint, manually advance the PC past it. - -2015-02-23 Pedro Alves <palves@redhat.com> - - * linux-x86-low.c (REGSIZE): Define in both 32-bit and 64-bit - modes. - (x86_fill_gregset, x86_store_gregset): Use it when handling - $orig_eax. - -2015-02-20 Pedro Alves <palves@redhat.com> - - * thread-db.c: Include "nat/linux-procfs.h". - (thread_db_init): Skip listing new threads if the kernel supports - PTRACE_EVENT_CLONE and /proc/PID/task/ is accessible. - -2015-02-20 Pedro Alves <palves@redhat.com> - - * linux-low.c (status_pending_p_callback): Use ptid_match. - -2015-02-19 Antoine Tremblay <antoine.tremblay@ericsson.com> - - PR breakpoints/16812 - * linux-low.c (wstatus_maybe_breakpoint): Remove. - (linux_low_filter_event): Update wstatus_maybe_breakpoint name. - (linux_wait_1): Report SIGTRAP,SIGILL,SIGSEGV. - -2015-02-10 Antoine Tremblay <antoine.tremblay@ericsson.com> - - PR breakpoints/15956 - * tracepoint.c (cmd_qtinit): Add check for current_thread. - -2015-02-09 Markus Metzger <markus.t.metzger@intel.com> - - * linux-low.c (linux_low_btrace_conf): Print size. - * server.c (handle_btrace_conf_general_set): New. - (hanle_general_set): Call handle_btrace_conf_general_set. - (handle_query): Report Qbtrace-conf:bts:size as supported. - -2015-02-09 Markus Metzger <markus.t.metzger@intel.com> - - * linux-low.c (linux_low_enable_btrace): Update parameters. - (linux_low_btrace_conf): New. - (linux_target_ops)<to_btrace_conf>: Initialize. - * server.c (current_btrace_conf): New. - (handle_btrace_enable): Rename to ... - (handle_btrace_enable_bts): ... this. Pass ¤t_btrace_conf - to target_enable_btrace. Update comment. Update users. - (handle_qxfer_btrace_conf): New. - (qxfer_packets): Add btrace-conf entry. - (handle_query): Report qXfer:btrace-conf:read as supported packet. - * target.h (target_ops)<enable_btrace>: Update parameters and comment. - (target_ops)<read_btrace_conf>: New. - (target_enable_btrace): Update parameters. - (target_read_btrace_conf): New. - -2015-02-09 Markus Metzger <markus.t.metzger@intel.com> - - * server.c (handle_btrace_general_set): Remove call to - target_supports_btrace. - (supported_btrace_packets): New. - (handle_query): Call supported_btrace_packets. - * target.h: include btrace-common.h. - (btrace_target_info): Removed. - (supports_btrace, target_supports_btrace): Update parameters. - -2015-02-09 Markus Metzger <markus.t.metzger@intel.com> - - * Makefile.in (SFILES): Add common/btrace-common.c. - (OBS): Add common/btrace-common.o. - (btrace-common.o): Add build rules. - * linux-low: Include btrace-common.h. - (linux_low_read_btrace): Use struct btrace_data. Call - btrace_data_init and btrace_data_fini. - -2015-02-06 Pedro Alves <palves@redhat.com> - - * thread-db.c (find_new_threads_callback): Add debug output. - -2015-02-04 Pedro Alves <palves@redhat.com> - - * linux-low.c (handle_extended_wait): Don't resume LWPs here. - (resume_stopped_resumed_lwps): New function. - (linux_wait_for_event_filtered): Use it. - -2015-01-15 Sergio Durigan Junior <sergiodj@redhat.com> - - * Makefile.in (SFILES): Add linux-personality.c. - (linux-personality.o): New rule. - * configure.srv (srv_linux_obj): Add linux-personality.o to the - list of objects to be built. - * linux-low.c: Include nat/linux-personality.h. - (linux_create_inferior): Remove code to disable address space - randomization (moved to ../nat/linux-personality.c). Create - cleanup to disable address space randomization. - -2015-01-15 Sergio Durigan Junior <sergiodj@redhat.com> - - * Makefile.in (posix-strerror.o): New rule. - (mingw-strerror.o): Likewise. - * configure: Regenerated. - * configure.ac: Source file ../common/common.host. Initialize new - variable srv_host_obs. Add srv_host_obs to GDBSERVER_DEPFILES. - -2015-01-14 Yao Qi <yao@codesourcery.com> - - * Makefile.in (SFILES): Add nat/ppc-linux.c. - (ppc-linux.o): New rule. - * configure.srv (powerpc*-*-linux*): Add ppc-linux.o. - * configure.ac: AC_CHECK_FUNCS(getauxval). - * config.in: Re-generated. - * configure: Re-generated. - * linux-ppc-low.c (ppc_arch_setup) [__powerpc64__]: Call - ppc64_64bit_inferior_p - -2015-01-14 Yao Qi <yao@codesourcery.com> - - * linux-ppc-low.c: Include "nat/ppc-linux.h". - (PPC_FEATURE_HAS_VSX): Move to nat/ppc-linux.h. - (PPC_FEATURE_HAS_ALTIVEC, PPC_FEATURE_HAS_SPE): Likewise. - (PT_ORIG_R3, PT_TRAP): Likewise. - (PTRACE_GETVSXREGS, PTRACE_SETVSXREGS): Likewise. - (PTRACE_GETVRREGS, PTRACE_SETVRREGS): Likewise. - (PTRACE_GETEVRREGS, PTRACE_SETEVRREGS): Likewise. - -2015-01-10 Joel Brobecker <brobecker@adacore.com> - - * i387-fp.c (i387_cache_to_xsave): In look over - num_avx512_zmmh_high_registers, replace use of struct i387_xsave - zmmh_low_space field by use of zmmh_high_space. - -2015-01-09 Pedro Alves <palves@redhat.com> - - * linux-low.c (step_over_bkpt): Move higher up in the file. - (handle_extended_wait): Don't store the stop_pc here. - (get_stop_pc): Adjust comments and rename to ... - (check_stopped_by_breakpoint): ... this. Record whether the LWP - stopped for a software breakpoint or hardware breakpoint. - (thread_still_has_status_pending_p): New function. - (status_pending_p_callback): Use - thread_still_has_status_pending_p. If the event is no longer - interesting, resume the LWP. - (handle_tracepoints): Add assert. - (maybe_move_out_of_jump_pad): Remove cancel_breakpoints call. - (wstatus_maybe_breakpoint): New function. - (cancel_breakpoint): Delete function. - (check_stopped_by_watchpoint): New function, factored out from - linux_low_filter_event. - (lp_status_maybe_breakpoint): Delete function. - (linux_low_filter_event): Remove filter_ptid argument. - Leave thread group exits pending here. Store the LWP's stop PC. - Always leave events pending. - (linux_wait_for_event_filtered): Pull all events out of the - kernel, and leave them all pending. - (count_events_callback, select_event_lwp_callback): Consider all - events. - (cancel_breakpoints_callback, linux_cancel_breakpoints): Delete. - (select_event_lwp): Only give preference to the stepping LWP in - all-stop mode. Adjust comments. - (ignore_event): New function. - (linux_wait_1): Delete 'retry' label. Use ignore_event. Remove - references to cancel_breakpoints. Adjust to renames. Also give - equal priority to all LWPs that have had events in non-stop mode. - If reporting a software breakpoint event, unadjust the LWP's PC. - (linux_wait): If linux_wait_1 returned an ignored event, retry. - (stuck_in_jump_pad_callback, move_out_of_jump_pad_callback): - Adjust. - (linux_resume_one_lwp): Store the LWP's PC. Adjust. - (resume_status_pending_p): Use thread_still_has_status_pending_p. - (linux_stopped_by_watchpoint): Adjust. - (linux_target_ops): Remove reference to linux_cancel_breakpoints. - * linux-low.h (enum lwp_stop_reason): New. - (struct lwp_info) <stop_pc>: Adjust comment. - <stopped_by_watchpoint>: Delete field. - <stop_reason>: New field. - * linux-x86-low.c (x86_linux_prepare_to_resume): Adjust. - * mem-break.c (software_breakpoint_inserted_here) - (hardware_breakpoint_inserted_here): New function. - * mem-break.h (software_breakpoint_inserted_here) - (hardware_breakpoint_inserted_here): Declare. - * target.h (struct target_ops) <cancel_breakpoints>: Remove field. - (cancel_breakpoints): Delete. - * tracepoint.c (clear_installed_tracepoints, stop_tracing) - (upload_fast_traceframes): Remove references to - cancel_breakpoints. - -2015-01-09 Pedro Alves <palves@redhat.com> - - * thread-db.c (find_new_threads_callback): Ignore thread if the - kernel thread ID is -1. - -2015-01-09 Pedro Alves <palves@redhat.com> - - * linux-low.c (linux_attach_fail_reason_string): Move to - nat/linux-ptrace.c, and rename. - (linux_attach_lwp): Update comment. - (attach_proc_task_lwp_callback): New function. - (linux_attach): Adjust to rename and use - linux_proc_attach_tgid_threads. - (linux_attach_fail_reason_string): Delete declaration. - -2015-01-01 Joel Brobecker <brobecker@adacore.com> - - * gdbreplay.c (gdbreplay_version): Update copyright year to 2015. - * server.c (gdbserver_version): Likewise. - -2014-12-29 Sergio Durigan Junior <sergiodj@redhat.com> - - * remote-utils.c: Include ctype.h. - (input_interrupt): Explicitly handle the case when the char - received is the NUL byte. Improve the printing of non-ASCII - characters. - -2014-12-16 Joel Brobecker <brobecker@adacore.com> - - * linux-low.c (linux_low_filter_event): Update call to - linux_enable_event_reporting following the addition of - a new parameter to that function. - -2014-12-16 Catalin Udma <catalin.udma@freescale.com> - - PR server/17457 - * linux-aarch64-low.c (AARCH64_FPSR_REGNO): New define. - (AARCH64_FPCR_REGNO): Likewise. - (AARCH64_NUM_REGS): Update to include fpsr/fpcr registers. - (aarch64_fill_fpregset): Add missing fpsr/fpcr registers. - (aarch64_store_fpregset): Likewise. - -2014-12-15 Joel Brobecker <brobecker@adacore.com> - - * lynx-low.c (lynx_resume): Use PTRACE_SINGLESTEP_ONE if N == 1. - Remove FIXME comment about assumption about N. - -2014-12-13 Joel Brobecker <brobecker@adacore.com> - - * configure.ac: If large-file support is disabled in GDBserver, - pass --disable-largefile to ACX_CONFIGURE_DIR call for "gnulib". - * configure: Regenerate. - -2014-12-12 Andreas Arnez <arnez@linux.vnet.ibm.com> - - * linux-low.c (regsets_fetch_inferior_registers): Suppress the - warning upon ENODATA from ptrace. - * linux-s390-low.c (s390_store_tdb): New. - (s390_regsets): Add regset for NT_S390_TDB. - -2014-12-12 Andreas Arnez <arnez@linux.vnet.ibm.com> - - * linux-low.c (regsets_store_inferior_registers): Skip regsets - without a fill_function. - * linux-s390-low.c (s390_fill_last_break): Remove. - (s390_regsets): Set fill_function to NULL for NT_S390_LAST_BREAK. - (s390_arch_setup): Use regset's size instead of fill_function for - loop end condition. - -2014-12-12 Andreas Arnez <arnez@linux.vnet.ibm.com> - - * linux-low.c (regsets_fetch_inferior_registers): Do not invoke - the regset's store function when ptrace returned an error. - * regcache.c (get_thread_regcache): Invalidate register cache - before fetching inferior's registers. - -2014-12-12 Andreas Arnez <arnez@linux.vnet.ibm.com> - - * linux-low.c (regsets_fetch_inferior_registers): Rephrase - while-loop as for-loop. - (regsets_store_inferior_registers): Likewise. - -2014-11-28 Yao Qi <yao@codesourcery.com> - - * configure.ac(AC_CHECK_FUNCS): Remove readlink. - * config.in, configure: Re-generate. - * hostio.c (handle_unlink): Remove code checking HAVE_READLINK - is defined. - -2014-11-21 Yao Qi <yao@codesourcery.com> - - * configure.ac: Don't invoke AC_FUNC_ALLOCA. - (AC_CHECK_HEADERS): Remove malloc.h. - * configure: Re-generated. - * config.in: Re-generated. - * server.h: Don't include alloca.h and malloc.h. - * gdbreplay.c: Don't check HAVE_ALLOCA_H is defined. - Don't include malloc.h. - -2014-11-17 Joel Brobecker <brobecker@adacore.com> - - * lynx-low.c (lynx_write_memory): Put lynx_read_memory and - corresponding ERRNO check in same block. - -2014-11-12 Pedro Alves <palves@redhat.com> - - * server.c (cont_thread): Update comment. - (start_inferior, attach_inferior): No longer clear cont_thread. - (handle_v_cont): No longer set cont_thread. - (captured_main): Clear cont_thread each time a GDB connects. - -2014-11-12 Pedro Alves <palves@redhat.com> - - * linux-low.c (linux_wait_1): Don't force a wait for the Hc - thread, and don't resume all threads if the Hc thread has exited. - -2014-11-12 Pedro Alves <palves@redhat.com> - - * linux-low.c (linux_request_interrupt): Always send a SIGINT to - the process group instead of to a specific LWP. - -2014-10-15 Pedro Alves <palves@redhat.com> - - PR server/17487 - * win32-arm-low.c (arm_set_thread_context): Remove current_event - parameter. - (arm_set_thread_context): Delete. - (the_low_target): Adjust. - * win32-i386-low.c (debug_registers_changed) - (debug_registers_used): Delete. - (update_debug_registers_callback): New function. - (x86_dr_low_set_addr, x86_dr_low_set_control): Mark all threads as - needing to update their debug registers. - (win32_get_current_dr): New function. - (x86_dr_low_get_addr, x86_dr_low_get_control) - (x86_dr_low_get_status): Fetch the debug register from the thread - record's context. - (i386_initial_stuff): Adjust. - (i386_get_thread_context): Remove current_event parameter. Don't - clear debug_registers_changed nor copy DR values to - debug_reg_state. - (i386_set_thread_context): Delete. - (i386_prepare_to_resume): New function. - (i386_thread_added): Mark the thread as needing to update irs - debug registers. - (the_low_target): Remove i386_set_thread_context and install - i386_prepare_to_resume. - * win32-low.c (win32_get_thread_context): Adjust. - (win32_set_thread_context): Use SetThreadContext - directly. - (win32_prepare_to_resume): New function. - (win32_require_context): New function, factored out from ... - (thread_rec): ... this. - (continue_one_thread): Call win32_prepare_to_resume on each thread - we're about to continue. - (win32_resume): Call win32_prepare_to_resume on the event thread. - * win32-low.h (struct win32_thread_info) - <debug_registers_changed>: New field. - (struct win32_target_ops): Change prototype of set_thread_context, - delete set_thread_context and add prepare_to_resume. - (win32_require_context): New declaration. - -2014-10-08 Gary Benson <gbenson@redhat.com> - - * server.h: Do not include common-exceptions.h. - -2014-10-08 Gary Benson <gbenson@redhat.com> - - * server.h: Do not include cleanups.h. - -2014-09-30 James Hogan <james.hogan@imgtec.com> - - * Makefile.in (clean): Add rm -f commands for mips-dsp-linux.c and - mips64-dsp-linux.c. - -2014-09-23 Yao Qi <yao@codesourcery.com> - - * linux-low.c (lp_status_maybe_breakpoint): New function. - (linux_low_filter_event): Call lp_status_maybe_breakpoint. - (count_events_callback): Likewise. - (select_event_lwp_callback): Likewise. - (cancel_breakpoints_callback): Likewise. - -2014-09-19 Don Breazeal <donb@codesourcery.com> - - * linux-low.c (handle_extended_wait): Call - linux_ptrace_get_extended_event. - (get_stop_pc, get_detach_signal, linux_low_filter_event): Call - linux_is_extended_waitstatus. - -2014-09-16 Joel Brobecker <brobecker@adacore.com> - - * Makefile.in (CPPFLAGS): Define. - (INTERNAL_CFLAGS_BASE): Add ${CPPFLAGS}. - (IPAGENT_CFLAGS): Remove ${CPPFLAGS}. - -2014-09-16 Gary Benson <gbenson@redhat.com> - - * inferiors.h (current_inferior): Renamed as... - (current_thread): New variable. All uses updated. - * linux-low.c (get_pc): Renamed saved_inferior as saved_thread. - (maybe_move_out_of_jump_pad): Likewise. - (cancel_breakpoint): Likewise. - (linux_low_filter_event): Likewise. - (wait_for_sigstop): Likewise. - (linux_resume_one_lwp): Likewise. - (need_step_over_p): Likewise. - (start_step_over): Likewise. - (linux_stabilize_threads): Renamed save_inferior as saved_thread. - * linux-x86-low.c (x86_linux_update_xmltarget): Likewise. - * proc-service.c (ps_lgetregs): Renamed reg_inferior as reg_thread - and save_inferior as saved_thread. - * regcache.c (get_thread_regcache): Renamed saved_inferior as - saved_thread. - (regcache_invalidate_thread): Likewise. - * remote-utils.c (prepare_resume_reply): Likewise. - * thread-db.c (thread_db_get_tls_address): Likewise. - (disable_thread_event_reporting): Likewise. - (remove_thread_event_breakpoints): Likewise. - * tracepoint.c (gdb_agent_about_to_close): Renamed save_inferior - as saved_thread. - * target.h (set_desired_inferior): Renamed as... - (set_desired_thread): New declaration. All uses updated. - * server.c (myresume): Updated comment to reference thread instead - of inferior. - (handle_serial_event): Likewise. - (handle_target_event): Likewise. - -2014-09-12 Tom Tromey <tromey@redhat.com> - Gary Benson <gbenson@redhat.com> - - * regcache.h: Include common-regcache.h. - (regcache_read_pc): Don't declare. - * regcache.c (get_thread_regcache_for_ptid): New function. - -2014-09-11 Tom Tromey <tromey@redhat.com> - Gary Benson <gbenson@redhat.com> - - * symbol.c: New file. - * Makefile.in (SFILES): Add symbol.c. - (OBS): Add symbol.o. - -2014-09-11 Gary Benson <gbenson@redhat.com> - - * target.c (target_stop_ptid, target_continue_ptid): New - functions. - -2014-09-11 Tom Tromey <tromey@redhat.com> - Gary Benson <gbenson@redhat.com> - - * target.h: Include target/target.h. - * target.c (target_read_memory, target_read_uint32) - (target_write_memory): New functions. - -2014-09-11 Gary Benson <gbenson@redhat.com> - - * server.h (debug_hw_points): Don't declare. - * server.c (debug_hw_points): Don't define. Replace all uses - with show_debug_regs. - * linux-aarch64-low.c (debug_hw_points): Don't define. Replace - all uses with show_debug_regs. - -2014-09-08 Edjunior Barbosa Machado <emachado@linux.vnet.ibm.com> - - * linux-ppc-low.c (ppc_collect_ptrace_register): Adjust routine to take - endianness into account. - (ppc_supply_ptrace_register): Likewise. - -2014-09-03 James Hogan <james.hogan@imgtec.com> - - * linux-mips-low.c (mips_read_description): Reset errno to 0 prior - to reading DSP_CONTROL with PTRACE_PEEKUSER ptrace call. - -2014-09-03 Gary Benson <gbenson@redhat.com> - - * linux-x86-low.c (x86_linux_prepare_to_resume): Use - ALL_DEBUG_ADDRESS_REGISTERS. - -2014-09-02 Gary Benson <gbenson@redhat.com> - - * i386-low.h: Renamed as... - * x86-low.h: New file. All type, function and variable name - prefixes changed from "i386_" to "x86_". All references updated. - * i386-low.c: Renamed as... - * x86-low.c: New file. All type, function and variable name - prefixes changed from "i386_" to "x86_". All references updated. - -2014-09-02 Gary Benson <gbenson@redhat.com> - - * linux-x86-low.c (x86_linux_new_process): Use XCNEW. - (x86_linux_new_thread): Likewise. - -2014-08-29 Gary Benson <gbenson@redhat.com> - - * server.h (setjmp.h): Do not include. - (toplevel): Do not declare. - (common-exceptions.h): Include. - (cleanups.h): Likewise. - * server.c (toplevel): Do not define. - (exit_code): New static global. - (detach_or_kill_for_exit_cleanup): New function. - (main): New function. Original main renamed to... - (captured_main): New function. - * utils.c (verror) [!IN_PROCESS_AGENT]: Use throw_verror. - -2014-08-29 Gary Benson <gbenson@redhat.com> - - * Makefile.in (SFILES): Add common/common-exceptions.c. - (OBS): Add common-exceptions.o. - (common-exceptions.o): New rule. - * utils.c (prepare_to_throw_exception): New function. - -2014-08-29 Gary Benson <gbenson@redhat.com> - - * config.in: Regenerate. - * configure: Likewise. - -2014-08-29 Gary Benson <gbenson@redhat.com> - - * Makefile.in (SFILES): Add common/cleanups.c. - (OBS): cleanups.o. - (cleanups.o): New rule. - -2014-08-29 Gary Benson <gbenson@redhat.com> - - * utils.c (internal_vwarning): New function. - -2014-08-28 Gary Benson <gbenson@redhat.com> - - * utils.h (fatal): Remove declaration. - * utils.c (fatal): Remove function. - -2014-08-28 Gary Benson <gbenson@redhat.com> - - * tracepoint.c (gdb_agent_init): Replace fatal with - perror_with_name. - (initialize_tracepoint): Likewise. - -2014-08-28 Gary Benson <gbenson@redhat.com> - - * remote-utils.c (remote_prepare): Replace fatal with error. - -2014-08-28 Gary Benson <gbenson@redhat.com> - - * linux-low.c (linux_async): Replace fatal with warning. - Tidy up and return. - (linux_start_non_stop): Return -1 if linux_async failed. - -2014-08-28 Gary Benson <gbenson@redhat.com> - - * linux-x86-low.c (i386_dr_low_set_addr): Replace check with - gdb_assert. - (i386_dr_low_get_addr): Remove vague comment. - * win32-i386-low.c (i386_dr_low_set_addr): Replace check with - gdb_assert. - -2014-08-28 Gary Benson <gbenson@redhat.com> - - * inferiors.c (get_thread_process): Replace check with gdb_assert. - * linux-low.c (linux_wait_for_event_filtered): Replace fatal with - internal_error. - (linux_resume_one_lwp): Likewise. - * linux-x86-low.c (x86_siginfo_fixup): Replace checks with - gdb_assert. - * mem-break.c (raw_bkpt_type_to_target_hw_bp_type): Replace fatal - with internal_error. - * regcache.c (get_thread_regcache): Replace check with gdb_assert. - (init_register_cache): Replace fatal with gdb_assert_not_reached. - (find_register_by_name): Replace fatal with internal_error. - (find_regno): Likewise. - * tdesc.c (init_target_desc): Replace check with gdb_assert. - * thread-db.c (thread_db_create_event): Likewise. - (thread_db_load_search): Likewise. - (try_thread_db_load_1): Likewise. - * tracepoint.c (get_jump_space_head): Replace fatal with - internal_error. - (claim_trampoline_space): Likewise. - (have_fast_tracepoint_trampoline_buffer): Likewise. - (cmd_qtstart): Likewise. - (stop_tracing): Likewise. - (fast_tracepoint_collecting): Likewise. - (target_malloc): Likewise. - (download_tracepoint): Likewise. - (download_trace_state_variables): Replace check with gdb_assert. - (upload_fast_traceframes): Replace fatal with internal_error. - -2014-08-19 Tom Tromey <tromey@redhat.com> - Gary Benson <gbenson@redhat.com> - - * Makefile.in (SFILES): Add common/common-debug.c. - (OBS): Add common-debug.o. - (common-debug.o): New rule. - * debug.h (debug_printf): Don't declare. - * debug.c (debug_printf): Renamed and rewritten as... - (debug_vprintf): New function. - -2014-08-19 Gary Benson <gbenson@redhat.com> - - * utils.h: Do not include print-utils.h. - -2014-08-19 Tom Tromey <tromey@redhat.com> - Gary Benson <gbenson@redhat.com> - - * server.h: Add static assertion. - (gdb_byte, CORE_ADDR, LONGEST, ULONGEST): Remove. - -2014-08-19 Tom Tromey <tromey@redhat.com> - Gary Benson <gbenson@redhat.com> - - * Makefile.in (SFILES): Add common/errors.c. - (OBS): Add errors.o. - (IPA_OBS): Add errors-ipa.o. - (errors.o): New rule. - (errors-ipa.o): Likewise. - * utils.h (perror_with_name, error, warning): Don't declare. - * utils.c (warning): Renamed and rewritten as... - (vwarning): New function. - (error): Renamed and rewritten as... - (verror): New function. - (internal_error): Renamed and rewritten as... - (internal_verror): New function. - -2014-08-07 Gary Benson <gbenson@redhat.com> - - * configure.ac (AC_CHECK_HEADERS): Remove errno.h. - * configure: Regenerate. - * config.in: Likewise. - * server.h: Do not include errno.h. - * event-loop.c: Likewise. - * hostio-errno.c: Likewise. - * linux-low.c: Likewise. - * remote-utils.c: Likewise. - * spu-low.c: Likewise. - * utils.c: Likewise. - * gdbreplay.c: Unconditionally include errno.h. - -2014-08-07 Gary Benson <gbenson@redhat.com> - - * server.h: Do not include string.h. - * event-loop.c: Likewise. - * linux-low.c: Likewise. - * regcache.c: Likewise. - * remote-utils.c: Likewise. - * spu-low.c: Likewise. - * utils.c: Likewise. - -2014-08-07 Gary Benson <gbenson@redhat.com> - - * server.h: Do not include gdb_assert.h. - -2014-08-07 Gary Benson <gbenson@redhat.com> - - * server.h: Do not include common-utils.h. - -2014-08-07 Gary Benson <gbenson@redhat.com> - - * server.h: Do not include ptid.h. - * notif.h: Likewise. - -2014-08-07 Gary Benson <gbenson@redhat.com> - - * server.h: Do not include gdb_locale.h. - -2014-08-07 Gary Benson <gbenson@redhat.com> - - * server.h: Do not include gdb/signals.h. - * win32-low.c: Likewise. - -2014-08-07 Gary Benson <gbenson@redhat.com> - - * server.h: Do not include pathmax.h. - -2014-08-07 Gary Benson <gbenson@redhat.com> - - * server.h: Do not include libiberty.h. - * linux-bfin-low.c: Likewise. - -2014-08-07 Gary Benson <gbenson@redhat.com> - - * server.h: Do not include ansidecl.h. - -2014-08-07 Gary Benson <gbenson@redhat.com> - - * linux-x86-low.c: Do not include stddef.h. - * lynx-ppc-low.c: Likewise. - * tracepoint.c: Likewise. - -2014-08-07 Gary Benson <gbenson@redhat.com> - - * server.h: Do not include stdarg.h. - * nto-low.c: Likewise. - -2014-08-07 Gary Benson <gbenson@redhat.com> - - * server.h: Do not include stdlib.h. - * inferiors.c: Likewise. - * linux-low.c: Likewise. - * regcache.c: Likewise. - * spu-low.c: Likewise. - * tracepoint.c: Likewise. - * utils.c: Likewise. - -2014-08-07 Gary Benson <gbenson@redhat.com> - - * server.h: Do not include stdio.h. - * linux-low.c: Likewise. - * remote-utils.c: Likewise. - * spu-low.c: Likewise. - * utils.c: Likewise. - * wincecompat.c: Likewise. - -2014-08-06 Gary Benson <gbenson@redhat.com> - - * regcache.c (init_register_cache): Move conditionals inside if. - -2014-08-06 Gary Benson <gbenson@redhat.com> - - * linux-low.c (linux_supports_non_stop): Use target_is_async_p. - -2014-07-31 Gary Benson <gbenson@redhat.com> - - * ax.h: Do not include server.h. - * gdbthread.h: Likewise. - * lynx-low.h: Likewise. - * notif.h: Likewise. - -2014-07-30 Gary Benson <gbenson@redhat.com> - - * server.h: Include common-defs.h. - Do not include config.h or build-gnulib-gdbserver/config.h. - -2014-07-30 Gary Benson <gbenson@redhat.com> - - * hostio-errno.c: Move server.h to top of includes list. - * inferiors.c: Likewise. - * linux-x86-low.c: Likewise. - * notif.c: Include server.h. - -2014-07-24 Tom Tromey <tromey@redhat.com> - Gary Benson <gbenson@redhat.com> - - * server.h (CORE_ADDR): Now unsigned. - -2014-07-16 Pedro Alves <palves@redhat.com> - - * linux-low.c (linux_kill_one_lwp): Use kill_lwp, not kill. - -2014-07-15 Pedro Alves <palves@redhat.com> - - * linux-low.c (linux_kill_one_lwp): Save errno and work with saved - copy. - -2014-07-11 Pedro Alves <palves@redhat.com> - - * linux-low.c (kill_wait_lwp): New function, based on - kill_one_lwp_callback, but use my_waitpid directly. - (kill_one_lwp_callback, linux_kill): Use it. - -2014-06-23 Pedro Alves <palves@redhat.com> - - * linux-x86-low.c (x86_linux_prepare_to_resume): Clear DR_CONTROL - before setting DR0..DR3. - -2014-06-20 Gary Benson <gbenson@redhat.com> - - * configure.ac (AC_REPLACE_FUNCS) <vasprintf, vsnprintf>: Removed. - * configure: Regenerated. - * config.in: Likewise. - -2014-06-20 Gary Benson <gbenson@redhat.com> - - * Makefile.in (SFILES): Update locations for files moved - from common to nat. - (object file files): Reordered. - -2014-06-20 Gary Benson <gbenson@redhat.com> - - * i386-low.h (i386_dr_low_can_set_addr): Removed. - (i386_dr_low_set_addr): Likewise. - (i386_dr_low_get_addr): Likewise. - (i386_dr_low_can_set_control): Likewise. - (i386_dr_low_set_control): Likewise. - (i386_dr_low_get_control): Likewise. - (i386_dr_low_get_status): Likewise. - (i386_get_debug_register_length): Likewise. - * linux-x86-low.c (i386_dr_low_set_addr): - Changed signature. Made static. - (i386_dr_low_get_addr): Likewise. - (i386_dr_low_set_control): Likewise. - (i386_dr_low_get_control): Likewise. - (i386_dr_low_get_status): Likewise. - (i386_dr_low): New global variable. - * win32-i386-low.c (i386_dr_low_set_addr): - Changed signature. Made static. - (i386_dr_low_get_addr): Likewise. - (i386_dr_low_set_control): Likewise. - (i386_dr_low_get_control): Likewise. - (i386_dr_low_get_status): Likewise. - (i386_dr_low): New global variable. - -2014-06-20 Marcus Shawcroft <marcus.shawcroft@arm.com> - - * configure.ac: Invoke. AC_CHECK_TOOL(AR, ar). - * Makefile.in (AR, AR_FLAGS): Define. - * configure: Regenerate. - -2014-06-19 Gary Benson <gbenson@redhat.com> - - * Makefile.in (i386-dregs.o): New rule. - * configure.srv: Add i386-dregs.o to all targets using i386-low.o. - * i386-low.c (target.h): Remove include. - (TARGET_HAS_DR_LEN_8): Now in i386-dregs.c. - (DR_CONTROL_SHIFT): Likewise. - (DR_CONTROL_SIZE): Likewise. - (DR_RW_EXECUTE): Likewise. - (DR_RW_WRITE): Likewise. - (DR_RW_READ): Likewise. - (DR_RW_IORW): Likewise. - (DR_LEN_1): Likewise. - (DR_LEN_2): Likewise. - (DR_LEN_4): Likewise. - (DR_LEN_8): Likewise. - (DR_LOCAL_ENABLE_SHIFT): Likewise. - (DR_GLOBAL_ENABLE_SHIFT): Likewise. - (DR_ENABLE_SIZE): Likewise. - (DR_LOCAL_SLOWDOWN): Likewise. - (DR_GLOBAL_SLOWDOWN): Likewise. - (DR_CONTROL_RESERVED): Likewise. - (I386_DR_CONTROL_MASK): Likewise. - (I386_DR_VACANT): Likewise. - (I386_DR_LOCAL_ENABLE): Likewise. - (I386_DR_GLOBAL_ENABLE): Likewise. - (I386_DR_DISABLE): Likewise. - (I386_DR_SET_RW_LEN): Likewise. - (I386_DR_GET_RW_LEN): Likewise. - (I386_DR_WATCH_HIT): Likewise. - (i386_wp_op_t): Likewise. - (i386_show_dr): Likewise. - (i386_length_and_rw_bits): Likewise. - (i386_insert_aligned_watchpoint): Likewise. - (i386_remove_aligned_watchpoint): Likewise. - (i386_handle_nonaligned_watchpoint): Likewise. - i386_update_inferior_debug_regs(): Likewise. - (i386_dr_insert_watchpoint): Likewise. - (i386_dr_remove_watchpoint): Likewise. - (i386_dr_region_ok_for_watchpoint): Likewise. - (i386_dr_stopped_data_address): Likewise. - (i386_dr_stopped_by_watchpoint): Likewise. - -2014-06-19 Gary Benson <gbenson@redhat.com> - - * i386-low.c (i386_dr_show): Renamed to - i386_show_dr and made static. All uses updated. - (i386_dr_length_and_rw_bits): Renamed to - i386_length_and_rw_bits and made static. - All uses updated. - (i386_dr_insert_aligned_watchpoint): Renamed to - i386_insert_aligned_watchpoint and made static. - All uses updated. - (i386_dr_remove_aligned_watchpoint): Renamed to - i386_remove_aligned_watchpoint and made static. - All uses updated. - (i386_dr_update_inferior_debug_regs): Renamed to - i386_update_inferior_debug_regs and made static. - All uses updated. - -2014-06-18 Gary Benson <gbenson@redhat.com> - - * i386-low.h (i386_dr_low_can_set_addr): New macro. - (i386_dr_low_can_set_control): Likewise. - (i386_get_debug_register_length): Likewise. - * i386-low.c (i386_dr_low_can_set_addr): Now in i386-low.h. - (i386_dr_low_can_set_control): Likewise. - (i386_get_debug_register_length): Likewise. - -2014-06-17 Gary Benson <gbenson@redhat.com> - - * i386-low.h (i386-dregs.h): New include. - (DR_FIRSTADDR): Now in i386-dregs.h. - (DR_LASTADDR): Likewise. - (DR_NADDR): Likewise. - (DR_STATUS): Likewise. - (DR_CONTROL): Likewise. - (i386_debug_reg_state): Likewise. - (i386_dr_insert_watchpoint): Likewise. - (i386_dr_remove_watchpoint): Likewise. - (i386_dr_region_ok_for_watchpoint): Likewise. - (i386_dr_stopped_data_address): Likewise. - (i386_dr_stopped_by_watchpoint): Likewise. - * i386-low.c (ALL_DEBUG_REGISTERS): Likewise. - -2014-06-18 Gary Benson <gbenson@redhat.com> - - * i386-low.h (i386_low_insert_watchpoint): Renamed to - i386_dr_insert_watchpoint. - (i386_low_remove_watchpoint): Renamed to - i386_dr_remove_watchpoint. - (i386_low_region_ok_for_watchpoint): Renamed to - i386_dr_region_ok_for_watchpoint. - (i386_low_stopped_data_address): Renamed to - i386_dr_stopped_data_address. - (i386_low_stopped_by_watchpoint): Renamed to - i386_dr_stopped_by_watchpoint. - * i386-low.c (i386_show_dr): Renamed to - i386_dr_show and made nonstatic. All uses updated. - (i386_length_and_rw_bits): Renamed to - i386_dr_length_and_rw_bits and made nonstatic. - All uses updated. - (i386_insert_aligned_watchpoint): Renamed to - i386_dr_insert_aligned_watchpoint and made nonstatic. - All uses updated. - (i386_remove_aligned_watchpoint): Renamed to - i386_dr_remove_aligned_watchpoint and made nonstatic. - All uses updated. - (i386_update_inferior_debug_regs): Renamed to - i386_dr_update_inferior_debug_regs and made nonstatic. - All uses updated. - (i386_low_insert_watchpoint): Renamed to - i386_dr_insert_watchpoint. All uses updated. - (i386_low_remove_watchpoint): Renamed to - i386_dr_remove_watchpoint. All uses updated. - (i386_low_region_ok_for_watchpoint): Renamed to - i386_dr_region_ok_for_watchpoint. All uses updated. - (i386_low_stopped_data_address): Renamed to - i386_dr_stopped_data_address. All uses updated. - (i386_low_stopped_by_watchpoint): Renamed to - i386_dr_stopped_by_watchpoint. All uses updated. - -2014-06-18 Gary Benson <gbenson@redhat.com> - - * i386-low.c (i386_dr_low_can_set_addr): New macro. - (i386_dr_low_can_set_control): Likewise. - (i386_insert_aligned_watchpoint): New check. - -2014-06-18 Gary Benson <gbenson@redhat.com> - - * i386-low.c (i386_update_inferior_debug_regs) <inf_state>: - Renamed to state. - -2014-06-18 Gary Benson <gbenson@redhat.com> - - * i386-low.c (i386_length_and_rw_bits): Use internal_error - instead of fatal and error. - (i386_handle_nonaligned_watchpoint): Likewise. - -2014-06-18 Gary Benson <gbenson@redhat.com> - - * i386-low.c (i386_get_debug_register_length): New macro. - (TARGET_HAS_DR_LEN_8): Remove conditional. Use above macro. - (i386_show_dr): Use debug_printf instead of fprintf. Use - phex to format values. - -2014-06-18 Gary Benson <gbenson@redhat.com> - - * i386-low.h: Comment changes. - * i386-low.c: Likewise. - -2014-06-18 Gary Benson <gbenson@redhat.com> - - * i386-low.c: Whitespace changes. - -2014-06-12 Tom Tromey <tromey@redhat.com> - - * utils.c (freeargv): Remove. - -2014-06-12 Tom Tromey <tromey@redhat.com> - - * debug.c (debug_printf): Remove HAVE_GETTIMEOFDAY checks. - * server.c (monitor_show_help): Remove HAVE_GETTIMEOFDAY check. - (parse_debug_format_options): Likewise. - (gdbserver_usage): Likewise. - * Makefile.in (LIBIBERTY_BUILDDIR, LIBIBERTY): New variables. - (SUBDIRS, REQUIRED_SUBDIRS): Add libiberty. - (gdbserver$(EXEEXT), gdbreplay$(EXEEXT)): Depend on and link - against libiberty. - ($(LIBGNU)): Depend on libiberty. - (all-lib): Recurse into all subdirs. - (install-only): Invoke "install" target in subdirs. - (vasprintf.o, vsnprintf.o, safe-ctype.o, lbasename.o): Remove - targets. - * configure: Rebuild. - * configure.ac: Add ACX_CONFIGURE_DIR for libiberty. Don't check - for vasprintf, vsnprintf, or gettimeofday. - * configure.srv: Don't add safe-ctype.o or lbasename.o to - srv_tgtobj. - -2014-06-05 Joel Brobecker <brobecker@adacore.com> - - * development.sh: Delete. - * Makefile.in (config.status): Adjust dependency on development.sh. - * configure.ac: Adjust development.sh source call. - * configure: Regenerate. - -2014-06-02 Pedro Alves <palves@redhat.com> - - * ax.c (gdb_free_agent_expr): New function. - * ax.h (gdb_free_agent_expr): New declaration. - * mem-break.c (delete_gdb_breakpoint_1): Also clear the commands - list. - (clear_breakpoint_conditions, clear_breakpoint_commands): Make - static. - (clear_breakpoint_conditions_and_commands): New function. - * mem-break.h (clear_breakpoint_conditions): Delete declaration. - (clear_breakpoint_conditions_and_commands): New declaration. - -2014-05-23 Ramana Radhakrishnan <ramana.radhakrishnan@arm.com> - - * linux-aarch64-low.c (asm/ptrace.h): Include. - -2014-05-21 Jan Kratochvil <jan.kratochvil@redhat.com> - - Fix TLS access for -static -pthread. - * gdbserver/thread-db.c (struct thread_db): Add td_thr_tlsbase_p. - (thread_db_get_tls_address): Call it if LOAD_MODULE is zero. - (thread_db_load_search, try_thread_db_load_1): Initialize it. - -2014-05-20 Pedro Alves <palves@redhat.com> - - * linux-aarch64-low.c (aarch64_insert_point) - (aarch64_remove_point): No longer check whether the type is - supported here. Adjust to new interface. - (the_low_target): Install aarch64_supports_z_point_type as - supports_z_point_type method. - * linux-arm-low.c (raw_bkpt_type_to_arm_hwbp_type): New function. - (arm_linux_hw_point_initialize): Take an enum raw_bkpt_type - instead of a Z packet char. Adjust. - (arm_supports_z_point_type): New function. - (arm_insert_point, arm_remove_point): Adjust to new interface. - (the_low_target): Install arm_supports_z_point_type. - * linux-crisv32-low.c (cris_supports_z_point_type): New function. - (cris_insert_point, cris_remove_point): Adjust to new interface. - Don't check whether the type is supported here. - (the_low_target): Install cris_supports_z_point_type. - * linux-low.c (linux_supports_z_point_type): New function. - (linux_insert_point, linux_remove_point): Adjust to new interface. - * linux-low.h (struct linux_target_ops) <insert_point, - remove_point>: Take an enum raw_bkpt_type instead of a char. Add - raw_breakpoint pointer parameter. - <supports_z_point_type>: New method. - * linux-mips-low.c (mips_supports_z_point_type): New function. - (mips_insert_point, mips_remove_point): Adjust to new interface. - Use mips_supports_z_point_type. - (the_low_target): Install mips_supports_z_point_type. - * linux-ppc-low.c (the_low_target): Install NULL as - supports_z_point_type method. - * linux-s390-low.c (the_low_target): Install NULL as - supports_z_point_type method. - * linux-sparc-low.c (the_low_target): Install NULL as - supports_z_point_type method. - * linux-x86-low.c (x86_supports_z_point_type): New function. - (x86_insert_point): Adjust to new insert_point interface. Use - insert_memory_breakpoint. Adjust to new - i386_low_insert_watchpoint interface. - (x86_remove_point): Adjust to remove_point interface. Use - remove_memory_breakpoint. Adjust to new - i386_low_remove_watchpoint interface. - (the_low_target): Install x86_supports_z_point_type. - * lynx-low.c (lynx_target_ops): Install NULL as - supports_z_point_type callback. - * nto-low.c (nto_supports_z_point_type): New. - (nto_insert_point, nto_remove_point): Adjust to new interface. - (nto_target_ops): Install nto_supports_z_point_type. - * mem-break.c: Adjust intro comment. - (struct raw_breakpoint) <raw_type, size>: New fields. - <inserted>: Update comment. - <shlib_disabled>: Delete field. - (enum bkpt_type) <gdb_breakpoint>: Delete value. - <gdb_breakpoint_Z0, gdb_breakpoint_Z1, gdb_breakpoint_Z2, - gdb_breakpoint_Z3, gdb_breakpoint_Z4>: New values. - (raw_bkpt_type_to_target_hw_bp_type): New function. - (find_enabled_raw_code_breakpoint_at): New function. - (find_raw_breakpoint_at): New type and size parameters. Use them. - (insert_memory_breakpoint): New function, based off - set_raw_breakpoint_at. - (remove_memory_breakpoint): New function. - (set_raw_breakpoint_at): Reimplement. - (set_breakpoint): New, based on set_breakpoint_at. - (set_breakpoint_at): Reimplement. - (delete_raw_breakpoint): Go through the_target->remove_point - instead of assuming memory breakpoints. - (find_gdb_breakpoint_at): Delete. - (Z_packet_to_bkpt_type, Z_packet_to_raw_bkpt_type): New functions. - (find_gdb_breakpoint): New function. - (set_gdb_breakpoint_at): Delete. - (z_type_supported): New function. - (set_gdb_breakpoint_1): New function, loosely based off - set_gdb_breakpoint_at. - (check_gdb_bp_preconditions, set_gdb_breakpoint): New functions. - (delete_gdb_breakpoint_at): Delete. - (delete_gdb_breakpoint_1): New function, loosely based off - delete_gdb_breakpoint_at. - (delete_gdb_breakpoint): New function. - (clear_gdb_breakpoint_conditions): Rename to ... - (clear_breakpoint_conditions): ... this. Don't handle a NULL - breakpoint. - (add_condition_to_breakpoint): Make static. - (add_breakpoint_condition): Take a struct breakpoint pointer - instead of an address. Adjust. - (gdb_condition_true_at_breakpoint): Rename to ... - (gdb_condition_true_at_breakpoint_z_type): ... this, and add - z_type parameter. - (gdb_condition_true_at_breakpoint): Reimplement. - (add_breakpoint_commands): Take a struct breakpoint pointer - instead of an address. Adjust. - (gdb_no_commands_at_breakpoint): Rename to ... - (gdb_no_commands_at_breakpoint_z_type): ... this. Add z_type - parameter. Return true if no breakpoint was found. Change debug - output. - (gdb_no_commands_at_breakpoint): Reimplement. - (run_breakpoint_commands): Rename to ... - (run_breakpoint_commands_z_type): ... this. Add z_type parameter, - and change return type to boolean. - (run_breakpoint_commands): New function. - (gdb_breakpoint_here): Also check for Z1 breakpoints. - (uninsert_raw_breakpoint): Don't try to reinsert a disabled - breakpoint. Go through the_target->remove_point instead of - assuming memory breakpoint. - (uninsert_breakpoints_at, uninsert_all_breakpoints): Uninsert - software and hardware breakpoints. - (reinsert_raw_breakpoint): Go through the_target->insert_point - instead of assuming memory breakpoint. - (reinsert_breakpoints_at, reinsert_all_breakpoints): Reinsert - software and hardware breakpoints. - (check_breakpoints, breakpoint_here, breakpoint_inserted_here): - Check both software and hardware breakpoints. - (validate_inserted_breakpoint): Assert the breakpoint is a - software breakpoint. Set the inserted flag to -1 instead of - setting shlib_disabled. - (delete_disabled_breakpoints): Adjust. - (validate_breakpoints): Only validate software breakpoints. - Adjust to inserted flag change. - (check_mem_read, check_mem_write): Skip breakpoint types other - than software breakpoints. Adjust to inserted flag change. - * mem-break.h (enum raw_bkpt_type): New enum. - (raw_breakpoint, struct process_info): Forward declare. - (Z_packet_to_target_hw_bp_type): Delete declaration. - (raw_bkpt_type_to_target_hw_bp_type, Z_packet_to_raw_bkpt_type) - (set_gdb_breakpoint, delete_gdb_breakpoint) - (clear_breakpoint_conditions): New declarations. - (set_gdb_breakpoint_at, clear_gdb_breakpoint_conditions): Delete. - (breakpoint_inserted_here): Update comment. - (add_breakpoint_condition, add_breakpoint_commands): Replace - address parameter with a breakpoint pointer parameter. - (gdb_breakpoint_here): Update comment. - (delete_gdb_breakpoint_at): Delete. - (insert_memory_breakpoint, remove_memory_breakpoint): Declare. - * server.c (process_point_options): Take a struct breakpoint - pointer instead of an address. Adjust. - (process_serial_event) <Z/z packets>: Use set_gdb_breakpoint and - delete_gdb_breakpoint. - * spu-low.c (spu_target_ops): Install NULL as - supports_z_point_type method. - * target.h: Include mem-break.h. - (struct target_ops) <prepare_to_access_memory>: Update comment. - <supports_z_point_type>: New field. - <insert_point, remove_point>: Take an enum raw_bkpt_type argument - instead of a char. Also take a raw breakpoint pointer. - * win32-arm-low.c (the_low_target): Install NULL as - supports_z_point_type. - * win32-i386-low.c (i386_supports_z_point_type): New function. - (i386_insert_point, i386_remove_point): Adjust to new interface. - (the_low_target): Install i386_supports_z_point_type. - * win32-low.c (win32_supports_z_point_type): New function. - (win32_insert_point, win32_remove_point): Adjust to new interface. - (win32_target_ops): Install win32_supports_z_point_type. - * win32-low.h (struct win32_target_ops): - <supports_z_point_type>: New method. - <insert_point, remove_point>: Take an enum raw_bkpt_type argument - instead of a char. Also take a raw breakpoint pointer. - -2014-05-20 Pedro Alves <palves@redhat.com> - - * mem-break.h: Include break-common.h. - (Z_PACKET_SW_BP, Z_PACKET_HW_BP, Z_PACKET_WRITE_WP) - (Z_PACKET_READ_WP, Z_PACKET_ACCESS_WP): New defines. - (Z_packet_to_target_hw_bp_type): New declaration. - * mem-break.c (Z_packet_to_target_hw_bp_type): New function. - * i386-low.c (Z_PACKET_HW_BP, Z_PACKET_WRITE_WP, Z_PACKET_READ_WP) - (Z_PACKET_ACCESS_WP): Delete macros. - (Z_packet_to_hw_type): Delete function. - * i386-low.h: Don't include break-common.h here. - (Z_packet_to_hw_type): Delete declaration. - * linux-x86-low.c (x86_insert_point, x86_insert_point): Call - Z_packet_to_target_hw_bp_type instead of Z_packet_to_hw_type. - * win32-i386-low.c (i386_insert_point, i386_remove_point): Call - Z_packet_to_target_hw_bp_type instead of Z_packet_to_hw_type. - * linux-aarch64-low.c: Don't include break-common.h here. - (Z_PACKET_SW_BP, Z_PACKET_HW_BP, Z_PACKET_WRITE_WP) - (Z_PACKET_READ_WP, Z_PACKET_ACCESS_WP): Delete macros. - (Z_packet_to_target_hw_bp_type): Delete function. - * linux-mips-low.c (rsp_bp_type_to_target_hw_bp_type): Delete - function. - (mips_insert_point, mips_remove_point): Use - Z_packet_to_target_hw_bp_type. - -2014-05-20 Pedro Alves <palves@redhat.com> - - * linux-aarch64-low.c: Include break-common.h. - (enum target_point_type): Delete. - (Z_packet_to_point_type): Rename to ... - (Z_packet_to_target_hw_bp_type): ... this, and return a - target_hw_bp_type instead. - (aarch64_show_debug_reg_state): Take an enum target_hw_bp_type - instead of an enum target_point_type. - (aarch64_point_encode_ctrl_reg): Likewise. Compute type mask from - breakpoint type. - (aarch64_dr_state_insert_one_point) - (aarch64_dr_state_remove_one_point, aarch64_handle_breakpoint) - (aarch64_handle_aligned_watchpoint) - (aarch64_handle_unaligned_watchpoint, aarch64_handle_watchpoint): - Take an enum target_hw_bp_type instead of an enum - target_point_type. - (aarch64_supports_z_point_type): New function. - (aarch64_insert_point, aarch64_remove_point): Use it. Adjust to - use Z_packet_to_target_hw_bp_type. - -2014-05-20 Joel Brobecker <brobecker@adacore.com> - - * configure.ac: Only use -Werror by default when DEVELOPMENT - is true. - * configure: Regenerate. - -2014-05-19 Jan Kratochvil <jan.kratochvil@redhat.com> - - Fix gdbserver qGetTLSAddr for x86_64 -m32. - * linux-x86-low.c (X86_64_USER_REGS): New. - (x86_fill_gregset): Call memset for BUF first in x86_64 -m32 case. - -2014-04-28 Yao Qi <yao@codesourcery.com> - - * Makefile.in (i386-avx512.c): Fix the typo of generated file - name. - -2014-04-25 Pedro Alves <palves@redhat.com> - - PR server/16255 - * linux-low.c (linux_attach_fail_reason_string): New function. - (linux_attach_lwp): Delete. - (linux_attach_lwp_1): Rename to ... - (linux_attach_lwp): ... this. Take a ptid instead of a pid as - argument. Remove "initial" parameter. Return int instead of - void. Don't error or warn here. - (linux_attach): Adjust to call linux_attach_lwp. Call error on - failure to attach to the tgid. Call warning when failing to - attach to an lwp. - * linux-low.h (linux_attach_lwp): Take a ptid instead of a pid as - argument. Remove "initial" parameter. Return int instead of - void. Don't error or warn here. - (linux_attach_fail_reason_string): New declaration. - * thread-db.c (attach_thread): Adjust to linux_attach_lwp's - interface change. Use linux_attach_fail_reason_string. - -2014-04-24 Michael Sturm <michael.sturm@mintel.com> - Walfred Tedeschi <walfred.tedeschi@intel.com> - - * Makefile.in: Added rules to handle new files - i386-avx512.c i386-avx512-linux.c amd64-avx512.c - amd64-avx512-linux.c x32-avx512.c x32-avx512-linux.c. - * configure.srv (srv_i386_regobj): Add i386-avx512.o. - (srv_i386_linux_regobj): Add i386-avx512-linux.o. - (srv_amd64_regobj): Add amd64-avx512.o and x32-avx512.o. - (srv_amd64_linux_regobj): Add amd64-avx512-linux.o and - x32-avx512-linux.o. - (srv_i386_32bit_xmlfiles): Add i386/32bit-avx512.xml. - (srv_i386_64bit_xmlfiles): Add i386/64bit-avx512.xml. - (srv_amd64_xmlfiles): Add i386/amd64-avx512.xml and - i386/x32-avx512.xml. - (srv_i386_linux_xmlfiles): Add i386/i386-avx512-linux.xml. - (srv_amd64_linux_xmlfiles): Add i386/amd64-avx512-linux.xml and - i386/x32-avx512-linux.xml. - * i387-fp.c (num_avx512_k_registers): New constant for number - of K registers. - (num_avx512_zmmh_low_registers): New constant for number of - lower ZMM registers (0-15). - (num_avx512_zmmh_high_registers): New constant for number of - higher ZMM registers (16-31). - (num_avx512_ymmh_registers): New contant for number of higher - YMM registers (ymm16-31 added by avx521 on x86_64). - (num_avx512_xmm_registers): New constant for number of higher - XMM registers (xmm16-31 added by AVX512 on x86_64). - (struct i387_xsave): Add space for AVX512 registers. - (i387_cache_to_xsave): Change raw buffer size to 64 characters. - Add code to handle AVX512 registers. - (i387_xsave_to_cache): Add code to handle AVX512 registers. - * linux-x86-low.c (init_registers_amd64_avx512_linux): New - prototypei from generated file. - (tdesc_amd64_avx512_linux): Likewise. - (init_registers_x32_avx512_linux): Likewise. - (tdesc_x32_avx512_linux): Likewise. - (init_registers_i386_avx512_linux): Likewise. - (tdesc_i386_avx512_linux): Likewise. - (x86_64_regmap): Add AVX512 registers. - (x86_linux_read_description): Add code to handle AVX512 XSTATE - mask. - (initialize_low_arch): Add code to initialize AVX512 registers. - -2014-04-23 Pedro Alves <palves@redhat.com> - - * mem-break.c (find_gdb_breakpoint_at): Make static. - * mem-break.h (find_gdb_breakpoint_at): Delete declaration. - -2014-04-23 Pedro Alves <palves@redhat.com> - - * i386-low.c: Don't include break-common.h here. - (i386_low_insert_watchpoint, i386_low_remove_watchpoint): Change - prototype to take target_hw_bp_type as argument instead of a Z - packet char. - * i386-low.h: Include break-common.h here. - (Z_packet_to_hw_type): Declare. - (i386_low_insert_watchpoint, i386_low_remove_watchpoint): Change - prototypes. - * linux-x86-low.c (x86_insert_point): Convert the packet number to - a target_hw_bp_type before calling i386_low_insert_watchpoint. - (x86_remove_point): Convert the packet number to a - target_hw_bp_type before calling i386_low_remove_watchpoint. - * win32-i386-low.c (i386_insert_point): Convert the packet number - to a target_hw_bp_type before calling i386_low_insert_watchpoint. - (i386_remove_point): Convert the packet number to a - target_hw_bp_type before calling i386_low_remove_watchpoint. - -2014-04-23 Pedro Alves <palves@redhat.com> - - * utils.h (perror_with_name): Add ATTRIBUTE_NORETURN. - -2014-04-10 Pedro Alves <palves@redhat.com> - - * mem-break.c (add_breakpoint_condition, add_breakpoint_commands): - Check if the condition or command is NULL before checking if the - breakpoint is known. On success, return true. - * mem-break.h (add_breakpoint_condition): Document return. - (add_breakpoint_commands): Add describing comment. - * server.c (skip_to_semicolon): New function. - (process_point_options): Use it. - -2014-04-09 Pedro Alves <palves@redhat.com> - - * linux-low.c (linux_read_loadmap): Pass current_inferior directly - to lwpid_of. - -2014-02-27 Pedro Alves <palves@redhat.com> - - PR 12702 - * inferiors.h (A_I_NEXT, ALL_INFERIORS_TYPE, ALL_PROCESSES): New - macros. - * linux-low.c (delete_lwp, handle_extended_wait): Add debug - output. - (last_thread_of_process_p): Take a PID argument instead of a - thread pointer. - (linux_wait_for_lwp): Delete. - (num_lwps, check_zombie_leaders, not_stopped_callback): New - functions. - (linux_low_filter_event): New function, party factored out from - linux_wait_for_event. - (linux_wait_for_event): Rename to ... - (linux_wait_for_event_filtered): ... this. Add new filter ptid - argument. Partly rewrite. Always use waitpid(-1, WNOHANG) and - sigsuspend. Check for zombie leaders. - (linux_wait_for_event): Reimplement as wrapper around - linux_wait_for_event_filtered. - (linux_wait_1): Handle TARGET_WAITKIND_NO_RESUMED. Assume that if - a normal or signal exit is seen, it's the whole process exiting. - (wait_for_sigstop): No longer a for_each_inferior callback. - Rewrite on top of linux_wait_for_event_filtered. - (stop_all_lwps): Call wait_for_sigstop directly. - * server.c (resume, handle_target_event): Handle - TARGET_WAITKIND_NO_RESUMED. - -2014-02-26 Joel Brobecker <brobecker@adacore.com> - - * win32-low.c (psapi_get_dll_name, - * win32_CreateToolhelp32Snapshot): Delete. - (win32_CreateToolhelp32Snapshot, win32_Module32First) - (win32_Module32Next, load_toolhelp, toolhelp_get_dll_name): - Delete. - (handle_load_dll): Add function description. - Remove code using psapi_get_dll_name and toolhelp_get_dll_name. - -2014-02-26 Joel Brobecker <brobecker@adacore.com> - - * win32-low.c (win32_add_one_solib): Add 0x1000 to load_addr. - Add comment. - (win32_add_all_dlls): Remove 0x1000 offset applied to DLL - base address when calling win32_add_one_solib. - (handle_load_dll): Delete local variable load_addr. - Remove 0x1000 offset applied to DLL base address when calling - win32_add_one_solib. - (handle_unload_dll): Add comment. - -2014-02-26 Joel Brobecker <brobecker@adacore.com> - - * win32-low.c (win32_add_all_dlls): Renames - win32_ensure_ntdll_loaded. Rewrite function documentation. - Adjust implementation to always load all DLLs. - Add 0x1000 offset to DLL base address when calling - win32_add_one_solib. - (child_initialization_done): New static global. - (do_initial_child_stuff): Set child_initialization_done to - zero during child initialization, and 1 after. Replace call - to win32_ensure_ntdll_loaded by call to win32_add_all_dlls. - Add comment. - (match_dll_by_basename, dll_is_loaded_by_basename): Delete. - (handle_unload_dll): Add function documentation. - (get_child_debug_event): Ignore load and unload DLL events - during child initialization. - -2014-02-20 Doug Evans <dje@google.com> - - Remove global all_lwps. - * inferiors.h (ptid_of): Move here from linux-low.h. - (pid_of, lwpid_of): Ditto. - * linux-aarch64-low.c (debug_reg_change_callback): Update, "entry" - parameter is a struct thread_info * now. - (aarch64_notify_debug_reg_change): Fetch pid from current_inferior - directly. Pass &all_threads to find_inferior instead of &all_lwps. - (aarch64_stopped_data_address): Fetch lwpid from current_inferior - directly. - (aarch64_linux_prepare_to_resume): Fetch ptid from thread. - (aarch64_arch_setup): Fetch lwpid from current_inferior directly. - * linux-arm-low.c (update_registers_callback): Update, "entry" - parameter is a struct thread_info * now. - Fetch lwpid from current_inferior directly. - (arm_insert_point): Pass &all_threads to find_inferior instead of - &all_lwps. - (arm_remove_point): Ditto. - (arm_stopped_by_watchpoint): Fetch lwp from current_inferior. - (arm_prepare_to_resume): Fetch pid from thread. - (arm_read_description): Fetch lwpid from current_inferior directly. - * linux-low.c (all_lwps): Delete. - (delete_lwp): Delete call to remove_inferior. - (handle_extended_wait): Fetch lwpid from thread. - (add_lwp): Don't set lwp->entry.id. Remove call to - add_inferior_to_list. - (linux_attach_lwp_1): Fetch pid from current_inferior directly. - (linux_kill_one_lwp): Fetch ptid,lwpid from thread. - (kill_one_lwp_callback): Ditto. - (linux_kill): Don't dereference NULL pointer. - Fetch ptid,lwpid from thread. - (get_detach_signal): Fetch ptid from thread. - (linux_detach_one_lwp): Fetch ptid,lwpid from thread. - Simplify call to regcache_invalidate_thread. - (delete_lwp_callback): Update, "entry" parameter is a - struct thread_info * now. Fetch pid from thread. - (linux_mourn): Pass &all_threads to find_inferior instead of &all_lwps. - (status_pending_p_callback): Update, "entry" parameter is a - struct thread_info * now. Fetch ptid from thread. - (find_lwp_pid): Update, "entry" parameter is a - struct thread_info * now. - (linux_wait_for_lwp): Fetch pid from thread. - (linux_fast_tracepoint_collecting): Fetch lwpid from thread. - (maybe_move_out_of_jump_pad): Fetch lwpid from current_inferior. - (enqueue_one_deferred_signal): Fetch lwpid from thread. - (dequeue_one_deferred_signal): Ditto. - (cancel_breakpoint): Fetch ptid from current_inferior. - (linux_wait_for_event): Pass &all_threads to find_inferior, - not &all_lwps. Fetch ptid, lwpid from thread. - (count_events_callback): Update, "entry" parameter is a - struct thread_info * now. - (select_singlestep_lwp_callback): Ditto. - (select_event_lwp_callback): Ditto. - (cancel_breakpoints_callback): Ditto. - (linux_cancel_breakpoints): Pass &all_threads to find_inferior, - not &all_lwps. - (select_event_lwp): Ditto. Fetch ptid from event_thread. - (unsuspend_one_lwp): Update, "entry" parameter is a - struct thread_info * now. - (unsuspend_all_lwps): Pass &all_threads to find_inferior, - not &all_lwps. - (linux_stabilize_threads): Ditto. And for for_each_inferior. - Fetch lwpid from thread, not lwp. - (linux_wait_1): Fetch ptid, lwpid from current_inferior. - Pass &all_threads to find_inferior, not &all_lwps. - (send_sigstop): Fetch lwpid from thread, not lwp. - (send_sigstop_callback): Update, "entry" parameter is a - struct thread_info * now. - (suspend_and_send_sigstop_callback): Ditto. - (wait_for_sigstop): Ditto. Fetch ptid, lwpid from thread, lwp. - (stuck_in_jump_pad_callback): Update, "entry" parameter is a - struct thread_info * now. - (move_out_of_jump_pad_callback): Ditto. Fetch ptid, lwpid - from thread, lwp. - (lwp_running): Update, "entry" parameter is a - struct thread_info * now. - (stop_all_lwps): Fetch ptid from thread. - Pass &all_threads to find_inferior, for_each_inferior, not &all_lwps. - (linux_resume_one_lwp): Fetch lwpid from thread. - (linux_set_resume_request): Update, "entry" parameter is a - struct thread_info * now. Fetch pid, lwpid from thread. - (resume_status_pending_p): Update, "entry" parameter is a - struct thread_info * now. - (need_step_over_p): Ditto. Fetch lwpid from thread. - (start_step_over): Fetch lwpid from thread. - (linux_resume_one_thread): Update, "entry" parameter is a - struct thread_info * now. Fetch lwpid from thread. - (linux_resume): Pass &all_threads to find_inferior, not &all_lwps. - (proceed_one_lwp): Update, "entry" parameter is a - struct thread_info * now. Fetch lwpid from thread. - (unsuspend_and_proceed_one_lwp): Update, "entry" parameter is a - struct thread_info * now. - (proceed_all_lwps): Pass &all_threads to find_inferior, not &all_lwps. - (unstop_all_lwps): Ditto. Fetch lwpid from thread. - (regsets_fetch_inferior_registers): Fetch lwpid from current_inferior - directly. - (regsets_store_inferior_registers): Ditto. - (fetch_register, store_register): Ditto. - (linux_read_memory, linux_write_memory): Ditto. - (linux_request_interrupt): Ditto. - (linux_read_auxv): Ditto. - (linux_xfer_siginfo): Ditto. - (linux_qxfer_spu): Ditto. - (linux_qxfer_libraries_svr4): Ditto. - * linux-low.h (ptid_of, pid_of, lwpid_of): Delete, - moved to inferiors.h. - (get_lwp): Delete. - (get_thread_lwp): Update. - (struct lwp_info): Delete member "entry". Simplify comment for - member "thread". - (all_lwps): Delete. - * linux-mips-low.c (mips_read_description): Fetch lwpid from - current_inferior directly. - (update_watch_registers_callback): Update, "entry" parameter is a - struct thread_info * now. Fetch pid from thread. - (mips_linux_prepare_to_resume): Fetch ptid from thread. - (mips_insert_point): Fetch lwpid from current_inferior. - Pass &all_threads to find_inferior, not &all_lwps. - (mips_remove_point): Pass &all_threads to find_inferior, not &all_lwps. - (mips_stopped_by_watchpoint): Fetch lwpid from current_inferior - directly. - (mips_stopped_data_address): Ditto. - * linux-s390-low.c (s390_arch_setup): Fetch pid from current_inferior - directly. - * linux-tile-low.c (tile_arch_setup): Ditto. - * linux-x86-low.c (x86_get_thread_area): Fetch lwpid from thread. - (update_debug_registers_callback): Update, "entry" parameter is a - struct thread_info * now. Fetch pid from thread. - (i386_dr_low_set_addr): Fetch pid from current_inferior directly. - Pass &all_threads to find_inferior, not &all_lwps. - (i386_dr_low_get_addr): Fetch ptid from current_inferior directly. - (i386_dr_low_set_control): Fetch pid from current_inferior directly. - Pass &all_threads to find_inferior, not &all_lwps. - (i386_dr_low_get_control): Fetch ptid from current_inferior directly. - (i386_dr_low_get_status): Ditto. - (x86_linux_prepare_to_resume): Fetch ptid from thread. - (x86_siginfo_fixup): Fetch lwpid from current_inferior directly. - (x86_linux_read_description): Ditto. - * proc-service.c (ps_getpid): Fetch pid from current_inferior directly. - -2014-02-20 Doug Evans <dje@google.com> - - * inferiors.c (get_first_inferior): Fix buglet. - -2014-02-19 Doug Evans <dje@google.com> - - * gdbthread.h (add_thread): Change result type to struct thread_info *. - * inferiors.c (add_thread): Change result type to struct thread_info *. - All callers updated. - (add_lwp): Call add_thread here instead of in callers. - All callers updated. - * linux-low.h (get_lwp_thread): Rewrite. - (struct lwp_info): New member "thread". - -2014-02-19 Doug Evans <dje@google.com> - - * linux-low.c (add_lwp): Change result to struct lwp_info *. - All callers updated. - -2014-02-19 Doug Evans <dje@google.com> - - * inferiors.c (add_thread): Fix whitespace. - -2014-02-19 Doug Evans <dje@google.com> - - * dll.c (clear_dlls): Replace accessing list implemention details - with API function. - * gdbthread.h (get_first_thread): Declare. - * inferiors.c (for_each_inferior_with_data): New function. - (get_first_thread): New function. - (find_thread_ptid): Simplify. - (get_first_inferior): New function. - (clear_list): Delete. - (one_inferior_p): New function. - (clear_inferior_list): New function. - (clear_inferiors): Update. - * inferiors.h (for_each_inferior_with_data): Declare. - (clear_inferior_list): Declare. - (one_inferior_p): Declare. - (get_first_inferior): Declare. - * linux-low.c (linux_wait_for_event): Replace accessing list - implemention details with API function. - * server.c (target_running): Ditto. - (accumulate_file_name_length): New function. - (emit_dll_description): New function. - (handle_qxfer_libraries): Replace accessing list implemention - details with API function. - (handle_qxfer_threads_worker): New function. - (handle_qxfer_threads_proper): Replace accessing list implemention - details with API function. - (handle_query): Ditto. - (visit_actioned_threads_callback_ftype): New typedef. - (visit_actioned_threads_data): New struct. - (visit_actioned_threads): Rewrite to be find_inferior callback. - (resume): Call find_inferior. - (handle_status): Replace accessing list implemention - details with API function. - (process_serial_event): Replace accessing list implemention details - with API function. - * target.c (set_desired_inferior): Replace accessing list implemention - details with API function. - * tracepoint.c (same_process_p): New function. - (gdb_agent_about_to_close): Replace accessing list implemention - details with API function. - * win32-low.c (child_delete_thread): Replace accessing list - implemention details with API function. - (match_dll_by_basename): New function. - (dll_is_loaded_by_basename): New function. - (win32_ensure_ntdll_loaded): Replace accessing list implemention - details call to dll_is_loaded_by_basename. - -2014-02-19 Doug Evans <dje@google.com> - - * dll.h (struct dll_info): Add comment. - * gdbthread.h (struct thread_info): Add comment. - (current_ptid): Simplify. - * inferiors.c (add_process): Update. - (remove_process): Update. - * inferiors.h (struct process_info): Rename member "head" to "entry". - * linux-low.c (delete_lwp): Update. - (add_lwp): Update. - (last_thread_of_process_p): Update. - (kill_one_lwp_callback, linux_kill): Update. - (status_pending_p_callback): Update. - (wait_for_sigstop): Update. Simplify read of ptid. - (start_step_over): Update. - * linux-low.h (ptid_of, pid_of, lwpid_of): Update. - (get_lwp_thread): Update. - (struct lwp_info): Rename member "head" to "entry". - * regcache.h (inferior_list_entry): Delete. - * server.c (kill_inferior_callback): Update. - (detach_or_kill_inferior_callback): Update. - (print_started_pid): Update. - (print_attached_pid): Update. - (process_serial_event): Simplify read of ptid. - * thread-db.c (thread_db_create_event): Update. - (thread_db_get_tls_address): Update. - * win32-low.c (current_inferior_ptid): Simplify. - -2014-02-19 Tom Tromey <tromey@redhat.com> - - * target.h (struct target_ops) <supports_btrace>: Add target_ops - argument. - (target_supports_btrace): Update. - -2014-02-14 Yao Qi <yao@codesourcery.com> - - * Makefile.in (IPA_OBJS): Append rsp-low-ipa.o. - (rsp-low-ipa.o): New target. - -2014-02-12 Tom Tromey <tromey@redhat.com> - - * ax.c (gdb_parse_agent_expr): Use hex2bin, not - convert_ascii_to_int. - * regcache.c (registers_to_string): Likewise. - * remote-utils.c (decode_M_packet): Likewise. - * server.c (process_serial_event): Likewise. - -2014-02-12 Tom Tromey <tromey@redhat.com> - - * server.c (handle_query, handle_v_run): Use hex2bin, not - unhexify. - * tracepoint.c (cmd_qtdpsrc, cmd_qtdv, cmd_qtnotes): Likewise. - -2014-02-12 Tom Tromey <tromey@redhat.com> - - * ax.c (gdb_unparse_agent_expr): Use bin2hex, not - convert_int_to_ascii. - * regcache.c (registers_to_string, collect_register_as_string): - Likewise. - * remote-utils.c (look_up_one_symbol, relocate_instruction): - Likewise. - * server.c (process_serial_event): Likewise. - * tracepoint.c (cmd_qtstatus, response_source, response_tsv) - (cmd_qtbuffer, cstr_to_hexstr): Likewise. - -2014-02-12 Tom Tromey <tromey@redhat.com> - - * remote-utils.c (look_up_one_symbol, monitor_output): Use - bin2hex, not hexify. - * tracepoint.c (cmd_qtstatus): Likewise. - -2014-02-12 Tom Tromey <tromey@redhat.com> - - * remote-utils.c (monitor_output): Pass explicit length to - hexify. - -2014-02-12 Tom Tromey <tromey@redhat.com> - - * tracepoint.c: Include rsp-low.h. - * server.c: Include rsp-low.h. - * remote-utils.h (convert_ascii_to_int, convert_int_to_ascii) - (unhexify, hexify, remote_escape_output, unpack_varlen_hex): Don't - declare. - * remote-utils.c: Include rsp-low.h. - (fromhex, hexchars, ishex, unhexify, tohex, hexify) - (remote_escape_output, remote_unescape_input, unpack_varlen_hex) - (convert_int_to_ascii, convert_ascii_to_int): Move to - common/rsp-low.c. - * regcache.c: Include rsp-low.h. - * ax.c: Include rsp-low.h. - * Makefile.in (SFILES): Add common/rsp-low.c. - (OBS): Add rsp-low.o. - (rsp-low.o): New target. - -2014-02-12 Tom Tromey <tromey@redhat.com> - - * utils.h (pulongest, plongest, phex_nz): Don't declare. - Include print-utils.h. - * utils.c (NUMCELLS, CELLSIZE, get_cell, decimal2str, pulongest) - (plongest, thirty_two, phex_nz): Remove. - * Makefile.in (SFILES): Add common/print-utils.c. - (OBS): Add print-utils.o. - (print-utils-ipa.o): New target. - (print-utils.o): New target. - (IPA_OBJS): Add print-utils-ipa.o. - -2014-02-06 Tom Tromey <tromey@redhat.com> - - * Makefile.in (SFILES): Fix indentation. - -2014-02-05 Doug Evans <dje@google.com> - - * linux-low.c (linux_wait_for_event): Improve comment. - (linux_wait_1): Keep current_inferior in sync with event_child. - -2014-01-22 Doug Evans <dje@google.com> - - * gdbthread.h (gdb_id_to_thread): Delete, unused. - -2014-01-22 Doug Evans <dje@google.com> - - * configure.ac (AC_CHECK_FUNCS): Add test for gettimeofday. - * configure: Regenerate. - * config.in: Regenerate. - * Makefile.in (SFILES): Add debug.c. - (OBS): Add debug.o. - * debug.c: New file. - * debug.h: New file. - * linux-aarch64-low.c (*): Update all debugging printfs to use - debug_printf instead of fprintf. - * linux-arm-low.c (*): Ditto. - * linux-cris-low.c (*): Ditto. - * linux-crisv32-low.c (*): Ditto. - * linux-m32r-low.c (*): Ditto. - * linux-sparc-low.c (*): Ditto. - * linux-x86.c (*): Ditto. - * linux-low.c (*): Ditto. - (linux_wait_1): Add calls to debug_enter, debug_exit. - (linux_wait): Remove redundant debugging printf. - (stop_all_lwps): Add calls to debug_enter, debug_exit. - (linux_resume, unstop_all_lwps): Ditto. - * mem-break.c (*): Update all debugging printfs to use - debug_printf instead of fprintf. - * remote-utils.c (*): Ditto. - * thread-db.c (*): Ditto. - * server.c #include <ctype.h>, "gdb_vecs.h". - (debug_threads): Moved to debug.c. - (*): Update all debugging printfs to use debug_printf instead of - fprintf. - (start_inferior): Replace call to fflush with call to debug_flush. - (monitor_show_help): Mention set debug-format. - (parse_debug_format_options): New function. - (handle_monitor_command): Handle "monitor set debug-format". - (gdbserver_usage): Mention --debug-format. - (main): Parse --debug-format. - * server.h (debug_threads): Declaration moved to debug.h. - #include "debug.h". - * tracepoint.c (trace_debug_1) [!IN_PROCESS_AGENT]: Add version of - trace_debug_1 that uses debug_printf. - (tracepoint_look_up_symbols): Update all debugging printfs to use - debug_printf instead of fprintf. - -2014-01-20 Baruch Siach <baruch@tkos.co.il> - - * linux-xtensa-low.c: Include asm/ptrace.h instead of - sys/ptrace.h. - -2014-01-17 Pedro Alves <palves@redhat.com> - - PR build/16445 - * linux-x86-low.c: Don't include elf/common.h if ELFMAG0 is - defined after including gdb_proc_service.h. - -2014-01-16 Doug Evans <dje@google.com> - - * dll.c (UNSPECIFIED_CORE_ADDR): New macro. - (match_dll): Use it. - -2014-01-16 Markus Metzger <markus.t.metzger@intel.com> - - * target.h (target_ops) <read_btrace>: Change parameters and - return type to allow error reporting. - * server.c (handle_qxfer_btrace): Support delta reads. Pass - trace reading errors on. - * linux-low.c (linux_low_read_btrace): Pass trace reading - errors on. - (linux_low_disable_btrace): New. - -2014-01-15 Doug Evans <dje@google.com> - - * inferiors.c (thread_id_to_gdb_id): Delete. - * inferiors.h (thread_id_to_gdb_id): Delete. - -2014-01-13 Eli Zaretskii <eliz@gnu.org> - - * Makefile.in (INCLUDE_CFLAGS): Remove trailing slash from - "-I$(srcdir)/../". Fixes MinGW compilation errors with old GCC - versions. - -2014-01-08 Pedro Alves <palves@redhat.com> - - * server.c (handle_status): Don't discard previous queued stop - replies or thread's pending status here. - (main) <disconnection>: Do it here instead. - -2014-01-08 Pedro Alves <palves@redhat.com> - - * gdbthread.h (struct thread_info) <status_pending_p>: New field. - * server.c (visit_actioned_threads, handle_pending_status): New - function. - (handle_v_cont): Factor out parts to ... - (resume): ... this new function. If in all-stop, and a thread - being resumed has a pending status, report it without actually - resuming. - (myresume): Adjust to use the new 'resume' function. - (clear_pending_status_callback, set_pending_status_callback) - (find_status_pending_thread_callback): New functions. - (handle_status): Handle the case of multiple threads having - interesting statuses to report. Report threads' real last signal - instead of always reporting GDB_SIGNAL_TRAP. Look for a thread - with an interesting thread to report the status for, instead of - always reporting the status of the first thread. - -2014-01-01 Joel Brobecker <brobecker@adacore.com> - - * gdbserver.c (gdbserver_version): Set copyright year to 2014. - * gdbreplay.c (gdbreplay_version): Likewise. - -2013-12-18 Yufeng Zhang <yufeng.zhang@arm.com> - - * linux-aarch64-low.c (aarch64_linux_set_debug_regs): Set - iov.iov_len with the real length in use. - -2013-12-13 Joel Brobecker <brobecker@adacore.com> - - * Makefile.in (safe-ctype.o, lbasename.o): New rules. - * configure.srv: Add safe-ctype.o and lbasename.o to srv_tgtobj - for all targets that use win32-low.c. - * win32-low.c (win32_ensure_ntdll_loaded): New function. - (do_initial_child_stuff): Add call to win32_ensure_ntdll_loaded. - -2013-12-13 Pedro Alves <palves@redhat.com> - - * target.c (mywait): Set OURSTATUS->KIND to TARGET_WAITKIND_STOPPED - if equal to TARGET_WAITKIND_LOADED. - * win32-low.c (cached_status): New static global. - (win32_wait): Add declaration. - (do_initial_child_stuff): Flush all initial pending debug events - up to the initial breakpoint. - (win32_wait): If CACHED_STATUS was set, return that instead - of doing a real wait. Remove the code resuming the execution - of the inferior after receiving a TARGET_WAITKIND_LOADED event - during the initial phase. Also remove the code changing - OURSTATUS->KIND from TARGET_WAITKIND_LOADED to - TARGET_WAITKIND_STOPPED. - -2013-12-11 Yao Qi <yao@codesourcery.com> - - * notif.c (handle_notif_ack): Return 0 if no notification - matches. - -2013-11-20 Doug Evans <dje@google.com> - - * linux-low.c (linux_set_resume_request): Fix comment. - -2013-11-20 Doug Evans <dje@google.com> - - * linux-low.c (resume_status_pending_p): Tweak comment. - -2013-11-20 Walfred Tedeschi <walfred.tedeschi@intel.com> - - * Makefile.in: Add i386-mpx.c, i386-mpx-linux.c, amd64-mpx.c, - amd64-mpx-linux.c, x32-mpx.c and x32-mpx-linux.c generation. - * configure.srv (srv_i386_regobj): Add i386-mpx.o. - (srv_i386_linux_regobj): Add i386-mpx-linux.o. - (srv_amd64_regobj): Add amd64-mpx.o. - (srv_amd64_linux_regobj): Add amd64-mpx-linux.o. - (srv_i386_32bit_xmlfiles): Add i386/32bit-mpx.xml. - (srv_i386_64bit_xmlfiles): Add i386/64bit-mpx.xml. - * i387-fp.c (num_pl_bnd_register) Added constant. - (num_pl_bnd_cfg_registers) Added constant. - (struct i387_xsave) Added reserved area and MPX fields. - (i387_cache_to_xsave, i387_xsave_to_cache) Add MPX. - * linux-x86-low.c (init_registers_i386_mpx_linux): Declare new - function. - (tdesc_i386_mpx_linux): Add MPX amd64 target. - (init_registers_amd64_mpx_linux): Declare new function. - (tdesc_amd64_mpx_linux): Add MPX amd64 target. - (x86_64_regmap): Add MPX registers. - (x86_linux_read_description): Add MPX case. - (initialize_low_arch): Initialize MPX targets. - -2013-11-18 Tom Tromey <tromey@redhat.com> - - * configure: Rebuild. - * configure.ac: Don't check for stdlib.h. - * gdbreplay.c: Unconditionally include stdlib.h. - -2013-11-18 Tom Tromey <tromey@redhat.com> - - * config.in: Rebuild. - * configure: Rebuild. - * configure.ac: Don't use AC_HEADER_DIRENT. - -2013-11-18 Tom Tromey <tromey@redhat.com> - - * server.h: Don't check HAVE_STRING_H. - * gdbreplay.c: Don't check HAVE_STRING_H. - * configure: Rebuild. - -2013-11-18 Tom Tromey <tromey@redhat.com> - - * Makefile.in (gdbreplay$(EXEEXT)): Depend on and link against - LIBGNU. - -2013-11-08 Tom Tromey <tromey@redhat.com> - - * configure, config.in: Rebuild. - * configure.ac: Remove unused configury. - -2013-11-08 Tom Tromey <tromey@redhat.com> - - * acinclude.m4: Include common.m4, codeset.m4. - * configure, config.in: Rebuild. - * configure.ac: Use GDB_AC_COMMON. - -2013-11-06 Andreas Arnez <arnez@linux.vnet.ibm.com> - - * linux-s390-low.c (HWCAP_S390_TE): New define. - (s390_arch_setup): Consider the TE field in the HWCAP for - determining 'have_regset_tdb'. - -2013-10-16 Sergio Durigan Junior <sergiodj@redhat.com> - - PR gdb/16014 - * tracepoint.c (download_tracepoint_1): Remove unnecessary double - call to sizeof. - -2013-10-02 Pedro Alves <palves@redhat.com> - - * server.c (process_serial_event): Don't output "GDBserver - exiting" if GDB is connected through stdio. - * target.c (mywait): Likewise, be silent if GDB is connected - through stdio. - -2013-10-01 Joel Brobecker <brobecker@adacore.com> - - * lynx-low.c (lynx_add_threads_after_attach): New function. - (lynx_attach): Remove call to add_thread. Add call to - lynx_add_threads_after_attach instead. - -2013-09-28 Mike Frysinger <vapier@gentoo.org> - - * configure.ac (AC_CHECK_HEADERS): Add sys/syscall.h - * config.in, configure: Regenerated. - -2013-09-18 Yao Qi <yao@codesourcery.com> - - PR server/15959 - * server.c (start_inferior): Clear 'resume_info'. - -2013-09-16 Jiong Wang <jiwang@tilera.com> - - * linux-tile-low.c (tile_regsets): Modify the size field to 64-bit - for each register. - -2013-09-16 Jiong Wang <jiwang@tilera.com> - - * configure.srv <tilegx*-*-linux*>: Remove linux-osdata.o from and add - linux-tile-low.o to srv_tgtobj. - -2013-09-16 Will Newton <will.newton@linaro.org> - - * linux-aarch64-low.c (aarch64_linux_set_debug_regs): Zero - out regs. - -2013-09-06 Pedro Alves <palves@redhat.com> - - * Makefile.in (gdb_proc_service_h, regdef_h, regcache_h) - (signals_def, signals_h, ptid_h, ax_h, agent_h, linux_btrace_h) - (linux_osdata_h, vec_h, gdb_vecs_h, host_defs_h, libiberty_h) - (server_h, gdbthread_h, linux_low_h, linux_ptrace_h) - (gdb_thread_db_h, linux_procfs_h, lynx_low_h, nto_low_h) - (mips_linux_watch_h, i386_low_h, win32_low_h): Delete. - -2013-09-06 Pedro Alves <palves@redhat.com> - - * Makefile.in (linux-btrace.o, mips-linux-watch.o): Remove - explicit header dependencies and use $COMPILE/$POSTCOMPILE. - -2013-09-06 Pedro Alves <palves@redhat.com> - - * linux-amd64-ipa.c: Include tracepoint.h. - * linux-i386-ipa.c: Include tracepoint.h. - -2013-09-06 Ricard Wanderlof <ricardw@axis.com> - - * linux-crisv32-low.c (PTRACE_GET_THREAD_AREA): New macro. - (ps_get_thread_area): New function. - -2013-09-06 Ricard Wanderlof <ricardw@axis.com> - - * linux-crisv32-low.c (elf_gregset_t): Delete typedef. - (initialize_low_arch): Call init_registers_crisv32 rather than - init_register_crisv32. - -2013-09-05 Pedro Alves <palves@redhat.com> - - * server.h (handle_vFile, hostio_last_error_from_errno): Move - to ... - * hostio.h: ... this new file. - * hostio.c, server.c, linux-low.c, nto-low.c, spu-low, - win32-low.c: Include hostio.h. - -2013-09-05 Pedro Alves <palves@redhat.com> - - * server.h (gdb_client_data, handler_func, callback_handler_func) - (delete_file_handler, add_file_handler, append_callback_event) - (delete_callback_event, start_event_loop, initialize_event_loop): - Move to event-loop.h and include it. - * event-loop.h: New file. - -2013-09-05 Pedro Alves <palves@redhat.com> - - * dll.c, inferiors.c, remote-utils.c, server.c: Include "dll.h". - * server.h (struct dll_info, all_dlls, dlls_changed, clear_dlls) - (loaded_dll, unloaded_dll): Move to ... - * dll.h: ... this new file. - * inferiors.c, remote-utils.c, win32-low.c: Include "dll.h". - -2013-09-05 Pedro Alves <palves@redhat.com> - - * server.h (current_process, get_thread_process, all_processes) - (add_inferior_to_list, for_each_inferior, current_inferior) - (remove_inferior, add_process, remove_process, find_process_pid) - (have_started_inferiors_p, have_attached_inferiors_p) - (thread_id_to_gdb_id, thread_to_gdb_id, gdb_id_to_thread_id) - (clear_inferiors, find_inferior, find_inferior_id) - (inferior_target_data, set_inferior_target_data) - (inferior_regcache_data, set_inferior_regcache_data): Move to - inferiors.h, and include it. - * inferiors.h: New file. - -2013-09-05 Pedro Alves <palves@redhat.com> - - * server.h (struct emit_ops, current_insn_ptr, emit_error): - Move ... - * ax.h: ... here. - -2013-09-05 Pedro Alves <palves@redhat.com> - - * ax.c, linux-low.c, linux-x86-low.c, server.c: Include - tracepoint.h. - * server.h (IPA_BUFSIZ, initialize_tracepoint, tracing) - (disconnected_tracing, tracepoint_look_up_symbols, stop_tracing - (handle_tracepoint_general_set, handle_tracepoint_query) - (tracepoint_finished_step, tracepoint_was_hit) - (release_while_stepping_state_list, current_traceframe) - (in_readonly_region, traceframe_read_mem) - (fetch_traceframe_registers, traceframe_read_sdata) - (traceframe_read_info, struct fast_tpoint_collect_status) - (fast_tracepoint_collecting, force_unlock_trace_buffer) - (handle_tracepoit_bkpts, initialize_low_tracepoint) - (supply_fast_tracepoint_registers) - (supply_static_tracepoint_registers, set_trampoline_buffer_space) - (ipa_tdesc, claim_trampoline_space) - (have_fast_tracepoint_trampoline_buffer, gdb_agent_about_to_close) - (agent_mem_read, agent_get_trace_state_variable_value) - (agent_set_trace_state_variable_value, agent_tsv_read) - (agent_mem_read_string, get_raw_reg_func_addr) - (get_get_tsv_func_addr, get_set_tsv_func_addr): Move to ... - * tracepoint.h: ... this new file. - -2013-09-05 Pedro Alves <palves@redhat.com> - - * server.h (perror_with_name, error, fatal, warning, paddress) - (pulongest, plongest, phex_nz, pfildes): Move to utils.h, and - include it. - * utils.h: New file. - -2013-09-05 Pedro Alves <palves@redhat.com> - - * server.h (remote_debug, noack_mode, transport_is_reliable) - (gdb_connected, STDIO_CONNECTION_NAME, remote_connection_is_stdio) - (read_ptid, write_ptid, putpkt, putpkt_binary, putpkt_notif) - (getpkt, remote_prepare, remote_open, remote_close, write_ok) - (write_enn, initialize_async_io, enable_async_io) - (disable_async_io, check_remote_input_interrupt_request) - (convert_ascii_to_int, convert_int_to_ascii, new_thread_notify) - (dead_thread_notify, prepare_resume_reply) - (decode_address_to_semicolon, decode_address, decode_m_packet) - (decode_M_packet, decode_X_packet, decode_xfer_write) - (decode_search_memory_packet, unhexify, hexify) - (remote_escape_output, unpack_varlen_hex, clear_symbol_cache) - (look_up_one_symbol, relocate_instruction) - (monitor_output): Move to remote-utils.h, and include it. - * remote-utils.h: New file. - -2013-09-05 Pedro Alves <palves@redhat.com> - - * server.h (_): Delete. - -2013-09-02 Pedro Alves <palves@redhat.com> - - * tracepoint.c (TRACEFRAME_EOB_MARKER_SIZE): New macro. - (init_trace_buffer): Ensure at least TRACEFRAME_EOB_MARKER_SIZE is - allocated. - (trace_buffer_alloc): Use TRACEFRAME_EOB_MARKER_SIZE. - -2013-09-02 Pierre Muller <muller@sourceware.org> - - * win32-low.c (child_xfer_memory): Check if ReadProcessMemory - or WriteProcessMemory complete successfully and handle - ERROR_PARTIAL_COPY error. - -2013-09-02 Pedro Alves <palves@redhat.com> - - * server.c (gdb_read_memory): Return -1 on traceframe memory read - error instead of EIO. - -2013-08-28 Jan Kratochvil <jan.kratochvil@redhat.com> - - PR server/15604 - * linux-low.c: Include filestuff.h. - (linux_create_inferior) <pid == 0>: Call close_most_fds. - * lynx-low.c: Include filestuff.h. - (lynx_create_inferior) <pid == 0>: Call close_most_fds. - * server.c: Include filestuff.h. - (main): Call notice_open_fds. - * spu-low.c: Include filestuff.h. - (spu_create_inferior) <pid == 0>: Call close_most_fds. - -2013-08-22 Luis Machado <lgustavo@codesourcery.com> - - * Makefile.in: Explain why ../target and ../nat are not - listed as include file search paths. - (linux-waitpid.o): New object file rule. - * configure.srv (srv_native_linux_obj): New variable. - Replace all occurrences of linux native object files with - $srv_native_linux_obj. - * linux-low.c: Include nat/linux-nat.h and nat/linux-waitpid.h. - (HAS_NOMMU): Move defining logic to common/linux-ptrace.c. - (linux_enable_event_reporting): Remove declaration. - (my_waitpid): Moved to common/linux-waitpid.c. - (linux_wait_for_event): Pass ptid when calling - linux_enable_event_reporting. - (linux_supports_tracefork_flag): Remove. - (linux_enable_event_reporting): Likewise. - (linux_tracefork_grandchild): Remove. - (STACK_SIZE): Moved to common/linux-ptrace.c. - (linux_tracefork_child): Remove. - (linux_test_for_tracefork): Remove. - (linux_look_up_symbols): Call linux_supports_traceclone. - (initialize_low): Remove call to linux_test_for_tracefork. - * linux-low.h (PTRACE_TYPE_ARG3): Move to - common/linux-ptrace.h. - (PTRACE_TYPE_ARG4): Likewise. - Include linux-ptrace.h. - -2013-08-21 Pedro Alves <palves@redhat.com> - - * config.in: Renegerate. - -2013-08-19 Luis Machado <lgustavo@codesourcery.com> - - * Makefile.in (INCLUDE_CFLAGS): Include -I$(srcdir)/../. - (SFILES): Remove $(srcdir)/common/target-common.c and - add $(srcdir)/target/waitstatus.c. - (OBS): Remove target-common.o and add waitstatus.o. - (server_h): Remove $(srcdir)/../common/target-common.h and - add $(srcdir)/../target/resume.h, $(srcdir)/../target/wait.h - and $(srcdir)/../target/waitstatus.h. - (target-common.o): Remove. - (waitstatus.o): New target object file. - * target.h: Do not include target-common.h and - include target/resume.h, target/wait.h and - target/waitstatus.h. - -2013-08-13 Luis Machado <lgustavo@codesourcery.com> - - * linux-arm-low.c: Rename all occurrences of PTRACE_ARG3_TYPE - to PTRACE_TYPE_ARG3. - * linux-low.c: Rename all occurrences of PTRACE_ARG3_TYPE - to PTRACE_TYPE_ARG3 and PTRACE_ARG4_TYPE to - PTRACE_TYPE_ARG4. - * linux-low.h (PTRACE_ARG3_TYPE): Rename to PTRACE_TYPE_ARG3. - (PTRACE_ARG4_TYPE): Rename to PTRACE_TYPE_ARG4. - -2013-07-27 Jie Zhang <jie@codesourcery.com> - Daniel Jacobowitz <dan@codesourcery.com> - Yao Qi <yao@codesourcery.com> - - * Makefile.in (SFILES): Add common/mips-linux-watch.c. - (mips-linux-watch.o): New rule. - (mips_linux_watch_h): New variable. - * configure.srv <mips*-*-linux*>: Add mips-linux-watch.o to - srv_tgtobj. - * linux-mips-low.c: Include mips-linux-watch.h. - (struct arch_process_info, struct arch_lwp_info): New. - (update_watch_registers_callback): New function. - (mips_linux_new_process, mips_linux_new_thread) New functions. - (mips_linux_prepare_to_resume, mips_insert_point): New - functions. - (mips_remove_point, mips_stopped_by_watchpoint): New - functions. - (rsp_bp_type_to_target_hw_bp_type): New function. - (mips_stopped_data_address): New function. - (the_low_target): Add watchpoint support functions. - -2013-07-27 Yao Qi <yao@codesourcery.com> - - * i386-low.c: Include break-common.h. - (enum target_hw_bp_type): Remove. - -2013-07-24 Luis Machado <lgustavo@codesourcery.com> - - * Makefile.in (SFILES): /common/target-common.c. - (OBS): Add target-common.o. - (server_h): Add $(srcdir)/../common/target-common.h. - (target-common.o): New target. - * server.c (queue_stop_reply_callback): Free - status string after use. - * target.c (target_waitstatus_to_string): Remove. - * target.h: Include target-common.h. - (resume_kind): Likewise. - (target_waitkind): Likewise. - (target_waitstatus): Likewise. - (TARGET_WNOHANG): Likewise. - -2013-07-04 Yao Qi <yao@codesourcery.com> - - * Makefile.in (host_alias): Use @host_noncanonical@. - (target_alias): Use @target_noncanonical@. - * configure.ac: Use ACX_NONCANONICAL_TARGET and - ACX_NONCANONICAL_HOST. - * configure: Regenerated. - - Revert: - 2013-06-28 Mircea Gherzan <mircea.gherzan@intel.com> - - * configure.ac (version_host, version_target): Set and AC_SUBST them. - * configure: Rebuild. - * Makefile.in (version_host, version_target): Get from configure. - (version.c): Use $(version_host) and $(version_target). - -2013-07-03 Pedro Alves <palves@redhat.com> - - * Makefile.in (config.status): Depend on development.sh. - * acinclude.m4: Include libmcheck.m4. - * configure: Regenerate. - -2013-07-02 Mircea Gherzan <mircea.gherzan@intel.com> - - * win32-low.c (winapi_DebugActiveProcessStop): Move the WINAPI - attribute inside the parentheses. - (winapi_DebugSetProcessKillOnExit): Ditto. - (winapi_DebugBreakProcess): Ditto. - (winapi_GenerateConsoleCtrlEvent): Ditto. - -2013-07-02 Mircea Gherzan <mircea.gherzan@intel.com> - - * notif.h (notif_event): Add a dummy member to avoid compiler - errors. - -2013-07-01 Pedro Alves <palves@redhat.com> - - * hostio.c (HOSTIO_PATH_MAX): Define. - (require_filename, handle_open, handle_unlink, handle_readlink): - Use it. - -2013-07-01 Pedro Alves <palves@redhat.com> - - * server.h: Include "pathmax.h". - * linux-low.c: Don't include sys/param.h. - (linux_pid_exe_is_elf_64_file): Use PATH_MAX instead of - MAXPATHLEN. - * win32-low.c: Don't include sys/param.h. - (win32_create_inferior): Use PATH_MAX instead of MAXPATHLEN. - -2013-07-01 Pedro Alves <palves@redhat.com> - - * event-loop.c: Don't check HAVE_UNISTD_H before including - <unistd.h>. - * gdbreplay.c: Likewise. - * remote-utils.c: Likewise. - * server.c: Likewise. - * configure.ac: Don't check for unistd.h. - * configure: Regenerate. - -2013-06-28 Tom Tromey <tromey@redhat.com> - - * Makefile.in (version.c): Use version.in, not - common/version.in. - -2013-06-28 Mircea Gherzan <mircea.gherzan@intel.com> - - * configure.ac (version_host, version_target): Set and AC_SUBST them. - * configure: Rebuild. - * Makefile.in (version_host, version_target): Get from configure. - (version.c): Use $(version_host) and $(version_target). - -2013-06-10 Dmitry Kozlov <ddk@codesourcery.com> - - Fix trace-status to output user name without trailing colon. - * tracepoint.c (cmd_qtstatus): Remove unnecessary colon from user name. - -2013-06-10 Dmitry Kozlov <ddk@codesourcery.com> - - Fix trace-status to output proper start-time and stop-time. - * tracepoint.c (cmd_qtstatus): Modify trace-status output to - output start time and stop time in hex as gdb expects. - -2013-06-26 Pedro Alves <pedro@codesourcery.com> - - * tracepoint.c (build_traceframe_info_xml): Output trace state - variables present in the trace buffer. - -2013-06-24 Tom Tromey <tromey@redhat.com> - - * Makefile.in (version.c): Use bfd/version.h, common/version.in, - create-version.sh. - (version.o): Remove. - * gdbreplay.c: Include version.h. - (version, host_name): Don't declare. - * server.h: Include version.h. - (version, host_name): Don't declare. - -2013-06-12 Pedro Alves <palves@redhat.com> - - * linux-x86-low.c (linux_is_elf64): Delete global. - (x86_siginfo_fixup): Replace reference to `linux_is_elf64' global - with local linux_pid_exe_is_elf_64_file use. - -2013-06-11 Pedro Alves <palves@redhat.com> - - * linux-low.c (regset_disabled, disable_regset): New functions. - (regsets_fetch_inferior_registers) - (regsets_store_inferior_registers): Use them. - (initialize_regsets_info); Don't allocate the disabled_regsets - array here. - * linux-low.h (struct regsets_info) <disabled_regsets>: Extend - comment. - -2013-06-11 Pedro Alves <palves@redhat.com> - - * linux-low.c (initialize_regsets_info): Use xcalloc instead of - xmalloc. - -2013-06-11 Pedro Alves <palves@redhat.com> - - * linux-x86-low.c (initialize_low_arch): Call - init_registers_x32_avx_linux. - -2013-06-09 Jan Kratochvil <jan.kratochvil@redhat.com> - - Fix compatibility with Android Bionic. - * linux-low.c (linux_qxfer_libraries_svr4): Ignore first entry even if - it is not empty. - -2013-06-07 Pedro Alves <palves@redhat.com> - - PR server/14823 - * Makefile.in (OBS): Add tdesc.o. - (IPA_OBJS): Add tdesc-ipa.o. - (tdesc-ipa.o): New rule. - * ax.c (gdb_eval_agent_expr): Adjust register_size call to new - interface. - * linux-low.c (new_inferior): Delete. - (disabled_regsets, num_regsets): Delete. - (linux_add_process): Adjust to set the new per-process - new_inferior flag. - (linux_detach_one_lwp): Adjust to call regcache_invalidate_thread. - (linux_wait_for_lwp): Adjust. Only call arch_setup if the event - was a stop. When calling arch_setup, switch the current inferior - to the thread that got an event. - (linux_resume_one_lwp): Adjust to call regcache_invalidate_thread. - (regsets_fetch_inferior_registers) - (regsets_store_inferior_registers): New regsets_info parameter. - Adjust to use it. - (linux_register_in_regsets): New regs_info parameter. Adjust to - use it. - (register_addr, fetch_register, store_register): New usrregs_info - parameter. Adjust to use it. - (usr_fetch_inferior_registers, usr_store_inferior_registers): New - parameter regs_info. Adjust to use it. - (linux_fetch_registers): Get the current inferior's regs_info, and - adjust to use it. - (linux_store_registers): Ditto. - [HAVE_LINUX_REGSETS] (initialize_regsets_info): New. - (initialize_low): Don't initialize the target_regsets here. Call - initialize_low_arch. - * linux-low.h (target_regsets): Delete declaration. - (struct regsets_info): New. - (struct usrregs_info): New. - (struct regs_info): New. - (struct process_info_private) <new_inferior>: New field. - (struct linux_target_ops): Delete the num_regs, regmap, and - regset_bitmap fields. New field regs_info. - [HAVE_LINUX_REGSETS] (initialize_regsets_info): Declare. - * i387-fp.c (num_xmm_registers): Delete. - (i387_cache_to_fsave, i387_fsave_to_cache): Adjust find_regno - calls to new interface. - (i387_cache_to_fxsave, i387_cache_to_xsave, i387_fxsave_to_cache) - (i387_xsave_to_cache): Adjust find_regno calls to new interface. - Infer the number of xmm registers from the regcache's target - description. - * i387-fp.h (num_xmm_registers): Delete. - * inferiors.c (add_thread): Don't install the thread's regcache - here. - * proc-service.c (gregset_info): Fetch the current inferior's - regs_info. Adjust to use it. - * regcache.c: Include tdesc.h. - (register_bytes, reg_defs, num_registers) - (gdbserver_expedite_regs): Delete. - (get_thread_regcache): If the thread doesn't have a regcache yet, - create one, instead of aborting gdbserver. - (regcache_invalidate_one): Rename to ... - (regcache_invalidate_thread): ... this. - (regcache_invalidate_one): New. - (regcache_invalidate): Only invalidate registers of the current - process. - (init_register_cache): Add target_desc parameter, and use it. - (new_register_cache): Ditto. Assert the target description has a - non zero registers_size. - (regcache_cpy): Add assertions. Adjust. - (realloc_register_cache, set_register_cache): Delete. - (registers_to_string, registers_from_string): Adjust. - (find_register_by_name, find_regno, find_register_by_number) - (register_cache_size): Add target_desc parameter, and use it. - (free_register_cache_thread, free_register_cache_thread_one) - (regcache_release, register_cache_size): New. - (register_size): Add target_desc parameter, and use it. - (register_data, supply_register, supply_register_zeroed) - (supply_regblock, supply_register_by_name, collect_register) - (collect_register_as_string, collect_register_by_name): Adjust. - * regcache.h (struct target_desc): Forward declare. - (struct regcache) <tdesc>: New field. - (init_register_cache, new_register_cache): Add target_desc - parameter. - (regcache_invalidate_thread): Declare. - (regcache_invalidate_one): Delete declaration. - (regcache_release): Declare. - (find_register_by_number, register_cache_size, register_size) - (find_regno): Add target_desc parameter. - (gdbserver_expedite_regs, gdbserver_xmltarget): Delete - declarations. - * remote-utils.c: Include tdesc.h. - (outreg, prepare_resume_reply): Adjust. - * server.c: Include tdesc.h. - (gdbserver_xmltarget): Delete declaration. - (get_features_xml, process_serial_event): Adjust. - * server.h [IN_PROCESS_AGENT] (struct target_desc): Forward - declare. - (struct process_info) <tdesc>: New field. - (ipa_tdesc): Declare. - * tdesc.c: New file. - * tdesc.h: New file. - * tracepoint.c: Include tdesc.h. - [IN_PROCESS_AGENT] (ipa_tdesc): Define. - (get_context_regcache): Adjust to pass ipa_tdesc down. - (do_action_at_tracepoint): Adjust to get the register cache size - from the context regcache's description. - (traceframe_walk_blocks): Adjust to get the register cache size - from the current trace frame's description. - (traceframe_get_pc): Adjust to get current trace frame's - description and pass it down. - (gdb_collect): Adjust to get the register cache size from the - IPA's description. - * linux-amd64-ipa.c (tdesc_amd64_linux): Declare. - (gdbserver_xmltarget): Delete. - (initialize_low_tracepoint): Set the ipa's target description. - * linux-i386-ipa.c (tdesc_i386_linux): Declare. - (initialize_low_tracepoint): Set the ipa's target description. - * linux-x86-low.c: Include tdesc.h. - [__x86_64__] (is_64bit_tdesc): New. - (ps_get_thread_area, x86_get_thread_area): Use it. - (i386_cannot_store_register): Rename to ... - (x86_cannot_store_register): ... this. Use is_64bit_tdesc. - (i386_cannot_fetch_register): Rename to ... - (x86_cannot_fetch_register): ... this. Use is_64bit_tdesc. - (x86_fill_gregset, x86_store_gregset): Adjust register_size calls - to new interface. - (target_regsets): Rename to ... - (x86_regsets): ... this. - (x86_get_pc, x86_set_pc): Adjust register_size calls to new - interface. - (x86_siginfo_fixup): Use is_64bit_tdesc. - [__x86_64__] (tdesc_amd64_linux, tdesc_amd64_avx_linux) - (tdesc_x32_avx_linux, tdesc_x32_linux) - (tdesc_i386_linux, tdesc_i386_mmx_linux, tdesc_i386_avx_linux): - Declare. - (x86_linux_update_xmltarget): Delete. - (I386_LINUX_XSAVE_XCR0_OFFSET): Define. - (have_ptrace_getfpxregs, have_ptrace_getregset): New. - (AMD64_LINUX_USER64_CS): New. - (x86_linux_read_description): New, based on - x86_linux_update_xmltarget. - (same_process_callback): New. - (x86_arch_setup_process_callback): New. - (x86_linux_update_xmltarget): New. - (x86_regsets_info): New. - (amd64_linux_regs_info): New. - (i386_linux_usrregs_info): New. - (i386_linux_regs_info): New. - (x86_linux_regs_info): New. - (x86_arch_setup): Reimplement. - (x86_install_fast_tracepoint_jump_pad): Use is_64bit_tdesc. - (x86_emit_ops): Ditto. - (the_low_target): Adjust. Install x86_linux_regs_info, - x86_cannot_fetch_register, and x86_cannot_store_register. - (initialize_low_arch): New. - * linux-ia64-low.c (tdesc_ia64): Declare. - (ia64_fetch_register): Adjust. - (ia64_usrregs_info, regs_info): New globals. - (ia64_regs_info): New function. - (the_low_target): Adjust. - (initialize_low_arch): New function. - * linux-sparc-low.c (tdesc_sparc64): Declare. - (sparc_fill_gregset_to_stack, sparc_store_gregset_from_stack): - Adjust. - (sparc_arch_setup): New function. - (sparc_regsets_info, sparc_usrregs_info, regs_info): New globals. - (the_low_target): Adjust. - (initialize_low_arch): New function. - * linux-ppc-low.c (tdesc_powerpc_32l, tdesc_powerpc_altivec32l) - (tdesc_powerpc_cell32l, tdesc_powerpc_vsx32l) - (tdesc_powerpc_isa205_32l, tdesc_powerpc_isa205_altivec32l) - (tdesc_powerpc_isa205_vsx32l, tdesc_powerpc_e500l) - (tdesc_powerpc_64l, tdesc_powerpc_altivec64l) - (tdesc_powerpc_cell64l, tdesc_powerpc_vsx64l) - (tdesc_powerpc_isa205_64l, tdesc_powerpc_isa205_altivec64l) - (tdesc_powerpc_isa205_vsx64l): Declare. - (ppc_cannot_store_register, ppc_collect_ptrace_register) - (ppc_supply_ptrace_register, parse_spufs_run, ppc_get_pc) - (ppc_set_pc, ppc_get_hwcap): Adjust. - (ppc_usrregs_info): Forward declare. - (!__powerpc64__) ppc_regmap_adjusted: New global. - (ppc_arch_setup): Adjust to the current process'es target - description. - (ppc_fill_vsxregset, ppc_store_vsxregset, ppc_fill_vrregset) - (ppc_store_vrregset, ppc_fill_evrregset, ppc_store_evrregse) - (ppc_store_evrregset): Adjust. - (target_regsets): Rename to ... - (ppc_regsets): ... this, and make static. - (ppc_usrregs_info, ppc_regsets_info, regs_info): New globals. - (ppc_regs_info): New function. - (the_low_target): Adjust. - (initialize_low_arch): New function. - * linux-s390-low.c (tdesc_s390_linux32, tdesc_s390_linux32v1) - (tdesc_s390_linux32v2, tdesc_s390_linux64, tdesc_s390_linux64v1) - (tdesc_s390_linux64v2, tdesc_s390x_linux64, tdesc_s390x_linux64v1) - (tdesc_s390x_linux64v2): Declare. - (s390_collect_ptrace_register, s390_supply_ptrace_register) - (s390_fill_gregset, s390_store_last_break): Adjust. - (target_regsets): Rename to ... - (s390_regsets): ... this, and make static. - (s390_get_pc, s390_set_pc): Adjust. - (s390_get_hwcap): New target_desc parameter, and use it. - [__s390x__] (have_hwcap_s390_high_gprs): New global. - (s390_arch_setup): Adjust to set the current process'es target - description. Don't adjust the regmap. - (s390_usrregs_info, s390_regsets_info, regs_info): New globals. - [__s390x__] (s390_usrregs_info_3264, s390_regsets_info_3264) - (regs_info_3264): New globals. - (s390_regs_info): New function. - (the_low_target): Adjust. - (initialize_low_arch): New function. - * linux-mips-low.c (tdesc_mips_linux, tdesc_mips_dsp_linux) - (tdesc_mips64_linux, tdesc_mips64_dsp_linux): Declare. - [__mips64] (init_registers_mips_linux) - (init_registers_mips_dsp_linux): Delete defines. - [__mips64] (tdesc_mips_linux, tdesc_mips_dsp_linux): New defines. - (have_dsp): New global. - (mips_read_description): New, based on mips_arch_setup. - (mips_arch_setup): Reimplement. - (get_usrregs_info): New function. - (mips_cannot_fetch_register, mips_cannot_store_register) - (mips_get_pc, mips_set_pc, mips_fill_gregset, mips_store_gregset) - (mips_fill_fpregset, mips_store_fpregset): Adjust. - (target_regsets): Rename to ... - (mips_regsets): ... this, and make static. - (mips_regsets_info, mips_dsp_usrregs_info, mips_usrregs_info) - (dsp_regs_info, regs_info): New globals. - (mips_regs_info): New function. - (the_low_target): Adjust. - (initialize_low_arch): New function. - * linux-arm-low.c (tdesc_arm, tdesc_arm_with_iwmmxt) - (tdesc_arm_with_vfpv2, tdesc_arm_with_vfpv3, tdesc_arm_with_neon): - Declare. - (arm_fill_vfpregset, arm_store_vfpregset): Adjust. - (arm_read_description): New, with bits factored from - arm_arch_setup. - (arm_arch_setup): Reimplement. - (target_regsets): Rename to ... - (arm_regsets): ... this, and make static. - (arm_regsets_info, arm_usrregs_info, regs_info): New globals. - (arm_regs_info): New function. - (the_low_target): Adjust. - (initialize_low_arch): New function. - * linux-m68k-low.c (tdesc_m68k): Declare. - (target_regsets): Rename to ... - (m68k_regsets): ... this, and make static. - (m68k_regsets_info, m68k_usrregs_info, regs_info): New globals. - (m68k_regs_info): New function. - (m68k_arch_setup): New function. - (the_low_target): Adjust. - (initialize_low_arch): New function. - * linux-sh-low.c (tdesc_sharch): Declare. - (target_regsets): Rename to ... - (sh_regsets): ... this, and make static. - (sh_regsets_info, sh_usrregs_info, regs_info): New globals. - (sh_regs_info, sh_arch_setup): New functions. - (the_low_target): Adjust. - (initialize_low_arch): New function. - * linux-bfin-low.c (tdesc_bfin): Declare. - (bfin_arch_setup): New function. - (bfin_usrregs_info, regs_info): New globals. - (bfin_regs_info): New function. - (the_low_target): Adjust. - (initialize_low_arch): New function. - * linux-cris-low.c (tdesc_cris): Declare. - (cris_arch_setup): New function. - (cris_usrregs_info, regs_info): New globals. - (cris_regs_info): New function. - (the_low_target): Adjust. - (initialize_low_arch): New function. - * linux-cris-low.c (tdesc_crisv32): Declare. - (cris_arch_setup): New function. - (cris_regsets_info, cris_usrregs_info, regs_info): New globals. - (cris_regs_info): New function. - (the_low_target): Adjust. - (initialize_low_arch): New function. - * linux-m32r-low.c (tdesc_m32r): Declare. - (m32r_arch_setup): New function. - (m32r_usrregs_info, regs_info): New globals. - (m32r_regs_info): Adjust. - (initialize_low_arch): New function. - * linux-tic6x-low.c (tdesc_tic6x_c64xp_linux) - (tdesc_tic6x_c64x_linux, tdesc_tic6x_c62x_linux): Declare. - (tic6x_usrregs_info): Forward declare. - (tic6x_read_description): New function, based on ... - (tic6x_arch_setup): ... this. Reimplement. - (target_regsets): Rename to ... - (tic6x_regsets): ... this, and make static. - (tic6x_regsets_info, tic6x_usrregs_info, regs_info): New globals. - (tic6x_regs_info): New function. - (the_low_target): Adjust. - (initialize_low_arch): New function. - * linux-xtensa-low.c (tdesc_xtensa): Declare. - (xtensa_fill_gregset, xtensa_store_gregset): Adjust. - (target_regsets): Rename to ... - (xtensa_regsets): ... this, and make static. - (xtensa_regsets_info, xtensa_usrregs_info, regs_info): New - globals. - (xtensa_arch_setup, xtensa_regs_info): New functions. - (the_low_target): Adjust. - (initialize_low_arch): New function. - * linux-nios2-low.c (tdesc_nios2_linux): Declare. - (nios2_arch_setup): Set the current process'es tdesc. - (target_regsets): Rename to ... - (nios2_regsets): ... this. - (nios2_regsets_info, nios2_usrregs_info, regs_info): New globals. - (nios2_regs_info): New function. - (the_low_target): Adjust. - (initialize_low_arch): New function. - * linux-aarch64-low.c (tdesc_aarch64): Declare. - (aarch64_arch_setup): Set the current process'es tdesc. - (target_regsets): Rename to ... - (aarch64_regsets): ... this. - (aarch64_regsets_info, aarch64_usrregs_info, regs_info): New globals. - (aarch64_regs_info): New function. - (the_low_target): Adjust. - (initialize_low_arch): New function. - * linux-tile-low.c (tdesc_tilegx, tdesc_tilegx32): Declare - globals. - (target_regsets): Rename to ... - (tile_regsets): ... this. - (tile_regsets_info, tile_usrregs_info, regs_info): New globals. - (tile_regs_info): New function. - (tile_arch_setup): Set the current process'es tdesc. - (the_low_target): Adjust. - (initialize_low_arch): New function. - * spu-low.c (tdesc_spu): Declare. - (spu_create_inferior, spu_attach): Set the new process'es tdesc. - * win32-arm-low.c (tdesc_arm): Declare. - (arm_arch_setup): New function. - (the_low_target): Install arm_arch_setup instead of - init_registers_arm. - * win32-i386-low.c (tdesc_i386, tdesc_amd64): Declare. - (init_windows_x86): Rename to ... - (i386_arch_setup): ... this. Set `win32_tdesc'. - (the_low_target): Adjust. - * win32-low.c (win32_tdesc): New global. - (child_add_thread): Don't create the thread cache here. - (do_initial_child_stuff): Set the new process'es tdesc. - * win32-low.h (struct target_desc): Forward declare. - (win32_tdesc): Declare. - * lynx-i386-low.c (tdesc_i386): Declare global. - (lynx_i386_arch_setup): Set `lynx_tdesc'. - * lynx-low.c (lynx_tdesc): New global. - (lynx_add_process): Set the new process'es tdesc. - * lynx-low.h (struct target_desc): Forward declare. - (lynx_tdesc): Declare global. - * lynx-ppc-low.c (tdesc_powerpc_32): Declare global. - (lynx_ppc_arch_setup): Set `lynx_tdesc'. - * nto-low.c (nto_tdesc): New global. - (do_attach): Set the new process'es tdesc. - * nto-low.h (struct target_desc): Forward declare. - (nto_tdesc): Declare. - * nto-x86-low.c (tdesc_i386): Declare. - (nto_x86_arch_setup): Set `nto_tdesc'. - -2013-06-04 Gary Benson <gbenson@redhat.com> - - * server.c (handle_query): Add "augmented-libraries-svr4-read+" - to qSupported response when appropriate. - (handle_qxfer_libraries_svr4): Allow qXfer:libraries-svr4:read - with nonzero-length annex. - * linux-low.c (linux_qxfer_libraries_svr4): Parse and handle - arguments supplied in annex. - -2013-05-31 Doug Evans <dje@google.com> - - PR server/15594 - * linux-x86-low.c (ps_get_thread_area): Properly extend address to - 64 bits in 64-cross-32 environment. - -2013-05-28 Pedro Alves <palves@redhat.com> - - * Makefile.in (clean): Remove reference to aarch64-without-fpu.c. - (aarch64-without-fpu.c): Delete rule. - * configure.srv (aarch64*-*-linux*): Remove references to - aarch64-without-fpu.o and aarch64-without-fpu.xml. - * linux-aarch64-low.c (init_registers_aarch64_without_fpu): Remove - declaration. - -2013-05-24 Pedro Alves <palves@redhat.com> - - * server.c (handle_v_cont) <vCont;r>: Use unpack_varlen_hex - instead of strchr/decode_address. Error if the range isn't split - with a ','. Don't assume there's be a ':' in the action. - -2013-05-23 Yao Qi <yao@codesourcery.com> - Pedro Alves <palves@redhat.com> - - * linux-low.c (lwp_in_step_range): New function. - (linux_wait_1): If the thread was range stepping and stopped - outside the stepping range, report the stop to GDB. Otherwise, - continue stepping. Add range stepping debug output. - (linux_set_resume_request): Copy the step range from the resume - request to the lwp. - (linux_supports_range_stepping): New. - (linux_target_ops) <supports_range_stepping>: Set to - linux_supports_range_stepping. - * linux-low.h (struct linux_target_ops) - <supports_range_stepping>: New field. - (struct lwp_info) <step_range_start, step_range_end>: New fields. - * linux-x86-low.c (x86_supports_range_stepping): New. - (the_low_target) <supports_range_stepping>: Set to - x86_supports_range_stepping. - * server.c (handle_v_cont): Handle 'r' action. - (handle_v_requests): Append ";r" if the target supports range - stepping. - * target.h (struct thread_resume) <step_range_start, - step_range_end>: New fields. - (struct target_ops) <supports_range_stepping>: - New field. - (target_supports_range_stepping): New macro. - -2013-05-17 Joel Brobecker <brobecker@adacore.com> - - * lynx-low.c (lynx_resume): Fix null_ptid/minus_one_ptid - confusion in comment. - -2013-05-17 Joel Brobecker <brobecker@adacore.com> - - * lynx-low.c (struct process_info_private): New type. - (lynx_add_process): New function. - (lynx_create_inferior, lynx_attach): Replace calls to - add_process by calls to lynx_add_process. - (lynx_resume): If PTID is null, then try using - current_process()->private->last_wait_event_ptid. - Add comments. - (lynx_clear_inferiors): Delete. The contents of that function - has been inlined in lynx_mourn; - (lynx_wait_1): Save the ptid in the process's private data. - (lynx_mourn): Free the process' private data. Replace call - to lynx_clear_inferiors by call to clear_inferiors. - -2013-05-17 Yao Qi <yao@codesourcery.com> - - * i386-low.c (i386_length_and_rw_bits): Move the comment to - the right place. - -2013-05-16 Luis Machado <lgustavo@codesourcery.com> - - * linux-low.c: Move definition checks upwards for PT_TEXT_ADDR, - PT_DATA_ADDR and PT_TEXT_END_ADDR. Update comments. - (linux_read_offsets): Remove PT_TEXT_ADDR, PT_DATA_ADDR and - PT_TEXT_END_ADDR guards. Update comments. - (linux_target_op) <read_offsets>: Conditionally define to - linux_read_offsets if the target is UCLIBC and if it defines - PT_TEXT_ADDR, PT_DATA_ADDR and PT_TEXT_END_ADDR. - -2013-05-06 Sandra Loosemore <sandra@codesourcery.com> - Andrew Jenner <andrew@codesourcery.com> - - * Makefile.in (SFILES): Add linux-nios2-low.c. - (clean): Add action to delete nios2-linux.c. - (nios2-linux.c): New rule. - * configure.srv: Add nios2*-*-linux*. - * linux-nios2-low.c: New. - -2013-05-03 Hafiz Abid Qadeer <abidh@codesourcery.com> - - * tracepoint.c (cmd_qtinit): Call 'stop_tracing'. - -2013-04-25 Hui Zhu <hui@codesourcery.com> - - PR gdb/15186 - * ax.c (ax_printf): Add fflush. - -2013-04-22 Tom Tromey <tromey@redhat.com> - - * Makefile.in (SFILES): Add filestuff.c. - (OBS): Add filestuff.o. - (filestuff.o): New target. - * config.in, configure: Rebuild. - * configure.ac: Check for fdwalk, pipe2. - -2013-04-17 Pedro Alves <palves@redhat.com> - - * configure.ac (USE_THREAD_DB): Delete variable. - (if test "$srv_linux_thread_db" = "yes"): AC_DEFINE USE_THREAD_DB. - Don't AC_SUBST USE_THREAD_DB. - * Makefile.in (INTERNAL_CFLAGS): Remove @USE_THREAD_DB@. - * config.in, configure: Regenerate. - -2013-04-16 Pedro Alves <palves@redhat.com> - - * linux-low.h (struct lwp_info) <thread_known>: Move under - the USE_THREAD_DB #ifdef. - -2013-04-16 Pedro Alves <palves@redhat.com> - - * Makefile.in (INTERNAL_CFLAGS): Add @USE_THREAD_DB@. - (linux-low.o): Delete rule. - * linux-low.h: Always include "gdb_thread_db.h" instead of - conditionally including thread_db.h. - (struct lwp_info) <th>: Guard with #ifdef USE_THREAD_DB instead of - HAVE_THREAD_DB_H. - -2013-04-07 Jan Kratochvil <jan.kratochvil@redhat.com> - - * Makefile.in (install-only): Fix make install regression. - -2013-04-05 Jan Kratochvil <jan.kratochvil@redhat.com> - - Convert man pages to texinfo, new gdbinit.5 texinfo page. - * Makefile.in (install-only): Remove $(man1dir) and gdbserver.1 - installation. - * gdbserver.1: Remove. - -2013-03-22 Pedro Alves <palves@redhat.com> - - * linux-low.c (handle_extended_wait): Don't call - linux_enable_event_reporting. - -2013-03-15 Tony Theodore <tonyt@logyst.com> - - PR build/9098: - * Makefile.in (SHELL): Use @SHELL@. - -2013-03-14 Sergio Durigan Junior <sergiodj@redhat.com> - - * tracepoint.c (cmd_qtv): Initialize `val' with zero, silencing - compiler warning. - -2013-03-13 Joel Brobecker <brobecker@adacore.com> - - * linux-low.c (linux_target_ops) [!HAVE_LINUX_BTRACE]: - Remove extraneous NULL element. - -2013-03-13 Yao Qi <yao@codesourcery.com> - - * tracepoint.c (traceframe_read_tsv): Look for the last matched - 'V' block in trace frame. - -2013-03-11 Markus Metzger <markus.t.metzger@intel.com> - - * target.h (struct target_ops): Add btrace ops. - (target_supports_btrace): New macro. - (target_enable_btrace): New macro. - (target_disable_btrace): New macro. - (target_read_btrace): New macro. - * gdbthread.h (struct thread_info): Add btrace field. - * server.c: Include btrace-common.h. - (handle_btrace_general_set): New function. - (handle_btrace_enable): New function. - (handle_btrace_disable): New function. - (handle_general_set): Call handle_btrace_general_set. - (handle_qxfer_btrace): New function. - (struct qxfer qxfer_packets[]): Add btrace entry. - * inferiors.c (remove_thread): Disable btrace. - * linux-low: Include linux-btrace.h. - (linux_low_enable_btrace): New function. - (linux_low_read_btrace): New function. - (linux_target_ops): Add btrace ops. - * configure.srv (i[34567]86-*-linux*): Add linux-btrace.o. - Add srv_linux_btrace=yes. - (x86_64-*-linux*): Add linux-btrace.o. - Add srv_linux_btrace=yes. - * configure.ac: Define HAVE_LINUX_BTRACE. - * config.in: Regenerated. - * configure: Regenerated. - -2013-03-11 Markus Metzger <markus.t.metzger@intel.com> - - * server.c (handle_qxfer): Preserve error message if -3 is - returned. - (qxfer): Document the -3 return value. - -2013-03-11 Markus Metzger <markus.t.metzger@intel.com> - - * Makefile.in (SFILES): Add $(srcdir)/common/linux-btrace.c. - (linux_btrace_h): New variable. - (linux-btrace.o): New rule. - -2013-03-08 Stan Shebs <stan@codesourcery.com> - Hafiz Abid Qadeer <abidh@codesourcery.com> - - * tracepoint.c (trace_buffer_size): New global. - (DEFAULT_TRACE_BUFFER_SIZE): New define. - (init_trace_buffer): Change to one-argument function. Allocate - trace buffer memory. - (handle_tracepoint_general_set): Call cmd_bigqtbuffer_size to - handle QTBuffer:size packet. - (cmd_bigqtbuffer_size): New function. - (initialize_tracepoint): Call init_trace_buffer with - DEFAULT_TRACE_BUFFER_SIZE. - * server.c (handle_query): Add QTBuffer:size in the - supported packets. - -2013-03-07 Yao Qi <yao@codesourcery.com> - - * tracepoint.c (cur_action, cur_step_action): Make them unsigned. - (cmd_qtfp): Initialize cur_action and cur_step_action 0 instead - of -1. - (cmd_qtsp): Adjust condition. Do post increment. - Set cur_action and cur_step_action back to 0. - -2013-03-07 Jeremy Bennett <jeremy.bennett@embecosm.com> - - PR server/15236 - * linux-low.c (linux_write_memory): Return early success if LEN is - zero. - -2013-03-05 Corinna Vinschen <vinschen@redhat.de> - - * configure.srv: Add x86_64-*-cygwin* as target. - -2013-02-28 Tom Tromey <tromey@redhat.com> - - * configure.ac: Invoke AC_SYS_LARGEFILE. - * configure, config.in: Rebuild. - -2013-02-28 Corinna Vinschen <vinschen@redhat.com> - - * win32-low.c: Throughout, fix format strings and casts of - printf-like functions to avoid type related warnings on all - platforms. - (get_child_debug_event): Print dwDebugEventCode as hex since - that's how it's usually documented. - -2013-02-28 Yao Qi <yao@codesourcery.com> - - * tracepoint.c (cmd_qtbuffer): Call phex_nz instead of - pulongest. - -2013-02-27 Jiong Wang <jiwang@tilera.com> - - * Makefile.in (clean): Remove reg-tilegx.c, reg-tilegx32.c. - (reg-tilegx32.c): New rule. - * configure.srv (tilegx-*-linux*): Add reg-tilegx32.o to srv_regobj. - * linux-tile-low.c (tile_arch_setup): New function. Invoke - different register info initializer according to elf class. - (init_registers_tilgx32): New function. The tilegx32 register info - initializer. - (tile_fill_gregset): Use "uint_reg_t" to represent register size. - (tile_store_gregset): Likewise. - -2013-02-27 Yao Qi <yao@codesourcery.com> - - * server.c (process_point_options): Print debug message when - debug_threads is true. - -2013-02-26 Yao Qi <yao@codesourcery.com> - - * tracepoint.c (cmd_qtbuffer): Don't set '\0' in OWN_BUF. - -2013-02-19 Pedro Alves <palves@redhat.com> - Kai Tietz <ktietz@redhat.com> - - PR gdb/15161 - - * server.c (handle_query) <CRC check>: Use unpack_varlen_hex - instead of strtoul to extract address from packet. - (process_serial_event) <'z'>: Likewise. - -2013-02-18 Yao Qi <yao@codesourcery.com> - - * linux-bfin-low.c (the_low_target): Use NULL instead of 0. - -2013-02-14 Pedro Alves <palves@redhat.com> - - Plug memory leak. - - * tracepoint.c (cmd_qtnotes): Free TRACING_USER_NAME, - TRACING_NOTES and TRACING_STOP_NOTE before clobbering. - -2013-02-14 Pedro Alves <palves@redhat.com> - - * tracepoint.c (cmd_qtdpsrc): Use savestring. - -2013-02-14 Pedro Alves <palves@redhat.com> - - * tracepoint.c (save_string): Delete. - (add_tracepoint_action): Use savestring instead of save_string. - -2013-02-12 Pedro Alves <palves@redhat.com> - - * linux-xtensa-low.c: Ditto. - * xtensa-xtregs.c: Ditto. - -2013-02-12 Sanimir Agovic <sanimir.agovic@intel.com> - - * thread-db.c (thread_db_get_tls_address): NULL pointer check - thread_db. - -2013-02-07 Marcus Shawcroft <marcus.shawcroft@arm.com> - - * linux-aarch64-low.c (aarch64_arch_setup): Clamp - aarch64_num_wp_regs and aarch64_num_bp_regs to - AARCH64_HWP_MAX_NUM and AARCH64_HBP_MAX_NUM respectively. - -2013-02-07 Marcus Shawcroft <marcus.shawcroft@arm.com> - - * linux-aarch64-low.c (ps_get_thread_area): Replace - PTRACE_GET_THREAD_AREA with PTRACE_GETREGSET. - -2013-02-04 Jim MacArthur <jim.macarthur@arm.com> - Marcus Shawcroft <marcus.shawcroft@arm.com> - Nigel Stephens <nigel.stephens@arm.com> - Yufeng Zhang <yufeng.zhang@arm.com> - - * Makefile.in (clean): Remove aarch64.c and aarch64-without-fpu.c. - (aarch64.c, aarch64-without-fpu.c): New targets. - * configure.srv (aarch64*-*-linux*): New. - * linux-aarch64-low.c: New file. - -2013-02-04 Marcus Shawcroft <marcus.shawcroft@arm.com> - - * linux-low.c (handle_extended_wait, linux_create_inferior) - (linux_attach_lwp_1, linux_kill_one_lwp, linux_attach_one_lwp) - (dequeue_one_deferred_signal, linux_resume_one_thread) - (fetch_register, linux_write_memory, linux_enable_event_reporting) - (linux_tracefork_grandchild, linux_test_for_tracefork) - (linux_read_offsets, linux_xfer_siginfo, linux_xfer_siginfo): Add - PTRACE_ARG3_TYPE and PTRACE_ARG4_TYPE cast to ptrace arguments - where the argument is 0. - -2013-01-25 Yao Qi <yao@codesourcery.com> - - * event-loop.c: Include "queue.h". - (gdb_event_p): New typedef. - (struct gdb_event) <next_event>: Remove. - (event_queue): Change to QUEUE(gdb_event_p). - (async_queue_event): Remove. - (gdb_event_xfree): New. - (initialize_event_loop): New. - (process_event): Use API from QUEUE. - (wait_for_event): Likewise. - * server.c (main): Call initialize_event_loop. - * server.h (initialize_event_loop): Declare. - -2013-01-18 Yao Qi <yao@codesourcery.com> - - * ax.h (struct eval_agent_expr_context): New. - (gdb_eval_agent_expr): Update declaration. - * ax.c (gdb_eval_agent_expr): Remove argument REGCACHE and - TFRAME. Add new argument CTX. - * server.h (struct eval_agent_expr_context): Declare. - (agent_mem_read, agent_tsv_read): Update declaration. - (agent_mem_read_string): Likewise. - * tracepoint.c (eval_tracepoint_agent_expr): Remove. - (add_traceframe_block): Add new argument TPOINT. - Increase TPOINT->traceframe_usage. - (do_action_at_tracepoint): Call gdb_eval_agent_expr instead of - eval_tracepoint_agent_expr. - (condition_true_at_tracepoint): Likewise. - (agent_mem_read): Remove argument TFRAME. Add argument CTX. - (agent_mem_read_string, agent_tsv_read): Likewise. - -2013-01-16 Yao Qi <yao@codesourcery.com> - - * linux-low.c (linux_resume_one_lwp): Don't check - 'lwp->bp_reinsert != 0'. - -2013-01-07 Joel Brobecker <brobecker@adacore.com> - Pedro Alves <palves@redhat.com> - - * lynx-low.c (ptrace_request_to_str): Define a temporary - macro and use it to simplify this function's implementation. - -2013-01-07 Joel Brobecker <brobecker@adacore.com> - - * lynx-low.c (lynx_resume): Call perror_with_name if lynx_ptrace - sets errno. - -2013-01-07 Joel Brobecker <brobecker@adacore.com> - - * configure.srv (i[34567]86-*-lynxos*): Set srv_xmlfiles. - -2013-01-07 Joel Brobecker <brobecker@adacore.com> - - * configure.srv (powerpc-*-lynxos*): Set srv_xmlfiles. - -2013-01-07 Joel Brobecker <brobecker@adacore.com> - - * lynx-low.c (lynx_resume): Use the resume_info parameter - to determine the ptid for the lynx_ptrace call, unless - it is equal to minus_one_ptid, in which case we use the - ptid of the current_inferior. - (lynx_wait_1): After having received a thread create/exit - event, resume the inferior's execution using the signaling - thread's ptid, rather than the old ptid. - -2013-01-07 Joel Brobecker <brobecker@adacore.com> - - * lynx-low.c (lynx_resume): Delete variable ret. - -2013-01-01 Joel Brobecker <brobecker@adacore.com> - - * gdbreplay.c (gdbreplay_version): Update copyright year. - * server.c (gdbserver_version): Likewise. - -2012-12-17 Joel Brobecker <brobecker@adacore.com> - - * lynx-low.c (lynx_wait_1): Add debug trace before adding - new thread. - -2012-12-17 Joel Brobecker <brobecker@adacore.com> - - * lynx-low.c (ptrace_request_to_str): Add handling for - PTRACE_GETTRACESIG. - -2012-12-17 Joel Brobecker <brobecker@adacore.com> - - * lynx-low.c (lynx_attach): Delete variable new_process. - -2012-12-17 Joel Brobecker <brobecker@adacore.com> - - * lynx-low.c (lynx_create_inferior): Delete variable - new_process. - -2012-12-17 Joel Brobecker <brobecker@adacore.com> - - * lynx-low.c (ptrace_request_to_str): Do not handle - PTRACE_GETTHREADLIST if this macro does not exist. - -2012-12-15 Yao Qi <yao@codesourcery.com> - - * Makefile.in (OBS): Add notif.o. - * notif.c, notif.h: New. - * server.c: Include "notif.h". - (struct vstop_notif) <next>: Remove. - <base>: New field. - (queue_stop_reply): Update. - (push_event, send_next_stop_reply): Remove. - (discard_queued_stop_replies): Update. - (notif_stop): New variable. - (handle_v_stopped): Remove. - (handle_v_requests): Don't call handle_v_stopped. Call - handle_ack_notif instead. - (queue_stop_reply_callback): Call notif_event_enque instead - of queue_stop_reply. - (handle_status): Don't call send_next_stop_reply, call - notif_write_event instead. - (kill_inferior_callback): Likewise. - (detach_or_kill_inferior_callback): Likewise. - (main): Call initialize_notif. - (process_serial_event): Call QUEUE_is_empty. - (handle_target_event): Call notif_push instead of push event. - * server.h (push_event): Remove declaration. - -2012-12-10 Tom Tromey <tromey@redhat.com> - - * Makefile.in (DEPMODE, DEPDIR, depcomp, COMPILE.pre) - (COMPILE.post, COMPILE, POSTCOMPILE, IPAGENT_COMPILE): New - macros. - (.c.o): Rewrite. - (ax-ipa.o, tracepoint-ipa.o, utils-ipa.o, format-ipa.o) - (common-utils-ipa.o, remote-utils-ipa.o, regcache-ipa.o) - (i386-linux-ipa.o, linux-i386-ipa.o, linux-amd64-ipa.o) - (amd64-linux-ipa.o, ax.o): Rewrite. - (event-loop.o, hostio.o, hostio-errno.o, inferiors.o, mem-break.o) - (proc-service.o, regcache.o, remote-utils.o, server.o, target.o) - (thread-db.o, tracepoint.o, utils.o, gdbreplay.o, dll.o): Remove. - (signals.o, linux-procfs.o, linux-ptrace.o, common-utils.o, vec.o) - (gdb_vecs.o, xml-utils.o, linux-osdata.o, ptid.o, buffer.o) - (format.o, agent.o, vasprintf.o, vsnprintf.o): Rewrite. - (i386-low.o, i387-fp.o, linux-low.o, linux-arm-low.o) - (linux-bfin-low.o, linux-cris-low.o, linux-crisv32-low.o) - (linux-ia64-low.o, linux-m32r-low.o, linux-mips-low.o) - (linux-ppc-low.o, linux-s390-low.o, linux-sh-low.o) - (linux-tic6x-low.o, linux-x86-low.o, linux-xtensa-low.o) - (linux-tile-low.o, lynx-low.o, lynx-ppc-low.o, nto-low.o) - (nto-x86-low.o, linux-low.o, win32-low.o, win32-arm-low.o) - (win32-i386-low.o, spu-low.o, reg-arm.o, arm-with-iwmmxt.o) - (arm-with-vfpv2.o, arm-with-vfpv3.o, arm-with-neon.o, reg-bfin.o) - (reg-cris.o, reg-crisv32.o, i386.o, i386-linux.o, i386-avx.o) - (i386-avx-linux.o, i386-mmx.o, i386-mmx-linux.o, reg-ia64.o) - (reg-m32r.o, reg-m68k.o, reg-cf.o, mips-linux.o, mips-dsp-linux.o) - (mips64-linux.o, mips64-dsp-linux.o, powerpc-32.o, powerpc-32l.o) - (powerpc-altivec32l.o, powerpc-cell32l.o, powerpc-vsx32l.o) - (powerpc-isa205-32l.o, powerpc-isa205-altivec32l.o) - (powerpc-isa205-vsx32l.o, powerpc-e500l.o, powerpc-64l.o) - (powerpc-altivec64l.o, powerpc-cell64l.o, powerpc-vsx64l.o) - (powerpc-isa205-64l.o, powerpc-isa205-altivec64l.o) - (powerpc-isa205-vsx64l.o, s390-linux32.o, s390-linux32v1.o) - (s390-linux32v2.o, s390-linux64.o, s390-linux64v1.o) - (s390-linux64v2.o, s390x-linux64.o, s390x-linux64v1.o) - (s390x-linux64v2.o, tic6x-c64xp-linux.o, tic6x-c64x-linux.o) - (tic6x-c62x-linux.o, reg-sh.o, reg-sparc64.o, reg-spu.o, amd64.o) - (amd64-linux.o, amd64-avx.o, amd64-avx-linux.o, x32.o) - (x32-linux.o, x32-avx.o, x32-avx-linux.o, reg-xtensa.o) - (reg-tilegx.o): Remove. - (all_object_files): New macro. - Include .deps files. - * aclocal.m4, configure: Rebuild. - * acinclude.m4: Include depstand.m4, lead-dot.m4. - * configure.ac: Invoke ZW_CREATE_DEPDIR, - ZW_PROG_COMPILER_DEPENDENCIES. Compute GMAKE condition. - -2012-12-05 Tom Tromey <tromey@redhat.com> - - PR gdb/14917: - * server.h (current_insn_ptr, emit_error): Declare 'extern'. - -2012-11-28 Markus Metzger <markus.t.metzger@intel.com> - - * configure.ac: Check for linux/perf_event.h. - * config.in: Regenerated. - * configure: Regenerated. - -2012-11-26 Maxime Villard <rustyBSD@gmx.fr> - - * hostio.c (handle_readlink): Decrease buffer size - parameter passed to readlink by one byte. - -2012-11-26 Yao Qi <yao@codesourcery.com> - - * configure.ac (build_warnings): Append '-Wempty-body'. - * configure: Regenerated. - * linux-low.c (linux_create_inferior): Use braces for empty 'if' - body. - -2012-11-15 Pierre Muller <muller@sourceware.org> - - * configure.ac (AC_CHECK_HEADERS): Add wait.h header. - * config.in: Regenerate. - * configure: Regenerate. - * linux-low.c: Use "gdb_stat.h" header instead of <sys/stat.h> header. - Use "gdb_wait.h" header instead of <sys/wait.h> header. - * lynx-low.c: Use "gdb_wait.h" header instead of <sys/wait.h> header. - * remote-utils.c: Use "gdb_stat.h" header instead of <sys/stat.h> - header. - * server.c: Remove HAVE_WAIT_H conditional. Use "gdb_wait.h" header - instead of <sys/wait.h> header. - * spu-low.c: Use "gdb_wait.h" header instead of <sys/wait.h> header. - -2012-11-13 Markus Metzger <markus.t.metzger@intel.com> - - * Makefile.in: (INTERNAL_CFLAGS): Add -DGDBSERVER - (various make rules): Remove -DGDBSERVER - -2012-11-09 Yao Qi <yao@codesourcery.com> - - * spu-low.c (current_ptid): Move it to .. - * gdbthread.h: ... here. New. - * remote-utils.c (read_ptid): Use macro 'current_ptid'. - * server.c (myresume, process_serial_event): Likewise. - * thread-db.c (thread_db_find_new_threads): Likewise. - * tracepoint.c (run_inferior_command): Likewise. - -2012-10-01 Andrew Burgess <aburgess@broadcom.com> - - * server.c (handle_search_memory_1): Include access length in - warning message. - -2012-09-05 Michael Brandt <michael.brandt@axis.com> - - * linux-crisv32-low.c: Fix compile errors. - -2012-09-04 Yao Qi <yao@codesourcery.com> - - * tracepoint.c (cmd_qtsv): Adjust debug message. - Don't check CUR_TPOINT. - -2012-08-28 Yao Qi <yao@codesourcery.com> - - * ax.c, tracepoint.c: Replace ATTR_FORMAT with ATTRIBUTE_PRINTF. - * server.h: Include 'libiberty.h' and 'ansidecl.h'. - (ATTR_NORETURN, ATTR_FORMAT, ATTR_MALLOC): Remove. - Remove declarations of xmalloc, xreallloc, xstrdup and - freeargv. - * Makefile.in (libiberty_h): New. - (server_h): Append dependencies 'libiberty.h' and 'ansidecl.h'. - (linux-bfin-low.o): Append dependency 'libiberty.h'. - -2012-08-23 Yao Qi <yao@codesourcery.com> - - * server.h: Remove declaration of 'xsnprintf'. - -2012-08-22 Keith Seitz <keiths@redhat.com> - - * server.h: Include build-gnulib-gbserver/config.h. - * gdbreplay.c: Likewise. - -2012-08-08 Doug Evans <dje@google.com> - - * Makefile.in (SFILES): Add gdb_vecs.c. - (OBS): Add gdb_vecs.o. - (gdb_vecs_h, host_defs_h): New variables. - (thread-db.o): Add $(gdb_vecs_h) dependency. - (gdb_vecs.o): New rule. - * thread-db.c: #include "gdb_vecs.h". - (thread_db_load_search): Use a vector to iterate over path elements. - Handle text appearing after "$pdir". - - * configure.ac: Add check for strstr. - * config.in: Regenerate. - * configure: Regenerate. - -2012-08-02 Ulrich Weigand <ulrich.weigand@linaro.org> - - * hostio.c (handle_pread): If pread fails, fall back to attempting - lseek/read. - (handle_pwrite): Likewise for pwrite. - -2012-08-01 Ulrich Weigand <ulrich.weigand@linaro.org> - - * linux-arm-low.c (arm_linux_hw_point_initialize): Distinguish - between unsupported TYPE and unimplementable ADDR/LEN combination. - (arm_insert_point): Act on new return value. - -2012-07-31 Pedro Alves <palves@redhat.com> - - * server.c (process_point_options): Only skip tokens if we find - one that is unrecognized. Don't treat 'X' specially while - skipping unrecognized tokens. - -2012-07-30 Ulrich Weigand <ulrich.weigand@linaro.org> - - * linux-arm-low.c (arm_linux_hw_point_initialize): Do not attempt - to 4-byte-align HW breakpoint addresses for Thumb. - -2012-07-27 Yao Qi <yao@codesourcery.com> - - PR remote/14161. - - * server.h: Declare gdb_agent_about_to_close. - * target.c (kill_inferior): Include "agent.h". - New. Send command 'kill'. - * target.h (kill_inferior): Removed macro. - * tracepoint.c (gdb_agent_about_to_close): New. - (gdb_agent_helper_thread): Handle command 'close'. - Wait endlessly until the inferior stops. - Install gdb_agent_remove_socket to atexit hook. - (agent_socket_name): New static variable. - (gdb_agent_socket_init): Replace local variable 'name' with - 'agent_socket_name'. - (gdb_agent_remove_socket): New. - -2012-07-27 Yao Qi <yao@codesourcery.com> - - * server.c (process_point_options): Stop at 'X' when parsing. - -2012-07-19 Michael Eager <eager@eagercon.com> - - * i386-low.c (Z_packet_to_hw_type): Add Z_PACKET_HW_BP, translate - to hw_execute. - * linux-x86-low.c (x86_insert_point, x86_remove_point): - Call i386_low_insert_watchpoint, i386_low_remove_watchpoint to add/del - hardware breakpoint. - -2012-07-07 Jan Kratochvil <jan.kratochvil@redhat.com> - - * gdbserver/linux-low.c (initialize_low): Call - linux_ptrace_init_warnings. - -2012-07-02 Doug Evans <dje@google.com> - - * mem-break.c (gdb_no_commands_at_breakpoint): Fix cast from - pointer to int. - -2012-07-02 Stan Shebs <stan@codesourcery.com> - - * Makefile.in (WARN_CFLAGS_NO_FORMAT): Define. - (ax.o): Add it to build rule. - (ax-ipa.o): Ditto. - (OBS): Add format.o. - (IPA_OBS): Add format.o. - * server.c (handle_query): Claim support for breakpoint commands. - (process_point_options): Add command case. - (process_serial_event): Leave running if there are printfs in - effect. - * mem-break.h (any_persistent_commands): Declare. - (add_breakpoint_commands): Declare. - (gdb_no_commands_at_breakpoint): Declare. - (run_breakpoint_commands): Declare. - * mem-break.c (struct point_command_list): New struct. - (struct breakpoint): New field command_list. - (any_persistent_commands): New function. - (add_commands_to_breakpoint): New function. - (add_breakpoint_commands): New function. - (gdb_no_commands_at_breakpoint): New function. - (run_breakpoint_commands): New function. - * linux-low.c (linux_wait_1): Test for and run breakpoint commands - locally. - * ax.c: Include format.h. - (ax_printf): New function. - (gdb_eval_agent_expr): Add printf opcode. - -2012-06-13 Yao Qi <yao@codesourcery.com> - - * server.c (start_inferior): Remove duplicated writes to fields - 'last_resume_kind' and 'last_status' of 'current_inferior'. - -2012-06-12 Yao Qi <yao@codesourcery.com> - Pedro Alves <palves@redhat.com> - - * linux-low.c (linux_set_resume_request): Simplify predicate. Add - comment. - * server.c (handle_v_cont): Extend comment. - -2012-06-11 Yao Qi <yao@codesourcery.com> - - * linux-low.c (linux_attach): Add 'static'. - -2012-06-06 Yao Qi <yao@codesourcery.com> - - * ax.c (gdb_eval_agent_expr): Print `top' in hex. - -2012-06-01 Jan Kratochvil <jan.kratochvil@redhat.com> - - Fix gcc -flto compilation warning. - * server.c (main): Make variable multi_mode and attach volatile. - -2012-05-30 Thiago Jung Bauermann <thiago.bauermann@linaro.org> - - * linux-low.c (get_r_debug): Disable code using DT_MIPS_RLD_MAP - if the platform doesn't know about it. - -2012-05-30 Jeff Kenton <jkenton@tilera.com> - - * Makefile.in (SFILES): Add linux-tile-low.c. - (linux-tile-low.o, reg-tilegx.o, reg-tilegx.c): New rules. - * configure.srv: Handle tilegx-*-linux*. - * linux-tile-low.c: New file. - -2012-05-28 Jan Kratochvil <jan.kratochvil@redhat.com> - - * linux-low.c (linux_qxfer_libraries_svr4): Return -1 if R_DEBUG is -1. - -2012-05-24 Pedro Alves <palves@redhat.com> - - PR gdb/7205 - - Replace TARGET_SIGNAL_ with GDB_SIGNAL_ throughout. - -2012-05-24 Pedro Alves <palves@redhat.com> - - PR gdb/7205 - - Replace target_signal with gdb_signal throughout. - -2012-05-22 Maciej W. Rozycki <macro@codesourcery.com> - - * linux-low.c (linux_store_registers): Avoid the copying sequence - when no data has been retrieved by ptrace. - -2012-05-22 Will Deacon <will.deacon@arm.com> - - * linux-low (__UCLIBC__ && !(__UCLIBC_HAS_MMU__ || __ARCH_HAS_MMU__)): - Include asm/ptrace.h. - (PT_TEXT_ADDR, PT_DATA_ADDR, PT_TEXT_END_ADDR): Define only if not - already defined. - -2012-05-21 Maciej W. Rozycki <macro@codesourcery.com> - - * linux-low.c (linux_store_registers): Don't re-retrieve data - with ptrace that has already been obtained from /proc. Always - copy any data retrieved with ptrace to the buffer supplied. - -2012-05-11 Yao Qi <yao@codesourcery.com> - Pedro Alves <palves@redhat.com> - - * linux-low.c (enum stopping_threads_kind): New. - (stopping_threads): Change type to `enum stopping_threads_kind'. - (handle_extended_wait): If stopping and suspending threads, leave - the new_lwp suspended too. - (linux_wait_for_event): Adjust. - (stop_all_lwps): Set `stopping_threads' to - STOPPING_AND_SUSPENDING_THREADS or STOPPING_THREADS depending on - whether we're suspending threads or just stopping them. Assert no - recursion happens. - -2012-04-29 Yao Qi <yao@codesourcery.com> - - * server.h: Move some code to ... - * gdbthread.h: ... here. New. - * Makefile.in (inferiors.o, regcache.o): Depends on gdbthread.h - (remote-utils.o, server.o, target.o tracepoint.o): Likewise. - (nto-low.o, win32-low.o): Likewise. - * inferiors.c, linux-low.h, nto-low.c: Include gdbthread.h. - * regcache.c, remote-utils.c, server.c: Likewise. - * target.c, tracepoint.c, win32-low.c: Likewise. - -2012-04-24 Thiago Jung Bauermann <thiago.bauermann@linaro.org> - - * linux-low.h (PTRACE_ARG3_TYPE): Move macro from linux-low.c. - (PTRACE_ARG4_TYPE): Likewise. - (PTRACE_XFER_TYPE): Likewise. - * linux-arm-low.c (arm_prepare_to_resume): Cast third argument of - ptrace to PTRACE_ARG3_TYPE. - * linux-low.c (PTRACE_ARG3_TYPE): Move macro to linux-low.h. - (PTRACE_ARG4_TYPE): Likewise. - (PTRACE_XFER_TYPE): Likewise. - (linux_detach_one_lwp): Cast fourth argument of - ptrace to long then PTRACE_ARG4_TYPE. - (regsets_fetch_inferior_registers): Cast third argument of - ptrace to long then PTRACE_ARG3_TYPE. - (regsets_store_inferior_registers): Likewise. - -2012-04-20 Pedro Alves <palves@redhat.com> - - * configure: Regenerate. - -2012-04-19 Pedro Alves <palves@redhat.com> - - * Makefile.in (GNULIB_BUILDDIR): New. - (LIBGNU, INCGNU, GNULIB_H): Adjust. - (SUBDIRS, CLEANDIRS, REQUIRED_SUBDIRS): New. - (all, install-only, uninstall, clean-info, all-lib, clean): No - longer pass GNULIB_FLAGS_TO_PASS. Use subdir_do. - (maintainer-clean realclean distclean): Use subdir_do. - (subdir_do): New. - (gnulib/import/Makefile): Adjust. Replace gnulib/import with - $(GNULIB_BUILDDIR). Don't pass argument to config.status. - * acinclude.m4: Include acx_configure_dir.m4. - * configure.ac: Remove gl_EARLY, gl_INIT, and AM_INIT_AUTOMAKE - calls. Call AC_PROG_RANLIB. Configure gnulib using - ACX_CONFIGURE_DIR. - (GNULIB): New. - (GNULIB_STDINT_H): Adjust. - (AC_OUTPUT): Don't output gnulib/Makefile anymore. - * gdbreplay.c: Include build-gnulib/config.h. - * server.h: Likewise. - * aclocal.m4: Regenerate. - * config.in: Regenerate. - * configure: Regenerate. - -2012-04-19 Pedro Alves <palves@redhat.com> - - * Makefile.in (LIBGNU, INCGNU): Adjust. - (GNULIB_FLAGS_TO_PASS, GNULIB_H): Adjust. - (all, install-only, uninstall, clean-info, all-lib, clean) - (maintainer-clean, Makefile, gnulib/Makefile): Adjust. - * configure.ac: Adjust AC_OUTPUT output. - * aclocal.m4: Regenerate. - * configure: Regenerate. - -2012-04-19 Pedro Alves <palves@redhat.com> - - * Makefile.in (generated_files): New. - (server_h): Remove the explicit dependency on config.h, and depend - on $generated_files. - -2012-04-19 Pedro Alves <palves@redhat.com> - - * Makefile.in (INCGNU): Add -Ignulib. - -2012-04-19 Pedro Alves <palves@redhat.com> - - * Makefile.in (GNULIB_INCLUDE_DIR): Rename to ... - (INCGNU): ... this, and spell out -I here. - (GNULIB_LIB): Rename to ... - (LIBGNU): ... this. - (INCLUDE_CFLAGS, gdbserver$(EXEEXT), $(GNULIB_LIB) rule): Adjust. - -2012-04-19 Pedro Alves <palves@redhat.com> - - * config.in: Regenerate. - -2012-04-19 Pedro Alves <palves@redhat.com> - - * configure.ac: Remove AC_CHECK_DECLS check for memmem. - * server.h (memmem): Remove declaration. - * config.in: Regenerate. - * configure: Regenerate. - -2012-04-19 Yao Qi <yao@codesourcery.com> - - * Makefile.in (SFILES): Add common/vec.c. - (OBS): Add vec.o. - (vec.o): New rule. - -2012-04-19 Yao Qi <yao@codesourcery.com> - - * remote-utils.c (prepare_resume_reply): Replace with macro - target_core_of_thread. - * server.c (handle_qxfer_threads_proper): Likewise. - * target.h (traget_core_of_thread): New macro. - -2012-04-18 Pedro Alves <palves@redhat.com> - - * aclocal.m4: Regenerate. - * configure: Regenerate. - -2012-04-16 Yao Qi <yao@codesourcery.com> - - * tracepoint.c (cmd_qtstart): Download tracepoints even when they are - duplicated on address. - -2012-04-16 Yao Qi <yao@codesourcery.com> - - * tracepoint.c (COPY_FIELD_TO_BUF): New macro. - (struct tracepoint_action_ops) <send>: New field. - (m_tracepoint_action_send, r_tracepoint_action_send): New. - (agent_expr_send, x_tracepoint_action_send): New. - (l_tracepoint_action_send): New. - (cmd_qtdp): Download and install tracepoint - according to `use_agent'. - (run_inferior_command): Add one more parameter `len'. - Update callers. - (tracepoint_send_agent): New. - (cmd_qtdp, cmd_qtstart): Call tracepoint_send_agent. - -2012-04-16 Yao Qi <yao@codesourcery.com> - - * tracepoint.c (download_tracepoints): Moved to ... - (cmd_qtstart): ... here. - -2012-04-14 Yao Qi <yao@codesourcery.com> - - * tracepoint.c: Include inttypes.h. - (struct collect_memory_action): Use sized types. - (struct tracepoint): Likewise. - (cmd_qtdp, stop_tracing): Update print specifiers. - (cmd_qtp, response_tracepoint): Likewise. - (collect_data_at_tracepoint): Likewise. - (collect_data_at_step): Likewise. - -2012-04-14 Yao Qi <yao@codesourcery.com> - - Import gnulib module inttypes. - * aclocal.m4, config.in, configure: Regenerated. - -2012-04-14 Yao Qi <yao@codesourcery.com> - - * Makefile.in (maintainer-clean, realclean, distclean): Remove - Makefile and config.status at last. - -2012-04-13 Yao Qi <yao@codesourcery.com> - - * tracepoint.c: Include stdint.h unconditionally. - -2012-04-13 Thiago Jung Bauermann <thiago.bauermann@linaro.org> - - * acinclude.m4 (GDBSERVER_HAVE_THREAD_DB_TYPE): New macro based - on BFD_HAVE_SYS_PROCFS_TYPE. - * configure.ac: Look for lwpid_t and psaddr_t in libthread_db.h. - * configure: Regenerate. - * config.in: Likewise. - -2012-04-13 H.J. Lu <hongjiu.lu@intel.com> - - * Makefile.in (clean): Also remove x32.c x32-linux.c - x32-avx.c x32-avx-linux.c. - (x32.o): New target. - (x32.c): Likewise. - (x32-linux.o): Likewise. - (x32-linux.c): Likewise. - (x32-avx.o): Likewise. - (x32-avx.c): Likewise. - (x32-avx-linux.o): Likewise. - (x32-avx-linux.c): Likewise. - - * configure.srv (srv_amd64_regobj): Add x32.o x32-avx.o. - (srv_amd64_linux_regobj): Add x32-linux.o x32-avx-linux.o. - (srv_i386_64bit_xmlfiles): Add i386/x32-core.xml. - (srv_amd64_xmlfiles): Add i386/x32.xml i386/x32-avx.xml. - (srv_amd64_linux_xmlfiles): Add i386/x32-linux.xml - i386/x32-avx-linux.xml. - - * linux-x86-low.c (init_registers_x32_linux): New prototype. - (init_registers_x32_avx_linux): Likwise. - (x86_linux_update_xmltarget): Call init_registers_x32_linux - or init_registers_x32_avx_linux if linux_is_elf64 is false. - -2012-04-13 Pedro Alves <palves@redhat.com> - - * Makefile.in (GNULIB_FLAGS_TO_PASS): New. - (FLAGS_TO_PASS): Don't change or set $top_srcdir, $srcdir and VPATH. - (all, uninstall, clean-info, all-lib, clean, maintainer-clean) - (realclean, distclean): Explicitly pass $GNULIB_FLAGS_TO_PASS to - the sub-make. - -2012-04-12 H.J. Lu <hongjiu.lu@intel.com> - - * linux-x86-low.c (compat_x32_clock_t): New. - (compat_x32_siginfo_t): Likewise. - (compat_x32_siginfo_from_siginfo): Likewise. - (siginfo_from_compat_x32_siginfo): Likewise. - (linux_is_elf64): Likewise. - (x86_siginfo_fixup): Call compat_x32_siginfo_from_siginfo - and siginfo_from_compat_x32_siginfo for x32. - (x86_arch_setup): Set linux_is_elf64. - -2012-04-12 H.J. Lu <hongjiu.lu@intel.com> - - PR gdb/13969 - * linux-low.c (linux_pid_exe_is_elf_64_file): Also return the - e_machine field. - (linux_qxfer_libraries_svr4): Update call to elf_64_file_p. - * linux-low.h (linux_pid_exe_is_elf_64_file): Updated. - * linux-x86-low.c (x86_arch_setup): Check if GDBserver is - compatible with process. - -2012-04-12 Yao Qi <yao@codesourcery.com> - - * Makefile.in: Define abs_top_srcdir and abs_srcdir. - (INCLUDE_CFLAGS): Append GNULIB_INCLUDE_DIR. - (install-only, install-info, clean): Handle sub dir gnulib. - (all-lib, am--refresh): New targets. - (memmem.o): Remove target. - * configure.ac: Remove AC_CONFIG_LIBOBJ_DIR. - Invoke gl_EARLY. Invoke AC_CHECK_PROGS for make. - (AC_REPLACE_FUNCS): Remove memmem. - Invoke gl_INIT and AM_INIT_AUTOMAKE. - (AC_OUTPUT): Generate Makefile in gnulib/. - * aclocal.m4, config.in, configure: Regenerated. - -2012-04-10 Maciej W. Rozycki <macro@codesourcery.com> - - * linux-low.c (get_r_debug): Handle DT_MIPS_RLD_MAP. - -2012-04-05 Pedro Alves <palves@redhat.com> - - -Werror=strict-aliasing - - * spu-low.c (parse_spufs_run): Avoid dereferencing type-punned - pointer. - -2012-04-04 Pedro Alves <palves@redhat.com> - - * linux-sparc-low.c (sparc_fill_gregset_to_stack) - (sparc_store_gregset_from_stack, sparc_store_gregset) - (sparc_breakpoint_at): Fix formatting. - -2012-03-30 Thiago Jung Bauermann <thiago.bauermann@linaro.org> - - * configure.ac: Check whether Elf32_auxv_t and Elf64_auxv_t - are available. - * linux-low.c [HAVE_ELF32_AUXV_T] (Elf32_auxv_t): Add typedef. - [HAVE_ELF64_AUXV_T] (Elf64_auxv_t): Likewise. - * config.in: Regenerate. - * configure: Likewise. - -2012-03-29 Pedro Alves <palves@redhat.com> - - * linux-low.c (regsets_store_inferior_registers) [__sparc__]: - Correct ptrace arguments. - -2012-03-28 Pedro Alves <palves@redhat.com> - - * linux-ia64-low.c (ia64_regmap): Map IA64_EC_REGNUM to PT_AR_EC. - (IA64_GR0_REGNUM, IA64_FR0_REGNUM) - (IA64_FR1_REGNUM): New defines. - (ia64_fetch_register): New. - (the_low_target): Install it. - * linux-low.h (struct linux_target_ops) <fetch_register>: New - field. - * linux-low.c (linux_fetch_registers): Try the - the_low_target.fetch_register hook first. - - * linux-arm-low.c (the_low_target): Adjust. - * linux-bfin-low.c (the_low_target): Adjust. - * linux-cris-low.c (the_low_target): Adjust. - * linux-crisv32-low.c (the_low_target): Adjust. - * linux-m32r-low.c (the_low_target): Adjust. - * linux-m68k-low.c (the_low_target): Adjust. - * linux-mips-low.c (the_low_target): Adjust. - * linux-ppc-low.c (the_low_target): Adjust. - * linux-s390-low.c (the_low_target): Adjust. - * linux-sh-low.c (the_low_target): Adjust. - * linux-sparc-low.c (the_low_target): Adjust. - * linux-tic6x-low.c (the_low_target): Adjust. - * linux-x86-low.c (the_low_target): Adjust. - * linux-xtensa-low.c (the_low_target): Adjust. - -2012-03-26 Pedro Alves <palves@redhat.com> - - * server.c (handle_qxfer_libraries): Don't bail early if - the_target->qxfer_libraries_svr4 is not NULL. - -2012-03-26 Pedro Alves <palves@redhat.com> - - * linux-low.c (linux_qxfer_libraries_svr4): Fix pasto in comment. - -2012-03-23 Pedro Alves <palves@redhat.com> - - * linux-low.c (linux_qxfer_libraries_svr4): Terminate the - "library-list-svr4" element's start tag when the the DSO list is - empty. - -2012-03-23 Pedro Alves <palves@redhat.com> - - * linux-low.c (read_one_ptr): Read the inferior's pointer through - a variable whose type size is the same as the inferior's pointer - size. - -2012-03-21 Thomas Schwinge <thomas@codesourcery.com> - - * linux-arm-low.c (arm_stopped_by_watchpoint): Use siginfo_t instead of - struct siginfo. - * linux-low.c (siginfo_fixup, linux_xfer_siginfo): Likewise. - * linux-x86-low.c (x86_siginfo_fixup): Likewise. - * linux-low.h: Include <signal.h>. - (struct siginfo): Remove forward declaration. - (struct linux_target_ops) <siginfo_fixup>: Use siginfo_t instead of - struct siginfo. - -2012-03-21 Mike Frysinger <vapier@gentoo.org> - - * .gitignore: Ignore more files. - -2012-03-19 Pedro Alves <palves@redhat.com> - Jan Kratochvil <jan.kratochvil@redhat.com> - - * server.c (cont_thread, general_thread): Add describing comments. - (start_inferior): Clear `cont_thread'. - (handle_v_cont): Don't set `cont_thread' if resuming all threads - of a process. - -2012-03-15 Yao Qi <yao@codesourcery.com> - - * tracepoint.c (install_tracepoint): Move duplicated tracepoint - handling to ... - (cmd_qtdp): ... here. - -2012-03-15 Yao Qi <yao@codesourcery.com> - - * tracepoint.c (struct tracepoint_action_ops): New. - (struct tracepoint_action) [!IN_PROCESS_AGENT] <ops>: New field. - (m_tracepoint_action_download): New. - (r_tracepoint_action_download): New. - (x_tracepoint_action_download): New. - (l_tracepoint_action_download): New. - (add_tracepoint_action): Install `action->ops' according type. - (download_tracepoint_1): Move code `download' function pointer - of various tracepoint_action_ops. - -2012-03-13 Jan Kratochvil <jan.kratochvil@redhat.com> - - * linux-low.c (linux_attach_lwp_1): New variable buffer. Call - linux_ptrace_attach_warnings. - -2012-03-13 Jan Kratochvil <jan.kratochvil@redhat.com> - - * Makefile.in (linux-ptrace.o): New. - * configure.srv (arm*-*-linux*, bfin-*-*linux*, crisv32-*-linux*) - (cris-*-linux*, i[34567]86-*-linux*, ia64-*-linux*, m32r*-*-linux*) - (m68*-*-linux*, m68*-*-uclinux*, mips*-*-linux*, powerpc*-*-linux*) - (s390*-*-linux*, sh*-*-linux*, sparc*-*-linux*, tic6x-*-uclinux) - (x86_64-*-linux*, xtensa*-*-linux*): Add linux-ptrace.o to SRV_TGTOBJ - of these targets. - * linux-low.c (linux_attach_lwp_1): Remove redundent else clause. - -2012-03-08 Yao Qi <yao@codesourcery.com> - Pedro Alves <palves@redhat.com> - - Fix PR server/13392. - * linux-x86-low.c (amd64_install_fast_tracepoint_jump_pad): Check - offset of JMP insn. - * tracepoint.c (remove_tracepoint): New. - (cmd_qtdp): Call remove_tracepoint when failed to install. - -2012-03-07 Pedro Alves <palves@redhat.com> - - * linux-low.c (get_detach_signal): New. - (linux_detach_one_lwp): Get rid of a pending SIGSTOP with SIGCONT. - Pass on pending signals to PTRACE_DETACH. Check the result of the - ptrace call. - * server.c (program_signals, program_signals_p): New. - (handle_general_set): Handle QProgramSignals. - * server.h (program_signals, program_signals_p): Declare. - -2012-03-05 Pedro Alves <palves@redhat.com> - Jan Kratochvil <jan.kratochvil@redhat.com> - - * linux-low.c (get_dynamic): Don't warn when PT_PHDR isn't found. - New comment why. - -2012-03-03 Yao Qi <yao@codesourcery.com> - - * tracepoint.c (tracepoint_look_up_symbols): Update call to - agent_look_up_symbols. - -2012-03-03 Yao Qi <yao@codesourcery.com> - - * Makefile.in (linux-low.o): Keep dependence on agent.h. - (linux-x86-low.o): Likewise. - * server.h: Remove in_process_agent_loaded. - * tracepoint.c (in_process_agent_loaded): Removed. Moved it - common/agent.c. - Update callers. - -2012-03-03 Yao Qi <yao@codesourcery.com> - - * tracepoint.c (gdb_agent_capability): New global. - (in_process_agent_loaded_ust): Renamed to - `in_process_agent_supports_ust'. - Update callers. - (in_process_agent_supports_ust): Call agent_capability_check. - (clear_installed_tracepoints): Assert that agent supports - agent. - -2012-03-03 Yao Qi <yao@codesourcery.com> - - * linux-low.c (linux_supports_agent): New. - (linux_target_ops): Initialize field `supports_agent' with - linux_supports_agent. - * target.h (struct target_ops) <supports_agent>: New. - (target_supports_agent): New macro. - * server.c (handle_general_set): Handle packet 'QAgent'. - (handle_query): Send `QAgent+'. - * Makefile.in (server.o): Depends on agent.h. - -2012-03-03 Yao Qi <yao@codesourcery.com> - - * Makefile.in (OBS): Add agent.o. - Add new rule for agent.o. - Track dependence of tracepoint.c on agent.h. - * tracepoint.c (run_inferior_command_1): - (run_inferior_command): Call agent_run_command. - (gdb_ust_connect_sync_socket): Deleted. Move it to - common/agent.c. - (resume_thread, stop_thread): Likewise. - (gdb_ust_socket_init): Renamed to ... - (gdb_agent_socket_init): ... New. - (gdb_ust_thread): Renamed to ... - (gdb_agent_helper_thread): ... New. - (gdb_ust_init): Move some code to ... - (gdb_agent_init): ... here. New. - [HAVE_UST]: Call gdb_ust_init. - (initialize_tracepoint_ftlib): Call gdb_agent_init. - * configure.ac: Add `sys/un.h' to AC_CHECK_HEADERS. - * config.in, configure: Regenerated. - -2012-03-02 Pedro Alves <palves@redhat.com> - - * inferiors.c (add_pid_to_list, pull_pid_from_list): Delete. - * linux-low.c (struct simple_pid_list): New. - (stopped_pids): New a struct simple_pid_list pointer. - (add_to_pid_list, pull_pid_from_list): New. - (handle_extended_wait): Don't assume the first signal new children - report is SIGSTOP. Adjust call to pull_pid_from_list. - (linux_wait_for_lwp): Adjust. - -2012-03-02 Yao Qi <yao@codesourcery.com> - - * tracepoint.c (do_action_at_tracepoint): Write `stop_pc' in - debug log. - -2012-03-02 Yao Qi <yao@codesourcery.com> - - * tracepoint.c (collect_ust_data_at_tracepoint): Remove parameters - `stop_pc' and `tpoint'. Update caller. - -2012-03-01 Maciej W. Rozycki <macro@codesourcery.com> - - * linux-low.h (linux_target_ops): Add regset_bitmap member. - * linux-low.c (use_linux_regsets): New macro. - [!HAVE_LINUX_REGSETS] (regsets_fetch_inferior_registers): Likewise. - [!HAVE_LINUX_REGSETS] (regsets_store_inferior_registers): Likewise. - (linux_register_in_regsets): New function. - (usr_fetch_inferior_registers): Skip registers covered by - regsets. - (usr_store_inferior_registers): Likewise. - (usr_fetch_inferior_registers): New macro. - (usr_store_inferior_registers): Likewise. - (linux_fetch_registers): Handle mixed regset/non-regset targets. - (linux_store_registers): Likewise. - * linux-mips-low.c (init_registers_mips_dsp_linux): New - prototype. - (init_registers_mips64_dsp_linux): Likewise. - (init_registers_mips_linux): New macro. - (init_registers_mips_dsp_linux): Likewise. - (mips_dsp_num_regs): Likewise. - (DSP_BASE, DSP_CONTROL): New fallback macros. - (mips_base_regs): New macro. - (mips_regmap): Use it. Fix the size. - (mips_dsp_regmap): New variable. - (mips_dsp_regset_bitmap): Likewise. - (mips_arch_setup): New function. - (mips_cannot_fetch_register): Use the_low_target.regmap rather - than mips_regmap. - (mips_cannot_store_register): Likewise. - (the_low_target): Update .arch_setup, .num_regs and .regmap - initializers. Add .regset_bitmap initializer. - * linux-arm-low.c (the_low_target): Add .regset_bitmap - initializer. - * linux-bfin-low.c (the_low_target): Likewise. - * linux-cris-low.c (the_low_target): Likewise. - * linux-crisv32-low.c (the_low_target): Likewise. - * linux-ia64-low.c (the_low_target): Likewise. - * linux-m32r-low.c (the_low_target): Likewise. - * linux-m68k-low.c (the_low_target): Likewise. - * linux-ppc-low.c (the_low_target): Likewise. - * linux-s390-low.c (the_low_target): Likewise. - * linux-sh-low.c (the_low_target): Likewise. - * linux-sparc-low.c (the_low_target): Likewise. - * linux-tic6x-low.c (the_low_target): Likewise. - * linux-x86-low.c (the_low_target): Likewise. - * linux-xtensa-low.c (the_low_target): Likewise. - * configure.srv <mips*-*-linux*>: Add mips-dsp-linux.o and - mips64-dsp-linux.o to srv_regobj. Add mips-dsp-linux.xml, - mips64-dsp-linux.xml, mips-dsp.xml and mips64-dsp.xml to - srv_xmlfiles. - * Makefile.in (mips-dsp-linux.o, mips-dsp-linux.c): New targets. - (mips64-dsp-linux.o, mips64-dsp-linux.c): Likewise. - -2012-02-29 Yao Qi <yao@codesourcery.com> - Pedro Alves <palves@redhat.com> - - * linux-low.c: (linux_wait_1): Call unsuspend_all_lwps when - `step_over_finished' is true. - -2012-02-27 Pedro Alves <palves@redhat.com> - - * linux-low.c (pid_is_stopped): Delete, moved to common/. - (linux_attach_lwp_1): Adjust to use linux_proc_pid_is_stopped. - -2012-02-27 Pedro Alves <palves@redhat.com> - - PR server/9684 - * linux-low.c (pid_is_stopped): New. - (linux_attach_lwp_1): Handle attaching to 'T (stopped)' processes. - -2012-02-25 Luis Machado <lgustavo@codesourcery.com> - - * mem-break.c (clear_gdb_breakpoint_conditions): Fix de-allocation - of conditions. - -2012-02-24 Maciej W. Rozycki <macro@codesourcery.com> - - * linux-mips-low.c (mips_regmap): Correct the index of $f9. - -2012-02-24 Luis Machado <lgustavo@codesourcery> - - * server.c (handle_query): Advertise support for target-side - breakpoint condition evaluation. - (process_point_options): New function. - (process_serial_event): When inserting a breakpoint, check for - a target-side condition that should be evaluated. - - * mem-break.c: Include regcache.h and ax.h. - (point_cond_list_t): New data structure. - (breakpoint) <cond_list>: New field. - (find_gdb_breakpoint_at): Make non-static. - (delete_gdb_breakpoint_at): Clear any target-side - conditions. - (clear_gdb_breakpoint_conditions): New function. - (add_condition_to_breakpoint): Likewise. - (add_breakpoint_condition): Likewise. - (gdb_condition_true_at_breakpoint): Likewise. - (gdb_breakpoint_here): Return result directly instead - of going through a local variable. - - * mem-break.h (find_gdb_breakpoint_at): New prototype. - (clear_gdb_breakpoint_conditions): Likewise. - (add_breakpoint_condition): Likewise. - (gdb_condition_true_at_breakpoint): Likewise. - - * linux-low.c (linux_wait_1): Evaluate target-side breakpoint condition. - (need_step_over_p): Take target-side breakpoint condition into - consideration. - -2012-02-24 Luis Machado <lgustavo@codesourcery> - - * server.h: Include tracepoint.h. - (agent_mem_read, agent_get_trace_state_variable_value, - agent_set_trace_state_variable_value, - agent_tsv_read, agent_mem_read_string, get_get_tsv_func_addr, - get_set_tsv_func_addr): New prototypes. - - * ax.h: New include file. - * ax.c: New source file. - - * tracepoint.c: Include ax.h. - (gdb_agent_op, gdb_agent_op_names, gdb_agent_op_sizes, - agent_expr, eval_result_type): Move to ax.h. - (parse_agent_expr): Rename to ... - (gdb_parse_agent_expr): ... this, make it non-static and move - to ax.h. - (unparse_agent_expr) Rename to ... - (gdb_unparse_agent_expr): ... this, make it non-static and move - to ax.h. - (eval_agent_expr): Rename to ... - (eval_tracepoint_agent_expr): ... this. - (agent_mem_read, agent_mem_read_string, agent_tsv_read): Remove - forward declarations. - (add_tracepoint_action): Call gdb_parse_agent_expr (...). - (agent_get_trace_state_variable_value): New function. - (agent_set_trace_state_variable_value): New function. - (cmd_qtdp): Call gdb_parse_agent_expr (...). - (response_tracepoint): Call gdb_unparse_agent_expr (...). - (do_action_at_tracepoint): Call eval_tracepoint_agent_expr (...). - (condition_true_at_tracepoint): Likewise. - (parse_agent_expr): Rename to ... - (gdb_parse_agent_expr): ... this and move to ax.c. - (unparse_agent_expr): Rename to ... - (gdb_unparse_agent_expr): ... this and move to ax.c. - (gdb_agent_op_name): Move to ax.c. - (eval_agent_expr): Rename to ... - (gdb_eval_agent_expr): ... this, use regcache passed as parameter - and move to ax.c. - (eval_tracepoint_agent_expr): New function. - (agent_mem_read, agent_mem_read_string, agent_tsv_read): Make - non-static. - (current_insn_ptr, emit_error, struct bytecode_address): Move to - ax.c. - (emit_prologue, emit_epilogue, emit_add, emit_sub, emit_mul, emit_lsh, - emit_rsh_signed, emit_rsh_unsigned, emit_ext, emit_log_not, - emit_bit_and, emit_bit_or, emit_bit_xor, emit_bit_not, emit_equal, - emit_less_signed, emit_less_unsigned, emit_ref, emit_if_goto, - emit_goto, write_goto_address, emit_const, emit_reg, emit_pop, - emit_stack, emit_zero_ext, emit_swap, emit_stack_adjust, - emit_int_call_1, emit_void_call_2, emit_eq_goto, emit_ne_goto, - emit_lt_goto, emit_ge_goto, emit_gt_goto, emit_le_goto): Move to ax.c. - (get_get_tsv_func_addr, get_set_tsv_func_addr): New functions. - (compile_bytecodes): Remove forward declaration. - (is_goto_target): Move to ax.c. - (compile_bytecodes): Move to ax.c and call - agent_get_trace_state_variable_value (...) and - agent_set_trace_state_variable_value (...). - - * Makefile.in: Update ax.c and IPA dependencies. - -2012-02-24 Pedro Alves <palves@redhat.com> - - * tracepoint.c (cmd_bigqtbuffer): Rename as ... - (cmd_bigqtbuffer_circular): ... this. Only handle - 'QTBuffer:circular:'. - (handle_tracepoint_general_set): Adjust. - -2012-02-16 Yao Qi <yao@codesourcery.com> - - * inferiors.c: Move code to ... - * dll.c: .... here. New. - * server.h: Declare clear_dlls. - * Makefile.in (SFILES): Add dll.c. - (OBS): Add dll.o - (dll.o): New rule. - -2012-02-11 Yao Qi <yao@codesourcery.com> - - * server.c: (handle_monitor_command): Add a new parameter - `own_buf'. - (handle_query): Update caller. - -2012-02-09 Joel Brobecker <brobecker@adacore.com> - - * configure.ac: Add readlink to AC_CHECK_FUNCS list. - * configure, config.in: Regenerate. - * hostio.c: Provide an alternate implementation if HAVE_READLINK - is not defined. - -2012-02-02 Pedro Alves <palves@redhat.com> - - Try SIGKILL first, then PTRACE_KILL. - * linux-low.c (linux_kill_one_lwp): New. - (linux_kill_one_lwp): Rename to ... - (kill_one_lwp_callback): ... this. Use the new - linux_kill_one_lwp. - -2012-02-02 Pedro Alves <palves@redhat.com> - - * tracepoint.c (cmd_qtminftpilen): Return 0 if there's no current - inferior. - -2012-01-27 Pedro Alves <palves@redhat.com> - - * linux-low.c (linux_child_pid_to_exec_file): Delete. - (elf_64_file_p): Make static. - (linux_pid_exe_is_elf_64_file): New. - * linux-low.h (linux_child_pid_to_exec_file, elf_64_file_p): - Delete declarations. - (linux_pid_exe_is_elf_64_file): Declare. - * linux-x86-low.c (x86_arch_setup): Use - linux_pid_exe_is_elf_64_file. - -2012-01-25 Jan Kratochvil <jan.kratochvil@redhat.com> - - * linux-low.c (linux_wait_for_event_1): Rename to ... - (linux_wait_for_event): ... here and merge it with former - linux_wait_for_event - new variable wait_ptid, use it. - (linux_wait_for_event): Remove - merge it to linux_wait_for_event_1. - -2012-01-23 Pedro Alves <palves@redhat.com> - - * server.c (main): Avoid yet another case of infinite loop while - detaching/killing after a longjmp. - -2012-01-20 Jan Kratochvil <jan.kratochvil@redhat.com> - - Code cleanup. - * linux-low.c (linux_wait_for_event_1): Use ptid_is_pid. - -2012-01-20 Ulrich Weigand <ulrich.weigand@linaro.org> - - * hostio.c (handle_readlink): New function. - (handle_vFile): Call it to handle "vFile:readlink" packets. - -2012-01-20 Pedro Alves <palves@redhat.com> - Ulrich Weigand <ulrich.weigand@linaro.org> - - * server.c (handle_v_requests): Only support vAttach and vRun to - start multiple processes when in extended protocol mode. - -2012-01-17 Pedro Alves <palves@redhat.com> - - * tracepoint.c (initialize_tracepoint): Use mmap instead of - memalign plus mprotect to allocate the scratch buffer. - -2012-01-13 Pedro Alves <palves@redhat.com> - - * server.c (attach_inferior): Clear `cont_thread'. - -2012-01-13 Pedro Alves <palves@redhat.com> - - * server.c (main): Avoid infinite loop while detaching/killing - after a longjmp. - -2012-01-09 Doug Evans <dje@google.com> - - * server.c (start_inferior): Set last_ptid in --wrapper case. - -2012-01-06 Yao Qi <yao@codesourcery.com> - - * tracepoint.c [IN_PROCESS_AGENT] (debug_threads): Macro - defined. - [IN_PROCESS_AGENT] (debug_agent): New global variable. - -2012-01-04 Yao Qi <yao@codesourcery.com> - - * tracepoint.c (cmd_qtdp): Print debug message - for static tracepoint. - -2012-01-04 Yao Qi <yao@codesourcery.com> - - * tracepoint.c (trace_vdebug): Differentiate debug message - between gdbserver and IPA. - -2012-01-03 Yao Qi <yao@codesourcery.com> - - * tracepoint.c (tracepoint_was_hit): Don't collect for - static tracepoint. - -2012-01-02 Joel Brobecker <brobecker@adacore.com> - - * terminal.h: Reformat copyright header. - -2012-01-02 Joel Brobecker <brobecker@adacore.com> - - * server.c (gdbserver_version): Update copyright year. - * gdbreplay.c (gdbreplay_version): Likewise. - -2011-12-18 Jan Kratochvil <jan.kratochvil@redhat.com> - - * linux-low.c (linux_create_inferior): Put empty if clause for write. - - Revert: - 2011-12-18 Hui Zhu <teawater@gmail.com> - * linux-low.c (linux_create_inferior): Save return value to ret. - -2011-12-18 Hui Zhu <teawater@gmail.com> - - * linux-low.c (linux_create_inferior): Save return value to ret. - -2011-12-16 Doug Evans <dje@google.com> - - * linux-low.c (linux_create_inferior): If stdio connection, - redirect stdin from /dev/null, stdout to stderr. - * remote-utils.c (remote_is_stdio): New static global. - (remote_connection_is_stdio): New function. - (remote_prepare): Handle stdio connection. - (remote_open): Ditto. - (remote_close): Don't close stdin for stdio connections. - (read_prim,write_prim): New functions. Replace all calls to - read/write to these. - * server.c (main): Watch for "-" argument. Move call to - remote_prepare before start_inferior. - * server.h (STDIO_CONNECTION_NAME): New macro. - (remote_connection_is_stdio): Declare. - - * remote-utils.c (prepare_resume_reply): Remove extraneous \n - in debugging output. - -2011-12-15 Yao Qi <yao@codesourcery.com> - - * tracepoint.c: Include sys/syscall.h. - (gdb_ust_thread): Remove preprocessor conditional. - -2011-12-14 Pedro Alves <pedro@codesourcery.com> - - * linux-low.c (linux_detach_one_lwp): Call - the_low_target.prepare_to_resume before detaching. - -2011-12-14 Yao Qi <yao@codesourcery.com> - - * tracepoint.c (gdb_ust_thread): Don't ignore return value - of write. - -2011-12-14 Yao Qi <yao@codesourcery.com> - - * i386-low.c (i386_low_stopped_data_address): Initialize local - variable `control'. - -2011-12-13 Pedro Alves <pedro@codesourcery.com> - - PR remote/13492 - - * i386-low.c (i386_low_stopped_data_address): Avoid fetching - DR_CONTROL unless necessary. Extend comments. - * linux-x86-low.c (x86_linux_prepare_to_resume): Don't write to - DR0-3 if not used. If any watchpoint was set, clear DR_STATUS. - -2011-12-13 Yao Qi <yao@codesourcery.com> - - * tracepoint.c (trace_buffer_alloc): Replace magic numbers with - macros. - (upload_fast_traceframes, upload_fast_traceframes): Likewise. - -2011-12-08 Jan Kratochvil <jan.kratochvil@redhat.com> - - * linux-low.c (linux_kill): Skip PTRACE_KILL if LWP does not exist. - Print new debug message for such case. - -2011-12-06 Jan Kratochvil <jan.kratochvil@redhat.com> - - Fix overlapping memcpy. - * mem-break.c (set_raw_breakpoint_at): New variable buf. Use it for - the read_inferior_memory transfer. - (delete_fast_tracepoint_jump): New variable buf. Use it for the - write_inferior_memory transfer. - (set_fast_tracepoint_jump): New variable buf. Use it for the - read_inferior_memory and write_inferior_memory transfers. - (uninsert_fast_tracepoint_jumps_at, reinsert_fast_tracepoint_jumps_at) - (delete_raw_breakpoint, uninsert_raw_breakpoint): New variable buf. - Use it for the write_inferior_memory transfer. - (check_mem_read, check_mem_write): New gdb_asserts for overlapping - buffers. - -2011-12-06 Maciej W. Rozycki <macro@codesourcery.com> - - * linux-low.c (fetch_register, store_register): Make code - consistent, fix formatting. - -2011-12-06 Maciej W. Rozycki <macro@codesourcery.com> - - * linux-low.c (usr_store_inferior_registers): Factor out code - to handle individual registers into... - (store_register): ... this new function. - -2011-12-06 Ulrich Weigand <uweigand@de.ibm.com> - - * Makefile.in (s390-linux32v1.o, s390-linux32v1.c): New rules. - (s390-linux32v2.o, s390-linux32v2.c): Likewise. - (s390-linux64v1.o, s390-linux64v1.c): Likewise. - (s390-linux64v2.o, s390-linux64v2.c): Likewise. - (s390x-linux64v1.o, s390x-linux64v1.c): Likewise. - (s390x-linux64v2.o, s390x-linux64v2.c): Likewise. - * configure.srv [s390*-*-linux*] (srv_regobj): Add new objects. - (srv_xmlfiles): Add new XML files. - - * linux-s390-low.c: Include "elf/common.h", <sys/ptrace.h>, - and <sys/uio.h>. - (PTRACE_GETREGSET, PTRACE_SETREGSET): Define if undefined. - (init_registers_s390_linux32v1): Add prototype. - (init_registers_s390_linux32v2): Likewise. - (init_registers_s390_linux64v1): Likewise. - (init_registers_s390_linux64v2): Likewise. - (init_registers_s390x_linux64v1): Likewise. - (init_registers_s390x_linux64v2): Likewise. - (s390_num_regs): Increment to 52. - (s390_regmap): Add orig_r2 register. - (s390_num_regs_3264): Increment to 68. - (s390_regmap_3264): Add orig_r2 register. - (s390_collect_ptrace_register): Handle orig_r2 register. - (s390_supply_ptrace_register): Likewise. - (s390_fill_last_break): New function. - (s390_store_last_break): Likewise. - (s390_fill_system_call): New function. - (s390_store_system_call): Likewise. - (target_regsets): Handle NT_S390_LAST_BREAK and NT_S390_SYSTEM_CALL - register sets. - (s390_check_regset): New function. - (s390_arch_setup): Check for presence of NT_S390_LAST_BREAK and - NT_S390_SYSTEM_CALL regsets and use appropriate description. - Update target_regsets for available register sets. - -2011-12-02 Paul Pluzhnikov <ppluzhnikov@google.com> - Jan Kratochvil <jan.kratochvil@redhat.com> - - * linux-low.c (get_phdr_phnum_from_proc_auxv, get_dynamic, get_r_debug) - (read_one_ptr, struct link_map_offsets, linux_qxfer_libraries_svr4): - New. - (struct linux_target_ops): Install linux_qxfer_libraries_svr4. - * linux-low.h (struct process_info_private): New member r_debug. - * server.c (handle_qxfer_libraries): Call - the_target->qxfer_libraries_svr4. - (handle_qxfer_libraries_svr4): New function. - (qxfer_packets): New entry "libraries-svr4". - (handle_query): Check QXFER_LIBRARIES_SVR4 and report libraries-svr4. - * target.h (struct target_ops): New member qxfer_libraries_svr4. - * remote.c (remote_xfer_partial): Call add_packet_config_cmd for - PACKET_qXfer_libraries_svr4. - -2011-11-30 Ulrich Weigand <uweigand@de.ibm.com> - - * linux-s390-low.c (s390_collect_ptrace_register): Fully convert - PSW address/mask between 8-byte and 16-byte formats. - (s390_supply_ptrace_register): Likewise. - (s390_get_pc, s390_set_pc): 4-byte PSW address always includes - basic addressing mode bit. - -2011-11-24 Stan Shebs <stan@codesourcery.com> - - * tracepoint.c (cmd_qtstatus): Use plongest instead of %llx. - -2011-11-17 Stan Shebs <stan@codesourcery.com> - - * tracepoint.c (struct tracepoint): New field traceframe_usage. - (tracing_start_time): New global. - (tracing_stop_time): New global. - (tracing_user_name): New global. - (tracing_notes): New global. - (tracing_stop_note): New global. - (cmd_qtstart): Set traceframe_usage, start_time. - (stop_tracing): Set stop_time. - (cmd_qtstatus): Report additional status. - (cmd_qtp): New function. - (handle_tracepoint_query): Call it. - (cmd_qtnotes): New function. - (handle_tracepoint_general_set): Call it. - (get_timestamp): Rename from tsv_get_timestamp. - -2011-11-14 Stan Shebs <stan@codesourcery.com> - Kwok Cheung Yeung <kcy@codesourcery.com> - - * linux-x86-low.c (small_jump_insn): New. - (i386_install_fast_tracepoint_jump_pad): Add arguments for - trampoline and error message, build a trampoline and issue a small - jump instruction to it. - (x86_install_fast_tracepoint_jump_pad): Add arguments for - trampoline and error message. - (x86_get_min_fast_tracepoint_insn_len): New. - (the_low_target): Add call to x86_get_min_fast_tracepoint_insn_len. - * linux-low.h (struct linux_target_ops): Add arguments to - install_fast_tracepoint_jump_pad operation, add new operation. - * linux-low.c (linux_install_fast_tracepoint_jump_pad): Add - arguments. - (linux_get_min_fast_tracepoint_insn_len): New function. - (linux_target_op): Add new operation. - * tracepoint.c (gdb_trampoline_buffer): New IPA variable. - (gdb_trampoline_buffer_end): Ditto. - (gdb_trampoline_buffer_error): Ditto. - (struct ipa_sym_addresses): Add fields for new IPA variables. - (symbol_list): Add entries for new IPA variables. - (struct tracepoint): Add fields to hold the address range of the - trampoline used by the tracepoint. - (trampoline_buffer_head): New static variable. - (trampoline_buffer_tail): Ditto. - (claim_trampoline_space): New function. - (have_fast_tracepoint_trampoline_buffer): New function. - (clone_fast_tracepoint): Fill in trampoline fields of tracepoint - structure. - (install_fast_tracepoint): Ditto, also add error buffer argument. - (cmd_qtminftpilen): New function. - (handle_tracepoint_query): Add response to qTMinFTPILen packet. - (fast_tracepoint_from_trampoline_address): New function. - (fast_tracepoint_collecting): Handle trampoline as part of jump - pad space. - (set_trampoline_buffer_space): New function. - (initialize_tracepoint): Initialize new IPA variables. - * target.h (struct target_ops): Add arguments to - install_fast_tracepoint_jump_pad operation, add new - get_min_fast_tracepoint_insn_len operation. - (target_get_min_fast_tracepoint_insn_len): New. - (install_fast_tracepoint_jump_pad): Add arguments. - * server.h (IPA_BUFSIZ): Define. - * linux-i386-ipa.c: Include extra header files. - (initialize_fast_tracepoint_trampoline_buffer): New function. - (initialize_low_tracepoint): Call it. - * server.h (set_trampoline_buffer_space): Declare. - (claim_trampoline_space): Ditto. - (have_fast_tracepoint_trampoline_buffer): Ditto. - -2011-11-14 Yao Qi <yao@codesourcery.com> - - * server.c (handle_query): Handle InstallInTrace for qSupported. - * tracepoint.c (add_tracepoint): Sort list. - (install_tracepoint, download_tracepoint): New. - (cmd_qtdp): Call them to install and download tracepoints. - (sort_tracepoints): Removed. - (cmd_qtstart): Update. - -2011-11-14 Yao Qi <yao@codesourcery.com> - - * mem-break.c (inc_ref_fast_tracepoint_jump): New. - * mem-break.h: Declare. - * tracepoint.c (cmd_qtstart): Move some code to ... - (clone_fast_tracepoint, install_fast_tracepoint): ... here. - New. - (download_tracepoints): Move some code to ... - (download_tracepoint_1): ... here. New. - -2011-11-08 Yao Qi <yao@codesourcery.com> - - * remote-utils.c (relocate_instruction): A comment fix. - -2011-11-07 Joel Brobecker <brobecker@adacore.com> - - * win32-i386-low.c (dr_status_mirror, dr_control_mirror): Delete. - (i386_dr_low_get_control, i386_dr_low_get_status): Use - dr_status_mirror and dr_control_mirror from debug_reg_state. - (i386_dr_low_get_status): Use debug_reg_state.dr_status_mirror - (i386_initial_stuff): Remove use of deleted globals. - (i386_get_thread_context, i386_set_thread_context, - i386_thread_added): Use dr_status_mirror and dr_control_mirror - from debug_reg_state. - -2011-11-05 Yao Qi <yao@codesourcery.com> - - * tracepoint.c (gdb_collect): Loop over tracepoints of same - address as TPOINT's. - -2011-11-02 Stan Shebs <stan@codesourcery.com> - - * tracepoint.c (agent_mem_read_string): New function. - (eval_agent_expr): Call it for tracenz. - * server.c (handle_query): Report support for tracenz. - -2011-11-02 Yao Qi <yao@codesourcery.com> - - * tracepoint.c (cmd_qtstart): Remove unused local variables. - -2011-11-02 Yao Qi <yao@codesourcery.com> - - * target.h: Fix a typo in comment. - -2011-10-31 Pedro Alves <pedro@codesourcery.com> - - * mem-break.c (check_mem_write): Add `myaddr' parameter. Don't - clobber the breakpoints' shadows with fast tracepoint jumps. - * mem-break.h (check_mem_write): Add `myaddr' parameter. - * target.c (write_inferior_memory): Also pass MYADDR down to - check_mem_write. - -2011-10-07 Ulrich Weigand <ulrich.weigand@linaro.org> - - * configure.ac: Check support for personality routine. - * configure: Regenerate. - * config.in: Likewise. - * linux-low.c: Include <sys/personality.h>. - Define ADDR_NO_RANDOMIZE if necessary. - (linux_create_inferior): Disable address space randomization when - forking inferior, if requested. - (linux_supports_disable_randomization): New function. - (linux_target_ops): Install it. - * server.h (disable_randomization): Declare. - * server.c (disable_randomization): New global variable. - (handle_general_set): Handle QDisableRandomization. - (handle_query): Likewise for qSupported. - (main): Support --disable-randomization and --no-disable-randomization - command line arguments. - * target.h (struct target_ops): Add supports_disable_randomization. - (target_supports_disable_randomization): New macro. - -2011-09-29 Mike Frysinger <vapier@gentoo.org> - - * linux-low.c (target_loadseg): Add defined PTRACE_GETFDPIC to the - ifdef check. - [PT_GETDSBT] (target_loadmap): Wrap in a defined PT_GETDSBT check. - [!PT_GETDSBT] (target_loadmap): New definition. - (LINUX_LOADMAP, LINUX_LOADMAP_EXEC, LINUX_LOADMAP_INTERP): Define. - (linux_read_loadmap): Change PTRACE_GETDSBT_EXEC to - LINUX_LOADMAP_EXEC, PTRACE_GETDSBT_INTERP to LINUX_LOADMAP_INTERP, - and PT_GETDSBT to LINUX_LOADMAP. - [!PT_GETDSBT] (linux_read_loadmap): Define to NULL. - (linux_target_ops): Delete unnecessary ifdef PT_GETDSBT check. - -2011-09-21 Ulrich Weigand <ulrich.weigand@linaro.org> - - * linux-arm-low.c (struct arm_linux_hwbp_cap): Remove. - (arm_linux_hwbp_cap): New static variable. - (arm_linux_get_hwbp_cap): Replace by ... - (arm_linux_init_hwbp_cap): ... this new function. - (arm_linux_get_hw_breakpoint_count): Use arm_linux_hwbp_cap. - (arm_linux_get_hw_watchpoint_count): Likewise. - (arm_linux_get_hw_watchpoint_max_length): Likewise. - (arm_arch_setup): Call arm_linux_init_hwbp_cap. - (arm_prepare_to_resume): Use perror_with_name instead of error. - -2011-09-21 Ulrich Weigand <ulrich.weigand@linaro.org> - - * linux-arm-low.c: Include <signal.h>. - (PTRACE_GETHBPREGS, PTRACE_SETHBPREGS): Define if necessary. - (struct arm_linux_hwbp_cap): New data type. - (arm_hwbp_type, arm_hwbp_control_t): New typedefs. - (struct arm_linux_hw_breakpoint): New data type. - (MAX_BPTS, MAX_WPTS): Define. - (struct arch_process_info, struct arch_lwp_info): New data types. - (arm_linux_get_hwbp_cap): New function. - (arm_linux_get_hw_breakpoint_count): Likewise. - (arm_linux_get_hw_watchpoint_count): Likewise. - (arm_linux_get_hw_watchpoint_max_length): Likewise. - (arm_hwbp_control_initialize): Likewise. - (arm_hwbp_control_is_enabled): Likewise. - (arm_hwbp_control_is_initialized): Likewise. - (arm_hwbp_control_disable): Likewise. - (arm_linux_hw_breakpoint_equal): Likewise. - (arm_linux_hw_point_initialize): Likewise. - (struct update_registers_data): New data structure. - (update_registers_callback: New function. - (arm_insert_point): Likewise. - (arm_remove_point): Likewise. - (arm_stopped_by_watchpoint): Likewise. - (arm_stopped_data_address): Likewise. - (arm_new_process): Likewise. - (arm_new_thread): Likewise. - (arm_prepare_to_resume): Likewise. - (the_low_target): Register arm_insert_point, arm_remove_point, - arm_stopped_by_watchpoint, arm_stopped_data_address, arm_new_process, - arm_new_thread, and arm_prepare_to_resume. - -2011-09-15 Stan Shebs <stan@codesourcery.com> - - * server.h (struct emit_ops): Add compare-goto fields. - * tracepoint.c (gdb_agent_op_sizes): New table. - (emit_eq_goto): New function. - (emit_ne_goto): New function. - (emit_lt_goto): New function. - (emit_le_goto): New function. - (emit_gt_goto): New function. - (emit_ge_goto): New function. - (is_goto_target): New function. - (compile_bytecodes): Recognize special cases of compare-goto - combinations and call specialized emitters for them. - * linux-x86-low.c (amd64_emit_eq_goto): New function. - (amd64_emit_ne_goto): New function. - (amd64_emit_lt_goto): New function. - (amd64_emit_le_goto): New function. - (amd64_emit_gt_goto): New function. - (amd64_emit_ge_goto): New function. - (amd64_emit_ops): Add the new functions. - (i386_emit_eq_goto): New function. - (i386_emit_ne_goto): New function. - (i386_emit_lt_goto): New function. - (i386_emit_le_goto): New function. - (i386_emit_gt_goto): New function. - (i386_emit_ge_goto): New function. - (i386_emit_ops): Add the new functions. - -2011-09-08 Stan Shebs <stan@codesourcery.com> - - * linux-x86-low.c (i386_emit_prologue): Save %ebx. - (i386_emit_epilogue): Restore %ebx. - -2011-08-31 Jie Zhang <jzhang918@gmail.com> - - * server.c (step_thread): Remove definition. - (process_serial_event): Don't handle Hs. - * server.h (step_thread): Remove declaration. - * target.c (set_desired_inferior): Remove use of step_thread. - -2011-08-24 Luis Machado <lgustavo@codesourcery.com> - - * linux-low.c: Include linux-procfs.h. - (linux_attach_lwp_1): Update comments. - (linux_attach): Scan for existing threads when attaching to a - process that is the tgid. - * Makefile.in: Update dependencies. - -2011-08-24 Luis Machado <lgustavo@codesourcery.com> - - * configure.srv: Add linux-procfs.o dependencies. - -2011-08-14 Yao Qi <yao@codesourcery.com> - - * target.h (struct target_ops): Fix indent. - * win32-low.c (win32_target_ops): Fix comment. - -2011-08-14 Andrew Jenner <andrew@codesourcery.com> - Yao Qi <yao@codesourcery.com> - - * Makefile.in (clean): Remove tic6x-*.c files. - (linux-tic6x-low.o, tic6x-c62x-linux.o, tic6x-c64x-linux.o): New rules. - (tic6x-c64xp-linux.o, tic6x-c62x-linux.c, tic6x-c64x-linux.c): Likewise. - (tic6x-c64xp-linux.c): Likewise. - * configure.srv: Add support for tic6x-*-uclinux. - * linux-tic6x-low.c: New. - * linux-low.c (PT_TEXT_ADDR, PT_DATA_ADDR, PT_TEXT_END_ADDR): Define. - -2011-08-14 Andrew Stubbs <ams@codesourcery.com> - Yao Qi <yao@codesourcery.com> - - * target.h (struct target_ops): Add read_loadmap. - * linux-low.c (struct target_loadseg): New type. - (struct target_loadmap): New type. - (linux_read_loadmap): New function. - (linux_target_ops): Add linux_read_loadmap. - * server.c (handle_query): Support qXfer:fdpic:read packet. - * win32-low.c (win32_target_ops): Initialize field `read_loadmap' - to NULL. - -2011-08-05 Eli Zaretskii <eliz@gnu.org> - - * win32-low.c: Include <stdint.h>. - -2011-07-22 Pedro Alves <pedro@codesourcery.com> - - * i386-low.c (i386_insert_aligned_watchpoint): Don't pass the info - to the inferior here. - (i386_remove_aligned_watchpoint): Ditto. - (i386_handle_nonaligned_watchpoint): Return immediate on fail to - fit part of the watchpoint in the debug registers. - (i386_update_inferior_debug_regs): New. - (i386_low_insert_watchpoint): Work on a local mirror of the debug - registers, and only update the inferior on success. - (i386_low_remove_watchpoint): Ditto. - -2011-07-22 Kwok Cheung Yeung <kcy@codesourcery.com> - - * linux-low.c (compare_ints, unique, list_threads, show_process, - linux_core_of_thread): Delete. - (linux_target_ops): Change linux_core_of_thread to - linux_common_core_of_thread. - (linux_qxfer_osdata): Defer to linux_common_xfer_osdata. - * utils.c (malloc_failure): Change type of argument. - (xmalloc, xrealloc, xcalloc, xsnprintf): Delete. - * Makefile.in (SFILES): Add common/common-utils.c, common/xml-utils.c, - common/linux-osdata.c, common/ptid.c and common/buffer.c. - (OBS): Add xml-utils.o, common-utils.o, ptid.o and buffer.o. - (IPA_OBJS): Add common-utils-ipa.o. - (ptid_h, linux_osdata_h): New macros. - (server_h): Add common/common-utils.h, common/xml-utils.h, - common/buffer.h, common/gdb_assert.h, common/gdb_locale.h and - common/ptid.h. - (common-utils-ipa.o, common-utils.o, xml-utils.o, linux-osdata.o, - ptid.o, buffer.o): New rules. - (linux-low.o): Add common/linux-osdata.h as a dependency. - * configure.srv (srv_tgtobj): Add linux-osdata.o to Linux targets. - * configure.ac: Add AC_HEADER_DIRENT check. - * config.in: Regenerate. - * configure: Regenerate. - * remote-utils.c (xml_escape_text): Delete. - (buffer_grow, buffer_free, buffer_init, buffer_finish, - buffer_xml_printf): Move to common/buffer.c. - * server.c (main): Remove call to initialize_inferiors. - * server.h (struct ptid, ptid_t, minus_one_ptid, null_ptid, - ptid_build, pid_to_ptid, ptid_get_pid, ptid_get_lwp, ptid_get_tid, - ptid_equal, ptid_is_pid, initialize_inferiors, xml_escape_text, - internal_error, gdb_assert, gdb_assert_fail): Delete. - (struct buffer, buffer_grow, buffer_free, buffer_init, buffer_finish, - buffer_xml_printf, buffer_grow_str, buffer_grow_str0): Move to - common/buffer.h. - * inferiors.c (null_ptid, minus_one_ptid, ptid_build, pid_to_ptid, - ptid_get_pid, ptid_get_lwp, ptid_get_tid, ptid_equal, ptid_is_pid, - initialize_inferiors): Delete. - -2011-07-20 Pedro Alves <pedro@codesourcery.com> - - * tracepoint.c (tracepoint_look_up_symbols): Return upon the first - symbol error. - -2011-05-31 Pedro Alves <pedro@codesourcery.com> - - * linux-x86-low.c (i386_dr_low_get_addr): Fix off by one in - assertion. - * win32-i386-low.c (i386_dr_low_get_addr): Ditto. - -2011-05-26 Yao Qi <yao@codesourcery.com> - - * Makefile.in (thread-db.o): Track dependence to - common/gdb_thread_db.h. - * thread-db.c: include gdb_thread_db.h from right place. - -2011-05-16 Adrian Cornish <gnu@bluedreamer.com> - - * linux-i386-ipa.c (supply_static_tracepoint_registers): Pass - __FILE__ and __LINE__ to internal_error. - -2011-05-13 Doug Evans <dje@google.com> - - * thread-db.c (try_thread_db_load_from_sdir): New function. - (try_thread_db_load_from_dir): New function. - (thread_db_load_search): Handle $sdir, ignore $pdir. - Remove trying of system directories if search of - libthread-db-search-path fails, that is now done via $sdir. - -2011-05-12 Kwok Cheung Yeung <kcy@codesourcery.com> - - * server.c (handle_query): Add EnableDisableTracepoints to the list - of supported features. - * tracepoint.c (clear_installed_tracepoints): Uninstall disabled - tracepoints. - (cmd_qtenable_disable): New. - (cmd_qtstart): Install tracepoints even if disabled. - (handle_tracepoint_general_set): Add call to cmd_qtenable_disable on - receiving a QTEnable or QTDisable packet. - (gdb_collect): Skip data collection if fast tracepoint is disabled. - (ust_marker_to_static_tracepoint): Do not ignore disabled static - tracepoints. - (gdb_probe): Skip data collection if static tracepoint is disabled. - -2011-05-10 Doug Evans <dje@google.com> - - * thread-db.c (thread_db_handle_monitor_command): Handle elided path. - -2011-05-04 Doug Evans <dje@google.com> - - * linux-low.c (linux_join): Skip process lookup. - * spu-low.c (spu_join): Ditto. - * server.c (join_inferiors_callback): Delete. - (process_serial_event): For 'D' packet (detach) call join_inferior - directly. - -2011-05-04 Joseph Myers <joseph@codesourcery.com> - - * README: Don't mention xscale*-*-linux*. - * configure.srv (xscale*-*-linux*): Don't handle target. - -2011-04-27 Nathan Froyd <froydnj@codesourcery.com> - - * linux-x86-low.c (amd64_emit_const): Call memcpy instead of - casting pointers. - (amd64_emit_reg, amd64_emit_int_call_1, amd64_emit_void_call_2): - (i386_emit_const, i386_emit_reg, i386_emit_int_call_1): - (i386_emit_void_call_2): Likewise. - -2011-04-26 Yao Qi <yao@codesourcery.com> - - * linux-low.c: Move common macros to linux-ptrace.h. - Include linux-ptrace.h. - * Makefile.in (linux_ptrace_h): New. - (linux-low.o): Depends on linux-ptrace.h. - -2011-04-24 Jan Kratochvil <jan.kratochvil@redhat.com> - - * remote-utils.c (handle_accept_event): Close LISTEN_DESC only if - RUN_ONCE. Comment for the LISTEN_DESC delete_file_handler call. - (remote_prepare): New function with most of the TCP code from ... - (remote_open): ... here. Detect PORT here unconditionally. Move also - setting transport_is_reliable. - * server.c (run_once): New variable. - (gdbserver_usage): Document it. - (main): Set run_once for `--once'. Call remote_prepare. Exit after - the first run if RUN_ONCE. - * server.h (run_once, remote_prepare): New declarations. - -2011-04-19 Tom Tromey <tromey@redhat.com> - - * win32-low.c (handle_load_dll): Remove duplicate "the". - -2011-04-07 Pierre Muller <muller@ics.u-strasbg.fr> - - Remove support for old Cygwin 1.5 versions. - * win32-low.c (win32_create_inferior): Use new cygwin_path_list - function to avoid warning. - (win32_add_one_solib): Use cygwin_conv_path function to avoid - warning. - -2011-03-18 Pierre Muller <muller@ics.u-strasbg.fr> - - * gdbserver/server.h (Macro _): Define it if not available. - -2011-03-14 Michael Snyder <msnyder@vmware.com> - - * hostio.c (handle_close): Remove unnecessary null test. - -2011-03-10 Joel Brobecker <brobecker@adacore.com> - - * Makefile.in (maintainer-clean realclean distclean): Remove - "make ... subdir_do" command. - -2011-03-10 Michael Snyder <msnyder@vmware.com> - - * tracepoint.c (tracepoint_finish_step): Fix loop variable. - - * server.c (handle_v_run): Free alloced buffer on early return. - -2011-03-09 Yao Qi <yao@codesourcery.com> - - Revert: - 2011-03-04 Yao Qi <yao@codesourcery.com> - - * Makefile.in: Remove GNU make feature --directory. - - 2011-03-05 Yao Qi <yao@codesourcery.com> - - * Makefile.in (CLEANDIRS, REQUIRED_SUBDIRS): New variable. - (subdir_do): New make target. Copied from gdb/Makefile. - (maintainer-clean, realclean, distclean, clean): Call corresponding - make targets in common/Makefile. - - 2011-02-11 Yao Qi <yao@codesourcery.com> - - * configure.ac: Call AC_PROG_RANLIB. - * Makefile.in: Remove signals.o from OBS. Link libcommon.a. - * configure: Regenerate. - -2011-03-07 Jan Kratochvil <jan.kratochvil@redhat.com> - - * remote-utils.c (putpkt_binary_1): Calculate BUF2 size dynamically. - -2011-03-06 Yao Qi <yao@codesourcery.com> - - * Makefile.in (REQUIRED_SUBDIRS): Remove $(LIBCOMMON_DIR). - -2011-03-05 Yao Qi <yao@codesourcery.com> - - * Makefile.in (CLEANDIRS, REQUIRED_SUBDIRS): New variable. - (subdir_do): New make target. Copied from gdb/Makefile. - (maintainer-clean, realclean, distclean, clean): Call corresponding - make targets in common/Makefile. - -2011-03-04 Yao Qi <yao@codesourcery.com> - - * Makefile.in: Remove GNU make feature --directory. - -2011-03-04 Michael Snyder <msnyder@vmware.com> - - * server.c (queue_stop_reply): Call xmalloc not malloc. - -2011-03-02 Michael Snyder <msnyder@vmware.com> - - * linux-arm-low.c (arm_arch_setup): Replace malloc with xmalloc. - -2011-02-28 Michael Snyder <msnyder@vmware.com> - - * tracepoint.c (cmd_qtv): Discard unused value 'packet'. - (cmd_qtframe): Ditto. - (cmd_qtbuffer): Ditto. - (cmd_bigqtbuffer): Ditto. - - * utils.c (decimal2str): Initialize 'width' to nine, then - don't mess with it. - -2011-02-28 Ulrich Weigand <uweigand@de.ibm.com> - - * hostio.c (require_data): Free *data, not data. - -2011-02-28 Jan Kratochvil <jan.kratochvil@redhat.com> - - * hostio.c (require_data): Use free, not xfree. - -2011-02-27 Michael Snyder <msnyder@vmware.com> - - * server.c (handle_query): Discard unused value. - - * hostio.c (require_data): Free malloc memory before returning - error. - -2011-02-26 Michael Snyder <msnyder@vmware.com> - - * linux-low.c (list_threads): Call closedir for dirent. - -2011-02-27 Michael Snyder <msnyder@vmware.com> - - * i386-low.c (i386-length_and_rw_bits): Comment the fact that - a case statement falls through. - - * linux-low.c (linux_xfer_siginfo): Fix fencepost error. - - * linux-amd64-ipa.c (gdb_agent_get_raw_reg): Fix fencepost error - in comparison. - -2011-02-26 Michael Snyder <msnyder@vmware.com> - - * utils.c (decimal2str): Eliminate dead code and dead param. - (pulongest): Drop dead param from call to decimal2str. - (plongest): Ditto. - -2011-02-24 Joel Brobecker <brobecker@adacore.com> - - Revert the following patch (not approved yet): - 2011-02-21 Hui Zhu <teawater@gmail.com> - * tracepoint.c (tp_printf): New function. - (eval_agent_expr): Handle gdb_agent_op_printf. - -2011-02-21 Hui Zhu <teawater@gmail.com> - - * tracepoint.c (tp_printf): New function. - (eval_agent_expr): Handle gdb_agent_op_printf. - -2011-02-18 Tom Tromey <tromey@redhat.com> - - * Makefile.in (tracepoint-ipa.o): Depend on ax.def. - (tracepoint.o): Likewise. - * tracepoint.c (enum gdb_agent_op): Use ax.def. - (gdb_agent_op_names): Likewise. - -2011-02-18 Tom Tromey <tromey@redhat.com> - - * tracepoint.c (enum gdb_agent_op) <gdb_agent_op_pick, - gdb_agent_op_rot>: New constants. - (gdb_agent_op_names): Add pick and roll. - (eval_agent_expr) <gdb_agent_op_pick, gdb_agent_op_rot>: New - cases. - -2011-02-15 Jan Kratochvil <jan.kratochvil@redhat.com> - - * aclocal.m4: Regenerated with aclocal-1.11.1. - -2011-02-14 Pedro Alves <pedro@codesourcery.com> - - * server.c (handle_qxfer_traceframe_info): New. - (qxfer_packets): Register "traceframe-info". - (handle_query): Report support for qXfer:traceframe-info:read+. - * tracepoint.c (match_blocktype): New. - (traceframe_find_block_type): Rename to ... - (traceframe_walk_blocks): ... this. Add callback filter argument, - and use it. - (traceframe_find_block_type): New, reimplemented on top of - traceframe_walk_blocks. - (build_traceframe_info_xml): New. - (traceframe_read_info): New. - * server.h (traceframe_read_info): Declare. - -2011-02-11 Yao Qi <yao@codesourcery.com> - - * configure.ac: Call AC_PROG_RANLIB. - * Makefile.in: Remove signals.o from OBS. Link libcommon.a. - * configure: Regenerate. - -2011-02-07 Pedro Alves <pedro@codesourcery.com> - - * server.c (gdb_read_memory): Change return semantics to allow - partial transfers. - (handle_search_memory_1): Adjust. - (process_serial_event) <'m' packet>: Handle partial transfers. - * tracepoint.c (traceframe_read_mem): Handle partial transfers. - -2011-01-28 Pedro Alves <pedro@codesourcery.com> - - * regcache.c (init_register_cache): Initialize - regcache->register_status. - (free_register_cache): Release regcache->register_status. - (regcache_cpy): Copy register_status. - (registers_to_string): Print 'x's for unavailable registers. - (supply_register): Mark the register's status valid or - unavailable, depending on whether a buffer was passed in or not. - (supply_register_zeroed): New. - (supply_regblock): Mark the registers' status valid or - unavailable, depending on whether a buffer was passed in or not. - * regcache.h (REG_UNAVAILABLE, REG_VALID): New defines. - (struct regcache): New `register_status' field. - (supply_register_zeroed): Declare. - * i387-fp.c (i387_xsave_to_cache): Zero out registers using - supply_register_zeroed, rather than passing a NULL buffer to - supply_register. - * tracepoint.c (fetch_traceframe_registers): Update comment. - -2011-01-28 Pedro Alves <pedro@codesourcery.com> - - * i387-fp.c (i387_xsave_to_cache): Make passing NULL as register - buffer explicit. - -2011-01-25 Pedro Alves <pedro@codesourcery.com> - - * server.h (decode_xfer_write): Change prototype. - * remote-utils.c (decode_xfer_write): Remove `annex' parameter, - and don't extract the annex here. - * server.c (decode_xfer_read): Remove `annex' parameter, - and don't extract the annex here. - (decode_xfer): New. - (struct qxfer): New. - (handle_qxfer_auxv, handle_qxfer_features, handle_qxfer_libraries) - (handle_qxfer_osdata, handle_qxfer_siginfo, handle_qxfer_spu) - (handle_qxfer_statictrace): New functions, abstracted out from - handle_query, and made to use the struct qxfer interface. - (handle_threads_qxfer_proper): Rename to ... - (handle_qxfer_threads_proper): ... this. - (handle_threads_qxfer): Rename to ... - (handle_qxfer_threads): ... this. Adjust. - (qxfer_packets): New array. - (handle_qxfer): New function. - (handle_query): Use handle_qxfer. - -2011-01-05 Michael Snyder <msnyder@msnyder-server.eng.vmware.com> - - * gdbreplay.c: Shorten lines of >= 80 columns. - * linux-low.c: Ditto. - * linux-ppc-low.c: Ditto. - * linux-s390-low.c: Ditto. - * linux-sparc-low.c: Ditto. - * linux-x86-low.c: Ditto. - * linux-xtensa-low.c: Ditto. - * mem-break.c: Ditto. - * nto-low.c: Ditto. - * regcache.h: Ditto. - * remote-utils.c: Ditto. - * server.c: Ditto. - * server.h: Ditto. - * thread-db.c: Ditto. - * tracepoint.c: Ditto. - * utils.c: Ditto. - * win32-low.h: Ditto. - -2011-01-05 Joel Brobecker <brobecker@adacore.com> - - * gdbserver/configure.ac, gdbserver/gdbserver.1: Copyright year - update. - -2011-01-01 Joel Brobecker <brobecker@adacore.com> - - * server.c (gdbserver_version): Update copyright year in version - output. - * gdbreplay.c (gdbreplay_version): Ditto. - -2010-12-29 Jie Zhang <jie.zhang@analog.com> - - * configure.srv (bfin-*-*linux*): Handle Blackfin/Linux targets. - * linux-bfin-low.c: New file. - * linux-low.c: Define PT_TEXT_ADDR, PT_TEXT_END_ADDR, and - PT_DATA_ADDR for BFIN targets. - * Makefile.in (SFILES): Add linux-bfin-low.c. - (clean): Remove reg-bfin.c. - (linux-bfin-low.o, reg-bfin.o, reg-bfin.c): New targets. - * README: Mention supported Blackfin targets. - -2010-12-23 Mike Frysinger <vapier@gentoo.org> - - * .gitignore: New file. - -2010-11-16 Mike Frysinger <vapier@gentoo.org> - - * linux-low.c (linux_tracefork_child): Add char* cast to arg. - -2010-10-22 Jie Zhang <jie@codesourcery.com> - - * Makefile.in: Add FLAGS_TO_PASS variable. - (install): Remove dependency of install-only and recursively - invoke make for install-only. - -2010-10-04 Doug Evans <dje@google.com> - - * Makefile.in (uninstall): Use $(DESTDIR). - -2010-09-24 Pedro Alves <pedro@codesourcery.com> - - PR gdb/11842 - - * linux-x86-low.c (compat_siginfo_from_siginfo) - (siginfo_from_compat_siginfo): Also copy si_pid and si_uid when - si_code is < 0. Check for si_code == SI_TIMER before checking for - si_code < 0. - -2010-09-13 Joel Brobecker <brobecker@adacore.com> - - * lynx-i386-low.c: New file. - * configure.srv: Add handling of i[34567]86-*-lynxos* targets. - -2010-09-13 Joel Brobecker <brobecker@adacore.com> - - * lynx-low.c (ptrace_request_to_str): Remove handling for - request values that have been removed in LynxOS 5.x. - -2010-09-13 Joel Brobecker <brobecker@adacore.com> - - * lynx-low.c, lynx-ppc-loc.c: Include <sys/ptrace.h> instead of - <ptrace.h> - -2010-09-09 Nathan Sidwell <nathan@codesourcery.com> - - * configure.ac: Add --enable-inprocess-agent option. - * configure: Rebuilt. - -2010-09-06 Yao Qi <yao@codesourcery.com> - - * linux-low.c (linux_kill): Remove unused variable. - (linux_stabilize_threads): Likewise. - * server.c (start_inferior): Likewise. - (queue_stop_reply_callback): Likewise. - * tracepoint.c (do_action_at_tracepoint): Likewise. - -2010-09-06 Yao Qi <yao@codesourcery.com> - - * linux-low.c (maybe_move_out_of_jump_pad): Restore current_inferior - on return. - -2010-09-06 Jan Kratochvil <jan.kratochvil@redhat.com> - - * target.c (mywait) <TARGET_WAITKIND_EXITED>: Fix to use INTEGER. - -2010-09-06 Pedro Alves <pedro@codesourcery.com> - - * Makefile.in (install-only): Replace $IPA_DEPFILES with - "$(IPA_DEPFILES)". - -2010-09-01 Joel Brobecker <brobecker@adacore.com> - - * gdbserver/lynx-low.c, gdbserver/lynx-low.h, - gdbserver/lynx-ppc-low.c: New files. - * Makefile.in (lynx_low_h): New variable. - (lynx-low.o, lynx-ppc-low.o): New rules. - * configure.ac: On LynxOS, link with -lnetinet. - * configure.srv: Add handling of powerpc-*-lynxos* targets. - * configure: regenerate. - -2010-09-01 Joel Brobecker <brobecker@adacore.com> - - * Makefile.in (vasprintf.o, vsnprintf.o): New rules. - * configure.ac: Add check for vasprintf and vsnprintf. - * configure, config.in: Regenerate. - * server.h (vasprintf, vsnprintf): Add conditional declarations. - -2010-09-01 Joel Brobecker <brobecker@adacore.com> - - * gdbreplay.c: Move include of alloca.h up, next to include of - malloc.h. - * server.h: Add include of malloc.h. - * mem-break.c: Remove include of malloc.h. - * server.c, tracepoint.c, utils.c, win32-low.c: Likewise. - -2010-09-01 Joel Brobecker <brobecker@adacore.com> - - * Makefile.in (memmem.o): Build with -Wno-error. - -2010-09-01 Joel Brobecker <brobecker@adacore.com> - - * utils.c (xsnprintf): Make non-static. - * server.h: Add xsnprintf declaration. - * linux-low.c, nto-low.c, target.c, thread-db.c, tracepoint.c: - replace calls to snprintf by calls to xsnprintf throughout. - -2010-09-01 Joel Brobecker <brobecker@adacore.com> - - * configure.ac: Add configure check for alloca. - * configure, config.in: Regenerate. - * server.h: Include alloca.h if it exists. - * gdbreplay.c: Include alloca.h if it exists. - -2010-08-28 Pedro Alves <pedro@codesourcery.com> - - * linux-low.c (__SIGRTMIN): Define if not already defined. - (linux_create_inferior): Check for __ANDROID__ rather than - __SIGRTMIN. - (enqueue_one_deferred_signal): Don't requeue non-RT signals that - are already deferred. - (linux_wait_1): Check for __ANDROID__ rather than __SIGRTMIN. - (linux_resume_one_thread): Don't queue a SIGSTOP if the lwp is - stopped and already has a pending signal to report. - (proceed_one_lwp): : Don't queue a SIGSTOP if the lwp already has - a pending signal to report or is moving out of a jump pad. - (linux_init_signals): Check for __ANDROID__ rather than - __SIGRTMIN. - -2010-08-28 Pedro Alves <pedro@codesourcery.com> - - * linux-low.c (linux_stabilize_threads): Wrap debug output in a - debug_threads check. Avoid a linear search when not doing debug - output. - -2010-08-27 Pedro Alves <pedro@codesourcery.com> - - * event-loop.c (event_handle_func): Adjust to use gdb_fildes_t. - (struct gdb_event) <fd>: Change type to gdb_fildes_t. - (struct file_handler) <fd>: Change type to gdb_fildes_t. - (process_event): Change local fd's type to gdb_fildes_t. - (create_file_handler): Adjust prototype. - (delete_file_handler): Adjust prototype. - (handle_file_event): Adjust prototype. Use pfildes. - (create_file_event): Adjsut prototype. - * remote-utils.c (remote_desc, listen_desc): Change type to - gdb_fildes_t. - * server.h: New gdb_fildes_t typedef. - [USE_WIN32API]: Include winsock2.h. - (delete_file_handler, add_file_handler): Adjust prototypes. - (pfildes): Declare. - * utils.c (pfildes): New. - -2010-08-27 Pedro Alves <pedro@codesourcery.com> - - * configure.ac (build_warnings): Add -Wno-char-subscripts. - * configure: Regenerate. - -2010-08-27 Pedro Alves <pedro@codesourcery.com> - - * linux-low.c (linux_unprepare_to_access_memory): Rename to ... - (linux_done_accessing_memory): ... this. - (linux_target_ops): Adjust. - * linux-x86-low.c (x86_insert_point, x86_remove_point): Adjust. - * nto-low.c (nto_target_ops): Adjust comment. - * server.c (gdb_read_memory, gdb_write_memory): Adjust. - * spu-low.c (spu_target_ops): Adjust comment. - * target.h (target_ops): Rename unprepare_to_access_memory field - to done_accessing_memory. - (unprepare_to_access_memory): Rename to ... - (done_accessing_memory): ... this. - -2010-08-26 Pedro Alves <pedro@codesourcery.com> - - * linux-low.c (linux_prepare_to_access_memory): New. - (linux_unprepare_to_access_memory): New. - (linux_target_ops): Install them. - * server.c (read_memory): Rename to ... - (gdb_read_memory): ... this. Use - prepare_to_access_memory/prepare_to_access_memory. - (write_memory): Rename to ... - (gdb_write_memory): ... this. Use - prepare_to_access_memory/prepare_to_access_memory. - (handle_search_memory_1): Adjust. - (process_serial_event): Adjust. - * target.h (struct target_ops): New fields - prepare_to_access_memory and unprepare_to_access_memory. - (prepare_to_access_memory, unprepare_to_access_memory): New. - * linux-x86-low.c (x86_insert_point, x86_remove_point): Use - prepare_to_access_memory/prepare_to_access_memory. - * nto-low.c (nto_target_ops): Adjust. - * spu-low.c (spu_target_ops): Adjust. - * win32-low.c (win32_target_ops): Adjust. - -2010-08-26 Pedro Alves <pedro@codesourcery.com> - - * Makefile.in (WARN_CFLAGS): Get it from configure. - (WERROR_CFLAGS): New. - (INTERNAL_CFLAGS): Add WERROR_CFLAGS. - * configure.ac: Introduce --enable-werror, which adds -Werror to - the compiler command line. Enabled by default. Disable with - --disable-werror. Add -Wdeclaration-after-statement - Wpointer-arith and -Wformat-nonliteral to warning flags. - * configure: Regenerate. - -2010-08-26 Pedro Alves <pedro@codesourcery.com> - - * mem-break.c [HAVE_MALLOC_H]: Include malloc.h. - -2010-08-26 Pedro Alves <pedro@codesourcery.com> - - * gdbreplay.c (remote_error): New. - (gdbchar): New. - (expect): Use gdbchar. Check for error reading from GDB. - Clarify sync error output. - (play): Check for errors writing to GDB. - * linux-low.c (sigchld_handler): Really ignore `write' errors. - * remote-utils.c (getpkt): Check for errors writing to the remote - descriptor. - -2010-08-25 Pedro Alves <pedro@codesourcery.com> - - * linux-low.c (linux_wait_1): Move non-debugging code out of - `debug_threads' control. - -2010-08-25 Pedro Alves <pedro@codesourcery.com> - - * linux-low.c (linux_wait_1): Don't set last_status here. - * server.c (push_event, queue_stop_reply_callback): Assert we're - not pushing a TARGET_WAITKIND_IGNORE event. - (start_inferior, start_inferior, attach_inferior, handle_v_cont) - (myresume, handle_target_event): Set the thread's last_resume_kind - and last_status from the target returned status. - -2010-08-25 Pedro Alves <pedro@codesourcery.com> - - PR threads/10729 - - * linux-x86-low.c (update_debug_registers_callback): New. - (i386_dr_low_set_addr): Use it. - (i386_dr_low_get_addr): New. - (i386_dr_low_set_control): Use update_debug_registers_callback. - (i386_dr_low_get_control): New. - (i386_dr_low_get_status): Adjust. - * linux-low.c (linux_stop_lwp): New. - * linux-low.h (linux_stop_lwp): Declare. - - * i386-low.c (I386_DR_GET_RW_LEN): Take the dr7 contents as - argument instead of a i386_debug_reg_state. - (I386_DR_WATCH_HIT): Take the dr6 contents as argument instead of - a i386_debug_reg_state. - (i386_insert_aligned_watchpoint): Adjust. - (i386_remove_aligned_watchpoint): Adjust. - (i386_low_stopped_data_address): Read the debug registers from the - inferior instead of from the mirrors. - * i386-low.h (struct i386_debug_reg_state): Extend comment. - (i386_dr_low_get_addr): Declare. - (i386_dr_low_get_control): Declare. - (i386_dr_low_get_status): Change prototype. - - * win32-i386-low.c (dr_status_mirror, dr_control_mirror): New globals. - (i386_dr_low_get_addr): New. - (i386_dr_low_get_control): New. - (i386_dr_low_get_status): Adjust prototype. Return - dr_status_mirror. - (i386_initial_stuff): Clear dr_status_mirror and - dr_control_mirror. - (i386_get_thread_context): Adjust. - (i386_set_thread_context): Adjust. - (i386_thread_added): Adjust. - -2010-08-24 Pedro Alves <pedro@codesourcery.com> - - * linux-low.h (linux_thread_area): Delete declaration. - -2010-08-11 Thomas Schwinge <thomas@codesourcery.com> - - * linux-low.c (linux_wait_1): Correctly return the ptid of the child - after its termination. - -2010-08-09 Pedro Alves <pedro@codesourcery.com> - - * linux-low.c (gdb_wants_lwp_stopped): Delete. - (gdb_wants_all_stopped): Delete. - (linux_wait_1): Don't call them. - * server.c (handle_v_cont): Tag all threads as want-stopped. - (gdb_wants_thread_stopped): Fix comments. Tag the thread that - stopped as "client-wants-stopped". - -2010-07-31 Pedro Alves <pedro@codesourcery.com> - - * Makefile.in (signals_h): New. - (server_h): Depend on it. - (server.o): Don't depend on $(signals_def). - (signals.o): Depend on $(signals_def). - -2010-07-31 Jan Kratochvil <jan.kratochvil@redhat.com> - - * Makefile.in (signals_def): New. - (server_h): Append include/gdb/signals.h and signals_def. - (server.o): Append signals_def. - -2010-07-25 Jan Kratochvil <jan.kratochvil@redhat.com> - - * server.c (handle_target_event): Use target_signal_to_host for - resume_info.sig initialization. - * target.h (struct thread_resume) <sig>: New comment. - -2010-07-20 Ozkan Sezer <sezeroz@gmail.com> - - * server.c (handle_query): strcpy() the returned string from paddress() - instead of sprintf(). - * utils.c (paddress): Return phex_nz(). - -2010-07-07 Joel Brobecker <brobecker@adacore.com> - - * server.c (handle_v_cont): Call mourn_inferior if process - just exited. - (myresume): Likewise. - -2010-07-01 Pedro Alves <pedro@codesourcery.com> - - Static tracepoints, and integration with UST. - - * configure.ac: Handle --with-ust. substitute ustlibs and ustinc. - * mem-break.c (uninsert_all_breakpoints) - (reinsert_all_breakpoints): New. - * mem-break.h (reinsert_all_breakpoints, uninsert_all_breakpoints): - * tracepoint.c (ust_loaded, helper_thread_id, cmd_buf): New. - (gdb_agent_ust_loaded, helper_thread_id) - (gdb_agent_helper_thread_id): New macros. - (struct ipa_sym_addresses): Add addr_ust_loaded, - addr_helper_thread_id, addr_cmd_buf. - (symbol_list): Add ust_loaded, helper_thread_id, cmd_buf. - (in_process_agent_loaded_ust): New. - (write_e_ust_not_loaded): New. - (maybe_write_ipa_ust_not_loaded): New. - (struct collect_static_trace_data_action): New. - (enum tracepoint_type) <static_tracepoint>: New. - (struct tracepoint) <handle>: Mention static tracepoints. - (struct static_tracepoint_ctx): New. - (CMD_BUF_SIZE): New. - (add_tracepoint_action): Handle static tracepoint actions. - (unprobe_marker_at): New. - (clear_installed_tracepoints): Handle static tracepoints. - (cmd_qtdp): Handle static tracepoints. - (probe_marker_at): New. - (cmd_qtstart): Handle static tracepoints. - (response_tracepoint): Handle static tracepoints. - (cmd_qtfstm, cmd_qtsstm, cmd_qtstmat): New. - (handle_tracepoint_query): Handle qTfSTM, qTsSTM and qTSTMat. - (get_context_regcache): Handle static tracepoints. - (do_action_at_tracepoint): Handle static tracepoint actions. - (traceframe_find_block_type): Handle static trace data blocks. - (traceframe_read_sdata): New. - (download_tracepoints): Download static tracepoint actions. - [HAVE_UST] Include ust/ust.h, dlfcn.h, sys/socket.h, and sys/un.h. - (GDB_PROBE_NAME): New. - (ust_ops): New. - (GET_UST_SYM): New. - (USTF): New. - (dlsym_ust): New. - (ust_marker_to_static_tracepoint): New. - (gdb_probe): New. - (collect_ust_data_at_tracepoint): New. - (gdb_ust_probe): New. - (UNIX_PATH_MAX, SOCK_DIR): New. - (gdb_ust_connect_sync_socket): New. - (resume_thread, stop_thread): New. - (run_inferior_command): New. - (init_named_socket): New. - (gdb_ust_socket_init): New. - (cstr_to_hexstr): New. - (next_st): New. - (first_marker, next_marker): New. - (response_ust_marker): New. - (cmd_qtfstm, cmd_qtsstm): New. - (unprobe_marker_at, probe_marker_at): New. - (cmd_qtstmat, gdb_ust_thread): New. - (gdb_ust_init): New. - (initialize_tracepoint_ftlib): Call gdb_ust_init. - * linux-amd64-ipa.c [HAVE_UST]: Include ust/processor.h - (ST_REGENTRY): New. - (x86_64_st_collect_regmap): New. - (X86_64_NUM_ST_COLLECT_GREGS): New. - (AMD64_RIP_REGNUM): New. - (supply_static_tracepoint_registers): New. - * linux-i386-ipa.c [HAVE_UST]: Include ust/processor.h - (ST_REGENTRY): New. - (i386_st_collect_regmap): New. - (i386_NUM_ST_COLLECT_GREGS): New. - (supply_static_tracepoint_registers): New. - * server.c (handle_query): Handle qXfer:statictrace:read. - <qSupported>: Report support for StaticTracepoints, and - qXfer:statictrace:read features. - * server.h (traceframe_read_sdata) - (supply_static_tracepoint_registers): Declare. - * remote-utils.c (convert_int_to_ascii, hexchars, ishex, tohex) - (unpack_varlen_hex): Include in IPA build. - * Makefile.in (ustlibs, ustinc): New. - (IPA_OBJS): Add remote-utils-ipa.o. - ($(IPA_LIB)): Link -ldl and -lpthread. - (UST_CFLAGS): New. - (IPAGENT_CFLAGS): Add UST_CFLAGS. - * config.in, configure: Regenerate. - -2010-06-20 Ian Lance Taylor <iant@google.com> - Pedro Alves <pedro@codesourcery.com> - - * linux-x86-low.c (always_true): Delete. - (EMIT_ASM, EMIT_ASM32): Use an uncondition asm jmp instead of - trying to fool the compiler with always_true. - -2010-06-20 Pedro Alves <pedro@codesourcery.com> - - * tracepoint.c (condition_true_at_tracepoint): Don't run compiled - conditions in gdbserver. - -2010-06-19 Ulrich Weigand <uweigand@de.ibm.com> - - * spu-low.c (spu_read_memory): Wrap around local store limit. - (spu_write_memory): Likewise. - -2010-06-15 Pedro Alves <pedro@codesourcery.com> - - * linux-x86-low.c (amd64_emit_const, amd64_emit_void_call_2) - (i386_emit_const, i386_emit_void_call_2): Replace int64_t uses with - LONGEST uses. - * server.h (struct emit_ops): Replace int64_t uses with LONGEST - uses. - * tracepoint.c (emit_const, emit_void_call_2): Replace int64_t - uses with LONGEST uses. - -2010-06-14 Stan Shebs <stan@codesourcery.com> - Pedro Alves <pedro@codesourcery.com> - - Bytecode compiler. - - * linux-x86-low.c: Include limits.h. - (add_insns): New. - (always_true): New. - (EMIT_ASM): New. - (EMIT_ASM32): New. - (amd64_emit_prologue, amd64_emit_epilogue, amd64_emit_add) - (amd64_emit_sub, amd64_emit_mul, amd64_emit_lsh) - (amd64_emit_rsh_signed, amd64_emit_rsh_unsigned, amd64_emit_ext, - (amd64_emit_log_not, amd64_emit_bit_and, amd64_emit_bit_or) - (amd64_emit_bit_xor, amd64_emit_bit_not, amd64_emit_equal, - (amd64_emit_less_signed, amd64_emit_less_unsigned, amd64_emit_ref, - (amd64_emit_if_goto, amd64_emit_goto, amd64_write_goto_address) - (amd64_emit_const, amd64_emit_call, amd64_emit_reg) - (amd64_emit_pop, amd64_emit_stack_flush, amd64_emit_zero_ext) - (amd64_emit_swap, amd64_emit_stack_adjust, amd64_emit_int_call_1) - (amd64_emit_void_call_2): New. - (amd64_emit_ops): New. - (i386_emit_prologue, i386_emit_epilogue, i386_emit_add) - (i386_emit_sub,i386_emit_mul, i386_emit_lsh, i386_emit_rsh_signed) - (i386_emit_rsh_unsigned, i386_emit_ext, i386_emit_log_not) - (i386_emit_bit_and, i386_emit_bit_or, i386_emit_bit_xor) - (i386_emit_bit_not, i386_emit_equal, i386_emit_less_signed) - (i386_emit_less_unsigned, i386_emit_ref, i386_emit_if_goto) - (i386_emit_goto, i386_write_goto_address, i386_emit_const) - (i386_emit_call, i386_emit_reg, i386_emit_pop) - (i386_emit_stack_flush, i386_emit_zero_ext, i386_emit_swap) - (i386_emit_stack_adjust, i386_emit_int_call_1) - (i386_emit_void_call_2): New. - (i386_emit_ops): New. - (x86_emit_ops): New. - (the_low_target): Install x86_emit_ops. - * server.h (struct emit_ops): New. - (get_raw_reg_func_addr): Declare. - (current_insn_ptr, emit_error): Declare. - * tracepoint.c (get_raw_reg, get_trace_state_variable_value) - (set_trace_state_variable_value): New defines. - (struct ipa_sym_addresses): New fields addr_get_raw_reg, - addr_get_trace_state_variable_value and - addr_set_trace_state_variable_value. - (symbol_list): New fields for get_raw_reg, - get_trace_state_variable_value and set_trace_state_variable_value. - (condfn): New typedef. - (struct tracepoint): New field `compiled_cond'. - (do_action_at_tracepoint): Clear compiled_cond. - (get_trace_state_variable_value, set_trace_state_variable_value): - Export in the IPA. - (condition_true_at_tracepoint): If there's a compiled condition, - run that. - (current_insn_ptr, emit_error): New globals. - (struct bytecode_address): New. - (get_raw_reg_func_addr): New. - (emit_prologue, emit_epilogue, emit_add, emit_sub, emit_mul) - (emit_lsh, emit_rsh_signed, emit_rsh_unsigned, emit_ext) - (emit_log_not, emit_bit_and, emit_bit_or, emit_bit_xor) - (emit_bit_not, emit_equal, emit_less_signed, emit_less_unsigned) - (emit_ref, emit_if_goto, emit_goto, write_goto_address, emit_const) - (emit_reg, emit_pop, emit_stack_flush, emit_zero_ext, emit_swap) - (emit_stack_adjust, emit_int_call_1, emit_void_call_2): New. - (compile_tracepoint_condition, compile_bytecodes): New. - * target.h (emit_ops): Forward declare. - (struct target_ops): New field emit_ops. - (target_emit_ops): New. - * linux-amd64-ipa.c (gdb_agent_get_raw_reg): New. - * linux-i386-ipa.c (gdb_agent_get_raw_reg): New. - * linux-low.c (linux_emit_ops): New. - (linux_target_ops): Install it. - * linux-low.h (struct linux_target_ops): New field emit_ops. - -2010-06-14 Ulrich Weigand <uweigand@de.ibm.com> - - * linux-ppc-low.c (ppc_arch_setup): Use private regcache to test MSR. - * linux-s390-low.c (ppc_arch_setup): Use private regcache to test PSW. - -2010-06-01 Pedro Alves <pedro@codesourcery.com> - Stan Shebs <stan@codesourcery.com> - - * Makefile.in (IPA_DEPFILES, extra_libraries): New. - (all): Depend on $(extra_libraries). - (install-only): Install the IPA. - (IPA_OBJS, IPA_LIB): New. - (clean): Remove the IPA lib. - (IPAGENT_CFLAGS): New. - (tracepoint-ipa.o, utils-ipa.o, remote-utils-ipa.o) - (regcache-ipa.o, i386-linux-ipa.o, linux-i386-ipa.o) - (linux-amd64-ipa.o, amd64-linux-ipa.o): New rules. - * linux-amd64-ipa.c, linux-i386-ipa.c: New files. - * configure.ac: Check for atomic builtins support in the compiler. - (IPA_DEPFILES, extra_libraries): Define. - * configure.srv (ipa_obj): Add description. - (ipa_i386_linux_regobj, ipa_amd64_linux_regobj): Define. - (i[34567]86-*-linux*): Set ipa_obj. - (x86_64-*-linux*): Set ipa_obj. - * linux-low.c (stabilizing_threads): New. - (supports_fast_tracepoints): New. - (linux_detach): Stabilize threads before detaching. - (handle_tracepoints): Handle internal tracing breakpoints. Assert - the lwp is either not stabilizing, or is moving out of a jump pad. - (linux_fast_tracepoint_collecting): New. - (maybe_move_out_of_jump_pad): New. - (enqueue_one_deferred_signal): New. - (dequeue_one_deferred_signal): New. - (linux_wait_for_event_1): If moving out of a jump pad, defer - pending signals to later. - (linux_stabilize_threads): New. - (linux_wait_1): Check if threads need moving out of jump pads, and - do it if so. - (stuck_in_jump_pad_callback): New. - (move_out_of_jump_pad_callback): New. - (lwp_running): New. - (linux_resume_one_lwp): Handle moving out of jump pads. - (linux_set_resume_request): Dequeue deferred signals. - (need_step_over_p): Also step over fast tracepoint jumps. - (start_step_over): Also uninsert fast tracepoint jumps. - (finish_step_over): Also reinsert fast tracepoint jumps. - (linux_install_fast_tracepoint_jump): New. - (linux_target_ops): Install linux_stabilize_threads and - linux_install_fast_tracepoint_jump_pad. - * linux-low.h (linux_target_ops) <get_thread_area, - install_fast_tracepoint_jump_pad>: New fields. - (struct lwp_info) <collecting_fast_tracepoint, - pending_signals_to_report, exit_jump_pad_bkpt>: New fields. - (linux_get_thread_area): Declare. - * linux-x86-low.c (jump_insn): New. - (x86_get_thread_area): New. - (append_insns): New. - (push_opcode): New. - (amd64_install_fast_tracepoint_jump_pad): New. - (i386_install_fast_tracepoint_jump_pad): New. - (x86_install_fast_tracepoint_jump_pad): New. - (the_low_target): Install x86_get_thread_area and - x86_install_fast_tracepoint_jump_pad. - * mem-break.c (set_raw_breakpoint_at): Use read_inferior_memory. - (struct fast_tracepoint_jump): New. - (fast_tracepoint_jump_insn): New. - (fast_tracepoint_jump_shadow): New. - (find_fast_tracepoint_jump_at): New. - (fast_tracepoint_jump_here): New. - (delete_fast_tracepoint_jump): New. - (set_fast_tracepoint_jump): New. - (uninsert_fast_tracepoint_jumps_at): New. - (reinsert_fast_tracepoint_jumps_at): New. - (set_breakpoint_at): Use write_inferior_memory. - (uninsert_raw_breakpoint): Use write_inferior_memory. - (check_mem_read): Mask out fast tracepoint jumps. - (check_mem_write): Mask out fast tracepoint jumps. - * mem-break.h (struct fast_tracepoint_jump): Forward declare. - (set_fast_tracepoint_jump): Declare. - (delete_fast_tracepoint_jump) - (fast_tracepoint_jump_here, uninsert_fast_tracepoint_jumps_at) - (reinsert_fast_tracepoint_jumps_at): Declare. - * regcache.c: Don't compile many functions when building the - in-process agent library. - (init_register_cache) [IN_PROCESS_AGENT]: Don't allow allocating - the register buffer in the heap. - (free_register_cache): If the register buffer isn't owned by the - regcache, don't free it. - (set_register_cache) [IN_PROCESS_AGENT]: Don't re-alocate - pre-existing register caches. - * remote-utils.c (convert_int_to_ascii): Constify `from' parameter - type. - (convert_ascii_to_int): : Constify `from' parameter type. - (decode_M_packet, decode_X_packet): Replace the `to' parameter by - a `to_p' pointer to pointer parameter. If TO_P is NULL, malloc - the needed buffer in-place. - (relocate_instruction): New. - * server.c (handle_query) <qSymbols>: If the target supports - tracepoints, give it a chance of looking up symbols. Report - support for fast tracepoints. - (handle_status): Stabilize threads. - (process_serial_event): Adjust. - * server.h (struct fast_tracepoint_jump): Forward declare. - (struct process_info) <fast_tracepoint_jumps>: New field. - (convert_ascii_to_int, convert_int_to_ascii): Adjust. - (decode_X_packet, decode_M_packet): Adjust. - (relocate_instruction): Declare. - (in_process_agent_loaded): Declare. - (tracepoint_look_up_symbols): Declare. - (struct fast_tpoint_collect_status): Declare. - (fast_tracepoint_collecting): Declare. - (force_unlock_trace_buffer): Declare. - (handle_tracepoint_bkpts): Declare. - (initialize_low_tracepoint) - (supply_fast_tracepoint_registers) [IN_PROCESS_AGENT]: Declare. - * target.h (struct target_ops) <stabilize_threads, - install_fast_tracepoint_jump_pad>: New fields. - (stabilize_threads, install_fast_tracepoint_jump_pad): New. - * tracepoint.c [HAVE_MALLOC_H]: Include malloc.h. - [HAVE_STDINT_H]: Include stdint.h. - (trace_debug_1): Rename to ... - (trace_vdebug): ... this. - (trace_debug): Rename to ... - (trace_debug_1): ... this. Add `level' parameter. - (trace_debug): New. - (ATTR_USED, ATTR_NOINLINE): New. - (IP_AGENT_EXPORT): New. - (gdb_tp_heap_buffer, gdb_jump_pad_buffer, gdb_jump_pad_buffer_end) - (collecting, gdb_collect, stop_tracing, flush_trace_buffer) - (about_to_request_buffer_space, trace_buffer_is_full) - (stopping_tracepoint, expr_eval_result, error_tracepoint) - (tracepoints, tracing, trace_buffer_ctrl, trace_buffer_ctrl_curr) - (trace_buffer_lo, trace_buffer_hi, traceframe_read_count) - (traceframe_write_count, traceframes_created) - (trace_state_variables) - New renaming defines. - (struct ipa_sym_addresses): New. - (STRINGIZE_1, STRINGIZE, IPA_SYM): New. - (symbol_list): New. - (ipa_sym_addrs): New. - (all_tracepoint_symbols_looked_up): New. - (in_process_agent_loaded): New. - (write_e_ipa_not_loaded): New. - (maybe_write_ipa_not_loaded): New. - (tracepoint_look_up_symbols): New. - (debug_threads) [IN_PROCESS_AGENT]: New. - (read_inferior_memory) [IN_PROCESS_AGENT]: New. - (UNKNOWN_SIDE_EFFECTS): New. - (stop_tracing): New. - (flush_trace_buffer): New. - (stop_tracing_bkpt): New. - (flush_trace_buffer_bkpt): New. - (read_inferior_integer): New. - (read_inferior_uinteger): New. - (read_inferior_data_pointer): New. - (write_inferior_data_pointer): New. - (write_inferior_integer): New. - (write_inferior_uinteger): New. - (struct collect_static_trace_data_action): Delete. - (enum tracepoint_type): New. - (struct tracepoint) <type>: New field `type'. - <actions_str, step_actions, step_actions_str>: Only include in - GDBserver. - <orig_size, obj_addr_on_target, adjusted_insn_addr> - <adjusted_insn_addr_end, jump_pad, jump_pad_end>: New fields. - (tracepoints): Use IP_AGENT_EXPORT. - (last_tracepoint): Don't include in the IPA. - (stopping_tracepoint): Use IP_AGENT_EXPORT. - (trace_buffer_is_full): Use IP_AGENT_EXPORT. - (alloced_trace_state_variables): New. - (trace_state_variables): Use IP_AGENT_EXPORT. - (traceframe_t): Delete unused variable. - (circular_trace_buffer): Don't include in the IPA. - (trace_buffer_start): Delete. - (struct trace_buffer_control): New. - (trace_buffer_free): Delete. - (struct ipa_trace_buffer_control): New. - (GDBSERVER_FLUSH_COUNT_MASK, GDBSERVER_FLUSH_COUNT_MASK_PREV) - (GDBSERVER_FLUSH_COUNT_MASK_CURR, GDBSERVER_UPDATED_FLUSH_COUNT_BIT): - New. - (trace_buffer_ctrl): New. - (TRACE_BUFFER_CTRL_CURR): New. - (trace_buffer_start, trace_buffer_free, trace_buffer_end_free): - Reimplement as macros. - (trace_buffer_wrap): Delete. - (traceframe_write_count, traceframe_read_count) - (traceframes_created, tracing): Use IP_AGENT_EXPORT. - (struct tracepoint_hit_ctx) <type>: New field. - (struct fast_tracepoint_ctx): New. - (memory_barrier): New. - (cmpxchg): New. - (record_tracepoint_error): Update atomically in the IPA. - (clear_inferior_trace_buffer): New. - (about_to_request_buffer_space): New. - (trace_buffer_alloc): Handle GDBserver and inferior simulatenous - updating the same buffer. - (add_tracepoint): Default the tracepoint's type to trap - tracepoint, and orig_size to -1. - (get_trace_state_variable) [IN_PROCESS_AGENT]: Handle allocated - internal variables. - (create_trace_state_variable): New parameter `gdb'. Handle it. - (clear_installed_tracepoints): Clear fast tracepoint jumps. - (cmd_qtdp): Handle fast tracepoints. - (cmd_qtdv): Adjust. - (max_jump_pad_size): New. - (gdb_jump_pad_head): New. - (get_jump_space_head): New. - (claim_jump_space): New. - (sort_tracepoints): New. - (MAX_JUMP_SIZE): New. - (cmd_qtstart): Handle fast tracepoints. Sync tracepoints with the - IPA. - (stop_tracing) [IN_PROCESS_AGENT]: Don't include the tdisconnected - support. Upload fast traceframes, and delete internal IPA - breakpoints. - (stop_tracing_handler): New. - (flush_trace_buffer_handler): New. - (cmd_qtstop): Upload fast tracepoints. - (response_tracepoint): Handle fast tracepoints. - (tracepoint_finished_step): Upload fast traceframes. Set the - tracepoint hit context's tracepoint type. - (handle_tracepoint_bkpts): New. - (tracepoint_was_hit): Set the tracepoint hit context's tracepoint - type. Add comment about fast tracepoints. - (collect_data_at_tracepoint) [IN_PROCESS_AGENT]: Don't access the - non-existing action_str field. - (get_context_regcache): Handle fast tracepoints. - (do_action_at_tracepoint) [!IN_PROCESS_AGENT]: Don't write the PC - to the regcache. - (fast_tracepoint_from_jump_pad_address): New. - (fast_tracepoint_from_ipa_tpoint_address): New. - (collecting_t): New. - (force_unlock_trace_buffer): New. - (fast_tracepoint_collecting): New. - (collecting): New. - (gdb_collect): New. - (write_inferior_data_ptr): New. - (target_tp_heap): New. - (target_malloc): New. - (download_agent_expr): New. - (UALIGN): New. - (download_tracepoints): New. - (download_trace_state_variables): New. - (upload_fast_traceframes): New. - (IPA_FIRST_TRACEFRAME): New. - (IPA_NEXT_TRACEFRAME_1): New. - (IPA_NEXT_TRACEFRAME): New. - [IN_PROCESS_AGENT]: Include sys/mman.h and fcntl.h. - [IN_PROCESS_AGENT] (gdb_tp_heap_buffer, gdb_jump_pad_buffer) - (gdb_jump_pad_buffer_end): New. - [IN_PROCESS_AGENT] (initialize_tracepoint_ftlib): New. - (initialize_tracepoint): Adjust. - [IN_PROCESS_AGENT]: Allocate the IPA heap, and jump pad scratch - buffer. Initialize the low module. - * utils.c (PREFIX, TOOLNAME): New. - (malloc_failure): Use PREFIX. - (error): In the IPA, an error causes an exit. - (fatal, warning): Use PREFIX. - (internal_error): Use TOOLNAME. - (NUMCELLS): Increase to 10. - * configure, config.in: Regenerate. - -2010-06-01 Pedro Alves <pedro@codesourcery.com> - - * server.c (handle_query) <qSupported>: Do two passes over the - qSupported string to avoid nesting strtok. - -2010-05-28 Jan Kratochvil <jan.kratochvil@redhat.com> - - * Makefile.in (SFILES): Add $(srcdir)/proc-service.list. - (CDEPS): New. - * configure.ac (RDYNAMIC): New AC_MSG_CHECKING wrapping. Test also - -Wl,--dynamic-list. - * configure: Regenerate. - * proc-service.list: New. - -2010-05-28 Jan Kratochvil <jan.kratochvil@redhat.com> - - * linux-low.c (linux_core_of_thread): Fix crash on invalid CONTENT. - New comment. - -2010-05-26 Ozkan Sezer <sezeroz@gmail.com> - - * gdbreplay.c (remote_open): Check error return from socket() call by - its equality to -1 not by it being negative. - * remote-utils.c (remote_open): Likewise. - -2010-05-23 Pedro Alves <pedro@codesourcery.com> - - * config.h: Regenerate. - -2010-05-19 Maxim Kuvyrkov <maxim@codesourcery.com> - - * linux-m68k-low.c (ps_get_thread_area): Don't define if kernel - doesn't provide PTRACE_GET_THREAD_AREA. - -2010-05-19 Maxim Kuvyrkov <maxim@codesourcery.com> - - * linux-m68k-low.c: Include <asm/ptrace.h> - (ps_get_thread_area): Implement. - -2010-05-03 Doug Evans <dje@google.com> - - * event-loop.c (struct callback_event): New struct. - (callback_list): New global. - (append_callback_event, delete_callback_event): New functions. - (process_callback): New function. - (start_event_loop): Call it. - * remote-utils.c (NOT_SCHEDULED): Define. - (readchar_buf, readchar_bufcnt, readchar_bufp): New static globals, - moved out of readchar. - (readchar): Rewrite. Call reschedule before returning. - (reset_readchar): New function. - (remote_close): Call it. - (process_remaining, reschedule): New functions. - * server.h (callback_handler_func): New typedef. - (append_callback_event, delete_callback_event): Declare. - -2010-05-03 Pedro Alves <pedro@codesourcery.com> - - * proc-service.c (ps_pglobal_lookup): Use - thread_db_look_up_one_symbol. - * remote-utils.c (look_up_one_symbol): Add new `may_ask_gdb' - parameter. Use it instead of all_symbols_looked_up. - * server.h (struct process_info) <all_symbols_looked_up>: Delete - field. - (all_symbols_looked_up): Don't declare. - (look_up_one_symbol): Add new `may_ask_gdb' parameter. - * thread-db.c (struct thread_db) <all_symbols_looked_up>: New - field. - (thread_db_look_up_symbols): Adjust call to look_up_one_symbol. - Set all_symbols_looked_up here. - (thread_db_look_up_one_symbol): New. - (thread_db_get_tls_address): Adjust. - (thread_db_load_search, try_thread_db_load_1): Always allocate the - thread_db object on the heap, and tentatively set it in the - process structure. - (thread_db_init): Don't set all_symbols_looked_up here. - * linux-low.h (thread_db_look_up_one_symbol): Declare. - -2010-05-03 Pedro Alves <pedro@codesourcery.com> - - * linux-low.c (linux_kill, linux_detach): Adjust. - (status_pending_p_callback): Remove redundant statement. Check - for !TARGET_WAITIKIND_IGNORE, instead of - TARGET_WAITKIND_STOPPED. - (handle_tracepoints): Make sure LWP is locked. Adjust. - (linux_wait_for_event_1): Adjust. - (linux_cancel_breakpoints): New. - (unsuspend_one_lwp): New. - (unsuspend_all_lwps): New. - (linux_wait_1): If finishing a step-over, unsuspend all lwps. - (send_sigstop_callback): Change return type to int, add new - `except' parameter and handle it. - (suspend_and_send_sigstop_callback): New. - (stop_all_lwps): Add new `suspend' and `expect' parameters, and - pass them down. If SUSPEND, also increment the lwp's suspend - count. - (linux_resume_one_lwp): Add notice about resuming a suspended LWP. - (need_step_over_p): Don't consider suspended LWPs. - (start_step_over): Adjust. - (proceed_one_lwp): Change return type to int, add new `except' - parameter and handle it. - (unsuspend_and_proceed_one_lwp): New. - (proceed_all_lwps): Use find_inferior instead of - for_each_inferior. - (unstop_all_lwps): Add `unsuspend' parameter. If UNSUSPEND, them - also decrement the suspend count of LWPs. Pass `except' down, - instead of hacking its suspend count. - (linux_pause_all): Add `freeze' parameter. Adjust. - (linux_unpause_all): New. - (linux_target_ops): Install linux_unpause_all. - * server.c (handle_status): Adjust. - * target.h (struct target_ops): New fields `unpause_all' and - `cancel_breakpoints'. Add new parameter to `pause_all'. - (pause_all): Add new `freeze' parameter. - (unpause_all): New. - (cancel_breakpoints): New. - * tracepoint.c (clear_installed_tracepoints): Pause threads, and - cancel breakpoints. - (cmd_qtstart): Pause threads. - (stop_tracing): Pause threads, and cancel breakpoints. - * win32-low.c (win32_target_ops): Adjust. - -2010-05-03 Pedro Alves <pedro@codesourcery.com> - - * linux-low.c (linux_wait_for_event_1): Move passing the signal to - the inferior right away from here... - (linux_wait_1): ... to here, and adjust to check the thread's - last_resume_kind instead of the lwp's step or stop_expected flags. - -2010-05-02 Pedro Alves <pedro@codesourcery.com> - - * README: Use consistent `GDB' and `GDBserver' spellings. - -2010-05-02 Pedro Alves <pedro@codesourcery.com> - - * linux-low.c (linux_kill_one_lwp): Assume the lwp is stopped. - (linux_kill): Stop all lwps here. Don't delete the main lwp here. - (linux_detach_one_lwp): Assume the lwp is stopped. - (any_thread_of): Delete. - (linux_detach): Stop all lwps here. Don't blindly delete all - breakpoints. - (delete_lwp_callback): New. - (linux_mourn): Delete all lwps of the process that is gone. - (linux_wait_1): Don't delete the last lwp of the process here. - * mem-break.h (mark_breakpoints_out): Declare. - * mem-break.c (mark_breakpoints_out): New. - (free_all_breakpoints): Use it. - * server.c (handle_target_event): If the process is gone, mark - breakpoints out. - * thread-db.c (struct thread_db) <create_bp>: New field. - (thread_db_enable_reporting): Fix prototype. Store a thread event - breakpoint reference in the thread_db struct. - (thread_db_load_search): Clear the thread_db object. - (try_thread_db_load_1): Ditto. - (switch_to_process): New. - (disable_thread_event_reporting): Use it. - (remove_thread_event_breakpoints): New. - (thread_db_detach, thread_db_mourn): Use it. - -2010-05-01 Pedro Alves <pedro@codesourcery.com> - - * linux-low.c (linux_enable_event_reporting): New. - (linux_wait_for_event_1, handle_extended_wait): Use it. - -2010-04-30 Pedro Alves <pedro@codesourcery.com> - - * linux-low.c (linux_kill_one_lwp, linux_kill) - (linux_detach_one_lwp): Adjust to send_sigstop interface change. - (send_sigstop): Take an lwp_info as parameter instead. Queue a - SIGSTOP even if the LWP is stopped. - (send_sigstop_callback): New. - (stop_all_lwps): Use send_sigstop_callback instead. - (linux_resume_one_thread): Adjust. - (proceed_one_lwp): Still proceed an LWP that the client has - requested to stop, if we haven't reported it as stopped yet. Make - sure that LWPs the client want stopped, have a pending SIGSTOP. - -2010-04-26 Doug Evans <dje@google.com> - - * server.c (handle_general_set): Make static. - - * remote-utils.c (putpkt_binary_1): Call readchar instead of read. - Print received char after testing for error/eof instead of before. - (input_interrupt): Tweak comment. - -2010-04-23 Doug Evans <dje@google.com> - - * server.c (start_inferior): Print inferior argv if --debug. - -2010-04-21 Aleksandar Ristovski <aristovski@qnx.com> - - * Makefile.in (nto_low_h nto-low.o nto-x86-low.o): New dependency lists. - * nto-x86-low.c: Include server.h - -2010-04-20 Pierre Muller <muller@ics.u-strasbg.fr> - - * win32-i386-low.c: Use __x86_64__ macro instead of __x86_64 to - be consistent with other sources of this directory. - (init_registers_amd64): Correct name of source file of this function - in the comment. - -2010-04-19 Pierre Muller <muller@ics.u-strasbg.fr> - - * configure.srv (x86_64-*-mingw*): New configuration for Windows - 64-bit executables. - -2010-04-19 Pierre Muller <muller@ics.u-strasbg.fr> - - * win32-i386-low.c: Add 64-bit support. - (CONTEXT_EXTENDED_REGISTERS): Set macro to zero if not exisiting. - (init_registers_amd64): Declare. - (mappings): Add 64-bit version of array. - (init_windows_x86): New function. - (the_low_target): Change init_arch field to init_windows_x86. - -2010-04-19 Pierre Muller <muller@ics.u-strasbg.fr> - - * win32-low.c: Adapt to support also 64-bit architecture. - (child_xfer_memory): Use uintptr_t type for local variable `addr'. - (get_image_name): Use SIZE_T type for local variable `done'. - (psapi_get_dll_name): Use LPVOID type for parameter `BaseAddress'. - (toolhelp_get_dll_name): Idem. - (handle_load_dll): Use CORE_ADDR type for local variable `load_addr'. - Use uintptr_t typecast to avoid warning. - (handle_unload_dll): Use uintptr_t typecast to avoid warning. - (handle_exception): Use phex_nz to avoid warning. - (win32_wait): Remove unused local variable `process'. - -2010-04-19 Pierre Muller <muller@ics.u-strasbg.fr> - - * configure.srv (srv_amd64_regobj): Replace `x86-64-avx.o' by - `amd64-avx.o'. - -2010-04-17 Pierre Muller <muller@ics.u-strasbg.fr> - - * configure.ac: Use `ws2_32' library for srv_mingw. - * configure: Regenerate. - * gdbreplay.c: Include winsock2.h instead of winsock.h. - * remote-utils.c: Likewise. - -2010-04-17 H.J. Lu <hongjiu.lu@intel.com> - - * linux-x86-low.c (xmltarget_amd64_linux_no_xml): Define only - if __x86_64__ is defined. - -2010-04-16 Pierre Muller <muller@ics.u-strasbg.fr> - - * configure: Regenerate. - -2010-04-16 Pierre Muller <muller@ics.u-strasbg.fr> - - * server.c (handle_query): Handle 'qGetTIBAddr' query. - * target.h (target_ops): New get_tib_address field. - * win32-low.h (win32_thread_info): Add thread_local_base field. - * win32-low.c (child_add_thread): Add tlb argument. - Set thread_local_base field to TLB. - (get_child_debug_event): Adapt to child_add_thread change. - (win32_get_tib_address): New function. - (win32_target_ops): Set get_tib_address field to - win32_get_tib_address. - * linux-low.c (linux_target_ops): Set get_tib_address field to NULL. - -2010-04-12 Pedro Alves <pedro@codesourcery.com> - - * linux-low.c (linux_mourn): Also remove the process. - * server.c (handle_target_event): Don't remove the process here. - * nto-low.c (nto_mourn): New. - (nto_target_ops): Install it. - * spu-low.c (spu_mourn): New. - (spu_target_ops): Install it. - * win32-low.c (win32_mourn): New. - (win32_target_ops): Install it. - -2010-04-12 Pedro Alves <pedro@codesourcery.com> - - * server.h (buffer_xml_printf): Remove redundant `;'. - -2010-04-12 Pedro Alves <pedro@codesourcery.com> - - * regcache.c (set_register_cache): Invalidate regcaches before - changing the register cache layout. - (regcache_invalidate_one): Allow a NULL regcache. - * linux-x86-low.c (x86_linux_update_xmltarget): Invalidate - regcaches before changing the register cache layout or the target - regsets. - -2010-04-12 H.J. Lu <hongjiu.lu@intel.com> - - * linux-x86-low.c (x86_linux_update_xmltarget): Avoid unused - variable warning on Linux/x86-64. - -2010-04-11 Pedro Alves <pedro@codesourcery.com> - - GDBserver disconnected tracing support. - - * linux-low.c (linux_remove_process): Delete. - (add_lwp): Don't set last_resume_kind here. - (linux_kill): Use `mourn'. - (linux_detach): Use `thread_db_detach', and `mourn'. - (linux_mourn): New. - (linux_attach_lwp_1): Adjust comment. - (linux_attach): last_resume_kind moved the thread_info; adjust. - (status_pending_p_callback): Adjust. - (linux_wait_for_event_1): Adjust. - (count_events_callback, select_singlestep_lwp_callback) - (select_event_lwp_callback, cancel_breakpoints_callback) - (db_wants_lwp_stopped, linux_wait_1, need_step_over_p) - (proceed_one_lwp): Adjust. - (linux_async): Add debug output. - (linux_thread_stopped): New. - (linux_pause_all): New. - (linux_target_ops): Install linux_mourn, linux_thread_stopped and - linux_pause_all. - * linux-low.h (struct lwp_info): Delete last_resume_kind field. - (thread_db_free): Delete declaration. - (thread_db_detach, thread_db_mourn): Declare. - * thread-db.c (thread_db_init): Use thread_db_mourn. - (thread_db_free): Delete, split in two. - (disable_thread_event_reporting): New. - (thread_db_detach): New. - (thread_db_mourn): New. - - * server.h (struct thread_info) <last_resume_kind>: New field. - <attached>: Add comment. - <gdb_detached>: New field. - (handler_func): Change return type to int. - (handle_serial_event, handle_target_event): Ditto. - (gdb_connected): Declare. - (tracing): Delete. - (disconnected_tracing): Declare. - (stop_tracing): Declare. - - * server.c (handle_query) <qSupported>: Report support for - disconnected tracing. - (queue_stop_reply_callback): Account for running threads. - (gdb_wants_thread_stopped): New. - (gdb_wants_all_threads_stopped): New. - (gdb_reattached_process): New. - (handle_status): Clear the `gdb_detached' flag of all processes. - In all-stop, stop all threads. - (main): Be sure to leave tfind mode. Handle disconnected tracing. - (process_serial_event): If the remote connection breaks, or if an - exit was forced with "monitor exit", force an event loop exit. - Handle disconnected tracing on detach. - (handle_serial_event): Adjust. - (handle_target_event): If GDB isn't connected, forward events back - to the inferior, unless the last process exited, in which case, - exit gdbserver. Adjust interface. - - * remote-utils.c (remote_open): Don't block in accept. Instead - register an event loop source on the listen socket file - descriptor. Refactor bits into ... - (listen_desc): ... this new global. - (gdb_connected): ... this new function. - (enable_async_notification): ... this new function. - (handle_accept_event): ... this new function. - (remote_close): Clear remote_desc. - - * inferiors.c (add_thread): Set the new thread's last_resume_kind. - - * target.h (struct target_ops) <mourn, thread_stopped, pause_all>: - New fields. - (mourn_inferior): Define. - (target_process_qsupported): Avoid the dangling else problem. - (thread_stopped): Define. - (pause_all): Define. - (target_waitstatus_to_string): Declare. - * target.c (target_waitstatus_to_string): New. - - * tracepoint.c (tracing): Make extern. - (disconnected_tracing): New. - (stop_tracing): Make extern. Handle tracing stops due to GDB - disconnecting. - (cmd_qtdisconnected): New. - (cmd_qtstatus): Report disconnected tracing status in trace reply. - (handle_tracepoint_general_set): Handle QTDisconnected. - - * event-loop.c (event_handler_func): Change return type to int. - (process_event): Bail out if the event handler wants the event - loop to stop. - (handle_file_event): Ditto. - (start_event_loop): Bail out if the event handler wants the event - loop to stop. - - * nto-low.c (nto_target_ops): Adjust. - * spu-low.c (spu_wait): Don't remove the process here. - (spu_target_ops): Adjust. - * win32-low.c (win32_wait): Don't remove the process here. - (win32_target_ops): Adjust. - -2010-04-11 Pedro Alves <pedro@codesourcery.com> - - * regcache.c (realloc_register_cache): Invalidate inferior's - regcache before recreating it. - -2010-04-09 Pedro Alves <pedro@codesourcery.com> - - * tracepoint.c (cmd_qtstatus): Report trace buffer circularity. - -2010-04-09 Stan Shebs <stan@codesourcery.com> - Pedro Alves <pedro@codesourcery.com> - - * server.h (LONGEST): New. - (struct thread_info) <while_stepping>: New field. - (unpack_varlen_hex, xrealloc, pulongest, plongest, phex_nz): - Declare. - (initialize_tracepoint, handle_tracepoint_general_set) - (handle_tracepoint_query, tracepoint_finished_step) - (tracepoint_was_hit, release_while_stepping_state_list): - (current_traceframe): Declare. - * server.c (handle_general_set): Handle tracepoint packets. - (read_memory): New. - (write_memory): New. - (handle_search_memory_1): Use read_memory. - (handle_query): Report support for conditional tracepoints, trace - state variables, and tracepoint sources. Handle tracepoint - queries. - (main): Initialize the tracepoints module. - (process_serial_event): Handle traceframe reads/writes. - - * linux-low.c (handle_tracepoints): New. - (linux_wait_1): Call it. - (linux_resume_one_lwp): Handle while-stepping. - (linux_supports_tracepoints, linux_read_pc, linux_write_pc): New. - (linux_target_ops): Install them. - * linux-low.h (struct linux_target_ops) <supports_tracepoints>: - New field. - * linux-x86-low.c (x86_supports_tracepoints): New. - (the_low_target). Install it. - - * mem-break.h (delete_breakpoint): Declare. - * mem-break.c (delete_breakpoint): Make external. - - * target.h (struct target_ops): Add `supports_tracepoints', - `read_pc', and `write_pc' fields. - (target_supports_tracepoints): Define. - * utils.c (xrealloc, decimal2str, pulongest, plongest, thirty_two) - (phex_nz): New. - - * regcache.h (struct regcache) <registers_owned>: New field. - (init_register_cache, regcache_cpy): Declare. - (regcache_read_pc, regcache_write_pc): Declare. - (register_cache_size): Declare. - (supply_regblock): Declare. - * regcache.c (init_register_cache): New. - (new_register_cache): Use it. - (regcache_cpy): New. - (register_cache_size): New. - (supply_regblock): New. - (regcache_read_pc, regcache_write_pc): New. - - * tracepoint.c: New. - - * Makefile.in (OBS): Add tracepoint.o. - (tracepoint.o): New rule. - -2010-04-08 H.J. Lu <hongjiu.lu@intel.com> - - * Makefile.in (clean): Also remove i386-mmx.c i386-mmx-linux.c. - (i386-mmx.o): New. - (i386-mmx.c): Likewise. - (i386-mmx-linux.o): Likewise. - (i386-mmx-linux.c): Likewise. - - * configure.srv (srv_i386_regobj): Add i386-mmx.o. - (srv_i386_linux_regobj): Add i386-mmx-linux.o. - (srv_i386_xmlfiles): Add i386/i386-mmx.xml. - (srv_i386_linux_xmlfiles): Add i386/i386-mmx-linux.xml. - - * linux-x86-low.c (init_registers_i386_mmx_linux): New. - (x86_linux_update_xmltarget): Call init_registers_i386_mmx_linux - and return if ptrace PTRACE_GETFPXREGS failed in 32bit. - -2010-04-07 H.J. Lu <hongjiu.lu@intel.com> - - * Makefile.in (clean): Updated. - (i386-avx.o): New. - (i386-avx.c): Likewise. - (i386-avx-linux.o): Likewise. - (i386-avx-linux.c): Likewise. - (amd64-avx.o): Likewise. - (amd64-avx.c): Likewise. - (amd64-avx-linux.o): Likewise. - (amd64-avx-linux.c): Likewise. - - * configure.srv (srv_i386_regobj): Add i386-avx.o. - (srv_i386_linux_regobj): Add i386-avx-linux.o. - (srv_amd64_regobj): Add amd64-avx.o. - (srv_amd64_linux_regobj): Add amd64-avx-linux.o. - (srv_i386_32bit_xmlfiles): Add i386/32bit-avx.xml. - (srv_i386_64bit_xmlfiles): Add i386/64bit-avx.xml. - (srv_i386_xmlfiles): Add i386/i386-avx.xml. - (srv_amd64_xmlfiles): Add i386/amd64-avx.xml. - (srv_i386_linux_xmlfiles): Add i386/i386-avx-linux.xml. - (srv_amd64_linux_xmlfiles): Add i386/amd64-avx-linux.xml. - - * i387-fp.c: Include "i386-xstate.h". - (i387_xsave): New. - (i387_cache_to_xsave): Likewise. - (i387_xsave_to_cache): Likewise. - (x86_xcr0): Likewise. - - * i387-fp.h (i387_cache_to_xsave): Likewise. - (i387_xsave_to_cache): Likewise. - (x86_xcr0): Likewise. - - * linux-arm-low.c (target_regsets): Initialize nt_type to 0. - * linux-crisv32-low.c (target_regsets): Likewise. - * linux-m68k-low.c (target_regsets): Likewise. - * linux-mips-low.c (target_regsets): Likewise. - * linux-ppc-low.c (target_regsets): Likewise. - * linux-s390-low.c (target_regsets): Likewise. - * linux-sh-low.c (target_regsets): Likewise. - * linux-sparc-low.c (target_regsets): Likewise. - * linux-xtensa-low.c (target_regsets): Likewise. - - * linux-low.c: Include <sys/uio.h>. - (regsets_fetch_inferior_registers): Support nt_type. - (regsets_store_inferior_registers): Likewise. - (linux_process_qsupported): New. - (linux_target_ops): Add linux_process_qsupported. - - * linux-low.h (regset_info): Add nt_type. - (linux_target_ops): Add process_qsupported. - - * linux-x86-low.c: Include "i386-xstate.h", "elf/common.h" - and <sys/uio.h>. - (init_registers_i386_avx_linux): New. - (init_registers_amd64_avx_linux): Likewise. - (xmltarget_i386_linux_no_xml): Likewise. - (xmltarget_amd64_linux_no_xml): Likewise. - (PTRACE_GETREGSET): Likewise. - (PTRACE_SETREGSET): Likewise. - (x86_fill_xstateregset): Likewise. - (x86_store_xstateregset): Likewise. - (use_xml): Likewise. - (x86_linux_update_xmltarget): Likewise. - (x86_linux_process_qsupported): Likewise. - (target_regsets): Add NT_X86_XSTATE entry and Initialize nt_type. - (x86_arch_setup): Don't call init_registers_amd64_linux nor - init_registers_i386_linux here. Call - x86_linux_update_xmltarget. - (the_low_target): Add x86_linux_process_qsupported. - - * server.c (handle_query): Call target_process_qsupported. - - * target.h (target_ops): Add process_qsupported. - (target_process_qsupported): New. - -2010-04-03 Pedro Alves <pedro@codesourcery.com> - - * inferiors.c (add_thread): Set last_status kind to - TARGET_WAITKIND_IGNORE. - * linux-low.c (cancel_breakpoint): Remove unnecessary regcache - fetch. Use ptid_of. Avoid unnecessary get_lwp_thread calls. - (linux_wait_1): Move `thread' local definition to block that uses - it. Don't NULL initialize `event_child'. - (linux_resume_one_thread): Avoid unnecessary get_lwp_thread calls. - Alway set the thread's last_status to TARGET_WAITKIND_IGNORE. - * linux-x86-low.c (x86_breakpoint_at): Read raw memory. - -2010-04-01 Pedro Alves <pedro@codesourcery.com> - - * linux-low.c (get_stop_pc): Don't adjust the PC if stopped with - an extended waitstatus, or by a watchpoint. - (cancel_breakpoints_callback): Don't cancel a breakpoint if the - thread was stepping or has been stopped by a watchpoint. - -2010-04-01 Pedro Alves <pedro@codesourcery.com> - - * mem-break.c (struct raw_breakpoint): New field shlib_disabled. - (set_gdb_breakpoint_at): If GDB is inserting a breakpoint on top - of another, then delete the previous, and validate all - breakpoints. - (validate_inserted_breakpoint): New. - (delete_disabled_breakpoints): New. - (validate_breakpoints): New. - (check_mem_read): Validate breakpoints before trusting their - shadow. Delete disabled breakpoints. - (check_mem_write): Validate breakpoints before trusting they - should be inserted. Delete disabled breakpoints. - * mem-break.h (validate_breakpoints): - * server.c (handle_query): Validate breakpoints when we see a - qSymbol query. - -2010-04-01 Pedro Alves <pedro@codesourcery.com> - - * linux-low.c (linux_wait_1): Avoid setting need_step_over is - there's a GDB breakpoint at stop_pc. Always report a trap to GDB - if we could tell there's a GDB breakpoint at stop_pc. - (need_step_over_p): Don't do a step over if we find a GDB - breakpoint at the resume PC. - - * mem-break.c (struct raw_breakpoint): New. - (enum bkpt_type): New type `gdb_breakpoint'. - (struct breakpoint): Delete the `PC', `old_data' and `inserted' - fields. New field `raw'. - (find_raw_breakpoint_at): New. - (set_raw_breakpoint_at): Handle refcounting. Create a raw - breakpoint instead. - (set_breakpoint_at): Adjust. - (delete_raw_breakpoint): New. - (release_breakpoint): New. - (delete_breakpoint): Rename to... - (delete_breakpoint_1): ... this. Add proc parameter. Use - release_breakpoint. Return ENOENT. - (delete_breakpoint): Reimplement. - (find_breakpoint_at): Delete. - (find_gdb_breakpoint_at): New. - (delete_breakpoint_at): Delete. - (set_gdb_breakpoint_at): New. - (delete_gdb_breakpoint_at): New. - (gdb_breakpoint_here): New. - (set_reinsert_breakpoint): Use release_breakpoint. - (uninsert_breakpoint): Rename to ... - (uninsert_raw_breakpoint): ... this. - (uninsert_breakpoints_at): Adjust to handle raw breakpoints. - (reinsert_raw_breakpoint): Change parameter type to - raw_breakpoint. - (reinsert_breakpoints_at): Adjust to handle raw breakpoints - instead. - (check_breakpoints): Adjust. Use release_breakpoint. - (breakpoint_here): Rewrite using find_raw_breakpoint_at. - (breakpoint_inserted_here): Ditto. - (check_mem_read): Adjust to iterate over raw breakpoints instead. - Don't trust the breakpoint's shadow if it is not inserted. - (check_mem_write): Adjust to iterate over raw breakpoints instead. - (delete_all_breakpoints): Adjust. - (free_all_breakpoints): Mark all breakpoints as uninserted, and - use delete_breakpoint_1. - - * mem-break.h (breakpoints_supported): Delete declaration. - (set_gdb_breakpoint_at): Declare. - (gdb_breakpoint_here): Declare. - (delete_breakpoint_at): Delete. - (delete_gdb_breakpoint_at): Declare. - - * server.h (struct raw_breakpoint): Forward declare. - (struct process_info): New field `raw_breakpoints'. - - * linux-x86-low.c (x86_insert_point, x86_remote_point): Handle Z0 - breakpoints. - -2010-03-24 Pedro Alves <pedro@codesourcery.com> - - * linux-low.c (status_pending_p_callback): Fix comment. - (linux_wait_for_event_1): Move most of the internal breakpoint - handling from here... - (linux_wait_1): ... to here. - (count_events_callback): New. - (select_singlestep_lwp_callback): New. - (select_event_lwp_callback): New. - (cancel_breakpoints_callback): New. - (select_event_lwp): New. - (linux_wait_1): Simplify internal breakpoint handling. Give equal - priority to all LWPs that have had events that should be reported - to the client. Cancel breakpoints when about to reporting the - event to the client, not while stopping lwps. No longer cancel - finished single-steps here. - (cancel_finished_single_step): Delete. - (cancel_finished_single_steps): Delete. - -2010-03-24 Pedro Alves <pedro@codesourcery.com> - - * mem-break.c (enum bkpt_type): New. - (struct breakpoint): New field `type'. - (set_breakpoint_at): Change return type to struct breakpoint - pointer. Set type to `other_breakpoint' by default. - (delete_breakpoint): Rewrite, supporting more than one breakpoint - in the breakpoint list. - (delete_reinsert_breakpoints): Only delete reinsert breakpoints. - (reinsert_breakpoint): Rename to ... - (reinsert_raw_breakpoint): ... this. - (reinsert_breakpoints_at): Adjust. - * mem-break.h (struct breakpoint): Declare. - (set_breakpoint_at): Change return type to struct breakpoint - pointer. - -2010-03-24 Pedro Alves <pedro@codesourcery.com> - - * server.c (handle_query): Assign, not compare. - -2010-03-24 Pedro Alves <pedro@codesourcery.com> - - Teach linux gdbserver to step-over-breakpoints. - - * linux-low.c (can_hardware_single_step): New. - (supports_breakpoints): New. - (handle_extended_wait): If stopping threads, read the stop pc of - the new cloned LWP. - (get_pc): New. - (get_stop_pc): Add `lwp' parameter. Handle it. Bail out if the - low target doesn't support retrieving the PC. - (add_lwp): Set last_resume_kind to resume_continue. - (linux_attach_lwp_1): Adjust comments. Always set stop_expected. - (linux_attach): Don't clear stop_expected. Set the lwp's - last_resume_kind to resume_stop. - (linux_detach_one_lwp): Don't check for removed breakpoints. - (check_removed_breakpoint): Delete. - (status_pending_p): Rename to ... - (status_pending_p_callback): ... this. Don't check for removed - breakpoints. Don't consider threads that are stopped from GDB's - perspective. - (linux_wait_for_lwp): Always read the stop_pc here. - (cancel_breakpoint): New. - (step_over_bkpt): New global. - (linux_wait_for_event_1): Implement stepping over breakpoints. - (gdb_wants_lwp_stopped): New. - (gdb_wants_all_stopped): New. - (linux_wait_1): Tag threads as gdb-wants-stopped. Cancel finished - single-step traps here. Store the thread's last reported target - wait status. - (send_sigstop): Don't clear stop_expected. Always set it, - instead. - (mark_lwp_dead): Remove reference to pending_is_breakpoint. - (cancel_finished_single_step): New. - (cancel_finished_single_steps): New. - (wait_for_sigstop): Don't cancel finished single-step traps here. - (linux_resume_one_lwp): Don't check for removed breakpoints. - Don't set `step' on non-hardware step archs. - (linux_set_resume_request): Ignore resume_stop requests if already - stopping or stopped. Set the lwp's last_resume_kind. - (resume_status_pending_p): Don't check for removed breakpoints. - (need_step_over_p): New. - (start_step_over): New. - (finish_step_over): New. - (linux_resume_one_thread): Always queue a sigstop for resume_stop - requests. Clear the thread's last reported target waitstatus. - Don't use the `suspended' flag. Don't consider pending breakpoints. - (linux_resume): Start a step-over if necessary. - (proceed_one_lwp): New. - (proceed_all_lwps): New. - (unstop_all_lwps): New. - * linux-low.h (struct lwp_info): Rewrite comment for the - `suspended' flag. Add the `stop_pc' field. Delete the - `pending_stop_pc' field. Tweak the `stepping' flag's comment. - Add `'last_resume_kind' and `need_step_over' fields. - * inferiors.c (struct thread_info): Delete, moved elsewhere. - * mem-break.c (struct breakpoint): Delete `reinserting' flag. - Delete `breakpoint_to_reinsert' field. New flag `inserted'. - (set_raw_breakpoint_at): New. - (set_breakpoint_at): Rewrite to use it. - (reinsert_breakpoint_handler): Delete. - (set_reinsert_breakpoint): New. - (reinsert_breakpoint_by_bp): Delete. - (delete_reinsert_breakpoints): New. - (uninsert_breakpoint): Rewrite. - (uninsert_breakpoints_at): New. - (reinsert_breakpoint): Rewrite. - (reinsert_breakpoints_at): New. - (check_breakpoints): Rewrite. - (breakpoint_here): New. - (breakpoint_inserted_here): New. - (check_mem_read): Adjust. - * mem-break.h (breakpoints_supported, breakpoint_here) - (breakpoint_inserted_here, set_reinsert_breakpoint): Declare. - (reinsert_breakpoint_by_bp): Delete declaration. - (delete_reinsert_breakpoints): Declare. - (reinsert_breakpoint): Delete declaration. - (reinsert_breakpoints_at): Declare. - (uninsert_breakpoint): Delete declaration. - (uninsert_breakpoints_at): Declare. - (check_breakpoints): Adjust prototype. - * server.h: Adjust include order. - (struct thread_info): Declare here. Add a `last_status' field. - -2010-03-23 Michael Snyder <msnyder@vmware.com> - - * server.c (crc32): New function. - (handle_query): Add handling for 'qCRC:' request. - -2010-03-23 Pedro Alves <pedro@codesourcery.com> - - * linux-x86-low.c (x86_linux_prepare_to_resume): Clear DR6 if the - lwp had been stopped by a watchpoint. - -2010-03-16 Pedro Alves <pedro@codesourcery.com> - - * server.h (internal_error): Declare. - (gdb_assert, ASSERT_FUNCTION, gdb_assert_fail): Define. - * utils.c (internal_error): New function. - -2010-03-15 Andreas Schwab <schwab@redhat.com> - - * configure.srv: Fix typo setting srv_regobj. - -2010-03-15 Pedro Alves <pedro@codesourcery.com> - - * linux-low.c (fetch_register): Avoid passing a non string literal - format to `error'. - (usr_store_inferior_registers): Ditto. - -2010-03-14 Pedro Alves <pedro@codesourcery.com> - - * linux-low.c (linux_write_memory): Bail out early if peeking - memory failed. - -2010-03-14 Pedro Alves <pedro@codesourcery.com> - - * linux-low.h (struct lwp_info): New fields - `stopped_by_watchpoint' and `stopped_data_address'. - * linux-low.c (linux_wait_for_lwp): Check for watchpoint triggers - here, and cache them in the lwp object. - (wait_for_sigstop): Check stopped_by_watchpoint lwp field - directly. - (linux_resume_one_lwp): Clear the lwp's stopped_by_watchpoint - field. - (linux_stopped_by_watchpoint): Rewrite. - (linux_stopped_data_address): Rewrite. - -2010-03-06 Simo Melenius <simo.melenius@iki.fi> - - * linux-low.c (linux_wait_for_lwp): Fetch the regcache after - switching the current inferior, not before. - -2010-03-01 H.J. Lu <hongjiu.lu@intel.com> - - * Makefile.in (clean): Replace reg-i386.c, reg-x86-64.c, - reg-i386-linux.c and reg-x86-64-linux.c with i386.c, amd64.c, - i386-linux.c and amd64-linux.c. - (reg-i386.o): Removed. - (reg-i386.c): Likewise. - (reg-i386-linux.o): Likewise. - (reg-i386-linux.c): Likewise. - (reg-x86-64.o): Likewise. - (reg-x86-64.c): Likewise. - (reg-x86-64-linux.o): Likewise. - (reg-x86-64-linux.c): Likewise. - (i386.o): New. - (i386.c): Likewise. - (i386-linux.o): Likewise. - (i386-linux.c): Likewise. - (amd64.o): Likewise. - (amd64.c): Likewise. - (amd64-linux.o): Likewise. - (amd64-linux.c): Likewise. - - * configure.srv (srv_i386_regobj): New. - (srv_i386_linux_regobj): Likewise. - (srv_amd64_regobj): Likewise. - (srv_amd64_linux_regobj): Likewise. - (srv_i386_32bit_xmlfiles): Likewise. - (srv_i386_64bit_xmlfiles): Likewise. - (srv_i386_xmlfiles): Likewise. - (srv_amd64_xmlfiles): Likewise. - (srv_i386_linux_xmlfiles): Likewise. - (srv_amd64_linux_xmlfiles): Likewise. - (i[34567]86-*-cygwin*): Set srv_regobj to $srv_i386_regobj. Set - srv_xmlfiles to $srv_i386_xmlfiles. - (i[34567]86-*-mingw32ce*): Likewise. - (i[34567]86-*-mingw*): Likewise. - (i[34567]86-*-nto*): Likewise. - (i[34567]86-*-linux*): Set srv_regobj to $srv_i386_linux_regobj - and $srv_amd64_linux_regobj. Set srv_xmlfiles to - $srv_i386_linux_xmlfiles and $srv_amd64_linux_xmlfiles. - (x86_64-*-linux*): Likewise. - - * linux-x86-low.c (init_registers_x86_64_linux): Removed. - (init_registers_amd64_linux): New. - (x86_arch_setup): Replace init_registers_x86_64_linux with - init_registers_amd64_linux. - -2010-02-23 Maxim Kuvyrkov <maxim@codesourcery.com> - - * configure.ac: Check for libdl. If it is not available link against - static libthread_db. - * configure: Regenerate. - -2010-02-22 Pedro Alves <pedro@codesourcery.com> - - PR9605 - - * i386-low.c (i386_length_and_rw_bits): Throw a fatal error if - handing a read watchpoint. - (i386_low_insert_watchpoint): Read watchpoints aren't supported. - -2010-02-12 Doug Evans <dje@google.com> - - * linux-low.c (linux_supports_tracefork_flag): Document. - (linux_look_up_symbols): Add comment. - -2010-02-03 H.J. Lu <hongjiu.lu@intel.com> - - * regcache.c (supply_register): Clear regcache if buf is NULL. - -2010-02-02 Nicolas Roche <roche@sourceware.org> - Joel Brobecker <brobecker@adacore.com> - - * inferiors.c (find_inferior): Add function documentation. - (unloaded_dll): Handle the case where the unloaded dll has not - been previously registered in the dll list. - -2010-02-01 Daniel Jacobowitz <dan@codesourcery.com> - - * linux-arm-low.c (thumb_breakpoint_len): Delete. - (thumb2_breakpoint): New. - (arm_breakpoint_at): Check for Thumb-2 breakpoints. - -2010-01-29 Daniel Jacobowitz <dan@codesourcery.com> - - * linux-low.c (get_stop_pc): Check for SIGTRAP. - (linux_wait_for_event_1): Handle SIGILL and SIGSEGV as possible - breakpoints. - -2010-01-21 Pedro Alves <pedro@codesourcery.com> - - * linux-ppc-low.c (ppc_arch_setup): Adjust to regcache changes. - -2010-01-21 Jan Kratochvil <jan.kratochvil@redhat.com> - - * linux-s390-low.c (s390_collect_ptrace_register) - (s390_supply_ptrace_register): Adjust it for the new regcache parameter. - -2010-01-21 Doug Evans <dje@google.com> - - * linux-low.c (PTRACE_ARG3_TYPE): Change from long to void*. - (PTRACE_ARG4_TYPE): New macro. - (handle_extended_wait): Cast ptrace arg4 to PTRACE_ARG4_TYPE. - (linux_wait_for_event_1, linux_resume_one_lwp): Ditto. - (fetch_register): Cast to uintptr_t before casting to PTRACE_ARG3_TYPE. - (usr_store_inferior_registers): Ditto. - (linux_read_memory, linux_write_memory): Ditto. - (linux_test_for_tracefork): Ditto. - - * linux-arm-low.c: Remove redundant include of gdb_proc_service.h. - Only include elf.h if gdb_proc_service.h didn't include linux/elf.h. - -2010-01-21 Pedro Alves <pedro@codesourcery.com> - - * proc-service.c (ps_lgetregs): Don't refetch registers from the - target. - -2010-01-21 Pedro Alves <pedro@codesourcery.com> - - * spu-low.c (spu_fetch_registers, spu_store_registers): Change - prototype to take a regcache. Adjust. - -2010-01-20 Pedro Alves <pedro@codesourcery.com> - - * regcache.h (struct thread_info): Forward declare. - (struct regcache): New. - (new_register_cache): Adjust prototype. - (get_thread_regcache): Declare. - (free_register_cache): Adjust prototype. - (registers_to_string, registers_from_string): Ditto. - (supply_register, supply_register_by_name, collect_register) - (collect_register_as_string, collect_register_by_name): Ditto. - * regcache.c (struct inferior_regcache_data): Delete. - (get_regcache): Rename to ... - (get_thread_regcache): ... this. Adjust. Switch inferior before - fetching registers. - (regcache_invalidate_one): Adjust. - (regcache_invalidate): Fix prototype. - (new_register_cache): Return the new register cache. - (free_register_cache): Change prototype. - (realloc_register_cache): Adjust. - (registers_to_string): Change prototype to take a regcache. Adjust. - (registers_from_string): Ditto. - (register_data): Ditto. - (supply_register): Ditto. - (supply_register_by_name): Ditto. - (collect_register): Ditto. - (collect_register_as_string): Ditto. - (collect_register_by_name): Ditto. - * server.c (process_serial_event): Adjust. - * linux-low.h (regset_fill_func, regset_store_func): Change - prototype. - (get_pc, set_pc, collect_ptrace_register, supply_ptrace_register): - Change prototype. - * linux-low.c (get_stop_pc): Adjust. - (check_removed_breakpoint): Adjust. - (linux_wait_for_event): Adjust. - (linux_resume_one_lwp): Adjust. - (fetch_register): Add regcache parameter. Adjust. - (usr_store_inferior_registers): Ditto. - (regsets_fetch_inferior_registers): Ditto. - (regsets_store_inferior_registers): Ditto. - (linux_fetch_registers, linux_store_registers): Ditto. - * i387-fp.c (i387_cache_to_fsave): Change prototype to take a - regcache. Adjust. - (i387_fsave_to_cache, i387_cache_to_fxsave, i387_fxsave_to_cache): - Ditto. - * i387-fp.h (i387_cache_to_fsave, i387_fsave_to_cache): Change - prototype to take a regcache. - (i387_cache_to_fxsave, i387_fxsave_to_cache): Ditto. - * remote-utils.c (convert_ascii_to_int, outreg) - (prepare_resume_reply): Change prototype to take a regcache. - Adjust. - * target.h (struct target_ops) <fetch_registers, store_registers>: - Change prototype to take a regcache. - (fetch_inferior_registers, store_inferior_registers): Change - prototype to take a regcache. Adjust. - * proc-service.c (ps_lgetregs): Adjust. - * linux-x86-low.c (x86_fill_gregset, x86_store_gregset) - (x86_fill_fpregset, x86_store_fpregset, x86_fill_fpxregset) - (x86_store_fpxregset, x86_get_pc, x86_set_pc): Change prototype to - take a regcache. Adjust. - * linux-arm-low.c (arm_fill_gregset, arm_store_gregset) - (arm_fill_wmmxregset, arm_store_wmmxregset, arm_fill_vfpregset) - (arm_store_vfpregset, arm_get_pc, arm_set_pc): - (arm_breakpoint_at): Change prototype to take a regcache. Adjust. - * linux-cris-low.c (cris_get_pc, cris_set_pc) - (cris_cannot_fetch_register): - (cris_breakpoint_at): Change prototype to take a regcache. - Adjust. - * linux-crisv32-low.c (cris_get_pc, cris_set_pc, - cris_reinsert_addr, cris_write_data_breakpoint): Change prototype - to take a regcache. Adjust. - (cris_breakpoint_at, cris_insert_point, cris_remove_point): - Adjust. - * linux-m32r-low.c (m32r_get_pc, m32r_set_pc): Change prototype to - take a regcache. Adjust. - * linux-m68k-low.c (m68k_fill_gregset, m68k_store_gregset) - (m68k_fill_fpregset, m68k_store_fpregset, m68k_get_pc, - (m68k_set_pc): Change prototype to take a regcache. Adjust. - * linux-mips-low.c (mips_get_pc): - (mips_set_pc): Change prototype to take a regcache. Adjust. - (mips_reinsert_addr): Adjust. - (mips_collect_register): Change prototype to take a regcache. - Adjust. - (mips_supply_register): - (mips_collect_register_32bit, mips_supply_register_32bit) - (mips_fill_gregset, mips_store_gregset, mips_fill_fpregset) - (mips_store_fpregset): Ditto. - * linux-ppc-low.c (ppc_supply_ptrace_register) - (ppc_supply_ptrace_register): Ditto. - (parse_spufs_run): Adjust. - (ppc_get_pc, ppc_set_pc, ppc_fill_gregset, ppc_fill_vsxregset) - (ppc_store_vsxregset, ppc_fill_vrregset, ppc_store_vrregset) - (ppc_fill_evrregset, ppc_store_evrregset): Change prototype to - take a regcache. Adjust. - * linux-s390-low.c (s390_collect_ptrace_register) - (s390_supply_ptrace_register, s390_fill_gregset, s390_get_pc) - (s390_set_pc): Change prototype to take a regcache. Adjust. - (s390_arch_setup): Adjust. - * linux-sh-low.c (sh_get_pc, sh_breakpoint_at) - (sh_fill_gregset): Change prototype to take a regcache. Adjust. - * linux-sparc-low.c (sparc_fill_gregset_to_stack) - (sparc_fill_gregset, sparc_store_gregset_from_stack) - (sparc_store_gregset, sparc_get_pc): Change prototype to take a - regcache. Adjust. - (sparc_breakpoint_at): Adjust. - * linux-xtensa-low.c (xtensa_fill_gregset): - (xtensa_store_gregset): - (xtensa_fill_xtregset, xtensa_store_xtregset, xtensa_get_pc) - (xtensa_set_pc): Change prototype to take a regcache. Adjust. - * nto-low.c (nto_fetch_registers, nto_store_registers): Change - prototype to take a regcache. Adjust. - * win32-arm-low.c (arm_fetch_inferior_register) - (arm_store_inferior_register): Change prototype to take a - regcache. Adjust. - * win32-i386-low.c (i386_fetch_inferior_register) - (i386_store_inferior_register): Change prototype to take a - regcache. Adjust. - * win32-low.c (child_fetch_inferior_registers) - (child_store_inferior_registers): Change prototype to take a - regcache. Adjust. - (win32_wait): Adjust. - (win32_fetch_inferior_registers): Change prototype to take a - regcache. Adjust. - (win32_store_inferior_registers): Adjust. - * win32-low.h (struct win32_target_ops) <fetch_inferior_register, - store_inferior_register>: Change prototype to take a regcache. - -2010-01-20 Doug Evans <dje@google.com> - - * linux-low.c (linux_create_inferior): Wrap use of __SIGRTMIN in - #ifdef. - (linux_wait_for_event1, linux_init_signals): Ditto. - (W_STOPCODE): Provide definition if missing. - -2010-01-13 Vladimir Prus <vladimir@codesourcery.com> - - * linux-low.c (linux_core_of_thread): New. - (compare_ints, show_process, list_threads): New. - (linux_qxfer_osdata): Report threads and cores. - (linux_target_op): Register linux_core_of_thread. - * remote-utils.c (prepare_resume_reply): Report the core. - (buffer_xml_printf): Support %d specifier. - * server.c (handle_threads_qxfer_proper, handle_threads_qxfer): - New. - (handle_query): Handle qXfer:threads. Announce availability - thereof. - * target.h (struct target_ops): New field core_of_thread. - -2010-01-04 Ulrich Weigand <uweigand@de.ibm.com> - - * Makefile.in (clean): Remove new generated files. - (reg-s390.o, reg-s390.c): Remove rules. - (reg-s390x.o, reg-s390x.c): Likewise. - (s390-linux32.o, s390-linux32.c): Add rules. - (s390-linux64.o, s390-linux64.c): Likewise. - (s390x-linux64.o, s390x-linux64.c): Likewise. - * configure.srv (s390*-*-linux*): Update srv_regobj and srv_xmlfiles. - * linux-s390-low.c: Include <elf.h>. - (HWCAP_S390_HIGH_GPRS): Define if undefined. - (init_registers_s390): Remove prototype. - (init_registers_s390x): Likewise. - (init_registers_s390_linux32): Add prototype. - (init_registers_s390_linux64): Likewise. - (init_registers_s390x_linux64): Likewise. - (s390_num_regs_3264): New define. - (s390_regmap_3264): New global variable. - (s390_cannot_fetch_register): Remove obsolete check. - (s390_cannot_store_register): Likewise. - (s390_collect_ptrace_register): Handle upper/lower register halves. - (s390_supply_ptrace_register): Likewise. - (s390_fill_gregset): Update to register number changes. - (s390_get_hwcap): New routine. - (s390_arch_setup): Detect 32-bit process running on 64-bit system. - Install appropriate regmap and register set. - -2010-01-01 Joel Brobecker <brobecker@adacore.com> - - * server.c (gdbserver_version): Update copyright year to 2010. - * gdbreplay.c (gdbreplay_version): Likewise. - -2009-12-28 Doug Evans <dje@google.com> - - * linux-low.c: Delete inclusion of ansidecl.h, elf/common.h, - elf/external.h. Include <elf.h> instead but only if necessary. - -2009-12-28 Pedro Alves <pedro@codesourcery.com> - - * linux-low.c (linux_remove_process): Remove `detaching' - parameter. Don't release/detach from thread_db here. - (linux_kill): Release/detach from thread_db here, ... - (linux_detach): ... and here, before actually detaching. - (linux_wait_1): ... and here, when a process exits. - * thread-db.c (any_thread_of): New. - (thread_db_free): Switch the current inferior to a thread of the - passed in process. - -2009-12-21 Doug Evans <dje@google.com> - - * linux-x86-low.c: Delete outdated comment about Elf32_Phdr. - - * linux-low.c (kill_lwp): Use __NR_tkill instead of SYS_tkill. - Move definition of tkill_failed to ifdef __NR_tkill to avoid gcc - warning ifndef __NR_tkill. Move setting of errno there too. - Delete unnecessary resetting of errno after syscall. - Minor comment changes to match gdb/linux-nat.c:kill_lwp. - - * configure.ac: Check for dladdr. - * config.in: Regenerate. - * configure: Regenerate. - * thread-db.c (dladdr_to_soname): Only define ifdef HAVE_DLADDR. - (try_thread_db_load): Update. - - * linux-low.c (my_waitpid): Delete unnecessary prototype. - -2009-12-18 Doug Evans <dje@google.com> - - * event-loop.c: Include unistd.h if it exists. - - * linux-low.c (my_waitpid): Move definition away from being in - between linux_tracefork_child/linux_test_for_tracefork. - - * gdb_proc_service.h (psaddr_t): Fix type. - * thread-db.c (thread_db_info.td_thr_tls_get_addr_p): Fix - signature to match glibc. - -2009-12-16 Doug Evans <dje@google.com> - - * linux-low.c (linux_read_memory): Fix argument to read. - -2009-11-26 Pedro Alves <pedro@codesourcery.com> - - * win32-low.c (get_child_debug_event): On EXIT_THREAD_DEBUG_EVENT - events, don't leave current_inferior pointing at null. - -2009-11-26 Pedro Alves <pedro@codesourcery.com> - - * win32-low.c (LOG): Delete. - (OUTMSG): Output to stderr. - (OUTMSG2): Conditionalize on `debug_threads' variable, instead of - on compile time LOG macro. - (win32_wait): Fix debug output. - -2009-11-26 Pedro Alves <pedro@codesourcery.com> - - * win32-low.c (win32_add_one_solib): If the dll name is - "ntdll.dll", prepend the system directory to the dll path. - -2009-11-17 Daniel Jacobowitz <dan@codesourcery.com> - - * m68k-tdep.c (m68k_gdbarch_init): Reuse previous initialization. - -2009-11-17 Nathan Sidwell <nathan@codesourcery.com> - Vladimir Prus <vladimir@codesourcery.com> - - * Makefile.in (reg-cf.o, reg-cf.c): New targets. - * configure.ac: Check for __mcoldfire__ and set - gdb_cv_m68k_is_coldfire. - * configure.srv: Use gdb_cv_m68k_is_coldfire to select between - reg-cf.o and reg-m68k.o. - * configure: Regenerated. - -2009-11-16 Pedro Alves <pedro@codesourcery.com> - - * linux-low.c (linux_remove_process): Add `detaching' parameter. - Pass it to thread_db_free. - (linux_kill, linux_detach, linux_wait_1): Adjust to pass the - proper `detaching' argument to linux_remove_process. - * linux-low.h (thread_db_free): Add `detaching' parameter. - * thread-db.c (thread_db_init): Pass false as `detaching' argument - to thread_db_free. - (thread_db_free): Add `detaching' parameter. Only - call td_ta_clear_event if detaching from process. - -2009-11-12 Maxim Kuvyrkov <maxim@codesourcery.com> - - * thread-db.c (thread_db_free): Fix typo. - -2009-11-11 Paul Pluzhnikov <ppluzhnikov@google.com> - - PR gdb/10838 - * thread-db.c (thread_db_free): Call td_ta_clear_event. - -2009-11-03 Nathan Sidwell <nathan@codesourcery.com> - - * configure.ac (i[34567]86-*): Check if we're targetting x86-64 - with an i686 compiler. - * configure.srv (i[34567]86-*-linux*): Pull in x86-64 handling if - needed. - * configure: Rebuilt. - -2009-10-29 Sandra Loosemore <sandra@codesourcery.com> - - PR gdb/10783 - - * server.c (handle_search_memory_1): Correct read_addr initialization - in loop for searching subsequent chunks. - -2009-10-29 Paul Pluzhnikov <ppluzhnikov@google.com> - - * configure.ac: New --with-libthread-db option. - * thread-db.c: Allow direct dependence on libthread_db. - (thread_db_free): Adjust. - * config.in: Regenerate. - * configure: Likewise. - -2009-10-28 Paul Pluzhnikov <ppluzhnikov@google.com> - - PR gdb/10757 - * thread-db.c (attach_thread): New function. - (maybe_attach_thread): Return success/failure. - (find_new_threads_callback): Adjust. - (thread_db_find_new_threads): Loop until no new threads. - -2009-10-13 Pedro Alves <pedro@codesourcery.com> - - * proc-service.c (ps_lgetregs): Formatting. - -2009-10-08 Paul Pluzhnikov <ppluzhnikov@google.com> - - * acinclude.m4: (SRV_CHECK_THREAD_DB, SRV_CHECK_TLS_GET_ADDR): Remove. - * configure.ac: Adjust. - * linux-low.h (struct process_info_private): Move members to struct - thread_db. - (thread_db_free, thread_db_handle_monitor_command): New prototype. - * linux-low.c (linux_remove_process): Adjust. - (linux_wait_for_event_1, linux_look_up_symbols): Likewise. - * server.c (handle_query): Move code ... - (handle_monitor_command): ... here. New function. - * target.h (struct target_ops): New member. - * thread-db.c (struct thread_db): New. - (libthread_db_search_path): New variable. - (thread_db_create_event, thread_db_enable_reporting) - (find_one_thread, maybe_attach_thread, find_new_threads_callback) - (thread_db_find_new_threads, (thread_db_get_tls_address): Adjust. - (try_thread_db_load_1, dladdr_to_soname): New functions. - (try_thread_db_load, thread_db_load_search): New functions. - (thread_db_init): Search for libthread_db. - (thread_db_free): New function. - (thread_db_handle_monitor_command): Likewise. - * config.in: Regenerate. - * configure: Regenerate. - -2009-09-27 Ulrich Weigand <uweigand@de.ibm.com> - - * spu-low.c (spu_kill): Wait for inferior to terminate. - Call clear_inferiors. - (spu_detach): Call clear_inferiors. - -2009-08-22 Ralf Wildenhues <Ralf.Wildenhues@gmx.de> - - * aclocal.m4: Regenerate. - * config.in: Likewise. - * configure: Likewise. - -2009-07-31 Ulrich Weigand <uweigand@de.ibm.com> - - * linux-ppc-low.c (INSTR_SC, NR_spu_run): Define. - (parse_spufs_run): New function. - (ppc_get_pc, ppc_set_pc): Detect and handle SPU PC. - (ppc_breakpoint_at): Handle SPU breakpoints. - -2009-07-31 Ulrich Weigand <uweigand@de.ibm.com> - - * linux-low.c: Include <sys/stat.h> and <sys/vfs.h>. - (SPUFS_MAGIC): Define. - (spu_enumerate_spu_ids): New function. - (linux_qxfer_spu): New function. - (linux_target_ops): Install linux_qxfer_spu. - -2009-07-31 Ulrich Weigand <uweigand@de.ibm.com> - - * configure.srv (powerpc*-*-linux*): Add powerpc-cell32l.o - and powerpc-cell64l.o to srv_regobj. Add rs6000/powerpc-cell32l.xml - and rs6000/powerpc-cell64l.xml to srv_xmlfiles. - * Makefile.in (powerpc-cell32l.o, powerpc-cell32l.c): New rules. - (powerpc-cell64l.o, powerpc-cell64l.c): Likewise. - (clean): Handle powerpc-cell32l.c and powerpc-cell64l.c. - * linux-ppc-low.c (PPC_FEATURE_CELL): Define. - (init_registers_powerpc_cell32l): Add prototype. - (init_registers_powerpc_cell64l): Likewise. - (ppc_arch_setup): Detect Cell/B.E. architecture. - -2009-07-30 Ralf Wildenhues <Ralf.Wildenhues@gmx.de> - - * Makefile.in (datarootdir): New variable. - -2009-07-28 Daniel Jacobowitz <dan@codesourcery.com> - - * linux-low.c (linux_write_memory): Update debugging output. - * Makefile.in (clean): Add new descriptions. - (arm-with-vfpv2.o, arm-with-vfpv2.c, arm-with-vfpv3.o) - (arm-with-vfpv3.c, arm-with-neon.o, arm-with-neon.c): New rules. - * configure.srv: Add new files for arm*-*-linux*. - * linux-arm-low.c: Add new declarations. - (PTRACE_GETVFPREGS, PTRACE_SETVFPREGS): Define if undefined. - (arm_hwcap, HWCAP_VFP, HWCAP_IWMMXT, HWCAP_NEON, HWCAP_VFPv3) - (HWCAP_VFPv3D16): New. - (arm_fill_wmmxregset, arm_store_wmmxregset): Check HWCAP_IWMMXT - instead of __IWMMXT__. - (arm_fill_vfpregset, arm_store_vfpregset, arm_get_hwcap) - (arm_arch_setup): New. - (target_regsets): Remove #ifdef. Add VFP regset. - (the_low_target): Use arm_arch_setup. - -2009-07-28 Daniel Jacobowitz <dan@codesourcery.com> - - * linux-low.c (linux_kill_one_lwp): Adjust kernel workaround to skip - the main thread again. - -2009-07-06 Aleksandar Ristovski <aristovski@qnx.com> - - Adding Neutrino gdbserver. - * configure: Regenerated. - * configure.ac: Add case for srv_qnx and set LIBS accordingly. - * configure.srv (i[34567]86-*-nto*): New target. - * nto-low.c, nto-low.h, nto-x86-low.c: New files. - * remote-utils.c [__QNX__]: Include sys/iomgr.h - (nto_comctrl) [__QNX__]: New function. - (enable_async_io, disable_async_io) [__QNX__]: Call nto_comctrl. - -2009-07-05 Danny Backx <dannybackx@users.sourceforge.net> - - * configure.srv (i[34567]86-*-mingw32ce*): Add i386-low.o to - srv_tgtobj. - -2009-07-04 Danny Backx <dannybackx@users.sourceforge.net> - Pedro Alves <pedro@codesourcery.com> - - * win32-i386-low.c (i386_get_thread_context): Handle systems that - don't support CONTEXT_EXTENDED_REGISTERS. - (i386_win32_breakpoint, i386_win32_breakpoint_len): New. - (the_low_target): Install them. - * win32-low.c (get_child_debug_event): Handle WaitForDebugEvent - failing with ERROR_PIPE_NOT_CONNECTED. - -2009-06-30 Doug Evans <dje@google.com> - Pierre Muller <muller@ics.u-strasbg.fr> - - Add h/w watchpoint support to x86-linux, win32-i386. - * Makefile.in (SFILES): Add i386-low.c - (i386_low_h): Define. - (i386-low.o): Add dependencies. - (linux-x86-low.o): Add i386-low.h dependency. - (win32-i386-low.o): Ditto. - * i386-low.c: New file. - * i386-low.h: New file. - * configure.srv (i[34567]86-*-cygwin*): Add i386-low.o to srv_tgtobj. - (i[34567]86-*-linux*, i[34567]86-*-mingw*, x86_64-*-linux*): Ditto. - * linux-low.c (linux_add_process): Initialize arch_private. - (linux_remove_process): Free arch_private. - (add_lwp): Initialize arch_private. - (delete_lwp): Free arch_private. - (linux_resume_one_lwp): Call the_low_target.prepare_to_resume if - provided. - * linux-low.h (process_info_private): New member arch_private. - (lwp_info): New member arch_private. - (linux_target_ops): New members new_process, new_thread, - prepare_to_resume. - (ptid_of): New macro. - * linux-x86-low.c: Include stddef.h, i386-low.h. - (arch_process_info): New struct. - (arch_lwp_info): New struct. - (x86_linux_dr_get, x86_linux_dr_set): New functions. - (i386_dr_low_set_addr, i386_dr_low_set_control): New functions. - (i386_dr_low_get_status): New function. - (x86_insert_point, x86_remove_point): New functions. - (x86_stopped_by_watchpoint): New function. - (x86_stopped_data_address): New function. - (x86_linux_new_process, x86_linux_new_thread): New functions. - (x86_linux_prepare_to_resume): New function. - (the_low_target): Add entries for insert_point, remove_point, - stopped_by_watchpoint, stopped_data_address, new_process, new_thread, - prepare_to_resume. - * server.c (debug_hw_points): New global. - (monitor_show_help): Document set debug-hw-points. - (handle_query): Process "set debug-hw-points". - * server.h (debug_hw_points): Declare. - (paddress): Declare. - * utils.c (NUMCELLS, CELLSIZE): New macros. - (get_sell, xsnprintf, paddress): New functions. - * win32-arm-low.c (the_low_target): Add entries for insert_point, - remove_point, stopped_by_watchpoint, stopped_data_address. - * win32-i386-low.c: Include i386-low.h. - (debug_reg_state): Replaces dr. - (i386_dr_low_set_addr, i386_dr_low_set_control): New functions. - (i386_dr_low_get_status): New function. - (i386_insert_point, i386_remove_point): New functions. - (i386_stopped_by_watchpoint): New function. - (i386_stopped_data_address): New function. - (i386_initial_stuff): Update. - (get_thread_context,set_thread_context,i386_thread_added): Update. - (the_low_target): Add entries for insert_point, - remove_point, stopped_by_watchpoint, stopped_data_address. - * win32-low.c (win32_insert_watchpoint): New function. - (win32_remove_watchpoint): New function. - (win32_stopped_by_watchpoint): New function. - (win32_stopped_data_address): New function. - (win32_target_ops): Add entries for insert_watchpoint, - remove_watchpoint, stopped_by_watchpoint, stopped_data_address. - * win32-low.h (win32_target_ops): New members insert_point, - remove_point, stopped_by_watchpoint, stopped_data_address. - -2009-06-25 Pedro Alves <pedro@codesourcery.com> - - * server.c (process_serial_event): Re-return unsupported, not - error, if the type isn't recognized. Re-allow supporting only - insert or remove packets. Also call require_running for - breakpoints. Add missing break statement to default case. Tidy. - * target.h (struct target_ops): Rename insert_watchpoint to - insert_point, and remove_watchpoint to remove_point. - - * linux-low.h (struct linux_target_ops): Likewise. - * linux-low.c (linux_insert_watchpoint): Rename to ... - (linux_insert_point): ... this. Adjust. - (linux_remove_watchpoint): Rename to ... - (linux_remove_point): ... this. Adjust. - (linux_target_ops): Adjust. - * linux-crisv32-low.c (cris_insert_watchpoint): Rename to ... - (cris_insert_point): ... this. - (cris_remove_watchpoint): Rename to ... - (cris_remove_point): ... this. - (the_low_target): Adjust. - -2009-06-24 Pierre Muller <muller@ics.u-strasbg.fr> - - * server.c (handle_v_kill): Pass signal_pid to - kill_inferior if multi_process is zero. - -2009-06-23 Aleksandar Ristovski <aristovski@qnx.com> - - * server.c (process_serial_event): Add support for Z0 and Z1 packet. - * target.h (target_ops): Comment for *_watchpoint to make it clear - the functions can get types '0' and '1'. - -2009-06-22 Aleksandar Ristovski <aristovski@qnx.com> - - * linux-low.c (usr_fetch_inferior_registers): Remove check for regno 0. - * proc-service.c (ps_lgetregs): Pass -1 to fetch all registers. - * regcache.c (get_regcache): Likewise. - * spu-low.c (spu_fetch_registers): Remove 0 to -1 conversion. - * win32-low.c (child_fetch_inferior_registers): Remove check for - regno 0. - -2009-06-19 Aleksandar Ristovski <aristovski@qnx.com> - Pedro Alves <pedro@codesourcery.com> - - * target.h (struct target_ops) <supports_multi_process>: New - callback. - (target_supports_multi_process): New. - * server.c (handle_query): Even if GDB reports support, only - enable multi-process if the target also supports it. Report - multi-process support only if the target backend supports it. - * linux-low.c (linux_supports_multi_process): New function. - (linux_target_ops): Install it as target_supports_multi_process - callback. - -2009-05-24 Doug Evans <dje@google.com> - - Global renaming of find_thread_pid to find_thread_ptid. - * server.h (find_thread_ptid): Renamed from find_thread_pid. - * inferiors.c (find_thread_ptid): Renamed from find_thread_pid. - All callers updated. - - * linux-low.c (handle_extended_wait): Use linux_resume_one_lwp - to resume the newly created thread, don't call ptrace (PTRACE_CONT) - directly. - - * linux-low.c (get_stop_pc): Print pc if debug_threads. - (check_removed_breakpoint, linux_wait_for_lwp): Ditto. - (linux_resume_one_lwp): Ditto. - -2009-05-23 Doug Evans <dje@google.com> - - * linux-low.c (linux_resume_one_lwp): Change type of first arg - from struct inferior_list_entry * to struct lwp_info *. - All callers updated. - -2009-05-13 Doug Evans <dje@google.com> - - * linux-x86-low.c: Don't include assert.h. - (x86_siginfo_fixup): Use fatal, not assert. - (x86_arch_setup): Fix comment. - -2009-05-12 Doug Evans <dje@google.com> - - Biarch support for i386/amd64 gdbserver. - * Makefile.in (SFILES): Remove linux-i386-low.c, linux-x86-64-low.c. - Add linux-x86-low.c. - (linux-i386-low.o, linux-x86-64-low.o): Delete. - (linux-x86-low.o): Add. - * linux-x86-64-low.c: Delete. - * linux-i386-low.c: Delete. - * linux-x86-low.c: New file. - * configure.srv (i?86-linux srv_tgtobj): Replace linux-i386-low.o with - linux-x86-low.o. - (x86_64-linux srv_tgtobj): Replace linux-x86-64-low.o with - linux-x86-low.o. - (x86_64-linux srv_regobj): Add reg-i386-linux.o. - * linux-low.c: Include ansidecl.h, elf/common.h, elf/external.h. - (linux_child_pid_to_exec_file): New function. - (elf_64_header_p, elf_64_file_p): New functions. - (siginfo_fixup): New function. - (linux_xfer_siginfo): New local inf_siginfo. Call siginfo_fixup to - give target a chance to convert layout. - * linux-low.h (linux_target_ops): New member siginfo_fixup. - (linux_child_pid_to_exec_file, elf_64_file_p): Declare. - -2009-05-07 Doug Evans <dje@google.com> - - * linux-low.c (regsets_fetch_inferior_registers): Fix memory leak. - (regsets_store_inferior_registers): Ditto. - -2009-05-06 Pedro Alves <pedro@codesourcery.com> - - PR server/10048 - - * linux-low.c (must_set_ptrace_flags): Delete. - (linux_create_inferior): Set `lwp->must_set_ptrace_flags' instead - of the global. - (linux_attach_lwp_1): Don't set PTRACE_SETOPTIONS here. Set - `lwp->must_set_ptrace_flags' instead. - (linux_wait_for_event_1): Set ptrace options here. - (linux_wait_1): ... not here. - -2009-04-30 Doug Evans <dje@google.com> - - * inferiors.c (started_inferior_callback): New function. - (attached_inferior_callback): New function. - (have_started_inferiors_p, have_attached_inferiors_p): New functions. - * server.c (print_started_pid, print_attached_pid): New functions. - (detach_or_kill_for_exit): New function. - (main): Call it instead of for_each_inferior (kill_inferior_callback). - * server.h (have_started_inferiors_p): Declare. - (have_attached_inferiors_p): Declare. - - * inferiors.c (remove_process): Fix memory leak, free process. - * linux-low.c (linux_remove_process): New function. - (linux_kill): Call it instead of remove_process. - (linux_detach, linux_wait_1): Ditto. - -2009-04-19 Danny Backx <dannybackx@users.sourceforge.net> - - * configure.srv: Add x86 Windows CE target. - -2009-04-03 Ulrich Weigand <uweigand@de.ibm.com> - - * inferiors.c (get_thread_process): Make global. - * server.h (get_thread_process): Add prototype. - * thread-db.c (find_one_thread): Use get_thread_process - instead of current_process. - (thread_db_get_tls_address): Do not crash if called when - thread layer is not yet initialized. - -2009-04-03 Ulrich Weigand <uweigand@de.ibm.com> - - * remote-utils.c (prepare_resume_reply): Null-terminate packet. - * spu-low.c (current_tid): Rename to ... - (current_ptid): ... this. - (fetch_ppc_register, fetch_ppc_memory, store_ppc_memory, - spu_proc_xfer_spu, spu_resume, spu_request_interrupt): Use - ptid_get_lwp (current_ptid) instead of current_tid. - (spu_kill, spu_detach, spu_join, spu_wait): Use pid argument - instead of current_tid. Use find_process_pid to verify pid - argument is valid. Pass proper argument to remove_process. - (spu_thread_alive): Compare current_ptid instead of current_tid. - (spu_resume): Likewise. - -2009-04-02 Pedro Alves <pedro@codesourcery.com> - - * linux-low.c (usr_store_inferior_registers): Declare local `pid' - variable. - -2009-04-01 Pedro Alves <pedro@codesourcery.com> - - Implement the multiprocess extensions, and add linux multiprocess - support. - - * server.h (ULONGEST): Declare. - (struct ptid, ptid_t): New. - (minus_one_ptid, null_ptid): Declare. - (ptid_build, pid_to_ptid, ptid_get_pid, ptid_get_lwp) - (ptid_get_tid, ptid_equal, ptid_is_pid): Declare. - (struct inferior_list_entry): Change `id' type from unsigned from - to ptid_t. - (struct sym_cache, struct breakpoint, struct - process_info_private): Forward declare. - (struct process_info): Declare. - (current_process): Declare. - (all_processes): Declare. - (initialize_inferiors): Declare. - (add_thread): Adjust to use ptid_t. - (thread_id_to_gdb_id, thread_to_gdb_id, gdb_id_to_thread_id): Ditto. - (add_process, remove_process, find_thread_pid): Declare. - (find_inferior_id): Adjust to use ptid_t. - (cont_thread, general_thread, step_thread): Change type to ptid_t. - (multi_process): Declare. - (push_event): Adjust to use ptid_t. - (read_ptid, write_ptid): Declare. - (prepare_resume_reply): Adjust to use ptid_t. - (clear_symbol_cache): Declare. - * inferiors.c (all_processes): New. - (null_ptid, minus_one_ptid): New. - (ptid_build, pid_to_ptid, ptid_get_pid, ptid_get_lwp) - (ptid_get_tid, ptid_equal, ptid_is_pid): New. - (add_thread): Change unsigned long to ptid. Remove gdb_id - parameter. Adjust. - (thread_id_to_gdb_id, thread_to_gdb_id): Change unsigned long to ptid. - (gdb_id_to_thread): Rename to ... - (find_thread_pid): ... this. Change unsigned long to ptid. - (gdb_id_to_thread_id, find_inferior_id): Change unsigned long to ptid. - (loaded_dll, pull_pid_from_list): Adjust. - (add_process, remove_process, find_process_pid) - (get_thread_process, current_process, initialize_inferiors): New. - * target.h (struct thread_resume) <thread>: Change type to ptid_t. - (struct target_waitstatus) <related_pid>: Ditto. - (struct target_ops) <kill, detach>: Add `pid' argument. Change - return type to int. - (struct target_ops) <join>: Add `pid' argument. - (struct target_ops) <thread_alive>: Change pid's type to ptid_t. - (struct target_ops) <wait>: Add `ptid' field. Change return type - to ptid. - (kill_inferior, detach_inferior, join_inferior): Add `pid' argument. - (mywait): Add `ptid' argument. Change return type to ptid_t. - (target_pid_to_str): Declare. - * target.c (set_desired_inferior): Adjust to use ptids. - (mywait): Add new `ptid' argument. Adjust. - (target_pid_to_str): New. - * mem-break.h (free_all_breakpoints): Declare. - * mem-break.c (breakpoints): Delelete. - (set_breakpoint_at, delete_breakpoint, find_breakpoint_at) - (check_mem_read, check_mem_write, delete_all_breakpoints): Adjust - to use per-process breakpoint list. - (free_all_breakpoints): New. - * remote-utils.c (struct sym_cache) <name>: Drop `const'. - (symbol_cache, all_symbols_looked_up): Delete. - (hexchars): New. - (ishex, unpack_varlen_hex, write_ptid, hex_or_minus_one, - read_ptid): New. - (prepare_resume_reply): Change ptid argument's type from unsigned - long to ptid_t. Adjust. Implement W;process and X;process. - (free_sym_cache, clear_symbol_cache): New. - (look_up_one_symbol): Adjust to per-process symbol cache. * - * server.c (cont_thread, general_thread, step_thread): Change type - to ptid_t. - (attached): Delete. - (multi_process): New. - (last_ptid): Change type to ptid_t. - (struct vstop_notif) <ptid>: Change type to ptid_t. - (queue_stop_reply, push_event): Change `ptid' argument's type to - ptid_t. - (discard_queued_stop_replies): Add `pid' argument. - (start_inferior): Adjust to use ptids. Adjust to mywait interface - changes. Don't reference the `attached' global. - (attach_inferior): Adjust to mywait interface changes. - (handle_query): Adjust to use ptids. Parse GDB's qSupported - features. Handle and report "multiprocess+". Handle - "qAttached:PID". - (handle_v_cont): Adjust to use ptids. Adjust to mywait interface - changes. - (handle_v_kill): New. - (handle_v_stopped): Adjust to use target_pid_to_str. - (handle_v_requests): Allow multiple attaches and runs when - multiprocess extensions are in effect. Handle "vKill". - (myresume): Adjust to use ptids. - (queue_stop_reply_callback): Add `arg' parameter. Handle it. - (handle_status): Adjust to discard_queued_stop_replies interface - change. - (first_thread_of, kill_inferior_callback) - (detach_or_kill_inferior_callback, join_inferiors_callback): New. - (main): Call initialize_inferiors. Adjust to use ptids, killing - and detaching from all inferiors. Handle multiprocess packet - variants. - * linux-low.h: Include gdb_proc_service.h. - (struct process_info_private): New. - (struct linux_target_ops) <pid_of>: Use ptid_get_pid. - <lwpid_of>: Use ptid_get_lwp. - (get_lwp_thread): Adjust. - (struct lwp_info): Add `dead' member. - (find_lwp_pid): Declare. - * linux-low.c (thread_db_active): Delete. - (new_inferior): Adjust comment. - (inferior_pid): Delete. - (linux_add_process): New. - (handle_extended_wait): Adjust. - (add_lwp): Change unsigned long to ptid. - (linux_create_inferior): Add process to processes table. Adjust - to use ptids. Don't set new_inferior here. - (linux_attach_lwp): Rename to ... - (linux_attach_lwp_1): ... this. Add `initial' argument. Handle - it. Adjust to use ptids. - (linux_attach_lwp): New. - (linux_attach): Add process to processes table. Don't set - new_inferior here. - (struct counter): New. - (second_thread_of_pid_p, last_thread_of_process_p): New. - (linux_kill_one_lwp): Add `args' parameter. Handle it. Adjust to - multiple processes. - (linux_kill): Add `pid' argument. Handle it. Adjust to multiple - processes. Remove process from process table. - (linux_detach_one_lwp): Add `args' parameter. Handle it. Adjust - to multiple processes. - (any_thread_of): New. - (linux_detach): Add `pid' argument, and handle it. Remove process - from processes table. - (linux_join): Add `pid' argument. Handle it. - (linux_thread_alive): Change unsighed long argument to ptid_t. - Consider dead lwps as not being alive. - (status_pending_p): Rename `dummy' argument to `arg'. Filter out - threads we're not interested in. - (same_lwp, find_lwp_pid): New. - (linux_wait_for_lwp): Change `pid' argument's type from int to - ptid_t. Adjust. - (linux_wait_for_event): Rename to ... - (linux_wait_for_event_1): ... this. Change `pid' argument's type - from int to ptid_t. Adjust. - (linux_wait_for_event): New. - (linux_wait_1): Add `ptid' argument. Change return type to - ptid_t. Adjust. Use last_thread_of_process_p. Remove processes - that exit from the process table. - (linux_wait): Add `ptid' argument. Change return type to ptid_t. - Adjust. - (mark_lwp_dead): New. - (wait_for_sigstop): Adjust to use ptids. If a process exits while - stopping all threads, mark its main lwp as dead. - (linux_set_resume_request, linux_resume_one_thread): Adjust to use - ptids. - (fetch_register, usr_store_inferior_registers) - (regsets_fetch_inferior_registers) - (regsets_store_inferior_registers, linux_read_memory) - (linux_write_memory): Inline `inferior_pid'. - (linux_look_up_symbols): Adjust to use per-process - `thread_db_active'. - (linux_request_interrupt): Adjust to use ptids. - (linux_read_auxv): Inline `inferior_pid'. - (initialize_low): Don't reference thread_db_active. - * gdb_proc_service.h (struct ps_prochandle) <pid>: Remove. - * proc-service.c (ps_lgetregs): Use find_lwp_pid. - (ps_getpid): Return the pid of the current inferior. - * thread-db.c (proc_handle, thread_agent): Delete. - (thread_db_create_event, thread_db_enable_reporting): Adjust to - per-process data. - (find_one_thread): Change argument type to ptid_t. Adjust to - per-process data. - (maybe_attach_thread): Adjust to per-process data and ptids. - (thread_db_find_new_threads): Ditto. - (thread_db_init): Ditto. - * spu-low.c (spu_create_inferior, spu_attach): Add process to - processes table. Adjust to use ptids. - (spu_kill, spu_detach): Adjust interface. Remove process from - processes table. - (spu_join, spu_thread_alive): Adjust interface. - (spu_wait): Adjust interface. Remove process from processes - table. Adjust to use ptids. - * win32-low.c (current_inferior_tid): Delete. - (current_inferior_ptid): New. - (debug_event_ptid): New. - (thread_rec): Take a ptid. Adjust. - (child_add_thread): Add `pid' argument. Adjust to use ptids. - (child_delete_thread): Ditto. - (do_initial_child_stuff): Add `attached' argument. Add process to - processes table. - (child_fetch_inferior_registers, child_store_inferior_registers): - Adjust. - (win32_create_inferior): Pass 0 to do_initial_child_stuff. - (win32_attach): Pass 1 to do_initial_child_stuff. - (win32_kill): Adjust interface. Remove process from processes - table. - (win32_detach): Ditto. - (win32_join): Adjust interface. - (win32_thread_alive): Take a ptid. - (win32_resume): Adjust to use ptids. - (get_child_debug_event): Ditto. - (win32_wait): Adjust interface. Remove exiting process from - processes table. - -2009-04-01 Pedro Alves <pedro@codesourcery.com> - - Non-stop mode support. - - * server.h (non_stop): Declare. - (gdb_client_data, handler_func): Declare. - (delete_file_handler, add_file_handler, start_event_loop): - Declare. - (handle_serial_event, handle_target_event, push_event) - (putpkt_notif): Declare. - * target.h (enum resume_kind): New. - (struct thread_resume): Replace `step' field by `kind' field. - (TARGET_WNOHANG): Define. - (struct target_ops) <wait>: Add `options' argument. - <supports_non_stop, async, start_non_stop>: New fields. - (target_supports_non_stop, target_async): New. - (start_non_stop): Declare. - (mywait): Add `options' argument. - * target.c (mywait): Add `options' argument. Print child exit - notifications here. - (start_non_stop): New. - * server.c (non_stop, own_buf, mem_buf): New globals. - (struct vstop_notif): New. - (notif_queue): New global. - (queue_stop_reply, push_event, discard_queued_stop_replies) - (send_next_stop_reply): New. - (start_inferior): Adjust to use resume_kind. Adjust to mywait - interface changes. - (attach_inferior): In non-stop mode, don't wait for the target - here. - (handle_general_set): Handle QNonStop. - (handle_query): When handling qC, return the current general - thread, instead of the first thread of the list. - (handle_query): If the backend supports non-stop mode, include - QNonStop+ in the qSupported query response. - (handle_v_cont): Adjust to use resume_kind. Handle resume_stop - and non-stop mode. - (handle_v_attach, handle_v_run): Handle non-stop mode. - (handle_v_stopped): New. - (handle_v_requests): Report support for vCont;t. Handle vStopped. - (myresume): Adjust to use resume_kind. Handle non-stop. - (queue_stop_reply_callback): New. - (handle_status): Handle non-stop mode. - (main): Clear non_stop flag on reconnection. Use the event-loop. - Refactor serial protocol handling from here ... - (process_serial_event): ... to this new function. When GDB - selects any thread, select one here. In non-stop mode, wait until - GDB acks all pending events before exiting. - (handle_serial_event, handle_target_event): New. - * remote-utils.c (remote_open): Install remote_desc in the event - loop. - (remote_close): Remove remote_desc from the event loop. - (putpkt_binary): Rename to... - (putpkt_binary_1): ... this. Add `is_notic' argument. Handle it. - (putpkt_binary): New as wrapper around putpkt_binary_1. - (putpkt_notif): New. - (prepare_resume_reply): In non-stop mode, don't change the - general_thread. - * event-loop.c: New. - * Makefile.in (OBJ): Add event-loop.o. - (event-loop.o): New rule. - - * linux-low.h (pid_of): Moved here. - (lwpid_of): New. - (get_lwp_thread): Use lwpid_of. - (struct lwp_info): Delete `lwpid' field. Add `suspended' field. - * linux-low.c (pid_of): Delete. - (inferior_pid): Use lwpid_of. - (linux_event_pipe): New. - (target_is_async_p): New. - (delete_lwp): New. - (handle_extended_wait): Use lwpid_of. - (add_lwp): Don't set lwpid field. - (linux_attach_lwp): Adjust debug output. Use lwpid_of. - (linux_kill_one_lwp): If killing a running lwp, stop it first. - Use lwpid_of. Adjust to linux_wait_for_event interface changes. - (linux_detach_one_lwp): If detaching from a running lwp, stop it - first. Adjust to linux_wait_for_event interface changes. Use - lwpid_of. - (linux_detach): Don't delete the main lwp here. - (linux_join): Use my_waitpid. Avoid signal_pid. Use lwpid_of. - (status_pending_p): Don't consider explicitly suspended lwps. - (linux_wait_for_lwp): Take an integer pid instead of a lwp_info - pointer. Add OPTIONS argument. Change return type to int. Use - my_waitpid instead of sleeping. Handle WNOHANG. Use lwpid_of. - (linux_wait_for_event): Take an integer pid instead of a lwp_info - pointer. Add status pointer argument. Return a pid instead of a - status. Use lwpid_of. Adjust to linux_wait_for_lwp interface - changes. In non-stop mode, don't switch to a random thread. - (linux_wait): Rename to... - (linux_wait_1): ... this. Add target_options argument, and handle - it. Adjust to use resume_kind. Use lwpid_of. In non-stop mode, - don't handle the continue thread. Handle TARGET_WNOHANG. Merge - clean exit and signal exit code. Don't stop all threads in - non-stop mode. In all-stop mode, only stop all threads when - reporting a stop to GDB. Handle explicit thread stop requests. - (async_file_flush, async_file_mark): New. - (linux_wait): New. - (send_sigstop): Use lwpid_of. - (wait_for_sigstop): Use lwpid_of. Adjust to linux_wait_for_event - interface changes. In non-stop mode, don't switch to a random - thread. - (linux_resume_one_lwp): Use lwpid_of. - (linux_continue_one_thread, linux_queue_one_thread): Merge into ... - (linux_resume_one_thread): ... this. Handle resume_stop. In - non-stop mode, don't look for pending flag in all threads. - (resume_status_pending_p): Don't consider explicitly suspended - threads. - (my_waitpid): Reimplement. Emulate __WALL. - (linux_request_interrupt, linux_read_offsets, linux_xfer_siginfo): - Use lwpid_of. - (sigchld_handler, linux_supports_non_stop, linux_async) - (linux_start_non_stop): New. - (linux_target_ops): Register linux_supports_non_stop, linux_async - and linux_start_non_stop. - (initialize_low): Install SIGCHLD handler. - * thread-db.c (thread_db_create_event, find_one_thread) - (thread_db_get_tls_address): Use lwpid_of. - * win32-low.c (win32_detach): Adjust to use resume_kind. - (win32_wait): Add `options' argument. - * spu-low.c (spu_resume): Adjust to use resume_kind. - (spu_wait): Add `options' argument. - -2009-04-01 Pedro Alves <pedro@codesourcery.com> - - Decouple target code from remote protocol. - - * target.h (enum target_waitkind): New. - (struct target_waitstatus): New. - (struct target_ops) <wait>: Return an unsigned long. Take a - target_waitstatus pointer instead of a char pointer. - (mywait): Likewise. - * target.c (mywait): Change prototype to return an unsigned long. - Take a target_waitstatus pointer instead of a char pointer. Adjust. - * server.h (thread_from_wait, old_thread_from_wait): Delete - declarations. - (prepare_resume_reply): Change prototype to take a - target_waitstatus. - * server.c (thread_from_wait, old_thread_from_wait): Delete. - (last_status, last_ptid): New. - (start_inferior): Remove "statusptr" argument. Adjust. Return a - pid instead of a signal. - (attach_inferior): Remove "status" and "signal" parameters. - Adjust. - (handle_query): For qGetTLSAddr, parse the thread id with strtol, - not as an address. - (handle_v_cont, handle_v_attach, handle_v_run, handle_v_kill) - (handle_v_requests, myresume): Remove "status" and "signal" - parameters. Adjust. - (handle_status): New. - (main): Delete local `status'. Adjust. - * remote-utils.c: Include target.h. - (prepare_resume_reply): Change prototype to take a - target_waitstatus. Adjust. - - * linux-low.c (linux_wait): Adjust to new target_ops->wait - interface. - * spu-low.c (spu_wait): Adjust. - * win32-low.c (enum target_waitkind, struct target_waitstatus): - Delete. - (win32_wait): Adjust. - -2009-04-01 Pedro Alves <pedro@codesourcery.com> - - * target.h (struct thread_resume): Delete leave_stopped member. - (struct target_ops): Add a `n' argument to the `resume' callback. - * server.c (start_inferior): Adjust. - (handle_v_cont, myresume): Adjust. - * linux-low.c (check_removed_breakpoint): Adjust to resume - interface change, and to removed leave_stopped field. - (resume_ptr): Delete. - (struct thread_resume_array): New. - (linux_set_resume_request): Add new `arg' parameter. Adjust to - resume interface change. - (linux_continue_one_thread, linux_queue_one_thread) - (resume_status_pending_p): Check if the resume field is NULL - instead of checking the leave_stopped member. - (linux_resume): Adjust to the target resume interface change. - * spu-low.c (spu_resume): Adjust to the target resume interface - change. - * win32-low.c (win32_detach, win32_resume): Ditto. - -2009-04-01 Pedro Alves <pedro@codesourcery.com> - - * linux-low.c (linux_wait_for_event): Don't clear the `stepping' - flag. - (wait_for_sigstop): Don't leave a finished single-step SIGTRAP - pending. - (linux_continue_one_thread): Only preserve the stepping flag if - there's a pending breakpoint. - -2009-03-31 Pedro Alves <pedro@codesourcery.com> - - * server.c (main): After the inferior having exited, call - remote_close before exiting gdbserver. - -2009-03-25 Thiago Jung Bauermann <bauerman@br.ibm.com> - - Fix size of FPSCR in Power 7 processors. - * linux-ppc-low.c (PPC_FEATURE_ARCH_2_05): Remove #define. - (PPC_FEATURE_HAS_DFP): New #define. - (ppc_arch_setup): Check for DFP feature instead of ISA 2.05 to decide on - size of the FPSCR. - -2009-03-23 Pedro Alves <pedro@codesourcery.com> - - * server.c (handle_query) Whitespace and formatting. - -2009-03-22 Pedro Alves <pedro@codesourcery.com> - - * i387-fp.c, linux-arm-low.c, linux-cris-low.c, - linux-crisv32-low.c, linux-i386-low.c, linux-low.c, - linux-mips-low.c, linux-s390-low.c, linux-sparc-low.c, - linux-x86-64-low.c, linux-xtensa-low.c, proc-service.c, - regcache.c, remote-utils.c, server.c, spu-low.c, target.h, - thread-db.c, win32-low.c, xtensa-xtregs.c, gdbreplay.c, - Makefile.in, configure.ac: Fix whitespace throughout. - * configure: Regenerate. - -2009-03-22 Pedro Alves <pedro@codesourcery.com> - - * inferiors.c (find_inferior): Make it safe for the callback - function to delete the currently iterated inferior. - -2009-03-22 Pedro Alves <pedro@codesourcery.com> - - * Makefile.in (linuw_low_h): Move higher. - (thread-db.o): Depend on $(linux_low_h). - -2009-03-17 Pedro Alves <pedro@codesourcery.com> - - Rename "process" to "lwp" throughout. - - * linux-low.c (all_processes): Rename to... - (all_lwps): ... this. - (inferior_pid, handle_extended_wait, get_stop_pc): Adjust. - (add_process): Rename to ... - (add_lwp): ... this. Adjust. - (linux_create_inferior): Adjust. - (linux_attach_lwp): Adjust. - (linux_attach): Adjust. - (linux_kill_one_process): Rename to ... - (linux_kill_one_lwp): ... this. Adjust. - (linux_kill): Adjust. - (linux_detach_one_process): Rename to ... - (linux_detach_one_lwp): ... this. Adjust. - (linux_detach): Adjust. - (check_removed_breakpoint): Adjust. - (status_pending_p): Adjust. - (linux_wait_for_process): Rename to ... - (linux_wait_for_lwp): ... this. Adjust. - (linux_wait_for_event): Adjust. - (send_sigstop): Adjust. - (wait_for_sigstop): Adjust. - (stop_all_processes): Rename to ... - (stop_all_lwps): ... this. - (linux_resume_one_process): Rename to ... - (linux_resume_one_lwp): ... this. Adjust. - (linux_set_resume_request, linux_continue_one_thread) - (linux_queue_one_thread, resume_status_pending_p) - (usr_store_inferior_registers, regsets_store_inferior_registers) - (linux_request_interrupt, linux_read_offsets, linux_xfer_siginfo): - Adjust. - * linux-low.h (get_process): Rename to ... - (get_lwp): ... this. Adjust. - (get_thread_process): Rename to ... - (get_thread_lwp): ... this. Adjust. - (get_process_thread): Rename to ... - (get_lwp_thread): ... this. Adjust. - (struct process_info): Rename to ... - (struct lwp_info): ... this. - (all_processes): Rename to ... - (all_lwps): ... this. - * proc-service.c (ps_lgetregs): Adjust. - * thread-db.c (thread_db_create_event, find_one_thread) - (maybe_attach_thread, thread_db_get_tls_address): Adjust. - -2009-03-14 Pedro Alves <pedro@codesourcery.com> - - * server.c (handle_query): Handle "qAttached". - -2009-03-13 Nathan Sidwell <nathan@codesourcery.com> - - * Makefile.in, hostio-errno.c, errno.c, xtensa-xtregs.c: Change to - GPLv3, update license URL. - -2009-03-01 Doug Evans <dje@google.com> - - * Makefile.in (INCLUDE_CFLAGS): Add -I$(srcdir)/../common. - (server_h): Add gdb_signals.h. - (signals.o): Update. - * server.h (target_signal_from_host,target_signal_to_host_p) - (target_signal_to_host,target_signal_to_name): Moved to gdb_signals.h. - -2009-02-14 Pierre Muller <muller@ics.u-strasbg.fr> - - * remote-utils.c (getpkt): Also generate remote-debug - information if noack_mode is set. - -2009-02-06 Pedro Alves <pedro@codesourcery.com> - - * server.c (handle_query): Report qXfer:siginfo:read and - qXfer:siginfo:write as supported and handle them. - * target.h (struct target_ops) <qxfer_siginfo>: New field. - * linux-low.c (linux_xfer_siginfo): New. - (linux_target_ops): Set it. - -2009-01-26 Pedro Alves <pedro@codesourcery.com> - - * server.c (gdbserver_usage): Mention --remote-debug. - (main): Accept '--remote-debug' switch. - -2009-01-18 Doug Evans <dje@google.com> - - * regcache.c (new_register_cache): No need to check result of xcalloc. - * server.c (handle_search_memory): Back out calls to xmalloc, - result is checked and error is returned to user upon failure. - (handle_query): Ditto. Add more checks for result of malloc. - (handle_v_cont): Check result of malloc, report error back to - user upon failure. - (handle_v_run): Ditto. Call freeargv. - * server.h (freeargv): Declare. - * utils.c (freeargv): New fn. - -2009-01-15 Doug Evans <dje@google.com> - - * gdbreplay.c (perror_with_name): Make arg const char *. - * server.h (target_signal_to_name): Make return type const char *. - * thread-db.c (thread_db_err_str): Make return type const char *. - * utils.c (perror_with_name): Make arg const char *. - -2009-01-14 Pedro Alves <pedro@codesourcery.com> - - * win32-low.c (get_child_debug_event): Issue a final DBG_CONTINUE - when handling a EXIT_PROCESS_DEBUG_EVENT. - -2009-01-06 Joel Brobecker <brobecker@adacore.com> - - * gdbreplay.c (gdbreplay_version): Update copyright year. - * server.c (gdbserver_version): Likewise. - -2009-01-05 Doug Evans <dje@google.com> - - * linux-low.c (linux_attach_lwp): Add some comments/fixmes. - (handle_extended_wait): Improve comment. - -2008-12-13 Doug Evans <dje@google.com> - - * utils.c (xmalloc,xcalloc,xstrdup): New fns. - * server.h (ATTR_MALLOC): New macro. - (xmalloc,xcalloc,xstrdup): Declare. - * hostio.c: Replace malloc,calloc,strdup with xmalloc,xcalloc,xstrdup. - * inferiors.c: Ditto. - * linux-low.c: Ditto. - * mem-break.c: Ditto. - * regcache.c: Ditto. - * remote-utils.c: Ditto. - * server.c: Ditto. - * target.c: Ditto. - * win32-low.c: Ditto. - -2008-12-12 Doug Evans <dje@google.com> - - * linux-low.c (linux_wait_for_process): Don't clobber current_inferior - in debugging printf. - - * linux-low.c (handle_extended_wait): Simplify, use my_waitpid. - -2008-12-09 Doug Evans <dje@google.com> - - * linux-low.h (struct process_info): Delete member tid, unused. - * thread-db.c (find_one_thread): Update. - (maybe_attach_thread): Update. - -2008-12-02 Pedro Alves <pedro@codesourcery.com> - - * target.h (struct target_ops): Add qxfer_osdata member. - * linux-low.c: Include ctype.h and pwd.h and sys/types.h - and dirent.h. - (linux_qxfer_osdata): New functions. - (linux_target_ops): Register linux_qxfer_osdata as qxfer_osdata - callback. - * server.c (handle_query): Handle "qXfer:osdata:read:". - * remote-utils.c (buffer_grow, buffer_free, buffer_init, buffer_finish) - (buffer_xml_printf): New functions. - * server.h (struct buffer): New. - (buffer_grow_str, buffer_grow_str0): New macros. - (buffer_grow, buffer_free, buffer_init, buffer_finish) - (buffer_xml_printf): Declare. - -2008-11-24 Doug Evans <dje@google.com> - - * Makefile.in (VERSION,DIST,LINT,LINTFLAGS): Delete, unused. - -2008-11-24 Daniel Jacobowitz <dan@codesourcery.com> - - * server.c (handle_v_run): Always use the supplied argument list. - -2008-11-19 Bob Wilson <bob.wilson@acm.org> - - * xtensa-xtregs.c (XTENSA_ELF_XTREG_SIZE): Change to 4. - (xtensa_regmap_table): Add entry for scompare1. - -2008-11-18 Thiago Jung Bauermann <bauerman@br.ibm.com> - - * Makefile.in (powerpc-isa205-32l.o, powerpc-isa205-32l.c, - powerpc-isa205-altivec32l.o, powerpc-isa205-altivec32l.c, - powerpc-isa205-vsx32l.o, powerpc-isa205-vsx32l.c, - powerpc-isa205-64l.o, powerpc-isa205-64l.c, - powerpc-isa205-altivec64l.o, powerpc-isa205-altivec64l.c, - powerpc-isa205-vsx64l.o, powerpc-isa205-vsx64l.c): New targets. - * configure.srv (powerpc*-*-linux*): Add ISA 2.05 object files and - XML target descriptions. - * linux-ppc-low.c (ppc_arch_setup): Init registers with 64-bit FPSCR - when inferior is running on an ISA 2.05 or later processor. Add - special case to return offset for full 64-bit slot of FPSCR when - in 32-bits. - -2008-11-14 Daniel Gutson <dgutson@codesourcery.com> - - * Makefile.in (SFILES, clean): Added sparc64 files. - (reg-sparc64.o, reg-sparc64.c): New. - * configure.srv (sparc*-*-linux*): New configuration. - * linux-low.c (regsets_fetch_inferior_registers): Swap ptrace - syscall arguments for SPARC. - (regsets_store_inferior_registers): Likewise. - * linux-sparc-low.c: New file. - -2008-10-21 Doug Evans <dje@google.com> - - * Makefile.in (BFD_DIR,BFD,BFD_SRC,BFD_CFLAGS): Delete. - (READLINE_DIR,READLINE_DEP): Delete. - (INTERNAL_CFLAGS): Update. - (LINTFLAGS): Update. - -2008-10-10 Pedro Alves <pedro@codesourcery.com> - - * server.c (handle_v_run): If GDB didn't specify an argv, use the - whole argv from the last run, not just argv[0]. - -2008-09-08 Pedro Alves <pedro@codesourcery.com> - - * regcache.c (new_register_cache): Return NULL if the register - cache size isn't known yet. - (free_register_cache): Avoid dereferencing a NULL regcache. - -2008-09-04 Daniel Jacobowitz <dan@codesourcery.com> - - * configure.srv: Merge MIPS and MIPS64. - -2008-08-24 Maciej W. Rozycki <macro@linux-mips.org> - - * Makefile.in (uninstall): Apply $(EXEEXT) too. - -2008-08-18 Luis Machado <luisgpm@br.ibm.com> - - * Makefile.in: Add required vsx dependencies. - - * linux-ppc-low: Define PPC_FEATURE_HAS_VSX. - Declare init_registers_powerpc_vsx32l. - Declare init_registers_powerpc_vsx64l. - Define PTRACE_GETVSXREGS and PTRACE_SETVSXREGS. - (ppc_arch_setup): Check for VSX in hwcap. - (ppc_fill_vsxregset): New function. - (ppc_store_vsxregset): New function. - Add new VSX entry in regset_info target_regsets. - - * configure.srv: Add new VSX dependencies. - -2008-08-12 Pedro Alves <pedro@codesourcery.com> - - * remote-utils.c (noack_mode, transport_is_reliable): New globals. - (remote_open): Set or clear transport_is_reliable. - (putpkt_binary): Don't expect acks in noack mode. - (getpkt): Don't send ack/nac in noack mode. - * server.c (handle_general_set): Handle QStartNoAckMode. - (handle_query): If connected by tcp pass QStartNoAckMode+ in - qSupported. - (main): Reset noack_mode on every connection. - * server.h (noack_mode): Declare. - -2008-08-07 Ralf Wildenhues <Ralf.Wildenhues@gmx.de> - - * Makefile.in (GDBREPLAY_OBS): New variable. - (gdbreplay$(EXEEXT)): Use it to avoid unportable $^. - -2008-08-05 Ulrich Weigand <uweigand@de.ibm.com> - Daniel Jacobowitz <dan@codesourcery.com> - - * linux-low.c (linux_resume_one_process): Ignore ESRCH. - (usr_store_inferior_registers): Likewise. - (regsets_store_inferior_registers): Likewise. - -2008-07-31 Rolf Jansen <rj@surtec.com> - Pedro Alves <pedro@codesourcery.com> - - * configure.ac: Check for memmem declaration. - * server.c [HAVE_MALLOC_H]: Include malloc.h. - (disable_packet_vCont, disable_packet_Tthread, disable_packet_qC) - (disable_packet_qfThreadInfo): Unconditionally compile. - * server.h [!HAVE_DECL_MEMMEM]: Declare memmem. - * configure, config.in: Regenerate. - -2008-07-28 Doug Kwan <dougkwan@google.com> - - * linux-low.c (sys/dir.h, sys/user.h): Remove includes. - (linux_write_memory): Remove declaration of errno. - -2008-07-12 Ulrich Weigand <uweigand@de.ibm.com> - - * linux-low.c (handle_extended_wait): Do not use "status" - variable uninitialized. - -2008-07-07 Pedro Alves <pedro@codesourcery.com> - - * server.c (handle_v_attach): Inhibit reporting dll changes. - -2008-06-27 Pedro Alves <pedro@codesourcery.com> - - * remote-utils.c (prepare_resume_reply): If requested, don't - output "thread:TID" in the T stop reply. - - * server.c (disable_packet_vCont, disable_packet_Tthread) - (disable_packet_qC, disable_packet_qfThreadInfo): New globals. - (handle_query): If requested, disable support for qC, qfThreadInfo - and qsThreadInfo. - (handle_v_requests): If requested, disable support for vCont. - (gdbserver_show_disableable): New. - (main): Handle --disable-packet and --disable-packet=LIST. - - * server.h (disable_packet_vCont, disable_packet_Tthread) - (disable_packet_qC, disable_packet_qfThreadInfo): Declare. - -2008-06-20 Carlos O'Donell <carlos@codesourcery.com> - - * server.c (gdbserver_usage): Mention --version. - -2008-06-06 Daniel Jacobowitz <dan@codesourcery.com> - - * Makefile.in (gdbreplay.o): New rule. - -2008-06-06 Joseph Myers <joseph@codesourcery.com> - - * gdbreplay.c (gdbreplay_version): Say gdbreplay in version - message, not gdbserver. - -2008-06-05 Vladimir Prus <vladimir@codesourcery.com> - Nathan Sidwell <nathan@codesourcery.com> - Joseph Myers <joseph@codesourcery.com> - - * acinclude.m4: Include ../../config/acx.m4. - * configure.ac: Use ACX_PKGVERSION and ACX_BUGURL. - * configure, config.in: Regenerate. - * Makefile.in (gdbreplay$(EXEEXT)): Add version.o. - * server.c (gdbserver_version): Print PKGVERSION. - (gdbsrever_usage): Add stream parameter. Print REPORT_BUGS_TO. - (main): Adjust gdbserver_usage calls. - * gdbreplay.c (version, host_name): Add declarations. - (gdbreplay_version, gdbreplay_usage): New. - (main): Accept --version and --help options. - -2008-06-04 Daniel Jacobowitz <dan@codesourcery.com> - - * linux-arm-low.c (thumb_breakpoint, thumb_breakpoint_len): New. - (arm_breakpoint_at): Handle Thumb. - (the_low_target): Add comment. - -2008-05-29 Ulrich Weigand <uweigand@de.ibm.com> - - * linux-ppc-low.c (ppc_collect_ptrace_register): Clear buffer. - -2008-05-09 Doug Evans <dje@google.com> - - * server.h (decode_search_memory_packet): Declare. - * remote-utils.c (decode_search_memory_packet): New fn. - * server.c (handle_search_memory_1): New fn. - (handle_search_memory): New fn. - (handle_query): Process qSearch:memory packets. - -2008-05-08 Ulrich Weigand <uweigand@de.ibm.com> - - * regcache.c (registers_length): Remove. - (set_register_cache): Verify that PBUFSIZ is large enough to hold a - full register packet. - * regcache.h (registers_length): Remove prototype. - * server.h (PBUFSIZ): Define to 16384. - -2008-05-03 Ulrich Weigand <uweigand@de.ibm.com> - - * configure.srv (powerpc*-*-linux*): Set srv_regobj to - powerpc-32l.o, powerpc-altivec32l.o, powerpc-e500l.o, - powerpc-64l.o, and powerpc-altivec64l.o. - Remove rs6000/powerpc-32.xml, rs6000/powerpc-64.xml, and - rs6000/powerpc-e500.xml; add rs6000/powerpc-32l.xml, - rs6000/powerpc-altivec32l.xml, rs6000/powerpc-e500l.xml, - rs6000/powerpc-64l.xml, rs6000/powerpc-altivec64l.xml, - rs6000/power-linux.xml, and rs6000/power64-linux.xml - to srv_xmlfiles. - - * Makefile.in (reg-ppc.o, reg-ppc.c): Remove, replace by ... - (powerpc-32l.o, powerpc-32l.c): ... these new rules. - (powerpc-32.o, powerpc-32.c): Remove, replace by ... - (powerpc-altivec32l.o, powerpc-altivec32l.c): ... these new rules. - (powerpc-e500.o, powerpc-e500.c): Remove, replace by ... - (powerpc-e500l.o, powerpc-e500l.c): ... these new rules. - (reg-ppc64.o, reg-ppc64.c): Remove, replace by ... - (powerpc-64l.o, powerpc-64l.c): ... these new rules. - (powerpc-64.o, powerpc-64.c): Remove, replace by ... - (powerpc-altivec64l.o, powerpc-altivec64l.c): ... these new rules. - (clean): Update. - - * linux-ppc-low.c (init_registers_ppc): Remove, replace by ... - (init_registers_powerpc_32l): ... this new prototype. - (init_registers_powerpc_32): Remove, replace by ... - (init_registers_powerpc_altivec32l): ... this new prototype. - (init_registers_powerpc_e500): Remove, replace by ... - (init_registers_powerpc_e500l): ... this new prototype. - (init_registers_ppc64): Remove, replace by ... - (init_registers_powerpc_64l): ... this new prototype. - (init_registers_powerpc_64): Remove, replace by ... - (init_registers_powerpc_altivec64l): ... this new prototype. - (ppc_num_regs): Set to 73. - (PT_ORIG_R3, PT_TRAP): Define if necessary. - (ppc_regmap, ppc_regmap_e500): Add values for orig_r3 and trap. - (ppc_cannot_store_register): Handle orig_r3 and trap. - (ppc_arch_setup): Update init_registers_... calls. - (ppc_fill_gregset): Handle orig_r3 and trap. - - * inferiors.c (clear_inferiors): Reset current_inferior. - -2008-04-23 Paolo Bonzini <bonzini@gnu.org> - - * acinclude.m4: Add override.m4. - * configure: Regenerate. - -2008-04-21 Ulrich Weigand <uweigand@de.ibm.com> - - * linux-ppc-low.c (ppc_arch_setup): Reset ppc_hwcap after the - initial call to init_register_ppc64. - -2008-04-21 Ulrich Weigand <uweigand@de.ibm.com> - - * configure.srv (powerpc64-*-linux*, powerpc-*-linux*): Merge into - single powerpc*-*-linux* case. - (s390-*-linux*, s390x-*-linux*): Merge into single s390*-*-linux* case. - -2008-04-17 Ulrich Weigand <uweigand@de.ibm.com> - - * configure.srv [powerpc64-*-linux*]: Remove powerpc-e500.o from - srv_regobj. Remove rs6000/powerpc-e500.xml and rs6000/power-spe.xml - from reg_xmlfiles. - * linux-ppc-low.c: Include <elf.h>. - (PPC_FEATURE_HAS_ALTIVEC, PPC_FEATURE_HAS_SPE): Define. - (ppc_hwcap): New global variable. - (ppc_regmap): Remove __SPE__ #ifdef sections. - (ppc_regmap_e500): New global variable. - (ppc_cannot_store_register): Update __SPE__ special case. - (ppc_get_hwcap): New function. - (ppc_arch_setup): Use it to determine whether inferior supports - AltiVec or SPE registers. Set the_low_target.regmap if appropriate. - (ppc_fill_vrregset, ppc_store_vrregset): Define unconditionally. - Do not access registers if target does not support AltiVec. - (ppc_fill_evrregset, ppc_store_evrregset): Define unconditionally. - Do not access registers if target does not support SPE. - (target_regsets): Unconditionally include AltiVec and SPE regsets. - -2008-04-17 Daniel Jacobowitz <dan@codesourcery.com> - - * linux-low.c (disabled_regsets, num_regsets): New. - (use_regsets_p): Delete. - (linux_wait_for_process): Clear disabled_regsets. - (regsets_fetch_inferior_registers): Check and set it. - (regsets_store_inferior_registers): Likewise. - (linux_fetch_registers, linux_store_registers): Do not use - use_regsets_p. - (initialize_low): Allocate disabled_regsets. - -2008-04-14 Daniel Jacobowitz <dan@codesourcery.com> - - * Makefile.in (LIBOBJS): New. - (OBS): Use LIBOBJS. - (memmem.o): New rule. - * configure.ac: Use AC_CONFIG_LIBOBJ_DIR and check for memmem. - * configure: Regenerated. - -2008-04-04 Ulrich Weigand <uweigand@de.ibm.com> - - * server.c (handle_query): Never return "unsupported" for - qXfer:features:read queries. - -2008-03-27 Ulrich Weigand <uweigand@de.ibm.com> - - * server.c (get_features_xml): Fix inverted condition. - (handle_query): Always support qXfer:feature:read. - -2008-03-10 Daniel Jacobowitz <dan@codesourcery.com> - - * server.c (wrapper_argv): New. - (start_inferior): Handle wrapper_argv. If set, expect an extra - trap. - (gdbserver_usage): Document --wrapper. - (main): Parse --wrapper. - -2008-02-28 Ulrich Weigand <uweigand@de.ibm.com> - - * configure.srv [powerpc64-*-linux*]: Add all files mentioned for - powerpc-*-linux* to srv_regobj and reg_xmlfiles. - * linux-ppc-low.c (ppc_get_pc): Support bi-arch operation. - (ppc_set_pc): Likewise. - (ppc_arch_setup): New function. - (ppc_fill_gregset): Call ppc_collect_ptrace_register instead - of collect_register. - (the_low_target): Use ppc_arch_setup as arch_setup initializer. - -2008-02-28 Ulrich Weigand <uweigand@de.ibm.com> - - * configure.srv [powerpc64-*-linux*]: Use linux-ppc-low.o - instead of linux-ppc64-low.o. - * linux-ppc64-low.c: Remove file. - * Makefile.in (SFILES): Remove linux-ppc64-low.c. - (linux-ppc64-low.o): Remove rule. - - * linux-ppc-low.c (init_registers_ppc64): Add prototype. - (init_registers_powerpc_64): Likewise. - (ppc_regmap): Conditionally define depending on __powerpc64__. - (ppc_cannot_store_register): Do not special-case "fpscr" when - compiled on __powerpc64__. - (ppc_collect_ptrace_register): New function. - (ppc_supply_ptrace_register): New function. - (ppc_breakpoint): Change type to "unsigned int". - (ppc_breakpoint_at): Change type of "insn" to "unsigned int". - (the_low_target): Conditionally provide initializers for the - arch_setup member depending on __powerpc64__. Install - collect_ptrace_register and supply_ptrace_register members. - -2008-02-28 Ulrich Weigand <uweigand@de.ibm.com> - - * regcache.h (gdbserver_xmltarget): Add extern declaration. - * server.c (gdbserver_xmltarget): Define. - (get_features_xml): Use it to replace "target.xml" and arch_string. - - * configure.srv: Remove srv_xmltarget. Add XML files that were - mentioned there to srv_xmlfiles instead. Remove conditional tests - on gdb_cv_arm_iwmmxt, gdb_cv_ppc_altivec, gdb_cv_ppc_spe; set - srv_xmlfiles and srv_regobj to include all possible choices. - * configure.ac (srv_xmltarget): Remove. - (srv_xmlfiles): Do not add "target.xml". - (gdb_cv_arm_iwmmxt, gdb_cv_ppc_altivec, gdb_cv_ppc_spe): Remove - checks for supplementary target information. - * configure: Regenerate. - * Makefile.in (XML_TARGET): Remove. - (target.xml): Remove rule. - (clean): Do not clean up target.xml. - (.PRECIOUS): Do not mention target.xml. - - * target.h (struct target_ops): Remove arch_string member. - * linux-low.c (linux_arch_string): Remove. - (linux_target_ops): Remove arch_string initializer. - * linux-low.h (struct linux_target_ops): Remove arch_string member. - * linux-i386-low.c (the_low_target): Remove arch_string initializer. - * linux-x86-64-low.c (the_low_target): Remove arch_string initializer. - * spu-low.c (spu_arch_string): Remove. - (spu_target_ops): Remove arch_string initializer. - * win32-low.c (win32_arch_string): Remove. - (win32_target_ops): Remove arch_string initializer. - * win32-low.h (struct win32_target_ops): Remove arch_string member. - * win32-arm-low.c (the_low_target): Remove arch_string initializer. - * win32-i368-low.c (the_low_target): Remove arch_string initializer. - -2008-02-27 Ulrich Weigand <uweigand@de.ibm.com> - - * linux-low.h (struct linux_target_ops): Replace left_pad_xfer field - by collect_ptrace_register and supply_ptrace_register hooks. - * linux-low.c (fetch_register): Use supply_ptrace_register callback - instead of checking for the_low_target.left_pad_xfer. - (usr_store_inferior_registers): Use collect_ptrace_register callback - instead of checking for the_low_target.left_pad_xfer. - - * linux-s390-low.c (s390_collect_ptrace_register): New function. - (s390_supply_ptrace_register): Likewise. - (s390_fill_gregset): Call s390_collect_ptrace_register. - (the_low_target): Update. - - * linux-ppc64-low.c (ppc_collect_ptrace_register): New function. - (ppc_supply_ptrace_register): Likewise. - (the_low_target): Update. - - * linux-i386-low.c (the_low_target): Update. - * linux-x86-64-low.c (the_low_target): Update. - -2008-02-27 Ulrich Weigand <uweigand@de.ibm.com> - - * configure.srv [s390x-*-linux*]: Set srv_regobj to include both - reg-s390.o and reg-s390x.o. - - * linux-low.c (new_inferior): New global variable. - (linux_create_inferior, linux_attach): Set it. - (linux_wait_for_process): Call the_low_target.arch_setup after the - target has stopped for the first time. - (initialize_low): Do not call the_low_target.arch_setup. - - * linux-s390-low.c (s390_get_pc): Support bi-arch operation. - (s390_set_pc): Likewise. - (s390_arch_setup): New function. - (the_low_target): Use s390_arch_setup as arch_setup routine. - - * regcache.c (realloc_register_cache): New function. - (set_register_cache): Call it for each existing regcache. - -2008-02-27 Ulrich Weigand <uweigand@de.ibm.com> - - * server.h (init_registers): Remove prototype. - - * linux-low.h (struct linux_target_ops): Add arch_setup field. - * linux-low.c (initialize_low): Call the_low_target.arch_setup () - instead of init_registers (). - * linux-arm-low.c (init_registers_arm): Add prototype. - (init_registers_arm_with_iwmmxt): Likewise. - (the_low_target): Add initializer for arch_setup field. - * linux-cris-low.c (init_registers_cris): Add prototype. - (the_low_target): Add initializer for arch_setup field. - * linux-crisv32-low.c (init_registers_crisv32): Add prototype. - (the_low_target): Add initializer for arch_setup field. - * linux-i386-low.c (init_registers_i386_linux): Add prototype. - (the_low_target): Add initializer for arch_setup field. - * linux-ia64-low.c (init_registers_ia64): Add prototype. - (the_low_target): Add initializer for arch_setup field. - * linux-m32r-low.c (init_registers_m32r): Add prototype. - (the_low_target): Add initializer for arch_setup field. - * linux-m68k-low.c (init_registers_m68k): Add prototype. - (the_low_target): Add initializer for arch_setup field. - * linux-mips-low.c (init_registers_mips_linux): Add prototype. - (init_registers_mips64_linux): Likewise. - (the_low_target): Add initializer for arch_setup field. - * linux-ppc-low.c (init_registers_ppc): Add prototype. - (init_registers_powerpc_32, init_registers_powerpc_e500): Likewise. - (the_low_target): Add initializer for arch_setup field. - * linux-ppc64-low.c (init_registers_ppc64): Add prototype. - (init_registers_powerpc_64): Likewise. - (the_low_target): Add initializer for arch_setup field. - * linux-s390-low.c (init_registers_s390): Add prototype. - (init_registers_s390x): Likewise. - (the_low_target): Add initializer for arch_setup field. - * linux-sh-low.c (init_registers_sh): Add prototype. - (the_low_target): Add initializer for arch_setup field. - * linux-x86-64-low.c (init_registers_x86_64_linux): Add prototype. - (the_low_target): Add initializer for arch_setup field. - * linux-xtensa-low.c (init_registers_xtensa): Add prototype. - (the_low_target): Add initializer for arch_setup field. - - * win32-low.h (struct win32_target_ops): Add arch_setup field. - * win32-low.c (initialize_low): Call the_low_target.arch_setup () - instead of init_registers (). - * win32-arm-low.c (init_registers_arm): Add prototype. - (the_low_target): Add initializer for arch_setup field. - * win32-i386-low.c (init_registers_i386): Add prototype. - (the_low_target): Add initializer for arch_setup field. - - * spu-low.c (init_registers_spu): Add prototype. - (initialize_low): Call initialie_registers_spu () instead of - initialize_registers (). - -2008-02-19 Pedro Alves <pedro@codesourcery.com> - - * server.c (handle_v_requests): When handling the vRun and vAttach - packets, if already debugging a process, don't kill it. Return an - error instead. - -2008-02-17 Daniel Jacobowitz <dan@codesourcery.com> - - * server.c (handle_query): Correct length check. - -2008-02-14 Pedro Alves <pedro_alves@portugalmail.pt> - - * win32-low.c (do_initial_child_stuff): Add process handle - parameter. Set current_process_handle and current_process_id from the - parameters. Clear globals. - (win32_create_inferior): Don't set current_process_handle and - current_process_id here. Instead pass them on the call to - do_initial_child_stuff. - (win32_attach): Likewise. - (win32_clear_inferiors): New. - (win32_kill): Don't close the current process handle or the - current thread handle here. Instead call win32_clear_inferiors. - (win32_detach): Don't open a new handle to the process. Call - win32_clear_inferiors. - (win32_join): Don't rely on current_process_handle; open a new - handle using the process id. - (win32_wait): Call win32_clear_inferiors when the inferior process - has exited. - -2008-02-14 Daniel Jacobowitz <dan@codesourcery.com> - - * server.c (monitor_show_help): Add "exit". - -2008-02-11 Maxim Grigoriev <maxim2405@gmail.com> - - * Makefile.in (SFILES): Add linux-xtensa-low.c. - (clean): Add reg-xtensa.c. - (linux-xtensa-low.o, reg-xtensa.o, reg-xtensa.c): New dependencies. - * configure.srv (xtensa*-*-linux*) New target. - * linux-xtensa-low.c: New. - * xtensa-xtregs.c: New. - -2008-02-01 Pedro Alves <pedro_alves@portugalmail.pt> - - * hostio.c: Don't include errno.h. - (errno_to_fileio_errno): Move to hostio-errno. - * hostio.c: (hostio_error): Remove the error parameter. Defer the - error number outputting to the target->hostio_last_error callback. - (hostio_packet_error): Use FILEIO_EINVAL directly. - (handle_open, handle_pread, hostio_error, handle_unlink): Update - calls to hostio_error. - * hostio-errno.c: New. - * server.h (hostio_last_error_from_errno): Declare. - * target.h (target_ops): Add hostio_last_error member. - * linux-low.c (linux_target_op): Register hostio_last_error_from_errno - as hostio_last_error handler. - * spu-low.c (spu_target_ops): Likewise. - * win32-low.c [_WIN32_WCE] (win32_error_to_fileio_error) - (wince_hostio_last_error): New functions. - (win32_target_ops) [_WIN32_WCE]: Register wince_hostio_last_error - as hostio_last_error handler. - (win32_target_ops) [!_WIN32_WCE]: Register - hostio_last_error_from_errno as hostio_last_error handler. - * Makefile.in (SFILES): Add hostio.c and hostio-errno.c. - (hostio-errno.o): New rule. - * configure.ac (GDBSERVER_DEPFILES): Add $srv_hostio_err_objs. - * configure.srv (srv_hostio_err_objs): New variable. Default to - hostio-errno.o. - (arm*-*-mingw32ce*): Set srv_hostio_err_objs to "". - * configure: Regenerate. - -2008-01-29 Daniel Jacobowitz <dan@codesourcery.com> - - * linux-low.c (linux_attach_lwp): Do not _exit after errors. - (linux_kill, linux_detach): Clean up the process list. - * remote-utils.c (remote_open): Improve port number parsing. - (putpkt_binary, input_interrupt): Only send interrupts if the target - is running. - * server.c (extended_protocol): Make static. - (attached): Define earlier. - (exit_requested, response_needed, program_argv): New variables. - (target_running): New. - (start_inferior): Clear attached here. - (attach_inferior): Set attached here. - (require_running): Define. - (handle_query): Use require_running and target_running. Implement - "monitor exit". - (handle_v_attach, handle_v_run): New. - (handle_v_requests): Use require_running. Handle vAttach and vRun. - (gdbserver_usage): Update. - (main): Redo argument parsing. Handle --debug and --multi. Handle - --attach along with other options or after the port. Save - program_argv. Support no initial program. Resynchronize - communication with GDB after an error. Handle "monitor exit". - Use require_running and target_running. Always allow the extended - protocol. Do not error out for Hc0 or Hc-1. Do not automatically - restart in extended mode. - * README: Refer to the GDB manual. Update --attach usage. - -2007-12-20 Andreas Schwab <schwab@suse.de> - - * linux-low.c (STACK_SIZE): Define. - (linux_tracefork_child): Use it. Use __clone2 on ia64. - (linux_test_for_tracefork): Likewise. - -2007-12-18 Daniel Jacobowitz <dan@codesourcery.com> - - * linux-low.c (linux_wait_for_event): Update messages. Do not - reinsert auto-delete breakpoints. - * mem-break.c (struct breakpoint): Change return type of handler to - int. - (set_breakpoint_at): Update handler type. - (reinsert_breakpoint_handler): Return 1 instead of calling - delete_breakpoint. - (reinsert_breakpoint_by_bp): Check for the original breakpoint before - setting a new one. - (check_breakpoints): Delete auto-delete breakpoints and return 2. - * mem-break.h (set_breakpoint_at): Update handler type. - * thread-db.c (thread_db_create_event, thread_db_create_event): Update. - * win32-low.c (auto_delete_breakpoint): New. - (get_child_debug_event): Use it. - -2007-12-16 Daniel Jacobowitz <dan@codesourcery.com> - - * configure.ac: Check for pread and pwrite. - * hostio.c (handle_pread): Fall back to lseek and read. - (handle_pwrite): Fall back to lseek and write. - * config.in, configure: Regenerated. - -2007-12-07 Daniel Jacobowitz <dan@codesourcery.com> - - * server.c (myresume): Add own_buf argument. - (main): Update calls. - -2007-12-06 Daniel Jacobowitz <dan@codesourcery.com> - - * linux-low.c (linux_wait, linux_resume): Do not handle async I/O. - * remote-utils.c (remote_open): Do not call disable_async_io. - (block_async_io): Delete. - (unblock_async_io): Make static. - (initialize_async_io): New. - * server.c (handle_v_cont): Handle async I/O here. - (myresume): Likewise. Move other common resume tasks here... - (main): ... from here. Call initialize_async_io. Disable async - I/O before the main loop. - * server.h (initialize_async_io): Declare. - (block_async_io, unblock_async_io): Delete prototypes. - * spu-low.c (spu_resume, spu_wait): Do not handle async I/O here. - -2007-12-06 Mick Davis <mickd@goanna.iinet.net.au> - - * remote-utils.c (readchar): Allow binary data in received messages. - -2007-12-03 Pedro Alves <pedro_alves@portugalmail.pt> - - * win32-low.c (attaching): New global. - (win32_create_inferior): Clear the `attaching' global. - (win32_attach): Set the `attaching' global. - (get_child_debug_event) [_WIN32_WCE]: Stop the inferior when - attaching. Only set a breakpoint at the entry point if not - attaching. - -2007-12-03 Pedro Alves <pedro_alves@portugalmail.pt> - - * server.c (main): Don't report dll events on the initial - connection on attaches. - -2007-12-03 Pedro Alves <pedro_alves@portugalmail.pt> - - * server.c (main): Relax numerical bases supported for the pid of - the --attach command line argument. - -2007-12-03 Pedro Alves <pedro_alves@portugalmail.pt> - - * win32-low.c (win32_attach): Call OpenProcess before - DebugActiveProcess, not after. Add last error output to error - call. - -2007-12-03 Pedro Alves <pedro_alves@portugalmail.pt> - - * win32-low.c (win32_get_thread_context) - (win32_set_thread_context): New functions. - (thread_rec): Use win32_get_thread_context. - (continue_one_thread, win32_resume): Use win32_set_thread_context. - * win32-low.h (win32_thread_info) [_WIN32_WCE]: Add `base_context' - field. - -2007-12-03 Leo Zayas - Pedro Alves <pedro_alves@portugalmail.pt> - - * win32-low.c (soft_interrupt_requested, faked_breakpoint): New - global variables. - (child_add_thread): Minor cleanup. - (child_continue): Resume artificially suspended threads before - calling ContinueDebugEvent. - (suspend_one_thread): New. - (fake_breakpoint_event): New. - (get_child_debug_event): Change return type to int. Check here if - gdb sent an interrupt request. If a soft interrupt was requested, - fake a breakpoint event. Return 0 if there is no event to handle, - and 1 otherwise. - (win32_wait): Don't check here if gdb sent an interrupt request. - Ensure there is a valid event to handle. - (win32_request_interrupt): Add soft interruption method as last - resort. - -2007-12-03 Leo Zayas - Pedro Alves <pedro_alves@portugalmail.pt> - - * win32-low.h (win32_thread_info): Add descriptions to the - structure members. Replace `suspend_count' counter by a - `suspended' flag. - * win32-low.c (thread_rec): Update condition of when to get the - context from the inferior. Rely on ContextFlags being set if it - has already been retrieved. Only suspend the inferior thread if - we haven't already. Warn if that fails. - (continue_one_thread): s/suspend_count/suspended/. Only call - ResumeThread once. Warn if that fails. - -2007-12-02 Pedro Alves <pedro_alves@portugalmail.pt> - - * win32-low.c (win32_wait): Don't read from the inferior when it - has already exited. - -2007-12-02 Pedro Alves <pedro_alves@portugalmail.pt> - - * Makefile.in (win32_low_h): New variable. - (win32-low.o): Add dependency on $(win32_low_h). - (win32-arm-low.o, win32-i386-low.o): New rules. - -2007-11-30 Daniel Jacobowitz <dan@codesourcery.com> - - * hostio.c: Correct copyright year. - -2007-11-30 Daniel Jacobowitz <dan@codesourcery.com> - - * Makefile.in (OBS): Add hostio.o. - (hostio.o): New rule. - * server.h (handle_vFile): Declare. - * hostio.c: New file. - * server.c (handle_v_requests): Take packet_len and new_packet_len - for binary packets. Call handle_vFile. - (main): Update call to handle_v_requests. - -2007-11-05 Daniel Jacobowitz <dan@codesourcery.com> - - * linux-low.c: Include <sched.h>. - -2007-11-01 Daniel Jacobowitz <dan@codesourcery.com> - - * linux-low.c (linux_tracefork_grandchild): New. - (linux_tracefork_child): Use clone. - (linux_test_for_tracefork): Use clone; allocate and free a stack. - -2007-10-31 Joel Brobecker <brobecker@adacore.com> - - * Makefile.in: Use $(SHELL) instead of "sh" to call regdat.sh. - -2007-10-24 Daniel Jacobowitz <dan@codesourcery.com> - - * linux-low.c (handle_extended_wait): Handle unexpected signals. - -2007-10-23 Daniel Jacobowitz <dan@codesourcery.com> - - * inferiors.c (change_inferior_id): Delete. - (add_pid_to_list, pull_pid_from_list): New. - * linux-low.c (PTRACE_SETOPTIONS, PTRACE_GETEVENTMSG) - (PTRACE_O_TRACESYSGOOD, PTRACE_O_TRACEFORK, PTRACE_O_TRACEVFORK) - (PTRACE_O_TRACECLONE, PTRACE_O_TRACEEXEC, PTRACE_O_TRACEVFORKDONE) - (PTRACE_O_TRACEEXIT, PTRACE_EVENT_FORK, PTRACE_EVENT_VFORK) - (PTRACE_EVENT_CLONE, PTRACE_EVENT_EXEC, PTRACE_EVENT_VFORK_DONE) - (PTRACE_EVENT_EXIT, __WALL): Provide default definitions. - (stopped_pids, thread_db_active, must_set_ptrace_flags): New variables. - (using_threads): Always set to 1. - (handle_extended_wait): New. - (add_process): Do not set TID. - (linux_create_inferior): Set must_set_ptrace_flags. - (linux_attach_lwp): Remove TID argument. Do not check using_threads. - Use PTRACE_SETOPTIONS. Call new_thread_notify. Update all callers. - (linux_thread_alive): Rename TID argument to LWPID. - (linux_wait_for_process): Handle unknown processes. Do not use TID. - (linux_wait_for_event): Do not use TID or check using_threads. Update - call to dead_thread_notify. Call handle_extended_wait. - (linux_create_inferior): Use PTRACE_SETOPTIONS. - (send_sigstop): Delete sigstop_sent. - (wait_for_sigstop): Avoid TID. - (linux_supports_tracefork_flag, linux_tracefork_child, my_waitpid) - (linux_test_for_tracefork): New. - (linux_lookup_signals): Use thread_db_active and - linux_supports_tracefork_flag. - (initialize_low): Use thread_db_active and linux_test_for_tracefork. - * linux-low.h (get_process_thread): Avoid TID. - (struct process_ifo): Move thread_known and tid to the end. Remove - sigstop_sent. - (linux_attach_lwp, thread_db_init): Update prototypes. - * server.h (change_inferior_id): Delete prototype. - (add_pid_to_list, pull_pid_from_list): New prototypes. - * thread-db.c (thread_db_use_events): New. - (find_first_thread): Rename to... - (find_one_thread): ...this. Update callers and messages. Do not - call fatal. Check thread_db_use_events. Do not call - change_inferior_id or new_thread_notify. - (maybe_attach_thread): Update. Do not call new_thread_notify. - (thread_db_init): Set thread_db_use_events. Check use_events. - * utils.c (fatal, warning): Correct message prefix. - -2007-10-15 Daniel Jacobowitz <dan@codesourcery.com> - - * Makefile.in (clean): Remove new files. - (powerpc-32.o, powerpc-32.c, powerpc-e500.o, powerpc-e500.c) - (powerpc-64.o, powerpc-64.c): New rules. - * configure.srv: Use alternate register sets for powerpc64-*-linux* - with AltiVec, powerpc-*-linux* with AltiVec, and powerpc-*-linux* - with SPE. - * linux-ppc-low.c (ppc_regmap): Do not fetch the FP registers for - SPE targets. - (ppc_cannot_store_register): Do not check for FPSCR for SPE targets. - (PTRACE_GETVRREGS, PTRACE_SETVRREGS, SIZEOF_VRREGS, ppc_fill_vrregset) - (ppc_store_vrregset, PTRACE_GETEVRREGS, PTRACE_SETEVRREGS) - (struct gdb_evrregset_t, ppc_fill_evrregset, ppc_store_evrregset): New. - (target_regsets): Add AltiVec and SPE register sets. - * configure.ac: Check for AltiVec and SPE. - * linux-ppc64-low.c (PTRACE_GETVRREGS, PTRACE_SETVRREGS, SIZEOF_VRREGS) - (ppc_fill_vrregset, ppc_store_vrregset): New. - (target_regsets): Add AltiVec register set. - * configure: Regenerated. - -2007-09-19 Daniel Jacobowitz <dan@codesourcery.com> - - * linux-low.c (O_LARGEFILE): Define. - (linux_read_memory): Use /proc/PID/mem. - * configure.ac: Use AC_GNU_SOURCE. Check for pread64. - * configure, config.in: Regenerated. - -2007-09-04 Daniel Jacobowitz <dan@codesourcery.com> - - * linux-low.c (linux_wait_for_event): Do not pass signals while - single-stepping. - -2007-09-03 Pedro Alves <pedro_alves@portugalmail.pt> - - * win32-low.c (create_process): New. - (win32_create_inferior): Use create_process instead of - CreateProcess. If create_process failed retry appending an ".exe" - suffix. Store the GetLastError result immediatelly after - create_process calls and use it on the call to error. - -2007-09-03 Pedro Alves <pedro_alves@portugalmail.pt> - - * win32-low.c (handle_load_dll): Don't use toolhelp when waiting. - -2007-08-23 Joel Brobecker <brobecker@adacore.com> - - * configure.ac: Switch license to GPLv3. - -2007-08-01 Michael Snyder <msnyder@access-company.com> - - * remote-utils.c (putpkt_binary): Memory leak, free buf2. - -2007-07-31 Pedro Alves <pedro_alves@portugalmail.pt> - - * win32-low.c (winapi_CloseToolhelp32Snapshot) [_WIN32_WCE]: New - typedef. - (win32_CloseToolhelp32Snapshot) [_WIN32_WCE]: New global var. - (load_toolhelp) [_WIN32_WCE]: Load TOOLHELP.DLL. Get - CloseToolhelp32Snapshot. - (toolhelp_get_dll_name) [_WIN32_WCE]: Close the snapshot with - CloseToolhelp32Snapshot. - -2007-07-27 Michael Snyder <michael.snyder@access-company.com> - - * server.c (main): Check for inferior exit before main loop. - -2007-07-18 Pedro Alves <pedro_alves@portugalmail.pt> - - * remote-utils.c (remote_open): Set SO_KEEPALIVE on remote_desc - instead of on tmp_desc. - -2007-07-17 Pedro Alves <pedro_alves@portugalmail.pt> - Daniel Jacobowitz <dan@codesourcery.com> - - * inferiors.c (all_dlls, dlls_changed, get_dll): New. - (add_thread): Minor cleanups. - (clear_inferiors): Move lower in the file. Clear the DLL - list. - (free_one_dll, match_dll, loaded_dll, unloaded_dll, clear_list): New. - * remote-utils.c (prepare_resume_reply): Check dlls_changed. - (xml_escape_text): New. - * server.c (handle_query): Handle qXfer:libraries:read. Report it - for qSupported. - (handle_v_cont): Report errors. - (gdbserver_version): Update. - (main): Correct size of own_buf. Do not report initial DLL events. - * server.h (struct dll_info, all_dlls, dlls_changed, loaded_dll) - (unloaded_dll, xml_escape_text): New. - * win32-low.c (enum target_waitkind): Update comments. - (win32_add_one_solib, get_image_name, winapi_EnumProcessModules) - (winapi_GetModuleInformation, winapi_GetModuleFileNameExA) - (win32_EnumProcessModules, win32_GetModuleInformation) - (win32_GetModuleFileNameExA, load_psapi, psapi_get_dll_name) - (winapi_CreateToolhelp32Snapshot, winapi_Module32First) - (winapi_Module32Next, win32_CreateToolhelp32Snapshot) - (win32_Module32First, win32_Module32Next, load_toolhelp) - (toolhelp_get_dll_name, handle_load_dll, handle_unload_dll): New. - (get_child_debug_event): Handle DLL events. - (win32_wait): Likewise. - -2007-07-12 Daniel Jacobowitz <dan@codesourcery.com> - - * configure.srv: Set srv_linux_regsets for sh*-*-linux*. - * linux-sh-low.c (sh_fill_gregset, target_regsets): New. - -2007-07-08 Pedro Alves <pedro_alves@portugalmail.pt> - - * win32-low.c (handle_output_debug_string): Ignore event if not - waiting. - -2007-07-08 Pedro Alves <pedro_alves@portugalmail.pt> - - * win32-arm-low.c (arm_wince_breakpoint): Fix typo. - -2007-07-03 Daniel Jacobowitz <dan@codesourcery.com> - - * remote-utils.c (look_up_one_symbol): Handle 'm' packets. - -2007-07-02 Daniel Jacobowitz <dan@codesourcery.com> - - * inferiors.c (change_inferior_id): Add comment. - * linux-low.c (check_removed_breakpoint): Add an early - prototype. Improve debug output. - (linux_attach): Doc update. - (linux_detach_one_process, linux_detach): Clean up before releasing - each process. - (send_sigstop, wait_for_sigstop): Improve comments and debug output. - * linux-low.h (struct process_info): Doc improvement. - * mem-break.c (delete_all_breakpoints): New. - * mem-break.h (delete_all_breakpoints): New prototype. - * thread-db.c (find_first_thread): New. - (thread_db_create_event): Call it instead of - thread_db_find_new_threads. Clean up unused variables. - (maybe_attach_thread): Remove first thread handling. - (thread_db_find_new_threads): Use find_first_thread. - (thread_db_get_tls_address): Likewise. - -2007-06-27 Daniel Jacobowitz <dan@codesourcery.com> - - * thread-db.c (thread_db_find_new_threads): Add prototype. - (thread_db_create_event): Check for the main thread before adding - a new thread. - (maybe_attach_thread): Only enable event reporting if TID == 0. - (thread_db_get_tls_address): Check for new threads. - -2007-06-20 Daniel Jacobowitz <dan@codesourcery.com> - - * linux-low.c (linux_create_inferior): Try execv before execvp. - * spu-low.c (spu_create_inferior): Likewise. - -2007-06-13 Mike Frysinger <vapier@gentoo.org> - - * linux-low.c (linux_create_inferior): Change execv to execvp. - * spu-low.c (spu_create_inferior): Likewies. - -2007-06-13 Daniel Jacobowitz <dan@codesourcery.com> - - * Makefile.in (clean): Clean new files instead of deleted ones. - (reg-mips.o, reg-mips.c, reg-mips64.o, reg-mips64.c): Delete. - (mips-linux.o, mips-linux.c, mips64-linux.o, mips64-linux.c): New - rules. - * configure.srv: Specify XML files and new regformats for MIPS and - MIPS64 GNU/Linux. - * linux-mips-low.c (mips_num_regs): Set to only used registers. - (mips_regmap): Do not fetch $0. Remove unused registers. Add - an entry for the restart register. - (mips_cannot_fetch_register, mips_cannot_store_register) - (mips_reinsert_addr, mips_fill_fpregset, mips_store_fpregset): Update - register names to match the XML descriptions. - (mips_fill_gregset, mips_store_gregset): Likewise. Handle the - restart register instead of $0. - -2007-06-12 Ulrich Weigand <uweigand@de.ibm.com> - Markus Deuling <deuling@de.ibm.com> - - * remote-utils.c (decode_xfer_write): New function. - * server.h (decode_xfer_write): Add prototype. - * server.c (handle_query): Add PACKET_LEN argument. Support - qXfer:spu:read and qXfer:spu:write packets. - (main): Pass packet_len to handle_query. - * spu-low.c (spu_target_ops): Add spu_proc_xfer_spu. - * target.h (target_ops): Add qxfer_spu. - -2007-06-12 Ulrich Weigand <uweigand@de.ibm.com> - - * spu-low.c (spu_proc_xfer_spu): Do not return failure when - accessing non-seekable spufs files. - -2007-05-16 Markus Deuling <deuling@de.ibm.com> - - * server.c (handle_query): Add reply for qC packet. - -2007-05-10 Pedro Alves <pedro_alves@portugalmail.pt> - Leo Zayas <lerele@champenstudios@com> - - * server.h (check_remote_input_interrupt_request): New function. - * remote_utils.c (INVALID_DESCRIPTOR): New define. - (remote_desc): Initialize with INVALID_DESCRIPTOR. - (input_interrupt): Expose on USE_WIN32API too. Fix whitespace. - (check_remote_input_interrupt_request): New function. - * server.h (check_remote_input_interrupt_request): Declare. - * win32-low.c (winapi_DebugBreakProcess, - winapi_GenerateConsoleCtrlEvent): New typedefs. - (get_child_debug_event): Lower Win32 debug event polling from 1 sec - to 250 ms. - (win32_wait): Check for remote interrupt request - with check_remote_input_interrupt_request. - (win32_request_interrupt): New function. - (win32_target_op): Set request_interrupt to win32_request_interrupt. - -2007-05-10 Pedro Alves <pedro_alves@portugalmail.pt> - - * win32-low.c (debug_registers_changed, - debug_registers_used, CONTEXT_EXTENDED_REGISTERS, - CONTEXT_FLOATING_POINT, CONTEXT_DEBUG_REGISTERS, - CONTEXT_DEBUGGER, CONTEXT_DEBUGGER_DR): Delete. - (thread_rec): Get context using the low target. - (child_add_thread): Call thread_added on the low target, - which does the same thing. - (regptr): Delete. - (do_initial_child_stuff): Remove debug registers references. - Set context using the low target. Resume threads after - setting the contexts. - (child_continue): Remove dead variable. Remove debug - registers references. - (child_fetch_inferior_registers): Go through the low target. - (do_child_store_inferior_registers): Remove. - (child_store_inferior_registers): Go through the low target. - (win32_resume): Remove debug registers references. - Set context using the low target. - (handle_exception): Change return type to void. Don't record - context here. Set status to TARGET_WAITKIND_SPURIOUS on a - first chance exception. - (get_child_debug_event): Change return type to void. Remove - goto loop. Always return after waiting for debug event. - (win32_wait): Convert to switch statement. Handle spurious - events. - - * win32-i386-low.c (debug_registers_changed, - debug_registers_used): New. - (initial_stuff): Rename to ... - (i386_initial_stuff): ... this. Clear debug registers - state variables. - (store_debug_registers): Delete. - (i386_get_thread_context): New. - (load_debug_registers): Delete. - (i386_set_thread_context): New. - (i386_thread_added): New. - (single_step): Rename to ... - (i386_single_step): ... this. - (do_fetch_inferior_registers): Rename to ... - (i386_fetch_inferior_register): ... this. - (i386_store_inferior_register): New. - (the_low_target): Adapt to new interface. - - * win32-arm-low.c (CONTEXT_FLOATING_POINT): Define. - (arm_get_thread_context): New. - (arm_set_thread_context): New. - (regptr): New. - (do_fetch_inferior_registers): Rename to ... - (arm_fetch_inferior_register): ... this. - (arm_store_inferior_register): New. - (arm_wince_breakpoint): Reimplement as unsigned long. - (arm_wince_breakpoint_len): Define. - (the_low_target): Adapt to new interface. - - * win32-low.h (target_ops): Remove regmap, store_debug_registers and - load_debug_registers. Add get_thread_context, set_thread_context, - thread_added and store_inferior_register. Rename - fetch_inferior_registers to fetch_inferior_register. - (regptr): Remove declaration. - -2007-05-10 Pedro Alves <pedro_alves@portugalmail.pt> - - * linux-low.c (linux_detach): Change return type to int. Return 0. - * spu-low.c (spu_detach): Likewise. - -2007-05-10 Pedro Alves <pedro_alves@portugalmail.pt> - - * target.h (target_ops): Change return type of detach to int. - Add join. - (join_inferior): New. - * server.c (main): Don't skip detach support on mingw32. - If the inferior doesn't support detaching return error. - Call join_inferior instead of using waitpid. - * linux-low.c (linux_join): New. - (linux_target_op): Add linux_join. - * spu-low.c (spu_join): New. - (spu_target_ops): Add spu_join. - * win32-low.c (win32_detach): Adapt to new interface. - Reopen current_process_handle before detaching. Issue a child - resume before detaching. - (win32_join): New. - (win32_target_op): Add win32_join. - -2007-05-10 Pedro Alves <pedro_alves@portugalmail.pt> - - * win32-low.c (win32-attach): Fix return value. - * target.h (target_ops): Describe ATTACH return values. - -2007-05-10 Pedro Alves <pedro_alves@portugalmail.pt> - - * win32-low.c (GETPROCADDRESS): Define. - (winapi_DebugActiveProcessStop): Add WINAPI. typedef as pointer. - (winapi_DebugSetProcessKillOnExit): Likewise. - (win32_create_inferior): Force usage of ansi CreateProcessA. - (win32_attach): Use GETPROCADDRESS. - (win32_detach): Likewise. - -2007-05-10 Pedro Alves <pedro_alves@portugalmail.pt> - - * win32-low.c (win32_wait): Don't use WSTOPSIG. - -2007-03-30 Pedro Alves <pedro_alves@portugalmail.pt> - - * win32-low.c: Commit leftover changes from 2007-03-29. - -2007-03-30 Daniel Jacobowitz <dan@codesourcery.com> - - * i387-fp.c (struct i387_fsave, struct i387_fxsave): Make 16-bit - fields short instead of int. Add explicit padding. - (i387_cache_to_fsave): Remove unnecessary casts. - (i387_fsave_to_cache): Doc fix. - (i387_cache_to_fxsave): Remove unnecessary casts and masking. - -2007-03-30 Daniel Jacobowitz <dan@codesourcery.com> - - * i387-fp.c (i387_cache_to_fxsave): Reinitialize val2 before use. - (i387_fxsave_to_cache): Check fp->ftag while building ftag value. - -2007-03-29 Pedro Alves <pedro_alves@portugalmail.pt> - - * configure.srv (arm*-*-mingw32ce*): Move near the other - arm targets. - -2007-03-29 Pedro Alves <pedro_alves@portugalmail.pt> - - * configure.ac: Add errno checking. - (AC_CHECK_HEADERS): Add errno.h, fcntl.h, signal.h, - sys/file.h and malloc.h. - (AC_CHECK_DECLS): Add perror. - (srv_mingwce): Handle. - * configure.srv (i[34567]86-*-cygwin*): Add - win32-i386-low.o to srv_tgtobj. - (i[34567]86-*-mingw*): Likewise. - (arm*-*-mingw32ce*): Add case. - * gdbreplay.c [HAVE_SYS_FILE_H, HAVE_SIGNAL_H, - HAVE_FCNTL_H, HAVE_ERRNO_H, HAVE_MALLOC_H]: Check. - [__MINGW32CE__] (strerror): New function. - [__MINGW32CE__] (errno): Define to GetLastError. - [__MINGW32CE__] (COUNTOF): New macro. - (remote_open): Remove extra close call. - * mem-break.c (delete_breakpoint_at): New function. - * mem-break.h (delete_breakpoint_at): Declare. - * remote-utils.c [HAVE_SYS_FILE_H, HAVE_SIGNAL_H, - HAVE_FCNTL_H, HAVE_UNISTD_H, HAVE_ERRNO_H]: Check. - [USE_WIN32API] (read, write): Add char* casts. - * server.c [HAVE_UNISTD_H, HAVE_SIGNAL_H]: Check. - * server.h: Include wincecompat.h on Windows CE. - [HAVE_ERRNO_H]: Check. - (perror): Declare if not declared. - * utils.c: Add stdlib.h, errno.h and malloc.h includes. - (perror_with_name): Remove errno declaration. - * wincecompat.h: New. - * wincecompat.c: New. - * win32-low.h: New. - * win32-arm-low.c: New. - * win32-i386-low.c: New. - (win32-low.c): Include mem-break.h and win32-low.h, and winnt.h. - (OUTMSG2): Make it safe. - (_T): New macro. - (COUNTOF): New macro. - (NUM_REGS): Get it from the low target. - (CONTEXT_EXTENDED_REGISTERS, CONTEXT_FLOATING_POINT, - CONTEXT_DEBUG_REGISTERS): Add fallbacks to 0. - (thread_rec): Let low target handle debug registers. - (child_add_thread): Likewise. - (child_init_thread_list): Likewise. - (continue_one_thread): Likewise. - (regptr): New. - (do_child_fetch_inferior_registers): Move to ... - * win32-i386-low.c: ... here, and rename to ... - (do_fetch_inferior_registers): ... this. - * win32-low.c (child_fetch_inferior_registers): - Go through the low target. - (do_child_store_inferior_registers): Use regptr. - (strwinerror): New function. - (win32_create_inferior): Handle Windows CE. - Use strwinerror instead of strerror on Windows error - codes. Add program to the error output. - Don't close the main thread handle on Windows CE. - (win32_attach): Use coredll.dll on Windows CE. - (win32_kill): Close current process and current - thread handles. - (win32_detach): Use coredll.dll on Windows CE. - (win32_resume): Let low target handle debug registers, and - step request. - (handle_exception): Add/Remove initial breakpoint. Avoid - non-existant WSTOPSIG on Windows CE. - (win32_read_inferior_memory): Cast to remove warning. - (win32_arch_string): Go through the low target. - (initialize_low): Call set_breakpoint_data with the low - target's breakpoint. - * win32-low.c (dr, FLAG_TRACE_BIT, FCS_REGNUM, - FOP_REGNUM, mappings): Move to ... - * win32-i386-low.c: ... here. - * win32-low.c (win32_thread_info): Move to ... - * win32-low.h: ... here. - * Makefile.in (SFILES): Add win32-low.c, win32-i386-low.c, - win32-arm-low.c and wincecompat.c. - (all:): Add $EXEEXT. - (install-only:): Likewise. - (gdbserver:): Likewise. - (gdbreplay:): Likewise. - * config.in: Regenerate. - * configure: Regenerate. - -2007-03-28 Pedro Alves <pedro_alves@portugalmail.pt> - - * win32-low.c: Rename typedef thread_info to - win32_thread_info throughout. - -2007-03-28 Pedro Alves <pedro_alves@portugalmail.pt> - - * win32-i386-low.c: Rename to ... - * win32-low.c: ... this. - * configure.srv: Replace win32-i386-low.o with win32-low.o. - * Makefile.in: Likewise. - -2007-03-27 Pedro Alves <pedro_alves@portugalmail.pt> - - * remote-utils.c (monitor_output): Constify msg parameter. - * server.h (monitor_output): Likewise. - * win32-i386-low.c (handle_output_debug_string): New. - (win32_kill): Handle OUTPUT_DEBUG_STRING_EVENT events using - handle_output_debug_string. - (get_child_debug_event): Likewise. - -2007-03-27 Mat Hostetter <mat@lcs.mit.edu> - - * server.c (main): Correct strtoul check. - -2007-03-27 Jon Ringle <jon@ringle.org> - - * linux-low.c: Check __ARCH_HAS_MMU__ also. - -2007-03-27 Brooks Moses <brooks.moses@codesourcery.com> - - * Makefile.in: Add dummy "pdf" and "install-pdf" targets. - -2007-02-27 Daniel Jacobowitz <dan@codesourcery.com> - - * terminal.h: Check HAVE_SGTTY_H. - -2007-02-27 Mat Hostetter <mat@lcs.mit.edu> - - * remote-utils.c (remote_open): Print out the assigned port number. - -2007-02-26 Daniel Jacobowitz <dan@codesourcery.com> - - * remote-utils.c (monitor_output): New function. - * server.c (debug_threads): Define here. - (monitor_show_help): New function. - (handle_query): Handle qRcmd. - (main): Do not handle 'd' packet. - * server.h (debug_threads, remote_debug, monitor_output): Declare. - * linux-low.c, spu-low.c, win32-i386-low.c: Remove definitions - of debug_threads. - -2007-02-25 Pedro Alves <pedro_alves@portugalmail.pt> - - * Makefile.in (EXEEXT): New. - (clean): Use $(EXEEXT). - -2007-02-25 Pedro Alves <pedro_alves@portugalmail.pt> - - * target.h (target_ops): Rename send_signal to request_interrupt, - and remove enum target_signal parameter. - * linux-low.c (linux_request_interrupt): Rename from - linux_send_signal, and always send SIGINT. - * spu-low.c (spu_request_interrupt): Rename from spu_send_signal, - and always send SIGINT. - * remote-utils.c (putpkt_binary): Call request_interrupt, instead - of send_signal. - (input_interrupt): Likewise. - -2007-02-25 Pedro Alves <pedro_alves@portugalmail.pt> - - * server.c (get_features_xml): Check if target implemented - arch_string. - * win32-i386-low.c (win32_arch_string): New. - (win32_target_ops): Add win32_arch_string as arch_string member. - -2007-02-22 Markus Deuling <deuling@de.ibm.com> - - * spu-low.c (spu_arch_string): New. - (spu_target_ops): Add spu_arch_string. - -2007-02-16 Daniel Jacobowitz <dan@codesourcery.com> - - * remote-utils.c: Remove HAVE_TERMINAL_H check. - * configure.ac: Do not check for terminal.h. - * configure, config.in: Regenerated. - -2007-02-08 Daniel Jacobowitz <dan@codesourcery.com> - - * Makefile.in (OBS): Add $(XML_BUILTIN). - (XML_DIR, XML_TARGET, XML_FILES, XML_BUILTIN): New. - (clean): Update. - (target.xml, xml-builtin.c, stamp-xml, arm-with-iwmmxt.o) - (arm-with-iwmmxt.c): New. - * config.in, configure: Regenerate. - * configure.ac: Check for iWMMXt. Handle srv_xmltarget, - srv_xmlbuiltin, and srv_xmlfiles. Define USE_XML. - * configure.srv: Mention srv_xmltarget and srv_xmlfiles. - (arm*-*-linux*): Add iWMMXt and regset support. - * linux-arm-low.c (PTRACE_GETWMMXREGS, PTRACE_SETWMMXREGS): Define. - (arm_fill_gregset, arm_store_gregset, arm_fill_wmmxregset) - (arm_store_wmmxregset, target_regsets): New. - * server.c (get_features_xml): Take annex argument. Check builtin - XML documents. - (handle_query): Handle multiple annexes. - -2007-01-29 Daniel Jacobowitz <dan@codesourcery.com> - - * remote-utils.c [USE_WIN32API] (read, write): Define. - (putpkt_binary, input_interrupt, readchar, getpkt): Use read and - write. - -2007-01-09 Daniel Jacobowitz <dan@codesourcery.com> - - * linux-i386-low.c (the_low_target): Set arch_string. - * linux-x86-64-low.c (the_low_target): Likewise. - * linux-low.c (linux_arch_string): New. - (linux_target_ops): Add it. - * linux-low.h (struct linux_target_ops): Add arch_string. - * server.c (write_qxfer_response): Use const void * for DATA. - (get_features_xml): New. - (handle_query): Handle qXfer:features:read. Report it for qSupported. - * target.h (struct target_ops): Add arch_string method. - -2007-01-03 Denis Pilat <denis.pilat@st.com> - Daniel Jacobowitz <dan@codesourcery.com> - - * linux-low.c (linux_kill): Handle being called with no threads. - * win32-i386-low.c (win32_kill): Likewise. - (get_child_debug_event): Clear current_process_handle. - -2006-12-30 Denis PILAT <denis.pilat@st.com> - Daniel Jacobowitz <dan@codesourcery.com> - - * remote-utils.c (remote_open): Check the type of specified - serial port devices before opening them. - * server.c (main): Kill the inferior if an error occurs during - the first remote_open. - -2006-12-05 Markus Deuling <deuling@de.ibm.com> - - * README: Update supported targets. - -2006-11-28 Daniel Jacobowitz <dan@codesourcery.com> - - * Makefile.in (clean): Remove reg-mips64.c. - (reg-mips64.c, reg-mips64.o): New rules. - * configure.srv: Handle mips64. Include regset support for mips. - * linux-mips-low.c (union mips_register): New. - (mips_get_pc, mips_set_pc, mips_reinsert_addr): Use it. - (mips_breakpoint, mips_breakpoint_at): Use int. - (mips_collect_register, mips_supply_register) - (mips_collect_register_32bit, mips_supply_register_32bit) - (mips_fill_gregset, mips_store_gregset, mips_fill_fpregset) - (mips_store_fpregset, target_regsets): New. - * thread-db.c (thread_db_get_tls_address): Use uintptr_t. - -2006-11-22 Ulrich Weigand <uweigand@de.ibm.com> - - * configure.srv: Add target "spu*-*-*". - * Makefile.in (clean): Remove reg-spu.c. - (reg-spu.c, reg-spu.o, spu-low.o): Add dependencies. - * spu-low.c: New file. - -2006-11-16 Daniel Jacobowitz <dan@codesourcery.com> - - * configure.ac: Correct td_thr_tls_get_addr test. - * configure: Regenerated. - -2006-11-16 Daniel Jacobowitz <dan@codesourcery.com> - - * linux-low.c (linux_wait_for_event): Reformat. Use the - pass_signals array. - * remote-utils.c (decode_address_to_semicolon): New. - * server.c (pass_signals, handle_general_set): New. - (handle_query): Mention QPassSignals for qSupported. - (main): Call handle_general_set. - * server.h (pass_signals, decode_address_to_semicolon): New. - -2006-11-06 Daniel Jacobowitz <dan@codesourcery.com> - - * server.c (handle_query): Correct error handling for read_auxv. - -2005-10-19 Ulrich Weigand <uweigand@de.ibm.com> - - * configure.srv [s390-*-linux*, s390x-*-linux*]: Set srv_linux_regsets - and srv_linux_thread_db to yes. - * linux-s390-low.c (s390_fill_gregset): New function. - (target_regsets): Define data structure. - -2006-10-17 Daniel Jacobowitz <dan@codesourcery.com> - - * acinclude.m4 (SRV_CHECK_TLS_GET_ADDR): New. - * configure.ac: Use it. Define HAVE_TD_THR_TLS_GET_ADDR. - * config.in, configure: Regenerated. - * inferiors.c (gdb_id_to_thread): New function. - (gdb_id_to_thread_id): Use it. - * linux-low.c (linux_target_ops): Use thread_db_get_tls_address. - * linux-low.h (struct process_info): Add th member. - (thread_db_get_tls_address): New prototype. - * remote-utils.c (decode_address): Make non-static. - * server.c (handle_query): Handle qGetTLSAddr. - * server.h (gdb_id_to_thread, decode_address): New prototypes. - * target.h (struct target_ops): Add get_tls_address. - * thread-db.c (maybe_attach_thread): Save the thread handle. - (thread_db_get_tls_address): New. - -2006-09-28 Daniel Jacobowitz <dan@codesourcery.com> - - * linux-low.c (PTRACE_GETSIGINFO, PTRACE_SETSIGINFO): Define. - (linux_resume_one_process): Take a siginfo_t *. Update all - callers. Queue it if necessary. Use PTRACE_SETSIGINFO. - (struct pending_signals): Add a siginfo_t. - (linux_wait_for_process): Always set last_status. - (linux_wait_for_event): Use PTRACE_GETSIGINFO. - (linux_queue_one_thread): Use PTRACE_GETSIGINFO. - * linux-low.h (struct process_info): Add last_status. - -2006-09-21 Daniel Jacobowitz <dan@codesourcery.com> - - * remote-utils.c (try_rle): New function. - (putpkt_binary): Use it. - -2006-08-19 Daniel Jacobowitz <dan@codesourcery.com> - - * Makefile.in (clean): Clean reg-x86-64-linux.c. - (reg-x86-64-linux.o, reg-x86-64-linux.c): New. - * configure.srv (x86_64-*-linux*): Use reg-x86-64-linux.o. - * linux-x86-64-low.c (x86_64_regmap): Include ORIG_RAX. - (x86_64_fill_gregset, x86_64_store_gregset): Skip floating - point registers. - -2006-08-08 Richard Sandiford <richard@codesourcery.com> - - * server.c (terminal_fd): New variable. - (old_foreground_pgrp): Likewise. - (restore_old_foreground_pgrp): New function. - (start_inferior): Record the terminal file descriptor in terminal_fd - and its original foreground group in old_foreground_pgrp. Register - restore_old_foreground_pgrp with atexit(). - -2006-07-26 Daniel Jacobowitz <dan@codesourcery.com> - - * server.c (handle_query): Correct qPart to qXfer. - -2006-07-22 Daniel Jacobowitz <dan@codesourcery.com> - - * configure.ac: Check for more headers which are missing on - Windows. Automatically supply -lwsock32 and USE_WIN32API. - * configure.srv: Add Cygwin and mingw32. - * remote-utils.c: Don't include headers unconditionally which - are missing on mingw32. Include <winsock.h> for mingw32. - (remote_open): Adjust for mingw32 support. Flush - standard error after writing to it. - (remote_close, putpkt_binary, input_interrupt, block_async_io) - (unblock_async_io, enable_async_io, disable_async_io) - (readchar, getpkt): Update for Winsock support. - (prepare_resume_reply): Expect a protocol signal number. - * server.c: Disable <sys/wait.h> on mingw32. - (start_inferior): Adjust for mingw32 support. Flush - standard error after writing to it. - (attach_inferior): Likewise. Use protocol signal - numbers. - (main): Skip 'D' packet on mingw32. Use protocol signal numbers - and names. - * win32-i386-low.c: New file. - * Makefile.in (XM_CLIBS): Set. - (gdbserver, gdbreplay): Use $(INTERNAL_CFLAGS). - (win32-i386-low.o): New dependency rule. - * linux-low.c (linux_wait): Use target signal numbers. - * target.h (struct target_ops): Doc fix. - * server.h (target_signal_to_name): New prototype. - * gdbreplay.c: Don't include headers unconditionally which - are missing on mingw32. Include <winsock.h> for mingw32. - (remote_close, remote_open): Adjust for Winsock support. - * configure, config.in: Regenerated. - -2006-07-12 Daniel Jacobowitz <dan@codesourcery.com> - - * server.c (decode_xfer_read, write_qxfer_response): New. - (handle_query): Take a packet length argument. Handle - qXfer:auxv:read instead of qPart:auxv:read. Mention it in - the qSupported response. - (main): Update call to handle_query. - -2006-06-22 Daniel Jacobowitz <dan@codesourcery.com> - - * remote-utils.c (remote_escape_output, remote_unescape_input): New. - (putpkt_binary): Renamed from putpkt and adjusted for binary - data. - (putpkt): New wrapper for putpkt_binary. - (readchar): Don't mask off the high bit. - (decode_X_packet): New function. - * server.c (main): Call putpkt_binary if a handler sets the packet - length. Save the length of the incoming packet. Handle 'X'. - * server.h (gdb_byte, remote_escape_output, decode_X_packet): New. - -2006-06-21 Daniel Jacobowitz <dan@codesourcery.com> - - * server.c (handle_query): Handle qSupported. - -2006-05-30 Daniel Jacobowitz <dan@codesourcery.com> - - * remote-utils.c (all_symbols_looked_up): New variable. - (look_up_one_symbol): Check it. - * server.h (look_up_one_symbol): New declaration. - * thread-db.c (thread_db_init): Set all_symbols_looked_up. - -2006-05-30 Daniel Jacobowitz <dan@codesourcery.com> - - * Makefile.in (linux-arm-low.o): Update dependencies. - * linux-arm-low.c: Include "gdb_proc_service.h". - (PTRACE_GET_THREAD_AREA): Define. - (ps_get_thread_area): New function. - -2006-05-09 Nathan Sidwell <nathan@codesourcery.com> - - * configure.srv (m68k*-*-uclinux*): New target. - * linux-low.c (linux_create_inferior): Use vfork on mmuless systems. - (linux_resume_one_process): Remove extraneous cast. - (linux_read_offsets): New. - (linux_target_op): Add linux_read_offsets on mmuless systems. - * server.c (handle_query): Add qOffsets logic. - * target.h (struct target_ops): Add read_offsets. - -2006-03-15 Daniel Jacobowitz <dan@codesourcery.com> - - * linux-mips-low.c: Include <sys/ptrace.h> and "gdb_proc_service.h". - (PTRACE_GET_THREAD_AREA): Define. - (ps_get_thread_area): New function. - * Makefile.in (linux-i386-low.o, linux-mips-low.o) - (linux-x86-64-low.o): Update. - -2006-03-15 Daniel Jacobowitz <dan@codesourcery.com> - - * configure.ac: Remove checks for prfpregset_t. - * gdb_proc_service.h: New file. - * linux-i386-low.c, linux-x86-64-low.c, thread-db.c: Use the - new "gdb_proc_service.h". - * proc-service.c: Likewise. - (ps_pglobal_lookup, ps_pdread, ps_pdwrite): Use psaddr_t. - (ps_lgetfpregs, ps_lsetfpregs): Use a void* argument. - * Makefile.in (gdb_proc_service_h): Updated. - * configure, config.in: Regenerated. - -2006-03-03 Daniel Jacobowitz <dan@codesourcery.com> - - * remote-utils.c (prepare_resume_reply): Move declaration - of gdb_id_from_wait to the top of the block. - -2006-02-15 Daniel Jacobowitz <dan@codesourcery.com> - - * linux-low.c (regsets_store_inferior_registers): Read the regset - from the target before filling it. - -2006-02-08 Daniel Jacobowitz <dan@codesourcery.com> - - * server.c (attach_inferior): Return SIGTRAP for a successful - attach. - -2006-02-01 Daniel Jacobowitz <dan@codesourcery.com> - - * Makefile.in (OBS): Add version.o. - (STAGESTUFF): Delete. - (version.o): Add dependencies. - (version.c): Replace rule. - (clean): Remove version.c. - * server.c (gdbserver_version): New. - (gdbserver_usage): Use printf. - (main): Handle --version and --help. - * server.h (version, host_name): Add declarations. - -2005-12-23 Eli Zaretskii <eliz@gnu.org> - - * linux-arm-low.c: - * linux-arm-low.c: - * inferiors.c: - * i387-fp.h: - * i387-fp.c: - * gdbreplay.c: - * regcache.c: - * proc-service.c: - * mem-break.h: - * mem-break.c: - * linux-x86-64-low.c: - * linux-sh-low.c: - * linux-s390-low.c: - * linux-ppc64-low.c: - * linux-ppc-low.c: - * linux-mips-low.c: - * linux-m68k-low.c: - * linux-m32r-low.c: - * linux-low.h: - * linux-low.c: - * linux-ia64-low.c: - * linux-i386-low.c: - * linux-crisv32-low.c: - * thread-db.c: - * terminal.h: - * target.h: - * target.c: - * server.h: - * server.c: - * remote-utils.c: - * regcache.h: - * utils.c: - * Makefile.in: - * configure.ac: - * gdbserver.1: Add (C) after Copyright. Update the FSF - address. - -2005-11-13 Daniel Jacobowitz <dan@codesourcery.com> - - * linux-arm-low.c (arm_eabi_breakpoint): New variable. - (arm_breakpoint_at): Recognize both breakpoints. - (the_low_target): Use the correct breakpoint instruction. - -2005-11-02 Daniel Jacobowitz <dan@codesourcery.com> - - * configure.srv (x86_64-*-linux*): Turn on thread_db support. - * linux-x86-64-low.c (x86_64_breakpoint, x86_64_breakpoint_len) - (x86_64_get_pc, x86_64_set_pc, x86_64_breakpoint_at): New. - (the_low_target): Update. - -2005-10-25 Andreas Schwab <schwab@suse.de> - - * server.c (main): Allocate mem_buf with PBUFSIZ bytes. - - * linux-ia64-low.c (ia64_regmap): Remove NAT registers. - (ia64_num_regs): Reduce to 462. - -2005-09-17 Daniel Jacobowitz <dan@codesourcery.com> - - * acinclude.m4: Correct quoting. - * aclocal.m4: Regenerated. - - Suggested by SZOKOVACS Robert <szo@ies.hu>: - * thread-db.c (thread_db_err_str): Handle TD_VERSION. - (thread_db_init): Call thread_db_err_str. - * configure.ac: Check for TD_VERSION. - * config.in, configure: Regenerated. - -2005-07-31 Kaveh R. Ghazi <ghazi@caip.rutgers.edu> - - * server.h (error, fatal, warning): Add ATTR_FORMAT. - -2005-07-13 Daniel Jacobowitz <dan@codesourcery.com> - - * configure.ac: Define HAVE_LINUX_REGSETS even if PTRACE_GETREGS - is not available. Define HAVE_PTRACE_GETREGS if it is. - * config.in, configure: Regenerated. - * configure.srv: Set srv_linux_regsets for PowerPC and PowerPC64. - * linux-i386-low.c, linux-m68k-low.c: Update to use - HAVE_PTRACE_GETREGS. - * linux-low.c (regsets_fetch_inferior_registers) - (regsets_store_inferior_registers): Only return 0 if we processed - GENERAL_REGS. - * linux-ppc-low.c (ppc_fill_gregset, target_regsets): New. - * linux-ppc64-low.c (ppc_fill_gregset, target_regsets): New. - -2005-07-13 Daniel Jacobowitz <dan@codesourcery.com> - - * inferiors.c (struct thread_info): Add gdb_id. - (add_thread): Add gdb_id argument. - (thread_id_to_gdb_id, thread_to_gdb_id, gdb_id_to_thread_id): New. - * linux-low.c (linux_create_inferior, linux_attach_lwp): Update - calls to add_thread. - * remote-utils.c (prepare_resume_reply: Use thread_to_gdb_id. - * server.c (handle_query): Use thread_to_gdb_id. - (handle_v_cont, main): Use gdb_id_to_thread_id. - * server.h (add_thread): Update prototype. - (thread_id_to_gdb_id, thread_to_gdb_id, gdb_id_to_thread_id): New - prototypes. - -2005-07-13 Daniel Jacobowitz <dan@codesourcery.com> - - * linux-low.c (fetch_register, usr_store_inferior_registers): Handle - left-padded registers. - * linux-low.h (struct linux_target_ops): Add left_pad_xfer. - * linux-ppc64-low.c (the_low_target): Set left_pad_xfer. - -2005-07-01 Steve Ellcey <sje@cup.hp.com> - - * configure.ac (BFD_NEED_DECLARATION): Replace with AC_CHECK_DECLS. - * configure: Regenerate. - * config.in: Regenerate. - * server.h (NEED_DECLARATION_STRERROR): - Replace with !HAVE_DECL_STRERROR. - -2005-06-16 Daniel Jacobowitz <dan@codesourcery.com> - - * linux-low.c (linux_wait, linux_send_signal): Don't test - an unsigned long variable for > 0 if it could be MAX_ULONG. - * server.c (myresume): Likewise. - * target.c (set_desired_inferior): Likewise. - -2005-06-13 Mark Kettenis <kettenis@gnu.org> - - * configure.ac: Simplify and improve check for socklen_t. - * configure, config.in: Regenerate. - -2005-06-12 Daniel Jacobowitz <dan@codesourcery.com> - - * acconfig.h: Remove. - * configure.ac: Add a test for socklen_t. Use three-argument - AC_DEFINE throughout. - * config.in: Regenerated using autoheader 2.59. - * configure: Regenerated. - - * gdbreplay.c (socklen_t): Provide a default. - (remote_open): Use socklen_t. - * remote-utils.c (socklen_t): Provide a default. - (remote_open): Use socklen_t. - (convert_int_to_ascii, convert_ascii_to_int, decode_M_packet): Use - unsigned char. - - * i387-fp.c (struct i387_fsave, struct i387_fxsave): Use unsigned - char for buffers. - * linux-low.c (linux_read_memory, linux_write_memory) - (linux_read_auxv): Likewise. - * mem-break.c (breakpoint_data, set_breakpoint_data, check_mem_read) - (check_mem_write): Likewise. - * mem-break.h (set_breakpoint_data, check_mem_read, check_mem_write): - Likewise. - * regcache.c (struct inferior_rgcache_data, registers_to_string) - (registers_from_string, register_data): Likewise. - * server.c (handle_query, main): Likewise. - * server.h (convert_ascii_to_int, convert_int_to_ascii) - (decode_M_packet): Likewise. - * target.c (read_inferior_memory, write_inferior_memory): Likewise. - * target.h (struct target_ops): Update read_memory, write_memory, - and read_auxv. - (read_inferior_memory, write_inferior_memory): Update. - * linux-low.h (struct linux_target_ops): Change type of breakpoint - to unsigned char *. - * linux-arm-low.c, linux-cris-low.c, linux-crisv32-low.c, - linux-i386-low.c, linux-m32r-low.c, linux-m68k-low.c, - linux-mips-low.c, linux-ppc-low.c, linux-ppc64-low.c, - linux-s390-low.c, linux-sh-low.c: Update for changes in - read_inferior_memory and the_low_target->breakpoint. - -2005-05-28 Daniel Jacobowitz <dan@codesourcery.com> - - * Makefile.in (SFILES): Add linux-ppc64-low.c. - (linux-ppc64-low.o, reg-ppc64.c, reg-ppc64.o): New targets. - * configure.srv: Add powerpc64-*-linux*. - * linux-ppc64-low.c: New file. - -2005-05-23 Orjan Friberg <orjanf@axis.com> - - * linux-cris-low.c: New file with support for CRIS. - * linux-crisv32-low.c: Ditto for CRISv32. - * Makefile.in (SFILES): Add linux-cris-low.c, linux-crisv32-low.c. - (clean): Add reg-cris.c and reg-crisv32.c. - Add linux-cris-low.o, linux-crisv32-low.o, reg-cris.o, reg-cris.c, - reg-crisv32.o, and reg-crisv32.c to make rules. - * configure.srv: Add cris-*-linux* and crisv32-*-linux* to list of - recognized targets. - -2005-05-16 Ulrich Weigand <uweigand@de.ibm.com> - - * linux-low.c (fetch_register): Ensure buffer size is a multiple - of sizeof (PTRACE_XFER_TYPE). - (usr_store_inferior_registers): Likewise. Zero out excess bytes. - -2005-05-12 Orjan Friberg <orjanf@axis.com> - - * target.h (struct target_ops): Add insert_watchpoint, - remove_watchpoint, stopped_by_watchpoint, stopped_data_address function - pointers for hardware watchpoint support. - * linux-low.h (struct linux_target_ops): Ditto. - * linux-low.c (linux_insert_watchpoint, linux_remove_watchpoint) - (linux_stopped_by_watchpoint, linux_stopped_data_address): New. Add - to linux_target_ops. - * remote-utils.c (prepare_resume_reply): Add watchpoint information to - reply packet. - * server.c (main): Recognize 'Z' and 'z' packets. - -2005-05-10 Ulrich Weigand <uweigand@de.ibm.com> - - * linux-s390-low.c (s390_breakpoint, s390_breakpoint_len): Define. - (s390_get_pc, s390_set_pc, s390_breakpoint_at): New functions. - (the_low_target): Add new members. - -2005-05-04 Daniel Jacobowitz <dan@codesourcery.com> - - * proc-service.c (ps_lgetregs): Search all_processes instead of - all_threads. - -2005-05-04 Daniel Jacobowitz <dan@codesourcery.com> - - * server.c (start_inferior): Change return type to int. - (attach_inferior): Change sigptr to int *. - (handle_v_cont, handle_v_requests): Change signal to int *. - (main): Change signal to int. - -2005-04-15 Kei Sakamoto <sakamoto.kei@renesas.com> - - * Makefile.in: Add linux-m32r-low.o, reg-m32r.c and reg-m32r.o. - * configure.srv: Add m32r*-*-linux*. - * linux-m32r-low.c: New file. - -2005-03-04 Daniel Jacobowitz <dan@codesourcery.com> - - * Makefile.in (stamp-h): Set CONFIG_HEADERS explicitly. - -2005-03-03 Daniel Jacobowitz <dan@codesourcery.com> - - * inferiors.c (change_inferior_id, add_thread, find_inferior_id): - Take unsigned long arguments for PIDs. - * linux-low.c (add_process, linux_attach_lwp, linux_attach) - (linux_thread_alive, linux_wait_for_event, kill_lwp, send_sigstop) - (wait_for_sigstop, linux_resume_one_process) - (regsets_fetch_inferior_registers, linux_send_signal) - (linux_read_auxv): Likewise. Update the types of variables holding - PIDs. Update format string specifiers. - * linux-low.h (struct process_info, linux_attach_lwp): Likewise. - * remote-utils.c (prepare_resume_reply): Likewise. - * server.c (cont_thread, general_thread, step_thread) - (thread_from_wait, old_thread_from_wait, signal_pid): Change type to - unsigned long. - (handle_query): Update format specifiers. - (handle_v_cont, main): Use strtoul for thread IDs. - * server.h (struct inferior_list_entry): Use unsigned long for ID. - (add_thread, find_inferior_id, change_inferior_id, cont_thread) - (general_thread, step_thread, thread_from_wait) - (old_thread_from_wait): Update. - * target.h (struct thread_resume): Use unsigned long for THREAD. - (struct target_ops): Use unsigned long for arguments to attach and - thread_alive. - -2005-02-24 Daniel Jacobowitz <dan@codesourcery.com> - - * acinclude.m4: Include bfd/bfd.m4 directly. - * configure.ac: Use AC_ARG_PROGRAM. Suggested by Aron Griffis - <agriffis@toolchain.org>. - * aclocal.m4, configure: Regenerated. - -2005-01-07 Andrew Cagney <cagney@gnu.org> - - * configure.ac: Rename configure.in, require autoconf 2.59. - * configure: Re-generate. - -2004-12-08 Daniel Jacobowitz <dan@debian.org> - - * acinclude.m4 (SRV_CHECK_THREAD_DB): Add ps_get_thread_area. Reset - LIBS when finished. - * aclocal.m4: Regenerated. - * configure: Regenerated. - -2004-11-21 Andreas Schwab <schwab@suse.de> - - * linux-m68k-low.c (m68k_num_gregs): Define. - (m68k_fill_gregset, m68k_store_gregset, m68k_fill_fpregset) - (m68k_store_fpregset, target_regsets) [HAVE_LINUX_REGSETS]: New. - (m68k_breakpoint, m68k_breakpoint_len, m68k_get_pc, m68k_set_pc) - (m68k_breakpoint_at): New. Add to the_low_target. - - * configure.srv (m68*-*-linux*): Set srv_linux_regsets and - srv_linux_thread_db to yes. - -2004-10-20 Joel Brobecker <brobecker@gnat.com> - - * linux-x86-64-low.c (ARCH_SET_GS): Add definition if missing. - (ARCH_SET_FS): Likewise. - (ARCH_GET_FS): Likewise. - (ARCH_GET_GS): Likewise. - -2004-10-16 Daniel Jacobowitz <dan@debian.org> - - * linux-i386-low.c (ps_get_thread_area): New. - * linux-x86-64-low.c (ps_get_thread_area): New. - * linux-low.c: Include <sys/syscall.h>. - (linux_kill_one_process): Don't kill the first thread here. - (linux_kill): Kill the first thread here. - (kill_lwp): New function. - (send_sigstop, linux_send_signal): Use it. - * proc-service.c: Clean up #ifdefs. - (fpregset_info): Delete. - (ps_lgetregs): Update and enable implementation. - (ps_lsetregs, ps_lgetfpregs, ps_lsetfpregs): Remove disabled - implementations. - * remote-utils.c (struct sym_cache, symbol_cache): New. - (input_interrupt): Print a clearer message. - (async_io_enabled): New variable. - (enable_async_io, disable_async_io): Use it. Update comments. - (look_up_one_symbol): Use the symbol cache. - * thread-db.c (thread_db_look_up_symbols): New function. - (thread_db_init): Update comments. Call thread_db_look_up_symbols. - -2004-10-16 Daniel Jacobowitz <dan@debian.org> - - * configure.in: Test for -rdynamic. - * configure: Regenerated. - * Makefile (INTERNAL_LDFLAGS): New. - (gdbserver, gdbreplay): Use it. - -2004-09-02 Andrew Cagney <cagney@gnu.org> - - * Makefile.in (TAGS): Replace TM_FILE with DEPRECATED_TM_FILE. - -2004-03-23 Daniel Jacobowitz <drow@mvista.com> - - * linux-low.c (linux_wait): Clear all_processes list also. - -2004-03-12 Daniel Jacobowitz <drow@mvista.com> - - * linux-low.c: Include <errno.h>. Remove extern declaration of - errno. - -2004-03-12 Daniel Jacobowitz <drow@mvista.com> - - * gdbreplay.c, server.h, utils.c: Update copyright years. - -2004-03-04 Nathan J. Williams <nathanw@wasabisystems.com> - - * server.c (main): Print child status or termination signal from - variable 'signal', not 'sig'. - -2004-03-04 Nathan J. Williams <nathanw@wasabisystems.com> - - * linux-low.c (linux_read_memory): Change return type to - int. Check for and return error from ptrace(). - * target.c (read_inferior_memory): Change return type to int. Pass - back return status from the_target->read_memory(). - * target.h (struct target_ops): Adapt *read_memory() prototype. - Update comment. - (read_inferior_memory): Adapt prototype. - * server.c (main): Return an error packet if - read_inferior_memory() returns an error. - -2004-03-04 Daniel Jacobowitz <drow@mvista.com> - - * Makefile.in (distclean): Remove config.h, stamp-h, and config.log. - Unify with other clean targets. - -2004-02-29 Daniel Jacobowitz <drow@mvista.com> - - * server.c (handle_v_cont): Call set_desired_inferior. - -2004-02-29 Daniel Jacobowitz <drow@mvista.com> - - * remote-utils.c (prepare_resume_reply): Always supply "thread:". - -2004-02-29 Daniel Jacobowitz <drow@mvista.com> - - * linux-low.c (linux_wait): Unblock async I/O. - (linux_resume): Block and enable async I/O. - * remote-utils.c (block_async_io, unblock_async_io): New functions. - * server.h (block_async_io, unblock_async_io): Add prototypes. - -2004-02-29 Daniel Jacobowitz <drow@mvista.com> - - * remote-utils.c (remote_open): Print a status notice after - opening a TCP port. - * server.c (attach_inferior): Print a status notice after - attaching. - -2004-02-29 Daniel Jacobowitz <drow@mvista.com> - - * linux-arm-low.c (arm_get_pc): Print out stop PC in debug mode. - -2004-02-26 Daniel Jacobowitz <drow@mvista.com> - - * remote-utils.c (write_enn): Use "E01" instead of "ENN" for the - error packet. - * server.c, target.h: Update copyright years. - -2004-02-25 Roland McGrath <roland@redhat.com> - - * target.h (struct target_ops): New member `read_auxv'. - * server.c (handle_query): Handle qPart:auxv:read: query using that. - * linux-low.c (linux_read_auxv): New function. - (linux_target_ops): Initialize `read_auxv' member to that. - -2004-02-17 Ulrich Weigand <Ulrich.Weigand@de.ibm.com> - - Committed by Jim Blandy <jimb@redhat.com>. - - * linux-s390-low.c (s390_num_regs): Update. - (s390_regmap): Remove control registers. Use __s390x__ predefine - instead of GPR_SIZE to distiguish s390 and s390x targets. - -2004-01-31 Daniel Jacobowitz <drow@mvista.com> - - * linux-low.c: Update copyright year. - (check_removed_breakpoint): Clear pending_is_breakpoint. - (linux_set_resume_request, linux_queue_one_thread) - (resume_status_pending_p): New functions. - (linux_continue_one_thread): Use process->resume. - (linux_resume): Only resume threads if there are no pending events. - * linux-low.h (struct process_info): Add resume request - pointer. - -2004-01-30 Daniel Jacobowitz <drow@mvista.com> - - * regcache.c (new_register_cache): Clear the allocated register - buffer. Suggested by Atsushi Nemoto <anemo@mba.ocn.ne.jp>. - -2003-10-13 Daniel Jacobowitz <drow@mvista.com> - - * linux-low.c (linux_resume): Take a struct thread_resume * - argument. - (linux_wait): Update call. - (resume_ptr): New static variable. - (linux_continue_one_thread): Renamed from - linux_continue_one_process. Use resume_ptr. - (linux_resume): Use linux_continue_one_thread. - * server.c (handle_v_cont, handle_v_requests): New functions. - (myresume): New function. - (main): Handle 'v' case. - * target.h (struct thread_resume): New type. - (struct target_ops): Change argument of "resume" to struct - thread_resume *. - (myresume): Delete macro. - -2003-08-08 H.J. Lu <hongjiu.lu@intel.com> - - * Makefile.in (install-only): Create dest dir. Support DESTDIR. - (uninstall): Support DESTDIR. - -Mon Jul 21 20:09:34 UTC 2003 Brendan Conoboy <blc@redhat.com> - - * configure.srv: Add xscale*linux copy of arm*linux entry. - -2003-07-24 Daniel Jacobowitz <drow@mvista.com> - - * linux-arm-low.c (arm_reinsert_addr): New function. - (the_low_target): Add arm_reinsert_addr. - -2003-07-08 Mark Kettenis <kettenis@gnu.org> - - * mem-break.c: Remove whitespace at end of file. - -2003-06-28 Daniel Jacobowitz <drow@mvista.com> - - * configure.in: Check whether we need to prototype strerror. - * server.h: Optionally prototype strerror. - * gdbreplay.c (perror_with_name): Use strerror. - * linux-low.c (linux_attach_lwp): Use strerror. - * utils.c (perror_with_name): Use strerror. - * config.in, configure: Regenerated. - -2003-06-28 Daniel Jacobowitz <drow@mvista.com> - - * linux-sh-low.c (sh_regmap): Fix FP register offsets, reported by - SUGIOKA Toshinobu <sugioka@itonet.co.jp>. - -2003-06-20 Daniel Jacobowitz <drow@mvista.com> - - * Makefile.in (SFILES): Update. - * low-hppabsd.c, low-lynx.c, low-nbsd.c, low-sim.c, low-sparc.c, - low-sun3.c: Remove files. - -2003-06-17 Daniel Jacobowitz <drow@mvista.com> - - * linux-low.c: Move comment to linux_thread_alive where it belonged. - (linux_detach_one_process, linux_detach): New functions. - (linux_target_ops): Add linux_detach. - * server.c (main): Handle 'D' packet. - * target.h (struct target_ops): Add "detach" member. - (detach_inferior): Define. - -2003-06-13 Mark Kettenis <kettenis@gnu.org> - - From Kelley Cook <kelleycook@wideopenwest.com>: - * configure.srv: Accept i[34567]86 variants. - -2003-06-05 Daniel Jacobowitz <drow@mvista.com> - - * linux-low.c (linux_wait_for_event): Correct comment typos. - (linux_resume_one_process): Call check_removed_breakpoint. - (linux_send_signal): New function. - (linux_target_ops): Add linux_send_signal. - * remote-utils.c (putpkt, input_interrupt): Use send_signal instead - of kill. - * target.h (struct target_ops): Add send_signal. - -2003-05-29 Jim Blandy <jimb@redhat.com> - - * linux-low.c (usr_store_inferior_registers): Transfer buf in - PTRACE_XFER_TYPE-sized chunks, not int-sized chunks. Otherwise, - if 'int' is smaller than PTRACE_XFER_TYPE, you end up throwing - away part of the register's value. - -2003-03-26 Daniel Jacobowitz <drow@mvista.com> - - * linux-low.c (linux_create_inferior): Use __SIGRTMIN. - (linux_wait_for_event, linux_init_signals): Likewise. - -2003-03-17 Daniel Jacobowitz <drow@mvista.com> - - * configure.in: Check for stdlib.h. - * configure: Regenerated. - * config.in: Regenerated. - -2003-01-04 Andreas Schwab <schwab@suse.de> - - * linux-m68k-low.c (m68k_num_regs): Define to 29 instead of 31. - -2003-01-02 Andrew Cagney <ac131313@redhat.com> - - * Makefile.in: Remove obsolete code. - -2002-11-20 Daniel Jacobowitz <drow@mvista.com> - - * linux-s390-low.c (s390_regmap): Check GPR_SIZE instead of - defined(PT_FPR0_HI). - -2002-11-17 Stuart Hughes <seh@zee2.com> - - * linux-arm-low.c (arm_num_regs): Increase. - (arm_regmap): Include status register. - -2002-11-17 Daniel Jacobowitz <drow@mvista.com> - - * linux-low.c (register_addr): Remove incorrect -1 check. - -2002-08-29 Daniel Jacobowitz <drow@mvista.com> - - * linux-low.c (linux_create_inferior): Call setpgid. Return - the new PID. - (unstopped_p, linux_signal_pid): Remove. - (linux_target_ops): Remove linux_signal_pid. - * remote-utils.c (putpkt, input_interrupt): Use signal_pid - global instead of target method. - * target.h (struct target_ops): Remove signal_pid. Update comment - for create_inferior. - * server.c (signal_pid): New variable. - (create_inferior): Set signal_pid. Block SIGTTOU and SIGTTIN in - gdbserver. Set the child to be the foreground process group. - (attach_inferior): Set signal_pid. - -2002-08-23 Daniel Jacobowitz <drow@mvista.com> - - * ChangeLog: New file, with entries from gdb/ChangeLog after GDB 5.2. - -2002-08-20 Jim Blandy <jimb@redhat.com> - - * Makefile.in (LDFLAGS): Allow the configure script to establish a - default for this. - -2002-08-01 Andrew Cagney <cagney@redhat.com> - - * Makefile.in: Make chill references obsolete. - -2002-07-24 Kevin Buettner <kevinb@redhat.com> - - * configure.in (unistd.h): Add to AC_CHECK_HEADERS list. - * configure: Regenerate. - * config.in: Regenerate. - -2002-07-09 David O'Brien <obrien@FreeBSD.org> - - * gdbreplay.c (stdlib.h, unistd.h): Conditionaly include. - (perror_with_name, remote_close, remote_open, expect, play): Static. - -2002-07-04 Michal Ludvig <mludvig@suse.cz> - - * linux-x86-64-low.c (x86_64_regmap): Make it an array of - byte offsets instead of an array of indexes. - (x86_64_store_gregset, x86_64_store_fpregset): Parameter made const. - -2002-06-13 Daniel Jacobowitz <drow@mvista.com> - - * regcache.c: Add comment. - -2002-06-11 Daniel Jacobowitz <drow@mvista.com> - - * thread-db.c: New file. - * proc-service.c: New file. - * acinclude.m4: New file. - * Makefile.in: Add GDBSERVER_LIBS, gdb_proc_service_h, - proc-service.o, and thread-db.o. - (linux-low.o): Add USE_THREAD_DB. - * acconfig.h: Add HAVE_PRGREGSET_T, HAVE_PRFPREGSET_T, - HAVE_LWPID_T, HAVE_PSADDR_T, and PRFPREGSET_T_BROKEN. - * aclocal.m4: Regenerated. - * config.in: Regenerated. - * configure: Regenerated. - * configure.in: Check for proc_service.h, sys/procfs.h, - thread_db.h, and linux/elf.h headrs. - Check for lwpid_t, psaddr_t, prgregset_t, prfpregset_t, and - PRFPREGSET_T_BROKEN. Introduce srv_thread_depfiles and USE_THREAD_DB. - Check for -lthread_db and thread support. - * configure.srv: Enable thread_db support for ARM, i386, MIPS, - PowerPC, and SuperH. - * i387-fp.c: Constify arguments. - * i387-fp.h: Likewise. - * inferiors.c: (struct thread_info): Renamed from - `struct inferior_info'. Remove PID member. Use generic inferior - list header. All uses updated. - (inferiors, signal_pid): Removed. - (all_threads): New variable. - (get_thread): Define. - (add_inferior_to_list): New function. - (for_each_inferior): New function. - (change_inferior_id): New function. - (add_inferior): Removed. - (remove_inferior): New function. - (add_thread): New function. - (free_one_thread): New function. - (remove_thread): New function. - (clear_inferiors): Use for_each_inferior and free_one_thread. - (find_inferior): New function. - (find_inferior_id): New function. - (inferior_target_data): Update argument type. - (set_inferior_target_data): Likewise. - (inferior_regcache_data): Likewise. - (set_inferior_regcache_data): Likewise. - * linux-low.c (linux_bp_reinsert): Remove. - (all_processes, stopping_threads, using_thrads) - (struct pending_signals, debug_threads, pid_of): New. - (inferior_pid): Replace with macro. - (struct inferior_linux_data): Remove. - (get_stop_pc, add_process): New functions. - (linux_create_inferior): Restore SIGRTMIN+1 before calling exec. - Use add_process and add_thread. - (linux_attach_lwp): New function, based on old linux_attach. Use - add_process and add_thread. Set stop_expected for new threads. - (linux_attach): New function. - (linux_kill_one_process): New function. - (linux_kill): Kill all LWPs. - (linux_thread_alive): Use find_inferior_id. - (check_removed_breakpoints, status_pending_p): New functions. - (linux_wait_for_process): Renamed from linux_wait_for_one_inferior. - Update. Use WNOHANG. Wait for cloned processes also. Update process - struct for the found process. - (linux_wait_for_event): New function. - (linux_wait): Use it. Support LWPs. - (send_sigstop, wait_for_sigstop, stop_all_processes) - (linux_resume_one_process, linux_continue_one_process): New functions. - (linux_resume): Support LWPs. - (REGISTER_RAW_SIZE): Remove. - (fetch_register): Use register_size instead. Call supply_register. - (usr_store_inferior_registers): Likewise. Call collect_register. - Fix recursive case. - (regsets_fetch_inferior_registers): Improve error message. - (regsets_store_inferior_registers): Add debugging. - (linux_look_up_symbols): Call thread_db_init if USE_THREAD_DB. - (unstopped_p, linux_signal_pid): New functions. - (linux_target_ops): Add linux_signal_pid. - (linux_init_signals): New function. - (initialize_low): Call it. Initialize using_threads. - * regcache.c (inferior_regcache_data): Add valid - flag. - (get_regcache): Fetch registers lazily. Add fetch argument - and update all callers. - (regcache_invalidate_one, regcache_invalidate): New - functions. - (new_register_cache): Renamed from create_register_cache. - Return the new regcache. - (free_register_cache): Change argument to a void *. - (registers_to_string, registers_from_string): Call get_regcache - with fetch flag set. - (register_data): Make static. Pass fetch flag to get_regcache. - (supply_register): Call get_regcache with fetch flag clear. - (collect_register): Call get_regcache with fetch flag set. - (collect_register_as_string): New function. - * regcache.h: Update. - * remote-utils.c (putpkt): Flush after debug output and use - stderr. - Handle input interrupts while waiting for an ACK. - (input_interrupt): Use signal_pid method. - (getpkt): Flush after debug output and use stderr. - (outreg): Use collect_register_as_string. - (new_thread_notify, dead_thread_notify): New functions. - (prepare_resume_reply): Check using_threads. Set thread_from_wait - and general_thread. - (look_up_one_symbol): Flush after debug output. - * server.c (step_thread, server_waiting): New variables. - (start_inferior): Don't use signal_pid. Update call to mywait. - (attach_inferior): Update call to mywait. - (handle_query): Handle qfThreadInfo and qsThreadInfo. - (main): Don't fetch/store registers explicitly. Use - set_desired_inferior. Support proposed ``Hs'' packet. Update - calls to mywait. - * server.h: Update. - (struct inferior_list, struct_inferior_list_entry): New. - * target.c (set_desired_inferior): New. - (write_inferior_memory): Constify. - (mywait): New function. - * target.h: Update. - (struct target_ops): New signal_pid method. - (mywait): Removed macro, added prototype. - - * linux-low.h (regset_func): Removed. - (regset_fill_func, regset_store_func): New. - (enum regset_type): New. - (struct regset_info): Add type field. Use new operation types. - (struct linux_target_ops): stop_pc renamed to get_pc. - Add decr_pc_after_break and breakpoint_at. - (get_process, get_thread_proess, get_process_thread) - (strut process_info, all_processes, linux_attach_lwp) - (thread_db_init): New. - - * linux-arm-low.c (arm_get_pc, arm_set_pc, - arm_breakpoint, arm_breakpoint_len, arm_breakpoint_at): New. - (the_low_target): Add new members. - * linux-i386-low.c (i386_store_gregset, i386_store_fpregset) - (i386_store_fpxregset): Constify. - (target_regsets): Add new kind identifier. - (i386_get_pc): Renamed from i386_stop_pc. Simplify. - (i386_set_pc): Add debugging. - (i386_breakpoint_at): New function. - (the_low_target): Add new members. - * linux-mips-low.c (mips_get_pc, mips_set_pc) - (mips_breakpoint, mips_breakpoint_len, mips_reinsert_addr) - (mips_breakpoint_at): New. - (the_low_target): Add new members. - * linux-ppc-low.c (ppc_get_pc, ppc_set_pc) - (ppc_breakpoint, ppc_breakpoint_len, ppc_breakpoint_at): New. - (the_low_target): Add new members. - * linux-sh-low.c (sh_get_pc, sh_set_pc) - (sh_breakpoint, sh_breakpoint_len, sh_breakpoint_at): New. - (the_low_target): Add new members. - * linux-x86-64-low.c (target_regsets): Add new kind - identifier. - -2002-05-15 Daniel Jacobowitz <drow@mvista.com> - - From Martin Pool <mbp@samba.org>: - * server.c (gdbserver_usage): New function. - (main): Call it. - -2002-05-14 Daniel Jacobowitz <drow@mvista.com> - - * mem-break.c (reinsert_breakpoint_by_bp): Correct typo - stop_at -> stop_pc. - -2002-05-04 Andrew Cagney <ac131313@redhat.com> - - * Makefile.in: Remove obsolete code. - -2002-04-24 Michal Ludvig <mludvig@suse.cz> - - * linux-low.c (regsets_fetch_inferior_registers), - (regsets_store_inferior_registers): Removed cast to int from - ptrace() calls. - * regcache.h: Added declaration of struct inferior_info. - -2002-04-20 Daniel Jacobowitz <drow@mvista.com> - - * inferiors.c (struct inferior_info): Add regcache_data. - (add_inferior): Call create_register_cache. - (clear_inferiors): Call free_register_cache. - (inferior_regcache_data, set_inferior_regcache_data): New functions. - * regcache.c (struct inferior_regcache_data): New. - (registers): Remove. - (get_regcache): New function. - (create_register_cache, free_register_cache): New functions. - (set_register_cache): Don't initialize the register cache here. - (registers_to_string, registers_from_string, register_data): Call - get_regcache. - * regcache.h: Add prototypes. - * server.h: Likewise. - -2002-04-20 Daniel Jacobowitz <drow@mvista.com> - - * mem-break.c: New file. - * mem-break.h: New file. - * Makefile.in: Add mem-break.o rule; update server.h - dependencies. - * inferiors.c (struct inferior_info): Add target_data - member. - (clear_inferiors): Free target_data member if set. - (inferior_target_data, set_inferior_target_data): New functions. - * linux-i386-low.c (i386_breakpoint, i386_breakpoint_len) - (i386_stop_pc, i386_set_pc): New. Add to the_low_target. - * linux-low.c (linux_bp_reinsert): New variable. - (struct inferior_linux_data): New. - (linux_create_inferior): Use set_inferior_target_data. - (linux_attach): Likewise. Call add_inferior. - (linux_wait_for_one_inferior): New function. - (linux_wait): Call it. - (linux_write_memory): Add const. - (initialize_low): Call set_breakpoint_data. - * linux-low.h (struct linux_target_ops): Add breakpoint - handling members. - * server.c (attach_inferior): Remove extra add_inferior - call. - * server.h: Include mem-break.h. Update inferior.c - prototypes. - * target.c (read_inferior_memory) - (write_inferior_memory): New functions. - * target.h (read_inferior_memory) - (write_inferior_memory): Change macros to prototypes. - (struct target_ops): Update comments. Add const to write_memory - definition. - -2002-04-11 Daniel Jacobowitz <drow@mvista.com> - - * linux-low.c (usr_store_inferior_registers): Support - registers which are allowed to fail to store. - * linux-low.h (linux_target_ops): Likewise. - * linux-ppc-low.c (ppc_regmap): Support FPSCR. - (ppc_cannot_store_register): FPSCR may not be storable. - -2002-04-09 Daniel Jacobowitz <drow@mvista.com> - - * server.h: Include <string.h> if HAVE_STRING_H. - * ChangeLog: Correct paths in last ChangeLog entry. - -2002-04-09 Daniel Jacobowitz <drow@mvista.com> - - * linux-low.h: Remove obsolete prototypes. - (struct linux_target_ops): New. - (extern the_low_target): New. - * linux-low.c (num_regs, regmap): Remove declarations. - (register_addr): Use the_low_target explicitly. - (fetch_register): Likewise. - (usr_fetch_inferior_registers): Likewise. - (usr_store_inferior_registers): Likewise. - * linux-arm-low.c (num_regs): Remove. - (arm_num_regs): Define. - (arm_regmap): Renamed from regmap, made static. - (arm_cannot_fetch_register): Renamed from cannot_fetch_register, - made static. - (arm_cannot_store_register): Renamed from cannot_store_register, - made static. - (the_low_target): New. - * linux-i386-low.c (num_regs): Remove. - (i386_num_regs): Define. - (i386_regmap): Renamed from regmap, made static. - (i386_cannot_fetch_register): Renamed from cannot_fetch_register, - made static. - (i386_cannot_store_register): Renamed from cannot_store_register, - made static. - (the_low_target): New. - * linux-ia64-low.c (num_regs): Remove. - (ia64_num_regs): Define. - (ia64_regmap): Renamed from regmap, made static. - (ia64_cannot_fetch_register): Renamed from cannot_fetch_register, - made static. - (ia64_cannot_store_register): Renamed from cannot_store_register, - made static. - (the_low_target): New. - * linux-m68k-low.c (num_regs): Remove. - (m68k_num_regs): Define. - (m68k_regmap): Renamed from regmap, made static. - (m68k_cannot_fetch_register): Renamed from cannot_fetch_register, - made static. - (m68k_cannot_store_register): Renamed from cannot_store_register, - made static. - (the_low_target): New. - * linux-mips-low.c (num_regs): Remove. - (mips_num_regs): Define. - (mips_regmap): Renamed from regmap, made static. - (mips_cannot_fetch_register): Renamed from cannot_fetch_register, - made static. - (mips_cannot_store_register): Renamed from cannot_store_register, - made static. - (the_low_target): New. - * linux-ppc-low.c (num_regs): Remove. - (ppc_num_regs): Define. - (ppc_regmap): Renamed from regmap, made static. - (ppc_cannot_fetch_register): Renamed from cannot_fetch_register, - made static. - (ppc_cannot_store_register): Renamed from cannot_store_register, - made static. - (the_low_target): New. - * linux-s390-low.c (num_regs): Remove. - (s390_num_regs): Define. - (s390_regmap): Renamed from regmap, made static. - (s390_cannot_fetch_register): Renamed from cannot_fetch_register, - made static. - (s390_cannot_store_register): Renamed from cannot_store_register, - made static. - (the_low_target): New. - * linux-sh-low.c (num_regs): Remove. - (sh_num_regs): Define. - (sh_regmap): Renamed from regmap, made static. - (sh_cannot_fetch_register): Renamed from cannot_fetch_register, - made static. - (sh_cannot_store_register): Renamed from cannot_store_register, - made static. - (the_low_target): New. - * linux-x86-64-low.c (x86_64_regmap): Renamed from regmap. - (the_low_target): New. - -2002-04-09 Daniel Jacobowitz <drow@mvista.com> - - * Makefile.in: Add stamp-h target. - * configure.in: Create stamp-h. - * configure: Regenerated. - -2002-04-09 Daniel Jacobowitz <drow@mvista.com> - - * inferiors.c: New file. - * target.c: New file. - * target.h: New file. - * Makefile.in: Add target.o and inferiors.o. Update - dependencies. - * linux-low.c (inferior_pid): New static variable, - moved from server.c. - (linux_create_inferior): Renamed from create_inferior. - Call add_inferior. Return 0 on success instead of a PID. - (linux_attach): Renamed from myattach. - (linux_kill): Renamed from kill_inferior. Call clear_inferiors (). - (linux_thread_alive): Renamed from mythread_alive. - (linux_wait): Renamed from mywait. Call clear_inferiors () if the - child dies. - (linux_resume): Renamed from myresume. Add missing ``return 0''. - (regsets_store_inferior_registers): Correct error message. - Add missing ``return 0''. - (linux_fetch_registers): Renamed from fetch_inferior_registers. - (linux_store_registers): Renamed from store_inferior_registers. - (linux_read_memory): Renamed from read_inferior_memory. - (linux_write_memory): Renamed from write_inferior_memory. - (linux_target_ops): New structure. - (initialize_low): Call set_target_ops (). - * remote-utils.c (unhexify): New function. - (hexify): New function. - (input_interrupt): Send signals to ``signal_pid''. - * server.c (inferior_pid): Remove. - (start_inferior): Update create_inferior call. - (attach_inferior): Call add_inferior. - (handle_query): New function. - (main): Call handle_query for `q' packets. - * server.h: Include "target.h". Remove obsolete prototypes. - Add prototypes for "inferiors.c", "target.c", hexify, and unhexify. - -2002-04-09 Daniel Jacobowitz <drow@mvista.com> - - * Makefile.in: Add WARN_CFLAGS. Update configury - dependencies. - * configure.in: Check for <string.h> - * configure: Regenerate. - * config.in: Regenerate. - * gdbreplay.c: Include needed system headers. - (remote_open): Remove strchr prototype. - * linux-low.h: Correct #ifdef to HAVE_LINUX_USRREGS. - * regcache.c (supply_register): Change buf argument to const void *. - (supply_register_by_name): Likewise. - (collect_register): Change buf argument to void *. - (collect_register_by_name): Likewise. - * regcache.h: Add missing prototypes. - * remote-utils.c: Include <arpa/inet.h> for inet_ntoa. - * server.c (handle_query): New function. - (attached): New static variable, moved out of main. - (main): Quiet longjmp clobber warnings. - * server.h: Add ATTR_NORETURN and ATTR_FORMAT. Update prototypes. - * utils.c (error): Remove NORETURN. - (fatal): Likewise. diff -Nru gdb-9.1/gdb/gdbserver/config.in gdb-10.2/gdb/gdbserver/config.in --- gdb-9.1/gdb/gdbserver/config.in 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/config.in 1970-01-01 00:00:00.000000000 +0000 @@ -1,445 +0,0 @@ -/* config.in. Generated from configure.ac by autoheader. */ - -/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP - systems. This function is required for `alloca.c' support on those systems. - */ -#undef CRAY_STACKSEG_END - -/* Define to 1 if std::thread works. */ -#undef CXX_STD_THREAD - -/* Define to 1 if using `alloca.c'. */ -#undef C_ALLOCA - -/* Define if self-testing features should be enabled */ -#undef GDB_SELF_TEST - -/* Define to 1 if you have `alloca', as a function or macro. */ -#undef HAVE_ALLOCA - -/* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix). - */ -#undef HAVE_ALLOCA_H - -/* Define to 1 if you have the <arpa/inet.h> header file. */ -#undef HAVE_ARPA_INET_H - -/* define if the compiler supports basic C++11 syntax */ -#undef HAVE_CXX11 - -/* Define to 1 if you have the declaration of `ADDR_NO_RANDOMIZE', and to 0 if - you don't. */ -#undef HAVE_DECL_ADDR_NO_RANDOMIZE - -/* Define to 1 if you have the declaration of `asprintf', and to 0 if you - don't. */ -#undef HAVE_DECL_ASPRINTF - -/* Define to 1 if you have the declaration of `basename(char *)', and to 0 if - you don't. */ -#undef HAVE_DECL_BASENAME - -/* Define to 1 if you have the declaration of `ffs', and to 0 if you don't. */ -#undef HAVE_DECL_FFS - -/* Define to 1 if you have the declaration of `perror', and to 0 if you don't. - */ -#undef HAVE_DECL_PERROR - -/* Define to 1 if you have the declaration of `ptrace', and to 0 if you don't. - */ -#undef HAVE_DECL_PTRACE - -/* Define to 1 if you have the declaration of `snprintf', and to 0 if you - don't. */ -#undef HAVE_DECL_SNPRINTF - -/* Define to 1 if you have the declaration of `strstr', and to 0 if you don't. - */ -#undef HAVE_DECL_STRSTR - -/* Define to 1 if you have the declaration of `strtol', and to 0 if you don't. - */ -#undef HAVE_DECL_STRTOL - -/* Define to 1 if you have the declaration of `strtoll', and to 0 if you - don't. */ -#undef HAVE_DECL_STRTOLL - -/* Define to 1 if you have the declaration of `strtoul', and to 0 if you - don't. */ -#undef HAVE_DECL_STRTOUL - -/* Define to 1 if you have the declaration of `strtoull', and to 0 if you - don't. */ -#undef HAVE_DECL_STRTOULL - -/* Define to 1 if you have the declaration of `strverscmp', and to 0 if you - don't. */ -#undef HAVE_DECL_STRVERSCMP - -/* Define to 1 if you have the declaration of `vasprintf', and to 0 if you - don't. */ -#undef HAVE_DECL_VASPRINTF - -/* Define to 1 if you have the declaration of `vsnprintf', and to 0 if you - don't. */ -#undef HAVE_DECL_VSNPRINTF - -/* Define to 1 if you have the `dladdr' function. */ -#undef HAVE_DLADDR - -/* Define to 1 if you have the <dlfcn.h> header file. */ -#undef HAVE_DLFCN_H - -/* Define to 1 if the system has the type `Elf32_auxv_t'. */ -#undef HAVE_ELF32_AUXV_T - -/* Define to 1 if the system has the type `Elf64_auxv_t'. */ -#undef HAVE_ELF64_AUXV_T - -/* Define if <sys/procfs.h> has elf_fpregset_t. */ -#undef HAVE_ELF_FPREGSET_T - -/* Define to 1 if you have the <fcntl.h> header file. */ -#undef HAVE_FCNTL_H - -/* Define to 1 if you have the `fdwalk' function. */ -#undef HAVE_FDWALK - -/* Define to 1 if you have the `fork' function. */ -#undef HAVE_FORK - -/* Define to 1 if you have the `getauxval' function. */ -#undef HAVE_GETAUXVAL - -/* Define to 1 if you have the `getrlimit' function. */ -#undef HAVE_GETRLIMIT - -/* Define to 1 if you have the <inttypes.h> header file. */ -#undef HAVE_INTTYPES_H - -/* Define if you have <langinfo.h> and nl_langinfo(CODESET). */ -#undef HAVE_LANGINFO_CODESET - -/* Define to 1 if you have the `dl' library (-ldl). */ -#undef HAVE_LIBDL - -/* Define if the target supports branch tracing. */ -#undef HAVE_LINUX_BTRACE - -/* Define to 1 if you have the <linux/elf.h> header file. */ -#undef HAVE_LINUX_ELF_H - -/* Define to 1 if you have the <linux/perf_event.h> header file. */ -#undef HAVE_LINUX_PERF_EVENT_H - -/* Define if the target supports register sets. */ -#undef HAVE_LINUX_REGSETS - -/* Define if the target supports PTRACE_PEEKUSR for register access. */ -#undef HAVE_LINUX_USRREGS - -/* Define to 1 if you have the <locale.h> header file. */ -#undef HAVE_LOCALE_H - -/* Define to 1 if the system has the type `long long'. */ -#undef HAVE_LONG_LONG - -/* Define if <thread_db.h> has lwpid_t. */ -#undef HAVE_LWPID_T - -/* Define to 1 if you have the <memory.h> header file. */ -#undef HAVE_MEMORY_H - -/* Define to 1 if you have the <netdb.h> header file. */ -#undef HAVE_NETDB_H - -/* Define to 1 if you have the <netinet/in.h> header file. */ -#undef HAVE_NETINET_IN_H - -/* Define to 1 if you have the <netinet/tcp.h> header file. */ -#undef HAVE_NETINET_TCP_H - -/* Define if you support the personality syscall. */ -#undef HAVE_PERSONALITY - -/* Define to 1 if you have the `pipe' function. */ -#undef HAVE_PIPE - -/* Define to 1 if you have the `pipe2' function. */ -#undef HAVE_PIPE2 - -/* Define to 1 if you have the `pread' function. */ -#undef HAVE_PREAD - -/* Define to 1 if you have the `pread64' function. */ -#undef HAVE_PREAD64 - -/* Define if <sys/procfs.h> has prfpregset_t. */ -#undef HAVE_PRFPREGSET_T - -/* Define if <sys/procfs.h> has prgregset_t. */ -#undef HAVE_PRGREGSET_T - -/* Define to 1 if you have the <proc_service.h> header file. */ -#undef HAVE_PROC_SERVICE_H - -/* Define if <thread_db.h> has psaddr_t. */ -#undef HAVE_PSADDR_T - -/* Have PTHREAD_PRIO_INHERIT. */ -#undef HAVE_PTHREAD_PRIO_INHERIT - -/* Define to 1 if you have the `pthread_setname_np' function. */ -#undef HAVE_PTHREAD_SETNAME_NP - -/* Define to 1 if you have the `pthread_sigmask' function. */ -#undef HAVE_PTHREAD_SIGMASK - -/* Define if the target supports PTRACE_GETFPXREGS for extended register - access. */ -#undef HAVE_PTRACE_GETFPXREGS - -/* Define if the target supports PTRACE_GETREGS for register access. */ -#undef HAVE_PTRACE_GETREGS - -/* Define to 1 if you have the <ptrace.h> header file. */ -#undef HAVE_PTRACE_H - -/* Define to 1 if you have the `pwrite' function. */ -#undef HAVE_PWRITE - -/* Define to 1 if you have the `setns' function. */ -#undef HAVE_SETNS - -/* Define to 1 if you have the `sigaction' function. */ -#undef HAVE_SIGACTION - -/* Define to 1 if you have the <signal.h> header file. */ -#undef HAVE_SIGNAL_H - -/* Define to 1 if you have the `sigprocmask' function. */ -#undef HAVE_SIGPROCMASK - -/* Define if sigsetjmp is available. */ -#undef HAVE_SIGSETJMP - -/* Define to 1 if you have the `socketpair' function. */ -#undef HAVE_SOCKETPAIR - -/* Define to 1 if the system has the type `socklen_t'. */ -#undef HAVE_SOCKLEN_T - -/* Define to 1 if you have the <stdint.h> header file. */ -#undef HAVE_STDINT_H - -/* Define to 1 if you have the <stdlib.h> header file. */ -#undef HAVE_STDLIB_H - -/* Define to 1 if you have the <strings.h> header file. */ -#undef HAVE_STRINGS_H - -/* Define to 1 if you have the <string.h> header file. */ -#undef HAVE_STRING_H - -/* Define to 1 if `st_blksize' is a member of `struct stat'. */ -#undef HAVE_STRUCT_STAT_ST_BLKSIZE - -/* Define to 1 if `st_blocks' is a member of `struct stat'. */ -#undef HAVE_STRUCT_STAT_ST_BLOCKS - -/* Define to 1 if `fs_base' is a member of `struct user_regs_struct'. */ -#undef HAVE_STRUCT_USER_REGS_STRUCT_FS_BASE - -/* Define to 1 if `gs_base' is a member of `struct user_regs_struct'. */ -#undef HAVE_STRUCT_USER_REGS_STRUCT_GS_BASE - -/* Define to 1 if the target supports __sync_*_compare_and_swap */ -#undef HAVE_SYNC_BUILTINS - -/* Define to 1 if you have the <sys/file.h> header file. */ -#undef HAVE_SYS_FILE_H - -/* Define to 1 if you have the <sys/ioctl.h> header file. */ -#undef HAVE_SYS_IOCTL_H - -/* Define to 1 if you have the <sys/procfs.h> header file. */ -#undef HAVE_SYS_PROCFS_H - -/* Define to 1 if you have the <sys/ptrace.h> header file. */ -#undef HAVE_SYS_PTRACE_H - -/* Define to 1 if you have the <sys/reg.h> header file. */ -#undef HAVE_SYS_REG_H - -/* Define to 1 if you have the <sys/resource.h> header file. */ -#undef HAVE_SYS_RESOURCE_H - -/* Define to 1 if you have the <sys/socket.h> header file. */ -#undef HAVE_SYS_SOCKET_H - -/* Define to 1 if you have the <sys/stat.h> header file. */ -#undef HAVE_SYS_STAT_H - -/* Define to 1 if you have the <sys/types.h> header file. */ -#undef HAVE_SYS_TYPES_H - -/* Define to 1 if you have the <sys/un.h> header file. */ -#undef HAVE_SYS_UN_H - -/* Define to 1 if you have the <sys/wait.h> header file. */ -#undef HAVE_SYS_WAIT_H - -/* Define if TD_VERSION is available. */ -#undef HAVE_TD_VERSION - -/* Define to 1 if you have the <termios.h> header file. */ -#undef HAVE_TERMIOS_H - -/* Define to 1 if you have the <thread_db.h> header file. */ -#undef HAVE_THREAD_DB_H - -/* Define to 1 if you have the <unistd.h> header file. */ -#undef HAVE_UNISTD_H - -/* Define if UST is available */ -#undef HAVE_UST - -/* Define to 1 if you have the `vfork' function. */ -#undef HAVE_VFORK - -/* Define to 1 if you have the <vfork.h> header file. */ -#undef HAVE_VFORK_H - -/* Define to 1 if you have the <wait.h> header file. */ -#undef HAVE_WAIT_H - -/* Define to 1 if `fork' works. */ -#undef HAVE_WORKING_FORK - -/* Define to 1 if `vfork' works. */ -#undef HAVE_WORKING_VFORK - -/* Define to the address where bug reports for this package should be sent. */ -#undef PACKAGE_BUGREPORT - -/* Define to the full name of this package. */ -#undef PACKAGE_NAME - -/* Define to the full name and version of this package. */ -#undef PACKAGE_STRING - -/* Define to the one symbol short name of this package. */ -#undef PACKAGE_TARNAME - -/* Define to the home page for this package. */ -#undef PACKAGE_URL - -/* Define to the version of this package. */ -#undef PACKAGE_VERSION - -/* Additional package description */ -#undef PKGVERSION - -/* Define to necessary symbol if this constant uses a non-standard name on - your system. */ -#undef PTHREAD_CREATE_JOINABLE - -/* Define to the type of arg 1 for ptrace. */ -#undef PTRACE_TYPE_ARG1 - -/* Define to the type of arg 3 for ptrace. */ -#undef PTRACE_TYPE_ARG3 - -/* Define to the type of arg 4 for ptrace. */ -#undef PTRACE_TYPE_ARG4 - -/* Define to the type of arg 5 for ptrace. */ -#undef PTRACE_TYPE_ARG5 - -/* Define as the return type of ptrace. */ -#undef PTRACE_TYPE_RET - -/* Bug reporting address */ -#undef REPORT_BUGS_TO - -/* The size of `long long', as computed by sizeof. */ -#undef SIZEOF_LONG_LONG - -/* If using the C implementation of alloca, define if you know the - direction of stack growth for your system; otherwise it will be - automatically deduced at runtime. - STACK_DIRECTION > 0 => grows toward higher addresses - STACK_DIRECTION < 0 => grows toward lower addresses - STACK_DIRECTION = 0 => direction of growth unknown */ -#undef STACK_DIRECTION - -/* Define to 1 if you have the ANSI C header files. */ -#undef STDC_HEADERS - -/* Define if we should use libthread_db directly. */ -#undef USE_LIBTHREAD_DB_DIRECTLY - -/* Enable extensions on AIX 3, Interix. */ -#ifndef _ALL_SOURCE -# undef _ALL_SOURCE -#endif -/* Enable GNU extensions on systems that have them. */ -#ifndef _GNU_SOURCE -# undef _GNU_SOURCE -#endif -/* Enable threading extensions on Solaris. */ -#ifndef _POSIX_PTHREAD_SEMANTICS -# undef _POSIX_PTHREAD_SEMANTICS -#endif -/* Enable extensions on HP NonStop. */ -#ifndef _TANDEM_SOURCE -# undef _TANDEM_SOURCE -#endif -/* Enable general extensions on Solaris. */ -#ifndef __EXTENSIONS__ -# undef __EXTENSIONS__ -#endif - - -/* Define if we should use libthread_db. */ -#undef USE_THREAD_DB - -/* Define if we should use the Windows API, instead of the POSIX API. On - Windows, we use the Windows API when building for MinGW, but the POSIX API - when building for Cygwin. */ -#undef USE_WIN32API - -/* Define if an XML target description is available. */ -#undef USE_XML - -/* Enable large inode numbers on Mac OS X 10.5. */ -#ifndef _DARWIN_USE_64_BIT_INODE -# define _DARWIN_USE_64_BIT_INODE 1 -#endif - -/* Number of bits in a file offset, on hosts where this is settable. */ -#undef _FILE_OFFSET_BITS - -/* Define for large files, on AIX-style hosts. */ -#undef _LARGE_FILES - -/* Define to 1 if on MINIX. */ -#undef _MINIX - -/* Define to 2 if the system does not provide POSIX.1 features except with - this defined. */ -#undef _POSIX_1_SOURCE - -/* Define to 1 if you need to in order for `stat' and other things to work. */ -#undef _POSIX_SOURCE - -/* Define to `int' if <sys/types.h> does not define. */ -#undef pid_t - -/* Define to `unsigned int' if <sys/types.h> does not define. */ -#undef size_t - -/* Define as `fork' if `vfork' does not work. */ -#undef vfork diff -Nru gdb-9.1/gdb/gdbserver/configure gdb-10.2/gdb/gdbserver/configure --- gdb-9.1/gdb/gdbserver/configure 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/configure 1970-01-01 00:00:00.000000000 +0000 @@ -1,10726 +0,0 @@ -#! /bin/sh -# Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69. -# -# -# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. -# -# -# This configure script is free software; the Free Software Foundation -# gives unlimited permission to copy, distribute and modify it. -## -------------------- ## -## M4sh Initialization. ## -## -------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -as_myself= -case $0 in #(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break - done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -# Use a proper internal environment variable to ensure we don't fall - # into an infinite loop, continuously re-executing ourselves. - if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then - _as_can_reexec=no; export _as_can_reexec; - # We cannot yet assume a decent shell, so we have to provide a -# neutralization value for shells without unset; and this also -# works around shells that cannot unset nonexistent variables. -# Preserve -v and -x to the replacement shell. -BASH_ENV=/dev/null -ENV=/dev/null -(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV -case $- in # (((( - *v*x* | *x*v* ) as_opts=-vx ;; - *v* ) as_opts=-v ;; - *x* ) as_opts=-x ;; - * ) as_opts= ;; -esac -exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} -# Admittedly, this is quite paranoid, since all the known shells bail -# out after a failed `exec'. -$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 -as_fn_exit 255 - fi - # We don't want this to propagate to other subprocesses. - { _as_can_reexec=; unset _as_can_reexec;} -if test "x$CONFIG_SHELL" = x; then - as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which - # is contrary to our usage. Disable this feature. - alias -g '\${1+\"\$@\"}'='\"\$@\"' - setopt NO_GLOB_SUBST -else - case \`(set -o) 2>/dev/null\` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi -" - as_required="as_fn_return () { (exit \$1); } -as_fn_success () { as_fn_return 0; } -as_fn_failure () { as_fn_return 1; } -as_fn_ret_success () { return 0; } -as_fn_ret_failure () { return 1; } - -exitcode=0 -as_fn_success || { exitcode=1; echo as_fn_success failed.; } -as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } -as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } -as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } -if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : - -else - exitcode=1; echo positional parameters were not saved. -fi -test x\$exitcode = x0 || exit 1 -test -x / || exit 1" - as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO - as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO - eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && - test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 -test \$(( 1 + 1 )) = 2 || exit 1" - if (eval "$as_required") 2>/dev/null; then : - as_have_required=yes -else - as_have_required=no -fi - if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : - -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -as_found=false -for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - as_found=: - case $as_dir in #( - /*) - for as_base in sh bash ksh sh5; do - # Try only shells that exist, to save several forks. - as_shell=$as_dir/$as_base - if { test -f "$as_shell" || test -f "$as_shell.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : - CONFIG_SHELL=$as_shell as_have_required=yes - if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : - break 2 -fi -fi - done;; - esac - as_found=false -done -$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : - CONFIG_SHELL=$SHELL as_have_required=yes -fi; } -IFS=$as_save_IFS - - - if test "x$CONFIG_SHELL" != x; then : - export CONFIG_SHELL - # We cannot yet assume a decent shell, so we have to provide a -# neutralization value for shells without unset; and this also -# works around shells that cannot unset nonexistent variables. -# Preserve -v and -x to the replacement shell. -BASH_ENV=/dev/null -ENV=/dev/null -(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV -case $- in # (((( - *v*x* | *x*v* ) as_opts=-vx ;; - *v* ) as_opts=-v ;; - *x* ) as_opts=-x ;; - * ) as_opts= ;; -esac -exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} -# Admittedly, this is quite paranoid, since all the known shells bail -# out after a failed `exec'. -$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 -exit 255 -fi - - if test x$as_have_required = xno; then : - $as_echo "$0: This script requires a shell more modern than all" - $as_echo "$0: the shells that I found on your system." - if test x${ZSH_VERSION+set} = xset ; then - $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" - $as_echo "$0: be upgraded to zsh 4.3.4 or later." - else - $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, -$0: including any error possibly output before this -$0: message. Then install a modern shell, or manually run -$0: the script under such a shell if you do have one." - fi - exit 1 -fi -fi -fi -SHELL=${CONFIG_SHELL-/bin/sh} -export SHELL -# Unset more variables known to interfere with behavior of common tools. -CLICOLOR_FORCE= GREP_OPTIONS= -unset CLICOLOR_FORCE GREP_OPTIONS - -## --------------------- ## -## M4sh Shell Functions. ## -## --------------------- ## -# as_fn_unset VAR -# --------------- -# Portably unset VAR. -as_fn_unset () -{ - { eval $1=; unset $1;} -} -as_unset=as_fn_unset - -# as_fn_set_status STATUS -# ----------------------- -# Set $? to STATUS, without forking. -as_fn_set_status () -{ - return $1 -} # as_fn_set_status - -# as_fn_exit STATUS -# ----------------- -# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. -as_fn_exit () -{ - set +e - as_fn_set_status $1 - exit $1 -} # as_fn_exit - -# as_fn_mkdir_p -# ------------- -# Create "$as_dir" as a directory, including parents if necessary. -as_fn_mkdir_p () -{ - - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || eval $as_mkdir_p || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" - - -} # as_fn_mkdir_p - -# as_fn_executable_p FILE -# ----------------------- -# Test if FILE is an executable regular file. -as_fn_executable_p () -{ - test -f "$1" && test -x "$1" -} # as_fn_executable_p -# as_fn_append VAR VALUE -# ---------------------- -# Append the text in VALUE to the end of the definition contained in VAR. Take -# advantage of any shell optimizations that allow amortized linear growth over -# repeated appends, instead of the typical quadratic growth present in naive -# implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : - eval 'as_fn_append () - { - eval $1+=\$2 - }' -else - as_fn_append () - { - eval $1=\$$1\$2 - } -fi # as_fn_append - -# as_fn_arith ARG... -# ------------------ -# Perform arithmetic evaluation on the ARGs, and store the result in the -# global $as_val. Take advantage of shells that can avoid forks. The arguments -# must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : - eval 'as_fn_arith () - { - as_val=$(( $* )) - }' -else - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -# as_fn_error STATUS ERROR [LINENO LOG_FD] -# ---------------------------------------- -# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are -# provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with STATUS, using 1 if that was 0. -as_fn_error () -{ - as_status=$1; test $as_status -eq 0 && as_status=1 - if test "$4"; then - as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 - fi - $as_echo "$as_me: error: $2" >&2 - as_fn_exit $as_status -} # as_fn_error - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - - - as_lineno_1=$LINENO as_lineno_1a=$LINENO - as_lineno_2=$LINENO as_lineno_2a=$LINENO - eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && - test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { - # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) - sed -n ' - p - /[$]LINENO/= - ' <$as_myself | - sed ' - s/[$]LINENO.*/&-/ - t lineno - b - :lineno - N - :loop - s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ - t loop - s/-\n.*// - ' >$as_me.lineno && - chmod +x "$as_me.lineno" || - { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } - - # If we had to re-execute with $CONFIG_SHELL, we're ensured to have - # already done that, so ensure we don't try to do so again and fall - # in an infinite loop. This has already happened in practice. - _as_can_reexec=no; export _as_can_reexec - # Don't try to exec as it changes $[0], causing all sort of problems - # (the dirname of $[0] is not the place where we might find the - # original and so on. Autoconf is especially sensitive to this). - . "./$as_me.lineno" - # Exit status is that of the last command. - exit -} - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in #((((( --n*) - case `echo 'xy\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - xy) ECHO_C='\c';; - *) echo `echo ksh88 bug on AIX 6.1` > /dev/null - ECHO_T=' ';; - esac;; -*) - ECHO_N='-n';; -esac - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir 2>/dev/null -fi -if (echo >conf$$.file) 2>/dev/null; then - if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -pR'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -pR' - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -pR' - fi -else - as_ln_s='cp -pR' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - -if mkdir -p . 2>/dev/null; then - as_mkdir_p='mkdir -p "$as_dir"' -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - -as_test_x='test -x' -as_executable_p=as_fn_executable_p - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -test -n "$DJDIR" || exec 7<&0 </dev/null -exec 6>&1 - -# Name of the host. -# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, -# so uname gets run too. -ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` - -# -# Initializations. -# -ac_default_prefix=/usr/local -ac_clean_files= -ac_config_libobj_dir=. -LIBOBJS= -cross_compiling=no -subdirs= -MFLAGS= -MAKEFLAGS= - -# Identity of this package. -PACKAGE_NAME= -PACKAGE_TARNAME= -PACKAGE_VERSION= -PACKAGE_STRING= -PACKAGE_BUGREPORT= -PACKAGE_URL= - -ac_unique_file="server.c" -# Factoring default headers for most tests. -ac_includes_default="\ -#include <stdio.h> -#ifdef HAVE_SYS_TYPES_H -# include <sys/types.h> -#endif -#ifdef HAVE_SYS_STAT_H -# include <sys/stat.h> -#endif -#ifdef STDC_HEADERS -# include <stdlib.h> -# include <stddef.h> -#else -# ifdef HAVE_STDLIB_H -# include <stdlib.h> -# endif -#endif -#ifdef HAVE_STRING_H -# if !defined STDC_HEADERS && defined HAVE_MEMORY_H -# include <memory.h> -# endif -# include <string.h> -#endif -#ifdef HAVE_STRINGS_H -# include <strings.h> -#endif -#ifdef HAVE_INTTYPES_H -# include <inttypes.h> -#endif -#ifdef HAVE_STDINT_H -# include <stdint.h> -#endif -#ifdef HAVE_UNISTD_H -# include <unistd.h> -#endif" - -ac_subst_vars='LTLIBOBJS -LIBOBJS -GNULIB_STDINT_H -extra_libraries -IPA_DEPFILES -srv_xmlfiles -srv_xmlbuiltin -GDBSERVER_LIBS -GDBSERVER_DEPFILES -RDYNAMIC -REPORT_BUGS_TEXI -REPORT_BUGS_TO -PKGVERSION -WERROR_CFLAGS -WARN_CFLAGS -ustinc -ustlibs -PTHREAD_CFLAGS -PTHREAD_LIBS -PTHREAD_CC -ax_pthread_config -SED -ALLOCA -CCDEPMODE -CONFIG_SRC_SUBDIR -DEPDIR -am__leading_dot -host_noncanonical -target_noncanonical -CXX_DIALECT -HAVE_CXX11 -RANLIB -AR -INSTALL_DATA -INSTALL_SCRIPT -INSTALL_PROGRAM -target_os -target_vendor -target_cpu -target -host_os -host_vendor -host_cpu -host -build_os -build_vendor -build_cpu -build -EGREP -GREP -CPP -ac_ct_CXX -CXXFLAGS -CXX -OBJEXT -EXEEXT -ac_ct_CC -CPPFLAGS -LDFLAGS -CFLAGS -CC -MAINT -MAINTAINER_MODE_FALSE -MAINTAINER_MODE_TRUE -target_alias -host_alias -build_alias -LIBS -ECHO_T -ECHO_N -ECHO_C -DEFS -mandir -localedir -libdir -psdir -pdfdir -dvidir -htmldir -infodir -docdir -oldincludedir -includedir -localstatedir -sharedstatedir -sysconfdir -datadir -datarootdir -libexecdir -sbindir -bindir -program_transform_name -prefix -exec_prefix -PACKAGE_URL -PACKAGE_BUGREPORT -PACKAGE_STRING -PACKAGE_VERSION -PACKAGE_TARNAME -PACKAGE_NAME -PATH_SEPARATOR -SHELL' -ac_subst_files='' -ac_user_opts=' -enable_option_checking -enable_maintainer_mode -enable_largefile -enable_unit_tests -with_ust -with_ust_include -with_ust_lib -enable_werror -enable_build_warnings -enable_gdb_build_warnings -with_pkgversion -with_bugurl -with_libthread_db -enable_inprocess_agent -' - ac_precious_vars='build_alias -host_alias -target_alias -CC -CFLAGS -LDFLAGS -LIBS -CPPFLAGS -CXX -CXXFLAGS -CCC -CPP' - - -# Initialize some variables set by options. -ac_init_help= -ac_init_version=false -ac_unrecognized_opts= -ac_unrecognized_sep= -# The variables have the same names as the options, with -# dashes changed to underlines. -cache_file=/dev/null -exec_prefix=NONE -no_create= -no_recursion= -prefix=NONE -program_prefix=NONE -program_suffix=NONE -program_transform_name=s,x,x, -silent= -site= -srcdir= -verbose= -x_includes=NONE -x_libraries=NONE - -# Installation directory options. -# These are left unexpanded so users can "make install exec_prefix=/foo" -# and all the variables that are supposed to be based on exec_prefix -# by default will actually change. -# Use braces instead of parens because sh, perl, etc. also accept them. -# (The list follows the same order as the GNU Coding Standards.) -bindir='${exec_prefix}/bin' -sbindir='${exec_prefix}/sbin' -libexecdir='${exec_prefix}/libexec' -datarootdir='${prefix}/share' -datadir='${datarootdir}' -sysconfdir='${prefix}/etc' -sharedstatedir='${prefix}/com' -localstatedir='${prefix}/var' -includedir='${prefix}/include' -oldincludedir='/usr/include' -docdir='${datarootdir}/doc/${PACKAGE}' -infodir='${datarootdir}/info' -htmldir='${docdir}' -dvidir='${docdir}' -pdfdir='${docdir}' -psdir='${docdir}' -libdir='${exec_prefix}/lib' -localedir='${datarootdir}/locale' -mandir='${datarootdir}/man' - -ac_prev= -ac_dashdash= -for ac_option -do - # If the previous option needs an argument, assign it. - if test -n "$ac_prev"; then - eval $ac_prev=\$ac_option - ac_prev= - continue - fi - - case $ac_option in - *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; - *=) ac_optarg= ;; - *) ac_optarg=yes ;; - esac - - # Accept the important Cygnus configure options, so we can diagnose typos. - - case $ac_dashdash$ac_option in - --) - ac_dashdash=yes ;; - - -bindir | --bindir | --bindi | --bind | --bin | --bi) - ac_prev=bindir ;; - -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) - bindir=$ac_optarg ;; - - -build | --build | --buil | --bui | --bu) - ac_prev=build_alias ;; - -build=* | --build=* | --buil=* | --bui=* | --bu=*) - build_alias=$ac_optarg ;; - - -cache-file | --cache-file | --cache-fil | --cache-fi \ - | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) - ac_prev=cache_file ;; - -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ - | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) - cache_file=$ac_optarg ;; - - --config-cache | -C) - cache_file=config.cache ;; - - -datadir | --datadir | --datadi | --datad) - ac_prev=datadir ;; - -datadir=* | --datadir=* | --datadi=* | --datad=*) - datadir=$ac_optarg ;; - - -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ - | --dataroo | --dataro | --datar) - ac_prev=datarootdir ;; - -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ - | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) - datarootdir=$ac_optarg ;; - - -disable-* | --disable-*) - ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"enable_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval enable_$ac_useropt=no ;; - - -docdir | --docdir | --docdi | --doc | --do) - ac_prev=docdir ;; - -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) - docdir=$ac_optarg ;; - - -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) - ac_prev=dvidir ;; - -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) - dvidir=$ac_optarg ;; - - -enable-* | --enable-*) - ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"enable_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval enable_$ac_useropt=\$ac_optarg ;; - - -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ - | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ - | --exec | --exe | --ex) - ac_prev=exec_prefix ;; - -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ - | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ - | --exec=* | --exe=* | --ex=*) - exec_prefix=$ac_optarg ;; - - -gas | --gas | --ga | --g) - # Obsolete; use --with-gas. - with_gas=yes ;; - - -help | --help | --hel | --he | -h) - ac_init_help=long ;; - -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) - ac_init_help=recursive ;; - -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) - ac_init_help=short ;; - - -host | --host | --hos | --ho) - ac_prev=host_alias ;; - -host=* | --host=* | --hos=* | --ho=*) - host_alias=$ac_optarg ;; - - -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) - ac_prev=htmldir ;; - -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ - | --ht=*) - htmldir=$ac_optarg ;; - - -includedir | --includedir | --includedi | --included | --include \ - | --includ | --inclu | --incl | --inc) - ac_prev=includedir ;; - -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ - | --includ=* | --inclu=* | --incl=* | --inc=*) - includedir=$ac_optarg ;; - - -infodir | --infodir | --infodi | --infod | --info | --inf) - ac_prev=infodir ;; - -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) - infodir=$ac_optarg ;; - - -libdir | --libdir | --libdi | --libd) - ac_prev=libdir ;; - -libdir=* | --libdir=* | --libdi=* | --libd=*) - libdir=$ac_optarg ;; - - -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ - | --libexe | --libex | --libe) - ac_prev=libexecdir ;; - -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ - | --libexe=* | --libex=* | --libe=*) - libexecdir=$ac_optarg ;; - - -localedir | --localedir | --localedi | --localed | --locale) - ac_prev=localedir ;; - -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) - localedir=$ac_optarg ;; - - -localstatedir | --localstatedir | --localstatedi | --localstated \ - | --localstate | --localstat | --localsta | --localst | --locals) - ac_prev=localstatedir ;; - -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ - | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) - localstatedir=$ac_optarg ;; - - -mandir | --mandir | --mandi | --mand | --man | --ma | --m) - ac_prev=mandir ;; - -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) - mandir=$ac_optarg ;; - - -nfp | --nfp | --nf) - # Obsolete; use --without-fp. - with_fp=no ;; - - -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c | -n) - no_create=yes ;; - - -no-recursion | --no-recursion | --no-recursio | --no-recursi \ - | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) - no_recursion=yes ;; - - -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ - | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ - | --oldin | --oldi | --old | --ol | --o) - ac_prev=oldincludedir ;; - -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ - | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ - | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) - oldincludedir=$ac_optarg ;; - - -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) - ac_prev=prefix ;; - -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) - prefix=$ac_optarg ;; - - -program-prefix | --program-prefix | --program-prefi | --program-pref \ - | --program-pre | --program-pr | --program-p) - ac_prev=program_prefix ;; - -program-prefix=* | --program-prefix=* | --program-prefi=* \ - | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) - program_prefix=$ac_optarg ;; - - -program-suffix | --program-suffix | --program-suffi | --program-suff \ - | --program-suf | --program-su | --program-s) - ac_prev=program_suffix ;; - -program-suffix=* | --program-suffix=* | --program-suffi=* \ - | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) - program_suffix=$ac_optarg ;; - - -program-transform-name | --program-transform-name \ - | --program-transform-nam | --program-transform-na \ - | --program-transform-n | --program-transform- \ - | --program-transform | --program-transfor \ - | --program-transfo | --program-transf \ - | --program-trans | --program-tran \ - | --progr-tra | --program-tr | --program-t) - ac_prev=program_transform_name ;; - -program-transform-name=* | --program-transform-name=* \ - | --program-transform-nam=* | --program-transform-na=* \ - | --program-transform-n=* | --program-transform-=* \ - | --program-transform=* | --program-transfor=* \ - | --program-transfo=* | --program-transf=* \ - | --program-trans=* | --program-tran=* \ - | --progr-tra=* | --program-tr=* | --program-t=*) - program_transform_name=$ac_optarg ;; - - -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) - ac_prev=pdfdir ;; - -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) - pdfdir=$ac_optarg ;; - - -psdir | --psdir | --psdi | --psd | --ps) - ac_prev=psdir ;; - -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) - psdir=$ac_optarg ;; - - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - silent=yes ;; - - -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) - ac_prev=sbindir ;; - -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ - | --sbi=* | --sb=*) - sbindir=$ac_optarg ;; - - -sharedstatedir | --sharedstatedir | --sharedstatedi \ - | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ - | --sharedst | --shareds | --shared | --share | --shar \ - | --sha | --sh) - ac_prev=sharedstatedir ;; - -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ - | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ - | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ - | --sha=* | --sh=*) - sharedstatedir=$ac_optarg ;; - - -site | --site | --sit) - ac_prev=site ;; - -site=* | --site=* | --sit=*) - site=$ac_optarg ;; - - -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) - ac_prev=srcdir ;; - -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) - srcdir=$ac_optarg ;; - - -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ - | --syscon | --sysco | --sysc | --sys | --sy) - ac_prev=sysconfdir ;; - -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ - | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) - sysconfdir=$ac_optarg ;; - - -target | --target | --targe | --targ | --tar | --ta | --t) - ac_prev=target_alias ;; - -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) - target_alias=$ac_optarg ;; - - -v | -verbose | --verbose | --verbos | --verbo | --verb) - verbose=yes ;; - - -version | --version | --versio | --versi | --vers | -V) - ac_init_version=: ;; - - -with-* | --with-*) - ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"with_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval with_$ac_useropt=\$ac_optarg ;; - - -without-* | --without-*) - ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"with_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval with_$ac_useropt=no ;; - - --x) - # Obsolete; use --with-x. - with_x=yes ;; - - -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ - | --x-incl | --x-inc | --x-in | --x-i) - ac_prev=x_includes ;; - -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ - | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) - x_includes=$ac_optarg ;; - - -x-libraries | --x-libraries | --x-librarie | --x-librari \ - | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) - ac_prev=x_libraries ;; - -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ - | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) - x_libraries=$ac_optarg ;; - - -*) as_fn_error $? "unrecognized option: \`$ac_option' -Try \`$0 --help' for more information" - ;; - - *=*) - ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` - # Reject names that are not valid shell variable names. - case $ac_envvar in #( - '' | [0-9]* | *[!_$as_cr_alnum]* ) - as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; - esac - eval $ac_envvar=\$ac_optarg - export $ac_envvar ;; - - *) - # FIXME: should be removed in autoconf 3.0. - $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 - expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 - : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" - ;; - - esac -done - -if test -n "$ac_prev"; then - ac_option=--`echo $ac_prev | sed 's/_/-/g'` - as_fn_error $? "missing argument to $ac_option" -fi - -if test -n "$ac_unrecognized_opts"; then - case $enable_option_checking in - no) ;; - fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; - *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; - esac -fi - -# Check all directory arguments for consistency. -for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ - datadir sysconfdir sharedstatedir localstatedir includedir \ - oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir -do - eval ac_val=\$$ac_var - # Remove trailing slashes. - case $ac_val in - */ ) - ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` - eval $ac_var=\$ac_val;; - esac - # Be sure to have absolute directory names. - case $ac_val in - [\\/$]* | ?:[\\/]* ) continue;; - NONE | '' ) case $ac_var in *prefix ) continue;; esac;; - esac - as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" -done - -# There might be people who depend on the old broken behavior: `$host' -# used to hold the argument of --host etc. -# FIXME: To remove some day. -build=$build_alias -host=$host_alias -target=$target_alias - -# FIXME: To remove some day. -if test "x$host_alias" != x; then - if test "x$build_alias" = x; then - cross_compiling=maybe - elif test "x$build_alias" != "x$host_alias"; then - cross_compiling=yes - fi -fi - -ac_tool_prefix= -test -n "$host_alias" && ac_tool_prefix=$host_alias- - -test "$silent" = yes && exec 6>/dev/null - - -ac_pwd=`pwd` && test -n "$ac_pwd" && -ac_ls_di=`ls -di .` && -ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || - as_fn_error $? "working directory cannot be determined" -test "X$ac_ls_di" = "X$ac_pwd_ls_di" || - as_fn_error $? "pwd does not report name of working directory" - - -# Find the source files, if location was not specified. -if test -z "$srcdir"; then - ac_srcdir_defaulted=yes - # Try the directory containing this script, then the parent directory. - ac_confdir=`$as_dirname -- "$as_myself" || -$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_myself" : 'X\(//\)[^/]' \| \ - X"$as_myself" : 'X\(//\)$' \| \ - X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_myself" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - srcdir=$ac_confdir - if test ! -r "$srcdir/$ac_unique_file"; then - srcdir=.. - fi -else - ac_srcdir_defaulted=no -fi -if test ! -r "$srcdir/$ac_unique_file"; then - test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." - as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" -fi -ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" -ac_abs_confdir=`( - cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" - pwd)` -# When building in place, set srcdir=. -if test "$ac_abs_confdir" = "$ac_pwd"; then - srcdir=. -fi -# Remove unnecessary trailing slashes from srcdir. -# Double slashes in file names in object file debugging info -# mess up M-x gdb in Emacs. -case $srcdir in -*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; -esac -for ac_var in $ac_precious_vars; do - eval ac_env_${ac_var}_set=\${${ac_var}+set} - eval ac_env_${ac_var}_value=\$${ac_var} - eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} - eval ac_cv_env_${ac_var}_value=\$${ac_var} -done - -# -# Report the --help message. -# -if test "$ac_init_help" = "long"; then - # Omit some internal or obsolete options to make the list less imposing. - # This message is too long to be a string in the A/UX 3.1 sh. - cat <<_ACEOF -\`configure' configures this package to adapt to many kinds of systems. - -Usage: $0 [OPTION]... [VAR=VALUE]... - -To assign environment variables (e.g., CC, CFLAGS...), specify them as -VAR=VALUE. See below for descriptions of some of the useful variables. - -Defaults for the options are specified in brackets. - -Configuration: - -h, --help display this help and exit - --help=short display options specific to this package - --help=recursive display the short help of all the included packages - -V, --version display version information and exit - -q, --quiet, --silent do not print \`checking ...' messages - --cache-file=FILE cache test results in FILE [disabled] - -C, --config-cache alias for \`--cache-file=config.cache' - -n, --no-create do not create output files - --srcdir=DIR find the sources in DIR [configure dir or \`..'] - -Installation directories: - --prefix=PREFIX install architecture-independent files in PREFIX - [$ac_default_prefix] - --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - [PREFIX] - -By default, \`make install' will install all the files in -\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify -an installation prefix other than \`$ac_default_prefix' using \`--prefix', -for instance \`--prefix=\$HOME'. - -For better control, use the options below. - -Fine tuning of the installation directories: - --bindir=DIR user executables [EPREFIX/bin] - --sbindir=DIR system admin executables [EPREFIX/sbin] - --libexecdir=DIR program executables [EPREFIX/libexec] - --sysconfdir=DIR read-only single-machine data [PREFIX/etc] - --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] - --localstatedir=DIR modifiable single-machine data [PREFIX/var] - --libdir=DIR object code libraries [EPREFIX/lib] - --includedir=DIR C header files [PREFIX/include] - --oldincludedir=DIR C header files for non-gcc [/usr/include] - --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] - --datadir=DIR read-only architecture-independent data [DATAROOTDIR] - --infodir=DIR info documentation [DATAROOTDIR/info] - --localedir=DIR locale-dependent data [DATAROOTDIR/locale] - --mandir=DIR man documentation [DATAROOTDIR/man] - --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] - --htmldir=DIR html documentation [DOCDIR] - --dvidir=DIR dvi documentation [DOCDIR] - --pdfdir=DIR pdf documentation [DOCDIR] - --psdir=DIR ps documentation [DOCDIR] -_ACEOF - - cat <<\_ACEOF - -Program names: - --program-prefix=PREFIX prepend PREFIX to installed program names - --program-suffix=SUFFIX append SUFFIX to installed program names - --program-transform-name=PROGRAM run sed PROGRAM on installed program names - -System types: - --build=BUILD configure for building on BUILD [guessed] - --host=HOST cross-compile to build programs to run on HOST [BUILD] - --target=TARGET configure for building compilers for TARGET [HOST] -_ACEOF -fi - -if test -n "$ac_init_help"; then - - cat <<\_ACEOF - -Optional Features: - --disable-option-checking ignore unrecognized --enable/--with options - --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) - --enable-FEATURE[=ARG] include FEATURE [ARG=yes] - --enable-maintainer-mode - enable make rules and dependencies not useful (and - sometimes confusing) to the casual installer - --disable-largefile omit support for large files - --enable-unit-tests Enable the inclusion of unit tests when compiling - GDB - --enable-werror treat compile warnings as errors - --enable-build-warnings enable build-time compiler warnings if gcc is used - --enable-gdb-build-warnings - enable GDB specific build-time compiler warnings if - gcc is used - --enable-inprocess-agent - inprocess agent - -Optional Packages: - --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] - --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) - --with-ust=PATH Specify prefix directory for the installed UST package - Equivalent to --with-ust-include=PATH/include - plus --with-ust-lib=PATH/lib - --with-ust-include=PATH Specify directory for installed UST include files - --with-ust-lib=PATH Specify the directory for the installed UST library - --with-pkgversion=PKG Use PKG in the version string in place of "GDB" - --with-bugurl=URL Direct users to URL to report a bug - --with-libthread-db=PATH - use given libthread_db directly - -Some influential environment variables: - CC C compiler command - CFLAGS C compiler flags - LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a - nonstandard directory <lib dir> - LIBS libraries to pass to the linker, e.g. -l<library> - CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if - you have headers in a nonstandard directory <include dir> - CXX C++ compiler command - CXXFLAGS C++ compiler flags - CPP C preprocessor - -Use these variables to override the choices made by `configure' or to help -it to find libraries and programs with nonstandard names/locations. - -Report bugs to the package provider. -_ACEOF -ac_status=$? -fi - -if test "$ac_init_help" = "recursive"; then - # If there are subdirs, report their specific --help. - for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue - test -d "$ac_dir" || - { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || - continue - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - cd "$ac_dir" || { ac_status=$?; continue; } - # Check for guested configure. - if test -f "$ac_srcdir/configure.gnu"; then - echo && - $SHELL "$ac_srcdir/configure.gnu" --help=recursive - elif test -f "$ac_srcdir/configure"; then - echo && - $SHELL "$ac_srcdir/configure" --help=recursive - else - $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 - fi || ac_status=$? - cd "$ac_pwd" || { ac_status=$?; break; } - done -fi - -test -n "$ac_init_help" && exit $ac_status -if $ac_init_version; then - cat <<\_ACEOF -configure -generated by GNU Autoconf 2.69 - -Copyright (C) 2012 Free Software Foundation, Inc. -This configure script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it. -_ACEOF - exit -fi - -## ------------------------ ## -## Autoconf initialization. ## -## ------------------------ ## - -# ac_fn_c_try_compile LINENO -# -------------------------- -# Try to compile conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext - if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_compile - -# ac_fn_cxx_try_compile LINENO -# ---------------------------- -# Try to compile conftest.$ac_ext, and return whether this succeeded. -ac_fn_cxx_try_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext - if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_cxx_try_compile - -# ac_fn_c_try_cpp LINENO -# ---------------------- -# Try to preprocess conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_cpp () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } > conftest.i && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_cpp - -# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES -# ------------------------------------------------------- -# Tests whether HEADER exists, giving a warning if it cannot be compiled using -# the include files in INCLUDES and setting the cache variable VAR -# accordingly. -ac_fn_c_check_header_mongrel () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if eval \${$3+:} false; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -else - # Is the header compilable? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 -$as_echo_n "checking $2 usability... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -#include <$2> -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_header_compiler=yes -else - ac_header_compiler=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 -$as_echo "$ac_header_compiler" >&6; } - -# Is the header present? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 -$as_echo_n "checking $2 presence... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <$2> -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - ac_header_preproc=yes -else - ac_header_preproc=no -fi -rm -f conftest.err conftest.i conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 -$as_echo "$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( - yes:no: ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 -$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} - ;; - no:yes:* ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 -$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 -$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 -$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 -$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} - ;; -esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - eval "$3=\$ac_header_compiler" -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_c_check_header_mongrel - -# ac_fn_c_try_run LINENO -# ---------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes -# that executables *can* be run. -ac_fn_c_try_run () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then : - ac_retval=0 -else - $as_echo "$as_me: program exited with status $ac_status" >&5 - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=$ac_status -fi - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_run - -# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES -# ------------------------------------------------------- -# Tests whether HEADER exists and can be compiled using the include files in -# INCLUDES, setting the cache variable VAR accordingly. -ac_fn_c_check_header_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -#include <$2> -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_c_check_header_compile - -# ac_fn_c_check_type LINENO TYPE VAR INCLUDES -# ------------------------------------------- -# Tests whether TYPE exists after having included INCLUDES, setting cache -# variable VAR accordingly. -ac_fn_c_check_type () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - eval "$3=no" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -if (sizeof ($2)) - return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -if (sizeof (($2))) - return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - -else - eval "$3=yes" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_c_check_type - -# ac_fn_c_try_link LINENO -# ----------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_link () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext conftest$ac_exeext - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && { - test "$cross_compiling" = yes || - test -x conftest$ac_exeext - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information - # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would - # interfere with the next link command; also delete a directory that is - # left behind by Apple's compiler. We do this before executing the actions. - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_link - -# ac_fn_c_check_func LINENO FUNC VAR -# ---------------------------------- -# Tests whether FUNC exists, setting the cache variable VAR accordingly -ac_fn_c_check_func () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -/* Define $2 to an innocuous variant, in case <limits.h> declares $2. - For example, HP-UX 11i <limits.h> declares gettimeofday. */ -#define $2 innocuous_$2 - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $2 (); below. - Prefer <limits.h> to <assert.h> if __STDC__ is defined, since - <limits.h> exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include <limits.h> -#else -# include <assert.h> -#endif - -#undef $2 - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char $2 (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_$2 || defined __stub___$2 -choke me -#endif - -int -main () -{ -return $2 (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_c_check_func - -# ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES -# --------------------------------------------- -# Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR -# accordingly. -ac_fn_c_check_decl () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - as_decl_name=`echo $2|sed 's/ *(.*//'` - as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'` - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5 -$as_echo_n "checking whether $as_decl_name is declared... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -#ifndef $as_decl_name -#ifdef __cplusplus - (void) $as_decl_use; -#else - (void) $as_decl_name; -#endif -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_c_check_decl - -# ac_fn_cxx_try_link LINENO -# ------------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. -ac_fn_cxx_try_link () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext conftest$ac_exeext - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && { - test "$cross_compiling" = yes || - test -x conftest$ac_exeext - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information - # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would - # interfere with the next link command; also delete a directory that is - # left behind by Apple's compiler. We do this before executing the actions. - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_cxx_try_link - -# ac_fn_cxx_check_func LINENO FUNC VAR -# ------------------------------------ -# Tests whether FUNC exists, setting the cache variable VAR accordingly -ac_fn_cxx_check_func () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -/* Define $2 to an innocuous variant, in case <limits.h> declares $2. - For example, HP-UX 11i <limits.h> declares gettimeofday. */ -#define $2 innocuous_$2 - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $2 (); below. - Prefer <limits.h> to <assert.h> if __STDC__ is defined, since - <limits.h> exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include <limits.h> -#else -# include <assert.h> -#endif - -#undef $2 - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char $2 (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_$2 || defined __stub___$2 -choke me -#endif - -int -main () -{ -return $2 (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_cxx_check_func - -# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES -# -------------------------------------------- -# Tries to find the compile-time value of EXPR in a program that includes -# INCLUDES, setting VAR accordingly. Returns whether the value could be -# computed -ac_fn_c_compute_int () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if test "$cross_compiling" = yes; then - # Depending upon the size, compute the lo and hi bounds. -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) >= 0)]; -test_array [0] = 0; -return test_array [0]; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_lo=0 ac_mid=0 - while :; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) <= $ac_mid)]; -test_array [0] = 0; -return test_array [0]; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_hi=$ac_mid; break -else - as_fn_arith $ac_mid + 1 && ac_lo=$as_val - if test $ac_lo -le $ac_mid; then - ac_lo= ac_hi= - break - fi - as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) < 0)]; -test_array [0] = 0; -return test_array [0]; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_hi=-1 ac_mid=-1 - while :; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) >= $ac_mid)]; -test_array [0] = 0; -return test_array [0]; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_lo=$ac_mid; break -else - as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val - if test $ac_mid -le $ac_hi; then - ac_lo= ac_hi= - break - fi - as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - ac_lo= ac_hi= -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -# Binary search between lo and hi bounds. -while test "x$ac_lo" != "x$ac_hi"; do - as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) <= $ac_mid)]; -test_array [0] = 0; -return test_array [0]; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_hi=$ac_mid -else - as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -done -case $ac_lo in #(( -?*) eval "$3=\$ac_lo"; ac_retval=0 ;; -'') ac_retval=1 ;; -esac - else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -static long int longval () { return $2; } -static unsigned long int ulongval () { return $2; } -#include <stdio.h> -#include <stdlib.h> -int -main () -{ - - FILE *f = fopen ("conftest.val", "w"); - if (! f) - return 1; - if (($2) < 0) - { - long int i = longval (); - if (i != ($2)) - return 1; - fprintf (f, "%ld", i); - } - else - { - unsigned long int i = ulongval (); - if (i != ($2)) - return 1; - fprintf (f, "%lu", i); - } - /* Do not output a trailing newline, as this causes \r\n confusion - on some platforms. */ - return ferror (f) || fclose (f) != 0; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - echo >>conftest.val; read $3 <conftest.val; ac_retval=0 -else - ac_retval=1 -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -rm -f conftest.val - - fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_compute_int - -# ac_fn_c_check_member LINENO AGGR MEMBER VAR INCLUDES -# ---------------------------------------------------- -# Tries to find if the field MEMBER exists in type AGGR, after including -# INCLUDES, setting cache variable VAR accordingly. -ac_fn_c_check_member () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5 -$as_echo_n "checking for $2.$3... " >&6; } -if eval \${$4+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$5 -int -main () -{ -static $2 ac_aggr; -if (ac_aggr.$3) -return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$4=yes" -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$5 -int -main () -{ -static $2 ac_aggr; -if (sizeof ac_aggr.$3) -return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$4=yes" -else - eval "$4=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$4 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_c_check_member -cat >config.log <<_ACEOF -This file contains any messages produced by compilers while -running configure, to aid debugging if configure makes a mistake. - -It was created by $as_me, which was -generated by GNU Autoconf 2.69. Invocation command line was - - $ $0 $@ - -_ACEOF -exec 5>>config.log -{ -cat <<_ASUNAME -## --------- ## -## Platform. ## -## --------- ## - -hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` - -/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` -/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` -/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` -/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` - -_ASUNAME - -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - $as_echo "PATH: $as_dir" - done -IFS=$as_save_IFS - -} >&5 - -cat >&5 <<_ACEOF - - -## ----------- ## -## Core tests. ## -## ----------- ## - -_ACEOF - - -# Keep a trace of the command line. -# Strip out --no-create and --no-recursion so they do not pile up. -# Strip out --silent because we don't want to record it for future runs. -# Also quote any args containing shell meta-characters. -# Make two passes to allow for proper duplicate-argument suppression. -ac_configure_args= -ac_configure_args0= -ac_configure_args1= -ac_must_keep_next=false -for ac_pass in 1 2 -do - for ac_arg - do - case $ac_arg in - -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - continue ;; - *\'*) - ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - case $ac_pass in - 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; - 2) - as_fn_append ac_configure_args1 " '$ac_arg'" - if test $ac_must_keep_next = true; then - ac_must_keep_next=false # Got value, back to normal. - else - case $ac_arg in - *=* | --config-cache | -C | -disable-* | --disable-* \ - | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ - | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ - | -with-* | --with-* | -without-* | --without-* | --x) - case "$ac_configure_args0 " in - "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; - esac - ;; - -* ) ac_must_keep_next=true ;; - esac - fi - as_fn_append ac_configure_args " '$ac_arg'" - ;; - esac - done -done -{ ac_configure_args0=; unset ac_configure_args0;} -{ ac_configure_args1=; unset ac_configure_args1;} - -# When interrupted or exit'd, cleanup temporary files, and complete -# config.log. We remove comments because anyway the quotes in there -# would cause problems or look ugly. -# WARNING: Use '\'' to represent an apostrophe within the trap. -# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. -trap 'exit_status=$? - # Save into config.log some information that might help in debugging. - { - echo - - $as_echo "## ---------------- ## -## Cache variables. ## -## ---------------- ##" - echo - # The following way of writing the cache mishandles newlines in values, -( - for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( - *) { eval $ac_var=; unset $ac_var;} ;; - esac ;; - esac - done - (set) 2>&1 | - case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - sed -n \ - "s/'\''/'\''\\\\'\'''\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" - ;; #( - *) - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) - echo - - $as_echo "## ----------------- ## -## Output variables. ## -## ----------------- ##" - echo - for ac_var in $ac_subst_vars - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - $as_echo "$ac_var='\''$ac_val'\''" - done | sort - echo - - if test -n "$ac_subst_files"; then - $as_echo "## ------------------- ## -## File substitutions. ## -## ------------------- ##" - echo - for ac_var in $ac_subst_files - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - $as_echo "$ac_var='\''$ac_val'\''" - done | sort - echo - fi - - if test -s confdefs.h; then - $as_echo "## ----------- ## -## confdefs.h. ## -## ----------- ##" - echo - cat confdefs.h - echo - fi - test "$ac_signal" != 0 && - $as_echo "$as_me: caught signal $ac_signal" - $as_echo "$as_me: exit $exit_status" - } >&5 - rm -f core *.core core.conftest.* && - rm -f -r conftest* confdefs* conf$$* $ac_clean_files && - exit $exit_status -' 0 -for ac_signal in 1 2 13 15; do - trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal -done -ac_signal=0 - -# confdefs.h avoids OS command line length limits that DEFS can exceed. -rm -f -r conftest* confdefs.h - -$as_echo "/* confdefs.h */" > confdefs.h - -# Predefined preprocessor variables. - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_NAME "$PACKAGE_NAME" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_TARNAME "$PACKAGE_TARNAME" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_VERSION "$PACKAGE_VERSION" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_STRING "$PACKAGE_STRING" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_URL "$PACKAGE_URL" -_ACEOF - - -# Let the site file select an alternate cache file if it wants to. -# Prefer an explicitly selected file to automatically selected ones. -ac_site_file1=NONE -ac_site_file2=NONE -if test -n "$CONFIG_SITE"; then - # We do not want a PATH search for config.site. - case $CONFIG_SITE in #(( - -*) ac_site_file1=./$CONFIG_SITE;; - */*) ac_site_file1=$CONFIG_SITE;; - *) ac_site_file1=./$CONFIG_SITE;; - esac -elif test "x$prefix" != xNONE; then - ac_site_file1=$prefix/share/config.site - ac_site_file2=$prefix/etc/config.site -else - ac_site_file1=$ac_default_prefix/share/config.site - ac_site_file2=$ac_default_prefix/etc/config.site -fi -for ac_site_file in "$ac_site_file1" "$ac_site_file2" -do - test "x$ac_site_file" = xNONE && continue - if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 -$as_echo "$as_me: loading site script $ac_site_file" >&6;} - sed 's/^/| /' "$ac_site_file" >&5 - . "$ac_site_file" \ - || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "failed to load site script $ac_site_file -See \`config.log' for more details" "$LINENO" 5; } - fi -done - -if test -r "$cache_file"; then - # Some versions of bash will fail to source /dev/null (special files - # actually), so we avoid doing that. DJGPP emulates it as a regular file. - if test /dev/null != "$cache_file" && test -f "$cache_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 -$as_echo "$as_me: loading cache $cache_file" >&6;} - case $cache_file in - [\\/]* | ?:[\\/]* ) . "$cache_file";; - *) . "./$cache_file";; - esac - fi -else - { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 -$as_echo "$as_me: creating cache $cache_file" >&6;} - >$cache_file -fi - -# Check that the precious variables saved in the cache have kept the same -# value. -ac_cache_corrupted=false -for ac_var in $ac_precious_vars; do - eval ac_old_set=\$ac_cv_env_${ac_var}_set - eval ac_new_set=\$ac_env_${ac_var}_set - eval ac_old_val=\$ac_cv_env_${ac_var}_value - eval ac_new_val=\$ac_env_${ac_var}_value - case $ac_old_set,$ac_new_set in - set,) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,set) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,);; - *) - if test "x$ac_old_val" != "x$ac_new_val"; then - # differences in whitespace do not lead to failure. - ac_old_val_w=`echo x $ac_old_val` - ac_new_val_w=`echo x $ac_new_val` - if test "$ac_old_val_w" != "$ac_new_val_w"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 -$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} - ac_cache_corrupted=: - else - { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 -$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} - eval $ac_var=\$ac_old_val - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 -$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 -$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} - fi;; - esac - # Pass precious variables to config.status. - if test "$ac_new_set" = set; then - case $ac_new_val in - *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; - *) ac_arg=$ac_var=$ac_new_val ;; - esac - case " $ac_configure_args " in - *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. - *) as_fn_append ac_configure_args " '$ac_arg'" ;; - esac - fi -done -if $ac_cache_corrupted; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 -$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} - as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 -fi -## -------------------- ## -## Main body of script. ## -## -------------------- ## - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - - - -ac_config_headers="$ac_config_headers config.h:config.in" - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 -$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } - # Check whether --enable-maintainer-mode was given. -if test "${enable_maintainer_mode+set}" = set; then : - enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval -else - USE_MAINTAINER_MODE=no -fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 -$as_echo "$USE_MAINTAINER_MODE" >&6; } - if test $USE_MAINTAINER_MODE = yes; then - MAINTAINER_MODE_TRUE= - MAINTAINER_MODE_FALSE='#' -else - MAINTAINER_MODE_TRUE='#' - MAINTAINER_MODE_FALSE= -fi - - MAINT=$MAINTAINER_MODE_TRUE - - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. -set dummy ${ac_tool_prefix}gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="${ac_tool_prefix}gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "gcc", so it can be a program name with args. -set dummy gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CC="gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -else - CC="$ac_cv_prog_CC" -fi - -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. -set dummy ${ac_tool_prefix}cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="${ac_tool_prefix}cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - fi -fi -if test -z "$CC"; then - # Extract the first word of "cc", so it can be a program name with args. -set dummy cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - ac_prog_rejected=no -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_CC="cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -if test $ac_prog_rejected = yes; then - # We found a bogon in the path, so make sure we never use it. - set dummy $ac_cv_prog_CC - shift - if test $# != 0; then - # We chose a different compiler from the bogus one. - # However, it has the same basename, so the bogon will be chosen - # first if we set CC to just the basename; use the full file name. - shift - ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" - fi -fi -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - for ac_prog in cl.exe - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$CC" && break - done -fi -if test -z "$CC"; then - ac_ct_CC=$CC - for ac_prog in cl.exe -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CC="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_CC" && break -done - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -fi - -fi - - -test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "no acceptable C compiler found in \$PATH -See \`config.log' for more details" "$LINENO" 5; } - -# Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -for ac_option in --version -v -V -qversion; do - { { ac_try="$ac_compiler $ac_option >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done - -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" -# Try to create an executable without -o first, disregard a.out. -# It will help us diagnose broken compilers, and finding out an intuition -# of exeext. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 -$as_echo_n "checking whether the C compiler works... " >&6; } -ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` - -# The possible output files: -ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" - -ac_rmfiles= -for ac_file in $ac_files -do - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; - * ) ac_rmfiles="$ac_rmfiles $ac_file";; - esac -done -rm -f $ac_rmfiles - -if { { ac_try="$ac_link_default" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link_default") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. -# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' -# in a Makefile. We should not override ac_cv_exeext if it was cached, -# so that the user can short-circuit this test for compilers unknown to -# Autoconf. -for ac_file in $ac_files '' -do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) - ;; - [ab].out ) - # We found the default executable, but exeext='' is most - # certainly right. - break;; - *.* ) - if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; - then :; else - ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - fi - # We set ac_cv_exeext here because the later test for it is not - # safe: cross compilers may not add the suffix if given an `-o' - # argument, so we may need to know it at that point already. - # Even if this section looks crufty: it has the advantage of - # actually working. - break;; - * ) - break;; - esac -done -test "$ac_cv_exeext" = no && ac_cv_exeext= - -else - ac_file='' -fi -if test -z "$ac_file"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -$as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error 77 "C compiler cannot create executables -See \`config.log' for more details" "$LINENO" 5; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 -$as_echo_n "checking for C compiler default output file name... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 -$as_echo "$ac_file" >&6; } -ac_exeext=$ac_cv_exeext - -rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out -ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 -$as_echo_n "checking for suffix of executables... " >&6; } -if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - # If both `conftest.exe' and `conftest' are `present' (well, observable) -# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will -# work properly (i.e., refer to `conftest.exe'), while it won't with -# `rm'. -for ac_file in conftest.exe conftest conftest.*; do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; - *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - break;; - * ) break;; - esac -done -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details" "$LINENO" 5; } -fi -rm -f conftest conftest$ac_cv_exeext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 -$as_echo "$ac_cv_exeext" >&6; } - -rm -f conftest.$ac_ext -EXEEXT=$ac_cv_exeext -ac_exeext=$EXEEXT -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <stdio.h> -int -main () -{ -FILE *f = fopen ("conftest.out", "w"); - return ferror (f) || fclose (f) != 0; - - ; - return 0; -} -_ACEOF -ac_clean_files="$ac_clean_files conftest.out" -# Check that the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 -$as_echo_n "checking whether we are cross compiling... " >&6; } -if test "$cross_compiling" != yes; then - { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - if { ac_try='./conftest$ac_cv_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then - cross_compiling=no - else - if test "$cross_compiling" = maybe; then - cross_compiling=yes - else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details" "$LINENO" 5; } - fi - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 -$as_echo "$cross_compiling" >&6; } - -rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out -ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 -$as_echo_n "checking for suffix of object files... " >&6; } -if ${ac_cv_objext+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.o conftest.obj -if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - for ac_file in conftest.o conftest.obj conftest.*; do - test -f "$ac_file" || continue; - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; - *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` - break;; - esac -done -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot compute suffix of object files: cannot compile -See \`config.log' for more details" "$LINENO" 5; } -fi -rm -f conftest.$ac_cv_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 -$as_echo "$ac_cv_objext" >&6; } -OBJEXT=$ac_cv_objext -ac_objext=$OBJEXT -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 -$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } -if ${ac_cv_c_compiler_gnu+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_compiler_gnu=yes -else - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_c_compiler_gnu=$ac_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 -$as_echo "$ac_cv_c_compiler_gnu" >&6; } -if test $ac_compiler_gnu = yes; then - GCC=yes -else - GCC= -fi -ac_test_CFLAGS=${CFLAGS+set} -ac_save_CFLAGS=$CFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 -$as_echo_n "checking whether $CC accepts -g... " >&6; } -if ${ac_cv_prog_cc_g+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_save_c_werror_flag=$ac_c_werror_flag - ac_c_werror_flag=yes - ac_cv_prog_cc_g=no - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -else - CFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - -else - ac_c_werror_flag=$ac_save_c_werror_flag - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_c_werror_flag=$ac_save_c_werror_flag -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 -$as_echo "$ac_cv_prog_cc_g" >&6; } -if test "$ac_test_CFLAGS" = set; then - CFLAGS=$ac_save_CFLAGS -elif test $ac_cv_prog_cc_g = yes; then - if test "$GCC" = yes; then - CFLAGS="-g -O2" - else - CFLAGS="-g" - fi -else - if test "$GCC" = yes; then - CFLAGS="-O2" - else - CFLAGS= - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 -$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } -if ${ac_cv_prog_cc_c89+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_prog_cc_c89=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <stdarg.h> -#include <stdio.h> -struct stat; -/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ -struct buf { int x; }; -FILE * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (p, i) - char **p; - int i; -{ - return p[i]; -} -static char *f (char * (*g) (char **, int), char **p, ...) -{ - char *s; - va_list v; - va_start (v,p); - s = g (p, va_arg (v,int)); - va_end (v); - return s; -} - -/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has - function prototypes and stuff, but not '\xHH' hex character constants. - These don't provoke an error unfortunately, instead are silently treated - as 'x'. The following induces an error, until -std is added to get - proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an - array size at least. It's necessary to write '\x00'==0 to get something - that's true only with -std. */ -int osf4_cc_array ['\x00' == 0 ? 1 : -1]; - -/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters - inside strings and character constants. */ -#define FOO(x) 'x' -int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; - -int test (int i, double x); -struct s1 {int (*f) (int a);}; -struct s2 {int (*f) (double a);}; -int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); -int argc; -char **argv; -int -main () -{ -return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; - ; - return 0; -} -_ACEOF -for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ - -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_c89=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext - test "x$ac_cv_prog_cc_c89" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC - -fi -# AC_CACHE_VAL -case "x$ac_cv_prog_cc_c89" in - x) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -$as_echo "none needed" >&6; } ;; - xno) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -$as_echo "unsupported" >&6; } ;; - *) - CC="$CC $ac_cv_prog_cc_c89" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 -$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; -esac -if test "x$ac_cv_prog_cc_c89" != xno; then : - -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -if test -z "$CXX"; then - if test -n "$CCC"; then - CXX=$CCC - else - if test -n "$ac_tool_prefix"; then - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CXX"; then - ac_cv_prog_CXX="$CXX" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CXX=$ac_cv_prog_CXX -if test -n "$CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 -$as_echo "$CXX" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$CXX" && break - done -fi -if test -z "$CXX"; then - ac_ct_CXX=$CXX - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CXX"; then - ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CXX="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CXX=$ac_cv_prog_ac_ct_CXX -if test -n "$ac_ct_CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 -$as_echo "$ac_ct_CXX" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_CXX" && break -done - - if test "x$ac_ct_CXX" = x; then - CXX="g++" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CXX=$ac_ct_CXX - fi -fi - - fi -fi -# Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -for ac_option in --version -v -V -qversion; do - { { ac_try="$ac_compiler $ac_option >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 -$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } -if ${ac_cv_cxx_compiler_gnu+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_compiler_gnu=yes -else - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_cxx_compiler_gnu=$ac_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 -$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } -if test $ac_compiler_gnu = yes; then - GXX=yes -else - GXX= -fi -ac_test_CXXFLAGS=${CXXFLAGS+set} -ac_save_CXXFLAGS=$CXXFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 -$as_echo_n "checking whether $CXX accepts -g... " >&6; } -if ${ac_cv_prog_cxx_g+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_save_cxx_werror_flag=$ac_cxx_werror_flag - ac_cxx_werror_flag=yes - ac_cv_prog_cxx_g=no - CXXFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_prog_cxx_g=yes -else - CXXFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - -else - ac_cxx_werror_flag=$ac_save_cxx_werror_flag - CXXFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_prog_cxx_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_cxx_werror_flag=$ac_save_cxx_werror_flag -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 -$as_echo "$ac_cv_prog_cxx_g" >&6; } -if test "$ac_test_CXXFLAGS" = set; then - CXXFLAGS=$ac_save_CXXFLAGS -elif test $ac_cv_prog_cxx_g = yes; then - if test "$GXX" = yes; then - CXXFLAGS="-g -O2" - else - CXXFLAGS="-g" - fi -else - if test "$GXX" = yes; then - CXXFLAGS="-O2" - else - CXXFLAGS= - fi -fi -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 -$as_echo_n "checking how to run the C preprocessor... " >&6; } -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then - if ${ac_cv_prog_CPP+:} false; then : - $as_echo_n "(cached) " >&6 -else - # Double quotes because CPP needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" - do - ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since - # <limits.h> exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include <limits.h> -#else -# include <assert.h> -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <ac_nonexistent.h> -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - break -fi - - done - ac_cv_prog_CPP=$CPP - -fi - CPP=$ac_cv_prog_CPP -else - ac_cv_prog_CPP=$CPP -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 -$as_echo "$CPP" >&6; } -ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since - # <limits.h> exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include <limits.h> -#else -# include <assert.h> -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <ac_nonexistent.h> -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details" "$LINENO" 5; } -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 -$as_echo_n "checking for grep that handles long lines and -e... " >&6; } -if ${ac_cv_path_GREP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$GREP"; then - ac_path_GREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in grep ggrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_GREP" || continue -# Check for GNU ac_path_GREP and select it if it is found. - # Check for GNU $ac_path_GREP -case `"$ac_path_GREP" --version 2>&1` in -*GNU*) - ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'GREP' >> "conftest.nl" - "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_GREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_GREP="$ac_path_GREP" - ac_path_GREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_GREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_GREP"; then - as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_GREP=$GREP -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 -$as_echo "$ac_cv_path_GREP" >&6; } - GREP="$ac_cv_path_GREP" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 -$as_echo_n "checking for egrep... " >&6; } -if ${ac_cv_path_EGREP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 - then ac_cv_path_EGREP="$GREP -E" - else - if test -z "$EGREP"; then - ac_path_EGREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in egrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_EGREP" || continue -# Check for GNU ac_path_EGREP and select it if it is found. - # Check for GNU $ac_path_EGREP -case `"$ac_path_EGREP" --version 2>&1` in -*GNU*) - ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'EGREP' >> "conftest.nl" - "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_EGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_EGREP="$ac_path_EGREP" - ac_path_EGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_EGREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_EGREP"; then - as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_EGREP=$EGREP -fi - - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 -$as_echo "$ac_cv_path_EGREP" >&6; } - EGREP="$ac_cv_path_EGREP" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 -$as_echo_n "checking for ANSI C header files... " >&6; } -if ${ac_cv_header_stdc+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <stdlib.h> -#include <stdarg.h> -#include <string.h> -#include <float.h> - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_header_stdc=yes -else - ac_cv_header_stdc=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <string.h> - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <stdlib.h> - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then : - : -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <ctype.h> -#include <stdlib.h> -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif - -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int -main () -{ - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - -else - ac_cv_header_stdc=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 -$as_echo "$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then - -$as_echo "#define STDC_HEADERS 1" >>confdefs.h - -fi - -# On IRIX 5.3, sys/types and inttypes.h are conflicting. -for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ - inttypes.h stdint.h unistd.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default -" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - - - - ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default" -if test "x$ac_cv_header_minix_config_h" = xyes; then : - MINIX=yes -else - MINIX= -fi - - - if test "$MINIX" = yes; then - -$as_echo "#define _POSIX_SOURCE 1" >>confdefs.h - - -$as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h - - -$as_echo "#define _MINIX 1" >>confdefs.h - - fi - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5 -$as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; } -if ${ac_cv_safe_to_define___extensions__+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -# define __EXTENSIONS__ 1 - $ac_includes_default -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_safe_to_define___extensions__=yes -else - ac_cv_safe_to_define___extensions__=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5 -$as_echo "$ac_cv_safe_to_define___extensions__" >&6; } - test $ac_cv_safe_to_define___extensions__ = yes && - $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h - - $as_echo "#define _ALL_SOURCE 1" >>confdefs.h - - $as_echo "#define _GNU_SOURCE 1" >>confdefs.h - - $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h - - $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h - - - -# Check whether --enable-largefile was given. -if test "${enable_largefile+set}" = set; then : - enableval=$enable_largefile; -fi - -if test "$enable_largefile" != no; then - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5 -$as_echo_n "checking for special C compiler options needed for large files... " >&6; } -if ${ac_cv_sys_largefile_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_sys_largefile_CC=no - if test "$GCC" != yes; then - ac_save_CC=$CC - while :; do - # IRIX 6.2 and later do not support large files by default, - # so use the C compiler's -n32 option if that helps. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <sys/types.h> - /* Check that off_t can represent 2**63 - 1 correctly. - We can't simply define LARGE_OFF_T to be 9223372036854775807, - since some C++ compilers masquerading as C compilers - incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) - int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 - && LARGE_OFF_T % 2147483647 == 1) - ? 1 : -1]; -int -main () -{ - - ; - return 0; -} -_ACEOF - if ac_fn_c_try_compile "$LINENO"; then : - break -fi -rm -f core conftest.err conftest.$ac_objext - CC="$CC -n32" - if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_sys_largefile_CC=' -n32'; break -fi -rm -f core conftest.err conftest.$ac_objext - break - done - CC=$ac_save_CC - rm -f conftest.$ac_ext - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5 -$as_echo "$ac_cv_sys_largefile_CC" >&6; } - if test "$ac_cv_sys_largefile_CC" != no; then - CC=$CC$ac_cv_sys_largefile_CC - fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5 -$as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; } -if ${ac_cv_sys_file_offset_bits+:} false; then : - $as_echo_n "(cached) " >&6 -else - while :; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <sys/types.h> - /* Check that off_t can represent 2**63 - 1 correctly. - We can't simply define LARGE_OFF_T to be 9223372036854775807, - since some C++ compilers masquerading as C compilers - incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) - int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 - && LARGE_OFF_T % 2147483647 == 1) - ? 1 : -1]; -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_sys_file_offset_bits=no; break -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#define _FILE_OFFSET_BITS 64 -#include <sys/types.h> - /* Check that off_t can represent 2**63 - 1 correctly. - We can't simply define LARGE_OFF_T to be 9223372036854775807, - since some C++ compilers masquerading as C compilers - incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) - int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 - && LARGE_OFF_T % 2147483647 == 1) - ? 1 : -1]; -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_sys_file_offset_bits=64; break -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_cv_sys_file_offset_bits=unknown - break -done -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5 -$as_echo "$ac_cv_sys_file_offset_bits" >&6; } -case $ac_cv_sys_file_offset_bits in #( - no | unknown) ;; - *) -cat >>confdefs.h <<_ACEOF -#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits -_ACEOF -;; -esac -rm -rf conftest* - if test $ac_cv_sys_file_offset_bits = unknown; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5 -$as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; } -if ${ac_cv_sys_large_files+:} false; then : - $as_echo_n "(cached) " >&6 -else - while :; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <sys/types.h> - /* Check that off_t can represent 2**63 - 1 correctly. - We can't simply define LARGE_OFF_T to be 9223372036854775807, - since some C++ compilers masquerading as C compilers - incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) - int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 - && LARGE_OFF_T % 2147483647 == 1) - ? 1 : -1]; -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_sys_large_files=no; break -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#define _LARGE_FILES 1 -#include <sys/types.h> - /* Check that off_t can represent 2**63 - 1 correctly. - We can't simply define LARGE_OFF_T to be 9223372036854775807, - since some C++ compilers masquerading as C compilers - incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) - int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 - && LARGE_OFF_T % 2147483647 == 1) - ? 1 : -1]; -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_sys_large_files=1; break -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_cv_sys_large_files=unknown - break -done -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5 -$as_echo "$ac_cv_sys_large_files" >&6; } -case $ac_cv_sys_large_files in #( - no | unknown) ;; - *) -cat >>confdefs.h <<_ACEOF -#define _LARGE_FILES $ac_cv_sys_large_files -_ACEOF -;; -esac -rm -rf conftest* - fi - - -fi - - -ac_aux_dir= -for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do - if test -f "$ac_dir/install-sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install-sh -c" - break - elif test -f "$ac_dir/install.sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install.sh -c" - break - elif test -f "$ac_dir/shtool"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/shtool install -c" - break - fi -done -if test -z "$ac_aux_dir"; then - as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 -fi - -# These three variables are undocumented and unsupported, -# and are intended to be withdrawn in a future Autoconf release. -# They can cause serious problems if a builder's source tree is in a directory -# whose full name contains unusual characters. -ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. -ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. -ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. - - -# Make sure we can run config.sub. -$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || - as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 -$as_echo_n "checking build system type... " >&6; } -if ${ac_cv_build+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_build_alias=$build_alias -test "x$ac_build_alias" = x && - ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` -test "x$ac_build_alias" = x && - as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 -ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 -$as_echo "$ac_cv_build" >&6; } -case $ac_cv_build in -*-*-*) ;; -*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; -esac -build=$ac_cv_build -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_build -shift -build_cpu=$1 -build_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -build_os=$* -IFS=$ac_save_IFS -case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 -$as_echo_n "checking host system type... " >&6; } -if ${ac_cv_host+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "x$host_alias" = x; then - ac_cv_host=$ac_cv_build -else - ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 -$as_echo "$ac_cv_host" >&6; } -case $ac_cv_host in -*-*-*) ;; -*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; -esac -host=$ac_cv_host -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_host -shift -host_cpu=$1 -host_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -host_os=$* -IFS=$ac_save_IFS -case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5 -$as_echo_n "checking target system type... " >&6; } -if ${ac_cv_target+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "x$target_alias" = x; then - ac_cv_target=$ac_cv_host -else - ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5 -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5 -$as_echo "$ac_cv_target" >&6; } -case $ac_cv_target in -*-*-*) ;; -*) as_fn_error $? "invalid value of canonical target" "$LINENO" 5;; -esac -target=$ac_cv_target -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_target -shift -target_cpu=$1 -target_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -target_os=$* -IFS=$ac_save_IFS -case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac - - -# The aliases save the names the user supplied, while $host etc. -# will get canonicalized. -test -n "$target_alias" && - test "$program_prefix$program_suffix$program_transform_name" = \ - NONENONEs,x,x, && - program_prefix=${target_alias}- - - -# Find a good install program. We prefer a C program (faster), -# so one script is as good as another. But avoid the broken or -# incompatible versions: -# SysV /etc/install, /usr/sbin/install -# SunOS /usr/etc/install -# IRIX /sbin/install -# AIX /bin/install -# AmigaOS /C/install, which installs bootblocks on floppy discs -# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag -# AFS /usr/afsws/bin/install, which mishandles nonexistent args -# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" -# OS/2's system install, which has a completely different semantic -# ./install, which can be erroneously created by make from ./install.sh. -# Reject install programs that cannot install multiple files. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 -$as_echo_n "checking for a BSD-compatible install... " >&6; } -if test -z "$INSTALL"; then -if ${ac_cv_path_install+:} false; then : - $as_echo_n "(cached) " >&6 -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - # Account for people who put trailing slashes in PATH elements. -case $as_dir/ in #(( - ./ | .// | /[cC]/* | \ - /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ - ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ - /usr/ucb/* ) ;; - *) - # OSF1 and SCO ODT 3.0 have their own names for install. - # Don't use installbsd from OSF since it installs stuff as root - # by default. - for ac_prog in ginstall scoinst install; do - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then - if test $ac_prog = install && - grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # AIX install. It has an incompatible calling convention. - : - elif test $ac_prog = install && - grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # program-specific install script used by HP pwplus--don't use. - : - else - rm -rf conftest.one conftest.two conftest.dir - echo one > conftest.one - echo two > conftest.two - mkdir conftest.dir - if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && - test -s conftest.one && test -s conftest.two && - test -s conftest.dir/conftest.one && - test -s conftest.dir/conftest.two - then - ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" - break 3 - fi - fi - fi - done - done - ;; -esac - - done -IFS=$as_save_IFS - -rm -rf conftest.one conftest.two conftest.dir - -fi - if test "${ac_cv_path_install+set}" = set; then - INSTALL=$ac_cv_path_install - else - # As a last resort, use the slow shell script. Don't cache a - # value for INSTALL within a source directory, because that will - # break other packages using the cache if that directory is - # removed, or if the value is a relative name. - INSTALL=$ac_install_sh - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 -$as_echo "$INSTALL" >&6; } - -# Use test -z because SunOS4 sh mishandles braces in ${var-val}. -# It thinks the first close brace ends the variable substitution. -test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' - -test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' - -test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. -set dummy ${ac_tool_prefix}ar; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AR+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$AR"; then - ac_cv_prog_AR="$AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_AR="${ac_tool_prefix}ar" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -AR=$ac_cv_prog_AR -if test -n "$AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 -$as_echo "$AR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_AR"; then - ac_ct_AR=$AR - # Extract the first word of "ar", so it can be a program name with args. -set dummy ar; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_AR+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_AR"; then - ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_AR="ar" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_AR=$ac_cv_prog_ac_ct_AR -if test -n "$ac_ct_AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 -$as_echo "$ac_ct_AR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_AR" = x; then - AR="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - AR=$ac_ct_AR - fi -else - AR="$ac_cv_prog_AR" -fi - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. -set dummy ${ac_tool_prefix}ranlib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_RANLIB+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$RANLIB"; then - ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -RANLIB=$ac_cv_prog_RANLIB -if test -n "$RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 -$as_echo "$RANLIB" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_RANLIB"; then - ac_ct_RANLIB=$RANLIB - # Extract the first word of "ranlib", so it can be a program name with args. -set dummy ranlib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_RANLIB"; then - ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_RANLIB="ranlib" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB -if test -n "$ac_ct_RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 -$as_echo "$ac_ct_RANLIB" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_RANLIB" = x; then - RANLIB=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - RANLIB=$ac_ct_RANLIB - fi -else - RANLIB="$ac_cv_prog_RANLIB" -fi - - -test "$program_prefix" != NONE && - program_transform_name="s&^&$program_prefix&;$program_transform_name" -# Use a double $ so make ignores it. -test "$program_suffix" != NONE && - program_transform_name="s&\$&$program_suffix&;$program_transform_name" -# Double any \ or $. -# By default was `s,x,x', remove it if useless. -ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' -program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` - - -# We require a C++11 compiler. Check if one is available, and if -# necessary, set CXX_DIALECT to some -std=xxx switch. - - ax_cxx_compile_alternatives="11 0x" ax_cxx_compile_cxx11_required=true - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - CXX_DIALECT="" - ac_success=no - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features by default" >&5 -$as_echo_n "checking whether $CXX supports C++11 features by default... " >&6; } -if ${ax_cv_cxx_compile_cxx11+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - -// If the compiler admits that it is not ready for C++11, why torture it? -// Hopefully, this will speed up the test. - -#ifndef __cplusplus - -#error "This is not a C++ compiler" - -#elif __cplusplus < 201103L - -#error "This is not a C++11 compiler" - -#else - -namespace cxx11 -{ - - namespace test_static_assert - { - - template <typename T> - struct check - { - static_assert(sizeof(int) <= sizeof(T), "not big enough"); - }; - - } - - namespace test_final_override - { - - struct Base - { - virtual void f() {} - }; - - struct Derived : public Base - { - virtual void f() override {} - }; - - } - - namespace test_double_right_angle_brackets - { - - template < typename T > - struct check {}; - - typedef check<void> single_type; - typedef check<check<void>> double_type; - typedef check<check<check<void>>> triple_type; - typedef check<check<check<check<void>>>> quadruple_type; - - } - - namespace test_decltype - { - - int - f() - { - int a = 1; - decltype(a) b = 2; - return a + b; - } - - } - - namespace test_type_deduction - { - - template < typename T1, typename T2 > - struct is_same - { - static const bool value = false; - }; - - template < typename T > - struct is_same<T, T> - { - static const bool value = true; - }; - - template < typename T1, typename T2 > - auto - add(T1 a1, T2 a2) -> decltype(a1 + a2) - { - return a1 + a2; - } - - int - test(const int c, volatile int v) - { - static_assert(is_same<int, decltype(0)>::value == true, ""); - static_assert(is_same<int, decltype(c)>::value == false, ""); - static_assert(is_same<int, decltype(v)>::value == false, ""); - auto ac = c; - auto av = v; - auto sumi = ac + av + 'x'; - auto sumf = ac + av + 1.0; - static_assert(is_same<int, decltype(ac)>::value == true, ""); - static_assert(is_same<int, decltype(av)>::value == true, ""); - static_assert(is_same<int, decltype(sumi)>::value == true, ""); - static_assert(is_same<int, decltype(sumf)>::value == false, ""); - static_assert(is_same<int, decltype(add(c, v))>::value == true, ""); - return (sumf > 0.0) ? sumi : add(c, v); - } - - } - - namespace test_noexcept - { - - int f() { return 0; } - int g() noexcept { return 0; } - - static_assert(noexcept(f()) == false, ""); - static_assert(noexcept(g()) == true, ""); - - } - - namespace test_constexpr - { - - template < typename CharT > - unsigned long constexpr - strlen_c_r(const CharT *const s, const unsigned long acc) noexcept - { - return *s ? strlen_c_r(s + 1, acc + 1) : acc; - } - - template < typename CharT > - unsigned long constexpr - strlen_c(const CharT *const s) noexcept - { - return strlen_c_r(s, 0UL); - } - - static_assert(strlen_c("") == 0UL, ""); - static_assert(strlen_c("1") == 1UL, ""); - static_assert(strlen_c("example") == 7UL, ""); - static_assert(strlen_c("another\0example") == 7UL, ""); - - } - - namespace test_rvalue_references - { - - template < int N > - struct answer - { - static constexpr int value = N; - }; - - answer<1> f(int&) { return answer<1>(); } - answer<2> f(const int&) { return answer<2>(); } - answer<3> f(int&&) { return answer<3>(); } - - void - test() - { - int i = 0; - const int c = 0; - static_assert(decltype(f(i))::value == 1, ""); - static_assert(decltype(f(c))::value == 2, ""); - static_assert(decltype(f(0))::value == 3, ""); - } - - } - - namespace test_uniform_initialization - { - - struct test - { - static const int zero {}; - static const int one {1}; - }; - - static_assert(test::zero == 0, ""); - static_assert(test::one == 1, ""); - - } - - namespace test_lambdas - { - - void - test1() - { - auto lambda1 = [](){}; - auto lambda2 = lambda1; - lambda1(); - lambda2(); - } - - int - test2() - { - auto a = [](int i, int j){ return i + j; }(1, 2); - auto b = []() -> int { return '0'; }(); - auto c = [=](){ return a + b; }(); - auto d = [&](){ return c; }(); - auto e = [a, &b](int x) mutable { - const auto identity = [](int y){ return y; }; - for (auto i = 0; i < a; ++i) - a += b--; - return x + identity(a + b); - }(0); - return a + b + c + d + e; - } - - int - test3() - { - const auto nullary = [](){ return 0; }; - const auto unary = [](int x){ return x; }; - using nullary_t = decltype(nullary); - using unary_t = decltype(unary); - const auto higher1st = [](nullary_t f){ return f(); }; - const auto higher2nd = [unary](nullary_t f1){ - return [unary, f1](unary_t f2){ return f2(unary(f1())); }; - }; - return higher1st(nullary) + higher2nd(nullary)(unary); - } - - } - - namespace test_variadic_templates - { - - template <int...> - struct sum; - - template <int N0, int... N1toN> - struct sum<N0, N1toN...> - { - static constexpr auto value = N0 + sum<N1toN...>::value; - }; - - template <> - struct sum<> - { - static constexpr auto value = 0; - }; - - static_assert(sum<>::value == 0, ""); - static_assert(sum<1>::value == 1, ""); - static_assert(sum<23>::value == 23, ""); - static_assert(sum<1, 2>::value == 3, ""); - static_assert(sum<5, 5, 11>::value == 21, ""); - static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); - - } - - // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae - // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function - // because of this. - namespace test_template_alias_sfinae - { - - struct foo {}; - - template<typename T> - using member = typename T::member_type; - - template<typename T> - void func(...) {} - - template<typename T> - void func(member<T>*) {} - - void test(); - - void test() { func<foo>(0); } - - } - -} // namespace cxx11 - -#endif // __cplusplus >= 201103L - - - -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ax_cv_cxx_compile_cxx11=yes -else - ax_cv_cxx_compile_cxx11=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_cxx_compile_cxx11" >&5 -$as_echo "$ax_cv_cxx_compile_cxx11" >&6; } - if test x$ax_cv_cxx_compile_cxx11 = xyes; then - ac_success=yes - fi - - if test x$ac_success = xno; then - for alternative in ${ax_cxx_compile_alternatives}; do - switch="-std=gnu++${alternative}" - cachevar=`$as_echo "ax_cv_cxx_compile_cxx11_$switch" | $as_tr_sh` - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features with $switch" >&5 -$as_echo_n "checking whether $CXX supports C++11 features with $switch... " >&6; } -if eval \${$cachevar+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_save_CXX="$CXX" - CXX="$CXX $switch" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - -// If the compiler admits that it is not ready for C++11, why torture it? -// Hopefully, this will speed up the test. - -#ifndef __cplusplus - -#error "This is not a C++ compiler" - -#elif __cplusplus < 201103L - -#error "This is not a C++11 compiler" - -#else - -namespace cxx11 -{ - - namespace test_static_assert - { - - template <typename T> - struct check - { - static_assert(sizeof(int) <= sizeof(T), "not big enough"); - }; - - } - - namespace test_final_override - { - - struct Base - { - virtual void f() {} - }; - - struct Derived : public Base - { - virtual void f() override {} - }; - - } - - namespace test_double_right_angle_brackets - { - - template < typename T > - struct check {}; - - typedef check<void> single_type; - typedef check<check<void>> double_type; - typedef check<check<check<void>>> triple_type; - typedef check<check<check<check<void>>>> quadruple_type; - - } - - namespace test_decltype - { - - int - f() - { - int a = 1; - decltype(a) b = 2; - return a + b; - } - - } - - namespace test_type_deduction - { - - template < typename T1, typename T2 > - struct is_same - { - static const bool value = false; - }; - - template < typename T > - struct is_same<T, T> - { - static const bool value = true; - }; - - template < typename T1, typename T2 > - auto - add(T1 a1, T2 a2) -> decltype(a1 + a2) - { - return a1 + a2; - } - - int - test(const int c, volatile int v) - { - static_assert(is_same<int, decltype(0)>::value == true, ""); - static_assert(is_same<int, decltype(c)>::value == false, ""); - static_assert(is_same<int, decltype(v)>::value == false, ""); - auto ac = c; - auto av = v; - auto sumi = ac + av + 'x'; - auto sumf = ac + av + 1.0; - static_assert(is_same<int, decltype(ac)>::value == true, ""); - static_assert(is_same<int, decltype(av)>::value == true, ""); - static_assert(is_same<int, decltype(sumi)>::value == true, ""); - static_assert(is_same<int, decltype(sumf)>::value == false, ""); - static_assert(is_same<int, decltype(add(c, v))>::value == true, ""); - return (sumf > 0.0) ? sumi : add(c, v); - } - - } - - namespace test_noexcept - { - - int f() { return 0; } - int g() noexcept { return 0; } - - static_assert(noexcept(f()) == false, ""); - static_assert(noexcept(g()) == true, ""); - - } - - namespace test_constexpr - { - - template < typename CharT > - unsigned long constexpr - strlen_c_r(const CharT *const s, const unsigned long acc) noexcept - { - return *s ? strlen_c_r(s + 1, acc + 1) : acc; - } - - template < typename CharT > - unsigned long constexpr - strlen_c(const CharT *const s) noexcept - { - return strlen_c_r(s, 0UL); - } - - static_assert(strlen_c("") == 0UL, ""); - static_assert(strlen_c("1") == 1UL, ""); - static_assert(strlen_c("example") == 7UL, ""); - static_assert(strlen_c("another\0example") == 7UL, ""); - - } - - namespace test_rvalue_references - { - - template < int N > - struct answer - { - static constexpr int value = N; - }; - - answer<1> f(int&) { return answer<1>(); } - answer<2> f(const int&) { return answer<2>(); } - answer<3> f(int&&) { return answer<3>(); } - - void - test() - { - int i = 0; - const int c = 0; - static_assert(decltype(f(i))::value == 1, ""); - static_assert(decltype(f(c))::value == 2, ""); - static_assert(decltype(f(0))::value == 3, ""); - } - - } - - namespace test_uniform_initialization - { - - struct test - { - static const int zero {}; - static const int one {1}; - }; - - static_assert(test::zero == 0, ""); - static_assert(test::one == 1, ""); - - } - - namespace test_lambdas - { - - void - test1() - { - auto lambda1 = [](){}; - auto lambda2 = lambda1; - lambda1(); - lambda2(); - } - - int - test2() - { - auto a = [](int i, int j){ return i + j; }(1, 2); - auto b = []() -> int { return '0'; }(); - auto c = [=](){ return a + b; }(); - auto d = [&](){ return c; }(); - auto e = [a, &b](int x) mutable { - const auto identity = [](int y){ return y; }; - for (auto i = 0; i < a; ++i) - a += b--; - return x + identity(a + b); - }(0); - return a + b + c + d + e; - } - - int - test3() - { - const auto nullary = [](){ return 0; }; - const auto unary = [](int x){ return x; }; - using nullary_t = decltype(nullary); - using unary_t = decltype(unary); - const auto higher1st = [](nullary_t f){ return f(); }; - const auto higher2nd = [unary](nullary_t f1){ - return [unary, f1](unary_t f2){ return f2(unary(f1())); }; - }; - return higher1st(nullary) + higher2nd(nullary)(unary); - } - - } - - namespace test_variadic_templates - { - - template <int...> - struct sum; - - template <int N0, int... N1toN> - struct sum<N0, N1toN...> - { - static constexpr auto value = N0 + sum<N1toN...>::value; - }; - - template <> - struct sum<> - { - static constexpr auto value = 0; - }; - - static_assert(sum<>::value == 0, ""); - static_assert(sum<1>::value == 1, ""); - static_assert(sum<23>::value == 23, ""); - static_assert(sum<1, 2>::value == 3, ""); - static_assert(sum<5, 5, 11>::value == 21, ""); - static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); - - } - - // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae - // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function - // because of this. - namespace test_template_alias_sfinae - { - - struct foo {}; - - template<typename T> - using member = typename T::member_type; - - template<typename T> - void func(...) {} - - template<typename T> - void func(member<T>*) {} - - void test(); - - void test() { func<foo>(0); } - - } - -} // namespace cxx11 - -#endif // __cplusplus >= 201103L - - - -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - eval $cachevar=yes -else - eval $cachevar=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CXX="$ac_save_CXX" -fi -eval ac_res=\$$cachevar - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - if eval test x\$$cachevar = xyes; then - CXX_DIALECT="$switch" - ac_success=yes - break - fi - done - fi - - if test x$ac_success = xno; then - for alternative in ${ax_cxx_compile_alternatives}; do - for switch in -std=c++${alternative} +std=c++${alternative} "-h std=c++${alternative}"; do - cachevar=`$as_echo "ax_cv_cxx_compile_cxx11_$switch" | $as_tr_sh` - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features with $switch" >&5 -$as_echo_n "checking whether $CXX supports C++11 features with $switch... " >&6; } -if eval \${$cachevar+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_save_CXX="$CXX" - CXX="$CXX $switch" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - -// If the compiler admits that it is not ready for C++11, why torture it? -// Hopefully, this will speed up the test. - -#ifndef __cplusplus - -#error "This is not a C++ compiler" - -#elif __cplusplus < 201103L - -#error "This is not a C++11 compiler" - -#else - -namespace cxx11 -{ - - namespace test_static_assert - { - - template <typename T> - struct check - { - static_assert(sizeof(int) <= sizeof(T), "not big enough"); - }; - - } - - namespace test_final_override - { - - struct Base - { - virtual void f() {} - }; - - struct Derived : public Base - { - virtual void f() override {} - }; - - } - - namespace test_double_right_angle_brackets - { - - template < typename T > - struct check {}; - - typedef check<void> single_type; - typedef check<check<void>> double_type; - typedef check<check<check<void>>> triple_type; - typedef check<check<check<check<void>>>> quadruple_type; - - } - - namespace test_decltype - { - - int - f() - { - int a = 1; - decltype(a) b = 2; - return a + b; - } - - } - - namespace test_type_deduction - { - - template < typename T1, typename T2 > - struct is_same - { - static const bool value = false; - }; - - template < typename T > - struct is_same<T, T> - { - static const bool value = true; - }; - - template < typename T1, typename T2 > - auto - add(T1 a1, T2 a2) -> decltype(a1 + a2) - { - return a1 + a2; - } - - int - test(const int c, volatile int v) - { - static_assert(is_same<int, decltype(0)>::value == true, ""); - static_assert(is_same<int, decltype(c)>::value == false, ""); - static_assert(is_same<int, decltype(v)>::value == false, ""); - auto ac = c; - auto av = v; - auto sumi = ac + av + 'x'; - auto sumf = ac + av + 1.0; - static_assert(is_same<int, decltype(ac)>::value == true, ""); - static_assert(is_same<int, decltype(av)>::value == true, ""); - static_assert(is_same<int, decltype(sumi)>::value == true, ""); - static_assert(is_same<int, decltype(sumf)>::value == false, ""); - static_assert(is_same<int, decltype(add(c, v))>::value == true, ""); - return (sumf > 0.0) ? sumi : add(c, v); - } - - } - - namespace test_noexcept - { - - int f() { return 0; } - int g() noexcept { return 0; } - - static_assert(noexcept(f()) == false, ""); - static_assert(noexcept(g()) == true, ""); - - } - - namespace test_constexpr - { - - template < typename CharT > - unsigned long constexpr - strlen_c_r(const CharT *const s, const unsigned long acc) noexcept - { - return *s ? strlen_c_r(s + 1, acc + 1) : acc; - } - - template < typename CharT > - unsigned long constexpr - strlen_c(const CharT *const s) noexcept - { - return strlen_c_r(s, 0UL); - } - - static_assert(strlen_c("") == 0UL, ""); - static_assert(strlen_c("1") == 1UL, ""); - static_assert(strlen_c("example") == 7UL, ""); - static_assert(strlen_c("another\0example") == 7UL, ""); - - } - - namespace test_rvalue_references - { - - template < int N > - struct answer - { - static constexpr int value = N; - }; - - answer<1> f(int&) { return answer<1>(); } - answer<2> f(const int&) { return answer<2>(); } - answer<3> f(int&&) { return answer<3>(); } - - void - test() - { - int i = 0; - const int c = 0; - static_assert(decltype(f(i))::value == 1, ""); - static_assert(decltype(f(c))::value == 2, ""); - static_assert(decltype(f(0))::value == 3, ""); - } - - } - - namespace test_uniform_initialization - { - - struct test - { - static const int zero {}; - static const int one {1}; - }; - - static_assert(test::zero == 0, ""); - static_assert(test::one == 1, ""); - - } - - namespace test_lambdas - { - - void - test1() - { - auto lambda1 = [](){}; - auto lambda2 = lambda1; - lambda1(); - lambda2(); - } - - int - test2() - { - auto a = [](int i, int j){ return i + j; }(1, 2); - auto b = []() -> int { return '0'; }(); - auto c = [=](){ return a + b; }(); - auto d = [&](){ return c; }(); - auto e = [a, &b](int x) mutable { - const auto identity = [](int y){ return y; }; - for (auto i = 0; i < a; ++i) - a += b--; - return x + identity(a + b); - }(0); - return a + b + c + d + e; - } - - int - test3() - { - const auto nullary = [](){ return 0; }; - const auto unary = [](int x){ return x; }; - using nullary_t = decltype(nullary); - using unary_t = decltype(unary); - const auto higher1st = [](nullary_t f){ return f(); }; - const auto higher2nd = [unary](nullary_t f1){ - return [unary, f1](unary_t f2){ return f2(unary(f1())); }; - }; - return higher1st(nullary) + higher2nd(nullary)(unary); - } - - } - - namespace test_variadic_templates - { - - template <int...> - struct sum; - - template <int N0, int... N1toN> - struct sum<N0, N1toN...> - { - static constexpr auto value = N0 + sum<N1toN...>::value; - }; - - template <> - struct sum<> - { - static constexpr auto value = 0; - }; - - static_assert(sum<>::value == 0, ""); - static_assert(sum<1>::value == 1, ""); - static_assert(sum<23>::value == 23, ""); - static_assert(sum<1, 2>::value == 3, ""); - static_assert(sum<5, 5, 11>::value == 21, ""); - static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); - - } - - // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae - // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function - // because of this. - namespace test_template_alias_sfinae - { - - struct foo {}; - - template<typename T> - using member = typename T::member_type; - - template<typename T> - void func(...) {} - - template<typename T> - void func(member<T>*) {} - - void test(); - - void test() { func<foo>(0); } - - } - -} // namespace cxx11 - -#endif // __cplusplus >= 201103L - - - -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - eval $cachevar=yes -else - eval $cachevar=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CXX="$ac_save_CXX" -fi -eval ac_res=\$$cachevar - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - if eval test x\$$cachevar = xyes; then - CXX_DIALECT="$switch" - ac_success=yes - break - fi - done - if test x$ac_success = xyes; then - break - fi - done - fi - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - if test x$ax_cxx_compile_cxx11_required = xtrue; then - if test x$ac_success = xno; then - as_fn_error $? "*** A compiler with support for C++11 language features is required." "$LINENO" 5 - fi - fi - if test x$ac_success = xno; then - HAVE_CXX11=0 - { $as_echo "$as_me:${as_lineno-$LINENO}: No compiler with C++11 support was found" >&5 -$as_echo "$as_me: No compiler with C++11 support was found" >&6;} - else - HAVE_CXX11=1 - -$as_echo "#define HAVE_CXX11 1" >>confdefs.h - - fi - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 -$as_echo_n "checking for ANSI C header files... " >&6; } -if ${ac_cv_header_stdc+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <stdlib.h> -#include <stdarg.h> -#include <string.h> -#include <float.h> - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_header_stdc=yes -else - ac_cv_header_stdc=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <string.h> - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <stdlib.h> - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then : - : -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <ctype.h> -#include <stdlib.h> -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif - -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int -main () -{ - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - -else - ac_cv_header_stdc=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 -$as_echo "$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then - -$as_echo "#define STDC_HEADERS 1" >>confdefs.h - -fi - - -# Set the 'development' global. -. $srcdir/../../bfd/development.sh - - -# Check whether we will enable the inclusion of unit tests when -# compiling GDB. -# -# The default value of this option changes depending whether we're on -# development mode (in which case it's "true") or not (in which case -# it's "false"). -# Check whether --enable-unit-tests was given. -if test "${enable_unit_tests+set}" = set; then : - enableval=$enable_unit_tests; case "${enableval}" in - yes) enable_unittests=true ;; - no) enable_unittests=false ;; - *) as_fn_error $? "bad value ${enableval} for --{enable,disable}-unit-tests option" "$LINENO" 5 ;; -esac -else - enable_unittests=$development -fi - - -if $enable_unittests; then - -$as_echo "#define GDB_SELF_TEST 1" >>confdefs.h - - - srv_selftest_objs="gdbsupport/selftest.o" - -fi - - - case ${build_alias} in - "") build_noncanonical=${build} ;; - *) build_noncanonical=${build_alias} ;; -esac - - case ${host_alias} in - "") host_noncanonical=${build_noncanonical} ;; - *) host_noncanonical=${host_alias} ;; -esac - - case ${target_alias} in - "") target_noncanonical=${host_noncanonical} ;; - *) target_noncanonical=${target_alias} ;; -esac - - - - - - -# Dependency checking. -rm -rf .tst 2>/dev/null -mkdir .tst 2>/dev/null -if test -d .tst; then - am__leading_dot=. -else - am__leading_dot=_ -fi -rmdir .tst 2>/dev/null - -DEPDIR="${am__leading_dot}deps" - -ac_config_commands="$ac_config_commands depdir" - - - -# Create sub-directories for objects and dependencies. -CONFIG_SRC_SUBDIR="arch gdbsupport" - - -ac_config_commands="$ac_config_commands gdbdepdir" - - -depcc="$CC" am_compiler_list= - -am_depcomp=$ac_aux_dir/depcomp -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 -$as_echo_n "checking dependency style of $depcc... " >&6; } -if ${am_cv_CC_dependencies_compiler_type+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -f "$am_depcomp"; then - # We make a subdir and do the tests there. Otherwise we can end up - # making bogus files that we don't know about and never remove. For - # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named `D' -- because `-MD' means `put the output - # in D'. - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a - # side effect of compilation, but ICC will put the dependencies in - # the current directory while Tru64 will put them in the object - # directory. - mkdir sub - - am_cv_CC_dependencies_compiler_type=none - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n 's/^\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` - fi - for depmode in $am_compiler_list; do - if test $depmode = none; then break; fi - - $as_echo "$as_me:$LINENO: trying $depmode" >&5 - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and - # we should not choose a depcomp mode which is confused by this. - # - # We need to recreate these files for each test, as the compiler may - # overwrite some of them when testing with obscure command lines. - # This happens at least with the AIX C compiler. - : > sub/conftest.c - for i in 1 2 3 4 5 6; do - echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with - # Solaris 8's {/usr,}/bin/sh. - touch sub/conftst$i.h - done - echo "include sub/conftest.Po" > confmf - - # We check with `-c' and `-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. - depcmd="depmode=$depmode \ - source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c" - echo "| $depcmd" | sed -e 's/ */ /g' >&5 - if env $depcmd > conftest.err 2>&1 && - grep sub/conftst6.h sub/conftest.Po >>conftest.err 2>&1 && - grep sub/conftest.${OBJEXT-o} sub/conftest.Po >>conftest.err 2>&1 && - ${MAKE-make} -s -f confmf >>conftest.err 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message - # that says an option was ignored or not supported. - # When given -MP, icc 7.0 and 7.1 complain thusly: - # icc: Command line warning: ignoring option '-M'; no argument required - # The diagnosis changed in icc 8.0: - # icc: Command line remark: option '-MP' not supported - if (grep 'ignoring option' conftest.err || - grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else - am_cv_CC_dependencies_compiler_type=$depmode - $as_echo "$as_me:$LINENO: success" >&5 - break - fi - fi - $as_echo "$as_me:$LINENO: failure, diagnostics are:" >&5 - sed -e 's/^/| /' < conftest.err >&5 - done - - cd .. - rm -rf conftest.dir -else - am_cv_CC_dependencies_compiler_type=none -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 -$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } -if test x${am_cv_CC_dependencies_compiler_type-none} = xnone -then as_fn_error $? "no usable dependency style found" "$LINENO" 5 -else CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type - -fi - - -gnulib_extra_configure_args= -# If large-file support is disabled, make sure gnulib does the same. -if test "$enable_largefile" = no; then -gnulib_extra_configure_args="$gnulib_extra_configure_args --disable-largefile" -fi - -# Configure gnulib. We can't use AC_CONFIG_SUBDIRS as that'd expect -# to find the the source subdir to be configured directly under -# gdbserver/. We need to build gnulib under some other directory not -# "gnulib", to avoid the problem of both GDB and GDBserver wanting to -# build it in the same directory, when building in the source dir. - - in_src="../../gnulib" - in_build="build-gnulib-gdbserver" - in_extra_args="$gnulib_extra_configure_args" - - # Remove --cache-file, --srcdir, and --disable-option-checking arguments - # so they do not pile up. - ac_sub_configure_args= - ac_prev= - eval "set x $ac_configure_args" - shift - for ac_arg - do - if test -n "$ac_prev"; then - ac_prev= - continue - fi - case $ac_arg in - -cache-file | --cache-file | --cache-fil | --cache-fi \ - | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) - ac_prev=cache_file ;; - -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ - | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* \ - | --c=*) - ;; - --config-cache | -C) - ;; - -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) - ac_prev=srcdir ;; - -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) - ;; - -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) - ac_prev=prefix ;; - -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) - ;; - --disable-option-checking) - ;; - *) - case $ac_arg in - *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - as_fn_append ac_sub_configure_args " '$ac_arg'" ;; - esac - done - - # Always prepend --prefix to ensure using the same prefix - # in subdir configurations. - ac_arg="--prefix=$prefix" - case $ac_arg in - *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - ac_sub_configure_args="'$ac_arg' $ac_sub_configure_args" - - # Pass --silent - if test "$silent" = yes; then - ac_sub_configure_args="--silent $ac_sub_configure_args" - fi - - # Always prepend --disable-option-checking to silence warnings, since - # different subdirs can have different --enable and --with options. - ac_sub_configure_args="--disable-option-checking $ac_sub_configure_args" - - ac_popdir=`pwd` - ac_dir=$in_build - - ac_msg="=== configuring in $ac_dir (`pwd`/$ac_dir)" - $as_echo "$as_me:${as_lineno-$LINENO}: $ac_msg" >&5 - $as_echo "$ac_msg" >&6 - as_dir="$ac_dir"; as_fn_mkdir_p - - case $srcdir in - [\\/]* | ?:[\\/]* ) - ac_srcdir=$srcdir/$in_src ;; - *) # Relative name. - ac_srcdir=../$srcdir/$in_src ;; - esac - - cd "$ac_dir" - - ac_sub_configure=$ac_srcdir/configure - - # Make the cache file name correct relative to the subdirectory. - case $cache_file in - [\\/]* | ?:[\\/]* ) ac_sub_cache_file=$cache_file ;; - *) # Relative name. - ac_sub_cache_file=$ac_top_build_prefix$cache_file ;; - esac - - if test -n "$in_extra_args"; then - # Add the extra args at the end. - ac_sub_configure_args="$ac_sub_configure_args $in_extra_args" - fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&5 -$as_echo "$as_me: running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&6;} - # The eval makes quoting arguments work. - eval "\$SHELL \"\$ac_sub_configure\" $ac_sub_configure_args \ - --cache-file=\"\$ac_sub_cache_file\" --srcdir=\"\$ac_srcdir\"" || - as_fn_error $? "$ac_sub_configure failed for $ac_dir" "$LINENO" 5 - - cd "$ac_popdir" - - - - in_src="../../libiberty" - in_build="build-libiberty-gdbserver" - in_extra_args= - - # Remove --cache-file, --srcdir, and --disable-option-checking arguments - # so they do not pile up. - ac_sub_configure_args= - ac_prev= - eval "set x $ac_configure_args" - shift - for ac_arg - do - if test -n "$ac_prev"; then - ac_prev= - continue - fi - case $ac_arg in - -cache-file | --cache-file | --cache-fil | --cache-fi \ - | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) - ac_prev=cache_file ;; - -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ - | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* \ - | --c=*) - ;; - --config-cache | -C) - ;; - -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) - ac_prev=srcdir ;; - -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) - ;; - -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) - ac_prev=prefix ;; - -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) - ;; - --disable-option-checking) - ;; - *) - case $ac_arg in - *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - as_fn_append ac_sub_configure_args " '$ac_arg'" ;; - esac - done - - # Always prepend --prefix to ensure using the same prefix - # in subdir configurations. - ac_arg="--prefix=$prefix" - case $ac_arg in - *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - ac_sub_configure_args="'$ac_arg' $ac_sub_configure_args" - - # Pass --silent - if test "$silent" = yes; then - ac_sub_configure_args="--silent $ac_sub_configure_args" - fi - - # Always prepend --disable-option-checking to silence warnings, since - # different subdirs can have different --enable and --with options. - ac_sub_configure_args="--disable-option-checking $ac_sub_configure_args" - - ac_popdir=`pwd` - ac_dir=$in_build - - ac_msg="=== configuring in $ac_dir (`pwd`/$ac_dir)" - $as_echo "$as_me:${as_lineno-$LINENO}: $ac_msg" >&5 - $as_echo "$ac_msg" >&6 - as_dir="$ac_dir"; as_fn_mkdir_p - - case $srcdir in - [\\/]* | ?:[\\/]* ) - ac_srcdir=$srcdir/$in_src ;; - *) # Relative name. - ac_srcdir=../$srcdir/$in_src ;; - esac - - cd "$ac_dir" - - ac_sub_configure=$ac_srcdir/configure - - # Make the cache file name correct relative to the subdirectory. - case $cache_file in - [\\/]* | ?:[\\/]* ) ac_sub_cache_file=$cache_file ;; - *) # Relative name. - ac_sub_cache_file=$ac_top_build_prefix$cache_file ;; - esac - - if test -n "$in_extra_args"; then - # Add the extra args at the end. - ac_sub_configure_args="$ac_sub_configure_args $in_extra_args" - fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&5 -$as_echo "$as_me: running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&6;} - # The eval makes quoting arguments work. - eval "\$SHELL \"\$ac_sub_configure\" $ac_sub_configure_args \ - --cache-file=\"\$ac_sub_cache_file\" --srcdir=\"\$ac_srcdir\"" || - as_fn_error $? "$ac_sub_configure failed for $ac_dir" "$LINENO" 5 - - cd "$ac_popdir" - - -for ac_header in termios.h sys/reg.h string.h proc_service.h sys/procfs.h linux/elf.h fcntl.h signal.h sys/file.h sys/ioctl.h netinet/in.h sys/socket.h netdb.h netinet/tcp.h arpa/inet.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - -ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default" -if test "x$ac_cv_type_pid_t" = xyes; then : - -else - -cat >>confdefs.h <<_ACEOF -#define pid_t int -_ACEOF - -fi - -for ac_header in vfork.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "vfork.h" "ac_cv_header_vfork_h" "$ac_includes_default" -if test "x$ac_cv_header_vfork_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_VFORK_H 1 -_ACEOF - -fi - -done - -for ac_func in fork vfork -do : - as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -if eval test \"x\$"$as_ac_var"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF - -fi -done - -if test "x$ac_cv_func_fork" = xyes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working fork" >&5 -$as_echo_n "checking for working fork... " >&6; } -if ${ac_cv_func_fork_works+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - ac_cv_func_fork_works=cross -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ - - /* By Ruediger Kuhlmann. */ - return fork () < 0; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_func_fork_works=yes -else - ac_cv_func_fork_works=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_fork_works" >&5 -$as_echo "$ac_cv_func_fork_works" >&6; } - -else - ac_cv_func_fork_works=$ac_cv_func_fork -fi -if test "x$ac_cv_func_fork_works" = xcross; then - case $host in - *-*-amigaos* | *-*-msdosdjgpp*) - # Override, as these systems have only a dummy fork() stub - ac_cv_func_fork_works=no - ;; - *) - ac_cv_func_fork_works=yes - ;; - esac - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&5 -$as_echo "$as_me: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&2;} -fi -ac_cv_func_vfork_works=$ac_cv_func_vfork -if test "x$ac_cv_func_vfork" = xyes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working vfork" >&5 -$as_echo_n "checking for working vfork... " >&6; } -if ${ac_cv_func_vfork_works+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - ac_cv_func_vfork_works=cross -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -/* Thanks to Paul Eggert for this test. */ -$ac_includes_default -#include <sys/wait.h> -#ifdef HAVE_VFORK_H -# include <vfork.h> -#endif -/* On some sparc systems, changes by the child to local and incoming - argument registers are propagated back to the parent. The compiler - is told about this with #include <vfork.h>, but some compilers - (e.g. gcc -O) don't grok <vfork.h>. Test for this by using a - static variable whose address is put into a register that is - clobbered by the vfork. */ -static void -#ifdef __cplusplus -sparc_address_test (int arg) -# else -sparc_address_test (arg) int arg; -#endif -{ - static pid_t child; - if (!child) { - child = vfork (); - if (child < 0) { - perror ("vfork"); - _exit(2); - } - if (!child) { - arg = getpid(); - write(-1, "", 0); - _exit (arg); - } - } -} - -int -main () -{ - pid_t parent = getpid (); - pid_t child; - - sparc_address_test (0); - - child = vfork (); - - if (child == 0) { - /* Here is another test for sparc vfork register problems. This - test uses lots of local variables, at least as many local - variables as main has allocated so far including compiler - temporaries. 4 locals are enough for gcc 1.40.3 on a Solaris - 4.1.3 sparc, but we use 8 to be safe. A buggy compiler should - reuse the register of parent for one of the local variables, - since it will think that parent can't possibly be used any more - in this routine. Assigning to the local variable will thus - munge parent in the parent process. */ - pid_t - p = getpid(), p1 = getpid(), p2 = getpid(), p3 = getpid(), - p4 = getpid(), p5 = getpid(), p6 = getpid(), p7 = getpid(); - /* Convince the compiler that p..p7 are live; otherwise, it might - use the same hardware register for all 8 local variables. */ - if (p != p1 || p != p2 || p != p3 || p != p4 - || p != p5 || p != p6 || p != p7) - _exit(1); - - /* On some systems (e.g. IRIX 3.3), vfork doesn't separate parent - from child file descriptors. If the child closes a descriptor - before it execs or exits, this munges the parent's descriptor - as well. Test for this by closing stdout in the child. */ - _exit(close(fileno(stdout)) != 0); - } else { - int status; - struct stat st; - - while (wait(&status) != child) - ; - return ( - /* Was there some problem with vforking? */ - child < 0 - - /* Did the child fail? (This shouldn't happen.) */ - || status - - /* Did the vfork/compiler bug occur? */ - || parent != getpid() - - /* Did the file descriptor bug occur? */ - || fstat(fileno(stdout), &st) != 0 - ); - } -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_func_vfork_works=yes -else - ac_cv_func_vfork_works=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_vfork_works" >&5 -$as_echo "$ac_cv_func_vfork_works" >&6; } - -fi; -if test "x$ac_cv_func_fork_works" = xcross; then - ac_cv_func_vfork_works=$ac_cv_func_vfork - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&5 -$as_echo "$as_me: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&2;} -fi - -if test "x$ac_cv_func_vfork_works" = xyes; then - -$as_echo "#define HAVE_WORKING_VFORK 1" >>confdefs.h - -else - -$as_echo "#define vfork fork" >>confdefs.h - -fi -if test "x$ac_cv_func_fork_works" = xyes; then - -$as_echo "#define HAVE_WORKING_FORK 1" >>confdefs.h - -fi - -for ac_func in getauxval pread pwrite pread64 setns -do : - as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -if eval test \"x\$"$as_ac_var"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF - -fi -done - - -ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" -if test "x$ac_cv_type_size_t" = xyes; then : - -else - -cat >>confdefs.h <<_ACEOF -#define size_t unsigned int -_ACEOF - -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 -$as_echo_n "checking for a sed that does not truncate output... " >&6; } -if ${ac_cv_path_SED+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ - for ac_i in 1 2 3 4 5 6 7; do - ac_script="$ac_script$as_nl$ac_script" - done - echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed - { ac_script=; unset ac_script;} - if test -z "$SED"; then - ac_path_SED_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in sed gsed; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_SED" || continue -# Check for GNU ac_path_SED and select it if it is found. - # Check for GNU $ac_path_SED -case `"$ac_path_SED" --version 2>&1` in -*GNU*) - ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo '' >> "conftest.nl" - "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_SED_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_SED="$ac_path_SED" - ac_path_SED_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_SED_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_SED"; then - as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 - fi -else - ac_cv_path_SED=$SED -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 -$as_echo "$ac_cv_path_SED" >&6; } - SED="$ac_cv_path_SED" - rm -f conftest.sed - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 -$as_echo_n "checking for ANSI C header files... " >&6; } -if ${ac_cv_header_stdc+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <stdlib.h> -#include <stdarg.h> -#include <string.h> -#include <float.h> - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_header_stdc=yes -else - ac_cv_header_stdc=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <string.h> - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <stdlib.h> - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then : - : -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <ctype.h> -#include <stdlib.h> -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif - -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int -main () -{ - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - -else - ac_cv_header_stdc=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 -$as_echo "$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then - -$as_echo "#define STDC_HEADERS 1" >>confdefs.h - -fi - - # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works -# for constant arguments. Useless! -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working alloca.h" >&5 -$as_echo_n "checking for working alloca.h... " >&6; } -if ${ac_cv_working_alloca_h+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <alloca.h> -int -main () -{ -char *p = (char *) alloca (2 * sizeof (int)); - if (p) return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_working_alloca_h=yes -else - ac_cv_working_alloca_h=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_working_alloca_h" >&5 -$as_echo "$ac_cv_working_alloca_h" >&6; } -if test $ac_cv_working_alloca_h = yes; then - -$as_echo "#define HAVE_ALLOCA_H 1" >>confdefs.h - -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca" >&5 -$as_echo_n "checking for alloca... " >&6; } -if ${ac_cv_func_alloca_works+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __GNUC__ -# define alloca __builtin_alloca -#else -# ifdef _MSC_VER -# include <malloc.h> -# define alloca _alloca -# else -# ifdef HAVE_ALLOCA_H -# include <alloca.h> -# else -# ifdef _AIX - #pragma alloca -# else -# ifndef alloca /* predefined by HP cc +Olibcalls */ -void *alloca (size_t); -# endif -# endif -# endif -# endif -#endif - -int -main () -{ -char *p = (char *) alloca (1); - if (p) return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_func_alloca_works=yes -else - ac_cv_func_alloca_works=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_alloca_works" >&5 -$as_echo "$ac_cv_func_alloca_works" >&6; } - -if test $ac_cv_func_alloca_works = yes; then - -$as_echo "#define HAVE_ALLOCA 1" >>confdefs.h - -else - # The SVR3 libPW and SVR4 libucb both contain incompatible functions -# that cause trouble. Some versions do not even contain alloca or -# contain a buggy version. If you still want to use their alloca, -# use ar to extract alloca.o from them instead of compiling alloca.c. - -ALLOCA=\${LIBOBJDIR}alloca.$ac_objext - -$as_echo "#define C_ALLOCA 1" >>confdefs.h - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether \`alloca.c' needs Cray hooks" >&5 -$as_echo_n "checking whether \`alloca.c' needs Cray hooks... " >&6; } -if ${ac_cv_os_cray+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#if defined CRAY && ! defined CRAY2 -webecray -#else -wenotbecray -#endif - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "webecray" >/dev/null 2>&1; then : - ac_cv_os_cray=yes -else - ac_cv_os_cray=no -fi -rm -f conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_os_cray" >&5 -$as_echo "$ac_cv_os_cray" >&6; } -if test $ac_cv_os_cray = yes; then - for ac_func in _getb67 GETB67 getb67; do - as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -if eval test \"x\$"$as_ac_var"\" = x"yes"; then : - -cat >>confdefs.h <<_ACEOF -#define CRAY_STACKSEG_END $ac_func -_ACEOF - - break -fi - - done -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking stack direction for C alloca" >&5 -$as_echo_n "checking stack direction for C alloca... " >&6; } -if ${ac_cv_c_stack_direction+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - ac_cv_c_stack_direction=0 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_includes_default -int -find_stack_direction (int *addr, int depth) -{ - int dir, dummy = 0; - if (! addr) - addr = &dummy; - *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1; - dir = depth ? find_stack_direction (addr, depth - 1) : 0; - return dir + dummy; -} - -int -main (int argc, char **argv) -{ - return find_stack_direction (0, argc + !argv + 20) < 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_c_stack_direction=1 -else - ac_cv_c_stack_direction=-1 -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_stack_direction" >&5 -$as_echo "$ac_cv_c_stack_direction" >&6; } -cat >>confdefs.h <<_ACEOF -#define STACK_DIRECTION $ac_cv_c_stack_direction -_ACEOF - - -fi - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nl_langinfo and CODESET" >&5 -$as_echo_n "checking for nl_langinfo and CODESET... " >&6; } -if ${am_cv_langinfo_codeset+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <langinfo.h> -int -main () -{ -char* cs = nl_langinfo(CODESET); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - am_cv_langinfo_codeset=yes -else - am_cv_langinfo_codeset=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_langinfo_codeset" >&5 -$as_echo "$am_cv_langinfo_codeset" >&6; } - if test $am_cv_langinfo_codeset = yes; then - -$as_echo "#define HAVE_LANGINFO_CODESET 1" >>confdefs.h - - fi - - - for ac_header in linux/perf_event.h locale.h memory.h signal.h sys/resource.h sys/socket.h sys/un.h sys/wait.h thread_db.h wait.h termios.h dlfcn.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - - - for ac_func in fdwalk getrlimit pipe pipe2 socketpair sigaction \ - sigprocmask -do : - as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -if eval test \"x\$"$as_ac_var"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF - -fi -done - - - ac_fn_c_check_decl "$LINENO" "strstr" "ac_cv_have_decl_strstr" "$ac_includes_default" -if test "x$ac_cv_have_decl_strstr" = xyes; then : - ac_have_decl=1 -else - ac_have_decl=0 -fi - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_STRSTR $ac_have_decl -_ACEOF - - - # Check for std::thread. This does not work on some platforms, like - # mingw and DJGPP. - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -ax_pthread_ok=no - -# We used to check for pthread.h first, but this fails if pthread.h -# requires special compiler flags (e.g. on Tru64 or Sequent). -# It gets checked for in the link test anyway. - -# First of all, check if the user has set any of the PTHREAD_LIBS, -# etcetera environment variables, and if threads linking works using -# them: -if test "x$PTHREAD_CFLAGS$PTHREAD_LIBS" != "x"; then - ax_pthread_save_CC="$CC" - ax_pthread_save_CFLAGS="$CFLAGS" - ax_pthread_save_LIBS="$LIBS" - if test "x$PTHREAD_CC" != "x"; then : - CC="$PTHREAD_CC" -fi - CFLAGS="$CFLAGS $PTHREAD_CFLAGS" - LIBS="$PTHREAD_LIBS $LIBS" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_join using $CC $PTHREAD_CFLAGS $PTHREAD_LIBS" >&5 -$as_echo_n "checking for pthread_join using $CC $PTHREAD_CFLAGS $PTHREAD_LIBS... " >&6; } - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char pthread_join (); -int -main () -{ -return pthread_join (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ax_pthread_ok=yes -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5 -$as_echo "$ax_pthread_ok" >&6; } - if test "x$ax_pthread_ok" = "xno"; then - PTHREAD_LIBS="" - PTHREAD_CFLAGS="" - fi - CC="$ax_pthread_save_CC" - CFLAGS="$ax_pthread_save_CFLAGS" - LIBS="$ax_pthread_save_LIBS" -fi - -# We must check for the threads library under a number of different -# names; the ordering is very important because some systems -# (e.g. DEC) have both -lpthread and -lpthreads, where one of the -# libraries is broken (non-POSIX). - -# Create a list of thread flags to try. Items starting with a "-" are -# C compiler flags, and other items are library names, except for "none" -# which indicates that we try without any flags at all, and "pthread-config" -# which is a program returning the flags for the Pth emulation library. - -ax_pthread_flags="pthreads none -Kthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config" - -# The ordering *is* (sometimes) important. Some notes on the -# individual items follow: - -# pthreads: AIX (must check this before -lpthread) -# none: in case threads are in libc; should be tried before -Kthread and -# other compiler flags to prevent continual compiler warnings -# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h) -# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads), Tru64 -# (Note: HP C rejects this with "bad form for `-t' option") -# -pthreads: Solaris/gcc (Note: HP C also rejects) -# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it -# doesn't hurt to check since this sometimes defines pthreads and -# -D_REENTRANT too), HP C (must be checked before -lpthread, which -# is present but should not be used directly; and before -mthreads, -# because the compiler interprets this as "-mt" + "-hreads") -# -mthreads: Mingw32/gcc, Lynx/gcc -# pthread: Linux, etcetera -# --thread-safe: KAI C++ -# pthread-config: use pthread-config program (for GNU Pth library) - -case $host_os in - - freebsd*) - - # -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able) - # lthread: LinuxThreads port on FreeBSD (also preferred to -pthread) - - ax_pthread_flags="-kthread lthread $ax_pthread_flags" - ;; - - hpux*) - - # From the cc(1) man page: "[-mt] Sets various -D flags to enable - # multi-threading and also sets -lpthread." - - ax_pthread_flags="-mt -pthread pthread $ax_pthread_flags" - ;; - - openedition*) - - # IBM z/OS requires a feature-test macro to be defined in order to - # enable POSIX threads at all, so give the user a hint if this is - # not set. (We don't define these ourselves, as they can affect - # other portions of the system API in unpredictable ways.) - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -# if !defined(_OPEN_THREADS) && !defined(_UNIX03_THREADS) - AX_PTHREAD_ZOS_MISSING -# endif - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "AX_PTHREAD_ZOS_MISSING" >/dev/null 2>&1; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: IBM z/OS requires -D_OPEN_THREADS or -D_UNIX03_THREADS to enable pthreads support." >&5 -$as_echo "$as_me: WARNING: IBM z/OS requires -D_OPEN_THREADS or -D_UNIX03_THREADS to enable pthreads support." >&2;} -fi -rm -f conftest* - - ;; - - solaris*) - - # On Solaris (at least, for some versions), libc contains stubbed - # (non-functional) versions of the pthreads routines, so link-based - # tests will erroneously succeed. (N.B.: The stubs are missing - # pthread_cleanup_push, or rather a function called by this macro, - # so we could check for that, but who knows whether they'll stub - # that too in a future libc.) So we'll check first for the - # standard Solaris way of linking pthreads (-mt -lpthread). - - ax_pthread_flags="-mt,pthread pthread $ax_pthread_flags" - ;; -esac - -# GCC generally uses -pthread, or -pthreads on some platforms (e.g. SPARC) - -if test "x$GCC" = "xyes"; then : - ax_pthread_flags="-pthread -pthreads $ax_pthread_flags" -fi - -# The presence of a feature test macro requesting re-entrant function -# definitions is, on some systems, a strong hint that pthreads support is -# correctly enabled - -case $host_os in - darwin* | hpux* | linux* | osf* | solaris*) - ax_pthread_check_macro="_REENTRANT" - ;; - - aix*) - ax_pthread_check_macro="_THREAD_SAFE" - ;; - - *) - ax_pthread_check_macro="--" - ;; -esac -if test "x$ax_pthread_check_macro" = "x--"; then : - ax_pthread_check_cond=0 -else - ax_pthread_check_cond="!defined($ax_pthread_check_macro)" -fi - -# Are we compiling with Clang? - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC is Clang" >&5 -$as_echo_n "checking whether $CC is Clang... " >&6; } -if ${ax_cv_PTHREAD_CLANG+:} false; then : - $as_echo_n "(cached) " >&6 -else - ax_cv_PTHREAD_CLANG=no - # Note that Autoconf sets GCC=yes for Clang as well as GCC - if test "x$GCC" = "xyes"; then - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -/* Note: Clang 2.7 lacks __clang_[a-z]+__ */ -# if defined(__clang__) && defined(__llvm__) - AX_PTHREAD_CC_IS_CLANG -# endif - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "AX_PTHREAD_CC_IS_CLANG" >/dev/null 2>&1; then : - ax_cv_PTHREAD_CLANG=yes -fi -rm -f conftest* - - fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_CLANG" >&5 -$as_echo "$ax_cv_PTHREAD_CLANG" >&6; } -ax_pthread_clang="$ax_cv_PTHREAD_CLANG" - -ax_pthread_clang_warning=no - -# Clang needs special handling, because older versions handle the -pthread -# option in a rather... idiosyncratic way - -if test "x$ax_pthread_clang" = "xyes"; then - - # Clang takes -pthread; it has never supported any other flag - - # (Note 1: This will need to be revisited if a system that Clang - # supports has POSIX threads in a separate library. This tends not - # to be the way of modern systems, but it's conceivable.) - - # (Note 2: On some systems, notably Darwin, -pthread is not needed - # to get POSIX threads support; the API is always present and - # active. We could reasonably leave PTHREAD_CFLAGS empty. But - # -pthread does define _REENTRANT, and while the Darwin headers - # ignore this macro, third-party headers might not.) - - PTHREAD_CFLAGS="-pthread" - PTHREAD_LIBS= - - ax_pthread_ok=yes - - # However, older versions of Clang make a point of warning the user - # that, in an invocation where only linking and no compilation is - # taking place, the -pthread option has no effect ("argument unused - # during compilation"). They expect -pthread to be passed in only - # when source code is being compiled. - # - # Problem is, this is at odds with the way Automake and most other - # C build frameworks function, which is that the same flags used in - # compilation (CFLAGS) are also used in linking. Many systems - # supported by AX_PTHREAD require exactly this for POSIX threads - # support, and in fact it is often not straightforward to specify a - # flag that is used only in the compilation phase and not in - # linking. Such a scenario is extremely rare in practice. - # - # Even though use of the -pthread flag in linking would only print - # a warning, this can be a nuisance for well-run software projects - # that build with -Werror. So if the active version of Clang has - # this misfeature, we search for an option to squash it. - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether Clang needs flag to prevent \"argument unused\" warning when linking with -pthread" >&5 -$as_echo_n "checking whether Clang needs flag to prevent \"argument unused\" warning when linking with -pthread... " >&6; } -if ${ax_cv_PTHREAD_CLANG_NO_WARN_FLAG+:} false; then : - $as_echo_n "(cached) " >&6 -else - ax_cv_PTHREAD_CLANG_NO_WARN_FLAG=unknown - # Create an alternate version of $ac_link that compiles and - # links in two steps (.c -> .o, .o -> exe) instead of one - # (.c -> exe), because the warning occurs only in the second - # step - ax_pthread_save_ac_link="$ac_link" - ax_pthread_sed='s/conftest\.\$ac_ext/conftest.$ac_objext/g' - ax_pthread_link_step=`$as_echo "$ac_link" | sed "$ax_pthread_sed"` - ax_pthread_2step_ac_link="($ac_compile) && (echo ==== >&5) && ($ax_pthread_link_step)" - ax_pthread_save_CFLAGS="$CFLAGS" - for ax_pthread_try in '' -Qunused-arguments -Wno-unused-command-line-argument unknown; do - if test "x$ax_pthread_try" = "xunknown"; then : - break -fi - CFLAGS="-Werror -Wunknown-warning-option $ax_pthread_try -pthread $ax_pthread_save_CFLAGS" - ac_link="$ax_pthread_save_ac_link" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int main(void){return 0;} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_link="$ax_pthread_2step_ac_link" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int main(void){return 0;} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - break -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - done - ac_link="$ax_pthread_save_ac_link" - CFLAGS="$ax_pthread_save_CFLAGS" - if test "x$ax_pthread_try" = "x"; then : - ax_pthread_try=no -fi - ax_cv_PTHREAD_CLANG_NO_WARN_FLAG="$ax_pthread_try" - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" >&5 -$as_echo "$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" >&6; } - - case "$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" in - no | unknown) ;; - *) PTHREAD_CFLAGS="$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG $PTHREAD_CFLAGS" ;; - esac - -fi # $ax_pthread_clang = yes - -if test "x$ax_pthread_ok" = "xno"; then -for ax_pthread_try_flag in $ax_pthread_flags; do - - case $ax_pthread_try_flag in - none) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work without any flags" >&5 -$as_echo_n "checking whether pthreads work without any flags... " >&6; } - ;; - - -mt,pthread) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with -mt -lpthread" >&5 -$as_echo_n "checking whether pthreads work with -mt -lpthread... " >&6; } - PTHREAD_CFLAGS="-mt" - PTHREAD_LIBS="-lpthread" - ;; - - -*) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with $ax_pthread_try_flag" >&5 -$as_echo_n "checking whether pthreads work with $ax_pthread_try_flag... " >&6; } - PTHREAD_CFLAGS="$ax_pthread_try_flag" - ;; - - pthread-config) - # Extract the first word of "pthread-config", so it can be a program name with args. -set dummy pthread-config; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ax_pthread_config+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ax_pthread_config"; then - ac_cv_prog_ax_pthread_config="$ax_pthread_config" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ax_pthread_config="yes" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - test -z "$ac_cv_prog_ax_pthread_config" && ac_cv_prog_ax_pthread_config="no" -fi -fi -ax_pthread_config=$ac_cv_prog_ax_pthread_config -if test -n "$ax_pthread_config"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_config" >&5 -$as_echo "$ax_pthread_config" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - if test "x$ax_pthread_config" = "xno"; then : - continue -fi - PTHREAD_CFLAGS="`pthread-config --cflags`" - PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" - ;; - - *) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the pthreads library -l$ax_pthread_try_flag" >&5 -$as_echo_n "checking for the pthreads library -l$ax_pthread_try_flag... " >&6; } - PTHREAD_LIBS="-l$ax_pthread_try_flag" - ;; - esac - - ax_pthread_save_CFLAGS="$CFLAGS" - ax_pthread_save_LIBS="$LIBS" - CFLAGS="$CFLAGS $PTHREAD_CFLAGS" - LIBS="$PTHREAD_LIBS $LIBS" - - # Check for various functions. We must include pthread.h, - # since some functions may be macros. (On the Sequent, we - # need a special flag -Kthread to make this header compile.) - # We check for pthread_join because it is in -lpthread on IRIX - # while pthread_create is in libc. We check for pthread_attr_init - # due to DEC craziness with -lpthreads. We check for - # pthread_cleanup_push because it is one of the few pthread - # functions on Solaris that doesn't have a non-functional libc stub. - # We try pthread_create on general principles. - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <pthread.h> -# if $ax_pthread_check_cond -# error "$ax_pthread_check_macro must be defined" -# endif - static void routine(void *a) { a = 0; } - static void *start_routine(void *a) { return a; } -int -main () -{ -pthread_t th; pthread_attr_t attr; - pthread_create(&th, 0, start_routine, 0); - pthread_join(th, 0); - pthread_attr_init(&attr); - pthread_cleanup_push(routine, 0); - pthread_cleanup_pop(0) /* ; */ - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ax_pthread_ok=yes -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - - CFLAGS="$ax_pthread_save_CFLAGS" - LIBS="$ax_pthread_save_LIBS" - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5 -$as_echo "$ax_pthread_ok" >&6; } - if test "x$ax_pthread_ok" = "xyes"; then : - break -fi - - PTHREAD_LIBS="" - PTHREAD_CFLAGS="" -done -fi - -# Various other checks: -if test "x$ax_pthread_ok" = "xyes"; then - ax_pthread_save_CFLAGS="$CFLAGS" - ax_pthread_save_LIBS="$LIBS" - CFLAGS="$CFLAGS $PTHREAD_CFLAGS" - LIBS="$PTHREAD_LIBS $LIBS" - - # Detect AIX lossage: JOINABLE attribute is called UNDETACHED. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for joinable pthread attribute" >&5 -$as_echo_n "checking for joinable pthread attribute... " >&6; } -if ${ax_cv_PTHREAD_JOINABLE_ATTR+:} false; then : - $as_echo_n "(cached) " >&6 -else - ax_cv_PTHREAD_JOINABLE_ATTR=unknown - for ax_pthread_attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <pthread.h> -int -main () -{ -int attr = $ax_pthread_attr; return attr /* ; */ - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ax_cv_PTHREAD_JOINABLE_ATTR=$ax_pthread_attr; break -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - done - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_JOINABLE_ATTR" >&5 -$as_echo "$ax_cv_PTHREAD_JOINABLE_ATTR" >&6; } - if test "x$ax_cv_PTHREAD_JOINABLE_ATTR" != "xunknown" && \ - test "x$ax_cv_PTHREAD_JOINABLE_ATTR" != "xPTHREAD_CREATE_JOINABLE" && \ - test "x$ax_pthread_joinable_attr_defined" != "xyes"; then : - -cat >>confdefs.h <<_ACEOF -#define PTHREAD_CREATE_JOINABLE $ax_cv_PTHREAD_JOINABLE_ATTR -_ACEOF - - ax_pthread_joinable_attr_defined=yes - -fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether more special flags are required for pthreads" >&5 -$as_echo_n "checking whether more special flags are required for pthreads... " >&6; } -if ${ax_cv_PTHREAD_SPECIAL_FLAGS+:} false; then : - $as_echo_n "(cached) " >&6 -else - ax_cv_PTHREAD_SPECIAL_FLAGS=no - case $host_os in - solaris*) - ax_cv_PTHREAD_SPECIAL_FLAGS="-D_POSIX_PTHREAD_SEMANTICS" - ;; - esac - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_SPECIAL_FLAGS" >&5 -$as_echo "$ax_cv_PTHREAD_SPECIAL_FLAGS" >&6; } - if test "x$ax_cv_PTHREAD_SPECIAL_FLAGS" != "xno" && \ - test "x$ax_pthread_special_flags_added" != "xyes"; then : - PTHREAD_CFLAGS="$ax_cv_PTHREAD_SPECIAL_FLAGS $PTHREAD_CFLAGS" - ax_pthread_special_flags_added=yes -fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PTHREAD_PRIO_INHERIT" >&5 -$as_echo_n "checking for PTHREAD_PRIO_INHERIT... " >&6; } -if ${ax_cv_PTHREAD_PRIO_INHERIT+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <pthread.h> -int -main () -{ -int i = PTHREAD_PRIO_INHERIT; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ax_cv_PTHREAD_PRIO_INHERIT=yes -else - ax_cv_PTHREAD_PRIO_INHERIT=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_PRIO_INHERIT" >&5 -$as_echo "$ax_cv_PTHREAD_PRIO_INHERIT" >&6; } - if test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes" && \ - test "x$ax_pthread_prio_inherit_defined" != "xyes"; then : - -$as_echo "#define HAVE_PTHREAD_PRIO_INHERIT 1" >>confdefs.h - - ax_pthread_prio_inherit_defined=yes - -fi - - CFLAGS="$ax_pthread_save_CFLAGS" - LIBS="$ax_pthread_save_LIBS" - - # More AIX lossage: compile with *_r variant - if test "x$GCC" != "xyes"; then - case $host_os in - aix*) - case "x/$CC" in #( - x*/c89|x*/c89_128|x*/c99|x*/c99_128|x*/cc|x*/cc128|x*/xlc|x*/xlc_v6|x*/xlc128|x*/xlc128_v6) : - #handle absolute path differently from PATH based program lookup - case "x$CC" in #( - x/*) : - if as_fn_executable_p ${CC}_r; then : - PTHREAD_CC="${CC}_r" -fi ;; #( - *) : - for ac_prog in ${CC}_r -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_PTHREAD_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$PTHREAD_CC"; then - ac_cv_prog_PTHREAD_CC="$PTHREAD_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_PTHREAD_CC="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -PTHREAD_CC=$ac_cv_prog_PTHREAD_CC -if test -n "$PTHREAD_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PTHREAD_CC" >&5 -$as_echo "$PTHREAD_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$PTHREAD_CC" && break -done -test -n "$PTHREAD_CC" || PTHREAD_CC="$CC" - ;; -esac ;; #( - *) : - ;; -esac - ;; - esac - fi -fi - -test -n "$PTHREAD_CC" || PTHREAD_CC="$CC" - - - - - -# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: -if test "x$ax_pthread_ok" = "xyes"; then - threads=yes - : -else - ax_pthread_ok=no - threads=no -fi -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - if test "$threads" = "yes"; then - save_LIBS="$LIBS" - LIBS="$PTHREAD_LIBS $LIBS" - save_CXXFLAGS="$CXXFLAGS" - CXXFLAGS="$PTHREAD_CFLAGS $save_CXXFLAGS" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for std::thread" >&5 -$as_echo_n "checking for std::thread... " >&6; } -if ${gdb_cv_cxx_std_thread+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <thread> - void callback() { } -int -main () -{ -std::thread t(callback); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - gdb_cv_cxx_std_thread=yes -else - gdb_cv_cxx_std_thread=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_cxx_std_thread" >&5 -$as_echo "$gdb_cv_cxx_std_thread" >&6; } - - # This check must be here, while LIBS includes any necessary - # threading library. - for ac_func in pthread_sigmask pthread_setname_np -do : - as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -ac_fn_cxx_check_func "$LINENO" "$ac_func" "$as_ac_var" -if eval test \"x\$"$as_ac_var"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF - -fi -done - - - LIBS="$save_LIBS" - CXXFLAGS="$save_CXXFLAGS" - fi - if test "$gdb_cv_cxx_std_thread" = "yes"; then - -$as_echo "#define CXX_STD_THREAD 1" >>confdefs.h - - fi - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sigsetjmp" >&5 -$as_echo_n "checking for sigsetjmp... " >&6; } -if ${gdb_cv_func_sigsetjmp+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#include <setjmp.h> - -int -main () -{ -sigjmp_buf env; while (! sigsetjmp (env, 1)) siglongjmp (env, 1); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - gdb_cv_func_sigsetjmp=yes -else - gdb_cv_func_sigsetjmp=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_func_sigsetjmp" >&5 -$as_echo "$gdb_cv_func_sigsetjmp" >&6; } -if test "$gdb_cv_func_sigsetjmp" = "yes"; then - -$as_echo "#define HAVE_SIGSETJMP 1" >>confdefs.h - -fi - - -# Check the return and argument types of ptrace. - - -for ac_header in sys/ptrace.h ptrace.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - - -gdb_ptrace_headers=' -#include <sys/types.h> -#if HAVE_SYS_PTRACE_H -# include <sys/ptrace.h> -#endif -#if HAVE_UNISTD_H -# include <unistd.h> -#endif -' -# There is no point in checking if we don't have a prototype. -ac_fn_c_check_decl "$LINENO" "ptrace" "ac_cv_have_decl_ptrace" "$gdb_ptrace_headers -" -if test "x$ac_cv_have_decl_ptrace" = xyes; then : - ac_have_decl=1 -else - ac_have_decl=0 -fi - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_PTRACE $ac_have_decl -_ACEOF -if test $ac_have_decl = 1; then : - -else - - : ${gdb_cv_func_ptrace_ret='int'} - : ${gdb_cv_func_ptrace_args='int,int,long,long'} - -fi - -# Check return type. Varargs (used on GNU/Linux) conflict with the -# empty argument list, so check for that explicitly. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking return type of ptrace" >&5 -$as_echo_n "checking return type of ptrace... " >&6; } -if ${gdb_cv_func_ptrace_ret+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$gdb_ptrace_headers -int -main () -{ -extern long ptrace (enum __ptrace_request, ...); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - gdb_cv_func_ptrace_ret='long' -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$gdb_ptrace_headers -int -main () -{ -extern int ptrace (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - gdb_cv_func_ptrace_ret='int' -else - gdb_cv_func_ptrace_ret='long' -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_func_ptrace_ret" >&5 -$as_echo "$gdb_cv_func_ptrace_ret" >&6; } - -cat >>confdefs.h <<_ACEOF -#define PTRACE_TYPE_RET $gdb_cv_func_ptrace_ret -_ACEOF - -# Check argument types. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking types of arguments for ptrace" >&5 -$as_echo_n "checking types of arguments for ptrace... " >&6; } -if ${gdb_cv_func_ptrace_args+:} false; then : - $as_echo_n "(cached) " >&6 -else - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$gdb_ptrace_headers -int -main () -{ -extern long ptrace (enum __ptrace_request, ...); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - gdb_cv_func_ptrace_args='enum __ptrace_request,int,long,long' -else - -for gdb_arg1 in 'int' 'long'; do - for gdb_arg2 in 'pid_t' 'int' 'long'; do - for gdb_arg3 in 'int *' 'caddr_t' 'int' 'long' 'void *'; do - for gdb_arg4 in 'int' 'long' 'void *'; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$gdb_ptrace_headers -int -main () -{ - -extern $gdb_cv_func_ptrace_ret - ptrace ($gdb_arg1, $gdb_arg2, $gdb_arg3, $gdb_arg4); - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - gdb_cv_func_ptrace_args="$gdb_arg1,$gdb_arg2,$gdb_arg3,$gdb_arg4"; - break 4; -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - for gdb_arg5 in 'int *' 'int' 'long'; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$gdb_ptrace_headers -int -main () -{ - -extern $gdb_cv_func_ptrace_ret - ptrace ($gdb_arg1, $gdb_arg2, $gdb_arg3, $gdb_arg4, $gdb_arg5); - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - -gdb_cv_func_ptrace_args="$gdb_arg1,$gdb_arg2,$gdb_arg3,$gdb_arg4,$gdb_arg5"; - break 5; -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done - done - done - done -done -# Provide a safe default value. -: ${gdb_cv_func_ptrace_args='int,int,long,long'} - -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_func_ptrace_args" >&5 -$as_echo "$gdb_cv_func_ptrace_args" >&6; } -ac_save_IFS=$IFS; IFS=',' -set dummy `echo "$gdb_cv_func_ptrace_args" | sed 's/\*/\*/g'` -IFS=$ac_save_IFS -shift - -cat >>confdefs.h <<_ACEOF -#define PTRACE_TYPE_ARG1 $1 -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define PTRACE_TYPE_ARG3 $3 -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define PTRACE_TYPE_ARG4 $4 -_ACEOF - -if test -n "$5"; then - -cat >>confdefs.h <<_ACEOF -#define PTRACE_TYPE_ARG5 $5 -_ACEOF - -fi - - -# Check for UST -ustlibs="" -ustinc="" - - -# Check whether --with-ust was given. -if test "${with_ust+set}" = set; then : - withval=$with_ust; -fi - - -# Check whether --with-ust_include was given. -if test "${with_ust_include+set}" = set; then : - withval=$with_ust_include; -fi - - -# Check whether --with-ust_lib was given. -if test "${with_ust_lib+set}" = set; then : - withval=$with_ust_lib; -fi - - -case $with_ust in - no) - ustlibs= - ustinc= - ;; - "" | yes) - ustlibs=" -lust " - ustinc="" - ;; - *) - ustlibs="-L$with_ust/lib -lust" - ustinc="-I$with_ust/include " - ;; -esac -if test "x$with_ust_include" != x; then - ustinc="-I$with_ust_include " -fi -if test "x$with_ust_lib" != x; then - ustlibs="-L$with_ust_lib -lust" -fi - -if test "x$with_ust" != "xno"; then - saved_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS $ustinc" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ust" >&5 -$as_echo_n "checking for ust... " >&6; } - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#define CONFIG_UST_GDB_INTEGRATION -#include <ust/ust.h> - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; }; -$as_echo "#define HAVE_UST 1" >>confdefs.h - -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; }; ustlibs= ; ustinc= -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS="$saved_CFLAGS" -fi - -# Flags needed for UST - - - - -# Check whether --enable-werror was given. -if test "${enable_werror+set}" = set; then : - enableval=$enable_werror; case "${enableval}" in - yes | y) ERROR_ON_WARNING="yes" ;; - no | n) ERROR_ON_WARNING="no" ;; - *) as_fn_error $? "bad value ${enableval} for --enable-werror" "$LINENO" 5 ;; - esac -fi - - -# Enable -Werror by default when using gcc. Turn it off for releases. -if test "${GCC}" = yes -a -z "${ERROR_ON_WARNING}" && $development; then - ERROR_ON_WARNING=yes -fi - -WERROR_CFLAGS="" -if test "${ERROR_ON_WARNING}" = yes ; then - WERROR_CFLAGS="-Werror" -fi - -# The options we'll try to enable. -build_warnings="-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 \ --Wno-error=deprecated-register \ --Wsuggest-override \ --Wimplicit-fallthrough=3 \ --Wduplicated-cond \ --Wshadow=local \ --Wdeprecated-copy \ --Wdeprecated-copy-dtor \ --Wredundant-move" - -case "${host}" in - *-*-mingw32*) - # Enable -Wno-format by default when using gcc on mingw since many - # GCC versions complain about %I64. - build_warnings="$build_warnings -Wno-format" ;; - *-*-solaris*) - # Solaris 11.4 <python2.7/ceval.h> uses #pragma no_inline that GCC - # doesn't understand. - build_warnings="$build_warnings -Wno-unknown-pragmas" - # Solaris 11 <unistd.h> marks vfork deprecated. - build_warnings="$build_warnings -Wno-deprecated-declarations" ;; - *) - # Note that gcc requires -Wformat for -Wformat-nonliteral to work, - # but there's a special case for this below. - build_warnings="$build_warnings -Wformat-nonliteral" ;; -esac - -# Check whether --enable-build-warnings was given. -if test "${enable_build_warnings+set}" = set; then : - enableval=$enable_build_warnings; case "${enableval}" in - yes) ;; - no) build_warnings="-w";; - ,*) t=`echo "${enableval}" | sed -e "s/,/ /g"` - build_warnings="${build_warnings} ${t}";; - *,) t=`echo "${enableval}" | sed -e "s/,/ /g"` - build_warnings="${t} ${build_warnings}";; - *) build_warnings=`echo "${enableval}" | sed -e "s/,/ /g"`;; -esac -if test x"$silent" != x"yes" && test x"$build_warnings" != x""; then - echo "Setting compiler warning flags = $build_warnings" 6>&1 -fi -fi -# Check whether --enable-gdb-build-warnings was given. -if test "${enable_gdb_build_warnings+set}" = set; then : - enableval=$enable_gdb_build_warnings; case "${enableval}" in - yes) ;; - no) build_warnings="-w";; - ,*) t=`echo "${enableval}" | sed -e "s/,/ /g"` - build_warnings="${build_warnings} ${t}";; - *,) t=`echo "${enableval}" | sed -e "s/,/ /g"` - build_warnings="${t} ${build_warnings}";; - *) build_warnings=`echo "${enableval}" | sed -e "s/,/ /g"`;; -esac -if test x"$silent" != x"yes" && test x"$build_warnings" != x""; then - echo "Setting GDB specific compiler warning flags = $build_warnings" 6>&1 -fi -fi - -# The set of warnings supported by a C++ compiler is not the same as -# of the C compiler. -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - -WARN_CFLAGS="" -if test "x${build_warnings}" != x -a "x$GCC" = xyes -then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking compiler warning flags" >&5 -$as_echo_n "checking compiler warning flags... " >&6; } - # Separate out the -Werror flag as some files just cannot be - # compiled with it enabled. - for w in ${build_warnings}; do - # GCC does not complain about -Wno-unknown-warning. Invert - # and test -Wunknown-warning instead. - case $w in - -Wno-*) - wtest=`echo $w | sed 's/-Wno-/-W/g'` ;; - -Wformat-nonliteral) - # gcc requires -Wformat before -Wformat-nonliteral - # will work, so stick them together. - w="-Wformat $w" - wtest="$w" - ;; - *) - wtest=$w ;; - esac - - case $w in - -Werr*) WERROR_CFLAGS=-Werror ;; - *) - # Check whether GCC accepts it. - saved_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -Werror $wtest" - saved_CXXFLAGS="$CXXFLAGS" - CXXFLAGS="$CXXFLAGS -Werror $wtest" - if test "x$w" = "x-Wunused-variable"; then - # Check for https://gcc.gnu.org/bugzilla/show_bug.cgi?id=38958, - # fixed in GCC 4.9. This test is derived from the gdb - # source code that triggered this bug in GCC. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -struct scoped_restore_base {}; - struct scoped_restore_tmpl : public scoped_restore_base { - ~scoped_restore_tmpl() {} - }; -int -main () -{ -const scoped_restore_base &b = scoped_restore_tmpl(); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - WARN_CFLAGS="${WARN_CFLAGS} $w" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - WARN_CFLAGS="${WARN_CFLAGS} $w" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi - CFLAGS="$saved_CFLAGS" - CXXFLAGS="$saved_CXXFLAGS" - esac - done - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${WARN_CFLAGS} ${WERROR_CFLAGS}" >&5 -$as_echo "${WARN_CFLAGS} ${WERROR_CFLAGS}" >&6; } -fi - - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - -old_LIBS="$LIBS" -LIBS="$LIBS -ldl" -for ac_func in dladdr -do : - ac_fn_c_check_func "$LINENO" "dladdr" "ac_cv_func_dladdr" -if test "x$ac_cv_func_dladdr" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_DLADDR 1 -_ACEOF - -fi -done - -LIBS="$old_LIBS" - - - # Check for presence and size of long long. - ac_fn_c_check_type "$LINENO" "long long" "ac_cv_type_long_long" "$ac_includes_default" -if test "x$ac_cv_type_long_long" = xyes; then : - -cat >>confdefs.h <<_ACEOF -#define HAVE_LONG_LONG 1 -_ACEOF - -# The cast to long int works around a bug in the HP C Compiler -# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. -# This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long long" >&5 -$as_echo_n "checking size of long long... " >&6; } -if ${ac_cv_sizeof_long_long+:} false; then : - $as_echo_n "(cached) " >&6 -else - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long long))" "ac_cv_sizeof_long_long" "$ac_includes_default"; then : - -else - if test "$ac_cv_type_long_long" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error 77 "cannot compute sizeof (long long) -See \`config.log' for more details" "$LINENO" 5; } - else - ac_cv_sizeof_long_long=0 - fi -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_long" >&5 -$as_echo "$ac_cv_sizeof_long_long" >&6; } - - - -cat >>confdefs.h <<_ACEOF -#define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long -_ACEOF - - -fi - - - as_ac_Symbol=`$as_echo "ac_cv_have_decl_basename(char *)" | $as_tr_sh` -ac_fn_c_check_decl "$LINENO" "basename(char *)" "$as_ac_Symbol" "$ac_includes_default" -if eval test \"x\$"$as_ac_Symbol"\" = x"yes"; then : - ac_have_decl=1 -else - ac_have_decl=0 -fi - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_BASENAME $ac_have_decl -_ACEOF -ac_fn_c_check_decl "$LINENO" "ffs" "ac_cv_have_decl_ffs" "$ac_includes_default" -if test "x$ac_cv_have_decl_ffs" = xyes; then : - ac_have_decl=1 -else - ac_have_decl=0 -fi - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_FFS $ac_have_decl -_ACEOF -ac_fn_c_check_decl "$LINENO" "asprintf" "ac_cv_have_decl_asprintf" "$ac_includes_default" -if test "x$ac_cv_have_decl_asprintf" = xyes; then : - ac_have_decl=1 -else - ac_have_decl=0 -fi - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_ASPRINTF $ac_have_decl -_ACEOF -ac_fn_c_check_decl "$LINENO" "vasprintf" "ac_cv_have_decl_vasprintf" "$ac_includes_default" -if test "x$ac_cv_have_decl_vasprintf" = xyes; then : - ac_have_decl=1 -else - ac_have_decl=0 -fi - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_VASPRINTF $ac_have_decl -_ACEOF -ac_fn_c_check_decl "$LINENO" "snprintf" "ac_cv_have_decl_snprintf" "$ac_includes_default" -if test "x$ac_cv_have_decl_snprintf" = xyes; then : - ac_have_decl=1 -else - ac_have_decl=0 -fi - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_SNPRINTF $ac_have_decl -_ACEOF -ac_fn_c_check_decl "$LINENO" "vsnprintf" "ac_cv_have_decl_vsnprintf" "$ac_includes_default" -if test "x$ac_cv_have_decl_vsnprintf" = xyes; then : - ac_have_decl=1 -else - ac_have_decl=0 -fi - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_VSNPRINTF $ac_have_decl -_ACEOF - - ac_fn_c_check_decl "$LINENO" "strtol" "ac_cv_have_decl_strtol" "$ac_includes_default" -if test "x$ac_cv_have_decl_strtol" = xyes; then : - ac_have_decl=1 -else - ac_have_decl=0 -fi - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_STRTOL $ac_have_decl -_ACEOF -ac_fn_c_check_decl "$LINENO" "strtoul" "ac_cv_have_decl_strtoul" "$ac_includes_default" -if test "x$ac_cv_have_decl_strtoul" = xyes; then : - ac_have_decl=1 -else - ac_have_decl=0 -fi - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_STRTOUL $ac_have_decl -_ACEOF -ac_fn_c_check_decl "$LINENO" "strtoll" "ac_cv_have_decl_strtoll" "$ac_includes_default" -if test "x$ac_cv_have_decl_strtoll" = xyes; then : - ac_have_decl=1 -else - ac_have_decl=0 -fi - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_STRTOLL $ac_have_decl -_ACEOF -ac_fn_c_check_decl "$LINENO" "strtoull" "ac_cv_have_decl_strtoull" "$ac_includes_default" -if test "x$ac_cv_have_decl_strtoull" = xyes; then : - ac_have_decl=1 -else - ac_have_decl=0 -fi - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_STRTOULL $ac_have_decl -_ACEOF - - ac_fn_c_check_decl "$LINENO" "strverscmp" "ac_cv_have_decl_strverscmp" "$ac_includes_default" -if test "x$ac_cv_have_decl_strverscmp" = xyes; then : - ac_have_decl=1 -else - ac_have_decl=0 -fi - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_STRVERSCMP $ac_have_decl -_ACEOF - - - -ac_fn_c_check_decl "$LINENO" "perror" "ac_cv_have_decl_perror" "$ac_includes_default" -if test "x$ac_cv_have_decl_perror" = xyes; then : - ac_have_decl=1 -else - ac_have_decl=0 -fi - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_PERROR $ac_have_decl -_ACEOF -ac_fn_c_check_decl "$LINENO" "vasprintf" "ac_cv_have_decl_vasprintf" "$ac_includes_default" -if test "x$ac_cv_have_decl_vasprintf" = xyes; then : - ac_have_decl=1 -else - ac_have_decl=0 -fi - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_VASPRINTF $ac_have_decl -_ACEOF -ac_fn_c_check_decl "$LINENO" "vsnprintf" "ac_cv_have_decl_vsnprintf" "$ac_includes_default" -if test "x$ac_cv_have_decl_vsnprintf" = xyes; then : - ac_have_decl=1 -else - ac_have_decl=0 -fi - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_VSNPRINTF $ac_have_decl -_ACEOF - - -ac_fn_c_check_member "$LINENO" "struct stat" "st_blocks" "ac_cv_member_struct_stat_st_blocks" "$ac_includes_default" -if test "x$ac_cv_member_struct_stat_st_blocks" = xyes; then : - -cat >>confdefs.h <<_ACEOF -#define HAVE_STRUCT_STAT_ST_BLOCKS 1 -_ACEOF - - -fi -ac_fn_c_check_member "$LINENO" "struct stat" "st_blksize" "ac_cv_member_struct_stat_st_blksize" "$ac_includes_default" -if test "x$ac_cv_member_struct_stat_st_blksize" = xyes; then : - -cat >>confdefs.h <<_ACEOF -#define HAVE_STRUCT_STAT_ST_BLKSIZE 1 -_ACEOF - - -fi - - -# See if <sys/user.h> supports the %fs_base and %gs_bas amd64 segment registers. -# Older amd64 Linux's don't have the fs_base and gs_base members of -# `struct user_regs_struct'. -ac_fn_c_check_member "$LINENO" "struct user_regs_struct" "fs_base" "ac_cv_member_struct_user_regs_struct_fs_base" "#include <sys/types.h> -#include <sys/user.h> -" -if test "x$ac_cv_member_struct_user_regs_struct_fs_base" = xyes; then : - -cat >>confdefs.h <<_ACEOF -#define HAVE_STRUCT_USER_REGS_STRUCT_FS_BASE 1 -_ACEOF - - -fi -ac_fn_c_check_member "$LINENO" "struct user_regs_struct" "gs_base" "ac_cv_member_struct_user_regs_struct_gs_base" "#include <sys/types.h> -#include <sys/user.h> -" -if test "x$ac_cv_member_struct_user_regs_struct_gs_base" = xyes; then : - -cat >>confdefs.h <<_ACEOF -#define HAVE_STRUCT_USER_REGS_STRUCT_GS_BASE 1 -_ACEOF - - -fi - - - -ac_fn_c_check_type "$LINENO" "socklen_t" "ac_cv_type_socklen_t" "#include <sys/types.h> -#include <sys/socket.h> - -" -if test "x$ac_cv_type_socklen_t" = xyes; then : - -cat >>confdefs.h <<_ACEOF -#define HAVE_SOCKLEN_T 1 -_ACEOF - - -fi - - -case "${target}" in - *-android*) - # Starting with NDK version 9, <elf.h> actually includes definitions - # of Elf32_auxv_t and Elf64_auxv_t. But sadly, <elf.h> includes - # <sys/exec_elf.h> which defines some of the ELF types incorrectly, - # leading to conflicts with the defintions from <linux/elf.h>. - # This makes it impossible for us to include both <elf.h> and - # <linux/elf.h>, which means that, in practice, we do not have - # access to Elf32_auxv_t and Elf64_auxv_t on this platform. - # Therefore, do not try to auto-detect availability, as it would - # get it wrong on this platform. - ;; - *) - ac_fn_c_check_type "$LINENO" "Elf32_auxv_t" "ac_cv_type_Elf32_auxv_t" "#include <elf.h> - -" -if test "x$ac_cv_type_Elf32_auxv_t" = xyes; then : - -cat >>confdefs.h <<_ACEOF -#define HAVE_ELF32_AUXV_T 1 -_ACEOF - - -fi -ac_fn_c_check_type "$LINENO" "Elf64_auxv_t" "ac_cv_type_Elf64_auxv_t" "#include <elf.h> - -" -if test "x$ac_cv_type_Elf64_auxv_t" = xyes; then : - -cat >>confdefs.h <<_ACEOF -#define HAVE_ELF64_AUXV_T 1 -_ACEOF - - -fi - -esac - - - -# Check whether --with-pkgversion was given. -if test "${with_pkgversion+set}" = set; then : - withval=$with_pkgversion; case "$withval" in - yes) as_fn_error $? "package version not specified" "$LINENO" 5 ;; - no) PKGVERSION= ;; - *) PKGVERSION="($withval) " ;; - esac -else - PKGVERSION="(GDB) " - -fi - - - - - -# Check whether --with-bugurl was given. -if test "${with_bugurl+set}" = set; then : - withval=$with_bugurl; case "$withval" in - yes) as_fn_error $? "bug URL not specified" "$LINENO" 5 ;; - no) BUGURL= - ;; - *) BUGURL="$withval" - ;; - esac -else - BUGURL="http://www.gnu.org/software/gdb/bugs/" - -fi - - case ${BUGURL} in - "") - REPORT_BUGS_TO= - REPORT_BUGS_TEXI= - ;; - *) - REPORT_BUGS_TO="<$BUGURL>" - REPORT_BUGS_TEXI=@uref{`echo "$BUGURL" | sed 's/@/@@/g'`} - ;; - esac; - - - - -cat >>confdefs.h <<_ACEOF -#define PKGVERSION "$PKGVERSION" -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define REPORT_BUGS_TO "$REPORT_BUGS_TO" -_ACEOF - - -# Check for various supplementary target information (beyond the -# triplet) which might affect the choices in configure.srv. -case "${target}" in - i[34567]86-*-linux*) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if building for x86-64" >&5 -$as_echo_n "checking if building for x86-64... " >&6; } -if ${gdb_cv_i386_is_x86_64+:} false; then : - $as_echo_n "(cached) " >&6 -else - save_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS $CFLAGS" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#if __x86_64__ -got it -#endif - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "got it" >/dev/null 2>&1; then : - gdb_cv_i386_is_x86_64=yes -else - gdb_cv_i386_is_x86_64=no -fi -rm -f conftest* - - CPPFLAGS="$save_CPPFLAGS" -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_i386_is_x86_64" >&5 -$as_echo "$gdb_cv_i386_is_x86_64" >&6; } - ;; - - x86_64-*-linux*) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if building for x32" >&5 -$as_echo_n "checking if building for x32... " >&6; } -if ${gdb_cv_x86_is_x32+:} false; then : - $as_echo_n "(cached) " >&6 -else - save_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS $CFLAGS" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#if __x86_64__ && __ILP32__ -got it -#endif - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "got it" >/dev/null 2>&1; then : - gdb_cv_x86_is_x32=yes -else - gdb_cv_x86_is_x32=no -fi -rm -f conftest* - - CPPFLAGS="$save_CPPFLAGS" -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_x86_is_x32" >&5 -$as_echo "$gdb_cv_x86_is_x32" >&6; } - ;; - - m68k-*-*) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if building for Coldfire" >&5 -$as_echo_n "checking if building for Coldfire... " >&6; } -if ${gdb_cv_m68k_is_coldfire+:} false; then : - $as_echo_n "(cached) " >&6 -else - save_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS $CFLAGS" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#ifdef __mcoldfire__ -got it -#endif - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "got it" >/dev/null 2>&1; then : - gdb_cv_m68k_is_coldfire=yes -else - gdb_cv_m68k_is_coldfire=no -fi -rm -f conftest* - - CPPFLAGS="$save_CPPFLAGS" -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_m68k_is_coldfire" >&5 -$as_echo "$gdb_cv_m68k_is_coldfire" >&6; } - ;; -esac - -. ${srcdir}/configure.srv - -if test "${srv_mingwce}" = "yes"; then - LIBS="$LIBS -lws2" -elif test "${srv_mingw}" = "yes"; then - LIBS="$LIBS -lws2_32" -elif test "${srv_qnx}" = "yes"; then - LIBS="$LIBS -lsocket" -elif test "${srv_lynxos}" = "yes"; then - LIBS="$LIBS -lnetinet" -fi - -if test "${srv_mingw}" = "yes"; then - -$as_echo "#define USE_WIN32API 1" >>confdefs.h - -fi - -if test "${srv_linux_usrregs}" = "yes"; then - -$as_echo "#define HAVE_LINUX_USRREGS 1" >>confdefs.h - -fi - -if test "${srv_linux_regsets}" = "yes"; then - -$as_echo "#define HAVE_LINUX_REGSETS 1" >>confdefs.h - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PTRACE_GETREGS" >&5 -$as_echo_n "checking for PTRACE_GETREGS... " >&6; } - if ${gdbsrv_cv_have_ptrace_getregs+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <sys/ptrace.h> -int -main () -{ -PTRACE_GETREGS; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - gdbsrv_cv_have_ptrace_getregs=yes -else - gdbsrv_cv_have_ptrace_getregs=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdbsrv_cv_have_ptrace_getregs" >&5 -$as_echo "$gdbsrv_cv_have_ptrace_getregs" >&6; } - if test "${gdbsrv_cv_have_ptrace_getregs}" = "yes"; then - -$as_echo "#define HAVE_PTRACE_GETREGS 1" >>confdefs.h - - fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PTRACE_GETFPXREGS" >&5 -$as_echo_n "checking for PTRACE_GETFPXREGS... " >&6; } - if ${gdbsrv_cv_have_ptrace_getfpxregs+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <sys/ptrace.h> -int -main () -{ -PTRACE_GETFPXREGS; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - gdbsrv_cv_have_ptrace_getfpxregs=yes -else - gdbsrv_cv_have_ptrace_getfpxregs=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdbsrv_cv_have_ptrace_getfpxregs" >&5 -$as_echo "$gdbsrv_cv_have_ptrace_getfpxregs" >&6; } - if test "${gdbsrv_cv_have_ptrace_getfpxregs}" = "yes"; then - -$as_echo "#define HAVE_PTRACE_GETFPXREGS 1" >>confdefs.h - - fi -fi - -if test "${srv_linux_btrace}" = "yes"; then - -$as_echo "#define HAVE_LINUX_BTRACE 1" >>confdefs.h - -fi - -if test "$ac_cv_header_sys_procfs_h" = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lwpid_t in sys/procfs.h" >&5 -$as_echo_n "checking for lwpid_t in sys/procfs.h... " >&6; } - if ${bfd_cv_have_sys_procfs_type_lwpid_t+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#define _SYSCALL32 -/* Needed for new procfs interface on sparc-solaris. */ -#define _STRUCTURED_PROC 1 -#include <sys/procfs.h> -int -main () -{ -lwpid_t avar - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - bfd_cv_have_sys_procfs_type_lwpid_t=yes -else - bfd_cv_have_sys_procfs_type_lwpid_t=no - -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi - - if test $bfd_cv_have_sys_procfs_type_lwpid_t = yes; then - -$as_echo "#define HAVE_LWPID_T 1" >>confdefs.h - - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_lwpid_t" >&5 -$as_echo "$bfd_cv_have_sys_procfs_type_lwpid_t" >&6; } - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for psaddr_t in sys/procfs.h" >&5 -$as_echo_n "checking for psaddr_t in sys/procfs.h... " >&6; } - if ${bfd_cv_have_sys_procfs_type_psaddr_t+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#define _SYSCALL32 -/* Needed for new procfs interface on sparc-solaris. */ -#define _STRUCTURED_PROC 1 -#include <sys/procfs.h> -int -main () -{ -psaddr_t avar - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - bfd_cv_have_sys_procfs_type_psaddr_t=yes -else - bfd_cv_have_sys_procfs_type_psaddr_t=no - -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi - - if test $bfd_cv_have_sys_procfs_type_psaddr_t = yes; then - -$as_echo "#define HAVE_PSADDR_T 1" >>confdefs.h - - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_psaddr_t" >&5 -$as_echo "$bfd_cv_have_sys_procfs_type_psaddr_t" >&6; } - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for prgregset_t in sys/procfs.h" >&5 -$as_echo_n "checking for prgregset_t in sys/procfs.h... " >&6; } - if ${bfd_cv_have_sys_procfs_type_prgregset_t+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#define _SYSCALL32 -/* Needed for new procfs interface on sparc-solaris. */ -#define _STRUCTURED_PROC 1 -#include <sys/procfs.h> -int -main () -{ -prgregset_t avar - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - bfd_cv_have_sys_procfs_type_prgregset_t=yes -else - bfd_cv_have_sys_procfs_type_prgregset_t=no - -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi - - if test $bfd_cv_have_sys_procfs_type_prgregset_t = yes; then - -$as_echo "#define HAVE_PRGREGSET_T 1" >>confdefs.h - - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_prgregset_t" >&5 -$as_echo "$bfd_cv_have_sys_procfs_type_prgregset_t" >&6; } - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for prfpregset_t in sys/procfs.h" >&5 -$as_echo_n "checking for prfpregset_t in sys/procfs.h... " >&6; } - if ${bfd_cv_have_sys_procfs_type_prfpregset_t+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#define _SYSCALL32 -/* Needed for new procfs interface on sparc-solaris. */ -#define _STRUCTURED_PROC 1 -#include <sys/procfs.h> -int -main () -{ -prfpregset_t avar - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - bfd_cv_have_sys_procfs_type_prfpregset_t=yes -else - bfd_cv_have_sys_procfs_type_prfpregset_t=no - -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi - - if test $bfd_cv_have_sys_procfs_type_prfpregset_t = yes; then - -$as_echo "#define HAVE_PRFPREGSET_T 1" >>confdefs.h - - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_prfpregset_t" >&5 -$as_echo "$bfd_cv_have_sys_procfs_type_prfpregset_t" >&6; } - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for elf_fpregset_t in sys/procfs.h" >&5 -$as_echo_n "checking for elf_fpregset_t in sys/procfs.h... " >&6; } - if ${bfd_cv_have_sys_procfs_type_elf_fpregset_t+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#define _SYSCALL32 -/* Needed for new procfs interface on sparc-solaris. */ -#define _STRUCTURED_PROC 1 -#include <sys/procfs.h> -int -main () -{ -elf_fpregset_t avar - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - bfd_cv_have_sys_procfs_type_elf_fpregset_t=yes -else - bfd_cv_have_sys_procfs_type_elf_fpregset_t=no - -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi - - if test $bfd_cv_have_sys_procfs_type_elf_fpregset_t = yes; then - -$as_echo "#define HAVE_ELF_FPREGSET_T 1" >>confdefs.h - - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_elf_fpregset_t" >&5 -$as_echo "$bfd_cv_have_sys_procfs_type_elf_fpregset_t" >&6; } - -fi - -if test "$bfd_cv_have_sys_procfs_type_lwpid_t" != yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lwpid_t in thread_db.h" >&5 -$as_echo_n "checking for lwpid_t in thread_db.h... " >&6; } - if ${gdbserver_cv_have_thread_db_type_lwpid_t+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#include <thread_db.h> -int -main () -{ -lwpid_t avar - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - gdbserver_cv_have_thread_db_type_lwpid_t=yes -else - gdbserver_cv_have_thread_db_type_lwpid_t=no - -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi - - if test $gdbserver_cv_have_thread_db_type_lwpid_t = yes; then - -$as_echo "#define HAVE_LWPID_T 1" >>confdefs.h - - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdbserver_cv_have_thread_db_type_lwpid_t" >&5 -$as_echo "$gdbserver_cv_have_thread_db_type_lwpid_t" >&6; } - -fi - -if test "$bfd_cv_have_sys_procfs_type_psaddr_t" != yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for psaddr_t in thread_db.h" >&5 -$as_echo_n "checking for psaddr_t in thread_db.h... " >&6; } - if ${gdbserver_cv_have_thread_db_type_psaddr_t+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#include <thread_db.h> -int -main () -{ -psaddr_t avar - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - gdbserver_cv_have_thread_db_type_psaddr_t=yes -else - gdbserver_cv_have_thread_db_type_psaddr_t=no - -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi - - if test $gdbserver_cv_have_thread_db_type_psaddr_t = yes; then - -$as_echo "#define HAVE_PSADDR_T 1" >>confdefs.h - - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdbserver_cv_have_thread_db_type_psaddr_t" >&5 -$as_echo "$gdbserver_cv_have_thread_db_type_psaddr_t" >&6; } - -fi - -old_LIBS="$LIBS" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 -$as_echo_n "checking for dlopen in -ldl... " >&6; } -if ${ac_cv_lib_dl_dlopen+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldl $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dl_dlopen=yes -else - ac_cv_lib_dl_dlopen=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 -$as_echo "$ac_cv_lib_dl_dlopen" >&6; } -if test "x$ac_cv_lib_dl_dlopen" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBDL 1 -_ACEOF - - LIBS="-ldl $LIBS" - -fi - -LIBS="$old_LIBS" - -srv_thread_depfiles= -srv_libs= - -if test "$srv_linux_thread_db" = "yes"; then - if test "$ac_cv_lib_dl_dlopen" = "yes"; then - srv_libs="-ldl" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the dynamic export flag" >&5 -$as_echo_n "checking for the dynamic export flag... " >&6; } - old_LDFLAGS="$LDFLAGS" - # Older GNU ld supports --export-dynamic but --dynamic-list may not be - # supported there. - RDYNAMIC="-Wl,--dynamic-list=${srcdir}/proc-service.list" - LDFLAGS="$LDFLAGS $RDYNAMIC" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - found="-Wl,--dynamic-list" - RDYNAMIC='-Wl,--dynamic-list=$(srcdir)/proc-service.list' -else - RDYNAMIC="-rdynamic" - LDFLAGS="$old_LDFLAGS $RDYNAMIC" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - found="-rdynamic" -else - found="no" - RDYNAMIC="" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - - LDFLAGS="$old_LDFLAGS" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $found" >&5 -$as_echo "$found" >&6; } - else - srv_libs="-lthread_db" - fi - - srv_thread_depfiles="thread-db.o proc-service.o" - -$as_echo "#define USE_THREAD_DB 1" >>confdefs.h - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for TD_VERSION" >&5 -$as_echo_n "checking for TD_VERSION... " >&6; } -if ${gdbsrv_cv_have_td_version+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <thread_db.h> -int -main () -{ -TD_VERSION; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - gdbsrv_cv_have_td_version=yes -else - gdbsrv_cv_have_td_version=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdbsrv_cv_have_td_version" >&5 -$as_echo "$gdbsrv_cv_have_td_version" >&6; } - if test "$gdbsrv_cv_have_td_version" = yes; then - -$as_echo "#define HAVE_TD_VERSION 1" >>confdefs.h - - fi -fi - - -# Check whether --with-libthread-db was given. -if test "${with_libthread_db+set}" = set; then : - withval=$with_libthread_db; srv_libthread_db_path="${withval}" - srv_libs="$srv_libthread_db_path" - -fi - - -if test "$srv_libs" != "" -a "$srv_libs" != "-ldl"; then - -$as_echo "#define USE_LIBTHREAD_DB_DIRECTLY 1" >>confdefs.h - -fi - -if test "$srv_xmlfiles" != ""; then - srv_xmlbuiltin="xml-builtin.o" - -$as_echo "#define USE_XML 1" >>confdefs.h - - - tmp_xmlfiles=$srv_xmlfiles - srv_xmlfiles="" - for f in $tmp_xmlfiles; do - srv_xmlfiles="$srv_xmlfiles \$(XML_DIR)/$f" - done -fi - -GDBSERVER_DEPFILES="$srv_regobj $srv_tgtobj $srv_hostio_err_objs $srv_thread_depfiles $srv_selftest_objs" -GDBSERVER_LIBS="$srv_libs" - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the target supports __sync_*_compare_and_swap" >&5 -$as_echo_n "checking whether the target supports __sync_*_compare_and_swap... " >&6; } -if ${gdbsrv_cv_have_sync_builtins+:} false; then : - $as_echo_n "(cached) " >&6 -else - -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -int foo, bar; bar = __sync_val_compare_and_swap(&foo, 0, 1); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - gdbsrv_cv_have_sync_builtins=yes -else - gdbsrv_cv_have_sync_builtins=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdbsrv_cv_have_sync_builtins" >&5 -$as_echo "$gdbsrv_cv_have_sync_builtins" >&6; } -if test "$gdbsrv_cv_have_sync_builtins" = yes; then - -$as_echo "#define HAVE_SYNC_BUILTINS 1" >>confdefs.h - -fi - -saved_cflags="$CFLAGS" -CFLAGS="$CFLAGS -fvisibility=hidden" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - gdbsrv_cv_have_visibility_hidden=yes -else - gdbsrv_cv_have_visibility_hidden=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -CFLAGS="$saved_cflags" - -ac_fn_c_check_decl "$LINENO" "ADDR_NO_RANDOMIZE" "ac_cv_have_decl_ADDR_NO_RANDOMIZE" "#include <sys/personality.h> -" -if test "x$ac_cv_have_decl_ADDR_NO_RANDOMIZE" = xyes; then : - ac_have_decl=1 -else - ac_have_decl=0 -fi - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_ADDR_NO_RANDOMIZE $ac_have_decl -_ACEOF - - -if test "$cross_compiling" = yes; then : - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <sys/personality.h> -int -main () -{ - -# if !HAVE_DECL_ADDR_NO_RANDOMIZE -# define ADDR_NO_RANDOMIZE 0x0040000 -# endif - /* Test the flag could be set and stays set. */ - personality (personality (0xffffffff) | ADDR_NO_RANDOMIZE); - if (!(personality (personality (0xffffffff)) & ADDR_NO_RANDOMIZE)) - return 1 - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - gdbsrv_cv_have_personality=true -else - gdbsrv_cv_have_personality=false -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <sys/personality.h> -int -main () -{ - -# if !HAVE_DECL_ADDR_NO_RANDOMIZE -# define ADDR_NO_RANDOMIZE 0x0040000 -# endif - /* Test the flag could be set and stays set. */ - personality (personality (0xffffffff) | ADDR_NO_RANDOMIZE); - if (!(personality (personality (0xffffffff)) & ADDR_NO_RANDOMIZE)) - return 1 - ; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - gdbsrv_cv_have_personality=true -else - gdbsrv_cv_have_personality=false -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -if $gdbsrv_cv_have_personality -then - -$as_echo "#define HAVE_PERSONALITY 1" >>confdefs.h - -fi - - -IPA_DEPFILES="" -extra_libraries="" - -# check whether to enable the inprocess agent -if test "$ipa_obj" != "" \ - -a "$gdbsrv_cv_have_sync_builtins" = yes \ - -a "$gdbsrv_cv_have_visibility_hidden" = yes; then - have_ipa=true -else - have_ipa=false -fi - -# Check whether --enable-inprocess-agent was given. -if test "${enable_inprocess_agent+set}" = set; then : - enableval=$enable_inprocess_agent; case "$enableval" in - yes) want_ipa=true ;; - no) want_ipa=false ;; - *) as_fn_error $? "bad value $enableval for inprocess-agent" "$LINENO" 5 ;; -esac -else - want_ipa=$have_ipa -fi - - -if $want_ipa ; then - if $have_ipa ; then - IPA_DEPFILES="$ipa_obj" - extra_libraries="$extra_libraries libinproctrace.so" - else - as_fn_error $? "inprocess agent not supported for this target" "$LINENO" 5 - fi -fi - - - - - - - - -GNULIB=build-gnulib-gdbserver/import - -GNULIB_STDINT_H= -if test x"$STDINT_H" != x; then - GNULIB_STDINT_H=$GNULIB/$STDINT_H -fi - - -ac_config_files="$ac_config_files Makefile" - - -cat >confcache <<\_ACEOF -# This file is a shell script that caches the results of configure -# tests run on this system so they can be shared between configure -# scripts and configure runs, see configure's option --config-cache. -# It is not useful on other systems. If it contains results you don't -# want to keep, you may remove or edit it. -# -# config.status only pays attention to the cache file if you give it -# the --recheck option to rerun configure. -# -# `ac_cv_env_foo' variables (set or unset) will be overridden when -# loading this file, other *unset* `ac_cv_foo' will be assigned the -# following values. - -_ACEOF - -# The following way of writing the cache mishandles newlines in values, -# but we know of no workaround that is simple, portable, and efficient. -# So, we kill variables containing newlines. -# Ultrix sh set writes to stderr and can't be redirected directly, -# and sets the high bit in the cache file unless we assign to the vars. -( - for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( - *) { eval $ac_var=; unset $ac_var;} ;; - esac ;; - esac - done - - (set) 2>&1 | - case $as_nl`(ac_space=' '; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - # `set' does not quote correctly, so add quotes: double-quote - # substitution turns \\\\ into \\, and sed turns \\ into \. - sed -n \ - "s/'/'\\\\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" - ;; #( - *) - # `set' quotes correctly as required by POSIX, so do not add quotes. - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) | - sed ' - /^ac_cv_env_/b end - t clear - :clear - s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ - t end - s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ - :end' >>confcache -if diff "$cache_file" confcache >/dev/null 2>&1; then :; else - if test -w "$cache_file"; then - if test "x$cache_file" != "x/dev/null"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 -$as_echo "$as_me: updating cache $cache_file" >&6;} - if test ! -f "$cache_file" || test -h "$cache_file"; then - cat confcache >"$cache_file" - else - case $cache_file in #( - */* | ?:*) - mv -f confcache "$cache_file"$$ && - mv -f "$cache_file"$$ "$cache_file" ;; #( - *) - mv -f confcache "$cache_file" ;; - esac - fi - fi - else - { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 -$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} - fi -fi -rm -f confcache - -test "x$prefix" = xNONE && prefix=$ac_default_prefix -# Let make expand exec_prefix. -test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' - -DEFS=-DHAVE_CONFIG_H - -ac_libobjs= -ac_ltlibobjs= -U= -for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue - # 1. Remove the extension, and $U if already installed. - ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' - ac_i=`$as_echo "$ac_i" | sed "$ac_script"` - # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR - # will be set to the directory where LIBOBJS objects are built. - as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" - as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' -done -LIBOBJS=$ac_libobjs - -LTLIBOBJS=$ac_ltlibobjs - - -if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then - as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi - -: "${CONFIG_STATUS=./config.status}" -ac_write_fail=0 -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 -$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} -as_write_fail=0 -cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 -#! $SHELL -# Generated by $as_me. -# Run this file to recreate the current configuration. -# Compiler output produced by configure, useful for debugging -# configure, is in config.log if it exists. - -debug=false -ac_cs_recheck=false -ac_cs_silent=false - -SHELL=\${CONFIG_SHELL-$SHELL} -export SHELL -_ASEOF -cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 -## -------------------- ## -## M4sh Initialization. ## -## -------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -as_myself= -case $0 in #(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break - done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - - -# as_fn_error STATUS ERROR [LINENO LOG_FD] -# ---------------------------------------- -# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are -# provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with STATUS, using 1 if that was 0. -as_fn_error () -{ - as_status=$1; test $as_status -eq 0 && as_status=1 - if test "$4"; then - as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 - fi - $as_echo "$as_me: error: $2" >&2 - as_fn_exit $as_status -} # as_fn_error - - -# as_fn_set_status STATUS -# ----------------------- -# Set $? to STATUS, without forking. -as_fn_set_status () -{ - return $1 -} # as_fn_set_status - -# as_fn_exit STATUS -# ----------------- -# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. -as_fn_exit () -{ - set +e - as_fn_set_status $1 - exit $1 -} # as_fn_exit - -# as_fn_unset VAR -# --------------- -# Portably unset VAR. -as_fn_unset () -{ - { eval $1=; unset $1;} -} -as_unset=as_fn_unset -# as_fn_append VAR VALUE -# ---------------------- -# Append the text in VALUE to the end of the definition contained in VAR. Take -# advantage of any shell optimizations that allow amortized linear growth over -# repeated appends, instead of the typical quadratic growth present in naive -# implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : - eval 'as_fn_append () - { - eval $1+=\$2 - }' -else - as_fn_append () - { - eval $1=\$$1\$2 - } -fi # as_fn_append - -# as_fn_arith ARG... -# ------------------ -# Perform arithmetic evaluation on the ARGs, and store the result in the -# global $as_val. Take advantage of shells that can avoid forks. The arguments -# must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : - eval 'as_fn_arith () - { - as_val=$(( $* )) - }' -else - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in #((((( --n*) - case `echo 'xy\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - xy) ECHO_C='\c';; - *) echo `echo ksh88 bug on AIX 6.1` > /dev/null - ECHO_T=' ';; - esac;; -*) - ECHO_N='-n';; -esac - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir 2>/dev/null -fi -if (echo >conf$$.file) 2>/dev/null; then - if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -pR'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -pR' - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -pR' - fi -else - as_ln_s='cp -pR' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - - -# as_fn_mkdir_p -# ------------- -# Create "$as_dir" as a directory, including parents if necessary. -as_fn_mkdir_p () -{ - - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || eval $as_mkdir_p || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" - - -} # as_fn_mkdir_p -if mkdir -p . 2>/dev/null; then - as_mkdir_p='mkdir -p "$as_dir"' -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - - -# as_fn_executable_p FILE -# ----------------------- -# Test if FILE is an executable regular file. -as_fn_executable_p () -{ - test -f "$1" && test -x "$1" -} # as_fn_executable_p -as_test_x='test -x' -as_executable_p=as_fn_executable_p - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -exec 6>&1 -## ----------------------------------- ## -## Main body of $CONFIG_STATUS script. ## -## ----------------------------------- ## -_ASEOF -test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# Save the log message, to keep $0 and so on meaningful, and to -# report actual input values of CONFIG_FILES etc. instead of their -# values after options handling. -ac_log=" -This file was extended by $as_me, which was -generated by GNU Autoconf 2.69. Invocation command line was - - CONFIG_FILES = $CONFIG_FILES - CONFIG_HEADERS = $CONFIG_HEADERS - CONFIG_LINKS = $CONFIG_LINKS - CONFIG_COMMANDS = $CONFIG_COMMANDS - $ $0 $@ - -on `(hostname || uname -n) 2>/dev/null | sed 1q` -" - -_ACEOF - -case $ac_config_files in *" -"*) set x $ac_config_files; shift; ac_config_files=$*;; -esac - -case $ac_config_headers in *" -"*) set x $ac_config_headers; shift; ac_config_headers=$*;; -esac - - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -# Files that config.status was made for. -config_files="$ac_config_files" -config_headers="$ac_config_headers" -config_commands="$ac_config_commands" - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -ac_cs_usage="\ -\`$as_me' instantiates files and other configuration actions -from templates according to the current configuration. Unless the files -and actions are specified as TAGs, all are instantiated by default. - -Usage: $0 [OPTION]... [TAG]... - - -h, --help print this help, then exit - -V, --version print version number and configuration settings, then exit - --config print configuration, then exit - -q, --quiet, --silent - do not print progress messages - -d, --debug don't remove temporary files - --recheck update $as_me by reconfiguring in the same conditions - --file=FILE[:TEMPLATE] - instantiate the configuration file FILE - --header=FILE[:TEMPLATE] - instantiate the configuration header FILE - -Configuration files: -$config_files - -Configuration headers: -$config_headers - -Configuration commands: -$config_commands - -Report bugs to the package provider." - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" -ac_cs_version="\\ -config.status -configured by $0, generated by GNU Autoconf 2.69, - with options \\"\$ac_cs_config\\" - -Copyright (C) 2012 Free Software Foundation, Inc. -This config.status script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it." - -ac_pwd='$ac_pwd' -srcdir='$srcdir' -INSTALL='$INSTALL' -test -n "\$AWK" || AWK=awk -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# The default lists apply if the user does not specify any file. -ac_need_defaults=: -while test $# != 0 -do - case $1 in - --*=?*) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` - ac_shift=: - ;; - --*=) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg= - ac_shift=: - ;; - *) - ac_option=$1 - ac_optarg=$2 - ac_shift=shift - ;; - esac - - case $ac_option in - # Handling of the options. - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - ac_cs_recheck=: ;; - --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) - $as_echo "$ac_cs_version"; exit ;; - --config | --confi | --conf | --con | --co | --c ) - $as_echo "$ac_cs_config"; exit ;; - --debug | --debu | --deb | --de | --d | -d ) - debug=: ;; - --file | --fil | --fi | --f ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; - '') as_fn_error $? "missing file argument" ;; - esac - as_fn_append CONFIG_FILES " '$ac_optarg'" - ac_need_defaults=false;; - --header | --heade | --head | --hea ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - as_fn_append CONFIG_HEADERS " '$ac_optarg'" - ac_need_defaults=false;; - --he | --h) - # Conflict between --help and --header - as_fn_error $? "ambiguous option: \`$1' -Try \`$0 --help' for more information.";; - --help | --hel | -h ) - $as_echo "$ac_cs_usage"; exit ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil | --si | --s) - ac_cs_silent=: ;; - - # This is an error. - -*) as_fn_error $? "unrecognized option: \`$1' -Try \`$0 --help' for more information." ;; - - *) as_fn_append ac_config_targets " $1" - ac_need_defaults=false ;; - - esac - shift -done - -ac_configure_extra_args= - -if $ac_cs_silent; then - exec 6>/dev/null - ac_configure_extra_args="$ac_configure_extra_args --silent" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -if \$ac_cs_recheck; then - set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion - shift - \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 - CONFIG_SHELL='$SHELL' - export CONFIG_SHELL - exec "\$@" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -exec 5>>config.log -{ - echo - sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX -## Running $as_me. ## -_ASBOX - $as_echo "$ac_log" -} >&5 - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -# -# INIT-COMMANDS -# -ac_aux_dir=$ac_aux_dir DEPDIR=$DEPDIR -ac_aux_dir=$ac_aux_dir DEPDIR=$DEPDIR CONFIG_SRC_SUBDIR="$CONFIG_SRC_SUBDIR" - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 - -# Handling of arguments. -for ac_config_target in $ac_config_targets -do - case $ac_config_target in - "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h:config.in" ;; - "depdir") CONFIG_COMMANDS="$CONFIG_COMMANDS depdir" ;; - "gdbdepdir") CONFIG_COMMANDS="$CONFIG_COMMANDS gdbdepdir" ;; - "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; - - *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; - esac -done - - -# If the user did not use the arguments to specify the items to instantiate, -# then the envvar interface is used. Set only those that are not. -# We use the long form for the default assignment because of an extremely -# bizarre bug on SunOS 4.1.3. -if $ac_need_defaults; then - test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files - test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers - test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands -fi - -# Have a temporary directory for convenience. Make it in the build tree -# simply because there is no reason against having it here, and in addition, -# creating and moving files from /tmp can sometimes cause problems. -# Hook for its removal unless debugging. -# Note that there is a small window in which the directory will not be cleaned: -# after its creation but before its name has been assigned to `$tmp'. -$debug || -{ - tmp= ac_tmp= - trap 'exit_status=$? - : "${ac_tmp:=$tmp}" - { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status -' 0 - trap 'as_fn_exit 1' 1 2 13 15 -} -# Create a (secure) tmp directory for tmp files. - -{ - tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && - test -d "$tmp" -} || -{ - tmp=./conf$$-$RANDOM - (umask 077 && mkdir "$tmp") -} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 -ac_tmp=$tmp - -# Set up the scripts for CONFIG_FILES section. -# No need to generate them if there are no CONFIG_FILES. -# This happens for instance with `./config.status config.h'. -if test -n "$CONFIG_FILES"; then - - -ac_cr=`echo X | tr X '\015'` -# On cygwin, bash can eat \r inside `` if the user requested igncr. -# But we know of no other shell where ac_cr would be empty at this -# point, so we can use a bashism as a fallback. -if test "x$ac_cr" = x; then - eval ac_cr=\$\'\\r\' -fi -ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null` -if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then - ac_cs_awk_cr='\\r' -else - ac_cs_awk_cr=$ac_cr -fi - -echo 'BEGIN {' >"$ac_tmp/subs1.awk" && -_ACEOF - - -{ - echo "cat >conf$$subs.awk <<_ACEOF" && - echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && - echo "_ACEOF" -} >conf$$subs.sh || - as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 -ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` -ac_delim='%!_!# ' -for ac_last_try in false false false false false :; do - . ./conf$$subs.sh || - as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 - - ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` - if test $ac_delim_n = $ac_delim_num; then - break - elif $ac_last_try; then - as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 - else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi -done -rm -f conf$$subs.sh - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && -_ACEOF -sed -n ' -h -s/^/S["/; s/!.*/"]=/ -p -g -s/^[^!]*!// -:repl -t repl -s/'"$ac_delim"'$// -t delim -:nl -h -s/\(.\{148\}\)..*/\1/ -t more1 -s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ -p -n -b repl -:more1 -s/["\\]/\\&/g; s/^/"/; s/$/"\\/ -p -g -s/.\{148\}// -t nl -:delim -h -s/\(.\{148\}\)..*/\1/ -t more2 -s/["\\]/\\&/g; s/^/"/; s/$/"/ -p -b -:more2 -s/["\\]/\\&/g; s/^/"/; s/$/"\\/ -p -g -s/.\{148\}// -t delim -' <conf$$subs.awk | sed ' -/^[^""]/{ - N - s/\n// -} -' >>$CONFIG_STATUS || ac_write_fail=1 -rm -f conf$$subs.awk -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -_ACAWK -cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && - for (key in S) S_is_set[key] = 1 - FS = "" - -} -{ - line = $ 0 - nfields = split(line, field, "@") - substed = 0 - len = length(field[1]) - for (i = 2; i < nfields; i++) { - key = field[i] - keylen = length(key) - if (S_is_set[key]) { - value = S[key] - line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) - len += length(value) + length(field[++i]) - substed = 1 - } else - len += 1 + keylen - } - - print line -} - -_ACAWK -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then - sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" -else - cat -fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ - || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 -_ACEOF - -# VPATH may cause trouble with some makes, so we remove sole $(srcdir), -# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and -# trailing colons and then remove the whole line if VPATH becomes empty -# (actually we leave an empty line to preserve line numbers). -if test "x$srcdir" = x.; then - ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ -h -s/// -s/^/:/ -s/[ ]*$/:/ -s/:\$(srcdir):/:/g -s/:\${srcdir}:/:/g -s/:@srcdir@:/:/g -s/^:*// -s/:*$// -x -s/\(=[ ]*\).*/\1/ -G -s/\n// -s/^[^=]*=[ ]*$// -}' -fi - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -fi # test -n "$CONFIG_FILES" - -# Set up the scripts for CONFIG_HEADERS section. -# No need to generate them if there are no CONFIG_HEADERS. -# This happens for instance with `./config.status Makefile'. -if test -n "$CONFIG_HEADERS"; then -cat >"$ac_tmp/defines.awk" <<\_ACAWK || -BEGIN { -_ACEOF - -# Transform confdefs.h into an awk script `defines.awk', embedded as -# here-document in config.status, that substitutes the proper values into -# config.h.in to produce config.h. - -# Create a delimiter string that does not exist in confdefs.h, to ease -# handling of long lines. -ac_delim='%!_!# ' -for ac_last_try in false false :; do - ac_tt=`sed -n "/$ac_delim/p" confdefs.h` - if test -z "$ac_tt"; then - break - elif $ac_last_try; then - as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 - else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi -done - -# For the awk script, D is an array of macro values keyed by name, -# likewise P contains macro parameters if any. Preserve backslash -# newline sequences. - -ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* -sed -n ' -s/.\{148\}/&'"$ac_delim"'/g -t rset -:rset -s/^[ ]*#[ ]*define[ ][ ]*/ / -t def -d -:def -s/\\$// -t bsnl -s/["\\]/\\&/g -s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ -D["\1"]=" \3"/p -s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p -d -:bsnl -s/["\\]/\\&/g -s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ -D["\1"]=" \3\\\\\\n"\\/p -t cont -s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p -t cont -d -:cont -n -s/.\{148\}/&'"$ac_delim"'/g -t clear -:clear -s/\\$// -t bsnlc -s/["\\]/\\&/g; s/^/"/; s/$/"/p -d -:bsnlc -s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p -b cont -' <confdefs.h | sed ' -s/'"$ac_delim"'/"\\\ -"/g' >>$CONFIG_STATUS || ac_write_fail=1 - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 - for (key in D) D_is_set[key] = 1 - FS = "" -} -/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { - line = \$ 0 - split(line, arg, " ") - if (arg[1] == "#") { - defundef = arg[2] - mac1 = arg[3] - } else { - defundef = substr(arg[1], 2) - mac1 = arg[2] - } - split(mac1, mac2, "(") #) - macro = mac2[1] - prefix = substr(line, 1, index(line, defundef) - 1) - if (D_is_set[macro]) { - # Preserve the white space surrounding the "#". - print prefix "define", macro P[macro] D[macro] - next - } else { - # Replace #undef with comments. This is necessary, for example, - # in the case of _POSIX_SOURCE, which is predefined and required - # on some systems where configure will not decide to define it. - if (defundef == "undef") { - print "/*", prefix defundef, macro, "*/" - next - } - } -} -{ print } -_ACAWK -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 - as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 -fi # test -n "$CONFIG_HEADERS" - - -eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" -shift -for ac_tag -do - case $ac_tag in - :[FHLC]) ac_mode=$ac_tag; continue;; - esac - case $ac_mode$ac_tag in - :[FHL]*:*);; - :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; - :[FH]-) ac_tag=-:-;; - :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; - esac - ac_save_IFS=$IFS - IFS=: - set x $ac_tag - IFS=$ac_save_IFS - shift - ac_file=$1 - shift - - case $ac_mode in - :L) ac_source=$1;; - :[FH]) - ac_file_inputs= - for ac_f - do - case $ac_f in - -) ac_f="$ac_tmp/stdin";; - *) # Look for the file first in the build tree, then in the source tree - # (if the path is not absolute). The absolute path cannot be DOS-style, - # because $ac_f cannot contain `:'. - test -f "$ac_f" || - case $ac_f in - [\\/$]*) false;; - *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; - esac || - as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; - esac - case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac - as_fn_append ac_file_inputs " '$ac_f'" - done - - # Let's still pretend it is `configure' which instantiates (i.e., don't - # use $as_me), people would be surprised to read: - # /* config.h. Generated by config.status. */ - configure_input='Generated from '` - $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' - `' by configure.' - if test x"$ac_file" != x-; then - configure_input="$ac_file. $configure_input" - { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 -$as_echo "$as_me: creating $ac_file" >&6;} - fi - # Neutralize special characters interpreted by sed in replacement strings. - case $configure_input in #( - *\&* | *\|* | *\\* ) - ac_sed_conf_input=`$as_echo "$configure_input" | - sed 's/[\\\\&|]/\\\\&/g'`;; #( - *) ac_sed_conf_input=$configure_input;; - esac - - case $ac_tag in - *:-:* | *:-) cat >"$ac_tmp/stdin" \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; - esac - ;; - esac - - ac_dir=`$as_dirname -- "$ac_file" || -$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_file" : 'X\(//\)[^/]' \| \ - X"$ac_file" : 'X\(//\)$' \| \ - X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$ac_file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - as_dir="$ac_dir"; as_fn_mkdir_p - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - - case $ac_mode in - :F) - # - # CONFIG_FILE - # - - case $INSTALL in - [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; - *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; - esac -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# If the template does not know about datarootdir, expand it. -# FIXME: This hack should be removed a few years after 2.60. -ac_datarootdir_hack=; ac_datarootdir_seen= -ac_sed_dataroot=' -/datarootdir/ { - p - q -} -/@datadir@/p -/@docdir@/p -/@infodir@/p -/@localedir@/p -/@mandir@/p' -case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in -*datarootdir*) ac_datarootdir_seen=yes;; -*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 - ac_datarootdir_hack=' - s&@datadir@&$datadir&g - s&@docdir@&$docdir&g - s&@infodir@&$infodir&g - s&@localedir@&$localedir&g - s&@mandir@&$mandir&g - s&\\\${datarootdir}&$datarootdir&g' ;; -esac -_ACEOF - -# Neutralize VPATH when `$srcdir' = `.'. -# Shell code in configure.ac might set extrasub. -# FIXME: do we really want to maintain this feature? -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_sed_extra="$ac_vpsub -$extrasub -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -:t -/@[a-zA-Z_][a-zA-Z_0-9]*@/!b -s|@configure_input@|$ac_sed_conf_input|;t t -s&@top_builddir@&$ac_top_builddir_sub&;t t -s&@top_build_prefix@&$ac_top_build_prefix&;t t -s&@srcdir@&$ac_srcdir&;t t -s&@abs_srcdir@&$ac_abs_srcdir&;t t -s&@top_srcdir@&$ac_top_srcdir&;t t -s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t -s&@builddir@&$ac_builddir&;t t -s&@abs_builddir@&$ac_abs_builddir&;t t -s&@abs_top_builddir@&$ac_abs_top_builddir&;t t -s&@INSTALL@&$ac_INSTALL&;t t -$ac_datarootdir_hack -" -eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ - >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - -test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && - { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && - { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ - "$ac_tmp/out"`; test -z "$ac_out"; } && - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined" >&5 -$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined" >&2;} - - rm -f "$ac_tmp/stdin" - case $ac_file in - -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; - *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; - esac \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - ;; - :H) - # - # CONFIG_HEADER - # - if test x"$ac_file" != x-; then - { - $as_echo "/* $configure_input */" \ - && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" - } >"$ac_tmp/config.h" \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 -$as_echo "$as_me: $ac_file is unchanged" >&6;} - else - rm -f "$ac_file" - mv "$ac_tmp/config.h" "$ac_file" \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - fi - else - $as_echo "/* $configure_input */" \ - && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ - || as_fn_error $? "could not create -" "$LINENO" 5 - fi - ;; - - :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 -$as_echo "$as_me: executing $ac_file commands" >&6;} - ;; - esac - - - case $ac_file$ac_mode in - "config.h":H) echo > stamp-h ;; - "depdir":C) $SHELL $ac_aux_dir/mkinstalldirs $DEPDIR ;; - "gdbdepdir":C) - for subdir in ${CONFIG_SRC_SUBDIR} - do - $SHELL $ac_aux_dir/mkinstalldirs $subdir/$DEPDIR - done ;; - - esac -done # for ac_tag - - -as_fn_exit 0 -_ACEOF -ac_clean_files=$ac_clean_files_save - -test $ac_write_fail = 0 || - as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 - - -# configure is writing to config.log, and then calls config.status. -# config.status does its own redirection, appending to config.log. -# Unfortunately, on DOS this fails, as config.log is still kept open -# by configure, so config.status won't be able to write to it; its -# output is simply discarded. So we exec the FD to /dev/null, -# effectively closing config.log, so it can be properly (re)opened and -# appended to by config.status. When coming back to configure, we -# need to make the FD available again. -if test "$no_create" != yes; then - ac_cs_success=: - ac_config_status_args= - test "$silent" = yes && - ac_config_status_args="$ac_config_status_args --quiet" - exec 5>/dev/null - $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false - exec 5>>config.log - # Use ||, not &&, to avoid exiting from the if with $? = 1, which - # would make configure fail if this is the last instruction. - $ac_cs_success || as_fn_exit 1 -fi -if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 -$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} -fi - diff -Nru gdb-9.1/gdb/gdbserver/configure.ac gdb-10.2/gdb/gdbserver/configure.ac --- gdb-9.1/gdb/gdbserver/configure.ac 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/configure.ac 1970-01-01 00:00:00.000000000 +0000 @@ -1,485 +0,0 @@ -dnl Autoconf configure script for GDB server. -dnl Copyright (C) 2000-2020 Free Software Foundation, Inc. -dnl -dnl This file is part of GDB. -dnl -dnl This program is free software; you can redistribute it and/or modify -dnl it under the terms of the GNU General Public License as published by -dnl the Free Software Foundation; either version 3 of the License, or -dnl (at your option) any later version. -dnl -dnl This program is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -dnl GNU General Public License for more details. -dnl -dnl You should have received a copy of the GNU General Public License -dnl along with this program. If not, see <http://www.gnu.org/licenses/>. - -dnl Process this file with autoconf to produce a configure script. - -AC_INIT(server.c) -AC_CONFIG_HEADERS(config.h:config.in, [echo > stamp-h]) - -AM_MAINTAINER_MODE - -AC_PROG_CC -AC_PROG_CXX -AC_GNU_SOURCE -AC_SYS_LARGEFILE - -AC_CANONICAL_SYSTEM - -AC_PROG_INSTALL -AC_CHECK_TOOL(AR, ar) -AC_PROG_RANLIB - -AC_ARG_PROGRAM - -# We require a C++11 compiler. Check if one is available, and if -# necessary, set CXX_DIALECT to some -std=xxx switch. -AX_CXX_COMPILE_STDCXX(11, , mandatory) - -AC_HEADER_STDC - -# Set the 'development' global. -. $srcdir/../../bfd/development.sh - -GDB_AC_SELFTEST([ - srv_selftest_objs="gdbsupport/selftest.o" -]) - -ACX_NONCANONICAL_TARGET -ACX_NONCANONICAL_HOST - -# Dependency checking. -ZW_CREATE_DEPDIR - -# Create sub-directories for objects and dependencies. -CONFIG_SRC_SUBDIR="arch gdbsupport" -AC_SUBST(CONFIG_SRC_SUBDIR) - -AC_CONFIG_COMMANDS([gdbdepdir],[ - for subdir in ${CONFIG_SRC_SUBDIR} - do - $SHELL $ac_aux_dir/mkinstalldirs $subdir/$DEPDIR - done], - [ac_aux_dir=$ac_aux_dir DEPDIR=$DEPDIR CONFIG_SRC_SUBDIR="$CONFIG_SRC_SUBDIR"]) - -ZW_PROG_COMPILER_DEPENDENCIES([CC]) - -gnulib_extra_configure_args= -# If large-file support is disabled, make sure gnulib does the same. -if test "$enable_largefile" = no; then -gnulib_extra_configure_args="$gnulib_extra_configure_args --disable-largefile" -fi - -# Configure gnulib. We can't use AC_CONFIG_SUBDIRS as that'd expect -# to find the the source subdir to be configured directly under -# gdbserver/. We need to build gnulib under some other directory not -# "gnulib", to avoid the problem of both GDB and GDBserver wanting to -# build it in the same directory, when building in the source dir. -ACX_CONFIGURE_DIR(["../../gnulib"], ["build-gnulib-gdbserver"], - ["$gnulib_extra_configure_args"]) - -ACX_CONFIGURE_DIR(["../../libiberty"], ["build-libiberty-gdbserver"]) - -AC_CHECK_HEADERS(termios.h sys/reg.h string.h dnl - proc_service.h sys/procfs.h linux/elf.h dnl - fcntl.h signal.h sys/file.h dnl - sys/ioctl.h netinet/in.h sys/socket.h netdb.h dnl - netinet/tcp.h arpa/inet.h) -AC_FUNC_FORK -AC_CHECK_FUNCS(getauxval pread pwrite pread64 setns) - -GDB_AC_COMMON - -# Check the return and argument types of ptrace. -GDB_AC_PTRACE - -# Check for UST -ustlibs="" -ustinc="" - -AC_ARG_WITH(ust, [ --with-ust=PATH Specify prefix directory for the installed UST package - Equivalent to --with-ust-include=PATH/include - plus --with-ust-lib=PATH/lib]) -AC_ARG_WITH(ust_include, [ --with-ust-include=PATH Specify directory for installed UST include files]) -AC_ARG_WITH(ust_lib, [ --with-ust-lib=PATH Specify the directory for the installed UST library]) - -case $with_ust in - no) - ustlibs= - ustinc= - ;; - "" | yes) - ustlibs=" -lust " - ustinc="" - ;; - *) - ustlibs="-L$with_ust/lib -lust" - ustinc="-I$with_ust/include " - ;; -esac -if test "x$with_ust_include" != x; then - ustinc="-I$with_ust_include " -fi -if test "x$with_ust_lib" != x; then - ustlibs="-L$with_ust_lib -lust" -fi - -if test "x$with_ust" != "xno"; then - saved_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS $ustinc" - AC_MSG_CHECKING([for ust]) - AC_TRY_COMPILE([ -#define CONFIG_UST_GDB_INTEGRATION -#include <ust/ust.h> - ],[], - [AC_MSG_RESULT([yes]); AC_DEFINE(HAVE_UST, 1, [Define if UST is available])], - [AC_MSG_RESULT([no]); ustlibs= ; ustinc= ]) - CFLAGS="$saved_CFLAGS" -fi - -# Flags needed for UST -AC_SUBST(ustlibs) -AC_SUBST(ustinc) - -AM_GDB_WARNINGS - -dnl dladdr is glibc-specific. It is used by thread-db.c but only for -dnl debugging messages. It lives in -ldl which is handled below so we don't -dnl use AC_CHECK_LIB (or AC_SEARCH_LIBS) here. Instead we just temporarily -dnl augment LIBS. -old_LIBS="$LIBS" -LIBS="$LIBS -ldl" -AC_CHECK_FUNCS(dladdr) -LIBS="$old_LIBS" - -libiberty_INIT - -AC_CHECK_DECLS([perror, vasprintf, vsnprintf]) - -AC_CHECK_MEMBERS([struct stat.st_blocks, struct stat.st_blksize]) - -# See if <sys/user.h> supports the %fs_base and %gs_bas amd64 segment registers. -# Older amd64 Linux's don't have the fs_base and gs_base members of -# `struct user_regs_struct'. -AC_CHECK_MEMBERS([struct user_regs_struct.fs_base, struct user_regs_struct.gs_base], - [], [], [#include <sys/types.h> -#include <sys/user.h>]) - - -AC_CHECK_TYPES(socklen_t, [], [], -[#include <sys/types.h> -#include <sys/socket.h> -]) - -case "${target}" in - *-android*) - # Starting with NDK version 9, <elf.h> actually includes definitions - # of Elf32_auxv_t and Elf64_auxv_t. But sadly, <elf.h> includes - # <sys/exec_elf.h> which defines some of the ELF types incorrectly, - # leading to conflicts with the defintions from <linux/elf.h>. - # This makes it impossible for us to include both <elf.h> and - # <linux/elf.h>, which means that, in practice, we do not have - # access to Elf32_auxv_t and Elf64_auxv_t on this platform. - # Therefore, do not try to auto-detect availability, as it would - # get it wrong on this platform. - ;; - *) - AC_CHECK_TYPES([Elf32_auxv_t, Elf64_auxv_t], [], [], - #include <elf.h> - ) -esac - -ACX_PKGVERSION([GDB]) -ACX_BUGURL([http://www.gnu.org/software/gdb/bugs/]) -AC_DEFINE_UNQUOTED([PKGVERSION], ["$PKGVERSION"], [Additional package description]) -AC_DEFINE_UNQUOTED([REPORT_BUGS_TO], ["$REPORT_BUGS_TO"], [Bug reporting address]) - -# Check for various supplementary target information (beyond the -# triplet) which might affect the choices in configure.srv. -case "${target}" in -changequote(,)dnl - i[34567]86-*-linux*) -changequote([,])dnl - AC_CACHE_CHECK([if building for x86-64], [gdb_cv_i386_is_x86_64], - [save_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS $CFLAGS" - AC_EGREP_CPP([got it], [ -#if __x86_64__ -got it -#endif - ], [gdb_cv_i386_is_x86_64=yes], - [gdb_cv_i386_is_x86_64=no]) - CPPFLAGS="$save_CPPFLAGS"]) - ;; - - x86_64-*-linux*) - AC_CACHE_CHECK([if building for x32], [gdb_cv_x86_is_x32], - [save_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS $CFLAGS" - AC_EGREP_CPP([got it], [ -#if __x86_64__ && __ILP32__ -got it -#endif - ], [gdb_cv_x86_is_x32=yes], - [gdb_cv_x86_is_x32=no]) - CPPFLAGS="$save_CPPFLAGS"]) - ;; - - m68k-*-*) - AC_CACHE_CHECK([if building for Coldfire], [gdb_cv_m68k_is_coldfire], - [save_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS $CFLAGS" - AC_EGREP_CPP([got it], [ -#ifdef __mcoldfire__ -got it -#endif - ], [gdb_cv_m68k_is_coldfire=yes], - [gdb_cv_m68k_is_coldfire=no]) - CPPFLAGS="$save_CPPFLAGS"]) - ;; -esac - -. ${srcdir}/configure.srv - -if test "${srv_mingwce}" = "yes"; then - LIBS="$LIBS -lws2" -elif test "${srv_mingw}" = "yes"; then - LIBS="$LIBS -lws2_32" -elif test "${srv_qnx}" = "yes"; then - LIBS="$LIBS -lsocket" -elif test "${srv_lynxos}" = "yes"; then - LIBS="$LIBS -lnetinet" -fi - -if test "${srv_mingw}" = "yes"; then - AC_DEFINE(USE_WIN32API, 1, - [Define if we should use the Windows API, instead of the - POSIX API. On Windows, we use the Windows API when - building for MinGW, but the POSIX API when building - for Cygwin.]) -fi - -if test "${srv_linux_usrregs}" = "yes"; then - AC_DEFINE(HAVE_LINUX_USRREGS, 1, - [Define if the target supports PTRACE_PEEKUSR for register ] - [access.]) -fi - -if test "${srv_linux_regsets}" = "yes"; then - AC_DEFINE(HAVE_LINUX_REGSETS, 1, - [Define if the target supports register sets.]) - - AC_MSG_CHECKING(for PTRACE_GETREGS) - AC_CACHE_VAL(gdbsrv_cv_have_ptrace_getregs, - [AC_TRY_COMPILE([#include <sys/ptrace.h>], - [PTRACE_GETREGS;], - [gdbsrv_cv_have_ptrace_getregs=yes], - [gdbsrv_cv_have_ptrace_getregs=no])]) - AC_MSG_RESULT($gdbsrv_cv_have_ptrace_getregs) - if test "${gdbsrv_cv_have_ptrace_getregs}" = "yes"; then - AC_DEFINE(HAVE_PTRACE_GETREGS, 1, - [Define if the target supports PTRACE_GETREGS for register ] - [access.]) - fi - - AC_MSG_CHECKING(for PTRACE_GETFPXREGS) - AC_CACHE_VAL(gdbsrv_cv_have_ptrace_getfpxregs, - [AC_TRY_COMPILE([#include <sys/ptrace.h>], - [PTRACE_GETFPXREGS;], - [gdbsrv_cv_have_ptrace_getfpxregs=yes], - [gdbsrv_cv_have_ptrace_getfpxregs=no])]) - AC_MSG_RESULT($gdbsrv_cv_have_ptrace_getfpxregs) - if test "${gdbsrv_cv_have_ptrace_getfpxregs}" = "yes"; then - AC_DEFINE(HAVE_PTRACE_GETFPXREGS, 1, - [Define if the target supports PTRACE_GETFPXREGS for extended ] - [register access.]) - fi -fi - -if test "${srv_linux_btrace}" = "yes"; then - AC_DEFINE(HAVE_LINUX_BTRACE, 1, - [Define if the target supports branch tracing.]) -fi - -if test "$ac_cv_header_sys_procfs_h" = yes; then - BFD_HAVE_SYS_PROCFS_TYPE(lwpid_t) - BFD_HAVE_SYS_PROCFS_TYPE(psaddr_t) - BFD_HAVE_SYS_PROCFS_TYPE(prgregset_t) - BFD_HAVE_SYS_PROCFS_TYPE(prfpregset_t) - BFD_HAVE_SYS_PROCFS_TYPE(elf_fpregset_t) -fi - -dnl Some systems (e.g., Android) have lwpid_t defined in libthread_db.h. -if test "$bfd_cv_have_sys_procfs_type_lwpid_t" != yes; then - GDBSERVER_HAVE_THREAD_DB_TYPE(lwpid_t) -fi - -dnl Some systems (e.g., Android) have psaddr_t defined in libthread_db.h. -if test "$bfd_cv_have_sys_procfs_type_psaddr_t" != yes; then - GDBSERVER_HAVE_THREAD_DB_TYPE(psaddr_t) -fi - -dnl Check for libdl, but do not add it to LIBS as only gdbserver -dnl needs it (and gdbreplay doesn't). -old_LIBS="$LIBS" -AC_CHECK_LIB(dl, dlopen) -LIBS="$old_LIBS" - -srv_thread_depfiles= -srv_libs= - -if test "$srv_linux_thread_db" = "yes"; then - if test "$ac_cv_lib_dl_dlopen" = "yes"; then - srv_libs="-ldl" - AC_MSG_CHECKING(for the dynamic export flag) - old_LDFLAGS="$LDFLAGS" - # Older GNU ld supports --export-dynamic but --dynamic-list may not be - # supported there. - RDYNAMIC="-Wl,--dynamic-list=${srcdir}/proc-service.list" - LDFLAGS="$LDFLAGS $RDYNAMIC" - AC_TRY_LINK([], [], - [found="-Wl,--dynamic-list" - RDYNAMIC='-Wl,--dynamic-list=$(srcdir)/proc-service.list'], - [RDYNAMIC="-rdynamic" - LDFLAGS="$old_LDFLAGS $RDYNAMIC" - AC_TRY_LINK([], [], - [found="-rdynamic"], - [found="no" - RDYNAMIC=""])]) - AC_SUBST(RDYNAMIC) - LDFLAGS="$old_LDFLAGS" - AC_MSG_RESULT($found) - else - srv_libs="-lthread_db" - fi - - srv_thread_depfiles="thread-db.o proc-service.o" - AC_DEFINE(USE_THREAD_DB, 1, [Define if we should use libthread_db.]) - AC_CACHE_CHECK([for TD_VERSION], gdbsrv_cv_have_td_version, - [AC_TRY_COMPILE([#include <thread_db.h>], [TD_VERSION;], - [gdbsrv_cv_have_td_version=yes], - [gdbsrv_cv_have_td_version=no])]) - if test "$gdbsrv_cv_have_td_version" = yes; then - AC_DEFINE(HAVE_TD_VERSION, 1, [Define if TD_VERSION is available.]) - fi -fi - -AC_ARG_WITH(libthread-db, -AS_HELP_STRING([--with-libthread-db=PATH], [use given libthread_db directly]), -[srv_libthread_db_path="${withval}" - srv_libs="$srv_libthread_db_path" -]) - -if test "$srv_libs" != "" -a "$srv_libs" != "-ldl"; then - AC_DEFINE(USE_LIBTHREAD_DB_DIRECTLY, 1, [Define if we should use libthread_db directly.]) -fi - -if test "$srv_xmlfiles" != ""; then - srv_xmlbuiltin="xml-builtin.o" - AC_DEFINE(USE_XML, 1, [Define if an XML target description is available.]) - - tmp_xmlfiles=$srv_xmlfiles - srv_xmlfiles="" - for f in $tmp_xmlfiles; do - srv_xmlfiles="$srv_xmlfiles \$(XML_DIR)/$f" - done -fi - -GDBSERVER_DEPFILES="$srv_regobj $srv_tgtobj $srv_hostio_err_objs $srv_thread_depfiles $srv_selftest_objs" -GDBSERVER_LIBS="$srv_libs" - -dnl Check whether the target supports __sync_*_compare_and_swap. -AC_CACHE_CHECK([whether the target supports __sync_*_compare_and_swap], - gdbsrv_cv_have_sync_builtins, [ -AC_TRY_LINK([], [int foo, bar; bar = __sync_val_compare_and_swap(&foo, 0, 1);], - gdbsrv_cv_have_sync_builtins=yes, - gdbsrv_cv_have_sync_builtins=no)]) -if test "$gdbsrv_cv_have_sync_builtins" = yes; then - AC_DEFINE(HAVE_SYNC_BUILTINS, 1, - [Define to 1 if the target supports __sync_*_compare_and_swap]) -fi - -dnl Check for -fvisibility=hidden support in the compiler. -saved_cflags="$CFLAGS" -CFLAGS="$CFLAGS -fvisibility=hidden" -AC_COMPILE_IFELSE([AC_LANG_PROGRAM([])], - [gdbsrv_cv_have_visibility_hidden=yes], - [gdbsrv_cv_have_visibility_hidden=no]) -CFLAGS="$saved_cflags" - -dnl Check if we can disable the virtual address space randomization. -dnl The functionality of setarch -R. -AC_CHECK_DECLS([ADDR_NO_RANDOMIZE],,, [#include <sys/personality.h>]) -define([PERSONALITY_TEST], [AC_LANG_PROGRAM([#include <sys/personality.h>], [ -# if !HAVE_DECL_ADDR_NO_RANDOMIZE -# define ADDR_NO_RANDOMIZE 0x0040000 -# endif - /* Test the flag could be set and stays set. */ - personality (personality (0xffffffff) | ADDR_NO_RANDOMIZE); - if (!(personality (personality (0xffffffff)) & ADDR_NO_RANDOMIZE)) - return 1])]) -AC_RUN_IFELSE([PERSONALITY_TEST], - [gdbsrv_cv_have_personality=true], - [gdbsrv_cv_have_personality=false], - [AC_LINK_IFELSE([PERSONALITY_TEST], - [gdbsrv_cv_have_personality=true], - [gdbsrv_cv_have_personality=false])]) -if $gdbsrv_cv_have_personality -then - AC_DEFINE([HAVE_PERSONALITY], 1, - [Define if you support the personality syscall.]) -fi - - -IPA_DEPFILES="" -extra_libraries="" - -# check whether to enable the inprocess agent -if test "$ipa_obj" != "" \ - -a "$gdbsrv_cv_have_sync_builtins" = yes \ - -a "$gdbsrv_cv_have_visibility_hidden" = yes; then - have_ipa=true -else - have_ipa=false -fi - -AC_ARG_ENABLE(inprocess-agent, -AS_HELP_STRING([--enable-inprocess-agent], [inprocess agent]), -[case "$enableval" in - yes) want_ipa=true ;; - no) want_ipa=false ;; - *) AC_MSG_ERROR([bad value $enableval for inprocess-agent]) ;; -esac], -[want_ipa=$have_ipa]) - -if $want_ipa ; then - if $have_ipa ; then - IPA_DEPFILES="$ipa_obj" - extra_libraries="$extra_libraries libinproctrace.so" - else - AC_MSG_ERROR([inprocess agent not supported for this target]) - fi -fi - -AC_SUBST(GDBSERVER_DEPFILES) -AC_SUBST(GDBSERVER_LIBS) -AC_SUBST(srv_xmlbuiltin) -AC_SUBST(srv_xmlfiles) -AC_SUBST(IPA_DEPFILES) -AC_SUBST(extra_libraries) - -GNULIB=build-gnulib-gdbserver/import - -GNULIB_STDINT_H= -if test x"$STDINT_H" != x; then - GNULIB_STDINT_H=$GNULIB/$STDINT_H -fi -AC_SUBST(GNULIB_STDINT_H) - -AC_CONFIG_FILES([Makefile]) - -AC_OUTPUT diff -Nru gdb-9.1/gdb/gdbserver/configure.srv gdb-10.2/gdb/gdbserver/configure.srv --- gdb-9.1/gdb/gdbserver/configure.srv 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/configure.srv 1970-01-01 00:00:00.000000000 +0000 @@ -1,390 +0,0 @@ -# Mappings from configuration triplets to gdbserver build options. -# This is invoked from the autoconf-generated configure script, to -# produce the appropriate Makefile substitutions. - -# This file sets the following shell variables: -# srv_regobj The register protocol appropriate for this target. -# srv_tgtobj Any other target-specific modules appropriate -# for this target. -# srv_hostio_err The object implementing the hostio_last_error -# target method. -# srv_xmlfiles All XML files which should be available for -# gdbserver in this configuration. -# ipa_obj Any other target-specific modules appropriate -# for this target's in-process agent. -# -# In addition, on GNU/Linux the following shell variables will be set: -# srv_linux_regsets Set to "yes" if ptrace(PTRACE_GETREGS) and friends -# may be available on this platform; unset otherwise. -# They will only be used if <sys/ptrace.h> defines -# PTRACE_GETREGS. -# srv_linux_usrregs Set to "yes" if we can get at registers via -# PTRACE_PEEKUSR / PTRACE_POKEUSR. - -# Default hostio_last_error implementation -srv_hostio_err_objs="hostio-errno.o" - -ipa_ppc_linux_regobj="powerpc-32l-ipa.o powerpc-altivec32l-ipa.o powerpc-vsx32l-ipa.o powerpc-isa205-32l-ipa.o powerpc-isa205-altivec32l-ipa.o powerpc-isa205-vsx32l-ipa.o powerpc-isa205-ppr-dscr-vsx32l-ipa.o powerpc-isa207-vsx32l-ipa.o powerpc-isa207-htm-vsx32l-ipa.o powerpc-e500l-ipa.o powerpc-64l-ipa.o powerpc-altivec64l-ipa.o powerpc-vsx64l-ipa.o powerpc-isa205-64l-ipa.o powerpc-isa205-altivec64l-ipa.o powerpc-isa205-vsx64l-ipa.o powerpc-isa205-ppr-dscr-vsx64l-ipa.o powerpc-isa207-vsx64l-ipa.o powerpc-isa207-htm-vsx64l-ipa.o" - -# Linux object files. This is so we don't have to repeat -# these files over and over again. -srv_linux_obj="linux-low.o linux-osdata.o linux-procfs.o linux-ptrace.o linux-waitpid.o linux-personality.o linux-namespaces.o fork-child.o fork-inferior.o" - -# Input is taken from the "${target}" variable. - -case "${target}" in - aarch64*-*-linux*) srv_tgtobj="linux-aarch64-low.o aarch64-linux-hw-point.o" - srv_tgtobj="$srv_tgtobj linux-aarch32-low.o" - srv_tgtobj="$srv_tgtobj linux-aarch32-tdesc.o" - srv_tgtobj="${srv_tgtobj} arch/aarch32.o" - srv_tgtobj="${srv_tgtobj} arch/arm.o" - srv_tgtobj="$srv_tgtobj aarch64-linux.o" - srv_tgtobj="$srv_tgtobj arch/aarch64-insn.o" - srv_tgtobj="$srv_tgtobj arch/aarch64.o" - srv_tgtobj="$srv_tgtobj linux-aarch64-tdesc.o" - srv_tgtobj="$srv_tgtobj aarch64-sve-linux-ptrace.o" - srv_tgtobj="${srv_tgtobj} $srv_linux_obj" - srv_linux_regsets=yes - srv_linux_thread_db=yes - ipa_obj="linux-aarch64-ipa.o" - ipa_obj="${ipa_obj} linux-aarch64-tdesc-ipa.o" - ipa_obj="${ipa_obj} arch/aarch64-ipa.o" - ;; - arm*-*-linux*) srv_tgtobj="$srv_linux_obj linux-arm-low.o" - srv_tgtobj="$srv_tgtobj linux-arm-tdesc.o" - srv_tgtobj="$srv_tgtobj linux-aarch32-low.o" - srv_tgtobj="$srv_tgtobj linux-aarch32-tdesc.o" - srv_tgtobj="${srv_tgtobj} arch/aarch32.o" - srv_tgtobj="${srv_tgtobj} arch/arm.o" - srv_tgtobj="${srv_tgtobj} arch/arm-linux.o" - srv_tgtobj="${srv_tgtobj} arch/arm-get-next-pcs.o" - srv_linux_usrregs=yes - srv_linux_regsets=yes - srv_linux_thread_db=yes - ;; - arm*-*-mingw32ce*) srv_regobj=reg-arm.o - srv_tgtobj="win32-low.o win32-arm-low.o" - srv_tgtobj="${srv_tgtobj} wincecompat.o" - # hostio_last_error implementation is in win32-low.c - srv_hostio_err_objs="" - srv_mingw=yes - srv_mingwce=yes - ;; - bfin-*-*linux*) srv_regobj=reg-bfin.o - srv_tgtobj="$srv_linux_obj linux-bfin-low.o" - srv_linux_usrregs=yes - srv_linux_thread_db=yes - ;; - crisv32-*-linux*) srv_regobj=reg-crisv32.o - srv_tgtobj="$srv_linux_obj linux-crisv32-low.o" - srv_linux_regsets=yes - srv_linux_thread_db=yes - ;; - cris-*-linux*) srv_regobj=reg-cris.o - srv_tgtobj="$srv_linux_obj linux-cris-low.o" - srv_linux_usrregs=yes - srv_linux_thread_db=yes - ;; - i[34567]86-*-cygwin*) srv_regobj="" - srv_tgtobj="x86-low.o x86-dregs.o win32-low.o win32-i386-low.o" - srv_tgtobj="${srv_tgtobj} arch/i386.o" - ;; - i[34567]86-*-linux*) srv_tgtobj="${srv_tgtobj} arch/i386.o" - srv_tgtobj="${srv_tgtobj} $srv_linux_obj linux-x86-low.o x86-low.o x86-dregs.o i387-fp.o" - srv_tgtobj="${srv_tgtobj} linux-x86-tdesc.o" - srv_tgtobj="${srv_tgtobj} linux-btrace.o x86-linux.o" - srv_tgtobj="${srv_tgtobj} x86-linux-dregs.o" - srv_linux_usrregs=yes - srv_linux_regsets=yes - srv_linux_thread_db=yes - srv_linux_btrace=yes - ipa_obj="linux-i386-ipa.o linux-x86-tdesc-ipa.o" - ipa_obj="${ipa_obj} arch/i386-ipa.o" - ;; - i[34567]86-*-lynxos*) srv_regobj="" - srv_tgtobj="lynx-low.o lynx-i386-low.o fork-child.o fork-inferior.o" - srv_tgtobj="${srv_tgtobj} arch/i386.o" - srv_lynxos=yes - ;; - i[34567]86-*-mingw32ce*) - srv_regobj="" - srv_tgtobj="x86-low.o x86-dregs.o win32-low.o win32-i386-low.o" - srv_tgtobj="${srv_tgtobj} arch/i386.o" - srv_tgtobj="${srv_tgtobj} wincecompat.o" - # hostio_last_error implementation is in win32-low.c - srv_hostio_err_objs="" - srv_mingw=yes - srv_mingwce=yes - ;; - i[34567]86-*-mingw*) srv_regobj="" - srv_tgtobj="x86-low.o x86-dregs.o win32-low.o win32-i386-low.o" - srv_tgtobj="${srv_tgtobj} arch/i386.o" - srv_mingw=yes - ;; - i[34567]86-*-nto*) srv_regobj="" - srv_tgtobj="nto-low.o nto-x86-low.o arch/i386.o" - srv_qnx="yes" - ;; - ia64-*-linux*) srv_regobj=reg-ia64.o - srv_tgtobj="$srv_linux_obj linux-ia64-low.o" - srv_linux_usrregs=yes - ;; - m32r*-*-linux*) srv_regobj=reg-m32r.o - srv_tgtobj="$srv_linux_obj linux-m32r-low.o" - srv_linux_usrregs=yes - srv_linux_thread_db=yes - ;; - m68*-*-linux*) if test "$gdb_cv_m68k_is_coldfire" = yes; then - srv_regobj=reg-cf.o - else - srv_regobj=reg-m68k.o - fi - srv_tgtobj="$srv_linux_obj linux-m68k-low.o" - srv_linux_usrregs=yes - srv_linux_regsets=yes - srv_linux_thread_db=yes - ;; - m68*-*-uclinux*) if test "$gdb_cv_m68k_is_coldfire" = yes; then - srv_regobj=reg-cf.o - else - srv_regobj=reg-m68k.o - fi - srv_tgtobj="$srv_linux_obj linux-m68k-low.o" - srv_linux_usrregs=yes - srv_linux_regsets=yes - srv_linux_thread_db=yes - ;; - mips*-*-linux*) srv_regobj="mips-linux.o" - srv_regobj="${srv_regobj} mips-dsp-linux.o" - srv_regobj="${srv_regobj} mips64-linux.o" - srv_regobj="${srv_regobj} mips64-dsp-linux.o" - srv_tgtobj="$srv_linux_obj linux-mips-low.o" - srv_tgtobj="${srv_tgtobj} mips-linux-watch.o" - srv_xmlfiles="mips-linux.xml" - srv_xmlfiles="${srv_xmlfiles} mips-dsp-linux.xml" - srv_xmlfiles="${srv_xmlfiles} mips-cpu.xml" - srv_xmlfiles="${srv_xmlfiles} mips-cp0.xml" - srv_xmlfiles="${srv_xmlfiles} mips-fpu.xml" - srv_xmlfiles="${srv_xmlfiles} mips-dsp.xml" - srv_xmlfiles="${srv_xmlfiles} mips64-linux.xml" - srv_xmlfiles="${srv_xmlfiles} mips64-dsp-linux.xml" - srv_xmlfiles="${srv_xmlfiles} mips64-cpu.xml" - srv_xmlfiles="${srv_xmlfiles} mips64-cp0.xml" - srv_xmlfiles="${srv_xmlfiles} mips64-fpu.xml" - srv_xmlfiles="${srv_xmlfiles} mips64-dsp.xml" - srv_linux_regsets=yes - srv_linux_usrregs=yes - srv_linux_thread_db=yes - ;; - nios2*-*-linux*) srv_regobj="nios2-linux.o" - srv_tgtobj="$srv_linux_obj linux-nios2-low.o" - srv_xmlfiles="nios2-linux.xml" - srv_xmlfiles="${srv_xmlfiles} nios2-cpu.xml" - srv_linux_regsets=yes - srv_linux_usrregs=yes - srv_linux_thread_db=yes - ;; - powerpc*-*-linux*) srv_regobj="powerpc-32l.o" - srv_regobj="${srv_regobj} powerpc-altivec32l.o" - srv_regobj="${srv_regobj} powerpc-vsx32l.o" - srv_regobj="${srv_regobj} powerpc-isa205-32l.o" - srv_regobj="${srv_regobj} powerpc-isa205-altivec32l.o" - srv_regobj="${srv_regobj} powerpc-isa205-vsx32l.o" - srv_regobj="${srv_regobj} powerpc-isa205-ppr-dscr-vsx32l.o" - srv_regobj="${srv_regobj} powerpc-isa207-vsx32l.o" - srv_regobj="${srv_regobj} powerpc-isa207-htm-vsx32l.o" - srv_regobj="${srv_regobj} powerpc-e500l.o" - srv_regobj="${srv_regobj} powerpc-64l.o" - srv_regobj="${srv_regobj} powerpc-altivec64l.o" - srv_regobj="${srv_regobj} powerpc-vsx64l.o" - srv_regobj="${srv_regobj} powerpc-isa205-64l.o" - srv_regobj="${srv_regobj} powerpc-isa205-altivec64l.o" - srv_regobj="${srv_regobj} powerpc-isa205-vsx64l.o" - srv_regobj="${srv_regobj} powerpc-isa205-ppr-dscr-vsx64l.o" - srv_regobj="${srv_regobj} powerpc-isa207-vsx64l.o" - srv_regobj="${srv_regobj} powerpc-isa207-htm-vsx64l.o" - srv_tgtobj="$srv_linux_obj linux-ppc-low.o ppc-linux.o" - srv_tgtobj="${srv_tgtobj} arch/ppc-linux-common.o" - srv_xmlfiles="rs6000/powerpc-32l.xml" - srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-altivec32l.xml" - srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-vsx32l.xml" - srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-isa205-32l.xml" - srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-isa205-altivec32l.xml" - srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-isa205-vsx32l.xml" - srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-isa205-ppr-dscr-vsx32l.xml" - srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-isa207-vsx32l.xml" - srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-isa207-htm-vsx32l.xml" - srv_xmlfiles="${srv_xmlfiles} rs6000/power-altivec.xml" - srv_xmlfiles="${srv_xmlfiles} rs6000/power-vsx.xml" - srv_xmlfiles="${srv_xmlfiles} rs6000/power-core.xml" - srv_xmlfiles="${srv_xmlfiles} rs6000/power-linux.xml" - srv_xmlfiles="${srv_xmlfiles} rs6000/power-fpu.xml" - srv_xmlfiles="${srv_xmlfiles} rs6000/power-fpu-isa205.xml" - srv_xmlfiles="${srv_xmlfiles} rs6000/power-dscr.xml" - srv_xmlfiles="${srv_xmlfiles} rs6000/power-ppr.xml" - srv_xmlfiles="${srv_xmlfiles} rs6000/power-tar.xml" - srv_xmlfiles="${srv_xmlfiles} rs6000/power-ebb.xml" - srv_xmlfiles="${srv_xmlfiles} rs6000/power-linux-pmu.xml" - srv_xmlfiles="${srv_xmlfiles} rs6000/power-htm-spr.xml" - srv_xmlfiles="${srv_xmlfiles} rs6000/power-htm-core.xml" - srv_xmlfiles="${srv_xmlfiles} rs6000/power-htm-fpu.xml" - srv_xmlfiles="${srv_xmlfiles} rs6000/power-htm-altivec.xml" - srv_xmlfiles="${srv_xmlfiles} rs6000/power-htm-vsx.xml" - srv_xmlfiles="${srv_xmlfiles} rs6000/power-htm-ppr.xml" - srv_xmlfiles="${srv_xmlfiles} rs6000/power-htm-dscr.xml" - srv_xmlfiles="${srv_xmlfiles} rs6000/power-htm-tar.xml" - srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-e500l.xml" - srv_xmlfiles="${srv_xmlfiles} rs6000/power-spe.xml" - srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-64l.xml" - srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-altivec64l.xml" - srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-vsx64l.xml" - srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-isa205-64l.xml" - srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-isa205-altivec64l.xml" - srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-isa205-vsx64l.xml" - srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-isa205-ppr-dscr-vsx64l.xml" - srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-isa207-vsx64l.xml" - srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-isa207-htm-vsx64l.xml" - srv_xmlfiles="${srv_xmlfiles} rs6000/power64-core.xml" - srv_xmlfiles="${srv_xmlfiles} rs6000/power64-linux.xml" - srv_xmlfiles="${srv_xmlfiles} rs6000/power64-htm-core.xml" - srv_linux_usrregs=yes - srv_linux_regsets=yes - srv_linux_thread_db=yes - ipa_obj="${ipa_ppc_linux_regobj} linux-ppc-ipa.o" - ;; - powerpc-*-lynxos*) srv_regobj="powerpc-32.o" - srv_tgtobj="lynx-low.o lynx-ppc-low.o" - srv_xmlfiles="rs6000/powerpc-32.xml" - srv_xmlfiles="${srv_xmlfiles} rs6000/power-core.xml" - srv_xmlfiles="${srv_xmlfiles} rs6000/power-fpu.xml" - srv_lynxos=yes - ;; - s390*-*-linux*) srv_regobj="s390-linux32.o" - srv_regobj="${srv_regobj} s390-linux32v1.o" - srv_regobj="${srv_regobj} s390-linux32v2.o" - srv_regobj="${srv_regobj} s390-linux64.o" - srv_regobj="${srv_regobj} s390-linux64v1.o" - srv_regobj="${srv_regobj} s390-linux64v2.o" - srv_regobj="${srv_regobj} s390-te-linux64.o" - srv_regobj="${srv_regobj} s390-vx-linux64.o" - srv_regobj="${srv_regobj} s390-tevx-linux64.o" - srv_regobj="${srv_regobj} s390-gs-linux64.o" - srv_regobj="${srv_regobj} s390x-linux64.o" - srv_regobj="${srv_regobj} s390x-linux64v1.o" - srv_regobj="${srv_regobj} s390x-linux64v2.o" - srv_regobj="${srv_regobj} s390x-te-linux64.o" - srv_regobj="${srv_regobj} s390x-vx-linux64.o" - srv_regobj="${srv_regobj} s390x-tevx-linux64.o" - srv_regobj="${srv_regobj} s390x-gs-linux64.o" - srv_tgtobj="$srv_linux_obj linux-s390-low.o" - srv_xmlfiles="s390-linux32.xml" - srv_xmlfiles="${srv_xmlfiles} s390-linux32v1.xml" - srv_xmlfiles="${srv_xmlfiles} s390-linux32v2.xml" - srv_xmlfiles="${srv_xmlfiles} s390-linux64.xml" - srv_xmlfiles="${srv_xmlfiles} s390-linux64v1.xml" - srv_xmlfiles="${srv_xmlfiles} s390-linux64v2.xml" - srv_xmlfiles="${srv_xmlfiles} s390-te-linux64.xml" - srv_xmlfiles="${srv_xmlfiles} s390-vx-linux64.xml" - srv_xmlfiles="${srv_xmlfiles} s390-tevx-linux64.xml" - srv_xmlfiles="${srv_xmlfiles} s390-gs-linux64.xml" - srv_xmlfiles="${srv_xmlfiles} s390x-linux64.xml" - srv_xmlfiles="${srv_xmlfiles} s390x-linux64v1.xml" - srv_xmlfiles="${srv_xmlfiles} s390x-linux64v2.xml" - srv_xmlfiles="${srv_xmlfiles} s390x-te-linux64.xml" - srv_xmlfiles="${srv_xmlfiles} s390x-vx-linux64.xml" - srv_xmlfiles="${srv_xmlfiles} s390x-tevx-linux64.xml" - srv_xmlfiles="${srv_xmlfiles} s390x-gs-linux64.xml" - srv_xmlfiles="${srv_xmlfiles} s390-core32.xml" - srv_xmlfiles="${srv_xmlfiles} s390-core64.xml" - srv_xmlfiles="${srv_xmlfiles} s390x-core64.xml" - srv_xmlfiles="${srv_xmlfiles} s390-acr.xml" - srv_xmlfiles="${srv_xmlfiles} s390-fpr.xml" - srv_xmlfiles="${srv_xmlfiles} s390-tdb.xml" - srv_xmlfiles="${srv_xmlfiles} s390-vx.xml" - srv_xmlfiles="${srv_xmlfiles} s390-gs.xml" - srv_xmlfiles="${srv_xmlfiles} s390-gsbc.xml" - srv_linux_usrregs=yes - srv_linux_regsets=yes - srv_linux_thread_db=yes - ipa_obj="linux-s390-ipa.o" - ipa_obj="${ipa_obj} s390-linux32-ipa.o" - ipa_obj="${ipa_obj} s390-linux32v1-ipa.o" - ipa_obj="${ipa_obj} s390-linux32v2-ipa.o" - ipa_obj="${ipa_obj} s390-linux64-ipa.o" - ipa_obj="${ipa_obj} s390-linux64v1-ipa.o" - ipa_obj="${ipa_obj} s390-linux64v2-ipa.o" - ipa_obj="${ipa_obj} s390-vx-linux64-ipa.o" - ipa_obj="${ipa_obj} s390-te-linux64-ipa.o" - ipa_obj="${ipa_obj} s390-tevx-linux64-ipa.o" - ipa_obj="${ipa_obj} s390-gs-linux64-ipa.o" - ipa_obj="${ipa_obj} s390x-linux64-ipa.o" - ipa_obj="${ipa_obj} s390x-linux64v1-ipa.o" - ipa_obj="${ipa_obj} s390x-linux64v2-ipa.o" - ipa_obj="${ipa_obj} s390x-vx-linux64-ipa.o" - ipa_obj="${ipa_obj} s390x-te-linux64-ipa.o" - ipa_obj="${ipa_obj} s390x-tevx-linux64-ipa.o" - ipa_obj="${ipa_obj} s390x-gs-linux64-ipa.o" - ;; - sh*-*-linux*) srv_regobj=reg-sh.o - srv_tgtobj="$srv_linux_obj linux-sh-low.o" - srv_linux_usrregs=yes - srv_linux_regsets=yes - srv_linux_thread_db=yes - ;; - sparc*-*-linux*) srv_regobj=reg-sparc64.o - srv_tgtobj="$srv_linux_obj linux-sparc-low.o" - srv_linux_regsets=yes - srv_linux_thread_db=yes - ;; - tic6x-*-uclinux) if $development; then - srv_regobj="tic6x-c64xp-linux.o" - srv_regobj="${srv_regobj} tic6x-c64x-linux.o" - srv_regobj="${srv_regobj} tic6x-c62x-linux.o" - else - srv_regobj="" - fi - srv_tgtobj="$srv_linux_obj linux-tic6x-low.o" - srv_tgtobj="${srv_tgtobj} arch/tic6x.o" - srv_linux_regsets=yes - srv_linux_usrregs=yes - srv_linux_thread_db=yes - ;; - x86_64-*-linux*) srv_tgtobj="$srv_linux_obj linux-x86-low.o x86-low.o" - srv_tgtobj="${srv_tgtobj} x86-dregs.o i387-fp.o" - srv_tgtobj="${srv_tgtobj} arch/i386.o arch/amd64.o" - srv_tgtobj="${srv_tgtobj} linux-x86-tdesc.o" - srv_tgtobj="${srv_tgtobj} linux-btrace.o x86-linux.o" - srv_tgtobj="${srv_tgtobj} x86-linux-dregs.o" - srv_tgtobj="${srv_tgtobj} amd64-linux-siginfo.o" - srv_linux_usrregs=yes # This is for i386 progs. - srv_linux_regsets=yes - srv_linux_thread_db=yes - srv_linux_btrace=yes - ipa_obj="linux-amd64-ipa.o linux-x86-tdesc-ipa.o" - ipa_obj="${ipa_obj} arch/amd64-ipa.o" - ;; - x86_64-*-mingw*) srv_regobj="" - srv_tgtobj="x86-low.o x86-dregs.o i387-fp.o win32-low.o win32-i386-low.o" - srv_tgtobj="${srv_tgtobj} arch/amd64.o" - srv_mingw=yes - ;; - x86_64-*-cygwin*) srv_regobj="" - srv_tgtobj="x86-low.o x86-dregs.o i387-fp.o win32-low.o win32-i386-low.o" - srv_tgtobj="${srv_tgtobj} arch/amd64.o" - ;; - - xtensa*-*-linux*) srv_regobj=reg-xtensa.o - srv_tgtobj="$srv_linux_obj linux-xtensa-low.o" - srv_linux_regsets=yes - srv_linux_thread_db=yes - ;; - tilegx-*-linux*) srv_regobj=reg-tilegx.o - srv_regobj="${srv_regobj} reg-tilegx32.o" - srv_tgtobj="$srv_linux_obj linux-tile-low.o" - srv_linux_regsets=yes - srv_linux_thread_db=yes - ;; - *) echo "Error: target not supported by gdbserver." - exit 1 - ;; -esac diff -Nru gdb-9.1/gdb/gdbserver/debug.c gdb-10.2/gdb/gdbserver/debug.c --- gdb-9.1/gdb/gdbserver/debug.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/debug.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,140 +0,0 @@ -/* Debugging routines for the remote server for GDB. - Copyright (C) 2014-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "server.h" -#include <chrono> - -#if !defined (IN_PROCESS_AGENT) -int remote_debug = 0; -#endif - -/* Output file for debugging. Default to standard error. */ -FILE *debug_file = stderr; - -/* See debug.h. */ -int debug_threads; - -/* Include timestamps in debugging output. */ -int debug_timestamp; - -#if !defined (IN_PROCESS_AGENT) - -/* See debug.h. */ - -void -debug_set_output (const char *new_debug_file) -{ - /* Close any existing file and reset to standard error. */ - if (debug_file != stderr) - { - fclose (debug_file); - } - debug_file = stderr; - - /* Catch empty filenames. */ - if (new_debug_file == nullptr || strlen (new_debug_file) == 0) - return; - - FILE *fptr = fopen (new_debug_file, "w"); - - if (fptr == nullptr) - { - debug_printf ("Cannot open %s for writing. %s. Switching to stderr.\n", - new_debug_file, safe_strerror (errno)); - return; - } - - debug_file = fptr; -} - -#endif - -/* Print a debugging message. - If the text begins a new line it is preceded by a timestamp. - We don't get fancy with newline checking, we just check whether the - previous call ended with "\n". */ - -void -debug_vprintf (const char *format, va_list ap) -{ -#if !defined (IN_PROCESS_AGENT) - /* N.B. Not thread safe, and can't be used, as is, with IPA. */ - static int new_line = 1; - - if (debug_timestamp && new_line) - { - using namespace std::chrono; - - steady_clock::time_point now = steady_clock::now (); - seconds s = duration_cast<seconds> (now.time_since_epoch ()); - microseconds us = duration_cast<microseconds> (now.time_since_epoch ()) - s; - - fprintf (debug_file, "%ld.%06ld ", (long) s.count (), (long) us.count ()); - } -#endif - - vfprintf (debug_file, format, ap); - -#if !defined (IN_PROCESS_AGENT) - if (*format) - new_line = format[strlen (format) - 1] == '\n'; -#endif -} - -/* Flush debugging output. - This is called, for example, when starting an inferior to ensure all debug - output thus far appears before any inferior output. */ - -void -debug_flush (void) -{ - fflush (debug_file); -} - -/* Notify the user that the code is entering FUNCTION_NAME. - FUNCTION_NAME is the name of the calling function, or NULL if unknown. - - This is intended to be called via the debug_enter macro. */ - -void -do_debug_enter (const char *function_name) -{ - if (function_name != NULL) - debug_printf (">>>> entering %s\n", function_name); -} - -/* Notify the user that the code is exiting FUNCTION_NAME. - FUNCTION_NAME is the name of the calling function, or NULL if unknown. - - This is intended to be called via the debug_exit macro. */ - -void -do_debug_exit (const char *function_name) -{ - if (function_name != NULL) - debug_printf ("<<<< exiting %s\n", function_name); -} - -/* See debug.h. */ - -ssize_t -debug_write (const void *buf, size_t nbyte) -{ - int fd = fileno (debug_file); - return write (fd, buf, nbyte); -} diff -Nru gdb-9.1/gdb/gdbserver/debug.h gdb-10.2/gdb/gdbserver/debug.h --- gdb-9.1/gdb/gdbserver/debug.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/debug.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,65 +0,0 @@ -/* Debugging routines for the remote server for GDB. - Copyright (C) 2014-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef GDBSERVER_DEBUG_H -#define GDBSERVER_DEBUG_H - -#if !defined (IN_PROCESS_AGENT) -extern int remote_debug; - -/* Switch all debug output to DEBUG_FILE. If DEBUG_FILE is nullptr or an - empty string, or if the file cannot be opened, then debug output is sent to - stderr. */ -void debug_set_output (const char *debug_file); -#endif - -extern int using_threads; - -/* Enable miscellaneous debugging output. The name is historical - it - was originally used to debug LinuxThreads support. */ - -extern int debug_threads; - -extern int debug_timestamp; - -void debug_flush (void); -void do_debug_enter (const char *function_name); -void do_debug_exit (const char *function_name); - -/* Async signal safe debug output function that calls write directly. */ -ssize_t debug_write (const void *buf, size_t nbyte); - -/* These macros are for use in major functions that produce a lot of - debugging output. They help identify in the mass of debugging output - when these functions enter and exit. debug_enter is intended to be - called at the start of a function, before any other debugging output. - debug_exit is intended to be called at the end of the same function, - after all debugging output. */ -#ifdef FUNCTION_NAME -#define debug_enter() \ - do { do_debug_enter (FUNCTION_NAME); } while (0) -#define debug_exit() \ - do { do_debug_exit (FUNCTION_NAME); } while (0) -#else -#define debug_enter() \ - do { } while (0) -#define debug_exit() \ - do { } while (0) -#endif - -#endif /* GDBSERVER_DEBUG_H */ diff -Nru gdb-9.1/gdb/gdbserver/dll.c gdb-10.2/gdb/gdbserver/dll.c --- gdb-9.1/gdb/gdbserver/dll.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/dll.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,80 +0,0 @@ -/* Copyright (C) 2002-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "server.h" -#include "dll.h" - -#include <algorithm> - -/* An "unspecified" CORE_ADDR, for match_dll. */ -#define UNSPECIFIED_CORE_ADDR (~(CORE_ADDR) 0) - -std::list<dll_info> all_dlls; -int dlls_changed; - -/* Record a newly loaded DLL at BASE_ADDR. */ - -void -loaded_dll (const char *name, CORE_ADDR base_addr) -{ - all_dlls.emplace_back (name != NULL ? name : "", base_addr); - dlls_changed = 1; -} - -/* Record that the DLL with NAME and BASE_ADDR has been unloaded. */ - -void -unloaded_dll (const char *name, CORE_ADDR base_addr) -{ - auto pred = [&] (const dll_info &dll) - { - if (base_addr != UNSPECIFIED_CORE_ADDR - && base_addr == dll.base_addr) - return true; - - if (name != NULL && dll.name == name) - return true; - - return false; - }; - - auto iter = std::find_if (all_dlls.begin (), all_dlls.end (), pred); - - if (iter == all_dlls.end ()) - /* For some inferiors we might get unloaded_dll events without having - a corresponding loaded_dll. In that case, the dll cannot be found - in ALL_DLL, and there is nothing further for us to do. - - This has been observed when running 32bit executables on Windows64 - (i.e. through WOW64, the interface between the 32bits and 64bits - worlds). In that case, the inferior always does some strange - unloading of unnamed dll. */ - return; - else - { - /* DLL has been found so remove the entry and free associated - resources. */ - all_dlls.erase (iter); - dlls_changed = 1; - } -} - -void -clear_dlls (void) -{ - all_dlls.clear (); -} diff -Nru gdb-9.1/gdb/gdbserver/dll.h gdb-10.2/gdb/gdbserver/dll.h --- gdb-9.1/gdb/gdbserver/dll.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/dll.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,40 +0,0 @@ -/* Copyright (C) 1993-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef GDBSERVER_DLL_H -#define GDBSERVER_DLL_H - -#include <list> - -struct dll_info -{ - dll_info (const std::string &name_, CORE_ADDR base_addr_) - : name (name_), base_addr (base_addr_) - {} - - std::string name; - CORE_ADDR base_addr; -}; - -extern std::list<dll_info> all_dlls; -extern int dlls_changed; - -extern void clear_dlls (void); -extern void loaded_dll (const char *name, CORE_ADDR base_addr); -extern void unloaded_dll (const char *name, CORE_ADDR base_addr); - -#endif /* GDBSERVER_DLL_H */ diff -Nru gdb-9.1/gdb/gdbserver/event-loop.c gdb-10.2/gdb/gdbserver/event-loop.c --- gdb-9.1/gdb/gdbserver/event-loop.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/event-loop.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,567 +0,0 @@ -/* Event loop machinery for the remote server for GDB. - Copyright (C) 1999-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -/* Based on src/gdb/event-loop.c. */ - -#include "server.h" - -#include <sys/types.h> -#include "gdbsupport/gdb_sys_time.h" - -#ifdef USE_WIN32API -#include <windows.h> -#include <io.h> -#endif - -#include <unistd.h> -#include <queue> - -typedef int (event_handler_func) (gdb_fildes_t); - -/* Tell create_file_handler what events we are interested in. */ - -#define GDB_READABLE (1<<1) -#define GDB_WRITABLE (1<<2) -#define GDB_EXCEPTION (1<<3) - -/* Events are queued by on the event_queue and serviced later - on by do_one_event. An event can be, for instance, a file - descriptor becoming ready to be read. Servicing an event simply - means that the procedure PROC will be called. We have 2 queues, - one for file handlers that we listen to in the event loop, and one - for the file handlers+events that are ready. The procedure PROC - associated with each event is always the same (handle_file_event). - Its duty is to invoke the handler associated with the file - descriptor whose state change generated the event, plus doing other - cleanups and such. */ - -struct gdb_event - { - /* Procedure to call to service this event. */ - event_handler_func *proc; - - /* File descriptor that is ready. */ - gdb_fildes_t fd; - }; - -/* Information about each file descriptor we register with the event - loop. */ - -typedef struct file_handler - { - /* File descriptor. */ - gdb_fildes_t fd; - - /* Events we want to monitor. */ - int mask; - - /* Events that have been seen since the last time. */ - int ready_mask; - - /* Procedure to call when fd is ready. */ - handler_func *proc; - - /* Argument to pass to proc. */ - gdb_client_data client_data; - - /* Was an error detected on this fd? */ - int error; - - /* Next registered file descriptor. */ - struct file_handler *next_file; - } -file_handler; - -typedef gdb::unique_xmalloc_ptr<gdb_event> gdb_event_up; - -static std::queue<gdb_event_up, std::list<gdb_event_up>> event_queue; - -/* Gdb_notifier is just a list of file descriptors gdb is interested - in. These are the input file descriptor, and the target file - descriptor. Each of the elements in the gdb_notifier list is - basically a description of what kind of events gdb is interested - in, for each fd. */ - -static struct - { - /* Ptr to head of file handler list. */ - file_handler *first_file_handler; - - /* Masks to be used in the next call to select. Bits are set in - response to calls to create_file_handler. */ - fd_set check_masks[3]; - - /* What file descriptors were found ready by select. */ - fd_set ready_masks[3]; - - /* Number of valid bits (highest fd value + 1). (for select) */ - int num_fds; - } -gdb_notifier; - -/* Callbacks are just routines that are executed before waiting for the - next event. In GDB this is struct gdb_timer. We don't need timers - so rather than copy all that complexity in gdbserver, we provide what - we need, but we do so in a way that if/when the day comes that we need - that complexity, it'll be easier to add - replace callbacks with timers - and use a delta of zero (which is all gdb currently uses timers for anyway). - - PROC will be executed before gdbserver goes to sleep to wait for the - next event. */ - -struct callback_event - { - int id; - callback_handler_func *proc; - gdb_client_data data; - struct callback_event *next; - }; - -/* Table of registered callbacks. */ - -static struct - { - struct callback_event *first; - struct callback_event *last; - - /* Id of the last callback created. */ - int num_callbacks; - } -callback_list; - -void -initialize_event_loop (void) -{ -} - -/* Process one event. If an event was processed, 1 is returned - otherwise 0 is returned. Scan the queue from head to tail, - processing therefore the high priority events first, by invoking - the associated event handler procedure. */ - -static int -process_event (void) -{ - /* Let's get rid of the event from the event queue. We need to - do this now because while processing the event, since the - proc function could end up jumping out to the caller of this - function. In that case, we would have on the event queue an - event which has been processed, but not deleted. */ - if (!event_queue.empty ()) - { - gdb_event_up event_ptr = std::move (event_queue.front ()); - event_queue.pop (); - - event_handler_func *proc = event_ptr->proc; - gdb_fildes_t fd = event_ptr->fd; - - /* Now call the procedure associated with the event. */ - if ((*proc) (fd)) - return -1; - return 1; - } - - /* This is the case if there are no event on the event queue. */ - return 0; -} - -/* Append PROC to the callback list. - The result is the "id" of the callback that can be passed back to - delete_callback_event. */ - -int -append_callback_event (callback_handler_func *proc, gdb_client_data data) -{ - struct callback_event *event_ptr = XNEW (struct callback_event); - - event_ptr->id = callback_list.num_callbacks++; - event_ptr->proc = proc; - event_ptr->data = data; - event_ptr->next = NULL; - if (callback_list.first == NULL) - callback_list.first = event_ptr; - if (callback_list.last != NULL) - callback_list.last->next = event_ptr; - callback_list.last = event_ptr; - return event_ptr->id; -} - -/* Delete callback ID. - It is not an error callback ID doesn't exist. */ - -void -delete_callback_event (int id) -{ - struct callback_event **p; - - for (p = &callback_list.first; *p != NULL; p = &(*p)->next) - { - struct callback_event *event_ptr = *p; - - if (event_ptr->id == id) - { - *p = event_ptr->next; - if (event_ptr == callback_list.last) - callback_list.last = NULL; - free (event_ptr); - break; - } - } -} - -/* Run the next callback. - The result is 1 if a callback was called and event processing - should continue, -1 if the callback wants the event loop to exit, - and 0 if there are no more callbacks. */ - -static int -process_callback (void) -{ - struct callback_event *event_ptr; - - event_ptr = callback_list.first; - if (event_ptr != NULL) - { - callback_handler_func *proc = event_ptr->proc; - gdb_client_data data = event_ptr->data; - - /* Remove the event before calling PROC, - more events may get added by PROC. */ - callback_list.first = event_ptr->next; - if (callback_list.first == NULL) - callback_list.last = NULL; - free (event_ptr); - if ((*proc) (data)) - return -1; - return 1; - } - - return 0; -} - -/* Add a file handler/descriptor to the list of descriptors we are - interested in. FD is the file descriptor for the file/stream to be - listened to. MASK is a combination of READABLE, WRITABLE, - EXCEPTION. PROC is the procedure that will be called when an event - occurs for FD. CLIENT_DATA is the argument to pass to PROC. */ - -static void -create_file_handler (gdb_fildes_t fd, int mask, handler_func *proc, - gdb_client_data client_data) -{ - file_handler *file_ptr; - - /* Do we already have a file handler for this file? (We may be - changing its associated procedure). */ - for (file_ptr = gdb_notifier.first_file_handler; - file_ptr != NULL; - file_ptr = file_ptr->next_file) - if (file_ptr->fd == fd) - break; - - /* It is a new file descriptor. Add it to the list. Otherwise, - just change the data associated with it. */ - if (file_ptr == NULL) - { - file_ptr = XNEW (struct file_handler); - file_ptr->fd = fd; - file_ptr->ready_mask = 0; - file_ptr->next_file = gdb_notifier.first_file_handler; - gdb_notifier.first_file_handler = file_ptr; - - if (mask & GDB_READABLE) - FD_SET (fd, &gdb_notifier.check_masks[0]); - else - FD_CLR (fd, &gdb_notifier.check_masks[0]); - - if (mask & GDB_WRITABLE) - FD_SET (fd, &gdb_notifier.check_masks[1]); - else - FD_CLR (fd, &gdb_notifier.check_masks[1]); - - if (mask & GDB_EXCEPTION) - FD_SET (fd, &gdb_notifier.check_masks[2]); - else - FD_CLR (fd, &gdb_notifier.check_masks[2]); - - if (gdb_notifier.num_fds <= fd) - gdb_notifier.num_fds = fd + 1; - } - - file_ptr->proc = proc; - file_ptr->client_data = client_data; - file_ptr->mask = mask; -} - -/* Wrapper function for create_file_handler. */ - -void -add_file_handler (gdb_fildes_t fd, - handler_func *proc, gdb_client_data client_data) -{ - create_file_handler (fd, GDB_READABLE | GDB_EXCEPTION, proc, client_data); -} - -/* Remove the file descriptor FD from the list of monitored fd's: - i.e. we don't care anymore about events on the FD. */ - -void -delete_file_handler (gdb_fildes_t fd) -{ - file_handler *file_ptr, *prev_ptr = NULL; - int i; - - /* Find the entry for the given file. */ - - for (file_ptr = gdb_notifier.first_file_handler; - file_ptr != NULL; - file_ptr = file_ptr->next_file) - if (file_ptr->fd == fd) - break; - - if (file_ptr == NULL) - return; - - if (file_ptr->mask & GDB_READABLE) - FD_CLR (fd, &gdb_notifier.check_masks[0]); - if (file_ptr->mask & GDB_WRITABLE) - FD_CLR (fd, &gdb_notifier.check_masks[1]); - if (file_ptr->mask & GDB_EXCEPTION) - FD_CLR (fd, &gdb_notifier.check_masks[2]); - - /* Find current max fd. */ - - if ((fd + 1) == gdb_notifier.num_fds) - { - gdb_notifier.num_fds--; - for (i = gdb_notifier.num_fds; i; i--) - { - if (FD_ISSET (i - 1, &gdb_notifier.check_masks[0]) - || FD_ISSET (i - 1, &gdb_notifier.check_masks[1]) - || FD_ISSET (i - 1, &gdb_notifier.check_masks[2])) - break; - } - gdb_notifier.num_fds = i; - } - - /* Deactivate the file descriptor, by clearing its mask, so that it - will not fire again. */ - - file_ptr->mask = 0; - - /* Get rid of the file handler in the file handler list. */ - if (file_ptr == gdb_notifier.first_file_handler) - gdb_notifier.first_file_handler = file_ptr->next_file; - else - { - for (prev_ptr = gdb_notifier.first_file_handler; - prev_ptr->next_file != file_ptr; - prev_ptr = prev_ptr->next_file) - ; - prev_ptr->next_file = file_ptr->next_file; - } - free (file_ptr); -} - -/* Handle the given event by calling the procedure associated to the - corresponding file handler. Called by process_event indirectly, - through event_ptr->proc. EVENT_FILE_DESC is file descriptor of the - event in the front of the event queue. */ - -static int -handle_file_event (gdb_fildes_t event_file_desc) -{ - file_handler *file_ptr; - int mask; - - /* Search the file handler list to find one that matches the fd in - the event. */ - for (file_ptr = gdb_notifier.first_file_handler; file_ptr != NULL; - file_ptr = file_ptr->next_file) - { - if (file_ptr->fd == event_file_desc) - { - /* See if the desired events (mask) match the received - events (ready_mask). */ - - if (file_ptr->ready_mask & GDB_EXCEPTION) - { - warning ("Exception condition detected on fd %s", - pfildes (file_ptr->fd)); - file_ptr->error = 1; - } - else - file_ptr->error = 0; - mask = file_ptr->ready_mask & file_ptr->mask; - - /* Clear the received events for next time around. */ - file_ptr->ready_mask = 0; - - /* If there was a match, then call the handler. */ - if (mask != 0) - { - if ((*file_ptr->proc) (file_ptr->error, - file_ptr->client_data) < 0) - return -1; - } - break; - } - } - - return 0; -} - -/* Create a file event, to be enqueued in the event queue for - processing. The procedure associated to this event is always - handle_file_event, which will in turn invoke the one that was - associated to FD when it was registered with the event loop. */ - -static gdb_event * -create_file_event (gdb_fildes_t fd) -{ - gdb_event *file_event_ptr; - - file_event_ptr = XNEW (gdb_event); - file_event_ptr->proc = handle_file_event; - file_event_ptr->fd = fd; - - return file_event_ptr; -} - -/* Called by do_one_event to wait for new events on the monitored file - descriptors. Queue file events as they are detected by the poll. - If there are no events, this function will block in the call to - select. Return -1 if there are no files descriptors to monitor, - otherwise return 0. */ - -static int -wait_for_event (void) -{ - file_handler *file_ptr; - int num_found = 0; - - /* Make sure all output is done before getting another event. */ - fflush (stdout); - fflush (stderr); - - if (gdb_notifier.num_fds == 0) - return -1; - - gdb_notifier.ready_masks[0] = gdb_notifier.check_masks[0]; - gdb_notifier.ready_masks[1] = gdb_notifier.check_masks[1]; - gdb_notifier.ready_masks[2] = gdb_notifier.check_masks[2]; - num_found = select (gdb_notifier.num_fds, - &gdb_notifier.ready_masks[0], - &gdb_notifier.ready_masks[1], - &gdb_notifier.ready_masks[2], - NULL); - - /* Clear the masks after an error from select. */ - if (num_found == -1) - { - FD_ZERO (&gdb_notifier.ready_masks[0]); - FD_ZERO (&gdb_notifier.ready_masks[1]); - FD_ZERO (&gdb_notifier.ready_masks[2]); -#ifdef EINTR - /* Dont print anything if we got a signal, let gdb handle - it. */ - if (errno != EINTR) - perror_with_name ("select"); -#endif - } - - /* Enqueue all detected file events. */ - - for (file_ptr = gdb_notifier.first_file_handler; - file_ptr != NULL && num_found > 0; - file_ptr = file_ptr->next_file) - { - int mask = 0; - - if (FD_ISSET (file_ptr->fd, &gdb_notifier.ready_masks[0])) - mask |= GDB_READABLE; - if (FD_ISSET (file_ptr->fd, &gdb_notifier.ready_masks[1])) - mask |= GDB_WRITABLE; - if (FD_ISSET (file_ptr->fd, &gdb_notifier.ready_masks[2])) - mask |= GDB_EXCEPTION; - - if (!mask) - continue; - else - num_found--; - - /* Enqueue an event only if this is still a new event for this - fd. */ - - if (file_ptr->ready_mask == 0) - { - gdb_event *file_event_ptr = create_file_event (file_ptr->fd); - - event_queue.emplace (file_event_ptr); - } - file_ptr->ready_mask = mask; - } - - return 0; -} - -/* Start up the event loop. This is the entry point to the event - loop. */ - -void -start_event_loop (void) -{ - /* Loop until there is nothing to do. This is the entry point to - the event loop engine. If nothing is ready at this time, wait - for something to happen (via wait_for_event), then process it. - Return when there are no longer event sources to wait for. */ - - while (1) - { - /* Any events already waiting in the queue? */ - int res = process_event (); - - /* Did the event handler want the event loop to stop? */ - if (res == -1) - return; - - if (res) - continue; - - /* Process any queued callbacks before we go to sleep. */ - res = process_callback (); - - /* Did the callback want the event loop to stop? */ - if (res == -1) - return; - - if (res) - continue; - - /* Wait for a new event. If wait_for_event returns -1, we - should get out because this means that there are no event - sources left. This will make the event loop stop, and the - application exit. */ - - if (wait_for_event () < 0) - return; - } - - /* We are done with the event loop. There are no more event sources - to listen to. So we exit gdbserver. */ -} diff -Nru gdb-9.1/gdb/gdbserver/event-loop.h gdb-10.2/gdb/gdbserver/event-loop.h --- gdb-9.1/gdb/gdbserver/event-loop.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/event-loop.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,36 +0,0 @@ -/* Event loop machinery for the remote server for GDB. - Copyright (C) 1993-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef GDBSERVER_EVENT_LOOP_H -#define GDBSERVER_EVENT_LOOP_H - -typedef void *gdb_client_data; -typedef int (handler_func) (int, gdb_client_data); -typedef int (callback_handler_func) (gdb_client_data); - -extern void delete_file_handler (gdb_fildes_t fd); -extern void add_file_handler (gdb_fildes_t fd, handler_func *proc, - gdb_client_data client_data); -extern int append_callback_event (callback_handler_func *proc, - gdb_client_data client_data); -extern void delete_callback_event (int id); - -extern void start_event_loop (void); -extern void initialize_event_loop (void); - -#endif /* GDBSERVER_EVENT_LOOP_H */ diff -Nru gdb-9.1/gdb/gdbserver/fork-child.c gdb-10.2/gdb/gdbserver/fork-child.c --- gdb-9.1/gdb/gdbserver/fork-child.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/fork-child.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,118 +0,0 @@ -/* Fork a Unix child process, and set up to debug it, for GDBserver. - Copyright (C) 1989-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "server.h" -#include "gdbsupport/job-control.h" -#include "nat/fork-inferior.h" -#ifdef HAVE_SIGNAL_H -#include <signal.h> -#endif - -#ifdef SIGTTOU -/* A file descriptor for the controlling terminal. */ -static int terminal_fd; - -/* TERMINAL_FD's original foreground group. */ -static pid_t old_foreground_pgrp; - -/* Hand back terminal ownership to the original foreground group. */ - -static void -restore_old_foreground_pgrp (void) -{ - tcsetpgrp (terminal_fd, old_foreground_pgrp); -} -#endif - -/* See nat/fork-inferior.h. */ - -void -prefork_hook (const char *args) -{ - client_state &cs = get_client_state (); - if (debug_threads) - { - debug_printf ("args: %s\n", args); - debug_flush (); - } - -#ifdef SIGTTOU - signal (SIGTTOU, SIG_DFL); - signal (SIGTTIN, SIG_DFL); -#endif - - /* Clear this so the backend doesn't get confused, thinking - CONT_THREAD died, and it needs to resume all threads. */ - cs.cont_thread = null_ptid; -} - -/* See nat/fork-inferior.h. */ - -void -postfork_hook (pid_t pid) -{ -} - -/* See nat/fork-inferior.h. */ - -void -postfork_child_hook () -{ - /* This is set to the result of setpgrp, which if vforked, will be - visible to you in the parent process. It's only used by humans - for debugging. */ - static int debug_setpgrp = 657473; - - debug_setpgrp = gdb_setpgid (); - if (debug_setpgrp == -1) - perror (_("setpgrp failed in child")); -} - -/* See nat/fork-inferior.h. */ - -void -gdb_flush_out_err () -{ - fflush (stdout); - fflush (stderr); -} - -/* See server.h. */ - -void -post_fork_inferior (int pid, const char *program) -{ - client_state &cs = get_client_state (); -#ifdef SIGTTOU - signal (SIGTTOU, SIG_IGN); - signal (SIGTTIN, SIG_IGN); - terminal_fd = fileno (stderr); - old_foreground_pgrp = tcgetpgrp (terminal_fd); - tcsetpgrp (terminal_fd, pid); - atexit (restore_old_foreground_pgrp); -#endif - - startup_inferior (pid, START_INFERIOR_TRAPS_EXPECTED, - &cs.last_status, &cs.last_ptid); - current_thread->last_resume_kind = resume_stop; - current_thread->last_status = cs.last_status; - signal_pid = pid; - target_post_create_inferior (); - fprintf (stderr, "Process %s created; pid = %d\n", program, pid); - fflush (stderr); -} diff -Nru gdb-9.1/gdb/gdbserver/gdb_proc_service.h gdb-10.2/gdb/gdbserver/gdb_proc_service.h --- gdb-9.1/gdb/gdbserver/gdb_proc_service.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/gdb_proc_service.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,31 +0,0 @@ -/* <proc_service.h> replacement for systems that don't have it. - Copyright (C) 2000-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef GDBSERVER_GDB_PROC_SERVICE_H -#define GDBSERVER_GDB_PROC_SERVICE_H - -#include "gdbsupport/gdb_proc_service.h" - -/* Structure that identifies the target process. */ -struct ps_prochandle -{ - /* We don't need to track anything. All context is served from the - current inferior. */ -}; - -#endif /* GDBSERVER_GDB_PROC_SERVICE_H */ diff -Nru gdb-9.1/gdb/gdbserver/gdbreplay.c gdb-10.2/gdb/gdbserver/gdbreplay.c --- gdb-9.1/gdb/gdbserver/gdbreplay.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/gdbreplay.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,524 +0,0 @@ -/* Replay a remote debug session logfile for GDB. - Copyright (C) 1996-2020 Free Software Foundation, Inc. - Written by Fred Fish (fnf@cygnus.com) from pieces of gdbserver. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "gdbsupport/common-defs.h" -#include "gdbsupport/version.h" - -#if HAVE_SYS_FILE_H -#include <sys/file.h> -#endif -#if HAVE_SIGNAL_H -#include <signal.h> -#endif -#include <ctype.h> -#if HAVE_FCNTL_H -#include <fcntl.h> -#endif -#include <unistd.h> -#ifdef HAVE_NETINET_IN_H -#include <netinet/in.h> -#endif -#ifdef HAVE_SYS_SOCKET_H -#include <sys/socket.h> -#endif -#if HAVE_NETDB_H -#include <netdb.h> -#endif -#if HAVE_NETINET_TCP_H -#include <netinet/tcp.h> -#endif - -#if USE_WIN32API -#include <ws2tcpip.h> -#endif - -#include "gdbsupport/netstuff.h" -#include "gdbsupport/rsp-low.h" - -#ifndef HAVE_SOCKLEN_T -typedef int socklen_t; -#endif - -/* Sort of a hack... */ -#define EOL (EOF - 1) - -static int remote_desc; - -#ifdef __MINGW32CE__ - -#ifndef COUNTOF -#define COUNTOF(STR) (sizeof (STR) / sizeof ((STR)[0])) -#endif - -#define errno (GetLastError ()) - -char * -strerror (DWORD error) -{ - static char buf[1024]; - WCHAR *msgbuf; - DWORD lasterr = GetLastError (); - DWORD chars = FormatMessageW (FORMAT_MESSAGE_FROM_SYSTEM - | FORMAT_MESSAGE_ALLOCATE_BUFFER, - NULL, - error, - 0, /* Default language */ - (LPVOID)&msgbuf, - 0, - NULL); - if (chars != 0) - { - /* If there is an \r\n appended, zap it. */ - if (chars >= 2 - && msgbuf[chars - 2] == '\r' - && msgbuf[chars - 1] == '\n') - { - chars -= 2; - msgbuf[chars] = 0; - } - - if (chars > ((COUNTOF (buf)) - 1)) - { - chars = COUNTOF (buf) - 1; - msgbuf [chars] = 0; - } - - wcstombs (buf, msgbuf, chars + 1); - LocalFree (msgbuf); - } - else - sprintf (buf, "unknown win32 error (%ld)", error); - - SetLastError (lasterr); - return buf; -} - -#endif /* __MINGW32CE__ */ - -static void -sync_error (FILE *fp, const char *desc, int expect, int got) -{ - fprintf (stderr, "\n%s\n", desc); - fprintf (stderr, "At logfile offset %ld, expected '0x%x' got '0x%x'\n", - ftell (fp), expect, got); - fflush (stderr); - exit (1); -} - -static void -remote_error (const char *desc) -{ - fprintf (stderr, "\n%s\n", desc); - fflush (stderr); - exit (1); -} - -static void -remote_close (void) -{ -#ifdef USE_WIN32API - closesocket (remote_desc); -#else - close (remote_desc); -#endif -} - -/* Open a connection to a remote debugger. - NAME is the filename used for communication. */ - -static void -remote_open (char *name) -{ - char *last_colon = strrchr (name, ':'); - - if (last_colon == NULL) - { - fprintf (stderr, "%s: Must specify tcp connection as host:addr\n", name); - fflush (stderr); - exit (1); - } - -#ifdef USE_WIN32API - static int winsock_initialized; -#endif - int tmp; - int tmp_desc; - struct addrinfo hint; - struct addrinfo *ainfo; - - memset (&hint, 0, sizeof (hint)); - /* Assume no prefix will be passed, therefore we should use - AF_UNSPEC. */ - hint.ai_family = AF_UNSPEC; - hint.ai_socktype = SOCK_STREAM; - hint.ai_protocol = IPPROTO_TCP; - - parsed_connection_spec parsed = parse_connection_spec (name, &hint); - - if (parsed.port_str.empty ()) - error (_("Missing port on hostname '%s'"), name); - -#ifdef USE_WIN32API - if (!winsock_initialized) - { - WSADATA wsad; - - WSAStartup (MAKEWORD (1, 0), &wsad); - winsock_initialized = 1; - } -#endif - - int r = getaddrinfo (parsed.host_str.c_str (), parsed.port_str.c_str (), - &hint, &ainfo); - - if (r != 0) - { - fprintf (stderr, "%s:%s: cannot resolve name: %s\n", - parsed.host_str.c_str (), parsed.port_str.c_str (), - gai_strerror (r)); - fflush (stderr); - exit (1); - } - - scoped_free_addrinfo free_ainfo (ainfo); - - struct addrinfo *p; - - for (p = ainfo; p != NULL; p = p->ai_next) - { - tmp_desc = socket (p->ai_family, p->ai_socktype, p->ai_protocol); - - if (tmp_desc >= 0) - break; - } - - if (p == NULL) - perror_with_name ("Cannot open socket"); - - /* Allow rapid reuse of this port. */ - tmp = 1; - setsockopt (tmp_desc, SOL_SOCKET, SO_REUSEADDR, (char *) &tmp, - sizeof (tmp)); - - switch (p->ai_family) - { - case AF_INET: - ((struct sockaddr_in *) p->ai_addr)->sin_addr.s_addr = INADDR_ANY; - break; - case AF_INET6: - ((struct sockaddr_in6 *) p->ai_addr)->sin6_addr = in6addr_any; - break; - default: - fprintf (stderr, "Invalid 'ai_family' %d\n", p->ai_family); - exit (1); - } - - if (bind (tmp_desc, p->ai_addr, p->ai_addrlen) != 0) - perror_with_name ("Can't bind address"); - - if (p->ai_socktype == SOCK_DGRAM) - remote_desc = tmp_desc; - else - { - struct sockaddr_storage sockaddr; - socklen_t sockaddrsize = sizeof (sockaddr); - char orig_host[GDB_NI_MAX_ADDR], orig_port[GDB_NI_MAX_PORT]; - - if (listen (tmp_desc, 1) != 0) - perror_with_name ("Can't listen on socket"); - - remote_desc = accept (tmp_desc, (struct sockaddr *) &sockaddr, - &sockaddrsize); - - if (remote_desc == -1) - perror_with_name ("Accept failed"); - - /* Enable TCP keep alive process. */ - tmp = 1; - setsockopt (tmp_desc, SOL_SOCKET, SO_KEEPALIVE, - (char *) &tmp, sizeof (tmp)); - - /* Tell TCP not to delay small packets. This greatly speeds up - interactive response. */ - tmp = 1; - setsockopt (remote_desc, IPPROTO_TCP, TCP_NODELAY, - (char *) &tmp, sizeof (tmp)); - - if (getnameinfo ((struct sockaddr *) &sockaddr, sockaddrsize, - orig_host, sizeof (orig_host), - orig_port, sizeof (orig_port), - NI_NUMERICHOST | NI_NUMERICSERV) == 0) - { - fprintf (stderr, "Remote debugging from host %s, port %s\n", - orig_host, orig_port); - fflush (stderr); - } - -#ifndef USE_WIN32API - close (tmp_desc); /* No longer need this */ - - signal (SIGPIPE, SIG_IGN); /* If we don't do this, then - gdbreplay simply exits when - the remote side dies. */ -#else - closesocket (tmp_desc); /* No longer need this */ -#endif - } - -#if defined(F_SETFL) && defined (FASYNC) - fcntl (remote_desc, F_SETFL, FASYNC); -#endif - - fprintf (stderr, "Replay logfile using %s\n", name); - fflush (stderr); -} - -static int -logchar (FILE *fp) -{ - int ch; - int ch2; - - ch = fgetc (fp); - if (ch != '\r') - { - fputc (ch, stdout); - fflush (stdout); - } - switch (ch) - { - /* Treat \r\n as a newline. */ - case '\r': - ch = fgetc (fp); - if (ch == '\n') - ch = EOL; - else - { - ungetc (ch, fp); - ch = '\r'; - } - fputc (ch == EOL ? '\n' : '\r', stdout); - fflush (stdout); - break; - case '\n': - ch = EOL; - break; - case '\\': - ch = fgetc (fp); - fputc (ch, stdout); - fflush (stdout); - switch (ch) - { - case '\\': - break; - case 'b': - ch = '\b'; - break; - case 'f': - ch = '\f'; - break; - case 'n': - ch = '\n'; - break; - case 'r': - ch = '\r'; - break; - case 't': - ch = '\t'; - break; - case 'v': - ch = '\v'; - break; - case 'x': - ch2 = fgetc (fp); - fputc (ch2, stdout); - fflush (stdout); - ch = fromhex (ch2) << 4; - ch2 = fgetc (fp); - fputc (ch2, stdout); - fflush (stdout); - ch |= fromhex (ch2); - break; - default: - /* Treat any other char as just itself */ - break; - } - default: - break; - } - return (ch); -} - -static int -gdbchar (int desc) -{ - unsigned char fromgdb; - - if (read (desc, &fromgdb, 1) != 1) - return -1; - else - return fromgdb; -} - -/* Accept input from gdb and match with chars from fp (after skipping one - blank) up until a \n is read from fp (which is not matched) */ - -static void -expect (FILE *fp) -{ - int fromlog; - int fromgdb; - - if ((fromlog = logchar (fp)) != ' ') - { - sync_error (fp, "Sync error during gdb read of leading blank", ' ', - fromlog); - } - do - { - fromlog = logchar (fp); - if (fromlog == EOL) - break; - fromgdb = gdbchar (remote_desc); - if (fromgdb < 0) - remote_error ("Error during read from gdb"); - } - while (fromlog == fromgdb); - - if (fromlog != EOL) - { - sync_error (fp, "Sync error during read of gdb packet from log", fromlog, - fromgdb); - } -} - -/* Play data back to gdb from fp (after skipping leading blank) up until a - \n is read from fp (which is discarded and not sent to gdb). */ - -static void -play (FILE *fp) -{ - int fromlog; - char ch; - - if ((fromlog = logchar (fp)) != ' ') - { - sync_error (fp, "Sync error skipping blank during write to gdb", ' ', - fromlog); - } - while ((fromlog = logchar (fp)) != EOL) - { - ch = fromlog; - if (write (remote_desc, &ch, 1) != 1) - remote_error ("Error during write to gdb"); - } -} - -static void -gdbreplay_version (void) -{ - printf ("GNU gdbreplay %s%s\n" - "Copyright (C) 2020 Free Software Foundation, Inc.\n" - "gdbreplay is free software, covered by " - "the GNU General Public License.\n" - "This gdbreplay was configured as \"%s\"\n", - PKGVERSION, version, host_name); -} - -static void -gdbreplay_usage (FILE *stream) -{ - fprintf (stream, "Usage:\tgdbreplay LOGFILE HOST:PORT\n"); - if (REPORT_BUGS_TO[0] && stream == stdout) - fprintf (stream, "Report bugs to \"%s\".\n", REPORT_BUGS_TO); -} - -/* Main function. This is called by the real "main" function, - wrapped in a TRY_CATCH that handles any uncaught exceptions. */ - -static void ATTRIBUTE_NORETURN -captured_main (int argc, char *argv[]) -{ - FILE *fp; - int ch; - - if (argc >= 2 && strcmp (argv[1], "--version") == 0) - { - gdbreplay_version (); - exit (0); - } - if (argc >= 2 && strcmp (argv[1], "--help") == 0) - { - gdbreplay_usage (stdout); - exit (0); - } - - if (argc < 3) - { - gdbreplay_usage (stderr); - exit (1); - } - fp = fopen (argv[1], "r"); - if (fp == NULL) - { - perror_with_name (argv[1]); - } - remote_open (argv[2]); - while ((ch = logchar (fp)) != EOF) - { - switch (ch) - { - case 'w': - /* data sent from gdb to gdbreplay, accept and match it */ - expect (fp); - break; - case 'r': - /* data sent from gdbreplay to gdb, play it */ - play (fp); - break; - case 'c': - /* Command executed by gdb */ - while ((ch = logchar (fp)) != EOL); - break; - } - } - remote_close (); - exit (0); -} - -int -main (int argc, char *argv[]) -{ - try - { - captured_main (argc, argv); - } - catch (const gdb_exception &exception) - { - if (exception.reason == RETURN_ERROR) - { - fflush (stdout); - fprintf (stderr, "%s\n", exception.what ()); - } - - exit (1); - } - - gdb_assert_not_reached ("captured_main should never return"); -} diff -Nru gdb-9.1/gdb/gdbserver/gdbthread.h gdb-10.2/gdb/gdbserver/gdbthread.h --- gdb-9.1/gdb/gdbserver/gdbthread.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/gdbthread.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,227 +0,0 @@ -/* Multi-thread control defs for remote server for GDB. - Copyright (C) 1993-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef GDBSERVER_GDBTHREAD_H -#define GDBSERVER_GDBTHREAD_H - -#include "gdbsupport/common-gdbthread.h" -#include "inferiors.h" - -#include <list> - -struct btrace_target_info; -struct regcache; - -struct thread_info -{ - /* The id of this thread. */ - ptid_t id; - - void *target_data; - struct regcache *regcache_data; - - /* The last resume GDB requested on this thread. */ - enum resume_kind last_resume_kind; - - /* The last wait status reported for this thread. */ - struct target_waitstatus last_status; - - /* True if LAST_STATUS hasn't been reported to GDB yet. */ - int status_pending_p; - - /* Given `while-stepping', a thread may be collecting data for more - than one tracepoint simultaneously. E.g.: - - ff0001 INSN1 <-- TP1, while-stepping 10 collect $regs - ff0002 INSN2 - ff0003 INSN3 <-- TP2, collect $regs - ff0004 INSN4 <-- TP3, while-stepping 10 collect $regs - ff0005 INSN5 - - Notice that when instruction INSN5 is reached, the while-stepping - actions of both TP1 and TP3 are still being collected, and that TP2 - had been collected meanwhile. The whole range of ff0001-ff0005 - should be single-stepped, due to at least TP1's while-stepping - action covering the whole range. - - On the other hand, the same tracepoint with a while-stepping action - may be hit by more than one thread simultaneously, hence we can't - keep the current step count in the tracepoint itself. - - This is the head of the list of the states of `while-stepping' - tracepoint actions this thread is now collecting; NULL if empty. - Each item in the list holds the current step of the while-stepping - action. */ - struct wstep_state *while_stepping; - - /* Branch trace target information for this thread. */ - struct btrace_target_info *btrace; -}; - -extern std::list<thread_info *> all_threads; - -void remove_thread (struct thread_info *thread); -struct thread_info *add_thread (ptid_t ptid, void *target_data); - -/* Return a pointer to the first thread, or NULL if there isn't one. */ - -struct thread_info *get_first_thread (void); - -struct thread_info *find_thread_ptid (ptid_t ptid); - -/* Find any thread of the PID process. Returns NULL if none is - found. */ -struct thread_info *find_any_thread_of_pid (int pid); - -/* Find the first thread for which FUNC returns true. Return NULL if no thread - satisfying FUNC is found. */ - -template <typename Func> -static thread_info * -find_thread (Func func) -{ - std::list<thread_info *>::iterator next, cur = all_threads.begin (); - - while (cur != all_threads.end ()) - { - next = cur; - next++; - - if (func (*cur)) - return *cur; - - cur = next; - } - - return NULL; -} - -/* Like the above, but only consider threads with pid PID. */ - -template <typename Func> -static thread_info * -find_thread (int pid, Func func) -{ - return find_thread ([&] (thread_info *thread) - { - return thread->id.pid () == pid && func (thread); - }); -} - -/* Find the first thread that matches FILTER for which FUNC returns true. - Return NULL if no thread satisfying these conditions is found. */ - -template <typename Func> -static thread_info * -find_thread (ptid_t filter, Func func) -{ - return find_thread ([&] (thread_info *thread) { - return thread->id.matches (filter) && func (thread); - }); -} - -/* Invoke FUNC for each thread. */ - -template <typename Func> -static void -for_each_thread (Func func) -{ - std::list<thread_info *>::iterator next, cur = all_threads.begin (); - - while (cur != all_threads.end ()) - { - next = cur; - next++; - func (*cur); - cur = next; - } -} - -/* Like the above, but only consider threads with pid PID. */ - -template <typename Func> -static void -for_each_thread (int pid, Func func) -{ - for_each_thread ([&] (thread_info *thread) - { - if (pid == thread->id.pid ()) - func (thread); - }); -} - -/* Find the a random thread for which FUNC (THREAD) returns true. If - no entry is found then return NULL. */ - -template <typename Func> -static thread_info * -find_thread_in_random (Func func) -{ - int count = 0; - int random_selector; - - /* First count how many interesting entries we have. */ - for_each_thread ([&] (thread_info *thread) { - if (func (thread)) - count++; - }); - - if (count == 0) - return NULL; - - /* Now randomly pick an entry out of those. */ - random_selector = (int) - ((count * (double) rand ()) / (RAND_MAX + 1.0)); - - thread_info *thread = find_thread ([&] (thread_info *thr_arg) { - return func (thr_arg) && (random_selector-- == 0); - }); - - gdb_assert (thread != NULL); - - return thread; -} - -/* Get current thread ID (Linux task ID). */ -#define current_ptid (current_thread->id) - -/* Get the ptid of THREAD. */ - -static inline ptid_t -ptid_of (const thread_info *thread) -{ - return thread->id; -} - -/* Get the pid of THREAD. */ - -static inline int -pid_of (const thread_info *thread) -{ - return thread->id.pid (); -} - -/* Get the lwp of THREAD. */ - -static inline long -lwpid_of (const thread_info *thread) -{ - return thread->id.lwp (); -} - -#endif /* GDBSERVER_GDBTHREAD_H */ diff -Nru gdb-9.1/gdb/gdbserver/.gitignore gdb-10.2/gdb/gdbserver/.gitignore --- gdb-9.1/gdb/gdbserver/.gitignore 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/.gitignore 1970-01-01 00:00:00.000000000 +0000 @@ -1,10 +0,0 @@ -/Makefile - -gdbreplay -gdbserver -libinproctrace.so - -build-gnulib-gdbserver -build-libiberty-gdbserver - -*-generated.c diff -Nru gdb-9.1/gdb/gdbserver/hostio.c gdb-10.2/gdb/gdbserver/hostio.c --- gdb-9.1/gdb/gdbserver/hostio.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/hostio.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,620 +0,0 @@ -/* Host file transfer support for gdbserver. - Copyright (C) 2007-2020 Free Software Foundation, Inc. - - Contributed by CodeSourcery. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "server.h" -#include "gdb/fileio.h" -#include "hostio.h" - -#include <fcntl.h> -#include <limits.h> -#include <unistd.h> -#include <sys/types.h> -#include <sys/stat.h> -#include "gdbsupport/fileio.h" - -struct fd_list -{ - int fd; - struct fd_list *next; -}; - -static struct fd_list *open_fds; - -static int -safe_fromhex (char a, int *nibble) -{ - if (a >= '0' && a <= '9') - *nibble = a - '0'; - else if (a >= 'a' && a <= 'f') - *nibble = a - 'a' + 10; - else if (a >= 'A' && a <= 'F') - *nibble = a - 'A' + 10; - else - return -1; - - return 0; -} - -/* Filenames are hex encoded, so the maximum we can handle is half the - packet buffer size. Cap to PATH_MAX, if it is shorter. */ -#if !defined (PATH_MAX) || (PATH_MAX > (PBUFSIZ / 2 + 1)) -# define HOSTIO_PATH_MAX (PBUFSIZ / 2 + 1) -#else -# define HOSTIO_PATH_MAX PATH_MAX -#endif - -static int -require_filename (char **pp, char *filename) -{ - int count; - char *p; - - p = *pp; - count = 0; - - while (*p && *p != ',') - { - int nib1, nib2; - - /* Don't allow overflow. */ - if (count >= HOSTIO_PATH_MAX - 1) - return -1; - - if (safe_fromhex (p[0], &nib1) - || safe_fromhex (p[1], &nib2)) - return -1; - - filename[count++] = nib1 * 16 + nib2; - p += 2; - } - - filename[count] = '\0'; - *pp = p; - return 0; -} - -static int -require_int (char **pp, int *value) -{ - char *p; - int count, firstdigit; - - p = *pp; - *value = 0; - count = 0; - firstdigit = -1; - - while (*p && *p != ',') - { - int nib; - - if (safe_fromhex (p[0], &nib)) - return -1; - - if (firstdigit == -1) - firstdigit = nib; - - /* Don't allow overflow. */ - if (count >= 8 || (count == 7 && firstdigit >= 0x8)) - return -1; - - *value = *value * 16 + nib; - p++; - count++; - } - - *pp = p; - return 0; -} - -static int -require_data (char *p, int p_len, char **data, int *data_len) -{ - int input_index, output_index, escaped; - - *data = (char *) xmalloc (p_len); - - output_index = 0; - escaped = 0; - for (input_index = 0; input_index < p_len; input_index++) - { - char b = p[input_index]; - - if (escaped) - { - (*data)[output_index++] = b ^ 0x20; - escaped = 0; - } - else if (b == '}') - escaped = 1; - else - (*data)[output_index++] = b; - } - - if (escaped) - { - free (*data); - return -1; - } - - *data_len = output_index; - return 0; -} - -static int -require_comma (char **pp) -{ - if (**pp == ',') - { - (*pp)++; - return 0; - } - else - return -1; -} - -static int -require_end (char *p) -{ - if (*p == '\0') - return 0; - else - return -1; -} - -static int -require_valid_fd (int fd) -{ - struct fd_list *fd_ptr; - - for (fd_ptr = open_fds; fd_ptr != NULL; fd_ptr = fd_ptr->next) - if (fd_ptr->fd == fd) - return 0; - - return -1; -} - -/* Fill in own_buf with the last hostio error packet, however it - suitable for the target. */ -static void -hostio_error (char *own_buf) -{ - the_target->hostio_last_error (own_buf); -} - -static void -hostio_packet_error (char *own_buf) -{ - sprintf (own_buf, "F-1,%x", FILEIO_EINVAL); -} - -static void -hostio_reply (char *own_buf, int result) -{ - sprintf (own_buf, "F%x", result); -} - -static int -hostio_reply_with_data (char *own_buf, char *buffer, int len, - int *new_packet_len) -{ - int input_index, output_index, out_maxlen; - - sprintf (own_buf, "F%x;", len); - output_index = strlen (own_buf); - - out_maxlen = PBUFSIZ; - - for (input_index = 0; input_index < len; input_index++) - { - char b = buffer[input_index]; - - if (b == '$' || b == '#' || b == '}' || b == '*') - { - /* These must be escaped. */ - if (output_index + 2 > out_maxlen) - break; - own_buf[output_index++] = '}'; - own_buf[output_index++] = b ^ 0x20; - } - else - { - if (output_index + 1 > out_maxlen) - break; - own_buf[output_index++] = b; - } - } - - *new_packet_len = output_index; - return input_index; -} - -/* Process ID of inferior whose filesystem hostio functions - that take FILENAME arguments will use. Zero means to use - our own filesystem. */ - -static int hostio_fs_pid; - -/* See hostio.h. */ - -void -hostio_handle_new_gdb_connection (void) -{ - hostio_fs_pid = 0; -} - -/* Handle a "vFile:setfs:" packet. */ - -static void -handle_setfs (char *own_buf) -{ - char *p; - int pid; - - /* If the target doesn't have any of the in-filesystem-of methods - then there's no point in GDB sending "vFile:setfs:" packets. We - reply with an empty packet (i.e. we pretend we don't understand - "vFile:setfs:") and that should stop GDB sending any more. */ - if (the_target->multifs_open == NULL - && the_target->multifs_unlink == NULL - && the_target->multifs_readlink == NULL) - { - own_buf[0] = '\0'; - return; - } - - p = own_buf + strlen ("vFile:setfs:"); - - if (require_int (&p, &pid) - || pid < 0 - || require_end (p)) - { - hostio_packet_error (own_buf); - return; - } - - hostio_fs_pid = pid; - - hostio_reply (own_buf, 0); -} - -static void -handle_open (char *own_buf) -{ - char filename[HOSTIO_PATH_MAX]; - char *p; - int fileio_flags, fileio_mode, flags, fd; - mode_t mode; - struct fd_list *new_fd; - - p = own_buf + strlen ("vFile:open:"); - - if (require_filename (&p, filename) - || require_comma (&p) - || require_int (&p, &fileio_flags) - || require_comma (&p) - || require_int (&p, &fileio_mode) - || require_end (p) - || fileio_to_host_openflags (fileio_flags, &flags) - || fileio_to_host_mode (fileio_mode, &mode)) - { - hostio_packet_error (own_buf); - return; - } - - /* We do not need to convert MODE, since the fileio protocol - uses the standard values. */ - if (hostio_fs_pid != 0 && the_target->multifs_open != NULL) - fd = the_target->multifs_open (hostio_fs_pid, filename, - flags, mode); - else - fd = open (filename, flags, mode); - - if (fd == -1) - { - hostio_error (own_buf); - return; - } - - /* Record the new file descriptor. */ - new_fd = XNEW (struct fd_list); - new_fd->fd = fd; - new_fd->next = open_fds; - open_fds = new_fd; - - hostio_reply (own_buf, fd); -} - -static void -handle_pread (char *own_buf, int *new_packet_len) -{ - int fd, ret, len, offset, bytes_sent; - char *p, *data; - static int max_reply_size = -1; - - p = own_buf + strlen ("vFile:pread:"); - - if (require_int (&p, &fd) - || require_comma (&p) - || require_valid_fd (fd) - || require_int (&p, &len) - || require_comma (&p) - || require_int (&p, &offset) - || require_end (p)) - { - hostio_packet_error (own_buf); - return; - } - - /* Do not attempt to read more than the maximum number of bytes - hostio_reply_with_data can fit in a packet. We may still read - too much because of escaping, but this is handled below. */ - if (max_reply_size == -1) - { - sprintf (own_buf, "F%x;", PBUFSIZ); - max_reply_size = PBUFSIZ - strlen (own_buf); - } - if (len > max_reply_size) - len = max_reply_size; - - data = (char *) xmalloc (len); -#ifdef HAVE_PREAD - ret = pread (fd, data, len, offset); -#else - ret = -1; -#endif - /* If we have no pread or it failed for this file, use lseek/read. */ - if (ret == -1) - { - ret = lseek (fd, offset, SEEK_SET); - if (ret != -1) - ret = read (fd, data, len); - } - - if (ret == -1) - { - hostio_error (own_buf); - free (data); - return; - } - - bytes_sent = hostio_reply_with_data (own_buf, data, ret, new_packet_len); - - /* If we were using read, and the data did not all fit in the reply, - we would have to back up using lseek here. With pread it does - not matter. But we still have a problem; the return value in the - packet might be wrong, so we must fix it. This time it will - definitely fit. */ - if (bytes_sent < ret) - bytes_sent = hostio_reply_with_data (own_buf, data, bytes_sent, - new_packet_len); - - free (data); -} - -static void -handle_pwrite (char *own_buf, int packet_len) -{ - int fd, ret, len, offset; - char *p, *data; - - p = own_buf + strlen ("vFile:pwrite:"); - - if (require_int (&p, &fd) - || require_comma (&p) - || require_valid_fd (fd) - || require_int (&p, &offset) - || require_comma (&p) - || require_data (p, packet_len - (p - own_buf), &data, &len)) - { - hostio_packet_error (own_buf); - return; - } - -#ifdef HAVE_PWRITE - ret = pwrite (fd, data, len, offset); -#else - ret = -1; -#endif - /* If we have no pwrite or it failed for this file, use lseek/write. */ - if (ret == -1) - { - ret = lseek (fd, offset, SEEK_SET); - if (ret != -1) - ret = write (fd, data, len); - } - - if (ret == -1) - { - hostio_error (own_buf); - free (data); - return; - } - - hostio_reply (own_buf, ret); - free (data); -} - -static void -handle_fstat (char *own_buf, int *new_packet_len) -{ - int fd, bytes_sent; - char *p; - struct stat st; - struct fio_stat fst; - - p = own_buf + strlen ("vFile:fstat:"); - - if (require_int (&p, &fd) - || require_valid_fd (fd) - || require_end (p)) - { - hostio_packet_error (own_buf); - return; - } - - if (fstat (fd, &st) == -1) - { - hostio_error (own_buf); - return; - } - - host_to_fileio_stat (&st, &fst); - - bytes_sent = hostio_reply_with_data (own_buf, - (char *) &fst, sizeof (fst), - new_packet_len); - - /* If the response does not fit into a single packet, do not attempt - to return a partial response, but simply fail. */ - if (bytes_sent < sizeof (fst)) - write_enn (own_buf); -} - -static void -handle_close (char *own_buf) -{ - int fd, ret; - char *p; - struct fd_list **open_fd_p, *old_fd; - - p = own_buf + strlen ("vFile:close:"); - - if (require_int (&p, &fd) - || require_valid_fd (fd) - || require_end (p)) - { - hostio_packet_error (own_buf); - return; - } - - ret = close (fd); - - if (ret == -1) - { - hostio_error (own_buf); - return; - } - - open_fd_p = &open_fds; - /* We know that fd is in the list, thanks to require_valid_fd. */ - while ((*open_fd_p)->fd != fd) - open_fd_p = &(*open_fd_p)->next; - - old_fd = *open_fd_p; - *open_fd_p = (*open_fd_p)->next; - free (old_fd); - - hostio_reply (own_buf, ret); -} - -static void -handle_unlink (char *own_buf) -{ - char filename[HOSTIO_PATH_MAX]; - char *p; - int ret; - - p = own_buf + strlen ("vFile:unlink:"); - - if (require_filename (&p, filename) - || require_end (p)) - { - hostio_packet_error (own_buf); - return; - } - - if (hostio_fs_pid != 0 && the_target->multifs_unlink != NULL) - ret = the_target->multifs_unlink (hostio_fs_pid, filename); - else - ret = unlink (filename); - - if (ret == -1) - { - hostio_error (own_buf); - return; - } - - hostio_reply (own_buf, ret); -} - -static void -handle_readlink (char *own_buf, int *new_packet_len) -{ - char filename[HOSTIO_PATH_MAX], linkname[HOSTIO_PATH_MAX]; - char *p; - int ret, bytes_sent; - - p = own_buf + strlen ("vFile:readlink:"); - - if (require_filename (&p, filename) - || require_end (p)) - { - hostio_packet_error (own_buf); - return; - } - - if (hostio_fs_pid != 0 && the_target->multifs_readlink != NULL) - ret = the_target->multifs_readlink (hostio_fs_pid, filename, - linkname, - sizeof (linkname) - 1); - else - ret = readlink (filename, linkname, sizeof (linkname) - 1); - - if (ret == -1) - { - hostio_error (own_buf); - return; - } - - bytes_sent = hostio_reply_with_data (own_buf, linkname, ret, new_packet_len); - - /* If the response does not fit into a single packet, do not attempt - to return a partial response, but simply fail. */ - if (bytes_sent < ret) - sprintf (own_buf, "F-1,%x", FILEIO_ENAMETOOLONG); -} - -/* Handle all the 'F' file transfer packets. */ - -int -handle_vFile (char *own_buf, int packet_len, int *new_packet_len) -{ - if (startswith (own_buf, "vFile:open:")) - handle_open (own_buf); - else if (startswith (own_buf, "vFile:pread:")) - handle_pread (own_buf, new_packet_len); - else if (startswith (own_buf, "vFile:pwrite:")) - handle_pwrite (own_buf, packet_len); - else if (startswith (own_buf, "vFile:fstat:")) - handle_fstat (own_buf, new_packet_len); - else if (startswith (own_buf, "vFile:close:")) - handle_close (own_buf); - else if (startswith (own_buf, "vFile:unlink:")) - handle_unlink (own_buf); - else if (startswith (own_buf, "vFile:readlink:")) - handle_readlink (own_buf, new_packet_len); - else if (startswith (own_buf, "vFile:setfs:")) - handle_setfs (own_buf); - else - return 0; - - return 1; -} diff -Nru gdb-9.1/gdb/gdbserver/hostio-errno.c gdb-10.2/gdb/gdbserver/hostio-errno.c --- gdb-9.1/gdb/gdbserver/hostio-errno.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/hostio-errno.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,33 +0,0 @@ -/* Host file transfer support for gdbserver. - Copyright (C) 2007-2020 Free Software Foundation, Inc. - - Contributed by CodeSourcery. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -/* This file implements the hostio_last_error target callback - on top of errno. */ - -#include "server.h" -#include "gdbsupport/fileio.h" - -void -hostio_last_error_from_errno (char *buf) -{ - int error = errno; - int fileio_error = host_to_fileio_error (error); - sprintf (buf, "F-1,%x", fileio_error); -} diff -Nru gdb-9.1/gdb/gdbserver/hostio.h gdb-10.2/gdb/gdbserver/hostio.h --- gdb-9.1/gdb/gdbserver/hostio.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/hostio.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,31 +0,0 @@ -/* Host file transfer support for gdbserver. - Copyright (C) 1993-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef GDBSERVER_HOSTIO_H -#define GDBSERVER_HOSTIO_H - -/* Per-connection setup. */ -extern void hostio_handle_new_gdb_connection (void); - -/* Functions from hostio.c. */ -extern int handle_vFile (char *, int, int *); - -/* Functions from hostio-errno.c. */ -extern void hostio_last_error_from_errno (char *own_buf); - -#endif /* GDBSERVER_HOSTIO_H */ diff -Nru gdb-9.1/gdb/gdbserver/i387-fp.c gdb-10.2/gdb/gdbserver/i387-fp.c --- gdb-9.1/gdb/gdbserver/i387-fp.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/i387-fp.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,954 +0,0 @@ -/* i387-specific utility functions, for the remote server for GDB. - Copyright (C) 2000-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "server.h" -#include "i387-fp.h" -#include "gdbsupport/x86-xstate.h" - -static const int num_mpx_bnd_registers = 4; -static const int num_mpx_cfg_registers = 2; -static const int num_avx512_k_registers = 8; -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; -static const int num_pkeys_registers = 1; - -/* Note: These functions preserve the reserved bits in control registers. - However, gdbserver promptly throws away that information. */ - -/* These structs should have the proper sizes and alignment on both - i386 and x86-64 machines. */ - -struct i387_fsave { - /* All these are only sixteen bits, plus padding, except for fop (which - is only eleven bits), and fooff / fioff (which are 32 bits each). */ - unsigned short fctrl; - unsigned short pad1; - unsigned short fstat; - unsigned short pad2; - unsigned short ftag; - unsigned short pad3; - unsigned int fioff; - unsigned short fiseg; - unsigned short fop; - unsigned int fooff; - unsigned short foseg; - unsigned short pad4; - - /* Space for eight 80-bit FP values. */ - unsigned char st_space[80]; -}; - -struct i387_fxsave { - /* All these are only sixteen bits, plus padding, except for fop (which - is only eleven bits), and fooff / fioff (which are 32 bits each). */ - unsigned short fctrl; - unsigned short fstat; - unsigned short ftag; - unsigned short fop; - unsigned int fioff; - unsigned short fiseg; - unsigned short pad1; - unsigned int fooff; - unsigned short foseg; - unsigned short pad12; - - unsigned int mxcsr; - unsigned int pad3; - - /* Space for eight 80-bit FP values in 128-bit spaces. */ - unsigned char st_space[128]; - - /* Space for eight 128-bit XMM values, or 16 on x86-64. */ - unsigned char xmm_space[256]; -}; - -struct i387_xsave { - /* All these are only sixteen bits, plus padding, except for fop (which - is only eleven bits), and fooff / fioff (which are 32 bits each). */ - unsigned short fctrl; - unsigned short fstat; - unsigned short ftag; - unsigned short fop; - unsigned int fioff; - unsigned short fiseg; - unsigned short pad1; - unsigned int fooff; - unsigned short foseg; - unsigned short pad12; - - unsigned int mxcsr; - unsigned int mxcsr_mask; - - /* Space for eight 80-bit FP values in 128-bit spaces. */ - unsigned char st_space[128]; - - /* Space for eight 128-bit XMM values, or 16 on x86-64. */ - unsigned char xmm_space[256]; - - unsigned char reserved1[48]; - - /* The extended control register 0 (the XFEATURE_ENABLED_MASK - register). */ - unsigned long long xcr0; - - unsigned char reserved2[40]; - - /* The XSTATE_BV bit vector. */ - unsigned long long xstate_bv; - - unsigned char reserved3[56]; - - /* Space for eight upper 128-bit YMM values, or 16 on x86-64. */ - unsigned char ymmh_space[256]; - - unsigned char reserved4[128]; - - /* Space for 4 bound registers values of 128 bits. */ - unsigned char mpx_bnd_space[64]; - - /* Space for 2 MPX configuration registers of 64 bits - plus reserved space. */ - unsigned char mpx_cfg_space[16]; - - unsigned char reserved5[48]; - - /* Space for 8 OpMask register values of 64 bits. */ - unsigned char k_space[64]; - - /* Space for 16 256-bit zmm0-15. */ - unsigned char zmmh_low_space[512]; - - /* Space for 16 512-bit zmm16-31 values. */ - unsigned char zmmh_high_space[1024]; - - /* Space for 1 32-bit PKRU register. The HW XSTATE size for this feature is - actually 64 bits, but WRPKRU/RDPKRU instructions ignore upper 32 bits. */ - unsigned char pkru_space[8]; -}; - -void -i387_cache_to_fsave (struct regcache *regcache, void *buf) -{ - struct i387_fsave *fp = (struct i387_fsave *) buf; - int i; - int st0_regnum = find_regno (regcache->tdesc, "st0"); - unsigned long val2; - - for (i = 0; i < 8; i++) - collect_register (regcache, i + st0_regnum, - ((char *) &fp->st_space[0]) + i * 10); - - fp->fioff = regcache_raw_get_unsigned_by_name (regcache, "fioff"); - fp->fooff = regcache_raw_get_unsigned_by_name (regcache, "fooff"); - - /* This one's 11 bits... */ - val2 = regcache_raw_get_unsigned_by_name (regcache, "fop"); - fp->fop = (val2 & 0x7FF) | (fp->fop & 0xF800); - - /* Some registers are 16-bit. */ - fp->fctrl = regcache_raw_get_unsigned_by_name (regcache, "fctrl"); - fp->fstat = regcache_raw_get_unsigned_by_name (regcache, "fstat"); - fp->ftag = regcache_raw_get_unsigned_by_name (regcache, "ftag"); - fp->fiseg = regcache_raw_get_unsigned_by_name (regcache, "fiseg"); - fp->foseg = regcache_raw_get_unsigned_by_name (regcache, "foseg"); -} - -void -i387_fsave_to_cache (struct regcache *regcache, const void *buf) -{ - struct i387_fsave *fp = (struct i387_fsave *) buf; - int i; - int st0_regnum = find_regno (regcache->tdesc, "st0"); - unsigned long val; - - for (i = 0; i < 8; i++) - supply_register (regcache, i + st0_regnum, - ((char *) &fp->st_space[0]) + i * 10); - - supply_register_by_name (regcache, "fioff", &fp->fioff); - supply_register_by_name (regcache, "fooff", &fp->fooff); - - /* Some registers are 16-bit. */ - val = fp->fctrl & 0xFFFF; - supply_register_by_name (regcache, "fctrl", &val); - - val = fp->fstat & 0xFFFF; - supply_register_by_name (regcache, "fstat", &val); - - val = fp->ftag & 0xFFFF; - supply_register_by_name (regcache, "ftag", &val); - - val = fp->fiseg & 0xFFFF; - supply_register_by_name (regcache, "fiseg", &val); - - val = fp->foseg & 0xFFFF; - supply_register_by_name (regcache, "foseg", &val); - - /* fop has only 11 valid bits. */ - val = (fp->fop) & 0x7FF; - supply_register_by_name (regcache, "fop", &val); -} - -void -i387_cache_to_fxsave (struct regcache *regcache, void *buf) -{ - struct i387_fxsave *fp = (struct i387_fxsave *) buf; - int i; - int st0_regnum = find_regno (regcache->tdesc, "st0"); - int xmm0_regnum = find_regno (regcache->tdesc, "xmm0"); - unsigned long val, val2; - /* Amd64 has 16 xmm regs; I386 has 8 xmm regs. */ - int num_xmm_registers = register_size (regcache->tdesc, 0) == 8 ? 16 : 8; - - for (i = 0; i < 8; i++) - collect_register (regcache, i + st0_regnum, - ((char *) &fp->st_space[0]) + i * 16); - for (i = 0; i < num_xmm_registers; i++) - collect_register (regcache, i + xmm0_regnum, - ((char *) &fp->xmm_space[0]) + i * 16); - - fp->fioff = regcache_raw_get_unsigned_by_name (regcache, "fioff"); - fp->fooff = regcache_raw_get_unsigned_by_name (regcache, "fooff"); - fp->mxcsr = regcache_raw_get_unsigned_by_name (regcache, "mxcsr"); - - /* This one's 11 bits... */ - val2 = regcache_raw_get_unsigned_by_name (regcache, "fop"); - fp->fop = (val2 & 0x7FF) | (fp->fop & 0xF800); - - /* Some registers are 16-bit. */ - fp->fctrl = regcache_raw_get_unsigned_by_name (regcache, "fctrl"); - fp->fstat = regcache_raw_get_unsigned_by_name (regcache, "fstat"); - - /* Convert to the simplifed tag form stored in fxsave data. */ - val = regcache_raw_get_unsigned_by_name (regcache, "ftag"); - val2 = 0; - for (i = 7; i >= 0; i--) - { - int tag = (val >> (i * 2)) & 3; - - if (tag != 3) - val2 |= (1 << i); - } - fp->ftag = val2; - - fp->fiseg = regcache_raw_get_unsigned_by_name (regcache, "fiseg"); - fp->foseg = regcache_raw_get_unsigned_by_name (regcache, "foseg"); -} - -void -i387_cache_to_xsave (struct regcache *regcache, void *buf) -{ - struct i387_xsave *fp = (struct i387_xsave *) buf; - int i; - unsigned long val, val2; - unsigned long long xstate_bv = 0; - unsigned long long clear_bv = 0; - char raw[64]; - char *p; - /* Amd64 has 16 xmm regs; I386 has 8 xmm regs. */ - int num_xmm_registers = register_size (regcache->tdesc, 0) == 8 ? 16 : 8; - - /* The supported bits in `xstat_bv' are 8 bytes. Clear part in - vector registers if its bit in xstat_bv is zero. */ - clear_bv = (~fp->xstate_bv) & x86_xcr0; - - /* Clear part in x87 and vector registers if its bit in xstat_bv is - zero. */ - if (clear_bv) - { - if ((clear_bv & X86_XSTATE_X87)) - { - for (i = 0; i < 8; i++) - memset (((char *) &fp->st_space[0]) + i * 16, 0, 10); - - fp->fioff = 0; - fp->fooff = 0; - fp->fctrl = I387_FCTRL_INIT_VAL; - fp->fstat = 0; - fp->ftag = 0; - fp->fiseg = 0; - fp->foseg = 0; - fp->fop = 0; - } - - if ((clear_bv & X86_XSTATE_SSE)) - for (i = 0; i < num_xmm_registers; i++) - memset (((char *) &fp->xmm_space[0]) + i * 16, 0, 16); - - if ((clear_bv & X86_XSTATE_AVX)) - for (i = 0; i < num_xmm_registers; i++) - memset (((char *) &fp->ymmh_space[0]) + i * 16, 0, 16); - - if ((clear_bv & X86_XSTATE_SSE) && (clear_bv & X86_XSTATE_AVX)) - memset (((char *) &fp->mxcsr), 0, 4); - - if ((clear_bv & X86_XSTATE_BNDREGS)) - for (i = 0; i < num_mpx_bnd_registers; i++) - memset (((char *) &fp->mpx_bnd_space[0]) + i * 16, 0, 16); - - if ((clear_bv & X86_XSTATE_BNDCFG)) - for (i = 0; i < num_mpx_cfg_registers; i++) - memset (((char *) &fp->mpx_cfg_space[0]) + i * 8, 0, 8); - - if ((clear_bv & X86_XSTATE_K)) - for (i = 0; i < num_avx512_k_registers; i++) - memset (((char *) &fp->k_space[0]) + i * 8, 0, 8); - - if ((clear_bv & X86_XSTATE_ZMM_H)) - for (i = 0; i < num_avx512_zmmh_low_registers; i++) - memset (((char *) &fp->zmmh_low_space[0]) + i * 32, 0, 32); - - if ((clear_bv & X86_XSTATE_ZMM)) - { - for (i = 0; i < num_avx512_zmmh_high_registers; i++) - memset (((char *) &fp->zmmh_low_space[0]) + 32 + i * 64, 0, 32); - for (i = 0; i < num_avx512_xmm_registers; i++) - memset (((char *) &fp->zmmh_high_space[0]) + i * 64, 0, 16); - for (i = 0; i < num_avx512_ymmh_registers; i++) - memset (((char *) &fp->zmmh_high_space[0]) + 16 + i * 64, 0, 16); - } - - if ((clear_bv & X86_XSTATE_PKRU)) - for (i = 0; i < num_pkeys_registers; i++) - memset (((char *) &fp->pkru_space[0]) + i * 4, 0, 4); - } - - /* Check if any x87 registers are changed. */ - if ((x86_xcr0 & X86_XSTATE_X87)) - { - int st0_regnum = find_regno (regcache->tdesc, "st0"); - - for (i = 0; i < 8; i++) - { - collect_register (regcache, i + st0_regnum, raw); - p = ((char *) &fp->st_space[0]) + i * 16; - if (memcmp (raw, p, 10)) - { - xstate_bv |= X86_XSTATE_X87; - memcpy (p, raw, 10); - } - } - } - - /* Check if any SSE registers are changed. */ - if ((x86_xcr0 & X86_XSTATE_SSE)) - { - int xmm0_regnum = find_regno (regcache->tdesc, "xmm0"); - - for (i = 0; i < num_xmm_registers; i++) - { - collect_register (regcache, i + xmm0_regnum, raw); - p = ((char *) &fp->xmm_space[0]) + i * 16; - if (memcmp (raw, p, 16)) - { - xstate_bv |= X86_XSTATE_SSE; - memcpy (p, raw, 16); - } - } - } - - /* Check if any AVX registers are changed. */ - if ((x86_xcr0 & X86_XSTATE_AVX)) - { - int ymm0h_regnum = find_regno (regcache->tdesc, "ymm0h"); - - for (i = 0; i < num_xmm_registers; i++) - { - collect_register (regcache, i + ymm0h_regnum, raw); - p = ((char *) &fp->ymmh_space[0]) + i * 16; - if (memcmp (raw, p, 16)) - { - xstate_bv |= X86_XSTATE_AVX; - memcpy (p, raw, 16); - } - } - } - - /* Check if any bound register has changed. */ - if ((x86_xcr0 & X86_XSTATE_BNDREGS)) - { - int bnd0r_regnum = find_regno (regcache->tdesc, "bnd0raw"); - - for (i = 0; i < num_mpx_bnd_registers; i++) - { - collect_register (regcache, i + bnd0r_regnum, raw); - p = ((char *) &fp->mpx_bnd_space[0]) + i * 16; - if (memcmp (raw, p, 16)) - { - xstate_bv |= X86_XSTATE_BNDREGS; - memcpy (p, raw, 16); - } - } - } - - /* Check if any status register has changed. */ - if ((x86_xcr0 & X86_XSTATE_BNDCFG)) - { - int bndcfg_regnum = find_regno (regcache->tdesc, "bndcfgu"); - - for (i = 0; i < num_mpx_cfg_registers; i++) - { - collect_register (regcache, i + bndcfg_regnum, raw); - p = ((char *) &fp->mpx_cfg_space[0]) + i * 8; - if (memcmp (raw, p, 8)) - { - xstate_bv |= X86_XSTATE_BNDCFG; - memcpy (p, raw, 8); - } - } - } - - /* Check if any K registers are changed. */ - if ((x86_xcr0 & X86_XSTATE_K)) - { - int k0_regnum = find_regno (regcache->tdesc, "k0"); - - for (i = 0; i < num_avx512_k_registers; i++) - { - collect_register (regcache, i + k0_regnum, raw); - p = ((char *) &fp->k_space[0]) + i * 8; - if (memcmp (raw, p, 8) != 0) - { - xstate_bv |= X86_XSTATE_K; - memcpy (p, raw, 8); - } - } - } - - /* Check if any of ZMM0H-ZMM15H registers are changed. */ - if ((x86_xcr0 & X86_XSTATE_ZMM_H)) - { - int zmm0h_regnum = find_regno (regcache->tdesc, "zmm0h"); - - for (i = 0; i < num_avx512_zmmh_low_registers; i++) - { - collect_register (regcache, i + zmm0h_regnum, raw); - p = ((char *) &fp->zmmh_low_space[0]) + i * 32; - if (memcmp (raw, p, 32) != 0) - { - xstate_bv |= X86_XSTATE_ZMM_H; - memcpy (p, raw, 32); - } - } - } - - /* Check if any of ZMM16H-ZMM31H registers are changed. */ - if ((x86_xcr0 & X86_XSTATE_ZMM)) - { - int zmm16h_regnum = find_regno (regcache->tdesc, "zmm16h"); - - for (i = 0; i < num_avx512_zmmh_high_registers; i++) - { - collect_register (regcache, i + zmm16h_regnum, raw); - p = ((char *) &fp->zmmh_high_space[0]) + 32 + i * 64; - if (memcmp (raw, p, 32) != 0) - { - xstate_bv |= X86_XSTATE_ZMM; - memcpy (p, raw, 32); - } - } - } - - /* Check if any XMM_AVX512 registers are changed. */ - if ((x86_xcr0 & X86_XSTATE_ZMM)) - { - int xmm_avx512_regnum = find_regno (regcache->tdesc, "xmm16"); - - for (i = 0; i < num_avx512_xmm_registers; i++) - { - collect_register (regcache, i + xmm_avx512_regnum, raw); - p = ((char *) &fp->zmmh_high_space[0]) + i * 64; - if (memcmp (raw, p, 16) != 0) - { - xstate_bv |= X86_XSTATE_ZMM; - memcpy (p, raw, 16); - } - } - } - - /* Check if any YMMH_AVX512 registers are changed. */ - if ((x86_xcr0 & X86_XSTATE_ZMM)) - { - int ymmh_avx512_regnum = find_regno (regcache->tdesc, "ymm16h"); - - for (i = 0; i < num_avx512_ymmh_registers; i++) - { - collect_register (regcache, i + ymmh_avx512_regnum, raw); - p = ((char *) &fp->zmmh_high_space[0]) + 16 + i * 64; - if (memcmp (raw, p, 16) != 0) - { - xstate_bv |= X86_XSTATE_ZMM; - memcpy (p, raw, 16); - } - } - } - - /* Check if any PKEYS registers are changed. */ - if ((x86_xcr0 & X86_XSTATE_PKRU)) - { - int pkru_regnum = find_regno (regcache->tdesc, "pkru"); - - for (i = 0; i < num_pkeys_registers; i++) - { - collect_register (regcache, i + pkru_regnum, raw); - p = ((char *) &fp->pkru_space[0]) + i * 4; - if (memcmp (raw, p, 4) != 0) - { - xstate_bv |= X86_XSTATE_PKRU; - memcpy (p, raw, 4); - } - } - } - - if ((x86_xcr0 & X86_XSTATE_SSE) || (x86_xcr0 & X86_XSTATE_AVX)) - { - collect_register_by_name (regcache, "mxcsr", raw); - if (memcmp (raw, &fp->mxcsr, 4) != 0) - { - if (((fp->xstate_bv | xstate_bv) - & (X86_XSTATE_SSE | X86_XSTATE_AVX)) == 0) - xstate_bv |= X86_XSTATE_SSE; - memcpy (&fp->mxcsr, raw, 4); - } - } - - if (x86_xcr0 & X86_XSTATE_X87) - { - collect_register_by_name (regcache, "fioff", raw); - if (memcmp (raw, &fp->fioff, 4) != 0) - { - xstate_bv |= X86_XSTATE_X87; - memcpy (&fp->fioff, raw, 4); - } - - collect_register_by_name (regcache, "fooff", raw); - if (memcmp (raw, &fp->fooff, 4) != 0) - { - xstate_bv |= X86_XSTATE_X87; - memcpy (&fp->fooff, raw, 4); - } - - /* This one's 11 bits... */ - val2 = regcache_raw_get_unsigned_by_name (regcache, "fop"); - val2 = (val2 & 0x7FF) | (fp->fop & 0xF800); - if (fp->fop != val2) - { - xstate_bv |= X86_XSTATE_X87; - fp->fop = val2; - } - - /* Some registers are 16-bit. */ - val = regcache_raw_get_unsigned_by_name (regcache, "fctrl"); - if (fp->fctrl != val) - { - xstate_bv |= X86_XSTATE_X87; - fp->fctrl = val; - } - - val = regcache_raw_get_unsigned_by_name (regcache, "fstat"); - if (fp->fstat != val) - { - xstate_bv |= X86_XSTATE_X87; - fp->fstat = val; - } - - /* Convert to the simplifed tag form stored in fxsave data. */ - val = regcache_raw_get_unsigned_by_name (regcache, "ftag"); - val2 = 0; - for (i = 7; i >= 0; i--) - { - int tag = (val >> (i * 2)) & 3; - - if (tag != 3) - val2 |= (1 << i); - } - if (fp->ftag != val2) - { - xstate_bv |= X86_XSTATE_X87; - fp->ftag = val2; - } - - val = regcache_raw_get_unsigned_by_name (regcache, "fiseg"); - if (fp->fiseg != val) - { - xstate_bv |= X86_XSTATE_X87; - fp->fiseg = val; - } - - val = regcache_raw_get_unsigned_by_name (regcache, "foseg"); - if (fp->foseg != val) - { - xstate_bv |= X86_XSTATE_X87; - fp->foseg = val; - } - } - - /* Update the corresponding bits in xstate_bv if any SSE/AVX - registers are changed. */ - fp->xstate_bv |= xstate_bv; -} - -static int -i387_ftag (struct i387_fxsave *fp, int regno) -{ - unsigned char *raw = &fp->st_space[regno * 16]; - unsigned int exponent; - unsigned long fraction[2]; - int integer; - - integer = raw[7] & 0x80; - exponent = (((raw[9] & 0x7f) << 8) | raw[8]); - fraction[0] = ((raw[3] << 24) | (raw[2] << 16) | (raw[1] << 8) | raw[0]); - fraction[1] = (((raw[7] & 0x7f) << 24) | (raw[6] << 16) - | (raw[5] << 8) | raw[4]); - - if (exponent == 0x7fff) - { - /* Special. */ - return (2); - } - else if (exponent == 0x0000) - { - if (fraction[0] == 0x0000 && fraction[1] == 0x0000 && !integer) - { - /* Zero. */ - return (1); - } - else - { - /* Special. */ - return (2); - } - } - else - { - if (integer) - { - /* Valid. */ - return (0); - } - else - { - /* Special. */ - return (2); - } - } -} - -void -i387_fxsave_to_cache (struct regcache *regcache, const void *buf) -{ - struct i387_fxsave *fp = (struct i387_fxsave *) buf; - int i, top; - int st0_regnum = find_regno (regcache->tdesc, "st0"); - int xmm0_regnum = find_regno (regcache->tdesc, "xmm0"); - unsigned long val; - /* Amd64 has 16 xmm regs; I386 has 8 xmm regs. */ - int num_xmm_registers = register_size (regcache->tdesc, 0) == 8 ? 16 : 8; - - for (i = 0; i < 8; i++) - supply_register (regcache, i + st0_regnum, - ((char *) &fp->st_space[0]) + i * 16); - for (i = 0; i < num_xmm_registers; i++) - supply_register (regcache, i + xmm0_regnum, - ((char *) &fp->xmm_space[0]) + i * 16); - - supply_register_by_name (regcache, "fioff", &fp->fioff); - supply_register_by_name (regcache, "fooff", &fp->fooff); - supply_register_by_name (regcache, "mxcsr", &fp->mxcsr); - - /* Some registers are 16-bit. */ - val = fp->fctrl & 0xFFFF; - supply_register_by_name (regcache, "fctrl", &val); - - val = fp->fstat & 0xFFFF; - supply_register_by_name (regcache, "fstat", &val); - - /* Generate the form of ftag data that GDB expects. */ - top = (fp->fstat >> 11) & 0x7; - val = 0; - for (i = 7; i >= 0; i--) - { - int tag; - if (fp->ftag & (1 << i)) - tag = i387_ftag (fp, (i + 8 - top) % 8); - else - tag = 3; - val |= tag << (2 * i); - } - supply_register_by_name (regcache, "ftag", &val); - - val = fp->fiseg & 0xFFFF; - supply_register_by_name (regcache, "fiseg", &val); - - val = fp->foseg & 0xFFFF; - supply_register_by_name (regcache, "foseg", &val); - - val = (fp->fop) & 0x7FF; - supply_register_by_name (regcache, "fop", &val); -} - -void -i387_xsave_to_cache (struct regcache *regcache, const void *buf) -{ - struct i387_xsave *fp = (struct i387_xsave *) buf; - struct i387_fxsave *fxp = (struct i387_fxsave *) buf; - int i, top; - unsigned long val; - unsigned long long clear_bv; - gdb_byte *p; - /* Amd64 has 16 xmm regs; I386 has 8 xmm regs. */ - int num_xmm_registers = register_size (regcache->tdesc, 0) == 8 ? 16 : 8; - - /* The supported bits in `xstat_bv' are 8 bytes. Clear part in - vector registers if its bit in xstat_bv is zero. */ - clear_bv = (~fp->xstate_bv) & x86_xcr0; - - /* Check if any x87 registers are changed. */ - if ((x86_xcr0 & X86_XSTATE_X87) != 0) - { - int st0_regnum = find_regno (regcache->tdesc, "st0"); - - if ((clear_bv & X86_XSTATE_X87) != 0) - { - for (i = 0; i < 8; i++) - supply_register_zeroed (regcache, i + st0_regnum); - } - else - { - p = (gdb_byte *) &fp->st_space[0]; - for (i = 0; i < 8; i++) - supply_register (regcache, i + st0_regnum, p + i * 16); - } - } - - if ((x86_xcr0 & X86_XSTATE_SSE) != 0) - { - int xmm0_regnum = find_regno (regcache->tdesc, "xmm0"); - - if ((clear_bv & X86_XSTATE_SSE)) - { - for (i = 0; i < num_xmm_registers; i++) - supply_register_zeroed (regcache, i + xmm0_regnum); - } - else - { - p = (gdb_byte *) &fp->xmm_space[0]; - for (i = 0; i < num_xmm_registers; i++) - supply_register (regcache, i + xmm0_regnum, p + i * 16); - } - } - - if ((x86_xcr0 & X86_XSTATE_AVX) != 0) - { - int ymm0h_regnum = find_regno (regcache->tdesc, "ymm0h"); - - if ((clear_bv & X86_XSTATE_AVX) != 0) - { - for (i = 0; i < num_xmm_registers; i++) - supply_register_zeroed (regcache, i + ymm0h_regnum); - } - else - { - p = (gdb_byte *) &fp->ymmh_space[0]; - for (i = 0; i < num_xmm_registers; i++) - supply_register (regcache, i + ymm0h_regnum, p + i * 16); - } - } - - if ((x86_xcr0 & X86_XSTATE_BNDREGS)) - { - int bnd0r_regnum = find_regno (regcache->tdesc, "bnd0raw"); - - - if ((clear_bv & X86_XSTATE_BNDREGS) != 0) - { - for (i = 0; i < num_mpx_bnd_registers; i++) - supply_register_zeroed (regcache, i + bnd0r_regnum); - } - else - { - p = (gdb_byte *) &fp->mpx_bnd_space[0]; - for (i = 0; i < num_mpx_bnd_registers; i++) - supply_register (regcache, i + bnd0r_regnum, p + i * 16); - } - - } - - if ((x86_xcr0 & X86_XSTATE_BNDCFG)) - { - int bndcfg_regnum = find_regno (regcache->tdesc, "bndcfgu"); - - if ((clear_bv & X86_XSTATE_BNDCFG) != 0) - { - for (i = 0; i < num_mpx_cfg_registers; i++) - supply_register_zeroed (regcache, i + bndcfg_regnum); - } - else - { - p = (gdb_byte *) &fp->mpx_cfg_space[0]; - for (i = 0; i < num_mpx_cfg_registers; i++) - supply_register (regcache, i + bndcfg_regnum, p + i * 8); - } - } - - if ((x86_xcr0 & X86_XSTATE_K) != 0) - { - int k0_regnum = find_regno (regcache->tdesc, "k0"); - - if ((clear_bv & X86_XSTATE_K) != 0) - { - for (i = 0; i < num_avx512_k_registers; i++) - supply_register_zeroed (regcache, i + k0_regnum); - } - else - { - p = (gdb_byte *) &fp->k_space[0]; - for (i = 0; i < num_avx512_k_registers; i++) - supply_register (regcache, i + k0_regnum, p + i * 8); - } - } - - if ((x86_xcr0 & X86_XSTATE_ZMM_H) != 0) - { - int zmm0h_regnum = find_regno (regcache->tdesc, "zmm0h"); - - if ((clear_bv & X86_XSTATE_ZMM_H) != 0) - { - for (i = 0; i < num_avx512_zmmh_low_registers; i++) - supply_register_zeroed (regcache, i + zmm0h_regnum); - } - else - { - p = (gdb_byte *) &fp->zmmh_low_space[0]; - for (i = 0; i < num_avx512_zmmh_low_registers; i++) - supply_register (regcache, i + zmm0h_regnum, p + i * 32); - } - } - - if ((x86_xcr0 & X86_XSTATE_ZMM) != 0) - { - int zmm16h_regnum = find_regno (regcache->tdesc, "zmm16h"); - int ymm16h_regnum = find_regno (regcache->tdesc, "ymm16h"); - int xmm16_regnum = find_regno (regcache->tdesc, "xmm16"); - - if ((clear_bv & X86_XSTATE_ZMM) != 0) - { - for (i = 0; i < num_avx512_zmmh_high_registers; i++) - supply_register_zeroed (regcache, i + zmm16h_regnum); - for (i = 0; i < num_avx512_ymmh_registers; i++) - supply_register_zeroed (regcache, i + ymm16h_regnum); - for (i = 0; i < num_avx512_xmm_registers; i++) - supply_register_zeroed (regcache, i + xmm16_regnum); - } - else - { - p = (gdb_byte *) &fp->zmmh_high_space[0]; - for (i = 0; i < num_avx512_zmmh_high_registers; i++) - supply_register (regcache, i + zmm16h_regnum, p + 32 + i * 64); - for (i = 0; i < num_avx512_ymmh_registers; i++) - supply_register (regcache, i + ymm16h_regnum, p + 16 + i * 64); - for (i = 0; i < num_avx512_xmm_registers; i++) - supply_register (regcache, i + xmm16_regnum, p + i * 64); - } - } - - if ((x86_xcr0 & X86_XSTATE_PKRU) != 0) - { - int pkru_regnum = find_regno (regcache->tdesc, "pkru"); - - if ((clear_bv & X86_XSTATE_PKRU) != 0) - { - for (i = 0; i < num_pkeys_registers; i++) - supply_register_zeroed (regcache, i + pkru_regnum); - } - else - { - p = (gdb_byte *) &fp->pkru_space[0]; - for (i = 0; i < num_pkeys_registers; i++) - supply_register (regcache, i + pkru_regnum, p + i * 4); - } - } - - if ((clear_bv & (X86_XSTATE_SSE | X86_XSTATE_AVX)) - == (X86_XSTATE_SSE | X86_XSTATE_AVX)) - { - unsigned int default_mxcsr = I387_MXCSR_INIT_VAL; - supply_register_by_name (regcache, "mxcsr", &default_mxcsr); - } - else - supply_register_by_name (regcache, "mxcsr", &fp->mxcsr); - - if ((clear_bv & X86_XSTATE_X87) != 0) - { - supply_register_by_name_zeroed (regcache, "fioff"); - supply_register_by_name_zeroed (regcache, "fooff"); - - val = I387_FCTRL_INIT_VAL; - supply_register_by_name (regcache, "fctrl", &val); - - supply_register_by_name_zeroed (regcache, "fstat"); - - val = 0xFFFF; - supply_register_by_name (regcache, "ftag", &val); - - supply_register_by_name_zeroed (regcache, "fiseg"); - supply_register_by_name_zeroed (regcache, "foseg"); - supply_register_by_name_zeroed (regcache, "fop"); - } - else - { - supply_register_by_name (regcache, "fioff", &fp->fioff); - supply_register_by_name (regcache, "fooff", &fp->fooff); - - /* Some registers are 16-bit. */ - val = fp->fctrl & 0xFFFF; - supply_register_by_name (regcache, "fctrl", &val); - - val = fp->fstat & 0xFFFF; - supply_register_by_name (regcache, "fstat", &val); - - /* Generate the form of ftag data that GDB expects. */ - top = (fp->fstat >> 11) & 0x7; - val = 0; - for (i = 7; i >= 0; i--) - { - int tag; - if (fp->ftag & (1 << i)) - tag = i387_ftag (fxp, (i + 8 - top) % 8); - else - tag = 3; - val |= tag << (2 * i); - } - supply_register_by_name (regcache, "ftag", &val); - - val = fp->fiseg & 0xFFFF; - supply_register_by_name (regcache, "fiseg", &val); - - val = fp->foseg & 0xFFFF; - supply_register_by_name (regcache, "foseg", &val); - - val = (fp->fop) & 0x7FF; - supply_register_by_name (regcache, "fop", &val); - } -} - -/* Default to SSE. */ -unsigned long long x86_xcr0 = X86_XSTATE_SSE_MASK; diff -Nru gdb-9.1/gdb/gdbserver/i387-fp.h gdb-10.2/gdb/gdbserver/i387-fp.h --- gdb-9.1/gdb/gdbserver/i387-fp.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/i387-fp.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,33 +0,0 @@ -/* i387-specific utility functions, for the remote server for GDB. - Copyright (C) 2000-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef GDBSERVER_I387_FP_H -#define GDBSERVER_I387_FP_H - -void i387_cache_to_fsave (struct regcache *regcache, void *buf); -void i387_fsave_to_cache (struct regcache *regcache, const void *buf); - -void i387_cache_to_fxsave (struct regcache *regcache, void *buf); -void i387_fxsave_to_cache (struct regcache *regcache, const void *buf); - -void i387_cache_to_xsave (struct regcache *regcache, void *buf); -void i387_xsave_to_cache (struct regcache *regcache, const void *buf); - -extern unsigned long long x86_xcr0; - -#endif /* GDBSERVER_I387_FP_H */ diff -Nru gdb-9.1/gdb/gdbserver/inferiors.c gdb-10.2/gdb/gdbserver/inferiors.c --- gdb-9.1/gdb/gdbserver/inferiors.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/inferiors.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,243 +0,0 @@ -/* Inferior process information for the remote server for GDB. - Copyright (C) 2002-2020 Free Software Foundation, Inc. - - Contributed by MontaVista Software. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "server.h" -#include "gdbthread.h" -#include "dll.h" - -std::list<process_info *> all_processes; -std::list<thread_info *> all_threads; - -struct thread_info *current_thread; - -/* The current working directory used to start the inferior. */ -static const char *current_inferior_cwd = NULL; - -struct thread_info * -add_thread (ptid_t thread_id, void *target_data) -{ - struct thread_info *new_thread = XCNEW (struct thread_info); - - new_thread->id = thread_id; - new_thread->last_resume_kind = resume_continue; - new_thread->last_status.kind = TARGET_WAITKIND_IGNORE; - - all_threads.push_back (new_thread); - - if (current_thread == NULL) - current_thread = new_thread; - - new_thread->target_data = target_data; - - return new_thread; -} - -/* See gdbthread.h. */ - -struct thread_info * -get_first_thread (void) -{ - if (!all_threads.empty ()) - return all_threads.front (); - else - return NULL; -} - -struct thread_info * -find_thread_ptid (ptid_t ptid) -{ - return find_thread ([&] (thread_info *thread) { - return thread->id == ptid; - }); -} - -/* Find a thread associated with the given PROCESS, or NULL if no - such thread exists. */ - -static struct thread_info * -find_thread_process (const struct process_info *const process) -{ - return find_any_thread_of_pid (process->pid); -} - -/* See gdbthread.h. */ - -struct thread_info * -find_any_thread_of_pid (int pid) -{ - return find_thread (pid, [] (thread_info *thread) { - return true; - }); -} - -static void -free_one_thread (thread_info *thread) -{ - free_register_cache (thread_regcache_data (thread)); - free (thread); -} - -void -remove_thread (struct thread_info *thread) -{ - if (thread->btrace != NULL) - target_disable_btrace (thread->btrace); - - discard_queued_stop_replies (ptid_of (thread)); - all_threads.remove (thread); - free_one_thread (thread); - if (current_thread == thread) - current_thread = NULL; -} - -void * -thread_target_data (struct thread_info *thread) -{ - return thread->target_data; -} - -struct regcache * -thread_regcache_data (struct thread_info *thread) -{ - return thread->regcache_data; -} - -void -set_thread_regcache_data (struct thread_info *thread, struct regcache *data) -{ - thread->regcache_data = data; -} - -void -clear_inferiors (void) -{ - for_each_thread (free_one_thread); - all_threads.clear (); - - clear_dlls (); - - current_thread = NULL; -} - -struct process_info * -add_process (int pid, int attached) -{ - process_info *process = new process_info (pid, attached); - - all_processes.push_back (process); - - return process; -} - -/* Remove a process from the common process list and free the memory - allocated for it. - The caller is responsible for freeing private data first. */ - -void -remove_process (struct process_info *process) -{ - clear_symbol_cache (&process->symbol_cache); - free_all_breakpoints (process); - gdb_assert (find_thread_process (process) == NULL); - all_processes.remove (process); - delete process; -} - -process_info * -find_process_pid (int pid) -{ - return find_process ([&] (process_info *process) { - return process->pid == pid; - }); -} - -/* Get the first process in the process list, or NULL if the list is empty. */ - -process_info * -get_first_process (void) -{ - if (!all_processes.empty ()) - return all_processes.front (); - else - return NULL; -} - -/* Return non-zero if there are any inferiors that we have created - (as opposed to attached-to). */ - -int -have_started_inferiors_p (void) -{ - return find_process ([] (process_info *process) { - return !process->attached; - }) != NULL; -} - -/* Return non-zero if there are any inferiors that we have attached to. */ - -int -have_attached_inferiors_p (void) -{ - return find_process ([] (process_info *process) { - return process->attached; - }) != NULL; -} - -struct process_info * -get_thread_process (const struct thread_info *thread) -{ - return find_process_pid (thread->id.pid ()); -} - -struct process_info * -current_process (void) -{ - gdb_assert (current_thread != NULL); - return get_thread_process (current_thread); -} - -/* See gdbsupport/common-gdbthread.h. */ - -void -switch_to_thread (ptid_t ptid) -{ - gdb_assert (ptid != minus_one_ptid); - current_thread = find_thread_ptid (ptid); -} - -/* See gdbsupport/common-inferior.h. */ - -const char * -get_inferior_cwd () -{ - return current_inferior_cwd; -} - -/* See gdbsupport/common-inferior.h. */ - -void -set_inferior_cwd (const char *cwd) -{ - xfree ((void *) current_inferior_cwd); - if (cwd != NULL) - current_inferior_cwd = xstrdup (cwd); - else - current_inferior_cwd = NULL; -} diff -Nru gdb-9.1/gdb/gdbserver/inferiors.h gdb-10.2/gdb/gdbserver/inferiors.h --- gdb-9.1/gdb/gdbserver/inferiors.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/inferiors.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,147 +0,0 @@ -/* Inferior process information for the remote server for GDB. - Copyright (C) 1993-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef GDBSERVER_INFERIORS_H -#define GDBSERVER_INFERIORS_H - -#include "gdbsupport/gdb_vecs.h" -#include <list> - -struct thread_info; -struct regcache; -struct target_desc; -struct sym_cache; -struct breakpoint; -struct raw_breakpoint; -struct fast_tracepoint_jump; -struct process_info_private; - -struct process_info -{ - process_info (int pid_, int attached_) - : pid (pid_), attached (attached_) - {} - - /* This process' pid. */ - int pid; - - /* Nonzero if this child process was attached rather than - spawned. */ - int attached; - - /* True if GDB asked us to detach from this process, but we remained - attached anyway. */ - int gdb_detached = 0; - - /* The symbol cache. */ - struct sym_cache *symbol_cache = NULL; - - /* The list of memory breakpoints. */ - struct breakpoint *breakpoints = NULL; - - /* The list of raw memory breakpoints. */ - struct raw_breakpoint *raw_breakpoints = NULL; - - /* The list of installed fast tracepoints. */ - struct fast_tracepoint_jump *fast_tracepoint_jumps = NULL; - - /* The list of syscalls to report, or just a single element, ANY_SYSCALL, - for unfiltered syscall reporting. */ - std::vector<int> syscalls_to_catch; - - const struct target_desc *tdesc = NULL; - - /* Private target data. */ - struct process_info_private *priv = NULL; -}; - -/* Get the pid of PROC. */ - -static inline int -pid_of (const process_info *proc) -{ - return proc->pid; -} - -/* Return a pointer to the process that corresponds to the current - thread (current_thread). It is an error to call this if there is - no current thread selected. */ - -struct process_info *current_process (void); -struct process_info *get_thread_process (const struct thread_info *); - -extern std::list<process_info *> all_processes; - -/* Invoke FUNC for each process. */ - -template <typename Func> -static void -for_each_process (Func func) -{ - std::list<process_info *>::iterator next, cur = all_processes.begin (); - - while (cur != all_processes.end ()) - { - next = cur; - next++; - func (*cur); - cur = next; - } -} - -/* Find the first process for which FUNC returns true. Return NULL if no - process satisfying FUNC is found. */ - -template <typename Func> -static process_info * -find_process (Func func) -{ - std::list<process_info *>::iterator next, cur = all_processes.begin (); - - while (cur != all_processes.end ()) - { - next = cur; - next++; - - if (func (*cur)) - return *cur; - - cur = next; - } - - return NULL; -} - -extern struct thread_info *current_thread; - -/* Return the first process in the processes list. */ -struct process_info *get_first_process (void); - -struct process_info *add_process (int pid, int attached); -void remove_process (struct process_info *process); -struct process_info *find_process_pid (int pid); -int have_started_inferiors_p (void); -int have_attached_inferiors_p (void); - -void clear_inferiors (void); - -void *thread_target_data (struct thread_info *); -struct regcache *thread_regcache_data (struct thread_info *); -void set_thread_regcache_data (struct thread_info *, struct regcache *); - -#endif /* GDBSERVER_INFERIORS_H */ diff -Nru gdb-9.1/gdb/gdbserver/linux-aarch32-low.c gdb-10.2/gdb/gdbserver/linux-aarch32-low.c --- gdb-9.1/gdb/gdbserver/linux-aarch32-low.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/linux-aarch32-low.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,303 +0,0 @@ -/* Copyright (C) 1995-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "server.h" -#include "arch/arm.h" -#include "arch/arm-linux.h" -#include "linux-low.h" -#include "linux-aarch32-low.h" - -#include <sys/ptrace.h> -/* Don't include elf.h if linux/elf.h got included by gdb_proc_service.h. - On Bionic elf.h and linux/elf.h have conflicting definitions. */ -#ifndef ELFMAG0 -#include <elf.h> -#endif - -/* Correct in either endianness. */ -#define arm_abi_breakpoint 0xef9f0001UL - -/* For new EABI binaries. We recognize it regardless of which ABI - is used for gdbserver, so single threaded debugging should work - OK, but for multi-threaded debugging we only insert the current - ABI's breakpoint instruction. For now at least. */ -#define arm_eabi_breakpoint 0xe7f001f0UL - -#if (defined __ARM_EABI__ || defined __aarch64__) -static const unsigned long arm_breakpoint = arm_eabi_breakpoint; -#else -static const unsigned long arm_breakpoint = arm_abi_breakpoint; -#endif - -#define arm_breakpoint_len 4 -static const unsigned short thumb_breakpoint = 0xde01; -#define thumb_breakpoint_len 2 -static const unsigned short thumb2_breakpoint[] = { 0xf7f0, 0xa000 }; -#define thumb2_breakpoint_len 4 - -/* Some older versions of GNU/Linux and Android do not define - the following macros. */ -#ifndef NT_ARM_VFP -#define NT_ARM_VFP 0x400 -#endif - -/* Collect GP registers from REGCACHE to buffer BUF. */ - -void -arm_fill_gregset (struct regcache *regcache, void *buf) -{ - int i; - uint32_t *regs = (uint32_t *) buf; - uint32_t cpsr = regs[ARM_CPSR_GREGNUM]; - - for (i = ARM_A1_REGNUM; i <= ARM_PC_REGNUM; i++) - collect_register (regcache, i, ®s[i]); - - collect_register (regcache, ARM_PS_REGNUM, ®s[ARM_CPSR_GREGNUM]); - /* Keep reserved bits bit 20 to bit 23. */ - regs[ARM_CPSR_GREGNUM] = ((regs[ARM_CPSR_GREGNUM] & 0xff0fffff) - | (cpsr & 0x00f00000)); -} - -/* Supply GP registers contents, stored in BUF, to REGCACHE. */ - -void -arm_store_gregset (struct regcache *regcache, const void *buf) -{ - int i; - char zerobuf[8]; - const uint32_t *regs = (const uint32_t *) buf; - uint32_t cpsr = regs[ARM_CPSR_GREGNUM]; - - memset (zerobuf, 0, 8); - for (i = ARM_A1_REGNUM; i <= ARM_PC_REGNUM; i++) - supply_register (regcache, i, ®s[i]); - - for (; i < ARM_PS_REGNUM; i++) - supply_register (regcache, i, zerobuf); - - /* Clear reserved bits bit 20 to bit 23. */ - cpsr &= 0xff0fffff; - supply_register (regcache, ARM_PS_REGNUM, &cpsr); -} - -/* Collect NUM number of VFP registers from REGCACHE to buffer BUF. */ - -void -arm_fill_vfpregset_num (struct regcache *regcache, void *buf, int num) -{ - int i, base; - - gdb_assert (num == 16 || num == 32); - - base = find_regno (regcache->tdesc, "d0"); - for (i = 0; i < num; i++) - collect_register (regcache, base + i, (char *) buf + i * 8); - - collect_register_by_name (regcache, "fpscr", (char *) buf + 32 * 8); -} - -/* Supply NUM number of VFP registers contents, stored in BUF, to - REGCACHE. */ - -void -arm_store_vfpregset_num (struct regcache *regcache, const void *buf, int num) -{ - int i, base; - - gdb_assert (num == 16 || num == 32); - - base = find_regno (regcache->tdesc, "d0"); - for (i = 0; i < num; i++) - supply_register (regcache, base + i, (char *) buf + i * 8); - - supply_register_by_name (regcache, "fpscr", (char *) buf + 32 * 8); -} - -static void -arm_fill_vfpregset (struct regcache *regcache, void *buf) -{ - arm_fill_vfpregset_num (regcache, buf, 32); -} - -static void -arm_store_vfpregset (struct regcache *regcache, const void *buf) -{ - arm_store_vfpregset_num (regcache, buf, 32); -} - -/* Register sets with using PTRACE_GETREGSET. */ - -static struct regset_info aarch32_regsets[] = { - { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_PRSTATUS, - ARM_CORE_REGS_SIZE + ARM_INT_REGISTER_SIZE, GENERAL_REGS, - arm_fill_gregset, arm_store_gregset }, - { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_ARM_VFP, ARM_VFP3_REGS_SIZE, - EXTENDED_REGS, - arm_fill_vfpregset, arm_store_vfpregset }, - NULL_REGSET -}; - -static struct regsets_info aarch32_regsets_info = - { - aarch32_regsets, /* regsets */ - 0, /* num_regsets */ - NULL, /* disabled_regsets */ - }; - -struct regs_info regs_info_aarch32 = - { - NULL, /* regset_bitmap */ - NULL, /* usrregs */ - &aarch32_regsets_info - }; - -/* Returns 1 if the current instruction set is thumb, 0 otherwise. */ - -int -arm_is_thumb_mode (void) -{ - struct regcache *regcache = get_thread_regcache (current_thread, 1); - unsigned long cpsr; - - collect_register_by_name (regcache, "cpsr", &cpsr); - - if (cpsr & 0x20) - return 1; - else - return 0; -} - -/* Returns 1 if there is a software breakpoint at location. */ - -int -arm_breakpoint_at (CORE_ADDR where) -{ - if (arm_is_thumb_mode ()) - { - /* Thumb mode. */ - unsigned short insn; - - (*the_target->read_memory) (where, (unsigned char *) &insn, 2); - if (insn == thumb_breakpoint) - return 1; - - if (insn == thumb2_breakpoint[0]) - { - (*the_target->read_memory) (where + 2, (unsigned char *) &insn, 2); - if (insn == thumb2_breakpoint[1]) - return 1; - } - } - else - { - /* ARM mode. */ - unsigned long insn; - - (*the_target->read_memory) (where, (unsigned char *) &insn, 4); - if (insn == arm_abi_breakpoint) - return 1; - - if (insn == arm_eabi_breakpoint) - return 1; - } - - return 0; -} - -/* Implementation of linux_target_ops method "breakpoint_kind_from_pc". - - Determine the type and size of breakpoint to insert at PCPTR. Uses the - program counter value to determine whether a 16-bit or 32-bit breakpoint - should be used. It returns the breakpoint's kind, and adjusts the program - counter (if necessary) to point to the actual memory location where the - breakpoint should be inserted. */ - -int -arm_breakpoint_kind_from_pc (CORE_ADDR *pcptr) -{ - if (IS_THUMB_ADDR (*pcptr)) - { - gdb_byte buf[2]; - - *pcptr = UNMAKE_THUMB_ADDR (*pcptr); - - /* Check whether we are replacing a thumb2 32-bit instruction. */ - if (target_read_memory (*pcptr, buf, 2) == 0) - { - unsigned short inst1 = 0; - - target_read_memory (*pcptr, (gdb_byte *) &inst1, 2); - if (thumb_insn_size (inst1) == 4) - return ARM_BP_KIND_THUMB2; - } - return ARM_BP_KIND_THUMB; - } - else - return ARM_BP_KIND_ARM; -} - -/* Implementation of the linux_target_ops method "sw_breakpoint_from_kind". */ - -const gdb_byte * -arm_sw_breakpoint_from_kind (int kind , int *size) -{ - *size = arm_breakpoint_len; - /* Define an ARM-mode breakpoint; we only set breakpoints in the C - library, which is most likely to be ARM. If the kernel supports - clone events, we will never insert a breakpoint, so even a Thumb - C library will work; so will mixing EABI/non-EABI gdbserver and - application. */ - switch (kind) - { - case ARM_BP_KIND_THUMB: - *size = thumb_breakpoint_len; - return (gdb_byte *) &thumb_breakpoint; - case ARM_BP_KIND_THUMB2: - *size = thumb2_breakpoint_len; - return (gdb_byte *) &thumb2_breakpoint; - case ARM_BP_KIND_ARM: - *size = arm_breakpoint_len; - return (const gdb_byte *) &arm_breakpoint; - default: - return NULL; - } - return NULL; -} - -/* Implementation of the linux_target_ops method - "breakpoint_kind_from_current_state". */ - -int -arm_breakpoint_kind_from_current_state (CORE_ADDR *pcptr) -{ - if (arm_is_thumb_mode ()) - { - *pcptr = MAKE_THUMB_ADDR (*pcptr); - return arm_breakpoint_kind_from_pc (pcptr); - } - else - { - return arm_breakpoint_kind_from_pc (pcptr); - } -} - -void -initialize_low_arch_aarch32 (void) -{ - initialize_regsets_info (&aarch32_regsets_info); -} diff -Nru gdb-9.1/gdb/gdbserver/linux-aarch32-low.h gdb-10.2/gdb/gdbserver/linux-aarch32-low.h --- gdb-9.1/gdb/gdbserver/linux-aarch32-low.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/linux-aarch32-low.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,39 +0,0 @@ -/* Copyright (C) 1995-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef GDBSERVER_LINUX_AARCH32_LOW_H -#define GDBSERVER_LINUX_AARCH32_LOW_H - -extern struct regs_info regs_info_aarch32; - -void arm_fill_gregset (struct regcache *regcache, void *buf); -void arm_store_gregset (struct regcache *regcache, const void *buf); -void arm_fill_vfpregset_num (struct regcache *regcache, void *buf, int num); -void arm_store_vfpregset_num (struct regcache *regcache, const void *buf, - int num); - -int arm_breakpoint_kind_from_pc (CORE_ADDR *pcptr); -const gdb_byte *arm_sw_breakpoint_from_kind (int kind , int *size); -int arm_breakpoint_kind_from_current_state (CORE_ADDR *pcptr); -int arm_breakpoint_at (CORE_ADDR where); - -void initialize_low_arch_aarch32 (void); - -void init_registers_arm_with_neon (void); -int arm_is_thumb_mode (void); - -#endif /* GDBSERVER_LINUX_AARCH32_LOW_H */ diff -Nru gdb-9.1/gdb/gdbserver/linux-aarch32-tdesc.c gdb-10.2/gdb/gdbserver/linux-aarch32-tdesc.c --- gdb-9.1/gdb/gdbserver/linux-aarch32-tdesc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/linux-aarch32-tdesc.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,47 +0,0 @@ -/* Copyright (C) 2019-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "server.h" -#include "tdesc.h" -#include "arch/aarch32.h" -#include <inttypes.h> - -static struct target_desc *tdesc_aarch32; - -/* See linux-aarch32-tdesc.h. */ - -const target_desc * -aarch32_linux_read_description () -{ - if (tdesc_aarch32 == nullptr) - { - tdesc_aarch32 = aarch32_create_target_description (); - - static const char *expedite_regs[] = { "r11", "sp", "pc", 0 }; - init_target_desc (tdesc_aarch32, expedite_regs); - } - return tdesc_aarch32; -} - -/* See linux-aarch32-tdesc.h. */ - -bool -is_aarch32_linux_description (const target_desc *tdesc) -{ - gdb_assert (tdesc != nullptr); - return tdesc == tdesc_aarch32; -} diff -Nru gdb-9.1/gdb/gdbserver/linux-aarch32-tdesc.h gdb-10.2/gdb/gdbserver/linux-aarch32-tdesc.h --- gdb-9.1/gdb/gdbserver/linux-aarch32-tdesc.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/linux-aarch32-tdesc.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,29 +0,0 @@ -/* Copyright (C) 2019-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef GDBSERVER_LINUX_AARCH32_TDESC_H -#define GDBSERVER_LINUX_AARCH32_TDESC_H - -/* Return the AArch32 target description. */ - -const target_desc * aarch32_linux_read_description (); - -/* Return true if TDESC is the AArch32 target description. */ - -bool is_aarch32_linux_description (const target_desc *tdesc); - -#endif /* linux-aarch32-tdesc.h. */ diff -Nru gdb-9.1/gdb/gdbserver/linux-aarch64-ipa.c gdb-10.2/gdb/gdbserver/linux-aarch64-ipa.c --- gdb-9.1/gdb/gdbserver/linux-aarch64-ipa.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/linux-aarch64-ipa.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,209 +0,0 @@ -/* GNU/Linux/AArch64 specific low level interface, for the in-process - agent library for GDB. - - Copyright (C) 2015-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "server.h" -#include <sys/mman.h> -#include "tracepoint.h" -#include <elf.h> -#ifdef HAVE_GETAUXVAL -#include <sys/auxv.h> -#endif -#include "linux-aarch64-tdesc.h" - -/* Each register saved by the jump pad is in a 16 byte cell. */ -#define FT_CR_SIZE 16 - -#define FT_CR_FPCR 0 -#define FT_CR_FPSR 1 -#define FT_CR_CPSR 2 -#define FT_CR_PC 3 -#define FT_CR_SP 4 -#define FT_CR_X0 5 -#define FT_CR_GPR(n) (FT_CR_X0 + (n)) -#define FT_CR_FPR(n) (FT_CR_GPR (31) + (n)) - -/* Mapping between registers collected by the jump pad and GDB's register - array layout used by regcache. - - See linux-aarch64-low.c (aarch64_install_fast_tracepoint_jump_pad) for - more details. */ - -static const int aarch64_ft_collect_regmap[] = { - FT_CR_GPR (0), - FT_CR_GPR (1), - FT_CR_GPR (2), - FT_CR_GPR (3), - FT_CR_GPR (4), - FT_CR_GPR (5), - FT_CR_GPR (6), - FT_CR_GPR (7), - FT_CR_GPR (8), - FT_CR_GPR (9), - FT_CR_GPR (10), - FT_CR_GPR (11), - FT_CR_GPR (12), - FT_CR_GPR (13), - FT_CR_GPR (14), - FT_CR_GPR (15), - FT_CR_GPR (16), - FT_CR_GPR (17), - FT_CR_GPR (18), - FT_CR_GPR (19), - FT_CR_GPR (20), - FT_CR_GPR (21), - FT_CR_GPR (22), - FT_CR_GPR (23), - FT_CR_GPR (24), - FT_CR_GPR (25), - FT_CR_GPR (26), - FT_CR_GPR (27), - FT_CR_GPR (28), - /* FP */ - FT_CR_GPR (29), - /* LR */ - FT_CR_GPR (30), - FT_CR_SP, - FT_CR_PC, - FT_CR_CPSR, - FT_CR_FPR (0), - FT_CR_FPR (1), - FT_CR_FPR (2), - FT_CR_FPR (3), - FT_CR_FPR (4), - FT_CR_FPR (5), - FT_CR_FPR (6), - FT_CR_FPR (7), - FT_CR_FPR (8), - FT_CR_FPR (9), - FT_CR_FPR (10), - FT_CR_FPR (11), - FT_CR_FPR (12), - FT_CR_FPR (13), - FT_CR_FPR (14), - FT_CR_FPR (15), - FT_CR_FPR (16), - FT_CR_FPR (17), - FT_CR_FPR (18), - FT_CR_FPR (19), - FT_CR_FPR (20), - FT_CR_FPR (21), - FT_CR_FPR (22), - FT_CR_FPR (23), - FT_CR_FPR (24), - FT_CR_FPR (25), - FT_CR_FPR (26), - FT_CR_FPR (27), - FT_CR_FPR (28), - FT_CR_FPR (29), - FT_CR_FPR (30), - FT_CR_FPR (31), - FT_CR_FPSR, - FT_CR_FPCR -}; - -#define AARCH64_NUM_FT_COLLECT_GREGS \ - (sizeof (aarch64_ft_collect_regmap) / sizeof(aarch64_ft_collect_regmap[0])) - -/* Fill in REGCACHE with registers saved by the jump pad in BUF. */ - -void -supply_fast_tracepoint_registers (struct regcache *regcache, - const unsigned char *buf) -{ - int i; - - for (i = 0; i < AARCH64_NUM_FT_COLLECT_GREGS; i++) - supply_register (regcache, i, - ((char *) buf) - + (aarch64_ft_collect_regmap[i] * FT_CR_SIZE)); -} - -ULONGEST -get_raw_reg (const unsigned char *raw_regs, int regnum) -{ - if (regnum >= AARCH64_NUM_FT_COLLECT_GREGS) - return 0; - - return *(ULONGEST *) (raw_regs - + aarch64_ft_collect_regmap[regnum] * FT_CR_SIZE); -} - -/* Return target_desc to use for IPA, given the tdesc index passed by - gdbserver. Index is ignored, since we have only one tdesc - at the moment. SVE and pauth not yet supported. */ - -const struct target_desc * -get_ipa_tdesc (int idx) -{ - return aarch64_linux_read_description (0, false); -} - -/* Allocate buffer for the jump pads. The branch instruction has a reach - of +/- 128MiB, and the executable is loaded at 0x400000 (4MiB). - To maximize the area of executable that can use tracepoints, try - allocating at 0x400000 - size initially, decreasing until we hit - a free area. */ - -void * -alloc_jump_pad_buffer (size_t size) -{ - uintptr_t addr; - uintptr_t exec_base = getauxval (AT_PHDR); - int pagesize; - void *res; - - if (exec_base == 0) - exec_base = 0x400000; - - pagesize = sysconf (_SC_PAGE_SIZE); - if (pagesize == -1) - perror_with_name ("sysconf"); - - addr = exec_base - size; - - /* size should already be page-aligned, but this can't hurt. */ - addr &= ~(pagesize - 1); - - /* Search for a free area. If we hit 0, we're out of luck. */ - for (; addr; addr -= pagesize) - { - /* No MAP_FIXED - we don't want to zap someone's mapping. */ - res = mmap ((void *) addr, size, - PROT_READ | PROT_WRITE | PROT_EXEC, - MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); - - /* If we got what we wanted, return. */ - if ((uintptr_t) res == addr) - return res; - - /* If we got a mapping, but at a wrong address, undo it. */ - if (res != MAP_FAILED) - munmap (res, size); - } - - return NULL; -} - -void -initialize_low_tracepoint (void) -{ - /* SVE and pauth not yet supported. */ - aarch64_linux_read_description (0, false); -} diff -Nru gdb-9.1/gdb/gdbserver/linux-aarch64-low.c gdb-10.2/gdb/gdbserver/linux-aarch64-low.c --- gdb-9.1/gdb/gdbserver/linux-aarch64-low.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/linux-aarch64-low.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,3098 +0,0 @@ -/* GNU/Linux/AArch64 specific low level interface, for the remote server for - GDB. - - Copyright (C) 2009-2020 Free Software Foundation, Inc. - Contributed by ARM Ltd. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "server.h" -#include "linux-low.h" -#include "nat/aarch64-linux.h" -#include "nat/aarch64-linux-hw-point.h" -#include "arch/aarch64-insn.h" -#include "linux-aarch32-low.h" -#include "elf/common.h" -#include "ax.h" -#include "tracepoint.h" -#include "debug.h" - -#include <signal.h> -#include <sys/user.h> -#include "nat/gdb_ptrace.h" -#include <asm/ptrace.h> -#include <inttypes.h> -#include <endian.h> -#include <sys/uio.h> - -#include "gdb_proc_service.h" -#include "arch/aarch64.h" -#include "linux-aarch32-tdesc.h" -#include "linux-aarch64-tdesc.h" -#include "nat/aarch64-sve-linux-ptrace.h" -#include "tdesc.h" - -#ifdef HAVE_SYS_REG_H -#include <sys/reg.h> -#endif - -/* Per-process arch-specific data we want to keep. */ - -struct arch_process_info -{ - /* Hardware breakpoint/watchpoint data. - The reason for them to be per-process rather than per-thread is - due to the lack of information in the gdbserver environment; - gdbserver is not told that whether a requested hardware - breakpoint/watchpoint is thread specific or not, so it has to set - each hw bp/wp for every thread in the current process. The - higher level bp/wp management in gdb will resume a thread if a hw - bp/wp trap is not expected for it. Since the hw bp/wp setting is - same for each thread, it is reasonable for the data to live here. - */ - struct aarch64_debug_reg_state debug_reg_state; -}; - -/* Return true if the size of register 0 is 8 byte. */ - -static int -is_64bit_tdesc (void) -{ - struct regcache *regcache = get_thread_regcache (current_thread, 0); - - return register_size (regcache->tdesc, 0) == 8; -} - -/* Return true if the regcache contains the number of SVE registers. */ - -static bool -is_sve_tdesc (void) -{ - struct regcache *regcache = get_thread_regcache (current_thread, 0); - - return tdesc_contains_feature (regcache->tdesc, "org.gnu.gdb.aarch64.sve"); -} - -static void -aarch64_fill_gregset (struct regcache *regcache, void *buf) -{ - struct user_pt_regs *regset = (struct user_pt_regs *) buf; - int i; - - for (i = 0; i < AARCH64_X_REGS_NUM; i++) - collect_register (regcache, AARCH64_X0_REGNUM + i, ®set->regs[i]); - collect_register (regcache, AARCH64_SP_REGNUM, ®set->sp); - collect_register (regcache, AARCH64_PC_REGNUM, ®set->pc); - collect_register (regcache, AARCH64_CPSR_REGNUM, ®set->pstate); -} - -static void -aarch64_store_gregset (struct regcache *regcache, const void *buf) -{ - const struct user_pt_regs *regset = (const struct user_pt_regs *) buf; - int i; - - for (i = 0; i < AARCH64_X_REGS_NUM; i++) - supply_register (regcache, AARCH64_X0_REGNUM + i, ®set->regs[i]); - supply_register (regcache, AARCH64_SP_REGNUM, ®set->sp); - supply_register (regcache, AARCH64_PC_REGNUM, ®set->pc); - supply_register (regcache, AARCH64_CPSR_REGNUM, ®set->pstate); -} - -static void -aarch64_fill_fpregset (struct regcache *regcache, void *buf) -{ - struct user_fpsimd_state *regset = (struct user_fpsimd_state *) buf; - int i; - - for (i = 0; i < AARCH64_V_REGS_NUM; i++) - collect_register (regcache, AARCH64_V0_REGNUM + i, ®set->vregs[i]); - collect_register (regcache, AARCH64_FPSR_REGNUM, ®set->fpsr); - collect_register (regcache, AARCH64_FPCR_REGNUM, ®set->fpcr); -} - -static void -aarch64_store_fpregset (struct regcache *regcache, const void *buf) -{ - const struct user_fpsimd_state *regset - = (const struct user_fpsimd_state *) buf; - int i; - - for (i = 0; i < AARCH64_V_REGS_NUM; i++) - supply_register (regcache, AARCH64_V0_REGNUM + i, ®set->vregs[i]); - supply_register (regcache, AARCH64_FPSR_REGNUM, ®set->fpsr); - supply_register (regcache, AARCH64_FPCR_REGNUM, ®set->fpcr); -} - -/* Store the pauth registers to regcache. */ - -static void -aarch64_store_pauthregset (struct regcache *regcache, const void *buf) -{ - uint64_t *pauth_regset = (uint64_t *) buf; - int pauth_base = find_regno (regcache->tdesc, "pauth_dmask"); - - if (pauth_base == 0) - return; - - supply_register (regcache, AARCH64_PAUTH_DMASK_REGNUM (pauth_base), - &pauth_regset[0]); - supply_register (regcache, AARCH64_PAUTH_CMASK_REGNUM (pauth_base), - &pauth_regset[1]); -} - -/* Implementation of linux_target_ops method "get_pc". */ - -static CORE_ADDR -aarch64_get_pc (struct regcache *regcache) -{ - if (register_size (regcache->tdesc, 0) == 8) - return linux_get_pc_64bit (regcache); - else - return linux_get_pc_32bit (regcache); -} - -/* Implementation of linux_target_ops method "set_pc". */ - -static void -aarch64_set_pc (struct regcache *regcache, CORE_ADDR pc) -{ - if (register_size (regcache->tdesc, 0) == 8) - linux_set_pc_64bit (regcache, pc); - else - linux_set_pc_32bit (regcache, pc); -} - -#define aarch64_breakpoint_len 4 - -/* AArch64 BRK software debug mode instruction. - This instruction needs to match gdb/aarch64-tdep.c - (aarch64_default_breakpoint). */ -static const gdb_byte aarch64_breakpoint[] = {0x00, 0x00, 0x20, 0xd4}; - -/* Implementation of linux_target_ops method "breakpoint_at". */ - -static int -aarch64_breakpoint_at (CORE_ADDR where) -{ - if (is_64bit_tdesc ()) - { - gdb_byte insn[aarch64_breakpoint_len]; - - (*the_target->read_memory) (where, (unsigned char *) &insn, - aarch64_breakpoint_len); - if (memcmp (insn, aarch64_breakpoint, aarch64_breakpoint_len) == 0) - return 1; - - return 0; - } - else - return arm_breakpoint_at (where); -} - -static void -aarch64_init_debug_reg_state (struct aarch64_debug_reg_state *state) -{ - int i; - - for (i = 0; i < AARCH64_HBP_MAX_NUM; ++i) - { - state->dr_addr_bp[i] = 0; - state->dr_ctrl_bp[i] = 0; - state->dr_ref_count_bp[i] = 0; - } - - for (i = 0; i < AARCH64_HWP_MAX_NUM; ++i) - { - state->dr_addr_wp[i] = 0; - state->dr_ctrl_wp[i] = 0; - state->dr_ref_count_wp[i] = 0; - } -} - -/* Return the pointer to the debug register state structure in the - current process' arch-specific data area. */ - -struct aarch64_debug_reg_state * -aarch64_get_debug_reg_state (pid_t pid) -{ - struct process_info *proc = find_process_pid (pid); - - return &proc->priv->arch_private->debug_reg_state; -} - -/* Implementation of linux_target_ops method "supports_z_point_type". */ - -static int -aarch64_supports_z_point_type (char z_type) -{ - switch (z_type) - { - case Z_PACKET_SW_BP: - case Z_PACKET_HW_BP: - case Z_PACKET_WRITE_WP: - case Z_PACKET_READ_WP: - case Z_PACKET_ACCESS_WP: - return 1; - default: - return 0; - } -} - -/* Implementation of linux_target_ops method "insert_point". - - It actually only records the info of the to-be-inserted bp/wp; - the actual insertion will happen when threads are resumed. */ - -static int -aarch64_insert_point (enum raw_bkpt_type type, CORE_ADDR addr, - int len, struct raw_breakpoint *bp) -{ - int ret; - enum target_hw_bp_type targ_type; - struct aarch64_debug_reg_state *state - = aarch64_get_debug_reg_state (pid_of (current_thread)); - - if (show_debug_regs) - fprintf (stderr, "insert_point on entry (addr=0x%08lx, len=%d)\n", - (unsigned long) addr, len); - - /* Determine the type from the raw breakpoint type. */ - targ_type = raw_bkpt_type_to_target_hw_bp_type (type); - - if (targ_type != hw_execute) - { - if (aarch64_linux_region_ok_for_watchpoint (addr, len)) - ret = aarch64_handle_watchpoint (targ_type, addr, len, - 1 /* is_insert */, state); - else - ret = -1; - } - else - { - if (len == 3) - { - /* LEN is 3 means the breakpoint is set on a 32-bit thumb - instruction. Set it to 2 to correctly encode length bit - mask in hardware/watchpoint control register. */ - len = 2; - } - ret = aarch64_handle_breakpoint (targ_type, addr, len, - 1 /* is_insert */, state); - } - - if (show_debug_regs) - aarch64_show_debug_reg_state (state, "insert_point", addr, len, - targ_type); - - return ret; -} - -/* Implementation of linux_target_ops method "remove_point". - - It actually only records the info of the to-be-removed bp/wp, - the actual removal will be done when threads are resumed. */ - -static int -aarch64_remove_point (enum raw_bkpt_type type, CORE_ADDR addr, - int len, struct raw_breakpoint *bp) -{ - int ret; - enum target_hw_bp_type targ_type; - struct aarch64_debug_reg_state *state - = aarch64_get_debug_reg_state (pid_of (current_thread)); - - if (show_debug_regs) - fprintf (stderr, "remove_point on entry (addr=0x%08lx, len=%d)\n", - (unsigned long) addr, len); - - /* Determine the type from the raw breakpoint type. */ - targ_type = raw_bkpt_type_to_target_hw_bp_type (type); - - /* Set up state pointers. */ - if (targ_type != hw_execute) - ret = - aarch64_handle_watchpoint (targ_type, addr, len, 0 /* is_insert */, - state); - else - { - if (len == 3) - { - /* LEN is 3 means the breakpoint is set on a 32-bit thumb - instruction. Set it to 2 to correctly encode length bit - mask in hardware/watchpoint control register. */ - len = 2; - } - ret = aarch64_handle_breakpoint (targ_type, addr, len, - 0 /* is_insert */, state); - } - - if (show_debug_regs) - aarch64_show_debug_reg_state (state, "remove_point", addr, len, - targ_type); - - return ret; -} - -/* Implementation of linux_target_ops method "stopped_data_address". */ - -static CORE_ADDR -aarch64_stopped_data_address (void) -{ - siginfo_t siginfo; - int pid, i; - struct aarch64_debug_reg_state *state; - - pid = lwpid_of (current_thread); - - /* Get the siginfo. */ - if (ptrace (PTRACE_GETSIGINFO, pid, NULL, &siginfo) != 0) - return (CORE_ADDR) 0; - - /* Need to be a hardware breakpoint/watchpoint trap. */ - if (siginfo.si_signo != SIGTRAP - || (siginfo.si_code & 0xffff) != 0x0004 /* TRAP_HWBKPT */) - return (CORE_ADDR) 0; - - /* Check if the address matches any watched address. */ - state = aarch64_get_debug_reg_state (pid_of (current_thread)); - for (i = aarch64_num_wp_regs - 1; i >= 0; --i) - { - const unsigned int offset - = aarch64_watchpoint_offset (state->dr_ctrl_wp[i]); - const unsigned int len = aarch64_watchpoint_length (state->dr_ctrl_wp[i]); - const CORE_ADDR addr_trap = (CORE_ADDR) siginfo.si_addr; - const CORE_ADDR addr_watch = state->dr_addr_wp[i] + offset; - const CORE_ADDR addr_watch_aligned = align_down (state->dr_addr_wp[i], 8); - const CORE_ADDR addr_orig = state->dr_addr_orig_wp[i]; - - if (state->dr_ref_count_wp[i] - && DR_CONTROL_ENABLED (state->dr_ctrl_wp[i]) - && addr_trap >= addr_watch_aligned - && addr_trap < addr_watch + len) - { - /* ADDR_TRAP reports the first address of the memory range - accessed by the CPU, regardless of what was the memory - range watched. Thus, a large CPU access that straddles - the ADDR_WATCH..ADDR_WATCH+LEN range may result in an - ADDR_TRAP that is lower than the - ADDR_WATCH..ADDR_WATCH+LEN range. E.g.: - - addr: | 4 | 5 | 6 | 7 | 8 | - |---- range watched ----| - |----------- range accessed ------------| - - In this case, ADDR_TRAP will be 4. - - To match a watchpoint known to GDB core, we must never - report *ADDR_P outside of any ADDR_WATCH..ADDR_WATCH+LEN - range. ADDR_WATCH <= ADDR_TRAP < ADDR_ORIG is a false - positive on kernels older than 4.10. See PR - external/20207. */ - return addr_orig; - } - } - - return (CORE_ADDR) 0; -} - -/* Implementation of linux_target_ops method "stopped_by_watchpoint". */ - -static int -aarch64_stopped_by_watchpoint (void) -{ - if (aarch64_stopped_data_address () != 0) - return 1; - else - return 0; -} - -/* Fetch the thread-local storage pointer for libthread_db. */ - -ps_err_e -ps_get_thread_area (struct ps_prochandle *ph, - lwpid_t lwpid, int idx, void **base) -{ - return aarch64_ps_get_thread_area (ph, lwpid, idx, base, - is_64bit_tdesc ()); -} - -/* Implementation of linux_target_ops method "siginfo_fixup". */ - -static int -aarch64_linux_siginfo_fixup (siginfo_t *native, gdb_byte *inf, int direction) -{ - /* Is the inferior 32-bit? If so, then fixup the siginfo object. */ - if (!is_64bit_tdesc ()) - { - if (direction == 0) - aarch64_compat_siginfo_from_siginfo ((struct compat_siginfo *) inf, - native); - else - aarch64_siginfo_from_compat_siginfo (native, - (struct compat_siginfo *) inf); - - return 1; - } - - return 0; -} - -/* Implementation of linux_target_ops method "new_process". */ - -static struct arch_process_info * -aarch64_linux_new_process (void) -{ - struct arch_process_info *info = XCNEW (struct arch_process_info); - - aarch64_init_debug_reg_state (&info->debug_reg_state); - - return info; -} - -/* Implementation of linux_target_ops method "delete_process". */ - -static void -aarch64_linux_delete_process (struct arch_process_info *info) -{ - xfree (info); -} - -/* Implementation of linux_target_ops method "linux_new_fork". */ - -static void -aarch64_linux_new_fork (struct process_info *parent, - struct process_info *child) -{ - /* These are allocated by linux_add_process. */ - gdb_assert (parent->priv != NULL - && parent->priv->arch_private != NULL); - gdb_assert (child->priv != NULL - && child->priv->arch_private != NULL); - - /* Linux kernel before 2.6.33 commit - 72f674d203cd230426437cdcf7dd6f681dad8b0d - will inherit hardware debug registers from parent - on fork/vfork/clone. Newer Linux kernels create such tasks with - zeroed debug registers. - - GDB core assumes the child inherits the watchpoints/hw - breakpoints of the parent, and will remove them all from the - forked off process. Copy the debug registers mirrors into the - new process so that all breakpoints and watchpoints can be - removed together. The debug registers mirror will become zeroed - in the end before detaching the forked off process, thus making - this compatible with older Linux kernels too. */ - - *child->priv->arch_private = *parent->priv->arch_private; -} - -/* Matches HWCAP_PACA in kernel header arch/arm64/include/uapi/asm/hwcap.h. */ -#define AARCH64_HWCAP_PACA (1 << 30) - -/* Implementation of linux_target_ops method "arch_setup". */ - -static void -aarch64_arch_setup (void) -{ - unsigned int machine; - int is_elf64; - int tid; - - tid = lwpid_of (current_thread); - - is_elf64 = linux_pid_exe_is_elf_64_file (tid, &machine); - - if (is_elf64) - { - uint64_t vq = aarch64_sve_get_vq (tid); - unsigned long hwcap = linux_get_hwcap (8); - bool pauth_p = hwcap & AARCH64_HWCAP_PACA; - - current_process ()->tdesc = aarch64_linux_read_description (vq, pauth_p); - } - else - current_process ()->tdesc = aarch32_linux_read_description (); - - aarch64_linux_get_debug_reg_capacity (lwpid_of (current_thread)); -} - -/* Wrapper for aarch64_sve_regs_copy_to_reg_buf. */ - -static void -aarch64_sve_regs_copy_to_regcache (struct regcache *regcache, const void *buf) -{ - return aarch64_sve_regs_copy_to_reg_buf (regcache, buf); -} - -/* Wrapper for aarch64_sve_regs_copy_from_reg_buf. */ - -static void -aarch64_sve_regs_copy_from_regcache (struct regcache *regcache, void *buf) -{ - return aarch64_sve_regs_copy_from_reg_buf (regcache, buf); -} - -static struct regset_info aarch64_regsets[] = -{ - { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_PRSTATUS, - sizeof (struct user_pt_regs), GENERAL_REGS, - aarch64_fill_gregset, aarch64_store_gregset }, - { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_FPREGSET, - sizeof (struct user_fpsimd_state), FP_REGS, - aarch64_fill_fpregset, aarch64_store_fpregset - }, - { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_ARM_PAC_MASK, - AARCH64_PAUTH_REGS_SIZE, OPTIONAL_REGS, - NULL, aarch64_store_pauthregset }, - NULL_REGSET -}; - -static struct regsets_info aarch64_regsets_info = - { - aarch64_regsets, /* regsets */ - 0, /* num_regsets */ - NULL, /* disabled_regsets */ - }; - -static struct regs_info regs_info_aarch64 = - { - NULL, /* regset_bitmap */ - NULL, /* usrregs */ - &aarch64_regsets_info, - }; - -static struct regset_info aarch64_sve_regsets[] = -{ - { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_PRSTATUS, - sizeof (struct user_pt_regs), GENERAL_REGS, - aarch64_fill_gregset, aarch64_store_gregset }, - { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_ARM_SVE, - SVE_PT_SIZE (AARCH64_MAX_SVE_VQ, SVE_PT_REGS_SVE), EXTENDED_REGS, - aarch64_sve_regs_copy_from_regcache, aarch64_sve_regs_copy_to_regcache - }, - { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_ARM_PAC_MASK, - AARCH64_PAUTH_REGS_SIZE, OPTIONAL_REGS, - NULL, aarch64_store_pauthregset }, - NULL_REGSET -}; - -static struct regsets_info aarch64_sve_regsets_info = - { - aarch64_sve_regsets, /* regsets. */ - 0, /* num_regsets. */ - NULL, /* disabled_regsets. */ - }; - -static struct regs_info regs_info_aarch64_sve = - { - NULL, /* regset_bitmap. */ - NULL, /* usrregs. */ - &aarch64_sve_regsets_info, - }; - -/* Implementation of linux_target_ops method "regs_info". */ - -static const struct regs_info * -aarch64_regs_info (void) -{ - if (!is_64bit_tdesc ()) - return ®s_info_aarch32; - - if (is_sve_tdesc ()) - return ®s_info_aarch64_sve; - - return ®s_info_aarch64; -} - -/* Implementation of linux_target_ops method "supports_tracepoints". */ - -static int -aarch64_supports_tracepoints (void) -{ - if (current_thread == NULL) - return 1; - else - { - /* We don't support tracepoints on aarch32 now. */ - return is_64bit_tdesc (); - } -} - -/* Implementation of linux_target_ops method "get_thread_area". */ - -static int -aarch64_get_thread_area (int lwpid, CORE_ADDR *addrp) -{ - struct iovec iovec; - uint64_t reg; - - iovec.iov_base = ® - iovec.iov_len = sizeof (reg); - - if (ptrace (PTRACE_GETREGSET, lwpid, NT_ARM_TLS, &iovec) != 0) - return -1; - - *addrp = reg; - - return 0; -} - -/* Implementation of linux_target_ops method "get_syscall_trapinfo". */ - -static void -aarch64_get_syscall_trapinfo (struct regcache *regcache, int *sysno) -{ - int use_64bit = register_size (regcache->tdesc, 0) == 8; - - if (use_64bit) - { - long l_sysno; - - collect_register_by_name (regcache, "x8", &l_sysno); - *sysno = (int) l_sysno; - } - else - collect_register_by_name (regcache, "r7", sysno); -} - -/* List of condition codes that we need. */ - -enum aarch64_condition_codes -{ - EQ = 0x0, - NE = 0x1, - LO = 0x3, - GE = 0xa, - LT = 0xb, - GT = 0xc, - LE = 0xd, -}; - -enum aarch64_operand_type -{ - OPERAND_IMMEDIATE, - OPERAND_REGISTER, -}; - -/* Representation of an operand. At this time, it only supports register - and immediate types. */ - -struct aarch64_operand -{ - /* Type of the operand. */ - enum aarch64_operand_type type; - - /* Value of the operand according to the type. */ - union - { - uint32_t imm; - struct aarch64_register reg; - }; -}; - -/* List of registers that we are currently using, we can add more here as - we need to use them. */ - -/* General purpose scratch registers (64 bit). */ -static const struct aarch64_register x0 = { 0, 1 }; -static const struct aarch64_register x1 = { 1, 1 }; -static const struct aarch64_register x2 = { 2, 1 }; -static const struct aarch64_register x3 = { 3, 1 }; -static const struct aarch64_register x4 = { 4, 1 }; - -/* General purpose scratch registers (32 bit). */ -static const struct aarch64_register w0 = { 0, 0 }; -static const struct aarch64_register w2 = { 2, 0 }; - -/* Intra-procedure scratch registers. */ -static const struct aarch64_register ip0 = { 16, 1 }; - -/* Special purpose registers. */ -static const struct aarch64_register fp = { 29, 1 }; -static const struct aarch64_register lr = { 30, 1 }; -static const struct aarch64_register sp = { 31, 1 }; -static const struct aarch64_register xzr = { 31, 1 }; - -/* Dynamically allocate a new register. If we know the register - statically, we should make it a global as above instead of using this - helper function. */ - -static struct aarch64_register -aarch64_register (unsigned num, int is64) -{ - return (struct aarch64_register) { num, is64 }; -} - -/* Helper function to create a register operand, for instructions with - different types of operands. - - For example: - p += emit_mov (p, x0, register_operand (x1)); */ - -static struct aarch64_operand -register_operand (struct aarch64_register reg) -{ - struct aarch64_operand operand; - - operand.type = OPERAND_REGISTER; - operand.reg = reg; - - return operand; -} - -/* Helper function to create an immediate operand, for instructions with - different types of operands. - - For example: - p += emit_mov (p, x0, immediate_operand (12)); */ - -static struct aarch64_operand -immediate_operand (uint32_t imm) -{ - struct aarch64_operand operand; - - operand.type = OPERAND_IMMEDIATE; - operand.imm = imm; - - return operand; -} - -/* Helper function to create an offset memory operand. - - For example: - p += emit_ldr (p, x0, sp, offset_memory_operand (16)); */ - -static struct aarch64_memory_operand -offset_memory_operand (int32_t offset) -{ - return (struct aarch64_memory_operand) { MEMORY_OPERAND_OFFSET, offset }; -} - -/* Helper function to create a pre-index memory operand. - - For example: - p += emit_ldr (p, x0, sp, preindex_memory_operand (16)); */ - -static struct aarch64_memory_operand -preindex_memory_operand (int32_t index) -{ - return (struct aarch64_memory_operand) { MEMORY_OPERAND_PREINDEX, index }; -} - -/* Helper function to create a post-index memory operand. - - For example: - p += emit_ldr (p, x0, sp, postindex_memory_operand (16)); */ - -static struct aarch64_memory_operand -postindex_memory_operand (int32_t index) -{ - return (struct aarch64_memory_operand) { MEMORY_OPERAND_POSTINDEX, index }; -} - -/* System control registers. These special registers can be written and - read with the MRS and MSR instructions. - - - NZCV: Condition flags. GDB refers to this register under the CPSR - name. - - FPSR: Floating-point status register. - - FPCR: Floating-point control registers. - - TPIDR_EL0: Software thread ID register. */ - -enum aarch64_system_control_registers -{ - /* op0 op1 crn crm op2 */ - NZCV = (0x1 << 14) | (0x3 << 11) | (0x4 << 7) | (0x2 << 3) | 0x0, - FPSR = (0x1 << 14) | (0x3 << 11) | (0x4 << 7) | (0x4 << 3) | 0x1, - FPCR = (0x1 << 14) | (0x3 << 11) | (0x4 << 7) | (0x4 << 3) | 0x0, - TPIDR_EL0 = (0x1 << 14) | (0x3 << 11) | (0xd << 7) | (0x0 << 3) | 0x2 -}; - -/* Write a BLR instruction into *BUF. - - BLR rn - - RN is the register to branch to. */ - -static int -emit_blr (uint32_t *buf, struct aarch64_register rn) -{ - return aarch64_emit_insn (buf, BLR | ENCODE (rn.num, 5, 5)); -} - -/* Write a RET instruction into *BUF. - - RET xn - - RN is the register to branch to. */ - -static int -emit_ret (uint32_t *buf, struct aarch64_register rn) -{ - return aarch64_emit_insn (buf, RET | ENCODE (rn.num, 5, 5)); -} - -static int -emit_load_store_pair (uint32_t *buf, enum aarch64_opcodes opcode, - struct aarch64_register rt, - struct aarch64_register rt2, - struct aarch64_register rn, - struct aarch64_memory_operand operand) -{ - uint32_t opc; - uint32_t pre_index; - uint32_t write_back; - - if (rt.is64) - opc = ENCODE (2, 2, 30); - else - opc = ENCODE (0, 2, 30); - - switch (operand.type) - { - case MEMORY_OPERAND_OFFSET: - { - pre_index = ENCODE (1, 1, 24); - write_back = ENCODE (0, 1, 23); - break; - } - case MEMORY_OPERAND_POSTINDEX: - { - pre_index = ENCODE (0, 1, 24); - write_back = ENCODE (1, 1, 23); - break; - } - case MEMORY_OPERAND_PREINDEX: - { - pre_index = ENCODE (1, 1, 24); - write_back = ENCODE (1, 1, 23); - break; - } - default: - return 0; - } - - return aarch64_emit_insn (buf, opcode | opc | pre_index | write_back - | ENCODE (operand.index >> 3, 7, 15) - | ENCODE (rt2.num, 5, 10) - | ENCODE (rn.num, 5, 5) | ENCODE (rt.num, 5, 0)); -} - -/* Write a STP instruction into *BUF. - - STP rt, rt2, [rn, #offset] - STP rt, rt2, [rn, #index]! - STP rt, rt2, [rn], #index - - RT and RT2 are the registers to store. - RN is the base address register. - OFFSET is the immediate to add to the base address. It is limited to a - -512 .. 504 range (7 bits << 3). */ - -static int -emit_stp (uint32_t *buf, struct aarch64_register rt, - struct aarch64_register rt2, struct aarch64_register rn, - struct aarch64_memory_operand operand) -{ - return emit_load_store_pair (buf, STP, rt, rt2, rn, operand); -} - -/* Write a LDP instruction into *BUF. - - LDP rt, rt2, [rn, #offset] - LDP rt, rt2, [rn, #index]! - LDP rt, rt2, [rn], #index - - RT and RT2 are the registers to store. - RN is the base address register. - OFFSET is the immediate to add to the base address. It is limited to a - -512 .. 504 range (7 bits << 3). */ - -static int -emit_ldp (uint32_t *buf, struct aarch64_register rt, - struct aarch64_register rt2, struct aarch64_register rn, - struct aarch64_memory_operand operand) -{ - return emit_load_store_pair (buf, LDP, rt, rt2, rn, operand); -} - -/* Write a LDP (SIMD&VFP) instruction using Q registers into *BUF. - - LDP qt, qt2, [rn, #offset] - - RT and RT2 are the Q registers to store. - RN is the base address register. - OFFSET is the immediate to add to the base address. It is limited to - -1024 .. 1008 range (7 bits << 4). */ - -static int -emit_ldp_q_offset (uint32_t *buf, unsigned rt, unsigned rt2, - struct aarch64_register rn, int32_t offset) -{ - uint32_t opc = ENCODE (2, 2, 30); - uint32_t pre_index = ENCODE (1, 1, 24); - - return aarch64_emit_insn (buf, LDP_SIMD_VFP | opc | pre_index - | ENCODE (offset >> 4, 7, 15) - | ENCODE (rt2, 5, 10) - | ENCODE (rn.num, 5, 5) | ENCODE (rt, 5, 0)); -} - -/* Write a STP (SIMD&VFP) instruction using Q registers into *BUF. - - STP qt, qt2, [rn, #offset] - - RT and RT2 are the Q registers to store. - RN is the base address register. - OFFSET is the immediate to add to the base address. It is limited to - -1024 .. 1008 range (7 bits << 4). */ - -static int -emit_stp_q_offset (uint32_t *buf, unsigned rt, unsigned rt2, - struct aarch64_register rn, int32_t offset) -{ - uint32_t opc = ENCODE (2, 2, 30); - uint32_t pre_index = ENCODE (1, 1, 24); - - return aarch64_emit_insn (buf, STP_SIMD_VFP | opc | pre_index - | ENCODE (offset >> 4, 7, 15) - | ENCODE (rt2, 5, 10) - | ENCODE (rn.num, 5, 5) | ENCODE (rt, 5, 0)); -} - -/* Write a LDRH instruction into *BUF. - - LDRH wt, [xn, #offset] - LDRH wt, [xn, #index]! - LDRH wt, [xn], #index - - RT is the register to store. - RN is the base address register. - OFFSET is the immediate to add to the base address. It is limited to - 0 .. 32760 range (12 bits << 3). */ - -static int -emit_ldrh (uint32_t *buf, struct aarch64_register rt, - struct aarch64_register rn, - struct aarch64_memory_operand operand) -{ - return aarch64_emit_load_store (buf, 1, LDR, rt, rn, operand); -} - -/* Write a LDRB instruction into *BUF. - - LDRB wt, [xn, #offset] - LDRB wt, [xn, #index]! - LDRB wt, [xn], #index - - RT is the register to store. - RN is the base address register. - OFFSET is the immediate to add to the base address. It is limited to - 0 .. 32760 range (12 bits << 3). */ - -static int -emit_ldrb (uint32_t *buf, struct aarch64_register rt, - struct aarch64_register rn, - struct aarch64_memory_operand operand) -{ - return aarch64_emit_load_store (buf, 0, LDR, rt, rn, operand); -} - - - -/* Write a STR instruction into *BUF. - - STR rt, [rn, #offset] - STR rt, [rn, #index]! - STR rt, [rn], #index - - RT is the register to store. - RN is the base address register. - OFFSET is the immediate to add to the base address. It is limited to - 0 .. 32760 range (12 bits << 3). */ - -static int -emit_str (uint32_t *buf, struct aarch64_register rt, - struct aarch64_register rn, - struct aarch64_memory_operand operand) -{ - return aarch64_emit_load_store (buf, rt.is64 ? 3 : 2, STR, rt, rn, operand); -} - -/* Helper function emitting an exclusive load or store instruction. */ - -static int -emit_load_store_exclusive (uint32_t *buf, uint32_t size, - enum aarch64_opcodes opcode, - struct aarch64_register rs, - struct aarch64_register rt, - struct aarch64_register rt2, - struct aarch64_register rn) -{ - return aarch64_emit_insn (buf, opcode | ENCODE (size, 2, 30) - | ENCODE (rs.num, 5, 16) | ENCODE (rt2.num, 5, 10) - | ENCODE (rn.num, 5, 5) | ENCODE (rt.num, 5, 0)); -} - -/* Write a LAXR instruction into *BUF. - - LDAXR rt, [xn] - - RT is the destination register. - RN is the base address register. */ - -static int -emit_ldaxr (uint32_t *buf, struct aarch64_register rt, - struct aarch64_register rn) -{ - return emit_load_store_exclusive (buf, rt.is64 ? 3 : 2, LDAXR, xzr, rt, - xzr, rn); -} - -/* Write a STXR instruction into *BUF. - - STXR ws, rt, [xn] - - RS is the result register, it indicates if the store succeeded or not. - RT is the destination register. - RN is the base address register. */ - -static int -emit_stxr (uint32_t *buf, struct aarch64_register rs, - struct aarch64_register rt, struct aarch64_register rn) -{ - return emit_load_store_exclusive (buf, rt.is64 ? 3 : 2, STXR, rs, rt, - xzr, rn); -} - -/* Write a STLR instruction into *BUF. - - STLR rt, [xn] - - RT is the register to store. - RN is the base address register. */ - -static int -emit_stlr (uint32_t *buf, struct aarch64_register rt, - struct aarch64_register rn) -{ - return emit_load_store_exclusive (buf, rt.is64 ? 3 : 2, STLR, xzr, rt, - xzr, rn); -} - -/* Helper function for data processing instructions with register sources. */ - -static int -emit_data_processing_reg (uint32_t *buf, uint32_t opcode, - struct aarch64_register rd, - struct aarch64_register rn, - struct aarch64_register rm) -{ - uint32_t size = ENCODE (rd.is64, 1, 31); - - return aarch64_emit_insn (buf, opcode | size | ENCODE (rm.num, 5, 16) - | ENCODE (rn.num, 5, 5) | ENCODE (rd.num, 5, 0)); -} - -/* Helper function for data processing instructions taking either a register - or an immediate. */ - -static int -emit_data_processing (uint32_t *buf, enum aarch64_opcodes opcode, - struct aarch64_register rd, - struct aarch64_register rn, - struct aarch64_operand operand) -{ - uint32_t size = ENCODE (rd.is64, 1, 31); - /* The opcode is different for register and immediate source operands. */ - uint32_t operand_opcode; - - if (operand.type == OPERAND_IMMEDIATE) - { - /* xxx1 000x xxxx xxxx xxxx xxxx xxxx xxxx */ - operand_opcode = ENCODE (8, 4, 25); - - return aarch64_emit_insn (buf, opcode | operand_opcode | size - | ENCODE (operand.imm, 12, 10) - | ENCODE (rn.num, 5, 5) - | ENCODE (rd.num, 5, 0)); - } - else - { - /* xxx0 101x xxxx xxxx xxxx xxxx xxxx xxxx */ - operand_opcode = ENCODE (5, 4, 25); - - return emit_data_processing_reg (buf, opcode | operand_opcode, rd, - rn, operand.reg); - } -} - -/* Write an ADD instruction into *BUF. - - ADD rd, rn, #imm - ADD rd, rn, rm - - This function handles both an immediate and register add. - - RD is the destination register. - RN is the input register. - OPERAND is the source operand, either of type OPERAND_IMMEDIATE or - OPERAND_REGISTER. */ - -static int -emit_add (uint32_t *buf, struct aarch64_register rd, - struct aarch64_register rn, struct aarch64_operand operand) -{ - return emit_data_processing (buf, ADD, rd, rn, operand); -} - -/* Write a SUB instruction into *BUF. - - SUB rd, rn, #imm - SUB rd, rn, rm - - This function handles both an immediate and register sub. - - RD is the destination register. - RN is the input register. - IMM is the immediate to substract to RN. */ - -static int -emit_sub (uint32_t *buf, struct aarch64_register rd, - struct aarch64_register rn, struct aarch64_operand operand) -{ - return emit_data_processing (buf, SUB, rd, rn, operand); -} - -/* Write a MOV instruction into *BUF. - - MOV rd, #imm - MOV rd, rm - - This function handles both a wide immediate move and a register move, - with the condition that the source register is not xzr. xzr and the - stack pointer share the same encoding and this function only supports - the stack pointer. - - RD is the destination register. - OPERAND is the source operand, either of type OPERAND_IMMEDIATE or - OPERAND_REGISTER. */ - -static int -emit_mov (uint32_t *buf, struct aarch64_register rd, - struct aarch64_operand operand) -{ - if (operand.type == OPERAND_IMMEDIATE) - { - uint32_t size = ENCODE (rd.is64, 1, 31); - /* Do not shift the immediate. */ - uint32_t shift = ENCODE (0, 2, 21); - - return aarch64_emit_insn (buf, MOV | size | shift - | ENCODE (operand.imm, 16, 5) - | ENCODE (rd.num, 5, 0)); - } - else - return emit_add (buf, rd, operand.reg, immediate_operand (0)); -} - -/* Write a MOVK instruction into *BUF. - - MOVK rd, #imm, lsl #shift - - RD is the destination register. - IMM is the immediate. - SHIFT is the logical shift left to apply to IMM. */ - -static int -emit_movk (uint32_t *buf, struct aarch64_register rd, uint32_t imm, - unsigned shift) -{ - uint32_t size = ENCODE (rd.is64, 1, 31); - - return aarch64_emit_insn (buf, MOVK | size | ENCODE (shift, 2, 21) | - ENCODE (imm, 16, 5) | ENCODE (rd.num, 5, 0)); -} - -/* Write instructions into *BUF in order to move ADDR into a register. - ADDR can be a 64-bit value. - - This function will emit a series of MOV and MOVK instructions, such as: - - MOV xd, #(addr) - MOVK xd, #(addr >> 16), lsl #16 - MOVK xd, #(addr >> 32), lsl #32 - MOVK xd, #(addr >> 48), lsl #48 */ - -static int -emit_mov_addr (uint32_t *buf, struct aarch64_register rd, CORE_ADDR addr) -{ - uint32_t *p = buf; - - /* The MOV (wide immediate) instruction clears to top bits of the - register. */ - p += emit_mov (p, rd, immediate_operand (addr & 0xffff)); - - if ((addr >> 16) != 0) - p += emit_movk (p, rd, (addr >> 16) & 0xffff, 1); - else - return p - buf; - - if ((addr >> 32) != 0) - p += emit_movk (p, rd, (addr >> 32) & 0xffff, 2); - else - return p - buf; - - if ((addr >> 48) != 0) - p += emit_movk (p, rd, (addr >> 48) & 0xffff, 3); - - return p - buf; -} - -/* Write a SUBS instruction into *BUF. - - SUBS rd, rn, rm - - This instruction update the condition flags. - - RD is the destination register. - RN and RM are the source registers. */ - -static int -emit_subs (uint32_t *buf, struct aarch64_register rd, - struct aarch64_register rn, struct aarch64_operand operand) -{ - return emit_data_processing (buf, SUBS, rd, rn, operand); -} - -/* Write a CMP instruction into *BUF. - - CMP rn, rm - - This instruction is an alias of SUBS xzr, rn, rm. - - RN and RM are the registers to compare. */ - -static int -emit_cmp (uint32_t *buf, struct aarch64_register rn, - struct aarch64_operand operand) -{ - return emit_subs (buf, xzr, rn, operand); -} - -/* Write a AND instruction into *BUF. - - AND rd, rn, rm - - RD is the destination register. - RN and RM are the source registers. */ - -static int -emit_and (uint32_t *buf, struct aarch64_register rd, - struct aarch64_register rn, struct aarch64_register rm) -{ - return emit_data_processing_reg (buf, AND, rd, rn, rm); -} - -/* Write a ORR instruction into *BUF. - - ORR rd, rn, rm - - RD is the destination register. - RN and RM are the source registers. */ - -static int -emit_orr (uint32_t *buf, struct aarch64_register rd, - struct aarch64_register rn, struct aarch64_register rm) -{ - return emit_data_processing_reg (buf, ORR, rd, rn, rm); -} - -/* Write a ORN instruction into *BUF. - - ORN rd, rn, rm - - RD is the destination register. - RN and RM are the source registers. */ - -static int -emit_orn (uint32_t *buf, struct aarch64_register rd, - struct aarch64_register rn, struct aarch64_register rm) -{ - return emit_data_processing_reg (buf, ORN, rd, rn, rm); -} - -/* Write a EOR instruction into *BUF. - - EOR rd, rn, rm - - RD is the destination register. - RN and RM are the source registers. */ - -static int -emit_eor (uint32_t *buf, struct aarch64_register rd, - struct aarch64_register rn, struct aarch64_register rm) -{ - return emit_data_processing_reg (buf, EOR, rd, rn, rm); -} - -/* Write a MVN instruction into *BUF. - - MVN rd, rm - - This is an alias for ORN rd, xzr, rm. - - RD is the destination register. - RM is the source register. */ - -static int -emit_mvn (uint32_t *buf, struct aarch64_register rd, - struct aarch64_register rm) -{ - return emit_orn (buf, rd, xzr, rm); -} - -/* Write a LSLV instruction into *BUF. - - LSLV rd, rn, rm - - RD is the destination register. - RN and RM are the source registers. */ - -static int -emit_lslv (uint32_t *buf, struct aarch64_register rd, - struct aarch64_register rn, struct aarch64_register rm) -{ - return emit_data_processing_reg (buf, LSLV, rd, rn, rm); -} - -/* Write a LSRV instruction into *BUF. - - LSRV rd, rn, rm - - RD is the destination register. - RN and RM are the source registers. */ - -static int -emit_lsrv (uint32_t *buf, struct aarch64_register rd, - struct aarch64_register rn, struct aarch64_register rm) -{ - return emit_data_processing_reg (buf, LSRV, rd, rn, rm); -} - -/* Write a ASRV instruction into *BUF. - - ASRV rd, rn, rm - - RD is the destination register. - RN and RM are the source registers. */ - -static int -emit_asrv (uint32_t *buf, struct aarch64_register rd, - struct aarch64_register rn, struct aarch64_register rm) -{ - return emit_data_processing_reg (buf, ASRV, rd, rn, rm); -} - -/* Write a MUL instruction into *BUF. - - MUL rd, rn, rm - - RD is the destination register. - RN and RM are the source registers. */ - -static int -emit_mul (uint32_t *buf, struct aarch64_register rd, - struct aarch64_register rn, struct aarch64_register rm) -{ - return emit_data_processing_reg (buf, MUL, rd, rn, rm); -} - -/* Write a MRS instruction into *BUF. The register size is 64-bit. - - MRS xt, system_reg - - RT is the destination register. - SYSTEM_REG is special purpose register to read. */ - -static int -emit_mrs (uint32_t *buf, struct aarch64_register rt, - enum aarch64_system_control_registers system_reg) -{ - return aarch64_emit_insn (buf, MRS | ENCODE (system_reg, 15, 5) - | ENCODE (rt.num, 5, 0)); -} - -/* Write a MSR instruction into *BUF. The register size is 64-bit. - - MSR system_reg, xt - - SYSTEM_REG is special purpose register to write. - RT is the input register. */ - -static int -emit_msr (uint32_t *buf, enum aarch64_system_control_registers system_reg, - struct aarch64_register rt) -{ - return aarch64_emit_insn (buf, MSR | ENCODE (system_reg, 15, 5) - | ENCODE (rt.num, 5, 0)); -} - -/* Write a SEVL instruction into *BUF. - - This is a hint instruction telling the hardware to trigger an event. */ - -static int -emit_sevl (uint32_t *buf) -{ - return aarch64_emit_insn (buf, SEVL); -} - -/* Write a WFE instruction into *BUF. - - This is a hint instruction telling the hardware to wait for an event. */ - -static int -emit_wfe (uint32_t *buf) -{ - return aarch64_emit_insn (buf, WFE); -} - -/* Write a SBFM instruction into *BUF. - - SBFM rd, rn, #immr, #imms - - This instruction moves the bits from #immr to #imms into the - destination, sign extending the result. - - RD is the destination register. - RN is the source register. - IMMR is the bit number to start at (least significant bit). - IMMS is the bit number to stop at (most significant bit). */ - -static int -emit_sbfm (uint32_t *buf, struct aarch64_register rd, - struct aarch64_register rn, uint32_t immr, uint32_t imms) -{ - uint32_t size = ENCODE (rd.is64, 1, 31); - uint32_t n = ENCODE (rd.is64, 1, 22); - - return aarch64_emit_insn (buf, SBFM | size | n | ENCODE (immr, 6, 16) - | ENCODE (imms, 6, 10) | ENCODE (rn.num, 5, 5) - | ENCODE (rd.num, 5, 0)); -} - -/* Write a SBFX instruction into *BUF. - - SBFX rd, rn, #lsb, #width - - This instruction moves #width bits from #lsb into the destination, sign - extending the result. This is an alias for: - - SBFM rd, rn, #lsb, #(lsb + width - 1) - - RD is the destination register. - RN is the source register. - LSB is the bit number to start at (least significant bit). - WIDTH is the number of bits to move. */ - -static int -emit_sbfx (uint32_t *buf, struct aarch64_register rd, - struct aarch64_register rn, uint32_t lsb, uint32_t width) -{ - return emit_sbfm (buf, rd, rn, lsb, lsb + width - 1); -} - -/* Write a UBFM instruction into *BUF. - - UBFM rd, rn, #immr, #imms - - This instruction moves the bits from #immr to #imms into the - destination, extending the result with zeros. - - RD is the destination register. - RN is the source register. - IMMR is the bit number to start at (least significant bit). - IMMS is the bit number to stop at (most significant bit). */ - -static int -emit_ubfm (uint32_t *buf, struct aarch64_register rd, - struct aarch64_register rn, uint32_t immr, uint32_t imms) -{ - uint32_t size = ENCODE (rd.is64, 1, 31); - uint32_t n = ENCODE (rd.is64, 1, 22); - - return aarch64_emit_insn (buf, UBFM | size | n | ENCODE (immr, 6, 16) - | ENCODE (imms, 6, 10) | ENCODE (rn.num, 5, 5) - | ENCODE (rd.num, 5, 0)); -} - -/* Write a UBFX instruction into *BUF. - - UBFX rd, rn, #lsb, #width - - This instruction moves #width bits from #lsb into the destination, - extending the result with zeros. This is an alias for: - - UBFM rd, rn, #lsb, #(lsb + width - 1) - - RD is the destination register. - RN is the source register. - LSB is the bit number to start at (least significant bit). - WIDTH is the number of bits to move. */ - -static int -emit_ubfx (uint32_t *buf, struct aarch64_register rd, - struct aarch64_register rn, uint32_t lsb, uint32_t width) -{ - return emit_ubfm (buf, rd, rn, lsb, lsb + width - 1); -} - -/* Write a CSINC instruction into *BUF. - - CSINC rd, rn, rm, cond - - This instruction conditionally increments rn or rm and places the result - in rd. rn is chosen is the condition is true. - - RD is the destination register. - RN and RM are the source registers. - COND is the encoded condition. */ - -static int -emit_csinc (uint32_t *buf, struct aarch64_register rd, - struct aarch64_register rn, struct aarch64_register rm, - unsigned cond) -{ - uint32_t size = ENCODE (rd.is64, 1, 31); - - return aarch64_emit_insn (buf, CSINC | size | ENCODE (rm.num, 5, 16) - | ENCODE (cond, 4, 12) | ENCODE (rn.num, 5, 5) - | ENCODE (rd.num, 5, 0)); -} - -/* Write a CSET instruction into *BUF. - - CSET rd, cond - - This instruction conditionally write 1 or 0 in the destination register. - 1 is written if the condition is true. This is an alias for: - - CSINC rd, xzr, xzr, !cond - - Note that the condition needs to be inverted. - - RD is the destination register. - RN and RM are the source registers. - COND is the encoded condition. */ - -static int -emit_cset (uint32_t *buf, struct aarch64_register rd, unsigned cond) -{ - /* The least significant bit of the condition needs toggling in order to - invert it. */ - return emit_csinc (buf, rd, xzr, xzr, cond ^ 0x1); -} - -/* Write LEN instructions from BUF into the inferior memory at *TO. - - Note instructions are always little endian on AArch64, unlike data. */ - -static void -append_insns (CORE_ADDR *to, size_t len, const uint32_t *buf) -{ - size_t byte_len = len * sizeof (uint32_t); -#if (__BYTE_ORDER == __BIG_ENDIAN) - uint32_t *le_buf = (uint32_t *) xmalloc (byte_len); - size_t i; - - for (i = 0; i < len; i++) - le_buf[i] = htole32 (buf[i]); - - target_write_memory (*to, (const unsigned char *) le_buf, byte_len); - - xfree (le_buf); -#else - target_write_memory (*to, (const unsigned char *) buf, byte_len); -#endif - - *to += byte_len; -} - -/* Sub-class of struct aarch64_insn_data, store information of - instruction relocation for fast tracepoint. Visitor can - relocate an instruction from BASE.INSN_ADDR to NEW_ADDR and save - the relocated instructions in buffer pointed by INSN_PTR. */ - -struct aarch64_insn_relocation_data -{ - struct aarch64_insn_data base; - - /* The new address the instruction is relocated to. */ - CORE_ADDR new_addr; - /* Pointer to the buffer of relocated instruction(s). */ - uint32_t *insn_ptr; -}; - -/* Implementation of aarch64_insn_visitor method "b". */ - -static void -aarch64_ftrace_insn_reloc_b (const int is_bl, const int32_t offset, - struct aarch64_insn_data *data) -{ - struct aarch64_insn_relocation_data *insn_reloc - = (struct aarch64_insn_relocation_data *) data; - int64_t new_offset - = insn_reloc->base.insn_addr - insn_reloc->new_addr + offset; - - if (can_encode_int32 (new_offset, 28)) - insn_reloc->insn_ptr += emit_b (insn_reloc->insn_ptr, is_bl, new_offset); -} - -/* Implementation of aarch64_insn_visitor method "b_cond". */ - -static void -aarch64_ftrace_insn_reloc_b_cond (const unsigned cond, const int32_t offset, - struct aarch64_insn_data *data) -{ - struct aarch64_insn_relocation_data *insn_reloc - = (struct aarch64_insn_relocation_data *) data; - int64_t new_offset - = insn_reloc->base.insn_addr - insn_reloc->new_addr + offset; - - if (can_encode_int32 (new_offset, 21)) - { - insn_reloc->insn_ptr += emit_bcond (insn_reloc->insn_ptr, cond, - new_offset); - } - else if (can_encode_int32 (new_offset, 28)) - { - /* The offset is out of range for a conditional branch - instruction but not for a unconditional branch. We can use - the following instructions instead: - - B.COND TAKEN ; If cond is true, then jump to TAKEN. - B NOT_TAKEN ; Else jump over TAKEN and continue. - TAKEN: - B #(offset - 8) - NOT_TAKEN: - - */ - - insn_reloc->insn_ptr += emit_bcond (insn_reloc->insn_ptr, cond, 8); - insn_reloc->insn_ptr += emit_b (insn_reloc->insn_ptr, 0, 8); - insn_reloc->insn_ptr += emit_b (insn_reloc->insn_ptr, 0, new_offset - 8); - } -} - -/* Implementation of aarch64_insn_visitor method "cb". */ - -static void -aarch64_ftrace_insn_reloc_cb (const int32_t offset, const int is_cbnz, - const unsigned rn, int is64, - struct aarch64_insn_data *data) -{ - struct aarch64_insn_relocation_data *insn_reloc - = (struct aarch64_insn_relocation_data *) data; - int64_t new_offset - = insn_reloc->base.insn_addr - insn_reloc->new_addr + offset; - - if (can_encode_int32 (new_offset, 21)) - { - insn_reloc->insn_ptr += emit_cb (insn_reloc->insn_ptr, is_cbnz, - aarch64_register (rn, is64), new_offset); - } - else if (can_encode_int32 (new_offset, 28)) - { - /* The offset is out of range for a compare and branch - instruction but not for a unconditional branch. We can use - the following instructions instead: - - CBZ xn, TAKEN ; xn == 0, then jump to TAKEN. - B NOT_TAKEN ; Else jump over TAKEN and continue. - TAKEN: - B #(offset - 8) - NOT_TAKEN: - - */ - insn_reloc->insn_ptr += emit_cb (insn_reloc->insn_ptr, is_cbnz, - aarch64_register (rn, is64), 8); - insn_reloc->insn_ptr += emit_b (insn_reloc->insn_ptr, 0, 8); - insn_reloc->insn_ptr += emit_b (insn_reloc->insn_ptr, 0, new_offset - 8); - } -} - -/* Implementation of aarch64_insn_visitor method "tb". */ - -static void -aarch64_ftrace_insn_reloc_tb (const int32_t offset, int is_tbnz, - const unsigned rt, unsigned bit, - struct aarch64_insn_data *data) -{ - struct aarch64_insn_relocation_data *insn_reloc - = (struct aarch64_insn_relocation_data *) data; - int64_t new_offset - = insn_reloc->base.insn_addr - insn_reloc->new_addr + offset; - - if (can_encode_int32 (new_offset, 16)) - { - insn_reloc->insn_ptr += emit_tb (insn_reloc->insn_ptr, is_tbnz, bit, - aarch64_register (rt, 1), new_offset); - } - else if (can_encode_int32 (new_offset, 28)) - { - /* The offset is out of range for a test bit and branch - instruction but not for a unconditional branch. We can use - the following instructions instead: - - TBZ xn, #bit, TAKEN ; xn[bit] == 0, then jump to TAKEN. - B NOT_TAKEN ; Else jump over TAKEN and continue. - TAKEN: - B #(offset - 8) - NOT_TAKEN: - - */ - insn_reloc->insn_ptr += emit_tb (insn_reloc->insn_ptr, is_tbnz, bit, - aarch64_register (rt, 1), 8); - insn_reloc->insn_ptr += emit_b (insn_reloc->insn_ptr, 0, 8); - insn_reloc->insn_ptr += emit_b (insn_reloc->insn_ptr, 0, - new_offset - 8); - } -} - -/* Implementation of aarch64_insn_visitor method "adr". */ - -static void -aarch64_ftrace_insn_reloc_adr (const int32_t offset, const unsigned rd, - const int is_adrp, - struct aarch64_insn_data *data) -{ - struct aarch64_insn_relocation_data *insn_reloc - = (struct aarch64_insn_relocation_data *) data; - /* We know exactly the address the ADR{P,} instruction will compute. - We can just write it to the destination register. */ - CORE_ADDR address = data->insn_addr + offset; - - if (is_adrp) - { - /* Clear the lower 12 bits of the offset to get the 4K page. */ - insn_reloc->insn_ptr += emit_mov_addr (insn_reloc->insn_ptr, - aarch64_register (rd, 1), - address & ~0xfff); - } - else - insn_reloc->insn_ptr += emit_mov_addr (insn_reloc->insn_ptr, - aarch64_register (rd, 1), address); -} - -/* Implementation of aarch64_insn_visitor method "ldr_literal". */ - -static void -aarch64_ftrace_insn_reloc_ldr_literal (const int32_t offset, const int is_sw, - const unsigned rt, const int is64, - struct aarch64_insn_data *data) -{ - struct aarch64_insn_relocation_data *insn_reloc - = (struct aarch64_insn_relocation_data *) data; - CORE_ADDR address = data->insn_addr + offset; - - insn_reloc->insn_ptr += emit_mov_addr (insn_reloc->insn_ptr, - aarch64_register (rt, 1), address); - - /* We know exactly what address to load from, and what register we - can use: - - MOV xd, #(oldloc + offset) - MOVK xd, #((oldloc + offset) >> 16), lsl #16 - ... - - LDR xd, [xd] ; or LDRSW xd, [xd] - - */ - - if (is_sw) - insn_reloc->insn_ptr += emit_ldrsw (insn_reloc->insn_ptr, - aarch64_register (rt, 1), - aarch64_register (rt, 1), - offset_memory_operand (0)); - else - insn_reloc->insn_ptr += emit_ldr (insn_reloc->insn_ptr, - aarch64_register (rt, is64), - aarch64_register (rt, 1), - offset_memory_operand (0)); -} - -/* Implementation of aarch64_insn_visitor method "others". */ - -static void -aarch64_ftrace_insn_reloc_others (const uint32_t insn, - struct aarch64_insn_data *data) -{ - struct aarch64_insn_relocation_data *insn_reloc - = (struct aarch64_insn_relocation_data *) data; - - /* The instruction is not PC relative. Just re-emit it at the new - location. */ - insn_reloc->insn_ptr += aarch64_emit_insn (insn_reloc->insn_ptr, insn); -} - -static const struct aarch64_insn_visitor visitor = -{ - aarch64_ftrace_insn_reloc_b, - aarch64_ftrace_insn_reloc_b_cond, - aarch64_ftrace_insn_reloc_cb, - aarch64_ftrace_insn_reloc_tb, - aarch64_ftrace_insn_reloc_adr, - aarch64_ftrace_insn_reloc_ldr_literal, - aarch64_ftrace_insn_reloc_others, -}; - -/* Implementation of linux_target_ops method - "install_fast_tracepoint_jump_pad". */ - -static int -aarch64_install_fast_tracepoint_jump_pad (CORE_ADDR tpoint, - CORE_ADDR tpaddr, - CORE_ADDR collector, - CORE_ADDR lockaddr, - ULONGEST orig_size, - CORE_ADDR *jump_entry, - CORE_ADDR *trampoline, - ULONGEST *trampoline_size, - unsigned char *jjump_pad_insn, - ULONGEST *jjump_pad_insn_size, - CORE_ADDR *adjusted_insn_addr, - CORE_ADDR *adjusted_insn_addr_end, - char *err) -{ - uint32_t buf[256]; - uint32_t *p = buf; - int64_t offset; - int i; - uint32_t insn; - CORE_ADDR buildaddr = *jump_entry; - struct aarch64_insn_relocation_data insn_data; - - /* We need to save the current state on the stack both to restore it - later and to collect register values when the tracepoint is hit. - - The saved registers are pushed in a layout that needs to be in sync - with aarch64_ft_collect_regmap (see linux-aarch64-ipa.c). Later on - the supply_fast_tracepoint_registers function will fill in the - register cache from a pointer to saved registers on the stack we build - here. - - For simplicity, we set the size of each cell on the stack to 16 bytes. - This way one cell can hold any register type, from system registers - to the 128 bit SIMD&FP registers. Furthermore, the stack pointer - has to be 16 bytes aligned anyway. - - Note that the CPSR register does not exist on AArch64. Instead we - can access system bits describing the process state with the - MRS/MSR instructions, namely the condition flags. We save them as - if they are part of a CPSR register because that's how GDB - interprets these system bits. At the moment, only the condition - flags are saved in CPSR (NZCV). - - Stack layout, each cell is 16 bytes (descending): - - High *-------- SIMD&FP registers from 31 down to 0. --------* - | q31 | - . . - . . 32 cells - . . - | q0 | - *---- General purpose registers from 30 down to 0. ----* - | x30 | - . . - . . 31 cells - . . - | x0 | - *------------- Special purpose registers. -------------* - | SP | - | PC | - | CPSR (NZCV) | 5 cells - | FPSR | - | FPCR | <- SP + 16 - *------------- collecting_t object --------------------* - | TPIDR_EL0 | struct tracepoint * | - Low *------------------------------------------------------* - - After this stack is set up, we issue a call to the collector, passing - it the saved registers at (SP + 16). */ - - /* Push SIMD&FP registers on the stack: - - SUB sp, sp, #(32 * 16) - - STP q30, q31, [sp, #(30 * 16)] - ... - STP q0, q1, [sp] - - */ - p += emit_sub (p, sp, sp, immediate_operand (32 * 16)); - for (i = 30; i >= 0; i -= 2) - p += emit_stp_q_offset (p, i, i + 1, sp, i * 16); - - /* Push general purpose registers on the stack. Note that we do not need - to push x31 as it represents the xzr register and not the stack - pointer in a STR instruction. - - SUB sp, sp, #(31 * 16) - - STR x30, [sp, #(30 * 16)] - ... - STR x0, [sp] - - */ - p += emit_sub (p, sp, sp, immediate_operand (31 * 16)); - for (i = 30; i >= 0; i -= 1) - p += emit_str (p, aarch64_register (i, 1), sp, - offset_memory_operand (i * 16)); - - /* Make space for 5 more cells. - - SUB sp, sp, #(5 * 16) - - */ - p += emit_sub (p, sp, sp, immediate_operand (5 * 16)); - - - /* Save SP: - - ADD x4, sp, #((32 + 31 + 5) * 16) - STR x4, [sp, #(4 * 16)] - - */ - p += emit_add (p, x4, sp, immediate_operand ((32 + 31 + 5) * 16)); - p += emit_str (p, x4, sp, offset_memory_operand (4 * 16)); - - /* Save PC (tracepoint address): - - MOV x3, #(tpaddr) - ... - - STR x3, [sp, #(3 * 16)] - - */ - - p += emit_mov_addr (p, x3, tpaddr); - p += emit_str (p, x3, sp, offset_memory_operand (3 * 16)); - - /* Save CPSR (NZCV), FPSR and FPCR: - - MRS x2, nzcv - MRS x1, fpsr - MRS x0, fpcr - - STR x2, [sp, #(2 * 16)] - STR x1, [sp, #(1 * 16)] - STR x0, [sp, #(0 * 16)] - - */ - p += emit_mrs (p, x2, NZCV); - p += emit_mrs (p, x1, FPSR); - p += emit_mrs (p, x0, FPCR); - p += emit_str (p, x2, sp, offset_memory_operand (2 * 16)); - p += emit_str (p, x1, sp, offset_memory_operand (1 * 16)); - p += emit_str (p, x0, sp, offset_memory_operand (0 * 16)); - - /* Push the collecting_t object. It consist of the address of the - tracepoint and an ID for the current thread. We get the latter by - reading the tpidr_el0 system register. It corresponds to the - NT_ARM_TLS register accessible with ptrace. - - MOV x0, #(tpoint) - ... - - MRS x1, tpidr_el0 - - STP x0, x1, [sp, #-16]! - - */ - - p += emit_mov_addr (p, x0, tpoint); - p += emit_mrs (p, x1, TPIDR_EL0); - p += emit_stp (p, x0, x1, sp, preindex_memory_operand (-16)); - - /* Spin-lock: - - The shared memory for the lock is at lockaddr. It will hold zero - if no-one is holding the lock, otherwise it contains the address of - the collecting_t object on the stack of the thread which acquired it. - - At this stage, the stack pointer points to this thread's collecting_t - object. - - We use the following registers: - - x0: Address of the lock. - - x1: Pointer to collecting_t object. - - x2: Scratch register. - - MOV x0, #(lockaddr) - ... - MOV x1, sp - - ; Trigger an event local to this core. So the following WFE - ; instruction is ignored. - SEVL - again: - ; Wait for an event. The event is triggered by either the SEVL - ; or STLR instructions (store release). - WFE - - ; Atomically read at lockaddr. This marks the memory location as - ; exclusive. This instruction also has memory constraints which - ; make sure all previous data reads and writes are done before - ; executing it. - LDAXR x2, [x0] - - ; Try again if another thread holds the lock. - CBNZ x2, again - - ; We can lock it! Write the address of the collecting_t object. - ; This instruction will fail if the memory location is not marked - ; as exclusive anymore. If it succeeds, it will remove the - ; exclusive mark on the memory location. This way, if another - ; thread executes this instruction before us, we will fail and try - ; all over again. - STXR w2, x1, [x0] - CBNZ w2, again - - */ - - p += emit_mov_addr (p, x0, lockaddr); - p += emit_mov (p, x1, register_operand (sp)); - - p += emit_sevl (p); - p += emit_wfe (p); - p += emit_ldaxr (p, x2, x0); - p += emit_cb (p, 1, w2, -2 * 4); - p += emit_stxr (p, w2, x1, x0); - p += emit_cb (p, 1, x2, -4 * 4); - - /* Call collector (struct tracepoint *, unsigned char *): - - MOV x0, #(tpoint) - ... - - ; Saved registers start after the collecting_t object. - ADD x1, sp, #16 - - ; We use an intra-procedure-call scratch register. - MOV ip0, #(collector) - ... - - ; And call back to C! - BLR ip0 - - */ - - p += emit_mov_addr (p, x0, tpoint); - p += emit_add (p, x1, sp, immediate_operand (16)); - - p += emit_mov_addr (p, ip0, collector); - p += emit_blr (p, ip0); - - /* Release the lock. - - MOV x0, #(lockaddr) - ... - - ; This instruction is a normal store with memory ordering - ; constraints. Thanks to this we do not have to put a data - ; barrier instruction to make sure all data read and writes are done - ; before this instruction is executed. Furthermore, this instruction - ; will trigger an event, letting other threads know they can grab - ; the lock. - STLR xzr, [x0] - - */ - p += emit_mov_addr (p, x0, lockaddr); - p += emit_stlr (p, xzr, x0); - - /* Free collecting_t object: - - ADD sp, sp, #16 - - */ - p += emit_add (p, sp, sp, immediate_operand (16)); - - /* Restore CPSR (NZCV), FPSR and FPCR. And free all special purpose - registers from the stack. - - LDR x2, [sp, #(2 * 16)] - LDR x1, [sp, #(1 * 16)] - LDR x0, [sp, #(0 * 16)] - - MSR NZCV, x2 - MSR FPSR, x1 - MSR FPCR, x0 - - ADD sp, sp #(5 * 16) - - */ - p += emit_ldr (p, x2, sp, offset_memory_operand (2 * 16)); - p += emit_ldr (p, x1, sp, offset_memory_operand (1 * 16)); - p += emit_ldr (p, x0, sp, offset_memory_operand (0 * 16)); - p += emit_msr (p, NZCV, x2); - p += emit_msr (p, FPSR, x1); - p += emit_msr (p, FPCR, x0); - - p += emit_add (p, sp, sp, immediate_operand (5 * 16)); - - /* Pop general purpose registers: - - LDR x0, [sp] - ... - LDR x30, [sp, #(30 * 16)] - - ADD sp, sp, #(31 * 16) - - */ - for (i = 0; i <= 30; i += 1) - p += emit_ldr (p, aarch64_register (i, 1), sp, - offset_memory_operand (i * 16)); - p += emit_add (p, sp, sp, immediate_operand (31 * 16)); - - /* Pop SIMD&FP registers: - - LDP q0, q1, [sp] - ... - LDP q30, q31, [sp, #(30 * 16)] - - ADD sp, sp, #(32 * 16) - - */ - for (i = 0; i <= 30; i += 2) - p += emit_ldp_q_offset (p, i, i + 1, sp, i * 16); - p += emit_add (p, sp, sp, immediate_operand (32 * 16)); - - /* Write the code into the inferior memory. */ - append_insns (&buildaddr, p - buf, buf); - - /* Now emit the relocated instruction. */ - *adjusted_insn_addr = buildaddr; - target_read_uint32 (tpaddr, &insn); - - insn_data.base.insn_addr = tpaddr; - insn_data.new_addr = buildaddr; - insn_data.insn_ptr = buf; - - aarch64_relocate_instruction (insn, &visitor, - (struct aarch64_insn_data *) &insn_data); - - /* We may not have been able to relocate the instruction. */ - if (insn_data.insn_ptr == buf) - { - sprintf (err, - "E.Could not relocate instruction from %s to %s.", - core_addr_to_string_nz (tpaddr), - core_addr_to_string_nz (buildaddr)); - return 1; - } - else - append_insns (&buildaddr, insn_data.insn_ptr - buf, buf); - *adjusted_insn_addr_end = buildaddr; - - /* Go back to the start of the buffer. */ - p = buf; - - /* Emit a branch back from the jump pad. */ - offset = (tpaddr + orig_size - buildaddr); - if (!can_encode_int32 (offset, 28)) - { - sprintf (err, - "E.Jump back from jump pad too far from tracepoint " - "(offset 0x%" PRIx64 " cannot be encoded in 28 bits).", - offset); - return 1; - } - - p += emit_b (p, 0, offset); - append_insns (&buildaddr, p - buf, buf); - - /* Give the caller a branch instruction into the jump pad. */ - offset = (*jump_entry - tpaddr); - if (!can_encode_int32 (offset, 28)) - { - sprintf (err, - "E.Jump pad too far from tracepoint " - "(offset 0x%" PRIx64 " cannot be encoded in 28 bits).", - offset); - return 1; - } - - emit_b ((uint32_t *) jjump_pad_insn, 0, offset); - *jjump_pad_insn_size = 4; - - /* Return the end address of our pad. */ - *jump_entry = buildaddr; - - return 0; -} - -/* Helper function writing LEN instructions from START into - current_insn_ptr. */ - -static void -emit_ops_insns (const uint32_t *start, int len) -{ - CORE_ADDR buildaddr = current_insn_ptr; - - if (debug_threads) - debug_printf ("Adding %d instrucions at %s\n", - len, paddress (buildaddr)); - - append_insns (&buildaddr, len, start); - current_insn_ptr = buildaddr; -} - -/* Pop a register from the stack. */ - -static int -emit_pop (uint32_t *buf, struct aarch64_register rt) -{ - return emit_ldr (buf, rt, sp, postindex_memory_operand (1 * 16)); -} - -/* Push a register on the stack. */ - -static int -emit_push (uint32_t *buf, struct aarch64_register rt) -{ - return emit_str (buf, rt, sp, preindex_memory_operand (-1 * 16)); -} - -/* Implementation of emit_ops method "emit_prologue". */ - -static void -aarch64_emit_prologue (void) -{ - uint32_t buf[16]; - uint32_t *p = buf; - - /* This function emit a prologue for the following function prototype: - - enum eval_result_type f (unsigned char *regs, - ULONGEST *value); - - The first argument is a buffer of raw registers. The second - argument is the result of - evaluating the expression, which will be set to whatever is on top of - the stack at the end. - - The stack set up by the prologue is as such: - - High *------------------------------------------------------* - | LR | - | FP | <- FP - | x1 (ULONGEST *value) | - | x0 (unsigned char *regs) | - Low *------------------------------------------------------* - - As we are implementing a stack machine, each opcode can expand the - stack so we never know how far we are from the data saved by this - prologue. In order to be able refer to value and regs later, we save - the current stack pointer in the frame pointer. This way, it is not - clobbered when calling C functions. - - Finally, throughout every operation, we are using register x0 as the - top of the stack, and x1 as a scratch register. */ - - p += emit_stp (p, x0, x1, sp, preindex_memory_operand (-2 * 16)); - p += emit_str (p, lr, sp, offset_memory_operand (3 * 8)); - p += emit_str (p, fp, sp, offset_memory_operand (2 * 8)); - - p += emit_add (p, fp, sp, immediate_operand (2 * 8)); - - - emit_ops_insns (buf, p - buf); -} - -/* Implementation of emit_ops method "emit_epilogue". */ - -static void -aarch64_emit_epilogue (void) -{ - uint32_t buf[16]; - uint32_t *p = buf; - - /* Store the result of the expression (x0) in *value. */ - p += emit_sub (p, x1, fp, immediate_operand (1 * 8)); - p += emit_ldr (p, x1, x1, offset_memory_operand (0)); - p += emit_str (p, x0, x1, offset_memory_operand (0)); - - /* Restore the previous state. */ - p += emit_add (p, sp, fp, immediate_operand (2 * 8)); - p += emit_ldp (p, fp, lr, fp, offset_memory_operand (0)); - - /* Return expr_eval_no_error. */ - p += emit_mov (p, x0, immediate_operand (expr_eval_no_error)); - p += emit_ret (p, lr); - - emit_ops_insns (buf, p - buf); -} - -/* Implementation of emit_ops method "emit_add". */ - -static void -aarch64_emit_add (void) -{ - uint32_t buf[16]; - uint32_t *p = buf; - - p += emit_pop (p, x1); - p += emit_add (p, x0, x1, register_operand (x0)); - - emit_ops_insns (buf, p - buf); -} - -/* Implementation of emit_ops method "emit_sub". */ - -static void -aarch64_emit_sub (void) -{ - uint32_t buf[16]; - uint32_t *p = buf; - - p += emit_pop (p, x1); - p += emit_sub (p, x0, x1, register_operand (x0)); - - emit_ops_insns (buf, p - buf); -} - -/* Implementation of emit_ops method "emit_mul". */ - -static void -aarch64_emit_mul (void) -{ - uint32_t buf[16]; - uint32_t *p = buf; - - p += emit_pop (p, x1); - p += emit_mul (p, x0, x1, x0); - - emit_ops_insns (buf, p - buf); -} - -/* Implementation of emit_ops method "emit_lsh". */ - -static void -aarch64_emit_lsh (void) -{ - uint32_t buf[16]; - uint32_t *p = buf; - - p += emit_pop (p, x1); - p += emit_lslv (p, x0, x1, x0); - - emit_ops_insns (buf, p - buf); -} - -/* Implementation of emit_ops method "emit_rsh_signed". */ - -static void -aarch64_emit_rsh_signed (void) -{ - uint32_t buf[16]; - uint32_t *p = buf; - - p += emit_pop (p, x1); - p += emit_asrv (p, x0, x1, x0); - - emit_ops_insns (buf, p - buf); -} - -/* Implementation of emit_ops method "emit_rsh_unsigned". */ - -static void -aarch64_emit_rsh_unsigned (void) -{ - uint32_t buf[16]; - uint32_t *p = buf; - - p += emit_pop (p, x1); - p += emit_lsrv (p, x0, x1, x0); - - emit_ops_insns (buf, p - buf); -} - -/* Implementation of emit_ops method "emit_ext". */ - -static void -aarch64_emit_ext (int arg) -{ - uint32_t buf[16]; - uint32_t *p = buf; - - p += emit_sbfx (p, x0, x0, 0, arg); - - emit_ops_insns (buf, p - buf); -} - -/* Implementation of emit_ops method "emit_log_not". */ - -static void -aarch64_emit_log_not (void) -{ - uint32_t buf[16]; - uint32_t *p = buf; - - /* If the top of the stack is 0, replace it with 1. Else replace it with - 0. */ - - p += emit_cmp (p, x0, immediate_operand (0)); - p += emit_cset (p, x0, EQ); - - emit_ops_insns (buf, p - buf); -} - -/* Implementation of emit_ops method "emit_bit_and". */ - -static void -aarch64_emit_bit_and (void) -{ - uint32_t buf[16]; - uint32_t *p = buf; - - p += emit_pop (p, x1); - p += emit_and (p, x0, x0, x1); - - emit_ops_insns (buf, p - buf); -} - -/* Implementation of emit_ops method "emit_bit_or". */ - -static void -aarch64_emit_bit_or (void) -{ - uint32_t buf[16]; - uint32_t *p = buf; - - p += emit_pop (p, x1); - p += emit_orr (p, x0, x0, x1); - - emit_ops_insns (buf, p - buf); -} - -/* Implementation of emit_ops method "emit_bit_xor". */ - -static void -aarch64_emit_bit_xor (void) -{ - uint32_t buf[16]; - uint32_t *p = buf; - - p += emit_pop (p, x1); - p += emit_eor (p, x0, x0, x1); - - emit_ops_insns (buf, p - buf); -} - -/* Implementation of emit_ops method "emit_bit_not". */ - -static void -aarch64_emit_bit_not (void) -{ - uint32_t buf[16]; - uint32_t *p = buf; - - p += emit_mvn (p, x0, x0); - - emit_ops_insns (buf, p - buf); -} - -/* Implementation of emit_ops method "emit_equal". */ - -static void -aarch64_emit_equal (void) -{ - uint32_t buf[16]; - uint32_t *p = buf; - - p += emit_pop (p, x1); - p += emit_cmp (p, x0, register_operand (x1)); - p += emit_cset (p, x0, EQ); - - emit_ops_insns (buf, p - buf); -} - -/* Implementation of emit_ops method "emit_less_signed". */ - -static void -aarch64_emit_less_signed (void) -{ - uint32_t buf[16]; - uint32_t *p = buf; - - p += emit_pop (p, x1); - p += emit_cmp (p, x1, register_operand (x0)); - p += emit_cset (p, x0, LT); - - emit_ops_insns (buf, p - buf); -} - -/* Implementation of emit_ops method "emit_less_unsigned". */ - -static void -aarch64_emit_less_unsigned (void) -{ - uint32_t buf[16]; - uint32_t *p = buf; - - p += emit_pop (p, x1); - p += emit_cmp (p, x1, register_operand (x0)); - p += emit_cset (p, x0, LO); - - emit_ops_insns (buf, p - buf); -} - -/* Implementation of emit_ops method "emit_ref". */ - -static void -aarch64_emit_ref (int size) -{ - uint32_t buf[16]; - uint32_t *p = buf; - - switch (size) - { - case 1: - p += emit_ldrb (p, w0, x0, offset_memory_operand (0)); - break; - case 2: - p += emit_ldrh (p, w0, x0, offset_memory_operand (0)); - break; - case 4: - p += emit_ldr (p, w0, x0, offset_memory_operand (0)); - break; - case 8: - p += emit_ldr (p, x0, x0, offset_memory_operand (0)); - break; - default: - /* Unknown size, bail on compilation. */ - emit_error = 1; - break; - } - - emit_ops_insns (buf, p - buf); -} - -/* Implementation of emit_ops method "emit_if_goto". */ - -static void -aarch64_emit_if_goto (int *offset_p, int *size_p) -{ - uint32_t buf[16]; - uint32_t *p = buf; - - /* The Z flag is set or cleared here. */ - p += emit_cmp (p, x0, immediate_operand (0)); - /* This instruction must not change the Z flag. */ - p += emit_pop (p, x0); - /* Branch over the next instruction if x0 == 0. */ - p += emit_bcond (p, EQ, 8); - - /* The NOP instruction will be patched with an unconditional branch. */ - if (offset_p) - *offset_p = (p - buf) * 4; - if (size_p) - *size_p = 4; - p += emit_nop (p); - - emit_ops_insns (buf, p - buf); -} - -/* Implementation of emit_ops method "emit_goto". */ - -static void -aarch64_emit_goto (int *offset_p, int *size_p) -{ - uint32_t buf[16]; - uint32_t *p = buf; - - /* The NOP instruction will be patched with an unconditional branch. */ - if (offset_p) - *offset_p = 0; - if (size_p) - *size_p = 4; - p += emit_nop (p); - - emit_ops_insns (buf, p - buf); -} - -/* Implementation of emit_ops method "write_goto_address". */ - -void -aarch64_write_goto_address (CORE_ADDR from, CORE_ADDR to, int size) -{ - uint32_t insn; - - emit_b (&insn, 0, to - from); - append_insns (&from, 1, &insn); -} - -/* Implementation of emit_ops method "emit_const". */ - -static void -aarch64_emit_const (LONGEST num) -{ - uint32_t buf[16]; - uint32_t *p = buf; - - p += emit_mov_addr (p, x0, num); - - emit_ops_insns (buf, p - buf); -} - -/* Implementation of emit_ops method "emit_call". */ - -static void -aarch64_emit_call (CORE_ADDR fn) -{ - uint32_t buf[16]; - uint32_t *p = buf; - - p += emit_mov_addr (p, ip0, fn); - p += emit_blr (p, ip0); - - emit_ops_insns (buf, p - buf); -} - -/* Implementation of emit_ops method "emit_reg". */ - -static void -aarch64_emit_reg (int reg) -{ - uint32_t buf[16]; - uint32_t *p = buf; - - /* Set x0 to unsigned char *regs. */ - p += emit_sub (p, x0, fp, immediate_operand (2 * 8)); - p += emit_ldr (p, x0, x0, offset_memory_operand (0)); - p += emit_mov (p, x1, immediate_operand (reg)); - - emit_ops_insns (buf, p - buf); - - aarch64_emit_call (get_raw_reg_func_addr ()); -} - -/* Implementation of emit_ops method "emit_pop". */ - -static void -aarch64_emit_pop (void) -{ - uint32_t buf[16]; - uint32_t *p = buf; - - p += emit_pop (p, x0); - - emit_ops_insns (buf, p - buf); -} - -/* Implementation of emit_ops method "emit_stack_flush". */ - -static void -aarch64_emit_stack_flush (void) -{ - uint32_t buf[16]; - uint32_t *p = buf; - - p += emit_push (p, x0); - - emit_ops_insns (buf, p - buf); -} - -/* Implementation of emit_ops method "emit_zero_ext". */ - -static void -aarch64_emit_zero_ext (int arg) -{ - uint32_t buf[16]; - uint32_t *p = buf; - - p += emit_ubfx (p, x0, x0, 0, arg); - - emit_ops_insns (buf, p - buf); -} - -/* Implementation of emit_ops method "emit_swap". */ - -static void -aarch64_emit_swap (void) -{ - uint32_t buf[16]; - uint32_t *p = buf; - - p += emit_ldr (p, x1, sp, offset_memory_operand (0 * 16)); - p += emit_str (p, x0, sp, offset_memory_operand (0 * 16)); - p += emit_mov (p, x0, register_operand (x1)); - - emit_ops_insns (buf, p - buf); -} - -/* Implementation of emit_ops method "emit_stack_adjust". */ - -static void -aarch64_emit_stack_adjust (int n) -{ - /* This is not needed with our design. */ - uint32_t buf[16]; - uint32_t *p = buf; - - p += emit_add (p, sp, sp, immediate_operand (n * 16)); - - emit_ops_insns (buf, p - buf); -} - -/* Implementation of emit_ops method "emit_int_call_1". */ - -static void -aarch64_emit_int_call_1 (CORE_ADDR fn, int arg1) -{ - uint32_t buf[16]; - uint32_t *p = buf; - - p += emit_mov (p, x0, immediate_operand (arg1)); - - emit_ops_insns (buf, p - buf); - - aarch64_emit_call (fn); -} - -/* Implementation of emit_ops method "emit_void_call_2". */ - -static void -aarch64_emit_void_call_2 (CORE_ADDR fn, int arg1) -{ - uint32_t buf[16]; - uint32_t *p = buf; - - /* Push x0 on the stack. */ - aarch64_emit_stack_flush (); - - /* Setup arguments for the function call: - - x0: arg1 - x1: top of the stack - - MOV x1, x0 - MOV x0, #arg1 */ - - p += emit_mov (p, x1, register_operand (x0)); - p += emit_mov (p, x0, immediate_operand (arg1)); - - emit_ops_insns (buf, p - buf); - - aarch64_emit_call (fn); - - /* Restore x0. */ - aarch64_emit_pop (); -} - -/* Implementation of emit_ops method "emit_eq_goto". */ - -static void -aarch64_emit_eq_goto (int *offset_p, int *size_p) -{ - uint32_t buf[16]; - uint32_t *p = buf; - - p += emit_pop (p, x1); - p += emit_cmp (p, x1, register_operand (x0)); - /* Branch over the next instruction if x0 != x1. */ - p += emit_bcond (p, NE, 8); - /* The NOP instruction will be patched with an unconditional branch. */ - if (offset_p) - *offset_p = (p - buf) * 4; - if (size_p) - *size_p = 4; - p += emit_nop (p); - - emit_ops_insns (buf, p - buf); -} - -/* Implementation of emit_ops method "emit_ne_goto". */ - -static void -aarch64_emit_ne_goto (int *offset_p, int *size_p) -{ - uint32_t buf[16]; - uint32_t *p = buf; - - p += emit_pop (p, x1); - p += emit_cmp (p, x1, register_operand (x0)); - /* Branch over the next instruction if x0 == x1. */ - p += emit_bcond (p, EQ, 8); - /* The NOP instruction will be patched with an unconditional branch. */ - if (offset_p) - *offset_p = (p - buf) * 4; - if (size_p) - *size_p = 4; - p += emit_nop (p); - - emit_ops_insns (buf, p - buf); -} - -/* Implementation of emit_ops method "emit_lt_goto". */ - -static void -aarch64_emit_lt_goto (int *offset_p, int *size_p) -{ - uint32_t buf[16]; - uint32_t *p = buf; - - p += emit_pop (p, x1); - p += emit_cmp (p, x1, register_operand (x0)); - /* Branch over the next instruction if x0 >= x1. */ - p += emit_bcond (p, GE, 8); - /* The NOP instruction will be patched with an unconditional branch. */ - if (offset_p) - *offset_p = (p - buf) * 4; - if (size_p) - *size_p = 4; - p += emit_nop (p); - - emit_ops_insns (buf, p - buf); -} - -/* Implementation of emit_ops method "emit_le_goto". */ - -static void -aarch64_emit_le_goto (int *offset_p, int *size_p) -{ - uint32_t buf[16]; - uint32_t *p = buf; - - p += emit_pop (p, x1); - p += emit_cmp (p, x1, register_operand (x0)); - /* Branch over the next instruction if x0 > x1. */ - p += emit_bcond (p, GT, 8); - /* The NOP instruction will be patched with an unconditional branch. */ - if (offset_p) - *offset_p = (p - buf) * 4; - if (size_p) - *size_p = 4; - p += emit_nop (p); - - emit_ops_insns (buf, p - buf); -} - -/* Implementation of emit_ops method "emit_gt_goto". */ - -static void -aarch64_emit_gt_goto (int *offset_p, int *size_p) -{ - uint32_t buf[16]; - uint32_t *p = buf; - - p += emit_pop (p, x1); - p += emit_cmp (p, x1, register_operand (x0)); - /* Branch over the next instruction if x0 <= x1. */ - p += emit_bcond (p, LE, 8); - /* The NOP instruction will be patched with an unconditional branch. */ - if (offset_p) - *offset_p = (p - buf) * 4; - if (size_p) - *size_p = 4; - p += emit_nop (p); - - emit_ops_insns (buf, p - buf); -} - -/* Implementation of emit_ops method "emit_ge_got". */ - -static void -aarch64_emit_ge_got (int *offset_p, int *size_p) -{ - uint32_t buf[16]; - uint32_t *p = buf; - - p += emit_pop (p, x1); - p += emit_cmp (p, x1, register_operand (x0)); - /* Branch over the next instruction if x0 <= x1. */ - p += emit_bcond (p, LT, 8); - /* The NOP instruction will be patched with an unconditional branch. */ - if (offset_p) - *offset_p = (p - buf) * 4; - if (size_p) - *size_p = 4; - p += emit_nop (p); - - emit_ops_insns (buf, p - buf); -} - -static struct emit_ops aarch64_emit_ops_impl = -{ - aarch64_emit_prologue, - aarch64_emit_epilogue, - aarch64_emit_add, - aarch64_emit_sub, - aarch64_emit_mul, - aarch64_emit_lsh, - aarch64_emit_rsh_signed, - aarch64_emit_rsh_unsigned, - aarch64_emit_ext, - aarch64_emit_log_not, - aarch64_emit_bit_and, - aarch64_emit_bit_or, - aarch64_emit_bit_xor, - aarch64_emit_bit_not, - aarch64_emit_equal, - aarch64_emit_less_signed, - aarch64_emit_less_unsigned, - aarch64_emit_ref, - aarch64_emit_if_goto, - aarch64_emit_goto, - aarch64_write_goto_address, - aarch64_emit_const, - aarch64_emit_call, - aarch64_emit_reg, - aarch64_emit_pop, - aarch64_emit_stack_flush, - aarch64_emit_zero_ext, - aarch64_emit_swap, - aarch64_emit_stack_adjust, - aarch64_emit_int_call_1, - aarch64_emit_void_call_2, - aarch64_emit_eq_goto, - aarch64_emit_ne_goto, - aarch64_emit_lt_goto, - aarch64_emit_le_goto, - aarch64_emit_gt_goto, - aarch64_emit_ge_got, -}; - -/* Implementation of linux_target_ops method "emit_ops". */ - -static struct emit_ops * -aarch64_emit_ops (void) -{ - return &aarch64_emit_ops_impl; -} - -/* Implementation of linux_target_ops method - "get_min_fast_tracepoint_insn_len". */ - -static int -aarch64_get_min_fast_tracepoint_insn_len (void) -{ - return 4; -} - -/* Implementation of linux_target_ops method "supports_range_stepping". */ - -static int -aarch64_supports_range_stepping (void) -{ - return 1; -} - -/* Implementation of linux_target_ops method "sw_breakpoint_from_kind". */ - -static const gdb_byte * -aarch64_sw_breakpoint_from_kind (int kind, int *size) -{ - if (is_64bit_tdesc ()) - { - *size = aarch64_breakpoint_len; - return aarch64_breakpoint; - } - else - return arm_sw_breakpoint_from_kind (kind, size); -} - -/* Implementation of linux_target_ops method "breakpoint_kind_from_pc". */ - -static int -aarch64_breakpoint_kind_from_pc (CORE_ADDR *pcptr) -{ - if (is_64bit_tdesc ()) - return aarch64_breakpoint_len; - else - return arm_breakpoint_kind_from_pc (pcptr); -} - -/* Implementation of the linux_target_ops method - "breakpoint_kind_from_current_state". */ - -static int -aarch64_breakpoint_kind_from_current_state (CORE_ADDR *pcptr) -{ - if (is_64bit_tdesc ()) - return aarch64_breakpoint_len; - else - return arm_breakpoint_kind_from_current_state (pcptr); -} - -/* Support for hardware single step. */ - -static int -aarch64_supports_hardware_single_step (void) -{ - return 1; -} - -struct linux_target_ops the_low_target = -{ - aarch64_arch_setup, - aarch64_regs_info, - NULL, /* cannot_fetch_register */ - NULL, /* cannot_store_register */ - NULL, /* fetch_register */ - aarch64_get_pc, - aarch64_set_pc, - aarch64_breakpoint_kind_from_pc, - aarch64_sw_breakpoint_from_kind, - NULL, /* get_next_pcs */ - 0, /* decr_pc_after_break */ - aarch64_breakpoint_at, - aarch64_supports_z_point_type, - aarch64_insert_point, - aarch64_remove_point, - aarch64_stopped_by_watchpoint, - aarch64_stopped_data_address, - NULL, /* collect_ptrace_register */ - NULL, /* supply_ptrace_register */ - aarch64_linux_siginfo_fixup, - aarch64_linux_new_process, - aarch64_linux_delete_process, - aarch64_linux_new_thread, - aarch64_linux_delete_thread, - aarch64_linux_new_fork, - aarch64_linux_prepare_to_resume, - NULL, /* process_qsupported */ - aarch64_supports_tracepoints, - aarch64_get_thread_area, - aarch64_install_fast_tracepoint_jump_pad, - aarch64_emit_ops, - aarch64_get_min_fast_tracepoint_insn_len, - aarch64_supports_range_stepping, - aarch64_breakpoint_kind_from_current_state, - aarch64_supports_hardware_single_step, - aarch64_get_syscall_trapinfo, -}; - -void -initialize_low_arch (void) -{ - initialize_low_arch_aarch32 (); - - initialize_regsets_info (&aarch64_regsets_info); - initialize_regsets_info (&aarch64_sve_regsets_info); -} diff -Nru gdb-9.1/gdb/gdbserver/linux-aarch64-tdesc.c gdb-10.2/gdb/gdbserver/linux-aarch64-tdesc.c --- gdb-9.1/gdb/gdbserver/linux-aarch64-tdesc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/linux-aarch64-tdesc.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,57 +0,0 @@ -/* GNU/Linux/aarch64 specific target description, for the remote server - for GDB. - Copyright (C) 2017-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "server.h" -#include "tdesc.h" -#include "arch/aarch64.h" -#include "linux-aarch32-low.h" -#include <inttypes.h> - -/* All possible aarch64 target descriptors. */ -struct target_desc *tdesc_aarch64_list[AARCH64_MAX_SVE_VQ + 1][2/*pauth*/]; - -/* Create the aarch64 target description. */ - -const target_desc * -aarch64_linux_read_description (uint64_t vq, bool pauth_p) -{ - if (vq > AARCH64_MAX_SVE_VQ) - error (_("VQ is %" PRIu64 ", maximum supported value is %d"), vq, - AARCH64_MAX_SVE_VQ); - - struct target_desc *tdesc = tdesc_aarch64_list[vq][pauth_p]; - - if (tdesc == NULL) - { - tdesc = aarch64_create_target_description (vq, pauth_p); - - static const char *expedite_regs_aarch64[] = { "x29", "sp", "pc", NULL }; - static const char *expedite_regs_aarch64_sve[] = { "x29", "sp", "pc", - "vg", NULL }; - - if (vq == 0) - init_target_desc (tdesc, expedite_regs_aarch64); - else - init_target_desc (tdesc, expedite_regs_aarch64_sve); - - tdesc_aarch64_list[vq][pauth_p] = tdesc; - } - - return tdesc; -} diff -Nru gdb-9.1/gdb/gdbserver/linux-aarch64-tdesc.h gdb-10.2/gdb/gdbserver/linux-aarch64-tdesc.h --- gdb-9.1/gdb/gdbserver/linux-aarch64-tdesc.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/linux-aarch64-tdesc.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,25 +0,0 @@ -/* Low level support for aarch64, shared between gdbserver and IPA. - - Copyright (C) 2016-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef GDBSERVER_LINUX_AARCH64_TDESC_H -#define GDBSERVER_LINUX_AARCH64_TDESC_H - -const target_desc * aarch64_linux_read_description (uint64_t vq, bool pauth_p); - -#endif /* GDBSERVER_LINUX_AARCH64_TDESC_H */ diff -Nru gdb-9.1/gdb/gdbserver/linux-amd64-ipa.c gdb-10.2/gdb/gdbserver/linux-amd64-ipa.c --- gdb-9.1/gdb/gdbserver/linux-amd64-ipa.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/linux-amd64-ipa.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,289 +0,0 @@ -/* GNU/Linux/x86-64 specific low level interface, for the in-process - agent library for GDB. - - Copyright (C) 2010-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "server.h" -#include <sys/mman.h> -#include "tracepoint.h" -#include "linux-x86-tdesc.h" -#include "gdbsupport/x86-xstate.h" - -/* Defined in auto-generated file amd64-linux.c. */ -void init_registers_amd64_linux (void); -extern const struct target_desc *tdesc_amd64_linux; - -/* fast tracepoints collect registers. */ - -#define FT_CR_RIP 0 -#define FT_CR_EFLAGS 1 -#define FT_CR_R8 2 -#define FT_CR_R9 3 -#define FT_CR_R10 4 -#define FT_CR_R11 5 -#define FT_CR_R12 6 -#define FT_CR_R13 7 -#define FT_CR_R14 8 -#define FT_CR_R15 9 -#define FT_CR_RAX 10 -#define FT_CR_RBX 11 -#define FT_CR_RCX 12 -#define FT_CR_RDX 13 -#define FT_CR_RSI 14 -#define FT_CR_RDI 15 -#define FT_CR_RBP 16 -#define FT_CR_RSP 17 - -static const int x86_64_ft_collect_regmap[] = { - FT_CR_RAX * 8, FT_CR_RBX * 8, FT_CR_RCX * 8, FT_CR_RDX * 8, - FT_CR_RSI * 8, FT_CR_RDI * 8, FT_CR_RBP * 8, FT_CR_RSP * 8, - FT_CR_R8 * 8, FT_CR_R9 * 8, FT_CR_R10 * 8, FT_CR_R11 * 8, - FT_CR_R12 * 8, FT_CR_R13 * 8, FT_CR_R14 * 8, FT_CR_R15 * 8, - FT_CR_RIP * 8, FT_CR_EFLAGS * 8 -}; - -#define X86_64_NUM_FT_COLLECT_GREGS \ - (sizeof (x86_64_ft_collect_regmap) / sizeof(x86_64_ft_collect_regmap[0])) - -void -supply_fast_tracepoint_registers (struct regcache *regcache, - const unsigned char *buf) -{ - int i; - - for (i = 0; i < X86_64_NUM_FT_COLLECT_GREGS; i++) - supply_register (regcache, i, - ((char *) buf) + x86_64_ft_collect_regmap[i]); -} - -ULONGEST -get_raw_reg (const unsigned char *raw_regs, int regnum) -{ - if (regnum >= X86_64_NUM_FT_COLLECT_GREGS) - return 0; - - return *(ULONGEST *) (raw_regs + x86_64_ft_collect_regmap[regnum]); -} - -#ifdef HAVE_UST - -#include <ust/processor.h> - -/* "struct registers" is the UST object type holding the registers at - the time of the static tracepoint marker call. This doesn't - contain RIP, but we know what it must have been (the marker - address). */ - -#define ST_REGENTRY(REG) \ - { \ - offsetof (struct registers, REG), \ - sizeof (((struct registers *) NULL)->REG) \ - } - -static struct -{ - int offset; - int size; -} x86_64_st_collect_regmap[] = - { - ST_REGENTRY(rax), - ST_REGENTRY(rbx), - ST_REGENTRY(rcx), - ST_REGENTRY(rdx), - ST_REGENTRY(rsi), - ST_REGENTRY(rdi), - ST_REGENTRY(rbp), - ST_REGENTRY(rsp), - ST_REGENTRY(r8), - ST_REGENTRY(r9), - ST_REGENTRY(r10), - ST_REGENTRY(r11), - ST_REGENTRY(r12), - ST_REGENTRY(r13), - ST_REGENTRY(r14), - ST_REGENTRY(r15), - { -1, 0 }, - ST_REGENTRY(rflags), - ST_REGENTRY(cs), - ST_REGENTRY(ss), - }; - -#define X86_64_NUM_ST_COLLECT_GREGS \ - (sizeof (x86_64_st_collect_regmap) / sizeof (x86_64_st_collect_regmap[0])) - -/* GDB's RIP register number. */ -#define AMD64_RIP_REGNUM 16 - -void -supply_static_tracepoint_registers (struct regcache *regcache, - const unsigned char *buf, - CORE_ADDR pc) -{ - int i; - unsigned long newpc = pc; - - supply_register (regcache, AMD64_RIP_REGNUM, &newpc); - - for (i = 0; i < X86_64_NUM_ST_COLLECT_GREGS; i++) - if (x86_64_st_collect_regmap[i].offset != -1) - { - switch (x86_64_st_collect_regmap[i].size) - { - case 8: - supply_register (regcache, i, - ((char *) buf) - + x86_64_st_collect_regmap[i].offset); - break; - case 2: - { - unsigned long reg - = * (short *) (((char *) buf) - + x86_64_st_collect_regmap[i].offset); - reg &= 0xffff; - supply_register (regcache, i, ®); - } - break; - default: - internal_error (__FILE__, __LINE__, - "unhandled register size: %d", - x86_64_st_collect_regmap[i].size); - break; - } - } -} - -#endif /* HAVE_UST */ - -#if !defined __ILP32__ -/* Map the tdesc index to xcr0 mask. */ -static uint64_t idx2mask[X86_TDESC_LAST] = { - X86_XSTATE_X87_MASK, - X86_XSTATE_SSE_MASK, - X86_XSTATE_AVX_MASK, - X86_XSTATE_MPX_MASK, - X86_XSTATE_AVX_MPX_MASK, - X86_XSTATE_AVX_AVX512_MASK, - X86_XSTATE_AVX_MPX_AVX512_PKU_MASK, -}; -#endif - -/* Return target_desc to use for IPA, given the tdesc index passed by - gdbserver. */ - -const struct target_desc * -get_ipa_tdesc (int idx) -{ - if (idx >= X86_TDESC_LAST) - { - internal_error (__FILE__, __LINE__, - "unknown ipa tdesc index: %d", idx); - } - -#if defined __ILP32__ - switch (idx) - { - case X86_TDESC_SSE: - return amd64_linux_read_description (X86_XSTATE_SSE_MASK, true); - case X86_TDESC_AVX: - return amd64_linux_read_description (X86_XSTATE_AVX_MASK, true); - case X86_TDESC_AVX_AVX512: - return amd64_linux_read_description (X86_XSTATE_AVX_AVX512_MASK, true); - default: - break; - } -#else - return amd64_linux_read_description (idx2mask[idx], false); -#endif - - internal_error (__FILE__, __LINE__, - "unknown ipa tdesc index: %d", idx); -} - -/* Allocate buffer for the jump pads. The branch instruction has a - reach of +/- 31-bit, and the executable is loaded at low addresses. - - 64-bit: Use MAP_32BIT to allocate in the first 2GB. Shared - libraries, being allocated at the top, are unfortunately out of - luck. - - x32: Since MAP_32BIT is 64-bit only, do the placement manually. - Try allocating at '0x80000000 - SIZE' initially, decreasing until - we hit a free area. This ensures the executable is fully covered, - and is as close as possible to the shared libraries, which are - usually mapped at the top of the first 4GB of the address space. -*/ - -void * -alloc_jump_pad_buffer (size_t size) -{ -#if __ILP32__ - uintptr_t addr; - int pagesize; - - pagesize = sysconf (_SC_PAGE_SIZE); - if (pagesize == -1) - perror_with_name ("sysconf"); - - addr = 0x80000000 - size; - - /* size should already be page-aligned, but this can't hurt. */ - addr &= ~(pagesize - 1); - - /* Search for a free area. If we hit 0, we're out of luck. */ - for (; addr; addr -= pagesize) - { - void *res; - - /* No MAP_FIXED - we don't want to zap someone's mapping. */ - res = mmap ((void *) addr, size, - PROT_READ | PROT_WRITE | PROT_EXEC, - MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); - - /* If we got what we wanted, return. */ - if ((uintptr_t) res == addr) - return res; - - /* If we got a mapping, but at a wrong address, undo it. */ - if (res != MAP_FAILED) - munmap (res, size); - } - - return NULL; -#else - void *res = mmap (NULL, size, PROT_READ | PROT_WRITE | PROT_EXEC, - MAP_PRIVATE | MAP_ANONYMOUS | MAP_32BIT, -1, 0); - - if (res == MAP_FAILED) - return NULL; - - return res; -#endif -} - -void -initialize_low_tracepoint (void) -{ -#if defined __ILP32__ - amd64_linux_read_description (X86_XSTATE_SSE_MASK, true); - amd64_linux_read_description (X86_XSTATE_AVX_MASK, true); - amd64_linux_read_description (X86_XSTATE_AVX_AVX512_MASK, true); -#else - for (auto i = 0; i < X86_TDESC_LAST; i++) - amd64_linux_read_description (idx2mask[i], false); -#endif -} diff -Nru gdb-9.1/gdb/gdbserver/linux-arm-low.c gdb-10.2/gdb/gdbserver/linux-arm-low.c --- gdb-9.1/gdb/gdbserver/linux-arm-low.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/linux-arm-low.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,1052 +0,0 @@ -/* GNU/Linux/ARM specific low level interface, for the remote server for GDB. - Copyright (C) 1995-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "server.h" -#include "linux-low.h" -#include "arch/arm.h" -#include "arch/arm-linux.h" -#include "arch/arm-get-next-pcs.h" -#include "linux-aarch32-low.h" -#include "linux-aarch32-tdesc.h" -#include "linux-arm-tdesc.h" - -#include <sys/uio.h> -/* Don't include elf.h if linux/elf.h got included by gdb_proc_service.h. - On Bionic elf.h and linux/elf.h have conflicting definitions. */ -#ifndef ELFMAG0 -#include <elf.h> -#endif -#include "nat/gdb_ptrace.h" -#include <signal.h> -#include <sys/syscall.h> - -#ifndef PTRACE_GET_THREAD_AREA -#define PTRACE_GET_THREAD_AREA 22 -#endif - -#ifndef PTRACE_GETWMMXREGS -# define PTRACE_GETWMMXREGS 18 -# define PTRACE_SETWMMXREGS 19 -#endif - -#ifndef PTRACE_GETVFPREGS -# define PTRACE_GETVFPREGS 27 -# define PTRACE_SETVFPREGS 28 -#endif - -#ifndef PTRACE_GETHBPREGS -#define PTRACE_GETHBPREGS 29 -#define PTRACE_SETHBPREGS 30 -#endif - -/* Information describing the hardware breakpoint capabilities. */ -static struct -{ - unsigned char arch; - unsigned char max_wp_length; - unsigned char wp_count; - unsigned char bp_count; -} arm_linux_hwbp_cap; - -/* Enum describing the different types of ARM hardware break-/watch-points. */ -typedef enum -{ - arm_hwbp_break = 0, - arm_hwbp_load = 1, - arm_hwbp_store = 2, - arm_hwbp_access = 3 -} arm_hwbp_type; - -/* Type describing an ARM Hardware Breakpoint Control register value. */ -typedef unsigned int arm_hwbp_control_t; - -/* Structure used to keep track of hardware break-/watch-points. */ -struct arm_linux_hw_breakpoint -{ - /* Address to break on, or being watched. */ - unsigned int address; - /* Control register for break-/watch- point. */ - arm_hwbp_control_t control; -}; - -/* Since we cannot dynamically allocate subfields of arch_process_info, - assume a maximum number of supported break-/watchpoints. */ -#define MAX_BPTS 32 -#define MAX_WPTS 32 - -/* Per-process arch-specific data we want to keep. */ -struct arch_process_info -{ - /* Hardware breakpoints for this process. */ - struct arm_linux_hw_breakpoint bpts[MAX_BPTS]; - /* Hardware watchpoints for this process. */ - struct arm_linux_hw_breakpoint wpts[MAX_WPTS]; -}; - -/* Per-thread arch-specific data we want to keep. */ -struct arch_lwp_info -{ - /* Non-zero if our copy differs from what's recorded in the thread. */ - char bpts_changed[MAX_BPTS]; - char wpts_changed[MAX_WPTS]; - /* Cached stopped data address. */ - CORE_ADDR stopped_data_address; -}; - -/* These are in <asm/elf.h> in current kernels. */ -#define HWCAP_VFP 64 -#define HWCAP_IWMMXT 512 -#define HWCAP_NEON 4096 -#define HWCAP_VFPv3 8192 -#define HWCAP_VFPv3D16 16384 - -#ifdef HAVE_SYS_REG_H -#include <sys/reg.h> -#endif - -#define arm_num_regs 26 - -static int arm_regmap[] = { - 0, 4, 8, 12, 16, 20, 24, 28, - 32, 36, 40, 44, 48, 52, 56, 60, - -1, -1, -1, -1, -1, -1, -1, -1, -1, - 64 -}; - -/* Forward declarations needed for get_next_pcs ops. */ -static ULONGEST get_next_pcs_read_memory_unsigned_integer (CORE_ADDR memaddr, - int len, - int byte_order); - -static CORE_ADDR get_next_pcs_addr_bits_remove (struct arm_get_next_pcs *self, - CORE_ADDR val); - -static CORE_ADDR get_next_pcs_syscall_next_pc (struct arm_get_next_pcs *self); - -static int get_next_pcs_is_thumb (struct arm_get_next_pcs *self); - -/* get_next_pcs operations. */ -static struct arm_get_next_pcs_ops get_next_pcs_ops = { - get_next_pcs_read_memory_unsigned_integer, - get_next_pcs_syscall_next_pc, - get_next_pcs_addr_bits_remove, - get_next_pcs_is_thumb, - arm_linux_get_next_pcs_fixup, -}; - -static int -arm_cannot_store_register (int regno) -{ - return (regno >= arm_num_regs); -} - -static int -arm_cannot_fetch_register (int regno) -{ - return (regno >= arm_num_regs); -} - -static void -arm_fill_wmmxregset (struct regcache *regcache, void *buf) -{ - if (arm_linux_get_tdesc_fp_type (regcache->tdesc) != ARM_FP_TYPE_IWMMXT) - return; - - for (int i = 0; i < 16; i++) - collect_register (regcache, arm_num_regs + i, (char *) buf + i * 8); - - /* We only have access to wcssf, wcasf, and wcgr0-wcgr3. */ - for (int i = 0; i < 6; i++) - collect_register (regcache, arm_num_regs + i + 16, - (char *) buf + 16 * 8 + i * 4); -} - -static void -arm_store_wmmxregset (struct regcache *regcache, const void *buf) -{ - if (arm_linux_get_tdesc_fp_type (regcache->tdesc) != ARM_FP_TYPE_IWMMXT) - return; - - for (int i = 0; i < 16; i++) - supply_register (regcache, arm_num_regs + i, (char *) buf + i * 8); - - /* We only have access to wcssf, wcasf, and wcgr0-wcgr3. */ - for (int i = 0; i < 6; i++) - supply_register (regcache, arm_num_regs + i + 16, - (char *) buf + 16 * 8 + i * 4); -} - -static void -arm_fill_vfpregset (struct regcache *regcache, void *buf) -{ - int num; - - if (is_aarch32_linux_description (regcache->tdesc)) - num = 32; - else - { - arm_fp_type fp_type = arm_linux_get_tdesc_fp_type (regcache->tdesc); - - if (fp_type == ARM_FP_TYPE_VFPV3) - num = 32; - else if (fp_type == ARM_FP_TYPE_VFPV2) - num = 16; - else - return; - } - - arm_fill_vfpregset_num (regcache, buf, num); -} - -/* Wrapper of UNMAKE_THUMB_ADDR for get_next_pcs. */ -static CORE_ADDR -get_next_pcs_addr_bits_remove (struct arm_get_next_pcs *self, CORE_ADDR val) -{ - return UNMAKE_THUMB_ADDR (val); -} - -static void -arm_store_vfpregset (struct regcache *regcache, const void *buf) -{ - int num; - - if (is_aarch32_linux_description (regcache->tdesc)) - num = 32; - else - { - arm_fp_type fp_type = arm_linux_get_tdesc_fp_type (regcache->tdesc); - - if (fp_type == ARM_FP_TYPE_VFPV3) - num = 32; - else if (fp_type == ARM_FP_TYPE_VFPV2) - num = 16; - else - return; - } - - arm_store_vfpregset_num (regcache, buf, num); -} - -/* Wrapper of arm_is_thumb_mode for get_next_pcs. */ -static int -get_next_pcs_is_thumb (struct arm_get_next_pcs *self) -{ - return arm_is_thumb_mode (); -} - -/* Read memory from the inferior. - BYTE_ORDER is ignored and there to keep compatiblity with GDB's - read_memory_unsigned_integer. */ -static ULONGEST -get_next_pcs_read_memory_unsigned_integer (CORE_ADDR memaddr, - int len, - int byte_order) -{ - ULONGEST res; - - res = 0; - target_read_memory (memaddr, (unsigned char *) &res, len); - - return res; -} - -/* Fetch the thread-local storage pointer for libthread_db. */ - -ps_err_e -ps_get_thread_area (struct ps_prochandle *ph, - lwpid_t lwpid, int idx, void **base) -{ - if (ptrace (PTRACE_GET_THREAD_AREA, lwpid, NULL, base) != 0) - return PS_ERR; - - /* IDX is the bias from the thread pointer to the beginning of the - thread descriptor. It has to be subtracted due to implementation - quirks in libthread_db. */ - *base = (void *) ((char *)*base - idx); - - return PS_OK; -} - - -/* Query Hardware Breakpoint information for the target we are attached to - (using PID as ptrace argument) and set up arm_linux_hwbp_cap. */ -static void -arm_linux_init_hwbp_cap (int pid) -{ - unsigned int val; - - if (ptrace (PTRACE_GETHBPREGS, pid, 0, &val) < 0) - return; - - arm_linux_hwbp_cap.arch = (unsigned char)((val >> 24) & 0xff); - if (arm_linux_hwbp_cap.arch == 0) - return; - - arm_linux_hwbp_cap.max_wp_length = (unsigned char)((val >> 16) & 0xff); - arm_linux_hwbp_cap.wp_count = (unsigned char)((val >> 8) & 0xff); - arm_linux_hwbp_cap.bp_count = (unsigned char)(val & 0xff); - - if (arm_linux_hwbp_cap.wp_count > MAX_WPTS) - internal_error (__FILE__, __LINE__, "Unsupported number of watchpoints"); - if (arm_linux_hwbp_cap.bp_count > MAX_BPTS) - internal_error (__FILE__, __LINE__, "Unsupported number of breakpoints"); -} - -/* How many hardware breakpoints are available? */ -static int -arm_linux_get_hw_breakpoint_count (void) -{ - return arm_linux_hwbp_cap.bp_count; -} - -/* How many hardware watchpoints are available? */ -static int -arm_linux_get_hw_watchpoint_count (void) -{ - return arm_linux_hwbp_cap.wp_count; -} - -/* Maximum length of area watched by hardware watchpoint. */ -static int -arm_linux_get_hw_watchpoint_max_length (void) -{ - return arm_linux_hwbp_cap.max_wp_length; -} - -/* Initialize an ARM hardware break-/watch-point control register value. - BYTE_ADDRESS_SELECT is the mask of bytes to trigger on; HWBP_TYPE is the - type of break-/watch-point; ENABLE indicates whether the point is enabled. - */ -static arm_hwbp_control_t -arm_hwbp_control_initialize (unsigned byte_address_select, - arm_hwbp_type hwbp_type, - int enable) -{ - gdb_assert ((byte_address_select & ~0xffU) == 0); - gdb_assert (hwbp_type != arm_hwbp_break - || ((byte_address_select & 0xfU) != 0)); - - return (byte_address_select << 5) | (hwbp_type << 3) | (3 << 1) | enable; -} - -/* Does the breakpoint control value CONTROL have the enable bit set? */ -static int -arm_hwbp_control_is_enabled (arm_hwbp_control_t control) -{ - return control & 0x1; -} - -/* Is the breakpoint control value CONTROL initialized? */ -static int -arm_hwbp_control_is_initialized (arm_hwbp_control_t control) -{ - return control != 0; -} - -/* Change a breakpoint control word so that it is in the disabled state. */ -static arm_hwbp_control_t -arm_hwbp_control_disable (arm_hwbp_control_t control) -{ - return control & ~0x1; -} - -/* Are two break-/watch-points equal? */ -static int -arm_linux_hw_breakpoint_equal (const struct arm_linux_hw_breakpoint *p1, - const struct arm_linux_hw_breakpoint *p2) -{ - return p1->address == p2->address && p1->control == p2->control; -} - -/* Convert a raw breakpoint type to an enum arm_hwbp_type. */ - -static arm_hwbp_type -raw_bkpt_type_to_arm_hwbp_type (enum raw_bkpt_type raw_type) -{ - switch (raw_type) - { - case raw_bkpt_type_hw: - return arm_hwbp_break; - case raw_bkpt_type_write_wp: - return arm_hwbp_store; - case raw_bkpt_type_read_wp: - return arm_hwbp_load; - case raw_bkpt_type_access_wp: - return arm_hwbp_access; - default: - gdb_assert_not_reached ("unhandled raw type"); - } -} - -/* Initialize the hardware breakpoint structure P for a breakpoint or - watchpoint at ADDR to LEN. The type of watchpoint is given in TYPE. - Returns -1 if TYPE is unsupported, or -2 if the particular combination - of ADDR and LEN cannot be implemented. Otherwise, returns 0 if TYPE - represents a breakpoint and 1 if type represents a watchpoint. */ -static int -arm_linux_hw_point_initialize (enum raw_bkpt_type raw_type, CORE_ADDR addr, - int len, struct arm_linux_hw_breakpoint *p) -{ - arm_hwbp_type hwbp_type; - unsigned mask; - - hwbp_type = raw_bkpt_type_to_arm_hwbp_type (raw_type); - - if (hwbp_type == arm_hwbp_break) - { - /* For breakpoints, the length field encodes the mode. */ - switch (len) - { - case 2: /* 16-bit Thumb mode breakpoint */ - case 3: /* 32-bit Thumb mode breakpoint */ - mask = 0x3; - addr &= ~1; - break; - case 4: /* 32-bit ARM mode breakpoint */ - mask = 0xf; - addr &= ~3; - break; - default: - /* Unsupported. */ - return -2; - } - } - else - { - CORE_ADDR max_wp_length = arm_linux_get_hw_watchpoint_max_length (); - CORE_ADDR aligned_addr; - - /* Can not set watchpoints for zero or negative lengths. */ - if (len <= 0) - return -2; - /* The current ptrace interface can only handle watchpoints that are a - power of 2. */ - if ((len & (len - 1)) != 0) - return -2; - - /* Test that the range [ADDR, ADDR + LEN) fits into the largest address - range covered by a watchpoint. */ - aligned_addr = addr & ~(max_wp_length - 1); - if (aligned_addr + max_wp_length < addr + len) - return -2; - - mask = (1 << len) - 1; - } - - p->address = (unsigned int) addr; - p->control = arm_hwbp_control_initialize (mask, hwbp_type, 1); - - return hwbp_type != arm_hwbp_break; -} - -/* Callback to mark a watch-/breakpoint to be updated in all threads of - the current process. */ - -static void -update_registers_callback (thread_info *thread, int watch, int i) -{ - struct lwp_info *lwp = get_thread_lwp (thread); - - /* The actual update is done later just before resuming the lwp, - we just mark that the registers need updating. */ - if (watch) - lwp->arch_private->wpts_changed[i] = 1; - else - lwp->arch_private->bpts_changed[i] = 1; - - /* If the lwp isn't stopped, force it to momentarily pause, so - we can update its breakpoint registers. */ - if (!lwp->stopped) - linux_stop_lwp (lwp); -} - -static int -arm_supports_z_point_type (char z_type) -{ - switch (z_type) - { - case Z_PACKET_SW_BP: - case Z_PACKET_HW_BP: - case Z_PACKET_WRITE_WP: - case Z_PACKET_READ_WP: - case Z_PACKET_ACCESS_WP: - return 1; - default: - /* Leave the handling of sw breakpoints with the gdb client. */ - return 0; - } -} - -/* Insert hardware break-/watchpoint. */ -static int -arm_insert_point (enum raw_bkpt_type type, CORE_ADDR addr, - int len, struct raw_breakpoint *bp) -{ - struct process_info *proc = current_process (); - struct arm_linux_hw_breakpoint p, *pts; - int watch, i, count; - - watch = arm_linux_hw_point_initialize (type, addr, len, &p); - if (watch < 0) - { - /* Unsupported. */ - return watch == -1 ? 1 : -1; - } - - if (watch) - { - count = arm_linux_get_hw_watchpoint_count (); - pts = proc->priv->arch_private->wpts; - } - else - { - count = arm_linux_get_hw_breakpoint_count (); - pts = proc->priv->arch_private->bpts; - } - - for (i = 0; i < count; i++) - if (!arm_hwbp_control_is_enabled (pts[i].control)) - { - pts[i] = p; - - /* Only update the threads of the current process. */ - for_each_thread (current_thread->id.pid (), [&] (thread_info *thread) - { - update_registers_callback (thread, watch, i); - }); - - return 0; - } - - /* We're out of watchpoints. */ - return -1; -} - -/* Remove hardware break-/watchpoint. */ -static int -arm_remove_point (enum raw_bkpt_type type, CORE_ADDR addr, - int len, struct raw_breakpoint *bp) -{ - struct process_info *proc = current_process (); - struct arm_linux_hw_breakpoint p, *pts; - int watch, i, count; - - watch = arm_linux_hw_point_initialize (type, addr, len, &p); - if (watch < 0) - { - /* Unsupported. */ - return -1; - } - - if (watch) - { - count = arm_linux_get_hw_watchpoint_count (); - pts = proc->priv->arch_private->wpts; - } - else - { - count = arm_linux_get_hw_breakpoint_count (); - pts = proc->priv->arch_private->bpts; - } - - for (i = 0; i < count; i++) - if (arm_linux_hw_breakpoint_equal (&p, pts + i)) - { - pts[i].control = arm_hwbp_control_disable (pts[i].control); - - /* Only update the threads of the current process. */ - for_each_thread (current_thread->id.pid (), [&] (thread_info *thread) - { - update_registers_callback (thread, watch, i); - }); - - return 0; - } - - /* No watchpoint matched. */ - return -1; -} - -/* Return whether current thread is stopped due to a watchpoint. */ -static int -arm_stopped_by_watchpoint (void) -{ - struct lwp_info *lwp = get_thread_lwp (current_thread); - siginfo_t siginfo; - - /* We must be able to set hardware watchpoints. */ - if (arm_linux_get_hw_watchpoint_count () == 0) - return 0; - - /* Retrieve siginfo. */ - errno = 0; - ptrace (PTRACE_GETSIGINFO, lwpid_of (current_thread), 0, &siginfo); - if (errno != 0) - return 0; - - /* This must be a hardware breakpoint. */ - if (siginfo.si_signo != SIGTRAP - || (siginfo.si_code & 0xffff) != 0x0004 /* TRAP_HWBKPT */) - return 0; - - /* If we are in a positive slot then we're looking at a breakpoint and not - a watchpoint. */ - if (siginfo.si_errno >= 0) - return 0; - - /* Cache stopped data address for use by arm_stopped_data_address. */ - lwp->arch_private->stopped_data_address - = (CORE_ADDR) (uintptr_t) siginfo.si_addr; - - return 1; -} - -/* Return data address that triggered watchpoint. Called only if - arm_stopped_by_watchpoint returned true. */ -static CORE_ADDR -arm_stopped_data_address (void) -{ - struct lwp_info *lwp = get_thread_lwp (current_thread); - return lwp->arch_private->stopped_data_address; -} - -/* Called when a new process is created. */ -static struct arch_process_info * -arm_new_process (void) -{ - struct arch_process_info *info = XCNEW (struct arch_process_info); - return info; -} - -/* Called when a process is being deleted. */ - -static void -arm_delete_process (struct arch_process_info *info) -{ - xfree (info); -} - -/* Called when a new thread is detected. */ -static void -arm_new_thread (struct lwp_info *lwp) -{ - struct arch_lwp_info *info = XCNEW (struct arch_lwp_info); - int i; - - for (i = 0; i < MAX_BPTS; i++) - info->bpts_changed[i] = 1; - for (i = 0; i < MAX_WPTS; i++) - info->wpts_changed[i] = 1; - - lwp->arch_private = info; -} - -/* Function to call when a thread is being deleted. */ - -static void -arm_delete_thread (struct arch_lwp_info *arch_lwp) -{ - xfree (arch_lwp); -} - -static void -arm_new_fork (struct process_info *parent, struct process_info *child) -{ - struct arch_process_info *parent_proc_info; - struct arch_process_info *child_proc_info; - struct lwp_info *child_lwp; - struct arch_lwp_info *child_lwp_info; - int i; - - /* These are allocated by linux_add_process. */ - gdb_assert (parent->priv != NULL - && parent->priv->arch_private != NULL); - gdb_assert (child->priv != NULL - && child->priv->arch_private != NULL); - - parent_proc_info = parent->priv->arch_private; - child_proc_info = child->priv->arch_private; - - /* Linux kernel before 2.6.33 commit - 72f674d203cd230426437cdcf7dd6f681dad8b0d - will inherit hardware debug registers from parent - on fork/vfork/clone. Newer Linux kernels create such tasks with - zeroed debug registers. - - GDB core assumes the child inherits the watchpoints/hw - breakpoints of the parent, and will remove them all from the - forked off process. Copy the debug registers mirrors into the - new process so that all breakpoints and watchpoints can be - removed together. The debug registers mirror will become zeroed - in the end before detaching the forked off process, thus making - this compatible with older Linux kernels too. */ - - *child_proc_info = *parent_proc_info; - - /* Mark all the hardware breakpoints and watchpoints as changed to - make sure that the registers will be updated. */ - child_lwp = find_lwp_pid (ptid_t (child->pid)); - child_lwp_info = child_lwp->arch_private; - for (i = 0; i < MAX_BPTS; i++) - child_lwp_info->bpts_changed[i] = 1; - for (i = 0; i < MAX_WPTS; i++) - child_lwp_info->wpts_changed[i] = 1; -} - -/* Called when resuming a thread. - If the debug regs have changed, update the thread's copies. */ -static void -arm_prepare_to_resume (struct lwp_info *lwp) -{ - struct thread_info *thread = get_lwp_thread (lwp); - int pid = lwpid_of (thread); - struct process_info *proc = find_process_pid (pid_of (thread)); - struct arch_process_info *proc_info = proc->priv->arch_private; - struct arch_lwp_info *lwp_info = lwp->arch_private; - int i; - - for (i = 0; i < arm_linux_get_hw_breakpoint_count (); i++) - if (lwp_info->bpts_changed[i]) - { - errno = 0; - - if (arm_hwbp_control_is_enabled (proc_info->bpts[i].control)) - if (ptrace (PTRACE_SETHBPREGS, pid, - (PTRACE_TYPE_ARG3) ((i << 1) + 1), - &proc_info->bpts[i].address) < 0) - perror_with_name ("Unexpected error setting breakpoint address"); - - if (arm_hwbp_control_is_initialized (proc_info->bpts[i].control)) - if (ptrace (PTRACE_SETHBPREGS, pid, - (PTRACE_TYPE_ARG3) ((i << 1) + 2), - &proc_info->bpts[i].control) < 0) - perror_with_name ("Unexpected error setting breakpoint"); - - lwp_info->bpts_changed[i] = 0; - } - - for (i = 0; i < arm_linux_get_hw_watchpoint_count (); i++) - if (lwp_info->wpts_changed[i]) - { - errno = 0; - - if (arm_hwbp_control_is_enabled (proc_info->wpts[i].control)) - if (ptrace (PTRACE_SETHBPREGS, pid, - (PTRACE_TYPE_ARG3) -((i << 1) + 1), - &proc_info->wpts[i].address) < 0) - perror_with_name ("Unexpected error setting watchpoint address"); - - if (arm_hwbp_control_is_initialized (proc_info->wpts[i].control)) - if (ptrace (PTRACE_SETHBPREGS, pid, - (PTRACE_TYPE_ARG3) -((i << 1) + 2), - &proc_info->wpts[i].control) < 0) - perror_with_name ("Unexpected error setting watchpoint"); - - lwp_info->wpts_changed[i] = 0; - } -} - -/* Find the next pc for a sigreturn or rt_sigreturn syscall. In - addition, set IS_THUMB depending on whether we will return to ARM - or Thumb code. - See arm-linux.h for stack layout details. */ -static CORE_ADDR -arm_sigreturn_next_pc (struct regcache *regcache, int svc_number, - int *is_thumb) -{ - unsigned long sp; - unsigned long sp_data; - /* Offset of PC register. */ - int pc_offset = 0; - CORE_ADDR next_pc = 0; - uint32_t cpsr; - - gdb_assert (svc_number == __NR_sigreturn || svc_number == __NR_rt_sigreturn); - - collect_register_by_name (regcache, "sp", &sp); - (*the_target->read_memory) (sp, (unsigned char *) &sp_data, 4); - - pc_offset = arm_linux_sigreturn_next_pc_offset - (sp, sp_data, svc_number, __NR_sigreturn == svc_number ? 1 : 0); - - (*the_target->read_memory) (sp + pc_offset, (unsigned char *) &next_pc, 4); - - /* Set IS_THUMB according the CPSR saved on the stack. */ - (*the_target->read_memory) (sp + pc_offset + 4, (unsigned char *) &cpsr, 4); - *is_thumb = ((cpsr & CPSR_T) != 0); - - return next_pc; -} - -/* When PC is at a syscall instruction, return the PC of the next - instruction to be executed. */ -static CORE_ADDR -get_next_pcs_syscall_next_pc (struct arm_get_next_pcs *self) -{ - CORE_ADDR next_pc = 0; - CORE_ADDR pc = regcache_read_pc (self->regcache); - int is_thumb = arm_is_thumb_mode (); - ULONGEST svc_number = 0; - struct regcache *regcache = self->regcache; - - if (is_thumb) - { - collect_register (regcache, 7, &svc_number); - next_pc = pc + 2; - } - else - { - unsigned long this_instr; - unsigned long svc_operand; - - target_read_memory (pc, (unsigned char *) &this_instr, 4); - svc_operand = (0x00ffffff & this_instr); - - if (svc_operand) /* OABI. */ - { - svc_number = svc_operand - 0x900000; - } - else /* EABI. */ - { - collect_register (regcache, 7, &svc_number); - } - - next_pc = pc + 4; - } - - /* This is a sigreturn or sigreturn_rt syscall. */ - if (svc_number == __NR_sigreturn || svc_number == __NR_rt_sigreturn) - { - /* SIGRETURN or RT_SIGRETURN may affect the arm thumb mode, so - update IS_THUMB. */ - next_pc = arm_sigreturn_next_pc (regcache, svc_number, &is_thumb); - } - - /* Addresses for calling Thumb functions have the bit 0 set. */ - if (is_thumb) - next_pc = MAKE_THUMB_ADDR (next_pc); - - return next_pc; -} - -static const struct target_desc * -arm_read_description (void) -{ - unsigned long arm_hwcap = linux_get_hwcap (4); - - if (arm_hwcap & HWCAP_IWMMXT) - return arm_linux_read_description (ARM_FP_TYPE_IWMMXT); - - if (arm_hwcap & HWCAP_VFP) - { - /* Make sure that the kernel supports reading VFP registers. Support was - added in 2.6.30. */ - int pid = lwpid_of (current_thread); - errno = 0; - char *buf = (char *) alloca (ARM_VFP3_REGS_SIZE); - if (ptrace (PTRACE_GETVFPREGS, pid, 0, buf) < 0 && errno == EIO) - return arm_linux_read_description (ARM_FP_TYPE_NONE); - - /* NEON implies either no VFP, or VFPv3-D32. We only support - it with VFP. */ - if (arm_hwcap & HWCAP_NEON) - return aarch32_linux_read_description (); - else if ((arm_hwcap & (HWCAP_VFPv3 | HWCAP_VFPv3D16)) == HWCAP_VFPv3) - return arm_linux_read_description (ARM_FP_TYPE_VFPV3); - else - return arm_linux_read_description (ARM_FP_TYPE_VFPV2); - } - - /* The default configuration uses legacy FPA registers, probably - simulated. */ - return arm_linux_read_description (ARM_FP_TYPE_NONE); -} - -static void -arm_arch_setup (void) -{ - int tid = lwpid_of (current_thread); - int gpregs[18]; - struct iovec iov; - - /* Query hardware watchpoint/breakpoint capabilities. */ - arm_linux_init_hwbp_cap (tid); - - current_process ()->tdesc = arm_read_description (); - - iov.iov_base = gpregs; - iov.iov_len = sizeof (gpregs); - - /* Check if PTRACE_GETREGSET works. */ - if (ptrace (PTRACE_GETREGSET, tid, NT_PRSTATUS, &iov) == 0) - have_ptrace_getregset = 1; - else - have_ptrace_getregset = 0; -} - -/* Fetch the next possible PCs after the current instruction executes. */ - -static std::vector<CORE_ADDR> -arm_gdbserver_get_next_pcs (struct regcache *regcache) -{ - struct arm_get_next_pcs next_pcs_ctx; - - arm_get_next_pcs_ctor (&next_pcs_ctx, - &get_next_pcs_ops, - /* Byte order is ignored assumed as host. */ - 0, - 0, - 1, - regcache); - - return arm_get_next_pcs (&next_pcs_ctx); -} - -/* Support for hardware single step. */ - -static int -arm_supports_hardware_single_step (void) -{ - return 0; -} - -/* Implementation of linux_target_ops method "get_syscall_trapinfo". */ - -static void -arm_get_syscall_trapinfo (struct regcache *regcache, int *sysno) -{ - if (arm_is_thumb_mode ()) - collect_register_by_name (regcache, "r7", sysno); - else - { - unsigned long pc; - unsigned long insn; - - collect_register_by_name (regcache, "pc", &pc); - - if ((*the_target->read_memory) (pc - 4, (unsigned char *) &insn, 4)) - *sysno = UNKNOWN_SYSCALL; - else - { - unsigned long svc_operand = (0x00ffffff & insn); - - if (svc_operand) - { - /* OABI */ - *sysno = svc_operand - 0x900000; - } - else - { - /* EABI */ - collect_register_by_name (regcache, "r7", sysno); - } - } - } -} - -/* Register sets without using PTRACE_GETREGSET. */ - -static struct regset_info arm_regsets[] = { - { PTRACE_GETREGS, PTRACE_SETREGS, 0, - ARM_CORE_REGS_SIZE + ARM_INT_REGISTER_SIZE, GENERAL_REGS, - arm_fill_gregset, arm_store_gregset }, - { PTRACE_GETWMMXREGS, PTRACE_SETWMMXREGS, 0, IWMMXT_REGS_SIZE, EXTENDED_REGS, - arm_fill_wmmxregset, arm_store_wmmxregset }, - { PTRACE_GETVFPREGS, PTRACE_SETVFPREGS, 0, ARM_VFP3_REGS_SIZE, EXTENDED_REGS, - arm_fill_vfpregset, arm_store_vfpregset }, - NULL_REGSET -}; - -static struct regsets_info arm_regsets_info = - { - arm_regsets, /* regsets */ - 0, /* num_regsets */ - NULL, /* disabled_regsets */ - }; - -static struct usrregs_info arm_usrregs_info = - { - arm_num_regs, - arm_regmap, - }; - -static struct regs_info regs_info_arm = - { - NULL, /* regset_bitmap */ - &arm_usrregs_info, - &arm_regsets_info - }; - -static const struct regs_info * -arm_regs_info (void) -{ - const struct target_desc *tdesc = current_process ()->tdesc; - - if (have_ptrace_getregset == 1 - && (is_aarch32_linux_description (tdesc) - || arm_linux_get_tdesc_fp_type (tdesc) == ARM_FP_TYPE_VFPV3)) - return ®s_info_aarch32; - - return ®s_info_arm; -} - -struct linux_target_ops the_low_target = { - arm_arch_setup, - arm_regs_info, - arm_cannot_fetch_register, - arm_cannot_store_register, - NULL, /* fetch_register */ - linux_get_pc_32bit, - linux_set_pc_32bit, - arm_breakpoint_kind_from_pc, - arm_sw_breakpoint_from_kind, - arm_gdbserver_get_next_pcs, - 0, - arm_breakpoint_at, - arm_supports_z_point_type, - arm_insert_point, - arm_remove_point, - arm_stopped_by_watchpoint, - arm_stopped_data_address, - NULL, /* collect_ptrace_register */ - NULL, /* supply_ptrace_register */ - NULL, /* siginfo_fixup */ - arm_new_process, - arm_delete_process, - arm_new_thread, - arm_delete_thread, - arm_new_fork, - arm_prepare_to_resume, - NULL, /* process_qsupported */ - NULL, /* supports_tracepoints */ - NULL, /* get_thread_area */ - NULL, /* install_fast_tracepoint_jump_pad */ - NULL, /* emit_ops */ - NULL, /* get_min_fast_tracepoint_insn_len */ - NULL, /* supports_range_stepping */ - arm_breakpoint_kind_from_current_state, - arm_supports_hardware_single_step, - arm_get_syscall_trapinfo, -}; - -void -initialize_low_arch (void) -{ - initialize_low_arch_aarch32 (); - initialize_regsets_info (&arm_regsets_info); -} diff -Nru gdb-9.1/gdb/gdbserver/linux-arm-tdesc.c gdb-10.2/gdb/gdbserver/linux-arm-tdesc.c --- gdb-9.1/gdb/gdbserver/linux-arm-tdesc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/linux-arm-tdesc.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,62 +0,0 @@ -/* Copyright (C) 2019-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "server.h" -#include "tdesc.h" -#include "arch/arm.h" -#include <inttypes.h> - -/* All possible Arm target descriptors. */ -static struct target_desc *tdesc_arm_list[ARM_FP_TYPE_INVALID]; - -/* See linux-arm-tdesc.h. */ - -const target_desc * -arm_linux_read_description (arm_fp_type fp_type) -{ - struct target_desc *tdesc = tdesc_arm_list[fp_type]; - - if (tdesc == nullptr) - { - tdesc = arm_create_target_description (fp_type); - - static const char *expedite_regs[] = { "r11", "sp", "pc", 0 }; - init_target_desc (tdesc, expedite_regs); - - tdesc_arm_list[fp_type] = tdesc; - } - - return tdesc; -} - -/* See linux-arm-tdesc.h. */ - -arm_fp_type -arm_linux_get_tdesc_fp_type (const target_desc *tdesc) -{ - gdb_assert (tdesc != nullptr); - - /* Many of the tdesc_arm_list entries may not have been initialised yet. This - is ok, because tdesc must be one of the initialised ones. */ - for (int i = ARM_FP_TYPE_NONE; i < ARM_FP_TYPE_INVALID; i++) - { - if (tdesc == tdesc_arm_list[i]) - return (arm_fp_type) i; - } - - return ARM_FP_TYPE_INVALID; -} diff -Nru gdb-9.1/gdb/gdbserver/linux-arm-tdesc.h gdb-10.2/gdb/gdbserver/linux-arm-tdesc.h --- gdb-9.1/gdb/gdbserver/linux-arm-tdesc.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/linux-arm-tdesc.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,29 +0,0 @@ -/* Copyright (C) 2019-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef GDBSERVER_LINUX_ARM_TDESC_H -#define GDBSERVER_LINUX_ARM_TDESC_H - -/* Return the Arm target description with fp registers FP_TYPE. */ - -const target_desc * arm_linux_read_description (arm_fp_type fp_type); - -/* For a target description TDESC, return its fp type. */ - -arm_fp_type arm_linux_get_tdesc_fp_type (const target_desc *tdesc); - -#endif /* linux-arm-tdesc.h. */ diff -Nru gdb-9.1/gdb/gdbserver/linux-bfin-low.c gdb-10.2/gdb/gdbserver/linux-bfin-low.c --- gdb-9.1/gdb/gdbserver/linux-bfin-low.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/linux-bfin-low.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,159 +0,0 @@ -/* GNU/Linux/BFIN specific low level interface, for the remote server for GDB. - - Copyright (C) 2005-2020 Free Software Foundation, Inc. - - Contributed by Analog Devices, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "server.h" -#include "linux-low.h" -#include <asm/ptrace.h> - -/* Defined in auto-generated file reg-bfin.c. */ -void init_registers_bfin (void); -extern const struct target_desc *tdesc_bfin; - -static int bfin_regmap[] = -{ - PT_R0, PT_R1, PT_R2, PT_R3, PT_R4, PT_R5, PT_R6, PT_R7, - PT_P0, PT_P1, PT_P2, PT_P3, PT_P4, PT_P5, PT_USP, PT_FP, - PT_I0, PT_I1, PT_I2, PT_I3, PT_M0, PT_M1, PT_M2, PT_M3, - PT_B0, PT_B1, PT_B2, PT_B3, PT_L0, PT_L1, PT_L2, PT_L3, - PT_A0X, PT_A0W, PT_A1X, PT_A1W, PT_ASTAT, PT_RETS, - PT_LC0, PT_LT0, PT_LB0, PT_LC1, PT_LT1, PT_LB1, - -1 /* PT_CYCLES */, -1 /* PT_CYCLES2 */, - -1 /* PT_USP */, PT_SEQSTAT, PT_SYSCFG, PT_PC, PT_RETX, PT_RETN, PT_RETE, - PT_PC, -}; - -#define bfin_num_regs ARRAY_SIZE (bfin_regmap) - -static int -bfin_cannot_store_register (int regno) -{ - return (regno >= bfin_num_regs); -} - -static int -bfin_cannot_fetch_register (int regno) -{ - return (regno >= bfin_num_regs); -} - -#define bfin_breakpoint_len 2 -static const gdb_byte bfin_breakpoint[bfin_breakpoint_len] = {0xa1, 0x00}; - -/* Implementation of linux_target_ops method "sw_breakpoint_from_kind". */ - -static const gdb_byte * -bfin_sw_breakpoint_from_kind (int kind, int *size) -{ - *size = bfin_breakpoint_len; - return bfin_breakpoint; -} - -static int -bfin_breakpoint_at (CORE_ADDR where) -{ - unsigned char insn[bfin_breakpoint_len]; - - read_inferior_memory(where, insn, bfin_breakpoint_len); - if (insn[0] == bfin_breakpoint[0] - && insn[1] == bfin_breakpoint[1]) - return 1; - - /* If necessary, recognize more trap instructions here. GDB only uses the - one. */ - return 0; -} - -static void -bfin_arch_setup (void) -{ - current_process ()->tdesc = tdesc_bfin; -} - -/* Support for hardware single step. */ - -static int -bfin_supports_hardware_single_step (void) -{ - return 1; -} - -static struct usrregs_info bfin_usrregs_info = - { - bfin_num_regs, - bfin_regmap, - }; - -static struct regs_info regs_info = - { - NULL, /* regset_bitmap */ - &bfin_usrregs_info, - }; - -static const struct regs_info * -bfin_regs_info (void) -{ - return ®s_info; -} - -struct linux_target_ops the_low_target = { - bfin_arch_setup, - bfin_regs_info, - bfin_cannot_fetch_register, - bfin_cannot_store_register, - NULL, /* fetch_register */ - linux_get_pc_32bit, - linux_set_pc_32bit, - NULL, /* breakpoint_kind_from_pc */ - bfin_sw_breakpoint_from_kind, - NULL, /* get_next_pcs */ - 2, - bfin_breakpoint_at, - NULL, /* supports_z_point_type */ - NULL, /* insert_point */ - NULL, /* remove_point */ - NULL, /* stopped_by_watchpoint */ - NULL, /* stopped_data_address */ - NULL, /* collect_ptrace_register */ - NULL, /* supply_ptrace_register */ - NULL, /* siginfo_fixup */ - NULL, /* new_process */ - NULL, /* delete_process */ - NULL, /* new_thread */ - NULL, /* delete_thread */ - NULL, /* new_fork */ - NULL, /* prepare_to_resume */ - NULL, /* process_qsupported */ - NULL, /* supports_tracepoints */ - NULL, /* get_thread_area */ - NULL, /* install_fast_tracepoint_jump_pad */ - NULL, /* emit_ops */ - NULL, /* get_min_fast_tracepoint_insn_len */ - NULL, /* supports_range_stepping */ - NULL, /* breakpoint_kind_from_current_state */ - bfin_supports_hardware_single_step, -}; - - -void -initialize_low_arch (void) -{ - init_registers_bfin (); -} diff -Nru gdb-9.1/gdb/gdbserver/linux-cris-low.c gdb-10.2/gdb/gdbserver/linux-cris-low.c --- gdb-9.1/gdb/gdbserver/linux-cris-low.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/linux-cris-low.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,132 +0,0 @@ -/* GNU/Linux/CRIS specific low level interface, for the remote server for GDB. - Copyright (C) 1995-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "server.h" -#include "linux-low.h" -#include "nat/gdb_ptrace.h" - -/* Defined in auto-generated file reg-cris.c. */ -void init_registers_cris (void); -extern const struct target_desc *tdesc_cris; - -/* CRISv10 */ -#define cris_num_regs 32 - -/* Locations need to match <include/asm/arch/ptrace.h>. */ -static int cris_regmap[] = { - 15*4, 14*4, 13*4, 12*4, - 11*4, 10*4, 9*4, 8*4, - 7*4, 6*4, 5*4, 4*4, - 3*4, 2*4, 23*4, 19*4, - - -1, -1, -1, -1, - -1, 17*4, -1, 16*4, - -1, -1, -1, 18*4, - -1, 17*4, -1, -1 - -}; - -static int -cris_cannot_store_register (int regno) -{ - if (cris_regmap[regno] == -1) - return 1; - - return (regno >= cris_num_regs); -} - -static int -cris_cannot_fetch_register (int regno) -{ - if (cris_regmap[regno] == -1) - return 1; - - return (regno >= cris_num_regs); -} - -static const unsigned short cris_breakpoint = 0xe938; -#define cris_breakpoint_len 2 - -/* Implementation of linux_target_ops method "sw_breakpoint_from_kind". */ - -static const gdb_byte * -cris_sw_breakpoint_from_kind (int kind, int *size) -{ - *size = cris_breakpoint_len; - return (const gdb_byte *) &cris_breakpoint; -} - -static int -cris_breakpoint_at (CORE_ADDR where) -{ - unsigned short insn; - - (*the_target->read_memory) (where, (unsigned char *) &insn, - cris_breakpoint_len); - if (insn == cris_breakpoint) - return 1; - - /* If necessary, recognize more trap instructions here. GDB only uses the - one. */ - return 0; -} - -static void -cris_arch_setup (void) -{ - current_process ()->tdesc = tdesc_cris; -} - -static struct usrregs_info cris_usrregs_info = - { - cris_num_regs, - cris_regmap, - }; - -static struct regs_info regs_info = - { - NULL, /* regset_bitmap */ - &cris_usrregs_info, - }; - -static const struct regs_info * -cris_regs_info (void) -{ - return ®s_info; -} - -struct linux_target_ops the_low_target = { - cris_arch_setup, - cris_regs_info, - cris_cannot_fetch_register, - cris_cannot_store_register, - NULL, /* fetch_register */ - linux_get_pc_32bit, - linux_set_pc_32bit, - NULL, /* breakpoint_kind_from_pc */ - cris_sw_breakpoint_from_kind, - NULL, /* get_next_pcs */ - 0, - cris_breakpoint_at, -}; - -void -initialize_low_arch (void) -{ - init_registers_cris (); -} diff -Nru gdb-9.1/gdb/gdbserver/linux-crisv32-low.c gdb-10.2/gdb/gdbserver/linux-crisv32-low.c --- gdb-9.1/gdb/gdbserver/linux-crisv32-low.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/linux-crisv32-low.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,440 +0,0 @@ -/* GNU/Linux/CRIS specific low level interface, for the remote server for GDB. - Copyright (C) 1995-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "server.h" -#include "linux-low.h" -#include "nat/gdb_ptrace.h" - -/* Defined in auto-generated file reg-crisv32.c. */ -void init_registers_crisv32 (void); -extern const struct target_desc *tdesc_crisv32; - -/* CRISv32 */ -#define cris_num_regs 49 - -#ifndef PTRACE_GET_THREAD_AREA -#define PTRACE_GET_THREAD_AREA 25 -#endif - -/* Note: Ignoring USP (having the stack pointer in two locations causes trouble - without any significant gain). */ - -/* Locations need to match <include/asm/arch/ptrace.h>. */ -static int cris_regmap[] = { - 1*4, 2*4, 3*4, 4*4, - 5*4, 6*4, 7*4, 8*4, - 9*4, 10*4, 11*4, 12*4, - 13*4, 14*4, 24*4, 15*4, - - -1, -1, -1, 16*4, - -1, 22*4, 23*4, 17*4, - -1, -1, 21*4, 20*4, - -1, 19*4, -1, 18*4, - - 25*4, - - 26*4, -1, -1, 29*4, - 30*4, 31*4, 32*4, 33*4, - 34*4, 35*4, 36*4, 37*4, - 38*4, 39*4, 40*4, -1 - -}; - -static const unsigned short cris_breakpoint = 0xe938; -#define cris_breakpoint_len 2 - -/* Implementation of linux_target_ops method "sw_breakpoint_from_kind". */ - -static const gdb_byte * -cris_sw_breakpoint_from_kind (int kind, int *size) -{ - *size = cris_breakpoint_len; - return (const gdb_byte *) &cris_breakpoint; -} - -static int -cris_breakpoint_at (CORE_ADDR where) -{ - unsigned short insn; - - (*the_target->read_memory) (where, (unsigned char *) &insn, - cris_breakpoint_len); - if (insn == cris_breakpoint) - return 1; - - /* If necessary, recognize more trap instructions here. GDB only uses the - one. */ - return 0; -} - -static void -cris_write_data_breakpoint (struct regcache *regcache, - int bp, unsigned long start, unsigned long end) -{ - switch (bp) - { - case 0: - supply_register_by_name (regcache, "s3", &start); - supply_register_by_name (regcache, "s4", &end); - break; - case 1: - supply_register_by_name (regcache, "s5", &start); - supply_register_by_name (regcache, "s6", &end); - break; - case 2: - supply_register_by_name (regcache, "s7", &start); - supply_register_by_name (regcache, "s8", &end); - break; - case 3: - supply_register_by_name (regcache, "s9", &start); - supply_register_by_name (regcache, "s10", &end); - break; - case 4: - supply_register_by_name (regcache, "s11", &start); - supply_register_by_name (regcache, "s12", &end); - break; - case 5: - supply_register_by_name (regcache, "s13", &start); - supply_register_by_name (regcache, "s14", &end); - break; - } -} - -static int -cris_supports_z_point_type (char z_type) -{ - switch (z_type) - { - case Z_PACKET_WRITE_WP: - case Z_PACKET_READ_WP: - case Z_PACKET_ACCESS_WP: - return 1; - default: - return 0; - } -} - -static int -cris_insert_point (enum raw_bkpt_type type, CORE_ADDR addr, - int len, struct raw_breakpoint *bp) -{ - int bp; - unsigned long bp_ctrl; - unsigned long start, end; - unsigned long ccs; - struct regcache *regcache; - - regcache = get_thread_regcache (current_thread, 1); - - /* Read watchpoints are set as access watchpoints, because of GDB's - inability to deal with pure read watchpoints. */ - if (type == raw_bkpt_type_read_wp) - type = raw_bkpt_type_access_wp; - - /* Get the configuration register. */ - collect_register_by_name (regcache, "s0", &bp_ctrl); - - /* The watchpoint allocation scheme is the simplest possible. - For example, if a region is watched for read and - a write watch is requested, a new watchpoint will - be used. Also, if a watch for a region that is already - covered by one or more existing watchpoints, a new - watchpoint will be used. */ - - /* First, find a free data watchpoint. */ - for (bp = 0; bp < 6; bp++) - { - /* Each data watchpoint's control registers occupy 2 bits - (hence the 3), starting at bit 2 for D0 (hence the 2) - with 4 bits between for each watchpoint (yes, the 4). */ - if (!(bp_ctrl & (0x3 << (2 + (bp * 4))))) - break; - } - - if (bp > 5) - { - /* We're out of watchpoints. */ - return -1; - } - - /* Configure the control register first. */ - if (type == raw_bkpt_type_read_wp || type == raw_bkpt_type_access_wp) - { - /* Trigger on read. */ - bp_ctrl |= (1 << (2 + bp * 4)); - } - if (type == raw_bkpt_type_write_wp || type == raw_bkpt_type_access_wp) - { - /* Trigger on write. */ - bp_ctrl |= (2 << (2 + bp * 4)); - } - - /* Setup the configuration register. */ - supply_register_by_name (regcache, "s0", &bp_ctrl); - - /* Setup the range. */ - start = addr; - end = addr + len - 1; - - /* Configure the watchpoint register. */ - cris_write_data_breakpoint (regcache, bp, start, end); - - collect_register_by_name (regcache, "ccs", &ccs); - /* Set the S1 flag to enable watchpoints. */ - ccs |= (1 << 19); - supply_register_by_name (regcache, "ccs", &ccs); - - return 0; -} - -static int -cris_remove_point (enum raw_bkpt_type type, CORE_ADDR addr, int len, - struct raw_breakpoint *bp) -{ - int bp; - unsigned long bp_ctrl; - unsigned long start, end; - struct regcache *regcache; - unsigned long bp_d_regs[12]; - - regcache = get_thread_regcache (current_thread, 1); - - /* Read watchpoints are set as access watchpoints, because of GDB's - inability to deal with pure read watchpoints. */ - if (type == raw_bkpt_type_read_wp) - type = raw_bkpt_type_access_wp; - - /* Get the configuration register. */ - collect_register_by_name (regcache, "s0", &bp_ctrl); - - /* Try to find a watchpoint that is configured for the - specified range, then check that read/write also matches. */ - - /* Ugly pointer arithmetic, since I cannot rely on a - single switch (addr) as there may be several watchpoints with - the same start address for example. */ - - /* Get all range registers to simplify search. */ - collect_register_by_name (regcache, "s3", &bp_d_regs[0]); - collect_register_by_name (regcache, "s4", &bp_d_regs[1]); - collect_register_by_name (regcache, "s5", &bp_d_regs[2]); - collect_register_by_name (regcache, "s6", &bp_d_regs[3]); - collect_register_by_name (regcache, "s7", &bp_d_regs[4]); - collect_register_by_name (regcache, "s8", &bp_d_regs[5]); - collect_register_by_name (regcache, "s9", &bp_d_regs[6]); - collect_register_by_name (regcache, "s10", &bp_d_regs[7]); - collect_register_by_name (regcache, "s11", &bp_d_regs[8]); - collect_register_by_name (regcache, "s12", &bp_d_regs[9]); - collect_register_by_name (regcache, "s13", &bp_d_regs[10]); - collect_register_by_name (regcache, "s14", &bp_d_regs[11]); - - for (bp = 0; bp < 6; bp++) - { - if (bp_d_regs[bp * 2] == addr - && bp_d_regs[bp * 2 + 1] == (addr + len - 1)) { - /* Matching range. */ - int bitpos = 2 + bp * 4; - int rw_bits; - - /* Read/write bits for this BP. */ - rw_bits = (bp_ctrl & (0x3 << bitpos)) >> bitpos; - - if ((type == raw_bkpt_type_read_wp && rw_bits == 0x1) - || (type == raw_bkpt_type_write_wp && rw_bits == 0x2) - || (type == raw_bkpt_type_access_wp && rw_bits == 0x3)) - { - /* Read/write matched. */ - break; - } - } - } - - if (bp > 5) - { - /* No watchpoint matched. */ - return -1; - } - - /* Found a matching watchpoint. Now, deconfigure it by - both disabling read/write in bp_ctrl and zeroing its - start/end addresses. */ - bp_ctrl &= ~(3 << (2 + (bp * 4))); - /* Setup the configuration register. */ - supply_register_by_name (regcache, "s0", &bp_ctrl); - - start = end = 0; - /* Configure the watchpoint register. */ - cris_write_data_breakpoint (regcache, bp, start, end); - - /* Note that we don't clear the S1 flag here. It's done when continuing. */ - return 0; -} - -static int -cris_stopped_by_watchpoint (void) -{ - unsigned long exs; - struct regcache *regcache = get_thread_regcache (current_thread, 1); - - collect_register_by_name (regcache, "exs", &exs); - - return (((exs & 0xff00) >> 8) == 0xc); -} - -static CORE_ADDR -cris_stopped_data_address (void) -{ - unsigned long eda; - struct regcache *regcache = get_thread_regcache (current_thread, 1); - - collect_register_by_name (regcache, "eda", &eda); - - /* FIXME: Possibly adjust to match watched range. */ - return eda; -} - -ps_err_e -ps_get_thread_area (struct ps_prochandle *ph, - lwpid_t lwpid, int idx, void **base) -{ - if (ptrace (PTRACE_GET_THREAD_AREA, lwpid, NULL, base) != 0) - return PS_ERR; - - /* IDX is the bias from the thread pointer to the beginning of the - thread descriptor. It has to be subtracted due to implementation - quirks in libthread_db. */ - *base = (void *) ((char *) *base - idx); - return PS_OK; -} - -static void -cris_fill_gregset (struct regcache *regcache, void *buf) -{ - int i; - - for (i = 0; i < cris_num_regs; i++) - { - if (cris_regmap[i] != -1) - collect_register (regcache, i, ((char *) buf) + cris_regmap[i]); - } -} - -static void -cris_store_gregset (struct regcache *regcache, const void *buf) -{ - int i; - - for (i = 0; i < cris_num_regs; i++) - { - if (cris_regmap[i] != -1) - supply_register (regcache, i, ((char *) buf) + cris_regmap[i]); - } -} - -static void -cris_arch_setup (void) -{ - current_process ()->tdesc = tdesc_crisv32; -} - -/* Support for hardware single step. */ - -static int -cris_supports_hardware_single_step (void) -{ - return 1; -} - -static struct regset_info cris_regsets[] = { - { PTRACE_GETREGS, PTRACE_SETREGS, 0, cris_num_regs * 4, - GENERAL_REGS, cris_fill_gregset, cris_store_gregset }, - NULL_REGSET -}; - - -static struct regsets_info cris_regsets_info = - { - cris_regsets, /* regsets */ - 0, /* num_regsets */ - NULL, /* disabled_regsets */ - }; - -static struct usrregs_info cris_usrregs_info = - { - cris_num_regs, - cris_regmap, - }; - -static struct regs_info regs_info = - { - NULL, /* regset_bitmap */ - &cris_usrregs_info, - &cris_regsets_info - }; - -static const struct regs_info * -cris_regs_info (void) -{ - return ®s_info; -} - -struct linux_target_ops the_low_target = { - cris_arch_setup, - cris_regs_info, - NULL, - NULL, - NULL, /* fetch_register */ - linux_get_pc_32bit, - linux_set_pc_32bit, - NULL, /* breakpoint_kind_from_pc */ - cris_sw_breakpoint_from_kind, - NULL, /* get_next_pcs */ - 0, - cris_breakpoint_at, - cris_supports_z_point_type, - cris_insert_point, - cris_remove_point, - cris_stopped_by_watchpoint, - cris_stopped_data_address, - NULL, /* collect_ptrace_register */ - NULL, /* supply_ptrace_register */ - NULL, /* siginfo_fixup */ - NULL, /* new_process */ - NULL, /* delete_process */ - NULL, /* new_thread */ - NULL, /* delete_thread */ - NULL, /* new_fork */ - NULL, /* prepare_to_resume */ - NULL, /* process_qsupported */ - NULL, /* supports_tracepoints */ - NULL, /* get_thread_area */ - NULL, /* install_fast_tracepoint_jump_pad */ - NULL, /* emit_ops */ - NULL, /* get_min_fast_tracepoint_insn_len */ - NULL, /* supports_range_stepping */ - NULL, /* breakpoint_kind_from_current_state */ - cris_supports_hardware_single_step, -}; - -void -initialize_low_arch (void) -{ - init_registers_crisv32 (); - - initialize_regsets_info (&cris_regsets_info); -} diff -Nru gdb-9.1/gdb/gdbserver/linux-i386-ipa.c gdb-10.2/gdb/gdbserver/linux-i386-ipa.c --- gdb-9.1/gdb/gdbserver/linux-i386-ipa.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/linux-i386-ipa.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,294 +0,0 @@ -/* GNU/Linux/x86 specific low level interface, for the in-process - agent library for GDB. - - Copyright (C) 2010-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "server.h" -#include <sys/mman.h> -#include "tracepoint.h" -#include "linux-x86-tdesc.h" -#include "gdbsupport/x86-xstate.h" - -/* GDB register numbers. */ - -enum i386_gdb_regnum -{ - I386_EAX_REGNUM, /* %eax */ - I386_ECX_REGNUM, /* %ecx */ - I386_EDX_REGNUM, /* %edx */ - I386_EBX_REGNUM, /* %ebx */ - I386_ESP_REGNUM, /* %esp */ - I386_EBP_REGNUM, /* %ebp */ - I386_ESI_REGNUM, /* %esi */ - I386_EDI_REGNUM, /* %edi */ - I386_EIP_REGNUM, /* %eip */ - I386_EFLAGS_REGNUM, /* %eflags */ - I386_CS_REGNUM, /* %cs */ - I386_SS_REGNUM, /* %ss */ - I386_DS_REGNUM, /* %ds */ - I386_ES_REGNUM, /* %es */ - I386_FS_REGNUM, /* %fs */ - I386_GS_REGNUM, /* %gs */ - I386_ST0_REGNUM /* %st(0) */ -}; - -#define i386_num_regs 16 - -#define FT_CR_EAX 15 -#define FT_CR_ECX 14 -#define FT_CR_EDX 13 -#define FT_CR_EBX 12 -#define FT_CR_UESP 11 -#define FT_CR_EBP 10 -#define FT_CR_ESI 9 -#define FT_CR_EDI 8 -#define FT_CR_EIP 7 -#define FT_CR_EFL 6 -#define FT_CR_DS 5 -#define FT_CR_ES 4 -#define FT_CR_FS 3 -#define FT_CR_GS 2 -#define FT_CR_SS 1 -#define FT_CR_CS 0 - -/* Mapping between the general-purpose registers in jump tracepoint - format and GDB's register array layout. */ - -static const int i386_ft_collect_regmap[] = -{ - FT_CR_EAX * 4, FT_CR_ECX * 4, FT_CR_EDX * 4, FT_CR_EBX * 4, - FT_CR_UESP * 4, FT_CR_EBP * 4, FT_CR_ESI * 4, FT_CR_EDI * 4, - FT_CR_EIP * 4, FT_CR_EFL * 4, FT_CR_CS * 4, FT_CR_SS * 4, - FT_CR_DS * 4, FT_CR_ES * 4, FT_CR_FS * 4, FT_CR_GS * 4 -}; - -void -supply_fast_tracepoint_registers (struct regcache *regcache, - const unsigned char *buf) -{ - int i; - - for (i = 0; i < i386_num_regs; i++) - { - int regval; - - if (i >= I386_CS_REGNUM && i <= I386_GS_REGNUM) - regval = *(short *) (((char *) buf) + i386_ft_collect_regmap[i]); - else - regval = *(int *) (((char *) buf) + i386_ft_collect_regmap[i]); - - supply_register (regcache, i, ®val); - } -} - -ULONGEST -get_raw_reg (const unsigned char *raw_regs, int regnum) -{ - /* This should maybe be allowed to return an error code, or perhaps - better, have the emit_reg detect this, and emit a constant zero, - or something. */ - - if (regnum > i386_num_regs) - return 0; - else if (regnum >= I386_CS_REGNUM && regnum <= I386_GS_REGNUM) - return *(short *) (raw_regs + i386_ft_collect_regmap[regnum]); - else - return *(int *) (raw_regs + i386_ft_collect_regmap[regnum]); -} - -#ifdef HAVE_UST - -#include <ust/processor.h> - -/* "struct registers" is the UST object type holding the registers at - the time of the static tracepoint marker call. This doesn't - contain EIP, but we know what it must have been (the marker - address). */ - -#define ST_REGENTRY(REG) \ - { \ - offsetof (struct registers, REG), \ - sizeof (((struct registers *) NULL)->REG) \ - } - -static struct -{ - int offset; - int size; -} i386_st_collect_regmap[] = - { - ST_REGENTRY(eax), - ST_REGENTRY(ecx), - ST_REGENTRY(edx), - ST_REGENTRY(ebx), - ST_REGENTRY(esp), - ST_REGENTRY(ebp), - ST_REGENTRY(esi), - ST_REGENTRY(edi), - { -1, 0 }, /* eip */ - ST_REGENTRY(eflags), - ST_REGENTRY(cs), - ST_REGENTRY(ss), - }; - -#define i386_NUM_ST_COLLECT_GREGS \ - (sizeof (i386_st_collect_regmap) / sizeof (i386_st_collect_regmap[0])) - -void -supply_static_tracepoint_registers (struct regcache *regcache, - const unsigned char *buf, - CORE_ADDR pc) -{ - int i; - unsigned int newpc = pc; - - supply_register (regcache, I386_EIP_REGNUM, &newpc); - - for (i = 0; i < i386_NUM_ST_COLLECT_GREGS; i++) - if (i386_st_collect_regmap[i].offset != -1) - { - switch (i386_st_collect_regmap[i].size) - { - case 4: - supply_register (regcache, i, - ((char *) buf) - + i386_st_collect_regmap[i].offset); - break; - case 2: - { - unsigned long reg - = * (short *) (((char *) buf) - + i386_st_collect_regmap[i].offset); - reg &= 0xffff; - supply_register (regcache, i, ®); - } - break; - default: - internal_error (__FILE__, __LINE__, "unhandled register size: %d", - i386_st_collect_regmap[i].size); - } - } -} - -#endif /* HAVE_UST */ - - -/* This is only needed because reg-i386-linux-lib.o references it. We - may use it proper at some point. */ -const char *gdbserver_xmltarget; - -/* Attempt to allocate memory for trampolines in the first 64 KiB of - memory to enable smaller jump patches. */ - -static void -initialize_fast_tracepoint_trampoline_buffer (void) -{ - const CORE_ADDR buffer_end = 64 * 1024; - /* Ensure that the buffer will be at least 1 KiB in size, which is - enough space for over 200 fast tracepoints. */ - const int min_buffer_size = 1024; - char buf[IPA_BUFSIZ]; - CORE_ADDR mmap_min_addr = buffer_end + 1; - ULONGEST buffer_size; - FILE *f = fopen ("/proc/sys/vm/mmap_min_addr", "r"); - - if (!f) - { - snprintf (buf, sizeof (buf), "mmap_min_addr open failed: %s", - safe_strerror (errno)); - set_trampoline_buffer_space (0, 0, buf); - return; - } - - if (fgets (buf, IPA_BUFSIZ, f)) - sscanf (buf, "%llu", &mmap_min_addr); - - fclose (f); - - buffer_size = buffer_end - mmap_min_addr; - - if (buffer_size >= min_buffer_size) - { - if (mmap ((void *) (uintptr_t) mmap_min_addr, buffer_size, - PROT_READ | PROT_EXEC | PROT_WRITE, - MAP_FIXED | MAP_PRIVATE | MAP_ANONYMOUS, - -1, 0) - != MAP_FAILED) - set_trampoline_buffer_space (mmap_min_addr, buffer_end, NULL); - else - { - snprintf (buf, IPA_BUFSIZ, "low-64K-buffer mmap() failed: %s", - safe_strerror (errno)); - set_trampoline_buffer_space (0, 0, buf); - } - } - else - { - snprintf (buf, IPA_BUFSIZ, "mmap_min_addr is %d, must be %d or less", - (int) mmap_min_addr, (int) buffer_end - min_buffer_size); - set_trampoline_buffer_space (0, 0, buf); - } -} - -/* Map the tdesc index to xcr0 mask. */ -static uint64_t idx2mask[X86_TDESC_LAST] = { - X86_XSTATE_X87_MASK, - X86_XSTATE_SSE_MASK, - X86_XSTATE_AVX_MASK, - X86_XSTATE_MPX_MASK, - X86_XSTATE_AVX_MPX_MASK, - X86_XSTATE_AVX_AVX512_MASK, - X86_XSTATE_AVX_MPX_AVX512_PKU_MASK, -}; - -/* Return target_desc to use for IPA, given the tdesc index passed by - gdbserver. */ - -const struct target_desc * -get_ipa_tdesc (int idx) -{ - if (idx >= X86_TDESC_LAST) - { - internal_error (__FILE__, __LINE__, - "unknown ipa tdesc index: %d", idx); - } - return i386_linux_read_description (idx2mask[idx]); -} - -/* Allocate buffer for the jump pads. On i386, we can reach an arbitrary - address with a jump instruction, so just allocate normally. */ - -void * -alloc_jump_pad_buffer (size_t size) -{ - void *res = mmap (NULL, size, PROT_READ | PROT_WRITE | PROT_EXEC, - MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); - - if (res == MAP_FAILED) - return NULL; - - return res; -} - -void -initialize_low_tracepoint (void) -{ - initialize_fast_tracepoint_trampoline_buffer (); - for (auto i = 0; i < X86_TDESC_LAST; i++) - i386_linux_read_description (idx2mask[i]); -} diff -Nru gdb-9.1/gdb/gdbserver/linux-ia64-low.c gdb-10.2/gdb/gdbserver/linux-ia64-low.c --- gdb-9.1/gdb/gdbserver/linux-ia64-low.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/linux-ia64-low.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,360 +0,0 @@ -/* GNU/Linux/IA64 specific low level interface, for the remote server for GDB. - Copyright (C) 1995-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "server.h" -#include "linux-low.h" - -#ifdef HAVE_SYS_REG_H -#include <sys/reg.h> -#endif - -/* Defined in auto-generated file reg-ia64.c. */ -void init_registers_ia64 (void); -extern const struct target_desc *tdesc_ia64; - -#define ia64_num_regs 462 - -#include <asm/ptrace_offsets.h> - -static int ia64_regmap[] = - { - /* general registers */ - -1, /* gr0 not available; i.e, it's always zero */ - PT_R1, - PT_R2, - PT_R3, - PT_R4, - PT_R5, - PT_R6, - PT_R7, - PT_R8, - PT_R9, - PT_R10, - PT_R11, - PT_R12, - PT_R13, - PT_R14, - PT_R15, - PT_R16, - PT_R17, - PT_R18, - PT_R19, - PT_R20, - PT_R21, - PT_R22, - PT_R23, - PT_R24, - PT_R25, - PT_R26, - PT_R27, - PT_R28, - PT_R29, - PT_R30, - PT_R31, - /* gr32 through gr127 not directly available via the ptrace interface */ - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - /* Floating point registers */ - -1, -1, /* f0 and f1 not available (f0 is +0.0 and f1 is +1.0) */ - PT_F2, - PT_F3, - PT_F4, - PT_F5, - PT_F6, - PT_F7, - PT_F8, - PT_F9, - PT_F10, - PT_F11, - PT_F12, - PT_F13, - PT_F14, - PT_F15, - PT_F16, - PT_F17, - PT_F18, - PT_F19, - PT_F20, - PT_F21, - PT_F22, - PT_F23, - PT_F24, - PT_F25, - PT_F26, - PT_F27, - PT_F28, - PT_F29, - PT_F30, - PT_F31, - PT_F32, - PT_F33, - PT_F34, - PT_F35, - PT_F36, - PT_F37, - PT_F38, - PT_F39, - PT_F40, - PT_F41, - PT_F42, - PT_F43, - PT_F44, - PT_F45, - PT_F46, - PT_F47, - PT_F48, - PT_F49, - PT_F50, - PT_F51, - PT_F52, - PT_F53, - PT_F54, - PT_F55, - PT_F56, - PT_F57, - PT_F58, - PT_F59, - PT_F60, - PT_F61, - PT_F62, - PT_F63, - PT_F64, - PT_F65, - PT_F66, - PT_F67, - PT_F68, - PT_F69, - PT_F70, - PT_F71, - PT_F72, - PT_F73, - PT_F74, - PT_F75, - PT_F76, - PT_F77, - PT_F78, - PT_F79, - PT_F80, - PT_F81, - PT_F82, - PT_F83, - PT_F84, - PT_F85, - PT_F86, - PT_F87, - PT_F88, - PT_F89, - PT_F90, - PT_F91, - PT_F92, - PT_F93, - PT_F94, - PT_F95, - PT_F96, - PT_F97, - PT_F98, - PT_F99, - PT_F100, - PT_F101, - PT_F102, - PT_F103, - PT_F104, - PT_F105, - PT_F106, - PT_F107, - PT_F108, - PT_F109, - PT_F110, - PT_F111, - PT_F112, - PT_F113, - PT_F114, - PT_F115, - PT_F116, - PT_F117, - PT_F118, - PT_F119, - PT_F120, - PT_F121, - PT_F122, - PT_F123, - PT_F124, - PT_F125, - PT_F126, - PT_F127, - /* predicate registers - we don't fetch these individually */ - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - /* branch registers */ - PT_B0, - PT_B1, - PT_B2, - PT_B3, - PT_B4, - PT_B5, - PT_B6, - PT_B7, - /* virtual frame pointer and virtual return address pointer */ - -1, -1, - /* other registers */ - PT_PR, - PT_CR_IIP, /* ip */ - PT_CR_IPSR, /* psr */ - PT_CFM, /* cfm */ - /* kernel registers not visible via ptrace interface (?) */ - -1, -1, -1, -1, -1, -1, -1, -1, - /* hole */ - -1, -1, -1, -1, -1, -1, -1, -1, - PT_AR_RSC, - PT_AR_BSP, - PT_AR_BSPSTORE, - PT_AR_RNAT, - -1, - -1, /* Not available: FCR, IA32 floating control register */ - -1, -1, - -1, /* Not available: EFLAG */ - -1, /* Not available: CSD */ - -1, /* Not available: SSD */ - -1, /* Not available: CFLG */ - -1, /* Not available: FSR */ - -1, /* Not available: FIR */ - -1, /* Not available: FDR */ - -1, - PT_AR_CCV, - -1, -1, -1, - PT_AR_UNAT, - -1, -1, -1, - PT_AR_FPSR, - -1, -1, -1, - -1, /* Not available: ITC */ - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, - PT_AR_PFS, - PT_AR_LC, - PT_AR_EC, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, - }; - -static int -ia64_cannot_store_register (int regno) -{ - return 0; -} - -static int -ia64_cannot_fetch_register (int regno) -{ - return 0; -} - -/* GDB register numbers. */ -#define IA64_GR0_REGNUM 0 -#define IA64_FR0_REGNUM 128 -#define IA64_FR1_REGNUM 129 - -static int -ia64_fetch_register (struct regcache *regcache, int regnum) -{ - /* r0 cannot be fetched but is always zero. */ - if (regnum == IA64_GR0_REGNUM) - { - const gdb_byte zero[8] = { 0 }; - - gdb_assert (sizeof (zero) == register_size (regcache->tdesc, regnum)); - supply_register (regcache, regnum, zero); - return 1; - } - - /* fr0 cannot be fetched but is always zero. */ - if (regnum == IA64_FR0_REGNUM) - { - const gdb_byte f_zero[16] = { 0 }; - - gdb_assert (sizeof (f_zero) == register_size (regcache->tdesc, regnum)); - supply_register (regcache, regnum, f_zero); - return 1; - } - - /* fr1 cannot be fetched but is always one (1.0). */ - if (regnum == IA64_FR1_REGNUM) - { - const gdb_byte f_one[16] = - { 0, 0, 0, 0, 0, 0, 0, 0x80, 0xff, 0xff, 0, 0, 0, 0, 0, 0 }; - - gdb_assert (sizeof (f_one) == register_size (regcache->tdesc, regnum)); - supply_register (regcache, regnum, f_one); - return 1; - } - - return 0; -} - -static struct usrregs_info ia64_usrregs_info = - { - ia64_num_regs, - ia64_regmap, - }; - -static struct regs_info regs_info = - { - NULL, /* regset_bitmap */ - &ia64_usrregs_info - }; - -static const struct regs_info * -ia64_regs_info (void) -{ - return ®s_info; -} - -static void -ia64_arch_setup (void) -{ - current_process ()->tdesc = tdesc_ia64; -} - - -struct linux_target_ops the_low_target = { - ia64_arch_setup, - ia64_regs_info, - ia64_cannot_fetch_register, - ia64_cannot_store_register, - ia64_fetch_register, -}; - -void -initialize_low_arch (void) -{ - init_registers_ia64 (); -} diff -Nru gdb-9.1/gdb/gdbserver/linux-low.c gdb-10.2/gdb/gdbserver/linux-low.c --- gdb-9.1/gdb/gdbserver/linux-low.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/linux-low.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,7492 +0,0 @@ -/* Low level interface to ptrace, for the remote server for GDB. - Copyright (C) 1995-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "server.h" -#include "linux-low.h" -#include "nat/linux-osdata.h" -#include "gdbsupport/agent.h" -#include "tdesc.h" -#include "gdbsupport/rsp-low.h" -#include "gdbsupport/signals-state-save-restore.h" -#include "nat/linux-nat.h" -#include "nat/linux-waitpid.h" -#include "gdbsupport/gdb_wait.h" -#include "nat/gdb_ptrace.h" -#include "nat/linux-ptrace.h" -#include "nat/linux-procfs.h" -#include "nat/linux-personality.h" -#include <signal.h> -#include <sys/ioctl.h> -#include <fcntl.h> -#include <unistd.h> -#include <sys/syscall.h> -#include <sched.h> -#include <ctype.h> -#include <pwd.h> -#include <sys/types.h> -#include <dirent.h> -#include <sys/stat.h> -#include <sys/vfs.h> -#include <sys/uio.h> -#include "gdbsupport/filestuff.h" -#include "tracepoint.h" -#include "hostio.h" -#include <inttypes.h> -#include "gdbsupport/common-inferior.h" -#include "nat/fork-inferior.h" -#include "gdbsupport/environ.h" -#include "gdbsupport/gdb-sigmask.h" -#include "gdbsupport/scoped_restore.h" -#ifndef ELFMAG0 -/* Don't include <linux/elf.h> here. If it got included by gdb_proc_service.h - then ELFMAG0 will have been defined. If it didn't get included by - gdb_proc_service.h then including it will likely introduce a duplicate - definition of elf_fpregset_t. */ -#include <elf.h> -#endif -#include "nat/linux-namespaces.h" - -#ifdef HAVE_PERSONALITY -# include <sys/personality.h> -# if !HAVE_DECL_ADDR_NO_RANDOMIZE -# define ADDR_NO_RANDOMIZE 0x0040000 -# endif -#endif - -#ifndef O_LARGEFILE -#define O_LARGEFILE 0 -#endif - -#ifndef AT_HWCAP2 -#define AT_HWCAP2 26 -#endif - -/* Some targets did not define these ptrace constants from the start, - so gdbserver defines them locally here. In the future, these may - be removed after they are added to asm/ptrace.h. */ -#if !(defined(PT_TEXT_ADDR) \ - || defined(PT_DATA_ADDR) \ - || defined(PT_TEXT_END_ADDR)) -#if defined(__mcoldfire__) -/* These are still undefined in 3.10 kernels. */ -#define PT_TEXT_ADDR 49*4 -#define PT_DATA_ADDR 50*4 -#define PT_TEXT_END_ADDR 51*4 -/* BFIN already defines these since at least 2.6.32 kernels. */ -#elif defined(BFIN) -#define PT_TEXT_ADDR 220 -#define PT_TEXT_END_ADDR 224 -#define PT_DATA_ADDR 228 -/* These are still undefined in 3.10 kernels. */ -#elif defined(__TMS320C6X__) -#define PT_TEXT_ADDR (0x10000*4) -#define PT_DATA_ADDR (0x10004*4) -#define PT_TEXT_END_ADDR (0x10008*4) -#endif -#endif - -#ifdef HAVE_LINUX_BTRACE -# include "nat/linux-btrace.h" -# include "gdbsupport/btrace-common.h" -#endif - -#ifndef HAVE_ELF32_AUXV_T -/* Copied from glibc's elf.h. */ -typedef struct -{ - uint32_t a_type; /* Entry type */ - union - { - uint32_t a_val; /* Integer value */ - /* We use to have pointer elements added here. We cannot do that, - though, since it does not work when using 32-bit definitions - on 64-bit platforms and vice versa. */ - } a_un; -} Elf32_auxv_t; -#endif - -#ifndef HAVE_ELF64_AUXV_T -/* Copied from glibc's elf.h. */ -typedef struct -{ - uint64_t a_type; /* Entry type */ - union - { - uint64_t a_val; /* Integer value */ - /* We use to have pointer elements added here. We cannot do that, - though, since it does not work when using 32-bit definitions - on 64-bit platforms and vice versa. */ - } a_un; -} Elf64_auxv_t; -#endif - -/* Does the current host support PTRACE_GETREGSET? */ -int have_ptrace_getregset = -1; - -/* LWP accessors. */ - -/* See nat/linux-nat.h. */ - -ptid_t -ptid_of_lwp (struct lwp_info *lwp) -{ - return ptid_of (get_lwp_thread (lwp)); -} - -/* See nat/linux-nat.h. */ - -void -lwp_set_arch_private_info (struct lwp_info *lwp, - struct arch_lwp_info *info) -{ - lwp->arch_private = info; -} - -/* See nat/linux-nat.h. */ - -struct arch_lwp_info * -lwp_arch_private_info (struct lwp_info *lwp) -{ - return lwp->arch_private; -} - -/* See nat/linux-nat.h. */ - -int -lwp_is_stopped (struct lwp_info *lwp) -{ - return lwp->stopped; -} - -/* See nat/linux-nat.h. */ - -enum target_stop_reason -lwp_stop_reason (struct lwp_info *lwp) -{ - return lwp->stop_reason; -} - -/* See nat/linux-nat.h. */ - -int -lwp_is_stepping (struct lwp_info *lwp) -{ - return lwp->stepping; -} - -/* A list of all unknown processes which receive stop signals. Some - other process will presumably claim each of these as forked - children momentarily. */ - -struct simple_pid_list -{ - /* The process ID. */ - int pid; - - /* The status as reported by waitpid. */ - int status; - - /* Next in chain. */ - struct simple_pid_list *next; -}; -struct simple_pid_list *stopped_pids; - -/* Trivial list manipulation functions to keep track of a list of new - stopped processes. */ - -static void -add_to_pid_list (struct simple_pid_list **listp, int pid, int status) -{ - struct simple_pid_list *new_pid = XNEW (struct simple_pid_list); - - new_pid->pid = pid; - new_pid->status = status; - new_pid->next = *listp; - *listp = new_pid; -} - -static int -pull_pid_from_list (struct simple_pid_list **listp, int pid, int *statusp) -{ - struct simple_pid_list **p; - - for (p = listp; *p != NULL; p = &(*p)->next) - if ((*p)->pid == pid) - { - struct simple_pid_list *next = (*p)->next; - - *statusp = (*p)->status; - xfree (*p); - *p = next; - return 1; - } - return 0; -} - -enum stopping_threads_kind - { - /* Not stopping threads presently. */ - NOT_STOPPING_THREADS, - - /* Stopping threads. */ - STOPPING_THREADS, - - /* Stopping and suspending threads. */ - STOPPING_AND_SUSPENDING_THREADS - }; - -/* This is set while stop_all_lwps is in effect. */ -enum stopping_threads_kind stopping_threads = NOT_STOPPING_THREADS; - -/* FIXME make into a target method? */ -int using_threads = 1; - -/* True if we're presently stabilizing threads (moving them out of - jump pads). */ -static int stabilizing_threads; - -static void linux_resume_one_lwp (struct lwp_info *lwp, - int step, int signal, siginfo_t *info); -static void linux_resume (struct thread_resume *resume_info, size_t n); -static void stop_all_lwps (int suspend, struct lwp_info *except); -static void unstop_all_lwps (int unsuspend, struct lwp_info *except); -static void unsuspend_all_lwps (struct lwp_info *except); -static int linux_wait_for_event_filtered (ptid_t wait_ptid, ptid_t filter_ptid, - int *wstat, int options); -static int linux_wait_for_event (ptid_t ptid, int *wstat, int options); -static struct lwp_info *add_lwp (ptid_t ptid); -static void linux_mourn (struct process_info *process); -static int linux_stopped_by_watchpoint (void); -static void mark_lwp_dead (struct lwp_info *lwp, int wstat); -static int lwp_is_marked_dead (struct lwp_info *lwp); -static void proceed_all_lwps (void); -static int finish_step_over (struct lwp_info *lwp); -static int kill_lwp (unsigned long lwpid, int signo); -static void enqueue_pending_signal (struct lwp_info *lwp, int signal, siginfo_t *info); -static void complete_ongoing_step_over (void); -static int linux_low_ptrace_options (int attached); -static int check_ptrace_stopped_lwp_gone (struct lwp_info *lp); -static void proceed_one_lwp (thread_info *thread, lwp_info *except); - -/* When the event-loop is doing a step-over, this points at the thread - being stepped. */ -ptid_t step_over_bkpt; - -/* True if the low target can hardware single-step. */ - -static int -can_hardware_single_step (void) -{ - if (the_low_target.supports_hardware_single_step != NULL) - return the_low_target.supports_hardware_single_step (); - else - return 0; -} - -/* True if the low target can software single-step. Such targets - implement the GET_NEXT_PCS callback. */ - -static int -can_software_single_step (void) -{ - return (the_low_target.get_next_pcs != NULL); -} - -/* True if the low target supports memory breakpoints. If so, we'll - have a GET_PC implementation. */ - -static int -supports_breakpoints (void) -{ - return (the_low_target.get_pc != NULL); -} - -/* Returns true if this target can support fast tracepoints. This - does not mean that the in-process agent has been loaded in the - inferior. */ - -static int -supports_fast_tracepoints (void) -{ - return the_low_target.install_fast_tracepoint_jump_pad != NULL; -} - -/* True if LWP is stopped in its stepping range. */ - -static int -lwp_in_step_range (struct lwp_info *lwp) -{ - CORE_ADDR pc = lwp->stop_pc; - - return (pc >= lwp->step_range_start && pc < lwp->step_range_end); -} - -struct pending_signals -{ - int signal; - siginfo_t info; - struct pending_signals *prev; -}; - -/* The read/write ends of the pipe registered as waitable file in the - event loop. */ -static int linux_event_pipe[2] = { -1, -1 }; - -/* True if we're currently in async mode. */ -#define target_is_async_p() (linux_event_pipe[0] != -1) - -static void send_sigstop (struct lwp_info *lwp); -static void wait_for_sigstop (void); - -/* Return non-zero if HEADER is a 64-bit ELF file. */ - -static int -elf_64_header_p (const Elf64_Ehdr *header, unsigned int *machine) -{ - if (header->e_ident[EI_MAG0] == ELFMAG0 - && header->e_ident[EI_MAG1] == ELFMAG1 - && header->e_ident[EI_MAG2] == ELFMAG2 - && header->e_ident[EI_MAG3] == ELFMAG3) - { - *machine = header->e_machine; - return header->e_ident[EI_CLASS] == ELFCLASS64; - - } - *machine = EM_NONE; - return -1; -} - -/* Return non-zero if FILE is a 64-bit ELF file, - zero if the file is not a 64-bit ELF file, - and -1 if the file is not accessible or doesn't exist. */ - -static int -elf_64_file_p (const char *file, unsigned int *machine) -{ - Elf64_Ehdr header; - int fd; - - fd = open (file, O_RDONLY); - if (fd < 0) - return -1; - - if (read (fd, &header, sizeof (header)) != sizeof (header)) - { - close (fd); - return 0; - } - close (fd); - - return elf_64_header_p (&header, machine); -} - -/* Accepts an integer PID; Returns true if the executable PID is - running is a 64-bit ELF file.. */ - -int -linux_pid_exe_is_elf_64_file (int pid, unsigned int *machine) -{ - char file[PATH_MAX]; - - sprintf (file, "/proc/%d/exe", pid); - return elf_64_file_p (file, machine); -} - -static void -delete_lwp (struct lwp_info *lwp) -{ - struct thread_info *thr = get_lwp_thread (lwp); - - if (debug_threads) - debug_printf ("deleting %ld\n", lwpid_of (thr)); - - remove_thread (thr); - - if (the_low_target.delete_thread != NULL) - the_low_target.delete_thread (lwp->arch_private); - else - gdb_assert (lwp->arch_private == NULL); - - free (lwp); -} - -/* Add a process to the common process list, and set its private - data. */ - -static struct process_info * -linux_add_process (int pid, int attached) -{ - struct process_info *proc; - - proc = add_process (pid, attached); - proc->priv = XCNEW (struct process_info_private); - - if (the_low_target.new_process != NULL) - proc->priv->arch_private = the_low_target.new_process (); - - return proc; -} - -static CORE_ADDR get_pc (struct lwp_info *lwp); - -/* Call the target arch_setup function on the current thread. */ - -static void -linux_arch_setup (void) -{ - the_low_target.arch_setup (); -} - -/* Call the target arch_setup function on THREAD. */ - -static void -linux_arch_setup_thread (struct thread_info *thread) -{ - struct thread_info *saved_thread; - - saved_thread = current_thread; - current_thread = thread; - - linux_arch_setup (); - - current_thread = saved_thread; -} - -/* Handle a GNU/Linux extended wait response. If we see a clone, - fork, or vfork event, we need to add the new LWP to our list - (and return 0 so as not to report the trap to higher layers). - If we see an exec event, we will modify ORIG_EVENT_LWP to point - to a new LWP representing the new program. */ - -static int -handle_extended_wait (struct lwp_info **orig_event_lwp, int wstat) -{ - client_state &cs = get_client_state (); - struct lwp_info *event_lwp = *orig_event_lwp; - int event = linux_ptrace_get_extended_event (wstat); - struct thread_info *event_thr = get_lwp_thread (event_lwp); - struct lwp_info *new_lwp; - - gdb_assert (event_lwp->waitstatus.kind == TARGET_WAITKIND_IGNORE); - - /* All extended events we currently use are mid-syscall. Only - PTRACE_EVENT_STOP is delivered more like a signal-stop, but - you have to be using PTRACE_SEIZE to get that. */ - event_lwp->syscall_state = TARGET_WAITKIND_SYSCALL_ENTRY; - - if ((event == PTRACE_EVENT_FORK) || (event == PTRACE_EVENT_VFORK) - || (event == PTRACE_EVENT_CLONE)) - { - ptid_t ptid; - unsigned long new_pid; - int ret, status; - - /* Get the pid of the new lwp. */ - ptrace (PTRACE_GETEVENTMSG, lwpid_of (event_thr), (PTRACE_TYPE_ARG3) 0, - &new_pid); - - /* If we haven't already seen the new PID stop, wait for it now. */ - if (!pull_pid_from_list (&stopped_pids, new_pid, &status)) - { - /* The new child has a pending SIGSTOP. We can't affect it until it - hits the SIGSTOP, but we're already attached. */ - - ret = my_waitpid (new_pid, &status, __WALL); - - if (ret == -1) - perror_with_name ("waiting for new child"); - else if (ret != new_pid) - warning ("wait returned unexpected PID %d", ret); - else if (!WIFSTOPPED (status)) - warning ("wait returned unexpected status 0x%x", status); - } - - if (event == PTRACE_EVENT_FORK || event == PTRACE_EVENT_VFORK) - { - struct process_info *parent_proc; - struct process_info *child_proc; - struct lwp_info *child_lwp; - struct thread_info *child_thr; - struct target_desc *tdesc; - - ptid = ptid_t (new_pid, new_pid, 0); - - if (debug_threads) - { - debug_printf ("HEW: Got fork event from LWP %ld, " - "new child is %d\n", - ptid_of (event_thr).lwp (), - ptid.pid ()); - } - - /* Add the new process to the tables and clone the breakpoint - lists of the parent. We need to do this even if the new process - will be detached, since we will need the process object and the - breakpoints to remove any breakpoints from memory when we - detach, and the client side will access registers. */ - child_proc = linux_add_process (new_pid, 0); - gdb_assert (child_proc != NULL); - child_lwp = add_lwp (ptid); - gdb_assert (child_lwp != NULL); - child_lwp->stopped = 1; - child_lwp->must_set_ptrace_flags = 1; - child_lwp->status_pending_p = 0; - child_thr = get_lwp_thread (child_lwp); - child_thr->last_resume_kind = resume_stop; - child_thr->last_status.kind = TARGET_WAITKIND_STOPPED; - - /* If we're suspending all threads, leave this one suspended - too. If the fork/clone parent is stepping over a breakpoint, - all other threads have been suspended already. Leave the - child suspended too. */ - if (stopping_threads == STOPPING_AND_SUSPENDING_THREADS - || event_lwp->bp_reinsert != 0) - { - if (debug_threads) - debug_printf ("HEW: leaving child suspended\n"); - child_lwp->suspended = 1; - } - - parent_proc = get_thread_process (event_thr); - child_proc->attached = parent_proc->attached; - - if (event_lwp->bp_reinsert != 0 - && can_software_single_step () - && event == PTRACE_EVENT_VFORK) - { - /* If we leave single-step breakpoints there, child will - hit it, so uninsert single-step breakpoints from parent - (and child). Once vfork child is done, reinsert - them back to parent. */ - uninsert_single_step_breakpoints (event_thr); - } - - clone_all_breakpoints (child_thr, event_thr); - - tdesc = allocate_target_description (); - copy_target_description (tdesc, parent_proc->tdesc); - child_proc->tdesc = tdesc; - - /* Clone arch-specific process data. */ - if (the_low_target.new_fork != NULL) - the_low_target.new_fork (parent_proc, child_proc); - - /* Save fork info in the parent thread. */ - if (event == PTRACE_EVENT_FORK) - event_lwp->waitstatus.kind = TARGET_WAITKIND_FORKED; - else if (event == PTRACE_EVENT_VFORK) - event_lwp->waitstatus.kind = TARGET_WAITKIND_VFORKED; - - event_lwp->waitstatus.value.related_pid = ptid; - - /* The status_pending field contains bits denoting the - extended event, so when the pending event is handled, - the handler will look at lwp->waitstatus. */ - event_lwp->status_pending_p = 1; - event_lwp->status_pending = wstat; - - /* Link the threads until the parent event is passed on to - higher layers. */ - event_lwp->fork_relative = child_lwp; - child_lwp->fork_relative = event_lwp; - - /* If the parent thread is doing step-over with single-step - breakpoints, the list of single-step breakpoints are cloned - from the parent's. Remove them from the child process. - In case of vfork, we'll reinsert them back once vforked - child is done. */ - if (event_lwp->bp_reinsert != 0 - && can_software_single_step ()) - { - /* The child process is forked and stopped, so it is safe - to access its memory without stopping all other threads - from other processes. */ - delete_single_step_breakpoints (child_thr); - - gdb_assert (has_single_step_breakpoints (event_thr)); - gdb_assert (!has_single_step_breakpoints (child_thr)); - } - - /* Report the event. */ - return 0; - } - - if (debug_threads) - debug_printf ("HEW: Got clone event " - "from LWP %ld, new child is LWP %ld\n", - lwpid_of (event_thr), new_pid); - - ptid = ptid_t (pid_of (event_thr), new_pid, 0); - new_lwp = add_lwp (ptid); - - /* Either we're going to immediately resume the new thread - or leave it stopped. linux_resume_one_lwp is a nop if it - thinks the thread is currently running, so set this first - before calling linux_resume_one_lwp. */ - new_lwp->stopped = 1; - - /* If we're suspending all threads, leave this one suspended - too. If the fork/clone parent is stepping over a breakpoint, - all other threads have been suspended already. Leave the - child suspended too. */ - if (stopping_threads == STOPPING_AND_SUSPENDING_THREADS - || event_lwp->bp_reinsert != 0) - new_lwp->suspended = 1; - - /* Normally we will get the pending SIGSTOP. But in some cases - we might get another signal delivered to the group first. - If we do get another signal, be sure not to lose it. */ - if (WSTOPSIG (status) != SIGSTOP) - { - new_lwp->stop_expected = 1; - new_lwp->status_pending_p = 1; - new_lwp->status_pending = status; - } - else if (cs.report_thread_events) - { - new_lwp->waitstatus.kind = TARGET_WAITKIND_THREAD_CREATED; - new_lwp->status_pending_p = 1; - new_lwp->status_pending = status; - } - -#ifdef USE_THREAD_DB - thread_db_notice_clone (event_thr, ptid); -#endif - - /* Don't report the event. */ - return 1; - } - else if (event == PTRACE_EVENT_VFORK_DONE) - { - event_lwp->waitstatus.kind = TARGET_WAITKIND_VFORK_DONE; - - if (event_lwp->bp_reinsert != 0 && can_software_single_step ()) - { - reinsert_single_step_breakpoints (event_thr); - - gdb_assert (has_single_step_breakpoints (event_thr)); - } - - /* Report the event. */ - return 0; - } - else if (event == PTRACE_EVENT_EXEC && cs.report_exec_events) - { - struct process_info *proc; - std::vector<int> syscalls_to_catch; - ptid_t event_ptid; - pid_t event_pid; - - if (debug_threads) - { - debug_printf ("HEW: Got exec event from LWP %ld\n", - lwpid_of (event_thr)); - } - - /* Get the event ptid. */ - event_ptid = ptid_of (event_thr); - event_pid = event_ptid.pid (); - - /* Save the syscall list from the execing process. */ - proc = get_thread_process (event_thr); - syscalls_to_catch = std::move (proc->syscalls_to_catch); - - /* Delete the execing process and all its threads. */ - linux_mourn (proc); - current_thread = NULL; - - /* Create a new process/lwp/thread. */ - proc = linux_add_process (event_pid, 0); - event_lwp = add_lwp (event_ptid); - event_thr = get_lwp_thread (event_lwp); - gdb_assert (current_thread == event_thr); - linux_arch_setup_thread (event_thr); - - /* Set the event status. */ - event_lwp->waitstatus.kind = TARGET_WAITKIND_EXECD; - event_lwp->waitstatus.value.execd_pathname - = xstrdup (linux_proc_pid_to_exec_file (lwpid_of (event_thr))); - - /* Mark the exec status as pending. */ - event_lwp->stopped = 1; - event_lwp->status_pending_p = 1; - event_lwp->status_pending = wstat; - event_thr->last_resume_kind = resume_continue; - event_thr->last_status.kind = TARGET_WAITKIND_IGNORE; - - /* Update syscall state in the new lwp, effectively mid-syscall too. */ - event_lwp->syscall_state = TARGET_WAITKIND_SYSCALL_ENTRY; - - /* Restore the list to catch. Don't rely on the client, which is free - to avoid sending a new list when the architecture doesn't change. - Also, for ANY_SYSCALL, the architecture doesn't really matter. */ - proc->syscalls_to_catch = std::move (syscalls_to_catch); - - /* Report the event. */ - *orig_event_lwp = event_lwp; - return 0; - } - - internal_error (__FILE__, __LINE__, _("unknown ptrace event %d"), event); -} - -/* Return the PC as read from the regcache of LWP, without any - adjustment. */ - -static CORE_ADDR -get_pc (struct lwp_info *lwp) -{ - struct thread_info *saved_thread; - struct regcache *regcache; - CORE_ADDR pc; - - if (the_low_target.get_pc == NULL) - return 0; - - saved_thread = current_thread; - current_thread = get_lwp_thread (lwp); - - regcache = get_thread_regcache (current_thread, 1); - pc = (*the_low_target.get_pc) (regcache); - - if (debug_threads) - debug_printf ("pc is 0x%lx\n", (long) pc); - - current_thread = saved_thread; - return pc; -} - -/* This function should only be called if LWP got a SYSCALL_SIGTRAP. - Fill *SYSNO with the syscall nr trapped. */ - -static void -get_syscall_trapinfo (struct lwp_info *lwp, int *sysno) -{ - struct thread_info *saved_thread; - struct regcache *regcache; - - if (the_low_target.get_syscall_trapinfo == NULL) - { - /* If we cannot get the syscall trapinfo, report an unknown - system call number. */ - *sysno = UNKNOWN_SYSCALL; - return; - } - - saved_thread = current_thread; - current_thread = get_lwp_thread (lwp); - - regcache = get_thread_regcache (current_thread, 1); - (*the_low_target.get_syscall_trapinfo) (regcache, sysno); - - if (debug_threads) - debug_printf ("get_syscall_trapinfo sysno %d\n", *sysno); - - current_thread = saved_thread; -} - -static int check_stopped_by_watchpoint (struct lwp_info *child); - -/* Called when the LWP stopped for a signal/trap. If it stopped for a - trap check what caused it (breakpoint, watchpoint, trace, etc.), - and save the result in the LWP's stop_reason field. If it stopped - for a breakpoint, decrement the PC if necessary on the lwp's - architecture. Returns true if we now have the LWP's stop PC. */ - -static int -save_stop_reason (struct lwp_info *lwp) -{ - CORE_ADDR pc; - CORE_ADDR sw_breakpoint_pc; - struct thread_info *saved_thread; -#if USE_SIGTRAP_SIGINFO - siginfo_t siginfo; -#endif - - if (the_low_target.get_pc == NULL) - return 0; - - pc = get_pc (lwp); - sw_breakpoint_pc = pc - the_low_target.decr_pc_after_break; - - /* breakpoint_at reads from the current thread. */ - saved_thread = current_thread; - current_thread = get_lwp_thread (lwp); - -#if USE_SIGTRAP_SIGINFO - if (ptrace (PTRACE_GETSIGINFO, lwpid_of (current_thread), - (PTRACE_TYPE_ARG3) 0, &siginfo) == 0) - { - if (siginfo.si_signo == SIGTRAP) - { - if (GDB_ARCH_IS_TRAP_BRKPT (siginfo.si_code) - && GDB_ARCH_IS_TRAP_HWBKPT (siginfo.si_code)) - { - /* The si_code is ambiguous on this arch -- check debug - registers. */ - if (!check_stopped_by_watchpoint (lwp)) - lwp->stop_reason = TARGET_STOPPED_BY_SW_BREAKPOINT; - } - else if (GDB_ARCH_IS_TRAP_BRKPT (siginfo.si_code)) - { - /* If we determine the LWP stopped for a SW breakpoint, - trust it. Particularly don't check watchpoint - registers, because at least on s390, we'd find - stopped-by-watchpoint as long as there's a watchpoint - set. */ - lwp->stop_reason = TARGET_STOPPED_BY_SW_BREAKPOINT; - } - else if (GDB_ARCH_IS_TRAP_HWBKPT (siginfo.si_code)) - { - /* This can indicate either a hardware breakpoint or - hardware watchpoint. Check debug registers. */ - if (!check_stopped_by_watchpoint (lwp)) - lwp->stop_reason = TARGET_STOPPED_BY_HW_BREAKPOINT; - } - else if (siginfo.si_code == TRAP_TRACE) - { - /* We may have single stepped an instruction that - triggered a watchpoint. In that case, on some - architectures (such as x86), instead of TRAP_HWBKPT, - si_code indicates TRAP_TRACE, and we need to check - the debug registers separately. */ - if (!check_stopped_by_watchpoint (lwp)) - lwp->stop_reason = TARGET_STOPPED_BY_SINGLE_STEP; - } - } - } -#else - /* We may have just stepped a breakpoint instruction. E.g., in - non-stop mode, GDB first tells the thread A to step a range, and - then the user inserts a breakpoint inside the range. In that - case we need to report the breakpoint PC. */ - if ((!lwp->stepping || lwp->stop_pc == sw_breakpoint_pc) - && (*the_low_target.breakpoint_at) (sw_breakpoint_pc)) - lwp->stop_reason = TARGET_STOPPED_BY_SW_BREAKPOINT; - - if (hardware_breakpoint_inserted_here (pc)) - lwp->stop_reason = TARGET_STOPPED_BY_HW_BREAKPOINT; - - if (lwp->stop_reason == TARGET_STOPPED_BY_NO_REASON) - check_stopped_by_watchpoint (lwp); -#endif - - if (lwp->stop_reason == TARGET_STOPPED_BY_SW_BREAKPOINT) - { - if (debug_threads) - { - struct thread_info *thr = get_lwp_thread (lwp); - - debug_printf ("CSBB: %s stopped by software breakpoint\n", - target_pid_to_str (ptid_of (thr))); - } - - /* Back up the PC if necessary. */ - if (pc != sw_breakpoint_pc) - { - struct regcache *regcache - = get_thread_regcache (current_thread, 1); - (*the_low_target.set_pc) (regcache, sw_breakpoint_pc); - } - - /* Update this so we record the correct stop PC below. */ - pc = sw_breakpoint_pc; - } - else if (lwp->stop_reason == TARGET_STOPPED_BY_HW_BREAKPOINT) - { - if (debug_threads) - { - struct thread_info *thr = get_lwp_thread (lwp); - - debug_printf ("CSBB: %s stopped by hardware breakpoint\n", - target_pid_to_str (ptid_of (thr))); - } - } - else if (lwp->stop_reason == TARGET_STOPPED_BY_WATCHPOINT) - { - if (debug_threads) - { - struct thread_info *thr = get_lwp_thread (lwp); - - debug_printf ("CSBB: %s stopped by hardware watchpoint\n", - target_pid_to_str (ptid_of (thr))); - } - } - else if (lwp->stop_reason == TARGET_STOPPED_BY_SINGLE_STEP) - { - if (debug_threads) - { - struct thread_info *thr = get_lwp_thread (lwp); - - debug_printf ("CSBB: %s stopped by trace\n", - target_pid_to_str (ptid_of (thr))); - } - } - - lwp->stop_pc = pc; - current_thread = saved_thread; - return 1; -} - -static struct lwp_info * -add_lwp (ptid_t ptid) -{ - struct lwp_info *lwp; - - lwp = XCNEW (struct lwp_info); - - lwp->waitstatus.kind = TARGET_WAITKIND_IGNORE; - - lwp->thread = add_thread (ptid, lwp); - - if (the_low_target.new_thread != NULL) - the_low_target.new_thread (lwp); - - return lwp; -} - -/* Callback to be used when calling fork_inferior, responsible for - actually initiating the tracing of the inferior. */ - -static void -linux_ptrace_fun () -{ - if (ptrace (PTRACE_TRACEME, 0, (PTRACE_TYPE_ARG3) 0, - (PTRACE_TYPE_ARG4) 0) < 0) - trace_start_error_with_name ("ptrace"); - - if (setpgid (0, 0) < 0) - trace_start_error_with_name ("setpgid"); - - /* If GDBserver is connected to gdb via stdio, redirect the inferior's - stdout to stderr so that inferior i/o doesn't corrupt the connection. - Also, redirect stdin to /dev/null. */ - if (remote_connection_is_stdio ()) - { - if (close (0) < 0) - trace_start_error_with_name ("close"); - if (open ("/dev/null", O_RDONLY) < 0) - trace_start_error_with_name ("open"); - if (dup2 (2, 1) < 0) - trace_start_error_with_name ("dup2"); - if (write (2, "stdin/stdout redirected\n", - sizeof ("stdin/stdout redirected\n") - 1) < 0) - { - /* Errors ignored. */; - } - } -} - -/* Start an inferior process and returns its pid. - PROGRAM is the name of the program to be started, and PROGRAM_ARGS - are its arguments. */ - -static int -linux_create_inferior (const char *program, - const std::vector<char *> &program_args) -{ - client_state &cs = get_client_state (); - struct lwp_info *new_lwp; - int pid; - ptid_t ptid; - - { - maybe_disable_address_space_randomization restore_personality - (cs.disable_randomization); - std::string str_program_args = stringify_argv (program_args); - - pid = fork_inferior (program, - str_program_args.c_str (), - get_environ ()->envp (), linux_ptrace_fun, - NULL, NULL, NULL, NULL); - } - - linux_add_process (pid, 0); - - ptid = ptid_t (pid, pid, 0); - new_lwp = add_lwp (ptid); - new_lwp->must_set_ptrace_flags = 1; - - post_fork_inferior (pid, program); - - return pid; -} - -/* Implement the post_create_inferior target_ops method. */ - -static void -linux_post_create_inferior (void) -{ - struct lwp_info *lwp = get_thread_lwp (current_thread); - - linux_arch_setup (); - - if (lwp->must_set_ptrace_flags) - { - struct process_info *proc = current_process (); - int options = linux_low_ptrace_options (proc->attached); - - linux_enable_event_reporting (lwpid_of (current_thread), options); - lwp->must_set_ptrace_flags = 0; - } -} - -/* Attach to an inferior process. Returns 0 on success, ERRNO on - error. */ - -int -linux_attach_lwp (ptid_t ptid) -{ - struct lwp_info *new_lwp; - int lwpid = ptid.lwp (); - - if (ptrace (PTRACE_ATTACH, lwpid, (PTRACE_TYPE_ARG3) 0, (PTRACE_TYPE_ARG4) 0) - != 0) - return errno; - - new_lwp = add_lwp (ptid); - - /* We need to wait for SIGSTOP before being able to make the next - ptrace call on this LWP. */ - new_lwp->must_set_ptrace_flags = 1; - - if (linux_proc_pid_is_stopped (lwpid)) - { - if (debug_threads) - debug_printf ("Attached to a stopped process\n"); - - /* The process is definitely stopped. It is in a job control - stop, unless the kernel predates the TASK_STOPPED / - TASK_TRACED distinction, in which case it might be in a - ptrace stop. Make sure it is in a ptrace stop; from there we - can kill it, signal it, et cetera. - - First make sure there is a pending SIGSTOP. Since we are - already attached, the process can not transition from stopped - to running without a PTRACE_CONT; so we know this signal will - go into the queue. The SIGSTOP generated by PTRACE_ATTACH is - probably already in the queue (unless this kernel is old - enough to use TASK_STOPPED for ptrace stops); but since - SIGSTOP is not an RT signal, it can only be queued once. */ - kill_lwp (lwpid, SIGSTOP); - - /* Finally, resume the stopped process. This will deliver the - SIGSTOP (or a higher priority signal, just like normal - PTRACE_ATTACH), which we'll catch later on. */ - ptrace (PTRACE_CONT, lwpid, (PTRACE_TYPE_ARG3) 0, (PTRACE_TYPE_ARG4) 0); - } - - /* The next time we wait for this LWP we'll see a SIGSTOP as PTRACE_ATTACH - brings it to a halt. - - There are several cases to consider here: - - 1) gdbserver has already attached to the process and is being notified - of a new thread that is being created. - In this case we should ignore that SIGSTOP and resume the - process. This is handled below by setting stop_expected = 1, - and the fact that add_thread sets last_resume_kind == - resume_continue. - - 2) This is the first thread (the process thread), and we're attaching - to it via attach_inferior. - In this case we want the process thread to stop. - This is handled by having linux_attach set last_resume_kind == - resume_stop after we return. - - If the pid we are attaching to is also the tgid, we attach to and - stop all the existing threads. Otherwise, we attach to pid and - ignore any other threads in the same group as this pid. - - 3) GDB is connecting to gdbserver and is requesting an enumeration of all - existing threads. - In this case we want the thread to stop. - FIXME: This case is currently not properly handled. - We should wait for the SIGSTOP but don't. Things work apparently - because enough time passes between when we ptrace (ATTACH) and when - gdb makes the next ptrace call on the thread. - - On the other hand, if we are currently trying to stop all threads, we - should treat the new thread as if we had sent it a SIGSTOP. This works - because we are guaranteed that the add_lwp call above added us to the - end of the list, and so the new thread has not yet reached - wait_for_sigstop (but will). */ - new_lwp->stop_expected = 1; - - return 0; -} - -/* Callback for linux_proc_attach_tgid_threads. Attach to PTID if not - already attached. Returns true if a new LWP is found, false - otherwise. */ - -static int -attach_proc_task_lwp_callback (ptid_t ptid) -{ - /* Is this a new thread? */ - if (find_thread_ptid (ptid) == NULL) - { - int lwpid = ptid.lwp (); - int err; - - if (debug_threads) - debug_printf ("Found new lwp %d\n", lwpid); - - err = linux_attach_lwp (ptid); - - /* Be quiet if we simply raced with the thread exiting. EPERM - is returned if the thread's task still exists, and is marked - as exited or zombie, as well as other conditions, so in that - case, confirm the status in /proc/PID/status. */ - if (err == ESRCH - || (err == EPERM && linux_proc_pid_is_gone (lwpid))) - { - if (debug_threads) - { - debug_printf ("Cannot attach to lwp %d: " - "thread is gone (%d: %s)\n", - lwpid, err, safe_strerror (err)); - } - } - else if (err != 0) - { - std::string reason - = linux_ptrace_attach_fail_reason_string (ptid, err); - - warning (_("Cannot attach to lwp %d: %s"), lwpid, reason.c_str ()); - } - - return 1; - } - return 0; -} - -static void async_file_mark (void); - -/* Attach to PID. If PID is the tgid, attach to it and all - of its threads. */ - -static int -linux_attach (unsigned long pid) -{ - struct process_info *proc; - struct thread_info *initial_thread; - ptid_t ptid = ptid_t (pid, pid, 0); - int err; - - proc = linux_add_process (pid, 1); - - /* Attach to PID. We will check for other threads - soon. */ - err = linux_attach_lwp (ptid); - if (err != 0) - { - remove_process (proc); - - std::string reason = linux_ptrace_attach_fail_reason_string (ptid, err); - error ("Cannot attach to process %ld: %s", pid, reason.c_str ()); - } - - /* Don't ignore the initial SIGSTOP if we just attached to this - process. It will be collected by wait shortly. */ - initial_thread = find_thread_ptid (ptid_t (pid, pid, 0)); - initial_thread->last_resume_kind = resume_stop; - - /* We must attach to every LWP. If /proc is mounted, use that to - find them now. On the one hand, the inferior may be using raw - clone instead of using pthreads. On the other hand, even if it - is using pthreads, GDB may not be connected yet (thread_db needs - to do symbol lookups, through qSymbol). Also, thread_db walks - structures in the inferior's address space to find the list of - threads/LWPs, and those structures may well be corrupted. Note - that once thread_db is loaded, we'll still use it to list threads - and associate pthread info with each LWP. */ - linux_proc_attach_tgid_threads (pid, attach_proc_task_lwp_callback); - - /* GDB will shortly read the xml target description for this - process, to figure out the process' architecture. But the target - description is only filled in when the first process/thread in - the thread group reports its initial PTRACE_ATTACH SIGSTOP. Do - that now, otherwise, if GDB is fast enough, it could read the - target description _before_ that initial stop. */ - if (non_stop) - { - struct lwp_info *lwp; - int wstat, lwpid; - ptid_t pid_ptid = ptid_t (pid); - - lwpid = linux_wait_for_event_filtered (pid_ptid, pid_ptid, - &wstat, __WALL); - gdb_assert (lwpid > 0); - - lwp = find_lwp_pid (ptid_t (lwpid)); - - if (!WIFSTOPPED (wstat) || WSTOPSIG (wstat) != SIGSTOP) - { - lwp->status_pending_p = 1; - lwp->status_pending = wstat; - } - - initial_thread->last_resume_kind = resume_continue; - - async_file_mark (); - - gdb_assert (proc->tdesc != NULL); - } - - return 0; -} - -static int -last_thread_of_process_p (int pid) -{ - bool seen_one = false; - - thread_info *thread = find_thread (pid, [&] (thread_info *thr_arg) - { - if (!seen_one) - { - /* This is the first thread of this process we see. */ - seen_one = true; - return false; - } - else - { - /* This is the second thread of this process we see. */ - return true; - } - }); - - return thread == NULL; -} - -/* Kill LWP. */ - -static void -linux_kill_one_lwp (struct lwp_info *lwp) -{ - struct thread_info *thr = get_lwp_thread (lwp); - int pid = lwpid_of (thr); - - /* PTRACE_KILL is unreliable. After stepping into a signal handler, - there is no signal context, and ptrace(PTRACE_KILL) (or - ptrace(PTRACE_CONT, SIGKILL), pretty much the same) acts like - ptrace(CONT, pid, 0,0) and just resumes the tracee. A better - alternative is to kill with SIGKILL. We only need one SIGKILL - per process, not one for each thread. But since we still support - support debugging programs using raw clone without CLONE_THREAD, - we send one for each thread. For years, we used PTRACE_KILL - only, so we're being a bit paranoid about some old kernels where - PTRACE_KILL might work better (dubious if there are any such, but - that's why it's paranoia), so we try SIGKILL first, PTRACE_KILL - second, and so we're fine everywhere. */ - - errno = 0; - kill_lwp (pid, SIGKILL); - if (debug_threads) - { - int save_errno = errno; - - debug_printf ("LKL: kill_lwp (SIGKILL) %s, 0, 0 (%s)\n", - target_pid_to_str (ptid_of (thr)), - save_errno ? safe_strerror (save_errno) : "OK"); - } - - errno = 0; - ptrace (PTRACE_KILL, pid, (PTRACE_TYPE_ARG3) 0, (PTRACE_TYPE_ARG4) 0); - if (debug_threads) - { - int save_errno = errno; - - debug_printf ("LKL: PTRACE_KILL %s, 0, 0 (%s)\n", - target_pid_to_str (ptid_of (thr)), - save_errno ? safe_strerror (save_errno) : "OK"); - } -} - -/* Kill LWP and wait for it to die. */ - -static void -kill_wait_lwp (struct lwp_info *lwp) -{ - struct thread_info *thr = get_lwp_thread (lwp); - int pid = ptid_of (thr).pid (); - int lwpid = ptid_of (thr).lwp (); - int wstat; - int res; - - if (debug_threads) - debug_printf ("kwl: killing lwp %d, for pid: %d\n", lwpid, pid); - - do - { - linux_kill_one_lwp (lwp); - - /* Make sure it died. Notes: - - - The loop is most likely unnecessary. - - - We don't use linux_wait_for_event as that could delete lwps - while we're iterating over them. We're not interested in - any pending status at this point, only in making sure all - wait status on the kernel side are collected until the - process is reaped. - - - We don't use __WALL here as the __WALL emulation relies on - SIGCHLD, and killing a stopped process doesn't generate - one, nor an exit status. - */ - res = my_waitpid (lwpid, &wstat, 0); - if (res == -1 && errno == ECHILD) - res = my_waitpid (lwpid, &wstat, __WCLONE); - } while (res > 0 && WIFSTOPPED (wstat)); - - /* Even if it was stopped, the child may have already disappeared. - E.g., if it was killed by SIGKILL. */ - if (res < 0 && errno != ECHILD) - perror_with_name ("kill_wait_lwp"); -} - -/* Callback for `for_each_thread'. Kills an lwp of a given process, - except the leader. */ - -static void -kill_one_lwp_callback (thread_info *thread, int pid) -{ - struct lwp_info *lwp = get_thread_lwp (thread); - - /* We avoid killing the first thread here, because of a Linux kernel (at - least 2.6.0-test7 through 2.6.8-rc4) bug; if we kill the parent before - the children get a chance to be reaped, it will remain a zombie - forever. */ - - if (lwpid_of (thread) == pid) - { - if (debug_threads) - debug_printf ("lkop: is last of process %s\n", - target_pid_to_str (thread->id)); - return; - } - - kill_wait_lwp (lwp); -} - -static int -linux_kill (process_info *process) -{ - int pid = process->pid; - - /* If we're killing a running inferior, make sure it is stopped - first, as PTRACE_KILL will not work otherwise. */ - stop_all_lwps (0, NULL); - - for_each_thread (pid, [&] (thread_info *thread) - { - kill_one_lwp_callback (thread, pid); - }); - - /* See the comment in linux_kill_one_lwp. We did not kill the first - thread in the list, so do so now. */ - lwp_info *lwp = find_lwp_pid (ptid_t (pid)); - - if (lwp == NULL) - { - if (debug_threads) - debug_printf ("lk_1: cannot find lwp for pid: %d\n", - pid); - } - else - kill_wait_lwp (lwp); - - the_target->mourn (process); - - /* Since we presently can only stop all lwps of all processes, we - need to unstop lwps of other processes. */ - unstop_all_lwps (0, NULL); - return 0; -} - -/* Get pending signal of THREAD, for detaching purposes. This is the - signal the thread last stopped for, which we need to deliver to the - thread when detaching, otherwise, it'd be suppressed/lost. */ - -static int -get_detach_signal (struct thread_info *thread) -{ - client_state &cs = get_client_state (); - enum gdb_signal signo = GDB_SIGNAL_0; - int status; - struct lwp_info *lp = get_thread_lwp (thread); - - if (lp->status_pending_p) - status = lp->status_pending; - else - { - /* If the thread had been suspended by gdbserver, and it stopped - cleanly, then it'll have stopped with SIGSTOP. But we don't - want to deliver that SIGSTOP. */ - if (thread->last_status.kind != TARGET_WAITKIND_STOPPED - || thread->last_status.value.sig == GDB_SIGNAL_0) - return 0; - - /* Otherwise, we may need to deliver the signal we - intercepted. */ - status = lp->last_status; - } - - if (!WIFSTOPPED (status)) - { - if (debug_threads) - debug_printf ("GPS: lwp %s hasn't stopped: no pending signal\n", - target_pid_to_str (ptid_of (thread))); - return 0; - } - - /* Extended wait statuses aren't real SIGTRAPs. */ - if (WSTOPSIG (status) == SIGTRAP && linux_is_extended_waitstatus (status)) - { - if (debug_threads) - debug_printf ("GPS: lwp %s had stopped with extended " - "status: no pending signal\n", - target_pid_to_str (ptid_of (thread))); - return 0; - } - - signo = gdb_signal_from_host (WSTOPSIG (status)); - - if (cs.program_signals_p && !cs.program_signals[signo]) - { - if (debug_threads) - debug_printf ("GPS: lwp %s had signal %s, but it is in nopass state\n", - target_pid_to_str (ptid_of (thread)), - gdb_signal_to_string (signo)); - return 0; - } - else if (!cs.program_signals_p - /* If we have no way to know which signals GDB does not - want to have passed to the program, assume - SIGTRAP/SIGINT, which is GDB's default. */ - && (signo == GDB_SIGNAL_TRAP || signo == GDB_SIGNAL_INT)) - { - if (debug_threads) - debug_printf ("GPS: lwp %s had signal %s, " - "but we don't know if we should pass it. " - "Default to not.\n", - target_pid_to_str (ptid_of (thread)), - gdb_signal_to_string (signo)); - return 0; - } - else - { - if (debug_threads) - debug_printf ("GPS: lwp %s has pending signal %s: delivering it.\n", - target_pid_to_str (ptid_of (thread)), - gdb_signal_to_string (signo)); - - return WSTOPSIG (status); - } -} - -/* Detach from LWP. */ - -static void -linux_detach_one_lwp (struct lwp_info *lwp) -{ - struct thread_info *thread = get_lwp_thread (lwp); - int sig; - int lwpid; - - /* If there is a pending SIGSTOP, get rid of it. */ - if (lwp->stop_expected) - { - if (debug_threads) - debug_printf ("Sending SIGCONT to %s\n", - target_pid_to_str (ptid_of (thread))); - - kill_lwp (lwpid_of (thread), SIGCONT); - lwp->stop_expected = 0; - } - - /* Pass on any pending signal for this thread. */ - sig = get_detach_signal (thread); - - /* Preparing to resume may try to write registers, and fail if the - lwp is zombie. If that happens, ignore the error. We'll handle - it below, when detach fails with ESRCH. */ - try - { - /* Flush any pending changes to the process's registers. */ - regcache_invalidate_thread (thread); - - /* Finally, let it resume. */ - if (the_low_target.prepare_to_resume != NULL) - the_low_target.prepare_to_resume (lwp); - } - catch (const gdb_exception_error &ex) - { - if (!check_ptrace_stopped_lwp_gone (lwp)) - throw; - } - - lwpid = lwpid_of (thread); - if (ptrace (PTRACE_DETACH, lwpid, (PTRACE_TYPE_ARG3) 0, - (PTRACE_TYPE_ARG4) (long) sig) < 0) - { - int save_errno = errno; - - /* We know the thread exists, so ESRCH must mean the lwp is - zombie. This can happen if one of the already-detached - threads exits the whole thread group. In that case we're - still attached, and must reap the lwp. */ - if (save_errno == ESRCH) - { - int ret, status; - - ret = my_waitpid (lwpid, &status, __WALL); - if (ret == -1) - { - warning (_("Couldn't reap LWP %d while detaching: %s"), - lwpid, safe_strerror (errno)); - } - else if (!WIFEXITED (status) && !WIFSIGNALED (status)) - { - warning (_("Reaping LWP %d while detaching " - "returned unexpected status 0x%x"), - lwpid, status); - } - } - else - { - error (_("Can't detach %s: %s"), - target_pid_to_str (ptid_of (thread)), - safe_strerror (save_errno)); - } - } - else if (debug_threads) - { - debug_printf ("PTRACE_DETACH (%s, %s, 0) (OK)\n", - target_pid_to_str (ptid_of (thread)), - strsignal (sig)); - } - - delete_lwp (lwp); -} - -/* Callback for for_each_thread. Detaches from non-leader threads of a - given process. */ - -static void -linux_detach_lwp_callback (thread_info *thread) -{ - /* We don't actually detach from the thread group leader just yet. - If the thread group exits, we must reap the zombie clone lwps - before we're able to reap the leader. */ - if (thread->id.pid () == thread->id.lwp ()) - return; - - lwp_info *lwp = get_thread_lwp (thread); - linux_detach_one_lwp (lwp); -} - -static int -linux_detach (process_info *process) -{ - struct lwp_info *main_lwp; - - /* As there's a step over already in progress, let it finish first, - otherwise nesting a stabilize_threads operation on top gets real - messy. */ - complete_ongoing_step_over (); - - /* Stop all threads before detaching. First, ptrace requires that - the thread is stopped to successfully detach. Second, thread_db - may need to uninstall thread event breakpoints from memory, which - only works with a stopped process anyway. */ - stop_all_lwps (0, NULL); - -#ifdef USE_THREAD_DB - thread_db_detach (process); -#endif - - /* Stabilize threads (move out of jump pads). */ - stabilize_threads (); - - /* Detach from the clone lwps first. If the thread group exits just - while we're detaching, we must reap the clone lwps before we're - able to reap the leader. */ - for_each_thread (process->pid, linux_detach_lwp_callback); - - main_lwp = find_lwp_pid (ptid_t (process->pid)); - linux_detach_one_lwp (main_lwp); - - the_target->mourn (process); - - /* Since we presently can only stop all lwps of all processes, we - need to unstop lwps of other processes. */ - unstop_all_lwps (0, NULL); - return 0; -} - -/* Remove all LWPs that belong to process PROC from the lwp list. */ - -static void -linux_mourn (struct process_info *process) -{ - struct process_info_private *priv; - -#ifdef USE_THREAD_DB - thread_db_mourn (process); -#endif - - for_each_thread (process->pid, [] (thread_info *thread) - { - delete_lwp (get_thread_lwp (thread)); - }); - - /* Freeing all private data. */ - priv = process->priv; - if (the_low_target.delete_process != NULL) - the_low_target.delete_process (priv->arch_private); - else - gdb_assert (priv->arch_private == NULL); - free (priv); - process->priv = NULL; - - remove_process (process); -} - -static void -linux_join (int pid) -{ - int status, ret; - - do { - ret = my_waitpid (pid, &status, 0); - if (WIFEXITED (status) || WIFSIGNALED (status)) - break; - } while (ret != -1 || errno != ECHILD); -} - -/* Return nonzero if the given thread is still alive. */ -static int -linux_thread_alive (ptid_t ptid) -{ - struct lwp_info *lwp = find_lwp_pid (ptid); - - /* We assume we always know if a thread exits. If a whole process - exited but we still haven't been able to report it to GDB, we'll - hold on to the last lwp of the dead process. */ - if (lwp != NULL) - return !lwp_is_marked_dead (lwp); - else - return 0; -} - -/* Return 1 if this lwp still has an interesting status pending. If - not (e.g., it had stopped for a breakpoint that is gone), return - false. */ - -static int -thread_still_has_status_pending_p (struct thread_info *thread) -{ - struct lwp_info *lp = get_thread_lwp (thread); - - if (!lp->status_pending_p) - return 0; - - if (thread->last_resume_kind != resume_stop - && (lp->stop_reason == TARGET_STOPPED_BY_SW_BREAKPOINT - || lp->stop_reason == TARGET_STOPPED_BY_HW_BREAKPOINT)) - { - struct thread_info *saved_thread; - CORE_ADDR pc; - int discard = 0; - - gdb_assert (lp->last_status != 0); - - pc = get_pc (lp); - - saved_thread = current_thread; - current_thread = thread; - - if (pc != lp->stop_pc) - { - if (debug_threads) - debug_printf ("PC of %ld changed\n", - lwpid_of (thread)); - discard = 1; - } - -#if !USE_SIGTRAP_SIGINFO - else if (lp->stop_reason == TARGET_STOPPED_BY_SW_BREAKPOINT - && !(*the_low_target.breakpoint_at) (pc)) - { - if (debug_threads) - debug_printf ("previous SW breakpoint of %ld gone\n", - lwpid_of (thread)); - discard = 1; - } - else if (lp->stop_reason == TARGET_STOPPED_BY_HW_BREAKPOINT - && !hardware_breakpoint_inserted_here (pc)) - { - if (debug_threads) - debug_printf ("previous HW breakpoint of %ld gone\n", - lwpid_of (thread)); - discard = 1; - } -#endif - - current_thread = saved_thread; - - if (discard) - { - if (debug_threads) - debug_printf ("discarding pending breakpoint status\n"); - lp->status_pending_p = 0; - return 0; - } - } - - return 1; -} - -/* Returns true if LWP is resumed from the client's perspective. */ - -static int -lwp_resumed (struct lwp_info *lwp) -{ - struct thread_info *thread = get_lwp_thread (lwp); - - if (thread->last_resume_kind != resume_stop) - return 1; - - /* Did gdb send us a `vCont;t', but we haven't reported the - corresponding stop to gdb yet? If so, the thread is still - resumed/running from gdb's perspective. */ - if (thread->last_resume_kind == resume_stop - && thread->last_status.kind == TARGET_WAITKIND_IGNORE) - return 1; - - return 0; -} - -/* Return true if this lwp has an interesting status pending. */ -static bool -status_pending_p_callback (thread_info *thread, ptid_t ptid) -{ - struct lwp_info *lp = get_thread_lwp (thread); - - /* Check if we're only interested in events from a specific process - or a specific LWP. */ - if (!thread->id.matches (ptid)) - return 0; - - if (!lwp_resumed (lp)) - return 0; - - if (lp->status_pending_p - && !thread_still_has_status_pending_p (thread)) - { - linux_resume_one_lwp (lp, lp->stepping, GDB_SIGNAL_0, NULL); - return 0; - } - - return lp->status_pending_p; -} - -struct lwp_info * -find_lwp_pid (ptid_t ptid) -{ - thread_info *thread = find_thread ([&] (thread_info *thr_arg) - { - int lwp = ptid.lwp () != 0 ? ptid.lwp () : ptid.pid (); - return thr_arg->id.lwp () == lwp; - }); - - if (thread == NULL) - return NULL; - - return get_thread_lwp (thread); -} - -/* Return the number of known LWPs in the tgid given by PID. */ - -static int -num_lwps (int pid) -{ - int count = 0; - - for_each_thread (pid, [&] (thread_info *thread) - { - count++; - }); - - return count; -} - -/* See nat/linux-nat.h. */ - -struct lwp_info * -iterate_over_lwps (ptid_t filter, - gdb::function_view<iterate_over_lwps_ftype> callback) -{ - thread_info *thread = find_thread (filter, [&] (thread_info *thr_arg) - { - lwp_info *lwp = get_thread_lwp (thr_arg); - - return callback (lwp); - }); - - if (thread == NULL) - return NULL; - - return get_thread_lwp (thread); -} - -/* Detect zombie thread group leaders, and "exit" them. We can't reap - their exits until all other threads in the group have exited. */ - -static void -check_zombie_leaders (void) -{ - for_each_process ([] (process_info *proc) { - pid_t leader_pid = pid_of (proc); - struct lwp_info *leader_lp; - - leader_lp = find_lwp_pid (ptid_t (leader_pid)); - - if (debug_threads) - debug_printf ("leader_pid=%d, leader_lp!=NULL=%d, " - "num_lwps=%d, zombie=%d\n", - leader_pid, leader_lp!= NULL, num_lwps (leader_pid), - linux_proc_pid_is_zombie (leader_pid)); - - if (leader_lp != NULL && !leader_lp->stopped - /* Check if there are other threads in the group, as we may - have raced with the inferior simply exiting. */ - && !last_thread_of_process_p (leader_pid) - && linux_proc_pid_is_zombie (leader_pid)) - { - /* A leader zombie can mean one of two things: - - - It exited, and there's an exit status pending - available, or only the leader exited (not the whole - program). In the latter case, we can't waitpid the - leader's exit status until all other threads are gone. - - - There are 3 or more threads in the group, and a thread - other than the leader exec'd. On an exec, the Linux - kernel destroys all other threads (except the execing - one) in the thread group, and resets the execing thread's - tid to the tgid. No exit notification is sent for the - execing thread -- from the ptracer's perspective, it - appears as though the execing thread just vanishes. - Until we reap all other threads except the leader and the - execing thread, the leader will be zombie, and the - execing thread will be in `D (disc sleep)'. As soon as - all other threads are reaped, the execing thread changes - it's tid to the tgid, and the previous (zombie) leader - vanishes, giving place to the "new" leader. We could try - distinguishing the exit and exec cases, by waiting once - more, and seeing if something comes out, but it doesn't - sound useful. The previous leader _does_ go away, and - we'll re-add the new one once we see the exec event - (which is just the same as what would happen if the - previous leader did exit voluntarily before some other - thread execs). */ - - if (debug_threads) - debug_printf ("CZL: Thread group leader %d zombie " - "(it exited, or another thread execd).\n", - leader_pid); - - delete_lwp (leader_lp); - } - }); -} - -/* Callback for `find_thread'. Returns the first LWP that is not - stopped. */ - -static bool -not_stopped_callback (thread_info *thread, ptid_t filter) -{ - if (!thread->id.matches (filter)) - return false; - - lwp_info *lwp = get_thread_lwp (thread); - - return !lwp->stopped; -} - -/* Increment LWP's suspend count. */ - -static void -lwp_suspended_inc (struct lwp_info *lwp) -{ - lwp->suspended++; - - if (debug_threads && lwp->suspended > 4) - { - struct thread_info *thread = get_lwp_thread (lwp); - - debug_printf ("LWP %ld has a suspiciously high suspend count," - " suspended=%d\n", lwpid_of (thread), lwp->suspended); - } -} - -/* Decrement LWP's suspend count. */ - -static void -lwp_suspended_decr (struct lwp_info *lwp) -{ - lwp->suspended--; - - if (lwp->suspended < 0) - { - struct thread_info *thread = get_lwp_thread (lwp); - - internal_error (__FILE__, __LINE__, - "unsuspend LWP %ld, suspended=%d\n", lwpid_of (thread), - lwp->suspended); - } -} - -/* This function should only be called if the LWP got a SIGTRAP. - - Handle any tracepoint steps or hits. Return true if a tracepoint - event was handled, 0 otherwise. */ - -static int -handle_tracepoints (struct lwp_info *lwp) -{ - struct thread_info *tinfo = get_lwp_thread (lwp); - int tpoint_related_event = 0; - - gdb_assert (lwp->suspended == 0); - - /* If this tracepoint hit causes a tracing stop, we'll immediately - uninsert tracepoints. To do this, we temporarily pause all - threads, unpatch away, and then unpause threads. We need to make - sure the unpausing doesn't resume LWP too. */ - lwp_suspended_inc (lwp); - - /* And we need to be sure that any all-threads-stopping doesn't try - to move threads out of the jump pads, as it could deadlock the - inferior (LWP could be in the jump pad, maybe even holding the - lock.) */ - - /* Do any necessary step collect actions. */ - tpoint_related_event |= tracepoint_finished_step (tinfo, lwp->stop_pc); - - tpoint_related_event |= handle_tracepoint_bkpts (tinfo, lwp->stop_pc); - - /* See if we just hit a tracepoint and do its main collect - actions. */ - tpoint_related_event |= tracepoint_was_hit (tinfo, lwp->stop_pc); - - lwp_suspended_decr (lwp); - - gdb_assert (lwp->suspended == 0); - gdb_assert (!stabilizing_threads - || (lwp->collecting_fast_tracepoint - != fast_tpoint_collect_result::not_collecting)); - - if (tpoint_related_event) - { - if (debug_threads) - debug_printf ("got a tracepoint event\n"); - return 1; - } - - return 0; -} - -/* Convenience wrapper. Returns information about LWP's fast tracepoint - collection status. */ - -static fast_tpoint_collect_result -linux_fast_tracepoint_collecting (struct lwp_info *lwp, - struct fast_tpoint_collect_status *status) -{ - CORE_ADDR thread_area; - struct thread_info *thread = get_lwp_thread (lwp); - - if (the_low_target.get_thread_area == NULL) - return fast_tpoint_collect_result::not_collecting; - - /* Get the thread area address. This is used to recognize which - thread is which when tracing with the in-process agent library. - We don't read anything from the address, and treat it as opaque; - it's the address itself that we assume is unique per-thread. */ - if ((*the_low_target.get_thread_area) (lwpid_of (thread), &thread_area) == -1) - return fast_tpoint_collect_result::not_collecting; - - return fast_tracepoint_collecting (thread_area, lwp->stop_pc, status); -} - -/* The reason we resume in the caller, is because we want to be able - to pass lwp->status_pending as WSTAT, and we need to clear - status_pending_p before resuming, otherwise, linux_resume_one_lwp - refuses to resume. */ - -static int -maybe_move_out_of_jump_pad (struct lwp_info *lwp, int *wstat) -{ - struct thread_info *saved_thread; - - saved_thread = current_thread; - current_thread = get_lwp_thread (lwp); - - if ((wstat == NULL - || (WIFSTOPPED (*wstat) && WSTOPSIG (*wstat) != SIGTRAP)) - && supports_fast_tracepoints () - && agent_loaded_p ()) - { - struct fast_tpoint_collect_status status; - - if (debug_threads) - debug_printf ("Checking whether LWP %ld needs to move out of the " - "jump pad.\n", - lwpid_of (current_thread)); - - fast_tpoint_collect_result r - = linux_fast_tracepoint_collecting (lwp, &status); - - if (wstat == NULL - || (WSTOPSIG (*wstat) != SIGILL - && WSTOPSIG (*wstat) != SIGFPE - && WSTOPSIG (*wstat) != SIGSEGV - && WSTOPSIG (*wstat) != SIGBUS)) - { - lwp->collecting_fast_tracepoint = r; - - if (r != fast_tpoint_collect_result::not_collecting) - { - if (r == fast_tpoint_collect_result::before_insn - && lwp->exit_jump_pad_bkpt == NULL) - { - /* Haven't executed the original instruction yet. - Set breakpoint there, and wait till it's hit, - then single-step until exiting the jump pad. */ - lwp->exit_jump_pad_bkpt - = set_breakpoint_at (status.adjusted_insn_addr, NULL); - } - - if (debug_threads) - debug_printf ("Checking whether LWP %ld needs to move out of " - "the jump pad...it does\n", - lwpid_of (current_thread)); - current_thread = saved_thread; - - return 1; - } - } - else - { - /* If we get a synchronous signal while collecting, *and* - while executing the (relocated) original instruction, - reset the PC to point at the tpoint address, before - reporting to GDB. Otherwise, it's an IPA lib bug: just - report the signal to GDB, and pray for the best. */ - - lwp->collecting_fast_tracepoint - = fast_tpoint_collect_result::not_collecting; - - if (r != fast_tpoint_collect_result::not_collecting - && (status.adjusted_insn_addr <= lwp->stop_pc - && lwp->stop_pc < status.adjusted_insn_addr_end)) - { - siginfo_t info; - struct regcache *regcache; - - /* The si_addr on a few signals references the address - of the faulting instruction. Adjust that as - well. */ - if ((WSTOPSIG (*wstat) == SIGILL - || WSTOPSIG (*wstat) == SIGFPE - || WSTOPSIG (*wstat) == SIGBUS - || WSTOPSIG (*wstat) == SIGSEGV) - && ptrace (PTRACE_GETSIGINFO, lwpid_of (current_thread), - (PTRACE_TYPE_ARG3) 0, &info) == 0 - /* Final check just to make sure we don't clobber - the siginfo of non-kernel-sent signals. */ - && (uintptr_t) info.si_addr == lwp->stop_pc) - { - info.si_addr = (void *) (uintptr_t) status.tpoint_addr; - ptrace (PTRACE_SETSIGINFO, lwpid_of (current_thread), - (PTRACE_TYPE_ARG3) 0, &info); - } - - regcache = get_thread_regcache (current_thread, 1); - (*the_low_target.set_pc) (regcache, status.tpoint_addr); - lwp->stop_pc = status.tpoint_addr; - - /* Cancel any fast tracepoint lock this thread was - holding. */ - force_unlock_trace_buffer (); - } - - if (lwp->exit_jump_pad_bkpt != NULL) - { - if (debug_threads) - debug_printf ("Cancelling fast exit-jump-pad: removing bkpt. " - "stopping all threads momentarily.\n"); - - stop_all_lwps (1, lwp); - - delete_breakpoint (lwp->exit_jump_pad_bkpt); - lwp->exit_jump_pad_bkpt = NULL; - - unstop_all_lwps (1, lwp); - - gdb_assert (lwp->suspended >= 0); - } - } - } - - if (debug_threads) - debug_printf ("Checking whether LWP %ld needs to move out of the " - "jump pad...no\n", - lwpid_of (current_thread)); - - current_thread = saved_thread; - return 0; -} - -/* Enqueue one signal in the "signals to report later when out of the - jump pad" list. */ - -static void -enqueue_one_deferred_signal (struct lwp_info *lwp, int *wstat) -{ - struct pending_signals *p_sig; - struct thread_info *thread = get_lwp_thread (lwp); - - if (debug_threads) - debug_printf ("Deferring signal %d for LWP %ld.\n", - WSTOPSIG (*wstat), lwpid_of (thread)); - - if (debug_threads) - { - struct pending_signals *sig; - - for (sig = lwp->pending_signals_to_report; - sig != NULL; - sig = sig->prev) - debug_printf (" Already queued %d\n", - sig->signal); - - debug_printf (" (no more currently queued signals)\n"); - } - - /* Don't enqueue non-RT signals if they are already in the deferred - queue. (SIGSTOP being the easiest signal to see ending up here - twice) */ - if (WSTOPSIG (*wstat) < __SIGRTMIN) - { - struct pending_signals *sig; - - for (sig = lwp->pending_signals_to_report; - sig != NULL; - sig = sig->prev) - { - if (sig->signal == WSTOPSIG (*wstat)) - { - if (debug_threads) - debug_printf ("Not requeuing already queued non-RT signal %d" - " for LWP %ld\n", - sig->signal, - lwpid_of (thread)); - return; - } - } - } - - p_sig = XCNEW (struct pending_signals); - p_sig->prev = lwp->pending_signals_to_report; - p_sig->signal = WSTOPSIG (*wstat); - - ptrace (PTRACE_GETSIGINFO, lwpid_of (thread), (PTRACE_TYPE_ARG3) 0, - &p_sig->info); - - lwp->pending_signals_to_report = p_sig; -} - -/* Dequeue one signal from the "signals to report later when out of - the jump pad" list. */ - -static int -dequeue_one_deferred_signal (struct lwp_info *lwp, int *wstat) -{ - struct thread_info *thread = get_lwp_thread (lwp); - - if (lwp->pending_signals_to_report != NULL) - { - struct pending_signals **p_sig; - - p_sig = &lwp->pending_signals_to_report; - while ((*p_sig)->prev != NULL) - p_sig = &(*p_sig)->prev; - - *wstat = W_STOPCODE ((*p_sig)->signal); - if ((*p_sig)->info.si_signo != 0) - ptrace (PTRACE_SETSIGINFO, lwpid_of (thread), (PTRACE_TYPE_ARG3) 0, - &(*p_sig)->info); - free (*p_sig); - *p_sig = NULL; - - if (debug_threads) - debug_printf ("Reporting deferred signal %d for LWP %ld.\n", - WSTOPSIG (*wstat), lwpid_of (thread)); - - if (debug_threads) - { - struct pending_signals *sig; - - for (sig = lwp->pending_signals_to_report; - sig != NULL; - sig = sig->prev) - debug_printf (" Still queued %d\n", - sig->signal); - - debug_printf (" (no more queued signals)\n"); - } - - return 1; - } - - return 0; -} - -/* Fetch the possibly triggered data watchpoint info and store it in - CHILD. - - On some archs, like x86, that use debug registers to set - watchpoints, it's possible that the way to know which watched - address trapped, is to check the register that is used to select - which address to watch. Problem is, between setting the watchpoint - and reading back which data address trapped, the user may change - the set of watchpoints, and, as a consequence, GDB changes the - debug registers in the inferior. To avoid reading back a stale - stopped-data-address when that happens, we cache in LP the fact - that a watchpoint trapped, and the corresponding data address, as - soon as we see CHILD stop with a SIGTRAP. If GDB changes the debug - registers meanwhile, we have the cached data we can rely on. */ - -static int -check_stopped_by_watchpoint (struct lwp_info *child) -{ - if (the_low_target.stopped_by_watchpoint != NULL) - { - struct thread_info *saved_thread; - - saved_thread = current_thread; - current_thread = get_lwp_thread (child); - - if (the_low_target.stopped_by_watchpoint ()) - { - child->stop_reason = TARGET_STOPPED_BY_WATCHPOINT; - - if (the_low_target.stopped_data_address != NULL) - child->stopped_data_address - = the_low_target.stopped_data_address (); - else - child->stopped_data_address = 0; - } - - current_thread = saved_thread; - } - - return child->stop_reason == TARGET_STOPPED_BY_WATCHPOINT; -} - -/* Return the ptrace options that we want to try to enable. */ - -static int -linux_low_ptrace_options (int attached) -{ - client_state &cs = get_client_state (); - int options = 0; - - if (!attached) - options |= PTRACE_O_EXITKILL; - - if (cs.report_fork_events) - options |= PTRACE_O_TRACEFORK; - - if (cs.report_vfork_events) - options |= (PTRACE_O_TRACEVFORK | PTRACE_O_TRACEVFORKDONE); - - if (cs.report_exec_events) - options |= PTRACE_O_TRACEEXEC; - - options |= PTRACE_O_TRACESYSGOOD; - - return options; -} - -/* Do low-level handling of the event, and check if we should go on - and pass it to caller code. Return the affected lwp if we are, or - NULL otherwise. */ - -static struct lwp_info * -linux_low_filter_event (int lwpid, int wstat) -{ - client_state &cs = get_client_state (); - struct lwp_info *child; - struct thread_info *thread; - int have_stop_pc = 0; - - child = find_lwp_pid (ptid_t (lwpid)); - - /* Check for stop events reported by a process we didn't already - know about - anything not already in our LWP list. - - If we're expecting to receive stopped processes after - fork, vfork, and clone events, then we'll just add the - new one to our list and go back to waiting for the event - to be reported - the stopped process might be returned - from waitpid before or after the event is. - - But note the case of a non-leader thread exec'ing after the - leader having exited, and gone from our lists (because - check_zombie_leaders deleted it). The non-leader thread - changes its tid to the tgid. */ - - if (WIFSTOPPED (wstat) && child == NULL && WSTOPSIG (wstat) == SIGTRAP - && linux_ptrace_get_extended_event (wstat) == PTRACE_EVENT_EXEC) - { - ptid_t child_ptid; - - /* A multi-thread exec after we had seen the leader exiting. */ - if (debug_threads) - { - debug_printf ("LLW: Re-adding thread group leader LWP %d" - "after exec.\n", lwpid); - } - - child_ptid = ptid_t (lwpid, lwpid, 0); - child = add_lwp (child_ptid); - child->stopped = 1; - current_thread = child->thread; - } - - /* If we didn't find a process, one of two things presumably happened: - - A process we started and then detached from has exited. Ignore it. - - A process we are controlling has forked and the new child's stop - was reported to us by the kernel. Save its PID. */ - if (child == NULL && WIFSTOPPED (wstat)) - { - add_to_pid_list (&stopped_pids, lwpid, wstat); - return NULL; - } - else if (child == NULL) - return NULL; - - thread = get_lwp_thread (child); - - child->stopped = 1; - - child->last_status = wstat; - - /* Check if the thread has exited. */ - if ((WIFEXITED (wstat) || WIFSIGNALED (wstat))) - { - if (debug_threads) - debug_printf ("LLFE: %d exited.\n", lwpid); - - if (finish_step_over (child)) - { - /* Unsuspend all other LWPs, and set them back running again. */ - unsuspend_all_lwps (child); - } - - /* If there is at least one more LWP, then the exit signal was - not the end of the debugged application and should be - ignored, unless GDB wants to hear about thread exits. */ - if (cs.report_thread_events - || last_thread_of_process_p (pid_of (thread))) - { - /* Since events are serialized to GDB core, and we can't - report this one right now. Leave the status pending for - the next time we're able to report it. */ - mark_lwp_dead (child, wstat); - return child; - } - else - { - delete_lwp (child); - return NULL; - } - } - - gdb_assert (WIFSTOPPED (wstat)); - - if (WIFSTOPPED (wstat)) - { - struct process_info *proc; - - /* Architecture-specific setup after inferior is running. */ - proc = find_process_pid (pid_of (thread)); - if (proc->tdesc == NULL) - { - if (proc->attached) - { - /* This needs to happen after we have attached to the - inferior and it is stopped for the first time, but - before we access any inferior registers. */ - linux_arch_setup_thread (thread); - } - else - { - /* The process is started, but GDBserver will do - architecture-specific setup after the program stops at - the first instruction. */ - child->status_pending_p = 1; - child->status_pending = wstat; - return child; - } - } - } - - if (WIFSTOPPED (wstat) && child->must_set_ptrace_flags) - { - struct process_info *proc = find_process_pid (pid_of (thread)); - int options = linux_low_ptrace_options (proc->attached); - - linux_enable_event_reporting (lwpid, options); - child->must_set_ptrace_flags = 0; - } - - /* Always update syscall_state, even if it will be filtered later. */ - if (WIFSTOPPED (wstat) && WSTOPSIG (wstat) == SYSCALL_SIGTRAP) - { - child->syscall_state - = (child->syscall_state == TARGET_WAITKIND_SYSCALL_ENTRY - ? TARGET_WAITKIND_SYSCALL_RETURN - : TARGET_WAITKIND_SYSCALL_ENTRY); - } - else - { - /* Almost all other ptrace-stops are known to be outside of system - calls, with further exceptions in handle_extended_wait. */ - child->syscall_state = TARGET_WAITKIND_IGNORE; - } - - /* Be careful to not overwrite stop_pc until save_stop_reason is - called. */ - if (WIFSTOPPED (wstat) && WSTOPSIG (wstat) == SIGTRAP - && linux_is_extended_waitstatus (wstat)) - { - child->stop_pc = get_pc (child); - if (handle_extended_wait (&child, wstat)) - { - /* The event has been handled, so just return without - reporting it. */ - return NULL; - } - } - - if (linux_wstatus_maybe_breakpoint (wstat)) - { - if (save_stop_reason (child)) - have_stop_pc = 1; - } - - if (!have_stop_pc) - child->stop_pc = get_pc (child); - - if (WIFSTOPPED (wstat) && WSTOPSIG (wstat) == SIGSTOP - && child->stop_expected) - { - if (debug_threads) - debug_printf ("Expected stop.\n"); - child->stop_expected = 0; - - if (thread->last_resume_kind == resume_stop) - { - /* We want to report the stop to the core. Treat the - SIGSTOP as a normal event. */ - if (debug_threads) - debug_printf ("LLW: resume_stop SIGSTOP caught for %s.\n", - target_pid_to_str (ptid_of (thread))); - } - else if (stopping_threads != NOT_STOPPING_THREADS) - { - /* Stopping threads. We don't want this SIGSTOP to end up - pending. */ - if (debug_threads) - debug_printf ("LLW: SIGSTOP caught for %s " - "while stopping threads.\n", - target_pid_to_str (ptid_of (thread))); - return NULL; - } - else - { - /* This is a delayed SIGSTOP. Filter out the event. */ - if (debug_threads) - debug_printf ("LLW: %s %s, 0, 0 (discard delayed SIGSTOP)\n", - child->stepping ? "step" : "continue", - target_pid_to_str (ptid_of (thread))); - - linux_resume_one_lwp (child, child->stepping, 0, NULL); - return NULL; - } - } - - child->status_pending_p = 1; - child->status_pending = wstat; - return child; -} - -/* Return true if THREAD is doing hardware single step. */ - -static int -maybe_hw_step (struct thread_info *thread) -{ - if (can_hardware_single_step ()) - return 1; - else - { - /* GDBserver must insert single-step breakpoint for software - single step. */ - gdb_assert (has_single_step_breakpoints (thread)); - return 0; - } -} - -/* Resume LWPs that are currently stopped without any pending status - to report, but are resumed from the core's perspective. */ - -static void -resume_stopped_resumed_lwps (thread_info *thread) -{ - struct lwp_info *lp = get_thread_lwp (thread); - - if (lp->stopped - && !lp->suspended - && !lp->status_pending_p - && thread->last_status.kind == TARGET_WAITKIND_IGNORE) - { - int step = 0; - - if (thread->last_resume_kind == resume_step) - step = maybe_hw_step (thread); - - if (debug_threads) - debug_printf ("RSRL: resuming stopped-resumed LWP %s at %s: step=%d\n", - target_pid_to_str (ptid_of (thread)), - paddress (lp->stop_pc), - step); - - linux_resume_one_lwp (lp, step, GDB_SIGNAL_0, NULL); - } -} - -/* Wait for an event from child(ren) WAIT_PTID, and return any that - match FILTER_PTID (leaving others pending). The PTIDs can be: - minus_one_ptid, to specify any child; a pid PTID, specifying all - lwps of a thread group; or a PTID representing a single lwp. Store - the stop status through the status pointer WSTAT. OPTIONS is - passed to the waitpid call. Return 0 if no event was found and - OPTIONS contains WNOHANG. Return -1 if no unwaited-for children - was found. Return the PID of the stopped child otherwise. */ - -static int -linux_wait_for_event_filtered (ptid_t wait_ptid, ptid_t filter_ptid, - int *wstatp, int options) -{ - struct thread_info *event_thread; - struct lwp_info *event_child, *requested_child; - sigset_t block_mask, prev_mask; - - retry: - /* N.B. event_thread points to the thread_info struct that contains - event_child. Keep them in sync. */ - event_thread = NULL; - event_child = NULL; - requested_child = NULL; - - /* Check for a lwp with a pending status. */ - - if (filter_ptid == minus_one_ptid || filter_ptid.is_pid ()) - { - event_thread = find_thread_in_random ([&] (thread_info *thread) - { - return status_pending_p_callback (thread, filter_ptid); - }); - - if (event_thread != NULL) - event_child = get_thread_lwp (event_thread); - if (debug_threads && event_thread) - debug_printf ("Got a pending child %ld\n", lwpid_of (event_thread)); - } - else if (filter_ptid != null_ptid) - { - requested_child = find_lwp_pid (filter_ptid); - - if (stopping_threads == NOT_STOPPING_THREADS - && requested_child->status_pending_p - && (requested_child->collecting_fast_tracepoint - != fast_tpoint_collect_result::not_collecting)) - { - enqueue_one_deferred_signal (requested_child, - &requested_child->status_pending); - requested_child->status_pending_p = 0; - requested_child->status_pending = 0; - linux_resume_one_lwp (requested_child, 0, 0, NULL); - } - - if (requested_child->suspended - && requested_child->status_pending_p) - { - internal_error (__FILE__, __LINE__, - "requesting an event out of a" - " suspended child?"); - } - - if (requested_child->status_pending_p) - { - event_child = requested_child; - event_thread = get_lwp_thread (event_child); - } - } - - if (event_child != NULL) - { - if (debug_threads) - debug_printf ("Got an event from pending child %ld (%04x)\n", - lwpid_of (event_thread), event_child->status_pending); - *wstatp = event_child->status_pending; - event_child->status_pending_p = 0; - event_child->status_pending = 0; - current_thread = event_thread; - return lwpid_of (event_thread); - } - - /* But if we don't find a pending event, we'll have to wait. - - We only enter this loop if no process has a pending wait status. - Thus any action taken in response to a wait status inside this - loop is responding as soon as we detect the status, not after any - pending events. */ - - /* Make sure SIGCHLD is blocked until the sigsuspend below. Block - all signals while here. */ - sigfillset (&block_mask); - gdb_sigmask (SIG_BLOCK, &block_mask, &prev_mask); - - /* Always pull all events out of the kernel. We'll randomly select - an event LWP out of all that have events, to prevent - starvation. */ - while (event_child == NULL) - { - pid_t ret = 0; - - /* Always use -1 and WNOHANG, due to couple of a kernel/ptrace - quirks: - - - If the thread group leader exits while other threads in the - thread group still exist, waitpid(TGID, ...) hangs. That - waitpid won't return an exit status until the other threads - in the group are reaped. - - - When a non-leader thread execs, that thread just vanishes - without reporting an exit (so we'd hang if we waited for it - explicitly in that case). The exec event is reported to - the TGID pid. */ - errno = 0; - ret = my_waitpid (-1, wstatp, options | WNOHANG); - - if (debug_threads) - debug_printf ("LWFE: waitpid(-1, ...) returned %d, %s\n", - ret, errno ? safe_strerror (errno) : "ERRNO-OK"); - - if (ret > 0) - { - if (debug_threads) - { - debug_printf ("LLW: waitpid %ld received %s\n", - (long) ret, status_to_str (*wstatp)); - } - - /* Filter all events. IOW, leave all events pending. We'll - randomly select an event LWP out of all that have events - below. */ - linux_low_filter_event (ret, *wstatp); - /* Retry until nothing comes out of waitpid. A single - SIGCHLD can indicate more than one child stopped. */ - continue; - } - - /* Now that we've pulled all events out of the kernel, resume - LWPs that don't have an interesting event to report. */ - if (stopping_threads == NOT_STOPPING_THREADS) - for_each_thread (resume_stopped_resumed_lwps); - - /* ... and find an LWP with a status to report to the core, if - any. */ - event_thread = find_thread_in_random ([&] (thread_info *thread) - { - return status_pending_p_callback (thread, filter_ptid); - }); - - if (event_thread != NULL) - { - event_child = get_thread_lwp (event_thread); - *wstatp = event_child->status_pending; - event_child->status_pending_p = 0; - event_child->status_pending = 0; - break; - } - - /* Check for zombie thread group leaders. Those can't be reaped - until all other threads in the thread group are. */ - check_zombie_leaders (); - - auto not_stopped = [&] (thread_info *thread) - { - return not_stopped_callback (thread, wait_ptid); - }; - - /* If there are no resumed children left in the set of LWPs we - want to wait for, bail. We can't just block in - waitpid/sigsuspend, because lwps might have been left stopped - in trace-stop state, and we'd be stuck forever waiting for - their status to change (which would only happen if we resumed - them). Even if WNOHANG is set, this return code is preferred - over 0 (below), as it is more detailed. */ - if (find_thread (not_stopped) == NULL) - { - if (debug_threads) - debug_printf ("LLW: exit (no unwaited-for LWP)\n"); - gdb_sigmask (SIG_SETMASK, &prev_mask, NULL); - return -1; - } - - /* No interesting event to report to the caller. */ - if ((options & WNOHANG)) - { - if (debug_threads) - debug_printf ("WNOHANG set, no event found\n"); - - gdb_sigmask (SIG_SETMASK, &prev_mask, NULL); - return 0; - } - - /* Block until we get an event reported with SIGCHLD. */ - if (debug_threads) - debug_printf ("sigsuspend'ing\n"); - - sigsuspend (&prev_mask); - gdb_sigmask (SIG_SETMASK, &prev_mask, NULL); - goto retry; - } - - gdb_sigmask (SIG_SETMASK, &prev_mask, NULL); - - current_thread = event_thread; - - return lwpid_of (event_thread); -} - -/* Wait for an event from child(ren) PTID. PTIDs can be: - minus_one_ptid, to specify any child; a pid PTID, specifying all - lwps of a thread group; or a PTID representing a single lwp. Store - the stop status through the status pointer WSTAT. OPTIONS is - passed to the waitpid call. Return 0 if no event was found and - OPTIONS contains WNOHANG. Return -1 if no unwaited-for children - was found. Return the PID of the stopped child otherwise. */ - -static int -linux_wait_for_event (ptid_t ptid, int *wstatp, int options) -{ - return linux_wait_for_event_filtered (ptid, ptid, wstatp, options); -} - -/* Select one LWP out of those that have events pending. */ - -static void -select_event_lwp (struct lwp_info **orig_lp) -{ - struct thread_info *event_thread = NULL; - - /* In all-stop, give preference to the LWP that is being - single-stepped. There will be at most one, and it's the LWP that - the core is most interested in. If we didn't do this, then we'd - have to handle pending step SIGTRAPs somehow in case the core - later continues the previously-stepped thread, otherwise we'd - report the pending SIGTRAP, and the core, not having stepped the - thread, wouldn't understand what the trap was for, and therefore - would report it to the user as a random signal. */ - if (!non_stop) - { - event_thread = find_thread ([] (thread_info *thread) - { - lwp_info *lp = get_thread_lwp (thread); - - return (thread->last_status.kind == TARGET_WAITKIND_IGNORE - && thread->last_resume_kind == resume_step - && lp->status_pending_p); - }); - - if (event_thread != NULL) - { - if (debug_threads) - debug_printf ("SEL: Select single-step %s\n", - target_pid_to_str (ptid_of (event_thread))); - } - } - if (event_thread == NULL) - { - /* No single-stepping LWP. Select one at random, out of those - which have had events. */ - - event_thread = find_thread_in_random ([&] (thread_info *thread) - { - lwp_info *lp = get_thread_lwp (thread); - - /* Only resumed LWPs that have an event pending. */ - return (thread->last_status.kind == TARGET_WAITKIND_IGNORE - && lp->status_pending_p); - }); - } - - if (event_thread != NULL) - { - struct lwp_info *event_lp = get_thread_lwp (event_thread); - - /* Switch the event LWP. */ - *orig_lp = event_lp; - } -} - -/* Decrement the suspend count of all LWPs, except EXCEPT, if non - NULL. */ - -static void -unsuspend_all_lwps (struct lwp_info *except) -{ - for_each_thread ([&] (thread_info *thread) - { - lwp_info *lwp = get_thread_lwp (thread); - - if (lwp != except) - lwp_suspended_decr (lwp); - }); -} - -static void move_out_of_jump_pad_callback (thread_info *thread); -static bool stuck_in_jump_pad_callback (thread_info *thread); -static bool lwp_running (thread_info *thread); -static ptid_t linux_wait_1 (ptid_t ptid, - struct target_waitstatus *ourstatus, - int target_options); - -/* Stabilize threads (move out of jump pads). - - If a thread is midway collecting a fast tracepoint, we need to - finish the collection and move it out of the jump pad before - reporting the signal. - - This avoids recursion while collecting (when a signal arrives - midway, and the signal handler itself collects), which would trash - the trace buffer. In case the user set a breakpoint in a signal - handler, this avoids the backtrace showing the jump pad, etc.. - Most importantly, there are certain things we can't do safely if - threads are stopped in a jump pad (or in its callee's). For - example: - - - starting a new trace run. A thread still collecting the - previous run, could trash the trace buffer when resumed. The trace - buffer control structures would have been reset but the thread had - no way to tell. The thread could even midway memcpy'ing to the - buffer, which would mean that when resumed, it would clobber the - trace buffer that had been set for a new run. - - - we can't rewrite/reuse the jump pads for new tracepoints - safely. Say you do tstart while a thread is stopped midway while - collecting. When the thread is later resumed, it finishes the - collection, and returns to the jump pad, to execute the original - instruction that was under the tracepoint jump at the time the - older run had been started. If the jump pad had been rewritten - since for something else in the new run, the thread would now - execute the wrong / random instructions. */ - -static void -linux_stabilize_threads (void) -{ - thread_info *thread_stuck = find_thread (stuck_in_jump_pad_callback); - - if (thread_stuck != NULL) - { - if (debug_threads) - debug_printf ("can't stabilize, LWP %ld is stuck in jump pad\n", - lwpid_of (thread_stuck)); - return; - } - - thread_info *saved_thread = current_thread; - - stabilizing_threads = 1; - - /* Kick 'em all. */ - for_each_thread (move_out_of_jump_pad_callback); - - /* Loop until all are stopped out of the jump pads. */ - while (find_thread (lwp_running) != NULL) - { - struct target_waitstatus ourstatus; - struct lwp_info *lwp; - int wstat; - - /* Note that we go through the full wait even loop. While - moving threads out of jump pad, we need to be able to step - over internal breakpoints and such. */ - linux_wait_1 (minus_one_ptid, &ourstatus, 0); - - if (ourstatus.kind == TARGET_WAITKIND_STOPPED) - { - lwp = get_thread_lwp (current_thread); - - /* Lock it. */ - lwp_suspended_inc (lwp); - - if (ourstatus.value.sig != GDB_SIGNAL_0 - || current_thread->last_resume_kind == resume_stop) - { - wstat = W_STOPCODE (gdb_signal_to_host (ourstatus.value.sig)); - enqueue_one_deferred_signal (lwp, &wstat); - } - } - } - - unsuspend_all_lwps (NULL); - - stabilizing_threads = 0; - - current_thread = saved_thread; - - if (debug_threads) - { - thread_stuck = find_thread (stuck_in_jump_pad_callback); - - if (thread_stuck != NULL) - debug_printf ("couldn't stabilize, LWP %ld got stuck in jump pad\n", - lwpid_of (thread_stuck)); - } -} - -/* Convenience function that is called when the kernel reports an - event that is not passed out to GDB. */ - -static ptid_t -ignore_event (struct target_waitstatus *ourstatus) -{ - /* If we got an event, there may still be others, as a single - SIGCHLD can indicate more than one child stopped. This forces - another target_wait call. */ - async_file_mark (); - - ourstatus->kind = TARGET_WAITKIND_IGNORE; - return null_ptid; -} - -/* Convenience function that is called when the kernel reports an exit - event. This decides whether to report the event to GDB as a - process exit event, a thread exit event, or to suppress the - event. */ - -static ptid_t -filter_exit_event (struct lwp_info *event_child, - struct target_waitstatus *ourstatus) -{ - client_state &cs = get_client_state (); - struct thread_info *thread = get_lwp_thread (event_child); - ptid_t ptid = ptid_of (thread); - - if (!last_thread_of_process_p (pid_of (thread))) - { - if (cs.report_thread_events) - ourstatus->kind = TARGET_WAITKIND_THREAD_EXITED; - else - ourstatus->kind = TARGET_WAITKIND_IGNORE; - - delete_lwp (event_child); - } - return ptid; -} - -/* Returns 1 if GDB is interested in any event_child syscalls. */ - -static int -gdb_catching_syscalls_p (struct lwp_info *event_child) -{ - struct thread_info *thread = get_lwp_thread (event_child); - struct process_info *proc = get_thread_process (thread); - - return !proc->syscalls_to_catch.empty (); -} - -/* Returns 1 if GDB is interested in the event_child syscall. - Only to be called when stopped reason is SYSCALL_SIGTRAP. */ - -static int -gdb_catch_this_syscall_p (struct lwp_info *event_child) -{ - int sysno; - struct thread_info *thread = get_lwp_thread (event_child); - struct process_info *proc = get_thread_process (thread); - - if (proc->syscalls_to_catch.empty ()) - return 0; - - if (proc->syscalls_to_catch[0] == ANY_SYSCALL) - return 1; - - get_syscall_trapinfo (event_child, &sysno); - - for (int iter : proc->syscalls_to_catch) - if (iter == sysno) - return 1; - - return 0; -} - -/* Wait for process, returns status. */ - -static ptid_t -linux_wait_1 (ptid_t ptid, - struct target_waitstatus *ourstatus, int target_options) -{ - client_state &cs = get_client_state (); - int w; - struct lwp_info *event_child; - int options; - int pid; - int step_over_finished; - int bp_explains_trap; - int maybe_internal_trap; - int report_to_gdb; - int trace_event; - int in_step_range; - int any_resumed; - - if (debug_threads) - { - debug_enter (); - debug_printf ("linux_wait_1: [%s]\n", target_pid_to_str (ptid)); - } - - /* Translate generic target options into linux options. */ - options = __WALL; - if (target_options & TARGET_WNOHANG) - options |= WNOHANG; - - bp_explains_trap = 0; - trace_event = 0; - in_step_range = 0; - ourstatus->kind = TARGET_WAITKIND_IGNORE; - - auto status_pending_p_any = [&] (thread_info *thread) - { - return status_pending_p_callback (thread, minus_one_ptid); - }; - - auto not_stopped = [&] (thread_info *thread) - { - return not_stopped_callback (thread, minus_one_ptid); - }; - - /* Find a resumed LWP, if any. */ - if (find_thread (status_pending_p_any) != NULL) - any_resumed = 1; - else if (find_thread (not_stopped) != NULL) - any_resumed = 1; - else - any_resumed = 0; - - if (step_over_bkpt == null_ptid) - pid = linux_wait_for_event (ptid, &w, options); - else - { - if (debug_threads) - debug_printf ("step_over_bkpt set [%s], doing a blocking wait\n", - target_pid_to_str (step_over_bkpt)); - pid = linux_wait_for_event (step_over_bkpt, &w, options & ~WNOHANG); - } - - if (pid == 0 || (pid == -1 && !any_resumed)) - { - gdb_assert (target_options & TARGET_WNOHANG); - - if (debug_threads) - { - debug_printf ("linux_wait_1 ret = null_ptid, " - "TARGET_WAITKIND_IGNORE\n"); - debug_exit (); - } - - ourstatus->kind = TARGET_WAITKIND_IGNORE; - return null_ptid; - } - else if (pid == -1) - { - if (debug_threads) - { - debug_printf ("linux_wait_1 ret = null_ptid, " - "TARGET_WAITKIND_NO_RESUMED\n"); - debug_exit (); - } - - ourstatus->kind = TARGET_WAITKIND_NO_RESUMED; - return null_ptid; - } - - event_child = get_thread_lwp (current_thread); - - /* linux_wait_for_event only returns an exit status for the last - child of a process. Report it. */ - if (WIFEXITED (w) || WIFSIGNALED (w)) - { - if (WIFEXITED (w)) - { - ourstatus->kind = TARGET_WAITKIND_EXITED; - ourstatus->value.integer = WEXITSTATUS (w); - - if (debug_threads) - { - debug_printf ("linux_wait_1 ret = %s, exited with " - "retcode %d\n", - target_pid_to_str (ptid_of (current_thread)), - WEXITSTATUS (w)); - debug_exit (); - } - } - else - { - ourstatus->kind = TARGET_WAITKIND_SIGNALLED; - ourstatus->value.sig = gdb_signal_from_host (WTERMSIG (w)); - - if (debug_threads) - { - debug_printf ("linux_wait_1 ret = %s, terminated with " - "signal %d\n", - target_pid_to_str (ptid_of (current_thread)), - WTERMSIG (w)); - debug_exit (); - } - } - - if (ourstatus->kind == TARGET_WAITKIND_EXITED) - return filter_exit_event (event_child, ourstatus); - - return ptid_of (current_thread); - } - - /* If step-over executes a breakpoint instruction, in the case of a - hardware single step it means a gdb/gdbserver breakpoint had been - planted on top of a permanent breakpoint, in the case of a software - single step it may just mean that gdbserver hit the reinsert breakpoint. - The PC has been adjusted by save_stop_reason to point at - the breakpoint address. - So in the case of the hardware single step advance the PC manually - past the breakpoint and in the case of software single step advance only - if it's not the single_step_breakpoint we are hitting. - This avoids that a program would keep trapping a permanent breakpoint - forever. */ - if (step_over_bkpt != null_ptid - && event_child->stop_reason == TARGET_STOPPED_BY_SW_BREAKPOINT - && (event_child->stepping - || !single_step_breakpoint_inserted_here (event_child->stop_pc))) - { - int increment_pc = 0; - int breakpoint_kind = 0; - CORE_ADDR stop_pc = event_child->stop_pc; - - breakpoint_kind = - the_target->breakpoint_kind_from_current_state (&stop_pc); - the_target->sw_breakpoint_from_kind (breakpoint_kind, &increment_pc); - - if (debug_threads) - { - debug_printf ("step-over for %s executed software breakpoint\n", - target_pid_to_str (ptid_of (current_thread))); - } - - if (increment_pc != 0) - { - struct regcache *regcache - = get_thread_regcache (current_thread, 1); - - event_child->stop_pc += increment_pc; - (*the_low_target.set_pc) (regcache, event_child->stop_pc); - - if (!(*the_low_target.breakpoint_at) (event_child->stop_pc)) - event_child->stop_reason = TARGET_STOPPED_BY_NO_REASON; - } - } - - /* If this event was not handled before, and is not a SIGTRAP, we - report it. SIGILL and SIGSEGV are also treated as traps in case - a breakpoint is inserted at the current PC. If this target does - not support internal breakpoints at all, we also report the - SIGTRAP without further processing; it's of no concern to us. */ - maybe_internal_trap - = (supports_breakpoints () - && (WSTOPSIG (w) == SIGTRAP - || ((WSTOPSIG (w) == SIGILL - || WSTOPSIG (w) == SIGSEGV) - && (*the_low_target.breakpoint_at) (event_child->stop_pc)))); - - if (maybe_internal_trap) - { - /* Handle anything that requires bookkeeping before deciding to - report the event or continue waiting. */ - - /* First check if we can explain the SIGTRAP with an internal - breakpoint, or if we should possibly report the event to GDB. - Do this before anything that may remove or insert a - breakpoint. */ - bp_explains_trap = breakpoint_inserted_here (event_child->stop_pc); - - /* We have a SIGTRAP, possibly a step-over dance has just - finished. If so, tweak the state machine accordingly, - reinsert breakpoints and delete any single-step - breakpoints. */ - step_over_finished = finish_step_over (event_child); - - /* Now invoke the callbacks of any internal breakpoints there. */ - check_breakpoints (event_child->stop_pc); - - /* Handle tracepoint data collecting. This may overflow the - trace buffer, and cause a tracing stop, removing - breakpoints. */ - trace_event = handle_tracepoints (event_child); - - if (bp_explains_trap) - { - if (debug_threads) - debug_printf ("Hit a gdbserver breakpoint.\n"); - } - } - else - { - /* We have some other signal, possibly a step-over dance was in - progress, and it should be cancelled too. */ - step_over_finished = finish_step_over (event_child); - } - - /* We have all the data we need. Either report the event to GDB, or - resume threads and keep waiting for more. */ - - /* If we're collecting a fast tracepoint, finish the collection and - move out of the jump pad before delivering a signal. See - linux_stabilize_threads. */ - - if (WIFSTOPPED (w) - && WSTOPSIG (w) != SIGTRAP - && supports_fast_tracepoints () - && agent_loaded_p ()) - { - if (debug_threads) - debug_printf ("Got signal %d for LWP %ld. Check if we need " - "to defer or adjust it.\n", - WSTOPSIG (w), lwpid_of (current_thread)); - - /* Allow debugging the jump pad itself. */ - if (current_thread->last_resume_kind != resume_step - && maybe_move_out_of_jump_pad (event_child, &w)) - { - enqueue_one_deferred_signal (event_child, &w); - - if (debug_threads) - debug_printf ("Signal %d for LWP %ld deferred (in jump pad)\n", - WSTOPSIG (w), lwpid_of (current_thread)); - - linux_resume_one_lwp (event_child, 0, 0, NULL); - - if (debug_threads) - debug_exit (); - return ignore_event (ourstatus); - } - } - - if (event_child->collecting_fast_tracepoint - != fast_tpoint_collect_result::not_collecting) - { - if (debug_threads) - debug_printf ("LWP %ld was trying to move out of the jump pad (%d). " - "Check if we're already there.\n", - lwpid_of (current_thread), - (int) event_child->collecting_fast_tracepoint); - - trace_event = 1; - - event_child->collecting_fast_tracepoint - = linux_fast_tracepoint_collecting (event_child, NULL); - - if (event_child->collecting_fast_tracepoint - != fast_tpoint_collect_result::before_insn) - { - /* No longer need this breakpoint. */ - if (event_child->exit_jump_pad_bkpt != NULL) - { - if (debug_threads) - debug_printf ("No longer need exit-jump-pad bkpt; removing it." - "stopping all threads momentarily.\n"); - - /* Other running threads could hit this breakpoint. - We don't handle moribund locations like GDB does, - instead we always pause all threads when removing - breakpoints, so that any step-over or - decr_pc_after_break adjustment is always taken - care of while the breakpoint is still - inserted. */ - stop_all_lwps (1, event_child); - - delete_breakpoint (event_child->exit_jump_pad_bkpt); - event_child->exit_jump_pad_bkpt = NULL; - - unstop_all_lwps (1, event_child); - - gdb_assert (event_child->suspended >= 0); - } - } - - if (event_child->collecting_fast_tracepoint - == fast_tpoint_collect_result::not_collecting) - { - if (debug_threads) - debug_printf ("fast tracepoint finished " - "collecting successfully.\n"); - - /* We may have a deferred signal to report. */ - if (dequeue_one_deferred_signal (event_child, &w)) - { - if (debug_threads) - debug_printf ("dequeued one signal.\n"); - } - else - { - if (debug_threads) - debug_printf ("no deferred signals.\n"); - - if (stabilizing_threads) - { - ourstatus->kind = TARGET_WAITKIND_STOPPED; - ourstatus->value.sig = GDB_SIGNAL_0; - - if (debug_threads) - { - debug_printf ("linux_wait_1 ret = %s, stopped " - "while stabilizing threads\n", - target_pid_to_str (ptid_of (current_thread))); - debug_exit (); - } - - return ptid_of (current_thread); - } - } - } - } - - /* Check whether GDB would be interested in this event. */ - - /* Check if GDB is interested in this syscall. */ - if (WIFSTOPPED (w) - && WSTOPSIG (w) == SYSCALL_SIGTRAP - && !gdb_catch_this_syscall_p (event_child)) - { - if (debug_threads) - { - debug_printf ("Ignored syscall for LWP %ld.\n", - lwpid_of (current_thread)); - } - - linux_resume_one_lwp (event_child, event_child->stepping, - 0, NULL); - - if (debug_threads) - debug_exit (); - return ignore_event (ourstatus); - } - - /* If GDB is not interested in this signal, don't stop other - threads, and don't report it to GDB. Just resume the inferior - right away. We do this for threading-related signals as well as - any that GDB specifically requested we ignore. But never ignore - SIGSTOP if we sent it ourselves, and do not ignore signals when - stepping - they may require special handling to skip the signal - handler. Also never ignore signals that could be caused by a - breakpoint. */ - if (WIFSTOPPED (w) - && current_thread->last_resume_kind != resume_step - && ( -#if defined (USE_THREAD_DB) && !defined (__ANDROID__) - (current_process ()->priv->thread_db != NULL - && (WSTOPSIG (w) == __SIGRTMIN - || WSTOPSIG (w) == __SIGRTMIN + 1)) - || -#endif - (cs.pass_signals[gdb_signal_from_host (WSTOPSIG (w))] - && !(WSTOPSIG (w) == SIGSTOP - && current_thread->last_resume_kind == resume_stop) - && !linux_wstatus_maybe_breakpoint (w)))) - { - siginfo_t info, *info_p; - - if (debug_threads) - debug_printf ("Ignored signal %d for LWP %ld.\n", - WSTOPSIG (w), lwpid_of (current_thread)); - - if (ptrace (PTRACE_GETSIGINFO, lwpid_of (current_thread), - (PTRACE_TYPE_ARG3) 0, &info) == 0) - info_p = &info; - else - info_p = NULL; - - if (step_over_finished) - { - /* We cancelled this thread's step-over above. We still - need to unsuspend all other LWPs, and set them back - running again while the signal handler runs. */ - unsuspend_all_lwps (event_child); - - /* Enqueue the pending signal info so that proceed_all_lwps - doesn't lose it. */ - enqueue_pending_signal (event_child, WSTOPSIG (w), info_p); - - proceed_all_lwps (); - } - else - { - linux_resume_one_lwp (event_child, event_child->stepping, - WSTOPSIG (w), info_p); - } - - if (debug_threads) - debug_exit (); - - return ignore_event (ourstatus); - } - - /* Note that all addresses are always "out of the step range" when - there's no range to begin with. */ - in_step_range = lwp_in_step_range (event_child); - - /* If GDB wanted this thread to single step, and the thread is out - of the step range, we always want to report the SIGTRAP, and let - GDB handle it. Watchpoints should always be reported. So should - signals we can't explain. A SIGTRAP we can't explain could be a - GDB breakpoint --- we may or not support Z0 breakpoints. If we - do, we're be able to handle GDB breakpoints on top of internal - breakpoints, by handling the internal breakpoint and still - reporting the event to GDB. If we don't, we're out of luck, GDB - won't see the breakpoint hit. If we see a single-step event but - the thread should be continuing, don't pass the trap to gdb. - That indicates that we had previously finished a single-step but - left the single-step pending -- see - complete_ongoing_step_over. */ - report_to_gdb = (!maybe_internal_trap - || (current_thread->last_resume_kind == resume_step - && !in_step_range) - || event_child->stop_reason == TARGET_STOPPED_BY_WATCHPOINT - || (!in_step_range - && !bp_explains_trap - && !trace_event - && !step_over_finished - && !(current_thread->last_resume_kind == resume_continue - && event_child->stop_reason == TARGET_STOPPED_BY_SINGLE_STEP)) - || (gdb_breakpoint_here (event_child->stop_pc) - && gdb_condition_true_at_breakpoint (event_child->stop_pc) - && gdb_no_commands_at_breakpoint (event_child->stop_pc)) - || event_child->waitstatus.kind != TARGET_WAITKIND_IGNORE); - - run_breakpoint_commands (event_child->stop_pc); - - /* We found no reason GDB would want us to stop. We either hit one - of our own breakpoints, or finished an internal step GDB - shouldn't know about. */ - if (!report_to_gdb) - { - if (debug_threads) - { - if (bp_explains_trap) - debug_printf ("Hit a gdbserver breakpoint.\n"); - if (step_over_finished) - debug_printf ("Step-over finished.\n"); - if (trace_event) - debug_printf ("Tracepoint event.\n"); - if (lwp_in_step_range (event_child)) - debug_printf ("Range stepping pc 0x%s [0x%s, 0x%s).\n", - paddress (event_child->stop_pc), - paddress (event_child->step_range_start), - paddress (event_child->step_range_end)); - } - - /* We're not reporting this breakpoint to GDB, so apply the - decr_pc_after_break adjustment to the inferior's regcache - ourselves. */ - - if (the_low_target.set_pc != NULL) - { - struct regcache *regcache - = get_thread_regcache (current_thread, 1); - (*the_low_target.set_pc) (regcache, event_child->stop_pc); - } - - if (step_over_finished) - { - /* If we have finished stepping over a breakpoint, we've - stopped and suspended all LWPs momentarily except the - stepping one. This is where we resume them all again. - We're going to keep waiting, so use proceed, which - handles stepping over the next breakpoint. */ - unsuspend_all_lwps (event_child); - } - else - { - /* Remove the single-step breakpoints if any. Note that - there isn't single-step breakpoint if we finished stepping - over. */ - if (can_software_single_step () - && has_single_step_breakpoints (current_thread)) - { - stop_all_lwps (0, event_child); - delete_single_step_breakpoints (current_thread); - unstop_all_lwps (0, event_child); - } - } - - if (debug_threads) - debug_printf ("proceeding all threads.\n"); - proceed_all_lwps (); - - if (debug_threads) - debug_exit (); - - return ignore_event (ourstatus); - } - - if (debug_threads) - { - if (event_child->waitstatus.kind != TARGET_WAITKIND_IGNORE) - { - std::string str - = target_waitstatus_to_string (&event_child->waitstatus); - - debug_printf ("LWP %ld: extended event with waitstatus %s\n", - lwpid_of (get_lwp_thread (event_child)), str.c_str ()); - } - if (current_thread->last_resume_kind == resume_step) - { - if (event_child->step_range_start == event_child->step_range_end) - debug_printf ("GDB wanted to single-step, reporting event.\n"); - else if (!lwp_in_step_range (event_child)) - debug_printf ("Out of step range, reporting event.\n"); - } - if (event_child->stop_reason == TARGET_STOPPED_BY_WATCHPOINT) - debug_printf ("Stopped by watchpoint.\n"); - else if (gdb_breakpoint_here (event_child->stop_pc)) - debug_printf ("Stopped by GDB breakpoint.\n"); - if (debug_threads) - debug_printf ("Hit a non-gdbserver trap event.\n"); - } - - /* Alright, we're going to report a stop. */ - - /* Remove single-step breakpoints. */ - if (can_software_single_step ()) - { - /* Remove single-step breakpoints or not. It it is true, stop all - lwps, so that other threads won't hit the breakpoint in the - staled memory. */ - int remove_single_step_breakpoints_p = 0; - - if (non_stop) - { - remove_single_step_breakpoints_p - = has_single_step_breakpoints (current_thread); - } - else - { - /* In all-stop, a stop reply cancels all previous resume - requests. Delete all single-step breakpoints. */ - - find_thread ([&] (thread_info *thread) { - if (has_single_step_breakpoints (thread)) - { - remove_single_step_breakpoints_p = 1; - return true; - } - - return false; - }); - } - - if (remove_single_step_breakpoints_p) - { - /* If we remove single-step breakpoints from memory, stop all lwps, - so that other threads won't hit the breakpoint in the staled - memory. */ - stop_all_lwps (0, event_child); - - if (non_stop) - { - gdb_assert (has_single_step_breakpoints (current_thread)); - delete_single_step_breakpoints (current_thread); - } - else - { - for_each_thread ([] (thread_info *thread){ - if (has_single_step_breakpoints (thread)) - delete_single_step_breakpoints (thread); - }); - } - - unstop_all_lwps (0, event_child); - } - } - - if (!stabilizing_threads) - { - /* In all-stop, stop all threads. */ - if (!non_stop) - stop_all_lwps (0, NULL); - - if (step_over_finished) - { - if (!non_stop) - { - /* If we were doing a step-over, all other threads but - the stepping one had been paused in start_step_over, - with their suspend counts incremented. We don't want - to do a full unstop/unpause, because we're in - all-stop mode (so we want threads stopped), but we - still need to unsuspend the other threads, to - decrement their `suspended' count back. */ - unsuspend_all_lwps (event_child); - } - else - { - /* If we just finished a step-over, then all threads had - been momentarily paused. In all-stop, that's fine, - we want threads stopped by now anyway. In non-stop, - we need to re-resume threads that GDB wanted to be - running. */ - unstop_all_lwps (1, event_child); - } - } - - /* If we're not waiting for a specific LWP, choose an event LWP - from among those that have had events. Giving equal priority - to all LWPs that have had events helps prevent - starvation. */ - if (ptid == minus_one_ptid) - { - event_child->status_pending_p = 1; - event_child->status_pending = w; - - select_event_lwp (&event_child); - - /* current_thread and event_child must stay in sync. */ - current_thread = get_lwp_thread (event_child); - - event_child->status_pending_p = 0; - w = event_child->status_pending; - } - - - /* Stabilize threads (move out of jump pads). */ - if (!non_stop) - stabilize_threads (); - } - else - { - /* If we just finished a step-over, then all threads had been - momentarily paused. In all-stop, that's fine, we want - threads stopped by now anyway. In non-stop, we need to - re-resume threads that GDB wanted to be running. */ - if (step_over_finished) - unstop_all_lwps (1, event_child); - } - - if (event_child->waitstatus.kind != TARGET_WAITKIND_IGNORE) - { - /* If the reported event is an exit, fork, vfork or exec, let - GDB know. */ - - /* Break the unreported fork relationship chain. */ - if (event_child->waitstatus.kind == TARGET_WAITKIND_FORKED - || event_child->waitstatus.kind == TARGET_WAITKIND_VFORKED) - { - event_child->fork_relative->fork_relative = NULL; - event_child->fork_relative = NULL; - } - - *ourstatus = event_child->waitstatus; - /* Clear the event lwp's waitstatus since we handled it already. */ - event_child->waitstatus.kind = TARGET_WAITKIND_IGNORE; - } - else - ourstatus->kind = TARGET_WAITKIND_STOPPED; - - /* Now that we've selected our final event LWP, un-adjust its PC if - it was a software breakpoint, and the client doesn't know we can - adjust the breakpoint ourselves. */ - if (event_child->stop_reason == TARGET_STOPPED_BY_SW_BREAKPOINT - && !cs.swbreak_feature) - { - int decr_pc = the_low_target.decr_pc_after_break; - - if (decr_pc != 0) - { - struct regcache *regcache - = get_thread_regcache (current_thread, 1); - (*the_low_target.set_pc) (regcache, event_child->stop_pc + decr_pc); - } - } - - if (WSTOPSIG (w) == SYSCALL_SIGTRAP) - { - get_syscall_trapinfo (event_child, - &ourstatus->value.syscall_number); - ourstatus->kind = event_child->syscall_state; - } - else if (current_thread->last_resume_kind == resume_stop - && WSTOPSIG (w) == SIGSTOP) - { - /* A thread that has been requested to stop by GDB with vCont;t, - and it stopped cleanly, so report as SIG0. The use of - SIGSTOP is an implementation detail. */ - ourstatus->value.sig = GDB_SIGNAL_0; - } - else if (current_thread->last_resume_kind == resume_stop - && WSTOPSIG (w) != SIGSTOP) - { - /* A thread that has been requested to stop by GDB with vCont;t, - but, it stopped for other reasons. */ - ourstatus->value.sig = gdb_signal_from_host (WSTOPSIG (w)); - } - else if (ourstatus->kind == TARGET_WAITKIND_STOPPED) - { - ourstatus->value.sig = gdb_signal_from_host (WSTOPSIG (w)); - } - - gdb_assert (step_over_bkpt == null_ptid); - - if (debug_threads) - { - debug_printf ("linux_wait_1 ret = %s, %d, %d\n", - target_pid_to_str (ptid_of (current_thread)), - ourstatus->kind, ourstatus->value.sig); - debug_exit (); - } - - if (ourstatus->kind == TARGET_WAITKIND_EXITED) - return filter_exit_event (event_child, ourstatus); - - return ptid_of (current_thread); -} - -/* Get rid of any pending event in the pipe. */ -static void -async_file_flush (void) -{ - int ret; - char buf; - - do - ret = read (linux_event_pipe[0], &buf, 1); - while (ret >= 0 || (ret == -1 && errno == EINTR)); -} - -/* Put something in the pipe, so the event loop wakes up. */ -static void -async_file_mark (void) -{ - int ret; - - async_file_flush (); - - do - ret = write (linux_event_pipe[1], "+", 1); - while (ret == 0 || (ret == -1 && errno == EINTR)); - - /* Ignore EAGAIN. If the pipe is full, the event loop will already - be awakened anyway. */ -} - -static ptid_t -linux_wait (ptid_t ptid, - struct target_waitstatus *ourstatus, int target_options) -{ - ptid_t event_ptid; - - /* Flush the async file first. */ - if (target_is_async_p ()) - async_file_flush (); - - do - { - event_ptid = linux_wait_1 (ptid, ourstatus, target_options); - } - while ((target_options & TARGET_WNOHANG) == 0 - && event_ptid == null_ptid - && ourstatus->kind == TARGET_WAITKIND_IGNORE); - - /* If at least one stop was reported, there may be more. A single - SIGCHLD can signal more than one child stop. */ - if (target_is_async_p () - && (target_options & TARGET_WNOHANG) != 0 - && event_ptid != null_ptid) - async_file_mark (); - - return event_ptid; -} - -/* Send a signal to an LWP. */ - -static int -kill_lwp (unsigned long lwpid, int signo) -{ - int ret; - - errno = 0; - ret = syscall (__NR_tkill, lwpid, signo); - if (errno == ENOSYS) - { - /* If tkill fails, then we are not using nptl threads, a - configuration we no longer support. */ - perror_with_name (("tkill")); - } - return ret; -} - -void -linux_stop_lwp (struct lwp_info *lwp) -{ - send_sigstop (lwp); -} - -static void -send_sigstop (struct lwp_info *lwp) -{ - int pid; - - pid = lwpid_of (get_lwp_thread (lwp)); - - /* If we already have a pending stop signal for this process, don't - send another. */ - if (lwp->stop_expected) - { - if (debug_threads) - debug_printf ("Have pending sigstop for lwp %d\n", pid); - - return; - } - - if (debug_threads) - debug_printf ("Sending sigstop to lwp %d\n", pid); - - lwp->stop_expected = 1; - kill_lwp (pid, SIGSTOP); -} - -static void -send_sigstop (thread_info *thread, lwp_info *except) -{ - struct lwp_info *lwp = get_thread_lwp (thread); - - /* Ignore EXCEPT. */ - if (lwp == except) - return; - - if (lwp->stopped) - return; - - send_sigstop (lwp); -} - -/* Increment the suspend count of an LWP, and stop it, if not stopped - yet. */ -static void -suspend_and_send_sigstop (thread_info *thread, lwp_info *except) -{ - struct lwp_info *lwp = get_thread_lwp (thread); - - /* Ignore EXCEPT. */ - if (lwp == except) - return; - - lwp_suspended_inc (lwp); - - send_sigstop (thread, except); -} - -static void -mark_lwp_dead (struct lwp_info *lwp, int wstat) -{ - /* Store the exit status for later. */ - lwp->status_pending_p = 1; - lwp->status_pending = wstat; - - /* Store in waitstatus as well, as there's nothing else to process - for this event. */ - if (WIFEXITED (wstat)) - { - lwp->waitstatus.kind = TARGET_WAITKIND_EXITED; - lwp->waitstatus.value.integer = WEXITSTATUS (wstat); - } - else if (WIFSIGNALED (wstat)) - { - lwp->waitstatus.kind = TARGET_WAITKIND_SIGNALLED; - lwp->waitstatus.value.sig = gdb_signal_from_host (WTERMSIG (wstat)); - } - - /* Prevent trying to stop it. */ - lwp->stopped = 1; - - /* No further stops are expected from a dead lwp. */ - lwp->stop_expected = 0; -} - -/* Return true if LWP has exited already, and has a pending exit event - to report to GDB. */ - -static int -lwp_is_marked_dead (struct lwp_info *lwp) -{ - return (lwp->status_pending_p - && (WIFEXITED (lwp->status_pending) - || WIFSIGNALED (lwp->status_pending))); -} - -/* Wait for all children to stop for the SIGSTOPs we just queued. */ - -static void -wait_for_sigstop (void) -{ - struct thread_info *saved_thread; - ptid_t saved_tid; - int wstat; - int ret; - - saved_thread = current_thread; - if (saved_thread != NULL) - saved_tid = saved_thread->id; - else - saved_tid = null_ptid; /* avoid bogus unused warning */ - - if (debug_threads) - debug_printf ("wait_for_sigstop: pulling events\n"); - - /* Passing NULL_PTID as filter indicates we want all events to be - left pending. Eventually this returns when there are no - unwaited-for children left. */ - ret = linux_wait_for_event_filtered (minus_one_ptid, null_ptid, - &wstat, __WALL); - gdb_assert (ret == -1); - - if (saved_thread == NULL || linux_thread_alive (saved_tid)) - current_thread = saved_thread; - else - { - if (debug_threads) - debug_printf ("Previously current thread died.\n"); - - /* We can't change the current inferior behind GDB's back, - otherwise, a subsequent command may apply to the wrong - process. */ - current_thread = NULL; - } -} - -/* Returns true if THREAD is stopped in a jump pad, and we can't - move it out, because we need to report the stop event to GDB. For - example, if the user puts a breakpoint in the jump pad, it's - because she wants to debug it. */ - -static bool -stuck_in_jump_pad_callback (thread_info *thread) -{ - struct lwp_info *lwp = get_thread_lwp (thread); - - if (lwp->suspended != 0) - { - internal_error (__FILE__, __LINE__, - "LWP %ld is suspended, suspended=%d\n", - lwpid_of (thread), lwp->suspended); - } - gdb_assert (lwp->stopped); - - /* Allow debugging the jump pad, gdb_collect, etc.. */ - return (supports_fast_tracepoints () - && agent_loaded_p () - && (gdb_breakpoint_here (lwp->stop_pc) - || lwp->stop_reason == TARGET_STOPPED_BY_WATCHPOINT - || thread->last_resume_kind == resume_step) - && (linux_fast_tracepoint_collecting (lwp, NULL) - != fast_tpoint_collect_result::not_collecting)); -} - -static void -move_out_of_jump_pad_callback (thread_info *thread) -{ - struct thread_info *saved_thread; - struct lwp_info *lwp = get_thread_lwp (thread); - int *wstat; - - if (lwp->suspended != 0) - { - internal_error (__FILE__, __LINE__, - "LWP %ld is suspended, suspended=%d\n", - lwpid_of (thread), lwp->suspended); - } - gdb_assert (lwp->stopped); - - /* For gdb_breakpoint_here. */ - saved_thread = current_thread; - current_thread = thread; - - wstat = lwp->status_pending_p ? &lwp->status_pending : NULL; - - /* Allow debugging the jump pad, gdb_collect, etc. */ - if (!gdb_breakpoint_here (lwp->stop_pc) - && lwp->stop_reason != TARGET_STOPPED_BY_WATCHPOINT - && thread->last_resume_kind != resume_step - && maybe_move_out_of_jump_pad (lwp, wstat)) - { - if (debug_threads) - debug_printf ("LWP %ld needs stabilizing (in jump pad)\n", - lwpid_of (thread)); - - if (wstat) - { - lwp->status_pending_p = 0; - enqueue_one_deferred_signal (lwp, wstat); - - if (debug_threads) - debug_printf ("Signal %d for LWP %ld deferred " - "(in jump pad)\n", - WSTOPSIG (*wstat), lwpid_of (thread)); - } - - linux_resume_one_lwp (lwp, 0, 0, NULL); - } - else - lwp_suspended_inc (lwp); - - current_thread = saved_thread; -} - -static bool -lwp_running (thread_info *thread) -{ - struct lwp_info *lwp = get_thread_lwp (thread); - - if (lwp_is_marked_dead (lwp)) - return false; - - return !lwp->stopped; -} - -/* Stop all lwps that aren't stopped yet, except EXCEPT, if not NULL. - If SUSPEND, then also increase the suspend count of every LWP, - except EXCEPT. */ - -static void -stop_all_lwps (int suspend, struct lwp_info *except) -{ - /* Should not be called recursively. */ - gdb_assert (stopping_threads == NOT_STOPPING_THREADS); - - if (debug_threads) - { - debug_enter (); - debug_printf ("stop_all_lwps (%s, except=%s)\n", - suspend ? "stop-and-suspend" : "stop", - except != NULL - ? target_pid_to_str (ptid_of (get_lwp_thread (except))) - : "none"); - } - - stopping_threads = (suspend - ? STOPPING_AND_SUSPENDING_THREADS - : STOPPING_THREADS); - - if (suspend) - for_each_thread ([&] (thread_info *thread) - { - suspend_and_send_sigstop (thread, except); - }); - else - for_each_thread ([&] (thread_info *thread) - { - send_sigstop (thread, except); - }); - - wait_for_sigstop (); - stopping_threads = NOT_STOPPING_THREADS; - - if (debug_threads) - { - debug_printf ("stop_all_lwps done, setting stopping_threads " - "back to !stopping\n"); - debug_exit (); - } -} - -/* Enqueue one signal in the chain of signals which need to be - delivered to this process on next resume. */ - -static void -enqueue_pending_signal (struct lwp_info *lwp, int signal, siginfo_t *info) -{ - struct pending_signals *p_sig = XNEW (struct pending_signals); - - p_sig->prev = lwp->pending_signals; - p_sig->signal = signal; - if (info == NULL) - memset (&p_sig->info, 0, sizeof (siginfo_t)); - else - memcpy (&p_sig->info, info, sizeof (siginfo_t)); - lwp->pending_signals = p_sig; -} - -/* Install breakpoints for software single stepping. */ - -static void -install_software_single_step_breakpoints (struct lwp_info *lwp) -{ - struct thread_info *thread = get_lwp_thread (lwp); - struct regcache *regcache = get_thread_regcache (thread, 1); - - scoped_restore save_current_thread = make_scoped_restore (¤t_thread); - - current_thread = thread; - std::vector<CORE_ADDR> next_pcs = the_low_target.get_next_pcs (regcache); - - for (CORE_ADDR pc : next_pcs) - set_single_step_breakpoint (pc, current_ptid); -} - -/* Single step via hardware or software single step. - Return 1 if hardware single stepping, 0 if software single stepping - or can't single step. */ - -static int -single_step (struct lwp_info* lwp) -{ - int step = 0; - - if (can_hardware_single_step ()) - { - step = 1; - } - else if (can_software_single_step ()) - { - install_software_single_step_breakpoints (lwp); - step = 0; - } - else - { - if (debug_threads) - debug_printf ("stepping is not implemented on this target"); - } - - return step; -} - -/* The signal can be delivered to the inferior if we are not trying to - finish a fast tracepoint collect. Since signal can be delivered in - the step-over, the program may go to signal handler and trap again - after return from the signal handler. We can live with the spurious - double traps. */ - -static int -lwp_signal_can_be_delivered (struct lwp_info *lwp) -{ - return (lwp->collecting_fast_tracepoint - == fast_tpoint_collect_result::not_collecting); -} - -/* Resume execution of LWP. If STEP is nonzero, single-step it. If - SIGNAL is nonzero, give it that signal. */ - -static void -linux_resume_one_lwp_throw (struct lwp_info *lwp, - int step, int signal, siginfo_t *info) -{ - struct thread_info *thread = get_lwp_thread (lwp); - struct thread_info *saved_thread; - int ptrace_request; - struct process_info *proc = get_thread_process (thread); - - /* Note that target description may not be initialised - (proc->tdesc == NULL) at this point because the program hasn't - stopped at the first instruction yet. It means GDBserver skips - the extra traps from the wrapper program (see option --wrapper). - Code in this function that requires register access should be - guarded by proc->tdesc == NULL or something else. */ - - if (lwp->stopped == 0) - return; - - gdb_assert (lwp->waitstatus.kind == TARGET_WAITKIND_IGNORE); - - fast_tpoint_collect_result fast_tp_collecting - = lwp->collecting_fast_tracepoint; - - gdb_assert (!stabilizing_threads - || (fast_tp_collecting - != fast_tpoint_collect_result::not_collecting)); - - /* Cancel actions that rely on GDB not changing the PC (e.g., the - user used the "jump" command, or "set $pc = foo"). */ - if (thread->while_stepping != NULL && lwp->stop_pc != get_pc (lwp)) - { - /* Collecting 'while-stepping' actions doesn't make sense - anymore. */ - release_while_stepping_state_list (thread); - } - - /* If we have pending signals or status, and a new signal, enqueue the - signal. Also enqueue the signal if it can't be delivered to the - inferior right now. */ - if (signal != 0 - && (lwp->status_pending_p - || lwp->pending_signals != NULL - || !lwp_signal_can_be_delivered (lwp))) - { - enqueue_pending_signal (lwp, signal, info); - - /* Postpone any pending signal. It was enqueued above. */ - signal = 0; - } - - if (lwp->status_pending_p) - { - if (debug_threads) - debug_printf ("Not resuming lwp %ld (%s, stop %s);" - " has pending status\n", - lwpid_of (thread), step ? "step" : "continue", - lwp->stop_expected ? "expected" : "not expected"); - return; - } - - saved_thread = current_thread; - current_thread = thread; - - /* This bit needs some thinking about. If we get a signal that - we must report while a single-step reinsert is still pending, - we often end up resuming the thread. It might be better to - (ew) allow a stack of pending events; then we could be sure that - the reinsert happened right away and not lose any signals. - - Making this stack would also shrink the window in which breakpoints are - uninserted (see comment in linux_wait_for_lwp) but not enough for - complete correctness, so it won't solve that problem. It may be - worthwhile just to solve this one, however. */ - if (lwp->bp_reinsert != 0) - { - if (debug_threads) - debug_printf (" pending reinsert at 0x%s\n", - paddress (lwp->bp_reinsert)); - - if (can_hardware_single_step ()) - { - if (fast_tp_collecting == fast_tpoint_collect_result::not_collecting) - { - if (step == 0) - warning ("BAD - reinserting but not stepping."); - if (lwp->suspended) - warning ("BAD - reinserting and suspended(%d).", - lwp->suspended); - } - } - - step = maybe_hw_step (thread); - } - - if (fast_tp_collecting == fast_tpoint_collect_result::before_insn) - { - if (debug_threads) - debug_printf ("lwp %ld wants to get out of fast tracepoint jump pad" - " (exit-jump-pad-bkpt)\n", - lwpid_of (thread)); - } - else if (fast_tp_collecting == fast_tpoint_collect_result::at_insn) - { - if (debug_threads) - debug_printf ("lwp %ld wants to get out of fast tracepoint jump pad" - " single-stepping\n", - lwpid_of (thread)); - - if (can_hardware_single_step ()) - step = 1; - else - { - internal_error (__FILE__, __LINE__, - "moving out of jump pad single-stepping" - " not implemented on this target"); - } - } - - /* If we have while-stepping actions in this thread set it stepping. - If we have a signal to deliver, it may or may not be set to - SIG_IGN, we don't know. Assume so, and allow collecting - while-stepping into a signal handler. A possible smart thing to - do would be to set an internal breakpoint at the signal return - address, continue, and carry on catching this while-stepping - action only when that breakpoint is hit. A future - enhancement. */ - if (thread->while_stepping != NULL) - { - if (debug_threads) - debug_printf ("lwp %ld has a while-stepping action -> forcing step.\n", - lwpid_of (thread)); - - step = single_step (lwp); - } - - if (proc->tdesc != NULL && the_low_target.get_pc != NULL) - { - struct regcache *regcache = get_thread_regcache (current_thread, 1); - - lwp->stop_pc = (*the_low_target.get_pc) (regcache); - - if (debug_threads) - { - debug_printf (" %s from pc 0x%lx\n", step ? "step" : "continue", - (long) lwp->stop_pc); - } - } - - /* If we have pending signals, consume one if it can be delivered to - the inferior. */ - if (lwp->pending_signals != NULL && lwp_signal_can_be_delivered (lwp)) - { - struct pending_signals **p_sig; - - p_sig = &lwp->pending_signals; - while ((*p_sig)->prev != NULL) - p_sig = &(*p_sig)->prev; - - signal = (*p_sig)->signal; - if ((*p_sig)->info.si_signo != 0) - ptrace (PTRACE_SETSIGINFO, lwpid_of (thread), (PTRACE_TYPE_ARG3) 0, - &(*p_sig)->info); - - free (*p_sig); - *p_sig = NULL; - } - - if (debug_threads) - debug_printf ("Resuming lwp %ld (%s, signal %d, stop %s)\n", - lwpid_of (thread), step ? "step" : "continue", signal, - lwp->stop_expected ? "expected" : "not expected"); - - if (the_low_target.prepare_to_resume != NULL) - the_low_target.prepare_to_resume (lwp); - - regcache_invalidate_thread (thread); - errno = 0; - lwp->stepping = step; - if (step) - ptrace_request = PTRACE_SINGLESTEP; - else if (gdb_catching_syscalls_p (lwp)) - ptrace_request = PTRACE_SYSCALL; - else - ptrace_request = PTRACE_CONT; - ptrace (ptrace_request, - lwpid_of (thread), - (PTRACE_TYPE_ARG3) 0, - /* Coerce to a uintptr_t first to avoid potential gcc warning - of coercing an 8 byte integer to a 4 byte pointer. */ - (PTRACE_TYPE_ARG4) (uintptr_t) signal); - - current_thread = saved_thread; - if (errno) - perror_with_name ("resuming thread"); - - /* Successfully resumed. Clear state that no longer makes sense, - and mark the LWP as running. Must not do this before resuming - otherwise if that fails other code will be confused. E.g., we'd - later try to stop the LWP and hang forever waiting for a stop - status. Note that we must not throw after this is cleared, - otherwise handle_zombie_lwp_error would get confused. */ - lwp->stopped = 0; - lwp->stop_reason = TARGET_STOPPED_BY_NO_REASON; -} - -/* Called when we try to resume a stopped LWP and that errors out. If - the LWP is no longer in ptrace-stopped state (meaning it's zombie, - or about to become), discard the error, clear any pending status - the LWP may have, and return true (we'll collect the exit status - soon enough). Otherwise, return false. */ - -static int -check_ptrace_stopped_lwp_gone (struct lwp_info *lp) -{ - struct thread_info *thread = get_lwp_thread (lp); - - /* If we get an error after resuming the LWP successfully, we'd - confuse !T state for the LWP being gone. */ - gdb_assert (lp->stopped); - - /* We can't just check whether the LWP is in 'Z (Zombie)' state, - because even if ptrace failed with ESRCH, the tracee may be "not - yet fully dead", but already refusing ptrace requests. In that - case the tracee has 'R (Running)' state for a little bit - (observed in Linux 3.18). See also the note on ESRCH in the - ptrace(2) man page. Instead, check whether the LWP has any state - other than ptrace-stopped. */ - - /* Don't assume anything if /proc/PID/status can't be read. */ - if (linux_proc_pid_is_trace_stopped_nowarn (lwpid_of (thread)) == 0) - { - lp->stop_reason = TARGET_STOPPED_BY_NO_REASON; - lp->status_pending_p = 0; - return 1; - } - return 0; -} - -/* Like linux_resume_one_lwp_throw, but no error is thrown if the LWP - disappears while we try to resume it. */ - -static void -linux_resume_one_lwp (struct lwp_info *lwp, - int step, int signal, siginfo_t *info) -{ - try - { - linux_resume_one_lwp_throw (lwp, step, signal, info); - } - catch (const gdb_exception_error &ex) - { - if (!check_ptrace_stopped_lwp_gone (lwp)) - throw; - } -} - -/* This function is called once per thread via for_each_thread. - We look up which resume request applies to THREAD and mark it with a - pointer to the appropriate resume request. - - This algorithm is O(threads * resume elements), but resume elements - is small (and will remain small at least until GDB supports thread - suspension). */ - -static void -linux_set_resume_request (thread_info *thread, thread_resume *resume, size_t n) -{ - struct lwp_info *lwp = get_thread_lwp (thread); - - for (int ndx = 0; ndx < n; ndx++) - { - ptid_t ptid = resume[ndx].thread; - if (ptid == minus_one_ptid - || ptid == thread->id - /* Handle both 'pPID' and 'pPID.-1' as meaning 'all threads - of PID'. */ - || (ptid.pid () == pid_of (thread) - && (ptid.is_pid () - || ptid.lwp () == -1))) - { - if (resume[ndx].kind == resume_stop - && thread->last_resume_kind == resume_stop) - { - if (debug_threads) - debug_printf ("already %s LWP %ld at GDB's request\n", - (thread->last_status.kind - == TARGET_WAITKIND_STOPPED) - ? "stopped" - : "stopping", - lwpid_of (thread)); - - continue; - } - - /* Ignore (wildcard) resume requests for already-resumed - threads. */ - if (resume[ndx].kind != resume_stop - && thread->last_resume_kind != resume_stop) - { - if (debug_threads) - debug_printf ("already %s LWP %ld at GDB's request\n", - (thread->last_resume_kind - == resume_step) - ? "stepping" - : "continuing", - lwpid_of (thread)); - continue; - } - - /* Don't let wildcard resumes resume fork children that GDB - does not yet know are new fork children. */ - if (lwp->fork_relative != NULL) - { - struct lwp_info *rel = lwp->fork_relative; - - if (rel->status_pending_p - && (rel->waitstatus.kind == TARGET_WAITKIND_FORKED - || rel->waitstatus.kind == TARGET_WAITKIND_VFORKED)) - { - if (debug_threads) - debug_printf ("not resuming LWP %ld: has queued stop reply\n", - lwpid_of (thread)); - continue; - } - } - - /* If the thread has a pending event that has already been - reported to GDBserver core, but GDB has not pulled the - event out of the vStopped queue yet, likewise, ignore the - (wildcard) resume request. */ - if (in_queued_stop_replies (thread->id)) - { - if (debug_threads) - debug_printf ("not resuming LWP %ld: has queued stop reply\n", - lwpid_of (thread)); - continue; - } - - lwp->resume = &resume[ndx]; - thread->last_resume_kind = lwp->resume->kind; - - lwp->step_range_start = lwp->resume->step_range_start; - lwp->step_range_end = lwp->resume->step_range_end; - - /* If we had a deferred signal to report, dequeue one now. - This can happen if LWP gets more than one signal while - trying to get out of a jump pad. */ - if (lwp->stopped - && !lwp->status_pending_p - && dequeue_one_deferred_signal (lwp, &lwp->status_pending)) - { - lwp->status_pending_p = 1; - - if (debug_threads) - debug_printf ("Dequeueing deferred signal %d for LWP %ld, " - "leaving status pending.\n", - WSTOPSIG (lwp->status_pending), - lwpid_of (thread)); - } - - return; - } - } - - /* No resume action for this thread. */ - lwp->resume = NULL; -} - -/* find_thread callback for linux_resume. Return true if this lwp has an - interesting status pending. */ - -static bool -resume_status_pending_p (thread_info *thread) -{ - struct lwp_info *lwp = get_thread_lwp (thread); - - /* LWPs which will not be resumed are not interesting, because - we might not wait for them next time through linux_wait. */ - if (lwp->resume == NULL) - return false; - - return thread_still_has_status_pending_p (thread); -} - -/* Return 1 if this lwp that GDB wants running is stopped at an - internal breakpoint that we need to step over. It assumes that any - required STOP_PC adjustment has already been propagated to the - inferior's regcache. */ - -static bool -need_step_over_p (thread_info *thread) -{ - struct lwp_info *lwp = get_thread_lwp (thread); - struct thread_info *saved_thread; - CORE_ADDR pc; - struct process_info *proc = get_thread_process (thread); - - /* GDBserver is skipping the extra traps from the wrapper program, - don't have to do step over. */ - if (proc->tdesc == NULL) - return false; - - /* LWPs which will not be resumed are not interesting, because we - might not wait for them next time through linux_wait. */ - - if (!lwp->stopped) - { - if (debug_threads) - debug_printf ("Need step over [LWP %ld]? Ignoring, not stopped\n", - lwpid_of (thread)); - return false; - } - - if (thread->last_resume_kind == resume_stop) - { - if (debug_threads) - debug_printf ("Need step over [LWP %ld]? Ignoring, should remain" - " stopped\n", - lwpid_of (thread)); - return false; - } - - gdb_assert (lwp->suspended >= 0); - - if (lwp->suspended) - { - if (debug_threads) - debug_printf ("Need step over [LWP %ld]? Ignoring, suspended\n", - lwpid_of (thread)); - return false; - } - - if (lwp->status_pending_p) - { - if (debug_threads) - debug_printf ("Need step over [LWP %ld]? Ignoring, has pending" - " status.\n", - lwpid_of (thread)); - return false; - } - - /* Note: PC, not STOP_PC. Either GDB has adjusted the PC already, - or we have. */ - pc = get_pc (lwp); - - /* If the PC has changed since we stopped, then don't do anything, - and let the breakpoint/tracepoint be hit. This happens if, for - instance, GDB handled the decr_pc_after_break subtraction itself, - GDB is OOL stepping this thread, or the user has issued a "jump" - command, or poked thread's registers herself. */ - if (pc != lwp->stop_pc) - { - if (debug_threads) - debug_printf ("Need step over [LWP %ld]? Cancelling, PC was changed. " - "Old stop_pc was 0x%s, PC is now 0x%s\n", - lwpid_of (thread), - paddress (lwp->stop_pc), paddress (pc)); - return false; - } - - /* On software single step target, resume the inferior with signal - rather than stepping over. */ - if (can_software_single_step () - && lwp->pending_signals != NULL - && lwp_signal_can_be_delivered (lwp)) - { - if (debug_threads) - debug_printf ("Need step over [LWP %ld]? Ignoring, has pending" - " signals.\n", - lwpid_of (thread)); - - return false; - } - - saved_thread = current_thread; - current_thread = thread; - - /* We can only step over breakpoints we know about. */ - if (breakpoint_here (pc) || fast_tracepoint_jump_here (pc)) - { - /* Don't step over a breakpoint that GDB expects to hit - though. If the condition is being evaluated on the target's side - and it evaluate to false, step over this breakpoint as well. */ - if (gdb_breakpoint_here (pc) - && gdb_condition_true_at_breakpoint (pc) - && gdb_no_commands_at_breakpoint (pc)) - { - if (debug_threads) - debug_printf ("Need step over [LWP %ld]? yes, but found" - " GDB breakpoint at 0x%s; skipping step over\n", - lwpid_of (thread), paddress (pc)); - - current_thread = saved_thread; - return false; - } - else - { - if (debug_threads) - debug_printf ("Need step over [LWP %ld]? yes, " - "found breakpoint at 0x%s\n", - lwpid_of (thread), paddress (pc)); - - /* We've found an lwp that needs stepping over --- return 1 so - that find_thread stops looking. */ - current_thread = saved_thread; - - return true; - } - } - - current_thread = saved_thread; - - if (debug_threads) - debug_printf ("Need step over [LWP %ld]? No, no breakpoint found" - " at 0x%s\n", - lwpid_of (thread), paddress (pc)); - - return false; -} - -/* Start a step-over operation on LWP. When LWP stopped at a - breakpoint, to make progress, we need to remove the breakpoint out - of the way. If we let other threads run while we do that, they may - pass by the breakpoint location and miss hitting it. To avoid - that, a step-over momentarily stops all threads while LWP is - single-stepped by either hardware or software while the breakpoint - is temporarily uninserted from the inferior. When the single-step - finishes, we reinsert the breakpoint, and let all threads that are - supposed to be running, run again. */ - -static int -start_step_over (struct lwp_info *lwp) -{ - struct thread_info *thread = get_lwp_thread (lwp); - struct thread_info *saved_thread; - CORE_ADDR pc; - int step; - - if (debug_threads) - debug_printf ("Starting step-over on LWP %ld. Stopping all threads\n", - lwpid_of (thread)); - - stop_all_lwps (1, lwp); - - if (lwp->suspended != 0) - { - internal_error (__FILE__, __LINE__, - "LWP %ld suspended=%d\n", lwpid_of (thread), - lwp->suspended); - } - - if (debug_threads) - debug_printf ("Done stopping all threads for step-over.\n"); - - /* Note, we should always reach here with an already adjusted PC, - either by GDB (if we're resuming due to GDB's request), or by our - caller, if we just finished handling an internal breakpoint GDB - shouldn't care about. */ - pc = get_pc (lwp); - - saved_thread = current_thread; - current_thread = thread; - - lwp->bp_reinsert = pc; - uninsert_breakpoints_at (pc); - uninsert_fast_tracepoint_jumps_at (pc); - - step = single_step (lwp); - - current_thread = saved_thread; - - linux_resume_one_lwp (lwp, step, 0, NULL); - - /* Require next event from this LWP. */ - step_over_bkpt = thread->id; - return 1; -} - -/* Finish a step-over. Reinsert the breakpoint we had uninserted in - start_step_over, if still there, and delete any single-step - breakpoints we've set, on non hardware single-step targets. */ - -static int -finish_step_over (struct lwp_info *lwp) -{ - if (lwp->bp_reinsert != 0) - { - struct thread_info *saved_thread = current_thread; - - if (debug_threads) - debug_printf ("Finished step over.\n"); - - current_thread = get_lwp_thread (lwp); - - /* Reinsert any breakpoint at LWP->BP_REINSERT. Note that there - may be no breakpoint to reinsert there by now. */ - reinsert_breakpoints_at (lwp->bp_reinsert); - reinsert_fast_tracepoint_jumps_at (lwp->bp_reinsert); - - lwp->bp_reinsert = 0; - - /* Delete any single-step breakpoints. No longer needed. We - don't have to worry about other threads hitting this trap, - and later not being able to explain it, because we were - stepping over a breakpoint, and we hold all threads but - LWP stopped while doing that. */ - if (!can_hardware_single_step ()) - { - gdb_assert (has_single_step_breakpoints (current_thread)); - delete_single_step_breakpoints (current_thread); - } - - step_over_bkpt = null_ptid; - current_thread = saved_thread; - return 1; - } - else - return 0; -} - -/* If there's a step over in progress, wait until all threads stop - (that is, until the stepping thread finishes its step), and - unsuspend all lwps. The stepping thread ends with its status - pending, which is processed later when we get back to processing - events. */ - -static void -complete_ongoing_step_over (void) -{ - if (step_over_bkpt != null_ptid) - { - struct lwp_info *lwp; - int wstat; - int ret; - - if (debug_threads) - debug_printf ("detach: step over in progress, finish it first\n"); - - /* Passing NULL_PTID as filter indicates we want all events to - be left pending. Eventually this returns when there are no - unwaited-for children left. */ - ret = linux_wait_for_event_filtered (minus_one_ptid, null_ptid, - &wstat, __WALL); - gdb_assert (ret == -1); - - lwp = find_lwp_pid (step_over_bkpt); - if (lwp != NULL) - finish_step_over (lwp); - step_over_bkpt = null_ptid; - unsuspend_all_lwps (lwp); - } -} - -/* This function is called once per thread. We check the thread's resume - request, which will tell us whether to resume, step, or leave the thread - stopped; and what signal, if any, it should be sent. - - For threads which we aren't explicitly told otherwise, we preserve - the stepping flag; this is used for stepping over gdbserver-placed - breakpoints. - - If pending_flags was set in any thread, we queue any needed - signals, since we won't actually resume. We already have a pending - event to report, so we don't need to preserve any step requests; - they should be re-issued if necessary. */ - -static void -linux_resume_one_thread (thread_info *thread, bool leave_all_stopped) -{ - struct lwp_info *lwp = get_thread_lwp (thread); - int leave_pending; - - if (lwp->resume == NULL) - return; - - if (lwp->resume->kind == resume_stop) - { - if (debug_threads) - debug_printf ("resume_stop request for LWP %ld\n", lwpid_of (thread)); - - if (!lwp->stopped) - { - if (debug_threads) - debug_printf ("stopping LWP %ld\n", lwpid_of (thread)); - - /* Stop the thread, and wait for the event asynchronously, - through the event loop. */ - send_sigstop (lwp); - } - else - { - if (debug_threads) - debug_printf ("already stopped LWP %ld\n", - lwpid_of (thread)); - - /* The LWP may have been stopped in an internal event that - was not meant to be notified back to GDB (e.g., gdbserver - breakpoint), so we should be reporting a stop event in - this case too. */ - - /* If the thread already has a pending SIGSTOP, this is a - no-op. Otherwise, something later will presumably resume - the thread and this will cause it to cancel any pending - operation, due to last_resume_kind == resume_stop. If - the thread already has a pending status to report, we - will still report it the next time we wait - see - status_pending_p_callback. */ - - /* If we already have a pending signal to report, then - there's no need to queue a SIGSTOP, as this means we're - midway through moving the LWP out of the jumppad, and we - will report the pending signal as soon as that is - finished. */ - if (lwp->pending_signals_to_report == NULL) - send_sigstop (lwp); - } - - /* For stop requests, we're done. */ - lwp->resume = NULL; - thread->last_status.kind = TARGET_WAITKIND_IGNORE; - return; - } - - /* If this thread which is about to be resumed has a pending status, - then don't resume it - we can just report the pending status. - Likewise if it is suspended, because e.g., another thread is - stepping past a breakpoint. Make sure to queue any signals that - would otherwise be sent. In all-stop mode, we do this decision - based on if *any* thread has a pending status. If there's a - thread that needs the step-over-breakpoint dance, then don't - resume any other thread but that particular one. */ - leave_pending = (lwp->suspended - || lwp->status_pending_p - || leave_all_stopped); - - /* If we have a new signal, enqueue the signal. */ - if (lwp->resume->sig != 0) - { - siginfo_t info, *info_p; - - /* If this is the same signal we were previously stopped by, - make sure to queue its siginfo. */ - if (WIFSTOPPED (lwp->last_status) - && WSTOPSIG (lwp->last_status) == lwp->resume->sig - && ptrace (PTRACE_GETSIGINFO, lwpid_of (thread), - (PTRACE_TYPE_ARG3) 0, &info) == 0) - info_p = &info; - else - info_p = NULL; - - enqueue_pending_signal (lwp, lwp->resume->sig, info_p); - } - - if (!leave_pending) - { - if (debug_threads) - debug_printf ("resuming LWP %ld\n", lwpid_of (thread)); - - proceed_one_lwp (thread, NULL); - } - else - { - if (debug_threads) - debug_printf ("leaving LWP %ld stopped\n", lwpid_of (thread)); - } - - thread->last_status.kind = TARGET_WAITKIND_IGNORE; - lwp->resume = NULL; -} - -static void -linux_resume (struct thread_resume *resume_info, size_t n) -{ - struct thread_info *need_step_over = NULL; - - if (debug_threads) - { - debug_enter (); - debug_printf ("linux_resume:\n"); - } - - for_each_thread ([&] (thread_info *thread) - { - linux_set_resume_request (thread, resume_info, n); - }); - - /* If there is a thread which would otherwise be resumed, which has - a pending status, then don't resume any threads - we can just - report the pending status. Make sure to queue any signals that - would otherwise be sent. In non-stop mode, we'll apply this - logic to each thread individually. We consume all pending events - before considering to start a step-over (in all-stop). */ - bool any_pending = false; - if (!non_stop) - any_pending = find_thread (resume_status_pending_p) != NULL; - - /* If there is a thread which would otherwise be resumed, which is - stopped at a breakpoint that needs stepping over, then don't - resume any threads - have it step over the breakpoint with all - other threads stopped, then resume all threads again. Make sure - to queue any signals that would otherwise be delivered or - queued. */ - if (!any_pending && supports_breakpoints ()) - need_step_over = find_thread (need_step_over_p); - - bool leave_all_stopped = (need_step_over != NULL || any_pending); - - if (debug_threads) - { - if (need_step_over != NULL) - debug_printf ("Not resuming all, need step over\n"); - else if (any_pending) - debug_printf ("Not resuming, all-stop and found " - "an LWP with pending status\n"); - else - debug_printf ("Resuming, no pending status or step over needed\n"); - } - - /* Even if we're leaving threads stopped, queue all signals we'd - otherwise deliver. */ - for_each_thread ([&] (thread_info *thread) - { - linux_resume_one_thread (thread, leave_all_stopped); - }); - - if (need_step_over) - start_step_over (get_thread_lwp (need_step_over)); - - if (debug_threads) - { - debug_printf ("linux_resume done\n"); - debug_exit (); - } - - /* We may have events that were pending that can/should be sent to - the client now. Trigger a linux_wait call. */ - if (target_is_async_p ()) - async_file_mark (); -} - -/* This function is called once per thread. We check the thread's - last resume request, which will tell us whether to resume, step, or - leave the thread stopped. Any signal the client requested to be - delivered has already been enqueued at this point. - - If any thread that GDB wants running is stopped at an internal - breakpoint that needs stepping over, we start a step-over operation - on that particular thread, and leave all others stopped. */ - -static void -proceed_one_lwp (thread_info *thread, lwp_info *except) -{ - struct lwp_info *lwp = get_thread_lwp (thread); - int step; - - if (lwp == except) - return; - - if (debug_threads) - debug_printf ("proceed_one_lwp: lwp %ld\n", lwpid_of (thread)); - - if (!lwp->stopped) - { - if (debug_threads) - debug_printf (" LWP %ld already running\n", lwpid_of (thread)); - return; - } - - if (thread->last_resume_kind == resume_stop - && thread->last_status.kind != TARGET_WAITKIND_IGNORE) - { - if (debug_threads) - debug_printf (" client wants LWP to remain %ld stopped\n", - lwpid_of (thread)); - return; - } - - if (lwp->status_pending_p) - { - if (debug_threads) - debug_printf (" LWP %ld has pending status, leaving stopped\n", - lwpid_of (thread)); - return; - } - - gdb_assert (lwp->suspended >= 0); - - if (lwp->suspended) - { - if (debug_threads) - debug_printf (" LWP %ld is suspended\n", lwpid_of (thread)); - return; - } - - if (thread->last_resume_kind == resume_stop - && lwp->pending_signals_to_report == NULL - && (lwp->collecting_fast_tracepoint - == fast_tpoint_collect_result::not_collecting)) - { - /* We haven't reported this LWP as stopped yet (otherwise, the - last_status.kind check above would catch it, and we wouldn't - reach here. This LWP may have been momentarily paused by a - stop_all_lwps call while handling for example, another LWP's - step-over. In that case, the pending expected SIGSTOP signal - that was queued at vCont;t handling time will have already - been consumed by wait_for_sigstop, and so we need to requeue - another one here. Note that if the LWP already has a SIGSTOP - pending, this is a no-op. */ - - if (debug_threads) - debug_printf ("Client wants LWP %ld to stop. " - "Making sure it has a SIGSTOP pending\n", - lwpid_of (thread)); - - send_sigstop (lwp); - } - - if (thread->last_resume_kind == resume_step) - { - if (debug_threads) - debug_printf (" stepping LWP %ld, client wants it stepping\n", - lwpid_of (thread)); - - /* If resume_step is requested by GDB, install single-step - breakpoints when the thread is about to be actually resumed if - the single-step breakpoints weren't removed. */ - if (can_software_single_step () - && !has_single_step_breakpoints (thread)) - install_software_single_step_breakpoints (lwp); - - step = maybe_hw_step (thread); - } - else if (lwp->bp_reinsert != 0) - { - if (debug_threads) - debug_printf (" stepping LWP %ld, reinsert set\n", - lwpid_of (thread)); - - step = maybe_hw_step (thread); - } - else - step = 0; - - linux_resume_one_lwp (lwp, step, 0, NULL); -} - -static void -unsuspend_and_proceed_one_lwp (thread_info *thread, lwp_info *except) -{ - struct lwp_info *lwp = get_thread_lwp (thread); - - if (lwp == except) - return; - - lwp_suspended_decr (lwp); - - proceed_one_lwp (thread, except); -} - -/* When we finish a step-over, set threads running again. If there's - another thread that may need a step-over, now's the time to start - it. Eventually, we'll move all threads past their breakpoints. */ - -static void -proceed_all_lwps (void) -{ - struct thread_info *need_step_over; - - /* If there is a thread which would otherwise be resumed, which is - stopped at a breakpoint that needs stepping over, then don't - resume any threads - have it step over the breakpoint with all - other threads stopped, then resume all threads again. */ - - if (supports_breakpoints ()) - { - need_step_over = find_thread (need_step_over_p); - - if (need_step_over != NULL) - { - if (debug_threads) - debug_printf ("proceed_all_lwps: found " - "thread %ld needing a step-over\n", - lwpid_of (need_step_over)); - - start_step_over (get_thread_lwp (need_step_over)); - return; - } - } - - if (debug_threads) - debug_printf ("Proceeding, no step-over needed\n"); - - for_each_thread ([] (thread_info *thread) - { - proceed_one_lwp (thread, NULL); - }); -} - -/* Stopped LWPs that the client wanted to be running, that don't have - pending statuses, are set to run again, except for EXCEPT, if not - NULL. This undoes a stop_all_lwps call. */ - -static void -unstop_all_lwps (int unsuspend, struct lwp_info *except) -{ - if (debug_threads) - { - debug_enter (); - if (except) - debug_printf ("unstopping all lwps, except=(LWP %ld)\n", - lwpid_of (get_lwp_thread (except))); - else - debug_printf ("unstopping all lwps\n"); - } - - if (unsuspend) - for_each_thread ([&] (thread_info *thread) - { - unsuspend_and_proceed_one_lwp (thread, except); - }); - else - for_each_thread ([&] (thread_info *thread) - { - proceed_one_lwp (thread, except); - }); - - if (debug_threads) - { - debug_printf ("unstop_all_lwps done\n"); - debug_exit (); - } -} - - -#ifdef HAVE_LINUX_REGSETS - -#define use_linux_regsets 1 - -/* Returns true if REGSET has been disabled. */ - -static int -regset_disabled (struct regsets_info *info, struct regset_info *regset) -{ - return (info->disabled_regsets != NULL - && info->disabled_regsets[regset - info->regsets]); -} - -/* Disable REGSET. */ - -static void -disable_regset (struct regsets_info *info, struct regset_info *regset) -{ - int dr_offset; - - dr_offset = regset - info->regsets; - if (info->disabled_regsets == NULL) - info->disabled_regsets = (char *) xcalloc (1, info->num_regsets); - info->disabled_regsets[dr_offset] = 1; -} - -static int -regsets_fetch_inferior_registers (struct regsets_info *regsets_info, - struct regcache *regcache) -{ - struct regset_info *regset; - int saw_general_regs = 0; - int pid; - struct iovec iov; - - pid = lwpid_of (current_thread); - for (regset = regsets_info->regsets; regset->size >= 0; regset++) - { - void *buf, *data; - int nt_type, res; - - if (regset->size == 0 || regset_disabled (regsets_info, regset)) - continue; - - buf = xmalloc (regset->size); - - nt_type = regset->nt_type; - if (nt_type) - { - iov.iov_base = buf; - iov.iov_len = regset->size; - data = (void *) &iov; - } - else - data = buf; - -#ifndef __sparc__ - res = ptrace (regset->get_request, pid, - (PTRACE_TYPE_ARG3) (long) nt_type, data); -#else - res = ptrace (regset->get_request, pid, data, nt_type); -#endif - if (res < 0) - { - if (errno == EIO - || (errno == EINVAL && regset->type == OPTIONAL_REGS)) - { - /* If we get EIO on a regset, or an EINVAL and the regset is - optional, do not try it again for this process mode. */ - disable_regset (regsets_info, regset); - } - else if (errno == ENODATA) - { - /* ENODATA may be returned if the regset is currently - not "active". This can happen in normal operation, - so suppress the warning in this case. */ - } - else if (errno == ESRCH) - { - /* At this point, ESRCH should mean the process is - already gone, in which case we simply ignore attempts - to read its registers. */ - } - else - { - char s[256]; - sprintf (s, "ptrace(regsets_fetch_inferior_registers) PID=%d", - pid); - perror (s); - } - } - else - { - if (regset->type == GENERAL_REGS) - saw_general_regs = 1; - regset->store_function (regcache, buf); - } - free (buf); - } - if (saw_general_regs) - return 0; - else - return 1; -} - -static int -regsets_store_inferior_registers (struct regsets_info *regsets_info, - struct regcache *regcache) -{ - struct regset_info *regset; - int saw_general_regs = 0; - int pid; - struct iovec iov; - - pid = lwpid_of (current_thread); - for (regset = regsets_info->regsets; regset->size >= 0; regset++) - { - void *buf, *data; - int nt_type, res; - - if (regset->size == 0 || regset_disabled (regsets_info, regset) - || regset->fill_function == NULL) - continue; - - buf = xmalloc (regset->size); - - /* First fill the buffer with the current register set contents, - in case there are any items in the kernel's regset that are - not in gdbserver's regcache. */ - - nt_type = regset->nt_type; - if (nt_type) - { - iov.iov_base = buf; - iov.iov_len = regset->size; - data = (void *) &iov; - } - else - data = buf; - -#ifndef __sparc__ - res = ptrace (regset->get_request, pid, - (PTRACE_TYPE_ARG3) (long) nt_type, data); -#else - res = ptrace (regset->get_request, pid, data, nt_type); -#endif - - if (res == 0) - { - /* Then overlay our cached registers on that. */ - regset->fill_function (regcache, buf); - - /* Only now do we write the register set. */ -#ifndef __sparc__ - res = ptrace (regset->set_request, pid, - (PTRACE_TYPE_ARG3) (long) nt_type, data); -#else - res = ptrace (regset->set_request, pid, data, nt_type); -#endif - } - - if (res < 0) - { - if (errno == EIO - || (errno == EINVAL && regset->type == OPTIONAL_REGS)) - { - /* If we get EIO on a regset, or an EINVAL and the regset is - optional, do not try it again for this process mode. */ - disable_regset (regsets_info, regset); - } - else if (errno == ESRCH) - { - /* At this point, ESRCH should mean the process is - already gone, in which case we simply ignore attempts - to change its registers. See also the related - comment in linux_resume_one_lwp. */ - free (buf); - return 0; - } - else - { - perror ("Warning: ptrace(regsets_store_inferior_registers)"); - } - } - else if (regset->type == GENERAL_REGS) - saw_general_regs = 1; - free (buf); - } - if (saw_general_regs) - return 0; - else - return 1; -} - -#else /* !HAVE_LINUX_REGSETS */ - -#define use_linux_regsets 0 -#define regsets_fetch_inferior_registers(regsets_info, regcache) 1 -#define regsets_store_inferior_registers(regsets_info, regcache) 1 - -#endif - -/* Return 1 if register REGNO is supported by one of the regset ptrace - calls or 0 if it has to be transferred individually. */ - -static int -linux_register_in_regsets (const struct regs_info *regs_info, int regno) -{ - unsigned char mask = 1 << (regno % 8); - size_t index = regno / 8; - - return (use_linux_regsets - && (regs_info->regset_bitmap == NULL - || (regs_info->regset_bitmap[index] & mask) != 0)); -} - -#ifdef HAVE_LINUX_USRREGS - -static int -register_addr (const struct usrregs_info *usrregs, int regnum) -{ - int addr; - - if (regnum < 0 || regnum >= usrregs->num_regs) - error ("Invalid register number %d.", regnum); - - addr = usrregs->regmap[regnum]; - - return addr; -} - -/* Fetch one register. */ -static void -fetch_register (const struct usrregs_info *usrregs, - struct regcache *regcache, int regno) -{ - CORE_ADDR regaddr; - int i, size; - char *buf; - int pid; - - if (regno >= usrregs->num_regs) - return; - if ((*the_low_target.cannot_fetch_register) (regno)) - return; - - regaddr = register_addr (usrregs, regno); - if (regaddr == -1) - return; - - size = ((register_size (regcache->tdesc, regno) - + sizeof (PTRACE_XFER_TYPE) - 1) - & -sizeof (PTRACE_XFER_TYPE)); - buf = (char *) alloca (size); - - pid = lwpid_of (current_thread); - for (i = 0; i < size; i += sizeof (PTRACE_XFER_TYPE)) - { - errno = 0; - *(PTRACE_XFER_TYPE *) (buf + i) = - ptrace (PTRACE_PEEKUSER, pid, - /* Coerce to a uintptr_t first to avoid potential gcc warning - of coercing an 8 byte integer to a 4 byte pointer. */ - (PTRACE_TYPE_ARG3) (uintptr_t) regaddr, (PTRACE_TYPE_ARG4) 0); - regaddr += sizeof (PTRACE_XFER_TYPE); - if (errno != 0) - { - /* Mark register REGNO unavailable. */ - supply_register (regcache, regno, NULL); - return; - } - } - - if (the_low_target.supply_ptrace_register) - the_low_target.supply_ptrace_register (regcache, regno, buf); - else - supply_register (regcache, regno, buf); -} - -/* Store one register. */ -static void -store_register (const struct usrregs_info *usrregs, - struct regcache *regcache, int regno) -{ - CORE_ADDR regaddr; - int i, size; - char *buf; - int pid; - - if (regno >= usrregs->num_regs) - return; - if ((*the_low_target.cannot_store_register) (regno)) - return; - - regaddr = register_addr (usrregs, regno); - if (regaddr == -1) - return; - - size = ((register_size (regcache->tdesc, regno) - + sizeof (PTRACE_XFER_TYPE) - 1) - & -sizeof (PTRACE_XFER_TYPE)); - buf = (char *) alloca (size); - memset (buf, 0, size); - - if (the_low_target.collect_ptrace_register) - the_low_target.collect_ptrace_register (regcache, regno, buf); - else - collect_register (regcache, regno, buf); - - pid = lwpid_of (current_thread); - for (i = 0; i < size; i += sizeof (PTRACE_XFER_TYPE)) - { - errno = 0; - ptrace (PTRACE_POKEUSER, pid, - /* Coerce to a uintptr_t first to avoid potential gcc warning - about coercing an 8 byte integer to a 4 byte pointer. */ - (PTRACE_TYPE_ARG3) (uintptr_t) regaddr, - (PTRACE_TYPE_ARG4) *(PTRACE_XFER_TYPE *) (buf + i)); - if (errno != 0) - { - /* At this point, ESRCH should mean the process is - already gone, in which case we simply ignore attempts - to change its registers. See also the related - comment in linux_resume_one_lwp. */ - if (errno == ESRCH) - return; - - if ((*the_low_target.cannot_store_register) (regno) == 0) - error ("writing register %d: %s", regno, safe_strerror (errno)); - } - regaddr += sizeof (PTRACE_XFER_TYPE); - } -} - -/* Fetch all registers, or just one, from the child process. - If REGNO is -1, do this for all registers, skipping any that are - assumed to have been retrieved by regsets_fetch_inferior_registers, - unless ALL is non-zero. - Otherwise, REGNO specifies which register (so we can save time). */ -static void -usr_fetch_inferior_registers (const struct regs_info *regs_info, - struct regcache *regcache, int regno, int all) -{ - struct usrregs_info *usr = regs_info->usrregs; - - if (regno == -1) - { - for (regno = 0; regno < usr->num_regs; regno++) - if (all || !linux_register_in_regsets (regs_info, regno)) - fetch_register (usr, regcache, regno); - } - else - fetch_register (usr, regcache, regno); -} - -/* Store our register values back into the inferior. - If REGNO is -1, do this for all registers, skipping any that are - assumed to have been saved by regsets_store_inferior_registers, - unless ALL is non-zero. - Otherwise, REGNO specifies which register (so we can save time). */ -static void -usr_store_inferior_registers (const struct regs_info *regs_info, - struct regcache *regcache, int regno, int all) -{ - struct usrregs_info *usr = regs_info->usrregs; - - if (regno == -1) - { - for (regno = 0; regno < usr->num_regs; regno++) - if (all || !linux_register_in_regsets (regs_info, regno)) - store_register (usr, regcache, regno); - } - else - store_register (usr, regcache, regno); -} - -#else /* !HAVE_LINUX_USRREGS */ - -#define usr_fetch_inferior_registers(regs_info, regcache, regno, all) do {} while (0) -#define usr_store_inferior_registers(regs_info, regcache, regno, all) do {} while (0) - -#endif - - -static void -linux_fetch_registers (struct regcache *regcache, int regno) -{ - int use_regsets; - int all = 0; - const struct regs_info *regs_info = (*the_low_target.regs_info) (); - - if (regno == -1) - { - if (the_low_target.fetch_register != NULL - && regs_info->usrregs != NULL) - for (regno = 0; regno < regs_info->usrregs->num_regs; regno++) - (*the_low_target.fetch_register) (regcache, regno); - - all = regsets_fetch_inferior_registers (regs_info->regsets_info, regcache); - if (regs_info->usrregs != NULL) - usr_fetch_inferior_registers (regs_info, regcache, -1, all); - } - else - { - if (the_low_target.fetch_register != NULL - && (*the_low_target.fetch_register) (regcache, regno)) - return; - - use_regsets = linux_register_in_regsets (regs_info, regno); - if (use_regsets) - all = regsets_fetch_inferior_registers (regs_info->regsets_info, - regcache); - if ((!use_regsets || all) && regs_info->usrregs != NULL) - usr_fetch_inferior_registers (regs_info, regcache, regno, 1); - } -} - -static void -linux_store_registers (struct regcache *regcache, int regno) -{ - int use_regsets; - int all = 0; - const struct regs_info *regs_info = (*the_low_target.regs_info) (); - - if (regno == -1) - { - all = regsets_store_inferior_registers (regs_info->regsets_info, - regcache); - if (regs_info->usrregs != NULL) - usr_store_inferior_registers (regs_info, regcache, regno, all); - } - else - { - use_regsets = linux_register_in_regsets (regs_info, regno); - if (use_regsets) - all = regsets_store_inferior_registers (regs_info->regsets_info, - regcache); - if ((!use_regsets || all) && regs_info->usrregs != NULL) - usr_store_inferior_registers (regs_info, regcache, regno, 1); - } -} - - -/* Copy LEN bytes from inferior's memory starting at MEMADDR - to debugger memory starting at MYADDR. */ - -static int -linux_read_memory (CORE_ADDR memaddr, unsigned char *myaddr, int len) -{ - int pid = lwpid_of (current_thread); - PTRACE_XFER_TYPE *buffer; - CORE_ADDR addr; - int count; - char filename[64]; - int i; - int ret; - int fd; - - /* Try using /proc. Don't bother for one word. */ - if (len >= 3 * sizeof (long)) - { - int bytes; - - /* We could keep this file open and cache it - possibly one per - thread. That requires some juggling, but is even faster. */ - sprintf (filename, "/proc/%d/mem", pid); - fd = open (filename, O_RDONLY | O_LARGEFILE); - if (fd == -1) - goto no_proc; - - /* If pread64 is available, use it. It's faster if the kernel - supports it (only one syscall), and it's 64-bit safe even on - 32-bit platforms (for instance, SPARC debugging a SPARC64 - application). */ -#ifdef HAVE_PREAD64 - bytes = pread64 (fd, myaddr, len, memaddr); -#else - bytes = -1; - if (lseek (fd, memaddr, SEEK_SET) != -1) - bytes = read (fd, myaddr, len); -#endif - - close (fd); - if (bytes == len) - return 0; - - /* Some data was read, we'll try to get the rest with ptrace. */ - if (bytes > 0) - { - memaddr += bytes; - myaddr += bytes; - len -= bytes; - } - } - - no_proc: - /* Round starting address down to longword boundary. */ - addr = memaddr & -(CORE_ADDR) sizeof (PTRACE_XFER_TYPE); - /* Round ending address up; get number of longwords that makes. */ - count = ((((memaddr + len) - addr) + sizeof (PTRACE_XFER_TYPE) - 1) - / sizeof (PTRACE_XFER_TYPE)); - /* Allocate buffer of that many longwords. */ - buffer = XALLOCAVEC (PTRACE_XFER_TYPE, count); - - /* Read all the longwords */ - errno = 0; - for (i = 0; i < count; i++, addr += sizeof (PTRACE_XFER_TYPE)) - { - /* Coerce the 3rd arg to a uintptr_t first to avoid potential gcc warning - about coercing an 8 byte integer to a 4 byte pointer. */ - buffer[i] = ptrace (PTRACE_PEEKTEXT, pid, - (PTRACE_TYPE_ARG3) (uintptr_t) addr, - (PTRACE_TYPE_ARG4) 0); - if (errno) - break; - } - ret = errno; - - /* Copy appropriate bytes out of the buffer. */ - if (i > 0) - { - i *= sizeof (PTRACE_XFER_TYPE); - i -= memaddr & (sizeof (PTRACE_XFER_TYPE) - 1); - memcpy (myaddr, - (char *) buffer + (memaddr & (sizeof (PTRACE_XFER_TYPE) - 1)), - i < len ? i : len); - } - - return ret; -} - -/* Copy LEN bytes of data from debugger memory at MYADDR to inferior's - memory at MEMADDR. On failure (cannot write to the inferior) - returns the value of errno. Always succeeds if LEN is zero. */ - -static int -linux_write_memory (CORE_ADDR memaddr, const unsigned char *myaddr, int len) -{ - int i; - /* Round starting address down to longword boundary. */ - CORE_ADDR addr = memaddr & -(CORE_ADDR) sizeof (PTRACE_XFER_TYPE); - /* Round ending address up; get number of longwords that makes. */ - int count - = (((memaddr + len) - addr) + sizeof (PTRACE_XFER_TYPE) - 1) - / sizeof (PTRACE_XFER_TYPE); - - /* Allocate buffer of that many longwords. */ - PTRACE_XFER_TYPE *buffer = XALLOCAVEC (PTRACE_XFER_TYPE, count); - - int pid = lwpid_of (current_thread); - - if (len == 0) - { - /* Zero length write always succeeds. */ - return 0; - } - - if (debug_threads) - { - /* Dump up to four bytes. */ - char str[4 * 2 + 1]; - char *p = str; - int dump = len < 4 ? len : 4; - - for (i = 0; i < dump; i++) - { - sprintf (p, "%02x", myaddr[i]); - p += 2; - } - *p = '\0'; - - debug_printf ("Writing %s to 0x%08lx in process %d\n", - str, (long) memaddr, pid); - } - - /* Fill start and end extra bytes of buffer with existing memory data. */ - - errno = 0; - /* Coerce the 3rd arg to a uintptr_t first to avoid potential gcc warning - about coercing an 8 byte integer to a 4 byte pointer. */ - buffer[0] = ptrace (PTRACE_PEEKTEXT, pid, - (PTRACE_TYPE_ARG3) (uintptr_t) addr, - (PTRACE_TYPE_ARG4) 0); - if (errno) - return errno; - - if (count > 1) - { - errno = 0; - buffer[count - 1] - = ptrace (PTRACE_PEEKTEXT, pid, - /* Coerce to a uintptr_t first to avoid potential gcc warning - about coercing an 8 byte integer to a 4 byte pointer. */ - (PTRACE_TYPE_ARG3) (uintptr_t) (addr + (count - 1) - * sizeof (PTRACE_XFER_TYPE)), - (PTRACE_TYPE_ARG4) 0); - if (errno) - return errno; - } - - /* Copy data to be written over corresponding part of buffer. */ - - memcpy ((char *) buffer + (memaddr & (sizeof (PTRACE_XFER_TYPE) - 1)), - myaddr, len); - - /* Write the entire buffer. */ - - for (i = 0; i < count; i++, addr += sizeof (PTRACE_XFER_TYPE)) - { - errno = 0; - ptrace (PTRACE_POKETEXT, pid, - /* Coerce to a uintptr_t first to avoid potential gcc warning - about coercing an 8 byte integer to a 4 byte pointer. */ - (PTRACE_TYPE_ARG3) (uintptr_t) addr, - (PTRACE_TYPE_ARG4) buffer[i]); - if (errno) - return errno; - } - - return 0; -} - -static void -linux_look_up_symbols (void) -{ -#ifdef USE_THREAD_DB - struct process_info *proc = current_process (); - - if (proc->priv->thread_db != NULL) - return; - - thread_db_init (); -#endif -} - -static void -linux_request_interrupt (void) -{ - /* Send a SIGINT to the process group. This acts just like the user - typed a ^C on the controlling terminal. */ - kill (-signal_pid, SIGINT); -} - -/* Copy LEN bytes from inferior's auxiliary vector starting at OFFSET - to debugger memory starting at MYADDR. */ - -static int -linux_read_auxv (CORE_ADDR offset, unsigned char *myaddr, unsigned int len) -{ - char filename[PATH_MAX]; - int fd, n; - int pid = lwpid_of (current_thread); - - xsnprintf (filename, sizeof filename, "/proc/%d/auxv", pid); - - fd = open (filename, O_RDONLY); - if (fd < 0) - return -1; - - if (offset != (CORE_ADDR) 0 - && lseek (fd, (off_t) offset, SEEK_SET) != (off_t) offset) - n = -1; - else - n = read (fd, myaddr, len); - - close (fd); - - return n; -} - -/* These breakpoint and watchpoint related wrapper functions simply - pass on the function call if the target has registered a - corresponding function. */ - -static int -linux_supports_z_point_type (char z_type) -{ - return (the_low_target.supports_z_point_type != NULL - && the_low_target.supports_z_point_type (z_type)); -} - -static int -linux_insert_point (enum raw_bkpt_type type, CORE_ADDR addr, - int size, struct raw_breakpoint *bp) -{ - if (type == raw_bkpt_type_sw) - return insert_memory_breakpoint (bp); - else if (the_low_target.insert_point != NULL) - return the_low_target.insert_point (type, addr, size, bp); - else - /* Unsupported (see target.h). */ - return 1; -} - -static int -linux_remove_point (enum raw_bkpt_type type, CORE_ADDR addr, - int size, struct raw_breakpoint *bp) -{ - if (type == raw_bkpt_type_sw) - return remove_memory_breakpoint (bp); - else if (the_low_target.remove_point != NULL) - return the_low_target.remove_point (type, addr, size, bp); - else - /* Unsupported (see target.h). */ - return 1; -} - -/* Implement the to_stopped_by_sw_breakpoint target_ops - method. */ - -static int -linux_stopped_by_sw_breakpoint (void) -{ - struct lwp_info *lwp = get_thread_lwp (current_thread); - - return (lwp->stop_reason == TARGET_STOPPED_BY_SW_BREAKPOINT); -} - -/* Implement the to_supports_stopped_by_sw_breakpoint target_ops - method. */ - -static int -linux_supports_stopped_by_sw_breakpoint (void) -{ - return USE_SIGTRAP_SIGINFO; -} - -/* Implement the to_stopped_by_hw_breakpoint target_ops - method. */ - -static int -linux_stopped_by_hw_breakpoint (void) -{ - struct lwp_info *lwp = get_thread_lwp (current_thread); - - return (lwp->stop_reason == TARGET_STOPPED_BY_HW_BREAKPOINT); -} - -/* Implement the to_supports_stopped_by_hw_breakpoint target_ops - method. */ - -static int -linux_supports_stopped_by_hw_breakpoint (void) -{ - return USE_SIGTRAP_SIGINFO; -} - -/* Implement the supports_hardware_single_step target_ops method. */ - -static int -linux_supports_hardware_single_step (void) -{ - return can_hardware_single_step (); -} - -static int -linux_supports_software_single_step (void) -{ - return can_software_single_step (); -} - -static int -linux_stopped_by_watchpoint (void) -{ - struct lwp_info *lwp = get_thread_lwp (current_thread); - - return lwp->stop_reason == TARGET_STOPPED_BY_WATCHPOINT; -} - -static CORE_ADDR -linux_stopped_data_address (void) -{ - struct lwp_info *lwp = get_thread_lwp (current_thread); - - return lwp->stopped_data_address; -} - -#if defined(__UCLIBC__) && defined(HAS_NOMMU) \ - && defined(PT_TEXT_ADDR) && defined(PT_DATA_ADDR) \ - && defined(PT_TEXT_END_ADDR) - -/* This is only used for targets that define PT_TEXT_ADDR, - PT_DATA_ADDR and PT_TEXT_END_ADDR. If those are not defined, supposedly - the target has different ways of acquiring this information, like - loadmaps. */ - -/* Under uClinux, programs are loaded at non-zero offsets, which we need - to tell gdb about. */ - -static int -linux_read_offsets (CORE_ADDR *text_p, CORE_ADDR *data_p) -{ - unsigned long text, text_end, data; - int pid = lwpid_of (current_thread); - - errno = 0; - - text = ptrace (PTRACE_PEEKUSER, pid, (PTRACE_TYPE_ARG3) PT_TEXT_ADDR, - (PTRACE_TYPE_ARG4) 0); - text_end = ptrace (PTRACE_PEEKUSER, pid, (PTRACE_TYPE_ARG3) PT_TEXT_END_ADDR, - (PTRACE_TYPE_ARG4) 0); - data = ptrace (PTRACE_PEEKUSER, pid, (PTRACE_TYPE_ARG3) PT_DATA_ADDR, - (PTRACE_TYPE_ARG4) 0); - - if (errno == 0) - { - /* Both text and data offsets produced at compile-time (and so - used by gdb) are relative to the beginning of the program, - with the data segment immediately following the text segment. - However, the actual runtime layout in memory may put the data - somewhere else, so when we send gdb a data base-address, we - use the real data base address and subtract the compile-time - data base-address from it (which is just the length of the - text segment). BSS immediately follows data in both - cases. */ - *text_p = text; - *data_p = data - (text_end - text); - - return 1; - } - return 0; -} -#endif - -static int -linux_qxfer_osdata (const char *annex, - unsigned char *readbuf, unsigned const char *writebuf, - CORE_ADDR offset, int len) -{ - return linux_common_xfer_osdata (annex, readbuf, offset, len); -} - -/* Convert a native/host siginfo object, into/from the siginfo in the - layout of the inferiors' architecture. */ - -static void -siginfo_fixup (siginfo_t *siginfo, gdb_byte *inf_siginfo, int direction) -{ - int done = 0; - - if (the_low_target.siginfo_fixup != NULL) - done = the_low_target.siginfo_fixup (siginfo, inf_siginfo, direction); - - /* If there was no callback, or the callback didn't do anything, - then just do a straight memcpy. */ - if (!done) - { - if (direction == 1) - memcpy (siginfo, inf_siginfo, sizeof (siginfo_t)); - else - memcpy (inf_siginfo, siginfo, sizeof (siginfo_t)); - } -} - -static int -linux_xfer_siginfo (const char *annex, unsigned char *readbuf, - unsigned const char *writebuf, CORE_ADDR offset, int len) -{ - int pid; - siginfo_t siginfo; - gdb_byte inf_siginfo[sizeof (siginfo_t)]; - - if (current_thread == NULL) - return -1; - - pid = lwpid_of (current_thread); - - if (debug_threads) - debug_printf ("%s siginfo for lwp %d.\n", - readbuf != NULL ? "Reading" : "Writing", - pid); - - if (offset >= sizeof (siginfo)) - return -1; - - if (ptrace (PTRACE_GETSIGINFO, pid, (PTRACE_TYPE_ARG3) 0, &siginfo) != 0) - return -1; - - /* When GDBSERVER is built as a 64-bit application, ptrace writes into - SIGINFO an object with 64-bit layout. Since debugging a 32-bit - inferior with a 64-bit GDBSERVER should look the same as debugging it - with a 32-bit GDBSERVER, we need to convert it. */ - siginfo_fixup (&siginfo, inf_siginfo, 0); - - if (offset + len > sizeof (siginfo)) - len = sizeof (siginfo) - offset; - - if (readbuf != NULL) - memcpy (readbuf, inf_siginfo + offset, len); - else - { - memcpy (inf_siginfo + offset, writebuf, len); - - /* Convert back to ptrace layout before flushing it out. */ - siginfo_fixup (&siginfo, inf_siginfo, 1); - - if (ptrace (PTRACE_SETSIGINFO, pid, (PTRACE_TYPE_ARG3) 0, &siginfo) != 0) - return -1; - } - - return len; -} - -/* SIGCHLD handler that serves two purposes: In non-stop/async mode, - so we notice when children change state; as the handler for the - sigsuspend in my_waitpid. */ - -static void -sigchld_handler (int signo) -{ - int old_errno = errno; - - if (debug_threads) - { - do - { - /* Use the async signal safe debug function. */ - if (debug_write ("sigchld_handler\n", - sizeof ("sigchld_handler\n") - 1) < 0) - break; /* just ignore */ - } while (0); - } - - if (target_is_async_p ()) - async_file_mark (); /* trigger a linux_wait */ - - errno = old_errno; -} - -static int -linux_supports_non_stop (void) -{ - return 1; -} - -static int -linux_async (int enable) -{ - int previous = target_is_async_p (); - - if (debug_threads) - debug_printf ("linux_async (%d), previous=%d\n", - enable, previous); - - if (previous != enable) - { - sigset_t mask; - sigemptyset (&mask); - sigaddset (&mask, SIGCHLD); - - gdb_sigmask (SIG_BLOCK, &mask, NULL); - - if (enable) - { - if (pipe (linux_event_pipe) == -1) - { - linux_event_pipe[0] = -1; - linux_event_pipe[1] = -1; - gdb_sigmask (SIG_UNBLOCK, &mask, NULL); - - warning ("creating event pipe failed."); - return previous; - } - - fcntl (linux_event_pipe[0], F_SETFL, O_NONBLOCK); - fcntl (linux_event_pipe[1], F_SETFL, O_NONBLOCK); - - /* Register the event loop handler. */ - add_file_handler (linux_event_pipe[0], - handle_target_event, NULL); - - /* Always trigger a linux_wait. */ - async_file_mark (); - } - else - { - delete_file_handler (linux_event_pipe[0]); - - close (linux_event_pipe[0]); - close (linux_event_pipe[1]); - linux_event_pipe[0] = -1; - linux_event_pipe[1] = -1; - } - - gdb_sigmask (SIG_UNBLOCK, &mask, NULL); - } - - return previous; -} - -static int -linux_start_non_stop (int nonstop) -{ - /* Register or unregister from event-loop accordingly. */ - linux_async (nonstop); - - if (target_is_async_p () != (nonstop != 0)) - return -1; - - return 0; -} - -static int -linux_supports_multi_process (void) -{ - return 1; -} - -/* Check if fork events are supported. */ - -static int -linux_supports_fork_events (void) -{ - return linux_supports_tracefork (); -} - -/* Check if vfork events are supported. */ - -static int -linux_supports_vfork_events (void) -{ - return linux_supports_tracefork (); -} - -/* Check if exec events are supported. */ - -static int -linux_supports_exec_events (void) -{ - return linux_supports_traceexec (); -} - -/* Target hook for 'handle_new_gdb_connection'. Causes a reset of the - ptrace flags for all inferiors. This is in case the new GDB connection - doesn't support the same set of events that the previous one did. */ - -static void -linux_handle_new_gdb_connection (void) -{ - /* Request that all the lwps reset their ptrace options. */ - for_each_thread ([] (thread_info *thread) - { - struct lwp_info *lwp = get_thread_lwp (thread); - - if (!lwp->stopped) - { - /* Stop the lwp so we can modify its ptrace options. */ - lwp->must_set_ptrace_flags = 1; - linux_stop_lwp (lwp); - } - else - { - /* Already stopped; go ahead and set the ptrace options. */ - struct process_info *proc = find_process_pid (pid_of (thread)); - int options = linux_low_ptrace_options (proc->attached); - - linux_enable_event_reporting (lwpid_of (thread), options); - lwp->must_set_ptrace_flags = 0; - } - }); -} - -static int -linux_supports_disable_randomization (void) -{ -#ifdef HAVE_PERSONALITY - return 1; -#else - return 0; -#endif -} - -static int -linux_supports_agent (void) -{ - return 1; -} - -static int -linux_supports_range_stepping (void) -{ - if (can_software_single_step ()) - return 1; - if (*the_low_target.supports_range_stepping == NULL) - return 0; - - return (*the_low_target.supports_range_stepping) (); -} - -#if defined PT_GETDSBT || defined PTRACE_GETFDPIC -struct target_loadseg -{ - /* Core address to which the segment is mapped. */ - Elf32_Addr addr; - /* VMA recorded in the program header. */ - Elf32_Addr p_vaddr; - /* Size of this segment in memory. */ - Elf32_Word p_memsz; -}; - -# if defined PT_GETDSBT -struct target_loadmap -{ - /* Protocol version number, must be zero. */ - Elf32_Word version; - /* Pointer to the DSBT table, its size, and the DSBT index. */ - unsigned *dsbt_table; - unsigned dsbt_size, dsbt_index; - /* Number of segments in this map. */ - Elf32_Word nsegs; - /* The actual memory map. */ - struct target_loadseg segs[/*nsegs*/]; -}; -# define LINUX_LOADMAP PT_GETDSBT -# define LINUX_LOADMAP_EXEC PTRACE_GETDSBT_EXEC -# define LINUX_LOADMAP_INTERP PTRACE_GETDSBT_INTERP -# else -struct target_loadmap -{ - /* Protocol version number, must be zero. */ - Elf32_Half version; - /* Number of segments in this map. */ - Elf32_Half nsegs; - /* The actual memory map. */ - struct target_loadseg segs[/*nsegs*/]; -}; -# define LINUX_LOADMAP PTRACE_GETFDPIC -# define LINUX_LOADMAP_EXEC PTRACE_GETFDPIC_EXEC -# define LINUX_LOADMAP_INTERP PTRACE_GETFDPIC_INTERP -# endif - -static int -linux_read_loadmap (const char *annex, CORE_ADDR offset, - unsigned char *myaddr, unsigned int len) -{ - int pid = lwpid_of (current_thread); - int addr = -1; - struct target_loadmap *data = NULL; - unsigned int actual_length, copy_length; - - if (strcmp (annex, "exec") == 0) - addr = (int) LINUX_LOADMAP_EXEC; - else if (strcmp (annex, "interp") == 0) - addr = (int) LINUX_LOADMAP_INTERP; - else - return -1; - - if (ptrace (LINUX_LOADMAP, pid, addr, &data) != 0) - return -1; - - if (data == NULL) - return -1; - - actual_length = sizeof (struct target_loadmap) - + sizeof (struct target_loadseg) * data->nsegs; - - if (offset < 0 || offset > actual_length) - return -1; - - copy_length = actual_length - offset < len ? actual_length - offset : len; - memcpy (myaddr, (char *) data + offset, copy_length); - return copy_length; -} -#else -# define linux_read_loadmap NULL -#endif /* defined PT_GETDSBT || defined PTRACE_GETFDPIC */ - -static void -linux_process_qsupported (char **features, int count) -{ - if (the_low_target.process_qsupported != NULL) - the_low_target.process_qsupported (features, count); -} - -static int -linux_supports_catch_syscall (void) -{ - return (the_low_target.get_syscall_trapinfo != NULL - && linux_supports_tracesysgood ()); -} - -static int -linux_get_ipa_tdesc_idx (void) -{ - if (the_low_target.get_ipa_tdesc_idx == NULL) - return 0; - - return (*the_low_target.get_ipa_tdesc_idx) (); -} - -static int -linux_supports_tracepoints (void) -{ - if (*the_low_target.supports_tracepoints == NULL) - return 0; - - return (*the_low_target.supports_tracepoints) (); -} - -static CORE_ADDR -linux_read_pc (struct regcache *regcache) -{ - if (the_low_target.get_pc == NULL) - return 0; - - return (*the_low_target.get_pc) (regcache); -} - -static void -linux_write_pc (struct regcache *regcache, CORE_ADDR pc) -{ - gdb_assert (the_low_target.set_pc != NULL); - - (*the_low_target.set_pc) (regcache, pc); -} - -static int -linux_thread_stopped (struct thread_info *thread) -{ - return get_thread_lwp (thread)->stopped; -} - -/* This exposes stop-all-threads functionality to other modules. */ - -static void -linux_pause_all (int freeze) -{ - stop_all_lwps (freeze, NULL); -} - -/* This exposes unstop-all-threads functionality to other gdbserver - modules. */ - -static void -linux_unpause_all (int unfreeze) -{ - unstop_all_lwps (unfreeze, NULL); -} - -static int -linux_prepare_to_access_memory (void) -{ - /* Neither ptrace nor /proc/PID/mem allow accessing memory through a - running LWP. */ - if (non_stop) - linux_pause_all (1); - return 0; -} - -static void -linux_done_accessing_memory (void) -{ - /* Neither ptrace nor /proc/PID/mem allow accessing memory through a - running LWP. */ - if (non_stop) - linux_unpause_all (1); -} - -static int -linux_install_fast_tracepoint_jump_pad (CORE_ADDR tpoint, CORE_ADDR tpaddr, - CORE_ADDR collector, - CORE_ADDR lockaddr, - ULONGEST orig_size, - CORE_ADDR *jump_entry, - CORE_ADDR *trampoline, - ULONGEST *trampoline_size, - unsigned char *jjump_pad_insn, - ULONGEST *jjump_pad_insn_size, - CORE_ADDR *adjusted_insn_addr, - CORE_ADDR *adjusted_insn_addr_end, - char *err) -{ - return (*the_low_target.install_fast_tracepoint_jump_pad) - (tpoint, tpaddr, collector, lockaddr, orig_size, - jump_entry, trampoline, trampoline_size, - jjump_pad_insn, jjump_pad_insn_size, - adjusted_insn_addr, adjusted_insn_addr_end, - err); -} - -static struct emit_ops * -linux_emit_ops (void) -{ - if (the_low_target.emit_ops != NULL) - return (*the_low_target.emit_ops) (); - else - return NULL; -} - -static int -linux_get_min_fast_tracepoint_insn_len (void) -{ - return (*the_low_target.get_min_fast_tracepoint_insn_len) (); -} - -/* Extract &phdr and num_phdr in the inferior. Return 0 on success. */ - -static int -get_phdr_phnum_from_proc_auxv (const int pid, const int is_elf64, - CORE_ADDR *phdr_memaddr, int *num_phdr) -{ - char filename[PATH_MAX]; - int fd; - const int auxv_size = is_elf64 - ? sizeof (Elf64_auxv_t) : sizeof (Elf32_auxv_t); - char buf[sizeof (Elf64_auxv_t)]; /* The larger of the two. */ - - xsnprintf (filename, sizeof filename, "/proc/%d/auxv", pid); - - fd = open (filename, O_RDONLY); - if (fd < 0) - return 1; - - *phdr_memaddr = 0; - *num_phdr = 0; - while (read (fd, buf, auxv_size) == auxv_size - && (*phdr_memaddr == 0 || *num_phdr == 0)) - { - if (is_elf64) - { - Elf64_auxv_t *const aux = (Elf64_auxv_t *) buf; - - switch (aux->a_type) - { - case AT_PHDR: - *phdr_memaddr = aux->a_un.a_val; - break; - case AT_PHNUM: - *num_phdr = aux->a_un.a_val; - break; - } - } - else - { - Elf32_auxv_t *const aux = (Elf32_auxv_t *) buf; - - switch (aux->a_type) - { - case AT_PHDR: - *phdr_memaddr = aux->a_un.a_val; - break; - case AT_PHNUM: - *num_phdr = aux->a_un.a_val; - break; - } - } - } - - close (fd); - - if (*phdr_memaddr == 0 || *num_phdr == 0) - { - warning ("Unexpected missing AT_PHDR and/or AT_PHNUM: " - "phdr_memaddr = %ld, phdr_num = %d", - (long) *phdr_memaddr, *num_phdr); - return 2; - } - - return 0; -} - -/* Return &_DYNAMIC (via PT_DYNAMIC) in the inferior, or 0 if not present. */ - -static CORE_ADDR -get_dynamic (const int pid, const int is_elf64) -{ - CORE_ADDR phdr_memaddr, relocation; - int num_phdr, i; - unsigned char *phdr_buf; - const int phdr_size = is_elf64 ? sizeof (Elf64_Phdr) : sizeof (Elf32_Phdr); - - if (get_phdr_phnum_from_proc_auxv (pid, is_elf64, &phdr_memaddr, &num_phdr)) - return 0; - - gdb_assert (num_phdr < 100); /* Basic sanity check. */ - phdr_buf = (unsigned char *) alloca (num_phdr * phdr_size); - - if (linux_read_memory (phdr_memaddr, phdr_buf, num_phdr * phdr_size)) - return 0; - - /* Compute relocation: it is expected to be 0 for "regular" executables, - non-zero for PIE ones. */ - relocation = -1; - for (i = 0; relocation == -1 && i < num_phdr; i++) - if (is_elf64) - { - Elf64_Phdr *const p = (Elf64_Phdr *) (phdr_buf + i * phdr_size); - - if (p->p_type == PT_PHDR) - relocation = phdr_memaddr - p->p_vaddr; - } - else - { - Elf32_Phdr *const p = (Elf32_Phdr *) (phdr_buf + i * phdr_size); - - if (p->p_type == PT_PHDR) - relocation = phdr_memaddr - p->p_vaddr; - } - - if (relocation == -1) - { - /* PT_PHDR is optional, but necessary for PIE in general. Fortunately - any real world executables, including PIE executables, have always - PT_PHDR present. PT_PHDR is not present in some shared libraries or - in fpc (Free Pascal 2.4) binaries but neither of those have a need for - or present DT_DEBUG anyway (fpc binaries are statically linked). - - Therefore if there exists DT_DEBUG there is always also PT_PHDR. - - GDB could find RELOCATION also from AT_ENTRY - e_entry. */ - - return 0; - } - - for (i = 0; i < num_phdr; i++) - { - if (is_elf64) - { - Elf64_Phdr *const p = (Elf64_Phdr *) (phdr_buf + i * phdr_size); - - if (p->p_type == PT_DYNAMIC) - return p->p_vaddr + relocation; - } - else - { - Elf32_Phdr *const p = (Elf32_Phdr *) (phdr_buf + i * phdr_size); - - if (p->p_type == PT_DYNAMIC) - return p->p_vaddr + relocation; - } - } - - return 0; -} - -/* Return &_r_debug in the inferior, or -1 if not present. Return value - can be 0 if the inferior does not yet have the library list initialized. - We look for DT_MIPS_RLD_MAP first. MIPS executables use this instead of - DT_DEBUG, although they sometimes contain an unused DT_DEBUG entry too. */ - -static CORE_ADDR -get_r_debug (const int pid, const int is_elf64) -{ - CORE_ADDR dynamic_memaddr; - const int dyn_size = is_elf64 ? sizeof (Elf64_Dyn) : sizeof (Elf32_Dyn); - unsigned char buf[sizeof (Elf64_Dyn)]; /* The larger of the two. */ - CORE_ADDR map = -1; - - dynamic_memaddr = get_dynamic (pid, is_elf64); - if (dynamic_memaddr == 0) - return map; - - while (linux_read_memory (dynamic_memaddr, buf, dyn_size) == 0) - { - if (is_elf64) - { - Elf64_Dyn *const dyn = (Elf64_Dyn *) buf; -#if defined DT_MIPS_RLD_MAP || defined DT_MIPS_RLD_MAP_REL - union - { - Elf64_Xword map; - unsigned char buf[sizeof (Elf64_Xword)]; - } - rld_map; -#endif -#ifdef DT_MIPS_RLD_MAP - if (dyn->d_tag == DT_MIPS_RLD_MAP) - { - if (linux_read_memory (dyn->d_un.d_val, - rld_map.buf, sizeof (rld_map.buf)) == 0) - return rld_map.map; - else - break; - } -#endif /* DT_MIPS_RLD_MAP */ -#ifdef DT_MIPS_RLD_MAP_REL - if (dyn->d_tag == DT_MIPS_RLD_MAP_REL) - { - if (linux_read_memory (dyn->d_un.d_val + dynamic_memaddr, - rld_map.buf, sizeof (rld_map.buf)) == 0) - return rld_map.map; - else - break; - } -#endif /* DT_MIPS_RLD_MAP_REL */ - - if (dyn->d_tag == DT_DEBUG && map == -1) - map = dyn->d_un.d_val; - - if (dyn->d_tag == DT_NULL) - break; - } - else - { - Elf32_Dyn *const dyn = (Elf32_Dyn *) buf; -#if defined DT_MIPS_RLD_MAP || defined DT_MIPS_RLD_MAP_REL - union - { - Elf32_Word map; - unsigned char buf[sizeof (Elf32_Word)]; - } - rld_map; -#endif -#ifdef DT_MIPS_RLD_MAP - if (dyn->d_tag == DT_MIPS_RLD_MAP) - { - if (linux_read_memory (dyn->d_un.d_val, - rld_map.buf, sizeof (rld_map.buf)) == 0) - return rld_map.map; - else - break; - } -#endif /* DT_MIPS_RLD_MAP */ -#ifdef DT_MIPS_RLD_MAP_REL - if (dyn->d_tag == DT_MIPS_RLD_MAP_REL) - { - if (linux_read_memory (dyn->d_un.d_val + dynamic_memaddr, - rld_map.buf, sizeof (rld_map.buf)) == 0) - return rld_map.map; - else - break; - } -#endif /* DT_MIPS_RLD_MAP_REL */ - - if (dyn->d_tag == DT_DEBUG && map == -1) - map = dyn->d_un.d_val; - - if (dyn->d_tag == DT_NULL) - break; - } - - dynamic_memaddr += dyn_size; - } - - return map; -} - -/* Read one pointer from MEMADDR in the inferior. */ - -static int -read_one_ptr (CORE_ADDR memaddr, CORE_ADDR *ptr, int ptr_size) -{ - int ret; - - /* Go through a union so this works on either big or little endian - hosts, when the inferior's pointer size is smaller than the size - of CORE_ADDR. It is assumed the inferior's endianness is the - same of the superior's. */ - union - { - CORE_ADDR core_addr; - unsigned int ui; - unsigned char uc; - } addr; - - ret = linux_read_memory (memaddr, &addr.uc, ptr_size); - if (ret == 0) - { - if (ptr_size == sizeof (CORE_ADDR)) - *ptr = addr.core_addr; - else if (ptr_size == sizeof (unsigned int)) - *ptr = addr.ui; - else - gdb_assert_not_reached ("unhandled pointer size"); - } - return ret; -} - -struct link_map_offsets - { - /* Offset and size of r_debug.r_version. */ - int r_version_offset; - - /* Offset and size of r_debug.r_map. */ - int r_map_offset; - - /* Offset to l_addr field in struct link_map. */ - int l_addr_offset; - - /* Offset to l_name field in struct link_map. */ - int l_name_offset; - - /* Offset to l_ld field in struct link_map. */ - int l_ld_offset; - - /* Offset to l_next field in struct link_map. */ - int l_next_offset; - - /* Offset to l_prev field in struct link_map. */ - int l_prev_offset; - }; - -/* Construct qXfer:libraries-svr4:read reply. */ - -static int -linux_qxfer_libraries_svr4 (const char *annex, unsigned char *readbuf, - unsigned const char *writebuf, - CORE_ADDR offset, int len) -{ - struct process_info_private *const priv = current_process ()->priv; - char filename[PATH_MAX]; - int pid, is_elf64; - - static const struct link_map_offsets lmo_32bit_offsets = - { - 0, /* r_version offset. */ - 4, /* r_debug.r_map offset. */ - 0, /* l_addr offset in link_map. */ - 4, /* l_name offset in link_map. */ - 8, /* l_ld offset in link_map. */ - 12, /* l_next offset in link_map. */ - 16 /* l_prev offset in link_map. */ - }; - - static const struct link_map_offsets lmo_64bit_offsets = - { - 0, /* r_version offset. */ - 8, /* r_debug.r_map offset. */ - 0, /* l_addr offset in link_map. */ - 8, /* l_name offset in link_map. */ - 16, /* l_ld offset in link_map. */ - 24, /* l_next offset in link_map. */ - 32 /* l_prev offset in link_map. */ - }; - const struct link_map_offsets *lmo; - unsigned int machine; - int ptr_size; - CORE_ADDR lm_addr = 0, lm_prev = 0; - CORE_ADDR l_name, l_addr, l_ld, l_next, l_prev; - int header_done = 0; - - if (writebuf != NULL) - return -2; - if (readbuf == NULL) - return -1; - - pid = lwpid_of (current_thread); - xsnprintf (filename, sizeof filename, "/proc/%d/exe", pid); - is_elf64 = elf_64_file_p (filename, &machine); - lmo = is_elf64 ? &lmo_64bit_offsets : &lmo_32bit_offsets; - ptr_size = is_elf64 ? 8 : 4; - - while (annex[0] != '\0') - { - const char *sep; - CORE_ADDR *addrp; - int name_len; - - sep = strchr (annex, '='); - if (sep == NULL) - break; - - name_len = sep - annex; - if (name_len == 5 && startswith (annex, "start")) - addrp = &lm_addr; - else if (name_len == 4 && startswith (annex, "prev")) - addrp = &lm_prev; - else - { - annex = strchr (sep, ';'); - if (annex == NULL) - break; - annex++; - continue; - } - - annex = decode_address_to_semicolon (addrp, sep + 1); - } - - if (lm_addr == 0) - { - int r_version = 0; - - if (priv->r_debug == 0) - priv->r_debug = get_r_debug (pid, is_elf64); - - /* We failed to find DT_DEBUG. Such situation will not change - for this inferior - do not retry it. Report it to GDB as - E01, see for the reasons at the GDB solib-svr4.c side. */ - if (priv->r_debug == (CORE_ADDR) -1) - return -1; - - if (priv->r_debug != 0) - { - if (linux_read_memory (priv->r_debug + lmo->r_version_offset, - (unsigned char *) &r_version, - sizeof (r_version)) != 0 - || r_version != 1) - { - warning ("unexpected r_debug version %d", r_version); - } - else if (read_one_ptr (priv->r_debug + lmo->r_map_offset, - &lm_addr, ptr_size) != 0) - { - warning ("unable to read r_map from 0x%lx", - (long) priv->r_debug + lmo->r_map_offset); - } - } - } - - std::string document = "<library-list-svr4 version=\"1.0\""; - - while (lm_addr - && read_one_ptr (lm_addr + lmo->l_name_offset, - &l_name, ptr_size) == 0 - && read_one_ptr (lm_addr + lmo->l_addr_offset, - &l_addr, ptr_size) == 0 - && read_one_ptr (lm_addr + lmo->l_ld_offset, - &l_ld, ptr_size) == 0 - && read_one_ptr (lm_addr + lmo->l_prev_offset, - &l_prev, ptr_size) == 0 - && read_one_ptr (lm_addr + lmo->l_next_offset, - &l_next, ptr_size) == 0) - { - unsigned char libname[PATH_MAX]; - - if (lm_prev != l_prev) - { - warning ("Corrupted shared library list: 0x%lx != 0x%lx", - (long) lm_prev, (long) l_prev); - break; - } - - /* Ignore the first entry even if it has valid name as the first entry - corresponds to the main executable. The first entry should not be - skipped if the dynamic loader was loaded late by a static executable - (see solib-svr4.c parameter ignore_first). But in such case the main - executable does not have PT_DYNAMIC present and this function already - exited above due to failed get_r_debug. */ - if (lm_prev == 0) - string_appendf (document, " main-lm=\"0x%lx\"", (unsigned long) lm_addr); - else - { - /* Not checking for error because reading may stop before - we've got PATH_MAX worth of characters. */ - libname[0] = '\0'; - linux_read_memory (l_name, libname, sizeof (libname) - 1); - libname[sizeof (libname) - 1] = '\0'; - if (libname[0] != '\0') - { - if (!header_done) - { - /* Terminate `<library-list-svr4'. */ - document += '>'; - header_done = 1; - } - - string_appendf (document, "<library name=\""); - xml_escape_text_append (&document, (char *) libname); - string_appendf (document, "\" lm=\"0x%lx\" " - "l_addr=\"0x%lx\" l_ld=\"0x%lx\"/>", - (unsigned long) lm_addr, (unsigned long) l_addr, - (unsigned long) l_ld); - } - } - - lm_prev = lm_addr; - lm_addr = l_next; - } - - if (!header_done) - { - /* Empty list; terminate `<library-list-svr4'. */ - document += "/>"; - } - else - document += "</library-list-svr4>"; - - int document_len = document.length (); - if (offset < document_len) - document_len -= offset; - else - document_len = 0; - if (len > document_len) - len = document_len; - - memcpy (readbuf, document.data () + offset, len); - - return len; -} - -#ifdef HAVE_LINUX_BTRACE - -/* See to_disable_btrace target method. */ - -static int -linux_low_disable_btrace (struct btrace_target_info *tinfo) -{ - enum btrace_error err; - - err = linux_disable_btrace (tinfo); - return (err == BTRACE_ERR_NONE ? 0 : -1); -} - -/* Encode an Intel Processor Trace configuration. */ - -static void -linux_low_encode_pt_config (struct buffer *buffer, - const struct btrace_data_pt_config *config) -{ - buffer_grow_str (buffer, "<pt-config>\n"); - - switch (config->cpu.vendor) - { - case CV_INTEL: - buffer_xml_printf (buffer, "<cpu vendor=\"GenuineIntel\" family=\"%u\" " - "model=\"%u\" stepping=\"%u\"/>\n", - config->cpu.family, config->cpu.model, - config->cpu.stepping); - break; - - default: - break; - } - - buffer_grow_str (buffer, "</pt-config>\n"); -} - -/* Encode a raw buffer. */ - -static void -linux_low_encode_raw (struct buffer *buffer, const gdb_byte *data, - unsigned int size) -{ - if (size == 0) - return; - - /* We use hex encoding - see gdbsupport/rsp-low.h. */ - buffer_grow_str (buffer, "<raw>\n"); - - while (size-- > 0) - { - char elem[2]; - - elem[0] = tohex ((*data >> 4) & 0xf); - elem[1] = tohex (*data++ & 0xf); - - buffer_grow (buffer, elem, 2); - } - - buffer_grow_str (buffer, "</raw>\n"); -} - -/* See to_read_btrace target method. */ - -static int -linux_low_read_btrace (struct btrace_target_info *tinfo, struct buffer *buffer, - enum btrace_read_type type) -{ - struct btrace_data btrace; - enum btrace_error err; - - err = linux_read_btrace (&btrace, tinfo, type); - if (err != BTRACE_ERR_NONE) - { - if (err == BTRACE_ERR_OVERFLOW) - buffer_grow_str0 (buffer, "E.Overflow."); - else - buffer_grow_str0 (buffer, "E.Generic Error."); - - return -1; - } - - switch (btrace.format) - { - case BTRACE_FORMAT_NONE: - buffer_grow_str0 (buffer, "E.No Trace."); - return -1; - - case BTRACE_FORMAT_BTS: - buffer_grow_str (buffer, "<!DOCTYPE btrace SYSTEM \"btrace.dtd\">\n"); - buffer_grow_str (buffer, "<btrace version=\"1.0\">\n"); - - for (const btrace_block &block : *btrace.variant.bts.blocks) - buffer_xml_printf (buffer, "<block begin=\"0x%s\" end=\"0x%s\"/>\n", - paddress (block.begin), paddress (block.end)); - - buffer_grow_str0 (buffer, "</btrace>\n"); - break; - - case BTRACE_FORMAT_PT: - buffer_grow_str (buffer, "<!DOCTYPE btrace SYSTEM \"btrace.dtd\">\n"); - buffer_grow_str (buffer, "<btrace version=\"1.0\">\n"); - buffer_grow_str (buffer, "<pt>\n"); - - linux_low_encode_pt_config (buffer, &btrace.variant.pt.config); - - linux_low_encode_raw (buffer, btrace.variant.pt.data, - btrace.variant.pt.size); - - buffer_grow_str (buffer, "</pt>\n"); - buffer_grow_str0 (buffer, "</btrace>\n"); - break; - - default: - buffer_grow_str0 (buffer, "E.Unsupported Trace Format."); - return -1; - } - - return 0; -} - -/* See to_btrace_conf target method. */ - -static int -linux_low_btrace_conf (const struct btrace_target_info *tinfo, - struct buffer *buffer) -{ - const struct btrace_config *conf; - - buffer_grow_str (buffer, "<!DOCTYPE btrace-conf SYSTEM \"btrace-conf.dtd\">\n"); - buffer_grow_str (buffer, "<btrace-conf version=\"1.0\">\n"); - - conf = linux_btrace_conf (tinfo); - if (conf != NULL) - { - switch (conf->format) - { - case BTRACE_FORMAT_NONE: - break; - - case BTRACE_FORMAT_BTS: - buffer_xml_printf (buffer, "<bts"); - buffer_xml_printf (buffer, " size=\"0x%x\"", conf->bts.size); - buffer_xml_printf (buffer, " />\n"); - break; - - case BTRACE_FORMAT_PT: - buffer_xml_printf (buffer, "<pt"); - buffer_xml_printf (buffer, " size=\"0x%x\"", conf->pt.size); - buffer_xml_printf (buffer, "/>\n"); - break; - } - } - - buffer_grow_str0 (buffer, "</btrace-conf>\n"); - return 0; -} -#endif /* HAVE_LINUX_BTRACE */ - -/* See nat/linux-nat.h. */ - -ptid_t -current_lwp_ptid (void) -{ - return ptid_of (current_thread); -} - -/* Implementation of the target_ops method "breakpoint_kind_from_pc". */ - -static int -linux_breakpoint_kind_from_pc (CORE_ADDR *pcptr) -{ - if (the_low_target.breakpoint_kind_from_pc != NULL) - return (*the_low_target.breakpoint_kind_from_pc) (pcptr); - else - return default_breakpoint_kind_from_pc (pcptr); -} - -/* Implementation of the target_ops method "sw_breakpoint_from_kind". */ - -static const gdb_byte * -linux_sw_breakpoint_from_kind (int kind, int *size) -{ - gdb_assert (the_low_target.sw_breakpoint_from_kind != NULL); - - return (*the_low_target.sw_breakpoint_from_kind) (kind, size); -} - -/* Implementation of the target_ops method - "breakpoint_kind_from_current_state". */ - -static int -linux_breakpoint_kind_from_current_state (CORE_ADDR *pcptr) -{ - if (the_low_target.breakpoint_kind_from_current_state != NULL) - return (*the_low_target.breakpoint_kind_from_current_state) (pcptr); - else - return linux_breakpoint_kind_from_pc (pcptr); -} - -/* Default implementation of linux_target_ops method "set_pc" for - 32-bit pc register which is literally named "pc". */ - -void -linux_set_pc_32bit (struct regcache *regcache, CORE_ADDR pc) -{ - uint32_t newpc = pc; - - supply_register_by_name (regcache, "pc", &newpc); -} - -/* Default implementation of linux_target_ops method "get_pc" for - 32-bit pc register which is literally named "pc". */ - -CORE_ADDR -linux_get_pc_32bit (struct regcache *regcache) -{ - uint32_t pc; - - collect_register_by_name (regcache, "pc", &pc); - if (debug_threads) - debug_printf ("stop pc is 0x%" PRIx32 "\n", pc); - return pc; -} - -/* Default implementation of linux_target_ops method "set_pc" for - 64-bit pc register which is literally named "pc". */ - -void -linux_set_pc_64bit (struct regcache *regcache, CORE_ADDR pc) -{ - uint64_t newpc = pc; - - supply_register_by_name (regcache, "pc", &newpc); -} - -/* Default implementation of linux_target_ops method "get_pc" for - 64-bit pc register which is literally named "pc". */ - -CORE_ADDR -linux_get_pc_64bit (struct regcache *regcache) -{ - uint64_t pc; - - collect_register_by_name (regcache, "pc", &pc); - if (debug_threads) - debug_printf ("stop pc is 0x%" PRIx64 "\n", pc); - return pc; -} - -/* See linux-low.h. */ - -int -linux_get_auxv (int wordsize, CORE_ADDR match, CORE_ADDR *valp) -{ - gdb_byte *data = (gdb_byte *) alloca (2 * wordsize); - int offset = 0; - - gdb_assert (wordsize == 4 || wordsize == 8); - - while ((*the_target->read_auxv) (offset, data, 2 * wordsize) == 2 * wordsize) - { - if (wordsize == 4) - { - uint32_t *data_p = (uint32_t *) data; - if (data_p[0] == match) - { - *valp = data_p[1]; - return 1; - } - } - else - { - uint64_t *data_p = (uint64_t *) data; - if (data_p[0] == match) - { - *valp = data_p[1]; - return 1; - } - } - - offset += 2 * wordsize; - } - - return 0; -} - -/* See linux-low.h. */ - -CORE_ADDR -linux_get_hwcap (int wordsize) -{ - CORE_ADDR hwcap = 0; - linux_get_auxv (wordsize, AT_HWCAP, &hwcap); - return hwcap; -} - -/* See linux-low.h. */ - -CORE_ADDR -linux_get_hwcap2 (int wordsize) -{ - CORE_ADDR hwcap2 = 0; - linux_get_auxv (wordsize, AT_HWCAP2, &hwcap2); - return hwcap2; -} - -static struct target_ops linux_target_ops = { - linux_create_inferior, - linux_post_create_inferior, - linux_attach, - linux_kill, - linux_detach, - linux_mourn, - linux_join, - linux_thread_alive, - linux_resume, - linux_wait, - linux_fetch_registers, - linux_store_registers, - linux_prepare_to_access_memory, - linux_done_accessing_memory, - linux_read_memory, - linux_write_memory, - linux_look_up_symbols, - linux_request_interrupt, - linux_read_auxv, - linux_supports_z_point_type, - linux_insert_point, - linux_remove_point, - linux_stopped_by_sw_breakpoint, - linux_supports_stopped_by_sw_breakpoint, - linux_stopped_by_hw_breakpoint, - linux_supports_stopped_by_hw_breakpoint, - linux_supports_hardware_single_step, - linux_stopped_by_watchpoint, - linux_stopped_data_address, -#if defined(__UCLIBC__) && defined(HAS_NOMMU) \ - && defined(PT_TEXT_ADDR) && defined(PT_DATA_ADDR) \ - && defined(PT_TEXT_END_ADDR) - linux_read_offsets, -#else - NULL, -#endif -#ifdef USE_THREAD_DB - thread_db_get_tls_address, -#else - NULL, -#endif - hostio_last_error_from_errno, - linux_qxfer_osdata, - linux_xfer_siginfo, - linux_supports_non_stop, - linux_async, - linux_start_non_stop, - linux_supports_multi_process, - linux_supports_fork_events, - linux_supports_vfork_events, - linux_supports_exec_events, - linux_handle_new_gdb_connection, -#ifdef USE_THREAD_DB - thread_db_handle_monitor_command, -#else - NULL, -#endif - linux_common_core_of_thread, - linux_read_loadmap, - linux_process_qsupported, - linux_supports_tracepoints, - linux_read_pc, - linux_write_pc, - linux_thread_stopped, - NULL, - linux_pause_all, - linux_unpause_all, - linux_stabilize_threads, - linux_install_fast_tracepoint_jump_pad, - linux_emit_ops, - linux_supports_disable_randomization, - linux_get_min_fast_tracepoint_insn_len, - linux_qxfer_libraries_svr4, - linux_supports_agent, -#ifdef HAVE_LINUX_BTRACE - linux_enable_btrace, - linux_low_disable_btrace, - linux_low_read_btrace, - linux_low_btrace_conf, -#else - NULL, - NULL, - NULL, - NULL, -#endif - linux_supports_range_stepping, - linux_proc_pid_to_exec_file, - linux_mntns_open_cloexec, - linux_mntns_unlink, - linux_mntns_readlink, - linux_breakpoint_kind_from_pc, - linux_sw_breakpoint_from_kind, - linux_proc_tid_get_name, - linux_breakpoint_kind_from_current_state, - linux_supports_software_single_step, - linux_supports_catch_syscall, - linux_get_ipa_tdesc_idx, -#if USE_THREAD_DB - thread_db_thread_handle, -#else - NULL, -#endif -}; - -#ifdef HAVE_LINUX_REGSETS -void -initialize_regsets_info (struct regsets_info *info) -{ - for (info->num_regsets = 0; - info->regsets[info->num_regsets].size >= 0; - info->num_regsets++) - ; -} -#endif - -void -initialize_low (void) -{ - struct sigaction sigchld_action; - - memset (&sigchld_action, 0, sizeof (sigchld_action)); - set_target_ops (&linux_target_ops); - - linux_ptrace_init_warnings (); - linux_proc_init_warnings (); - - sigchld_action.sa_handler = sigchld_handler; - sigemptyset (&sigchld_action.sa_mask); - sigchld_action.sa_flags = SA_RESTART; - sigaction (SIGCHLD, &sigchld_action, NULL); - - initialize_low_arch (); - - linux_check_ptrace_features (); -} diff -Nru gdb-9.1/gdb/gdbserver/linux-low.h gdb-10.2/gdb/gdbserver/linux-low.h --- gdb-9.1/gdb/gdbserver/linux-low.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/linux-low.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,456 +0,0 @@ -/* Internal interfaces for the GNU/Linux specific target code for gdbserver. - Copyright (C) 2002-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef GDBSERVER_LINUX_LOW_H -#define GDBSERVER_LINUX_LOW_H - -#include "nat/linux-nat.h" -#include "nat/gdb_thread_db.h" -#include <signal.h> - -#include "gdbthread.h" -#include "gdb_proc_service.h" - -/* Included for ptrace type definitions. */ -#include "nat/linux-ptrace.h" -#include "target/waitstatus.h" /* For enum target_stop_reason. */ -#include "tracepoint.h" - -#define PTRACE_XFER_TYPE long - -#ifdef HAVE_LINUX_REGSETS -typedef void (*regset_fill_func) (struct regcache *, void *); -typedef void (*regset_store_func) (struct regcache *, const void *); -enum regset_type { - GENERAL_REGS, - FP_REGS, - EXTENDED_REGS, - OPTIONAL_REGS, /* Do not error if the regset cannot be accessed. */ -}; - -/* The arch's regsets array initializer must be terminated with a NULL - regset. */ -#define NULL_REGSET \ - { 0, 0, 0, -1, (enum regset_type) -1, NULL, NULL } - -struct regset_info -{ - int get_request, set_request; - /* If NT_TYPE isn't 0, it will be passed to ptrace as the 3rd - argument and the 4th argument should be "const struct iovec *". */ - int nt_type; - int size; - enum regset_type type; - regset_fill_func fill_function; - regset_store_func store_function; -}; - -/* Aggregation of all the supported regsets of a given - architecture/mode. */ - -struct regsets_info -{ - /* The regsets array. */ - struct regset_info *regsets; - - /* The number of regsets in the REGSETS array. */ - int num_regsets; - - /* If we get EIO on a regset, do not try it again. Note the set of - supported regsets may depend on processor mode on biarch - machines. This is a (lazily allocated) array holding one boolean - byte (0/1) per regset, with each element corresponding to the - regset in the REGSETS array above at the same offset. */ - char *disabled_regsets; -}; - -#endif - -/* Mapping between the general-purpose registers in `struct user' - format and GDB's register array layout. */ - -struct usrregs_info -{ - /* The number of registers accessible. */ - int num_regs; - - /* The registers map. */ - int *regmap; -}; - -/* All info needed to access an architecture/mode's registers. */ - -struct regs_info -{ - /* Regset support bitmap: 1 for registers that are transferred as a part - of a regset, 0 for ones that need to be handled individually. This - can be NULL if all registers are transferred with regsets or regsets - are not supported. */ - unsigned char *regset_bitmap; - - /* Info used when accessing registers with PTRACE_PEEKUSER / - PTRACE_POKEUSER. This can be NULL if all registers are - transferred with regsets .*/ - struct usrregs_info *usrregs; - -#ifdef HAVE_LINUX_REGSETS - /* Info used when accessing registers with regsets. */ - struct regsets_info *regsets_info; -#endif -}; - -struct process_info_private -{ - /* Arch-specific additions. */ - struct arch_process_info *arch_private; - - /* libthread_db-specific additions. Not NULL if this process has loaded - thread_db, and it is active. */ - struct thread_db *thread_db; - - /* &_r_debug. 0 if not yet determined. -1 if no PT_DYNAMIC in Phdrs. */ - CORE_ADDR r_debug; -}; - -struct lwp_info; - -struct linux_target_ops -{ - /* Architecture-specific setup. */ - void (*arch_setup) (void); - - const struct regs_info *(*regs_info) (void); - int (*cannot_fetch_register) (int); - - /* Returns 0 if we can store the register, 1 if we can not - store the register, and 2 if failure to store the register - is acceptable. */ - int (*cannot_store_register) (int); - - /* Hook to fetch a register in some non-standard way. Used for - example by backends that have read-only registers with hardcoded - values (e.g., IA64's gr0/fr0/fr1). Returns true if register - REGNO was supplied, false if not, and we should fallback to the - standard ptrace methods. */ - int (*fetch_register) (struct regcache *regcache, int regno); - - CORE_ADDR (*get_pc) (struct regcache *regcache); - void (*set_pc) (struct regcache *regcache, CORE_ADDR newpc); - - /* See target.h for details. */ - int (*breakpoint_kind_from_pc) (CORE_ADDR *pcptr); - - /* See target.h for details. */ - const gdb_byte *(*sw_breakpoint_from_kind) (int kind, int *size); - - /* Find the next possible PCs after the current instruction executes. */ - std::vector<CORE_ADDR> (*get_next_pcs) (struct regcache *regcache); - - int decr_pc_after_break; - int (*breakpoint_at) (CORE_ADDR pc); - - /* Breakpoint and watchpoint related functions. See target.h for - comments. */ - int (*supports_z_point_type) (char z_type); - int (*insert_point) (enum raw_bkpt_type type, CORE_ADDR addr, - int size, struct raw_breakpoint *bp); - int (*remove_point) (enum raw_bkpt_type type, CORE_ADDR addr, - int size, struct raw_breakpoint *bp); - - int (*stopped_by_watchpoint) (void); - CORE_ADDR (*stopped_data_address) (void); - - /* Hooks to reformat register data for PEEKUSR/POKEUSR (in particular - for registers smaller than an xfer unit). */ - void (*collect_ptrace_register) (struct regcache *regcache, - int regno, char *buf); - void (*supply_ptrace_register) (struct regcache *regcache, - int regno, const char *buf); - - /* Hook to convert from target format to ptrace format and back. - Returns true if any conversion was done; false otherwise. - If DIRECTION is 1, then copy from INF to NATIVE. - If DIRECTION is 0, copy from NATIVE to INF. */ - int (*siginfo_fixup) (siginfo_t *native, gdb_byte *inf, int direction); - - /* Hook to call when a new process is created or attached to. - If extra per-process architecture-specific data is needed, - allocate it here. */ - struct arch_process_info * (*new_process) (void); - - /* Hook to call when a process is being deleted. If extra per-process - architecture-specific data is needed, delete it here. */ - void (*delete_process) (struct arch_process_info *info); - - /* Hook to call when a new thread is detected. - If extra per-thread architecture-specific data is needed, - allocate it here. */ - void (*new_thread) (struct lwp_info *); - - /* Hook to call when a thread is being deleted. If extra per-thread - architecture-specific data is needed, delete it here. */ - void (*delete_thread) (struct arch_lwp_info *); - - /* Hook to call, if any, when a new fork is attached. */ - void (*new_fork) (struct process_info *parent, struct process_info *child); - - /* Hook to call prior to resuming a thread. */ - void (*prepare_to_resume) (struct lwp_info *); - - /* Hook to support target specific qSupported. */ - void (*process_qsupported) (char **, int count); - - /* Returns true if the low target supports tracepoints. */ - int (*supports_tracepoints) (void); - - /* Fill ADDRP with the thread area address of LWPID. Returns 0 on - success, -1 on failure. */ - int (*get_thread_area) (int lwpid, CORE_ADDR *addrp); - - /* Install a fast tracepoint jump pad. See target.h for - comments. */ - int (*install_fast_tracepoint_jump_pad) (CORE_ADDR tpoint, CORE_ADDR tpaddr, - CORE_ADDR collector, - CORE_ADDR lockaddr, - ULONGEST orig_size, - CORE_ADDR *jump_entry, - CORE_ADDR *trampoline, - ULONGEST *trampoline_size, - unsigned char *jjump_pad_insn, - ULONGEST *jjump_pad_insn_size, - CORE_ADDR *adjusted_insn_addr, - CORE_ADDR *adjusted_insn_addr_end, - char *err); - - /* Return the bytecode operations vector for the current inferior. - Returns NULL if bytecode compilation is not supported. */ - struct emit_ops *(*emit_ops) (void); - - /* Return the minimum length of an instruction that can be safely overwritten - for use as a fast tracepoint. */ - int (*get_min_fast_tracepoint_insn_len) (void); - - /* Returns true if the low target supports range stepping. */ - int (*supports_range_stepping) (void); - - /* See target.h. */ - int (*breakpoint_kind_from_current_state) (CORE_ADDR *pcptr); - - /* See target.h. */ - int (*supports_hardware_single_step) (void); - - /* Fill *SYSNO with the syscall nr trapped. Only to be called when - inferior is stopped due to SYSCALL_SIGTRAP. */ - void (*get_syscall_trapinfo) (struct regcache *regcache, int *sysno); - - /* See target.h. */ - int (*get_ipa_tdesc_idx) (void); -}; - -extern struct linux_target_ops the_low_target; - -#define get_thread_lwp(thr) ((struct lwp_info *) (thread_target_data (thr))) -#define get_lwp_thread(lwp) ((lwp)->thread) - -/* This struct is recorded in the target_data field of struct thread_info. - - On linux ``all_threads'' is keyed by the LWP ID, which we use as the - GDB protocol representation of the thread ID. Threads also have - a "process ID" (poorly named) which is (presently) the same as the - LWP ID. - - There is also ``all_processes'' is keyed by the "overall process ID", - which GNU/Linux calls tgid, "thread group ID". */ - -struct lwp_info -{ - /* Backlink to the parent object. */ - struct thread_info *thread; - - /* If this flag is set, the next SIGSTOP will be ignored (the - process will be immediately resumed). This means that either we - sent the SIGSTOP to it ourselves and got some other pending event - (so the SIGSTOP is still pending), or that we stopped the - inferior implicitly via PTRACE_ATTACH and have not waited for it - yet. */ - int stop_expected; - - /* When this is true, we shall not try to resume this thread, even - if last_resume_kind isn't resume_stop. */ - int suspended; - - /* If this flag is set, the lwp is known to be stopped right now (stop - event already received in a wait()). */ - int stopped; - - /* Signal whether we are in a SYSCALL_ENTRY or - in a SYSCALL_RETURN event. - Values: - - TARGET_WAITKIND_SYSCALL_ENTRY - - TARGET_WAITKIND_SYSCALL_RETURN */ - enum target_waitkind syscall_state; - - /* When stopped is set, the last wait status recorded for this lwp. */ - int last_status; - - /* If WAITSTATUS->KIND != TARGET_WAITKIND_IGNORE, the waitstatus for - this LWP's last event, to pass to GDB without any further - processing. This is used to store extended ptrace event - information or exit status until it can be reported to GDB. */ - struct target_waitstatus waitstatus; - - /* A pointer to the fork child/parent relative. Valid only while - the parent fork event is not reported to higher layers. Used to - avoid wildcard vCont actions resuming a fork child before GDB is - notified about the parent's fork event. */ - struct lwp_info *fork_relative; - - /* When stopped is set, this is where the lwp last stopped, with - decr_pc_after_break already accounted for. If the LWP is - running, this is the address at which the lwp was resumed. */ - CORE_ADDR stop_pc; - - /* If this flag is set, STATUS_PENDING is a waitstatus that has not yet - been reported. */ - int status_pending_p; - int status_pending; - - /* The reason the LWP last stopped, if we need to track it - (breakpoint, watchpoint, etc.) */ - enum target_stop_reason stop_reason; - - /* On architectures where it is possible to know the data address of - a triggered watchpoint, STOPPED_DATA_ADDRESS is non-zero, and - contains such data address. Only valid if STOPPED_BY_WATCHPOINT - is true. */ - CORE_ADDR stopped_data_address; - - /* If this is non-zero, it is a breakpoint to be reinserted at our next - stop (SIGTRAP stops only). */ - CORE_ADDR bp_reinsert; - - /* If this flag is set, the last continue operation at the ptrace - level on this process was a single-step. */ - int stepping; - - /* Range to single step within. This is a copy of the step range - passed along the last resume request. See 'struct - thread_resume'. */ - CORE_ADDR step_range_start; /* Inclusive */ - CORE_ADDR step_range_end; /* Exclusive */ - - /* If this flag is set, we need to set the event request flags the - next time we see this LWP stop. */ - int must_set_ptrace_flags; - - /* If this is non-zero, it points to a chain of signals which need to - be delivered to this process. */ - struct pending_signals *pending_signals; - - /* A link used when resuming. It is initialized from the resume request, - and then processed and cleared in linux_resume_one_lwp. */ - struct thread_resume *resume; - - /* Information bout this lwp's fast tracepoint collection status (is it - currently stopped in the jump pad, and if so, before or at/after the - relocated instruction). Normally, we won't care about this, but we will - if a signal arrives to this lwp while it is collecting. */ - fast_tpoint_collect_result collecting_fast_tracepoint; - - /* If this is non-zero, it points to a chain of signals which need - to be reported to GDB. These were deferred because the thread - was doing a fast tracepoint collect when they arrived. */ - struct pending_signals *pending_signals_to_report; - - /* When collecting_fast_tracepoint is first found to be 1, we insert - a exit-jump-pad-quickly breakpoint. This is it. */ - struct breakpoint *exit_jump_pad_bkpt; - -#ifdef USE_THREAD_DB - int thread_known; - /* The thread handle, used for e.g. TLS access. Only valid if - THREAD_KNOWN is set. */ - td_thrhandle_t th; - - /* The pthread_t handle. */ - thread_t thread_handle; -#endif - - /* Arch-specific additions. */ - struct arch_lwp_info *arch_private; -}; - -int linux_pid_exe_is_elf_64_file (int pid, unsigned int *machine); - -/* Attach to PTID. Returns 0 on success, non-zero otherwise (an - errno). */ -int linux_attach_lwp (ptid_t ptid); - -struct lwp_info *find_lwp_pid (ptid_t ptid); -/* For linux_stop_lwp see nat/linux-nat.h. */ - -#ifdef HAVE_LINUX_REGSETS -void initialize_regsets_info (struct regsets_info *regsets_info); -#endif - -void initialize_low_arch (void); - -void linux_set_pc_32bit (struct regcache *regcache, CORE_ADDR pc); -CORE_ADDR linux_get_pc_32bit (struct regcache *regcache); - -void linux_set_pc_64bit (struct regcache *regcache, CORE_ADDR pc); -CORE_ADDR linux_get_pc_64bit (struct regcache *regcache); - -/* From thread-db.c */ -int thread_db_init (void); -void thread_db_detach (struct process_info *); -void thread_db_mourn (struct process_info *); -int thread_db_handle_monitor_command (char *); -int thread_db_get_tls_address (struct thread_info *thread, CORE_ADDR offset, - CORE_ADDR load_module, CORE_ADDR *address); -int thread_db_look_up_one_symbol (const char *name, CORE_ADDR *addrp); - -/* Called from linux-low.c when a clone event is detected. Upon entry, - both the clone and the parent should be stopped. This function does - whatever is required have the clone under thread_db's control. */ - -void thread_db_notice_clone (struct thread_info *parent_thr, ptid_t child_ptid); - -bool thread_db_thread_handle (ptid_t ptid, gdb_byte **handle, int *handle_len); - -extern int have_ptrace_getregset; - -/* Search for the value with type MATCH in the auxv vector with - entries of length WORDSIZE bytes. If found, store the value in - *VALP and return 1. If not found or if there is an error, return - 0. */ - -int linux_get_auxv (int wordsize, CORE_ADDR match, - CORE_ADDR *valp); - -/* Fetch the AT_HWCAP entry from the auxv vector, where entries are length - WORDSIZE. If no entry was found, return zero. */ - -CORE_ADDR linux_get_hwcap (int wordsize); - -/* Fetch the AT_HWCAP2 entry from the auxv vector, where entries are length - WORDSIZE. If no entry was found, return zero. */ - -CORE_ADDR linux_get_hwcap2 (int wordsize); - -#endif /* GDBSERVER_LINUX_LOW_H */ diff -Nru gdb-9.1/gdb/gdbserver/linux-m32r-low.c gdb-10.2/gdb/gdbserver/linux-m32r-low.c --- gdb-9.1/gdb/gdbserver/linux-m32r-low.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/linux-m32r-low.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,157 +0,0 @@ -/* GNU/Linux/m32r specific low level interface, for the remote server for GDB. - Copyright (C) 2005-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "server.h" -#include "linux-low.h" - -#ifdef HAVE_SYS_REG_H -#include <sys/reg.h> -#endif - -/* Defined in auto-generated file reg-m32r.c. */ -void init_registers_m32r (void); -extern const struct target_desc *tdesc_m32r; - -#define m32r_num_regs 25 - -static int m32r_regmap[] = { -#ifdef PT_R0 - PT_R0, PT_R1, PT_R2, PT_R3, PT_R4, PT_R5, PT_R6, PT_R7, - PT_R8, PT_R9, PT_R10, PT_R11, PT_R12, PT_FP, PT_LR, PT_SPU, - PT_PSW, PT_CBR, PT_SPI, PT_SPU, PT_BPC, PT_PC, PT_ACCL, PT_ACCH, PT_EVB -#else - 4 * 4, 4 * 5, 4 * 6, 4 * 7, 4 * 0, 4 * 1, 4 * 2, 4 * 8, - 4 * 9, 4 * 10, 4 * 11, 4 * 12, 4 * 13, 4 * 24, 4 * 25, 4 * 23, - 4 * 19, 4 * 31, 4 * 26, 4 * 23, 4 * 20, 4 * 30, 4 * 16, 4 * 15, 4 * 32 -#endif -}; - -static int -m32r_cannot_store_register (int regno) -{ - return (regno >= m32r_num_regs); -} - -static int -m32r_cannot_fetch_register (int regno) -{ - return (regno >= m32r_num_regs); -} - -static const unsigned short m32r_breakpoint = 0x10f1; -#define m32r_breakpoint_len 2 - -/* Implementation of linux_target_ops method "sw_breakpoint_from_kind". */ - -static const gdb_byte * -m32r_sw_breakpoint_from_kind (int kind, int *size) -{ - *size = m32r_breakpoint_len; - return (const gdb_byte *) &m32r_breakpoint; -} - -static int -m32r_breakpoint_at (CORE_ADDR where) -{ - unsigned short insn; - - (*the_target->read_memory) (where, (unsigned char *) &insn, - m32r_breakpoint_len); - if (insn == m32r_breakpoint) - return 1; - - /* If necessary, recognize more trap instructions here. GDB only uses the - one. */ - return 0; -} - -static void -m32r_arch_setup (void) -{ - current_process ()->tdesc = tdesc_m32r; -} - -/* Support for hardware single step. */ - -static int -m32r_supports_hardware_single_step (void) -{ - return 1; -} - -static struct usrregs_info m32r_usrregs_info = - { - m32r_num_regs, - m32r_regmap, - }; - -static struct regs_info regs_info = - { - NULL, /* regset_bitmap */ - &m32r_usrregs_info, - }; - -static const struct regs_info * -m32r_regs_info (void) -{ - return ®s_info; -} - -struct linux_target_ops the_low_target = { - m32r_arch_setup, - m32r_regs_info, - m32r_cannot_fetch_register, - m32r_cannot_store_register, - NULL, /* fetch_register */ - linux_get_pc_32bit, - linux_set_pc_32bit, - NULL, /* breakpoint_from_pc */ - m32r_sw_breakpoint_from_kind, - NULL, - 0, - m32r_breakpoint_at, - NULL, /* supports_z_point_type */ - NULL, /* insert_point */ - NULL, /* remove_point */ - NULL, /* stopped_by_watchpoint */ - NULL, /* stopped_data_address */ - NULL, /* collect_ptrace_register */ - NULL, /* supply_ptrace_register */ - NULL, /* siginfo_fixup */ - NULL, /* new_process */ - NULL, /* delete_process */ - NULL, /* new_thread */ - NULL, /* delete_thread */ - NULL, /* new_fork */ - NULL, /* prepare_to_resume */ - NULL, /* process_qsupported */ - NULL, /* supports_tracepoints */ - NULL, /* get_thread_area */ - NULL, /* install_fast_tracepoint_jump_pad */ - NULL, /* emit_ops */ - NULL, /* get_min_fast_tracepoint_insn_len */ - NULL, /* supports_range_stepping */ - NULL, /* breakpoint_kind_from_current_state */ - m32r_supports_hardware_single_step, -}; - -void -initialize_low_arch (void) -{ - init_registers_m32r (); -} diff -Nru gdb-9.1/gdb/gdbserver/linux-m68k-low.c gdb-10.2/gdb/gdbserver/linux-m68k-low.c --- gdb-9.1/gdb/gdbserver/linux-m68k-low.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/linux-m68k-low.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,255 +0,0 @@ -/* GNU/Linux/m68k specific low level interface, for the remote server for GDB. - Copyright (C) 1995-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "server.h" -#include "linux-low.h" - -/* Defined in auto-generated file reg-m68k.c. */ -void init_registers_m68k (void); -extern const struct target_desc *tdesc_m68k; - -#ifdef HAVE_SYS_REG_H -#include <sys/reg.h> -#endif - -#define m68k_num_regs 29 -#define m68k_num_gregs 18 - -/* This table must line up with REGISTER_NAMES in tm-m68k.h */ -static int m68k_regmap[] = -{ -#ifdef PT_D0 - PT_D0 * 4, PT_D1 * 4, PT_D2 * 4, PT_D3 * 4, - PT_D4 * 4, PT_D5 * 4, PT_D6 * 4, PT_D7 * 4, - PT_A0 * 4, PT_A1 * 4, PT_A2 * 4, PT_A3 * 4, - PT_A4 * 4, PT_A5 * 4, PT_A6 * 4, PT_USP * 4, - PT_SR * 4, PT_PC * 4, -#else - 14 * 4, 0 * 4, 1 * 4, 2 * 4, 3 * 4, 4 * 4, 5 * 4, 6 * 4, - 7 * 4, 8 * 4, 9 * 4, 10 * 4, 11 * 4, 12 * 4, 13 * 4, 15 * 4, - 17 * 4, 18 * 4, -#endif -#ifdef PT_FP0 - PT_FP0 * 4, PT_FP1 * 4, PT_FP2 * 4, PT_FP3 * 4, - PT_FP4 * 4, PT_FP5 * 4, PT_FP6 * 4, PT_FP7 * 4, - PT_FPCR * 4, PT_FPSR * 4, PT_FPIAR * 4 -#else - 21 * 4, 24 * 4, 27 * 4, 30 * 4, 33 * 4, 36 * 4, - 39 * 4, 42 * 4, 45 * 4, 46 * 4, 47 * 4 -#endif -}; - -static int -m68k_cannot_store_register (int regno) -{ - return (regno >= m68k_num_regs); -} - -static int -m68k_cannot_fetch_register (int regno) -{ - return (regno >= m68k_num_regs); -} - -#ifdef HAVE_PTRACE_GETREGS -#include <sys/procfs.h> -#include "nat/gdb_ptrace.h" - -static void -m68k_fill_gregset (struct regcache *regcache, void *buf) -{ - int i; - - for (i = 0; i < m68k_num_gregs; i++) - collect_register (regcache, i, (char *) buf + m68k_regmap[i]); -} - -static void -m68k_store_gregset (struct regcache *regcache, const void *buf) -{ - int i; - - for (i = 0; i < m68k_num_gregs; i++) - supply_register (regcache, i, (const char *) buf + m68k_regmap[i]); -} - -static void -m68k_fill_fpregset (struct regcache *regcache, void *buf) -{ - int i; - - for (i = m68k_num_gregs; i < m68k_num_regs; i++) - collect_register (regcache, i, ((char *) buf - + (m68k_regmap[i] - m68k_regmap[m68k_num_gregs]))); -} - -static void -m68k_store_fpregset (struct regcache *regcache, const void *buf) -{ - int i; - - for (i = m68k_num_gregs; i < m68k_num_regs; i++) - supply_register (regcache, i, ((const char *) buf - + (m68k_regmap[i] - m68k_regmap[m68k_num_gregs]))); -} - -#endif /* HAVE_PTRACE_GETREGS */ - -static struct regset_info m68k_regsets[] = { -#ifdef HAVE_PTRACE_GETREGS - { PTRACE_GETREGS, PTRACE_SETREGS, 0, sizeof (elf_gregset_t), - GENERAL_REGS, - m68k_fill_gregset, m68k_store_gregset }, - { PTRACE_GETFPREGS, PTRACE_SETFPREGS, 0, sizeof (elf_fpregset_t), - FP_REGS, - m68k_fill_fpregset, m68k_store_fpregset }, -#endif /* HAVE_PTRACE_GETREGS */ - NULL_REGSET -}; - -static const gdb_byte m68k_breakpoint[] = { 0x4E, 0x4F }; -#define m68k_breakpoint_len 2 - -/* Implementation of linux_target_ops method "sw_breakpoint_from_kind". */ - -static const gdb_byte * -m68k_sw_breakpoint_from_kind (int kind, int *size) -{ - *size = m68k_breakpoint_len; - return m68k_breakpoint; -} - -static int -m68k_breakpoint_at (CORE_ADDR pc) -{ - unsigned char c[2]; - - read_inferior_memory (pc, c, 2); - if (c[0] == 0x4E && c[1] == 0x4F) - return 1; - - return 0; -} - -#include <asm/ptrace.h> - -#ifdef PTRACE_GET_THREAD_AREA -/* Fetch the thread-local storage pointer for libthread_db. */ - -ps_err_e -ps_get_thread_area (struct ps_prochandle *ph, - lwpid_t lwpid, int idx, void **base) -{ - if (ptrace (PTRACE_GET_THREAD_AREA, lwpid, NULL, base) != 0) - return PS_ERR; - - /* IDX is the bias from the thread pointer to the beginning of the - thread descriptor. It has to be subtracted due to implementation - quirks in libthread_db. */ - *base = (void *) ((char *)*base - idx); - - return PS_OK; -} -#endif /* PTRACE_GET_THREAD_AREA */ - -static struct regsets_info m68k_regsets_info = - { - m68k_regsets, /* regsets */ - 0, /* num_regsets */ - NULL, /* disabled_regsets */ - }; - -static struct usrregs_info m68k_usrregs_info = - { - m68k_num_regs, - m68k_regmap, - }; - -static struct regs_info regs_info = - { - NULL, /* regset_bitmap */ - &m68k_usrregs_info, - &m68k_regsets_info - }; - -static const struct regs_info * -m68k_regs_info (void) -{ - return ®s_info; -} - -static void -m68k_arch_setup (void) -{ - current_process ()->tdesc = tdesc_m68k; -} - -/* Support for hardware single step. */ - -static int -m68k_supports_hardware_single_step (void) -{ - return 1; -} - -struct linux_target_ops the_low_target = { - m68k_arch_setup, - m68k_regs_info, - m68k_cannot_fetch_register, - m68k_cannot_store_register, - NULL, /* fetch_register */ - linux_get_pc_32bit, - linux_set_pc_32bit, - NULL, /* breakpoint_kind_from_pc */ - m68k_sw_breakpoint_from_kind, - NULL, - 2, - m68k_breakpoint_at, - NULL, /* supports_z_point_type */ - NULL, /* insert_point */ - NULL, /* remove_point */ - NULL, /* stopped_by_watchpoint */ - NULL, /* stopped_data_address */ - NULL, /* collect_ptrace_register */ - NULL, /* supply_ptrace_register */ - NULL, /* siginfo_fixup */ - NULL, /* new_process */ - NULL, /* delete_process */ - NULL, /* new_thread */ - NULL, /* delete_thread */ - NULL, /* new_fork */ - NULL, /* prepare_to_resume */ - NULL, /* process_qsupported */ - NULL, /* supports_tracepoints */ - NULL, /* get_thread_area */ - NULL, /* install_fast_tracepoint_jump_pad */ - NULL, /* emit_ops */ - NULL, /* get_min_fast_tracepoint_insn_len */ - NULL, /* supports_range_stepping */ - NULL, /* breakpoint_kind_from_current_state */ - m68k_supports_hardware_single_step, -}; - -void -initialize_low_arch (void) -{ - /* Initialize the Linux target descriptions. */ - init_registers_m68k (); - - initialize_regsets_info (&m68k_regsets_info); -} diff -Nru gdb-9.1/gdb/gdbserver/linux-mips-low.c gdb-10.2/gdb/gdbserver/linux-mips-low.c --- gdb-9.1/gdb/gdbserver/linux-mips-low.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/linux-mips-low.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,978 +0,0 @@ -/* GNU/Linux/MIPS specific low level interface, for the remote server for GDB. - Copyright (C) 1995-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "server.h" -#include "linux-low.h" - -#include "nat/gdb_ptrace.h" -#include <endian.h> - -#include "nat/mips-linux-watch.h" -#include "gdb_proc_service.h" - -/* Defined in auto-generated file mips-linux.c. */ -void init_registers_mips_linux (void); -extern const struct target_desc *tdesc_mips_linux; - -/* Defined in auto-generated file mips-dsp-linux.c. */ -void init_registers_mips_dsp_linux (void); -extern const struct target_desc *tdesc_mips_dsp_linux; - -/* Defined in auto-generated file mips64-linux.c. */ -void init_registers_mips64_linux (void); -extern const struct target_desc *tdesc_mips64_linux; - -/* Defined in auto-generated file mips64-dsp-linux.c. */ -void init_registers_mips64_dsp_linux (void); -extern const struct target_desc *tdesc_mips64_dsp_linux; - -#ifdef __mips64 -#define tdesc_mips_linux tdesc_mips64_linux -#define tdesc_mips_dsp_linux tdesc_mips64_dsp_linux -#endif - -#ifndef PTRACE_GET_THREAD_AREA -#define PTRACE_GET_THREAD_AREA 25 -#endif - -#ifdef HAVE_SYS_REG_H -#include <sys/reg.h> -#endif - -#define mips_num_regs 73 -#define mips_dsp_num_regs 80 - -#include <asm/ptrace.h> - -#ifndef DSP_BASE -#define DSP_BASE 71 -#define DSP_CONTROL 77 -#endif - -union mips_register -{ - unsigned char buf[8]; - - /* Deliberately signed, for proper sign extension. */ - int reg32; - long long reg64; -}; - -/* Return the ptrace ``address'' of register REGNO. */ - -#define mips_base_regs \ - -1, 1, 2, 3, 4, 5, 6, 7, \ - 8, 9, 10, 11, 12, 13, 14, 15, \ - 16, 17, 18, 19, 20, 21, 22, 23, \ - 24, 25, 26, 27, 28, 29, 30, 31, \ - \ - -1, MMLO, MMHI, BADVADDR, CAUSE, PC, \ - \ - FPR_BASE, FPR_BASE + 1, FPR_BASE + 2, FPR_BASE + 3, \ - FPR_BASE + 4, FPR_BASE + 5, FPR_BASE + 6, FPR_BASE + 7, \ - FPR_BASE + 8, FPR_BASE + 9, FPR_BASE + 10, FPR_BASE + 11, \ - FPR_BASE + 12, FPR_BASE + 13, FPR_BASE + 14, FPR_BASE + 15, \ - FPR_BASE + 16, FPR_BASE + 17, FPR_BASE + 18, FPR_BASE + 19, \ - FPR_BASE + 20, FPR_BASE + 21, FPR_BASE + 22, FPR_BASE + 23, \ - FPR_BASE + 24, FPR_BASE + 25, FPR_BASE + 26, FPR_BASE + 27, \ - FPR_BASE + 28, FPR_BASE + 29, FPR_BASE + 30, FPR_BASE + 31, \ - FPC_CSR, FPC_EIR - -#define mips_dsp_regs \ - DSP_BASE, DSP_BASE + 1, DSP_BASE + 2, DSP_BASE + 3, \ - DSP_BASE + 4, DSP_BASE + 5, \ - DSP_CONTROL - -static int mips_regmap[mips_num_regs] = { - mips_base_regs, - 0 -}; - -static int mips_dsp_regmap[mips_dsp_num_regs] = { - mips_base_regs, - mips_dsp_regs, - 0 -}; - -/* DSP registers are not in any regset and can only be accessed - individually. */ - -static unsigned char mips_dsp_regset_bitmap[(mips_dsp_num_regs + 7) / 8] = { - 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x80 -}; - -static int have_dsp = -1; - -/* Try peeking at an arbitrarily chosen DSP register and pick the available - user register set accordingly. */ - -static const struct target_desc * -mips_read_description (void) -{ - if (have_dsp < 0) - { - int pid = lwpid_of (current_thread); - - errno = 0; - ptrace (PTRACE_PEEKUSER, pid, DSP_CONTROL, 0); - switch (errno) - { - case 0: - have_dsp = 1; - break; - case EIO: - have_dsp = 0; - break; - default: - perror_with_name ("ptrace"); - break; - } - } - - return have_dsp ? tdesc_mips_dsp_linux : tdesc_mips_linux; -} - -static void -mips_arch_setup (void) -{ - current_process ()->tdesc = mips_read_description (); -} - -static struct usrregs_info * -get_usrregs_info (void) -{ - const struct regs_info *regs_info = the_low_target.regs_info (); - - return regs_info->usrregs; -} - -/* Per-process arch-specific data we want to keep. */ - -struct arch_process_info -{ - /* -1 if the kernel and/or CPU do not support watch registers. - 1 if watch_readback is valid and we can read style, num_valid - and the masks. - 0 if we need to read the watch_readback. */ - - int watch_readback_valid; - - /* Cached watch register read values. */ - - struct pt_watch_regs watch_readback; - - /* Current watchpoint requests for this process. */ - - struct mips_watchpoint *current_watches; - - /* The current set of watch register values for writing the - registers. */ - - struct pt_watch_regs watch_mirror; -}; - -/* Per-thread arch-specific data we want to keep. */ - -struct arch_lwp_info -{ - /* Non-zero if our copy differs from what's recorded in the thread. */ - int watch_registers_changed; -}; - -/* From mips-linux-nat.c. */ - -/* Pseudo registers can not be read. ptrace does not provide a way to - read (or set) PS_REGNUM, and there's no point in reading or setting - ZERO_REGNUM, it's always 0. We also can not set BADVADDR, CAUSE, - or FCRIR via ptrace(). */ - -static int -mips_cannot_fetch_register (int regno) -{ - const struct target_desc *tdesc; - - if (get_usrregs_info ()->regmap[regno] == -1) - return 1; - - tdesc = current_process ()->tdesc; - - /* On n32 we can't access 64-bit registers via PTRACE_PEEKUSR. */ - if (register_size (tdesc, regno) > sizeof (PTRACE_XFER_TYPE)) - return 1; - - if (find_regno (tdesc, "r0") == regno) - return 1; - - return 0; -} - -static int -mips_cannot_store_register (int regno) -{ - const struct target_desc *tdesc; - - if (get_usrregs_info ()->regmap[regno] == -1) - return 1; - - tdesc = current_process ()->tdesc; - - /* On n32 we can't access 64-bit registers via PTRACE_POKEUSR. */ - if (register_size (tdesc, regno) > sizeof (PTRACE_XFER_TYPE)) - return 1; - - if (find_regno (tdesc, "r0") == regno) - return 1; - - if (find_regno (tdesc, "cause") == regno) - return 1; - - if (find_regno (tdesc, "badvaddr") == regno) - return 1; - - if (find_regno (tdesc, "fir") == regno) - return 1; - - return 0; -} - -static int -mips_fetch_register (struct regcache *regcache, int regno) -{ - const struct target_desc *tdesc = current_process ()->tdesc; - - if (find_regno (tdesc, "r0") == regno) - { - supply_register_zeroed (regcache, regno); - return 1; - } - - return 0; -} - -static CORE_ADDR -mips_get_pc (struct regcache *regcache) -{ - union mips_register pc; - collect_register_by_name (regcache, "pc", pc.buf); - return register_size (regcache->tdesc, 0) == 4 ? pc.reg32 : pc.reg64; -} - -static void -mips_set_pc (struct regcache *regcache, CORE_ADDR pc) -{ - union mips_register newpc; - if (register_size (regcache->tdesc, 0) == 4) - newpc.reg32 = pc; - else - newpc.reg64 = pc; - - supply_register_by_name (regcache, "pc", newpc.buf); -} - -/* Correct in either endianness. */ -static const unsigned int mips_breakpoint = 0x0005000d; -#define mips_breakpoint_len 4 - -/* Implementation of linux_target_ops method "sw_breakpoint_from_kind". */ - -static const gdb_byte * -mips_sw_breakpoint_from_kind (int kind, int *size) -{ - *size = mips_breakpoint_len; - return (const gdb_byte *) &mips_breakpoint; -} - -static int -mips_breakpoint_at (CORE_ADDR where) -{ - unsigned int insn; - - (*the_target->read_memory) (where, (unsigned char *) &insn, 4); - if (insn == mips_breakpoint) - return 1; - - /* If necessary, recognize more trap instructions here. GDB only uses the - one. */ - return 0; -} - -/* Mark the watch registers of lwp, represented by ENTRY, as changed. */ - -static void -update_watch_registers_callback (thread_info *thread) -{ - struct lwp_info *lwp = get_thread_lwp (thread); - - /* The actual update is done later just before resuming the lwp, - we just mark that the registers need updating. */ - lwp->arch_private->watch_registers_changed = 1; - - /* If the lwp isn't stopped, force it to momentarily pause, so - we can update its watch registers. */ - if (!lwp->stopped) - linux_stop_lwp (lwp); -} - -/* This is the implementation of linux_target_ops method - new_process. */ - -static struct arch_process_info * -mips_linux_new_process (void) -{ - struct arch_process_info *info = XCNEW (struct arch_process_info); - - return info; -} - -/* This is the implementation of linux_target_ops method - delete_process. */ - -static void -mips_linux_delete_process (struct arch_process_info *info) -{ - xfree (info); -} - -/* This is the implementation of linux_target_ops method new_thread. - Mark the watch registers as changed, so the threads' copies will - be updated. */ - -static void -mips_linux_new_thread (struct lwp_info *lwp) -{ - struct arch_lwp_info *info = XCNEW (struct arch_lwp_info); - - info->watch_registers_changed = 1; - - lwp->arch_private = info; -} - -/* Function to call when a thread is being deleted. */ - -static void -mips_linux_delete_thread (struct arch_lwp_info *arch_lwp) -{ - xfree (arch_lwp); -} - -/* Create a new mips_watchpoint and add it to the list. */ - -static void -mips_add_watchpoint (struct arch_process_info *priv, CORE_ADDR addr, int len, - enum target_hw_bp_type watch_type) -{ - struct mips_watchpoint *new_watch; - struct mips_watchpoint **pw; - - new_watch = XNEW (struct mips_watchpoint); - new_watch->addr = addr; - new_watch->len = len; - new_watch->type = watch_type; - new_watch->next = NULL; - - pw = &priv->current_watches; - while (*pw != NULL) - pw = &(*pw)->next; - *pw = new_watch; -} - -/* Hook to call when a new fork is attached. */ - -static void -mips_linux_new_fork (struct process_info *parent, - struct process_info *child) -{ - struct arch_process_info *parent_private; - struct arch_process_info *child_private; - struct mips_watchpoint *wp; - - /* These are allocated by linux_add_process. */ - gdb_assert (parent->priv != NULL - && parent->priv->arch_private != NULL); - gdb_assert (child->priv != NULL - && child->priv->arch_private != NULL); - - /* Linux kernel before 2.6.33 commit - 72f674d203cd230426437cdcf7dd6f681dad8b0d - will inherit hardware debug registers from parent - on fork/vfork/clone. Newer Linux kernels create such tasks with - zeroed debug registers. - - GDB core assumes the child inherits the watchpoints/hw - breakpoints of the parent, and will remove them all from the - forked off process. Copy the debug registers mirrors into the - new process so that all breakpoints and watchpoints can be - removed together. The debug registers mirror will become zeroed - in the end before detaching the forked off process, thus making - this compatible with older Linux kernels too. */ - - parent_private = parent->priv->arch_private; - child_private = child->priv->arch_private; - - child_private->watch_readback_valid = parent_private->watch_readback_valid; - child_private->watch_readback = parent_private->watch_readback; - - for (wp = parent_private->current_watches; wp != NULL; wp = wp->next) - mips_add_watchpoint (child_private, wp->addr, wp->len, wp->type); - - child_private->watch_mirror = parent_private->watch_mirror; -} -/* This is the implementation of linux_target_ops method - prepare_to_resume. If the watch regs have changed, update the - thread's copies. */ - -static void -mips_linux_prepare_to_resume (struct lwp_info *lwp) -{ - ptid_t ptid = ptid_of (get_lwp_thread (lwp)); - struct process_info *proc = find_process_pid (ptid.pid ()); - struct arch_process_info *priv = proc->priv->arch_private; - - if (lwp->arch_private->watch_registers_changed) - { - /* Only update the watch registers if we have set or unset a - watchpoint already. */ - if (mips_linux_watch_get_num_valid (&priv->watch_mirror) > 0) - { - /* Write the mirrored watch register values. */ - int tid = ptid.lwp (); - - if (-1 == ptrace (PTRACE_SET_WATCH_REGS, tid, - &priv->watch_mirror, NULL)) - perror_with_name ("Couldn't write watch register"); - } - - lwp->arch_private->watch_registers_changed = 0; - } -} - -static int -mips_supports_z_point_type (char z_type) -{ - switch (z_type) - { - case Z_PACKET_WRITE_WP: - case Z_PACKET_READ_WP: - case Z_PACKET_ACCESS_WP: - return 1; - default: - return 0; - } -} - -/* This is the implementation of linux_target_ops method - insert_point. */ - -static int -mips_insert_point (enum raw_bkpt_type type, CORE_ADDR addr, - int len, struct raw_breakpoint *bp) -{ - struct process_info *proc = current_process (); - struct arch_process_info *priv = proc->priv->arch_private; - struct pt_watch_regs regs; - long lwpid; - enum target_hw_bp_type watch_type; - uint32_t irw; - - lwpid = lwpid_of (current_thread); - if (!mips_linux_read_watch_registers (lwpid, - &priv->watch_readback, - &priv->watch_readback_valid, - 0)) - return -1; - - if (len <= 0) - return -1; - - regs = priv->watch_readback; - /* Add the current watches. */ - mips_linux_watch_populate_regs (priv->current_watches, ®s); - - /* Now try to add the new watch. */ - watch_type = raw_bkpt_type_to_target_hw_bp_type (type); - irw = mips_linux_watch_type_to_irw (watch_type); - if (!mips_linux_watch_try_one_watch (®s, addr, len, irw)) - return -1; - - /* It fit. Stick it on the end of the list. */ - mips_add_watchpoint (priv, addr, len, watch_type); - - priv->watch_mirror = regs; - - /* Only update the threads of this process. */ - for_each_thread (proc->pid, update_watch_registers_callback); - - return 0; -} - -/* This is the implementation of linux_target_ops method - remove_point. */ - -static int -mips_remove_point (enum raw_bkpt_type type, CORE_ADDR addr, - int len, struct raw_breakpoint *bp) -{ - struct process_info *proc = current_process (); - struct arch_process_info *priv = proc->priv->arch_private; - - int deleted_one; - enum target_hw_bp_type watch_type; - - struct mips_watchpoint **pw; - struct mips_watchpoint *w; - - /* Search for a known watch that matches. Then unlink and free it. */ - watch_type = raw_bkpt_type_to_target_hw_bp_type (type); - deleted_one = 0; - pw = &priv->current_watches; - while ((w = *pw)) - { - if (w->addr == addr && w->len == len && w->type == watch_type) - { - *pw = w->next; - free (w); - deleted_one = 1; - break; - } - pw = &(w->next); - } - - if (!deleted_one) - return -1; /* We don't know about it, fail doing nothing. */ - - /* At this point watch_readback is known to be valid because we - could not have added the watch without reading it. */ - gdb_assert (priv->watch_readback_valid == 1); - - priv->watch_mirror = priv->watch_readback; - mips_linux_watch_populate_regs (priv->current_watches, - &priv->watch_mirror); - - /* Only update the threads of this process. */ - for_each_thread (proc->pid, update_watch_registers_callback); - - return 0; -} - -/* This is the implementation of linux_target_ops method - stopped_by_watchpoint. The watchhi R and W bits indicate - the watch register triggered. */ - -static int -mips_stopped_by_watchpoint (void) -{ - struct process_info *proc = current_process (); - struct arch_process_info *priv = proc->priv->arch_private; - int n; - int num_valid; - long lwpid = lwpid_of (current_thread); - - if (!mips_linux_read_watch_registers (lwpid, - &priv->watch_readback, - &priv->watch_readback_valid, - 1)) - return 0; - - num_valid = mips_linux_watch_get_num_valid (&priv->watch_readback); - - for (n = 0; n < MAX_DEBUG_REGISTER && n < num_valid; n++) - if (mips_linux_watch_get_watchhi (&priv->watch_readback, n) - & (R_MASK | W_MASK)) - return 1; - - return 0; -} - -/* This is the implementation of linux_target_ops method - stopped_data_address. */ - -static CORE_ADDR -mips_stopped_data_address (void) -{ - struct process_info *proc = current_process (); - struct arch_process_info *priv = proc->priv->arch_private; - int n; - int num_valid; - long lwpid = lwpid_of (current_thread); - - /* On MIPS we don't know the low order 3 bits of the data address. - GDB does not support remote targets that can't report the - watchpoint address. So, make our best guess; return the starting - address of a watchpoint request which overlaps the one that - triggered. */ - - if (!mips_linux_read_watch_registers (lwpid, - &priv->watch_readback, - &priv->watch_readback_valid, - 0)) - return 0; - - num_valid = mips_linux_watch_get_num_valid (&priv->watch_readback); - - for (n = 0; n < MAX_DEBUG_REGISTER && n < num_valid; n++) - if (mips_linux_watch_get_watchhi (&priv->watch_readback, n) - & (R_MASK | W_MASK)) - { - CORE_ADDR t_low, t_hi; - int t_irw; - struct mips_watchpoint *watch; - - t_low = mips_linux_watch_get_watchlo (&priv->watch_readback, n); - t_irw = t_low & IRW_MASK; - t_hi = (mips_linux_watch_get_watchhi (&priv->watch_readback, n) - | IRW_MASK); - t_low &= ~(CORE_ADDR)t_hi; - - for (watch = priv->current_watches; - watch != NULL; - watch = watch->next) - { - CORE_ADDR addr = watch->addr; - CORE_ADDR last_byte = addr + watch->len - 1; - - if ((t_irw & mips_linux_watch_type_to_irw (watch->type)) == 0) - { - /* Different type. */ - continue; - } - /* Check for overlap of even a single byte. */ - if (last_byte >= t_low && addr <= t_low + t_hi) - return addr; - } - } - - /* Shouldn't happen. */ - return 0; -} - -/* Fetch the thread-local storage pointer for libthread_db. */ - -ps_err_e -ps_get_thread_area (struct ps_prochandle *ph, - lwpid_t lwpid, int idx, void **base) -{ - if (ptrace (PTRACE_GET_THREAD_AREA, lwpid, NULL, base) != 0) - return PS_ERR; - - /* IDX is the bias from the thread pointer to the beginning of the - thread descriptor. It has to be subtracted due to implementation - quirks in libthread_db. */ - *base = (void *) ((char *)*base - idx); - - return PS_OK; -} - -static void -mips_collect_register (struct regcache *regcache, - int use_64bit, int regno, union mips_register *reg) -{ - union mips_register tmp_reg; - - if (use_64bit) - { - collect_register (regcache, regno, &tmp_reg.reg64); - *reg = tmp_reg; - } - else - { - collect_register (regcache, regno, &tmp_reg.reg32); - reg->reg64 = tmp_reg.reg32; - } -} - -static void -mips_supply_register (struct regcache *regcache, - int use_64bit, int regno, const union mips_register *reg) -{ - int offset = 0; - - /* For big-endian 32-bit targets, ignore the high four bytes of each - eight-byte slot. */ - if (__BYTE_ORDER == __BIG_ENDIAN && !use_64bit) - offset = 4; - - supply_register (regcache, regno, reg->buf + offset); -} - -#ifdef HAVE_PTRACE_GETREGS - -static void -mips_collect_register_32bit (struct regcache *regcache, - int use_64bit, int regno, unsigned char *buf) -{ - union mips_register tmp_reg; - int reg32; - - mips_collect_register (regcache, use_64bit, regno, &tmp_reg); - reg32 = tmp_reg.reg64; - memcpy (buf, ®32, 4); -} - -static void -mips_supply_register_32bit (struct regcache *regcache, - int use_64bit, int regno, const unsigned char *buf) -{ - union mips_register tmp_reg; - int reg32; - - memcpy (®32, buf, 4); - tmp_reg.reg64 = reg32; - mips_supply_register (regcache, use_64bit, regno, &tmp_reg); -} - -static void -mips_fill_gregset (struct regcache *regcache, void *buf) -{ - union mips_register *regset = (union mips_register *) buf; - int i, use_64bit; - const struct target_desc *tdesc = regcache->tdesc; - - use_64bit = (register_size (tdesc, 0) == 8); - - for (i = 1; i < 32; i++) - mips_collect_register (regcache, use_64bit, i, regset + i); - - mips_collect_register (regcache, use_64bit, - find_regno (tdesc, "lo"), regset + 32); - mips_collect_register (regcache, use_64bit, - find_regno (tdesc, "hi"), regset + 33); - mips_collect_register (regcache, use_64bit, - find_regno (tdesc, "pc"), regset + 34); - mips_collect_register (regcache, use_64bit, - find_regno (tdesc, "badvaddr"), regset + 35); - mips_collect_register (regcache, use_64bit, - find_regno (tdesc, "status"), regset + 36); - mips_collect_register (regcache, use_64bit, - find_regno (tdesc, "cause"), regset + 37); - - mips_collect_register (regcache, use_64bit, - find_regno (tdesc, "restart"), regset + 0); -} - -static void -mips_store_gregset (struct regcache *regcache, const void *buf) -{ - const union mips_register *regset = (const union mips_register *) buf; - int i, use_64bit; - - use_64bit = (register_size (regcache->tdesc, 0) == 8); - - supply_register_by_name_zeroed (regcache, "r0"); - - for (i = 1; i < 32; i++) - mips_supply_register (regcache, use_64bit, i, regset + i); - - mips_supply_register (regcache, use_64bit, - find_regno (regcache->tdesc, "lo"), regset + 32); - mips_supply_register (regcache, use_64bit, - find_regno (regcache->tdesc, "hi"), regset + 33); - mips_supply_register (regcache, use_64bit, - find_regno (regcache->tdesc, "pc"), regset + 34); - mips_supply_register (regcache, use_64bit, - find_regno (regcache->tdesc, "badvaddr"), regset + 35); - mips_supply_register (regcache, use_64bit, - find_regno (regcache->tdesc, "status"), regset + 36); - mips_supply_register (regcache, use_64bit, - find_regno (regcache->tdesc, "cause"), regset + 37); - - mips_supply_register (regcache, use_64bit, - find_regno (regcache->tdesc, "restart"), regset + 0); -} - -static void -mips_fill_fpregset (struct regcache *regcache, void *buf) -{ - union mips_register *regset = (union mips_register *) buf; - int i, use_64bit, first_fp, big_endian; - - use_64bit = (register_size (regcache->tdesc, 0) == 8); - first_fp = find_regno (regcache->tdesc, "f0"); - big_endian = (__BYTE_ORDER == __BIG_ENDIAN); - - /* See GDB for a discussion of this peculiar layout. */ - for (i = 0; i < 32; i++) - if (use_64bit) - collect_register (regcache, first_fp + i, regset[i].buf); - else - collect_register (regcache, first_fp + i, - regset[i & ~1].buf + 4 * (big_endian != (i & 1))); - - mips_collect_register_32bit (regcache, use_64bit, - find_regno (regcache->tdesc, "fcsr"), regset[32].buf); - mips_collect_register_32bit (regcache, use_64bit, - find_regno (regcache->tdesc, "fir"), - regset[32].buf + 4); -} - -static void -mips_store_fpregset (struct regcache *regcache, const void *buf) -{ - const union mips_register *regset = (const union mips_register *) buf; - int i, use_64bit, first_fp, big_endian; - - use_64bit = (register_size (regcache->tdesc, 0) == 8); - first_fp = find_regno (regcache->tdesc, "f0"); - big_endian = (__BYTE_ORDER == __BIG_ENDIAN); - - /* See GDB for a discussion of this peculiar layout. */ - for (i = 0; i < 32; i++) - if (use_64bit) - supply_register (regcache, first_fp + i, regset[i].buf); - else - supply_register (regcache, first_fp + i, - regset[i & ~1].buf + 4 * (big_endian != (i & 1))); - - mips_supply_register_32bit (regcache, use_64bit, - find_regno (regcache->tdesc, "fcsr"), - regset[32].buf); - mips_supply_register_32bit (regcache, use_64bit, - find_regno (regcache->tdesc, "fir"), - regset[32].buf + 4); -} -#endif /* HAVE_PTRACE_GETREGS */ - -/* Take care of 32-bit registers with 64-bit ptrace, POKEUSER side. */ - -static void -mips_collect_ptrace_register (struct regcache *regcache, - int regno, char *buf) -{ - int use_64bit = sizeof (PTRACE_XFER_TYPE) == 8; - - if (use_64bit && register_size (regcache->tdesc, regno) == 4) - { - union mips_register reg; - - mips_collect_register (regcache, 0, regno, ®); - memcpy (buf, ®, sizeof (reg)); - } - else - collect_register (regcache, regno, buf); -} - -/* Take care of 32-bit registers with 64-bit ptrace, PEEKUSER side. */ - -static void -mips_supply_ptrace_register (struct regcache *regcache, - int regno, const char *buf) -{ - int use_64bit = sizeof (PTRACE_XFER_TYPE) == 8; - - if (use_64bit && register_size (regcache->tdesc, regno) == 4) - { - union mips_register reg; - - memcpy (®, buf, sizeof (reg)); - mips_supply_register (regcache, 0, regno, ®); - } - else - supply_register (regcache, regno, buf); -} - -static struct regset_info mips_regsets[] = { -#ifdef HAVE_PTRACE_GETREGS - { PTRACE_GETREGS, PTRACE_SETREGS, 0, 38 * 8, GENERAL_REGS, - mips_fill_gregset, mips_store_gregset }, - { PTRACE_GETFPREGS, PTRACE_SETFPREGS, 0, 33 * 8, FP_REGS, - mips_fill_fpregset, mips_store_fpregset }, -#endif /* HAVE_PTRACE_GETREGS */ - NULL_REGSET -}; - -static struct regsets_info mips_regsets_info = - { - mips_regsets, /* regsets */ - 0, /* num_regsets */ - NULL, /* disabled_regsets */ - }; - -static struct usrregs_info mips_dsp_usrregs_info = - { - mips_dsp_num_regs, - mips_dsp_regmap, - }; - -static struct usrregs_info mips_usrregs_info = - { - mips_num_regs, - mips_regmap, - }; - -static struct regs_info dsp_regs_info = - { - mips_dsp_regset_bitmap, - &mips_dsp_usrregs_info, - &mips_regsets_info - }; - -static struct regs_info regs_info = - { - NULL, /* regset_bitmap */ - &mips_usrregs_info, - &mips_regsets_info - }; - -static const struct regs_info * -mips_regs_info (void) -{ - if (have_dsp) - return &dsp_regs_info; - else - return ®s_info; -} - -struct linux_target_ops the_low_target = { - mips_arch_setup, - mips_regs_info, - mips_cannot_fetch_register, - mips_cannot_store_register, - mips_fetch_register, - mips_get_pc, - mips_set_pc, - NULL, /* breakpoint_kind_from_pc */ - mips_sw_breakpoint_from_kind, - NULL, /* get_next_pcs */ - 0, - mips_breakpoint_at, - mips_supports_z_point_type, - mips_insert_point, - mips_remove_point, - mips_stopped_by_watchpoint, - mips_stopped_data_address, - mips_collect_ptrace_register, - mips_supply_ptrace_register, - NULL, /* siginfo_fixup */ - mips_linux_new_process, - mips_linux_delete_process, - mips_linux_new_thread, - mips_linux_delete_thread, - mips_linux_new_fork, - mips_linux_prepare_to_resume -}; - -void -initialize_low_arch (void) -{ - /* Initialize the Linux target descriptions. */ - init_registers_mips_linux (); - init_registers_mips_dsp_linux (); - init_registers_mips64_linux (); - init_registers_mips64_dsp_linux (); - - initialize_regsets_info (&mips_regsets_info); -} diff -Nru gdb-9.1/gdb/gdbserver/linux-nios2-low.c gdb-10.2/gdb/gdbserver/linux-nios2-low.c --- gdb-9.1/gdb/gdbserver/linux-nios2-low.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/linux-nios2-low.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,259 +0,0 @@ -/* GNU/Linux/Nios II specific low level interface, for the remote server for - GDB. - Copyright (C) 2008-2020 Free Software Foundation, Inc. - - Contributed by Mentor Graphics, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "server.h" -#include "linux-low.h" -#include "elf/common.h" -#include "nat/gdb_ptrace.h" -#include <endian.h> -#include "gdb_proc_service.h" -#include <asm/ptrace.h> - -#ifndef PTRACE_GET_THREAD_AREA -#define PTRACE_GET_THREAD_AREA 25 -#endif - -/* The following definition must agree with the number of registers - defined in "struct user_regs" in GLIBC - (sysdeps/unix/sysv/linux/nios2/sys/user.h), and also with - NIOS2_NUM_REGS in GDB proper. */ - -#define nios2_num_regs 49 - -/* Defined in auto-generated file nios2-linux.c. */ - -void init_registers_nios2_linux (void); -extern const struct target_desc *tdesc_nios2_linux; - -/* This union is used to convert between int and byte buffer - representations of register contents. */ - -union nios2_register -{ - unsigned char buf[4]; - int reg32; -}; - -/* Return the ptrace ``address'' of register REGNO. */ - -static int nios2_regmap[] = { - -1, 1, 2, 3, 4, 5, 6, 7, - 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, - 40, 41, 42, 43, 44, 45, 46, 47, - 48, - 0 -}; - -/* Implement the arch_setup linux_target_ops method. */ - -static void -nios2_arch_setup (void) -{ - current_process ()->tdesc = tdesc_nios2_linux; -} - -/* Implement the cannot_fetch_register linux_target_ops method. */ - -static int -nios2_cannot_fetch_register (int regno) -{ - if (nios2_regmap[regno] == -1) - return 1; - - return 0; -} - -/* Implement the cannot_store_register linux_target_ops method. */ - -static int -nios2_cannot_store_register (int regno) -{ - if (nios2_regmap[regno] == -1) - return 1; - - return 0; -} - -/* Breakpoint support. Also see comments on nios2_breakpoint_from_pc - in nios2-tdep.c. */ - -#if defined(__nios2_arch__) && __nios2_arch__ == 2 -#define NIOS2_BREAKPOINT 0xb7fd0020 -#define CDX_BREAKPOINT 0xd7c9 -#else -#define NIOS2_BREAKPOINT 0x003b6ffa -#endif - -/* We only register the 4-byte breakpoint, even on R2 targets which also - support 2-byte breakpoints. Since there is no supports_z_point_type - function provided, gdbserver never inserts software breakpoints itself - and instead relies on GDB to insert the breakpoint of the correct length - via a memory write. */ -static const unsigned int nios2_breakpoint = NIOS2_BREAKPOINT; -#define nios2_breakpoint_len 4 - -/* Implementation of linux_target_ops method "sw_breakpoint_from_kind". */ - -static const gdb_byte * -nios2_sw_breakpoint_from_kind (int kind, int *size) -{ - *size = nios2_breakpoint_len; - return (const gdb_byte *) &nios2_breakpoint; -} - -/* Implement the breakpoint_at linux_target_ops method. */ - -static int -nios2_breakpoint_at (CORE_ADDR where) -{ - unsigned int insn; - - /* For R2, first check for the 2-byte CDX trap.n breakpoint encoding. */ -#if defined(__nios2_arch__) && __nios2_arch__ == 2 - (*the_target->read_memory) (where, (unsigned char *) &insn, 2); - if (insn == CDX_BREAKPOINT) - return 1; -#endif - - (*the_target->read_memory) (where, (unsigned char *) &insn, 4); - if (insn == nios2_breakpoint) - return 1; - return 0; -} - -/* Fetch the thread-local storage pointer for libthread_db. */ - -ps_err_e -ps_get_thread_area (struct ps_prochandle *ph, - lwpid_t lwpid, int idx, void **base) -{ - if (ptrace (PTRACE_GET_THREAD_AREA, lwpid, NULL, base) != 0) - return PS_ERR; - - /* IDX is the bias from the thread pointer to the beginning of the - thread descriptor. It has to be subtracted due to implementation - quirks in libthread_db. */ - *base = (void *) ((char *) *base - idx); - - return PS_OK; -} - -/* Helper functions to collect/supply a single register REGNO. */ - -static void -nios2_collect_register (struct regcache *regcache, int regno, - union nios2_register *reg) -{ - union nios2_register tmp_reg; - - collect_register (regcache, regno, &tmp_reg.reg32); - reg->reg32 = tmp_reg.reg32; -} - -static void -nios2_supply_register (struct regcache *regcache, int regno, - const union nios2_register *reg) -{ - supply_register (regcache, regno, reg->buf); -} - -/* We have only a single register set on Nios II. */ - -static void -nios2_fill_gregset (struct regcache *regcache, void *buf) -{ - union nios2_register *regset = (union nios2_register *) buf; - int i; - - for (i = 1; i < nios2_num_regs; i++) - nios2_collect_register (regcache, i, regset + i); -} - -static void -nios2_store_gregset (struct regcache *regcache, const void *buf) -{ - const union nios2_register *regset = (union nios2_register *) buf; - int i; - - for (i = 0; i < nios2_num_regs; i++) - nios2_supply_register (regcache, i, regset + i); -} - -static struct regset_info nios2_regsets[] = -{ - { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_PRSTATUS, - nios2_num_regs * 4, GENERAL_REGS, - nios2_fill_gregset, nios2_store_gregset }, - NULL_REGSET -}; - -static struct regsets_info nios2_regsets_info = - { - nios2_regsets, /* regsets */ - 0, /* num_regsets */ - NULL, /* disabled_regsets */ - }; - -static struct usrregs_info nios2_usrregs_info = - { - nios2_num_regs, - nios2_regmap, - }; - -static struct regs_info regs_info = - { - NULL, /* regset_bitmap */ - &nios2_usrregs_info, - &nios2_regsets_info - }; - -static const struct regs_info * -nios2_regs_info (void) -{ - return ®s_info; -} - -struct linux_target_ops the_low_target = -{ - nios2_arch_setup, - nios2_regs_info, - nios2_cannot_fetch_register, - nios2_cannot_store_register, - NULL, - linux_get_pc_32bit, - linux_set_pc_32bit, - NULL, /* breakpoint_kind_from_pc */ - nios2_sw_breakpoint_from_kind, - NULL, /* get_next_pcs */ - 0, - nios2_breakpoint_at, -}; - -void -initialize_low_arch (void) -{ - init_registers_nios2_linux (); - - initialize_regsets_info (&nios2_regsets_info); -} diff -Nru gdb-9.1/gdb/gdbserver/linux-ppc-ipa.c gdb-10.2/gdb/gdbserver/linux-ppc-ipa.c --- gdb-9.1/gdb/gdbserver/linux-ppc-ipa.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/linux-ppc-ipa.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,259 +0,0 @@ -/* GNU/Linux/PowerPC specific low level interface, for the in-process - agent library for GDB. - - Copyright (C) 2016-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "server.h" -#include <sys/mman.h> -#include "tracepoint.h" -#include "arch/ppc-linux-tdesc.h" -#include "linux-ppc-tdesc-init.h" -#include <elf.h> -#ifdef HAVE_GETAUXVAL -#include <sys/auxv.h> -#endif - -/* These macros define the position of registers in the buffer collected - by the fast tracepoint jump pad. */ -#define FT_CR_R0 0 -#define FT_CR_CR 32 -#define FT_CR_XER 33 -#define FT_CR_LR 34 -#define FT_CR_CTR 35 -#define FT_CR_PC 36 -#define FT_CR_GPR(n) (FT_CR_R0 + (n)) - -static const int ppc_ft_collect_regmap[] = { - /* GPRs */ - FT_CR_GPR (0), FT_CR_GPR (1), FT_CR_GPR (2), - FT_CR_GPR (3), FT_CR_GPR (4), FT_CR_GPR (5), - FT_CR_GPR (6), FT_CR_GPR (7), FT_CR_GPR (8), - FT_CR_GPR (9), FT_CR_GPR (10), FT_CR_GPR (11), - FT_CR_GPR (12), FT_CR_GPR (13), FT_CR_GPR (14), - FT_CR_GPR (15), FT_CR_GPR (16), FT_CR_GPR (17), - FT_CR_GPR (18), FT_CR_GPR (19), FT_CR_GPR (20), - FT_CR_GPR (21), FT_CR_GPR (22), FT_CR_GPR (23), - FT_CR_GPR (24), FT_CR_GPR (25), FT_CR_GPR (26), - FT_CR_GPR (27), FT_CR_GPR (28), FT_CR_GPR (29), - FT_CR_GPR (30), FT_CR_GPR (31), - /* FPRs - not collected. */ - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - FT_CR_PC, /* PC */ - -1, /* MSR */ - FT_CR_CR, /* CR */ - FT_CR_LR, /* LR */ - FT_CR_CTR, /* CTR */ - FT_CR_XER, /* XER */ - -1, /* FPSCR */ -}; - -#define PPC_NUM_FT_COLLECT_GREGS \ - (sizeof (ppc_ft_collect_regmap) / sizeof(ppc_ft_collect_regmap[0])) - -/* Supply registers collected by the fast tracepoint jump pad. - BUF is the second argument we pass to gdb_collect in jump pad. */ - -void -supply_fast_tracepoint_registers (struct regcache *regcache, - const unsigned char *buf) -{ - int i; - - for (i = 0; i < PPC_NUM_FT_COLLECT_GREGS; i++) - { - if (ppc_ft_collect_regmap[i] == -1) - continue; - supply_register (regcache, i, - ((char *) buf) - + ppc_ft_collect_regmap[i] * sizeof (long)); - } -} - -/* Return the value of register REGNUM. RAW_REGS is collected buffer - by jump pad. This function is called by emit_reg. */ - -ULONGEST -get_raw_reg (const unsigned char *raw_regs, int regnum) -{ - if (regnum >= PPC_NUM_FT_COLLECT_GREGS) - return 0; - if (ppc_ft_collect_regmap[regnum] == -1) - return 0; - - return *(unsigned long *) (raw_regs - + ppc_ft_collect_regmap[regnum] * sizeof (long)); -} - -/* Allocate buffer for the jump pads. The branch instruction has a reach - of +/- 32MiB, and the executable is loaded at 0x10000000 (256MiB). - - 64-bit: To maximize the area of executable that can use tracepoints, - try allocating at 0x10000000 - size initially, decreasing until we hit - a free area. - - 32-bit: ld.so loads dynamic libraries right below the executable, so - we cannot depend on that area (dynamic libraries can be quite large). - Instead, aim right after the executable - at sbrk(0). This will - cause future brk to fail, and malloc will fallback to mmap. */ - -void * -alloc_jump_pad_buffer (size_t size) -{ -#ifdef __powerpc64__ - uintptr_t addr; - uintptr_t exec_base = getauxval (AT_PHDR); - int pagesize; - void *res; - - if (exec_base == 0) - exec_base = 0x10000000; - - pagesize = sysconf (_SC_PAGE_SIZE); - if (pagesize == -1) - perror_with_name ("sysconf"); - - addr = exec_base - size; - - /* size should already be page-aligned, but this can't hurt. */ - addr &= ~(pagesize - 1); - - /* Search for a free area. If we hit 0, we're out of luck. */ - for (; addr; addr -= pagesize) - { - /* No MAP_FIXED - we don't want to zap someone's mapping. */ - res = mmap ((void *) addr, size, - PROT_READ | PROT_WRITE | PROT_EXEC, - MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); - - /* If we got what we wanted, return. */ - if ((uintptr_t) res == addr) - return res; - - /* If we got a mapping, but at a wrong address, undo it. */ - if (res != MAP_FAILED) - munmap (res, size); - } - - return NULL; -#else - void *target = sbrk (0); - void *res = mmap (target, size, PROT_READ | PROT_WRITE | PROT_EXEC, - MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); - - if (res == target) - return res; - - if (res != MAP_FAILED) - munmap (res, size); - - return NULL; -#endif -} - -/* Return target_desc to use for IPA, given the tdesc index passed by - gdbserver. */ - -const struct target_desc * -get_ipa_tdesc (int idx) -{ - switch (idx) - { -#ifdef __powerpc64__ - case PPC_TDESC_BASE: - return tdesc_powerpc_64l; - case PPC_TDESC_ALTIVEC: - return tdesc_powerpc_altivec64l; - case PPC_TDESC_VSX: - return tdesc_powerpc_vsx64l; - case PPC_TDESC_ISA205: - return tdesc_powerpc_isa205_64l; - case PPC_TDESC_ISA205_ALTIVEC: - return tdesc_powerpc_isa205_altivec64l; - case PPC_TDESC_ISA205_VSX: - return tdesc_powerpc_isa205_vsx64l; - case PPC_TDESC_ISA205_PPR_DSCR_VSX: - return tdesc_powerpc_isa205_ppr_dscr_vsx64l; - case PPC_TDESC_ISA207_VSX: - return tdesc_powerpc_isa207_vsx64l; - case PPC_TDESC_ISA207_HTM_VSX: - return tdesc_powerpc_isa207_htm_vsx64l; -#else - case PPC_TDESC_BASE: - return tdesc_powerpc_32l; - case PPC_TDESC_ALTIVEC: - return tdesc_powerpc_altivec32l; - case PPC_TDESC_VSX: - return tdesc_powerpc_vsx32l; - case PPC_TDESC_ISA205: - return tdesc_powerpc_isa205_32l; - case PPC_TDESC_ISA205_ALTIVEC: - return tdesc_powerpc_isa205_altivec32l; - case PPC_TDESC_ISA205_VSX: - return tdesc_powerpc_isa205_vsx32l; - case PPC_TDESC_ISA205_PPR_DSCR_VSX: - return tdesc_powerpc_isa205_ppr_dscr_vsx32l; - case PPC_TDESC_ISA207_VSX: - return tdesc_powerpc_isa207_vsx32l; - case PPC_TDESC_ISA207_HTM_VSX: - return tdesc_powerpc_isa207_htm_vsx32l; - case PPC_TDESC_E500: - return tdesc_powerpc_e500l; -#endif - default: - internal_error (__FILE__, __LINE__, - "unknown ipa tdesc index: %d", idx); -#ifdef __powerpc64__ - return tdesc_powerpc_64l; -#else - return tdesc_powerpc_32l; -#endif - } -} - - -/* Initialize ipa_tdesc and others. */ - -void -initialize_low_tracepoint (void) -{ -#ifdef __powerpc64__ - init_registers_powerpc_64l (); - init_registers_powerpc_altivec64l (); - init_registers_powerpc_vsx64l (); - init_registers_powerpc_isa205_64l (); - init_registers_powerpc_isa205_altivec64l (); - init_registers_powerpc_isa205_vsx64l (); - init_registers_powerpc_isa205_ppr_dscr_vsx64l (); - init_registers_powerpc_isa207_vsx64l (); - init_registers_powerpc_isa207_htm_vsx64l (); -#else - init_registers_powerpc_32l (); - init_registers_powerpc_altivec32l (); - init_registers_powerpc_vsx32l (); - init_registers_powerpc_isa205_32l (); - init_registers_powerpc_isa205_altivec32l (); - init_registers_powerpc_isa205_vsx32l (); - init_registers_powerpc_isa205_ppr_dscr_vsx32l (); - init_registers_powerpc_isa207_vsx32l (); - init_registers_powerpc_isa207_htm_vsx32l (); - init_registers_powerpc_e500l (); -#endif -} diff -Nru gdb-9.1/gdb/gdbserver/linux-ppc-low.c gdb-10.2/gdb/gdbserver/linux-ppc-low.c --- gdb-9.1/gdb/gdbserver/linux-ppc-low.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/linux-ppc-low.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,3441 +0,0 @@ -/* GNU/Linux/PowerPC specific low level interface, for the remote server for - GDB. - Copyright (C) 1995-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "server.h" -#include "linux-low.h" - -#include "elf/common.h" -#include <sys/uio.h> -#include <elf.h> -#include <asm/ptrace.h> - -#include "arch/ppc-linux-common.h" -#include "arch/ppc-linux-tdesc.h" -#include "nat/ppc-linux.h" -#include "nat/linux-ptrace.h" -#include "linux-ppc-tdesc-init.h" -#include "ax.h" -#include "tracepoint.h" - -#define PPC_FIELD(value, from, len) \ - (((value) >> (32 - (from) - (len))) & ((1 << (len)) - 1)) -#define PPC_SEXT(v, bs) \ - ((((CORE_ADDR) (v) & (((CORE_ADDR) 1 << (bs)) - 1)) \ - ^ ((CORE_ADDR) 1 << ((bs) - 1))) \ - - ((CORE_ADDR) 1 << ((bs) - 1))) -#define PPC_OP6(insn) PPC_FIELD (insn, 0, 6) -#define PPC_BO(insn) PPC_FIELD (insn, 6, 5) -#define PPC_LI(insn) (PPC_SEXT (PPC_FIELD (insn, 6, 24), 24) << 2) -#define PPC_BD(insn) (PPC_SEXT (PPC_FIELD (insn, 16, 14), 14) << 2) - -/* Holds the AT_HWCAP auxv entry. */ - -static unsigned long ppc_hwcap; - -/* Holds the AT_HWCAP2 auxv entry. */ - -static unsigned long ppc_hwcap2; - - -#define ppc_num_regs 73 - -#ifdef __powerpc64__ -/* We use a constant for FPSCR instead of PT_FPSCR, because - many shipped PPC64 kernels had the wrong value in ptrace.h. */ -static int ppc_regmap[] = - {PT_R0 * 8, PT_R1 * 8, PT_R2 * 8, PT_R3 * 8, - PT_R4 * 8, PT_R5 * 8, PT_R6 * 8, PT_R7 * 8, - PT_R8 * 8, PT_R9 * 8, PT_R10 * 8, PT_R11 * 8, - PT_R12 * 8, PT_R13 * 8, PT_R14 * 8, PT_R15 * 8, - PT_R16 * 8, PT_R17 * 8, PT_R18 * 8, PT_R19 * 8, - PT_R20 * 8, PT_R21 * 8, PT_R22 * 8, PT_R23 * 8, - PT_R24 * 8, PT_R25 * 8, PT_R26 * 8, PT_R27 * 8, - PT_R28 * 8, PT_R29 * 8, PT_R30 * 8, PT_R31 * 8, - PT_FPR0*8, PT_FPR0*8 + 8, PT_FPR0*8+16, PT_FPR0*8+24, - PT_FPR0*8+32, PT_FPR0*8+40, PT_FPR0*8+48, PT_FPR0*8+56, - PT_FPR0*8+64, PT_FPR0*8+72, PT_FPR0*8+80, PT_FPR0*8+88, - PT_FPR0*8+96, PT_FPR0*8+104, PT_FPR0*8+112, PT_FPR0*8+120, - PT_FPR0*8+128, PT_FPR0*8+136, PT_FPR0*8+144, PT_FPR0*8+152, - PT_FPR0*8+160, PT_FPR0*8+168, PT_FPR0*8+176, PT_FPR0*8+184, - PT_FPR0*8+192, PT_FPR0*8+200, PT_FPR0*8+208, PT_FPR0*8+216, - PT_FPR0*8+224, PT_FPR0*8+232, PT_FPR0*8+240, PT_FPR0*8+248, - PT_NIP * 8, PT_MSR * 8, PT_CCR * 8, PT_LNK * 8, - PT_CTR * 8, PT_XER * 8, PT_FPR0*8 + 256, - PT_ORIG_R3 * 8, PT_TRAP * 8 }; -#else -/* Currently, don't check/send MQ. */ -static int ppc_regmap[] = - {PT_R0 * 4, PT_R1 * 4, PT_R2 * 4, PT_R3 * 4, - PT_R4 * 4, PT_R5 * 4, PT_R6 * 4, PT_R7 * 4, - PT_R8 * 4, PT_R9 * 4, PT_R10 * 4, PT_R11 * 4, - PT_R12 * 4, PT_R13 * 4, PT_R14 * 4, PT_R15 * 4, - PT_R16 * 4, PT_R17 * 4, PT_R18 * 4, PT_R19 * 4, - PT_R20 * 4, PT_R21 * 4, PT_R22 * 4, PT_R23 * 4, - PT_R24 * 4, PT_R25 * 4, PT_R26 * 4, PT_R27 * 4, - PT_R28 * 4, PT_R29 * 4, PT_R30 * 4, PT_R31 * 4, - PT_FPR0*4, PT_FPR0*4 + 8, PT_FPR0*4+16, PT_FPR0*4+24, - PT_FPR0*4+32, PT_FPR0*4+40, PT_FPR0*4+48, PT_FPR0*4+56, - PT_FPR0*4+64, PT_FPR0*4+72, PT_FPR0*4+80, PT_FPR0*4+88, - PT_FPR0*4+96, PT_FPR0*4+104, PT_FPR0*4+112, PT_FPR0*4+120, - PT_FPR0*4+128, PT_FPR0*4+136, PT_FPR0*4+144, PT_FPR0*4+152, - PT_FPR0*4+160, PT_FPR0*4+168, PT_FPR0*4+176, PT_FPR0*4+184, - PT_FPR0*4+192, PT_FPR0*4+200, PT_FPR0*4+208, PT_FPR0*4+216, - PT_FPR0*4+224, PT_FPR0*4+232, PT_FPR0*4+240, PT_FPR0*4+248, - PT_NIP * 4, PT_MSR * 4, PT_CCR * 4, PT_LNK * 4, - PT_CTR * 4, PT_XER * 4, PT_FPSCR * 4, - PT_ORIG_R3 * 4, PT_TRAP * 4 - }; - -static int ppc_regmap_e500[] = - {PT_R0 * 4, PT_R1 * 4, PT_R2 * 4, PT_R3 * 4, - PT_R4 * 4, PT_R5 * 4, PT_R6 * 4, PT_R7 * 4, - PT_R8 * 4, PT_R9 * 4, PT_R10 * 4, PT_R11 * 4, - PT_R12 * 4, PT_R13 * 4, PT_R14 * 4, PT_R15 * 4, - PT_R16 * 4, PT_R17 * 4, PT_R18 * 4, PT_R19 * 4, - PT_R20 * 4, PT_R21 * 4, PT_R22 * 4, PT_R23 * 4, - PT_R24 * 4, PT_R25 * 4, PT_R26 * 4, PT_R27 * 4, - PT_R28 * 4, PT_R29 * 4, PT_R30 * 4, PT_R31 * 4, - -1, -1, -1, -1, - -1, -1, -1, -1, - -1, -1, -1, -1, - -1, -1, -1, -1, - -1, -1, -1, -1, - -1, -1, -1, -1, - -1, -1, -1, -1, - -1, -1, -1, -1, - PT_NIP * 4, PT_MSR * 4, PT_CCR * 4, PT_LNK * 4, - PT_CTR * 4, PT_XER * 4, -1, - PT_ORIG_R3 * 4, PT_TRAP * 4 - }; -#endif - -/* Check whether the kernel provides a register set with number - REGSET_ID of size REGSETSIZE for process/thread TID. */ - -static int -ppc_check_regset (int tid, int regset_id, int regsetsize) -{ - void *buf = alloca (regsetsize); - struct iovec iov; - - iov.iov_base = buf; - iov.iov_len = regsetsize; - - if (ptrace (PTRACE_GETREGSET, tid, regset_id, &iov) >= 0 - || errno == ENODATA) - return 1; - return 0; -} - -static int -ppc_cannot_store_register (int regno) -{ - const struct target_desc *tdesc = current_process ()->tdesc; - -#ifndef __powerpc64__ - /* Some kernels do not allow us to store fpscr. */ - if (!(ppc_hwcap & PPC_FEATURE_HAS_SPE) - && regno == find_regno (tdesc, "fpscr")) - return 2; -#endif - - /* Some kernels do not allow us to store orig_r3 or trap. */ - if (regno == find_regno (tdesc, "orig_r3") - || regno == find_regno (tdesc, "trap")) - return 2; - - return 0; -} - -static int -ppc_cannot_fetch_register (int regno) -{ - return 0; -} - -static void -ppc_collect_ptrace_register (struct regcache *regcache, int regno, char *buf) -{ - memset (buf, 0, sizeof (long)); - - if (__BYTE_ORDER == __LITTLE_ENDIAN) - { - /* Little-endian values always sit at the left end of the buffer. */ - collect_register (regcache, regno, buf); - } - else if (__BYTE_ORDER == __BIG_ENDIAN) - { - /* Big-endian values sit at the right end of the buffer. In case of - registers whose sizes are smaller than sizeof (long), we must use a - padding to access them correctly. */ - int size = register_size (regcache->tdesc, regno); - - if (size < sizeof (long)) - collect_register (regcache, regno, buf + sizeof (long) - size); - else - collect_register (regcache, regno, buf); - } - else - perror_with_name ("Unexpected byte order"); -} - -static void -ppc_supply_ptrace_register (struct regcache *regcache, - int regno, const char *buf) -{ - if (__BYTE_ORDER == __LITTLE_ENDIAN) - { - /* Little-endian values always sit at the left end of the buffer. */ - supply_register (regcache, regno, buf); - } - else if (__BYTE_ORDER == __BIG_ENDIAN) - { - /* Big-endian values sit at the right end of the buffer. In case of - registers whose sizes are smaller than sizeof (long), we must use a - padding to access them correctly. */ - int size = register_size (regcache->tdesc, regno); - - if (size < sizeof (long)) - supply_register (regcache, regno, buf + sizeof (long) - size); - else - supply_register (regcache, regno, buf); - } - else - perror_with_name ("Unexpected byte order"); -} - -static CORE_ADDR -ppc_get_pc (struct regcache *regcache) -{ - if (register_size (regcache->tdesc, 0) == 4) - { - unsigned int pc; - collect_register_by_name (regcache, "pc", &pc); - return (CORE_ADDR) pc; - } - else - { - unsigned long pc; - collect_register_by_name (regcache, "pc", &pc); - return (CORE_ADDR) pc; - } -} - -static void -ppc_set_pc (struct regcache *regcache, CORE_ADDR pc) -{ - if (register_size (regcache->tdesc, 0) == 4) - { - unsigned int newpc = pc; - supply_register_by_name (regcache, "pc", &newpc); - } - else - { - unsigned long newpc = pc; - supply_register_by_name (regcache, "pc", &newpc); - } -} - -#ifndef __powerpc64__ -static int ppc_regmap_adjusted; -#endif - - -/* Correct in either endianness. - This instruction is "twge r2, r2", which GDB uses as a software - breakpoint. */ -static const unsigned int ppc_breakpoint = 0x7d821008; -#define ppc_breakpoint_len 4 - -/* Implementation of linux_target_ops method "sw_breakpoint_from_kind". */ - -static const gdb_byte * -ppc_sw_breakpoint_from_kind (int kind, int *size) -{ - *size = ppc_breakpoint_len; - return (const gdb_byte *) &ppc_breakpoint; -} - -static int -ppc_breakpoint_at (CORE_ADDR where) -{ - unsigned int insn; - - (*the_target->read_memory) (where, (unsigned char *) &insn, 4); - if (insn == ppc_breakpoint) - return 1; - /* If necessary, recognize more trap instructions here. GDB only uses - the one. */ - - return 0; -} - -/* Implement supports_z_point_type target-ops. - Returns true if type Z_TYPE breakpoint is supported. - - Handling software breakpoint at server side, so tracepoints - and breakpoints can be inserted at the same location. */ - -static int -ppc_supports_z_point_type (char z_type) -{ - switch (z_type) - { - case Z_PACKET_SW_BP: - return 1; - case Z_PACKET_HW_BP: - case Z_PACKET_WRITE_WP: - case Z_PACKET_ACCESS_WP: - default: - return 0; - } -} - -/* Implement insert_point target-ops. - Returns 0 on success, -1 on failure and 1 on unsupported. */ - -static int -ppc_insert_point (enum raw_bkpt_type type, CORE_ADDR addr, - int size, struct raw_breakpoint *bp) -{ - switch (type) - { - case raw_bkpt_type_sw: - return insert_memory_breakpoint (bp); - - case raw_bkpt_type_hw: - case raw_bkpt_type_write_wp: - case raw_bkpt_type_access_wp: - default: - /* Unsupported. */ - return 1; - } -} - -/* Implement remove_point target-ops. - Returns 0 on success, -1 on failure and 1 on unsupported. */ - -static int -ppc_remove_point (enum raw_bkpt_type type, CORE_ADDR addr, - int size, struct raw_breakpoint *bp) -{ - switch (type) - { - case raw_bkpt_type_sw: - return remove_memory_breakpoint (bp); - - case raw_bkpt_type_hw: - case raw_bkpt_type_write_wp: - case raw_bkpt_type_access_wp: - default: - /* Unsupported. */ - return 1; - } -} - -/* Provide only a fill function for the general register set. ps_lgetregs - will use this for NPTL support. */ - -static void ppc_fill_gregset (struct regcache *regcache, void *buf) -{ - int i; - - for (i = 0; i < 32; i++) - ppc_collect_ptrace_register (regcache, i, (char *) buf + ppc_regmap[i]); - - for (i = 64; i < 70; i++) - ppc_collect_ptrace_register (regcache, i, (char *) buf + ppc_regmap[i]); - - for (i = 71; i < 73; i++) - ppc_collect_ptrace_register (regcache, i, (char *) buf + ppc_regmap[i]); -} - -/* Program Priority Register regset fill function. */ - -static void -ppc_fill_pprregset (struct regcache *regcache, void *buf) -{ - char *ppr = (char *) buf; - - collect_register_by_name (regcache, "ppr", ppr); -} - -/* Program Priority Register regset store function. */ - -static void -ppc_store_pprregset (struct regcache *regcache, const void *buf) -{ - const char *ppr = (const char *) buf; - - supply_register_by_name (regcache, "ppr", ppr); -} - -/* Data Stream Control Register regset fill function. */ - -static void -ppc_fill_dscrregset (struct regcache *regcache, void *buf) -{ - char *dscr = (char *) buf; - - collect_register_by_name (regcache, "dscr", dscr); -} - -/* Data Stream Control Register regset store function. */ - -static void -ppc_store_dscrregset (struct regcache *regcache, const void *buf) -{ - const char *dscr = (const char *) buf; - - supply_register_by_name (regcache, "dscr", dscr); -} - -/* Target Address Register regset fill function. */ - -static void -ppc_fill_tarregset (struct regcache *regcache, void *buf) -{ - char *tar = (char *) buf; - - collect_register_by_name (regcache, "tar", tar); -} - -/* Target Address Register regset store function. */ - -static void -ppc_store_tarregset (struct regcache *regcache, const void *buf) -{ - const char *tar = (const char *) buf; - - supply_register_by_name (regcache, "tar", tar); -} - -/* Event-Based Branching regset store function. Unless the inferior - has a perf event open, ptrace can return in error when reading and - writing to the regset, with ENODATA. For reading, the registers - will correctly show as unavailable. For writing, gdbserver - currently only caches any register writes from P and G packets and - the stub always tries to write all the regsets when resuming the - inferior, which would result in frequent warnings. For this - reason, we don't define a fill function. This also means that the - client-side regcache will be dirty if the user tries to write to - the EBB registers. G packets that the client sends to write to - unrelated registers will also include data for EBB registers, even - if they are unavailable. */ - -static void -ppc_store_ebbregset (struct regcache *regcache, const void *buf) -{ - const char *regset = (const char *) buf; - - /* The order in the kernel regset is: EBBRR, EBBHR, BESCR. In the - .dat file is BESCR, EBBHR, EBBRR. */ - supply_register_by_name (regcache, "ebbrr", ®set[0]); - supply_register_by_name (regcache, "ebbhr", ®set[8]); - supply_register_by_name (regcache, "bescr", ®set[16]); -} - -/* Performance Monitoring Unit regset fill function. */ - -static void -ppc_fill_pmuregset (struct regcache *regcache, void *buf) -{ - char *regset = (char *) buf; - - /* The order in the kernel regset is SIAR, SDAR, SIER, MMCR2, MMCR0. - In the .dat file is MMCR0, MMCR2, SIAR, SDAR, SIER. */ - collect_register_by_name (regcache, "siar", ®set[0]); - collect_register_by_name (regcache, "sdar", ®set[8]); - collect_register_by_name (regcache, "sier", ®set[16]); - collect_register_by_name (regcache, "mmcr2", ®set[24]); - collect_register_by_name (regcache, "mmcr0", ®set[32]); -} - -/* Performance Monitoring Unit regset store function. */ - -static void -ppc_store_pmuregset (struct regcache *regcache, const void *buf) -{ - const char *regset = (const char *) buf; - - supply_register_by_name (regcache, "siar", ®set[0]); - supply_register_by_name (regcache, "sdar", ®set[8]); - supply_register_by_name (regcache, "sier", ®set[16]); - supply_register_by_name (regcache, "mmcr2", ®set[24]); - supply_register_by_name (regcache, "mmcr0", ®set[32]); -} - -/* Hardware Transactional Memory special-purpose register regset fill - function. */ - -static void -ppc_fill_tm_sprregset (struct regcache *regcache, void *buf) -{ - int i, base; - char *regset = (char *) buf; - - base = find_regno (regcache->tdesc, "tfhar"); - for (i = 0; i < 3; i++) - collect_register (regcache, base + i, ®set[i * 8]); -} - -/* Hardware Transactional Memory special-purpose register regset store - function. */ - -static void -ppc_store_tm_sprregset (struct regcache *regcache, const void *buf) -{ - int i, base; - const char *regset = (const char *) buf; - - base = find_regno (regcache->tdesc, "tfhar"); - for (i = 0; i < 3; i++) - supply_register (regcache, base + i, ®set[i * 8]); -} - -/* For the same reasons as the EBB regset, none of the HTM - checkpointed regsets have a fill function. These registers are - only available if the inferior is in a transaction. */ - -/* Hardware Transactional Memory checkpointed general-purpose regset - store function. */ - -static void -ppc_store_tm_cgprregset (struct regcache *regcache, const void *buf) -{ - int i, base, size, endian_offset; - const char *regset = (const char *) buf; - - base = find_regno (regcache->tdesc, "cr0"); - size = register_size (regcache->tdesc, base); - - gdb_assert (size == 4 || size == 8); - - for (i = 0; i < 32; i++) - supply_register (regcache, base + i, ®set[i * size]); - - endian_offset = 0; - - if ((size == 8) && (__BYTE_ORDER == __BIG_ENDIAN)) - endian_offset = 4; - - supply_register_by_name (regcache, "ccr", - ®set[PT_CCR * size + endian_offset]); - - supply_register_by_name (regcache, "cxer", - ®set[PT_XER * size + endian_offset]); - - supply_register_by_name (regcache, "clr", ®set[PT_LNK * size]); - supply_register_by_name (regcache, "cctr", ®set[PT_CTR * size]); -} - -/* Hardware Transactional Memory checkpointed floating-point regset - store function. */ - -static void -ppc_store_tm_cfprregset (struct regcache *regcache, const void *buf) -{ - int i, base; - const char *regset = (const char *) buf; - - base = find_regno (regcache->tdesc, "cf0"); - - for (i = 0; i < 32; i++) - supply_register (regcache, base + i, ®set[i * 8]); - - supply_register_by_name (regcache, "cfpscr", ®set[32 * 8]); -} - -/* Hardware Transactional Memory checkpointed vector regset store - function. */ - -static void -ppc_store_tm_cvrregset (struct regcache *regcache, const void *buf) -{ - int i, base; - const char *regset = (const char *) buf; - int vscr_offset = 0; - - base = find_regno (regcache->tdesc, "cvr0"); - - for (i = 0; i < 32; i++) - supply_register (regcache, base + i, ®set[i * 16]); - - if (__BYTE_ORDER == __BIG_ENDIAN) - vscr_offset = 12; - - supply_register_by_name (regcache, "cvscr", - ®set[32 * 16 + vscr_offset]); - - supply_register_by_name (regcache, "cvrsave", ®set[33 * 16]); -} - -/* Hardware Transactional Memory checkpointed vector-scalar regset - store function. */ - -static void -ppc_store_tm_cvsxregset (struct regcache *regcache, const void *buf) -{ - int i, base; - const char *regset = (const char *) buf; - - base = find_regno (regcache->tdesc, "cvs0h"); - for (i = 0; i < 32; i++) - supply_register (regcache, base + i, ®set[i * 8]); -} - -/* Hardware Transactional Memory checkpointed Program Priority - Register regset store function. */ - -static void -ppc_store_tm_cpprregset (struct regcache *regcache, const void *buf) -{ - const char *cppr = (const char *) buf; - - supply_register_by_name (regcache, "cppr", cppr); -} - -/* Hardware Transactional Memory checkpointed Data Stream Control - Register regset store function. */ - -static void -ppc_store_tm_cdscrregset (struct regcache *regcache, const void *buf) -{ - const char *cdscr = (const char *) buf; - - supply_register_by_name (regcache, "cdscr", cdscr); -} - -/* Hardware Transactional Memory checkpointed Target Address Register - regset store function. */ - -static void -ppc_store_tm_ctarregset (struct regcache *regcache, const void *buf) -{ - const char *ctar = (const char *) buf; - - supply_register_by_name (regcache, "ctar", ctar); -} - -static void -ppc_fill_vsxregset (struct regcache *regcache, void *buf) -{ - int i, base; - char *regset = (char *) buf; - - base = find_regno (regcache->tdesc, "vs0h"); - for (i = 0; i < 32; i++) - collect_register (regcache, base + i, ®set[i * 8]); -} - -static void -ppc_store_vsxregset (struct regcache *regcache, const void *buf) -{ - int i, base; - const char *regset = (const char *) buf; - - base = find_regno (regcache->tdesc, "vs0h"); - for (i = 0; i < 32; i++) - supply_register (regcache, base + i, ®set[i * 8]); -} - -static void -ppc_fill_vrregset (struct regcache *regcache, void *buf) -{ - int i, base; - char *regset = (char *) buf; - int vscr_offset = 0; - - base = find_regno (regcache->tdesc, "vr0"); - for (i = 0; i < 32; i++) - collect_register (regcache, base + i, ®set[i * 16]); - - if (__BYTE_ORDER == __BIG_ENDIAN) - vscr_offset = 12; - - collect_register_by_name (regcache, "vscr", - ®set[32 * 16 + vscr_offset]); - - collect_register_by_name (regcache, "vrsave", ®set[33 * 16]); -} - -static void -ppc_store_vrregset (struct regcache *regcache, const void *buf) -{ - int i, base; - const char *regset = (const char *) buf; - int vscr_offset = 0; - - base = find_regno (regcache->tdesc, "vr0"); - for (i = 0; i < 32; i++) - supply_register (regcache, base + i, ®set[i * 16]); - - if (__BYTE_ORDER == __BIG_ENDIAN) - vscr_offset = 12; - - supply_register_by_name (regcache, "vscr", - ®set[32 * 16 + vscr_offset]); - supply_register_by_name (regcache, "vrsave", ®set[33 * 16]); -} - -struct gdb_evrregset_t -{ - unsigned long evr[32]; - unsigned long long acc; - unsigned long spefscr; -}; - -static void -ppc_fill_evrregset (struct regcache *regcache, void *buf) -{ - int i, ev0; - struct gdb_evrregset_t *regset = (struct gdb_evrregset_t *) buf; - - ev0 = find_regno (regcache->tdesc, "ev0h"); - for (i = 0; i < 32; i++) - collect_register (regcache, ev0 + i, ®set->evr[i]); - - collect_register_by_name (regcache, "acc", ®set->acc); - collect_register_by_name (regcache, "spefscr", ®set->spefscr); -} - -static void -ppc_store_evrregset (struct regcache *regcache, const void *buf) -{ - int i, ev0; - const struct gdb_evrregset_t *regset = (const struct gdb_evrregset_t *) buf; - - ev0 = find_regno (regcache->tdesc, "ev0h"); - for (i = 0; i < 32; i++) - supply_register (regcache, ev0 + i, ®set->evr[i]); - - supply_register_by_name (regcache, "acc", ®set->acc); - supply_register_by_name (regcache, "spefscr", ®set->spefscr); -} - -/* Support for hardware single step. */ - -static int -ppc_supports_hardware_single_step (void) -{ - return 1; -} - -static struct regset_info ppc_regsets[] = { - /* List the extra register sets before GENERAL_REGS. That way we will - fetch them every time, but still fall back to PTRACE_PEEKUSER for the - general registers. Some kernels support these, but not the newer - PPC_PTRACE_GETREGS. */ - { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_PPC_TM_CTAR, 0, EXTENDED_REGS, - NULL, ppc_store_tm_ctarregset }, - { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_PPC_TM_CDSCR, 0, EXTENDED_REGS, - NULL, ppc_store_tm_cdscrregset }, - { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_PPC_TM_CPPR, 0, EXTENDED_REGS, - NULL, ppc_store_tm_cpprregset }, - { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_PPC_TM_CVSX, 0, EXTENDED_REGS, - NULL, ppc_store_tm_cvsxregset }, - { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_PPC_TM_CVMX, 0, EXTENDED_REGS, - NULL, ppc_store_tm_cvrregset }, - { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_PPC_TM_CFPR, 0, EXTENDED_REGS, - NULL, ppc_store_tm_cfprregset }, - { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_PPC_TM_CGPR, 0, EXTENDED_REGS, - NULL, ppc_store_tm_cgprregset }, - { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_PPC_TM_SPR, 0, EXTENDED_REGS, - ppc_fill_tm_sprregset, ppc_store_tm_sprregset }, - { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_PPC_EBB, 0, EXTENDED_REGS, - NULL, ppc_store_ebbregset }, - { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_PPC_PMU, 0, EXTENDED_REGS, - ppc_fill_pmuregset, ppc_store_pmuregset }, - { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_PPC_TAR, 0, EXTENDED_REGS, - ppc_fill_tarregset, ppc_store_tarregset }, - { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_PPC_PPR, 0, EXTENDED_REGS, - ppc_fill_pprregset, ppc_store_pprregset }, - { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_PPC_DSCR, 0, EXTENDED_REGS, - ppc_fill_dscrregset, ppc_store_dscrregset }, - { PTRACE_GETVSXREGS, PTRACE_SETVSXREGS, 0, 0, EXTENDED_REGS, - ppc_fill_vsxregset, ppc_store_vsxregset }, - { PTRACE_GETVRREGS, PTRACE_SETVRREGS, 0, 0, EXTENDED_REGS, - ppc_fill_vrregset, ppc_store_vrregset }, - { PTRACE_GETEVRREGS, PTRACE_SETEVRREGS, 0, 0, EXTENDED_REGS, - ppc_fill_evrregset, ppc_store_evrregset }, - { 0, 0, 0, 0, GENERAL_REGS, ppc_fill_gregset, NULL }, - NULL_REGSET -}; - -static struct usrregs_info ppc_usrregs_info = - { - ppc_num_regs, - ppc_regmap, - }; - -static struct regsets_info ppc_regsets_info = - { - ppc_regsets, /* regsets */ - 0, /* num_regsets */ - NULL, /* disabled_regsets */ - }; - -static struct regs_info regs_info = - { - NULL, /* regset_bitmap */ - &ppc_usrregs_info, - &ppc_regsets_info - }; - -static const struct regs_info * -ppc_regs_info (void) -{ - return ®s_info; -} - -static void -ppc_arch_setup (void) -{ - const struct target_desc *tdesc; - struct regset_info *regset; - struct ppc_linux_features features = ppc_linux_no_features; - - int tid = lwpid_of (current_thread); - - features.wordsize = ppc_linux_target_wordsize (tid); - - if (features.wordsize == 4) - tdesc = tdesc_powerpc_32l; - else - tdesc = tdesc_powerpc_64l; - - current_process ()->tdesc = tdesc; - - /* The value of current_process ()->tdesc needs to be set for this - call. */ - ppc_hwcap = linux_get_hwcap (features.wordsize); - ppc_hwcap2 = linux_get_hwcap2 (features.wordsize); - - features.isa205 = ppc_linux_has_isa205 (ppc_hwcap); - - if (ppc_hwcap & PPC_FEATURE_HAS_VSX) - features.vsx = true; - - if (ppc_hwcap & PPC_FEATURE_HAS_ALTIVEC) - features.altivec = true; - - if ((ppc_hwcap2 & PPC_FEATURE2_DSCR) - && ppc_check_regset (tid, NT_PPC_DSCR, PPC_LINUX_SIZEOF_DSCRREGSET) - && ppc_check_regset (tid, NT_PPC_PPR, PPC_LINUX_SIZEOF_PPRREGSET)) - { - features.ppr_dscr = true; - if ((ppc_hwcap2 & PPC_FEATURE2_ARCH_2_07) - && (ppc_hwcap2 & PPC_FEATURE2_TAR) - && (ppc_hwcap2 & PPC_FEATURE2_EBB) - && ppc_check_regset (tid, NT_PPC_TAR, - PPC_LINUX_SIZEOF_TARREGSET) - && ppc_check_regset (tid, NT_PPC_EBB, - PPC_LINUX_SIZEOF_EBBREGSET) - && ppc_check_regset (tid, NT_PPC_PMU, - PPC_LINUX_SIZEOF_PMUREGSET)) - { - features.isa207 = true; - if ((ppc_hwcap2 & PPC_FEATURE2_HTM) - && ppc_check_regset (tid, NT_PPC_TM_SPR, - PPC_LINUX_SIZEOF_TM_SPRREGSET)) - features.htm = true; - } - } - - tdesc = ppc_linux_match_description (features); - - /* On 32-bit machines, check for SPE registers. - Set the low target's regmap field as appropriately. */ -#ifndef __powerpc64__ - if (ppc_hwcap & PPC_FEATURE_HAS_SPE) - tdesc = tdesc_powerpc_e500l; - - if (!ppc_regmap_adjusted) - { - if (ppc_hwcap & PPC_FEATURE_HAS_SPE) - ppc_usrregs_info.regmap = ppc_regmap_e500; - - /* If the FPSCR is 64-bit wide, we need to fetch the whole - 64-bit slot and not just its second word. The PT_FPSCR - supplied in a 32-bit GDB compilation doesn't reflect - this. */ - if (register_size (tdesc, 70) == 8) - ppc_regmap[70] = (48 + 2*32) * sizeof (long); - - ppc_regmap_adjusted = 1; - } -#endif - - current_process ()->tdesc = tdesc; - - for (regset = ppc_regsets; regset->size >= 0; regset++) - switch (regset->get_request) - { - case PTRACE_GETVRREGS: - regset->size = features.altivec ? PPC_LINUX_SIZEOF_VRREGSET : 0; - break; - case PTRACE_GETVSXREGS: - regset->size = features.vsx ? PPC_LINUX_SIZEOF_VSXREGSET : 0; - break; - case PTRACE_GETEVRREGS: - if (ppc_hwcap & PPC_FEATURE_HAS_SPE) - regset->size = 32 * 4 + 8 + 4; - else - regset->size = 0; - break; - case PTRACE_GETREGSET: - switch (regset->nt_type) - { - case NT_PPC_PPR: - regset->size = (features.ppr_dscr ? - PPC_LINUX_SIZEOF_PPRREGSET : 0); - break; - case NT_PPC_DSCR: - regset->size = (features.ppr_dscr ? - PPC_LINUX_SIZEOF_DSCRREGSET : 0); - break; - case NT_PPC_TAR: - regset->size = (features.isa207 ? - PPC_LINUX_SIZEOF_TARREGSET : 0); - break; - case NT_PPC_EBB: - regset->size = (features.isa207 ? - PPC_LINUX_SIZEOF_EBBREGSET : 0); - break; - case NT_PPC_PMU: - regset->size = (features.isa207 ? - PPC_LINUX_SIZEOF_PMUREGSET : 0); - break; - case NT_PPC_TM_SPR: - regset->size = (features.htm ? - PPC_LINUX_SIZEOF_TM_SPRREGSET : 0); - break; - case NT_PPC_TM_CGPR: - if (features.wordsize == 4) - regset->size = (features.htm ? - PPC32_LINUX_SIZEOF_CGPRREGSET : 0); - else - regset->size = (features.htm ? - PPC64_LINUX_SIZEOF_CGPRREGSET : 0); - break; - case NT_PPC_TM_CFPR: - regset->size = (features.htm ? - PPC_LINUX_SIZEOF_CFPRREGSET : 0); - break; - case NT_PPC_TM_CVMX: - regset->size = (features.htm ? - PPC_LINUX_SIZEOF_CVMXREGSET : 0); - break; - case NT_PPC_TM_CVSX: - regset->size = (features.htm ? - PPC_LINUX_SIZEOF_CVSXREGSET : 0); - break; - case NT_PPC_TM_CPPR: - regset->size = (features.htm ? - PPC_LINUX_SIZEOF_CPPRREGSET : 0); - break; - case NT_PPC_TM_CDSCR: - regset->size = (features.htm ? - PPC_LINUX_SIZEOF_CDSCRREGSET : 0); - break; - case NT_PPC_TM_CTAR: - regset->size = (features.htm ? - PPC_LINUX_SIZEOF_CTARREGSET : 0); - break; - default: - break; - } - break; - default: - break; - } -} - -/* Implementation of linux_target_ops method "supports_tracepoints". */ - -static int -ppc_supports_tracepoints (void) -{ - return 1; -} - -/* Get the thread area address. This is used to recognize which - thread is which when tracing with the in-process agent library. We - don't read anything from the address, and treat it as opaque; it's - the address itself that we assume is unique per-thread. */ - -static int -ppc_get_thread_area (int lwpid, CORE_ADDR *addr) -{ - struct lwp_info *lwp = find_lwp_pid (ptid_t (lwpid)); - struct thread_info *thr = get_lwp_thread (lwp); - struct regcache *regcache = get_thread_regcache (thr, 1); - ULONGEST tp = 0; - -#ifdef __powerpc64__ - if (register_size (regcache->tdesc, 0) == 8) - collect_register_by_name (regcache, "r13", &tp); - else -#endif - collect_register_by_name (regcache, "r2", &tp); - - *addr = tp; - - return 0; -} - -#ifdef __powerpc64__ - -/* Older glibc doesn't provide this. */ - -#ifndef EF_PPC64_ABI -#define EF_PPC64_ABI 3 -#endif - -/* Returns 1 if inferior is using ELFv2 ABI. Undefined for 32-bit - inferiors. */ - -static int -is_elfv2_inferior (void) -{ - /* To be used as fallback if we're unable to determine the right result - - assume inferior uses the same ABI as gdbserver. */ -#if _CALL_ELF == 2 - const int def_res = 1; -#else - const int def_res = 0; -#endif - CORE_ADDR phdr; - Elf64_Ehdr ehdr; - - const struct target_desc *tdesc = current_process ()->tdesc; - int wordsize = register_size (tdesc, 0); - - if (!linux_get_auxv (wordsize, AT_PHDR, &phdr)) - return def_res; - - /* Assume ELF header is at the beginning of the page where program headers - are located. If it doesn't look like one, bail. */ - - read_inferior_memory (phdr & ~0xfff, (unsigned char *) &ehdr, sizeof ehdr); - if (memcmp(ehdr.e_ident, ELFMAG, SELFMAG)) - return def_res; - - return (ehdr.e_flags & EF_PPC64_ABI) == 2; -} - -#endif - -/* Generate a ds-form instruction in BUF and return the number of bytes written - - 0 6 11 16 30 32 - | OPCD | RST | RA | DS |XO| */ - -__attribute__((unused)) /* Maybe unused due to conditional compilation. */ -static int -gen_ds_form (uint32_t *buf, int opcd, int rst, int ra, int ds, int xo) -{ - uint32_t insn; - - gdb_assert ((opcd & ~0x3f) == 0); - gdb_assert ((rst & ~0x1f) == 0); - gdb_assert ((ra & ~0x1f) == 0); - gdb_assert ((xo & ~0x3) == 0); - - insn = (rst << 21) | (ra << 16) | (ds & 0xfffc) | (xo & 0x3); - *buf = (opcd << 26) | insn; - return 1; -} - -/* Followings are frequently used ds-form instructions. */ - -#define GEN_STD(buf, rs, ra, offset) gen_ds_form (buf, 62, rs, ra, offset, 0) -#define GEN_STDU(buf, rs, ra, offset) gen_ds_form (buf, 62, rs, ra, offset, 1) -#define GEN_LD(buf, rt, ra, offset) gen_ds_form (buf, 58, rt, ra, offset, 0) -#define GEN_LDU(buf, rt, ra, offset) gen_ds_form (buf, 58, rt, ra, offset, 1) - -/* Generate a d-form instruction in BUF. - - 0 6 11 16 32 - | OPCD | RST | RA | D | */ - -static int -gen_d_form (uint32_t *buf, int opcd, int rst, int ra, int si) -{ - uint32_t insn; - - gdb_assert ((opcd & ~0x3f) == 0); - gdb_assert ((rst & ~0x1f) == 0); - gdb_assert ((ra & ~0x1f) == 0); - - insn = (rst << 21) | (ra << 16) | (si & 0xffff); - *buf = (opcd << 26) | insn; - return 1; -} - -/* Followings are frequently used d-form instructions. */ - -#define GEN_ADDI(buf, rt, ra, si) gen_d_form (buf, 14, rt, ra, si) -#define GEN_ADDIS(buf, rt, ra, si) gen_d_form (buf, 15, rt, ra, si) -#define GEN_LI(buf, rt, si) GEN_ADDI (buf, rt, 0, si) -#define GEN_LIS(buf, rt, si) GEN_ADDIS (buf, rt, 0, si) -#define GEN_ORI(buf, rt, ra, si) gen_d_form (buf, 24, rt, ra, si) -#define GEN_ORIS(buf, rt, ra, si) gen_d_form (buf, 25, rt, ra, si) -#define GEN_LWZ(buf, rt, ra, si) gen_d_form (buf, 32, rt, ra, si) -#define GEN_STW(buf, rt, ra, si) gen_d_form (buf, 36, rt, ra, si) -#define GEN_STWU(buf, rt, ra, si) gen_d_form (buf, 37, rt, ra, si) - -/* Generate a xfx-form instruction in BUF and return the number of bytes - written. - - 0 6 11 21 31 32 - | OPCD | RST | RI | XO |/| */ - -static int -gen_xfx_form (uint32_t *buf, int opcd, int rst, int ri, int xo) -{ - uint32_t insn; - unsigned int n = ((ri & 0x1f) << 5) | ((ri >> 5) & 0x1f); - - gdb_assert ((opcd & ~0x3f) == 0); - gdb_assert ((rst & ~0x1f) == 0); - gdb_assert ((xo & ~0x3ff) == 0); - - insn = (rst << 21) | (n << 11) | (xo << 1); - *buf = (opcd << 26) | insn; - return 1; -} - -/* Followings are frequently used xfx-form instructions. */ - -#define GEN_MFSPR(buf, rt, spr) gen_xfx_form (buf, 31, rt, spr, 339) -#define GEN_MTSPR(buf, rt, spr) gen_xfx_form (buf, 31, rt, spr, 467) -#define GEN_MFCR(buf, rt) gen_xfx_form (buf, 31, rt, 0, 19) -#define GEN_MTCR(buf, rt) gen_xfx_form (buf, 31, rt, 0x3cf, 144) -#define GEN_SYNC(buf, L, E) gen_xfx_form (buf, 31, L & 0x3, \ - E & 0xf, 598) -#define GEN_LWSYNC(buf) GEN_SYNC (buf, 1, 0) - - -/* Generate a x-form instruction in BUF and return the number of bytes written. - - 0 6 11 16 21 31 32 - | OPCD | RST | RA | RB | XO |RC| */ - -static int -gen_x_form (uint32_t *buf, int opcd, int rst, int ra, int rb, int xo, int rc) -{ - uint32_t insn; - - gdb_assert ((opcd & ~0x3f) == 0); - gdb_assert ((rst & ~0x1f) == 0); - gdb_assert ((ra & ~0x1f) == 0); - gdb_assert ((rb & ~0x1f) == 0); - gdb_assert ((xo & ~0x3ff) == 0); - gdb_assert ((rc & ~1) == 0); - - insn = (rst << 21) | (ra << 16) | (rb << 11) | (xo << 1) | rc; - *buf = (opcd << 26) | insn; - return 1; -} - -/* Followings are frequently used x-form instructions. */ - -#define GEN_OR(buf, ra, rs, rb) gen_x_form (buf, 31, rs, ra, rb, 444, 0) -#define GEN_MR(buf, ra, rs) GEN_OR (buf, ra, rs, rs) -#define GEN_LWARX(buf, rt, ra, rb) gen_x_form (buf, 31, rt, ra, rb, 20, 0) -#define GEN_STWCX(buf, rs, ra, rb) gen_x_form (buf, 31, rs, ra, rb, 150, 1) -/* Assume bf = cr7. */ -#define GEN_CMPW(buf, ra, rb) gen_x_form (buf, 31, 28, ra, rb, 0, 0) - - -/* Generate a md-form instruction in BUF and return the number of bytes written. - - 0 6 11 16 21 27 30 31 32 - | OPCD | RS | RA | sh | mb | XO |sh|Rc| */ - -static int -gen_md_form (uint32_t *buf, int opcd, int rs, int ra, int sh, int mb, - int xo, int rc) -{ - uint32_t insn; - unsigned int n = ((mb & 0x1f) << 1) | ((mb >> 5) & 0x1); - unsigned int sh0_4 = sh & 0x1f; - unsigned int sh5 = (sh >> 5) & 1; - - gdb_assert ((opcd & ~0x3f) == 0); - gdb_assert ((rs & ~0x1f) == 0); - gdb_assert ((ra & ~0x1f) == 0); - gdb_assert ((sh & ~0x3f) == 0); - gdb_assert ((mb & ~0x3f) == 0); - gdb_assert ((xo & ~0x7) == 0); - gdb_assert ((rc & ~0x1) == 0); - - insn = (rs << 21) | (ra << 16) | (sh0_4 << 11) | (n << 5) - | (sh5 << 1) | (xo << 2) | (rc & 1); - *buf = (opcd << 26) | insn; - return 1; -} - -/* The following are frequently used md-form instructions. */ - -#define GEN_RLDICL(buf, ra, rs ,sh, mb) \ - gen_md_form (buf, 30, rs, ra, sh, mb, 0, 0) -#define GEN_RLDICR(buf, ra, rs ,sh, mb) \ - gen_md_form (buf, 30, rs, ra, sh, mb, 1, 0) - -/* Generate a i-form instruction in BUF and return the number of bytes written. - - 0 6 30 31 32 - | OPCD | LI |AA|LK| */ - -static int -gen_i_form (uint32_t *buf, int opcd, int li, int aa, int lk) -{ - uint32_t insn; - - gdb_assert ((opcd & ~0x3f) == 0); - - insn = (li & 0x3fffffc) | (aa & 1) | (lk & 1); - *buf = (opcd << 26) | insn; - return 1; -} - -/* The following are frequently used i-form instructions. */ - -#define GEN_B(buf, li) gen_i_form (buf, 18, li, 0, 0) -#define GEN_BL(buf, li) gen_i_form (buf, 18, li, 0, 1) - -/* Generate a b-form instruction in BUF and return the number of bytes written. - - 0 6 11 16 30 31 32 - | OPCD | BO | BI | BD |AA|LK| */ - -static int -gen_b_form (uint32_t *buf, int opcd, int bo, int bi, int bd, - int aa, int lk) -{ - uint32_t insn; - - gdb_assert ((opcd & ~0x3f) == 0); - gdb_assert ((bo & ~0x1f) == 0); - gdb_assert ((bi & ~0x1f) == 0); - - insn = (bo << 21) | (bi << 16) | (bd & 0xfffc) | (aa & 1) | (lk & 1); - *buf = (opcd << 26) | insn; - return 1; -} - -/* The following are frequently used b-form instructions. */ -/* Assume bi = cr7. */ -#define GEN_BNE(buf, bd) gen_b_form (buf, 16, 0x4, (7 << 2) | 2, bd, 0 ,0) - -/* GEN_LOAD and GEN_STORE generate 64- or 32-bit load/store for ppc64 or ppc32 - respectively. They are primary used for save/restore GPRs in jump-pad, - not used for bytecode compiling. */ - -#ifdef __powerpc64__ -#define GEN_LOAD(buf, rt, ra, si, is_64) (is_64 ? \ - GEN_LD (buf, rt, ra, si) : \ - GEN_LWZ (buf, rt, ra, si)) -#define GEN_STORE(buf, rt, ra, si, is_64) (is_64 ? \ - GEN_STD (buf, rt, ra, si) : \ - GEN_STW (buf, rt, ra, si)) -#else -#define GEN_LOAD(buf, rt, ra, si, is_64) GEN_LWZ (buf, rt, ra, si) -#define GEN_STORE(buf, rt, ra, si, is_64) GEN_STW (buf, rt, ra, si) -#endif - -/* Generate a sequence of instructions to load IMM in the register REG. - Write the instructions in BUF and return the number of bytes written. */ - -static int -gen_limm (uint32_t *buf, int reg, uint64_t imm, int is_64) -{ - uint32_t *p = buf; - - if ((imm + 32768) < 65536) - { - /* li reg, imm[15:0] */ - p += GEN_LI (p, reg, imm); - } - else if ((imm >> 32) == 0) - { - /* lis reg, imm[31:16] - ori reg, reg, imm[15:0] - rldicl reg, reg, 0, 32 */ - p += GEN_LIS (p, reg, (imm >> 16) & 0xffff); - if ((imm & 0xffff) != 0) - p += GEN_ORI (p, reg, reg, imm & 0xffff); - /* Clear upper 32-bit if sign-bit is set. */ - if (imm & (1u << 31) && is_64) - p += GEN_RLDICL (p, reg, reg, 0, 32); - } - else - { - gdb_assert (is_64); - /* lis reg, <imm[63:48]> - ori reg, reg, <imm[48:32]> - rldicr reg, reg, 32, 31 - oris reg, reg, <imm[31:16]> - ori reg, reg, <imm[15:0]> */ - p += GEN_LIS (p, reg, ((imm >> 48) & 0xffff)); - if (((imm >> 32) & 0xffff) != 0) - p += GEN_ORI (p, reg, reg, ((imm >> 32) & 0xffff)); - p += GEN_RLDICR (p, reg, reg, 32, 31); - if (((imm >> 16) & 0xffff) != 0) - p += GEN_ORIS (p, reg, reg, ((imm >> 16) & 0xffff)); - if ((imm & 0xffff) != 0) - p += GEN_ORI (p, reg, reg, (imm & 0xffff)); - } - - return p - buf; -} - -/* Generate a sequence for atomically exchange at location LOCK. - This code sequence clobbers r6, r7, r8. LOCK is the location for - the atomic-xchg, OLD_VALUE is expected old value stored in the - location, and R_NEW is a register for the new value. */ - -static int -gen_atomic_xchg (uint32_t *buf, CORE_ADDR lock, int old_value, int r_new, - int is_64) -{ - const int r_lock = 6; - const int r_old = 7; - const int r_tmp = 8; - uint32_t *p = buf; - - /* - 1: lwarx TMP, 0, LOCK - cmpwi TMP, OLD - bne 1b - stwcx. NEW, 0, LOCK - bne 1b */ - - p += gen_limm (p, r_lock, lock, is_64); - p += gen_limm (p, r_old, old_value, is_64); - - p += GEN_LWARX (p, r_tmp, 0, r_lock); - p += GEN_CMPW (p, r_tmp, r_old); - p += GEN_BNE (p, -8); - p += GEN_STWCX (p, r_new, 0, r_lock); - p += GEN_BNE (p, -16); - - return p - buf; -} - -/* Generate a sequence of instructions for calling a function - at address of FN. Return the number of bytes are written in BUF. */ - -static int -gen_call (uint32_t *buf, CORE_ADDR fn, int is_64, int is_opd) -{ - uint32_t *p = buf; - - /* Must be called by r12 for caller to calculate TOC address. */ - p += gen_limm (p, 12, fn, is_64); - if (is_opd) - { - p += GEN_LOAD (p, 11, 12, 16, is_64); - p += GEN_LOAD (p, 2, 12, 8, is_64); - p += GEN_LOAD (p, 12, 12, 0, is_64); - } - p += GEN_MTSPR (p, 12, 9); /* mtctr r12 */ - *p++ = 0x4e800421; /* bctrl */ - - return p - buf; -} - -/* Copy the instruction from OLDLOC to *TO, and update *TO to *TO + size - of instruction. This function is used to adjust pc-relative instructions - when copying. */ - -static void -ppc_relocate_instruction (CORE_ADDR *to, CORE_ADDR oldloc) -{ - uint32_t insn, op6; - long rel, newrel; - - read_inferior_memory (oldloc, (unsigned char *) &insn, 4); - op6 = PPC_OP6 (insn); - - if (op6 == 18 && (insn & 2) == 0) - { - /* branch && AA = 0 */ - rel = PPC_LI (insn); - newrel = (oldloc - *to) + rel; - - /* Out of range. Cannot relocate instruction. */ - if (newrel >= (1 << 25) || newrel < -(1 << 25)) - return; - - insn = (insn & ~0x3fffffc) | (newrel & 0x3fffffc); - } - else if (op6 == 16 && (insn & 2) == 0) - { - /* conditional branch && AA = 0 */ - - /* If the new relocation is too big for even a 26-bit unconditional - branch, there is nothing we can do. Just abort. - - Otherwise, if it can be fit in 16-bit conditional branch, just - copy the instruction and relocate the address. - - If the it's big for conditional-branch (16-bit), try to invert the - condition and jump with 26-bit branch. For example, - - beq .Lgoto - INSN1 - - => - - bne 1f (+8) - b .Lgoto - 1:INSN1 - - After this transform, we are actually jump from *TO+4 instead of *TO, - so check the relocation again because it will be 1-insn farther then - before if *TO is after OLDLOC. - - - For BDNZT (or so) is transformed from - - bdnzt eq, .Lgoto - INSN1 - - => - - bdz 1f (+12) - bf eq, 1f (+8) - b .Lgoto - 1:INSN1 - - See also "BO field encodings". */ - - rel = PPC_BD (insn); - newrel = (oldloc - *to) + rel; - - if (newrel < (1 << 15) && newrel >= -(1 << 15)) - insn = (insn & ~0xfffc) | (newrel & 0xfffc); - else if ((PPC_BO (insn) & 0x14) == 0x4 || (PPC_BO (insn) & 0x14) == 0x10) - { - newrel -= 4; - - /* Out of range. Cannot relocate instruction. */ - if (newrel >= (1 << 25) || newrel < -(1 << 25)) - return; - - if ((PPC_BO (insn) & 0x14) == 0x4) - insn ^= (1 << 24); - else if ((PPC_BO (insn) & 0x14) == 0x10) - insn ^= (1 << 22); - - /* Jump over the unconditional branch. */ - insn = (insn & ~0xfffc) | 0x8; - target_write_memory (*to, (unsigned char *) &insn, 4); - *to += 4; - - /* Build a unconditional branch and copy LK bit. */ - insn = (18 << 26) | (0x3fffffc & newrel) | (insn & 0x3); - target_write_memory (*to, (unsigned char *) &insn, 4); - *to += 4; - - return; - } - else if ((PPC_BO (insn) & 0x14) == 0) - { - uint32_t bdnz_insn = (16 << 26) | (0x10 << 21) | 12; - uint32_t bf_insn = (16 << 26) | (0x4 << 21) | 8; - - newrel -= 8; - - /* Out of range. Cannot relocate instruction. */ - if (newrel >= (1 << 25) || newrel < -(1 << 25)) - return; - - /* Copy BI field. */ - bf_insn |= (insn & 0x1f0000); - - /* Invert condition. */ - bdnz_insn |= (insn ^ (1 << 22)) & (1 << 22); - bf_insn |= (insn ^ (1 << 24)) & (1 << 24); - - target_write_memory (*to, (unsigned char *) &bdnz_insn, 4); - *to += 4; - target_write_memory (*to, (unsigned char *) &bf_insn, 4); - *to += 4; - - /* Build a unconditional branch and copy LK bit. */ - insn = (18 << 26) | (0x3fffffc & newrel) | (insn & 0x3); - target_write_memory (*to, (unsigned char *) &insn, 4); - *to += 4; - - return; - } - else /* (BO & 0x14) == 0x14, branch always. */ - { - /* Out of range. Cannot relocate instruction. */ - if (newrel >= (1 << 25) || newrel < -(1 << 25)) - return; - - /* Build a unconditional branch and copy LK bit. */ - insn = (18 << 26) | (0x3fffffc & newrel) | (insn & 0x3); - target_write_memory (*to, (unsigned char *) &insn, 4); - *to += 4; - - return; - } - } - - target_write_memory (*to, (unsigned char *) &insn, 4); - *to += 4; -} - -/* Implement install_fast_tracepoint_jump_pad of target_ops. - See target.h for details. */ - -static int -ppc_install_fast_tracepoint_jump_pad (CORE_ADDR tpoint, CORE_ADDR tpaddr, - CORE_ADDR collector, - CORE_ADDR lockaddr, - ULONGEST orig_size, - CORE_ADDR *jump_entry, - CORE_ADDR *trampoline, - ULONGEST *trampoline_size, - unsigned char *jjump_pad_insn, - ULONGEST *jjump_pad_insn_size, - CORE_ADDR *adjusted_insn_addr, - CORE_ADDR *adjusted_insn_addr_end, - char *err) -{ - uint32_t buf[256]; - uint32_t *p = buf; - int j, offset; - CORE_ADDR buildaddr = *jump_entry; - const CORE_ADDR entryaddr = *jump_entry; - int rsz, min_frame, frame_size, tp_reg; -#ifdef __powerpc64__ - struct regcache *regcache = get_thread_regcache (current_thread, 0); - int is_64 = register_size (regcache->tdesc, 0) == 8; - int is_opd = is_64 && !is_elfv2_inferior (); -#else - int is_64 = 0, is_opd = 0; -#endif - -#ifdef __powerpc64__ - if (is_64) - { - /* Minimum frame size is 32 bytes for ELFv2, and 112 bytes for ELFv1. */ - rsz = 8; - min_frame = 112; - frame_size = (40 * rsz) + min_frame; - tp_reg = 13; - } - else - { -#endif - rsz = 4; - min_frame = 16; - frame_size = (40 * rsz) + min_frame; - tp_reg = 2; -#ifdef __powerpc64__ - } -#endif - - /* Stack frame layout for this jump pad, - - High thread_area (r13/r2) | - tpoint - collecting_t obj - PC/<tpaddr> | +36 - CTR | +35 - LR | +34 - XER | +33 - CR | +32 - R31 | - R29 | - ... | - R1 | +1 - R0 - collected registers - ... | - ... | - Low Back-chain - - - - The code flow of this jump pad, - - 1. Adjust SP - 2. Save GPR and SPR - 3. Prepare argument - 4. Call gdb_collector - 5. Restore GPR and SPR - 6. Restore SP - 7. Build a jump for back to the program - 8. Copy/relocate original instruction - 9. Build a jump for replacing original instruction. */ - - /* Adjust stack pointer. */ - if (is_64) - p += GEN_STDU (p, 1, 1, -frame_size); /* stdu r1,-frame_size(r1) */ - else - p += GEN_STWU (p, 1, 1, -frame_size); /* stwu r1,-frame_size(r1) */ - - /* Store GPRs. Save R1 later, because it had just been modified, but - we want the original value. */ - for (j = 2; j < 32; j++) - p += GEN_STORE (p, j, 1, min_frame + j * rsz, is_64); - p += GEN_STORE (p, 0, 1, min_frame + 0 * rsz, is_64); - /* Set r0 to the original value of r1 before adjusting stack frame, - and then save it. */ - p += GEN_ADDI (p, 0, 1, frame_size); - p += GEN_STORE (p, 0, 1, min_frame + 1 * rsz, is_64); - - /* Save CR, XER, LR, and CTR. */ - p += GEN_MFCR (p, 3); /* mfcr r3 */ - p += GEN_MFSPR (p, 4, 1); /* mfxer r4 */ - p += GEN_MFSPR (p, 5, 8); /* mflr r5 */ - p += GEN_MFSPR (p, 6, 9); /* mfctr r6 */ - p += GEN_STORE (p, 3, 1, min_frame + 32 * rsz, is_64);/* std r3, 32(r1) */ - p += GEN_STORE (p, 4, 1, min_frame + 33 * rsz, is_64);/* std r4, 33(r1) */ - p += GEN_STORE (p, 5, 1, min_frame + 34 * rsz, is_64);/* std r5, 34(r1) */ - p += GEN_STORE (p, 6, 1, min_frame + 35 * rsz, is_64);/* std r6, 35(r1) */ - - /* Save PC<tpaddr> */ - p += gen_limm (p, 3, tpaddr, is_64); - p += GEN_STORE (p, 3, 1, min_frame + 36 * rsz, is_64); - - - /* Setup arguments to collector. */ - /* Set r4 to collected registers. */ - p += GEN_ADDI (p, 4, 1, min_frame); - /* Set r3 to TPOINT. */ - p += gen_limm (p, 3, tpoint, is_64); - - /* Prepare collecting_t object for lock. */ - p += GEN_STORE (p, 3, 1, min_frame + 37 * rsz, is_64); - p += GEN_STORE (p, tp_reg, 1, min_frame + 38 * rsz, is_64); - /* Set R5 to collecting object. */ - p += GEN_ADDI (p, 5, 1, 37 * rsz); - - p += GEN_LWSYNC (p); - p += gen_atomic_xchg (p, lockaddr, 0, 5, is_64); - p += GEN_LWSYNC (p); - - /* Call to collector. */ - p += gen_call (p, collector, is_64, is_opd); - - /* Simply write 0 to release the lock. */ - p += gen_limm (p, 3, lockaddr, is_64); - p += gen_limm (p, 4, 0, is_64); - p += GEN_LWSYNC (p); - p += GEN_STORE (p, 4, 3, 0, is_64); - - /* Restore stack and registers. */ - p += GEN_LOAD (p, 3, 1, min_frame + 32 * rsz, is_64); /* ld r3, 32(r1) */ - p += GEN_LOAD (p, 4, 1, min_frame + 33 * rsz, is_64); /* ld r4, 33(r1) */ - p += GEN_LOAD (p, 5, 1, min_frame + 34 * rsz, is_64); /* ld r5, 34(r1) */ - p += GEN_LOAD (p, 6, 1, min_frame + 35 * rsz, is_64); /* ld r6, 35(r1) */ - p += GEN_MTCR (p, 3); /* mtcr r3 */ - p += GEN_MTSPR (p, 4, 1); /* mtxer r4 */ - p += GEN_MTSPR (p, 5, 8); /* mtlr r5 */ - p += GEN_MTSPR (p, 6, 9); /* mtctr r6 */ - - /* Restore GPRs. */ - for (j = 2; j < 32; j++) - p += GEN_LOAD (p, j, 1, min_frame + j * rsz, is_64); - p += GEN_LOAD (p, 0, 1, min_frame + 0 * rsz, is_64); - /* Restore SP. */ - p += GEN_ADDI (p, 1, 1, frame_size); - - /* Flush instructions to inferior memory. */ - target_write_memory (buildaddr, (unsigned char *) buf, (p - buf) * 4); - - /* Now, insert the original instruction to execute in the jump pad. */ - *adjusted_insn_addr = buildaddr + (p - buf) * 4; - *adjusted_insn_addr_end = *adjusted_insn_addr; - ppc_relocate_instruction (adjusted_insn_addr_end, tpaddr); - - /* Verify the relocation size. If should be 4 for normal copy, - 8 or 12 for some conditional branch. */ - if ((*adjusted_insn_addr_end - *adjusted_insn_addr == 0) - || (*adjusted_insn_addr_end - *adjusted_insn_addr > 12)) - { - sprintf (err, "E.Unexpected instruction length = %d" - "when relocate instruction.", - (int) (*adjusted_insn_addr_end - *adjusted_insn_addr)); - return 1; - } - - buildaddr = *adjusted_insn_addr_end; - p = buf; - /* Finally, write a jump back to the program. */ - offset = (tpaddr + 4) - buildaddr; - if (offset >= (1 << 25) || offset < -(1 << 25)) - { - sprintf (err, "E.Jump back from jump pad too far from tracepoint " - "(offset 0x%x > 26-bit).", offset); - return 1; - } - /* b <tpaddr+4> */ - p += GEN_B (p, offset); - target_write_memory (buildaddr, (unsigned char *) buf, (p - buf) * 4); - *jump_entry = buildaddr + (p - buf) * 4; - - /* The jump pad is now built. Wire in a jump to our jump pad. This - is always done last (by our caller actually), so that we can - install fast tracepoints with threads running. This relies on - the agent's atomic write support. */ - offset = entryaddr - tpaddr; - if (offset >= (1 << 25) || offset < -(1 << 25)) - { - sprintf (err, "E.Jump back from jump pad too far from tracepoint " - "(offset 0x%x > 26-bit).", offset); - return 1; - } - /* b <jentry> */ - GEN_B ((uint32_t *) jjump_pad_insn, offset); - *jjump_pad_insn_size = 4; - - return 0; -} - -/* Returns the minimum instruction length for installing a tracepoint. */ - -static int -ppc_get_min_fast_tracepoint_insn_len (void) -{ - return 4; -} - -/* Emits a given buffer into the target at current_insn_ptr. Length - is in units of 32-bit words. */ - -static void -emit_insns (uint32_t *buf, int n) -{ - n = n * sizeof (uint32_t); - target_write_memory (current_insn_ptr, (unsigned char *) buf, n); - current_insn_ptr += n; -} - -#define __EMIT_ASM(NAME, INSNS) \ - do \ - { \ - extern uint32_t start_bcax_ ## NAME []; \ - extern uint32_t end_bcax_ ## NAME []; \ - emit_insns (start_bcax_ ## NAME, \ - end_bcax_ ## NAME - start_bcax_ ## NAME); \ - __asm__ (".section .text.__ppcbcax\n\t" \ - "start_bcax_" #NAME ":\n\t" \ - INSNS "\n\t" \ - "end_bcax_" #NAME ":\n\t" \ - ".previous\n\t"); \ - } while (0) - -#define _EMIT_ASM(NAME, INSNS) __EMIT_ASM (NAME, INSNS) -#define EMIT_ASM(INSNS) _EMIT_ASM (__LINE__, INSNS) - -/* - - Bytecode execution stack frame - 32-bit - - | LR save area (SP + 4) - SP' -> +- Back chain (SP + 0) - | Save r31 for access saved arguments - | Save r30 for bytecode stack pointer - | Save r4 for incoming argument *value - | Save r3 for incoming argument regs - r30 -> +- Bytecode execution stack - | - | 64-byte (8 doublewords) at initial. - | Expand stack as needed. - | - +- - | Some padding for minimum stack frame and 16-byte alignment. - | 16 bytes. - SP +- Back-chain (SP') - - initial frame size - = 16 + (4 * 4) + 64 - = 96 - - r30 is the stack-pointer for bytecode machine. - It should point to next-empty, so we can use LDU for pop. - r3 is used for cache of the high part of TOP value. - It was the first argument, pointer to regs. - r4 is used for cache of the low part of TOP value. - It was the second argument, pointer to the result. - We should set *result = TOP after leaving this function. - - Note: - * To restore stack at epilogue - => sp = r31 - * To check stack is big enough for bytecode execution. - => r30 - 8 > SP + 8 - * To return execution result. - => 0(r4) = TOP - - */ - -/* Regardless of endian, register 3 is always high part, 4 is low part. - These defines are used when the register pair is stored/loaded. - Likewise, to simplify code, have a similiar define for 5:6. */ - -#if __BYTE_ORDER == __LITTLE_ENDIAN -#define TOP_FIRST "4" -#define TOP_SECOND "3" -#define TMP_FIRST "6" -#define TMP_SECOND "5" -#else -#define TOP_FIRST "3" -#define TOP_SECOND "4" -#define TMP_FIRST "5" -#define TMP_SECOND "6" -#endif - -/* Emit prologue in inferior memory. See above comments. */ - -static void -ppc_emit_prologue (void) -{ - EMIT_ASM (/* Save return address. */ - "mflr 0 \n" - "stw 0, 4(1) \n" - /* Adjust SP. 96 is the initial frame size. */ - "stwu 1, -96(1) \n" - /* Save r30 and incoming arguments. */ - "stw 31, 96-4(1) \n" - "stw 30, 96-8(1) \n" - "stw 4, 96-12(1) \n" - "stw 3, 96-16(1) \n" - /* Point r31 to original r1 for access arguments. */ - "addi 31, 1, 96 \n" - /* Set r30 to pointing stack-top. */ - "addi 30, 1, 64 \n" - /* Initial r3/TOP to 0. */ - "li 3, 0 \n" - "li 4, 0 \n"); -} - -/* Emit epilogue in inferior memory. See above comments. */ - -static void -ppc_emit_epilogue (void) -{ - EMIT_ASM (/* *result = TOP */ - "lwz 5, -12(31) \n" - "stw " TOP_FIRST ", 0(5) \n" - "stw " TOP_SECOND ", 4(5) \n" - /* Restore registers. */ - "lwz 31, -4(31) \n" - "lwz 30, -8(31) \n" - /* Restore SP. */ - "lwz 1, 0(1) \n" - /* Restore LR. */ - "lwz 0, 4(1) \n" - /* Return 0 for no-error. */ - "li 3, 0 \n" - "mtlr 0 \n" - "blr \n"); -} - -/* TOP = stack[--sp] + TOP */ - -static void -ppc_emit_add (void) -{ - EMIT_ASM ("lwzu " TMP_FIRST ", 8(30) \n" - "lwz " TMP_SECOND ", 4(30)\n" - "addc 4, 6, 4 \n" - "adde 3, 5, 3 \n"); -} - -/* TOP = stack[--sp] - TOP */ - -static void -ppc_emit_sub (void) -{ - EMIT_ASM ("lwzu " TMP_FIRST ", 8(30) \n" - "lwz " TMP_SECOND ", 4(30) \n" - "subfc 4, 4, 6 \n" - "subfe 3, 3, 5 \n"); -} - -/* TOP = stack[--sp] * TOP */ - -static void -ppc_emit_mul (void) -{ - EMIT_ASM ("lwzu " TMP_FIRST ", 8(30) \n" - "lwz " TMP_SECOND ", 4(30) \n" - "mulhwu 7, 6, 4 \n" - "mullw 3, 6, 3 \n" - "mullw 5, 4, 5 \n" - "mullw 4, 6, 4 \n" - "add 3, 5, 3 \n" - "add 3, 7, 3 \n"); -} - -/* TOP = stack[--sp] << TOP */ - -static void -ppc_emit_lsh (void) -{ - EMIT_ASM ("lwzu " TMP_FIRST ", 8(30) \n" - "lwz " TMP_SECOND ", 4(30) \n" - "subfic 3, 4, 32\n" /* r3 = 32 - TOP */ - "addi 7, 4, -32\n" /* r7 = TOP - 32 */ - "slw 5, 5, 4\n" /* Shift high part left */ - "slw 4, 6, 4\n" /* Shift low part left */ - "srw 3, 6, 3\n" /* Shift low to high if shift < 32 */ - "slw 7, 6, 7\n" /* Shift low to high if shift >= 32 */ - "or 3, 5, 3\n" - "or 3, 7, 3\n"); /* Assemble high part */ -} - -/* Top = stack[--sp] >> TOP - (Arithmetic shift right) */ - -static void -ppc_emit_rsh_signed (void) -{ - EMIT_ASM ("lwzu " TMP_FIRST ", 8(30) \n" - "lwz " TMP_SECOND ", 4(30) \n" - "addi 7, 4, -32\n" /* r7 = TOP - 32 */ - "sraw 3, 5, 4\n" /* Shift high part right */ - "cmpwi 7, 1\n" - "blt 0, 1f\n" /* If shift <= 32, goto 1: */ - "sraw 4, 5, 7\n" /* Shift high to low */ - "b 2f\n" - "1:\n" - "subfic 7, 4, 32\n" /* r7 = 32 - TOP */ - "srw 4, 6, 4\n" /* Shift low part right */ - "slw 5, 5, 7\n" /* Shift high to low */ - "or 4, 4, 5\n" /* Assemble low part */ - "2:\n"); -} - -/* Top = stack[--sp] >> TOP - (Logical shift right) */ - -static void -ppc_emit_rsh_unsigned (void) -{ - EMIT_ASM ("lwzu " TMP_FIRST ", 8(30) \n" - "lwz " TMP_SECOND ", 4(30) \n" - "subfic 3, 4, 32\n" /* r3 = 32 - TOP */ - "addi 7, 4, -32\n" /* r7 = TOP - 32 */ - "srw 6, 6, 4\n" /* Shift low part right */ - "slw 3, 5, 3\n" /* Shift high to low if shift < 32 */ - "srw 7, 5, 7\n" /* Shift high to low if shift >= 32 */ - "or 6, 6, 3\n" - "srw 3, 5, 4\n" /* Shift high part right */ - "or 4, 6, 7\n"); /* Assemble low part */ -} - -/* Emit code for signed-extension specified by ARG. */ - -static void -ppc_emit_ext (int arg) -{ - switch (arg) - { - case 8: - EMIT_ASM ("extsb 4, 4\n" - "srawi 3, 4, 31"); - break; - case 16: - EMIT_ASM ("extsh 4, 4\n" - "srawi 3, 4, 31"); - break; - case 32: - EMIT_ASM ("srawi 3, 4, 31"); - break; - default: - emit_error = 1; - } -} - -/* Emit code for zero-extension specified by ARG. */ - -static void -ppc_emit_zero_ext (int arg) -{ - switch (arg) - { - case 8: - EMIT_ASM ("clrlwi 4,4,24\n" - "li 3, 0\n"); - break; - case 16: - EMIT_ASM ("clrlwi 4,4,16\n" - "li 3, 0\n"); - break; - case 32: - EMIT_ASM ("li 3, 0"); - break; - default: - emit_error = 1; - } -} - -/* TOP = !TOP - i.e., TOP = (TOP == 0) ? 1 : 0; */ - -static void -ppc_emit_log_not (void) -{ - EMIT_ASM ("or 4, 3, 4 \n" - "cntlzw 4, 4 \n" - "srwi 4, 4, 5 \n" - "li 3, 0 \n"); -} - -/* TOP = stack[--sp] & TOP */ - -static void -ppc_emit_bit_and (void) -{ - EMIT_ASM ("lwzu " TMP_FIRST ", 8(30) \n" - "lwz " TMP_SECOND ", 4(30) \n" - "and 4, 6, 4 \n" - "and 3, 5, 3 \n"); -} - -/* TOP = stack[--sp] | TOP */ - -static void -ppc_emit_bit_or (void) -{ - EMIT_ASM ("lwzu " TMP_FIRST ", 8(30) \n" - "lwz " TMP_SECOND ", 4(30) \n" - "or 4, 6, 4 \n" - "or 3, 5, 3 \n"); -} - -/* TOP = stack[--sp] ^ TOP */ - -static void -ppc_emit_bit_xor (void) -{ - EMIT_ASM ("lwzu " TMP_FIRST ", 8(30) \n" - "lwz " TMP_SECOND ", 4(30) \n" - "xor 4, 6, 4 \n" - "xor 3, 5, 3 \n"); -} - -/* TOP = ~TOP - i.e., TOP = ~(TOP | TOP) */ - -static void -ppc_emit_bit_not (void) -{ - EMIT_ASM ("nor 3, 3, 3 \n" - "nor 4, 4, 4 \n"); -} - -/* TOP = stack[--sp] == TOP */ - -static void -ppc_emit_equal (void) -{ - EMIT_ASM ("lwzu " TMP_FIRST ", 8(30) \n" - "lwz " TMP_SECOND ", 4(30) \n" - "xor 4, 6, 4 \n" - "xor 3, 5, 3 \n" - "or 4, 3, 4 \n" - "cntlzw 4, 4 \n" - "srwi 4, 4, 5 \n" - "li 3, 0 \n"); -} - -/* TOP = stack[--sp] < TOP - (Signed comparison) */ - -static void -ppc_emit_less_signed (void) -{ - EMIT_ASM ("lwzu " TMP_FIRST ", 8(30) \n" - "lwz " TMP_SECOND ", 4(30) \n" - "cmplw 6, 6, 4 \n" - "cmpw 7, 5, 3 \n" - /* CR6 bit 0 = low less and high equal */ - "crand 6*4+0, 6*4+0, 7*4+2\n" - /* CR7 bit 0 = (low less and high equal) or high less */ - "cror 7*4+0, 7*4+0, 6*4+0\n" - "mfcr 4 \n" - "rlwinm 4, 4, 29, 31, 31 \n" - "li 3, 0 \n"); -} - -/* TOP = stack[--sp] < TOP - (Unsigned comparison) */ - -static void -ppc_emit_less_unsigned (void) -{ - EMIT_ASM ("lwzu " TMP_FIRST ", 8(30) \n" - "lwz " TMP_SECOND ", 4(30) \n" - "cmplw 6, 6, 4 \n" - "cmplw 7, 5, 3 \n" - /* CR6 bit 0 = low less and high equal */ - "crand 6*4+0, 6*4+0, 7*4+2\n" - /* CR7 bit 0 = (low less and high equal) or high less */ - "cror 7*4+0, 7*4+0, 6*4+0\n" - "mfcr 4 \n" - "rlwinm 4, 4, 29, 31, 31 \n" - "li 3, 0 \n"); -} - -/* Access the memory address in TOP in size of SIZE. - Zero-extend the read value. */ - -static void -ppc_emit_ref (int size) -{ - switch (size) - { - case 1: - EMIT_ASM ("lbz 4, 0(4)\n" - "li 3, 0"); - break; - case 2: - EMIT_ASM ("lhz 4, 0(4)\n" - "li 3, 0"); - break; - case 4: - EMIT_ASM ("lwz 4, 0(4)\n" - "li 3, 0"); - break; - case 8: - if (__BYTE_ORDER == __LITTLE_ENDIAN) - EMIT_ASM ("lwz 3, 4(4)\n" - "lwz 4, 0(4)"); - else - EMIT_ASM ("lwz 3, 0(4)\n" - "lwz 4, 4(4)"); - break; - } -} - -/* TOP = NUM */ - -static void -ppc_emit_const (LONGEST num) -{ - uint32_t buf[10]; - uint32_t *p = buf; - - p += gen_limm (p, 3, num >> 32 & 0xffffffff, 0); - p += gen_limm (p, 4, num & 0xffffffff, 0); - - emit_insns (buf, p - buf); - gdb_assert ((p - buf) <= (sizeof (buf) / sizeof (*buf))); -} - -/* Set TOP to the value of register REG by calling get_raw_reg function - with two argument, collected buffer and register number. */ - -static void -ppc_emit_reg (int reg) -{ - uint32_t buf[13]; - uint32_t *p = buf; - - /* fctx->regs is passed in r3 and then saved in -16(31). */ - p += GEN_LWZ (p, 3, 31, -16); - p += GEN_LI (p, 4, reg); /* li r4, reg */ - p += gen_call (p, get_raw_reg_func_addr (), 0, 0); - - emit_insns (buf, p - buf); - gdb_assert ((p - buf) <= (sizeof (buf) / sizeof (*buf))); - - if (__BYTE_ORDER == __LITTLE_ENDIAN) - { - EMIT_ASM ("mr 5, 4\n" - "mr 4, 3\n" - "mr 3, 5\n"); - } -} - -/* TOP = stack[--sp] */ - -static void -ppc_emit_pop (void) -{ - EMIT_ASM ("lwzu " TOP_FIRST ", 8(30) \n" - "lwz " TOP_SECOND ", 4(30) \n"); -} - -/* stack[sp++] = TOP - - Because we may use up bytecode stack, expand 8 doublewords more - if needed. */ - -static void -ppc_emit_stack_flush (void) -{ - /* Make sure bytecode stack is big enough before push. - Otherwise, expand 64-byte more. */ - - EMIT_ASM (" stw " TOP_FIRST ", 0(30) \n" - " stw " TOP_SECOND ", 4(30)\n" - " addi 5, 30, -(8 + 8) \n" - " cmpw 7, 5, 1 \n" - " bgt 7, 1f \n" - " stwu 31, -64(1) \n" - "1:addi 30, 30, -8 \n"); -} - -/* Swap TOP and stack[sp-1] */ - -static void -ppc_emit_swap (void) -{ - EMIT_ASM ("lwz " TMP_FIRST ", 8(30) \n" - "lwz " TMP_SECOND ", 12(30) \n" - "stw " TOP_FIRST ", 8(30) \n" - "stw " TOP_SECOND ", 12(30) \n" - "mr 3, 5 \n" - "mr 4, 6 \n"); -} - -/* Discard N elements in the stack. Also used for ppc64. */ - -static void -ppc_emit_stack_adjust (int n) -{ - uint32_t buf[6]; - uint32_t *p = buf; - - n = n << 3; - if ((n >> 15) != 0) - { - emit_error = 1; - return; - } - - p += GEN_ADDI (p, 30, 30, n); - - emit_insns (buf, p - buf); - gdb_assert ((p - buf) <= (sizeof (buf) / sizeof (*buf))); -} - -/* Call function FN. */ - -static void -ppc_emit_call (CORE_ADDR fn) -{ - uint32_t buf[11]; - uint32_t *p = buf; - - p += gen_call (p, fn, 0, 0); - - emit_insns (buf, p - buf); - gdb_assert ((p - buf) <= (sizeof (buf) / sizeof (*buf))); -} - -/* FN's prototype is `LONGEST(*fn)(int)'. - TOP = fn (arg1) - */ - -static void -ppc_emit_int_call_1 (CORE_ADDR fn, int arg1) -{ - uint32_t buf[15]; - uint32_t *p = buf; - - /* Setup argument. arg1 is a 16-bit value. */ - p += gen_limm (p, 3, (uint32_t) arg1, 0); - p += gen_call (p, fn, 0, 0); - - emit_insns (buf, p - buf); - gdb_assert ((p - buf) <= (sizeof (buf) / sizeof (*buf))); - - if (__BYTE_ORDER == __LITTLE_ENDIAN) - { - EMIT_ASM ("mr 5, 4\n" - "mr 4, 3\n" - "mr 3, 5\n"); - } -} - -/* FN's prototype is `void(*fn)(int,LONGEST)'. - fn (arg1, TOP) - - TOP should be preserved/restored before/after the call. */ - -static void -ppc_emit_void_call_2 (CORE_ADDR fn, int arg1) -{ - uint32_t buf[21]; - uint32_t *p = buf; - - /* Save TOP. 0(30) is next-empty. */ - p += GEN_STW (p, 3, 30, 0); - p += GEN_STW (p, 4, 30, 4); - - /* Setup argument. arg1 is a 16-bit value. */ - if (__BYTE_ORDER == __LITTLE_ENDIAN) - { - p += GEN_MR (p, 5, 4); - p += GEN_MR (p, 6, 3); - } - else - { - p += GEN_MR (p, 5, 3); - p += GEN_MR (p, 6, 4); - } - p += gen_limm (p, 3, (uint32_t) arg1, 0); - p += gen_call (p, fn, 0, 0); - - /* Restore TOP */ - p += GEN_LWZ (p, 3, 30, 0); - p += GEN_LWZ (p, 4, 30, 4); - - emit_insns (buf, p - buf); - gdb_assert ((p - buf) <= (sizeof (buf) / sizeof (*buf))); -} - -/* Note in the following goto ops: - - When emitting goto, the target address is later relocated by - write_goto_address. OFFSET_P is the offset of the branch instruction - in the code sequence, and SIZE_P is how to relocate the instruction, - recognized by ppc_write_goto_address. In current implementation, - SIZE can be either 24 or 14 for branch of conditional-branch instruction. - */ - -/* If TOP is true, goto somewhere. Otherwise, just fall-through. */ - -static void -ppc_emit_if_goto (int *offset_p, int *size_p) -{ - EMIT_ASM ("or. 3, 3, 4 \n" - "lwzu " TOP_FIRST ", 8(30) \n" - "lwz " TOP_SECOND ", 4(30) \n" - "1:bne 0, 1b \n"); - - if (offset_p) - *offset_p = 12; - if (size_p) - *size_p = 14; -} - -/* Unconditional goto. Also used for ppc64. */ - -static void -ppc_emit_goto (int *offset_p, int *size_p) -{ - EMIT_ASM ("1:b 1b"); - - if (offset_p) - *offset_p = 0; - if (size_p) - *size_p = 24; -} - -/* Goto if stack[--sp] == TOP */ - -static void -ppc_emit_eq_goto (int *offset_p, int *size_p) -{ - EMIT_ASM ("lwzu " TMP_FIRST ", 8(30) \n" - "lwz " TMP_SECOND ", 4(30) \n" - "xor 4, 6, 4 \n" - "xor 3, 5, 3 \n" - "or. 3, 3, 4 \n" - "lwzu " TOP_FIRST ", 8(30) \n" - "lwz " TOP_SECOND ", 4(30) \n" - "1:beq 0, 1b \n"); - - if (offset_p) - *offset_p = 28; - if (size_p) - *size_p = 14; -} - -/* Goto if stack[--sp] != TOP */ - -static void -ppc_emit_ne_goto (int *offset_p, int *size_p) -{ - EMIT_ASM ("lwzu " TMP_FIRST ", 8(30) \n" - "lwz " TMP_SECOND ", 4(30) \n" - "xor 4, 6, 4 \n" - "xor 3, 5, 3 \n" - "or. 3, 3, 4 \n" - "lwzu " TOP_FIRST ", 8(30) \n" - "lwz " TOP_SECOND ", 4(30) \n" - "1:bne 0, 1b \n"); - - if (offset_p) - *offset_p = 28; - if (size_p) - *size_p = 14; -} - -/* Goto if stack[--sp] < TOP */ - -static void -ppc_emit_lt_goto (int *offset_p, int *size_p) -{ - EMIT_ASM ("lwzu " TMP_FIRST ", 8(30) \n" - "lwz " TMP_SECOND ", 4(30) \n" - "cmplw 6, 6, 4 \n" - "cmpw 7, 5, 3 \n" - /* CR6 bit 0 = low less and high equal */ - "crand 6*4+0, 6*4+0, 7*4+2\n" - /* CR7 bit 0 = (low less and high equal) or high less */ - "cror 7*4+0, 7*4+0, 6*4+0\n" - "lwzu " TOP_FIRST ", 8(30) \n" - "lwz " TOP_SECOND ", 4(30)\n" - "1:blt 7, 1b \n"); - - if (offset_p) - *offset_p = 32; - if (size_p) - *size_p = 14; -} - -/* Goto if stack[--sp] <= TOP */ - -static void -ppc_emit_le_goto (int *offset_p, int *size_p) -{ - EMIT_ASM ("lwzu " TMP_FIRST ", 8(30) \n" - "lwz " TMP_SECOND ", 4(30) \n" - "cmplw 6, 6, 4 \n" - "cmpw 7, 5, 3 \n" - /* CR6 bit 0 = low less/equal and high equal */ - "crandc 6*4+0, 7*4+2, 6*4+1\n" - /* CR7 bit 0 = (low less/eq and high equal) or high less */ - "cror 7*4+0, 7*4+0, 6*4+0\n" - "lwzu " TOP_FIRST ", 8(30) \n" - "lwz " TOP_SECOND ", 4(30)\n" - "1:blt 7, 1b \n"); - - if (offset_p) - *offset_p = 32; - if (size_p) - *size_p = 14; -} - -/* Goto if stack[--sp] > TOP */ - -static void -ppc_emit_gt_goto (int *offset_p, int *size_p) -{ - EMIT_ASM ("lwzu " TMP_FIRST ", 8(30) \n" - "lwz " TMP_SECOND ", 4(30) \n" - "cmplw 6, 6, 4 \n" - "cmpw 7, 5, 3 \n" - /* CR6 bit 0 = low greater and high equal */ - "crand 6*4+0, 6*4+1, 7*4+2\n" - /* CR7 bit 0 = (low greater and high equal) or high greater */ - "cror 7*4+0, 7*4+1, 6*4+0\n" - "lwzu " TOP_FIRST ", 8(30) \n" - "lwz " TOP_SECOND ", 4(30)\n" - "1:blt 7, 1b \n"); - - if (offset_p) - *offset_p = 32; - if (size_p) - *size_p = 14; -} - -/* Goto if stack[--sp] >= TOP */ - -static void -ppc_emit_ge_goto (int *offset_p, int *size_p) -{ - EMIT_ASM ("lwzu " TMP_FIRST ", 8(30) \n" - "lwz " TMP_SECOND ", 4(30) \n" - "cmplw 6, 6, 4 \n" - "cmpw 7, 5, 3 \n" - /* CR6 bit 0 = low ge and high equal */ - "crandc 6*4+0, 7*4+2, 6*4+0\n" - /* CR7 bit 0 = (low ge and high equal) or high greater */ - "cror 7*4+0, 7*4+1, 6*4+0\n" - "lwzu " TOP_FIRST ", 8(30)\n" - "lwz " TOP_SECOND ", 4(30)\n" - "1:blt 7, 1b \n"); - - if (offset_p) - *offset_p = 32; - if (size_p) - *size_p = 14; -} - -/* Relocate previous emitted branch instruction. FROM is the address - of the branch instruction, TO is the goto target address, and SIZE - if the value we set by *SIZE_P before. Currently, it is either - 24 or 14 of branch and conditional-branch instruction. - Also used for ppc64. */ - -static void -ppc_write_goto_address (CORE_ADDR from, CORE_ADDR to, int size) -{ - long rel = to - from; - uint32_t insn; - int opcd; - - read_inferior_memory (from, (unsigned char *) &insn, 4); - opcd = (insn >> 26) & 0x3f; - - switch (size) - { - case 14: - if (opcd != 16 - || (rel >= (1 << 15) || rel < -(1 << 15))) - emit_error = 1; - insn = (insn & ~0xfffc) | (rel & 0xfffc); - break; - case 24: - if (opcd != 18 - || (rel >= (1 << 25) || rel < -(1 << 25))) - emit_error = 1; - insn = (insn & ~0x3fffffc) | (rel & 0x3fffffc); - break; - default: - emit_error = 1; - } - - if (!emit_error) - target_write_memory (from, (unsigned char *) &insn, 4); -} - -/* Table of emit ops for 32-bit. */ - -static struct emit_ops ppc_emit_ops_impl = -{ - ppc_emit_prologue, - ppc_emit_epilogue, - ppc_emit_add, - ppc_emit_sub, - ppc_emit_mul, - ppc_emit_lsh, - ppc_emit_rsh_signed, - ppc_emit_rsh_unsigned, - ppc_emit_ext, - ppc_emit_log_not, - ppc_emit_bit_and, - ppc_emit_bit_or, - ppc_emit_bit_xor, - ppc_emit_bit_not, - ppc_emit_equal, - ppc_emit_less_signed, - ppc_emit_less_unsigned, - ppc_emit_ref, - ppc_emit_if_goto, - ppc_emit_goto, - ppc_write_goto_address, - ppc_emit_const, - ppc_emit_call, - ppc_emit_reg, - ppc_emit_pop, - ppc_emit_stack_flush, - ppc_emit_zero_ext, - ppc_emit_swap, - ppc_emit_stack_adjust, - ppc_emit_int_call_1, - ppc_emit_void_call_2, - ppc_emit_eq_goto, - ppc_emit_ne_goto, - ppc_emit_lt_goto, - ppc_emit_le_goto, - ppc_emit_gt_goto, - ppc_emit_ge_goto -}; - -#ifdef __powerpc64__ - -/* - - Bytecode execution stack frame - 64-bit - - | LR save area (SP + 16) - | CR save area (SP + 8) - SP' -> +- Back chain (SP + 0) - | Save r31 for access saved arguments - | Save r30 for bytecode stack pointer - | Save r4 for incoming argument *value - | Save r3 for incoming argument regs - r30 -> +- Bytecode execution stack - | - | 64-byte (8 doublewords) at initial. - | Expand stack as needed. - | - +- - | Some padding for minimum stack frame. - | 112 for ELFv1. - SP +- Back-chain (SP') - - initial frame size - = 112 + (4 * 8) + 64 - = 208 - - r30 is the stack-pointer for bytecode machine. - It should point to next-empty, so we can use LDU for pop. - r3 is used for cache of TOP value. - It was the first argument, pointer to regs. - r4 is the second argument, pointer to the result. - We should set *result = TOP after leaving this function. - - Note: - * To restore stack at epilogue - => sp = r31 - * To check stack is big enough for bytecode execution. - => r30 - 8 > SP + 112 - * To return execution result. - => 0(r4) = TOP - - */ - -/* Emit prologue in inferior memory. See above comments. */ - -static void -ppc64v1_emit_prologue (void) -{ - /* On ELFv1, function pointers really point to function descriptor, - so emit one here. We don't care about contents of words 1 and 2, - so let them just overlap out code. */ - uint64_t opd = current_insn_ptr + 8; - uint32_t buf[2]; - - /* Mind the strict aliasing rules. */ - memcpy (buf, &opd, sizeof buf); - emit_insns(buf, 2); - EMIT_ASM (/* Save return address. */ - "mflr 0 \n" - "std 0, 16(1) \n" - /* Save r30 and incoming arguments. */ - "std 31, -8(1) \n" - "std 30, -16(1) \n" - "std 4, -24(1) \n" - "std 3, -32(1) \n" - /* Point r31 to current r1 for access arguments. */ - "mr 31, 1 \n" - /* Adjust SP. 208 is the initial frame size. */ - "stdu 1, -208(1) \n" - /* Set r30 to pointing stack-top. */ - "addi 30, 1, 168 \n" - /* Initial r3/TOP to 0. */ - "li 3, 0 \n"); -} - -/* Emit prologue in inferior memory. See above comments. */ - -static void -ppc64v2_emit_prologue (void) -{ - EMIT_ASM (/* Save return address. */ - "mflr 0 \n" - "std 0, 16(1) \n" - /* Save r30 and incoming arguments. */ - "std 31, -8(1) \n" - "std 30, -16(1) \n" - "std 4, -24(1) \n" - "std 3, -32(1) \n" - /* Point r31 to current r1 for access arguments. */ - "mr 31, 1 \n" - /* Adjust SP. 208 is the initial frame size. */ - "stdu 1, -208(1) \n" - /* Set r30 to pointing stack-top. */ - "addi 30, 1, 168 \n" - /* Initial r3/TOP to 0. */ - "li 3, 0 \n"); -} - -/* Emit epilogue in inferior memory. See above comments. */ - -static void -ppc64_emit_epilogue (void) -{ - EMIT_ASM (/* Restore SP. */ - "ld 1, 0(1) \n" - /* *result = TOP */ - "ld 4, -24(1) \n" - "std 3, 0(4) \n" - /* Restore registers. */ - "ld 31, -8(1) \n" - "ld 30, -16(1) \n" - /* Restore LR. */ - "ld 0, 16(1) \n" - /* Return 0 for no-error. */ - "li 3, 0 \n" - "mtlr 0 \n" - "blr \n"); -} - -/* TOP = stack[--sp] + TOP */ - -static void -ppc64_emit_add (void) -{ - EMIT_ASM ("ldu 4, 8(30) \n" - "add 3, 4, 3 \n"); -} - -/* TOP = stack[--sp] - TOP */ - -static void -ppc64_emit_sub (void) -{ - EMIT_ASM ("ldu 4, 8(30) \n" - "sub 3, 4, 3 \n"); -} - -/* TOP = stack[--sp] * TOP */ - -static void -ppc64_emit_mul (void) -{ - EMIT_ASM ("ldu 4, 8(30) \n" - "mulld 3, 4, 3 \n"); -} - -/* TOP = stack[--sp] << TOP */ - -static void -ppc64_emit_lsh (void) -{ - EMIT_ASM ("ldu 4, 8(30) \n" - "sld 3, 4, 3 \n"); -} - -/* Top = stack[--sp] >> TOP - (Arithmetic shift right) */ - -static void -ppc64_emit_rsh_signed (void) -{ - EMIT_ASM ("ldu 4, 8(30) \n" - "srad 3, 4, 3 \n"); -} - -/* Top = stack[--sp] >> TOP - (Logical shift right) */ - -static void -ppc64_emit_rsh_unsigned (void) -{ - EMIT_ASM ("ldu 4, 8(30) \n" - "srd 3, 4, 3 \n"); -} - -/* Emit code for signed-extension specified by ARG. */ - -static void -ppc64_emit_ext (int arg) -{ - switch (arg) - { - case 8: - EMIT_ASM ("extsb 3, 3"); - break; - case 16: - EMIT_ASM ("extsh 3, 3"); - break; - case 32: - EMIT_ASM ("extsw 3, 3"); - break; - default: - emit_error = 1; - } -} - -/* Emit code for zero-extension specified by ARG. */ - -static void -ppc64_emit_zero_ext (int arg) -{ - switch (arg) - { - case 8: - EMIT_ASM ("rldicl 3,3,0,56"); - break; - case 16: - EMIT_ASM ("rldicl 3,3,0,48"); - break; - case 32: - EMIT_ASM ("rldicl 3,3,0,32"); - break; - default: - emit_error = 1; - } -} - -/* TOP = !TOP - i.e., TOP = (TOP == 0) ? 1 : 0; */ - -static void -ppc64_emit_log_not (void) -{ - EMIT_ASM ("cntlzd 3, 3 \n" - "srdi 3, 3, 6 \n"); -} - -/* TOP = stack[--sp] & TOP */ - -static void -ppc64_emit_bit_and (void) -{ - EMIT_ASM ("ldu 4, 8(30) \n" - "and 3, 4, 3 \n"); -} - -/* TOP = stack[--sp] | TOP */ - -static void -ppc64_emit_bit_or (void) -{ - EMIT_ASM ("ldu 4, 8(30) \n" - "or 3, 4, 3 \n"); -} - -/* TOP = stack[--sp] ^ TOP */ - -static void -ppc64_emit_bit_xor (void) -{ - EMIT_ASM ("ldu 4, 8(30) \n" - "xor 3, 4, 3 \n"); -} - -/* TOP = ~TOP - i.e., TOP = ~(TOP | TOP) */ - -static void -ppc64_emit_bit_not (void) -{ - EMIT_ASM ("nor 3, 3, 3 \n"); -} - -/* TOP = stack[--sp] == TOP */ - -static void -ppc64_emit_equal (void) -{ - EMIT_ASM ("ldu 4, 8(30) \n" - "xor 3, 3, 4 \n" - "cntlzd 3, 3 \n" - "srdi 3, 3, 6 \n"); -} - -/* TOP = stack[--sp] < TOP - (Signed comparison) */ - -static void -ppc64_emit_less_signed (void) -{ - EMIT_ASM ("ldu 4, 8(30) \n" - "cmpd 7, 4, 3 \n" - "mfcr 3 \n" - "rlwinm 3, 3, 29, 31, 31 \n"); -} - -/* TOP = stack[--sp] < TOP - (Unsigned comparison) */ - -static void -ppc64_emit_less_unsigned (void) -{ - EMIT_ASM ("ldu 4, 8(30) \n" - "cmpld 7, 4, 3 \n" - "mfcr 3 \n" - "rlwinm 3, 3, 29, 31, 31 \n"); -} - -/* Access the memory address in TOP in size of SIZE. - Zero-extend the read value. */ - -static void -ppc64_emit_ref (int size) -{ - switch (size) - { - case 1: - EMIT_ASM ("lbz 3, 0(3)"); - break; - case 2: - EMIT_ASM ("lhz 3, 0(3)"); - break; - case 4: - EMIT_ASM ("lwz 3, 0(3)"); - break; - case 8: - EMIT_ASM ("ld 3, 0(3)"); - break; - } -} - -/* TOP = NUM */ - -static void -ppc64_emit_const (LONGEST num) -{ - uint32_t buf[5]; - uint32_t *p = buf; - - p += gen_limm (p, 3, num, 1); - - emit_insns (buf, p - buf); - gdb_assert ((p - buf) <= (sizeof (buf) / sizeof (*buf))); -} - -/* Set TOP to the value of register REG by calling get_raw_reg function - with two argument, collected buffer and register number. */ - -static void -ppc64v1_emit_reg (int reg) -{ - uint32_t buf[15]; - uint32_t *p = buf; - - /* fctx->regs is passed in r3 and then saved in 176(1). */ - p += GEN_LD (p, 3, 31, -32); - p += GEN_LI (p, 4, reg); - p += GEN_STD (p, 2, 1, 40); /* Save TOC. */ - p += gen_call (p, get_raw_reg_func_addr (), 1, 1); - p += GEN_LD (p, 2, 1, 40); /* Restore TOC. */ - - emit_insns (buf, p - buf); - gdb_assert ((p - buf) <= (sizeof (buf) / sizeof (*buf))); -} - -/* Likewise, for ELFv2. */ - -static void -ppc64v2_emit_reg (int reg) -{ - uint32_t buf[12]; - uint32_t *p = buf; - - /* fctx->regs is passed in r3 and then saved in 176(1). */ - p += GEN_LD (p, 3, 31, -32); - p += GEN_LI (p, 4, reg); - p += GEN_STD (p, 2, 1, 24); /* Save TOC. */ - p += gen_call (p, get_raw_reg_func_addr (), 1, 0); - p += GEN_LD (p, 2, 1, 24); /* Restore TOC. */ - - emit_insns (buf, p - buf); - gdb_assert ((p - buf) <= (sizeof (buf) / sizeof (*buf))); -} - -/* TOP = stack[--sp] */ - -static void -ppc64_emit_pop (void) -{ - EMIT_ASM ("ldu 3, 8(30)"); -} - -/* stack[sp++] = TOP - - Because we may use up bytecode stack, expand 8 doublewords more - if needed. */ - -static void -ppc64_emit_stack_flush (void) -{ - /* Make sure bytecode stack is big enough before push. - Otherwise, expand 64-byte more. */ - - EMIT_ASM (" std 3, 0(30) \n" - " addi 4, 30, -(112 + 8) \n" - " cmpd 7, 4, 1 \n" - " bgt 7, 1f \n" - " stdu 31, -64(1) \n" - "1:addi 30, 30, -8 \n"); -} - -/* Swap TOP and stack[sp-1] */ - -static void -ppc64_emit_swap (void) -{ - EMIT_ASM ("ld 4, 8(30) \n" - "std 3, 8(30) \n" - "mr 3, 4 \n"); -} - -/* Call function FN - ELFv1. */ - -static void -ppc64v1_emit_call (CORE_ADDR fn) -{ - uint32_t buf[13]; - uint32_t *p = buf; - - p += GEN_STD (p, 2, 1, 40); /* Save TOC. */ - p += gen_call (p, fn, 1, 1); - p += GEN_LD (p, 2, 1, 40); /* Restore TOC. */ - - emit_insns (buf, p - buf); - gdb_assert ((p - buf) <= (sizeof (buf) / sizeof (*buf))); -} - -/* Call function FN - ELFv2. */ - -static void -ppc64v2_emit_call (CORE_ADDR fn) -{ - uint32_t buf[10]; - uint32_t *p = buf; - - p += GEN_STD (p, 2, 1, 24); /* Save TOC. */ - p += gen_call (p, fn, 1, 0); - p += GEN_LD (p, 2, 1, 24); /* Restore TOC. */ - - emit_insns (buf, p - buf); - gdb_assert ((p - buf) <= (sizeof (buf) / sizeof (*buf))); -} - -/* FN's prototype is `LONGEST(*fn)(int)'. - TOP = fn (arg1) - */ - -static void -ppc64v1_emit_int_call_1 (CORE_ADDR fn, int arg1) -{ - uint32_t buf[13]; - uint32_t *p = buf; - - /* Setup argument. arg1 is a 16-bit value. */ - p += gen_limm (p, 3, arg1, 1); - p += GEN_STD (p, 2, 1, 40); /* Save TOC. */ - p += gen_call (p, fn, 1, 1); - p += GEN_LD (p, 2, 1, 40); /* Restore TOC. */ - - emit_insns (buf, p - buf); - gdb_assert ((p - buf) <= (sizeof (buf) / sizeof (*buf))); -} - -/* Likewise for ELFv2. */ - -static void -ppc64v2_emit_int_call_1 (CORE_ADDR fn, int arg1) -{ - uint32_t buf[10]; - uint32_t *p = buf; - - /* Setup argument. arg1 is a 16-bit value. */ - p += gen_limm (p, 3, arg1, 1); - p += GEN_STD (p, 2, 1, 24); /* Save TOC. */ - p += gen_call (p, fn, 1, 0); - p += GEN_LD (p, 2, 1, 24); /* Restore TOC. */ - - emit_insns (buf, p - buf); - gdb_assert ((p - buf) <= (sizeof (buf) / sizeof (*buf))); -} - -/* FN's prototype is `void(*fn)(int,LONGEST)'. - fn (arg1, TOP) - - TOP should be preserved/restored before/after the call. */ - -static void -ppc64v1_emit_void_call_2 (CORE_ADDR fn, int arg1) -{ - uint32_t buf[17]; - uint32_t *p = buf; - - /* Save TOP. 0(30) is next-empty. */ - p += GEN_STD (p, 3, 30, 0); - - /* Setup argument. arg1 is a 16-bit value. */ - p += GEN_MR (p, 4, 3); /* mr r4, r3 */ - p += gen_limm (p, 3, arg1, 1); - p += GEN_STD (p, 2, 1, 40); /* Save TOC. */ - p += gen_call (p, fn, 1, 1); - p += GEN_LD (p, 2, 1, 40); /* Restore TOC. */ - - /* Restore TOP */ - p += GEN_LD (p, 3, 30, 0); - - emit_insns (buf, p - buf); - gdb_assert ((p - buf) <= (sizeof (buf) / sizeof (*buf))); -} - -/* Likewise for ELFv2. */ - -static void -ppc64v2_emit_void_call_2 (CORE_ADDR fn, int arg1) -{ - uint32_t buf[14]; - uint32_t *p = buf; - - /* Save TOP. 0(30) is next-empty. */ - p += GEN_STD (p, 3, 30, 0); - - /* Setup argument. arg1 is a 16-bit value. */ - p += GEN_MR (p, 4, 3); /* mr r4, r3 */ - p += gen_limm (p, 3, arg1, 1); - p += GEN_STD (p, 2, 1, 24); /* Save TOC. */ - p += gen_call (p, fn, 1, 0); - p += GEN_LD (p, 2, 1, 24); /* Restore TOC. */ - - /* Restore TOP */ - p += GEN_LD (p, 3, 30, 0); - - emit_insns (buf, p - buf); - gdb_assert ((p - buf) <= (sizeof (buf) / sizeof (*buf))); -} - -/* If TOP is true, goto somewhere. Otherwise, just fall-through. */ - -static void -ppc64_emit_if_goto (int *offset_p, int *size_p) -{ - EMIT_ASM ("cmpdi 7, 3, 0 \n" - "ldu 3, 8(30) \n" - "1:bne 7, 1b \n"); - - if (offset_p) - *offset_p = 8; - if (size_p) - *size_p = 14; -} - -/* Goto if stack[--sp] == TOP */ - -static void -ppc64_emit_eq_goto (int *offset_p, int *size_p) -{ - EMIT_ASM ("ldu 4, 8(30) \n" - "cmpd 7, 4, 3 \n" - "ldu 3, 8(30) \n" - "1:beq 7, 1b \n"); - - if (offset_p) - *offset_p = 12; - if (size_p) - *size_p = 14; -} - -/* Goto if stack[--sp] != TOP */ - -static void -ppc64_emit_ne_goto (int *offset_p, int *size_p) -{ - EMIT_ASM ("ldu 4, 8(30) \n" - "cmpd 7, 4, 3 \n" - "ldu 3, 8(30) \n" - "1:bne 7, 1b \n"); - - if (offset_p) - *offset_p = 12; - if (size_p) - *size_p = 14; -} - -/* Goto if stack[--sp] < TOP */ - -static void -ppc64_emit_lt_goto (int *offset_p, int *size_p) -{ - EMIT_ASM ("ldu 4, 8(30) \n" - "cmpd 7, 4, 3 \n" - "ldu 3, 8(30) \n" - "1:blt 7, 1b \n"); - - if (offset_p) - *offset_p = 12; - if (size_p) - *size_p = 14; -} - -/* Goto if stack[--sp] <= TOP */ - -static void -ppc64_emit_le_goto (int *offset_p, int *size_p) -{ - EMIT_ASM ("ldu 4, 8(30) \n" - "cmpd 7, 4, 3 \n" - "ldu 3, 8(30) \n" - "1:ble 7, 1b \n"); - - if (offset_p) - *offset_p = 12; - if (size_p) - *size_p = 14; -} - -/* Goto if stack[--sp] > TOP */ - -static void -ppc64_emit_gt_goto (int *offset_p, int *size_p) -{ - EMIT_ASM ("ldu 4, 8(30) \n" - "cmpd 7, 4, 3 \n" - "ldu 3, 8(30) \n" - "1:bgt 7, 1b \n"); - - if (offset_p) - *offset_p = 12; - if (size_p) - *size_p = 14; -} - -/* Goto if stack[--sp] >= TOP */ - -static void -ppc64_emit_ge_goto (int *offset_p, int *size_p) -{ - EMIT_ASM ("ldu 4, 8(30) \n" - "cmpd 7, 4, 3 \n" - "ldu 3, 8(30) \n" - "1:bge 7, 1b \n"); - - if (offset_p) - *offset_p = 12; - if (size_p) - *size_p = 14; -} - -/* Table of emit ops for 64-bit ELFv1. */ - -static struct emit_ops ppc64v1_emit_ops_impl = -{ - ppc64v1_emit_prologue, - ppc64_emit_epilogue, - ppc64_emit_add, - ppc64_emit_sub, - ppc64_emit_mul, - ppc64_emit_lsh, - ppc64_emit_rsh_signed, - ppc64_emit_rsh_unsigned, - ppc64_emit_ext, - ppc64_emit_log_not, - ppc64_emit_bit_and, - ppc64_emit_bit_or, - ppc64_emit_bit_xor, - ppc64_emit_bit_not, - ppc64_emit_equal, - ppc64_emit_less_signed, - ppc64_emit_less_unsigned, - ppc64_emit_ref, - ppc64_emit_if_goto, - ppc_emit_goto, - ppc_write_goto_address, - ppc64_emit_const, - ppc64v1_emit_call, - ppc64v1_emit_reg, - ppc64_emit_pop, - ppc64_emit_stack_flush, - ppc64_emit_zero_ext, - ppc64_emit_swap, - ppc_emit_stack_adjust, - ppc64v1_emit_int_call_1, - ppc64v1_emit_void_call_2, - ppc64_emit_eq_goto, - ppc64_emit_ne_goto, - ppc64_emit_lt_goto, - ppc64_emit_le_goto, - ppc64_emit_gt_goto, - ppc64_emit_ge_goto -}; - -/* Table of emit ops for 64-bit ELFv2. */ - -static struct emit_ops ppc64v2_emit_ops_impl = -{ - ppc64v2_emit_prologue, - ppc64_emit_epilogue, - ppc64_emit_add, - ppc64_emit_sub, - ppc64_emit_mul, - ppc64_emit_lsh, - ppc64_emit_rsh_signed, - ppc64_emit_rsh_unsigned, - ppc64_emit_ext, - ppc64_emit_log_not, - ppc64_emit_bit_and, - ppc64_emit_bit_or, - ppc64_emit_bit_xor, - ppc64_emit_bit_not, - ppc64_emit_equal, - ppc64_emit_less_signed, - ppc64_emit_less_unsigned, - ppc64_emit_ref, - ppc64_emit_if_goto, - ppc_emit_goto, - ppc_write_goto_address, - ppc64_emit_const, - ppc64v2_emit_call, - ppc64v2_emit_reg, - ppc64_emit_pop, - ppc64_emit_stack_flush, - ppc64_emit_zero_ext, - ppc64_emit_swap, - ppc_emit_stack_adjust, - ppc64v2_emit_int_call_1, - ppc64v2_emit_void_call_2, - ppc64_emit_eq_goto, - ppc64_emit_ne_goto, - ppc64_emit_lt_goto, - ppc64_emit_le_goto, - ppc64_emit_gt_goto, - ppc64_emit_ge_goto -}; - -#endif - -/* Implementation of linux_target_ops method "emit_ops". */ - -static struct emit_ops * -ppc_emit_ops (void) -{ -#ifdef __powerpc64__ - struct regcache *regcache = get_thread_regcache (current_thread, 0); - - if (register_size (regcache->tdesc, 0) == 8) - { - if (is_elfv2_inferior ()) - return &ppc64v2_emit_ops_impl; - else - return &ppc64v1_emit_ops_impl; - } -#endif - return &ppc_emit_ops_impl; -} - -/* Implementation of linux_target_ops method "get_ipa_tdesc_idx". */ - -static int -ppc_get_ipa_tdesc_idx (void) -{ - struct regcache *regcache = get_thread_regcache (current_thread, 0); - const struct target_desc *tdesc = regcache->tdesc; - -#ifdef __powerpc64__ - if (tdesc == tdesc_powerpc_64l) - return PPC_TDESC_BASE; - if (tdesc == tdesc_powerpc_altivec64l) - return PPC_TDESC_ALTIVEC; - if (tdesc == tdesc_powerpc_vsx64l) - return PPC_TDESC_VSX; - if (tdesc == tdesc_powerpc_isa205_64l) - return PPC_TDESC_ISA205; - if (tdesc == tdesc_powerpc_isa205_altivec64l) - return PPC_TDESC_ISA205_ALTIVEC; - if (tdesc == tdesc_powerpc_isa205_vsx64l) - return PPC_TDESC_ISA205_VSX; - if (tdesc == tdesc_powerpc_isa205_ppr_dscr_vsx64l) - return PPC_TDESC_ISA205_PPR_DSCR_VSX; - if (tdesc == tdesc_powerpc_isa207_vsx64l) - return PPC_TDESC_ISA207_VSX; - if (tdesc == tdesc_powerpc_isa207_htm_vsx64l) - return PPC_TDESC_ISA207_HTM_VSX; -#endif - - if (tdesc == tdesc_powerpc_32l) - return PPC_TDESC_BASE; - if (tdesc == tdesc_powerpc_altivec32l) - return PPC_TDESC_ALTIVEC; - if (tdesc == tdesc_powerpc_vsx32l) - return PPC_TDESC_VSX; - if (tdesc == tdesc_powerpc_isa205_32l) - return PPC_TDESC_ISA205; - if (tdesc == tdesc_powerpc_isa205_altivec32l) - return PPC_TDESC_ISA205_ALTIVEC; - if (tdesc == tdesc_powerpc_isa205_vsx32l) - return PPC_TDESC_ISA205_VSX; - if (tdesc == tdesc_powerpc_isa205_ppr_dscr_vsx32l) - return PPC_TDESC_ISA205_PPR_DSCR_VSX; - if (tdesc == tdesc_powerpc_isa207_vsx32l) - return PPC_TDESC_ISA207_VSX; - if (tdesc == tdesc_powerpc_isa207_htm_vsx32l) - return PPC_TDESC_ISA207_HTM_VSX; - if (tdesc == tdesc_powerpc_e500l) - return PPC_TDESC_E500; - - return 0; -} - -struct linux_target_ops the_low_target = { - ppc_arch_setup, - ppc_regs_info, - ppc_cannot_fetch_register, - ppc_cannot_store_register, - NULL, /* fetch_register */ - ppc_get_pc, - ppc_set_pc, - NULL, /* breakpoint_kind_from_pc */ - ppc_sw_breakpoint_from_kind, - NULL, - 0, - ppc_breakpoint_at, - ppc_supports_z_point_type, - ppc_insert_point, - ppc_remove_point, - NULL, - NULL, - ppc_collect_ptrace_register, - ppc_supply_ptrace_register, - NULL, /* siginfo_fixup */ - NULL, /* new_process */ - NULL, /* delete_process */ - NULL, /* new_thread */ - NULL, /* delete_thread */ - NULL, /* new_fork */ - NULL, /* prepare_to_resume */ - NULL, /* process_qsupported */ - ppc_supports_tracepoints, - ppc_get_thread_area, - ppc_install_fast_tracepoint_jump_pad, - ppc_emit_ops, - ppc_get_min_fast_tracepoint_insn_len, - NULL, /* supports_range_stepping */ - NULL, /* breakpoint_kind_from_current_state */ - ppc_supports_hardware_single_step, - NULL, /* get_syscall_trapinfo */ - ppc_get_ipa_tdesc_idx, -}; - -void -initialize_low_arch (void) -{ - /* Initialize the Linux target descriptions. */ - - init_registers_powerpc_32l (); - init_registers_powerpc_altivec32l (); - init_registers_powerpc_vsx32l (); - init_registers_powerpc_isa205_32l (); - init_registers_powerpc_isa205_altivec32l (); - init_registers_powerpc_isa205_vsx32l (); - init_registers_powerpc_isa205_ppr_dscr_vsx32l (); - init_registers_powerpc_isa207_vsx32l (); - init_registers_powerpc_isa207_htm_vsx32l (); - init_registers_powerpc_e500l (); -#if __powerpc64__ - init_registers_powerpc_64l (); - init_registers_powerpc_altivec64l (); - init_registers_powerpc_vsx64l (); - init_registers_powerpc_isa205_64l (); - init_registers_powerpc_isa205_altivec64l (); - init_registers_powerpc_isa205_vsx64l (); - init_registers_powerpc_isa205_ppr_dscr_vsx64l (); - init_registers_powerpc_isa207_vsx64l (); - init_registers_powerpc_isa207_htm_vsx64l (); -#endif - - initialize_regsets_info (&ppc_regsets_info); -} diff -Nru gdb-9.1/gdb/gdbserver/linux-ppc-tdesc-init.h gdb-10.2/gdb/gdbserver/linux-ppc-tdesc-init.h --- gdb-9.1/gdb/gdbserver/linux-ppc-tdesc-init.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/linux-ppc-tdesc-init.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,106 +0,0 @@ -/* Low level support for ppc, shared between gdbserver and IPA. - - Copyright (C) 2016-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef GDBSERVER_LINUX_PPC_TDESC_INIT_H -#define GDBSERVER_LINUX_PPC_TDESC_INIT_H - -/* Note: since IPA obviously knows what ABI it's running on (32 vs 64), - it's sufficient to pass only the register set here. This, together with - the ABI known at IPA compile time, maps to a tdesc. */ - -enum ppc_linux_tdesc { - PPC_TDESC_BASE, - PPC_TDESC_ALTIVEC, - PPC_TDESC_CELL, /* No longer used, but kept to avoid ABI changes. */ - PPC_TDESC_VSX, - PPC_TDESC_ISA205, - PPC_TDESC_ISA205_ALTIVEC, - PPC_TDESC_ISA205_VSX, - PPC_TDESC_ISA205_PPR_DSCR_VSX, - PPC_TDESC_ISA207_VSX, - PPC_TDESC_ISA207_HTM_VSX, - PPC_TDESC_E500, -}; - -#if !defined __powerpc64__ || !defined IN_PROCESS_AGENT - -/* Defined in auto-generated file powerpc-32l.c. */ -void init_registers_powerpc_32l (void); - -/* Defined in auto-generated file powerpc-altivec32l.c. */ -void init_registers_powerpc_altivec32l (void); - -/* Defined in auto-generated file powerpc-vsx32l.c. */ -void init_registers_powerpc_vsx32l (void); - -/* Defined in auto-generated file powerpc-isa205-32l.c. */ -void init_registers_powerpc_isa205_32l (void); - -/* Defined in auto-generated file powerpc-isa205-altivec32l.c. */ -void init_registers_powerpc_isa205_altivec32l (void); - -/* Defined in auto-generated file powerpc-isa205-vsx32l.c. */ -void init_registers_powerpc_isa205_vsx32l (void); - -/* Defined in auto-generated file powerpc-isa205-ppr-dscr-vsx32l.c. */ -void init_registers_powerpc_isa205_ppr_dscr_vsx32l (void); - -/* Defined in auto-generated file powerpc-isa207-vsx32l.c. */ -void init_registers_powerpc_isa207_vsx32l (void); - -/* Defined in auto-generated file powerpc-isa207-htm-vsx32l.c. */ -void init_registers_powerpc_isa207_htm_vsx32l (void); - -/* Defined in auto-generated file powerpc-e500l.c. */ -void init_registers_powerpc_e500l (void); - -#endif - -#if defined __powerpc64__ - -/* Defined in auto-generated file powerpc-64l.c. */ -void init_registers_powerpc_64l (void); - -/* Defined in auto-generated file powerpc-altivec64l.c. */ -void init_registers_powerpc_altivec64l (void); - -/* Defined in auto-generated file powerpc-vsx64l.c. */ -void init_registers_powerpc_vsx64l (void); - -/* Defined in auto-generated file powerpc-isa205-64l.c. */ -void init_registers_powerpc_isa205_64l (void); - -/* Defined in auto-generated file powerpc-isa205-altivec64l.c. */ -void init_registers_powerpc_isa205_altivec64l (void); - -/* Defined in auto-generated file powerpc-isa205-vsx64l.c. */ -void init_registers_powerpc_isa205_vsx64l (void); - -/* Defined in auto-generated file powerpc-isa205-ppr-dscr-vsx64l.c. */ -void init_registers_powerpc_isa205_ppr_dscr_vsx64l (void); - -/* Defined in auto-generated file powerpc-isa207-vsx64l.c. */ -void init_registers_powerpc_isa207_vsx64l (void); - -/* Defined in auto-generated file powerpc-isa207-htm-vsx64l.c. */ -void init_registers_powerpc_isa207_htm_vsx64l (void); - -#endif - -#endif /* GDBSERVER_LINUX_PPC_TDESC_INIT_H */ diff -Nru gdb-9.1/gdb/gdbserver/linux-s390-ipa.c gdb-10.2/gdb/gdbserver/linux-s390-ipa.c --- gdb-9.1/gdb/gdbserver/linux-s390-ipa.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/linux-s390-ipa.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,463 +0,0 @@ -/* GNU/Linux S/390 specific low level interface, for the in-process - agent library for GDB. - - Copyright (C) 2016-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "server.h" -#include <sys/mman.h> -#include "tracepoint.h" -#include "linux-s390-tdesc.h" -#include <elf.h> -#ifdef HAVE_GETAUXVAL -#include <sys/auxv.h> -#endif - -#define FT_FPR(x) (0x000 + (x) * 0x10) -#define FT_VR(x) (0x000 + (x) * 0x10) -#define FT_VR_L(x) (0x008 + (x) * 0x10) -#define FT_GPR(x) (0x200 + (x) * 8) -#define FT_GPR_U(x) (0x200 + (x) * 8) -#define FT_GPR_L(x) (0x204 + (x) * 8) -#define FT_GPR(x) (0x200 + (x) * 8) -#define FT_ACR(x) (0x280 + (x) * 4) -#define FT_PSWM 0x2c0 -#define FT_PSWM_U 0x2c0 -#define FT_PSWA 0x2c8 -#define FT_PSWA_L 0x2cc -#define FT_FPC 0x2d0 - -/* Mappings between registers collected by the jump pad and GDB's register - array layout used by regcache. - - See linux-s390-low.c (s390_install_fast_tracepoint_jump_pad) for more - details. */ - -#ifndef __s390x__ - -/* Used for s390-linux32, s390-linux32v1, s390-linux32v2. */ - -static const int s390_linux32_ft_collect_regmap[] = { - /* 32-bit PSWA and PSWM. */ - FT_PSWM_U, FT_PSWA_L, - /* 32-bit GPRs (mapped to lower halves of 64-bit slots). */ - FT_GPR_L (0), FT_GPR_L (1), FT_GPR_L (2), FT_GPR_L (3), - FT_GPR_L (4), FT_GPR_L (5), FT_GPR_L (6), FT_GPR_L (7), - FT_GPR_L (8), FT_GPR_L (9), FT_GPR_L (10), FT_GPR_L (11), - FT_GPR_L (12), FT_GPR_L (13), FT_GPR_L (14), FT_GPR_L (15), - /* ACRs */ - FT_ACR (0), FT_ACR (1), FT_ACR (2), FT_ACR (3), - FT_ACR (4), FT_ACR (5), FT_ACR (6), FT_ACR (7), - FT_ACR (8), FT_ACR (9), FT_ACR (10), FT_ACR (11), - FT_ACR (12), FT_ACR (13), FT_ACR (14), FT_ACR (15), - /* FPRs (mapped to upper halves of 128-bit VR slots). */ - FT_FPR (0), FT_FPR (1), FT_FPR (2), FT_FPR (3), - FT_FPR (4), FT_FPR (5), FT_FPR (6), FT_FPR (7), - FT_FPR (8), FT_FPR (9), FT_FPR (10), FT_FPR (11), - FT_FPR (12), FT_FPR (13), FT_FPR (14), FT_FPR (15), - /* orig_r2, last_break, system_call */ - -1, -1, -1, -}; - -/* Used for s390-linux64, s390-linux64v1, s390-linux64v2, s390-vx-linux64. */ - -static const int s390_linux64_ft_collect_regmap[] = { - /* 32-bit PSWA and PSWM. */ - FT_PSWM_U, FT_PSWA_L, - /* 32-bit halves of 64-bit GPRs. */ - FT_GPR_U (0), FT_GPR_L (0), - FT_GPR_U (1), FT_GPR_L (1), - FT_GPR_U (2), FT_GPR_L (2), - FT_GPR_U (3), FT_GPR_L (3), - FT_GPR_U (4), FT_GPR_L (4), - FT_GPR_U (5), FT_GPR_L (5), - FT_GPR_U (6), FT_GPR_L (6), - FT_GPR_U (7), FT_GPR_L (7), - FT_GPR_U (8), FT_GPR_L (8), - FT_GPR_U (9), FT_GPR_L (9), - FT_GPR_U (10), FT_GPR_L (10), - FT_GPR_U (11), FT_GPR_L (11), - FT_GPR_U (12), FT_GPR_L (12), - FT_GPR_U (13), FT_GPR_L (13), - FT_GPR_U (14), FT_GPR_L (14), - FT_GPR_U (15), FT_GPR_L (15), - /* ACRs */ - FT_ACR (0), FT_ACR (1), FT_ACR (2), FT_ACR (3), - FT_ACR (4), FT_ACR (5), FT_ACR (6), FT_ACR (7), - FT_ACR (8), FT_ACR (9), FT_ACR (10), FT_ACR (11), - FT_ACR (12), FT_ACR (13), FT_ACR (14), FT_ACR (15), - /* FPRs (mapped to upper halves of 128-bit VR slots). */ - FT_FPR (0), FT_FPR (1), FT_FPR (2), FT_FPR (3), - FT_FPR (4), FT_FPR (5), FT_FPR (6), FT_FPR (7), - FT_FPR (8), FT_FPR (9), FT_FPR (10), FT_FPR (11), - FT_FPR (12), FT_FPR (13), FT_FPR (14), FT_FPR (15), - /* orig_r2, last_break, system_call */ - -1, -1, -1, - /* Lower halves of 128-bit VRs. */ - FT_VR_L (0), FT_VR_L (1), FT_VR_L (2), FT_VR_L (3), - FT_VR_L (4), FT_VR_L (5), FT_VR_L (6), FT_VR_L (7), - FT_VR_L (8), FT_VR_L (9), FT_VR_L (10), FT_VR_L (11), - FT_VR_L (12), FT_VR_L (13), FT_VR_L (14), FT_VR_L (15), - /* And the next 16 VRs. */ - FT_VR (16), FT_VR (17), FT_VR (18), FT_VR (19), - FT_VR (20), FT_VR (21), FT_VR (22), FT_VR (23), - FT_VR (24), FT_VR (25), FT_VR (26), FT_VR (27), - FT_VR (28), FT_VR (29), FT_VR (30), FT_VR (31), -}; - -/* Used for s390-te-linux64, s390-tevx-linux64, and s390-gs-linux64. */ - -static const int s390_te_linux64_ft_collect_regmap[] = { - /* 32-bit PSWA and PSWM. */ - FT_PSWM_U, FT_PSWA_L, - /* 32-bit halves of 64-bit GPRs. */ - FT_GPR_U (0), FT_GPR_L (0), - FT_GPR_U (1), FT_GPR_L (1), - FT_GPR_U (2), FT_GPR_L (2), - FT_GPR_U (3), FT_GPR_L (3), - FT_GPR_U (4), FT_GPR_L (4), - FT_GPR_U (5), FT_GPR_L (5), - FT_GPR_U (6), FT_GPR_L (6), - FT_GPR_U (7), FT_GPR_L (7), - FT_GPR_U (8), FT_GPR_L (8), - FT_GPR_U (9), FT_GPR_L (9), - FT_GPR_U (10), FT_GPR_L (10), - FT_GPR_U (11), FT_GPR_L (11), - FT_GPR_U (12), FT_GPR_L (12), - FT_GPR_U (13), FT_GPR_L (13), - FT_GPR_U (14), FT_GPR_L (14), - FT_GPR_U (15), FT_GPR_L (15), - /* ACRs */ - FT_ACR (0), FT_ACR (1), FT_ACR (2), FT_ACR (3), - FT_ACR (4), FT_ACR (5), FT_ACR (6), FT_ACR (7), - FT_ACR (8), FT_ACR (9), FT_ACR (10), FT_ACR (11), - FT_ACR (12), FT_ACR (13), FT_ACR (14), FT_ACR (15), - /* FPRs (mapped to upper halves of 128-bit VR slots). */ - FT_FPR (0), FT_FPR (1), FT_FPR (2), FT_FPR (3), - FT_FPR (4), FT_FPR (5), FT_FPR (6), FT_FPR (7), - FT_FPR (8), FT_FPR (9), FT_FPR (10), FT_FPR (11), - FT_FPR (12), FT_FPR (13), FT_FPR (14), FT_FPR (15), - /* orig_r2, last_break, system_call */ - -1, -1, -1, - /* TDB */ - -1, -1, -1, -1, - -1, -1, -1, -1, - -1, -1, -1, -1, - -1, -1, -1, -1, - -1, -1, -1, -1, - /* Lower halves of 128-bit VRs. */ - FT_VR_L (0), FT_VR_L (1), FT_VR_L (2), FT_VR_L (3), - FT_VR_L (4), FT_VR_L (5), FT_VR_L (6), FT_VR_L (7), - FT_VR_L (8), FT_VR_L (9), FT_VR_L (10), FT_VR_L (11), - FT_VR_L (12), FT_VR_L (13), FT_VR_L (14), FT_VR_L (15), - /* And the next 16 VRs. */ - FT_VR (16), FT_VR (17), FT_VR (18), FT_VR (19), - FT_VR (20), FT_VR (21), FT_VR (22), FT_VR (23), - FT_VR (24), FT_VR (25), FT_VR (26), FT_VR (27), - FT_VR (28), FT_VR (29), FT_VR (30), FT_VR (31), -}; - -#else /* __s390x__ */ - -/* Used for s390x-linux64, s390x-linux64v1, s390x-linux64v2, s390x-vx-linux64. */ - -static const int s390x_ft_collect_regmap[] = { - /* 64-bit PSWA and PSWM. */ - FT_PSWM, FT_PSWA, - /* 64-bit GPRs. */ - FT_GPR (0), FT_GPR (1), FT_GPR (2), FT_GPR (3), - FT_GPR (4), FT_GPR (5), FT_GPR (6), FT_GPR (7), - FT_GPR (8), FT_GPR (9), FT_GPR (10), FT_GPR (11), - FT_GPR (12), FT_GPR (13), FT_GPR (14), FT_GPR (15), - /* ACRs */ - FT_ACR (0), FT_ACR (1), FT_ACR (2), FT_ACR (3), - FT_ACR (4), FT_ACR (5), FT_ACR (6), FT_ACR (7), - FT_ACR (8), FT_ACR (9), FT_ACR (10), FT_ACR (11), - FT_ACR (12), FT_ACR (13), FT_ACR (14), FT_ACR (15), - /* FPRs (mapped to upper halves of 128-bit VR slots). */ - FT_FPR (0), FT_FPR (1), FT_FPR (2), FT_FPR (3), - FT_FPR (4), FT_FPR (5), FT_FPR (6), FT_FPR (7), - FT_FPR (8), FT_FPR (9), FT_FPR (10), FT_FPR (11), - FT_FPR (12), FT_FPR (13), FT_FPR (14), FT_FPR (15), - /* orig_r2, last_break, system_call */ - -1, -1, -1, - /* Lower halves of 128-bit VRs. */ - FT_VR_L (0), FT_VR_L (1), FT_VR_L (2), FT_VR_L (3), - FT_VR_L (4), FT_VR_L (5), FT_VR_L (6), FT_VR_L (7), - FT_VR_L (8), FT_VR_L (9), FT_VR_L (10), FT_VR_L (11), - FT_VR_L (12), FT_VR_L (13), FT_VR_L (14), FT_VR_L (15), - /* And the next 16 VRs. */ - FT_VR (16), FT_VR (17), FT_VR (18), FT_VR (19), - FT_VR (20), FT_VR (21), FT_VR (22), FT_VR (23), - FT_VR (24), FT_VR (25), FT_VR (26), FT_VR (27), - FT_VR (28), FT_VR (29), FT_VR (30), FT_VR (31), -}; - -/* Used for s390x-te-linux64, s390x-tevx-linux64, and - s390x-gs-linux64. */ - -static const int s390x_te_ft_collect_regmap[] = { - /* 64-bit PSWA and PSWM. */ - FT_PSWM, FT_PSWA, - /* 64-bit GPRs. */ - FT_GPR (0), FT_GPR (1), FT_GPR (2), FT_GPR (3), - FT_GPR (4), FT_GPR (5), FT_GPR (6), FT_GPR (7), - FT_GPR (8), FT_GPR (9), FT_GPR (10), FT_GPR (11), - FT_GPR (12), FT_GPR (13), FT_GPR (14), FT_GPR (15), - /* ACRs */ - FT_ACR (0), FT_ACR (1), FT_ACR (2), FT_ACR (3), - FT_ACR (4), FT_ACR (5), FT_ACR (6), FT_ACR (7), - FT_ACR (8), FT_ACR (9), FT_ACR (10), FT_ACR (11), - FT_ACR (12), FT_ACR (13), FT_ACR (14), FT_ACR (15), - /* FPRs (mapped to upper halves of 128-bit VR slots). */ - FT_FPR (0), FT_FPR (1), FT_FPR (2), FT_FPR (3), - FT_FPR (4), FT_FPR (5), FT_FPR (6), FT_FPR (7), - FT_FPR (8), FT_FPR (9), FT_FPR (10), FT_FPR (11), - FT_FPR (12), FT_FPR (13), FT_FPR (14), FT_FPR (15), - /* orig_r2, last_break, system_call */ - -1, -1, -1, - /* TDB */ - -1, -1, -1, -1, - -1, -1, -1, -1, - -1, -1, -1, -1, - -1, -1, -1, -1, - -1, -1, -1, -1, - /* Lower halves of 128-bit VRs. */ - FT_VR_L (0), FT_VR_L (1), FT_VR_L (2), FT_VR_L (3), - FT_VR_L (4), FT_VR_L (5), FT_VR_L (6), FT_VR_L (7), - FT_VR_L (8), FT_VR_L (9), FT_VR_L (10), FT_VR_L (11), - FT_VR_L (12), FT_VR_L (13), FT_VR_L (14), FT_VR_L (15), - /* And the next 16 VRs. */ - FT_VR (16), FT_VR (17), FT_VR (18), FT_VR (19), - FT_VR (20), FT_VR (21), FT_VR (22), FT_VR (23), - FT_VR (24), FT_VR (25), FT_VR (26), FT_VR (27), - FT_VR (28), FT_VR (29), FT_VR (30), FT_VR (31), -}; - -#endif - -/* Initialized by get_ipa_tdesc according to the tdesc in use. */ - -static const int *s390_regmap; -static int s390_regnum; - -/* Fill in REGCACHE with registers saved by the jump pad in BUF. */ - -void -supply_fast_tracepoint_registers (struct regcache *regcache, - const unsigned char *buf) -{ - int i; - for (i = 0; i < s390_regnum; i++) - if (s390_regmap[i] != -1) - supply_register (regcache, i, ((char *) buf) + s390_regmap[i]); -} - -ULONGEST -get_raw_reg (const unsigned char *raw_regs, int regnum) -{ - int offset; - if (regnum >= s390_regnum) - return 0; - offset = s390_regmap[regnum]; - if (offset == -1) - return 0; - - /* The regnums are variable, better to figure out size by FT offset. */ - - /* 64-bit ones. */ - if (offset < FT_VR(16) -#ifdef __s390x__ - || (offset >= FT_GPR(0) && offset < FT_ACR(0)) - || offset == FT_PSWM - || offset == FT_PSWA -#endif - ) - return *(uint64_t *) (raw_regs + offset); - - if (offset >= FT_ACR(0 && offset < FT_PSWM) - || offset == FT_FPC -#ifndef __s390x__ - || (offset >= FT_GPR(0) && offset < FT_ACR(0)) - || offset == FT_PSWM_U - || offset == FT_PSWA_L -#endif - ) - return *(uint32_t *) (raw_regs + offset); - - /* This leaves 128-bit VX. No way to return them. */ - return 0; -} - -/* Return target_desc to use for IPA, given the tdesc index passed by - gdbserver. For s390, it also sets s390_regmap and s390_regnum. */ - -const struct target_desc * -get_ipa_tdesc (int idx) -{ -#define SET_REGMAP(regmap, skip_last) \ - do { \ - s390_regmap = regmap; \ - s390_regnum = (sizeof regmap / sizeof regmap[0]) - skip_last; \ - } while(0) - switch (idx) - { -#ifdef __s390x__ - case S390_TDESC_64: - /* Subtract number of VX regs. */ - SET_REGMAP(s390x_ft_collect_regmap, 32); - return tdesc_s390x_linux64; - case S390_TDESC_64V1: - SET_REGMAP(s390x_ft_collect_regmap, 32); - return tdesc_s390x_linux64v1; - case S390_TDESC_64V2: - SET_REGMAP(s390x_ft_collect_regmap, 32); - return tdesc_s390x_linux64v2; - case S390_TDESC_TE: - SET_REGMAP(s390x_te_ft_collect_regmap, 32); - return tdesc_s390x_te_linux64; - case S390_TDESC_VX: - SET_REGMAP(s390x_ft_collect_regmap, 0); - return tdesc_s390x_vx_linux64; - case S390_TDESC_TEVX: - SET_REGMAP(s390x_te_ft_collect_regmap, 0); - return tdesc_s390x_tevx_linux64; - case S390_TDESC_GS: - SET_REGMAP(s390x_te_ft_collect_regmap, 0); - return tdesc_s390x_gs_linux64; -#else - case S390_TDESC_32: - SET_REGMAP(s390_linux32_ft_collect_regmap, 0); - return tdesc_s390_linux32; - case S390_TDESC_32V1: - SET_REGMAP(s390_linux32_ft_collect_regmap, 0); - return tdesc_s390_linux32v1; - case S390_TDESC_32V2: - SET_REGMAP(s390_linux32_ft_collect_regmap, 0); - return tdesc_s390_linux32v2; - case S390_TDESC_64: - SET_REGMAP(s390_linux64_ft_collect_regmap, 32); - return tdesc_s390_linux64; - case S390_TDESC_64V1: - SET_REGMAP(s390_linux64_ft_collect_regmap, 32); - return tdesc_s390_linux64v1; - case S390_TDESC_64V2: - SET_REGMAP(s390_linux64_ft_collect_regmap, 32); - return tdesc_s390_linux64v2; - case S390_TDESC_TE: - SET_REGMAP(s390_te_linux64_ft_collect_regmap, 32); - return tdesc_s390_te_linux64; - case S390_TDESC_VX: - SET_REGMAP(s390_linux64_ft_collect_regmap, 0); - return tdesc_s390_vx_linux64; - case S390_TDESC_TEVX: - SET_REGMAP(s390_te_linux64_ft_collect_regmap, 0); - return tdesc_s390_tevx_linux64; - case S390_TDESC_GS: - SET_REGMAP(s390_te_linux64_ft_collect_regmap, 0); - return tdesc_s390_gs_linux64; -#endif - default: - internal_error (__FILE__, __LINE__, - "unknown ipa tdesc index: %d", idx); -#ifdef __s390x__ - return tdesc_s390x_linux64; -#else - return tdesc_s390_linux32; -#endif - } -} - -/* Allocate buffer for the jump pads. On 31-bit, JG reaches everywhere, - so just allocate normally. On 64-bit, we have +/-4GiB of reach, and - the executable is usually mapped at 0x80000000 - aim for somewhere - below it. */ - -void * -alloc_jump_pad_buffer (size_t size) -{ -#ifdef __s390x__ - uintptr_t addr; - uintptr_t exec_base = getauxval (AT_PHDR); - int pagesize; - void *res; - - if (exec_base == 0) - exec_base = 0x80000000; - - pagesize = sysconf (_SC_PAGE_SIZE); - if (pagesize == -1) - perror_with_name ("sysconf"); - - addr = exec_base - size; - - /* size should already be page-aligned, but this can't hurt. */ - addr &= ~(pagesize - 1); - - /* Search for a free area. If we hit 0, we're out of luck. */ - for (; addr; addr -= pagesize) - { - /* No MAP_FIXED - we don't want to zap someone's mapping. */ - res = mmap ((void *) addr, size, - PROT_READ | PROT_WRITE | PROT_EXEC, - MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); - - /* If we got what we wanted, return. */ - if ((uintptr_t) res == addr) - return res; - - /* If we got a mapping, but at a wrong address, undo it. */ - if (res != MAP_FAILED) - munmap (res, size); - } - - return NULL; -#else - void *res = mmap (NULL, size, PROT_READ | PROT_WRITE | PROT_EXEC, - MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); - - if (res == MAP_FAILED) - return NULL; - - return res; -#endif -} - -void -initialize_low_tracepoint (void) -{ -#ifdef __s390x__ - init_registers_s390x_linux64 (); - init_registers_s390x_linux64v1 (); - init_registers_s390x_linux64v2 (); - init_registers_s390x_te_linux64 (); - init_registers_s390x_vx_linux64 (); - init_registers_s390x_tevx_linux64 (); - init_registers_s390x_gs_linux64 (); -#else - init_registers_s390_linux32 (); - init_registers_s390_linux32v1 (); - init_registers_s390_linux32v2 (); - init_registers_s390_linux64 (); - init_registers_s390_linux64v1 (); - init_registers_s390_linux64v2 (); - init_registers_s390_te_linux64 (); - init_registers_s390_vx_linux64 (); - init_registers_s390_tevx_linux64 (); - init_registers_s390_gs_linux64 (); -#endif -} diff -Nru gdb-9.1/gdb/gdbserver/linux-s390-low.c gdb-10.2/gdb/gdbserver/linux-s390-low.c --- gdb-9.1/gdb/gdbserver/linux-s390-low.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/linux-s390-low.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,2860 +0,0 @@ -/* GNU/Linux S/390 specific low level interface, for the remote server - for GDB. - Copyright (C) 2001-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -/* This file is used for both 31-bit and 64-bit S/390 systems. */ - -#include "server.h" -#include "linux-low.h" -#include "elf/common.h" -#include "ax.h" -#include "tracepoint.h" - -#include <asm/ptrace.h> -#include "nat/gdb_ptrace.h" -#include <sys/uio.h> -#include <elf.h> -#include <inttypes.h> - -#include "linux-s390-tdesc.h" - -#ifndef HWCAP_S390_HIGH_GPRS -#define HWCAP_S390_HIGH_GPRS 512 -#endif - -#ifndef HWCAP_S390_TE -#define HWCAP_S390_TE 1024 -#endif - -#ifndef HWCAP_S390_VX -#define HWCAP_S390_VX 2048 -#endif - -#ifndef HWCAP_S390_GS -#define HWCAP_S390_GS 16384 -#endif - -#define s390_num_regs 52 - -static int s390_regmap[] = { - PT_PSWMASK, PT_PSWADDR, - - PT_GPR0, PT_GPR1, PT_GPR2, PT_GPR3, - PT_GPR4, PT_GPR5, PT_GPR6, PT_GPR7, - PT_GPR8, PT_GPR9, PT_GPR10, PT_GPR11, - PT_GPR12, PT_GPR13, PT_GPR14, PT_GPR15, - - PT_ACR0, PT_ACR1, PT_ACR2, PT_ACR3, - PT_ACR4, PT_ACR5, PT_ACR6, PT_ACR7, - PT_ACR8, PT_ACR9, PT_ACR10, PT_ACR11, - PT_ACR12, PT_ACR13, PT_ACR14, PT_ACR15, - - PT_FPC, - -#ifndef __s390x__ - PT_FPR0_HI, PT_FPR1_HI, PT_FPR2_HI, PT_FPR3_HI, - PT_FPR4_HI, PT_FPR5_HI, PT_FPR6_HI, PT_FPR7_HI, - PT_FPR8_HI, PT_FPR9_HI, PT_FPR10_HI, PT_FPR11_HI, - PT_FPR12_HI, PT_FPR13_HI, PT_FPR14_HI, PT_FPR15_HI, -#else - PT_FPR0, PT_FPR1, PT_FPR2, PT_FPR3, - PT_FPR4, PT_FPR5, PT_FPR6, PT_FPR7, - PT_FPR8, PT_FPR9, PT_FPR10, PT_FPR11, - PT_FPR12, PT_FPR13, PT_FPR14, PT_FPR15, -#endif - - PT_ORIGGPR2, -}; - -#define s390_num_regs_3264 68 - -#ifdef __s390x__ -static int s390_regmap_3264[] = { - PT_PSWMASK, PT_PSWADDR, - - PT_GPR0, PT_GPR0, PT_GPR1, PT_GPR1, - PT_GPR2, PT_GPR2, PT_GPR3, PT_GPR3, - PT_GPR4, PT_GPR4, PT_GPR5, PT_GPR5, - PT_GPR6, PT_GPR6, PT_GPR7, PT_GPR7, - PT_GPR8, PT_GPR8, PT_GPR9, PT_GPR9, - PT_GPR10, PT_GPR10, PT_GPR11, PT_GPR11, - PT_GPR12, PT_GPR12, PT_GPR13, PT_GPR13, - PT_GPR14, PT_GPR14, PT_GPR15, PT_GPR15, - - PT_ACR0, PT_ACR1, PT_ACR2, PT_ACR3, - PT_ACR4, PT_ACR5, PT_ACR6, PT_ACR7, - PT_ACR8, PT_ACR9, PT_ACR10, PT_ACR11, - PT_ACR12, PT_ACR13, PT_ACR14, PT_ACR15, - - PT_FPC, - - PT_FPR0, PT_FPR1, PT_FPR2, PT_FPR3, - PT_FPR4, PT_FPR5, PT_FPR6, PT_FPR7, - PT_FPR8, PT_FPR9, PT_FPR10, PT_FPR11, - PT_FPR12, PT_FPR13, PT_FPR14, PT_FPR15, - - PT_ORIGGPR2, -}; -#else -static int s390_regmap_3264[] = { - PT_PSWMASK, PT_PSWADDR, - - -1, PT_GPR0, -1, PT_GPR1, - -1, PT_GPR2, -1, PT_GPR3, - -1, PT_GPR4, -1, PT_GPR5, - -1, PT_GPR6, -1, PT_GPR7, - -1, PT_GPR8, -1, PT_GPR9, - -1, PT_GPR10, -1, PT_GPR11, - -1, PT_GPR12, -1, PT_GPR13, - -1, PT_GPR14, -1, PT_GPR15, - - PT_ACR0, PT_ACR1, PT_ACR2, PT_ACR3, - PT_ACR4, PT_ACR5, PT_ACR6, PT_ACR7, - PT_ACR8, PT_ACR9, PT_ACR10, PT_ACR11, - PT_ACR12, PT_ACR13, PT_ACR14, PT_ACR15, - - PT_FPC, - - PT_FPR0_HI, PT_FPR1_HI, PT_FPR2_HI, PT_FPR3_HI, - PT_FPR4_HI, PT_FPR5_HI, PT_FPR6_HI, PT_FPR7_HI, - PT_FPR8_HI, PT_FPR9_HI, PT_FPR10_HI, PT_FPR11_HI, - PT_FPR12_HI, PT_FPR13_HI, PT_FPR14_HI, PT_FPR15_HI, - - PT_ORIGGPR2, -}; -#endif - - -static int -s390_cannot_fetch_register (int regno) -{ - return 0; -} - -static int -s390_cannot_store_register (int regno) -{ - return 0; -} - -static void -s390_collect_ptrace_register (struct regcache *regcache, int regno, char *buf) -{ - int size = register_size (regcache->tdesc, regno); - const struct regs_info *regs_info = (*the_low_target.regs_info) (); - struct usrregs_info *usr = regs_info->usrregs; - int regaddr = usr->regmap[regno]; - - if (size < sizeof (long)) - { - memset (buf, 0, sizeof (long)); - - if ((regno ^ 1) < usr->num_regs - && usr->regmap[regno ^ 1] == regaddr) - { - collect_register (regcache, regno & ~1, buf); - collect_register (regcache, (regno & ~1) + 1, - buf + sizeof (long) - size); - } - else if (regaddr == PT_PSWMASK) - { - /* Convert 4-byte PSW mask to 8 bytes by clearing bit 12 and copying - the basic addressing mode bit from the PSW address. */ - gdb_byte *addr = (gdb_byte *) alloca (register_size (regcache->tdesc, regno ^ 1)); - collect_register (regcache, regno, buf); - collect_register (regcache, regno ^ 1, addr); - buf[1] &= ~0x8; - buf[size] |= (addr[0] & 0x80); - } - else if (regaddr == PT_PSWADDR) - { - /* Convert 4-byte PSW address to 8 bytes by clearing the addressing - mode bit (which gets copied to the PSW mask instead). */ - collect_register (regcache, regno, buf + sizeof (long) - size); - buf[sizeof (long) - size] &= ~0x80; - } - else if ((regaddr >= PT_GPR0 && regaddr <= PT_GPR15) - || regaddr == PT_ORIGGPR2) - collect_register (regcache, regno, buf + sizeof (long) - size); - else - collect_register (regcache, regno, buf); - } - else if (regaddr != -1) - collect_register (regcache, regno, buf); -} - -static void -s390_supply_ptrace_register (struct regcache *regcache, - int regno, const char *buf) -{ - int size = register_size (regcache->tdesc, regno); - const struct regs_info *regs_info = (*the_low_target.regs_info) (); - struct usrregs_info *usr = regs_info->usrregs; - int regaddr = usr->regmap[regno]; - - if (size < sizeof (long)) - { - if ((regno ^ 1) < usr->num_regs - && usr->regmap[regno ^ 1] == regaddr) - { - supply_register (regcache, regno & ~1, buf); - supply_register (regcache, (regno & ~1) + 1, - buf + sizeof (long) - size); - } - else if (regaddr == PT_PSWMASK) - { - /* Convert 8-byte PSW mask to 4 bytes by setting bit 12 and copying - the basic addressing mode into the PSW address. */ - gdb_byte *mask = (gdb_byte *) alloca (size); - gdb_byte *addr = (gdb_byte *) alloca (register_size (regcache->tdesc, regno ^ 1)); - memcpy (mask, buf, size); - mask[1] |= 0x8; - supply_register (regcache, regno, mask); - - collect_register (regcache, regno ^ 1, addr); - addr[0] &= ~0x80; - addr[0] |= (buf[size] & 0x80); - supply_register (regcache, regno ^ 1, addr); - } - else if (regaddr == PT_PSWADDR) - { - /* Convert 8-byte PSW address to 4 bytes by truncating, but - keeping the addressing mode bit (which was set from the mask). */ - gdb_byte *addr = (gdb_byte *) alloca (size); - char amode; - collect_register (regcache, regno, addr); - amode = addr[0] & 0x80; - memcpy (addr, buf + sizeof (long) - size, size); - addr[0] &= ~0x80; - addr[0] |= amode; - supply_register (regcache, regno, addr); - } - else if ((regaddr >= PT_GPR0 && regaddr <= PT_GPR15) - || regaddr == PT_ORIGGPR2) - supply_register (regcache, regno, buf + sizeof (long) - size); - else - supply_register (regcache, regno, buf); - } - else if (regaddr != -1) - supply_register (regcache, regno, buf); -} - -/* Provide only a fill function for the general register set. ps_lgetregs - will use this for NPTL support. */ - -static void -s390_fill_gregset (struct regcache *regcache, void *buf) -{ - int i; - const struct regs_info *regs_info = (*the_low_target.regs_info) (); - struct usrregs_info *usr = regs_info->usrregs; - - for (i = 0; i < usr->num_regs; i++) - { - if (usr->regmap[i] < PT_PSWMASK - || usr->regmap[i] > PT_ACR15) - continue; - - s390_collect_ptrace_register (regcache, i, - (char *) buf + usr->regmap[i]); - } -} - -/* Fill and store functions for extended register sets. */ - -#ifndef __s390x__ -static void -s390_fill_gprs_high (struct regcache *regcache, void *buf) -{ - int r0h = find_regno (regcache->tdesc, "r0h"); - int i; - - for (i = 0; i < 16; i++) - collect_register (regcache, r0h + 2 * i, (char *) buf + 4 * i); -} - -static void -s390_store_gprs_high (struct regcache *regcache, const void *buf) -{ - int r0h = find_regno (regcache->tdesc, "r0h"); - int i; - - for (i = 0; i < 16; i++) - supply_register (regcache, r0h + 2 * i, (const char *) buf + 4 * i); -} -#endif - -static void -s390_store_last_break (struct regcache *regcache, const void *buf) -{ - const char *p; - - p = (const char *) buf + 8 - register_size (regcache->tdesc, 0); - supply_register_by_name (regcache, "last_break", p); -} - -static void -s390_fill_system_call (struct regcache *regcache, void *buf) -{ - collect_register_by_name (regcache, "system_call", buf); -} - -static void -s390_store_system_call (struct regcache *regcache, const void *buf) -{ - supply_register_by_name (regcache, "system_call", buf); -} - -static void -s390_store_tdb (struct regcache *regcache, const void *buf) -{ - int tdb0 = find_regno (regcache->tdesc, "tdb0"); - int tr0 = find_regno (regcache->tdesc, "tr0"); - int i; - - for (i = 0; i < 4; i++) - supply_register (regcache, tdb0 + i, (const char *) buf + 8 * i); - - for (i = 0; i < 16; i++) - supply_register (regcache, tr0 + i, (const char *) buf + 8 * (16 + i)); -} - -static void -s390_fill_vxrs_low (struct regcache *regcache, void *buf) -{ - int v0 = find_regno (regcache->tdesc, "v0l"); - int i; - - for (i = 0; i < 16; i++) - collect_register (regcache, v0 + i, (char *) buf + 8 * i); -} - -static void -s390_store_vxrs_low (struct regcache *regcache, const void *buf) -{ - int v0 = find_regno (regcache->tdesc, "v0l"); - int i; - - for (i = 0; i < 16; i++) - supply_register (regcache, v0 + i, (const char *) buf + 8 * i); -} - -static void -s390_fill_vxrs_high (struct regcache *regcache, void *buf) -{ - int v16 = find_regno (regcache->tdesc, "v16"); - int i; - - for (i = 0; i < 16; i++) - collect_register (regcache, v16 + i, (char *) buf + 16 * i); -} - -static void -s390_store_vxrs_high (struct regcache *regcache, const void *buf) -{ - int v16 = find_regno (regcache->tdesc, "v16"); - int i; - - for (i = 0; i < 16; i++) - supply_register (regcache, v16 + i, (const char *) buf + 16 * i); -} - -static void -s390_store_gs (struct regcache *regcache, const void *buf) -{ - int gsd = find_regno (regcache->tdesc, "gsd"); - int i; - - for (i = 0; i < 3; i++) - supply_register (regcache, gsd + i, (const char *) buf + 8 * (i + 1)); -} - -static void -s390_store_gsbc (struct regcache *regcache, const void *buf) -{ - int bc_gsd = find_regno (regcache->tdesc, "bc_gsd"); - int i; - - for (i = 0; i < 3; i++) - supply_register (regcache, bc_gsd + i, (const char *) buf + 8 * (i + 1)); -} - -static struct regset_info s390_regsets[] = { - { 0, 0, 0, 0, GENERAL_REGS, s390_fill_gregset, NULL }, -#ifndef __s390x__ - { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_S390_HIGH_GPRS, 0, - EXTENDED_REGS, s390_fill_gprs_high, s390_store_gprs_high }, -#endif - /* Last break address is read-only; no fill function. */ - { PTRACE_GETREGSET, -1, NT_S390_LAST_BREAK, 0, EXTENDED_REGS, - NULL, s390_store_last_break }, - { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_S390_SYSTEM_CALL, 0, - EXTENDED_REGS, s390_fill_system_call, s390_store_system_call }, - /* TDB is read-only. */ - { PTRACE_GETREGSET, -1, NT_S390_TDB, 0, EXTENDED_REGS, - NULL, s390_store_tdb }, - { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_S390_VXRS_LOW, 0, - EXTENDED_REGS, s390_fill_vxrs_low, s390_store_vxrs_low }, - { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_S390_VXRS_HIGH, 0, - EXTENDED_REGS, s390_fill_vxrs_high, s390_store_vxrs_high }, - /* Guarded storage registers are read-only. */ - { PTRACE_GETREGSET, -1, NT_S390_GS_CB, 0, EXTENDED_REGS, - NULL, s390_store_gs }, - { PTRACE_GETREGSET, -1, NT_S390_GS_BC, 0, EXTENDED_REGS, - NULL, s390_store_gsbc }, - NULL_REGSET -}; - - -static const gdb_byte s390_breakpoint[] = { 0, 1 }; -#define s390_breakpoint_len 2 - -/* Implementation of linux_target_ops method "sw_breakpoint_from_kind". */ - -static const gdb_byte * -s390_sw_breakpoint_from_kind (int kind, int *size) -{ - *size = s390_breakpoint_len; - return s390_breakpoint; -} - -static CORE_ADDR -s390_get_pc (struct regcache *regcache) -{ - if (register_size (regcache->tdesc, 0) == 4) - { - unsigned int pswa; - collect_register_by_name (regcache, "pswa", &pswa); - return pswa & 0x7fffffff; - } - else - { - unsigned long pc; - collect_register_by_name (regcache, "pswa", &pc); - return pc; - } -} - -static void -s390_set_pc (struct regcache *regcache, CORE_ADDR newpc) -{ - if (register_size (regcache->tdesc, 0) == 4) - { - unsigned int pswa; - collect_register_by_name (regcache, "pswa", &pswa); - pswa = (pswa & 0x80000000) | (newpc & 0x7fffffff); - supply_register_by_name (regcache, "pswa", &pswa); - } - else - { - unsigned long pc = newpc; - supply_register_by_name (regcache, "pswa", &pc); - } -} - -/* Determine the word size for the given PID, in bytes. */ - -#ifdef __s390x__ -static int -s390_get_wordsize (int pid) -{ - errno = 0; - PTRACE_XFER_TYPE pswm = ptrace (PTRACE_PEEKUSER, pid, - (PTRACE_TYPE_ARG3) 0, - (PTRACE_TYPE_ARG4) 0); - if (errno != 0) - { - warning (_("Couldn't determine word size, assuming 64-bit.")); - return 8; - } - /* Derive word size from extended addressing mode (PSW bit 31). */ - return pswm & (1L << 32) ? 8 : 4; -} -#else -#define s390_get_wordsize(pid) 4 -#endif - -static int -s390_check_regset (int pid, int regset, int regsize) -{ - void *buf = alloca (regsize); - struct iovec iov; - - iov.iov_base = buf; - iov.iov_len = regsize; - - if (ptrace (PTRACE_GETREGSET, pid, (long) regset, (long) &iov) >= 0 - || errno == ENODATA) - return 1; - return 0; -} - -/* For a 31-bit inferior, whether the kernel supports using the full - 64-bit GPRs. */ -static int have_hwcap_s390_high_gprs = 0; -static int have_hwcap_s390_vx = 0; - -static void -s390_arch_setup (void) -{ - const struct target_desc *tdesc; - struct regset_info *regset; - - /* Determine word size and HWCAP. */ - int pid = pid_of (current_thread); - int wordsize = s390_get_wordsize (pid); - unsigned long hwcap = linux_get_hwcap (wordsize); - - /* Check whether the kernel supports extra register sets. */ - int have_regset_last_break - = s390_check_regset (pid, NT_S390_LAST_BREAK, 8); - int have_regset_system_call - = s390_check_regset (pid, NT_S390_SYSTEM_CALL, 4); - int have_regset_tdb - = (s390_check_regset (pid, NT_S390_TDB, 256) - && (hwcap & HWCAP_S390_TE) != 0); - int have_regset_vxrs - = (s390_check_regset (pid, NT_S390_VXRS_LOW, 128) - && s390_check_regset (pid, NT_S390_VXRS_HIGH, 256) - && (hwcap & HWCAP_S390_VX) != 0); - int have_regset_gs - = (s390_check_regset (pid, NT_S390_GS_CB, 32) - && s390_check_regset (pid, NT_S390_GS_BC, 32) - && (hwcap & HWCAP_S390_GS) != 0); - - { -#ifdef __s390x__ - if (wordsize == 8) - { - if (have_regset_gs) - tdesc = tdesc_s390x_gs_linux64; - else if (have_regset_vxrs) - tdesc = (have_regset_tdb ? tdesc_s390x_tevx_linux64 : - tdesc_s390x_vx_linux64); - else if (have_regset_tdb) - tdesc = tdesc_s390x_te_linux64; - else if (have_regset_system_call) - tdesc = tdesc_s390x_linux64v2; - else if (have_regset_last_break) - tdesc = tdesc_s390x_linux64v1; - else - tdesc = tdesc_s390x_linux64; - } - - /* For a 31-bit inferior, check whether the kernel supports - using the full 64-bit GPRs. */ - else -#endif - if (hwcap & HWCAP_S390_HIGH_GPRS) - { - have_hwcap_s390_high_gprs = 1; - if (have_regset_gs) - tdesc = tdesc_s390_gs_linux64; - else if (have_regset_vxrs) - tdesc = (have_regset_tdb ? tdesc_s390_tevx_linux64 : - tdesc_s390_vx_linux64); - else if (have_regset_tdb) - tdesc = tdesc_s390_te_linux64; - else if (have_regset_system_call) - tdesc = tdesc_s390_linux64v2; - else if (have_regset_last_break) - tdesc = tdesc_s390_linux64v1; - else - tdesc = tdesc_s390_linux64; - } - else - { - /* Assume 31-bit inferior process. */ - if (have_regset_system_call) - tdesc = tdesc_s390_linux32v2; - else if (have_regset_last_break) - tdesc = tdesc_s390_linux32v1; - else - tdesc = tdesc_s390_linux32; - } - - have_hwcap_s390_vx = have_regset_vxrs; - } - - /* Update target_regsets according to available register sets. */ - for (regset = s390_regsets; regset->size >= 0; regset++) - if (regset->get_request == PTRACE_GETREGSET) - switch (regset->nt_type) - { -#ifndef __s390x__ - case NT_S390_HIGH_GPRS: - regset->size = have_hwcap_s390_high_gprs ? 64 : 0; - break; -#endif - case NT_S390_LAST_BREAK: - regset->size = have_regset_last_break ? 8 : 0; - break; - case NT_S390_SYSTEM_CALL: - regset->size = have_regset_system_call ? 4 : 0; - break; - case NT_S390_TDB: - regset->size = have_regset_tdb ? 256 : 0; - break; - case NT_S390_VXRS_LOW: - regset->size = have_regset_vxrs ? 128 : 0; - break; - case NT_S390_VXRS_HIGH: - regset->size = have_regset_vxrs ? 256 : 0; - break; - case NT_S390_GS_CB: - case NT_S390_GS_BC: - regset->size = have_regset_gs ? 32 : 0; - default: - break; - } - - current_process ()->tdesc = tdesc; -} - - -static int -s390_breakpoint_at (CORE_ADDR pc) -{ - unsigned char c[s390_breakpoint_len]; - read_inferior_memory (pc, c, s390_breakpoint_len); - return memcmp (c, s390_breakpoint, s390_breakpoint_len) == 0; -} - -/* Breakpoint/Watchpoint support. */ - -/* The "supports_z_point_type" linux_target_ops method. */ - -static int -s390_supports_z_point_type (char z_type) -{ - switch (z_type) - { - case Z_PACKET_SW_BP: - return 1; - default: - return 0; - } -} - -/* Support for hardware single step. */ - -static int -s390_supports_hardware_single_step (void) -{ - return 1; -} - -static struct usrregs_info s390_usrregs_info = - { - s390_num_regs, - s390_regmap, - }; - -static struct regsets_info s390_regsets_info = - { - s390_regsets, /* regsets */ - 0, /* num_regsets */ - NULL, /* disabled_regsets */ - }; - -static struct regs_info regs_info = - { - NULL, /* regset_bitmap */ - &s390_usrregs_info, - &s390_regsets_info - }; - -static struct usrregs_info s390_usrregs_info_3264 = - { - s390_num_regs_3264, - s390_regmap_3264 - }; - -static struct regsets_info s390_regsets_info_3264 = - { - s390_regsets, /* regsets */ - 0, /* num_regsets */ - NULL, /* disabled_regsets */ - }; - -static struct regs_info regs_info_3264 = - { - NULL, /* regset_bitmap */ - &s390_usrregs_info_3264, - &s390_regsets_info_3264 - }; - -static const struct regs_info * -s390_regs_info (void) -{ - if (have_hwcap_s390_high_gprs) - { -#ifdef __s390x__ - const struct target_desc *tdesc = current_process ()->tdesc; - - if (register_size (tdesc, 0) == 4) - return ®s_info_3264; -#else - return ®s_info_3264; -#endif - } - return ®s_info; -} - -/* The "supports_tracepoints" linux_target_ops method. */ - -static int -s390_supports_tracepoints (void) -{ - return 1; -} - -/* Implementation of linux_target_ops method "get_thread_area". */ - -static int -s390_get_thread_area (int lwpid, CORE_ADDR *addrp) -{ - CORE_ADDR res = ptrace (PTRACE_PEEKUSER, lwpid, (long) PT_ACR0, (long) 0); -#ifdef __s390x__ - struct regcache *regcache = get_thread_regcache (current_thread, 0); - - if (register_size (regcache->tdesc, 0) == 4) - res &= 0xffffffffull; -#endif - *addrp = res; - return 0; -} - - -/* Fast tracepoint support. - - The register save area on stack is identical for all targets: - - 0x000+i*0x10: VR0-VR31 - 0x200+i*8: GR0-GR15 - 0x280+i*4: AR0-AR15 - 0x2c0: PSWM [64-bit] - 0x2c8: PSWA [64-bit] - 0x2d0: FPC - - If we're on 31-bit linux, we just don't store the high parts of the GPRs. - Likewise, if there's no VX support, we just store the FRs into the slots - of low VR halves. The agent code is responsible for rearranging that - into regcache. */ - -/* Code sequence saving GPRs for 31-bit target with no high GPRs. There's - one trick used at the very beginning: since there's no way to allocate - stack space without destroying CC (lay instruction can do it, but it's - only supported on later CPUs), we take 4 different execution paths for - every possible value of CC, allocate stack space, save %r0, stuff the - CC value in %r0 (shifted to match its position in PSWM high word), - then branch to common path. */ - -static const unsigned char s390_ft_entry_gpr_esa[] = { - 0xa7, 0x14, 0x00, 0x1e, /* jo .Lcc3 */ - 0xa7, 0x24, 0x00, 0x14, /* jh .Lcc2 */ - 0xa7, 0x44, 0x00, 0x0a, /* jl .Lcc1 */ - /* CC = 0 */ - 0xa7, 0xfa, 0xfd, 0x00, /* ahi %r15, -0x300 */ - 0x50, 0x00, 0xf2, 0x04, /* st %r0, 0x204(%r15) */ - 0xa7, 0x08, 0x00, 0x00, /* lhi %r0, 0 */ - 0xa7, 0xf4, 0x00, 0x18, /* j .Lccdone */ - /* .Lcc1: */ - 0xa7, 0xfa, 0xfd, 0x00, /* ahi %r15, -0x300 */ - 0x50, 0x00, 0xf2, 0x04, /* st %r0, 0x204(%r15) */ - 0xa7, 0x08, 0x10, 0x00, /* lhi %r0, 0x1000 */ - 0xa7, 0xf4, 0x00, 0x10, /* j .Lccdone */ - /* .Lcc2: */ - 0xa7, 0xfa, 0xfd, 0x00, /* ahi %r15, -0x300 */ - 0x50, 0x00, 0xf2, 0x04, /* st %r0, 0x204(%r15) */ - 0xa7, 0x08, 0x20, 0x00, /* lhi %r0, 0x2000 */ - 0xa7, 0xf4, 0x00, 0x08, /* j .Lccdone */ - /* .Lcc3: */ - 0xa7, 0xfa, 0xfd, 0x00, /* ahi %r15, -0x300 */ - 0x50, 0x00, 0xf2, 0x04, /* st %r0, 0x204(%r15) */ - 0xa7, 0x08, 0x30, 0x00, /* lhi %r0, 0x3000 */ - /* .Lccdone: */ - 0x50, 0x10, 0xf2, 0x0c, /* st %r1, 0x20c(%r15) */ - 0x50, 0x20, 0xf2, 0x14, /* st %r2, 0x214(%r15) */ - 0x50, 0x30, 0xf2, 0x1c, /* st %r3, 0x21c(%r15) */ - 0x50, 0x40, 0xf2, 0x24, /* st %r4, 0x224(%r15) */ - 0x50, 0x50, 0xf2, 0x2c, /* st %r5, 0x22c(%r15) */ - 0x50, 0x60, 0xf2, 0x34, /* st %r6, 0x234(%r15) */ - 0x50, 0x70, 0xf2, 0x3c, /* st %r7, 0x23c(%r15) */ - 0x50, 0x80, 0xf2, 0x44, /* st %r8, 0x244(%r15) */ - 0x50, 0x90, 0xf2, 0x4c, /* st %r9, 0x24c(%r15) */ - 0x50, 0xa0, 0xf2, 0x54, /* st %r10, 0x254(%r15) */ - 0x50, 0xb0, 0xf2, 0x5c, /* st %r11, 0x25c(%r15) */ - 0x50, 0xc0, 0xf2, 0x64, /* st %r12, 0x264(%r15) */ - 0x50, 0xd0, 0xf2, 0x6c, /* st %r13, 0x26c(%r15) */ - 0x50, 0xe0, 0xf2, 0x74, /* st %r14, 0x274(%r15) */ - /* Compute original value of %r15 and store it. We use ahi instead - of la to preserve the whole value, and not just the low 31 bits. - This is not particularly important here, but essential in the - zarch case where someone might be using the high word of %r15 - as an extra register. */ - 0x18, 0x1f, /* lr %r1, %r15 */ - 0xa7, 0x1a, 0x03, 0x00, /* ahi %r1, 0x300 */ - 0x50, 0x10, 0xf2, 0x7c, /* st %r1, 0x27c(%r15) */ -}; - -/* Code sequence saving GPRs for 31-bit target with high GPRs and for 64-bit - target. Same as above, except this time we can use load/store multiple, - since the 64-bit regs are tightly packed. */ - -static const unsigned char s390_ft_entry_gpr_zarch[] = { - 0xa7, 0x14, 0x00, 0x21, /* jo .Lcc3 */ - 0xa7, 0x24, 0x00, 0x16, /* jh .Lcc2 */ - 0xa7, 0x44, 0x00, 0x0b, /* jl .Lcc1 */ - /* CC = 0 */ - 0xa7, 0xfb, 0xfd, 0x00, /* aghi %r15, -0x300 */ - 0xeb, 0x0e, 0xf2, 0x00, 0x00, 0x24, /* stmg %r0, %r14, 0x200(%r15) */ - 0xa7, 0x08, 0x00, 0x00, /* lhi %r0, 0 */ - 0xa7, 0xf4, 0x00, 0x1b, /* j .Lccdone */ - /* .Lcc1: */ - 0xa7, 0xfb, 0xfd, 0x00, /* aghi %r15, -0x300 */ - 0xeb, 0x0e, 0xf2, 0x00, 0x00, 0x24, /* stmg %r0, %r14, 0x200(%r15) */ - 0xa7, 0x08, 0x10, 0x00, /* lhi %r0, 0x1000 */ - 0xa7, 0xf4, 0x00, 0x12, /* j .Lccdone */ - /* .Lcc2: */ - 0xa7, 0xfb, 0xfd, 0x00, /* aghi %r15, -0x300 */ - 0xeb, 0x0e, 0xf2, 0x00, 0x00, 0x24, /* stmg %r0, %r14, 0x200(%r15) */ - 0xa7, 0x08, 0x20, 0x00, /* lhi %r0, 0x2000 */ - 0xa7, 0xf4, 0x00, 0x09, /* j .Lccdone */ - /* .Lcc3: */ - 0xa7, 0xfb, 0xfd, 0x00, /* aghi %r15, -0x300 */ - 0xeb, 0x0e, 0xf2, 0x00, 0x00, 0x24, /* stmg %r0, %r14, 0x200(%r15) */ - 0xa7, 0x08, 0x30, 0x00, /* lhi %r0, 0x3000 */ - /* .Lccdone: */ - 0xb9, 0x04, 0x00, 0x1f, /* lgr %r1, %r15 */ - 0xa7, 0x1b, 0x03, 0x00, /* aghi %r1, 0x300 */ - 0xe3, 0x10, 0xf2, 0x78, 0x00, 0x24, /* stg %r1, 0x278(%r15) */ -}; - -/* Code sequence saving ARs, PSWM and FPC. PSWM has to be assembled from - current PSWM (read by epsw) and CC from entry (in %r0). */ - -static const unsigned char s390_ft_entry_misc[] = { - 0x9b, 0x0f, 0xf2, 0x80, /* stam %a0, %a15, 0x20(%%r15) */ - 0xb9, 0x8d, 0x00, 0x23, /* epsw %r2, %r3 */ - 0xa7, 0x18, 0xcf, 0xff, /* lhi %r1, ~0x3000 */ - 0x14, 0x21, /* nr %r2, %r1 */ - 0x16, 0x20, /* or %r2, %r0 */ - 0x50, 0x20, 0xf2, 0xc0, /* st %r2, 0x2c0(%r15) */ - 0x50, 0x30, 0xf2, 0xc4, /* st %r3, 0x2c4(%r15) */ - 0xb2, 0x9c, 0xf2, 0xd0, /* stfpc 0x2d0(%r15) */ -}; - -/* Code sequence saving FRs, used if VX not supported. */ - -static const unsigned char s390_ft_entry_fr[] = { - 0x60, 0x00, 0xf0, 0x00, /* std %f0, 0x000(%r15) */ - 0x60, 0x10, 0xf0, 0x10, /* std %f1, 0x010(%r15) */ - 0x60, 0x20, 0xf0, 0x20, /* std %f2, 0x020(%r15) */ - 0x60, 0x30, 0xf0, 0x30, /* std %f3, 0x030(%r15) */ - 0x60, 0x40, 0xf0, 0x40, /* std %f4, 0x040(%r15) */ - 0x60, 0x50, 0xf0, 0x50, /* std %f5, 0x050(%r15) */ - 0x60, 0x60, 0xf0, 0x60, /* std %f6, 0x060(%r15) */ - 0x60, 0x70, 0xf0, 0x70, /* std %f7, 0x070(%r15) */ - 0x60, 0x80, 0xf0, 0x80, /* std %f8, 0x080(%r15) */ - 0x60, 0x90, 0xf0, 0x90, /* std %f9, 0x090(%r15) */ - 0x60, 0xa0, 0xf0, 0xa0, /* std %f10, 0x0a0(%r15) */ - 0x60, 0xb0, 0xf0, 0xb0, /* std %f11, 0x0b0(%r15) */ - 0x60, 0xc0, 0xf0, 0xc0, /* std %f12, 0x0c0(%r15) */ - 0x60, 0xd0, 0xf0, 0xd0, /* std %f13, 0x0d0(%r15) */ - 0x60, 0xe0, 0xf0, 0xe0, /* std %f14, 0x0e0(%r15) */ - 0x60, 0xf0, 0xf0, 0xf0, /* std %f15, 0x0f0(%r15) */ -}; - -/* Code sequence saving VRs, used if VX not supported. */ - -static const unsigned char s390_ft_entry_vr[] = { - 0xe7, 0x0f, 0xf0, 0x00, 0x00, 0x3e, /* vstm %v0, %v15, 0x000(%r15) */ - 0xe7, 0x0f, 0xf1, 0x00, 0x0c, 0x3e, /* vstm %v16, %v31, 0x100(%r15) */ -}; - -/* Code sequence doing the collection call for 31-bit target. %r1 contains - the address of the literal pool. */ - -static const unsigned char s390_ft_main_31[] = { - /* Load the literals into registers. */ - 0x58, 0x50, 0x10, 0x00, /* l %r5, 0x0(%r1) */ - 0x58, 0x20, 0x10, 0x04, /* l %r2, 0x4(%r1) */ - 0x58, 0x40, 0x10, 0x08, /* l %r4, 0x8(%r1) */ - 0x58, 0x60, 0x10, 0x0c, /* l %r6, 0xc(%r1) */ - /* Save original PSWA (tracepoint address | 0x80000000). */ - 0x50, 0x50, 0xf2, 0xcc, /* st %r5, 0x2cc(%r15) */ - /* Construct a collecting_t object at %r15+0x2e0. */ - 0x50, 0x20, 0xf2, 0xe0, /* st %r2, 0x2e0(%r15) */ - 0x9b, 0x00, 0xf2, 0xe4, /* stam %a0, %a0, 0x2e4(%r15) */ - /* Move its address to %r0. */ - 0x41, 0x00, 0xf2, 0xe0, /* la %r0, 0x2e0(%r15) */ - /* Take the lock. */ - /* .Lloop: */ - 0xa7, 0x18, 0x00, 0x00, /* lhi %r1, 0 */ - 0xba, 0x10, 0x60, 0x00, /* cs %r1, %r0, 0(%r6) */ - 0xa7, 0x74, 0xff, 0xfc, /* jne .Lloop */ - /* Address of the register save block to %r3. */ - 0x18, 0x3f, /* lr %r3, %r15 */ - /* Make a stack frame, so that we can call the collector. */ - 0xa7, 0xfa, 0xff, 0xa0, /* ahi %r15, -0x60 */ - /* Call it. */ - 0x0d, 0xe4, /* basr %r14, %r4 */ - /* And get rid of the stack frame again. */ - 0x41, 0xf0, 0xf0, 0x60, /* la %r15, 0x60(%r15) */ - /* Leave the lock. */ - 0x07, 0xf0, /* br %r0 */ - 0xa7, 0x18, 0x00, 0x00, /* lhi %r1, 0 */ - 0x50, 0x10, 0x60, 0x00, /* st %t1, 0(%r6) */ -}; - -/* Code sequence doing the collection call for 64-bit target. %r1 contains - the address of the literal pool. */ - -static const unsigned char s390_ft_main_64[] = { - /* Load the literals into registers. */ - 0xe3, 0x50, 0x10, 0x00, 0x00, 0x04, /* lg %r5, 0x00(%r1) */ - 0xe3, 0x20, 0x10, 0x08, 0x00, 0x04, /* lg %r2, 0x08(%r1) */ - 0xe3, 0x40, 0x10, 0x10, 0x00, 0x04, /* lg %r4, 0x10(%r1) */ - 0xe3, 0x60, 0x10, 0x18, 0x00, 0x04, /* lg %r6, 0x18(%r1) */ - /* Save original PSWA (tracepoint address). */ - 0xe3, 0x50, 0xf2, 0xc8, 0x00, 0x24, /* stg %r5, 0x2c8(%r15) */ - /* Construct a collecting_t object at %r15+0x2e0. */ - 0xe3, 0x20, 0xf2, 0xe0, 0x00, 0x24, /* stg %r2, 0x2e0(%r15) */ - 0x9b, 0x01, 0xf2, 0xe8, /* stam %a0, %a1, 0x2e8(%r15) */ - /* Move its address to %r0. */ - 0x41, 0x00, 0xf2, 0xe0, /* la %r0, 0x2e0(%r15) */ - /* Take the lock. */ - /* .Lloop: */ - 0xa7, 0x19, 0x00, 0x00, /* lghi %r1, 0 */ - 0xeb, 0x10, 0x60, 0x00, 0x00, 0x30, /* csg %r1, %r0, 0(%r6) */ - 0xa7, 0x74, 0xff, 0xfb, /* jne .Lloop */ - /* Address of the register save block to %r3. */ - 0xb9, 0x04, 0x00, 0x3f, /* lgr %r3, %r15 */ - /* Make a stack frame, so that we can call the collector. */ - 0xa7, 0xfb, 0xff, 0x60, /* aghi %r15, -0xa0 */ - /* Call it. */ - 0x0d, 0xe4, /* basr %r14, %r4 */ - /* And get rid of the stack frame again. */ - 0x41, 0xf0, 0xf0, 0xa0, /* la %r15, 0xa0(%r15) */ - /* Leave the lock. */ - 0x07, 0xf0, /* br %r0 */ - 0xa7, 0x19, 0x00, 0x00, /* lghi %r1, 0 */ - 0xe3, 0x10, 0x60, 0x00, 0x00, 0x24, /* stg %t1, 0(%r6) */ -}; - -/* Code sequence restoring FRs, for targets with no VX support. */ - -static const unsigned char s390_ft_exit_fr[] = { - 0x68, 0x00, 0xf0, 0x00, /* ld %f0, 0x000(%r15) */ - 0x68, 0x10, 0xf0, 0x10, /* ld %f1, 0x010(%r15) */ - 0x68, 0x20, 0xf0, 0x20, /* ld %f2, 0x020(%r15) */ - 0x68, 0x30, 0xf0, 0x30, /* ld %f3, 0x030(%r15) */ - 0x68, 0x40, 0xf0, 0x40, /* ld %f4, 0x040(%r15) */ - 0x68, 0x50, 0xf0, 0x50, /* ld %f5, 0x050(%r15) */ - 0x68, 0x60, 0xf0, 0x60, /* ld %f6, 0x060(%r15) */ - 0x68, 0x70, 0xf0, 0x70, /* ld %f7, 0x070(%r15) */ - 0x68, 0x80, 0xf0, 0x80, /* ld %f8, 0x080(%r15) */ - 0x68, 0x90, 0xf0, 0x90, /* ld %f9, 0x090(%r15) */ - 0x68, 0xa0, 0xf0, 0xa0, /* ld %f10, 0x0a0(%r15) */ - 0x68, 0xb0, 0xf0, 0xb0, /* ld %f11, 0x0b0(%r15) */ - 0x68, 0xc0, 0xf0, 0xc0, /* ld %f12, 0x0c0(%r15) */ - 0x68, 0xd0, 0xf0, 0xd0, /* ld %f13, 0x0d0(%r15) */ - 0x68, 0xe0, 0xf0, 0xe0, /* ld %f14, 0x0e0(%r15) */ - 0x68, 0xf0, 0xf0, 0xf0, /* ld %f15, 0x0f0(%r15) */ -}; - -/* Code sequence restoring VRs. */ - -static const unsigned char s390_ft_exit_vr[] = { - 0xe7, 0x0f, 0xf0, 0x00, 0x00, 0x36, /* vlm %v0, %v15, 0x000(%r15) */ - 0xe7, 0x0f, 0xf1, 0x00, 0x0c, 0x36, /* vlm %v16, %v31, 0x100(%r15) */ -}; - -/* Code sequence restoring misc registers. As for PSWM, only CC should be - modified by C code, so we use the alr instruction to restore it by - manufacturing an operand that'll result in the original flags. */ - -static const unsigned char s390_ft_exit_misc[] = { - 0xb2, 0x9d, 0xf2, 0xd0, /* lfpc 0x2d0(%r15) */ - 0x58, 0x00, 0xf2, 0xc0, /* l %r0, 0x2c0(%r15) */ - /* Extract CC to high 2 bits of %r0. */ - 0x88, 0x00, 0x00, 0x0c, /* srl %r0, 12 */ - 0x89, 0x00, 0x00, 0x1e, /* sll %r0, 30 */ - /* Add %r0 to itself. Result will be nonzero iff CC bit 0 is set, and - will have carry iff CC bit 1 is set - resulting in the same flags - as the original. */ - 0x1e, 0x00, /* alr %r0, %r0 */ - 0x9a, 0x0f, 0xf2, 0x80, /* lam %a0, %a15, 0x280(%r15) */ -}; - -/* Code sequence restoring GPRs, for 31-bit targets with no high GPRs. */ - -static const unsigned char s390_ft_exit_gpr_esa[] = { - 0x58, 0x00, 0xf2, 0x04, /* l %r0, 0x204(%r15) */ - 0x58, 0x10, 0xf2, 0x0c, /* l %r1, 0x20c(%r15) */ - 0x58, 0x20, 0xf2, 0x14, /* l %r2, 0x214(%r15) */ - 0x58, 0x30, 0xf2, 0x1c, /* l %r3, 0x21c(%r15) */ - 0x58, 0x40, 0xf2, 0x24, /* l %r4, 0x224(%r15) */ - 0x58, 0x50, 0xf2, 0x2c, /* l %r5, 0x22c(%r15) */ - 0x58, 0x60, 0xf2, 0x34, /* l %r6, 0x234(%r15) */ - 0x58, 0x70, 0xf2, 0x3c, /* l %r7, 0x23c(%r15) */ - 0x58, 0x80, 0xf2, 0x44, /* l %r8, 0x244(%r15) */ - 0x58, 0x90, 0xf2, 0x4c, /* l %r9, 0x24c(%r15) */ - 0x58, 0xa0, 0xf2, 0x54, /* l %r10, 0x254(%r15) */ - 0x58, 0xb0, 0xf2, 0x5c, /* l %r11, 0x25c(%r15) */ - 0x58, 0xc0, 0xf2, 0x64, /* l %r12, 0x264(%r15) */ - 0x58, 0xd0, 0xf2, 0x6c, /* l %r13, 0x26c(%r15) */ - 0x58, 0xe0, 0xf2, 0x74, /* l %r14, 0x274(%r15) */ - 0x58, 0xf0, 0xf2, 0x7c, /* l %r15, 0x27c(%r15) */ -}; - -/* Code sequence restoring GPRs, for 64-bit targets and 31-bit targets - with high GPRs. */ - -static const unsigned char s390_ft_exit_gpr_zarch[] = { - 0xeb, 0x0f, 0xf2, 0x00, 0x00, 0x04, /* lmg %r0, %r15, 0x200(%r15) */ -}; - -/* Writes instructions to target, updating the to pointer. */ - -static void -append_insns (CORE_ADDR *to, size_t len, const unsigned char *buf) -{ - target_write_memory (*to, buf, len); - *to += len; -} - -/* Relocates an instruction from oldloc to *to, updating to. */ - -static int -s390_relocate_instruction (CORE_ADDR *to, CORE_ADDR oldloc, int is_64) -{ - gdb_byte buf[6]; - int ilen; - int op2; - /* 0: no fixup, 1: PC16DBL fixup, 2: PC32DBL fixup. */ - int mode = 0; - int is_bras = 0; - read_inferior_memory (oldloc, buf, sizeof buf); - if (buf[0] < 0x40) - ilen = 2; - else if (buf[0] < 0xc0) - ilen = 4; - else - ilen = 6; - switch (buf[0]) - { - case 0x05: /* BALR */ - case 0x0c: /* BASSM */ - case 0x0d: /* BASR */ - case 0x45: /* BAL */ - case 0x4d: /* BAS */ - /* These save a return address and mess around with registers. - We can't relocate them. */ - return 1; - case 0x84: /* BRXH */ - case 0x85: /* BRXLE */ - mode = 1; - break; - case 0xa7: - op2 = buf[1] & 0xf; - /* BRC, BRAS, BRCT, BRCTG */ - if (op2 >= 4 && op2 <= 7) - mode = 1; - /* BRAS */ - if (op2 == 5) - is_bras = 1; - break; - case 0xc0: - op2 = buf[1] & 0xf; - /* LARL, BRCL, BRASL */ - if (op2 == 0 || op2 == 4 || op2 == 5) - mode = 2; - /* BRASL */ - if (op2 == 5) - is_bras = 1; - break; - case 0xc4: - case 0xc6: - /* PC-relative addressing instructions. */ - mode = 2; - break; - case 0xc5: /* BPRP */ - case 0xc7: /* BPP */ - /* Branch prediction - just skip it. */ - return 0; - case 0xcc: - op2 = buf[1] & 0xf; - /* BRCTH */ - if (op2 == 6) - mode = 2; - break; - case 0xec: - op2 = buf[5]; - switch (op2) - { - case 0x44: /* BRXHG */ - case 0x45: /* BRXLG */ - case 0x64: /* CGRJ */ - case 0x65: /* CLGRJ */ - case 0x76: /* CRJ */ - case 0x77: /* CLRJ */ - mode = 1; - break; - } - break; - } - - if (mode != 0) - { - /* We'll have to relocate an instruction with a PC-relative field. - First, compute the target. */ - int64_t loffset = 0; - CORE_ADDR target; - if (mode == 1) - { - int16_t soffset = 0; - memcpy (&soffset, buf + 2, 2); - loffset = soffset; - } - else if (mode == 2) - { - int32_t soffset = 0; - memcpy (&soffset, buf + 2, 4); - loffset = soffset; - } - target = oldloc + loffset * 2; - if (!is_64) - target &= 0x7fffffff; - - if (is_bras) - { - /* BRAS or BRASL was used. We cannot just relocate those, since - they save the return address in a register. We can, however, - replace them with a LARL+JG sequence. */ - - /* Make the LARL. */ - int32_t soffset; - buf[0] = 0xc0; - buf[1] &= 0xf0; - loffset = oldloc + ilen - *to; - loffset >>= 1; - soffset = loffset; - if (soffset != loffset && is_64) - return 1; - memcpy (buf + 2, &soffset, 4); - append_insns (to, 6, buf); - - /* Note: this is not fully correct. In 31-bit mode, LARL will write - an address with the top bit 0, while BRAS/BRASL will write it - with top bit 1. It should not matter much, since linux compilers - use BR and not BSM to return from functions, but it could confuse - some poor stack unwinder. */ - - /* We'll now be writing a JG. */ - mode = 2; - buf[0] = 0xc0; - buf[1] = 0xf4; - ilen = 6; - } - - /* Compute the new offset and write it to the buffer. */ - loffset = target - *to; - loffset >>= 1; - - if (mode == 1) - { - int16_t soffset = loffset; - if (soffset != loffset) - return 1; - memcpy (buf + 2, &soffset, 2); - } - else if (mode == 2) - { - int32_t soffset = loffset; - if (soffset != loffset && is_64) - return 1; - memcpy (buf + 2, &soffset, 4); - } - } - append_insns (to, ilen, buf); - return 0; -} - -/* Implementation of linux_target_ops method - "install_fast_tracepoint_jump_pad". */ - -static int -s390_install_fast_tracepoint_jump_pad (CORE_ADDR tpoint, - CORE_ADDR tpaddr, - CORE_ADDR collector, - CORE_ADDR lockaddr, - ULONGEST orig_size, - CORE_ADDR *jump_entry, - CORE_ADDR *trampoline, - ULONGEST *trampoline_size, - unsigned char *jjump_pad_insn, - ULONGEST *jjump_pad_insn_size, - CORE_ADDR *adjusted_insn_addr, - CORE_ADDR *adjusted_insn_addr_end, - char *err) -{ - int i; - int64_t loffset; - int32_t offset; - unsigned char jbuf[6] = { 0xc0, 0xf4, 0, 0, 0, 0 }; /* jg ... */ - CORE_ADDR buildaddr = *jump_entry; -#ifdef __s390x__ - struct regcache *regcache = get_thread_regcache (current_thread, 0); - int is_64 = register_size (regcache->tdesc, 0) == 8; - int is_zarch = is_64 || have_hwcap_s390_high_gprs; - int has_vx = have_hwcap_s390_vx; -#else - int is_64 = 0, is_zarch = 0, has_vx = 0; -#endif - CORE_ADDR literals[4] = { - tpaddr, - tpoint, - collector, - lockaddr, - }; - - /* First, store the GPRs. */ - if (is_zarch) - append_insns (&buildaddr, sizeof s390_ft_entry_gpr_zarch, - s390_ft_entry_gpr_zarch); - else - append_insns (&buildaddr, sizeof s390_ft_entry_gpr_esa, - s390_ft_entry_gpr_esa); - - /* Second, misc registers (ARs, PSWM, FPC). PSWA will be stored below. */ - append_insns (&buildaddr, sizeof s390_ft_entry_misc, s390_ft_entry_misc); - - /* Third, FRs or VRs. */ - if (has_vx) - append_insns (&buildaddr, sizeof s390_ft_entry_vr, s390_ft_entry_vr); - else - append_insns (&buildaddr, sizeof s390_ft_entry_fr, s390_ft_entry_fr); - - /* Now, the main part of code - store PSWA, take lock, call collector, - leave lock. First, we'll need to fetch 4 literals. */ - if (is_64) { - unsigned char buf[] = { - 0x07, 0x07, /* nopr %r7 */ - 0x07, 0x07, /* nopr %r7 */ - 0x07, 0x07, /* nopr %r7 */ - 0xa7, 0x15, 0x00, 0x12, /* bras %r1, .Lend */ - 0, 0, 0, 0, 0, 0, 0, 0, /* tpaddr */ - 0, 0, 0, 0, 0, 0, 0, 0, /* tpoint */ - 0, 0, 0, 0, 0, 0, 0, 0, /* collector */ - 0, 0, 0, 0, 0, 0, 0, 0, /* lockaddr */ - /* .Lend: */ - }; - /* Find the proper start place in buf, so that literals will be - aligned. */ - int bufpos = (buildaddr + 2) & 7; - /* Stuff the literals into the buffer. */ - for (i = 0; i < 4; i++) { - uint64_t lit = literals[i]; - memcpy (&buf[sizeof buf - 32 + i * 8], &lit, 8); - } - append_insns (&buildaddr, sizeof buf - bufpos, buf + bufpos); - append_insns (&buildaddr, sizeof s390_ft_main_64, s390_ft_main_64); - } else { - unsigned char buf[] = { - 0x07, 0x07, /* nopr %r7 */ - 0xa7, 0x15, 0x00, 0x0a, /* bras %r1, .Lend */ - 0, 0, 0, 0, /* tpaddr */ - 0, 0, 0, 0, /* tpoint */ - 0, 0, 0, 0, /* collector */ - 0, 0, 0, 0, /* lockaddr */ - /* .Lend: */ - }; - /* Find the proper start place in buf, so that literals will be - aligned. */ - int bufpos = (buildaddr + 2) & 3; - /* First literal will be saved as the PSWA, make sure it has the high bit - set. */ - literals[0] |= 0x80000000; - /* Stuff the literals into the buffer. */ - for (i = 0; i < 4; i++) { - uint32_t lit = literals[i]; - memcpy (&buf[sizeof buf - 16 + i * 4], &lit, 4); - } - append_insns (&buildaddr, sizeof buf - bufpos, buf + bufpos); - append_insns (&buildaddr, sizeof s390_ft_main_31, s390_ft_main_31); - } - - /* Restore FRs or VRs. */ - if (has_vx) - append_insns (&buildaddr, sizeof s390_ft_exit_vr, s390_ft_exit_vr); - else - append_insns (&buildaddr, sizeof s390_ft_exit_fr, s390_ft_exit_fr); - - /* Restore misc registers. */ - append_insns (&buildaddr, sizeof s390_ft_exit_misc, s390_ft_exit_misc); - - /* Restore the GPRs. */ - if (is_zarch) - append_insns (&buildaddr, sizeof s390_ft_exit_gpr_zarch, - s390_ft_exit_gpr_zarch); - else - append_insns (&buildaddr, sizeof s390_ft_exit_gpr_esa, - s390_ft_exit_gpr_esa); - - /* Now, adjust the original instruction to execute in the jump - pad. */ - *adjusted_insn_addr = buildaddr; - if (s390_relocate_instruction (&buildaddr, tpaddr, is_64)) - { - sprintf (err, "E.Could not relocate instruction for tracepoint."); - return 1; - } - *adjusted_insn_addr_end = buildaddr; - - /* Finally, write a jump back to the program. */ - - loffset = (tpaddr + orig_size) - buildaddr; - loffset >>= 1; - offset = loffset; - if (is_64 && offset != loffset) - { - sprintf (err, - "E.Jump back from jump pad too far from tracepoint " - "(offset 0x%" PRIx64 " > int33).", loffset); - return 1; - } - memcpy (jbuf + 2, &offset, 4); - append_insns (&buildaddr, sizeof jbuf, jbuf); - - /* The jump pad is now built. Wire in a jump to our jump pad. This - is always done last (by our caller actually), so that we can - install fast tracepoints with threads running. This relies on - the agent's atomic write support. */ - loffset = *jump_entry - tpaddr; - loffset >>= 1; - offset = loffset; - if (is_64 && offset != loffset) - { - sprintf (err, - "E.Jump back from jump pad too far from tracepoint " - "(offset 0x%" PRIx64 " > int33).", loffset); - return 1; - } - memcpy (jbuf + 2, &offset, 4); - memcpy (jjump_pad_insn, jbuf, sizeof jbuf); - *jjump_pad_insn_size = sizeof jbuf; - - /* Return the end address of our pad. */ - *jump_entry = buildaddr; - - return 0; -} - -/* Implementation of linux_target_ops method - "get_min_fast_tracepoint_insn_len". */ - -static int -s390_get_min_fast_tracepoint_insn_len (void) -{ - /* We only support using 6-byte jumps to reach the tracepoint code. - If the tracepoint buffer were allocated sufficiently close (64kiB) - to the executable code, and the traced instruction itself was close - enough to the beginning, we could use 4-byte jumps, but this doesn't - seem to be worth the effort. */ - return 6; -} - -/* Implementation of linux_target_ops method "get_ipa_tdesc_idx". */ - -static int -s390_get_ipa_tdesc_idx (void) -{ - struct regcache *regcache = get_thread_regcache (current_thread, 0); - const struct target_desc *tdesc = regcache->tdesc; - -#ifdef __s390x__ - if (tdesc == tdesc_s390x_linux64) - return S390_TDESC_64; - if (tdesc == tdesc_s390x_linux64v1) - return S390_TDESC_64V1; - if (tdesc == tdesc_s390x_linux64v2) - return S390_TDESC_64V2; - if (tdesc == tdesc_s390x_te_linux64) - return S390_TDESC_TE; - if (tdesc == tdesc_s390x_vx_linux64) - return S390_TDESC_VX; - if (tdesc == tdesc_s390x_tevx_linux64) - return S390_TDESC_TEVX; - if (tdesc == tdesc_s390x_gs_linux64) - return S390_TDESC_GS; -#endif - - if (tdesc == tdesc_s390_linux32) - return S390_TDESC_32; - if (tdesc == tdesc_s390_linux32v1) - return S390_TDESC_32V1; - if (tdesc == tdesc_s390_linux32v2) - return S390_TDESC_32V2; - if (tdesc == tdesc_s390_linux64) - return S390_TDESC_64; - if (tdesc == tdesc_s390_linux64v1) - return S390_TDESC_64V1; - if (tdesc == tdesc_s390_linux64v2) - return S390_TDESC_64V2; - if (tdesc == tdesc_s390_te_linux64) - return S390_TDESC_TE; - if (tdesc == tdesc_s390_vx_linux64) - return S390_TDESC_VX; - if (tdesc == tdesc_s390_tevx_linux64) - return S390_TDESC_TEVX; - if (tdesc == tdesc_s390_gs_linux64) - return S390_TDESC_GS; - - return 0; -} - -/* Appends given buffer to current_insn_ptr in the target. */ - -static void -add_insns (const unsigned char *start, int len) -{ - CORE_ADDR buildaddr = current_insn_ptr; - - if (debug_threads) - debug_printf ("Adding %d bytes of insn at %s\n", - len, paddress (buildaddr)); - - append_insns (&buildaddr, len, start); - current_insn_ptr = buildaddr; -} - -/* Register usage in emit: - - - %r0, %r1: temp - - %r2: top of stack (high word for 31-bit) - - %r3: low word of top of stack (for 31-bit) - - %r4, %r5: temp - - %r6, %r7, %r8: don't use - - %r9: saved arg1 - - %r10: saved arg2 - - %r11: frame pointer - - %r12: saved top of stack for void_call_2 (high word for 31-bit) - - %r13: low word of saved top of stack (for 31-bit) - - %r14: return address for calls - - %r15: stack pointer - - */ - -/* The "emit_prologue" emit_ops method for s390. */ - -static void -s390_emit_prologue (void) -{ - static const unsigned char buf[] = { - 0x90, 0x9f, 0xf0, 0x24, /* stm %r9, %r15, 0x24(%r15) */ - 0x18, 0x92, /* lr %r9, %r2 */ - 0x18, 0xa3, /* lr %r10, %r3 */ - 0x18, 0xbf, /* lr %r11, %r15 */ - }; - add_insns (buf, sizeof buf); -} - -/* The "emit_epilogue" emit_ops method for s390. */ - -static void -s390_emit_epilogue (void) -{ - static const unsigned char buf[] = { - 0x90, 0x23, 0xa0, 0x00, /* stm %r2, %r3, 0(%r10) */ - 0xa7, 0x28, 0x00, 0x00, /* lhi %r2, 0 */ - 0x98, 0x9f, 0xb0, 0x24, /* lm %r9, %r15, 0x24(%r11) */ - 0x07, 0xfe, /* br %r14 */ - }; - add_insns (buf, sizeof buf); -} - -/* The "emit_add" emit_ops method for s390. */ - -static void -s390_emit_add (void) -{ - static const unsigned char buf[] = { - 0x5e, 0x30, 0xf0, 0x04, /* al %r3, 4(%r15) */ - 0xe3, 0x20, 0xf0, 0x00, 0x00, 0x98, /* al %r2, 0(%r15) */ - 0x41, 0xf0, 0xf0, 0x08, /* la %r15, 8(%r15) */ - }; - add_insns (buf, sizeof buf); -} - -/* The "emit_sub" emit_ops method for s390. */ - -static void -s390_emit_sub (void) -{ - static const unsigned char buf[] = { - 0x98, 0x45, 0xf0, 0x00, /* lm %r4, %r5, 0(%r15) */ - 0x1f, 0x53, /* slr %r5, %r3 */ - 0xb9, 0x99, 0x00, 0x42, /* slbr %r4, %r2 */ - 0x41, 0xf0, 0xf0, 0x08, /* la %r15, 8(%r15) */ - 0x18, 0x35, /* lr %r3, %r5 */ - 0x18, 0x24, /* lr %r2, %r4 */ - }; - add_insns (buf, sizeof buf); -} - -/* The "emit_mul" emit_ops method for s390. */ - -static void -s390_emit_mul (void) -{ - emit_error = 1; -} - -/* The "emit_lsh" emit_ops method for s390. */ - -static void -s390_emit_lsh (void) -{ - static const unsigned char buf[] = { - 0x18, 0x43, /* lr %r4, %r3 */ - 0x98, 0x23, 0xf0, 0x00, /* lm %r2, %r3, 0(%r15) */ - 0x8d, 0x20, 0x40, 0x00, /* sldl %r2, 0(%r4) */ - 0x41, 0xf0, 0xf0, 0x08, /* la %r15, 8(%r15) */ - }; - add_insns (buf, sizeof buf); -} - -/* The "emit_rsh_signed" emit_ops method for s390. */ - -static void -s390_emit_rsh_signed (void) -{ - static const unsigned char buf[] = { - 0x18, 0x43, /* lr %r4, %r3 */ - 0x98, 0x23, 0xf0, 0x00, /* lm %r2, %r3, 0(%r15) */ - 0x8e, 0x20, 0x40, 0x00, /* srda %r2, 0(%r4) */ - 0x41, 0xf0, 0xf0, 0x08, /* la %r15, 8(%r15) */ - }; - add_insns (buf, sizeof buf); -} - -/* The "emit_rsh_unsigned" emit_ops method for s390. */ - -static void -s390_emit_rsh_unsigned (void) -{ - static const unsigned char buf[] = { - 0x18, 0x43, /* lr %r4, %r3 */ - 0x98, 0x23, 0xf0, 0x00, /* lm %r2, %r3, 0(%r15) */ - 0x8c, 0x20, 0x40, 0x00, /* srdl %r2, 0(%r4) */ - 0x41, 0xf0, 0xf0, 0x08, /* la %r15, 8(%r15) */ - }; - add_insns (buf, sizeof buf); -} - -/* The "emit_ext" emit_ops method for s390. */ - -static void -s390_emit_ext (int arg) -{ - unsigned char buf[] = { - 0x8d, 0x20, 0x00, (unsigned char) (64 - arg), /* sldl %r2, <64-arg> */ - 0x8e, 0x20, 0x00, (unsigned char) (64 - arg), /* srda %r2, <64-arg> */ - }; - add_insns (buf, sizeof buf); -} - -/* The "emit_log_not" emit_ops method for s390. */ - -static void -s390_emit_log_not (void) -{ - static const unsigned char buf[] = { - 0x16, 0x23, /* or %r2, %r3 */ - 0xa7, 0x28, 0x00, 0x00, /* lhi %r2, 0 */ - 0xa7, 0x38, 0x00, 0x00, /* lhi %r3, 0 */ - 0xa7, 0x74, 0x00, 0x04, /* jne .Lskip */ - 0xa7, 0x38, 0x00, 0x01, /* lhi %r3, 1 */ - /* .Lskip: */ - }; - add_insns (buf, sizeof buf); -} - -/* The "emit_bit_and" emit_ops method for s390. */ - -static void -s390_emit_bit_and (void) -{ - static const unsigned char buf[] = { - 0x54, 0x20, 0xf0, 0x00, /* n %r2, 0(%r15) */ - 0x54, 0x30, 0xf0, 0x04, /* n %r3, 4(%r15) */ - 0x41, 0xf0, 0xf0, 0x08, /* la %r15, 8(%r15) */ - }; - add_insns (buf, sizeof buf); -} - -/* The "emit_bit_or" emit_ops method for s390. */ - -static void -s390_emit_bit_or (void) -{ - static const unsigned char buf[] = { - 0x56, 0x20, 0xf0, 0x00, /* o %r2, 0(%r15) */ - 0x56, 0x30, 0xf0, 0x04, /* o %r3, 4(%r15) */ - 0x41, 0xf0, 0xf0, 0x08, /* la %r15, 8(%r15) */ - }; - add_insns (buf, sizeof buf); -} - -/* The "emit_bit_xor" emit_ops method for s390. */ - -static void -s390_emit_bit_xor (void) -{ - static const unsigned char buf[] = { - 0x57, 0x20, 0xf0, 0x00, /* x %r2, 0(%r15) */ - 0x57, 0x30, 0xf0, 0x04, /* x %r3, 4(%r15) */ - 0x41, 0xf0, 0xf0, 0x08, /* la %r15, 8(%r15) */ - }; - add_insns (buf, sizeof buf); -} - -/* The "emit_bit_not" emit_ops method for s390. */ - -static void -s390_emit_bit_not (void) -{ - static const unsigned char buf[] = { - 0xa7, 0x48, 0xff, 0xff, /* lhi %r4, -1 */ - 0x17, 0x24, /* xr %r2, %r4 */ - 0x17, 0x34, /* xr %r3, %r4 */ - }; - add_insns (buf, sizeof buf); -} - -/* The "emit_equal" emit_ops method for s390. */ - -static void -s390_emit_equal (void) -{ - s390_emit_bit_xor (); - s390_emit_log_not (); -} - -/* The "emit_less_signed" emit_ops method for s390. */ - -static void -s390_emit_less_signed (void) -{ - static const unsigned char buf[] = { - 0x59, 0x20, 0xf0, 0x00, /* c %r2, 0(%r15) */ - 0xa7, 0x24, 0x00, 0x0c, /* jh .Lless */ - 0xa7, 0x44, 0x00, 0x06, /* jl .Lhigh */ - 0x55, 0x30, 0xf0, 0x04, /* cl %r3, 4(%r15) */ - 0xa7, 0x24, 0x00, 0x06, /* jh .Lless */ - /* .Lhigh: */ - 0xa7, 0x38, 0x00, 0x00, /* lhi %r3, 0 */ - 0xa7, 0xf4, 0x00, 0x04, /* j .Lend */ - /* .Lless: */ - 0xa7, 0x38, 0x00, 0x01, /* lhi %r3, 1 */ - /* .Lend: */ - 0xa7, 0x28, 0x00, 0x00, /* lhi %r2, 0 */ - 0x41, 0xf0, 0xf0, 0x08, /* la %r15, 8(%r15) */ - }; - add_insns (buf, sizeof buf); -} - -/* The "emit_less_unsigned" emit_ops method for s390. */ - -static void -s390_emit_less_unsigned (void) -{ - static const unsigned char buf[] = { - 0x55, 0x20, 0xf0, 0x00, /* cl %r2, 0(%r15) */ - 0xa7, 0x24, 0x00, 0x0c, /* jh .Lless */ - 0xa7, 0x44, 0x00, 0x06, /* jl .Lhigh */ - 0x55, 0x30, 0xf0, 0x04, /* cl %r3, 4(%r15) */ - 0xa7, 0x24, 0x00, 0x06, /* jh .Lless */ - /* .Lhigh: */ - 0xa7, 0x38, 0x00, 0x00, /* lhi %r3, 0 */ - 0xa7, 0xf4, 0x00, 0x04, /* j .Lend */ - /* .Lless: */ - 0xa7, 0x38, 0x00, 0x01, /* lhi %r3, 1 */ - /* .Lend: */ - 0xa7, 0x28, 0x00, 0x00, /* lhi %r2, 0 */ - 0x41, 0xf0, 0xf0, 0x08, /* la %r15, 8(%r15) */ - }; - add_insns (buf, sizeof buf); -} - -/* The "emit_ref" emit_ops method for s390. */ - -static void -s390_emit_ref (int size) -{ - static const unsigned char buf1[] = { - 0xa7, 0x28, 0x00, 0x00, /* lhi %r2, 0 */ - 0x43, 0x30, 0x30, 0x00, /* ic %r3, 0(%r3) */ - }; - static const unsigned char buf2[] = { - 0xa7, 0x28, 0x00, 0x00, /* lhi %r2, 0 */ - 0x48, 0x30, 0x30, 0x00, /* lh %r3, 0(%r3) */ - }; - static const unsigned char buf4[] = { - 0xa7, 0x28, 0x00, 0x00, /* lhi %r2, 0 */ - 0x58, 0x30, 0x30, 0x00, /* l %r3, 0(%r3) */ - }; - static const unsigned char buf8[] = { - 0x98, 0x23, 0x30, 0x00, /* lm %r2, %r3, 0(%r3) */ - }; - switch (size) - { - case 1: - add_insns (buf1, sizeof buf1); - break; - case 2: - add_insns (buf2, sizeof buf2); - break; - case 4: - add_insns (buf4, sizeof buf4); - break; - case 8: - add_insns (buf8, sizeof buf8); - break; - default: - emit_error = 1; - } -} - -/* The "emit_if_goto" emit_ops method for s390. */ - -static void -s390_emit_if_goto (int *offset_p, int *size_p) -{ - static const unsigned char buf[] = { - 0x16, 0x23, /* or %r2, %r3 */ - 0x98, 0x23, 0xf0, 0x00, /* lm %r2, %r3, 0(%r15) */ - 0x41, 0xf0, 0xf0, 0x08, /* la %r15, 8(%r15) */ - 0xc0, 0x74, 0x00, 0x00, 0x00, 0x00 /* jgne <fillme> */ - }; - add_insns (buf, sizeof buf); - if (offset_p) - *offset_p = 12; - if (size_p) - *size_p = 4; -} - -/* The "emit_goto" emit_ops method for s390 and s390x. */ - -static void -s390_emit_goto (int *offset_p, int *size_p) -{ - static const unsigned char buf[] = { - 0xc0, 0xf4, 0x00, 0x00, 0x00, 0x00, /* jg <fillme> */ - }; - add_insns (buf, sizeof buf); - if (offset_p) - *offset_p = 2; - if (size_p) - *size_p = 4; -} - -/* The "write_goto_address" emit_ops method for s390 and s390x. */ - -static void -s390_write_goto_address (CORE_ADDR from, CORE_ADDR to, int size) -{ - long diff = ((long) (to - (from - 2))) / 2; - int sdiff = diff; - unsigned char buf[sizeof sdiff]; - - /* We're only doing 4-byte sizes at the moment. */ - if (size != sizeof sdiff || sdiff != diff) - { - emit_error = 1; - return; - } - - memcpy (buf, &sdiff, sizeof sdiff); - target_write_memory (from, buf, sizeof sdiff); -} - -/* Preparation for emitting a literal pool of given size. Loads the address - of the pool into %r1, and jumps over it. Called should emit the pool data - immediately afterwards. Used for both s390 and s390x. */ - -static void -s390_emit_litpool (int size) -{ - static const unsigned char nop[] = { - 0x07, 0x07, - }; - unsigned char buf[] = { - 0xa7, 0x15, 0x00, - (unsigned char) ((size + 4) / 2), /* bras %r1, .Lend+size */ - /* .Lend: */ - }; - if (size == 4) - { - /* buf needs to start at even halfword for litpool to be aligned */ - if (current_insn_ptr & 2) - add_insns (nop, sizeof nop); - } - else - { - while ((current_insn_ptr & 6) != 4) - add_insns (nop, sizeof nop); - } - add_insns (buf, sizeof buf); -} - -/* The "emit_const" emit_ops method for s390. */ - -static void -s390_emit_const (LONGEST num) -{ - unsigned long long n = num; - unsigned char buf_s[] = { - /* lhi %r3, <num> */ - 0xa7, 0x38, - (unsigned char) (num >> 8), (unsigned char) num, - /* xr %r2, %r2 */ - 0x17, 0x22, - }; - static const unsigned char buf_l[] = { - 0x98, 0x23, 0x10, 0x00, /* lm %r2, %r3, 0(%r1) */ - }; - if (num < 0x8000 && num >= 0) - { - add_insns (buf_s, sizeof buf_s); - } - else - { - s390_emit_litpool (8); - add_insns ((unsigned char *) &n, sizeof n); - add_insns (buf_l, sizeof buf_l); - } -} - -/* The "emit_call" emit_ops method for s390. */ - -static void -s390_emit_call (CORE_ADDR fn) -{ - unsigned int n = fn; - static const unsigned char buf[] = { - 0x58, 0x10, 0x10, 0x00, /* l %r1, 0(%r1) */ - 0xa7, 0xfa, 0xff, 0xa0, /* ahi %r15, -0x60 */ - 0x0d, 0xe1, /* basr %r14, %r1 */ - 0xa7, 0xfa, 0x00, 0x60, /* ahi %r15, 0x60 */ - }; - s390_emit_litpool (4); - add_insns ((unsigned char *) &n, sizeof n); - add_insns (buf, sizeof buf); -} - -/* The "emit_reg" emit_ops method for s390. */ - -static void -s390_emit_reg (int reg) -{ - unsigned char bufpre[] = { - /* lr %r2, %r9 */ - 0x18, 0x29, - /* lhi %r3, <reg> */ - 0xa7, 0x38, (unsigned char) (reg >> 8), (unsigned char) reg, - }; - add_insns (bufpre, sizeof bufpre); - s390_emit_call (get_raw_reg_func_addr ()); -} - -/* The "emit_pop" emit_ops method for s390. */ - -static void -s390_emit_pop (void) -{ - static const unsigned char buf[] = { - 0x98, 0x23, 0xf0, 0x00, /* lm %r2, %r3, 0(%r15) */ - 0x41, 0xf0, 0xf0, 0x08, /* la %r15, 8(%r15) */ - }; - add_insns (buf, sizeof buf); -} - -/* The "emit_stack_flush" emit_ops method for s390. */ - -static void -s390_emit_stack_flush (void) -{ - static const unsigned char buf[] = { - 0xa7, 0xfa, 0xff, 0xf8, /* ahi %r15, -8 */ - 0x90, 0x23, 0xf0, 0x00, /* stm %r2, %r3, 0(%r15) */ - }; - add_insns (buf, sizeof buf); -} - -/* The "emit_zero_ext" emit_ops method for s390. */ - -static void -s390_emit_zero_ext (int arg) -{ - unsigned char buf[] = { - 0x8d, 0x20, 0x00, (unsigned char) (64 - arg), /* sldl %r2, <64-arg> */ - 0x8c, 0x20, 0x00, (unsigned char) (64 - arg), /* srdl %r2, <64-arg> */ - }; - add_insns (buf, sizeof buf); -} - -/* The "emit_swap" emit_ops method for s390. */ - -static void -s390_emit_swap (void) -{ - static const unsigned char buf[] = { - 0x98, 0x45, 0xf0, 0x00, /* lm %r4, %r5, 0(%r15) */ - 0x90, 0x23, 0xf0, 0x00, /* stm %r2, %r3, 0(%r15) */ - 0x18, 0x24, /* lr %r2, %r4 */ - 0x18, 0x35, /* lr %r3, %r5 */ - }; - add_insns (buf, sizeof buf); -} - -/* The "emit_stack_adjust" emit_ops method for s390. */ - -static void -s390_emit_stack_adjust (int n) -{ - unsigned char buf[] = { - /* ahi %r15, 8*n */ - 0xa7, 0xfa, - (unsigned char ) (n * 8 >> 8), (unsigned char) (n * 8), - }; - add_insns (buf, sizeof buf); -} - -/* Sets %r2 to a 32-bit constant. */ - -static void -s390_emit_set_r2 (int arg1) -{ - unsigned char buf_s[] = { - /* lhi %r2, <arg1> */ - 0xa7, 0x28, (unsigned char) (arg1 >> 8), (unsigned char) arg1, - }; - static const unsigned char buf_l[] = { - 0x58, 0x20, 0x10, 0x00, /* l %r2, 0(%r1) */ - }; - if (arg1 < 0x8000 && arg1 >= -0x8000) - { - add_insns (buf_s, sizeof buf_s); - } - else - { - s390_emit_litpool (4); - add_insns ((unsigned char *) &arg1, sizeof arg1); - add_insns (buf_l, sizeof buf_l); - } -} - -/* The "emit_int_call_1" emit_ops method for s390. */ - -static void -s390_emit_int_call_1 (CORE_ADDR fn, int arg1) -{ - /* FN's prototype is `LONGEST(*fn)(int)'. */ - s390_emit_set_r2 (arg1); - s390_emit_call (fn); -} - -/* The "emit_void_call_2" emit_ops method for s390. */ - -static void -s390_emit_void_call_2 (CORE_ADDR fn, int arg1) -{ - /* FN's prototype is `void(*fn)(int,LONGEST)'. */ - static const unsigned char buf[] = { - 0x18, 0xc2, /* lr %r12, %r2 */ - 0x18, 0xd3, /* lr %r13, %r3 */ - 0x18, 0x43, /* lr %r4, %r3 */ - 0x18, 0x32, /* lr %r3, %r2 */ - }; - static const unsigned char buf2[] = { - 0x18, 0x2c, /* lr %r2, %r12 */ - 0x18, 0x3d, /* lr %r3, %r13 */ - }; - add_insns (buf, sizeof buf); - s390_emit_set_r2 (arg1); - s390_emit_call (fn); - add_insns (buf2, sizeof buf2); -} - -/* The "emit_eq_goto" emit_ops method for s390. */ - -static void -s390_emit_eq_goto (int *offset_p, int *size_p) -{ - static const unsigned char buf[] = { - 0x57, 0x20, 0xf0, 0x00, /* x %r2, 0(%r15) */ - 0x57, 0x30, 0xf0, 0x04, /* x %r3, 4(%r15) */ - 0x16, 0x23, /* or %r2, %r3 */ - 0x98, 0x23, 0xf0, 0x08, /* lm %r2, %r3, 8(%r15) */ - 0x41, 0xf0, 0xf0, 0x10, /* la %r15, 16(%r15) */ - 0xc0, 0x84, 0x00, 0x00, 0x00, 0x00, /* jge <fillme> */ - }; - add_insns (buf, sizeof buf); - if (offset_p) - *offset_p = 20; - if (size_p) - *size_p = 4; -} - -/* The "emit_ne_goto" emit_ops method for s390. */ - -static void -s390_emit_ne_goto (int *offset_p, int *size_p) -{ - static const unsigned char buf[] = { - 0x57, 0x20, 0xf0, 0x00, /* x %r2, 0(%r15) */ - 0x57, 0x30, 0xf0, 0x04, /* x %r3, 4(%r15) */ - 0x16, 0x23, /* or %r2, %r3 */ - 0x98, 0x23, 0xf0, 0x08, /* lm %r2, %r3, 8(%r15) */ - 0x41, 0xf0, 0xf0, 0x10, /* la %r15, 16(%r15) */ - 0xc0, 0x74, 0x00, 0x00, 0x00, 0x00, /* jgne <fillme> */ - }; - add_insns (buf, sizeof buf); - if (offset_p) - *offset_p = 20; - if (size_p) - *size_p = 4; -} - -/* The "emit_lt_goto" emit_ops method for s390. */ - -static void -s390_emit_lt_goto (int *offset_p, int *size_p) -{ - static const unsigned char buf[] = { - 0x59, 0x20, 0xf0, 0x00, /* c %r2, 0(%r15) */ - 0xa7, 0x24, 0x00, 0x0e, /* jh .Ltrue */ - 0xa7, 0x44, 0x00, 0x06, /* jl .Lfalse */ - 0x55, 0x30, 0xf0, 0x04, /* cl %r3, 4(%r15) */ - 0xa7, 0x24, 0x00, 0x08, /* jh .Ltrue */ - /* .Lfalse: */ - 0x98, 0x23, 0xf0, 0x08, /* lm %r2, %r3, 8(%r15) */ - 0x41, 0xf0, 0xf0, 0x10, /* la %r15, 16(%r15) */ - 0xa7, 0xf4, 0x00, 0x09, /* j .Lend */ - /* .Ltrue: */ - 0x98, 0x23, 0xf0, 0x08, /* lm %r2, %r3, 8(%r15) */ - 0x41, 0xf0, 0xf0, 0x10, /* la %r15, 16(%r15) */ - 0xc0, 0xf4, 0x00, 0x00, 0x00, 0x00, /* jg <fillme> */ - /* .Lend: */ - }; - add_insns (buf, sizeof buf); - if (offset_p) - *offset_p = 42; - if (size_p) - *size_p = 4; -} - -/* The "emit_le_goto" emit_ops method for s390. */ - -static void -s390_emit_le_goto (int *offset_p, int *size_p) -{ - static const unsigned char buf[] = { - 0x59, 0x20, 0xf0, 0x00, /* c %r2, 0(%r15) */ - 0xa7, 0x24, 0x00, 0x0e, /* jh .Ltrue */ - 0xa7, 0x44, 0x00, 0x06, /* jl .Lfalse */ - 0x55, 0x30, 0xf0, 0x04, /* cl %r3, 4(%r15) */ - 0xa7, 0xa4, 0x00, 0x08, /* jhe .Ltrue */ - /* .Lfalse: */ - 0x98, 0x23, 0xf0, 0x08, /* lm %r2, %r3, 8(%r15) */ - 0x41, 0xf0, 0xf0, 0x10, /* la %r15, 16(%r15) */ - 0xa7, 0xf4, 0x00, 0x09, /* j .Lend */ - /* .Ltrue: */ - 0x98, 0x23, 0xf0, 0x08, /* lm %r2, %r3, 8(%r15) */ - 0x41, 0xf0, 0xf0, 0x10, /* la %r15, 16(%r15) */ - 0xc0, 0xf4, 0x00, 0x00, 0x00, 0x00, /* jg <fillme> */ - /* .Lend: */ - }; - add_insns (buf, sizeof buf); - if (offset_p) - *offset_p = 42; - if (size_p) - *size_p = 4; -} - -/* The "emit_gt_goto" emit_ops method for s390. */ - -static void -s390_emit_gt_goto (int *offset_p, int *size_p) -{ - static const unsigned char buf[] = { - 0x59, 0x20, 0xf0, 0x00, /* c %r2, 0(%r15) */ - 0xa7, 0x44, 0x00, 0x0e, /* jl .Ltrue */ - 0xa7, 0x24, 0x00, 0x06, /* jh .Lfalse */ - 0x55, 0x30, 0xf0, 0x04, /* cl %r3, 4(%r15) */ - 0xa7, 0x44, 0x00, 0x08, /* jl .Ltrue */ - /* .Lfalse: */ - 0x98, 0x23, 0xf0, 0x08, /* lm %r2, %r3, 8(%r15) */ - 0x41, 0xf0, 0xf0, 0x10, /* la %r15, 16(%r15) */ - 0xa7, 0xf4, 0x00, 0x09, /* j .Lend */ - /* .Ltrue: */ - 0x98, 0x23, 0xf0, 0x08, /* lm %r2, %r3, 8(%r15) */ - 0x41, 0xf0, 0xf0, 0x10, /* la %r15, 16(%r15) */ - 0xc0, 0xf4, 0x00, 0x00, 0x00, 0x00, /* jg <fillme> */ - /* .Lend: */ - }; - add_insns (buf, sizeof buf); - if (offset_p) - *offset_p = 42; - if (size_p) - *size_p = 4; -} - -/* The "emit_ge_goto" emit_ops method for s390. */ - -static void -s390_emit_ge_goto (int *offset_p, int *size_p) -{ - static const unsigned char buf[] = { - 0x59, 0x20, 0xf0, 0x00, /* c %r2, 0(%r15) */ - 0xa7, 0x44, 0x00, 0x0e, /* jl .Ltrue */ - 0xa7, 0x24, 0x00, 0x06, /* jh .Lfalse */ - 0x55, 0x30, 0xf0, 0x04, /* cl %r3, 4(%r15) */ - 0xa7, 0xc4, 0x00, 0x08, /* jle .Ltrue */ - /* .Lfalse: */ - 0x98, 0x23, 0xf0, 0x08, /* lm %r2, %r3, 8(%r15) */ - 0x41, 0xf0, 0xf0, 0x10, /* la %r15, 16(%r15) */ - 0xa7, 0xf4, 0x00, 0x09, /* j .Lend */ - /* .Ltrue: */ - 0x98, 0x23, 0xf0, 0x08, /* lm %r2, %r3, 8(%r15) */ - 0x41, 0xf0, 0xf0, 0x10, /* la %r15, 16(%r15) */ - 0xc0, 0xf4, 0x00, 0x00, 0x00, 0x00, /* jg <fillme> */ - /* .Lend: */ - }; - add_insns (buf, sizeof buf); - if (offset_p) - *offset_p = 42; - if (size_p) - *size_p = 4; -} - -/* The "emit_ops" structure for s390. Named _impl to avoid name - collision with s390_emit_ops function. */ - -static struct emit_ops s390_emit_ops_impl = - { - s390_emit_prologue, - s390_emit_epilogue, - s390_emit_add, - s390_emit_sub, - s390_emit_mul, - s390_emit_lsh, - s390_emit_rsh_signed, - s390_emit_rsh_unsigned, - s390_emit_ext, - s390_emit_log_not, - s390_emit_bit_and, - s390_emit_bit_or, - s390_emit_bit_xor, - s390_emit_bit_not, - s390_emit_equal, - s390_emit_less_signed, - s390_emit_less_unsigned, - s390_emit_ref, - s390_emit_if_goto, - s390_emit_goto, - s390_write_goto_address, - s390_emit_const, - s390_emit_call, - s390_emit_reg, - s390_emit_pop, - s390_emit_stack_flush, - s390_emit_zero_ext, - s390_emit_swap, - s390_emit_stack_adjust, - s390_emit_int_call_1, - s390_emit_void_call_2, - s390_emit_eq_goto, - s390_emit_ne_goto, - s390_emit_lt_goto, - s390_emit_le_goto, - s390_emit_gt_goto, - s390_emit_ge_goto - }; - -#ifdef __s390x__ - -/* The "emit_prologue" emit_ops method for s390x. */ - -static void -s390x_emit_prologue (void) -{ - static const unsigned char buf[] = { - 0xeb, 0x9f, 0xf0, 0x48, 0x00, 0x24, /* stmg %r9, %r15, 0x48(%r15) */ - 0xb9, 0x04, 0x00, 0x92, /* lgr %r9, %r2 */ - 0xb9, 0x04, 0x00, 0xa3, /* lgr %r10, %r3 */ - 0xb9, 0x04, 0x00, 0xbf, /* lgr %r11, %r15 */ - }; - add_insns (buf, sizeof buf); -} - -/* The "emit_epilogue" emit_ops method for s390x. */ - -static void -s390x_emit_epilogue (void) -{ - static const unsigned char buf[] = { - 0xe3, 0x20, 0xa0, 0x00, 0x00, 0x24, /* stg %r2, 0(%r10) */ - 0xa7, 0x29, 0x00, 0x00, /* lghi %r2, 0 */ - 0xeb, 0x9f, 0xf0, 0x48, 0x00, 0x04, /* lmg %r9, %r15, 0x48(%r15) */ - 0x07, 0xfe, /* br %r14 */ - }; - add_insns (buf, sizeof buf); -} - -/* The "emit_add" emit_ops method for s390x. */ - -static void -s390x_emit_add (void) -{ - static const unsigned char buf[] = { - 0xe3, 0x20, 0xf0, 0x00, 0x00, 0x0a, /* alg %r2, 0(%r15) */ - 0x41, 0xf0, 0xf0, 0x08, /* la %r15, 8(%r15) */ - }; - add_insns (buf, sizeof buf); -} - -/* The "emit_sub" emit_ops method for s390x. */ - -static void -s390x_emit_sub (void) -{ - static const unsigned char buf[] = { - 0xe3, 0x30, 0xf0, 0x00, 0x00, 0x04, /* lg %r3, 0(%r15) */ - 0xb9, 0x0b, 0x00, 0x32, /* slgr %r3, %r2 */ - 0xb9, 0x04, 0x00, 0x23, /* lgr %r2, %r3 */ - 0x41, 0xf0, 0xf0, 0x08, /* la %r15, 8(%r15) */ - }; - add_insns (buf, sizeof buf); -} - -/* The "emit_mul" emit_ops method for s390x. */ - -static void -s390x_emit_mul (void) -{ - emit_error = 1; -} - -/* The "emit_lsh" emit_ops method for s390x. */ - -static void -s390x_emit_lsh (void) -{ - static const unsigned char buf[] = { - 0xe3, 0x30, 0xf0, 0x00, 0x00, 0x04, /* lg %r3, 0(%r15) */ - 0xeb, 0x23, 0x20, 0x00, 0x00, 0x0d, /* sllg %r2, %r3, 0(%r2) */ - 0x41, 0xf0, 0xf0, 0x08, /* la %r15, 8(%r15) */ - }; - add_insns (buf, sizeof buf); -} - -/* The "emit_rsh_signed" emit_ops method for s390x. */ - -static void -s390x_emit_rsh_signed (void) -{ - static const unsigned char buf[] = { - 0xe3, 0x30, 0xf0, 0x00, 0x00, 0x04, /* lg %r3, 0(%r15) */ - 0xeb, 0x23, 0x20, 0x00, 0x00, 0x0a, /* srag %r2, %r3, 0(%r2) */ - 0x41, 0xf0, 0xf0, 0x08, /* la %r15, 8(%r15) */ - }; - add_insns (buf, sizeof buf); -} - -/* The "emit_rsh_unsigned" emit_ops method for s390x. */ - -static void -s390x_emit_rsh_unsigned (void) -{ - static const unsigned char buf[] = { - 0xe3, 0x30, 0xf0, 0x00, 0x00, 0x04, /* lg %r3, 0(%r15) */ - 0xeb, 0x23, 0x20, 0x00, 0x00, 0x0c, /* srlg %r2, %r3, 0(%r2) */ - 0x41, 0xf0, 0xf0, 0x08, /* la %r15, 8(%r15) */ - }; - add_insns (buf, sizeof buf); -} - -/* The "emit_ext" emit_ops method for s390x. */ - -static void -s390x_emit_ext (int arg) -{ - unsigned char buf[] = { - /* sllg %r2, %r2, <64-arg> */ - 0xeb, 0x22, 0x00, (unsigned char) (64 - arg), 0x00, 0x0d, - /* srag %r2, %r2, <64-arg> */ - 0xeb, 0x22, 0x00, (unsigned char) (64 - arg), 0x00, 0x0a, - }; - add_insns (buf, sizeof buf); -} - -/* The "emit_log_not" emit_ops method for s390x. */ - -static void -s390x_emit_log_not (void) -{ - static const unsigned char buf[] = { - 0xb9, 0x00, 0x00, 0x22, /* lpgr %r2, %r2 */ - 0xa7, 0x2b, 0xff, 0xff, /* aghi %r2, -1 */ - 0xeb, 0x22, 0x00, 0x3f, 0x00, 0x0c, /* srlg %r2, %r2, 63 */ - }; - add_insns (buf, sizeof buf); -} - -/* The "emit_bit_and" emit_ops method for s390x. */ - -static void -s390x_emit_bit_and (void) -{ - static const unsigned char buf[] = { - 0xe3, 0x20, 0xf0, 0x00, 0x00, 0x80, /* ng %r2, 0(%r15) */ - 0x41, 0xf0, 0xf0, 0x08, /* la %r15, 8(%r15) */ - }; - add_insns (buf, sizeof buf); -} - -/* The "emit_bit_or" emit_ops method for s390x. */ - -static void -s390x_emit_bit_or (void) -{ - static const unsigned char buf[] = { - 0xe3, 0x20, 0xf0, 0x00, 0x00, 0x81, /* og %r2, 0(%r15) */ - 0x41, 0xf0, 0xf0, 0x08, /* la %r15, 8(%r15) */ - }; - add_insns (buf, sizeof buf); -} - -/* The "emit_bit_xor" emit_ops method for s390x. */ - -static void -s390x_emit_bit_xor (void) -{ - static const unsigned char buf[] = { - 0xe3, 0x20, 0xf0, 0x00, 0x00, 0x82, /* xg %r2, 0(%r15) */ - 0x41, 0xf0, 0xf0, 0x08, /* la %r15, 8(%r15) */ - }; - add_insns (buf, sizeof buf); -} - -/* The "emit_bit_not" emit_ops method for s390x. */ - -static void -s390x_emit_bit_not (void) -{ - static const unsigned char buf[] = { - 0xa7, 0x39, 0xff, 0xff, /* lghi %r3, -1 */ - 0xb9, 0x82, 0x00, 0x23, /* xgr %r2, %r3 */ - }; - add_insns (buf, sizeof buf); -} - -/* The "emit_equal" emit_ops method for s390x. */ - -static void -s390x_emit_equal (void) -{ - s390x_emit_bit_xor (); - s390x_emit_log_not (); -} - -/* The "emit_less_signed" emit_ops method for s390x. */ - -static void -s390x_emit_less_signed (void) -{ - static const unsigned char buf[] = { - 0xe3, 0x20, 0xf0, 0x00, 0x00, 0x20, /* cg %r2, 0(%r15) */ - 0xa7, 0x29, 0x00, 0x01, /* lghi %r2, 1 */ - 0xa7, 0x24, 0x00, 0x04, /* jh .Lend */ - 0xa7, 0x29, 0x00, 0x00, /* lghi %r2, 0 */ - /* .Lend: */ - 0x41, 0xf0, 0xf0, 0x08, /* la %r15, 8(%r15) */ - }; - add_insns (buf, sizeof buf); -} - -/* The "emit_less_unsigned" emit_ops method for s390x. */ - -static void -s390x_emit_less_unsigned (void) -{ - static const unsigned char buf[] = { - 0xe3, 0x20, 0xf0, 0x00, 0x00, 0x21, /* clg %r2, 0(%r15) */ - 0xa7, 0x29, 0x00, 0x01, /* lghi %r2, 1 */ - 0xa7, 0x24, 0x00, 0x04, /* jh .Lend */ - 0xa7, 0x29, 0x00, 0x00, /* lghi %r2, 0 */ - /* .Lend: */ - 0x41, 0xf0, 0xf0, 0x08, /* la %r15, 8(%r15) */ - }; - add_insns (buf, sizeof buf); -} - -/* The "emit_ref" emit_ops method for s390x. */ - -static void -s390x_emit_ref (int size) -{ - static const unsigned char buf1[] = { - 0xe3, 0x20, 0x20, 0x00, 0x00, 0x90, /* llgc %r2, 0(%r2) */ - }; - static const unsigned char buf2[] = { - 0xe3, 0x20, 0x20, 0x00, 0x00, 0x91 /* llgh %r2, 0(%r2) */ - }; - static const unsigned char buf4[] = { - 0xe3, 0x20, 0x20, 0x00, 0x00, 0x16, /* llgf %r2, 0(%r2) */ - }; - static const unsigned char buf8[] = { - 0xe3, 0x20, 0x20, 0x00, 0x00, 0x04, /* lg %r2, 0(%r2) */ - }; - switch (size) - { - case 1: - add_insns (buf1, sizeof buf1); - break; - case 2: - add_insns (buf2, sizeof buf2); - break; - case 4: - add_insns (buf4, sizeof buf4); - break; - case 8: - add_insns (buf8, sizeof buf8); - break; - default: - emit_error = 1; - } -} - -/* The "emit_if_goto" emit_ops method for s390x. */ - -static void -s390x_emit_if_goto (int *offset_p, int *size_p) -{ - static const unsigned char buf[] = { - 0xb9, 0x02, 0x00, 0x22, /* ltgr %r2, %r2 */ - 0xe3, 0x20, 0xf0, 0x00, 0x00, 0x04, /* lg %r2, 0(%r15) */ - 0x41, 0xf0, 0xf0, 0x08, /* la %r15, 8(%r15) */ - 0xc0, 0x74, 0x00, 0x00, 0x00, 0x00, /* jgne <fillme> */ - }; - add_insns (buf, sizeof buf); - if (offset_p) - *offset_p = 16; - if (size_p) - *size_p = 4; -} - -/* The "emit_const" emit_ops method for s390x. */ - -static void -s390x_emit_const (LONGEST num) -{ - unsigned long long n = num; - unsigned char buf_s[] = { - /* lghi %r2, <num> */ - 0xa7, 0x29, (unsigned char) (num >> 8), (unsigned char) num, - }; - static const unsigned char buf_l[] = { - 0xe3, 0x20, 0x10, 0x00, 0x00, 0x04, /* lg %r2, 0(%r1) */ - }; - if (num < 0x8000 && num >= -0x8000) - { - add_insns (buf_s, sizeof buf_s); - } - else - { - s390_emit_litpool (8); - add_insns ((unsigned char *) &n, sizeof n); - add_insns (buf_l, sizeof buf_l); - } -} - -/* The "emit_call" emit_ops method for s390x. */ - -static void -s390x_emit_call (CORE_ADDR fn) -{ - unsigned long n = fn; - static const unsigned char buf[] = { - 0xe3, 0x10, 0x10, 0x00, 0x00, 0x04, /* lg %r1, 0(%r1) */ - 0xa7, 0xfb, 0xff, 0x60, /* aghi %r15, -0xa0 */ - 0x0d, 0xe1, /* basr %r14, %r1 */ - 0xa7, 0xfb, 0x00, 0xa0, /* aghi %r15, 0xa0 */ - }; - s390_emit_litpool (8); - add_insns ((unsigned char *) &n, sizeof n); - add_insns (buf, sizeof buf); -} - -/* The "emit_reg" emit_ops method for s390x. */ - -static void -s390x_emit_reg (int reg) -{ - unsigned char buf[] = { - /* lgr %r2, %r9 */ - 0xb9, 0x04, 0x00, 0x29, - /* lghi %r3, <reg> */ - 0xa7, 0x39, (unsigned char) (reg >> 8), (unsigned char) reg, - }; - add_insns (buf, sizeof buf); - s390x_emit_call (get_raw_reg_func_addr ()); -} - -/* The "emit_pop" emit_ops method for s390x. */ - -static void -s390x_emit_pop (void) -{ - static const unsigned char buf[] = { - 0xe3, 0x20, 0xf0, 0x00, 0x00, 0x04, /* lg %r2, 0(%r15) */ - 0x41, 0xf0, 0xf0, 0x08, /* la %r15, 8(%r15) */ - }; - add_insns (buf, sizeof buf); -} - -/* The "emit_stack_flush" emit_ops method for s390x. */ - -static void -s390x_emit_stack_flush (void) -{ - static const unsigned char buf[] = { - 0xa7, 0xfb, 0xff, 0xf8, /* aghi %r15, -8 */ - 0xe3, 0x20, 0xf0, 0x00, 0x00, 0x24, /* stg %r2, 0(%r15) */ - }; - add_insns (buf, sizeof buf); -} - -/* The "emit_zero_ext" emit_ops method for s390x. */ - -static void -s390x_emit_zero_ext (int arg) -{ - unsigned char buf[] = { - /* sllg %r2, %r2, <64-arg> */ - 0xeb, 0x22, 0x00, (unsigned char) (64 - arg), 0x00, 0x0d, - /* srlg %r2, %r2, <64-arg> */ - 0xeb, 0x22, 0x00, (unsigned char) (64 - arg), 0x00, 0x0c, - }; - add_insns (buf, sizeof buf); -} - -/* The "emit_swap" emit_ops method for s390x. */ - -static void -s390x_emit_swap (void) -{ - static const unsigned char buf[] = { - 0xe3, 0x30, 0xf0, 0x00, 0x00, 0x04, /* lg %r3, 0(%r15) */ - 0xe3, 0x20, 0xf0, 0x00, 0x00, 0x24, /* stg %r2, 0(%r15) */ - 0xb9, 0x04, 0x00, 0x23, /* lgr %r2, %r3 */ - }; - add_insns (buf, sizeof buf); -} - -/* The "emit_stack_adjust" emit_ops method for s390x. */ - -static void -s390x_emit_stack_adjust (int n) -{ - unsigned char buf[] = { - /* aghi %r15, 8*n */ - 0xa7, 0xfb, - (unsigned char) (n * 8 >> 8), (unsigned char) (n * 8), - }; - add_insns (buf, sizeof buf); -} - -/* The "emit_int_call_1" emit_ops method for s390x. */ - -static void -s390x_emit_int_call_1 (CORE_ADDR fn, int arg1) -{ - /* FN's prototype is `LONGEST(*fn)(int)'. */ - s390x_emit_const (arg1); - s390x_emit_call (fn); -} - -/* The "emit_void_call_2" emit_ops method for s390x. */ - -static void -s390x_emit_void_call_2 (CORE_ADDR fn, int arg1) -{ - /* FN's prototype is `void(*fn)(int,LONGEST)'. */ - static const unsigned char buf[] = { - 0xb9, 0x04, 0x00, 0x32, /* lgr %r3, %r2 */ - 0xb9, 0x04, 0x00, 0xc2, /* lgr %r12, %r2 */ - }; - static const unsigned char buf2[] = { - 0xb9, 0x04, 0x00, 0x2c, /* lgr %r2, %r12 */ - }; - add_insns (buf, sizeof buf); - s390x_emit_const (arg1); - s390x_emit_call (fn); - add_insns (buf2, sizeof buf2); -} - -/* The "emit_eq_goto" emit_ops method for s390x. */ - -static void -s390x_emit_eq_goto (int *offset_p, int *size_p) -{ - static const unsigned char buf[] = { - 0xe3, 0x20, 0xf0, 0x00, 0x00, 0x20, /* cg %r2, 0(%r15) */ - 0xe3, 0x20, 0xf0, 0x08, 0x00, 0x04, /* lg %r2, 8(%r15) */ - 0x41, 0xf0, 0xf0, 0x10, /* la %r15, 16(%r15) */ - 0xc0, 0x84, 0x00, 0x00, 0x00, 0x00, /* jge <fillme> */ - }; - add_insns (buf, sizeof buf); - if (offset_p) - *offset_p = 18; - if (size_p) - *size_p = 4; -} - -/* The "emit_ne_goto" emit_ops method for s390x. */ - -static void -s390x_emit_ne_goto (int *offset_p, int *size_p) -{ - static const unsigned char buf[] = { - 0xe3, 0x20, 0xf0, 0x00, 0x00, 0x20, /* cg %r2, 0(%r15) */ - 0xe3, 0x20, 0xf0, 0x08, 0x00, 0x04, /* lg %r2, 8(%r15) */ - 0x41, 0xf0, 0xf0, 0x10, /* la %r15, 16(%r15) */ - 0xc0, 0x74, 0x00, 0x00, 0x00, 0x00, /* jgne <fillme> */ - }; - add_insns (buf, sizeof buf); - if (offset_p) - *offset_p = 18; - if (size_p) - *size_p = 4; -} - -/* The "emit_lt_goto" emit_ops method for s390x. */ - -static void -s390x_emit_lt_goto (int *offset_p, int *size_p) -{ - static const unsigned char buf[] = { - 0xe3, 0x20, 0xf0, 0x00, 0x00, 0x20, /* cg %r2, 0(%r15) */ - 0xe3, 0x20, 0xf0, 0x08, 0x00, 0x04, /* lg %r2, 8(%r15) */ - 0x41, 0xf0, 0xf0, 0x10, /* la %r15, 16(%r15) */ - 0xc0, 0x24, 0x00, 0x00, 0x00, 0x00, /* jgh <fillme> */ - }; - add_insns (buf, sizeof buf); - if (offset_p) - *offset_p = 18; - if (size_p) - *size_p = 4; -} - -/* The "emit_le_goto" emit_ops method for s390x. */ - -static void -s390x_emit_le_goto (int *offset_p, int *size_p) -{ - static const unsigned char buf[] = { - 0xe3, 0x20, 0xf0, 0x00, 0x00, 0x20, /* cg %r2, 0(%r15) */ - 0xe3, 0x20, 0xf0, 0x08, 0x00, 0x04, /* lg %r2, 8(%r15) */ - 0x41, 0xf0, 0xf0, 0x10, /* la %r15, 16(%r15) */ - 0xc0, 0xa4, 0x00, 0x00, 0x00, 0x00, /* jghe <fillme> */ - }; - add_insns (buf, sizeof buf); - if (offset_p) - *offset_p = 18; - if (size_p) - *size_p = 4; -} - -/* The "emit_gt_goto" emit_ops method for s390x. */ - -static void -s390x_emit_gt_goto (int *offset_p, int *size_p) -{ - static const unsigned char buf[] = { - 0xe3, 0x20, 0xf0, 0x00, 0x00, 0x20, /* cg %r2, 0(%r15) */ - 0xe3, 0x20, 0xf0, 0x08, 0x00, 0x04, /* lg %r2, 8(%r15) */ - 0x41, 0xf0, 0xf0, 0x10, /* la %r15, 16(%r15) */ - 0xc0, 0x44, 0x00, 0x00, 0x00, 0x00, /* jgl <fillme> */ - }; - add_insns (buf, sizeof buf); - if (offset_p) - *offset_p = 18; - if (size_p) - *size_p = 4; -} - -/* The "emit_ge_goto" emit_ops method for s390x. */ - -static void -s390x_emit_ge_goto (int *offset_p, int *size_p) -{ - static const unsigned char buf[] = { - 0xe3, 0x20, 0xf0, 0x00, 0x00, 0x20, /* cg %r2, 0(%r15) */ - 0xe3, 0x20, 0xf0, 0x08, 0x00, 0x04, /* lg %r2, 8(%r15) */ - 0x41, 0xf0, 0xf0, 0x10, /* la %r15, 16(%r15) */ - 0xc0, 0xc4, 0x00, 0x00, 0x00, 0x00, /* jgle <fillme> */ - }; - add_insns (buf, sizeof buf); - if (offset_p) - *offset_p = 18; - if (size_p) - *size_p = 4; -} - -/* The "emit_ops" structure for s390x. */ - -static struct emit_ops s390x_emit_ops = - { - s390x_emit_prologue, - s390x_emit_epilogue, - s390x_emit_add, - s390x_emit_sub, - s390x_emit_mul, - s390x_emit_lsh, - s390x_emit_rsh_signed, - s390x_emit_rsh_unsigned, - s390x_emit_ext, - s390x_emit_log_not, - s390x_emit_bit_and, - s390x_emit_bit_or, - s390x_emit_bit_xor, - s390x_emit_bit_not, - s390x_emit_equal, - s390x_emit_less_signed, - s390x_emit_less_unsigned, - s390x_emit_ref, - s390x_emit_if_goto, - s390_emit_goto, - s390_write_goto_address, - s390x_emit_const, - s390x_emit_call, - s390x_emit_reg, - s390x_emit_pop, - s390x_emit_stack_flush, - s390x_emit_zero_ext, - s390x_emit_swap, - s390x_emit_stack_adjust, - s390x_emit_int_call_1, - s390x_emit_void_call_2, - s390x_emit_eq_goto, - s390x_emit_ne_goto, - s390x_emit_lt_goto, - s390x_emit_le_goto, - s390x_emit_gt_goto, - s390x_emit_ge_goto - }; -#endif - -/* The "emit_ops" linux_target_ops method. */ - -static struct emit_ops * -s390_emit_ops (void) -{ -#ifdef __s390x__ - struct regcache *regcache = get_thread_regcache (current_thread, 0); - - if (register_size (regcache->tdesc, 0) == 8) - return &s390x_emit_ops; - else -#endif - return &s390_emit_ops_impl; -} - -struct linux_target_ops the_low_target = { - s390_arch_setup, - s390_regs_info, - s390_cannot_fetch_register, - s390_cannot_store_register, - NULL, /* fetch_register */ - s390_get_pc, - s390_set_pc, - NULL, /* breakpoint_kind_from_pc */ - s390_sw_breakpoint_from_kind, - NULL, - s390_breakpoint_len, - s390_breakpoint_at, - s390_supports_z_point_type, - NULL, - NULL, - NULL, - NULL, - s390_collect_ptrace_register, - s390_supply_ptrace_register, - NULL, /* siginfo_fixup */ - NULL, /* new_process */ - NULL, /* delete_process */ - NULL, /* new_thread */ - NULL, /* delete_thread */ - NULL, /* new_fork */ - NULL, /* prepare_to_resume */ - NULL, /* process_qsupported */ - s390_supports_tracepoints, - s390_get_thread_area, - s390_install_fast_tracepoint_jump_pad, - s390_emit_ops, - s390_get_min_fast_tracepoint_insn_len, - NULL, /* supports_range_stepping */ - NULL, /* breakpoint_kind_from_current_state */ - s390_supports_hardware_single_step, - NULL, /* get_syscall_trapinfo */ - s390_get_ipa_tdesc_idx, -}; - -void -initialize_low_arch (void) -{ - /* Initialize the Linux target descriptions. */ - - init_registers_s390_linux32 (); - init_registers_s390_linux32v1 (); - init_registers_s390_linux32v2 (); - init_registers_s390_linux64 (); - init_registers_s390_linux64v1 (); - init_registers_s390_linux64v2 (); - init_registers_s390_te_linux64 (); - init_registers_s390_vx_linux64 (); - init_registers_s390_tevx_linux64 (); - init_registers_s390_gs_linux64 (); -#ifdef __s390x__ - init_registers_s390x_linux64 (); - init_registers_s390x_linux64v1 (); - init_registers_s390x_linux64v2 (); - init_registers_s390x_te_linux64 (); - init_registers_s390x_vx_linux64 (); - init_registers_s390x_tevx_linux64 (); - init_registers_s390x_gs_linux64 (); -#endif - - initialize_regsets_info (&s390_regsets_info); - initialize_regsets_info (&s390_regsets_info_3264); -} diff -Nru gdb-9.1/gdb/gdbserver/linux-s390-tdesc.h gdb-10.2/gdb/gdbserver/linux-s390-tdesc.h --- gdb-9.1/gdb/gdbserver/linux-s390-tdesc.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/linux-s390-tdesc.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,116 +0,0 @@ -/* Low level support for s390, shared between gdbserver and IPA. - - Copyright (C) 2016-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef GDBSERVER_LINUX_S390_TDESC_H -#define GDBSERVER_LINUX_S390_TDESC_H - -/* Note: since IPA obviously knows what ABI it's running on (s390 vs s390x), - it's sufficient to pass only the register set here. This, together with - the ABI known at IPA compile time, maps to a tdesc. */ - -enum s390_linux_tdesc { - S390_TDESC_32, - S390_TDESC_32V1, - S390_TDESC_32V2, - S390_TDESC_64, - S390_TDESC_64V1, - S390_TDESC_64V2, - S390_TDESC_TE, - S390_TDESC_VX, - S390_TDESC_TEVX, - S390_TDESC_GS, -}; - -#ifdef __s390x__ - -/* Defined in auto-generated file s390x-linux64.c. */ -void init_registers_s390x_linux64 (void); -extern const struct target_desc *tdesc_s390x_linux64; - -/* Defined in auto-generated file s390x-linux64v1.c. */ -void init_registers_s390x_linux64v1 (void); -extern const struct target_desc *tdesc_s390x_linux64v1; - -/* Defined in auto-generated file s390x-linux64v2.c. */ -void init_registers_s390x_linux64v2 (void); -extern const struct target_desc *tdesc_s390x_linux64v2; - -/* Defined in auto-generated file s390x-te-linux64.c. */ -void init_registers_s390x_te_linux64 (void); -extern const struct target_desc *tdesc_s390x_te_linux64; - -/* Defined in auto-generated file s390x-vx-linux64.c. */ -void init_registers_s390x_vx_linux64 (void); -extern const struct target_desc *tdesc_s390x_vx_linux64; - -/* Defined in auto-generated file s390x-tevx-linux64.c. */ -void init_registers_s390x_tevx_linux64 (void); -extern const struct target_desc *tdesc_s390x_tevx_linux64; - -/* Defined in auto-generated file s390x-gs-linux64.c. */ -void init_registers_s390x_gs_linux64 (void); -extern const struct target_desc *tdesc_s390x_gs_linux64; - -#endif - -#if !defined __s390x__ || !defined IN_PROCESS_AGENT - -/* Defined in auto-generated file s390-linux32.c. */ -void init_registers_s390_linux32 (void); -extern const struct target_desc *tdesc_s390_linux32; - -/* Defined in auto-generated file s390-linux32v1.c. */ -void init_registers_s390_linux32v1 (void); -extern const struct target_desc *tdesc_s390_linux32v1; - -/* Defined in auto-generated file s390-linux32v2.c. */ -void init_registers_s390_linux32v2 (void); -extern const struct target_desc *tdesc_s390_linux32v2; - -/* Defined in auto-generated file s390-linux64.c. */ -void init_registers_s390_linux64 (void); -extern const struct target_desc *tdesc_s390_linux64; - -/* Defined in auto-generated file s390-linux64v1.c. */ -void init_registers_s390_linux64v1 (void); -extern const struct target_desc *tdesc_s390_linux64v1; - -/* Defined in auto-generated file s390-linux64v2.c. */ -void init_registers_s390_linux64v2 (void); -extern const struct target_desc *tdesc_s390_linux64v2; - -/* Defined in auto-generated file s390-te-linux64.c. */ -void init_registers_s390_te_linux64 (void); -extern const struct target_desc *tdesc_s390_te_linux64; - -/* Defined in auto-generated file s390-vx-linux64.c. */ -void init_registers_s390_vx_linux64 (void); -extern const struct target_desc *tdesc_s390_vx_linux64; - -/* Defined in auto-generated file s390-tevx-linux64.c. */ -void init_registers_s390_tevx_linux64 (void); -extern const struct target_desc *tdesc_s390_tevx_linux64; - -/* Defined in auto-generated file s390-gs-linux64.c. */ -void init_registers_s390_gs_linux64 (void); -extern const struct target_desc *tdesc_s390_gs_linux64; - -#endif - -#endif /* GDBSERVER_LINUX_S390_TDESC_H */ diff -Nru gdb-9.1/gdb/gdbserver/linux-sh-low.c gdb-10.2/gdb/gdbserver/linux-sh-low.c --- gdb-9.1/gdb/gdbserver/linux-sh-low.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/linux-sh-low.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,189 +0,0 @@ -/* GNU/Linux/SH specific low level interface, for the remote server for GDB. - Copyright (C) 1995-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "server.h" -#include "linux-low.h" - -/* Defined in auto-generated file reg-sh.c. */ -void init_registers_sh (void); -extern const struct target_desc *tdesc_sh; - -#ifdef HAVE_SYS_REG_H -#include <sys/reg.h> -#endif - -#include <asm/ptrace.h> - -#define sh_num_regs 41 - -/* Currently, don't check/send MQ. */ -static int sh_regmap[] = { - 0, 4, 8, 12, 16, 20, 24, 28, - 32, 36, 40, 44, 48, 52, 56, 60, - - REG_PC*4, REG_PR*4, REG_GBR*4, -1, - REG_MACH*4, REG_MACL*4, REG_SR*4, - REG_FPUL*4, REG_FPSCR*4, - - REG_FPREG0*4+0, REG_FPREG0*4+4, REG_FPREG0*4+8, REG_FPREG0*4+12, - REG_FPREG0*4+16, REG_FPREG0*4+20, REG_FPREG0*4+24, REG_FPREG0*4+28, - REG_FPREG0*4+32, REG_FPREG0*4+36, REG_FPREG0*4+40, REG_FPREG0*4+44, - REG_FPREG0*4+48, REG_FPREG0*4+52, REG_FPREG0*4+56, REG_FPREG0*4+60, -}; - -static int -sh_cannot_store_register (int regno) -{ - return 0; -} - -static int -sh_cannot_fetch_register (int regno) -{ - return 0; -} - -/* Correct in either endianness, obviously. */ -static const unsigned short sh_breakpoint = 0xc3c3; -#define sh_breakpoint_len 2 - -/* Implementation of linux_target_ops method "sw_breakpoint_from_kind". */ - -static const gdb_byte * -sh_sw_breakpoint_from_kind (int kind, int *size) -{ - *size = sh_breakpoint_len; - return (const gdb_byte *) &sh_breakpoint; -} - -static int -sh_breakpoint_at (CORE_ADDR where) -{ - unsigned short insn; - - (*the_target->read_memory) (where, (unsigned char *) &insn, 2); - if (insn == sh_breakpoint) - return 1; - - /* If necessary, recognize more trap instructions here. GDB only uses the - one. */ - return 0; -} - -/* Support for hardware single step. */ - -static int -sh_supports_hardware_single_step (void) -{ - return 1; -} - -/* Provide only a fill function for the general register set. ps_lgetregs - will use this for NPTL support. */ - -static void sh_fill_gregset (struct regcache *regcache, void *buf) -{ - int i; - - for (i = 0; i < 23; i++) - if (sh_regmap[i] != -1) - collect_register (regcache, i, (char *) buf + sh_regmap[i]); -} - -static struct regset_info sh_regsets[] = { - { 0, 0, 0, 0, GENERAL_REGS, sh_fill_gregset, NULL }, - NULL_REGSET -}; - -static struct regsets_info sh_regsets_info = - { - sh_regsets, /* regsets */ - 0, /* num_regsets */ - NULL, /* disabled_regsets */ - }; - -static struct usrregs_info sh_usrregs_info = - { - sh_num_regs, - sh_regmap, - }; - -static struct regs_info regs_info = - { - NULL, /* regset_bitmap */ - &sh_usrregs_info, - &sh_regsets_info - }; - -static const struct regs_info * -sh_regs_info (void) -{ - return ®s_info; -} - -static void -sh_arch_setup (void) -{ - current_process ()->tdesc = tdesc_sh; -} - -struct linux_target_ops the_low_target = { - sh_arch_setup, - sh_regs_info, - sh_cannot_fetch_register, - sh_cannot_store_register, - NULL, /* fetch_register */ - linux_get_pc_32bit, - linux_set_pc_32bit, - NULL, /* breakpoint_kind_from_pc */ - sh_sw_breakpoint_from_kind, - NULL, - 0, - sh_breakpoint_at, - NULL, /* supports_z_point_type */ - NULL, /* insert_point */ - NULL, /* remove_point */ - NULL, /* stopped_by_watchpoint */ - NULL, /* stopped_data_address */ - NULL, /* collect_ptrace_register */ - NULL, /* supply_ptrace_register */ - NULL, /* siginfo_fixup */ - NULL, /* new_process */ - NULL, /* delete_process */ - NULL, /* new_thread */ - NULL, /* delete_thread */ - NULL, /* new_fork */ - NULL, /* prepare_to_resume */ - NULL, /* process_qsupported */ - NULL, /* supports_tracepoints */ - NULL, /* get_thread_area */ - NULL, /* install_fast_tracepoint_jump_pad */ - NULL, /* emit_ops */ - NULL, /* get_min_fast_tracepoint_insn_len */ - NULL, /* supports_range_stepping */ - NULL, /* breakpoint_kind_from_current_state */ - sh_supports_hardware_single_step, -}; - -void -initialize_low_arch (void) -{ - init_registers_sh (); - - initialize_regsets_info (&sh_regsets_info); -} diff -Nru gdb-9.1/gdb/gdbserver/linux-sparc-low.c gdb-10.2/gdb/gdbserver/linux-sparc-low.c --- gdb-9.1/gdb/gdbserver/linux-sparc-low.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/linux-sparc-low.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,326 +0,0 @@ -/* Low level interface to ptrace, for the remote server for GDB. - Copyright (C) 1995-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "server.h" -#include "linux-low.h" - -#include "nat/gdb_ptrace.h" - -#include "gdb_proc_service.h" - -/* The stack pointer is offset from the stack frame by a BIAS of 2047 - (0x7ff) for 64-bit code. BIAS is likely to be defined on SPARC - hosts, so undefine it first. */ -#undef BIAS -#define BIAS 2047 - -#ifdef HAVE_SYS_REG_H -#include <sys/reg.h> -#endif - -#define INSN_SIZE 4 - -#define SPARC_R_REGS_NUM 32 -#define SPARC_F_REGS_NUM 48 -#define SPARC_CONTROL_REGS_NUM 6 - -#define sparc_num_regs \ - (SPARC_R_REGS_NUM + SPARC_F_REGS_NUM + SPARC_CONTROL_REGS_NUM) - -/* Each offset is multiplied by 8, because of the register size. - These offsets apply to the buffer sent/filled by ptrace. - Additionally, the array elements order corresponds to the .dat file, and the - gdb's registers enumeration order. */ - -static int sparc_regmap[] = { - /* These offsets correspond to GET/SETREGSET. */ - -1, 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, /* g0 .. g7 */ - 7*8, 8*8, 9*8, 10*8, 11*8, 12*8, 13*8, 14*8, /* o0 .. o5, sp, o7 */ - -1, -1, -1, -1, -1, -1, -1, -1, /* l0 .. l7 */ - -1, -1, -1, -1, -1, -1, -1, -1, /* i0 .. i5, fp, i7 */ - - /* Floating point registers offsets correspond to GET/SETFPREGSET. */ - 0*4, 1*4, 2*4, 3*4, 4*4, 5*4, 6*4, 7*4, /* f0 .. f7 */ - 8*4, 9*4, 10*4, 11*4, 12*4, 13*4, 14*4, 15*4, /* f8 .. f15 */ - 16*4, 17*4, 18*4, 19*4, 20*4, 21*4, 22*4, 23*4, /* f16 .. f23 */ - 24*4, 25*4, 26*4, 27*4, 28*4, 29*4, 30*4, 31*4, /* f24 .. f31 */ - - /* F32 offset starts next to f31: 31*4+4 = 16 * 8. */ - 16*8, 17*8, 18*8, 19*8, 20*8, 21*8, 22*8, 23*8, /* f32 .. f46 */ - 24*8, 25*8, 26*8, 27*8, 28*8, 29*8, 30*8, 31*8, /* f48 .. f62 */ - - 17 *8, /* pc */ - 18 *8, /* npc */ - 16 *8, /* state */ - /* FSR offset also corresponds to GET/SETFPREGSET, ans is placed - next to f62. */ - 32 *8, /* fsr */ - -1, /* fprs */ - /* Y register is 32-bits length, but gdb takes care of that. */ - 19 *8, /* y */ - -}; - - -struct regs_range_t -{ - int regno_start; - int regno_end; -}; - -static const struct regs_range_t gregs_ranges[] = { - { 0, 31 }, /* g0 .. i7 */ - { 80, 82 }, /* pc .. state */ - { 84, 85 } /* fprs .. y */ -}; - -#define N_GREGS_RANGES (sizeof (gregs_ranges) / sizeof (struct regs_range_t)) - -static const struct regs_range_t fpregs_ranges[] = { - { 32, 79 }, /* f0 .. f62 */ - { 83, 83 } /* fsr */ -}; - -#define N_FPREGS_RANGES (sizeof (fpregs_ranges) / sizeof (struct regs_range_t)) - -/* Defined in auto-generated file reg-sparc64.c. */ -void init_registers_sparc64 (void); -extern const struct target_desc *tdesc_sparc64; - -static int -sparc_cannot_store_register (int regno) -{ - return (regno >= sparc_num_regs || sparc_regmap[regno] == -1); -} - -static int -sparc_cannot_fetch_register (int regno) -{ - return (regno >= sparc_num_regs || sparc_regmap[regno] == -1); -} - -static void -sparc_fill_gregset_to_stack (struct regcache *regcache, const void *buf) -{ - int i; - CORE_ADDR addr = 0; - unsigned char tmp_reg_buf[8]; - const int l0_regno = find_regno (regcache->tdesc, "l0"); - const int i7_regno = l0_regno + 15; - - /* These registers have to be stored in the stack. */ - memcpy (&addr, - ((char *) buf) + sparc_regmap[find_regno (regcache->tdesc, "sp")], - sizeof (addr)); - - addr += BIAS; - - for (i = l0_regno; i <= i7_regno; i++) - { - collect_register (regcache, i, tmp_reg_buf); - (*the_target->write_memory) (addr, tmp_reg_buf, sizeof (tmp_reg_buf)); - addr += sizeof (tmp_reg_buf); - } -} - -static void -sparc_fill_gregset (struct regcache *regcache, void *buf) -{ - int i; - int range; - - for (range = 0; range < N_GREGS_RANGES; range++) - for (i = gregs_ranges[range].regno_start; - i <= gregs_ranges[range].regno_end; i++) - if (sparc_regmap[i] != -1) - collect_register (regcache, i, ((char *) buf) + sparc_regmap[i]); - - sparc_fill_gregset_to_stack (regcache, buf); -} - -static void -sparc_fill_fpregset (struct regcache *regcache, void *buf) -{ - int i; - int range; - - for (range = 0; range < N_FPREGS_RANGES; range++) - for (i = fpregs_ranges[range].regno_start; - i <= fpregs_ranges[range].regno_end; i++) - collect_register (regcache, i, ((char *) buf) + sparc_regmap[i]); - -} - -static void -sparc_store_gregset_from_stack (struct regcache *regcache, const void *buf) -{ - int i; - CORE_ADDR addr = 0; - unsigned char tmp_reg_buf[8]; - const int l0_regno = find_regno (regcache->tdesc, "l0"); - const int i7_regno = l0_regno + 15; - - /* These registers have to be obtained from the stack. */ - memcpy (&addr, - ((char *) buf) + sparc_regmap[find_regno (regcache->tdesc, "sp")], - sizeof (addr)); - - addr += BIAS; - - for (i = l0_regno; i <= i7_regno; i++) - { - (*the_target->read_memory) (addr, tmp_reg_buf, sizeof (tmp_reg_buf)); - supply_register (regcache, i, tmp_reg_buf); - addr += sizeof (tmp_reg_buf); - } -} - -static void -sparc_store_gregset (struct regcache *regcache, const void *buf) -{ - int i; - char zerobuf[8]; - int range; - - memset (zerobuf, 0, sizeof (zerobuf)); - - for (range = 0; range < N_GREGS_RANGES; range++) - for (i = gregs_ranges[range].regno_start; - i <= gregs_ranges[range].regno_end; i++) - if (sparc_regmap[i] != -1) - supply_register (regcache, i, ((char *) buf) + sparc_regmap[i]); - else - supply_register (regcache, i, zerobuf); - - sparc_store_gregset_from_stack (regcache, buf); -} - -static void -sparc_store_fpregset (struct regcache *regcache, const void *buf) -{ - int i; - int range; - - for (range = 0; range < N_FPREGS_RANGES; range++) - for (i = fpregs_ranges[range].regno_start; - i <= fpregs_ranges[range].regno_end; - i++) - supply_register (regcache, i, ((char *) buf) + sparc_regmap[i]); -} - -static const gdb_byte sparc_breakpoint[INSN_SIZE] = { - 0x91, 0xd0, 0x20, 0x01 -}; -#define sparc_breakpoint_len INSN_SIZE - -/* Implementation of linux_target_ops method "sw_breakpoint_from_kind". */ - -static const unsigned char * -sparc_sw_breakpoint_from_kind (int kind, int *size) -{ - *size = sparc_breakpoint_len; - return sparc_breakpoint; -} - -static int -sparc_breakpoint_at (CORE_ADDR where) -{ - unsigned char insn[INSN_SIZE]; - - (*the_target->read_memory) (where, (unsigned char *) insn, sizeof (insn)); - - if (memcmp (sparc_breakpoint, insn, sizeof (insn)) == 0) - return 1; - - /* If necessary, recognize more trap instructions here. GDB only - uses TRAP Always. */ - - return 0; -} - -static void -sparc_arch_setup (void) -{ - current_process ()->tdesc = tdesc_sparc64; -} - -static struct regset_info sparc_regsets[] = { - { PTRACE_GETREGS, PTRACE_SETREGS, 0, sizeof (elf_gregset_t), - GENERAL_REGS, - sparc_fill_gregset, sparc_store_gregset }, - { PTRACE_GETFPREGS, PTRACE_SETFPREGS, 0, sizeof (fpregset_t), - FP_REGS, - sparc_fill_fpregset, sparc_store_fpregset }, - NULL_REGSET -}; - -static struct regsets_info sparc_regsets_info = - { - sparc_regsets, /* regsets */ - 0, /* num_regsets */ - NULL, /* disabled_regsets */ - }; - -static struct usrregs_info sparc_usrregs_info = - { - sparc_num_regs, - /* No regmap needs to be provided since this impl. doesn't use - USRREGS. */ - NULL - }; - -static struct regs_info regs_info = - { - NULL, /* regset_bitmap */ - &sparc_usrregs_info, - &sparc_regsets_info - }; - -static const struct regs_info * -sparc_regs_info (void) -{ - return ®s_info; -} - -struct linux_target_ops the_low_target = { - sparc_arch_setup, - sparc_regs_info, - sparc_cannot_fetch_register, - sparc_cannot_store_register, - NULL, /* fetch_register */ - linux_get_pc_64bit, - /* No sparc_set_pc is needed. */ - NULL, - NULL, /* breakpoint_kind_from_pc */ - sparc_sw_breakpoint_from_kind, - NULL, /* get_next_pcs */ - 0, - sparc_breakpoint_at, - NULL, /* supports_z_point_type */ - NULL, NULL, NULL, NULL, - NULL, NULL -}; - -void -initialize_low_arch (void) -{ - /* Initialize the Linux target descriptions. */ - init_registers_sparc64 (); - - initialize_regsets_info (&sparc_regsets_info); -} diff -Nru gdb-9.1/gdb/gdbserver/linux-tic6x-low.c gdb-10.2/gdb/gdbserver/linux-tic6x-low.c --- gdb-9.1/gdb/gdbserver/linux-tic6x-low.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/linux-tic6x-low.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,455 +0,0 @@ -/* Target dependent code for GDB on TI C6x systems. - - Copyright (C) 2010-2020 Free Software Foundation, Inc. - Contributed by Andrew Jenner <andrew@codesourcery.com> - Contributed by Yao Qi <yao@codesourcery.com> - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "server.h" -#include "linux-low.h" -#include "arch/tic6x.h" -#include "tdesc.h" - -#include "nat/gdb_ptrace.h" -#include <endian.h> - -#include "gdb_proc_service.h" - -#ifndef PTRACE_GET_THREAD_AREA -#define PTRACE_GET_THREAD_AREA 25 -#endif - -/* There are at most 69 registers accessible in ptrace. */ -#define TIC6X_NUM_REGS 69 - -#include <asm/ptrace.h> - -/* Defined in auto-generated file tic6x-c64xp-linux.c. */ -void init_registers_tic6x_c64xp_linux (void); -extern const struct target_desc *tdesc_tic6x_c64xp_linux; - -/* Defined in auto-generated file tic6x-c64x-linux.c. */ -void init_registers_tic6x_c64x_linux (void); -extern const struct target_desc *tdesc_tic6x_c64x_linux; - -/* Defined in auto-generated file tic62x-c6xp-linux.c. */ -void init_registers_tic6x_c62x_linux (void); -extern const struct target_desc *tdesc_tic6x_c62x_linux; - -union tic6x_register -{ - unsigned char buf[4]; - - int reg32; -}; - -/* Return the ptrace ``address'' of register REGNO. */ - -#if __BYTE_ORDER == __BIG_ENDIAN -static int tic6x_regmap_c64xp[] = { - /* A0 - A15 */ - 53, 52, 55, 54, 57, 56, 59, 58, - 61, 60, 63, 62, 65, 64, 67, 66, - /* B0 - B15 */ - 23, 22, 25, 24, 27, 26, 29, 28, - 31, 30, 33, 32, 35, 34, 69, 68, - /* CSR PC */ - 5, 4, - /* A16 - A31 */ - 37, 36, 39, 38, 41, 40, 43, 42, - 45, 44, 47, 46, 49, 48, 51, 50, - /* B16 - B31 */ - 7, 6, 9, 8, 11, 10, 13, 12, - 15, 14, 17, 16, 19, 18, 21, 20, - /* TSR, ILC, RILC */ - 1, 2, 3 -}; - -static int tic6x_regmap_c64x[] = { - /* A0 - A15 */ - 51, 50, 53, 52, 55, 54, 57, 56, - 59, 58, 61, 60, 63, 62, 65, 64, - /* B0 - B15 */ - 21, 20, 23, 22, 25, 24, 27, 26, - 29, 28, 31, 30, 33, 32, 67, 66, - /* CSR PC */ - 3, 2, - /* A16 - A31 */ - 35, 34, 37, 36, 39, 38, 41, 40, - 43, 42, 45, 44, 47, 46, 49, 48, - /* B16 - B31 */ - 5, 4, 7, 6, 9, 8, 11, 10, - 13, 12, 15, 14, 17, 16, 19, 18, - -1, -1, -1 -}; - -static int tic6x_regmap_c62x[] = { - /* A0 - A15 */ - 19, 18, 21, 20, 23, 22, 25, 24, - 27, 26, 29, 28, 31, 30, 33, 32, - /* B0 - B15 */ - 5, 4, 7, 6, 9, 8, 11, 10, - 13, 12, 15, 14, 17, 16, 35, 34, - /* CSR, PC */ - 3, 2, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1 -}; - -#else -static int tic6x_regmap_c64xp[] = { - /* A0 - A15 */ - 52, 53, 54, 55, 56, 57, 58, 59, - 60, 61, 62, 63, 64, 65, 66, 67, - /* B0 - B15 */ - 22, 23, 24, 25, 26, 27, 28, 29, - 30, 31, 32, 33, 34, 35, 68, 69, - /* CSR PC */ - 4, 5, - /* A16 - A31 */ - 36, 37, 38, 39, 40, 41, 42, 43, - 44, 45, 46, 47, 48, 49, 50, 51, - /* B16 -B31 */ - 6, 7, 8, 9, 10, 11, 12, 13, - 14, 15, 16, 17, 18, 19, 20, 31, - /* TSR, ILC, RILC */ - 0, 3, 2 -}; - -static int tic6x_regmap_c64x[] = { - /* A0 - A15 */ - 50, 51, 52, 53, 54, 55, 56, 57, - 58, 59, 60, 61, 62, 63, 64, 65, - /* B0 - B15 */ - 20, 21, 22, 23, 24, 25, 26, 27, - 28, 29, 30, 31, 32, 33, 66, 67, - /* CSR PC */ - 2, 3, - /* A16 - A31 */ - 34, 35, 36, 37, 38, 39, 40, 41, - 42, 43, 44, 45, 46, 47, 48, 49, - /* B16 - B31 */ - 4, 5, 6, 7, 8, 9, 10, 11, - 12, 13, 14, 15, 16, 17, 18, 19, - -1, -1, -1 -}; - -static int tic6x_regmap_c62x[] = { - /* A0 - A15 */ - 18, 19, 20, 21, 22, 23, 24, 25, - 26, 27, 28, 29, 30, 31, 32, 33, - /* B0 - B15 */ - 4, 5, 6, 7, 8, 9, 10, 11, - 12, 13, 14, 15, 16, 17, 34, 35, - /* CSR PC */ - 2, 3, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1 -}; - -#endif - -extern struct linux_target_ops the_low_target; - -static int *tic6x_regmap; -static unsigned int tic6x_breakpoint; -#define tic6x_breakpoint_len 4 - -/* Implementation of linux_target_ops method "sw_breakpoint_from_kind". */ - -static const gdb_byte * -tic6x_sw_breakpoint_from_kind (int kind, int *size) -{ - *size = tic6x_breakpoint_len; - return (const gdb_byte *) &tic6x_breakpoint; -} - -static struct usrregs_info tic6x_usrregs_info = - { - TIC6X_NUM_REGS, - NULL, /* Set in tic6x_read_description. */ - }; - -static const struct target_desc * -tic6x_read_description (enum c6x_feature feature) -{ - static target_desc *tdescs[C6X_LAST] = { }; - struct target_desc **tdesc = &tdescs[feature]; - - if (*tdesc == NULL) - { - *tdesc = tic6x_create_target_description (feature); - static const char *expedite_regs[] = { "A15", "PC", NULL }; - init_target_desc (*tdesc, expedite_regs); - } - - return *tdesc; -} - -static int -tic6x_cannot_fetch_register (int regno) -{ - return (tic6x_regmap[regno] == -1); -} - -static int -tic6x_cannot_store_register (int regno) -{ - return (tic6x_regmap[regno] == -1); -} - -static CORE_ADDR -tic6x_get_pc (struct regcache *regcache) -{ - union tic6x_register pc; - - collect_register_by_name (regcache, "PC", pc.buf); - return pc.reg32; -} - -static void -tic6x_set_pc (struct regcache *regcache, CORE_ADDR pc) -{ - union tic6x_register newpc; - - newpc.reg32 = pc; - supply_register_by_name (regcache, "PC", newpc.buf); -} - -static int -tic6x_breakpoint_at (CORE_ADDR where) -{ - unsigned int insn; - - (*the_target->read_memory) (where, (unsigned char *) &insn, 4); - if (insn == tic6x_breakpoint) - return 1; - - /* If necessary, recognize more trap instructions here. GDB only uses the - one. */ - return 0; -} - -/* Fetch the thread-local storage pointer for libthread_db. */ - -ps_err_e -ps_get_thread_area (struct ps_prochandle *ph, - lwpid_t lwpid, int idx, void **base) -{ - if (ptrace (PTRACE_GET_THREAD_AREA, lwpid, NULL, base) != 0) - return PS_ERR; - - /* IDX is the bias from the thread pointer to the beginning of the - thread descriptor. It has to be subtracted due to implementation - quirks in libthread_db. */ - *base = (void *) ((char *) *base - idx); - - return PS_OK; -} - -static void -tic6x_collect_register (struct regcache *regcache, int regno, - union tic6x_register *reg) -{ - union tic6x_register tmp_reg; - - collect_register (regcache, regno, &tmp_reg.reg32); - reg->reg32 = tmp_reg.reg32; -} - -static void -tic6x_supply_register (struct regcache *regcache, int regno, - const union tic6x_register *reg) -{ - int offset = 0; - - supply_register (regcache, regno, reg->buf + offset); -} - -static void -tic6x_fill_gregset (struct regcache *regcache, void *buf) -{ - auto regset = static_cast<union tic6x_register *> (buf); - int i; - - for (i = 0; i < TIC6X_NUM_REGS; i++) - if (tic6x_regmap[i] != -1) - tic6x_collect_register (regcache, i, regset + tic6x_regmap[i]); -} - -static void -tic6x_store_gregset (struct regcache *regcache, const void *buf) -{ - const auto regset = static_cast<const union tic6x_register *> (buf); - int i; - - for (i = 0; i < TIC6X_NUM_REGS; i++) - if (tic6x_regmap[i] != -1) - tic6x_supply_register (regcache, i, regset + tic6x_regmap[i]); -} - -static struct regset_info tic6x_regsets[] = { - { PTRACE_GETREGS, PTRACE_SETREGS, 0, TIC6X_NUM_REGS * 4, GENERAL_REGS, - tic6x_fill_gregset, tic6x_store_gregset }, - NULL_REGSET -}; - -static void -tic6x_arch_setup (void) -{ - register unsigned int csr asm ("B2"); - unsigned int cpuid; - enum c6x_feature feature = C6X_CORE; - - /* Determine the CPU we're running on to find the register order. */ - __asm__ ("MVC .S2 CSR,%0" : "=r" (csr) :); - cpuid = csr >> 24; - switch (cpuid) - { - case 0x00: /* C62x */ - case 0x02: /* C67x */ - tic6x_regmap = tic6x_regmap_c62x; - tic6x_breakpoint = 0x0000a122; /* BNOP .S2 0,5 */ - feature = C6X_CORE; - break; - case 0x03: /* C67x+ */ - tic6x_regmap = tic6x_regmap_c64x; - tic6x_breakpoint = 0x0000a122; /* BNOP .S2 0,5 */ - feature = C6X_GP; - break; - case 0x0c: /* C64x */ - tic6x_regmap = tic6x_regmap_c64x; - tic6x_breakpoint = 0x0000a122; /* BNOP .S2 0,5 */ - feature = C6X_GP; - break; - case 0x10: /* C64x+ */ - case 0x14: /* C674x */ - case 0x15: /* C66x */ - tic6x_regmap = tic6x_regmap_c64xp; - tic6x_breakpoint = 0x56454314; /* illegal opcode */ - feature = C6X_C6XP; - break; - default: - error ("Unknown CPU ID 0x%02x", cpuid); - } - tic6x_usrregs_info.regmap = tic6x_regmap; - - current_process ()->tdesc = tic6x_read_description (feature); -} - -/* Support for hardware single step. */ - -static int -tic6x_supports_hardware_single_step (void) -{ - return 1; -} - -static struct regsets_info tic6x_regsets_info = - { - tic6x_regsets, /* regsets */ - 0, /* num_regsets */ - NULL, /* disabled_regsets */ - }; - -static struct regs_info regs_info = - { - NULL, /* regset_bitmap */ - &tic6x_usrregs_info, - &tic6x_regsets_info - }; - -static const struct regs_info * -tic6x_regs_info (void) -{ - return ®s_info; -} - -struct linux_target_ops the_low_target = { - tic6x_arch_setup, - tic6x_regs_info, - tic6x_cannot_fetch_register, - tic6x_cannot_store_register, - NULL, /* fetch_register */ - tic6x_get_pc, - tic6x_set_pc, - NULL, /* breakpoint_kind_from_pc */ - tic6x_sw_breakpoint_from_kind, - NULL, - 0, - tic6x_breakpoint_at, - NULL, /* supports_z_point_type */ - NULL, /* insert_point */ - NULL, /* remove_point */ - NULL, /* stopped_by_watchpoint */ - NULL, /* stopped_data_address */ - NULL, /* collect_ptrace_register */ - NULL, /* supply_ptrace_register */ - NULL, /* siginfo_fixup */ - NULL, /* new_process */ - NULL, /* delete_process */ - NULL, /* new_thread */ - NULL, /* delete_thread */ - NULL, /* new_fork */ - NULL, /* prepare_to_resume */ - NULL, /* process_qsupported */ - NULL, /* supports_tracepoints */ - NULL, /* get_thread_area */ - NULL, /* install_fast_tracepoint_jump_pad */ - NULL, /* emit_ops */ - NULL, /* get_min_fast_tracepoint_insn_len */ - NULL, /* supports_range_stepping */ - NULL, /* breakpoint_kind_from_current_state */ - tic6x_supports_hardware_single_step, -}; - -#if GDB_SELF_TEST -#include "gdbsupport/selftest.h" - -namespace selftests { -namespace tdesc { -static void -tic6x_tdesc_test () -{ - SELF_CHECK (*tdesc_tic6x_c62x_linux == *tic6x_read_description (C6X_CORE)); - SELF_CHECK (*tdesc_tic6x_c64x_linux == *tic6x_read_description (C6X_GP)); - SELF_CHECK (*tdesc_tic6x_c64xp_linux == *tic6x_read_description (C6X_C6XP)); -} -} -} -#endif - -void -initialize_low_arch (void) -{ -#if GDB_SELF_TEST - /* Initialize the Linux target descriptions. */ - init_registers_tic6x_c64xp_linux (); - init_registers_tic6x_c64x_linux (); - init_registers_tic6x_c62x_linux (); - - selftests::register_test ("tic6x-tdesc", selftests::tdesc::tic6x_tdesc_test); -#endif - - initialize_regsets_info (&tic6x_regsets_info); -} diff -Nru gdb-9.1/gdb/gdbserver/linux-tile-low.c gdb-10.2/gdb/gdbserver/linux-tile-low.c --- gdb-9.1/gdb/gdbserver/linux-tile-low.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/linux-tile-low.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,222 +0,0 @@ -/* GNU/Linux/TILE-Gx specific low level interface, GDBserver. - - Copyright (C) 2012-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "server.h" -#include "linux-low.h" - -#include <arch/abi.h> -#include "nat/gdb_ptrace.h" - -/* Defined in auto-generated file reg-tilegx.c. */ -void init_registers_tilegx (void); -extern const struct target_desc *tdesc_tilegx; - -/* Defined in auto-generated file reg-tilegx32.c. */ -void init_registers_tilegx32 (void); -extern const struct target_desc *tdesc_tilegx32; - -#define tile_num_regs 65 - -static int tile_regmap[] = -{ - 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, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, - 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, - -1, -1, -1, -1, -1, -1, -1, -1, - 56 -}; - -static int -tile_cannot_fetch_register (int regno) -{ - if (regno >= 0 && regno < 56) - return 0; - else if (regno == 64) - return 0; - else - return 1; -} - -static int -tile_cannot_store_register (int regno) -{ - if (regno >= 0 && regno < 56) - return 0; - else if (regno == 64) - return 0; - else - return 1; -} - -static uint64_t tile_breakpoint = 0x400b3cae70166000ULL; -#define tile_breakpoint_len 8 - -/* Implementation of linux_target_ops method "sw_breakpoint_from_kind". */ - -static const gdb_byte * -tile_sw_breakpoint_from_kind (int kind, int *size) -{ - *size = tile_breakpoint_len; - return (const gdb_byte *) &tile_breakpoint; -} - -static int -tile_breakpoint_at (CORE_ADDR where) -{ - uint64_t insn; - - (*the_target->read_memory) (where, (unsigned char *) &insn, 8); - if (insn == tile_breakpoint) - return 1; - - /* If necessary, recognize more trap instructions here. GDB only uses the - one. */ - return 0; -} - -static void -tile_fill_gregset (struct regcache *regcache, void *buf) -{ - int i; - - for (i = 0; i < tile_num_regs; i++) - if (tile_regmap[i] != -1) - collect_register (regcache, i, ((uint_reg_t *) buf) + tile_regmap[i]); -} - -static void -tile_store_gregset (struct regcache *regcache, const void *buf) -{ - int i; - - for (i = 0; i < tile_num_regs; i++) - if (tile_regmap[i] != -1) - supply_register (regcache, i, ((uint_reg_t *) buf) + tile_regmap[i]); -} - -static struct regset_info tile_regsets[] = -{ - { PTRACE_GETREGS, PTRACE_SETREGS, 0, tile_num_regs * 8, - GENERAL_REGS, tile_fill_gregset, tile_store_gregset }, - NULL_REGSET -}; - -static struct regsets_info tile_regsets_info = - { - tile_regsets, /* regsets */ - 0, /* num_regsets */ - NULL, /* disabled_regsets */ - }; - -static struct usrregs_info tile_usrregs_info = - { - tile_num_regs, - tile_regmap, - }; - -static struct regs_info regs_info = - { - NULL, /* regset_bitmap */ - &tile_usrregs_info, - &tile_regsets_info, - }; - -static const struct regs_info * -tile_regs_info (void) -{ - return ®s_info; -} - -static void -tile_arch_setup (void) -{ - int pid = pid_of (current_thread); - unsigned int machine; - int is_elf64 = linux_pid_exe_is_elf_64_file (pid, &machine); - - if (sizeof (void *) == 4) - if (is_elf64 > 0) - error (_("Can't debug 64-bit process with 32-bit GDBserver")); - - if (!is_elf64) - current_process ()->tdesc = tdesc_tilegx32; - else - current_process ()->tdesc = tdesc_tilegx; -} - -/* Support for hardware single step. */ - -static int -tile_supports_hardware_single_step (void) -{ - return 1; -} - - -struct linux_target_ops the_low_target = -{ - tile_arch_setup, - tile_regs_info, - tile_cannot_fetch_register, - tile_cannot_store_register, - NULL, - linux_get_pc_64bit, - linux_set_pc_64bit, - NULL, /* breakpoint_kind_from_pc */ - tile_sw_breakpoint_from_kind, - NULL, - 0, - tile_breakpoint_at, - NULL, /* supports_z_point_type */ - NULL, /* insert_point */ - NULL, /* remove_point */ - NULL, /* stopped_by_watchpoint */ - NULL, /* stopped_data_address */ - NULL, /* collect_ptrace_register */ - NULL, /* supply_ptrace_register */ - NULL, /* siginfo_fixup */ - NULL, /* new_process */ - NULL, /* delete_process */ - NULL, /* new_thread */ - NULL, /* delete_thread */ - NULL, /* new_fork */ - NULL, /* prepare_to_resume */ - NULL, /* process_qsupported */ - NULL, /* supports_tracepoints */ - NULL, /* get_thread_area */ - NULL, /* install_fast_tracepoint_jump_pad */ - NULL, /* emit_ops */ - NULL, /* get_min_fast_tracepoint_insn_len */ - NULL, /* supports_range_stepping */ - NULL, /* breakpoint_kind_from_current_state */ - tile_supports_hardware_single_step, -}; - -void -initialize_low_arch (void) -{ - init_registers_tilegx32(); - init_registers_tilegx(); - - initialize_regsets_info (&tile_regsets_info); -} diff -Nru gdb-9.1/gdb/gdbserver/linux-x86-low.c gdb-10.2/gdb/gdbserver/linux-x86-low.c --- gdb-9.1/gdb/gdbserver/linux-x86-low.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/linux-x86-low.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,2922 +0,0 @@ -/* GNU/Linux/x86-64 specific low level interface, for the remote server - for GDB. - Copyright (C) 2002-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "server.h" -#include <signal.h> -#include <limits.h> -#include <inttypes.h> -#include "linux-low.h" -#include "i387-fp.h" -#include "x86-low.h" -#include "gdbsupport/x86-xstate.h" -#include "nat/gdb_ptrace.h" - -#ifdef __x86_64__ -#include "nat/amd64-linux-siginfo.h" -#endif - -#include "gdb_proc_service.h" -/* Don't include elf/common.h if linux/elf.h got included by - gdb_proc_service.h. */ -#ifndef ELFMAG0 -#include "elf/common.h" -#endif - -#include "gdbsupport/agent.h" -#include "tdesc.h" -#include "tracepoint.h" -#include "ax.h" -#include "nat/linux-nat.h" -#include "nat/x86-linux.h" -#include "nat/x86-linux-dregs.h" -#include "linux-x86-tdesc.h" - -#ifdef __x86_64__ -static struct target_desc *tdesc_amd64_linux_no_xml; -#endif -static struct target_desc *tdesc_i386_linux_no_xml; - - -static unsigned char jump_insn[] = { 0xe9, 0, 0, 0, 0 }; -static unsigned char small_jump_insn[] = { 0x66, 0xe9, 0, 0 }; - -/* Backward compatibility for gdb without XML support. */ - -static const char *xmltarget_i386_linux_no_xml = "@<target>\ -<architecture>i386</architecture>\ -<osabi>GNU/Linux</osabi>\ -</target>"; - -#ifdef __x86_64__ -static const char *xmltarget_amd64_linux_no_xml = "@<target>\ -<architecture>i386:x86-64</architecture>\ -<osabi>GNU/Linux</osabi>\ -</target>"; -#endif - -#include <sys/reg.h> -#include <sys/procfs.h> -#include <sys/uio.h> - -#ifndef PTRACE_GET_THREAD_AREA -#define PTRACE_GET_THREAD_AREA 25 -#endif - -/* This definition comes from prctl.h, but some kernels may not have it. */ -#ifndef PTRACE_ARCH_PRCTL -#define PTRACE_ARCH_PRCTL 30 -#endif - -/* The following definitions come from prctl.h, but may be absent - for certain configurations. */ -#ifndef ARCH_GET_FS -#define ARCH_SET_GS 0x1001 -#define ARCH_SET_FS 0x1002 -#define ARCH_GET_FS 0x1003 -#define ARCH_GET_GS 0x1004 -#endif - -/* Per-process arch-specific data we want to keep. */ - -struct arch_process_info -{ - struct x86_debug_reg_state debug_reg_state; -}; - -#ifdef __x86_64__ - -/* Mapping between the general-purpose registers in `struct user' - format and GDB's register array layout. - Note that the transfer layout uses 64-bit regs. */ -static /*const*/ int i386_regmap[] = -{ - RAX * 8, RCX * 8, RDX * 8, RBX * 8, - RSP * 8, RBP * 8, RSI * 8, RDI * 8, - RIP * 8, EFLAGS * 8, CS * 8, SS * 8, - DS * 8, ES * 8, FS * 8, GS * 8 -}; - -#define I386_NUM_REGS (sizeof (i386_regmap) / sizeof (i386_regmap[0])) - -/* So code below doesn't have to care, i386 or amd64. */ -#define ORIG_EAX ORIG_RAX -#define REGSIZE 8 - -static const int x86_64_regmap[] = -{ - RAX * 8, RBX * 8, RCX * 8, RDX * 8, - RSI * 8, RDI * 8, RBP * 8, RSP * 8, - R8 * 8, R9 * 8, R10 * 8, R11 * 8, - R12 * 8, R13 * 8, R14 * 8, R15 * 8, - RIP * 8, EFLAGS * 8, CS * 8, SS * 8, - DS * 8, ES * 8, FS * 8, GS * 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, - ORIG_RAX * 8, -#ifdef HAVE_STRUCT_USER_REGS_STRUCT_FS_BASE - 21 * 8, 22 * 8, -#else - -1, -1, -#endif - -1, -1, -1, -1, /* MPX registers BND0 ... BND3. */ - -1, -1, /* MPX registers BNDCFGU, BNDSTATUS. */ - -1, -1, -1, -1, -1, -1, -1, -1, /* xmm16 ... xmm31 (AVX512) */ - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, /* ymm16 ... ymm31 (AVX512) */ - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, /* k0 ... k7 (AVX512) */ - -1, -1, -1, -1, -1, -1, -1, -1, /* zmm0 ... zmm31 (AVX512) */ - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1 /* pkru */ -}; - -#define X86_64_NUM_REGS (sizeof (x86_64_regmap) / sizeof (x86_64_regmap[0])) -#define X86_64_USER_REGS (GS + 1) - -#else /* ! __x86_64__ */ - -/* Mapping between the general-purpose registers in `struct user' - format and GDB's register array layout. */ -static /*const*/ int i386_regmap[] = -{ - EAX * 4, ECX * 4, EDX * 4, EBX * 4, - UESP * 4, EBP * 4, ESI * 4, EDI * 4, - EIP * 4, EFL * 4, CS * 4, SS * 4, - DS * 4, ES * 4, FS * 4, GS * 4 -}; - -#define I386_NUM_REGS (sizeof (i386_regmap) / sizeof (i386_regmap[0])) - -#define REGSIZE 4 - -#endif - -#ifdef __x86_64__ - -/* Returns true if the current inferior belongs to a x86-64 process, - per the tdesc. */ - -static int -is_64bit_tdesc (void) -{ - struct regcache *regcache = get_thread_regcache (current_thread, 0); - - return register_size (regcache->tdesc, 0) == 8; -} - -#endif - - -/* Called by libthread_db. */ - -ps_err_e -ps_get_thread_area (struct ps_prochandle *ph, - lwpid_t lwpid, int idx, void **base) -{ -#ifdef __x86_64__ - int use_64bit = is_64bit_tdesc (); - - if (use_64bit) - { - switch (idx) - { - case FS: - if (ptrace (PTRACE_ARCH_PRCTL, lwpid, base, ARCH_GET_FS) == 0) - return PS_OK; - break; - case GS: - if (ptrace (PTRACE_ARCH_PRCTL, lwpid, base, ARCH_GET_GS) == 0) - return PS_OK; - break; - default: - return PS_BADADDR; - } - return PS_ERR; - } -#endif - - { - unsigned int desc[4]; - - if (ptrace (PTRACE_GET_THREAD_AREA, lwpid, - (void *) (intptr_t) idx, (unsigned long) &desc) < 0) - return PS_ERR; - - /* Ensure we properly extend the value to 64-bits for x86_64. */ - *base = (void *) (uintptr_t) desc[1]; - return PS_OK; - } -} - -/* Get the thread area address. This is used to recognize which - thread is which when tracing with the in-process agent library. We - don't read anything from the address, and treat it as opaque; it's - the address itself that we assume is unique per-thread. */ - -static int -x86_get_thread_area (int lwpid, CORE_ADDR *addr) -{ -#ifdef __x86_64__ - int use_64bit = is_64bit_tdesc (); - - if (use_64bit) - { - void *base; - if (ptrace (PTRACE_ARCH_PRCTL, lwpid, &base, ARCH_GET_FS) == 0) - { - *addr = (CORE_ADDR) (uintptr_t) base; - return 0; - } - - return -1; - } -#endif - - { - struct lwp_info *lwp = find_lwp_pid (ptid_t (lwpid)); - struct thread_info *thr = get_lwp_thread (lwp); - struct regcache *regcache = get_thread_regcache (thr, 1); - unsigned int desc[4]; - ULONGEST gs = 0; - const int reg_thread_area = 3; /* bits to scale down register value. */ - int idx; - - collect_register_by_name (regcache, "gs", &gs); - - idx = gs >> reg_thread_area; - - if (ptrace (PTRACE_GET_THREAD_AREA, - lwpid_of (thr), - (void *) (long) idx, (unsigned long) &desc) < 0) - return -1; - - *addr = desc[1]; - return 0; - } -} - - - -static int -x86_cannot_store_register (int regno) -{ -#ifdef __x86_64__ - if (is_64bit_tdesc ()) - return 0; -#endif - - return regno >= I386_NUM_REGS; -} - -static int -x86_cannot_fetch_register (int regno) -{ -#ifdef __x86_64__ - if (is_64bit_tdesc ()) - return 0; -#endif - - return regno >= I386_NUM_REGS; -} - -static void -x86_fill_gregset (struct regcache *regcache, void *buf) -{ - int i; - -#ifdef __x86_64__ - if (register_size (regcache->tdesc, 0) == 8) - { - for (i = 0; i < X86_64_NUM_REGS; i++) - if (x86_64_regmap[i] != -1) - collect_register (regcache, i, ((char *) buf) + x86_64_regmap[i]); - -#ifndef HAVE_STRUCT_USER_REGS_STRUCT_FS_BASE - { - unsigned long base; - int lwpid = lwpid_of (current_thread); - - collect_register_by_name (regcache, "fs_base", &base); - ptrace (PTRACE_ARCH_PRCTL, lwpid, &base, ARCH_SET_FS); - - collect_register_by_name (regcache, "gs_base", &base); - ptrace (PTRACE_ARCH_PRCTL, lwpid, &base, ARCH_SET_GS); - } -#endif - - return; - } - - /* 32-bit inferior registers need to be zero-extended. - Callers would read uninitialized memory otherwise. */ - memset (buf, 0x00, X86_64_USER_REGS * 8); -#endif - - for (i = 0; i < I386_NUM_REGS; i++) - collect_register (regcache, i, ((char *) buf) + i386_regmap[i]); - - collect_register_by_name (regcache, "orig_eax", - ((char *) buf) + ORIG_EAX * REGSIZE); - -#ifdef __x86_64__ - /* Sign extend EAX value to avoid potential syscall restart - problems. - - See amd64_linux_collect_native_gregset() in gdb/amd64-linux-nat.c - for a detailed explanation. */ - if (register_size (regcache->tdesc, 0) == 4) - { - void *ptr = ((gdb_byte *) buf - + i386_regmap[find_regno (regcache->tdesc, "eax")]); - - *(int64_t *) ptr = *(int32_t *) ptr; - } -#endif -} - -static void -x86_store_gregset (struct regcache *regcache, const void *buf) -{ - int i; - -#ifdef __x86_64__ - if (register_size (regcache->tdesc, 0) == 8) - { - for (i = 0; i < X86_64_NUM_REGS; i++) - if (x86_64_regmap[i] != -1) - supply_register (regcache, i, ((char *) buf) + x86_64_regmap[i]); - -#ifndef HAVE_STRUCT_USER_REGS_STRUCT_FS_BASE - { - unsigned long base; - int lwpid = lwpid_of (current_thread); - - if (ptrace (PTRACE_ARCH_PRCTL, lwpid, &base, ARCH_GET_FS) == 0) - supply_register_by_name (regcache, "fs_base", &base); - - if (ptrace (PTRACE_ARCH_PRCTL, lwpid, &base, ARCH_GET_GS) == 0) - supply_register_by_name (regcache, "gs_base", &base); - } -#endif - return; - } -#endif - - for (i = 0; i < I386_NUM_REGS; i++) - supply_register (regcache, i, ((char *) buf) + i386_regmap[i]); - - supply_register_by_name (regcache, "orig_eax", - ((char *) buf) + ORIG_EAX * REGSIZE); -} - -static void -x86_fill_fpregset (struct regcache *regcache, void *buf) -{ -#ifdef __x86_64__ - i387_cache_to_fxsave (regcache, buf); -#else - i387_cache_to_fsave (regcache, buf); -#endif -} - -static void -x86_store_fpregset (struct regcache *regcache, const void *buf) -{ -#ifdef __x86_64__ - i387_fxsave_to_cache (regcache, buf); -#else - i387_fsave_to_cache (regcache, buf); -#endif -} - -#ifndef __x86_64__ - -static void -x86_fill_fpxregset (struct regcache *regcache, void *buf) -{ - i387_cache_to_fxsave (regcache, buf); -} - -static void -x86_store_fpxregset (struct regcache *regcache, const void *buf) -{ - i387_fxsave_to_cache (regcache, buf); -} - -#endif - -static void -x86_fill_xstateregset (struct regcache *regcache, void *buf) -{ - i387_cache_to_xsave (regcache, buf); -} - -static void -x86_store_xstateregset (struct regcache *regcache, const void *buf) -{ - i387_xsave_to_cache (regcache, buf); -} - -/* ??? The non-biarch i386 case stores all the i387 regs twice. - Once in i387_.*fsave.* and once in i387_.*fxsave.*. - This is, presumably, to handle the case where PTRACE_[GS]ETFPXREGS - doesn't work. IWBN to avoid the duplication in the case where it - does work. Maybe the arch_setup routine could check whether it works - and update the supported regsets accordingly. */ - -static struct regset_info x86_regsets[] = -{ -#ifdef HAVE_PTRACE_GETREGS - { PTRACE_GETREGS, PTRACE_SETREGS, 0, sizeof (elf_gregset_t), - GENERAL_REGS, - x86_fill_gregset, x86_store_gregset }, - { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_X86_XSTATE, 0, - EXTENDED_REGS, x86_fill_xstateregset, x86_store_xstateregset }, -# ifndef __x86_64__ -# ifdef HAVE_PTRACE_GETFPXREGS - { PTRACE_GETFPXREGS, PTRACE_SETFPXREGS, 0, sizeof (elf_fpxregset_t), - EXTENDED_REGS, - x86_fill_fpxregset, x86_store_fpxregset }, -# endif -# endif - { PTRACE_GETFPREGS, PTRACE_SETFPREGS, 0, sizeof (elf_fpregset_t), - FP_REGS, - x86_fill_fpregset, x86_store_fpregset }, -#endif /* HAVE_PTRACE_GETREGS */ - NULL_REGSET -}; - -static CORE_ADDR -x86_get_pc (struct regcache *regcache) -{ - int use_64bit = register_size (regcache->tdesc, 0) == 8; - - if (use_64bit) - { - uint64_t pc; - - collect_register_by_name (regcache, "rip", &pc); - return (CORE_ADDR) pc; - } - else - { - uint32_t pc; - - collect_register_by_name (regcache, "eip", &pc); - return (CORE_ADDR) pc; - } -} - -static void -x86_set_pc (struct regcache *regcache, CORE_ADDR pc) -{ - int use_64bit = register_size (regcache->tdesc, 0) == 8; - - if (use_64bit) - { - uint64_t newpc = pc; - - supply_register_by_name (regcache, "rip", &newpc); - } - else - { - uint32_t newpc = pc; - - supply_register_by_name (regcache, "eip", &newpc); - } -} - -static const gdb_byte x86_breakpoint[] = { 0xCC }; -#define x86_breakpoint_len 1 - -static int -x86_breakpoint_at (CORE_ADDR pc) -{ - unsigned char c; - - (*the_target->read_memory) (pc, &c, 1); - if (c == 0xCC) - return 1; - - return 0; -} - -/* Low-level function vector. */ -struct x86_dr_low_type x86_dr_low = - { - x86_linux_dr_set_control, - x86_linux_dr_set_addr, - x86_linux_dr_get_addr, - x86_linux_dr_get_status, - x86_linux_dr_get_control, - sizeof (void *), - }; - -/* Breakpoint/Watchpoint support. */ - -static int -x86_supports_z_point_type (char z_type) -{ - switch (z_type) - { - case Z_PACKET_SW_BP: - case Z_PACKET_HW_BP: - case Z_PACKET_WRITE_WP: - case Z_PACKET_ACCESS_WP: - return 1; - default: - return 0; - } -} - -static int -x86_insert_point (enum raw_bkpt_type type, CORE_ADDR addr, - int size, struct raw_breakpoint *bp) -{ - struct process_info *proc = current_process (); - - switch (type) - { - case raw_bkpt_type_hw: - case raw_bkpt_type_write_wp: - case raw_bkpt_type_access_wp: - { - enum target_hw_bp_type hw_type - = raw_bkpt_type_to_target_hw_bp_type (type); - struct x86_debug_reg_state *state - = &proc->priv->arch_private->debug_reg_state; - - return x86_dr_insert_watchpoint (state, hw_type, addr, size); - } - - default: - /* Unsupported. */ - return 1; - } -} - -static int -x86_remove_point (enum raw_bkpt_type type, CORE_ADDR addr, - int size, struct raw_breakpoint *bp) -{ - struct process_info *proc = current_process (); - - switch (type) - { - case raw_bkpt_type_hw: - case raw_bkpt_type_write_wp: - case raw_bkpt_type_access_wp: - { - enum target_hw_bp_type hw_type - = raw_bkpt_type_to_target_hw_bp_type (type); - struct x86_debug_reg_state *state - = &proc->priv->arch_private->debug_reg_state; - - return x86_dr_remove_watchpoint (state, hw_type, addr, size); - } - default: - /* Unsupported. */ - return 1; - } -} - -static int -x86_stopped_by_watchpoint (void) -{ - struct process_info *proc = current_process (); - return x86_dr_stopped_by_watchpoint (&proc->priv->arch_private->debug_reg_state); -} - -static CORE_ADDR -x86_stopped_data_address (void) -{ - struct process_info *proc = current_process (); - CORE_ADDR addr; - if (x86_dr_stopped_data_address (&proc->priv->arch_private->debug_reg_state, - &addr)) - return addr; - return 0; -} - -/* Called when a new process is created. */ - -static struct arch_process_info * -x86_linux_new_process (void) -{ - struct arch_process_info *info = XCNEW (struct arch_process_info); - - x86_low_init_dregs (&info->debug_reg_state); - - return info; -} - -/* Called when a process is being deleted. */ - -static void -x86_linux_delete_process (struct arch_process_info *info) -{ - xfree (info); -} - -/* Target routine for linux_new_fork. */ - -static void -x86_linux_new_fork (struct process_info *parent, struct process_info *child) -{ - /* These are allocated by linux_add_process. */ - gdb_assert (parent->priv != NULL - && parent->priv->arch_private != NULL); - gdb_assert (child->priv != NULL - && child->priv->arch_private != NULL); - - /* Linux kernel before 2.6.33 commit - 72f674d203cd230426437cdcf7dd6f681dad8b0d - will inherit hardware debug registers from parent - on fork/vfork/clone. Newer Linux kernels create such tasks with - zeroed debug registers. - - GDB core assumes the child inherits the watchpoints/hw - breakpoints of the parent, and will remove them all from the - forked off process. Copy the debug registers mirrors into the - new process so that all breakpoints and watchpoints can be - removed together. The debug registers mirror will become zeroed - in the end before detaching the forked off process, thus making - this compatible with older Linux kernels too. */ - - *child->priv->arch_private = *parent->priv->arch_private; -} - -/* See nat/x86-dregs.h. */ - -struct x86_debug_reg_state * -x86_debug_reg_state (pid_t pid) -{ - struct process_info *proc = find_process_pid (pid); - - return &proc->priv->arch_private->debug_reg_state; -} - -/* When GDBSERVER is built as a 64-bit application on linux, the - PTRACE_GETSIGINFO data is always presented in 64-bit layout. Since - debugging a 32-bit inferior with a 64-bit GDBSERVER should look the same - as debugging it with a 32-bit GDBSERVER, we do the 32-bit <-> 64-bit - conversion in-place ourselves. */ - -/* Convert a ptrace/host siginfo object, into/from the siginfo in the - layout of the inferiors' architecture. Returns true if any - conversion was done; false otherwise. If DIRECTION is 1, then copy - from INF to PTRACE. If DIRECTION is 0, copy from PTRACE to - INF. */ - -static int -x86_siginfo_fixup (siginfo_t *ptrace, gdb_byte *inf, int direction) -{ -#ifdef __x86_64__ - unsigned int machine; - int tid = lwpid_of (current_thread); - int is_elf64 = linux_pid_exe_is_elf_64_file (tid, &machine); - - /* Is the inferior 32-bit? If so, then fixup the siginfo object. */ - if (!is_64bit_tdesc ()) - return amd64_linux_siginfo_fixup_common (ptrace, inf, direction, - FIXUP_32); - /* No fixup for native x32 GDB. */ - else if (!is_elf64 && sizeof (void *) == 8) - return amd64_linux_siginfo_fixup_common (ptrace, inf, direction, - FIXUP_X32); -#endif - - return 0; -} - -static int use_xml; - -/* Format of XSAVE extended state is: - struct - { - fxsave_bytes[0..463] - sw_usable_bytes[464..511] - xstate_hdr_bytes[512..575] - avx_bytes[576..831] - future_state etc - }; - - Same memory layout will be used for the coredump NT_X86_XSTATE - representing the XSAVE extended state registers. - - The first 8 bytes of the sw_usable_bytes[464..467] is the OS enabled - extended state mask, which is the same as the extended control register - 0 (the XFEATURE_ENABLED_MASK register), XCR0. We can use this mask - together with the mask saved in the xstate_hdr_bytes to determine what - states the processor/OS supports and what state, used or initialized, - the process/thread is in. */ -#define I386_LINUX_XSAVE_XCR0_OFFSET 464 - -/* Does the current host support the GETFPXREGS request? The header - file may or may not define it, and even if it is defined, the - kernel will return EIO if it's running on a pre-SSE processor. */ -int have_ptrace_getfpxregs = -#ifdef HAVE_PTRACE_GETFPXREGS - -1 -#else - 0 -#endif -; - -/* Get Linux/x86 target description from running target. */ - -static const struct target_desc * -x86_linux_read_description (void) -{ - unsigned int machine; - int is_elf64; - int xcr0_features; - int tid; - static uint64_t xcr0; - struct regset_info *regset; - - tid = lwpid_of (current_thread); - - is_elf64 = linux_pid_exe_is_elf_64_file (tid, &machine); - - if (sizeof (void *) == 4) - { - if (is_elf64 > 0) - error (_("Can't debug 64-bit process with 32-bit GDBserver")); -#ifndef __x86_64__ - else if (machine == EM_X86_64) - error (_("Can't debug x86-64 process with 32-bit GDBserver")); -#endif - } - -#if !defined __x86_64__ && defined HAVE_PTRACE_GETFPXREGS - if (machine == EM_386 && have_ptrace_getfpxregs == -1) - { - elf_fpxregset_t fpxregs; - - if (ptrace (PTRACE_GETFPXREGS, tid, 0, (long) &fpxregs) < 0) - { - have_ptrace_getfpxregs = 0; - have_ptrace_getregset = 0; - return i386_linux_read_description (X86_XSTATE_X87); - } - else - have_ptrace_getfpxregs = 1; - } -#endif - - if (!use_xml) - { - x86_xcr0 = X86_XSTATE_SSE_MASK; - - /* Don't use XML. */ -#ifdef __x86_64__ - if (machine == EM_X86_64) - return tdesc_amd64_linux_no_xml; - else -#endif - return tdesc_i386_linux_no_xml; - } - - if (have_ptrace_getregset == -1) - { - uint64_t xstateregs[(X86_XSTATE_SSE_SIZE / sizeof (uint64_t))]; - struct iovec iov; - - iov.iov_base = xstateregs; - iov.iov_len = sizeof (xstateregs); - - /* Check if PTRACE_GETREGSET works. */ - if (ptrace (PTRACE_GETREGSET, tid, - (unsigned int) NT_X86_XSTATE, (long) &iov) < 0) - have_ptrace_getregset = 0; - else - { - have_ptrace_getregset = 1; - - /* Get XCR0 from XSAVE extended state. */ - xcr0 = xstateregs[(I386_LINUX_XSAVE_XCR0_OFFSET - / sizeof (uint64_t))]; - - /* Use PTRACE_GETREGSET if it is available. */ - for (regset = x86_regsets; - regset->fill_function != NULL; regset++) - if (regset->get_request == PTRACE_GETREGSET) - regset->size = X86_XSTATE_SIZE (xcr0); - else if (regset->type != GENERAL_REGS) - regset->size = 0; - } - } - - /* Check the native XCR0 only if PTRACE_GETREGSET is available. */ - xcr0_features = (have_ptrace_getregset - && (xcr0 & X86_XSTATE_ALL_MASK)); - - if (xcr0_features) - x86_xcr0 = xcr0; - - if (machine == EM_X86_64) - { -#ifdef __x86_64__ - const target_desc *tdesc = NULL; - - if (xcr0_features) - { - tdesc = amd64_linux_read_description (xcr0 & X86_XSTATE_ALL_MASK, - !is_elf64); - } - - if (tdesc == NULL) - tdesc = amd64_linux_read_description (X86_XSTATE_SSE_MASK, !is_elf64); - return tdesc; -#endif - } - else - { - const target_desc *tdesc = NULL; - - if (xcr0_features) - tdesc = i386_linux_read_description (xcr0 & X86_XSTATE_ALL_MASK); - - if (tdesc == NULL) - tdesc = i386_linux_read_description (X86_XSTATE_SSE); - - return tdesc; - } - - gdb_assert_not_reached ("failed to return tdesc"); -} - -/* Update all the target description of all processes; a new GDB - connected, and it may or not support xml target descriptions. */ - -static void -x86_linux_update_xmltarget (void) -{ - struct thread_info *saved_thread = current_thread; - - /* Before changing the register cache's internal layout, flush the - contents of the current valid caches back to the threads, and - release the current regcache objects. */ - regcache_release (); - - for_each_process ([] (process_info *proc) { - int pid = proc->pid; - - /* Look up any thread of this process. */ - current_thread = find_any_thread_of_pid (pid); - - the_low_target.arch_setup (); - }); - - current_thread = saved_thread; -} - -/* Process qSupported query, "xmlRegisters=". Update the buffer size for - PTRACE_GETREGSET. */ - -static void -x86_linux_process_qsupported (char **features, int count) -{ - int i; - - /* Return if gdb doesn't support XML. If gdb sends "xmlRegisters=" - with "i386" in qSupported query, it supports x86 XML target - descriptions. */ - use_xml = 0; - for (i = 0; i < count; i++) - { - const char *feature = features[i]; - - if (startswith (feature, "xmlRegisters=")) - { - char *copy = xstrdup (feature + 13); - - char *saveptr; - for (char *p = strtok_r (copy, ",", &saveptr); - p != NULL; - p = strtok_r (NULL, ",", &saveptr)) - { - if (strcmp (p, "i386") == 0) - { - use_xml = 1; - break; - } - } - - free (copy); - } - } - x86_linux_update_xmltarget (); -} - -/* Common for x86/x86-64. */ - -static struct regsets_info x86_regsets_info = - { - x86_regsets, /* regsets */ - 0, /* num_regsets */ - NULL, /* disabled_regsets */ - }; - -#ifdef __x86_64__ -static struct regs_info amd64_linux_regs_info = - { - NULL, /* regset_bitmap */ - NULL, /* usrregs_info */ - &x86_regsets_info - }; -#endif -static struct usrregs_info i386_linux_usrregs_info = - { - I386_NUM_REGS, - i386_regmap, - }; - -static struct regs_info i386_linux_regs_info = - { - NULL, /* regset_bitmap */ - &i386_linux_usrregs_info, - &x86_regsets_info - }; - -const struct regs_info * -x86_linux_regs_info (void) -{ -#ifdef __x86_64__ - if (is_64bit_tdesc ()) - return &amd64_linux_regs_info; - else -#endif - return &i386_linux_regs_info; -} - -/* Initialize the target description for the architecture of the - inferior. */ - -static void -x86_arch_setup (void) -{ - current_process ()->tdesc = x86_linux_read_description (); -} - -/* Fill *SYSNO and *SYSRET with the syscall nr trapped and the syscall return - code. This should only be called if LWP got a SYSCALL_SIGTRAP. */ - -static void -x86_get_syscall_trapinfo (struct regcache *regcache, int *sysno) -{ - int use_64bit = register_size (regcache->tdesc, 0) == 8; - - if (use_64bit) - { - long l_sysno; - - collect_register_by_name (regcache, "orig_rax", &l_sysno); - *sysno = (int) l_sysno; - } - else - collect_register_by_name (regcache, "orig_eax", sysno); -} - -static int -x86_supports_tracepoints (void) -{ - return 1; -} - -static void -append_insns (CORE_ADDR *to, size_t len, const unsigned char *buf) -{ - target_write_memory (*to, buf, len); - *to += len; -} - -static int -push_opcode (unsigned char *buf, const char *op) -{ - unsigned char *buf_org = buf; - - while (1) - { - char *endptr; - unsigned long ul = strtoul (op, &endptr, 16); - - if (endptr == op) - break; - - *buf++ = ul; - op = endptr; - } - - return buf - buf_org; -} - -#ifdef __x86_64__ - -/* Build a jump pad that saves registers and calls a collection - function. Writes a jump instruction to the jump pad to - JJUMPAD_INSN. The caller is responsible to write it in at the - tracepoint address. */ - -static int -amd64_install_fast_tracepoint_jump_pad (CORE_ADDR tpoint, CORE_ADDR tpaddr, - CORE_ADDR collector, - CORE_ADDR lockaddr, - ULONGEST orig_size, - CORE_ADDR *jump_entry, - CORE_ADDR *trampoline, - ULONGEST *trampoline_size, - unsigned char *jjump_pad_insn, - ULONGEST *jjump_pad_insn_size, - CORE_ADDR *adjusted_insn_addr, - CORE_ADDR *adjusted_insn_addr_end, - char *err) -{ - unsigned char buf[40]; - int i, offset; - int64_t loffset; - - CORE_ADDR buildaddr = *jump_entry; - - /* Build the jump pad. */ - - /* First, do tracepoint data collection. Save registers. */ - i = 0; - /* Need to ensure stack pointer saved first. */ - buf[i++] = 0x54; /* push %rsp */ - buf[i++] = 0x55; /* push %rbp */ - buf[i++] = 0x57; /* push %rdi */ - buf[i++] = 0x56; /* push %rsi */ - buf[i++] = 0x52; /* push %rdx */ - buf[i++] = 0x51; /* push %rcx */ - buf[i++] = 0x53; /* push %rbx */ - buf[i++] = 0x50; /* push %rax */ - buf[i++] = 0x41; buf[i++] = 0x57; /* push %r15 */ - buf[i++] = 0x41; buf[i++] = 0x56; /* push %r14 */ - buf[i++] = 0x41; buf[i++] = 0x55; /* push %r13 */ - buf[i++] = 0x41; buf[i++] = 0x54; /* push %r12 */ - buf[i++] = 0x41; buf[i++] = 0x53; /* push %r11 */ - buf[i++] = 0x41; buf[i++] = 0x52; /* push %r10 */ - buf[i++] = 0x41; buf[i++] = 0x51; /* push %r9 */ - buf[i++] = 0x41; buf[i++] = 0x50; /* push %r8 */ - buf[i++] = 0x9c; /* pushfq */ - buf[i++] = 0x48; /* movabs <addr>,%rdi */ - buf[i++] = 0xbf; - memcpy (buf + i, &tpaddr, 8); - i += 8; - buf[i++] = 0x57; /* push %rdi */ - append_insns (&buildaddr, i, buf); - - /* Stack space for the collecting_t object. */ - i = 0; - i += push_opcode (&buf[i], "48 83 ec 18"); /* sub $0x18,%rsp */ - i += push_opcode (&buf[i], "48 b8"); /* mov <tpoint>,%rax */ - memcpy (buf + i, &tpoint, 8); - i += 8; - i += push_opcode (&buf[i], "48 89 04 24"); /* mov %rax,(%rsp) */ - i += push_opcode (&buf[i], - "64 48 8b 04 25 00 00 00 00"); /* mov %fs:0x0,%rax */ - i += push_opcode (&buf[i], "48 89 44 24 08"); /* mov %rax,0x8(%rsp) */ - append_insns (&buildaddr, i, buf); - - /* spin-lock. */ - i = 0; - i += push_opcode (&buf[i], "48 be"); /* movl <lockaddr>,%rsi */ - memcpy (&buf[i], (void *) &lockaddr, 8); - i += 8; - i += push_opcode (&buf[i], "48 89 e1"); /* mov %rsp,%rcx */ - i += push_opcode (&buf[i], "31 c0"); /* xor %eax,%eax */ - i += push_opcode (&buf[i], "f0 48 0f b1 0e"); /* lock cmpxchg %rcx,(%rsi) */ - i += push_opcode (&buf[i], "48 85 c0"); /* test %rax,%rax */ - i += push_opcode (&buf[i], "75 f4"); /* jne <again> */ - append_insns (&buildaddr, i, buf); - - /* Set up the gdb_collect call. */ - /* At this point, (stack pointer + 0x18) is the base of our saved - register block. */ - - i = 0; - i += push_opcode (&buf[i], "48 89 e6"); /* mov %rsp,%rsi */ - i += push_opcode (&buf[i], "48 83 c6 18"); /* add $0x18,%rsi */ - - /* tpoint address may be 64-bit wide. */ - i += push_opcode (&buf[i], "48 bf"); /* movl <addr>,%rdi */ - memcpy (buf + i, &tpoint, 8); - i += 8; - append_insns (&buildaddr, i, buf); - - /* The collector function being in the shared library, may be - >31-bits away off the jump pad. */ - i = 0; - i += push_opcode (&buf[i], "48 b8"); /* mov $collector,%rax */ - memcpy (buf + i, &collector, 8); - i += 8; - i += push_opcode (&buf[i], "ff d0"); /* callq *%rax */ - append_insns (&buildaddr, i, buf); - - /* Clear the spin-lock. */ - i = 0; - i += push_opcode (&buf[i], "31 c0"); /* xor %eax,%eax */ - i += push_opcode (&buf[i], "48 a3"); /* mov %rax, lockaddr */ - memcpy (buf + i, &lockaddr, 8); - i += 8; - append_insns (&buildaddr, i, buf); - - /* Remove stack that had been used for the collect_t object. */ - i = 0; - i += push_opcode (&buf[i], "48 83 c4 18"); /* add $0x18,%rsp */ - append_insns (&buildaddr, i, buf); - - /* Restore register state. */ - i = 0; - buf[i++] = 0x48; /* add $0x8,%rsp */ - buf[i++] = 0x83; - buf[i++] = 0xc4; - buf[i++] = 0x08; - buf[i++] = 0x9d; /* popfq */ - buf[i++] = 0x41; buf[i++] = 0x58; /* pop %r8 */ - buf[i++] = 0x41; buf[i++] = 0x59; /* pop %r9 */ - buf[i++] = 0x41; buf[i++] = 0x5a; /* pop %r10 */ - buf[i++] = 0x41; buf[i++] = 0x5b; /* pop %r11 */ - buf[i++] = 0x41; buf[i++] = 0x5c; /* pop %r12 */ - buf[i++] = 0x41; buf[i++] = 0x5d; /* pop %r13 */ - buf[i++] = 0x41; buf[i++] = 0x5e; /* pop %r14 */ - buf[i++] = 0x41; buf[i++] = 0x5f; /* pop %r15 */ - buf[i++] = 0x58; /* pop %rax */ - buf[i++] = 0x5b; /* pop %rbx */ - buf[i++] = 0x59; /* pop %rcx */ - buf[i++] = 0x5a; /* pop %rdx */ - buf[i++] = 0x5e; /* pop %rsi */ - buf[i++] = 0x5f; /* pop %rdi */ - buf[i++] = 0x5d; /* pop %rbp */ - buf[i++] = 0x5c; /* pop %rsp */ - append_insns (&buildaddr, i, buf); - - /* Now, adjust the original instruction to execute in the jump - pad. */ - *adjusted_insn_addr = buildaddr; - relocate_instruction (&buildaddr, tpaddr); - *adjusted_insn_addr_end = buildaddr; - - /* Finally, write a jump back to the program. */ - - loffset = (tpaddr + orig_size) - (buildaddr + sizeof (jump_insn)); - if (loffset > INT_MAX || loffset < INT_MIN) - { - sprintf (err, - "E.Jump back from jump pad too far from tracepoint " - "(offset 0x%" PRIx64 " > int32).", loffset); - return 1; - } - - offset = (int) loffset; - memcpy (buf, jump_insn, sizeof (jump_insn)); - memcpy (buf + 1, &offset, 4); - append_insns (&buildaddr, sizeof (jump_insn), buf); - - /* The jump pad is now built. Wire in a jump to our jump pad. This - is always done last (by our caller actually), so that we can - install fast tracepoints with threads running. This relies on - the agent's atomic write support. */ - loffset = *jump_entry - (tpaddr + sizeof (jump_insn)); - if (loffset > INT_MAX || loffset < INT_MIN) - { - sprintf (err, - "E.Jump pad too far from tracepoint " - "(offset 0x%" PRIx64 " > int32).", loffset); - return 1; - } - - offset = (int) loffset; - - memcpy (buf, jump_insn, sizeof (jump_insn)); - memcpy (buf + 1, &offset, 4); - memcpy (jjump_pad_insn, buf, sizeof (jump_insn)); - *jjump_pad_insn_size = sizeof (jump_insn); - - /* Return the end address of our pad. */ - *jump_entry = buildaddr; - - return 0; -} - -#endif /* __x86_64__ */ - -/* Build a jump pad that saves registers and calls a collection - function. Writes a jump instruction to the jump pad to - JJUMPAD_INSN. The caller is responsible to write it in at the - tracepoint address. */ - -static int -i386_install_fast_tracepoint_jump_pad (CORE_ADDR tpoint, CORE_ADDR tpaddr, - CORE_ADDR collector, - CORE_ADDR lockaddr, - ULONGEST orig_size, - CORE_ADDR *jump_entry, - CORE_ADDR *trampoline, - ULONGEST *trampoline_size, - unsigned char *jjump_pad_insn, - ULONGEST *jjump_pad_insn_size, - CORE_ADDR *adjusted_insn_addr, - CORE_ADDR *adjusted_insn_addr_end, - char *err) -{ - unsigned char buf[0x100]; - int i, offset; - CORE_ADDR buildaddr = *jump_entry; - - /* Build the jump pad. */ - - /* First, do tracepoint data collection. Save registers. */ - i = 0; - buf[i++] = 0x60; /* pushad */ - buf[i++] = 0x68; /* push tpaddr aka $pc */ - *((int *)(buf + i)) = (int) tpaddr; - i += 4; - buf[i++] = 0x9c; /* pushf */ - buf[i++] = 0x1e; /* push %ds */ - buf[i++] = 0x06; /* push %es */ - buf[i++] = 0x0f; /* push %fs */ - buf[i++] = 0xa0; - buf[i++] = 0x0f; /* push %gs */ - buf[i++] = 0xa8; - buf[i++] = 0x16; /* push %ss */ - buf[i++] = 0x0e; /* push %cs */ - append_insns (&buildaddr, i, buf); - - /* Stack space for the collecting_t object. */ - i = 0; - i += push_opcode (&buf[i], "83 ec 08"); /* sub $0x8,%esp */ - - /* Build the object. */ - i += push_opcode (&buf[i], "b8"); /* mov <tpoint>,%eax */ - memcpy (buf + i, &tpoint, 4); - i += 4; - i += push_opcode (&buf[i], "89 04 24"); /* mov %eax,(%esp) */ - - i += push_opcode (&buf[i], "65 a1 00 00 00 00"); /* mov %gs:0x0,%eax */ - i += push_opcode (&buf[i], "89 44 24 04"); /* mov %eax,0x4(%esp) */ - append_insns (&buildaddr, i, buf); - - /* spin-lock. Note this is using cmpxchg, which leaves i386 behind. - If we cared for it, this could be using xchg alternatively. */ - - i = 0; - i += push_opcode (&buf[i], "31 c0"); /* xor %eax,%eax */ - i += push_opcode (&buf[i], "f0 0f b1 25"); /* lock cmpxchg - %esp,<lockaddr> */ - memcpy (&buf[i], (void *) &lockaddr, 4); - i += 4; - i += push_opcode (&buf[i], "85 c0"); /* test %eax,%eax */ - i += push_opcode (&buf[i], "75 f2"); /* jne <again> */ - append_insns (&buildaddr, i, buf); - - - /* Set up arguments to the gdb_collect call. */ - i = 0; - i += push_opcode (&buf[i], "89 e0"); /* mov %esp,%eax */ - i += push_opcode (&buf[i], "83 c0 08"); /* add $0x08,%eax */ - i += push_opcode (&buf[i], "89 44 24 fc"); /* mov %eax,-0x4(%esp) */ - append_insns (&buildaddr, i, buf); - - i = 0; - i += push_opcode (&buf[i], "83 ec 08"); /* sub $0x8,%esp */ - append_insns (&buildaddr, i, buf); - - i = 0; - i += push_opcode (&buf[i], "c7 04 24"); /* movl <addr>,(%esp) */ - memcpy (&buf[i], (void *) &tpoint, 4); - i += 4; - append_insns (&buildaddr, i, buf); - - buf[0] = 0xe8; /* call <reladdr> */ - offset = collector - (buildaddr + sizeof (jump_insn)); - memcpy (buf + 1, &offset, 4); - append_insns (&buildaddr, 5, buf); - /* Clean up after the call. */ - buf[0] = 0x83; /* add $0x8,%esp */ - buf[1] = 0xc4; - buf[2] = 0x08; - append_insns (&buildaddr, 3, buf); - - - /* Clear the spin-lock. This would need the LOCK prefix on older - broken archs. */ - i = 0; - i += push_opcode (&buf[i], "31 c0"); /* xor %eax,%eax */ - i += push_opcode (&buf[i], "a3"); /* mov %eax, lockaddr */ - memcpy (buf + i, &lockaddr, 4); - i += 4; - append_insns (&buildaddr, i, buf); - - - /* Remove stack that had been used for the collect_t object. */ - i = 0; - i += push_opcode (&buf[i], "83 c4 08"); /* add $0x08,%esp */ - append_insns (&buildaddr, i, buf); - - i = 0; - buf[i++] = 0x83; /* add $0x4,%esp (no pop of %cs, assume unchanged) */ - buf[i++] = 0xc4; - buf[i++] = 0x04; - buf[i++] = 0x17; /* pop %ss */ - buf[i++] = 0x0f; /* pop %gs */ - buf[i++] = 0xa9; - buf[i++] = 0x0f; /* pop %fs */ - buf[i++] = 0xa1; - buf[i++] = 0x07; /* pop %es */ - buf[i++] = 0x1f; /* pop %ds */ - buf[i++] = 0x9d; /* popf */ - buf[i++] = 0x83; /* add $0x4,%esp (pop of tpaddr aka $pc) */ - buf[i++] = 0xc4; - buf[i++] = 0x04; - buf[i++] = 0x61; /* popad */ - append_insns (&buildaddr, i, buf); - - /* Now, adjust the original instruction to execute in the jump - pad. */ - *adjusted_insn_addr = buildaddr; - relocate_instruction (&buildaddr, tpaddr); - *adjusted_insn_addr_end = buildaddr; - - /* Write the jump back to the program. */ - offset = (tpaddr + orig_size) - (buildaddr + sizeof (jump_insn)); - memcpy (buf, jump_insn, sizeof (jump_insn)); - memcpy (buf + 1, &offset, 4); - append_insns (&buildaddr, sizeof (jump_insn), buf); - - /* The jump pad is now built. Wire in a jump to our jump pad. This - is always done last (by our caller actually), so that we can - install fast tracepoints with threads running. This relies on - the agent's atomic write support. */ - if (orig_size == 4) - { - /* Create a trampoline. */ - *trampoline_size = sizeof (jump_insn); - if (!claim_trampoline_space (*trampoline_size, trampoline)) - { - /* No trampoline space available. */ - strcpy (err, - "E.Cannot allocate trampoline space needed for fast " - "tracepoints on 4-byte instructions."); - return 1; - } - - offset = *jump_entry - (*trampoline + sizeof (jump_insn)); - memcpy (buf, jump_insn, sizeof (jump_insn)); - memcpy (buf + 1, &offset, 4); - target_write_memory (*trampoline, buf, sizeof (jump_insn)); - - /* Use a 16-bit relative jump instruction to jump to the trampoline. */ - offset = (*trampoline - (tpaddr + sizeof (small_jump_insn))) & 0xffff; - memcpy (buf, small_jump_insn, sizeof (small_jump_insn)); - memcpy (buf + 2, &offset, 2); - memcpy (jjump_pad_insn, buf, sizeof (small_jump_insn)); - *jjump_pad_insn_size = sizeof (small_jump_insn); - } - else - { - /* Else use a 32-bit relative jump instruction. */ - offset = *jump_entry - (tpaddr + sizeof (jump_insn)); - memcpy (buf, jump_insn, sizeof (jump_insn)); - memcpy (buf + 1, &offset, 4); - memcpy (jjump_pad_insn, buf, sizeof (jump_insn)); - *jjump_pad_insn_size = sizeof (jump_insn); - } - - /* Return the end address of our pad. */ - *jump_entry = buildaddr; - - return 0; -} - -static int -x86_install_fast_tracepoint_jump_pad (CORE_ADDR tpoint, CORE_ADDR tpaddr, - CORE_ADDR collector, - CORE_ADDR lockaddr, - ULONGEST orig_size, - CORE_ADDR *jump_entry, - CORE_ADDR *trampoline, - ULONGEST *trampoline_size, - unsigned char *jjump_pad_insn, - ULONGEST *jjump_pad_insn_size, - CORE_ADDR *adjusted_insn_addr, - CORE_ADDR *adjusted_insn_addr_end, - char *err) -{ -#ifdef __x86_64__ - if (is_64bit_tdesc ()) - return amd64_install_fast_tracepoint_jump_pad (tpoint, tpaddr, - collector, lockaddr, - orig_size, jump_entry, - trampoline, trampoline_size, - jjump_pad_insn, - jjump_pad_insn_size, - adjusted_insn_addr, - adjusted_insn_addr_end, - err); -#endif - - return i386_install_fast_tracepoint_jump_pad (tpoint, tpaddr, - collector, lockaddr, - orig_size, jump_entry, - trampoline, trampoline_size, - jjump_pad_insn, - jjump_pad_insn_size, - adjusted_insn_addr, - adjusted_insn_addr_end, - err); -} - -/* Return the minimum instruction length for fast tracepoints on x86/x86-64 - architectures. */ - -static int -x86_get_min_fast_tracepoint_insn_len (void) -{ - static int warned_about_fast_tracepoints = 0; - -#ifdef __x86_64__ - /* On x86-64, 5-byte jump instructions with a 4-byte offset are always - used for fast tracepoints. */ - if (is_64bit_tdesc ()) - return 5; -#endif - - if (agent_loaded_p ()) - { - char errbuf[IPA_BUFSIZ]; - - errbuf[0] = '\0'; - - /* On x86, if trampolines are available, then 4-byte jump instructions - with a 2-byte offset may be used, otherwise 5-byte jump instructions - with a 4-byte offset are used instead. */ - if (have_fast_tracepoint_trampoline_buffer (errbuf)) - return 4; - else - { - /* GDB has no channel to explain to user why a shorter fast - tracepoint is not possible, but at least make GDBserver - mention that something has gone awry. */ - if (!warned_about_fast_tracepoints) - { - warning ("4-byte fast tracepoints not available; %s", errbuf); - warned_about_fast_tracepoints = 1; - } - return 5; - } - } - else - { - /* Indicate that the minimum length is currently unknown since the IPA - has not loaded yet. */ - return 0; - } -} - -static void -add_insns (unsigned char *start, int len) -{ - CORE_ADDR buildaddr = current_insn_ptr; - - if (debug_threads) - debug_printf ("Adding %d bytes of insn at %s\n", - len, paddress (buildaddr)); - - append_insns (&buildaddr, len, start); - current_insn_ptr = buildaddr; -} - -/* Our general strategy for emitting code is to avoid specifying raw - bytes whenever possible, and instead copy a block of inline asm - that is embedded in the function. This is a little messy, because - we need to keep the compiler from discarding what looks like dead - code, plus suppress various warnings. */ - -#define EMIT_ASM(NAME, INSNS) \ - do \ - { \ - extern unsigned char start_ ## NAME, end_ ## NAME; \ - add_insns (&start_ ## NAME, &end_ ## NAME - &start_ ## NAME); \ - __asm__ ("jmp end_" #NAME "\n" \ - "\t" "start_" #NAME ":" \ - "\t" INSNS "\n" \ - "\t" "end_" #NAME ":"); \ - } while (0) - -#ifdef __x86_64__ - -#define EMIT_ASM32(NAME,INSNS) \ - do \ - { \ - extern unsigned char start_ ## NAME, end_ ## NAME; \ - add_insns (&start_ ## NAME, &end_ ## NAME - &start_ ## NAME); \ - __asm__ (".code32\n" \ - "\t" "jmp end_" #NAME "\n" \ - "\t" "start_" #NAME ":\n" \ - "\t" INSNS "\n" \ - "\t" "end_" #NAME ":\n" \ - ".code64\n"); \ - } while (0) - -#else - -#define EMIT_ASM32(NAME,INSNS) EMIT_ASM(NAME,INSNS) - -#endif - -#ifdef __x86_64__ - -static void -amd64_emit_prologue (void) -{ - EMIT_ASM (amd64_prologue, - "pushq %rbp\n\t" - "movq %rsp,%rbp\n\t" - "sub $0x20,%rsp\n\t" - "movq %rdi,-8(%rbp)\n\t" - "movq %rsi,-16(%rbp)"); -} - - -static void -amd64_emit_epilogue (void) -{ - EMIT_ASM (amd64_epilogue, - "movq -16(%rbp),%rdi\n\t" - "movq %rax,(%rdi)\n\t" - "xor %rax,%rax\n\t" - "leave\n\t" - "ret"); -} - -static void -amd64_emit_add (void) -{ - EMIT_ASM (amd64_add, - "add (%rsp),%rax\n\t" - "lea 0x8(%rsp),%rsp"); -} - -static void -amd64_emit_sub (void) -{ - EMIT_ASM (amd64_sub, - "sub %rax,(%rsp)\n\t" - "pop %rax"); -} - -static void -amd64_emit_mul (void) -{ - emit_error = 1; -} - -static void -amd64_emit_lsh (void) -{ - emit_error = 1; -} - -static void -amd64_emit_rsh_signed (void) -{ - emit_error = 1; -} - -static void -amd64_emit_rsh_unsigned (void) -{ - emit_error = 1; -} - -static void -amd64_emit_ext (int arg) -{ - switch (arg) - { - case 8: - EMIT_ASM (amd64_ext_8, - "cbtw\n\t" - "cwtl\n\t" - "cltq"); - break; - case 16: - EMIT_ASM (amd64_ext_16, - "cwtl\n\t" - "cltq"); - break; - case 32: - EMIT_ASM (amd64_ext_32, - "cltq"); - break; - default: - emit_error = 1; - } -} - -static void -amd64_emit_log_not (void) -{ - EMIT_ASM (amd64_log_not, - "test %rax,%rax\n\t" - "sete %cl\n\t" - "movzbq %cl,%rax"); -} - -static void -amd64_emit_bit_and (void) -{ - EMIT_ASM (amd64_and, - "and (%rsp),%rax\n\t" - "lea 0x8(%rsp),%rsp"); -} - -static void -amd64_emit_bit_or (void) -{ - EMIT_ASM (amd64_or, - "or (%rsp),%rax\n\t" - "lea 0x8(%rsp),%rsp"); -} - -static void -amd64_emit_bit_xor (void) -{ - EMIT_ASM (amd64_xor, - "xor (%rsp),%rax\n\t" - "lea 0x8(%rsp),%rsp"); -} - -static void -amd64_emit_bit_not (void) -{ - EMIT_ASM (amd64_bit_not, - "xorq $0xffffffffffffffff,%rax"); -} - -static void -amd64_emit_equal (void) -{ - EMIT_ASM (amd64_equal, - "cmp %rax,(%rsp)\n\t" - "je .Lamd64_equal_true\n\t" - "xor %rax,%rax\n\t" - "jmp .Lamd64_equal_end\n\t" - ".Lamd64_equal_true:\n\t" - "mov $0x1,%rax\n\t" - ".Lamd64_equal_end:\n\t" - "lea 0x8(%rsp),%rsp"); -} - -static void -amd64_emit_less_signed (void) -{ - EMIT_ASM (amd64_less_signed, - "cmp %rax,(%rsp)\n\t" - "jl .Lamd64_less_signed_true\n\t" - "xor %rax,%rax\n\t" - "jmp .Lamd64_less_signed_end\n\t" - ".Lamd64_less_signed_true:\n\t" - "mov $1,%rax\n\t" - ".Lamd64_less_signed_end:\n\t" - "lea 0x8(%rsp),%rsp"); -} - -static void -amd64_emit_less_unsigned (void) -{ - EMIT_ASM (amd64_less_unsigned, - "cmp %rax,(%rsp)\n\t" - "jb .Lamd64_less_unsigned_true\n\t" - "xor %rax,%rax\n\t" - "jmp .Lamd64_less_unsigned_end\n\t" - ".Lamd64_less_unsigned_true:\n\t" - "mov $1,%rax\n\t" - ".Lamd64_less_unsigned_end:\n\t" - "lea 0x8(%rsp),%rsp"); -} - -static void -amd64_emit_ref (int size) -{ - switch (size) - { - case 1: - EMIT_ASM (amd64_ref1, - "movb (%rax),%al"); - break; - case 2: - EMIT_ASM (amd64_ref2, - "movw (%rax),%ax"); - break; - case 4: - EMIT_ASM (amd64_ref4, - "movl (%rax),%eax"); - break; - case 8: - EMIT_ASM (amd64_ref8, - "movq (%rax),%rax"); - break; - } -} - -static void -amd64_emit_if_goto (int *offset_p, int *size_p) -{ - EMIT_ASM (amd64_if_goto, - "mov %rax,%rcx\n\t" - "pop %rax\n\t" - "cmp $0,%rcx\n\t" - ".byte 0x0f, 0x85, 0x0, 0x0, 0x0, 0x0"); - if (offset_p) - *offset_p = 10; - if (size_p) - *size_p = 4; -} - -static void -amd64_emit_goto (int *offset_p, int *size_p) -{ - EMIT_ASM (amd64_goto, - ".byte 0xe9, 0x0, 0x0, 0x0, 0x0"); - if (offset_p) - *offset_p = 1; - if (size_p) - *size_p = 4; -} - -static void -amd64_write_goto_address (CORE_ADDR from, CORE_ADDR to, int size) -{ - int diff = (to - (from + size)); - unsigned char buf[sizeof (int)]; - - if (size != 4) - { - emit_error = 1; - return; - } - - memcpy (buf, &diff, sizeof (int)); - target_write_memory (from, buf, sizeof (int)); -} - -static void -amd64_emit_const (LONGEST num) -{ - unsigned char buf[16]; - int i; - CORE_ADDR buildaddr = current_insn_ptr; - - i = 0; - buf[i++] = 0x48; buf[i++] = 0xb8; /* mov $<n>,%rax */ - memcpy (&buf[i], &num, sizeof (num)); - i += 8; - append_insns (&buildaddr, i, buf); - current_insn_ptr = buildaddr; -} - -static void -amd64_emit_call (CORE_ADDR fn) -{ - unsigned char buf[16]; - int i; - CORE_ADDR buildaddr; - LONGEST offset64; - - /* The destination function being in the shared library, may be - >31-bits away off the compiled code pad. */ - - buildaddr = current_insn_ptr; - - offset64 = fn - (buildaddr + 1 /* call op */ + 4 /* 32-bit offset */); - - i = 0; - - if (offset64 > INT_MAX || offset64 < INT_MIN) - { - /* Offset is too large for a call. Use callq, but that requires - a register, so avoid it if possible. Use r10, since it is - call-clobbered, we don't have to push/pop it. */ - buf[i++] = 0x48; /* mov $fn,%r10 */ - buf[i++] = 0xba; - memcpy (buf + i, &fn, 8); - i += 8; - buf[i++] = 0xff; /* callq *%r10 */ - buf[i++] = 0xd2; - } - else - { - int offset32 = offset64; /* we know we can't overflow here. */ - - buf[i++] = 0xe8; /* call <reladdr> */ - memcpy (buf + i, &offset32, 4); - i += 4; - } - - append_insns (&buildaddr, i, buf); - current_insn_ptr = buildaddr; -} - -static void -amd64_emit_reg (int reg) -{ - unsigned char buf[16]; - int i; - CORE_ADDR buildaddr; - - /* Assume raw_regs is still in %rdi. */ - buildaddr = current_insn_ptr; - i = 0; - buf[i++] = 0xbe; /* mov $<n>,%esi */ - memcpy (&buf[i], ®, sizeof (reg)); - i += 4; - append_insns (&buildaddr, i, buf); - current_insn_ptr = buildaddr; - amd64_emit_call (get_raw_reg_func_addr ()); -} - -static void -amd64_emit_pop (void) -{ - EMIT_ASM (amd64_pop, - "pop %rax"); -} - -static void -amd64_emit_stack_flush (void) -{ - EMIT_ASM (amd64_stack_flush, - "push %rax"); -} - -static void -amd64_emit_zero_ext (int arg) -{ - switch (arg) - { - case 8: - EMIT_ASM (amd64_zero_ext_8, - "and $0xff,%rax"); - break; - case 16: - EMIT_ASM (amd64_zero_ext_16, - "and $0xffff,%rax"); - break; - case 32: - EMIT_ASM (amd64_zero_ext_32, - "mov $0xffffffff,%rcx\n\t" - "and %rcx,%rax"); - break; - default: - emit_error = 1; - } -} - -static void -amd64_emit_swap (void) -{ - EMIT_ASM (amd64_swap, - "mov %rax,%rcx\n\t" - "pop %rax\n\t" - "push %rcx"); -} - -static void -amd64_emit_stack_adjust (int n) -{ - unsigned char buf[16]; - int i; - CORE_ADDR buildaddr = current_insn_ptr; - - i = 0; - buf[i++] = 0x48; /* lea $<n>(%rsp),%rsp */ - buf[i++] = 0x8d; - buf[i++] = 0x64; - buf[i++] = 0x24; - /* This only handles adjustments up to 16, but we don't expect any more. */ - buf[i++] = n * 8; - append_insns (&buildaddr, i, buf); - current_insn_ptr = buildaddr; -} - -/* FN's prototype is `LONGEST(*fn)(int)'. */ - -static void -amd64_emit_int_call_1 (CORE_ADDR fn, int arg1) -{ - unsigned char buf[16]; - int i; - CORE_ADDR buildaddr; - - buildaddr = current_insn_ptr; - i = 0; - buf[i++] = 0xbf; /* movl $<n>,%edi */ - memcpy (&buf[i], &arg1, sizeof (arg1)); - i += 4; - append_insns (&buildaddr, i, buf); - current_insn_ptr = buildaddr; - amd64_emit_call (fn); -} - -/* FN's prototype is `void(*fn)(int,LONGEST)'. */ - -static void -amd64_emit_void_call_2 (CORE_ADDR fn, int arg1) -{ - unsigned char buf[16]; - int i; - CORE_ADDR buildaddr; - - buildaddr = current_insn_ptr; - i = 0; - buf[i++] = 0xbf; /* movl $<n>,%edi */ - memcpy (&buf[i], &arg1, sizeof (arg1)); - i += 4; - append_insns (&buildaddr, i, buf); - current_insn_ptr = buildaddr; - EMIT_ASM (amd64_void_call_2_a, - /* Save away a copy of the stack top. */ - "push %rax\n\t" - /* Also pass top as the second argument. */ - "mov %rax,%rsi"); - amd64_emit_call (fn); - EMIT_ASM (amd64_void_call_2_b, - /* Restore the stack top, %rax may have been trashed. */ - "pop %rax"); -} - -void -amd64_emit_eq_goto (int *offset_p, int *size_p) -{ - EMIT_ASM (amd64_eq, - "cmp %rax,(%rsp)\n\t" - "jne .Lamd64_eq_fallthru\n\t" - "lea 0x8(%rsp),%rsp\n\t" - "pop %rax\n\t" - /* jmp, but don't trust the assembler to choose the right jump */ - ".byte 0xe9, 0x0, 0x0, 0x0, 0x0\n\t" - ".Lamd64_eq_fallthru:\n\t" - "lea 0x8(%rsp),%rsp\n\t" - "pop %rax"); - - if (offset_p) - *offset_p = 13; - if (size_p) - *size_p = 4; -} - -void -amd64_emit_ne_goto (int *offset_p, int *size_p) -{ - EMIT_ASM (amd64_ne, - "cmp %rax,(%rsp)\n\t" - "je .Lamd64_ne_fallthru\n\t" - "lea 0x8(%rsp),%rsp\n\t" - "pop %rax\n\t" - /* jmp, but don't trust the assembler to choose the right jump */ - ".byte 0xe9, 0x0, 0x0, 0x0, 0x0\n\t" - ".Lamd64_ne_fallthru:\n\t" - "lea 0x8(%rsp),%rsp\n\t" - "pop %rax"); - - if (offset_p) - *offset_p = 13; - if (size_p) - *size_p = 4; -} - -void -amd64_emit_lt_goto (int *offset_p, int *size_p) -{ - EMIT_ASM (amd64_lt, - "cmp %rax,(%rsp)\n\t" - "jnl .Lamd64_lt_fallthru\n\t" - "lea 0x8(%rsp),%rsp\n\t" - "pop %rax\n\t" - /* jmp, but don't trust the assembler to choose the right jump */ - ".byte 0xe9, 0x0, 0x0, 0x0, 0x0\n\t" - ".Lamd64_lt_fallthru:\n\t" - "lea 0x8(%rsp),%rsp\n\t" - "pop %rax"); - - if (offset_p) - *offset_p = 13; - if (size_p) - *size_p = 4; -} - -void -amd64_emit_le_goto (int *offset_p, int *size_p) -{ - EMIT_ASM (amd64_le, - "cmp %rax,(%rsp)\n\t" - "jnle .Lamd64_le_fallthru\n\t" - "lea 0x8(%rsp),%rsp\n\t" - "pop %rax\n\t" - /* jmp, but don't trust the assembler to choose the right jump */ - ".byte 0xe9, 0x0, 0x0, 0x0, 0x0\n\t" - ".Lamd64_le_fallthru:\n\t" - "lea 0x8(%rsp),%rsp\n\t" - "pop %rax"); - - if (offset_p) - *offset_p = 13; - if (size_p) - *size_p = 4; -} - -void -amd64_emit_gt_goto (int *offset_p, int *size_p) -{ - EMIT_ASM (amd64_gt, - "cmp %rax,(%rsp)\n\t" - "jng .Lamd64_gt_fallthru\n\t" - "lea 0x8(%rsp),%rsp\n\t" - "pop %rax\n\t" - /* jmp, but don't trust the assembler to choose the right jump */ - ".byte 0xe9, 0x0, 0x0, 0x0, 0x0\n\t" - ".Lamd64_gt_fallthru:\n\t" - "lea 0x8(%rsp),%rsp\n\t" - "pop %rax"); - - if (offset_p) - *offset_p = 13; - if (size_p) - *size_p = 4; -} - -void -amd64_emit_ge_goto (int *offset_p, int *size_p) -{ - EMIT_ASM (amd64_ge, - "cmp %rax,(%rsp)\n\t" - "jnge .Lamd64_ge_fallthru\n\t" - ".Lamd64_ge_jump:\n\t" - "lea 0x8(%rsp),%rsp\n\t" - "pop %rax\n\t" - /* jmp, but don't trust the assembler to choose the right jump */ - ".byte 0xe9, 0x0, 0x0, 0x0, 0x0\n\t" - ".Lamd64_ge_fallthru:\n\t" - "lea 0x8(%rsp),%rsp\n\t" - "pop %rax"); - - if (offset_p) - *offset_p = 13; - if (size_p) - *size_p = 4; -} - -struct emit_ops amd64_emit_ops = - { - amd64_emit_prologue, - amd64_emit_epilogue, - amd64_emit_add, - amd64_emit_sub, - amd64_emit_mul, - amd64_emit_lsh, - amd64_emit_rsh_signed, - amd64_emit_rsh_unsigned, - amd64_emit_ext, - amd64_emit_log_not, - amd64_emit_bit_and, - amd64_emit_bit_or, - amd64_emit_bit_xor, - amd64_emit_bit_not, - amd64_emit_equal, - amd64_emit_less_signed, - amd64_emit_less_unsigned, - amd64_emit_ref, - amd64_emit_if_goto, - amd64_emit_goto, - amd64_write_goto_address, - amd64_emit_const, - amd64_emit_call, - amd64_emit_reg, - amd64_emit_pop, - amd64_emit_stack_flush, - amd64_emit_zero_ext, - amd64_emit_swap, - amd64_emit_stack_adjust, - amd64_emit_int_call_1, - amd64_emit_void_call_2, - amd64_emit_eq_goto, - amd64_emit_ne_goto, - amd64_emit_lt_goto, - amd64_emit_le_goto, - amd64_emit_gt_goto, - amd64_emit_ge_goto - }; - -#endif /* __x86_64__ */ - -static void -i386_emit_prologue (void) -{ - EMIT_ASM32 (i386_prologue, - "push %ebp\n\t" - "mov %esp,%ebp\n\t" - "push %ebx"); - /* At this point, the raw regs base address is at 8(%ebp), and the - value pointer is at 12(%ebp). */ -} - -static void -i386_emit_epilogue (void) -{ - EMIT_ASM32 (i386_epilogue, - "mov 12(%ebp),%ecx\n\t" - "mov %eax,(%ecx)\n\t" - "mov %ebx,0x4(%ecx)\n\t" - "xor %eax,%eax\n\t" - "pop %ebx\n\t" - "pop %ebp\n\t" - "ret"); -} - -static void -i386_emit_add (void) -{ - EMIT_ASM32 (i386_add, - "add (%esp),%eax\n\t" - "adc 0x4(%esp),%ebx\n\t" - "lea 0x8(%esp),%esp"); -} - -static void -i386_emit_sub (void) -{ - EMIT_ASM32 (i386_sub, - "subl %eax,(%esp)\n\t" - "sbbl %ebx,4(%esp)\n\t" - "pop %eax\n\t" - "pop %ebx\n\t"); -} - -static void -i386_emit_mul (void) -{ - emit_error = 1; -} - -static void -i386_emit_lsh (void) -{ - emit_error = 1; -} - -static void -i386_emit_rsh_signed (void) -{ - emit_error = 1; -} - -static void -i386_emit_rsh_unsigned (void) -{ - emit_error = 1; -} - -static void -i386_emit_ext (int arg) -{ - switch (arg) - { - case 8: - EMIT_ASM32 (i386_ext_8, - "cbtw\n\t" - "cwtl\n\t" - "movl %eax,%ebx\n\t" - "sarl $31,%ebx"); - break; - case 16: - EMIT_ASM32 (i386_ext_16, - "cwtl\n\t" - "movl %eax,%ebx\n\t" - "sarl $31,%ebx"); - break; - case 32: - EMIT_ASM32 (i386_ext_32, - "movl %eax,%ebx\n\t" - "sarl $31,%ebx"); - break; - default: - emit_error = 1; - } -} - -static void -i386_emit_log_not (void) -{ - EMIT_ASM32 (i386_log_not, - "or %ebx,%eax\n\t" - "test %eax,%eax\n\t" - "sete %cl\n\t" - "xor %ebx,%ebx\n\t" - "movzbl %cl,%eax"); -} - -static void -i386_emit_bit_and (void) -{ - EMIT_ASM32 (i386_and, - "and (%esp),%eax\n\t" - "and 0x4(%esp),%ebx\n\t" - "lea 0x8(%esp),%esp"); -} - -static void -i386_emit_bit_or (void) -{ - EMIT_ASM32 (i386_or, - "or (%esp),%eax\n\t" - "or 0x4(%esp),%ebx\n\t" - "lea 0x8(%esp),%esp"); -} - -static void -i386_emit_bit_xor (void) -{ - EMIT_ASM32 (i386_xor, - "xor (%esp),%eax\n\t" - "xor 0x4(%esp),%ebx\n\t" - "lea 0x8(%esp),%esp"); -} - -static void -i386_emit_bit_not (void) -{ - EMIT_ASM32 (i386_bit_not, - "xor $0xffffffff,%eax\n\t" - "xor $0xffffffff,%ebx\n\t"); -} - -static void -i386_emit_equal (void) -{ - EMIT_ASM32 (i386_equal, - "cmpl %ebx,4(%esp)\n\t" - "jne .Li386_equal_false\n\t" - "cmpl %eax,(%esp)\n\t" - "je .Li386_equal_true\n\t" - ".Li386_equal_false:\n\t" - "xor %eax,%eax\n\t" - "jmp .Li386_equal_end\n\t" - ".Li386_equal_true:\n\t" - "mov $1,%eax\n\t" - ".Li386_equal_end:\n\t" - "xor %ebx,%ebx\n\t" - "lea 0x8(%esp),%esp"); -} - -static void -i386_emit_less_signed (void) -{ - EMIT_ASM32 (i386_less_signed, - "cmpl %ebx,4(%esp)\n\t" - "jl .Li386_less_signed_true\n\t" - "jne .Li386_less_signed_false\n\t" - "cmpl %eax,(%esp)\n\t" - "jl .Li386_less_signed_true\n\t" - ".Li386_less_signed_false:\n\t" - "xor %eax,%eax\n\t" - "jmp .Li386_less_signed_end\n\t" - ".Li386_less_signed_true:\n\t" - "mov $1,%eax\n\t" - ".Li386_less_signed_end:\n\t" - "xor %ebx,%ebx\n\t" - "lea 0x8(%esp),%esp"); -} - -static void -i386_emit_less_unsigned (void) -{ - EMIT_ASM32 (i386_less_unsigned, - "cmpl %ebx,4(%esp)\n\t" - "jb .Li386_less_unsigned_true\n\t" - "jne .Li386_less_unsigned_false\n\t" - "cmpl %eax,(%esp)\n\t" - "jb .Li386_less_unsigned_true\n\t" - ".Li386_less_unsigned_false:\n\t" - "xor %eax,%eax\n\t" - "jmp .Li386_less_unsigned_end\n\t" - ".Li386_less_unsigned_true:\n\t" - "mov $1,%eax\n\t" - ".Li386_less_unsigned_end:\n\t" - "xor %ebx,%ebx\n\t" - "lea 0x8(%esp),%esp"); -} - -static void -i386_emit_ref (int size) -{ - switch (size) - { - case 1: - EMIT_ASM32 (i386_ref1, - "movb (%eax),%al"); - break; - case 2: - EMIT_ASM32 (i386_ref2, - "movw (%eax),%ax"); - break; - case 4: - EMIT_ASM32 (i386_ref4, - "movl (%eax),%eax"); - break; - case 8: - EMIT_ASM32 (i386_ref8, - "movl 4(%eax),%ebx\n\t" - "movl (%eax),%eax"); - break; - } -} - -static void -i386_emit_if_goto (int *offset_p, int *size_p) -{ - EMIT_ASM32 (i386_if_goto, - "mov %eax,%ecx\n\t" - "or %ebx,%ecx\n\t" - "pop %eax\n\t" - "pop %ebx\n\t" - "cmpl $0,%ecx\n\t" - /* Don't trust the assembler to choose the right jump */ - ".byte 0x0f, 0x85, 0x0, 0x0, 0x0, 0x0"); - - if (offset_p) - *offset_p = 11; /* be sure that this matches the sequence above */ - if (size_p) - *size_p = 4; -} - -static void -i386_emit_goto (int *offset_p, int *size_p) -{ - EMIT_ASM32 (i386_goto, - /* Don't trust the assembler to choose the right jump */ - ".byte 0xe9, 0x0, 0x0, 0x0, 0x0"); - if (offset_p) - *offset_p = 1; - if (size_p) - *size_p = 4; -} - -static void -i386_write_goto_address (CORE_ADDR from, CORE_ADDR to, int size) -{ - int diff = (to - (from + size)); - unsigned char buf[sizeof (int)]; - - /* We're only doing 4-byte sizes at the moment. */ - if (size != 4) - { - emit_error = 1; - return; - } - - memcpy (buf, &diff, sizeof (int)); - target_write_memory (from, buf, sizeof (int)); -} - -static void -i386_emit_const (LONGEST num) -{ - unsigned char buf[16]; - int i, hi, lo; - CORE_ADDR buildaddr = current_insn_ptr; - - i = 0; - buf[i++] = 0xb8; /* mov $<n>,%eax */ - lo = num & 0xffffffff; - memcpy (&buf[i], &lo, sizeof (lo)); - i += 4; - hi = ((num >> 32) & 0xffffffff); - if (hi) - { - buf[i++] = 0xbb; /* mov $<n>,%ebx */ - memcpy (&buf[i], &hi, sizeof (hi)); - i += 4; - } - else - { - buf[i++] = 0x31; buf[i++] = 0xdb; /* xor %ebx,%ebx */ - } - append_insns (&buildaddr, i, buf); - current_insn_ptr = buildaddr; -} - -static void -i386_emit_call (CORE_ADDR fn) -{ - unsigned char buf[16]; - int i, offset; - CORE_ADDR buildaddr; - - buildaddr = current_insn_ptr; - i = 0; - buf[i++] = 0xe8; /* call <reladdr> */ - offset = ((int) fn) - (buildaddr + 5); - memcpy (buf + 1, &offset, 4); - append_insns (&buildaddr, 5, buf); - current_insn_ptr = buildaddr; -} - -static void -i386_emit_reg (int reg) -{ - unsigned char buf[16]; - int i; - CORE_ADDR buildaddr; - - EMIT_ASM32 (i386_reg_a, - "sub $0x8,%esp"); - buildaddr = current_insn_ptr; - i = 0; - buf[i++] = 0xb8; /* mov $<n>,%eax */ - memcpy (&buf[i], ®, sizeof (reg)); - i += 4; - append_insns (&buildaddr, i, buf); - current_insn_ptr = buildaddr; - EMIT_ASM32 (i386_reg_b, - "mov %eax,4(%esp)\n\t" - "mov 8(%ebp),%eax\n\t" - "mov %eax,(%esp)"); - i386_emit_call (get_raw_reg_func_addr ()); - EMIT_ASM32 (i386_reg_c, - "xor %ebx,%ebx\n\t" - "lea 0x8(%esp),%esp"); -} - -static void -i386_emit_pop (void) -{ - EMIT_ASM32 (i386_pop, - "pop %eax\n\t" - "pop %ebx"); -} - -static void -i386_emit_stack_flush (void) -{ - EMIT_ASM32 (i386_stack_flush, - "push %ebx\n\t" - "push %eax"); -} - -static void -i386_emit_zero_ext (int arg) -{ - switch (arg) - { - case 8: - EMIT_ASM32 (i386_zero_ext_8, - "and $0xff,%eax\n\t" - "xor %ebx,%ebx"); - break; - case 16: - EMIT_ASM32 (i386_zero_ext_16, - "and $0xffff,%eax\n\t" - "xor %ebx,%ebx"); - break; - case 32: - EMIT_ASM32 (i386_zero_ext_32, - "xor %ebx,%ebx"); - break; - default: - emit_error = 1; - } -} - -static void -i386_emit_swap (void) -{ - EMIT_ASM32 (i386_swap, - "mov %eax,%ecx\n\t" - "mov %ebx,%edx\n\t" - "pop %eax\n\t" - "pop %ebx\n\t" - "push %edx\n\t" - "push %ecx"); -} - -static void -i386_emit_stack_adjust (int n) -{ - unsigned char buf[16]; - int i; - CORE_ADDR buildaddr = current_insn_ptr; - - i = 0; - buf[i++] = 0x8d; /* lea $<n>(%esp),%esp */ - buf[i++] = 0x64; - buf[i++] = 0x24; - buf[i++] = n * 8; - append_insns (&buildaddr, i, buf); - current_insn_ptr = buildaddr; -} - -/* FN's prototype is `LONGEST(*fn)(int)'. */ - -static void -i386_emit_int_call_1 (CORE_ADDR fn, int arg1) -{ - unsigned char buf[16]; - int i; - CORE_ADDR buildaddr; - - EMIT_ASM32 (i386_int_call_1_a, - /* Reserve a bit of stack space. */ - "sub $0x8,%esp"); - /* Put the one argument on the stack. */ - buildaddr = current_insn_ptr; - i = 0; - buf[i++] = 0xc7; /* movl $<arg1>,(%esp) */ - buf[i++] = 0x04; - buf[i++] = 0x24; - memcpy (&buf[i], &arg1, sizeof (arg1)); - i += 4; - append_insns (&buildaddr, i, buf); - current_insn_ptr = buildaddr; - i386_emit_call (fn); - EMIT_ASM32 (i386_int_call_1_c, - "mov %edx,%ebx\n\t" - "lea 0x8(%esp),%esp"); -} - -/* FN's prototype is `void(*fn)(int,LONGEST)'. */ - -static void -i386_emit_void_call_2 (CORE_ADDR fn, int arg1) -{ - unsigned char buf[16]; - int i; - CORE_ADDR buildaddr; - - EMIT_ASM32 (i386_void_call_2_a, - /* Preserve %eax only; we don't have to worry about %ebx. */ - "push %eax\n\t" - /* Reserve a bit of stack space for arguments. */ - "sub $0x10,%esp\n\t" - /* Copy "top" to the second argument position. (Note that - we can't assume function won't scribble on its - arguments, so don't try to restore from this.) */ - "mov %eax,4(%esp)\n\t" - "mov %ebx,8(%esp)"); - /* Put the first argument on the stack. */ - buildaddr = current_insn_ptr; - i = 0; - buf[i++] = 0xc7; /* movl $<arg1>,(%esp) */ - buf[i++] = 0x04; - buf[i++] = 0x24; - memcpy (&buf[i], &arg1, sizeof (arg1)); - i += 4; - append_insns (&buildaddr, i, buf); - current_insn_ptr = buildaddr; - i386_emit_call (fn); - EMIT_ASM32 (i386_void_call_2_b, - "lea 0x10(%esp),%esp\n\t" - /* Restore original stack top. */ - "pop %eax"); -} - - -void -i386_emit_eq_goto (int *offset_p, int *size_p) -{ - EMIT_ASM32 (eq, - /* Check low half first, more likely to be decider */ - "cmpl %eax,(%esp)\n\t" - "jne .Leq_fallthru\n\t" - "cmpl %ebx,4(%esp)\n\t" - "jne .Leq_fallthru\n\t" - "lea 0x8(%esp),%esp\n\t" - "pop %eax\n\t" - "pop %ebx\n\t" - /* jmp, but don't trust the assembler to choose the right jump */ - ".byte 0xe9, 0x0, 0x0, 0x0, 0x0\n\t" - ".Leq_fallthru:\n\t" - "lea 0x8(%esp),%esp\n\t" - "pop %eax\n\t" - "pop %ebx"); - - if (offset_p) - *offset_p = 18; - if (size_p) - *size_p = 4; -} - -void -i386_emit_ne_goto (int *offset_p, int *size_p) -{ - EMIT_ASM32 (ne, - /* Check low half first, more likely to be decider */ - "cmpl %eax,(%esp)\n\t" - "jne .Lne_jump\n\t" - "cmpl %ebx,4(%esp)\n\t" - "je .Lne_fallthru\n\t" - ".Lne_jump:\n\t" - "lea 0x8(%esp),%esp\n\t" - "pop %eax\n\t" - "pop %ebx\n\t" - /* jmp, but don't trust the assembler to choose the right jump */ - ".byte 0xe9, 0x0, 0x0, 0x0, 0x0\n\t" - ".Lne_fallthru:\n\t" - "lea 0x8(%esp),%esp\n\t" - "pop %eax\n\t" - "pop %ebx"); - - if (offset_p) - *offset_p = 18; - if (size_p) - *size_p = 4; -} - -void -i386_emit_lt_goto (int *offset_p, int *size_p) -{ - EMIT_ASM32 (lt, - "cmpl %ebx,4(%esp)\n\t" - "jl .Llt_jump\n\t" - "jne .Llt_fallthru\n\t" - "cmpl %eax,(%esp)\n\t" - "jnl .Llt_fallthru\n\t" - ".Llt_jump:\n\t" - "lea 0x8(%esp),%esp\n\t" - "pop %eax\n\t" - "pop %ebx\n\t" - /* jmp, but don't trust the assembler to choose the right jump */ - ".byte 0xe9, 0x0, 0x0, 0x0, 0x0\n\t" - ".Llt_fallthru:\n\t" - "lea 0x8(%esp),%esp\n\t" - "pop %eax\n\t" - "pop %ebx"); - - if (offset_p) - *offset_p = 20; - if (size_p) - *size_p = 4; -} - -void -i386_emit_le_goto (int *offset_p, int *size_p) -{ - EMIT_ASM32 (le, - "cmpl %ebx,4(%esp)\n\t" - "jle .Lle_jump\n\t" - "jne .Lle_fallthru\n\t" - "cmpl %eax,(%esp)\n\t" - "jnle .Lle_fallthru\n\t" - ".Lle_jump:\n\t" - "lea 0x8(%esp),%esp\n\t" - "pop %eax\n\t" - "pop %ebx\n\t" - /* jmp, but don't trust the assembler to choose the right jump */ - ".byte 0xe9, 0x0, 0x0, 0x0, 0x0\n\t" - ".Lle_fallthru:\n\t" - "lea 0x8(%esp),%esp\n\t" - "pop %eax\n\t" - "pop %ebx"); - - if (offset_p) - *offset_p = 20; - if (size_p) - *size_p = 4; -} - -void -i386_emit_gt_goto (int *offset_p, int *size_p) -{ - EMIT_ASM32 (gt, - "cmpl %ebx,4(%esp)\n\t" - "jg .Lgt_jump\n\t" - "jne .Lgt_fallthru\n\t" - "cmpl %eax,(%esp)\n\t" - "jng .Lgt_fallthru\n\t" - ".Lgt_jump:\n\t" - "lea 0x8(%esp),%esp\n\t" - "pop %eax\n\t" - "pop %ebx\n\t" - /* jmp, but don't trust the assembler to choose the right jump */ - ".byte 0xe9, 0x0, 0x0, 0x0, 0x0\n\t" - ".Lgt_fallthru:\n\t" - "lea 0x8(%esp),%esp\n\t" - "pop %eax\n\t" - "pop %ebx"); - - if (offset_p) - *offset_p = 20; - if (size_p) - *size_p = 4; -} - -void -i386_emit_ge_goto (int *offset_p, int *size_p) -{ - EMIT_ASM32 (ge, - "cmpl %ebx,4(%esp)\n\t" - "jge .Lge_jump\n\t" - "jne .Lge_fallthru\n\t" - "cmpl %eax,(%esp)\n\t" - "jnge .Lge_fallthru\n\t" - ".Lge_jump:\n\t" - "lea 0x8(%esp),%esp\n\t" - "pop %eax\n\t" - "pop %ebx\n\t" - /* jmp, but don't trust the assembler to choose the right jump */ - ".byte 0xe9, 0x0, 0x0, 0x0, 0x0\n\t" - ".Lge_fallthru:\n\t" - "lea 0x8(%esp),%esp\n\t" - "pop %eax\n\t" - "pop %ebx"); - - if (offset_p) - *offset_p = 20; - if (size_p) - *size_p = 4; -} - -struct emit_ops i386_emit_ops = - { - i386_emit_prologue, - i386_emit_epilogue, - i386_emit_add, - i386_emit_sub, - i386_emit_mul, - i386_emit_lsh, - i386_emit_rsh_signed, - i386_emit_rsh_unsigned, - i386_emit_ext, - i386_emit_log_not, - i386_emit_bit_and, - i386_emit_bit_or, - i386_emit_bit_xor, - i386_emit_bit_not, - i386_emit_equal, - i386_emit_less_signed, - i386_emit_less_unsigned, - i386_emit_ref, - i386_emit_if_goto, - i386_emit_goto, - i386_write_goto_address, - i386_emit_const, - i386_emit_call, - i386_emit_reg, - i386_emit_pop, - i386_emit_stack_flush, - i386_emit_zero_ext, - i386_emit_swap, - i386_emit_stack_adjust, - i386_emit_int_call_1, - i386_emit_void_call_2, - i386_emit_eq_goto, - i386_emit_ne_goto, - i386_emit_lt_goto, - i386_emit_le_goto, - i386_emit_gt_goto, - i386_emit_ge_goto - }; - - -static struct emit_ops * -x86_emit_ops (void) -{ -#ifdef __x86_64__ - if (is_64bit_tdesc ()) - return &amd64_emit_ops; - else -#endif - return &i386_emit_ops; -} - -/* Implementation of linux_target_ops method "sw_breakpoint_from_kind". */ - -static const gdb_byte * -x86_sw_breakpoint_from_kind (int kind, int *size) -{ - *size = x86_breakpoint_len; - return x86_breakpoint; -} - -static int -x86_supports_range_stepping (void) -{ - return 1; -} - -/* Implementation of linux_target_ops method "supports_hardware_single_step". - */ - -static int -x86_supports_hardware_single_step (void) -{ - return 1; -} - -static int -x86_get_ipa_tdesc_idx (void) -{ - struct regcache *regcache = get_thread_regcache (current_thread, 0); - const struct target_desc *tdesc = regcache->tdesc; - -#ifdef __x86_64__ - return amd64_get_ipa_tdesc_idx (tdesc); -#endif - - if (tdesc == tdesc_i386_linux_no_xml) - return X86_TDESC_SSE; - - return i386_get_ipa_tdesc_idx (tdesc); -} - -/* This is initialized assuming an amd64 target. - x86_arch_setup will correct it for i386 or amd64 targets. */ - -struct linux_target_ops the_low_target = -{ - x86_arch_setup, - x86_linux_regs_info, - x86_cannot_fetch_register, - x86_cannot_store_register, - NULL, /* fetch_register */ - x86_get_pc, - x86_set_pc, - NULL, /* breakpoint_kind_from_pc */ - x86_sw_breakpoint_from_kind, - NULL, - 1, - x86_breakpoint_at, - x86_supports_z_point_type, - x86_insert_point, - x86_remove_point, - x86_stopped_by_watchpoint, - x86_stopped_data_address, - /* collect_ptrace_register/supply_ptrace_register are not needed in the - native i386 case (no registers smaller than an xfer unit), and are not - used in the biarch case (HAVE_LINUX_USRREGS is not defined). */ - NULL, - NULL, - /* need to fix up i386 siginfo if host is amd64 */ - x86_siginfo_fixup, - x86_linux_new_process, - x86_linux_delete_process, - x86_linux_new_thread, - x86_linux_delete_thread, - x86_linux_new_fork, - x86_linux_prepare_to_resume, - x86_linux_process_qsupported, - x86_supports_tracepoints, - x86_get_thread_area, - x86_install_fast_tracepoint_jump_pad, - x86_emit_ops, - x86_get_min_fast_tracepoint_insn_len, - x86_supports_range_stepping, - NULL, /* breakpoint_kind_from_current_state */ - x86_supports_hardware_single_step, - x86_get_syscall_trapinfo, - x86_get_ipa_tdesc_idx, -}; - -void -initialize_low_arch (void) -{ - /* Initialize the Linux target descriptions. */ -#ifdef __x86_64__ - tdesc_amd64_linux_no_xml = allocate_target_description (); - copy_target_description (tdesc_amd64_linux_no_xml, - amd64_linux_read_description (X86_XSTATE_SSE_MASK, - false)); - tdesc_amd64_linux_no_xml->xmltarget = xmltarget_amd64_linux_no_xml; -#endif - - tdesc_i386_linux_no_xml = allocate_target_description (); - copy_target_description (tdesc_i386_linux_no_xml, - i386_linux_read_description (X86_XSTATE_SSE_MASK)); - tdesc_i386_linux_no_xml->xmltarget = xmltarget_i386_linux_no_xml; - - initialize_regsets_info (&x86_regsets_info); -} diff -Nru gdb-9.1/gdb/gdbserver/linux-x86-tdesc.c gdb-10.2/gdb/gdbserver/linux-x86-tdesc.c --- gdb-9.1/gdb/gdbserver/linux-x86-tdesc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/linux-x86-tdesc.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,164 +0,0 @@ -/* GNU/Linux/x86-64 specific target description, for the remote server - for GDB. - Copyright (C) 2017-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "server.h" -#include "tdesc.h" -#include "linux-x86-tdesc.h" -#include "arch/i386.h" -#include "gdbsupport/x86-xstate.h" -#ifdef __x86_64__ -#include "arch/amd64.h" -#endif -#include "x86-tdesc.h" - -/* Return the right x86_linux_tdesc index for a given XCR0. Return - X86_TDESC_LAST if can't find a match. */ - -static enum x86_linux_tdesc -xcr0_to_tdesc_idx (uint64_t xcr0, bool is_x32) -{ - if (xcr0 & X86_XSTATE_PKRU) - { - if (is_x32) - { - /* No x32 MPX and PKU, fall back to avx_avx512. */ - return X86_TDESC_AVX_AVX512; - } - else - return X86_TDESC_AVX_MPX_AVX512_PKU; - } - else if (xcr0 & X86_XSTATE_AVX512) - return X86_TDESC_AVX_AVX512; - else if ((xcr0 & X86_XSTATE_AVX_MPX_MASK) == X86_XSTATE_AVX_MPX_MASK) - { - if (is_x32) /* No MPX on x32. */ - return X86_TDESC_AVX; - else - return X86_TDESC_AVX_MPX; - } - else if (xcr0 & X86_XSTATE_MPX) - { - if (is_x32) /* No MPX on x32. */ - return X86_TDESC_AVX; - else - return X86_TDESC_MPX; - } - else if (xcr0 & X86_XSTATE_AVX) - return X86_TDESC_AVX; - else if (xcr0 & X86_XSTATE_SSE) - return X86_TDESC_SSE; - else if (xcr0 & X86_XSTATE_X87) - return X86_TDESC_MMX; - else - return X86_TDESC_LAST; -} - -#if defined __i386__ || !defined IN_PROCESS_AGENT - -static struct target_desc *i386_tdescs[X86_TDESC_LAST] = { }; - -/* Return the target description according to XCR0. */ - -const struct target_desc * -i386_linux_read_description (uint64_t xcr0) -{ - enum x86_linux_tdesc idx = xcr0_to_tdesc_idx (xcr0, false); - - if (idx == X86_TDESC_LAST) - return NULL; - - struct target_desc **tdesc = &i386_tdescs[idx]; - - if (*tdesc == NULL) - { - *tdesc = i386_create_target_description (xcr0, true, false); - - init_target_desc (*tdesc, i386_expedite_regs); - } - - return *tdesc;; -} -#endif - -#ifdef __x86_64__ - -static target_desc *amd64_tdescs[X86_TDESC_LAST] = { }; -static target_desc *x32_tdescs[X86_TDESC_LAST] = { }; - -const struct target_desc * -amd64_linux_read_description (uint64_t xcr0, bool is_x32) -{ - enum x86_linux_tdesc idx = xcr0_to_tdesc_idx (xcr0, is_x32); - - if (idx == X86_TDESC_LAST) - return NULL; - - struct target_desc **tdesc = NULL; - - if (is_x32) - tdesc = &x32_tdescs[idx]; - else - tdesc = &amd64_tdescs[idx]; - - if (*tdesc == NULL) - { - *tdesc = amd64_create_target_description (xcr0, is_x32, true, true); - - init_target_desc (*tdesc, amd64_expedite_regs); - } - return *tdesc; -} - -#endif - -#ifndef IN_PROCESS_AGENT - -int -i386_get_ipa_tdesc_idx (const struct target_desc *tdesc) -{ - for (int i = 0; i < X86_TDESC_LAST; i++) - { - if (tdesc == i386_tdescs[i]) - return i; - } - - /* If none tdesc is found, return the one with minimum features. */ - return X86_TDESC_MMX; -} - -#if defined __x86_64__ -int -amd64_get_ipa_tdesc_idx (const struct target_desc *tdesc) -{ - for (int i = 0; i < X86_TDESC_LAST; i++) - { - if (tdesc == amd64_tdescs[i]) - return i; - } - for (int i = 0; i < X86_TDESC_LAST; i++) - { - if (tdesc == x32_tdescs[i]) - return i; - } - - return X86_TDESC_SSE; -} - -#endif -#endif diff -Nru gdb-9.1/gdb/gdbserver/linux-x86-tdesc.h gdb-10.2/gdb/gdbserver/linux-x86-tdesc.h --- gdb-9.1/gdb/gdbserver/linux-x86-tdesc.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/linux-x86-tdesc.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,56 +0,0 @@ -/* Low level support for x86 (i386 and x86-64), shared between gdbserver - and IPA. - - Copyright (C) 2016-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef GDBSERVER_LINUX_X86_TDESC_H -#define GDBSERVER_LINUX_X86_TDESC_H - -/* Note: since IPA obviously knows what ABI it's running on (i386 vs x86_64 - vs x32), it's sufficient to pass only the register set here. This, - together with the ABI known at IPA compile time, maps to a tdesc. */ - -enum x86_linux_tdesc { - X86_TDESC_MMX = 0, - X86_TDESC_SSE = 1, - X86_TDESC_AVX = 2, - X86_TDESC_MPX = 3, - X86_TDESC_AVX_MPX = 4, - X86_TDESC_AVX_AVX512 = 5, - X86_TDESC_AVX_MPX_AVX512_PKU = 6, - X86_TDESC_LAST = 7, -}; - -#if defined __i386__ || !defined IN_PROCESS_AGENT -int i386_get_ipa_tdesc_idx (const struct target_desc *tdesc); -#endif - -#if defined __x86_64__ && !defined IN_PROCESS_AGENT -int amd64_get_ipa_tdesc_idx (const struct target_desc *tdesc); -#endif - -const struct target_desc *i386_get_ipa_tdesc (int idx); - -#ifdef __x86_64__ -const struct target_desc *amd64_linux_read_description (uint64_t xcr0, - bool is_x32); -#endif - -const struct target_desc *i386_linux_read_description (uint64_t xcr0); - -#endif /* GDBSERVER_LINUX_X86_TDESC_H */ diff -Nru gdb-9.1/gdb/gdbserver/linux-xtensa-low.c gdb-10.2/gdb/gdbserver/linux-xtensa-low.c --- gdb-9.1/gdb/gdbserver/linux-xtensa-low.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/linux-xtensa-low.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,315 +0,0 @@ -/* GNU/Linux/Xtensa specific low level interface, for the remote server for GDB. - Copyright (C) 2007-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - - -#include "server.h" -#include "linux-low.h" - -/* Defined in auto-generated file reg-xtensa.c. */ -void init_registers_xtensa (void); -extern const struct target_desc *tdesc_xtensa; - -#include <asm/ptrace.h> -#include <xtensa-config.h> -#include "arch/xtensa.h" -#include "gdb_proc_service.h" - -#include "xtensa-xtregs.c" - -enum regnum { - R_PC=0, R_PS, - R_LBEG, R_LEND, R_LCOUNT, - R_SAR, - R_WS, R_WB, - R_THREADPTR, - R_A0 = 64 -}; - -static void -xtensa_fill_gregset (struct regcache *regcache, void *buf) -{ - elf_greg_t* rset = (elf_greg_t*)buf; - const struct target_desc *tdesc = regcache->tdesc; - int ar0_regnum; - char *ptr; - int i; - - /* Take care of AR registers. */ - - ar0_regnum = find_regno (tdesc, "ar0"); - ptr = (char*)&rset[R_A0]; - - for (i = ar0_regnum; i < ar0_regnum + XCHAL_NUM_AREGS; i++) - { - collect_register (regcache, i, ptr); - ptr += register_size (tdesc, i); - } - - if (XSHAL_ABI == XTHAL_ABI_CALL0) - { - int a0_regnum = find_regno (tdesc, "a0"); - ptr = (char *) &rset[R_A0 + 4 * rset[R_WB]]; - - for (i = a0_regnum; i < a0_regnum + C0_NREGS; i++) - { - if ((4 * rset[R_WB] + i - a0_regnum) == XCHAL_NUM_AREGS) - ptr = (char *) &rset[R_A0]; - collect_register (regcache, i, ptr); - ptr += register_size (tdesc, i); - } - } - - /* Loop registers, if hardware has it. */ - -#if XCHAL_HAVE_LOOPS - collect_register_by_name (regcache, "lbeg", (char*)&rset[R_LBEG]); - collect_register_by_name (regcache, "lend", (char*)&rset[R_LEND]); - collect_register_by_name (regcache, "lcount", (char*)&rset[R_LCOUNT]); -#endif - - collect_register_by_name (regcache, "sar", (char*)&rset[R_SAR]); - collect_register_by_name (regcache, "pc", (char*)&rset[R_PC]); - collect_register_by_name (regcache, "ps", (char*)&rset[R_PS]); - collect_register_by_name (regcache, "windowbase", (char*)&rset[R_WB]); - collect_register_by_name (regcache, "windowstart", (char*)&rset[R_WS]); - -#if XCHAL_HAVE_THREADPTR - collect_register_by_name (regcache, "threadptr", - (char *) &rset[R_THREADPTR]); -#endif -} - -static void -xtensa_store_gregset (struct regcache *regcache, const void *buf) -{ - const elf_greg_t* rset = (const elf_greg_t*)buf; - const struct target_desc *tdesc = regcache->tdesc; - int ar0_regnum; - char *ptr; - int i; - - /* Take care of AR registers. */ - - ar0_regnum = find_regno (tdesc, "ar0"); - ptr = (char *)&rset[R_A0]; - - for (i = ar0_regnum; i < ar0_regnum + XCHAL_NUM_AREGS; i++) - { - supply_register (regcache, i, ptr); - ptr += register_size (tdesc, i); - } - - if (XSHAL_ABI == XTHAL_ABI_CALL0) - { - int a0_regnum = find_regno (tdesc, "a0"); - ptr = (char *) &rset[R_A0 + (4 * rset[R_WB]) % XCHAL_NUM_AREGS]; - - for (i = a0_regnum; i < a0_regnum + C0_NREGS; i++) - { - if ((4 * rset[R_WB] + i - a0_regnum) == XCHAL_NUM_AREGS) - ptr = (char *) &rset[R_A0]; - supply_register (regcache, i, ptr); - ptr += register_size (tdesc, i); - } - } - - /* Loop registers, if hardware has it. */ - -#if XCHAL_HAVE_LOOPS - supply_register_by_name (regcache, "lbeg", (char*)&rset[R_LBEG]); - supply_register_by_name (regcache, "lend", (char*)&rset[R_LEND]); - supply_register_by_name (regcache, "lcount", (char*)&rset[R_LCOUNT]); -#endif - - supply_register_by_name (regcache, "sar", (char*)&rset[R_SAR]); - supply_register_by_name (regcache, "pc", (char*)&rset[R_PC]); - supply_register_by_name (regcache, "ps", (char*)&rset[R_PS]); - supply_register_by_name (regcache, "windowbase", (char*)&rset[R_WB]); - supply_register_by_name (regcache, "windowstart", (char*)&rset[R_WS]); - -#if XCHAL_HAVE_THREADPTR - supply_register_by_name (regcache, "threadptr", - (char *) &rset[R_THREADPTR]); -#endif -} - -/* Xtensa GNU/Linux PTRACE interface includes extended register set. */ - -static void -xtensa_fill_xtregset (struct regcache *regcache, void *buf) -{ - const xtensa_regtable_t *ptr; - - for (ptr = xtensa_regmap_table; ptr->name; ptr++) - { - collect_register_by_name (regcache, ptr->name, - (char*)buf + ptr->ptrace_offset); - } -} - -static void -xtensa_store_xtregset (struct regcache *regcache, const void *buf) -{ - const xtensa_regtable_t *ptr; - - for (ptr = xtensa_regmap_table; ptr->name; ptr++) - { - supply_register_by_name (regcache, ptr->name, - (char*)buf + ptr->ptrace_offset); - } -} - -static struct regset_info xtensa_regsets[] = { - { PTRACE_GETREGS, PTRACE_SETREGS, 0, sizeof (elf_gregset_t), - GENERAL_REGS, - xtensa_fill_gregset, xtensa_store_gregset }, - { PTRACE_GETXTREGS, PTRACE_SETXTREGS, 0, XTENSA_ELF_XTREG_SIZE, - EXTENDED_REGS, - xtensa_fill_xtregset, xtensa_store_xtregset }, - NULL_REGSET -}; - -#if XCHAL_HAVE_BE -#define XTENSA_BREAKPOINT {0xd2,0x0f} -#else -#define XTENSA_BREAKPOINT {0x2d,0xf0} -#endif - -static const gdb_byte xtensa_breakpoint[] = XTENSA_BREAKPOINT; -#define xtensa_breakpoint_len 2 - -/* Implementation of linux_target_ops method "sw_breakpoint_from_kind". */ - -static const gdb_byte * -xtensa_sw_breakpoint_from_kind (int kind, int *size) -{ - *size = xtensa_breakpoint_len; - return xtensa_breakpoint; -} - -static int -xtensa_breakpoint_at (CORE_ADDR where) -{ - unsigned long insn; - - (*the_target->read_memory) (where, (unsigned char *) &insn, - xtensa_breakpoint_len); - return memcmp((char *) &insn, - xtensa_breakpoint, xtensa_breakpoint_len) == 0; -} - -/* Called by libthread_db. */ - -ps_err_e -ps_get_thread_area (struct ps_prochandle *ph, - lwpid_t lwpid, int idx, void **base) -{ - xtensa_elf_gregset_t regs; - - if (ptrace (PTRACE_GETREGS, lwpid, NULL, ®s) != 0) - return PS_ERR; - - /* IDX is the bias from the thread pointer to the beginning of the - thread descriptor. It has to be subtracted due to implementation - quirks in libthread_db. */ - *base = (void *) ((char *) regs.threadptr - idx); - - return PS_OK; -} - -static struct regsets_info xtensa_regsets_info = - { - xtensa_regsets, /* regsets */ - 0, /* num_regsets */ - NULL, /* disabled_regsets */ - }; - -static struct regs_info regs_info = - { - NULL, /* regset_bitmap */ - NULL, /* usrregs */ - &xtensa_regsets_info - }; - -static void -xtensa_arch_setup (void) -{ - current_process ()->tdesc = tdesc_xtensa; -} - -/* Support for hardware single step. */ - -static int -xtensa_supports_hardware_single_step (void) -{ - return 1; -} - -static const struct regs_info * -xtensa_regs_info (void) -{ - return ®s_info; -} - -struct linux_target_ops the_low_target = { - xtensa_arch_setup, - xtensa_regs_info, - 0, - 0, - NULL, /* fetch_register */ - linux_get_pc_32bit, - linux_set_pc_32bit, - NULL, /* breakpoint_kind_from_pc */ - xtensa_sw_breakpoint_from_kind, - NULL, - 0, - xtensa_breakpoint_at, - NULL, /* supports_z_point_type */ - NULL, /* insert_point */ - NULL, /* remove_point */ - NULL, /* stopped_by_watchpoint */ - NULL, /* stopped_data_address */ - NULL, /* collect_ptrace_register */ - NULL, /* supply_ptrace_register */ - NULL, /* siginfo_fixup */ - NULL, /* new_process */ - NULL, /* delete_process */ - NULL, /* new_thread */ - NULL, /* delete_thread */ - NULL, /* new_fork */ - NULL, /* prepare_to_resume */ - NULL, /* process_qsupported */ - NULL, /* supports_tracepoints */ - NULL, /* get_thread_area */ - NULL, /* install_fast_tracepoint_jump_pad */ - NULL, /* emit_ops */ - NULL, /* get_min_fast_tracepoint_insn_len */ - NULL, /* supports_range_stepping */ - NULL, /* breakpoint_kind_from_current_state */ - xtensa_supports_hardware_single_step, -}; - - -void -initialize_low_arch (void) -{ - /* Initialize the Linux target descriptions. */ - init_registers_xtensa (); - - initialize_regsets_info (&xtensa_regsets_info); -} diff -Nru gdb-9.1/gdb/gdbserver/lynx-i386-low.c gdb-10.2/gdb/gdbserver/lynx-i386-low.c --- gdb-9.1/gdb/gdbserver/lynx-i386-low.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/lynx-i386-low.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,358 +0,0 @@ -/* Copyright (C) 2010-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "server.h" -#include "lynx-low.h" -#include <limits.h> -#include <sys/ptrace.h> -#include "gdbsupport/x86-xstate.h" -#include "arch/i386.h" -#include "x86-tdesc.h" - -/* The following two typedefs are defined in a .h file which is not - in the standard include path (/sys/include/family/x86/ucontext.h), - so we just duplicate them here. - - Unfortunately for us, the definition of this structure differs between - LynxOS 5.x and LynxOS 178. Rather than duplicate the code, we use - different definitions depending on the target. */ - -#ifdef VMOS_DEV -#define LYNXOS_178 -#endif - -/* General register context */ -typedef struct usr_econtext { - - uint32_t uec_fault; - uint32_t uec_es; - uint32_t uec_ds; - uint32_t uec_edi; - uint32_t uec_esi; - uint32_t uec_ebp; - uint32_t uec_temp; - uint32_t uec_ebx; - uint32_t uec_edx; - uint32_t uec_ecx; - uint32_t uec_eax; - uint32_t uec_inum; - uint32_t uec_ecode; - uint32_t uec_eip; - uint32_t uec_cs; - uint32_t uec_eflags; - uint32_t uec_esp; - uint32_t uec_ss; - uint32_t uec_fs; - uint32_t uec_gs; -} usr_econtext_t; - -#if defined(LYNXOS_178) - -/* Floating point register context */ -typedef struct usr_fcontext { - uint32_t ufc_control; - uint32_t ufc_status; - uint32_t ufc_tag; - uint8_t *ufc_inst_off; - uint32_t ufc_inst_sel; - uint8_t *ufc_data_off; - uint32_t ufc_data_sel; - struct ufp387_real { - uint16_t umant4; - uint16_t umant3; - uint16_t umant2; - uint16_t umant1; - uint16_t us_and_e; - } ufc_reg[8]; -} usr_fcontext_t; - -#else /* This is LynxOS 5.x. */ - -/* Floating point and SIMD register context */ -typedef struct usr_fcontext { - uint16_t ufc_control; - uint16_t ufc_status; - uint16_t ufc_tag; - uint16_t ufc_opcode; - uint8_t *ufc_inst_off; - uint32_t ufc_inst_sel; - uint8_t *ufc_data_off; - uint32_t ufc_data_sel; - uint32_t usse_mxcsr; - uint32_t usse_mxcsr_mask; - struct ufp387_real { - uint16_t umant4; - uint16_t umant3; - uint16_t umant2; - uint16_t umant1; - uint16_t us_and_e; - uint16_t ureserved_1; - uint16_t ureserved_2; - uint16_t ureserved_3; - } ufc_reg[8]; - struct uxmm_register { - uint16_t uchunk_1; - uint16_t uchunk_2; - uint16_t uchunk_3; - uint16_t uchunk_4; - uint16_t uchunk_5; - uint16_t uchunk_6; - uint16_t uchunk_7; - uint16_t uchunk_8; - } uxmm_reg[8]; - char ureserved[16][14]; -} usr_fcontext_t; - -#endif - -/* The index of various registers inside the regcache. */ - -enum lynx_i386_gdb_regnum -{ - I386_EAX_REGNUM, - I386_ECX_REGNUM, - I386_EDX_REGNUM, - I386_EBX_REGNUM, - I386_ESP_REGNUM, - I386_EBP_REGNUM, - I386_ESI_REGNUM, - I386_EDI_REGNUM, - I386_EIP_REGNUM, - I386_EFLAGS_REGNUM, - I386_CS_REGNUM, - I386_SS_REGNUM, - I386_DS_REGNUM, - I386_ES_REGNUM, - I386_FS_REGNUM, - I386_GS_REGNUM, - I386_ST0_REGNUM, - I386_FCTRL_REGNUM = I386_ST0_REGNUM + 8, - I386_FSTAT_REGNUM, - I386_FTAG_REGNUM, - I386_FISEG_REGNUM, - I386_FIOFF_REGNUM, - I386_FOSEG_REGNUM, - I386_FOOFF_REGNUM, - I386_FOP_REGNUM, - I386_XMM0_REGNUM = 32, - I386_MXCSR_REGNUM = I386_XMM0_REGNUM + 8, - I386_SENTINEL_REGUM -}; - -/* The fill_function for the general-purpose register set. */ - -static void -lynx_i386_fill_gregset (struct regcache *regcache, char *buf) -{ -#define lynx_i386_collect_gp(regnum, fld) \ - collect_register (regcache, regnum, \ - buf + offsetof (usr_econtext_t, uec_##fld)) - - lynx_i386_collect_gp (I386_EAX_REGNUM, eax); - lynx_i386_collect_gp (I386_ECX_REGNUM, ecx); - lynx_i386_collect_gp (I386_EDX_REGNUM, edx); - lynx_i386_collect_gp (I386_EBX_REGNUM, ebx); - lynx_i386_collect_gp (I386_ESP_REGNUM, esp); - lynx_i386_collect_gp (I386_EBP_REGNUM, ebp); - lynx_i386_collect_gp (I386_ESI_REGNUM, esi); - lynx_i386_collect_gp (I386_EDI_REGNUM, edi); - lynx_i386_collect_gp (I386_EIP_REGNUM, eip); - lynx_i386_collect_gp (I386_EFLAGS_REGNUM, eflags); - lynx_i386_collect_gp (I386_CS_REGNUM, cs); - lynx_i386_collect_gp (I386_SS_REGNUM, ss); - lynx_i386_collect_gp (I386_DS_REGNUM, ds); - lynx_i386_collect_gp (I386_ES_REGNUM, es); - lynx_i386_collect_gp (I386_FS_REGNUM, fs); - lynx_i386_collect_gp (I386_GS_REGNUM, gs); -} - -/* The store_function for the general-purpose register set. */ - -static void -lynx_i386_store_gregset (struct regcache *regcache, const char *buf) -{ -#define lynx_i386_supply_gp(regnum, fld) \ - supply_register (regcache, regnum, \ - buf + offsetof (usr_econtext_t, uec_##fld)) - - lynx_i386_supply_gp (I386_EAX_REGNUM, eax); - lynx_i386_supply_gp (I386_ECX_REGNUM, ecx); - lynx_i386_supply_gp (I386_EDX_REGNUM, edx); - lynx_i386_supply_gp (I386_EBX_REGNUM, ebx); - lynx_i386_supply_gp (I386_ESP_REGNUM, esp); - lynx_i386_supply_gp (I386_EBP_REGNUM, ebp); - lynx_i386_supply_gp (I386_ESI_REGNUM, esi); - lynx_i386_supply_gp (I386_EDI_REGNUM, edi); - lynx_i386_supply_gp (I386_EIP_REGNUM, eip); - lynx_i386_supply_gp (I386_EFLAGS_REGNUM, eflags); - lynx_i386_supply_gp (I386_CS_REGNUM, cs); - lynx_i386_supply_gp (I386_SS_REGNUM, ss); - lynx_i386_supply_gp (I386_DS_REGNUM, ds); - lynx_i386_supply_gp (I386_ES_REGNUM, es); - lynx_i386_supply_gp (I386_FS_REGNUM, fs); - lynx_i386_supply_gp (I386_GS_REGNUM, gs); -} - -/* Extract the first 16 bits of register REGNUM in the REGCACHE, - and store these 2 bytes at DEST. - - This is useful to collect certain 16bit registers which are known - by GDBserver as 32bit registers (such as the Control Register - for instance). */ - -static void -collect_16bit_register (struct regcache *regcache, int regnum, char *dest) -{ - gdb_byte word[4]; - - collect_register (regcache, regnum, word); - memcpy (dest, word, 2); -} - -/* The fill_function for the floating-point register set. */ - -static void -lynx_i386_fill_fpregset (struct regcache *regcache, char *buf) -{ - int i; - - /* Collect %st0 .. %st7. */ - for (i = 0; i < 8; i++) - collect_register (regcache, I386_ST0_REGNUM + i, - buf + offsetof (usr_fcontext_t, ufc_reg) - + i * sizeof (struct ufp387_real)); - - /* Collect the other FPU registers. */ - collect_16bit_register (regcache, I386_FCTRL_REGNUM, - buf + offsetof (usr_fcontext_t, ufc_control)); - collect_16bit_register (regcache, I386_FSTAT_REGNUM, - buf + offsetof (usr_fcontext_t, ufc_status)); - collect_16bit_register (regcache, I386_FTAG_REGNUM, - buf + offsetof (usr_fcontext_t, ufc_tag)); - collect_register (regcache, I386_FISEG_REGNUM, - buf + offsetof (usr_fcontext_t, ufc_inst_sel)); - collect_register (regcache, I386_FIOFF_REGNUM, - buf + offsetof (usr_fcontext_t, ufc_inst_off)); - collect_register (regcache, I386_FOSEG_REGNUM, - buf + offsetof (usr_fcontext_t, ufc_data_sel)); - collect_register (regcache, I386_FOOFF_REGNUM, - buf + offsetof (usr_fcontext_t, ufc_data_off)); -#if !defined(LYNXOS_178) - collect_16bit_register (regcache, I386_FOP_REGNUM, - buf + offsetof (usr_fcontext_t, ufc_opcode)); - - /* Collect the XMM registers. */ - for (i = 0; i < 8; i++) - collect_register (regcache, I386_XMM0_REGNUM + i, - buf + offsetof (usr_fcontext_t, uxmm_reg) - + i * sizeof (struct uxmm_register)); - collect_register (regcache, I386_MXCSR_REGNUM, - buf + offsetof (usr_fcontext_t, usse_mxcsr)); -#endif -} - -/* This is the supply counterpart for collect_16bit_register: - It extracts a 2byte value from BUF, and uses that value to - set REGNUM's value in the regcache. - - This is useful to supply the value of certain 16bit registers - which are known by GDBserver as 32bit registers (such as the Control - Register for instance). */ - -static void -supply_16bit_register (struct regcache *regcache, int regnum, const char *buf) -{ - gdb_byte word[4]; - - memcpy (word, buf, 2); - memset (word + 2, 0, 2); - supply_register (regcache, regnum, word); -} - -/* The store_function for the floating-point register set. */ - -static void -lynx_i386_store_fpregset (struct regcache *regcache, const char *buf) -{ - int i; - - /* Store the %st0 .. %st7 registers. */ - for (i = 0; i < 8; i++) - supply_register (regcache, I386_ST0_REGNUM + i, - buf + offsetof (usr_fcontext_t, ufc_reg) - + i * sizeof (struct ufp387_real)); - - /* Store the other FPU registers. */ - supply_16bit_register (regcache, I386_FCTRL_REGNUM, - buf + offsetof (usr_fcontext_t, ufc_control)); - supply_16bit_register (regcache, I386_FSTAT_REGNUM, - buf + offsetof (usr_fcontext_t, ufc_status)); - supply_16bit_register (regcache, I386_FTAG_REGNUM, - buf + offsetof (usr_fcontext_t, ufc_tag)); - supply_register (regcache, I386_FISEG_REGNUM, - buf + offsetof (usr_fcontext_t, ufc_inst_sel)); - supply_register (regcache, I386_FIOFF_REGNUM, - buf + offsetof (usr_fcontext_t, ufc_inst_off)); - supply_register (regcache, I386_FOSEG_REGNUM, - buf + offsetof (usr_fcontext_t, ufc_data_sel)); - supply_register (regcache, I386_FOOFF_REGNUM, - buf + offsetof (usr_fcontext_t, ufc_data_off)); -#if !defined(LYNXOS_178) - supply_16bit_register (regcache, I386_FOP_REGNUM, - buf + offsetof (usr_fcontext_t, ufc_opcode)); - - /* Store the XMM registers. */ - for (i = 0; i < 8; i++) - supply_register (regcache, I386_XMM0_REGNUM + i, - buf + offsetof (usr_fcontext_t, uxmm_reg) - + i * sizeof (struct uxmm_register)); - supply_register (regcache, I386_MXCSR_REGNUM, - buf + offsetof (usr_fcontext_t, usse_mxcsr)); -#endif -} - -/* Implements the lynx_target_ops.arch_setup routine. */ - -static void -lynx_i386_arch_setup (void) -{ - struct target_desc *tdesc - = i386_create_target_description (X86_XSTATE_SSE_MASK, false, false); - - init_target_desc (tdesc, i386_expedite_regs); - - lynx_tdesc = tdesc; -} - -/* Description of all the x86-lynx register sets. */ - -struct lynx_regset_info lynx_target_regsets[] = { - /* General Purpose Registers. */ - {PTRACE_GETREGS, PTRACE_SETREGS, sizeof(usr_econtext_t), - lynx_i386_fill_gregset, lynx_i386_store_gregset}, - /* Floating Point Registers. */ - { PTRACE_GETFPREGS, PTRACE_SETFPREGS, sizeof(usr_fcontext_t), - lynx_i386_fill_fpregset, lynx_i386_store_fpregset }, - /* End of list marker. */ - {0, 0, -1, NULL, NULL } -}; - -/* The lynx_target_ops vector for x86-lynx. */ - -struct lynx_target_ops the_low_target = { - lynx_i386_arch_setup, -}; diff -Nru gdb-9.1/gdb/gdbserver/lynx-low.c gdb-10.2/gdb/gdbserver/lynx-low.c --- gdb-9.1/gdb/gdbserver/lynx-low.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/lynx-low.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,776 +0,0 @@ -/* Copyright (C) 2009-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "server.h" -#include "target.h" -#include "lynx-low.h" - -#include <limits.h> -#include <sys/ptrace.h> -#include <sys/piddef.h> /* Provides PIDGET, TIDGET, BUILDPID, etc. */ -#include <unistd.h> -#include <sys/ioctl.h> -#include <sys/types.h> -#include "gdbsupport/gdb_wait.h" -#include <signal.h> -#include "gdbsupport/filestuff.h" -#include "gdbsupport/common-inferior.h" -#include "nat/fork-inferior.h" - -int using_threads = 1; - -const struct target_desc *lynx_tdesc; - -/* Per-process private data. */ - -struct process_info_private -{ - /* The PTID obtained from the last wait performed on this process. - Initialized to null_ptid until the first wait is performed. */ - ptid_t last_wait_event_ptid; -}; - -/* Print a debug trace on standard output if debug_threads is set. */ - -static void -lynx_debug (char *string, ...) -{ - va_list args; - - if (!debug_threads) - return; - - va_start (args, string); - fprintf (stderr, "DEBUG(lynx): "); - vfprintf (stderr, string, args); - fprintf (stderr, "\n"); - va_end (args); -} - -/* Build a ptid_t given a PID and a LynxOS TID. */ - -static ptid_t -lynx_ptid_t (int pid, long tid) -{ - /* brobecker/2010-06-21: It looks like the LWP field in ptids - should be distinct for each thread (see write_ptid where it - writes the thread ID from the LWP). So instead of storing - the LynxOS tid in the tid field of the ptid, we store it in - the lwp field. */ - return ptid_t (pid, tid, 0); -} - -/* Return the process ID of the given PTID. - - This function has little reason to exist, it's just a wrapper around - ptid_get_pid. But since we have a getter function for the lynxos - ptid, it feels cleaner to have a getter for the pid as well. */ - -static int -lynx_ptid_get_pid (ptid_t ptid) -{ - return ptid.pid (); -} - -/* Return the LynxOS tid of the given PTID. */ - -static long -lynx_ptid_get_tid (ptid_t ptid) -{ - /* See lynx_ptid_t: The LynxOS tid is stored inside the lwp field - of the ptid. */ - return ptid.lwp (); -} - -/* For a given PTID, return the associated PID as known by the LynxOS - ptrace layer. */ - -static int -lynx_ptrace_pid_from_ptid (ptid_t ptid) -{ - return BUILDPID (lynx_ptid_get_pid (ptid), lynx_ptid_get_tid (ptid)); -} - -/* Return a string image of the ptrace REQUEST number. */ - -static char * -ptrace_request_to_str (int request) -{ -#define CASE(X) case X: return #X - switch (request) - { - CASE(PTRACE_TRACEME); - CASE(PTRACE_PEEKTEXT); - CASE(PTRACE_PEEKDATA); - CASE(PTRACE_PEEKUSER); - CASE(PTRACE_POKETEXT); - CASE(PTRACE_POKEDATA); - CASE(PTRACE_POKEUSER); - CASE(PTRACE_CONT); - CASE(PTRACE_KILL); - CASE(PTRACE_SINGLESTEP); - CASE(PTRACE_ATTACH); - CASE(PTRACE_DETACH); - CASE(PTRACE_GETREGS); - CASE(PTRACE_SETREGS); - CASE(PTRACE_GETFPREGS); - CASE(PTRACE_SETFPREGS); - CASE(PTRACE_READDATA); - CASE(PTRACE_WRITEDATA); - CASE(PTRACE_READTEXT); - CASE(PTRACE_WRITETEXT); - CASE(PTRACE_GETFPAREGS); - CASE(PTRACE_SETFPAREGS); - CASE(PTRACE_GETWINDOW); - CASE(PTRACE_SETWINDOW); - CASE(PTRACE_SYSCALL); - CASE(PTRACE_DUMPCORE); - CASE(PTRACE_SETWRBKPT); - CASE(PTRACE_SETACBKPT); - CASE(PTRACE_CLRBKPT); - CASE(PTRACE_GET_UCODE); -#ifdef PT_READ_GPR - CASE(PT_READ_GPR); -#endif -#ifdef PT_WRITE_GPR - CASE(PT_WRITE_GPR); -#endif -#ifdef PT_READ_FPR - CASE(PT_READ_FPR); -#endif -#ifdef PT_WRITE_FPR - CASE(PT_WRITE_FPR); -#endif -#ifdef PT_READ_VPR - CASE(PT_READ_VPR); -#endif -#ifdef PT_WRITE_VPR - CASE(PT_WRITE_VPR); -#endif -#ifdef PTRACE_PEEKUSP - CASE(PTRACE_PEEKUSP); -#endif -#ifdef PTRACE_POKEUSP - CASE(PTRACE_POKEUSP); -#endif - CASE(PTRACE_PEEKTHREAD); - CASE(PTRACE_THREADUSER); - CASE(PTRACE_FPREAD); - CASE(PTRACE_FPWRITE); - CASE(PTRACE_SETSIG); - CASE(PTRACE_CONT_ONE); - CASE(PTRACE_KILL_ONE); - CASE(PTRACE_SINGLESTEP_ONE); - CASE(PTRACE_GETLOADINFO); - CASE(PTRACE_GETTRACESIG); -#ifdef PTRACE_GETTHREADLIST - CASE(PTRACE_GETTHREADLIST); -#endif - } -#undef CASE - - return "<unknown-request>"; -} - -/* A wrapper around ptrace that allows us to print debug traces of - ptrace calls if debug traces are activated. */ - -static int -lynx_ptrace (int request, ptid_t ptid, int addr, int data, int addr2) -{ - int result; - const int pid = lynx_ptrace_pid_from_ptid (ptid); - int saved_errno; - - if (debug_threads) - fprintf (stderr, "PTRACE (%s, pid=%d(pid=%d, tid=%d), addr=0x%x, " - "data=0x%x, addr2=0x%x)", - ptrace_request_to_str (request), pid, PIDGET (pid), TIDGET (pid), - addr, data, addr2); - result = ptrace (request, pid, addr, data, addr2); - saved_errno = errno; - if (debug_threads) - fprintf (stderr, " -> %d (=0x%x)\n", result, result); - - errno = saved_errno; - return result; -} - -/* Call add_process with the given parameters, and initializes - the process' private data. */ - -static struct process_info * -lynx_add_process (int pid, int attached) -{ - struct process_info *proc; - - proc = add_process (pid, attached); - proc->tdesc = lynx_tdesc; - proc->priv = XCNEW (struct process_info_private); - proc->priv->last_wait_event_ptid = null_ptid; - - return proc; -} - -/* Callback used by fork_inferior to start tracing the inferior. */ - -static void -lynx_ptrace_fun () -{ - int pgrp; - - /* Switch child to its own process group so that signals won't - directly affect GDBserver. */ - pgrp = getpid(); - if (pgrp < 0) - trace_start_error_with_name ("pgrp"); - if (setpgid (0, pgrp) < 0) - trace_start_error_with_name ("setpgid"); - if (ioctl (0, TIOCSPGRP, &pgrp) < 0) - trace_start_error_with_name ("ioctl"); - if (lynx_ptrace (PTRACE_TRACEME, null_ptid, 0, 0, 0) < 0) - trace_start_error_with_name ("lynx_ptrace"); -} - -/* Implement the create_inferior method of the target_ops vector. */ - -static int -lynx_create_inferior (const char *program, - const std::vector<char *> &program_args) -{ - int pid; - std::string str_program_args = stringify_argv (program_args); - - lynx_debug ("lynx_create_inferior ()"); - - pid = fork_inferior (program, - str_program_args.c_str (), - get_environ ()->envp (), lynx_ptrace_fun, - NULL, NULL, NULL, NULL); - - post_fork_inferior (pid, program); - - lynx_add_process (pid, 0); - /* Do not add the process thread just yet, as we do not know its tid. - We will add it later, during the wait for the STOP event corresponding - to the lynx_ptrace (PTRACE_TRACEME) call above. */ - return pid; -} - -/* Assuming we've just attached to a running inferior whose pid is PID, - add all threads running in that process. */ - -static void -lynx_add_threads_after_attach (int pid) -{ - /* Ugh! There appears to be no way to get the list of threads - in the program we just attached to. So get the list by calling - the "ps" command. This is only needed now, as we will then - keep the thread list up to date thanks to thread creation and - exit notifications. */ - FILE *f; - char buf[256]; - int thread_pid, thread_tid; - - f = popen ("ps atx", "r"); - if (f == NULL) - perror_with_name ("Cannot get thread list"); - - while (fgets (buf, sizeof (buf), f) != NULL) - if ((sscanf (buf, "%d %d", &thread_pid, &thread_tid) == 2 - && thread_pid == pid)) - { - ptid_t thread_ptid = lynx_ptid_t (pid, thread_tid); - - if (!find_thread_ptid (thread_ptid)) - { - lynx_debug ("New thread: (pid = %d, tid = %d)", - pid, thread_tid); - add_thread (thread_ptid, NULL); - } - } - - pclose (f); -} - -/* Implement the attach target_ops method. */ - -static int -lynx_attach (unsigned long pid) -{ - ptid_t ptid = lynx_ptid_t (pid, 0); - - if (lynx_ptrace (PTRACE_ATTACH, ptid, 0, 0, 0) != 0) - error ("Cannot attach to process %lu: %s (%d)\n", pid, - safe_strerror (errno), errno); - - lynx_add_process (pid, 1); - lynx_add_threads_after_attach (pid); - - return 0; -} - -/* Implement the resume target_ops method. */ - -static void -lynx_resume (struct thread_resume *resume_info, size_t n) -{ - ptid_t ptid = resume_info[0].thread; - const int request - = (resume_info[0].kind == resume_step - ? (n == 1 ? PTRACE_SINGLESTEP_ONE : PTRACE_SINGLESTEP) - : PTRACE_CONT); - const int signal = resume_info[0].sig; - - /* If given a minus_one_ptid, then try using the current_process' - private->last_wait_event_ptid. On most LynxOS versions, - using any of the process' thread works well enough, but - LynxOS 178 is a little more sensitive, and triggers some - unexpected signals (Eg SIG61) when we resume the inferior - using a different thread. */ - if (ptid == minus_one_ptid) - ptid = current_process()->priv->last_wait_event_ptid; - - /* The ptid might still be minus_one_ptid; this can happen between - the moment we create the inferior or attach to a process, and - the moment we resume its execution for the first time. It is - fine to use the current_thread's ptid in those cases. */ - if (ptid == minus_one_ptid) - ptid = ptid_of (current_thread); - - regcache_invalidate_pid (ptid.pid ()); - - errno = 0; - lynx_ptrace (request, ptid, 1, signal, 0); - if (errno) - perror_with_name ("ptrace"); -} - -/* Resume the execution of the given PTID. */ - -static void -lynx_continue (ptid_t ptid) -{ - struct thread_resume resume_info; - - resume_info.thread = ptid; - resume_info.kind = resume_continue; - resume_info.sig = 0; - - lynx_resume (&resume_info, 1); -} - -/* A wrapper around waitpid that handles the various idiosyncrasies - of LynxOS' waitpid. */ - -static int -lynx_waitpid (int pid, int *stat_loc) -{ - int ret = 0; - - while (1) - { - ret = waitpid (pid, stat_loc, WNOHANG); - if (ret < 0) - { - /* An ECHILD error is not indicative of a real problem. - It happens for instance while waiting for the inferior - to stop after attaching to it. */ - if (errno != ECHILD) - perror_with_name ("waitpid (WNOHANG)"); - } - if (ret > 0) - break; - /* No event with WNOHANG. See if there is one with WUNTRACED. */ - ret = waitpid (pid, stat_loc, WNOHANG | WUNTRACED); - if (ret < 0) - { - /* An ECHILD error is not indicative of a real problem. - It happens for instance while waiting for the inferior - to stop after attaching to it. */ - if (errno != ECHILD) - perror_with_name ("waitpid (WNOHANG|WUNTRACED)"); - } - if (ret > 0) - break; - usleep (1000); - } - return ret; -} - -/* Implement the wait target_ops method. */ - -static ptid_t -lynx_wait_1 (ptid_t ptid, struct target_waitstatus *status, int options) -{ - int pid; - int ret; - int wstat; - ptid_t new_ptid; - - if (ptid == minus_one_ptid) - pid = lynx_ptid_get_pid (ptid_of (current_thread)); - else - pid = BUILDPID (lynx_ptid_get_pid (ptid), lynx_ptid_get_tid (ptid)); - -retry: - - ret = lynx_waitpid (pid, &wstat); - new_ptid = lynx_ptid_t (ret, ((union wait *) &wstat)->w_tid); - find_process_pid (ret)->priv->last_wait_event_ptid = new_ptid; - - /* If this is a new thread, then add it now. The reason why we do - this here instead of when handling new-thread events is because - we need to add the thread associated to the "main" thread - even - for non-threaded applications where the new-thread events are not - generated. */ - if (!find_thread_ptid (new_ptid)) - { - lynx_debug ("New thread: (pid = %d, tid = %d)", - lynx_ptid_get_pid (new_ptid), lynx_ptid_get_tid (new_ptid)); - add_thread (new_ptid, NULL); - } - - if (WIFSTOPPED (wstat)) - { - status->kind = TARGET_WAITKIND_STOPPED; - status->value.integer = gdb_signal_from_host (WSTOPSIG (wstat)); - lynx_debug ("process stopped with signal: %d", - status->value.integer); - } - else if (WIFEXITED (wstat)) - { - status->kind = TARGET_WAITKIND_EXITED; - status->value.integer = WEXITSTATUS (wstat); - lynx_debug ("process exited with code: %d", status->value.integer); - } - else if (WIFSIGNALED (wstat)) - { - status->kind = TARGET_WAITKIND_SIGNALLED; - status->value.integer = gdb_signal_from_host (WTERMSIG (wstat)); - lynx_debug ("process terminated with code: %d", - status->value.integer); - } - else - { - /* Not sure what happened if we get here, or whether we can - in fact get here. But if we do, handle the event the best - we can. */ - status->kind = TARGET_WAITKIND_STOPPED; - status->value.integer = gdb_signal_from_host (0); - lynx_debug ("unknown event ????"); - } - - /* SIGTRAP events are generated for situations other than single-step/ - breakpoint events (Eg. new-thread events). Handle those other types - of events, and resume the execution if necessary. */ - if (status->kind == TARGET_WAITKIND_STOPPED - && status->value.integer == GDB_SIGNAL_TRAP) - { - const int realsig = lynx_ptrace (PTRACE_GETTRACESIG, new_ptid, 0, 0, 0); - - lynx_debug ("(realsig = %d)", realsig); - switch (realsig) - { - case SIGNEWTHREAD: - /* We just added the new thread above. No need to do anything - further. Just resume the execution again. */ - lynx_continue (new_ptid); - goto retry; - - case SIGTHREADEXIT: - remove_thread (find_thread_ptid (new_ptid)); - lynx_continue (new_ptid); - goto retry; - } - } - - return new_ptid; -} - -/* A wrapper around lynx_wait_1 that also prints debug traces when - such debug traces have been activated. */ - -static ptid_t -lynx_wait (ptid_t ptid, struct target_waitstatus *status, int options) -{ - ptid_t new_ptid; - - lynx_debug ("lynx_wait (pid = %d, tid = %ld)", - lynx_ptid_get_pid (ptid), lynx_ptid_get_tid (ptid)); - new_ptid = lynx_wait_1 (ptid, status, options); - lynx_debug (" -> (pid=%d, tid=%ld, status->kind = %d)", - lynx_ptid_get_pid (new_ptid), lynx_ptid_get_tid (new_ptid), - status->kind); - return new_ptid; -} - -/* Implement the kill target_ops method. */ - -static int -lynx_kill (process_info *process) -{ - ptid_t ptid = lynx_ptid_t (process->pid, 0); - struct target_waitstatus status; - - lynx_ptrace (PTRACE_KILL, ptid, 0, 0, 0); - lynx_wait (ptid, &status, 0); - the_target->mourn (process); - return 0; -} - -/* Implement the detach target_ops method. */ - -static int -lynx_detach (process_info *process) -{ - ptid_t ptid = lynx_ptid_t (process->pid, 0); - - lynx_ptrace (PTRACE_DETACH, ptid, 0, 0, 0); - the_target->mourn (process); - return 0; -} - -/* Implement the mourn target_ops method. */ - -static void -lynx_mourn (struct process_info *proc) -{ - for_each_thread (proc->pid, remove_thread); - - /* Free our private data. */ - free (proc->priv); - proc->priv = NULL; - - remove_process (proc); -} - -/* Implement the join target_ops method. */ - -static void -lynx_join (int pid) -{ - /* The PTRACE_DETACH is sufficient to detach from the process. - So no need to do anything extra. */ -} - -/* Implement the thread_alive target_ops method. */ - -static int -lynx_thread_alive (ptid_t ptid) -{ - /* The list of threads is updated at the end of each wait, so it - should be up to date. No need to re-fetch it. */ - return (find_thread_ptid (ptid) != NULL); -} - -/* Implement the fetch_registers target_ops method. */ - -static void -lynx_fetch_registers (struct regcache *regcache, int regno) -{ - struct lynx_regset_info *regset = lynx_target_regsets; - ptid_t inferior_ptid = ptid_of (current_thread); - - lynx_debug ("lynx_fetch_registers (regno = %d)", regno); - - while (regset->size >= 0) - { - char *buf; - int res; - - buf = xmalloc (regset->size); - res = lynx_ptrace (regset->get_request, inferior_ptid, (int) buf, 0, 0); - if (res < 0) - perror ("ptrace"); - regset->store_function (regcache, buf); - free (buf); - regset++; - } -} - -/* Implement the store_registers target_ops method. */ - -static void -lynx_store_registers (struct regcache *regcache, int regno) -{ - struct lynx_regset_info *regset = lynx_target_regsets; - ptid_t inferior_ptid = ptid_of (current_thread); - - lynx_debug ("lynx_store_registers (regno = %d)", regno); - - while (regset->size >= 0) - { - char *buf; - int res; - - buf = xmalloc (regset->size); - res = lynx_ptrace (regset->get_request, inferior_ptid, (int) buf, 0, 0); - if (res == 0) - { - /* Then overlay our cached registers on that. */ - regset->fill_function (regcache, buf); - /* Only now do we write the register set. */ - res = lynx_ptrace (regset->set_request, inferior_ptid, (int) buf, - 0, 0); - } - if (res < 0) - perror ("ptrace"); - free (buf); - regset++; - } -} - -/* Implement the read_memory target_ops method. */ - -static int -lynx_read_memory (CORE_ADDR memaddr, unsigned char *myaddr, int len) -{ - /* On LynxOS, memory reads needs to be performed in chunks the size - of int types, and they should also be aligned accordingly. */ - int buf; - const int xfer_size = sizeof (buf); - CORE_ADDR addr = memaddr & -(CORE_ADDR) xfer_size; - ptid_t inferior_ptid = ptid_of (current_thread); - - while (addr < memaddr + len) - { - int skip = 0; - int truncate = 0; - - errno = 0; - if (addr < memaddr) - skip = memaddr - addr; - if (addr + xfer_size > memaddr + len) - truncate = addr + xfer_size - memaddr - len; - buf = lynx_ptrace (PTRACE_PEEKTEXT, inferior_ptid, addr, 0, 0); - if (errno) - return errno; - memcpy (myaddr + (addr - memaddr) + skip, (gdb_byte *) &buf + skip, - xfer_size - skip - truncate); - addr += xfer_size; - } - - return 0; -} - -/* Implement the write_memory target_ops method. */ - -static int -lynx_write_memory (CORE_ADDR memaddr, const unsigned char *myaddr, int len) -{ - /* On LynxOS, memory writes needs to be performed in chunks the size - of int types, and they should also be aligned accordingly. */ - int buf; - const int xfer_size = sizeof (buf); - CORE_ADDR addr = memaddr & -(CORE_ADDR) xfer_size; - ptid_t inferior_ptid = ptid_of (current_thread); - - while (addr < memaddr + len) - { - int skip = 0; - int truncate = 0; - - if (addr < memaddr) - skip = memaddr - addr; - if (addr + xfer_size > memaddr + len) - truncate = addr + xfer_size - memaddr - len; - if (skip > 0 || truncate > 0) - { - /* We need to read the memory at this address in order to preserve - the data that we are not overwriting. */ - lynx_read_memory (addr, (unsigned char *) &buf, xfer_size); - if (errno) - return errno; - } - memcpy ((gdb_byte *) &buf + skip, myaddr + (addr - memaddr) + skip, - xfer_size - skip - truncate); - errno = 0; - lynx_ptrace (PTRACE_POKETEXT, inferior_ptid, addr, buf, 0); - if (errno) - return errno; - addr += xfer_size; - } - - return 0; -} - -/* Implement the kill_request target_ops method. */ - -static void -lynx_request_interrupt (void) -{ - ptid_t inferior_ptid = ptid_of (get_first_thread ()); - - kill (lynx_ptid_get_pid (inferior_ptid), SIGINT); -} - -/* The LynxOS target_ops vector. */ - -static struct target_ops lynx_target_ops = { - lynx_create_inferior, - NULL, /* post_create_inferior */ - lynx_attach, - lynx_kill, - lynx_detach, - lynx_mourn, - lynx_join, - lynx_thread_alive, - lynx_resume, - lynx_wait, - lynx_fetch_registers, - lynx_store_registers, - NULL, /* prepare_to_access_memory */ - NULL, /* done_accessing_memory */ - lynx_read_memory, - lynx_write_memory, - NULL, /* look_up_symbols */ - lynx_request_interrupt, - NULL, /* read_auxv */ - NULL, /* supports_z_point_type */ - NULL, /* insert_point */ - NULL, /* remove_point */ - NULL, /* stopped_by_sw_breakpoint */ - NULL, /* supports_stopped_by_sw_breakpoint */ - NULL, /* stopped_by_hw_breakpoint */ - NULL, /* supports_stopped_by_hw_breakpoint */ - target_can_do_hardware_single_step, - NULL, /* stopped_by_watchpoint */ - NULL, /* stopped_data_address */ - NULL, /* read_offsets */ - NULL, /* get_tls_address */ - NULL, /* hostio_last_error */ - NULL, /* qxfer_osdata */ - NULL, /* qxfer_siginfo */ - NULL, /* supports_non_stop */ - NULL, /* async */ - NULL, /* start_non_stop */ - NULL, /* supports_multi_process */ - NULL, /* supports_fork_events */ - NULL, /* supports_vfork_events */ - NULL, /* supports_exec_events */ - NULL, /* handle_new_gdb_connection */ - NULL, /* handle_monitor_command */ -}; - -void -initialize_low (void) -{ - set_target_ops (&lynx_target_ops); - the_low_target.arch_setup (); -} - diff -Nru gdb-9.1/gdb/gdbserver/lynx-low.h gdb-10.2/gdb/gdbserver/lynx-low.h --- gdb-9.1/gdb/gdbserver/lynx-low.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/lynx-low.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,59 +0,0 @@ -/* Copyright (C) 2010-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef GDBSERVER_LYNX_LOW_H -#define GDBSERVER_LYNX_LOW_H - -struct regcache; -struct target_desc; - -/* Some information relative to a given register set. */ - -struct lynx_regset_info -{ - /* The ptrace request needed to get/set registers of this set. */ - int get_request, set_request; - /* The size of the register set. */ - int size; - /* Fill the buffer BUF from the contents of the given REGCACHE. */ - void (*fill_function) (struct regcache *regcache, char *buf); - /* Store the register value in BUF in the given REGCACHE. */ - void (*store_function) (struct regcache *regcache, const char *buf); -}; - -/* A list of regsets for the target being debugged, terminated by an entry - where the size is negative. - - This list should be created by the target-specific code. */ - -extern struct lynx_regset_info lynx_target_regsets[]; - -/* The target-specific operations for LynxOS support. */ - -struct lynx_target_ops -{ - /* Architecture-specific setup. */ - void (*arch_setup) (void); -}; - -extern struct lynx_target_ops the_low_target; - -/* The inferior's target description. This is a global because the - LynxOS ports support neither bi-arch nor multi-process. */ -extern const struct target_desc *lynx_tdesc; - -#endif /* GDBSERVER_LYNX_LOW_H */ diff -Nru gdb-9.1/gdb/gdbserver/lynx-ppc-low.c gdb-10.2/gdb/gdbserver/lynx-ppc-low.c --- gdb-9.1/gdb/gdbserver/lynx-ppc-low.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/lynx-ppc-low.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,185 +0,0 @@ -/* Copyright (C) 2009-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "server.h" -#include "lynx-low.h" -#include <limits.h> -#include <sys/ptrace.h> - -/* The following two typedefs are defined in a .h file which is not - in the standard include path (/sys/include/family/ppc/ucontext.h), - so we just duplicate them here. */ - -/* General register context */ -typedef struct usr_econtext_s -{ - uint32_t uec_iregs[32]; - uint32_t uec_inum; - uint32_t uec_srr0; - uint32_t uec_srr1; - uint32_t uec_lr; - uint32_t uec_ctr; - uint32_t uec_cr; - uint32_t uec_xer; - uint32_t uec_dar; - uint32_t uec_mq; - uint32_t uec_msr; - uint32_t uec_sregs[16]; - uint32_t uec_ss_count; - uint32_t uec_ss_addr1; - uint32_t uec_ss_addr2; - uint32_t uec_ss_code1; - uint32_t uec_ss_code2; -} usr_econtext_t; - -/* Floating point register context */ -typedef struct usr_fcontext_s -{ - uint64_t ufc_freg[32]; - uint32_t ufc_fpscr[2]; -} usr_fcontext_t; - -/* Index of for various registers inside the regcache. */ -#define R0_REGNUM 0 -#define F0_REGNUM 32 -#define PC_REGNUM 64 -#define MSR_REGNUM 65 -#define CR_REGNUM 66 -#define LR_REGNUM 67 -#define CTR_REGNUM 68 -#define XER_REGNUM 69 -#define FPSCR_REGNUM 70 - -/* Defined in auto-generated file powerpc-32.c. */ -extern void init_registers_powerpc_32 (void); -extern const struct target_desc *tdesc_powerpc_32; - -/* The fill_function for the general-purpose register set. */ - -static void -lynx_ppc_fill_gregset (struct regcache *regcache, char *buf) -{ - int i; - - /* r0 - r31 */ - for (i = 0; i < 32; i++) - collect_register (regcache, R0_REGNUM + i, - buf + offsetof (usr_econtext_t, uec_iregs[i])); - - /* The other registers provided in the GP register context. */ - collect_register (regcache, PC_REGNUM, - buf + offsetof (usr_econtext_t, uec_srr0)); - collect_register (regcache, MSR_REGNUM, - buf + offsetof (usr_econtext_t, uec_srr1)); - collect_register (regcache, CR_REGNUM, - buf + offsetof (usr_econtext_t, uec_cr)); - collect_register (regcache, LR_REGNUM, - buf + offsetof (usr_econtext_t, uec_lr)); - collect_register (regcache, CTR_REGNUM, - buf + offsetof (usr_econtext_t, uec_ctr)); - collect_register (regcache, XER_REGNUM, - buf + offsetof (usr_econtext_t, uec_xer)); -} - -/* The store_function for the general-purpose register set. */ - -static void -lynx_ppc_store_gregset (struct regcache *regcache, const char *buf) -{ - int i; - - /* r0 - r31 */ - for (i = 0; i < 32; i++) - supply_register (regcache, R0_REGNUM + i, - buf + offsetof (usr_econtext_t, uec_iregs[i])); - - /* The other registers provided in the GP register context. */ - supply_register (regcache, PC_REGNUM, - buf + offsetof (usr_econtext_t, uec_srr0)); - supply_register (regcache, MSR_REGNUM, - buf + offsetof (usr_econtext_t, uec_srr1)); - supply_register (regcache, CR_REGNUM, - buf + offsetof (usr_econtext_t, uec_cr)); - supply_register (regcache, LR_REGNUM, - buf + offsetof (usr_econtext_t, uec_lr)); - supply_register (regcache, CTR_REGNUM, - buf + offsetof (usr_econtext_t, uec_ctr)); - supply_register (regcache, XER_REGNUM, - buf + offsetof (usr_econtext_t, uec_xer)); -} - -/* The fill_function for the floating-point register set. */ - -static void -lynx_ppc_fill_fpregset (struct regcache *regcache, char *buf) -{ - int i; - - /* f0 - f31 */ - for (i = 0; i < 32; i++) - collect_register (regcache, F0_REGNUM + i, - buf + offsetof (usr_fcontext_t, ufc_freg[i])); - - /* fpscr */ - collect_register (regcache, FPSCR_REGNUM, - buf + offsetof (usr_fcontext_t, ufc_fpscr)); -} - -/* The store_function for the floating-point register set. */ - -static void -lynx_ppc_store_fpregset (struct regcache *regcache, const char *buf) -{ - int i; - - /* f0 - f31 */ - for (i = 0; i < 32; i++) - supply_register (regcache, F0_REGNUM + i, - buf + offsetof (usr_fcontext_t, ufc_freg[i])); - - /* fpscr */ - supply_register (regcache, FPSCR_REGNUM, - buf + offsetof (usr_fcontext_t, ufc_fpscr)); -} - -/* Implements the lynx_target_ops.arch_setup routine. */ - -static void -lynx_ppc_arch_setup (void) -{ - init_registers_powerpc_32 (); - lynx_tdesc = tdesc_powerpc_32; -} - -/* Description of all the powerpc-lynx register sets. */ - -struct lynx_regset_info lynx_target_regsets[] = { - /* General Purpose Registers. */ - {PTRACE_GETREGS, PTRACE_SETREGS, sizeof(usr_econtext_t), - lynx_ppc_fill_gregset, lynx_ppc_store_gregset}, - /* Floating Point Registers. */ - { PTRACE_GETFPREGS, PTRACE_SETFPREGS, sizeof(usr_fcontext_t), - lynx_ppc_fill_fpregset, lynx_ppc_store_fpregset }, - /* End of list marker. */ - {0, 0, -1, NULL, NULL } -}; - -/* The lynx_target_ops vector for powerpc-lynxos. */ - -struct lynx_target_ops the_low_target = { - lynx_ppc_arch_setup, -}; diff -Nru gdb-9.1/gdb/gdbserver/Makefile.in gdb-10.2/gdb/gdbserver/Makefile.in --- gdb-9.1/gdb/gdbserver/Makefile.in 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/Makefile.in 1970-01-01 00:00:00.000000000 +0000 @@ -1,708 +0,0 @@ -# Copyright (C) 1989-2020 Free Software Foundation, Inc. - -# This file is part of GDB. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. - -# Please keep lists in this file sorted alphabetically, with one item per line. -# See gdb/Makefile.in for guidelines on ordering files and directories. - -prefix = @prefix@ -exec_prefix = @exec_prefix@ - -host_alias = @host_noncanonical@ -target_alias = @target_noncanonical@ -program_transform_name = @program_transform_name@ -bindir = @bindir@ -libdir = @libdir@ -tooldir = $(libdir)/$(target_alias) - -datarootdir = @datarootdir@ -datadir = @datadir@ -mandir = @mandir@ -man1dir = $(mandir)/man1 -man2dir = $(mandir)/man2 -man3dir = $(mandir)/man3 -man4dir = $(mandir)/man4 -man5dir = $(mandir)/man5 -man6dir = $(mandir)/man6 -man7dir = $(mandir)/man7 -man8dir = $(mandir)/man8 -man9dir = $(mandir)/man9 -infodir = @infodir@ -htmldir = $(prefix)/html -includedir = @includedir@ -CONFIG_SRC_SUBDIR = @CONFIG_SRC_SUBDIR@ - -SHELL = @SHELL@ -EXEEXT = @EXEEXT@ - -INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_DATA = @INSTALL_DATA@ -RANLIB = @RANLIB@ - -CC = @CC@ -CXX = @CXX@ -CXX_DIALECT = @CXX_DIALECT@ -AR = @AR@ -AR_FLAGS = rc - -# Dependency tracking information. -DEPMODE = @CCDEPMODE@ -DEPDIR = @DEPDIR@ -depcomp = $(SHELL) $(srcdir)/../../depcomp - -# Directory containing source files. Don't clean up the spacing, -# this exact string is matched for by the "configure" script. -srcdir = @srcdir@ -abs_top_srcdir = @abs_top_srcdir@ -abs_srcdir = @abs_srcdir@ -VPATH = @srcdir@ - -include $(srcdir)/../silent-rules.mk - -# Note that these are overridden by GNU make-specific code below if -# GNU make is used. The overrides implement dependency tracking. -COMPILE.pre = $(CXX) -x c++ $(CXX_DIALECT) -COMPILE.post = -c -o $@ -COMPILE = $(ECHO_CXX) $(COMPILE.pre) $(INTERNAL_CFLAGS) $(COMPILE.post) -POSTCOMPILE = @true - -# It is also possible that you will need to add -I/usr/include/sys to the -# CFLAGS section if your system doesn't have fcntl.h in /usr/include (which -# is where it should be according to Posix). - -# Set this up with gcc if you have gnu ld and the loader will print out -# line numbers for undefinded refs. -#CC_LD = g++ -static -CC_LD = $(CXX) $(CXX_DIALECT) - -# Where is the "include" directory? Traditionally ../include or ./include -INCLUDE_DIR = ${srcdir}/../../include -INCLUDE_DEP = $$(INCLUDE_DIR) - -LIBIBERTY_BUILDDIR = build-libiberty-gdbserver -LIBIBERTY = $(LIBIBERTY_BUILDDIR)/libiberty.a - -# Where is ust? These will be empty if ust was not available. -ustlibs = @ustlibs@ -ustinc = @ustinc@ - -# gnulib -GNULIB_BUILDDIR = build-gnulib-gdbserver -LIBGNU = $(GNULIB_BUILDDIR)/import/libgnu.a -INCGNU = -I$(srcdir)/../../gnulib/import -I$(GNULIB_BUILDDIR)/import - -# Generated headers in the gnulib directory. These must be listed -# so that they are generated before other files are compiled. -GNULIB_H = $(GNULIB_BUILDDIR)/import/string.h @GNULIB_STDINT_H@ - -# All the includes used for CFLAGS and for lint. -# -I. for config files. -# -I${srcdir} for our headers. -# -I$(srcdir)/../regformats for regdef.h. -# -# We do not include ../target or ../nat in here because headers -# in those directories should be included with the subdirectory. -# e.g.: "target/wait.h". -# -INCLUDE_CFLAGS = -I. -I${srcdir} \ - -I$(srcdir)/../regformats -I$(srcdir)/.. -I$(INCLUDE_DIR) \ - $(INCGNU) - -# M{H,T}_CFLAGS, if defined, has host- and target-dependent CFLAGS -# from the config/ directory. -GLOBAL_CFLAGS = ${MT_CFLAGS} ${MH_CFLAGS} -#PROFILE_CFLAGS = -pg - -WARN_CFLAGS = @WARN_CFLAGS@ -WERROR_CFLAGS = @WERROR_CFLAGS@ - -WARN_CFLAGS_NO_FORMAT = `echo " $(WARN_CFLAGS) " \ - | sed "s/ -Wformat-nonliteral / -Wno-format-nonliteral /g"` - -# These are specifically reserved for setting from the command line -# when running make. I.E. "make CFLAGS=-Wmissing-prototypes". -CFLAGS = @CFLAGS@ -CXXFLAGS = @CXXFLAGS@ -CPPFLAGS = @CPPFLAGS@ - -PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ -PTHREAD_LIBS = @PTHREAD_LIBS@ - -# INTERNAL_CFLAGS is the aggregate of all other *CFLAGS macros. -INTERNAL_CFLAGS_BASE = ${CXXFLAGS} ${GLOBAL_CFLAGS} \ - ${PROFILE_CFLAGS} ${INCLUDE_CFLAGS} ${CPPFLAGS} $(PTHREAD_CFLAGS) -INTERNAL_WARN_CFLAGS = ${INTERNAL_CFLAGS_BASE} $(WARN_CFLAGS) -INTERNAL_CFLAGS = ${INTERNAL_WARN_CFLAGS} $(WERROR_CFLAGS) -DGDBSERVER - -# LDFLAGS is specifically reserved for setting from the command line -# when running make. -LDFLAGS = @LDFLAGS@ -INTERNAL_LDFLAGS = $(LDFLAGS) @RDYNAMIC@ - -# All source files that go into linking GDB remote server. - -SFILES = \ - $(srcdir)/debug.c \ - $(srcdir)/dll.c \ - $(srcdir)/gdbreplay.c \ - $(srcdir)/hostio.c \ - $(srcdir)/hostio-errno.c \ - $(srcdir)/i387-fp.c \ - $(srcdir)/inferiors.c \ - $(srcdir)/linux-aarch64-low.c \ - $(srcdir)/linux-arm-low.c \ - $(srcdir)/linux-bfin-low.c \ - $(srcdir)/linux-cris-low.c \ - $(srcdir)/linux-crisv32-low.c \ - $(srcdir)/linux-ia64-low.c \ - $(srcdir)/linux-low.c \ - $(srcdir)/linux-m32r-low.c \ - $(srcdir)/linux-m68k-low.c \ - $(srcdir)/linux-mips-low.c \ - $(srcdir)/linux-nios2-low.c \ - $(srcdir)/linux-ppc-low.c \ - $(srcdir)/linux-s390-low.c \ - $(srcdir)/linux-sh-low.c \ - $(srcdir)/linux-sparc-low.c \ - $(srcdir)/linux-tile-low.c \ - $(srcdir)/linux-x86-low.c \ - $(srcdir)/linux-xtensa-low.c \ - $(srcdir)/mem-break.c \ - $(srcdir)/proc-service.c \ - $(srcdir)/proc-service.list \ - $(srcdir)/regcache.c \ - $(srcdir)/remote-utils.c \ - $(srcdir)/server.c \ - $(srcdir)/symbol.c \ - $(srcdir)/target.c \ - $(srcdir)/thread-db.c \ - $(srcdir)/utils.c \ - $(srcdir)/win32-arm-low.c \ - $(srcdir)/win32-i386-low.c \ - $(srcdir)/win32-low.c \ - $(srcdir)/wincecompat.c \ - $(srcdir)/x86-low.c \ - $(srcdir)/arch/arm.c \ - $(srcdir)/arch/arm-get-next-pcs.c \ - $(srcdir)/arch/arm-linux.c \ - $(srcdir)/arch/ppc-linux-common.c \ - $(srcdir)/../alloc.c \ - $(srcdir)/gdbsupport/btrace-common.c \ - $(srcdir)/gdbsupport/buffer.c \ - $(srcdir)/gdbsupport/cleanups.c \ - $(srcdir)/gdbsupport/common-debug.c \ - $(srcdir)/gdbsupport/common-exceptions.c \ - $(srcdir)/gdbsupport/common-inferior.c \ - $(srcdir)/gdbsupport/common-regcache.c \ - $(srcdir)/gdbsupport/common-utils.c \ - $(srcdir)/gdbsupport/errors.c \ - $(srcdir)/gdbsupport/environ.c \ - $(srcdir)/gdbsupport/fileio.c \ - $(srcdir)/gdbsupport/filestuff.c \ - $(srcdir)/gdbsupport/job-control.c \ - $(srcdir)/gdbsupport/gdb-dlfcn.c \ - $(srcdir)/gdbsupport/gdb_tilde_expand.c \ - $(srcdir)/gdbsupport/gdb_vecs.c \ - $(srcdir)/gdbsupport/netstuff.c \ - $(srcdir)/gdbsupport/new-op.c \ - $(srcdir)/gdbsupport/pathstuff.c \ - $(srcdir)/gdbsupport/print-utils.c \ - $(srcdir)/gdbsupport/ptid.c \ - $(srcdir)/gdbsupport/rsp-low.c \ - $(srcdir)/gdbsupport/safe-strerror.c \ - $(srcdir)/gdbsupport/tdesc.c \ - $(srcdir)/gdbsupport/xml-utils.c \ - $(srcdir)/nat/aarch64-sve-linux-ptrace.c \ - $(srcdir)/nat/linux-btrace.c \ - $(srcdir)/nat/linux-namespaces.c \ - $(srcdir)/nat/linux-osdata.c \ - $(srcdir)/nat/linux-personality.c \ - $(srcdir)/nat/mips-linux-watch.c \ - $(srcdir)/nat/ppc-linux.c \ - $(srcdir)/nat/fork-inferior.c \ - $(srcdir)/target/waitstatus.c - -DEPFILES = @GDBSERVER_DEPFILES@ - -LIBOBJS = @LIBOBJS@ - -SOURCES = $(SFILES) -TAGFILES = $(SOURCES) ${HFILES} ${ALLPARAM} ${POSSLIBS} - -OBS = \ - alloc.o \ - ax.o \ - gdbsupport/agent.o \ - gdbsupport/btrace-common.o \ - gdbsupport/buffer.o \ - gdbsupport/cleanups.o \ - gdbsupport/common-debug.o \ - gdbsupport/common-exceptions.o \ - gdbsupport/common-inferior.o \ - gdbsupport/job-control.o \ - gdbsupport/common-regcache.o \ - gdbsupport/common-utils.o \ - gdbsupport/errors.o \ - gdbsupport/environ.o \ - gdbsupport/fileio.o \ - gdbsupport/filestuff.o \ - gdbsupport/format.o \ - gdbsupport/gdb-dlfcn.o \ - gdbsupport/gdb_tilde_expand.o \ - gdbsupport/gdb_vecs.o \ - gdbsupport/netstuff.o \ - gdbsupport/new-op.o \ - gdbsupport/pathstuff.o \ - gdbsupport/print-utils.o \ - gdbsupport/ptid.o \ - gdbsupport/rsp-low.o \ - gdbsupport/safe-strerror.o \ - gdbsupport/signals.o \ - gdbsupport/signals-state-save-restore.o \ - gdbsupport/tdesc.o \ - gdbsupport/xml-utils.o \ - debug.o \ - dll.o \ - event-loop.o \ - hostio.o \ - inferiors.o \ - mem-break.o \ - notif.o \ - regcache.o \ - remote-utils.o \ - server.o \ - symbol.o \ - target.o \ - tdesc.o \ - tracepoint.o \ - utils.o \ - version.o \ - waitstatus.o \ - $(DEPFILES) \ - $(LIBOBJS) \ - $(XML_BUILTIN) - -GDBREPLAY_OBS = \ - gdbsupport/cleanups.o \ - gdbsupport/common-exceptions.o \ - gdbsupport/common-utils.o \ - gdbsupport/rsp-low.o \ - gdbsupport/errors.o \ - gdbsupport/netstuff.o \ - gdbsupport/print-utils.o \ - gdbsupport/safe-strerror.o \ - gdbreplay.o \ - utils.o \ - version.o - -GDBSERVER_LIBS = @GDBSERVER_LIBS@ $(PTHREAD_LIBS) -XM_CLIBS = @LIBS@ -CDEPS = $(srcdir)/proc-service.list - -# XML files to compile in to gdbserver, if any. -XML_DIR = $(srcdir)/../features -XML_FILES = @srv_xmlfiles@ -XML_BUILTIN = @srv_xmlbuiltin@ - -IPA_DEPFILES = @IPA_DEPFILES@ -extra_libraries = @extra_libraries@ - -SUBDIRS = $(GNULIB_BUILDDIR) $(LIBIBERTY_BUILDDIR) -CLEANDIRS = $(SUBDIRS) - -# List of subdirectories in the build tree that must exist. -# This is used to force build failures in existing trees when -# a new directory is added. -# The format here is for the `case' shell command. -REQUIRED_SUBDIRS = $(GNULIB_BUILDDIR) | $(LIBIBERTY_BUILDDIR) - -FLAGS_TO_PASS = \ - "prefix=$(prefix)" \ - "exec_prefix=$(exec_prefix)" \ - "infodir=$(infodir)" \ - "datarootdir=$(datarootdir)" \ - "docdir=$(docdir)" \ - "htmldir=$(htmldir)" \ - "pdfdir=$(pdfdir)" \ - "libdir=$(libdir)" \ - "mandir=$(mandir)" \ - "datadir=$(datadir)" \ - "includedir=$(includedir)" \ - "against=$(against)" \ - "DESTDIR=$(DESTDIR)" \ - "AR=$(AR)" \ - "AR_FLAGS=$(AR_FLAGS)" \ - "CC=$(CC)" \ - "CFLAGS=$(CFLAGS)" \ - "CXX=$(CXX)" \ - "CXXFLAGS=$(CXXFLAGS)" \ - "DLLTOOL=$(DLLTOOL)" \ - "LDFLAGS=$(LDFLAGS)" \ - "RANLIB=$(RANLIB)" \ - "MAKEINFO=$(MAKEINFO)" \ - "MAKEHTML=$(MAKEHTML)" \ - "MAKEHTMLFLAGS=$(MAKEHTMLFLAGS)" \ - "INSTALL=$(INSTALL)" \ - "INSTALL_PROGRAM=$(INSTALL_PROGRAM)" \ - "INSTALL_DATA=$(INSTALL_DATA)" \ - "RUNTEST=$(RUNTEST)" \ - "RUNTESTFLAGS=$(RUNTESTFLAGS)" - -# All generated files which can be included by another file. -generated_files = config.h $(GNULIB_H) - -all: gdbserver$(EXEEXT) gdbreplay$(EXEEXT) $(extra_libraries) - @$(MAKE) $(FLAGS_TO_PASS) DO=$@ "DODIRS=$(SUBDIRS)" subdir_do - -# Traditionally "install" depends on "all". But it may be useful -# not to; for example, if the user has made some trivial change to a -# source file and doesn't care about rebuilding or just wants to save the -# time it takes for make to check that all is up to date. -# install-only is intended to address that need. -install: all - @$(MAKE) $(FLAGS_TO_PASS) install-only - -install-only: - n=`echo gdbserver | sed '$(program_transform_name)'`; \ - if [ x$$n = x ]; then n=gdbserver; else true; fi; \ - if [ x"$(IPA_DEPFILES)" != x ]; then \ - $(SHELL) $(srcdir)/../../mkinstalldirs $(DESTDIR)$(libdir); \ - $(INSTALL_PROGRAM) $(IPA_LIB) $(DESTDIR)$(libdir)/$(IPA_LIB); \ - fi; \ - $(SHELL) $(srcdir)/../../mkinstalldirs $(DESTDIR)$(bindir); \ - $(INSTALL_PROGRAM) gdbserver$(EXEEXT) $(DESTDIR)$(bindir)/$$n$(EXEEXT) - # Note that we run install and not install-only, as the latter - # is not part of GNU standards and in particular not provided - # in libiberty. - @$(MAKE) $(FLAGS_TO_PASS) DO=install "DODIRS=$(SUBDIRS)" subdir_do - -uninstall: force - n=`echo gdbserver | sed '$(program_transform_name)'`; \ - if [ x$$n = x ]; then n=gdbserver; else true; fi; \ - rm -f $(DESTDIR)/$(bindir)/$$n$(EXEEXT) $(DESTDIR)$(man1dir)/$$n.1 - @$(MAKE) $(FLAGS_TO_PASS) DO=$@ "DODIRS=$(SUBDIRS)" subdir_do - -installcheck: -check: -info dvi pdf: -install-info: -install-pdf: -html: -install-html: -clean-info: force - @$(MAKE) $(FLAGS_TO_PASS) DO=$@ "DODIRS=$(SUBDIRS)" subdir_do - -gdbserver$(EXEEXT): $(sort $(OBS)) ${CDEPS} $(LIBGNU) $(LIBIBERTY) - $(SILENCE) rm -f gdbserver$(EXEEXT) - $(ECHO_CXXLD) $(CC_LD) $(INTERNAL_CFLAGS) $(INTERNAL_LDFLAGS) \ - -o gdbserver$(EXEEXT) $(OBS) $(LIBGNU) $(LIBIBERTY) \ - $(GDBSERVER_LIBS) $(XM_CLIBS) - -$(LIBGNU) $(LIBIBERTY) $(GNULIB_H): all-lib -all-lib: $(GNULIB_BUILDDIR)/Makefile $(LIBIBERTY_BUILDDIR)/Makefile - @$(MAKE) $(FLAGS_TO_PASS) DO=all DODIRS="$(SUBDIRS)" subdir_do -.PHONY: all-lib - -gdbreplay$(EXEEXT): $(sort $(GDBREPLAY_OBS)) $(LIBGNU) $(LIBIBERTY) - $(SILENCE) rm -f gdbreplay$(EXEEXT) - $(ECHO_CXXLD) $(CC_LD) $(INTERNAL_CFLAGS) $(INTERNAL_LDFLAGS) \ - -o gdbreplay$(EXEEXT) $(GDBREPLAY_OBS) $(XM_CLIBS) $(LIBGNU) \ - $(LIBIBERTY) - -IPA_OBJS = \ - alloc-ipa.o \ - ax-ipa.o \ - gdbsupport/common-utils-ipa.o \ - gdbsupport/errors-ipa.o \ - gdbsupport/format-ipa.o \ - gdbsupport/print-utils-ipa.o \ - gdbsupport/rsp-low-ipa.o \ - gdbsupport/safe-strerror-ipa.o \ - gdbsupport/tdesc-ipa.o \ - regcache-ipa.o \ - remote-utils-ipa.o \ - tdesc-ipa.o \ - tracepoint-ipa.o \ - utils-ipa.o \ - ${IPA_DEPFILES} - -IPA_LIB = libinproctrace.so - -$(IPA_LIB): $(sort $(IPA_OBJS)) ${CDEPS} - $(SILENCE) rm -f $(IPA_LIB) - $(ECHO_CXXLD) $(CC_LD) -shared -fPIC -Wl,--soname=$(IPA_LIB) \ - -Wl,--no-undefined $(INTERNAL_CFLAGS) $(INTERNAL_LDFLAGS) \ - -o $(IPA_LIB) ${IPA_OBJS} -ldl -pthread - -# Put the proper machine-specific files first, so M-. on a machine -# specific routine gets the one for the correct machine. -# The xyzzy stuff below deals with empty DEPFILES -TAGS: ${TAGFILES} - etags `find ${srcdir}/../config -name $(DEPRECATED_TM_FILE) -print` \ - `find ${srcdir}/../config -name ${XM_FILE} -print` \ - `find ${srcdir}/../config -name ${NAT_FILE} -print` \ - `for i in yzzy ${DEPFILES}; do \ - if [ x$$i != xyzzy ]; then \ - echo ${srcdir}/$$i | sed -e 's/\.o$$/\.c/' ; \ - fi; \ - done` \ - ${TAGFILES} -tags: TAGS - -clean: - rm -f *.o ${ADD_FILES} *~ - rm -f gdbserver$(EXEEXT) gdbreplay$(EXEEXT) core make.log - rm -f $(IPA_LIB) - rm -f *-generated.c - rm -f stamp-xml - rm -f $(DEPDIR)/*.Po - for i in $(CONFIG_SRC_SUBDIR); do \ - rm -f $$i/*.o; \ - rm -f $$i/$(DEPDIR)/*; \ - done - @$(MAKE) $(FLAGS_TO_PASS) DO=$@ "DODIRS=$(SUBDIRS)" subdir_do - -maintainer-clean realclean distclean: clean - @$(MAKE) $(FLAGS_TO_PASS) DO=$@ "DODIRS=$(SUBDIRS)" subdir_do - rm -rf $(GNULIB_BUILDDIR) - rm -f Makefile config.status config.h stamp-h config.log - rm -f Makefile - for i in $(CONFIG_SRC_SUBDIR); do \ - rmdir $$i/$(DEPDIR); \ - done - -subdir_do: force - @for i in $(DODIRS); do \ - case $$i in \ - $(REQUIRED_SUBDIRS)) \ - if [ ! -f ./$$i/Makefile ] ; then \ - echo "Missing $$i/Makefile" >&2 ; \ - exit 1 ; \ - fi ;; \ - esac ; \ - if [ -f ./$$i/Makefile ] ; then \ - if (cd ./$$i; \ - $(MAKE) $(FLAGS_TO_PASS) $(DO)) ; then true ; \ - else exit 1 ; fi ; \ - else true ; fi ; \ - done - -config.h: stamp-h ; @true -stamp-h: config.in config.status - $(SHELL) ./config.status config.h - -Makefile: Makefile.in config.status - $(SHELL) ./config.status $@ - -$(GNULIB_BUILDDIR)/Makefile: $(srcdir)/../../gnulib/Makefile.in config.status - @cd $(GNULIB_BUILDDIR); CONFIG_FILES="Makefile" \ - CONFIG_COMMANDS="depfiles" \ - CONFIG_HEADERS= \ - CONFIG_LINKS= \ - $(SHELL) config.status - -config.status: configure configure.srv $(srcdir)/../../bfd/development.sh - $(SHELL) ./config.status --recheck - -# automatic rebuilding in automake-generated Makefiles requires -# this rule in the toplevel Makefile, which, with GNU make, causes -# the desired updates through the implicit regeneration of the Makefile -# and all of its prerequisites. -am--refresh: - @: - -force: - -version-generated.c: Makefile $(srcdir)/../version.in $(srcdir)/../../bfd/version.h $(srcdir)/../gdbsupport/create-version.sh - $(ECHO_GEN) $(SHELL) $(srcdir)/../gdbsupport/create-version.sh $(srcdir)/.. \ - $(host_alias) $(target_alias) $@ - -xml-builtin-generated.c: stamp-xml; @true -stamp-xml: $(XML_DIR)/feature_to_c.sh Makefile $(XML_FILES) - $(SILENCE) rm -f xml-builtin.tmp - $(ECHO_GEN_XML_BUILTIN_GENERATED) $(SHELL) $(XML_DIR)/feature_to_c.sh \ - xml-builtin.tmp $(XML_FILES) - $(SILENCE) $(SHELL) $(srcdir)/../../move-if-change xml-builtin.tmp xml-builtin-generated.c - $(SILENCE) echo stamp > stamp-xml - -.PRECIOUS: xml-builtin.c - -# GNU Make has an annoying habit of putting *all* the Makefile variables -# into the environment, unless you include this target as a circumvention. -# Rumor is that this will be fixed (and this target can be removed) -# in GNU Make 4.0. -.NOEXPORT: - -# GNU Make 3.63 has a different problem: it keeps tacking command line -# overrides onto the definition of $(MAKE). This variable setting -# will remove them. -MAKEOVERRIDES = - -regdat_sh = $(srcdir)/../regformats/regdat.sh - -UST_CFLAGS = $(ustinc) -DCONFIG_UST_GDB_INTEGRATION - -# Undo gnulib replacements for the IPA shared library build. -# The gnulib headers are still needed, but gnulib is not linked -# into the IPA lib so replacement apis don't work. -UNDO_GNULIB_CFLAGS = -Drpl_strerror_r=strerror_r - -# Note, we only build the IPA if -fvisibility=hidden is supported in -# the first place. -IPAGENT_CFLAGS = $(INTERNAL_CFLAGS) $(UST_CFLAGS) \ - $(UNDO_GNULIB_CFLAGS) \ - -fPIC -DIN_PROCESS_AGENT \ - -fvisibility=hidden - -IPAGENT_COMPILE = $(ECHO_CXX) $(COMPILE.pre) $(IPAGENT_CFLAGS) $(COMPILE.post) - -# Rules for special cases. - -ax-ipa.o: ax.c - $(IPAGENT_COMPILE) $(WARN_CFLAGS_NO_FORMAT) $< - $(POSTCOMPILE) - -ax.o: ax.c - $(COMPILE) $(WARN_CFLAGS_NO_FORMAT) $< - $(POSTCOMPILE) - -alloc-ipa.o: ../alloc.c - $(IPAGENT_COMPILE) $(WARN_CFLAGS_NO_FORMAT) $< - $(POSTCOMPILE) - -# Rules for objects that go in the in-process agent. - -arch/%-ipa.o: ../arch/%.c - $(IPAGENT_COMPILE) $< - $(POSTCOMPILE) - -gdbsupport/%-ipa.o: ../gdbsupport/%.c - $(IPAGENT_COMPILE) $< - $(POSTCOMPILE) - -%-ipa.o: %-generated.c - $(IPAGENT_COMPILE) $< - $(POSTCOMPILE) - -%-ipa.o: %.c - $(IPAGENT_COMPILE) $< - $(POSTCOMPILE) - -# Note: Between two matching pattern rules, GNU Make 3.81 chooses the first one. -# Therefore, this one needs to be before "%.o: %.c" for it to be considered for -# files such as linux-amd64-ipa.o generated from linux-amd64-ipa.c. -# -# Later versions of GNU Make choose the rule with the shortest stem, so it would -# work in any order. - -%-ipa.o: %-ipa.c - $(IPAGENT_COMPILE) $< - $(POSTCOMPILE) - -# Rules for objects that go in the gdbserver binary. - -arch/%.o: ../arch/%.c - $(COMPILE) $< - $(POSTCOMPILE) - -gdbsupport/%.o: ../gdbsupport/%.c - $(COMPILE) $< - $(POSTCOMPILE) - -%.o: %-generated.c - $(COMPILE) $< - $(POSTCOMPILE) - -%.o: %.c - $(COMPILE) $< - $(POSTCOMPILE) - -%.o: ../nat/%.c - $(COMPILE) $< - $(POSTCOMPILE) - -%.o: ../target/%.c - $(COMPILE) $< - $(POSTCOMPILE) - -%.o: ../%.c - $(COMPILE) $< - $(POSTCOMPILE) - -# Rules for register format descriptions. Suffix destination files with -# -generated to identify and clean them easily. - -%-generated.c: ../regformats/%.dat | $(regdat_sh) - $(ECHO_REGDAT) $(SHELL) $(regdat_sh) $< $@ - -%-generated.c: ../regformats/arm/%.dat | $(regdat_sh) - $(ECHO_REGDAT) $(SHELL) $(regdat_sh) $< $@ - -%-generated.c: ../regformats/i386/%.dat | $(regdat_sh) - $(ECHO_REGDAT) $(SHELL) $(regdat_sh) $< $@ - -%-generated.c: ../regformats/rs6000/%.dat | $(regdat_sh) - $(ECHO_REGDAT) $(SHELL) $(regdat_sh) $< $@ - -# -# Dependency tracking. -# - -ifeq ($(DEPMODE),depmode=gcc3) -# Note that we put the dependencies into a .Tpo file, then move them -# into place if the compile succeeds. We need this because gcc does -# not atomically write the dependency output file. -override COMPILE.post = -c -o $@ -MT $@ -MMD -MP \ - -MF $(@D)/$(DEPDIR)/$(basename $(@F)).Tpo -override POSTCOMPILE = @mv $(@D)/$(DEPDIR)/$(basename $(@F)).Tpo \ - $(@D)/$(DEPDIR)/$(basename $(@F)).Po -else -override COMPILE.pre = source='$<' object='$@' libtool=no \ - DEPDIR=$(DEPDIR) $(DEPMODE) $(depcomp) \ - $(CXX) -x c++ $(CXX_DIALECT) -# depcomp handles atomicity for us, so we don't need a postcompile -# step. -override POSTCOMPILE = -endif - -# A list of all the objects we might care about in this build, for -# dependency tracking. -all_object_files = $(OBS) $(GDBREPLAY_OBS) $(IPA_OBJS) - -# Ensure that generated files are created early. Use order-only -# dependencies if available. They require GNU make 3.80 or newer, -# and the .VARIABLES variable was introduced at the same time. -ifdef .VARIABLES -$(all_object_files): | $(generated_files) -else -$(all_object_files) : $(generated_files) -endif - -# All the .deps files to include. -all_deps_files = $(foreach dep,$(patsubst %.o,%.Po,$(all_object_files)),\ - $(dir $(dep))/$(DEPDIR)/$(notdir $(dep))) - -# Dependencies. --include $(all_deps_files) - -# Disable implicit make rules. -include $(srcdir)/../disable-implicit-rules.mk - -# Do not delete intermediate files (e.g. *-generated.c). -.SECONDARY: - -# This is the end of "Makefile.in". diff -Nru gdb-9.1/gdb/gdbserver/mem-break.c gdb-10.2/gdb/gdbserver/mem-break.c --- gdb-9.1/gdb/gdbserver/mem-break.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/mem-break.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,2237 +0,0 @@ -/* Memory breakpoint operations for the remote server for GDB. - Copyright (C) 2002-2020 Free Software Foundation, Inc. - - Contributed by MontaVista Software. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "server.h" -#include "regcache.h" -#include "ax.h" - -#define MAX_BREAKPOINT_LEN 8 - -/* Helper macro used in loops that append multiple items to a singly-linked - list instead of inserting items at the head of the list, as, say, in the - breakpoint lists. LISTPP is a pointer to the pointer that is the head of - the new list. ITEMP is a pointer to the item to be added to the list. - TAILP must be defined to be the same type as ITEMP, and initialized to - NULL. */ - -#define APPEND_TO_LIST(listpp, itemp, tailp) \ - do \ - { \ - if ((tailp) == NULL) \ - *(listpp) = (itemp); \ - else \ - (tailp)->next = (itemp); \ - (tailp) = (itemp); \ - } \ - while (0) - -/* GDB will never try to install multiple breakpoints at the same - address. However, we can see GDB requesting to insert a breakpoint - at an address is had already inserted one previously in a few - situations. - - - The RSP documentation on Z packets says that to avoid potential - problems with duplicate packets, the operations should be - implemented in an idempotent way. - - - A breakpoint is set at ADDR, an address in a shared library. - Then the shared library is unloaded. And then another, unrelated, - breakpoint at ADDR is set. There is not breakpoint removal request - between the first and the second breakpoint. - - - When GDB wants to update the target-side breakpoint conditions or - commands, it re-inserts the breakpoint, with updated - conditions/commands associated. - - Also, we need to keep track of internal breakpoints too, so we do - need to be able to install multiple breakpoints at the same address - transparently. - - We keep track of two different, and closely related structures. A - raw breakpoint, which manages the low level, close to the metal - aspect of a breakpoint. It holds the breakpoint address, and for - software breakpoints, a buffer holding a copy of the instructions - that would be in memory had not been a breakpoint there (we call - that the shadow memory of the breakpoint). We occasionally need to - temporarilly uninsert a breakpoint without the client knowing about - it (e.g., to step over an internal breakpoint), so we keep an - `inserted' state associated with this low level breakpoint - structure. There can only be one such object for a given address. - Then, we have (a bit higher level) breakpoints. This structure - holds a callback to be called whenever a breakpoint is hit, a - high-level type, and a link to a low level raw breakpoint. There - can be many high-level breakpoints at the same address, and all of - them will point to the same raw breakpoint, which is reference - counted. */ - -/* The low level, physical, raw breakpoint. */ -struct raw_breakpoint -{ - struct raw_breakpoint *next; - - /* The low level type of the breakpoint (software breakpoint, - watchpoint, etc.) */ - enum raw_bkpt_type raw_type; - - /* A reference count. Each high level breakpoint referencing this - raw breakpoint accounts for one reference. */ - int refcount; - - /* The breakpoint's insertion address. There can only be one raw - breakpoint for a given PC. */ - CORE_ADDR pc; - - /* The breakpoint's kind. This is target specific. Most - architectures only use one specific instruction for breakpoints, while - others may use more than one. E.g., on ARM, we need to use different - breakpoint instructions on Thumb, Thumb-2, and ARM code. Likewise for - hardware breakpoints -- some architectures (including ARM) need to - setup debug registers differently depending on mode. */ - int kind; - - /* The breakpoint's shadow memory. */ - unsigned char old_data[MAX_BREAKPOINT_LEN]; - - /* Positive if this breakpoint is currently inserted in the - inferior. Negative if it was, but we've detected that it's now - gone. Zero if not inserted. */ - int inserted; -}; - -/* The type of a breakpoint. */ -enum bkpt_type - { - /* A GDB breakpoint, requested with a Z0 packet. */ - gdb_breakpoint_Z0, - - /* A GDB hardware breakpoint, requested with a Z1 packet. */ - gdb_breakpoint_Z1, - - /* A GDB write watchpoint, requested with a Z2 packet. */ - gdb_breakpoint_Z2, - - /* A GDB read watchpoint, requested with a Z3 packet. */ - gdb_breakpoint_Z3, - - /* A GDB access watchpoint, requested with a Z4 packet. */ - gdb_breakpoint_Z4, - - /* A software single-step breakpoint. */ - single_step_breakpoint, - - /* Any other breakpoint type that doesn't require specific - treatment goes here. E.g., an event breakpoint. */ - other_breakpoint, - }; - -struct point_cond_list -{ - /* Pointer to the agent expression that is the breakpoint's - conditional. */ - struct agent_expr *cond; - - /* Pointer to the next condition. */ - struct point_cond_list *next; -}; - -struct point_command_list -{ - /* Pointer to the agent expression that is the breakpoint's - commands. */ - struct agent_expr *cmd; - - /* Flag that is true if this command should run even while GDB is - disconnected. */ - int persistence; - - /* Pointer to the next command. */ - struct point_command_list *next; -}; - -/* A high level (in gdbserver's perspective) breakpoint. */ -struct breakpoint -{ - struct breakpoint *next; - - /* The breakpoint's type. */ - enum bkpt_type type; - - /* Link to this breakpoint's raw breakpoint. This is always - non-NULL. */ - struct raw_breakpoint *raw; -}; - -/* Breakpoint requested by GDB. */ - -struct gdb_breakpoint -{ - struct breakpoint base; - - /* Pointer to the condition list that should be evaluated on - the target or NULL if the breakpoint is unconditional or - if GDB doesn't want us to evaluate the conditionals on the - target's side. */ - struct point_cond_list *cond_list; - - /* Point to the list of commands to run when this is hit. */ - struct point_command_list *command_list; -}; - -/* Breakpoint used by GDBserver. */ - -struct other_breakpoint -{ - struct breakpoint base; - - /* Function to call when we hit this breakpoint. If it returns 1, - the breakpoint shall be deleted; 0 or if this callback is NULL, - it will be left inserted. */ - int (*handler) (CORE_ADDR); -}; - -/* Breakpoint for single step. */ - -struct single_step_breakpoint -{ - struct breakpoint base; - - /* Thread the reinsert breakpoint belongs to. */ - ptid_t ptid; -}; - -/* Return the breakpoint size from its kind. */ - -static int -bp_size (struct raw_breakpoint *bp) -{ - int size = 0; - - the_target->sw_breakpoint_from_kind (bp->kind, &size); - return size; -} - -/* Return the breakpoint opcode from its kind. */ - -static const gdb_byte * -bp_opcode (struct raw_breakpoint *bp) -{ - int size = 0; - - return the_target->sw_breakpoint_from_kind (bp->kind, &size); -} - -/* See mem-break.h. */ - -enum target_hw_bp_type -raw_bkpt_type_to_target_hw_bp_type (enum raw_bkpt_type raw_type) -{ - switch (raw_type) - { - case raw_bkpt_type_hw: - return hw_execute; - case raw_bkpt_type_write_wp: - return hw_write; - case raw_bkpt_type_read_wp: - return hw_read; - case raw_bkpt_type_access_wp: - return hw_access; - default: - internal_error (__FILE__, __LINE__, - "bad raw breakpoint type %d", (int) raw_type); - } -} - -/* See mem-break.h. */ - -static enum bkpt_type -Z_packet_to_bkpt_type (char z_type) -{ - gdb_assert ('0' <= z_type && z_type <= '4'); - - return (enum bkpt_type) (gdb_breakpoint_Z0 + (z_type - '0')); -} - -/* See mem-break.h. */ - -enum raw_bkpt_type -Z_packet_to_raw_bkpt_type (char z_type) -{ - switch (z_type) - { - case Z_PACKET_SW_BP: - return raw_bkpt_type_sw; - case Z_PACKET_HW_BP: - return raw_bkpt_type_hw; - case Z_PACKET_WRITE_WP: - return raw_bkpt_type_write_wp; - case Z_PACKET_READ_WP: - return raw_bkpt_type_read_wp; - case Z_PACKET_ACCESS_WP: - return raw_bkpt_type_access_wp; - default: - gdb_assert_not_reached ("unhandled Z packet type."); - } -} - -/* Return true if breakpoint TYPE is a GDB breakpoint. */ - -static int -is_gdb_breakpoint (enum bkpt_type type) -{ - return (type == gdb_breakpoint_Z0 - || type == gdb_breakpoint_Z1 - || type == gdb_breakpoint_Z2 - || type == gdb_breakpoint_Z3 - || type == gdb_breakpoint_Z4); -} - -bool -any_persistent_commands (process_info *proc) -{ - struct breakpoint *bp; - struct point_command_list *cl; - - for (bp = proc->breakpoints; bp != NULL; bp = bp->next) - { - if (is_gdb_breakpoint (bp->type)) - { - struct gdb_breakpoint *gdb_bp = (struct gdb_breakpoint *) bp; - - for (cl = gdb_bp->command_list; cl != NULL; cl = cl->next) - if (cl->persistence) - return true; - } - } - - return false; -} - -/* Find low-level breakpoint of type TYPE at address ADDR that is not - insert-disabled. Returns NULL if not found. */ - -static struct raw_breakpoint * -find_enabled_raw_code_breakpoint_at (CORE_ADDR addr, enum raw_bkpt_type type) -{ - struct process_info *proc = current_process (); - struct raw_breakpoint *bp; - - for (bp = proc->raw_breakpoints; bp != NULL; bp = bp->next) - if (bp->pc == addr - && bp->raw_type == type - && bp->inserted >= 0) - return bp; - - return NULL; -} - -/* Find low-level breakpoint of type TYPE at address ADDR. Returns - NULL if not found. */ - -static struct raw_breakpoint * -find_raw_breakpoint_at (CORE_ADDR addr, enum raw_bkpt_type type, int kind) -{ - struct process_info *proc = current_process (); - struct raw_breakpoint *bp; - - for (bp = proc->raw_breakpoints; bp != NULL; bp = bp->next) - if (bp->pc == addr && bp->raw_type == type && bp->kind == kind) - return bp; - - return NULL; -} - -/* See mem-break.h. */ - -int -insert_memory_breakpoint (struct raw_breakpoint *bp) -{ - unsigned char buf[MAX_BREAKPOINT_LEN]; - int err; - - /* Note that there can be fast tracepoint jumps installed in the - same memory range, so to get at the original memory, we need to - use read_inferior_memory, which masks those out. */ - err = read_inferior_memory (bp->pc, buf, bp_size (bp)); - if (err != 0) - { - if (debug_threads) - debug_printf ("Failed to read shadow memory of" - " breakpoint at 0x%s (%s).\n", - paddress (bp->pc), safe_strerror (err)); - } - else - { - memcpy (bp->old_data, buf, bp_size (bp)); - - err = (*the_target->write_memory) (bp->pc, bp_opcode (bp), - bp_size (bp)); - if (err != 0) - { - if (debug_threads) - debug_printf ("Failed to insert breakpoint at 0x%s (%s).\n", - paddress (bp->pc), safe_strerror (err)); - } - } - return err != 0 ? -1 : 0; -} - -/* See mem-break.h */ - -int -remove_memory_breakpoint (struct raw_breakpoint *bp) -{ - unsigned char buf[MAX_BREAKPOINT_LEN]; - int err; - - /* Since there can be trap breakpoints inserted in the same address - range, we use `target_write_memory', which takes care of - layering breakpoints on top of fast tracepoints, and on top of - the buffer we pass it. This works because the caller has already - either unlinked the breakpoint or marked it uninserted. Also - note that we need to pass the current shadow contents, because - target_write_memory updates any shadow memory with what we pass - here, and we want that to be a nop. */ - memcpy (buf, bp->old_data, bp_size (bp)); - err = target_write_memory (bp->pc, buf, bp_size (bp)); - if (err != 0) - { - if (debug_threads) - debug_printf ("Failed to uninsert raw breakpoint " - "at 0x%s (%s) while deleting it.\n", - paddress (bp->pc), safe_strerror (err)); - } - return err != 0 ? -1 : 0; -} - -/* Set a RAW breakpoint of type TYPE and kind KIND at WHERE. On - success, a pointer to the new breakpoint is returned. On failure, - returns NULL and writes the error code to *ERR. */ - -static struct raw_breakpoint * -set_raw_breakpoint_at (enum raw_bkpt_type type, CORE_ADDR where, int kind, - int *err) -{ - struct process_info *proc = current_process (); - struct raw_breakpoint *bp; - - if (type == raw_bkpt_type_sw || type == raw_bkpt_type_hw) - { - bp = find_enabled_raw_code_breakpoint_at (where, type); - if (bp != NULL && bp->kind != kind) - { - /* A different kind than previously seen. The previous - breakpoint must be gone then. */ - if (debug_threads) - debug_printf ("Inconsistent breakpoint kind? Was %d, now %d.\n", - bp->kind, kind); - bp->inserted = -1; - bp = NULL; - } - } - else - bp = find_raw_breakpoint_at (where, type, kind); - - gdb::unique_xmalloc_ptr<struct raw_breakpoint> bp_holder; - if (bp == NULL) - { - bp_holder.reset (XCNEW (struct raw_breakpoint)); - bp = bp_holder.get (); - bp->pc = where; - bp->kind = kind; - bp->raw_type = type; - } - - if (!bp->inserted) - { - *err = the_target->insert_point (bp->raw_type, bp->pc, bp->kind, bp); - if (*err != 0) - { - if (debug_threads) - debug_printf ("Failed to insert breakpoint at 0x%s (%d).\n", - paddress (where), *err); - - return NULL; - } - - bp->inserted = 1; - } - - /* If the breakpoint was allocated above, we know we want to keep it - now. */ - bp_holder.release (); - - /* Link the breakpoint in, if this is the first reference. */ - if (++bp->refcount == 1) - { - bp->next = proc->raw_breakpoints; - proc->raw_breakpoints = bp; - } - return bp; -} - -/* Notice that breakpoint traps are always installed on top of fast - tracepoint jumps. This is even if the fast tracepoint is installed - at a later time compared to when the breakpoint was installed. - This means that a stopping breakpoint or tracepoint has higher - "priority". In turn, this allows having fast and slow tracepoints - (and breakpoints) at the same address behave correctly. */ - - -/* A fast tracepoint jump. */ - -struct fast_tracepoint_jump -{ - struct fast_tracepoint_jump *next; - - /* A reference count. GDB can install more than one fast tracepoint - at the same address (each with its own action list, for - example). */ - int refcount; - - /* The fast tracepoint's insertion address. There can only be one - of these for a given PC. */ - CORE_ADDR pc; - - /* Non-zero if this fast tracepoint jump is currently inserted in - the inferior. */ - int inserted; - - /* The length of the jump instruction. */ - int length; - - /* A poor-man's flexible array member, holding both the jump - instruction to insert, and a copy of the instruction that would - be in memory had not been a jump there (the shadow memory of the - tracepoint jump). */ - unsigned char insn_and_shadow[0]; -}; - -/* Fast tracepoint FP's jump instruction to insert. */ -#define fast_tracepoint_jump_insn(fp) \ - ((fp)->insn_and_shadow + 0) - -/* The shadow memory of fast tracepoint jump FP. */ -#define fast_tracepoint_jump_shadow(fp) \ - ((fp)->insn_and_shadow + (fp)->length) - - -/* Return the fast tracepoint jump set at WHERE. */ - -static struct fast_tracepoint_jump * -find_fast_tracepoint_jump_at (CORE_ADDR where) -{ - struct process_info *proc = current_process (); - struct fast_tracepoint_jump *jp; - - for (jp = proc->fast_tracepoint_jumps; jp != NULL; jp = jp->next) - if (jp->pc == where) - return jp; - - return NULL; -} - -int -fast_tracepoint_jump_here (CORE_ADDR where) -{ - struct fast_tracepoint_jump *jp = find_fast_tracepoint_jump_at (where); - - return (jp != NULL); -} - -int -delete_fast_tracepoint_jump (struct fast_tracepoint_jump *todel) -{ - struct fast_tracepoint_jump *bp, **bp_link; - int ret; - struct process_info *proc = current_process (); - - bp = proc->fast_tracepoint_jumps; - bp_link = &proc->fast_tracepoint_jumps; - - while (bp) - { - if (bp == todel) - { - if (--bp->refcount == 0) - { - struct fast_tracepoint_jump *prev_bp_link = *bp_link; - unsigned char *buf; - - /* Unlink it. */ - *bp_link = bp->next; - - /* Since there can be breakpoints inserted in the same - address range, we use `target_write_memory', which - takes care of layering breakpoints on top of fast - tracepoints, and on top of the buffer we pass it. - This works because we've already unlinked the fast - tracepoint jump above. Also note that we need to - pass the current shadow contents, because - target_write_memory updates any shadow memory with - what we pass here, and we want that to be a nop. */ - buf = (unsigned char *) alloca (bp->length); - memcpy (buf, fast_tracepoint_jump_shadow (bp), bp->length); - ret = target_write_memory (bp->pc, buf, bp->length); - if (ret != 0) - { - /* Something went wrong, relink the jump. */ - *bp_link = prev_bp_link; - - if (debug_threads) - debug_printf ("Failed to uninsert fast tracepoint jump " - "at 0x%s (%s) while deleting it.\n", - paddress (bp->pc), safe_strerror (ret)); - return ret; - } - - free (bp); - } - - return 0; - } - else - { - bp_link = &bp->next; - bp = *bp_link; - } - } - - warning ("Could not find fast tracepoint jump in list."); - return ENOENT; -} - -void -inc_ref_fast_tracepoint_jump (struct fast_tracepoint_jump *jp) -{ - jp->refcount++; -} - -struct fast_tracepoint_jump * -set_fast_tracepoint_jump (CORE_ADDR where, - unsigned char *insn, ULONGEST length) -{ - struct process_info *proc = current_process (); - struct fast_tracepoint_jump *jp; - int err; - unsigned char *buf; - - /* We refcount fast tracepoint jumps. Check if we already know - about a jump at this address. */ - jp = find_fast_tracepoint_jump_at (where); - if (jp != NULL) - { - jp->refcount++; - return jp; - } - - /* We don't, so create a new object. Double the length, because the - flexible array member holds both the jump insn, and the - shadow. */ - jp = (struct fast_tracepoint_jump *) xcalloc (1, sizeof (*jp) + (length * 2)); - jp->pc = where; - jp->length = length; - memcpy (fast_tracepoint_jump_insn (jp), insn, length); - jp->refcount = 1; - buf = (unsigned char *) alloca (length); - - /* Note that there can be trap breakpoints inserted in the same - address range. To access the original memory contents, we use - `read_inferior_memory', which masks out breakpoints. */ - err = read_inferior_memory (where, buf, length); - if (err != 0) - { - if (debug_threads) - debug_printf ("Failed to read shadow memory of" - " fast tracepoint at 0x%s (%s).\n", - paddress (where), safe_strerror (err)); - free (jp); - return NULL; - } - memcpy (fast_tracepoint_jump_shadow (jp), buf, length); - - /* Link the jump in. */ - jp->inserted = 1; - jp->next = proc->fast_tracepoint_jumps; - proc->fast_tracepoint_jumps = jp; - - /* Since there can be trap breakpoints inserted in the same address - range, we use use `target_write_memory', which takes care of - layering breakpoints on top of fast tracepoints, on top of the - buffer we pass it. This works because we've already linked in - the fast tracepoint jump above. Also note that we need to pass - the current shadow contents, because target_write_memory - updates any shadow memory with what we pass here, and we want - that to be a nop. */ - err = target_write_memory (where, buf, length); - if (err != 0) - { - if (debug_threads) - debug_printf ("Failed to insert fast tracepoint jump at 0x%s (%s).\n", - paddress (where), safe_strerror (err)); - - /* Unlink it. */ - proc->fast_tracepoint_jumps = jp->next; - free (jp); - - return NULL; - } - - return jp; -} - -void -uninsert_fast_tracepoint_jumps_at (CORE_ADDR pc) -{ - struct fast_tracepoint_jump *jp; - int err; - - jp = find_fast_tracepoint_jump_at (pc); - if (jp == NULL) - { - /* This can happen when we remove all breakpoints while handling - a step-over. */ - if (debug_threads) - debug_printf ("Could not find fast tracepoint jump at 0x%s " - "in list (uninserting).\n", - paddress (pc)); - return; - } - - if (jp->inserted) - { - unsigned char *buf; - - jp->inserted = 0; - - /* Since there can be trap breakpoints inserted in the same - address range, we use use `target_write_memory', which - takes care of layering breakpoints on top of fast - tracepoints, and on top of the buffer we pass it. This works - because we've already marked the fast tracepoint fast - tracepoint jump uninserted above. Also note that we need to - pass the current shadow contents, because - target_write_memory updates any shadow memory with what we - pass here, and we want that to be a nop. */ - buf = (unsigned char *) alloca (jp->length); - memcpy (buf, fast_tracepoint_jump_shadow (jp), jp->length); - err = target_write_memory (jp->pc, buf, jp->length); - if (err != 0) - { - jp->inserted = 1; - - if (debug_threads) - debug_printf ("Failed to uninsert fast tracepoint jump at" - " 0x%s (%s).\n", - paddress (pc), safe_strerror (err)); - } - } -} - -void -reinsert_fast_tracepoint_jumps_at (CORE_ADDR where) -{ - struct fast_tracepoint_jump *jp; - int err; - unsigned char *buf; - - jp = find_fast_tracepoint_jump_at (where); - if (jp == NULL) - { - /* This can happen when we remove breakpoints when a tracepoint - hit causes a tracing stop, while handling a step-over. */ - if (debug_threads) - debug_printf ("Could not find fast tracepoint jump at 0x%s " - "in list (reinserting).\n", - paddress (where)); - return; - } - - if (jp->inserted) - error ("Jump already inserted at reinsert time."); - - jp->inserted = 1; - - /* Since there can be trap breakpoints inserted in the same address - range, we use `target_write_memory', which takes care of - layering breakpoints on top of fast tracepoints, and on top of - the buffer we pass it. This works because we've already marked - the fast tracepoint jump inserted above. Also note that we need - to pass the current shadow contents, because - target_write_memory updates any shadow memory with what we pass - here, and we want that to be a nop. */ - buf = (unsigned char *) alloca (jp->length); - memcpy (buf, fast_tracepoint_jump_shadow (jp), jp->length); - err = target_write_memory (where, buf, jp->length); - if (err != 0) - { - jp->inserted = 0; - - if (debug_threads) - debug_printf ("Failed to reinsert fast tracepoint jump at" - " 0x%s (%s).\n", - paddress (where), safe_strerror (err)); - } -} - -/* Set a high-level breakpoint of type TYPE, with low level type - RAW_TYPE and kind KIND, at WHERE. On success, a pointer to the new - breakpoint is returned. On failure, returns NULL and writes the - error code to *ERR. HANDLER is called when the breakpoint is hit. - HANDLER should return 1 if the breakpoint should be deleted, 0 - otherwise. */ - -static struct breakpoint * -set_breakpoint (enum bkpt_type type, enum raw_bkpt_type raw_type, - CORE_ADDR where, int kind, - int (*handler) (CORE_ADDR), int *err) -{ - struct process_info *proc = current_process (); - struct breakpoint *bp; - struct raw_breakpoint *raw; - - raw = set_raw_breakpoint_at (raw_type, where, kind, err); - - if (raw == NULL) - { - /* warn? */ - return NULL; - } - - if (is_gdb_breakpoint (type)) - { - struct gdb_breakpoint *gdb_bp = XCNEW (struct gdb_breakpoint); - - bp = (struct breakpoint *) gdb_bp; - gdb_assert (handler == NULL); - } - else if (type == other_breakpoint) - { - struct other_breakpoint *other_bp = XCNEW (struct other_breakpoint); - - other_bp->handler = handler; - bp = (struct breakpoint *) other_bp; - } - else if (type == single_step_breakpoint) - { - struct single_step_breakpoint *ss_bp - = XCNEW (struct single_step_breakpoint); - - bp = (struct breakpoint *) ss_bp; - } - else - gdb_assert_not_reached ("unhandled breakpoint type"); - - bp->type = type; - bp->raw = raw; - - bp->next = proc->breakpoints; - proc->breakpoints = bp; - - return bp; -} - -/* Set breakpoint of TYPE on address WHERE with handler HANDLER. */ - -static struct breakpoint * -set_breakpoint_type_at (enum bkpt_type type, CORE_ADDR where, - int (*handler) (CORE_ADDR)) -{ - int err_ignored; - CORE_ADDR placed_address = where; - int breakpoint_kind = target_breakpoint_kind_from_pc (&placed_address); - - return set_breakpoint (type, raw_bkpt_type_sw, - placed_address, breakpoint_kind, handler, - &err_ignored); -} - -/* See mem-break.h */ - -struct breakpoint * -set_breakpoint_at (CORE_ADDR where, int (*handler) (CORE_ADDR)) -{ - return set_breakpoint_type_at (other_breakpoint, where, handler); -} - - -static int -delete_raw_breakpoint (struct process_info *proc, struct raw_breakpoint *todel) -{ - struct raw_breakpoint *bp, **bp_link; - int ret; - - bp = proc->raw_breakpoints; - bp_link = &proc->raw_breakpoints; - - while (bp) - { - if (bp == todel) - { - if (bp->inserted > 0) - { - struct raw_breakpoint *prev_bp_link = *bp_link; - - *bp_link = bp->next; - - ret = the_target->remove_point (bp->raw_type, bp->pc, bp->kind, - bp); - if (ret != 0) - { - /* Something went wrong, relink the breakpoint. */ - *bp_link = prev_bp_link; - - if (debug_threads) - debug_printf ("Failed to uninsert raw breakpoint " - "at 0x%s while deleting it.\n", - paddress (bp->pc)); - return ret; - } - } - else - *bp_link = bp->next; - - free (bp); - return 0; - } - else - { - bp_link = &bp->next; - bp = *bp_link; - } - } - - warning ("Could not find raw breakpoint in list."); - return ENOENT; -} - -static int -release_breakpoint (struct process_info *proc, struct breakpoint *bp) -{ - int newrefcount; - int ret; - - newrefcount = bp->raw->refcount - 1; - if (newrefcount == 0) - { - ret = delete_raw_breakpoint (proc, bp->raw); - if (ret != 0) - return ret; - } - else - bp->raw->refcount = newrefcount; - - free (bp); - - return 0; -} - -static int -delete_breakpoint_1 (struct process_info *proc, struct breakpoint *todel) -{ - struct breakpoint *bp, **bp_link; - int err; - - bp = proc->breakpoints; - bp_link = &proc->breakpoints; - - while (bp) - { - if (bp == todel) - { - *bp_link = bp->next; - - err = release_breakpoint (proc, bp); - if (err != 0) - return err; - - bp = *bp_link; - return 0; - } - else - { - bp_link = &bp->next; - bp = *bp_link; - } - } - - warning ("Could not find breakpoint in list."); - return ENOENT; -} - -int -delete_breakpoint (struct breakpoint *todel) -{ - struct process_info *proc = current_process (); - return delete_breakpoint_1 (proc, todel); -} - -/* Locate a GDB breakpoint of type Z_TYPE and kind KIND placed at - address ADDR and return a pointer to its structure. If KIND is -1, - the breakpoint's kind is ignored. */ - -static struct gdb_breakpoint * -find_gdb_breakpoint (char z_type, CORE_ADDR addr, int kind) -{ - struct process_info *proc = current_process (); - struct breakpoint *bp; - enum bkpt_type type = Z_packet_to_bkpt_type (z_type); - - for (bp = proc->breakpoints; bp != NULL; bp = bp->next) - if (bp->type == type && bp->raw->pc == addr - && (kind == -1 || bp->raw->kind == kind)) - return (struct gdb_breakpoint *) bp; - - return NULL; -} - -static int -z_type_supported (char z_type) -{ - return (z_type >= '0' && z_type <= '4' - && the_target->supports_z_point_type != NULL - && the_target->supports_z_point_type (z_type)); -} - -/* Create a new GDB breakpoint of type Z_TYPE at ADDR with kind KIND. - Returns a pointer to the newly created breakpoint on success. On - failure returns NULL and sets *ERR to either -1 for error, or 1 if - Z_TYPE breakpoints are not supported on this target. */ - -static struct gdb_breakpoint * -set_gdb_breakpoint_1 (char z_type, CORE_ADDR addr, int kind, int *err) -{ - struct gdb_breakpoint *bp; - enum bkpt_type type; - enum raw_bkpt_type raw_type; - - /* If we see GDB inserting a second code breakpoint at the same - address, then either: GDB is updating the breakpoint's conditions - or commands; or, the first breakpoint must have disappeared due - to a shared library unload. On targets where the shared - libraries are handled by userspace, like SVR4, for example, - GDBserver can't tell if a library was loaded or unloaded. Since - we refcount raw breakpoints, we must be careful to make sure GDB - breakpoints never contribute more than one reference. if we - didn't do this, in case the previous breakpoint is gone due to a - shared library unload, we'd just increase the refcount of the - previous breakpoint at this address, but the trap was not planted - in the inferior anymore, thus the breakpoint would never be hit. - Note this must be careful to not create a window where - breakpoints are removed from the target, for non-stop, in case - the target can poke at memory while the program is running. */ - if (z_type == Z_PACKET_SW_BP - || z_type == Z_PACKET_HW_BP) - { - bp = find_gdb_breakpoint (z_type, addr, -1); - - if (bp != NULL) - { - if (bp->base.raw->kind != kind) - { - /* A different kind than previously seen. The previous - breakpoint must be gone then. */ - bp->base.raw->inserted = -1; - delete_breakpoint ((struct breakpoint *) bp); - bp = NULL; - } - else if (z_type == Z_PACKET_SW_BP) - { - /* Check if the breakpoint is actually gone from the - target, due to an solib unload, for example. Might - as well validate _all_ breakpoints. */ - validate_breakpoints (); - - /* Breakpoints that don't pass validation are - deleted. */ - bp = find_gdb_breakpoint (z_type, addr, -1); - } - } - } - else - { - /* Data breakpoints for the same address but different kind are - expected. GDB doesn't merge these. The backend gets to do - that if it wants/can. */ - bp = find_gdb_breakpoint (z_type, addr, kind); - } - - if (bp != NULL) - { - /* We already know about this breakpoint, there's nothing else - to do - GDB's reference is already accounted for. Note that - whether the breakpoint inserted is left as is - we may be - stepping over it, for example, in which case we don't want to - force-reinsert it. */ - return bp; - } - - raw_type = Z_packet_to_raw_bkpt_type (z_type); - type = Z_packet_to_bkpt_type (z_type); - return (struct gdb_breakpoint *) set_breakpoint (type, raw_type, addr, - kind, NULL, err); -} - -static int -check_gdb_bp_preconditions (char z_type, int *err) -{ - /* As software/memory breakpoints work by poking at memory, we need - to prepare to access memory. If that operation fails, we need to - return error. Seeing an error, if this is the first breakpoint - of that type that GDB tries to insert, GDB would then assume the - breakpoint type is supported, but it may actually not be. So we - need to check whether the type is supported at all before - preparing to access memory. */ - if (!z_type_supported (z_type)) - { - *err = 1; - return 0; - } - - return 1; -} - -/* See mem-break.h. This is a wrapper for set_gdb_breakpoint_1 that - knows to prepare to access memory for Z0 breakpoints. */ - -struct gdb_breakpoint * -set_gdb_breakpoint (char z_type, CORE_ADDR addr, int kind, int *err) -{ - struct gdb_breakpoint *bp; - - if (!check_gdb_bp_preconditions (z_type, err)) - return NULL; - - /* If inserting a software/memory breakpoint, need to prepare to - access memory. */ - if (z_type == Z_PACKET_SW_BP) - { - if (prepare_to_access_memory () != 0) - { - *err = -1; - return NULL; - } - } - - bp = set_gdb_breakpoint_1 (z_type, addr, kind, err); - - if (z_type == Z_PACKET_SW_BP) - done_accessing_memory (); - - return bp; -} - -/* Delete a GDB breakpoint of type Z_TYPE and kind KIND previously - inserted at ADDR with set_gdb_breakpoint_at. Returns 0 on success, - -1 on error, and 1 if Z_TYPE breakpoints are not supported on this - target. */ - -static int -delete_gdb_breakpoint_1 (char z_type, CORE_ADDR addr, int kind) -{ - struct gdb_breakpoint *bp; - int err; - - bp = find_gdb_breakpoint (z_type, addr, kind); - if (bp == NULL) - return -1; - - /* Before deleting the breakpoint, make sure to free its condition - and command lists. */ - clear_breakpoint_conditions_and_commands (bp); - err = delete_breakpoint ((struct breakpoint *) bp); - if (err != 0) - return -1; - - return 0; -} - -/* See mem-break.h. This is a wrapper for delete_gdb_breakpoint that - knows to prepare to access memory for Z0 breakpoints. */ - -int -delete_gdb_breakpoint (char z_type, CORE_ADDR addr, int kind) -{ - int ret; - - if (!check_gdb_bp_preconditions (z_type, &ret)) - return ret; - - /* If inserting a software/memory breakpoint, need to prepare to - access memory. */ - if (z_type == Z_PACKET_SW_BP) - { - int err; - - err = prepare_to_access_memory (); - if (err != 0) - return -1; - } - - ret = delete_gdb_breakpoint_1 (z_type, addr, kind); - - if (z_type == Z_PACKET_SW_BP) - done_accessing_memory (); - - return ret; -} - -/* Clear all conditions associated with a breakpoint. */ - -static void -clear_breakpoint_conditions (struct gdb_breakpoint *bp) -{ - struct point_cond_list *cond; - - if (bp->cond_list == NULL) - return; - - cond = bp->cond_list; - - while (cond != NULL) - { - struct point_cond_list *cond_next; - - cond_next = cond->next; - gdb_free_agent_expr (cond->cond); - free (cond); - cond = cond_next; - } - - bp->cond_list = NULL; -} - -/* Clear all commands associated with a breakpoint. */ - -static void -clear_breakpoint_commands (struct gdb_breakpoint *bp) -{ - struct point_command_list *cmd; - - if (bp->command_list == NULL) - return; - - cmd = bp->command_list; - - while (cmd != NULL) - { - struct point_command_list *cmd_next; - - cmd_next = cmd->next; - gdb_free_agent_expr (cmd->cmd); - free (cmd); - cmd = cmd_next; - } - - bp->command_list = NULL; -} - -void -clear_breakpoint_conditions_and_commands (struct gdb_breakpoint *bp) -{ - clear_breakpoint_conditions (bp); - clear_breakpoint_commands (bp); -} - -/* Add condition CONDITION to GDBserver's breakpoint BP. */ - -static void -add_condition_to_breakpoint (struct gdb_breakpoint *bp, - struct agent_expr *condition) -{ - struct point_cond_list *new_cond; - - /* Create new condition. */ - new_cond = XCNEW (struct point_cond_list); - new_cond->cond = condition; - - /* Add condition to the list. */ - new_cond->next = bp->cond_list; - bp->cond_list = new_cond; -} - -/* Add a target-side condition CONDITION to a breakpoint. */ - -int -add_breakpoint_condition (struct gdb_breakpoint *bp, const char **condition) -{ - const char *actparm = *condition; - struct agent_expr *cond; - - if (condition == NULL) - return 1; - - if (bp == NULL) - return 0; - - cond = gdb_parse_agent_expr (&actparm); - - if (cond == NULL) - { - warning ("Condition evaluation failed. Assuming unconditional."); - return 0; - } - - add_condition_to_breakpoint (bp, cond); - - *condition = actparm; - - return 1; -} - -/* Evaluate condition (if any) at breakpoint BP. Return 1 if - true and 0 otherwise. */ - -static int -gdb_condition_true_at_breakpoint_z_type (char z_type, CORE_ADDR addr) -{ - /* Fetch registers for the current inferior. */ - struct gdb_breakpoint *bp = find_gdb_breakpoint (z_type, addr, -1); - ULONGEST value = 0; - struct point_cond_list *cl; - int err = 0; - struct eval_agent_expr_context ctx; - - if (bp == NULL) - return 0; - - /* Check if the breakpoint is unconditional. If it is, - the condition always evaluates to TRUE. */ - if (bp->cond_list == NULL) - return 1; - - ctx.regcache = get_thread_regcache (current_thread, 1); - ctx.tframe = NULL; - ctx.tpoint = NULL; - - /* Evaluate each condition in the breakpoint's list of conditions. - Return true if any of the conditions evaluates to TRUE. - - If we failed to evaluate the expression, TRUE is returned. This - forces GDB to reevaluate the conditions. */ - for (cl = bp->cond_list; - cl && !value && !err; cl = cl->next) - { - /* Evaluate the condition. */ - err = gdb_eval_agent_expr (&ctx, cl->cond, &value); - } - - if (err) - return 1; - - return (value != 0); -} - -int -gdb_condition_true_at_breakpoint (CORE_ADDR where) -{ - /* Only check code (software or hardware) breakpoints. */ - return (gdb_condition_true_at_breakpoint_z_type (Z_PACKET_SW_BP, where) - || gdb_condition_true_at_breakpoint_z_type (Z_PACKET_HW_BP, where)); -} - -/* Add commands COMMANDS to GDBserver's breakpoint BP. */ - -static void -add_commands_to_breakpoint (struct gdb_breakpoint *bp, - struct agent_expr *commands, int persist) -{ - struct point_command_list *new_cmd; - - /* Create new command. */ - new_cmd = XCNEW (struct point_command_list); - new_cmd->cmd = commands; - new_cmd->persistence = persist; - - /* Add commands to the list. */ - new_cmd->next = bp->command_list; - bp->command_list = new_cmd; -} - -/* Add a target-side command COMMAND to the breakpoint at ADDR. */ - -int -add_breakpoint_commands (struct gdb_breakpoint *bp, const char **command, - int persist) -{ - const char *actparm = *command; - struct agent_expr *cmd; - - if (command == NULL) - return 1; - - if (bp == NULL) - return 0; - - cmd = gdb_parse_agent_expr (&actparm); - - if (cmd == NULL) - { - warning ("Command evaluation failed. Disabling."); - return 0; - } - - add_commands_to_breakpoint (bp, cmd, persist); - - *command = actparm; - - return 1; -} - -/* Return true if there are no commands to run at this location, - which likely means we want to report back to GDB. */ - -static int -gdb_no_commands_at_breakpoint_z_type (char z_type, CORE_ADDR addr) -{ - struct gdb_breakpoint *bp = find_gdb_breakpoint (z_type, addr, -1); - - if (bp == NULL) - return 1; - - if (debug_threads) - debug_printf ("at 0x%s, type Z%c, bp command_list is 0x%s\n", - paddress (addr), z_type, - phex_nz ((uintptr_t) bp->command_list, 0)); - return (bp->command_list == NULL); -} - -/* Return true if there are no commands to run at this location, - which likely means we want to report back to GDB. */ - -int -gdb_no_commands_at_breakpoint (CORE_ADDR where) -{ - /* Only check code (software or hardware) breakpoints. */ - return (gdb_no_commands_at_breakpoint_z_type (Z_PACKET_SW_BP, where) - && gdb_no_commands_at_breakpoint_z_type (Z_PACKET_HW_BP, where)); -} - -/* Run a breakpoint's commands. Returns 0 if there was a problem - running any command, 1 otherwise. */ - -static int -run_breakpoint_commands_z_type (char z_type, CORE_ADDR addr) -{ - /* Fetch registers for the current inferior. */ - struct gdb_breakpoint *bp = find_gdb_breakpoint (z_type, addr, -1); - ULONGEST value = 0; - struct point_command_list *cl; - int err = 0; - struct eval_agent_expr_context ctx; - - if (bp == NULL) - return 1; - - ctx.regcache = get_thread_regcache (current_thread, 1); - ctx.tframe = NULL; - ctx.tpoint = NULL; - - for (cl = bp->command_list; - cl && !value && !err; cl = cl->next) - { - /* Run the command. */ - err = gdb_eval_agent_expr (&ctx, cl->cmd, &value); - - /* If one command has a problem, stop digging the hole deeper. */ - if (err) - return 0; - } - - return 1; -} - -void -run_breakpoint_commands (CORE_ADDR where) -{ - /* Only check code (software or hardware) breakpoints. If one - command has a problem, stop digging the hole deeper. */ - if (run_breakpoint_commands_z_type (Z_PACKET_SW_BP, where)) - run_breakpoint_commands_z_type (Z_PACKET_HW_BP, where); -} - -/* See mem-break.h. */ - -int -gdb_breakpoint_here (CORE_ADDR where) -{ - /* Only check code (software or hardware) breakpoints. */ - return (find_gdb_breakpoint (Z_PACKET_SW_BP, where, -1) != NULL - || find_gdb_breakpoint (Z_PACKET_HW_BP, where, -1) != NULL); -} - -void -set_single_step_breakpoint (CORE_ADDR stop_at, ptid_t ptid) -{ - struct single_step_breakpoint *bp; - - gdb_assert (current_ptid.pid () == ptid.pid ()); - - bp = (struct single_step_breakpoint *) set_breakpoint_type_at (single_step_breakpoint, - stop_at, NULL); - bp->ptid = ptid; -} - -void -delete_single_step_breakpoints (struct thread_info *thread) -{ - struct process_info *proc = get_thread_process (thread); - struct breakpoint *bp, **bp_link; - - bp = proc->breakpoints; - bp_link = &proc->breakpoints; - - while (bp) - { - if (bp->type == single_step_breakpoint - && ((struct single_step_breakpoint *) bp)->ptid == ptid_of (thread)) - { - struct thread_info *saved_thread = current_thread; - - current_thread = thread; - *bp_link = bp->next; - release_breakpoint (proc, bp); - bp = *bp_link; - current_thread = saved_thread; - } - else - { - bp_link = &bp->next; - bp = *bp_link; - } - } -} - -static void -uninsert_raw_breakpoint (struct raw_breakpoint *bp) -{ - if (bp->inserted < 0) - { - if (debug_threads) - debug_printf ("Breakpoint at %s is marked insert-disabled.\n", - paddress (bp->pc)); - } - else if (bp->inserted > 0) - { - int err; - - bp->inserted = 0; - - err = the_target->remove_point (bp->raw_type, bp->pc, bp->kind, bp); - if (err != 0) - { - bp->inserted = 1; - - if (debug_threads) - debug_printf ("Failed to uninsert raw breakpoint at 0x%s.\n", - paddress (bp->pc)); - } - } -} - -void -uninsert_breakpoints_at (CORE_ADDR pc) -{ - struct process_info *proc = current_process (); - struct raw_breakpoint *bp; - int found = 0; - - for (bp = proc->raw_breakpoints; bp != NULL; bp = bp->next) - if ((bp->raw_type == raw_bkpt_type_sw - || bp->raw_type == raw_bkpt_type_hw) - && bp->pc == pc) - { - found = 1; - - if (bp->inserted) - uninsert_raw_breakpoint (bp); - } - - if (!found) - { - /* This can happen when we remove all breakpoints while handling - a step-over. */ - if (debug_threads) - debug_printf ("Could not find breakpoint at 0x%s " - "in list (uninserting).\n", - paddress (pc)); - } -} - -void -uninsert_all_breakpoints (void) -{ - struct process_info *proc = current_process (); - struct raw_breakpoint *bp; - - for (bp = proc->raw_breakpoints; bp != NULL; bp = bp->next) - if ((bp->raw_type == raw_bkpt_type_sw - || bp->raw_type == raw_bkpt_type_hw) - && bp->inserted) - uninsert_raw_breakpoint (bp); -} - -void -uninsert_single_step_breakpoints (struct thread_info *thread) -{ - struct process_info *proc = get_thread_process (thread); - struct breakpoint *bp; - - for (bp = proc->breakpoints; bp != NULL; bp = bp->next) - { - if (bp->type == single_step_breakpoint - && ((struct single_step_breakpoint *) bp)->ptid == ptid_of (thread)) - { - gdb_assert (bp->raw->inserted > 0); - - /* Only uninsert the raw breakpoint if it only belongs to a - reinsert breakpoint. */ - if (bp->raw->refcount == 1) - { - struct thread_info *saved_thread = current_thread; - - current_thread = thread; - uninsert_raw_breakpoint (bp->raw); - current_thread = saved_thread; - } - } - } -} - -static void -reinsert_raw_breakpoint (struct raw_breakpoint *bp) -{ - int err; - - if (bp->inserted) - return; - - err = the_target->insert_point (bp->raw_type, bp->pc, bp->kind, bp); - if (err == 0) - bp->inserted = 1; - else if (debug_threads) - debug_printf ("Failed to reinsert breakpoint at 0x%s (%d).\n", - paddress (bp->pc), err); -} - -void -reinsert_breakpoints_at (CORE_ADDR pc) -{ - struct process_info *proc = current_process (); - struct raw_breakpoint *bp; - int found = 0; - - for (bp = proc->raw_breakpoints; bp != NULL; bp = bp->next) - if ((bp->raw_type == raw_bkpt_type_sw - || bp->raw_type == raw_bkpt_type_hw) - && bp->pc == pc) - { - found = 1; - - reinsert_raw_breakpoint (bp); - } - - if (!found) - { - /* This can happen when we remove all breakpoints while handling - a step-over. */ - if (debug_threads) - debug_printf ("Could not find raw breakpoint at 0x%s " - "in list (reinserting).\n", - paddress (pc)); - } -} - -int -has_single_step_breakpoints (struct thread_info *thread) -{ - struct process_info *proc = get_thread_process (thread); - struct breakpoint *bp, **bp_link; - - bp = proc->breakpoints; - bp_link = &proc->breakpoints; - - while (bp) - { - if (bp->type == single_step_breakpoint - && ((struct single_step_breakpoint *) bp)->ptid == ptid_of (thread)) - return 1; - else - { - bp_link = &bp->next; - bp = *bp_link; - } - } - - return 0; -} - -void -reinsert_all_breakpoints (void) -{ - struct process_info *proc = current_process (); - struct raw_breakpoint *bp; - - for (bp = proc->raw_breakpoints; bp != NULL; bp = bp->next) - if ((bp->raw_type == raw_bkpt_type_sw - || bp->raw_type == raw_bkpt_type_hw) - && !bp->inserted) - reinsert_raw_breakpoint (bp); -} - -void -reinsert_single_step_breakpoints (struct thread_info *thread) -{ - struct process_info *proc = get_thread_process (thread); - struct breakpoint *bp; - - for (bp = proc->breakpoints; bp != NULL; bp = bp->next) - { - if (bp->type == single_step_breakpoint - && ((struct single_step_breakpoint *) bp)->ptid == ptid_of (thread)) - { - gdb_assert (bp->raw->inserted > 0); - - if (bp->raw->refcount == 1) - { - struct thread_info *saved_thread = current_thread; - - current_thread = thread; - reinsert_raw_breakpoint (bp->raw); - current_thread = saved_thread; - } - } - } -} - -void -check_breakpoints (CORE_ADDR stop_pc) -{ - struct process_info *proc = current_process (); - struct breakpoint *bp, **bp_link; - - bp = proc->breakpoints; - bp_link = &proc->breakpoints; - - while (bp) - { - struct raw_breakpoint *raw = bp->raw; - - if ((raw->raw_type == raw_bkpt_type_sw - || raw->raw_type == raw_bkpt_type_hw) - && raw->pc == stop_pc) - { - if (!raw->inserted) - { - warning ("Hit a removed breakpoint?"); - return; - } - - if (bp->type == other_breakpoint) - { - struct other_breakpoint *other_bp - = (struct other_breakpoint *) bp; - - if (other_bp->handler != NULL && (*other_bp->handler) (stop_pc)) - { - *bp_link = bp->next; - - release_breakpoint (proc, bp); - - bp = *bp_link; - continue; - } - } - } - - bp_link = &bp->next; - bp = *bp_link; - } -} - -int -breakpoint_here (CORE_ADDR addr) -{ - struct process_info *proc = current_process (); - struct raw_breakpoint *bp; - - for (bp = proc->raw_breakpoints; bp != NULL; bp = bp->next) - if ((bp->raw_type == raw_bkpt_type_sw - || bp->raw_type == raw_bkpt_type_hw) - && bp->pc == addr) - return 1; - - return 0; -} - -int -breakpoint_inserted_here (CORE_ADDR addr) -{ - struct process_info *proc = current_process (); - struct raw_breakpoint *bp; - - for (bp = proc->raw_breakpoints; bp != NULL; bp = bp->next) - if ((bp->raw_type == raw_bkpt_type_sw - || bp->raw_type == raw_bkpt_type_hw) - && bp->pc == addr - && bp->inserted) - return 1; - - return 0; -} - -/* See mem-break.h. */ - -int -software_breakpoint_inserted_here (CORE_ADDR addr) -{ - struct process_info *proc = current_process (); - struct raw_breakpoint *bp; - - for (bp = proc->raw_breakpoints; bp != NULL; bp = bp->next) - if (bp->raw_type == raw_bkpt_type_sw - && bp->pc == addr - && bp->inserted) - return 1; - - return 0; -} - -/* See mem-break.h. */ - -int -hardware_breakpoint_inserted_here (CORE_ADDR addr) -{ - struct process_info *proc = current_process (); - struct raw_breakpoint *bp; - - for (bp = proc->raw_breakpoints; bp != NULL; bp = bp->next) - if (bp->raw_type == raw_bkpt_type_hw - && bp->pc == addr - && bp->inserted) - return 1; - - return 0; -} - -/* See mem-break.h. */ - -int -single_step_breakpoint_inserted_here (CORE_ADDR addr) -{ - struct process_info *proc = current_process (); - struct breakpoint *bp; - - for (bp = proc->breakpoints; bp != NULL; bp = bp->next) - if (bp->type == single_step_breakpoint - && bp->raw->pc == addr - && bp->raw->inserted) - return 1; - - return 0; -} - -static int -validate_inserted_breakpoint (struct raw_breakpoint *bp) -{ - unsigned char *buf; - int err; - - gdb_assert (bp->inserted); - gdb_assert (bp->raw_type == raw_bkpt_type_sw); - - buf = (unsigned char *) alloca (bp_size (bp)); - err = (*the_target->read_memory) (bp->pc, buf, bp_size (bp)); - if (err || memcmp (buf, bp_opcode (bp), bp_size (bp)) != 0) - { - /* Tag it as gone. */ - bp->inserted = -1; - return 0; - } - - return 1; -} - -static void -delete_disabled_breakpoints (void) -{ - struct process_info *proc = current_process (); - struct breakpoint *bp, *next; - - for (bp = proc->breakpoints; bp != NULL; bp = next) - { - next = bp->next; - if (bp->raw->inserted < 0) - { - /* If single_step_breakpoints become disabled, that means the - manipulations (insertion and removal) of them are wrong. */ - gdb_assert (bp->type != single_step_breakpoint); - delete_breakpoint_1 (proc, bp); - } - } -} - -/* Check if breakpoints we inserted still appear to be inserted. They - may disappear due to a shared library unload, and worse, a new - shared library may be reloaded at the same address as the - previously unloaded one. If that happens, we should make sure that - the shadow memory of the old breakpoints isn't used when reading or - writing memory. */ - -void -validate_breakpoints (void) -{ - struct process_info *proc = current_process (); - struct breakpoint *bp; - - for (bp = proc->breakpoints; bp != NULL; bp = bp->next) - { - struct raw_breakpoint *raw = bp->raw; - - if (raw->raw_type == raw_bkpt_type_sw && raw->inserted > 0) - validate_inserted_breakpoint (raw); - } - - delete_disabled_breakpoints (); -} - -void -check_mem_read (CORE_ADDR mem_addr, unsigned char *buf, int mem_len) -{ - struct process_info *proc = current_process (); - struct raw_breakpoint *bp = proc->raw_breakpoints; - struct fast_tracepoint_jump *jp = proc->fast_tracepoint_jumps; - CORE_ADDR mem_end = mem_addr + mem_len; - int disabled_one = 0; - - for (; jp != NULL; jp = jp->next) - { - CORE_ADDR bp_end = jp->pc + jp->length; - CORE_ADDR start, end; - int copy_offset, copy_len, buf_offset; - - gdb_assert (fast_tracepoint_jump_shadow (jp) >= buf + mem_len - || buf >= fast_tracepoint_jump_shadow (jp) + (jp)->length); - - if (mem_addr >= bp_end) - continue; - if (jp->pc >= mem_end) - continue; - - start = jp->pc; - if (mem_addr > start) - start = mem_addr; - - end = bp_end; - if (end > mem_end) - end = mem_end; - - copy_len = end - start; - copy_offset = start - jp->pc; - buf_offset = start - mem_addr; - - if (jp->inserted) - memcpy (buf + buf_offset, - fast_tracepoint_jump_shadow (jp) + copy_offset, - copy_len); - } - - for (; bp != NULL; bp = bp->next) - { - CORE_ADDR bp_end = bp->pc + bp_size (bp); - CORE_ADDR start, end; - int copy_offset, copy_len, buf_offset; - - if (bp->raw_type != raw_bkpt_type_sw) - continue; - - gdb_assert (bp->old_data >= buf + mem_len - || buf >= &bp->old_data[sizeof (bp->old_data)]); - - if (mem_addr >= bp_end) - continue; - if (bp->pc >= mem_end) - continue; - - start = bp->pc; - if (mem_addr > start) - start = mem_addr; - - end = bp_end; - if (end > mem_end) - end = mem_end; - - copy_len = end - start; - copy_offset = start - bp->pc; - buf_offset = start - mem_addr; - - if (bp->inserted > 0) - { - if (validate_inserted_breakpoint (bp)) - memcpy (buf + buf_offset, bp->old_data + copy_offset, copy_len); - else - disabled_one = 1; - } - } - - if (disabled_one) - delete_disabled_breakpoints (); -} - -void -check_mem_write (CORE_ADDR mem_addr, unsigned char *buf, - const unsigned char *myaddr, int mem_len) -{ - struct process_info *proc = current_process (); - struct raw_breakpoint *bp = proc->raw_breakpoints; - struct fast_tracepoint_jump *jp = proc->fast_tracepoint_jumps; - CORE_ADDR mem_end = mem_addr + mem_len; - int disabled_one = 0; - - /* First fast tracepoint jumps, then breakpoint traps on top. */ - - for (; jp != NULL; jp = jp->next) - { - CORE_ADDR jp_end = jp->pc + jp->length; - CORE_ADDR start, end; - int copy_offset, copy_len, buf_offset; - - gdb_assert (fast_tracepoint_jump_shadow (jp) >= myaddr + mem_len - || myaddr >= fast_tracepoint_jump_shadow (jp) + (jp)->length); - gdb_assert (fast_tracepoint_jump_insn (jp) >= buf + mem_len - || buf >= fast_tracepoint_jump_insn (jp) + (jp)->length); - - if (mem_addr >= jp_end) - continue; - if (jp->pc >= mem_end) - continue; - - start = jp->pc; - if (mem_addr > start) - start = mem_addr; - - end = jp_end; - if (end > mem_end) - end = mem_end; - - copy_len = end - start; - copy_offset = start - jp->pc; - buf_offset = start - mem_addr; - - memcpy (fast_tracepoint_jump_shadow (jp) + copy_offset, - myaddr + buf_offset, copy_len); - if (jp->inserted) - memcpy (buf + buf_offset, - fast_tracepoint_jump_insn (jp) + copy_offset, copy_len); - } - - for (; bp != NULL; bp = bp->next) - { - CORE_ADDR bp_end = bp->pc + bp_size (bp); - CORE_ADDR start, end; - int copy_offset, copy_len, buf_offset; - - if (bp->raw_type != raw_bkpt_type_sw) - continue; - - gdb_assert (bp->old_data >= myaddr + mem_len - || myaddr >= &bp->old_data[sizeof (bp->old_data)]); - - if (mem_addr >= bp_end) - continue; - if (bp->pc >= mem_end) - continue; - - start = bp->pc; - if (mem_addr > start) - start = mem_addr; - - end = bp_end; - if (end > mem_end) - end = mem_end; - - copy_len = end - start; - copy_offset = start - bp->pc; - buf_offset = start - mem_addr; - - memcpy (bp->old_data + copy_offset, myaddr + buf_offset, copy_len); - if (bp->inserted > 0) - { - if (validate_inserted_breakpoint (bp)) - memcpy (buf + buf_offset, bp_opcode (bp) + copy_offset, copy_len); - else - disabled_one = 1; - } - } - - if (disabled_one) - delete_disabled_breakpoints (); -} - -/* Delete all breakpoints, and un-insert them from the inferior. */ - -void -delete_all_breakpoints (void) -{ - struct process_info *proc = current_process (); - - while (proc->breakpoints) - delete_breakpoint_1 (proc, proc->breakpoints); -} - -/* Clear the "inserted" flag in all breakpoints. */ - -void -mark_breakpoints_out (struct process_info *proc) -{ - struct raw_breakpoint *raw_bp; - - for (raw_bp = proc->raw_breakpoints; raw_bp != NULL; raw_bp = raw_bp->next) - raw_bp->inserted = 0; -} - -/* Release all breakpoints, but do not try to un-insert them from the - inferior. */ - -void -free_all_breakpoints (struct process_info *proc) -{ - mark_breakpoints_out (proc); - - /* Note: use PROC explicitly instead of deferring to - delete_all_breakpoints --- CURRENT_INFERIOR may already have been - released when we get here. There should be no call to - current_process from here on. */ - while (proc->breakpoints) - delete_breakpoint_1 (proc, proc->breakpoints); -} - -/* Clone an agent expression. */ - -static struct agent_expr * -clone_agent_expr (const struct agent_expr *src_ax) -{ - struct agent_expr *ax; - - ax = XCNEW (struct agent_expr); - ax->length = src_ax->length; - ax->bytes = (unsigned char *) xcalloc (ax->length, 1); - memcpy (ax->bytes, src_ax->bytes, ax->length); - return ax; -} - -/* Deep-copy the contents of one breakpoint to another. */ - -static struct breakpoint * -clone_one_breakpoint (const struct breakpoint *src, ptid_t ptid) -{ - struct breakpoint *dest; - struct raw_breakpoint *dest_raw; - - /* Clone the raw breakpoint. */ - dest_raw = XCNEW (struct raw_breakpoint); - dest_raw->raw_type = src->raw->raw_type; - dest_raw->refcount = src->raw->refcount; - dest_raw->pc = src->raw->pc; - dest_raw->kind = src->raw->kind; - memcpy (dest_raw->old_data, src->raw->old_data, MAX_BREAKPOINT_LEN); - dest_raw->inserted = src->raw->inserted; - - /* Clone the high-level breakpoint. */ - if (is_gdb_breakpoint (src->type)) - { - struct gdb_breakpoint *gdb_dest = XCNEW (struct gdb_breakpoint); - struct point_cond_list *current_cond; - struct point_cond_list *new_cond; - struct point_cond_list *cond_tail = NULL; - struct point_command_list *current_cmd; - struct point_command_list *new_cmd; - struct point_command_list *cmd_tail = NULL; - - /* Clone the condition list. */ - for (current_cond = ((struct gdb_breakpoint *) src)->cond_list; - current_cond != NULL; - current_cond = current_cond->next) - { - new_cond = XCNEW (struct point_cond_list); - new_cond->cond = clone_agent_expr (current_cond->cond); - APPEND_TO_LIST (&gdb_dest->cond_list, new_cond, cond_tail); - } - - /* Clone the command list. */ - for (current_cmd = ((struct gdb_breakpoint *) src)->command_list; - current_cmd != NULL; - current_cmd = current_cmd->next) - { - new_cmd = XCNEW (struct point_command_list); - new_cmd->cmd = clone_agent_expr (current_cmd->cmd); - new_cmd->persistence = current_cmd->persistence; - APPEND_TO_LIST (&gdb_dest->command_list, new_cmd, cmd_tail); - } - - dest = (struct breakpoint *) gdb_dest; - } - else if (src->type == other_breakpoint) - { - struct other_breakpoint *other_dest = XCNEW (struct other_breakpoint); - - other_dest->handler = ((struct other_breakpoint *) src)->handler; - dest = (struct breakpoint *) other_dest; - } - else if (src->type == single_step_breakpoint) - { - struct single_step_breakpoint *ss_dest - = XCNEW (struct single_step_breakpoint); - - dest = (struct breakpoint *) ss_dest; - /* Since single-step breakpoint is thread specific, don't copy - thread id from SRC, use ID instead. */ - ss_dest->ptid = ptid; - } - else - gdb_assert_not_reached ("unhandled breakpoint type"); - - dest->type = src->type; - dest->raw = dest_raw; - - return dest; -} - -/* See mem-break.h. */ - -void -clone_all_breakpoints (struct thread_info *child_thread, - const struct thread_info *parent_thread) -{ - const struct breakpoint *bp; - struct breakpoint *new_bkpt; - struct breakpoint *bkpt_tail = NULL; - struct raw_breakpoint *raw_bkpt_tail = NULL; - struct process_info *child_proc = get_thread_process (child_thread); - struct process_info *parent_proc = get_thread_process (parent_thread); - struct breakpoint **new_list = &child_proc->breakpoints; - struct raw_breakpoint **new_raw_list = &child_proc->raw_breakpoints; - - for (bp = parent_proc->breakpoints; bp != NULL; bp = bp->next) - { - new_bkpt = clone_one_breakpoint (bp, ptid_of (child_thread)); - APPEND_TO_LIST (new_list, new_bkpt, bkpt_tail); - APPEND_TO_LIST (new_raw_list, new_bkpt->raw, raw_bkpt_tail); - } -} diff -Nru gdb-9.1/gdb/gdbserver/mem-break.h gdb-10.2/gdb/gdbserver/mem-break.h --- gdb-9.1/gdb/gdbserver/mem-break.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/mem-break.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,279 +0,0 @@ -/* Memory breakpoint interfaces for the remote server for GDB. - Copyright (C) 2002-2020 Free Software Foundation, Inc. - - Contributed by MontaVista Software. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef GDBSERVER_MEM_BREAK_H -#define GDBSERVER_MEM_BREAK_H - -#include "gdbsupport/break-common.h" - -/* Breakpoints are opaque. */ -struct breakpoint; -struct gdb_breakpoint; -struct fast_tracepoint_jump; -struct raw_breakpoint; -struct process_info; - -#define Z_PACKET_SW_BP '0' -#define Z_PACKET_HW_BP '1' -#define Z_PACKET_WRITE_WP '2' -#define Z_PACKET_READ_WP '3' -#define Z_PACKET_ACCESS_WP '4' - -/* The low level breakpoint types. */ - -enum raw_bkpt_type - { - /* Software/memory breakpoint. */ - raw_bkpt_type_sw, - - /* Hardware-assisted breakpoint. */ - raw_bkpt_type_hw, - - /* Hardware-assisted write watchpoint. */ - raw_bkpt_type_write_wp, - - /* Hardware-assisted read watchpoint. */ - raw_bkpt_type_read_wp, - - /* Hardware-assisted access watchpoint. */ - raw_bkpt_type_access_wp - }; - -/* Map the protocol breakpoint/watchpoint type Z_TYPE to the internal - raw breakpoint type. */ - -enum raw_bkpt_type Z_packet_to_raw_bkpt_type (char z_type); - -/* Map a raw breakpoint type to an enum target_hw_bp_type. */ - -enum target_hw_bp_type raw_bkpt_type_to_target_hw_bp_type - (enum raw_bkpt_type raw_type); - -/* Create a new GDB breakpoint of type Z_TYPE at ADDR with kind KIND. - Returns a pointer to the newly created breakpoint on success. On - failure returns NULL and sets *ERR to either -1 for error, or 1 if - Z_TYPE breakpoints are not supported on this target. */ - -struct gdb_breakpoint *set_gdb_breakpoint (char z_type, CORE_ADDR addr, - int kind, int *err); - -/* Delete a GDB breakpoint of type Z_TYPE and kind KIND previously - inserted at ADDR with set_gdb_breakpoint_at. Returns 0 on success, - -1 on error, and 1 if Z_TYPE breakpoints are not supported on this - target. */ - -int delete_gdb_breakpoint (char z_type, CORE_ADDR addr, int kind); - -/* Returns TRUE if there's a software or hardware (code) breakpoint at - ADDR in our tables, inserted, or not. */ - -int breakpoint_here (CORE_ADDR addr); - -/* Returns TRUE if there's any inserted software or hardware (code) - breakpoint set at ADDR. */ - -int breakpoint_inserted_here (CORE_ADDR addr); - -/* Returns TRUE if there's any inserted software breakpoint at - ADDR. */ - -int software_breakpoint_inserted_here (CORE_ADDR addr); - -/* Returns TRUE if there's any inserted hardware (code) breakpoint at - ADDR. */ - -int hardware_breakpoint_inserted_here (CORE_ADDR addr); - -/* Returns TRUE if there's any single-step breakpoint at ADDR. */ - -int single_step_breakpoint_inserted_here (CORE_ADDR addr); - -/* Clear all breakpoint conditions and commands associated with a - breakpoint. */ - -void clear_breakpoint_conditions_and_commands (struct gdb_breakpoint *bp); - -/* Set target-side condition CONDITION to the breakpoint at ADDR. - Returns false on failure. On success, advances CONDITION pointer - past the condition and returns true. */ - -int add_breakpoint_condition (struct gdb_breakpoint *bp, - const char **condition); - -/* Set target-side commands COMMANDS to the breakpoint at ADDR. - Returns false on failure. On success, advances COMMANDS past the - commands and returns true. If PERSIST, the commands should run - even while GDB is disconnected. */ - -int add_breakpoint_commands (struct gdb_breakpoint *bp, const char **commands, - int persist); - -/* Return true if PROC has any persistent command. */ -bool any_persistent_commands (process_info *proc); - -/* Evaluation condition (if any) at breakpoint BP. Return 1 if - true and 0 otherwise. */ - -int gdb_condition_true_at_breakpoint (CORE_ADDR where); - -int gdb_no_commands_at_breakpoint (CORE_ADDR where); - -void run_breakpoint_commands (CORE_ADDR where); - -/* Returns TRUE if there's a GDB breakpoint (Z0 or Z1) set at - WHERE. */ - -int gdb_breakpoint_here (CORE_ADDR where); - -/* Create a new breakpoint at WHERE, and call HANDLER when - it is hit. HANDLER should return 1 if the breakpoint - should be deleted, 0 otherwise. The type of the created - breakpoint is other_breakpoint. */ - -struct breakpoint *set_breakpoint_at (CORE_ADDR where, - int (*handler) (CORE_ADDR)); - -/* Delete a breakpoint. */ - -int delete_breakpoint (struct breakpoint *bkpt); - -/* Set a single-step breakpoint at STOP_AT for thread represented by - PTID. */ - -void set_single_step_breakpoint (CORE_ADDR stop_at, ptid_t ptid); - -/* Delete all single-step breakpoints of THREAD. */ - -void delete_single_step_breakpoints (struct thread_info *thread); - -/* Reinsert all single-step breakpoints of THREAD. */ - -void reinsert_single_step_breakpoints (struct thread_info *thread); - -/* Uninsert all single-step breakpoints of THREAD. This still leaves - the single-step breakpoints in the table. */ - -void uninsert_single_step_breakpoints (struct thread_info *thread); - -/* Reinsert breakpoints at WHERE (and change their status to - inserted). */ - -void reinsert_breakpoints_at (CORE_ADDR where); - -/* The THREAD has single-step breakpoints or not. */ - -int has_single_step_breakpoints (struct thread_info *thread); - -/* Uninsert breakpoints at WHERE (and change their status to - uninserted). This still leaves the breakpoints in the table. */ - -void uninsert_breakpoints_at (CORE_ADDR where); - -/* Reinsert all breakpoints of the current process (and change their - status to inserted). */ - -void reinsert_all_breakpoints (void); - -/* Uninsert all breakpoints of the current process (and change their - status to uninserted). This still leaves the breakpoints in the - table. */ - -void uninsert_all_breakpoints (void); - -/* See if any breakpoint claims ownership of STOP_PC. Call the handler for - the breakpoint, if found. */ - -void check_breakpoints (CORE_ADDR stop_pc); - -/* See if any breakpoints shadow the target memory area from MEM_ADDR - to MEM_ADDR + MEM_LEN. Update the data already read from the target - (in BUF) if necessary. */ - -void check_mem_read (CORE_ADDR mem_addr, unsigned char *buf, int mem_len); - -/* See if any breakpoints shadow the target memory area from MEM_ADDR - to MEM_ADDR + MEM_LEN. Update the data to be written to the target - (in BUF, a copy of MYADDR on entry) if necessary, as well as the - original data for any breakpoints. */ - -void check_mem_write (CORE_ADDR mem_addr, - unsigned char *buf, const unsigned char *myaddr, int mem_len); - -/* Delete all breakpoints. */ - -void delete_all_breakpoints (void); - -/* Clear the "inserted" flag in all breakpoints of PROC. */ - -void mark_breakpoints_out (struct process_info *proc); - -/* Delete all breakpoints, but do not try to un-insert them from the - inferior. */ - -void free_all_breakpoints (struct process_info *proc); - -/* Check if breakpoints still seem to be inserted in the inferior. */ - -void validate_breakpoints (void); - -/* Insert a fast tracepoint jump at WHERE, using instruction INSN, of - LENGTH bytes. */ - -struct fast_tracepoint_jump *set_fast_tracepoint_jump (CORE_ADDR where, - unsigned char *insn, - ULONGEST length); - -/* Increment reference counter of JP. */ -void inc_ref_fast_tracepoint_jump (struct fast_tracepoint_jump *jp); - -/* Delete fast tracepoint jump TODEL from our tables, and uninsert if - from memory. */ - -int delete_fast_tracepoint_jump (struct fast_tracepoint_jump *todel); - -/* Returns true if there's fast tracepoint jump set at WHERE. */ - -int fast_tracepoint_jump_here (CORE_ADDR); - -/* Uninsert fast tracepoint jumps at WHERE (and change their status to - uninserted). This still leaves the tracepoints in the table. */ - -void uninsert_fast_tracepoint_jumps_at (CORE_ADDR pc); - -/* Reinsert fast tracepoint jumps at WHERE (and change their status to - inserted). */ - -void reinsert_fast_tracepoint_jumps_at (CORE_ADDR where); - -/* Insert a memory breakpoint. */ - -int insert_memory_breakpoint (struct raw_breakpoint *bp); - -/* Remove a previously inserted memory breakpoint. */ - -int remove_memory_breakpoint (struct raw_breakpoint *bp); - -/* Create a new breakpoint list in CHILD_THREAD's process that is a - copy of breakpoint list in PARENT_THREAD's process. */ - -void clone_all_breakpoints (struct thread_info *child_thread, - const struct thread_info *parent_thread); - -#endif /* GDBSERVER_MEM_BREAK_H */ diff -Nru gdb-9.1/gdb/gdbserver/notif.c gdb-10.2/gdb/gdbserver/notif.c --- gdb-9.1/gdb/gdbserver/notif.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/notif.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,154 +0,0 @@ -/* Notification to GDB. - Copyright (C) 1989-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -/* Async notifications to GDB. When the state of remote target is - changed or something interesting to GDB happened, async - notifications are used to tell GDB. - - Each type of notification is represented by an object - 'struct notif_server', in which there is a queue for events to GDB - represented by 'struct notif_event'. GDBserver writes (by means of - 'write' field) each event in the queue into the buffer and send the - contents in buffer to GDB. The contents in buffer is specified in - RSP. See more in the comments to field 'queue' of - 'struct notif_server'. - - Here is the workflow of sending events and managing queue: - 1. At any time, when something interesting FOO happens, a object - of 'struct notif_event' or its sub-class EVENT is created for FOO. - - 2. Enque EVENT to the 'queue' field of 'struct notif_server' for - FOO and send corresponding notification packet to GDB if EVENT is - the first one. - #1 and #2 are done by function 'notif_push'. - - 3. EVENT is not deque'ed until the ack of FOO from GDB arrives. - Before ack of FOO arrives, FOO happens again, a new object of - EVENT is created and enque EVENT silently. - Once GDB has a chance to ack to FOO, it sends an ack to GDBserver, - and GDBserver repeatedly sends events to GDB and gets ack of FOO, - until queue is empty. Then, GDBserver sends 'OK' to GDB that all - queued notification events are done. - - # 3 is done by function 'handle_notif_ack'. */ - -#include "server.h" -#include "notif.h" - -static struct notif_server *notifs[] = -{ - ¬if_stop, -}; - -/* Write another event or an OK, if there are no more left, to - OWN_BUF. */ - -void -notif_write_event (struct notif_server *notif, char *own_buf) -{ - if (!notif->queue.empty ()) - { - struct notif_event *event = notif->queue.front (); - - notif->write (event, own_buf); - } - else - write_ok (own_buf); -} - -/* Handle the ack in buffer OWN_BUF,and packet length is PACKET_LEN. - Return 1 if the ack is handled, and return 0 if the contents - in OWN_BUF is not a ack. */ - -int -handle_notif_ack (char *own_buf, int packet_len) -{ - size_t i; - struct notif_server *np; - - for (i = 0; i < ARRAY_SIZE (notifs); i++) - { - const char *ack_name = notifs[i]->ack_name; - - if (startswith (own_buf, ack_name) - && packet_len == strlen (ack_name)) - break; - } - - if (i == ARRAY_SIZE (notifs)) - return 0; - - np = notifs[i]; - - /* If we're waiting for GDB to acknowledge a pending event, - consider that done. */ - if (!np->queue.empty ()) - { - struct notif_event *head = np->queue.front (); - np->queue.pop_front (); - - if (remote_debug) - debug_printf ("%s: acking %d\n", np->ack_name, - (int) np->queue.size ()); - - delete head; - } - - notif_write_event (np, own_buf); - - return 1; -} - -/* Put EVENT to the queue of NOTIF. */ - -void -notif_event_enque (struct notif_server *notif, - struct notif_event *event) -{ - notif->queue.push_back (event); - - if (remote_debug) - debug_printf ("pending events: %s %d\n", notif->notif_name, - (int) notif->queue.size ()); - -} - -/* Push one event NEW_EVENT of notification NP into NP->queue. */ - -void -notif_push (struct notif_server *np, struct notif_event *new_event) -{ - bool is_first_event = np->queue.empty (); - - /* Something interesting. Tell GDB about it. */ - notif_event_enque (np, new_event); - - /* If this is the first stop reply in the queue, then inform GDB - about it, by sending a corresponding notification. */ - if (is_first_event) - { - char buf[PBUFSIZ]; - char *p = buf; - - xsnprintf (p, PBUFSIZ, "%s:", np->notif_name); - p += strlen (p); - - np->write (new_event, p); - putpkt_notif (buf); - } -} diff -Nru gdb-9.1/gdb/gdbserver/notif.h gdb-10.2/gdb/gdbserver/notif.h --- gdb-9.1/gdb/gdbserver/notif.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/notif.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,68 +0,0 @@ -/* Notification to GDB. - Copyright (C) 1989-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef GDBSERVER_NOTIF_H -#define GDBSERVER_NOTIF_H - -#include "target.h" -#include <list> - -/* Structure holding information related to a single event. We - keep a queue of these to push to GDB. It can be extended if - the event of given notification contains more information. */ - -struct notif_event -{ - virtual ~notif_event () - { - } - - /* No payload needed. */ -}; - -/* A type notification to GDB. An object of 'struct notif_server' - represents a type of notification. */ - -typedef struct notif_server -{ - /* The name of ack packet, for example, 'vStopped'. */ - const char *ack_name; - - /* The notification packet, for example, '%Stop'. Note that '%' is - not in 'notif_name'. */ - const char *notif_name; - - /* A queue of events to GDB. A new notif_event can be enque'ed - into QUEUE at any appropriate time, and the notif_reply is - deque'ed only when the ack from GDB arrives. */ - std::list<notif_event *> queue; - - /* Write event EVENT to OWN_BUF. */ - void (*write) (struct notif_event *event, char *own_buf); -} *notif_server_p; - -extern struct notif_server notif_stop; - -int handle_notif_ack (char *own_buf, int packet_len); -void notif_write_event (struct notif_server *notif, char *own_buf); - -void notif_push (struct notif_server *np, struct notif_event *event); -void notif_event_enque (struct notif_server *notif, - struct notif_event *event); - -#endif /* GDBSERVER_NOTIF_H */ diff -Nru gdb-9.1/gdb/gdbserver/nto-low.c gdb-10.2/gdb/gdbserver/nto-low.c --- gdb-9.1/gdb/gdbserver/nto-low.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/nto-low.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,1026 +0,0 @@ -/* QNX Neutrino specific low level interface, for the remote server - for GDB. - Copyright (C) 2009-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - - -#include "server.h" -#include "gdbthread.h" -#include "nto-low.h" -#include "hostio.h" -#include "debug.h" - -#include <limits.h> -#include <fcntl.h> -#include <spawn.h> -#include <sys/procfs.h> -#include <sys/auxv.h> -#include <sys/iomgr.h> -#include <sys/neutrino.h> - - -int using_threads = 1; - -const struct target_desc *nto_tdesc; - -static void -nto_trace (const char *fmt, ...) -{ - va_list arg_list; - - if (debug_threads == 0) - return; - fprintf (stderr, "nto:"); - va_start (arg_list, fmt); - vfprintf (stderr, fmt, arg_list); - va_end (arg_list); -} - -#define TRACE nto_trace - -/* Structure holding neutrino specific information about - inferior. */ - -struct nto_inferior -{ - char nto_procfs_path[PATH_MAX]; - int ctl_fd; - pid_t pid; - int exit_signo; /* For tracking exit status. */ -}; - -static struct nto_inferior nto_inferior; - -static void -init_nto_inferior (struct nto_inferior *nto_inferior) -{ - memset (nto_inferior, 0, sizeof (struct nto_inferior)); - nto_inferior->ctl_fd = -1; - nto_inferior->pid = -1; -} - -static void -do_detach (void) -{ - if (nto_inferior.ctl_fd != -1) - { - nto_trace ("Closing fd\n"); - close (nto_inferior.ctl_fd); - init_nto_inferior (&nto_inferior); - } -} - -/* Set current thread. Return 1 on success, 0 otherwise. */ - -static int -nto_set_thread (ptid_t ptid) -{ - int res = 0; - - TRACE ("%s pid: %d tid: %ld\n", __func__, ptid.pid (), - ptid.lwp ()); - if (nto_inferior.ctl_fd != -1 - && ptid != null_ptid - && ptid != minus_one_ptid) - { - pthread_t tid = ptid.lwp (); - - if (EOK == devctl (nto_inferior.ctl_fd, DCMD_PROC_CURTHREAD, &tid, - sizeof (tid), 0)) - res = 1; - else - TRACE ("%s: Error: failed to set current thread\n", __func__); - } - return res; -} - -/* This function will determine all alive threads. Note that we do not list - dead but unjoined threads even though they are still in the process' thread - list. - - NTO_INFERIOR must not be NULL. */ - -static void -nto_find_new_threads (struct nto_inferior *nto_inferior) -{ - pthread_t tid; - - TRACE ("%s pid:%d\n", __func__, nto_inferior->pid); - - if (nto_inferior->ctl_fd == -1) - return; - - for (tid = 1;; ++tid) - { - procfs_status status; - ptid_t ptid; - int err; - - status.tid = tid; - err = devctl (nto_inferior->ctl_fd, DCMD_PROC_TIDSTATUS, &status, - sizeof (status), 0); - - if (err != EOK || status.tid == 0) - break; - - /* All threads in between are gone. */ - while (tid != status.tid || status.state == STATE_DEAD) - { - struct thread_info *ti; - - ptid = ptid_t (nto_inferior->pid, tid, 0); - ti = find_thread_ptid (ptid); - if (ti != NULL) - { - TRACE ("Removing thread %d\n", tid); - remove_thread (ti); - } - if (tid == status.tid) - break; - ++tid; - } - - if (status.state != STATE_DEAD) - { - TRACE ("Adding thread %d\n", tid); - ptid = ptid_t (nto_inferior->pid, tid, 0); - if (!find_thread_ptid (ptid)) - add_thread (ptid, NULL); - } - } -} - -/* Given pid, open procfs path. */ - -static pid_t -do_attach (pid_t pid) -{ - procfs_status status; - struct sigevent event; - - if (nto_inferior.ctl_fd != -1) - { - close (nto_inferior.ctl_fd); - init_nto_inferior (&nto_inferior); - } - xsnprintf (nto_inferior.nto_procfs_path, PATH_MAX - 1, "/proc/%d/as", pid); - nto_inferior.ctl_fd = open (nto_inferior.nto_procfs_path, O_RDWR); - if (nto_inferior.ctl_fd == -1) - { - TRACE ("Failed to open %s\n", nto_inferior.nto_procfs_path); - init_nto_inferior (&nto_inferior); - return -1; - } - if (devctl (nto_inferior.ctl_fd, DCMD_PROC_STOP, &status, sizeof (status), 0) - != EOK) - { - do_detach (); - return -1; - } - nto_inferior.pid = pid; - /* Define a sigevent for process stopped notification. */ - event.sigev_notify = SIGEV_SIGNAL_THREAD; - event.sigev_signo = SIGUSR1; - event.sigev_code = 0; - event.sigev_value.sival_ptr = NULL; - event.sigev_priority = -1; - devctl (nto_inferior.ctl_fd, DCMD_PROC_EVENT, &event, sizeof (event), 0); - - if (devctl (nto_inferior.ctl_fd, DCMD_PROC_STATUS, &status, sizeof (status), - 0) == EOK - && (status.flags & _DEBUG_FLAG_STOPPED)) - { - ptid_t ptid; - struct process_info *proc; - - kill (pid, SIGCONT); - ptid = ptid_t (status.pid, status.tid, 0); - the_low_target.arch_setup (); - proc = add_process (status.pid, 1); - proc->tdesc = nto_tdesc; - TRACE ("Adding thread: pid=%d tid=%ld\n", status.pid, - ptid.lwp ()); - nto_find_new_threads (&nto_inferior); - } - else - { - do_detach (); - return -1; - } - - return pid; -} - -/* Read or write LEN bytes from/to inferior's MEMADDR memory address - into gdbservers's MYADDR buffer. Return number of bytes actually - transfered. */ - -static int -nto_xfer_memory (off_t memaddr, unsigned char *myaddr, int len, - int dowrite) -{ - int nbytes = 0; - - if (lseek (nto_inferior.ctl_fd, memaddr, SEEK_SET) == memaddr) - { - if (dowrite) - nbytes = write (nto_inferior.ctl_fd, myaddr, len); - else - nbytes = read (nto_inferior.ctl_fd, myaddr, len); - if (nbytes < 0) - nbytes = 0; - } - if (nbytes == 0) - { - int e = errno; - TRACE ("Error in %s : errno=%d (%s)\n", __func__, e, safe_strerror (e)); - } - return nbytes; -} - -/* Insert or remove breakpoint or watchpoint at address ADDR. - TYPE can be one of Neutrino breakpoint types. SIZE must be 0 for - inserting the point, -1 for removing it. - - Return 0 on success, 1 otherwise. */ - -static int -nto_breakpoint (CORE_ADDR addr, int type, int size) -{ - procfs_break brk; - - brk.type = type; - brk.addr = addr; - brk.size = size; - if (devctl (nto_inferior.ctl_fd, DCMD_PROC_BREAK, &brk, sizeof (brk), 0) - != EOK) - return 1; - return 0; -} - -/* Read auxiliary vector from inferior's initial stack into gdbserver's - MYADDR buffer, up to LEN bytes. - - Return number of bytes read. */ - -static int -nto_read_auxv_from_initial_stack (CORE_ADDR initial_stack, - unsigned char *myaddr, - unsigned int len) -{ - int data_ofs = 0; - int anint; - unsigned int len_read = 0; - - /* Skip over argc, argv and envp... Comment from ldd.c: - - The startup frame is set-up so that we have: - auxv - NULL - ... - envp2 - envp1 <----- void *frame + (argc + 2) * sizeof(char *) - NULL - ... - argv2 - argv1 - argc <------ void * frame - - On entry to ldd, frame gives the address of argc on the stack. */ - if (nto_xfer_memory (initial_stack, (unsigned char *)&anint, - sizeof (anint), 0) != sizeof (anint)) - return 0; - - /* Size of pointer is assumed to be 4 bytes (32 bit arch. ) */ - data_ofs += (anint + 2) * sizeof (void *); /* + 2 comes from argc itself and - NULL terminating pointer in - argv. */ - - /* Now loop over env table: */ - while (nto_xfer_memory (initial_stack + data_ofs, - (unsigned char *)&anint, sizeof (anint), 0) - == sizeof (anint)) - { - data_ofs += sizeof (anint); - if (anint == 0) - break; - } - initial_stack += data_ofs; - - memset (myaddr, 0, len); - while (len_read <= len - sizeof (auxv_t)) - { - auxv_t *auxv = (auxv_t *)myaddr; - - /* Search backwards until we have read AT_PHDR (num. 3), - AT_PHENT (num 4), AT_PHNUM (num 5) */ - if (nto_xfer_memory (initial_stack, (unsigned char *)auxv, - sizeof (auxv_t), 0) == sizeof (auxv_t)) - { - if (auxv->a_type != AT_NULL) - { - auxv++; - len_read += sizeof (auxv_t); - } - if (auxv->a_type == AT_PHNUM) /* That's all we need. */ - break; - initial_stack += sizeof (auxv_t); - } - else - break; - } - TRACE ("auxv: len_read: %d\n", len_read); - return len_read; -} - -/* Start inferior specified by PROGRAM, using PROGRAM_ARGS as its - arguments. */ - -static int -nto_create_inferior (const char *program, - const std::vector<char *> &program_args) -{ - struct inheritance inherit; - pid_t pid; - sigset_t set; - std::string str_program_args = stringify_argv (program_args); - - TRACE ("%s %s\n", __func__, program); - /* Clear any pending SIGUSR1's but keep the behavior the same. */ - signal (SIGUSR1, signal (SIGUSR1, SIG_IGN)); - - sigemptyset (&set); - sigaddset (&set, SIGUSR1); - sigprocmask (SIG_UNBLOCK, &set, NULL); - - memset (&inherit, 0, sizeof (inherit)); - inherit.flags |= SPAWN_SETGROUP | SPAWN_HOLD; - inherit.pgroup = SPAWN_NEWPGROUP; - pid = spawnp (program, 0, NULL, &inherit, - (char *) str_program_args.c_str (), 0); - sigprocmask (SIG_BLOCK, &set, NULL); - - if (pid == -1) - return -1; - - if (do_attach (pid) != pid) - return -1; - - return pid; -} - -/* Attach to process PID. */ - -static int -nto_attach (unsigned long pid) -{ - TRACE ("%s %ld\n", __func__, pid); - if (do_attach (pid) != pid) - error ("Unable to attach to %ld\n", pid); - return 0; -} - -/* Send signal to process PID. */ - -static int -nto_kill (process_info *proc) -{ - int pid = proc->pid; - - TRACE ("%s %d\n", __func__, pid); - kill (pid, SIGKILL); - do_detach (); - return 0; -} - -/* Detach from process PID. */ - -static int -nto_detach (process_info *proc) -{ - TRACE ("%s %d\n", __func__, proc->pid); - do_detach (); - return 0; -} - -static void -nto_mourn (struct process_info *process) -{ - remove_process (process); -} - -/* Check if the given thread is alive. - - Return 1 if alive, 0 otherwise. */ - -static int -nto_thread_alive (ptid_t ptid) -{ - int res; - - TRACE ("%s pid:%d tid:%d\n", __func__, ptid.pid (), - ptid.lwp ()); - if (SignalKill (0, ptid.pid (), ptid.lwp (), - 0, 0, 0) == -1) - res = 0; - else - res = 1; - TRACE ("%s: %s\n", __func__, res ? "yes" : "no"); - return res; -} - -/* Resume inferior's execution. */ - -static void -nto_resume (struct thread_resume *resume_info, size_t n) -{ - /* We can only work in all-stop mode. */ - procfs_status status; - procfs_run run; - int err; - - TRACE ("%s\n", __func__); - /* Workaround for aliasing rules violation. */ - sigset_t *run_fault = (sigset_t *) (void *) &run.fault; - - nto_set_thread (resume_info->thread); - - run.flags = _DEBUG_RUN_FAULT | _DEBUG_RUN_TRACE; - if (resume_info->kind == resume_step) - run.flags |= _DEBUG_RUN_STEP; - run.flags |= _DEBUG_RUN_ARM; - - sigemptyset (run_fault); - sigaddset (run_fault, FLTBPT); - sigaddset (run_fault, FLTTRACE); - sigaddset (run_fault, FLTILL); - sigaddset (run_fault, FLTPRIV); - sigaddset (run_fault, FLTBOUNDS); - sigaddset (run_fault, FLTIOVF); - sigaddset (run_fault, FLTIZDIV); - sigaddset (run_fault, FLTFPE); - sigaddset (run_fault, FLTPAGE); - sigaddset (run_fault, FLTSTACK); - sigaddset (run_fault, FLTACCESS); - - sigemptyset (&run.trace); - if (resume_info->sig) - { - int signal_to_pass; - - devctl (nto_inferior.ctl_fd, DCMD_PROC_STATUS, &status, sizeof (status), - 0); - signal_to_pass = resume_info->sig; - if (status.why & (_DEBUG_WHY_SIGNALLED | _DEBUG_WHY_FAULTED)) - { - if (signal_to_pass != status.info.si_signo) - { - kill (status.pid, signal_to_pass); - run.flags |= _DEBUG_RUN_CLRFLT | _DEBUG_RUN_CLRSIG; - } - else /* Let it kill the program without telling us. */ - sigdelset (&run.trace, signal_to_pass); - } - } - else - run.flags |= _DEBUG_RUN_CLRSIG | _DEBUG_RUN_CLRFLT; - - sigfillset (&run.trace); - - regcache_invalidate (); - - err = devctl (nto_inferior.ctl_fd, DCMD_PROC_RUN, &run, sizeof (run), 0); - if (err != EOK) - TRACE ("Error: %d \"%s\"\n", err, safe_strerror (err)); -} - -/* Wait for inferior's event. - - Return ptid of thread that caused the event. */ - -static ptid_t -nto_wait (ptid_t ptid, - struct target_waitstatus *ourstatus, int target_options) -{ - sigset_t set; - siginfo_t info; - procfs_status status; - const int trace_mask = (_DEBUG_FLAG_TRACE_EXEC | _DEBUG_FLAG_TRACE_RD - | _DEBUG_FLAG_TRACE_WR | _DEBUG_FLAG_TRACE_MODIFY); - - TRACE ("%s\n", __func__); - - ourstatus->kind = TARGET_WAITKIND_SPURIOUS; - - sigemptyset (&set); - sigaddset (&set, SIGUSR1); - - devctl (nto_inferior.ctl_fd, DCMD_PROC_STATUS, &status, sizeof (status), 0); - while (!(status.flags & _DEBUG_FLAG_ISTOP)) - { - sigwaitinfo (&set, &info); - devctl (nto_inferior.ctl_fd, DCMD_PROC_STATUS, &status, sizeof (status), - 0); - } - nto_find_new_threads (&nto_inferior); - - if (status.flags & _DEBUG_FLAG_SSTEP) - { - TRACE ("SSTEP\n"); - ourstatus->kind = TARGET_WAITKIND_STOPPED; - ourstatus->value.sig = GDB_SIGNAL_TRAP; - } - /* Was it a breakpoint? */ - else if (status.flags & trace_mask) - { - TRACE ("STOPPED\n"); - ourstatus->kind = TARGET_WAITKIND_STOPPED; - ourstatus->value.sig = GDB_SIGNAL_TRAP; - } - else if (status.flags & _DEBUG_FLAG_ISTOP) - { - TRACE ("ISTOP\n"); - switch (status.why) - { - case _DEBUG_WHY_SIGNALLED: - TRACE (" SIGNALLED\n"); - ourstatus->kind = TARGET_WAITKIND_STOPPED; - ourstatus->value.sig = - gdb_signal_from_host (status.info.si_signo); - nto_inferior.exit_signo = ourstatus->value.sig; - break; - case _DEBUG_WHY_FAULTED: - TRACE (" FAULTED\n"); - ourstatus->kind = TARGET_WAITKIND_STOPPED; - if (status.info.si_signo == SIGTRAP) - { - ourstatus->value.sig = 0; - nto_inferior.exit_signo = 0; - } - else - { - ourstatus->value.sig = - gdb_signal_from_host (status.info.si_signo); - nto_inferior.exit_signo = ourstatus->value.sig; - } - break; - - case _DEBUG_WHY_TERMINATED: - { - int waitval = 0; - - TRACE (" TERMINATED\n"); - waitpid (ptid.pid (), &waitval, WNOHANG); - if (nto_inferior.exit_signo) - { - /* Abnormal death. */ - ourstatus->kind = TARGET_WAITKIND_SIGNALLED; - ourstatus->value.sig = nto_inferior.exit_signo; - } - else - { - /* Normal death. */ - ourstatus->kind = TARGET_WAITKIND_EXITED; - ourstatus->value.integer = WEXITSTATUS (waitval); - } - nto_inferior.exit_signo = 0; - break; - } - - case _DEBUG_WHY_REQUESTED: - TRACE ("REQUESTED\n"); - /* We are assuming a requested stop is due to a SIGINT. */ - ourstatus->kind = TARGET_WAITKIND_STOPPED; - ourstatus->value.sig = GDB_SIGNAL_INT; - nto_inferior.exit_signo = 0; - break; - } - } - - return ptid_t (status.pid, status.tid, 0); -} - -/* Fetch inferior's registers for currently selected thread (CURRENT_INFERIOR). - If REGNO is -1, fetch all registers, or REGNO register only otherwise. */ - -static void -nto_fetch_registers (struct regcache *regcache, int regno) -{ - int regsize; - procfs_greg greg; - - TRACE ("%s (regno=%d)\n", __func__, regno); - if (regno >= the_low_target.num_regs) - return; - - if (current_thread == NULL) - { - TRACE ("current_thread is NULL\n"); - return; - } - ptid_t ptid = ptid_of (current_thread); - if (!nto_set_thread (ptid)) - return; - - if (devctl (nto_inferior.ctl_fd, DCMD_PROC_GETGREG, &greg, sizeof (greg), - ®size) == EOK) - { - if (regno == -1) /* All registers. */ - { - for (regno = 0; regno != the_low_target.num_regs; ++regno) - { - const unsigned int registeroffset - = the_low_target.register_offset (regno); - supply_register (regcache, regno, - ((char *)&greg) + registeroffset); - } - } - else - { - const unsigned int registeroffset - = the_low_target.register_offset (regno); - if (registeroffset == -1) - return; - supply_register (regcache, regno, ((char *)&greg) + registeroffset); - } - } - else - TRACE ("ERROR reading registers from inferior.\n"); -} - -/* Store registers for currently selected thread (CURRENT_INFERIOR). - We always store all registers, regardless of REGNO. */ - -static void -nto_store_registers (struct regcache *regcache, int regno) -{ - procfs_greg greg; - int err; - - TRACE ("%s (regno:%d)\n", __func__, regno); - - if (current_thread == NULL) - { - TRACE ("current_thread is NULL\n"); - return; - } - ptid_t ptid = ptid_of (current_thread); - if (!nto_set_thread (ptid)) - return; - - memset (&greg, 0, sizeof (greg)); - for (regno = 0; regno != the_low_target.num_regs; ++regno) - { - const unsigned int regoffset - = the_low_target.register_offset (regno); - collect_register (regcache, regno, ((char *)&greg) + regoffset); - } - err = devctl (nto_inferior.ctl_fd, DCMD_PROC_SETGREG, &greg, sizeof (greg), - 0); - if (err != EOK) - TRACE ("Error: setting registers.\n"); -} - -/* Read LEN bytes from inferior's memory address MEMADDR into - gdbserver's MYADDR buffer. - - Return 0 on success -1 otherwise. */ - -static int -nto_read_memory (CORE_ADDR memaddr, unsigned char *myaddr, int len) -{ - TRACE ("%s memaddr:0x%08lx, len:%d\n", __func__, memaddr, len); - - if (nto_xfer_memory (memaddr, myaddr, len, 0) != len) - { - TRACE ("Failed to read memory\n"); - return -1; - } - - return 0; -} - -/* Write LEN bytes from gdbserver's buffer MYADDR into inferior's - memory at address MEMADDR. - - Return 0 on success -1 otherwise. */ - -static int -nto_write_memory (CORE_ADDR memaddr, const unsigned char *myaddr, int len) -{ - int len_written; - - TRACE ("%s memaddr: 0x%08llx len: %d\n", __func__, memaddr, len); - if ((len_written = nto_xfer_memory (memaddr, (unsigned char *)myaddr, len, - 1)) - != len) - { - TRACE ("Wanted to write: %d but written: %d\n", len, len_written); - return -1; - } - - return 0; -} - -/* Stop inferior. We always stop all threads. */ - -static void -nto_request_interrupt (void) -{ - TRACE ("%s\n", __func__); - nto_set_thread (ptid_t (nto_inferior.pid, 1, 0)); - if (EOK != devctl (nto_inferior.ctl_fd, DCMD_PROC_STOP, NULL, 0, 0)) - TRACE ("Error stopping inferior.\n"); -} - -/* Read auxiliary vector from inferior's memory into gdbserver's buffer - MYADDR. We always read whole auxv. - - Return number of bytes stored in MYADDR buffer, 0 if OFFSET > 0 - or -1 on error. */ - -static int -nto_read_auxv (CORE_ADDR offset, unsigned char *myaddr, unsigned int len) -{ - int err; - CORE_ADDR initial_stack; - procfs_info procinfo; - - TRACE ("%s\n", __func__); - if (offset > 0) - return 0; - - err = devctl (nto_inferior.ctl_fd, DCMD_PROC_INFO, &procinfo, - sizeof procinfo, 0); - if (err != EOK) - return -1; - - initial_stack = procinfo.initial_stack; - - return nto_read_auxv_from_initial_stack (initial_stack, myaddr, len); -} - -static int -nto_supports_z_point_type (char z_type) -{ - switch (z_type) - { - case Z_PACKET_SW_BP: - case Z_PACKET_HW_BP: - case Z_PACKET_WRITE_WP: - case Z_PACKET_READ_WP: - case Z_PACKET_ACCESS_WP: - return 1; - default: - return 0; - } -} - -/* Insert {break/watch}point at address ADDR. SIZE is not used. */ - -static int -nto_insert_point (enum raw_bkpt_type type, CORE_ADDR addr, - int size, struct raw_breakpoint *bp) -{ - int wtype = _DEBUG_BREAK_HW; /* Always request HW. */ - - TRACE ("%s type:%c addr: 0x%08lx len:%d\n", __func__, (int)type, addr, size); - switch (type) - { - case raw_bkpt_type_sw: - wtype = _DEBUG_BREAK_EXEC; - break; - case raw_bkpt_type_hw: - wtype |= _DEBUG_BREAK_EXEC; - break; - case raw_bkpt_type_write_wp: - wtype |= _DEBUG_BREAK_RW; - break; - case raw_bkpt_type_read_wp: - wtype |= _DEBUG_BREAK_RD; - break; - case raw_bkpt_type_access_wp: - wtype |= _DEBUG_BREAK_RW; - break; - default: - return 1; /* Not supported. */ - } - return nto_breakpoint (addr, wtype, 0); -} - -/* Remove {break/watch}point at address ADDR. SIZE is not used. */ - -static int -nto_remove_point (enum raw_bkpt_type type, CORE_ADDR addr, - int size, struct raw_breakpoint *bp) -{ - int wtype = _DEBUG_BREAK_HW; /* Always request HW. */ - - TRACE ("%s type:%c addr: 0x%08lx len:%d\n", __func__, (int)type, addr, size); - switch (type) - { - case raw_bkpt_type_sw: - wtype = _DEBUG_BREAK_EXEC; - break; - case raw_bkpt_type_hw: - wtype |= _DEBUG_BREAK_EXEC; - break; - case raw_bkpt_type_write_wp: - wtype |= _DEBUG_BREAK_RW; - break; - case raw_bkpt_type_read_wp: - wtype |= _DEBUG_BREAK_RD; - break; - case raw_bkpt_type_access_wp: - wtype |= _DEBUG_BREAK_RW; - break; - default: - return 1; /* Not supported. */ - } - return nto_breakpoint (addr, wtype, -1); -} - -/* Check if the reason of stop for current thread (CURRENT_INFERIOR) is - a watchpoint. - - Return 1 if stopped by watchpoint, 0 otherwise. */ - -static int -nto_stopped_by_watchpoint (void) -{ - int ret = 0; - - TRACE ("%s\n", __func__); - if (nto_inferior.ctl_fd != -1 && current_thread != NULL) - { - ptid_t ptid = ptid_of (current_thread); - if (nto_set_thread (ptid)) - { - const int watchmask = _DEBUG_FLAG_TRACE_RD | _DEBUG_FLAG_TRACE_WR - | _DEBUG_FLAG_TRACE_MODIFY; - procfs_status status; - int err; - - err = devctl (nto_inferior.ctl_fd, DCMD_PROC_STATUS, &status, - sizeof (status), 0); - if (err == EOK && (status.flags & watchmask)) - ret = 1; - } - } - TRACE ("%s: %s\n", __func__, ret ? "yes" : "no"); - return ret; -} - -/* Get instruction pointer for CURRENT_INFERIOR thread. - - Return inferior's instruction pointer value, or 0 on error. */ - -static CORE_ADDR -nto_stopped_data_address (void) -{ - CORE_ADDR ret = (CORE_ADDR)0; - - TRACE ("%s\n", __func__); - if (nto_inferior.ctl_fd != -1 && current_thread != NULL) - { - ptid_t ptid = ptid_of (current_thread); - - if (nto_set_thread (ptid)) - { - procfs_status status; - - if (devctl (nto_inferior.ctl_fd, DCMD_PROC_STATUS, &status, - sizeof (status), 0) == EOK) - ret = status.ip; - } - } - TRACE ("%s: 0x%08lx\n", __func__, ret); - return ret; -} - -/* We do not currently support non-stop. */ - -static int -nto_supports_non_stop (void) -{ - TRACE ("%s\n", __func__); - return 0; -} - -/* Implementation of the target_ops method "sw_breakpoint_from_kind". */ - -static const gdb_byte * -nto_sw_breakpoint_from_kind (int kind, int *size) -{ - *size = the_low_target.breakpoint_len; - return the_low_target.breakpoint; -} - - -static struct target_ops nto_target_ops = { - nto_create_inferior, - NULL, /* post_create_inferior */ - nto_attach, - nto_kill, - nto_detach, - nto_mourn, - NULL, /* nto_join */ - nto_thread_alive, - nto_resume, - nto_wait, - nto_fetch_registers, - nto_store_registers, - NULL, /* prepare_to_access_memory */ - NULL, /* done_accessing_memory */ - nto_read_memory, - nto_write_memory, - NULL, /* nto_look_up_symbols */ - nto_request_interrupt, - nto_read_auxv, - nto_supports_z_point_type, - nto_insert_point, - nto_remove_point, - NULL, /* stopped_by_sw_breakpoint */ - NULL, /* supports_stopped_by_sw_breakpoint */ - NULL, /* stopped_by_hw_breakpoint */ - NULL, /* supports_stopped_by_hw_breakpoint */ - target_can_do_hardware_single_step, - nto_stopped_by_watchpoint, - nto_stopped_data_address, - NULL, /* nto_read_offsets */ - NULL, /* thread_db_set_tls_address */ - hostio_last_error_from_errno, - NULL, /* nto_qxfer_osdata */ - NULL, /* xfer_siginfo */ - nto_supports_non_stop, - NULL, /* async */ - NULL, /* start_non_stop */ - NULL, /* supports_multi_process */ - NULL, /* supports_fork_events */ - NULL, /* supports_vfork_events */ - NULL, /* supports_exec_events */ - NULL, /* handle_new_gdb_connection */ - NULL, /* handle_monitor_command */ - NULL, /* core_of_thread */ - NULL, /* read_loadmap */ - NULL, /* process_qsupported */ - NULL, /* supports_tracepoints */ - NULL, /* read_pc */ - NULL, /* write_pc */ - NULL, /* thread_stopped */ - NULL, /* get_tib_address */ - NULL, /* pause_all */ - NULL, /* unpause_all */ - NULL, /* stabilize_threads */ - NULL, /* install_fast_tracepoint_jump_pad */ - NULL, /* emit_ops */ - NULL, /* supports_disable_randomization */ - NULL, /* get_min_fast_tracepoint_insn_len */ - NULL, /* qxfer_libraries_svr4 */ - NULL, /* support_agent */ - NULL, /* enable_btrace */ - NULL, /* disable_btrace */ - NULL, /* read_btrace */ - NULL, /* read_btrace_conf */ - NULL, /* supports_range_stepping */ - NULL, /* pid_to_exec_file */ - NULL, /* multifs_open */ - NULL, /* multifs_unlink */ - NULL, /* multifs_readlink */ - NULL, /* breakpoint_kind_from_pc */ - nto_sw_breakpoint_from_kind, -}; - - -/* Global function called by server.c. Initializes QNX Neutrino - gdbserver. */ - -void -initialize_low (void) -{ - sigset_t set; - - TRACE ("%s\n", __func__); - set_target_ops (&nto_target_ops); - - /* We use SIGUSR1 to gain control after we block waiting for a process. - We use sigwaitevent to wait. */ - sigemptyset (&set); - sigaddset (&set, SIGUSR1); - sigprocmask (SIG_BLOCK, &set, NULL); -} - diff -Nru gdb-9.1/gdb/gdbserver/nto-low.h gdb-10.2/gdb/gdbserver/nto-low.h --- gdb-9.1/gdb/gdbserver/nto-low.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/nto-low.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,49 +0,0 @@ -/* Internal interfaces for the QNX Neutrino specific target code for gdbserver. - Copyright (C) 2009-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef GDBSERVER_NTO_LOW_H -#define GDBSERVER_NTO_LOW_H - -struct target_desc; - -enum regset_type -{ - NTO_REG_GENERAL, - NTO_REG_FLOAT, - NTO_REG_SYSTEM, - NTO_REG_ALT, - NTO_REG_END -}; - -struct nto_target_ops -{ - /* Architecture specific setup. */ - void (*arch_setup) (void); - int num_regs; - int (*register_offset) (int gdbregno); - const unsigned char *breakpoint; - int breakpoint_len; -}; - -extern struct nto_target_ops the_low_target; - -/* The inferior's target description. This is a global because the - LynxOS ports support neither bi-arch nor multi-process. */ -extern const struct target_desc *nto_tdesc; - -#endif /* GDBSERVER_NTO_LOW_H */ diff -Nru gdb-9.1/gdb/gdbserver/nto-x86-low.c gdb-10.2/gdb/gdbserver/nto-x86-low.c --- gdb-9.1/gdb/gdbserver/nto-x86-low.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/nto-x86-low.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,109 +0,0 @@ -/* QNX Neutrino specific low level interface, for the remote server - for GDB. - Copyright (C) 2009-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "server.h" -#include "nto-low.h" -#include "regdef.h" -#include "regcache.h" - -#include <x86/context.h> -#include "gdbsupport/x86-xstate.h" -#include "arch/i386.h" -#include "x86-tdesc.h" - -const unsigned char x86_breakpoint[] = { 0xCC }; -#define x86_breakpoint_len 1 - -/* Returns offset in appropriate Neutrino's context structure. - Defined in x86/context.h. - GDBREGNO is index into regs_i386 array. It is autogenerated and - hopefully doesn't change. */ -static int -nto_x86_register_offset (int gdbregno) -{ - if (gdbregno >= 0 && gdbregno < 16) - { - X86_CPU_REGISTERS *dummy = (void*)0; - /* GPRs */ - switch (gdbregno) - { - case 0: - return (int)&(dummy->eax); - case 1: - return (int)&(dummy->ecx); - case 2: - return (int)&(dummy->edx); - case 3: - return (int)&(dummy->ebx); - case 4: - return (int)&(dummy->esp); - case 5: - return (int)&(dummy->ebp); - case 6: - return (int)&(dummy->esi); - case 7: - return (int)&(dummy->edi); - case 8: - return (int)&(dummy->eip); - case 9: - return (int)&(dummy->efl); - case 10: - return (int)&(dummy->cs); - case 11: - return (int)&(dummy->ss); -#ifdef __SEGMENTS__ - case 12: - return (int)&(dummy->ds); - case 13: - return (int)&(dummy->es); - case 14: - return (int)&(dummy->fs); - case 15: - return (int)&(dummy->gs); -#endif - default: - return -1; - } - } - return -1; -} - -static void -nto_x86_arch_setup (void) -{ - the_low_target.num_regs = 16; - struct target_desc *tdesc - = i386_create_target_description (X86_XSTATE_SSE_MASK, false, false); - - init_target_desc (tdesc, i386_expedite_regs); - - nto_tdesc = tdesc; -} - -struct nto_target_ops the_low_target = -{ - nto_x86_arch_setup, - 0, /* num_regs */ - nto_x86_register_offset, - x86_breakpoint, - x86_breakpoint_len -}; - - - diff -Nru gdb-9.1/gdb/gdbserver/proc-service.c gdb-10.2/gdb/gdbserver/proc-service.c --- gdb-9.1/gdb/gdbserver/proc-service.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/proc-service.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,165 +0,0 @@ -/* libthread_db helper functions for the remote server for GDB. - Copyright (C) 2002-2020 Free Software Foundation, Inc. - - Contributed by MontaVista Software. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "server.h" - -/* This file is currently tied to GNU/Linux. It should scale well to - another libthread_db implementation, with the appropriate gdbserver - hooks, but for now this means we can use GNU/Linux's target data. */ - -#include "linux-low.h" - -#include "gdb_proc_service.h" - -typedef struct ps_prochandle *gdb_ps_prochandle_t; -typedef void *gdb_ps_read_buf_t; -typedef const void *gdb_ps_write_buf_t; -typedef size_t gdb_ps_size_t; - -#ifdef HAVE_LINUX_REGSETS -#define HAVE_REGSETS -#endif - -#ifdef HAVE_REGSETS -static struct regset_info * -gregset_info (void) -{ - int i = 0; - const struct regs_info *regs_info = (*the_low_target.regs_info) (); - struct regsets_info *regsets_info = regs_info->regsets_info; - - while (regsets_info->regsets[i].size != -1) - { - if (regsets_info->regsets[i].type == GENERAL_REGS) - break; - i++; - } - - return ®sets_info->regsets[i]; -} -#endif - -/* Search for the symbol named NAME within the object named OBJ within - the target process PH. If the symbol is found the address of the - symbol is stored in SYM_ADDR. */ - -ps_err_e -ps_pglobal_lookup (gdb_ps_prochandle_t ph, const char *obj, - const char *name, psaddr_t *sym_addr) -{ - CORE_ADDR addr; - - if (thread_db_look_up_one_symbol (name, &addr) == 0) - return PS_NOSYM; - - *sym_addr = (psaddr_t) (unsigned long) addr; - return PS_OK; -} - -/* Read SIZE bytes from the target process PH at address ADDR and copy - them into BUF. */ - -ps_err_e -ps_pdread (gdb_ps_prochandle_t ph, psaddr_t addr, - gdb_ps_read_buf_t buf, gdb_ps_size_t size) -{ - if (read_inferior_memory ((uintptr_t) addr, (gdb_byte *) buf, size) != 0) - return PS_ERR; - return PS_OK; -} - -/* Write SIZE bytes from BUF into the target process PH at address ADDR. */ - -ps_err_e -ps_pdwrite (gdb_ps_prochandle_t ph, psaddr_t addr, - gdb_ps_write_buf_t buf, gdb_ps_size_t size) -{ - if (target_write_memory ((uintptr_t) addr, (const gdb_byte *) buf, size) - != 0) - return PS_ERR; - return PS_OK; -} - -/* Get the general registers of LWP LWPID within the target process PH - and store them in GREGSET. */ - -ps_err_e -ps_lgetregs (gdb_ps_prochandle_t ph, lwpid_t lwpid, prgregset_t gregset) -{ -#ifdef HAVE_REGSETS - struct lwp_info *lwp; - struct thread_info *reg_thread, *saved_thread; - struct regcache *regcache; - - lwp = find_lwp_pid (ptid_t (lwpid)); - if (lwp == NULL) - return PS_ERR; - - reg_thread = get_lwp_thread (lwp); - saved_thread = current_thread; - current_thread = reg_thread; - regcache = get_thread_regcache (current_thread, 1); - gregset_info ()->fill_function (regcache, gregset); - - current_thread = saved_thread; - return PS_OK; -#else - return PS_ERR; -#endif -} - -/* Set the general registers of LWP LWPID within the target process PH - from GREGSET. */ - -ps_err_e -ps_lsetregs (gdb_ps_prochandle_t ph, lwpid_t lwpid, const prgregset_t gregset) -{ - /* Unneeded. */ - return PS_ERR; -} - -/* Get the floating-point registers of LWP LWPID within the target - process PH and store them in FPREGSET. */ - -ps_err_e -ps_lgetfpregs (gdb_ps_prochandle_t ph, lwpid_t lwpid, prfpregset_t *fpregset) -{ - /* Unneeded. */ - return PS_ERR; -} - -/* Set the floating-point registers of LWP LWPID within the target - process PH from FPREGSET. */ - -ps_err_e -ps_lsetfpregs (gdb_ps_prochandle_t ph, lwpid_t lwpid, const prfpregset_t *fpregset) -{ - /* Unneeded. */ - return PS_ERR; -} - -/* Return overall process id of the target PH. Special for GNU/Linux - -- not used on Solaris. */ - -pid_t -ps_getpid (gdb_ps_prochandle_t ph) -{ - return pid_of (current_thread); -} diff -Nru gdb-9.1/gdb/gdbserver/proc-service.list gdb-10.2/gdb/gdbserver/proc-service.list --- gdb-9.1/gdb/gdbserver/proc-service.list 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/proc-service.list 1970-01-01 00:00:00.000000000 +0000 @@ -1,30 +0,0 @@ -/* -Wl,--dynamic-list symbols exported for libthread_db. - - Copyright (C) 2010-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -{ - ps_get_thread_area; - ps_getpid; - ps_lgetfpregs; - ps_lgetregs; - ps_lsetfpregs; - ps_lsetregs; - ps_pdread; - ps_pdwrite; - ps_pglobal_lookup; -}; diff -Nru gdb-9.1/gdb/gdbserver/README gdb-10.2/gdb/gdbserver/README --- gdb-9.1/gdb/gdbserver/README 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/README 1970-01-01 00:00:00.000000000 +0000 @@ -1,152 +0,0 @@ - README for GDBserver & GDBreplay - by Stu Grossman and Fred Fish - -Introduction: - -This is GDBserver, a remote server for Un*x-like systems. It can be used to -control the execution of a program on a target system from a GDB on a different -host. GDB and GDBserver communicate using the standard remote serial protocol -implemented in remote.c, and various *-stub.c files. They communicate via -either a serial line or a TCP connection. - -For more information about GDBserver, see the GDB manual. - -Usage (server (target) side): - -First, you need to have a copy of the program you want to debug put onto -the target system. The program can be stripped to save space if needed, as -GDBserver doesn't care about symbols. All symbol handling is taken care of by -the GDB running on the host system. - -To use the server, you log on to the target system, and run the `gdbserver' -program. You must tell it (a) how to communicate with GDB, (b) the name of -your program, and (c) its arguments. The general syntax is: - - target> gdbserver COMM PROGRAM [ARGS ...] - -For example, using a serial port, you might say: - - target> gdbserver /dev/com1 emacs foo.txt - -This tells GDBserver to debug emacs with an argument of foo.txt, and to -communicate with GDB via /dev/com1. GDBserver now waits patiently for the -host GDB to communicate with it. - -To use a TCP connection, you could say: - - target> gdbserver host:2345 emacs foo.txt - -This says pretty much the same thing as the last example, except that we are -going to communicate with the host GDB via TCP. The `host:2345' argument means -that we are expecting to see a TCP connection from `host' to local TCP port -2345. (Currently, the `host' part is ignored.) You can choose any number you -want for the port number as long as it does not conflict with any existing TCP -ports on the target system. This same port number must be used in the host -GDBs `target remote' command, which will be described shortly. Note that if -you chose a port number that conflicts with another service, GDBserver will -print an error message and exit. - -On some targets, GDBserver can also attach to running programs. This is -accomplished via the --attach argument. The syntax is: - - target> gdbserver --attach COMM PID - -PID is the process ID of a currently running process. It isn't necessary -to point GDBserver at a binary for the running process. - -Usage (host side): - -You need an unstripped copy of the target program on your host system, since -GDB needs to examine it's symbol tables and such. Start up GDB as you normally -would, with the target program as the first argument. (You may need to use the ---baud option if the serial line is running at anything except 9600 baud.) -Ie: `gdb TARGET-PROG', or `gdb --baud BAUD TARGET-PROG'. After that, the only -new command you need to know about is `target remote'. It's argument is either -a device name (usually a serial device, like `/dev/ttyb'), or a HOST:PORT -descriptor. For example: - - (gdb) target remote /dev/ttyb - -communicates with the server via serial line /dev/ttyb, and: - - (gdb) target remote the-target:2345 - -communicates via a TCP connection to port 2345 on host `the-target', where -you previously started up GDBserver with the same port number. Note that for -TCP connections, you must start up GDBserver prior to using the `target remote' -command, otherwise you may get an error that looks something like -`Connection refused'. - -Building GDBserver: - -The supported targets as of November 2006 are: - arm-*-linux* - bfin-*-uclinux - bfin-*-linux-uclibc - crisv32-*-linux* - cris-*-linux* - i[34567]86-*-cygwin* - i[34567]86-*-linux* - i[34567]86-*-mingw* - ia64-*-linux* - m32r*-*-linux* - m68*-*-linux* - m68*-*-uclinux* - mips*64*-*-linux* - mips*-*-linux* - powerpc[64]-*-linux* - s390[x]-*-linux* - sh-*-linux* - spu*-*-* - x86_64-*-linux* - -Configuring GDBserver you should specify the same machine for host and -target (which are the machine that GDBserver is going to run on. This -is not the same as the machine that GDB is going to run on; building -GDBserver automatically as part of building a whole tree of tools does -not currently work if cross-compilation is involved (we don't get the -right CC in the Makefile, to start with)). - -Building GDBserver for your target is very straightforward. If you build -GDB natively on a target which GDBserver supports, it will be built -automatically when you build GDB. You can also build just GDBserver: - - % mkdir obj - % cd obj - % path-to-gdbserver-sources/configure - % make - -If you prefer to cross-compile to your target, then you can also build -GDBserver that way. In a Bourne shell, for example: - - % export CC=your-cross-compiler - % path-to-gdbserver-sources/configure your-target-name - % make - -Using GDBreplay: - -A special hacked down version of GDBserver can be used to replay remote -debug log files created by GDB. Before using the GDB "target" command to -initiate a remote debug session, use "set remotelogfile <filename>" to tell -GDB that you want to make a recording of the serial or tcp session. Note -that when replaying the session, GDB communicates with GDBreplay via tcp, -regardless of whether the original session was via a serial link or tcp. - -Once you are done with the remote debug session, start GDBreplay and -tell it the name of the log file and the host and port number that GDB -should connect to (typically the same as the host running GDB): - - $ gdbreplay logfile host:port - -Then start GDB (preferably in a different screen or window) and use the -"target" command to connect to GDBreplay: - - (gdb) target remote host:port - -Repeat the same sequence of user commands to GDB that you gave in the -original debug session. GDB should not be able to tell that it is talking -to GDBreplay rather than a real target, all other things being equal. Note -that GDBreplay echos the command lines to stderr, as well as the contents of -the packets it sends and receives. The last command echoed by GDBreplay is -the next command that needs to be typed to GDB to continue the session in -sync with the original session. diff -Nru gdb-9.1/gdb/gdbserver/regcache.c gdb-10.2/gdb/gdbserver/regcache.c --- gdb-9.1/gdb/gdbserver/regcache.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/regcache.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,528 +0,0 @@ -/* Register support routines for the remote server for GDB. - Copyright (C) 2001-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "server.h" -#include "regdef.h" -#include "gdbthread.h" -#include "tdesc.h" -#include "gdbsupport/rsp-low.h" -#ifndef IN_PROCESS_AGENT - -struct regcache * -get_thread_regcache (struct thread_info *thread, int fetch) -{ - struct regcache *regcache; - - regcache = thread_regcache_data (thread); - - /* Threads' regcaches are created lazily, because biarch targets add - the main thread/lwp before seeing it stop for the first time, and - it is only after the target sees the thread stop for the first - time that the target has a chance of determining the process's - architecture. IOW, when we first add the process's main thread - we don't know which architecture/tdesc its regcache should - have. */ - 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); - } - - if (fetch && regcache->registers_valid == 0) - { - struct thread_info *saved_thread = current_thread; - - current_thread = thread; - /* Invalidate all registers, to prevent stale left-overs. */ - memset (regcache->register_status, REG_UNAVAILABLE, - regcache->tdesc->reg_defs.size ()); - fetch_inferior_registers (regcache, -1); - current_thread = saved_thread; - regcache->registers_valid = 1; - } - - return regcache; -} - -/* See gdbsupport/common-regcache.h. */ - -struct regcache * -get_thread_regcache_for_ptid (ptid_t ptid) -{ - return get_thread_regcache (find_thread_ptid (ptid), 1); -} - -void -regcache_invalidate_thread (struct thread_info *thread) -{ - struct regcache *regcache; - - regcache = thread_regcache_data (thread); - - if (regcache == NULL) - return; - - if (regcache->registers_valid) - { - struct thread_info *saved_thread = current_thread; - - current_thread = thread; - store_inferior_registers (regcache, -1); - current_thread = saved_thread; - } - - regcache->registers_valid = 0; -} - -/* See regcache.h. */ - -void -regcache_invalidate_pid (int pid) -{ - /* Only invalidate the regcaches of threads of this process. */ - for_each_thread (pid, regcache_invalidate_thread); -} - -/* See regcache.h. */ - -void -regcache_invalidate (void) -{ - /* Only update the threads of the current process. */ - int pid = current_thread->id.pid (); - - regcache_invalidate_pid (pid); -} - -#endif - -struct regcache * -init_register_cache (struct regcache *regcache, - const struct target_desc *tdesc, - unsigned char *regbuf) -{ - if (regbuf == NULL) - { -#ifndef IN_PROCESS_AGENT - /* Make sure to zero-initialize the register cache when it is - created, in case there are registers the target never - fetches. This way they'll read as zero instead of - garbage. */ - regcache->tdesc = tdesc; - regcache->registers - = (unsigned char *) xcalloc (1, tdesc->registers_size); - regcache->registers_owned = 1; - regcache->register_status - = (unsigned char *) xmalloc (tdesc->reg_defs.size ()); - memset ((void *) regcache->register_status, REG_UNAVAILABLE, - tdesc->reg_defs.size ()); -#else - gdb_assert_not_reached ("can't allocate memory from the heap"); -#endif - } - else - { - regcache->tdesc = tdesc; - regcache->registers = regbuf; - regcache->registers_owned = 0; -#ifndef IN_PROCESS_AGENT - regcache->register_status = NULL; -#endif - } - - regcache->registers_valid = 0; - - return regcache; -} - -#ifndef IN_PROCESS_AGENT - -struct regcache * -new_register_cache (const struct target_desc *tdesc) -{ - struct regcache *regcache = new struct regcache; - - gdb_assert (tdesc->registers_size != 0); - - return init_register_cache (regcache, tdesc, NULL); -} - -void -free_register_cache (struct regcache *regcache) -{ - if (regcache) - { - if (regcache->registers_owned) - free (regcache->registers); - free (regcache->register_status); - delete regcache; - } -} - -#endif - -void -regcache_cpy (struct regcache *dst, struct regcache *src) -{ - gdb_assert (src != NULL && dst != NULL); - gdb_assert (src->tdesc == dst->tdesc); - gdb_assert (src != dst); - - memcpy (dst->registers, src->registers, src->tdesc->registers_size); -#ifndef IN_PROCESS_AGENT - if (dst->register_status != NULL && src->register_status != NULL) - memcpy (dst->register_status, src->register_status, - src->tdesc->reg_defs.size ()); -#endif - dst->registers_valid = src->registers_valid; -} - -/* Return a reference to the description of register N. */ - -static const struct reg & -find_register_by_number (const struct target_desc *tdesc, int n) -{ - return tdesc->reg_defs[n]; -} - -#ifndef IN_PROCESS_AGENT - -void -registers_to_string (struct regcache *regcache, char *buf) -{ - unsigned char *registers = regcache->registers; - const struct target_desc *tdesc = regcache->tdesc; - - for (int i = 0; i < tdesc->reg_defs.size (); ++i) - { - if (regcache->register_status[i] == REG_VALID) - { - bin2hex (registers, buf, register_size (tdesc, i)); - buf += register_size (tdesc, i) * 2; - } - else - { - memset (buf, 'x', register_size (tdesc, i) * 2); - buf += register_size (tdesc, i) * 2; - } - registers += register_size (tdesc, i); - } - *buf = '\0'; -} - -void -registers_from_string (struct regcache *regcache, char *buf) -{ - int len = strlen (buf); - unsigned char *registers = regcache->registers; - const struct target_desc *tdesc = regcache->tdesc; - - if (len != tdesc->registers_size * 2) - { - warning ("Wrong sized register packet (expected %d bytes, got %d)", - 2 * tdesc->registers_size, len); - if (len > tdesc->registers_size * 2) - len = tdesc->registers_size * 2; - } - hex2bin (buf, registers, len / 2); -} - -int -find_regno (const struct target_desc *tdesc, const char *name) -{ - for (int i = 0; i < tdesc->reg_defs.size (); ++i) - { - if (strcmp (name, find_register_by_number (tdesc, i).name) == 0) - return i; - } - internal_error (__FILE__, __LINE__, "Unknown register %s requested", - name); -} - -static void -free_register_cache_thread (struct thread_info *thread) -{ - struct regcache *regcache = thread_regcache_data (thread); - - if (regcache != NULL) - { - regcache_invalidate_thread (thread); - free_register_cache (regcache); - set_thread_regcache_data (thread, NULL); - } -} - -void -regcache_release (void) -{ - /* Flush and release all pre-existing register caches. */ - for_each_thread (free_register_cache_thread); -} -#endif - -int -register_cache_size (const struct target_desc *tdesc) -{ - return tdesc->registers_size; -} - -int -register_size (const struct target_desc *tdesc, int n) -{ - return find_register_by_number (tdesc, n).size / 8; -} - -/* See gdbsupport/common-regcache.h. */ - -int -regcache_register_size (const struct regcache *regcache, int n) -{ - return register_size (regcache->tdesc, n); -} - -static unsigned char * -register_data (const struct regcache *regcache, int n, int fetch) -{ - return (regcache->registers - + find_register_by_number (regcache->tdesc, n).offset / 8); -} - -void -supply_register (struct regcache *regcache, int n, const void *buf) -{ - return regcache->raw_supply (n, buf); -} - -/* See gdbsupport/common-regcache.h. */ - -void -regcache::raw_supply (int n, const void *buf) -{ - if (buf) - { - memcpy (register_data (this, n, 0), buf, register_size (tdesc, n)); -#ifndef IN_PROCESS_AGENT - if (register_status != NULL) - register_status[n] = REG_VALID; -#endif - } - else - { - memset (register_data (this, n, 0), 0, register_size (tdesc, n)); -#ifndef IN_PROCESS_AGENT - if (register_status != NULL) - register_status[n] = REG_UNAVAILABLE; -#endif - } -} - -/* Supply register N with value zero to REGCACHE. */ - -void -supply_register_zeroed (struct regcache *regcache, int n) -{ - memset (register_data (regcache, n, 0), 0, - register_size (regcache->tdesc, n)); -#ifndef IN_PROCESS_AGENT - if (regcache->register_status != NULL) - regcache->register_status[n] = REG_VALID; -#endif -} - -#ifndef IN_PROCESS_AGENT - -/* Supply register called NAME with value zero to REGCACHE. */ - -void -supply_register_by_name_zeroed (struct regcache *regcache, - const char *name) -{ - supply_register_zeroed (regcache, find_regno (regcache->tdesc, name)); -} - -#endif - -/* Supply the whole register set whose contents are stored in BUF, to - REGCACHE. If BUF is NULL, all the registers' values are recorded - as unavailable. */ - -void -supply_regblock (struct regcache *regcache, const void *buf) -{ - if (buf) - { - const struct target_desc *tdesc = regcache->tdesc; - - memcpy (regcache->registers, buf, tdesc->registers_size); -#ifndef IN_PROCESS_AGENT - { - int i; - - for (i = 0; i < tdesc->reg_defs.size (); i++) - regcache->register_status[i] = REG_VALID; - } -#endif - } - else - { - const struct target_desc *tdesc = regcache->tdesc; - - memset (regcache->registers, 0, tdesc->registers_size); -#ifndef IN_PROCESS_AGENT - { - int i; - - for (i = 0; i < tdesc->reg_defs.size (); i++) - regcache->register_status[i] = REG_UNAVAILABLE; - } -#endif - } -} - -#ifndef IN_PROCESS_AGENT - -void -supply_register_by_name (struct regcache *regcache, - const char *name, const void *buf) -{ - supply_register (regcache, find_regno (regcache->tdesc, name), buf); -} - -#endif - -void -collect_register (struct regcache *regcache, int n, void *buf) -{ - regcache->raw_collect (n, buf); -} - -/* See gdbsupport/common-regcache.h. */ - -void -regcache::raw_collect (int n, void *buf) const -{ - memcpy (buf, register_data (this, n, 1), register_size (tdesc, n)); -} - -enum register_status -regcache_raw_read_unsigned (struct regcache *regcache, int regnum, - ULONGEST *val) -{ - int size; - - gdb_assert (regcache != NULL); - gdb_assert (regnum >= 0 - && regnum < regcache->tdesc->reg_defs.size ()); - - size = register_size (regcache->tdesc, regnum); - - if (size > (int) sizeof (ULONGEST)) - error (_("That operation is not available on integers of more than" - "%d bytes."), - (int) sizeof (ULONGEST)); - - *val = 0; - collect_register (regcache, regnum, val); - - return REG_VALID; -} - -#ifndef IN_PROCESS_AGENT - -/* See regcache.h. */ - -ULONGEST -regcache_raw_get_unsigned_by_name (struct regcache *regcache, - const char *name) -{ - return regcache_raw_get_unsigned (regcache, - find_regno (regcache->tdesc, name)); -} - -void -collect_register_as_string (struct regcache *regcache, int n, char *buf) -{ - bin2hex (register_data (regcache, n, 1), buf, - register_size (regcache->tdesc, n)); -} - -void -collect_register_by_name (struct regcache *regcache, - const char *name, void *buf) -{ - collect_register (regcache, find_regno (regcache->tdesc, name), buf); -} - -/* Special handling for register PC. */ - -CORE_ADDR -regcache_read_pc (struct regcache *regcache) -{ - CORE_ADDR pc_val; - - if (the_target->read_pc) - pc_val = the_target->read_pc (regcache); - else - internal_error (__FILE__, __LINE__, - "regcache_read_pc: Unable to find PC"); - - return pc_val; -} - -void -regcache_write_pc (struct regcache *regcache, CORE_ADDR pc) -{ - if (the_target->write_pc) - the_target->write_pc (regcache, pc); - else - internal_error (__FILE__, __LINE__, - "regcache_write_pc: Unable to update PC"); -} - -#endif - -/* See gdbsupport/common-regcache.h. */ - -enum register_status -regcache::get_register_status (int regnum) const -{ -#ifndef IN_PROCESS_AGENT - gdb_assert (regnum >= 0 && regnum < tdesc->reg_defs.size ()); - return (enum register_status) (register_status[regnum]); -#else - return REG_VALID; -#endif -} - -/* See gdbsupport/common-regcache.h. */ - -bool -regcache::raw_compare (int regnum, const void *buf, int offset) const -{ - gdb_assert (buf != NULL); - - const unsigned char *regbuf = register_data (this, regnum, 1); - int size = register_size (tdesc, regnum); - gdb_assert (size >= offset); - - return (memcmp (buf, regbuf + offset, size - offset) == 0); -} diff -Nru gdb-9.1/gdb/gdbserver/regcache.h gdb-10.2/gdb/gdbserver/regcache.h --- gdb-9.1/gdb/gdbserver/regcache.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/regcache.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,141 +0,0 @@ -/* Register support routines for the remote server for GDB. - Copyright (C) 2001-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef GDBSERVER_REGCACHE_H -#define GDBSERVER_REGCACHE_H - -#include "gdbsupport/common-regcache.h" - -struct thread_info; -struct target_desc; - -/* The data for the register cache. Note that we have one per - inferior; this is primarily for simplicity, as the performance - benefit is minimal. */ - -struct regcache : public reg_buffer_common -{ - /* The regcache's target description. */ - const struct target_desc *tdesc = nullptr; - - /* Whether the REGISTERS buffer's contents are valid. If false, we - haven't fetched the registers from the target yet. Not that this - register cache is _not_ pass-through, unlike GDB's. Note that - "valid" here is unrelated to whether the registers are available - in a traceframe. For that, check REGISTER_STATUS below. */ - int registers_valid = 0; - int registers_owned = 0; - unsigned char *registers = nullptr; -#ifndef IN_PROCESS_AGENT - /* One of REG_UNAVAILABLE or REG_VALID. */ - unsigned char *register_status = nullptr; -#endif - - /* See gdbsupport/common-regcache.h. */ - enum register_status get_register_status (int regnum) const override; - - /* See gdbsupport/common-regcache.h. */ - void raw_supply (int regnum, const void *buf) override; - - /* See gdbsupport/common-regcache.h. */ - void raw_collect (int regnum, void *buf) const override; - - /* See gdbsupport/common-regcache.h. */ - bool raw_compare (int regnum, const void *buf, int offset) const override; -}; - -struct regcache *init_register_cache (struct regcache *regcache, - const struct target_desc *tdesc, - unsigned char *regbuf); - -void regcache_cpy (struct regcache *dst, struct regcache *src); - -/* Create a new register cache for INFERIOR. */ - -struct regcache *new_register_cache (const struct target_desc *tdesc); - -struct regcache *get_thread_regcache (struct thread_info *thread, int fetch); - -/* Release all memory associated with the register cache for INFERIOR. */ - -void free_register_cache (struct regcache *regcache); - -/* Invalidate cached registers for one thread. */ - -void regcache_invalidate_thread (struct thread_info *); - -/* Invalidate cached registers for all threads of the given process. */ - -void regcache_invalidate_pid (int pid); - -/* Invalidate cached registers for all threads of the current - process. */ - -void regcache_invalidate (void); - -/* Invalidate and release the register cache of all threads of the - current process. */ - -void regcache_release (void); - -/* Convert all registers to a string in the currently specified remote - format. */ - -void registers_to_string (struct regcache *regcache, char *buf); - -/* Convert a string to register values and fill our register cache. */ - -void registers_from_string (struct regcache *regcache, char *buf); - -/* For regcache_read_pc see gdbsupport/common-regcache.h. */ - -void regcache_write_pc (struct regcache *regcache, CORE_ADDR pc); - -int register_cache_size (const struct target_desc *tdesc); - -int register_size (const struct target_desc *tdesc, int n); - -int find_regno (const struct target_desc *tdesc, const char *name); - -void supply_register (struct regcache *regcache, int n, const void *buf); - -void supply_register_zeroed (struct regcache *regcache, int n); - -void supply_register_by_name (struct regcache *regcache, - const char *name, const void *buf); - -void supply_register_by_name_zeroed (struct regcache *regcache, - const char *name); - -void supply_regblock (struct regcache *regcache, const void *buf); - -void collect_register (struct regcache *regcache, int n, void *buf); - -void collect_register_as_string (struct regcache *regcache, int n, char *buf); - -void collect_register_by_name (struct regcache *regcache, - const char *name, void *buf); - -/* Read a raw register as an unsigned integer. Convenience wrapper - around regcache_raw_get_unsigned that takes a register name instead - of a register number. */ - -ULONGEST regcache_raw_get_unsigned_by_name (struct regcache *regcache, - const char *name); - -#endif /* GDBSERVER_REGCACHE_H */ diff -Nru gdb-9.1/gdb/gdbserver/remote-utils.c gdb-10.2/gdb/gdbserver/remote-utils.c --- gdb-9.1/gdb/gdbserver/remote-utils.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/remote-utils.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,1691 +0,0 @@ -/* Remote utility routines for the remote server for GDB. - Copyright (C) 1986-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "server.h" -#if HAVE_TERMIOS_H -#include <termios.h> -#endif -#include "target.h" -#include "gdbthread.h" -#include "tdesc.h" -#include "debug.h" -#include "dll.h" -#include "gdbsupport/rsp-low.h" -#include "gdbsupport/netstuff.h" -#include "gdbsupport/filestuff.h" -#include "gdbsupport/gdb-sigmask.h" -#include <ctype.h> -#if HAVE_SYS_IOCTL_H -#include <sys/ioctl.h> -#endif -#if HAVE_SYS_FILE_H -#include <sys/file.h> -#endif -#if HAVE_NETINET_IN_H -#include <netinet/in.h> -#endif -#if HAVE_SYS_SOCKET_H -#include <sys/socket.h> -#endif -#if HAVE_NETDB_H -#include <netdb.h> -#endif -#if HAVE_NETINET_TCP_H -#include <netinet/tcp.h> -#endif -#if HAVE_SYS_IOCTL_H -#include <sys/ioctl.h> -#endif -#if HAVE_SIGNAL_H -#include <signal.h> -#endif -#if HAVE_FCNTL_H -#include <fcntl.h> -#endif -#include "gdbsupport/gdb_sys_time.h" -#include <unistd.h> -#if HAVE_ARPA_INET_H -#include <arpa/inet.h> -#endif -#include <sys/stat.h> - -#if USE_WIN32API -#include <ws2tcpip.h> -#endif - -#if __QNX__ -#include <sys/iomgr.h> -#endif /* __QNX__ */ - -#ifndef HAVE_SOCKLEN_T -typedef int socklen_t; -#endif - -#ifndef IN_PROCESS_AGENT - -#if USE_WIN32API -# define INVALID_DESCRIPTOR INVALID_SOCKET -#else -# define INVALID_DESCRIPTOR -1 -#endif - -/* Extra value for readchar_callback. */ -enum { - /* The callback is currently not scheduled. */ - NOT_SCHEDULED = -1 -}; - -/* Status of the readchar callback. - Either NOT_SCHEDULED or the callback id. */ -static int readchar_callback = NOT_SCHEDULED; - -static int readchar (void); -static void reset_readchar (void); -static void reschedule (void); - -/* A cache entry for a successfully looked-up symbol. */ -struct sym_cache -{ - char *name; - CORE_ADDR addr; - struct sym_cache *next; -}; - -static int remote_is_stdio = 0; - -static gdb_fildes_t remote_desc = INVALID_DESCRIPTOR; -static gdb_fildes_t listen_desc = INVALID_DESCRIPTOR; - -#ifdef USE_WIN32API -# define read(fd, buf, len) recv (fd, (char *) buf, len, 0) -# define write(fd, buf, len) send (fd, (char *) buf, len, 0) -#endif - -int -gdb_connected (void) -{ - return remote_desc != INVALID_DESCRIPTOR; -} - -/* Return true if the remote connection is over stdio. */ - -int -remote_connection_is_stdio (void) -{ - return remote_is_stdio; -} - -static void -enable_async_notification (int fd) -{ -#if defined(F_SETFL) && defined (FASYNC) - int save_fcntl_flags; - - save_fcntl_flags = fcntl (fd, F_GETFL, 0); - fcntl (fd, F_SETFL, save_fcntl_flags | FASYNC); -#if defined (F_SETOWN) - fcntl (fd, F_SETOWN, getpid ()); -#endif -#endif -} - -static int -handle_accept_event (int err, gdb_client_data client_data) -{ - struct sockaddr_storage sockaddr; - socklen_t len = sizeof (sockaddr); - - if (debug_threads) - debug_printf ("handling possible accept event\n"); - - remote_desc = accept (listen_desc, (struct sockaddr *) &sockaddr, &len); - if (remote_desc == -1) - perror_with_name ("Accept failed"); - - /* Enable TCP keep alive process. */ - socklen_t tmp = 1; - setsockopt (remote_desc, SOL_SOCKET, SO_KEEPALIVE, - (char *) &tmp, sizeof (tmp)); - - /* Tell TCP not to delay small packets. This greatly speeds up - interactive response. */ - tmp = 1; - setsockopt (remote_desc, IPPROTO_TCP, TCP_NODELAY, - (char *) &tmp, sizeof (tmp)); - -#ifndef USE_WIN32API - signal (SIGPIPE, SIG_IGN); /* If we don't do this, then gdbserver simply - exits when the remote side dies. */ -#endif - - if (run_once) - { -#ifndef USE_WIN32API - close (listen_desc); /* No longer need this */ -#else - closesocket (listen_desc); /* No longer need this */ -#endif - } - - /* Even if !RUN_ONCE no longer notice new connections. Still keep the - descriptor open for add_file_handler to wait for a new connection. */ - delete_file_handler (listen_desc); - - /* Convert IP address to string. */ - char orig_host[GDB_NI_MAX_ADDR], orig_port[GDB_NI_MAX_PORT]; - - int r = getnameinfo ((struct sockaddr *) &sockaddr, len, - orig_host, sizeof (orig_host), - orig_port, sizeof (orig_port), - NI_NUMERICHOST | NI_NUMERICSERV); - - if (r != 0) - fprintf (stderr, _("Could not obtain remote address: %s\n"), - gai_strerror (r)); - else - fprintf (stderr, _("Remote debugging from host %s, port %s\n"), - orig_host, orig_port); - - enable_async_notification (remote_desc); - - /* Register the event loop handler. */ - add_file_handler (remote_desc, handle_serial_event, NULL); - - /* We have a new GDB connection now. If we were disconnected - tracing, there's a window where the target could report a stop - event to the event loop, and since we have a connection now, we'd - try to send vStopped notifications to GDB. But, don't do that - until GDB as selected all-stop/non-stop, and has queried the - threads' status ('?'). */ - target_async (0); - - return 0; -} - -/* Prepare for a later connection to a remote debugger. - NAME is the filename used for communication. */ - -void -remote_prepare (const char *name) -{ - client_state &cs = get_client_state (); -#ifdef USE_WIN32API - static int winsock_initialized; -#endif - socklen_t tmp; - - remote_is_stdio = 0; - if (strcmp (name, STDIO_CONNECTION_NAME) == 0) - { - /* We need to record fact that we're using stdio sooner than the - call to remote_open so start_inferior knows the connection is - via stdio. */ - remote_is_stdio = 1; - cs.transport_is_reliable = 1; - return; - } - - struct addrinfo hint; - struct addrinfo *ainfo; - - memset (&hint, 0, sizeof (hint)); - /* Assume no prefix will be passed, therefore we should use - AF_UNSPEC. */ - hint.ai_family = AF_UNSPEC; - hint.ai_socktype = SOCK_STREAM; - hint.ai_protocol = IPPROTO_TCP; - - parsed_connection_spec parsed - = parse_connection_spec_without_prefix (name, &hint); - - if (parsed.port_str.empty ()) - { - cs.transport_is_reliable = 0; - return; - } - -#ifdef USE_WIN32API - if (!winsock_initialized) - { - WSADATA wsad; - - WSAStartup (MAKEWORD (1, 0), &wsad); - winsock_initialized = 1; - } -#endif - - int r = getaddrinfo (parsed.host_str.c_str (), parsed.port_str.c_str (), - &hint, &ainfo); - - if (r != 0) - error (_("%s: cannot resolve name: %s"), name, gai_strerror (r)); - - scoped_free_addrinfo freeaddrinfo (ainfo); - - struct addrinfo *iter; - - for (iter = ainfo; iter != NULL; iter = iter->ai_next) - { - listen_desc = gdb_socket_cloexec (iter->ai_family, iter->ai_socktype, - iter->ai_protocol); - - if (listen_desc >= 0) - break; - } - - if (iter == NULL) - perror_with_name ("Can't open socket"); - - /* Allow rapid reuse of this port. */ - tmp = 1; - setsockopt (listen_desc, SOL_SOCKET, SO_REUSEADDR, (char *) &tmp, - sizeof (tmp)); - - switch (iter->ai_family) - { - case AF_INET: - ((struct sockaddr_in *) iter->ai_addr)->sin_addr.s_addr = INADDR_ANY; - break; - case AF_INET6: - ((struct sockaddr_in6 *) iter->ai_addr)->sin6_addr = in6addr_any; - break; - default: - internal_error (__FILE__, __LINE__, - _("Invalid 'ai_family' %d\n"), iter->ai_family); - } - - if (bind (listen_desc, iter->ai_addr, iter->ai_addrlen) != 0) - perror_with_name ("Can't bind address"); - - if (listen (listen_desc, 1) != 0) - perror_with_name ("Can't listen on socket"); - - cs.transport_is_reliable = 1; -} - -/* Open a connection to a remote debugger. - NAME is the filename used for communication. */ - -void -remote_open (const char *name) -{ - const char *port_str; - - port_str = strchr (name, ':'); -#ifdef USE_WIN32API - if (port_str == NULL) - error ("Only HOST:PORT is supported on this platform."); -#endif - - if (strcmp (name, STDIO_CONNECTION_NAME) == 0) - { - fprintf (stderr, "Remote debugging using stdio\n"); - - /* Use stdin as the handle of the connection. - We only select on reads, for example. */ - remote_desc = fileno (stdin); - - enable_async_notification (remote_desc); - - /* Register the event loop handler. */ - add_file_handler (remote_desc, handle_serial_event, NULL); - } -#ifndef USE_WIN32API - else if (port_str == NULL) - { - struct stat statbuf; - - if (stat (name, &statbuf) == 0 - && (S_ISCHR (statbuf.st_mode) || S_ISFIFO (statbuf.st_mode))) - remote_desc = open (name, O_RDWR); - else - { - errno = EINVAL; - remote_desc = -1; - } - - if (remote_desc < 0) - perror_with_name ("Could not open remote device"); - -#if HAVE_TERMIOS_H - { - struct termios termios; - tcgetattr (remote_desc, &termios); - - termios.c_iflag = 0; - termios.c_oflag = 0; - termios.c_lflag = 0; - termios.c_cflag &= ~(CSIZE | PARENB); - termios.c_cflag |= CLOCAL | CS8; - termios.c_cc[VMIN] = 1; - termios.c_cc[VTIME] = 0; - - tcsetattr (remote_desc, TCSANOW, &termios); - } -#endif - - fprintf (stderr, "Remote debugging using %s\n", name); - - enable_async_notification (remote_desc); - - /* Register the event loop handler. */ - add_file_handler (remote_desc, handle_serial_event, NULL); - } -#endif /* USE_WIN32API */ - else - { - char listen_port[GDB_NI_MAX_PORT]; - struct sockaddr_storage sockaddr; - socklen_t len = sizeof (sockaddr); - - if (getsockname (listen_desc, (struct sockaddr *) &sockaddr, &len) < 0) - perror_with_name ("Can't determine port"); - - int r = getnameinfo ((struct sockaddr *) &sockaddr, len, - NULL, 0, - listen_port, sizeof (listen_port), - NI_NUMERICSERV); - - if (r != 0) - fprintf (stderr, _("Can't obtain port where we are listening: %s"), - gai_strerror (r)); - else - fprintf (stderr, _("Listening on port %s\n"), listen_port); - - fflush (stderr); - - /* Register the event loop handler. */ - add_file_handler (listen_desc, handle_accept_event, NULL); - } -} - -void -remote_close (void) -{ - delete_file_handler (remote_desc); - - disable_async_io (); - -#ifdef USE_WIN32API - closesocket (remote_desc); -#else - if (! remote_connection_is_stdio ()) - close (remote_desc); -#endif - remote_desc = INVALID_DESCRIPTOR; - - reset_readchar (); -} - -#endif - -#ifndef IN_PROCESS_AGENT - -void -decode_address (CORE_ADDR *addrp, const char *start, int len) -{ - CORE_ADDR addr; - char ch; - int i; - - addr = 0; - for (i = 0; i < len; i++) - { - ch = start[i]; - addr = addr << 4; - addr = addr | (fromhex (ch) & 0x0f); - } - *addrp = addr; -} - -const char * -decode_address_to_semicolon (CORE_ADDR *addrp, const char *start) -{ - const char *end; - - end = start; - while (*end != '\0' && *end != ';') - end++; - - decode_address (addrp, start, end - start); - - if (*end == ';') - end++; - return end; -} - -#endif - -#ifndef IN_PROCESS_AGENT - -/* Look for a sequence of characters which can be run-length encoded. - If there are any, update *CSUM and *P. Otherwise, output the - single character. Return the number of characters consumed. */ - -static int -try_rle (char *buf, int remaining, unsigned char *csum, char **p) -{ - int n; - - /* Always output the character. */ - *csum += buf[0]; - *(*p)++ = buf[0]; - - /* Don't go past '~'. */ - if (remaining > 97) - remaining = 97; - - for (n = 1; n < remaining; n++) - if (buf[n] != buf[0]) - break; - - /* N is the index of the first character not the same as buf[0]. - buf[0] is counted twice, so by decrementing N, we get the number - of characters the RLE sequence will replace. */ - n--; - - if (n < 3) - return 1; - - /* Skip the frame characters. The manual says to skip '+' and '-' - also, but there's no reason to. Unfortunately these two unusable - characters double the encoded length of a four byte zero - value. */ - while (n + 29 == '$' || n + 29 == '#') - n--; - - *csum += '*'; - *(*p)++ = '*'; - *csum += n + 29; - *(*p)++ = n + 29; - - return n + 1; -} - -#endif - -#ifndef IN_PROCESS_AGENT - -/* Write a PTID to BUF. Returns BUF+CHARACTERS_WRITTEN. */ - -char * -write_ptid (char *buf, ptid_t ptid) -{ - client_state &cs = get_client_state (); - int pid, tid; - - if (cs.multi_process) - { - pid = ptid.pid (); - if (pid < 0) - buf += sprintf (buf, "p-%x.", -pid); - else - buf += sprintf (buf, "p%x.", pid); - } - tid = ptid.lwp (); - if (tid < 0) - buf += sprintf (buf, "-%x", -tid); - else - buf += sprintf (buf, "%x", tid); - - return buf; -} - -static ULONGEST -hex_or_minus_one (const char *buf, const char **obuf) -{ - ULONGEST ret; - - if (startswith (buf, "-1")) - { - ret = (ULONGEST) -1; - buf += 2; - } - else - buf = unpack_varlen_hex (buf, &ret); - - if (obuf) - *obuf = buf; - - return ret; -} - -/* Extract a PTID from BUF. If non-null, OBUF is set to the to one - passed the last parsed char. Returns null_ptid on error. */ -ptid_t -read_ptid (const char *buf, const char **obuf) -{ - const char *p = buf; - const char *pp; - ULONGEST pid = 0, tid = 0; - - if (*p == 'p') - { - /* Multi-process ptid. */ - pp = unpack_varlen_hex (p + 1, &pid); - if (*pp != '.') - error ("invalid remote ptid: %s\n", p); - - p = pp + 1; - - tid = hex_or_minus_one (p, &pp); - - if (obuf) - *obuf = pp; - return ptid_t (pid, tid, 0); - } - - /* No multi-process. Just a tid. */ - tid = hex_or_minus_one (p, &pp); - - /* Since GDB is not sending a process id (multi-process extensions - are off), then there's only one process. Default to the first in - the list. */ - pid = pid_of (get_first_process ()); - - if (obuf) - *obuf = pp; - return ptid_t (pid, tid, 0); -} - -/* Write COUNT bytes in BUF to the client. - The result is the number of bytes written or -1 if error. - This may return less than COUNT. */ - -static int -write_prim (const void *buf, int count) -{ - if (remote_connection_is_stdio ()) - return write (fileno (stdout), buf, count); - else - return write (remote_desc, buf, count); -} - -/* Read COUNT bytes from the client and store in BUF. - The result is the number of bytes read or -1 if error. - This may return less than COUNT. */ - -static int -read_prim (void *buf, int count) -{ - if (remote_connection_is_stdio ()) - return read (fileno (stdin), buf, count); - else - return read (remote_desc, buf, count); -} - -/* Send a packet to the remote machine, with error checking. - The data of the packet is in BUF, and the length of the - packet is in CNT. Returns >= 0 on success, -1 otherwise. */ - -static int -putpkt_binary_1 (char *buf, int cnt, int is_notif) -{ - client_state &cs = get_client_state (); - int i; - unsigned char csum = 0; - char *buf2; - char *p; - int cc; - - buf2 = (char *) xmalloc (strlen ("$") + cnt + strlen ("#nn") + 1); - - /* Copy the packet into buffer BUF2, encapsulating it - and giving it a checksum. */ - - p = buf2; - if (is_notif) - *p++ = '%'; - else - *p++ = '$'; - - for (i = 0; i < cnt;) - i += try_rle (buf + i, cnt - i, &csum, &p); - - *p++ = '#'; - *p++ = tohex ((csum >> 4) & 0xf); - *p++ = tohex (csum & 0xf); - - *p = '\0'; - - /* Send it over and over until we get a positive ack. */ - - do - { - if (write_prim (buf2, p - buf2) != p - buf2) - { - perror ("putpkt(write)"); - free (buf2); - return -1; - } - - if (cs.noack_mode || is_notif) - { - /* Don't expect an ack then. */ - if (remote_debug) - { - if (is_notif) - debug_printf ("putpkt (\"%s\"); [notif]\n", buf2); - else - debug_printf ("putpkt (\"%s\"); [noack mode]\n", buf2); - debug_flush (); - } - break; - } - - if (remote_debug) - { - debug_printf ("putpkt (\"%s\"); [looking for ack]\n", buf2); - debug_flush (); - } - - cc = readchar (); - - if (cc < 0) - { - free (buf2); - return -1; - } - - if (remote_debug) - { - debug_printf ("[received '%c' (0x%x)]\n", cc, cc); - debug_flush (); - } - - /* Check for an input interrupt while we're here. */ - if (cc == '\003' && current_thread != NULL) - (*the_target->request_interrupt) (); - } - while (cc != '+'); - - free (buf2); - return 1; /* Success! */ -} - -int -putpkt_binary (char *buf, int cnt) -{ - return putpkt_binary_1 (buf, cnt, 0); -} - -/* Send a packet to the remote machine, with error checking. The data - of the packet is in BUF, and the packet should be a NUL-terminated - string. Returns >= 0 on success, -1 otherwise. */ - -int -putpkt (char *buf) -{ - return putpkt_binary (buf, strlen (buf)); -} - -int -putpkt_notif (char *buf) -{ - return putpkt_binary_1 (buf, strlen (buf), 1); -} - -/* Come here when we get an input interrupt from the remote side. This - interrupt should only be active while we are waiting for the child to do - something. Thus this assumes readchar:bufcnt is 0. - About the only thing that should come through is a ^C, which - will cause us to request child interruption. */ - -static void -input_interrupt (int unused) -{ - fd_set readset; - struct timeval immediate = { 0, 0 }; - - /* Protect against spurious interrupts. This has been observed to - be a problem under NetBSD 1.4 and 1.5. */ - - FD_ZERO (&readset); - FD_SET (remote_desc, &readset); - if (select (remote_desc + 1, &readset, 0, 0, &immediate) > 0) - { - int cc; - char c = 0; - - cc = read_prim (&c, 1); - - if (cc == 0) - { - fprintf (stderr, "client connection closed\n"); - return; - } - else if (cc != 1 || c != '\003') - { - fprintf (stderr, "input_interrupt, count = %d c = %d ", cc, c); - if (isprint (c)) - fprintf (stderr, "('%c')\n", c); - else - fprintf (stderr, "('\\x%02x')\n", c & 0xff); - return; - } - - (*the_target->request_interrupt) (); - } -} - -/* Check if the remote side sent us an interrupt request (^C). */ -void -check_remote_input_interrupt_request (void) -{ - /* This function may be called before establishing communications, - therefore we need to validate the remote descriptor. */ - - if (remote_desc == INVALID_DESCRIPTOR) - return; - - input_interrupt (0); -} - -/* Asynchronous I/O support. SIGIO must be unblocked when waiting, - in order to accept Control-C from the client, and must be blocked - when talking to the client. */ - -static void -block_unblock_async_io (int block) -{ -#ifndef USE_WIN32API - sigset_t sigio_set; - - sigemptyset (&sigio_set); - sigaddset (&sigio_set, SIGIO); - gdb_sigmask (block ? SIG_BLOCK : SIG_UNBLOCK, &sigio_set, NULL); -#endif -} - -#ifdef __QNX__ -static void -nto_comctrl (int enable) -{ - struct sigevent event; - - if (enable) - { - event.sigev_notify = SIGEV_SIGNAL_THREAD; - event.sigev_signo = SIGIO; - event.sigev_code = 0; - event.sigev_value.sival_ptr = NULL; - event.sigev_priority = -1; - ionotify (remote_desc, _NOTIFY_ACTION_POLLARM, _NOTIFY_COND_INPUT, - &event); - } - else - ionotify (remote_desc, _NOTIFY_ACTION_POLL, _NOTIFY_COND_INPUT, NULL); -} -#endif /* __QNX__ */ - - -/* Current state of asynchronous I/O. */ -static int async_io_enabled; - -/* Enable asynchronous I/O. */ -void -enable_async_io (void) -{ - if (async_io_enabled) - return; - - block_unblock_async_io (0); - - async_io_enabled = 1; -#ifdef __QNX__ - nto_comctrl (1); -#endif /* __QNX__ */ -} - -/* Disable asynchronous I/O. */ -void -disable_async_io (void) -{ - if (!async_io_enabled) - return; - - block_unblock_async_io (1); - - async_io_enabled = 0; -#ifdef __QNX__ - nto_comctrl (0); -#endif /* __QNX__ */ - -} - -void -initialize_async_io (void) -{ - /* Make sure that async I/O starts blocked. */ - async_io_enabled = 1; - disable_async_io (); - - /* Install the signal handler. */ -#ifndef USE_WIN32API - signal (SIGIO, input_interrupt); -#endif -} - -/* Internal buffer used by readchar. - These are global to readchar because reschedule_remote needs to be - able to tell whether the buffer is empty. */ - -static unsigned char readchar_buf[BUFSIZ]; -static int readchar_bufcnt = 0; -static unsigned char *readchar_bufp; - -/* Returns next char from remote GDB. -1 if error. */ - -static int -readchar (void) -{ - int ch; - - if (readchar_bufcnt == 0) - { - readchar_bufcnt = read_prim (readchar_buf, sizeof (readchar_buf)); - - if (readchar_bufcnt <= 0) - { - if (readchar_bufcnt == 0) - { - if (remote_debug) - debug_printf ("readchar: Got EOF\n"); - } - else - perror ("readchar"); - - return -1; - } - - readchar_bufp = readchar_buf; - } - - readchar_bufcnt--; - ch = *readchar_bufp++; - reschedule (); - return ch; -} - -/* Reset the readchar state machine. */ - -static void -reset_readchar (void) -{ - readchar_bufcnt = 0; - if (readchar_callback != NOT_SCHEDULED) - { - delete_callback_event (readchar_callback); - readchar_callback = NOT_SCHEDULED; - } -} - -/* Process remaining data in readchar_buf. */ - -static int -process_remaining (void *context) -{ - int res; - - /* This is a one-shot event. */ - readchar_callback = NOT_SCHEDULED; - - if (readchar_bufcnt > 0) - res = handle_serial_event (0, NULL); - else - res = 0; - - return res; -} - -/* If there is still data in the buffer, queue another event to process it, - we can't sleep in select yet. */ - -static void -reschedule (void) -{ - if (readchar_bufcnt > 0 && readchar_callback == NOT_SCHEDULED) - readchar_callback = append_callback_event (process_remaining, NULL); -} - -/* Read a packet from the remote machine, with error checking, - and store it in BUF. Returns length of packet, or negative if error. */ - -int -getpkt (char *buf) -{ - client_state &cs = get_client_state (); - char *bp; - unsigned char csum, c1, c2; - int c; - - while (1) - { - csum = 0; - - while (1) - { - c = readchar (); - - /* The '\003' may appear before or after each packet, so - check for an input interrupt. */ - if (c == '\003') - { - (*the_target->request_interrupt) (); - continue; - } - - if (c == '$') - break; - if (remote_debug) - { - debug_printf ("[getpkt: discarding char '%c']\n", c); - debug_flush (); - } - - if (c < 0) - return -1; - } - - bp = buf; - while (1) - { - c = readchar (); - if (c < 0) - return -1; - if (c == '#') - break; - *bp++ = c; - csum += c; - } - *bp = 0; - - c1 = fromhex (readchar ()); - c2 = fromhex (readchar ()); - - if (csum == (c1 << 4) + c2) - break; - - if (cs.noack_mode) - { - fprintf (stderr, - "Bad checksum, sentsum=0x%x, csum=0x%x, " - "buf=%s [no-ack-mode, Bad medium?]\n", - (c1 << 4) + c2, csum, buf); - /* Not much we can do, GDB wasn't expecting an ack/nac. */ - break; - } - - fprintf (stderr, "Bad checksum, sentsum=0x%x, csum=0x%x, buf=%s\n", - (c1 << 4) + c2, csum, buf); - if (write_prim ("-", 1) != 1) - return -1; - } - - if (!cs.noack_mode) - { - if (remote_debug) - { - debug_printf ("getpkt (\"%s\"); [sending ack] \n", buf); - debug_flush (); - } - - if (write_prim ("+", 1) != 1) - return -1; - - if (remote_debug) - { - debug_printf ("[sent ack]\n"); - debug_flush (); - } - } - else - { - if (remote_debug) - { - debug_printf ("getpkt (\"%s\"); [no ack sent] \n", buf); - debug_flush (); - } - } - - /* The readchar above may have already read a '\003' out of the socket - and moved it to the local buffer. For example, when GDB sends - vCont;c immediately followed by interrupt (see - gdb.base/interrupt-noterm.exp). As soon as we see the vCont;c, we'll - resume the inferior and wait. Since we've already moved the '\003' - to the local buffer, SIGIO won't help. In that case, if we don't - check for interrupt after the vCont;c packet, the interrupt character - would stay in the buffer unattended until after the next (unrelated) - stop. */ - while (readchar_bufcnt > 0 && *readchar_bufp == '\003') - { - /* Consume the interrupt character in the buffer. */ - readchar (); - (*the_target->request_interrupt) (); - } - - return bp - buf; -} - -void -write_ok (char *buf) -{ - buf[0] = 'O'; - buf[1] = 'K'; - buf[2] = '\0'; -} - -void -write_enn (char *buf) -{ - /* Some day, we should define the meanings of the error codes... */ - buf[0] = 'E'; - buf[1] = '0'; - buf[2] = '1'; - buf[3] = '\0'; -} - -#endif - -#ifndef IN_PROCESS_AGENT - -static char * -outreg (struct regcache *regcache, int regno, char *buf) -{ - if ((regno >> 12) != 0) - *buf++ = tohex ((regno >> 12) & 0xf); - if ((regno >> 8) != 0) - *buf++ = tohex ((regno >> 8) & 0xf); - *buf++ = tohex ((regno >> 4) & 0xf); - *buf++ = tohex (regno & 0xf); - *buf++ = ':'; - collect_register_as_string (regcache, regno, buf); - buf += 2 * register_size (regcache->tdesc, regno); - *buf++ = ';'; - - return buf; -} - -void -prepare_resume_reply (char *buf, ptid_t ptid, - struct target_waitstatus *status) -{ - client_state &cs = get_client_state (); - if (debug_threads) - debug_printf ("Writing resume reply for %s:%d\n", - target_pid_to_str (ptid), status->kind); - - switch (status->kind) - { - case TARGET_WAITKIND_STOPPED: - case TARGET_WAITKIND_FORKED: - case TARGET_WAITKIND_VFORKED: - case TARGET_WAITKIND_VFORK_DONE: - case TARGET_WAITKIND_EXECD: - case TARGET_WAITKIND_THREAD_CREATED: - case TARGET_WAITKIND_SYSCALL_ENTRY: - case TARGET_WAITKIND_SYSCALL_RETURN: - { - struct thread_info *saved_thread; - const char **regp; - struct regcache *regcache; - - if ((status->kind == TARGET_WAITKIND_FORKED && cs.report_fork_events) - || (status->kind == TARGET_WAITKIND_VFORKED - && cs.report_vfork_events)) - { - enum gdb_signal signal = GDB_SIGNAL_TRAP; - const char *event = (status->kind == TARGET_WAITKIND_FORKED - ? "fork" : "vfork"); - - sprintf (buf, "T%02x%s:", signal, event); - buf += strlen (buf); - buf = write_ptid (buf, status->value.related_pid); - strcat (buf, ";"); - } - else if (status->kind == TARGET_WAITKIND_VFORK_DONE - && cs.report_vfork_events) - { - enum gdb_signal signal = GDB_SIGNAL_TRAP; - - sprintf (buf, "T%02xvforkdone:;", signal); - } - else if (status->kind == TARGET_WAITKIND_EXECD && cs.report_exec_events) - { - enum gdb_signal signal = GDB_SIGNAL_TRAP; - const char *event = "exec"; - char hexified_pathname[PATH_MAX * 2]; - - sprintf (buf, "T%02x%s:", signal, event); - buf += strlen (buf); - - /* Encode pathname to hexified format. */ - bin2hex ((const gdb_byte *) status->value.execd_pathname, - hexified_pathname, - strlen (status->value.execd_pathname)); - - sprintf (buf, "%s;", hexified_pathname); - xfree (status->value.execd_pathname); - status->value.execd_pathname = NULL; - buf += strlen (buf); - } - else if (status->kind == TARGET_WAITKIND_THREAD_CREATED - && cs.report_thread_events) - { - enum gdb_signal signal = GDB_SIGNAL_TRAP; - - sprintf (buf, "T%02xcreate:;", signal); - } - else if (status->kind == TARGET_WAITKIND_SYSCALL_ENTRY - || status->kind == TARGET_WAITKIND_SYSCALL_RETURN) - { - enum gdb_signal signal = GDB_SIGNAL_TRAP; - const char *event = (status->kind == TARGET_WAITKIND_SYSCALL_ENTRY - ? "syscall_entry" : "syscall_return"); - - sprintf (buf, "T%02x%s:%x;", signal, event, - status->value.syscall_number); - } - else - sprintf (buf, "T%02x", status->value.sig); - - buf += strlen (buf); - - saved_thread = current_thread; - - switch_to_thread (ptid); - - regp = current_target_desc ()->expedite_regs; - - regcache = get_thread_regcache (current_thread, 1); - - if (the_target->stopped_by_watchpoint != NULL - && (*the_target->stopped_by_watchpoint) ()) - { - CORE_ADDR addr; - int i; - - memcpy (buf, "watch:", 6); - buf += 6; - - addr = (*the_target->stopped_data_address) (); - - /* Convert each byte of the address into two hexadecimal - chars. Note that we take sizeof (void *) instead of - sizeof (addr); this is to avoid sending a 64-bit - address to a 32-bit GDB. */ - for (i = sizeof (void *) * 2; i > 0; i--) - *buf++ = tohex ((addr >> (i - 1) * 4) & 0xf); - *buf++ = ';'; - } - else if (cs.swbreak_feature && target_stopped_by_sw_breakpoint ()) - { - sprintf (buf, "swbreak:;"); - buf += strlen (buf); - } - else if (cs.hwbreak_feature && target_stopped_by_hw_breakpoint ()) - { - sprintf (buf, "hwbreak:;"); - buf += strlen (buf); - } - - while (*regp) - { - buf = outreg (regcache, find_regno (regcache->tdesc, *regp), buf); - regp ++; - } - *buf = '\0'; - - /* Formerly, if the debugger had not used any thread features - we would not burden it with a thread status response. This - was for the benefit of GDB 4.13 and older. However, in - recent GDB versions the check (``if (cont_thread != 0)'') - does not have the desired effect because of sillyness in - the way that the remote protocol handles specifying a - thread. Since thread support relies on qSymbol support - anyway, assume GDB can handle threads. */ - - if (using_threads && !disable_packet_Tthread) - { - /* This if (1) ought to be unnecessary. But remote_wait - in GDB will claim this event belongs to inferior_ptid - if we do not specify a thread, and there's no way for - gdbserver to know what inferior_ptid is. */ - if (1 || cs.general_thread != ptid) - { - int core = -1; - /* In non-stop, don't change the general thread behind - GDB's back. */ - if (!non_stop) - cs.general_thread = ptid; - sprintf (buf, "thread:"); - buf += strlen (buf); - buf = write_ptid (buf, ptid); - strcat (buf, ";"); - buf += strlen (buf); - - core = target_core_of_thread (ptid); - - if (core != -1) - { - sprintf (buf, "core:"); - buf += strlen (buf); - sprintf (buf, "%x", core); - strcat (buf, ";"); - buf += strlen (buf); - } - } - } - - if (dlls_changed) - { - strcpy (buf, "library:;"); - buf += strlen (buf); - dlls_changed = 0; - } - - current_thread = saved_thread; - } - break; - case TARGET_WAITKIND_EXITED: - if (cs.multi_process) - sprintf (buf, "W%x;process:%x", - status->value.integer, ptid.pid ()); - else - sprintf (buf, "W%02x", status->value.integer); - break; - case TARGET_WAITKIND_SIGNALLED: - if (cs.multi_process) - sprintf (buf, "X%x;process:%x", - status->value.sig, ptid.pid ()); - else - sprintf (buf, "X%02x", status->value.sig); - break; - case TARGET_WAITKIND_THREAD_EXITED: - sprintf (buf, "w%x;", status->value.integer); - buf += strlen (buf); - buf = write_ptid (buf, ptid); - break; - case TARGET_WAITKIND_NO_RESUMED: - sprintf (buf, "N"); - break; - default: - error ("unhandled waitkind"); - break; - } -} - -void -decode_m_packet (char *from, CORE_ADDR *mem_addr_ptr, unsigned int *len_ptr) -{ - int i = 0, j = 0; - char ch; - *mem_addr_ptr = *len_ptr = 0; - - while ((ch = from[i++]) != ',') - { - *mem_addr_ptr = *mem_addr_ptr << 4; - *mem_addr_ptr |= fromhex (ch) & 0x0f; - } - - for (j = 0; j < 4; j++) - { - if ((ch = from[i++]) == 0) - break; - *len_ptr = *len_ptr << 4; - *len_ptr |= fromhex (ch) & 0x0f; - } -} - -void -decode_M_packet (char *from, CORE_ADDR *mem_addr_ptr, unsigned int *len_ptr, - unsigned char **to_p) -{ - int i = 0; - char ch; - *mem_addr_ptr = *len_ptr = 0; - - while ((ch = from[i++]) != ',') - { - *mem_addr_ptr = *mem_addr_ptr << 4; - *mem_addr_ptr |= fromhex (ch) & 0x0f; - } - - while ((ch = from[i++]) != ':') - { - *len_ptr = *len_ptr << 4; - *len_ptr |= fromhex (ch) & 0x0f; - } - - if (*to_p == NULL) - *to_p = (unsigned char *) xmalloc (*len_ptr); - - hex2bin (&from[i++], *to_p, *len_ptr); -} - -int -decode_X_packet (char *from, int packet_len, CORE_ADDR *mem_addr_ptr, - unsigned int *len_ptr, unsigned char **to_p) -{ - int i = 0; - char ch; - *mem_addr_ptr = *len_ptr = 0; - - while ((ch = from[i++]) != ',') - { - *mem_addr_ptr = *mem_addr_ptr << 4; - *mem_addr_ptr |= fromhex (ch) & 0x0f; - } - - while ((ch = from[i++]) != ':') - { - *len_ptr = *len_ptr << 4; - *len_ptr |= fromhex (ch) & 0x0f; - } - - if (*to_p == NULL) - *to_p = (unsigned char *) xmalloc (*len_ptr); - - if (remote_unescape_input ((const gdb_byte *) &from[i], packet_len - i, - *to_p, *len_ptr) != *len_ptr) - return -1; - - return 0; -} - -/* Decode a qXfer write request. */ - -int -decode_xfer_write (char *buf, int packet_len, CORE_ADDR *offset, - unsigned int *len, unsigned char *data) -{ - char ch; - char *b = buf; - - /* Extract the offset. */ - *offset = 0; - while ((ch = *buf++) != ':') - { - *offset = *offset << 4; - *offset |= fromhex (ch) & 0x0f; - } - - /* Get encoded data. */ - packet_len -= buf - b; - *len = remote_unescape_input ((const gdb_byte *) buf, packet_len, - data, packet_len); - return 0; -} - -/* Decode the parameters of a qSearch:memory packet. */ - -int -decode_search_memory_packet (const char *buf, int packet_len, - CORE_ADDR *start_addrp, - CORE_ADDR *search_space_lenp, - gdb_byte *pattern, unsigned int *pattern_lenp) -{ - const char *p = buf; - - p = decode_address_to_semicolon (start_addrp, p); - p = decode_address_to_semicolon (search_space_lenp, p); - packet_len -= p - buf; - *pattern_lenp = remote_unescape_input ((const gdb_byte *) p, packet_len, - pattern, packet_len); - return 0; -} - -static void -free_sym_cache (struct sym_cache *sym) -{ - if (sym != NULL) - { - free (sym->name); - free (sym); - } -} - -void -clear_symbol_cache (struct sym_cache **symcache_p) -{ - struct sym_cache *sym, *next; - - /* Check the cache first. */ - for (sym = *symcache_p; sym; sym = next) - { - next = sym->next; - free_sym_cache (sym); - } - - *symcache_p = NULL; -} - -/* Get the address of NAME, and return it in ADDRP if found. if - MAY_ASK_GDB is false, assume symbol cache misses are failures. - Returns 1 if the symbol is found, 0 if it is not, -1 on error. */ - -int -look_up_one_symbol (const char *name, CORE_ADDR *addrp, int may_ask_gdb) -{ - client_state &cs = get_client_state (); - char *p, *q; - int len; - struct sym_cache *sym; - struct process_info *proc; - - proc = current_process (); - - /* Check the cache first. */ - for (sym = proc->symbol_cache; sym; sym = sym->next) - if (strcmp (name, sym->name) == 0) - { - *addrp = sym->addr; - return 1; - } - - /* It might not be an appropriate time to look up a symbol, - e.g. while we're trying to fetch registers. */ - if (!may_ask_gdb) - return 0; - - /* Send the request. */ - strcpy (cs.own_buf, "qSymbol:"); - bin2hex ((const gdb_byte *) name, cs.own_buf + strlen ("qSymbol:"), - strlen (name)); - if (putpkt (cs.own_buf) < 0) - return -1; - - /* FIXME: Eventually add buffer overflow checking (to getpkt?) */ - len = getpkt (cs.own_buf); - if (len < 0) - return -1; - - /* We ought to handle pretty much any packet at this point while we - wait for the qSymbol "response". That requires re-entering the - main loop. For now, this is an adequate approximation; allow - GDB to read from memory and handle 'v' packets (for vFile transfers) - while it figures out the address of the symbol. */ - while (1) - { - if (cs.own_buf[0] == 'm') - { - CORE_ADDR mem_addr; - unsigned char *mem_buf; - unsigned int mem_len; - - decode_m_packet (&cs.own_buf[1], &mem_addr, &mem_len); - mem_buf = (unsigned char *) xmalloc (mem_len); - if (read_inferior_memory (mem_addr, mem_buf, mem_len) == 0) - bin2hex (mem_buf, cs.own_buf, mem_len); - else - write_enn (cs.own_buf); - free (mem_buf); - if (putpkt (cs.own_buf) < 0) - return -1; - } - else if (cs.own_buf[0] == 'v') - { - int new_len = -1; - handle_v_requests (cs.own_buf, len, &new_len); - if (new_len != -1) - putpkt_binary (cs.own_buf, new_len); - else - putpkt (cs.own_buf); - } - else - break; - len = getpkt (cs.own_buf); - if (len < 0) - return -1; - } - - if (!startswith (cs.own_buf, "qSymbol:")) - { - warning ("Malformed response to qSymbol, ignoring: %s", cs.own_buf); - return -1; - } - - p = cs.own_buf + strlen ("qSymbol:"); - q = p; - while (*q && *q != ':') - q++; - - /* Make sure we found a value for the symbol. */ - if (p == q || *q == '\0') - return 0; - - decode_address (addrp, p, q - p); - - /* Save the symbol in our cache. */ - sym = XNEW (struct sym_cache); - sym->name = xstrdup (name); - sym->addr = *addrp; - sym->next = proc->symbol_cache; - proc->symbol_cache = sym; - - return 1; -} - -/* Relocate an instruction to execute at a different address. OLDLOC - is the address in the inferior memory where the instruction to - relocate is currently at. On input, TO points to the destination - where we want the instruction to be copied (and possibly adjusted) - to. On output, it points to one past the end of the resulting - instruction(s). The effect of executing the instruction at TO - shall be the same as if executing it at OLDLOC. For example, call - instructions that implicitly push the return address on the stack - should be adjusted to return to the instruction after OLDLOC; - relative branches, and other PC-relative instructions need the - offset adjusted; etc. Returns 0 on success, -1 on failure. */ - -int -relocate_instruction (CORE_ADDR *to, CORE_ADDR oldloc) -{ - client_state &cs = get_client_state (); - int len; - ULONGEST written = 0; - - /* Send the request. */ - sprintf (cs.own_buf, "qRelocInsn:%s;%s", paddress (oldloc), - paddress (*to)); - if (putpkt (cs.own_buf) < 0) - return -1; - - /* FIXME: Eventually add buffer overflow checking (to getpkt?) */ - len = getpkt (cs.own_buf); - if (len < 0) - return -1; - - /* We ought to handle pretty much any packet at this point while we - wait for the qRelocInsn "response". That requires re-entering - the main loop. For now, this is an adequate approximation; allow - GDB to access memory. */ - while (cs.own_buf[0] == 'm' || cs.own_buf[0] == 'M' || cs.own_buf[0] == 'X') - { - CORE_ADDR mem_addr; - unsigned char *mem_buf = NULL; - unsigned int mem_len; - - if (cs.own_buf[0] == 'm') - { - decode_m_packet (&cs.own_buf[1], &mem_addr, &mem_len); - mem_buf = (unsigned char *) xmalloc (mem_len); - if (read_inferior_memory (mem_addr, mem_buf, mem_len) == 0) - bin2hex (mem_buf, cs.own_buf, mem_len); - else - write_enn (cs.own_buf); - } - else if (cs.own_buf[0] == 'X') - { - if (decode_X_packet (&cs.own_buf[1], len - 1, &mem_addr, - &mem_len, &mem_buf) < 0 - || target_write_memory (mem_addr, mem_buf, mem_len) != 0) - write_enn (cs.own_buf); - else - write_ok (cs.own_buf); - } - else - { - decode_M_packet (&cs.own_buf[1], &mem_addr, &mem_len, &mem_buf); - if (target_write_memory (mem_addr, mem_buf, mem_len) == 0) - write_ok (cs.own_buf); - else - write_enn (cs.own_buf); - } - free (mem_buf); - if (putpkt (cs.own_buf) < 0) - return -1; - len = getpkt (cs.own_buf); - if (len < 0) - return -1; - } - - if (cs.own_buf[0] == 'E') - { - warning ("An error occurred while relocating an instruction: %s", - cs.own_buf); - return -1; - } - - if (!startswith (cs.own_buf, "qRelocInsn:")) - { - warning ("Malformed response to qRelocInsn, ignoring: %s", - cs.own_buf); - return -1; - } - - unpack_varlen_hex (cs.own_buf + strlen ("qRelocInsn:"), &written); - - *to += written; - return 0; -} - -void -monitor_output (const char *msg) -{ - int len = strlen (msg); - char *buf = (char *) xmalloc (len * 2 + 2); - - buf[0] = 'O'; - bin2hex ((const gdb_byte *) msg, buf + 1, len); - - putpkt (buf); - free (buf); -} - -#endif diff -Nru gdb-9.1/gdb/gdbserver/remote-utils.h gdb-10.2/gdb/gdbserver/remote-utils.h --- gdb-9.1/gdb/gdbserver/remote-utils.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/remote-utils.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,70 +0,0 @@ -/* Remote utility routines for the remote server for GDB. - Copyright (C) 1993-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef GDBSERVER_REMOTE_UTILS_H -#define GDBSERVER_REMOTE_UTILS_H - -int gdb_connected (void); - -#define STDIO_CONNECTION_NAME "stdio" -int remote_connection_is_stdio (void); - -ptid_t read_ptid (const char *buf, const char **obuf); -char *write_ptid (char *buf, ptid_t ptid); - -int putpkt (char *buf); -int putpkt_binary (char *buf, int len); -int putpkt_notif (char *buf); -int getpkt (char *buf); -void remote_prepare (const char *name); -void remote_open (const char *name); -void remote_close (void); -void write_ok (char *buf); -void write_enn (char *buf); -void initialize_async_io (void); -void enable_async_io (void); -void disable_async_io (void); -void check_remote_input_interrupt_request (void); -void prepare_resume_reply (char *buf, ptid_t ptid, - struct target_waitstatus *status); - -const char *decode_address_to_semicolon (CORE_ADDR *addrp, const char *start); -void decode_address (CORE_ADDR *addrp, const char *start, int len); -void decode_m_packet (char *from, CORE_ADDR * mem_addr_ptr, - unsigned int *len_ptr); -void decode_M_packet (char *from, CORE_ADDR * mem_addr_ptr, - unsigned int *len_ptr, unsigned char **to_p); -int decode_X_packet (char *from, int packet_len, CORE_ADDR * mem_addr_ptr, - unsigned int *len_ptr, unsigned char **to_p); -int decode_xfer_write (char *buf, int packet_len, - CORE_ADDR *offset, unsigned int *len, - unsigned char *data); -int decode_search_memory_packet (const char *buf, int packet_len, - CORE_ADDR *start_addrp, - CORE_ADDR *search_space_lenp, - gdb_byte *pattern, - unsigned int *pattern_lenp); - -void clear_symbol_cache (struct sym_cache **symcache_p); -int look_up_one_symbol (const char *name, CORE_ADDR *addrp, int may_ask_gdb); - -int relocate_instruction (CORE_ADDR *to, CORE_ADDR oldloc); - -void monitor_output (const char *msg); - -#endif /* GDBSERVER_REMOTE_UTILS_H */ diff -Nru gdb-9.1/gdb/gdbserver/server.c gdb-10.2/gdb/gdbserver/server.c --- gdb-9.1/gdb/gdbserver/server.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/server.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,4485 +0,0 @@ -/* Main code for remote server for GDB. - Copyright (C) 1989-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "server.h" -#include "gdbthread.h" -#include "gdbsupport/agent.h" -#include "notif.h" -#include "tdesc.h" -#include "gdbsupport/rsp-low.h" -#include "gdbsupport/signals-state-save-restore.h" -#include <ctype.h> -#include <unistd.h> -#if HAVE_SIGNAL_H -#include <signal.h> -#endif -#include "gdbsupport/gdb_vecs.h" -#include "gdbsupport/gdb_wait.h" -#include "gdbsupport/btrace-common.h" -#include "gdbsupport/filestuff.h" -#include "tracepoint.h" -#include "dll.h" -#include "hostio.h" -#include <vector> -#include "gdbsupport/common-inferior.h" -#include "gdbsupport/job-control.h" -#include "gdbsupport/environ.h" -#include "filenames.h" -#include "gdbsupport/pathstuff.h" -#ifdef USE_XML -#include "xml-builtin.h" -#endif - -#include "gdbsupport/selftest.h" -#include "gdbsupport/scope-exit.h" - -#define require_running_or_return(BUF) \ - if (!target_running ()) \ - { \ - write_enn (BUF); \ - return; \ - } - -#define require_running_or_break(BUF) \ - if (!target_running ()) \ - { \ - write_enn (BUF); \ - break; \ - } - -/* String containing the current directory (what getwd would return). */ - -char *current_directory; - -/* The environment to pass to the inferior when creating it. */ - -static gdb_environ our_environ; - -bool server_waiting; - -static bool extended_protocol; -static bool response_needed; -static bool exit_requested; - -/* --once: Exit after the first connection has closed. */ -bool run_once; - -/* Whether to report TARGET_WAITKIND_NO_RESUMED events. */ -static bool report_no_resumed; - -bool non_stop; - -static struct { - /* Set the PROGRAM_PATH. Here we adjust the path of the provided - binary if needed. */ - void set (gdb::unique_xmalloc_ptr<char> &&path) - { - m_path = std::move (path); - - /* Make sure we're using the absolute path of the inferior when - creating it. */ - if (!contains_dir_separator (m_path.get ())) - { - int reg_file_errno; - - /* Check if the file is in our CWD. If it is, then we prefix - its name with CURRENT_DIRECTORY. Otherwise, we leave the - name as-is because we'll try searching for it in $PATH. */ - if (is_regular_file (m_path.get (), ®_file_errno)) - m_path = gdb_abspath (m_path.get ()); - } - } - - /* Return the PROGRAM_PATH. */ - char *get () - { return m_path.get (); } - -private: - /* The program name, adjusted if needed. */ - gdb::unique_xmalloc_ptr<char> m_path; -} program_path; -static std::vector<char *> program_args; -static std::string wrapper_argv; - -/* The PID of the originally created or attached inferior. Used to - send signals to the process when GDB sends us an asynchronous interrupt - (user hitting Control-C in the client), and to wait for the child to exit - when no longer debugging it. */ - -unsigned long signal_pid; - -/* Set if you want to disable optional thread related packets support - in gdbserver, for the sake of testing GDB against stubs that don't - support them. */ -bool disable_packet_vCont; -bool disable_packet_Tthread; -bool disable_packet_qC; -bool disable_packet_qfThreadInfo; - -static unsigned char *mem_buf; - -/* A sub-class of 'struct notif_event' for stop, holding information - relative to a single stop reply. We keep a queue of these to - push to GDB in non-stop mode. */ - -struct vstop_notif : public notif_event -{ - /* Thread or process that got the event. */ - ptid_t ptid; - - /* Event info. */ - struct target_waitstatus status; -}; - -/* The current btrace configuration. This is gdbserver's mirror of GDB's - btrace configuration. */ -static struct btrace_config current_btrace_conf; - -/* The client remote protocol state. */ - -static client_state g_client_state; - -client_state & -get_client_state () -{ - client_state &cs = g_client_state; - return cs; -} - - -/* Put a stop reply to the stop reply queue. */ - -static void -queue_stop_reply (ptid_t ptid, struct target_waitstatus *status) -{ - struct vstop_notif *new_notif = new struct vstop_notif; - - new_notif->ptid = ptid; - new_notif->status = *status; - - notif_event_enque (¬if_stop, new_notif); -} - -static bool -remove_all_on_match_ptid (struct notif_event *event, ptid_t filter_ptid) -{ - struct vstop_notif *vstop_event = (struct vstop_notif *) event; - - return vstop_event->ptid.matches (filter_ptid); -} - -/* See server.h. */ - -void -discard_queued_stop_replies (ptid_t ptid) -{ - std::list<notif_event *>::iterator iter, next, end; - end = notif_stop.queue.end (); - for (iter = notif_stop.queue.begin (); iter != end; iter = next) - { - next = iter; - ++next; - - if (remove_all_on_match_ptid (*iter, ptid)) - { - delete *iter; - notif_stop.queue.erase (iter); - } - } -} - -static void -vstop_notif_reply (struct notif_event *event, char *own_buf) -{ - struct vstop_notif *vstop = (struct vstop_notif *) event; - - prepare_resume_reply (own_buf, vstop->ptid, &vstop->status); -} - -/* Helper for in_queued_stop_replies. */ - -static bool -in_queued_stop_replies_ptid (struct notif_event *event, ptid_t filter_ptid) -{ - struct vstop_notif *vstop_event = (struct vstop_notif *) event; - - if (vstop_event->ptid.matches (filter_ptid)) - return true; - - /* Don't resume fork children that GDB does not know about yet. */ - if ((vstop_event->status.kind == TARGET_WAITKIND_FORKED - || vstop_event->status.kind == TARGET_WAITKIND_VFORKED) - && vstop_event->status.value.related_pid.matches (filter_ptid)) - return true; - - return false; -} - -/* See server.h. */ - -int -in_queued_stop_replies (ptid_t ptid) -{ - for (notif_event *event : notif_stop.queue) - { - if (in_queued_stop_replies_ptid (event, ptid)) - return true; - } - - return false; -} - -struct notif_server notif_stop = -{ - "vStopped", "Stop", {}, vstop_notif_reply, -}; - -static int -target_running (void) -{ - return get_first_thread () != NULL; -} - -/* See gdbsupport/common-inferior.h. */ - -const char * -get_exec_wrapper () -{ - return !wrapper_argv.empty () ? wrapper_argv.c_str () : NULL; -} - -/* See gdbsupport/common-inferior.h. */ - -char * -get_exec_file (int err) -{ - if (err && program_path.get () == NULL) - error (_("No executable file specified.")); - - return program_path.get (); -} - -/* See server.h. */ - -gdb_environ * -get_environ () -{ - return &our_environ; -} - -static int -attach_inferior (int pid) -{ - client_state &cs = get_client_state (); - /* myattach should return -1 if attaching is unsupported, - 0 if it succeeded, and call error() otherwise. */ - - if (find_process_pid (pid) != nullptr) - error ("Already attached to process %d\n", pid); - - if (myattach (pid) != 0) - return -1; - - fprintf (stderr, "Attached; pid = %d\n", pid); - fflush (stderr); - - /* FIXME - It may be that we should get the SIGNAL_PID from the - attach function, so that it can be the main thread instead of - whichever we were told to attach to. */ - signal_pid = pid; - - if (!non_stop) - { - cs.last_ptid = mywait (ptid_t (pid), &cs.last_status, 0, 0); - - /* GDB knows to ignore the first SIGSTOP after attaching to a running - process using the "attach" command, but this is different; it's - just using "target remote". Pretend it's just starting up. */ - if (cs.last_status.kind == TARGET_WAITKIND_STOPPED - && cs.last_status.value.sig == GDB_SIGNAL_STOP) - cs.last_status.value.sig = GDB_SIGNAL_TRAP; - - current_thread->last_resume_kind = resume_stop; - current_thread->last_status = cs.last_status; - } - - return 0; -} - -/* Decode a qXfer read request. Return 0 if everything looks OK, - or -1 otherwise. */ - -static int -decode_xfer_read (char *buf, CORE_ADDR *ofs, unsigned int *len) -{ - /* After the read marker and annex, qXfer looks like a - traditional 'm' packet. */ - decode_m_packet (buf, ofs, len); - - return 0; -} - -static int -decode_xfer (char *buf, char **object, char **rw, char **annex, char **offset) -{ - /* Extract and NUL-terminate the object. */ - *object = buf; - while (*buf && *buf != ':') - buf++; - if (*buf == '\0') - return -1; - *buf++ = 0; - - /* Extract and NUL-terminate the read/write action. */ - *rw = buf; - while (*buf && *buf != ':') - buf++; - if (*buf == '\0') - return -1; - *buf++ = 0; - - /* Extract and NUL-terminate the annex. */ - *annex = buf; - while (*buf && *buf != ':') - buf++; - if (*buf == '\0') - return -1; - *buf++ = 0; - - *offset = buf; - return 0; -} - -/* Write the response to a successful qXfer read. Returns the - length of the (binary) data stored in BUF, corresponding - to as much of DATA/LEN as we could fit. IS_MORE controls - the first character of the response. */ -static int -write_qxfer_response (char *buf, const gdb_byte *data, int len, int is_more) -{ - int out_len; - - if (is_more) - buf[0] = 'm'; - else - buf[0] = 'l'; - - return remote_escape_output (data, len, 1, (unsigned char *) buf + 1, - &out_len, PBUFSIZ - 2) + 1; -} - -/* Handle btrace enabling in BTS format. */ - -static void -handle_btrace_enable_bts (struct thread_info *thread) -{ - if (thread->btrace != NULL) - error (_("Btrace already enabled.")); - - current_btrace_conf.format = BTRACE_FORMAT_BTS; - thread->btrace = target_enable_btrace (thread->id, ¤t_btrace_conf); -} - -/* Handle btrace enabling in Intel Processor Trace format. */ - -static void -handle_btrace_enable_pt (struct thread_info *thread) -{ - if (thread->btrace != NULL) - error (_("Btrace already enabled.")); - - current_btrace_conf.format = BTRACE_FORMAT_PT; - thread->btrace = target_enable_btrace (thread->id, ¤t_btrace_conf); -} - -/* Handle btrace disabling. */ - -static void -handle_btrace_disable (struct thread_info *thread) -{ - - if (thread->btrace == NULL) - error (_("Branch tracing not enabled.")); - - if (target_disable_btrace (thread->btrace) != 0) - error (_("Could not disable branch tracing.")); - - thread->btrace = NULL; -} - -/* Handle the "Qbtrace" packet. */ - -static int -handle_btrace_general_set (char *own_buf) -{ - client_state &cs = get_client_state (); - struct thread_info *thread; - char *op; - - if (!startswith (own_buf, "Qbtrace:")) - return 0; - - op = own_buf + strlen ("Qbtrace:"); - - if (cs.general_thread == null_ptid - || cs.general_thread == minus_one_ptid) - { - strcpy (own_buf, "E.Must select a single thread."); - return -1; - } - - thread = find_thread_ptid (cs.general_thread); - if (thread == NULL) - { - strcpy (own_buf, "E.No such thread."); - return -1; - } - - try - { - if (strcmp (op, "bts") == 0) - handle_btrace_enable_bts (thread); - else if (strcmp (op, "pt") == 0) - handle_btrace_enable_pt (thread); - else if (strcmp (op, "off") == 0) - handle_btrace_disable (thread); - else - error (_("Bad Qbtrace operation. Use bts, pt, or off.")); - - write_ok (own_buf); - } - catch (const gdb_exception_error &exception) - { - sprintf (own_buf, "E.%s", exception.what ()); - } - - return 1; -} - -/* Handle the "Qbtrace-conf" packet. */ - -static int -handle_btrace_conf_general_set (char *own_buf) -{ - client_state &cs = get_client_state (); - struct thread_info *thread; - char *op; - - if (!startswith (own_buf, "Qbtrace-conf:")) - return 0; - - op = own_buf + strlen ("Qbtrace-conf:"); - - if (cs.general_thread == null_ptid - || cs.general_thread == minus_one_ptid) - { - strcpy (own_buf, "E.Must select a single thread."); - return -1; - } - - thread = find_thread_ptid (cs.general_thread); - if (thread == NULL) - { - strcpy (own_buf, "E.No such thread."); - return -1; - } - - if (startswith (op, "bts:size=")) - { - unsigned long size; - char *endp = NULL; - - errno = 0; - size = strtoul (op + strlen ("bts:size="), &endp, 16); - if (endp == NULL || *endp != 0 || errno != 0 || size > UINT_MAX) - { - strcpy (own_buf, "E.Bad size value."); - return -1; - } - - current_btrace_conf.bts.size = (unsigned int) size; - } - else if (strncmp (op, "pt:size=", strlen ("pt:size=")) == 0) - { - unsigned long size; - char *endp = NULL; - - errno = 0; - size = strtoul (op + strlen ("pt:size="), &endp, 16); - if (endp == NULL || *endp != 0 || errno != 0 || size > UINT_MAX) - { - strcpy (own_buf, "E.Bad size value."); - return -1; - } - - current_btrace_conf.pt.size = (unsigned int) size; - } - else - { - strcpy (own_buf, "E.Bad Qbtrace configuration option."); - return -1; - } - - write_ok (own_buf); - return 1; -} - -/* Handle all of the extended 'Q' packets. */ - -static void -handle_general_set (char *own_buf) -{ - client_state &cs = get_client_state (); - if (startswith (own_buf, "QPassSignals:")) - { - int numsigs = (int) GDB_SIGNAL_LAST, i; - const char *p = own_buf + strlen ("QPassSignals:"); - CORE_ADDR cursig; - - p = decode_address_to_semicolon (&cursig, p); - for (i = 0; i < numsigs; i++) - { - if (i == cursig) - { - cs.pass_signals[i] = 1; - if (*p == '\0') - /* Keep looping, to clear the remaining signals. */ - cursig = -1; - else - p = decode_address_to_semicolon (&cursig, p); - } - else - cs.pass_signals[i] = 0; - } - strcpy (own_buf, "OK"); - return; - } - - if (startswith (own_buf, "QProgramSignals:")) - { - int numsigs = (int) GDB_SIGNAL_LAST, i; - const char *p = own_buf + strlen ("QProgramSignals:"); - CORE_ADDR cursig; - - cs.program_signals_p = 1; - - p = decode_address_to_semicolon (&cursig, p); - for (i = 0; i < numsigs; i++) - { - if (i == cursig) - { - cs.program_signals[i] = 1; - if (*p == '\0') - /* Keep looping, to clear the remaining signals. */ - cursig = -1; - else - p = decode_address_to_semicolon (&cursig, p); - } - else - cs.program_signals[i] = 0; - } - strcpy (own_buf, "OK"); - return; - } - - if (startswith (own_buf, "QCatchSyscalls:")) - { - const char *p = own_buf + sizeof ("QCatchSyscalls:") - 1; - int enabled = -1; - CORE_ADDR sysno; - struct process_info *process; - - if (!target_running () || !target_supports_catch_syscall ()) - { - write_enn (own_buf); - return; - } - - if (strcmp (p, "0") == 0) - enabled = 0; - else if (p[0] == '1' && (p[1] == ';' || p[1] == '\0')) - enabled = 1; - else - { - fprintf (stderr, "Unknown catch-syscalls mode requested: %s\n", - own_buf); - write_enn (own_buf); - return; - } - - process = current_process (); - process->syscalls_to_catch.clear (); - - if (enabled) - { - p += 1; - if (*p == ';') - { - p += 1; - while (*p != '\0') - { - p = decode_address_to_semicolon (&sysno, p); - process->syscalls_to_catch.push_back (sysno); - } - } - else - process->syscalls_to_catch.push_back (ANY_SYSCALL); - } - - write_ok (own_buf); - return; - } - - if (strcmp (own_buf, "QEnvironmentReset") == 0) - { - our_environ = gdb_environ::from_host_environ (); - - write_ok (own_buf); - return; - } - - if (startswith (own_buf, "QEnvironmentHexEncoded:")) - { - const char *p = own_buf + sizeof ("QEnvironmentHexEncoded:") - 1; - /* The final form of the environment variable. FINAL_VAR will - hold the 'VAR=VALUE' format. */ - std::string final_var = hex2str (p); - std::string var_name, var_value; - - if (remote_debug) - { - debug_printf (_("[QEnvironmentHexEncoded received '%s']\n"), p); - debug_printf (_("[Environment variable to be set: '%s']\n"), - final_var.c_str ()); - debug_flush (); - } - - size_t pos = final_var.find ('='); - if (pos == std::string::npos) - { - warning (_("Unexpected format for environment variable: '%s'"), - final_var.c_str ()); - write_enn (own_buf); - return; - } - - var_name = final_var.substr (0, pos); - var_value = final_var.substr (pos + 1, std::string::npos); - - our_environ.set (var_name.c_str (), var_value.c_str ()); - - write_ok (own_buf); - return; - } - - if (startswith (own_buf, "QEnvironmentUnset:")) - { - const char *p = own_buf + sizeof ("QEnvironmentUnset:") - 1; - std::string varname = hex2str (p); - - if (remote_debug) - { - debug_printf (_("[QEnvironmentUnset received '%s']\n"), p); - debug_printf (_("[Environment variable to be unset: '%s']\n"), - varname.c_str ()); - debug_flush (); - } - - our_environ.unset (varname.c_str ()); - - write_ok (own_buf); - return; - } - - if (strcmp (own_buf, "QStartNoAckMode") == 0) - { - if (remote_debug) - { - debug_printf ("[noack mode enabled]\n"); - debug_flush (); - } - - cs.noack_mode = 1; - write_ok (own_buf); - return; - } - - if (startswith (own_buf, "QNonStop:")) - { - char *mode = own_buf + 9; - int req = -1; - const char *req_str; - - if (strcmp (mode, "0") == 0) - req = 0; - else if (strcmp (mode, "1") == 0) - req = 1; - else - { - /* We don't know what this mode is, so complain to - GDB. */ - fprintf (stderr, "Unknown non-stop mode requested: %s\n", - own_buf); - write_enn (own_buf); - return; - } - - req_str = req ? "non-stop" : "all-stop"; - if (start_non_stop (req) != 0) - { - fprintf (stderr, "Setting %s mode failed\n", req_str); - write_enn (own_buf); - return; - } - - non_stop = (req != 0); - - if (remote_debug) - debug_printf ("[%s mode enabled]\n", req_str); - - write_ok (own_buf); - return; - } - - if (startswith (own_buf, "QDisableRandomization:")) - { - char *packet = own_buf + strlen ("QDisableRandomization:"); - ULONGEST setting; - - unpack_varlen_hex (packet, &setting); - cs.disable_randomization = setting; - - if (remote_debug) - { - debug_printf (cs.disable_randomization - ? "[address space randomization disabled]\n" - : "[address space randomization enabled]\n"); - } - - write_ok (own_buf); - return; - } - - if (target_supports_tracepoints () - && handle_tracepoint_general_set (own_buf)) - return; - - if (startswith (own_buf, "QAgent:")) - { - char *mode = own_buf + strlen ("QAgent:"); - int req = 0; - - if (strcmp (mode, "0") == 0) - req = 0; - else if (strcmp (mode, "1") == 0) - req = 1; - else - { - /* We don't know what this value is, so complain to GDB. */ - sprintf (own_buf, "E.Unknown QAgent value"); - return; - } - - /* Update the flag. */ - use_agent = req; - if (remote_debug) - debug_printf ("[%s agent]\n", req ? "Enable" : "Disable"); - write_ok (own_buf); - return; - } - - if (handle_btrace_general_set (own_buf)) - return; - - if (handle_btrace_conf_general_set (own_buf)) - return; - - if (startswith (own_buf, "QThreadEvents:")) - { - char *mode = own_buf + strlen ("QThreadEvents:"); - enum tribool req = TRIBOOL_UNKNOWN; - - if (strcmp (mode, "0") == 0) - req = TRIBOOL_FALSE; - else if (strcmp (mode, "1") == 0) - req = TRIBOOL_TRUE; - else - { - /* We don't know what this mode is, so complain to GDB. */ - sprintf (own_buf, "E.Unknown thread-events mode requested: %s\n", - mode); - return; - } - - cs.report_thread_events = (req == TRIBOOL_TRUE); - - if (remote_debug) - { - const char *req_str = cs.report_thread_events ? "enabled" : "disabled"; - - debug_printf ("[thread events are now %s]\n", req_str); - } - - write_ok (own_buf); - return; - } - - if (startswith (own_buf, "QStartupWithShell:")) - { - const char *value = own_buf + strlen ("QStartupWithShell:"); - - if (strcmp (value, "1") == 0) - startup_with_shell = true; - else if (strcmp (value, "0") == 0) - startup_with_shell = false; - else - { - /* Unknown value. */ - fprintf (stderr, "Unknown value to startup-with-shell: %s\n", - own_buf); - write_enn (own_buf); - return; - } - - if (remote_debug) - debug_printf (_("[Inferior will %s started with shell]"), - startup_with_shell ? "be" : "not be"); - - write_ok (own_buf); - return; - } - - if (startswith (own_buf, "QSetWorkingDir:")) - { - const char *p = own_buf + strlen ("QSetWorkingDir:"); - - if (*p != '\0') - { - std::string path = hex2str (p); - - set_inferior_cwd (path.c_str ()); - - if (remote_debug) - debug_printf (_("[Set the inferior's current directory to %s]\n"), - path.c_str ()); - } - else - { - /* An empty argument means that we should clear out any - previously set cwd for the inferior. */ - set_inferior_cwd (NULL); - - if (remote_debug) - debug_printf (_("\ -[Unset the inferior's current directory; will use gdbserver's cwd]\n")); - } - write_ok (own_buf); - - return; - } - - /* Otherwise we didn't know what packet it was. Say we didn't - understand it. */ - own_buf[0] = 0; -} - -static const char * -get_features_xml (const char *annex) -{ - const struct target_desc *desc = current_target_desc (); - - /* `desc->xmltarget' defines what to return when looking for the - "target.xml" file. Its contents can either be verbatim XML code - (prefixed with a '@') or else the name of the actual XML file to - be used in place of "target.xml". - - This variable is set up from the auto-generated - init_registers_... routine for the current target. */ - - if (strcmp (annex, "target.xml") == 0) - { - const char *ret = tdesc_get_features_xml (desc); - - if (*ret == '@') - return ret + 1; - else - annex = ret; - } - -#ifdef USE_XML - { - int i; - - /* Look for the annex. */ - for (i = 0; xml_builtin[i][0] != NULL; i++) - if (strcmp (annex, xml_builtin[i][0]) == 0) - break; - - if (xml_builtin[i][0] != NULL) - return xml_builtin[i][1]; - } -#endif - - return NULL; -} - -static void -monitor_show_help (void) -{ - monitor_output ("The following monitor commands are supported:\n"); - monitor_output (" set debug <0|1>\n"); - monitor_output (" Enable general debugging messages\n"); - monitor_output (" set debug-hw-points <0|1>\n"); - monitor_output (" Enable h/w breakpoint/watchpoint debugging messages\n"); - monitor_output (" set remote-debug <0|1>\n"); - monitor_output (" Enable remote protocol debugging messages\n"); - monitor_output (" set debug-format option1[,option2,...]\n"); - monitor_output (" Add additional information to debugging messages\n"); - monitor_output (" Options: all, none"); - monitor_output (", timestamp"); - monitor_output ("\n"); - monitor_output (" exit\n"); - monitor_output (" Quit GDBserver\n"); -} - -/* Read trace frame or inferior memory. Returns the number of bytes - actually read, zero when no further transfer is possible, and -1 on - error. Return of a positive value smaller than LEN does not - indicate there's no more to be read, only the end of the transfer. - E.g., when GDB reads memory from a traceframe, a first request may - be served from a memory block that does not cover the whole request - length. A following request gets the rest served from either - another block (of the same traceframe) or from the read-only - regions. */ - -static int -gdb_read_memory (CORE_ADDR memaddr, unsigned char *myaddr, int len) -{ - client_state &cs = get_client_state (); - int res; - - if (cs.current_traceframe >= 0) - { - ULONGEST nbytes; - ULONGEST length = len; - - if (traceframe_read_mem (cs.current_traceframe, - memaddr, myaddr, len, &nbytes)) - return -1; - /* Data read from trace buffer, we're done. */ - if (nbytes > 0) - return nbytes; - if (!in_readonly_region (memaddr, length)) - return -1; - /* Otherwise we have a valid readonly case, fall through. */ - /* (assume no half-trace half-real blocks for now) */ - } - - res = prepare_to_access_memory (); - if (res == 0) - { - if (set_desired_thread ()) - res = read_inferior_memory (memaddr, myaddr, len); - else - res = 1; - done_accessing_memory (); - - return res == 0 ? len : -1; - } - else - return -1; -} - -/* Write trace frame or inferior memory. Actually, writing to trace - frames is forbidden. */ - -static int -gdb_write_memory (CORE_ADDR memaddr, const unsigned char *myaddr, int len) -{ - client_state &cs = get_client_state (); - if (cs.current_traceframe >= 0) - return EIO; - else - { - int ret; - - ret = prepare_to_access_memory (); - if (ret == 0) - { - if (set_desired_thread ()) - ret = target_write_memory (memaddr, myaddr, len); - else - ret = EIO; - done_accessing_memory (); - } - return ret; - } -} - -/* Subroutine of handle_search_memory to simplify it. */ - -static int -handle_search_memory_1 (CORE_ADDR start_addr, CORE_ADDR search_space_len, - gdb_byte *pattern, unsigned pattern_len, - gdb_byte *search_buf, - unsigned chunk_size, unsigned search_buf_size, - CORE_ADDR *found_addrp) -{ - /* Prime the search buffer. */ - - if (gdb_read_memory (start_addr, search_buf, search_buf_size) - != search_buf_size) - { - warning ("Unable to access %ld bytes of target " - "memory at 0x%lx, halting search.", - (long) search_buf_size, (long) start_addr); - return -1; - } - - /* Perform the search. - - The loop is kept simple by allocating [N + pattern-length - 1] bytes. - When we've scanned N bytes we copy the trailing bytes to the start and - read in another N bytes. */ - - while (search_space_len >= pattern_len) - { - gdb_byte *found_ptr; - unsigned nr_search_bytes = (search_space_len < search_buf_size - ? search_space_len - : search_buf_size); - - found_ptr = (gdb_byte *) memmem (search_buf, nr_search_bytes, pattern, - pattern_len); - - if (found_ptr != NULL) - { - CORE_ADDR found_addr = start_addr + (found_ptr - search_buf); - *found_addrp = found_addr; - return 1; - } - - /* Not found in this chunk, skip to next chunk. */ - - /* Don't let search_space_len wrap here, it's unsigned. */ - if (search_space_len >= chunk_size) - search_space_len -= chunk_size; - else - search_space_len = 0; - - if (search_space_len >= pattern_len) - { - unsigned keep_len = search_buf_size - chunk_size; - CORE_ADDR read_addr = start_addr + chunk_size + keep_len; - int nr_to_read; - - /* Copy the trailing part of the previous iteration to the front - of the buffer for the next iteration. */ - memcpy (search_buf, search_buf + chunk_size, keep_len); - - nr_to_read = (search_space_len - keep_len < chunk_size - ? search_space_len - keep_len - : chunk_size); - - if (gdb_read_memory (read_addr, search_buf + keep_len, - nr_to_read) != search_buf_size) - { - warning ("Unable to access %ld bytes of target memory " - "at 0x%lx, halting search.", - (long) nr_to_read, (long) read_addr); - return -1; - } - - start_addr += chunk_size; - } - } - - /* Not found. */ - - return 0; -} - -/* Handle qSearch:memory packets. */ - -static void -handle_search_memory (char *own_buf, int packet_len) -{ - CORE_ADDR start_addr; - CORE_ADDR search_space_len; - gdb_byte *pattern; - unsigned int pattern_len; - /* NOTE: also defined in find.c testcase. */ -#define SEARCH_CHUNK_SIZE 16000 - const unsigned chunk_size = SEARCH_CHUNK_SIZE; - /* Buffer to hold memory contents for searching. */ - gdb_byte *search_buf; - unsigned search_buf_size; - int found; - CORE_ADDR found_addr; - int cmd_name_len = sizeof ("qSearch:memory:") - 1; - - pattern = (gdb_byte *) malloc (packet_len); - if (pattern == NULL) - { - error ("Unable to allocate memory to perform the search"); - strcpy (own_buf, "E00"); - return; - } - if (decode_search_memory_packet (own_buf + cmd_name_len, - packet_len - cmd_name_len, - &start_addr, &search_space_len, - pattern, &pattern_len) < 0) - { - free (pattern); - error ("Error in parsing qSearch:memory packet"); - strcpy (own_buf, "E00"); - return; - } - - search_buf_size = chunk_size + pattern_len - 1; - - /* No point in trying to allocate a buffer larger than the search space. */ - if (search_space_len < search_buf_size) - search_buf_size = search_space_len; - - search_buf = (gdb_byte *) malloc (search_buf_size); - if (search_buf == NULL) - { - free (pattern); - error ("Unable to allocate memory to perform the search"); - strcpy (own_buf, "E00"); - return; - } - - found = handle_search_memory_1 (start_addr, search_space_len, - pattern, pattern_len, - search_buf, chunk_size, search_buf_size, - &found_addr); - - if (found > 0) - sprintf (own_buf, "1,%lx", (long) found_addr); - else if (found == 0) - strcpy (own_buf, "0"); - else - strcpy (own_buf, "E00"); - - free (search_buf); - free (pattern); -} - -/* Handle the "D" packet. */ - -static void -handle_detach (char *own_buf) -{ - client_state &cs = get_client_state (); - - process_info *process; - - if (cs.multi_process) - { - /* skip 'D;' */ - int pid = strtol (&own_buf[2], NULL, 16); - - process = find_process_pid (pid); - } - else - { - process = (current_thread != nullptr - ? get_thread_process (current_thread) - : nullptr); - } - - if (process == NULL) - { - write_enn (own_buf); - return; - } - - if ((tracing && disconnected_tracing) || any_persistent_commands (process)) - { - if (tracing && disconnected_tracing) - fprintf (stderr, - "Disconnected tracing in effect, " - "leaving gdbserver attached to the process\n"); - - if (any_persistent_commands (process)) - fprintf (stderr, - "Persistent commands are present, " - "leaving gdbserver attached to the process\n"); - - /* Make sure we're in non-stop/async mode, so we we can both - wait for an async socket accept, and handle async target - events simultaneously. There's also no point either in - having the target stop all threads, when we're going to - pass signals down without informing GDB. */ - if (!non_stop) - { - if (debug_threads) - debug_printf ("Forcing non-stop mode\n"); - - non_stop = true; - start_non_stop (1); - } - - process->gdb_detached = 1; - - /* Detaching implicitly resumes all threads. */ - target_continue_no_signal (minus_one_ptid); - - write_ok (own_buf); - return; - } - - fprintf (stderr, "Detaching from process %d\n", process->pid); - stop_tracing (); - - /* We'll need this after PROCESS has been destroyed. */ - int pid = process->pid; - - if (detach_inferior (process) != 0) - write_enn (own_buf); - else - { - discard_queued_stop_replies (ptid_t (pid)); - write_ok (own_buf); - - if (extended_protocol || target_running ()) - { - /* There is still at least one inferior remaining or - we are in extended mode, so don't terminate gdbserver, - and instead treat this like a normal program exit. */ - cs.last_status.kind = TARGET_WAITKIND_EXITED; - cs.last_status.value.integer = 0; - cs.last_ptid = ptid_t (pid); - - current_thread = NULL; - } - else - { - putpkt (own_buf); - remote_close (); - - /* If we are attached, then we can exit. Otherwise, we - need to hang around doing nothing, until the child is - gone. */ - join_inferior (pid); - exit (0); - } - } -} - -/* Parse options to --debug-format= and "monitor set debug-format". - ARG is the text after "--debug-format=" or "monitor set debug-format". - IS_MONITOR is non-zero if we're invoked via "monitor set debug-format". - This triggers calls to monitor_output. - The result is an empty string if all options were parsed ok, otherwise an - error message which the caller must free. - - N.B. These commands affect all debug format settings, they are not - cumulative. If a format is not specified, it is turned off. - However, we don't go to extra trouble with things like - "monitor set debug-format all,none,timestamp". - Instead we just parse them one at a time, in order. - - The syntax for "monitor set debug" we support here is not identical - to gdb's "set debug foo on|off" because we also use this function to - parse "--debug-format=foo,bar". */ - -static std::string -parse_debug_format_options (const char *arg, int is_monitor) -{ - /* First turn all debug format options off. */ - debug_timestamp = 0; - - /* First remove leading spaces, for "monitor set debug-format". */ - while (isspace (*arg)) - ++arg; - - std::vector<gdb::unique_xmalloc_ptr<char>> options - = delim_string_to_char_ptr_vec (arg, ','); - - for (const gdb::unique_xmalloc_ptr<char> &option : options) - { - if (strcmp (option.get (), "all") == 0) - { - debug_timestamp = 1; - if (is_monitor) - monitor_output ("All extra debug format options enabled.\n"); - } - else if (strcmp (option.get (), "none") == 0) - { - debug_timestamp = 0; - if (is_monitor) - monitor_output ("All extra debug format options disabled.\n"); - } - else if (strcmp (option.get (), "timestamp") == 0) - { - debug_timestamp = 1; - if (is_monitor) - monitor_output ("Timestamps will be added to debug output.\n"); - } - else if (*option == '\0') - { - /* An empty option, e.g., "--debug-format=foo,,bar", is ignored. */ - continue; - } - else - return string_printf ("Unknown debug-format argument: \"%s\"\n", - option.get ()); - } - - return std::string (); -} - -/* Handle monitor commands not handled by target-specific handlers. */ - -static void -handle_monitor_command (char *mon, char *own_buf) -{ - if (strcmp (mon, "set debug 1") == 0) - { - debug_threads = 1; - monitor_output ("Debug output enabled.\n"); - } - else if (strcmp (mon, "set debug 0") == 0) - { - debug_threads = 0; - monitor_output ("Debug output disabled.\n"); - } - else if (strcmp (mon, "set debug-hw-points 1") == 0) - { - show_debug_regs = 1; - monitor_output ("H/W point debugging output enabled.\n"); - } - else if (strcmp (mon, "set debug-hw-points 0") == 0) - { - show_debug_regs = 0; - monitor_output ("H/W point debugging output disabled.\n"); - } - else if (strcmp (mon, "set remote-debug 1") == 0) - { - remote_debug = 1; - monitor_output ("Protocol debug output enabled.\n"); - } - else if (strcmp (mon, "set remote-debug 0") == 0) - { - remote_debug = 0; - monitor_output ("Protocol debug output disabled.\n"); - } - else if (startswith (mon, "set debug-format ")) - { - std::string error_msg - = parse_debug_format_options (mon + sizeof ("set debug-format ") - 1, - 1); - - if (!error_msg.empty ()) - { - monitor_output (error_msg.c_str ()); - monitor_show_help (); - write_enn (own_buf); - } - } - else if (strcmp (mon, "set debug-file") == 0) - debug_set_output (nullptr); - else if (startswith (mon, "set debug-file ")) - debug_set_output (mon + sizeof ("set debug-file ") - 1); - else if (strcmp (mon, "help") == 0) - monitor_show_help (); - else if (strcmp (mon, "exit") == 0) - exit_requested = true; - else - { - monitor_output ("Unknown monitor command.\n\n"); - monitor_show_help (); - write_enn (own_buf); - } -} - -/* Associates a callback with each supported qXfer'able object. */ - -struct qxfer -{ - /* The object this handler handles. */ - const char *object; - - /* Request that the target transfer up to LEN 8-bit bytes of the - target's OBJECT. The OFFSET, for a seekable object, specifies - the starting point. The ANNEX can be used to provide additional - data-specific information to the target. - - Return the number of bytes actually transfered, zero when no - further transfer is possible, -1 on error, -2 when the transfer - is not supported, and -3 on a verbose error message that should - be preserved. Return of a positive value smaller than LEN does - not indicate the end of the object, only the end of the transfer. - - One, and only one, of readbuf or writebuf must be non-NULL. */ - int (*xfer) (const char *annex, - gdb_byte *readbuf, const gdb_byte *writebuf, - ULONGEST offset, LONGEST len); -}; - -/* Handle qXfer:auxv:read. */ - -static int -handle_qxfer_auxv (const char *annex, - gdb_byte *readbuf, const gdb_byte *writebuf, - ULONGEST offset, LONGEST len) -{ - if (the_target->read_auxv == NULL || writebuf != NULL) - return -2; - - if (annex[0] != '\0' || current_thread == NULL) - return -1; - - return (*the_target->read_auxv) (offset, readbuf, len); -} - -/* Handle qXfer:exec-file:read. */ - -static int -handle_qxfer_exec_file (const char *annex, - gdb_byte *readbuf, const gdb_byte *writebuf, - ULONGEST offset, LONGEST len) -{ - char *file; - ULONGEST pid; - int total_len; - - if (the_target->pid_to_exec_file == NULL || writebuf != NULL) - return -2; - - if (annex[0] == '\0') - { - if (current_thread == NULL) - return -1; - - pid = pid_of (current_thread); - } - else - { - annex = unpack_varlen_hex (annex, &pid); - if (annex[0] != '\0') - return -1; - } - - if (pid <= 0) - return -1; - - file = (*the_target->pid_to_exec_file) (pid); - if (file == NULL) - return -1; - - total_len = strlen (file); - - if (offset > total_len) - return -1; - - if (offset + len > total_len) - len = total_len - offset; - - memcpy (readbuf, file + offset, len); - return len; -} - -/* Handle qXfer:features:read. */ - -static int -handle_qxfer_features (const char *annex, - gdb_byte *readbuf, const gdb_byte *writebuf, - ULONGEST offset, LONGEST len) -{ - const char *document; - size_t total_len; - - if (writebuf != NULL) - return -2; - - if (!target_running ()) - return -1; - - /* Grab the correct annex. */ - document = get_features_xml (annex); - if (document == NULL) - return -1; - - total_len = strlen (document); - - if (offset > total_len) - return -1; - - if (offset + len > total_len) - len = total_len - offset; - - memcpy (readbuf, document + offset, len); - return len; -} - -/* Handle qXfer:libraries:read. */ - -static int -handle_qxfer_libraries (const char *annex, - gdb_byte *readbuf, const gdb_byte *writebuf, - ULONGEST offset, LONGEST len) -{ - if (writebuf != NULL) - return -2; - - if (annex[0] != '\0' || current_thread == NULL) - return -1; - - std::string document = "<library-list version=\"1.0\">\n"; - - for (const dll_info &dll : all_dlls) - document += string_printf - (" <library name=\"%s\"><segment address=\"0x%s\"/></library>\n", - dll.name.c_str (), paddress (dll.base_addr)); - - document += "</library-list>\n"; - - if (offset > document.length ()) - return -1; - - if (offset + len > document.length ()) - len = document.length () - offset; - - memcpy (readbuf, &document[offset], len); - - return len; -} - -/* Handle qXfer:libraries-svr4:read. */ - -static int -handle_qxfer_libraries_svr4 (const char *annex, - gdb_byte *readbuf, const gdb_byte *writebuf, - ULONGEST offset, LONGEST len) -{ - if (writebuf != NULL) - return -2; - - if (current_thread == NULL || the_target->qxfer_libraries_svr4 == NULL) - return -1; - - return the_target->qxfer_libraries_svr4 (annex, readbuf, writebuf, offset, len); -} - -/* Handle qXfer:osadata:read. */ - -static int -handle_qxfer_osdata (const char *annex, - gdb_byte *readbuf, const gdb_byte *writebuf, - ULONGEST offset, LONGEST len) -{ - if (the_target->qxfer_osdata == NULL || writebuf != NULL) - return -2; - - return (*the_target->qxfer_osdata) (annex, readbuf, NULL, offset, len); -} - -/* Handle qXfer:siginfo:read and qXfer:siginfo:write. */ - -static int -handle_qxfer_siginfo (const char *annex, - gdb_byte *readbuf, const gdb_byte *writebuf, - ULONGEST offset, LONGEST len) -{ - if (the_target->qxfer_siginfo == NULL) - return -2; - - if (annex[0] != '\0' || current_thread == NULL) - return -1; - - return (*the_target->qxfer_siginfo) (annex, readbuf, writebuf, offset, len); -} - -/* Handle qXfer:statictrace:read. */ - -static int -handle_qxfer_statictrace (const char *annex, - gdb_byte *readbuf, const gdb_byte *writebuf, - ULONGEST offset, LONGEST len) -{ - client_state &cs = get_client_state (); - ULONGEST nbytes; - - if (writebuf != NULL) - return -2; - - if (annex[0] != '\0' || current_thread == NULL - || cs.current_traceframe == -1) - return -1; - - if (traceframe_read_sdata (cs.current_traceframe, offset, - readbuf, len, &nbytes)) - return -1; - return nbytes; -} - -/* Helper for handle_qxfer_threads_proper. - Emit the XML to describe the thread of INF. */ - -static void -handle_qxfer_threads_worker (thread_info *thread, struct buffer *buffer) -{ - ptid_t ptid = ptid_of (thread); - char ptid_s[100]; - int core = target_core_of_thread (ptid); - char core_s[21]; - const char *name = target_thread_name (ptid); - int handle_len; - gdb_byte *handle; - bool handle_status = target_thread_handle (ptid, &handle, &handle_len); - - write_ptid (ptid_s, ptid); - - buffer_xml_printf (buffer, "<thread id=\"%s\"", ptid_s); - - if (core != -1) - { - sprintf (core_s, "%d", core); - buffer_xml_printf (buffer, " core=\"%s\"", core_s); - } - - if (name != NULL) - buffer_xml_printf (buffer, " name=\"%s\"", name); - - if (handle_status) - { - char *handle_s = (char *) alloca (handle_len * 2 + 1); - bin2hex (handle, handle_s, handle_len); - buffer_xml_printf (buffer, " handle=\"%s\"", handle_s); - } - - buffer_xml_printf (buffer, "/>\n"); -} - -/* Helper for handle_qxfer_threads. */ - -static void -handle_qxfer_threads_proper (struct buffer *buffer) -{ - buffer_grow_str (buffer, "<threads>\n"); - - for_each_thread ([&] (thread_info *thread) - { - handle_qxfer_threads_worker (thread, buffer); - }); - - buffer_grow_str0 (buffer, "</threads>\n"); -} - -/* Handle qXfer:threads:read. */ - -static int -handle_qxfer_threads (const char *annex, - gdb_byte *readbuf, const gdb_byte *writebuf, - ULONGEST offset, LONGEST len) -{ - static char *result = 0; - static unsigned int result_length = 0; - - if (writebuf != NULL) - return -2; - - if (annex[0] != '\0') - return -1; - - if (offset == 0) - { - struct buffer buffer; - /* When asked for data at offset 0, generate everything and store into - 'result'. Successive reads will be served off 'result'. */ - if (result) - free (result); - - buffer_init (&buffer); - - handle_qxfer_threads_proper (&buffer); - - result = buffer_finish (&buffer); - result_length = strlen (result); - buffer_free (&buffer); - } - - if (offset >= result_length) - { - /* We're out of data. */ - free (result); - result = NULL; - result_length = 0; - return 0; - } - - if (len > result_length - offset) - len = result_length - offset; - - memcpy (readbuf, result + offset, len); - - return len; -} - -/* Handle qXfer:traceframe-info:read. */ - -static int -handle_qxfer_traceframe_info (const char *annex, - gdb_byte *readbuf, const gdb_byte *writebuf, - ULONGEST offset, LONGEST len) -{ - client_state &cs = get_client_state (); - static char *result = 0; - static unsigned int result_length = 0; - - if (writebuf != NULL) - return -2; - - if (!target_running () || annex[0] != '\0' || cs.current_traceframe == -1) - return -1; - - if (offset == 0) - { - struct buffer buffer; - - /* When asked for data at offset 0, generate everything and - store into 'result'. Successive reads will be served off - 'result'. */ - free (result); - - buffer_init (&buffer); - - traceframe_read_info (cs.current_traceframe, &buffer); - - result = buffer_finish (&buffer); - result_length = strlen (result); - buffer_free (&buffer); - } - - if (offset >= result_length) - { - /* We're out of data. */ - free (result); - result = NULL; - result_length = 0; - return 0; - } - - if (len > result_length - offset) - len = result_length - offset; - - memcpy (readbuf, result + offset, len); - return len; -} - -/* Handle qXfer:fdpic:read. */ - -static int -handle_qxfer_fdpic (const char *annex, gdb_byte *readbuf, - const gdb_byte *writebuf, ULONGEST offset, LONGEST len) -{ - if (the_target->read_loadmap == NULL) - return -2; - - if (current_thread == NULL) - return -1; - - return (*the_target->read_loadmap) (annex, offset, readbuf, len); -} - -/* Handle qXfer:btrace:read. */ - -static int -handle_qxfer_btrace (const char *annex, - gdb_byte *readbuf, const gdb_byte *writebuf, - ULONGEST offset, LONGEST len) -{ - client_state &cs = get_client_state (); - static struct buffer cache; - struct thread_info *thread; - enum btrace_read_type type; - int result; - - if (writebuf != NULL) - return -2; - - if (cs.general_thread == null_ptid - || cs.general_thread == minus_one_ptid) - { - strcpy (cs.own_buf, "E.Must select a single thread."); - return -3; - } - - thread = find_thread_ptid (cs.general_thread); - if (thread == NULL) - { - strcpy (cs.own_buf, "E.No such thread."); - return -3; - } - - if (thread->btrace == NULL) - { - strcpy (cs.own_buf, "E.Btrace not enabled."); - return -3; - } - - if (strcmp (annex, "all") == 0) - type = BTRACE_READ_ALL; - else if (strcmp (annex, "new") == 0) - type = BTRACE_READ_NEW; - else if (strcmp (annex, "delta") == 0) - type = BTRACE_READ_DELTA; - else - { - strcpy (cs.own_buf, "E.Bad annex."); - return -3; - } - - if (offset == 0) - { - buffer_free (&cache); - - try - { - result = target_read_btrace (thread->btrace, &cache, type); - if (result != 0) - memcpy (cs.own_buf, cache.buffer, cache.used_size); - } - catch (const gdb_exception_error &exception) - { - sprintf (cs.own_buf, "E.%s", exception.what ()); - result = -1; - } - - if (result != 0) - return -3; - } - else if (offset > cache.used_size) - { - buffer_free (&cache); - return -3; - } - - if (len > cache.used_size - offset) - len = cache.used_size - offset; - - memcpy (readbuf, cache.buffer + offset, len); - - return len; -} - -/* Handle qXfer:btrace-conf:read. */ - -static int -handle_qxfer_btrace_conf (const char *annex, - gdb_byte *readbuf, const gdb_byte *writebuf, - ULONGEST offset, LONGEST len) -{ - client_state &cs = get_client_state (); - static struct buffer cache; - struct thread_info *thread; - int result; - - if (writebuf != NULL) - return -2; - - if (annex[0] != '\0') - return -1; - - if (cs.general_thread == null_ptid - || cs.general_thread == minus_one_ptid) - { - strcpy (cs.own_buf, "E.Must select a single thread."); - return -3; - } - - thread = find_thread_ptid (cs.general_thread); - if (thread == NULL) - { - strcpy (cs.own_buf, "E.No such thread."); - return -3; - } - - if (thread->btrace == NULL) - { - strcpy (cs.own_buf, "E.Btrace not enabled."); - return -3; - } - - if (offset == 0) - { - buffer_free (&cache); - - try - { - result = target_read_btrace_conf (thread->btrace, &cache); - if (result != 0) - memcpy (cs.own_buf, cache.buffer, cache.used_size); - } - catch (const gdb_exception_error &exception) - { - sprintf (cs.own_buf, "E.%s", exception.what ()); - result = -1; - } - - if (result != 0) - return -3; - } - else if (offset > cache.used_size) - { - buffer_free (&cache); - return -3; - } - - if (len > cache.used_size - offset) - len = cache.used_size - offset; - - memcpy (readbuf, cache.buffer + offset, len); - - return len; -} - -static const struct qxfer qxfer_packets[] = - { - { "auxv", handle_qxfer_auxv }, - { "btrace", handle_qxfer_btrace }, - { "btrace-conf", handle_qxfer_btrace_conf }, - { "exec-file", handle_qxfer_exec_file}, - { "fdpic", handle_qxfer_fdpic}, - { "features", handle_qxfer_features }, - { "libraries", handle_qxfer_libraries }, - { "libraries-svr4", handle_qxfer_libraries_svr4 }, - { "osdata", handle_qxfer_osdata }, - { "siginfo", handle_qxfer_siginfo }, - { "statictrace", handle_qxfer_statictrace }, - { "threads", handle_qxfer_threads }, - { "traceframe-info", handle_qxfer_traceframe_info }, - }; - -static int -handle_qxfer (char *own_buf, int packet_len, int *new_packet_len_p) -{ - int i; - char *object; - char *rw; - char *annex; - char *offset; - - if (!startswith (own_buf, "qXfer:")) - return 0; - - /* Grab the object, r/w and annex. */ - if (decode_xfer (own_buf + 6, &object, &rw, &annex, &offset) < 0) - { - write_enn (own_buf); - return 1; - } - - for (i = 0; - i < sizeof (qxfer_packets) / sizeof (qxfer_packets[0]); - i++) - { - const struct qxfer *q = &qxfer_packets[i]; - - if (strcmp (object, q->object) == 0) - { - if (strcmp (rw, "read") == 0) - { - unsigned char *data; - int n; - CORE_ADDR ofs; - unsigned int len; - - /* Grab the offset and length. */ - if (decode_xfer_read (offset, &ofs, &len) < 0) - { - write_enn (own_buf); - return 1; - } - - /* Read one extra byte, as an indicator of whether there is - more. */ - if (len > PBUFSIZ - 2) - len = PBUFSIZ - 2; - data = (unsigned char *) malloc (len + 1); - if (data == NULL) - { - write_enn (own_buf); - return 1; - } - n = (*q->xfer) (annex, data, NULL, ofs, len + 1); - if (n == -2) - { - free (data); - return 0; - } - else if (n == -3) - { - /* Preserve error message. */ - } - else if (n < 0) - write_enn (own_buf); - else if (n > len) - *new_packet_len_p = write_qxfer_response (own_buf, data, len, 1); - else - *new_packet_len_p = write_qxfer_response (own_buf, data, n, 0); - - free (data); - return 1; - } - else if (strcmp (rw, "write") == 0) - { - int n; - unsigned int len; - CORE_ADDR ofs; - unsigned char *data; - - strcpy (own_buf, "E00"); - data = (unsigned char *) malloc (packet_len - (offset - own_buf)); - if (data == NULL) - { - write_enn (own_buf); - return 1; - } - if (decode_xfer_write (offset, packet_len - (offset - own_buf), - &ofs, &len, data) < 0) - { - free (data); - write_enn (own_buf); - return 1; - } - - n = (*q->xfer) (annex, NULL, data, ofs, len); - if (n == -2) - { - free (data); - return 0; - } - else if (n == -3) - { - /* Preserve error message. */ - } - else if (n < 0) - write_enn (own_buf); - else - sprintf (own_buf, "%x", n); - - free (data); - return 1; - } - - return 0; - } - } - - return 0; -} - -/* Compute 32 bit CRC from inferior memory. - - On success, return 32 bit CRC. - On failure, return (unsigned long long) -1. */ - -static unsigned long long -crc32 (CORE_ADDR base, int len, unsigned int crc) -{ - while (len--) - { - unsigned char byte = 0; - - /* Return failure if memory read fails. */ - if (read_inferior_memory (base, &byte, 1) != 0) - return (unsigned long long) -1; - - crc = xcrc32 (&byte, 1, crc); - base++; - } - return (unsigned long long) crc; -} - -/* Add supported btrace packets to BUF. */ - -static void -supported_btrace_packets (char *buf) -{ - strcat (buf, ";Qbtrace:bts+"); - strcat (buf, ";Qbtrace-conf:bts:size+"); - strcat (buf, ";Qbtrace:pt+"); - strcat (buf, ";Qbtrace-conf:pt:size+"); - strcat (buf, ";Qbtrace:off+"); - strcat (buf, ";qXfer:btrace:read+"); - strcat (buf, ";qXfer:btrace-conf:read+"); -} - -/* Handle all of the extended 'q' packets. */ - -static void -handle_query (char *own_buf, int packet_len, int *new_packet_len_p) -{ - client_state &cs = get_client_state (); - static std::list<thread_info *>::const_iterator thread_iter; - - /* Reply the current thread id. */ - if (strcmp ("qC", own_buf) == 0 && !disable_packet_qC) - { - ptid_t ptid; - require_running_or_return (own_buf); - - if (cs.general_thread != null_ptid && cs.general_thread != minus_one_ptid) - ptid = cs.general_thread; - else - { - thread_iter = all_threads.begin (); - ptid = (*thread_iter)->id; - } - - sprintf (own_buf, "QC"); - own_buf += 2; - write_ptid (own_buf, ptid); - return; - } - - if (strcmp ("qSymbol::", own_buf) == 0) - { - struct thread_info *save_thread = current_thread; - - /* For qSymbol, GDB only changes the current thread if the - previous current thread was of a different process. So if - the previous thread is gone, we need to pick another one of - the same process. This can happen e.g., if we followed an - exec in a non-leader thread. */ - if (current_thread == NULL) - { - current_thread - = find_any_thread_of_pid (cs.general_thread.pid ()); - - /* Just in case, if we didn't find a thread, then bail out - instead of crashing. */ - if (current_thread == NULL) - { - write_enn (own_buf); - current_thread = save_thread; - return; - } - } - - /* GDB is suggesting new symbols have been loaded. This may - mean a new shared library has been detected as loaded, so - take the opportunity to check if breakpoints we think are - inserted, still are. Note that it isn't guaranteed that - we'll see this when a shared library is loaded, and nor will - we see this for unloads (although breakpoints in unloaded - libraries shouldn't trigger), as GDB may not find symbols for - the library at all. We also re-validate breakpoints when we - see a second GDB breakpoint for the same address, and or when - we access breakpoint shadows. */ - validate_breakpoints (); - - if (target_supports_tracepoints ()) - tracepoint_look_up_symbols (); - - if (current_thread != NULL && the_target->look_up_symbols != NULL) - (*the_target->look_up_symbols) (); - - current_thread = save_thread; - - strcpy (own_buf, "OK"); - return; - } - - if (!disable_packet_qfThreadInfo) - { - if (strcmp ("qfThreadInfo", own_buf) == 0) - { - require_running_or_return (own_buf); - thread_iter = all_threads.begin (); - - *own_buf++ = 'm'; - ptid_t ptid = (*thread_iter)->id; - write_ptid (own_buf, ptid); - thread_iter++; - return; - } - - if (strcmp ("qsThreadInfo", own_buf) == 0) - { - require_running_or_return (own_buf); - if (thread_iter != all_threads.end ()) - { - *own_buf++ = 'm'; - ptid_t ptid = (*thread_iter)->id; - write_ptid (own_buf, ptid); - thread_iter++; - return; - } - else - { - sprintf (own_buf, "l"); - return; - } - } - } - - if (the_target->read_offsets != NULL - && strcmp ("qOffsets", own_buf) == 0) - { - CORE_ADDR text, data; - - require_running_or_return (own_buf); - if (the_target->read_offsets (&text, &data)) - sprintf (own_buf, "Text=%lX;Data=%lX;Bss=%lX", - (long)text, (long)data, (long)data); - else - write_enn (own_buf); - - return; - } - - /* Protocol features query. */ - if (startswith (own_buf, "qSupported") - && (own_buf[10] == ':' || own_buf[10] == '\0')) - { - char *p = &own_buf[10]; - int gdb_supports_qRelocInsn = 0; - - /* Process each feature being provided by GDB. The first - feature will follow a ':', and latter features will follow - ';'. */ - if (*p == ':') - { - char **qsupported = NULL; - int count = 0; - int unknown = 0; - int i; - - /* Two passes, to avoid nested strtok calls in - target_process_qsupported. */ - char *saveptr; - for (p = strtok_r (p + 1, ";", &saveptr); - p != NULL; - p = strtok_r (NULL, ";", &saveptr)) - { - count++; - qsupported = XRESIZEVEC (char *, qsupported, count); - qsupported[count - 1] = xstrdup (p); - } - - for (i = 0; i < count; i++) - { - p = qsupported[i]; - if (strcmp (p, "multiprocess+") == 0) - { - /* GDB supports and wants multi-process support if - possible. */ - if (target_supports_multi_process ()) - cs.multi_process = 1; - } - else if (strcmp (p, "qRelocInsn+") == 0) - { - /* GDB supports relocate instruction requests. */ - gdb_supports_qRelocInsn = 1; - } - else if (strcmp (p, "swbreak+") == 0) - { - /* GDB wants us to report whether a trap is caused - by a software breakpoint and for us to handle PC - adjustment if necessary on this target. */ - if (target_supports_stopped_by_sw_breakpoint ()) - cs.swbreak_feature = 1; - } - else if (strcmp (p, "hwbreak+") == 0) - { - /* GDB wants us to report whether a trap is caused - by a hardware breakpoint. */ - if (target_supports_stopped_by_hw_breakpoint ()) - cs.hwbreak_feature = 1; - } - else if (strcmp (p, "fork-events+") == 0) - { - /* GDB supports and wants fork events if possible. */ - if (target_supports_fork_events ()) - cs.report_fork_events = 1; - } - else if (strcmp (p, "vfork-events+") == 0) - { - /* GDB supports and wants vfork events if possible. */ - if (target_supports_vfork_events ()) - cs.report_vfork_events = 1; - } - else if (strcmp (p, "exec-events+") == 0) - { - /* GDB supports and wants exec events if possible. */ - if (target_supports_exec_events ()) - cs.report_exec_events = 1; - } - else if (strcmp (p, "vContSupported+") == 0) - cs.vCont_supported = 1; - else if (strcmp (p, "QThreadEvents+") == 0) - ; - else if (strcmp (p, "no-resumed+") == 0) - { - /* GDB supports and wants TARGET_WAITKIND_NO_RESUMED - events. */ - report_no_resumed = true; - } - else - { - /* Move the unknown features all together. */ - qsupported[i] = NULL; - qsupported[unknown] = p; - unknown++; - } - } - - /* Give the target backend a chance to process the unknown - features. */ - target_process_qsupported (qsupported, unknown); - - for (i = 0; i < count; i++) - free (qsupported[i]); - free (qsupported); - } - - sprintf (own_buf, - "PacketSize=%x;QPassSignals+;QProgramSignals+;" - "QStartupWithShell+;QEnvironmentHexEncoded+;" - "QEnvironmentReset+;QEnvironmentUnset+;" - "QSetWorkingDir+", - PBUFSIZ - 1); - - if (target_supports_catch_syscall ()) - strcat (own_buf, ";QCatchSyscalls+"); - - if (the_target->qxfer_libraries_svr4 != NULL) - strcat (own_buf, ";qXfer:libraries-svr4:read+" - ";augmented-libraries-svr4-read+"); - else - { - /* We do not have any hook to indicate whether the non-SVR4 target - backend supports qXfer:libraries:read, so always report it. */ - strcat (own_buf, ";qXfer:libraries:read+"); - } - - if (the_target->read_auxv != NULL) - strcat (own_buf, ";qXfer:auxv:read+"); - - if (the_target->qxfer_siginfo != NULL) - strcat (own_buf, ";qXfer:siginfo:read+;qXfer:siginfo:write+"); - - if (the_target->read_loadmap != NULL) - strcat (own_buf, ";qXfer:fdpic:read+"); - - /* We always report qXfer:features:read, as targets may - install XML files on a subsequent call to arch_setup. - If we reported to GDB on startup that we don't support - qXfer:feature:read at all, we will never be re-queried. */ - strcat (own_buf, ";qXfer:features:read+"); - - if (cs.transport_is_reliable) - strcat (own_buf, ";QStartNoAckMode+"); - - if (the_target->qxfer_osdata != NULL) - strcat (own_buf, ";qXfer:osdata:read+"); - - if (target_supports_multi_process ()) - strcat (own_buf, ";multiprocess+"); - - if (target_supports_fork_events ()) - strcat (own_buf, ";fork-events+"); - - if (target_supports_vfork_events ()) - strcat (own_buf, ";vfork-events+"); - - if (target_supports_exec_events ()) - strcat (own_buf, ";exec-events+"); - - if (target_supports_non_stop ()) - strcat (own_buf, ";QNonStop+"); - - if (target_supports_disable_randomization ()) - strcat (own_buf, ";QDisableRandomization+"); - - strcat (own_buf, ";qXfer:threads:read+"); - - if (target_supports_tracepoints ()) - { - strcat (own_buf, ";ConditionalTracepoints+"); - strcat (own_buf, ";TraceStateVariables+"); - strcat (own_buf, ";TracepointSource+"); - strcat (own_buf, ";DisconnectedTracing+"); - if (gdb_supports_qRelocInsn && target_supports_fast_tracepoints ()) - strcat (own_buf, ";FastTracepoints+"); - strcat (own_buf, ";StaticTracepoints+"); - strcat (own_buf, ";InstallInTrace+"); - strcat (own_buf, ";qXfer:statictrace:read+"); - strcat (own_buf, ";qXfer:traceframe-info:read+"); - strcat (own_buf, ";EnableDisableTracepoints+"); - strcat (own_buf, ";QTBuffer:size+"); - strcat (own_buf, ";tracenz+"); - } - - if (target_supports_hardware_single_step () - || target_supports_software_single_step () ) - { - strcat (own_buf, ";ConditionalBreakpoints+"); - } - strcat (own_buf, ";BreakpointCommands+"); - - if (target_supports_agent ()) - strcat (own_buf, ";QAgent+"); - - supported_btrace_packets (own_buf); - - if (target_supports_stopped_by_sw_breakpoint ()) - strcat (own_buf, ";swbreak+"); - - if (target_supports_stopped_by_hw_breakpoint ()) - strcat (own_buf, ";hwbreak+"); - - if (the_target->pid_to_exec_file != NULL) - strcat (own_buf, ";qXfer:exec-file:read+"); - - strcat (own_buf, ";vContSupported+"); - - strcat (own_buf, ";QThreadEvents+"); - - strcat (own_buf, ";no-resumed+"); - - /* Reinitialize components as needed for the new connection. */ - hostio_handle_new_gdb_connection (); - target_handle_new_gdb_connection (); - - return; - } - - /* Thread-local storage support. */ - if (the_target->get_tls_address != NULL - && startswith (own_buf, "qGetTLSAddr:")) - { - char *p = own_buf + 12; - CORE_ADDR parts[2], address = 0; - int i, err; - ptid_t ptid = null_ptid; - - require_running_or_return (own_buf); - - for (i = 0; i < 3; i++) - { - char *p2; - int len; - - if (p == NULL) - break; - - p2 = strchr (p, ','); - if (p2) - { - len = p2 - p; - p2++; - } - else - { - len = strlen (p); - p2 = NULL; - } - - if (i == 0) - ptid = read_ptid (p, NULL); - else - decode_address (&parts[i - 1], p, len); - p = p2; - } - - if (p != NULL || i < 3) - err = 1; - else - { - struct thread_info *thread = find_thread_ptid (ptid); - - if (thread == NULL) - err = 2; - else - err = the_target->get_tls_address (thread, parts[0], parts[1], - &address); - } - - if (err == 0) - { - strcpy (own_buf, paddress(address)); - return; - } - else if (err > 0) - { - write_enn (own_buf); - return; - } - - /* Otherwise, pretend we do not understand this packet. */ - } - - /* Windows OS Thread Information Block address support. */ - if (the_target->get_tib_address != NULL - && startswith (own_buf, "qGetTIBAddr:")) - { - const char *annex; - int n; - CORE_ADDR tlb; - ptid_t ptid = read_ptid (own_buf + 12, &annex); - - n = (*the_target->get_tib_address) (ptid, &tlb); - if (n == 1) - { - strcpy (own_buf, paddress(tlb)); - return; - } - else if (n == 0) - { - write_enn (own_buf); - return; - } - return; - } - - /* Handle "monitor" commands. */ - if (startswith (own_buf, "qRcmd,")) - { - char *mon = (char *) malloc (PBUFSIZ); - int len = strlen (own_buf + 6); - - if (mon == NULL) - { - write_enn (own_buf); - return; - } - - if ((len % 2) != 0 - || hex2bin (own_buf + 6, (gdb_byte *) mon, len / 2) != len / 2) - { - write_enn (own_buf); - free (mon); - return; - } - mon[len / 2] = '\0'; - - write_ok (own_buf); - - if (the_target->handle_monitor_command == NULL - || (*the_target->handle_monitor_command) (mon) == 0) - /* Default processing. */ - handle_monitor_command (mon, own_buf); - - free (mon); - return; - } - - if (startswith (own_buf, "qSearch:memory:")) - { - require_running_or_return (own_buf); - handle_search_memory (own_buf, packet_len); - return; - } - - if (strcmp (own_buf, "qAttached") == 0 - || startswith (own_buf, "qAttached:")) - { - struct process_info *process; - - if (own_buf[sizeof ("qAttached") - 1]) - { - int pid = strtoul (own_buf + sizeof ("qAttached:") - 1, NULL, 16); - process = find_process_pid (pid); - } - else - { - require_running_or_return (own_buf); - process = current_process (); - } - - if (process == NULL) - { - write_enn (own_buf); - return; - } - - strcpy (own_buf, process->attached ? "1" : "0"); - return; - } - - if (startswith (own_buf, "qCRC:")) - { - /* CRC check (compare-section). */ - const char *comma; - ULONGEST base; - int len; - unsigned long long crc; - - require_running_or_return (own_buf); - comma = unpack_varlen_hex (own_buf + 5, &base); - if (*comma++ != ',') - { - write_enn (own_buf); - return; - } - len = strtoul (comma, NULL, 16); - crc = crc32 (base, len, 0xffffffff); - /* Check for memory failure. */ - if (crc == (unsigned long long) -1) - { - write_enn (own_buf); - return; - } - sprintf (own_buf, "C%lx", (unsigned long) crc); - return; - } - - if (handle_qxfer (own_buf, packet_len, new_packet_len_p)) - return; - - if (target_supports_tracepoints () && handle_tracepoint_query (own_buf)) - return; - - /* Otherwise we didn't know what packet it was. Say we didn't - understand it. */ - own_buf[0] = 0; -} - -static void gdb_wants_all_threads_stopped (void); -static void resume (struct thread_resume *actions, size_t n); - -/* The callback that is passed to visit_actioned_threads. */ -typedef int (visit_actioned_threads_callback_ftype) - (const struct thread_resume *, struct thread_info *); - -/* Call CALLBACK for any thread to which ACTIONS applies to. Returns - true if CALLBACK returns true. Returns false if no matching thread - is found or CALLBACK results false. - Note: This function is itself a callback for find_thread. */ - -static bool -visit_actioned_threads (thread_info *thread, - const struct thread_resume *actions, - size_t num_actions, - visit_actioned_threads_callback_ftype *callback) -{ - for (size_t i = 0; i < num_actions; i++) - { - const struct thread_resume *action = &actions[i]; - - if (action->thread == minus_one_ptid - || action->thread == thread->id - || ((action->thread.pid () - == thread->id.pid ()) - && action->thread.lwp () == -1)) - { - if ((*callback) (action, thread)) - return true; - } - } - - return false; -} - -/* Callback for visit_actioned_threads. If the thread has a pending - status to report, report it now. */ - -static int -handle_pending_status (const struct thread_resume *resumption, - struct thread_info *thread) -{ - client_state &cs = get_client_state (); - if (thread->status_pending_p) - { - thread->status_pending_p = 0; - - cs.last_status = thread->last_status; - cs.last_ptid = thread->id; - prepare_resume_reply (cs.own_buf, cs.last_ptid, &cs.last_status); - return 1; - } - return 0; -} - -/* Parse vCont packets. */ -static void -handle_v_cont (char *own_buf) -{ - const char *p; - int n = 0, i = 0; - struct thread_resume *resume_info; - struct thread_resume default_action { null_ptid }; - - /* Count the number of semicolons in the packet. There should be one - for every action. */ - p = &own_buf[5]; - while (p) - { - n++; - p++; - p = strchr (p, ';'); - } - - resume_info = (struct thread_resume *) malloc (n * sizeof (resume_info[0])); - if (resume_info == NULL) - goto err; - - p = &own_buf[5]; - while (*p) - { - p++; - - memset (&resume_info[i], 0, sizeof resume_info[i]); - - if (p[0] == 's' || p[0] == 'S') - resume_info[i].kind = resume_step; - else if (p[0] == 'r') - resume_info[i].kind = resume_step; - else if (p[0] == 'c' || p[0] == 'C') - resume_info[i].kind = resume_continue; - else if (p[0] == 't') - resume_info[i].kind = resume_stop; - else - goto err; - - if (p[0] == 'S' || p[0] == 'C') - { - char *q; - int sig = strtol (p + 1, &q, 16); - if (p == q) - goto err; - p = q; - - if (!gdb_signal_to_host_p ((enum gdb_signal) sig)) - goto err; - resume_info[i].sig = gdb_signal_to_host ((enum gdb_signal) sig); - } - else if (p[0] == 'r') - { - ULONGEST addr; - - p = unpack_varlen_hex (p + 1, &addr); - resume_info[i].step_range_start = addr; - - if (*p != ',') - goto err; - - p = unpack_varlen_hex (p + 1, &addr); - resume_info[i].step_range_end = addr; - } - else - { - p = p + 1; - } - - if (p[0] == 0) - { - resume_info[i].thread = minus_one_ptid; - default_action = resume_info[i]; - - /* Note: we don't increment i here, we'll overwrite this entry - the next time through. */ - } - else if (p[0] == ':') - { - const char *q; - ptid_t ptid = read_ptid (p + 1, &q); - - if (p == q) - goto err; - p = q; - if (p[0] != ';' && p[0] != 0) - goto err; - - resume_info[i].thread = ptid; - - i++; - } - } - - if (i < n) - resume_info[i] = default_action; - - resume (resume_info, n); - free (resume_info); - return; - -err: - write_enn (own_buf); - free (resume_info); - return; -} - -/* Resume target with ACTIONS, an array of NUM_ACTIONS elements. */ - -static void -resume (struct thread_resume *actions, size_t num_actions) -{ - client_state &cs = get_client_state (); - if (!non_stop) - { - /* Check if among the threads that GDB wants actioned, there's - one with a pending status to report. If so, skip actually - resuming/stopping and report the pending event - immediately. */ - - thread_info *thread_with_status = find_thread ([&] (thread_info *thread) - { - return visit_actioned_threads (thread, actions, num_actions, - handle_pending_status); - }); - - if (thread_with_status != NULL) - return; - - enable_async_io (); - } - - (*the_target->resume) (actions, num_actions); - - if (non_stop) - write_ok (cs.own_buf); - else - { - cs.last_ptid = mywait (minus_one_ptid, &cs.last_status, 0, 1); - - if (cs.last_status.kind == TARGET_WAITKIND_NO_RESUMED - && !report_no_resumed) - { - /* The client does not support this stop reply. At least - return error. */ - sprintf (cs.own_buf, "E.No unwaited-for children left."); - disable_async_io (); - return; - } - - if (cs.last_status.kind != TARGET_WAITKIND_EXITED - && cs.last_status.kind != TARGET_WAITKIND_SIGNALLED - && cs.last_status.kind != TARGET_WAITKIND_NO_RESUMED) - current_thread->last_status = cs.last_status; - - /* From the client's perspective, all-stop mode always stops all - threads implicitly (and the target backend has already done - so by now). Tag all threads as "want-stopped", so we don't - resume them implicitly without the client telling us to. */ - gdb_wants_all_threads_stopped (); - prepare_resume_reply (cs.own_buf, cs.last_ptid, &cs.last_status); - disable_async_io (); - - if (cs.last_status.kind == TARGET_WAITKIND_EXITED - || cs.last_status.kind == TARGET_WAITKIND_SIGNALLED) - target_mourn_inferior (cs.last_ptid); - } -} - -/* Attach to a new program. Return 1 if successful, 0 if failure. */ -static int -handle_v_attach (char *own_buf) -{ - client_state &cs = get_client_state (); - int pid; - - pid = strtol (own_buf + 8, NULL, 16); - if (pid != 0 && attach_inferior (pid) == 0) - { - /* Don't report shared library events after attaching, even if - some libraries are preloaded. GDB will always poll the - library list. Avoids the "stopped by shared library event" - notice on the GDB side. */ - dlls_changed = 0; - - if (non_stop) - { - /* In non-stop, we don't send a resume reply. Stop events - will follow up using the normal notification - mechanism. */ - write_ok (own_buf); - } - else - prepare_resume_reply (own_buf, cs.last_ptid, &cs.last_status); - - return 1; - } - else - { - write_enn (own_buf); - return 0; - } -} - -/* Run a new program. Return 1 if successful, 0 if failure. */ -static int -handle_v_run (char *own_buf) -{ - client_state &cs = get_client_state (); - char *p, *next_p; - std::vector<char *> new_argv; - char *new_program_name = NULL; - int i, new_argc; - - new_argc = 0; - for (p = own_buf + strlen ("vRun;"); p && *p; p = strchr (p, ';')) - { - p++; - new_argc++; - } - - for (i = 0, p = own_buf + strlen ("vRun;"); *p; p = next_p, ++i) - { - next_p = strchr (p, ';'); - if (next_p == NULL) - next_p = p + strlen (p); - - if (i == 0 && p == next_p) - { - /* No program specified. */ - new_program_name = NULL; - } - else if (p == next_p) - { - /* Empty argument. */ - new_argv.push_back (xstrdup ("''")); - } - else - { - size_t len = (next_p - p) / 2; - /* ARG is the unquoted argument received via the RSP. */ - char *arg = (char *) xmalloc (len + 1); - /* FULL_ARGS will contain the quoted version of ARG. */ - char *full_arg = (char *) xmalloc ((len + 1) * 2); - /* These are pointers used to navigate the strings above. */ - char *tmp_arg = arg; - char *tmp_full_arg = full_arg; - int need_quote = 0; - - hex2bin (p, (gdb_byte *) arg, len); - arg[len] = '\0'; - - while (*tmp_arg != '\0') - { - switch (*tmp_arg) - { - case '\n': - /* Quote \n. */ - *tmp_full_arg = '\''; - ++tmp_full_arg; - need_quote = 1; - break; - - case '\'': - /* Quote single quote. */ - *tmp_full_arg = '\\'; - ++tmp_full_arg; - break; - - default: - break; - } - - *tmp_full_arg = *tmp_arg; - ++tmp_full_arg; - ++tmp_arg; - } - - if (need_quote) - *tmp_full_arg++ = '\''; - - /* Finish FULL_ARG and push it into the vector containing - the argv. */ - *tmp_full_arg = '\0'; - if (i == 0) - new_program_name = full_arg; - else - new_argv.push_back (full_arg); - xfree (arg); - } - if (*next_p) - next_p++; - } - new_argv.push_back (NULL); - - if (new_program_name == NULL) - { - /* GDB didn't specify a program to run. Use the program from the - last run with the new argument list. */ - if (program_path.get () == NULL) - { - write_enn (own_buf); - free_vector_argv (new_argv); - return 0; - } - } - else - program_path.set (gdb::unique_xmalloc_ptr<char> (new_program_name)); - - /* Free the old argv and install the new one. */ - free_vector_argv (program_args); - program_args = new_argv; - - create_inferior (program_path.get (), program_args); - - if (cs.last_status.kind == TARGET_WAITKIND_STOPPED) - { - prepare_resume_reply (own_buf, cs.last_ptid, &cs.last_status); - - /* In non-stop, sending a resume reply doesn't set the general - thread, but GDB assumes a vRun sets it (this is so GDB can - query which is the main thread of the new inferior. */ - if (non_stop) - cs.general_thread = cs.last_ptid; - - return 1; - } - else - { - write_enn (own_buf); - return 0; - } -} - -/* Kill process. Return 1 if successful, 0 if failure. */ -static int -handle_v_kill (char *own_buf) -{ - client_state &cs = get_client_state (); - int pid; - char *p = &own_buf[6]; - if (cs.multi_process) - pid = strtol (p, NULL, 16); - else - pid = signal_pid; - - process_info *proc = find_process_pid (pid); - - if (proc != nullptr && kill_inferior (proc) == 0) - { - cs.last_status.kind = TARGET_WAITKIND_SIGNALLED; - cs.last_status.value.sig = GDB_SIGNAL_KILL; - cs.last_ptid = ptid_t (pid); - discard_queued_stop_replies (cs.last_ptid); - write_ok (own_buf); - return 1; - } - else - { - write_enn (own_buf); - return 0; - } -} - -/* Handle all of the extended 'v' packets. */ -void -handle_v_requests (char *own_buf, int packet_len, int *new_packet_len) -{ - client_state &cs = get_client_state (); - if (!disable_packet_vCont) - { - if (strcmp (own_buf, "vCtrlC") == 0) - { - (*the_target->request_interrupt) (); - write_ok (own_buf); - return; - } - - if (startswith (own_buf, "vCont;")) - { - handle_v_cont (own_buf); - return; - } - - if (startswith (own_buf, "vCont?")) - { - strcpy (own_buf, "vCont;c;C;t"); - - if (target_supports_hardware_single_step () - || target_supports_software_single_step () - || !cs.vCont_supported) - { - /* If target supports single step either by hardware or by - software, add actions s and S to the list of supported - actions. On the other hand, if GDB doesn't request the - supported vCont actions in qSupported packet, add s and - S to the list too. */ - own_buf = own_buf + strlen (own_buf); - strcpy (own_buf, ";s;S"); - } - - if (target_supports_range_stepping ()) - { - own_buf = own_buf + strlen (own_buf); - strcpy (own_buf, ";r"); - } - return; - } - } - - if (startswith (own_buf, "vFile:") - && handle_vFile (own_buf, packet_len, new_packet_len)) - return; - - if (startswith (own_buf, "vAttach;")) - { - if ((!extended_protocol || !cs.multi_process) && target_running ()) - { - fprintf (stderr, "Already debugging a process\n"); - write_enn (own_buf); - return; - } - handle_v_attach (own_buf); - return; - } - - if (startswith (own_buf, "vRun;")) - { - if ((!extended_protocol || !cs.multi_process) && target_running ()) - { - fprintf (stderr, "Already debugging a process\n"); - write_enn (own_buf); - return; - } - handle_v_run (own_buf); - return; - } - - if (startswith (own_buf, "vKill;")) - { - if (!target_running ()) - { - fprintf (stderr, "No process to kill\n"); - write_enn (own_buf); - return; - } - handle_v_kill (own_buf); - return; - } - - if (handle_notif_ack (own_buf, packet_len)) - return; - - /* Otherwise we didn't know what packet it was. Say we didn't - understand it. */ - own_buf[0] = 0; - return; -} - -/* Resume thread and wait for another event. In non-stop mode, - don't really wait here, but return immediatelly to the event - loop. */ -static void -myresume (char *own_buf, int step, int sig) -{ - client_state &cs = get_client_state (); - struct thread_resume resume_info[2]; - int n = 0; - int valid_cont_thread; - - valid_cont_thread = (cs.cont_thread != null_ptid - && cs.cont_thread != minus_one_ptid); - - if (step || sig || valid_cont_thread) - { - resume_info[0].thread = current_ptid; - if (step) - resume_info[0].kind = resume_step; - else - resume_info[0].kind = resume_continue; - resume_info[0].sig = sig; - n++; - } - - if (!valid_cont_thread) - { - resume_info[n].thread = minus_one_ptid; - resume_info[n].kind = resume_continue; - resume_info[n].sig = 0; - n++; - } - - resume (resume_info, n); -} - -/* Callback for for_each_thread. Make a new stop reply for each - stopped thread. */ - -static void -queue_stop_reply_callback (thread_info *thread) -{ - /* For now, assume targets that don't have this callback also don't - manage the thread's last_status field. */ - if (the_target->thread_stopped == NULL) - { - struct vstop_notif *new_notif = new struct vstop_notif; - - new_notif->ptid = thread->id; - new_notif->status = thread->last_status; - /* Pass the last stop reply back to GDB, but don't notify - yet. */ - notif_event_enque (¬if_stop, new_notif); - } - else - { - if (thread_stopped (thread)) - { - if (debug_threads) - { - std::string status_string - = target_waitstatus_to_string (&thread->last_status); - - debug_printf ("Reporting thread %s as already stopped with %s\n", - target_pid_to_str (thread->id), - status_string.c_str ()); - } - - gdb_assert (thread->last_status.kind != TARGET_WAITKIND_IGNORE); - - /* Pass the last stop reply back to GDB, but don't notify - yet. */ - queue_stop_reply (thread->id, &thread->last_status); - } - } -} - -/* Set this inferior threads's state as "want-stopped". We won't - resume this thread until the client gives us another action for - it. */ - -static void -gdb_wants_thread_stopped (thread_info *thread) -{ - thread->last_resume_kind = resume_stop; - - if (thread->last_status.kind == TARGET_WAITKIND_IGNORE) - { - /* Most threads are stopped implicitly (all-stop); tag that with - signal 0. */ - thread->last_status.kind = TARGET_WAITKIND_STOPPED; - thread->last_status.value.sig = GDB_SIGNAL_0; - } -} - -/* Set all threads' states as "want-stopped". */ - -static void -gdb_wants_all_threads_stopped (void) -{ - for_each_thread (gdb_wants_thread_stopped); -} - -/* Callback for for_each_thread. If the thread is stopped with an - interesting event, mark it as having a pending event. */ - -static void -set_pending_status_callback (thread_info *thread) -{ - if (thread->last_status.kind != TARGET_WAITKIND_STOPPED - || (thread->last_status.value.sig != GDB_SIGNAL_0 - /* A breakpoint, watchpoint or finished step from a previous - GDB run isn't considered interesting for a new GDB run. - If we left those pending, the new GDB could consider them - random SIGTRAPs. This leaves out real async traps. We'd - have to peek into the (target-specific) siginfo to - distinguish those. */ - && thread->last_status.value.sig != GDB_SIGNAL_TRAP)) - thread->status_pending_p = 1; -} - -/* Status handler for the '?' packet. */ - -static void -handle_status (char *own_buf) -{ - client_state &cs = get_client_state (); - - /* GDB is connected, don't forward events to the target anymore. */ - for_each_process ([] (process_info *process) { - process->gdb_detached = 0; - }); - - /* In non-stop mode, we must send a stop reply for each stopped - thread. In all-stop mode, just send one for the first stopped - thread we find. */ - - if (non_stop) - { - for_each_thread (queue_stop_reply_callback); - - /* The first is sent immediatly. OK is sent if there is no - stopped thread, which is the same handling of the vStopped - packet (by design). */ - notif_write_event (¬if_stop, cs.own_buf); - } - else - { - thread_info *thread = NULL; - - pause_all (0); - stabilize_threads (); - gdb_wants_all_threads_stopped (); - - /* We can only report one status, but we might be coming out of - non-stop -- if more than one thread is stopped with - interesting events, leave events for the threads we're not - reporting now pending. They'll be reported the next time the - threads are resumed. Start by marking all interesting events - as pending. */ - for_each_thread (set_pending_status_callback); - - /* Prefer the last thread that reported an event to GDB (even if - that was a GDB_SIGNAL_TRAP). */ - if (cs.last_status.kind != TARGET_WAITKIND_IGNORE - && cs.last_status.kind != TARGET_WAITKIND_EXITED - && cs.last_status.kind != TARGET_WAITKIND_SIGNALLED) - thread = find_thread_ptid (cs.last_ptid); - - /* If the last event thread is not found for some reason, look - for some other thread that might have an event to report. */ - if (thread == NULL) - thread = find_thread ([] (thread_info *thr_arg) - { - return thr_arg->status_pending_p; - }); - - /* If we're still out of luck, simply pick the first thread in - the thread list. */ - if (thread == NULL) - thread = get_first_thread (); - - if (thread != NULL) - { - struct thread_info *tp = (struct thread_info *) thread; - - /* We're reporting this event, so it's no longer - pending. */ - tp->status_pending_p = 0; - - /* GDB assumes the current thread is the thread we're - reporting the status for. */ - cs.general_thread = thread->id; - set_desired_thread (); - - gdb_assert (tp->last_status.kind != TARGET_WAITKIND_IGNORE); - prepare_resume_reply (own_buf, tp->id, &tp->last_status); - } - else - strcpy (own_buf, "W00"); - } -} - -static void -gdbserver_version (void) -{ - printf ("GNU gdbserver %s%s\n" - "Copyright (C) 2020 Free Software Foundation, Inc.\n" - "gdbserver is free software, covered by the " - "GNU General Public License.\n" - "This gdbserver was configured as \"%s\"\n", - PKGVERSION, version, host_name); -} - -static void -gdbserver_usage (FILE *stream) -{ - fprintf (stream, "Usage:\tgdbserver [OPTIONS] COMM PROG [ARGS ...]\n" - "\tgdbserver [OPTIONS] --attach COMM PID\n" - "\tgdbserver [OPTIONS] --multi COMM\n" - "\n" - "COMM may either be a tty device (for serial debugging),\n" - "HOST:PORT to listen for a TCP connection, or '-' or 'stdio' to use \n" - "stdin/stdout of gdbserver.\n" - "PROG is the executable program. ARGS are arguments passed to inferior.\n" - "PID is the process ID to attach to, when --attach is specified.\n" - "\n" - "Operating modes:\n" - "\n" - " --attach Attach to running process PID.\n" - " --multi Start server without a specific program, and\n" - " only quit when explicitly commanded.\n" - " --once Exit after the first connection has closed.\n" - " --help Print this message and then exit.\n" - " --version Display version information and exit.\n" - "\n" - "Other options:\n" - "\n" - " --wrapper WRAPPER -- Run WRAPPER to start new programs.\n" - " --disable-randomization\n" - " Run PROG with address space randomization disabled.\n" - " --no-disable-randomization\n" - " Don't disable address space randomization when\n" - " starting PROG.\n" - " --startup-with-shell\n" - " Start PROG using a shell. I.e., execs a shell that\n" - " then execs PROG. (default)\n" - " --no-startup-with-shell\n" - " Exec PROG directly instead of using a shell.\n" - " Disables argument globbing and variable substitution\n" - " on UNIX-like systems.\n" - "\n" - "Debug options:\n" - "\n" - " --debug Enable general debugging output.\n" - " --debug-format=OPT1[,OPT2,...]\n" - " Specify extra content in debugging output.\n" - " Options:\n" - " all\n" - " none\n" - " timestamp\n" - " --remote-debug Enable remote protocol debugging output.\n" - " --disable-packet=OPT1[,OPT2,...]\n" - " Disable support for RSP packets or features.\n" - " Options:\n" - " vCont, Tthread, qC, qfThreadInfo and \n" - " threads (disable all threading packets).\n" - "\n" - "For more information, consult the GDB manual (available as on-line \n" - "info or a printed manual).\n"); - if (REPORT_BUGS_TO[0] && stream == stdout) - fprintf (stream, "Report bugs to \"%s\".\n", REPORT_BUGS_TO); -} - -static void -gdbserver_show_disableable (FILE *stream) -{ - fprintf (stream, "Disableable packets:\n" - " vCont \tAll vCont packets\n" - " qC \tQuerying the current thread\n" - " qfThreadInfo\tThread listing\n" - " Tthread \tPassing the thread specifier in the " - "T stop reply packet\n" - " threads \tAll of the above\n"); -} - -static void -kill_inferior_callback (process_info *process) -{ - kill_inferior (process); - discard_queued_stop_replies (ptid_t (process->pid)); -} - -/* Call this when exiting gdbserver with possible inferiors that need - to be killed or detached from. */ - -static void -detach_or_kill_for_exit (void) -{ - /* First print a list of the inferiors we will be killing/detaching. - This is to assist the user, for example, in case the inferior unexpectedly - dies after we exit: did we screw up or did the inferior exit on its own? - Having this info will save some head-scratching. */ - - if (have_started_inferiors_p ()) - { - fprintf (stderr, "Killing process(es):"); - - for_each_process ([] (process_info *process) { - if (!process->attached) - fprintf (stderr, " %d", process->pid); - }); - - fprintf (stderr, "\n"); - } - if (have_attached_inferiors_p ()) - { - fprintf (stderr, "Detaching process(es):"); - - for_each_process ([] (process_info *process) { - if (process->attached) - fprintf (stderr, " %d", process->pid); - }); - - fprintf (stderr, "\n"); - } - - /* Now we can kill or detach the inferiors. */ - for_each_process ([] (process_info *process) { - int pid = process->pid; - - if (process->attached) - detach_inferior (process); - else - kill_inferior (process); - - discard_queued_stop_replies (ptid_t (pid)); - }); -} - -/* Value that will be passed to exit(3) when gdbserver exits. */ -static int exit_code; - -/* Wrapper for detach_or_kill_for_exit that catches and prints - errors. */ - -static void -detach_or_kill_for_exit_cleanup () -{ - try - { - detach_or_kill_for_exit (); - } - catch (const gdb_exception &exception) - { - fflush (stdout); - fprintf (stderr, "Detach or kill failed: %s\n", - exception.what ()); - exit_code = 1; - } -} - -/* Main function. This is called by the real "main" function, - wrapped in a TRY_CATCH that handles any uncaught exceptions. */ - -static void ATTRIBUTE_NORETURN -captured_main (int argc, char *argv[]) -{ - int bad_attach; - int pid; - char *arg_end; - const char *port = NULL; - char **next_arg = &argv[1]; - volatile int multi_mode = 0; - volatile int attach = 0; - int was_running; - bool selftest = false; -#if GDB_SELF_TEST - const char *selftest_filter = NULL; -#endif - - current_directory = getcwd (NULL, 0); - client_state &cs = get_client_state (); - - if (current_directory == NULL) - { - error (_("Could not find current working directory: %s"), - safe_strerror (errno)); - } - - while (*next_arg != NULL && **next_arg == '-') - { - if (strcmp (*next_arg, "--version") == 0) - { - gdbserver_version (); - exit (0); - } - else if (strcmp (*next_arg, "--help") == 0) - { - gdbserver_usage (stdout); - exit (0); - } - else if (strcmp (*next_arg, "--attach") == 0) - attach = 1; - else if (strcmp (*next_arg, "--multi") == 0) - multi_mode = 1; - else if (strcmp (*next_arg, "--wrapper") == 0) - { - char **tmp; - - next_arg++; - - tmp = next_arg; - while (*next_arg != NULL && strcmp (*next_arg, "--") != 0) - { - wrapper_argv += *next_arg; - wrapper_argv += ' '; - next_arg++; - } - - if (!wrapper_argv.empty ()) - { - /* Erase the last whitespace. */ - wrapper_argv.erase (wrapper_argv.end () - 1); - } - - if (next_arg == tmp || *next_arg == NULL) - { - gdbserver_usage (stderr); - exit (1); - } - - /* Consume the "--". */ - *next_arg = NULL; - } - else if (strcmp (*next_arg, "--debug") == 0) - debug_threads = 1; - else if (startswith (*next_arg, "--debug-format=")) - { - std::string error_msg - = parse_debug_format_options ((*next_arg) - + sizeof ("--debug-format=") - 1, 0); - - if (!error_msg.empty ()) - { - fprintf (stderr, "%s", error_msg.c_str ()); - exit (1); - } - } - else if (strcmp (*next_arg, "--remote-debug") == 0) - remote_debug = 1; - else if (startswith (*next_arg, "--debug-file=")) - debug_set_output ((*next_arg) + sizeof ("--debug-file=") -1); - else if (strcmp (*next_arg, "--disable-packet") == 0) - { - gdbserver_show_disableable (stdout); - exit (0); - } - else if (startswith (*next_arg, "--disable-packet=")) - { - char *packets = *next_arg += sizeof ("--disable-packet=") - 1; - char *saveptr; - for (char *tok = strtok_r (packets, ",", &saveptr); - tok != NULL; - tok = strtok_r (NULL, ",", &saveptr)) - { - if (strcmp ("vCont", tok) == 0) - disable_packet_vCont = true; - else if (strcmp ("Tthread", tok) == 0) - disable_packet_Tthread = true; - else if (strcmp ("qC", tok) == 0) - disable_packet_qC = true; - else if (strcmp ("qfThreadInfo", tok) == 0) - disable_packet_qfThreadInfo = true; - else if (strcmp ("threads", tok) == 0) - { - disable_packet_vCont = true; - disable_packet_Tthread = true; - disable_packet_qC = true; - disable_packet_qfThreadInfo = true; - } - else - { - fprintf (stderr, "Don't know how to disable \"%s\".\n\n", - tok); - gdbserver_show_disableable (stderr); - exit (1); - } - } - } - else if (strcmp (*next_arg, "-") == 0) - { - /* "-" specifies a stdio connection and is a form of port - specification. */ - port = STDIO_CONNECTION_NAME; - next_arg++; - break; - } - else if (strcmp (*next_arg, "--disable-randomization") == 0) - cs.disable_randomization = 1; - else if (strcmp (*next_arg, "--no-disable-randomization") == 0) - cs.disable_randomization = 0; - else if (strcmp (*next_arg, "--startup-with-shell") == 0) - startup_with_shell = true; - else if (strcmp (*next_arg, "--no-startup-with-shell") == 0) - startup_with_shell = false; - else if (strcmp (*next_arg, "--once") == 0) - run_once = true; - else if (strcmp (*next_arg, "--selftest") == 0) - selftest = true; - else if (startswith (*next_arg, "--selftest=")) - { - selftest = true; -#if GDB_SELF_TEST - selftest_filter = *next_arg + strlen ("--selftest="); -#endif - } - else - { - fprintf (stderr, "Unknown argument: %s\n", *next_arg); - exit (1); - } - - next_arg++; - continue; - } - - if (port == NULL) - { - port = *next_arg; - next_arg++; - } - if ((port == NULL || (!attach && !multi_mode && *next_arg == NULL)) - && !selftest) - { - gdbserver_usage (stderr); - exit (1); - } - - /* Remember stdio descriptors. LISTEN_DESC must not be listed, it will be - opened by remote_prepare. */ - notice_open_fds (); - - save_original_signals_state (false); - - /* We need to know whether the remote connection is stdio before - starting the inferior. Inferiors created in this scenario have - stdin,stdout redirected. So do this here before we call - start_inferior. */ - if (port != NULL) - remote_prepare (port); - - bad_attach = 0; - pid = 0; - - /* --attach used to come after PORT, so allow it there for - compatibility. */ - if (*next_arg != NULL && strcmp (*next_arg, "--attach") == 0) - { - attach = 1; - next_arg++; - } - - if (attach - && (*next_arg == NULL - || (*next_arg)[0] == '\0' - || (pid = strtoul (*next_arg, &arg_end, 0)) == 0 - || *arg_end != '\0' - || next_arg[1] != NULL)) - bad_attach = 1; - - if (bad_attach) - { - gdbserver_usage (stderr); - exit (1); - } - - /* Gather information about the environment. */ - our_environ = gdb_environ::from_host_environ (); - - initialize_async_io (); - initialize_low (); - have_job_control (); - initialize_event_loop (); - if (target_supports_tracepoints ()) - initialize_tracepoint (); - - mem_buf = (unsigned char *) xmalloc (PBUFSIZ); - - if (selftest) - { -#if GDB_SELF_TEST - selftests::run_tests (selftest_filter); -#else - printf (_("Selftests have been disabled for this build.\n")); -#endif - throw_quit ("Quit"); - } - - if (pid == 0 && *next_arg != NULL) - { - int i, n; - - n = argc - (next_arg - argv); - program_path.set (make_unique_xstrdup (next_arg[0])); - for (i = 1; i < n; i++) - program_args.push_back (xstrdup (next_arg[i])); - program_args.push_back (NULL); - - /* Wait till we are at first instruction in program. */ - 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 - successfully created. */ - } - else if (pid != 0) - { - if (attach_inferior (pid) == -1) - error ("Attaching not supported on this target"); - - /* Otherwise succeeded. */ - } - else - { - cs.last_status.kind = TARGET_WAITKIND_EXITED; - cs.last_status.value.integer = 0; - cs.last_ptid = minus_one_ptid; - } - - SCOPE_EXIT { detach_or_kill_for_exit_cleanup (); }; - - /* Don't report shared library events on the initial connection, - even if some libraries are preloaded. Avoids the "stopped by - shared library event" notice on gdb side. */ - dlls_changed = 0; - - if (cs.last_status.kind == TARGET_WAITKIND_EXITED - || cs.last_status.kind == TARGET_WAITKIND_SIGNALLED) - was_running = 0; - else - was_running = 1; - - if (!was_running && !multi_mode) - error ("No program to debug"); - - while (1) - { - cs.noack_mode = 0; - cs.multi_process = 0; - cs.report_fork_events = 0; - cs.report_vfork_events = 0; - cs.report_exec_events = 0; - /* Be sure we're out of tfind mode. */ - cs.current_traceframe = -1; - cs.cont_thread = null_ptid; - cs.swbreak_feature = 0; - cs.hwbreak_feature = 0; - cs.vCont_supported = 0; - - remote_open (port); - - try - { - /* Wait for events. This will return when all event sources - are removed from the event loop. */ - start_event_loop (); - - /* If an exit was requested (using the "monitor exit" - command), terminate now. */ - if (exit_requested) - throw_quit ("Quit"); - - /* The only other way to get here is for getpkt to fail: - - - If --once was specified, we're done. - - - If not in extended-remote mode, and we're no longer - debugging anything, simply exit: GDB has disconnected - after processing the last process exit. - - - Otherwise, close the connection and reopen it at the - top of the loop. */ - if (run_once || (!extended_protocol && !target_running ())) - throw_quit ("Quit"); - - fprintf (stderr, - "Remote side has terminated connection. " - "GDBserver will reopen the connection.\n"); - - /* Get rid of any pending statuses. An eventual reconnection - (by the same GDB instance or another) will refresh all its - state from scratch. */ - discard_queued_stop_replies (minus_one_ptid); - for_each_thread ([] (thread_info *thread) - { - thread->status_pending_p = 0; - }); - - if (tracing) - { - if (disconnected_tracing) - { - /* Try to enable non-stop/async mode, so we we can - both wait for an async socket accept, and handle - async target events simultaneously. There's also - no point either in having the target always stop - all threads, when we're going to pass signals - down without informing GDB. */ - if (!non_stop) - { - if (start_non_stop (1)) - non_stop = 1; - - /* Detaching implicitly resumes all threads; - simply disconnecting does not. */ - } - } - else - { - fprintf (stderr, - "Disconnected tracing disabled; " - "stopping trace run.\n"); - stop_tracing (); - } - } - } - catch (const gdb_exception_error &exception) - { - fflush (stdout); - fprintf (stderr, "gdbserver: %s\n", exception.what ()); - - if (response_needed) - { - write_enn (cs.own_buf); - putpkt (cs.own_buf); - } - - if (run_once) - throw_quit ("Quit"); - } - } -} - -/* Main function. */ - -int -main (int argc, char *argv[]) -{ - - try - { - captured_main (argc, argv); - } - catch (const gdb_exception &exception) - { - if (exception.reason == RETURN_ERROR) - { - fflush (stdout); - fprintf (stderr, "%s\n", exception.what ()); - fprintf (stderr, "Exiting\n"); - exit_code = 1; - } - - exit (exit_code); - } - - gdb_assert_not_reached ("captured_main should never return"); -} - -/* Process options coming from Z packets for a breakpoint. PACKET is - the packet buffer. *PACKET is updated to point to the first char - after the last processed option. */ - -static void -process_point_options (struct gdb_breakpoint *bp, const char **packet) -{ - const char *dataptr = *packet; - int persist; - - /* Check if data has the correct format. */ - if (*dataptr != ';') - return; - - dataptr++; - - while (*dataptr) - { - if (*dataptr == ';') - ++dataptr; - - if (*dataptr == 'X') - { - /* Conditional expression. */ - if (debug_threads) - debug_printf ("Found breakpoint condition.\n"); - if (!add_breakpoint_condition (bp, &dataptr)) - dataptr = strchrnul (dataptr, ';'); - } - else if (startswith (dataptr, "cmds:")) - { - dataptr += strlen ("cmds:"); - if (debug_threads) - debug_printf ("Found breakpoint commands %s.\n", dataptr); - persist = (*dataptr == '1'); - dataptr += 2; - if (add_breakpoint_commands (bp, &dataptr, persist)) - dataptr = strchrnul (dataptr, ';'); - } - else - { - fprintf (stderr, "Unknown token %c, ignoring.\n", - *dataptr); - /* Skip tokens until we find one that we recognize. */ - dataptr = strchrnul (dataptr, ';'); - } - } - *packet = dataptr; -} - -/* Event loop callback that handles a serial event. The first byte in - the serial buffer gets us here. We expect characters to arrive at - a brisk pace, so we read the rest of the packet with a blocking - getpkt call. */ - -static int -process_serial_event (void) -{ - client_state &cs = get_client_state (); - int signal; - unsigned int len; - CORE_ADDR mem_addr; - unsigned char sig; - int packet_len; - int new_packet_len = -1; - - disable_async_io (); - - response_needed = false; - packet_len = getpkt (cs.own_buf); - if (packet_len <= 0) - { - remote_close (); - /* Force an event loop break. */ - return -1; - } - response_needed = true; - - char ch = cs.own_buf[0]; - switch (ch) - { - case 'q': - handle_query (cs.own_buf, packet_len, &new_packet_len); - break; - case 'Q': - handle_general_set (cs.own_buf); - break; - case 'D': - handle_detach (cs.own_buf); - break; - case '!': - extended_protocol = true; - write_ok (cs.own_buf); - break; - case '?': - handle_status (cs.own_buf); - break; - case 'H': - if (cs.own_buf[1] == 'c' || cs.own_buf[1] == 'g' || cs.own_buf[1] == 's') - { - require_running_or_break (cs.own_buf); - - ptid_t thread_id = read_ptid (&cs.own_buf[2], NULL); - - if (thread_id == null_ptid || thread_id == minus_one_ptid) - thread_id = null_ptid; - else if (thread_id.is_pid ()) - { - /* The ptid represents a pid. */ - thread_info *thread = find_any_thread_of_pid (thread_id.pid ()); - - if (thread == NULL) - { - write_enn (cs.own_buf); - break; - } - - thread_id = thread->id; - } - else - { - /* The ptid represents a lwp/tid. */ - if (find_thread_ptid (thread_id) == NULL) - { - write_enn (cs.own_buf); - break; - } - } - - if (cs.own_buf[1] == 'g') - { - if (thread_id == null_ptid) - { - /* GDB is telling us to choose any thread. Check if - the currently selected thread is still valid. If - it is not, select the first available. */ - thread_info *thread = find_thread_ptid (cs.general_thread); - if (thread == NULL) - thread = get_first_thread (); - thread_id = thread->id; - } - - cs.general_thread = thread_id; - set_desired_thread (); - gdb_assert (current_thread != NULL); - } - else if (cs.own_buf[1] == 'c') - cs.cont_thread = thread_id; - - write_ok (cs.own_buf); - } - else - { - /* Silently ignore it so that gdb can extend the protocol - without compatibility headaches. */ - cs.own_buf[0] = '\0'; - } - break; - case 'g': - require_running_or_break (cs.own_buf); - if (cs.current_traceframe >= 0) - { - struct regcache *regcache - = new_register_cache (current_target_desc ()); - - if (fetch_traceframe_registers (cs.current_traceframe, - regcache, -1) == 0) - registers_to_string (regcache, cs.own_buf); - else - write_enn (cs.own_buf); - free_register_cache (regcache); - } - else - { - struct regcache *regcache; - - if (!set_desired_thread ()) - write_enn (cs.own_buf); - else - { - regcache = get_thread_regcache (current_thread, 1); - registers_to_string (regcache, cs.own_buf); - } - } - break; - case 'G': - require_running_or_break (cs.own_buf); - if (cs.current_traceframe >= 0) - write_enn (cs.own_buf); - else - { - struct regcache *regcache; - - if (!set_desired_thread ()) - write_enn (cs.own_buf); - else - { - regcache = get_thread_regcache (current_thread, 1); - registers_from_string (regcache, &cs.own_buf[1]); - write_ok (cs.own_buf); - } - } - break; - case 'm': - { - require_running_or_break (cs.own_buf); - decode_m_packet (&cs.own_buf[1], &mem_addr, &len); - int res = gdb_read_memory (mem_addr, mem_buf, len); - if (res < 0) - write_enn (cs.own_buf); - else - bin2hex (mem_buf, cs.own_buf, res); - } - break; - case 'M': - require_running_or_break (cs.own_buf); - decode_M_packet (&cs.own_buf[1], &mem_addr, &len, &mem_buf); - if (gdb_write_memory (mem_addr, mem_buf, len) == 0) - write_ok (cs.own_buf); - else - write_enn (cs.own_buf); - break; - case 'X': - require_running_or_break (cs.own_buf); - if (decode_X_packet (&cs.own_buf[1], packet_len - 1, - &mem_addr, &len, &mem_buf) < 0 - || gdb_write_memory (mem_addr, mem_buf, len) != 0) - write_enn (cs.own_buf); - else - write_ok (cs.own_buf); - break; - case 'C': - require_running_or_break (cs.own_buf); - hex2bin (cs.own_buf + 1, &sig, 1); - if (gdb_signal_to_host_p ((enum gdb_signal) sig)) - signal = gdb_signal_to_host ((enum gdb_signal) sig); - else - signal = 0; - myresume (cs.own_buf, 0, signal); - break; - case 'S': - require_running_or_break (cs.own_buf); - hex2bin (cs.own_buf + 1, &sig, 1); - if (gdb_signal_to_host_p ((enum gdb_signal) sig)) - signal = gdb_signal_to_host ((enum gdb_signal) sig); - else - signal = 0; - myresume (cs.own_buf, 1, signal); - break; - case 'c': - require_running_or_break (cs.own_buf); - signal = 0; - myresume (cs.own_buf, 0, signal); - break; - case 's': - require_running_or_break (cs.own_buf); - signal = 0; - myresume (cs.own_buf, 1, signal); - break; - case 'Z': /* insert_ ... */ - /* Fallthrough. */ - case 'z': /* remove_ ... */ - { - char *dataptr; - ULONGEST addr; - int kind; - char type = cs.own_buf[1]; - int res; - const int insert = ch == 'Z'; - const char *p = &cs.own_buf[3]; - - p = unpack_varlen_hex (p, &addr); - kind = strtol (p + 1, &dataptr, 16); - - if (insert) - { - struct gdb_breakpoint *bp; - - bp = set_gdb_breakpoint (type, addr, kind, &res); - if (bp != NULL) - { - res = 0; - - /* GDB may have sent us a list of *point parameters to - be evaluated on the target's side. Read such list - here. If we already have a list of parameters, GDB - is telling us to drop that list and use this one - instead. */ - clear_breakpoint_conditions_and_commands (bp); - const char *options = dataptr; - process_point_options (bp, &options); - } - } - else - res = delete_gdb_breakpoint (type, addr, kind); - - if (res == 0) - write_ok (cs.own_buf); - else if (res == 1) - /* Unsupported. */ - cs.own_buf[0] = '\0'; - else - write_enn (cs.own_buf); - break; - } - case 'k': - response_needed = false; - if (!target_running ()) - /* The packet we received doesn't make sense - but we can't - reply to it, either. */ - return 0; - - fprintf (stderr, "Killing all inferiors\n"); - - for_each_process (kill_inferior_callback); - - /* When using the extended protocol, we wait with no program - running. The traditional protocol will exit instead. */ - if (extended_protocol) - { - cs.last_status.kind = TARGET_WAITKIND_EXITED; - cs.last_status.value.sig = GDB_SIGNAL_KILL; - return 0; - } - else - exit (0); - - case 'T': - { - require_running_or_break (cs.own_buf); - - ptid_t thread_id = read_ptid (&cs.own_buf[1], NULL); - if (find_thread_ptid (thread_id) == NULL) - { - write_enn (cs.own_buf); - break; - } - - if (mythread_alive (thread_id)) - write_ok (cs.own_buf); - else - write_enn (cs.own_buf); - } - break; - case 'R': - response_needed = false; - - /* Restarting the inferior is only supported in the extended - protocol. */ - if (extended_protocol) - { - if (target_running ()) - for_each_process (kill_inferior_callback); - - fprintf (stderr, "GDBserver restarting\n"); - - /* Wait till we are at 1st instruction in prog. */ - if (program_path.get () != NULL) - { - create_inferior (program_path.get (), program_args); - - if (cs.last_status.kind == TARGET_WAITKIND_STOPPED) - { - /* Stopped at the first instruction of the target - process. */ - cs.general_thread = cs.last_ptid; - } - else - { - /* Something went wrong. */ - cs.general_thread = null_ptid; - } - } - else - { - cs.last_status.kind = TARGET_WAITKIND_EXITED; - cs.last_status.value.sig = GDB_SIGNAL_KILL; - } - return 0; - } - else - { - /* It is a request we don't understand. Respond with an - empty packet so that gdb knows that we don't support this - request. */ - cs.own_buf[0] = '\0'; - break; - } - case 'v': - /* Extended (long) request. */ - handle_v_requests (cs.own_buf, packet_len, &new_packet_len); - break; - - default: - /* It is a request we don't understand. Respond with an empty - packet so that gdb knows that we don't support this - request. */ - cs.own_buf[0] = '\0'; - break; - } - - if (new_packet_len != -1) - putpkt_binary (cs.own_buf, new_packet_len); - else - putpkt (cs.own_buf); - - response_needed = false; - - if (exit_requested) - return -1; - - return 0; -} - -/* Event-loop callback for serial events. */ - -int -handle_serial_event (int err, gdb_client_data client_data) -{ - if (debug_threads) - debug_printf ("handling possible serial event\n"); - - /* Really handle it. */ - if (process_serial_event () < 0) - return -1; - - /* Be sure to not change the selected thread behind GDB's back. - Important in the non-stop mode asynchronous protocol. */ - set_desired_thread (); - - return 0; -} - -/* Push a stop notification on the notification queue. */ - -static void -push_stop_notification (ptid_t ptid, struct target_waitstatus *status) -{ - struct vstop_notif *vstop_notif = new struct vstop_notif; - - vstop_notif->status = *status; - vstop_notif->ptid = ptid; - /* Push Stop notification. */ - notif_push (¬if_stop, vstop_notif); -} - -/* Event-loop callback for target events. */ - -int -handle_target_event (int err, gdb_client_data client_data) -{ - client_state &cs = get_client_state (); - if (debug_threads) - debug_printf ("handling possible target event\n"); - - cs.last_ptid = mywait (minus_one_ptid, &cs.last_status, - TARGET_WNOHANG, 1); - - if (cs.last_status.kind == TARGET_WAITKIND_NO_RESUMED) - { - if (gdb_connected () && report_no_resumed) - push_stop_notification (null_ptid, &cs.last_status); - } - else if (cs.last_status.kind != TARGET_WAITKIND_IGNORE) - { - int pid = cs.last_ptid.pid (); - struct process_info *process = find_process_pid (pid); - int forward_event = !gdb_connected () || process->gdb_detached; - - if (cs.last_status.kind == TARGET_WAITKIND_EXITED - || cs.last_status.kind == TARGET_WAITKIND_SIGNALLED) - { - mark_breakpoints_out (process); - target_mourn_inferior (cs.last_ptid); - } - else if (cs.last_status.kind == TARGET_WAITKIND_THREAD_EXITED) - ; - else - { - /* We're reporting this thread as stopped. Update its - "want-stopped" state to what the client wants, until it - gets a new resume action. */ - current_thread->last_resume_kind = resume_stop; - current_thread->last_status = cs.last_status; - } - - if (forward_event) - { - if (!target_running ()) - { - /* The last process exited. We're done. */ - exit (0); - } - - if (cs.last_status.kind == TARGET_WAITKIND_EXITED - || cs.last_status.kind == TARGET_WAITKIND_SIGNALLED - || cs.last_status.kind == TARGET_WAITKIND_THREAD_EXITED) - ; - else - { - /* A thread stopped with a signal, but gdb isn't - connected to handle it. Pass it down to the - inferior, as if it wasn't being traced. */ - enum gdb_signal signal; - - if (debug_threads) - debug_printf ("GDB not connected; forwarding event %d for" - " [%s]\n", - (int) cs.last_status.kind, - target_pid_to_str (cs.last_ptid)); - - if (cs.last_status.kind == TARGET_WAITKIND_STOPPED) - signal = cs.last_status.value.sig; - else - signal = GDB_SIGNAL_0; - target_continue (cs.last_ptid, signal); - } - } - else - push_stop_notification (cs.last_ptid, &cs.last_status); - } - - /* Be sure to not change the selected thread behind GDB's back. - Important in the non-stop mode asynchronous protocol. */ - set_desired_thread (); - - return 0; -} - -#if GDB_SELF_TEST -namespace selftests -{ - -void -reset () -{} - -} // namespace selftests -#endif /* GDB_SELF_TEST */ diff -Nru gdb-9.1/gdb/gdbserver/server.h gdb-10.2/gdb/gdbserver/server.h --- gdb-9.1/gdb/gdbserver/server.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/server.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,202 +0,0 @@ -/* Common definitions for remote server for GDB. - Copyright (C) 1993-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef GDBSERVER_SERVER_H -#define GDBSERVER_SERVER_H - -#include "gdbsupport/common-defs.h" - -gdb_static_assert (sizeof (CORE_ADDR) >= sizeof (void *)); - -#ifdef __MINGW32CE__ -#include "wincecompat.h" -#endif - -#include "gdbsupport/version.h" - -#if !HAVE_DECL_PERROR -#ifndef perror -extern void perror (const char *); -#endif -#endif - -#if !HAVE_DECL_VASPRINTF -extern int vasprintf(char **strp, const char *fmt, va_list ap); -#endif -#if !HAVE_DECL_VSNPRINTF -int vsnprintf(char *str, size_t size, const char *format, va_list ap); -#endif - -#ifdef IN_PROCESS_AGENT -# define PROG "ipa" -#else -# define PROG "gdbserver" -#endif - -#include "gdbsupport/buffer.h" -#include "gdbsupport/xml-utils.h" -#include "regcache.h" -#include "gdbsupport/gdb_signals.h" -#include "target.h" -#include "mem-break.h" -#include "gdbsupport/environ.h" - -/* Target-specific functions */ - -void initialize_low (); - -/* Public variables in server.c */ - -extern bool server_waiting; - -extern bool disable_packet_vCont; -extern bool disable_packet_Tthread; -extern bool disable_packet_qC; -extern bool disable_packet_qfThreadInfo; - -extern bool run_once; -extern bool non_stop; - -#if USE_WIN32API -#include <winsock2.h> -typedef SOCKET gdb_fildes_t; -#else -typedef int gdb_fildes_t; -#endif - -#include "event-loop.h" - -/* Functions from server.c. */ -extern void handle_v_requests (char *own_buf, int packet_len, - int *new_packet_len); -extern int handle_serial_event (int err, gdb_client_data client_data); -extern int handle_target_event (int err, gdb_client_data client_data); - -/* Get rid of the currently pending stop replies that match PTID. */ -extern void discard_queued_stop_replies (ptid_t ptid); - -/* Returns true if there's a pending stop reply that matches PTID in - the vStopped notifications queue. */ -extern int in_queued_stop_replies (ptid_t ptid); - -#include "remote-utils.h" - -#include "utils.h" -#include "debug.h" -#include "gdbsupport/gdb_vecs.h" - -/* Maximum number of bytes to read/write at once. The value here - is chosen to fill up a packet (the headers account for the 32). */ -#define MAXBUFBYTES(N) (((N)-32)/2) - -/* Buffer sizes for transferring memory, registers, etc. Set to a constant - value to accomodate multiple register formats. This value must be at least - as large as the largest register set supported by gdbserver. */ -#define PBUFSIZ 18432 - -/* Definition for an unknown syscall, used basically in error-cases. */ -#define UNKNOWN_SYSCALL (-1) - -/* Definition for any syscall, used for unfiltered syscall reporting. */ -#define ANY_SYSCALL (-2) - -/* After fork_inferior has been called, we need to adjust a few - signals and call startup_inferior to start the inferior and consume - its first events. This is done here. PID is the pid of the new - inferior and PROGRAM is its name. */ -extern void post_fork_inferior (int pid, const char *program); - -/* Get the gdb_environ being used in the current session. */ -extern gdb_environ *get_environ (); - -extern unsigned long signal_pid; - - -/* Description of the client remote protocol state for the currently - connected client. */ - -struct client_state -{ - client_state (): - own_buf ((char *) xmalloc (PBUFSIZ + 1)) - {} - - /* The thread set with an `Hc' packet. `Hc' is deprecated in favor of - `vCont'. Note the multi-process extensions made `vCont' a - requirement, so `Hc pPID.TID' is pretty much undefined. So - CONT_THREAD can be null_ptid for no `Hc' thread, minus_one_ptid for - resuming all threads of the process (again, `Hc' isn't used for - multi-process), or a specific thread ptid_t. */ - ptid_t cont_thread; - - /* The thread set with an `Hg' packet. */ - ptid_t general_thread; - - int multi_process = 0; - int report_fork_events = 0; - int report_vfork_events = 0; - int report_exec_events = 0; - int report_thread_events = 0; - - /* True if the "swbreak+" feature is active. In that case, GDB wants - us to report whether a trap is explained by a software breakpoint - and for the server to handle PC adjustment if necessary on this - target. Only enabled if the target supports it. */ - int swbreak_feature = 0; - /* True if the "hwbreak+" feature is active. In that case, GDB wants - us to report whether a trap is explained by a hardware breakpoint. - Only enabled if the target supports it. */ - int hwbreak_feature = 0; - - /* True if the "vContSupported" feature is active. In that case, GDB - wants us to report whether single step is supported in the reply to - "vCont?" packet. */ - int vCont_supported = 0; - - /* Whether we should attempt to disable the operating system's address - space randomization feature before starting an inferior. */ - int disable_randomization = 1; - - int pass_signals[GDB_SIGNAL_LAST]; - int program_signals[GDB_SIGNAL_LAST]; - int program_signals_p = 0; - - /* Last status reported to GDB. */ - struct target_waitstatus last_status; - ptid_t last_ptid; - - char *own_buf; - - /* If true, then GDB has requested noack mode. */ - int noack_mode = 0; - /* If true, then we tell GDB to use noack mode by default. */ - int transport_is_reliable = 0; - - /* The traceframe to be used as the source of data to send back to - GDB. A value of -1 means to get data from the live program. */ - - int current_traceframe = -1; - -}; - -client_state &get_client_state (); - -#include "gdbthread.h" -#include "inferiors.h" - -#endif /* GDBSERVER_SERVER_H */ diff -Nru gdb-9.1/gdb/gdbserver/symbol.c gdb-10.2/gdb/gdbserver/symbol.c --- gdb-9.1/gdb/gdbserver/symbol.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/symbol.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,32 +0,0 @@ -/* Symbol manipulating routines for the remote server for GDB. - - Copyright (C) 2014-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "server.h" -#include "gdbsupport/symbol.h" - -/* See gdbsupport/symbol.h. */ - -int -find_minimal_symbol_address (const char *name, CORE_ADDR *addr, - struct objfile *objfile) -{ - gdb_assert (objfile == NULL); - - return look_up_one_symbol (name, addr, 1) != 1; -} diff -Nru gdb-9.1/gdb/gdbserver/target.c gdb-10.2/gdb/gdbserver/target.c --- gdb-9.1/gdb/gdbserver/target.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/target.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,395 +0,0 @@ -/* Target operations for the remote server for GDB. - Copyright (C) 2002-2020 Free Software Foundation, Inc. - - Contributed by MontaVista Software. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "server.h" -#include "tracepoint.h" -#include "gdbsupport/byte-vector.h" - -struct target_ops *the_target; - -int -set_desired_thread () -{ - client_state &cs = get_client_state (); - thread_info *found = find_thread_ptid (cs.general_thread); - - current_thread = found; - return (current_thread != NULL); -} - -/* The thread that was current before prepare_to_access_memory was - called. done_accessing_memory uses this to restore the previous - selected thread. */ -static ptid_t prev_general_thread; - -/* See target.h. */ - -int -prepare_to_access_memory (void) -{ - client_state &cs = get_client_state (); - - /* The first thread found. */ - struct thread_info *first = NULL; - /* The first stopped thread found. */ - struct thread_info *stopped = NULL; - /* The current general thread, if found. */ - struct thread_info *current = NULL; - - /* Save the general thread value, since prepare_to_access_memory could change - it. */ - prev_general_thread = cs.general_thread; - - if (the_target->prepare_to_access_memory != NULL) - { - int res; - - res = the_target->prepare_to_access_memory (); - if (res != 0) - return res; - } - - for_each_thread (prev_general_thread.pid (), [&] (thread_info *thread) - { - if (mythread_alive (thread->id)) - { - if (stopped == NULL && the_target->thread_stopped != NULL - && thread_stopped (thread)) - stopped = thread; - - if (first == NULL) - first = thread; - - if (current == NULL && prev_general_thread == thread->id) - current = thread; - } - }); - - /* The thread we end up choosing. */ - struct thread_info *thread; - - /* Prefer a stopped thread. If none is found, try the current - thread. Otherwise, take the first thread in the process. If - none is found, undo the effects of - target->prepare_to_access_memory() and return error. */ - if (stopped != NULL) - thread = stopped; - else if (current != NULL) - thread = current; - else if (first != NULL) - thread = first; - else - { - done_accessing_memory (); - return 1; - } - - current_thread = thread; - cs.general_thread = ptid_of (thread); - - return 0; -} - -/* See target.h. */ - -void -done_accessing_memory (void) -{ - client_state &cs = get_client_state (); - - if (the_target->done_accessing_memory != NULL) - the_target->done_accessing_memory (); - - /* Restore the previous selected thread. */ - cs.general_thread = prev_general_thread; - switch_to_thread (cs.general_thread); -} - -int -read_inferior_memory (CORE_ADDR memaddr, unsigned char *myaddr, int len) -{ - int res; - res = (*the_target->read_memory) (memaddr, myaddr, len); - check_mem_read (memaddr, myaddr, len); - return res; -} - -/* See target/target.h. */ - -int -target_read_memory (CORE_ADDR memaddr, gdb_byte *myaddr, ssize_t len) -{ - return read_inferior_memory (memaddr, myaddr, len); -} - -/* See target/target.h. */ - -int -target_read_uint32 (CORE_ADDR memaddr, uint32_t *result) -{ - return read_inferior_memory (memaddr, (gdb_byte *) result, sizeof (*result)); -} - -/* See target/target.h. */ - -int -target_write_memory (CORE_ADDR memaddr, const unsigned char *myaddr, - ssize_t len) -{ - /* Make a copy of the data because check_mem_write may need to - update it. */ - gdb::byte_vector buffer (myaddr, myaddr + len); - check_mem_write (memaddr, buffer.data (), myaddr, len); - return (*the_target->write_memory) (memaddr, buffer.data (), len); -} - -ptid_t -mywait (ptid_t ptid, struct target_waitstatus *ourstatus, int options, - int connected_wait) -{ - ptid_t ret; - - if (connected_wait) - server_waiting = 1; - - ret = target_wait (ptid, ourstatus, options); - - /* We don't expose _LOADED events to gdbserver core. See the - `dlls_changed' global. */ - if (ourstatus->kind == TARGET_WAITKIND_LOADED) - ourstatus->kind = TARGET_WAITKIND_STOPPED; - - /* If GDB is connected through TCP/serial, then GDBserver will most - probably be running on its own terminal/console, so it's nice to - print there why is GDBserver exiting. If however, GDB is - connected through stdio, then there's no need to spam the GDB - console with this -- the user will already see the exit through - regular GDB output, in that same terminal. */ - if (!remote_connection_is_stdio ()) - { - if (ourstatus->kind == TARGET_WAITKIND_EXITED) - fprintf (stderr, - "\nChild exited with status %d\n", ourstatus->value.integer); - else if (ourstatus->kind == TARGET_WAITKIND_SIGNALLED) - fprintf (stderr, "\nChild terminated with signal = 0x%x (%s)\n", - gdb_signal_to_host (ourstatus->value.sig), - gdb_signal_to_name (ourstatus->value.sig)); - } - - if (connected_wait) - server_waiting = 0; - - return ret; -} - -/* See target/target.h. */ - -void -target_stop_and_wait (ptid_t ptid) -{ - struct target_waitstatus status; - bool was_non_stop = non_stop; - struct thread_resume resume_info; - - resume_info.thread = ptid; - resume_info.kind = resume_stop; - resume_info.sig = GDB_SIGNAL_0; - (*the_target->resume) (&resume_info, 1); - - non_stop = true; - mywait (ptid, &status, 0, 0); - non_stop = was_non_stop; -} - -/* See target/target.h. */ - -ptid_t -target_wait (ptid_t ptid, struct target_waitstatus *status, int options) -{ - return (*the_target->wait) (ptid, status, options); -} - -/* See target/target.h. */ - -void -target_mourn_inferior (ptid_t ptid) -{ - (*the_target->mourn) (find_process_pid (ptid.pid ())); -} - -/* See target/target.h. */ - -void -target_continue_no_signal (ptid_t ptid) -{ - struct thread_resume resume_info; - - resume_info.thread = ptid; - resume_info.kind = resume_continue; - resume_info.sig = GDB_SIGNAL_0; - (*the_target->resume) (&resume_info, 1); -} - -/* See target/target.h. */ - -void -target_continue (ptid_t ptid, enum gdb_signal signal) -{ - struct thread_resume resume_info; - - resume_info.thread = ptid; - resume_info.kind = resume_continue; - resume_info.sig = gdb_signal_to_host (signal); - (*the_target->resume) (&resume_info, 1); -} - -/* See target/target.h. */ - -int -target_supports_multi_process (void) -{ - return (the_target->supports_multi_process != NULL ? - (*the_target->supports_multi_process) () : 0); -} - -int -start_non_stop (int nonstop) -{ - if (the_target->start_non_stop == NULL) - { - if (nonstop) - return -1; - else - return 0; - } - - return (*the_target->start_non_stop) (nonstop); -} - -void -set_target_ops (struct target_ops *target) -{ - the_target = XNEW (struct target_ops); - memcpy (the_target, target, sizeof (*the_target)); -} - -/* Convert pid to printable format. */ - -const char * -target_pid_to_str (ptid_t ptid) -{ - static char buf[80]; - - if (ptid == minus_one_ptid) - xsnprintf (buf, sizeof (buf), "<all threads>"); - else if (ptid == null_ptid) - xsnprintf (buf, sizeof (buf), "<null thread>"); - else if (ptid.tid () != 0) - xsnprintf (buf, sizeof (buf), "Thread %d.0x%lx", - ptid.pid (), ptid.tid ()); - else if (ptid.lwp () != 0) - xsnprintf (buf, sizeof (buf), "LWP %d.%ld", - ptid.pid (), ptid.lwp ()); - else - xsnprintf (buf, sizeof (buf), "Process %d", - ptid.pid ()); - - return buf; -} - -int -kill_inferior (process_info *proc) -{ - gdb_agent_about_to_close (proc->pid); - - return (*the_target->kill) (proc); -} - -/* Target can do hardware single step. */ - -int -target_can_do_hardware_single_step (void) -{ - return 1; -} - -/* Default implementation for breakpoint_kind_for_pc. - - The default behavior for targets that don't implement breakpoint_kind_for_pc - is to use the size of a breakpoint as the kind. */ - -int -default_breakpoint_kind_from_pc (CORE_ADDR *pcptr) -{ - int size = 0; - - gdb_assert (the_target->sw_breakpoint_from_kind != NULL); - - (*the_target->sw_breakpoint_from_kind) (0, &size); - return size; -} - -/* Define it. */ - -target_terminal_state target_terminal::m_terminal_state - = target_terminal_state::is_ours; - -/* See target/target.h. */ - -void -target_terminal::init () -{ - /* Placeholder needed because of fork_inferior. Not necessary on - GDBserver. */ -} - -/* See target/target.h. */ - -void -target_terminal::inferior () -{ - /* Placeholder needed because of fork_inferior. Not necessary on - GDBserver. */ -} - -/* See target/target.h. */ - -void -target_terminal::ours () -{ - /* Placeholder needed because of fork_inferior. Not necessary on - GDBserver. */ -} - -/* See target/target.h. */ - -void -target_terminal::ours_for_output (void) -{ - /* Placeholder. */ -} - -/* See target/target.h. */ - -void -target_terminal::info (const char *arg, int from_tty) -{ - /* Placeholder. */ -} diff -Nru gdb-9.1/gdb/gdbserver/target.h gdb-10.2/gdb/gdbserver/target.h --- gdb-9.1/gdb/gdbserver/target.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/target.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,733 +0,0 @@ -/* Target operations for the remote server for GDB. - Copyright (C) 2002-2020 Free Software Foundation, Inc. - - Contributed by MontaVista Software. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef GDBSERVER_TARGET_H -#define GDBSERVER_TARGET_H - -#include <sys/types.h> /* for mode_t */ -#include "target/target.h" -#include "target/resume.h" -#include "target/wait.h" -#include "target/waitstatus.h" -#include "mem-break.h" -#include "gdbsupport/btrace-common.h" -#include <vector> - -struct emit_ops; -struct buffer; -struct process_info; - -/* This structure describes how to resume a particular thread (or all - threads) based on the client's request. If thread is -1, then this - entry applies to all threads. These are passed around as an - array. */ - -struct thread_resume -{ - ptid_t thread; - - /* How to "resume". */ - enum resume_kind kind; - - /* If non-zero, send this signal when we resume, or to stop the - thread. If stopping a thread, and this is 0, the target should - stop the thread however it best decides to (e.g., SIGSTOP on - linux; SuspendThread on win32). This is a host signal value (not - enum gdb_signal). */ - int sig; - - /* Range to single step within. Valid only iff KIND is resume_step. - - Single-step once, and then continuing stepping as long as the - thread stops in this range. (If the range is empty - [STEP_RANGE_START == STEP_RANGE_END], then this is a single-step - request.) */ - CORE_ADDR step_range_start; /* Inclusive */ - CORE_ADDR step_range_end; /* Exclusive */ -}; - -struct target_ops -{ - /* Start a new process. - - PROGRAM is a path to the program to execute. - PROGRAM_ARGS is a standard NULL-terminated array of arguments, - to be passed to the inferior as ``argv'' (along with PROGRAM). - - Returns the new PID on success, -1 on failure. Registers the new - process with the process list. */ - int (*create_inferior) (const char *program, - const std::vector<char *> &program_args); - - /* Do additional setup after a new process is created, including - exec-wrapper completion. */ - void (*post_create_inferior) (void); - - /* Attach to a running process. - - PID is the process ID to attach to, specified by the user - or a higher layer. - - Returns -1 if attaching is unsupported, 0 on success, and calls - error() otherwise. */ - - int (*attach) (unsigned long pid); - - /* Kill process PROC. Return -1 on failure, and 0 on success. */ - - int (*kill) (process_info *proc); - - /* Detach from process PROC. Return -1 on failure, and 0 on - success. */ - - int (*detach) (process_info *proc); - - /* The inferior process has died. Do what is right. */ - - void (*mourn) (struct process_info *proc); - - /* Wait for process PID to exit. */ - - void (*join) (int pid); - - /* Return 1 iff the thread with process ID PID is alive. */ - - int (*thread_alive) (ptid_t pid); - - /* Resume the inferior process. */ - - void (*resume) (struct thread_resume *resume_info, size_t n); - - /* Wait for the inferior process or thread to change state. Store - status through argument pointer STATUS. - - PTID = -1 to wait for any pid to do something, PTID(pid,0,0) to - wait for any thread of process pid to do something. Return ptid - of child, or -1 in case of error; store status through argument - pointer STATUS. OPTIONS is a bit set of options defined as - TARGET_W* above. If options contains TARGET_WNOHANG and there's - no child stop to report, return is - null_ptid/TARGET_WAITKIND_IGNORE. */ - - ptid_t (*wait) (ptid_t ptid, struct target_waitstatus *status, int options); - - /* Fetch registers from the inferior process. - - If REGNO is -1, fetch all registers; otherwise, fetch at least REGNO. */ - - void (*fetch_registers) (struct regcache *regcache, int regno); - - /* Store registers to the inferior process. - - If REGNO is -1, store all registers; otherwise, store at least REGNO. */ - - void (*store_registers) (struct regcache *regcache, int regno); - - /* Prepare to read or write memory from the inferior process. - Targets use this to do what is necessary to get the state of the - inferior such that it is possible to access memory. - - This should generally only be called from client facing routines, - such as gdb_read_memory/gdb_write_memory, or the GDB breakpoint - insertion routine. - - Like `read_memory' and `write_memory' below, returns 0 on success - and errno on failure. */ - - int (*prepare_to_access_memory) (void); - - /* Undo the effects of prepare_to_access_memory. */ - - void (*done_accessing_memory) (void); - - /* Read memory from the inferior process. This should generally be - called through read_inferior_memory, which handles breakpoint shadowing. - - Read LEN bytes at MEMADDR into a buffer at MYADDR. - - Returns 0 on success and errno on failure. */ - - int (*read_memory) (CORE_ADDR memaddr, unsigned char *myaddr, int len); - - /* Write memory to the inferior process. This should generally be - called through target_write_memory, which handles breakpoint shadowing. - - Write LEN bytes from the buffer at MYADDR to MEMADDR. - - Returns 0 on success and errno on failure. */ - - int (*write_memory) (CORE_ADDR memaddr, const unsigned char *myaddr, - int len); - - /* Query GDB for the values of any symbols we're interested in. - This function is called whenever we receive a "qSymbols::" - query, which corresponds to every time more symbols (might) - become available. NULL if we aren't interested in any - symbols. */ - - void (*look_up_symbols) (void); - - /* Send an interrupt request to the inferior process, - however is appropriate. */ - - void (*request_interrupt) (void); - - /* Read auxiliary vector data from the inferior process. - - Read LEN bytes at OFFSET into a buffer at MYADDR. */ - - int (*read_auxv) (CORE_ADDR offset, unsigned char *myaddr, - unsigned int len); - - /* Returns true if GDB Z breakpoint type TYPE is supported, false - otherwise. The type is coded as follows: - '0' - software-breakpoint - '1' - hardware-breakpoint - '2' - write watchpoint - '3' - read watchpoint - '4' - access watchpoint - */ - int (*supports_z_point_type) (char z_type); - - /* Insert and remove a break or watchpoint. - Returns 0 on success, -1 on failure and 1 on unsupported. */ - - int (*insert_point) (enum raw_bkpt_type type, CORE_ADDR addr, - int size, struct raw_breakpoint *bp); - int (*remove_point) (enum raw_bkpt_type type, CORE_ADDR addr, - int size, struct raw_breakpoint *bp); - - /* Returns 1 if the target stopped because it executed a software - breakpoint instruction, 0 otherwise. */ - int (*stopped_by_sw_breakpoint) (void); - - /* Returns true if the target knows whether a trap was caused by a - SW breakpoint triggering. */ - int (*supports_stopped_by_sw_breakpoint) (void); - - /* Returns 1 if the target stopped for a hardware breakpoint. */ - int (*stopped_by_hw_breakpoint) (void); - - /* Returns true if the target knows whether a trap was caused by a - HW breakpoint triggering. */ - int (*supports_stopped_by_hw_breakpoint) (void); - - /* Returns true if the target can do hardware single step. */ - int (*supports_hardware_single_step) (void); - - /* Returns 1 if target was stopped due to a watchpoint hit, 0 otherwise. */ - - int (*stopped_by_watchpoint) (void); - - /* Returns the address associated with the watchpoint that hit, if any; - returns 0 otherwise. */ - - CORE_ADDR (*stopped_data_address) (void); - - /* Reports the text, data offsets of the executable. This is - needed for uclinux where the executable is relocated during load - time. */ - - int (*read_offsets) (CORE_ADDR *text, CORE_ADDR *data); - - /* Fetch the address associated with a specific thread local storage - area, determined by the specified THREAD, OFFSET, and LOAD_MODULE. - Stores it in *ADDRESS and returns zero on success; otherwise returns - an error code. A return value of -1 means this system does not - support the operation. */ - - int (*get_tls_address) (struct thread_info *thread, CORE_ADDR offset, - CORE_ADDR load_module, CORE_ADDR *address); - - /* Fill BUF with an hostio error packet representing the last hostio - error. */ - void (*hostio_last_error) (char *buf); - - /* Read/Write OS data using qXfer packets. */ - int (*qxfer_osdata) (const char *annex, unsigned char *readbuf, - unsigned const char *writebuf, CORE_ADDR offset, - int len); - - /* Read/Write extra signal info. */ - int (*qxfer_siginfo) (const char *annex, unsigned char *readbuf, - unsigned const char *writebuf, - CORE_ADDR offset, int len); - - int (*supports_non_stop) (void); - - /* Enables async target events. Returns the previous enable - state. */ - int (*async) (int enable); - - /* Switch to non-stop (1) or all-stop (0) mode. Return 0 on - success, -1 otherwise. */ - int (*start_non_stop) (int); - - /* Returns true if the target supports multi-process debugging. */ - int (*supports_multi_process) (void); - - /* Returns true if fork events are supported. */ - int (*supports_fork_events) (void); - - /* Returns true if vfork events are supported. */ - int (*supports_vfork_events) (void); - - /* Returns true if exec events are supported. */ - int (*supports_exec_events) (void); - - /* Allows target to re-initialize connection-specific settings. */ - void (*handle_new_gdb_connection) (void); - - /* If not NULL, target-specific routine to process monitor command. - Returns 1 if handled, or 0 to perform default processing. */ - int (*handle_monitor_command) (char *); - - /* Returns the core given a thread, or -1 if not known. */ - int (*core_of_thread) (ptid_t); - - /* Read loadmaps. Read LEN bytes at OFFSET into a buffer at MYADDR. */ - int (*read_loadmap) (const char *annex, CORE_ADDR offset, - unsigned char *myaddr, unsigned int len); - - /* Target specific qSupported support. FEATURES is an array of - features with COUNT elements. */ - void (*process_qsupported) (char **features, int count); - - /* Return 1 if the target supports tracepoints, 0 (or leave the - callback NULL) otherwise. */ - int (*supports_tracepoints) (void); - - /* Read PC from REGCACHE. */ - CORE_ADDR (*read_pc) (struct regcache *regcache); - - /* Write PC to REGCACHE. */ - void (*write_pc) (struct regcache *regcache, CORE_ADDR pc); - - /* Return true if THREAD is known to be stopped now. */ - int (*thread_stopped) (struct thread_info *thread); - - /* Read Thread Information Block address. */ - int (*get_tib_address) (ptid_t ptid, CORE_ADDR *address); - - /* Pause all threads. If FREEZE, arrange for any resume attempt to - be ignored until an unpause_all call unfreezes threads again. - There can be nested calls to pause_all, so a freeze counter - should be maintained. */ - void (*pause_all) (int freeze); - - /* Unpause all threads. Threads that hadn't been resumed by the - client should be left stopped. Basically a pause/unpause call - pair should not end up resuming threads that were stopped before - the pause call. */ - void (*unpause_all) (int unfreeze); - - /* Stabilize all threads. That is, force them out of jump pads. */ - void (*stabilize_threads) (void); - - /* Install a fast tracepoint jump pad. TPOINT is the address of the - tracepoint internal object as used by the IPA agent. TPADDR is - the address of tracepoint. COLLECTOR is address of the function - the jump pad redirects to. LOCKADDR is the address of the jump - pad lock object. ORIG_SIZE is the size in bytes of the - instruction at TPADDR. JUMP_ENTRY points to the address of the - jump pad entry, and on return holds the address past the end of - the created jump pad. If a trampoline is created by the function, - then TRAMPOLINE and TRAMPOLINE_SIZE return the address and size of - the trampoline, else they remain unchanged. JJUMP_PAD_INSN is a - buffer containing a copy of the instruction at TPADDR. - ADJUST_INSN_ADDR and ADJUST_INSN_ADDR_END are output parameters that - return the address range where the instruction at TPADDR was relocated - to. If an error occurs, the ERR may be used to pass on an error - message. */ - int (*install_fast_tracepoint_jump_pad) (CORE_ADDR tpoint, CORE_ADDR tpaddr, - CORE_ADDR collector, - CORE_ADDR lockaddr, - ULONGEST orig_size, - CORE_ADDR *jump_entry, - CORE_ADDR *trampoline, - ULONGEST *trampoline_size, - unsigned char *jjump_pad_insn, - ULONGEST *jjump_pad_insn_size, - CORE_ADDR *adjusted_insn_addr, - CORE_ADDR *adjusted_insn_addr_end, - char *err); - - /* Return the bytecode operations vector for the current inferior. - Returns NULL if bytecode compilation is not supported. */ - struct emit_ops *(*emit_ops) (void); - - /* Returns true if the target supports disabling randomization. */ - int (*supports_disable_randomization) (void); - - /* Return the minimum length of an instruction that can be safely overwritten - for use as a fast tracepoint. */ - int (*get_min_fast_tracepoint_insn_len) (void); - - /* Read solib info on SVR4 platforms. */ - int (*qxfer_libraries_svr4) (const char *annex, unsigned char *readbuf, - unsigned const char *writebuf, - CORE_ADDR offset, int len); - - /* Return true if target supports debugging agent. */ - int (*supports_agent) (void); - - /* Enable branch tracing for PTID based on CONF and allocate a branch trace - target information struct for reading and for disabling branch trace. */ - struct btrace_target_info *(*enable_btrace) - (ptid_t ptid, const struct btrace_config *conf); - - /* Disable branch tracing. - Returns zero on success, non-zero otherwise. */ - int (*disable_btrace) (struct btrace_target_info *tinfo); - - /* Read branch trace data into buffer. - Return 0 on success; print an error message into BUFFER and return -1, - otherwise. */ - int (*read_btrace) (struct btrace_target_info *, struct buffer *, - enum btrace_read_type type); - - /* Read the branch trace configuration into BUFFER. - Return 0 on success; print an error message into BUFFER and return -1 - otherwise. */ - int (*read_btrace_conf) (const struct btrace_target_info *, struct buffer *); - - /* Return true if target supports range stepping. */ - int (*supports_range_stepping) (void); - - /* Return the full absolute name of the executable file that was - run to create the process PID. If the executable file cannot - be determined, NULL is returned. Otherwise, a pointer to a - character string containing the pathname is returned. This - string should be copied into a buffer by the client if the string - will not be immediately used, or if it must persist. */ - char *(*pid_to_exec_file) (int pid); - - /* Multiple-filesystem-aware open. Like open(2), but operating in - the filesystem as it appears to process PID. Systems where all - processes share a common filesystem should set this to NULL. - If NULL, the caller should fall back to open(2). */ - int (*multifs_open) (int pid, const char *filename, - int flags, mode_t mode); - - /* Multiple-filesystem-aware unlink. Like unlink(2), but operates - in the filesystem as it appears to process PID. Systems where - all processes share a common filesystem should set this to NULL. - If NULL, the caller should fall back to unlink(2). */ - int (*multifs_unlink) (int pid, const char *filename); - - /* Multiple-filesystem-aware readlink. Like readlink(2), but - operating in the filesystem as it appears to process PID. - Systems where all processes share a common filesystem should - set this to NULL. If NULL, the caller should fall back to - readlink(2). */ - ssize_t (*multifs_readlink) (int pid, const char *filename, - char *buf, size_t bufsiz); - - /* Return the breakpoint kind for this target based on PC. The PCPTR is - adjusted to the real memory location in case a flag (e.g., the Thumb bit on - ARM) was present in the PC. */ - int (*breakpoint_kind_from_pc) (CORE_ADDR *pcptr); - - /* Return the software breakpoint from KIND. KIND can have target - specific meaning like the Z0 kind parameter. - SIZE is set to the software breakpoint's length in memory. */ - const gdb_byte *(*sw_breakpoint_from_kind) (int kind, int *size); - - /* Return the thread's name, or NULL if the target is unable to determine it. - The returned value must not be freed by the caller. */ - const char *(*thread_name) (ptid_t thread); - - /* Return the breakpoint kind for this target based on the current - processor state (e.g. the current instruction mode on ARM) and the - PC. The PCPTR is adjusted to the real memory location in case a flag - (e.g., the Thumb bit on ARM) is present in the PC. */ - int (*breakpoint_kind_from_current_state) (CORE_ADDR *pcptr); - - /* Returns true if the target can software single step. */ - int (*supports_software_single_step) (void); - - /* Return 1 if the target supports catch syscall, 0 (or leave the - callback NULL) otherwise. */ - int (*supports_catch_syscall) (void); - - /* Return tdesc index for IPA. */ - int (*get_ipa_tdesc_idx) (void); - - /* Thread ID to (numeric) thread handle: Return true on success and - false for failure. Return pointer to thread handle via HANDLE - and the handle's length via HANDLE_LEN. */ - bool (*thread_handle) (ptid_t ptid, gdb_byte **handle, int *handle_len); -}; - -extern struct target_ops *the_target; - -void set_target_ops (struct target_ops *); - -#define create_inferior(program, program_args) \ - (*the_target->create_inferior) (program, program_args) - -#define target_post_create_inferior() \ - do \ - { \ - if (the_target->post_create_inferior != NULL) \ - (*the_target->post_create_inferior) (); \ - } while (0) - -#define myattach(pid) \ - (*the_target->attach) (pid) - -int kill_inferior (process_info *proc); - -#define target_supports_fork_events() \ - (the_target->supports_fork_events ? \ - (*the_target->supports_fork_events) () : 0) - -#define target_supports_vfork_events() \ - (the_target->supports_vfork_events ? \ - (*the_target->supports_vfork_events) () : 0) - -#define target_supports_exec_events() \ - (the_target->supports_exec_events ? \ - (*the_target->supports_exec_events) () : 0) - -#define target_handle_new_gdb_connection() \ - do \ - { \ - if (the_target->handle_new_gdb_connection != NULL) \ - (*the_target->handle_new_gdb_connection) (); \ - } while (0) - -#define detach_inferior(proc) \ - (*the_target->detach) (proc) - -#define mythread_alive(pid) \ - (*the_target->thread_alive) (pid) - -#define fetch_inferior_registers(regcache, regno) \ - (*the_target->fetch_registers) (regcache, regno) - -#define store_inferior_registers(regcache, regno) \ - (*the_target->store_registers) (regcache, regno) - -#define join_inferior(pid) \ - (*the_target->join) (pid) - -#define target_supports_non_stop() \ - (the_target->supports_non_stop ? (*the_target->supports_non_stop ) () : 0) - -#define target_async(enable) \ - (the_target->async ? (*the_target->async) (enable) : 0) - -#define target_process_qsupported(features, count) \ - do \ - { \ - if (the_target->process_qsupported) \ - the_target->process_qsupported (features, count); \ - } while (0) - -#define target_supports_catch_syscall() \ - (the_target->supports_catch_syscall ? \ - (*the_target->supports_catch_syscall) () : 0) - -#define target_get_ipa_tdesc_idx() \ - (the_target->get_ipa_tdesc_idx \ - ? (*the_target->get_ipa_tdesc_idx) () : 0) - -#define target_supports_tracepoints() \ - (the_target->supports_tracepoints \ - ? (*the_target->supports_tracepoints) () : 0) - -#define target_supports_fast_tracepoints() \ - (the_target->install_fast_tracepoint_jump_pad != NULL) - -#define target_get_min_fast_tracepoint_insn_len() \ - (the_target->get_min_fast_tracepoint_insn_len \ - ? (*the_target->get_min_fast_tracepoint_insn_len) () : 0) - -#define thread_stopped(thread) \ - (*the_target->thread_stopped) (thread) - -#define pause_all(freeze) \ - do \ - { \ - if (the_target->pause_all) \ - (*the_target->pause_all) (freeze); \ - } while (0) - -#define unpause_all(unfreeze) \ - do \ - { \ - if (the_target->unpause_all) \ - (*the_target->unpause_all) (unfreeze); \ - } while (0) - -#define stabilize_threads() \ - do \ - { \ - if (the_target->stabilize_threads) \ - (*the_target->stabilize_threads) (); \ - } while (0) - -#define install_fast_tracepoint_jump_pad(tpoint, tpaddr, \ - collector, lockaddr, \ - orig_size, \ - jump_entry, \ - trampoline, trampoline_size, \ - jjump_pad_insn, \ - jjump_pad_insn_size, \ - adjusted_insn_addr, \ - adjusted_insn_addr_end, \ - err) \ - (*the_target->install_fast_tracepoint_jump_pad) (tpoint, tpaddr, \ - collector,lockaddr, \ - orig_size, jump_entry, \ - trampoline, \ - trampoline_size, \ - jjump_pad_insn, \ - jjump_pad_insn_size, \ - adjusted_insn_addr, \ - adjusted_insn_addr_end, \ - err) - -#define target_emit_ops() \ - (the_target->emit_ops ? (*the_target->emit_ops) () : NULL) - -#define target_supports_disable_randomization() \ - (the_target->supports_disable_randomization ? \ - (*the_target->supports_disable_randomization) () : 0) - -#define target_supports_agent() \ - (the_target->supports_agent ? \ - (*the_target->supports_agent) () : 0) - -static inline struct btrace_target_info * -target_enable_btrace (ptid_t ptid, const struct btrace_config *conf) -{ - if (the_target->enable_btrace == nullptr) - error (_("Target does not support branch tracing.")); - - return (*the_target->enable_btrace) (ptid, conf); -} - -static inline int -target_disable_btrace (struct btrace_target_info *tinfo) -{ - if (the_target->disable_btrace == nullptr) - error (_("Target does not support branch tracing.")); - - return (*the_target->disable_btrace) (tinfo); -} - -static inline int -target_read_btrace (struct btrace_target_info *tinfo, - struct buffer *buffer, - enum btrace_read_type type) -{ - if (the_target->read_btrace == nullptr) - error (_("Target does not support branch tracing.")); - - return (*the_target->read_btrace) (tinfo, buffer, type); -} - -static inline int -target_read_btrace_conf (struct btrace_target_info *tinfo, - struct buffer *buffer) -{ - if (the_target->read_btrace_conf == nullptr) - error (_("Target does not support branch tracing.")); - - return (*the_target->read_btrace_conf) (tinfo, buffer); -} - -#define target_supports_range_stepping() \ - (the_target->supports_range_stepping ? \ - (*the_target->supports_range_stepping) () : 0) - -#define target_supports_stopped_by_sw_breakpoint() \ - (the_target->supports_stopped_by_sw_breakpoint ? \ - (*the_target->supports_stopped_by_sw_breakpoint) () : 0) - -#define target_stopped_by_sw_breakpoint() \ - (the_target->stopped_by_sw_breakpoint ? \ - (*the_target->stopped_by_sw_breakpoint) () : 0) - -#define target_supports_stopped_by_hw_breakpoint() \ - (the_target->supports_stopped_by_hw_breakpoint ? \ - (*the_target->supports_stopped_by_hw_breakpoint) () : 0) - -#define target_supports_hardware_single_step() \ - (the_target->supports_hardware_single_step ? \ - (*the_target->supports_hardware_single_step) () : 0) - -#define target_stopped_by_hw_breakpoint() \ - (the_target->stopped_by_hw_breakpoint ? \ - (*the_target->stopped_by_hw_breakpoint) () : 0) - -#define target_breakpoint_kind_from_pc(pcptr) \ - (the_target->breakpoint_kind_from_pc \ - ? (*the_target->breakpoint_kind_from_pc) (pcptr) \ - : default_breakpoint_kind_from_pc (pcptr)) - -#define target_breakpoint_kind_from_current_state(pcptr) \ - (the_target->breakpoint_kind_from_current_state \ - ? (*the_target->breakpoint_kind_from_current_state) (pcptr) \ - : target_breakpoint_kind_from_pc (pcptr)) - -#define target_supports_software_single_step() \ - (the_target->supports_software_single_step ? \ - (*the_target->supports_software_single_step) () : 0) - -/* Start non-stop mode, returns 0 on success, -1 on failure. */ - -int start_non_stop (int nonstop); - -ptid_t mywait (ptid_t ptid, struct target_waitstatus *ourstatus, int options, - int connected_wait); - -/* Prepare to read or write memory from the inferior process. See the - corresponding target_ops methods for more details. */ - -int prepare_to_access_memory (void); -void done_accessing_memory (void); - -#define target_core_of_thread(ptid) \ - (the_target->core_of_thread ? (*the_target->core_of_thread) (ptid) \ - : -1) - -#define target_thread_name(ptid) \ - (the_target->thread_name ? (*the_target->thread_name) (ptid) \ - : NULL) - -#define target_thread_handle(ptid, handle, handle_len) \ - (the_target->thread_handle ? (*the_target->thread_handle) \ - (ptid, handle, handle_len) \ - : false) - -int read_inferior_memory (CORE_ADDR memaddr, unsigned char *myaddr, int len); - -int set_desired_thread (); - -const char *target_pid_to_str (ptid_t); - -int target_can_do_hardware_single_step (void); - -int default_breakpoint_kind_from_pc (CORE_ADDR *pcptr); - -#endif /* GDBSERVER_TARGET_H */ diff -Nru gdb-9.1/gdb/gdbserver/tdesc.c gdb-10.2/gdb/gdbserver/tdesc.c --- gdb-9.1/gdb/gdbserver/tdesc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/tdesc.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,204 +0,0 @@ -/* Copyright (C) 2012-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "server.h" -#include "tdesc.h" -#include "regdef.h" - -#ifndef IN_PROCESS_AGENT - -target_desc::~target_desc () -{ - xfree ((char *) arch); - xfree ((char *) osabi); -} - -bool target_desc::operator== (const target_desc &other) const -{ - if (reg_defs != other.reg_defs) - return false; - - /* Compare expedite_regs. */ - int i = 0; - for (; expedite_regs[i] != NULL; i++) - { - if (strcmp (expedite_regs[i], other.expedite_regs[i]) != 0) - return false; - } - if (other.expedite_regs[i] != NULL) - return false; - - return true; -} - -#endif - -void target_desc::accept (tdesc_element_visitor &v) const -{ -#ifndef IN_PROCESS_AGENT - v.visit_pre (this); - - for (const tdesc_feature_up &feature : features) - feature->accept (v); - - v.visit_post (this); -#endif -} - -void -init_target_desc (struct target_desc *tdesc, - const char **expedite_regs) -{ - int offset = 0; - - /* Go through all the features and populate reg_defs. */ - for (const tdesc_feature_up &feature : tdesc->features) - for (const tdesc_reg_up &treg : feature->registers) - { - int regnum = treg->target_regnum; - - /* Register number will increase (possibly with gaps) or be zero. */ - gdb_assert (regnum == 0 || regnum >= tdesc->reg_defs.size ()); - - if (regnum != 0) - tdesc->reg_defs.resize (regnum, reg (offset)); - - tdesc->reg_defs.emplace_back (treg->name.c_str (), offset, - treg->bitsize); - offset += treg->bitsize; - } - - tdesc->registers_size = offset / 8; - - /* Make sure PBUFSIZ is large enough to hold a full register - packet. */ - gdb_assert (2 * tdesc->registers_size + 32 <= PBUFSIZ); - -#ifndef IN_PROCESS_AGENT - tdesc->expedite_regs = expedite_regs; -#endif -} - -struct target_desc * -allocate_target_description (void) -{ - return new target_desc (); -} - -#ifndef IN_PROCESS_AGENT - -static const struct target_desc default_description {}; - -void -copy_target_description (struct target_desc *dest, - const struct target_desc *src) -{ - dest->reg_defs = src->reg_defs; - dest->expedite_regs = src->expedite_regs; - dest->registers_size = src->registers_size; - dest->xmltarget = src->xmltarget; -} - -const struct target_desc * -current_target_desc (void) -{ - if (current_thread == NULL) - return &default_description; - - return current_process ()->tdesc; -} - -/* See gdbsupport/tdesc.h. */ - -const char * -tdesc_architecture_name (const struct target_desc *target_desc) -{ - return target_desc->arch; -} - -/* See gdbsupport/tdesc.h. */ - -void -set_tdesc_architecture (struct target_desc *target_desc, - const char *name) -{ - target_desc->arch = xstrdup (name); -} - -/* See gdbsupport/tdesc.h. */ - -const char * -tdesc_osabi_name (const struct target_desc *target_desc) -{ - return target_desc->osabi; -} - -/* See gdbsupport/tdesc.h. */ - -void -set_tdesc_osabi (struct target_desc *target_desc, const char *name) -{ - target_desc->osabi = xstrdup (name); -} - -/* See gdbsupport/tdesc.h. */ - -const char * -tdesc_get_features_xml (const target_desc *tdesc) -{ - /* Either .xmltarget or .features is not NULL. */ - gdb_assert (tdesc->xmltarget != NULL - || (!tdesc->features.empty () - && tdesc->arch != NULL)); - - if (tdesc->xmltarget == NULL) - { - std::string buffer ("@"); - print_xml_feature v (&buffer); - tdesc->accept (v); - tdesc->xmltarget = xstrdup (buffer.c_str ()); - } - - return tdesc->xmltarget; -} -#endif - -/* See gdbsupport/tdesc.h. */ - -struct tdesc_feature * -tdesc_create_feature (struct target_desc *tdesc, const char *name) -{ - struct tdesc_feature *new_feature = new tdesc_feature (name); - tdesc->features.emplace_back (new_feature); - return new_feature; -} - -/* See gdbsupport/tdesc.h. */ - -bool -tdesc_contains_feature (const target_desc *tdesc, const std::string &feature) -{ - gdb_assert (tdesc != nullptr); - - for (const tdesc_feature_up &f : tdesc->features) - { - if (f->name == feature) - return true; - } - - return false; -} diff -Nru gdb-9.1/gdb/gdbserver/tdesc.h gdb-10.2/gdb/gdbserver/tdesc.h --- gdb-9.1/gdb/gdbserver/tdesc.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/tdesc.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,101 +0,0 @@ -/* Target description definitions for remote server for GDB. - Copyright (C) 2012-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef GDBSERVER_TDESC_H -#define GDBSERVER_TDESC_H - -#include "gdbsupport/tdesc.h" - -#include "regdef.h" -#include <vector> - -/* A target description. Inherit from tdesc_feature so that target_desc - can be used as tdesc_feature. */ - -struct target_desc : tdesc_element -{ - /* A vector of elements of register definitions that - describe the inferior's register set. */ - std::vector<struct reg> reg_defs; - - /* The register cache size, in bytes. */ - int registers_size; - - /* XML features in this target description. */ - std::vector<tdesc_feature_up> features; - -#ifndef IN_PROCESS_AGENT - /* An array of register names. These are the "expedite" registers: - registers whose values are sent along with stop replies. */ - const char **expedite_regs = NULL; - - /* Defines what to return when looking for the "target.xml" file in - response to qXfer:features:read. Its contents can either be - verbatim XML code (prefixed with a '@') or else the name of the - actual XML file to be used in place of "target.xml". - - If NULL then its content will be generated by parsing the target - description into xml. */ - mutable const char *xmltarget = NULL; - - /* The value of <architecture> element in the XML, replying GDB. */ - const char *arch = NULL; - - /* The value of <osabi> element in the XML, replying GDB. */ - const char *osabi = NULL; - -public: - target_desc () - : registers_size (0) - {} - - ~target_desc (); - - bool operator== (const target_desc &other) const; - - bool operator!= (const target_desc &other) const - { - return !(*this == other); - } -#endif - - void accept (tdesc_element_visitor &v) const override; -}; - -/* Copy target description SRC to DEST. */ - -void copy_target_description (struct target_desc *dest, - const struct target_desc *src); - -/* Initialize TDESC, and then set its expedite_regs field to - EXPEDITE_REGS. */ - -void init_target_desc (struct target_desc *tdesc, - const char **expedite_regs); - -/* Return the current inferior's target description. Never returns - NULL. */ - -const struct target_desc *current_target_desc (void); - -/* Return true if TDESC contains the feature described by string FEATURE. - Return false otherwise. */ -bool tdesc_contains_feature (const target_desc *tdesc, - const std::string &feature); - -#endif /* GDBSERVER_TDESC_H */ diff -Nru gdb-9.1/gdb/gdbserver/thread-db.c gdb-10.2/gdb/gdbserver/thread-db.c --- gdb-9.1/gdb/gdbserver/thread-db.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/thread-db.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,910 +0,0 @@ -/* Thread management interface, for the remote server for GDB. - Copyright (C) 2002-2020 Free Software Foundation, Inc. - - Contributed by MontaVista Software. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "server.h" - -#include "linux-low.h" - -#include "debug.h" -#include "gdb_proc_service.h" -#include "nat/gdb_thread_db.h" -#include "gdbsupport/gdb_vecs.h" -#include "nat/linux-procfs.h" -#include "gdbsupport/scoped_restore.h" - -#ifndef USE_LIBTHREAD_DB_DIRECTLY -#include <dlfcn.h> -#endif -#include <limits.h> -#include <ctype.h> - -struct thread_db -{ - /* Structure that identifies the child process for the - <proc_service.h> interface. */ - struct ps_prochandle proc_handle; - - /* Connection to the libthread_db library. */ - td_thragent_t *thread_agent; - - /* If this flag has been set, we've already asked GDB for all - symbols we might need; assume symbol cache misses are - failures. */ - int all_symbols_looked_up; - -#ifndef USE_LIBTHREAD_DB_DIRECTLY - /* Handle of the libthread_db from dlopen. */ - void *handle; -#endif - - /* Addresses of libthread_db functions. */ - td_ta_new_ftype *td_ta_new_p; - td_ta_map_lwp2thr_ftype *td_ta_map_lwp2thr_p; - td_thr_get_info_ftype *td_thr_get_info_p; - td_ta_thr_iter_ftype *td_ta_thr_iter_p; - td_thr_tls_get_addr_ftype *td_thr_tls_get_addr_p; - td_thr_tlsbase_ftype *td_thr_tlsbase_p; - td_symbol_list_ftype *td_symbol_list_p; -}; - -static char *libthread_db_search_path; - -static int find_one_thread (ptid_t); -static int find_new_threads_callback (const td_thrhandle_t *th_p, void *data); - -static const char * -thread_db_err_str (td_err_e err) -{ - static char buf[64]; - - switch (err) - { - case TD_OK: - return "generic 'call succeeded'"; - case TD_ERR: - return "generic error"; - case TD_NOTHR: - return "no thread to satisfy query"; - case TD_NOSV: - return "no sync handle to satisfy query"; - case TD_NOLWP: - return "no LWP to satisfy query"; - case TD_BADPH: - return "invalid process handle"; - case TD_BADTH: - return "invalid thread handle"; - case TD_BADSH: - return "invalid synchronization handle"; - case TD_BADTA: - return "invalid thread agent"; - case TD_BADKEY: - return "invalid key"; - case TD_NOMSG: - return "no event message for getmsg"; - case TD_NOFPREGS: - return "FPU register set not available"; - case TD_NOLIBTHREAD: - return "application not linked with libthread"; - case TD_NOEVENT: - return "requested event is not supported"; - case TD_NOCAPAB: - return "capability not available"; - case TD_DBERR: - return "debugger service failed"; - case TD_NOAPLIC: - return "operation not applicable to"; - case TD_NOTSD: - return "no thread-specific data for this thread"; - case TD_MALLOC: - return "malloc failed"; - case TD_PARTIALREG: - return "only part of register set was written/read"; - case TD_NOXREGS: - return "X register set not available for this thread"; -#ifdef HAVE_TD_VERSION - case TD_VERSION: - return "version mismatch between libthread_db and libpthread"; -#endif - default: - xsnprintf (buf, sizeof (buf), "unknown thread_db error '%d'", err); - return buf; - } -} - -#if 0 -static char * -thread_db_state_str (td_thr_state_e state) -{ - static char buf[64]; - - switch (state) - { - case TD_THR_STOPPED: - return "stopped by debugger"; - case TD_THR_RUN: - return "runnable"; - case TD_THR_ACTIVE: - return "active"; - case TD_THR_ZOMBIE: - return "zombie"; - case TD_THR_SLEEP: - return "sleeping"; - case TD_THR_STOPPED_ASLEEP: - return "stopped by debugger AND blocked"; - default: - xsnprintf (buf, sizeof (buf), "unknown thread_db state %d", state); - return buf; - } -} -#endif - -/* Get thread info about PTID, accessing memory via the current - thread. */ - -static int -find_one_thread (ptid_t ptid) -{ - td_thrhandle_t th; - td_thrinfo_t ti; - td_err_e err; - struct lwp_info *lwp; - struct thread_db *thread_db = current_process ()->priv->thread_db; - int lwpid = ptid.lwp (); - - thread_info *thread = find_thread_ptid (ptid); - lwp = get_thread_lwp (thread); - if (lwp->thread_known) - return 1; - - /* Get information about this thread. */ - err = thread_db->td_ta_map_lwp2thr_p (thread_db->thread_agent, lwpid, &th); - if (err != TD_OK) - error ("Cannot get thread handle for LWP %d: %s", - lwpid, thread_db_err_str (err)); - - err = thread_db->td_thr_get_info_p (&th, &ti); - if (err != TD_OK) - error ("Cannot get thread info for LWP %d: %s", - lwpid, thread_db_err_str (err)); - - if (debug_threads) - debug_printf ("Found thread %ld (LWP %d)\n", - (unsigned long) ti.ti_tid, ti.ti_lid); - - if (lwpid != ti.ti_lid) - { - warning ("PID mismatch! Expected %ld, got %ld", - (long) lwpid, (long) ti.ti_lid); - return 0; - } - - /* If the new thread ID is zero, a final thread ID will be available - later. Do not enable thread debugging yet. */ - if (ti.ti_tid == 0) - return 0; - - lwp->thread_known = 1; - lwp->th = th; - lwp->thread_handle = ti.ti_tid; - - return 1; -} - -/* Attach a thread. Return true on success. */ - -static int -attach_thread (const td_thrhandle_t *th_p, td_thrinfo_t *ti_p) -{ - struct process_info *proc = current_process (); - int pid = pid_of (proc); - ptid_t ptid = ptid_t (pid, ti_p->ti_lid, 0); - struct lwp_info *lwp; - int err; - - if (debug_threads) - debug_printf ("Attaching to thread %ld (LWP %d)\n", - (unsigned long) ti_p->ti_tid, ti_p->ti_lid); - err = linux_attach_lwp (ptid); - if (err != 0) - { - std::string reason = linux_ptrace_attach_fail_reason_string (ptid, err); - - warning ("Could not attach to thread %ld (LWP %d): %s", - (unsigned long) ti_p->ti_tid, ti_p->ti_lid, reason.c_str ()); - - return 0; - } - - lwp = find_lwp_pid (ptid); - gdb_assert (lwp != NULL); - lwp->thread_known = 1; - lwp->th = *th_p; - lwp->thread_handle = ti_p->ti_tid; - - return 1; -} - -/* Attach thread if we haven't seen it yet. - Increment *COUNTER if we have attached a new thread. - Return false on failure. */ - -static int -maybe_attach_thread (const td_thrhandle_t *th_p, td_thrinfo_t *ti_p, - int *counter) -{ - struct lwp_info *lwp; - - lwp = find_lwp_pid (ptid_t (ti_p->ti_lid)); - if (lwp != NULL) - return 1; - - if (!attach_thread (th_p, ti_p)) - return 0; - - if (counter != NULL) - *counter += 1; - - return 1; -} - -static int -find_new_threads_callback (const td_thrhandle_t *th_p, void *data) -{ - td_thrinfo_t ti; - td_err_e err; - struct thread_db *thread_db = current_process ()->priv->thread_db; - - err = thread_db->td_thr_get_info_p (th_p, &ti); - if (err != TD_OK) - error ("Cannot get thread info: %s", thread_db_err_str (err)); - - if (ti.ti_lid == -1) - { - /* A thread with kernel thread ID -1 is either a thread that - exited and was joined, or a thread that is being created but - hasn't started yet, and that is reusing the tcb/stack of a - thread that previously exited and was joined. (glibc marks - terminated and joined threads with kernel thread ID -1. See - glibc PR17707. */ - if (debug_threads) - debug_printf ("thread_db: skipping exited and " - "joined thread (0x%lx)\n", - (unsigned long) ti.ti_tid); - return 0; - } - - /* Check for zombies. */ - if (ti.ti_state == TD_THR_UNKNOWN || ti.ti_state == TD_THR_ZOMBIE) - return 0; - - if (!maybe_attach_thread (th_p, &ti, (int *) data)) - { - /* Terminate iteration early: we might be looking at stale data in - the inferior. The thread_db_find_new_threads will retry. */ - return 1; - } - - return 0; -} - -static void -thread_db_find_new_threads (void) -{ - td_err_e err; - ptid_t ptid = current_ptid; - struct thread_db *thread_db = current_process ()->priv->thread_db; - int loop, iteration; - - /* This function is only called when we first initialize thread_db. - First locate the initial thread. If it is not ready for - debugging yet, then stop. */ - if (find_one_thread (ptid) == 0) - return; - - /* Require 4 successive iterations which do not find any new threads. - The 4 is a heuristic: there is an inherent race here, and I have - seen that 2 iterations in a row are not always sufficient to - "capture" all threads. */ - for (loop = 0, iteration = 0; loop < 4; ++loop, ++iteration) - { - int new_thread_count = 0; - - /* Iterate over all user-space threads to discover new threads. */ - err = thread_db->td_ta_thr_iter_p (thread_db->thread_agent, - find_new_threads_callback, - &new_thread_count, - TD_THR_ANY_STATE, - TD_THR_LOWEST_PRIORITY, - TD_SIGNO_MASK, TD_THR_ANY_USER_FLAGS); - if (debug_threads) - debug_printf ("Found %d threads in iteration %d.\n", - new_thread_count, iteration); - - if (new_thread_count != 0) - { - /* Found new threads. Restart iteration from beginning. */ - loop = -1; - } - } - if (err != TD_OK) - error ("Cannot find new threads: %s", thread_db_err_str (err)); -} - -/* Cache all future symbols that thread_db might request. We can not - request symbols at arbitrary states in the remote protocol, only - when the client tells us that new symbols are available. So when - we load the thread library, make sure to check the entire list. */ - -static void -thread_db_look_up_symbols (void) -{ - struct thread_db *thread_db = current_process ()->priv->thread_db; - const char **sym_list; - CORE_ADDR unused; - - for (sym_list = thread_db->td_symbol_list_p (); *sym_list; sym_list++) - look_up_one_symbol (*sym_list, &unused, 1); - - /* We're not interested in any other libraries loaded after this - point, only in symbols in libpthread.so. */ - thread_db->all_symbols_looked_up = 1; -} - -int -thread_db_look_up_one_symbol (const char *name, CORE_ADDR *addrp) -{ - struct thread_db *thread_db = current_process ()->priv->thread_db; - int may_ask_gdb = !thread_db->all_symbols_looked_up; - - /* If we've passed the call to thread_db_look_up_symbols, then - anything not in the cache must not exist; we're not interested - in any libraries loaded after that point, only in symbols in - libpthread.so. It might not be an appropriate time to look - up a symbol, e.g. while we're trying to fetch registers. */ - return look_up_one_symbol (name, addrp, may_ask_gdb); -} - -int -thread_db_get_tls_address (struct thread_info *thread, CORE_ADDR offset, - CORE_ADDR load_module, CORE_ADDR *address) -{ - psaddr_t addr; - td_err_e err; - struct lwp_info *lwp; - struct thread_info *saved_thread; - struct process_info *proc; - struct thread_db *thread_db; - - proc = get_thread_process (thread); - thread_db = proc->priv->thread_db; - - /* If the thread layer is not (yet) initialized, fail. */ - if (thread_db == NULL || !thread_db->all_symbols_looked_up) - return TD_ERR; - - /* If td_thr_tls_get_addr is missing rather do not expect td_thr_tlsbase - could work. */ - if (thread_db->td_thr_tls_get_addr_p == NULL - || (load_module == 0 && thread_db->td_thr_tlsbase_p == NULL)) - return -1; - - lwp = get_thread_lwp (thread); - if (!lwp->thread_known) - find_one_thread (thread->id); - if (!lwp->thread_known) - return TD_NOTHR; - - saved_thread = current_thread; - current_thread = thread; - - if (load_module != 0) - { - /* Note the cast through uintptr_t: this interface only works if - a target address fits in a psaddr_t, which is a host pointer. - So a 32-bit debugger can not access 64-bit TLS through this. */ - err = thread_db->td_thr_tls_get_addr_p (&lwp->th, - (psaddr_t) (uintptr_t) load_module, - offset, &addr); - } - else - { - /* This code path handles the case of -static -pthread executables: - https://sourceware.org/ml/libc-help/2014-03/msg00024.html - For older GNU libc r_debug.r_map is NULL. For GNU libc after - PR libc/16831 due to GDB PR threads/16954 LOAD_MODULE is also NULL. - The constant number 1 depends on GNU __libc_setup_tls - initialization of l_tls_modid to 1. */ - err = thread_db->td_thr_tlsbase_p (&lwp->th, 1, &addr); - addr = (char *) addr + offset; - } - - current_thread = saved_thread; - if (err == TD_OK) - { - *address = (CORE_ADDR) (uintptr_t) addr; - return 0; - } - else - return err; -} - -/* See linux-low.h. */ - -bool -thread_db_thread_handle (ptid_t ptid, gdb_byte **handle, int *handle_len) -{ - struct thread_db *thread_db; - struct lwp_info *lwp; - thread_info *thread = find_thread_ptid (ptid); - - if (thread == NULL) - return false; - - thread_db = get_thread_process (thread)->priv->thread_db; - - if (thread_db == NULL) - return false; - - lwp = get_thread_lwp (thread); - - if (!lwp->thread_known && !find_one_thread (thread->id)) - return false; - - gdb_assert (lwp->thread_known); - - *handle = (gdb_byte *) &lwp->thread_handle; - *handle_len = sizeof (lwp->thread_handle); - return true; -} - -#ifdef USE_LIBTHREAD_DB_DIRECTLY - -static int -thread_db_load_search (void) -{ - td_err_e err; - struct thread_db *tdb; - struct process_info *proc = current_process (); - - gdb_assert (proc->priv->thread_db == NULL); - - tdb = XCNEW (struct thread_db); - proc->priv->thread_db = tdb; - - tdb->td_ta_new_p = &td_ta_new; - - /* Attempt to open a connection to the thread library. */ - err = tdb->td_ta_new_p (&tdb->proc_handle, &tdb->thread_agent); - if (err != TD_OK) - { - if (debug_threads) - debug_printf ("td_ta_new(): %s\n", thread_db_err_str (err)); - free (tdb); - proc->priv->thread_db = NULL; - return 0; - } - - tdb->td_ta_map_lwp2thr_p = &td_ta_map_lwp2thr; - tdb->td_thr_get_info_p = &td_thr_get_info; - tdb->td_ta_thr_iter_p = &td_ta_thr_iter; - tdb->td_symbol_list_p = &td_symbol_list; - - /* These are not essential. */ - tdb->td_thr_tls_get_addr_p = &td_thr_tls_get_addr; - tdb->td_thr_tlsbase_p = &td_thr_tlsbase; - - return 1; -} - -#else - -static int -try_thread_db_load_1 (void *handle) -{ - td_err_e err; - struct thread_db *tdb; - struct process_info *proc = current_process (); - - gdb_assert (proc->priv->thread_db == NULL); - - tdb = XCNEW (struct thread_db); - proc->priv->thread_db = tdb; - - tdb->handle = handle; - - /* Initialize pointers to the dynamic library functions we will use. - Essential functions first. */ - -#define CHK(required, a) \ - do \ - { \ - if ((a) == NULL) \ - { \ - if (debug_threads) \ - debug_printf ("dlsym: %s\n", dlerror ()); \ - if (required) \ - { \ - free (tdb); \ - proc->priv->thread_db = NULL; \ - return 0; \ - } \ - } \ - } \ - while (0) - -#define TDB_DLSYM(tdb, func) \ - tdb->func ## _p = (func ## _ftype *) dlsym (tdb->handle, #func) - - CHK (1, TDB_DLSYM (tdb, td_ta_new)); - - /* Attempt to open a connection to the thread library. */ - err = tdb->td_ta_new_p (&tdb->proc_handle, &tdb->thread_agent); - if (err != TD_OK) - { - if (debug_threads) - debug_printf ("td_ta_new(): %s\n", thread_db_err_str (err)); - free (tdb); - proc->priv->thread_db = NULL; - return 0; - } - - CHK (1, TDB_DLSYM (tdb, td_ta_map_lwp2thr)); - CHK (1, TDB_DLSYM (tdb, td_thr_get_info)); - CHK (1, TDB_DLSYM (tdb, td_ta_thr_iter)); - CHK (1, TDB_DLSYM (tdb, td_symbol_list)); - - /* These are not essential. */ - CHK (0, TDB_DLSYM (tdb, td_thr_tls_get_addr)); - CHK (0, TDB_DLSYM (tdb, td_thr_tlsbase)); - -#undef CHK -#undef TDB_DLSYM - - return 1; -} - -#ifdef HAVE_DLADDR - -/* Lookup a library in which given symbol resides. - Note: this is looking in the GDBSERVER process, not in the inferior. - Returns library name, or NULL. */ - -static const char * -dladdr_to_soname (const void *addr) -{ - Dl_info info; - - if (dladdr (addr, &info) != 0) - return info.dli_fname; - return NULL; -} - -#endif - -static int -try_thread_db_load (const char *library) -{ - void *handle; - - if (debug_threads) - debug_printf ("Trying host libthread_db library: %s.\n", - library); - handle = dlopen (library, RTLD_NOW); - if (handle == NULL) - { - if (debug_threads) - debug_printf ("dlopen failed: %s.\n", dlerror ()); - return 0; - } - -#ifdef HAVE_DLADDR - if (debug_threads && strchr (library, '/') == NULL) - { - void *td_init; - - td_init = dlsym (handle, "td_init"); - if (td_init != NULL) - { - const char *const libpath = dladdr_to_soname (td_init); - - if (libpath != NULL) - debug_printf ("Host %s resolved to: %s.\n", library, libpath); - } - } -#endif - - if (try_thread_db_load_1 (handle)) - return 1; - - /* This library "refused" to work on current inferior. */ - dlclose (handle); - return 0; -} - -/* Handle $sdir in libthread-db-search-path. - Look for libthread_db in the system dirs, or wherever a plain - dlopen(file_without_path) will look. - The result is true for success. */ - -static int -try_thread_db_load_from_sdir (void) -{ - return try_thread_db_load (LIBTHREAD_DB_SO); -} - -/* Try to load libthread_db from directory DIR of length DIR_LEN. - The result is true for success. */ - -static int -try_thread_db_load_from_dir (const char *dir, size_t dir_len) -{ - char path[PATH_MAX]; - - if (dir_len + 1 + strlen (LIBTHREAD_DB_SO) + 1 > sizeof (path)) - { - char *cp = (char *) xmalloc (dir_len + 1); - - memcpy (cp, dir, dir_len); - cp[dir_len] = '\0'; - warning (_("libthread-db-search-path component too long," - " ignored: %s."), cp); - free (cp); - return 0; - } - - memcpy (path, dir, dir_len); - path[dir_len] = '/'; - strcpy (path + dir_len + 1, LIBTHREAD_DB_SO); - return try_thread_db_load (path); -} - -/* Search libthread_db_search_path for libthread_db which "agrees" - to work on current inferior. - The result is true for success. */ - -static int -thread_db_load_search (void) -{ - int rc = 0; - - if (libthread_db_search_path == NULL) - libthread_db_search_path = xstrdup (LIBTHREAD_DB_SEARCH_PATH); - - std::vector<gdb::unique_xmalloc_ptr<char>> dir_vec - = dirnames_to_char_ptr_vec (libthread_db_search_path); - - for (const gdb::unique_xmalloc_ptr<char> &this_dir_up : dir_vec) - { - char *this_dir = this_dir_up.get (); - const int pdir_len = sizeof ("$pdir") - 1; - size_t this_dir_len; - - this_dir_len = strlen (this_dir); - - if (strncmp (this_dir, "$pdir", pdir_len) == 0 - && (this_dir[pdir_len] == '\0' - || this_dir[pdir_len] == '/')) - { - /* We don't maintain a list of loaded libraries so we don't know - where libpthread lives. We *could* fetch the info, but we don't - do that yet. Ignore it. */ - } - else if (strcmp (this_dir, "$sdir") == 0) - { - if (try_thread_db_load_from_sdir ()) - { - rc = 1; - break; - } - } - else - { - if (try_thread_db_load_from_dir (this_dir, this_dir_len)) - { - rc = 1; - break; - } - } - } - - if (debug_threads) - debug_printf ("thread_db_load_search returning %d\n", rc); - return rc; -} - -#endif /* USE_LIBTHREAD_DB_DIRECTLY */ - -int -thread_db_init (void) -{ - struct process_info *proc = current_process (); - - /* FIXME drow/2004-10-16: This is the "overall process ID", which - GNU/Linux calls tgid, "thread group ID". When we support - attaching to threads, the original thread may not be the correct - thread. We would have to get the process ID from /proc for NPTL. - - This isn't the only place in gdbserver that assumes that the first - process in the list is the thread group leader. */ - - if (thread_db_load_search ()) - { - /* It's best to avoid td_ta_thr_iter if possible. That walks - data structures in the inferior's address space that may be - corrupted, or, if the target is running, the list may change - while we walk it. In the latter case, it's possible that a - thread exits just at the exact time that causes GDBserver to - get stuck in an infinite loop. As the kernel supports clone - events and /proc/PID/task/ exists, then we already know about - all threads in the process. When we need info out of - thread_db on a given thread (e.g., for TLS), we'll use - find_one_thread then. That uses thread_db entry points that - do not walk libpthread's thread list, so should be safe, as - well as more efficient. */ - if (!linux_proc_task_list_dir_exists (pid_of (proc))) - thread_db_find_new_threads (); - thread_db_look_up_symbols (); - return 1; - } - - return 0; -} - -static void -switch_to_process (struct process_info *proc) -{ - int pid = pid_of (proc); - - current_thread = find_any_thread_of_pid (pid); -} - -/* Disconnect from libthread_db and free resources. */ - -static void -disable_thread_event_reporting (struct process_info *proc) -{ - struct thread_db *thread_db = proc->priv->thread_db; - if (thread_db) - { - td_err_e (*td_ta_clear_event_p) (const td_thragent_t *ta, - td_thr_events_t *event); - -#ifndef USE_LIBTHREAD_DB_DIRECTLY - td_ta_clear_event_p - = (td_ta_clear_event_ftype *) dlsym (thread_db->handle, - "td_ta_clear_event"); -#else - td_ta_clear_event_p = &td_ta_clear_event; -#endif - - if (td_ta_clear_event_p != NULL) - { - struct thread_info *saved_thread = current_thread; - td_thr_events_t events; - - switch_to_process (proc); - - /* Set the process wide mask saying we aren't interested - in any events anymore. */ - td_event_fillset (&events); - (*td_ta_clear_event_p) (thread_db->thread_agent, &events); - - current_thread = saved_thread; - } - } -} - -void -thread_db_detach (struct process_info *proc) -{ - struct thread_db *thread_db = proc->priv->thread_db; - - if (thread_db) - { - disable_thread_event_reporting (proc); - } -} - -/* Disconnect from libthread_db and free resources. */ - -void -thread_db_mourn (struct process_info *proc) -{ - struct thread_db *thread_db = proc->priv->thread_db; - if (thread_db) - { - td_ta_delete_ftype *td_ta_delete_p; - -#ifndef USE_LIBTHREAD_DB_DIRECTLY - td_ta_delete_p = (td_ta_delete_ftype *) dlsym (thread_db->handle, "td_ta_delete"); -#else - td_ta_delete_p = &td_ta_delete; -#endif - - if (td_ta_delete_p != NULL) - (*td_ta_delete_p) (thread_db->thread_agent); - -#ifndef USE_LIBTHREAD_DB_DIRECTLY - dlclose (thread_db->handle); -#endif /* USE_LIBTHREAD_DB_DIRECTLY */ - - free (thread_db); - proc->priv->thread_db = NULL; - } -} - -/* Handle "set libthread-db-search-path" monitor command and return 1. - For any other command, return 0. */ - -int -thread_db_handle_monitor_command (char *mon) -{ - const char *cmd = "set libthread-db-search-path"; - size_t cmd_len = strlen (cmd); - - if (strncmp (mon, cmd, cmd_len) == 0 - && (mon[cmd_len] == '\0' - || mon[cmd_len] == ' ')) - { - const char *cp = mon + cmd_len; - - if (libthread_db_search_path != NULL) - free (libthread_db_search_path); - - /* Skip leading space (if any). */ - while (isspace (*cp)) - ++cp; - - if (*cp == '\0') - cp = LIBTHREAD_DB_SEARCH_PATH; - libthread_db_search_path = xstrdup (cp); - - monitor_output ("libthread-db-search-path set to `"); - monitor_output (libthread_db_search_path); - monitor_output ("'\n"); - return 1; - } - - /* Tell server.c to perform default processing. */ - return 0; -} - -/* See linux-low.h. */ - -void -thread_db_notice_clone (struct thread_info *parent_thr, ptid_t child_ptid) -{ - process_info *parent_proc = get_thread_process (parent_thr); - struct thread_db *thread_db = parent_proc->priv->thread_db; - - /* If the thread layer isn't initialized, return. It may just - be that the program uses clone, but does not use libthread_db. */ - if (thread_db == NULL || !thread_db->all_symbols_looked_up) - return; - - /* find_one_thread calls into libthread_db which accesses memory via - the current thread. Temporarily switch to a thread we know is - stopped. */ - scoped_restore restore_current_thread - = make_scoped_restore (¤t_thread, parent_thr); - - if (!find_one_thread (child_ptid)) - warning ("Cannot find thread after clone."); -} diff -Nru gdb-9.1/gdb/gdbserver/tracepoint.c gdb-10.2/gdb/gdbserver/tracepoint.c --- gdb-9.1/gdb/gdbserver/tracepoint.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/tracepoint.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,7453 +0,0 @@ -/* Tracepoint code for remote server for GDB. - Copyright (C) 2009-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "server.h" -#include "tracepoint.h" -#include "gdbthread.h" -#include "gdbsupport/rsp-low.h" - -#include <ctype.h> -#include <fcntl.h> -#include <unistd.h> -#include <chrono> -#include <inttypes.h> -#include "ax.h" -#include "tdesc.h" - -#define IPA_SYM_STRUCT_NAME ipa_sym_addresses -#include "gdbsupport/agent.h" - -#define DEFAULT_TRACE_BUFFER_SIZE 5242880 /* 5*1024*1024 */ - -/* This file is built for both GDBserver, and the in-process - agent (IPA), a shared library that includes a tracing agent that is - loaded by the inferior to support fast tracepoints. Fast - tracepoints (or more accurately, jump based tracepoints) are - implemented by patching the tracepoint location with a jump into a - small trampoline function whose job is to save the register state, - call the in-process tracing agent, and then execute the original - instruction that was under the tracepoint jump (possibly adjusted, - if PC-relative, or some such). - - The current synchronization design is pull based. That means, - GDBserver does most of the work, by peeking/poking at the inferior - agent's memory directly for downloading tracepoint and associated - objects, and for uploading trace frames. Whenever the IPA needs - something from GDBserver (trace buffer is full, tracing stopped for - some reason, etc.) the IPA calls a corresponding hook function - where GDBserver has placed a breakpoint. - - Each of the agents has its own trace buffer. When browsing the - trace frames built from slow and fast tracepoints from GDB (tfind - mode), there's no guarantee the user is seeing the trace frames in - strict chronological creation order, although, GDBserver tries to - keep the order relatively reasonable, by syncing the trace buffers - at appropriate times. - -*/ - -#ifdef IN_PROCESS_AGENT - -static void trace_vdebug (const char *, ...) ATTRIBUTE_PRINTF (1, 2); - -static void -trace_vdebug (const char *fmt, ...) -{ - char buf[1024]; - va_list ap; - - va_start (ap, fmt); - vsprintf (buf, fmt, ap); - fprintf (stderr, PROG "/tracepoint: %s\n", buf); - va_end (ap); -} - -#define trace_debug_1(level, fmt, args...) \ - do { \ - if (level <= debug_threads) \ - trace_vdebug ((fmt), ##args); \ - } while (0) - -#else - -#define trace_debug_1(level, fmt, args...) \ - do { \ - if (level <= debug_threads) \ - { \ - debug_printf ((fmt), ##args); \ - debug_printf ("\n"); \ - } \ - } while (0) - -#endif - -#define trace_debug(FMT, args...) \ - trace_debug_1 (1, FMT, ##args) - -/* Prefix exported symbols, for good citizenship. All the symbols - that need exporting are defined in this module. Note that all - these symbols must be tagged with IP_AGENT_EXPORT_*. */ -#ifdef IN_PROCESS_AGENT -# define gdb_tp_heap_buffer IPA_SYM_EXPORTED_NAME (gdb_tp_heap_buffer) -# define gdb_jump_pad_buffer IPA_SYM_EXPORTED_NAME (gdb_jump_pad_buffer) -# define gdb_jump_pad_buffer_end IPA_SYM_EXPORTED_NAME (gdb_jump_pad_buffer_end) -# define gdb_trampoline_buffer IPA_SYM_EXPORTED_NAME (gdb_trampoline_buffer) -# define gdb_trampoline_buffer_end IPA_SYM_EXPORTED_NAME (gdb_trampoline_buffer_end) -# define gdb_trampoline_buffer_error IPA_SYM_EXPORTED_NAME (gdb_trampoline_buffer_error) -# define collecting IPA_SYM_EXPORTED_NAME (collecting) -# define gdb_collect_ptr IPA_SYM_EXPORTED_NAME (gdb_collect_ptr) -# define stop_tracing IPA_SYM_EXPORTED_NAME (stop_tracing) -# define flush_trace_buffer IPA_SYM_EXPORTED_NAME (flush_trace_buffer) -# define about_to_request_buffer_space IPA_SYM_EXPORTED_NAME (about_to_request_buffer_space) -# define trace_buffer_is_full IPA_SYM_EXPORTED_NAME (trace_buffer_is_full) -# define stopping_tracepoint IPA_SYM_EXPORTED_NAME (stopping_tracepoint) -# define expr_eval_result IPA_SYM_EXPORTED_NAME (expr_eval_result) -# define error_tracepoint IPA_SYM_EXPORTED_NAME (error_tracepoint) -# define tracepoints IPA_SYM_EXPORTED_NAME (tracepoints) -# define tracing IPA_SYM_EXPORTED_NAME (tracing) -# define trace_buffer_ctrl IPA_SYM_EXPORTED_NAME (trace_buffer_ctrl) -# define trace_buffer_ctrl_curr IPA_SYM_EXPORTED_NAME (trace_buffer_ctrl_curr) -# define trace_buffer_lo IPA_SYM_EXPORTED_NAME (trace_buffer_lo) -# define trace_buffer_hi IPA_SYM_EXPORTED_NAME (trace_buffer_hi) -# define traceframe_read_count IPA_SYM_EXPORTED_NAME (traceframe_read_count) -# define traceframe_write_count IPA_SYM_EXPORTED_NAME (traceframe_write_count) -# define traceframes_created IPA_SYM_EXPORTED_NAME (traceframes_created) -# define trace_state_variables IPA_SYM_EXPORTED_NAME (trace_state_variables) -# define get_raw_reg_ptr IPA_SYM_EXPORTED_NAME (get_raw_reg_ptr) -# define get_trace_state_variable_value_ptr \ - IPA_SYM_EXPORTED_NAME (get_trace_state_variable_value_ptr) -# define set_trace_state_variable_value_ptr \ - IPA_SYM_EXPORTED_NAME (set_trace_state_variable_value_ptr) -# define ust_loaded IPA_SYM_EXPORTED_NAME (ust_loaded) -# define helper_thread_id IPA_SYM_EXPORTED_NAME (helper_thread_id) -# define cmd_buf IPA_SYM_EXPORTED_NAME (cmd_buf) -# define ipa_tdesc_idx IPA_SYM_EXPORTED_NAME (ipa_tdesc_idx) -#endif - -#ifndef IN_PROCESS_AGENT - -/* Addresses of in-process agent's symbols GDBserver cares about. */ - -struct ipa_sym_addresses -{ - CORE_ADDR addr_gdb_tp_heap_buffer; - CORE_ADDR addr_gdb_jump_pad_buffer; - CORE_ADDR addr_gdb_jump_pad_buffer_end; - CORE_ADDR addr_gdb_trampoline_buffer; - CORE_ADDR addr_gdb_trampoline_buffer_end; - CORE_ADDR addr_gdb_trampoline_buffer_error; - CORE_ADDR addr_collecting; - CORE_ADDR addr_gdb_collect_ptr; - CORE_ADDR addr_stop_tracing; - CORE_ADDR addr_flush_trace_buffer; - CORE_ADDR addr_about_to_request_buffer_space; - CORE_ADDR addr_trace_buffer_is_full; - CORE_ADDR addr_stopping_tracepoint; - CORE_ADDR addr_expr_eval_result; - CORE_ADDR addr_error_tracepoint; - CORE_ADDR addr_tracepoints; - CORE_ADDR addr_tracing; - CORE_ADDR addr_trace_buffer_ctrl; - CORE_ADDR addr_trace_buffer_ctrl_curr; - CORE_ADDR addr_trace_buffer_lo; - CORE_ADDR addr_trace_buffer_hi; - CORE_ADDR addr_traceframe_read_count; - CORE_ADDR addr_traceframe_write_count; - CORE_ADDR addr_traceframes_created; - CORE_ADDR addr_trace_state_variables; - CORE_ADDR addr_get_raw_reg_ptr; - CORE_ADDR addr_get_trace_state_variable_value_ptr; - CORE_ADDR addr_set_trace_state_variable_value_ptr; - CORE_ADDR addr_ust_loaded; - CORE_ADDR addr_ipa_tdesc_idx; -}; - -static struct -{ - const char *name; - int offset; -} symbol_list[] = { - IPA_SYM(gdb_tp_heap_buffer), - IPA_SYM(gdb_jump_pad_buffer), - IPA_SYM(gdb_jump_pad_buffer_end), - IPA_SYM(gdb_trampoline_buffer), - IPA_SYM(gdb_trampoline_buffer_end), - IPA_SYM(gdb_trampoline_buffer_error), - IPA_SYM(collecting), - IPA_SYM(gdb_collect_ptr), - IPA_SYM(stop_tracing), - IPA_SYM(flush_trace_buffer), - IPA_SYM(about_to_request_buffer_space), - IPA_SYM(trace_buffer_is_full), - IPA_SYM(stopping_tracepoint), - IPA_SYM(expr_eval_result), - IPA_SYM(error_tracepoint), - IPA_SYM(tracepoints), - IPA_SYM(tracing), - IPA_SYM(trace_buffer_ctrl), - IPA_SYM(trace_buffer_ctrl_curr), - IPA_SYM(trace_buffer_lo), - IPA_SYM(trace_buffer_hi), - IPA_SYM(traceframe_read_count), - IPA_SYM(traceframe_write_count), - IPA_SYM(traceframes_created), - IPA_SYM(trace_state_variables), - IPA_SYM(get_raw_reg_ptr), - IPA_SYM(get_trace_state_variable_value_ptr), - IPA_SYM(set_trace_state_variable_value_ptr), - IPA_SYM(ust_loaded), - IPA_SYM(ipa_tdesc_idx), -}; - -static struct ipa_sym_addresses ipa_sym_addrs; - -static int read_inferior_integer (CORE_ADDR symaddr, int *val); - -/* Returns true if both the in-process agent library and the static - tracepoints libraries are loaded in the inferior, and agent has - capability on static tracepoints. */ - -static int -in_process_agent_supports_ust (void) -{ - int loaded = 0; - - if (!agent_loaded_p ()) - { - warning ("In-process agent not loaded"); - return 0; - } - - if (agent_capability_check (AGENT_CAPA_STATIC_TRACE)) - { - /* Agent understands static tracepoint, then check whether UST is in - fact loaded in the inferior. */ - if (read_inferior_integer (ipa_sym_addrs.addr_ust_loaded, &loaded)) - { - warning ("Error reading ust_loaded in lib"); - return 0; - } - - return loaded; - } - else - return 0; -} - -static void -write_e_ipa_not_loaded (char *buffer) -{ - sprintf (buffer, - "E.In-process agent library not loaded in process. " - "Fast and static tracepoints unavailable."); -} - -/* Write an error to BUFFER indicating that UST isn't loaded in the - inferior. */ - -static void -write_e_ust_not_loaded (char *buffer) -{ -#ifdef HAVE_UST - sprintf (buffer, - "E.UST library not loaded in process. " - "Static tracepoints unavailable."); -#else - sprintf (buffer, "E.GDBserver was built without static tracepoints support"); -#endif -} - -/* If the in-process agent library isn't loaded in the inferior, write - an error to BUFFER, and return 1. Otherwise, return 0. */ - -static int -maybe_write_ipa_not_loaded (char *buffer) -{ - if (!agent_loaded_p ()) - { - write_e_ipa_not_loaded (buffer); - return 1; - } - return 0; -} - -/* If the in-process agent library and the ust (static tracepoints) - library aren't loaded in the inferior, write an error to BUFFER, - and return 1. Otherwise, return 0. */ - -static int -maybe_write_ipa_ust_not_loaded (char *buffer) -{ - if (!agent_loaded_p ()) - { - write_e_ipa_not_loaded (buffer); - return 1; - } - else if (!in_process_agent_supports_ust ()) - { - write_e_ust_not_loaded (buffer); - return 1; - } - return 0; -} - -/* Cache all future symbols that the tracepoints module might request. - We can not request symbols at arbitrary states in the remote - protocol, only when the client tells us that new symbols are - available. So when we load the in-process library, make sure to - check the entire list. */ - -void -tracepoint_look_up_symbols (void) -{ - int i; - - if (agent_loaded_p ()) - return; - - for (i = 0; i < sizeof (symbol_list) / sizeof (symbol_list[0]); i++) - { - CORE_ADDR *addrp = - (CORE_ADDR *) ((char *) &ipa_sym_addrs + symbol_list[i].offset); - - if (look_up_one_symbol (symbol_list[i].name, addrp, 1) == 0) - { - if (debug_threads) - debug_printf ("symbol `%s' not found\n", symbol_list[i].name); - return; - } - } - - agent_look_up_symbols (NULL); -} - -#endif - -/* GDBserver places a breakpoint on the IPA's version (which is a nop) - of the "stop_tracing" function. When this breakpoint is hit, - tracing stopped in the IPA for some reason. E.g., due to - tracepoint reaching the pass count, hitting conditional expression - evaluation error, etc. - - The IPA's trace buffer is never in circular tracing mode: instead, - GDBserver's is, and whenever the in-process buffer fills, it calls - "flush_trace_buffer", which triggers an internal breakpoint. - GDBserver reacts to this breakpoint by pulling the meanwhile - collected data. Old frames discarding is always handled on the - GDBserver side. */ - -#ifdef IN_PROCESS_AGENT -int -read_inferior_memory (CORE_ADDR memaddr, unsigned char *myaddr, int len) -{ - memcpy (myaddr, (void *) (uintptr_t) memaddr, len); - return 0; -} - -/* Call this in the functions where GDBserver places a breakpoint, so - that the compiler doesn't try to be clever and skip calling the - function at all. This is necessary, even if we tell the compiler - to not inline said functions. */ - -#if defined(__GNUC__) -# define UNKNOWN_SIDE_EFFECTS() asm ("") -#else -# define UNKNOWN_SIDE_EFFECTS() do {} while (0) -#endif - -IP_AGENT_EXPORT_FUNC void -stop_tracing (void) -{ - /* GDBserver places breakpoint here. */ - UNKNOWN_SIDE_EFFECTS(); -} - -IP_AGENT_EXPORT_FUNC void -flush_trace_buffer (void) -{ - /* GDBserver places breakpoint here. */ - UNKNOWN_SIDE_EFFECTS(); -} - -#endif - -#ifndef IN_PROCESS_AGENT -static int -tracepoint_handler (CORE_ADDR address) -{ - trace_debug ("tracepoint_handler: tracepoint at 0x%s hit", - paddress (address)); - return 0; -} - -/* Breakpoint at "stop_tracing" in the inferior lib. */ -struct breakpoint *stop_tracing_bkpt; -static int stop_tracing_handler (CORE_ADDR); - -/* Breakpoint at "flush_trace_buffer" in the inferior lib. */ -struct breakpoint *flush_trace_buffer_bkpt; -static int flush_trace_buffer_handler (CORE_ADDR); - -static void download_trace_state_variables (void); -static void upload_fast_traceframes (void); - -static int run_inferior_command (char *cmd, int len); - -static int -read_inferior_integer (CORE_ADDR symaddr, int *val) -{ - return read_inferior_memory (symaddr, (unsigned char *) val, - sizeof (*val)); -} - -struct tracepoint; -static int tracepoint_send_agent (struct tracepoint *tpoint); - -static int -read_inferior_uinteger (CORE_ADDR symaddr, unsigned int *val) -{ - return read_inferior_memory (symaddr, (unsigned char *) val, - sizeof (*val)); -} - -static int -read_inferior_data_pointer (CORE_ADDR symaddr, CORE_ADDR *val) -{ - void *pval = (void *) (uintptr_t) val; - int ret; - - ret = read_inferior_memory (symaddr, (unsigned char *) &pval, sizeof (pval)); - *val = (uintptr_t) pval; - return ret; -} - -static int -write_inferior_data_pointer (CORE_ADDR symaddr, CORE_ADDR val) -{ - void *pval = (void *) (uintptr_t) val; - return target_write_memory (symaddr, - (unsigned char *) &pval, sizeof (pval)); -} - -static int -write_inferior_integer (CORE_ADDR symaddr, int val) -{ - return target_write_memory (symaddr, (unsigned char *) &val, sizeof (val)); -} - -static int -write_inferior_int8 (CORE_ADDR symaddr, int8_t val) -{ - return target_write_memory (symaddr, (unsigned char *) &val, sizeof (val)); -} - -static int -write_inferior_uinteger (CORE_ADDR symaddr, unsigned int val) -{ - return target_write_memory (symaddr, (unsigned char *) &val, sizeof (val)); -} - -static CORE_ADDR target_malloc (ULONGEST size); - -#define COPY_FIELD_TO_BUF(BUF, OBJ, FIELD) \ - do { \ - memcpy (BUF, &(OBJ)->FIELD, sizeof ((OBJ)->FIELD)); \ - BUF += sizeof ((OBJ)->FIELD); \ - } while (0) - -#endif - -/* Base action. Concrete actions inherit this. */ - -struct tracepoint_action -{ - char type; -}; - -/* An 'M' (collect memory) action. */ -struct collect_memory_action -{ - struct tracepoint_action base; - - ULONGEST addr; - ULONGEST len; - int32_t basereg; -}; - -/* An 'R' (collect registers) action. */ - -struct collect_registers_action -{ - struct tracepoint_action base; -}; - -/* An 'X' (evaluate expression) action. */ - -struct eval_expr_action -{ - struct tracepoint_action base; - - struct agent_expr *expr; -}; - -/* An 'L' (collect static trace data) action. */ -struct collect_static_trace_data_action -{ - struct tracepoint_action base; -}; - -#ifndef IN_PROCESS_AGENT -static CORE_ADDR -m_tracepoint_action_download (const struct tracepoint_action *action) -{ - CORE_ADDR ipa_action = target_malloc (sizeof (struct collect_memory_action)); - - target_write_memory (ipa_action, (unsigned char *) action, - sizeof (struct collect_memory_action)); - - return ipa_action; -} -static char * -m_tracepoint_action_send (char *buffer, const struct tracepoint_action *action) -{ - struct collect_memory_action *maction - = (struct collect_memory_action *) action; - - COPY_FIELD_TO_BUF (buffer, maction, addr); - COPY_FIELD_TO_BUF (buffer, maction, len); - COPY_FIELD_TO_BUF (buffer, maction, basereg); - - return buffer; -} - -static CORE_ADDR -r_tracepoint_action_download (const struct tracepoint_action *action) -{ - CORE_ADDR ipa_action = target_malloc (sizeof (struct collect_registers_action)); - - target_write_memory (ipa_action, (unsigned char *) action, - sizeof (struct collect_registers_action)); - - return ipa_action; -} - -static char * -r_tracepoint_action_send (char *buffer, const struct tracepoint_action *action) -{ - return buffer; -} - -static CORE_ADDR download_agent_expr (struct agent_expr *expr); - -static CORE_ADDR -x_tracepoint_action_download (const struct tracepoint_action *action) -{ - CORE_ADDR ipa_action = target_malloc (sizeof (struct eval_expr_action)); - CORE_ADDR expr; - - target_write_memory (ipa_action, (unsigned char *) action, - sizeof (struct eval_expr_action)); - expr = download_agent_expr (((struct eval_expr_action *) action)->expr); - write_inferior_data_pointer (ipa_action - + offsetof (struct eval_expr_action, expr), - expr); - - return ipa_action; -} - -/* Copy agent expression AEXPR to buffer pointed by P. If AEXPR is NULL, - copy 0 to P. Return updated header of buffer. */ - -static char * -agent_expr_send (char *p, const struct agent_expr *aexpr) -{ - /* Copy the length of condition first, and then copy its - content. */ - if (aexpr == NULL) - { - memset (p, 0, 4); - p += 4; - } - else - { - memcpy (p, &aexpr->length, 4); - p +=4; - - memcpy (p, aexpr->bytes, aexpr->length); - p += aexpr->length; - } - return p; -} - -static char * -x_tracepoint_action_send ( char *buffer, const struct tracepoint_action *action) -{ - struct eval_expr_action *eaction = (struct eval_expr_action *) action; - - return agent_expr_send (buffer, eaction->expr); -} - -static CORE_ADDR -l_tracepoint_action_download (const struct tracepoint_action *action) -{ - CORE_ADDR ipa_action - = target_malloc (sizeof (struct collect_static_trace_data_action)); - - target_write_memory (ipa_action, (unsigned char *) action, - sizeof (struct collect_static_trace_data_action)); - - return ipa_action; -} - -static char * -l_tracepoint_action_send (char *buffer, const struct tracepoint_action *action) -{ - return buffer; -} - -static char * -tracepoint_action_send (char *buffer, const struct tracepoint_action *action) -{ - switch (action->type) - { - case 'M': - return m_tracepoint_action_send (buffer, action); - case 'R': - return r_tracepoint_action_send (buffer, action); - case 'X': - return x_tracepoint_action_send (buffer, action); - case 'L': - return l_tracepoint_action_send (buffer, action); - } - error ("Unknown trace action '%c'.", action->type); -} - -static CORE_ADDR -tracepoint_action_download (const struct tracepoint_action *action) -{ - switch (action->type) - { - case 'M': - return m_tracepoint_action_download (action); - case 'R': - return r_tracepoint_action_download (action); - case 'X': - return x_tracepoint_action_download (action); - case 'L': - return l_tracepoint_action_download (action); - } - error ("Unknown trace action '%c'.", action->type); -} -#endif - -/* This structure describes a piece of the source-level definition of - the tracepoint. The contents are not interpreted by the target, - but preserved verbatim for uploading upon reconnection. */ - -struct source_string -{ - /* The type of string, such as "cond" for a conditional. */ - char *type; - - /* The source-level string itself. For the sake of target - debugging, we store it in plaintext, even though it is always - transmitted in hex. */ - char *str; - - /* Link to the next one in the list. We link them in the order - received, in case some make up an ordered list of commands or - some such. */ - struct source_string *next; -}; - -enum tracepoint_type -{ - /* Trap based tracepoint. */ - trap_tracepoint, - - /* A fast tracepoint implemented with a jump instead of a trap. */ - fast_tracepoint, - - /* A static tracepoint, implemented by a program call into a tracing - library. */ - static_tracepoint -}; - -struct tracepoint_hit_ctx; - -typedef enum eval_result_type (*condfn) (unsigned char *, - ULONGEST *); - -/* The definition of a tracepoint. */ - -/* Tracepoints may have multiple locations, each at a different - address. This can occur with optimizations, template - instantiation, etc. Since the locations may be in different - scopes, the conditions and actions may be different for each - location. Our target version of tracepoints is more like GDB's - notion of "breakpoint locations", but we have almost nothing that - is not per-location, so we bother having two kinds of objects. The - key consequence is that numbers are not unique, and that it takes - both number and address to identify a tracepoint uniquely. */ - -struct tracepoint -{ - /* The number of the tracepoint, as specified by GDB. Several - tracepoint objects here may share a number. */ - uint32_t number; - - /* Address at which the tracepoint is supposed to trigger. Several - tracepoints may share an address. */ - CORE_ADDR address; - - /* Tracepoint type. */ - enum tracepoint_type type; - - /* True if the tracepoint is currently enabled. */ - int8_t enabled; - - /* The number of single steps that will be performed after each - tracepoint hit. */ - uint64_t step_count; - - /* The number of times the tracepoint may be hit before it will - terminate the entire tracing run. */ - uint64_t pass_count; - - /* Pointer to the agent expression that is the tracepoint's - conditional, or NULL if the tracepoint is unconditional. */ - struct agent_expr *cond; - - /* The list of actions to take when the tracepoint triggers. */ - uint32_t numactions; - struct tracepoint_action **actions; - - /* Count of the times we've hit this tracepoint during the run. - Note that while-stepping steps are not counted as "hits". */ - uint64_t hit_count; - - /* Cached sum of the sizes of traceframes created by this point. */ - uint64_t traceframe_usage; - - CORE_ADDR compiled_cond; - - /* Link to the next tracepoint in the list. */ - struct tracepoint *next; - -#ifndef IN_PROCESS_AGENT - /* The list of actions to take when the tracepoint triggers, in - string/packet form. */ - char **actions_str; - - /* The collection of strings that describe the tracepoint as it was - entered into GDB. These are not used by the target, but are - reported back to GDB upon reconnection. */ - struct source_string *source_strings; - - /* The number of bytes displaced by fast tracepoints. It may subsume - multiple instructions, for multi-byte fast tracepoints. This - field is only valid for fast tracepoints. */ - uint32_t orig_size; - - /* Only for fast tracepoints. */ - CORE_ADDR obj_addr_on_target; - - /* Address range where the original instruction under a fast - tracepoint was relocated to. (_end is actually one byte past - the end). */ - CORE_ADDR adjusted_insn_addr; - CORE_ADDR adjusted_insn_addr_end; - - /* The address range of the piece of the jump pad buffer that was - assigned to this fast tracepoint. (_end is actually one byte - past the end).*/ - CORE_ADDR jump_pad; - CORE_ADDR jump_pad_end; - - /* The address range of the piece of the trampoline buffer that was - assigned to this fast tracepoint. (_end is actually one byte - past the end). */ - CORE_ADDR trampoline; - CORE_ADDR trampoline_end; - - /* The list of actions to take while in a stepping loop. These - fields are only valid for patch-based tracepoints. */ - int num_step_actions; - struct tracepoint_action **step_actions; - /* Same, but in string/packet form. */ - char **step_actions_str; - - /* Handle returned by the breakpoint or tracepoint module when we - inserted the trap or jump, or hooked into a static tracepoint. - NULL if we haven't inserted it yet. */ - void *handle; -#endif - -}; - -#ifndef IN_PROCESS_AGENT - -/* Given `while-stepping', a thread may be collecting data for more - than one tracepoint simultaneously. On the other hand, the same - tracepoint with a while-stepping action may be hit by more than one - thread simultaneously (but not quite, each thread could be handling - a different step). Each thread holds a list of these objects, - representing the current step of each while-stepping action being - collected. */ - -struct wstep_state -{ - struct wstep_state *next; - - /* The tracepoint number. */ - int tp_number; - /* The tracepoint's address. */ - CORE_ADDR tp_address; - - /* The number of the current step in this 'while-stepping' - action. */ - long current_step; -}; - -#endif - -EXTERN_C_PUSH - -/* The linked list of all tracepoints. Marked explicitly as used as - the in-process library doesn't use it for the fast tracepoints - support. */ -IP_AGENT_EXPORT_VAR struct tracepoint *tracepoints; - -/* The first tracepoint to exceed its pass count. */ - -IP_AGENT_EXPORT_VAR struct tracepoint *stopping_tracepoint; - -/* True if the trace buffer is full or otherwise no longer usable. */ - -IP_AGENT_EXPORT_VAR int trace_buffer_is_full; - -/* The first error that occurred during expression evaluation. */ - -/* Stored as an int to avoid the IPA ABI being dependent on whatever - the compiler decides to use for the enum's underlying type. Holds - enum eval_result_type values. */ -IP_AGENT_EXPORT_VAR int expr_eval_result = expr_eval_no_error; - -EXTERN_C_POP - -#ifndef IN_PROCESS_AGENT - -/* Pointer to the last tracepoint in the list, new tracepoints are - linked in at the end. */ - -static struct tracepoint *last_tracepoint; - -static const char *eval_result_names[] = - { - "terror:in the attic", /* this should never be reported */ - "terror:empty expression", - "terror:empty stack", - "terror:stack overflow", - "terror:stack underflow", - "terror:unhandled opcode", - "terror:unrecognized opcode", - "terror:divide by zero" - }; - -#endif - -/* The tracepoint in which the error occurred. */ - -EXTERN_C_PUSH -IP_AGENT_EXPORT_VAR struct tracepoint *error_tracepoint; -EXTERN_C_POP - -struct trace_state_variable -{ - /* This is the name of the variable as used in GDB. The target - doesn't use the name, but needs to have it for saving and - reconnection purposes. */ - char *name; - - /* This number identifies the variable uniquely. Numbers may be - assigned either by the target (in the case of builtin variables), - or by GDB, and are presumed unique during the course of a trace - experiment. */ - int number; - - /* The variable's initial value, a 64-bit signed integer always. */ - LONGEST initial_value; - - /* The variable's value, a 64-bit signed integer always. */ - LONGEST value; - - /* Pointer to a getter function, used to supply computed values. */ - LONGEST (*getter) (void); - - /* Link to the next variable. */ - struct trace_state_variable *next; -}; - -/* Linked list of all trace state variables. */ - -#ifdef IN_PROCESS_AGENT -struct trace_state_variable *alloced_trace_state_variables; -#endif - -IP_AGENT_EXPORT_VAR struct trace_state_variable *trace_state_variables; - -/* The results of tracing go into a fixed-size space known as the - "trace buffer". Because usage follows a limited number of - patterns, we manage it ourselves rather than with malloc. Basic - rules are that we create only one trace frame at a time, each is - variable in size, they are never moved once created, and we only - discard if we are doing a circular buffer, and then only the oldest - ones. Each trace frame includes its own size, so we don't need to - link them together, and the trace frame number is relative to the - first one, so we don't need to record numbers. A trace frame also - records the number of the tracepoint that created it. The data - itself is a series of blocks, each introduced by a single character - and with a defined format. Each type of block has enough - type/length info to allow scanners to jump quickly from one block - to the next without reading each byte in the block. */ - -/* Trace buffer management would be simple - advance a free pointer - from beginning to end, then stop - were it not for the circular - buffer option, which is a useful way to prevent a trace run from - stopping prematurely because the buffer filled up. In the circular - case, the location of the first trace frame (trace_buffer_start) - moves as old trace frames are discarded. Also, since we grow trace - frames incrementally as actions are performed, we wrap around to - the beginning of the trace buffer. This is per-block, so each - block within a trace frame remains contiguous. Things get messy - when the wrapped-around trace frame is the one being discarded; the - free space ends up in two parts at opposite ends of the buffer. */ - -#ifndef ATTR_PACKED -# if defined(__GNUC__) -# define ATTR_PACKED __attribute__ ((packed)) -# else -# define ATTR_PACKED /* nothing */ -# endif -#endif - -/* The data collected at a tracepoint hit. This object should be as - small as possible, since there may be a great many of them. We do - not need to keep a frame number, because they are all sequential - and there are no deletions; so the Nth frame in the buffer is - always frame number N. */ - -struct traceframe -{ - /* Number of the tracepoint that collected this traceframe. A value - of 0 indicates the current end of the trace buffer. We make this - a 16-bit field because it's never going to happen that GDB's - numbering of tracepoints reaches 32,000. */ - int tpnum : 16; - - /* The size of the data in this trace frame. We limit this to 32 - bits, even on a 64-bit target, because it's just implausible that - one is validly going to collect 4 gigabytes of data at a single - tracepoint hit. */ - unsigned int data_size : 32; - - /* The base of the trace data, which is contiguous from this point. */ - unsigned char data[0]; - -} ATTR_PACKED; - -/* The size of the EOB marker, in bytes. A traceframe with zeroed - fields (and no data) marks the end of trace data. */ -#define TRACEFRAME_EOB_MARKER_SIZE offsetof (struct traceframe, data) - -/* This flag is true if the trace buffer is circular, meaning that - when it fills, the oldest trace frames are discarded in order to - make room. */ - -#ifndef IN_PROCESS_AGENT -static int circular_trace_buffer; -#endif - -/* Size of the trace buffer. */ - -static LONGEST trace_buffer_size; - -EXTERN_C_PUSH - -/* Pointer to the block of memory that traceframes all go into. */ - -IP_AGENT_EXPORT_VAR unsigned char *trace_buffer_lo; - -/* Pointer to the end of the trace buffer, more precisely to the byte - after the end of the buffer. */ - -IP_AGENT_EXPORT_VAR unsigned char *trace_buffer_hi; - -EXTERN_C_POP - -/* Control structure holding the read/write/etc. pointers into the - trace buffer. We need more than one of these to implement a - transaction-like mechanism to guarantees that both GDBserver and the - in-process agent can try to change the trace buffer - simultaneously. */ - -struct trace_buffer_control -{ - /* Pointer to the first trace frame in the buffer. In the - non-circular case, this is equal to trace_buffer_lo, otherwise it - moves around in the buffer. */ - unsigned char *start; - - /* Pointer to the free part of the trace buffer. Note that we clear - several bytes at and after this pointer, so that traceframe - scans/searches terminate properly. */ - unsigned char *free; - - /* Pointer to the byte after the end of the free part. Note that - this may be smaller than trace_buffer_free in the circular case, - and means that the free part is in two pieces. Initially it is - equal to trace_buffer_hi, then is generally equivalent to - trace_buffer_start. */ - unsigned char *end_free; - - /* Pointer to the wraparound. If not equal to trace_buffer_hi, then - this is the point at which the trace data breaks, and resumes at - trace_buffer_lo. */ - unsigned char *wrap; -}; - -/* Same as above, to be used by GDBserver when updating the in-process - agent. */ -struct ipa_trace_buffer_control -{ - uintptr_t start; - uintptr_t free; - uintptr_t end_free; - uintptr_t wrap; -}; - - -/* We have possibly both GDBserver and an inferior thread accessing - the same IPA trace buffer memory. The IPA is the producer (tries - to put new frames in the buffer), while GDBserver occasionally - consumes them, that is, flushes the IPA's buffer into its own - buffer. Both sides need to update the trace buffer control - pointers (current head, tail, etc.). We can't use a global lock to - synchronize the accesses, as otherwise we could deadlock GDBserver - (if the thread holding the lock stops for a signal, say). So - instead of that, we use a transaction scheme where GDBserver writes - always prevail over the IPAs writes, and, we have the IPA detect - the commit failure/overwrite, and retry the whole attempt. This is - mainly implemented by having a global token object that represents - who wrote last to the buffer control structure. We need to freeze - any inferior writing to the buffer while GDBserver touches memory, - so that the inferior can correctly detect that GDBserver had been - there, otherwise, it could mistakingly think its commit was - successful; that's implemented by simply having GDBserver set a - breakpoint the inferior hits if it is the critical region. - - There are three cycling trace buffer control structure copies - (buffer head, tail, etc.), with the token object including an index - indicating which is current live copy. The IPA tentatively builds - an updated copy in a non-current control structure, while GDBserver - always clobbers the current version directly. The IPA then tries - to atomically "commit" its version; if GDBserver clobbered the - structure meanwhile, that will fail, and the IPA restarts the - allocation process. - - Listing the step in further detail, we have: - - In-process agent (producer): - - - passes by `about_to_request_buffer_space' breakpoint/lock - - - reads current token, extracts current trace buffer control index, - and starts tentatively updating the rightmost one (0->1, 1->2, - 2->0). Note that only one inferior thread is executing this code - at any given time, due to an outer lock in the jump pads. - - - updates counters, and tries to commit the token. - - - passes by second `about_to_request_buffer_space' breakpoint/lock, - leaving the sync region. - - - checks if the update was effective. - - - if trace buffer was found full, hits flush_trace_buffer - breakpoint, and restarts later afterwards. - - GDBserver (consumer): - - - sets `about_to_request_buffer_space' breakpoint/lock. - - - updates the token unconditionally, using the current buffer - control index, since it knows that the IP agent always writes to - the rightmost, and due to the breakpoint, at most one IP thread - can try to update the trace buffer concurrently to GDBserver, so - there will be no danger of trace buffer control index wrap making - the IPA write to the same index as GDBserver. - - - flushes the IP agent's trace buffer completely, and updates the - current trace buffer control structure. GDBserver *always* wins. - - - removes the `about_to_request_buffer_space' breakpoint. - -The token is stored in the `trace_buffer_ctrl_curr' variable. -Internally, it's bits are defined as: - - |-------------+-----+-------------+--------+-------------+--------------| - | Bit offsets | 31 | 30 - 20 | 19 | 18-8 | 7-0 | - |-------------+-----+-------------+--------+-------------+--------------| - | What | GSB | PC (11-bit) | unused | CC (11-bit) | TBCI (8-bit) | - |-------------+-----+-------------+--------+-------------+--------------| - - GSB - GDBserver Stamp Bit - PC - Previous Counter - CC - Current Counter - TBCI - Trace Buffer Control Index - - -An IPA update of `trace_buffer_ctrl_curr' does: - - - read CC from the current token, save as PC. - - updates pointers - - atomically tries to write PC+1,CC - -A GDBserver update of `trace_buffer_ctrl_curr' does: - - - reads PC and CC from the current token. - - updates pointers - - writes GSB,PC,CC -*/ - -/* These are the bits of `trace_buffer_ctrl_curr' that are reserved - for the counters described below. The cleared bits are used to - hold the index of the items of the `trace_buffer_ctrl' array that - is "current". */ -#define GDBSERVER_FLUSH_COUNT_MASK 0xfffffff0 - -/* `trace_buffer_ctrl_curr' contains two counters. The `previous' - counter, and the `current' counter. */ - -#define GDBSERVER_FLUSH_COUNT_MASK_PREV 0x7ff00000 -#define GDBSERVER_FLUSH_COUNT_MASK_CURR 0x0007ff00 - -/* When GDBserver update the IP agent's `trace_buffer_ctrl_curr', it - always stamps this bit as set. */ -#define GDBSERVER_UPDATED_FLUSH_COUNT_BIT 0x80000000 - -#ifdef IN_PROCESS_AGENT -IP_AGENT_EXPORT_VAR struct trace_buffer_control trace_buffer_ctrl[3]; -IP_AGENT_EXPORT_VAR unsigned int trace_buffer_ctrl_curr; - -# define TRACE_BUFFER_CTRL_CURR \ - (trace_buffer_ctrl_curr & ~GDBSERVER_FLUSH_COUNT_MASK) - -#else - -/* The GDBserver side agent only needs one instance of this object, as - it doesn't need to sync with itself. Define it as array anyway so - that the rest of the code base doesn't need to care for the - difference. */ -struct trace_buffer_control trace_buffer_ctrl[1]; -# define TRACE_BUFFER_CTRL_CURR 0 -#endif - -/* These are convenience macros used to access the current trace - buffer control in effect. */ -#define trace_buffer_start (trace_buffer_ctrl[TRACE_BUFFER_CTRL_CURR].start) -#define trace_buffer_free (trace_buffer_ctrl[TRACE_BUFFER_CTRL_CURR].free) -#define trace_buffer_end_free \ - (trace_buffer_ctrl[TRACE_BUFFER_CTRL_CURR].end_free) -#define trace_buffer_wrap (trace_buffer_ctrl[TRACE_BUFFER_CTRL_CURR].wrap) - - -/* Macro that returns a pointer to the first traceframe in the buffer. */ - -#define FIRST_TRACEFRAME() ((struct traceframe *) trace_buffer_start) - -/* Macro that returns a pointer to the next traceframe in the buffer. - If the computed location is beyond the wraparound point, subtract - the offset of the wraparound. */ - -#define NEXT_TRACEFRAME_1(TF) \ - (((unsigned char *) (TF)) + sizeof (struct traceframe) + (TF)->data_size) - -#define NEXT_TRACEFRAME(TF) \ - ((struct traceframe *) (NEXT_TRACEFRAME_1 (TF) \ - - ((NEXT_TRACEFRAME_1 (TF) >= trace_buffer_wrap) \ - ? (trace_buffer_wrap - trace_buffer_lo) \ - : 0))) - -/* The difference between these counters represents the total number - of complete traceframes present in the trace buffer. The IP agent - writes to the write count, GDBserver writes to read count. */ - -IP_AGENT_EXPORT_VAR unsigned int traceframe_write_count; -IP_AGENT_EXPORT_VAR unsigned int traceframe_read_count; - -/* Convenience macro. */ - -#define traceframe_count \ - ((unsigned int) (traceframe_write_count - traceframe_read_count)) - -/* The count of all traceframes created in the current run, including - ones that were discarded to make room. */ - -IP_AGENT_EXPORT_VAR int traceframes_created; - -#ifndef IN_PROCESS_AGENT - -/* Read-only regions are address ranges whose contents don't change, - and so can be read from target memory even while looking at a trace - frame. Without these, disassembly for instance will likely fail, - because the program code is not usually collected into a trace - frame. This data structure does not need to be very complicated or - particularly efficient, it's only going to be used occasionally, - and only by some commands. */ - -struct readonly_region -{ - /* The bounds of the region. */ - CORE_ADDR start, end; - - /* Link to the next one. */ - struct readonly_region *next; -}; - -/* Linked list of readonly regions. This list stays in effect from - one tstart to the next. */ - -static struct readonly_region *readonly_regions; - -#endif - -/* The global that controls tracing overall. */ - -IP_AGENT_EXPORT_VAR int tracing; - -#ifndef IN_PROCESS_AGENT - -/* Controls whether tracing should continue after GDB disconnects. */ - -int disconnected_tracing; - -/* The reason for the last tracing run to have stopped. We initialize - to a distinct string so that GDB can distinguish between "stopped - after running" and "stopped because never run" cases. */ - -static const char *tracing_stop_reason = "tnotrun"; - -static int tracing_stop_tpnum; - -/* 64-bit timestamps for the trace run's start and finish, expressed - in microseconds from the Unix epoch. */ - -LONGEST tracing_start_time; -LONGEST tracing_stop_time; - -/* The (optional) user-supplied name of the user that started the run. - This is an arbitrary string, and may be NULL. */ - -char *tracing_user_name; - -/* Optional user-supplied text describing the run. This is - an arbitrary string, and may be NULL. */ - -char *tracing_notes; - -/* Optional user-supplied text explaining a tstop command. This is an - arbitrary string, and may be NULL. */ - -char *tracing_stop_note; - -#endif - -/* Functions local to this file. */ - -/* Base "class" for tracepoint type specific data to be passed down to - collect_data_at_tracepoint. */ -struct tracepoint_hit_ctx -{ - enum tracepoint_type type; -}; - -#ifdef IN_PROCESS_AGENT - -/* Fast/jump tracepoint specific data to be passed down to - collect_data_at_tracepoint. */ -struct fast_tracepoint_ctx -{ - struct tracepoint_hit_ctx base; - - struct regcache regcache; - int regcache_initted; - unsigned char *regspace; - - unsigned char *regs; - struct tracepoint *tpoint; -}; - -/* Static tracepoint specific data to be passed down to - collect_data_at_tracepoint. */ -struct static_tracepoint_ctx -{ - struct tracepoint_hit_ctx base; - - /* The regcache corresponding to the registers state at the time of - the tracepoint hit. Initialized lazily, from REGS. */ - struct regcache regcache; - int regcache_initted; - - /* The buffer space REGCACHE above uses. We use a separate buffer - instead of letting the regcache malloc for both signal safety and - performance reasons; this is allocated on the stack instead. */ - unsigned char *regspace; - - /* The register buffer as passed on by lttng/ust. */ - struct registers *regs; - - /* The "printf" formatter and the args the user passed to the marker - call. We use this to be able to collect "static trace data" - ($_sdata). */ - const char *fmt; - va_list *args; - - /* The GDB tracepoint matching the probed marker that was "hit". */ - struct tracepoint *tpoint; -}; - -#else - -/* Static tracepoint specific data to be passed down to - collect_data_at_tracepoint. */ -struct trap_tracepoint_ctx -{ - struct tracepoint_hit_ctx base; - - struct regcache *regcache; -}; - -#endif - -#ifndef IN_PROCESS_AGENT -static CORE_ADDR traceframe_get_pc (struct traceframe *tframe); -static int traceframe_read_tsv (int num, LONGEST *val); -#endif - -static int condition_true_at_tracepoint (struct tracepoint_hit_ctx *ctx, - struct tracepoint *tpoint); - -#ifndef IN_PROCESS_AGENT -static void clear_readonly_regions (void); -static void clear_installed_tracepoints (void); -#endif - -static void collect_data_at_tracepoint (struct tracepoint_hit_ctx *ctx, - CORE_ADDR stop_pc, - struct tracepoint *tpoint); -#ifndef IN_PROCESS_AGENT -static void collect_data_at_step (struct tracepoint_hit_ctx *ctx, - CORE_ADDR stop_pc, - struct tracepoint *tpoint, int current_step); -static void compile_tracepoint_condition (struct tracepoint *tpoint, - CORE_ADDR *jump_entry); -#endif -static void do_action_at_tracepoint (struct tracepoint_hit_ctx *ctx, - CORE_ADDR stop_pc, - struct tracepoint *tpoint, - struct traceframe *tframe, - struct tracepoint_action *taction); - -#ifndef IN_PROCESS_AGENT -static struct tracepoint *fast_tracepoint_from_ipa_tpoint_address (CORE_ADDR); - -static void install_tracepoint (struct tracepoint *, char *own_buf); -static void download_tracepoint (struct tracepoint *); -static int install_fast_tracepoint (struct tracepoint *, char *errbuf); -static void clone_fast_tracepoint (struct tracepoint *to, - const struct tracepoint *from); -#endif - -static LONGEST get_timestamp (void); - -#if defined(__GNUC__) -# define memory_barrier() asm volatile ("" : : : "memory") -#else -# define memory_barrier() do {} while (0) -#endif - -/* We only build the IPA if this builtin is supported, and there are - no uses of this in GDBserver itself, so we're safe in defining this - unconditionally. */ -#define cmpxchg(mem, oldval, newval) \ - __sync_val_compare_and_swap (mem, oldval, newval) - -/* Record that an error occurred during expression evaluation. */ - -static void -record_tracepoint_error (struct tracepoint *tpoint, const char *which, - enum eval_result_type rtype) -{ - trace_debug ("Tracepoint %d at %s %s eval reports error %d", - tpoint->number, paddress (tpoint->address), which, rtype); - -#ifdef IN_PROCESS_AGENT - /* Only record the first error we get. */ - if (cmpxchg (&expr_eval_result, - expr_eval_no_error, - rtype) != expr_eval_no_error) - return; -#else - if (expr_eval_result != expr_eval_no_error) - return; -#endif - - error_tracepoint = tpoint; -} - -/* Trace buffer management. */ - -static void -clear_trace_buffer (void) -{ - trace_buffer_start = trace_buffer_lo; - trace_buffer_free = trace_buffer_lo; - trace_buffer_end_free = trace_buffer_hi; - trace_buffer_wrap = trace_buffer_hi; - /* A traceframe with zeroed fields marks the end of trace data. */ - ((struct traceframe *) trace_buffer_free)->tpnum = 0; - ((struct traceframe *) trace_buffer_free)->data_size = 0; - traceframe_read_count = traceframe_write_count = 0; - traceframes_created = 0; -} - -#ifndef IN_PROCESS_AGENT - -static void -clear_inferior_trace_buffer (void) -{ - CORE_ADDR ipa_trace_buffer_lo; - CORE_ADDR ipa_trace_buffer_hi; - struct traceframe ipa_traceframe = { 0 }; - struct ipa_trace_buffer_control ipa_trace_buffer_ctrl; - - read_inferior_data_pointer (ipa_sym_addrs.addr_trace_buffer_lo, - &ipa_trace_buffer_lo); - read_inferior_data_pointer (ipa_sym_addrs.addr_trace_buffer_hi, - &ipa_trace_buffer_hi); - - ipa_trace_buffer_ctrl.start = ipa_trace_buffer_lo; - ipa_trace_buffer_ctrl.free = ipa_trace_buffer_lo; - ipa_trace_buffer_ctrl.end_free = ipa_trace_buffer_hi; - ipa_trace_buffer_ctrl.wrap = ipa_trace_buffer_hi; - - /* A traceframe with zeroed fields marks the end of trace data. */ - target_write_memory (ipa_sym_addrs.addr_trace_buffer_ctrl, - (unsigned char *) &ipa_trace_buffer_ctrl, - sizeof (ipa_trace_buffer_ctrl)); - - write_inferior_uinteger (ipa_sym_addrs.addr_trace_buffer_ctrl_curr, 0); - - /* A traceframe with zeroed fields marks the end of trace data. */ - target_write_memory (ipa_trace_buffer_lo, - (unsigned char *) &ipa_traceframe, - sizeof (ipa_traceframe)); - - write_inferior_uinteger (ipa_sym_addrs.addr_traceframe_write_count, 0); - write_inferior_uinteger (ipa_sym_addrs.addr_traceframe_read_count, 0); - write_inferior_integer (ipa_sym_addrs.addr_traceframes_created, 0); -} - -#endif - -static void -init_trace_buffer (LONGEST bufsize) -{ - size_t alloc_size; - - trace_buffer_size = bufsize; - - /* Make sure to internally allocate at least space for the EOB - marker. */ - alloc_size = (bufsize < TRACEFRAME_EOB_MARKER_SIZE - ? TRACEFRAME_EOB_MARKER_SIZE : bufsize); - trace_buffer_lo = (unsigned char *) xrealloc (trace_buffer_lo, alloc_size); - - trace_buffer_hi = trace_buffer_lo + trace_buffer_size; - - clear_trace_buffer (); -} - -#ifdef IN_PROCESS_AGENT - -IP_AGENT_EXPORT_FUNC void -about_to_request_buffer_space (void) -{ - /* GDBserver places breakpoint here while it goes about to flush - data at random times. */ - UNKNOWN_SIDE_EFFECTS(); -} - -#endif - -/* Carve out a piece of the trace buffer, returning NULL in case of - failure. */ - -static void * -trace_buffer_alloc (size_t amt) -{ - unsigned char *rslt; - struct trace_buffer_control *tbctrl; - unsigned int curr; -#ifdef IN_PROCESS_AGENT - unsigned int prev, prev_filtered; - unsigned int commit_count; - unsigned int commit; - unsigned int readout; -#else - struct traceframe *oldest; - unsigned char *new_start; -#endif - - trace_debug ("Want to allocate %ld+%ld bytes in trace buffer", - (long) amt, (long) sizeof (struct traceframe)); - - /* Account for the EOB marker. */ - amt += TRACEFRAME_EOB_MARKER_SIZE; - -#ifdef IN_PROCESS_AGENT - again: - memory_barrier (); - - /* Read the current token and extract the index to try to write to, - storing it in CURR. */ - prev = trace_buffer_ctrl_curr; - prev_filtered = prev & ~GDBSERVER_FLUSH_COUNT_MASK; - curr = prev_filtered + 1; - if (curr > 2) - curr = 0; - - about_to_request_buffer_space (); - - /* Start out with a copy of the current state. GDBserver may be - midway writing to the PREV_FILTERED TBC, but, that's OK, we won't - be able to commit anyway if that happens. */ - trace_buffer_ctrl[curr] - = trace_buffer_ctrl[prev_filtered]; - trace_debug ("trying curr=%u", curr); -#else - /* The GDBserver's agent doesn't need all that syncing, and always - updates TCB 0 (there's only one, mind you). */ - curr = 0; -#endif - tbctrl = &trace_buffer_ctrl[curr]; - - /* Offsets are easier to grok for debugging than raw addresses, - especially for the small trace buffer sizes that are useful for - testing. */ - trace_debug ("Trace buffer [%d] start=%d free=%d endfree=%d wrap=%d hi=%d", - curr, - (int) (tbctrl->start - trace_buffer_lo), - (int) (tbctrl->free - trace_buffer_lo), - (int) (tbctrl->end_free - trace_buffer_lo), - (int) (tbctrl->wrap - trace_buffer_lo), - (int) (trace_buffer_hi - trace_buffer_lo)); - - /* The algorithm here is to keep trying to get a contiguous block of - the requested size, possibly discarding older traceframes to free - up space. Since free space might come in one or two pieces, - depending on whether discarded traceframes wrapped around at the - high end of the buffer, we test both pieces after each - discard. */ - while (1) - { - /* First, if we have two free parts, try the upper one first. */ - if (tbctrl->end_free < tbctrl->free) - { - if (tbctrl->free + amt <= trace_buffer_hi) - /* We have enough in the upper part. */ - break; - else - { - /* Our high part of free space wasn't enough. Give up - on it for now, set wraparound. We will recover the - space later, if/when the wrapped-around traceframe is - discarded. */ - trace_debug ("Upper part too small, setting wraparound"); - tbctrl->wrap = tbctrl->free; - tbctrl->free = trace_buffer_lo; - } - } - - /* The normal case. */ - if (tbctrl->free + amt <= tbctrl->end_free) - break; - -#ifdef IN_PROCESS_AGENT - /* The IP Agent's buffer is always circular. It isn't used - currently, but `circular_trace_buffer' could represent - GDBserver's mode. If we didn't find space, ask GDBserver to - flush. */ - - flush_trace_buffer (); - memory_barrier (); - if (tracing) - { - trace_debug ("gdbserver flushed buffer, retrying"); - goto again; - } - - /* GDBserver cancelled the tracing. Bail out as well. */ - return NULL; -#else - /* If we're here, then neither part is big enough, and - non-circular trace buffers are now full. */ - if (!circular_trace_buffer) - { - trace_debug ("Not enough space in the trace buffer"); - return NULL; - } - - trace_debug ("Need more space in the trace buffer"); - - /* If we have a circular buffer, we can try discarding the - oldest traceframe and see if that helps. */ - oldest = FIRST_TRACEFRAME (); - if (oldest->tpnum == 0) - { - /* Not good; we have no traceframes to free. Perhaps we're - asking for a block that is larger than the buffer? In - any case, give up. */ - trace_debug ("No traceframes to discard"); - return NULL; - } - - /* We don't run this code in the in-process agent currently. - E.g., we could leave the in-process agent in autonomous - circular mode if we only have fast tracepoints. If we do - that, then this bit becomes racy with GDBserver, which also - writes to this counter. */ - --traceframe_write_count; - - new_start = (unsigned char *) NEXT_TRACEFRAME (oldest); - /* If we freed the traceframe that wrapped around, go back - to the non-wrap case. */ - if (new_start < tbctrl->start) - { - trace_debug ("Discarding past the wraparound"); - tbctrl->wrap = trace_buffer_hi; - } - tbctrl->start = new_start; - tbctrl->end_free = tbctrl->start; - - trace_debug ("Discarded a traceframe\n" - "Trace buffer [%d], start=%d free=%d " - "endfree=%d wrap=%d hi=%d", - curr, - (int) (tbctrl->start - trace_buffer_lo), - (int) (tbctrl->free - trace_buffer_lo), - (int) (tbctrl->end_free - trace_buffer_lo), - (int) (tbctrl->wrap - trace_buffer_lo), - (int) (trace_buffer_hi - trace_buffer_lo)); - - /* Now go back around the loop. The discard might have resulted - in either one or two pieces of free space, so we want to try - both before freeing any more traceframes. */ -#endif - } - - /* If we get here, we know we can provide the asked-for space. */ - - rslt = tbctrl->free; - - /* Adjust the request back down, now that we know we have space for - the marker, but don't commit to AMT yet, we may still need to - restart the operation if GDBserver touches the trace buffer - (obviously only important in the in-process agent's version). */ - tbctrl->free += (amt - sizeof (struct traceframe)); - - /* Or not. If GDBserver changed the trace buffer behind our back, - we get to restart a new allocation attempt. */ - -#ifdef IN_PROCESS_AGENT - /* Build the tentative token. */ - commit_count = (((prev & GDBSERVER_FLUSH_COUNT_MASK_CURR) + 0x100) - & GDBSERVER_FLUSH_COUNT_MASK_CURR); - commit = (((prev & GDBSERVER_FLUSH_COUNT_MASK_CURR) << 12) - | commit_count - | curr); - - /* Try to commit it. */ - readout = cmpxchg (&trace_buffer_ctrl_curr, prev, commit); - if (readout != prev) - { - trace_debug ("GDBserver has touched the trace buffer, restarting." - " (prev=%08x, commit=%08x, readout=%08x)", - prev, commit, readout); - goto again; - } - - /* Hold your horses here. Even if that change was committed, - GDBserver could come in, and clobber it. We need to hold to be - able to tell if GDBserver clobbers before or after we committed - the change. Whenever GDBserver goes about touching the IPA - buffer, it sets a breakpoint in this routine, so we have a sync - point here. */ - about_to_request_buffer_space (); - - /* Check if the change has been effective, even if GDBserver stopped - us at the breakpoint. */ - - { - unsigned int refetch; - - memory_barrier (); - - refetch = trace_buffer_ctrl_curr; - - if (refetch == commit - || ((refetch & GDBSERVER_FLUSH_COUNT_MASK_PREV) >> 12) == commit_count) - { - /* effective */ - trace_debug ("change is effective: (prev=%08x, commit=%08x, " - "readout=%08x, refetch=%08x)", - prev, commit, readout, refetch); - } - else - { - trace_debug ("GDBserver has touched the trace buffer, not effective." - " (prev=%08x, commit=%08x, readout=%08x, refetch=%08x)", - prev, commit, readout, refetch); - goto again; - } - } -#endif - - /* We have a new piece of the trace buffer. Hurray! */ - - /* Add an EOB marker just past this allocation. */ - ((struct traceframe *) tbctrl->free)->tpnum = 0; - ((struct traceframe *) tbctrl->free)->data_size = 0; - - /* Adjust the request back down, now that we know we have space for - the marker. */ - amt -= sizeof (struct traceframe); - - if (debug_threads) - { - trace_debug ("Allocated %d bytes", (int) amt); - trace_debug ("Trace buffer [%d] start=%d free=%d " - "endfree=%d wrap=%d hi=%d", - curr, - (int) (tbctrl->start - trace_buffer_lo), - (int) (tbctrl->free - trace_buffer_lo), - (int) (tbctrl->end_free - trace_buffer_lo), - (int) (tbctrl->wrap - trace_buffer_lo), - (int) (trace_buffer_hi - trace_buffer_lo)); - } - - return rslt; -} - -#ifndef IN_PROCESS_AGENT - -/* Return the total free space. This is not necessarily the largest - block we can allocate, because of the two-part case. */ - -static int -free_space (void) -{ - if (trace_buffer_free <= trace_buffer_end_free) - return trace_buffer_end_free - trace_buffer_free; - else - return ((trace_buffer_end_free - trace_buffer_lo) - + (trace_buffer_hi - trace_buffer_free)); -} - -/* An 'S' in continuation packets indicates remainder are for - while-stepping. */ - -static int seen_step_action_flag; - -/* Create a tracepoint (location) with given number and address. Add this - new tracepoint to list and sort this list. */ - -static struct tracepoint * -add_tracepoint (int num, CORE_ADDR addr) -{ - struct tracepoint *tpoint, **tp_next; - - tpoint = XNEW (struct tracepoint); - tpoint->number = num; - tpoint->address = addr; - tpoint->numactions = 0; - tpoint->actions = NULL; - tpoint->actions_str = NULL; - tpoint->cond = NULL; - tpoint->num_step_actions = 0; - tpoint->step_actions = NULL; - tpoint->step_actions_str = NULL; - /* Start all off as regular (slow) tracepoints. */ - tpoint->type = trap_tracepoint; - tpoint->orig_size = -1; - tpoint->source_strings = NULL; - tpoint->compiled_cond = 0; - tpoint->handle = NULL; - tpoint->next = NULL; - - /* Find a place to insert this tracepoint into list in order to keep - the tracepoint list still in the ascending order. There may be - multiple tracepoints at the same address as TPOINT's, and this - guarantees TPOINT is inserted after all the tracepoints which are - set at the same address. For example, fast tracepoints A, B, C are - set at the same address, and D is to be insert at the same place as - well, - - -->| A |--> | B |-->| C |->... - - One jump pad was created for tracepoint A, B, and C, and the target - address of A is referenced/used in jump pad. So jump pad will let - inferior jump to A. If D is inserted in front of A, like this, - - -->| D |-->| A |--> | B |-->| C |->... - - without updating jump pad, D is not reachable during collect, which - is wrong. As we can see, the order of B, C and D doesn't matter, but - A should always be the `first' one. */ - for (tp_next = &tracepoints; - (*tp_next) != NULL && (*tp_next)->address <= tpoint->address; - tp_next = &(*tp_next)->next) - ; - tpoint->next = *tp_next; - *tp_next = tpoint; - last_tracepoint = tpoint; - - seen_step_action_flag = 0; - - return tpoint; -} - -#ifndef IN_PROCESS_AGENT - -/* Return the tracepoint with the given number and address, or NULL. */ - -static struct tracepoint * -find_tracepoint (int id, CORE_ADDR addr) -{ - struct tracepoint *tpoint; - - for (tpoint = tracepoints; tpoint; tpoint = tpoint->next) - if (tpoint->number == id && tpoint->address == addr) - return tpoint; - - return NULL; -} - -/* Remove TPOINT from global list. */ - -static void -remove_tracepoint (struct tracepoint *tpoint) -{ - struct tracepoint *tp, *tp_prev; - - for (tp = tracepoints, tp_prev = NULL; tp && tp != tpoint; - tp_prev = tp, tp = tp->next) - ; - - if (tp) - { - if (tp_prev) - tp_prev->next = tp->next; - else - tracepoints = tp->next; - - xfree (tp); - } -} - -/* There may be several tracepoints with the same number (because they - are "locations", in GDB parlance); return the next one after the - given tracepoint, or search from the beginning of the list if the - first argument is NULL. */ - -static struct tracepoint * -find_next_tracepoint_by_number (struct tracepoint *prev_tp, int num) -{ - struct tracepoint *tpoint; - - if (prev_tp) - tpoint = prev_tp->next; - else - tpoint = tracepoints; - for (; tpoint; tpoint = tpoint->next) - if (tpoint->number == num) - return tpoint; - - return NULL; -} - -#endif - -/* Append another action to perform when the tracepoint triggers. */ - -static void -add_tracepoint_action (struct tracepoint *tpoint, const char *packet) -{ - const char *act; - - if (*packet == 'S') - { - seen_step_action_flag = 1; - ++packet; - } - - act = packet; - - while (*act) - { - const char *act_start = act; - struct tracepoint_action *action = NULL; - - switch (*act) - { - case 'M': - { - struct collect_memory_action *maction = - XNEW (struct collect_memory_action); - ULONGEST basereg; - int is_neg; - - maction->base.type = *act; - action = &maction->base; - - ++act; - is_neg = (*act == '-'); - if (*act == '-') - ++act; - act = unpack_varlen_hex (act, &basereg); - ++act; - act = unpack_varlen_hex (act, &maction->addr); - ++act; - act = unpack_varlen_hex (act, &maction->len); - maction->basereg = (is_neg - ? - (int) basereg - : (int) basereg); - trace_debug ("Want to collect %s bytes at 0x%s (basereg %d)", - pulongest (maction->len), - paddress (maction->addr), maction->basereg); - break; - } - case 'R': - { - struct collect_registers_action *raction = - XNEW (struct collect_registers_action); - - raction->base.type = *act; - action = &raction->base; - - trace_debug ("Want to collect registers"); - ++act; - /* skip past hex digits of mask for now */ - while (isxdigit(*act)) - ++act; - break; - } - case 'L': - { - struct collect_static_trace_data_action *raction = - XNEW (struct collect_static_trace_data_action); - - raction->base.type = *act; - action = &raction->base; - - trace_debug ("Want to collect static trace data"); - ++act; - break; - } - case 'S': - trace_debug ("Unexpected step action, ignoring"); - ++act; - break; - case 'X': - { - struct eval_expr_action *xaction = XNEW (struct eval_expr_action); - - xaction->base.type = *act; - action = &xaction->base; - - trace_debug ("Want to evaluate expression"); - xaction->expr = gdb_parse_agent_expr (&act); - break; - } - default: - trace_debug ("unknown trace action '%c', ignoring...", *act); - break; - case '-': - break; - } - - if (action == NULL) - break; - - if (seen_step_action_flag) - { - tpoint->num_step_actions++; - - tpoint->step_actions - = XRESIZEVEC (struct tracepoint_action *, tpoint->step_actions, - tpoint->num_step_actions); - tpoint->step_actions_str - = XRESIZEVEC (char *, tpoint->step_actions_str, - tpoint->num_step_actions); - tpoint->step_actions[tpoint->num_step_actions - 1] = action; - tpoint->step_actions_str[tpoint->num_step_actions - 1] - = savestring (act_start, act - act_start); - } - else - { - tpoint->numactions++; - tpoint->actions - = XRESIZEVEC (struct tracepoint_action *, tpoint->actions, - tpoint->numactions); - tpoint->actions_str - = XRESIZEVEC (char *, tpoint->actions_str, tpoint->numactions); - tpoint->actions[tpoint->numactions - 1] = action; - tpoint->actions_str[tpoint->numactions - 1] - = savestring (act_start, act - act_start); - } - } -} - -#endif - -/* Find or create a trace state variable with the given number. */ - -static struct trace_state_variable * -get_trace_state_variable (int num) -{ - struct trace_state_variable *tsv; - -#ifdef IN_PROCESS_AGENT - /* Search for an existing variable. */ - for (tsv = alloced_trace_state_variables; tsv; tsv = tsv->next) - if (tsv->number == num) - return tsv; -#endif - - /* Search for an existing variable. */ - for (tsv = trace_state_variables; tsv; tsv = tsv->next) - if (tsv->number == num) - return tsv; - - return NULL; -} - -/* Find or create a trace state variable with the given number. */ - -static struct trace_state_variable * -create_trace_state_variable (int num, int gdb) -{ - struct trace_state_variable *tsv; - - tsv = get_trace_state_variable (num); - if (tsv != NULL) - return tsv; - - /* Create a new variable. */ - tsv = XNEW (struct trace_state_variable); - tsv->number = num; - tsv->initial_value = 0; - tsv->value = 0; - tsv->getter = NULL; - tsv->name = NULL; -#ifdef IN_PROCESS_AGENT - if (!gdb) - { - tsv->next = alloced_trace_state_variables; - alloced_trace_state_variables = tsv; - } - else -#endif - { - tsv->next = trace_state_variables; - trace_state_variables = tsv; - } - return tsv; -} - -IP_AGENT_EXPORT_FUNC LONGEST -get_trace_state_variable_value (int num) -{ - struct trace_state_variable *tsv; - - tsv = get_trace_state_variable (num); - - if (!tsv) - { - trace_debug ("No trace state variable %d, skipping value get", num); - return 0; - } - - /* Call a getter function if we have one. While it's tempting to - set up something to only call the getter once per tracepoint hit, - it could run afoul of thread races. Better to let the getter - handle it directly, if necessary to worry about it. */ - if (tsv->getter) - tsv->value = (tsv->getter) (); - - trace_debug ("get_trace_state_variable_value(%d) ==> %s", - num, plongest (tsv->value)); - - return tsv->value; -} - -IP_AGENT_EXPORT_FUNC void -set_trace_state_variable_value (int num, LONGEST val) -{ - struct trace_state_variable *tsv; - - tsv = get_trace_state_variable (num); - - if (!tsv) - { - trace_debug ("No trace state variable %d, skipping value set", num); - return; - } - - tsv->value = val; -} - -LONGEST -agent_get_trace_state_variable_value (int num) -{ - return get_trace_state_variable_value (num); -} - -void -agent_set_trace_state_variable_value (int num, LONGEST val) -{ - set_trace_state_variable_value (num, val); -} - -static void -set_trace_state_variable_name (int num, const char *name) -{ - struct trace_state_variable *tsv; - - tsv = get_trace_state_variable (num); - - if (!tsv) - { - trace_debug ("No trace state variable %d, skipping name set", num); - return; - } - - tsv->name = (char *) name; -} - -static void -set_trace_state_variable_getter (int num, LONGEST (*getter) (void)) -{ - struct trace_state_variable *tsv; - - tsv = get_trace_state_variable (num); - - if (!tsv) - { - trace_debug ("No trace state variable %d, skipping getter set", num); - return; - } - - tsv->getter = getter; -} - -/* Add a raw traceframe for the given tracepoint. */ - -static struct traceframe * -add_traceframe (struct tracepoint *tpoint) -{ - struct traceframe *tframe; - - tframe - = (struct traceframe *) trace_buffer_alloc (sizeof (struct traceframe)); - - if (tframe == NULL) - return NULL; - - tframe->tpnum = tpoint->number; - tframe->data_size = 0; - - return tframe; -} - -/* Add a block to the traceframe currently being worked on. */ - -static unsigned char * -add_traceframe_block (struct traceframe *tframe, - struct tracepoint *tpoint, int amt) -{ - unsigned char *block; - - if (!tframe) - return NULL; - - block = (unsigned char *) trace_buffer_alloc (amt); - - if (!block) - return NULL; - - gdb_assert (tframe->tpnum == tpoint->number); - - tframe->data_size += amt; - tpoint->traceframe_usage += amt; - - return block; -} - -/* Flag that the current traceframe is finished. */ - -static void -finish_traceframe (struct traceframe *tframe) -{ - ++traceframe_write_count; - ++traceframes_created; -} - -#ifndef IN_PROCESS_AGENT - -/* Given a traceframe number NUM, find the NUMth traceframe in the - buffer. */ - -static struct traceframe * -find_traceframe (int num) -{ - struct traceframe *tframe; - int tfnum = 0; - - for (tframe = FIRST_TRACEFRAME (); - tframe->tpnum != 0; - tframe = NEXT_TRACEFRAME (tframe)) - { - if (tfnum == num) - return tframe; - ++tfnum; - } - - return NULL; -} - -static CORE_ADDR -get_traceframe_address (struct traceframe *tframe) -{ - CORE_ADDR addr; - struct tracepoint *tpoint; - - addr = traceframe_get_pc (tframe); - - if (addr) - return addr; - - /* Fallback strategy, will be incorrect for while-stepping frames - and multi-location tracepoints. */ - tpoint = find_next_tracepoint_by_number (NULL, tframe->tpnum); - return tpoint->address; -} - -/* Search for the next traceframe whose address is inside or outside - the given range. */ - -static struct traceframe * -find_next_traceframe_in_range (CORE_ADDR lo, CORE_ADDR hi, int inside_p, - int *tfnump) -{ - client_state &cs = get_client_state (); - struct traceframe *tframe; - CORE_ADDR tfaddr; - - *tfnump = cs.current_traceframe + 1; - tframe = find_traceframe (*tfnump); - /* The search is not supposed to wrap around. */ - if (!tframe) - { - *tfnump = -1; - return NULL; - } - - for (; tframe->tpnum != 0; tframe = NEXT_TRACEFRAME (tframe)) - { - tfaddr = get_traceframe_address (tframe); - if (inside_p - ? (lo <= tfaddr && tfaddr <= hi) - : (lo > tfaddr || tfaddr > hi)) - return tframe; - ++*tfnump; - } - - *tfnump = -1; - return NULL; -} - -/* Search for the next traceframe recorded by the given tracepoint. - Note that for multi-location tracepoints, this will find whatever - location appears first. */ - -static struct traceframe * -find_next_traceframe_by_tracepoint (int num, int *tfnump) -{ - client_state &cs = get_client_state (); - struct traceframe *tframe; - - *tfnump = cs.current_traceframe + 1; - tframe = find_traceframe (*tfnump); - /* The search is not supposed to wrap around. */ - if (!tframe) - { - *tfnump = -1; - return NULL; - } - - for (; tframe->tpnum != 0; tframe = NEXT_TRACEFRAME (tframe)) - { - if (tframe->tpnum == num) - return tframe; - ++*tfnump; - } - - *tfnump = -1; - return NULL; -} - -#endif - -#ifndef IN_PROCESS_AGENT - -/* Clear all past trace state. */ - -static void -cmd_qtinit (char *packet) -{ - client_state &cs = get_client_state (); - struct trace_state_variable *tsv, *prev, *next; - - /* Can't do this command without a pid attached. */ - if (current_thread == NULL) - { - write_enn (packet); - return; - } - - /* Make sure we don't try to read from a trace frame. */ - cs.current_traceframe = -1; - - stop_tracing (); - - trace_debug ("Initializing the trace"); - - clear_installed_tracepoints (); - clear_readonly_regions (); - - tracepoints = NULL; - last_tracepoint = NULL; - - /* Clear out any leftover trace state variables. Ones with target - defined getters should be kept however. */ - prev = NULL; - tsv = trace_state_variables; - while (tsv) - { - trace_debug ("Looking at var %d", tsv->number); - if (tsv->getter == NULL) - { - next = tsv->next; - if (prev) - prev->next = next; - else - trace_state_variables = next; - trace_debug ("Deleting var %d", tsv->number); - free (tsv); - tsv = next; - } - else - { - prev = tsv; - tsv = tsv->next; - } - } - - clear_trace_buffer (); - clear_inferior_trace_buffer (); - - write_ok (packet); -} - -/* Unprobe the UST marker at ADDRESS. */ - -static void -unprobe_marker_at (CORE_ADDR address) -{ - char cmd[IPA_CMD_BUF_SIZE]; - - sprintf (cmd, "unprobe_marker_at:%s", paddress (address)); - run_inferior_command (cmd, strlen (cmd) + 1); -} - -/* Restore the program to its pre-tracing state. This routine may be called - in error situations, so it needs to be careful about only restoring - from known-valid bits. */ - -static void -clear_installed_tracepoints (void) -{ - struct tracepoint *tpoint; - struct tracepoint *prev_stpoint; - - pause_all (1); - - prev_stpoint = NULL; - - /* Restore any bytes overwritten by tracepoints. */ - for (tpoint = tracepoints; tpoint; tpoint = tpoint->next) - { - /* Catch the case where we might try to remove a tracepoint that - was never actually installed. */ - if (tpoint->handle == NULL) - { - trace_debug ("Tracepoint %d at 0x%s was " - "never installed, nothing to clear", - tpoint->number, paddress (tpoint->address)); - continue; - } - - switch (tpoint->type) - { - case trap_tracepoint: - { - struct breakpoint *bp - = (struct breakpoint *) tpoint->handle; - - delete_breakpoint (bp); - } - break; - case fast_tracepoint: - { - struct fast_tracepoint_jump *jump - = (struct fast_tracepoint_jump *) tpoint->handle; - - delete_fast_tracepoint_jump (jump); - } - break; - case static_tracepoint: - if (prev_stpoint != NULL - && prev_stpoint->address == tpoint->address) - /* Nothing to do. We already unprobed a tracepoint set at - this marker address (and there can only be one probe - per marker). */ - ; - else - { - unprobe_marker_at (tpoint->address); - prev_stpoint = tpoint; - } - break; - } - - tpoint->handle = NULL; - } - - unpause_all (1); -} - -/* Parse a packet that defines a tracepoint. */ - -static void -cmd_qtdp (char *own_buf) -{ - int tppacket; - /* Whether there is a trailing hyphen at the end of the QTDP packet. */ - int trail_hyphen = 0; - ULONGEST num; - ULONGEST addr; - ULONGEST count; - struct tracepoint *tpoint; - const char *packet = own_buf; - - packet += strlen ("QTDP:"); - - /* A hyphen at the beginning marks a packet specifying actions for a - tracepoint already supplied. */ - tppacket = 1; - if (*packet == '-') - { - tppacket = 0; - ++packet; - } - packet = unpack_varlen_hex (packet, &num); - ++packet; /* skip a colon */ - packet = unpack_varlen_hex (packet, &addr); - ++packet; /* skip a colon */ - - /* See if we already have this tracepoint. */ - tpoint = find_tracepoint (num, addr); - - if (tppacket) - { - /* Duplicate tracepoints are never allowed. */ - if (tpoint) - { - trace_debug ("Tracepoint error: tracepoint %d" - " at 0x%s already exists", - (int) num, paddress (addr)); - write_enn (own_buf); - return; - } - - tpoint = add_tracepoint (num, addr); - - tpoint->enabled = (*packet == 'E'); - ++packet; /* skip 'E' */ - ++packet; /* skip a colon */ - packet = unpack_varlen_hex (packet, &count); - tpoint->step_count = count; - ++packet; /* skip a colon */ - packet = unpack_varlen_hex (packet, &count); - tpoint->pass_count = count; - /* See if we have any of the additional optional fields. */ - while (*packet == ':') - { - ++packet; - if (*packet == 'F') - { - tpoint->type = fast_tracepoint; - ++packet; - packet = unpack_varlen_hex (packet, &count); - tpoint->orig_size = count; - } - else if (*packet == 'S') - { - tpoint->type = static_tracepoint; - ++packet; - } - else if (*packet == 'X') - { - tpoint->cond = gdb_parse_agent_expr (&packet); - } - else if (*packet == '-') - break; - else if (*packet == '\0') - break; - else - trace_debug ("Unknown optional tracepoint field"); - } - if (*packet == '-') - { - trail_hyphen = 1; - trace_debug ("Also has actions\n"); - } - - trace_debug ("Defined %stracepoint %d at 0x%s, " - "enabled %d step %" PRIu64 " pass %" PRIu64, - tpoint->type == fast_tracepoint ? "fast " - : tpoint->type == static_tracepoint ? "static " : "", - tpoint->number, paddress (tpoint->address), tpoint->enabled, - tpoint->step_count, tpoint->pass_count); - } - else if (tpoint) - add_tracepoint_action (tpoint, packet); - else - { - trace_debug ("Tracepoint error: tracepoint %d at 0x%s not found", - (int) num, paddress (addr)); - write_enn (own_buf); - return; - } - - /* Install tracepoint during tracing only once for each tracepoint location. - For each tracepoint loc, GDB may send multiple QTDP packets, and we can - determine the last QTDP packet for one tracepoint location by checking - trailing hyphen in QTDP packet. */ - if (tracing && !trail_hyphen) - { - struct tracepoint *tp = NULL; - - /* Pause all threads temporarily while we patch tracepoints. */ - pause_all (0); - - /* download_tracepoint will update global `tracepoints' - list, so it is unsafe to leave threads in jump pad. */ - stabilize_threads (); - - /* Freeze threads. */ - pause_all (1); - - - if (tpoint->type != trap_tracepoint) - { - /* Find another fast or static tracepoint at the same address. */ - for (tp = tracepoints; tp; tp = tp->next) - { - if (tp->address == tpoint->address && tp->type == tpoint->type - && tp->number != tpoint->number) - break; - } - - /* TPOINT is installed at the same address as TP. */ - if (tp) - { - if (tpoint->type == fast_tracepoint) - clone_fast_tracepoint (tpoint, tp); - else if (tpoint->type == static_tracepoint) - tpoint->handle = (void *) -1; - } - } - - if (use_agent && tpoint->type == fast_tracepoint - && agent_capability_check (AGENT_CAPA_FAST_TRACE)) - { - /* Download and install fast tracepoint by agent. */ - if (tracepoint_send_agent (tpoint) == 0) - write_ok (own_buf); - else - { - write_enn (own_buf); - remove_tracepoint (tpoint); - } - } - else - { - download_tracepoint (tpoint); - - if (tpoint->type == trap_tracepoint || tp == NULL) - { - install_tracepoint (tpoint, own_buf); - if (strcmp (own_buf, "OK") != 0) - remove_tracepoint (tpoint); - } - else - write_ok (own_buf); - } - - unpause_all (1); - return; - } - - write_ok (own_buf); -} - -static void -cmd_qtdpsrc (char *own_buf) -{ - ULONGEST num, addr, start, slen; - struct tracepoint *tpoint; - const char *packet = own_buf; - const char *saved; - char *srctype, *src; - size_t nbytes; - struct source_string *last, *newlast; - - packet += strlen ("QTDPsrc:"); - - packet = unpack_varlen_hex (packet, &num); - ++packet; /* skip a colon */ - packet = unpack_varlen_hex (packet, &addr); - ++packet; /* skip a colon */ - - /* See if we already have this tracepoint. */ - tpoint = find_tracepoint (num, addr); - - if (!tpoint) - { - trace_debug ("Tracepoint error: tracepoint %d at 0x%s not found", - (int) num, paddress (addr)); - write_enn (own_buf); - return; - } - - saved = packet; - packet = strchr (packet, ':'); - srctype = (char *) xmalloc (packet - saved + 1); - memcpy (srctype, saved, packet - saved); - srctype[packet - saved] = '\0'; - ++packet; - packet = unpack_varlen_hex (packet, &start); - ++packet; /* skip a colon */ - packet = unpack_varlen_hex (packet, &slen); - ++packet; /* skip a colon */ - src = (char *) xmalloc (slen + 1); - nbytes = hex2bin (packet, (gdb_byte *) src, strlen (packet) / 2); - src[nbytes] = '\0'; - - newlast = XNEW (struct source_string); - newlast->type = srctype; - newlast->str = src; - newlast->next = NULL; - /* Always add a source string to the end of the list; - this keeps sequences of actions/commands in the right - order. */ - if (tpoint->source_strings) - { - for (last = tpoint->source_strings; last->next; last = last->next) - ; - last->next = newlast; - } - else - tpoint->source_strings = newlast; - - write_ok (own_buf); -} - -static void -cmd_qtdv (char *own_buf) -{ - ULONGEST num, val, builtin; - char *varname; - size_t nbytes; - struct trace_state_variable *tsv; - const char *packet = own_buf; - - packet += strlen ("QTDV:"); - - packet = unpack_varlen_hex (packet, &num); - ++packet; /* skip a colon */ - packet = unpack_varlen_hex (packet, &val); - ++packet; /* skip a colon */ - packet = unpack_varlen_hex (packet, &builtin); - ++packet; /* skip a colon */ - - nbytes = strlen (packet) / 2; - varname = (char *) xmalloc (nbytes + 1); - nbytes = hex2bin (packet, (gdb_byte *) varname, nbytes); - varname[nbytes] = '\0'; - - tsv = create_trace_state_variable (num, 1); - tsv->initial_value = (LONGEST) val; - tsv->name = varname; - - set_trace_state_variable_value (num, (LONGEST) val); - - write_ok (own_buf); -} - -static void -cmd_qtenable_disable (char *own_buf, int enable) -{ - const char *packet = own_buf; - ULONGEST num, addr; - struct tracepoint *tp; - - packet += strlen (enable ? "QTEnable:" : "QTDisable:"); - packet = unpack_varlen_hex (packet, &num); - ++packet; /* skip a colon */ - packet = unpack_varlen_hex (packet, &addr); - - tp = find_tracepoint (num, addr); - - if (tp) - { - if ((enable && tp->enabled) || (!enable && !tp->enabled)) - { - trace_debug ("Tracepoint %d at 0x%s is already %s", - (int) num, paddress (addr), - enable ? "enabled" : "disabled"); - write_ok (own_buf); - return; - } - - trace_debug ("%s tracepoint %d at 0x%s", - enable ? "Enabling" : "Disabling", - (int) num, paddress (addr)); - - tp->enabled = enable; - - if (tp->type == fast_tracepoint || tp->type == static_tracepoint) - { - int ret; - int offset = offsetof (struct tracepoint, enabled); - CORE_ADDR obj_addr = tp->obj_addr_on_target + offset; - - ret = prepare_to_access_memory (); - if (ret) - { - trace_debug ("Failed to temporarily stop inferior threads"); - write_enn (own_buf); - return; - } - - ret = write_inferior_int8 (obj_addr, enable); - done_accessing_memory (); - - if (ret) - { - trace_debug ("Cannot write enabled flag into " - "inferior process memory"); - write_enn (own_buf); - return; - } - } - - write_ok (own_buf); - } - else - { - trace_debug ("Tracepoint %d at 0x%s not found", - (int) num, paddress (addr)); - write_enn (own_buf); - } -} - -static void -cmd_qtv (char *own_buf) -{ - client_state &cs = get_client_state (); - ULONGEST num; - LONGEST val = 0; - int err; - char *packet = own_buf; - - packet += strlen ("qTV:"); - unpack_varlen_hex (packet, &num); - - if (cs.current_traceframe >= 0) - { - err = traceframe_read_tsv ((int) num, &val); - if (err) - { - strcpy (own_buf, "U"); - return; - } - } - /* Only make tsv's be undefined before the first trace run. After a - trace run is over, the user might want to see the last value of - the tsv, and it might not be available in a traceframe. */ - else if (!tracing && strcmp (tracing_stop_reason, "tnotrun") == 0) - { - strcpy (own_buf, "U"); - return; - } - else - val = get_trace_state_variable_value (num); - - sprintf (own_buf, "V%s", phex_nz (val, 0)); -} - -/* Clear out the list of readonly regions. */ - -static void -clear_readonly_regions (void) -{ - struct readonly_region *roreg; - - while (readonly_regions) - { - roreg = readonly_regions; - readonly_regions = readonly_regions->next; - free (roreg); - } -} - -/* Parse the collection of address ranges whose contents GDB believes - to be unchanging and so can be read directly from target memory - even while looking at a traceframe. */ - -static void -cmd_qtro (char *own_buf) -{ - ULONGEST start, end; - struct readonly_region *roreg; - const char *packet = own_buf; - - trace_debug ("Want to mark readonly regions"); - - clear_readonly_regions (); - - packet += strlen ("QTro"); - - while (*packet == ':') - { - ++packet; /* skip a colon */ - packet = unpack_varlen_hex (packet, &start); - ++packet; /* skip a comma */ - packet = unpack_varlen_hex (packet, &end); - - roreg = XNEW (struct readonly_region); - roreg->start = start; - roreg->end = end; - roreg->next = readonly_regions; - readonly_regions = roreg; - trace_debug ("Added readonly region from 0x%s to 0x%s", - paddress (roreg->start), paddress (roreg->end)); - } - - write_ok (own_buf); -} - -/* Test to see if the given range is in our list of readonly ranges. - We only test for being entirely within a range, GDB is not going to - send a single memory packet that spans multiple regions. */ - -int -in_readonly_region (CORE_ADDR addr, ULONGEST length) -{ - struct readonly_region *roreg; - - for (roreg = readonly_regions; roreg; roreg = roreg->next) - if (roreg->start <= addr && (addr + length - 1) <= roreg->end) - return 1; - - return 0; -} - -static CORE_ADDR gdb_jump_pad_head; - -/* Return the address of the next free jump space. */ - -static CORE_ADDR -get_jump_space_head (void) -{ - if (gdb_jump_pad_head == 0) - { - if (read_inferior_data_pointer (ipa_sym_addrs.addr_gdb_jump_pad_buffer, - &gdb_jump_pad_head)) - { - internal_error (__FILE__, __LINE__, - "error extracting jump_pad_buffer"); - } - } - - return gdb_jump_pad_head; -} - -/* Reserve USED bytes from the jump space. */ - -static void -claim_jump_space (ULONGEST used) -{ - trace_debug ("claim_jump_space reserves %s bytes at %s", - pulongest (used), paddress (gdb_jump_pad_head)); - gdb_jump_pad_head += used; -} - -static CORE_ADDR trampoline_buffer_head = 0; -static CORE_ADDR trampoline_buffer_tail; - -/* Reserve USED bytes from the trampoline buffer and return the - address of the start of the reserved space in TRAMPOLINE. Returns - non-zero if the space is successfully claimed. */ - -int -claim_trampoline_space (ULONGEST used, CORE_ADDR *trampoline) -{ - if (!trampoline_buffer_head) - { - if (read_inferior_data_pointer (ipa_sym_addrs.addr_gdb_trampoline_buffer, - &trampoline_buffer_tail)) - { - internal_error (__FILE__, __LINE__, - "error extracting trampoline_buffer"); - } - - if (read_inferior_data_pointer (ipa_sym_addrs.addr_gdb_trampoline_buffer_end, - &trampoline_buffer_head)) - { - internal_error (__FILE__, __LINE__, - "error extracting trampoline_buffer_end"); - } - } - - /* Start claiming space from the top of the trampoline space. If - the space is located at the bottom of the virtual address space, - this reduces the possibility that corruption will occur if a null - pointer is used to write to memory. */ - if (trampoline_buffer_head - trampoline_buffer_tail < used) - { - trace_debug ("claim_trampoline_space failed to reserve %s bytes", - pulongest (used)); - return 0; - } - - trampoline_buffer_head -= used; - - trace_debug ("claim_trampoline_space reserves %s bytes at %s", - pulongest (used), paddress (trampoline_buffer_head)); - - *trampoline = trampoline_buffer_head; - return 1; -} - -/* Returns non-zero if there is space allocated for use in trampolines - for fast tracepoints. */ - -int -have_fast_tracepoint_trampoline_buffer (char *buf) -{ - CORE_ADDR trampoline_end, errbuf; - - if (read_inferior_data_pointer (ipa_sym_addrs.addr_gdb_trampoline_buffer_end, - &trampoline_end)) - { - internal_error (__FILE__, __LINE__, - "error extracting trampoline_buffer_end"); - } - - if (buf) - { - buf[0] = '\0'; - strcpy (buf, "was claiming"); - if (read_inferior_data_pointer (ipa_sym_addrs.addr_gdb_trampoline_buffer_error, - &errbuf)) - { - internal_error (__FILE__, __LINE__, - "error extracting errbuf"); - } - - read_inferior_memory (errbuf, (unsigned char *) buf, 100); - } - - return trampoline_end != 0; -} - -/* Ask the IPA to probe the marker at ADDRESS. Returns -1 if running - the command fails, or 0 otherwise. If the command ran - successfully, but probing the marker failed, ERROUT will be filled - with the error to reply to GDB, and -1 is also returned. This - allows directly passing IPA errors to GDB. */ - -static int -probe_marker_at (CORE_ADDR address, char *errout) -{ - char cmd[IPA_CMD_BUF_SIZE]; - int err; - - sprintf (cmd, "probe_marker_at:%s", paddress (address)); - err = run_inferior_command (cmd, strlen (cmd) + 1); - - if (err == 0) - { - if (*cmd == 'E') - { - strcpy (errout, cmd); - return -1; - } - } - - return err; -} - -static void -clone_fast_tracepoint (struct tracepoint *to, const struct tracepoint *from) -{ - to->jump_pad = from->jump_pad; - to->jump_pad_end = from->jump_pad_end; - to->trampoline = from->trampoline; - to->trampoline_end = from->trampoline_end; - to->adjusted_insn_addr = from->adjusted_insn_addr; - to->adjusted_insn_addr_end = from->adjusted_insn_addr_end; - to->handle = from->handle; - - gdb_assert (from->handle); - inc_ref_fast_tracepoint_jump ((struct fast_tracepoint_jump *) from->handle); -} - -#define MAX_JUMP_SIZE 20 - -/* Install fast tracepoint. Return 0 if successful, otherwise return - non-zero. */ - -static int -install_fast_tracepoint (struct tracepoint *tpoint, char *errbuf) -{ - CORE_ADDR jentry, jump_entry; - CORE_ADDR trampoline; - CORE_ADDR collect; - ULONGEST trampoline_size; - int err = 0; - /* The jump to the jump pad of the last fast tracepoint - installed. */ - unsigned char fjump[MAX_JUMP_SIZE]; - ULONGEST fjump_size; - - if (tpoint->orig_size < target_get_min_fast_tracepoint_insn_len ()) - { - trace_debug ("Requested a fast tracepoint on an instruction " - "that is of less than the minimum length."); - return 0; - } - - if (read_inferior_data_pointer (ipa_sym_addrs.addr_gdb_collect_ptr, - &collect)) - { - error ("error extracting gdb_collect_ptr"); - return 1; - } - - jentry = jump_entry = get_jump_space_head (); - - trampoline = 0; - trampoline_size = 0; - - /* Install the jump pad. */ - err = install_fast_tracepoint_jump_pad (tpoint->obj_addr_on_target, - tpoint->address, - collect, - ipa_sym_addrs.addr_collecting, - tpoint->orig_size, - &jentry, - &trampoline, &trampoline_size, - fjump, &fjump_size, - &tpoint->adjusted_insn_addr, - &tpoint->adjusted_insn_addr_end, - errbuf); - - if (err) - return 1; - - /* Wire it in. */ - tpoint->handle = set_fast_tracepoint_jump (tpoint->address, fjump, - fjump_size); - - if (tpoint->handle != NULL) - { - tpoint->jump_pad = jump_entry; - tpoint->jump_pad_end = jentry; - tpoint->trampoline = trampoline; - tpoint->trampoline_end = trampoline + trampoline_size; - - /* Pad to 8-byte alignment. */ - jentry = ((jentry + 7) & ~0x7); - claim_jump_space (jentry - jump_entry); - } - - return 0; -} - - -/* Install tracepoint TPOINT, and write reply message in OWN_BUF. */ - -static void -install_tracepoint (struct tracepoint *tpoint, char *own_buf) -{ - tpoint->handle = NULL; - *own_buf = '\0'; - - if (tpoint->type == trap_tracepoint) - { - /* Tracepoints are installed as memory breakpoints. Just go - ahead and install the trap. The breakpoints module - handles duplicated breakpoints, and the memory read - routine handles un-patching traps from memory reads. */ - tpoint->handle = set_breakpoint_at (tpoint->address, - tracepoint_handler); - } - else if (tpoint->type == fast_tracepoint || tpoint->type == static_tracepoint) - { - if (!agent_loaded_p ()) - { - trace_debug ("Requested a %s tracepoint, but fast " - "tracepoints aren't supported.", - tpoint->type == static_tracepoint ? "static" : "fast"); - write_e_ipa_not_loaded (own_buf); - return; - } - if (tpoint->type == static_tracepoint - && !in_process_agent_supports_ust ()) - { - trace_debug ("Requested a static tracepoint, but static " - "tracepoints are not supported."); - write_e_ust_not_loaded (own_buf); - return; - } - - if (tpoint->type == fast_tracepoint) - install_fast_tracepoint (tpoint, own_buf); - else - { - if (probe_marker_at (tpoint->address, own_buf) == 0) - tpoint->handle = (void *) -1; - } - - } - else - internal_error (__FILE__, __LINE__, "Unknown tracepoint type"); - - if (tpoint->handle == NULL) - { - if (*own_buf == '\0') - write_enn (own_buf); - } - else - write_ok (own_buf); -} - -static void download_tracepoint_1 (struct tracepoint *tpoint); - -static void -cmd_qtstart (char *packet) -{ - struct tracepoint *tpoint, *prev_ftpoint, *prev_stpoint; - CORE_ADDR tpptr = 0, prev_tpptr = 0; - - trace_debug ("Starting the trace"); - - /* Pause all threads temporarily while we patch tracepoints. */ - pause_all (0); - - /* Get threads out of jump pads. Safe to do here, since this is a - top level command. And, required to do here, since we're - deleting/rewriting jump pads. */ - - stabilize_threads (); - - /* Freeze threads. */ - pause_all (1); - - /* Sync the fast tracepoints list in the inferior ftlib. */ - if (agent_loaded_p ()) - download_trace_state_variables (); - - /* No previous fast tpoint yet. */ - prev_ftpoint = NULL; - - /* No previous static tpoint yet. */ - prev_stpoint = NULL; - - *packet = '\0'; - - if (agent_loaded_p ()) - { - /* Tell IPA about the correct tdesc. */ - if (write_inferior_integer (ipa_sym_addrs.addr_ipa_tdesc_idx, - target_get_ipa_tdesc_idx ())) - error ("Error setting ipa_tdesc_idx variable in lib"); - } - - /* Start out empty. */ - if (agent_loaded_p ()) - write_inferior_data_pointer (ipa_sym_addrs.addr_tracepoints, 0); - - /* Download and install tracepoints. */ - for (tpoint = tracepoints; tpoint; tpoint = tpoint->next) - { - /* Ensure all the hit counts start at zero. */ - tpoint->hit_count = 0; - tpoint->traceframe_usage = 0; - - if (tpoint->type == trap_tracepoint) - { - /* Tracepoints are installed as memory breakpoints. Just go - ahead and install the trap. The breakpoints module - handles duplicated breakpoints, and the memory read - routine handles un-patching traps from memory reads. */ - tpoint->handle = set_breakpoint_at (tpoint->address, - tracepoint_handler); - } - else if (tpoint->type == fast_tracepoint - || tpoint->type == static_tracepoint) - { - if (maybe_write_ipa_not_loaded (packet)) - { - trace_debug ("Requested a %s tracepoint, but fast " - "tracepoints aren't supported.", - tpoint->type == static_tracepoint - ? "static" : "fast"); - break; - } - - if (tpoint->type == fast_tracepoint) - { - int use_agent_p - = use_agent && agent_capability_check (AGENT_CAPA_FAST_TRACE); - - if (prev_ftpoint != NULL - && prev_ftpoint->address == tpoint->address) - { - if (use_agent_p) - tracepoint_send_agent (tpoint); - else - download_tracepoint_1 (tpoint); - - clone_fast_tracepoint (tpoint, prev_ftpoint); - } - else - { - /* Tracepoint is installed successfully? */ - int installed = 0; - - /* Download and install fast tracepoint by agent. */ - if (use_agent_p) - installed = !tracepoint_send_agent (tpoint); - else - { - download_tracepoint_1 (tpoint); - installed = !install_fast_tracepoint (tpoint, packet); - } - - if (installed) - prev_ftpoint = tpoint; - } - } - else - { - if (!in_process_agent_supports_ust ()) - { - trace_debug ("Requested a static tracepoint, but static " - "tracepoints are not supported."); - break; - } - - download_tracepoint_1 (tpoint); - /* Can only probe a given marker once. */ - if (prev_stpoint != NULL - && prev_stpoint->address == tpoint->address) - tpoint->handle = (void *) -1; - else - { - if (probe_marker_at (tpoint->address, packet) == 0) - { - tpoint->handle = (void *) -1; - - /* So that we can handle multiple static tracepoints - at the same address easily. */ - prev_stpoint = tpoint; - } - } - } - - prev_tpptr = tpptr; - tpptr = tpoint->obj_addr_on_target; - - if (tpoint == tracepoints) - /* First object in list, set the head pointer in the - inferior. */ - write_inferior_data_pointer (ipa_sym_addrs.addr_tracepoints, tpptr); - else - write_inferior_data_pointer (prev_tpptr - + offsetof (struct tracepoint, next), - tpptr); - } - - /* Any failure in the inner loop is sufficient cause to give - up. */ - if (tpoint->handle == NULL) - break; - } - - /* Any error in tracepoint insertion is unacceptable; better to - address the problem now, than end up with a useless or misleading - trace run. */ - if (tpoint != NULL) - { - clear_installed_tracepoints (); - if (*packet == '\0') - write_enn (packet); - unpause_all (1); - return; - } - - stopping_tracepoint = NULL; - trace_buffer_is_full = 0; - expr_eval_result = expr_eval_no_error; - error_tracepoint = NULL; - tracing_start_time = get_timestamp (); - - /* Tracing is now active, hits will now start being logged. */ - tracing = 1; - - if (agent_loaded_p ()) - { - if (write_inferior_integer (ipa_sym_addrs.addr_tracing, 1)) - { - internal_error (__FILE__, __LINE__, - "Error setting tracing variable in lib"); - } - - if (write_inferior_data_pointer (ipa_sym_addrs.addr_stopping_tracepoint, - 0)) - { - internal_error (__FILE__, __LINE__, - "Error clearing stopping_tracepoint variable" - " in lib"); - } - - if (write_inferior_integer (ipa_sym_addrs.addr_trace_buffer_is_full, 0)) - { - internal_error (__FILE__, __LINE__, - "Error clearing trace_buffer_is_full variable" - " in lib"); - } - - stop_tracing_bkpt = set_breakpoint_at (ipa_sym_addrs.addr_stop_tracing, - stop_tracing_handler); - if (stop_tracing_bkpt == NULL) - error ("Error setting stop_tracing breakpoint"); - - flush_trace_buffer_bkpt - = set_breakpoint_at (ipa_sym_addrs.addr_flush_trace_buffer, - flush_trace_buffer_handler); - if (flush_trace_buffer_bkpt == NULL) - error ("Error setting flush_trace_buffer breakpoint"); - } - - unpause_all (1); - - write_ok (packet); -} - -/* End a tracing run, filling in a stop reason to report back to GDB, - and removing the tracepoints from the code. */ - -void -stop_tracing (void) -{ - if (!tracing) - { - trace_debug ("Tracing is already off, ignoring"); - return; - } - - trace_debug ("Stopping the trace"); - - /* Pause all threads before removing fast jumps from memory, - breakpoints, and touching IPA state variables (inferior memory). - Some thread may hit the internal tracing breakpoints, or be - collecting this moment, but that's ok, we don't release the - tpoint object's memory or the jump pads here (we only do that - when we're sure we can move all threads out of the jump pads). - We can't now, since we may be getting here due to the inferior - agent calling us. */ - pause_all (1); - - /* Stop logging. Tracepoints can still be hit, but they will not be - recorded. */ - tracing = 0; - if (agent_loaded_p ()) - { - if (write_inferior_integer (ipa_sym_addrs.addr_tracing, 0)) - { - internal_error (__FILE__, __LINE__, - "Error clearing tracing variable in lib"); - } - } - - tracing_stop_time = get_timestamp (); - tracing_stop_reason = "t???"; - tracing_stop_tpnum = 0; - if (stopping_tracepoint) - { - trace_debug ("Stopping the trace because " - "tracepoint %d was hit %" PRIu64 " times", - stopping_tracepoint->number, - stopping_tracepoint->pass_count); - tracing_stop_reason = "tpasscount"; - tracing_stop_tpnum = stopping_tracepoint->number; - } - else if (trace_buffer_is_full) - { - trace_debug ("Stopping the trace because the trace buffer is full"); - tracing_stop_reason = "tfull"; - } - else if (expr_eval_result != expr_eval_no_error) - { - trace_debug ("Stopping the trace because of an expression eval error"); - tracing_stop_reason = eval_result_names[expr_eval_result]; - tracing_stop_tpnum = error_tracepoint->number; - } -#ifndef IN_PROCESS_AGENT - else if (!gdb_connected ()) - { - trace_debug ("Stopping the trace because GDB disconnected"); - tracing_stop_reason = "tdisconnected"; - } -#endif - else - { - trace_debug ("Stopping the trace because of a tstop command"); - tracing_stop_reason = "tstop"; - } - - stopping_tracepoint = NULL; - error_tracepoint = NULL; - - /* Clear out the tracepoints. */ - clear_installed_tracepoints (); - - if (agent_loaded_p ()) - { - /* Pull in fast tracepoint trace frames from the inferior lib - buffer into our buffer, even if our buffer is already full, - because we want to present the full number of created frames - in addition to what fit in the trace buffer. */ - upload_fast_traceframes (); - } - - if (stop_tracing_bkpt != NULL) - { - delete_breakpoint (stop_tracing_bkpt); - stop_tracing_bkpt = NULL; - } - - if (flush_trace_buffer_bkpt != NULL) - { - delete_breakpoint (flush_trace_buffer_bkpt); - flush_trace_buffer_bkpt = NULL; - } - - unpause_all (1); -} - -static int -stop_tracing_handler (CORE_ADDR addr) -{ - trace_debug ("lib hit stop_tracing"); - - /* Don't actually handle it here. When we stop tracing we remove - breakpoints from the inferior, and that is not allowed in a - breakpoint handler (as the caller is walking the breakpoint - list). */ - return 0; -} - -static int -flush_trace_buffer_handler (CORE_ADDR addr) -{ - trace_debug ("lib hit flush_trace_buffer"); - return 0; -} - -static void -cmd_qtstop (char *packet) -{ - stop_tracing (); - write_ok (packet); -} - -static void -cmd_qtdisconnected (char *own_buf) -{ - ULONGEST setting; - char *packet = own_buf; - - packet += strlen ("QTDisconnected:"); - - unpack_varlen_hex (packet, &setting); - - write_ok (own_buf); - - disconnected_tracing = setting; -} - -static void -cmd_qtframe (char *own_buf) -{ - client_state &cs = get_client_state (); - ULONGEST frame, pc, lo, hi, num; - int tfnum, tpnum; - struct traceframe *tframe; - const char *packet = own_buf; - - packet += strlen ("QTFrame:"); - - if (startswith (packet, "pc:")) - { - packet += strlen ("pc:"); - unpack_varlen_hex (packet, &pc); - trace_debug ("Want to find next traceframe at pc=0x%s", paddress (pc)); - tframe = find_next_traceframe_in_range (pc, pc, 1, &tfnum); - } - else if (startswith (packet, "range:")) - { - packet += strlen ("range:"); - packet = unpack_varlen_hex (packet, &lo); - ++packet; - unpack_varlen_hex (packet, &hi); - trace_debug ("Want to find next traceframe in the range 0x%s to 0x%s", - paddress (lo), paddress (hi)); - tframe = find_next_traceframe_in_range (lo, hi, 1, &tfnum); - } - else if (startswith (packet, "outside:")) - { - packet += strlen ("outside:"); - packet = unpack_varlen_hex (packet, &lo); - ++packet; - unpack_varlen_hex (packet, &hi); - trace_debug ("Want to find next traceframe " - "outside the range 0x%s to 0x%s", - paddress (lo), paddress (hi)); - tframe = find_next_traceframe_in_range (lo, hi, 0, &tfnum); - } - else if (startswith (packet, "tdp:")) - { - packet += strlen ("tdp:"); - unpack_varlen_hex (packet, &num); - tpnum = (int) num; - trace_debug ("Want to find next traceframe for tracepoint %d", tpnum); - tframe = find_next_traceframe_by_tracepoint (tpnum, &tfnum); - } - else - { - unpack_varlen_hex (packet, &frame); - tfnum = (int) frame; - if (tfnum == -1) - { - trace_debug ("Want to stop looking at traceframes"); - cs.current_traceframe = -1; - write_ok (own_buf); - return; - } - trace_debug ("Want to look at traceframe %d", tfnum); - tframe = find_traceframe (tfnum); - } - - if (tframe) - { - cs.current_traceframe = tfnum; - sprintf (own_buf, "F%xT%x", tfnum, tframe->tpnum); - } - else - sprintf (own_buf, "F-1"); -} - -static void -cmd_qtstatus (char *packet) -{ - char *stop_reason_rsp = NULL; - char *buf1, *buf2, *buf3; - const char *str; - int slen; - - /* Translate the plain text of the notes back into hex for - transmission. */ - - str = (tracing_user_name ? tracing_user_name : ""); - slen = strlen (str); - buf1 = (char *) alloca (slen * 2 + 1); - bin2hex ((gdb_byte *) str, buf1, slen); - - str = (tracing_notes ? tracing_notes : ""); - slen = strlen (str); - buf2 = (char *) alloca (slen * 2 + 1); - bin2hex ((gdb_byte *) str, buf2, slen); - - str = (tracing_stop_note ? tracing_stop_note : ""); - slen = strlen (str); - buf3 = (char *) alloca (slen * 2 + 1); - bin2hex ((gdb_byte *) str, buf3, slen); - - trace_debug ("Returning trace status as %d, stop reason %s", - tracing, tracing_stop_reason); - - if (agent_loaded_p ()) - { - pause_all (1); - - upload_fast_traceframes (); - - unpause_all (1); - } - - stop_reason_rsp = (char *) tracing_stop_reason; - - /* The user visible error string in terror needs to be hex encoded. - We leave it as plain string in `tracing_stop_reason' to ease - debugging. */ - if (startswith (stop_reason_rsp, "terror:")) - { - const char *result_name; - int hexstr_len; - char *p; - - result_name = stop_reason_rsp + strlen ("terror:"); - hexstr_len = strlen (result_name) * 2; - p = stop_reason_rsp - = (char *) alloca (strlen ("terror:") + hexstr_len + 1); - strcpy (p, "terror:"); - p += strlen (p); - bin2hex ((gdb_byte *) result_name, p, strlen (result_name)); - } - - /* If this was a forced stop, include any stop note that was supplied. */ - if (strcmp (stop_reason_rsp, "tstop") == 0) - { - stop_reason_rsp = (char *) alloca (strlen ("tstop:") + strlen (buf3) + 1); - strcpy (stop_reason_rsp, "tstop:"); - strcat (stop_reason_rsp, buf3); - } - - sprintf (packet, - "T%d;" - "%s:%x;" - "tframes:%x;tcreated:%x;" - "tfree:%x;tsize:%s;" - "circular:%d;" - "disconn:%d;" - "starttime:%s;stoptime:%s;" - "username:%s;notes:%s:", - tracing ? 1 : 0, - stop_reason_rsp, tracing_stop_tpnum, - traceframe_count, traceframes_created, - free_space (), phex_nz (trace_buffer_hi - trace_buffer_lo, 0), - circular_trace_buffer, - disconnected_tracing, - phex_nz (tracing_start_time, sizeof (tracing_start_time)), - phex_nz (tracing_stop_time, sizeof (tracing_stop_time)), - buf1, buf2); -} - -static void -cmd_qtp (char *own_buf) -{ - ULONGEST num, addr; - struct tracepoint *tpoint; - const char *packet = own_buf; - - packet += strlen ("qTP:"); - - packet = unpack_varlen_hex (packet, &num); - ++packet; /* skip a colon */ - packet = unpack_varlen_hex (packet, &addr); - - /* See if we already have this tracepoint. */ - tpoint = find_tracepoint (num, addr); - - if (!tpoint) - { - trace_debug ("Tracepoint error: tracepoint %d at 0x%s not found", - (int) num, paddress (addr)); - write_enn (own_buf); - return; - } - - sprintf (own_buf, "V%" PRIu64 ":%" PRIu64 "", tpoint->hit_count, - tpoint->traceframe_usage); -} - -/* State variables to help return all the tracepoint bits. */ -static struct tracepoint *cur_tpoint; -static unsigned int cur_action; -static unsigned int cur_step_action; -static struct source_string *cur_source_string; -static struct trace_state_variable *cur_tsv; - -/* Compose a response that is an imitation of the syntax by which the - tracepoint was originally downloaded. */ - -static void -response_tracepoint (char *packet, struct tracepoint *tpoint) -{ - char *buf; - - sprintf (packet, "T%x:%s:%c:%" PRIx64 ":%" PRIx64, tpoint->number, - paddress (tpoint->address), - (tpoint->enabled ? 'E' : 'D'), tpoint->step_count, - tpoint->pass_count); - if (tpoint->type == fast_tracepoint) - sprintf (packet + strlen (packet), ":F%x", tpoint->orig_size); - else if (tpoint->type == static_tracepoint) - sprintf (packet + strlen (packet), ":S"); - - if (tpoint->cond) - { - buf = gdb_unparse_agent_expr (tpoint->cond); - sprintf (packet + strlen (packet), ":X%x,%s", - tpoint->cond->length, buf); - free (buf); - } -} - -/* Compose a response that is an imitation of the syntax by which the - tracepoint action was originally downloaded (with the difference - that due to the way we store the actions, this will output a packet - per action, while GDB could have combined more than one action - per-packet. */ - -static void -response_action (char *packet, struct tracepoint *tpoint, - char *taction, int step) -{ - sprintf (packet, "%c%x:%s:%s", - (step ? 'S' : 'A'), tpoint->number, paddress (tpoint->address), - taction); -} - -/* Compose a response that is an imitation of the syntax by which the - tracepoint source piece was originally downloaded. */ - -static void -response_source (char *packet, - struct tracepoint *tpoint, struct source_string *src) -{ - char *buf; - int len; - - len = strlen (src->str); - buf = (char *) alloca (len * 2 + 1); - bin2hex ((gdb_byte *) src->str, buf, len); - - sprintf (packet, "Z%x:%s:%s:%x:%x:%s", - tpoint->number, paddress (tpoint->address), - src->type, 0, len, buf); -} - -/* Return the first piece of tracepoint definition, and initialize the - state machine that will iterate through all the tracepoint - bits. */ - -static void -cmd_qtfp (char *packet) -{ - trace_debug ("Returning first tracepoint definition piece"); - - cur_tpoint = tracepoints; - cur_action = cur_step_action = 0; - cur_source_string = NULL; - - if (cur_tpoint) - response_tracepoint (packet, cur_tpoint); - else - strcpy (packet, "l"); -} - -/* Return additional pieces of tracepoint definition. Each action and - stepping action must go into its own packet, because of packet size - limits, and so we use state variables to deliver one piece at a - time. */ - -static void -cmd_qtsp (char *packet) -{ - trace_debug ("Returning subsequent tracepoint definition piece"); - - if (!cur_tpoint) - { - /* This case would normally never occur, but be prepared for - GDB misbehavior. */ - strcpy (packet, "l"); - } - else if (cur_action < cur_tpoint->numactions) - { - response_action (packet, cur_tpoint, - cur_tpoint->actions_str[cur_action], 0); - ++cur_action; - } - else if (cur_step_action < cur_tpoint->num_step_actions) - { - response_action (packet, cur_tpoint, - cur_tpoint->step_actions_str[cur_step_action], 1); - ++cur_step_action; - } - else if ((cur_source_string - ? cur_source_string->next - : cur_tpoint->source_strings)) - { - if (cur_source_string) - cur_source_string = cur_source_string->next; - else - cur_source_string = cur_tpoint->source_strings; - response_source (packet, cur_tpoint, cur_source_string); - } - else - { - cur_tpoint = cur_tpoint->next; - cur_action = cur_step_action = 0; - cur_source_string = NULL; - if (cur_tpoint) - response_tracepoint (packet, cur_tpoint); - else - strcpy (packet, "l"); - } -} - -/* Compose a response that is an imitation of the syntax by which the - trace state variable was originally downloaded. */ - -static void -response_tsv (char *packet, struct trace_state_variable *tsv) -{ - char *buf = (char *) ""; - int namelen; - - if (tsv->name) - { - namelen = strlen (tsv->name); - buf = (char *) alloca (namelen * 2 + 1); - bin2hex ((gdb_byte *) tsv->name, buf, namelen); - } - - sprintf (packet, "%x:%s:%x:%s", tsv->number, phex_nz (tsv->initial_value, 0), - tsv->getter ? 1 : 0, buf); -} - -/* Return the first trace state variable definition, and initialize - the state machine that will iterate through all the tsv bits. */ - -static void -cmd_qtfv (char *packet) -{ - trace_debug ("Returning first trace state variable definition"); - - cur_tsv = trace_state_variables; - - if (cur_tsv) - response_tsv (packet, cur_tsv); - else - strcpy (packet, "l"); -} - -/* Return additional trace state variable definitions. */ - -static void -cmd_qtsv (char *packet) -{ - trace_debug ("Returning additional trace state variable definition"); - - if (cur_tsv) - { - cur_tsv = cur_tsv->next; - if (cur_tsv) - response_tsv (packet, cur_tsv); - else - strcpy (packet, "l"); - } - else - strcpy (packet, "l"); -} - -/* Return the first static tracepoint marker, and initialize the state - machine that will iterate through all the static tracepoints - markers. */ - -static void -cmd_qtfstm (char *packet) -{ - if (!maybe_write_ipa_ust_not_loaded (packet)) - run_inferior_command (packet, strlen (packet) + 1); -} - -/* Return additional static tracepoints markers. */ - -static void -cmd_qtsstm (char *packet) -{ - if (!maybe_write_ipa_ust_not_loaded (packet)) - run_inferior_command (packet, strlen (packet) + 1); -} - -/* Return the definition of the static tracepoint at a given address. - Result packet is the same as qTsST's. */ - -static void -cmd_qtstmat (char *packet) -{ - if (!maybe_write_ipa_ust_not_loaded (packet)) - run_inferior_command (packet, strlen (packet) + 1); -} - -/* Sent the agent a command to close it. */ - -void -gdb_agent_about_to_close (int pid) -{ - char buf[IPA_CMD_BUF_SIZE]; - - if (!maybe_write_ipa_not_loaded (buf)) - { - struct thread_info *saved_thread; - - saved_thread = current_thread; - - /* Find any thread which belongs to process PID. */ - current_thread = find_any_thread_of_pid (pid); - - strcpy (buf, "close"); - - run_inferior_command (buf, strlen (buf) + 1); - - current_thread = saved_thread; - } -} - -/* Return the minimum instruction size needed for fast tracepoints as a - hexadecimal number. */ - -static void -cmd_qtminftpilen (char *packet) -{ - if (current_thread == NULL) - { - /* Indicate that the minimum length is currently unknown. */ - strcpy (packet, "0"); - return; - } - - sprintf (packet, "%x", target_get_min_fast_tracepoint_insn_len ()); -} - -/* Respond to qTBuffer packet with a block of raw data from the trace - buffer. GDB may ask for a lot, but we are allowed to reply with - only as much as will fit within packet limits or whatever. */ - -static void -cmd_qtbuffer (char *own_buf) -{ - ULONGEST offset, num, tot; - unsigned char *tbp; - const char *packet = own_buf; - - packet += strlen ("qTBuffer:"); - - packet = unpack_varlen_hex (packet, &offset); - ++packet; /* skip a comma */ - unpack_varlen_hex (packet, &num); - - trace_debug ("Want to get trace buffer, %d bytes at offset 0x%s", - (int) num, phex_nz (offset, 0)); - - tot = (trace_buffer_hi - trace_buffer_lo) - free_space (); - - /* If we're right at the end, reply specially that we're done. */ - if (offset == tot) - { - strcpy (own_buf, "l"); - return; - } - - /* Object to any other out-of-bounds request. */ - if (offset > tot) - { - write_enn (own_buf); - return; - } - - /* Compute the pointer corresponding to the given offset, accounting - for wraparound. */ - tbp = trace_buffer_start + offset; - if (tbp >= trace_buffer_wrap) - tbp -= (trace_buffer_wrap - trace_buffer_lo); - - /* Trim to the remaining bytes if we're close to the end. */ - if (num > tot - offset) - num = tot - offset; - - /* Trim to available packet size. */ - if (num >= (PBUFSIZ - 16) / 2 ) - num = (PBUFSIZ - 16) / 2; - - bin2hex (tbp, own_buf, num); -} - -static void -cmd_bigqtbuffer_circular (char *own_buf) -{ - ULONGEST val; - char *packet = own_buf; - - packet += strlen ("QTBuffer:circular:"); - - unpack_varlen_hex (packet, &val); - circular_trace_buffer = val; - trace_debug ("Trace buffer is now %s", - circular_trace_buffer ? "circular" : "linear"); - write_ok (own_buf); -} - -static void -cmd_bigqtbuffer_size (char *own_buf) -{ - ULONGEST val; - LONGEST sval; - char *packet = own_buf; - - /* Can't change the size during a tracing run. */ - if (tracing) - { - write_enn (own_buf); - return; - } - - packet += strlen ("QTBuffer:size:"); - - /* -1 is sent as literal "-1". */ - if (strcmp (packet, "-1") == 0) - sval = DEFAULT_TRACE_BUFFER_SIZE; - else - { - unpack_varlen_hex (packet, &val); - sval = (LONGEST) val; - } - - init_trace_buffer (sval); - trace_debug ("Trace buffer is now %s bytes", - plongest (trace_buffer_size)); - write_ok (own_buf); -} - -static void -cmd_qtnotes (char *own_buf) -{ - size_t nbytes; - char *saved, *user, *notes, *stopnote; - char *packet = own_buf; - - packet += strlen ("QTNotes:"); - - while (*packet) - { - if (startswith (packet, "user:")) - { - packet += strlen ("user:"); - saved = packet; - packet = strchr (packet, ';'); - nbytes = (packet - saved) / 2; - user = (char *) xmalloc (nbytes + 1); - nbytes = hex2bin (saved, (gdb_byte *) user, nbytes); - user[nbytes] = '\0'; - ++packet; /* skip the semicolon */ - trace_debug ("User is '%s'", user); - xfree (tracing_user_name); - tracing_user_name = user; - } - else if (startswith (packet, "notes:")) - { - packet += strlen ("notes:"); - saved = packet; - packet = strchr (packet, ';'); - nbytes = (packet - saved) / 2; - notes = (char *) xmalloc (nbytes + 1); - nbytes = hex2bin (saved, (gdb_byte *) notes, nbytes); - notes[nbytes] = '\0'; - ++packet; /* skip the semicolon */ - trace_debug ("Notes is '%s'", notes); - xfree (tracing_notes); - tracing_notes = notes; - } - else if (startswith (packet, "tstop:")) - { - packet += strlen ("tstop:"); - saved = packet; - packet = strchr (packet, ';'); - nbytes = (packet - saved) / 2; - stopnote = (char *) xmalloc (nbytes + 1); - nbytes = hex2bin (saved, (gdb_byte *) stopnote, nbytes); - stopnote[nbytes] = '\0'; - ++packet; /* skip the semicolon */ - trace_debug ("tstop note is '%s'", stopnote); - xfree (tracing_stop_note); - tracing_stop_note = stopnote; - } - else - break; - } - - write_ok (own_buf); -} - -int -handle_tracepoint_general_set (char *packet) -{ - if (strcmp ("QTinit", packet) == 0) - { - cmd_qtinit (packet); - return 1; - } - else if (startswith (packet, "QTDP:")) - { - cmd_qtdp (packet); - return 1; - } - else if (startswith (packet, "QTDPsrc:")) - { - cmd_qtdpsrc (packet); - return 1; - } - else if (startswith (packet, "QTEnable:")) - { - cmd_qtenable_disable (packet, 1); - return 1; - } - else if (startswith (packet, "QTDisable:")) - { - cmd_qtenable_disable (packet, 0); - return 1; - } - else if (startswith (packet, "QTDV:")) - { - cmd_qtdv (packet); - return 1; - } - else if (startswith (packet, "QTro:")) - { - cmd_qtro (packet); - return 1; - } - else if (strcmp ("QTStart", packet) == 0) - { - cmd_qtstart (packet); - return 1; - } - else if (strcmp ("QTStop", packet) == 0) - { - cmd_qtstop (packet); - return 1; - } - else if (startswith (packet, "QTDisconnected:")) - { - cmd_qtdisconnected (packet); - return 1; - } - else if (startswith (packet, "QTFrame:")) - { - cmd_qtframe (packet); - return 1; - } - else if (startswith (packet, "QTBuffer:circular:")) - { - cmd_bigqtbuffer_circular (packet); - return 1; - } - else if (startswith (packet, "QTBuffer:size:")) - { - cmd_bigqtbuffer_size (packet); - return 1; - } - else if (startswith (packet, "QTNotes:")) - { - cmd_qtnotes (packet); - return 1; - } - - return 0; -} - -int -handle_tracepoint_query (char *packet) -{ - if (strcmp ("qTStatus", packet) == 0) - { - cmd_qtstatus (packet); - return 1; - } - else if (startswith (packet, "qTP:")) - { - cmd_qtp (packet); - return 1; - } - else if (strcmp ("qTfP", packet) == 0) - { - cmd_qtfp (packet); - return 1; - } - else if (strcmp ("qTsP", packet) == 0) - { - cmd_qtsp (packet); - return 1; - } - else if (strcmp ("qTfV", packet) == 0) - { - cmd_qtfv (packet); - return 1; - } - else if (strcmp ("qTsV", packet) == 0) - { - cmd_qtsv (packet); - return 1; - } - else if (startswith (packet, "qTV:")) - { - cmd_qtv (packet); - return 1; - } - else if (startswith (packet, "qTBuffer:")) - { - cmd_qtbuffer (packet); - return 1; - } - else if (strcmp ("qTfSTM", packet) == 0) - { - cmd_qtfstm (packet); - return 1; - } - else if (strcmp ("qTsSTM", packet) == 0) - { - cmd_qtsstm (packet); - return 1; - } - else if (startswith (packet, "qTSTMat:")) - { - cmd_qtstmat (packet); - return 1; - } - else if (strcmp ("qTMinFTPILen", packet) == 0) - { - cmd_qtminftpilen (packet); - return 1; - } - - return 0; -} - -#endif -#ifndef IN_PROCESS_AGENT - -/* Call this when thread TINFO has hit the tracepoint defined by - TP_NUMBER and TP_ADDRESS, and that tracepoint has a while-stepping - action. This adds a while-stepping collecting state item to the - threads' collecting state list, so that we can keep track of - multiple simultaneous while-stepping actions being collected by the - same thread. This can happen in cases like: - - ff0001 INSN1 <-- TP1, while-stepping 10 collect $regs - ff0002 INSN2 - ff0003 INSN3 <-- TP2, collect $regs - ff0004 INSN4 <-- TP3, while-stepping 10 collect $regs - ff0005 INSN5 - - Notice that when instruction INSN5 is reached, the while-stepping - actions of both TP1 and TP3 are still being collected, and that TP2 - had been collected meanwhile. The whole range of ff0001-ff0005 - should be single-stepped, due to at least TP1's while-stepping - action covering the whole range. */ - -static void -add_while_stepping_state (struct thread_info *tinfo, - int tp_number, CORE_ADDR tp_address) -{ - struct wstep_state *wstep = XNEW (struct wstep_state); - - wstep->next = tinfo->while_stepping; - - wstep->tp_number = tp_number; - wstep->tp_address = tp_address; - wstep->current_step = 0; - - tinfo->while_stepping = wstep; -} - -/* Release the while-stepping collecting state WSTEP. */ - -static void -release_while_stepping_state (struct wstep_state *wstep) -{ - free (wstep); -} - -/* Release all while-stepping collecting states currently associated - with thread TINFO. */ - -void -release_while_stepping_state_list (struct thread_info *tinfo) -{ - struct wstep_state *head; - - while (tinfo->while_stepping) - { - head = tinfo->while_stepping; - tinfo->while_stepping = head->next; - release_while_stepping_state (head); - } -} - -/* If TINFO was handling a 'while-stepping' action, the step has - finished, so collect any step data needed, and check if any more - steps are required. Return true if the thread was indeed - collecting tracepoint data, false otherwise. */ - -int -tracepoint_finished_step (struct thread_info *tinfo, CORE_ADDR stop_pc) -{ - struct tracepoint *tpoint; - struct wstep_state *wstep; - struct wstep_state **wstep_link; - struct trap_tracepoint_ctx ctx; - - /* Pull in fast tracepoint trace frames from the inferior lib buffer into - our buffer. */ - if (agent_loaded_p ()) - upload_fast_traceframes (); - - /* Check if we were indeed collecting data for one of more - tracepoints with a 'while-stepping' count. */ - if (tinfo->while_stepping == NULL) - return 0; - - if (!tracing) - { - /* We're not even tracing anymore. Stop this thread from - collecting. */ - release_while_stepping_state_list (tinfo); - - /* The thread had stopped due to a single-step request indeed - explained by a tracepoint. */ - return 1; - } - - wstep = tinfo->while_stepping; - wstep_link = &tinfo->while_stepping; - - trace_debug ("Thread %s finished a single-step for tracepoint %d at 0x%s", - target_pid_to_str (tinfo->id), - wstep->tp_number, paddress (wstep->tp_address)); - - ctx.base.type = trap_tracepoint; - ctx.regcache = get_thread_regcache (tinfo, 1); - - while (wstep != NULL) - { - tpoint = find_tracepoint (wstep->tp_number, wstep->tp_address); - if (tpoint == NULL) - { - trace_debug ("NO TRACEPOINT %d at 0x%s FOR THREAD %s!", - wstep->tp_number, paddress (wstep->tp_address), - target_pid_to_str (tinfo->id)); - - /* Unlink. */ - *wstep_link = wstep->next; - release_while_stepping_state (wstep); - wstep = *wstep_link; - continue; - } - - /* We've just finished one step. */ - ++wstep->current_step; - - /* Collect data. */ - collect_data_at_step ((struct tracepoint_hit_ctx *) &ctx, - stop_pc, tpoint, wstep->current_step); - - if (wstep->current_step >= tpoint->step_count) - { - /* The requested numbers of steps have occurred. */ - trace_debug ("Thread %s done stepping for tracepoint %d at 0x%s", - target_pid_to_str (tinfo->id), - wstep->tp_number, paddress (wstep->tp_address)); - - /* Unlink the wstep. */ - *wstep_link = wstep->next; - release_while_stepping_state (wstep); - wstep = *wstep_link; - - /* Only check the hit count now, which ensure that we do all - our stepping before stopping the run. */ - if (tpoint->pass_count > 0 - && tpoint->hit_count >= tpoint->pass_count - && stopping_tracepoint == NULL) - stopping_tracepoint = tpoint; - } - else - { - /* Keep single-stepping until the requested numbers of steps - have occurred. */ - wstep_link = &wstep->next; - wstep = *wstep_link; - } - - if (stopping_tracepoint - || trace_buffer_is_full - || expr_eval_result != expr_eval_no_error) - { - stop_tracing (); - break; - } - } - - return 1; -} - -/* Handle any internal tracing control breakpoint hits. That means, - pull traceframes from the IPA to our buffer, and syncing both - tracing agents when the IPA's tracing stops for some reason. */ - -int -handle_tracepoint_bkpts (struct thread_info *tinfo, CORE_ADDR stop_pc) -{ - /* Pull in fast tracepoint trace frames from the inferior in-process - agent's buffer into our buffer. */ - - if (!agent_loaded_p ()) - return 0; - - upload_fast_traceframes (); - - /* Check if the in-process agent had decided we should stop - tracing. */ - if (stop_pc == ipa_sym_addrs.addr_stop_tracing) - { - int ipa_trace_buffer_is_full; - CORE_ADDR ipa_stopping_tracepoint; - int ipa_expr_eval_result; - CORE_ADDR ipa_error_tracepoint; - - trace_debug ("lib stopped at stop_tracing"); - - read_inferior_integer (ipa_sym_addrs.addr_trace_buffer_is_full, - &ipa_trace_buffer_is_full); - - read_inferior_data_pointer (ipa_sym_addrs.addr_stopping_tracepoint, - &ipa_stopping_tracepoint); - write_inferior_data_pointer (ipa_sym_addrs.addr_stopping_tracepoint, 0); - - read_inferior_data_pointer (ipa_sym_addrs.addr_error_tracepoint, - &ipa_error_tracepoint); - write_inferior_data_pointer (ipa_sym_addrs.addr_error_tracepoint, 0); - - read_inferior_integer (ipa_sym_addrs.addr_expr_eval_result, - &ipa_expr_eval_result); - write_inferior_integer (ipa_sym_addrs.addr_expr_eval_result, 0); - - trace_debug ("lib: trace_buffer_is_full: %d, " - "stopping_tracepoint: %s, " - "ipa_expr_eval_result: %d, " - "error_tracepoint: %s, ", - ipa_trace_buffer_is_full, - paddress (ipa_stopping_tracepoint), - ipa_expr_eval_result, - paddress (ipa_error_tracepoint)); - - if (debug_threads) - { - if (ipa_trace_buffer_is_full) - trace_debug ("lib stopped due to full buffer."); - if (ipa_stopping_tracepoint) - trace_debug ("lib stopped due to tpoint"); - if (ipa_error_tracepoint) - trace_debug ("lib stopped due to error"); - } - - if (ipa_stopping_tracepoint != 0) - { - stopping_tracepoint - = fast_tracepoint_from_ipa_tpoint_address (ipa_stopping_tracepoint); - } - else if (ipa_expr_eval_result != expr_eval_no_error) - { - expr_eval_result = ipa_expr_eval_result; - error_tracepoint - = fast_tracepoint_from_ipa_tpoint_address (ipa_error_tracepoint); - } - stop_tracing (); - return 1; - } - else if (stop_pc == ipa_sym_addrs.addr_flush_trace_buffer) - { - trace_debug ("lib stopped at flush_trace_buffer"); - return 1; - } - - return 0; -} - -/* Return true if TINFO just hit a tracepoint. Collect data if - so. */ - -int -tracepoint_was_hit (struct thread_info *tinfo, CORE_ADDR stop_pc) -{ - struct tracepoint *tpoint; - int ret = 0; - struct trap_tracepoint_ctx ctx; - - /* Not tracing, don't handle. */ - if (!tracing) - return 0; - - ctx.base.type = trap_tracepoint; - ctx.regcache = get_thread_regcache (tinfo, 1); - - for (tpoint = tracepoints; tpoint; tpoint = tpoint->next) - { - /* Note that we collect fast tracepoints here as well. We'll - step over the fast tracepoint jump later, which avoids the - double collect. However, we don't collect for static - tracepoints here, because UST markers are compiled in program, - and probes will be executed in program. So static tracepoints - are collected there. */ - if (tpoint->enabled && stop_pc == tpoint->address - && tpoint->type != static_tracepoint) - { - trace_debug ("Thread %s at address of tracepoint %d at 0x%s", - target_pid_to_str (tinfo->id), - tpoint->number, paddress (tpoint->address)); - - /* Test the condition if present, and collect if true. */ - if (!tpoint->cond - || (condition_true_at_tracepoint - ((struct tracepoint_hit_ctx *) &ctx, tpoint))) - collect_data_at_tracepoint ((struct tracepoint_hit_ctx *) &ctx, - stop_pc, tpoint); - - if (stopping_tracepoint - || trace_buffer_is_full - || expr_eval_result != expr_eval_no_error) - { - stop_tracing (); - } - /* If the tracepoint had a 'while-stepping' action, then set - the thread to collect this tracepoint on the following - single-steps. */ - else if (tpoint->step_count > 0) - { - add_while_stepping_state (tinfo, - tpoint->number, tpoint->address); - } - - ret = 1; - } - } - - return ret; -} - -#endif - -#if defined IN_PROCESS_AGENT && defined HAVE_UST -struct ust_marker_data; -static void collect_ust_data_at_tracepoint (struct tracepoint_hit_ctx *ctx, - struct traceframe *tframe); -#endif - -/* Create a trace frame for the hit of the given tracepoint in the - given thread. */ - -static void -collect_data_at_tracepoint (struct tracepoint_hit_ctx *ctx, CORE_ADDR stop_pc, - struct tracepoint *tpoint) -{ - struct traceframe *tframe; - int acti; - - /* Only count it as a hit when we actually collect data. */ - tpoint->hit_count++; - - /* If we've exceeded a defined pass count, record the event for - later, and finish the collection for this hit. This test is only - for nonstepping tracepoints, stepping tracepoints test at the end - of their while-stepping loop. */ - if (tpoint->pass_count > 0 - && tpoint->hit_count >= tpoint->pass_count - && tpoint->step_count == 0 - && stopping_tracepoint == NULL) - stopping_tracepoint = tpoint; - - trace_debug ("Making new traceframe for tracepoint %d at 0x%s, hit %" PRIu64, - tpoint->number, paddress (tpoint->address), tpoint->hit_count); - - tframe = add_traceframe (tpoint); - - if (tframe) - { - for (acti = 0; acti < tpoint->numactions; ++acti) - { -#ifndef IN_PROCESS_AGENT - trace_debug ("Tracepoint %d at 0x%s about to do action '%s'", - tpoint->number, paddress (tpoint->address), - tpoint->actions_str[acti]); -#endif - - do_action_at_tracepoint (ctx, stop_pc, tpoint, tframe, - tpoint->actions[acti]); - } - - finish_traceframe (tframe); - } - - if (tframe == NULL && tracing) - trace_buffer_is_full = 1; -} - -#ifndef IN_PROCESS_AGENT - -static void -collect_data_at_step (struct tracepoint_hit_ctx *ctx, - CORE_ADDR stop_pc, - struct tracepoint *tpoint, int current_step) -{ - struct traceframe *tframe; - int acti; - - trace_debug ("Making new step traceframe for " - "tracepoint %d at 0x%s, step %d of %" PRIu64 ", hit %" PRIu64, - tpoint->number, paddress (tpoint->address), - current_step, tpoint->step_count, - tpoint->hit_count); - - tframe = add_traceframe (tpoint); - - if (tframe) - { - for (acti = 0; acti < tpoint->num_step_actions; ++acti) - { - trace_debug ("Tracepoint %d at 0x%s about to do step action '%s'", - tpoint->number, paddress (tpoint->address), - tpoint->step_actions_str[acti]); - - do_action_at_tracepoint (ctx, stop_pc, tpoint, tframe, - tpoint->step_actions[acti]); - } - - finish_traceframe (tframe); - } - - if (tframe == NULL && tracing) - trace_buffer_is_full = 1; -} - -#endif - -#ifdef IN_PROCESS_AGENT -/* The target description index for IPA. Passed from gdbserver, used - to select ipa_tdesc. */ -EXTERN_C_PUSH -IP_AGENT_EXPORT_VAR int ipa_tdesc_idx; -EXTERN_C_POP -#endif - -static struct regcache * -get_context_regcache (struct tracepoint_hit_ctx *ctx) -{ - struct regcache *regcache = NULL; -#ifdef IN_PROCESS_AGENT - const struct target_desc *ipa_tdesc = get_ipa_tdesc (ipa_tdesc_idx); - - if (ctx->type == fast_tracepoint) - { - struct fast_tracepoint_ctx *fctx = (struct fast_tracepoint_ctx *) ctx; - if (!fctx->regcache_initted) - { - fctx->regcache_initted = 1; - init_register_cache (&fctx->regcache, ipa_tdesc, fctx->regspace); - supply_regblock (&fctx->regcache, NULL); - supply_fast_tracepoint_registers (&fctx->regcache, fctx->regs); - } - regcache = &fctx->regcache; - } -#ifdef HAVE_UST - if (ctx->type == static_tracepoint) - { - struct static_tracepoint_ctx *sctx - = (struct static_tracepoint_ctx *) ctx; - - if (!sctx->regcache_initted) - { - sctx->regcache_initted = 1; - init_register_cache (&sctx->regcache, ipa_tdesc, sctx->regspace); - supply_regblock (&sctx->regcache, NULL); - /* Pass down the tracepoint address, because REGS doesn't - include the PC, but we know what it must have been. */ - supply_static_tracepoint_registers (&sctx->regcache, - (const unsigned char *) - sctx->regs, - sctx->tpoint->address); - } - regcache = &sctx->regcache; - } -#endif -#else - if (ctx->type == trap_tracepoint) - { - struct trap_tracepoint_ctx *tctx = (struct trap_tracepoint_ctx *) ctx; - regcache = tctx->regcache; - } -#endif - - gdb_assert (regcache != NULL); - - return regcache; -} - -static void -do_action_at_tracepoint (struct tracepoint_hit_ctx *ctx, - CORE_ADDR stop_pc, - struct tracepoint *tpoint, - struct traceframe *tframe, - struct tracepoint_action *taction) -{ - enum eval_result_type err; - - switch (taction->type) - { - case 'M': - { - struct collect_memory_action *maction; - struct eval_agent_expr_context ax_ctx; - - maction = (struct collect_memory_action *) taction; - ax_ctx.regcache = NULL; - ax_ctx.tframe = tframe; - ax_ctx.tpoint = tpoint; - - trace_debug ("Want to collect %s bytes at 0x%s (basereg %d)", - pulongest (maction->len), - paddress (maction->addr), maction->basereg); - /* (should use basereg) */ - agent_mem_read (&ax_ctx, NULL, (CORE_ADDR) maction->addr, - maction->len); - break; - } - case 'R': - { - unsigned char *regspace; - struct regcache tregcache; - struct regcache *context_regcache; - int regcache_size; - - trace_debug ("Want to collect registers"); - - context_regcache = get_context_regcache (ctx); - regcache_size = register_cache_size (context_regcache->tdesc); - - /* Collect all registers for now. */ - regspace = add_traceframe_block (tframe, tpoint, 1 + regcache_size); - if (regspace == NULL) - { - trace_debug ("Trace buffer block allocation failed, skipping"); - break; - } - /* Identify a register block. */ - *regspace = 'R'; - - /* Wrap the regblock in a register cache (in the stack, we - don't want to malloc here). */ - init_register_cache (&tregcache, context_regcache->tdesc, - regspace + 1); - - /* Copy the register data to the regblock. */ - regcache_cpy (&tregcache, context_regcache); - -#ifndef IN_PROCESS_AGENT - /* On some platforms, trap-based tracepoints will have the PC - pointing to the next instruction after the trap, but we - don't want the user or GDB trying to guess whether the - saved PC needs adjusting; so always record the adjusted - stop_pc. Note that we can't use tpoint->address instead, - since it will be wrong for while-stepping actions. This - adjustment is a nop for fast tracepoints collected from the - in-process lib (but not if GDBserver is collecting one - preemptively), since the PC had already been adjusted to - contain the tracepoint's address by the jump pad. */ - trace_debug ("Storing stop pc (0x%s) in regblock", - paddress (stop_pc)); - - /* This changes the regblock, not the thread's - regcache. */ - regcache_write_pc (&tregcache, stop_pc); -#endif - } - break; - case 'X': - { - struct eval_expr_action *eaction; - struct eval_agent_expr_context ax_ctx; - - eaction = (struct eval_expr_action *) taction; - ax_ctx.regcache = get_context_regcache (ctx); - ax_ctx.tframe = tframe; - ax_ctx.tpoint = tpoint; - - trace_debug ("Want to evaluate expression"); - - err = gdb_eval_agent_expr (&ax_ctx, eaction->expr, NULL); - - if (err != expr_eval_no_error) - { - record_tracepoint_error (tpoint, "action expression", err); - return; - } - } - break; - case 'L': - { -#if defined IN_PROCESS_AGENT && defined HAVE_UST - trace_debug ("Want to collect static trace data"); - collect_ust_data_at_tracepoint (ctx, tframe); -#else - trace_debug ("warning: collecting static trace data, " - "but static tracepoints are not supported"); -#endif - } - break; - default: - trace_debug ("unknown trace action '%c', ignoring", taction->type); - break; - } -} - -static int -condition_true_at_tracepoint (struct tracepoint_hit_ctx *ctx, - struct tracepoint *tpoint) -{ - ULONGEST value = 0; - enum eval_result_type err; - - /* Presently, gdbserver doesn't run compiled conditions, only the - IPA does. If the program stops at a fast tracepoint's address - (e.g., due to a breakpoint, trap tracepoint, or stepping), - gdbserver preemptively collect the fast tracepoint. Later, on - resume, gdbserver steps over the fast tracepoint like it steps - over breakpoints, so that the IPA doesn't see that fast - tracepoint. This avoids double collects of fast tracepoints in - that stopping scenario. Having gdbserver itself handle the fast - tracepoint gives the user a consistent view of when fast or trap - tracepoints are collected, compared to an alternative where only - trap tracepoints are collected on stop, and fast tracepoints on - resume. When a fast tracepoint is being processed by gdbserver, - it is always the non-compiled condition expression that is - used. */ -#ifdef IN_PROCESS_AGENT - if (tpoint->compiled_cond) - { - struct fast_tracepoint_ctx *fctx = (struct fast_tracepoint_ctx *) ctx; - err = ((condfn) (uintptr_t) (tpoint->compiled_cond)) (fctx->regs, &value); - } - else -#endif - { - struct eval_agent_expr_context ax_ctx; - - ax_ctx.regcache = get_context_regcache (ctx); - ax_ctx.tframe = NULL; - ax_ctx.tpoint = tpoint; - - err = gdb_eval_agent_expr (&ax_ctx, tpoint->cond, &value); - } - if (err != expr_eval_no_error) - { - record_tracepoint_error (tpoint, "condition", err); - /* The error case must return false. */ - return 0; - } - - trace_debug ("Tracepoint %d at 0x%s condition evals to %s", - tpoint->number, paddress (tpoint->address), - pulongest (value)); - return (value ? 1 : 0); -} - -/* Do memory copies for bytecodes. */ -/* Do the recording of memory blocks for actions and bytecodes. */ - -int -agent_mem_read (struct eval_agent_expr_context *ctx, - unsigned char *to, CORE_ADDR from, ULONGEST len) -{ - unsigned char *mspace; - ULONGEST remaining = len; - unsigned short blocklen; - - /* If a 'to' buffer is specified, use it. */ - if (to != NULL) - { - read_inferior_memory (from, to, len); - return 0; - } - - /* Otherwise, create a new memory block in the trace buffer. */ - while (remaining > 0) - { - size_t sp; - - blocklen = (remaining > 65535 ? 65535 : remaining); - sp = 1 + sizeof (from) + sizeof (blocklen) + blocklen; - mspace = add_traceframe_block (ctx->tframe, ctx->tpoint, sp); - if (mspace == NULL) - return 1; - /* Identify block as a memory block. */ - *mspace = 'M'; - ++mspace; - /* Record address and size. */ - memcpy (mspace, &from, sizeof (from)); - mspace += sizeof (from); - memcpy (mspace, &blocklen, sizeof (blocklen)); - mspace += sizeof (blocklen); - /* Record the memory block proper. */ - read_inferior_memory (from, mspace, blocklen); - trace_debug ("%d bytes recorded", blocklen); - remaining -= blocklen; - from += blocklen; - } - return 0; -} - -int -agent_mem_read_string (struct eval_agent_expr_context *ctx, - unsigned char *to, CORE_ADDR from, ULONGEST len) -{ - unsigned char *buf, *mspace; - ULONGEST remaining = len; - unsigned short blocklen, i; - - /* To save a bit of space, block lengths are 16-bit, so break large - requests into multiple blocks. Bordering on overkill for strings, - but it could happen that someone specifies a large max length. */ - while (remaining > 0) - { - size_t sp; - - blocklen = (remaining > 65535 ? 65535 : remaining); - /* We want working space to accumulate nonzero bytes, since - traceframes must have a predecided size (otherwise it gets - harder to wrap correctly for the circular case, etc). */ - buf = (unsigned char *) xmalloc (blocklen + 1); - for (i = 0; i < blocklen; ++i) - { - /* Read the string one byte at a time, in case the string is - at the end of a valid memory area - we don't want a - correctly-terminated string to engender segvio - complaints. */ - read_inferior_memory (from + i, buf + i, 1); - - if (buf[i] == '\0') - { - blocklen = i + 1; - /* Make sure outer loop stops now too. */ - remaining = blocklen; - break; - } - } - sp = 1 + sizeof (from) + sizeof (blocklen) + blocklen; - mspace = add_traceframe_block (ctx->tframe, ctx->tpoint, sp); - if (mspace == NULL) - { - xfree (buf); - return 1; - } - /* Identify block as a memory block. */ - *mspace = 'M'; - ++mspace; - /* Record address and size. */ - memcpy ((void *) mspace, (void *) &from, sizeof (from)); - mspace += sizeof (from); - memcpy ((void *) mspace, (void *) &blocklen, sizeof (blocklen)); - mspace += sizeof (blocklen); - /* Copy the string contents. */ - memcpy ((void *) mspace, (void *) buf, blocklen); - remaining -= blocklen; - from += blocklen; - xfree (buf); - } - return 0; -} - -/* Record the value of a trace state variable. */ - -int -agent_tsv_read (struct eval_agent_expr_context *ctx, int n) -{ - unsigned char *vspace; - LONGEST val; - - vspace = add_traceframe_block (ctx->tframe, ctx->tpoint, - 1 + sizeof (n) + sizeof (LONGEST)); - if (vspace == NULL) - return 1; - /* Identify block as a variable. */ - *vspace = 'V'; - /* Record variable's number and value. */ - memcpy (vspace + 1, &n, sizeof (n)); - val = get_trace_state_variable_value (n); - memcpy (vspace + 1 + sizeof (n), &val, sizeof (val)); - trace_debug ("Variable %d recorded", n); - return 0; -} - -#ifndef IN_PROCESS_AGENT - -/* Callback for traceframe_walk_blocks, used to find a given block - type in a traceframe. */ - -static int -match_blocktype (char blocktype, unsigned char *dataptr, void *data) -{ - char *wantedp = (char *) data; - - if (*wantedp == blocktype) - return 1; - - return 0; -} - -/* Walk over all traceframe blocks of the traceframe buffer starting - at DATABASE, of DATASIZE bytes long, and call CALLBACK for each - block found, passing in DATA unmodified. If CALLBACK returns true, - this returns a pointer to where the block is found. Returns NULL - if no callback call returned true, indicating that all blocks have - been walked. */ - -static unsigned char * -traceframe_walk_blocks (unsigned char *database, unsigned int datasize, - int tfnum, - int (*callback) (char blocktype, - unsigned char *dataptr, - void *data), - void *data) -{ - unsigned char *dataptr; - - if (datasize == 0) - { - trace_debug ("traceframe %d has no data", tfnum); - return NULL; - } - - /* Iterate through a traceframe's blocks, looking for a block of the - requested type. */ - for (dataptr = database; - dataptr < database + datasize; - /* nothing */) - { - char blocktype; - unsigned short mlen; - - if (dataptr == trace_buffer_wrap) - { - /* Adjust to reflect wrapping part of the frame around to - the beginning. */ - datasize = dataptr - database; - dataptr = database = trace_buffer_lo; - } - - blocktype = *dataptr++; - - if ((*callback) (blocktype, dataptr, data)) - return dataptr; - - switch (blocktype) - { - case 'R': - /* Skip over the registers block. */ - dataptr += current_target_desc ()->registers_size; - break; - case 'M': - /* Skip over the memory block. */ - dataptr += sizeof (CORE_ADDR); - memcpy (&mlen, dataptr, sizeof (mlen)); - dataptr += (sizeof (mlen) + mlen); - break; - case 'V': - /* Skip over the TSV block. */ - dataptr += (sizeof (int) + sizeof (LONGEST)); - break; - case 'S': - /* Skip over the static trace data block. */ - memcpy (&mlen, dataptr, sizeof (mlen)); - dataptr += (sizeof (mlen) + mlen); - break; - default: - trace_debug ("traceframe %d has unknown block type 0x%x", - tfnum, blocktype); - return NULL; - } - } - - return NULL; -} - -/* Look for the block of type TYPE_WANTED in the traceframe starting - at DATABASE of DATASIZE bytes long. TFNUM is the traceframe - number. */ - -static unsigned char * -traceframe_find_block_type (unsigned char *database, unsigned int datasize, - int tfnum, char type_wanted) -{ - return traceframe_walk_blocks (database, datasize, tfnum, - match_blocktype, &type_wanted); -} - -static unsigned char * -traceframe_find_regblock (struct traceframe *tframe, int tfnum) -{ - unsigned char *regblock; - - regblock = traceframe_find_block_type (tframe->data, - tframe->data_size, - tfnum, 'R'); - - if (regblock == NULL) - trace_debug ("traceframe %d has no register data", tfnum); - - return regblock; -} - -/* Get registers from a traceframe. */ - -int -fetch_traceframe_registers (int tfnum, struct regcache *regcache, int regnum) -{ - unsigned char *dataptr; - struct tracepoint *tpoint; - struct traceframe *tframe; - - tframe = find_traceframe (tfnum); - - if (tframe == NULL) - { - trace_debug ("traceframe %d not found", tfnum); - return 1; - } - - dataptr = traceframe_find_regblock (tframe, tfnum); - if (dataptr == NULL) - { - /* Mark registers unavailable. */ - supply_regblock (regcache, NULL); - - /* We can generally guess at a PC, although this will be - misleading for while-stepping frames and multi-location - tracepoints. */ - tpoint = find_next_tracepoint_by_number (NULL, tframe->tpnum); - if (tpoint != NULL) - regcache_write_pc (regcache, tpoint->address); - } - else - supply_regblock (regcache, dataptr); - - return 0; -} - -static CORE_ADDR -traceframe_get_pc (struct traceframe *tframe) -{ - struct regcache regcache; - unsigned char *dataptr; - const struct target_desc *tdesc = current_target_desc (); - - dataptr = traceframe_find_regblock (tframe, -1); - if (dataptr == NULL) - return 0; - - init_register_cache (®cache, tdesc, dataptr); - return regcache_read_pc (®cache); -} - -/* Read a requested block of memory from a trace frame. */ - -int -traceframe_read_mem (int tfnum, CORE_ADDR addr, - unsigned char *buf, ULONGEST length, - ULONGEST *nbytes) -{ - struct traceframe *tframe; - unsigned char *database, *dataptr; - unsigned int datasize; - CORE_ADDR maddr; - unsigned short mlen; - - trace_debug ("traceframe_read_mem"); - - tframe = find_traceframe (tfnum); - - if (!tframe) - { - trace_debug ("traceframe %d not found", tfnum); - return 1; - } - - datasize = tframe->data_size; - database = dataptr = &tframe->data[0]; - - /* Iterate through a traceframe's blocks, looking for memory. */ - while ((dataptr = traceframe_find_block_type (dataptr, - datasize - - (dataptr - database), - tfnum, 'M')) != NULL) - { - memcpy (&maddr, dataptr, sizeof (maddr)); - dataptr += sizeof (maddr); - memcpy (&mlen, dataptr, sizeof (mlen)); - dataptr += sizeof (mlen); - trace_debug ("traceframe %d has %d bytes at %s", - tfnum, mlen, paddress (maddr)); - - /* If the block includes the first part of the desired range, - return as much it has; GDB will re-request the remainder, - which might be in a different block of this trace frame. */ - if (maddr <= addr && addr < (maddr + mlen)) - { - ULONGEST amt = (maddr + mlen) - addr; - if (amt > length) - amt = length; - - memcpy (buf, dataptr + (addr - maddr), amt); - *nbytes = amt; - return 0; - } - - /* Skip over this block. */ - dataptr += mlen; - } - - trace_debug ("traceframe %d has no memory data for the desired region", - tfnum); - - *nbytes = 0; - return 0; -} - -static int -traceframe_read_tsv (int tsvnum, LONGEST *val) -{ - client_state &cs = get_client_state (); - int tfnum; - struct traceframe *tframe; - unsigned char *database, *dataptr; - unsigned int datasize; - int vnum; - int found = 0; - - trace_debug ("traceframe_read_tsv"); - - tfnum = cs.current_traceframe; - - if (tfnum < 0) - { - trace_debug ("no current traceframe"); - return 1; - } - - tframe = find_traceframe (tfnum); - - if (tframe == NULL) - { - trace_debug ("traceframe %d not found", tfnum); - return 1; - } - - datasize = tframe->data_size; - database = dataptr = &tframe->data[0]; - - /* Iterate through a traceframe's blocks, looking for the last - matched tsv. */ - while ((dataptr = traceframe_find_block_type (dataptr, - datasize - - (dataptr - database), - tfnum, 'V')) != NULL) - { - memcpy (&vnum, dataptr, sizeof (vnum)); - dataptr += sizeof (vnum); - - trace_debug ("traceframe %d has variable %d", tfnum, vnum); - - /* Check that this is the variable we want. */ - if (tsvnum == vnum) - { - memcpy (val, dataptr, sizeof (*val)); - found = 1; - } - - /* Skip over this block. */ - dataptr += sizeof (LONGEST); - } - - if (!found) - trace_debug ("traceframe %d has no data for variable %d", - tfnum, tsvnum); - return !found; -} - -/* Read a requested block of static tracepoint data from a trace - frame. */ - -int -traceframe_read_sdata (int tfnum, ULONGEST offset, - unsigned char *buf, ULONGEST length, - ULONGEST *nbytes) -{ - struct traceframe *tframe; - unsigned char *database, *dataptr; - unsigned int datasize; - unsigned short mlen; - - trace_debug ("traceframe_read_sdata"); - - tframe = find_traceframe (tfnum); - - if (!tframe) - { - trace_debug ("traceframe %d not found", tfnum); - return 1; - } - - datasize = tframe->data_size; - database = &tframe->data[0]; - - /* Iterate through a traceframe's blocks, looking for static - tracepoint data. */ - dataptr = traceframe_find_block_type (database, datasize, - tfnum, 'S'); - if (dataptr != NULL) - { - memcpy (&mlen, dataptr, sizeof (mlen)); - dataptr += sizeof (mlen); - if (offset < mlen) - { - if (offset + length > mlen) - length = mlen - offset; - - memcpy (buf, dataptr, length); - *nbytes = length; - } - else - *nbytes = 0; - return 0; - } - - trace_debug ("traceframe %d has no static trace data", tfnum); - - *nbytes = 0; - return 0; -} - -/* Callback for traceframe_walk_blocks. Builds a traceframe-info - object. DATA is pointer to a struct buffer holding the - traceframe-info object being built. */ - -static int -build_traceframe_info_xml (char blocktype, unsigned char *dataptr, void *data) -{ - struct buffer *buffer = (struct buffer *) data; - - switch (blocktype) - { - case 'M': - { - unsigned short mlen; - CORE_ADDR maddr; - - memcpy (&maddr, dataptr, sizeof (maddr)); - dataptr += sizeof (maddr); - memcpy (&mlen, dataptr, sizeof (mlen)); - dataptr += sizeof (mlen); - buffer_xml_printf (buffer, - "<memory start=\"0x%s\" length=\"0x%s\"/>\n", - paddress (maddr), phex_nz (mlen, sizeof (mlen))); - break; - } - case 'V': - { - int vnum; - - memcpy (&vnum, dataptr, sizeof (vnum)); - buffer_xml_printf (buffer, "<tvar id=\"%d\"/>\n", vnum); - break; - } - case 'R': - case 'S': - { - break; - } - default: - warning ("Unhandled trace block type (%d) '%c ' " - "while building trace frame info.", - blocktype, blocktype); - break; - } - - return 0; -} - -/* Build a traceframe-info object for traceframe number TFNUM into - BUFFER. */ - -int -traceframe_read_info (int tfnum, struct buffer *buffer) -{ - struct traceframe *tframe; - - trace_debug ("traceframe_read_info"); - - tframe = find_traceframe (tfnum); - - if (!tframe) - { - trace_debug ("traceframe %d not found", tfnum); - return 1; - } - - buffer_grow_str (buffer, "<traceframe-info>\n"); - traceframe_walk_blocks (tframe->data, tframe->data_size, - tfnum, build_traceframe_info_xml, buffer); - buffer_grow_str0 (buffer, "</traceframe-info>\n"); - return 0; -} - -/* Return the first fast tracepoint whose jump pad contains PC. */ - -static struct tracepoint * -fast_tracepoint_from_jump_pad_address (CORE_ADDR pc) -{ - struct tracepoint *tpoint; - - for (tpoint = tracepoints; tpoint; tpoint = tpoint->next) - if (tpoint->type == fast_tracepoint) - if (tpoint->jump_pad <= pc && pc < tpoint->jump_pad_end) - return tpoint; - - return NULL; -} - -/* Return the first fast tracepoint whose trampoline contains PC. */ - -static struct tracepoint * -fast_tracepoint_from_trampoline_address (CORE_ADDR pc) -{ - struct tracepoint *tpoint; - - for (tpoint = tracepoints; tpoint; tpoint = tpoint->next) - { - if (tpoint->type == fast_tracepoint - && tpoint->trampoline <= pc && pc < tpoint->trampoline_end) - return tpoint; - } - - return NULL; -} - -/* Return GDBserver's tracepoint that matches the IP Agent's - tracepoint object that lives at IPA_TPOINT_OBJ in the IP Agent's - address space. */ - -static struct tracepoint * -fast_tracepoint_from_ipa_tpoint_address (CORE_ADDR ipa_tpoint_obj) -{ - struct tracepoint *tpoint; - - for (tpoint = tracepoints; tpoint; tpoint = tpoint->next) - if (tpoint->type == fast_tracepoint) - if (tpoint->obj_addr_on_target == ipa_tpoint_obj) - return tpoint; - - return NULL; -} - -#endif - -/* The type of the object that is used to synchronize fast tracepoint - collection. */ - -typedef struct collecting_t -{ - /* The fast tracepoint number currently collecting. */ - uintptr_t tpoint; - - /* A number that GDBserver can use to identify the thread that is - presently holding the collect lock. This need not (and usually - is not) the thread id, as getting the current thread ID usually - requires a system call, which we want to avoid like the plague. - Usually this is thread's TCB, found in the TLS (pseudo-) - register, which is readable with a single insn on several - architectures. */ - uintptr_t thread_area; -} collecting_t; - -#ifndef IN_PROCESS_AGENT - -void -force_unlock_trace_buffer (void) -{ - write_inferior_data_pointer (ipa_sym_addrs.addr_collecting, 0); -} - -/* Check if the thread identified by THREAD_AREA which is stopped at - STOP_PC, is presently locking the fast tracepoint collection, and - if so, gather some status of said collection. Returns 0 if the - thread isn't collecting or in the jump pad at all. 1, if in the - jump pad (or within gdb_collect) and hasn't executed the adjusted - original insn yet (can set a breakpoint there and run to it). 2, - if presently executing the adjusted original insn --- in which - case, if we want to move the thread out of the jump pad, we need to - single-step it until this function returns 0. */ - -fast_tpoint_collect_result -fast_tracepoint_collecting (CORE_ADDR thread_area, - CORE_ADDR stop_pc, - struct fast_tpoint_collect_status *status) -{ - CORE_ADDR ipa_collecting; - CORE_ADDR ipa_gdb_jump_pad_buffer, ipa_gdb_jump_pad_buffer_end; - CORE_ADDR ipa_gdb_trampoline_buffer; - CORE_ADDR ipa_gdb_trampoline_buffer_end; - struct tracepoint *tpoint; - int needs_breakpoint; - - /* The thread THREAD_AREA is either: - - 0. not collecting at all, not within the jump pad, or within - gdb_collect or one of its callees. - - 1. in the jump pad and haven't reached gdb_collect - - 2. within gdb_collect (out of the jump pad) (collect is set) - - 3. we're in the jump pad, after gdb_collect having returned, - possibly executing the adjusted insns. - - For cases 1 and 3, `collecting' may or not be set. The jump pad - doesn't have any complicated jump logic, so we can tell if the - thread is executing the adjust original insn or not by just - matching STOP_PC with known jump pad addresses. If we it isn't - yet executing the original insn, set a breakpoint there, and let - the thread run to it, so to quickly step over a possible (many - insns) gdb_collect call. Otherwise, or when the breakpoint is - hit, only a few (small number of) insns are left to be executed - in the jump pad. Single-step the thread until it leaves the - jump pad. */ - - again: - tpoint = NULL; - needs_breakpoint = 0; - trace_debug ("fast_tracepoint_collecting"); - - if (read_inferior_data_pointer (ipa_sym_addrs.addr_gdb_jump_pad_buffer, - &ipa_gdb_jump_pad_buffer)) - { - internal_error (__FILE__, __LINE__, - "error extracting `gdb_jump_pad_buffer'"); - } - if (read_inferior_data_pointer (ipa_sym_addrs.addr_gdb_jump_pad_buffer_end, - &ipa_gdb_jump_pad_buffer_end)) - { - internal_error (__FILE__, __LINE__, - "error extracting `gdb_jump_pad_buffer_end'"); - } - - if (read_inferior_data_pointer (ipa_sym_addrs.addr_gdb_trampoline_buffer, - &ipa_gdb_trampoline_buffer)) - { - internal_error (__FILE__, __LINE__, - "error extracting `gdb_trampoline_buffer'"); - } - if (read_inferior_data_pointer (ipa_sym_addrs.addr_gdb_trampoline_buffer_end, - &ipa_gdb_trampoline_buffer_end)) - { - internal_error (__FILE__, __LINE__, - "error extracting `gdb_trampoline_buffer_end'"); - } - - if (ipa_gdb_jump_pad_buffer <= stop_pc - && stop_pc < ipa_gdb_jump_pad_buffer_end) - { - /* We can tell which tracepoint(s) the thread is collecting by - matching the jump pad address back to the tracepoint. */ - tpoint = fast_tracepoint_from_jump_pad_address (stop_pc); - if (tpoint == NULL) - { - warning ("in jump pad, but no matching tpoint?"); - return fast_tpoint_collect_result::not_collecting; - } - else - { - trace_debug ("in jump pad of tpoint (%d, %s); jump_pad(%s, %s); " - "adj_insn(%s, %s)", - tpoint->number, paddress (tpoint->address), - paddress (tpoint->jump_pad), - paddress (tpoint->jump_pad_end), - paddress (tpoint->adjusted_insn_addr), - paddress (tpoint->adjusted_insn_addr_end)); - } - - /* Definitely in the jump pad. May or may not need - fast-exit-jump-pad breakpoint. */ - if (tpoint->jump_pad <= stop_pc - && stop_pc < tpoint->adjusted_insn_addr) - needs_breakpoint = 1; - } - else if (ipa_gdb_trampoline_buffer <= stop_pc - && stop_pc < ipa_gdb_trampoline_buffer_end) - { - /* We can tell which tracepoint(s) the thread is collecting by - matching the trampoline address back to the tracepoint. */ - tpoint = fast_tracepoint_from_trampoline_address (stop_pc); - if (tpoint == NULL) - { - warning ("in trampoline, but no matching tpoint?"); - return fast_tpoint_collect_result::not_collecting; - } - else - { - trace_debug ("in trampoline of tpoint (%d, %s); trampoline(%s, %s)", - tpoint->number, paddress (tpoint->address), - paddress (tpoint->trampoline), - paddress (tpoint->trampoline_end)); - } - - /* Have not reached jump pad yet, but treat the trampoline as a - part of the jump pad that is before the adjusted original - instruction. */ - needs_breakpoint = 1; - } - else - { - collecting_t ipa_collecting_obj; - - /* If `collecting' is set/locked, then the THREAD_AREA thread - may or not be the one holding the lock. We have to read the - lock to find out. */ - - if (read_inferior_data_pointer (ipa_sym_addrs.addr_collecting, - &ipa_collecting)) - { - trace_debug ("fast_tracepoint_collecting:" - " failed reading 'collecting' in the inferior"); - return fast_tpoint_collect_result::not_collecting; - } - - if (!ipa_collecting) - { - trace_debug ("fast_tracepoint_collecting: not collecting" - " (and nobody is)."); - return fast_tpoint_collect_result::not_collecting; - } - - /* Some thread is collecting. Check which. */ - if (read_inferior_memory (ipa_collecting, - (unsigned char *) &ipa_collecting_obj, - sizeof (ipa_collecting_obj)) != 0) - goto again; - - if (ipa_collecting_obj.thread_area != thread_area) - { - trace_debug ("fast_tracepoint_collecting: not collecting " - "(another thread is)"); - return fast_tpoint_collect_result::not_collecting; - } - - tpoint - = fast_tracepoint_from_ipa_tpoint_address (ipa_collecting_obj.tpoint); - if (tpoint == NULL) - { - warning ("fast_tracepoint_collecting: collecting, " - "but tpoint %s not found?", - paddress ((CORE_ADDR) ipa_collecting_obj.tpoint)); - return fast_tpoint_collect_result::not_collecting; - } - - /* The thread is within `gdb_collect', skip over the rest of - fast tracepoint collection quickly using a breakpoint. */ - needs_breakpoint = 1; - } - - /* The caller wants a bit of status detail. */ - if (status != NULL) - { - status->tpoint_num = tpoint->number; - status->tpoint_addr = tpoint->address; - status->adjusted_insn_addr = tpoint->adjusted_insn_addr; - status->adjusted_insn_addr_end = tpoint->adjusted_insn_addr_end; - } - - if (needs_breakpoint) - { - /* Hasn't executed the original instruction yet. Set breakpoint - there, and wait till it's hit, then single-step until exiting - the jump pad. */ - - trace_debug ("\ -fast_tracepoint_collecting, returning continue-until-break at %s", - paddress (tpoint->adjusted_insn_addr)); - - return fast_tpoint_collect_result::before_insn; /* continue */ - } - else - { - /* Just single-step until exiting the jump pad. */ - - trace_debug ("fast_tracepoint_collecting, returning " - "need-single-step (%s-%s)", - paddress (tpoint->adjusted_insn_addr), - paddress (tpoint->adjusted_insn_addr_end)); - - return fast_tpoint_collect_result::at_insn; /* single-step */ - } -} - -#endif - -#ifdef IN_PROCESS_AGENT - -/* The global fast tracepoint collect lock. Points to a collecting_t - object built on the stack by the jump pad, if presently locked; - NULL if it isn't locked. Note that this lock *must* be set while - executing any *function other than the jump pad. See - fast_tracepoint_collecting. */ -EXTERN_C_PUSH -IP_AGENT_EXPORT_VAR collecting_t *collecting; -EXTERN_C_POP - -/* This routine, called from the jump pad (in asm) is designed to be - called from the jump pads of fast tracepoints, thus it is on the - critical path. */ - -IP_AGENT_EXPORT_FUNC void -gdb_collect (struct tracepoint *tpoint, unsigned char *regs) -{ - struct fast_tracepoint_ctx ctx; - const struct target_desc *ipa_tdesc; - - /* Don't do anything until the trace run is completely set up. */ - if (!tracing) - return; - - ipa_tdesc = get_ipa_tdesc (ipa_tdesc_idx); - ctx.base.type = fast_tracepoint; - ctx.regs = regs; - ctx.regcache_initted = 0; - /* Wrap the regblock in a register cache (in the stack, we don't - want to malloc here). */ - ctx.regspace = (unsigned char *) alloca (ipa_tdesc->registers_size); - if (ctx.regspace == NULL) - { - trace_debug ("Trace buffer block allocation failed, skipping"); - return; - } - - for (ctx.tpoint = tpoint; - ctx.tpoint != NULL && ctx.tpoint->address == tpoint->address; - ctx.tpoint = ctx.tpoint->next) - { - if (!ctx.tpoint->enabled) - continue; - - /* Multiple tracepoints of different types, such as fast tracepoint and - static tracepoint, can be set at the same address. */ - if (ctx.tpoint->type != tpoint->type) - continue; - - /* Test the condition if present, and collect if true. */ - if (ctx.tpoint->cond == NULL - || condition_true_at_tracepoint ((struct tracepoint_hit_ctx *) &ctx, - ctx.tpoint)) - { - collect_data_at_tracepoint ((struct tracepoint_hit_ctx *) &ctx, - ctx.tpoint->address, ctx.tpoint); - - /* Note that this will cause original insns to be written back - to where we jumped from, but that's OK because we're jumping - back to the next whole instruction. This will go badly if - instruction restoration is not atomic though. */ - if (stopping_tracepoint - || trace_buffer_is_full - || expr_eval_result != expr_eval_no_error) - { - stop_tracing (); - break; - } - } - else - { - /* If there was a condition and it evaluated to false, the only - way we would stop tracing is if there was an error during - condition expression evaluation. */ - if (expr_eval_result != expr_eval_no_error) - { - stop_tracing (); - break; - } - } - } -} - -/* These global variables points to the corresponding functions. This is - necessary on powerpc64, where asking for function symbol address from gdb - results in returning the actual code pointer, instead of the descriptor - pointer. */ - -typedef void (*gdb_collect_ptr_type) (struct tracepoint *, unsigned char *); -typedef ULONGEST (*get_raw_reg_ptr_type) (const unsigned char *, int); -typedef LONGEST (*get_trace_state_variable_value_ptr_type) (int); -typedef void (*set_trace_state_variable_value_ptr_type) (int, LONGEST); - -EXTERN_C_PUSH -IP_AGENT_EXPORT_VAR gdb_collect_ptr_type gdb_collect_ptr = gdb_collect; -IP_AGENT_EXPORT_VAR get_raw_reg_ptr_type get_raw_reg_ptr = get_raw_reg; -IP_AGENT_EXPORT_VAR get_trace_state_variable_value_ptr_type - get_trace_state_variable_value_ptr = get_trace_state_variable_value; -IP_AGENT_EXPORT_VAR set_trace_state_variable_value_ptr_type - set_trace_state_variable_value_ptr = set_trace_state_variable_value; -EXTERN_C_POP - -#endif - -#ifndef IN_PROCESS_AGENT - -CORE_ADDR -get_raw_reg_func_addr (void) -{ - CORE_ADDR res; - if (read_inferior_data_pointer (ipa_sym_addrs.addr_get_raw_reg_ptr, &res)) - { - error ("error extracting get_raw_reg_ptr"); - return 0; - } - return res; -} - -CORE_ADDR -get_get_tsv_func_addr (void) -{ - CORE_ADDR res; - if (read_inferior_data_pointer ( - ipa_sym_addrs.addr_get_trace_state_variable_value_ptr, &res)) - { - error ("error extracting get_trace_state_variable_value_ptr"); - return 0; - } - return res; -} - -CORE_ADDR -get_set_tsv_func_addr (void) -{ - CORE_ADDR res; - if (read_inferior_data_pointer ( - ipa_sym_addrs.addr_set_trace_state_variable_value_ptr, &res)) - { - error ("error extracting set_trace_state_variable_value_ptr"); - return 0; - } - return res; -} - -static void -compile_tracepoint_condition (struct tracepoint *tpoint, - CORE_ADDR *jump_entry) -{ - CORE_ADDR entry_point = *jump_entry; - enum eval_result_type err; - - trace_debug ("Starting condition compilation for tracepoint %d\n", - tpoint->number); - - /* Initialize the global pointer to the code being built. */ - current_insn_ptr = *jump_entry; - - emit_prologue (); - - err = compile_bytecodes (tpoint->cond); - - if (err == expr_eval_no_error) - { - emit_epilogue (); - - /* Record the beginning of the compiled code. */ - tpoint->compiled_cond = entry_point; - - trace_debug ("Condition compilation for tracepoint %d complete\n", - tpoint->number); - } - else - { - /* Leave the unfinished code in situ, but don't point to it. */ - - tpoint->compiled_cond = 0; - - trace_debug ("Condition compilation for tracepoint %d failed, " - "error code %d", - tpoint->number, err); - } - - /* Update the code pointer passed in. Note that we do this even if - the compile fails, so that we can look at the partial results - instead of letting them be overwritten. */ - *jump_entry = current_insn_ptr; - - /* Leave a gap, to aid dump decipherment. */ - *jump_entry += 16; -} - -/* The base pointer of the IPA's heap. This is the only memory the - IPA is allowed to use. The IPA should _not_ call the inferior's - `malloc' during operation. That'd be slow, and, most importantly, - it may not be safe. We may be collecting a tracepoint in a signal - handler, for example. */ -static CORE_ADDR target_tp_heap; - -/* Allocate at least SIZE bytes of memory from the IPA heap, aligned - to 8 bytes. */ - -static CORE_ADDR -target_malloc (ULONGEST size) -{ - CORE_ADDR ptr; - - if (target_tp_heap == 0) - { - /* We have the pointer *address*, need what it points to. */ - if (read_inferior_data_pointer (ipa_sym_addrs.addr_gdb_tp_heap_buffer, - &target_tp_heap)) - { - internal_error (__FILE__, __LINE__, - "couldn't get target heap head pointer"); - } - } - - ptr = target_tp_heap; - target_tp_heap += size; - - /* Pad to 8-byte alignment. */ - target_tp_heap = ((target_tp_heap + 7) & ~0x7); - - return ptr; -} - -static CORE_ADDR -download_agent_expr (struct agent_expr *expr) -{ - CORE_ADDR expr_addr; - CORE_ADDR expr_bytes; - - expr_addr = target_malloc (sizeof (*expr)); - target_write_memory (expr_addr, (unsigned char *) expr, sizeof (*expr)); - - expr_bytes = target_malloc (expr->length); - write_inferior_data_pointer (expr_addr + offsetof (struct agent_expr, bytes), - expr_bytes); - target_write_memory (expr_bytes, expr->bytes, expr->length); - - return expr_addr; -} - -/* Align V up to N bits. */ -#define UALIGN(V, N) (((V) + ((N) - 1)) & ~((N) - 1)) - -/* Sync tracepoint with IPA, but leave maintenance of linked list to caller. */ - -static void -download_tracepoint_1 (struct tracepoint *tpoint) -{ - struct tracepoint target_tracepoint; - CORE_ADDR tpptr = 0; - - gdb_assert (tpoint->type == fast_tracepoint - || tpoint->type == static_tracepoint); - - if (tpoint->cond != NULL && target_emit_ops () != NULL) - { - CORE_ADDR jentry, jump_entry; - - jentry = jump_entry = get_jump_space_head (); - - if (tpoint->cond != NULL) - { - /* Pad to 8-byte alignment. (needed?) */ - /* Actually this should be left for the target to - decide. */ - jentry = UALIGN (jentry, 8); - - compile_tracepoint_condition (tpoint, &jentry); - } - - /* Pad to 8-byte alignment. */ - jentry = UALIGN (jentry, 8); - claim_jump_space (jentry - jump_entry); - } - - target_tracepoint = *tpoint; - - tpptr = target_malloc (sizeof (*tpoint)); - tpoint->obj_addr_on_target = tpptr; - - /* Write the whole object. We'll fix up its pointers in a bit. - Assume no next for now. This is fixed up above on the next - iteration, if there's any. */ - target_tracepoint.next = NULL; - /* Need to clear this here too, since we're downloading the - tracepoints before clearing our own copy. */ - target_tracepoint.hit_count = 0; - - target_write_memory (tpptr, (unsigned char *) &target_tracepoint, - sizeof (target_tracepoint)); - - if (tpoint->cond) - write_inferior_data_pointer (tpptr - + offsetof (struct tracepoint, cond), - download_agent_expr (tpoint->cond)); - - if (tpoint->numactions) - { - int i; - CORE_ADDR actions_array; - - /* The pointers array. */ - actions_array - = target_malloc (sizeof (*tpoint->actions) * tpoint->numactions); - write_inferior_data_pointer (tpptr + offsetof (struct tracepoint, - actions), - actions_array); - - /* Now for each pointer, download the action. */ - for (i = 0; i < tpoint->numactions; i++) - { - struct tracepoint_action *action = tpoint->actions[i]; - CORE_ADDR ipa_action = tracepoint_action_download (action); - - if (ipa_action != 0) - write_inferior_data_pointer (actions_array - + i * sizeof (*tpoint->actions), - ipa_action); - } - } -} - -#define IPA_PROTO_FAST_TRACE_FLAG 0 -#define IPA_PROTO_FAST_TRACE_ADDR_ON_TARGET 2 -#define IPA_PROTO_FAST_TRACE_JUMP_PAD 10 -#define IPA_PROTO_FAST_TRACE_FJUMP_SIZE 18 -#define IPA_PROTO_FAST_TRACE_FJUMP_INSN 22 - -/* Send a command to agent to download and install tracepoint TPOINT. */ - -static int -tracepoint_send_agent (struct tracepoint *tpoint) -{ - char buf[IPA_CMD_BUF_SIZE]; - char *p; - int i, ret; - - p = buf; - strcpy (p, "FastTrace:"); - p += 10; - - COPY_FIELD_TO_BUF (p, tpoint, number); - COPY_FIELD_TO_BUF (p, tpoint, address); - COPY_FIELD_TO_BUF (p, tpoint, type); - COPY_FIELD_TO_BUF (p, tpoint, enabled); - COPY_FIELD_TO_BUF (p, tpoint, step_count); - COPY_FIELD_TO_BUF (p, tpoint, pass_count); - COPY_FIELD_TO_BUF (p, tpoint, numactions); - COPY_FIELD_TO_BUF (p, tpoint, hit_count); - COPY_FIELD_TO_BUF (p, tpoint, traceframe_usage); - COPY_FIELD_TO_BUF (p, tpoint, compiled_cond); - COPY_FIELD_TO_BUF (p, tpoint, orig_size); - - /* condition */ - p = agent_expr_send (p, tpoint->cond); - - /* tracepoint_action */ - for (i = 0; i < tpoint->numactions; i++) - { - struct tracepoint_action *action = tpoint->actions[i]; - - p[0] = action->type; - p = tracepoint_action_send (&p[1], action); - } - - get_jump_space_head (); - /* Copy the value of GDB_JUMP_PAD_HEAD to command buffer, so that - agent can use jump pad from it. */ - if (tpoint->type == fast_tracepoint) - { - memcpy (p, &gdb_jump_pad_head, 8); - p += 8; - } - - ret = run_inferior_command (buf, (int) (ptrdiff_t) (p - buf)); - if (ret) - return ret; - - if (!startswith (buf, "OK")) - return 1; - - /* The value of tracepoint's target address is stored in BUF. */ - memcpy (&tpoint->obj_addr_on_target, - &buf[IPA_PROTO_FAST_TRACE_ADDR_ON_TARGET], 8); - - if (tpoint->type == fast_tracepoint) - { - unsigned char *insn - = (unsigned char *) &buf[IPA_PROTO_FAST_TRACE_FJUMP_INSN]; - int fjump_size; - - trace_debug ("agent: read from cmd_buf 0x%x 0x%x\n", - (unsigned int) tpoint->obj_addr_on_target, - (unsigned int) gdb_jump_pad_head); - - memcpy (&gdb_jump_pad_head, &buf[IPA_PROTO_FAST_TRACE_JUMP_PAD], 8); - - /* This has been done in agent. We should also set up record for it. */ - memcpy (&fjump_size, &buf[IPA_PROTO_FAST_TRACE_FJUMP_SIZE], 4); - /* Wire it in. */ - tpoint->handle - = set_fast_tracepoint_jump (tpoint->address, insn, fjump_size); - } - - return 0; -} - -static void -download_tracepoint (struct tracepoint *tpoint) -{ - struct tracepoint *tp, *tp_prev; - - if (tpoint->type != fast_tracepoint - && tpoint->type != static_tracepoint) - return; - - download_tracepoint_1 (tpoint); - - /* Find the previous entry of TPOINT, which is fast tracepoint or - static tracepoint. */ - tp_prev = NULL; - for (tp = tracepoints; tp != tpoint; tp = tp->next) - { - if (tp->type == fast_tracepoint || tp->type == static_tracepoint) - tp_prev = tp; - } - - if (tp_prev) - { - CORE_ADDR tp_prev_target_next_addr; - - /* Insert TPOINT after TP_PREV in IPA. */ - if (read_inferior_data_pointer (tp_prev->obj_addr_on_target - + offsetof (struct tracepoint, next), - &tp_prev_target_next_addr)) - { - internal_error (__FILE__, __LINE__, - "error reading `tp_prev->next'"); - } - - /* tpoint->next = tp_prev->next */ - write_inferior_data_pointer (tpoint->obj_addr_on_target - + offsetof (struct tracepoint, next), - tp_prev_target_next_addr); - /* tp_prev->next = tpoint */ - write_inferior_data_pointer (tp_prev->obj_addr_on_target - + offsetof (struct tracepoint, next), - tpoint->obj_addr_on_target); - } - else - /* First object in list, set the head pointer in the - inferior. */ - write_inferior_data_pointer (ipa_sym_addrs.addr_tracepoints, - tpoint->obj_addr_on_target); - -} - -static void -download_trace_state_variables (void) -{ - CORE_ADDR ptr = 0, prev_ptr = 0; - struct trace_state_variable *tsv; - - /* Start out empty. */ - write_inferior_data_pointer (ipa_sym_addrs.addr_trace_state_variables, 0); - - for (tsv = trace_state_variables; tsv != NULL; tsv = tsv->next) - { - struct trace_state_variable target_tsv; - - /* TSV's with a getter have been initialized equally in both the - inferior and GDBserver. Skip them. */ - if (tsv->getter != NULL) - continue; - - target_tsv = *tsv; - - prev_ptr = ptr; - ptr = target_malloc (sizeof (*tsv)); - - if (tsv == trace_state_variables) - { - /* First object in list, set the head pointer in the - inferior. */ - - write_inferior_data_pointer (ipa_sym_addrs.addr_trace_state_variables, - ptr); - } - else - { - write_inferior_data_pointer (prev_ptr - + offsetof (struct trace_state_variable, - next), - ptr); - } - - /* Write the whole object. We'll fix up its pointers in a bit. - Assume no next, fixup when needed. */ - target_tsv.next = NULL; - - target_write_memory (ptr, (unsigned char *) &target_tsv, - sizeof (target_tsv)); - - if (tsv->name != NULL) - { - size_t size = strlen (tsv->name) + 1; - CORE_ADDR name_addr = target_malloc (size); - target_write_memory (name_addr, - (unsigned char *) tsv->name, size); - write_inferior_data_pointer (ptr - + offsetof (struct trace_state_variable, - name), - name_addr); - } - - gdb_assert (tsv->getter == NULL); - } - - if (prev_ptr != 0) - { - /* Fixup the next pointer in the last item in the list. */ - write_inferior_data_pointer (prev_ptr - + offsetof (struct trace_state_variable, - next), 0); - } -} - -/* Upload complete trace frames out of the IP Agent's trace buffer - into GDBserver's trace buffer. This always uploads either all or - no trace frames. This is the counter part of - `trace_alloc_trace_buffer'. See its description of the atomic - syncing mechanism. */ - -static void -upload_fast_traceframes (void) -{ - unsigned int ipa_traceframe_read_count, ipa_traceframe_write_count; - unsigned int ipa_traceframe_read_count_racy, ipa_traceframe_write_count_racy; - CORE_ADDR tf; - struct ipa_trace_buffer_control ipa_trace_buffer_ctrl; - unsigned int curr_tbctrl_idx; - unsigned int ipa_trace_buffer_ctrl_curr; - unsigned int ipa_trace_buffer_ctrl_curr_old; - CORE_ADDR ipa_trace_buffer_ctrl_addr; - struct breakpoint *about_to_request_buffer_space_bkpt; - CORE_ADDR ipa_trace_buffer_lo; - CORE_ADDR ipa_trace_buffer_hi; - - if (read_inferior_uinteger (ipa_sym_addrs.addr_traceframe_read_count, - &ipa_traceframe_read_count_racy)) - { - /* This will happen in most targets if the current thread is - running. */ - return; - } - - if (read_inferior_uinteger (ipa_sym_addrs.addr_traceframe_write_count, - &ipa_traceframe_write_count_racy)) - return; - - trace_debug ("ipa_traceframe_count (racy area): %d (w=%d, r=%d)", - ipa_traceframe_write_count_racy - - ipa_traceframe_read_count_racy, - ipa_traceframe_write_count_racy, - ipa_traceframe_read_count_racy); - - if (ipa_traceframe_write_count_racy == ipa_traceframe_read_count_racy) - return; - - about_to_request_buffer_space_bkpt - = set_breakpoint_at (ipa_sym_addrs.addr_about_to_request_buffer_space, - NULL); - - if (read_inferior_uinteger (ipa_sym_addrs.addr_trace_buffer_ctrl_curr, - &ipa_trace_buffer_ctrl_curr)) - return; - - ipa_trace_buffer_ctrl_curr_old = ipa_trace_buffer_ctrl_curr; - - curr_tbctrl_idx = ipa_trace_buffer_ctrl_curr & ~GDBSERVER_FLUSH_COUNT_MASK; - - { - unsigned int prev, counter; - - /* Update the token, with new counters, and the GDBserver stamp - bit. Alway reuse the current TBC index. */ - prev = ipa_trace_buffer_ctrl_curr & GDBSERVER_FLUSH_COUNT_MASK_CURR; - counter = (prev + 0x100) & GDBSERVER_FLUSH_COUNT_MASK_CURR; - - ipa_trace_buffer_ctrl_curr = (GDBSERVER_UPDATED_FLUSH_COUNT_BIT - | (prev << 12) - | counter - | curr_tbctrl_idx); - } - - if (write_inferior_uinteger (ipa_sym_addrs.addr_trace_buffer_ctrl_curr, - ipa_trace_buffer_ctrl_curr)) - return; - - trace_debug ("Lib: Committed %08x -> %08x", - ipa_trace_buffer_ctrl_curr_old, - ipa_trace_buffer_ctrl_curr); - - /* Re-read these, now that we've installed the - `about_to_request_buffer_space' breakpoint/lock. A thread could - have finished a traceframe between the last read of these - counters and setting the breakpoint above. If we start - uploading, we never want to leave this function with - traceframe_read_count != 0, otherwise, GDBserver could end up - incrementing the counter tokens more than once (due to event loop - nesting), which would break the IP agent's "effective" detection - (see trace_alloc_trace_buffer). */ - if (read_inferior_uinteger (ipa_sym_addrs.addr_traceframe_read_count, - &ipa_traceframe_read_count)) - return; - if (read_inferior_uinteger (ipa_sym_addrs.addr_traceframe_write_count, - &ipa_traceframe_write_count)) - return; - - if (debug_threads) - { - trace_debug ("ipa_traceframe_count (blocked area): %d (w=%d, r=%d)", - ipa_traceframe_write_count - ipa_traceframe_read_count, - ipa_traceframe_write_count, ipa_traceframe_read_count); - - if (ipa_traceframe_write_count != ipa_traceframe_write_count_racy - || ipa_traceframe_read_count != ipa_traceframe_read_count_racy) - trace_debug ("note that ipa_traceframe_count's parts changed"); - } - - /* Get the address of the current TBC object (the IP agent has an - array of 3 such objects). The index is stored in the TBC - token. */ - ipa_trace_buffer_ctrl_addr = ipa_sym_addrs.addr_trace_buffer_ctrl; - ipa_trace_buffer_ctrl_addr - += sizeof (struct ipa_trace_buffer_control) * curr_tbctrl_idx; - - if (read_inferior_memory (ipa_trace_buffer_ctrl_addr, - (unsigned char *) &ipa_trace_buffer_ctrl, - sizeof (struct ipa_trace_buffer_control))) - return; - - if (read_inferior_data_pointer (ipa_sym_addrs.addr_trace_buffer_lo, - &ipa_trace_buffer_lo)) - return; - if (read_inferior_data_pointer (ipa_sym_addrs.addr_trace_buffer_hi, - &ipa_trace_buffer_hi)) - return; - - /* Offsets are easier to grok for debugging than raw addresses, - especially for the small trace buffer sizes that are useful for - testing. */ - trace_debug ("Lib: Trace buffer [%d] start=%d free=%d " - "endfree=%d wrap=%d hi=%d", - curr_tbctrl_idx, - (int) (ipa_trace_buffer_ctrl.start - ipa_trace_buffer_lo), - (int) (ipa_trace_buffer_ctrl.free - ipa_trace_buffer_lo), - (int) (ipa_trace_buffer_ctrl.end_free - ipa_trace_buffer_lo), - (int) (ipa_trace_buffer_ctrl.wrap - ipa_trace_buffer_lo), - (int) (ipa_trace_buffer_hi - ipa_trace_buffer_lo)); - - /* Note that the IPA's buffer is always circular. */ - -#define IPA_FIRST_TRACEFRAME() (ipa_trace_buffer_ctrl.start) - -#define IPA_NEXT_TRACEFRAME_1(TF, TFOBJ) \ - ((TF) + sizeof (struct traceframe) + (TFOBJ)->data_size) - -#define IPA_NEXT_TRACEFRAME(TF, TFOBJ) \ - (IPA_NEXT_TRACEFRAME_1 (TF, TFOBJ) \ - - ((IPA_NEXT_TRACEFRAME_1 (TF, TFOBJ) >= ipa_trace_buffer_ctrl.wrap) \ - ? (ipa_trace_buffer_ctrl.wrap - ipa_trace_buffer_lo) \ - : 0)) - - tf = IPA_FIRST_TRACEFRAME (); - - while (ipa_traceframe_write_count - ipa_traceframe_read_count) - { - struct tracepoint *tpoint; - struct traceframe *tframe; - unsigned char *block; - struct traceframe ipa_tframe; - - if (read_inferior_memory (tf, (unsigned char *) &ipa_tframe, - offsetof (struct traceframe, data))) - error ("Uploading: couldn't read traceframe at %s\n", paddress (tf)); - - if (ipa_tframe.tpnum == 0) - { - internal_error (__FILE__, __LINE__, - "Uploading: No (more) fast traceframes, but" - " ipa_traceframe_count == %u??\n", - ipa_traceframe_write_count - - ipa_traceframe_read_count); - } - - /* Note that this will be incorrect for multi-location - tracepoints... */ - tpoint = find_next_tracepoint_by_number (NULL, ipa_tframe.tpnum); - - tframe = add_traceframe (tpoint); - if (tframe == NULL) - { - trace_buffer_is_full = 1; - trace_debug ("Uploading: trace buffer is full"); - } - else - { - /* Copy the whole set of blocks in one go for now. FIXME: - split this in smaller blocks. */ - block = add_traceframe_block (tframe, tpoint, - ipa_tframe.data_size); - if (block != NULL) - { - if (read_inferior_memory (tf - + offsetof (struct traceframe, data), - block, ipa_tframe.data_size)) - error ("Uploading: Couldn't read traceframe data at %s\n", - paddress (tf + offsetof (struct traceframe, data))); - } - - trace_debug ("Uploading: traceframe didn't fit"); - finish_traceframe (tframe); - } - - tf = IPA_NEXT_TRACEFRAME (tf, &ipa_tframe); - - /* If we freed the traceframe that wrapped around, go back - to the non-wrap case. */ - if (tf < ipa_trace_buffer_ctrl.start) - { - trace_debug ("Lib: Discarding past the wraparound"); - ipa_trace_buffer_ctrl.wrap = ipa_trace_buffer_hi; - } - ipa_trace_buffer_ctrl.start = tf; - ipa_trace_buffer_ctrl.end_free = ipa_trace_buffer_ctrl.start; - ++ipa_traceframe_read_count; - - if (ipa_trace_buffer_ctrl.start == ipa_trace_buffer_ctrl.free - && ipa_trace_buffer_ctrl.start == ipa_trace_buffer_ctrl.end_free) - { - trace_debug ("Lib: buffer is fully empty. " - "Trace buffer [%d] start=%d free=%d endfree=%d", - curr_tbctrl_idx, - (int) (ipa_trace_buffer_ctrl.start - - ipa_trace_buffer_lo), - (int) (ipa_trace_buffer_ctrl.free - - ipa_trace_buffer_lo), - (int) (ipa_trace_buffer_ctrl.end_free - - ipa_trace_buffer_lo)); - - ipa_trace_buffer_ctrl.start = ipa_trace_buffer_lo; - ipa_trace_buffer_ctrl.free = ipa_trace_buffer_lo; - ipa_trace_buffer_ctrl.end_free = ipa_trace_buffer_hi; - ipa_trace_buffer_ctrl.wrap = ipa_trace_buffer_hi; - } - - trace_debug ("Uploaded a traceframe\n" - "Lib: Trace buffer [%d] start=%d free=%d " - "endfree=%d wrap=%d hi=%d", - curr_tbctrl_idx, - (int) (ipa_trace_buffer_ctrl.start - ipa_trace_buffer_lo), - (int) (ipa_trace_buffer_ctrl.free - ipa_trace_buffer_lo), - (int) (ipa_trace_buffer_ctrl.end_free - - ipa_trace_buffer_lo), - (int) (ipa_trace_buffer_ctrl.wrap - ipa_trace_buffer_lo), - (int) (ipa_trace_buffer_hi - ipa_trace_buffer_lo)); - } - - if (target_write_memory (ipa_trace_buffer_ctrl_addr, - (unsigned char *) &ipa_trace_buffer_ctrl, - sizeof (struct ipa_trace_buffer_control))) - return; - - write_inferior_integer (ipa_sym_addrs.addr_traceframe_read_count, - ipa_traceframe_read_count); - - trace_debug ("Done uploading traceframes [%d]\n", curr_tbctrl_idx); - - pause_all (1); - - delete_breakpoint (about_to_request_buffer_space_bkpt); - about_to_request_buffer_space_bkpt = NULL; - - unpause_all (1); - - if (trace_buffer_is_full) - stop_tracing (); -} -#endif - -#ifdef IN_PROCESS_AGENT - -IP_AGENT_EXPORT_VAR int ust_loaded; -IP_AGENT_EXPORT_VAR char cmd_buf[IPA_CMD_BUF_SIZE]; - -#ifdef HAVE_UST - -/* Static tracepoints. */ - -/* UST puts a "struct tracepoint" in the global namespace, which - conflicts with our tracepoint. Arguably, being a library, it - shouldn't take ownership of such a generic name. We work around it - here. */ -#define tracepoint ust_tracepoint -#include <ust/ust.h> -#undef tracepoint - -extern int serialize_to_text (char *outbuf, int bufsize, - const char *fmt, va_list ap); - -#define GDB_PROBE_NAME "gdb" - -/* We dynamically search for the UST symbols instead of linking them - in. This lets the user decide if the application uses static - tracepoints, instead of always pulling libust.so in. This vector - holds pointers to all functions we care about. */ - -static struct -{ - int (*serialize_to_text) (char *outbuf, int bufsize, - const char *fmt, va_list ap); - - int (*ltt_probe_register) (struct ltt_available_probe *pdata); - int (*ltt_probe_unregister) (struct ltt_available_probe *pdata); - - int (*ltt_marker_connect) (const char *channel, const char *mname, - const char *pname); - int (*ltt_marker_disconnect) (const char *channel, const char *mname, - const char *pname); - - void (*marker_iter_start) (struct marker_iter *iter); - void (*marker_iter_next) (struct marker_iter *iter); - void (*marker_iter_stop) (struct marker_iter *iter); - void (*marker_iter_reset) (struct marker_iter *iter); -} ust_ops; - -#include <dlfcn.h> - -/* Cast through typeof to catch incompatible API changes. Since UST - only builds with gcc, we can freely use gcc extensions here - too. */ -#define GET_UST_SYM(SYM) \ - do \ - { \ - if (ust_ops.SYM == NULL) \ - ust_ops.SYM = (typeof (&SYM)) dlsym (RTLD_DEFAULT, #SYM); \ - if (ust_ops.SYM == NULL) \ - return 0; \ - } while (0) - -#define USTF(SYM) ust_ops.SYM - -/* Get pointers to all libust.so functions we care about. */ - -static int -dlsym_ust (void) -{ - GET_UST_SYM (serialize_to_text); - - GET_UST_SYM (ltt_probe_register); - GET_UST_SYM (ltt_probe_unregister); - GET_UST_SYM (ltt_marker_connect); - GET_UST_SYM (ltt_marker_disconnect); - - GET_UST_SYM (marker_iter_start); - GET_UST_SYM (marker_iter_next); - GET_UST_SYM (marker_iter_stop); - GET_UST_SYM (marker_iter_reset); - - ust_loaded = 1; - return 1; -} - -/* Given an UST marker, return the matching gdb static tracepoint. - The match is done by address. */ - -static struct tracepoint * -ust_marker_to_static_tracepoint (const struct marker *mdata) -{ - struct tracepoint *tpoint; - - for (tpoint = tracepoints; tpoint; tpoint = tpoint->next) - { - if (tpoint->type != static_tracepoint) - continue; - - if (tpoint->address == (uintptr_t) mdata->location) - return tpoint; - } - - return NULL; -} - -/* The probe function we install on lttng/ust markers. Whenever a - probed ust marker is hit, this function is called. This is similar - to gdb_collect, only for static tracepoints, instead of fast - tracepoints. */ - -static void -gdb_probe (const struct marker *mdata, void *probe_private, - struct registers *regs, void *call_private, - const char *fmt, va_list *args) -{ - struct tracepoint *tpoint; - struct static_tracepoint_ctx ctx; - const struct target_desc *ipa_tdesc; - - /* Don't do anything until the trace run is completely set up. */ - if (!tracing) - { - trace_debug ("gdb_probe: not tracing\n"); - return; - } - - ipa_tdesc = get_ipa_tdesc (ipa_tdesc_idx); - ctx.base.type = static_tracepoint; - ctx.regcache_initted = 0; - ctx.regs = regs; - ctx.fmt = fmt; - ctx.args = args; - - /* Wrap the regblock in a register cache (in the stack, we don't - want to malloc here). */ - ctx.regspace = alloca (ipa_tdesc->registers_size); - if (ctx.regspace == NULL) - { - trace_debug ("Trace buffer block allocation failed, skipping"); - return; - } - - tpoint = ust_marker_to_static_tracepoint (mdata); - if (tpoint == NULL) - { - trace_debug ("gdb_probe: marker not known: " - "loc:0x%p, ch:\"%s\",n:\"%s\",f:\"%s\"", - mdata->location, mdata->channel, - mdata->name, mdata->format); - return; - } - - if (!tpoint->enabled) - { - trace_debug ("gdb_probe: tracepoint disabled"); - return; - } - - ctx.tpoint = tpoint; - - trace_debug ("gdb_probe: collecting marker: " - "loc:0x%p, ch:\"%s\",n:\"%s\",f:\"%s\"", - mdata->location, mdata->channel, - mdata->name, mdata->format); - - /* Test the condition if present, and collect if true. */ - if (tpoint->cond == NULL - || condition_true_at_tracepoint ((struct tracepoint_hit_ctx *) &ctx, - tpoint)) - { - collect_data_at_tracepoint ((struct tracepoint_hit_ctx *) &ctx, - tpoint->address, tpoint); - - if (stopping_tracepoint - || trace_buffer_is_full - || expr_eval_result != expr_eval_no_error) - stop_tracing (); - } - else - { - /* If there was a condition and it evaluated to false, the only - way we would stop tracing is if there was an error during - condition expression evaluation. */ - if (expr_eval_result != expr_eval_no_error) - stop_tracing (); - } -} - -/* Called if the gdb static tracepoint requested collecting "$_sdata", - static tracepoint string data. This is a string passed to the - tracing library by the user, at the time of the tracepoint marker - call. E.g., in the UST marker call: - - trace_mark (ust, bar33, "str %s", "FOOBAZ"); - - the collected data is "str FOOBAZ". -*/ - -static void -collect_ust_data_at_tracepoint (struct tracepoint_hit_ctx *ctx, - struct traceframe *tframe) -{ - struct static_tracepoint_ctx *umd = (struct static_tracepoint_ctx *) ctx; - unsigned char *bufspace; - int size; - va_list copy; - unsigned short blocklen; - - if (umd == NULL) - { - trace_debug ("Wanted to collect static trace data, " - "but there's no static trace data"); - return; - } - - va_copy (copy, *umd->args); - size = USTF(serialize_to_text) (NULL, 0, umd->fmt, copy); - va_end (copy); - - trace_debug ("Want to collect ust data"); - - /* 'S' + size + string */ - bufspace = add_traceframe_block (tframe, umd->tpoint, - 1 + sizeof (blocklen) + size + 1); - if (bufspace == NULL) - { - trace_debug ("Trace buffer block allocation failed, skipping"); - return; - } - - /* Identify a static trace data block. */ - *bufspace = 'S'; - - blocklen = size + 1; - memcpy (bufspace + 1, &blocklen, sizeof (blocklen)); - - va_copy (copy, *umd->args); - USTF(serialize_to_text) ((char *) bufspace + 1 + sizeof (blocklen), - size + 1, umd->fmt, copy); - va_end (copy); - - trace_debug ("Storing static tracepoint data in regblock: %s", - bufspace + 1 + sizeof (blocklen)); -} - -/* The probe to register with lttng/ust. */ -static struct ltt_available_probe gdb_ust_probe = - { - GDB_PROBE_NAME, - NULL, - gdb_probe, - }; - -#endif /* HAVE_UST */ -#endif /* IN_PROCESS_AGENT */ - -#ifndef IN_PROCESS_AGENT - -/* Ask the in-process agent to run a command. Since we don't want to - have to handle the IPA hitting breakpoints while running the - command, we pause all threads, remove all breakpoints, and then set - the helper thread re-running. We communicate with the helper - thread by means of direct memory xfering, and a socket for - synchronization. */ - -static int -run_inferior_command (char *cmd, int len) -{ - int err = -1; - int pid = current_ptid.pid (); - - trace_debug ("run_inferior_command: running: %s", cmd); - - pause_all (0); - uninsert_all_breakpoints (); - - err = agent_run_command (pid, (const char *) cmd, len); - - reinsert_all_breakpoints (); - unpause_all (0); - - return err; -} - -#else /* !IN_PROCESS_AGENT */ - -#include <sys/socket.h> -#include <sys/un.h> - -#ifndef UNIX_PATH_MAX -#define UNIX_PATH_MAX sizeof(((struct sockaddr_un *) NULL)->sun_path) -#endif - -/* Where we put the socked used for synchronization. */ -#define SOCK_DIR P_tmpdir - -/* Thread ID of the helper thread. GDBserver reads this to know which - is the help thread. This is an LWP id on Linux. */ -EXTERN_C_PUSH -IP_AGENT_EXPORT_VAR int helper_thread_id; -EXTERN_C_POP - -static int -init_named_socket (const char *name) -{ - int result, fd; - struct sockaddr_un addr; - - result = fd = socket (PF_UNIX, SOCK_STREAM, 0); - if (result == -1) - { - warning ("socket creation failed: %s", safe_strerror (errno)); - return -1; - } - - addr.sun_family = AF_UNIX; - - strncpy (addr.sun_path, name, UNIX_PATH_MAX); - addr.sun_path[UNIX_PATH_MAX - 1] = '\0'; - - result = access (name, F_OK); - if (result == 0) - { - /* File exists. */ - result = unlink (name); - if (result == -1) - { - warning ("unlink failed: %s", safe_strerror (errno)); - close (fd); - return -1; - } - warning ("socket %s already exists; overwriting", name); - } - - result = bind (fd, (struct sockaddr *) &addr, sizeof (addr)); - if (result == -1) - { - warning ("bind failed: %s", safe_strerror (errno)); - close (fd); - return -1; - } - - result = listen (fd, 1); - if (result == -1) - { - warning ("listen: %s", safe_strerror (errno)); - close (fd); - return -1; - } - - return fd; -} - -static char agent_socket_name[UNIX_PATH_MAX]; - -static int -gdb_agent_socket_init (void) -{ - int result, fd; - - result = xsnprintf (agent_socket_name, UNIX_PATH_MAX, "%s/gdb_ust%d", - SOCK_DIR, getpid ()); - if (result >= UNIX_PATH_MAX) - { - trace_debug ("string overflow allocating socket name"); - return -1; - } - - fd = init_named_socket (agent_socket_name); - if (fd < 0) - warning ("Error initializing named socket (%s) for communication with the " - "ust helper thread. Check that directory exists and that it " - "is writable.", agent_socket_name); - - return fd; -} - -#ifdef HAVE_UST - -/* The next marker to be returned on a qTsSTM command. */ -static const struct marker *next_st; - -/* Returns the first known marker. */ - -struct marker * -first_marker (void) -{ - struct marker_iter iter; - - USTF(marker_iter_reset) (&iter); - USTF(marker_iter_start) (&iter); - - return iter.marker; -} - -/* Returns the marker following M. */ - -const struct marker * -next_marker (const struct marker *m) -{ - struct marker_iter iter; - - USTF(marker_iter_reset) (&iter); - USTF(marker_iter_start) (&iter); - - for (; iter.marker != NULL; USTF(marker_iter_next) (&iter)) - { - if (iter.marker == m) - { - USTF(marker_iter_next) (&iter); - return iter.marker; - } - } - - return NULL; -} - -/* Return an hexstr version of the STR C string, fit for sending to - GDB. */ - -static char * -cstr_to_hexstr (const char *str) -{ - int len = strlen (str); - char *hexstr = xmalloc (len * 2 + 1); - bin2hex ((gdb_byte *) str, hexstr, len); - return hexstr; -} - -/* Compose packet that is the response to the qTsSTM/qTfSTM/qTSTMat - packets. */ - -static void -response_ust_marker (char *packet, const struct marker *st) -{ - char *strid, *format, *tmp; - - next_st = next_marker (st); - - tmp = xmalloc (strlen (st->channel) + 1 + - strlen (st->name) + 1); - sprintf (tmp, "%s/%s", st->channel, st->name); - - strid = cstr_to_hexstr (tmp); - free (tmp); - - format = cstr_to_hexstr (st->format); - - sprintf (packet, "m%s:%s:%s", - paddress ((uintptr_t) st->location), - strid, - format); - - free (strid); - free (format); -} - -/* Return the first static tracepoint, and initialize the state - machine that will iterate through all the static tracepoints. */ - -static void -cmd_qtfstm (char *packet) -{ - trace_debug ("Returning first trace state variable definition"); - - if (first_marker ()) - response_ust_marker (packet, first_marker ()); - else - strcpy (packet, "l"); -} - -/* Return additional trace state variable definitions. */ - -static void -cmd_qtsstm (char *packet) -{ - trace_debug ("Returning static tracepoint"); - - if (next_st) - response_ust_marker (packet, next_st); - else - strcpy (packet, "l"); -} - -/* Disconnect the GDB probe from a marker at a given address. */ - -static void -unprobe_marker_at (char *packet) -{ - char *p = packet; - ULONGEST address; - struct marker_iter iter; - - p += sizeof ("unprobe_marker_at:") - 1; - - p = unpack_varlen_hex (p, &address); - - USTF(marker_iter_reset) (&iter); - USTF(marker_iter_start) (&iter); - for (; iter.marker != NULL; USTF(marker_iter_next) (&iter)) - if ((uintptr_t ) iter.marker->location == address) - { - int result; - - result = USTF(ltt_marker_disconnect) (iter.marker->channel, - iter.marker->name, - GDB_PROBE_NAME); - if (result < 0) - warning ("could not disable marker %s/%s", - iter.marker->channel, iter.marker->name); - break; - } -} - -/* Connect the GDB probe to a marker at a given address. */ - -static int -probe_marker_at (char *packet) -{ - char *p = packet; - ULONGEST address; - struct marker_iter iter; - struct marker *m; - - p += sizeof ("probe_marker_at:") - 1; - - p = unpack_varlen_hex (p, &address); - - USTF(marker_iter_reset) (&iter); - - for (USTF(marker_iter_start) (&iter), m = iter.marker; - m != NULL; - USTF(marker_iter_next) (&iter), m = iter.marker) - if ((uintptr_t ) m->location == address) - { - int result; - - trace_debug ("found marker for address. " - "ltt_marker_connect (marker = %s/%s)", - m->channel, m->name); - - result = USTF(ltt_marker_connect) (m->channel, m->name, - GDB_PROBE_NAME); - if (result && result != -EEXIST) - trace_debug ("ltt_marker_connect (marker = %s/%s, errno = %d)", - m->channel, m->name, -result); - - if (result < 0) - { - sprintf (packet, "E.could not connect marker: channel=%s, name=%s", - m->channel, m->name); - return -1; - } - - strcpy (packet, "OK"); - return 0; - } - - sprintf (packet, "E.no marker found at 0x%s", paddress (address)); - return -1; -} - -static int -cmd_qtstmat (char *packet) -{ - char *p = packet; - ULONGEST address; - struct marker_iter iter; - struct marker *m; - - p += sizeof ("qTSTMat:") - 1; - - p = unpack_varlen_hex (p, &address); - - USTF(marker_iter_reset) (&iter); - - for (USTF(marker_iter_start) (&iter), m = iter.marker; - m != NULL; - USTF(marker_iter_next) (&iter), m = iter.marker) - if ((uintptr_t ) m->location == address) - { - response_ust_marker (packet, m); - return 0; - } - - strcpy (packet, "l"); - return -1; -} - -static void -gdb_ust_init (void) -{ - if (!dlsym_ust ()) - return; - - USTF(ltt_probe_register) (&gdb_ust_probe); -} - -#endif /* HAVE_UST */ - -#include <sys/syscall.h> - -static void -gdb_agent_remove_socket (void) -{ - unlink (agent_socket_name); -} - -/* Helper thread of agent. */ - -static void * -gdb_agent_helper_thread (void *arg) -{ - int listen_fd; - - atexit (gdb_agent_remove_socket); - - while (1) - { - listen_fd = gdb_agent_socket_init (); - - if (helper_thread_id == 0) - helper_thread_id = syscall (SYS_gettid); - - if (listen_fd == -1) - { - warning ("could not create sync socket"); - break; - } - - while (1) - { - socklen_t tmp; - struct sockaddr_un sockaddr; - int fd; - char buf[1]; - int ret; - int stop_loop = 0; - - tmp = sizeof (sockaddr); - - do - { - fd = accept (listen_fd, (struct sockaddr *) &sockaddr, &tmp); - } - /* It seems an ERESTARTSYS can escape out of accept. */ - while (fd == -512 || (fd == -1 && errno == EINTR)); - - if (fd < 0) - { - warning ("Accept returned %d, error: %s", - fd, safe_strerror (errno)); - break; - } - - do - { - ret = read (fd, buf, 1); - } while (ret == -1 && errno == EINTR); - - if (ret == -1) - { - warning ("reading socket (fd=%d) failed with %s", - fd, safe_strerror (errno)); - close (fd); - break; - } - - if (cmd_buf[0]) - { - if (startswith (cmd_buf, "close")) - { - stop_loop = 1; - } -#ifdef HAVE_UST - else if (strcmp ("qTfSTM", cmd_buf) == 0) - { - cmd_qtfstm (cmd_buf); - } - else if (strcmp ("qTsSTM", cmd_buf) == 0) - { - cmd_qtsstm (cmd_buf); - } - else if (startswith (cmd_buf, "unprobe_marker_at:")) - { - unprobe_marker_at (cmd_buf); - } - else if (startswith (cmd_buf, "probe_marker_at:")) - { - probe_marker_at (cmd_buf); - } - else if (startswith (cmd_buf, "qTSTMat:")) - { - cmd_qtstmat (cmd_buf); - } -#endif /* HAVE_UST */ - } - - /* Fix compiler's warning: ignoring return value of 'write'. */ - ret = write (fd, buf, 1); - close (fd); - - if (stop_loop) - { - close (listen_fd); - unlink (agent_socket_name); - - /* Sleep endlessly to wait the whole inferior stops. This - thread can not exit because GDB or GDBserver may still need - 'current_thread' (representing this thread) to access - inferior memory. Otherwise, this thread exits earlier than - other threads, and 'current_thread' is set to NULL. */ - while (1) - sleep (10); - } - } - } - - return NULL; -} - -#include <signal.h> -#include <pthread.h> - -EXTERN_C_PUSH -IP_AGENT_EXPORT_VAR int gdb_agent_capability = AGENT_CAPA_STATIC_TRACE; -EXTERN_C_POP - -static void -gdb_agent_init (void) -{ - int res; - pthread_t thread; - sigset_t new_mask; - sigset_t orig_mask; - - /* We want the helper thread to be as transparent as possible, so - have it inherit an all-signals-blocked mask. */ - - sigfillset (&new_mask); - res = pthread_sigmask (SIG_SETMASK, &new_mask, &orig_mask); - if (res) - perror_with_name ("pthread_sigmask (1)"); - - res = pthread_create (&thread, - NULL, - gdb_agent_helper_thread, - NULL); - - res = pthread_sigmask (SIG_SETMASK, &orig_mask, NULL); - if (res) - perror_with_name ("pthread_sigmask (2)"); - - while (helper_thread_id == 0) - usleep (1); - -#ifdef HAVE_UST - gdb_ust_init (); -#endif -} - -#include <sys/mman.h> - -IP_AGENT_EXPORT_VAR char *gdb_tp_heap_buffer; -IP_AGENT_EXPORT_VAR char *gdb_jump_pad_buffer; -IP_AGENT_EXPORT_VAR char *gdb_jump_pad_buffer_end; -IP_AGENT_EXPORT_VAR char *gdb_trampoline_buffer; -IP_AGENT_EXPORT_VAR char *gdb_trampoline_buffer_end; -IP_AGENT_EXPORT_VAR char *gdb_trampoline_buffer_error; - -/* Record the result of getting buffer space for fast tracepoint - trampolines. Any error message is copied, since caller may not be - using persistent storage. */ - -void -set_trampoline_buffer_space (CORE_ADDR begin, CORE_ADDR end, char *errmsg) -{ - gdb_trampoline_buffer = (char *) (uintptr_t) begin; - gdb_trampoline_buffer_end = (char *) (uintptr_t) end; - if (errmsg) - strncpy (gdb_trampoline_buffer_error, errmsg, 99); - else - strcpy (gdb_trampoline_buffer_error, "no buffer passed"); -} - -static void __attribute__ ((constructor)) -initialize_tracepoint_ftlib (void) -{ - initialize_tracepoint (); - - gdb_agent_init (); -} - -#ifndef HAVE_GETAUXVAL -/* Retrieve the value of TYPE from the auxiliary vector. If TYPE is not - found, 0 is returned. This function is provided if glibc is too old. */ - -unsigned long -getauxval (unsigned long type) -{ - unsigned long data[2]; - FILE *f = fopen ("/proc/self/auxv", "r"); - unsigned long value = 0; - - if (f == NULL) - return 0; - - while (fread (data, sizeof (data), 1, f) > 0) - { - if (data[0] == type) - { - value = data[1]; - break; - } - } - - fclose (f); - return value; -} -#endif - -#endif /* IN_PROCESS_AGENT */ - -/* Return a timestamp, expressed as microseconds of the usual Unix - time. (As the result is a 64-bit number, it will not overflow any - time soon.) */ - -static LONGEST -get_timestamp (void) -{ - using namespace std::chrono; - - steady_clock::time_point now = steady_clock::now (); - return duration_cast<microseconds> (now.time_since_epoch ()).count (); -} - -void -initialize_tracepoint (void) -{ - /* Start with the default size. */ - init_trace_buffer (DEFAULT_TRACE_BUFFER_SIZE); - - /* Wire trace state variable 1 to be the timestamp. This will be - uploaded to GDB upon connection and become one of its trace state - variables. (In case you're wondering, if GDB already has a trace - variable numbered 1, it will be renumbered.) */ - create_trace_state_variable (1, 0); - set_trace_state_variable_name (1, "trace_timestamp"); - set_trace_state_variable_getter (1, get_timestamp); - -#ifdef IN_PROCESS_AGENT - { - int pagesize; - size_t jump_pad_size; - - pagesize = sysconf (_SC_PAGE_SIZE); - if (pagesize == -1) - perror_with_name ("sysconf"); - -#define SCRATCH_BUFFER_NPAGES 20 - - jump_pad_size = pagesize * SCRATCH_BUFFER_NPAGES; - - gdb_tp_heap_buffer = (char *) xmalloc (5 * 1024 * 1024); - gdb_jump_pad_buffer = (char *) alloc_jump_pad_buffer (jump_pad_size); - if (gdb_jump_pad_buffer == NULL) - perror_with_name ("mmap"); - gdb_jump_pad_buffer_end = gdb_jump_pad_buffer + jump_pad_size; - } - - gdb_trampoline_buffer = gdb_trampoline_buffer_end = 0; - - /* It's not a fatal error for something to go wrong with trampoline - buffer setup, but it can be mysterious, so create a channel to - report back on what went wrong, using a fixed size since we may - not be able to allocate space later when the problem occurs. */ - gdb_trampoline_buffer_error = (char *) xmalloc (IPA_BUFSIZ); - - strcpy (gdb_trampoline_buffer_error, "No errors reported"); - - initialize_low_tracepoint (); -#endif -} diff -Nru gdb-9.1/gdb/gdbserver/tracepoint.h gdb-10.2/gdb/gdbserver/tracepoint.h --- gdb-9.1/gdb/gdbserver/tracepoint.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/tracepoint.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,195 +0,0 @@ -/* Tracepoint code for remote server for GDB. - Copyright (C) 1993-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef GDBSERVER_TRACEPOINT_H -#define GDBSERVER_TRACEPOINT_H - -/* Size for a small buffer to report problems from the in-process - agent back to GDBserver. */ -#define IPA_BUFSIZ 100 - -void initialize_tracepoint (void); - -#if defined(__GNUC__) -# define ATTR_USED __attribute__((used)) -# define ATTR_NOINLINE __attribute__((noinline)) -#else -# define ATTR_USED -# define ATTR_NOINLINE -#endif - -/* How to make symbol public/exported. */ - -#if defined _WIN32 || defined __CYGWIN__ -# define EXPORTED_SYMBOL __declspec (dllexport) -#else -# if __GNUC__ >= 4 -# define EXPORTED_SYMBOL __attribute__ ((visibility ("default"))) -# else -# define EXPORTED_SYMBOL -# endif -#endif - -/* Use these to make sure the functions and variables the IPA needs to - export (symbols GDBserver needs to query GDB about) are visible and - have C linkage. - - Tag exported functions with IP_AGENT_EXPORT_FUNC, tag the - definitions of exported variables with IP_AGENT_EXPORT_VAR, and - variable declarations with IP_AGENT_EXPORT_VAR_DECL. Variables - must also be exported with C linkage. As we can't both use extern - "C" and initialize a variable in the same statement, variables that - don't have a separate declaration must use - EXTERN_C_PUSH/EXTERN_C_POP around their definition. */ - -#ifdef IN_PROCESS_AGENT -# define IP_AGENT_EXPORT_FUNC EXTERN_C EXPORTED_SYMBOL ATTR_NOINLINE ATTR_USED -# define IP_AGENT_EXPORT_VAR EXPORTED_SYMBOL ATTR_USED -# define IP_AGENT_EXPORT_VAR_DECL EXTERN_C EXPORTED_SYMBOL -#else -# define IP_AGENT_EXPORT_FUNC -# define IP_AGENT_EXPORT_VAR -# define IP_AGENT_EXPORT_VAR_DECL extern -#endif - -IP_AGENT_EXPORT_VAR_DECL int tracing; - -extern int disconnected_tracing; - -void tracepoint_look_up_symbols (void); - -void stop_tracing (void); - -int handle_tracepoint_general_set (char *own_buf); -int handle_tracepoint_query (char *own_buf); - -int tracepoint_finished_step (struct thread_info *tinfo, CORE_ADDR stop_pc); -int tracepoint_was_hit (struct thread_info *tinfo, CORE_ADDR stop_pc); - -void release_while_stepping_state_list (struct thread_info *tinfo); - -int in_readonly_region (CORE_ADDR addr, ULONGEST length); -int traceframe_read_mem (int tfnum, CORE_ADDR addr, - unsigned char *buf, ULONGEST length, - ULONGEST *nbytes); -int fetch_traceframe_registers (int tfnum, - struct regcache *regcache, - int regnum); - -int traceframe_read_sdata (int tfnum, ULONGEST offset, - unsigned char *buf, ULONGEST length, - ULONGEST *nbytes); - -int traceframe_read_info (int tfnum, struct buffer *buffer); - -/* If a thread is determined to be collecting a fast tracepoint, this - structure holds the collect status. */ - -struct fast_tpoint_collect_status -{ - /* The tracepoint that is presently being collected. */ - int tpoint_num; - CORE_ADDR tpoint_addr; - - /* The address range in the jump pad of where the original - instruction the tracepoint jump was inserted was relocated - to. */ - CORE_ADDR adjusted_insn_addr; - CORE_ADDR adjusted_insn_addr_end; -}; - -/* The possible states a thread can be in, related to the collection of fast - tracepoint. */ - -enum class fast_tpoint_collect_result -{ - /* Not collecting a fast tracepoint. */ - not_collecting, - - /* In the jump pad, but before the relocated instruction. */ - before_insn, - - /* In the jump pad, but at (or after) the relocated instruction. */ - at_insn, -}; - -fast_tpoint_collect_result fast_tracepoint_collecting - (CORE_ADDR thread_area, CORE_ADDR stop_pc, - struct fast_tpoint_collect_status *status); - -void force_unlock_trace_buffer (void); - -int handle_tracepoint_bkpts (struct thread_info *tinfo, CORE_ADDR stop_pc); - -#ifdef IN_PROCESS_AGENT -void initialize_low_tracepoint (void); -const struct target_desc *get_ipa_tdesc (int idx); -void supply_fast_tracepoint_registers (struct regcache *regcache, - const unsigned char *regs); -void supply_static_tracepoint_registers (struct regcache *regcache, - const unsigned char *regs, - CORE_ADDR pc); -void set_trampoline_buffer_space (CORE_ADDR begin, CORE_ADDR end, - char *errmsg); -void *alloc_jump_pad_buffer (size_t size); -#ifndef HAVE_GETAUXVAL -unsigned long getauxval (unsigned long type); -#endif -#else -void stop_tracing (void); - -int claim_trampoline_space (ULONGEST used, CORE_ADDR *trampoline); -int have_fast_tracepoint_trampoline_buffer (char *msgbuf); -void gdb_agent_about_to_close (int pid); -#endif - -struct traceframe; -struct eval_agent_expr_context; - -/* Do memory copies for bytecodes. */ -/* Do the recording of memory blocks for actions and bytecodes. */ - -int agent_mem_read (struct eval_agent_expr_context *ctx, - unsigned char *to, CORE_ADDR from, - ULONGEST len); - -LONGEST agent_get_trace_state_variable_value (int num); -void agent_set_trace_state_variable_value (int num, LONGEST val); - -/* Record the value of a trace state variable. */ - -int agent_tsv_read (struct eval_agent_expr_context *ctx, int n); -int agent_mem_read_string (struct eval_agent_expr_context *ctx, - unsigned char *to, - CORE_ADDR from, - ULONGEST len); - -/* The prototype the get_raw_reg function in the IPA. Each arch's - bytecode compiler emits calls to this function. */ -ULONGEST get_raw_reg (const unsigned char *raw_regs, int regnum); - -/* Returns the address of the get_raw_reg function in the IPA. */ -CORE_ADDR get_raw_reg_func_addr (void); -/* Returns the address of the get_trace_state_variable_value - function in the IPA. */ -CORE_ADDR get_get_tsv_func_addr (void); -/* Returns the address of the set_trace_state_variable_value - function in the IPA. */ -CORE_ADDR get_set_tsv_func_addr (void); - -#endif /* GDBSERVER_TRACEPOINT_H */ diff -Nru gdb-9.1/gdb/gdbserver/utils.c gdb-10.2/gdb/gdbserver/utils.c --- gdb-9.1/gdb/gdbserver/utils.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/utils.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,127 +0,0 @@ -/* General utility routines for the remote server for GDB. - Copyright (C) 1986-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "server.h" - -#ifdef IN_PROCESS_AGENT -# define PREFIX "ipa: " -# define TOOLNAME "GDBserver in-process agent" -#else -# define PREFIX "gdbserver: " -# define TOOLNAME "GDBserver" -#endif - -/* Generally useful subroutines used throughout the program. */ - -void -malloc_failure (long size) -{ - fprintf (stderr, - PREFIX "ran out of memory while trying to allocate %lu bytes\n", - (unsigned long) size); - exit (1); -} - -/* Print the system error message for errno, and also mention STRING - as the file name for which the error was encountered. - Then return to command level. */ - -void -perror_with_name (const char *string) -{ - const char *err; - char *combined; - - err = safe_strerror (errno); - if (err == NULL) - err = "unknown error"; - - combined = (char *) alloca (strlen (err) + strlen (string) + 3); - strcpy (combined, string); - strcat (combined, ": "); - strcat (combined, err); - - error ("%s.", combined); -} - -/* Print an error message and return to top level. */ - -void -verror (const char *string, va_list args) -{ -#ifdef IN_PROCESS_AGENT - fflush (stdout); - vfprintf (stderr, string, args); - fprintf (stderr, "\n"); - exit (1); -#else - throw_verror (GENERIC_ERROR, string, args); -#endif -} - -void -vwarning (const char *string, va_list args) -{ - fprintf (stderr, PREFIX); - vfprintf (stderr, string, args); - fprintf (stderr, "\n"); -} - -/* Report a problem internal to GDBserver, and exit. */ - -void -internal_verror (const char *file, int line, const char *fmt, va_list args) -{ - fprintf (stderr, "\ -%s:%d: A problem internal to " TOOLNAME " has been detected.\n", file, line); - vfprintf (stderr, fmt, args); - fprintf (stderr, "\n"); - exit (1); -} - -/* Report a problem internal to GDBserver. */ - -void -internal_vwarning (const char *file, int line, const char *fmt, va_list args) -{ - fprintf (stderr, "\ -%s:%d: A problem internal to " TOOLNAME " has been detected.\n", file, line); - vfprintf (stderr, fmt, args); - fprintf (stderr, "\n"); -} - -/* Convert a CORE_ADDR into a HEX string, like %lx. - The result is stored in a circular static buffer, NUMCELLS deep. */ - -char * -paddress (CORE_ADDR addr) -{ - return phex_nz (addr, sizeof (CORE_ADDR)); -} - -/* Convert a file descriptor into a printable string. */ - -char * -pfildes (gdb_fildes_t fd) -{ -#if USE_WIN32API - return phex_nz (fd, sizeof (gdb_fildes_t)); -#else - return plongest (fd); -#endif -} diff -Nru gdb-9.1/gdb/gdbserver/utils.h gdb-10.2/gdb/gdbserver/utils.h --- gdb-9.1/gdb/gdbserver/utils.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/utils.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,25 +0,0 @@ -/* General utility routines for the remote server for GDB. - Copyright (C) 1993-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef GDBSERVER_UTILS_H -#define GDBSERVER_UTILS_H - -char *paddress (CORE_ADDR addr); -char *pfildes (gdb_fildes_t fd); - -#endif /* GDBSERVER_UTILS_H */ diff -Nru gdb-9.1/gdb/gdbserver/win32-arm-low.c gdb-10.2/gdb/gdbserver/win32-arm-low.c --- gdb-9.1/gdb/gdbserver/win32-arm-low.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/win32-arm-low.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,134 +0,0 @@ -/* Copyright (C) 2007-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "server.h" -#include "win32-low.h" - -#ifndef CONTEXT_FLOATING_POINT -#define CONTEXT_FLOATING_POINT 0 -#endif - -/* Defined in auto-generated file reg-arm.c. */ -void init_registers_arm (void); -extern const struct target_desc *tdesc_arm; - -static void -arm_get_thread_context (win32_thread_info *th) -{ - th->context.ContextFlags = \ - CONTEXT_FULL | \ - CONTEXT_FLOATING_POINT; - - GetThreadContext (th->h, &th->context); -} - -#define context_offset(x) ((int)&(((CONTEXT *)NULL)->x)) -static const int mappings[] = { - context_offset (R0), - context_offset (R1), - context_offset (R2), - context_offset (R3), - context_offset (R4), - context_offset (R5), - context_offset (R6), - context_offset (R7), - context_offset (R8), - context_offset (R9), - context_offset (R10), - context_offset (R11), - context_offset (R12), - context_offset (Sp), - context_offset (Lr), - context_offset (Pc), - -1, /* f0 */ - -1, /* f1 */ - -1, /* f2 */ - -1, /* f3 */ - -1, /* f4 */ - -1, /* f5 */ - -1, /* f6 */ - -1, /* f7 */ - -1, /* fps */ - context_offset (Psr), -}; -#undef context_offset - -/* Return a pointer into a CONTEXT field indexed by gdb register number. - Return a pointer to an dummy register holding zero if there is no - corresponding CONTEXT field for the given register number. */ -static char * -regptr (CONTEXT* c, int r) -{ - if (mappings[r] < 0) - { - static ULONG zero; - /* Always force value to zero, in case the user tried to write - to this register before. */ - zero = 0; - return (char *) &zero; - } - else - return (char *) c + mappings[r]; -} - -/* Fetch register from gdbserver regcache data. */ -static void -arm_fetch_inferior_register (struct regcache *regcache, - win32_thread_info *th, int r) -{ - char *context_offset = regptr (&th->context, r); - supply_register (regcache, r, context_offset); -} - -/* Store a new register value into the thread context of TH. */ -static void -arm_store_inferior_register (struct regcache *regcache, - win32_thread_info *th, int r) -{ - collect_register (regcache, r, regptr (&th->context, r)); -} - -static void -arm_arch_setup (void) -{ - init_registers_arm (); - win32_tdesc = tdesc_arm; -} - -/* Correct in either endianness. We do not support Thumb yet. */ -static const unsigned long arm_wince_breakpoint = 0xe6000010; -#define arm_wince_breakpoint_len 4 - -struct win32_target_ops the_low_target = { - arm_arch_setup, - sizeof (mappings) / sizeof (mappings[0]), - NULL, /* initial_stuff */ - arm_get_thread_context, - NULL, /* prepare_to_resume */ - NULL, /* thread_added */ - arm_fetch_inferior_register, - arm_store_inferior_register, - NULL, /* single_step */ - (const unsigned char *) &arm_wince_breakpoint, - arm_wince_breakpoint_len, - /* Watchpoint related functions. See target.h for comments. */ - NULL, /* supports_z_point_type */ - NULL, /* insert_point */ - NULL, /* remove_point */ - NULL, /* stopped_by_watchpoint */ - NULL /* stopped_data_address */ -}; diff -Nru gdb-9.1/gdb/gdbserver/win32-i386-low.c gdb-10.2/gdb/gdbserver/win32-i386-low.c --- gdb-9.1/gdb/gdbserver/win32-i386-low.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/win32-i386-low.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,468 +0,0 @@ -/* Copyright (C) 2007-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "server.h" -#include "win32-low.h" -#include "x86-low.h" -#include "gdbsupport/x86-xstate.h" -#ifdef __x86_64__ -#include "arch/amd64.h" -#endif -#include "arch/i386.h" -#include "tdesc.h" -#include "x86-tdesc.h" - -#ifndef CONTEXT_EXTENDED_REGISTERS -#define CONTEXT_EXTENDED_REGISTERS 0 -#endif - -#define FCS_REGNUM 27 -#define FOP_REGNUM 31 - -#define FLAG_TRACE_BIT 0x100 - -static struct x86_debug_reg_state debug_reg_state; - -static void -update_debug_registers (thread_info *thread) -{ - win32_thread_info *th = (win32_thread_info *) thread_target_data (thread); - - /* The actual update is done later just before resuming the lwp, - we just mark that the registers need updating. */ - th->debug_registers_changed = 1; -} - -/* Update the inferior's debug register REGNUM from STATE. */ - -static void -x86_dr_low_set_addr (int regnum, CORE_ADDR addr) -{ - gdb_assert (DR_FIRSTADDR <= regnum && regnum <= DR_LASTADDR); - - /* Only update the threads of this process. */ - for_each_thread (current_thread->id.pid (), update_debug_registers); -} - -/* Update the inferior's DR7 debug control register from STATE. */ - -static void -x86_dr_low_set_control (unsigned long control) -{ - /* Only update the threads of this process. */ - for_each_thread (current_thread->id.pid (), update_debug_registers); -} - -/* Return the current value of a DR register of the current thread's - context. */ - -static DWORD64 -win32_get_current_dr (int dr) -{ - win32_thread_info *th - = (win32_thread_info *) thread_target_data (current_thread); - - win32_require_context (th); - -#define RET_DR(DR) \ - case DR: \ - return th->context.Dr ## DR - - switch (dr) - { - RET_DR (0); - RET_DR (1); - RET_DR (2); - RET_DR (3); - RET_DR (6); - RET_DR (7); - } - -#undef RET_DR - - gdb_assert_not_reached ("unhandled dr"); -} - -static CORE_ADDR -x86_dr_low_get_addr (int regnum) -{ - gdb_assert (DR_FIRSTADDR <= regnum && regnum <= DR_LASTADDR); - - return win32_get_current_dr (regnum - DR_FIRSTADDR); -} - -static unsigned long -x86_dr_low_get_control (void) -{ - return win32_get_current_dr (7); -} - -/* Get the value of the DR6 debug status register from the inferior - and record it in STATE. */ - -static unsigned long -x86_dr_low_get_status (void) -{ - return win32_get_current_dr (6); -} - -/* Low-level function vector. */ -struct x86_dr_low_type x86_dr_low = - { - x86_dr_low_set_control, - x86_dr_low_set_addr, - x86_dr_low_get_addr, - x86_dr_low_get_status, - x86_dr_low_get_control, - sizeof (void *), - }; - -/* Breakpoint/watchpoint support. */ - -static int -i386_supports_z_point_type (char z_type) -{ - switch (z_type) - { - case Z_PACKET_WRITE_WP: - case Z_PACKET_ACCESS_WP: - return 1; - default: - return 0; - } -} - -static int -i386_insert_point (enum raw_bkpt_type type, CORE_ADDR addr, - int size, struct raw_breakpoint *bp) -{ - switch (type) - { - case raw_bkpt_type_write_wp: - case raw_bkpt_type_access_wp: - { - enum target_hw_bp_type hw_type - = raw_bkpt_type_to_target_hw_bp_type (type); - - return x86_dr_insert_watchpoint (&debug_reg_state, - hw_type, addr, size); - } - default: - /* Unsupported. */ - return 1; - } -} - -static int -i386_remove_point (enum raw_bkpt_type type, CORE_ADDR addr, - int size, struct raw_breakpoint *bp) -{ - switch (type) - { - case raw_bkpt_type_write_wp: - case raw_bkpt_type_access_wp: - { - enum target_hw_bp_type hw_type - = raw_bkpt_type_to_target_hw_bp_type (type); - - return x86_dr_remove_watchpoint (&debug_reg_state, - hw_type, addr, size); - } - default: - /* Unsupported. */ - return 1; - } -} - -static int -x86_stopped_by_watchpoint (void) -{ - return x86_dr_stopped_by_watchpoint (&debug_reg_state); -} - -static CORE_ADDR -x86_stopped_data_address (void) -{ - CORE_ADDR addr; - if (x86_dr_stopped_data_address (&debug_reg_state, &addr)) - return addr; - return 0; -} - -static void -i386_initial_stuff (void) -{ - x86_low_init_dregs (&debug_reg_state); -} - -static void -i386_get_thread_context (win32_thread_info *th) -{ - /* Requesting the CONTEXT_EXTENDED_REGISTERS register set fails if - the system doesn't support extended registers. */ - static DWORD extended_registers = CONTEXT_EXTENDED_REGISTERS; - - again: - th->context.ContextFlags = (CONTEXT_FULL - | CONTEXT_FLOATING_POINT - | CONTEXT_DEBUG_REGISTERS - | extended_registers); - - if (!GetThreadContext (th->h, &th->context)) - { - DWORD e = GetLastError (); - - if (extended_registers && e == ERROR_INVALID_PARAMETER) - { - extended_registers = 0; - goto again; - } - - error ("GetThreadContext failure %ld\n", (long) e); - } -} - -static void -i386_prepare_to_resume (win32_thread_info *th) -{ - if (th->debug_registers_changed) - { - struct x86_debug_reg_state *dr = &debug_reg_state; - - win32_require_context (th); - - th->context.Dr0 = dr->dr_mirror[0]; - th->context.Dr1 = dr->dr_mirror[1]; - th->context.Dr2 = dr->dr_mirror[2]; - th->context.Dr3 = dr->dr_mirror[3]; - /* th->context.Dr6 = dr->dr_status_mirror; - FIXME: should we set dr6 also ?? */ - th->context.Dr7 = dr->dr_control_mirror; - - th->debug_registers_changed = 0; - } -} - -static void -i386_thread_added (win32_thread_info *th) -{ - th->debug_registers_changed = 1; -} - -static void -i386_single_step (win32_thread_info *th) -{ - th->context.EFlags |= FLAG_TRACE_BIT; -} - -#ifndef __x86_64__ - -/* An array of offset mappings into a Win32 Context structure. - This is a one-to-one mapping which is indexed by gdb's register - numbers. It retrieves an offset into the context structure where - the 4 byte register is located. - An offset value of -1 indicates that Win32 does not provide this - register in it's CONTEXT structure. In this case regptr will return - a pointer into a dummy register. */ -#define context_offset(x) ((int)&(((CONTEXT *)NULL)->x)) -static const int mappings[] = { - context_offset (Eax), - context_offset (Ecx), - context_offset (Edx), - context_offset (Ebx), - context_offset (Esp), - context_offset (Ebp), - context_offset (Esi), - context_offset (Edi), - context_offset (Eip), - context_offset (EFlags), - context_offset (SegCs), - context_offset (SegSs), - context_offset (SegDs), - context_offset (SegEs), - context_offset (SegFs), - context_offset (SegGs), - context_offset (FloatSave.RegisterArea[0 * 10]), - context_offset (FloatSave.RegisterArea[1 * 10]), - context_offset (FloatSave.RegisterArea[2 * 10]), - context_offset (FloatSave.RegisterArea[3 * 10]), - context_offset (FloatSave.RegisterArea[4 * 10]), - context_offset (FloatSave.RegisterArea[5 * 10]), - context_offset (FloatSave.RegisterArea[6 * 10]), - context_offset (FloatSave.RegisterArea[7 * 10]), - context_offset (FloatSave.ControlWord), - context_offset (FloatSave.StatusWord), - context_offset (FloatSave.TagWord), - context_offset (FloatSave.ErrorSelector), - context_offset (FloatSave.ErrorOffset), - context_offset (FloatSave.DataSelector), - context_offset (FloatSave.DataOffset), - context_offset (FloatSave.ErrorSelector), - /* XMM0-7 */ - context_offset (ExtendedRegisters[10 * 16]), - context_offset (ExtendedRegisters[11 * 16]), - context_offset (ExtendedRegisters[12 * 16]), - context_offset (ExtendedRegisters[13 * 16]), - context_offset (ExtendedRegisters[14 * 16]), - context_offset (ExtendedRegisters[15 * 16]), - context_offset (ExtendedRegisters[16 * 16]), - context_offset (ExtendedRegisters[17 * 16]), - /* MXCSR */ - context_offset (ExtendedRegisters[24]) -}; -#undef context_offset - -#else /* __x86_64__ */ - -#define context_offset(x) (offsetof (CONTEXT, x)) -static const int mappings[] = -{ - context_offset (Rax), - context_offset (Rbx), - context_offset (Rcx), - context_offset (Rdx), - context_offset (Rsi), - context_offset (Rdi), - context_offset (Rbp), - context_offset (Rsp), - context_offset (R8), - context_offset (R9), - context_offset (R10), - context_offset (R11), - context_offset (R12), - context_offset (R13), - context_offset (R14), - context_offset (R15), - context_offset (Rip), - context_offset (EFlags), - context_offset (SegCs), - context_offset (SegSs), - context_offset (SegDs), - context_offset (SegEs), - context_offset (SegFs), - context_offset (SegGs), - context_offset (FloatSave.FloatRegisters[0]), - context_offset (FloatSave.FloatRegisters[1]), - context_offset (FloatSave.FloatRegisters[2]), - context_offset (FloatSave.FloatRegisters[3]), - context_offset (FloatSave.FloatRegisters[4]), - context_offset (FloatSave.FloatRegisters[5]), - context_offset (FloatSave.FloatRegisters[6]), - context_offset (FloatSave.FloatRegisters[7]), - context_offset (FloatSave.ControlWord), - context_offset (FloatSave.StatusWord), - context_offset (FloatSave.TagWord), - context_offset (FloatSave.ErrorSelector), - context_offset (FloatSave.ErrorOffset), - context_offset (FloatSave.DataSelector), - context_offset (FloatSave.DataOffset), - context_offset (FloatSave.ErrorSelector) - /* XMM0-7 */ , - context_offset (Xmm0), - context_offset (Xmm1), - context_offset (Xmm2), - context_offset (Xmm3), - context_offset (Xmm4), - context_offset (Xmm5), - context_offset (Xmm6), - context_offset (Xmm7), - context_offset (Xmm8), - context_offset (Xmm9), - context_offset (Xmm10), - context_offset (Xmm11), - context_offset (Xmm12), - context_offset (Xmm13), - context_offset (Xmm14), - context_offset (Xmm15), - /* MXCSR */ - context_offset (FloatSave.MxCsr) -}; -#undef context_offset - -#endif /* __x86_64__ */ - -/* Fetch register from gdbserver regcache data. */ -static void -i386_fetch_inferior_register (struct regcache *regcache, - win32_thread_info *th, int r) -{ - char *context_offset = (char *) &th->context + mappings[r]; - - long l; - if (r == FCS_REGNUM) - { - l = *((long *) context_offset) & 0xffff; - supply_register (regcache, r, (char *) &l); - } - else if (r == FOP_REGNUM) - { - l = (*((long *) context_offset) >> 16) & ((1 << 11) - 1); - supply_register (regcache, r, (char *) &l); - } - else - supply_register (regcache, r, context_offset); -} - -/* Store a new register value into the thread context of TH. */ -static void -i386_store_inferior_register (struct regcache *regcache, - win32_thread_info *th, int r) -{ - char *context_offset = (char *) &th->context + mappings[r]; - collect_register (regcache, r, context_offset); -} - -static const unsigned char i386_win32_breakpoint = 0xcc; -#define i386_win32_breakpoint_len 1 - -static void -i386_arch_setup (void) -{ - struct target_desc *tdesc; - -#ifdef __x86_64__ - tdesc = amd64_create_target_description (X86_XSTATE_SSE_MASK, false, - false, false); - const char **expedite_regs = amd64_expedite_regs; -#else - tdesc = i386_create_target_description (X86_XSTATE_SSE_MASK, false, false); - const char **expedite_regs = i386_expedite_regs; -#endif - - init_target_desc (tdesc, expedite_regs); - - win32_tdesc = tdesc; -} - -struct win32_target_ops the_low_target = { - i386_arch_setup, - sizeof (mappings) / sizeof (mappings[0]), - i386_initial_stuff, - i386_get_thread_context, - i386_prepare_to_resume, - i386_thread_added, - i386_fetch_inferior_register, - i386_store_inferior_register, - i386_single_step, - &i386_win32_breakpoint, - i386_win32_breakpoint_len, - i386_supports_z_point_type, - i386_insert_point, - i386_remove_point, - x86_stopped_by_watchpoint, - x86_stopped_data_address -}; diff -Nru gdb-9.1/gdb/gdbserver/win32-low.c gdb-10.2/gdb/gdbserver/win32-low.c --- gdb-9.1/gdb/gdbserver/win32-low.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/win32-low.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,1864 +0,0 @@ -/* Low level interface to Windows debugging, for gdbserver. - Copyright (C) 2006-2020 Free Software Foundation, Inc. - - Contributed by Leo Zayas. Based on "win32-nat.c" from GDB. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "server.h" -#include "regcache.h" -#include "gdb/fileio.h" -#include "mem-break.h" -#include "win32-low.h" -#include "gdbthread.h" -#include "dll.h" -#include "hostio.h" -#include <windows.h> -#include <winnt.h> -#include <imagehlp.h> -#include <tlhelp32.h> -#include <psapi.h> -#include <process.h> -#include "gdbsupport/gdb_tilde_expand.h" -#include "gdbsupport/common-inferior.h" - -#ifndef USE_WIN32API -#include <sys/cygwin.h> -#endif - -#define OUTMSG(X) do { printf X; fflush (stderr); } while (0) - -#define OUTMSG2(X) \ - do \ - { \ - if (debug_threads) \ - { \ - printf X; \ - fflush (stderr); \ - } \ - } while (0) - -#ifndef _T -#define _T(x) TEXT (x) -#endif - -#ifndef COUNTOF -#define COUNTOF(STR) (sizeof (STR) / sizeof ((STR)[0])) -#endif - -#ifdef _WIN32_WCE -# define GETPROCADDRESS(DLL, PROC) \ - ((winapi_ ## PROC) GetProcAddress (DLL, TEXT (#PROC))) -#else -# define GETPROCADDRESS(DLL, PROC) \ - ((winapi_ ## PROC) GetProcAddress (DLL, #PROC)) -#endif - -int using_threads = 1; - -/* Globals. */ -static int attaching = 0; -static HANDLE current_process_handle = NULL; -static DWORD current_process_id = 0; -static DWORD main_thread_id = 0; -static enum gdb_signal last_sig = GDB_SIGNAL_0; - -/* The current debug event from WaitForDebugEvent. */ -static DEBUG_EVENT current_event; - -/* A status that hasn't been reported to the core yet, and so - win32_wait should return it next, instead of fetching the next - debug event off the win32 API. */ -static struct target_waitstatus cached_status; - -/* Non zero if an interrupt request is to be satisfied by suspending - all threads. */ -static int soft_interrupt_requested = 0; - -/* Non zero if the inferior is stopped in a simulated breakpoint done - by suspending all the threads. */ -static int faked_breakpoint = 0; - -const struct target_desc *win32_tdesc; - -#define NUM_REGS (the_low_target.num_regs) - -typedef BOOL (WINAPI *winapi_DebugActiveProcessStop) (DWORD dwProcessId); -typedef BOOL (WINAPI *winapi_DebugSetProcessKillOnExit) (BOOL KillOnExit); -typedef BOOL (WINAPI *winapi_DebugBreakProcess) (HANDLE); -typedef BOOL (WINAPI *winapi_GenerateConsoleCtrlEvent) (DWORD, DWORD); - -static ptid_t win32_wait (ptid_t ptid, struct target_waitstatus *ourstatus, - int options); -static void win32_resume (struct thread_resume *resume_info, size_t n); -#ifndef _WIN32_WCE -static void win32_add_all_dlls (void); -#endif - -/* Get the thread ID from the current selected inferior (the current - thread). */ -static ptid_t -current_thread_ptid (void) -{ - return current_ptid; -} - -/* The current debug event from WaitForDebugEvent. */ -static ptid_t -debug_event_ptid (DEBUG_EVENT *event) -{ - return ptid_t (event->dwProcessId, event->dwThreadId, 0); -} - -/* Get the thread context of the thread associated with TH. */ - -static void -win32_get_thread_context (win32_thread_info *th) -{ - memset (&th->context, 0, sizeof (CONTEXT)); - (*the_low_target.get_thread_context) (th); -#ifdef _WIN32_WCE - memcpy (&th->base_context, &th->context, sizeof (CONTEXT)); -#endif -} - -/* Set the thread context of the thread associated with TH. */ - -static void -win32_set_thread_context (win32_thread_info *th) -{ -#ifdef _WIN32_WCE - /* Calling SuspendThread on a thread that is running kernel code - will report that the suspending was successful, but in fact, that - will often not be true. In those cases, the context returned by - GetThreadContext will not be correct by the time the thread - stops, hence we can't set that context back into the thread when - resuming - it will most likely crash the inferior. - Unfortunately, there is no way to know when the thread will - really stop. To work around it, we'll only write the context - back to the thread when either the user or GDB explicitly change - it between stopping and resuming. */ - if (memcmp (&th->context, &th->base_context, sizeof (CONTEXT)) != 0) -#endif - SetThreadContext (th->h, &th->context); -} - -/* Set the thread context of the thread associated with TH. */ - -static void -win32_prepare_to_resume (win32_thread_info *th) -{ - if (the_low_target.prepare_to_resume != NULL) - (*the_low_target.prepare_to_resume) (th); -} - -/* See win32-low.h. */ - -void -win32_require_context (win32_thread_info *th) -{ - if (th->context.ContextFlags == 0) - { - if (!th->suspended) - { - if (SuspendThread (th->h) == (DWORD) -1) - { - DWORD err = GetLastError (); - OUTMSG (("warning: SuspendThread failed in thread_rec, " - "(error %d): %s\n", (int) err, strwinerror (err))); - } - else - th->suspended = 1; - } - - win32_get_thread_context (th); - } -} - -/* Find a thread record given a thread id. If GET_CONTEXT is set then - also retrieve the context for this thread. */ -static win32_thread_info * -thread_rec (ptid_t ptid, int get_context) -{ - thread_info *thread = find_thread_ptid (ptid); - if (thread == NULL) - return NULL; - - win32_thread_info *th = (win32_thread_info *) thread_target_data (thread); - if (get_context) - win32_require_context (th); - return th; -} - -/* Add a thread to the thread list. */ -static win32_thread_info * -child_add_thread (DWORD pid, DWORD tid, HANDLE h, void *tlb) -{ - win32_thread_info *th; - ptid_t ptid = ptid_t (pid, tid, 0); - - if ((th = thread_rec (ptid, FALSE))) - return th; - - th = XCNEW (win32_thread_info); - th->tid = tid; - th->h = h; - th->thread_local_base = (CORE_ADDR) (uintptr_t) tlb; - - add_thread (ptid, th); - - if (the_low_target.thread_added != NULL) - (*the_low_target.thread_added) (th); - - return th; -} - -/* Delete a thread from the list of threads. */ -static void -delete_thread_info (thread_info *thread) -{ - win32_thread_info *th = (win32_thread_info *) thread_target_data (thread); - - remove_thread (thread); - CloseHandle (th->h); - free (th); -} - -/* Delete a thread from the list of threads. */ -static void -child_delete_thread (DWORD pid, DWORD tid) -{ - /* If the last thread is exiting, just return. */ - if (all_threads.size () == 1) - return; - - thread_info *thread = find_thread_ptid (ptid_t (pid, tid)); - if (thread == NULL) - return; - - delete_thread_info (thread); -} - -/* These watchpoint related wrapper functions simply pass on the function call - if the low target has registered a corresponding function. */ - -static int -win32_supports_z_point_type (char z_type) -{ - return (the_low_target.supports_z_point_type != NULL - && the_low_target.supports_z_point_type (z_type)); -} - -static int -win32_insert_point (enum raw_bkpt_type type, CORE_ADDR addr, - int size, struct raw_breakpoint *bp) -{ - if (the_low_target.insert_point != NULL) - return the_low_target.insert_point (type, addr, size, bp); - else - /* Unsupported (see target.h). */ - return 1; -} - -static int -win32_remove_point (enum raw_bkpt_type type, CORE_ADDR addr, - int size, struct raw_breakpoint *bp) -{ - if (the_low_target.remove_point != NULL) - return the_low_target.remove_point (type, addr, size, bp); - else - /* Unsupported (see target.h). */ - return 1; -} - -static int -win32_stopped_by_watchpoint (void) -{ - if (the_low_target.stopped_by_watchpoint != NULL) - return the_low_target.stopped_by_watchpoint (); - else - return 0; -} - -static CORE_ADDR -win32_stopped_data_address (void) -{ - if (the_low_target.stopped_data_address != NULL) - return the_low_target.stopped_data_address (); - else - return 0; -} - - -/* Transfer memory from/to the debugged process. */ -static int -child_xfer_memory (CORE_ADDR memaddr, char *our, int len, - int write, struct target_ops *target) -{ - BOOL success; - SIZE_T done = 0; - DWORD lasterror = 0; - uintptr_t addr = (uintptr_t) memaddr; - - if (write) - { - success = WriteProcessMemory (current_process_handle, (LPVOID) addr, - (LPCVOID) our, len, &done); - if (!success) - lasterror = GetLastError (); - FlushInstructionCache (current_process_handle, (LPCVOID) addr, len); - } - else - { - success = ReadProcessMemory (current_process_handle, (LPCVOID) addr, - (LPVOID) our, len, &done); - if (!success) - lasterror = GetLastError (); - } - if (!success && lasterror == ERROR_PARTIAL_COPY && done > 0) - return done; - else - return success ? done : -1; -} - -/* Clear out any old thread list and reinitialize it to a pristine - state. */ -static void -child_init_thread_list (void) -{ - for_each_thread (delete_thread_info); -} - -/* Zero during the child initialization phase, and nonzero otherwise. */ - -static int child_initialization_done = 0; - -static void -do_initial_child_stuff (HANDLE proch, DWORD pid, int attached) -{ - struct process_info *proc; - - last_sig = GDB_SIGNAL_0; - - current_process_handle = proch; - current_process_id = pid; - main_thread_id = 0; - - soft_interrupt_requested = 0; - faked_breakpoint = 0; - - memset (¤t_event, 0, sizeof (current_event)); - - proc = add_process (pid, attached); - proc->tdesc = win32_tdesc; - child_init_thread_list (); - child_initialization_done = 0; - - if (the_low_target.initial_stuff != NULL) - (*the_low_target.initial_stuff) (); - - cached_status.kind = TARGET_WAITKIND_IGNORE; - - /* Flush all currently pending debug events (thread and dll list) up - to the initial breakpoint. */ - while (1) - { - struct target_waitstatus status; - - win32_wait (minus_one_ptid, &status, 0); - - /* Note win32_wait doesn't return thread events. */ - if (status.kind != TARGET_WAITKIND_LOADED) - { - cached_status = status; - break; - } - - { - struct thread_resume resume; - - resume.thread = minus_one_ptid; - resume.kind = resume_continue; - resume.sig = 0; - - win32_resume (&resume, 1); - } - } - -#ifndef _WIN32_WCE - /* Now that the inferior has been started and all DLLs have been mapped, - we can iterate over all DLLs and load them in. - - We avoid doing it any earlier because, on certain versions of Windows, - LOAD_DLL_DEBUG_EVENTs are sometimes not complete. In particular, - we have seen on Windows 8.1 that the ntdll.dll load event does not - include the DLL name, preventing us from creating an associated SO. - A possible explanation is that ntdll.dll might be mapped before - the SO info gets created by the Windows system -- ntdll.dll is - the first DLL to be reported via LOAD_DLL_DEBUG_EVENT and other DLLs - do not seem to suffer from that problem. - - Rather than try to work around this sort of issue, it is much - simpler to just ignore DLL load/unload events during the startup - phase, and then process them all in one batch now. */ - win32_add_all_dlls (); -#endif - - child_initialization_done = 1; -} - -/* Resume all artificially suspended threads if we are continuing - execution. */ -static void -continue_one_thread (thread_info *thread, int thread_id) -{ - win32_thread_info *th = (win32_thread_info *) thread_target_data (thread); - - if (thread_id == -1 || thread_id == th->tid) - { - win32_prepare_to_resume (th); - - if (th->suspended) - { - if (th->context.ContextFlags) - { - win32_set_thread_context (th); - th->context.ContextFlags = 0; - } - - if (ResumeThread (th->h) == (DWORD) -1) - { - DWORD err = GetLastError (); - OUTMSG (("warning: ResumeThread failed in continue_one_thread, " - "(error %d): %s\n", (int) err, strwinerror (err))); - } - th->suspended = 0; - } - } -} - -static BOOL -child_continue (DWORD continue_status, int thread_id) -{ - /* The inferior will only continue after the ContinueDebugEvent - call. */ - for_each_thread ([&] (thread_info *thread) - { - continue_one_thread (thread, thread_id); - }); - faked_breakpoint = 0; - - if (!ContinueDebugEvent (current_event.dwProcessId, - current_event.dwThreadId, - continue_status)) - return FALSE; - - return TRUE; -} - -/* Fetch register(s) from the current thread context. */ -static void -child_fetch_inferior_registers (struct regcache *regcache, int r) -{ - int regno; - win32_thread_info *th = thread_rec (current_thread_ptid (), TRUE); - if (r == -1 || r > NUM_REGS) - child_fetch_inferior_registers (regcache, NUM_REGS); - else - for (regno = 0; regno < r; regno++) - (*the_low_target.fetch_inferior_register) (regcache, th, regno); -} - -/* Store a new register value into the current thread context. We don't - change the program's context until later, when we resume it. */ -static void -child_store_inferior_registers (struct regcache *regcache, int r) -{ - int regno; - win32_thread_info *th = thread_rec (current_thread_ptid (), TRUE); - if (r == -1 || r == 0 || r > NUM_REGS) - child_store_inferior_registers (regcache, NUM_REGS); - else - for (regno = 0; regno < r; regno++) - (*the_low_target.store_inferior_register) (regcache, th, regno); -} - -/* Map the Windows error number in ERROR to a locale-dependent error - message string and return a pointer to it. Typically, the values - for ERROR come from GetLastError. - - The string pointed to shall not be modified by the application, - but may be overwritten by a subsequent call to strwinerror - - The strwinerror function does not change the current setting - of GetLastError. */ - -char * -strwinerror (DWORD error) -{ - static char buf[1024]; - TCHAR *msgbuf; - DWORD lasterr = GetLastError (); - DWORD chars = FormatMessage (FORMAT_MESSAGE_FROM_SYSTEM - | FORMAT_MESSAGE_ALLOCATE_BUFFER, - NULL, - error, - 0, /* Default language */ - (LPTSTR) &msgbuf, - 0, - NULL); - if (chars != 0) - { - /* If there is an \r\n appended, zap it. */ - if (chars >= 2 - && msgbuf[chars - 2] == '\r' - && msgbuf[chars - 1] == '\n') - { - chars -= 2; - msgbuf[chars] = 0; - } - - if (chars > ((COUNTOF (buf)) - 1)) - { - chars = COUNTOF (buf) - 1; - msgbuf [chars] = 0; - } - -#ifdef UNICODE - wcstombs (buf, msgbuf, chars + 1); -#else - strncpy (buf, msgbuf, chars + 1); -#endif - LocalFree (msgbuf); - } - else - sprintf (buf, "unknown win32 error (%u)", (unsigned) error); - - SetLastError (lasterr); - return buf; -} - -static BOOL -create_process (const char *program, char *args, - DWORD flags, PROCESS_INFORMATION *pi) -{ - const char *inferior_cwd = get_inferior_cwd (); - BOOL ret; - -#ifdef _WIN32_WCE - wchar_t *p, *wprogram, *wargs, *wcwd = NULL; - size_t argslen; - - wprogram = alloca ((strlen (program) + 1) * sizeof (wchar_t)); - mbstowcs (wprogram, program, strlen (program) + 1); - - for (p = wprogram; *p; ++p) - if (L'/' == *p) - *p = L'\\'; - - argslen = strlen (args); - wargs = alloca ((argslen + 1) * sizeof (wchar_t)); - mbstowcs (wargs, args, argslen + 1); - - if (inferior_cwd != NULL) - { - std::string expanded_infcwd = gdb_tilde_expand (inferior_cwd); - std::replace (expanded_infcwd.begin (), expanded_infcwd.end (), - '/', '\\'); - wcwd = alloca ((expanded_infcwd.size () + 1) * sizeof (wchar_t)); - if (mbstowcs (wcwd, expanded_infcwd.c_str (), - expanded_infcwd.size () + 1) == NULL) - { - error (_("\ -Could not convert the expanded inferior cwd to wide-char.")); - } - } - - ret = CreateProcessW (wprogram, /* image name */ - wargs, /* command line */ - NULL, /* security, not supported */ - NULL, /* thread, not supported */ - FALSE, /* inherit handles, not supported */ - flags, /* start flags */ - NULL, /* environment, not supported */ - wcwd, /* current directory */ - NULL, /* start info, not supported */ - pi); /* proc info */ -#else - STARTUPINFOA si = { sizeof (STARTUPINFOA) }; - - ret = CreateProcessA (program, /* image name */ - args, /* command line */ - NULL, /* security */ - NULL, /* thread */ - TRUE, /* inherit handles */ - flags, /* start flags */ - NULL, /* environment */ - /* current directory */ - (inferior_cwd == NULL - ? NULL - : gdb_tilde_expand (inferior_cwd).c_str()), - &si, /* start info */ - pi); /* proc info */ -#endif - - return ret; -} - -/* Start a new process. - PROGRAM is the program name. - PROGRAM_ARGS is the vector containing the inferior's args. - Returns the new PID on success, -1 on failure. Registers the new - process with the process list. */ -static int -win32_create_inferior (const char *program, - const std::vector<char *> &program_args) -{ - client_state &cs = get_client_state (); -#ifndef USE_WIN32API - char real_path[PATH_MAX]; - char *orig_path, *new_path, *path_ptr; -#endif - BOOL ret; - DWORD flags; - PROCESS_INFORMATION pi; - DWORD err; - std::string str_program_args = stringify_argv (program_args); - char *args = (char *) str_program_args.c_str (); - - /* win32_wait needs to know we're not attaching. */ - attaching = 0; - - if (!program) - error ("No executable specified, specify executable to debug.\n"); - - flags = DEBUG_PROCESS | DEBUG_ONLY_THIS_PROCESS; - -#ifndef USE_WIN32API - orig_path = NULL; - path_ptr = getenv ("PATH"); - if (path_ptr) - { - int size = cygwin_conv_path_list (CCP_POSIX_TO_WIN_A, path_ptr, NULL, 0); - orig_path = (char *) alloca (strlen (path_ptr) + 1); - new_path = (char *) alloca (size); - strcpy (orig_path, path_ptr); - cygwin_conv_path_list (CCP_POSIX_TO_WIN_A, path_ptr, new_path, size); - setenv ("PATH", new_path, 1); - } - cygwin_conv_path (CCP_POSIX_TO_WIN_A, program, real_path, PATH_MAX); - program = real_path; -#endif - - OUTMSG2 (("Command line is \"%s\"\n", args)); - -#ifdef CREATE_NEW_PROCESS_GROUP - flags |= CREATE_NEW_PROCESS_GROUP; -#endif - - ret = create_process (program, args, flags, &pi); - err = GetLastError (); - if (!ret && err == ERROR_FILE_NOT_FOUND) - { - char *exename = (char *) alloca (strlen (program) + 5); - strcat (strcpy (exename, program), ".exe"); - ret = create_process (exename, args, flags, &pi); - err = GetLastError (); - } - -#ifndef USE_WIN32API - if (orig_path) - setenv ("PATH", orig_path, 1); -#endif - - if (!ret) - { - error ("Error creating process \"%s%s\", (error %d): %s\n", - program, args, (int) err, strwinerror (err)); - } - else - { - OUTMSG2 (("Process created: %s\n", (char *) args)); - } - -#ifndef _WIN32_WCE - /* On Windows CE this handle can't be closed. The OS reuses - it in the debug events, while the 9x/NT versions of Windows - probably use a DuplicateHandle'd one. */ - CloseHandle (pi.hThread); -#endif - - do_initial_child_stuff (pi.hProcess, pi.dwProcessId, 0); - - /* Wait till we are at 1st instruction in program, return new pid - (assuming success). */ - cs.last_ptid = win32_wait (ptid_t (current_process_id), &cs.last_status, 0); - - return current_process_id; -} - -/* Attach to a running process. - PID is the process ID to attach to, specified by the user - or a higher layer. */ -static int -win32_attach (unsigned long pid) -{ - HANDLE h; - winapi_DebugSetProcessKillOnExit DebugSetProcessKillOnExit = NULL; - DWORD err; -#ifdef _WIN32_WCE - HMODULE dll = GetModuleHandle (_T("COREDLL.DLL")); -#else - HMODULE dll = GetModuleHandle (_T("KERNEL32.DLL")); -#endif - DebugSetProcessKillOnExit = GETPROCADDRESS (dll, DebugSetProcessKillOnExit); - - h = OpenProcess (PROCESS_ALL_ACCESS, FALSE, pid); - if (h != NULL) - { - if (DebugActiveProcess (pid)) - { - if (DebugSetProcessKillOnExit != NULL) - DebugSetProcessKillOnExit (FALSE); - - /* win32_wait needs to know we're attaching. */ - attaching = 1; - do_initial_child_stuff (h, pid, 1); - return 0; - } - - CloseHandle (h); - } - - err = GetLastError (); - error ("Attach to process failed (error %d): %s\n", - (int) err, strwinerror (err)); -} - -/* Handle OUTPUT_DEBUG_STRING_EVENT from child process. */ -static void -handle_output_debug_string (void) -{ -#define READ_BUFFER_LEN 1024 - CORE_ADDR addr; - char s[READ_BUFFER_LEN + 1] = { 0 }; - DWORD nbytes = current_event.u.DebugString.nDebugStringLength; - - if (nbytes == 0) - return; - - if (nbytes > READ_BUFFER_LEN) - nbytes = READ_BUFFER_LEN; - - addr = (CORE_ADDR) (size_t) current_event.u.DebugString.lpDebugStringData; - - if (current_event.u.DebugString.fUnicode) - { - /* The event tells us how many bytes, not chars, even - in Unicode. */ - WCHAR buffer[(READ_BUFFER_LEN + 1) / sizeof (WCHAR)] = { 0 }; - if (read_inferior_memory (addr, (unsigned char *) buffer, nbytes) != 0) - return; - wcstombs (s, buffer, (nbytes + 1) / sizeof (WCHAR)); - } - else - { - if (read_inferior_memory (addr, (unsigned char *) s, nbytes) != 0) - return; - } - - if (!startswith (s, "cYg")) - { - if (!server_waiting) - { - OUTMSG2(("%s", s)); - return; - } - - monitor_output (s); - } -#undef READ_BUFFER_LEN -} - -static void -win32_clear_inferiors (void) -{ - if (current_process_handle != NULL) - CloseHandle (current_process_handle); - - for_each_thread (delete_thread_info); - clear_inferiors (); -} - -/* Implementation of target_ops::kill. */ - -static int -win32_kill (process_info *process) -{ - TerminateProcess (current_process_handle, 0); - for (;;) - { - if (!child_continue (DBG_CONTINUE, -1)) - break; - if (!WaitForDebugEvent (¤t_event, INFINITE)) - break; - if (current_event.dwDebugEventCode == EXIT_PROCESS_DEBUG_EVENT) - break; - else if (current_event.dwDebugEventCode == OUTPUT_DEBUG_STRING_EVENT) - handle_output_debug_string (); - } - - win32_clear_inferiors (); - - remove_process (process); - return 0; -} - -/* Implementation of target_ops::detach. */ - -static int -win32_detach (process_info *process) -{ - winapi_DebugActiveProcessStop DebugActiveProcessStop = NULL; - winapi_DebugSetProcessKillOnExit DebugSetProcessKillOnExit = NULL; -#ifdef _WIN32_WCE - HMODULE dll = GetModuleHandle (_T("COREDLL.DLL")); -#else - HMODULE dll = GetModuleHandle (_T("KERNEL32.DLL")); -#endif - DebugActiveProcessStop = GETPROCADDRESS (dll, DebugActiveProcessStop); - DebugSetProcessKillOnExit = GETPROCADDRESS (dll, DebugSetProcessKillOnExit); - - if (DebugSetProcessKillOnExit == NULL - || DebugActiveProcessStop == NULL) - return -1; - - { - struct thread_resume resume; - resume.thread = minus_one_ptid; - resume.kind = resume_continue; - resume.sig = 0; - win32_resume (&resume, 1); - } - - if (!DebugActiveProcessStop (current_process_id)) - return -1; - - DebugSetProcessKillOnExit (FALSE); - remove_process (process); - - win32_clear_inferiors (); - return 0; -} - -static void -win32_mourn (struct process_info *process) -{ - remove_process (process); -} - -/* Implementation of target_ops::join. */ - -static void -win32_join (int pid) -{ - HANDLE h = OpenProcess (PROCESS_ALL_ACCESS, FALSE, pid); - if (h != NULL) - { - WaitForSingleObject (h, INFINITE); - CloseHandle (h); - } -} - -/* Return 1 iff the thread with thread ID TID is alive. */ -static int -win32_thread_alive (ptid_t ptid) -{ - /* Our thread list is reliable; don't bother to poll target - threads. */ - return find_thread_ptid (ptid) != NULL; -} - -/* Resume the inferior process. RESUME_INFO describes how we want - to resume. */ -static void -win32_resume (struct thread_resume *resume_info, size_t n) -{ - DWORD tid; - enum gdb_signal sig; - int step; - win32_thread_info *th; - DWORD continue_status = DBG_CONTINUE; - ptid_t ptid; - - /* This handles the very limited set of resume packets that GDB can - currently produce. */ - - if (n == 1 && resume_info[0].thread == minus_one_ptid) - tid = -1; - else if (n > 1) - tid = -1; - else - /* Yes, we're ignoring resume_info[0].thread. It'd be tricky to make - the Windows resume code do the right thing for thread switching. */ - tid = current_event.dwThreadId; - - if (resume_info[0].thread != minus_one_ptid) - { - sig = gdb_signal_from_host (resume_info[0].sig); - step = resume_info[0].kind == resume_step; - } - else - { - sig = GDB_SIGNAL_0; - step = 0; - } - - if (sig != GDB_SIGNAL_0) - { - if (current_event.dwDebugEventCode != EXCEPTION_DEBUG_EVENT) - { - OUTMSG (("Cannot continue with signal %s here.\n", - gdb_signal_to_string (sig))); - } - else if (sig == last_sig) - continue_status = DBG_EXCEPTION_NOT_HANDLED; - else - OUTMSG (("Can only continue with received signal %s.\n", - gdb_signal_to_string (last_sig))); - } - - last_sig = GDB_SIGNAL_0; - - /* Get context for the currently selected thread. */ - ptid = debug_event_ptid (¤t_event); - th = thread_rec (ptid, FALSE); - if (th) - { - win32_prepare_to_resume (th); - - if (th->context.ContextFlags) - { - /* Move register values from the inferior into the thread - context structure. */ - regcache_invalidate (); - - if (step) - { - if (the_low_target.single_step != NULL) - (*the_low_target.single_step) (th); - else - error ("Single stepping is not supported " - "in this configuration.\n"); - } - - win32_set_thread_context (th); - th->context.ContextFlags = 0; - } - } - - /* Allow continuing with the same signal that interrupted us. - Otherwise complain. */ - - child_continue (continue_status, tid); -} - -static void -win32_add_one_solib (const char *name, CORE_ADDR load_addr) -{ - char buf[MAX_PATH + 1]; - char buf2[MAX_PATH + 1]; - -#ifdef _WIN32_WCE - WIN32_FIND_DATA w32_fd; - WCHAR wname[MAX_PATH + 1]; - mbstowcs (wname, name, MAX_PATH); - HANDLE h = FindFirstFile (wname, &w32_fd); -#else - WIN32_FIND_DATAA w32_fd; - HANDLE h = FindFirstFileA (name, &w32_fd); -#endif - - /* The symbols in a dll are offset by 0x1000, which is the - offset from 0 of the first byte in an image - because - of the file header and the section alignment. */ - load_addr += 0x1000; - - if (h == INVALID_HANDLE_VALUE) - strcpy (buf, name); - else - { - FindClose (h); - strcpy (buf, name); -#ifndef _WIN32_WCE - { - char cwd[MAX_PATH + 1]; - char *p; - if (GetCurrentDirectoryA (MAX_PATH + 1, cwd)) - { - p = strrchr (buf, '\\'); - if (p) - p[1] = '\0'; - SetCurrentDirectoryA (buf); - GetFullPathNameA (w32_fd.cFileName, MAX_PATH, buf, &p); - SetCurrentDirectoryA (cwd); - } - } -#endif - } - -#ifndef _WIN32_WCE - if (strcasecmp (buf, "ntdll.dll") == 0) - { - GetSystemDirectoryA (buf, sizeof (buf)); - strcat (buf, "\\ntdll.dll"); - } -#endif - -#ifdef __CYGWIN__ - cygwin_conv_path (CCP_WIN_A_TO_POSIX, buf, buf2, sizeof (buf2)); -#else - strcpy (buf2, buf); -#endif - - loaded_dll (buf2, load_addr); -} - -static char * -get_image_name (HANDLE h, void *address, int unicode) -{ - static char buf[(2 * MAX_PATH) + 1]; - DWORD size = unicode ? sizeof (WCHAR) : sizeof (char); - char *address_ptr; - int len = 0; - char b[2]; - SIZE_T done; - - /* Attempt to read the name of the dll that was detected. - This is documented to work only when actively debugging - a program. It will not work for attached processes. */ - if (address == NULL) - return NULL; - -#ifdef _WIN32_WCE - /* Windows CE reports the address of the image name, - instead of an address of a pointer into the image name. */ - address_ptr = address; -#else - /* See if we could read the address of a string, and that the - address isn't null. */ - if (!ReadProcessMemory (h, address, &address_ptr, - sizeof (address_ptr), &done) - || done != sizeof (address_ptr) - || !address_ptr) - return NULL; -#endif - - /* Find the length of the string */ - while (ReadProcessMemory (h, address_ptr + len++ * size, &b, size, &done) - && (b[0] != 0 || b[size - 1] != 0) && done == size) - continue; - - if (!unicode) - ReadProcessMemory (h, address_ptr, buf, len, &done); - else - { - WCHAR *unicode_address = XALLOCAVEC (WCHAR, len); - ReadProcessMemory (h, address_ptr, unicode_address, len * sizeof (WCHAR), - &done); - - WideCharToMultiByte (CP_ACP, 0, unicode_address, len, buf, len, 0, 0); - } - - return buf; -} - -typedef BOOL (WINAPI *winapi_EnumProcessModules) (HANDLE, HMODULE *, - DWORD, LPDWORD); -typedef BOOL (WINAPI *winapi_GetModuleInformation) (HANDLE, HMODULE, - LPMODULEINFO, DWORD); -typedef DWORD (WINAPI *winapi_GetModuleFileNameExA) (HANDLE, HMODULE, - LPSTR, DWORD); - -static winapi_EnumProcessModules win32_EnumProcessModules; -static winapi_GetModuleInformation win32_GetModuleInformation; -static winapi_GetModuleFileNameExA win32_GetModuleFileNameExA; - -static BOOL -load_psapi (void) -{ - static int psapi_loaded = 0; - static HMODULE dll = NULL; - - if (!psapi_loaded) - { - psapi_loaded = 1; - dll = LoadLibrary (TEXT("psapi.dll")); - if (!dll) - return FALSE; - win32_EnumProcessModules = - GETPROCADDRESS (dll, EnumProcessModules); - win32_GetModuleInformation = - GETPROCADDRESS (dll, GetModuleInformation); - win32_GetModuleFileNameExA = - GETPROCADDRESS (dll, GetModuleFileNameExA); - } - - return (win32_EnumProcessModules != NULL - && win32_GetModuleInformation != NULL - && win32_GetModuleFileNameExA != NULL); -} - -#ifndef _WIN32_WCE - -/* Iterate over all DLLs currently mapped by our inferior, and - add them to our list of solibs. */ - -static void -win32_add_all_dlls (void) -{ - size_t i; - HMODULE dh_buf[1]; - HMODULE *DllHandle = dh_buf; - DWORD cbNeeded; - BOOL ok; - - if (!load_psapi ()) - return; - - cbNeeded = 0; - ok = (*win32_EnumProcessModules) (current_process_handle, - DllHandle, - sizeof (HMODULE), - &cbNeeded); - - if (!ok || !cbNeeded) - return; - - DllHandle = (HMODULE *) alloca (cbNeeded); - if (!DllHandle) - return; - - ok = (*win32_EnumProcessModules) (current_process_handle, - DllHandle, - cbNeeded, - &cbNeeded); - if (!ok) - return; - - for (i = 1; i < ((size_t) cbNeeded / sizeof (HMODULE)); i++) - { - MODULEINFO mi; - char dll_name[MAX_PATH]; - - if (!(*win32_GetModuleInformation) (current_process_handle, - DllHandle[i], - &mi, - sizeof (mi))) - continue; - if ((*win32_GetModuleFileNameExA) (current_process_handle, - DllHandle[i], - dll_name, - MAX_PATH) == 0) - continue; - win32_add_one_solib (dll_name, (CORE_ADDR) (uintptr_t) mi.lpBaseOfDll); - } -} -#endif - -typedef HANDLE (WINAPI *winapi_CreateToolhelp32Snapshot) (DWORD, DWORD); -typedef BOOL (WINAPI *winapi_Module32First) (HANDLE, LPMODULEENTRY32); -typedef BOOL (WINAPI *winapi_Module32Next) (HANDLE, LPMODULEENTRY32); - -/* Handle a DLL load event. - - This function assumes that this event did not occur during inferior - initialization, where their event info may be incomplete (see - do_initial_child_stuff and win32_add_all_dlls for more info on - how we handle DLL loading during that phase). */ - -static void -handle_load_dll (void) -{ - LOAD_DLL_DEBUG_INFO *event = ¤t_event.u.LoadDll; - char *dll_name; - - dll_name = get_image_name (current_process_handle, - event->lpImageName, event->fUnicode); - if (!dll_name) - return; - - win32_add_one_solib (dll_name, (CORE_ADDR) (uintptr_t) event->lpBaseOfDll); -} - -/* Handle a DLL unload event. - - This function assumes that this event did not occur during inferior - initialization, where their event info may be incomplete (see - do_initial_child_stuff and win32_add_one_solib for more info - on how we handle DLL loading during that phase). */ - -static void -handle_unload_dll (void) -{ - CORE_ADDR load_addr = - (CORE_ADDR) (uintptr_t) current_event.u.UnloadDll.lpBaseOfDll; - - /* The symbols in a dll are offset by 0x1000, which is the - offset from 0 of the first byte in an image - because - of the file header and the section alignment. */ - load_addr += 0x1000; - unloaded_dll (NULL, load_addr); -} - -static void -handle_exception (struct target_waitstatus *ourstatus) -{ - DWORD code = current_event.u.Exception.ExceptionRecord.ExceptionCode; - - ourstatus->kind = TARGET_WAITKIND_STOPPED; - - switch (code) - { - case EXCEPTION_ACCESS_VIOLATION: - OUTMSG2 (("EXCEPTION_ACCESS_VIOLATION")); - ourstatus->value.sig = GDB_SIGNAL_SEGV; - break; - case STATUS_STACK_OVERFLOW: - OUTMSG2 (("STATUS_STACK_OVERFLOW")); - ourstatus->value.sig = GDB_SIGNAL_SEGV; - break; - case STATUS_FLOAT_DENORMAL_OPERAND: - OUTMSG2 (("STATUS_FLOAT_DENORMAL_OPERAND")); - ourstatus->value.sig = GDB_SIGNAL_FPE; - break; - case EXCEPTION_ARRAY_BOUNDS_EXCEEDED: - OUTMSG2 (("EXCEPTION_ARRAY_BOUNDS_EXCEEDED")); - ourstatus->value.sig = GDB_SIGNAL_FPE; - break; - case STATUS_FLOAT_INEXACT_RESULT: - OUTMSG2 (("STATUS_FLOAT_INEXACT_RESULT")); - ourstatus->value.sig = GDB_SIGNAL_FPE; - break; - case STATUS_FLOAT_INVALID_OPERATION: - OUTMSG2 (("STATUS_FLOAT_INVALID_OPERATION")); - ourstatus->value.sig = GDB_SIGNAL_FPE; - break; - case STATUS_FLOAT_OVERFLOW: - OUTMSG2 (("STATUS_FLOAT_OVERFLOW")); - ourstatus->value.sig = GDB_SIGNAL_FPE; - break; - case STATUS_FLOAT_STACK_CHECK: - OUTMSG2 (("STATUS_FLOAT_STACK_CHECK")); - ourstatus->value.sig = GDB_SIGNAL_FPE; - break; - case STATUS_FLOAT_UNDERFLOW: - OUTMSG2 (("STATUS_FLOAT_UNDERFLOW")); - ourstatus->value.sig = GDB_SIGNAL_FPE; - break; - case STATUS_FLOAT_DIVIDE_BY_ZERO: - OUTMSG2 (("STATUS_FLOAT_DIVIDE_BY_ZERO")); - ourstatus->value.sig = GDB_SIGNAL_FPE; - break; - case STATUS_INTEGER_DIVIDE_BY_ZERO: - OUTMSG2 (("STATUS_INTEGER_DIVIDE_BY_ZERO")); - ourstatus->value.sig = GDB_SIGNAL_FPE; - break; - case STATUS_INTEGER_OVERFLOW: - OUTMSG2 (("STATUS_INTEGER_OVERFLOW")); - ourstatus->value.sig = GDB_SIGNAL_FPE; - break; - case EXCEPTION_BREAKPOINT: - OUTMSG2 (("EXCEPTION_BREAKPOINT")); - ourstatus->value.sig = GDB_SIGNAL_TRAP; -#ifdef _WIN32_WCE - /* Remove the initial breakpoint. */ - check_breakpoints ((CORE_ADDR) (long) current_event - .u.Exception.ExceptionRecord.ExceptionAddress); -#endif - break; - case DBG_CONTROL_C: - OUTMSG2 (("DBG_CONTROL_C")); - ourstatus->value.sig = GDB_SIGNAL_INT; - break; - case DBG_CONTROL_BREAK: - OUTMSG2 (("DBG_CONTROL_BREAK")); - ourstatus->value.sig = GDB_SIGNAL_INT; - break; - case EXCEPTION_SINGLE_STEP: - OUTMSG2 (("EXCEPTION_SINGLE_STEP")); - ourstatus->value.sig = GDB_SIGNAL_TRAP; - break; - case EXCEPTION_ILLEGAL_INSTRUCTION: - OUTMSG2 (("EXCEPTION_ILLEGAL_INSTRUCTION")); - ourstatus->value.sig = GDB_SIGNAL_ILL; - break; - case EXCEPTION_PRIV_INSTRUCTION: - OUTMSG2 (("EXCEPTION_PRIV_INSTRUCTION")); - ourstatus->value.sig = GDB_SIGNAL_ILL; - break; - case EXCEPTION_NONCONTINUABLE_EXCEPTION: - OUTMSG2 (("EXCEPTION_NONCONTINUABLE_EXCEPTION")); - ourstatus->value.sig = GDB_SIGNAL_ILL; - break; - default: - if (current_event.u.Exception.dwFirstChance) - { - ourstatus->kind = TARGET_WAITKIND_SPURIOUS; - return; - } - OUTMSG2 (("gdbserver: unknown target exception 0x%08x at 0x%s", - (unsigned) current_event.u.Exception.ExceptionRecord.ExceptionCode, - phex_nz ((uintptr_t) current_event.u.Exception.ExceptionRecord. - ExceptionAddress, sizeof (uintptr_t)))); - ourstatus->value.sig = GDB_SIGNAL_UNKNOWN; - break; - } - OUTMSG2 (("\n")); - last_sig = ourstatus->value.sig; -} - - -static void -suspend_one_thread (thread_info *thread) -{ - win32_thread_info *th = (win32_thread_info *) thread_target_data (thread); - - if (!th->suspended) - { - if (SuspendThread (th->h) == (DWORD) -1) - { - DWORD err = GetLastError (); - OUTMSG (("warning: SuspendThread failed in suspend_one_thread, " - "(error %d): %s\n", (int) err, strwinerror (err))); - } - else - th->suspended = 1; - } -} - -static void -fake_breakpoint_event (void) -{ - OUTMSG2(("fake_breakpoint_event\n")); - - faked_breakpoint = 1; - - memset (¤t_event, 0, sizeof (current_event)); - current_event.dwThreadId = main_thread_id; - current_event.dwDebugEventCode = EXCEPTION_DEBUG_EVENT; - current_event.u.Exception.ExceptionRecord.ExceptionCode - = EXCEPTION_BREAKPOINT; - - for_each_thread (suspend_one_thread); -} - -#ifdef _WIN32_WCE -static int -auto_delete_breakpoint (CORE_ADDR stop_pc) -{ - return 1; -} -#endif - -/* Get the next event from the child. */ - -static int -get_child_debug_event (struct target_waitstatus *ourstatus) -{ - ptid_t ptid; - - last_sig = GDB_SIGNAL_0; - ourstatus->kind = TARGET_WAITKIND_SPURIOUS; - - /* Check if GDB sent us an interrupt request. */ - check_remote_input_interrupt_request (); - - if (soft_interrupt_requested) - { - soft_interrupt_requested = 0; - fake_breakpoint_event (); - goto gotevent; - } - -#ifndef _WIN32_WCE - attaching = 0; -#else - if (attaching) - { - /* WinCE doesn't set an initial breakpoint automatically. To - stop the inferior, we flush all currently pending debug - events -- the thread list and the dll list are always - reported immediatelly without delay, then, we suspend all - threads and pretend we saw a trap at the current PC of the - main thread. - - Contrary to desktop Windows, Windows CE *does* report the dll - names on LOAD_DLL_DEBUG_EVENTs resulting from a - DebugActiveProcess call. This limits the way we can detect - if all the dlls have already been reported. If we get a real - debug event before leaving attaching, the worst that will - happen is the user will see a spurious breakpoint. */ - - current_event.dwDebugEventCode = 0; - if (!WaitForDebugEvent (¤t_event, 0)) - { - OUTMSG2(("no attach events left\n")); - fake_breakpoint_event (); - attaching = 0; - } - else - OUTMSG2(("got attach event\n")); - } - else -#endif - { - /* Keep the wait time low enough for comfortable remote - interruption, but high enough so gdbserver doesn't become a - bottleneck. */ - if (!WaitForDebugEvent (¤t_event, 250)) - { - DWORD e = GetLastError(); - - if (e == ERROR_PIPE_NOT_CONNECTED) - { - /* This will happen if the loader fails to succesfully - load the application, e.g., if the main executable - tries to pull in a non-existing export from a - DLL. */ - ourstatus->kind = TARGET_WAITKIND_EXITED; - ourstatus->value.integer = 1; - return 1; - } - - return 0; - } - } - - gotevent: - - switch (current_event.dwDebugEventCode) - { - case CREATE_THREAD_DEBUG_EVENT: - OUTMSG2 (("gdbserver: kernel event CREATE_THREAD_DEBUG_EVENT " - "for pid=%u tid=%x)\n", - (unsigned) current_event.dwProcessId, - (unsigned) current_event.dwThreadId)); - - /* Record the existence of this thread. */ - child_add_thread (current_event.dwProcessId, - current_event.dwThreadId, - current_event.u.CreateThread.hThread, - current_event.u.CreateThread.lpThreadLocalBase); - break; - - case EXIT_THREAD_DEBUG_EVENT: - OUTMSG2 (("gdbserver: kernel event EXIT_THREAD_DEBUG_EVENT " - "for pid=%u tid=%x\n", - (unsigned) current_event.dwProcessId, - (unsigned) current_event.dwThreadId)); - child_delete_thread (current_event.dwProcessId, - current_event.dwThreadId); - - current_thread = get_first_thread (); - return 1; - - case CREATE_PROCESS_DEBUG_EVENT: - OUTMSG2 (("gdbserver: kernel event CREATE_PROCESS_DEBUG_EVENT " - "for pid=%u tid=%x\n", - (unsigned) current_event.dwProcessId, - (unsigned) current_event.dwThreadId)); - CloseHandle (current_event.u.CreateProcessInfo.hFile); - - current_process_handle = current_event.u.CreateProcessInfo.hProcess; - main_thread_id = current_event.dwThreadId; - - /* Add the main thread. */ - child_add_thread (current_event.dwProcessId, - main_thread_id, - current_event.u.CreateProcessInfo.hThread, - current_event.u.CreateProcessInfo.lpThreadLocalBase); - -#ifdef _WIN32_WCE - if (!attaching) - { - /* Windows CE doesn't set the initial breakpoint - automatically like the desktop versions of Windows do. - We add it explicitly here. It will be removed as soon as - it is hit. */ - set_breakpoint_at ((CORE_ADDR) (long) current_event.u - .CreateProcessInfo.lpStartAddress, - auto_delete_breakpoint); - } -#endif - break; - - case EXIT_PROCESS_DEBUG_EVENT: - OUTMSG2 (("gdbserver: kernel event EXIT_PROCESS_DEBUG_EVENT " - "for pid=%u tid=%x\n", - (unsigned) current_event.dwProcessId, - (unsigned) current_event.dwThreadId)); - ourstatus->kind = TARGET_WAITKIND_EXITED; - ourstatus->value.integer = current_event.u.ExitProcess.dwExitCode; - child_continue (DBG_CONTINUE, -1); - CloseHandle (current_process_handle); - current_process_handle = NULL; - break; - - case LOAD_DLL_DEBUG_EVENT: - OUTMSG2 (("gdbserver: kernel event LOAD_DLL_DEBUG_EVENT " - "for pid=%u tid=%x\n", - (unsigned) current_event.dwProcessId, - (unsigned) current_event.dwThreadId)); - CloseHandle (current_event.u.LoadDll.hFile); - if (! child_initialization_done) - break; - handle_load_dll (); - - ourstatus->kind = TARGET_WAITKIND_LOADED; - ourstatus->value.sig = GDB_SIGNAL_TRAP; - break; - - case UNLOAD_DLL_DEBUG_EVENT: - OUTMSG2 (("gdbserver: kernel event UNLOAD_DLL_DEBUG_EVENT " - "for pid=%u tid=%x\n", - (unsigned) current_event.dwProcessId, - (unsigned) current_event.dwThreadId)); - if (! child_initialization_done) - break; - handle_unload_dll (); - ourstatus->kind = TARGET_WAITKIND_LOADED; - ourstatus->value.sig = GDB_SIGNAL_TRAP; - break; - - case EXCEPTION_DEBUG_EVENT: - OUTMSG2 (("gdbserver: kernel event EXCEPTION_DEBUG_EVENT " - "for pid=%u tid=%x\n", - (unsigned) current_event.dwProcessId, - (unsigned) current_event.dwThreadId)); - handle_exception (ourstatus); - break; - - case OUTPUT_DEBUG_STRING_EVENT: - /* A message from the kernel (or Cygwin). */ - OUTMSG2 (("gdbserver: kernel event OUTPUT_DEBUG_STRING_EVENT " - "for pid=%u tid=%x\n", - (unsigned) current_event.dwProcessId, - (unsigned) current_event.dwThreadId)); - handle_output_debug_string (); - break; - - default: - OUTMSG2 (("gdbserver: kernel event unknown " - "for pid=%u tid=%x code=%x\n", - (unsigned) current_event.dwProcessId, - (unsigned) current_event.dwThreadId, - (unsigned) current_event.dwDebugEventCode)); - break; - } - - ptid = debug_event_ptid (¤t_event); - current_thread = find_thread_ptid (ptid); - return 1; -} - -/* Wait for the inferior process to change state. - STATUS will be filled in with a response code to send to GDB. - Returns the signal which caused the process to stop. */ -static ptid_t -win32_wait (ptid_t ptid, struct target_waitstatus *ourstatus, int options) -{ - struct regcache *regcache; - - if (cached_status.kind != TARGET_WAITKIND_IGNORE) - { - /* The core always does a wait after creating the inferior, and - do_initial_child_stuff already ran the inferior to the - initial breakpoint (or an exit, if creating the process - fails). Report it now. */ - *ourstatus = cached_status; - cached_status.kind = TARGET_WAITKIND_IGNORE; - return debug_event_ptid (¤t_event); - } - - while (1) - { - if (!get_child_debug_event (ourstatus)) - continue; - - switch (ourstatus->kind) - { - case TARGET_WAITKIND_EXITED: - OUTMSG2 (("Child exited with retcode = %x\n", - ourstatus->value.integer)); - win32_clear_inferiors (); - return ptid_t (current_event.dwProcessId); - case TARGET_WAITKIND_STOPPED: - case TARGET_WAITKIND_LOADED: - OUTMSG2 (("Child Stopped with signal = %d \n", - ourstatus->value.sig)); - - regcache = get_thread_regcache (current_thread, 1); - child_fetch_inferior_registers (regcache, -1); - return debug_event_ptid (¤t_event); - default: - OUTMSG (("Ignoring unknown internal event, %d\n", ourstatus->kind)); - /* fall-through */ - case TARGET_WAITKIND_SPURIOUS: - /* do nothing, just continue */ - child_continue (DBG_CONTINUE, -1); - break; - } - } -} - -/* Fetch registers from the inferior process. - If REGNO is -1, fetch all registers; otherwise, fetch at least REGNO. */ -static void -win32_fetch_inferior_registers (struct regcache *regcache, int regno) -{ - child_fetch_inferior_registers (regcache, regno); -} - -/* Store registers to the inferior process. - If REGNO is -1, store all registers; otherwise, store at least REGNO. */ -static void -win32_store_inferior_registers (struct regcache *regcache, int regno) -{ - child_store_inferior_registers (regcache, regno); -} - -/* Read memory from the inferior process. This should generally be - called through read_inferior_memory, which handles breakpoint shadowing. - Read LEN bytes at MEMADDR into a buffer at MYADDR. */ -static int -win32_read_inferior_memory (CORE_ADDR memaddr, unsigned char *myaddr, int len) -{ - return child_xfer_memory (memaddr, (char *) myaddr, len, 0, 0) != len; -} - -/* Write memory to the inferior process. This should generally be - called through write_inferior_memory, which handles breakpoint shadowing. - Write LEN bytes from the buffer at MYADDR to MEMADDR. - Returns 0 on success and errno on failure. */ -static int -win32_write_inferior_memory (CORE_ADDR memaddr, const unsigned char *myaddr, - int len) -{ - return child_xfer_memory (memaddr, (char *) myaddr, len, 1, 0) != len; -} - -/* Send an interrupt request to the inferior process. */ -static void -win32_request_interrupt (void) -{ - winapi_DebugBreakProcess DebugBreakProcess; - winapi_GenerateConsoleCtrlEvent GenerateConsoleCtrlEvent; - -#ifdef _WIN32_WCE - HMODULE dll = GetModuleHandle (_T("COREDLL.DLL")); -#else - HMODULE dll = GetModuleHandle (_T("KERNEL32.DLL")); -#endif - - GenerateConsoleCtrlEvent = GETPROCADDRESS (dll, GenerateConsoleCtrlEvent); - - if (GenerateConsoleCtrlEvent != NULL - && GenerateConsoleCtrlEvent (CTRL_BREAK_EVENT, current_process_id)) - return; - - /* GenerateConsoleCtrlEvent can fail if process id being debugged is - not a process group id. - Fallback to XP/Vista 'DebugBreakProcess', which generates a - breakpoint exception in the interior process. */ - - DebugBreakProcess = GETPROCADDRESS (dll, DebugBreakProcess); - - if (DebugBreakProcess != NULL - && DebugBreakProcess (current_process_handle)) - return; - - /* Last resort, suspend all threads manually. */ - soft_interrupt_requested = 1; -} - -#ifdef _WIN32_WCE -int -win32_error_to_fileio_error (DWORD err) -{ - switch (err) - { - case ERROR_BAD_PATHNAME: - case ERROR_FILE_NOT_FOUND: - case ERROR_INVALID_NAME: - case ERROR_PATH_NOT_FOUND: - return FILEIO_ENOENT; - case ERROR_CRC: - case ERROR_IO_DEVICE: - case ERROR_OPEN_FAILED: - return FILEIO_EIO; - case ERROR_INVALID_HANDLE: - return FILEIO_EBADF; - case ERROR_ACCESS_DENIED: - case ERROR_SHARING_VIOLATION: - return FILEIO_EACCES; - case ERROR_NOACCESS: - return FILEIO_EFAULT; - case ERROR_BUSY: - return FILEIO_EBUSY; - case ERROR_ALREADY_EXISTS: - case ERROR_FILE_EXISTS: - return FILEIO_EEXIST; - case ERROR_BAD_DEVICE: - return FILEIO_ENODEV; - case ERROR_DIRECTORY: - return FILEIO_ENOTDIR; - case ERROR_FILENAME_EXCED_RANGE: - case ERROR_INVALID_DATA: - case ERROR_INVALID_PARAMETER: - case ERROR_NEGATIVE_SEEK: - return FILEIO_EINVAL; - case ERROR_TOO_MANY_OPEN_FILES: - return FILEIO_EMFILE; - case ERROR_HANDLE_DISK_FULL: - case ERROR_DISK_FULL: - return FILEIO_ENOSPC; - case ERROR_WRITE_PROTECT: - return FILEIO_EROFS; - case ERROR_NOT_SUPPORTED: - return FILEIO_ENOSYS; - } - - return FILEIO_EUNKNOWN; -} - -static void -wince_hostio_last_error (char *buf) -{ - DWORD winerr = GetLastError (); - int fileio_err = win32_error_to_fileio_error (winerr); - sprintf (buf, "F-1,%x", fileio_err); -} -#endif - -/* Write Windows OS Thread Information Block address. */ - -static int -win32_get_tib_address (ptid_t ptid, CORE_ADDR *addr) -{ - win32_thread_info *th; - th = thread_rec (ptid, 0); - if (th == NULL) - return 0; - if (addr != NULL) - *addr = th->thread_local_base; - return 1; -} - -/* Implementation of the target_ops method "sw_breakpoint_from_kind". */ - -static const gdb_byte * -win32_sw_breakpoint_from_kind (int kind, int *size) -{ - *size = the_low_target.breakpoint_len; - return the_low_target.breakpoint; -} - -static struct target_ops win32_target_ops = { - win32_create_inferior, - NULL, /* post_create_inferior */ - win32_attach, - win32_kill, - win32_detach, - win32_mourn, - win32_join, - win32_thread_alive, - win32_resume, - win32_wait, - win32_fetch_inferior_registers, - win32_store_inferior_registers, - NULL, /* prepare_to_access_memory */ - NULL, /* done_accessing_memory */ - win32_read_inferior_memory, - win32_write_inferior_memory, - NULL, /* lookup_symbols */ - win32_request_interrupt, - NULL, /* read_auxv */ - win32_supports_z_point_type, - win32_insert_point, - win32_remove_point, - NULL, /* stopped_by_sw_breakpoint */ - NULL, /* supports_stopped_by_sw_breakpoint */ - NULL, /* stopped_by_hw_breakpoint */ - NULL, /* supports_stopped_by_hw_breakpoint */ - target_can_do_hardware_single_step, - win32_stopped_by_watchpoint, - win32_stopped_data_address, - NULL, /* read_offsets */ - NULL, /* get_tls_address */ -#ifdef _WIN32_WCE - wince_hostio_last_error, -#else - hostio_last_error_from_errno, -#endif - NULL, /* qxfer_osdata */ - NULL, /* qxfer_siginfo */ - NULL, /* supports_non_stop */ - NULL, /* async */ - NULL, /* start_non_stop */ - NULL, /* supports_multi_process */ - NULL, /* supports_fork_events */ - NULL, /* supports_vfork_events */ - NULL, /* supports_exec_events */ - NULL, /* handle_new_gdb_connection */ - NULL, /* handle_monitor_command */ - NULL, /* core_of_thread */ - NULL, /* read_loadmap */ - NULL, /* process_qsupported */ - NULL, /* supports_tracepoints */ - NULL, /* read_pc */ - NULL, /* write_pc */ - NULL, /* thread_stopped */ - win32_get_tib_address, - NULL, /* pause_all */ - NULL, /* unpause_all */ - NULL, /* stabilize_threads */ - NULL, /* install_fast_tracepoint_jump_pad */ - NULL, /* emit_ops */ - NULL, /* supports_disable_randomization */ - NULL, /* get_min_fast_tracepoint_insn_len */ - NULL, /* qxfer_libraries_svr4 */ - NULL, /* support_agent */ - NULL, /* enable_btrace */ - NULL, /* disable_btrace */ - NULL, /* read_btrace */ - NULL, /* read_btrace_conf */ - NULL, /* supports_range_stepping */ - NULL, /* pid_to_exec_file */ - NULL, /* multifs_open */ - NULL, /* multifs_unlink */ - NULL, /* multifs_readlink */ - NULL, /* breakpoint_kind_from_pc */ - win32_sw_breakpoint_from_kind, -}; - -/* Initialize the Win32 backend. */ -void -initialize_low (void) -{ - set_target_ops (&win32_target_ops); - the_low_target.arch_setup (); -} diff -Nru gdb-9.1/gdb/gdbserver/win32-low.h gdb-10.2/gdb/gdbserver/win32-low.h --- gdb-9.1/gdb/gdbserver/win32-low.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/win32-low.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,122 +0,0 @@ -/* Internal interfaces for the Win32 specific target code for gdbserver. - Copyright (C) 2007-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef GDBSERVER_WIN32_LOW_H -#define GDBSERVER_WIN32_LOW_H - -#include <windows.h> - -struct target_desc; - -/* The inferior's target description. This is a global because the - Windows ports support neither bi-arch nor multi-process. */ -extern const struct target_desc *win32_tdesc; - -/* Thread information structure used to track extra information about - each thread. */ -typedef struct win32_thread_info -{ - /* The Win32 thread identifier. */ - DWORD tid; - - /* The handle to the thread. */ - HANDLE h; - - /* Thread Information Block address. */ - CORE_ADDR thread_local_base; - - /* Non zero if SuspendThread was called on this thread. */ - int suspended; - -#ifdef _WIN32_WCE - /* The context as retrieved right after suspending the thread. */ - CONTEXT base_context; -#endif - - /* The context of the thread, including any manipulations. */ - CONTEXT context; - - /* Whether debug registers changed since we last set CONTEXT back to - the thread. */ - int debug_registers_changed; -} win32_thread_info; - -struct win32_target_ops -{ - /* Architecture-specific setup. */ - void (*arch_setup) (void); - - /* The number of target registers. */ - int num_regs; - - /* Perform initializations on startup. */ - void (*initial_stuff) (void); - - /* Fetch the context from the inferior. */ - void (*get_thread_context) (win32_thread_info *th); - - /* Called just before resuming the thread. */ - void (*prepare_to_resume) (win32_thread_info *th); - - /* Called when a thread was added. */ - void (*thread_added) (win32_thread_info *th); - - /* Fetch register from gdbserver regcache data. */ - void (*fetch_inferior_register) (struct regcache *regcache, - win32_thread_info *th, int r); - - /* Store a new register value into the thread context of TH. */ - void (*store_inferior_register) (struct regcache *regcache, - win32_thread_info *th, int r); - - void (*single_step) (win32_thread_info *th); - - const unsigned char *breakpoint; - int breakpoint_len; - - /* Breakpoint/Watchpoint related functions. See target.h for comments. */ - int (*supports_z_point_type) (char z_type); - int (*insert_point) (enum raw_bkpt_type type, CORE_ADDR addr, - int size, struct raw_breakpoint *bp); - int (*remove_point) (enum raw_bkpt_type type, CORE_ADDR addr, - int size, struct raw_breakpoint *bp); - int (*stopped_by_watchpoint) (void); - CORE_ADDR (*stopped_data_address) (void); -}; - -extern struct win32_target_ops the_low_target; - -/* Retrieve the context for this thread, if not already retrieved. */ -extern void win32_require_context (win32_thread_info *th); - -/* Map the Windows error number in ERROR to a locale-dependent error - message string and return a pointer to it. Typically, the values - for ERROR come from GetLastError. - - The string pointed to shall not be modified by the application, - but may be overwritten by a subsequent call to strwinerror - - The strwinerror function does not change the current setting - of GetLastError. */ -extern char * strwinerror (DWORD error); - -/* in wincecompat.c */ - -extern void to_back_slashes (char *); - -#endif /* GDBSERVER_WIN32_LOW_H */ diff -Nru gdb-9.1/gdb/gdbserver/wincecompat.c gdb-10.2/gdb/gdbserver/wincecompat.c --- gdb-9.1/gdb/gdbserver/wincecompat.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/wincecompat.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,38 +0,0 @@ -/* Compatibility routines for Windows CE. - Copyright (C) 2007-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "server.h" - -#include <windows.h> - -void -perror (const char *s) -{ - if (s && *s) - fprintf (stderr, "%s: %s\n", s, strwinerror (GetLastError ())); - else - fprintf (stderr, "%s\n", strwinerror (GetLastError ())); -} - -void -to_back_slashes (char *path) -{ - for (; *path; ++path) - if ('/' == *path) - *path = '\\'; -} diff -Nru gdb-9.1/gdb/gdbserver/wincecompat.h gdb-10.2/gdb/gdbserver/wincecompat.h --- gdb-9.1/gdb/gdbserver/wincecompat.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/wincecompat.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,30 +0,0 @@ -/* Compatibility routines for Windows CE. - Copyright (C) 2007-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef GDBSERVER_WINCECOMPAT_H -#define GDBSERVER_WINCECOMPAT_H - -#include <windows.h> - -#define errno (GetLastError ()) - -/* in win32-low.c */ -extern char * strwinerror (DWORD error); -#define strerror strwinerror - -#endif /* GDBSERVER_WINCECOMPAT_H */ diff -Nru gdb-9.1/gdb/gdbserver/x86-low.c gdb-10.2/gdb/gdbserver/x86-low.c --- gdb-9.1/gdb/gdbserver/x86-low.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/x86-low.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,38 +0,0 @@ -/* Low level support for x86 (i386 and x86-64). - - Copyright (C) 2009-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "server.h" -#include "x86-low.h" - -/* Clear the reference counts and forget everything we knew about the - debug registers. */ - -void -x86_low_init_dregs (struct x86_debug_reg_state *state) -{ - int i; - - ALL_DEBUG_ADDRESS_REGISTERS (i) - { - state->dr_mirror[i] = 0; - state->dr_ref_count[i] = 0; - } - state->dr_control_mirror = 0; - state->dr_status_mirror = 0; -} diff -Nru gdb-9.1/gdb/gdbserver/x86-low.h gdb-10.2/gdb/gdbserver/x86-low.h --- gdb-9.1/gdb/gdbserver/x86-low.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/x86-low.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,28 +0,0 @@ -/* Low level support for x86 (i386 and x86-64). - - Copyright (C) 2009-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef GDBSERVER_X86_LOW_H -#define GDBSERVER_X86_LOW_H - -#include "nat/x86-dregs.h" - -/* Initialize STATE. */ -extern void x86_low_init_dregs (struct x86_debug_reg_state *state); - -#endif /* GDBSERVER_X86_LOW_H */ diff -Nru gdb-9.1/gdb/gdbserver/x86-tdesc.h gdb-10.2/gdb/gdbserver/x86-tdesc.h --- gdb-9.1/gdb/gdbserver/x86-tdesc.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/x86-tdesc.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,32 +0,0 @@ -/* Copyright (C) 2018-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef GDBSERVER_X86_TDESC_H -#define GDBSERVER_X86_TDESC_H - -/* The "expedite" registers for x86 targets. Since whether the - variable is used depends on host/configuration, we mark it - ATTRIBUTE_UNUSED to keep it simple here. */ -static const char *i386_expedite_regs[] ATTRIBUTE_UNUSED - = {"ebp", "esp", "eip", NULL}; - -#ifdef __x86_64__ -/* The "expedite" registers for x86_64 targets. */ -static const char *amd64_expedite_regs[] = {"rbp", "rsp", "rip", NULL}; -#endif - -#endif /* GDBSERVER_X86_TDESC_H */ diff -Nru gdb-9.1/gdb/gdbserver/xtensa-xtregs.c gdb-10.2/gdb/gdbserver/xtensa-xtregs.c --- gdb-9.1/gdb/gdbserver/xtensa-xtregs.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbserver/xtensa-xtregs.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,37 +0,0 @@ -/* Table mapping between kernel xtregset and GDB register cache. - Copyright (C) 2007-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License as - published by the Free Software Foundation; either version 3 of the - License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - - -typedef struct { - int gdb_regnum; - int gdb_offset; - int ptrace_cp_offset; - int ptrace_offset; - int size; - int coproc; - int dbnum; - char* name -;} xtensa_regtable_t; - -#define XTENSA_ELF_XTREG_SIZE 4 - -const xtensa_regtable_t xtensa_regmap_table[] = { - /* gnum,gofs,cpofs,ofs,siz,cp, dbnum, name */ - { 44, 176, 0, 0, 4, -1, 0x020c, "scompare1" }, - { 0 } -}; diff -Nru gdb-9.1/gdb/gdb-stabs.h gdb-10.2/gdb/gdb-stabs.h --- gdb-9.1/gdb/gdb-stabs.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/gdb-stabs.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Definitions for symbol-reading containing "stabs", for GDB. - Copyright (C) 1992-2020 Free Software Foundation, Inc. + Copyright (C) 1992-2021 Free Software Foundation, Inc. Contributed by Cygnus Support. Written by John Gilmore. This file is part of GDB. diff -Nru gdb-9.1/gdb/gdbsupport/agent.c gdb-10.2/gdb/gdbsupport/agent.c --- gdb-9.1/gdb/gdbsupport/agent.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/agent.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,280 +0,0 @@ -/* Shared utility routines for GDB to interact with agent. - - Copyright (C) 2009-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "common-defs.h" -#include "target/target.h" -#include "gdbsupport/symbol.h" -#include <unistd.h> -#include "filestuff.h" - -#define IPA_SYM_STRUCT_NAME ipa_sym_addresses_common -#include "agent.h" - -bool debug_agent = false; - -/* A stdarg wrapper for debug_vprintf. */ - -static void ATTRIBUTE_PRINTF (1, 2) -debug_agent_printf (const char *fmt, ...) -{ - va_list ap; - - if (!debug_agent) - return; - va_start (ap, fmt); - debug_vprintf (fmt, ap); - va_end (ap); -} - -#define DEBUG_AGENT debug_agent_printf - -/* Global flag to determine using agent or not. */ -bool use_agent = false; - -/* Addresses of in-process agent's symbols both GDB and GDBserver cares - about. */ - -struct ipa_sym_addresses_common -{ - CORE_ADDR addr_helper_thread_id; - CORE_ADDR addr_cmd_buf; - CORE_ADDR addr_capability; -}; - -/* Cache of the helper thread id. FIXME: this global should be made - per-process. */ -static uint32_t helper_thread_id = 0; - -static struct -{ - const char *name; - int offset; -} symbol_list[] = { - IPA_SYM(helper_thread_id), - IPA_SYM(cmd_buf), - IPA_SYM(capability), -}; - -static struct ipa_sym_addresses_common ipa_sym_addrs; - -static bool all_agent_symbols_looked_up = false; - -bool -agent_loaded_p (void) -{ - return all_agent_symbols_looked_up; -} - -/* Look up all symbols needed by agent. Return 0 if all the symbols are - found, return non-zero otherwise. */ - -int -agent_look_up_symbols (void *arg) -{ - all_agent_symbols_looked_up = false; - - for (int i = 0; i < sizeof (symbol_list) / sizeof (symbol_list[0]); i++) - { - CORE_ADDR *addrp = - (CORE_ADDR *) ((char *) &ipa_sym_addrs + symbol_list[i].offset); - struct objfile *objfile = (struct objfile *) arg; - - if (find_minimal_symbol_address (symbol_list[i].name, addrp, - objfile) != 0) - { - DEBUG_AGENT ("symbol `%s' not found\n", symbol_list[i].name); - return -1; - } - } - - all_agent_symbols_looked_up = true; - return 0; -} - -static unsigned int -agent_get_helper_thread_id (void) -{ - if (helper_thread_id == 0) - { - if (target_read_uint32 (ipa_sym_addrs.addr_helper_thread_id, - &helper_thread_id)) - warning (_("Error reading helper thread's id in lib")); - } - - return helper_thread_id; -} - -#ifdef HAVE_SYS_UN_H -#include <sys/socket.h> -#include <sys/un.h> -#define SOCK_DIR P_tmpdir - -#ifndef UNIX_PATH_MAX -#define UNIX_PATH_MAX sizeof(((struct sockaddr_un *) NULL)->sun_path) -#endif - -#endif - -/* Connects to synchronization socket. PID is the pid of inferior, which is - used to set up the connection socket. */ - -static int -gdb_connect_sync_socket (int pid) -{ -#ifdef HAVE_SYS_UN_H - struct sockaddr_un addr; - int res, fd; - char path[UNIX_PATH_MAX]; - - res = xsnprintf (path, UNIX_PATH_MAX, "%s/gdb_ust%d", P_tmpdir, pid); - if (res >= UNIX_PATH_MAX) - return -1; - - res = fd = gdb_socket_cloexec (PF_UNIX, SOCK_STREAM, 0); - if (res == -1) - { - warning (_("error opening sync socket: %s"), safe_strerror (errno)); - return -1; - } - - addr.sun_family = AF_UNIX; - - res = xsnprintf (addr.sun_path, UNIX_PATH_MAX, "%s", path); - if (res >= UNIX_PATH_MAX) - { - warning (_("string overflow allocating socket name")); - close (fd); - return -1; - } - - res = connect (fd, (struct sockaddr *) &addr, sizeof (addr)); - if (res == -1) - { - warning (_("error connecting sync socket (%s): %s. " - "Make sure the directory exists and that it is writable."), - path, safe_strerror (errno)); - close (fd); - return -1; - } - - return fd; -#else - return -1; -#endif -} - -/* Execute an agent command in the inferior. PID is the value of pid of the - inferior. CMD is the buffer for command. GDB or GDBserver will store the - command into it and fetch the return result from CMD. The interaction - between GDB/GDBserver and the agent is synchronized by a synchronization - socket. Return zero if success, otherwise return non-zero. */ - -int -agent_run_command (int pid, const char *cmd, int len) -{ - int fd; - int tid = agent_get_helper_thread_id (); - ptid_t ptid = ptid_t (pid, tid, 0); - - int ret = target_write_memory (ipa_sym_addrs.addr_cmd_buf, - (gdb_byte *) cmd, len); - - if (ret != 0) - { - warning (_("unable to write")); - return -1; - } - - DEBUG_AGENT ("agent: resumed helper thread\n"); - - /* Resume helper thread. */ - target_continue_no_signal (ptid); - - fd = gdb_connect_sync_socket (pid); - if (fd >= 0) - { - char buf[1] = ""; - - DEBUG_AGENT ("agent: signalling helper thread\n"); - - do - { - ret = write (fd, buf, 1); - } while (ret == -1 && errno == EINTR); - - DEBUG_AGENT ("agent: waiting for helper thread's response\n"); - - do - { - ret = read (fd, buf, 1); - } while (ret == -1 && errno == EINTR); - - close (fd); - - DEBUG_AGENT ("agent: helper thread's response received\n"); - } - else - return -1; - - /* Need to read response with the inferior stopped. */ - if (ptid != null_ptid) - { - /* Stop thread PTID. */ - DEBUG_AGENT ("agent: stop helper thread\n"); - target_stop_and_wait (ptid); - } - - if (fd >= 0) - { - if (target_read_memory (ipa_sym_addrs.addr_cmd_buf, (gdb_byte *) cmd, - IPA_CMD_BUF_SIZE)) - { - warning (_("Error reading command response")); - return -1; - } - } - - return 0; -} - -/* Each bit of it stands for a capability of agent. */ -static uint32_t agent_capability = 0; - -/* Return true if agent has capability AGENT_CAP, otherwise return false. */ - -bool -agent_capability_check (enum agent_capa agent_capa) -{ - if (agent_capability == 0) - { - if (target_read_uint32 (ipa_sym_addrs.addr_capability, - &agent_capability)) - warning (_("Error reading capability of agent")); - } - return (agent_capability & agent_capa) != 0; -} - -/* Invalidate the cache of agent capability, so we'll read it from inferior - again. Call it when launches a new program or reconnect to remote stub. */ - -void -agent_capability_invalidate (void) -{ - agent_capability = 0; -} diff -Nru gdb-9.1/gdb/gdbsupport/agent.h gdb-10.2/gdb/gdbsupport/agent.h --- gdb-9.1/gdb/gdbsupport/agent.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/agent.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,68 +0,0 @@ -/* Shared utility routines for GDB to interact with agent. - - Copyright (C) 2009-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef COMMON_AGENT_H -#define COMMON_AGENT_H - -#include "gdbsupport/preprocessor.h" - -int agent_run_command (int pid, const char *cmd, int len); - -int agent_look_up_symbols (void *); - -#define IPA_SYM_EXPORTED_NAME(SYM) gdb_agent_ ## SYM - -/* Define an entry in an IPA symbol list array. If IPA_SYM is used, the macro - IPA_SYM_STRUCT_NAME must be defined to the structure name holding the IPA - symbol addresses in that particular file, before including - gdbsupport/agent.h. */ -#define IPA_SYM(SYM) \ - { \ - STRINGIFY (IPA_SYM_EXPORTED_NAME (SYM)), \ - offsetof (IPA_SYM_STRUCT_NAME, addr_ ## SYM) \ - } - -/* The size in bytes of the buffer used to talk to the IPA helper - thread. */ -#define IPA_CMD_BUF_SIZE 1024 - -bool agent_loaded_p (void); - -extern bool debug_agent; - -extern bool use_agent; - -/* Capability of agent. Different agents may have different capabilities, - such as installing fast tracepoint or evaluating breakpoint conditions. - Capabilities are represented by bit-maps, and each capability occupies one - bit. */ - -enum agent_capa -{ - /* Capability to install fast tracepoint. */ - AGENT_CAPA_FAST_TRACE = 0x1, - /* Capability to install static tracepoint. */ - AGENT_CAPA_STATIC_TRACE = (0x1 << 1), -}; - -bool agent_capability_check (enum agent_capa); - -void agent_capability_invalidate (void); - -#endif /* COMMON_AGENT_H */ diff -Nru gdb-9.1/gdb/gdbsupport/alt-stack.h gdb-10.2/gdb/gdbsupport/alt-stack.h --- gdb-9.1/gdb/gdbsupport/alt-stack.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/alt-stack.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,70 +0,0 @@ -/* Temporarily install an alternate signal stack - - Copyright (C) 2019-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef GDBSUPPORT_ALT_STACK_H -#define GDBSUPPORT_ALT_STACK_H - -#include <signal.h> - -namespace gdb -{ - -/* Try to set up an alternate signal stack for SIGSEGV handlers. - This allows us to handle SIGSEGV signals generated when the - normal process stack is exhausted. If this stack is not set - up (sigaltstack is unavailable or fails) and a SIGSEGV is - generated when the normal stack is exhausted then the program - will behave as though no SIGSEGV handler was installed. */ -class alternate_signal_stack -{ -public: - alternate_signal_stack () - { -#ifdef HAVE_SIGALTSTACK - m_stack.reset ((char *) xmalloc (SIGSTKSZ)); - - stack_t stack; - stack.ss_sp = m_stack.get (); - stack.ss_size = SIGSTKSZ; - stack.ss_flags = 0; - - sigaltstack (&stack, &m_old_stack); -#endif - } - - ~alternate_signal_stack () - { -#ifdef HAVE_SIGALTSTACK - sigaltstack (&m_old_stack, nullptr); -#endif - } - - DISABLE_COPY_AND_ASSIGN (alternate_signal_stack); - -private: - -#ifdef HAVE_SIGALTSTACK - gdb::unique_xmalloc_ptr<char> m_stack; - stack_t m_old_stack; -#endif -}; - -} - -#endif /* GDBSUPPORT_ALT_STACK_H */ diff -Nru gdb-9.1/gdb/gdbsupport/array-view.h gdb-10.2/gdb/gdbsupport/array-view.h --- gdb-9.1/gdb/gdbsupport/array-view.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/array-view.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,259 +0,0 @@ -/* Copyright (C) 2017-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef COMMON_ARRAY_VIEW_H -#define COMMON_ARRAY_VIEW_H - -#include "traits.h" -#include <type_traits> - -/* An array_view is an abstraction that provides a non-owning view - over a sequence of contiguous objects. - - A way to put it is that array_view is to std::vector (and - std::array and built-in arrays with rank==1) like std::string_view - is to std::string. - - The main intent of array_view is to use it as function input - parameter type, making it possible to pass in any sequence of - contiguous objects, irrespective of whether the objects live on the - stack or heap and what actual container owns them. Implicit - construction from the element type is supported too, making it easy - to call functions that expect an array of elements when you only - have one element (usually on the stack). For example: - - struct A { .... }; - void function (gdb::array_view<A> as); - - std::vector<A> std_vec = ...; - std::array<A, N> std_array = ...; - A array[] = {...}; - A elem; - - function (std_vec); - function (std_array); - function (array); - function (elem); - - Views can be either mutable or const. A const view is simply - created by specifying a const T as array_view template parameter, - in which case operator[] of non-const array_view objects ends up - returning const references. Making the array_view itself const is - analogous to making a pointer itself be const. I.e., disables - re-seating the view/pointer. - - Since array_view objects are small (pointer plus size), and - designed to be trivially copyable, they should generally be passed - around by value. - - You can find unit tests covering the whole API in - unittests/array-view-selftests.c. */ - -namespace gdb { - -template <typename T> -class array_view -{ - /* True iff decayed T is the same as decayed U. E.g., we want to - say that 'T&' is the same as 'const T'. */ - template <typename U> - using IsDecayedT = typename std::is_same<typename std::decay<T>::type, - typename std::decay<U>::type>; - - /* True iff decayed T is the same as decayed U, and 'U *' is - implicitly convertible to 'T *'. This is a requirement for - several methods. */ - template <typename U> - using DecayedConvertible = gdb::And<IsDecayedT<U>, - std::is_convertible<U *, T *>>; - -public: - using value_type = T; - using reference = T &; - using const_reference = const T &; - using size_type = size_t; - - /* Default construction creates an empty view. */ - constexpr array_view () noexcept - : m_array (nullptr), m_size (0) - {} - - /* Create an array view over a single object of the type of an - array_view element. The created view as size==1. This is - templated on U to allow constructing a array_view<const T> over a - (non-const) T. The "convertible" requirement makes sure that you - can't create an array_view<T> over a const T. */ - template<typename U, - typename = Requires<DecayedConvertible<U>>> - constexpr array_view (U &elem) noexcept - : m_array (&elem), m_size (1) - {} - - /* Same as above, for rvalue references. */ - template<typename U, - typename = Requires<DecayedConvertible<U>>> - constexpr array_view (U &&elem) noexcept - : m_array (&elem), m_size (1) - {} - - /* Create an array view from a pointer to an array and an element - count. */ - template<typename U, - typename = Requires<DecayedConvertible<U>>> - constexpr array_view (U *array, size_t size) noexcept - : m_array (array), m_size (size) - {} - - /* Create an array view from a range. This is templated on both U - an V to allow passing in a mix of 'const T *' and 'T *'. */ - template<typename U, typename V, - typename = Requires<DecayedConvertible<U>>, - typename = Requires<DecayedConvertible<V>>> - constexpr array_view (U *begin, V *end) noexcept - : m_array (begin), m_size (end - begin) - {} - - /* Create an array view from an array. */ - template<typename U, size_t Size, - typename = Requires<DecayedConvertible<U>>> - constexpr array_view (U (&array)[Size]) noexcept - : m_array (array), m_size (Size) - {} - - /* Create an array view from a contiguous container. E.g., - std::vector and std::array. */ - template<typename Container, - typename = Requires<gdb::Not<IsDecayedT<Container>>>, - typename - = Requires<std::is_convertible - <decltype (std::declval<Container> ().data ()), - T *>>, - typename - = Requires<std::is_convertible - <decltype (std::declval<Container> ().size ()), - size_type>>> - constexpr array_view (Container &&c) noexcept - : m_array (c.data ()), m_size (c.size ()) - {} - - /* Observer methods. Some of these can't be constexpr until we - require C++14. */ - /*constexpr14*/ T *data () noexcept { return m_array; } - constexpr const T *data () const noexcept { return m_array; } - - /*constexpr14*/ T *begin () noexcept { return m_array; } - constexpr const T *begin () const noexcept { return m_array; } - - /*constexpr14*/ T *end () noexcept { return m_array + m_size; } - constexpr const T *end () const noexcept { return m_array + m_size; } - - /*constexpr14*/ reference operator[] (size_t index) noexcept - { return m_array[index]; } - constexpr const_reference operator[] (size_t index) const noexcept - { return m_array[index]; } - - constexpr size_type size () const noexcept { return m_size; } - constexpr bool empty () const noexcept { return m_size == 0; } - - /* Slice an array view. */ - - /* Return a new array view over SIZE elements starting at START. */ - constexpr array_view<T> slice (size_type start, size_type size) const noexcept - { return {m_array + start, size}; } - - /* Return a new array view over all the elements after START, - inclusive. */ - constexpr array_view<T> slice (size_type start) const noexcept - { return {m_array + start, size () - start}; } - -private: - T *m_array; - size_type m_size; -}; - -/* Compare LHS and RHS for (deep) equality. That is, whether LHS and - RHS have the same sizes, and whether each pair of elements of LHS - and RHS at the same position compares equal. */ - -template <typename T> -bool -operator== (const gdb::array_view<T> &lhs, const gdb::array_view<T> &rhs) -{ - if (lhs.size () != rhs.size ()) - return false; - - for (size_t i = 0; i < lhs.size (); i++) - if (!(lhs[i] == rhs[i])) - return false; - - return true; -} - -/* Compare two array_views for inequality. */ - -template <typename T> -bool -operator!= (const gdb::array_view<T> &lhs, const gdb::array_view<T> &rhs) -{ - return !(lhs == rhs); -} - -/* Create an array view from a pointer to an array and an element - count. - - This is useful as alternative to constructing an array_view using - brace initialization when the size variable you have handy is of - signed type, since otherwise without an explicit cast the code - would be ill-formed. - - For example, with: - - extern void foo (int, int, gdb::array_view<value *>); - - value *args[2]; - int nargs; - foo (1, 2, {values, nargs}); - - You'd get: - - source.c:10: error: narrowing conversion of ‘nargs’ from ‘int’ to - ‘size_t {aka long unsigned int}’ inside { } [-Werror=narrowing] - - You could fix it by writing the somewhat distracting explicit cast: - - foo (1, 2, {values, (size_t) nargs}); - - Or by instantiating an array_view explicitly: - - foo (1, 2, gdb::array_view<value *>(values, nargs)); - - Or, better, using make_array_view, which has the advantage of - inferring the arrav_view element's type: - - foo (1, 2, gdb::make_array_view (values, nargs)); -*/ - -template<typename U> -constexpr inline array_view<U> -make_array_view (U *array, size_t size) noexcept -{ - return {array, size}; -} - -} /* namespace gdb */ - -#endif diff -Nru gdb-9.1/gdb/gdbsupport/ax.def gdb-10.2/gdb/gdbsupport/ax.def --- gdb-9.1/gdb/gdbsupport/ax.def 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/ax.def 1970-01-01 00:00:00.000000000 +0000 @@ -1,97 +0,0 @@ -/* Definition of agent opcode values. -*- c -*- - Copyright (C) 1998-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -/* The actual values of the various bytecode operations. - - Other independent implementations of the agent bytecode engine will - rely on the exact values of these enums, and may not be recompiled - when we change this table. The numeric values should remain fixed - whenever possible. Thus, we assign them values explicitly here (to - allow gaps to form safely), and the disassembly table in - agentexpr.h behaves like an opcode map. If you want to see them - grouped logically, see doc/agentexpr.texi. - - Each line is of the form: - - DEFOP (name, size, data_size, consumed, produced, opcode) - - NAME is the name of the operation. - SIZE is the number of argument bytes that the operation takes from - the bytecode stream. - DATA_SIZE is the size of data operated on, in bits, for operations - that care (ref and const). It is zero otherwise. - CONSUMED is the number of stack elements consumed. - PRODUCED is the number of stack elements produced. - OPCODE is the operation's encoding. */ - -DEFOP (float, 0, 0, 0, 0, 0x01) -DEFOP (add, 0, 0, 2, 1, 0x02) -DEFOP (sub, 0, 0, 2, 1, 0x03) -DEFOP (mul, 0, 0, 2, 1, 0x04) -DEFOP (div_signed, 0, 0, 2, 1, 0x05) -DEFOP (div_unsigned, 0, 0, 2, 1, 0x06) -DEFOP (rem_signed, 0, 0, 2, 1, 0x07) -DEFOP (rem_unsigned, 0, 0, 2, 1, 0x08) -DEFOP (lsh, 0, 0, 2, 1, 0x09) -DEFOP (rsh_signed, 0, 0, 2, 1, 0x0a) -DEFOP (rsh_unsigned, 0, 0, 2, 1, 0x0b) -DEFOP (trace, 0, 0, 2, 0, 0x0c) -DEFOP (trace_quick, 1, 0, 1, 1, 0x0d) -DEFOP (log_not, 0, 0, 1, 1, 0x0e) -DEFOP (bit_and, 0, 0, 2, 1, 0x0f) -DEFOP (bit_or, 0, 0, 2, 1, 0x10) -DEFOP (bit_xor, 0, 0, 2, 1, 0x11) -DEFOP (bit_not, 0, 0, 1, 1, 0x12) -DEFOP (equal, 0, 0, 2, 1, 0x13) -DEFOP (less_signed, 0, 0, 2, 1, 0x14) -DEFOP (less_unsigned, 0, 0, 2, 1, 0x15) -DEFOP (ext, 1, 0, 1, 1, 0x16) -DEFOP (ref8, 0, 8, 1, 1, 0x17) -DEFOP (ref16, 0, 16, 1, 1, 0x18) -DEFOP (ref32, 0, 32, 1, 1, 0x19) -DEFOP (ref64, 0, 64, 1, 1, 0x1a) -DEFOP (ref_float, 0, 0, 1, 1, 0x1b) -DEFOP (ref_double, 0, 0, 1, 1, 0x1c) -DEFOP (ref_long_double, 0, 0, 1, 1, 0x1d) -DEFOP (l_to_d, 0, 0, 1, 1, 0x1e) -DEFOP (d_to_l, 0, 0, 1, 1, 0x1f) -DEFOP (if_goto, 2, 0, 1, 0, 0x20) -DEFOP (goto, 2, 0, 0, 0, 0x21) -DEFOP (const8, 1, 8, 0, 1, 0x22) -DEFOP (const16, 2, 16, 0, 1, 0x23) -DEFOP (const32, 4, 32, 0, 1, 0x24) -DEFOP (const64, 8, 64, 0, 1, 0x25) -DEFOP (reg, 2, 0, 0, 1, 0x26) -DEFOP (end, 0, 0, 0, 0, 0x27) -DEFOP (dup, 0, 0, 1, 2, 0x28) -DEFOP (pop, 0, 0, 1, 0, 0x29) -DEFOP (zero_ext, 1, 0, 1, 1, 0x2a) -DEFOP (swap, 0, 0, 2, 2, 0x2b) -DEFOP (getv, 2, 0, 0, 1, 0x2c) -DEFOP (setv, 2, 0, 1, 1, 0x2d) -DEFOP (tracev, 2, 0, 0, 1, 0x2e) -DEFOP (tracenz, 0, 0, 2, 0, 0x2f) -DEFOP (trace16, 2, 0, 1, 1, 0x30) -/* We need something here just to make the tables come out ok. */ -DEFOP (invalid2, 0, 0, 0, 0, 0x31) -/* The "consumed" number for pick is wrong, but there's no way to - express the right thing. */ -DEFOP (pick, 1, 0, 0, 1, 0x32) -DEFOP (rot, 0, 0, 3, 3, 0x33) -/* Both the argument and consumed numbers are dynamic for this one. */ -DEFOP (printf, 0, 0, 0, 0, 0x34) diff -Nru gdb-9.1/gdb/gdbsupport/block-signals.h gdb-10.2/gdb/gdbsupport/block-signals.h --- gdb-9.1/gdb/gdbsupport/block-signals.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/block-signals.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,67 +0,0 @@ -/* Block signals used by gdb - - Copyright (C) 2019-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef GDBSUPPORT_BLOCK_SIGNALS_H -#define GDBSUPPORT_BLOCK_SIGNALS_H - -#include <signal.h> - -#include "gdbsupport/gdb-sigmask.h" - -namespace gdb -{ - -/* This is an RAII class that temporarily blocks the signals needed by - gdb. This can be used before starting a new thread to ensure that - this thread starts with the appropriate signals blocked. */ -class block_signals -{ -public: - block_signals () - { -#ifdef HAVE_SIGPROCMASK - sigset_t mask; - sigemptyset (&mask); - sigaddset (&mask, SIGINT); - sigaddset (&mask, SIGCHLD); - sigaddset (&mask, SIGALRM); - sigaddset (&mask, SIGWINCH); - gdb_sigmask (SIG_BLOCK, &mask, &m_old_mask); -#endif - } - - ~block_signals () - { -#ifdef HAVE_SIGPROCMASK - gdb_sigmask (SIG_SETMASK, &m_old_mask, nullptr); -#endif - } - - DISABLE_COPY_AND_ASSIGN (block_signals); - -private: - -#ifdef HAVE_SIGPROCMASK - sigset_t m_old_mask; -#endif -}; - -} - -#endif /* GDBSUPPORT_BLOCK_SIGNALS_H */ diff -Nru gdb-9.1/gdb/gdbsupport/break-common.h gdb-10.2/gdb/gdbsupport/break-common.h --- gdb-9.1/gdb/gdbsupport/break-common.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/break-common.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,31 +0,0 @@ -/* Data structures associated with breakpoints shared in both GDB and - GDBserver. - Copyright (C) 1992-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef COMMON_BREAK_COMMON_H -#define COMMON_BREAK_COMMON_H - -enum target_hw_bp_type - { - hw_write = 0, /* Common HW watchpoint */ - hw_read = 1, /* Read HW watchpoint */ - hw_access = 2, /* Access HW watchpoint */ - hw_execute = 3 /* Execute HW breakpoint */ - }; - -#endif /* COMMON_BREAK_COMMON_H */ diff -Nru gdb-9.1/gdb/gdbsupport/btrace-common.c gdb-10.2/gdb/gdbsupport/btrace-common.c --- gdb-9.1/gdb/gdbsupport/btrace-common.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/btrace-common.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,190 +0,0 @@ -/* Copyright (C) 2014-2020 Free Software Foundation, Inc. - - Contributed by Intel Corp. <markus.t.metzger@intel.com> - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "common-defs.h" -#include "btrace-common.h" - - -/* See btrace-common.h. */ - -const char * -btrace_format_string (enum btrace_format format) -{ - switch (format) - { - case BTRACE_FORMAT_NONE: - return _("No or unknown format"); - - case BTRACE_FORMAT_BTS: - return _("Branch Trace Store"); - - case BTRACE_FORMAT_PT: - return _("Intel Processor Trace"); - } - - internal_error (__FILE__, __LINE__, _("Unknown branch trace format")); -} - -/* See btrace-common.h. */ - -const char * -btrace_format_short_string (enum btrace_format format) -{ - switch (format) - { - case BTRACE_FORMAT_NONE: - return "unknown"; - - case BTRACE_FORMAT_BTS: - return "bts"; - - case BTRACE_FORMAT_PT: - return "pt"; - } - - internal_error (__FILE__, __LINE__, _("Unknown branch trace format")); -} - -/* See btrace-common.h. */ - -void -btrace_data::fini () -{ - switch (format) - { - case BTRACE_FORMAT_NONE: - /* Nothing to do. */ - return; - - case BTRACE_FORMAT_BTS: - delete variant.bts.blocks; - variant.bts.blocks = nullptr; - return; - - case BTRACE_FORMAT_PT: - xfree (variant.pt.data); - return; - } - - internal_error (__FILE__, __LINE__, _("Unkown branch trace format.")); -} - -/* See btrace-common.h. */ - -bool -btrace_data::empty () const -{ - switch (format) - { - case BTRACE_FORMAT_NONE: - return true; - - case BTRACE_FORMAT_BTS: - return variant.bts.blocks->empty (); - - case BTRACE_FORMAT_PT: - return (variant.pt.size == 0); - } - - internal_error (__FILE__, __LINE__, _("Unkown branch trace format.")); -} - -/* See btrace-common.h. */ - -void -btrace_data::clear () -{ - fini (); - format = BTRACE_FORMAT_NONE; -} - -/* See btrace-common.h. */ - -int -btrace_data_append (struct btrace_data *dst, - const struct btrace_data *src) -{ - switch (src->format) - { - case BTRACE_FORMAT_NONE: - return 0; - - case BTRACE_FORMAT_BTS: - switch (dst->format) - { - default: - return -1; - - case BTRACE_FORMAT_NONE: - dst->format = BTRACE_FORMAT_BTS; - dst->variant.bts.blocks = new std::vector<btrace_block>; - - /* Fall-through. */ - case BTRACE_FORMAT_BTS: - { - unsigned int blk; - - /* We copy blocks in reverse order to have the oldest block at - index zero. */ - blk = src->variant.bts.blocks->size (); - while (blk != 0) - { - const btrace_block &block - = src->variant.bts.blocks->at (--blk); - dst->variant.bts.blocks->push_back (block); - } - } - } - return 0; - - case BTRACE_FORMAT_PT: - switch (dst->format) - { - default: - return -1; - - case BTRACE_FORMAT_NONE: - dst->format = BTRACE_FORMAT_PT; - dst->variant.pt.data = NULL; - dst->variant.pt.size = 0; - - /* fall-through. */ - case BTRACE_FORMAT_PT: - { - gdb_byte *data; - size_t size; - - size = src->variant.pt.size + dst->variant.pt.size; - data = (gdb_byte *) xmalloc (size); - - memcpy (data, dst->variant.pt.data, dst->variant.pt.size); - memcpy (data + dst->variant.pt.size, src->variant.pt.data, - src->variant.pt.size); - - xfree (dst->variant.pt.data); - - dst->variant.pt.data = data; - dst->variant.pt.size = size; - } - } - return 0; - } - - internal_error (__FILE__, __LINE__, _("Unkown branch trace format.")); -} diff -Nru gdb-9.1/gdb/gdbsupport/btrace-common.h gdb-10.2/gdb/gdbsupport/btrace-common.h --- gdb-9.1/gdb/gdbsupport/btrace-common.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/btrace-common.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,260 +0,0 @@ -/* Branch trace support for GDB, the GNU debugger. - - Copyright (C) 2013-2020 Free Software Foundation, Inc. - - Contributed by Intel Corp. <markus.t.metzger@intel.com>. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef COMMON_BTRACE_COMMON_H -#define COMMON_BTRACE_COMMON_H - -/* Branch tracing (btrace) is a per-thread control-flow execution trace of the - inferior. For presentation purposes, the branch trace is represented as a - list of sequential control-flow blocks, one such list per thread. */ - -/* A branch trace block. - - This represents a block of sequential control-flow. Adjacent blocks will be - connected via calls, returns, or jumps. The latter can be direct or - indirect, conditional or unconditional. Branches can further be - asynchronous, e.g. interrupts. */ -struct btrace_block -{ - /* The address of the first byte of the first instruction in the block. - The address may be zero if we do not know the beginning of this block, - such as for the first block in a delta trace. */ - CORE_ADDR begin; - - /* The address of the first byte of the last instruction in the block. */ - CORE_ADDR end; - - /* Simple constructor. */ - btrace_block (CORE_ADDR begin, CORE_ADDR end) - : begin (begin), - end (end) - { - /* Nothing. */ - } -}; - -/* Enumeration of btrace formats. */ - -enum btrace_format -{ - /* No branch trace format. */ - BTRACE_FORMAT_NONE, - - /* Branch trace is in Branch Trace Store (BTS) format. - Actually, the format is a sequence of blocks derived from BTS. */ - BTRACE_FORMAT_BTS, - - /* Branch trace is in Intel Processor Trace format. */ - BTRACE_FORMAT_PT -}; - -/* An enumeration of cpu vendors. */ - -enum btrace_cpu_vendor -{ - /* We do not know this vendor. */ - CV_UNKNOWN, - - /* Intel. */ - CV_INTEL -}; - -/* A cpu identifier. */ - -struct btrace_cpu -{ - /* The processor vendor. */ - enum btrace_cpu_vendor vendor; - - /* The cpu family. */ - unsigned short family; - - /* The cpu model. */ - unsigned char model; - - /* The cpu stepping. */ - unsigned char stepping; -}; - -/* A BTS configuration. */ - -struct btrace_config_bts -{ - /* The size of the branch trace buffer in bytes. - - This is unsigned int and not size_t since it is registered as - control variable for "set record btrace bts buffer-size". */ - unsigned int size; -}; - -/* An Intel Processor Trace configuration. */ - -struct btrace_config_pt -{ - /* The size of the branch trace buffer in bytes. - - This is unsigned int and not size_t since it is registered as - control variable for "set record btrace pt buffer-size". */ - unsigned int size; -}; - -/* A branch tracing configuration. - - This describes the requested configuration as well as the actually - obtained configuration. - We describe the configuration for all different formats so we can - easily switch between formats. */ - -struct btrace_config -{ - /* The branch tracing format. */ - enum btrace_format format; - - /* The BTS format configuration. */ - struct btrace_config_bts bts; - - /* The Intel Processor Trace format configuration. */ - struct btrace_config_pt pt; -}; - -/* Branch trace in BTS format. */ -struct btrace_data_bts -{ - /* Branch trace is represented as a vector of branch trace blocks starting - with the most recent block. This needs to be a pointer as we place - btrace_data_bts into a union. */ - std::vector<btrace_block> *blocks; -}; - -/* Configuration information to go with the trace data. */ -struct btrace_data_pt_config -{ - /* The processor on which the trace has been collected. */ - struct btrace_cpu cpu; -}; - -/* Branch trace in Intel Processor Trace format. */ -struct btrace_data_pt -{ - /* Some configuration information to go with the data. */ - struct btrace_data_pt_config config; - - /* The trace data. */ - gdb_byte *data; - - /* The size of DATA in bytes. */ - size_t size; -}; - -/* The branch trace data. */ -struct btrace_data -{ - btrace_data () = default; - - ~btrace_data () - { - fini (); - } - - btrace_data &operator= (btrace_data &&other) - { - if (this != &other) - { - fini (); - format = other.format; - variant = other.variant; - other.format = BTRACE_FORMAT_NONE; - } - return *this; - } - - /* Return true if this is empty; false otherwise. */ - bool empty () const; - - /* Clear this object. */ - void clear (); - - enum btrace_format format = BTRACE_FORMAT_NONE; - - union - { - /* Format == BTRACE_FORMAT_BTS. */ - struct btrace_data_bts bts; - - /* Format == BTRACE_FORMAT_PT. */ - struct btrace_data_pt pt; - } variant; - -private: - - DISABLE_COPY_AND_ASSIGN (btrace_data); - - void fini (); -}; - -/* Target specific branch trace information. */ -struct btrace_target_info; - -/* Enumeration of btrace read types. */ - -enum btrace_read_type -{ - /* Send all available trace. */ - BTRACE_READ_ALL, - - /* Send all available trace, if it changed. */ - BTRACE_READ_NEW, - - /* Send the trace since the last request. This will fail if the trace - buffer overflowed. */ - BTRACE_READ_DELTA -}; - -/* Enumeration of btrace errors. */ - -enum btrace_error -{ - /* No error. Everything is OK. */ - BTRACE_ERR_NONE, - - /* An unknown error. */ - BTRACE_ERR_UNKNOWN, - - /* Branch tracing is not supported on this system. */ - BTRACE_ERR_NOT_SUPPORTED, - - /* The branch trace buffer overflowed; no delta read possible. */ - BTRACE_ERR_OVERFLOW -}; - -/* Return a string representation of FORMAT. */ -extern const char *btrace_format_string (enum btrace_format format); - -/* Return an abbreviation string representation of FORMAT. */ -extern const char *btrace_format_short_string (enum btrace_format format); - -/* Append the branch trace data from SRC to the end of DST. - Both SRC and DST must use the same format. - Returns zero on success; a negative number otherwise. */ -extern int btrace_data_append (struct btrace_data *dst, - const struct btrace_data *src); - -#endif /* COMMON_BTRACE_COMMON_H */ diff -Nru gdb-9.1/gdb/gdbsupport/buffer.c gdb-10.2/gdb/gdbsupport/buffer.c --- gdb-9.1/gdb/gdbsupport/buffer.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/buffer.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,178 +0,0 @@ -/* A simple growing buffer for GDB. - - Copyright (C) 2009-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "common-defs.h" -#include "xml-utils.h" -#include "buffer.h" -#include "inttypes.h" -void -buffer_grow (struct buffer *buffer, const char *data, size_t size) -{ - char *new_buffer; - size_t new_buffer_size; - - if (size == 0) - return; - - new_buffer_size = buffer->buffer_size; - - if (new_buffer_size == 0) - new_buffer_size = 1; - - while (buffer->used_size + size > new_buffer_size) - new_buffer_size *= 2; - new_buffer = (char *) xrealloc (buffer->buffer, new_buffer_size); - memcpy (new_buffer + buffer->used_size, data, size); - buffer->buffer = new_buffer; - buffer->buffer_size = new_buffer_size; - buffer->used_size += size; -} - -void -buffer_free (struct buffer *buffer) -{ - if (!buffer) - return; - - xfree (buffer->buffer); - buffer->buffer = NULL; - buffer->buffer_size = 0; - buffer->used_size = 0; -} - -void -buffer_init (struct buffer *buffer) -{ - memset (buffer, 0, sizeof (*buffer)); -} - -char* -buffer_finish (struct buffer *buffer) -{ - char *ret = buffer->buffer; - buffer->buffer = NULL; - buffer->buffer_size = 0; - buffer->used_size = 0; - return ret; -} - -void -buffer_xml_printf (struct buffer *buffer, const char *format, ...) -{ - va_list ap; - const char *f; - const char *prev; - int percent = 0; - - va_start (ap, format); - - prev = format; - for (f = format; *f; f++) - { - if (percent) - { - char buf[32]; - char *str = buf; - const char *f_old = f; - - switch (*f) - { - case 's': - str = va_arg (ap, char *); - break; - case 'd': - sprintf (str, "%d", va_arg (ap, int)); - break; - case 'u': - sprintf (str, "%u", va_arg (ap, unsigned int)); - break; - case 'x': - sprintf (str, "%x", va_arg (ap, unsigned int)); - break; - case 'o': - sprintf (str, "%o", va_arg (ap, unsigned int)); - break; - case 'l': - f++; - switch (*f) - { - case 'd': - sprintf (str, "%ld", va_arg (ap, long)); - break; - case 'u': - sprintf (str, "%lu", va_arg (ap, unsigned long)); - break; - case 'x': - sprintf (str, "%lx", va_arg (ap, unsigned long)); - break; - case 'o': - sprintf (str, "%lo", va_arg (ap, unsigned long)); - break; - case 'l': - f++; - switch (*f) - { - case 'd': - sprintf (str, "%" PRId64, - (int64_t) va_arg (ap, long long)); - break; - case 'u': - sprintf (str, "%" PRIu64, - (uint64_t) va_arg (ap, unsigned long long)); - break; - case 'x': - sprintf (str, "%" PRIx64, - (uint64_t) va_arg (ap, unsigned long long)); - break; - case 'o': - sprintf (str, "%" PRIo64, - (uint64_t) va_arg (ap, unsigned long long)); - break; - default: - str = 0; - break; - } - break; - default: - str = 0; - break; - } - break; - default: - str = 0; - break; - } - - if (str) - { - buffer_grow (buffer, prev, f_old - prev - 1); - std::string p = xml_escape_text (str); - buffer_grow_str (buffer, p.c_str ()); - prev = f + 1; - } - percent = 0; - } - else if (*f == '%') - percent = 1; - } - - buffer_grow_str (buffer, prev); - va_end (ap); -} - diff -Nru gdb-9.1/gdb/gdbsupport/buffer.h gdb-10.2/gdb/gdbsupport/buffer.h --- gdb-9.1/gdb/gdbsupport/buffer.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/buffer.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,68 +0,0 @@ -/* A simple growing buffer for GDB. - - Copyright (C) 2009-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef COMMON_BUFFER_H -#define COMMON_BUFFER_H - -struct buffer -{ - char *buffer; - size_t buffer_size; /* allocated size */ - size_t used_size; /* actually used size */ -}; - -/* Append DATA of size SIZE to the end of BUFFER. Grows the buffer to - accommodate the new data. */ -void buffer_grow (struct buffer *buffer, const char *data, size_t size); - -/* Append C to the end of BUFFER. Grows the buffer to accommodate the - new data. */ - -static inline void -buffer_grow_char (struct buffer *buffer, char c) -{ - buffer_grow (buffer, &c, 1); -} - -/* Release any memory held by BUFFER. */ -void buffer_free (struct buffer *buffer); - -/* Initialize BUFFER. BUFFER holds no memory afterwards. */ -void buffer_init (struct buffer *buffer); - -/* Return a pointer into BUFFER data, effectively transferring - ownership of the buffer memory to the caller. Calling buffer_free - afterwards has no effect on the returned data. */ -char* buffer_finish (struct buffer *buffer); - -/* Simple printf to buffer function. Current implemented formatters: - %s - grow an xml escaped text in BUFFER. - %d - grow an signed integer in BUFFER. - %u - grow an unsigned integer in BUFFER. - %x - grow an unsigned integer formatted in hexadecimal in BUFFER. - %o - grow an unsigned integer formatted in octal in BUFFER. */ -void buffer_xml_printf (struct buffer *buffer, const char *format, ...) - ATTRIBUTE_PRINTF (2, 3); - -#define buffer_grow_str(BUFFER,STRING) \ - buffer_grow (BUFFER, STRING, strlen (STRING)) -#define buffer_grow_str0(BUFFER,STRING) \ - buffer_grow (BUFFER, STRING, strlen (STRING) + 1) - -#endif /* COMMON_BUFFER_H */ diff -Nru gdb-9.1/gdb/gdbsupport/byte-vector.h gdb-10.2/gdb/gdbsupport/byte-vector.h --- gdb-9.1/gdb/gdbsupport/byte-vector.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/byte-vector.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,63 +0,0 @@ -/* Copyright (C) 2017-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef COMMON_BYTE_VECTOR_H -#define COMMON_BYTE_VECTOR_H - -#include "gdbsupport/def-vector.h" - -namespace gdb { - -/* byte_vector is a gdb_byte std::vector with a custom allocator that - unlike std::vector<gdb_byte> does not zero-initialize new elements - by default when the vector is created/resized. This is what you - usually want when working with byte buffers, since if you're - creating or growing a buffer you'll most surely want to fill it in - with data, in which case zero-initialization would be a - pessimization. For example: - - gdb::byte_vector buf (some_large_size); - fill_with_data (buf.data (), buf.size ()); - - On the odd case you do need zero initialization, then you can still - call the overloads that specify an explicit value, like: - - gdb::byte_vector buf (some_initial_size, 0); - buf.resize (a_bigger_size, 0); - - (Or use std::vector<gdb_byte> instead.) - - Note that unlike std::vector<gdb_byte>, function local - gdb::byte_vector objects constructed with an initial size like: - - gdb::byte_vector buf (some_size); - fill_with_data (buf.data (), buf.size ()); - - usually compile down to the exact same as: - - std::unique_ptr<byte[]> buf (new gdb_byte[some_size]); - fill_with_data (buf.get (), some_size); - - with the former having the advantage of being a bit more readable, - and providing the whole std::vector API, if you end up needing it. -*/ -using byte_vector = gdb::def_vector<gdb_byte>; -using char_vector = gdb::def_vector<char>; - -} /* namespace gdb */ - -#endif /* COMMON_DEF_VECTOR_H */ diff -Nru gdb-9.1/gdb/gdbsupport/cleanups.c gdb-10.2/gdb/gdbsupport/cleanups.c --- gdb-9.1/gdb/gdbsupport/cleanups.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/cleanups.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,144 +0,0 @@ -/* Cleanup routines for GDB, the GNU debugger. - - Copyright (C) 1986-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "common-defs.h" -#include "cleanups.h" - -/* The cleanup list records things that have to be undone - if an error happens (descriptors to be closed, memory to be freed, etc.) - Each link in the chain records a function to call and an - argument to give it. - - Use make_cleanup to add an element to the cleanup chain. - Use do_cleanups to do all cleanup actions back to a given - point in the chain. Use discard_cleanups to remove cleanups - from the chain back to a given point, not doing them. - - If the argument is pointer to allocated memory, then you need - to additionally set the 'free_arg' member to a function that will - free that memory. This function will be called both when the cleanup - is executed and when it's discarded. */ - -struct cleanup -{ - struct cleanup *next; - void (*function) (void *); - void (*free_arg) (void *); - void *arg; -}; - -/* Used to mark the end of a cleanup chain. - The value is chosen so that it: - - is non-NULL so that make_cleanup never returns NULL, - - causes a segv if dereferenced - [though this won't catch errors that a value of, say, - ((struct cleanup *) -1) will] - - displays as something useful when printed in gdb. - This is const for a bit of extra robustness. - It is initialized to coax gcc into putting it into .rodata. - All fields are initialized to survive -Wextra. */ -static const struct cleanup sentinel_cleanup = { 0, 0, 0, 0 }; - -/* Handy macro to use when referring to sentinel_cleanup. */ -#define SENTINEL_CLEANUP ((struct cleanup *) &sentinel_cleanup) - -/* Chain of cleanup actions established with make_final_cleanup, - to be executed when gdb exits. */ -static struct cleanup *final_cleanup_chain = SENTINEL_CLEANUP; - -/* Main worker routine to create a cleanup. - PMY_CHAIN is a pointer to either cleanup_chain or final_cleanup_chain. - FUNCTION is the function to call to perform the cleanup. - ARG is passed to FUNCTION when called. - FREE_ARG, if non-NULL, is called after the cleanup is performed. - - The result is a pointer to the previous chain pointer - to be passed later to do_cleanups or discard_cleanups. */ - -static struct cleanup * -make_my_cleanup2 (struct cleanup **pmy_chain, make_cleanup_ftype *function, - void *arg, void (*free_arg) (void *)) -{ - struct cleanup *newobj = XNEW (struct cleanup); - struct cleanup *old_chain = *pmy_chain; - - newobj->next = *pmy_chain; - newobj->function = function; - newobj->free_arg = free_arg; - newobj->arg = arg; - *pmy_chain = newobj; - - gdb_assert (old_chain != NULL); - return old_chain; -} - -/* Worker routine to create a cleanup without a destructor. - PMY_CHAIN is a pointer to either cleanup_chain or final_cleanup_chain. - FUNCTION is the function to call to perform the cleanup. - ARG is passed to FUNCTION when called. - - The result is a pointer to the previous chain pointer - to be passed later to do_cleanups or discard_cleanups. */ - -static struct cleanup * -make_my_cleanup (struct cleanup **pmy_chain, make_cleanup_ftype *function, - void *arg) -{ - return make_my_cleanup2 (pmy_chain, function, arg, NULL); -} - -/* Add a new cleanup to the final cleanup_chain, - and return the previous chain pointer - to be passed later to do_cleanups or discard_cleanups. - Args are FUNCTION to clean up with, and ARG to pass to it. */ - -struct cleanup * -make_final_cleanup (make_cleanup_ftype *function, void *arg) -{ - return make_my_cleanup (&final_cleanup_chain, function, arg); -} - -/* Worker routine to perform cleanups. - PMY_CHAIN is a pointer to either cleanup_chain or final_cleanup_chain. - OLD_CHAIN is the result of a "make" cleanup routine. - Cleanups are performed until we get back to the old end of the chain. */ - -static void -do_my_cleanups (struct cleanup **pmy_chain, - struct cleanup *old_chain) -{ - struct cleanup *ptr; - - while ((ptr = *pmy_chain) != old_chain) - { - *pmy_chain = ptr->next; /* Do this first in case of recursion. */ - (*ptr->function) (ptr->arg); - if (ptr->free_arg) - (*ptr->free_arg) (ptr->arg); - xfree (ptr); - } -} - -/* Discard final cleanups and do the actions they describe. */ - -void -do_final_cleanups () -{ - do_my_cleanups (&final_cleanup_chain, SENTINEL_CLEANUP); -} diff -Nru gdb-9.1/gdb/gdbsupport/cleanups.h gdb-10.2/gdb/gdbsupport/cleanups.h --- gdb-9.1/gdb/gdbsupport/cleanups.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/cleanups.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,39 +0,0 @@ -/* Cleanups. - Copyright (C) 1986-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef COMMON_CLEANUPS_H -#define COMMON_CLEANUPS_H - -/* Outside of cleanups.c, this is an opaque type. */ -struct cleanup; - -/* NOTE: cagney/2000-03-04: This typedef is strictly for the - make_cleanup function declarations below. Do not use this typedef - as a cast when passing functions into the make_cleanup() code. - Instead either use a bounce function or add a wrapper function. - Calling a f(char*) function with f(void*) is non-portable. */ -typedef void (make_cleanup_ftype) (void *); - -/* Function type for the dtor in make_cleanup_dtor. */ -typedef void (make_cleanup_dtor_ftype) (void *); - -extern struct cleanup *make_final_cleanup (make_cleanup_ftype *, void *); - -extern void do_final_cleanups (); - -#endif /* COMMON_CLEANUPS_H */ diff -Nru gdb-9.1/gdb/gdbsupport/common-debug.c gdb-10.2/gdb/gdbsupport/common-debug.c --- gdb-9.1/gdb/gdbsupport/common-debug.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/common-debug.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,37 +0,0 @@ -/* Debug printing functions. - - Copyright (C) 2014-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "common-defs.h" -#include "common-debug.h" - -/* See gdbsupport/common-debug.h. */ - -bool show_debug_regs; - -/* See gdbsupport/common-debug.h. */ - -void -debug_printf (const char *fmt, ...) -{ - va_list ap; - - va_start (ap, fmt); - debug_vprintf (fmt, ap); - va_end (ap); -} diff -Nru gdb-9.1/gdb/gdbsupport/common-debug.h gdb-10.2/gdb/gdbsupport/common-debug.h --- gdb-9.1/gdb/gdbsupport/common-debug.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/common-debug.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,41 +0,0 @@ -/* Declarations for debug printing functions. - - Copyright (C) 2014-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef COMMON_COMMON_DEBUG_H -#define COMMON_COMMON_DEBUG_H - -/* Set to true to enable debugging of hardware breakpoint/ - watchpoint support code. */ - -extern bool show_debug_regs; - -/* Print a formatted message to the appropriate channel for - debugging output for the client. */ - -extern void debug_printf (const char *format, ...) - ATTRIBUTE_PRINTF (1, 2); - -/* Print a formatted message to the appropriate channel for - debugging output for the client. This function must be - provided by the client. */ - -extern void debug_vprintf (const char *format, va_list ap) - ATTRIBUTE_PRINTF (1, 0); - -#endif /* COMMON_COMMON_DEBUG_H */ diff -Nru gdb-9.1/gdb/gdbsupport/common-defs.h gdb-10.2/gdb/gdbsupport/common-defs.h --- gdb-9.1/gdb/gdbsupport/common-defs.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/common-defs.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,159 +0,0 @@ -/* Common definitions. - - Copyright (C) 1986-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef COMMON_COMMON_DEFS_H -#define COMMON_COMMON_DEFS_H - -#include "config.h" - -#undef PACKAGE_NAME -#undef PACKAGE_VERSION -#undef PACKAGE_STRING -#undef PACKAGE_TARNAME - -#ifdef GDBSERVER -#include "build-gnulib-gdbserver/config.h" -#else -#include "../../gnulib/config.h" -#endif - -#undef PACKAGE_NAME -#undef PACKAGE_VERSION -#undef PACKAGE_STRING -#undef PACKAGE_TARNAME - -/* From: - https://www.gnu.org/software/gnulib/manual/html_node/stdint_002eh.html - - "On some hosts that predate C++11, when using C++ one must define - __STDC_CONSTANT_MACROS to make visible the definitions of constant - macros such as INTMAX_C, and one must define __STDC_LIMIT_MACROS to - make visible the definitions of limit macros such as INTMAX_MAX.". - - And: - https://www.gnu.org/software/gnulib/manual/html_node/inttypes_002eh.html - - "On some hosts that predate C++11, when using C++ one must define - __STDC_FORMAT_MACROS to make visible the declarations of format - macros such as PRIdMAX." - - Must do this before including any system header, since other system - headers may include stdint.h/inttypes.h. */ -#define __STDC_CONSTANT_MACROS 1 -#define __STDC_LIMIT_MACROS 1 -#define __STDC_FORMAT_MACROS 1 - -/* Some distros enable _FORTIFY_SOURCE by default, which on occasion - has caused build failures with -Wunused-result when a patch is - developed on a distro that does not enable _FORTIFY_SOURCE. We - enable it here in order to try to catch these problems earlier; - plus this seems like a reasonable safety measure. The check for - optimization is required because _FORTIFY_SOURCE only works when - optimization is enabled. If _FORTIFY_SOURCE is already defined, - then we don't do anything. Also, on MinGW, fortify requires - linking to -lssp, and to avoid the hassle of checking for - that and linking to it statically, we just don't define - _FORTIFY_SOURCE there. */ - -#if (!defined _FORTIFY_SOURCE && defined __OPTIMIZE__ && __OPTIMIZE__ > 0 \ - && !defined(__MINGW32__)) -#define _FORTIFY_SOURCE 2 -#endif - -/* We don't support Windows versions before XP, so we define - _WIN32_WINNT correspondingly to ensure the Windows API headers - expose the required symbols. */ -#if defined (__MINGW32__) || defined (__CYGWIN__) -# ifdef _WIN32_WINNT -# if _WIN32_WINNT < 0x0501 -# undef _WIN32_WINNT -# define _WIN32_WINNT 0x0501 -# endif -# else -# define _WIN32_WINNT 0x0501 -# endif -#endif /* __MINGW32__ || __CYGWIN__ */ - -#include <stdarg.h> -#include <stdio.h> -#include <stdlib.h> -#include <stddef.h> -#include <stdint.h> -#include <string.h> -#ifdef HAVE_STRINGS_H -#include <strings.h> /* for strcasecmp and strncasecmp */ -#endif -#include <errno.h> -#include <alloca.h> -/* Must be included before pathmax.h to avoid build errors about localtime_r - and gmtime_r in gnulib on MinGW. This is a gnulib bug: - https://lists.gnu.org/archive/html/bug-gnulib/2019-11/msg00022.html */ -#include <time.h> - - -#include "ansidecl.h" -/* This is defined by ansidecl.h, but we prefer gnulib's version. On - MinGW, gnulib might enable __USE_MINGW_ANSI_STDIO, which may or not - require use of attribute gnu_printf instead of printf. gnulib - checks that at configure time. Since _GL_ATTRIBUTE_FORMAT_PRINTF - is compatible with ATTRIBUTE_PRINTF, simply use it. */ -#undef ATTRIBUTE_PRINTF -#define ATTRIBUTE_PRINTF _GL_ATTRIBUTE_FORMAT_PRINTF - -#if GCC_VERSION >= 3004 -#define ATTRIBUTE_UNUSED_RESULT __attribute__ ((__warn_unused_result__)) -#else -#define ATTRIBUTE_UNUSED_RESULT -#endif - -#include "libiberty.h" -#include "pathmax.h" -#include "gdb/signals.h" -#include "gdb_locale.h" -#include "ptid.h" -#include "common-types.h" -#include "common-utils.h" -#include "gdb_assert.h" -#include "errors.h" -#include "print-utils.h" -#include "common-debug.h" -#include "cleanups.h" -#include "common-exceptions.h" -#include "gdbsupport/poison.h" - -#define EXTERN_C extern "C" -#define EXTERN_C_PUSH extern "C" { -#define EXTERN_C_POP } - -/* Pull in gdb::unique_xmalloc_ptr. */ -#include "gdbsupport/gdb_unique_ptr.h" - -/* String containing the current directory (what getwd would return). */ -extern char *current_directory; - -/* sbrk on macOS is not useful for our purposes, since sbrk(0) always - returns the same value. brk/sbrk on macOS is just an emulation - that always returns a pointer to a 4MB section reserved for - that. */ - -#if defined (HAVE_SBRK) && !__APPLE__ -#define HAVE_USEFUL_SBRK 1 -#endif - -#endif /* COMMON_COMMON_DEFS_H */ diff -Nru gdb-9.1/gdb/gdbsupport/common-exceptions.c gdb-10.2/gdb/gdbsupport/common-exceptions.c --- gdb-9.1/gdb/gdbsupport/common-exceptions.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/common-exceptions.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,235 +0,0 @@ -/* Exception (throw catch) mechanism, for GDB, the GNU debugger. - - Copyright (C) 1986-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "common-defs.h" -#include "common-exceptions.h" -#include <forward_list> - -/* Possible catcher states. */ -enum catcher_state { - /* Initial state, a new catcher has just been created. */ - CATCHER_CREATED, - /* The catch code is running. */ - CATCHER_RUNNING, - CATCHER_RUNNING_1, - /* The catch code threw an exception. */ - CATCHER_ABORTING -}; - -/* Possible catcher actions. */ -enum catcher_action { - CATCH_ITER, - CATCH_ITER_1, - CATCH_THROWING -}; - -struct catcher -{ - enum catcher_state state = CATCHER_CREATED; - /* Jump buffer pointing back at the exception handler. */ - jmp_buf buf; - /* Status buffer belonging to the exception handler. */ - struct gdb_exception exception; -}; - -/* Where to go for throw_exception(). */ -static std::forward_list<struct catcher> catchers; - -jmp_buf * -exceptions_state_mc_init () -{ - catchers.emplace_front (); - return &catchers.front ().buf; -} - -/* Catcher state machine. Returns non-zero if the m/c should be run - again, zero if it should abort. */ - -static int -exceptions_state_mc (enum catcher_action action) -{ - switch (catchers.front ().state) - { - case CATCHER_CREATED: - switch (action) - { - case CATCH_ITER: - /* Allow the code to run the catcher. */ - catchers.front ().state = CATCHER_RUNNING; - return 1; - default: - internal_error (__FILE__, __LINE__, _("bad state")); - } - case CATCHER_RUNNING: - switch (action) - { - case CATCH_ITER: - /* No error/quit has occured. */ - return 0; - case CATCH_ITER_1: - catchers.front ().state = CATCHER_RUNNING_1; - return 1; - case CATCH_THROWING: - catchers.front ().state = CATCHER_ABORTING; - /* See also throw_exception. */ - return 1; - default: - internal_error (__FILE__, __LINE__, _("bad switch")); - } - case CATCHER_RUNNING_1: - switch (action) - { - case CATCH_ITER: - /* The did a "break" from the inner while loop. */ - return 0; - case CATCH_ITER_1: - catchers.front ().state = CATCHER_RUNNING; - return 0; - case CATCH_THROWING: - catchers.front ().state = CATCHER_ABORTING; - /* See also throw_exception. */ - return 1; - default: - internal_error (__FILE__, __LINE__, _("bad switch")); - } - case CATCHER_ABORTING: - switch (action) - { - case CATCH_ITER: - { - /* Exit normally if this catcher can handle this - exception. The caller analyses the func return - values. */ - return 0; - } - default: - internal_error (__FILE__, __LINE__, _("bad state")); - } - default: - internal_error (__FILE__, __LINE__, _("bad switch")); - } -} - -int -exceptions_state_mc_catch (struct gdb_exception *exception, - int mask) -{ - *exception = std::move (catchers.front ().exception); - catchers.pop_front (); - - if (exception->reason < 0) - { - if (mask & RETURN_MASK (exception->reason)) - { - /* Exit normally and let the caller handle the - exception. */ - return 1; - } - - /* The caller didn't request that the event be caught, relay the - event to the next exception_catch/CATCH_SJLJ. */ - throw_exception_sjlj (*exception); - } - - /* No exception was thrown. */ - return 0; -} - -int -exceptions_state_mc_action_iter (void) -{ - return exceptions_state_mc (CATCH_ITER); -} - -int -exceptions_state_mc_action_iter_1 (void) -{ - return exceptions_state_mc (CATCH_ITER_1); -} - -/* Return EXCEPTION to the nearest containing CATCH_SJLJ block. */ - -void -throw_exception_sjlj (const struct gdb_exception &exception) -{ - /* Jump to the nearest CATCH_SJLJ block, communicating REASON to - that call via setjmp's return value. Note that REASON can't be - zero, by definition in common-exceptions.h. */ - exceptions_state_mc (CATCH_THROWING); - enum return_reason reason = exception.reason; - catchers.front ().exception = exception; - longjmp (catchers.front ().buf, reason); -} - -/* Implementation of throw_exception that uses C++ try/catch. */ - -void -throw_exception (gdb_exception &&exception) -{ - if (exception.reason == RETURN_QUIT) - throw gdb_exception_quit (std::move (exception)); - else if (exception.reason == RETURN_ERROR) - throw gdb_exception_error (std::move (exception)); - else - gdb_assert_not_reached ("invalid return reason"); -} - -static void ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF (3, 0) -throw_it (enum return_reason reason, enum errors error, const char *fmt, - va_list ap) -{ - if (reason == RETURN_QUIT) - throw gdb_exception_quit (fmt, ap); - else if (reason == RETURN_ERROR) - throw gdb_exception_error (error, fmt, ap); - else - gdb_assert_not_reached ("invalid return reason"); -} - -void -throw_verror (enum errors error, const char *fmt, va_list ap) -{ - throw_it (RETURN_ERROR, error, fmt, ap); -} - -void -throw_vquit (const char *fmt, va_list ap) -{ - throw_it (RETURN_QUIT, GDB_NO_ERROR, fmt, ap); -} - -void -throw_error (enum errors error, const char *fmt, ...) -{ - va_list args; - - va_start (args, fmt); - throw_verror (error, fmt, args); - va_end (args); -} - -void -throw_quit (const char *fmt, ...) -{ - va_list args; - - va_start (args, fmt); - throw_vquit (fmt, args); - va_end (args); -} diff -Nru gdb-9.1/gdb/gdbsupport/common-exceptions.h gdb-10.2/gdb/gdbsupport/common-exceptions.h --- gdb-9.1/gdb/gdbsupport/common-exceptions.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/common-exceptions.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,304 +0,0 @@ -/* Exception (throw catch) mechanism, for GDB, the GNU debugger. - - Copyright (C) 1986-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef COMMON_COMMON_EXCEPTIONS_H -#define COMMON_COMMON_EXCEPTIONS_H - -#include <setjmp.h> -#include <new> -#include <memory> -#include <string> - -/* Reasons for calling throw_exceptions(). NOTE: all reason values - must be different from zero. enum value 0 is reserved for internal - use as the return value from an initial setjmp(). */ - -enum return_reason - { - /* User interrupt. */ - RETURN_QUIT = -2, - /* Any other error. */ - RETURN_ERROR - }; - -#define RETURN_MASK(reason) (1 << (int)(-reason)) - -typedef enum -{ - RETURN_MASK_QUIT = RETURN_MASK (RETURN_QUIT), - RETURN_MASK_ERROR = RETURN_MASK (RETURN_ERROR), - RETURN_MASK_ALL = (RETURN_MASK_QUIT | RETURN_MASK_ERROR) -} return_mask; - -/* Describe all exceptions. */ - -enum errors { - GDB_NO_ERROR, - - /* Any generic error, the corresponding text is in - exception.message. */ - GENERIC_ERROR, - - /* Something requested was not found. */ - NOT_FOUND_ERROR, - - /* Thread library lacks support necessary for finding thread local - storage. */ - TLS_NO_LIBRARY_SUPPORT_ERROR, - - /* Load module not found while attempting to find thread local storage. */ - TLS_LOAD_MODULE_NOT_FOUND_ERROR, - - /* Thread local storage has not been allocated yet. */ - TLS_NOT_ALLOCATED_YET_ERROR, - - /* Something else went wrong while attempting to find thread local - storage. The ``struct gdb_exception'' message field provides - more detail. */ - TLS_GENERIC_ERROR, - - /* Problem parsing an XML document. */ - XML_PARSE_ERROR, - - /* Error accessing memory. */ - MEMORY_ERROR, - - /* Value not available. E.g., a register was not collected in a - traceframe. */ - NOT_AVAILABLE_ERROR, - - /* Value was optimized out. Note: if the value was a register, this - means the register was not saved in the frame. */ - OPTIMIZED_OUT_ERROR, - - /* DW_OP_entry_value resolving failed. */ - NO_ENTRY_VALUE_ERROR, - - /* Target throwing an error has been closed. Current command should be - aborted as the inferior state is no longer valid. */ - TARGET_CLOSE_ERROR, - - /* An undefined command was executed. */ - UNDEFINED_COMMAND_ERROR, - - /* Requested feature, method, mechanism, etc. is not supported. */ - NOT_SUPPORTED_ERROR, - - /* The number of candidates generated during line completion has - reached the user's specified limit. This isn't an error, this exception - is used to halt searching for more completions, but for consistency - "_ERROR" is appended to the name. */ - MAX_COMPLETIONS_REACHED_ERROR, - - /* Add more errors here. */ - NR_ERRORS -}; - -struct gdb_exception -{ - gdb_exception () - : reason ((enum return_reason) 0), - error (GDB_NO_ERROR) - { - } - - gdb_exception (enum return_reason r, enum errors e) - : reason (r), - error (e) - { - } - - gdb_exception (enum return_reason r, enum errors e, - const char *fmt, va_list ap) - ATTRIBUTE_PRINTF (4, 0) - : reason (r), - error (e), - message (std::make_shared<std::string> (string_vprintf (fmt, ap))) - { - } - - /* The move constructor exists so that we can mark it "noexcept", - which is a good practice for any sort of exception object. */ - explicit gdb_exception (gdb_exception &&other) noexcept = default; - - /* The copy constructor exists so that we can mark it "noexcept", - which is a good practice for any sort of exception object. */ - gdb_exception (const gdb_exception &other) noexcept - : reason (other.reason), - error (other.error), - message (other.message) - { - } - - /* The assignment operator exists so that we can mark it "noexcept", - which is a good practice for any sort of exception object. */ - gdb_exception &operator= (const gdb_exception &other) noexcept - { - reason = other.reason; - error = other.error; - message = other.message; - return *this; - } - - gdb_exception &operator= (gdb_exception &&other) noexcept = default; - - /* Return the contents of the exception message, as a C string. The - string remains owned by the exception object. */ - const char *what () const noexcept - { - return message->c_str (); - } - - enum return_reason reason; - enum errors error; - std::shared_ptr<std::string> message; -}; - -/* Functions to drive the sjlj-based exceptions state machine. Though - declared here by necessity, these functions should be considered - internal to the exceptions subsystem and not used other than via - the TRY/CATCH (or TRY_SJLJ/CATCH_SJLJ) macros defined below. */ - -extern jmp_buf *exceptions_state_mc_init (void); -extern int exceptions_state_mc_action_iter (void); -extern int exceptions_state_mc_action_iter_1 (void); -extern int exceptions_state_mc_catch (struct gdb_exception *, int); - -/* Macro to wrap up standard try/catch behavior. - - The double loop lets us correctly handle code "break"ing out of the - try catch block. (It works as the "break" only exits the inner - "while" loop, the outer for loop detects this handling it - correctly.) Of course "return" and "goto" are not so lucky. - - For instance: - - *INDENT-OFF* - - TRY_SJLJ - { - } - CATCH_SJLJ (e, RETURN_MASK_ERROR) - { - switch (e.reason) - { - case RETURN_ERROR: ... - } - } - END_CATCH_SJLJ - - The SJLJ variants are needed in some cases where gdb exceptions - need to cross third-party library code compiled without exceptions - support (e.g., readline). */ - -#define TRY_SJLJ \ - { \ - jmp_buf *buf = \ - exceptions_state_mc_init (); \ - setjmp (*buf); \ - } \ - while (exceptions_state_mc_action_iter ()) \ - while (exceptions_state_mc_action_iter_1 ()) - -#define CATCH_SJLJ(EXCEPTION, MASK) \ - { \ - struct gdb_exception EXCEPTION; \ - if (exceptions_state_mc_catch (&(EXCEPTION), MASK)) - -#define END_CATCH_SJLJ \ - } - -/* The exception types client code may catch. They're just shims - around gdb_exception that add nothing but type info. Which is used - is selected depending on the MASK argument passed to CATCH. */ - -struct gdb_exception_error : public gdb_exception -{ - gdb_exception_error (enum errors e, const char *fmt, va_list ap) - ATTRIBUTE_PRINTF (3, 0) - : gdb_exception (RETURN_ERROR, e, fmt, ap) - { - } - - explicit gdb_exception_error (gdb_exception &&ex) noexcept - : gdb_exception (std::move (ex)) - { - gdb_assert (ex.reason == RETURN_ERROR); - } -}; - -struct gdb_exception_quit : public gdb_exception -{ - gdb_exception_quit (const char *fmt, va_list ap) - ATTRIBUTE_PRINTF (2, 0) - : gdb_exception (RETURN_QUIT, GDB_NO_ERROR, fmt, ap) - { - } - - explicit gdb_exception_quit (gdb_exception &&ex) noexcept - : gdb_exception (std::move (ex)) - { - gdb_assert (ex.reason == RETURN_QUIT); - } -}; - -/* An exception type that inherits from both std::bad_alloc and a gdb - exception. This is necessary because operator new can only throw - std::bad_alloc, and OTOH, we want exceptions thrown due to memory - allocation error to be caught by all the CATCH/RETURN_MASK_ALL - spread around the codebase. */ - -struct gdb_quit_bad_alloc - : public gdb_exception_quit, - public std::bad_alloc -{ - explicit gdb_quit_bad_alloc (gdb_exception &&ex) noexcept - : gdb_exception_quit (std::move (ex)), - std::bad_alloc () - { - } -}; - -/* *INDENT-ON* */ - -/* Throw an exception (as described by "struct gdb_exception"), - landing in the inner most containing exception handler established - using TRY/CATCH. */ -extern void throw_exception (gdb_exception &&exception) - ATTRIBUTE_NORETURN; - -/* Throw an exception by executing a LONG JUMP to the inner most - containing exception handler established using TRY_SJLJ. Necessary - in some cases where we need to throw GDB exceptions across - third-party library code (e.g., readline). */ -extern void throw_exception_sjlj (const struct gdb_exception &exception) - ATTRIBUTE_NORETURN; - -/* Convenience wrappers around throw_exception that throw GDB - errors. */ -extern void throw_verror (enum errors, const char *fmt, va_list ap) - ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF (2, 0); -extern void throw_vquit (const char *fmt, va_list ap) - ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF (1, 0); -extern void throw_error (enum errors error, const char *fmt, ...) - ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF (2, 3); -extern void throw_quit (const char *fmt, ...) - ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF (1, 2); - -#endif /* COMMON_COMMON_EXCEPTIONS_H */ diff -Nru gdb-9.1/gdb/gdbsupport/common-gdbthread.h gdb-10.2/gdb/gdbsupport/common-gdbthread.h --- gdb-9.1/gdb/gdbsupport/common-gdbthread.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/common-gdbthread.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,25 +0,0 @@ -/* Common multi-process/thread control defs for GDB and gdbserver. - Copyright (C) 1987-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef COMMON_COMMON_GDBTHREAD_H -#define COMMON_COMMON_GDBTHREAD_H - -/* Switch from one thread to another. */ -extern void switch_to_thread (ptid_t ptid); - -#endif /* COMMON_COMMON_GDBTHREAD_H */ diff -Nru gdb-9.1/gdb/gdbsupport/common-inferior.c gdb-10.2/gdb/gdbsupport/common-inferior.c --- gdb-9.1/gdb/gdbsupport/common-inferior.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/common-inferior.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,26 +0,0 @@ -/* Functions to deal with the inferior being executed on GDB or - GDBserver. - - Copyright (C) 2019-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "gdbsupport/common-defs.h" -#include "gdbsupport/common-inferior.h" - -/* See common-inferior.h. */ - -bool startup_with_shell = true; diff -Nru gdb-9.1/gdb/gdbsupport/common-inferior.h gdb-10.2/gdb/gdbsupport/common-inferior.h --- gdb-9.1/gdb/gdbsupport/common-inferior.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/common-inferior.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,61 +0,0 @@ -/* Functions to deal with the inferior being executed on GDB or - GDBserver. - - Copyright (C) 1986-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef COMMON_COMMON_INFERIOR_H -#define COMMON_COMMON_INFERIOR_H - -/* Return the exec wrapper to be used when starting the inferior, or NULL - otherwise. */ -extern const char *get_exec_wrapper (); - -/* Return the name of the executable file as a string. - ERR nonzero means get error if there is none specified; - otherwise return 0 in that case. */ -extern char *get_exec_file (int err); - -/* Return the inferior's current working directory. If nothing has - been set, then return NULL. */ -extern const char *get_inferior_cwd (); - -/* Set the inferior current working directory. If CWD is NULL, unset - the directory. */ -extern void set_inferior_cwd (const char *cwd); - -/* Whether to start up the debuggee under a shell. - - If startup-with-shell is set, GDB's "run" will attempt to start up - the debuggee under a shell. This also happens when using GDBserver - under extended remote mode. - - This is in order for argument-expansion to occur. E.g., - - (gdb) run * - - The "*" gets expanded by the shell into a list of files. - - While this is a nice feature, it may be handy to bypass the shell - in some cases. To disable this feature, do "set startup-with-shell - false". - - The catch-exec traps expected during start-up will be one more if - the target is started up with a shell. */ -extern bool startup_with_shell; - -#endif /* COMMON_COMMON_INFERIOR_H */ diff -Nru gdb-9.1/gdb/gdbsupport/common.m4 gdb-10.2/gdb/gdbsupport/common.m4 --- gdb-9.1/gdb/gdbsupport/common.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/common.m4 1970-01-01 00:00:00.000000000 +0000 @@ -1,81 +0,0 @@ -dnl Autoconf configure snippets for common. -dnl Copyright (C) 1995-2020 Free Software Foundation, Inc. -dnl -dnl This file is part of GDB. -dnl -dnl This program is free software; you can redistribute it and/or modify -dnl it under the terms of the GNU General Public License as published by -dnl the Free Software Foundation; either version 3 of the License, or -dnl (at your option) any later version. -dnl -dnl This program is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -dnl GNU General Public License for more details. -dnl -dnl You should have received a copy of the GNU General Public License -dnl along with this program. If not, see <http://www.gnu.org/licenses/>. - -dnl Invoke configury needed by the files in 'common'. -AC_DEFUN([GDB_AC_COMMON], [ - AC_HEADER_STDC - AC_FUNC_ALLOCA - - dnl Note that this requires codeset.m4, which is included - dnl by the users of common.m4. - AM_LANGINFO_CODESET - - AC_CHECK_HEADERS(linux/perf_event.h locale.h memory.h signal.h dnl - sys/resource.h sys/socket.h dnl - sys/un.h sys/wait.h dnl - thread_db.h wait.h dnl - termios.h dnl - dlfcn.h) - - AC_CHECK_FUNCS([fdwalk getrlimit pipe pipe2 socketpair sigaction \ - sigprocmask]) - - AC_CHECK_DECLS([strstr]) - - # Check for std::thread. This does not work on some platforms, like - # mingw and DJGPP. - AC_LANG_PUSH([C++]) - AX_PTHREAD([threads=yes], [threads=no]) - if test "$threads" = "yes"; then - save_LIBS="$LIBS" - LIBS="$PTHREAD_LIBS $LIBS" - save_CXXFLAGS="$CXXFLAGS" - CXXFLAGS="$PTHREAD_CFLAGS $save_CXXFLAGS" - AC_CACHE_CHECK([for std::thread], - gdb_cv_cxx_std_thread, - [AC_COMPILE_IFELSE([AC_LANG_PROGRAM( - [[#include <thread> - void callback() { }]], - [[std::thread t(callback);]])], - gdb_cv_cxx_std_thread=yes, - gdb_cv_cxx_std_thread=no)]) - - # This check must be here, while LIBS includes any necessary - # threading library. - AC_CHECK_FUNCS([pthread_sigmask pthread_setname_np]) - - LIBS="$save_LIBS" - CXXFLAGS="$save_CXXFLAGS" - fi - if test "$gdb_cv_cxx_std_thread" = "yes"; then - AC_DEFINE(CXX_STD_THREAD, 1, - [Define to 1 if std::thread works.]) - fi - AC_LANG_POP - - dnl Check if sigsetjmp is available. Using AC_CHECK_FUNCS won't - dnl do since sigsetjmp might only be defined as a macro. -AC_CACHE_CHECK([for sigsetjmp], gdb_cv_func_sigsetjmp, -[AC_TRY_COMPILE([ -#include <setjmp.h> -], [sigjmp_buf env; while (! sigsetjmp (env, 1)) siglongjmp (env, 1);], -gdb_cv_func_sigsetjmp=yes, gdb_cv_func_sigsetjmp=no)]) -if test "$gdb_cv_func_sigsetjmp" = "yes"; then - AC_DEFINE(HAVE_SIGSETJMP, 1, [Define if sigsetjmp is available. ]) -fi -]) diff -Nru gdb-9.1/gdb/gdbsupport/common-regcache.c gdb-10.2/gdb/gdbsupport/common-regcache.c --- gdb-9.1/gdb/gdbsupport/common-regcache.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/common-regcache.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,36 +0,0 @@ -/* Cache and manage the values of registers for GDB, the GNU debugger. - - Copyright (C) 2015-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "common-defs.h" -#include "common-regcache.h" - -/* Return the register's value or throw if it's not available. */ - -ULONGEST -regcache_raw_get_unsigned (struct regcache *regcache, int regnum) -{ - ULONGEST value; - enum register_status status; - - status = regcache_raw_read_unsigned (regcache, regnum, &value); - if (status == REG_UNAVAILABLE) - throw_error (NOT_AVAILABLE_ERROR, - _("Register %d is not available"), regnum); - return value; -} diff -Nru gdb-9.1/gdb/gdbsupport/common-regcache.h gdb-10.2/gdb/gdbsupport/common-regcache.h --- gdb-9.1/gdb/gdbsupport/common-regcache.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/common-regcache.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,85 +0,0 @@ -/* Cache and manage the values of registers - - Copyright (C) 2014-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef COMMON_COMMON_REGCACHE_H -#define COMMON_COMMON_REGCACHE_H - -/* This header is a stopgap until we have an independent regcache. */ - -enum register_status : signed char - { - /* The register value is not in the cache, and we don't know yet - whether it's available in the target (or traceframe). */ - REG_UNKNOWN = 0, - - /* The register value is valid and cached. */ - REG_VALID = 1, - - /* The register value is unavailable. E.g., we're inspecting a - traceframe, and this register wasn't collected. Note that this - is different a different "unavailable" from saying the register - does not exist in the target's architecture --- in that case, - the target should have given us a target description that does - not include the register in the first place. */ - REG_UNAVAILABLE = -1 - }; - -/* Return a pointer to the register cache associated with the - thread specified by PTID. This function must be provided by - the client. */ - -extern struct regcache *get_thread_regcache_for_ptid (ptid_t ptid); - -/* Return the size of register numbered N in REGCACHE. This function - must be provided by the client. */ - -extern int regcache_register_size (const struct regcache *regcache, int n); - -/* Read the PC register. This function must be provided by the - client. */ - -extern CORE_ADDR regcache_read_pc (struct regcache *regcache); - -/* Read a raw register into a unsigned integer. */ -extern enum register_status regcache_raw_read_unsigned - (struct regcache *regcache, int regnum, ULONGEST *val); - -ULONGEST regcache_raw_get_unsigned (struct regcache *regcache, int regnum); - -struct reg_buffer_common -{ - virtual ~reg_buffer_common () = default; - - /* Get the availability status of the value of register REGNUM in this - buffer. */ - virtual register_status get_register_status (int regnum) const = 0; - - /* Supply register REGNUM, whose contents are stored in BUF, to REGCACHE. */ - virtual void raw_supply (int regnum, const void *buf) = 0; - - /* Collect register REGNUM from REGCACHE and store its contents in BUF. */ - virtual void raw_collect (int regnum, void *buf) const = 0; - - /* Compare the contents of the register stored in the regcache (ignoring the - first OFFSET bytes) to the contents of BUF (without any offset). Returns - true if the same. */ - virtual bool raw_compare (int regnum, const void *buf, int offset) const = 0; -}; - -#endif /* COMMON_COMMON_REGCACHE_H */ diff -Nru gdb-9.1/gdb/gdbsupport/common-types.h gdb-10.2/gdb/gdbsupport/common-types.h --- gdb-9.1/gdb/gdbsupport/common-types.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/common-types.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,66 +0,0 @@ -/* Declarations for common types. - - Copyright (C) 1986-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef COMMON_COMMON_TYPES_H -#define COMMON_COMMON_TYPES_H - -#ifdef GDBSERVER - -/* * A byte from the program being debugged. */ -typedef unsigned char gdb_byte; - -typedef unsigned long long CORE_ADDR; - -typedef long long LONGEST; -typedef unsigned long long ULONGEST; - -#else /* GDBSERVER */ - -#include "bfd.h" - -/* * A byte from the program being debugged. */ -typedef bfd_byte gdb_byte; - -/* * An address in the program being debugged. Host byte order. */ -typedef bfd_vma CORE_ADDR; - -/* This is to make sure that LONGEST is at least as big as CORE_ADDR. */ - -#ifdef BFD64 - -typedef BFD_HOST_64_BIT LONGEST; -typedef BFD_HOST_U_64_BIT ULONGEST; - -#else /* No BFD64 */ - -typedef long long LONGEST; -typedef unsigned long long ULONGEST; - -#endif /* No BFD64 */ -#endif /* GDBSERVER */ - -/* * The largest CORE_ADDR value. */ -#define CORE_ADDR_MAX (~(CORE_ADDR) 0) - -/* * The largest ULONGEST value. */ -#define ULONGEST_MAX (~(ULONGEST) 0) - -enum tribool { TRIBOOL_UNKNOWN = -1, TRIBOOL_FALSE = 0, TRIBOOL_TRUE = 1 }; - -#endif /* COMMON_COMMON_TYPES_H */ diff -Nru gdb-9.1/gdb/gdbsupport/common-utils.c gdb-10.2/gdb/gdbsupport/common-utils.c --- gdb-9.1/gdb/gdbsupport/common-utils.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/common-utils.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,417 +0,0 @@ -/* Shared general utility routines for GDB, the GNU debugger. - - Copyright (C) 1986-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "common-defs.h" -#include "common-utils.h" -#include "host-defs.h" -#include <ctype.h> - -void * -xzalloc (size_t size) -{ - return xcalloc (1, size); -} - -/* Like asprintf/vasprintf but get an internal_error if the call - fails. */ - -char * -xstrprintf (const char *format, ...) -{ - char *ret; - va_list args; - - va_start (args, format); - ret = xstrvprintf (format, args); - va_end (args); - return ret; -} - -char * -xstrvprintf (const char *format, va_list ap) -{ - char *ret = NULL; - int status = vasprintf (&ret, format, ap); - - /* NULL is returned when there was a memory allocation problem, or - any other error (for instance, a bad format string). A negative - status (the printed length) with a non-NULL buffer should never - happen, but just to be sure. */ - if (ret == NULL || status < 0) - internal_error (__FILE__, __LINE__, _("vasprintf call failed")); - return ret; -} - -int -xsnprintf (char *str, size_t size, const char *format, ...) -{ - va_list args; - int ret; - - va_start (args, format); - ret = vsnprintf (str, size, format, args); - gdb_assert (ret < size); - va_end (args); - - return ret; -} - -/* See documentation in common-utils.h. */ - -std::string -string_printf (const char* fmt, ...) -{ - va_list vp; - int size; - - va_start (vp, fmt); - size = vsnprintf (NULL, 0, fmt, vp); - va_end (vp); - - std::string str (size, '\0'); - - /* C++11 and later guarantee std::string uses contiguous memory and - always includes the terminating '\0'. */ - va_start (vp, fmt); - vsprintf (&str[0], fmt, vp); - va_end (vp); - - return str; -} - -/* See documentation in common-utils.h. */ - -std::string -string_vprintf (const char* fmt, va_list args) -{ - va_list vp; - size_t size; - - va_copy (vp, args); - size = vsnprintf (NULL, 0, fmt, vp); - va_end (vp); - - std::string str (size, '\0'); - - /* C++11 and later guarantee std::string uses contiguous memory and - always includes the terminating '\0'. */ - vsprintf (&str[0], fmt, args); - - return str; -} - - -/* See documentation in common-utils.h. */ - -void -string_appendf (std::string &str, const char *fmt, ...) -{ - va_list vp; - - va_start (vp, fmt); - string_vappendf (str, fmt, vp); - va_end (vp); -} - - -/* See documentation in common-utils.h. */ - -void -string_vappendf (std::string &str, const char *fmt, va_list args) -{ - va_list vp; - int grow_size; - - va_copy (vp, args); - grow_size = vsnprintf (NULL, 0, fmt, vp); - va_end (vp); - - size_t curr_size = str.size (); - str.resize (curr_size + grow_size); - - /* C++11 and later guarantee std::string uses contiguous memory and - always includes the terminating '\0'. */ - vsprintf (&str[curr_size], fmt, args); -} - -char * -savestring (const char *ptr, size_t len) -{ - char *p = (char *) xmalloc (len + 1); - - memcpy (p, ptr, len); - p[len] = 0; - return p; -} - -/* See documentation in common-utils.h. */ - -std::string -extract_string_maybe_quoted (const char **arg) -{ - bool squote = false; - bool dquote = false; - bool bsquote = false; - std::string result; - const char *p = *arg; - - /* Find the start of the argument. */ - p = skip_spaces (p); - - /* Parse p similarly to gdb_argv buildargv function. */ - while (*p != '\0') - { - if (isspace (*p) && !squote && !dquote && !bsquote) - break; - else - { - if (bsquote) - { - bsquote = false; - result += *p; - } - else if (*p == '\\') - bsquote = true; - else if (squote) - { - if (*p == '\'') - squote = false; - else - result += *p; - } - else if (dquote) - { - if (*p == '"') - dquote = false; - else - result += *p; - } - else - { - if (*p == '\'') - squote = true; - else if (*p == '"') - dquote = true; - else - result += *p; - } - p++; - } - } - - *arg = p; - return result; -} - -/* The bit offset of the highest byte in a ULONGEST, for overflow - checking. */ - -#define HIGH_BYTE_POSN ((sizeof (ULONGEST) - 1) * HOST_CHAR_BIT) - -/* True (non-zero) iff DIGIT is a valid digit in radix BASE, - where 2 <= BASE <= 36. */ - -static int -is_digit_in_base (unsigned char digit, int base) -{ - if (!isalnum (digit)) - return 0; - if (base <= 10) - return (isdigit (digit) && digit < base + '0'); - else - return (isdigit (digit) || tolower (digit) < base - 10 + 'a'); -} - -static int -digit_to_int (unsigned char c) -{ - if (isdigit (c)) - return c - '0'; - else - return tolower (c) - 'a' + 10; -} - -/* As for strtoul, but for ULONGEST results. */ - -ULONGEST -strtoulst (const char *num, const char **trailer, int base) -{ - unsigned int high_part; - ULONGEST result; - int minus = 0; - int i = 0; - - /* Skip leading whitespace. */ - while (isspace (num[i])) - i++; - - /* Handle prefixes. */ - if (num[i] == '+') - i++; - else if (num[i] == '-') - { - minus = 1; - i++; - } - - if (base == 0 || base == 16) - { - if (num[i] == '0' && (num[i + 1] == 'x' || num[i + 1] == 'X')) - { - i += 2; - if (base == 0) - base = 16; - } - } - - if (base == 0 && num[i] == '0') - base = 8; - - if (base == 0) - base = 10; - - if (base < 2 || base > 36) - { - errno = EINVAL; - return 0; - } - - result = high_part = 0; - for (; is_digit_in_base (num[i], base); i += 1) - { - result = result * base + digit_to_int (num[i]); - high_part = high_part * base + (unsigned int) (result >> HIGH_BYTE_POSN); - result &= ((ULONGEST) 1 << HIGH_BYTE_POSN) - 1; - if (high_part > 0xff) - { - errno = ERANGE; - result = ~ (ULONGEST) 0; - high_part = 0; - minus = 0; - break; - } - } - - if (trailer != NULL) - *trailer = &num[i]; - - result = result + ((ULONGEST) high_part << HIGH_BYTE_POSN); - if (minus) - return -result; - else - return result; -} - -/* See documentation in common-utils.h. */ - -char * -skip_spaces (char *chp) -{ - if (chp == NULL) - return NULL; - while (*chp && isspace (*chp)) - chp++; - return chp; -} - -/* A const-correct version of the above. */ - -const char * -skip_spaces (const char *chp) -{ - if (chp == NULL) - return NULL; - while (*chp && isspace (*chp)) - chp++; - return chp; -} - -/* See documentation in common-utils.h. */ - -const char * -skip_to_space (const char *chp) -{ - if (chp == NULL) - return NULL; - while (*chp && !isspace (*chp)) - chp++; - return chp; -} - -/* See documentation in common-utils.h. */ - -char * -skip_to_space (char *chp) -{ - return (char *) skip_to_space ((const char *) chp); -} - -/* See gdbsupport/common-utils.h. */ - -void -free_vector_argv (std::vector<char *> &v) -{ - for (char *el : v) - xfree (el); - - v.clear (); -} - -/* See gdbsupport/common-utils.h. */ - -std::string -stringify_argv (const std::vector<char *> &args) -{ - std::string ret; - - if (!args.empty () && args[0] != NULL) - { - for (auto s : args) - if (s != NULL) - { - ret += s; - ret += ' '; - } - - /* Erase the last whitespace. */ - ret.erase (ret.end () - 1); - } - - return ret; -} - -/* See gdbsupport/common-utils.h. */ - -ULONGEST -align_up (ULONGEST v, int n) -{ - /* Check that N is really a power of two. */ - gdb_assert (n && (n & (n-1)) == 0); - return (v + n - 1) & -n; -} - -/* See gdbsupport/common-utils.h. */ - -ULONGEST -align_down (ULONGEST v, int n) -{ - /* Check that N is really a power of two. */ - gdb_assert (n && (n & (n-1)) == 0); - return (v & -n); -} diff -Nru gdb-9.1/gdb/gdbsupport/common-utils.h gdb-10.2/gdb/gdbsupport/common-utils.h --- gdb-9.1/gdb/gdbsupport/common-utils.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/common-utils.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,202 +0,0 @@ -/* Shared general utility routines for GDB, the GNU debugger. - - Copyright (C) 1986-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef COMMON_COMMON_UTILS_H -#define COMMON_COMMON_UTILS_H - -#include <string> -#include <vector> - -#include "poison.h" - -/* If possible, define FUNCTION_NAME, a macro containing the name of - the function being defined. Since this macro may not always be - defined, all uses must be protected by appropriate macro definition - checks (Eg: "#ifdef FUNCTION_NAME"). - - Version 2.4 and later of GCC define a magical variable `__PRETTY_FUNCTION__' - which contains the name of the function currently being defined. - This is broken in G++ before version 2.6. - C9x has a similar variable called __func__, but prefer the GCC one since - it demangles C++ function names. */ -#if (GCC_VERSION >= 2004) -#define FUNCTION_NAME __PRETTY_FUNCTION__ -#else -#if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L -#define FUNCTION_NAME __func__ /* ARI: func */ -#endif -#endif - -#include "gdb_string_view.h" - -/* xmalloc(), xrealloc() and xcalloc() have already been declared in - "libiberty.h". */ - -/* Like xmalloc, but zero the memory. */ -void *xzalloc (size_t); - -template <typename T> -static void -xfree (T *ptr) -{ - static_assert (IsFreeable<T>::value, "Trying to use xfree with a non-POD \ -data type. Use operator delete instead."); - - if (ptr != NULL) - free (ptr); /* ARI: free */ -} - - -/* Like asprintf and vasprintf, but return the string, throw an error - if no memory. */ -char *xstrprintf (const char *format, ...) ATTRIBUTE_PRINTF (1, 2); -char *xstrvprintf (const char *format, va_list ap) - ATTRIBUTE_PRINTF (1, 0); - -/* Like snprintf, but throw an error if the output buffer is too small. */ -int xsnprintf (char *str, size_t size, const char *format, ...) - ATTRIBUTE_PRINTF (3, 4); - -/* Returns a std::string built from a printf-style format string. */ -std::string string_printf (const char* fmt, ...) - ATTRIBUTE_PRINTF (1, 2); - -/* Like string_printf, but takes a va_list. */ -std::string string_vprintf (const char* fmt, va_list args) - ATTRIBUTE_PRINTF (1, 0); - -/* Like string_printf, but appends to DEST instead of returning a new - std::string. */ -void string_appendf (std::string &dest, const char* fmt, ...) - ATTRIBUTE_PRINTF (2, 3); - -/* Like string_appendf, but takes a va_list. */ -void string_vappendf (std::string &dest, const char* fmt, va_list args) - ATTRIBUTE_PRINTF (2, 0); - -/* Make a copy of the string at PTR with LEN characters - (and add a null character at the end in the copy). - Uses malloc to get the space. Returns the address of the copy. */ - -char *savestring (const char *ptr, size_t len); - -/* Extract the next word from ARG. The next word is defined as either, - everything up to the next space, or, if the next word starts with either - a single or double quote, then everything up to the closing quote. The - enclosing quotes are not returned in the result string. The pointer in - ARG is updated to point to the first character after the end of the - word, or, for quoted words, the first character after the closing - quote. */ - -std::string extract_string_maybe_quoted (const char **arg); - -/* The strerror() function can return NULL for errno values that are - out of range. Provide a "safe" version that always returns a - printable string. This version is also thread-safe. */ - -extern const char *safe_strerror (int); - -/* Return true if the start of STRING matches PATTERN, false otherwise. */ - -static inline bool -startswith (const char *string, const char *pattern) -{ - return strncmp (string, pattern, strlen (pattern)) == 0; -} - -/* Version of startswith that takes string_view arguments. See comment - above. */ - -static inline bool -startswith (gdb::string_view string, gdb::string_view pattern) -{ - return (string.length () >= pattern.length () - && strncmp (string.data (), pattern.data (), pattern.length ()) == 0); -} - -ULONGEST strtoulst (const char *num, const char **trailer, int base); - -/* Skip leading whitespace characters in INP, returning an updated - pointer. If INP is NULL, return NULL. */ - -extern char *skip_spaces (char *inp); - -/* A const-correct version of the above. */ - -extern const char *skip_spaces (const char *inp); - -/* Skip leading non-whitespace characters in INP, returning an updated - pointer. If INP is NULL, return NULL. */ - -extern char *skip_to_space (char *inp); - -/* A const-correct version of the above. */ - -extern const char *skip_to_space (const char *inp); - -/* Assumes that V is an argv for a program, and iterates through - freeing all the elements. */ -extern void free_vector_argv (std::vector<char *> &v); - -/* Given a vector of arguments ARGV, return a string equivalent to - joining all the arguments with a whitespace separating them. */ -extern std::string stringify_argv (const std::vector<char *> &argv); - -/* Return true if VALUE is in [LOW, HIGH]. */ - -template <typename T> -static bool -in_inclusive_range (T value, T low, T high) -{ - return value >= low && value <= high; -} - -/* Ensure that V is aligned to an N byte boundary (B's assumed to be a - power of 2). Round up/down when necessary. Examples of correct - use include: - - addr = align_up (addr, 8); -- VALUE needs 8 byte alignment - write_memory (addr, value, len); - addr += len; - - and: - - sp = align_down (sp - len, 16); -- Keep SP 16 byte aligned - write_memory (sp, value, len); - - Note that uses such as: - - write_memory (addr, value, len); - addr += align_up (len, 8); - - and: - - sp -= align_up (len, 8); - write_memory (sp, value, len); - - are typically not correct as they don't ensure that the address (SP - or ADDR) is correctly aligned (relying on previous alignment to - keep things right). This is also why the methods are called - "align_..." instead of "round_..." as the latter reads better with - this incorrect coding style. */ - -extern ULONGEST align_up (ULONGEST v, int n); -extern ULONGEST align_down (ULONGEST v, int n); - -#endif /* COMMON_COMMON_UTILS_H */ diff -Nru gdb-9.1/gdb/gdbsupport/create-version.sh gdb-10.2/gdb/gdbsupport/create-version.sh --- gdb-9.1/gdb/gdbsupport/create-version.sh 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/create-version.sh 1970-01-01 00:00:00.000000000 +0000 @@ -1,38 +0,0 @@ -#!/bin/sh - -# Copyright (C) 1989-2020 Free Software Foundation, Inc. - -# This file is part of GDB. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. - -# Create version.c from version.in. -# Usage: -# create-version.sh PATH-TO-GDB-SRCDIR HOST_ALIAS \ -# TARGET_ALIAS OUTPUT-FILE-NAME - -srcdir="$1" -host_alias="$2" -target_alias="$3" -output="$4" - -rm -f version.c-tmp $output version.tmp -date=`sed -n -e 's/^.* BFD_VERSION_DATE \(.*\)$/\1/p' $srcdir/../bfd/version.h` -sed -e "s/DATE/$date/" < $srcdir/version.in > version.tmp -echo '#include "gdbsupport/version.h"' >> version.c-tmp -echo 'const char version[] = "'"`sed q version.tmp`"'";' >> version.c-tmp -echo 'const char host_name[] = "'"$host_alias"'";' >> version.c-tmp -echo 'const char target_name[] = "'"$target_alias"'";' >> version.c-tmp -mv version.c-tmp $output -rm -f version.tmp diff -Nru gdb-9.1/gdb/gdbsupport/default-init-alloc.h gdb-10.2/gdb/gdbsupport/default-init-alloc.h --- gdb-9.1/gdb/gdbsupport/default-init-alloc.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/default-init-alloc.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,67 +0,0 @@ -/* Copyright (C) 2017-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef COMMON_DEFAULT_INIT_ALLOC_H -#define COMMON_DEFAULT_INIT_ALLOC_H - -namespace gdb { - -/* An allocator that default constructs using default-initialization - rather than value-initialization. The idea is to use this when you - don't want to default construct elements of containers of trivial - types using zero-initialization. */ - -/* Mostly as implementation convenience, this is implemented as an - adapter that given an allocator A, overrides 'A::construct()'. 'A' - defaults to std::allocator<T>. */ - -template<typename T, typename A = std::allocator<T>> -class default_init_allocator : public A -{ -public: - /* Pull in A's ctors. */ - using A::A; - - /* Override rebind. */ - template<typename U> - struct rebind - { - /* A couple helpers just to make it a bit more readable. */ - typedef std::allocator_traits<A> traits_; - typedef typename traits_::template rebind_alloc<U> alloc_; - - /* This is what we're after. */ - typedef default_init_allocator<U, alloc_> other; - }; - - /* Make the base allocator's construct method(s) visible. */ - using A::construct; - - /* .. and provide an override/overload for the case of default - construction (i.e., no arguments). This is where we construct - with default-init. */ - template <typename U> - void construct (U *ptr) - noexcept (std::is_nothrow_default_constructible<U>::value) - { - ::new ((void *) ptr) U; /* default-init */ - } -}; - -} /* namespace gdb */ - -#endif /* COMMON_DEFAULT_INIT_ALLOC_H */ diff -Nru gdb-9.1/gdb/gdbsupport/def-vector.h gdb-10.2/gdb/gdbsupport/def-vector.h --- gdb-9.1/gdb/gdbsupport/def-vector.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/def-vector.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,36 +0,0 @@ -/* Copyright (C) 2017-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef COMMON_DEF_VECTOR_H -#define COMMON_DEF_VECTOR_H - -#include <vector> -#include "gdbsupport/default-init-alloc.h" - -namespace gdb { - -/* A vector that uses an allocator that default constructs using - default-initialization rather than value-initialization. The idea - is to use this when you don't want zero-initialization of elements - of vectors of trivial types. E.g., byte buffers. */ - -template<typename T> using def_vector - = std::vector<T, gdb::default_init_allocator<T>>; - -} /* namespace gdb */ - -#endif /* COMMON_DEF_VECTOR_H */ diff -Nru gdb-9.1/gdb/gdbsupport/enum-flags.h gdb-10.2/gdb/gdbsupport/enum-flags.h --- gdb-9.1/gdb/gdbsupport/enum-flags.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/enum-flags.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,221 +0,0 @@ -/* Copyright (C) 2015-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef COMMON_ENUM_FLAGS_H -#define COMMON_ENUM_FLAGS_H - -/* Type-safe wrapper for enum flags. enum flags are enums where the - values are bits that are meant to be ORed together. - - This allows writing code like the below, while with raw enums this - would fail to compile without casts to enum type at the assignments - to 'f': - - enum some_flag - { - flag_val1 = 1 << 1, - flag_val2 = 1 << 2, - flag_val3 = 1 << 3, - flag_val4 = 1 << 4, - }; - DEF_ENUM_FLAGS_TYPE(enum some_flag, some_flags); - - some_flags f = flag_val1 | flag_val2; - f |= flag_val3; - - It's also possible to assign literal zero to an enum flags variable - (meaning, no flags), dispensing adding an awkward explicit "no - value" value to the enumeration. For example: - - some_flags f = 0; - f |= flag_val3 | flag_val4; - - Note that literal integers other than zero fail to compile: - - some_flags f = 1; // error -*/ - -#ifdef __cplusplus - -/* Traits type used to prevent the global operator overloads from - instantiating for non-flag enums. */ -template<typename T> struct enum_flags_type {}; - -/* Use this to mark an enum as flags enum. It defines FLAGS as - enum_flags wrapper class for ENUM, and enables the global operator - overloads for ENUM. */ -#define DEF_ENUM_FLAGS_TYPE(enum_type, flags_type) \ - typedef enum_flags<enum_type> flags_type; \ - template<> \ - struct enum_flags_type<enum_type> \ - { \ - typedef enum_flags<enum_type> type; \ - } - -/* Until we can rely on std::underlying type being universally - available (C++11), roll our own for enums. */ -template<int size, bool sign> class integer_for_size { typedef void type; }; -template<> struct integer_for_size<1, 0> { typedef uint8_t type; }; -template<> struct integer_for_size<2, 0> { typedef uint16_t type; }; -template<> struct integer_for_size<4, 0> { typedef uint32_t type; }; -template<> struct integer_for_size<8, 0> { typedef uint64_t type; }; -template<> struct integer_for_size<1, 1> { typedef int8_t type; }; -template<> struct integer_for_size<2, 1> { typedef int16_t type; }; -template<> struct integer_for_size<4, 1> { typedef int32_t type; }; -template<> struct integer_for_size<8, 1> { typedef int64_t type; }; - -template<typename T> -struct enum_underlying_type -{ - typedef typename - integer_for_size<sizeof (T), static_cast<bool>(T (-1) < T (0))>::type - type; -}; - -template <typename E> -class enum_flags -{ -public: - typedef E enum_type; - typedef typename enum_underlying_type<enum_type>::type underlying_type; - -private: - /* Private type used to support initializing flag types with zero: - - foo_flags f = 0; - - but not other integers: - - foo_flags f = 1; - - The way this works is that we define an implicit constructor that - takes a pointer to this private type. Since nothing can - instantiate an object of this type, the only possible pointer to - pass to the constructor is the NULL pointer, or, zero. */ - struct zero_type; - - underlying_type - underlying_value () const - { - return m_enum_value; - } - -public: - /* Allow default construction. */ - enum_flags () - : m_enum_value ((enum_type) 0) - {} - - /* If you get an error saying these two overloads are ambiguous, - then you tried to mix values of different enum types. */ - enum_flags (enum_type e) - : m_enum_value (e) - {} - enum_flags (struct enum_flags::zero_type *zero) - : m_enum_value ((enum_type) 0) - {} - - enum_flags &operator&= (enum_type e) - { - m_enum_value = (enum_type) (underlying_value () & e); - return *this; - } - enum_flags &operator|= (enum_type e) - { - m_enum_value = (enum_type) (underlying_value () | e); - return *this; - } - enum_flags &operator^= (enum_type e) - { - m_enum_value = (enum_type) (underlying_value () ^ e); - return *this; - } - - operator enum_type () const - { - return m_enum_value; - } - - enum_flags operator& (enum_type e) const - { - return (enum_type) (underlying_value () & e); - } - enum_flags operator| (enum_type e) const - { - return (enum_type) (underlying_value () | e); - } - enum_flags operator^ (enum_type e) const - { - return (enum_type) (underlying_value () ^ e); - } - enum_flags operator~ () const - { - // We only the underlying type to be unsigned when actually using - // operator~ -- if it were not unsigned, undefined behavior could - // result. However, asserting this in the class itself would - // require too many unnecessary changes to otherwise ok enum - // types. - gdb_static_assert (std::is_unsigned<underlying_type>::value); - return (enum_type) ~underlying_value (); - } - -private: - /* Stored as enum_type because GDB knows to print the bit flags - neatly if the enum values look like bit flags. */ - enum_type m_enum_value; -}; - -/* Global operator overloads. */ - -template <typename enum_type> -typename enum_flags_type<enum_type>::type -operator& (enum_type e1, enum_type e2) -{ - return enum_flags<enum_type> (e1) & e2; -} - -template <typename enum_type> -typename enum_flags_type<enum_type>::type -operator| (enum_type e1, enum_type e2) -{ - return enum_flags<enum_type> (e1) | e2; -} - -template <typename enum_type> -typename enum_flags_type<enum_type>::type -operator^ (enum_type e1, enum_type e2) -{ - return enum_flags<enum_type> (e1) ^ e2; -} - -template <typename enum_type> -typename enum_flags_type<enum_type>::type -operator~ (enum_type e) -{ - return ~enum_flags<enum_type> (e); -} - -#else /* __cplusplus */ - -/* In C, the flags type is just a typedef for the enum type. */ - -#define DEF_ENUM_FLAGS_TYPE(enum_type, flags_type) \ - typedef enum_type flags_type - -#endif /* __cplusplus */ - -#endif /* COMMON_ENUM_FLAGS_H */ diff -Nru gdb-9.1/gdb/gdbsupport/environ.c gdb-10.2/gdb/gdbsupport/environ.c --- gdb-9.1/gdb/gdbsupport/environ.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/environ.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,183 +0,0 @@ -/* environ.c -- library for manipulating environments for GNU. - - Copyright (C) 1986-2020 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "common-defs.h" -#include "environ.h" -#include <algorithm> -#include <utility> - -/* See gdbsupport/environ.h. */ - -gdb_environ & -gdb_environ::operator= (gdb_environ &&e) -{ - /* Are we self-moving? */ - if (&e == this) - return *this; - - m_environ_vector = std::move (e.m_environ_vector); - m_user_set_env = std::move (e.m_user_set_env); - m_user_unset_env = std::move (e.m_user_unset_env); - e.m_environ_vector.clear (); - e.m_environ_vector.push_back (NULL); - e.m_user_set_env.clear (); - e.m_user_unset_env.clear (); - return *this; -} - -/* See gdbsupport/environ.h. */ - -gdb_environ gdb_environ::from_host_environ () -{ - extern char **environ; - gdb_environ e; - - if (environ == NULL) - return e; - - for (int i = 0; environ[i] != NULL; ++i) - { - /* Make sure we add the element before the last (NULL). */ - e.m_environ_vector.insert (e.m_environ_vector.end () - 1, - xstrdup (environ[i])); - } - - return e; -} - -/* See gdbsupport/environ.h. */ - -void -gdb_environ::clear () -{ - for (char *v : m_environ_vector) - xfree (v); - m_environ_vector.clear (); - /* Always add the NULL element. */ - m_environ_vector.push_back (NULL); - m_user_set_env.clear (); - m_user_unset_env.clear (); -} - -/* Helper function to check if STRING contains an environment variable - assignment of VAR, i.e., if STRING starts with 'VAR='. Return true - if it contains, false otherwise. */ - -static bool -match_var_in_string (const char *string, const char *var, size_t var_len) -{ - if (strncmp (string, var, var_len) == 0 && string[var_len] == '=') - return true; - - return false; -} - -/* See gdbsupport/environ.h. */ - -const char * -gdb_environ::get (const char *var) const -{ - size_t len = strlen (var); - - for (char *el : m_environ_vector) - if (el != NULL && match_var_in_string (el, var, len)) - return &el[len + 1]; - - return NULL; -} - -/* See gdbsupport/environ.h. */ - -void -gdb_environ::set (const char *var, const char *value) -{ - char *fullvar = concat (var, "=", value, NULL); - - /* We have to unset the variable in the vector if it exists. */ - unset (var, false); - - /* Insert the element before the last one, which is always NULL. */ - m_environ_vector.insert (m_environ_vector.end () - 1, fullvar); - - /* Mark this environment variable as having been set by the user. - This will be useful when we deal with setting environment - variables on the remote target. */ - m_user_set_env.insert (std::string (fullvar)); - - /* If this environment variable is marked as unset by the user, then - remove it from the list, because now the user wants to set - it. */ - m_user_unset_env.erase (std::string (var)); -} - -/* See gdbsupport/environ.h. */ - -void -gdb_environ::unset (const char *var, bool update_unset_list) -{ - size_t len = strlen (var); - std::vector<char *>::iterator it_env; - - /* We iterate until '.end () - 1' because the last element is - always NULL. */ - for (it_env = m_environ_vector.begin (); - it_env != m_environ_vector.end () - 1; - ++it_env) - if (match_var_in_string (*it_env, var, len)) - break; - - if (it_env != m_environ_vector.end () - 1) - { - m_user_set_env.erase (std::string (*it_env)); - xfree (*it_env); - - m_environ_vector.erase (it_env); - } - - if (update_unset_list) - m_user_unset_env.insert (std::string (var)); -} - -/* See gdbsupport/environ.h. */ - -void -gdb_environ::unset (const char *var) -{ - unset (var, true); -} - -/* See gdbsupport/environ.h. */ - -char ** -gdb_environ::envp () const -{ - return const_cast<char **> (&m_environ_vector[0]); -} - -/* See gdbsupport/environ.h. */ - -const std::set<std::string> & -gdb_environ::user_set_env () const -{ - return m_user_set_env; -} - -const std::set<std::string> & -gdb_environ::user_unset_env () const -{ - return m_user_unset_env; -} diff -Nru gdb-9.1/gdb/gdbsupport/environ.h gdb-10.2/gdb/gdbsupport/environ.h --- gdb-9.1/gdb/gdbsupport/environ.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/environ.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,103 +0,0 @@ -/* Header for environment manipulation library. - Copyright (C) 1989-2020 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef COMMON_ENVIRON_H -#define COMMON_ENVIRON_H - -#include <vector> -#include <set> - -/* Class that represents the environment variables as seen by the - inferior. */ - -class gdb_environ -{ -public: - /* Regular constructor and destructor. */ - gdb_environ () - { - /* Make sure that the vector contains at least a NULL element. - If/when we add more variables to it, NULL will always be the - last element. */ - m_environ_vector.push_back (NULL); - } - - ~gdb_environ () - { - clear (); - } - - /* Move constructor. */ - gdb_environ (gdb_environ &&e) - : m_environ_vector (std::move (e.m_environ_vector)), - m_user_set_env (std::move (e.m_user_set_env)), - m_user_unset_env (std::move (e.m_user_unset_env)) - { - /* Make sure that the moved-from vector is left at a valid - state (only one NULL element). */ - e.m_environ_vector.clear (); - e.m_environ_vector.push_back (NULL); - e.m_user_set_env.clear (); - e.m_user_unset_env.clear (); - } - - /* Move assignment. */ - gdb_environ &operator= (gdb_environ &&e); - - /* Create a gdb_environ object using the host's environment - variables. */ - static gdb_environ from_host_environ (); - - /* Clear the environment variables stored in the object. */ - void clear (); - - /* Return the value in the environment for the variable VAR. The - returned pointer is only valid as long as the gdb_environ object - is not modified. */ - const char *get (const char *var) const; - - /* Store VAR=VALUE in the environment. */ - void set (const char *var, const char *value); - - /* Unset VAR in environment. */ - void unset (const char *var); - - /* Return the environment vector represented as a 'char **'. */ - char **envp () const; - - /* Return the user-set environment vector. */ - const std::set<std::string> &user_set_env () const; - - /* Return the user-unset environment vector. */ - const std::set<std::string> &user_unset_env () const; - -private: - /* Unset VAR in environment. If UPDATE_UNSET_LIST is true, then - also update M_USER_UNSET_ENV to reflect the unsetting of the - environment variable. */ - void unset (const char *var, bool update_unset_list); - - /* A vector containing the environment variables. */ - std::vector<char *> m_environ_vector; - - /* The environment variables explicitly set by the user. */ - std::set<std::string> m_user_set_env; - - /* The environment variables explicitly unset by the user. */ - std::set<std::string> m_user_unset_env; -}; - -#endif /* COMMON_ENVIRON_H */ diff -Nru gdb-9.1/gdb/gdbsupport/errors.c gdb-10.2/gdb/gdbsupport/errors.c --- gdb-9.1/gdb/gdbsupport/errors.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/errors.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,69 +0,0 @@ -/* Error reporting facilities. - - Copyright (C) 1986-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "common-defs.h" -#include "errors.h" - -/* See gdbsupport/errors.h. */ - -void -warning (const char *fmt, ...) -{ - va_list ap; - - va_start (ap, fmt); - vwarning (fmt, ap); - va_end (ap); -} - -/* See gdbsupport/errors.h. */ - -void -error (const char *fmt, ...) -{ - va_list ap; - - va_start (ap, fmt); - verror (fmt, ap); - va_end (ap); -} - -/* See gdbsupport/errors.h. */ - -void -internal_error (const char *file, int line, const char *fmt, ...) -{ - va_list ap; - - va_start (ap, fmt); - internal_verror (file, line, fmt, ap); - va_end (ap); -} - -/* See gdbsupport/errors.h. */ - -void -internal_warning (const char *file, int line, const char *fmt, ...) -{ - va_list ap; - - va_start (ap, fmt); - internal_vwarning (file, line, fmt, ap); - va_end (ap); -} diff -Nru gdb-9.1/gdb/gdbsupport/errors.h gdb-10.2/gdb/gdbsupport/errors.h --- gdb-9.1/gdb/gdbsupport/errors.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/errors.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,90 +0,0 @@ -/* Declarations for error-reporting facilities. - - Copyright (C) 1986-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef COMMON_ERRORS_H -#define COMMON_ERRORS_H - -/* A problem was detected, but the requested operation can still - proceed. A warning message is constructed using a printf- or - vprintf-style argument list. The function "vwarning" must be - provided by the client. */ - -extern void warning (const char *fmt, ...) - ATTRIBUTE_PRINTF (1, 2); - -extern void vwarning (const char *fmt, va_list args) - ATTRIBUTE_PRINTF (1, 0); - -/* A non-predictable, non-fatal error was detected. The requested - operation cannot proceed. An error message is constructed using - a printf- or vprintf-style argument list. These functions do not - return. The function "verror" must be provided by the client. */ - -extern void error (const char *fmt, ...) - ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF (1, 2); - -extern void verror (const char *fmt, va_list args) - ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF (1, 0); - -/* An internal error was detected. Internal errors indicate - programming errors such as assertion failures, as opposed to - more general errors beyond the application's control. These - functions do not return. An error message is constructed using - a printf- or vprintf-style argument list. FILE and LINE - indicate the file and line number where the programming error - was detected. The function "internal_verror" must be provided - by the client. */ - -extern void internal_error (const char *file, int line, - const char *fmt, ...) - ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF (3, 4); - -extern void internal_verror (const char *file, int line, - const char *fmt, va_list args) - ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF (3, 0); - -/* An internal problem was detected, but the requested operation can - still proceed. Internal warnings indicate programming errors as - opposed to more general issues beyond the application's control. - A warning message is constructed using a printf- or vprintf-style - argument list. The function "internal_vwarning" must be provided - by the client. */ - -extern void internal_warning (const char *file, int line, - const char *fmt, ...) - ATTRIBUTE_PRINTF (3, 4); - -extern void internal_vwarning (const char *file, int line, - const char *fmt, va_list args) - ATTRIBUTE_PRINTF (3, 0); - - -/* Like "error", but the error message is constructed by combining - STRING with the system error message for errno. This function does - not return. This function must be provided by the client. */ - -extern void perror_with_name (const char *string) ATTRIBUTE_NORETURN; - -/* Call this function to handle memory allocation failures. This - function does not return. This function must be provided by the - client. */ - -extern void malloc_failure (long size) ATTRIBUTE_NORETURN; - -#endif /* COMMON_ERRORS_H */ diff -Nru gdb-9.1/gdb/gdbsupport/fileio.c gdb-10.2/gdb/gdbsupport/fileio.c --- gdb-9.1/gdb/gdbsupport/fileio.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/fileio.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,255 +0,0 @@ -/* File-I/O functions for GDB, the GNU debugger. - - Copyright (C) 2003-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "common-defs.h" -#include "fileio.h" -#include <sys/stat.h> -#include <fcntl.h> - -/* See fileio.h. */ - -int -host_to_fileio_error (int error) -{ - switch (error) - { - case EPERM: - return FILEIO_EPERM; - case ENOENT: - return FILEIO_ENOENT; - case EINTR: - return FILEIO_EINTR; - case EIO: - return FILEIO_EIO; - case EBADF: - return FILEIO_EBADF; - case EACCES: - return FILEIO_EACCES; - case EFAULT: - return FILEIO_EFAULT; - case EBUSY: - return FILEIO_EBUSY; - case EEXIST: - return FILEIO_EEXIST; - case ENODEV: - return FILEIO_ENODEV; - case ENOTDIR: - return FILEIO_ENOTDIR; - case EISDIR: - return FILEIO_EISDIR; - case EINVAL: - return FILEIO_EINVAL; - case ENFILE: - return FILEIO_ENFILE; - case EMFILE: - return FILEIO_EMFILE; - case EFBIG: - return FILEIO_EFBIG; - case ENOSPC: - return FILEIO_ENOSPC; - case ESPIPE: - return FILEIO_ESPIPE; - case EROFS: - return FILEIO_EROFS; - case ENOSYS: - return FILEIO_ENOSYS; - case ENAMETOOLONG: - return FILEIO_ENAMETOOLONG; - } - return FILEIO_EUNKNOWN; -} - -/* See fileio.h. */ - -int -fileio_to_host_openflags (int fileio_open_flags, int *open_flags_p) -{ - int open_flags = 0; - - if (fileio_open_flags & ~FILEIO_O_SUPPORTED) - return -1; - - if (fileio_open_flags & FILEIO_O_CREAT) - open_flags |= O_CREAT; - if (fileio_open_flags & FILEIO_O_EXCL) - open_flags |= O_EXCL; - if (fileio_open_flags & FILEIO_O_TRUNC) - open_flags |= O_TRUNC; - if (fileio_open_flags & FILEIO_O_APPEND) - open_flags |= O_APPEND; - if (fileio_open_flags & FILEIO_O_RDONLY) - open_flags |= O_RDONLY; - if (fileio_open_flags & FILEIO_O_WRONLY) - open_flags |= O_WRONLY; - if (fileio_open_flags & FILEIO_O_RDWR) - open_flags |= O_RDWR; - /* On systems supporting binary and text mode, always open files - in binary mode. */ -#ifdef O_BINARY - open_flags |= O_BINARY; -#endif - - *open_flags_p = open_flags; - return 0; -} - -/* See fileio.h. */ - -int -fileio_to_host_mode (int fileio_mode, mode_t *mode_p) -{ - mode_t mode = 0; - - if (fileio_mode & ~FILEIO_S_SUPPORTED) - return -1; - - if (fileio_mode & FILEIO_S_IFREG) - mode |= S_IFREG; - if (fileio_mode & FILEIO_S_IFDIR) - mode |= S_IFDIR; - if (fileio_mode & FILEIO_S_IFCHR) - mode |= S_IFCHR; - if (fileio_mode & FILEIO_S_IRUSR) - mode |= S_IRUSR; - if (fileio_mode & FILEIO_S_IWUSR) - mode |= S_IWUSR; - if (fileio_mode & FILEIO_S_IXUSR) - mode |= S_IXUSR; -#ifdef S_IRGRP - if (fileio_mode & FILEIO_S_IRGRP) - mode |= S_IRGRP; -#endif -#ifdef S_IWGRP - if (fileio_mode & FILEIO_S_IWGRP) - mode |= S_IWGRP; -#endif -#ifdef S_IXGRP - if (fileio_mode & FILEIO_S_IXGRP) - mode |= S_IXGRP; -#endif - if (fileio_mode & FILEIO_S_IROTH) - mode |= S_IROTH; -#ifdef S_IWOTH - if (fileio_mode & FILEIO_S_IWOTH) - mode |= S_IWOTH; -#endif -#ifdef S_IXOTH - if (fileio_mode & FILEIO_S_IXOTH) - mode |= S_IXOTH; -#endif - - *mode_p = mode; - return 0; -} - -/* Convert a host-format mode_t into a bitmask of File-I/O flags. */ - -static LONGEST -fileio_mode_pack (mode_t mode) -{ - mode_t tmode = 0; - - if (S_ISREG (mode)) - tmode |= FILEIO_S_IFREG; - if (S_ISDIR (mode)) - tmode |= FILEIO_S_IFDIR; - if (S_ISCHR (mode)) - tmode |= FILEIO_S_IFCHR; - if (mode & S_IRUSR) - tmode |= FILEIO_S_IRUSR; - if (mode & S_IWUSR) - tmode |= FILEIO_S_IWUSR; - if (mode & S_IXUSR) - tmode |= FILEIO_S_IXUSR; -#ifdef S_IRGRP - if (mode & S_IRGRP) - tmode |= FILEIO_S_IRGRP; -#endif -#ifdef S_IWGRP - if (mode & S_IWGRP) - tmode |= FILEIO_S_IWGRP; -#endif -#ifdef S_IXGRP - if (mode & S_IXGRP) - tmode |= FILEIO_S_IXGRP; -#endif - if (mode & S_IROTH) - tmode |= FILEIO_S_IROTH; -#ifdef S_IWOTH - if (mode & S_IWOTH) - tmode |= FILEIO_S_IWOTH; -#endif -#ifdef S_IXOTH - if (mode & S_IXOTH) - tmode |= FILEIO_S_IXOTH; -#endif - return tmode; -} - -/* Pack a host-format mode_t into an fio_mode_t. */ - -static void -host_to_fileio_mode (mode_t num, fio_mode_t fnum) -{ - host_to_bigendian (fileio_mode_pack (num), (char *) fnum, 4); -} - -/* Pack a host-format integer into an fio_ulong_t. */ - -static void -host_to_fileio_ulong (LONGEST num, fio_ulong_t fnum) -{ - host_to_bigendian (num, (char *) fnum, 8); -} - -/* See fileio.h. */ - -void -host_to_fileio_stat (struct stat *st, struct fio_stat *fst) -{ - LONGEST blksize; - - host_to_fileio_uint ((long) st->st_dev, fst->fst_dev); - host_to_fileio_uint ((long) st->st_ino, fst->fst_ino); - host_to_fileio_mode (st->st_mode, fst->fst_mode); - host_to_fileio_uint ((long) st->st_nlink, fst->fst_nlink); - host_to_fileio_uint ((long) st->st_uid, fst->fst_uid); - host_to_fileio_uint ((long) st->st_gid, fst->fst_gid); - host_to_fileio_uint ((long) st->st_rdev, fst->fst_rdev); - host_to_fileio_ulong ((LONGEST) st->st_size, fst->fst_size); -#ifdef HAVE_STRUCT_STAT_ST_BLKSIZE - blksize = st->st_blksize; -#else - blksize = 512; -#endif - host_to_fileio_ulong (blksize, fst->fst_blksize); -#if HAVE_STRUCT_STAT_ST_BLOCKS - host_to_fileio_ulong ((LONGEST) st->st_blocks, fst->fst_blocks); -#else - /* FIXME: This is correct for DJGPP, but other systems that don't - have st_blocks, if any, might prefer 512 instead of st_blksize. - (eliz, 30-12-2003) */ - host_to_fileio_ulong (((LONGEST) st->st_size + blksize - 1) - / blksize, - fst->fst_blocks); -#endif - host_to_fileio_time (st->st_atime, fst->fst_atime); - host_to_fileio_time (st->st_mtime, fst->fst_mtime); - host_to_fileio_time (st->st_ctime, fst->fst_ctime); -} diff -Nru gdb-9.1/gdb/gdbsupport/fileio.h gdb-10.2/gdb/gdbsupport/fileio.h --- gdb-9.1/gdb/gdbsupport/fileio.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/fileio.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,73 +0,0 @@ -/* File-I/O functions for GDB, the GNU debugger. - - Copyright (C) 2003-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef COMMON_FILEIO_H -#define COMMON_FILEIO_H - -#include "gdb/fileio.h" -#include <sys/stat.h> - -/* Convert a host-format errno value to a File-I/O error number. */ - -extern int host_to_fileio_error (int error); - -/* Convert File-I/O open flags FFLAGS to host format, storing - the result in *FLAGS. Return 0 on success, -1 on error. */ - -extern int fileio_to_host_openflags (int fflags, int *flags); - -/* Convert File-I/O mode FMODE to host format, storing - the result in *MODE. Return 0 on success, -1 on error. */ - -extern int fileio_to_host_mode (int fmode, mode_t *mode); - -/* Pack a host-format integer into a byte buffer in big-endian - format. BYTES specifies the size of the integer to pack in - bytes. */ - -static inline void -host_to_bigendian (LONGEST num, char *buf, int bytes) -{ - int i; - - for (i = 0; i < bytes; ++i) - buf[i] = (num >> (8 * (bytes - i - 1))) & 0xff; -} - -/* Pack a host-format integer into an fio_uint_t. */ - -static inline void -host_to_fileio_uint (long num, fio_uint_t fnum) -{ - host_to_bigendian ((LONGEST) num, (char *) fnum, 4); -} - -/* Pack a host-format time_t into an fio_time_t. */ - -static inline void -host_to_fileio_time (time_t num, fio_time_t fnum) -{ - host_to_bigendian ((LONGEST) num, (char *) fnum, 4); -} - -/* Pack a host-format struct stat into a struct fio_stat. */ - -extern void host_to_fileio_stat (struct stat *st, struct fio_stat *fst); - -#endif /* COMMON_FILEIO_H */ diff -Nru gdb-9.1/gdb/gdbsupport/filestuff.c gdb-10.2/gdb/gdbsupport/filestuff.c --- gdb-9.1/gdb/gdbsupport/filestuff.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/filestuff.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,503 +0,0 @@ -/* Low-level file-handling. - Copyright (C) 2012-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "common-defs.h" -#include "filestuff.h" -#include "gdb_vecs.h" -#include <fcntl.h> -#include <unistd.h> -#include <sys/types.h> -#include <sys/stat.h> -#include <algorithm> - -#ifdef USE_WIN32API -#include <winsock2.h> -#include <windows.h> -#define HAVE_SOCKETS 1 -#elif defined HAVE_SYS_SOCKET_H -#include <sys/socket.h> -/* Define HAVE_F_GETFD if we plan to use F_GETFD. */ -#define HAVE_F_GETFD F_GETFD -#define HAVE_SOCKETS 1 -#endif - -#ifdef HAVE_KINFO_GETFILE -#include <sys/user.h> -#include <libutil.h> -#endif - -#ifdef HAVE_SYS_RESOURCE_H -#include <sys/resource.h> -#endif /* HAVE_SYS_RESOURCE_H */ - -#ifndef O_CLOEXEC -#define O_CLOEXEC 0 -#endif - -#ifndef O_NOINHERIT -#define O_NOINHERIT 0 -#endif - -#ifndef SOCK_CLOEXEC -#define SOCK_CLOEXEC 0 -#endif - - - -#ifndef HAVE_FDWALK - -#include <dirent.h> - -/* Replacement for fdwalk, if the system doesn't define it. Walks all - open file descriptors (though this implementation may walk closed - ones as well, depending on the host platform's capabilities) and - call FUNC with ARG. If FUNC returns non-zero, stops immediately - and returns the same value. Otherwise, returns zero when - finished. */ - -static int -fdwalk (int (*func) (void *, int), void *arg) -{ - /* Checking __linux__ isn't great but it isn't clear what would be - better. There doesn't seem to be a good way to check for this in - configure. */ -#ifdef __linux__ - DIR *dir; - - dir = opendir ("/proc/self/fd"); - if (dir != NULL) - { - struct dirent *entry; - int result = 0; - - for (entry = readdir (dir); entry != NULL; entry = readdir (dir)) - { - long fd; - char *tail; - - errno = 0; - fd = strtol (entry->d_name, &tail, 10); - if (*tail != '\0' || errno != 0) - continue; - if ((int) fd != fd) - { - /* What can we do here really? */ - continue; - } - - if (fd == dirfd (dir)) - continue; - - result = func (arg, fd); - if (result != 0) - break; - } - - closedir (dir); - return result; - } - /* We may fall through to the next case. */ -#endif -#ifdef HAVE_KINFO_GETFILE - int nfd; - gdb::unique_xmalloc_ptr<struct kinfo_file[]> fdtbl - (kinfo_getfile (getpid (), &nfd)); - if (fdtbl != NULL) - { - for (int i = 0; i < nfd; i++) - { - if (fdtbl[i].kf_fd >= 0) - { - int result = func (arg, fdtbl[i].kf_fd); - if (result != 0) - return result; - } - } - return 0; - } - /* We may fall through to the next case. */ -#endif - - { - int max, fd; - -#if defined(HAVE_GETRLIMIT) && defined(RLIMIT_NOFILE) - struct rlimit rlim; - - if (getrlimit (RLIMIT_NOFILE, &rlim) == 0 && rlim.rlim_max != RLIM_INFINITY) - max = rlim.rlim_max; - else -#endif - { -#ifdef _SC_OPEN_MAX - max = sysconf (_SC_OPEN_MAX); -#else - /* Whoops. */ - return 0; -#endif /* _SC_OPEN_MAX */ - } - - for (fd = 0; fd < max; ++fd) - { - struct stat sb; - int result; - - /* Only call FUNC for open fds. */ - if (fstat (fd, &sb) == -1) - continue; - - result = func (arg, fd); - if (result != 0) - return result; - } - - return 0; - } -} - -#endif /* HAVE_FDWALK */ - - - -/* A vector holding all the fds open when notice_open_fds was called. We - don't use a hashtab because we don't expect there to be many open fds. */ - -static std::vector<int> open_fds; - -/* An fdwalk callback function used by notice_open_fds. It puts the - given file descriptor into the vec. */ - -static int -do_mark_open_fd (void *ignore, int fd) -{ - open_fds.push_back (fd); - return 0; -} - -/* See filestuff.h. */ - -void -notice_open_fds (void) -{ - fdwalk (do_mark_open_fd, NULL); -} - -/* See filestuff.h. */ - -void -mark_fd_no_cloexec (int fd) -{ - do_mark_open_fd (NULL, fd); -} - -/* See filestuff.h. */ - -void -unmark_fd_no_cloexec (int fd) -{ - auto it = std::remove (open_fds.begin (), open_fds.end (), fd); - - if (it != open_fds.end ()) - open_fds.erase (it); - else - gdb_assert_not_reached (_("fd not found in open_fds")); -} - -/* Helper function for close_most_fds that closes the file descriptor - if appropriate. */ - -static int -do_close (void *ignore, int fd) -{ - for (int val : open_fds) - { - if (fd == val) - { - /* Keep this one open. */ - return 0; - } - } - - close (fd); - return 0; -} - -/* See filestuff.h. */ - -void -close_most_fds (void) -{ - fdwalk (do_close, NULL); -} - - - -/* This is a tri-state flag. When zero it means we haven't yet tried - O_CLOEXEC. When positive it means that O_CLOEXEC works on this - host. When negative, it means that O_CLOEXEC doesn't work. We - track this state because, while gdb might have been compiled - against a libc that supplies O_CLOEXEC, there is no guarantee that - the kernel supports it. */ - -static int trust_o_cloexec; - -/* Mark FD as close-on-exec, ignoring errors. Update - TRUST_O_CLOEXEC. */ - -static void -mark_cloexec (int fd) -{ -#ifdef HAVE_F_GETFD - int old = fcntl (fd, F_GETFD, 0); - - if (old != -1) - { - fcntl (fd, F_SETFD, old | FD_CLOEXEC); - - if (trust_o_cloexec == 0) - { - if ((old & FD_CLOEXEC) != 0) - trust_o_cloexec = 1; - else - trust_o_cloexec = -1; - } - } -#endif /* HAVE_F_GETFD */ -} - -/* Depending on TRUST_O_CLOEXEC, mark FD as close-on-exec. */ - -static void -maybe_mark_cloexec (int fd) -{ - if (trust_o_cloexec <= 0) - mark_cloexec (fd); -} - -#ifdef HAVE_SOCKETS - -/* Like maybe_mark_cloexec, but for callers that use SOCK_CLOEXEC. */ - -static void -socket_mark_cloexec (int fd) -{ - if (SOCK_CLOEXEC == 0 || trust_o_cloexec <= 0) - mark_cloexec (fd); -} - -#endif - - - -/* See filestuff.h. */ - -int -gdb_open_cloexec (const char *filename, int flags, unsigned long mode) -{ - int fd = open (filename, flags | O_CLOEXEC, mode); - - if (fd >= 0) - maybe_mark_cloexec (fd); - - return fd; -} - -/* See filestuff.h. */ - -gdb_file_up -gdb_fopen_cloexec (const char *filename, const char *opentype) -{ - FILE *result; - /* Probe for "e" support once. But, if we can tell the operating - system doesn't know about close on exec mode "e" without probing, - skip it. E.g., the Windows runtime issues an "Invalid parameter - passed to C runtime function" OutputDebugString warning for - unknown modes. Assume that if O_CLOEXEC is zero, then "e" isn't - supported. On MinGW, O_CLOEXEC is an alias of O_NOINHERIT, and - "e" isn't supported. */ - static int fopen_e_ever_failed_einval = - O_CLOEXEC == 0 || O_CLOEXEC == O_NOINHERIT; - - if (!fopen_e_ever_failed_einval) - { - char *copy; - - copy = (char *) alloca (strlen (opentype) + 2); - strcpy (copy, opentype); - /* This is a glibc extension but we try it unconditionally on - this path. */ - strcat (copy, "e"); - result = fopen (filename, copy); - - if (result == NULL && errno == EINVAL) - { - result = fopen (filename, opentype); - if (result != NULL) - fopen_e_ever_failed_einval = 1; - } - } - else - result = fopen (filename, opentype); - - if (result != NULL) - maybe_mark_cloexec (fileno (result)); - - return gdb_file_up (result); -} - -#ifdef HAVE_SOCKETS -/* See filestuff.h. */ - -int -gdb_socketpair_cloexec (int domain, int style, int protocol, - int filedes[2]) -{ -#ifdef HAVE_SOCKETPAIR - int result = socketpair (domain, style | SOCK_CLOEXEC, protocol, filedes); - - if (result != -1) - { - socket_mark_cloexec (filedes[0]); - socket_mark_cloexec (filedes[1]); - } - - return result; -#else - gdb_assert_not_reached (_("socketpair not available on this host")); -#endif -} - -/* See filestuff.h. */ - -int -gdb_socket_cloexec (int domain, int style, int protocol) -{ - int result = socket (domain, style | SOCK_CLOEXEC, protocol); - - if (result != -1) - socket_mark_cloexec (result); - - return result; -} -#endif - -/* See filestuff.h. */ - -int -gdb_pipe_cloexec (int filedes[2]) -{ - int result; - -#ifdef HAVE_PIPE2 - result = pipe2 (filedes, O_CLOEXEC); - if (result != -1) - { - maybe_mark_cloexec (filedes[0]); - maybe_mark_cloexec (filedes[1]); - } -#else -#ifdef HAVE_PIPE - result = pipe (filedes); - if (result != -1) - { - mark_cloexec (filedes[0]); - mark_cloexec (filedes[1]); - } -#else /* HAVE_PIPE */ - gdb_assert_not_reached (_("pipe not available on this host")); -#endif /* HAVE_PIPE */ -#endif /* HAVE_PIPE2 */ - - return result; -} - -/* See gdbsupport/filestuff.h. */ - -bool -is_regular_file (const char *name, int *errno_ptr) -{ - struct stat st; - const int status = stat (name, &st); - - /* Stat should never fail except when the file does not exist. - If stat fails, analyze the source of error and return true - unless the file does not exist, to avoid returning false results - on obscure systems where stat does not work as expected. */ - - if (status != 0) - { - if (errno != ENOENT) - return true; - *errno_ptr = ENOENT; - return false; - } - - if (S_ISREG (st.st_mode)) - return true; - - if (S_ISDIR (st.st_mode)) - *errno_ptr = EISDIR; - else - *errno_ptr = EINVAL; - return false; -} - -/* See gdbsupport/filestuff.h. */ - -bool -mkdir_recursive (const char *dir) -{ - auto holder = make_unique_xstrdup (dir); - char * const start = holder.get (); - char *component_start = start; - char *component_end = start; - - while (1) - { - /* Find the beginning of the next component. */ - while (*component_start == '/') - component_start++; - - /* Are we done? */ - if (*component_start == '\0') - return true; - - /* Find the slash or null-terminator after this component. */ - component_end = component_start; - while (*component_end != '/' && *component_end != '\0') - component_end++; - - /* Temporarily replace the slash with a null terminator, so we can create - the directory up to this component. */ - char saved_char = *component_end; - *component_end = '\0'; - - /* If we get EEXIST and the existing path is a directory, then we're - happy. If it exists, but it's a regular file and this is not the last - component, we'll fail at the next component. If this is the last - component, the caller will fail with ENOTDIR when trying to - open/create a file under that path. */ - if (mkdir (start, 0700) != 0) - if (errno != EEXIST) - return false; - - /* Restore the overwritten char. */ - *component_end = saved_char; - component_start = component_end; - } -} diff -Nru gdb-9.1/gdb/gdbsupport/filestuff.h gdb-10.2/gdb/gdbsupport/filestuff.h --- gdb-9.1/gdb/gdbsupport/filestuff.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/filestuff.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,142 +0,0 @@ -/* Low-level file-handling. - Copyright (C) 2012-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef COMMON_FILESTUFF_H -#define COMMON_FILESTUFF_H - -#include <dirent.h> -#include <fcntl.h> - -/* Note all the file descriptors which are open when this is called. - These file descriptors will not be closed by close_most_fds. */ - -extern void notice_open_fds (void); - -/* Mark a file descriptor as inheritable across an exec. */ - -extern void mark_fd_no_cloexec (int fd); - -/* Mark a file descriptor as no longer being inheritable across an - exec. This is only meaningful when FD was previously passed to - mark_fd_no_cloexec. */ - -extern void unmark_fd_no_cloexec (int fd); - -/* Close all open file descriptors other than those marked by - 'notice_open_fds', and stdin, stdout, and stderr. Errors that - occur while closing are ignored. */ - -extern void close_most_fds (void); - -/* Like 'open', but ensures that the returned file descriptor has the - close-on-exec flag set. */ - -extern int gdb_open_cloexec (const char *filename, int flags, - /* mode_t */ unsigned long mode); - -/* Like mkstemp, but ensures that the file descriptor is - close-on-exec. */ - -static inline int -gdb_mkostemp_cloexec (char *name_template, int flags = 0) -{ - /* gnulib provides a mkostemp replacement if needed. */ - return mkostemp (name_template, flags | O_CLOEXEC); -} - -/* Convenience wrapper for the above, which takes the filename as an - std::string. */ - -static inline int -gdb_open_cloexec (const std::string &filename, int flags, - /* mode_t */ unsigned long mode) -{ - return gdb_open_cloexec (filename.c_str (), flags, mode); -} - -struct gdb_file_deleter -{ - void operator() (FILE *file) const - { - fclose (file); - } -}; - -/* A unique pointer to a FILE. */ - -typedef std::unique_ptr<FILE, gdb_file_deleter> gdb_file_up; - -/* Like 'fopen', but ensures that the returned file descriptor has the - close-on-exec flag set. */ - -extern gdb_file_up gdb_fopen_cloexec (const char *filename, - const char *opentype); - -/* Convenience wrapper for the above, which takes the filename as an - std::string. */ - -static inline gdb_file_up -gdb_fopen_cloexec (const std::string &filename, const char *opentype) -{ - return gdb_fopen_cloexec (filename.c_str (), opentype); -} - -/* Like 'socketpair', but ensures that the returned file descriptors - have the close-on-exec flag set. */ - -extern int gdb_socketpair_cloexec (int domain, int style, int protocol, - int filedes[2]); - -/* Like 'socket', but ensures that the returned file descriptor has - the close-on-exec flag set. */ - -extern int gdb_socket_cloexec (int domain, int style, int protocol); - -/* Like 'pipe', but ensures that the returned file descriptors have - the close-on-exec flag set. */ - -extern int gdb_pipe_cloexec (int filedes[2]); - -struct gdb_dir_deleter -{ - void operator() (DIR *dir) const - { - closedir (dir); - } -}; - -/* A unique pointer to a DIR. */ - -typedef std::unique_ptr<DIR, gdb_dir_deleter> gdb_dir_up; - -/* Return true if the file NAME exists and is a regular file. - If the result is false then *ERRNO_PTR is set to a useful value assuming - we're expecting a regular file. */ -extern bool is_regular_file (const char *name, int *errno_ptr); - - -/* A cheap (as in low-quality) recursive mkdir. Try to create all the - parents directories up to DIR and DIR itself. Stop if we hit an - error along the way. There is no attempt to remove created - directories in case of failure. - - Returns false on failure and sets errno. */ - -extern bool mkdir_recursive (const char *dir); - -#endif /* COMMON_FILESTUFF_H */ diff -Nru gdb-9.1/gdb/gdbsupport/filtered-iterator.h gdb-10.2/gdb/gdbsupport/filtered-iterator.h --- gdb-9.1/gdb/gdbsupport/filtered-iterator.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/filtered-iterator.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,87 +0,0 @@ -/* A forward filtered iterator for GDB, the GNU debugger. - Copyright (C) 2018-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef COMMON_FILTERED_ITERATOR_H -#define COMMON_FILTERED_ITERATOR_H - -/* A filtered iterator. This wraps BaseIterator and automatically - skips elements that FilterFunc filters out. Requires that - default-constructing a BaseIterator creates a valid one-past-end - iterator. */ - -template<typename BaseIterator, typename FilterFunc> -class filtered_iterator -{ -public: - typedef filtered_iterator self_type; - typedef typename BaseIterator::value_type value_type; - typedef typename BaseIterator::reference reference; - typedef typename BaseIterator::pointer pointer; - typedef typename BaseIterator::iterator_category iterator_category; - typedef typename BaseIterator::difference_type difference_type; - - /* Construct by forwarding all arguments to the underlying - iterator. */ - template<typename... Args> - explicit filtered_iterator (Args &&...args) - : m_it (std::forward<Args> (args)...) - { skip_filtered (); } - - /* Create a one-past-end iterator. */ - filtered_iterator () = default; - - /* Need these as the variadic constructor would be a better match - otherwise. */ - filtered_iterator (filtered_iterator &) = default; - filtered_iterator (const filtered_iterator &) = default; - filtered_iterator (filtered_iterator &&) = default; - filtered_iterator (const filtered_iterator &&other) - : filtered_iterator (static_cast<const filtered_iterator &> (other)) - {} - - value_type operator* () const { return *m_it; } - - self_type &operator++ () - { - ++m_it; - skip_filtered (); - return *this; - } - - bool operator== (const self_type &other) const - { return m_it == other.m_it; } - - bool operator!= (const self_type &other) const - { return m_it != other.m_it; } - -private: - - void skip_filtered () - { - for (; m_it != m_end; ++m_it) - if (m_filter (*m_it)) - break; - } - -private: - FilterFunc m_filter {}; - BaseIterator m_it {}; - BaseIterator m_end {}; -}; - -#endif /* COMMON_FILTERED_ITERATOR_H */ diff -Nru gdb-9.1/gdb/gdbsupport/format.c gdb-10.2/gdb/gdbsupport/format.c --- gdb-9.1/gdb/gdbsupport/format.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/format.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,412 +0,0 @@ -/* Parse a printf-style format string. - - Copyright (C) 1986-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "common-defs.h" -#include "format.h" - -format_pieces::format_pieces (const char **arg, bool gdb_extensions) -{ - const char *s; - const char *string; - const char *prev_start; - const char *percent_loc; - char *sub_start, *current_substring; - enum argclass this_argclass; - - s = *arg; - - if (gdb_extensions) - { - string = *arg; - *arg += strlen (*arg); - } - else - { - /* Parse the format-control string and copy it into the string STRING, - processing some kinds of escape sequence. */ - - char *f = (char *) alloca (strlen (s) + 1); - string = f; - - while ((gdb_extensions || *s != '"') && *s != '\0') - { - int c = *s++; - switch (c) - { - case '\0': - continue; - - case '\\': - switch (c = *s++) - { - case '\\': - *f++ = '\\'; - break; - case 'a': - *f++ = '\a'; - break; - case 'b': - *f++ = '\b'; - break; - case 'e': - *f++ = '\e'; - break; - case 'f': - *f++ = '\f'; - break; - case 'n': - *f++ = '\n'; - break; - case 'r': - *f++ = '\r'; - break; - case 't': - *f++ = '\t'; - break; - case 'v': - *f++ = '\v'; - break; - case '"': - *f++ = '"'; - break; - default: - /* ??? TODO: handle other escape sequences. */ - error (_("Unrecognized escape character \\%c in format string."), - c); - } - break; - - default: - *f++ = c; - } - } - - /* Terminate our escape-processed copy. */ - *f++ = '\0'; - - /* Whether the format string ended with double-quote or zero, we're - done with it; it's up to callers to complain about syntax. */ - *arg = s; - } - - /* Need extra space for the '\0's. Doubling the size is sufficient. */ - - current_substring = (char *) xmalloc (strlen (string) * 2 + 1000); - m_storage.reset (current_substring); - - /* Now scan the string for %-specs and see what kinds of args they want. - argclass classifies the %-specs so we can give printf-type functions - something of the right size. */ - - const char *f = string; - prev_start = string; - while (*f) - if (*f++ == '%') - { - int seen_hash = 0, seen_zero = 0, lcount = 0, seen_prec = 0; - int seen_space = 0, seen_plus = 0; - int seen_big_l = 0, seen_h = 0, seen_big_h = 0; - int seen_big_d = 0, seen_double_big_d = 0; - int seen_size_t = 0; - int bad = 0; - int n_int_args = 0; - bool seen_i64 = false; - - /* Skip over "%%", it will become part of a literal piece. */ - if (*f == '%') - { - f++; - continue; - } - - sub_start = current_substring; - - strncpy (current_substring, prev_start, f - 1 - prev_start); - current_substring += f - 1 - prev_start; - *current_substring++ = '\0'; - - if (*sub_start != '\0') - m_pieces.emplace_back (sub_start, literal_piece, 0); - - percent_loc = f - 1; - - /* Check the validity of the format specifier, and work - out what argument it expects. We only accept C89 - format strings, with the exception of long long (which - we autoconf for). */ - - /* The first part of a format specifier is a set of flag - characters. */ - while (*f != '\0' && strchr ("0-+ #", *f)) - { - if (*f == '#') - seen_hash = 1; - else if (*f == '0') - seen_zero = 1; - else if (*f == ' ') - seen_space = 1; - else if (*f == '+') - seen_plus = 1; - f++; - } - - /* The next part of a format specifier is a width. */ - if (gdb_extensions && *f == '*') - { - ++f; - ++n_int_args; - } - else - { - while (*f != '\0' && strchr ("0123456789", *f)) - f++; - } - - /* The next part of a format specifier is a precision. */ - if (*f == '.') - { - seen_prec = 1; - f++; - if (gdb_extensions && *f == '*') - { - ++f; - ++n_int_args; - } - else - { - while (*f != '\0' && strchr ("0123456789", *f)) - f++; - } - } - - /* The next part of a format specifier is a length modifier. */ - switch (*f) - { - case 'h': - seen_h = 1; - f++; - break; - case 'l': - f++; - lcount++; - if (*f == 'l') - { - f++; - lcount++; - } - break; - case 'L': - seen_big_l = 1; - f++; - break; - case 'H': - /* Decimal32 modifier. */ - seen_big_h = 1; - f++; - break; - case 'D': - /* Decimal64 and Decimal128 modifiers. */ - f++; - - /* Check for a Decimal128. */ - if (*f == 'D') - { - f++; - seen_double_big_d = 1; - } - else - seen_big_d = 1; - break; - case 'z': - /* For size_t or ssize_t. */ - seen_size_t = 1; - f++; - break; - case 'I': - /* Support the Windows '%I64' extension, because an - earlier call to format_pieces might have converted %lld - to %I64d. */ - if (f[1] == '6' && f[2] == '4') - { - f += 3; - lcount = 2; - seen_i64 = true; - } - break; - } - - switch (*f) - { - case 'u': - if (seen_hash) - bad = 1; - /* FALLTHROUGH */ - - case 'o': - case 'x': - case 'X': - if (seen_space || seen_plus) - bad = 1; - /* FALLTHROUGH */ - - case 'd': - case 'i': - if (seen_size_t) - this_argclass = size_t_arg; - else if (lcount == 0) - this_argclass = int_arg; - else if (lcount == 1) - this_argclass = long_arg; - else - this_argclass = long_long_arg; - - if (seen_big_l) - bad = 1; - break; - - case 'c': - this_argclass = lcount == 0 ? int_arg : wide_char_arg; - if (lcount > 1 || seen_h || seen_big_l) - bad = 1; - if (seen_prec || seen_zero || seen_space || seen_plus) - bad = 1; - break; - - case 'p': - this_argclass = ptr_arg; - if (lcount || seen_h || seen_big_l) - bad = 1; - if (seen_prec) - bad = 1; - if (seen_hash || seen_zero || seen_space || seen_plus) - bad = 1; - - if (gdb_extensions) - { - switch (f[1]) - { - case 's': - case 'F': - case '[': - case ']': - f++; - break; - } - } - - break; - - case 's': - this_argclass = lcount == 0 ? string_arg : wide_string_arg; - if (lcount > 1 || seen_h || seen_big_l) - bad = 1; - if (seen_zero || seen_space || seen_plus) - bad = 1; - break; - - case 'e': - case 'f': - case 'g': - case 'E': - case 'G': - if (seen_double_big_d) - this_argclass = dec128float_arg; - else if (seen_big_d) - this_argclass = dec64float_arg; - else if (seen_big_h) - this_argclass = dec32float_arg; - else if (seen_big_l) - this_argclass = long_double_arg; - else - this_argclass = double_arg; - - if (lcount || seen_h) - bad = 1; - break; - - case '*': - error (_("`*' not supported for precision or width in printf")); - - case 'n': - error (_("Format specifier `n' not supported in printf")); - - case '\0': - error (_("Incomplete format specifier at end of format string")); - - default: - error (_("Unrecognized format specifier '%c' in printf"), *f); - } - - if (bad) - error (_("Inappropriate modifiers to " - "format specifier '%c' in printf"), - *f); - - f++; - - sub_start = current_substring; - - if (lcount > 1 && !seen_i64 && USE_PRINTF_I64) - { - /* Windows' printf does support long long, but not the usual way. - Convert %lld to %I64d. */ - int length_before_ll = f - percent_loc - 1 - lcount; - - strncpy (current_substring, percent_loc, length_before_ll); - strcpy (current_substring + length_before_ll, "I64"); - current_substring[length_before_ll + 3] = - percent_loc[length_before_ll + lcount]; - current_substring += length_before_ll + 4; - } - else if (this_argclass == wide_string_arg - || this_argclass == wide_char_arg) - { - /* Convert %ls or %lc to %s. */ - int length_before_ls = f - percent_loc - 2; - - strncpy (current_substring, percent_loc, length_before_ls); - strcpy (current_substring + length_before_ls, "s"); - current_substring += length_before_ls + 2; - } - else - { - strncpy (current_substring, percent_loc, f - percent_loc); - current_substring += f - percent_loc; - } - - *current_substring++ = '\0'; - - prev_start = f; - - m_pieces.emplace_back (sub_start, this_argclass, n_int_args); - } - - /* Record the remainder of the string. */ - - if (f > prev_start) - { - sub_start = current_substring; - - strncpy (current_substring, prev_start, f - prev_start); - current_substring += f - prev_start; - *current_substring++ = '\0'; - - m_pieces.emplace_back (sub_start, literal_piece, 0); - } -} diff -Nru gdb-9.1/gdb/gdbsupport/format.h gdb-10.2/gdb/gdbsupport/format.h --- gdb-9.1/gdb/gdbsupport/format.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/format.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,101 +0,0 @@ -/* Parse a printf-style format string. - - Copyright (C) 1986-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef COMMON_FORMAT_H -#define COMMON_FORMAT_H - -#include "gdbsupport/gdb_string_view.h" - -#if defined(__MINGW32__) && !defined(PRINTF_HAS_LONG_LONG) -# define USE_PRINTF_I64 1 -# define PRINTF_HAS_LONG_LONG -#else -# define USE_PRINTF_I64 0 -#endif - -/* The argclass represents the general type of data that goes with a - format directive; int_arg for %d, long_arg for %l, and so forth. - Note that these primarily distinguish types by size and need for - special handling, so for instance %u and %x are (at present) also - classed as int_arg. */ - -enum argclass - { - literal_piece, - int_arg, long_arg, long_long_arg, size_t_arg, ptr_arg, - string_arg, wide_string_arg, wide_char_arg, - double_arg, long_double_arg, - dec32float_arg, dec64float_arg, dec128float_arg - }; - -/* A format piece is a section of the format string that may include a - single print directive somewhere in it, and the associated class - for the argument. */ - -struct format_piece -{ - format_piece (const char *str, enum argclass argc, int n) - : string (str), - argclass (argc), - n_int_args (n) - { - } - - bool operator== (const format_piece &other) const - { - return (this->argclass == other.argclass - && gdb::string_view (this->string) == other.string); - } - - const char *string; - enum argclass argclass; - /* Count the number of preceding 'int' arguments that must be passed - along. This is used for a width or precision of '*'. Note that - this feature is only available in "gdb_extensions" mode. */ - int n_int_args; -}; - -class format_pieces -{ -public: - - format_pieces (const char **arg, bool gdb_extensions = false); - ~format_pieces () = default; - - DISABLE_COPY_AND_ASSIGN (format_pieces); - - typedef std::vector<format_piece>::iterator iterator; - - iterator begin () - { - return m_pieces.begin (); - } - - iterator end () - { - return m_pieces.end (); - } - -private: - - std::vector<format_piece> m_pieces; - gdb::unique_xmalloc_ptr<char> m_storage; -}; - -#endif /* COMMON_FORMAT_H */ diff -Nru gdb-9.1/gdb/gdbsupport/forward-scope-exit.h gdb-10.2/gdb/gdbsupport/forward-scope-exit.h --- gdb-9.1/gdb/gdbsupport/forward-scope-exit.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/forward-scope-exit.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,123 +0,0 @@ -/* Copyright (C) 2019-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef COMMON_FORWARD_SCOPE_EXIT_H -#define COMMON_FORWARD_SCOPE_EXIT_H - -#include "gdbsupport/scope-exit.h" -#include <functional> - -/* A forward_scope_exit is like scope_exit, but instead of giving it a - callable, you instead specialize it for a given cleanup function, - and the generated class automatically has a constructor with the - same interface as the cleanup function. forward_scope_exit - captures the arguments passed to the ctor, and in turn passes those - as arguments to the wrapped cleanup function, when it is called at - scope exit time, from within the forward_scope_exit dtor. The - forward_scope_exit class can take any number of arguments, and is - cancelable if needed. - - This allows usage like this: - - void - delete_longjmp_breakpoint (int arg) - { - // Blah, blah, blah... - } - - using longjmp_breakpoint_cleanup - = FORWARD_SCOPE_EXIT (delete_longjmp_breakpoint); - - This above created a new cleanup class `longjmp_breakpoint_cleanup` - than can then be used like this: - - longjmp_breakpoint_cleanup obj (thread); - - // Blah, blah, blah... - - obj.release (); // Optional cancel if needed. - - forward_scope_exit is also handy when you would need to wrap a - scope_exit in a gdb::optional: - - gdb::optional<longjmp_breakpoint_cleanup> cleanup; - if (some condition) - cleanup.emplace (thread); - ... - if (cleanup) - cleanup->release (); - - since with scope exit, you would have to know the scope_exit's - callable template type when you create the gdb::optional: - - gdb:optional<scope_exit<what goes here?>> - - The "forward" naming fits both purposes shown above -- the class - "forwards" ctor arguments to the wrapped cleanup function at scope - exit time, and can also be used to "forward declare" - scope_exit-like objects. */ - -namespace detail -{ - -/* Function and Signature are passed in the same type, in order to - extract Function's arguments' types in the specialization below. - Those are used to generate the constructor. */ - -template<typename Function, Function *function, typename Signature> -struct forward_scope_exit; - -template<typename Function, Function *function, - typename Res, typename... Args> -class forward_scope_exit<Function, function, Res (Args...)> - : public scope_exit_base<forward_scope_exit<Function, - function, - Res (Args...)>> -{ - /* For access to on_exit(). */ - friend scope_exit_base<forward_scope_exit<Function, - function, - Res (Args...)>>; - -public: - explicit forward_scope_exit (Args ...args) - : m_bind_function (function, args...) - { - /* Nothing. */ - } - -private: - void on_exit () - { - m_bind_function (); - } - - /* The function and the arguments passed to the ctor, all packed in - a std::bind. */ - decltype (std::bind (function, std::declval<Args> ()...)) - m_bind_function; -}; - -} /* namespace detail */ - -/* This is the "public" entry point. It's a macro to avoid having to - name FUNC more than once. */ - -#define FORWARD_SCOPE_EXIT(FUNC) \ - detail::forward_scope_exit<decltype (FUNC), FUNC, decltype (FUNC)> - -#endif /* COMMON_FORWARD_SCOPE_EXIT_H */ diff -Nru gdb-9.1/gdb/gdbsupport/function-view.h gdb-10.2/gdb/gdbsupport/function-view.h --- gdb-9.1/gdb/gdbsupport/function-view.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/function-view.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,323 +0,0 @@ -/* Copyright (C) 2017-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef COMMON_FUNCTION_VIEW_H -#define COMMON_FUNCTION_VIEW_H - -/* function_view is a polymorphic type-erasing wrapper class that - encapsulates a non-owning reference to arbitrary callable objects. - - A way to put it is that function_view is to std::function like - std::string_view is to std::string. While std::function stores a - type-erased callable object internally, function_view holds a - type-erased reference to an external callable object. - - This is meant to be used as callback type of a function that: - - #1 - Takes a callback as parameter. - - #2 - Wants to support arbitrary callable objects as callback type - (e.g., stateful function objects, lambda closures, free - functions). - - #3 - Does not store the callback anywhere; instead the function - just calls the callback directly or forwards it to some - other function that calls it. - - #4 - Can't be, or we don't want it to be, a template function - with the callable type as template parameter. For example, - when the callback is a parameter of a virtual member - function, or when putting the function template in a header - would expose too much implementation detail. - - Note that the C-style "function pointer" + "void *data" callback - parameter idiom fails requirement #2 above. Please don't add new - uses of that idiom. I.e., something like this wouldn't work; - - typedef bool (iterate_over_foos_cb) (foo *f, void *user_data), - void iterate_over_foos (iterate_over_foos_cb *callback, void *user_data); - - foo *find_foo_by_type (int type) - { - foo *found = nullptr; - - iterate_over_foos ([&] (foo *f, void *data) - { - if (foo->type == type) - { - found = foo; - return true; // stop iterating - } - return false; // continue iterating - }, NULL); - - return found; - } - - The above wouldn't compile, because lambdas with captures can't be - implicitly converted to a function pointer (because a capture means - some context data must be passed to the lambda somehow). - - C++11 gave us std::function as type-erased wrapper around arbitrary - callables, however, std::function is not an ideal fit for transient - callbacks such as the use case above. For this use case, which is - quite pervasive, a function_view is a better choice, because while - function_view is light and does not require any heap allocation, - std::function is a heavy-weight object with value semantics that - generally requires a heap allocation on construction/assignment of - the target callable. In addition, while it is possible to use - std::function in such a way that avoids most of the overhead by - making sure to only construct it with callables of types that fit - std::function's small object optimization, such as function - pointers and std::reference_wrapper callables, that is quite - inconvenient in practice, because restricting to free-function - callables would imply no state/capture/closure, which we need in - most cases, and std::reference_wrapper implies remembering to use - std::ref/std::cref where the callable is constructed, with the - added inconvenience that std::ref/std::cref have deleted rvalue-ref - overloads, meaning you can't use unnamed/temporary lambdas with - them. - - Note that because function_view is a non-owning view of a callable, - care must be taken to ensure that the callable outlives the - function_view that calls it. This is not really a problem for the - use case function_view is intended for, such as passing a temporary - function object / lambda to a function that accepts a callback, - because in those cases, the temporary is guaranteed to be live - until the called function returns. - - Calling a function_view with no associated target is undefined, - unlike with std::function, which throws std::bad_function_call. - This is by design, to avoid the otherwise necessary NULL check in - function_view::operator(). - - Since function_view objects are small (a pair of pointers), they - should generally be passed around by value. - - Usage: - - Given this function that accepts a callback: - - void - iterate_over_foos (gdb::function_view<void (foo *)> callback) - { - for (auto &foo : foos) - callback (&foo); - } - - you can call it like this, passing a lambda as callback: - - iterate_over_foos ([&] (foo *f) - { - process_one_foo (f); - }); - - or like this, passing a function object as callback: - - struct function_object - { - void operator() (foo *f) - { - if (s->check ()) - process_one_foo (f); - } - - // some state - state *s; - }; - - state mystate; - function_object matcher {&mystate}; - iterate_over_foos (matcher); - - or like this, passing a function pointer as callback: - - iterate_over_foos (process_one_foo); - - You can find unit tests covering the whole API in - unittests/function-view-selftests.c. */ - -namespace gdb { - -namespace fv_detail { -/* Bits shared by all function_view instantiations that do not depend - on the template parameters. */ - -/* Storage for the erased callable. This is a union in order to be - able to save both a function object (data) pointer or a function - pointer without triggering undefined behavior. */ -union erased_callable -{ - /* For function objects. */ - void *data; - - /* For function pointers. */ - void (*fn) (); -}; - -} /* namespace fv_detail */ - -/* Use partial specialization to get access to the callable's - signature. */ -template<class Signature> -struct function_view; - -template<typename Res, typename... Args> -class function_view<Res (Args...)> -{ - template<typename From, typename To> - using CompatibleReturnType - = Or<std::is_void<To>, - std::is_same<From, To>, - std::is_convertible<From, To>>; - - /* True if Func can be called with Args, and either the result is - Res, convertible to Res or Res is void. */ - template<typename Callable, - typename Res2 = typename std::result_of<Callable &(Args...)>::type> - struct IsCompatibleCallable : CompatibleReturnType<Res2, Res> - {}; - - /* True if Callable is a function_view. Used to avoid hijacking the - copy ctor. */ - template <typename Callable> - struct IsFunctionView - : std::is_same<function_view, typename std::decay<Callable>::type> - {}; - - public: - - /* NULL by default. */ - constexpr function_view () noexcept - : m_erased_callable {}, - m_invoker {} - {} - - /* Default copy/assignment is fine. */ - function_view (const function_view &) = default; - function_view &operator= (const function_view &) = default; - - /* This is the main entry point. Use SFINAE to avoid hijacking the - copy constructor and to ensure that the target type is - compatible. */ - template - <typename Callable, - typename = Requires<Not<IsFunctionView<Callable>>>, - typename = Requires<IsCompatibleCallable<Callable>>> - function_view (Callable &&callable) noexcept - { - bind (callable); - } - - /* Construct a NULL function_view. */ - constexpr function_view (std::nullptr_t) noexcept - : m_erased_callable {}, - m_invoker {} - {} - - /* Clear a function_view. */ - function_view &operator= (std::nullptr_t) noexcept - { - m_invoker = nullptr; - return *this; - } - - /* Return true if the wrapper has a target, false otherwise. Note - we check M_INVOKER instead of M_ERASED_CALLABLE because we don't - know which member of the union is active right now. */ - constexpr explicit operator bool () const noexcept - { return m_invoker != nullptr; } - - /* Call the callable. */ - Res operator () (Args... args) const - { return m_invoker (m_erased_callable, std::forward<Args> (args)...); } - - private: - - /* Bind this function_view to a compatible function object - reference. */ - template <typename Callable> - void bind (Callable &callable) noexcept - { - m_erased_callable.data = (void *) std::addressof (callable); - m_invoker = [] (fv_detail::erased_callable ecall, Args... args) - noexcept (noexcept (callable (std::forward<Args> (args)...))) -> Res - { - auto &restored_callable = *static_cast<Callable *> (ecall.data); - /* The explicit cast to Res avoids a compile error when Res is - void and the callable returns non-void. */ - return (Res) restored_callable (std::forward<Args> (args)...); - }; - } - - /* Bind this function_view to a compatible function pointer. - - Making this a separate function allows avoiding one indirection, - by storing the function pointer directly in the storage, instead - of a pointer to pointer. erased_callable is then a union in - order to avoid storing a function pointer as a data pointer here, - which would be undefined. */ - template<class Res2, typename... Args2> - void bind (Res2 (*fn) (Args2...)) noexcept - { - m_erased_callable.fn = reinterpret_cast<void (*) ()> (fn); - m_invoker = [] (fv_detail::erased_callable ecall, Args... args) - noexcept (noexcept (fn (std::forward<Args> (args)...))) -> Res - { - auto restored_fn = reinterpret_cast<Res2 (*) (Args2...)> (ecall.fn); - /* The explicit cast to Res avoids a compile error when Res is - void and the callable returns non-void. */ - return (Res) restored_fn (std::forward<Args> (args)...); - }; - } - - /* Storage for the erased callable. */ - fv_detail::erased_callable m_erased_callable; - - /* The invoker. This is set to a capture-less lambda by one of the - 'bind' overloads. The lambda restores the right type of the - callable (which is passed as first argument), and forwards the - args. */ - Res (*m_invoker) (fv_detail::erased_callable, Args...); -}; - -/* Allow comparison with NULL. Defer the work to the in-class - operator bool implementation. */ - -template<typename Res, typename... Args> -constexpr inline bool -operator== (const function_view<Res (Args...)> &f, std::nullptr_t) noexcept -{ return !static_cast<bool> (f); } - -template<typename Res, typename... Args> -constexpr inline bool -operator== (std::nullptr_t, const function_view<Res (Args...)> &f) noexcept -{ return !static_cast<bool> (f); } - -template<typename Res, typename... Args> -constexpr inline bool -operator!= (const function_view<Res (Args...)> &f, std::nullptr_t) noexcept -{ return static_cast<bool> (f); } - -template<typename Res, typename... Args> -constexpr inline bool -operator!= (std::nullptr_t, const function_view<Res (Args...)> &f) noexcept -{ return static_cast<bool> (f); } - -} /* namespace gdb */ - -#endif diff -Nru gdb-9.1/gdb/gdbsupport/gdb_assert.h gdb-10.2/gdb/gdbsupport/gdb_assert.h --- gdb-9.1/gdb/gdbsupport/gdb_assert.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/gdb_assert.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,61 +0,0 @@ -/* GDB-friendly replacement for <assert.h>. - Copyright (C) 2000-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef COMMON_GDB_ASSERT_H -#define COMMON_GDB_ASSERT_H - -#include "errors.h" - -/* A static assertion. This will cause a compile-time error if EXPR, - which must be a compile-time constant, is false. */ - -#define gdb_static_assert(expr) static_assert (expr, "") - -/* PRAGMATICS: "gdb_assert.h":gdb_assert() is a lower case (rather - than upper case) macro since that provides the closest fit to the - existing lower case macro <assert.h>:assert() that it is - replacing. */ - -#define gdb_assert(expr) \ - ((void) ((expr) ? 0 : \ - (gdb_assert_fail (#expr, __FILE__, __LINE__, FUNCTION_NAME), 0))) - -/* This prints an "Assertion failed" message, asking the user if they - want to continue, dump core, or just exit. */ -#if defined (FUNCTION_NAME) -#define gdb_assert_fail(assertion, file, line, function) \ - internal_error (file, line, _("%s: Assertion `%s' failed."), \ - function, assertion) -#else -#define gdb_assert_fail(assertion, file, line, function) \ - internal_error (file, line, _("Assertion `%s' failed."), \ - assertion) -#endif - -/* The canonical form of gdb_assert (0). - MESSAGE is a string to include in the error message. */ - -#if defined (FUNCTION_NAME) -#define gdb_assert_not_reached(message) \ - internal_error (__FILE__, __LINE__, "%s: %s", FUNCTION_NAME, _(message)) -#else -#define gdb_assert_not_reached(message) \ - internal_error (__FILE__, __LINE__, _(message)) -#endif - -#endif /* COMMON_GDB_ASSERT_H */ diff -Nru gdb-9.1/gdb/gdbsupport/gdb_binary_search.h gdb-10.2/gdb/gdbsupport/gdb_binary_search.h --- gdb-9.1/gdb/gdbsupport/gdb_binary_search.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/gdb_binary_search.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,59 +0,0 @@ -/* C++ implementation of a binary search. - - Copyright (C) 2019-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - - -#ifndef GDBSUPPORT_GDB_BINARY_SEARCH_H -#define GDBSUPPORT_GDB_BINARY_SEARCH_H - -#include <algorithm> - -namespace gdb { - -/* Implements a binary search using C++ iterators. - This differs from std::binary_search in that it returns an interator for - the found element and in that the type of EL can be different from the - type of the elements in the countainer. - - COMP is a C-style comparison function with signature: - int comp(const value_type& a, const T& b); - It should return -1, 0 or 1 if a is less than, equal to, or greater than - b, respectively. - [first, last) must be sorted. - - The return value is an iterator pointing to the found element, or LAST if - no element was found. */ -template<typename It, typename T, typename Comp> -It binary_search (It first, It last, T el, Comp comp) -{ - auto lt = [&] (const typename std::iterator_traits<It>::value_type &a, - const T &b) - { return comp (a, b) < 0; }; - - auto lb = std::lower_bound (first, last, el, lt); - if (lb != last) - { - if (comp (*lb, el) == 0) - return lb; - } - return last; -} - -} /* namespace gdb */ - -#endif /* GDBSUPPORT_GDB_BINARY_SEARCH_H */ diff -Nru gdb-9.1/gdb/gdbsupport/gdb-dlfcn.c gdb-10.2/gdb/gdbsupport/gdb-dlfcn.c --- gdb-9.1/gdb/gdbsupport/gdb-dlfcn.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/gdb-dlfcn.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,118 +0,0 @@ -/* Platform independent shared object routines for GDB. - - Copyright (C) 2011-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "common-defs.h" -#include "gdb-dlfcn.h" - -#ifdef HAVE_DLFCN_H -#include <dlfcn.h> -#elif __MINGW32__ -#include <windows.h> -#else -/* Unsupported configuration. */ -#define NO_SHARED_LIB -#endif - -#ifdef NO_SHARED_LIB - -gdb_dlhandle_up -gdb_dlopen (const char *filename) -{ - gdb_assert_not_reached ("gdb_dlopen should not be called on this platform."); -} - -void * -gdb_dlsym (const gdb_dlhandle_up &handle, const char *symbol) -{ - gdb_assert_not_reached ("gdb_dlsym should not be called on this platform."); -} - -void -dlclose_deleter::operator() (void *handle) const -{ - gdb_assert_not_reached ("gdb_dlclose should not be called on this platform."); -} - -int -is_dl_available (void) -{ - return 0; -} - -#else /* NO_SHARED_LIB */ - -gdb_dlhandle_up -gdb_dlopen (const char *filename) -{ - void *result; -#ifdef HAVE_DLFCN_H - result = dlopen (filename, RTLD_NOW); -#elif __MINGW32__ - result = (void *) LoadLibrary (filename); -#endif - if (result != NULL) - return gdb_dlhandle_up (result); - -#ifdef HAVE_DLFCN_H - error (_("Could not load %s: %s"), filename, dlerror()); -#else - { - LPVOID buffer; - DWORD dw; - - dw = GetLastError(); - - FormatMessage (FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | - FORMAT_MESSAGE_IGNORE_INSERTS, - NULL, dw, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), - (LPTSTR) &buffer, - 0, NULL); - - error (_("Could not load %s: %s"), filename, (char *) buffer); - } -#endif -} - -void * -gdb_dlsym (const gdb_dlhandle_up &handle, const char *symbol) -{ -#ifdef HAVE_DLFCN_H - return dlsym (handle.get (), symbol); -#elif __MINGW32__ - return (void *) GetProcAddress ((HMODULE) handle.get (), symbol); -#endif -} - -void -dlclose_deleter::operator() (void *handle) const -{ -#ifdef HAVE_DLFCN_H - dlclose (handle); -#elif __MINGW32__ - FreeLibrary ((HMODULE) handle); -#endif -} - -int -is_dl_available (void) -{ - return 1; -} - -#endif /* NO_SHARED_LIB */ diff -Nru gdb-9.1/gdb/gdbsupport/gdb-dlfcn.h gdb-10.2/gdb/gdbsupport/gdb-dlfcn.h --- gdb-9.1/gdb/gdbsupport/gdb-dlfcn.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/gdb-dlfcn.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,51 +0,0 @@ -/* Platform independent shared object routines for GDB. - - Copyright (C) 2011-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef GDB_DLFCN_H -#define GDB_DLFCN_H - -/* A deleter that closes an open dynamic library. */ - -struct dlclose_deleter -{ - void operator() (void *handle) const; -}; - -/* A unique pointer that points to a dynamic library. */ - -typedef std::unique_ptr<void, dlclose_deleter> gdb_dlhandle_up; - -/* Load the dynamic library file named FILENAME, and return a handle - for that dynamic library. Return NULL if the loading fails for any - reason. */ - -gdb_dlhandle_up gdb_dlopen (const char *filename); - -/* Return the address of the symbol named SYMBOL inside the shared - library whose handle is HANDLE. Return NULL when the symbol could - not be found. */ - -void *gdb_dlsym (const gdb_dlhandle_up &handle, const char *symbol); - -/* Return non-zero if the dynamic library functions are available on - this platform. */ - -int is_dl_available(void); - -#endif /* GDB_DLFCN_H */ diff -Nru gdb-9.1/gdb/gdbsupport/gdb_locale.h gdb-10.2/gdb/gdbsupport/gdb_locale.h --- gdb-9.1/gdb/gdbsupport/gdb_locale.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/gdb_locale.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,43 +0,0 @@ -/* GDB-friendly replacement for <locale.h>. - Copyright (C) 2002-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef COMMON_GDB_LOCALE_H -#define COMMON_GDB_LOCALE_H - -#ifdef HAVE_LOCALE_H -# include <locale.h> -#endif - -#ifdef ENABLE_NLS -# include <libintl.h> -# define _(String) gettext (String) -# ifdef gettext_noop -# define N_(String) gettext_noop (String) -# else -# define N_(String) (String) -# endif -#else -# define _(String) (String) -# define N_(String) (String) -#endif - -#ifdef HAVE_LANGINFO_CODESET -#include <langinfo.h> -#endif - -#endif /* COMMON_GDB_LOCALE_H */ diff -Nru gdb-9.1/gdb/gdbsupport/gdb_optional.h gdb-10.2/gdb/gdbsupport/gdb_optional.h --- gdb-9.1/gdb/gdbsupport/gdb_optional.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/gdb_optional.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,219 +0,0 @@ -/* An optional object. - - Copyright (C) 2017-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef COMMON_GDB_OPTIONAL_H -#define COMMON_GDB_OPTIONAL_H - -#include "gdbsupport/traits.h" - -namespace gdb -{ - -struct in_place_t -{ - explicit in_place_t () = default; -}; - -constexpr gdb::in_place_t in_place {}; - -/* This class attempts to be a compatible subset of std::optional, - which is slated to be available in C++17. This class optionally - holds an object of some type -- by default it is constructed not - holding an object, but later the object can be "emplaced". This is - similar to using std::unique_ptr, but in-object allocation is - guaranteed. - - Unlike std::optional, we currently only support copy/move - construction/assignment of an optional<T> from either exactly - optional<T> or T. I.e., we don't support copy/move - construction/assignment from optional<U> or U, when U is a type - convertible to T. Making that work depending on the definitions of - T and U is somewhat complicated, and currently the users of this - class don't need it. */ - -template<typename T> -class optional -{ -public: - - constexpr optional () - : m_dummy () - {} - - template<typename... Args> - constexpr optional (in_place_t, Args &&... args) - : m_item (std::forward<Args> (args)...), - m_instantiated (true) - {} - - ~optional () - { this->reset (); } - - /* Copy and move constructors. */ - - optional (const optional &other) - { - if (other.m_instantiated) - this->emplace (other.get ()); - } - - optional (optional &&other) - noexcept(std::is_nothrow_move_constructible<T> ()) - { - if (other.m_instantiated) - this->emplace (std::move (other.get ())); - } - - constexpr optional (const T &other) - : m_item (other), - m_instantiated (true) - {} - - constexpr optional (T &&other) - noexcept (std::is_nothrow_move_constructible<T> ()) - : m_item (std::move (other)), - m_instantiated (true) - {} - - /* Assignment operators. */ - - optional & - operator= (const optional &other) - { - if (m_instantiated && other.m_instantiated) - this->get () = other.get (); - else - { - if (other.m_instantiated) - this->emplace (other.get ()); - else - this->reset (); - } - - return *this; - } - - optional & - operator= (optional &&other) - noexcept (And<std::is_nothrow_move_constructible<T>, - std::is_nothrow_move_assignable<T>> ()) - { - if (m_instantiated && other.m_instantiated) - this->get () = std::move (other.get ()); - else - { - if (other.m_instantiated) - this->emplace (std::move (other.get ())); - else - this->reset (); - } - return *this; - } - - optional & - operator= (const T &other) - { - if (m_instantiated) - this->get () = other; - else - this->emplace (other); - return *this; - } - - optional & - operator= (T &&other) - noexcept (And<std::is_nothrow_move_constructible<T>, - std::is_nothrow_move_assignable<T>> ()) - { - if (m_instantiated) - this->get () = std::move (other); - else - this->emplace (std::move (other)); - return *this; - } - - template<typename... Args> - T &emplace (Args &&... args) - { - this->reset (); - new (&m_item) T (std::forward<Args>(args)...); - m_instantiated = true; - return this->get (); - } - - /* Observers. */ - constexpr const T *operator-> () const - { return std::addressof (this->get ()); } - - T *operator-> () - { return std::addressof (this->get ()); } - - constexpr const T &operator* () const & - { return this->get (); } - - T &operator* () & - { return this->get (); } - - T &&operator* () && - { return std::move (this->get ()); } - - constexpr const T &&operator* () const && - { return std::move (this->get ()); } - - constexpr explicit operator bool () const noexcept - { return m_instantiated; } - - constexpr bool has_value () const noexcept - { return m_instantiated; } - - /* 'reset' is a 'safe' operation with no precondition. */ - void reset () noexcept - { - if (m_instantiated) - this->destroy (); - } - -private: - - /* Destroy the object. */ - void destroy () - { - gdb_assert (m_instantiated); - m_instantiated = false; - m_item.~T (); - } - - /* The get operations have m_instantiated as a precondition. */ - T &get () noexcept { return m_item; } - constexpr const T &get () const noexcept { return m_item; } - - /* The object. */ - union - { - struct { } m_dummy; - T m_item; - }; - - /* True if the object was ever emplaced. */ - bool m_instantiated = false; -}; - -} - -#endif /* COMMON_GDB_OPTIONAL_H */ diff -Nru gdb-9.1/gdb/gdbsupport/gdb_proc_service.h gdb-10.2/gdb/gdbsupport/gdb_proc_service.h --- gdb-9.1/gdb/gdbsupport/gdb_proc_service.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/gdb_proc_service.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,173 +0,0 @@ -/* <proc_service.h> replacement for systems that don't have it. - Copyright (C) 2000-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef COMMON_GDB_PROC_SERVICE_H -#define COMMON_GDB_PROC_SERVICE_H - -#include <sys/types.h> - -#ifdef HAVE_PROC_SERVICE_H - -/* glibc's proc_service.h doesn't wrap itself with extern "C". Need - to do it ourselves. */ -EXTERN_C_PUSH - -#include <proc_service.h> - -EXTERN_C_POP - -#else /* HAVE_PROC_SERVICE_H */ - -/* The following fallback definitions have been imported and adjusted - from glibc's proc_service.h */ - -/* Callback interface for libthread_db, functions users must define. - Copyright (C) 1999,2002,2003 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -/* The definitions in this file must correspond to those in the debugger. */ - -#ifdef HAVE_SYS_PROCFS_H -#include <sys/procfs.h> -#endif - -/* Not all platforms bring in <linux/elf.h> via <sys/procfs.h>. If - <sys/procfs.h> wasn't enough to find elf_fpregset_t, try the kernel - headers also (but don't if we don't need to). */ -#ifndef HAVE_ELF_FPREGSET_T -# ifdef HAVE_LINUX_ELF_H -# include <linux/elf.h> -# endif -#endif - -EXTERN_C_PUSH - -/* Functions in this interface return one of these status codes. */ -typedef enum -{ - PS_OK, /* Generic "call succeeded". */ - PS_ERR, /* Generic error. */ - PS_BADPID, /* Bad process handle. */ - PS_BADLID, /* Bad LWP identifier. */ - PS_BADADDR, /* Bad address. */ - PS_NOSYM, /* Could not find given symbol. */ - PS_NOFREGS /* FPU register set not available for given LWP. */ -} ps_err_e; - -#ifndef HAVE_LWPID_T -typedef unsigned int lwpid_t; -#endif - -#ifndef HAVE_PSADDR_T -typedef void *psaddr_t; -#endif - -#ifndef HAVE_PRGREGSET_T -typedef elf_gregset_t prgregset_t; -#endif - -#ifndef HAVE_PRFPREGSET_T -typedef elf_fpregset_t prfpregset_t; -#endif - -/* This type is opaque in this interface. It's defined by the user of - libthread_db. GDB's version is defined below. */ -struct ps_prochandle; - - -/* Read or write process memory at the given address. */ -extern ps_err_e ps_pdread (struct ps_prochandle *, - psaddr_t, void *, size_t); -extern ps_err_e ps_pdwrite (struct ps_prochandle *, - psaddr_t, const void *, size_t); -extern ps_err_e ps_ptread (struct ps_prochandle *, - psaddr_t, void *, size_t); -extern ps_err_e ps_ptwrite (struct ps_prochandle *, - psaddr_t, const void *, size_t); - - -/* Get and set the given LWP's general or FPU register set. */ -extern ps_err_e ps_lgetregs (struct ps_prochandle *, - lwpid_t, prgregset_t); -extern ps_err_e ps_lsetregs (struct ps_prochandle *, - lwpid_t, const prgregset_t); -extern ps_err_e ps_lgetfpregs (struct ps_prochandle *, - lwpid_t, prfpregset_t *); -extern ps_err_e ps_lsetfpregs (struct ps_prochandle *, - lwpid_t, const prfpregset_t *); - -/* Return the PID of the process. */ -extern pid_t ps_getpid (struct ps_prochandle *); - -/* Fetch the special per-thread address associated with the given LWP. - This call is only used on a few platforms (most use a normal register). - The meaning of the `int' parameter is machine-dependent. */ -extern ps_err_e ps_get_thread_area (struct ps_prochandle *, - lwpid_t, int, psaddr_t *); - - -/* Look up the named symbol in the named DSO in the symbol tables - associated with the process being debugged, filling in *SYM_ADDR - with the corresponding run-time address. */ -extern ps_err_e ps_pglobal_lookup (struct ps_prochandle *, - const char *object_name, - const char *sym_name, - psaddr_t *sym_addr); - - -/* Stop or continue the entire process. */ -extern ps_err_e ps_pstop (struct ps_prochandle *); -extern ps_err_e ps_pcontinue (struct ps_prochandle *); - -/* Stop or continue the given LWP alone. */ -extern ps_err_e ps_lstop (struct ps_prochandle *, lwpid_t); -extern ps_err_e ps_lcontinue (struct ps_prochandle *, lwpid_t); - -/* The following are only defined in/called by Solaris. */ - -/* Get size of extra register set. */ -extern ps_err_e ps_lgetxregsize (struct ps_prochandle *ph, - lwpid_t lwpid, int *xregsize); -/* Get extra register set. */ -extern ps_err_e ps_lgetxregs (struct ps_prochandle *ph, lwpid_t lwpid, - caddr_t xregset); -extern ps_err_e ps_lsetxregs (struct ps_prochandle *ph, lwpid_t lwpid, - caddr_t xregset); - -/* Log a message (sends to gdb_stderr). */ -extern void ps_plog (const char *fmt, ...); - -EXTERN_C_POP - -#endif /* HAVE_PROC_SERVICE_H */ - -#endif /* COMMON_GDB_PROC_SERVICE_H */ diff -Nru gdb-9.1/gdb/gdbsupport/gdb_ref_ptr.h gdb-10.2/gdb/gdbsupport/gdb_ref_ptr.h --- gdb-9.1/gdb/gdbsupport/gdb_ref_ptr.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/gdb_ref_ptr.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,228 +0,0 @@ -/* Reference-counted smart pointer class - - Copyright (C) 2016-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef COMMON_GDB_REF_PTR_H -#define COMMON_GDB_REF_PTR_H - -#include <cstddef> - -namespace gdb -{ - -/* An instance of this class either holds a reference to a - reference-counted object or is "NULL". Reference counting is - handled externally by a policy class. If the object holds a - reference, then when the object is destroyed, the reference is - decref'd. - - Normally an instance is constructed using a pointer. This sort of - initialization lets this class manage the lifetime of that - reference. - - Assignment and copy construction will make a new reference as - appropriate. Assignment from a plain pointer is disallowed to - avoid confusion about whether this acquires a new reference; - instead use the "reset" method -- which, like the pointer - constructor, transfers ownership. - - The policy class must provide two static methods: - void incref (T *); - void decref (T *); -*/ -template<typename T, typename Policy> -class ref_ptr -{ - public: - - /* Create a new NULL instance. */ - ref_ptr () - : m_obj (NULL) - { - } - - /* Create a new NULL instance. Note that this is not explicit. */ - ref_ptr (const std::nullptr_t) - : m_obj (NULL) - { - } - - /* Create a new instance. OBJ is a reference, management of which - is now transferred to this class. */ - explicit ref_ptr (T *obj) - : m_obj (obj) - { - } - - /* Copy another instance. */ - ref_ptr (const ref_ptr &other) - : m_obj (other.m_obj) - { - if (m_obj != NULL) - Policy::incref (m_obj); - } - - /* Transfer ownership from OTHER. */ - ref_ptr (ref_ptr &&other) - : m_obj (other.m_obj) - { - other.m_obj = NULL; - } - - /* Destroy this instance. */ - ~ref_ptr () - { - if (m_obj != NULL) - Policy::decref (m_obj); - } - - /* Copy another instance. */ - ref_ptr &operator= (const ref_ptr &other) - { - /* Do nothing on self-assignment. */ - if (this != &other) - { - reset (other.m_obj); - if (m_obj != NULL) - Policy::incref (m_obj); - } - return *this; - } - - /* Transfer ownership from OTHER. */ - ref_ptr &operator= (ref_ptr &&other) - { - /* Do nothing on self-assignment. */ - if (this != &other) - { - reset (other.m_obj); - other.m_obj = NULL; - } - return *this; - } - - /* Change this instance's referent. OBJ is a reference, management - of which is now transferred to this class. */ - void reset (T *obj) - { - if (m_obj != NULL) - Policy::decref (m_obj); - m_obj = obj; - } - - /* Return this instance's referent without changing the state of - this class. */ - T *get () const - { - return m_obj; - } - - /* Return this instance's referent, and stop managing this - reference. The caller is now responsible for the ownership of - the reference. */ - ATTRIBUTE_UNUSED_RESULT T *release () - { - T *result = m_obj; - - m_obj = NULL; - return result; - } - - /* Let users refer to members of the underlying pointer. */ - T *operator-> () const - { - return m_obj; - } - - /* Acquire a new reference and return a ref_ptr that owns it. */ - static ref_ptr<T, Policy> new_reference (T *obj) - { - Policy::incref (obj); - return ref_ptr<T, Policy> (obj); - } - - private: - - T *m_obj; -}; - -template<typename T, typename Policy> -inline bool operator== (const ref_ptr<T, Policy> &lhs, - const ref_ptr<T, Policy> &rhs) -{ - return lhs.get () == rhs.get (); -} - -template<typename T, typename Policy> -inline bool operator== (const ref_ptr<T, Policy> &lhs, const T *rhs) -{ - return lhs.get () == rhs; -} - -template<typename T, typename Policy> -inline bool operator== (const ref_ptr<T, Policy> &lhs, const std::nullptr_t) -{ - return lhs.get () == nullptr; -} - -template<typename T, typename Policy> -inline bool operator== (const T *lhs, const ref_ptr<T, Policy> &rhs) -{ - return lhs == rhs.get (); -} - -template<typename T, typename Policy> -inline bool operator== (const std::nullptr_t, const ref_ptr<T, Policy> &rhs) -{ - return nullptr == rhs.get (); -} - -template<typename T, typename Policy> -inline bool operator!= (const ref_ptr<T, Policy> &lhs, - const ref_ptr<T, Policy> &rhs) -{ - return lhs.get () != rhs.get (); -} - -template<typename T, typename Policy> -inline bool operator!= (const ref_ptr<T, Policy> &lhs, const T *rhs) -{ - return lhs.get () != rhs; -} - -template<typename T, typename Policy> -inline bool operator!= (const ref_ptr<T, Policy> &lhs, const std::nullptr_t) -{ - return lhs.get () != nullptr; -} - -template<typename T, typename Policy> -inline bool operator!= (const T *lhs, const ref_ptr<T, Policy> &rhs) -{ - return lhs != rhs.get (); -} - -template<typename T, typename Policy> -inline bool operator!= (const std::nullptr_t, const ref_ptr<T, Policy> &rhs) -{ - return nullptr != rhs.get (); -} - -} - -#endif /* COMMON_GDB_REF_PTR_H */ diff -Nru gdb-9.1/gdb/gdbsupport/gdb_setjmp.h gdb-10.2/gdb/gdbsupport/gdb_setjmp.h --- gdb-9.1/gdb/gdbsupport/gdb_setjmp.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/gdb_setjmp.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,36 +0,0 @@ -/* Portability wrappers for setjmp and longjmp. - Copyright (C) 1986-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef COMMON_GDB_SETJMP_H -#define COMMON_GDB_SETJMP_H - -#include <setjmp.h> - -#ifdef HAVE_SIGSETJMP -#define SIGJMP_BUF sigjmp_buf -#define SIGSETJMP(buf,val) sigsetjmp((buf), val) -#define SIGLONGJMP(buf,val) siglongjmp((buf), (val)) -#else -#define SIGJMP_BUF jmp_buf -/* We ignore val here because that's safer and avoids having to check - whether _setjmp exists. */ -#define SIGSETJMP(buf,val) setjmp(buf) -#define SIGLONGJMP(buf,val) longjmp((buf), (val)) -#endif - -#endif /* COMMON_GDB_SETJMP_H */ diff -Nru gdb-9.1/gdb/gdbsupport/gdb-sigmask.h gdb-10.2/gdb/gdbsupport/gdb-sigmask.h --- gdb-9.1/gdb/gdbsupport/gdb-sigmask.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/gdb-sigmask.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,45 +0,0 @@ -/* sigprocmask wrapper for gdb - - Copyright (C) 2019-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef GDBSUPPORT_GDB_SIGMASK_H -#define GDBSUPPORT_GDB_SIGMASK_H - -#include <signal.h> - -#ifdef HAVE_SIGPROCMASK - -#ifdef HAVE_PTHREAD_SIGMASK -#define gdb_sigmask pthread_sigmask -#else -#define gdb_sigmask sigprocmask -#endif - -#else /* HAVE_SIGPROCMASK */ - -/* Other code checks HAVE_SIGPROCMASK, but if there happened to be a - system that only had pthread_sigmask, we could still use it with - some extra changes. */ -#ifdef HAVE_PTHREAD_SIGMASK -#error pthead_sigmask available without sigprocmask - please report -#endif - -#endif /* HAVE_SIGPROCMASK */ - - -#endif /* GDBSUPPORT_GDB_SIGMASK_H */ diff -Nru gdb-9.1/gdb/gdbsupport/gdb_signals.h gdb-10.2/gdb/gdbsupport/gdb_signals.h --- gdb-9.1/gdb/gdbsupport/gdb_signals.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/gdb_signals.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,58 +0,0 @@ -/* Target signal translation functions for GDB. - Copyright (C) 1990-2020 Free Software Foundation, Inc. - Contributed by Cygnus Support. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef COMMON_GDB_SIGNALS_H -#define COMMON_GDB_SIGNALS_H - -#include "gdb/signals.h" - -/* Predicate to gdb_signal_to_host(). Return non-zero if the enum - targ_signal SIGNO has an equivalent ``host'' representation. */ -/* FIXME: cagney/1999-11-22: The name below was chosen in preference - to the shorter gdb_signal_p() because it is far less ambigious. - In this context ``gdb_signal'' refers to GDB's internal - representation of the target's set of signals while ``host signal'' - refers to the target operating system's signal. Confused? */ -extern int gdb_signal_to_host_p (enum gdb_signal signo); - -/* Convert between host signal numbers and enum gdb_signal's. - gdb_signal_to_host() returns 0 and prints a warning() on GDB's - console if SIGNO has no equivalent host representation. */ -/* FIXME: cagney/1999-11-22: Here ``host'' is used incorrectly, it is - refering to the target operating system's signal numbering. - Similarly, ``enum gdb_signal'' is named incorrectly, ``enum - gdb_signal'' would probably be better as it is refering to GDB's - internal representation of a target operating system's signal. */ -extern enum gdb_signal gdb_signal_from_host (int); -extern int gdb_signal_to_host (enum gdb_signal); - -/* Return the enum symbol name of SIG as a string, to use in debug - output. */ -extern const char *gdb_signal_to_symbol_string (enum gdb_signal sig); - -/* Return the string for a signal. */ -extern const char *gdb_signal_to_string (enum gdb_signal); - -/* Return the name (SIGHUP, etc.) for a signal. */ -extern const char *gdb_signal_to_name (enum gdb_signal); - -/* Given a name (SIGHUP, etc.), return its signal. */ -enum gdb_signal gdb_signal_from_name (const char *); - -#endif /* COMMON_GDB_SIGNALS_H */ diff -Nru gdb-9.1/gdb/gdbsupport/gdb_splay_tree.h gdb-10.2/gdb/gdbsupport/gdb_splay_tree.h --- gdb-9.1/gdb/gdbsupport/gdb_splay_tree.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/gdb_splay_tree.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,42 +0,0 @@ -/* GDB wrapper for splay trees. - - Copyright (C) 2017-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef COMMON_GDB_SPLAY_TREE_H -#define COMMON_GDB_SPLAY_TREE_H - -#include "splay-tree.h" - -namespace gdb { - -struct splay_tree_deleter -{ - void operator() (splay_tree tree) const - { - splay_tree_delete (tree); - } -}; - -} /* namespace gdb */ - -/* A unique pointer to a splay tree. */ - -typedef std::unique_ptr<splay_tree_s, gdb::splay_tree_deleter> - gdb_splay_tree_up; - -#endif /* COMMON_GDB_SPLAY_TREE_H */ diff -Nru gdb-9.1/gdb/gdbsupport/gdb_string_view.h gdb-10.2/gdb/gdbsupport/gdb_string_view.h --- gdb-9.1/gdb/gdbsupport/gdb_string_view.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/gdb_string_view.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,563 +0,0 @@ -// Components for manipulating non-owning sequences of characters -*- C++ -*- - - -#ifndef COMMON_GDB_STRING_VIEW_H -#define COMMON_GDB_STRING_VIEW_H - -// Note: This file has been stolen from the gcc repo -// (libstdc++-v3/include/experimental/string_view) and has local modifications. - -// Copyright (C) 2013-2020 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. 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 the -// Free Software Foundation; either version 3, or (at your option) -// any later version. - -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// Under Section 7 of GPL version 3, you are granted additional -// permissions described in the GCC Runtime Library Exception, version -// 3.1, as published by the Free Software Foundation. - -// You should have received a copy of the GNU General Public License and -// a copy of the GCC Runtime Library Exception along with this program; -// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -// <http://www.gnu.org/licenses/>. - -// -// N3762 basic_string_view library -// - - -#if __cplusplus >= 201703L - -#include <string_view> - -namespace gdb { - using string_view = std::string_view; -} /* namespace gdb */ - -#else /* __cplusplus < 201703L */ - -#include <string> -#include <limits> -#include "gdb_assert.h" - -namespace gdb { - - /** - * @class basic_string_view <experimental/string_view> - * @brief A non-owning reference to a string. - * - * @ingroup strings - * @ingroup sequences - * @ingroup experimental - * - * @tparam _CharT Type of character - * @tparam _Traits Traits for character type, defaults to - * char_traits<_CharT>. - * - * A basic_string_view looks like this: - * - * @code - * _CharT* _M_str - * size_t _M_len - * @endcode - */ - template<typename _CharT, typename _Traits = std::char_traits<_CharT>> - class basic_string_view - { - public: - - // types - using traits_type = _Traits; - using value_type = _CharT; - using pointer = const _CharT*; - using const_pointer = const _CharT*; - using reference = const _CharT&; - using const_reference = const _CharT&; - using const_iterator = const _CharT*; - using iterator = const_iterator; - using const_reverse_iterator = std::reverse_iterator<const_iterator>; - using reverse_iterator = const_reverse_iterator; - using size_type = size_t; - using difference_type = ptrdiff_t; - static constexpr size_type npos = size_type(-1); - - // [string.view.cons], construct/copy - - constexpr - basic_string_view() noexcept - : _M_len{0}, _M_str{nullptr} - { } - - constexpr basic_string_view(const basic_string_view&) noexcept = default; - - template<typename _Allocator> - basic_string_view(const std::basic_string<_CharT, _Traits, - _Allocator>& __str) noexcept - : _M_len{__str.length()}, _M_str{__str.data()} - { } - - /*constexpr*/ basic_string_view(const _CharT* __str) - : _M_len{__str == nullptr ? 0 : traits_type::length(__str)}, - _M_str{__str} - { } - - constexpr basic_string_view(const _CharT* __str, size_type __len) - : _M_len{__len}, - _M_str{__str} - { } - - basic_string_view& - operator=(const basic_string_view&) noexcept = default; - - // [string.view.iterators], iterators - - constexpr const_iterator - begin() const noexcept - { return this->_M_str; } - - constexpr const_iterator - end() const noexcept - { return this->_M_str + this->_M_len; } - - constexpr const_iterator - cbegin() const noexcept - { return this->_M_str; } - - constexpr const_iterator - cend() const noexcept - { return this->_M_str + this->_M_len; } - - const_reverse_iterator - rbegin() const noexcept - { return const_reverse_iterator(this->end()); } - - const_reverse_iterator - rend() const noexcept - { return const_reverse_iterator(this->begin()); } - - const_reverse_iterator - crbegin() const noexcept - { return const_reverse_iterator(this->end()); } - - const_reverse_iterator - crend() const noexcept - { return const_reverse_iterator(this->begin()); } - - // [string.view.capacity], capacity - - constexpr size_type - size() const noexcept - { return this->_M_len; } - - constexpr size_type - length() const noexcept - { return _M_len; } - - constexpr size_type - max_size() const noexcept - { - return (npos - sizeof(size_type) - sizeof(void*)) - / sizeof(value_type) / 4; - } - - constexpr bool - empty() const noexcept - { return this->_M_len == 0; } - - // [string.view.access], element access - - constexpr const _CharT& - operator[](size_type __pos) const - { - // TODO: Assert to restore in a way compatible with the constexpr. - // __glibcxx_assert(__pos < this->_M_len); - return *(this->_M_str + __pos); - } - - constexpr const _CharT& - at(size_type __pos) const - { - return __pos < this->_M_len - ? *(this->_M_str + __pos) - : (error (_("basic_string_view::at: __pos " - "(which is %zu) >= this->size() " - "(which is %zu)"), - __pos, this->size()), - *this->_M_str); - } - - constexpr const _CharT& - front() const - { - // TODO: Assert to restore in a way compatible with the constexpr. - // __glibcxx_assert(this->_M_len > 0); - return *this->_M_str; - } - - constexpr const _CharT& - back() const - { - // TODO: Assert to restore in a way compatible with the constexpr. - // __glibcxx_assert(this->_M_len > 0); - return *(this->_M_str + this->_M_len - 1); - } - - constexpr const _CharT* - data() const noexcept - { return this->_M_str; } - - // [string.view.modifiers], modifiers: - - /*constexpr*/ void - remove_prefix(size_type __n) - { - gdb_assert (this->_M_len >= __n); - this->_M_str += __n; - this->_M_len -= __n; - } - - /*constexpr*/ void - remove_suffix(size_type __n) - { this->_M_len -= __n; } - - /*constexpr*/ void - swap(basic_string_view& __sv) noexcept - { - auto __tmp = *this; - *this = __sv; - __sv = __tmp; - } - - - // [string.view.ops], string operations: - - template<typename _Allocator> - explicit operator std::basic_string<_CharT, _Traits, _Allocator>() const - { - return { this->_M_str, this->_M_len }; - } - - template<typename _Allocator = std::allocator<_CharT>> - std::basic_string<_CharT, _Traits, _Allocator> - to_string(const _Allocator& __alloc = _Allocator()) const - { - return { this->_M_str, this->_M_len, __alloc }; - } - - size_type - copy(_CharT* __str, size_type __n, size_type __pos = 0) const - { - gdb_assert (__str != nullptr || __n == 0); - if (__pos > this->_M_len) - error (_("basic_string_view::copy: __pos " - "(which is %zu) > this->size() " - "(which is %zu)"), - __pos, this->size()); - size_type __rlen{std::min(__n, size_type{this->_M_len - __pos})}; - for (auto __begin = this->_M_str + __pos, - __end = __begin + __rlen; __begin != __end;) - *__str++ = *__begin++; - return __rlen; - } - - - // [string.view.ops], string operations: - - /*constexpr*/ basic_string_view - substr(size_type __pos, size_type __n=npos) const - { - return __pos <= this->_M_len - ? basic_string_view{this->_M_str + __pos, - std::min(__n, size_type{this->_M_len - __pos})} - : (error (_("basic_string_view::substr: __pos " - "(which is %zu) > this->size() " - "(which is %zu)"), - __pos, this->size()), basic_string_view{}); - } - - /*constexpr*/ int - compare(basic_string_view __str) const noexcept - { - int __ret = traits_type::compare(this->_M_str, __str._M_str, - std::min(this->_M_len, __str._M_len)); - if (__ret == 0) - __ret = _S_compare(this->_M_len, __str._M_len); - return __ret; - } - - /*constexpr*/ int - compare(size_type __pos1, size_type __n1, basic_string_view __str) const - { return this->substr(__pos1, __n1).compare(__str); } - - /*constexpr*/ int - compare(size_type __pos1, size_type __n1, - basic_string_view __str, size_type __pos2, size_type __n2) const - { return this->substr(__pos1, __n1).compare(__str.substr(__pos2, __n2)); } - - /*constexpr*/ int - compare(const _CharT* __str) const noexcept - { return this->compare(basic_string_view{__str}); } - - /*constexpr*/ int - compare(size_type __pos1, size_type __n1, const _CharT* __str) const - { return this->substr(__pos1, __n1).compare(basic_string_view{__str}); } - - /*constexpr*/ int - compare(size_type __pos1, size_type __n1, - const _CharT* __str, size_type __n2) const - { - return this->substr(__pos1, __n1) - .compare(basic_string_view(__str, __n2)); - } - - /*constexpr*/ size_type - find(basic_string_view __str, size_type __pos = 0) const noexcept - { return this->find(__str._M_str, __pos, __str._M_len); } - - /*constexpr*/ size_type - find(_CharT __c, size_type __pos=0) const noexcept; - - /*constexpr*/ size_type - find(const _CharT* __str, size_type __pos, size_type __n) const noexcept; - - /*constexpr*/ size_type - find(const _CharT* __str, size_type __pos=0) const noexcept - { return this->find(__str, __pos, traits_type::length(__str)); } - - /*constexpr*/ size_type - rfind(basic_string_view __str, size_type __pos = npos) const noexcept - { return this->rfind(__str._M_str, __pos, __str._M_len); } - - /*constexpr*/ size_type - rfind(_CharT __c, size_type __pos = npos) const noexcept; - - /*constexpr*/ size_type - rfind(const _CharT* __str, size_type __pos, size_type __n) const noexcept; - - /*constexpr*/ size_type - rfind(const _CharT* __str, size_type __pos = npos) const noexcept - { return this->rfind(__str, __pos, traits_type::length(__str)); } - - /*constexpr*/ size_type - find_first_of(basic_string_view __str, size_type __pos = 0) const noexcept - { return this->find_first_of(__str._M_str, __pos, __str._M_len); } - - /*constexpr*/ size_type - find_first_of(_CharT __c, size_type __pos = 0) const noexcept - { return this->find(__c, __pos); } - - /*constexpr*/ size_type - find_first_of(const _CharT* __str, size_type __pos, size_type __n) const; - - /*constexpr*/ size_type - find_first_of(const _CharT* __str, size_type __pos = 0) const noexcept - { return this->find_first_of(__str, __pos, traits_type::length(__str)); } - - /*constexpr*/ size_type - find_last_of(basic_string_view __str, - size_type __pos = npos) const noexcept - { return this->find_last_of(__str._M_str, __pos, __str._M_len); } - - size_type - find_last_of(_CharT __c, size_type __pos=npos) const noexcept - { return this->rfind(__c, __pos); } - - /*constexpr*/ size_type - find_last_of(const _CharT* __str, size_type __pos, size_type __n) const; - - /*constexpr*/ size_type - find_last_of(const _CharT* __str, size_type __pos = npos) const noexcept - { return this->find_last_of(__str, __pos, traits_type::length(__str)); } - - /*constexpr*/ size_type - find_first_not_of(basic_string_view __str, - size_type __pos = 0) const noexcept - { return this->find_first_not_of(__str._M_str, __pos, __str._M_len); } - - /*constexpr*/ size_type - find_first_not_of(_CharT __c, size_type __pos = 0) const noexcept; - - /*constexpr*/ size_type - find_first_not_of(const _CharT* __str, - size_type __pos, size_type __n) const; - - /*constexpr*/ size_type - find_first_not_of(const _CharT* __str, size_type __pos = 0) const noexcept - { - return this->find_first_not_of(__str, __pos, - traits_type::length(__str)); - } - - /*constexpr*/ size_type - find_last_not_of(basic_string_view __str, - size_type __pos = npos) const noexcept - { return this->find_last_not_of(__str._M_str, __pos, __str._M_len); } - - /*constexpr*/ size_type - find_last_not_of(_CharT __c, size_type __pos = npos) const noexcept; - - /*constexpr*/ size_type - find_last_not_of(const _CharT* __str, - size_type __pos, size_type __n) const; - - /*constexpr*/ size_type - find_last_not_of(const _CharT* __str, - size_type __pos = npos) const noexcept - { - return this->find_last_not_of(__str, __pos, - traits_type::length(__str)); - } - - private: - - static constexpr int - _S_compare(size_type __n1, size_type __n2) noexcept - { - return difference_type(__n1 - __n2) > std::numeric_limits<int>::max() - ? std::numeric_limits<int>::max() - : difference_type(__n1 - __n2) < std::numeric_limits<int>::min() - ? std::numeric_limits<int>::min() - : static_cast<int>(difference_type(__n1 - __n2)); - } - - size_t _M_len; - const _CharT* _M_str; - }; - - // [string.view.comparison], non-member basic_string_view comparison functions - - namespace __detail - { - // Identity transform to create a non-deduced context, so that only one - // argument participates in template argument deduction and the other - // argument gets implicitly converted to the deduced type. See n3766.html. - template<typename _Tp> - using __idt = typename std::common_type<_Tp>::type; - } - - template<typename _CharT, typename _Traits> - /*constexpr*/ bool - operator==(basic_string_view<_CharT, _Traits> __x, - basic_string_view<_CharT, _Traits> __y) noexcept - { return __x.size() == __y.size() && __x.compare(__y) == 0; } - - template<typename _CharT, typename _Traits> - /*constexpr*/ bool - operator==(basic_string_view<_CharT, _Traits> __x, - __detail::__idt<basic_string_view<_CharT, _Traits>> __y) noexcept - { return __x.size() == __y.size() && __x.compare(__y) == 0; } - - template<typename _CharT, typename _Traits> - /*constexpr*/ bool - operator==(__detail::__idt<basic_string_view<_CharT, _Traits>> __x, - basic_string_view<_CharT, _Traits> __y) noexcept - { return __x.size() == __y.size() && __x.compare(__y) == 0; } - - template<typename _CharT, typename _Traits> - /*constexpr*/ bool - operator!=(basic_string_view<_CharT, _Traits> __x, - basic_string_view<_CharT, _Traits> __y) noexcept - { return !(__x == __y); } - - template<typename _CharT, typename _Traits> - /*constexpr*/ bool - operator!=(basic_string_view<_CharT, _Traits> __x, - __detail::__idt<basic_string_view<_CharT, _Traits>> __y) noexcept - { return !(__x == __y); } - - template<typename _CharT, typename _Traits> - /*constexpr*/ bool - operator!=(__detail::__idt<basic_string_view<_CharT, _Traits>> __x, - basic_string_view<_CharT, _Traits> __y) noexcept - { return !(__x == __y); } - - template<typename _CharT, typename _Traits> - /*constexpr*/ bool - operator< (basic_string_view<_CharT, _Traits> __x, - basic_string_view<_CharT, _Traits> __y) noexcept - { return __x.compare(__y) < 0; } - - template<typename _CharT, typename _Traits> - /*constexpr*/ bool - operator< (basic_string_view<_CharT, _Traits> __x, - __detail::__idt<basic_string_view<_CharT, _Traits>> __y) noexcept - { return __x.compare(__y) < 0; } - - template<typename _CharT, typename _Traits> - /*constexpr*/ bool - operator< (__detail::__idt<basic_string_view<_CharT, _Traits>> __x, - basic_string_view<_CharT, _Traits> __y) noexcept - { return __x.compare(__y) < 0; } - - template<typename _CharT, typename _Traits> - /*constexpr*/ bool - operator> (basic_string_view<_CharT, _Traits> __x, - basic_string_view<_CharT, _Traits> __y) noexcept - { return __x.compare(__y) > 0; } - - template<typename _CharT, typename _Traits> - /*constexpr*/ bool - operator> (basic_string_view<_CharT, _Traits> __x, - __detail::__idt<basic_string_view<_CharT, _Traits>> __y) noexcept - { return __x.compare(__y) > 0; } - - template<typename _CharT, typename _Traits> - /*constexpr*/ bool - operator> (__detail::__idt<basic_string_view<_CharT, _Traits>> __x, - basic_string_view<_CharT, _Traits> __y) noexcept - { return __x.compare(__y) > 0; } - - template<typename _CharT, typename _Traits> - /*constexpr*/ bool - operator<=(basic_string_view<_CharT, _Traits> __x, - basic_string_view<_CharT, _Traits> __y) noexcept - { return __x.compare(__y) <= 0; } - - template<typename _CharT, typename _Traits> - /*constexpr*/ bool - operator<=(basic_string_view<_CharT, _Traits> __x, - __detail::__idt<basic_string_view<_CharT, _Traits>> __y) noexcept - { return __x.compare(__y) <= 0; } - - template<typename _CharT, typename _Traits> - /*constexpr*/ bool - operator<=(__detail::__idt<basic_string_view<_CharT, _Traits>> __x, - basic_string_view<_CharT, _Traits> __y) noexcept - { return __x.compare(__y) <= 0; } - - template<typename _CharT, typename _Traits> - /*constexpr*/ bool - operator>=(basic_string_view<_CharT, _Traits> __x, - basic_string_view<_CharT, _Traits> __y) noexcept - { return __x.compare(__y) >= 0; } - - template<typename _CharT, typename _Traits> - /*constexpr*/ bool - operator>=(basic_string_view<_CharT, _Traits> __x, - __detail::__idt<basic_string_view<_CharT, _Traits>> __y) noexcept - { return __x.compare(__y) >= 0; } - - template<typename _CharT, typename _Traits> - /*constexpr*/ bool - operator>=(__detail::__idt<basic_string_view<_CharT, _Traits>> __x, - basic_string_view<_CharT, _Traits> __y) noexcept - { return __x.compare(__y) >= 0; } - - // basic_string_view typedef names - - using string_view = basic_string_view<char>; -} /* namespace gdb */ - -#include "gdb_string_view.tcc" - -#endif // __cplusplus < 201703L - -#endif /* COMMON_GDB_STRING_VIEW_H */ diff -Nru gdb-9.1/gdb/gdbsupport/gdb_string_view.tcc gdb-10.2/gdb/gdbsupport/gdb_string_view.tcc --- gdb-9.1/gdb/gdbsupport/gdb_string_view.tcc 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/gdb_string_view.tcc 1970-01-01 00:00:00.000000000 +0000 @@ -1,219 +0,0 @@ -// Components for manipulating non-owning sequences of characters -*- C++ -*- - -// Note: This file has been stolen from the gcc repo -// (libstdc++-v3/include/experimental/bits/string_view.tcc) and has local -// modifications. - -// Copyright (C) 2013-2020 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. 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 the -// Free Software Foundation; either version 3, or (at your option) -// any later version. - -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// Under Section 7 of GPL version 3, you are granted additional -// permissions described in the GCC Runtime Library Exception, version -// 3.1, as published by the Free Software Foundation. - -// You should have received a copy of the GNU General Public License and -// a copy of the GCC Runtime Library Exception along with this program; -// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -// <http://www.gnu.org/licenses/>. - -/** @file experimental/bits/string_view.tcc - * This is an internal header file, included by other library headers. - * Do not attempt to use it directly. @headername{experimental/string_view} - */ - -// -// N3762 basic_string_view library -// - -#ifndef GDB_STRING_VIEW_TCC -#define GDB_STRING_VIEW_TCC 1 - -namespace gdb -{ - template<typename _CharT, typename _Traits> - /*constexpr*/ typename basic_string_view<_CharT, _Traits>::size_type - basic_string_view<_CharT, _Traits>:: - find(const _CharT* __str, size_type __pos, size_type __n) const noexcept - { - gdb_assert (__str != nullptr || __n == 0); - - if (__n == 0) - return __pos <= this->_M_len ? __pos : npos; - - if (__n <= this->_M_len) - { - for (; __pos <= this->_M_len - __n; ++__pos) - if (traits_type::eq(this->_M_str[__pos], __str[0]) - && traits_type::compare(this->_M_str + __pos + 1, - __str + 1, __n - 1) == 0) - return __pos; - } - return npos; - } - - template<typename _CharT, typename _Traits> - /*constexpr*/ typename basic_string_view<_CharT, _Traits>::size_type - basic_string_view<_CharT, _Traits>:: - find(_CharT __c, size_type __pos) const noexcept - { - size_type __ret = npos; - if (__pos < this->_M_len) - { - const size_type __n = this->_M_len - __pos; - const _CharT* __p = traits_type::find(this->_M_str + __pos, __n, __c); - if (__p) - __ret = __p - this->_M_str; - } - return __ret; - } - - template<typename _CharT, typename _Traits> - /*constexpr*/ typename basic_string_view<_CharT, _Traits>::size_type - basic_string_view<_CharT, _Traits>:: - rfind(const _CharT* __str, size_type __pos, size_type __n) const noexcept - { - gdb_assert (__str != nullptr || __n == 0); - - if (__n <= this->_M_len) - { - __pos = std::min(size_type(this->_M_len - __n), __pos); - do - { - if (traits_type::compare(this->_M_str + __pos, __str, __n) == 0) - return __pos; - } - while (__pos-- > 0); - } - return npos; - } - - template<typename _CharT, typename _Traits> - /*constexpr*/ typename basic_string_view<_CharT, _Traits>::size_type - basic_string_view<_CharT, _Traits>:: - rfind(_CharT __c, size_type __pos) const noexcept - { - size_type __size = this->_M_len; - if (__size > 0) - { - if (--__size > __pos) - __size = __pos; - for (++__size; __size-- > 0; ) - if (traits_type::eq(this->_M_str[__size], __c)) - return __size; - } - return npos; - } - - template<typename _CharT, typename _Traits> - /*constexpr*/ typename basic_string_view<_CharT, _Traits>::size_type - basic_string_view<_CharT, _Traits>:: - find_first_of(const _CharT* __str, size_type __pos, size_type __n) const - { - gdb_assert (__str != nullptr || __n == 0); - for (; __n && __pos < this->_M_len; ++__pos) - { - const _CharT* __p = traits_type::find(__str, __n, - this->_M_str[__pos]); - if (__p) - return __pos; - } - return npos; - } - - template<typename _CharT, typename _Traits> - /*constexpr*/ typename basic_string_view<_CharT, _Traits>::size_type - basic_string_view<_CharT, _Traits>:: - find_last_of(const _CharT* __str, size_type __pos, size_type __n) const - { - gdb_assert (__str != nullptr || __n == 0); - size_type __size = this->size(); - if (__size && __n) - { - if (--__size > __pos) - __size = __pos; - do - { - if (traits_type::find(__str, __n, this->_M_str[__size])) - return __size; - } - while (__size-- != 0); - } - return npos; - } - - template<typename _CharT, typename _Traits> - /*constexpr*/ typename basic_string_view<_CharT, _Traits>::size_type - basic_string_view<_CharT, _Traits>:: - find_first_not_of(const _CharT* __str, size_type __pos, size_type __n) const - { - gdb_assert (__str != nullptr || __n == 0); - for (; __pos < this->_M_len; ++__pos) - if (!traits_type::find(__str, __n, this->_M_str[__pos])) - return __pos; - return npos; - } - - template<typename _CharT, typename _Traits> - /*constexpr*/ typename basic_string_view<_CharT, _Traits>::size_type - basic_string_view<_CharT, _Traits>:: - find_first_not_of(_CharT __c, size_type __pos) const noexcept - { - for (; __pos < this->_M_len; ++__pos) - if (!traits_type::eq(this->_M_str[__pos], __c)) - return __pos; - return npos; - } - - template<typename _CharT, typename _Traits> - /*constexpr*/ typename basic_string_view<_CharT, _Traits>::size_type - basic_string_view<_CharT, _Traits>:: - find_last_not_of(const _CharT* __str, size_type __pos, size_type __n) const - { - gdb_assert (__str != nullptr || __n == 0); - size_type __size = this->_M_len; - if (__size) - { - if (--__size > __pos) - __size = __pos; - do - { - if (!traits_type::find(__str, __n, this->_M_str[__size])) - return __size; - } - while (__size--); - } - return npos; - } - - template<typename _CharT, typename _Traits> - /*constexpr*/ typename basic_string_view<_CharT, _Traits>::size_type - basic_string_view<_CharT, _Traits>:: - find_last_not_of(_CharT __c, size_type __pos) const noexcept - { - size_type __size = this->_M_len; - if (__size) - { - if (--__size > __pos) - __size = __pos; - do - { - if (!traits_type::eq(this->_M_str[__size], __c)) - return __size; - } - while (__size--); - } - return npos; - } -} // namespace gdb - -#endif // GDB_STRING_VIEW_TCC diff -Nru gdb-9.1/gdb/gdbsupport/gdb_sys_time.h gdb-10.2/gdb/gdbsupport/gdb_sys_time.h --- gdb-9.1/gdb/gdbsupport/gdb_sys_time.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/gdb_sys_time.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,38 +0,0 @@ -/* Copyright (C) 2015-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef COMMON_GDB_SYS_TIME_H -#define COMMON_GDB_SYS_TIME_H - -#include <sys/time.h> - -/* On MinGW-w64, gnulib's sys/time.h replaces 'struct timeval' and - gettimeofday with versions that support 64-bit time_t, for POSIX - compliance. However, the gettimeofday replacement does not ever - return time_t values larger than 31-bit, as it simply returns the - system's gettimeofday's (signed) 32-bit result as (signed) 64-bit. - Because we don't really need the POSIX compliance, and it ends up - causing conflicts with other libraries we use that don't use gnulib - and thus work with the native struct timeval, such as Winsock2's - native 'select' and libiberty, simply undefine away gnulib's - replacements. */ -#if GNULIB_defined_struct_timeval -# undef timeval -# undef gettimeofday -#endif - -#endif /* COMMON_GDB_SYS_TIME_H */ diff -Nru gdb-9.1/gdb/gdbsupport/gdb_tilde_expand.c gdb-10.2/gdb/gdbsupport/gdb_tilde_expand.c --- gdb-9.1/gdb/gdbsupport/gdb_tilde_expand.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/gdb_tilde_expand.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,95 +0,0 @@ -/* Perform tilde expansion on paths for GDB and gdbserver. - - Copyright (C) 2017-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "common-defs.h" -#include "gdb_tilde_expand.h" -#include <glob.h> - -/* RAII-style class wrapping "glob". */ - -class gdb_glob -{ -public: - /* Construct a "gdb_glob" object by calling "glob" with the provided - parameters. This function can throw if "glob" fails. */ - gdb_glob (const char *pattern, int flags, - int (*errfunc) (const char *epath, int eerrno)) - { - int ret = glob (pattern, flags, errfunc, &m_glob); - - if (ret != 0) - { - if (ret == GLOB_NOMATCH) - error (_("Could not find a match for '%s'."), pattern); - else - error (_("glob could not process pattern '%s'."), - pattern); - } - } - - /* Destroy the object and free M_GLOB. */ - ~gdb_glob () - { - globfree (&m_glob); - } - - /* Return the GL_PATHC component of M_GLOB. */ - int pathc () const - { - return m_glob.gl_pathc; - } - - /* Return the GL_PATHV component of M_GLOB. */ - char **pathv () const - { - return m_glob.gl_pathv; - } - -private: - /* The actual glob object we're dealing with. */ - glob_t m_glob; -}; - -/* See gdbsupport/gdb_tilde_expand.h. */ - -std::string -gdb_tilde_expand (const char *dir) -{ - gdb_glob glob (dir, GLOB_TILDE_CHECK, NULL); - - gdb_assert (glob.pathc () > 0); - /* "glob" may return more than one match to the path provided by the - user, but we are only interested in the first match. */ - std::string expanded_dir = glob.pathv ()[0]; - - return expanded_dir; -} - -/* See gdbsupport/gdb_tilde_expand.h. */ - -gdb::unique_xmalloc_ptr<char> -gdb_tilde_expand_up (const char *dir) -{ - gdb_glob glob (dir, GLOB_TILDE_CHECK, NULL); - - gdb_assert (glob.pathc () > 0); - /* "glob" may return more than one match to the path provided by the - user, but we are only interested in the first match. */ - return make_unique_xstrdup (glob.pathv ()[0]); -} diff -Nru gdb-9.1/gdb/gdbsupport/gdb_tilde_expand.h gdb-10.2/gdb/gdbsupport/gdb_tilde_expand.h --- gdb-9.1/gdb/gdbsupport/gdb_tilde_expand.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/gdb_tilde_expand.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,31 +0,0 @@ -/* Perform tilde expansion on paths for GDB and gdbserver. - - Copyright (C) 2017-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef COMMON_GDB_TILDE_EXPAND_H -#define COMMON_GDB_TILDE_EXPAND_H - -/* Perform path expansion (i.e., tilde expansion) on DIR, and return - the full path. */ -extern std::string gdb_tilde_expand (const char *dir); - -/* Same as GDB_TILDE_EXPAND, but return the full path as a - gdb::unique_xmalloc_ptr<char>. */ -extern gdb::unique_xmalloc_ptr<char> gdb_tilde_expand_up (const char *dir); - -#endif /* COMMON_GDB_TILDE_EXPAND_H */ diff -Nru gdb-9.1/gdb/gdbsupport/gdb_unique_ptr.h gdb-10.2/gdb/gdbsupport/gdb_unique_ptr.h --- gdb-9.1/gdb/gdbsupport/gdb_unique_ptr.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/gdb_unique_ptr.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,67 +0,0 @@ -/* std::unique_ptr specializations for GDB. - - Copyright (C) 2016-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef COMMON_GDB_UNIQUE_PTR_H -#define COMMON_GDB_UNIQUE_PTR_H - -#include <memory> - -namespace gdb -{ -/* Define gdb::unique_xmalloc_ptr, a std::unique_ptr that manages - xmalloc'ed memory. */ - -/* The deleter for std::unique_xmalloc_ptr. Uses xfree. */ -template <typename T> -struct xfree_deleter -{ - void operator() (T *ptr) const { xfree (ptr); } -}; - -/* Same, for arrays. */ -template <typename T> -struct xfree_deleter<T[]> -{ - void operator() (T *ptr) const { xfree (ptr); } -}; - -/* Import the standard unique_ptr to our namespace with a custom - deleter. */ - -template<typename T> using unique_xmalloc_ptr - = std::unique_ptr<T, xfree_deleter<T>>; - -/* A no-op deleter. */ -template<typename T> -struct noop_deleter -{ - void operator() (T *ptr) const { } -}; - -} /* namespace gdb */ - -/* Dup STR and return a unique_xmalloc_ptr for the result. */ - -static inline gdb::unique_xmalloc_ptr<char> -make_unique_xstrdup (const char *str) -{ - return gdb::unique_xmalloc_ptr<char> (xstrdup (str)); -} - -#endif /* COMMON_GDB_UNIQUE_PTR_H */ diff -Nru gdb-9.1/gdb/gdbsupport/gdb_unlinker.h gdb-10.2/gdb/gdbsupport/gdb_unlinker.h --- gdb-9.1/gdb/gdbsupport/gdb_unlinker.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/gdb_unlinker.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,60 +0,0 @@ -/* Unlinking class - - Copyright (C) 2016-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef COMMON_GDB_UNLINKER_H -#define COMMON_GDB_UNLINKER_H - -namespace gdb -{ - -/* An object of this class holds a filename and, when the object goes - of scope, the file is removed using unlink. - - A user of this class can request that the file be preserved using - the "keep" method. */ -class unlinker -{ - public: - - unlinker (const char *filename) ATTRIBUTE_NONNULL (2) - : m_filename (filename) - { - gdb_assert (filename != NULL); - } - - ~unlinker () - { - if (m_filename != NULL) - unlink (m_filename); - } - - /* Keep the file, rather than unlink it. */ - void keep () - { - m_filename = NULL; - } - - private: - - const char *m_filename; -}; - -} - -#endif /* COMMON_GDB_UNLINKER_H */ diff -Nru gdb-9.1/gdb/gdbsupport/gdb_vecs.c gdb-10.2/gdb/gdbsupport/gdb_vecs.c --- gdb-9.1/gdb/gdbsupport/gdb_vecs.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/gdb_vecs.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,88 +0,0 @@ -/* Some commonly-used VEC types. - - Copyright (C) 2012-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "common-defs.h" -#include "gdb_vecs.h" -#include "host-defs.h" - -/* Worker function to split character delimiter separated string of fields - STR into a char pointer vector. */ - -static void -delim_string_to_char_ptr_vec_append - (std::vector<gdb::unique_xmalloc_ptr<char>> *vecp, const char *str, - char delimiter) -{ - do - { - size_t this_len; - const char *next_field; - char *this_field; - - next_field = strchr (str, delimiter); - if (next_field == NULL) - this_len = strlen (str); - else - { - this_len = next_field - str; - next_field++; - } - - this_field = (char *) xmalloc (this_len + 1); - memcpy (this_field, str, this_len); - this_field[this_len] = '\0'; - vecp->emplace_back (this_field); - - str = next_field; - } - while (str != NULL); -} - -/* See gdb_vecs.h. */ - -std::vector<gdb::unique_xmalloc_ptr<char>> -delim_string_to_char_ptr_vec (const char *str, char delimiter) -{ - std::vector<gdb::unique_xmalloc_ptr<char>> retval; - - delim_string_to_char_ptr_vec_append (&retval, str, delimiter); - - return retval; -} - -/* See gdb_vecs.h. */ - -void -dirnames_to_char_ptr_vec_append - (std::vector<gdb::unique_xmalloc_ptr<char>> *vecp, const char *dirnames) -{ - delim_string_to_char_ptr_vec_append (vecp, dirnames, DIRNAME_SEPARATOR); -} - -/* See gdb_vecs.h. */ - -std::vector<gdb::unique_xmalloc_ptr<char>> -dirnames_to_char_ptr_vec (const char *dirnames) -{ - std::vector<gdb::unique_xmalloc_ptr<char>> retval; - - dirnames_to_char_ptr_vec_append (&retval, dirnames); - - return retval; -} diff -Nru gdb-9.1/gdb/gdbsupport/gdb_vecs.h gdb-10.2/gdb/gdbsupport/gdb_vecs.h --- gdb-9.1/gdb/gdbsupport/gdb_vecs.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/gdb_vecs.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,88 +0,0 @@ -/* Some commonly-used VEC types. - - Copyright (C) 2012-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef COMMON_GDB_VECS_H -#define COMMON_GDB_VECS_H - -/* Split STR, a list of DELIMITER-separated fields, into a char pointer vector. - - You may modify the returned strings. */ - -extern std::vector<gdb::unique_xmalloc_ptr<char>> - delim_string_to_char_ptr_vec (const char *str, char delimiter); - -/* Like dirnames_to_char_ptr_vec, but append the directories to *VECP. */ - -extern void dirnames_to_char_ptr_vec_append - (std::vector<gdb::unique_xmalloc_ptr<char>> *vecp, const char *dirnames); - -/* Split DIRNAMES by DIRNAME_SEPARATOR delimiter and return a list of all the - elements in their original order. For empty string ("") DIRNAMES return - list of one empty string ("") element. - - You may modify the returned strings. */ - -extern std::vector<gdb::unique_xmalloc_ptr<char>> - dirnames_to_char_ptr_vec (const char *dirnames); - -/* Remove the element pointed by iterator IT from VEC, not preserving the order - of the remaining elements. Return the removed element. */ - -template <typename T> -T -unordered_remove (std::vector<T> &vec, typename std::vector<T>::iterator it) -{ - gdb_assert (it >= vec.begin () && it < vec.end ()); - - T removed = std::move (*it); - if (it != vec.end () - 1) - *it = std::move (vec.back ()); - vec.pop_back (); - - return removed; -} - -/* Remove the element at position IX from VEC, not preserving the order of the - remaining elements. Return the removed element. */ - -template <typename T> -T -unordered_remove (std::vector<T> &vec, typename std::vector<T>::size_type ix) -{ - gdb_assert (ix < vec.size ()); - - return unordered_remove (vec, vec.begin () + ix); -} - -/* Remove the element at position IX from VEC, preserving the order the - remaining elements. Return the removed element. */ - -template <typename T> -T -ordered_remove (std::vector<T> &vec, typename std::vector<T>::size_type ix) -{ - gdb_assert (ix < vec.size ()); - - T removed = std::move (vec[ix]); - vec.erase (vec.begin () + ix); - - return removed; -} - -#endif /* COMMON_GDB_VECS_H */ diff -Nru gdb-9.1/gdb/gdbsupport/gdb_wait.h gdb-10.2/gdb/gdbsupport/gdb_wait.h --- gdb-9.1/gdb/gdbsupport/gdb_wait.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/gdb_wait.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,113 +0,0 @@ -/* Standard wait macros. - Copyright (C) 2000-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef COMMON_GDB_WAIT_H -#define COMMON_GDB_WAIT_H - -#ifdef HAVE_SYS_WAIT_H -#include <sys/wait.h> /* POSIX */ -#else -#ifdef HAVE_WAIT_H -#include <wait.h> /* legacy */ -#endif -#endif - -/* Define how to access the int that the wait system call stores. - This has been compatible in all Unix systems since time immemorial, - but various well-meaning people have defined various different - words for the same old bits in the same old int (sometimes claimed - to be a struct). We just know it's an int and we use these macros - to access the bits. */ - -/* The following macros are defined equivalently to their definitions - in POSIX.1. We fail to define WNOHANG and WUNTRACED, which POSIX.1 - <sys/wait.h> defines, since our code does not use waitpid() (but - NOTE exception for GNU/Linux below). We also fail to declare - wait() and waitpid(). */ - -#ifndef WIFEXITED -#define WIFEXITED(w) (((w)&0377) == 0) -#endif - -#ifndef WIFSIGNALED -#define WIFSIGNALED(w) (((w)&0377) != 0177 && ((w)&~0377) == 0) -#endif - -#ifndef WIFSTOPPED -#ifdef IBM6000 - -/* Unfortunately, the above comment (about being compatible in all Unix - systems) is not quite correct for AIX, sigh. And AIX 3.2 can generate - status words like 0x57c (sigtrap received after load), and gdb would - choke on it. */ - -#define WIFSTOPPED(w) ((w)&0x40) - -#else -#define WIFSTOPPED(w) (((w)&0377) == 0177) -#endif -#endif - -#ifndef WEXITSTATUS -#define WEXITSTATUS(w) (((w) >> 8) & 0377) /* same as WRETCODE */ -#endif - -#ifndef WTERMSIG -#define WTERMSIG(w) ((w) & 0177) -#endif - -#ifndef WSTOPSIG -#define WSTOPSIG WEXITSTATUS -#endif - -/* These are not defined in POSIX, but are used by our programs. */ - -#ifndef WSETEXIT -# ifdef W_EXITCODE -#define WSETEXIT(w,status) ((w) = W_EXITCODE(status,0)) -# else -#define WSETEXIT(w,status) ((w) = (0 | ((status) << 8))) -# endif -#endif - -#ifndef W_STOPCODE -#define W_STOPCODE(sig) ((sig) << 8 | 0x7f) -#endif - -#ifndef WSETSTOP -#define WSETSTOP(w,sig) ((w) = W_STOPCODE(sig)) -#endif - -/* For native GNU/Linux we may use waitpid and the __WCLONE option. - <GRIPE> It is of course dangerous not to use the REAL header file... - </GRIPE>. */ - -/* Bits in the third argument to `waitpid'. */ -#ifndef WNOHANG -#define WNOHANG 1 /* Don't block waiting. */ -#endif - -#ifndef WUNTRACED -#define WUNTRACED 2 /* Report status of stopped children. */ -#endif - -#ifndef __WCLONE -#define __WCLONE 0x80000000 /* Wait for cloned process. */ -#endif - -#endif /* COMMON_GDB_WAIT_H */ diff -Nru gdb-9.1/gdb/gdbsupport/hash_enum.h gdb-10.2/gdb/gdbsupport/hash_enum.h --- gdb-9.1/gdb/gdbsupport/hash_enum.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/hash_enum.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,45 +0,0 @@ -/* A hasher for enums. - - Copyright (C) 2017-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef COMMON_HASH_ENUM_H -#define COMMON_HASH_ENUM_H - -/* A hasher for enums, which was missing in C++11: - http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2148 -*/ - -namespace gdb { - -/* Helper struct for hashing enum types. */ -template<typename T> -struct hash_enum -{ - typedef size_t result_type; - typedef T argument_type; - - size_t operator() (T val) const noexcept - { - using underlying = typename std::underlying_type<T>::type; - return std::hash<underlying> () (static_cast<underlying> (val)); - } -}; - -} /* namespace gdb */ - -#endif /* COMMON_HASH_ENUM_H */ diff -Nru gdb-9.1/gdb/gdbsupport/host-defs.h gdb-10.2/gdb/gdbsupport/host-defs.h --- gdb-9.1/gdb/gdbsupport/host-defs.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/host-defs.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,61 +0,0 @@ -/* Basic host-specific definitions for GDB. - Copyright (C) 1986-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef COMMON_HOST_DEFS_H -#define COMMON_HOST_DEFS_H - -#include <limits.h> - -/* Static host-system-dependent parameters for GDB. */ - -/* * Number of bits in a char or unsigned char for the target machine. - Just like CHAR_BIT in <limits.h> but describes the target machine. */ -#if !defined (TARGET_CHAR_BIT) -#define TARGET_CHAR_BIT 8 -#endif - -/* * If we picked up a copy of CHAR_BIT from a configuration file - (which may get it by including <limits.h>) then use it to set - the number of bits in a host char. If not, use the same size - as the target. */ - -#if defined (CHAR_BIT) -#define HOST_CHAR_BIT CHAR_BIT -#else -#define HOST_CHAR_BIT TARGET_CHAR_BIT -#endif - -#ifdef __MSDOS__ -# define CANT_FORK -# define GLOBAL_CURDIR -# define DIRNAME_SEPARATOR ';' -#endif - -#if !defined (__CYGWIN__) && defined (_WIN32) -# define DIRNAME_SEPARATOR ';' -#endif - -#ifndef DIRNAME_SEPARATOR -#define DIRNAME_SEPARATOR ':' -#endif - -#ifndef SLASH_STRING -#define SLASH_STRING "/" -#endif - -#endif /* COMMON_HOST_DEFS_H */ diff -Nru gdb-9.1/gdb/gdbsupport/job-control.c gdb-10.2/gdb/gdbsupport/job-control.c --- gdb-9.1/gdb/gdbsupport/job-control.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/job-control.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,86 +0,0 @@ -/* Job control and terminal related functions, for GDB and gdbserver - when running under Unix. - - Copyright (C) 1986-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "common-defs.h" -#include "job-control.h" -#ifdef HAVE_TERMIOS_H -#include <termios.h> -#endif -#include <unistd.h> - -/* Nonzero if we have job control. */ -int job_control; - -/* Set the process group ID of the inferior. - - Just using job_control only does part of it because setpgid or - setpgrp might not exist on a system without job control. - - For a more clean implementation, in libiberty, put a setpgid which merely - calls setpgrp and a setpgrp which does nothing (any system with job control - will have one or the other). */ - -int -gdb_setpgid () -{ - int retval = 0; - - if (job_control) - { -#ifdef HAVE_SETPGID - /* The call setpgid (0, 0) is supposed to work and mean the same - thing as this, but on Ultrix 4.2A it fails with EPERM (and - setpgid (getpid (), getpid ()) succeeds). */ - retval = setpgid (getpid (), getpid ()); -#else -#ifdef HAVE_SETPGRP -#ifdef SETPGRP_VOID - retval = setpgrp (); -#else - retval = setpgrp (getpid (), getpid ()); -#endif -#endif /* HAVE_SETPGRP */ -#endif /* HAVE_SETPGID */ - } - - return retval; -} - -/* See gdbsupport/common-terminal.h. */ - -void -have_job_control () -{ - /* OK, figure out whether we have job control. If termios is not - available, leave job_control 0. */ -#if defined (HAVE_TERMIOS_H) - /* Do all systems with termios have the POSIX way of identifying job - control? I hope so. */ -#ifdef _POSIX_JOB_CONTROL - job_control = 1; -#else -#ifdef _SC_JOB_CONTROL - job_control = sysconf (_SC_JOB_CONTROL); -#else - job_control = 0; /* Have to assume the worst. */ -#endif /* _SC_JOB_CONTROL */ -#endif /* _POSIX_JOB_CONTROL */ -#endif /* HAVE_TERMIOS_H */ -} diff -Nru gdb-9.1/gdb/gdbsupport/job-control.h gdb-10.2/gdb/gdbsupport/job-control.h --- gdb-9.1/gdb/gdbsupport/job-control.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/job-control.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,38 +0,0 @@ -/* Job control and terminal related functions, for GDB and gdbserver - when running under Unix. - - Copyright (C) 1986-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef COMMON_JOB_CONTROL_H -#define COMMON_JOB_CONTROL_H - -/* Do we have job control? Can be assumed to always be the same - within a given run of GDB. Use in gdb/inflow.c and - gdbsupport/common-inflow.c. */ -extern int job_control; - -/* Set the process group of the caller to its own pid, or do nothing - if we lack job control. */ -extern int gdb_setpgid (); - -/* Determine whether we have job control, and set variable JOB_CONTROL - accordingly. This function must be called before any use of - JOB_CONTROL. */ -extern void have_job_control (); - -#endif /* COMMON_JOB_CONTROL_H */ diff -Nru gdb-9.1/gdb/gdbsupport/netstuff.c gdb-10.2/gdb/gdbsupport/netstuff.c --- gdb-9.1/gdb/gdbsupport/netstuff.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/netstuff.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,154 +0,0 @@ -/* Operations on network stuff. - Copyright (C) 2018-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "common-defs.h" -#include "netstuff.h" -#include <algorithm> - -#ifdef USE_WIN32API -#include <ws2tcpip.h> -#else -#include <netinet/in.h> -#include <arpa/inet.h> -#include <netdb.h> -#include <sys/socket.h> -#include <netinet/tcp.h> -#endif - -/* See gdbsupport/netstuff.h. */ - -scoped_free_addrinfo::~scoped_free_addrinfo () -{ - freeaddrinfo (m_res); -} - -/* See gdbsupport/netstuff.h. */ - -parsed_connection_spec -parse_connection_spec_without_prefix (std::string spec, struct addrinfo *hint) -{ - parsed_connection_spec ret; - size_t last_colon_pos = 0; - /* We're dealing with IPv6 if: - - - ai_family is AF_INET6, or - - ai_family is not AF_INET, and - - spec[0] is '[', or - - the number of ':' on spec is greater than 1. */ - bool is_ipv6 = (hint->ai_family == AF_INET6 - || (hint->ai_family != AF_INET - && (spec[0] == '[' - || std::count (spec.begin (), - spec.end (), ':') > 1))); - - if (is_ipv6) - { - if (spec[0] == '[') - { - /* IPv6 addresses can be written as '[ADDR]:PORT', and we - support this notation. */ - size_t close_bracket_pos = spec.find_first_of (']'); - - if (close_bracket_pos == std::string::npos) - error (_("Missing close bracket in hostname '%s'"), - spec.c_str ()); - - hint->ai_family = AF_INET6; - - const char c = spec[close_bracket_pos + 1]; - - if (c == '\0') - last_colon_pos = std::string::npos; - else if (c != ':') - error (_("Invalid cruft after close bracket in '%s'"), - spec.c_str ()); - - /* Erase both '[' and ']'. */ - spec.erase (0, 1); - spec.erase (close_bracket_pos - 1, 1); - } - else if (spec.find_first_of (']') != std::string::npos) - error (_("Missing open bracket in hostname '%s'"), - spec.c_str ()); - } - - if (last_colon_pos == 0) - last_colon_pos = spec.find_last_of (':'); - - /* The length of the hostname part. */ - size_t host_len; - - if (last_colon_pos != std::string::npos) - { - /* The user has provided a port. */ - host_len = last_colon_pos; - ret.port_str = spec.substr (last_colon_pos + 1); - } - else - host_len = spec.size (); - - ret.host_str = spec.substr (0, host_len); - - /* Default hostname is localhost. */ - if (ret.host_str.empty ()) - ret.host_str = "localhost"; - - return ret; -} - -/* See gdbsupport/netstuff.h. */ - -parsed_connection_spec -parse_connection_spec (const char *spec, struct addrinfo *hint) -{ - /* Struct to hold the association between valid prefixes, their - family and socktype. */ - struct host_prefix - { - /* The prefix. */ - const char *prefix; - - /* The 'ai_family'. */ - int family; - - /* The 'ai_socktype'. */ - int socktype; - }; - static const struct host_prefix prefixes[] = - { - { "udp:", AF_UNSPEC, SOCK_DGRAM }, - { "tcp:", AF_UNSPEC, SOCK_STREAM }, - { "udp4:", AF_INET, SOCK_DGRAM }, - { "tcp4:", AF_INET, SOCK_STREAM }, - { "udp6:", AF_INET6, SOCK_DGRAM }, - { "tcp6:", AF_INET6, SOCK_STREAM }, - }; - - for (const host_prefix prefix : prefixes) - if (startswith (spec, prefix.prefix)) - { - spec += strlen (prefix.prefix); - hint->ai_family = prefix.family; - hint->ai_socktype = prefix.socktype; - hint->ai_protocol - = hint->ai_socktype == SOCK_DGRAM ? IPPROTO_UDP : IPPROTO_TCP; - break; - } - - return parse_connection_spec_without_prefix (spec, hint); -} diff -Nru gdb-9.1/gdb/gdbsupport/netstuff.h gdb-10.2/gdb/gdbsupport/netstuff.h --- gdb-9.1/gdb/gdbsupport/netstuff.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/netstuff.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,76 +0,0 @@ -/* Operations on network stuff. - Copyright (C) 2018-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef COMMON_NETSTUFF_H -#define COMMON_NETSTUFF_H - -#include <string> - -/* Like NI_MAXHOST/NI_MAXSERV, but enough for numeric forms. */ -#define GDB_NI_MAX_ADDR 64 -#define GDB_NI_MAX_PORT 16 - -/* Helper class to guarantee that we always call 'freeaddrinfo'. */ - -class scoped_free_addrinfo -{ -public: - /* Default constructor. */ - explicit scoped_free_addrinfo (struct addrinfo *ainfo) - : m_res (ainfo) - { - } - - /* Destructor responsible for free'ing M_RES by calling - 'freeaddrinfo'. */ - ~scoped_free_addrinfo (); - - DISABLE_COPY_AND_ASSIGN (scoped_free_addrinfo); - -private: - /* The addrinfo resource. */ - struct addrinfo *m_res; -}; - -/* The struct we return after parsing the connection spec. */ - -struct parsed_connection_spec -{ - /* The hostname. */ - std::string host_str; - - /* The port, if any. */ - std::string port_str; -}; - - -/* Parse SPEC (which is a string in the form of "ADDR:PORT") and - return a 'parsed_connection_spec' structure with the proper fields - filled in. Also adjust HINT accordingly. */ -extern parsed_connection_spec - parse_connection_spec_without_prefix (std::string spec, - struct addrinfo *hint); - -/* Parse SPEC (which is a string in the form of - "[tcp[6]:|udp[6]:]ADDR:PORT") and return a 'parsed_connection_spec' - structure with the proper fields filled in. Also adjust HINT - accordingly. */ -extern parsed_connection_spec parse_connection_spec (const char *spec, - struct addrinfo *hint); - -#endif /* COMMON_NETSTUFF_H */ diff -Nru gdb-9.1/gdb/gdbsupport/new-op.c gdb-10.2/gdb/gdbsupport/new-op.c --- gdb-9.1/gdb/gdbsupport/new-op.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/new-op.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,95 +0,0 @@ -/* Replace operator new/new[], for GDB, the GNU debugger. - - Copyright (C) 2016-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -/* GCC does not understand __has_feature. */ -#if !defined(__has_feature) -# define __has_feature(x) 0 -#endif - -#if !__has_feature(address_sanitizer) && !defined(__SANITIZE_ADDRESS__) -#include "common-defs.h" -#include "host-defs.h" -#include <new> - -/* Override operator new / operator new[], in order to internal_error - on allocation failure and thus query the user for abort/core - dump/continue, just like xmalloc does. We don't do this from a - new-handler function instead (std::set_new_handler) because we want - to catch allocation errors from within global constructors too. - - Skip overriding if building with -fsanitize=address though. - Address sanitizer wants to override operator new/delete too in - order to detect malloc+delete and new+free mismatches. Our - versions would mask out ASan's, with the result of losing that - useful mismatch detection. - - Note that C++ implementations could either have their throw - versions call the nothrow versions (libstdc++), or the other way - around (clang/libc++). For that reason, we replace both throw and - nothrow variants and call malloc directly. */ - -void * -operator new (std::size_t sz) -{ - /* malloc (0) is unpredictable; avoid it. */ - if (sz == 0) - sz = 1; - - void *p = malloc (sz); /* ARI: malloc */ - if (p == NULL) - { - /* If the user decides to continue debugging, throw a - gdb_quit_bad_alloc exception instead of a regular QUIT - gdb_exception. The former extends both std::bad_alloc and a - QUIT gdb_exception. This is necessary because operator new - can only ever throw std::bad_alloc, or something that extends - it. */ - try - { - malloc_failure (sz); - } - catch (gdb_exception &ex) - { - throw gdb_quit_bad_alloc (std::move (ex)); - } - } - return p; -} - -void * -operator new (std::size_t sz, const std::nothrow_t&) noexcept -{ - /* malloc (0) is unpredictable; avoid it. */ - if (sz == 0) - sz = 1; - return malloc (sz); /* ARI: malloc */ -} - -void * -operator new[] (std::size_t sz) -{ - return ::operator new (sz); -} - -void* -operator new[] (std::size_t sz, const std::nothrow_t&) noexcept -{ - return ::operator new (sz, std::nothrow); -} -#endif diff -Nru gdb-9.1/gdb/gdbsupport/next-iterator.h gdb-10.2/gdb/gdbsupport/next-iterator.h --- gdb-9.1/gdb/gdbsupport/next-iterator.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/next-iterator.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,102 +0,0 @@ -/* A "next" iterator for GDB, the GNU debugger. - Copyright (C) 2019-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef COMMON_NEXT_ITERATOR_H -#define COMMON_NEXT_ITERATOR_H - -/* An iterator that uses the 'next' field of a type to iterate. This - can be used with various GDB types that are stored as linked - lists. */ - -template<typename T> -struct next_iterator -{ - typedef next_iterator self_type; - typedef T *value_type; - typedef T *&reference; - typedef T **pointer; - typedef std::forward_iterator_tag iterator_category; - typedef int difference_type; - - explicit next_iterator (T *item) - : m_item (item) - { - } - - /* Create a one-past-the-end iterator. */ - next_iterator () - : m_item (nullptr) - { - } - - value_type operator* () const - { - return m_item; - } - - bool operator== (const self_type &other) const - { - return m_item == other.m_item; - } - - bool operator!= (const self_type &other) const - { - return m_item != other.m_item; - } - - self_type &operator++ () - { - m_item = m_item->next; - return *this; - } - -private: - - T *m_item; -}; - -/* A range adapter that allows iterating over a linked list. */ - -template<typename T, typename Iterator = next_iterator<T>> -class next_adapter -{ -public: - - explicit next_adapter (T *item) - : m_item (item) - { - } - - using iterator = Iterator; - - iterator begin () const - { - return iterator (m_item); - } - - iterator end () const - { - return iterator (); - } - -private: - - T *m_item; -}; - -#endif /* COMMON_NEXT_ITERATOR_H */ diff -Nru gdb-9.1/gdb/gdbsupport/observable.h gdb-10.2/gdb/gdbsupport/observable.h --- gdb-9.1/gdb/gdbsupport/observable.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/observable.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,119 +0,0 @@ -/* Observers - - Copyright (C) 2016-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef COMMON_OBSERVABLE_H -#define COMMON_OBSERVABLE_H - -#include <algorithm> -#include <functional> -#include <vector> - -namespace gdb -{ - -namespace observers -{ - -extern unsigned int observer_debug; - -/* An observer is an entity which is interested in being notified - when GDB reaches certain states, or certain events occur in GDB. - The entity being observed is called the observable. To receive - notifications, the observer attaches a callback to the observable. - One observable can have several observers. - - The observer implementation is also currently not reentrant. In - particular, it is therefore not possible to call the attach or - detach routines during a notification. */ - -/* The type of a key that can be passed to attach, which can be passed - to detach to remove associated observers. Tokens have address - identity, and are thus usually const globals. */ -struct token -{ - token () = default; - - DISABLE_COPY_AND_ASSIGN (token); -}; - -template<typename... T> -class observable -{ -public: - - typedef std::function<void (T...)> func_type; - - explicit observable (const char *name) - : m_name (name) - { - } - - DISABLE_COPY_AND_ASSIGN (observable); - - /* Attach F as an observer to this observable. F cannot be - detached. */ - void attach (const func_type &f) - { - m_observers.emplace_back (nullptr, f); - } - - /* Attach F as an observer to this observable. T is a reference to - a token that can be used to later remove F. */ - void attach (const func_type &f, const token &t) - { - m_observers.emplace_back (&t, f); - } - - /* Remove observers associated with T from this observable. T is - the token that was previously passed to any number of "attach" - calls. */ - void detach (const token &t) - { - auto iter = std::remove_if (m_observers.begin (), - m_observers.end (), - [&] (const std::pair<const token *, - func_type> &e) - { - return e.first == &t; - }); - - m_observers.erase (iter, m_observers.end ()); - } - - /* Notify all observers that are attached to this observable. */ - void notify (T... args) const - { - if (observer_debug) - fprintf_unfiltered (gdb_stdlog, "observable %s notify() called\n", - m_name); - for (auto &&e : m_observers) - e.second (args...); - } - -private: - - std::vector<std::pair<const token *, func_type>> m_observers; - const char *m_name; -}; - -} /* namespace observers */ - -} /* namespace gdb */ - -#endif /* COMMON_OBSERVABLE_H */ diff -Nru gdb-9.1/gdb/gdbsupport/offset-type.h gdb-10.2/gdb/gdbsupport/offset-type.h --- gdb-9.1/gdb/gdbsupport/offset-type.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/offset-type.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,133 +0,0 @@ -/* Offset types for GDB. - - Copyright (C) 2017-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -/* Define an "offset" type. Offset types are distinct integer types - that are used to represent an offset into anything that is - addressable. For example, an offset into a DWARF debug section. - The idea is catch mixing unrelated offset types at compile time, in - code that needs to manipulate multiple different kinds of offsets - that are easily confused. They're safer to use than native - integers, because they have no implicit conversion to anything. - And also, since they're implemented as "enum class" strong - typedefs, they're still integers ABI-wise, making them a bit more - efficient than wrapper structs on some ABIs. - - Some properties of offset types, loosely modeled on pointers: - - - You can compare offsets of the same type for equality and order. - You can't compare an offset with an unrelated type. - - - You can add/substract an integer to/from an offset, which gives - you back a shifted offset. - - - You can subtract two offsets of the same type, which gives you - back the delta as an integer (of the enum class's underlying - type), not as an offset type. - - - You can't add two offsets of the same type, as that would not - make sense. - - However, unlike pointers, you can't deference offset types. */ - -#ifndef COMMON_OFFSET_TYPE_H -#define COMMON_OFFSET_TYPE_H - -/* Declare TYPE as being an offset type. This declares the type and - enables the operators defined below. */ -#define DEFINE_OFFSET_TYPE(TYPE, UNDERLYING) \ - enum class TYPE : UNDERLYING {}; \ - void is_offset_type (TYPE) - -/* The macro macro is all you need to know use offset types. The rest - below is all implementation detail. */ - -/* For each enum class type that you want to support arithmetic - operators, declare an "is_offset_type" overload that has exactly - one parameter, of type that enum class. E.g.,: - - void is_offset_type (sect_offset); - - The function does not need to be defined, only declared. - DEFINE_OFFSET_TYPE declares this. - - A function declaration is preferred over a traits type, because the - former allows calling the DEFINE_OFFSET_TYPE macro inside a - namespace to define the corresponding offset type in that - namespace. The compiler finds the corresponding is_offset_type - function via ADL. -*/ - -/* Adding or subtracting an integer to an offset type shifts the - offset. This is like "PTR = PTR + INT" and "PTR += INT". */ - -#define DEFINE_OFFSET_ARITHM_OP(OP) \ - template<typename E, \ - typename = decltype (is_offset_type (std::declval<E> ()))> \ - constexpr E \ - operator OP (E lhs, typename std::underlying_type<E>::type rhs) \ - { \ - using underlying = typename std::underlying_type<E>::type; \ - return (E) (static_cast<underlying> (lhs) OP rhs); \ - } \ - \ - template<typename E, \ - typename = decltype (is_offset_type (std::declval<E> ()))> \ - constexpr E \ - operator OP (typename std::underlying_type<E>::type lhs, E rhs) \ - { \ - using underlying = typename std::underlying_type<E>::type; \ - return (E) (lhs OP static_cast<underlying> (rhs)); \ - } \ - \ - template<typename E, \ - typename = decltype (is_offset_type (std::declval<E> ()))> \ - E & \ - operator OP ## = (E &lhs, typename std::underlying_type<E>::type rhs) \ - { \ - using underlying = typename std::underlying_type<E>::type; \ - lhs = (E) (static_cast<underlying> (lhs) OP rhs); \ - return lhs; \ - } - -DEFINE_OFFSET_ARITHM_OP(+) -DEFINE_OFFSET_ARITHM_OP(-) - -/* Adding two offset types doesn't make sense, just like "PTR + PTR" - doesn't make sense. This is defined as a deleted function so that - a compile error easily brings you to this comment. */ - -template<typename E, - typename = decltype (is_offset_type (std::declval<E> ()))> -constexpr typename std::underlying_type<E>::type -operator+ (E lhs, E rhs) = delete; - -/* Subtracting two offset types, however, gives you back the - difference between the offsets, as an underlying type. Similar to - how "PTR2 - PTR1" returns a ptrdiff_t. */ - -template<typename E, - typename = decltype (is_offset_type (std::declval<E> ()))> -constexpr typename std::underlying_type<E>::type -operator- (E lhs, E rhs) -{ - using underlying = typename std::underlying_type<E>::type; - return static_cast<underlying> (lhs) - static_cast<underlying> (rhs); -} - -#endif /* COMMON_OFFSET_TYPE_H */ diff -Nru gdb-9.1/gdb/gdbsupport/parallel-for.h gdb-10.2/gdb/gdbsupport/parallel-for.h --- gdb-9.1/gdb/gdbsupport/parallel-for.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/parallel-for.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,86 +0,0 @@ -/* Parallel for loops - - Copyright (C) 2019-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef GDBSUPPORT_PARALLEL_FOR_H -#define GDBSUPPORT_PARALLEL_FOR_H - -#include <algorithm> -#if CXX_STD_THREAD -#include <thread> -#include "gdbsupport/thread-pool.h" -#endif - -namespace gdb -{ - -/* A very simple "parallel for". This splits the range of iterators - into subranges, and then passes each subrange to the callback. The - work may or may not be done in separate threads. - - This approach was chosen over having the callback work on single - items because it makes it simple for the caller to do - once-per-subrange initialization and destruction. */ - -template<class RandomIt, class RangeFunction> -void -parallel_for_each (RandomIt first, RandomIt last, RangeFunction callback) -{ -#if CXX_STD_THREAD - /* So we can use a local array below. */ - const size_t local_max = 16; - size_t n_threads = std::min (thread_pool::g_thread_pool->thread_count (), - local_max); - size_t n_actual_threads = 0; - std::future<void> futures[local_max]; - - size_t n_elements = last - first; - if (n_threads > 1) - { - /* Arbitrarily require that there should be at least 10 elements - in a thread. */ - if (n_elements / n_threads < 10) - n_threads = std::max (n_elements / 10, (size_t) 1); - size_t elts_per_thread = n_elements / n_threads; - n_actual_threads = n_threads - 1; - for (int i = 0; i < n_actual_threads; ++i) - { - RandomIt end = first + elts_per_thread; - auto task = [=] () - { - callback (first, end); - }; - - futures[i] = gdb::thread_pool::g_thread_pool->post_task (task); - first = end; - } - } -#endif /* CXX_STD_THREAD */ - - /* Process all the remaining elements in the main thread. */ - callback (first, last); - -#if CXX_STD_THREAD - for (int i = 0; i < n_actual_threads; ++i) - futures[i].wait (); -#endif /* CXX_STD_THREAD */ -} - -} - -#endif /* GDBSUPPORT_PARALLEL_FOR_H */ diff -Nru gdb-9.1/gdb/gdbsupport/pathstuff.c gdb-10.2/gdb/gdbsupport/pathstuff.c --- gdb-9.1/gdb/gdbsupport/pathstuff.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/pathstuff.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,290 +0,0 @@ -/* Path manipulation routines for GDB and gdbserver. - - Copyright (C) 1986-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "common-defs.h" -#include "pathstuff.h" -#include "host-defs.h" -#include "filenames.h" -#include "gdb_tilde_expand.h" - -#ifdef USE_WIN32API -#include <windows.h> -#endif - -/* See gdbsupport/pathstuff.h. */ - -gdb::unique_xmalloc_ptr<char> -gdb_realpath (const char *filename) -{ -/* On most hosts, we rely on canonicalize_file_name to compute - the FILENAME's realpath. - - But the situation is slightly more complex on Windows, due to some - versions of GCC which were reported to generate paths where - backlashes (the directory separator) were doubled. For instance: - c:\\some\\double\\slashes\\dir - ... instead of ... - c:\some\double\slashes\dir - Those double-slashes were getting in the way when comparing paths, - for instance when trying to insert a breakpoint as follow: - (gdb) b c:/some/double/slashes/dir/foo.c:4 - No source file named c:/some/double/slashes/dir/foo.c:4. - (gdb) b c:\some\double\slashes\dir\foo.c:4 - No source file named c:\some\double\slashes\dir\foo.c:4. - To prevent this from happening, we need this function to always - strip those extra backslashes. While canonicalize_file_name does - perform this simplification, it only works when the path is valid. - Since the simplification would be useful even if the path is not - valid (one can always set a breakpoint on a file, even if the file - does not exist locally), we rely instead on GetFullPathName to - perform the canonicalization. */ - -#if defined (_WIN32) - { - char buf[MAX_PATH]; - DWORD len = GetFullPathName (filename, MAX_PATH, buf, NULL); - - /* The file system is case-insensitive but case-preserving. - So it is important we do not lowercase the path. Otherwise, - we might not be able to display the original casing in a given - path. */ - if (len > 0 && len < MAX_PATH) - return make_unique_xstrdup (buf); - } -#else - { - char *rp = canonicalize_file_name (filename); - - if (rp != NULL) - return gdb::unique_xmalloc_ptr<char> (rp); - } -#endif - - /* This system is a lost cause, just dup the buffer. */ - return make_unique_xstrdup (filename); -} - -/* See gdbsupport/pathstuff.h. */ - -gdb::unique_xmalloc_ptr<char> -gdb_realpath_keepfile (const char *filename) -{ - const char *base_name = lbasename (filename); - char *dir_name; - char *result; - - /* Extract the basename of filename, and return immediately - a copy of filename if it does not contain any directory prefix. */ - if (base_name == filename) - return make_unique_xstrdup (filename); - - dir_name = (char *) alloca ((size_t) (base_name - filename + 2)); - /* Allocate enough space to store the dir_name + plus one extra - character sometimes needed under Windows (see below), and - then the closing \000 character. */ - strncpy (dir_name, filename, base_name - filename); - dir_name[base_name - filename] = '\000'; - -#ifdef HAVE_DOS_BASED_FILE_SYSTEM - /* We need to be careful when filename is of the form 'd:foo', which - is equivalent of d:./foo, which is totally different from d:/foo. */ - if (strlen (dir_name) == 2 && isalpha (dir_name[0]) && dir_name[1] == ':') - { - dir_name[2] = '.'; - dir_name[3] = '\000'; - } -#endif - - /* Canonicalize the directory prefix, and build the resulting - filename. If the dirname realpath already contains an ending - directory separator, avoid doubling it. */ - gdb::unique_xmalloc_ptr<char> path_storage = gdb_realpath (dir_name); - const char *real_path = path_storage.get (); - if (IS_DIR_SEPARATOR (real_path[strlen (real_path) - 1])) - result = concat (real_path, base_name, (char *) NULL); - else - result = concat (real_path, SLASH_STRING, base_name, (char *) NULL); - - return gdb::unique_xmalloc_ptr<char> (result); -} - -/* See gdbsupport/pathstuff.h. */ - -gdb::unique_xmalloc_ptr<char> -gdb_abspath (const char *path) -{ - gdb_assert (path != NULL && path[0] != '\0'); - - if (path[0] == '~') - return gdb_tilde_expand_up (path); - - if (IS_ABSOLUTE_PATH (path)) - return make_unique_xstrdup (path); - - /* Beware the // my son, the Emacs barfs, the botch that catch... */ - return gdb::unique_xmalloc_ptr<char> - (concat (current_directory, - IS_DIR_SEPARATOR (current_directory[strlen (current_directory) - 1]) - ? "" : SLASH_STRING, - path, (char *) NULL)); -} - -/* See gdbsupport/pathstuff.h. */ - -const char * -child_path (const char *parent, const char *child) -{ - /* The child path must start with the parent path. */ - size_t parent_len = strlen (parent); - if (filename_ncmp (parent, child, parent_len) != 0) - return NULL; - - /* The parent path must be a directory and the child must contain at - least one component underneath the parent. */ - const char *child_component; - if (parent_len > 0 && IS_DIR_SEPARATOR (parent[parent_len - 1])) - { - /* The parent path ends in a directory separator, so it is a - directory. The first child component starts after the common - prefix. */ - child_component = child + parent_len; - } - else - { - /* The parent path does not end in a directory separator. The - first character in the child after the common prefix must be - a directory separator. - - Note that CHILD must hold at least parent_len characters for - filename_ncmp to return zero. If the character at parent_len - is nul due to CHILD containing the same path as PARENT, the - IS_DIR_SEPARATOR check will fail here. */ - if (!IS_DIR_SEPARATOR (child[parent_len])) - return NULL; - - /* The first child component starts after the separator after the - common prefix. */ - child_component = child + parent_len + 1; - } - - /* The child must contain at least one non-separator character after - the parent. */ - while (*child_component != '\0') - { - if (!IS_DIR_SEPARATOR (*child_component)) - return child_component; - - child_component++; - } - return NULL; -} - -/* See gdbsupport/pathstuff.h. */ - -bool -contains_dir_separator (const char *path) -{ - for (; *path != '\0'; path++) - { - if (IS_DIR_SEPARATOR (*path)) - return true; - } - - return false; -} - -/* See gdbsupport/pathstuff.h. */ - -std::string -get_standard_cache_dir () -{ -#ifdef __APPLE__ -#define HOME_CACHE_DIR "Library/Caches" -#else -#define HOME_CACHE_DIR ".cache" -#endif - -#ifndef __APPLE__ - const char *xdg_cache_home = getenv ("XDG_CACHE_HOME"); - if (xdg_cache_home != NULL) - { - /* Make sure the path is absolute and tilde-expanded. */ - gdb::unique_xmalloc_ptr<char> abs (gdb_abspath (xdg_cache_home)); - return string_printf ("%s/gdb", abs.get ()); - } -#endif - - const char *home = getenv ("HOME"); - if (home != NULL) - { - /* Make sure the path is absolute and tilde-expanded. */ - gdb::unique_xmalloc_ptr<char> abs (gdb_abspath (home)); - return string_printf ("%s/" HOME_CACHE_DIR "/gdb", abs.get ()); - } - - return {}; -} - -/* See gdbsupport/pathstuff.h. */ - -std::string -get_standard_temp_dir () -{ -#ifdef WIN32 - const char *tmp = getenv ("TMP"); - if (tmp != nullptr) - return tmp; - - tmp = getenv ("TEMP"); - if (tmp != nullptr) - return tmp; - - error (_("Couldn't find temp dir path, both TMP and TEMP are unset.")); - -#else - const char *tmp = getenv ("TMPDIR"); - if (tmp != nullptr) - return tmp; - - return "/tmp"; -#endif -} - -/* See gdbsupport/pathstuff.h. */ - -const char * -get_shell () -{ - const char *ret = getenv ("SHELL"); - if (ret == NULL) - ret = "/bin/sh"; - - return ret; -} - -/* See gdbsupport/pathstuff.h. */ - -gdb::char_vector -make_temp_filename (const std::string &f) -{ - gdb::char_vector filename_temp (f.length () + 8); - strcpy (filename_temp.data (), f.c_str ()); - strcat (filename_temp.data () + f.size (), "-XXXXXX"); - return filename_temp; -} diff -Nru gdb-9.1/gdb/gdbsupport/pathstuff.h gdb-10.2/gdb/gdbsupport/pathstuff.h --- gdb-9.1/gdb/gdbsupport/pathstuff.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/pathstuff.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,95 +0,0 @@ -/* Path manipulation routines for GDB and gdbserver. - - Copyright (C) 1986-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef COMMON_PATHSTUFF_H -#define COMMON_PATHSTUFF_H - -#include "gdbsupport/byte-vector.h" - -/* Path utilities. */ - -/* Return the real path of FILENAME, expanding all the symbolic links. - - Contrary to "gdb_abspath", this function does not use - CURRENT_DIRECTORY for path expansion. Instead, it relies on the - current working directory (CWD) of GDB or gdbserver. */ - -extern gdb::unique_xmalloc_ptr<char> gdb_realpath (const char *filename); - -/* Return a copy of FILENAME, with its directory prefix canonicalized - by gdb_realpath. */ - -extern gdb::unique_xmalloc_ptr<char> - gdb_realpath_keepfile (const char *filename); - -/* Return PATH in absolute form, performing tilde-expansion if necessary. - PATH cannot be NULL or the empty string. - This does not resolve symlinks however, use gdb_realpath for that. - - Contrary to "gdb_realpath", this function uses CURRENT_DIRECTORY - for the path expansion. This may lead to scenarios the current - working directory (CWD) is different than CURRENT_DIRECTORY. */ - -extern gdb::unique_xmalloc_ptr<char> gdb_abspath (const char *path); - -/* If the path in CHILD is a child of the path in PARENT, return a - pointer to the first component in the CHILD's pathname below the - PARENT. Otherwise, return NULL. */ - -extern const char *child_path (const char *parent, const char *child); - -/* Return whether PATH contains a directory separator character. */ - -extern bool contains_dir_separator (const char *path); - -/* Get the usual user cache directory for the current platform. - - On Linux, it follows the XDG Base Directory specification: use - $XDG_CACHE_HOME/gdb if the XDG_CACHE_HOME environment variable is - defined, otherwise $HOME/.cache. - - On macOS, it follows the local convention and uses - ~/Library/Caches/gdb. - - The return value is absolute and tilde-expanded. Return an empty - string if neither XDG_CACHE_HOME (on Linux) or HOME are defined. */ - -extern std::string get_standard_cache_dir (); - -/* Get the usual temporary directory for the current platform. - - On Windows, this is the TMP or TEMP environment variable. - - On the rest, this is the TMPDIR environment variable, if defined, else /tmp. - - Throw an exception on error. */ - -extern std::string get_standard_temp_dir (); - -/* Return the file name of the user's shell. Normally this comes from - the SHELL environment variable. */ - -extern const char *get_shell (); - -/* Make a filename suitable to pass to mkstemp based on F (e.g. - /tmp/foo -> /tmp/foo-XXXXXX). */ - -extern gdb::char_vector make_temp_filename (const std::string &f); - -#endif /* COMMON_PATHSTUFF_H */ diff -Nru gdb-9.1/gdb/gdbsupport/poison.h gdb-10.2/gdb/gdbsupport/poison.h --- gdb-9.1/gdb/gdbsupport/poison.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/poison.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,248 +0,0 @@ -/* Poison symbols at compile time. - - Copyright (C) 2017-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef COMMON_POISON_H -#define COMMON_POISON_H - -#include "traits.h" -#include "obstack.h" - -/* Poison memset of non-POD types. The idea is catching invalid - initialization of non-POD structs that is easy to be introduced as - side effect of refactoring. For example, say this: - - struct S { VEC(foo_s) *m_data; }; - -is converted to this at some point: - - struct S { - S() { m_data.reserve (10); } - std::vector<foo> m_data; - }; - -and old code was initializing S objects like this: - - struct S s; - memset (&s, 0, sizeof (S)); // whoops, now wipes vector. - -Declaring memset as deleted for non-POD types makes the memset above -be a compile-time error. */ - -/* Helper for SFINAE. True if "T *" is memsettable. I.e., if T is - either void, or POD. */ -template<typename T> -struct IsMemsettable - : gdb::Or<std::is_void<T>, - std::is_pod<T>> -{}; - -template <typename T, - typename = gdb::Requires<gdb::Not<IsMemsettable<T>>>> -void *memset (T *s, int c, size_t n) = delete; - -#if HAVE_IS_TRIVIALLY_COPYABLE - -/* Similarly, poison memcpy and memmove of non trivially-copyable - types, which is undefined. */ - -/* True if "T *" is relocatable. I.e., copyable with memcpy/memmove. - I.e., T is either trivially copyable, or void. */ -template<typename T> -struct IsRelocatable - : gdb::Or<std::is_void<T>, - std::is_trivially_copyable<T>> -{}; - -/* True if both source and destination are relocatable. */ - -template <typename D, typename S> -using BothAreRelocatable - = gdb::And<IsRelocatable<D>, IsRelocatable<S>>; - -template <typename D, typename S, - typename = gdb::Requires<gdb::Not<BothAreRelocatable<D, S>>>> -void *memcpy (D *dest, const S *src, size_t n) = delete; - -template <typename D, typename S, - typename = gdb::Requires<gdb::Not<BothAreRelocatable<D, S>>>> -void *memmove (D *dest, const S *src, size_t n) = delete; - -#endif /* HAVE_IS_TRIVIALLY_COPYABLE */ - -/* Poison XNEW and friends to catch usages of malloc-style allocations on - objects that require new/delete. */ - -template<typename T> -#if HAVE_IS_TRIVIALLY_CONSTRUCTIBLE -using IsMallocable = std::is_trivially_constructible<T>; -#else -using IsMallocable = std::true_type; -#endif - -template<typename T> -using IsFreeable = gdb::Or<std::is_trivially_destructible<T>, std::is_void<T>>; - -template <typename T, typename = gdb::Requires<gdb::Not<IsFreeable<T>>>> -void free (T *ptr) = delete; - -template<typename T> -static T * -xnew () -{ - static_assert (IsMallocable<T>::value, "Trying to use XNEW with a non-POD \ -data type. Use operator new instead."); - return XNEW (T); -} - -#undef XNEW -#define XNEW(T) xnew<T>() - -template<typename T> -static T * -xcnew () -{ - static_assert (IsMallocable<T>::value, "Trying to use XCNEW with a non-POD \ -data type. Use operator new instead."); - return XCNEW (T); -} - -#undef XCNEW -#define XCNEW(T) xcnew<T>() - -template<typename T> -static void -xdelete (T *p) -{ - static_assert (IsFreeable<T>::value, "Trying to use XDELETE with a non-POD \ -data type. Use operator delete instead."); - XDELETE (p); -} - -#undef XDELETE -#define XDELETE(P) xdelete (P) - -template<typename T> -static T * -xnewvec (size_t n) -{ - static_assert (IsMallocable<T>::value, "Trying to use XNEWVEC with a \ -non-POD data type. Use operator new[] (or std::vector) instead."); - return XNEWVEC (T, n); -} - -#undef XNEWVEC -#define XNEWVEC(T, N) xnewvec<T> (N) - -template<typename T> -static T * -xcnewvec (size_t n) -{ - static_assert (IsMallocable<T>::value, "Trying to use XCNEWVEC with a \ -non-POD data type. Use operator new[] (or std::vector) instead."); - return XCNEWVEC (T, n); -} - -#undef XCNEWVEC -#define XCNEWVEC(T, N) xcnewvec<T> (N) - -template<typename T> -static T * -xresizevec (T *p, size_t n) -{ - static_assert (IsMallocable<T>::value, "Trying to use XRESIZEVEC with a \ -non-POD data type."); - return XRESIZEVEC (T, p, n); -} - -#undef XRESIZEVEC -#define XRESIZEVEC(T, P, N) xresizevec<T> (P, N) - -template<typename T> -static void -xdeletevec (T *p) -{ - static_assert (IsFreeable<T>::value, "Trying to use XDELETEVEC with a \ -non-POD data type. Use operator delete[] (or std::vector) instead."); - XDELETEVEC (p); -} - -#undef XDELETEVEC -#define XDELETEVEC(P) xdeletevec (P) - -template<typename T> -static T * -xnewvar (size_t s) -{ - static_assert (IsMallocable<T>::value, "Trying to use XNEWVAR with a \ -non-POD data type."); - return XNEWVAR (T, s);; -} - -#undef XNEWVAR -#define XNEWVAR(T, S) xnewvar<T> (S) - -template<typename T> -static T * -xcnewvar (size_t s) -{ - static_assert (IsMallocable<T>::value, "Trying to use XCNEWVAR with a \ -non-POD data type."); - return XCNEWVAR (T, s); -} - -#undef XCNEWVAR -#define XCNEWVAR(T, S) xcnewvar<T> (S) - -template<typename T> -static T * -xresizevar (T *p, size_t s) -{ - static_assert (IsMallocable<T>::value, "Trying to use XRESIZEVAR with a \ -non-POD data type."); - return XRESIZEVAR (T, p, s); -} - -#undef XRESIZEVAR -#define XRESIZEVAR(T, P, S) xresizevar<T> (P, S) - -template<typename T> -static T * -xobnew (obstack *ob) -{ - static_assert (IsMallocable<T>::value, "Trying to use XOBNEW with a \ -non-POD data type."); - return XOBNEW (ob, T); -} - -#undef XOBNEW -#define XOBNEW(O, T) xobnew<T> (O) - -template<typename T> -static T * -xobnewvec (obstack *ob, size_t n) -{ - static_assert (IsMallocable<T>::value, "Trying to use XOBNEWVEC with a \ -non-POD data type."); - return XOBNEWVEC (ob, T, n); -} - -#undef XOBNEWVEC -#define XOBNEWVEC(O, T, N) xobnewvec<T> (O, N) - -#endif /* COMMON_POISON_H */ diff -Nru gdb-9.1/gdb/gdbsupport/preprocessor.h gdb-10.2/gdb/gdbsupport/preprocessor.h --- gdb-9.1/gdb/gdbsupport/preprocessor.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/preprocessor.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,35 +0,0 @@ -/* Copyright (C) 2017-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef COMMON_PREPROCESSOR_H -#define COMMON_PREPROCESSOR_H - -/* Generally useful preprocessor bits. */ - -/* Concatenate two tokens. */ -#define CONCAT_1(a, b) a ## b -#define CONCAT(a, b) CONCAT_1 (a, b) - -/* Stringification. */ -#define STRINGIFY_1(x) #x -#define STRINGIFY(x) STRINGIFY_1 (x) - -/* Escape parens out. Useful if you need to pass an argument that - includes commas to another macro. */ -#define ESC_PARENS(...) __VA_ARGS__ - -#endif /* COMMON_PREPROCESSOR_H */ diff -Nru gdb-9.1/gdb/gdbsupport/print-utils.c gdb-10.2/gdb/gdbsupport/print-utils.c --- gdb-9.1/gdb/gdbsupport/print-utils.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/print-utils.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,326 +0,0 @@ -/* Cell-based print utility routines for GDB, the GNU debugger. - - Copyright (C) 1986-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "common-defs.h" -#include "print-utils.h" -/* Temporary storage using circular buffer. */ - -/* Number of cells in the circular buffer. */ -#define NUMCELLS 16 - -/* Return the next entry in the circular buffer. */ - -char * -get_print_cell (void) -{ - static char buf[NUMCELLS][PRINT_CELL_SIZE]; - static int cell = 0; - - if (++cell >= NUMCELLS) - cell = 0; - return buf[cell]; -} - -static char * -decimal2str (const char *sign, ULONGEST addr, int width) -{ - /* Steal code from valprint.c:print_decimal(). Should this worry - about the real size of addr as the above does? */ - unsigned long temp[3]; - char *str = get_print_cell (); - int i = 0; - - do - { - temp[i] = addr % (1000 * 1000 * 1000); - addr /= (1000 * 1000 * 1000); - i++; - width -= 9; - } - while (addr != 0 && i < (sizeof (temp) / sizeof (temp[0]))); - - width += 9; - if (width < 0) - width = 0; - - switch (i) - { - case 1: - xsnprintf (str, PRINT_CELL_SIZE, "%s%0*lu", sign, width, temp[0]); - break; - case 2: - xsnprintf (str, PRINT_CELL_SIZE, "%s%0*lu%09lu", sign, width, - temp[1], temp[0]); - break; - case 3: - xsnprintf (str, PRINT_CELL_SIZE, "%s%0*lu%09lu%09lu", sign, width, - temp[2], temp[1], temp[0]); - break; - default: - internal_error (__FILE__, __LINE__, - _("failed internal consistency check")); - } - - return str; -} - -static char * -octal2str (ULONGEST addr, int width) -{ - unsigned long temp[3]; - char *str = get_print_cell (); - int i = 0; - - do - { - temp[i] = addr % (0100000 * 0100000); - addr /= (0100000 * 0100000); - i++; - width -= 10; - } - while (addr != 0 && i < (sizeof (temp) / sizeof (temp[0]))); - - width += 10; - if (width < 0) - width = 0; - - switch (i) - { - case 1: - if (temp[0] == 0) - xsnprintf (str, PRINT_CELL_SIZE, "%*o", width, 0); - else - xsnprintf (str, PRINT_CELL_SIZE, "0%0*lo", width, temp[0]); - break; - case 2: - xsnprintf (str, PRINT_CELL_SIZE, "0%0*lo%010lo", width, temp[1], temp[0]); - break; - case 3: - xsnprintf (str, PRINT_CELL_SIZE, "0%0*lo%010lo%010lo", width, - temp[2], temp[1], temp[0]); - break; - default: - internal_error (__FILE__, __LINE__, - _("failed internal consistency check")); - } - - return str; -} - -/* See print-utils.h. */ - -char * -pulongest (ULONGEST u) -{ - return decimal2str ("", u, 0); -} - -/* See print-utils.h. */ - -char * -plongest (LONGEST l) -{ - if (l < 0) - return decimal2str ("-", -l, 0); - else - return decimal2str ("", l, 0); -} - -/* Eliminate warning from compiler on 32-bit systems. */ -static int thirty_two = 32; - -/* See print-utils.h. */ - -char * -phex (ULONGEST l, int sizeof_l) -{ - char *str; - - switch (sizeof_l) - { - case 8: - str = get_print_cell (); - xsnprintf (str, PRINT_CELL_SIZE, "%08lx%08lx", - (unsigned long) (l >> thirty_two), - (unsigned long) (l & 0xffffffff)); - break; - case 4: - str = get_print_cell (); - xsnprintf (str, PRINT_CELL_SIZE, "%08lx", (unsigned long) l); - break; - case 2: - str = get_print_cell (); - xsnprintf (str, PRINT_CELL_SIZE, "%04x", (unsigned short) (l & 0xffff)); - break; - default: - str = phex (l, sizeof (l)); - break; - } - - return str; -} - -/* See print-utils.h. */ - -char * -phex_nz (ULONGEST l, int sizeof_l) -{ - char *str; - - switch (sizeof_l) - { - case 8: - { - unsigned long high = (unsigned long) (l >> thirty_two); - - str = get_print_cell (); - if (high == 0) - xsnprintf (str, PRINT_CELL_SIZE, "%lx", - (unsigned long) (l & 0xffffffff)); - else - xsnprintf (str, PRINT_CELL_SIZE, "%lx%08lx", high, - (unsigned long) (l & 0xffffffff)); - break; - } - case 4: - str = get_print_cell (); - xsnprintf (str, PRINT_CELL_SIZE, "%lx", (unsigned long) l); - break; - case 2: - str = get_print_cell (); - xsnprintf (str, PRINT_CELL_SIZE, "%x", (unsigned short) (l & 0xffff)); - break; - default: - str = phex_nz (l, sizeof (l)); - break; - } - - return str; -} - -/* See print-utils.h. */ - -char * -hex_string (LONGEST num) -{ - char *result = get_print_cell (); - - xsnprintf (result, PRINT_CELL_SIZE, "0x%s", phex_nz (num, sizeof (num))); - return result; -} - -/* See print-utils.h. */ - -char * -hex_string_custom (LONGEST num, int width) -{ - char *result = get_print_cell (); - char *result_end = result + PRINT_CELL_SIZE - 1; - const char *hex = phex_nz (num, sizeof (num)); - int hex_len = strlen (hex); - - if (hex_len > width) - width = hex_len; - if (width + 2 >= PRINT_CELL_SIZE) - internal_error (__FILE__, __LINE__, _("\ -hex_string_custom: insufficient space to store result")); - - strcpy (result_end - width - 2, "0x"); - memset (result_end - width, '0', width); - strcpy (result_end - hex_len, hex); - return result_end - width - 2; -} - -/* See print-utils.h. */ - -char * -int_string (LONGEST val, int radix, int is_signed, int width, - int use_c_format) -{ - switch (radix) - { - case 16: - { - char *result; - - if (width == 0) - result = hex_string (val); - else - result = hex_string_custom (val, width); - if (! use_c_format) - result += 2; - return result; - } - case 10: - { - if (is_signed && val < 0) - return decimal2str ("-", -val, width); - else - return decimal2str ("", val, width); - } - case 8: - { - char *result = octal2str (val, width); - - if (use_c_format || val == 0) - return result; - else - return result + 1; - } - default: - internal_error (__FILE__, __LINE__, - _("failed internal consistency check")); - } -} - -/* See print-utils.h. */ - -const char * -core_addr_to_string (const CORE_ADDR addr) -{ - char *str = get_print_cell (); - - strcpy (str, "0x"); - strcat (str, phex (addr, sizeof (addr))); - return str; -} - -/* See print-utils.h. */ - -const char * -core_addr_to_string_nz (const CORE_ADDR addr) -{ - char *str = get_print_cell (); - - strcpy (str, "0x"); - strcat (str, phex_nz (addr, sizeof (addr))); - return str; -} - -/* See print-utils.h. */ - -const char * -host_address_to_string_1 (const void *addr) -{ - char *str = get_print_cell (); - - xsnprintf (str, PRINT_CELL_SIZE, "0x%s", - phex_nz ((uintptr_t) addr, sizeof (addr))); - return str; -} diff -Nru gdb-9.1/gdb/gdbsupport/print-utils.h gdb-10.2/gdb/gdbsupport/print-utils.h --- gdb-9.1/gdb/gdbsupport/print-utils.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/print-utils.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,85 +0,0 @@ -/* Cell-based print utility routines for GDB, the GNU debugger. - - Copyright (C) 1986-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef COMMON_PRINT_UTILS_H -#define COMMON_PRINT_UTILS_H - -/* How many characters (including the terminating null byte) fit in a - cell. */ -#define PRINT_CELL_SIZE 50 - -/* %u for ULONGEST. The result is stored in a circular static buffer, - NUMCELLS deep. */ - -extern char *pulongest (ULONGEST u); - -/* %d for LONGEST. The result is stored in a circular static buffer, - NUMCELLS deep. */ - -extern char *plongest (LONGEST l); - -/* Convert a ULONGEST into a HEX string, like %lx, with leading zeros. - The result is stored in a circular static buffer, NUMCELLS deep. */ - -extern char *phex (ULONGEST l, int sizeof_l); - -/* Convert a ULONGEST into a HEX string, like %lx, without leading zeros. - The result is stored in a circular static buffer, NUMCELLS deep. */ - -extern char *phex_nz (ULONGEST l, int sizeof_l); - -/* Converts a LONGEST to a C-format hexadecimal literal and stores it - in a static string. Returns a pointer to this string. */ - -extern char *hex_string (LONGEST num); - -/* Converts a LONGEST number to a C-format hexadecimal literal and - stores it in a static string. Returns a pointer to this string - that is valid until the next call. The number is padded on the - left with 0s to at least WIDTH characters. */ - -extern char *hex_string_custom (LONGEST num, int width); - -/* Convert VAL to a numeral in the given radix. For - * radix 10, IS_SIGNED may be true, indicating a signed quantity; - * otherwise VAL is interpreted as unsigned. If WIDTH is supplied, - * it is the minimum width (0-padded if needed). USE_C_FORMAT means - * to use C format in all cases. If it is false, then 'x' - * and 'o' formats do not include a prefix (0x or leading 0). */ - -extern char *int_string (LONGEST val, int radix, int is_signed, int width, - int use_c_format); - -/* Convert a CORE_ADDR into a string. */ - -extern const char *core_addr_to_string (const CORE_ADDR addr); - -extern const char *core_addr_to_string_nz (const CORE_ADDR addr); - -extern const char *host_address_to_string_1 (const void *addr); - -/* Wrapper that avoids adding a pointless cast to all callers. */ -#define host_address_to_string(ADDR) \ - host_address_to_string_1 ((const void *) (ADDR)) - -/* Return the next entry in the circular print buffer. */ - -extern char *get_print_cell (void); - -#endif /* COMMON_PRINT_UTILS_H */ diff -Nru gdb-9.1/gdb/gdbsupport/ptid.c gdb-10.2/gdb/gdbsupport/ptid.c --- gdb-9.1/gdb/gdbsupport/ptid.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/ptid.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,26 +0,0 @@ -/* The ptid_t type and common functions operating on it. - - Copyright (C) 1986-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "common-defs.h" -#include "ptid.h" - -/* See ptid.h for these. */ - -ptid_t const null_ptid = ptid_t::make_null (); -ptid_t const minus_one_ptid = ptid_t::make_minus_one (); diff -Nru gdb-9.1/gdb/gdbsupport/ptid.h gdb-10.2/gdb/gdbsupport/ptid.h --- gdb-9.1/gdb/gdbsupport/ptid.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/ptid.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,155 +0,0 @@ -/* The ptid_t type and common functions operating on it. - - Copyright (C) 1986-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef COMMON_PTID_H -#define COMMON_PTID_H - -/* The ptid struct is a collection of the various "ids" necessary for - identifying the inferior process/thread being debugged. This - consists of the process id (pid), lightweight process id (lwp) and - thread id (tid). When manipulating ptids, the constructors, - accessors, and predicates declared in this file should be used. Do - NOT access the struct ptid members directly. - - process_stratum targets that handle threading themselves should - prefer using the ptid.lwp field, leaving the ptid.tid field for any - thread_stratum target that might want to sit on top. -*/ - -class ptid_t -{ -public: - /* Must have a trivial defaulted default constructor so that the - type remains POD. */ - ptid_t () noexcept = default; - - /* Make a ptid given the necessary PID, LWP, and TID components. - - A ptid with only a PID (LWP and TID equal to zero) is usually used to - represent a whole process, including all its lwps/threads. */ - - explicit constexpr ptid_t (int pid, long lwp = 0, long tid = 0) - : m_pid (pid), m_lwp (lwp), m_tid (tid) - {} - - /* Fetch the pid (process id) component from the ptid. */ - - constexpr int pid () const - { return m_pid; } - - /* Return true if the ptid's lwp member is non-zero. */ - - constexpr bool lwp_p () const - { return m_lwp != 0; } - - /* Fetch the lwp (lightweight process) component from the ptid. */ - - constexpr long lwp () const - { return m_lwp; } - - /* Return true if the ptid's tid member is non-zero. */ - - constexpr bool tid_p () const - { return m_tid != 0; } - - /* Fetch the tid (thread id) component from a ptid. */ - - constexpr long tid () const - { return m_tid; } - - /* Return true if the ptid represents a whole process, including all its - lwps/threads. Such ptids have the form of (pid, 0, 0), with - pid != -1. */ - - constexpr bool is_pid () const - { - return (*this != make_null () - && *this != make_minus_one () - && m_lwp == 0 - && m_tid == 0); - } - - /* Compare two ptids to see if they are equal. */ - - constexpr bool operator== (const ptid_t &other) const - { - return (m_pid == other.m_pid - && m_lwp == other.m_lwp - && m_tid == other.m_tid); - } - - /* Compare two ptids to see if they are different. */ - - constexpr bool operator!= (const ptid_t &other) const - { - return !(*this == other); - } - - /* Return true if the ptid matches FILTER. FILTER can be the wild - card MINUS_ONE_PTID (all ptids match it); can be a ptid representing - a process (ptid.is_pid () returns true), in which case, all lwps and - threads of that given process match, lwps and threads of other - processes do not; or, it can represent a specific thread, in which - case, only that thread will match true. The ptid must represent a - specific LWP or THREAD, it can never be a wild card. */ - - constexpr bool matches (const ptid_t &filter) const - { - return (/* If filter represents any ptid, it's always a match. */ - filter == make_minus_one () - /* If filter is only a pid, any ptid with that pid - matches. */ - || (filter.is_pid () && m_pid == filter.pid ()) - - /* Otherwise, this ptid only matches if it's exactly equal - to filter. */ - || *this == filter); - } - - /* Make a null ptid. */ - - static constexpr ptid_t make_null () - { return ptid_t (0, 0, 0); } - - /* Make a minus one ptid. */ - - static constexpr ptid_t make_minus_one () - { return ptid_t (-1, 0, 0); } - -private: - /* Process id. */ - int m_pid; - - /* Lightweight process id. */ - long m_lwp; - - /* Thread id. */ - long m_tid; -}; - -/* The null or zero ptid, often used to indicate no process. */ - -extern const ptid_t null_ptid; - -/* The (-1,0,0) ptid, often used to indicate either an error condition - or a "don't care" condition, i.e, "run all threads." */ - -extern const ptid_t minus_one_ptid; - -#endif /* COMMON_PTID_H */ diff -Nru gdb-9.1/gdb/gdbsupport/refcounted-object.h gdb-10.2/gdb/gdbsupport/refcounted-object.h --- gdb-9.1/gdb/gdbsupport/refcounted-object.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/refcounted-object.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,70 +0,0 @@ -/* Base class of intrusively reference-counted objects. - Copyright (C) 2017-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef COMMON_REFCOUNTED_OBJECT_H -#define COMMON_REFCOUNTED_OBJECT_H - -/* Base class of intrusively reference-countable objects. - Incrementing and decrementing the reference count is an external - responsibility. */ - -class refcounted_object -{ -public: - refcounted_object () = default; - - /* Increase the refcount. */ - void incref () - { - gdb_assert (m_refcount >= 0); - m_refcount++; - } - - /* Decrease the refcount. */ - void decref () - { - m_refcount--; - gdb_assert (m_refcount >= 0); - } - - int refcount () const { return m_refcount; } - -private: - DISABLE_COPY_AND_ASSIGN (refcounted_object); - - /* The reference count. */ - int m_refcount = 0; -}; - -/* A policy class to interface gdb::ref_ptr with a - refcounted_object. */ - -struct refcounted_object_ref_policy -{ - static void incref (refcounted_object *ptr) - { - ptr->incref (); - } - - static void decref (refcounted_object *ptr) - { - ptr->decref (); - } -}; - -#endif /* COMMON_REFCOUNTED_OBJECT_H */ diff -Nru gdb-9.1/gdb/gdbsupport/rsp-low.c gdb-10.2/gdb/gdbsupport/rsp-low.c --- gdb-9.1/gdb/gdbsupport/rsp-low.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/rsp-low.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,307 +0,0 @@ -/* Low-level RSP routines for GDB, the GNU debugger. - - Copyright (C) 1988-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "common-defs.h" -#include "rsp-low.h" - -/* See rsp-low.h. */ - -int -fromhex (int a) -{ - if (a >= '0' && a <= '9') - return a - '0'; - else if (a >= 'a' && a <= 'f') - return a - 'a' + 10; - else if (a >= 'A' && a <= 'F') - return a - 'A' + 10; - else - error (_("Reply contains invalid hex digit %d"), a); -} - -/* See rsp-low.h. */ - -int -tohex (int nib) -{ - if (nib < 10) - return '0' + nib; - else - return 'a' + nib - 10; -} - -/* Encode 64 bits in 16 chars of hex. */ - -static const char hexchars[] = "0123456789abcdef"; - -static int -ishex (int ch, int *val) -{ - if ((ch >= 'a') && (ch <= 'f')) - { - *val = ch - 'a' + 10; - return 1; - } - if ((ch >= 'A') && (ch <= 'F')) - { - *val = ch - 'A' + 10; - return 1; - } - if ((ch >= '0') && (ch <= '9')) - { - *val = ch - '0'; - return 1; - } - return 0; -} - -/* See rsp-low.h. */ - -char * -pack_nibble (char *buf, int nibble) -{ - *buf++ = hexchars[(nibble & 0x0f)]; - return buf; -} - -/* See rsp-low.h. */ - -char * -pack_hex_byte (char *pkt, int byte) -{ - *pkt++ = hexchars[(byte >> 4) & 0xf]; - *pkt++ = hexchars[(byte & 0xf)]; - return pkt; -} - -/* See rsp-low.h. */ - -const char * -unpack_varlen_hex (const char *buff, /* packet to parse */ - ULONGEST *result) -{ - int nibble; - ULONGEST retval = 0; - - while (ishex (*buff, &nibble)) - { - buff++; - retval = retval << 4; - retval |= nibble & 0x0f; - } - *result = retval; - return buff; -} - -/* See rsp-low.h. */ - -int -hex2bin (const char *hex, gdb_byte *bin, int count) -{ - int i; - - for (i = 0; i < count; i++) - { - if (hex[0] == 0 || hex[1] == 0) - { - /* Hex string is short, or of uneven length. - Return the count that has been converted so far. */ - return i; - } - *bin++ = fromhex (hex[0]) * 16 + fromhex (hex[1]); - hex += 2; - } - return i; -} - -/* See rsp-low.h. */ - -gdb::byte_vector -hex2bin (const char *hex) -{ - size_t bin_len = strlen (hex) / 2; - gdb::byte_vector bin (bin_len); - - hex2bin (hex, bin.data (), bin_len); - - return bin; -} - -/* See rsp-low.h. */ - -std::string -hex2str (const char *hex) -{ - return hex2str (hex, strlen (hex)); -} - -/* See rsp-low.h. */ - -std::string -hex2str (const char *hex, int count) -{ - std::string ret; - - ret.reserve (count); - for (size_t i = 0; i < count; ++i) - { - if (hex[0] == '\0' || hex[1] == '\0') - { - /* Hex string is short, or of uneven length. Return what we - have so far. */ - return ret; - } - ret += fromhex (hex[0]) * 16 + fromhex (hex[1]); - hex += 2; - } - - return ret; -} - -/* See rsp-low.h. */ - -int -bin2hex (const gdb_byte *bin, char *hex, int count) -{ - int i; - - for (i = 0; i < count; i++) - { - *hex++ = tohex ((*bin >> 4) & 0xf); - *hex++ = tohex (*bin++ & 0xf); - } - *hex = 0; - return i; -} - -/* See rsp-low.h. */ - -std::string -bin2hex (const gdb_byte *bin, int count) -{ - std::string ret; - - ret.reserve (count * 2); - for (int i = 0; i < count; ++i) - { - ret += tohex ((*bin >> 4) & 0xf); - ret += tohex (*bin++ & 0xf); - } - - return ret; -} - -/* Return whether byte B needs escaping when sent as part of binary data. */ - -static int -needs_escaping (gdb_byte b) -{ - return b == '$' || b == '#' || b == '}' || b == '*'; -} - -/* See rsp-low.h. */ - -int -remote_escape_output (const gdb_byte *buffer, int len_units, int unit_size, - gdb_byte *out_buf, int *out_len_units, - int out_maxlen_bytes) -{ - int input_unit_index, output_byte_index = 0, byte_index_in_unit; - int number_escape_bytes_needed; - - /* Try to copy integral addressable memory units until - (1) we run out of space or - (2) we copied all of them. */ - for (input_unit_index = 0; - input_unit_index < len_units; - input_unit_index++) - { - /* Find out how many escape bytes we need for this unit. */ - number_escape_bytes_needed = 0; - for (byte_index_in_unit = 0; - byte_index_in_unit < unit_size; - byte_index_in_unit++) - { - int idx = input_unit_index * unit_size + byte_index_in_unit; - gdb_byte b = buffer[idx]; - if (needs_escaping (b)) - number_escape_bytes_needed++; - } - - /* Check if we have room to fit this escaped unit. */ - if (output_byte_index + unit_size + number_escape_bytes_needed > - out_maxlen_bytes) - break; - - /* Copy the unit byte per byte, adding escapes. */ - for (byte_index_in_unit = 0; - byte_index_in_unit < unit_size; - byte_index_in_unit++) - { - int idx = input_unit_index * unit_size + byte_index_in_unit; - gdb_byte b = buffer[idx]; - if (needs_escaping (b)) - { - out_buf[output_byte_index++] = '}'; - out_buf[output_byte_index++] = b ^ 0x20; - } - else - out_buf[output_byte_index++] = b; - } - } - - *out_len_units = input_unit_index; - return output_byte_index; -} - -/* See rsp-low.h. */ - -int -remote_unescape_input (const gdb_byte *buffer, int len, - gdb_byte *out_buf, int out_maxlen) -{ - int input_index, output_index; - int escaped; - - output_index = 0; - escaped = 0; - for (input_index = 0; input_index < len; input_index++) - { - gdb_byte b = buffer[input_index]; - - if (output_index + 1 > out_maxlen) - error (_("Received too much data from the target.")); - - if (escaped) - { - out_buf[output_index++] = b ^ 0x20; - escaped = 0; - } - else if (b == '}') - escaped = 1; - else - out_buf[output_index++] = b; - } - - if (escaped) - error (_("Unmatched escape character in target response.")); - - return output_index; -} - diff -Nru gdb-9.1/gdb/gdbsupport/rsp-low.h gdb-10.2/gdb/gdbsupport/rsp-low.h --- gdb-9.1/gdb/gdbsupport/rsp-low.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/rsp-low.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,101 +0,0 @@ -/* Low-level RSP routines for GDB, the GNU debugger. - - Copyright (C) 1988-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef COMMON_RSP_LOW_H -#define COMMON_RSP_LOW_H - -#include "gdbsupport/byte-vector.h" - -/* Convert hex digit A to a number, or throw an exception. */ - -extern int fromhex (int a); - -/* Convert number NIB to a hex digit. */ - -extern int tohex (int nib); - -/* Write a character representing the low order four bits of NIBBLE in - hex to *BUF. Returns BUF+1. */ - -extern char *pack_nibble (char *buf, int nibble); - -/* Write the low byte of BYTE in hex to *BUF. Returns BUF+2. */ - -extern char *pack_hex_byte (char *pkt, int byte); - -/* Read hex digits from BUFF and convert to a number, which is stored - in RESULT. Reads until a non-hex digit is seen. Returns a pointer - to the terminating character. */ - -extern const char *unpack_varlen_hex (const char *buff, ULONGEST *result); - -/* HEX is a string of characters representing hexadecimal digits. - Convert pairs of hex digits to bytes and store sequentially into - BIN. COUNT is the maximum number of characters to convert. This - will convert fewer characters if the number of hex characters - actually seen is odd, or if HEX terminates before COUNT characters. - Returns the number of characters actually converted. */ - -extern int hex2bin (const char *hex, gdb_byte *bin, int count); - -/* Like the above, but return a gdb::byte_vector. */ - -gdb::byte_vector hex2bin (const char *hex); - -/* Like hex2bin, but return a std::string. */ - -extern std::string hex2str (const char *hex); - -/* Like hex2bin, but return a std::string. */ - -extern std::string hex2str (const char *hex, int count); - -/* Convert some bytes to a hexadecimal representation. BIN holds the - bytes to convert. COUNT says how many bytes to convert. The - resulting characters are stored in HEX, followed by a NUL - character. Returns the number of bytes actually converted. */ - -extern int bin2hex (const gdb_byte *bin, char *hex, int count); - -/* Overloaded version of bin2hex that returns a std::string. */ - -extern std::string bin2hex (const gdb_byte *bin, int count); - -/* Convert BUFFER, binary data at least LEN_UNITS addressable memory units - long, into escaped binary data in OUT_BUF. Only copy memory units that fit - completely in OUT_BUF. Set *OUT_LEN_UNITS to the number of units from - BUFFER successfully encoded in OUT_BUF, and return the number of bytes used - in OUT_BUF. The total number of bytes in the output buffer will be at most - OUT_MAXLEN_BYTES. This function properly escapes '*', and so is suitable - for the server side as well as the client. */ - -extern int remote_escape_output (const gdb_byte *buffer, int len_units, - int unit_size, gdb_byte *out_buf, - int *out_len_units, int out_maxlen_bytes); - -/* Convert BUFFER, escaped data LEN bytes long, into binary data - in OUT_BUF. Return the number of bytes written to OUT_BUF. - Raise an error if the total number of bytes exceeds OUT_MAXLEN. - - This function reverses remote_escape_output. */ - -extern int remote_unescape_input (const gdb_byte *buffer, int len, - gdb_byte *out_buf, int out_maxlen); - -#endif /* COMMON_RSP_LOW_H */ diff -Nru gdb-9.1/gdb/gdbsupport/run-time-clock.c gdb-10.2/gdb/gdbsupport/run-time-clock.c --- gdb-9.1/gdb/gdbsupport/run-time-clock.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/run-time-clock.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,58 +0,0 @@ -/* User/system CPU time clocks that follow the std::chrono interface. - Copyright (C) 2016-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "common-defs.h" -#include "run-time-clock.h" -#if defined HAVE_SYS_RESOURCE_H -#include <sys/resource.h> -#endif - -using namespace std::chrono; - -run_time_clock::time_point -run_time_clock::now () noexcept -{ - return time_point (microseconds (get_run_time ())); -} - -#ifdef HAVE_GETRUSAGE -static std::chrono::microseconds -timeval_to_microseconds (struct timeval *tv) -{ - return (seconds (tv->tv_sec) + microseconds (tv->tv_usec)); -} -#endif - -void -run_time_clock::now (user_cpu_time_clock::time_point &user, - system_cpu_time_clock::time_point &system) noexcept -{ -#ifdef HAVE_GETRUSAGE - struct rusage rusage; - - getrusage (RUSAGE_SELF, &rusage); - - microseconds utime = timeval_to_microseconds (&rusage.ru_utime); - microseconds stime = timeval_to_microseconds (&rusage.ru_stime); - user = user_cpu_time_clock::time_point (utime); - system = system_cpu_time_clock::time_point (stime); -#else - user = user_cpu_time_clock::time_point (microseconds (get_run_time ())); - system = system_cpu_time_clock::time_point (microseconds::zero ()); -#endif -} diff -Nru gdb-9.1/gdb/gdbsupport/run-time-clock.h gdb-10.2/gdb/gdbsupport/run-time-clock.h --- gdb-9.1/gdb/gdbsupport/run-time-clock.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/run-time-clock.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,75 +0,0 @@ -/* User/system CPU time clocks that follow the std::chrono interface. - Copyright (C) 2016-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef COMMON_RUN_TIME_CLOCK_H -#define COMMON_RUN_TIME_CLOCK_H - -#include <chrono> - -/* Count the total amount of time spent executing in user mode. */ - -struct user_cpu_time_clock -{ - using duration = std::chrono::microseconds; - using rep = duration::rep; - using period = duration::period; - using time_point = std::chrono::time_point<user_cpu_time_clock>; - - static constexpr bool is_steady = true; - - /* Use run_time_clock::now instead. */ - static time_point now () noexcept = delete; -}; - -/* Count the total amount of time spent executing in kernel mode. */ - -struct system_cpu_time_clock -{ - using duration = std::chrono::microseconds; - using rep = duration::rep; - using period = duration::period; - using time_point = std::chrono::time_point<system_cpu_time_clock>; - - static constexpr bool is_steady = true; - - /* Use run_time_clock::now instead. */ - static time_point now () noexcept = delete; -}; - -/* Count the total amount of time spent executing in userspace+kernel - mode. */ - -struct run_time_clock -{ - using duration = std::chrono::microseconds; - using rep = duration::rep; - using period = duration::period; - using time_point = std::chrono::time_point<run_time_clock>; - - static constexpr bool is_steady = true; - - static time_point now () noexcept; - - /* Return the user/system time as separate time points, if - supported. If not supported, then the combined user+kernel time - is returned in USER and SYSTEM is set to zero. */ - static void now (user_cpu_time_clock::time_point &user, - system_cpu_time_clock::time_point &system) noexcept; -}; - -#endif /* COMMON_RUN_TIME_CLOCK_H */ diff -Nru gdb-9.1/gdb/gdbsupport/safe-iterator.h gdb-10.2/gdb/gdbsupport/safe-iterator.h --- gdb-9.1/gdb/gdbsupport/safe-iterator.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/safe-iterator.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,93 +0,0 @@ -/* A safe iterator for GDB, the GNU debugger. - Copyright (C) 2018-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef COMMON_SAFE_ITERATOR_H -#define COMMON_SAFE_ITERATOR_H - -/* A forward iterator that wraps Iterator, such that when iterating - with iterator IT, it is possible to delete *IT without invalidating - IT. Suitably wrapped in a range type and used with range-for, this - allow convenient patterns like this: - - // range_safe() returns a range type whose begin()/end() methods - // return safe iterators. - for (foo *f : range_safe ()) - { - if (f->should_delete ()) - { - // The ++it operation implicitly done by the range-for is - // still OK after this. - delete f; - } - } -*/ - -template<typename Iterator> -class basic_safe_iterator -{ -public: - typedef basic_safe_iterator self_type; - typedef typename Iterator::value_type value_type; - typedef typename Iterator::reference reference; - typedef typename Iterator::pointer pointer; - typedef typename Iterator::iterator_category iterator_category; - typedef typename Iterator::difference_type difference_type; - - /* Construct by forwarding all arguments to the underlying - iterator. */ - template<typename... Args> - explicit basic_safe_iterator (Args &&...args) - : m_it (std::forward<Args> (args)...), - m_next (m_it) - { - if (m_it != m_end) - ++m_next; - } - - /* Create a one-past-end iterator. */ - basic_safe_iterator () - {} - - value_type operator* () const { return *m_it; } - - self_type &operator++ () - { - m_it = m_next; - if (m_it != m_end) - ++m_next; - return *this; - } - - bool operator== (const self_type &other) const - { return m_it == other.m_it; } - - bool operator!= (const self_type &other) const - { return m_it != other.m_it; } - -private: - /* The current element. */ - Iterator m_it {}; - - /* The next element. Always one element ahead of M_IT. */ - Iterator m_next {}; - - /* A one-past-end iterator. */ - Iterator m_end {}; -}; - -#endif /* COMMON_SAFE_ITERATOR_H */ diff -Nru gdb-9.1/gdb/gdbsupport/safe-strerror.c gdb-10.2/gdb/gdbsupport/safe-strerror.c --- gdb-9.1/gdb/gdbsupport/safe-strerror.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/safe-strerror.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,64 +0,0 @@ -/* Safe version of strerror for GDB, the GNU debugger. - - Copyright (C) 2006-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "common-defs.h" -#include "diagnostics.h" -#include <string.h> - -/* There are two different versions of strerror_r; one is GNU-specific, the - other XSI-compliant. They differ in the return type. This overload lets - us choose the right behavior for each return type. We cannot rely on Gnulib - to solve this for us because IPA does not use Gnulib but uses this - function. */ - -/* We only ever use one of the two overloads, so suppress the warning for - an unused function. */ -DIAGNOSTIC_PUSH -DIAGNOSTIC_IGNORE_UNUSED_FUNCTION - -/* Called if we have a XSI-compliant strerror_r. */ -static char * -select_strerror_r (int res, char *buf) -{ - return res == 0 ? buf : nullptr; -} - -/* Called if we have a GNU strerror_r. */ -static char * -select_strerror_r (char *res, char *) -{ - return res; -} - -DIAGNOSTIC_POP - -/* Implementation of safe_strerror as defined in common-utils.h. */ - -const char * -safe_strerror (int errnum) -{ - static thread_local char buf[1024]; - - char *res = select_strerror_r (strerror_r (errnum, buf, sizeof (buf)), buf); - if (res != nullptr) - return res; - - xsnprintf (buf, sizeof buf, "(undocumented errno %d)", errnum); - return buf; -} diff -Nru gdb-9.1/gdb/gdbsupport/scoped_fd.h gdb-10.2/gdb/gdbsupport/scoped_fd.h --- gdb-9.1/gdb/gdbsupport/scoped_fd.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/scoped_fd.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,87 +0,0 @@ -/* scoped_fd, automatically close a file descriptor - - Copyright (C) 2018-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef COMMON_SCOPED_FD_H -#define COMMON_SCOPED_FD_H - -#include <unistd.h> -#include "filestuff.h" - -/* A smart-pointer-like class to automatically close a file descriptor. */ - -class scoped_fd -{ -public: - explicit scoped_fd (int fd = -1) noexcept : m_fd (fd) {} - - scoped_fd (scoped_fd &&other) - : m_fd (other.m_fd) - { - other.m_fd = -1; - } - - ~scoped_fd () - { - if (m_fd >= 0) - close (m_fd); - } - - scoped_fd &operator= (scoped_fd &&other) - { - if (m_fd != other.m_fd) - { - if (m_fd >= 0) - close (m_fd); - m_fd = other.m_fd; - other.m_fd = -1; - } - return *this; - } - - DISABLE_COPY_AND_ASSIGN (scoped_fd); - - ATTRIBUTE_UNUSED_RESULT int release () noexcept - { - int fd = m_fd; - m_fd = -1; - return fd; - } - - /* Like release, but return a gdb_file_up that owns the file - descriptor. On success, this scoped_fd will be released. On - failure, return NULL and leave this scoped_fd in possession of - the fd. */ - gdb_file_up to_file (const char *mode) noexcept - { - gdb_file_up result (fdopen (m_fd, mode)); - if (result != nullptr) - m_fd = -1; - return result; - } - - int get () const noexcept - { - return m_fd; - } - -private: - int m_fd; -}; - -#endif /* COMMON_SCOPED_FD_H */ diff -Nru gdb-9.1/gdb/gdbsupport/scoped_mmap.c gdb-10.2/gdb/gdbsupport/scoped_mmap.c --- gdb-9.1/gdb/gdbsupport/scoped_mmap.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/scoped_mmap.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,49 +0,0 @@ -/* scoped_mmap, automatically unmap files - - Copyright (C) 2018-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "common-defs.h" -#include "scoped_mmap.h" -#include "scoped_fd.h" -#include "gdbsupport/filestuff.h" - -#ifdef HAVE_SYS_MMAN_H - -scoped_mmap -mmap_file (const char *filename) -{ - scoped_fd fd (gdb_open_cloexec (filename, O_RDONLY, 0)); - if (fd.get () < 0) - perror_with_name (("open")); - - off_t size = lseek (fd.get (), 0, SEEK_END); - if (size < 0) - perror_with_name (("lseek")); - - /* We can't map an empty file. */ - if (size == 0) - error (_("file to mmap is empty")); - - scoped_mmap mmapped_file (nullptr, size, PROT_READ, MAP_PRIVATE, fd.get (), 0); - if (mmapped_file.get () == MAP_FAILED) - perror_with_name (("mmap")); - - return mmapped_file; -} - -#endif /* HAVE_SYS_MMAN_H */ diff -Nru gdb-9.1/gdb/gdbsupport/scoped_mmap.h gdb-10.2/gdb/gdbsupport/scoped_mmap.h --- gdb-9.1/gdb/gdbsupport/scoped_mmap.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/scoped_mmap.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,94 +0,0 @@ -/* scoped_mmap, automatically unmap files - - Copyright (C) 2018-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef COMMON_SCOPED_MMAP_H -#define COMMON_SCOPED_MMAP_H - -#ifdef HAVE_SYS_MMAN_H - -#include <sys/mman.h> - -/* A smart-pointer-like class to mmap() and automatically munmap() a memory - mapping. */ - -class scoped_mmap -{ -public: - scoped_mmap () noexcept : m_mem (MAP_FAILED), m_length (0) {} - scoped_mmap (void *addr, size_t length, int prot, int flags, int fd, - off_t offset) noexcept : m_length (length) - { - m_mem = mmap (addr, m_length, prot, flags, fd, offset); - } - - ~scoped_mmap () - { - destroy (); - } - - scoped_mmap (scoped_mmap &&rhs) - { - destroy (); - - m_mem = rhs.m_mem; - m_length = rhs.m_length; - - rhs.m_mem = MAP_FAILED; - rhs.m_length = 0; - } - - DISABLE_COPY_AND_ASSIGN (scoped_mmap); - - ATTRIBUTE_UNUSED_RESULT void *release () noexcept - { - void *mem = m_mem; - m_mem = MAP_FAILED; - m_length = 0; - return mem; - } - - void reset (void *addr, size_t length, int prot, int flags, int fd, - off_t offset) noexcept - { - destroy (); - - m_length = length; - m_mem = mmap (addr, m_length, prot, flags, fd, offset); - } - - size_t size () const noexcept { return m_length; } - void *get () const noexcept { return m_mem; } - -private: - void destroy () - { - if (m_mem != MAP_FAILED) - munmap (m_mem, m_length); - } - - void *m_mem; - size_t m_length; -}; - -/* Map FILENAME in memory. Throw an error if anything goes wrong. */ -scoped_mmap mmap_file (const char *filename); - -#endif /* HAVE_SYS_MMAN_H */ - -#endif /* COMMON_SCOPED_MMAP_H */ diff -Nru gdb-9.1/gdb/gdbsupport/scoped_restore.h gdb-10.2/gdb/gdbsupport/scoped_restore.h --- gdb-9.1/gdb/gdbsupport/scoped_restore.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/scoped_restore.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,118 +0,0 @@ -/* scoped_restore, a simple class for saving and restoring a value - - Copyright (C) 2016-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef COMMON_SCOPED_RESTORE_H -#define COMMON_SCOPED_RESTORE_H - -/* Base class for scoped_restore_tmpl. */ -class scoped_restore_base -{ -public: - /* This informs the (scoped_restore_tmpl<T>) dtor that you no longer - want the original value restored. */ - void release () const - { m_saved_var = NULL; } - -protected: - scoped_restore_base (void *saved_var) - : m_saved_var (saved_var) - {} - - /* The type-erased saved variable. This is here so that clients can - call release() on a "scoped_restore" local, which is a typedef to - a scoped_restore_base. See below. */ - mutable void *m_saved_var; -}; - -/* A convenience typedef. Users of make_scoped_restore declare the - local RAII object as having this type. */ -typedef const scoped_restore_base &scoped_restore; - -/* An RAII-based object that saves a variable's value, and then - restores it again when this object is destroyed. */ -template<typename T> -class scoped_restore_tmpl : public scoped_restore_base -{ - public: - - /* Create a new scoped_restore object that saves the current value - of *VAR. *VAR will be restored when this scoped_restore object - is destroyed. */ - scoped_restore_tmpl (T *var) - : scoped_restore_base (var), - m_saved_value (*var) - { - } - - /* Create a new scoped_restore object that saves the current value - of *VAR, and sets *VAR to VALUE. *VAR will be restored when this - scoped_restore object is destroyed. This is templated on T2 to - allow passing VALUEs of types convertible to T. - E.g.: T='base'; T2='derived'. */ - template <typename T2> - scoped_restore_tmpl (T *var, T2 value) - : scoped_restore_base (var), - m_saved_value (*var) - { - *var = value; - } - - scoped_restore_tmpl (const scoped_restore_tmpl<T> &other) - : scoped_restore_base {other.m_saved_var}, - m_saved_value (other.m_saved_value) - { - other.m_saved_var = NULL; - } - - ~scoped_restore_tmpl () - { - if (saved_var () != NULL) - *saved_var () = m_saved_value; - } - -private: - /* Return a pointer to the saved variable with its type - restored. */ - T *saved_var () - { return static_cast<T *> (m_saved_var); } - - /* No need for this. It is intentionally not defined anywhere. */ - scoped_restore_tmpl &operator= (const scoped_restore_tmpl &); - - /* The saved value. */ - const T m_saved_value; -}; - -/* Make a scoped_restore. This is useful because it lets template - argument deduction work. */ -template<typename T> -scoped_restore_tmpl<T> make_scoped_restore (T *var) -{ - return scoped_restore_tmpl<T> (var); -} - -/* Make a scoped_restore. This is useful because it lets template - argument deduction work. */ -template<typename T, typename T2> -scoped_restore_tmpl<T> make_scoped_restore (T *var, T2 value) -{ - return scoped_restore_tmpl<T> (var, value); -} - -#endif /* COMMON_SCOPED_RESTORE_H */ diff -Nru gdb-9.1/gdb/gdbsupport/scope-exit.h gdb-10.2/gdb/gdbsupport/scope-exit.h --- gdb-9.1/gdb/gdbsupport/scope-exit.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/scope-exit.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,186 +0,0 @@ -/* Copyright (C) 2019-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef COMMON_SCOPE_EXIT_H -#define COMMON_SCOPE_EXIT_H - -#include <functional> -#include <type_traits> -#include "gdbsupport/preprocessor.h" - -/* scope_exit is a general-purpose scope guard that calls its exit - function at the end of the current scope. A scope_exit may be - canceled by calling the "release" method. The API is modeled on - P0052R5 - Generic Scope Guard and RAII Wrapper for the Standard - Library, which is itself based on Andrej Alexandrescu's - ScopeGuard/SCOPE_EXIT. - - There are two forms available: - - - The "make_scope_exit" form allows canceling the scope guard. Use - it like this: - - auto cleanup = make_scope_exit ( <function, function object, lambda> ); - ... - cleanup.release (); // cancel - - - If you don't need to cancel the guard, you can use the SCOPE_EXIT - macro, like this: - - SCOPE_EXIT - { - // any code you like here. - } - - See also forward_scope_exit. -*/ - -/* CRTP base class for cancelable scope_exit-like classes. Implements - the common call-custom-function-from-dtor functionality. Classes - that inherit this implement the on_exit() method, which is called - from scope_exit_base's dtor. */ - -template <typename CRTP> -class scope_exit_base -{ -public: - scope_exit_base () = default; - - ~scope_exit_base () - { - if (!m_released) - { - auto *self = static_cast<CRTP *> (this); - self->on_exit (); - } - } - - /* This is needed for make_scope_exit because copy elision isn't - guaranteed until C++17. An optimizing compiler will usually skip - calling this, but it must exist. */ - scope_exit_base (const scope_exit_base &other) - : m_released (other.m_released) - { - other.m_released = true; - } - - void operator= (const scope_exit_base &) = delete; - - /* If this is called, then the wrapped function will not be called - on destruction. */ - void release () noexcept - { - m_released = true; - } - -private: - - /* True if released. Mutable because of the copy ctor hack - above. */ - mutable bool m_released = false; -}; - -/* The scope_exit class. */ - -template<typename EF> -class scope_exit : public scope_exit_base<scope_exit<EF>> -{ - /* For access to on_exit(). */ - friend scope_exit_base<scope_exit<EF>>; - -public: - - template<typename EFP, - typename = gdb::Requires<std::is_constructible<EF, EFP>>> - scope_exit (EFP &&f) - try : m_exit_function ((!std::is_lvalue_reference<EFP>::value - && std::is_nothrow_constructible<EF, EFP>::value) - ? std::move (f) - : f) - { - } - catch (...) - { - /* "If the initialization of exit_function throws an exception, - calls f()." */ - f (); - } - - template<typename EFP, - typename = gdb::Requires<std::is_constructible<EF, EFP>>> - scope_exit (scope_exit &&rhs) - noexcept (std::is_nothrow_move_constructible<EF>::value - || std::is_nothrow_copy_constructible<EF>::value) - : m_exit_function (std::is_nothrow_constructible<EFP>::value - ? std::move (rhs) - : rhs) - { - rhs.release (); - } - - /* This is needed for make_scope_exit because copy elision isn't - guaranteed until C++17. An optimizing compiler will usually skip - calling this, but it must exist. */ - scope_exit (const scope_exit &other) - : scope_exit_base<scope_exit<EF>> (other), - m_exit_function (other.m_exit_function) - { - } - - void operator= (const scope_exit &) = delete; - void operator= (scope_exit &&) = delete; - -private: - void on_exit () - { - m_exit_function (); - } - - /* The function to call on scope exit. */ - EF m_exit_function; -}; - -template <typename EF> -scope_exit<typename std::decay<EF>::type> -make_scope_exit (EF &&f) -{ - return scope_exit<typename std::decay<EF>::type> (std::forward<EF> (f)); -} - -namespace detail -{ - -enum class scope_exit_lhs {}; - -template<typename EF> -scope_exit<typename std::decay<EF>::type> -operator+ (scope_exit_lhs, EF &&rhs) -{ - return scope_exit<typename std::decay<EF>::type> (std::forward<EF> (rhs)); -} - -} - -/* Register a block of code to run on scope exit. Note that the local - context is captured by reference, which means you should be careful - to avoid inadvertently changing a captured local's value before the - scope exit runs. */ - -#define SCOPE_EXIT \ - auto CONCAT(scope_exit_, __LINE__) = ::detail::scope_exit_lhs () + [&] () - -#endif /* COMMON_SCOPE_EXIT_H */ diff -Nru gdb-9.1/gdb/gdbsupport/selftest.c gdb-10.2/gdb/gdbsupport/selftest.c --- gdb-9.1/gdb/gdbsupport/selftest.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/selftest.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,111 +0,0 @@ -/* GDB self-testing. - Copyright (C) 2016-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "common-defs.h" -#include "common-exceptions.h" -#include "common-debug.h" -#include "selftest.h" -#include <map> - -namespace selftests -{ -/* All the tests that have been registered. Using an std::map allows keeping - the order of tests stable and easily looking up whether a test name - exists. */ - -static std::map<std::string, std::unique_ptr<selftest>> tests; - -/* A selftest that calls the test function without arguments. */ - -struct simple_selftest : public selftest -{ - simple_selftest (self_test_function *function_) - : function (function_) - {} - - void operator() () const override - { - function (); - } - - self_test_function *function; -}; - -/* See selftest.h. */ - -void -register_test (const std::string &name, selftest *test) -{ - /* Check that no test with this name already exist. */ - gdb_assert (tests.find (name) == tests.end ()); - - tests[name] = std::unique_ptr<selftest> (test); -} - -/* See selftest.h. */ - -void -register_test (const std::string &name, self_test_function *function) -{ - register_test (name, new simple_selftest (function)); -} - -/* See selftest.h. */ - -void -run_tests (const char *filter) -{ - int ran = 0, failed = 0; - - for (const auto &pair : tests) - { - const std::string &name = pair.first; - const std::unique_ptr<selftest> &test = pair.second; - - if (filter != NULL && *filter != '\0' - && name.find (filter) == std::string::npos) - continue; - - try - { - debug_printf (_("Running selftest %s.\n"), name.c_str ()); - ++ran; - (*test) (); - } - catch (const gdb_exception_error &ex) - { - ++failed; - debug_printf ("Self test failed: %s\n", ex.what ()); - } - - reset (); - } - - debug_printf (_("Ran %d unit tests, %d failed\n"), - ran, failed); -} - -/* See selftest.h. */ - -void for_each_selftest (for_each_selftest_ftype func) -{ - for (const auto &pair : tests) - func (pair.first); -} - -} // namespace selftests diff -Nru gdb-9.1/gdb/gdbsupport/selftest.h gdb-10.2/gdb/gdbsupport/selftest.h --- gdb-9.1/gdb/gdbsupport/selftest.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/selftest.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,73 +0,0 @@ -/* GDB self-testing. - Copyright (C) 2016-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef COMMON_SELFTEST_H -#define COMMON_SELFTEST_H - -/* A test is just a function that does some checks and throws an - exception if something has gone wrong. */ - -typedef void self_test_function (void); - -namespace selftests -{ - -/* Interface for the various kinds of selftests. */ - -struct selftest -{ - virtual ~selftest () = default; - virtual void operator() () const = 0; -}; - -/* Register a new self-test. */ - -extern void register_test (const std::string &name, selftest *test); - -/* Register a new self-test. */ - -extern void register_test (const std::string &name, - self_test_function *function); - -/* Run all the self tests. This print a message describing the number - of test and the number of failures. - - If FILTER is not NULL and not empty, only tests with names containing FILTER - will be ran. */ - -extern void run_tests (const char *filter); - -/* Reset GDB or GDBserver's internal state. */ -extern void reset (); - -typedef void for_each_selftest_ftype (const std::string &name); - -/* Call FUNC for each registered selftest. */ - -extern void for_each_selftest (for_each_selftest_ftype func); -} - -/* Check that VALUE is true, and, if not, throw an exception. */ - -#define SELF_CHECK(VALUE) \ - do { \ - if (!(VALUE)) \ - error (_("self-test failed at %s:%d"), __FILE__, __LINE__); \ - } while (0) - -#endif /* COMMON_SELFTEST_H */ diff -Nru gdb-9.1/gdb/gdbsupport/signals.c gdb-10.2/gdb/gdbsupport/signals.c --- gdb-9.1/gdb/gdbsupport/signals.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/signals.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,653 +0,0 @@ -/* Target signal translation functions for GDB. - Copyright (C) 1990-2020 Free Software Foundation, Inc. - Contributed by Cygnus Support. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "common-defs.h" - -#ifdef HAVE_SIGNAL_H -#include <signal.h> -#endif - -#include "gdb_signals.h" - -struct gdbarch; - -/* Always use __SIGRTMIN if it's available. SIGRTMIN is the lowest - _available_ realtime signal, not the lowest supported; glibc takes - several for its own use. */ - -#ifndef REALTIME_LO -# if defined(__SIGRTMIN) -# define REALTIME_LO __SIGRTMIN -# define REALTIME_HI (__SIGRTMAX + 1) -# elif defined(SIGRTMIN) -# define REALTIME_LO SIGRTMIN -# define REALTIME_HI (SIGRTMAX + 1) -# endif -#endif - -/* This table must match in order and size the signals in enum - gdb_signal. */ - -static const struct { - const char *symbol; - const char *name; - const char *string; - } signals [] = -{ -#define SET(symbol, constant, name, string) { #symbol, name, string }, -#include "gdb/signals.def" -#undef SET -}; - -const char * -gdb_signal_to_symbol_string (enum gdb_signal sig) -{ - gdb_assert ((int) sig >= GDB_SIGNAL_FIRST && (int) sig <= GDB_SIGNAL_LAST); - - return signals[sig].symbol; -} - -/* Return the string for a signal. */ -const char * -gdb_signal_to_string (enum gdb_signal sig) -{ - if ((int) sig >= GDB_SIGNAL_FIRST && (int) sig <= GDB_SIGNAL_LAST) - return signals[sig].string; - else - return signals[GDB_SIGNAL_UNKNOWN].string; -} - -/* Return the name for a signal. */ -const char * -gdb_signal_to_name (enum gdb_signal sig) -{ - if ((int) sig >= GDB_SIGNAL_FIRST && (int) sig <= GDB_SIGNAL_LAST - && signals[sig].name != NULL) - return signals[sig].name; - else - /* I think the code which prints this will always print it along - with the string, so no need to be verbose (very old comment). */ - return "?"; -} - -/* Given a name, return its signal. */ -enum gdb_signal -gdb_signal_from_name (const char *name) -{ - enum gdb_signal sig; - - /* It's possible we also should allow "SIGCLD" as well as "SIGCHLD" - for GDB_SIGNAL_SIGCHLD. SIGIOT, on the other hand, is more - questionable; seems like by now people should call it SIGABRT - instead. */ - - /* This ugly cast brought to you by the native VAX compiler. */ - for (sig = GDB_SIGNAL_HUP; - sig < GDB_SIGNAL_LAST; - sig = (enum gdb_signal) ((int) sig + 1)) - if (signals[sig].name != NULL - && strcmp (name, signals[sig].name) == 0) - return sig; - return GDB_SIGNAL_UNKNOWN; -} - -/* The following functions are to help certain targets deal - with the signal/waitstatus stuff. They could just as well be in - a file called native-utils.c or unixwaitstatus-utils.c or whatever. */ - -/* Convert host signal to our signals. */ -enum gdb_signal -gdb_signal_from_host (int hostsig) -{ - /* A switch statement would make sense but would require special - kludges to deal with the cases where more than one signal has the - same number. Signals are ordered ANSI-standard signals first, - other signals second, with signals in each block ordered by their - numerical values on a typical POSIX platform. */ - - if (hostsig == 0) - return GDB_SIGNAL_0; - - /* SIGINT, SIGILL, SIGABRT, SIGFPE, SIGSEGV and SIGTERM - are ANSI-standard signals and are always available. */ - if (hostsig == SIGINT) - return GDB_SIGNAL_INT; - if (hostsig == SIGILL) - return GDB_SIGNAL_ILL; - if (hostsig == SIGABRT) - return GDB_SIGNAL_ABRT; - if (hostsig == SIGFPE) - return GDB_SIGNAL_FPE; - if (hostsig == SIGSEGV) - return GDB_SIGNAL_SEGV; - if (hostsig == SIGTERM) - return GDB_SIGNAL_TERM; - - /* All other signals need preprocessor conditionals. */ -#if defined (SIGHUP) - if (hostsig == SIGHUP) - return GDB_SIGNAL_HUP; -#endif -#if defined (SIGQUIT) - if (hostsig == SIGQUIT) - return GDB_SIGNAL_QUIT; -#endif -#if defined (SIGTRAP) - if (hostsig == SIGTRAP) - return GDB_SIGNAL_TRAP; -#endif -#if defined (SIGEMT) - if (hostsig == SIGEMT) - return GDB_SIGNAL_EMT; -#endif -#if defined (SIGKILL) - if (hostsig == SIGKILL) - return GDB_SIGNAL_KILL; -#endif -#if defined (SIGBUS) - if (hostsig == SIGBUS) - return GDB_SIGNAL_BUS; -#endif -#if defined (SIGSYS) - if (hostsig == SIGSYS) - return GDB_SIGNAL_SYS; -#endif -#if defined (SIGPIPE) - if (hostsig == SIGPIPE) - return GDB_SIGNAL_PIPE; -#endif -#if defined (SIGALRM) - if (hostsig == SIGALRM) - return GDB_SIGNAL_ALRM; -#endif -#if defined (SIGUSR1) - if (hostsig == SIGUSR1) - return GDB_SIGNAL_USR1; -#endif -#if defined (SIGUSR2) - if (hostsig == SIGUSR2) - return GDB_SIGNAL_USR2; -#endif -#if defined (SIGCLD) - if (hostsig == SIGCLD) - return GDB_SIGNAL_CHLD; -#endif -#if defined (SIGCHLD) - if (hostsig == SIGCHLD) - return GDB_SIGNAL_CHLD; -#endif -#if defined (SIGPWR) - if (hostsig == SIGPWR) - return GDB_SIGNAL_PWR; -#endif -#if defined (SIGWINCH) - if (hostsig == SIGWINCH) - return GDB_SIGNAL_WINCH; -#endif -#if defined (SIGURG) - if (hostsig == SIGURG) - return GDB_SIGNAL_URG; -#endif -#if defined (SIGIO) - if (hostsig == SIGIO) - return GDB_SIGNAL_IO; -#endif -#if defined (SIGPOLL) - if (hostsig == SIGPOLL) - return GDB_SIGNAL_POLL; -#endif -#if defined (SIGSTOP) - if (hostsig == SIGSTOP) - return GDB_SIGNAL_STOP; -#endif -#if defined (SIGTSTP) - if (hostsig == SIGTSTP) - return GDB_SIGNAL_TSTP; -#endif -#if defined (SIGCONT) - if (hostsig == SIGCONT) - return GDB_SIGNAL_CONT; -#endif -#if defined (SIGTTIN) - if (hostsig == SIGTTIN) - return GDB_SIGNAL_TTIN; -#endif -#if defined (SIGTTOU) - if (hostsig == SIGTTOU) - return GDB_SIGNAL_TTOU; -#endif -#if defined (SIGVTALRM) - if (hostsig == SIGVTALRM) - return GDB_SIGNAL_VTALRM; -#endif -#if defined (SIGPROF) - if (hostsig == SIGPROF) - return GDB_SIGNAL_PROF; -#endif -#if defined (SIGXCPU) - if (hostsig == SIGXCPU) - return GDB_SIGNAL_XCPU; -#endif -#if defined (SIGXFSZ) - if (hostsig == SIGXFSZ) - return GDB_SIGNAL_XFSZ; -#endif -#if defined (SIGWIND) - if (hostsig == SIGWIND) - return GDB_SIGNAL_WIND; -#endif -#if defined (SIGPHONE) - if (hostsig == SIGPHONE) - return GDB_SIGNAL_PHONE; -#endif -#if defined (SIGLOST) - if (hostsig == SIGLOST) - return GDB_SIGNAL_LOST; -#endif -#if defined (SIGWAITING) - if (hostsig == SIGWAITING) - return GDB_SIGNAL_WAITING; -#endif -#if defined (SIGCANCEL) - if (hostsig == SIGCANCEL) - return GDB_SIGNAL_CANCEL; -#endif -#if defined (SIGLWP) - if (hostsig == SIGLWP) - return GDB_SIGNAL_LWP; -#endif -#if defined (SIGDANGER) - if (hostsig == SIGDANGER) - return GDB_SIGNAL_DANGER; -#endif -#if defined (SIGGRANT) - if (hostsig == SIGGRANT) - return GDB_SIGNAL_GRANT; -#endif -#if defined (SIGRETRACT) - if (hostsig == SIGRETRACT) - return GDB_SIGNAL_RETRACT; -#endif -#if defined (SIGMSG) - if (hostsig == SIGMSG) - return GDB_SIGNAL_MSG; -#endif -#if defined (SIGSOUND) - if (hostsig == SIGSOUND) - return GDB_SIGNAL_SOUND; -#endif -#if defined (SIGSAK) - if (hostsig == SIGSAK) - return GDB_SIGNAL_SAK; -#endif -#if defined (SIGPRIO) - if (hostsig == SIGPRIO) - return GDB_SIGNAL_PRIO; -#endif - - /* Mach exceptions. Assumes that the values for EXC_ are positive! */ -#if defined (EXC_BAD_ACCESS) && defined (_NSIG) - if (hostsig == _NSIG + EXC_BAD_ACCESS) - return GDB_EXC_BAD_ACCESS; -#endif -#if defined (EXC_BAD_INSTRUCTION) && defined (_NSIG) - if (hostsig == _NSIG + EXC_BAD_INSTRUCTION) - return GDB_EXC_BAD_INSTRUCTION; -#endif -#if defined (EXC_ARITHMETIC) && defined (_NSIG) - if (hostsig == _NSIG + EXC_ARITHMETIC) - return GDB_EXC_ARITHMETIC; -#endif -#if defined (EXC_EMULATION) && defined (_NSIG) - if (hostsig == _NSIG + EXC_EMULATION) - return GDB_EXC_EMULATION; -#endif -#if defined (EXC_SOFTWARE) && defined (_NSIG) - if (hostsig == _NSIG + EXC_SOFTWARE) - return GDB_EXC_SOFTWARE; -#endif -#if defined (EXC_BREAKPOINT) && defined (_NSIG) - if (hostsig == _NSIG + EXC_BREAKPOINT) - return GDB_EXC_BREAKPOINT; -#endif - -#if defined (SIGINFO) - if (hostsig == SIGINFO) - return GDB_SIGNAL_INFO; -#endif -#if defined (SIGLIBRT) - if (hostsig == SIGLIBRT) - return GDB_SIGNAL_LIBRT; -#endif - -#if defined (REALTIME_LO) - if (hostsig >= REALTIME_LO && hostsig < REALTIME_HI) - { - /* This block of GDB_SIGNAL_REALTIME value is in order. */ - if (33 <= hostsig && hostsig <= 63) - return (enum gdb_signal) - (hostsig - 33 + (int) GDB_SIGNAL_REALTIME_33); - else if (hostsig == 32) - return GDB_SIGNAL_REALTIME_32; - else if (64 <= hostsig && hostsig <= 127) - return (enum gdb_signal) - (hostsig - 64 + (int) GDB_SIGNAL_REALTIME_64); - else - error (_("GDB bug: target.c (gdb_signal_from_host): " - "unrecognized real-time signal")); - } -#endif - - return GDB_SIGNAL_UNKNOWN; -} - -/* Convert a OURSIG (an enum gdb_signal) to the form used by the - target operating system (refered to as the ``host'') or zero if the - equivalent host signal is not available. Set/clear OURSIG_OK - accordingly. */ - -static int -do_gdb_signal_to_host (enum gdb_signal oursig, - int *oursig_ok) -{ - int retsig; - /* Silence the 'not used' warning, for targets that - do not support signals. */ - (void) retsig; - - /* Signals are ordered ANSI-standard signals first, other signals - second, with signals in each block ordered by their numerical - values on a typical POSIX platform. */ - - *oursig_ok = 1; - switch (oursig) - { - case GDB_SIGNAL_0: - return 0; - - /* SIGINT, SIGILL, SIGABRT, SIGFPE, SIGSEGV and SIGTERM - are ANSI-standard signals and are always available. */ - case GDB_SIGNAL_INT: - return SIGINT; - case GDB_SIGNAL_ILL: - return SIGILL; - case GDB_SIGNAL_ABRT: - return SIGABRT; - case GDB_SIGNAL_FPE: - return SIGFPE; - case GDB_SIGNAL_SEGV: - return SIGSEGV; - case GDB_SIGNAL_TERM: - return SIGTERM; - - /* All other signals need preprocessor conditionals. */ -#if defined (SIGHUP) - case GDB_SIGNAL_HUP: - return SIGHUP; -#endif -#if defined (SIGQUIT) - case GDB_SIGNAL_QUIT: - return SIGQUIT; -#endif -#if defined (SIGTRAP) - case GDB_SIGNAL_TRAP: - return SIGTRAP; -#endif -#if defined (SIGEMT) - case GDB_SIGNAL_EMT: - return SIGEMT; -#endif -#if defined (SIGKILL) - case GDB_SIGNAL_KILL: - return SIGKILL; -#endif -#if defined (SIGBUS) - case GDB_SIGNAL_BUS: - return SIGBUS; -#endif -#if defined (SIGSYS) - case GDB_SIGNAL_SYS: - return SIGSYS; -#endif -#if defined (SIGPIPE) - case GDB_SIGNAL_PIPE: - return SIGPIPE; -#endif -#if defined (SIGALRM) - case GDB_SIGNAL_ALRM: - return SIGALRM; -#endif -#if defined (SIGUSR1) - case GDB_SIGNAL_USR1: - return SIGUSR1; -#endif -#if defined (SIGUSR2) - case GDB_SIGNAL_USR2: - return SIGUSR2; -#endif -#if defined (SIGCHLD) || defined (SIGCLD) - case GDB_SIGNAL_CHLD: -#if defined (SIGCHLD) - return SIGCHLD; -#else - return SIGCLD; -#endif -#endif /* SIGCLD or SIGCHLD */ -#if defined (SIGPWR) - case GDB_SIGNAL_PWR: - return SIGPWR; -#endif -#if defined (SIGWINCH) - case GDB_SIGNAL_WINCH: - return SIGWINCH; -#endif -#if defined (SIGURG) - case GDB_SIGNAL_URG: - return SIGURG; -#endif -#if defined (SIGIO) - case GDB_SIGNAL_IO: - return SIGIO; -#endif -#if defined (SIGPOLL) - case GDB_SIGNAL_POLL: - return SIGPOLL; -#endif -#if defined (SIGSTOP) - case GDB_SIGNAL_STOP: - return SIGSTOP; -#endif -#if defined (SIGTSTP) - case GDB_SIGNAL_TSTP: - return SIGTSTP; -#endif -#if defined (SIGCONT) - case GDB_SIGNAL_CONT: - return SIGCONT; -#endif -#if defined (SIGTTIN) - case GDB_SIGNAL_TTIN: - return SIGTTIN; -#endif -#if defined (SIGTTOU) - case GDB_SIGNAL_TTOU: - return SIGTTOU; -#endif -#if defined (SIGVTALRM) - case GDB_SIGNAL_VTALRM: - return SIGVTALRM; -#endif -#if defined (SIGPROF) - case GDB_SIGNAL_PROF: - return SIGPROF; -#endif -#if defined (SIGXCPU) - case GDB_SIGNAL_XCPU: - return SIGXCPU; -#endif -#if defined (SIGXFSZ) - case GDB_SIGNAL_XFSZ: - return SIGXFSZ; -#endif -#if defined (SIGWIND) - case GDB_SIGNAL_WIND: - return SIGWIND; -#endif -#if defined (SIGPHONE) - case GDB_SIGNAL_PHONE: - return SIGPHONE; -#endif -#if defined (SIGLOST) - case GDB_SIGNAL_LOST: - return SIGLOST; -#endif -#if defined (SIGWAITING) - case GDB_SIGNAL_WAITING: - return SIGWAITING; -#endif -#if defined (SIGCANCEL) - case GDB_SIGNAL_CANCEL: - return SIGCANCEL; -#endif -#if defined (SIGLWP) - case GDB_SIGNAL_LWP: - return SIGLWP; -#endif -#if defined (SIGDANGER) - case GDB_SIGNAL_DANGER: - return SIGDANGER; -#endif -#if defined (SIGGRANT) - case GDB_SIGNAL_GRANT: - return SIGGRANT; -#endif -#if defined (SIGRETRACT) - case GDB_SIGNAL_RETRACT: - return SIGRETRACT; -#endif -#if defined (SIGMSG) - case GDB_SIGNAL_MSG: - return SIGMSG; -#endif -#if defined (SIGSOUND) - case GDB_SIGNAL_SOUND: - return SIGSOUND; -#endif -#if defined (SIGSAK) - case GDB_SIGNAL_SAK: - return SIGSAK; -#endif -#if defined (SIGPRIO) - case GDB_SIGNAL_PRIO: - return SIGPRIO; -#endif - - /* Mach exceptions. Assumes that the values for EXC_ are positive! */ -#if defined (EXC_BAD_ACCESS) && defined (_NSIG) - case GDB_EXC_BAD_ACCESS: - return _NSIG + EXC_BAD_ACCESS; -#endif -#if defined (EXC_BAD_INSTRUCTION) && defined (_NSIG) - case GDB_EXC_BAD_INSTRUCTION: - return _NSIG + EXC_BAD_INSTRUCTION; -#endif -#if defined (EXC_ARITHMETIC) && defined (_NSIG) - case GDB_EXC_ARITHMETIC: - return _NSIG + EXC_ARITHMETIC; -#endif -#if defined (EXC_EMULATION) && defined (_NSIG) - case GDB_EXC_EMULATION: - return _NSIG + EXC_EMULATION; -#endif -#if defined (EXC_SOFTWARE) && defined (_NSIG) - case GDB_EXC_SOFTWARE: - return _NSIG + EXC_SOFTWARE; -#endif -#if defined (EXC_BREAKPOINT) && defined (_NSIG) - case GDB_EXC_BREAKPOINT: - return _NSIG + EXC_BREAKPOINT; -#endif - -#if defined (SIGINFO) - case GDB_SIGNAL_INFO: - return SIGINFO; -#endif -#if defined (SIGLIBRT) - case GDB_SIGNAL_LIBRT: - return SIGLIBRT; -#endif - - default: -#if defined (REALTIME_LO) - retsig = 0; - - if (oursig >= GDB_SIGNAL_REALTIME_33 - && oursig <= GDB_SIGNAL_REALTIME_63) - { - /* This block of signals is continuous, and - GDB_SIGNAL_REALTIME_33 is 33 by definition. */ - retsig = (int) oursig - (int) GDB_SIGNAL_REALTIME_33 + 33; - } - else if (oursig == GDB_SIGNAL_REALTIME_32) - { - /* GDB_SIGNAL_REALTIME_32 isn't contiguous with - GDB_SIGNAL_REALTIME_33. It is 32 by definition. */ - retsig = 32; - } - else if (oursig >= GDB_SIGNAL_REALTIME_64 - && oursig <= GDB_SIGNAL_REALTIME_127) - { - /* This block of signals is continuous, and - GDB_SIGNAL_REALTIME_64 is 64 by definition. */ - retsig = (int) oursig - (int) GDB_SIGNAL_REALTIME_64 + 64; - } - - if (retsig >= REALTIME_LO && retsig < REALTIME_HI) - return retsig; -#endif - - *oursig_ok = 0; - return 0; - } -} - -int -gdb_signal_to_host_p (enum gdb_signal oursig) -{ - int oursig_ok; - do_gdb_signal_to_host (oursig, &oursig_ok); - return oursig_ok; -} - -int -gdb_signal_to_host (enum gdb_signal oursig) -{ - int oursig_ok; - int targ_signo = do_gdb_signal_to_host (oursig, &oursig_ok); - if (!oursig_ok) - { - /* The user might be trying to do "signal SIGSAK" where this system - doesn't have SIGSAK. */ - warning (_("Signal %s does not exist on this system."), - gdb_signal_to_name (oursig)); - return 0; - } - else - return targ_signo; -} diff -Nru gdb-9.1/gdb/gdbsupport/signals-state-save-restore.c gdb-10.2/gdb/gdbsupport/signals-state-save-restore.c --- gdb-9.1/gdb/gdbsupport/signals-state-save-restore.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/signals-state-save-restore.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,114 +0,0 @@ -/* Copyright (C) 2016-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "common-defs.h" -#include "signals-state-save-restore.h" -#include "gdbsupport/gdb-sigmask.h" - -#include <signal.h> - -/* The original signal actions and mask. */ - -#ifdef HAVE_SIGACTION -static struct sigaction original_signal_actions[NSIG]; - -static sigset_t original_signal_mask; -#endif - -/* See signals-state-save-restore.h. */ - -void -save_original_signals_state (bool quiet) -{ -#ifdef HAVE_SIGACTION - int i; - int res; - - res = gdb_sigmask (0, NULL, &original_signal_mask); - if (res == -1) - perror_with_name (("sigprocmask")); - - bool found_preinstalled = false; - - for (i = 1; i < NSIG; i++) - { - struct sigaction *oldact = &original_signal_actions[i]; - - res = sigaction (i, NULL, oldact); - if (res == -1 && errno == EINVAL) - { - /* Some signal numbers in the range are invalid. */ - continue; - } - else if (res == -1) - perror_with_name (("sigaction")); - - /* If we find a custom signal handler already installed, then - this function was called too late. This is a warning instead - of an internal error because this can also happen if you - LD_PRELOAD a library that installs a signal handler early via - __attribute__((constructor)), like libSegFault.so. */ - if (!quiet - && oldact->sa_handler != SIG_DFL - && oldact->sa_handler != SIG_IGN) - { - found_preinstalled = true; - - /* Use raw fprintf here because we're being called in early - startup, before GDB's filtered streams are created. */ - fprintf (stderr, - _("warning: Found custom handler for signal " - "%d (%s) preinstalled.\n"), i, - strsignal (i)); - } - } - - if (found_preinstalled) - { - fprintf (stderr, _("\ -Some signal dispositions inherited from the environment (SIG_DFL/SIG_IGN)\n\ -won't be propagated to spawned programs.\n")); - } -#endif -} - -/* See signals-state-save-restore.h. */ - -void -restore_original_signals_state (void) -{ -#ifdef HAVE_SIGACTION - int i; - int res; - - for (i = 1; i < NSIG; i++) - { - res = sigaction (i, &original_signal_actions[i], NULL); - if (res == -1 && errno == EINVAL) - { - /* Some signal numbers in the range are invalid. */ - continue; - } - else if (res == -1) - perror_with_name (("sigaction")); - } - - res = gdb_sigmask (SIG_SETMASK, &original_signal_mask, NULL); - if (res == -1) - perror_with_name (("sigprocmask")); -#endif -} diff -Nru gdb-9.1/gdb/gdbsupport/signals-state-save-restore.h gdb-10.2/gdb/gdbsupport/signals-state-save-restore.h --- gdb-9.1/gdb/gdbsupport/signals-state-save-restore.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/signals-state-save-restore.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,40 +0,0 @@ -/* Copyright (C) 2016-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef COMMON_SIGNALS_STATE_SAVE_RESTORE_H -#define COMMON_SIGNALS_STATE_SAVE_RESTORE_H - -/* Save/restore the signal actions of all signals, and the signal - mask. - - Since the exec family of functions does not reset the signal - disposition of signals set to SIG_IGN, nor does it reset the signal - mask, in order to be transparent, when spawning new child processes - to debug (with "run", etc.), we must reset signal actions and mask - back to what was originally inherited from gdb/gdbserver's parent, - just before execing the target program to debug. */ - -/* Save the signal state of all signals. If !QUIET, warn if we detect - a custom signal handler preinstalled. */ - -extern void save_original_signals_state (bool quiet); - -/* Restore the signal state of all signals. */ - -extern void restore_original_signals_state (void); - -#endif /* COMMON_SIGNALS_STATE_SAVE_RESTORE_H */ diff -Nru gdb-9.1/gdb/gdbsupport/symbol.h gdb-10.2/gdb/gdbsupport/symbol.h --- gdb-9.1/gdb/gdbsupport/symbol.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/symbol.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,37 +0,0 @@ -/* Declarations of common symbol functions. - - Copyright (C) 2014-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef COMMON_SYMBOL_H -#define COMMON_SYMBOL_H - -struct objfile; - -/* Find a symbol that matches NAME. Limit the search to OBJFILE if - OBJFILE is non-NULL and the implementation supports limiting the - search to specific object files. NAME may be mangled or demangled. - If a match is found, store the matching symbol's address in ADDR - and return zero. Returns nonzero if no symbol matching NAME is - found. Raise an exception if OBJFILE is non-NULL and the - implementation does not support limiting searches to specific - object files. This function must be provided by the client. */ - -extern int find_minimal_symbol_address (const char *name, CORE_ADDR *addr, - struct objfile *objfile); - -#endif /* COMMON_SYMBOL_H */ diff -Nru gdb-9.1/gdb/gdbsupport/tdesc.c gdb-10.2/gdb/gdbsupport/tdesc.c --- gdb-9.1/gdb/gdbsupport/tdesc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/tdesc.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,401 +0,0 @@ -/* Target description support for GDB. - - Copyright (C) 2018-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "common-defs.h" -#include "gdbsupport/tdesc.h" - -tdesc_reg::tdesc_reg (struct tdesc_feature *feature, const std::string &name_, - int regnum, int save_restore_, const char *group_, - int bitsize_, const char *type_) - : name (name_), target_regnum (regnum), - save_restore (save_restore_), - group (group_ != NULL ? group_ : ""), - bitsize (bitsize_), - type (type_ != NULL ? type_ : "<unknown>") -{ - /* If the register's type is target-defined, look it up now. We may not - have easy access to the containing feature when we want it later. */ - tdesc_type = tdesc_named_type (feature, type.c_str ()); -} - -/* Predefined types. */ -static tdesc_type_builtin tdesc_predefined_types[] = -{ - { "bool", TDESC_TYPE_BOOL }, - { "int8", TDESC_TYPE_INT8 }, - { "int16", TDESC_TYPE_INT16 }, - { "int32", TDESC_TYPE_INT32 }, - { "int64", TDESC_TYPE_INT64 }, - { "int128", TDESC_TYPE_INT128 }, - { "uint8", TDESC_TYPE_UINT8 }, - { "uint16", TDESC_TYPE_UINT16 }, - { "uint32", TDESC_TYPE_UINT32 }, - { "uint64", TDESC_TYPE_UINT64 }, - { "uint128", TDESC_TYPE_UINT128 }, - { "code_ptr", TDESC_TYPE_CODE_PTR }, - { "data_ptr", TDESC_TYPE_DATA_PTR }, - { "ieee_half", TDESC_TYPE_IEEE_HALF }, - { "ieee_single", TDESC_TYPE_IEEE_SINGLE }, - { "ieee_double", TDESC_TYPE_IEEE_DOUBLE }, - { "arm_fpa_ext", TDESC_TYPE_ARM_FPA_EXT }, - { "i387_ext", TDESC_TYPE_I387_EXT } -}; - -void tdesc_feature::accept (tdesc_element_visitor &v) const -{ - v.visit_pre (this); - - for (const tdesc_type_up &type : types) - type->accept (v); - - for (const tdesc_reg_up ® : registers) - reg->accept (v); - - v.visit_post (this); -} - -bool tdesc_feature::operator== (const tdesc_feature &other) const -{ - if (name != other.name) - return false; - - if (registers.size () != other.registers.size ()) - return false; - - for (int ix = 0; ix < registers.size (); ix++) - { - const tdesc_reg_up ®1 = registers[ix]; - const tdesc_reg_up ®2 = other.registers[ix]; - - if (reg1 != reg2 && *reg1 != *reg2) - return false; - } - - if (types.size () != other.types.size ()) - return false; - - for (int ix = 0; ix < types.size (); ix++) - { - const tdesc_type_up &type1 = types[ix]; - const tdesc_type_up &type2 = other.types[ix]; - - if (type1 != type2 && *type1 != *type2) - return false; - } - - return true; -} - -/* Lookup a predefined type. */ - -static struct tdesc_type * -tdesc_predefined_type (enum tdesc_type_kind kind) -{ - for (int ix = 0; ix < ARRAY_SIZE (tdesc_predefined_types); ix++) - if (tdesc_predefined_types[ix].kind == kind) - return &tdesc_predefined_types[ix]; - - gdb_assert_not_reached ("bad predefined tdesc type"); -} - -/* See gdbsupport/tdesc.h. */ - -struct tdesc_type * -tdesc_named_type (const struct tdesc_feature *feature, const char *id) -{ - /* First try target-defined types. */ - for (const tdesc_type_up &type : feature->types) - if (type->name == id) - return type.get (); - - /* Next try the predefined types. */ - for (int ix = 0; ix < ARRAY_SIZE (tdesc_predefined_types); ix++) - if (tdesc_predefined_types[ix].name == id) - return &tdesc_predefined_types[ix]; - - return NULL; -} - -/* See gdbsupport/tdesc.h. */ - -void -tdesc_create_reg (struct tdesc_feature *feature, const char *name, - int regnum, int save_restore, const char *group, - int bitsize, const char *type) -{ - tdesc_reg *reg = new tdesc_reg (feature, name, regnum, save_restore, - group, bitsize, type); - - feature->registers.emplace_back (reg); -} - -/* See gdbsupport/tdesc.h. */ - -struct tdesc_type * -tdesc_create_vector (struct tdesc_feature *feature, const char *name, - struct tdesc_type *field_type, int count) -{ - tdesc_type_vector *type = new tdesc_type_vector (name, field_type, count); - feature->types.emplace_back (type); - - return type; -} - -/* See gdbsupport/tdesc.h. */ - -tdesc_type_with_fields * -tdesc_create_struct (struct tdesc_feature *feature, const char *name) -{ - tdesc_type_with_fields *type - = new tdesc_type_with_fields (name, TDESC_TYPE_STRUCT); - feature->types.emplace_back (type); - - return type; -} - -/* See gdbsupport/tdesc.h. */ - -void -tdesc_set_struct_size (tdesc_type_with_fields *type, int size) -{ - gdb_assert (type->kind == TDESC_TYPE_STRUCT); - gdb_assert (size > 0); - type->size = size; -} - -/* See gdbsupport/tdesc.h. */ - -tdesc_type_with_fields * -tdesc_create_union (struct tdesc_feature *feature, const char *name) -{ - tdesc_type_with_fields *type - = new tdesc_type_with_fields (name, TDESC_TYPE_UNION); - feature->types.emplace_back (type); - - return type; -} - -/* See gdbsupport/tdesc.h. */ - -tdesc_type_with_fields * -tdesc_create_flags (struct tdesc_feature *feature, const char *name, - int size) -{ - gdb_assert (size > 0); - - tdesc_type_with_fields *type - = new tdesc_type_with_fields (name, TDESC_TYPE_FLAGS, size); - feature->types.emplace_back (type); - - return type; -} - -/* See gdbsupport/tdesc.h. */ - -tdesc_type_with_fields * -tdesc_create_enum (struct tdesc_feature *feature, const char *name, - int size) -{ - gdb_assert (size > 0); - - tdesc_type_with_fields *type - = new tdesc_type_with_fields (name, TDESC_TYPE_ENUM, size); - feature->types.emplace_back (type); - - return type; -} - -/* See gdbsupport/tdesc.h. */ - -void -tdesc_add_field (tdesc_type_with_fields *type, const char *field_name, - struct tdesc_type *field_type) -{ - gdb_assert (type->kind == TDESC_TYPE_UNION - || type->kind == TDESC_TYPE_STRUCT); - - /* Initialize start and end so we know this is not a bit-field - when we print-c-tdesc. */ - type->fields.emplace_back (field_name, field_type, -1, -1); -} - -/* See gdbsupport/tdesc.h. */ - -void -tdesc_add_typed_bitfield (tdesc_type_with_fields *type, const char *field_name, - int start, int end, struct tdesc_type *field_type) -{ - gdb_assert (type->kind == TDESC_TYPE_STRUCT - || type->kind == TDESC_TYPE_FLAGS); - gdb_assert (start >= 0 && end >= start); - - type->fields.emplace_back (field_name, field_type, start, end); -} - -/* See gdbsupport/tdesc.h. */ - -void -tdesc_add_bitfield (tdesc_type_with_fields *type, const char *field_name, - int start, int end) -{ - struct tdesc_type *field_type; - - gdb_assert (start >= 0 && end >= start); - - if (type->size > 4) - field_type = tdesc_predefined_type (TDESC_TYPE_UINT64); - else - field_type = tdesc_predefined_type (TDESC_TYPE_UINT32); - - tdesc_add_typed_bitfield (type, field_name, start, end, field_type); -} - -/* See gdbsupport/tdesc.h. */ - -void -tdesc_add_flag (tdesc_type_with_fields *type, int start, - const char *flag_name) -{ - gdb_assert (type->kind == TDESC_TYPE_FLAGS - || type->kind == TDESC_TYPE_STRUCT); - - type->fields.emplace_back (flag_name, - tdesc_predefined_type (TDESC_TYPE_BOOL), - start, start); -} - -/* See gdbsupport/tdesc.h. */ - -void -tdesc_add_enum_value (tdesc_type_with_fields *type, int value, - const char *name) -{ - gdb_assert (type->kind == TDESC_TYPE_ENUM); - type->fields.emplace_back (name, - tdesc_predefined_type (TDESC_TYPE_INT32), - value, -1); -} - -void print_xml_feature::visit_pre (const tdesc_feature *e) -{ - string_appendf (*m_buffer, "<feature name=\"%s\">\n", e->name.c_str ()); -} - -void print_xml_feature::visit_post (const tdesc_feature *e) -{ - string_appendf (*m_buffer, "</feature>\n"); -} - -void print_xml_feature::visit (const tdesc_type_builtin *t) -{ - error (_("xml output is not supported for type \"%s\"."), t->name.c_str ()); -} - -void print_xml_feature::visit (const tdesc_type_vector *t) -{ - string_appendf (*m_buffer, "<vector id=\"%s\" type=\"%s\" count=\"%d\"/>\n", - t->name.c_str (), t->element_type->name.c_str (), t->count); -} - -void print_xml_feature::visit (const tdesc_type_with_fields *t) -{ - const static char *types[] = { "struct", "union", "flags", "enum" }; - - gdb_assert (t->kind >= TDESC_TYPE_STRUCT && t->kind <= TDESC_TYPE_ENUM); - - string_appendf (*m_buffer, - "<%s id=\"%s\"", types[t->kind - TDESC_TYPE_STRUCT], - t->name.c_str ()); - - switch (t->kind) - { - case TDESC_TYPE_STRUCT: - case TDESC_TYPE_FLAGS: - if (t->size > 0) - string_appendf (*m_buffer, " size=\"%d\"", t->size); - string_appendf (*m_buffer, ">\n"); - - for (const tdesc_type_field &f : t->fields) - { - string_appendf (*m_buffer, " <field name=\"%s\" ", f.name.c_str ()); - if (f.start == -1) - string_appendf (*m_buffer, "type=\"%s\"/>\n", - f.type->name.c_str ()); - else - string_appendf (*m_buffer, "start=\"%d\" end=\"%d\"/>\n", f.start, - f.end); - } - break; - - case TDESC_TYPE_ENUM: - string_appendf (*m_buffer, ">\n"); - for (const tdesc_type_field &f : t->fields) - string_appendf (*m_buffer, " <field name=\"%s\" start=\"%d\"/>\n", - f.name.c_str (), f.start); - break; - - case TDESC_TYPE_UNION: - string_appendf (*m_buffer, ">\n"); - for (const tdesc_type_field &f : t->fields) - string_appendf (*m_buffer, " <field name=\"%s\" type=\"%s\"/>\n", - f.name.c_str (), f.type->name.c_str ()); - break; - - default: - error (_("xml output is not supported for type \"%s\"."), - t->name.c_str ()); - } - - string_appendf (*m_buffer, "</%s>\n", types[t->kind - TDESC_TYPE_STRUCT]); -} - -void print_xml_feature::visit (const tdesc_reg *r) -{ - string_appendf (*m_buffer, - "<reg name=\"%s\" bitsize=\"%d\" type=\"%s\" regnum=\"%ld\"", - r->name.c_str (), r->bitsize, r->type.c_str (), - r->target_regnum); - - if (r->group.length () > 0) - string_appendf (*m_buffer, " group=\"%s\"", r->group.c_str ()); - - if (r->save_restore == 0) - string_appendf (*m_buffer, " save-restore=\"no\""); - - string_appendf (*m_buffer, "/>\n"); -} - -void print_xml_feature::visit_pre (const target_desc *e) -{ -#ifndef IN_PROCESS_AGENT - string_appendf (*m_buffer, "<?xml version=\"1.0\"?>\n"); - string_appendf (*m_buffer, "<!DOCTYPE target SYSTEM \"gdb-target.dtd\">\n"); - string_appendf (*m_buffer, "<target>\n<architecture>%s</architecture>\n", - tdesc_architecture_name (e)); - - const char *osabi = tdesc_osabi_name (e); - if (osabi != nullptr) - string_appendf (*m_buffer, "<osabi>%s</osabi>", osabi); -#endif -} - -void print_xml_feature::visit_post (const target_desc *e) -{ - string_appendf (*m_buffer, "</target>\n"); -} diff -Nru gdb-9.1/gdb/gdbsupport/tdesc.h gdb-10.2/gdb/gdbsupport/tdesc.h --- gdb-9.1/gdb/gdbsupport/tdesc.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/tdesc.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,408 +0,0 @@ -/* Copyright (C) 2006-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef COMMON_TDESC_H -#define COMMON_TDESC_H - -struct tdesc_feature; -struct tdesc_type; -struct tdesc_type_builtin; -struct tdesc_type_vector; -struct tdesc_type_with_fields; -struct tdesc_reg; -struct target_desc; - -/* The interface to visit different elements of target description. */ - -class tdesc_element_visitor -{ -public: - virtual void visit_pre (const target_desc *e) - {} - - virtual void visit_post (const target_desc *e) - {} - - virtual void visit_pre (const tdesc_feature *e) - {} - - virtual void visit_post (const tdesc_feature *e) - {} - - virtual void visit (const tdesc_type_builtin *e) - {} - - virtual void visit (const tdesc_type_vector *e) - {} - - virtual void visit (const tdesc_type_with_fields *e) - {} - - virtual void visit (const tdesc_reg *e) - {} -}; - -class tdesc_element -{ -public: - virtual void accept (tdesc_element_visitor &v) const = 0; -}; - -/* An individual register from a target description. */ - -struct tdesc_reg : tdesc_element -{ - tdesc_reg (struct tdesc_feature *feature, const std::string &name_, - int regnum, int save_restore_, const char *group_, - int bitsize_, const char *type_); - - virtual ~tdesc_reg () = default; - - DISABLE_COPY_AND_ASSIGN (tdesc_reg); - - /* The name of this register. In standard features, it may be - recognized by the architecture support code, or it may be purely - for the user. */ - std::string name; - - /* The register number used by this target to refer to this - register. This is used for remote p/P packets and to determine - the ordering of registers in the remote g/G packets. */ - long target_regnum; - - /* If this flag is set, GDB should save and restore this register - around calls to an inferior function. */ - int save_restore; - - /* The name of the register group containing this register, or empty - if the group should be automatically determined from the - register's type. If this is "general", "float", or "vector", the - corresponding "info" command should display this register's - value. It can be an arbitrary string, but should be limited to - alphanumeric characters and internal hyphens. Currently other - strings are ignored (treated as empty). */ - std::string group; - - /* The size of the register, in bits. */ - int bitsize; - - /* The type of the register. This string corresponds to either - a named type from the target description or a predefined - type from GDB. */ - std::string type; - - /* The target-described type corresponding to TYPE, if found. */ - struct tdesc_type *tdesc_type; - - void accept (tdesc_element_visitor &v) const override - { - v.visit (this); - } - - bool operator== (const tdesc_reg &other) const - { - return (name == other.name - && target_regnum == other.target_regnum - && save_restore == other.save_restore - && bitsize == other.bitsize - && group == other.group - && type == other.type); - } - - bool operator!= (const tdesc_reg &other) const - { - return !(*this == other); - } -}; - -typedef std::unique_ptr<tdesc_reg> tdesc_reg_up; - -enum tdesc_type_kind -{ - /* Predefined types. */ - TDESC_TYPE_BOOL, - TDESC_TYPE_INT8, - TDESC_TYPE_INT16, - TDESC_TYPE_INT32, - TDESC_TYPE_INT64, - TDESC_TYPE_INT128, - TDESC_TYPE_UINT8, - TDESC_TYPE_UINT16, - TDESC_TYPE_UINT32, - TDESC_TYPE_UINT64, - TDESC_TYPE_UINT128, - TDESC_TYPE_CODE_PTR, - TDESC_TYPE_DATA_PTR, - TDESC_TYPE_IEEE_HALF, - TDESC_TYPE_IEEE_SINGLE, - TDESC_TYPE_IEEE_DOUBLE, - TDESC_TYPE_ARM_FPA_EXT, - TDESC_TYPE_I387_EXT, - - /* Types defined by a target feature. */ - TDESC_TYPE_VECTOR, - TDESC_TYPE_STRUCT, - TDESC_TYPE_UNION, - TDESC_TYPE_FLAGS, - TDESC_TYPE_ENUM -}; - -struct tdesc_type : tdesc_element -{ - tdesc_type (const std::string &name_, enum tdesc_type_kind kind_) - : name (name_), kind (kind_) - {} - - virtual ~tdesc_type () = default; - - DISABLE_COPY_AND_ASSIGN (tdesc_type); - - /* The name of this type. */ - std::string name; - - /* Identify the kind of this type. */ - enum tdesc_type_kind kind; - - bool operator== (const tdesc_type &other) const - { - return name == other.name && kind == other.kind; - } - - bool operator!= (const tdesc_type &other) const - { - return !(*this == other); - } -}; - -typedef std::unique_ptr<tdesc_type> tdesc_type_up; - -struct tdesc_type_builtin : tdesc_type -{ - tdesc_type_builtin (const std::string &name, enum tdesc_type_kind kind) - : tdesc_type (name, kind) - {} - - void accept (tdesc_element_visitor &v) const override - { - v.visit (this); - } -}; - -/* tdesc_type for vector types. */ - -struct tdesc_type_vector : tdesc_type -{ - tdesc_type_vector (const std::string &name, tdesc_type *element_type_, - int count_) - : tdesc_type (name, TDESC_TYPE_VECTOR), - element_type (element_type_), count (count_) - {} - - void accept (tdesc_element_visitor &v) const override - { - v.visit (this); - } - - struct tdesc_type *element_type; - int count; -}; - -/* A named type from a target description. */ - -struct tdesc_type_field -{ - tdesc_type_field (const std::string &name_, tdesc_type *type_, - int start_, int end_) - : name (name_), type (type_), start (start_), end (end_) - {} - - std::string name; - struct tdesc_type *type; - /* For non-enum-values, either both are -1 (non-bitfield), or both are - not -1 (bitfield). For enum values, start is the value (which could be - -1), end is -1. */ - int start, end; -}; - -/* tdesc_type for struct, union, flags, and enum types. */ - -struct tdesc_type_with_fields : tdesc_type -{ - tdesc_type_with_fields (const std::string &name, tdesc_type_kind kind, - int size_ = 0) - : tdesc_type (name, kind), size (size_) - {} - - void accept (tdesc_element_visitor &v) const override - { - v.visit (this); - } - - std::vector<tdesc_type_field> fields; - int size; -}; - -/* A feature from a target description. Each feature is a collection - of other elements, e.g. registers and types. */ - -struct tdesc_feature : tdesc_element -{ - tdesc_feature (const std::string &name_) - : name (name_) - {} - - virtual ~tdesc_feature () = default; - - DISABLE_COPY_AND_ASSIGN (tdesc_feature); - - /* The name of this feature. It may be recognized by the architecture - support code. */ - std::string name; - - /* The registers associated with this feature. */ - std::vector<tdesc_reg_up> registers; - - /* The types associated with this feature. */ - std::vector<tdesc_type_up> types; - - void accept (tdesc_element_visitor &v) const override; - - bool operator== (const tdesc_feature &other) const; - - bool operator!= (const tdesc_feature &other) const - { - return !(*this == other); - } -}; - -typedef std::unique_ptr<tdesc_feature> tdesc_feature_up; - -/* Allocate a new target_desc. */ -target_desc *allocate_target_description (void); - -/* Set TARGET_DESC's architecture by NAME. */ -void set_tdesc_architecture (target_desc *target_desc, - const char *name); - -/* Return the architecture associated with this target description as a string, - or NULL if no architecture was specified. */ -const char *tdesc_architecture_name (const struct target_desc *target_desc); - -/* Set TARGET_DESC's osabi by NAME. */ -void set_tdesc_osabi (target_desc *target_desc, const char *name); - -/* Return the osabi associated with this target description as a string, - or NULL if no osabi was specified. */ -const char *tdesc_osabi_name (const struct target_desc *target_desc); - -/* Return the type associated with ID in the context of FEATURE, or - NULL if none. */ -struct tdesc_type *tdesc_named_type (const struct tdesc_feature *feature, - const char *id); - -/* Return the created feature named NAME in target description TDESC. */ -struct tdesc_feature *tdesc_create_feature (struct target_desc *tdesc, - const char *name); - -/* Return the created vector tdesc_type named NAME in FEATURE. */ -struct tdesc_type *tdesc_create_vector (struct tdesc_feature *feature, - const char *name, - struct tdesc_type *field_type, - int count); - -/* Return the created struct tdesc_type named NAME in FEATURE. */ -tdesc_type_with_fields *tdesc_create_struct (struct tdesc_feature *feature, - const char *name); - -/* Return the created union tdesc_type named NAME in FEATURE. */ -tdesc_type_with_fields *tdesc_create_union (struct tdesc_feature *feature, - const char *name); - -/* Return the created flags tdesc_type named NAME in FEATURE. */ -tdesc_type_with_fields *tdesc_create_flags (struct tdesc_feature *feature, - const char *name, - int size); - -/* Return the created enum tdesc_type named NAME in FEATURE. */ -tdesc_type_with_fields *tdesc_create_enum (struct tdesc_feature *feature, - const char *name, - int size); - -/* Add a new field to TYPE. FIELD_NAME is its name, and FIELD_TYPE is - its type. */ -void tdesc_add_field (tdesc_type_with_fields *type, const char *field_name, - struct tdesc_type *field_type); - -/* Add a new bitfield to TYPE, with range START to END. FIELD_NAME is its name, - and FIELD_TYPE is its type. */ -void tdesc_add_typed_bitfield (tdesc_type_with_fields *type, - const char *field_name, - int start, int end, - struct tdesc_type *field_type); - -/* Set the total length of TYPE. Structs which contain bitfields may - omit the reserved bits, so the end of the last field may not - suffice. */ -void tdesc_set_struct_size (tdesc_type_with_fields *type, int size); - -/* Add a new untyped bitfield to TYPE. - Untyped bitfields become either uint32 or uint64 depending on the size - of the underlying type. */ -void tdesc_add_bitfield (tdesc_type_with_fields *type, const char *field_name, - int start, int end); - -/* A flag is just a typed(bool) single-bit bitfield. - This function is kept to minimize changes in generated files. */ -void tdesc_add_flag (tdesc_type_with_fields *type, int start, - const char *flag_name); - -/* Add field with VALUE and NAME to the enum TYPE. */ -void tdesc_add_enum_value (tdesc_type_with_fields *type, int value, - const char *name); - -/* Create a register in feature FEATURE. */ -void tdesc_create_reg (struct tdesc_feature *feature, const char *name, - int regnum, int save_restore, const char *group, - int bitsize, const char *type); - -/* Return the tdesc in string XML format. */ - -const char *tdesc_get_features_xml (const target_desc *tdesc); - -/* Print target description as xml. */ - -class print_xml_feature : public tdesc_element_visitor -{ -public: - print_xml_feature (std::string *buffer_) - : m_buffer (buffer_) - {} - - void visit_pre (const target_desc *e) override; - void visit_post (const target_desc *e) override; - void visit_pre (const tdesc_feature *e) override; - void visit_post (const tdesc_feature *e) override; - void visit (const tdesc_type_builtin *type) override; - void visit (const tdesc_type_vector *type) override; - void visit (const tdesc_type_with_fields *type) override; - void visit (const tdesc_reg *reg) override; - -private: - std::string *m_buffer; -}; - -#endif /* COMMON_TDESC_H */ diff -Nru gdb-9.1/gdb/gdbsupport/thread-pool.c gdb-10.2/gdb/gdbsupport/thread-pool.c --- gdb-9.1/gdb/gdbsupport/thread-pool.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/thread-pool.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,173 +0,0 @@ -/* Thread pool - - Copyright (C) 2019-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "common-defs.h" - -#if CXX_STD_THREAD - -#include "gdbsupport/thread-pool.h" -#include "gdbsupport/alt-stack.h" -#include "gdbsupport/block-signals.h" -#include <algorithm> -#include "diagnostics.h" - -/* On the off chance that we have the pthread library on a Windows - host, but std::thread is not using it, avoid calling - pthread_setname_np on Windows. */ -#ifndef _WIN32 -#ifdef HAVE_PTHREAD_SETNAME_NP -#define USE_PTHREAD_SETNAME_NP -#endif -#endif - -#ifdef USE_PTHREAD_SETNAME_NP - -#include <pthread.h> - -DIAGNOSTIC_PUSH -DIAGNOSTIC_IGNORE_UNUSED_FUNCTION - -/* Handle platform discrepancies in pthread_setname_np: macOS uses a - single-argument form, while Linux uses a two-argument form. This - wrapper handles the difference. */ - -static void -set_thread_name (int (*set_name) (pthread_t, const char *), const char *name) -{ - set_name (pthread_self (), name); -} - -/* The macOS man page says that pthread_setname_np returns "void", but - the headers actually declare it returning "int". */ -static void -set_thread_name (int (*set_name) (const char *), const char *name) -{ - set_name (name); -} - -DIAGNOSTIC_POP - -#endif /* USE_PTHREAD_SETNAME_NP */ - -namespace gdb -{ - -/* The thread pool detach()s its threads, so that the threads will not - prevent the process from exiting. However, it was discovered that - if any detached threads were still waiting on a condition variable, - then the condition variable's destructor would wait for the threads - to exit -- defeating the purpose. - - Allocating the thread pool on the heap and simply "leaking" it - avoids this problem. -*/ -thread_pool *thread_pool::g_thread_pool = new thread_pool (); - -thread_pool::~thread_pool () -{ - /* Because this is a singleton, we don't need to clean up. The - threads are detached so that they won't prevent process exit. - And, cleaning up here would be actively harmful in at least one - case -- see the comment by the definition of g_thread_pool. */ -} - -void -thread_pool::set_thread_count (size_t num_threads) -{ - std::lock_guard<std::mutex> guard (m_tasks_mutex); - - /* If the new size is larger, start some new threads. */ - if (m_thread_count < num_threads) - { - /* Ensure that signals used by gdb are blocked in the new - threads. */ - block_signals blocker; - for (size_t i = m_thread_count; i < num_threads; ++i) - { - std::thread thread (&thread_pool::thread_function, this); - thread.detach (); - } - } - /* If the new size is smaller, terminate some existing threads. */ - if (num_threads < m_thread_count) - { - for (size_t i = num_threads; i < m_thread_count; ++i) - m_tasks.emplace (); - m_tasks_cv.notify_all (); - } - - m_thread_count = num_threads; -} - -std::future<void> -thread_pool::post_task (std::function<void ()> func) -{ - std::packaged_task<void ()> t (func); - std::future<void> f = t.get_future (); - - if (m_thread_count == 0) - { - /* Just execute it now. */ - t (); - } - else - { - std::lock_guard<std::mutex> guard (m_tasks_mutex); - m_tasks.emplace (std::move (t)); - m_tasks_cv.notify_one (); - } - return f; -} - -void -thread_pool::thread_function () -{ -#ifdef USE_PTHREAD_SETNAME_NP - /* This must be done here, because on macOS one can only set the - name of the current thread. */ - set_thread_name (pthread_setname_np, "gdb worker"); -#endif - - /* Ensure that SIGSEGV is delivered to an alternate signal - stack. */ - gdb::alternate_signal_stack signal_stack; - - while (true) - { - optional<task> t; - - { - /* We want to hold the lock while examining the task list, but - not while invoking the task function. */ - std::unique_lock<std::mutex> guard (m_tasks_mutex); - while (m_tasks.empty ()) - m_tasks_cv.wait (guard); - t = std::move (m_tasks.front()); - m_tasks.pop (); - } - - if (!t.has_value ()) - break; - (*t) (); - } -} - -} - -#endif /* CXX_STD_THREAD */ diff -Nru gdb-9.1/gdb/gdbsupport/thread-pool.h gdb-10.2/gdb/gdbsupport/thread-pool.h --- gdb-9.1/gdb/gdbsupport/thread-pool.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/thread-pool.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,90 +0,0 @@ -/* Thread pool - - Copyright (C) 2019-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef GDBSUPPORT_THREAD_POOL_H -#define GDBSUPPORT_THREAD_POOL_H - -#include <queue> -#include <thread> -#include <vector> -#include <functional> -#include <mutex> -#include <condition_variable> -#include <future> -#include "gdbsupport/gdb_optional.h" - -namespace gdb -{ - -/* A thread pool. - - There is a single global thread pool, see g_thread_pool. Tasks can - be submitted to the thread pool. They will be processed in worker - threads as time allows. */ -class thread_pool -{ -public: - /* The sole global thread pool. */ - static thread_pool *g_thread_pool; - - ~thread_pool (); - DISABLE_COPY_AND_ASSIGN (thread_pool); - - /* Set the thread count of this thread pool. By default, no threads - are created -- the thread count must be set first. */ - void set_thread_count (size_t num_threads); - - /* Return the number of executing threads. */ - size_t thread_count () const - { - return m_thread_count; - } - - /* Post a task to the thread pool. A future is returned, which can - be used to wait for the result. */ - std::future<void> post_task (std::function<void ()> func); - -private: - - thread_pool () = default; - - /* The callback for each worker thread. */ - void thread_function (); - - /* The current thread count. */ - size_t m_thread_count = 0; - - /* A convenience typedef for the type of a task. */ - typedef std::packaged_task<void ()> task; - - /* The tasks that have not been processed yet. An optional is used - to represent a task. If the optional is empty, then this means - that the receiving thread should terminate. If the optional is - non-empty, then it is an actual task to evaluate. */ - std::queue<optional<task>> m_tasks; - - /* A condition variable and mutex that are used for communication - between the main thread and the worker threads. */ - std::condition_variable m_tasks_cv; - std::mutex m_tasks_mutex; -}; - -} - -#endif /* GDBSUPPORT_THREAD_POOL_H */ diff -Nru gdb-9.1/gdb/gdbsupport/traits.h gdb-10.2/gdb/gdbsupport/traits.h --- gdb-9.1/gdb/gdbsupport/traits.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/traits.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,109 +0,0 @@ -/* Copyright (C) 2017-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef COMMON_TRAITS_H -#define COMMON_TRAITS_H - -#include <type_traits> - -/* GCC does not understand __has_feature. */ -#if !defined(__has_feature) -# define __has_feature(x) 0 -#endif - -/* HAVE_IS_TRIVIALLY_COPYABLE is defined as 1 iff - std::is_trivially_copyable is available. GCC only implemented it - in GCC 5. */ -#if (__has_feature(is_trivially_copyable) \ - || (defined __GNUC__ && __GNUC__ >= 5)) -# define HAVE_IS_TRIVIALLY_COPYABLE 1 -#endif - -/* HAVE_IS_TRIVIALLY_CONSTRUCTIBLE is defined as 1 iff - std::is_trivially_constructible is available. GCC only implemented it - in GCC 5. */ -#if (__has_feature(is_trivially_constructible) \ - || (defined __GNUC__ && __GNUC__ >= 5)) -# define HAVE_IS_TRIVIALLY_CONSTRUCTIBLE 1 -#endif - -namespace gdb { - -/* Pre C++14-safe (CWG 1558) version of C++17's std::void_t. See - <http://en.cppreference.com/w/cpp/types/void_t>. */ - -template<typename... Ts> -struct make_void { typedef void type; }; - -template<typename... Ts> -using void_t = typename make_void<Ts...>::type; - -/* A few trait helpers, mainly stolen from libstdc++. Uppercase - because "and/or", etc. are reserved keywords. */ - -template<typename Predicate> -struct Not : public std::integral_constant<bool, !Predicate::value> -{}; - -template<typename...> -struct Or; - -template<> -struct Or<> : public std::false_type -{}; - -template<typename B1> -struct Or<B1> : public B1 -{}; - -template<typename B1, typename B2> -struct Or<B1, B2> - : public std::conditional<B1::value, B1, B2>::type -{}; - -template<typename B1,typename B2,typename B3, typename... Bn> -struct Or<B1, B2, B3, Bn...> - : public std::conditional<B1::value, B1, Or<B2, B3, Bn...>>::type -{}; - -template<typename...> -struct And; - -template<> -struct And<> : public std::true_type -{}; - -template<typename B1> -struct And<B1> : public B1 -{}; - -template<typename B1, typename B2> -struct And<B1, B2> - : public std::conditional<B1::value, B2, B1>::type -{}; - -template<typename B1, typename B2, typename B3, typename... Bn> -struct And<B1, B2, B3, Bn...> - : public std::conditional<B1::value, And<B2, B3, Bn...>, B1>::type -{}; - -/* Concepts-light-like helper to make SFINAE logic easier to read. */ -template<typename Condition> -using Requires = typename std::enable_if<Condition::value, void>::type; -} - -#endif /* COMMON_TRAITS_H */ diff -Nru gdb-9.1/gdb/gdbsupport/underlying.h gdb-10.2/gdb/gdbsupport/underlying.h --- gdb-9.1/gdb/gdbsupport/underlying.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/underlying.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,32 +0,0 @@ -/* Copyright (C) 2017-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef COMMON_UNDERLYING_H -#define COMMON_UNDERLYING_H - -#include <type_traits> - -/* Convert an enum to its underlying value. */ - -template<typename E> -constexpr typename std::underlying_type<E>::type -to_underlying (E val) noexcept -{ - return static_cast<typename std::underlying_type<E>::type> (val); -} - -#endif diff -Nru gdb-9.1/gdb/gdbsupport/valid-expr.h gdb-10.2/gdb/gdbsupport/valid-expr.h --- gdb-9.1/gdb/gdbsupport/valid-expr.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/valid-expr.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,108 +0,0 @@ -/* Compile-time valid expression checker for GDB, the GNU debugger. - - Copyright (C) 2017-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -/* Helper macros used to build compile-time unit tests that make sure - that invalid expressions that should not compile would not compile, - and that expressions that should compile do compile, and have the - right type. This is mainly used to verify that some utility's API - is really as safe as intended. */ - -#ifndef COMMON_VALID_EXPR_H -#define COMMON_VALID_EXPR_H - -#include "gdbsupport/preprocessor.h" -#include "gdbsupport/traits.h" - -/* Macro that uses SFINAE magic to detect whether the EXPR expression - is either valid or ill-formed, at compile time, without actually - producing compile-time errors. I.e., check that bad uses of the - types (e.g., involving mismatching types) would be caught at - compile time. If the expression is valid, also check whether the - expression has the right type. - - EXPR must be defined in terms of some of the template parameters, - so that template substitution failure discards the overload instead - of causing a real compile error. TYPES is thus the list of types - involved in the expression, and TYPENAMES is the same list, but - with each element prefixed by "typename". These are passed as - template parameter types to the templates within the macro. - - VALID is a boolean that indicates whether the expression is - supposed to be valid or invalid. - - EXPR_TYPE is the expected type of EXPR. Only meaningful iff VALID - is true. If VALID is false, then you must pass "void" as expected - type. - - Each invocation of the macro is wrapped in its own namespace to - avoid ODR violations. The generated namespace only includes the - line number, so client code should wrap sets of calls in a - test-specific namespace too, to fully guarantee uniqueness between - the multiple clients in the codebase. */ -#define CHECK_VALID_EXPR_INT(TYPENAMES, TYPES, VALID, EXPR_TYPE, EXPR) \ - namespace CONCAT (check_valid_expr, __LINE__) { \ - \ - template<typename, typename, typename = void> \ - struct is_valid_expression \ - : std::false_type {}; \ - \ - template <TYPENAMES> \ - struct is_valid_expression<TYPES, gdb::void_t<decltype (EXPR)>> \ - : std::true_type {}; \ - \ - static_assert (is_valid_expression<TYPES>::value == VALID, \ - ""); \ - \ - template<TYPENAMES, typename = void> \ - struct is_same_type \ - : std::is_same<EXPR_TYPE, void> {}; \ - \ - template <TYPENAMES> \ - struct is_same_type<TYPES, gdb::void_t<decltype (EXPR)>> \ - : std::is_same<EXPR_TYPE, decltype (EXPR)> {}; \ - \ - static_assert (is_same_type<TYPES>::value, ""); \ - } /* namespace */ - -/* A few convenience macros that support expressions involving a - varying numbers of types. If you need more types, feel free to add - another variant. */ - -#define CHECK_VALID_EXPR_1(T1, VALID, EXPR_TYPE, EXPR) \ - CHECK_VALID_EXPR_INT (ESC_PARENS (typename T1), \ - ESC_PARENS (T1), \ - VALID, EXPR_TYPE, EXPR) - -#define CHECK_VALID_EXPR_2(T1, T2, VALID, EXPR_TYPE, EXPR) \ - CHECK_VALID_EXPR_INT (ESC_PARENS(typename T1, typename T2), \ - ESC_PARENS (T1, T2), \ - VALID, EXPR_TYPE, EXPR) - -#define CHECK_VALID_EXPR_3(T1, T2, T3, VALID, EXPR_TYPE, EXPR) \ - CHECK_VALID_EXPR_INT (ESC_PARENS (typename T1, typename T2, typename T3), \ - ESC_PARENS (T1, T2, T3), \ - VALID, EXPR_TYPE, EXPR) - -#define CHECK_VALID_EXPR_4(T1, T2, T3, T4, VALID, EXPR_TYPE, EXPR) \ - CHECK_VALID_EXPR_INT (ESC_PARENS (typename T1, typename T2, \ - typename T3, typename T4), \ - ESC_PARENS (T1, T2, T3, T4), \ - VALID, EXPR_TYPE, EXPR) - -#endif /* COMMON_VALID_EXPR_H */ diff -Nru gdb-9.1/gdb/gdbsupport/version.h gdb-10.2/gdb/gdbsupport/version.h --- gdb-9.1/gdb/gdbsupport/version.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/version.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,31 +0,0 @@ -/* Version information for GDB. - Copyright (C) 1999-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef COMMON_VERSION_H -#define COMMON_VERSION_H - -/* Version number of GDB, as a string. */ -extern const char version[]; - -/* Canonical host name as a string. */ -extern const char host_name[]; - -/* Canonical target name as a string. */ -extern const char target_name[]; - -#endif /* COMMON_VERSION_H */ diff -Nru gdb-9.1/gdb/gdbsupport/x86-xstate.h gdb-10.2/gdb/gdbsupport/x86-xstate.h --- gdb-9.1/gdb/gdbsupport/x86-xstate.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/x86-xstate.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,88 +0,0 @@ -/* Common code for x86 XSAVE extended state. - - Copyright (C) 2010-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef COMMON_X86_XSTATE_H -#define COMMON_X86_XSTATE_H - -/* The extended state feature bits. */ -#define X86_XSTATE_X87 (1ULL << 0) -#define X86_XSTATE_SSE (1ULL << 1) -#define X86_XSTATE_AVX (1ULL << 2) -#define X86_XSTATE_BNDREGS (1ULL << 3) -#define X86_XSTATE_BNDCFG (1ULL << 4) -#define X86_XSTATE_MPX (X86_XSTATE_BNDREGS | X86_XSTATE_BNDCFG) - -/* AVX 512 adds three feature bits. All three must be enabled. */ -#define X86_XSTATE_K (1ULL << 5) -#define X86_XSTATE_ZMM_H (1ULL << 6) -#define X86_XSTATE_ZMM (1ULL << 7) -#define X86_XSTATE_AVX512 (X86_XSTATE_K | X86_XSTATE_ZMM_H \ - | X86_XSTATE_ZMM) - -#define X86_XSTATE_PKRU (1ULL << 9) - -/* Supported mask and size of the extended state. */ -#define X86_XSTATE_X87_MASK X86_XSTATE_X87 -#define X86_XSTATE_SSE_MASK (X86_XSTATE_X87 | X86_XSTATE_SSE) -#define X86_XSTATE_AVX_MASK (X86_XSTATE_SSE_MASK | X86_XSTATE_AVX) -#define X86_XSTATE_MPX_MASK (X86_XSTATE_SSE_MASK | X86_XSTATE_MPX) -#define X86_XSTATE_AVX_MPX_MASK (X86_XSTATE_AVX_MASK | X86_XSTATE_MPX) -#define X86_XSTATE_AVX_AVX512_MASK (X86_XSTATE_AVX_MASK | X86_XSTATE_AVX512) -#define X86_XSTATE_AVX_MPX_AVX512_PKU_MASK (X86_XSTATE_AVX_MPX_MASK\ - | X86_XSTATE_AVX512 | X86_XSTATE_PKRU) - -#define X86_XSTATE_ALL_MASK (X86_XSTATE_AVX_MPX_AVX512_PKU_MASK) - - -#define X86_XSTATE_SSE_SIZE 576 -#define X86_XSTATE_AVX_SIZE 832 -#define X86_XSTATE_BNDREGS_SIZE 1024 -#define X86_XSTATE_BNDCFG_SIZE 1088 -#define X86_XSTATE_AVX512_SIZE 2688 -#define X86_XSTATE_PKRU_SIZE 2696 -#define X86_XSTATE_MAX_SIZE 2696 - - -/* In case one of the MPX XCR0 bits is set we consider we have MPX. */ -#define HAS_MPX(XCR0) (((XCR0) & X86_XSTATE_MPX) != 0) -#define HAS_AVX(XCR0) (((XCR0) & X86_XSTATE_AVX) != 0) -#define HAS_AVX512(XCR0) (((XCR0) & X86_XSTATE_AVX512) != 0) -#define HAS_PKRU(XCR0) (((XCR0) & X86_XSTATE_PKRU) != 0) - -/* Get I386 XSAVE extended state size. */ -#define X86_XSTATE_SIZE(XCR0) \ - (HAS_PKRU (XCR0) ? X86_XSTATE_PKRU_SIZE : \ - (HAS_AVX512 (XCR0) ? X86_XSTATE_AVX512_SIZE : \ - (HAS_MPX (XCR0) ? X86_XSTATE_BNDCFG_SIZE : \ - (HAS_AVX (XCR0) ? X86_XSTATE_AVX_SIZE : X86_XSTATE_SSE_SIZE)))) - -/* Initial value for fctrl register, as defined in the X86 manual, and - confirmed in the (Linux) kernel source. When the x87 floating point - feature is not enabled in an inferior we use this as the value of the - fcrtl register. */ - -#define I387_FCTRL_INIT_VAL 0x037f - -/* Initial value for mxcsr register. When the avx and sse floating point - features are not enabled in an inferior we use this as the value of the - mxcsr register. */ - -#define I387_MXCSR_INIT_VAL 0x1f80 - -#endif /* COMMON_X86_XSTATE_H */ diff -Nru gdb-9.1/gdb/gdbsupport/xml-utils.c gdb-10.2/gdb/gdbsupport/xml-utils.c --- gdb-9.1/gdb/gdbsupport/xml-utils.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/xml-utils.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,63 +0,0 @@ -/* Shared helper routines for manipulating XML. - - Copyright (C) 2006-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "common-defs.h" -#include "xml-utils.h" - -/* See xml-utils.h. */ - -std::string -xml_escape_text (const char *text) -{ - std::string result; - - xml_escape_text_append (&result, text); - - return result; -} - -/* See xml-utils.h. */ - -void -xml_escape_text_append (std::string *result, const char *text) -{ - /* Expand the result. */ - for (int i = 0; text[i] != '\0'; i++) - switch (text[i]) - { - case '\'': - *result += "'"; - break; - case '\"': - *result += """; - break; - case '&': - *result += "&"; - break; - case '<': - *result += "<"; - break; - case '>': - *result += ">"; - break; - default: - *result += text[i]; - break; - } -} diff -Nru gdb-9.1/gdb/gdbsupport/xml-utils.h gdb-10.2/gdb/gdbsupport/xml-utils.h --- gdb-9.1/gdb/gdbsupport/xml-utils.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbsupport/xml-utils.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,33 +0,0 @@ -/* Shared helper routines for manipulating XML. - - Copyright (C) 2006-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef COMMON_XML_UTILS_H -#define COMMON_XML_UTILS_H - -/* Return a string with special characters from TEXT replaced by entity - references. */ - -extern std::string xml_escape_text (const char *text); - -/* Append TEXT to RESULT, with special characters replaced by entity - references. */ - -extern void xml_escape_text_append (std::string *result, const char *text); - -#endif /* COMMON_XML_UTILS_H */ diff -Nru gdb-9.1/gdb/gdbthread.h gdb-10.2/gdb/gdbthread.h --- gdb-9.1/gdb/gdbthread.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbthread.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Multi-process/thread control defs for GDB, the GNU debugger. - Copyright (C) 1987-2020 Free Software Foundation, Inc. + Copyright (C) 1987-2021 Free Software Foundation, Inc. Contributed by Lynx Real-Time Systems, Inc. Los Gatos, CA. @@ -34,6 +34,7 @@ #include "gdbsupport/forward-scope-exit.h" struct inferior; +struct process_stratum_target; /* Frontend view of the thread state. Possible extensions: stepping, finishing, until(ling),... @@ -130,28 +131,10 @@ any inlined frames). */ struct frame_id step_stack_frame_id {}; - /* Nonzero if we are presently stepping over a breakpoint. - - If we hit a breakpoint or watchpoint, and then continue, we need - to single step the current thread with breakpoints disabled, to - avoid hitting the same breakpoint or watchpoint again. And we - should step just a single thread and keep other threads stopped, - so that other threads don't miss breakpoints while they are - removed. - - So, this variable simultaneously means that we need to single - step the current thread, keep other threads stopped, and that - breakpoints should be removed while we step. - - This variable is set either: - - in proceed, when we resume inferior on user's explicit request - - in keep_going, if handle_inferior_event decides we need to - step over breakpoint. - - The variable is cleared in normal_stop. The proceed calls - wait_for_inferior, which calls handle_inferior_event in a loop, - and until wait_for_inferior exits, this variable is changed only - by keep_going. */ + /* True if the the thread is presently stepping over a breakpoint or + a watchpoint, either with an inline step over or a displaced (out + of line) step, and we're now expecting it to report a trap for + the finished single step. */ int trap_expected = 0; /* Nonzero if the thread is being proceeded for a "finish" command @@ -300,20 +283,20 @@ if the thread does not have a user-given name. */ char *name = NULL; - /* Non-zero means the thread is executing. Note: this is different + /* True means the thread is executing. Note: this is different from saying that there is an active target and we are stopped at a breakpoint, for instance. This is a real indicator whether the thread is off and running. */ - int executing = 0; + bool executing = false; - /* Non-zero if this thread is resumed from infrun's perspective. + /* True if this thread is resumed from infrun's perspective. Note that a thread can be marked both as not-executing and resumed at the same time. This happens if we try to resume a thread that has a wait status pending. We shouldn't let the thread really run until that wait status has been processed, but we should not process that wait status if we didn't try to let the thread run. */ - int resumed = 0; + bool resumed = false; /* Frontend view of the thread state. Note that the THREAD_RUNNING/ THREAD_STOPPED states are different from EXECUTING. When the @@ -412,6 +395,13 @@ using thread_info_ref = gdb::ref_ptr<struct thread_info, refcounted_object_ref_policy>; +/* A gdb::ref_ptr pointer to an inferior. This would ideally be in + inferior.h, but it can't due to header dependencies (inferior.h + includes gdbthread.h). */ + +using inferior_ref + = gdb::ref_ptr<struct inferior, refcounted_object_ref_policy>; + /* Create an empty thread list, or empty the existing one. */ extern void init_thread_list (void); @@ -419,22 +409,26 @@ that a new thread is found, and return the pointer to the new thread. Caller my use this pointer to initialize the private thread data. */ -extern struct thread_info *add_thread (ptid_t ptid); +extern struct thread_info *add_thread (process_stratum_target *targ, + ptid_t ptid); -/* Same as add_thread, but does not print a message - about new thread. */ -extern struct thread_info *add_thread_silent (ptid_t ptid); +/* Same as add_thread, but does not print a message about new + thread. */ +extern struct thread_info *add_thread_silent (process_stratum_target *targ, + ptid_t ptid); /* Same as add_thread, and sets the private info. */ -extern struct thread_info *add_thread_with_info (ptid_t ptid, - struct private_thread_info *); - -/* Delete an existing thread list entry. */ +extern struct thread_info *add_thread_with_info (process_stratum_target *targ, + ptid_t ptid, + private_thread_info *); + +/* Delete thread THREAD and notify of thread exit. If the thread is + currently not deletable, don't actually delete it but still tag it + as exited and do the notification. */ extern void delete_thread (struct thread_info *thread); -/* Delete an existing thread list entry, and be quiet about it. Used - after the process this thread having belonged to having already - exited, for example. */ +/* Like delete_thread, but be quiet about it. Used when the process + this thread belonged to has already exited, for example. */ extern void delete_thread_silent (struct thread_info *thread); /* Delete a step_resume_breakpoint from the thread database. */ @@ -468,17 +462,21 @@ const char *print_thread_id (struct thread_info *thr); /* Boolean test for an already-known ptid. */ -extern int in_thread_list (ptid_t ptid); +extern bool in_thread_list (process_stratum_target *targ, ptid_t ptid); /* Boolean test for an already-known global thread id (GDB's homegrown global id, not the system's). */ extern int valid_global_thread_id (int global_id); -/* Search function to lookup a thread by 'pid'. */ -extern struct thread_info *find_thread_ptid (ptid_t ptid); +/* Find (non-exited) thread PTID of inferior INF. */ +extern thread_info *find_thread_ptid (inferior *inf, ptid_t ptid); + +/* Search function to lookup a (non-exited) thread by 'ptid'. */ +extern struct thread_info *find_thread_ptid (process_stratum_target *targ, + ptid_t ptid); -/* Search function to lookup a thread by 'ptid'. Only searches in - threads of INF. */ +/* Search function to lookup a (non-exited) thread by 'ptid'. Only + searches in threads of INF. */ extern struct thread_info *find_thread_ptid (inferior *inf, ptid_t ptid); /* Find thread by GDB global thread ID. */ @@ -500,7 +498,8 @@ extern struct thread_info *any_live_thread_of_inferior (inferior *inf); /* Change the ptid of thread OLD_PTID to NEW_PTID. */ -void thread_change_ptid (ptid_t old_ptid, ptid_t new_ptid); +void thread_change_ptid (process_stratum_target *targ, + ptid_t old_ptid, ptid_t new_ptid); /* Iterator function to call a user-provided callback function once for each known thread. */ @@ -511,34 +510,44 @@ iterators. Must be done after struct thread_info is defined. */ #include "thread-iter.h" -/* Return a range that can be used to walk over all threads of all - inferiors, with range-for. Used like this: +/* Return a range that can be used to walk over threads, with + range-for. + + Used like this, it walks over all threads of all inferiors of all + targets: for (thread_info *thr : all_threads ()) { .... } -*/ -inline all_threads_range -all_threads () -{ - return {}; -} -/* Likewise, but accept a filter PTID. */ + FILTER_PTID can be used to filter out threads that don't match. + FILTER_PTID can be: + + - minus_one_ptid, meaning walk all threads of all inferiors of + PROC_TARGET. If PROC_TARGET is NULL, then of all targets. + + - A process ptid, in which case walk all threads of the specified + process. PROC_TARGET must be non-NULL in this case. + + - A thread ptid, in which case walk that thread only. PROC_TARGET + must be non-NULL in this case. +*/ inline all_matching_threads_range -all_threads (ptid_t filter_ptid) +all_threads (process_stratum_target *proc_target = nullptr, + ptid_t filter_ptid = minus_one_ptid) { - return all_matching_threads_range (filter_ptid); + return all_matching_threads_range (proc_target, filter_ptid); } /* Return a range that can be used to walk over all non-exited threads - of all inferiors, with range-for. FILTER_PTID can be used to - filter out thread that don't match. */ + of all inferiors, with range-for. Arguments are like all_threads + above. */ inline all_non_exited_threads_range -all_non_exited_threads (ptid_t filter_ptid = minus_one_ptid) +all_non_exited_threads (process_stratum_target *proc_target = nullptr, + ptid_t filter_ptid = minus_one_ptid) { - return all_non_exited_threads_range (filter_ptid); + return all_non_exited_threads_range (proc_target, filter_ptid); } /* Return a range that can be used to walk over all threads of all @@ -554,10 +563,10 @@ inline all_threads_safe_range all_threads_safe () { - return all_threads_safe_range (); + return {}; } -extern int thread_count (void); +extern int thread_count (process_stratum_target *proc_target); /* Return true if we have any thread in any inferior. */ extern bool any_thread_p (); @@ -571,44 +580,50 @@ /* Switch from one thread to another. Does not read registers. */ extern void switch_to_thread_no_regs (struct thread_info *thread); -/* Marks or clears thread(s) PTID as resumed. If PTID is - MINUS_ONE_PTID, applies to all threads. If ptid_is_pid(PTID) is - true, applies to all threads of the process pointed at by PTID. */ -extern void set_resumed (ptid_t ptid, int resumed); - -/* Marks thread PTID is running, or stopped. - If PTID is minus_one_ptid, marks all threads. */ -extern void set_running (ptid_t ptid, int running); - -/* Marks or clears thread(s) PTID as having been requested to stop. - If PTID is MINUS_ONE_PTID, applies to all threads. If +/* Marks or clears thread(s) PTID of TARG as resumed. If PTID is + MINUS_ONE_PTID, applies to all threads of TARG. If ptid_is_pid(PTID) is true, applies to all threads of the process - pointed at by PTID. If STOP, then the THREAD_STOP_REQUESTED - observer is called with PTID as argument. */ -extern void set_stop_requested (ptid_t ptid, int stop); + pointed at by {TARG,PTID}. */ +extern void set_resumed (process_stratum_target *targ, + ptid_t ptid, bool resumed); + +/* Marks thread PTID of TARG as running, or as stopped. If PTID is + minus_one_ptid, marks all threads of TARG. */ +extern void set_running (process_stratum_target *targ, + ptid_t ptid, bool running); + +/* Marks or clears thread(s) PTID of TARG as having been requested to + stop. If PTID is MINUS_ONE_PTID, applies to all threads of TARG. + If ptid_is_pid(PTID) is true, applies to all threads of the process + pointed at by {TARG, PTID}. If STOP, then the + THREAD_STOP_REQUESTED observer is called with PTID as argument. */ +extern void set_stop_requested (process_stratum_target *targ, + ptid_t ptid, bool stop); -/* Marks thread PTID as executing, or not. If PTID is minus_one_ptid, - marks all threads. +/* Marks thread PTID of TARG as executing, or not. If PTID is + minus_one_ptid, marks all threads of TARG. Note that this is different from the running state. See the description of state and executing fields of struct thread_info. */ -extern void set_executing (ptid_t ptid, int executing); +extern void set_executing (process_stratum_target *targ, + ptid_t ptid, bool executing); -/* True if any (known or unknown) thread is or may be executing. */ -extern int threads_are_executing (void); +/* True if any (known or unknown) thread of TARG is or may be + executing. */ +extern bool threads_are_executing (process_stratum_target *targ); -/* Merge the executing property of thread PTID over to its thread - state property (frontend running/stopped view). +/* Merge the executing property of thread PTID of TARG over to its + thread state property (frontend running/stopped view). "not executing" -> "stopped" "executing" -> "running" "exited" -> "exited" - If PTID is minus_one_ptid, go over all threads. + If PTID is minus_one_ptid, go over all threads of TARG. Notifications are only emitted if the thread state did change. */ -extern void finish_thread_state (ptid_t ptid); +extern void finish_thread_state (process_stratum_target *targ, ptid_t ptid); /* Calls finish_thread_state on scope exit, unless release() is called to disengage. */ @@ -645,11 +660,16 @@ DISABLE_COPY_AND_ASSIGN (scoped_restore_current_thread); + /* Cancel restoring on scope exit. */ + void dont_restore () { m_dont_restore = true; } + private: - /* Use the "class" keyword here, because of a clash with a "thread_info" - function in the Darwin API. */ - class thread_info *m_thread; - inferior *m_inf; + void restore (); + + bool m_dont_restore = false; + thread_info_ref m_thread; + inferior_ref m_inf; + frame_id m_selected_frame_id; int m_selected_frame_level; bool m_was_stopped; diff -Nru gdb-9.1/gdb/gdbtypes.c gdb-10.2/gdb/gdbtypes.c --- gdb-9.1/gdb/gdbtypes.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbtypes.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Support routines for manipulating internal types for GDB. - Copyright (C) 1992-2020 Free Software Foundation, Inc. + Copyright (C) 1992-2021 Free Software Foundation, Inc. Contributed by Cygnus Support, using pieces from other GDB modules. @@ -36,9 +36,10 @@ #include "hashtab.h" #include "cp-support.h" #include "bcache.h" -#include "dwarf2loc.h" +#include "dwarf2/loc.h" #include "gdbcore.h" #include "floatformat.h" +#include <algorithm> /* Initialize BADNESS constants. */ @@ -114,6 +115,10 @@ &floatformat_ibm_long_double_big, &floatformat_ibm_long_double_little }; +const struct floatformat *floatformats_bfloat16[BFD_ENDIAN_UNKNOWN] = { + &floatformat_bfloat16_big, + &floatformat_bfloat16_little +}; /* Should opaque types be resolved? */ @@ -181,7 +186,7 @@ /* Initialize the fields that might not be zero. */ - TYPE_CODE (type) = TYPE_CODE_UNDEF; + type->set_code (TYPE_CODE_UNDEF); TYPE_CHAIN (type) = type; /* Chain back to itself. */ return type; @@ -208,7 +213,7 @@ /* Initialize the fields that might not be zero. */ - TYPE_CODE (type) = TYPE_CODE_UNDEF; + type->set_code (TYPE_CODE_UNDEF); TYPE_CHAIN (type) = type; /* Chain back to itself. */ return type; @@ -236,7 +241,7 @@ struct gdbarch *arch; if (TYPE_OBJFILE_OWNED (type)) - arch = get_objfile_arch (TYPE_OWNER (type).objfile); + arch = TYPE_OWNER (type).objfile->arch (); else arch = TYPE_OWNER (type).gdbarch; @@ -365,7 +370,7 @@ TYPE_LENGTH (ntype) = gdbarch_ptr_bit (get_type_arch (type)) / TARGET_CHAR_BIT; - TYPE_CODE (ntype) = TYPE_CODE_PTR; + ntype->set_code (TYPE_CODE_PTR); /* Mark pointers as unsigned. The target converts between pointers and addresses (CORE_ADDRs) using gdbarch_pointer_to_address and @@ -449,7 +454,7 @@ TYPE_LENGTH (ntype) = gdbarch_ptr_bit (get_type_arch (type)) / TARGET_CHAR_BIT; - TYPE_CODE (ntype) = refcode; + ntype->set_code (refcode); *reftype = ntype; @@ -514,7 +519,7 @@ TYPE_TARGET_TYPE (ntype) = type; TYPE_LENGTH (ntype) = 1; - TYPE_CODE (ntype) = TYPE_CODE_FUNC; + ntype->set_code (TYPE_CODE_FUNC); INIT_FUNC_SPECIFIC (ntype); @@ -549,7 +554,7 @@ --nparams; TYPE_VARARGS (fn) = 1; } - else if (TYPE_CODE (check_typedef (param_types[nparams - 1])) + else if (check_typedef (param_types[nparams - 1])->code () == TYPE_CODE_VOID) { --nparams; @@ -561,11 +566,11 @@ TYPE_PROTOTYPED (fn) = 1; } - TYPE_NFIELDS (fn) = nparams; - TYPE_FIELDS (fn) - = (struct field *) TYPE_ZALLOC (fn, nparams * sizeof (struct field)); + fn->set_num_fields (nparams); + fn->set_fields + ((struct field *) TYPE_ZALLOC (fn, nparams * sizeof (struct field))); for (i = 0; i < nparams; ++i) - TYPE_FIELD_TYPE (fn, i) = param_types[i]; + fn->field (i).set_type (param_types[i]); return fn; } @@ -860,7 +865,7 @@ struct type *mtype; mtype = alloc_type_copy (type); - TYPE_CODE (mtype) = TYPE_CODE_METHOD; + mtype->set_code (TYPE_CODE_METHOD); TYPE_LENGTH (mtype) = 1; TYPE_STUB (mtype) = 1; TYPE_TARGET_TYPE (mtype) = type; @@ -873,19 +878,23 @@ bool operator== (const dynamic_prop &l, const dynamic_prop &r) { - if (l.kind != r.kind) + if (l.kind () != r.kind ()) return false; - switch (l.kind) + switch (l.kind ()) { case PROP_UNDEFINED: return true; case PROP_CONST: - return l.data.const_val == r.data.const_val; + return l.const_val () == r.const_val (); case PROP_ADDR_OFFSET: case PROP_LOCEXPR: case PROP_LOCLIST: - return l.data.baton == r.data.baton; + return l.baton () == r.baton (); + case PROP_VARIANT_PARTS: + return l.variant_parts () == r.variant_parts (); + case PROP_TYPE: + return l.original_type () == r.original_type (); } gdb_assert_not_reached ("unhandled dynamic_prop kind"); @@ -918,36 +927,35 @@ { /* The INDEX_TYPE should be a type capable of holding the upper and lower bounds, as such a zero sized, or void type makes no sense. */ - gdb_assert (TYPE_CODE (index_type) != TYPE_CODE_VOID); + gdb_assert (index_type->code () != TYPE_CODE_VOID); gdb_assert (TYPE_LENGTH (index_type) > 0); if (result_type == NULL) result_type = alloc_type_copy (index_type); - TYPE_CODE (result_type) = TYPE_CODE_RANGE; + result_type->set_code (TYPE_CODE_RANGE); TYPE_TARGET_TYPE (result_type) = index_type; if (TYPE_STUB (index_type)) TYPE_TARGET_STUB (result_type) = 1; else TYPE_LENGTH (result_type) = TYPE_LENGTH (check_typedef (index_type)); - TYPE_RANGE_DATA (result_type) = (struct range_bounds *) - TYPE_ZALLOC (result_type, sizeof (struct range_bounds)); - TYPE_RANGE_DATA (result_type)->low = *low_bound; - TYPE_RANGE_DATA (result_type)->high = *high_bound; - TYPE_RANGE_DATA (result_type)->bias = bias; - - /* Initialize the stride to be a constant, the value will already be zero - thanks to the use of TYPE_ZALLOC above. */ - TYPE_RANGE_DATA (result_type)->stride.kind = PROP_CONST; + range_bounds *bounds + = (struct range_bounds *) TYPE_ZALLOC (result_type, sizeof (range_bounds)); + bounds->low = *low_bound; + bounds->high = *high_bound; + bounds->bias = bias; + bounds->stride.set_const_val (0); + + result_type->set_bounds (bounds); - if (low_bound->kind == PROP_CONST && low_bound->data.const_val >= 0) + if (low_bound->kind () == PROP_CONST && low_bound->const_val () >= 0) TYPE_UNSIGNED (result_type) = 1; /* Ada allows the declaration of range types whose upper bound is less than the lower bound, so checking the lower bound is not enough. Make sure we do not mark a range type whose upper bound is negative as unsigned. */ - if (high_bound->kind == PROP_CONST && high_bound->data.const_val < 0) + if (high_bound->kind () == PROP_CONST && high_bound->const_val () < 0) TYPE_UNSIGNED (result_type) = 0; TYPE_ENDIANITY_NOT_DEFAULT (result_type) @@ -971,8 +979,8 @@ high_bound, bias); gdb_assert (stride != nullptr); - TYPE_RANGE_DATA (result_type)->stride = *stride; - TYPE_RANGE_DATA (result_type)->flag_is_byte_stride = byte_stride_p; + result_type->bounds ()->stride = *stride; + result_type->bounds ()->flag_is_byte_stride = byte_stride_p; return result_type; } @@ -995,11 +1003,8 @@ { struct dynamic_prop low, high; - low.kind = PROP_CONST; - low.data.const_val = low_bound; - - high.kind = PROP_CONST; - high.data.const_val = high_bound; + low.set_const_val (low_bound); + high.set_const_val (high_bound); result_type = create_range_type (result_type, index_type, &low, &high, 0); @@ -1014,114 +1019,195 @@ { /* If the range doesn't have a defined stride then its stride field will be initialized to the constant 0. */ - return (bounds->low.kind == PROP_CONST - && bounds->high.kind == PROP_CONST - && bounds->stride.kind == PROP_CONST); + return (bounds->low.kind () == PROP_CONST + && bounds->high.kind () == PROP_CONST + && bounds->stride.kind () == PROP_CONST); } +/* See gdbtypes.h. */ -/* Set *LOWP and *HIGHP to the lower and upper bounds of discrete type - TYPE. Return 1 if type is a range type, 0 if it is discrete (and - bounds will fit in LONGEST), or -1 otherwise. */ - -int -get_discrete_bounds (struct type *type, LONGEST *lowp, LONGEST *highp) +gdb::optional<LONGEST> +get_discrete_low_bound (struct type *type) { type = check_typedef (type); - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_RANGE: - *lowp = TYPE_LOW_BOUND (type); - *highp = TYPE_HIGH_BOUND (type); - return 1; + { + /* This function only works for ranges with a constant low bound. */ + if (type->bounds ()->low.kind () != PROP_CONST) + return {}; + + LONGEST low = type->bounds ()->low.const_val (); + + if (TYPE_TARGET_TYPE (type)->code () == TYPE_CODE_ENUM) + { + gdb::optional<LONGEST> low_pos + = discrete_position (TYPE_TARGET_TYPE (type), low); + + if (low_pos.has_value ()) + low = *low_pos; + } + + return low; + } + case TYPE_CODE_ENUM: - if (TYPE_NFIELDS (type) > 0) - { - /* The enums may not be sorted by value, so search all - entries. */ - int i; + { + if (type->num_fields () > 0) + { + /* The enums may not be sorted by value, so search all + entries. */ + LONGEST low = TYPE_FIELD_ENUMVAL (type, 0); - *lowp = *highp = TYPE_FIELD_ENUMVAL (type, 0); - for (i = 0; i < TYPE_NFIELDS (type); i++) - { - if (TYPE_FIELD_ENUMVAL (type, i) < *lowp) - *lowp = TYPE_FIELD_ENUMVAL (type, i); - if (TYPE_FIELD_ENUMVAL (type, i) > *highp) - *highp = TYPE_FIELD_ENUMVAL (type, i); - } + for (int i = 0; i < type->num_fields (); i++) + { + if (TYPE_FIELD_ENUMVAL (type, i) < low) + low = TYPE_FIELD_ENUMVAL (type, i); + } - /* Set unsigned indicator if warranted. */ - if (*lowp >= 0) - { + /* Set unsigned indicator if warranted. */ + if (low >= 0) TYPE_UNSIGNED (type) = 1; - } - } - else - { - *lowp = 0; - *highp = -1; - } - return 0; + + return low; + } + else + return 0; + } + case TYPE_CODE_BOOL: - *lowp = 0; - *highp = 1; return 0; + case TYPE_CODE_INT: if (TYPE_LENGTH (type) > sizeof (LONGEST)) /* Too big */ - return -1; + return {}; + + if (!TYPE_UNSIGNED (type)) + return -(1 << (TYPE_LENGTH (type) * TARGET_CHAR_BIT - 1)); + + /* fall through */ + case TYPE_CODE_CHAR: + return 0; + + default: + return {}; + } +} + +/* See gdbtypes.h. */ + +gdb::optional<LONGEST> +get_discrete_high_bound (struct type *type) +{ + type = check_typedef (type); + switch (type->code ()) + { + case TYPE_CODE_RANGE: + { + /* This function only works for ranges with a constant high bound. */ + if (type->bounds ()->high.kind () != PROP_CONST) + return {}; + + LONGEST high = type->bounds ()->high.const_val (); + + if (TYPE_TARGET_TYPE (type)->code () == TYPE_CODE_ENUM) + { + gdb::optional<LONGEST> high_pos + = discrete_position (TYPE_TARGET_TYPE (type), high); + + if (high_pos.has_value ()) + high = *high_pos; + } + + return high; + } + + case TYPE_CODE_ENUM: + { + if (type->num_fields () > 0) + { + /* The enums may not be sorted by value, so search all + entries. */ + LONGEST high = TYPE_FIELD_ENUMVAL (type, 0); + + for (int i = 0; i < type->num_fields (); i++) + { + if (TYPE_FIELD_ENUMVAL (type, i) > high) + high = TYPE_FIELD_ENUMVAL (type, i); + } + + return high; + } + else + return -1; + } + + case TYPE_CODE_BOOL: + return 1; + + case TYPE_CODE_INT: + if (TYPE_LENGTH (type) > sizeof (LONGEST)) /* Too big */ + return {}; + if (!TYPE_UNSIGNED (type)) { - *lowp = -(1 << (TYPE_LENGTH (type) * TARGET_CHAR_BIT - 1)); - *highp = -*lowp - 1; - return 0; + LONGEST low = -(1 << (TYPE_LENGTH (type) * TARGET_CHAR_BIT - 1)); + return -low - 1; } + /* fall through */ case TYPE_CODE_CHAR: - *lowp = 0; - /* This round-about calculation is to avoid shifting by - TYPE_LENGTH (type) * TARGET_CHAR_BIT, which will not work - if TYPE_LENGTH (type) == sizeof (LONGEST). */ - *highp = 1 << (TYPE_LENGTH (type) * TARGET_CHAR_BIT - 1); - *highp = (*highp - 1) | *highp; - return 0; + { + /* This round-about calculation is to avoid shifting by + TYPE_LENGTH (type) * TARGET_CHAR_BIT, which will not work + if TYPE_LENGTH (type) == sizeof (LONGEST). */ + LONGEST high = 1 << (TYPE_LENGTH (type) * TARGET_CHAR_BIT - 1); + return (high - 1) | high; + } + default: - return -1; + return {}; } } +/* See gdbtypes.h. */ + +bool +get_discrete_bounds (struct type *type, LONGEST *lowp, LONGEST *highp) +{ + gdb::optional<LONGEST> low = get_discrete_low_bound (type); + if (!low.has_value ()) + return false; + + gdb::optional<LONGEST> high = get_discrete_high_bound (type); + if (!high.has_value ()) + return false; + + *lowp = *low; + *highp = *high; + + return true; +} + /* Assuming TYPE is a simple, non-empty array type, compute its upper and lower bound. Save the low bound into LOW_BOUND if not NULL. Save the high bound into HIGH_BOUND if not NULL. Return 1 if the operation was successful. Return zero otherwise, - in which case the values of LOW_BOUND and HIGH_BOUNDS are unmodified. - - We now simply use get_discrete_bounds call to get the values - of the low and high bounds. - get_discrete_bounds can return three values: - 1, meaning that index is a range, - 0, meaning that index is a discrete type, - or -1 for failure. */ + in which case the values of LOW_BOUND and HIGH_BOUNDS are unmodified. */ int get_array_bounds (struct type *type, LONGEST *low_bound, LONGEST *high_bound) { - struct type *index = TYPE_INDEX_TYPE (type); + struct type *index = type->index_type (); LONGEST low = 0; LONGEST high = 0; - int res; if (index == NULL) return 0; - res = get_discrete_bounds (index, &low, &high); - if (res == -1) - return 0; - - /* Check if the array bounds are undefined. */ - if (res == 1 - && ((low_bound && TYPE_ARRAY_LOWER_BOUND_IS_UNDEFINED (type)) - || (high_bound && TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED (type)))) + if (!get_discrete_bounds (index, &low, &high)) return 0; if (low_bound) @@ -1147,29 +1233,85 @@ in which case the value of POS is unmodified. */ -int -discrete_position (struct type *type, LONGEST val, LONGEST *pos) +gdb::optional<LONGEST> +discrete_position (struct type *type, LONGEST val) { - if (TYPE_CODE (type) == TYPE_CODE_ENUM) + if (type->code () == TYPE_CODE_RANGE) + type = TYPE_TARGET_TYPE (type); + + if (type->code () == TYPE_CODE_ENUM) { int i; - for (i = 0; i < TYPE_NFIELDS (type); i += 1) + for (i = 0; i < type->num_fields (); i += 1) { if (val == TYPE_FIELD_ENUMVAL (type, i)) - { - *pos = i; - return 1; - } + return i; } /* Invalid enumeration value. */ - return 0; + return {}; } else + return val; +} + +/* If the array TYPE has static bounds calculate and update its + size, then return true. Otherwise return false and leave TYPE + unchanged. */ + +static bool +update_static_array_size (struct type *type) +{ + gdb_assert (type->code () == TYPE_CODE_ARRAY); + + struct type *range_type = type->index_type (); + + if (type->dyn_prop (DYN_PROP_BYTE_STRIDE) == nullptr + && has_static_range (range_type->bounds ()) + && (!type_not_associated (type) + && !type_not_allocated (type))) { - *pos = val; - return 1; + LONGEST low_bound, high_bound; + int stride; + struct type *element_type; + + /* If the array itself doesn't provide a stride value then take + whatever stride the range provides. Don't update BIT_STRIDE as + we don't want to place the stride value from the range into this + arrays bit size field. */ + stride = TYPE_FIELD_BITSIZE (type, 0); + if (stride == 0) + stride = range_type->bit_stride (); + + if (!get_discrete_bounds (range_type, &low_bound, &high_bound)) + low_bound = high_bound = 0; + + element_type = check_typedef (TYPE_TARGET_TYPE (type)); + /* Be careful when setting the array length. Ada arrays can be + empty arrays with the high_bound being smaller than the low_bound. + In such cases, the array length should be zero. */ + if (high_bound < low_bound) + TYPE_LENGTH (type) = 0; + else if (stride != 0) + { + /* Ensure that the type length is always positive, even in the + case where (for example in Fortran) we have a negative + stride. It is possible to have a single element array with a + negative stride in Fortran (this doesn't mean anything + special, it's still just a single element array) so do + consider that case when touching this code. */ + LONGEST element_count = std::abs (high_bound - low_bound + 1); + TYPE_LENGTH (type) + = ((std::abs (stride) * element_count) + 7) / 8; + } + else + TYPE_LENGTH (type) = + TYPE_LENGTH (element_type) * (high_bound - low_bound + 1); + + return true; } + + return false; } /* Create an array type using either a blank type supplied in @@ -1202,53 +1344,32 @@ unsigned int bit_stride) { if (byte_stride_prop != NULL - && byte_stride_prop->kind == PROP_CONST) + && byte_stride_prop->kind () == PROP_CONST) { /* The byte stride is actually not dynamic. Pretend we were called with bit_stride set instead of byte_stride_prop. This will give us the same result type, while avoiding the need to handle this as a special case. */ - bit_stride = byte_stride_prop->data.const_val * 8; + bit_stride = byte_stride_prop->const_val () * 8; byte_stride_prop = NULL; } if (result_type == NULL) result_type = alloc_type_copy (range_type); - TYPE_CODE (result_type) = TYPE_CODE_ARRAY; + result_type->set_code (TYPE_CODE_ARRAY); TYPE_TARGET_TYPE (result_type) = element_type; - if (byte_stride_prop == NULL - && has_static_range (TYPE_RANGE_DATA (range_type)) - && (!type_not_associated (result_type) - && !type_not_allocated (result_type))) - { - LONGEST low_bound, high_bound; - unsigned int stride; - /* If the array itself doesn't provide a stride value then take - whatever stride the range provides. Don't update BIT_STRIDE as - we don't want to place the stride value from the range into this - arrays bit size field. */ - stride = bit_stride; - if (stride == 0) - stride = TYPE_BIT_STRIDE (range_type); + result_type->set_num_fields (1); + result_type->set_fields + ((struct field *) TYPE_ZALLOC (result_type, sizeof (struct field))); + result_type->set_index_type (range_type); + if (byte_stride_prop != NULL) + result_type->add_dyn_prop (DYN_PROP_BYTE_STRIDE, *byte_stride_prop); + else if (bit_stride > 0) + TYPE_FIELD_BITSIZE (result_type, 0) = bit_stride; - if (get_discrete_bounds (range_type, &low_bound, &high_bound) < 0) - low_bound = high_bound = 0; - element_type = check_typedef (element_type); - /* Be careful when setting the array length. Ada arrays can be - empty arrays with the high_bound being smaller than the low_bound. - In such cases, the array length should be zero. */ - if (high_bound < low_bound) - TYPE_LENGTH (result_type) = 0; - else if (stride > 0) - TYPE_LENGTH (result_type) = - (stride * (high_bound - low_bound + 1) + 7) / 8; - else - TYPE_LENGTH (result_type) = - TYPE_LENGTH (element_type) * (high_bound - low_bound + 1); - } - else + if (!update_static_array_size (result_type)) { /* This type is dynamic and its length needs to be computed on demand. In the meantime, avoid leaving the TYPE_LENGTH @@ -1259,15 +1380,6 @@ TYPE_LENGTH (result_type) = 0; } - TYPE_NFIELDS (result_type) = 1; - TYPE_FIELDS (result_type) = - (struct field *) TYPE_ZALLOC (result_type, sizeof (struct field)); - TYPE_INDEX_TYPE (result_type) = range_type; - if (byte_stride_prop != NULL) - add_dyn_prop (DYN_PROP_BYTE_STRIDE, *byte_stride_prop, result_type); - else if (bit_stride > 0) - TYPE_FIELD_BITSIZE (result_type, 0) = bit_stride; - /* TYPE_TARGET_STUB will take care of zero length arrays. */ if (TYPE_LENGTH (result_type) == 0) TYPE_TARGET_STUB (result_type) = 1; @@ -1324,7 +1436,7 @@ result_type = create_array_type (result_type, string_char_type, range_type); - TYPE_CODE (result_type) = TYPE_CODE_STRING; + result_type->set_code (TYPE_CODE_STRING); return result_type; } @@ -1336,7 +1448,7 @@ result_type = lookup_array_range_type (string_char_type, low_bound, high_bound); - TYPE_CODE (result_type) = TYPE_CODE_STRING; + result_type->set_code (TYPE_CODE_STRING); return result_type; } @@ -1346,24 +1458,25 @@ if (result_type == NULL) result_type = alloc_type_copy (domain_type); - TYPE_CODE (result_type) = TYPE_CODE_SET; - TYPE_NFIELDS (result_type) = 1; - TYPE_FIELDS (result_type) - = (struct field *) TYPE_ZALLOC (result_type, sizeof (struct field)); + result_type->set_code (TYPE_CODE_SET); + result_type->set_num_fields (1); + result_type->set_fields + ((struct field *) TYPE_ZALLOC (result_type, sizeof (struct field))); if (!TYPE_STUB (domain_type)) { LONGEST low_bound, high_bound, bit_length; - if (get_discrete_bounds (domain_type, &low_bound, &high_bound) < 0) + if (!get_discrete_bounds (domain_type, &low_bound, &high_bound)) low_bound = high_bound = 0; + bit_length = high_bound - low_bound + 1; TYPE_LENGTH (result_type) = (bit_length + TARGET_CHAR_BIT - 1) / TARGET_CHAR_BIT; if (low_bound >= 0) TYPE_UNSIGNED (result_type) = 1; } - TYPE_FIELD_TYPE (result_type, 0) = domain_type; + result_type->field (0).set_type (domain_type); return result_type; } @@ -1380,11 +1493,11 @@ /* Find the innermost array type, in case the array is multi-dimensional. */ inner_array = array_type; - while (TYPE_CODE (TYPE_TARGET_TYPE (inner_array)) == TYPE_CODE_ARRAY) + while (TYPE_TARGET_TYPE (inner_array)->code () == TYPE_CODE_ARRAY) inner_array = TYPE_TARGET_TYPE (inner_array); elt_type = TYPE_TARGET_TYPE (inner_array); - if (TYPE_CODE (elt_type) == TYPE_CODE_INT) + if (elt_type->code () == TYPE_CODE_INT) { flags = TYPE_INSTANCE_FLAGS (elt_type) | TYPE_INSTANCE_FLAG_NOTTEXT; elt_type = make_qualified_type (elt_type, flags, NULL); @@ -1413,7 +1526,7 @@ struct type * internal_type_self_type (struct type *type) { - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_METHODPTR: case TYPE_CODE_MEMBERPTR: @@ -1439,7 +1552,7 @@ void set_type_self_type (struct type *type, struct type *self_type) { - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_METHODPTR: case TYPE_CODE_MEMBERPTR: @@ -1475,7 +1588,7 @@ struct type *to_type) { smash_type (type); - TYPE_CODE (type) = TYPE_CODE_MEMBERPTR; + type->set_code (TYPE_CODE_MEMBERPTR); TYPE_TARGET_TYPE (type) = to_type; set_type_self_type (type, self_type); /* Assume that a data member pointer is the same size as a normal @@ -1494,7 +1607,7 @@ smash_to_methodptr_type (struct type *type, struct type *to_type) { smash_type (type); - TYPE_CODE (type) = TYPE_CODE_METHODPTR; + type->set_code (TYPE_CODE_METHODPTR); TYPE_TARGET_TYPE (type) = to_type; set_type_self_type (type, TYPE_SELF_TYPE (to_type)); TYPE_LENGTH (type) = cplus_method_ptr_size (to_type); @@ -1513,11 +1626,11 @@ int nargs, int varargs) { smash_type (type); - TYPE_CODE (type) = TYPE_CODE_METHOD; + type->set_code (TYPE_CODE_METHOD); TYPE_TARGET_TYPE (type) = to_type; set_type_self_type (type, self_type); - TYPE_FIELDS (type) = args; - TYPE_NFIELDS (type) = nargs; + type->set_fields (args); + type->set_num_fields (nargs); if (varargs) TYPE_VARARGS (type) = 1; TYPE_LENGTH (type) = 1; /* In practice, this is never needed. */ @@ -1539,11 +1652,11 @@ type = check_typedef (type); - name = TYPE_NAME (type); + name = type->name (); if (name != NULL) return name; - name = TYPE_NAME (saved_type); + name = saved_type->name (); objfile = TYPE_OBJFILE (saved_type); error (_("Invalid anonymous type %s [in module %s], GCC PR debug/47510 bug?"), name ? name : "<anonymous>", @@ -1611,7 +1724,7 @@ { error (_("No struct type named %s."), name); } - if (TYPE_CODE (SYMBOL_TYPE (sym)) != TYPE_CODE_STRUCT) + if (SYMBOL_TYPE (sym)->code () != TYPE_CODE_STRUCT) { error (_("This context has class, union or enum %s, not a struct."), name); @@ -1635,7 +1748,7 @@ t = SYMBOL_TYPE (sym); - if (TYPE_CODE (t) == TYPE_CODE_UNION) + if (t->code () == TYPE_CODE_UNION) return t; /* If we get here, it's not a union. */ @@ -1656,7 +1769,7 @@ { error (_("No enum type named %s."), name); } - if (TYPE_CODE (SYMBOL_TYPE (sym)) != TYPE_CODE_ENUM) + if (SYMBOL_TYPE (sym)->code () != TYPE_CODE_ENUM) { error (_("This context has class, struct or union %s, not an enum."), name); @@ -1673,11 +1786,11 @@ { struct symbol *sym; char *nam = (char *) - alloca (strlen (name) + strlen (TYPE_NAME (type)) + 4); + alloca (strlen (name) + strlen (type->name ()) + 4); strcpy (nam, name); strcat (nam, "<"); - strcat (nam, TYPE_NAME (type)); + strcat (nam, type->name ()); strcat (nam, " >"); /* FIXME, extra space still introduced in gcc? */ sym = lookup_symbol (nam, block, VAR_DOMAIN, 0).symbol; @@ -1686,7 +1799,7 @@ { error (_("No template type named %s."), name); } - if (TYPE_CODE (SYMBOL_TYPE (sym)) != TYPE_CODE_STRUCT) + if (SYMBOL_TYPE (sym)->code () != TYPE_CODE_STRUCT) { error (_("This context has class, union or enum %s, not a struct."), name); @@ -1704,32 +1817,32 @@ for (;;) { type = check_typedef (type); - if (TYPE_CODE (type) != TYPE_CODE_PTR - && TYPE_CODE (type) != TYPE_CODE_REF) + if (type->code () != TYPE_CODE_PTR + && type->code () != TYPE_CODE_REF) break; type = TYPE_TARGET_TYPE (type); } - if (TYPE_CODE (type) != TYPE_CODE_STRUCT - && TYPE_CODE (type) != TYPE_CODE_UNION) + if (type->code () != TYPE_CODE_STRUCT + && type->code () != TYPE_CODE_UNION) { std::string type_name = type_to_string (type); error (_("Type %s is not a structure or union type."), type_name.c_str ()); } - for (i = TYPE_NFIELDS (type) - 1; i >= TYPE_N_BASECLASSES (type); i--) + for (i = type->num_fields () - 1; i >= TYPE_N_BASECLASSES (type); i--) { const char *t_field_name = TYPE_FIELD_NAME (type, i); if (t_field_name && (strcmp_iw (t_field_name, name) == 0)) { - return {&TYPE_FIELD (type, i), TYPE_FIELD_BITPOS (type, i)}; + return {&type->field (i), TYPE_FIELD_BITPOS (type, i)}; } else if (!t_field_name || *t_field_name == '\0') { struct_elt elt - = lookup_struct_elt (TYPE_FIELD_TYPE (type, i), name, 1); + = lookup_struct_elt (type->field (i).type (), name, 1); if (elt.field != NULL) { elt.offset += TYPE_FIELD_BITPOS (type, i); @@ -1760,7 +1873,7 @@ { struct_elt elt = lookup_struct_elt (type, name, noerr); if (elt.field != NULL) - return FIELD_TYPE (*elt.field); + return elt.field->type (); else return NULL; } @@ -1774,7 +1887,7 @@ unsigned int n; type = check_typedef (type); - gdb_assert (TYPE_CODE (type) == TYPE_CODE_INT && TYPE_UNSIGNED (type)); + gdb_assert (type->code () == TYPE_CODE_INT && TYPE_UNSIGNED (type)); gdb_assert (TYPE_LENGTH (type) <= sizeof (ULONGEST)); /* Written this way to avoid overflow. */ @@ -1791,7 +1904,7 @@ unsigned int n; type = check_typedef (type); - gdb_assert (TYPE_CODE (type) == TYPE_CODE_INT && !TYPE_UNSIGNED (type)); + gdb_assert (type->code () == TYPE_CODE_INT && !TYPE_UNSIGNED (type)); gdb_assert (TYPE_LENGTH (type) <= sizeof (LONGEST)); n = TYPE_LENGTH (type) * TARGET_CHAR_BIT; @@ -1810,8 +1923,8 @@ internal_type_vptr_fieldno (struct type *type) { type = check_typedef (type); - gdb_assert (TYPE_CODE (type) == TYPE_CODE_STRUCT - || TYPE_CODE (type) == TYPE_CODE_UNION); + gdb_assert (type->code () == TYPE_CODE_STRUCT + || type->code () == TYPE_CODE_UNION); if (!HAVE_CPLUS_STRUCT (type)) return -1; return TYPE_RAW_CPLUS_SPECIFIC (type)->vptr_fieldno; @@ -1823,8 +1936,8 @@ set_type_vptr_fieldno (struct type *type, int fieldno) { type = check_typedef (type); - gdb_assert (TYPE_CODE (type) == TYPE_CODE_STRUCT - || TYPE_CODE (type) == TYPE_CODE_UNION); + gdb_assert (type->code () == TYPE_CODE_STRUCT + || type->code () == TYPE_CODE_UNION); if (!HAVE_CPLUS_STRUCT (type)) ALLOCATE_CPLUS_STRUCT_TYPE (type); TYPE_RAW_CPLUS_SPECIFIC (type)->vptr_fieldno = fieldno; @@ -1837,8 +1950,8 @@ internal_type_vptr_basetype (struct type *type) { type = check_typedef (type); - gdb_assert (TYPE_CODE (type) == TYPE_CODE_STRUCT - || TYPE_CODE (type) == TYPE_CODE_UNION); + gdb_assert (type->code () == TYPE_CODE_STRUCT + || type->code () == TYPE_CODE_UNION); gdb_assert (TYPE_SPECIFIC_FIELD (type) == TYPE_SPECIFIC_CPLUS_STUFF); return TYPE_RAW_CPLUS_SPECIFIC (type)->vptr_basetype; } @@ -1849,8 +1962,8 @@ set_type_vptr_basetype (struct type *type, struct type *basetype) { type = check_typedef (type); - gdb_assert (TYPE_CODE (type) == TYPE_CODE_STRUCT - || TYPE_CODE (type) == TYPE_CODE_UNION); + gdb_assert (type->code () == TYPE_CODE_STRUCT + || type->code () == TYPE_CODE_UNION); if (!HAVE_CPLUS_STRUCT (type)) ALLOCATE_CPLUS_STRUCT_TYPE (type); TYPE_RAW_CPLUS_SPECIFIC (type)->vptr_basetype = basetype; @@ -1924,9 +2037,9 @@ static int array_type_has_dynamic_stride (struct type *type) { - struct dynamic_prop *prop = get_dyn_prop (DYN_PROP_BYTE_STRIDE, type); + struct dynamic_prop *prop = type->dyn_prop (DYN_PROP_BYTE_STRIDE); - return (prop != NULL && prop->kind != PROP_CONST); + return (prop != NULL && prop->kind () != PROP_CONST); } /* Worker for is_dynamic_type. */ @@ -1937,7 +2050,7 @@ type = check_typedef (type); /* We only want to recognize references at the outermost level. */ - if (top_level && TYPE_CODE (type) == TYPE_CODE_REF) + if (top_level && type->code () == TYPE_CODE_REF) type = check_typedef (TYPE_TARGET_TYPE (type)); /* Types that have a dynamic TYPE_DATA_LOCATION are considered @@ -1957,7 +2070,14 @@ if (TYPE_ALLOCATED_PROP (type)) return 1; - switch (TYPE_CODE (type)) + struct dynamic_prop *prop = type->dyn_prop (DYN_PROP_VARIANT_PARTS); + if (prop != nullptr && prop->kind () != PROP_TYPE) + return 1; + + if (TYPE_HAS_DYNAMIC_LENGTH (type)) + return 1; + + switch (type->code ()) { case TYPE_CODE_RANGE: { @@ -1966,7 +2086,7 @@ dynamic when its subtype is dynamic, even if the bounds of the range type are static. It allows us to assume that the subtype of a static range type is also static. */ - return (!has_static_range (TYPE_RANGE_DATA (type)) + return (!has_static_range (type->bounds ()) || is_dynamic_type_internal (TYPE_TARGET_TYPE (type), 0)); } @@ -1975,10 +2095,10 @@ treated as one here. */ case TYPE_CODE_ARRAY: { - gdb_assert (TYPE_NFIELDS (type) == 1); + gdb_assert (type->num_fields () == 1); /* The array is dynamic if either the bounds are dynamic... */ - if (is_dynamic_type_internal (TYPE_INDEX_TYPE (type), 0)) + if (is_dynamic_type_internal (type->index_type (), 0)) return 1; /* ... or the elements it contains have a dynamic contents... */ if (is_dynamic_type_internal (TYPE_TARGET_TYPE (type), 0)) @@ -1994,10 +2114,27 @@ { int i; - for (i = 0; i < TYPE_NFIELDS (type); ++i) - if (!field_is_static (&TYPE_FIELD (type, i)) - && is_dynamic_type_internal (TYPE_FIELD_TYPE (type, i), 0)) + bool is_cplus = HAVE_CPLUS_STRUCT (type); + + for (i = 0; i < type->num_fields (); ++i) + { + /* Static fields can be ignored here. */ + if (field_is_static (&type->field (i))) + continue; + /* If the field has dynamic type, then so does TYPE. */ + if (is_dynamic_type_internal (type->field (i).type (), 0)) + return 1; + /* If the field is at a fixed offset, then it is not + dynamic. */ + if (TYPE_FIELD_LOC_KIND (type, i) != FIELD_LOC_KIND_DWARF_BLOCK) + continue; + /* Do not consider C++ virtual base types to be dynamic + due to the field's offset being dynamic; these are + handled via other means. */ + if (is_cplus && BASETYPE_VIA_VIRTUAL (type, i)) + continue; return 1; + } } break; } @@ -2026,45 +2163,33 @@ { CORE_ADDR value; struct type *static_range_type, *static_target_type; - const struct dynamic_prop *prop; struct dynamic_prop low_bound, high_bound, stride; - gdb_assert (TYPE_CODE (dyn_range_type) == TYPE_CODE_RANGE); + gdb_assert (dyn_range_type->code () == TYPE_CODE_RANGE); - prop = &TYPE_RANGE_DATA (dyn_range_type)->low; + const struct dynamic_prop *prop = &dyn_range_type->bounds ()->low; if (dwarf2_evaluate_property (prop, NULL, addr_stack, &value)) - { - low_bound.kind = PROP_CONST; - low_bound.data.const_val = value; - } + low_bound.set_const_val (value); else - { - low_bound.kind = PROP_UNDEFINED; - low_bound.data.const_val = 0; - } + low_bound.set_undefined (); - prop = &TYPE_RANGE_DATA (dyn_range_type)->high; + prop = &dyn_range_type->bounds ()->high; if (dwarf2_evaluate_property (prop, NULL, addr_stack, &value)) { - high_bound.kind = PROP_CONST; - high_bound.data.const_val = value; + high_bound.set_const_val (value); - if (TYPE_RANGE_DATA (dyn_range_type)->flag_upper_bound_is_count) - high_bound.data.const_val - = low_bound.data.const_val + high_bound.data.const_val - 1; + if (dyn_range_type->bounds ()->flag_upper_bound_is_count) + high_bound.set_const_val + (low_bound.const_val () + high_bound.const_val () - 1); } else - { - high_bound.kind = PROP_UNDEFINED; - high_bound.data.const_val = 0; - } + high_bound.set_undefined (); - bool byte_stride_p = TYPE_RANGE_DATA (dyn_range_type)->flag_is_byte_stride; - prop = &TYPE_RANGE_DATA (dyn_range_type)->stride; + bool byte_stride_p = dyn_range_type->bounds ()->flag_is_byte_stride; + prop = &dyn_range_type->bounds ()->stride; if (dwarf2_evaluate_property (prop, NULL, addr_stack, &value)) { - stride.kind = PROP_CONST; - stride.data.const_val = value; + stride.set_const_val (value); /* If we have a bit stride that is not an exact number of bytes then I really don't think this is going to work with current GDB, the @@ -2078,19 +2203,18 @@ } else { - stride.kind = PROP_UNDEFINED; - stride.data.const_val = 0; + stride.set_undefined (); byte_stride_p = true; } static_target_type = resolve_dynamic_type_internal (TYPE_TARGET_TYPE (dyn_range_type), addr_stack, 0); - LONGEST bias = TYPE_RANGE_DATA (dyn_range_type)->bias; + LONGEST bias = dyn_range_type->bounds ()->bias; static_range_type = create_range_type_with_stride (copy_type (dyn_range_type), static_target_type, &low_bound, &high_bound, bias, &stride, byte_stride_p); - TYPE_RANGE_DATA (static_range_type)->flag_bound_evaluated = 1; + static_range_type->bounds ()->flag_bound_evaluated = 1; return static_range_type; } @@ -2111,43 +2235,38 @@ /* For dynamic type resolution strings can be treated like arrays of characters. */ - gdb_assert (TYPE_CODE (type) == TYPE_CODE_ARRAY - || TYPE_CODE (type) == TYPE_CODE_STRING); + gdb_assert (type->code () == TYPE_CODE_ARRAY + || type->code () == TYPE_CODE_STRING); type = copy_type (type); elt_type = type; - range_type = check_typedef (TYPE_INDEX_TYPE (elt_type)); + range_type = check_typedef (elt_type->index_type ()); range_type = resolve_dynamic_range (range_type, addr_stack); /* Resolve allocated/associated here before creating a new array type, which will update the length of the array accordingly. */ prop = TYPE_ALLOCATED_PROP (type); if (prop != NULL && dwarf2_evaluate_property (prop, NULL, addr_stack, &value)) - { - TYPE_DYN_PROP_ADDR (prop) = value; - TYPE_DYN_PROP_KIND (prop) = PROP_CONST; - } + prop->set_const_val (value); + prop = TYPE_ASSOCIATED_PROP (type); if (prop != NULL && dwarf2_evaluate_property (prop, NULL, addr_stack, &value)) - { - TYPE_DYN_PROP_ADDR (prop) = value; - TYPE_DYN_PROP_KIND (prop) = PROP_CONST; - } + prop->set_const_val (value); ary_dim = check_typedef (TYPE_TARGET_TYPE (elt_type)); - if (ary_dim != NULL && TYPE_CODE (ary_dim) == TYPE_CODE_ARRAY) + if (ary_dim != NULL && ary_dim->code () == TYPE_CODE_ARRAY) elt_type = resolve_dynamic_array_or_string (ary_dim, addr_stack); else elt_type = TYPE_TARGET_TYPE (type); - prop = get_dyn_prop (DYN_PROP_BYTE_STRIDE, type); + prop = type->dyn_prop (DYN_PROP_BYTE_STRIDE); if (prop != NULL) { if (dwarf2_evaluate_property (prop, NULL, addr_stack, &value)) { - remove_dyn_prop (DYN_PROP_BYTE_STRIDE, type); + type->remove_dyn_prop (DYN_PROP_BYTE_STRIDE); bit_stride = (unsigned int) (value * 8); } else @@ -2156,7 +2275,7 @@ if the DWARF info is not correct. Issue a warning, and assume no byte/bit stride (leave bit_stride = 0). */ warning (_("cannot determine array stride for type %s"), - TYPE_NAME (type) ? TYPE_NAME (type) : "<no name>"); + type->name () ? type->name () : "<no name>"); } } else @@ -2178,34 +2297,193 @@ int i; unsigned int max_len = 0; - gdb_assert (TYPE_CODE (type) == TYPE_CODE_UNION); + gdb_assert (type->code () == TYPE_CODE_UNION); resolved_type = copy_type (type); - TYPE_FIELDS (resolved_type) - = (struct field *) TYPE_ALLOC (resolved_type, - TYPE_NFIELDS (resolved_type) - * sizeof (struct field)); - memcpy (TYPE_FIELDS (resolved_type), - TYPE_FIELDS (type), - TYPE_NFIELDS (resolved_type) * sizeof (struct field)); - for (i = 0; i < TYPE_NFIELDS (resolved_type); ++i) + resolved_type->set_fields + ((struct field *) + TYPE_ALLOC (resolved_type, + resolved_type->num_fields () * sizeof (struct field))); + memcpy (resolved_type->fields (), + type->fields (), + resolved_type->num_fields () * sizeof (struct field)); + for (i = 0; i < resolved_type->num_fields (); ++i) { struct type *t; - if (field_is_static (&TYPE_FIELD (type, i))) + if (field_is_static (&type->field (i))) continue; - t = resolve_dynamic_type_internal (TYPE_FIELD_TYPE (resolved_type, i), + t = resolve_dynamic_type_internal (resolved_type->field (i).type (), addr_stack, 0); - TYPE_FIELD_TYPE (resolved_type, i) = t; - if (TYPE_LENGTH (t) > max_len) - max_len = TYPE_LENGTH (t); + resolved_type->field (i).set_type (t); + + struct type *real_type = check_typedef (t); + if (TYPE_LENGTH (real_type) > max_len) + max_len = TYPE_LENGTH (real_type); } TYPE_LENGTH (resolved_type) = max_len; return resolved_type; } +/* See gdbtypes.h. */ + +bool +variant::matches (ULONGEST value, bool is_unsigned) const +{ + for (const discriminant_range &range : discriminants) + if (range.contains (value, is_unsigned)) + return true; + return false; +} + +static void +compute_variant_fields_inner (struct type *type, + struct property_addr_info *addr_stack, + const variant_part &part, + std::vector<bool> &flags); + +/* A helper function to determine which variant fields will be active. + This handles both the variant's direct fields, and any variant + parts embedded in this variant. TYPE is the type we're examining. + ADDR_STACK holds information about the concrete object. VARIANT is + the current variant to be handled. FLAGS is where the results are + stored -- this function sets the Nth element in FLAGS if the + corresponding field is enabled. ENABLED is whether this variant is + enabled or not. */ + +static void +compute_variant_fields_recurse (struct type *type, + struct property_addr_info *addr_stack, + const variant &variant, + std::vector<bool> &flags, + bool enabled) +{ + for (int field = variant.first_field; field < variant.last_field; ++field) + flags[field] = enabled; + + for (const variant_part &new_part : variant.parts) + { + if (enabled) + compute_variant_fields_inner (type, addr_stack, new_part, flags); + else + { + for (const auto &sub_variant : new_part.variants) + compute_variant_fields_recurse (type, addr_stack, sub_variant, + flags, enabled); + } + } +} + +/* A helper function to determine which variant fields will be active. + This evaluates the discriminant, decides which variant (if any) is + active, and then updates FLAGS to reflect which fields should be + available. TYPE is the type we're examining. ADDR_STACK holds + information about the concrete object. VARIANT is the current + variant to be handled. FLAGS is where the results are stored -- + this function sets the Nth element in FLAGS if the corresponding + field is enabled. */ + +static void +compute_variant_fields_inner (struct type *type, + struct property_addr_info *addr_stack, + const variant_part &part, + std::vector<bool> &flags) +{ + /* Evaluate the discriminant. */ + gdb::optional<ULONGEST> discr_value; + if (part.discriminant_index != -1) + { + int idx = part.discriminant_index; + + if (TYPE_FIELD_LOC_KIND (type, idx) != FIELD_LOC_KIND_BITPOS) + error (_("Cannot determine struct field location" + " (invalid location kind)")); + + if (addr_stack->valaddr.data () != NULL) + discr_value = unpack_field_as_long (type, addr_stack->valaddr.data (), + idx); + else + { + CORE_ADDR addr = (addr_stack->addr + + (TYPE_FIELD_BITPOS (type, idx) + / TARGET_CHAR_BIT)); + + LONGEST bitsize = TYPE_FIELD_BITSIZE (type, idx); + LONGEST size = bitsize / 8; + if (size == 0) + size = TYPE_LENGTH (type->field (idx).type ()); + + gdb_byte bits[sizeof (ULONGEST)]; + read_memory (addr, bits, size); + + LONGEST bitpos = (TYPE_FIELD_BITPOS (type, idx) + % TARGET_CHAR_BIT); + + discr_value = unpack_bits_as_long (type->field (idx).type (), + bits, bitpos, bitsize); + } + } + + /* Go through each variant and see which applies. */ + const variant *default_variant = nullptr; + const variant *applied_variant = nullptr; + for (const auto &variant : part.variants) + { + if (variant.is_default ()) + default_variant = &variant; + else if (discr_value.has_value () + && variant.matches (*discr_value, part.is_unsigned)) + { + applied_variant = &variant; + break; + } + } + if (applied_variant == nullptr) + applied_variant = default_variant; + + for (const auto &variant : part.variants) + compute_variant_fields_recurse (type, addr_stack, variant, + flags, applied_variant == &variant); +} + +/* Determine which variant fields are available in TYPE. The enabled + fields are stored in RESOLVED_TYPE. ADDR_STACK holds information + about the concrete object. PARTS describes the top-level variant + parts for this type. */ + +static void +compute_variant_fields (struct type *type, + struct type *resolved_type, + struct property_addr_info *addr_stack, + const gdb::array_view<variant_part> &parts) +{ + /* Assume all fields are included by default. */ + std::vector<bool> flags (resolved_type->num_fields (), true); + + /* Now disable fields based on the variants that control them. */ + for (const auto &part : parts) + compute_variant_fields_inner (type, addr_stack, part, flags); + + resolved_type->set_num_fields + (std::count (flags.begin (), flags.end (), true)); + resolved_type->set_fields + ((struct field *) + TYPE_ALLOC (resolved_type, + resolved_type->num_fields () * sizeof (struct field))); + + int out = 0; + for (int i = 0; i < type->num_fields (); ++i) + { + if (!flags[i]) + continue; + + resolved_type->field (out) = type->field (i); + ++out; + } +} + /* Resolve dynamic bounds of members of the struct TYPE to static bounds. ADDR_STACK is a stack of struct property_addr_info to be used if needed during the dynamic resolution. */ @@ -2218,25 +2496,56 @@ int i; unsigned resolved_type_bit_length = 0; - gdb_assert (TYPE_CODE (type) == TYPE_CODE_STRUCT); - gdb_assert (TYPE_NFIELDS (type) > 0); + gdb_assert (type->code () == TYPE_CODE_STRUCT); + gdb_assert (type->num_fields () > 0); resolved_type = copy_type (type); - TYPE_FIELDS (resolved_type) - = (struct field *) TYPE_ALLOC (resolved_type, - TYPE_NFIELDS (resolved_type) - * sizeof (struct field)); - memcpy (TYPE_FIELDS (resolved_type), - TYPE_FIELDS (type), - TYPE_NFIELDS (resolved_type) * sizeof (struct field)); - for (i = 0; i < TYPE_NFIELDS (resolved_type); ++i) + + dynamic_prop *variant_prop = resolved_type->dyn_prop (DYN_PROP_VARIANT_PARTS); + if (variant_prop != nullptr && variant_prop->kind () == PROP_VARIANT_PARTS) + { + compute_variant_fields (type, resolved_type, addr_stack, + *variant_prop->variant_parts ()); + /* We want to leave the property attached, so that the Rust code + can tell whether the type was originally an enum. */ + variant_prop->set_original_type (type); + } + else + { + resolved_type->set_fields + ((struct field *) + TYPE_ALLOC (resolved_type, + resolved_type->num_fields () * sizeof (struct field))); + memcpy (resolved_type->fields (), + type->fields (), + resolved_type->num_fields () * sizeof (struct field)); + } + + for (i = 0; i < resolved_type->num_fields (); ++i) { unsigned new_bit_length; struct property_addr_info pinfo; - if (field_is_static (&TYPE_FIELD (type, i))) + if (field_is_static (&resolved_type->field (i))) continue; + if (TYPE_FIELD_LOC_KIND (resolved_type, i) == FIELD_LOC_KIND_DWARF_BLOCK) + { + struct dwarf2_property_baton baton; + baton.property_type + = lookup_pointer_type (resolved_type->field (i).type ()); + baton.locexpr = *TYPE_FIELD_DWARF_BLOCK (resolved_type, i); + + struct dynamic_prop prop; + prop.set_locexpr (&baton); + + CORE_ADDR addr; + if (dwarf2_evaluate_property (&prop, nullptr, addr_stack, &addr, + true)) + SET_FIELD_BITPOS (resolved_type->field (i), + TARGET_CHAR_BIT * (addr - addr_stack->addr)); + } + /* As we know this field is not a static field, the field's field_loc_kind should be FIELD_LOC_KIND_BITPOS. Verify this is the case, but only trigger a simple error rather @@ -2244,20 +2553,20 @@ that verification indicates a bug in our code, the error is not severe enough to suggest to the user he stops his debugging session because of it. */ - if (TYPE_FIELD_LOC_KIND (type, i) != FIELD_LOC_KIND_BITPOS) + if (TYPE_FIELD_LOC_KIND (resolved_type, i) != FIELD_LOC_KIND_BITPOS) error (_("Cannot determine struct field location" " (invalid location kind)")); - pinfo.type = check_typedef (TYPE_FIELD_TYPE (type, i)); + pinfo.type = check_typedef (resolved_type->field (i).type ()); pinfo.valaddr = addr_stack->valaddr; pinfo.addr = (addr_stack->addr + (TYPE_FIELD_BITPOS (resolved_type, i) / TARGET_CHAR_BIT)); pinfo.next = addr_stack; - TYPE_FIELD_TYPE (resolved_type, i) - = resolve_dynamic_type_internal (TYPE_FIELD_TYPE (resolved_type, i), - &pinfo, 0); + resolved_type->field (i).set_type + (resolve_dynamic_type_internal (resolved_type->field (i).type (), + &pinfo, 0)); gdb_assert (TYPE_FIELD_LOC_KIND (resolved_type, i) == FIELD_LOC_KIND_BITPOS); @@ -2265,8 +2574,12 @@ if (TYPE_FIELD_BITSIZE (resolved_type, i) != 0) new_bit_length += TYPE_FIELD_BITSIZE (resolved_type, i); else - new_bit_length += (TYPE_LENGTH (TYPE_FIELD_TYPE (resolved_type, i)) - * TARGET_CHAR_BIT); + { + struct type *real_type + = check_typedef (resolved_type->field (i).type ()); + + new_bit_length += (TYPE_LENGTH (real_type) * TARGET_CHAR_BIT); + } /* Normally, we would use the position and size of the last field to determine the size of the enclosing structure. But GCC seems @@ -2301,14 +2614,20 @@ int top_level) { struct type *real_type = check_typedef (type); - struct type *resolved_type = type; + struct type *resolved_type = nullptr; struct dynamic_prop *prop; CORE_ADDR value; if (!is_dynamic_type_internal (real_type, top_level)) return type; - if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF) + gdb::optional<CORE_ADDR> type_length; + prop = TYPE_DYNAMIC_LENGTH (type); + if (prop != NULL + && dwarf2_evaluate_property (prop, NULL, addr_stack, &value)) + type_length = value; + + if (type->code () == TYPE_CODE_TYPEDEF) { resolved_type = copy_type (type); TYPE_TARGET_TYPE (resolved_type) @@ -2320,16 +2639,17 @@ /* Before trying to resolve TYPE, make sure it is not a stub. */ type = real_type; - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_REF: { struct property_addr_info pinfo; pinfo.type = check_typedef (TYPE_TARGET_TYPE (type)); - pinfo.valaddr = NULL; - if (addr_stack->valaddr != NULL) - pinfo.addr = extract_typed_address (addr_stack->valaddr, type); + pinfo.valaddr = {}; + if (addr_stack->valaddr.data () != NULL) + pinfo.addr = extract_typed_address (addr_stack->valaddr.data (), + type); else pinfo.addr = read_memory_typed_address (addr_stack->addr, type); pinfo.next = addr_stack; @@ -2362,14 +2682,20 @@ } } + if (resolved_type == nullptr) + return type; + + if (type_length.has_value ()) + { + TYPE_LENGTH (resolved_type) = *type_length; + resolved_type->remove_dyn_prop (DYN_PROP_BYTE_SIZE); + } + /* Resolve data_location attribute. */ prop = TYPE_DATA_LOCATION (resolved_type); if (prop != NULL && dwarf2_evaluate_property (prop, NULL, addr_stack, &value)) - { - TYPE_DYN_PROP_ADDR (prop) = value; - TYPE_DYN_PROP_KIND (prop) = PROP_CONST; - } + prop->set_const_val (value); return resolved_type; } @@ -2377,7 +2703,8 @@ /* See gdbtypes.h */ struct type * -resolve_dynamic_type (struct type *type, const gdb_byte *valaddr, +resolve_dynamic_type (struct type *type, + gdb::array_view<const gdb_byte> valaddr, CORE_ADDR addr) { struct property_addr_info pinfo @@ -2388,10 +2715,10 @@ /* See gdbtypes.h */ -struct dynamic_prop * -get_dyn_prop (enum dynamic_prop_node_kind prop_kind, const struct type *type) +dynamic_prop * +type::dyn_prop (dynamic_prop_node_kind prop_kind) const { - struct dynamic_prop_list *node = TYPE_DYN_PROP_LIST (type); + dynamic_prop_list *node = this->main_type->dyn_prop_list; while (node != NULL) { @@ -2405,43 +2732,41 @@ /* See gdbtypes.h */ void -add_dyn_prop (enum dynamic_prop_node_kind prop_kind, struct dynamic_prop prop, - struct type *type) +type::add_dyn_prop (dynamic_prop_node_kind prop_kind, dynamic_prop prop) { struct dynamic_prop_list *temp; - gdb_assert (TYPE_OBJFILE_OWNED (type)); + gdb_assert (TYPE_OBJFILE_OWNED (this)); - temp = XOBNEW (&TYPE_OBJFILE (type)->objfile_obstack, + temp = XOBNEW (&TYPE_OBJFILE (this)->objfile_obstack, struct dynamic_prop_list); temp->prop_kind = prop_kind; temp->prop = prop; - temp->next = TYPE_DYN_PROP_LIST (type); + temp->next = this->main_type->dyn_prop_list; - TYPE_DYN_PROP_LIST (type) = temp; + this->main_type->dyn_prop_list = temp; } -/* Remove dynamic property from TYPE in case it exists. */ +/* See gdbtypes.h. */ void -remove_dyn_prop (enum dynamic_prop_node_kind prop_kind, - struct type *type) +type::remove_dyn_prop (dynamic_prop_node_kind kind) { struct dynamic_prop_list *prev_node, *curr_node; - curr_node = TYPE_DYN_PROP_LIST (type); + curr_node = this->main_type->dyn_prop_list; prev_node = NULL; while (NULL != curr_node) { - if (curr_node->prop_kind == prop_kind) + if (curr_node->prop_kind == kind) { /* Update the linked list but don't free anything. The property was allocated on objstack and it is not known if we are on top of it. Nevertheless, everything is released when the complete objstack is freed. */ if (NULL == prev_node) - TYPE_DYN_PROP_LIST (type) = curr_node->next; + this->main_type->dyn_prop_list = curr_node->next; else prev_node->next = curr_node->next; @@ -2491,7 +2816,7 @@ gdb_assert (type); - while (TYPE_CODE (type) == TYPE_CODE_TYPEDEF) + while (type->code () == TYPE_CODE_TYPEDEF) { if (!TYPE_TARGET_TYPE (type)) { @@ -2503,7 +2828,7 @@ if (currently_reading_symtab) return make_qualified_type (type, instance_flags, NULL); - name = TYPE_NAME (type); + name = type->name (); /* FIXME: shouldn't we look in STRUCT_DOMAIN and/or VAR_DOMAIN as appropriate? */ if (name == NULL) @@ -2556,7 +2881,7 @@ && opaque_type_resolution && !currently_reading_symtab) { - const char *name = TYPE_NAME (type); + const char *name = type->name (); struct type *newtype; if (name == NULL) @@ -2590,7 +2915,7 @@ types. */ else if (TYPE_STUB (type) && !currently_reading_symtab) { - const char *name = TYPE_NAME (type); + const char *name = type->name (); /* FIXME: shouldn't we look in STRUCT_DOMAIN and/or VAR_DOMAIN as appropriate? */ struct symbol *sym; @@ -2606,7 +2931,7 @@ /* Same as above for opaque types, we can replace the stub with the complete type only if they are in the same objfile. */ - if (TYPE_OBJFILE (SYMBOL_TYPE(sym)) == TYPE_OBJFILE (type)) + if (TYPE_OBJFILE (SYMBOL_TYPE (sym)) == TYPE_OBJFILE (type)) type = make_qualified_type (SYMBOL_TYPE (sym), TYPE_INSTANCE_FLAGS (type), type); @@ -2623,11 +2948,14 @@ { /* Nothing we can do. */ } - else if (TYPE_CODE (type) == TYPE_CODE_RANGE) + else if (type->code () == TYPE_CODE_RANGE) { TYPE_LENGTH (type) = TYPE_LENGTH (target_type); TYPE_TARGET_STUB (type) = 0; } + else if (type->code () == TYPE_CODE_ARRAY + && update_static_array_size (type)) + TYPE_TARGET_STUB (type) = 0; } type = make_qualified_type (type, instance_flags, NULL); @@ -2737,7 +3065,7 @@ argcount = 0; else { - argtypes[0].type = lookup_pointer_type (type); + argtypes[0].set_type (lookup_pointer_type (type)); argcount = 1; } @@ -2753,8 +3081,8 @@ if (strncmp (argtypetext, "...", p - argtypetext) != 0 && strncmp (argtypetext, "void", p - argtypetext) != 0) { - argtypes[argcount].type = - safe_parse_type (gdbarch, argtypetext, p - argtypetext); + argtypes[argcount].set_type + (safe_parse_type (gdbarch, argtypetext, p - argtypetext)); argcount += 1; } argtypetext = p + 1; @@ -2847,7 +3175,7 @@ static void set_type_code (struct type *type, enum type_code code) { - TYPE_CODE (type) = code; + type->set_code (code); switch (code) { @@ -2889,7 +3217,7 @@ const struct floatformat * floatformat_from_type (const struct type *type) { - gdb_assert (TYPE_CODE (type) == TYPE_CODE_FLT); + gdb_assert (type->code () == TYPE_CODE_FLT); gdb_assert (TYPE_FLOATFORMAT (type)); return TYPE_FLOATFORMAT (type); } @@ -2910,7 +3238,7 @@ set_type_code (type, code); gdb_assert ((bit % TARGET_CHAR_BIT) == 0); TYPE_LENGTH (type) = bit / TARGET_CHAR_BIT; - TYPE_NAME (type) = name; + type->set_name (name); return type; } @@ -2991,7 +3319,7 @@ { if (byte_order == BFD_ENDIAN_UNKNOWN) { - struct gdbarch *gdbarch = get_objfile_arch (objfile); + struct gdbarch *gdbarch = objfile->arch (); byte_order = gdbarch_byte_order (gdbarch); } const struct floatformat *fmt = floatformats[byte_order]; @@ -3016,19 +3344,40 @@ return t; } -/* Allocate a TYPE_CODE_COMPLEX type structure associated with OBJFILE. - NAME is the type name. TARGET_TYPE is the component float type. */ +/* Allocate a TYPE_CODE_COMPLEX type structure. NAME is the type + name. TARGET_TYPE is the component type. */ struct type * -init_complex_type (struct objfile *objfile, - const char *name, struct type *target_type) +init_complex_type (const char *name, struct type *target_type) { struct type *t; - t = init_type (objfile, TYPE_CODE_COMPLEX, - 2 * TYPE_LENGTH (target_type) * TARGET_CHAR_BIT, name); - TYPE_TARGET_TYPE (t) = target_type; - return t; + gdb_assert (target_type->code () == TYPE_CODE_INT + || target_type->code () == TYPE_CODE_FLT); + + if (TYPE_MAIN_TYPE (target_type)->flds_bnds.complex_type == nullptr) + { + if (name == nullptr && target_type->name () != nullptr) + { + char *new_name + = (char *) TYPE_ALLOC (target_type, + strlen (target_type->name ()) + + strlen ("_Complex ") + 1); + strcpy (new_name, "_Complex "); + strcat (new_name, target_type->name ()); + name = new_name; + } + + t = alloc_type_copy (target_type); + set_type_code (t, TYPE_CODE_COMPLEX); + TYPE_LENGTH (t) = 2 * TYPE_LENGTH (target_type); + t->set_name (name); + + TYPE_TARGET_TYPE (t) = target_type; + TYPE_MAIN_TYPE (target_type)->flds_bnds.complex_type = t; + } + + return TYPE_MAIN_TYPE (target_type)->flds_bnds.complex_type; } /* Allocate a TYPE_CODE_PTR type structure associated with OBJFILE. @@ -3074,7 +3423,7 @@ if (align != 0) return align; - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_PTR: case TYPE_CODE_FUNC: @@ -3103,12 +3452,12 @@ case TYPE_CODE_UNION: { int number_of_non_static_fields = 0; - for (unsigned i = 0; i < TYPE_NFIELDS (type); ++i) + for (unsigned i = 0; i < type->num_fields (); ++i) { - if (!field_is_static (&TYPE_FIELD (type, i))) + if (!field_is_static (&type->field (i))) { number_of_non_static_fields++; - ULONGEST f_align = type_align (TYPE_FIELD_TYPE (type, i)); + ULONGEST f_align = type_align (type->field (i).type ()); if (f_align == 0) { /* Don't pretend we know something we don't. */ @@ -3184,8 +3533,8 @@ t = check_typedef (t); return (t != NULL - && TYPE_CODE (t) == TYPE_CODE_PTR - && TYPE_CODE (TYPE_TARGET_TYPE (t)) != TYPE_CODE_VOID); + && t->code () == TYPE_CODE_PTR + && TYPE_TARGET_TYPE (t)->code () != TYPE_CODE_VOID); } int @@ -3194,12 +3543,12 @@ t = check_typedef (t); return ((t != NULL) - && ((TYPE_CODE (t) == TYPE_CODE_INT) - || (TYPE_CODE (t) == TYPE_CODE_ENUM) - || (TYPE_CODE (t) == TYPE_CODE_FLAGS) - || (TYPE_CODE (t) == TYPE_CODE_CHAR) - || (TYPE_CODE (t) == TYPE_CODE_RANGE) - || (TYPE_CODE (t) == TYPE_CODE_BOOL))); + && ((t->code () == TYPE_CODE_INT) + || (t->code () == TYPE_CODE_ENUM) + || (t->code () == TYPE_CODE_FLAGS) + || (t->code () == TYPE_CODE_CHAR) + || (t->code () == TYPE_CODE_RANGE) + || (t->code () == TYPE_CODE_BOOL))); } int @@ -3208,8 +3557,8 @@ t = check_typedef (t); return ((t != NULL) - && ((TYPE_CODE (t) == TYPE_CODE_FLT) - || (TYPE_CODE (t) == TYPE_CODE_DECFLOAT))); + && ((t->code () == TYPE_CODE_FLT) + || (t->code () == TYPE_CODE_DECFLOAT))); } /* Return true if TYPE is scalar. */ @@ -3219,7 +3568,7 @@ { type = check_typedef (type); - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_ARRAY: case TYPE_CODE_STRUCT: @@ -3244,27 +3593,27 @@ if (is_scalar_type (t)) return 1; /* Are we dealing with an array or string of known dimensions? */ - else if ((TYPE_CODE (t) == TYPE_CODE_ARRAY - || TYPE_CODE (t) == TYPE_CODE_STRING) && TYPE_NFIELDS (t) == 1 - && TYPE_CODE (TYPE_INDEX_TYPE (t)) == TYPE_CODE_RANGE) + else if ((t->code () == TYPE_CODE_ARRAY + || t->code () == TYPE_CODE_STRING) && t->num_fields () == 1 + && t->index_type ()->code () == TYPE_CODE_RANGE) { LONGEST low_bound, high_bound; struct type *elt_type = check_typedef (TYPE_TARGET_TYPE (t)); - get_discrete_bounds (TYPE_INDEX_TYPE (t), &low_bound, &high_bound); + get_discrete_bounds (t->index_type (), &low_bound, &high_bound); return high_bound == low_bound && is_scalar_type_recursive (elt_type); } /* Are we dealing with a struct with one element? */ - else if (TYPE_CODE (t) == TYPE_CODE_STRUCT && TYPE_NFIELDS (t) == 1) - return is_scalar_type_recursive (TYPE_FIELD_TYPE (t, 0)); - else if (TYPE_CODE (t) == TYPE_CODE_UNION) + else if (t->code () == TYPE_CODE_STRUCT && t->num_fields () == 1) + return is_scalar_type_recursive (t->field (0).type ()); + else if (t->code () == TYPE_CODE_UNION) { - int i, n = TYPE_NFIELDS (t); + int i, n = t->num_fields (); /* If all elements of the union are scalar, then the union is scalar. */ for (i = 0; i < n; i++) - if (!is_scalar_type_recursive (TYPE_FIELD_TYPE (t, i))) + if (!is_scalar_type_recursive (t->field (i).type ())) return 0; return 1; @@ -3278,8 +3627,8 @@ int class_or_union_p (const struct type *t) { - return (TYPE_CODE (t) == TYPE_CODE_STRUCT - || TYPE_CODE (t) == TYPE_CODE_UNION); + return (t->code () == TYPE_CODE_STRUCT + || t->code () == TYPE_CODE_UNION); } /* A helper function which returns true if types A and B represent the @@ -3290,8 +3639,8 @@ class_types_same_p (const struct type *a, const struct type *b) { return (TYPE_MAIN_TYPE (a) == TYPE_MAIN_TYPE (b) - || (TYPE_NAME (a) && TYPE_NAME (b) - && !strcmp (TYPE_NAME (a), TYPE_NAME (b)))); + || (a->name () && b->name () + && !strcmp (a->name (), b->name ()))); } /* If BASE is an ancestor of DCLASS return the distance between them. @@ -3621,21 +3970,21 @@ return true; /* Resolve typedefs */ - if (TYPE_CODE (a) == TYPE_CODE_TYPEDEF) + if (a->code () == TYPE_CODE_TYPEDEF) a = check_typedef (a); - if (TYPE_CODE (b) == TYPE_CODE_TYPEDEF) + if (b->code () == TYPE_CODE_TYPEDEF) b = check_typedef (b); /* If after resolving typedefs a and b are not of the same type code then they are not equal. */ - if (TYPE_CODE (a) != TYPE_CODE (b)) + if (a->code () != b->code ()) return false; /* If a and b are both pointers types or both reference types then they are equal of the same type iff the objects they refer to are of the same type. */ - if (TYPE_CODE (a) == TYPE_CODE_PTR - || TYPE_CODE (a) == TYPE_CODE_REF) + if (a->code () == TYPE_CODE_PTR + || a->code () == TYPE_CODE_REF) return types_equal (TYPE_TARGET_TYPE (a), TYPE_TARGET_TYPE (b)); @@ -3644,8 +3993,8 @@ stubs. The types won't point to the same address, but they really are the same. */ - if (TYPE_NAME (a) && TYPE_NAME (b) - && strcmp (TYPE_NAME (a), TYPE_NAME (b)) == 0) + if (a->name () && b->name () + && strcmp (a->name (), b->name ()) == 0) return true; /* Check if identical after resolving typedefs. */ @@ -3654,18 +4003,18 @@ /* Two function types are equal if their argument and return types are equal. */ - if (TYPE_CODE (a) == TYPE_CODE_FUNC) + if (a->code () == TYPE_CODE_FUNC) { int i; - if (TYPE_NFIELDS (a) != TYPE_NFIELDS (b)) + if (a->num_fields () != b->num_fields ()) return false; if (!types_equal (TYPE_TARGET_TYPE (a), TYPE_TARGET_TYPE (b))) return false; - for (i = 0; i < TYPE_NFIELDS (a); ++i) - if (!types_equal (TYPE_FIELD_TYPE (a, i), TYPE_FIELD_TYPE (b, i))) + for (i = 0; i < a->num_fields (); ++i) + if (!types_equal (a->field (i).type (), b->field (i).type ())) return false; return true; @@ -3714,7 +4063,7 @@ if (type1 == type2) return true; - if (TYPE_CODE (type1) != TYPE_CODE (type2) + if (type1->code () != type2->code () || TYPE_LENGTH (type1) != TYPE_LENGTH (type2) || TYPE_UNSIGNED (type1) != TYPE_UNSIGNED (type2) || TYPE_NOSIGN (type1) != TYPE_NOSIGN (type2) @@ -3723,27 +4072,27 @@ || TYPE_VECTOR (type1) != TYPE_VECTOR (type2) || TYPE_NOTTEXT (type1) != TYPE_NOTTEXT (type2) || TYPE_INSTANCE_FLAGS (type1) != TYPE_INSTANCE_FLAGS (type2) - || TYPE_NFIELDS (type1) != TYPE_NFIELDS (type2)) + || type1->num_fields () != type2->num_fields ()) return false; - if (!compare_maybe_null_strings (TYPE_NAME (type1), TYPE_NAME (type2))) + if (!compare_maybe_null_strings (type1->name (), type2->name ())) return false; - if (!compare_maybe_null_strings (TYPE_NAME (type1), TYPE_NAME (type2))) + if (!compare_maybe_null_strings (type1->name (), type2->name ())) return false; - if (TYPE_CODE (type1) == TYPE_CODE_RANGE) + if (type1->code () == TYPE_CODE_RANGE) { - if (*TYPE_RANGE_DATA (type1) != *TYPE_RANGE_DATA (type2)) + if (*type1->bounds () != *type2->bounds ()) return false; } else { int i; - for (i = 0; i < TYPE_NFIELDS (type1); ++i) + for (i = 0; i < type1->num_fields (); ++i) { - const struct field *field1 = &TYPE_FIELD (type1, i); - const struct field *field2 = &TYPE_FIELD (type2, i); + const struct field *field1 = &type1->field (i); + const struct field *field2 = &type2->field (i); if (FIELD_ARTIFICIAL (*field1) != FIELD_ARTIFICIAL (*field2) || FIELD_BITSIZE (*field1) != FIELD_BITSIZE (*field2) @@ -3790,7 +4139,7 @@ FIELD_LOC_KIND (*field1)); } - worklist->emplace_back (FIELD_TYPE (*field1), FIELD_TYPE (*field2)); + worklist->emplace_back (field1->type (), field2->type ()); } } @@ -3817,7 +4166,7 @@ { while (!worklist->empty ()) { - int added; + bool added; struct type_equality_entry entry = std::move (worklist->back ()); worklist->pop_back (); @@ -3862,8 +4211,8 @@ { struct dynamic_prop *prop = TYPE_ALLOCATED_PROP (type); - return (prop && TYPE_DYN_PROP_KIND (prop) == PROP_CONST - && !TYPE_DYN_PROP_ADDR (prop)); + return (prop != nullptr && prop->kind () == PROP_CONST + && prop->const_val () == 0); } /* Associated status of type TYPE. Return zero if type TYPE is associated. @@ -3874,8 +4223,8 @@ { struct dynamic_prop *prop = TYPE_ASSOCIATED_PROP (type); - return (prop && TYPE_DYN_PROP_KIND (prop) == PROP_CONST - && !TYPE_DYN_PROP_ADDR (prop)); + return (prop != nullptr && prop->kind () == PROP_CONST + && prop->const_val () == 0); } /* rank_one_type helper for when PARM's type code is TYPE_CODE_PTR. */ @@ -3885,13 +4234,13 @@ { struct rank rank = {0,0}; - switch (TYPE_CODE (arg)) + switch (arg->code ()) { case TYPE_CODE_PTR: /* Allowed pointer conversions are: (a) pointer to void-pointer conversion. */ - if (TYPE_CODE (TYPE_TARGET_TYPE (parm)) == TYPE_CODE_VOID) + if (TYPE_TARGET_TYPE (parm)->code () == TYPE_CODE_VOID) return VOID_PTR_CONVERSION_BADNESS; /* (b) pointer to ancestor-pointer conversion. */ @@ -3923,7 +4272,7 @@ case TYPE_CODE_FUNC: return rank_one_type (TYPE_TARGET_TYPE (parm), arg, NULL); case TYPE_CODE_INT: - if (value != NULL && TYPE_CODE (value_type (value)) == TYPE_CODE_INT) + if (value != NULL && value_type (value)->code () == TYPE_CODE_INT) { if (value_as_long (value) == 0) { @@ -3954,7 +4303,7 @@ static struct rank rank_one_type_parm_array (struct type *parm, struct type *arg, struct value *value) { - switch (TYPE_CODE (arg)) + switch (arg->code ()) { case TYPE_CODE_PTR: case TYPE_CODE_ARRAY: @@ -3970,7 +4319,7 @@ static struct rank rank_one_type_parm_func (struct type *parm, struct type *arg, struct value *value) { - switch (TYPE_CODE (arg)) + switch (arg->code ()) { case TYPE_CODE_PTR: /* funcptr -> func */ return rank_one_type (parm, TYPE_TARGET_TYPE (arg), NULL); @@ -3984,7 +4333,7 @@ static struct rank rank_one_type_parm_int (struct type *parm, struct type *arg, struct value *value) { - switch (TYPE_CODE (arg)) + switch (arg->code ()) { case TYPE_CODE_INT: if (TYPE_LENGTH (arg) == TYPE_LENGTH (parm)) @@ -4005,12 +4354,12 @@ { /* unsigned int -> unsigned int, or unsigned long -> unsigned long */ - if (integer_types_same_name_p (TYPE_NAME (parm), - TYPE_NAME (arg))) + if (integer_types_same_name_p (parm->name (), + arg->name ())) return EXACT_MATCH_BADNESS; - else if (integer_types_same_name_p (TYPE_NAME (arg), + else if (integer_types_same_name_p (arg->name (), "int") - && integer_types_same_name_p (TYPE_NAME (parm), + && integer_types_same_name_p (parm->name (), "long")) /* unsigned int -> unsigned long */ return INTEGER_PROMOTION_BADNESS; @@ -4020,9 +4369,9 @@ } else { - if (integer_types_same_name_p (TYPE_NAME (arg), + if (integer_types_same_name_p (arg->name (), "long") - && integer_types_same_name_p (TYPE_NAME (parm), + && integer_types_same_name_p (parm->name (), "int")) /* signed long -> unsigned int */ return INTEGER_CONVERSION_BADNESS; @@ -4033,12 +4382,12 @@ } else if (!TYPE_NOSIGN (arg) && !TYPE_UNSIGNED (arg)) { - if (integer_types_same_name_p (TYPE_NAME (parm), - TYPE_NAME (arg))) + if (integer_types_same_name_p (parm->name (), + arg->name ())) return EXACT_MATCH_BADNESS; - else if (integer_types_same_name_p (TYPE_NAME (arg), + else if (integer_types_same_name_p (arg->name (), "int") - && integer_types_same_name_p (TYPE_NAME (parm), + && integer_types_same_name_p (parm->name (), "long")) return INTEGER_PROMOTION_BADNESS; else @@ -4073,7 +4422,7 @@ static struct rank rank_one_type_parm_enum (struct type *parm, struct type *arg, struct value *value) { - switch (TYPE_CODE (arg)) + switch (arg->code ()) { case TYPE_CODE_INT: case TYPE_CODE_CHAR: @@ -4095,7 +4444,7 @@ static struct rank rank_one_type_parm_char (struct type *parm, struct type *arg, struct value *value) { - switch (TYPE_CODE (arg)) + switch (arg->code ()) { case TYPE_CODE_RANGE: case TYPE_CODE_BOOL: @@ -4142,7 +4491,7 @@ static struct rank rank_one_type_parm_range (struct type *parm, struct type *arg, struct value *value) { - switch (TYPE_CODE (arg)) + switch (arg->code ()) { case TYPE_CODE_INT: case TYPE_CODE_CHAR: @@ -4162,7 +4511,7 @@ static struct rank rank_one_type_parm_bool (struct type *parm, struct type *arg, struct value *value) { - switch (TYPE_CODE (arg)) + switch (arg->code ()) { /* n3290 draft, section 4.12.1 (conv.bool): @@ -4193,7 +4542,7 @@ static struct rank rank_one_type_parm_float (struct type *parm, struct type *arg, struct value *value) { - switch (TYPE_CODE (arg)) + switch (arg->code ()) { case TYPE_CODE_FLT: if (TYPE_LENGTH (arg) < TYPE_LENGTH (parm)) @@ -4218,7 +4567,7 @@ static struct rank rank_one_type_parm_complex (struct type *parm, struct type *arg, struct value *value) { - switch (TYPE_CODE (arg)) + switch (arg->code ()) { /* Strictly not needed for C++, but... */ case TYPE_CODE_FLT: return FLOAT_PROMOTION_BADNESS; @@ -4236,7 +4585,7 @@ { struct rank rank = {0, 0}; - switch (TYPE_CODE (arg)) + switch (arg->code ()) { case TYPE_CODE_STRUCT: /* Check for derivation */ @@ -4254,12 +4603,12 @@ static struct rank rank_one_type_parm_set (struct type *parm, struct type *arg, struct value *value) { - switch (TYPE_CODE (arg)) + switch (arg->code ()) { /* Not in C++ */ case TYPE_CODE_SET: - return rank_one_type (TYPE_FIELD_TYPE (parm, 0), - TYPE_FIELD_TYPE (arg, 0), NULL); + return rank_one_type (parm->field (0).type (), + arg->field (0).type (), NULL); default: return INCOMPATIBLE_TYPE_BADNESS; } @@ -4282,9 +4631,9 @@ struct rank rank = {0,0}; /* Resolve typedefs */ - if (TYPE_CODE (parm) == TYPE_CODE_TYPEDEF) + if (parm->code () == TYPE_CODE_TYPEDEF) parm = check_typedef (parm); - if (TYPE_CODE (arg) == TYPE_CODE_TYPEDEF) + if (arg->code () == TYPE_CODE_TYPEDEF) arg = check_typedef (arg); if (TYPE_IS_REFERENCE (parm) && value != NULL) @@ -4293,7 +4642,7 @@ { /* Rvalues should preferably bind to rvalue references or const lvalue references. */ - if (TYPE_CODE (parm) == TYPE_CODE_RVALUE_REF) + if (parm->code () == TYPE_CODE_RVALUE_REF) rank.subrank = REFERENCE_CONVERSION_RVALUE; else if (TYPE_CONST (TYPE_TARGET_TYPE (parm))) rank.subrank = REFERENCE_CONVERSION_CONST_LVALUE; @@ -4304,7 +4653,7 @@ else { /* It's illegal to pass an lvalue as an rvalue. */ - if (TYPE_CODE (parm) == TYPE_CODE_RVALUE_REF) + if (parm->code () == TYPE_CODE_RVALUE_REF) return INCOMPATIBLE_TYPE_BADNESS; } } @@ -4315,7 +4664,7 @@ struct type *t2 = arg; /* For pointers and references, compare target type. */ - if (TYPE_CODE (parm) == TYPE_CODE_PTR || TYPE_IS_REFERENCE (parm)) + if (parm->code () == TYPE_CODE_PTR || TYPE_IS_REFERENCE (parm)) { t1 = TYPE_TARGET_TYPE (parm); t2 = TYPE_TARGET_TYPE (arg); @@ -4342,14 +4691,14 @@ REFERENCE_SEE_THROUGH_BADNESS)); if (overload_debug) /* Debugging only. */ - fprintf_filtered (gdb_stderr, + fprintf_filtered (gdb_stderr, "------ Arg is %s [%d], parm is %s [%d]\n", - TYPE_NAME (arg), TYPE_CODE (arg), - TYPE_NAME (parm), TYPE_CODE (parm)); + arg->name (), arg->code (), + parm->name (), parm->code ()); /* x -> y means arg of type x being supplied for parameter of type y. */ - switch (TYPE_CODE (parm)) + switch (parm->code ()) { case TYPE_CODE_PTR: return rank_one_type_parm_ptr (parm, arg, value); @@ -4377,7 +4726,7 @@ return rank_one_type_parm_set (parm, arg, value); default: return INCOMPATIBLE_TYPE_BADNESS; - } /* switch (TYPE_CODE (arg)) */ + } /* switch (arg->code ()) */ } /* End of functions for overload resolution. */ @@ -4417,7 +4766,7 @@ { printfi_filtered (spaces, "[%d] name '%s'\n", i, args[i].name != NULL ? args[i].name : "<NULL>"); - recursive_dump_type (args[i].type, spaces + 2); + recursive_dump_type (args[i].type (), spaces + 2); } } } @@ -4477,7 +4826,7 @@ gdb_stdout); printf_filtered ("\n"); print_args (TYPE_FN_FIELD_ARGS (f, overload_idx), - TYPE_NFIELDS (TYPE_FN_FIELD_TYPE (f, overload_idx)), + TYPE_FN_FIELD_TYPE (f, overload_idx)->num_fields (), spaces + 8 + 2); printfi_filtered (spaces + 8, "fcontext "); gdb_print_host_address (TYPE_FN_FIELD_FCONTEXT (f, overload_idx), @@ -4494,6 +4843,10 @@ TYPE_FN_FIELD_PROTECTED (f, overload_idx)); printfi_filtered (spaces + 8, "is_stub %d\n", TYPE_FN_FIELD_STUB (f, overload_idx)); + printfi_filtered (spaces + 8, "defaulted %d\n", + TYPE_FN_FIELD_DEFAULTED (f, overload_idx)); + printfi_filtered (spaces + 8, "is_deleted %d\n", + TYPE_FN_FIELD_DELETED (f, overload_idx)); printfi_filtered (spaces + 8, "voffset %u\n", TYPE_FN_FIELD_VOFFSET (f, overload_idx)); } @@ -4526,30 +4879,30 @@ TYPE_N_BASECLASSES (type)); puts_filtered ("\n"); } - if (TYPE_NFIELDS (type) > 0) + if (type->num_fields () > 0) { if (TYPE_FIELD_PRIVATE_BITS (type) != NULL) { printfi_filtered (spaces, "private_field_bits (%d bits at *", - TYPE_NFIELDS (type)); + type->num_fields ()); gdb_print_host_address (TYPE_FIELD_PRIVATE_BITS (type), gdb_stdout); printf_filtered (")"); print_bit_vector (TYPE_FIELD_PRIVATE_BITS (type), - TYPE_NFIELDS (type)); + type->num_fields ()); puts_filtered ("\n"); } if (TYPE_FIELD_PROTECTED_BITS (type) != NULL) { printfi_filtered (spaces, "protected_field_bits (%d bits at *", - TYPE_NFIELDS (type)); + type->num_fields ()); gdb_print_host_address (TYPE_FIELD_PROTECTED_BITS (type), gdb_stdout); printf_filtered (")"); print_bit_vector (TYPE_FIELD_PROTECTED_BITS (type), - TYPE_NFIELDS (type)); + type->num_fields ()); puts_filtered ("\n"); } } @@ -4557,6 +4910,9 @@ { dump_fn_fieldlists (type, spaces); } + + printfi_filtered (spaces, "calling_convention %d\n", + TYPE_CPLUS_CALLING_CONVENTION (type)); } /* Print the contents of the TYPE's type_specific union, assuming that @@ -4578,6 +4934,29 @@ static struct obstack dont_print_type_obstack; +/* Print the dynamic_prop PROP. */ + +static void +dump_dynamic_prop (dynamic_prop const& prop) +{ + switch (prop.kind ()) + { + case PROP_CONST: + printf_filtered ("%s", plongest (prop.const_val ())); + break; + case PROP_UNDEFINED: + printf_filtered ("(undefined)"); + break; + case PROP_LOCEXPR: + case PROP_LOCLIST: + printf_filtered ("(dynamic)"); + break; + default: + gdb_assert_not_reached ("unhandled prop kind"); + break; + } +} + void recursive_dump_type (struct type *type, int spaces) { @@ -4586,7 +4965,7 @@ if (spaces == 0) obstack_begin (&dont_print_type_obstack, 0); - if (TYPE_NFIELDS (type) > 0 + if (type->num_fields () > 0 || (HAVE_CPLUS_STRUCT (type) && TYPE_NFN_FIELDS (type) > 0)) { struct type **first_dont_print @@ -4613,11 +4992,11 @@ gdb_print_host_address (type, gdb_stdout); printf_filtered ("\n"); printfi_filtered (spaces, "name '%s' (", - TYPE_NAME (type) ? TYPE_NAME (type) : "<NULL>"); - gdb_print_host_address (TYPE_NAME (type), gdb_stdout); + type->name () ? type->name () : "<NULL>"); + gdb_print_host_address (type->name (), gdb_stdout); printf_filtered (")\n"); - printfi_filtered (spaces, "code 0x%x ", TYPE_CODE (type)); - switch (TYPE_CODE (type)) + printfi_filtered (spaces, "code 0x%x ", type->code ()); + switch (type->code ()) { case TYPE_CODE_UNDEF: printf_filtered ("(TYPE_CODE_UNDEF)"); @@ -4785,10 +5164,6 @@ { puts_filtered (" TYPE_PROTOTYPED"); } - if (TYPE_INCOMPLETE (type)) - { - puts_filtered (" TYPE_INCOMPLETE"); - } if (TYPE_VARARGS (type)) { puts_filtered (" TYPE_VARARGS"); @@ -4813,12 +5188,12 @@ puts_filtered (" TYPE_NOTTEXT"); } puts_filtered ("\n"); - printfi_filtered (spaces, "nfields %d ", TYPE_NFIELDS (type)); - gdb_print_host_address (TYPE_FIELDS (type), gdb_stdout); + printfi_filtered (spaces, "nfields %d ", type->num_fields ()); + gdb_print_host_address (type->fields (), gdb_stdout); puts_filtered ("\n"); - for (idx = 0; idx < TYPE_NFIELDS (type); idx++) + for (idx = 0; idx < type->num_fields (); idx++) { - if (TYPE_CODE (type) == TYPE_CODE_ENUM) + if (type->code () == TYPE_CODE_ENUM) printfi_filtered (spaces + 2, "[%d] enumval %s type ", idx, plongest (TYPE_FIELD_ENUMVAL (type, idx))); @@ -4827,26 +5202,25 @@ "[%d] bitpos %s bitsize %d type ", idx, plongest (TYPE_FIELD_BITPOS (type, idx)), TYPE_FIELD_BITSIZE (type, idx)); - gdb_print_host_address (TYPE_FIELD_TYPE (type, idx), gdb_stdout); + gdb_print_host_address (type->field (idx).type (), gdb_stdout); printf_filtered (" name '%s' (", TYPE_FIELD_NAME (type, idx) != NULL ? TYPE_FIELD_NAME (type, idx) : "<NULL>"); gdb_print_host_address (TYPE_FIELD_NAME (type, idx), gdb_stdout); printf_filtered (")\n"); - if (TYPE_FIELD_TYPE (type, idx) != NULL) + if (type->field (idx).type () != NULL) { - recursive_dump_type (TYPE_FIELD_TYPE (type, idx), spaces + 4); + recursive_dump_type (type->field (idx).type (), spaces + 4); } } - if (TYPE_CODE (type) == TYPE_CODE_RANGE) + if (type->code () == TYPE_CODE_RANGE) { - printfi_filtered (spaces, "low %s%s high %s%s\n", - plongest (TYPE_LOW_BOUND (type)), - TYPE_LOW_BOUND_UNDEFINED (type) ? " (undefined)" : "", - plongest (TYPE_HIGH_BOUND (type)), - TYPE_HIGH_BOUND_UNDEFINED (type) - ? " (undefined)" : ""); + printfi_filtered (spaces, "low "); + dump_dynamic_prop (type->bounds ()->low); + printf_filtered (" high "); + dump_dynamic_prop (type->bounds ()->high); + printf_filtered ("\n"); } switch (TYPE_SPECIFIC_FIELD (type)) @@ -5001,48 +5375,50 @@ TYPE_OBJFILE_OWNED (new_type) = 0; TYPE_OWNER (new_type).gdbarch = get_type_arch (type); - if (TYPE_NAME (type)) - TYPE_NAME (new_type) = xstrdup (TYPE_NAME (type)); + if (type->name ()) + new_type->set_name (xstrdup (type->name ())); TYPE_INSTANCE_FLAGS (new_type) = TYPE_INSTANCE_FLAGS (type); TYPE_LENGTH (new_type) = TYPE_LENGTH (type); /* Copy the fields. */ - if (TYPE_NFIELDS (type)) + if (type->num_fields ()) { int i, nfields; - nfields = TYPE_NFIELDS (type); - TYPE_FIELDS (new_type) = (struct field *) - TYPE_ZALLOC (new_type, nfields * sizeof (struct field)); + nfields = type->num_fields (); + new_type->set_fields + ((struct field *) + TYPE_ZALLOC (new_type, nfields * sizeof (struct field))); + for (i = 0; i < nfields; i++) { TYPE_FIELD_ARTIFICIAL (new_type, i) = TYPE_FIELD_ARTIFICIAL (type, i); TYPE_FIELD_BITSIZE (new_type, i) = TYPE_FIELD_BITSIZE (type, i); - if (TYPE_FIELD_TYPE (type, i)) - TYPE_FIELD_TYPE (new_type, i) - = copy_type_recursive (objfile, TYPE_FIELD_TYPE (type, i), - copied_types); + if (type->field (i).type ()) + new_type->field (i).set_type + (copy_type_recursive (objfile, type->field (i).type (), + copied_types)); if (TYPE_FIELD_NAME (type, i)) TYPE_FIELD_NAME (new_type, i) = xstrdup (TYPE_FIELD_NAME (type, i)); switch (TYPE_FIELD_LOC_KIND (type, i)) { case FIELD_LOC_KIND_BITPOS: - SET_FIELD_BITPOS (TYPE_FIELD (new_type, i), + SET_FIELD_BITPOS (new_type->field (i), TYPE_FIELD_BITPOS (type, i)); break; case FIELD_LOC_KIND_ENUMVAL: - SET_FIELD_ENUMVAL (TYPE_FIELD (new_type, i), + SET_FIELD_ENUMVAL (new_type->field (i), TYPE_FIELD_ENUMVAL (type, i)); break; case FIELD_LOC_KIND_PHYSADDR: - SET_FIELD_PHYSADDR (TYPE_FIELD (new_type, i), + SET_FIELD_PHYSADDR (new_type->field (i), TYPE_FIELD_STATIC_PHYSADDR (type, i)); break; case FIELD_LOC_KIND_PHYSNAME: - SET_FIELD_PHYSNAME (TYPE_FIELD (new_type, i), + SET_FIELD_PHYSNAME (new_type->field (i), xstrdup (TYPE_FIELD_STATIC_PHYSNAME (type, i))); break; @@ -5055,17 +5431,20 @@ } /* For range types, copy the bounds information. */ - if (TYPE_CODE (type) == TYPE_CODE_RANGE) + if (type->code () == TYPE_CODE_RANGE) { - TYPE_RANGE_DATA (new_type) = (struct range_bounds *) - TYPE_ALLOC (new_type, sizeof (struct range_bounds)); - *TYPE_RANGE_DATA (new_type) = *TYPE_RANGE_DATA (type); + range_bounds *bounds + = ((struct range_bounds *) TYPE_ALLOC + (new_type, sizeof (struct range_bounds))); + + *bounds = *type->bounds (); + new_type->set_bounds (bounds); } - if (TYPE_DYN_PROP_LIST (type) != NULL) - TYPE_DYN_PROP_LIST (new_type) + if (type->main_type->dyn_prop_list != NULL) + new_type->main_type->dyn_prop_list = copy_dynamic_prop_list (&objfile->objfile_obstack, - TYPE_DYN_PROP_LIST (type)); + type->main_type->dyn_prop_list); /* Copy pointers to other types. */ @@ -5130,10 +5509,10 @@ TYPE_LENGTH (new_type) = TYPE_LENGTH (type); memcpy (TYPE_MAIN_TYPE (new_type), TYPE_MAIN_TYPE (type), sizeof (struct main_type)); - if (TYPE_DYN_PROP_LIST (type) != NULL) - TYPE_DYN_PROP_LIST (new_type) + if (type->main_type->dyn_prop_list != NULL) + new_type->main_type->dyn_prop_list = copy_dynamic_prop_list (&TYPE_OBJFILE (type) -> objfile_obstack, - TYPE_DYN_PROP_LIST (type)); + type->main_type->dyn_prop_list); return new_type; } @@ -5155,7 +5534,7 @@ TYPE_LENGTH (type) = bit / TARGET_CHAR_BIT; if (name) - TYPE_NAME (type) = gdbarch_obstack_strdup (gdbarch, name); + type->set_name (gdbarch_obstack_strdup (gdbarch, name)); return type; } @@ -5243,21 +5622,6 @@ return t; } -/* Allocate a TYPE_CODE_COMPLEX type structure associated with GDBARCH. - NAME is the type name. TARGET_TYPE is the component float type. */ - -struct type * -arch_complex_type (struct gdbarch *gdbarch, - const char *name, struct type *target_type) -{ - struct type *t; - - t = arch_type (gdbarch, TYPE_CODE_COMPLEX, - 2 * TYPE_LENGTH (target_type) * TARGET_CHAR_BIT, name); - TYPE_TARGET_TYPE (t) = target_type; - return t; -} - /* Allocate a TYPE_CODE_PTR type structure associated with GDBARCH. BIT is the pointer type size in bits. NAME is the type name. TARGET_TYPE is the pointer target type. Always sets the pointer type's @@ -5285,10 +5649,10 @@ type = arch_type (gdbarch, TYPE_CODE_FLAGS, bit, name); TYPE_UNSIGNED (type) = 1; - TYPE_NFIELDS (type) = 0; + type->set_num_fields (0); /* Pre-allocate enough space assuming every field is one bit. */ - TYPE_FIELDS (type) - = (struct field *) TYPE_ZALLOC (type, bit * sizeof (struct field)); + type->set_fields + ((struct field *) TYPE_ZALLOC (type, bit * sizeof (struct field))); return type; } @@ -5302,19 +5666,19 @@ struct type *field_type, const char *name) { int type_bitsize = TYPE_LENGTH (type) * TARGET_CHAR_BIT; - int field_nr = TYPE_NFIELDS (type); + int field_nr = type->num_fields (); - gdb_assert (TYPE_CODE (type) == TYPE_CODE_FLAGS); - gdb_assert (TYPE_NFIELDS (type) + 1 <= type_bitsize); + gdb_assert (type->code () == TYPE_CODE_FLAGS); + gdb_assert (type->num_fields () + 1 <= type_bitsize); gdb_assert (start_bitpos >= 0 && start_bitpos < type_bitsize); gdb_assert (nr_bits >= 1 && nr_bits <= type_bitsize); gdb_assert (name != NULL); TYPE_FIELD_NAME (type, field_nr) = xstrdup (name); - TYPE_FIELD_TYPE (type, field_nr) = field_type; - SET_FIELD_BITPOS (TYPE_FIELD (type, field_nr), start_bitpos); + type->field (field_nr).set_type (field_type); + SET_FIELD_BITPOS (type->field (field_nr), start_bitpos); TYPE_FIELD_BITSIZE (type, field_nr) = nr_bits; - ++TYPE_NFIELDS (type); + type->set_num_fields (type->num_fields () + 1); } /* Special version of append_flags_type_field to add a flag field. @@ -5342,7 +5706,7 @@ gdb_assert (code == TYPE_CODE_STRUCT || code == TYPE_CODE_UNION); t = arch_type (gdbarch, code, 0, NULL); - TYPE_NAME (t) = name; + t->set_name (name); INIT_CPLUS_SPECIFIC (t); return t; } @@ -5357,12 +5721,12 @@ { struct field *f; - TYPE_NFIELDS (t) = TYPE_NFIELDS (t) + 1; - TYPE_FIELDS (t) = XRESIZEVEC (struct field, TYPE_FIELDS (t), - TYPE_NFIELDS (t)); - f = &(TYPE_FIELDS (t)[TYPE_NFIELDS (t) - 1]); + t->set_num_fields (t->num_fields () + 1); + t->set_fields (XRESIZEVEC (struct field, t->fields (), + t->num_fields ())); + f = &t->field (t->num_fields () - 1); memset (f, 0, sizeof f[0]); - FIELD_TYPE (f[0]) = field; + f[0].set_type (field); FIELD_NAME (f[0]) = name; return f; } @@ -5376,19 +5740,19 @@ { struct field *f = append_composite_type_field_raw (t, name, field); - if (TYPE_CODE (t) == TYPE_CODE_UNION) + if (t->code () == TYPE_CODE_UNION) { if (TYPE_LENGTH (t) < TYPE_LENGTH (field)) TYPE_LENGTH (t) = TYPE_LENGTH (field); } - else if (TYPE_CODE (t) == TYPE_CODE_STRUCT) + else if (t->code () == TYPE_CODE_STRUCT) { TYPE_LENGTH (t) = TYPE_LENGTH (t) + TYPE_LENGTH (field); - if (TYPE_NFIELDS (t) > 1) + if (t->num_fields () > 1) { SET_FIELD_BITPOS (f[0], (FIELD_BITPOS (f[-1]) - + (TYPE_LENGTH (FIELD_TYPE (f[-1])) + + (TYPE_LENGTH (f[-1].type ()) * TARGET_CHAR_BIT))); if (alignment) @@ -5474,6 +5838,9 @@ builtin_type->builtin_float = arch_float_type (gdbarch, gdbarch_float_bit (gdbarch), "float", gdbarch_float_format (gdbarch)); + builtin_type->builtin_bfloat16 + = arch_float_type (gdbarch, gdbarch_bfloat16_bit (gdbarch), + "bfloat16", gdbarch_bfloat16_format (gdbarch)); builtin_type->builtin_double = arch_float_type (gdbarch, gdbarch_double_bit (gdbarch), "double", gdbarch_double_format (gdbarch)); @@ -5481,11 +5848,9 @@ = arch_float_type (gdbarch, gdbarch_long_double_bit (gdbarch), "long double", gdbarch_long_double_format (gdbarch)); builtin_type->builtin_complex - = arch_complex_type (gdbarch, "complex", - builtin_type->builtin_float); + = init_complex_type ("complex", builtin_type->builtin_float); builtin_type->builtin_double_complex - = arch_complex_type (gdbarch, "double complex", - builtin_type->builtin_double); + = init_complex_type ("double complex", builtin_type->builtin_double); builtin_type->builtin_string = arch_type (gdbarch, TYPE_CODE_STRING, TARGET_CHAR_BIT, "string"); builtin_type->builtin_bool @@ -5587,7 +5952,7 @@ 1, struct objfile_type); /* Use the objfile architecture to determine basic type properties. */ - gdbarch = get_objfile_arch (objfile); + gdbarch = objfile->arch (); /* Basic types. */ objfile_type->builtin_void @@ -5687,8 +6052,9 @@ return objfile_type; } +void _initialize_gdbtypes (); void -_initialize_gdbtypes (void) +_initialize_gdbtypes () { gdbtypes_data = gdbarch_data_register_post_init (gdbtypes_post_init); diff -Nru gdb-9.1/gdb/gdbtypes.h gdb-10.2/gdb/gdbtypes.h --- gdb-9.1/gdb/gdbtypes.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gdbtypes.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,7 +1,7 @@ /* Internal type definitions for GDB. - Copyright (C) 1992-2020 Free Software Foundation, Inc. + Copyright (C) 1992-2021 Free Software Foundation, Inc. Contributed by Cygnus Support, using pieces from other GDB modules. @@ -46,16 +46,21 @@ #include "hashtab.h" #include "gdbsupport/array-view.h" +#include "gdbsupport/gdb_optional.h" #include "gdbsupport/offset-type.h" #include "gdbsupport/enum-flags.h" #include "gdbsupport/underlying.h" #include "gdbsupport/print-utils.h" +#include "dwarf2.h" +#include "gdb_obstack.h" /* Forward declarations for prototypes. */ struct field; struct block; struct value_print_options; struct language_defn; +struct dwarf2_per_cu_data; +struct dwarf2_per_objfile; /* These declarations are DWARF-specific as some of the gdbtypes.h data types are already DWARF-specific. */ @@ -119,9 +124,7 @@ TYPE_CODE_FUNC, /**< Function type */ TYPE_CODE_INT, /**< Integer type */ - /* * Floating type. This is *NOT* a complex type. Beware, there - are parts of GDB which bogusly assume that TYPE_CODE_FLT can - mean complex. */ + /* * Floating type. This is *NOT* a complex type. */ TYPE_CODE_FLT, /* * Void type. The length field specifies the length (probably @@ -246,16 +249,6 @@ #define TYPE_PROTOTYPED(t) (TYPE_MAIN_TYPE (t)->flag_prototyped) -/* * This flag is used to indicate that processing for this type - is incomplete. - - (Mostly intended for HP platforms, where class methods, for - instance, can be encountered before their classes in the debug - info; the incomplete type has to be marked so that the class and - the method can be assigned correct types.) */ - -#define TYPE_INCOMPLETE(t) (TYPE_MAIN_TYPE (t)->flag_incomplete) - /* * FIXME drow/2002-06-03: Only used for methods, but applies as well to functions. */ @@ -319,14 +312,6 @@ #define TYPE_FLAG_ENUM(t) (TYPE_MAIN_TYPE (t)->flag_flag_enum) -/* * True if this type is a discriminated union type. Only valid for - TYPE_CODE_UNION. A discriminated union stores a reference to the - discriminant field along with the discriminator values in a dynamic - property. */ - -#define TYPE_FLAG_DISCRIMINATED_UNION(t) \ - (TYPE_MAIN_TYPE (t)->flag_discriminated_union) - /* * Constant type. If this is set, the corresponding type has a const modifier. */ @@ -353,11 +338,19 @@ /* * True if this type represents either an lvalue or lvalue reference type. */ #define TYPE_IS_REFERENCE(t) \ - (TYPE_CODE (t) == TYPE_CODE_REF || TYPE_CODE (t) == TYPE_CODE_RVALUE_REF) + ((t)->code () == TYPE_CODE_REF || (t)->code () == TYPE_CODE_RVALUE_REF) /* * True if this type is allocatable. */ #define TYPE_IS_ALLOCATABLE(t) \ - (get_dyn_prop (DYN_PROP_ALLOCATED, t) != NULL) + ((t)->dyn_prop (DYN_PROP_ALLOCATED) != NULL) + +/* * True if this type has variant parts. */ +#define TYPE_HAS_VARIANT_PARTS(t) \ + ((t)->dyn_prop (DYN_PROP_VARIANT_PARTS) != nullptr) + +/* * True if this type has a dynamic length. */ +#define TYPE_HAS_DYNAMIC_LENGTH(t) \ + ((t)->dyn_prop (DYN_PROP_BYTE_SIZE) != nullptr) /* * Instruction-space delimited type. This is for Harvard architectures which have separate instruction and data address spaces (and perhaps @@ -400,46 +393,93 @@ #define TYPE_ADDRESS_CLASS_ALL(t) (TYPE_INSTANCE_FLAGS(t) \ & TYPE_INSTANCE_FLAG_ADDRESS_CLASS_ALL) -/* * Information needed for a discriminated union. A discriminated - union is handled somewhat differently from an ordinary union. +/* * Information about a single discriminant. */ - One field is designated as the discriminant. Only one other field - is active at a time; which one depends on the value of the - discriminant and the data in this structure. - - Additionally, it is possible to have a univariant discriminated - union. In this case, the union has just a single field, which is - assumed to be the only active variant -- in this case no - discriminant is provided. */ - -struct discriminant_info +struct discriminant_range { - /* * The index of the discriminant field. If -1, then this union - must have just a single field. */ - - int discriminant_index; + /* * The range of values for the variant. This is an inclusive + range. */ + ULONGEST low, high; + + /* * Return true if VALUE is contained in this range. IS_UNSIGNED + is true if this should be an unsigned comparison; false for + signed. */ + bool contains (ULONGEST value, bool is_unsigned) const + { + if (is_unsigned) + return value >= low && value <= high; + LONGEST valuel = (LONGEST) value; + return valuel >= (LONGEST) low && valuel <= (LONGEST) high; + } +}; + +struct variant_part; + +/* * A single variant. A variant has a list of discriminant values. + When the discriminator matches one of these, the variant is + enabled. Each variant controls zero or more fields; and may also + control other variant parts as well. This struct corresponds to + DW_TAG_variant in DWARF. */ + +struct variant : allocate_on_obstack +{ + /* * The discriminant ranges for this variant. */ + gdb::array_view<discriminant_range> discriminants; + + /* * The fields controlled by this variant. This is inclusive on + the low end and exclusive on the high end. A variant may not + control any fields, in which case the two values will be equal. + These are indexes into the type's array of fields. */ + int first_field; + int last_field; + + /* * Variant parts controlled by this variant. */ + gdb::array_view<variant_part> parts; + + /* * Return true if this is the default variant. The default + variant can be recognized because it has no associated + discriminants. */ + bool is_default () const + { + return discriminants.empty (); + } - /* * The index of the default branch of the union. If -1, then - there is no default branch. */ + /* * Return true if this variant matches VALUE. IS_UNSIGNED is true + if this should be an unsigned comparison; false for signed. */ + bool matches (ULONGEST value, bool is_unsigned) const; +}; - int default_index; +/* * A variant part. Each variant part has an optional discriminant + and holds an array of variants. This struct corresponds to + DW_TAG_variant_part in DWARF. */ - /* * The discriminant values corresponding to each branch. This has - a number of entries equal to the number of fields in this union. - If discriminant_index is not -1, then that entry in this array is - not used. If default_index is not -1, then that entry in this - array is not used. */ +struct variant_part : allocate_on_obstack +{ + /* * The index of the discriminant field in the outer type. This is + an index into the type's array of fields. If this is -1, there + is no discriminant, and only the default variant can be + considered to be selected. */ + int discriminant_index; - ULONGEST discriminants[1]; + /* * True if this discriminant is unsigned; false if signed. This + comes from the type of the discriminant. */ + bool is_unsigned; + + /* * The variants that are controlled by this variant part. Note + that these will always be sorted by field number. */ + gdb::array_view<variant> variants; }; + enum dynamic_prop_kind { PROP_UNDEFINED, /* Not defined. */ PROP_CONST, /* Constant. */ PROP_ADDR_OFFSET, /* Address offset. */ PROP_LOCEXPR, /* Location expression. */ - PROP_LOCLIST /* Location list. */ + PROP_LOCLIST, /* Location list. */ + PROP_VARIANT_PARTS, /* Variant parts. */ + PROP_TYPE, /* Type. */ }; union dynamic_prop_data @@ -451,17 +491,108 @@ /* Storage for dynamic property. */ void *baton; + + /* Storage of variant parts for a type. A type with variant parts + has all its fields "linearized" -- stored in a single field + array, just as if they had all been declared that way. The + variant parts are attached via a dynamic property, and then are + used to control which fields end up in the final type during + dynamic type resolution. */ + + const gdb::array_view<variant_part> *variant_parts; + + /* Once a variant type is resolved, we may want to be able to go + from the resolved type to the original type. In this case we + rewrite the property's kind and set this field. */ + + struct type *original_type; }; /* * Used to store a dynamic property. */ struct dynamic_prop { + dynamic_prop_kind kind () const + { + return m_kind; + } + + void set_undefined () + { + m_kind = PROP_UNDEFINED; + } + + LONGEST const_val () const + { + gdb_assert (m_kind == PROP_CONST); + + return m_data.const_val; + } + + void set_const_val (LONGEST const_val) + { + m_kind = PROP_CONST; + m_data.const_val = const_val; + } + + void *baton () const + { + gdb_assert (m_kind == PROP_LOCEXPR + || m_kind == PROP_LOCLIST + || m_kind == PROP_ADDR_OFFSET); + + return m_data.baton; + } + + void set_locexpr (void *baton) + { + m_kind = PROP_LOCEXPR; + m_data.baton = baton; + } + + void set_loclist (void *baton) + { + m_kind = PROP_LOCLIST; + m_data.baton = baton; + } + + void set_addr_offset (void *baton) + { + m_kind = PROP_ADDR_OFFSET; + m_data.baton = baton; + } + + const gdb::array_view<variant_part> *variant_parts () const + { + gdb_assert (m_kind == PROP_VARIANT_PARTS); + + return m_data.variant_parts; + } + + void set_variant_parts (gdb::array_view<variant_part> *variant_parts) + { + m_kind = PROP_VARIANT_PARTS; + m_data.variant_parts = variant_parts; + } + + struct type *original_type () const + { + gdb_assert (m_kind == PROP_TYPE); + + return m_data.original_type; + } + + void set_original_type (struct type *original_type) + { + m_kind = PROP_TYPE; + m_data.original_type = original_type; + } + /* Determine which field of the union dynamic_prop.data is used. */ - enum dynamic_prop_kind kind; + enum dynamic_prop_kind m_kind; /* Storage for dynamic or static value. */ - union dynamic_prop_data data; + union dynamic_prop_data m_data; }; /* Compare two dynamic_prop objects for equality. dynamic_prop @@ -485,15 +616,18 @@ indicates that the object of the type can be allocated/deallocated. */ DYN_PROP_ALLOCATED, - /* A property representing DW_AT_allocated. The presence of this attribute + /* A property representing DW_AT_associated. The presence of this attribute indicated that the object of the type can be associated. */ DYN_PROP_ASSOCIATED, /* A property providing an array's byte stride. */ DYN_PROP_BYTE_STRIDE, - /* A property holding information about a discriminated union. */ - DYN_PROP_DISCRIMINATED, + /* A property holding variant parts. */ + DYN_PROP_VARIANT_PARTS, + + /* A property holding the size of the type. */ + DYN_PROP_BYTE_SIZE, }; /* * List for dynamic type attributes. */ @@ -578,6 +712,16 @@ struct field { + struct type *type () const + { + return this->m_type; + } + + void set_type (struct type *type) + { + this->m_type = type; + } + union field_location loc; /* * For a function or member type, this is 1 if the argument is @@ -603,7 +747,7 @@ - In a function or member type, type of this argument. - In an array type, the domain-type of the array. */ - struct type *type; + struct type *m_type; /* * Name of field, value or argument. NULL for range bounds, array domains, and member function @@ -614,6 +758,14 @@ struct range_bounds { + ULONGEST bit_stride () const + { + if (this->flag_is_byte_stride) + return this->stride.const_val () * 8; + else + return this->stride.const_val (); + } + /* * Low bound of range. */ struct dynamic_prop low; @@ -708,9 +860,7 @@ unsigned int flag_nosign : 1; unsigned int flag_stub : 1; unsigned int flag_target_stub : 1; - unsigned int flag_static : 1; unsigned int flag_prototyped : 1; - unsigned int flag_incomplete : 1; unsigned int flag_varargs : 1; unsigned int flag_vector : 1; unsigned int flag_stub_supported : 1; @@ -729,13 +879,6 @@ unsigned int flag_flag_enum : 1; - /* * True if this type is a discriminated union type. Only valid - for TYPE_CODE_UNION. A discriminated union stores a reference to - the discriminant field along with the discriminator values in a - dynamic property. */ - - unsigned int flag_discriminated_union : 1; - /* * A discriminant telling us which field of the type_specific union is being used for this type, if any. */ @@ -804,6 +947,10 @@ struct range_bounds *bounds; + /* If this is a scalar type, then this is its corresponding + complex type. */ + struct type *complex_type; + } flds_bnds; /* * Slot to point to additional language-specific fields of this @@ -824,6 +971,117 @@ struct type { + /* Get the type code of this type. + + Note that the code can be TYPE_CODE_TYPEDEF, so if you want the real + type, you need to do `check_typedef (type)->code ()`. */ + type_code code () const + { + return this->main_type->code; + } + + /* Set the type code of this type. */ + void set_code (type_code code) + { + this->main_type->code = code; + } + + /* Get the name of this type. */ + const char *name () const + { + return this->main_type->name; + } + + /* Set the name of this type. */ + void set_name (const char *name) + { + this->main_type->name = name; + } + + /* Get the number of fields of this type. */ + int num_fields () const + { + return this->main_type->nfields; + } + + /* Set the number of fields of this type. */ + void set_num_fields (int num_fields) + { + this->main_type->nfields = num_fields; + } + + /* Get the fields array of this type. */ + struct field *fields () const + { + return this->main_type->flds_bnds.fields; + } + + /* Get the field at index IDX. */ + struct field &field (int idx) const + { + return this->fields ()[idx]; + } + + /* Set the fields array of this type. */ + void set_fields (struct field *fields) + { + this->main_type->flds_bnds.fields = fields; + } + + type *index_type () const + { + return this->field (0).type (); + } + + void set_index_type (type *index_type) + { + this->field (0).set_type (index_type); + } + + /* Get the bounds bounds of this type. The type must be a range type. */ + range_bounds *bounds () const + { + switch (this->code ()) + { + case TYPE_CODE_RANGE: + return this->main_type->flds_bnds.bounds; + + case TYPE_CODE_ARRAY: + case TYPE_CODE_STRING: + return this->index_type ()->bounds (); + + default: + gdb_assert_not_reached + ("type::bounds called on type with invalid code"); + } + } + + /* Set the bounds of this type. The type must be a range type. */ + void set_bounds (range_bounds *bounds) + { + gdb_assert (this->code () == TYPE_CODE_RANGE); + + this->main_type->flds_bnds.bounds = bounds; + } + + ULONGEST bit_stride () const + { + return this->bounds ()->bit_stride (); + } + + /* * Return the dynamic property of the requested KIND from this type's + list of dynamic properties. */ + dynamic_prop *dyn_prop (dynamic_prop_node_kind kind) const; + + /* * Given a dynamic property PROP of a given KIND, add this dynamic + property to this type. + + This function assumes that this type is objfile-owned. */ + void add_dyn_prop (dynamic_prop_node_kind kind, dynamic_prop prop); + + /* * Remove dynamic property of kind KIND from this type, if it exists. */ + void remove_dyn_prop (dynamic_prop_node_kind kind); + /* * Type that is a pointer to this type. NULL if no such pointer-to type is known yet. The debugger may add the address of such a type @@ -891,8 +1149,6 @@ struct main_type *main_type; }; -#define NULL_TYPE ((struct type *) 0) - struct fn_fieldlist { @@ -957,9 +1213,18 @@ unsigned int is_constructor : 1; + /* * True if this function is deleted, false otherwise. */ + + unsigned int is_deleted : 1; + + /* * DW_AT_defaulted attribute for this function. The value is one + of the DW_DEFAULTED constants. */ + + ENUM_BITFIELD (dwarf_defaulted_attribute) defaulted : 2; + /* * Unused. */ - unsigned int dummy:9; + unsigned int dummy:6; /* * Index into that baseclass's virtual function table, minus 2; else if static: VOFFSET_STATIC; else: 0. */ @@ -1033,6 +1298,12 @@ int is_dynamic : 2; + /* * The calling convention for this type, fetched from the + DW_AT_calling_convention attribute. The value is one of the + DW_CC constants. */ + + ENUM_BITFIELD (dwarf_calling_convention) calling_convention : 8; + /* * The base class which defined the virtual function table pointer. */ struct type *vptr_basetype; @@ -1141,9 +1412,9 @@ /* * The calling convention for targets supporting multiple ABIs. Right now this is only fetched from the Dwarf-2 DW_AT_calling_convention attribute. The value is one of the - DW_CC enum dwarf_calling_convention constants. */ + DW_CC constants. */ - unsigned calling_convention : 8; + ENUM_BITFIELD (dwarf_calling_convention) calling_convention : 8; /* * Whether this function normally returns to its caller. It is set from the DW_AT_noreturn attribute if set on the @@ -1255,7 +1526,11 @@ /* * CU of the function where the call is located. It gets used for DWARF blocks execution in the parameter array below. */ - struct dwarf2_per_cu_data *per_cu; + dwarf2_per_cu_data *per_cu; + + /* objfile of the function where the call is located. */ + + dwarf2_per_objfile *per_objfile; /* * Describe DW_TAG_call_site's DW_TAG_formal_parameter. */ @@ -1311,7 +1586,6 @@ #define TYPE_INSTANCE_FLAGS(thistype) (thistype)->instance_flags #define TYPE_MAIN_TYPE(thistype) (thistype)->main_type -#define TYPE_NAME(thistype) TYPE_MAIN_TYPE(thistype)->name #define TYPE_TARGET_TYPE(thistype) TYPE_MAIN_TYPE(thistype)->target_type #define TYPE_POINTER_TYPE(thistype) (thistype)->pointer_type #define TYPE_REFERENCE_TYPE(thistype) (thistype)->reference_type @@ -1342,73 +1616,23 @@ space in struct type. */ extern bool set_type_align (struct type *, ULONGEST); -/* * Note that TYPE_CODE can be TYPE_CODE_TYPEDEF, so if you want the real - type, you need to do TYPE_CODE (check_type (this_type)). */ -#define TYPE_CODE(thistype) TYPE_MAIN_TYPE(thistype)->code -#define TYPE_NFIELDS(thistype) TYPE_MAIN_TYPE(thistype)->nfields -#define TYPE_FIELDS(thistype) TYPE_MAIN_TYPE(thistype)->flds_bnds.fields - -#define TYPE_INDEX_TYPE(type) TYPE_FIELD_TYPE (type, 0) -#define TYPE_RANGE_DATA(thistype) TYPE_MAIN_TYPE(thistype)->flds_bnds.bounds -#define TYPE_LOW_BOUND(range_type) \ - TYPE_RANGE_DATA(range_type)->low.data.const_val -#define TYPE_HIGH_BOUND(range_type) \ - TYPE_RANGE_DATA(range_type)->high.data.const_val -#define TYPE_LOW_BOUND_UNDEFINED(range_type) \ - (TYPE_RANGE_DATA(range_type)->low.kind == PROP_UNDEFINED) -#define TYPE_HIGH_BOUND_UNDEFINED(range_type) \ - (TYPE_RANGE_DATA(range_type)->high.kind == PROP_UNDEFINED) -#define TYPE_HIGH_BOUND_KIND(range_type) \ - TYPE_RANGE_DATA(range_type)->high.kind -#define TYPE_LOW_BOUND_KIND(range_type) \ - TYPE_RANGE_DATA(range_type)->low.kind -#define TYPE_BIT_STRIDE(range_type) \ - (TYPE_RANGE_DATA(range_type)->stride.data.const_val \ - * (TYPE_RANGE_DATA(range_type)->flag_is_byte_stride ? 8 : 1)) - /* Property accessors for the type data location. */ #define TYPE_DATA_LOCATION(thistype) \ - get_dyn_prop (DYN_PROP_DATA_LOCATION, thistype) + ((thistype)->dyn_prop (DYN_PROP_DATA_LOCATION)) #define TYPE_DATA_LOCATION_BATON(thistype) \ TYPE_DATA_LOCATION (thistype)->data.baton #define TYPE_DATA_LOCATION_ADDR(thistype) \ - TYPE_DATA_LOCATION (thistype)->data.const_val + (TYPE_DATA_LOCATION (thistype)->const_val ()) #define TYPE_DATA_LOCATION_KIND(thistype) \ - TYPE_DATA_LOCATION (thistype)->kind + (TYPE_DATA_LOCATION (thistype)->kind ()) +#define TYPE_DYNAMIC_LENGTH(thistype) \ + ((thistype)->dyn_prop (DYN_PROP_BYTE_SIZE)) /* Property accessors for the type allocated/associated. */ #define TYPE_ALLOCATED_PROP(thistype) \ - get_dyn_prop (DYN_PROP_ALLOCATED, thistype) + ((thistype)->dyn_prop (DYN_PROP_ALLOCATED)) #define TYPE_ASSOCIATED_PROP(thistype) \ - get_dyn_prop (DYN_PROP_ASSOCIATED, thistype) - -/* Attribute accessors for dynamic properties. */ -#define TYPE_DYN_PROP_LIST(thistype) \ - TYPE_MAIN_TYPE(thistype)->dyn_prop_list -#define TYPE_DYN_PROP_BATON(dynprop) \ - dynprop->data.baton -#define TYPE_DYN_PROP_ADDR(dynprop) \ - dynprop->data.const_val -#define TYPE_DYN_PROP_KIND(dynprop) \ - dynprop->kind - - -/* Accessors for struct range_bounds data attached to an array type's - index type. */ - -#define TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED(arraytype) \ - TYPE_HIGH_BOUND_UNDEFINED(TYPE_INDEX_TYPE(arraytype)) -#define TYPE_ARRAY_LOWER_BOUND_IS_UNDEFINED(arraytype) \ - TYPE_LOW_BOUND_UNDEFINED(TYPE_INDEX_TYPE(arraytype)) - -#define TYPE_ARRAY_UPPER_BOUND_VALUE(arraytype) \ - (TYPE_HIGH_BOUND(TYPE_INDEX_TYPE((arraytype)))) - -#define TYPE_ARRAY_LOWER_BOUND_VALUE(arraytype) \ - (TYPE_LOW_BOUND(TYPE_INDEX_TYPE((arraytype)))) - -#define TYPE_ARRAY_BIT_STRIDE(arraytype) \ - (TYPE_BIT_STRIDE(TYPE_INDEX_TYPE((arraytype)))) + ((thistype)->dyn_prop (DYN_PROP_ASSOCIATED)) /* C++ */ @@ -1437,13 +1661,15 @@ ? (struct cplus_struct_type*)&cplus_struct_default \ : TYPE_RAW_CPLUS_SPECIFIC(thistype)) #define TYPE_RAW_CPLUS_SPECIFIC(thistype) TYPE_MAIN_TYPE(thistype)->type_specific.cplus_stuff +#define TYPE_CPLUS_CALLING_CONVENTION(thistype) \ + TYPE_MAIN_TYPE(thistype)->type_specific.cplus_stuff->calling_convention #define TYPE_FLOATFORMAT(thistype) TYPE_MAIN_TYPE(thistype)->type_specific.floatformat #define TYPE_GNAT_SPECIFIC(thistype) TYPE_MAIN_TYPE(thistype)->type_specific.gnat_stuff #define TYPE_DESCRIPTIVE_TYPE(thistype) TYPE_GNAT_SPECIFIC(thistype)->descriptive_type #define TYPE_CALLING_CONVENTION(thistype) TYPE_MAIN_TYPE(thistype)->type_specific.func_stuff->calling_convention #define TYPE_NO_RETURN(thistype) TYPE_MAIN_TYPE(thistype)->type_specific.func_stuff->is_noreturn #define TYPE_TAIL_CALL_LIST(thistype) TYPE_MAIN_TYPE(thistype)->type_specific.func_stuff->tail_call_list -#define TYPE_BASECLASS(thistype,index) TYPE_FIELD_TYPE(thistype, index) +#define TYPE_BASECLASS(thistype,index) ((thistype)->field (index).type ()) #define TYPE_N_BASECLASSES(thistype) TYPE_CPLUS_SPECIFIC(thistype)->n_baseclasses #define TYPE_BASECLASS_NAME(thistype,index) TYPE_FIELD_NAME(thistype, index) #define TYPE_BASECLASS_BITPOS(thistype,index) TYPE_FIELD_BITPOS(thistype,index) @@ -1455,7 +1681,6 @@ (TYPE_CPLUS_SPECIFIC(thistype)->virtual_field_bits == NULL ? 0 \ : B_TST(TYPE_CPLUS_SPECIFIC(thistype)->virtual_field_bits, (index))) -#define FIELD_TYPE(thisfld) ((thisfld).type) #define FIELD_NAME(thisfld) ((thisfld).name) #define FIELD_LOC_KIND(thisfld) ((thisfld).loc_kind) #define FIELD_BITPOS_LVAL(thisfld) ((thisfld).loc.bitpos) @@ -1483,18 +1708,16 @@ #define FIELD_ARTIFICIAL(thisfld) ((thisfld).artificial) #define FIELD_BITSIZE(thisfld) ((thisfld).bitsize) -#define TYPE_FIELD(thistype, n) TYPE_MAIN_TYPE(thistype)->flds_bnds.fields[n] -#define TYPE_FIELD_TYPE(thistype, n) FIELD_TYPE(TYPE_FIELD(thistype, n)) -#define TYPE_FIELD_NAME(thistype, n) FIELD_NAME(TYPE_FIELD(thistype, n)) -#define TYPE_FIELD_LOC_KIND(thistype, n) FIELD_LOC_KIND (TYPE_FIELD (thistype, n)) -#define TYPE_FIELD_BITPOS(thistype, n) FIELD_BITPOS (TYPE_FIELD (thistype, n)) -#define TYPE_FIELD_ENUMVAL(thistype, n) FIELD_ENUMVAL (TYPE_FIELD (thistype, n)) -#define TYPE_FIELD_STATIC_PHYSNAME(thistype, n) FIELD_STATIC_PHYSNAME (TYPE_FIELD (thistype, n)) -#define TYPE_FIELD_STATIC_PHYSADDR(thistype, n) FIELD_STATIC_PHYSADDR (TYPE_FIELD (thistype, n)) -#define TYPE_FIELD_DWARF_BLOCK(thistype, n) FIELD_DWARF_BLOCK (TYPE_FIELD (thistype, n)) -#define TYPE_FIELD_ARTIFICIAL(thistype, n) FIELD_ARTIFICIAL(TYPE_FIELD(thistype,n)) -#define TYPE_FIELD_BITSIZE(thistype, n) FIELD_BITSIZE(TYPE_FIELD(thistype,n)) -#define TYPE_FIELD_PACKED(thistype, n) (FIELD_BITSIZE(TYPE_FIELD(thistype,n))!=0) +#define TYPE_FIELD_NAME(thistype, n) FIELD_NAME((thistype)->field (n)) +#define TYPE_FIELD_LOC_KIND(thistype, n) FIELD_LOC_KIND ((thistype)->field (n)) +#define TYPE_FIELD_BITPOS(thistype, n) FIELD_BITPOS ((thistype)->field (n)) +#define TYPE_FIELD_ENUMVAL(thistype, n) FIELD_ENUMVAL ((thistype)->field (n)) +#define TYPE_FIELD_STATIC_PHYSNAME(thistype, n) FIELD_STATIC_PHYSNAME ((thistype)->field (n)) +#define TYPE_FIELD_STATIC_PHYSADDR(thistype, n) FIELD_STATIC_PHYSADDR ((thistype)->field (n)) +#define TYPE_FIELD_DWARF_BLOCK(thistype, n) FIELD_DWARF_BLOCK ((thistype)->field (n)) +#define TYPE_FIELD_ARTIFICIAL(thistype, n) FIELD_ARTIFICIAL((thistype)->field (n)) +#define TYPE_FIELD_BITSIZE(thistype, n) FIELD_BITSIZE((thistype)->field (n)) +#define TYPE_FIELD_PACKED(thistype, n) (FIELD_BITSIZE((thistype)->field (n))!=0) #define TYPE_FIELD_PRIVATE_BITS(thistype) \ TYPE_CPLUS_SPECIFIC(thistype)->private_field_bits @@ -1541,7 +1764,7 @@ #define TYPE_FN_FIELD(thisfn, n) (thisfn)[n] #define TYPE_FN_FIELD_PHYSNAME(thisfn, n) (thisfn)[n].physname #define TYPE_FN_FIELD_TYPE(thisfn, n) (thisfn)[n].type -#define TYPE_FN_FIELD_ARGS(thisfn, n) TYPE_FIELDS ((thisfn)[n].type) +#define TYPE_FN_FIELD_ARGS(thisfn, n) (((thisfn)[n].type)->fields ()) #define TYPE_FN_FIELD_CONST(thisfn, n) ((thisfn)[n].is_const) #define TYPE_FN_FIELD_VOLATILE(thisfn, n) ((thisfn)[n].is_volatile) #define TYPE_FN_FIELD_PRIVATE(thisfn, n) ((thisfn)[n].is_private) @@ -1553,6 +1776,8 @@ #define TYPE_FN_FIELD_VOFFSET(thisfn, n) ((thisfn)[n].voffset-2) #define TYPE_FN_FIELD_VIRTUAL_P(thisfn, n) ((thisfn)[n].voffset > 1) #define TYPE_FN_FIELD_STATIC_P(thisfn, n) ((thisfn)[n].voffset == VOFFSET_STATIC) +#define TYPE_FN_FIELD_DEFAULTED(thisfn, n) ((thisfn)[n].defaulted) +#define TYPE_FN_FIELD_DELETED(thisfn, n) ((thisfn)[n].is_deleted) /* Accessors for typedefs defined by a class. */ #define TYPE_TYPEDEF_FIELD_ARRAY(thistype) \ @@ -1586,9 +1811,9 @@ TYPE_NESTED_TYPES_FIELD (thistype, n).is_private #define TYPE_IS_OPAQUE(thistype) \ - (((TYPE_CODE (thistype) == TYPE_CODE_STRUCT) \ - || (TYPE_CODE (thistype) == TYPE_CODE_UNION)) \ - && (TYPE_NFIELDS (thistype) == 0) \ + ((((thistype)->code () == TYPE_CODE_STRUCT) \ + || ((thistype)->code () == TYPE_CODE_UNION)) \ + && ((thistype)->num_fields () == 0) \ && (!HAVE_CPLUS_STRUCT (thistype) \ || TYPE_NFN_FIELDS (thistype) == 0) \ && (TYPE_STUB (thistype) || !TYPE_STUB_SUPPORTED (thistype))) @@ -1597,13 +1822,13 @@ if the type has no name. */ #define TYPE_SAFE_NAME(type) \ - (TYPE_NAME (type) ? TYPE_NAME (type) : _("<unnamed type>")) + (type->name () != nullptr ? type->name () : _("<unnamed type>")) /* * A helper macro that returns the name of an error type. If the type has a name, it is used; otherwise, a default is used. */ #define TYPE_ERROR_NAME(type) \ - (TYPE_NAME (type) ? TYPE_NAME (type) : _("<error type>")) + (type->name () ? type->name () : _("<error type>")) /* Given TYPE, return its floatformat. */ const struct floatformat *floatformat_from_type (const struct type *type); @@ -1623,6 +1848,7 @@ struct type *builtin_unsigned_short; struct type *builtin_unsigned_int; struct type *builtin_unsigned_long; + struct type *builtin_bfloat16; struct type *builtin_half; struct type *builtin_float; struct type *builtin_double; @@ -1757,7 +1983,7 @@ extern const struct floatformat *floatformats_vax_f[BFD_ENDIAN_UNKNOWN]; extern const struct floatformat *floatformats_vax_d[BFD_ENDIAN_UNKNOWN]; extern const struct floatformat *floatformats_ibm_long_double[BFD_ENDIAN_UNKNOWN]; - +extern const struct floatformat *floatformats_bfloat16[BFD_ENDIAN_UNKNOWN]; /* Allocate space for storing data associated with a particular type. We ensure that the space is allocated using the same @@ -1823,8 +2049,7 @@ const struct floatformat **, enum bfd_endian = BFD_ENDIAN_UNKNOWN); extern struct type *init_decfloat_type (struct objfile *, int, const char *); -extern struct type *init_complex_type (struct objfile *, const char *, - struct type *); +extern struct type *init_complex_type (const char *, struct type *); extern struct type *init_pointer_type (struct objfile *, int, const char *, struct type *); @@ -1840,8 +2065,6 @@ extern struct type *arch_float_type (struct gdbarch *, int, const char *, const struct floatformat **); extern struct type *arch_decfloat_type (struct gdbarch *, int, const char *); -extern struct type *arch_complex_type (struct gdbarch *, const char *, - struct type *); extern struct type *arch_pointer_type (struct gdbarch *, int, const char *, struct type *); @@ -2018,29 +2241,13 @@ ADDR specifies the location of the variable the type is bound to. If TYPE has no dynamic properties return TYPE; otherwise a new type with static properties is returned. */ -extern struct type *resolve_dynamic_type (struct type *type, - const gdb_byte *valaddr, - CORE_ADDR addr); +extern struct type *resolve_dynamic_type + (struct type *type, gdb::array_view<const gdb_byte> valaddr, + CORE_ADDR addr); /* * Predicate if the type has dynamic values, which are not resolved yet. */ extern int is_dynamic_type (struct type *type); -/* * Return the dynamic property of the requested KIND from TYPE's - list of dynamic properties. */ -extern struct dynamic_prop *get_dyn_prop - (enum dynamic_prop_node_kind kind, const struct type *type); - -/* * Given a dynamic property PROP of a given KIND, add this dynamic - property to the given TYPE. - - This function assumes that TYPE is objfile-owned. */ -extern void add_dyn_prop - (enum dynamic_prop_node_kind kind, struct dynamic_prop prop, - struct type *type); - -extern void remove_dyn_prop (enum dynamic_prop_node_kind prop_kind, - struct type *type); - extern struct type *check_typedef (struct type *); extern void check_stub_method_group (struct type *, int); @@ -2055,12 +2262,27 @@ extern int get_vptr_fieldno (struct type *, struct type **); -extern int get_discrete_bounds (struct type *, LONGEST *, LONGEST *); +/* Set *LOWP and *HIGHP to the lower and upper bounds of discrete type + TYPE. + + Return true if the two bounds are available, false otherwise. */ + +extern bool get_discrete_bounds (struct type *type, LONGEST *lowp, + LONGEST *highp); + +/* If TYPE's low bound is a known constant, return it, else return nullopt. */ + +extern gdb::optional<LONGEST> get_discrete_low_bound (struct type *type); + +/* If TYPE's high bound is a known constant, return it, else return nullopt. */ + +extern gdb::optional<LONGEST> get_discrete_high_bound (struct type *type); extern int get_array_bounds (struct type *type, LONGEST *low_bound, LONGEST *high_bound); -extern int discrete_position (struct type *type, LONGEST val, LONGEST *pos); +extern gdb::optional<LONGEST> discrete_position (struct type *type, + LONGEST val); extern int class_types_same_p (const struct type *, const struct type *); diff -Nru gdb-9.1/gdb/gdb_vfork.h gdb-10.2/gdb/gdb_vfork.h --- gdb-9.1/gdb/gdb_vfork.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/gdb_vfork.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* GDB-friendly replacement for <vfork.h>. - Copyright (C) 2001-2020 Free Software Foundation, Inc. + Copyright (C) 2001-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/gdb_wchar.h gdb-10.2/gdb/gdb_wchar.h --- gdb-9.1/gdb/gdb_wchar.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/gdb_wchar.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Wide characters for gdb - Copyright (C) 2009-2020 Free Software Foundation, Inc. + Copyright (C) 2009-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/.gitattributes gdb-10.2/gdb/.gitattributes --- gdb-9.1/gdb/.gitattributes 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/.gitattributes 2020-09-13 02:33:40.000000000 +0000 @@ -0,0 +1,7 @@ +# -*- conf -*- + +# Use cpp-style diffs for .h and .c files. This is useful +# if you modify classes defined in those files. + +*.h diff=cpp +*.c diff=cpp diff -Nru gdb-9.1/gdb/glibc-tdep.c gdb-10.2/gdb/glibc-tdep.c --- gdb-9.1/gdb/glibc-tdep.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/glibc-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for the GNU C Library (glibc). - Copyright (C) 2002-2020 Free Software Foundation, Inc. + Copyright (C) 2002-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/glibc-tdep.h gdb-10.2/gdb/glibc-tdep.h --- gdb-9.1/gdb/glibc-tdep.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/glibc-tdep.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for the GNU C Library (glibc). - Copyright (C) 2002-2020 Free Software Foundation, Inc. + Copyright (C) 2002-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/gnu-nat.c gdb-10.2/gdb/gnu-nat.c --- gdb-9.1/gdb/gnu-nat.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gnu-nat.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Interface GDB to the GNU Hurd. - Copyright (C) 1992-2020 Free Software Foundation, Inc. + Copyright (C) 1992-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -64,6 +64,7 @@ #include "language.h" #include "target.h" #include "gdbsupport/gdb_wait.h" +#include "gdbarch.h" #include "gdbcmd.h" #include "gdbcore.h" #include "gdbthread.h" @@ -82,8 +83,12 @@ #include "msg_reply_S.h" #include "exc_request_U.h" #include "msg_U.h" + +#include "gnu-nat-mig.h" } +struct gnu_nat_target *gnu_target; + static process_t proc_server = MACH_PORT_NULL; /* If we've sent a proc_wait_request to the proc server, the pid of the @@ -98,42 +103,12 @@ /* Forward decls */ static struct inf *make_inf (); -void inf_clear_wait (struct inf *inf); -void inf_cleanup (struct inf *inf); -void inf_startup (struct inf *inf, int pid); -int inf_update_suspends (struct inf *inf); -void inf_set_pid (struct inf *inf, pid_t pid); -void inf_validate_procs (struct inf *inf); -void inf_steal_exc_ports (struct inf *inf); -void inf_restore_exc_ports (struct inf *inf); -void inf_set_threads_resume_sc (struct inf *inf, - struct proc *run_thread, - int run_others); -int inf_set_threads_resume_sc_for_signal_thread (struct inf *inf); -void inf_suspend (struct inf *inf); -void inf_resume (struct inf *inf); -void inf_set_step_thread (struct inf *inf, struct proc *proc); -void inf_detach (struct inf *inf); -void inf_attach (struct inf *inf, int pid); -void inf_signal (struct inf *inf, enum gdb_signal sig); -void inf_continue (struct inf *inf); #define inf_debug(_inf, msg, args...) \ do { struct inf *__inf = (_inf); \ debug ("{inf %d %s}: " msg, __inf->pid, \ host_address_to_string (__inf) , ##args); } while (0) -void proc_abort (struct proc *proc, int force); -struct proc *make_proc (struct inf *inf, mach_port_t port, int tid); -struct proc *_proc_free (struct proc *proc); -int proc_update_sc (struct proc *proc); -kern_return_t proc_get_exception_port (struct proc *proc, mach_port_t * port); -kern_return_t proc_set_exception_port (struct proc *proc, mach_port_t port); -static mach_port_t _proc_get_exc_port (struct proc *proc); -void proc_steal_exc_port (struct proc *proc, mach_port_t exc_port); -void proc_restore_exc_port (struct proc *proc); -int proc_trace (struct proc *proc, int set); - /* Evaluate RPC_EXPR in a scope with the variables MSGPORT and REFPORT bound to INF's msg port and task port respectively. If it has no msg port, EIEIO is returned. INF must refer to a running process! */ @@ -262,7 +237,7 @@ /* Update PROC's real suspend count to match it's desired one. Returns true if we think PROC is now in a runnable state. */ int -proc_update_sc (struct proc *proc) +gnu_nat_target::proc_update_sc (struct proc *proc) { int running; int err = 0; @@ -328,7 +303,7 @@ In particular, a thread is precious if it's running (in which case forcing it includes suspending it first), or if it has an exception pending. */ void -proc_abort (struct proc *proc, int force) +gnu_nat_target::proc_abort (struct proc *proc, int force) { gdb_assert (proc_is_thread (proc)); @@ -365,7 +340,7 @@ that the thread is stopped and aborted first, and sets the state_changed field in PROC to true. */ thread_state_t -proc_get_state (struct proc *proc, int will_modify) +gnu_nat_target::proc_get_state (struct proc *proc, int will_modify) { int was_aborted = proc->aborted; @@ -402,7 +377,7 @@ /* Set PORT to PROC's exception port. */ kern_return_t -proc_get_exception_port (struct proc * proc, mach_port_t * port) +gnu_nat_target::proc_get_exception_port (struct proc * proc, mach_port_t * port) { if (proc_is_task (proc)) return task_get_exception_port (proc->port, port); @@ -412,7 +387,7 @@ /* Set PROC's exception port to PORT. */ kern_return_t -proc_set_exception_port (struct proc * proc, mach_port_t port) +gnu_nat_target::proc_set_exception_port (struct proc * proc, mach_port_t port) { proc_debug (proc, "setting exception port: %lu", port); if (proc_is_task (proc)) @@ -422,8 +397,8 @@ } /* Get PROC's exception port, cleaning up a bit if proc has died. */ -static mach_port_t -_proc_get_exc_port (struct proc *proc) +mach_port_t +gnu_nat_target::_proc_get_exc_port (struct proc *proc) { mach_port_t exc_port; kern_return_t err = proc_get_exception_port (proc, &exc_port); @@ -446,7 +421,7 @@ been done. Stash away any existing exception port so we can restore it later. */ void -proc_steal_exc_port (struct proc *proc, mach_port_t exc_port) +gnu_nat_target::proc_steal_exc_port (struct proc *proc, mach_port_t exc_port) { mach_port_t cur_exc_port = _proc_get_exc_port (proc); @@ -489,7 +464,7 @@ found there at the time, unless *our* exception port has since been overwritten, in which case who knows what's going on. */ void -proc_restore_exc_port (struct proc *proc) +gnu_nat_target::proc_restore_exc_port (struct proc *proc) { mach_port_t cur_exc_port = _proc_get_exc_port (proc); @@ -519,7 +494,7 @@ /* Turns hardware tracing in PROC on or off when SET is true or false, respectively. Returns true on success. */ int -proc_trace (struct proc *proc, int set) +gnu_nat_target::proc_trace (struct proc *proc, int set) { thread_state_t state = proc_get_state (proc, 1); @@ -549,7 +524,7 @@ /* Returns a new proc structure with the given fields. Also adds a notification for PORT becoming dead to be sent to INF's notify port. */ struct proc * -make_proc (struct inf *inf, mach_port_t port, int tid) +gnu_nat_target::make_proc (struct inf *inf, mach_port_t port, int tid) { kern_return_t err; mach_port_t prev_port = MACH_PORT_NULL; @@ -613,7 +588,7 @@ /* Frees PROC and any resources it uses, and returns the value of PROC's next field. */ struct proc * -_proc_free (struct proc *proc) +gnu_nat_target::_proc_free (struct proc *proc) { struct inf *inf = proc->inf; struct proc *next = proc->next; @@ -682,7 +657,7 @@ /* Clear INF's target wait status. */ void -inf_clear_wait (struct inf *inf) +gnu_nat_target::inf_clear_wait (struct inf *inf) { inf_debug (inf, "clearing wait"); inf->wait.status.kind = TARGET_WAITKIND_SPURIOUS; @@ -702,7 +677,7 @@ void -inf_cleanup (struct inf *inf) +gnu_nat_target::inf_cleanup (struct inf *inf) { inf_debug (inf, "cleanup"); @@ -725,7 +700,7 @@ } void -inf_startup (struct inf *inf, int pid) +gnu_nat_target::inf_startup (struct inf *inf, int pid) { kern_return_t err; @@ -748,7 +723,7 @@ /* Close current process, if any, and attach INF to process PORT. */ void -inf_set_pid (struct inf *inf, pid_t pid) +gnu_nat_target::inf_set_pid (struct inf *inf, pid_t pid) { task_t task_port; struct proc *task = inf->task; @@ -800,8 +775,8 @@ proc server state. Note that the traced field is only updated from the proc server state if we do not have a message port. If we do have a message port we'd better look at the tracemask itself. */ -static void -inf_validate_procinfo (struct inf *inf) +void +gnu_nat_target::inf_validate_procinfo (struct inf *inf) { char *noise; mach_msg_type_number_t noise_len = 0; @@ -827,8 +802,8 @@ /* Validates INF's task suspend count. If it's higher than we expect, verify with the user before `stealing' the extra count. */ -static void -inf_validate_task_sc (struct inf *inf) +void +gnu_nat_target::inf_validate_task_sc (struct inf *inf) { char *noise; mach_msg_type_number_t noise_len = 0; @@ -879,8 +854,8 @@ is. If INF is running, the resume_sc count of INF's threads will be modified, and the signal thread will briefly be run to change the trace state. */ -static void -inf_set_traced (struct inf *inf, int on) +void +gnu_nat_target::inf_set_traced (struct inf *inf, int on) { if (on == inf->traced) return; @@ -916,7 +891,7 @@ counts in the safe order. Returns true if at least one thread is thought to be running. */ int -inf_update_suspends (struct inf *inf) +gnu_nat_target::inf_update_suspends (struct inf *inf) { struct proc *task = inf->task; @@ -1007,7 +982,7 @@ /* Make INF's list of threads be consistent with reality of TASK. */ void -inf_validate_procs (struct inf *inf) +gnu_nat_target::inf_validate_procs (struct inf *inf) { thread_array_t threads; mach_msg_type_number_t num_threads, i; @@ -1106,12 +1081,12 @@ if (inferior_ptid == ptid_t (inf->pid)) /* This is the first time we're hearing about thread ids, after a fork-child. */ - thread_change_ptid (inferior_ptid, ptid); + thread_change_ptid (this, inferior_ptid, ptid); else if (inf->pending_execs != 0) /* This is a shell thread. */ - add_thread_silent (ptid); + add_thread_silent (this, ptid); else - add_thread (ptid); + add_thread (this, ptid); } } @@ -1128,7 +1103,7 @@ if (!inf->task) return 0; if (!inf->threads_up_to_date) - inf_validate_procs (inf); + gnu_target->inf_validate_procs (inf); return !!inf->task; } @@ -1136,8 +1111,8 @@ and others are set to their run_sc if RUN_OTHERS is true, and otherwise their pause_sc. */ void -inf_set_threads_resume_sc (struct inf *inf, - struct proc *run_thread, int run_others) +gnu_nat_target::inf_set_threads_resume_sc (struct inf *inf, + struct proc *run_thread, int run_others) { struct proc *thread; @@ -1155,7 +1130,7 @@ /* Cause INF to continue execution immediately; individual threads may still be suspended (but their suspend counts will be updated). */ void -inf_resume (struct inf *inf) +gnu_nat_target::inf_resume (struct inf *inf) { struct proc *thread; @@ -1180,7 +1155,7 @@ /* Cause INF to stop execution immediately; individual threads may still be running. */ void -inf_suspend (struct inf *inf) +gnu_nat_target::inf_suspend (struct inf *inf) { struct proc *thread; @@ -1200,7 +1175,7 @@ function changes it to be PROC, changing any old step_thread to be a normal one. A PROC of 0 clears any existing value. */ void -inf_set_step_thread (struct inf *inf, struct proc *thread) +gnu_nat_target::inf_set_step_thread (struct inf *inf, struct proc *thread) { gdb_assert (!thread || proc_is_thread (thread)); @@ -1226,7 +1201,7 @@ (plus whatever other thread are set to always run). Returns true if we did so, or false if we can't find a signal thread. */ int -inf_set_threads_resume_sc_for_signal_thread (struct inf *inf) +gnu_nat_target::inf_set_threads_resume_sc_for_signal_thread (struct inf *inf) { if (inf->signal_thread) { @@ -1248,7 +1223,7 @@ /* Detachs from INF's inferior task, letting it run once again... */ void -inf_detach (struct inf *inf) +gnu_nat_target::inf_detach (struct inf *inf) { struct proc *task = inf->task; @@ -1290,7 +1265,7 @@ /* Attaches INF to the process with process id PID, returning it in a suspended state suitable for debugging. */ void -inf_attach (struct inf *inf, int pid) +gnu_nat_target::inf_attach (struct inf *inf, int pid) { inf_debug (inf, "attaching: %d", pid); @@ -1303,7 +1278,7 @@ /* Makes sure that we've got our exception ports entrenched in the process. */ void -inf_steal_exc_ports (struct inf *inf) +gnu_nat_target::inf_steal_exc_ports (struct inf *inf) { struct proc *thread; @@ -1318,7 +1293,7 @@ /* Makes sure the process has its own exception ports. */ void -inf_restore_exc_ports (struct inf *inf) +gnu_nat_target::inf_restore_exc_ports (struct inf *inf) { struct proc *thread; @@ -1336,7 +1311,7 @@ signal 0, will continue it. INF is assumed to be in a paused state, and the resume_sc's of INF's threads may be affected. */ void -inf_signal (struct inf *inf, enum gdb_signal sig) +gnu_nat_target::inf_signal (struct inf *inf, enum gdb_signal sig) { kern_return_t err = 0; int host_sig = gdb_signal_to_host (sig); @@ -1424,7 +1399,7 @@ /* Continue INF without delivering a signal. This is meant to be used when INF does not have a message port. */ void -inf_continue (struct inf *inf) +gnu_nat_target::inf_continue (struct inf *inf) { process_t proc; kern_return_t err = proc_pid2proc (proc_server, inf->pid, &proc); @@ -1455,13 +1430,7 @@ /* The inferior being waited for by gnu_wait. Since GDB is decidely not multi-threaded, we don't bother to lock this. */ -struct inf *waiting_inf; - -/* MIG stubs are not yet ready for C++ compilation. */ -extern "C" int exc_server (mach_msg_header_t *, mach_msg_header_t *); -extern "C" int msg_reply_server (mach_msg_header_t *, mach_msg_header_t *); -extern "C" int notify_server (mach_msg_header_t *, mach_msg_header_t *); -extern "C" int process_reply_server (mach_msg_header_t *, mach_msg_header_t *); +static struct inf *waiting_inf; /* Wait for something to happen in the inferior, returning what in STATUS. */ @@ -1849,7 +1818,7 @@ inf->no_wait = 1; /* Since we can't see the inferior's signals, don't trap them. */ - inf_set_traced (inf, 0); + gnu_target->inf_set_traced (inf, 0); } } else if (pid == inf->pid) @@ -2143,21 +2112,23 @@ inf_debug (inf, "creating inferior"); + if (!target_is_pushed (this)) + push_target (this); + pid = fork_inferior (exec_file, allargs, env, gnu_ptrace_me, NULL, NULL, NULL, NULL); /* We have something that executes now. We'll be running through the shell at this point (if startup-with-shell is true), but the pid shouldn't change. */ - add_thread_silent (ptid_t (pid)); + thread_info *thr = add_thread_silent (this, ptid_t (pid)); + switch_to_thread (thr); /* Attach to the now stopped child, which is actually a shell... */ inf_debug (inf, "attaching to child: %d", pid); inf_attach (inf, pid); - push_target (this); - inf->pending_execs = 1; inf->nomsg = 1; inf->traced = 1; @@ -2167,7 +2138,7 @@ inf_resume (inf); /* We now have thread info. */ - thread_change_ptid (inferior_ptid, + thread_change_ptid (this, inferior_ptid, ptid_t (inf->pid, inf_pick_first_thread (), 0)); gdb_startup_inferior (pid, START_INFERIOR_TRAPS_EXPECTED); @@ -2195,7 +2166,6 @@ gnu_nat_target::attach (const char *args, int from_tty) { int pid; - char *exec_file; struct inf *inf = cur_inf (); struct inferior *inferior; @@ -2206,7 +2176,7 @@ if (from_tty) { - exec_file = (char *) get_exec_file (0); + const char *exec_file = get_exec_file (0); if (exec_file) printf_unfiltered ("Attaching to program `%s', pid %d\n", @@ -2227,7 +2197,9 @@ inf_update_procs (inf); - inferior_ptid = ptid_t (pid, inf_pick_first_thread (), 0); + thread_info *thr + = find_thread_ptid (this, ptid_t (pid, inf_pick_first_thread ())); + switch_to_thread (thr); /* We have to initialize the terminal settings now, since the code below might try to restore them. */ @@ -2256,11 +2228,9 @@ void gnu_nat_target::detach (inferior *inf, int from_tty) { - int pid; - if (from_tty) { - char *exec_file = get_exec_file (0); + const char *exec_file = get_exec_file (0); if (exec_file) printf_unfiltered ("Detaching from program `%s' pid %d\n", @@ -2269,12 +2239,10 @@ printf_unfiltered ("Detaching from pid %d\n", gnu_current_inf->pid); } - pid = gnu_current_inf->pid; - inf_detach (gnu_current_inf); - inferior_ptid = null_ptid; - detach_inferior (find_inferior_pid (pid)); + switch_to_no_thread (); + detach_inferior (inf); maybe_unpush_target (); } @@ -2552,7 +2520,6 @@ ? gnu_current_inf->task->port : 0) : 0); process_t proc; - int res; kern_return_t err; vm_address_t entry; ElfW(auxv_t) auxv[2]; @@ -2642,7 +2609,6 @@ mach_port_t object_name; vm_offset_t offset; vm_size_t region_length = VM_MAX_ADDRESS - region_address; - vm_address_t old_address = region_address; err = vm_region (task, ®ion_address, @@ -2841,7 +2807,7 @@ if (old_sc == 0 && inf->pause_sc != 0) /* If the task is currently unsuspended, immediately suspend it, otherwise wait until the next time it gets control. */ - inf_suspend (inf); + gnu_target->inf_suspend (inf); } static void @@ -2937,8 +2903,8 @@ /* Steal a send right called NAME in the inferior task, and make it PROC's saved exception port. */ -static void -steal_exc_port (struct proc *proc, mach_port_t name) +void +gnu_nat_target::steal_exc_port (struct proc *proc, mach_port_t name) { kern_return_t err; mach_port_t port; @@ -2979,7 +2945,7 @@ if (!args) error (_("No argument to \"set task exception-port\" command.")); - steal_exc_port (inf->task, parse_and_eval_address (args)); + gnu_target->steal_exc_port (inf->task, parse_and_eval_address (args)); } static void @@ -3039,7 +3005,7 @@ if (inf->task && inf->want_signals != inf->traced) /* Make this take effect immediately in a running process. */ - inf_set_traced (inf, inf->want_signals); + gnu_target->inf_set_traced (inf, inf->want_signals); } static void @@ -3337,7 +3303,7 @@ if (old_sc == 0 && thread->pause_sc != 0 && thread->inf->pause_sc == 0) /* If the task is currently unsuspended, immediately suspend it, otherwise wait until the next time it gets control. */ - inf_suspend (thread->inf); + gnu_target->inf_suspend (thread->inf); } static void @@ -3398,7 +3364,7 @@ if (!args) error (_("No argument to \"set thread exception-port\" command.")); - steal_exc_port (thread, parse_and_eval_address (args)); + gnu_target->steal_exc_port (thread, parse_and_eval_address (args)); } #if 0 @@ -3501,8 +3467,9 @@ &thread_cmd_list); } +void _initialize_gnu_nat (); void -_initialize_gnu_nat (void) +_initialize_gnu_nat () { proc_server = getproc (); diff -Nru gdb-9.1/gdb/gnu-nat.h gdb-10.2/gdb/gnu-nat.h --- gdb-9.1/gdb/gnu-nat.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/gnu-nat.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Common things used by the various *gnu-nat.c files - Copyright (C) 1995-2020 Free Software Foundation, Inc. + Copyright (C) 1995-2021 Free Software Foundation, Inc. Written by Miles Bader <miles@gnu.ai.mit.edu> @@ -96,12 +96,6 @@ extern int __proc_pid (struct proc *proc); -/* Make sure that the state field in PROC is up to date, and return a - pointer to it, or 0 if something is wrong. If WILL_MODIFY is true, - makes sure that the thread is stopped and aborted first, and sets - the state_changed field in PROC to true. */ -extern thread_state_t proc_get_state (struct proc *proc, int will_modify); - /* Return printable description of proc. */ extern char *proc_string (struct proc *proc); @@ -111,7 +105,7 @@ __proc_pid (__proc), __proc->tid, \ host_address_to_string (__proc) , ##args); } while (0) -extern int gnu_debug_flag; +extern bool gnu_debug_flag; #define debug(msg, args...) \ do { if (gnu_debug_flag) \ @@ -148,6 +142,52 @@ bool thread_alive (ptid_t ptid) override; std::string pid_to_str (ptid_t) override; void stop (ptid_t) override; + + void inf_validate_procs (struct inf *inf); + void inf_suspend (struct inf *inf); + void inf_set_traced (struct inf *inf, int on); + void steal_exc_port (struct proc *proc, mach_port_t name); + + /* Make sure that the state field in PROC is up to date, and return a + pointer to it, or 0 if something is wrong. If WILL_MODIFY is true, + makes sure that the thread is stopped and aborted first, and sets + the state_changed field in PROC to true. */ + thread_state_t proc_get_state (struct proc *proc, int will_modify); + +private: + void inf_clear_wait (struct inf *inf); + void inf_cleanup (struct inf *inf); + void inf_startup (struct inf *inf, int pid); + int inf_update_suspends (struct inf *inf); + void inf_set_pid (struct inf *inf, pid_t pid); + void inf_steal_exc_ports (struct inf *inf); + void inf_validate_procinfo (struct inf *inf); + void inf_validate_task_sc (struct inf *inf); + void inf_restore_exc_ports (struct inf *inf); + void inf_set_threads_resume_sc (struct inf *inf, + struct proc *run_thread, + int run_others); + int inf_set_threads_resume_sc_for_signal_thread (struct inf *inf); + void inf_resume (struct inf *inf); + void inf_set_step_thread (struct inf *inf, struct proc *proc); + void inf_detach (struct inf *inf); + void inf_attach (struct inf *inf, int pid); + void inf_signal (struct inf *inf, enum gdb_signal sig); + void inf_continue (struct inf *inf); + + struct proc *make_proc (struct inf *inf, mach_port_t port, int tid); + void proc_abort (struct proc *proc, int force); + struct proc *_proc_free (struct proc *proc); + int proc_update_sc (struct proc *proc); + kern_return_t proc_get_exception_port (struct proc *proc, mach_port_t * port); + kern_return_t proc_set_exception_port (struct proc *proc, mach_port_t port); + mach_port_t _proc_get_exc_port (struct proc *proc); + void proc_steal_exc_port (struct proc *proc, mach_port_t exc_port); + void proc_restore_exc_port (struct proc *proc); + int proc_trace (struct proc *proc, int set); }; +/* The final/concrete instance. */ +extern gnu_nat_target *gnu_target; + #endif /* GNU_NAT_H */ diff -Nru gdb-9.1/gdb/gnu-nat-mig.h gdb-10.2/gdb/gnu-nat-mig.h --- gdb-9.1/gdb/gnu-nat-mig.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/gnu-nat-mig.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,31 @@ +/* Common things used by the various *gnu-nat.c files + Copyright (C) 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef GNU_NAT_MIG_H +#define GNU_NAT_MIG_H + +#include <mach/boolean.h> +#include <mach/message.h> + +boolean_t exc_server (mach_msg_header_t *InHeadP, mach_msg_header_t *OutHeadP); +boolean_t msg_reply_server (mach_msg_header_t *InHeadP, + mach_msg_header_t *OutHeadP); +boolean_t notify_server (mach_msg_header_t *InHeadP, + mach_msg_header_t *OutHeadP); +boolean_t process_reply_server (mach_msg_header_t *InHeadP, + mach_msg_header_t *OutHeadP); + +#endif /* GNU_NAT_MIG_H */ diff -Nru gdb-9.1/gdb/gnu-v2-abi.c gdb-10.2/gdb/gnu-v2-abi.c --- gdb-9.1/gdb/gnu-v2-abi.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gnu-v2-abi.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Abstraction of GNU v2 abi. - Copyright (C) 2001-2020 Free Software Foundation, Inc. + Copyright (C) 2001-2021 Free Software Foundation, Inc. Contributed by Daniel Berlin <dberlin@redhat.com> @@ -132,8 +132,8 @@ /* With older versions of g++, the vtbl field pointed to an array of structures. Nowadays it points directly to the structure. */ - if (TYPE_CODE (value_type (vtbl)) == TYPE_CODE_PTR - && TYPE_CODE (TYPE_TARGET_TYPE (value_type (vtbl))) == TYPE_CODE_ARRAY) + if (value_type (vtbl)->code () == TYPE_CODE_PTR + && TYPE_TARGET_TYPE (value_type (vtbl))->code () == TYPE_CODE_ARRAY) { /* Handle the case where the vtbl field points to an array of structures. */ @@ -155,7 +155,7 @@ entry_type = check_typedef (value_type (entry)); - if (TYPE_CODE (entry_type) == TYPE_CODE_STRUCT) + if (entry_type->code () == TYPE_CODE_STRUCT) { /* Move the `this' pointer according to the virtual function table. */ set_value_offset (arg1, value_offset (arg1) @@ -169,7 +169,7 @@ vfn = value_field (entry, 2); } - else if (TYPE_CODE (entry_type) == TYPE_CODE_PTR) + else if (entry_type->code () == TYPE_CODE_PTR) vfn = entry; else error (_("I'm confused: virtual function table has bad type")); @@ -206,7 +206,7 @@ known_type = value_type (v); known_type = check_typedef (known_type); /* RTTI works only or class objects. */ - if (TYPE_CODE (known_type) != TYPE_CODE_STRUCT) + if (known_type->code () != TYPE_CODE_STRUCT) return NULL; /* Plan on this changing in the future as i get around to setting @@ -312,9 +312,9 @@ /* It's a virtual baseclass pointer, now we just need to find out whether it is for this baseclass. */ - fieldtype = TYPE_FIELD_TYPE (type, index); + fieldtype = type->field (index).type (); if (fieldtype == NULL - || TYPE_CODE (fieldtype) != TYPE_CODE_PTR) + || fieldtype->code () != TYPE_CODE_PTR) /* "Can't happen". */ return 0; @@ -325,10 +325,10 @@ if (TYPE_TARGET_TYPE (fieldtype) == basetype) return 1; - if (TYPE_NAME (basetype) != NULL - && TYPE_NAME (TYPE_TARGET_TYPE (fieldtype)) != NULL - && strcmp (TYPE_NAME (basetype), - TYPE_NAME (TYPE_TARGET_TYPE (fieldtype))) == 0) + if (basetype->name () != NULL + && TYPE_TARGET_TYPE (fieldtype)->name () != NULL + && strcmp (basetype->name (), + TYPE_TARGET_TYPE (fieldtype)->name ()) == 0) return 1; return 0; } @@ -348,7 +348,7 @@ if (BASETYPE_VIA_VIRTUAL (type, index)) { /* Must hunt for the pointer to this virtual baseclass. */ - int i, len = TYPE_NFIELDS (type); + int i, len = type->num_fields (); int n_baseclasses = TYPE_N_BASECLASSES (type); /* First look for the virtual baseclass pointer @@ -362,7 +362,7 @@ int field_length; CORE_ADDR addr; - field_type = check_typedef (TYPE_FIELD_TYPE (type, i)); + field_type = check_typedef (type->field (i).type ()); field_offset = TYPE_FIELD_BITPOS (type, i) / 8; field_length = TYPE_LENGTH (field_type); @@ -413,8 +413,9 @@ gnu_v2_abi_ops.baseclass_offset = gnuv2_baseclass_offset; } +void _initialize_gnu_v2_abi (); void -_initialize_gnu_v2_abi (void) +_initialize_gnu_v2_abi () { init_gnuv2_ops (); register_cp_abi (&gnu_v2_abi_ops); diff -Nru gdb-9.1/gdb/gnu-v3-abi.c gdb-10.2/gdb/gnu-v3-abi.c --- gdb-9.1/gdb/gnu-v3-abi.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/gnu-v3-abi.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,7 +1,7 @@ /* Abstraction of GNU v3 abi. Contributed by Jim Blandy <jimb@redhat.com> - Copyright (C) 2001-2020 Free Software Foundation, Inc. + Copyright (C) 2001-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -23,12 +23,14 @@ #include "cp-abi.h" #include "cp-support.h" #include "demangle.h" +#include "dwarf2.h" #include "objfiles.h" #include "valprint.h" #include "c-lang.h" #include "typeprint.h" #include <algorithm> #include "cli/cli-style.h" +#include "dwarf2/loc.h" static struct cp_abi_ops gnu_v3_abi_ops; @@ -133,39 +135,39 @@ /* ptrdiff_t vcall_and_vbase_offsets[0]; */ FIELD_NAME (*field) = "vcall_and_vbase_offsets"; - FIELD_TYPE (*field) = lookup_array_range_type (ptrdiff_type, 0, -1); + field->set_type (lookup_array_range_type (ptrdiff_type, 0, -1)); SET_FIELD_BITPOS (*field, offset * TARGET_CHAR_BIT); - offset += TYPE_LENGTH (FIELD_TYPE (*field)); + offset += TYPE_LENGTH (field->type ()); field++; /* ptrdiff_t offset_to_top; */ FIELD_NAME (*field) = "offset_to_top"; - FIELD_TYPE (*field) = ptrdiff_type; + field->set_type (ptrdiff_type); SET_FIELD_BITPOS (*field, offset * TARGET_CHAR_BIT); - offset += TYPE_LENGTH (FIELD_TYPE (*field)); + offset += TYPE_LENGTH (field->type ()); field++; /* void *type_info; */ FIELD_NAME (*field) = "type_info"; - FIELD_TYPE (*field) = void_ptr_type; + field->set_type (void_ptr_type); SET_FIELD_BITPOS (*field, offset * TARGET_CHAR_BIT); - offset += TYPE_LENGTH (FIELD_TYPE (*field)); + offset += TYPE_LENGTH (field->type ()); field++; /* void (*virtual_functions[0]) (); */ FIELD_NAME (*field) = "virtual_functions"; - FIELD_TYPE (*field) = lookup_array_range_type (ptr_to_void_fn_type, 0, -1); + field->set_type (lookup_array_range_type (ptr_to_void_fn_type, 0, -1)); SET_FIELD_BITPOS (*field, offset * TARGET_CHAR_BIT); - offset += TYPE_LENGTH (FIELD_TYPE (*field)); + offset += TYPE_LENGTH (field->type ()); field++; /* We assumed in the allocation above that there were four fields. */ gdb_assert (field == (field_list + 4)); t = arch_type (arch, TYPE_CODE_STRUCT, offset * TARGET_CHAR_BIT, NULL); - TYPE_NFIELDS (t) = field - field_list; - TYPE_FIELDS (t) = field_list; - TYPE_NAME (t) = "gdb_gnu_v3_abi_vtable"; + t->set_num_fields (field - field_list); + t->set_fields (field_list); + t->set_name ("gdb_gnu_v3_abi_vtable"); INIT_CPLUS_SPECIFIC (t); return make_type_with_address_space (t, TYPE_INSTANCE_FLAG_CODE_SPACE); @@ -180,7 +182,7 @@ = (struct type *) gdbarch_data (gdbarch, vtable_type_gdbarch_data); /* The "offset_to_top" field has the appropriate (ptrdiff_t) type. */ - return TYPE_FIELD_TYPE (vtable_type, vtable_field_offset_to_top); + return vtable_type->field (vtable_field_offset_to_top).type (); } /* Return the offset from the start of the imaginary `struct @@ -206,10 +208,10 @@ int fieldnum, fieldelem; type = check_typedef (type); - gdb_assert (TYPE_CODE (type) == TYPE_CODE_STRUCT - || TYPE_CODE (type) == TYPE_CODE_UNION); + gdb_assert (type->code () == TYPE_CODE_STRUCT + || type->code () == TYPE_CODE_UNION); - if (TYPE_CODE (type) == TYPE_CODE_UNION) + if (type->code () == TYPE_CODE_UNION) return 0; if (TYPE_CPLUS_DYNAMIC (type)) @@ -219,7 +221,7 @@ for (fieldnum = 0; fieldnum < TYPE_N_BASECLASSES (type); fieldnum++) if (BASETYPE_VIA_VIRTUAL (type, fieldnum) - || gnuv3_dynamic_class (TYPE_FIELD_TYPE (type, fieldnum))) + || gnuv3_dynamic_class (type->field (fieldnum).type ())) { TYPE_CPLUS_DYNAMIC (type) = 1; return 1; @@ -257,7 +259,7 @@ CORE_ADDR vtable_address; container_type = check_typedef (container_type); - gdb_assert (TYPE_CODE (container_type) == TYPE_CODE_STRUCT); + gdb_assert (container_type->code () == TYPE_CODE_STRUCT); /* If this type does not have a virtual table, don't read the first field. */ @@ -301,7 +303,7 @@ const char *atsign; /* We only have RTTI for dynamic class objects. */ - if (TYPE_CODE (values_type) != TYPE_CODE_STRUCT + if (values_type->code () != TYPE_CODE_STRUCT || !gnuv3_dynamic_class (values_type)) return NULL; @@ -416,7 +418,7 @@ struct gdbarch *gdbarch; /* Some simple sanity checks. */ - if (TYPE_CODE (values_type) != TYPE_CODE_STRUCT) + if (values_type->code () != TYPE_CODE_STRUCT) error (_("Only classes can have virtual functions.")); /* Determine architecture. */ @@ -460,6 +462,30 @@ if (!BASETYPE_VIA_VIRTUAL (type, index)) return TYPE_BASECLASS_BITPOS (type, index) / 8; + /* If we have a DWARF expression for the offset, evaluate it. */ + if (TYPE_FIELD_LOC_KIND (type, index) == FIELD_LOC_KIND_DWARF_BLOCK) + { + struct dwarf2_property_baton baton; + baton.property_type + = lookup_pointer_type (type->field (index).type ()); + baton.locexpr = *TYPE_FIELD_DWARF_BLOCK (type, index); + + struct dynamic_prop prop; + prop.set_locexpr (&baton); + + struct property_addr_info addr_stack; + addr_stack.type = type; + /* Note that we don't set "valaddr" here. Doing so causes + regressions. FIXME. */ + addr_stack.addr = address + embedded_offset; + addr_stack.next = nullptr; + + CORE_ADDR result; + if (dwarf2_evaluate_property (&prop, nullptr, &addr_stack, &result, + true)) + return (int) (result - addr_stack.addr); + } + /* To access a virtual base, we need to use the vbase offset stored in our vtable. Recent GCC versions provide this information. If it isn't available, we could get what we needed from RTTI, or from drawing the @@ -523,7 +549,7 @@ continue; pos = TYPE_BASECLASS_BITPOS (domain, i) / 8; - basetype = TYPE_FIELD_TYPE (domain, i); + basetype = domain->field (i).type (); /* Recurse with a modified adjustment. We don't need to adjust voffset. */ if (adjustment >= pos && adjustment < pos + TYPE_LENGTH (basetype)) @@ -822,7 +848,7 @@ void **slot; struct value_and_voffset search_vo, *current_vo; - gdb_assert (TYPE_CODE (type) == TYPE_CODE_STRUCT); + gdb_assert (type->code () == TYPE_CODE_STRUCT); /* If the object is not dynamic, then we are done; as it cannot have dynamic base types either. */ @@ -937,7 +963,7 @@ value = coerce_ref (value); type = check_typedef (value_type (value)); - if (TYPE_CODE (type) == TYPE_CODE_PTR) + if (type->code () == TYPE_CODE_PTR) { value = value_ind (value); type = check_typedef (value_type (value)); @@ -955,7 +981,7 @@ gdbarch = get_type_arch (type); vtable = NULL; - if (TYPE_CODE (type) == TYPE_CODE_STRUCT) + if (type->code () == TYPE_CODE_STRUCT) vtable = gnuv3_get_vtable (gdbarch, type, value_as_address (value_addr (value))); @@ -1012,24 +1038,24 @@ /* The vtable. */ FIELD_NAME (*field) = "_vptr.type_info"; - FIELD_TYPE (*field) = void_ptr_type; + field->set_type (void_ptr_type); SET_FIELD_BITPOS (*field, offset * TARGET_CHAR_BIT); - offset += TYPE_LENGTH (FIELD_TYPE (*field)); + offset += TYPE_LENGTH (field->type ()); field++; /* The name. */ FIELD_NAME (*field) = "__name"; - FIELD_TYPE (*field) = char_ptr_type; + field->set_type (char_ptr_type); SET_FIELD_BITPOS (*field, offset * TARGET_CHAR_BIT); - offset += TYPE_LENGTH (FIELD_TYPE (*field)); + offset += TYPE_LENGTH (field->type ()); field++; gdb_assert (field == (field_list + 2)); t = arch_type (arch, TYPE_CODE_STRUCT, offset * TARGET_CHAR_BIT, NULL); - TYPE_NFIELDS (t) = field - field_list; - TYPE_FIELDS (t) = field_list; - TYPE_NAME (t) = "gdb_gnu_v3_type_info"; + t->set_num_fields (field - field_list); + t->set_fields (field_list); + t->set_name ("gdb_gnu_v3_type_info"); INIT_CPLUS_SPECIFIC (t); return t; @@ -1063,7 +1089,8 @@ struct type *type; struct gdbarch *gdbarch; struct value *result; - std::string type_name, canonical; + std::string type_name; + gdb::unique_xmalloc_ptr<char> canonical; /* We have to handle values a bit trickily here, to allow this code to work properly with non_lvalue values that are really just @@ -1075,7 +1102,7 @@ /* In the non_lvalue case, a reference might have slipped through here. */ - if (TYPE_CODE (type) == TYPE_CODE_REF) + if (type->code () == TYPE_CODE_REF) type = check_typedef (TYPE_TARGET_TYPE (type)); /* Ignore top-level cv-qualifiers. */ @@ -1091,14 +1118,15 @@ uses. E.g., GDB tends to use "const char *" as a type name, but the demangler uses "char const *". */ canonical = cp_canonicalize_string (type_name.c_str ()); - if (!canonical.empty ()) - type_name = canonical; + const char *name = (canonical == nullptr + ? type_name.c_str () + : canonical.get ()); typeinfo_type = gnuv3_get_typeid_type (gdbarch); /* We check for lval_memory because in the "typeid (type-id)" case, the type is passed via a not_lval value object. */ - if (TYPE_CODE (type) == TYPE_CODE_STRUCT + if (type->code () == TYPE_CODE_STRUCT && value_lval_const (value) == lval_memory && gnuv3_dynamic_class (type)) { @@ -1108,19 +1136,19 @@ vtable = gnuv3_get_vtable (gdbarch, type, address); if (vtable == NULL) error (_("cannot find typeinfo for object of type '%s'"), - type_name.c_str ()); + name); typeinfo_value = value_field (vtable, vtable_field_type_info); result = value_ind (value_cast (make_pointer_type (typeinfo_type, NULL), typeinfo_value)); } else { - std::string sym_name = std::string ("typeinfo for ") + type_name; + std::string sym_name = std::string ("typeinfo for ") + name; bound_minimal_symbol minsym = lookup_minimal_symbol (sym_name.c_str (), NULL, NULL); if (minsym.minsym == NULL) - error (_("could not find typeinfo symbol for '%s'"), type_name.c_str ()); + error (_("could not find typeinfo symbol for '%s'"), name); result = value_at_lazy (typeinfo_type, BMSYMBOL_VALUE_ADDRESS (minsym)); } @@ -1230,7 +1258,128 @@ return real_stop_pc; } -/* Return nonzero if a type should be passed by reference. +/* A member function is in one these states. */ + +enum definition_style +{ + DOES_NOT_EXIST_IN_SOURCE, + DEFAULTED_INSIDE, + DEFAULTED_OUTSIDE, + DELETED, + EXPLICIT, +}; + +/* Return how the given field is defined. */ + +static definition_style +get_def_style (struct fn_field *fn, int fieldelem) +{ + if (TYPE_FN_FIELD_DELETED (fn, fieldelem)) + return DELETED; + + if (TYPE_FN_FIELD_ARTIFICIAL (fn, fieldelem)) + return DOES_NOT_EXIST_IN_SOURCE; + + switch (TYPE_FN_FIELD_DEFAULTED (fn, fieldelem)) + { + case DW_DEFAULTED_no: + return EXPLICIT; + case DW_DEFAULTED_in_class: + return DEFAULTED_INSIDE; + case DW_DEFAULTED_out_of_class: + return DEFAULTED_OUTSIDE; + default: + break; + } + + return EXPLICIT; +} + +/* Helper functions to determine whether the given definition style + denotes that the definition is user-provided or implicit. + Being defaulted outside the class decl counts as an explicit + user-definition, while being defaulted inside is implicit. */ + +static bool +is_user_provided_def (definition_style def) +{ + return def == EXPLICIT || def == DEFAULTED_OUTSIDE; +} + +static bool +is_implicit_def (definition_style def) +{ + return def == DOES_NOT_EXIST_IN_SOURCE || def == DEFAULTED_INSIDE; +} + +/* Helper function to decide if METHOD_TYPE is a copy/move + constructor type for CLASS_TYPE. EXPECTED is the expected + type code for the "right-hand-side" argument. + This function is supposed to be used by the IS_COPY_CONSTRUCTOR_TYPE + and IS_MOVE_CONSTRUCTOR_TYPE functions below. Normally, you should + not need to call this directly. */ + +static bool +is_copy_or_move_constructor_type (struct type *class_type, + struct type *method_type, + type_code expected) +{ + /* The method should take at least two arguments... */ + if (method_type->num_fields () < 2) + return false; + + /* ...and the second argument should be the same as the class + type, with the expected type code... */ + struct type *arg_type = method_type->field (1).type (); + + if (arg_type->code () != expected) + return false; + + struct type *target = check_typedef (TYPE_TARGET_TYPE (arg_type)); + if (!(class_types_same_p (target, class_type))) + return false; + + /* ...and if any of the remaining arguments don't have a default value + then this is not a copy or move constructor, but just a + constructor. */ + for (int i = 2; i < method_type->num_fields (); i++) + { + arg_type = method_type->field (i).type (); + /* FIXME aktemur/2019-10-31: As of this date, neither + clang++-7.0.0 nor g++-8.2.0 produce a DW_AT_default_value + attribute. GDB is also not set to read this attribute, yet. + Hence, we immediately return false if there are more than + 2 parameters. + GCC bug link: + https://gcc.gnu.org/bugzilla/show_bug.cgi?id=42959 + */ + return false; + } + + return true; +} + +/* Return true if METHOD_TYPE is a copy ctor type for CLASS_TYPE. */ + +static bool +is_copy_constructor_type (struct type *class_type, + struct type *method_type) +{ + return is_copy_or_move_constructor_type (class_type, method_type, + TYPE_CODE_REF); +} + +/* Return true if METHOD_TYPE is a move ctor type for CLASS_TYPE. */ + +static bool +is_move_constructor_type (struct type *class_type, + struct type *method_type) +{ + return is_copy_or_move_constructor_type (class_type, method_type, + TYPE_CODE_RVALUE_REF); +} + +/* Return pass-by-reference information for the given TYPE. The rule in the v3 ABI document comes from section 3.1.1. If the type has a non-trivial copy constructor or destructor, then the @@ -1238,32 +1387,59 @@ is one or perform the copy itself otherwise), pass the address of the copy, and then destroy the temporary (if necessary). - For return values with non-trivial copy constructors or + For return values with non-trivial copy/move constructors or destructors, space will be allocated in the caller, and a pointer will be passed as the first argument (preceding "this"). We don't have a bulletproof mechanism for determining whether a - constructor or destructor is trivial. For GCC and DWARF2 debug - information, we can check the artificial flag. + constructor or destructor is trivial. For GCC and DWARF5 debug + information, we can check the calling_convention attribute, + the 'artificial' flag, the 'defaulted' attribute, and the + 'deleted' attribute. */ - We don't do anything with the constructors or destructors, - but we have to get the argument passing right anyway. */ -static int +static struct language_pass_by_ref_info gnuv3_pass_by_reference (struct type *type) { int fieldnum, fieldelem; type = check_typedef (type); + /* Start with the default values. */ + struct language_pass_by_ref_info info; + + bool has_cc_attr = false; + bool is_pass_by_value = false; + bool is_dynamic = false; + definition_style cctor_def = DOES_NOT_EXIST_IN_SOURCE; + definition_style dtor_def = DOES_NOT_EXIST_IN_SOURCE; + definition_style mctor_def = DOES_NOT_EXIST_IN_SOURCE; + /* We're only interested in things that can have methods. */ - if (TYPE_CODE (type) != TYPE_CODE_STRUCT - && TYPE_CODE (type) != TYPE_CODE_UNION) - return 0; + if (type->code () != TYPE_CODE_STRUCT + && type->code () != TYPE_CODE_UNION) + return info; + + /* The compiler may have emitted the calling convention attribute. + Note: GCC does not produce this attribute as of version 9.2.1. + Bug link: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92418 */ + if (TYPE_CPLUS_CALLING_CONVENTION (type) == DW_CC_pass_by_value) + { + has_cc_attr = true; + is_pass_by_value = true; + /* Do not return immediately. We have to find out if this type + is copy_constructible and destructible. */ + } + + if (TYPE_CPLUS_CALLING_CONVENTION (type) == DW_CC_pass_by_reference) + { + has_cc_attr = true; + is_pass_by_value = false; + } /* A dynamic class has a non-trivial copy constructor. See c++98 section 12.8 Copying class objects [class.copy]. */ if (gnuv3_dynamic_class (type)) - return 1; + is_dynamic = true; for (fieldnum = 0; fieldnum < TYPE_NFN_FIELDS (type); fieldnum++) for (fieldelem = 0; fieldelem < TYPE_FN_FIELDLIST_LENGTH (type, fieldnum); @@ -1273,44 +1449,75 @@ const char *name = TYPE_FN_FIELDLIST_NAME (type, fieldnum); struct type *fieldtype = TYPE_FN_FIELD_TYPE (fn, fieldelem); - /* If this function is marked as artificial, it is compiler-generated, - and we assume it is trivial. */ - if (TYPE_FN_FIELD_ARTIFICIAL (fn, fieldelem)) - continue; - - /* If we've found a destructor, we must pass this by reference. */ if (name[0] == '~') - return 1; - - /* If the mangled name of this method doesn't indicate that it - is a constructor, we're not interested. - - FIXME drow/2007-09-23: We could do this using the name of - the method and the name of the class instead of dealing - with the mangled name. We don't have a convenient function - to strip off both leading scope qualifiers and trailing - template arguments yet. */ - if (!is_constructor_name (TYPE_FN_FIELD_PHYSNAME (fn, fieldelem)) - && !TYPE_FN_FIELD_CONSTRUCTOR (fn, fieldelem)) - continue; - - /* If this method takes two arguments, and the second argument is - a reference to this class, then it is a copy constructor. */ - if (TYPE_NFIELDS (fieldtype) == 2) { - struct type *arg_type = TYPE_FIELD_TYPE (fieldtype, 1); - - if (TYPE_CODE (arg_type) == TYPE_CODE_REF) + /* We've found a destructor. + There should be at most one dtor definition. */ + gdb_assert (dtor_def == DOES_NOT_EXIST_IN_SOURCE); + dtor_def = get_def_style (fn, fieldelem); + } + else if (is_constructor_name (TYPE_FN_FIELD_PHYSNAME (fn, fieldelem)) + || TYPE_FN_FIELD_CONSTRUCTOR (fn, fieldelem)) + { + /* FIXME drow/2007-09-23: We could do this using the name of + the method and the name of the class instead of dealing + with the mangled name. We don't have a convenient function + to strip off both leading scope qualifiers and trailing + template arguments yet. */ + if (is_copy_constructor_type (type, fieldtype)) { - struct type *arg_target_type; + /* There may be more than one cctors. E.g.: one that + take a const parameter and another that takes a + non-const parameter. Such as: + + class K { + K (const K &k)... + K (K &k)... + }; + + It is sufficient for the type to be non-trivial + even only one of the cctors is explicit. + Therefore, update the cctor_def value in the + implicit -> explicit direction, not backwards. */ - arg_target_type = check_typedef (TYPE_TARGET_TYPE (arg_type)); - if (class_types_same_p (arg_target_type, type)) - return 1; + if (is_implicit_def (cctor_def)) + cctor_def = get_def_style (fn, fieldelem); + } + else if (is_move_constructor_type (type, fieldtype)) + { + /* Again, there may be multiple move ctors. Update the + mctor_def value if we found an explicit def and the + existing one is not explicit. Otherwise retain the + existing value. */ + if (is_implicit_def (mctor_def)) + mctor_def = get_def_style (fn, fieldelem); } } } + bool cctor_implicitly_deleted + = (mctor_def != DOES_NOT_EXIST_IN_SOURCE + && cctor_def == DOES_NOT_EXIST_IN_SOURCE); + + bool cctor_explicitly_deleted = (cctor_def == DELETED); + + if (cctor_implicitly_deleted || cctor_explicitly_deleted) + info.copy_constructible = false; + + if (dtor_def == DELETED) + info.destructible = false; + + info.trivially_destructible = is_implicit_def (dtor_def); + + info.trivially_copy_constructible + = (is_implicit_def (cctor_def) + && !is_dynamic); + + info.trivially_copyable + = (info.trivially_copy_constructible + && info.trivially_destructible + && !is_user_provided_def (mctor_def)); + /* Even if all the constructors and destructors were artificial, one of them may have invoked a non-artificial constructor or destructor in a base class. If any base class needs to be passed @@ -1318,12 +1525,39 @@ are constructed whenever this class is. We do not need to worry about recursive loops here, since we are only looking at members of complete class type. Also ignore any static members. */ - for (fieldnum = 0; fieldnum < TYPE_NFIELDS (type); fieldnum++) - if (! field_is_static (&TYPE_FIELD (type, fieldnum)) - && gnuv3_pass_by_reference (TYPE_FIELD_TYPE (type, fieldnum))) - return 1; + for (fieldnum = 0; fieldnum < type->num_fields (); fieldnum++) + if (!field_is_static (&type->field (fieldnum))) + { + struct type *field_type = type->field (fieldnum).type (); - return 0; + /* For arrays, make the decision based on the element type. */ + if (field_type->code () == TYPE_CODE_ARRAY) + field_type = check_typedef (TYPE_TARGET_TYPE (field_type)); + + struct language_pass_by_ref_info field_info + = gnuv3_pass_by_reference (field_type); + + if (!field_info.copy_constructible) + info.copy_constructible = false; + if (!field_info.destructible) + info.destructible = false; + if (!field_info.trivially_copyable) + info.trivially_copyable = false; + if (!field_info.trivially_copy_constructible) + info.trivially_copy_constructible = false; + if (!field_info.trivially_destructible) + info.trivially_destructible = false; + } + + /* Consistency check. */ + if (has_cc_attr && info.trivially_copyable != is_pass_by_value) + { + /* DWARF CC attribute is not the same as the inferred value; + use the DWARF attribute. */ + info.trivially_copyable = is_pass_by_value; + } + + return info; } static void @@ -1360,8 +1594,9 @@ gnu_v3_abi_ops.pass_by_reference = gnuv3_pass_by_reference; } +void _initialize_gnu_v3_abi (); void -_initialize_gnu_v3_abi (void) +_initialize_gnu_v3_abi () { init_gnuv3_ops (); diff -Nru gdb-9.1/gdb/go32-nat.c gdb-10.2/gdb/go32-nat.c --- gdb-9.1/gdb/go32-nat.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/go32-nat.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Native debugging support for Intel x86 running DJGPP. - Copyright (C) 1997-2020 Free Software Foundation, Inc. + Copyright (C) 1997-2021 Free Software Foundation, Inc. Written by Robert Hoehne. This file is part of GDB. @@ -507,7 +507,8 @@ } getcwd (child_cwd, sizeof (child_cwd)); /* in case it has changed */ - chdir (current_directory); + if (current_directory != NULL) + chdir (current_directory); if (a_tss.tss_irqn == 0x21) { @@ -752,14 +753,14 @@ save_npx (); #endif - inferior_ptid = ptid_t (SOME_PID); inf = current_inferior (); inferior_appeared (inf, SOME_PID); if (!target_is_pushed (this)) push_target (this); - add_thread_silent (inferior_ptid); + thread_info *thr = add_thread_silent (ptid_t (SOME_PID)); + switch_to_thread (thr); clear_proceed_status (0); insert_breakpoints (); @@ -769,8 +770,6 @@ void go32_nat_target::mourn_inferior () { - ptid_t ptid; - redir_cmdline_delete (&child_cmd); resume_signal = -1; resume_is_step = 0; @@ -786,8 +785,6 @@ the OS cleans up when the debuggee exits. */ x86_cleanup_dregs (); - ptid = inferior_ptid; - inferior_ptid = null_ptid; prog_has_started = 0; generic_mourn_inferior (); @@ -2074,14 +2071,9 @@ static struct cmd_list_element *info_dos_cmdlist = NULL; -static void -go32_info_dos_command (const char *args, int from_tty) -{ - help_list (info_dos_cmdlist, "info dos ", class_info, gdb_stdout); -} - +void _initialize_go32_nat (); void -_initialize_go32_nat (void) +_initialize_go32_nat () { x86_dr_low.set_control = go32_set_dr7; x86_dr_low.set_addr = go32_set_dr; @@ -2105,9 +2097,9 @@ /* We are always processing GCC-compiled programs. */ processing_gcc_compilation = 2; - add_prefix_cmd ("dos", class_info, go32_info_dos_command, _("\ + add_basic_prefix_cmd ("dos", class_info, _("\ Print information specific to DJGPP (aka MS-DOS) debugging."), - &info_dos_cmdlist, "info dos ", 0, &infolist); + &info_dos_cmdlist, "info dos ", 0, &infolist); add_cmd ("sysinfo", class_info, go32_sysinfo, _("\ Display information about the target system, including CPU, OS, DPMI, etc."), diff -Nru gdb-9.1/gdb/go-exp.c gdb-10.2/gdb/go-exp.c --- gdb-9.1/gdb/go-exp.c 2020-02-08 12:54:11.000000000 +0000 +++ gdb-10.2/gdb/go-exp.c 2021-04-25 04:10:37.000000000 +0000 @@ -1,8 +1,9 @@ -/* A Bison parser, made by GNU Bison 3.0.4. */ +/* A Bison parser, made by GNU Bison 3.5.1. */ /* Bison implementation for Yacc-like parsers in C - Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc. + Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2020 Free Software Foundation, + Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -40,11 +41,14 @@ define necessary library symbols; they are noted "INFRINGES ON USER NAME SPACE" below. */ +/* Undocumented macros, especially those whose name start with YY_, + are private implementation details. Do not rely on them. */ + /* Identify Bison output. */ #define YYBISON 1 /* Bison version. */ -#define YYBISON_VERSION "3.0.4" +#define YYBISON_VERSION "3.5.1" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" @@ -61,8 +65,8 @@ -/* Copy the first part of user declarations. */ -#line 52 "go-exp.y" /* yacc.c:339 */ +/* First part of user prologue. */ +#line 52 "go-exp.y" #include "defs.h" @@ -98,13 +102,26 @@ static void yyerror (const char *); -#line 102 "go-exp.c.tmp" /* yacc.c:339 */ +#line 106 "go-exp.c.tmp" +# ifndef YY_CAST +# ifdef __cplusplus +# define YY_CAST(Type, Val) static_cast<Type> (Val) +# define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast<Type> (Val) +# else +# define YY_CAST(Type, Val) ((Type) (Val)) +# define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val)) +# endif +# endif # ifndef YY_NULLPTRPTR -# if defined __cplusplus && 201103L <= __cplusplus -# define YY_NULLPTRPTR nullptr +# if defined __cplusplus +# if 201103L <= __cplusplus +# define YY_NULLPTRPTR nullptr +# else +# define YY_NULLPTRPTR 0 +# endif # else -# define YY_NULLPTRPTR 0 +# define YY_NULLPTRPTR ((void*)0) # endif # endif @@ -220,10 +237,9 @@ /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED - union YYSTYPE { -#line 93 "go-exp.y" /* yacc.c:355 */ +#line 93 "go-exp.y" LONGEST lval; struct { @@ -245,9 +261,9 @@ struct stoken_vector svec; -#line 249 "go-exp.c.tmp" /* yacc.c:355 */ -}; +#line 265 "go-exp.c.tmp" +}; typedef union YYSTYPE YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define YYSTYPE_IS_DECLARED 1 @@ -260,41 +276,89 @@ -/* Copy the second part of user declarations. */ -#line 114 "go-exp.y" /* yacc.c:358 */ +/* Second part of user prologue. */ +#line 114 "go-exp.y" /* YYSTYPE gets defined by %union. */ static int parse_number (struct parser_state *, const char *, int, int, YYSTYPE *); -#line 271 "go-exp.c.tmp" /* yacc.c:358 */ +#line 287 "go-exp.c.tmp" + #ifdef short # undef short #endif -#ifdef YYTYPE_UINT8 -typedef YYTYPE_UINT8 yytype_uint8; -#else -typedef unsigned char yytype_uint8; +/* On compilers that do not define __PTRDIFF_MAX__ etc., make sure + <limits.h> and (if available) <stdint.h> are included + so that the code can choose integer types of a good width. */ + +#ifndef __PTRDIFF_MAX__ +# include <limits.h> /* INFRINGES ON USER NAME SPACE */ +# if defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__ +# include <stdint.h> /* INFRINGES ON USER NAME SPACE */ +# define YY_STDINT_H +# endif #endif -#ifdef YYTYPE_INT8 -typedef YYTYPE_INT8 yytype_int8; +/* Narrow types that promote to a signed type and that can represent a + signed or unsigned integer of at least N bits. In tables they can + save space and decrease cache pressure. Promoting to a signed type + helps avoid bugs in integer arithmetic. */ + +#ifdef __INT_LEAST8_MAX__ +typedef __INT_LEAST8_TYPE__ yytype_int8; +#elif defined YY_STDINT_H +typedef int_least8_t yytype_int8; #else typedef signed char yytype_int8; #endif -#ifdef YYTYPE_UINT16 -typedef YYTYPE_UINT16 yytype_uint16; +#ifdef __INT_LEAST16_MAX__ +typedef __INT_LEAST16_TYPE__ yytype_int16; +#elif defined YY_STDINT_H +typedef int_least16_t yytype_int16; +#else +typedef short yytype_int16; +#endif + +#if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__ +typedef __UINT_LEAST8_TYPE__ yytype_uint8; +#elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \ + && UINT_LEAST8_MAX <= INT_MAX) +typedef uint_least8_t yytype_uint8; +#elif !defined __UINT_LEAST8_MAX__ && UCHAR_MAX <= INT_MAX +typedef unsigned char yytype_uint8; #else -typedef unsigned short int yytype_uint16; +typedef short yytype_uint8; #endif -#ifdef YYTYPE_INT16 -typedef YYTYPE_INT16 yytype_int16; +#if defined __UINT_LEAST16_MAX__ && __UINT_LEAST16_MAX__ <= __INT_MAX__ +typedef __UINT_LEAST16_TYPE__ yytype_uint16; +#elif (!defined __UINT_LEAST16_MAX__ && defined YY_STDINT_H \ + && UINT_LEAST16_MAX <= INT_MAX) +typedef uint_least16_t yytype_uint16; +#elif !defined __UINT_LEAST16_MAX__ && USHRT_MAX <= INT_MAX +typedef unsigned short yytype_uint16; #else -typedef short int yytype_int16; +typedef int yytype_uint16; +#endif + +#ifndef YYPTRDIFF_T +# if defined __PTRDIFF_TYPE__ && defined __PTRDIFF_MAX__ +# define YYPTRDIFF_T __PTRDIFF_TYPE__ +# define YYPTRDIFF_MAXIMUM __PTRDIFF_MAX__ +# elif defined PTRDIFF_MAX +# ifndef ptrdiff_t +# include <stddef.h> /* INFRINGES ON USER NAME SPACE */ +# endif +# define YYPTRDIFF_T ptrdiff_t +# define YYPTRDIFF_MAXIMUM PTRDIFF_MAX +# else +# define YYPTRDIFF_T long +# define YYPTRDIFF_MAXIMUM LONG_MAX +# endif #endif #ifndef YYSIZE_T @@ -302,15 +366,27 @@ # define YYSIZE_T __SIZE_TYPE__ # elif defined size_t # define YYSIZE_T size_t -# elif ! defined YYSIZE_T +# elif defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__ # include <stddef.h> /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # else -# define YYSIZE_T unsigned int +# define YYSIZE_T unsigned # endif #endif -#define YYSIZE_MAXIMUM ((YYSIZE_T) -1) +#define YYSIZE_MAXIMUM \ + YY_CAST (YYPTRDIFF_T, \ + (YYPTRDIFF_MAXIMUM < YY_CAST (YYSIZE_T, -1) \ + ? YYPTRDIFF_MAXIMUM \ + : YY_CAST (YYSIZE_T, -1))) + +#define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X)) + +/* Stored state numbers (used for stacks). */ +typedef yytype_int8 yy_state_t; + +/* State numbers in computations. */ +typedef int yy_state_fast_t; #ifndef YY_ # if defined YYENABLE_NLS && YYENABLE_NLS @@ -324,30 +400,19 @@ # endif #endif -#ifndef YY_ATTRIBUTE -# if (defined __GNUC__ \ - && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__))) \ - || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C -# define YY_ATTRIBUTE(Spec) __attribute__(Spec) +#ifndef YY_ATTRIBUTE_PURE +# if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__) +# define YY_ATTRIBUTE_PURE __attribute__ ((__pure__)) # else -# define YY_ATTRIBUTE(Spec) /* empty */ +# define YY_ATTRIBUTE_PURE # endif #endif -#ifndef YY_ATTRIBUTE_PURE -# define YY_ATTRIBUTE_PURE YY_ATTRIBUTE ((__pure__)) -#endif - #ifndef YY_ATTRIBUTE_UNUSED -# define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__)) -#endif - -#if !defined _Noreturn \ - && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112) -# if defined _MSC_VER && 1200 <= _MSC_VER -# define _Noreturn __declspec (noreturn) +# if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__) +# define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__)) # else -# define _Noreturn YY_ATTRIBUTE ((__noreturn__)) +# define YY_ATTRIBUTE_UNUSED # endif #endif @@ -358,13 +423,13 @@ # define YYUSE(E) /* empty */ #endif -#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ +#if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ /* Suppress an incorrect diagnostic about yylval being uninitialized. */ -# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ - _Pragma ("GCC diagnostic push") \ - _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\ +# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ + _Pragma ("GCC diagnostic push") \ + _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \ _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") -# define YY_IGNORE_MAYBE_UNINITIALIZED_END \ +# define YY_IGNORE_MAYBE_UNINITIALIZED_END \ _Pragma ("GCC diagnostic pop") #else # define YY_INITIAL_VALUE(Value) Value @@ -377,6 +442,20 @@ # define YY_INITIAL_VALUE(Value) /* Nothing. */ #endif +#if defined __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__ +# define YY_IGNORE_USELESS_CAST_BEGIN \ + _Pragma ("GCC diagnostic push") \ + _Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"") +# define YY_IGNORE_USELESS_CAST_END \ + _Pragma ("GCC diagnostic pop") +#endif +#ifndef YY_IGNORE_USELESS_CAST_BEGIN +# define YY_IGNORE_USELESS_CAST_BEGIN +# define YY_IGNORE_USELESS_CAST_END +#endif + + +#define YY_ASSERT(E) ((void) (0 && (E))) #if ! defined yyoverflow || YYERROR_VERBOSE @@ -452,17 +531,17 @@ /* A type that is properly aligned for any stack member. */ union yyalloc { - yytype_int16 yyss_alloc; + yy_state_t yyss_alloc; YYSTYPE yyvs_alloc; }; /* The size of the maximum gap between one aligned stack and the next. */ -# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) +# define YYSTACK_GAP_MAXIMUM (YYSIZEOF (union yyalloc) - 1) /* The size of an array large to enough to hold all stacks, each with N elements. */ # define YYSTACK_BYTES(N) \ - ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ + ((N) * (YYSIZEOF (yy_state_t) + YYSIZEOF (YYSTYPE)) \ + YYSTACK_GAP_MAXIMUM) # define YYCOPY_NEEDED 1 @@ -475,11 +554,11 @@ # define YYSTACK_RELOCATE(Stack_alloc, Stack) \ do \ { \ - YYSIZE_T yynewbytes; \ + YYPTRDIFF_T yynewbytes; \ YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ Stack = &yyptr->Stack_alloc; \ - yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ - yyptr += yynewbytes / sizeof (*yyptr); \ + yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \ + yyptr += yynewbytes / YYSIZEOF (*yyptr); \ } \ while (0) @@ -491,12 +570,12 @@ # ifndef YYCOPY # if defined __GNUC__ && 1 < __GNUC__ # define YYCOPY(Dst, Src, Count) \ - __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src))) + __builtin_memcpy (Dst, Src, YY_CAST (YYSIZE_T, (Count)) * sizeof (*(Src))) # else # define YYCOPY(Dst, Src, Count) \ do \ { \ - YYSIZE_T yyi; \ + YYPTRDIFF_T yyi; \ for (yyi = 0; yyi < (Count); yyi++) \ (Dst)[yyi] = (Src)[yyi]; \ } \ @@ -519,17 +598,18 @@ /* YYNSTATES -- Number of states. */ #define YYNSTATES 122 -/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned - by yylex, with out-of-bounds checking. */ #define YYUNDEFTOK 2 #define YYMAXUTOK 299 + +/* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM + as returned by yylex, with out-of-bounds checking. */ #define YYTRANSLATE(YYX) \ - ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) + (0 <= (YYX) && (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) /* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM - as returned by yylex, without out-of-bounds checking. */ -static const yytype_uint8 yytranslate[] = + as returned by yylex. */ +static const yytype_int8 yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -565,7 +645,7 @@ #if YYDEBUG /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ -static const yytype_uint16 yyrline[] = +static const yytype_int16 yyrline[] = { 0, 191, 191, 192, 195, 202, 203, 208, 212, 216, 220, 224, 228, 232, 236, 242, 248, 255, 265, 272, @@ -601,7 +681,7 @@ # ifdef YYPRINT /* YYTOKNUM[NUM] -- (External) token number corresponding to the (internal) symbol number NUM (which must be that of a token). */ -static const yytype_uint16 yytoknum[] = +static const yytype_int16 yytoknum[] = { 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, @@ -613,14 +693,14 @@ }; # endif -#define YYPACT_NINF -42 +#define YYPACT_NINF (-42) -#define yypact_value_is_default(Yystate) \ - (!!((Yystate) == (-42))) +#define yypact_value_is_default(Yyn) \ + ((Yyn) == YYPACT_NINF) -#define YYTABLE_NINF -1 +#define YYTABLE_NINF (-1) -#define yytable_value_is_error(Yytable_value) \ +#define yytable_value_is_error(Yyn) \ 0 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing @@ -645,7 +725,7 @@ /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. Performed when YYTABLE does not specify something else to do. Zero means the default is an error. */ -static const yytype_uint8 yydefact[] = +static const yytype_int8 yydefact[] = { 0, 51, 54, 59, 52, 69, 67, 53, 62, 63, 0, 68, 56, 0, 0, 0, 0, 0, 0, 0, @@ -679,7 +759,7 @@ /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule whose number is the opposite. If YYTABLE_NINF, syntax error. */ -static const yytype_uint8 yytable[] = +static const yytype_int8 yytable[] = { 31, 33, 34, 35, 36, 5, 39, 100, 58, 59, 60, 61, 62, 63, 38, 64, 65, 74, 66, 67, @@ -781,7 +861,7 @@ /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ -static const yytype_uint8 yystos[] = +static const yytype_int8 yystos[] = { 0, 3, 4, 6, 7, 8, 9, 11, 12, 13, 18, 28, 29, 38, 39, 50, 51, 52, 61, 62, @@ -799,7 +879,7 @@ }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ -static const yytype_uint8 yyr1[] = +static const yytype_int8 yyr1[] = { 0, 68, 69, 69, 70, 71, 71, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 73, @@ -811,7 +891,7 @@ }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ -static const yytype_uint8 yyr2[] = +static const yytype_int8 yyr2[] = { 0, 2, 1, 1, 1, 1, 3, 2, 2, 2, 2, 2, 2, 2, 2, 3, 4, 3, 4, 0, @@ -835,22 +915,22 @@ #define YYRECOVERING() (!!yyerrstatus) -#define YYBACKUP(Token, Value) \ -do \ - if (yychar == YYEMPTY) \ - { \ - yychar = (Token); \ - yylval = (Value); \ - YYPOPSTACK (yylen); \ - yystate = *yyssp; \ - goto yybackup; \ - } \ - else \ - { \ - yyerror (YY_("syntax error: cannot back up")); \ - YYERROR; \ - } \ -while (0) +#define YYBACKUP(Token, Value) \ + do \ + if (yychar == YYEMPTY) \ + { \ + yychar = (Token); \ + yylval = (Value); \ + YYPOPSTACK (yylen); \ + yystate = *yyssp; \ + goto yybackup; \ + } \ + else \ + { \ + yyerror (YY_("syntax error: cannot back up")); \ + YYERROR; \ + } \ + while (0) /* Error token number */ #define YYTERROR 1 @@ -890,37 +970,39 @@ } while (0) -/*----------------------------------------. -| Print this symbol's value on YYOUTPUT. | -`----------------------------------------*/ +/*-----------------------------------. +| Print this symbol's value on YYO. | +`-----------------------------------*/ static void -yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) +yy_symbol_value_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep) { - FILE *yyo = yyoutput; - YYUSE (yyo); + FILE *yyoutput = yyo; + YYUSE (yyoutput); if (!yyvaluep) return; # ifdef YYPRINT if (yytype < YYNTOKENS) - YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); + YYPRINT (yyo, yytoknum[yytype], *yyvaluep); # endif + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN YYUSE (yytype); + YY_IGNORE_MAYBE_UNINITIALIZED_END } -/*--------------------------------. -| Print this symbol on YYOUTPUT. | -`--------------------------------*/ +/*---------------------------. +| Print this symbol on YYO. | +`---------------------------*/ static void -yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) +yy_symbol_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep) { - YYFPRINTF (yyoutput, "%s %s (", + YYFPRINTF (yyo, "%s %s (", yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]); - yy_symbol_value_print (yyoutput, yytype, yyvaluep); - YYFPRINTF (yyoutput, ")"); + yy_symbol_value_print (yyo, yytype, yyvaluep); + YYFPRINTF (yyo, ")"); } /*------------------------------------------------------------------. @@ -929,7 +1011,7 @@ `------------------------------------------------------------------*/ static void -yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop) +yy_stack_print (yy_state_t *yybottom, yy_state_t *yytop) { YYFPRINTF (stderr, "Stack now"); for (; yybottom <= yytop; yybottom++) @@ -952,20 +1034,20 @@ `------------------------------------------------*/ static void -yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule) +yy_reduce_print (yy_state_t *yyssp, YYSTYPE *yyvsp, int yyrule) { - unsigned long int yylno = yyrline[yyrule]; + int yylno = yyrline[yyrule]; int yynrhs = yyr2[yyrule]; int yyi; - YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", + YYFPRINTF (stderr, "Reducing stack by rule %d (line %d):\n", yyrule - 1, yylno); /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { YYFPRINTF (stderr, " $%d = ", yyi + 1); yy_symbol_print (stderr, - yystos[yyssp[yyi + 1 - yynrhs]], - &(yyvsp[(yyi + 1) - (yynrhs)]) + yystos[+yyssp[yyi + 1 - yynrhs]], + &yyvsp[(yyi + 1) - (yynrhs)] ); YYFPRINTF (stderr, "\n"); } @@ -1009,13 +1091,13 @@ # ifndef yystrlen # if defined __GLIBC__ && defined _STRING_H -# define yystrlen strlen +# define yystrlen(S) (YY_CAST (YYPTRDIFF_T, strlen (S))) # else /* Return the length of YYSTR. */ -static YYSIZE_T +static YYPTRDIFF_T yystrlen (const char *yystr) { - YYSIZE_T yylen; + YYPTRDIFF_T yylen; for (yylen = 0; yystr[yylen]; yylen++) continue; return yylen; @@ -1051,12 +1133,12 @@ backslash-backslash). YYSTR is taken from yytname. If YYRES is null, do not copy; instead, return the length of what the result would have been. */ -static YYSIZE_T +static YYPTRDIFF_T yytnamerr (char *yyres, const char *yystr) { if (*yystr == '"') { - YYSIZE_T yyn = 0; + YYPTRDIFF_T yyn = 0; char const *yyp = yystr; for (;;) @@ -1069,7 +1151,10 @@ case '\\': if (*++yyp != '\\') goto do_not_strip_quotes; - /* Fall through. */ + else + goto append; + + append: default: if (yyres) yyres[yyn] = *yyp; @@ -1084,10 +1169,10 @@ do_not_strip_quotes: ; } - if (! yyres) + if (yyres) + return yystpcpy (yyres, yystr) - yyres; + else return yystrlen (yystr); - - return yystpcpy (yyres, yystr) - yyres; } # endif @@ -1100,19 +1185,19 @@ *YYMSG_ALLOC to the required number of bytes. Return 2 if the required number of bytes is too large to store. */ static int -yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, - yytype_int16 *yyssp, int yytoken) +yysyntax_error (YYPTRDIFF_T *yymsg_alloc, char **yymsg, + yy_state_t *yyssp, int yytoken) { - YYSIZE_T yysize0 = yytnamerr (YY_NULLPTRPTR, yytname[yytoken]); - YYSIZE_T yysize = yysize0; enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; /* Internationalized format string. */ const char *yyformat = YY_NULLPTRPTR; - /* Arguments of yyformat. */ + /* Arguments of yyformat: reported tokens (one for the "unexpected", + one per "expected"). */ char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; - /* Number of reported tokens (one for the "unexpected", one per - "expected"). */ + /* Actual size of YYARG. */ int yycount = 0; + /* Cumulated lengths of YYARG. */ + YYPTRDIFF_T yysize = 0; /* There are many possibilities here to consider: - If this state is a consistent state with a default action, then @@ -1139,7 +1224,9 @@ */ if (yytoken != YYEMPTY) { - int yyn = yypact[*yyssp]; + int yyn = yypact[+*yyssp]; + YYPTRDIFF_T yysize0 = yytnamerr (YY_NULLPTRPTR, yytname[yytoken]); + yysize = yysize0; yyarg[yycount++] = yytname[yytoken]; if (!yypact_value_is_default (yyn)) { @@ -1164,11 +1251,12 @@ } yyarg[yycount++] = yytname[yyx]; { - YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTRPTR, yytname[yyx]); - if (! (yysize <= yysize1 - && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) + YYPTRDIFF_T yysize1 + = yysize + yytnamerr (YY_NULLPTRPTR, yytname[yyx]); + if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM) + yysize = yysize1; + else return 2; - yysize = yysize1; } } } @@ -1180,6 +1268,7 @@ case N: \ yyformat = S; \ break + default: /* Avoid compiler warnings. */ YYCASE_(0, YY_("syntax error")); YYCASE_(1, YY_("syntax error, unexpected %s")); YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); @@ -1190,10 +1279,13 @@ } { - YYSIZE_T yysize1 = yysize + yystrlen (yyformat); - if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) + /* Don't count the "%s"s in the final size, but reserve room for + the terminator. */ + YYPTRDIFF_T yysize1 = yysize + (yystrlen (yyformat) - 2 * yycount) + 1; + if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM) + yysize = yysize1; + else return 2; - yysize = yysize1; } if (*yymsg_alloc < yysize) @@ -1219,8 +1311,8 @@ } else { - yyp++; - yyformat++; + ++yyp; + ++yyformat; } } return 0; @@ -1263,7 +1355,7 @@ int yyparse (void) { - int yystate; + yy_state_fast_t yystate; /* Number of tokens to shift before error messages enabled. */ int yyerrstatus; @@ -1275,16 +1367,16 @@ to xreallocate them elsewhere. */ /* The state stack. */ - yytype_int16 yyssa[YYINITDEPTH]; - yytype_int16 *yyss; - yytype_int16 *yyssp; + yy_state_t yyssa[YYINITDEPTH]; + yy_state_t *yyss; + yy_state_t *yyssp; /* The semantic value stack. */ YYSTYPE yyvsa[YYINITDEPTH]; YYSTYPE *yyvs; YYSTYPE *yyvsp; - YYSIZE_T yystacksize; + YYPTRDIFF_T yystacksize; int yyn; int yyresult; @@ -1298,7 +1390,7 @@ /* Buffer for error messages, and its allocated size. */ char yymsgbuf[128]; char *yymsg = yymsgbuf; - YYSIZE_T yymsg_alloc = sizeof yymsgbuf; + YYPTRDIFF_T yymsg_alloc = sizeof yymsgbuf; #endif #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) @@ -1319,46 +1411,54 @@ yychar = YYEMPTY; /* Cause a token to be read. */ goto yysetstate; + /*------------------------------------------------------------. -| yynewstate -- Push a new state, which is found in yystate. | +| yynewstate -- push a new state, which is found in yystate. | `------------------------------------------------------------*/ - yynewstate: +yynewstate: /* In all cases, when you get here, the value and location stacks have just been pushed. So pushing a state here evens the stacks. */ yyssp++; - yysetstate: - *yyssp = yystate; + +/*--------------------------------------------------------------------. +| yysetstate -- set current state (the top of the stack) to yystate. | +`--------------------------------------------------------------------*/ +yysetstate: + YYDPRINTF ((stderr, "Entering state %d\n", yystate)); + YY_ASSERT (0 <= yystate && yystate < YYNSTATES); + YY_IGNORE_USELESS_CAST_BEGIN + *yyssp = YY_CAST (yy_state_t, yystate); + YY_IGNORE_USELESS_CAST_END if (yyss + yystacksize - 1 <= yyssp) +#if !defined yyoverflow && !defined YYSTACK_RELOCATE + goto yyexhaustedlab; +#else { /* Get the current used size of the three stacks, in elements. */ - YYSIZE_T yysize = yyssp - yyss + 1; + YYPTRDIFF_T yysize = yyssp - yyss + 1; -#ifdef yyoverflow +# if defined yyoverflow { /* Give user a chance to xreallocate the stack. Use copies of these so that the &'s don't force the real ones into memory. */ + yy_state_t *yyss1 = yyss; YYSTYPE *yyvs1 = yyvs; - yytype_int16 *yyss1 = yyss; /* Each stack pointer address is followed by the size of the data in use in that stack, in bytes. This used to be a conditional around just the two extra args, but that might be undefined if yyoverflow is a macro. */ yyoverflow (YY_("memory exhausted"), - &yyss1, yysize * sizeof (*yyssp), - &yyvs1, yysize * sizeof (*yyvsp), + &yyss1, yysize * YYSIZEOF (*yyssp), + &yyvs1, yysize * YYSIZEOF (*yyvsp), &yystacksize); - yyss = yyss1; yyvs = yyvs1; } -#else /* no yyoverflow */ -# ifndef YYSTACK_RELOCATE - goto yyexhaustedlab; -# else +# else /* defined YYSTACK_RELOCATE */ /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) goto yyexhaustedlab; @@ -1367,42 +1467,43 @@ yystacksize = YYMAXDEPTH; { - yytype_int16 *yyss1 = yyss; + yy_state_t *yyss1 = yyss; union yyalloc *yyptr = - (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); + YY_CAST (union yyalloc *, + YYSTACK_ALLOC (YY_CAST (YYSIZE_T, YYSTACK_BYTES (yystacksize)))); if (! yyptr) goto yyexhaustedlab; YYSTACK_RELOCATE (yyss_alloc, yyss); YYSTACK_RELOCATE (yyvs_alloc, yyvs); -# undef YYSTACK_RELOCATE +# undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); } # endif -#endif /* no yyoverflow */ yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; - YYDPRINTF ((stderr, "Stack size increased to %lu\n", - (unsigned long int) yystacksize)); + YY_IGNORE_USELESS_CAST_BEGIN + YYDPRINTF ((stderr, "Stack size increased to %ld\n", + YY_CAST (long, yystacksize))); + YY_IGNORE_USELESS_CAST_END if (yyss + yystacksize - 1 <= yyssp) YYABORT; } - - YYDPRINTF ((stderr, "Entering state %d\n", yystate)); +#endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */ if (yystate == YYFINAL) YYACCEPT; goto yybackup; + /*-----------. | yybackup. | `-----------*/ yybackup: - /* Do appropriate processing given the current state. Read a lookahead token if we need one and don't already have one. */ @@ -1452,15 +1553,13 @@ /* Shift the lookahead token. */ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); - - /* Discard the shifted token. */ - yychar = YYEMPTY; - yystate = yyn; YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; YY_IGNORE_MAYBE_UNINITIALIZED_END + /* Discard the shifted token. */ + yychar = YYEMPTY; goto yynewstate; @@ -1475,7 +1574,7 @@ /*-----------------------------. -| yyreduce -- Do a reduction. | +| yyreduce -- do a reduction. | `-----------------------------*/ yyreduce: /* yyn is the number of a rule to reduce with. */ @@ -1495,321 +1594,321 @@ YY_REDUCE_PRINT (yyn); switch (yyn) { - case 4: -#line 196 "go-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, OP_TYPE); + case 4: +#line 196 "go-exp.y" + { write_exp_elt_opcode (pstate, OP_TYPE); write_exp_elt_type (pstate, (yyvsp[0].tval)); write_exp_elt_opcode (pstate, OP_TYPE); } -#line 1505 "go-exp.c.tmp" /* yacc.c:1646 */ +#line 1604 "go-exp.c.tmp" break; case 6: -#line 204 "go-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_COMMA); } -#line 1511 "go-exp.c.tmp" /* yacc.c:1646 */ +#line 204 "go-exp.y" + { write_exp_elt_opcode (pstate, BINOP_COMMA); } +#line 1610 "go-exp.c.tmp" break; case 7: -#line 209 "go-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_IND); } -#line 1517 "go-exp.c.tmp" /* yacc.c:1646 */ +#line 209 "go-exp.y" + { write_exp_elt_opcode (pstate, UNOP_IND); } +#line 1616 "go-exp.c.tmp" break; case 8: -#line 213 "go-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_ADDR); } -#line 1523 "go-exp.c.tmp" /* yacc.c:1646 */ +#line 213 "go-exp.y" + { write_exp_elt_opcode (pstate, UNOP_ADDR); } +#line 1622 "go-exp.c.tmp" break; case 9: -#line 217 "go-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_NEG); } -#line 1529 "go-exp.c.tmp" /* yacc.c:1646 */ +#line 217 "go-exp.y" + { write_exp_elt_opcode (pstate, UNOP_NEG); } +#line 1628 "go-exp.c.tmp" break; case 10: -#line 221 "go-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_PLUS); } -#line 1535 "go-exp.c.tmp" /* yacc.c:1646 */ +#line 221 "go-exp.y" + { write_exp_elt_opcode (pstate, UNOP_PLUS); } +#line 1634 "go-exp.c.tmp" break; case 11: -#line 225 "go-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_LOGICAL_NOT); } -#line 1541 "go-exp.c.tmp" /* yacc.c:1646 */ +#line 225 "go-exp.y" + { write_exp_elt_opcode (pstate, UNOP_LOGICAL_NOT); } +#line 1640 "go-exp.c.tmp" break; case 12: -#line 229 "go-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_COMPLEMENT); } -#line 1547 "go-exp.c.tmp" /* yacc.c:1646 */ +#line 229 "go-exp.y" + { write_exp_elt_opcode (pstate, UNOP_COMPLEMENT); } +#line 1646 "go-exp.c.tmp" break; case 13: -#line 233 "go-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_POSTINCREMENT); } -#line 1553 "go-exp.c.tmp" /* yacc.c:1646 */ +#line 233 "go-exp.y" + { write_exp_elt_opcode (pstate, UNOP_POSTINCREMENT); } +#line 1652 "go-exp.c.tmp" break; case 14: -#line 237 "go-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_POSTDECREMENT); } -#line 1559 "go-exp.c.tmp" /* yacc.c:1646 */ +#line 237 "go-exp.y" + { write_exp_elt_opcode (pstate, UNOP_POSTDECREMENT); } +#line 1658 "go-exp.c.tmp" break; case 15: -#line 243 "go-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); +#line 243 "go-exp.y" + { write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); write_exp_string (pstate, (yyvsp[0].ssym).stoken); write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); } -#line 1567 "go-exp.c.tmp" /* yacc.c:1646 */ +#line 1666 "go-exp.c.tmp" break; case 16: -#line 249 "go-exp.y" /* yacc.c:1646 */ - { pstate->mark_struct_expression (); +#line 249 "go-exp.y" + { pstate->mark_struct_expression (); write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); write_exp_string (pstate, (yyvsp[-1].ssym).stoken); write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); } -#line 1576 "go-exp.c.tmp" /* yacc.c:1646 */ +#line 1675 "go-exp.c.tmp" break; case 17: -#line 256 "go-exp.y" /* yacc.c:1646 */ - { struct stoken s; +#line 256 "go-exp.y" + { struct stoken s; pstate->mark_struct_expression (); write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); s.ptr = ""; s.length = 0; write_exp_string (pstate, s); write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); } -#line 1588 "go-exp.c.tmp" /* yacc.c:1646 */ +#line 1687 "go-exp.c.tmp" break; case 18: -#line 266 "go-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_SUBSCRIPT); } -#line 1594 "go-exp.c.tmp" /* yacc.c:1646 */ +#line 266 "go-exp.y" + { write_exp_elt_opcode (pstate, BINOP_SUBSCRIPT); } +#line 1693 "go-exp.c.tmp" break; case 19: -#line 272 "go-exp.y" /* yacc.c:1646 */ - { pstate->start_arglist (); } -#line 1600 "go-exp.c.tmp" /* yacc.c:1646 */ +#line 272 "go-exp.y" + { pstate->start_arglist (); } +#line 1699 "go-exp.c.tmp" break; case 20: -#line 274 "go-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, OP_FUNCALL); +#line 274 "go-exp.y" + { write_exp_elt_opcode (pstate, OP_FUNCALL); write_exp_elt_longcst (pstate, pstate->end_arglist ()); write_exp_elt_opcode (pstate, OP_FUNCALL); } -#line 1609 "go-exp.c.tmp" /* yacc.c:1646 */ +#line 1708 "go-exp.c.tmp" break; case 21: -#line 281 "go-exp.y" /* yacc.c:1646 */ - { pstate->start_arglist (); } -#line 1615 "go-exp.c.tmp" /* yacc.c:1646 */ +#line 281 "go-exp.y" + { pstate->start_arglist (); } +#line 1714 "go-exp.c.tmp" break; case 23: -#line 288 "go-exp.y" /* yacc.c:1646 */ - { pstate->arglist_len = 1; } -#line 1621 "go-exp.c.tmp" /* yacc.c:1646 */ +#line 288 "go-exp.y" + { pstate->arglist_len = 1; } +#line 1720 "go-exp.c.tmp" break; case 24: -#line 292 "go-exp.y" /* yacc.c:1646 */ - { pstate->arglist_len++; } -#line 1627 "go-exp.c.tmp" /* yacc.c:1646 */ +#line 292 "go-exp.y" + { pstate->arglist_len++; } +#line 1726 "go-exp.c.tmp" break; case 25: -#line 296 "go-exp.y" /* yacc.c:1646 */ - { (yyval.lval) = pstate->end_arglist () - 1; } -#line 1633 "go-exp.c.tmp" /* yacc.c:1646 */ +#line 296 "go-exp.y" + { (yyval.lval) = pstate->end_arglist () - 1; } +#line 1732 "go-exp.c.tmp" break; case 26: -#line 300 "go-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_MEMVAL); +#line 300 "go-exp.y" + { write_exp_elt_opcode (pstate, UNOP_MEMVAL); write_exp_elt_type (pstate, (yyvsp[-2].tval)); write_exp_elt_opcode (pstate, UNOP_MEMVAL); } -#line 1641 "go-exp.c.tmp" /* yacc.c:1646 */ +#line 1740 "go-exp.c.tmp" break; case 27: -#line 306 "go-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_CAST); +#line 306 "go-exp.y" + { write_exp_elt_opcode (pstate, UNOP_CAST); write_exp_elt_type (pstate, (yyvsp[-3].tval)); write_exp_elt_opcode (pstate, UNOP_CAST); } -#line 1649 "go-exp.c.tmp" /* yacc.c:1646 */ +#line 1748 "go-exp.c.tmp" break; case 28: -#line 312 "go-exp.y" /* yacc.c:1646 */ - { } -#line 1655 "go-exp.c.tmp" /* yacc.c:1646 */ +#line 312 "go-exp.y" + { } +#line 1754 "go-exp.c.tmp" break; case 29: -#line 318 "go-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_REPEAT); } -#line 1661 "go-exp.c.tmp" /* yacc.c:1646 */ +#line 318 "go-exp.y" + { write_exp_elt_opcode (pstate, BINOP_REPEAT); } +#line 1760 "go-exp.c.tmp" break; case 30: -#line 322 "go-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_MUL); } -#line 1667 "go-exp.c.tmp" /* yacc.c:1646 */ +#line 322 "go-exp.y" + { write_exp_elt_opcode (pstate, BINOP_MUL); } +#line 1766 "go-exp.c.tmp" break; case 31: -#line 326 "go-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_DIV); } -#line 1673 "go-exp.c.tmp" /* yacc.c:1646 */ +#line 326 "go-exp.y" + { write_exp_elt_opcode (pstate, BINOP_DIV); } +#line 1772 "go-exp.c.tmp" break; case 32: -#line 330 "go-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_REM); } -#line 1679 "go-exp.c.tmp" /* yacc.c:1646 */ +#line 330 "go-exp.y" + { write_exp_elt_opcode (pstate, BINOP_REM); } +#line 1778 "go-exp.c.tmp" break; case 33: -#line 334 "go-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_ADD); } -#line 1685 "go-exp.c.tmp" /* yacc.c:1646 */ +#line 334 "go-exp.y" + { write_exp_elt_opcode (pstate, BINOP_ADD); } +#line 1784 "go-exp.c.tmp" break; case 34: -#line 338 "go-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_SUB); } -#line 1691 "go-exp.c.tmp" /* yacc.c:1646 */ +#line 338 "go-exp.y" + { write_exp_elt_opcode (pstate, BINOP_SUB); } +#line 1790 "go-exp.c.tmp" break; case 35: -#line 342 "go-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_LSH); } -#line 1697 "go-exp.c.tmp" /* yacc.c:1646 */ +#line 342 "go-exp.y" + { write_exp_elt_opcode (pstate, BINOP_LSH); } +#line 1796 "go-exp.c.tmp" break; case 36: -#line 346 "go-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_RSH); } -#line 1703 "go-exp.c.tmp" /* yacc.c:1646 */ +#line 346 "go-exp.y" + { write_exp_elt_opcode (pstate, BINOP_RSH); } +#line 1802 "go-exp.c.tmp" break; case 37: -#line 350 "go-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_EQUAL); } -#line 1709 "go-exp.c.tmp" /* yacc.c:1646 */ +#line 350 "go-exp.y" + { write_exp_elt_opcode (pstate, BINOP_EQUAL); } +#line 1808 "go-exp.c.tmp" break; case 38: -#line 354 "go-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_NOTEQUAL); } -#line 1715 "go-exp.c.tmp" /* yacc.c:1646 */ +#line 354 "go-exp.y" + { write_exp_elt_opcode (pstate, BINOP_NOTEQUAL); } +#line 1814 "go-exp.c.tmp" break; case 39: -#line 358 "go-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_LEQ); } -#line 1721 "go-exp.c.tmp" /* yacc.c:1646 */ +#line 358 "go-exp.y" + { write_exp_elt_opcode (pstate, BINOP_LEQ); } +#line 1820 "go-exp.c.tmp" break; case 40: -#line 362 "go-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_GEQ); } -#line 1727 "go-exp.c.tmp" /* yacc.c:1646 */ +#line 362 "go-exp.y" + { write_exp_elt_opcode (pstate, BINOP_GEQ); } +#line 1826 "go-exp.c.tmp" break; case 41: -#line 366 "go-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_LESS); } -#line 1733 "go-exp.c.tmp" /* yacc.c:1646 */ +#line 366 "go-exp.y" + { write_exp_elt_opcode (pstate, BINOP_LESS); } +#line 1832 "go-exp.c.tmp" break; case 42: -#line 370 "go-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_GTR); } -#line 1739 "go-exp.c.tmp" /* yacc.c:1646 */ +#line 370 "go-exp.y" + { write_exp_elt_opcode (pstate, BINOP_GTR); } +#line 1838 "go-exp.c.tmp" break; case 43: -#line 374 "go-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_BITWISE_AND); } -#line 1745 "go-exp.c.tmp" /* yacc.c:1646 */ +#line 374 "go-exp.y" + { write_exp_elt_opcode (pstate, BINOP_BITWISE_AND); } +#line 1844 "go-exp.c.tmp" break; case 44: -#line 378 "go-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_BITWISE_XOR); } -#line 1751 "go-exp.c.tmp" /* yacc.c:1646 */ +#line 378 "go-exp.y" + { write_exp_elt_opcode (pstate, BINOP_BITWISE_XOR); } +#line 1850 "go-exp.c.tmp" break; case 45: -#line 382 "go-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_BITWISE_IOR); } -#line 1757 "go-exp.c.tmp" /* yacc.c:1646 */ +#line 382 "go-exp.y" + { write_exp_elt_opcode (pstate, BINOP_BITWISE_IOR); } +#line 1856 "go-exp.c.tmp" break; case 46: -#line 386 "go-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_LOGICAL_AND); } -#line 1763 "go-exp.c.tmp" /* yacc.c:1646 */ +#line 386 "go-exp.y" + { write_exp_elt_opcode (pstate, BINOP_LOGICAL_AND); } +#line 1862 "go-exp.c.tmp" break; case 47: -#line 390 "go-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_LOGICAL_OR); } -#line 1769 "go-exp.c.tmp" /* yacc.c:1646 */ +#line 390 "go-exp.y" + { write_exp_elt_opcode (pstate, BINOP_LOGICAL_OR); } +#line 1868 "go-exp.c.tmp" break; case 48: -#line 394 "go-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, TERNOP_COND); } -#line 1775 "go-exp.c.tmp" /* yacc.c:1646 */ +#line 394 "go-exp.y" + { write_exp_elt_opcode (pstate, TERNOP_COND); } +#line 1874 "go-exp.c.tmp" break; case 49: -#line 398 "go-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_ASSIGN); } -#line 1781 "go-exp.c.tmp" /* yacc.c:1646 */ +#line 398 "go-exp.y" + { write_exp_elt_opcode (pstate, BINOP_ASSIGN); } +#line 1880 "go-exp.c.tmp" break; case 50: -#line 402 "go-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_ASSIGN_MODIFY); +#line 402 "go-exp.y" + { write_exp_elt_opcode (pstate, BINOP_ASSIGN_MODIFY); write_exp_elt_opcode (pstate, (yyvsp[-1].opcode)); write_exp_elt_opcode (pstate, BINOP_ASSIGN_MODIFY); } -#line 1789 "go-exp.c.tmp" /* yacc.c:1646 */ +#line 1888 "go-exp.c.tmp" break; case 51: -#line 408 "go-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, OP_LONG); +#line 408 "go-exp.y" + { write_exp_elt_opcode (pstate, OP_LONG); write_exp_elt_type (pstate, (yyvsp[0].typed_val_int).type); write_exp_elt_longcst (pstate, (LONGEST)((yyvsp[0].typed_val_int).val)); write_exp_elt_opcode (pstate, OP_LONG); } -#line 1798 "go-exp.c.tmp" /* yacc.c:1646 */ +#line 1897 "go-exp.c.tmp" break; case 52: -#line 415 "go-exp.y" /* yacc.c:1646 */ - { +#line 415 "go-exp.y" + { struct stoken_vector vec; vec.len = 1; vec.tokens = &(yyvsp[0].tsval); write_exp_string_vector (pstate, (yyvsp[0].tsval).type, &vec); } -#line 1809 "go-exp.c.tmp" /* yacc.c:1646 */ +#line 1908 "go-exp.c.tmp" break; case 53: -#line 424 "go-exp.y" /* yacc.c:1646 */ - { YYSTYPE val; +#line 424 "go-exp.y" + { YYSTYPE val; parse_number (pstate, (yyvsp[0].ssym).stoken.ptr, (yyvsp[0].ssym).stoken.length, 0, &val); write_exp_elt_opcode (pstate, OP_LONG); @@ -1818,29 +1917,29 @@ val.typed_val_int.val); write_exp_elt_opcode (pstate, OP_LONG); } -#line 1823 "go-exp.c.tmp" /* yacc.c:1646 */ +#line 1922 "go-exp.c.tmp" break; case 54: -#line 437 "go-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, OP_FLOAT); +#line 437 "go-exp.y" + { write_exp_elt_opcode (pstate, OP_FLOAT); write_exp_elt_type (pstate, (yyvsp[0].typed_val_float).type); write_exp_elt_floatcst (pstate, (yyvsp[0].typed_val_float).val); write_exp_elt_opcode (pstate, OP_FLOAT); } -#line 1832 "go-exp.c.tmp" /* yacc.c:1646 */ +#line 1931 "go-exp.c.tmp" break; case 56: -#line 447 "go-exp.y" /* yacc.c:1646 */ - { +#line 447 "go-exp.y" + { write_dollar_variable (pstate, (yyvsp[0].sval)); } -#line 1840 "go-exp.c.tmp" /* yacc.c:1646 */ +#line 1939 "go-exp.c.tmp" break; case 57: -#line 453 "go-exp.y" /* yacc.c:1646 */ - { +#line 453 "go-exp.y" + { /* TODO(dje): Go objects in structs. */ write_exp_elt_opcode (pstate, OP_LONG); /* TODO(dje): What's the right type here? */ @@ -1852,21 +1951,21 @@ (LONGEST) TYPE_LENGTH ((yyvsp[-1].tval))); write_exp_elt_opcode (pstate, OP_LONG); } -#line 1857 "go-exp.c.tmp" /* yacc.c:1646 */ +#line 1956 "go-exp.c.tmp" break; case 58: -#line 468 "go-exp.y" /* yacc.c:1646 */ - { +#line 468 "go-exp.y" + { /* TODO(dje): Go objects in structs. */ write_exp_elt_opcode (pstate, UNOP_SIZEOF); } -#line 1866 "go-exp.c.tmp" /* yacc.c:1646 */ +#line 1965 "go-exp.c.tmp" break; case 59: -#line 475 "go-exp.y" /* yacc.c:1646 */ - { +#line 475 "go-exp.y" + { /* We copy the string here, and not in the lexer, to guarantee that we do not leak a string. */ @@ -1881,12 +1980,12 @@ vec->ptr = (char *) xmalloc ((yyvsp[0].tsval).length + 1); memcpy (vec->ptr, (yyvsp[0].tsval).ptr, (yyvsp[0].tsval).length + 1); } -#line 1886 "go-exp.c.tmp" /* yacc.c:1646 */ +#line 1985 "go-exp.c.tmp" break; case 60: -#line 492 "go-exp.y" /* yacc.c:1646 */ - { +#line 492 "go-exp.y" + { /* Note that we NUL-terminate here, but just for convenience. */ char *p; @@ -1901,12 +2000,12 @@ (yyval.svec).tokens[(yyval.svec).len - 1].length = (yyvsp[0].tsval).length; (yyval.svec).tokens[(yyval.svec).len - 1].ptr = p; } -#line 1906 "go-exp.c.tmp" /* yacc.c:1646 */ +#line 2005 "go-exp.c.tmp" break; case 61: -#line 510 "go-exp.y" /* yacc.c:1646 */ - { +#line 510 "go-exp.y" + { int i; write_exp_string_vector (pstate, 0 /*always utf8*/, @@ -1915,28 +2014,28 @@ xfree ((yyvsp[0].svec).tokens[i].ptr); xfree ((yyvsp[0].svec).tokens); } -#line 1920 "go-exp.c.tmp" /* yacc.c:1646 */ +#line 2019 "go-exp.c.tmp" break; case 62: -#line 522 "go-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, OP_BOOL); +#line 522 "go-exp.y" + { write_exp_elt_opcode (pstate, OP_BOOL); write_exp_elt_longcst (pstate, (LONGEST) (yyvsp[0].lval)); write_exp_elt_opcode (pstate, OP_BOOL); } -#line 1928 "go-exp.c.tmp" /* yacc.c:1646 */ +#line 2027 "go-exp.c.tmp" break; case 63: -#line 528 "go-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, OP_BOOL); +#line 528 "go-exp.y" + { write_exp_elt_opcode (pstate, OP_BOOL); write_exp_elt_longcst (pstate, (LONGEST) (yyvsp[0].lval)); write_exp_elt_opcode (pstate, OP_BOOL); } -#line 1936 "go-exp.c.tmp" /* yacc.c:1646 */ +#line 2035 "go-exp.c.tmp" break; case 64: -#line 534 "go-exp.y" /* yacc.c:1646 */ - { struct symbol *sym = (yyvsp[-1].ssym).sym.symbol; +#line 534 "go-exp.y" + { struct symbol *sym = (yyvsp[-1].ssym).sym.symbol; if (sym == NULL || !SYMBOL_IS_ARGUMENT (sym) @@ -1949,12 +2048,12 @@ write_exp_elt_sym (pstate, sym); write_exp_elt_opcode (pstate, OP_VAR_ENTRY_VALUE); } -#line 1954 "go-exp.c.tmp" /* yacc.c:1646 */ +#line 2053 "go-exp.c.tmp" break; case 65: -#line 550 "go-exp.y" /* yacc.c:1646 */ - { struct block_symbol sym = (yyvsp[0].ssym).sym; +#line 550 "go-exp.y" + { struct block_symbol sym = (yyvsp[0].ssym).sym; if (sym.symbol) { @@ -1990,30 +2089,31 @@ arg.c_str ()); } } -#line 1995 "go-exp.c.tmp" /* yacc.c:1646 */ +#line 2094 "go-exp.c.tmp" break; case 66: -#line 597 "go-exp.y" /* yacc.c:1646 */ - { (yyval.tval) = lookup_pointer_type ((yyvsp[0].tval)); } -#line 2001 "go-exp.c.tmp" /* yacc.c:1646 */ +#line 597 "go-exp.y" + { (yyval.tval) = lookup_pointer_type ((yyvsp[0].tval)); } +#line 2100 "go-exp.c.tmp" break; case 67: -#line 599 "go-exp.y" /* yacc.c:1646 */ - { (yyval.tval) = (yyvsp[0].tsym).type; } -#line 2007 "go-exp.c.tmp" /* yacc.c:1646 */ +#line 599 "go-exp.y" + { (yyval.tval) = (yyvsp[0].tsym).type; } +#line 2106 "go-exp.c.tmp" break; case 68: -#line 606 "go-exp.y" /* yacc.c:1646 */ - { (yyval.tval) = builtin_go_type (pstate->gdbarch ()) +#line 606 "go-exp.y" + { (yyval.tval) = builtin_go_type (pstate->gdbarch ()) ->builtin_uint8; } -#line 2014 "go-exp.c.tmp" /* yacc.c:1646 */ +#line 2113 "go-exp.c.tmp" break; -#line 2018 "go-exp.c.tmp" /* yacc.c:1646 */ +#line 2117 "go-exp.c.tmp" + default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -2038,14 +2138,13 @@ /* Now 'shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ - - yyn = yyr1[yyn]; - - yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; - if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) - yystate = yytable[yystate]; - else - yystate = yydefgoto[yyn - YYNTOKENS]; + { + const int yylhs = yyr1[yyn] - YYNTOKENS; + const int yyi = yypgoto[yylhs] + *yyssp; + yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp + ? yytable[yyi] + : yydefgoto[yylhs]); + } goto yynewstate; @@ -2077,7 +2176,7 @@ { if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); - yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc); + yymsg = YY_CAST (char *, YYSTACK_ALLOC (YY_CAST (YYSIZE_T, yymsg_alloc))); if (!yymsg) { yymsg = yymsgbuf; @@ -2128,12 +2227,10 @@ | yyerrorlab -- error raised explicitly by YYERROR. | `---------------------------------------------------*/ yyerrorlab: - - /* Pacify compilers like GCC when the user code never invokes - YYERROR and the label yyerrorlab therefore never appears in user - code. */ - if (/*CONSTCOND*/ 0) - goto yyerrorlab; + /* Pacify compilers when the user code never invokes YYERROR and the + label yyerrorlab therefore never appears in user code. */ + if (0) + YYERROR; /* Do not reclaim the symbols of the rule whose action triggered this YYERROR. */ @@ -2195,6 +2292,7 @@ yyresult = 0; goto yyreturn; + /*-----------------------------------. | yyabortlab -- YYABORT comes here. | `-----------------------------------*/ @@ -2202,6 +2300,7 @@ yyresult = 1; goto yyreturn; + #if !defined yyoverflow || YYERROR_VERBOSE /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | @@ -2212,6 +2311,10 @@ /* Fall through. */ #endif + +/*-----------------------------------------------------. +| yyreturn -- parsing is finished, return the result. | +`-----------------------------------------------------*/ yyreturn: if (yychar != YYEMPTY) { @@ -2228,7 +2331,7 @@ while (yyssp != yyss) { yydestruct ("Cleanup: popping", - yystos[*yyssp], yyvsp); + yystos[+*yyssp], yyvsp); YYPOPSTACK (1); } #ifndef yyoverflow @@ -2241,7 +2344,7 @@ #endif return yyresult; } -#line 628 "go-exp.y" /* yacc.c:1906 */ +#line 628 "go-exp.y" /* Take care of parsing a number (anything that starts with a digit). @@ -2950,7 +3053,7 @@ if (sym && SYMBOL_CLASS (sym) == LOC_TYPEDEF - && TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_MODULE) + && SYMBOL_TYPE (sym)->code () == TYPE_CODE_MODULE) return 1; return 0; diff -Nru gdb-9.1/gdb/go-exp.y gdb-10.2/gdb/go-exp.y --- gdb-9.1/gdb/go-exp.y 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/go-exp.y 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* YACC parser for Go expressions, for GDB. - Copyright (C) 2012-2020 Free Software Foundation, Inc. + Copyright (C) 2012-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -1333,7 +1333,7 @@ if (sym && SYMBOL_CLASS (sym) == LOC_TYPEDEF - && TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_MODULE) + && SYMBOL_TYPE (sym)->code () == TYPE_CODE_MODULE) return 1; return 0; diff -Nru gdb-9.1/gdb/go-lang.c gdb-10.2/gdb/go-lang.c --- gdb-9.1/gdb/go-lang.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/go-lang.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Go language support routines for GDB, the GNU debugger. - Copyright (C) 2012-2020 Free Software Foundation, Inc. + Copyright (C) 2012-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -73,26 +73,26 @@ { /* gccgo strings don't necessarily have a name we can use. */ - if (TYPE_NFIELDS (type) == 2) + if (type->num_fields () == 2) { - struct type *type0 = TYPE_FIELD_TYPE (type, 0); - struct type *type1 = TYPE_FIELD_TYPE (type, 1); + struct type *type0 = type->field (0).type (); + struct type *type1 = type->field (1).type (); type0 = check_typedef (type0); type1 = check_typedef (type1); - if (TYPE_CODE (type0) == TYPE_CODE_PTR + if (type0->code () == TYPE_CODE_PTR && strcmp (TYPE_FIELD_NAME (type, 0), "__data") == 0 - && TYPE_CODE (type1) == TYPE_CODE_INT + && type1->code () == TYPE_CODE_INT && strcmp (TYPE_FIELD_NAME (type, 1), "__length") == 0) { struct type *target_type = TYPE_TARGET_TYPE (type0); target_type = check_typedef (target_type); - if (TYPE_CODE (target_type) == TYPE_CODE_INT + if (target_type->code () == TYPE_CODE_INT && TYPE_LENGTH (target_type) == 1 - && strcmp (TYPE_NAME (target_type), "uint8") == 0) + && strcmp (target_type->name (), "uint8") == 0) return 1; } } @@ -106,9 +106,9 @@ static int sixg_string_p (struct type *type) { - if (TYPE_NFIELDS (type) == 2 - && TYPE_NAME (type) != NULL - && strcmp (TYPE_NAME (type), "string") == 0) + if (type->num_fields () == 2 + && type->name () != NULL + && strcmp (type->name (), "string") == 0) return 1; return 0; @@ -131,16 +131,6 @@ return GO_TYPE_NONE; } -/* Return true if TYPE is a string. */ - -static bool -go_is_string_type_p (struct type *type) -{ - type = check_typedef (type); - return (TYPE_CODE (type) == TYPE_CODE_STRUCT - && go_classify_struct_type (type) == GO_TYPE_STRING); -} - /* Subroutine of unpack_mangled_go_symbol to simplify it. Given "[foo.]bar.baz", store "bar" in *PACKAGEP and "baz" in *OBJECTP. We stomp on the last '.' to nul-terminate "bar". @@ -396,15 +386,6 @@ return result; } -/* la_sniff_from_mangled_name for Go. */ - -static int -go_sniff_from_mangled_name (const char *mangled, char **demangled) -{ - *demangled = go_demangle (mangled, 0); - return *demangled != NULL; -} - /* Given a Go symbol, return its package or NULL if unknown. Space for the result is malloc'd, caller must free. */ @@ -420,7 +401,7 @@ char *name_buf; char *result; - gdb_assert (SYMBOL_LANGUAGE (sym) == language_go); + gdb_assert (sym->language () == language_go); name_buf = unpack_mangled_go_symbol (mangled_name, &package_name, &object_name, &method_type_package_name, @@ -523,60 +504,9 @@ nr_go_primitive_types }; -static void -go_language_arch_info (struct gdbarch *gdbarch, - struct language_arch_info *lai) -{ - const struct builtin_go_type *builtin = builtin_go_type (gdbarch); - - lai->string_char_type = builtin->builtin_char; +/* Constant data that describes the Go language. */ - lai->primitive_type_vector - = GDBARCH_OBSTACK_CALLOC (gdbarch, nr_go_primitive_types + 1, - struct type *); - - lai->primitive_type_vector [go_primitive_type_void] - = builtin->builtin_void; - lai->primitive_type_vector [go_primitive_type_char] - = builtin->builtin_char; - lai->primitive_type_vector [go_primitive_type_bool] - = builtin->builtin_bool; - lai->primitive_type_vector [go_primitive_type_int] - = builtin->builtin_int; - lai->primitive_type_vector [go_primitive_type_uint] - = builtin->builtin_uint; - lai->primitive_type_vector [go_primitive_type_uintptr] - = builtin->builtin_uintptr; - lai->primitive_type_vector [go_primitive_type_int8] - = builtin->builtin_int8; - lai->primitive_type_vector [go_primitive_type_int16] - = builtin->builtin_int16; - lai->primitive_type_vector [go_primitive_type_int32] - = builtin->builtin_int32; - lai->primitive_type_vector [go_primitive_type_int64] - = builtin->builtin_int64; - lai->primitive_type_vector [go_primitive_type_uint8] - = builtin->builtin_uint8; - lai->primitive_type_vector [go_primitive_type_uint16] - = builtin->builtin_uint16; - lai->primitive_type_vector [go_primitive_type_uint32] - = builtin->builtin_uint32; - lai->primitive_type_vector [go_primitive_type_uint64] - = builtin->builtin_uint64; - lai->primitive_type_vector [go_primitive_type_float32] - = builtin->builtin_float32; - lai->primitive_type_vector [go_primitive_type_float64] - = builtin->builtin_float64; - lai->primitive_type_vector [go_primitive_type_complex64] - = builtin->builtin_complex64; - lai->primitive_type_vector [go_primitive_type_complex128] - = builtin->builtin_complex128; - - lai->bool_type_symbol = "bool"; - lai->bool_type_default = builtin->builtin_bool; -} - -extern const struct language_defn go_language_defn = +extern const struct language_data go_language_data = { "go", "Go", @@ -587,45 +517,132 @@ macro_expansion_no, NULL, &exp_descriptor_c, - go_parse, - null_post_parser, - c_printchar, /* Print a character constant. */ - c_printstr, /* Function to print string constant. */ - c_emit_char, /* Print a single char. */ - go_print_type, /* Print a type using appropriate syntax. */ - c_print_typedef, /* Print a typedef using appropriate - syntax. */ - go_val_print, /* Print a value using appropriate syntax. */ - c_value_print, /* Print a top-level value. */ - default_read_var_value, /* la_read_var_value */ - NULL, /* Language specific skip_trampoline. */ NULL, /* name_of_this */ false, /* la_store_sym_names_in_linkage_form_p */ - basic_lookup_symbol_nonlocal, - basic_lookup_transparent_type, - go_demangle, /* Language specific symbol demangler. */ - go_sniff_from_mangled_name, - NULL, /* Language specific - class_name_from_physname. */ go_op_print_tab, /* Expression operators for printing. */ 1, /* C-style arrays. */ 0, /* String lower bound. */ - default_word_break_characters, - default_collect_symbol_completion_matches, - go_language_arch_info, - default_print_array_index, - default_pass_by_reference, - c_watch_location_expression, - NULL, /* la_get_symbol_name_matcher */ - iterate_over_symbols, - default_search_name_hash, &default_varobj_ops, - NULL, - NULL, - go_is_string_type_p, "{...}" /* la_struct_too_deep_ellipsis */ }; +/* Class representing the Go language. */ + +class go_language : public language_defn +{ +public: + go_language () + : language_defn (language_go, go_language_data) + { /* Nothing. */ } + + /* See language.h. */ + void language_arch_info (struct gdbarch *gdbarch, + struct language_arch_info *lai) const override + { + const struct builtin_go_type *builtin = builtin_go_type (gdbarch); + + lai->string_char_type = builtin->builtin_char; + + lai->primitive_type_vector + = GDBARCH_OBSTACK_CALLOC (gdbarch, nr_go_primitive_types + 1, + struct type *); + + lai->primitive_type_vector [go_primitive_type_void] + = builtin->builtin_void; + lai->primitive_type_vector [go_primitive_type_char] + = builtin->builtin_char; + lai->primitive_type_vector [go_primitive_type_bool] + = builtin->builtin_bool; + lai->primitive_type_vector [go_primitive_type_int] + = builtin->builtin_int; + lai->primitive_type_vector [go_primitive_type_uint] + = builtin->builtin_uint; + lai->primitive_type_vector [go_primitive_type_uintptr] + = builtin->builtin_uintptr; + lai->primitive_type_vector [go_primitive_type_int8] + = builtin->builtin_int8; + lai->primitive_type_vector [go_primitive_type_int16] + = builtin->builtin_int16; + lai->primitive_type_vector [go_primitive_type_int32] + = builtin->builtin_int32; + lai->primitive_type_vector [go_primitive_type_int64] + = builtin->builtin_int64; + lai->primitive_type_vector [go_primitive_type_uint8] + = builtin->builtin_uint8; + lai->primitive_type_vector [go_primitive_type_uint16] + = builtin->builtin_uint16; + lai->primitive_type_vector [go_primitive_type_uint32] + = builtin->builtin_uint32; + lai->primitive_type_vector [go_primitive_type_uint64] + = builtin->builtin_uint64; + lai->primitive_type_vector [go_primitive_type_float32] + = builtin->builtin_float32; + lai->primitive_type_vector [go_primitive_type_float64] + = builtin->builtin_float64; + lai->primitive_type_vector [go_primitive_type_complex64] + = builtin->builtin_complex64; + lai->primitive_type_vector [go_primitive_type_complex128] + = builtin->builtin_complex128; + + lai->bool_type_symbol = "bool"; + lai->bool_type_default = builtin->builtin_bool; + } + + /* See language.h. */ + bool sniff_from_mangled_name (const char *mangled, + char **demangled) const override + { + *demangled = go_demangle (mangled, 0); + return *demangled != NULL; + } + + /* See language.h. */ + + char *demangle (const char *mangled, int options) const override + { + return go_demangle (mangled, options); + } + + /* See language.h. */ + + void print_type (struct type *type, const char *varstring, + struct ui_file *stream, int show, int level, + const struct type_print_options *flags) const override + { + go_print_type (type, varstring, stream, show, level, flags); + } + + /* See language.h. */ + + void value_print_inner + (struct value *val, struct ui_file *stream, int recurse, + const struct value_print_options *options) const override + { + return go_value_print_inner (val, stream, recurse, options); + } + + /* See language.h. */ + + int parser (struct parser_state *ps) const override + { + return go_parse (ps); + } + + /* See language.h. */ + + bool is_string_type_p (struct type *type) const override + { + type = check_typedef (type); + return (type->code () == TYPE_CODE_STRUCT + && go_classify_struct_type (type) == GO_TYPE_STRING); + } + +}; + +/* Single instance of the Go language class. */ + +static go_language go_language_defn; + static void * build_go_types (struct gdbarch *gdbarch) { @@ -665,11 +682,9 @@ builtin_go_type->builtin_float64 = arch_float_type (gdbarch, 64, "float64", floatformats_ieee_double); builtin_go_type->builtin_complex64 - = arch_complex_type (gdbarch, "complex64", - builtin_go_type->builtin_float32); + = init_complex_type ("complex64", builtin_go_type->builtin_float32); builtin_go_type->builtin_complex128 - = arch_complex_type (gdbarch, "complex128", - builtin_go_type->builtin_float64); + = init_complex_type ("complex128", builtin_go_type->builtin_float64); return builtin_go_type; } @@ -682,8 +697,9 @@ return (const struct builtin_go_type *) gdbarch_data (gdbarch, go_type_data); } +void _initialize_go_language (); void -_initialize_go_language (void) +_initialize_go_language () { go_type_data = gdbarch_data_register_post_init (build_go_types); } diff -Nru gdb-9.1/gdb/go-lang.h gdb-10.2/gdb/go-lang.h --- gdb-9.1/gdb/go-lang.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/go-lang.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Go language support definitions for GDB, the GNU debugger. - Copyright (C) 2012-2020 Free Software Foundation, Inc. + Copyright (C) 2012-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -80,12 +80,10 @@ struct ui_file *stream, int show, int level, const struct type_print_options *flags); -/* Defined in go-valprint.c. */ +/* Implement la_value_print_inner for Go. */ -extern void go_val_print (struct type *type, - int embedded_offset, CORE_ADDR address, - struct ui_file *stream, int recurse, - struct value *val, - const struct value_print_options *options); +extern void go_value_print_inner (struct value *value, + struct ui_file *stream, int recurse, + const struct value_print_options *options); #endif /* !defined (GO_LANG_H) */ diff -Nru gdb-9.1/gdb/go-typeprint.c gdb-10.2/gdb/go-typeprint.c --- gdb-9.1/gdb/go-typeprint.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/go-typeprint.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Support for printing Go types for GDB, the GNU debugger. - Copyright (C) 2012-2020 Free Software Foundation, Inc. + Copyright (C) 2012-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -51,8 +51,8 @@ type = check_typedef (type); /* Print the type of "abc" as "string", not char[4]. */ - if (TYPE_CODE (type) == TYPE_CODE_ARRAY - && TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_CHAR) + if (type->code () == TYPE_CODE_ARRAY + && TYPE_TARGET_TYPE (type)->code () == TYPE_CODE_CHAR) { fputs_filtered ("string", stream); return; diff -Nru gdb-9.1/gdb/go-valprint.c gdb-10.2/gdb/go-valprint.c --- gdb-9.1/gdb/go-valprint.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/go-valprint.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Support for printing Go values for GDB, the GNU debugger. - Copyright (C) 2012-2020 Free Software Foundation, Inc. + Copyright (C) 2012-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -44,7 +44,7 @@ const struct value_print_options *options) { struct gdbarch *gdbarch = get_type_arch (type); - struct type *elt_ptr_type = TYPE_FIELD_TYPE (type, 0); + struct type *elt_ptr_type = type->field (0).type (); struct type *elt_type = TYPE_TARGET_TYPE (elt_ptr_type); LONGEST length; /* TODO(dje): The encapsulation of what a pointer is belongs in value.c. @@ -84,17 +84,15 @@ val_print_string (elt_type, NULL, addr, length, stream, options); } -/* Implements the la_val_print routine for language Go. */ +/* See go-lang.h. */ void -go_val_print (struct type *type, int embedded_offset, - CORE_ADDR address, struct ui_file *stream, int recurse, - struct value *val, - const struct value_print_options *options) +go_value_print_inner (struct value *val, struct ui_file *stream, + int recurse, const struct value_print_options *options) { - type = check_typedef (type); + struct type *type = check_typedef (value_type (val)); - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_STRUCT: { @@ -105,7 +103,8 @@ case GO_TYPE_STRING: if (! options->raw) { - print_go_string (type, embedded_offset, address, + print_go_string (type, value_embedded_offset (val), + value_address (val), stream, recurse, val, options); return; } @@ -117,8 +116,7 @@ /* Fall through. */ default: - c_val_print (type, embedded_offset, address, stream, - recurse, val, options); + c_value_print_inner (val, stream, recurse, options); break; } } diff -Nru gdb-9.1/gdb/gregset.h gdb-10.2/gdb/gregset.h --- gdb-9.1/gdb/gregset.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/gregset.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Interface for functions using gregset and fpregset types. - Copyright (C) 2000-2020 Free Software Foundation, Inc. + Copyright (C) 2000-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/guile/guile.c gdb-10.2/gdb/guile/guile.c --- gdb-9.1/gdb/guile/guile.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/guile/guile.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* General GDB/Guile code. - Copyright (C) 2014-2020 Free Software Foundation, Inc. + Copyright (C) 2014-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -396,33 +396,6 @@ static struct cmd_list_element *show_guile_list; static struct cmd_list_element *info_guile_list; -/* Function for use by 'set guile' prefix command. */ - -static void -set_guile_command (const char *args, int from_tty) -{ - help_list (set_guile_list, "set guile ", all_commands, gdb_stdout); -} - -/* Function for use by 'show guile' prefix command. */ - -static void -show_guile_command (const char *args, int from_tty) -{ - cmd_show_list (show_guile_list, from_tty, ""); -} - -/* The "info scheme" command is defined as a prefix, with - allow_unknown 0. Therefore, its own definition is called only for - "info scheme" with no args. */ - -static void -info_guile_command (const char *args, int from_tty) -{ - printf_unfiltered (_("\"info guile\" must be followed" - " by the name of an info command.\n")); - help_list (info_guile_list, "info guile ", all_commands, gdb_stdout); -} /* Initialization. */ @@ -761,22 +734,22 @@ ); add_com_alias ("gu", "guile", class_obscure, 1); - add_prefix_cmd ("guile", class_obscure, set_guile_command, - _("Prefix command for Guile preference settings."), - &set_guile_list, "set guile ", 0, - &setlist); + add_basic_prefix_cmd ("guile", class_obscure, + _("Prefix command for Guile preference settings."), + &set_guile_list, "set guile ", 0, + &setlist); add_alias_cmd ("gu", "guile", class_obscure, 1, &setlist); - add_prefix_cmd ("guile", class_obscure, show_guile_command, - _("Prefix command for Guile preference settings."), - &show_guile_list, "show guile ", 0, - &showlist); + add_show_prefix_cmd ("guile", class_obscure, + _("Prefix command for Guile preference settings."), + &show_guile_list, "show guile ", 0, + &showlist); add_alias_cmd ("gu", "guile", class_obscure, 1, &showlist); - add_prefix_cmd ("guile", class_obscure, info_guile_command, - _("Prefix command for Guile info displays."), - &info_guile_list, "info guile ", 0, - &infolist); + add_basic_prefix_cmd ("guile", class_obscure, + _("Prefix command for Guile info displays."), + &info_guile_list, "info guile ", 0, + &infolist); add_info_alias ("gu", "guile", 1); /* The name "print-stack" is carried over from Python. @@ -792,8 +765,9 @@ &set_guile_list, &show_guile_list); } +void _initialize_guile (); void -_initialize_guile (void) +_initialize_guile () { install_gdb_commands (); diff -Nru gdb-9.1/gdb/guile/guile.h gdb-10.2/gdb/guile/guile.h --- gdb-9.1/gdb/guile/guile.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/guile/guile.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* General GDB/Scheme code. - Copyright (C) 2014-2020 Free Software Foundation, Inc. + Copyright (C) 2014-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/guile/guile-internal.h gdb-10.2/gdb/guile/guile-internal.h --- gdb-9.1/gdb/guile/guile-internal.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/guile/guile-internal.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Internal header for GDB/Scheme code. - Copyright (C) 2014-2020 Free Software Foundation, Inc. + Copyright (C) 2014-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -579,6 +579,7 @@ extern int vlscm_is_value (SCM scm); extern SCM vlscm_scm_from_value (struct value *value); +extern SCM vlscm_scm_from_value_no_release (struct value *value); extern struct value *vlscm_convert_typed_value_from_scheme (const char *func_name, int obj_arg_pos, SCM obj, @@ -602,10 +603,8 @@ extern enum ext_lang_rc gdbscm_apply_val_pretty_printer (const struct extension_language_defn *, - struct type *type, - LONGEST embedded_offset, CORE_ADDR address, - struct ui_file *stream, int recurse, struct value *val, + struct ui_file *stream, int recurse, const struct value_print_options *options, const struct language_defn *language); diff -Nru gdb-9.1/gdb/guile/lib/gdb/boot.scm gdb-10.2/gdb/guile/lib/gdb/boot.scm --- gdb-9.1/gdb/guile/lib/gdb/boot.scm 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/guile/lib/gdb/boot.scm 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ ;; Bootstrap the Scheme side of the gdb module. ;; -;; Copyright (C) 2014-2020 Free Software Foundation, Inc. +;; Copyright (C) 2014-2021 Free Software Foundation, Inc. ;; ;; This file is part of GDB. ;; diff -Nru gdb-9.1/gdb/guile/lib/gdb/experimental.scm gdb-10.2/gdb/guile/lib/gdb/experimental.scm --- gdb-9.1/gdb/guile/lib/gdb/experimental.scm 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/guile/lib/gdb/experimental.scm 2021-04-25 04:04:35.000000000 +0000 @@ -1,7 +1,7 @@ ;; Various experimental utilities. ;; Anything in this file can change or disappear. ;; -;; Copyright (C) 2014-2020 Free Software Foundation, Inc. +;; Copyright (C) 2014-2021 Free Software Foundation, Inc. ;; ;; This file is part of GDB. ;; diff -Nru gdb-9.1/gdb/guile/lib/gdb/init.scm gdb-10.2/gdb/guile/lib/gdb/init.scm --- gdb-9.1/gdb/guile/lib/gdb/init.scm 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/guile/lib/gdb/init.scm 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ ;; Scheme side of the gdb module. ;; -;; Copyright (C) 2014-2020 Free Software Foundation, Inc. +;; Copyright (C) 2014-2021 Free Software Foundation, Inc. ;; ;; This file is part of GDB. ;; diff -Nru gdb-9.1/gdb/guile/lib/gdb/iterator.scm gdb-10.2/gdb/guile/lib/gdb/iterator.scm --- gdb-9.1/gdb/guile/lib/gdb/iterator.scm 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/guile/lib/gdb/iterator.scm 2021-04-25 04:04:35.000000000 +0000 @@ -1,7 +1,7 @@ ;; Iteration utilities. ;; Anything in this file can change or disappear. ;; -;; Copyright (C) 2014-2020 Free Software Foundation, Inc. +;; Copyright (C) 2014-2021 Free Software Foundation, Inc. ;; ;; This file is part of GDB. ;; diff -Nru gdb-9.1/gdb/guile/lib/gdb/printing.scm gdb-10.2/gdb/guile/lib/gdb/printing.scm --- gdb-9.1/gdb/guile/lib/gdb/printing.scm 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/guile/lib/gdb/printing.scm 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ ;; Additional pretty-printer support. ;; -;; Copyright (C) 2014-2020 Free Software Foundation, Inc. +;; Copyright (C) 2014-2021 Free Software Foundation, Inc. ;; ;; This file is part of GDB. ;; diff -Nru gdb-9.1/gdb/guile/lib/gdb/support.scm gdb-10.2/gdb/guile/lib/gdb/support.scm --- gdb-9.1/gdb/guile/lib/gdb/support.scm 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/guile/lib/gdb/support.scm 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ ;; Internal support routines. ;; -;; Copyright (C) 2014-2020 Free Software Foundation, Inc. +;; Copyright (C) 2014-2021 Free Software Foundation, Inc. ;; ;; This file is part of GDB. ;; diff -Nru gdb-9.1/gdb/guile/lib/gdb/types.scm gdb-10.2/gdb/guile/lib/gdb/types.scm --- gdb-9.1/gdb/guile/lib/gdb/types.scm 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/guile/lib/gdb/types.scm 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ ;; Type utilities. -;; Copyright (C) 2010-2020 Free Software Foundation, Inc. +;; Copyright (C) 2010-2021 Free Software Foundation, Inc. ;; ;; This program is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/guile/lib/gdb.scm gdb-10.2/gdb/guile/lib/gdb.scm --- gdb-9.1/gdb/guile/lib/gdb.scm 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/guile/lib/gdb.scm 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ ;; Scheme side of the gdb module. ;; -;; Copyright (C) 2014-2020 Free Software Foundation, Inc. +;; Copyright (C) 2014-2021 Free Software Foundation, Inc. ;; ;; This file is part of GDB. ;; diff -Nru gdb-9.1/gdb/guile/scm-arch.c gdb-10.2/gdb/guile/scm-arch.c --- gdb-9.1/gdb/guile/scm-arch.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/guile/scm-arch.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Scheme interface to architecture. - Copyright (C) 2014-2020 Free Software Foundation, Inc. + Copyright (C) 2014-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/guile/scm-auto-load.c gdb-10.2/gdb/guile/scm-auto-load.c --- gdb-9.1/gdb/guile/scm-auto-load.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/guile/scm-auto-load.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* GDB routines for supporting auto-loaded Guile scripts. - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/guile/scm-block.c gdb-10.2/gdb/guile/scm-block.c --- gdb-9.1/gdb/guile/scm-block.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/guile/scm-block.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Scheme interface to blocks. - Copyright (C) 2008-2020 Free Software Foundation, Inc. + Copyright (C) 2008-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/guile/scm-breakpoint.c gdb-10.2/gdb/guile/scm-breakpoint.c --- gdb-9.1/gdb/guile/scm-breakpoint.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/guile/scm-breakpoint.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Scheme interface to breakpoints. - Copyright (C) 2008-2020 Free Software Foundation, Inc. + Copyright (C) 2008-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/guile/scm-cmd.c gdb-10.2/gdb/guile/scm-cmd.c --- gdb-9.1/gdb/guile/scm-cmd.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/guile/scm-cmd.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* GDB commands implemented in Scheme. - Copyright (C) 2008-2020 Free Software Foundation, Inc. + Copyright (C) 2008-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -512,7 +512,7 @@ prefix_text[i + 1] = '\0'; prefix_text2 = prefix_text; - elt = lookup_cmd_1 (&prefix_text2, *start_list, NULL, 1); + elt = lookup_cmd_1 (&prefix_text2, *start_list, NULL, NULL, 1); if (elt == NULL || elt == CMD_LIST_AMBIGUOUS) { msg = xstrprintf (_("could not find command prefix '%s'"), prefix_text); diff -Nru gdb-9.1/gdb/guile/scm-disasm.c gdb-10.2/gdb/guile/scm-disasm.c --- gdb-9.1/gdb/guile/scm-disasm.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/guile/scm-disasm.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Scheme interface to architecture. - Copyright (C) 2014-2020 Free Software Foundation, Inc. + Copyright (C) 2014-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/guile/scm-exception.c gdb-10.2/gdb/guile/scm-exception.c --- gdb-9.1/gdb/guile/scm-exception.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/guile/scm-exception.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* GDB/Scheme exception support. - Copyright (C) 2014-2020 Free Software Foundation, Inc. + Copyright (C) 2014-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/guile/scm-frame.c gdb-10.2/gdb/guile/scm-frame.c --- gdb-9.1/gdb/guile/scm-frame.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/guile/scm-frame.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Scheme interface to stack frames. - Copyright (C) 2008-2020 Free Software Foundation, Inc. + Copyright (C) 2008-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/guile/scm-gsmob.c gdb-10.2/gdb/guile/scm-gsmob.c --- gdb-9.1/gdb/guile/scm-gsmob.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/guile/scm-gsmob.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* GDB/Scheme smobs (gsmob is pronounced "jee smob") - Copyright (C) 2014-2020 Free Software Foundation, Inc. + Copyright (C) 2014-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/guile/scm-iterator.c gdb-10.2/gdb/guile/scm-iterator.c --- gdb-9.1/gdb/guile/scm-iterator.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/guile/scm-iterator.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Simple iterators for GDB/Scheme. - Copyright (C) 2014-2020 Free Software Foundation, Inc. + Copyright (C) 2014-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/guile/scm-lazy-string.c gdb-10.2/gdb/guile/scm-lazy-string.c --- gdb-9.1/gdb/guile/scm-lazy-string.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/guile/scm-lazy-string.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Scheme interface to lazy strings. - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -201,7 +201,7 @@ realtype = check_typedef (type); - switch (TYPE_CODE (realtype)) + switch (realtype->code ()) { case TYPE_CODE_PTR: case TYPE_CODE_ARRAY: @@ -314,7 +314,7 @@ struct type *type = tyscm_scm_to_type (ls_smob->type); struct type *realtype = check_typedef (type); - switch (TYPE_CODE (realtype)) + switch (realtype->code ()) { case TYPE_CODE_PTR: /* If a length is specified we need to convert this to an array diff -Nru gdb-9.1/gdb/guile/scm-math.c gdb-10.2/gdb/guile/scm-math.c --- gdb-9.1/gdb/guile/scm-math.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/guile/scm-math.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* GDB/Scheme support for math operations on values. - Copyright (C) 2008-2020 Free Software Foundation, Inc. + Copyright (C) 2008-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -65,7 +65,7 @@ /* If TYPE is a reference, return the target; otherwise return TYPE. */ #define STRIP_REFERENCE(TYPE) \ - ((TYPE_CODE (TYPE) == TYPE_CODE_REF) ? (TYPE_TARGET_TYPE (TYPE)) : (TYPE)) + ((TYPE->code () == TYPE_CODE_REF) ? (TYPE_TARGET_TYPE (TYPE)) : (TYPE)) /* Helper for vlscm_unop. Contains all the code that may throw a GDB exception. */ @@ -168,10 +168,10 @@ rtype = check_typedef (rtype); rtype = STRIP_REFERENCE (rtype); - if (TYPE_CODE (ltype) == TYPE_CODE_PTR + if (ltype->code () == TYPE_CODE_PTR && is_integral_type (rtype)) res_val = value_ptradd (arg1, value_as_long (arg2)); - else if (TYPE_CODE (rtype) == TYPE_CODE_PTR + else if (rtype->code () == TYPE_CODE_PTR && is_integral_type (ltype)) res_val = value_ptradd (arg2, value_as_long (arg1)); else @@ -188,15 +188,15 @@ rtype = check_typedef (rtype); rtype = STRIP_REFERENCE (rtype); - if (TYPE_CODE (ltype) == TYPE_CODE_PTR - && TYPE_CODE (rtype) == TYPE_CODE_PTR) + if (ltype->code () == TYPE_CODE_PTR + && rtype->code () == TYPE_CODE_PTR) { /* A ptrdiff_t for the target would be preferable here. */ res_val = value_from_longest (builtin_type (gdbarch)->builtin_long, value_ptrdiff (arg1, arg2)); } - else if (TYPE_CODE (ltype) == TYPE_CODE_PTR + else if (ltype->code () == TYPE_CODE_PTR && is_integral_type (rtype)) res_val = value_ptradd (arg1, - value_as_long (arg2)); else @@ -525,7 +525,7 @@ struct gdbarch *gdbarch, SCM *except_scmp) { if (is_integral_type (type) - || TYPE_CODE (type) == TYPE_CODE_PTR) + || type->code () == TYPE_CODE_PTR) { if (TYPE_UNSIGNED (type)) { @@ -558,7 +558,7 @@ return value_from_longest (type, gdbscm_scm_to_longest (obj)); } } - else if (TYPE_CODE (type) == TYPE_CODE_FLT) + else if (type->code () == TYPE_CODE_FLT) return value_from_host_double (type, scm_to_double (obj)); else { @@ -578,7 +578,7 @@ ULONGEST max; /* If scm_is_unsigned_integer can't work with this type, just punt. */ - if (TYPE_LENGTH (type) > sizeof (scm_t_uintmax)) + if (TYPE_LENGTH (type) > sizeof (uintmax_t)) return 0; get_unsigned_type_max (type, &max); return scm_is_unsigned_integer (obj, 0, max); @@ -588,7 +588,7 @@ LONGEST min, max; /* If scm_is_signed_integer can't work with this type, just punt. */ - if (TYPE_LENGTH (type) > sizeof (scm_t_intmax)) + if (TYPE_LENGTH (type) > sizeof (intmax_t)) return 0; get_signed_type_minmax (type, &min, &max); return scm_is_signed_integer (obj, min, max); diff -Nru gdb-9.1/gdb/guile/scm-objfile.c gdb-10.2/gdb/guile/scm-objfile.c --- gdb-9.1/gdb/guile/scm-objfile.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/guile/scm-objfile.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Scheme interface to objfiles. - Copyright (C) 2008-2020 Free Software Foundation, Inc. + Copyright (C) 2008-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/guile/scm-param.c gdb-10.2/gdb/guile/scm-param.c --- gdb-9.1/gdb/guile/scm-param.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/guile/scm-param.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* GDB parameters implemented in Guile. - Copyright (C) 2008-2020 Free Software Foundation, Inc. + Copyright (C) 2008-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -466,13 +466,13 @@ /* Lookup created parameter, and register Scheme object against the parameter context. Perform this task against both lists. */ tmp_name = cmd_name; - param = lookup_cmd (&tmp_name, *show_list, "", 0, 1); + param = lookup_cmd (&tmp_name, *show_list, "", NULL, 0, 1); gdb_assert (param != NULL); set_cmd_context (param, self); *set_cmd = param; tmp_name = cmd_name; - param = lookup_cmd (&tmp_name, *set_list, "", 0, 1); + param = lookup_cmd (&tmp_name, *set_list, "", NULL, 0, 1); gdb_assert (param != NULL); set_cmd_context (param, self); *show_cmd = param; @@ -969,7 +969,7 @@ { struct cmd_list_element *c; - c = lookup_cmd_1 (&name, list, NULL, 1); + c = lookup_cmd_1 (&name, list, NULL, NULL, 1); /* If the name is ambiguous that's ok, it's a new parameter still. */ return c != NULL && c != CMD_LIST_AMBIGUOUS; diff -Nru gdb-9.1/gdb/guile/scm-ports.c gdb-10.2/gdb/guile/scm-ports.c --- gdb-9.1/gdb/guile/scm-ports.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/guile/scm-ports.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,7 +1,7 @@ /* Support for connecting Guile's stdio to GDB's. as well as r/w memory via ports. - Copyright (C) 2014-2020 Free Software Foundation, Inc. + Copyright (C) 2014-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -22,7 +22,7 @@ conventions, et.al. */ #include "defs.h" -#include "gdb_select.h" +#include "gdbsupport/gdb_select.h" #include "top.h" #include "target.h" #include "guile-internal.h" @@ -36,6 +36,12 @@ #endif #endif +/* Whether we're using Guile < 2.2 and its clumsy port API. */ + +#define USING_GUILE_BEFORE_2_2 \ + (SCM_MAJOR_VERSION == 2 && SCM_MINOR_VERSION == 0) + + /* A ui-file for sending output to Guile. */ class ioscm_file_port : public ui_file @@ -66,12 +72,14 @@ This value is always in the range [0, size]. */ ULONGEST current; +#if USING_GUILE_BEFORE_2_2 /* The size of the internal r/w buffers. Scheme ports aren't a straightforward mapping to memory r/w. Generally the user specifies how much to r/w and all access is unbuffered. We don't try to provide equivalent access, but we allow the user to specify these values to help get something similar. */ unsigned read_buf_size, write_buf_size; +#endif } ioscm_memory_port; /* Copies of the original system input/output/error ports. @@ -81,7 +89,11 @@ static SCM orig_error_port_scm; /* This is the stdio port descriptor, scm_ptob_descriptor. */ +#if USING_GUILE_BEFORE_2_2 static scm_t_bits stdio_port_desc; +#else +static scm_t_port_type *stdio_port_desc; +#endif /* Note: scm_make_port_type takes a char * instead of a const char *. */ static /*const*/ char stdio_port_desc_name[] = "gdb:stdio-port"; @@ -102,11 +114,17 @@ enum oport { GDB_STDOUT, GDB_STDERR }; /* This is the memory port descriptor, scm_ptob_descriptor. */ +#if USING_GUILE_BEFORE_2_2 static scm_t_bits memory_port_desc; +#else +static scm_t_port_type *memory_port_desc; +#endif /* Note: scm_make_port_type takes a char * instead of a const char *. */ static /*const*/ char memory_port_desc_name[] = "gdb:memory-port"; +#if USING_GUILE_BEFORE_2_2 + /* The default amount of memory to fetch for each read/write request. Scheme ports don't provide a way to specify the size of a read, which is important to us to minimize the number of inferior interactions, @@ -123,16 +141,24 @@ /* "out of range" error message for buf sizes. */ static char *out_of_range_buf_size; +#else + +/* The maximum values to use for get_natural_buffer_sizes. */ +static const unsigned natural_buf_size = 16; + +#endif + /* Keywords used by open-memory. */ static SCM mode_keyword; static SCM start_keyword; static SCM size_keyword; -/* Helper to do the low level work of opening a port. - Newer versions of Guile (2.1.x) have scm_c_make_port. */ +/* Helper to do the low level work of opening a port. */ + +#if USING_GUILE_BEFORE_2_2 static SCM -ioscm_open_port (scm_t_bits port_type, long mode_bits) +ioscm_open_port (scm_t_bits port_type, long mode_bits, scm_t_bits stream) { SCM port; @@ -143,6 +169,7 @@ port = scm_new_port_table_entry (port_type); SCM_SET_CELL_TYPE (port, port_type | mode_bits); + SCM_SETSTREAM (port, stream); #if 0 /* TODO: Guile doesn't export this. What to do? */ scm_i_pthread_mutex_unlock (&scm_i_port_table_mutex); @@ -150,9 +177,39 @@ return port; } + +#else + +static SCM +ioscm_open_port (scm_t_port_type *port_type, long mode_bits, scm_t_bits stream) +{ + return scm_c_make_port (port_type, mode_bits, stream); +} + +#endif + /* Support for connecting Guile's stdio ports to GDB's stdio ports. */ +/* Like fputstrn_filtered, but don't escape characters, except nul. + Also like fputs_filtered, but a length is specified. */ + +static void +fputsn_filtered (const char *s, size_t size, struct ui_file *stream) +{ + size_t i; + + for (i = 0; i < size; ++i) + { + if (s[i] == '\0') + fputs_filtered ("\\000", stream); + else + fputc_filtered (s[i], stream); + } +} + +#if USING_GUILE_BEFORE_2_2 + /* The scm_t_ptob_descriptor.input_waiting "method". Return a lower bound on the number of bytes available for input. */ @@ -234,7 +291,7 @@ gdb_flush (gdb_stdout); gdb_flush (gdb_stderr); - count = ui_file_read (gdb_stdin, (char *) pt->read_buf, pt->read_buf_size); + count = gdb_stdin->read ((char *) pt->read_buf, pt->read_buf_size); if (count == -1) scm_syserror (FUNC_NAME); if (count == 0) @@ -245,23 +302,6 @@ return *pt->read_buf; } -/* Like fputstrn_filtered, but don't escape characters, except nul. - Also like fputs_filtered, but a length is specified. */ - -static void -fputsn_filtered (const char *s, size_t size, struct ui_file *stream) -{ - size_t i; - - for (i = 0; i < size; ++i) - { - if (s[i] == '\0') - fputs_filtered ("\\000", stream); - else - fputc_filtered (s[i], stream); - } -} - /* Write to gdb's stdout or stderr. */ static void @@ -302,6 +342,62 @@ gdb_flush (gdb_stdout); } +#else /* !USING_GUILE_BEFORE_2_2 */ + +/* Read up to COUNT bytes into bytevector DST at offset START. Return the + number of bytes read, zero for the end of file. */ + +static size_t +ioscm_read_from_port (SCM port, SCM dst, size_t start, size_t count) +{ + long read; + char *read_buf; + + /* If we're called on stdout,stderr, punt. */ + if (! scm_is_eq (port, input_port_scm)) + return 0; + + gdb_flush (gdb_stdout); + gdb_flush (gdb_stderr); + + read_buf = (char *) SCM_BYTEVECTOR_CONTENTS (dst) + start; + read = gdb_stdin->read (read_buf, count); + if (read == -1) + scm_syserror (FUNC_NAME); + + return (size_t) read; +} + +/* Write to gdb's stdout or stderr. */ + +static size_t +ioscm_write (SCM port, SCM src, size_t start, size_t count) +{ + const char *data = (char *) SCM_BYTEVECTOR_CONTENTS (src) + start; + + /* If we're called on stdin, punt. */ + if (scm_is_eq (port, input_port_scm)) + return 0; + + gdbscm_gdb_exception exc {}; + try + { + if (scm_is_eq (port, error_port_scm)) + fputsn_filtered ((const char *) data, count, gdb_stderr); + else + fputsn_filtered ((const char *) data, count, gdb_stdout); + } + catch (const gdb_exception &except) + { + exc = unpack (except); + } + GDBSCM_HANDLE_GDB_EXCEPTION (exc); + + return count; +} + +#endif /* !USING_GUILE_BEFORE_2_2 */ + /* Initialize the gdb stdio port type. N.B. isatty? will fail on these ports, it is only supported for file @@ -311,12 +407,25 @@ ioscm_init_gdb_stdio_port (void) { stdio_port_desc = scm_make_port_type (stdio_port_desc_name, - ioscm_fill_input, ioscm_write); +#if USING_GUILE_BEFORE_2_2 + ioscm_fill_input, +#else + ioscm_read_from_port, +#endif + ioscm_write); +#if USING_GUILE_BEFORE_2_2 scm_set_port_input_waiting (stdio_port_desc, ioscm_input_waiting); scm_set_port_flush (stdio_port_desc, ioscm_flush); +#else + scm_set_port_read_wait_fd (stdio_port_desc, STDIN_FILENO); +#endif } +#define GDB_STDIO_BUFFER_DEFAULT_SIZE 1024 + +#if USING_GUILE_BEFORE_2_2 + /* Subroutine of ioscm_make_gdb_stdio_port to simplify it. Set up the buffers of port PORT. MODE_BITS are the mode bits of PORT. */ @@ -325,7 +434,6 @@ ioscm_init_stdio_buffers (SCM port, long mode_bits) { scm_t_port *pt = SCM_PTAB_ENTRY (port); -#define GDB_STDIO_BUFFER_DEFAULT_SIZE 1024 int size = mode_bits & SCM_BUF0 ? 0 : GDB_STDIO_BUFFER_DEFAULT_SIZE; int writing = (mode_bits & SCM_WRTNG) != 0; @@ -359,6 +467,20 @@ pt->write_end = pt->write_buf + pt->write_buf_size; } +#else + +static void +ioscm_init_stdio_buffers (SCM port, long mode_bits) +{ + if (mode_bits & SCM_BUF0) + scm_setvbuf (port, scm_from_utf8_symbol ("none"), scm_from_size_t (0)); + else + scm_setvbuf (port, scm_from_utf8_symbol ("block"), + scm_from_size_t (GDB_STDIO_BUFFER_DEFAULT_SIZE)); +} + +#endif + /* Create a gdb stdio port. */ static SCM @@ -389,7 +511,7 @@ } mode_bits = scm_mode_bits ((char *) mode_str); - port = ioscm_open_port (stdio_port_desc, mode_bits); + port = ioscm_open_port (stdio_port_desc, mode_bits, 0); scm_set_port_filename_x (port, gdbscm_scm_from_c_string (name)); @@ -403,9 +525,14 @@ static SCM gdbscm_stdio_port_p (SCM scm) { +#if USING_GUILE_BEFORE_2_2 /* This is copied from SCM_FPORTP. */ return scm_from_bool (!SCM_IMP (scm) && (SCM_TYP16 (scm) == stdio_port_desc)); +#else + return scm_from_bool (SCM_PORTP (scm) + && (SCM_PORT_TYPE (scm) == stdio_port_desc)); +#endif } /* GDB's ports are accessed via functions to keep them read-only. */ @@ -568,6 +695,8 @@ return 1; } +#if USING_GUILE_BEFORE_2_2 + /* "fill_input" method for memory ports. */ static int @@ -661,73 +790,6 @@ pt->rw_active = SCM_PORT_NEITHER; } -/* "write" method for memory ports. */ - -static void -gdbscm_memory_port_write (SCM port, const void *void_data, size_t size) -{ - scm_t_port *pt = SCM_PTAB_ENTRY (port); - ioscm_memory_port *iomem = (ioscm_memory_port *) SCM_STREAM (port); - const gdb_byte *data = (const gdb_byte *) void_data; - - /* There's no way to indicate a short write, so if the request goes past - the end of the port's memory range, flag an error. */ - if (size > iomem->size - iomem->current) - { - gdbscm_out_of_range_error (FUNC_NAME, 0, gdbscm_scm_from_ulongest (size), - _("writing beyond end of memory range")); - } - - if (pt->write_buf == &pt->shortbuf) - { - /* Unbuffered port. */ - if (target_write_memory (iomem->start + iomem->current, data, size) != 0) - gdbscm_memory_error (FUNC_NAME, _("error writing memory"), SCM_EOL); - iomem->current += size; - return; - } - - /* Note: The edge case of what to do when the buffer exactly fills is - debatable. Guile flushes when the buffer exactly fills up, so we - do too. It's counter-intuitive to my mind, but in case there's a - subtlety somewhere that depends on this, we do the same. */ - - { - size_t space = pt->write_end - pt->write_pos; - - if (size < space) - { - /* Data fits in buffer, and does not fill it. */ - memcpy (pt->write_pos, data, size); - pt->write_pos += size; - } - else - { - memcpy (pt->write_pos, data, space); - pt->write_pos = pt->write_end; - gdbscm_memory_port_flush (port); - { - const gdb_byte *ptr = data + space; - size_t remaining = size - space; - - if (remaining >= pt->write_buf_size) - { - if (target_write_memory (iomem->start + iomem->current, ptr, - remaining) != 0) - gdbscm_memory_error (FUNC_NAME, _("error writing memory"), - SCM_EOL); - iomem->current += remaining; - } - else - { - memcpy (pt->write_pos, ptr, remaining); - pt->write_pos += remaining; - } - } - } - } -} - /* "seek" method for memory ports. */ static scm_t_off @@ -820,6 +882,73 @@ return result; } +/* "write" method for memory ports. */ + +static void +gdbscm_memory_port_write (SCM port, const void *void_data, size_t size) +{ + scm_t_port *pt = SCM_PTAB_ENTRY (port); + ioscm_memory_port *iomem = (ioscm_memory_port *) SCM_STREAM (port); + const gdb_byte *data = (const gdb_byte *) void_data; + + /* There's no way to indicate a short write, so if the request goes past + the end of the port's memory range, flag an error. */ + if (size > iomem->size - iomem->current) + { + gdbscm_out_of_range_error (FUNC_NAME, 0, gdbscm_scm_from_ulongest (size), + _("writing beyond end of memory range")); + } + + if (pt->write_buf == &pt->shortbuf) + { + /* Unbuffered port. */ + if (target_write_memory (iomem->start + iomem->current, data, size) != 0) + gdbscm_memory_error (FUNC_NAME, _("error writing memory"), SCM_EOL); + iomem->current += size; + return; + } + + /* Note: The edge case of what to do when the buffer exactly fills is + debatable. Guile flushes when the buffer exactly fills up, so we + do too. It's counter-intuitive to my mind, but in case there's a + subtlety somewhere that depends on this, we do the same. */ + + { + size_t space = pt->write_end - pt->write_pos; + + if (size < space) + { + /* Data fits in buffer, and does not fill it. */ + memcpy (pt->write_pos, data, size); + pt->write_pos += size; + } + else + { + memcpy (pt->write_pos, data, space); + pt->write_pos = pt->write_end; + gdbscm_memory_port_flush (port); + { + const gdb_byte *ptr = data + space; + size_t remaining = size - space; + + if (remaining >= pt->write_buf_size) + { + if (target_write_memory (iomem->start + iomem->current, ptr, + remaining) != 0) + gdbscm_memory_error (FUNC_NAME, _("error writing memory"), + SCM_EOL); + iomem->current += remaining; + } + else + { + memcpy (pt->write_pos, ptr, remaining); + pt->write_pos += remaining; + } + } + } + } +} + /* "close" method for memory ports. */ static int @@ -851,18 +980,178 @@ return 0; } +/* Re-initialize a memory port, updating its read/write buffer sizes. + An exception is thrown if the port is unbuffered. + TODO: Allow switching buffered/unbuffered. + An exception is also thrown if data is still buffered, except in the case + where the buffer size isn't changing (since that's just a nop). */ + +static void +ioscm_reinit_memory_port (SCM port, size_t read_buf_size, + size_t write_buf_size, const char *func_name) +{ + scm_t_port *pt = SCM_PTAB_ENTRY (port); + ioscm_memory_port *iomem = (ioscm_memory_port *) SCM_STREAM (port); + + gdb_assert (read_buf_size >= min_memory_port_buf_size + && read_buf_size <= max_memory_port_buf_size); + gdb_assert (write_buf_size >= min_memory_port_buf_size + && write_buf_size <= max_memory_port_buf_size); + + /* First check if the port is unbuffered. */ + + if (pt->read_buf == &pt->shortbuf) + { + gdb_assert (pt->write_buf == &pt->shortbuf); + scm_misc_error (func_name, _("port is unbuffered: ~a"), + scm_list_1 (port)); + } + + /* Next check if anything is buffered. */ + + if (read_buf_size != pt->read_buf_size + && pt->read_end != pt->read_buf) + { + scm_misc_error (func_name, _("read buffer not empty: ~a"), + scm_list_1 (port)); + } + + if (write_buf_size != pt->write_buf_size + && pt->write_pos != pt->write_buf) + { + scm_misc_error (func_name, _("write buffer not empty: ~a"), + scm_list_1 (port)); + } + + /* Now we can update the buffer sizes, but only if the size has changed. */ + + if (read_buf_size != pt->read_buf_size) + { + iomem->read_buf_size = read_buf_size; + pt->read_buf_size = read_buf_size; + xfree (pt->read_buf); + pt->read_buf = (unsigned char *) xmalloc (pt->read_buf_size); + pt->read_pos = pt->read_end = pt->read_buf; + } + + if (write_buf_size != pt->write_buf_size) + { + iomem->write_buf_size = write_buf_size; + pt->write_buf_size = write_buf_size; + xfree (pt->write_buf); + pt->write_buf = (unsigned char *) xmalloc (pt->write_buf_size); + pt->write_pos = pt->write_buf; + pt->write_end = pt->write_buf + pt->write_buf_size; + } +} + +#else /* !USING_GUILE_BEFORE_2_2 */ + +/* The semantics get weird if the buffer size is larger than the port range, + so provide a better default buffer size. */ + +static void +gdbscm_get_natural_buffer_sizes (SCM port, size_t *read_size, + size_t *write_size) +{ + ioscm_memory_port *iomem = (ioscm_memory_port *) SCM_STREAM (port); + + size_t size = natural_buf_size; + if (iomem != NULL && iomem->size < size) + size = iomem->size; + *read_size = *write_size = size; +} + +/* Read up to COUNT bytes into bytevector DST at offset START. Return the + number of bytes read, zero for the end of file. */ + +static size_t +gdbscm_memory_port_read (SCM port, SCM dst, size_t start, size_t count) +{ + gdb_byte *read_buf; + ioscm_memory_port *iomem = (ioscm_memory_port *) SCM_STREAM (port); + + /* "current" is the offset of the first byte we want to read. */ + gdb_assert (iomem->current <= iomem->size); + if (iomem->current == iomem->size) + return 0; + + /* Don't read outside the allowed memory range. */ + if (count > iomem->size - iomem->current) + count = iomem->size - iomem->current; + + read_buf = (gdb_byte *) SCM_BYTEVECTOR_CONTENTS (dst) + start; + if (target_read_memory (iomem->start + iomem->current, read_buf, + count) != 0) + gdbscm_memory_error (FUNC_NAME, _("error reading memory"), SCM_EOL); + + iomem->current += count; + return count; +} + +static size_t +gdbscm_memory_port_write (SCM port, SCM src, size_t start, size_t count) +{ + ioscm_memory_port *iomem = (ioscm_memory_port *) SCM_STREAM (port); + const gdb_byte *data = + (const gdb_byte *) SCM_BYTEVECTOR_CONTENTS (src) + start; + + /* If the request goes past the end of the port's memory range, flag an + error. */ + if (count > iomem->size - iomem->current) + gdbscm_out_of_range_error (FUNC_NAME, 0, scm_from_size_t (count), + _("writing beyond end of memory range")); + + if (target_write_memory (iomem->start + iomem->current, data, + count) != 0) + gdbscm_memory_error (FUNC_NAME, _("error writing memory"), + SCM_EOL); + + iomem->current += count; + + return count; +} + +static scm_t_off +gdbscm_memory_port_seek (SCM port, scm_t_off offset, int whence) +{ + ioscm_memory_port *iomem = (ioscm_memory_port *) SCM_STREAM (port); + int rc; + + rc = ioscm_lseek_address (iomem, offset, whence); + if (rc == 0) + gdbscm_out_of_range_error (FUNC_NAME, 0, + gdbscm_scm_from_longest (offset), + _("bad seek")); + + /* TODO: The Guile API doesn't support 32x64. We can't fix that here, + and there's no need to throw an error if the new address can't be + represented in a scm_t_off. But we could return something less + clumsy. */ + return iomem->current; +} + +static void +gdbscm_memory_port_close (SCM port) +{ + ioscm_memory_port *iomem = (ioscm_memory_port *) SCM_STREAM (port); + scm_gc_free (iomem, sizeof (*iomem), "memory port"); + SCM_SETSTREAM (port, NULL); +} + +#endif /* !USING_GUILE_BEFORE_2_2 */ + /* "print" method for memory ports. */ static int gdbscm_memory_port_print (SCM exp, SCM port, scm_print_state *pstate) { ioscm_memory_port *iomem = (ioscm_memory_port *) SCM_STREAM (exp); - char *type = SCM_PTOBNAME (SCM_PTOBNUM (exp)); scm_puts ("#<", port); scm_print_port_mode (exp, port); /* scm_print_port_mode includes a trailing space. */ - gdbscm_printf (port, "%s %s-%s", type, + gdbscm_printf (port, "%s %s-%s", memory_port_desc_name, hex_string (iomem->start), hex_string (iomem->end)); scm_putc ('>', port); return 1; @@ -874,14 +1163,23 @@ ioscm_init_memory_port_type (void) { memory_port_desc = scm_make_port_type (memory_port_desc_name, +#if USING_GUILE_BEFORE_2_2 gdbscm_memory_port_fill_input, +#else + gdbscm_memory_port_read, +#endif gdbscm_memory_port_write); +#if USING_GUILE_BEFORE_2_2 scm_set_port_end_input (memory_port_desc, gdbscm_memory_port_end_input); scm_set_port_flush (memory_port_desc, gdbscm_memory_port_flush); + scm_set_port_free (memory_port_desc, gdbscm_memory_port_free); +#else + scm_set_port_get_natural_buffer_sizes (memory_port_desc, + gdbscm_get_natural_buffer_sizes); +#endif scm_set_port_seek (memory_port_desc, gdbscm_memory_port_seek); scm_set_port_close (memory_port_desc, gdbscm_memory_port_close); - scm_set_port_free (memory_port_desc, gdbscm_memory_port_free); scm_set_port_print (memory_port_desc, gdbscm_memory_port_print); } @@ -922,17 +1220,13 @@ return mode_bits; } -/* Helper for gdbscm_open_memory to finish initializing the port. - The port has address range [start,end). - This means that address of 0xff..ff is not accessible. - I can live with that. */ +/* Return the memory object to be used as a "stream" associated with a memory + port for the START--END range. */ -static void -ioscm_init_memory_port (SCM port, CORE_ADDR start, CORE_ADDR end) +static ioscm_memory_port * +ioscm_init_memory_port_stream (CORE_ADDR start, CORE_ADDR end) { - scm_t_port *pt; ioscm_memory_port *iomem; - int buffered = (SCM_CELL_WORD_0 (port) & SCM_BUF0) == 0; gdb_assert (start <= end); @@ -943,6 +1237,23 @@ iomem->end = end; iomem->size = end - start; iomem->current = 0; + + return iomem; +} + +#if USING_GUILE_BEFORE_2_2 + +/* Helper for gdbscm_open_memory to finish initializing the port. + The port has address range [start,end). + This means that address of 0xff..ff is not accessible. + I can live with that. */ + +static void +ioscm_init_memory_port_buffers (SCM port) +{ + ioscm_memory_port *iomem = (ioscm_memory_port *) SCM_STREAM (port); + + int buffered = (SCM_CELL_WORD_0 (port) & SCM_BUF0) == 0; if (buffered) { iomem->read_buf_size = default_read_buf_size; @@ -954,7 +1265,7 @@ iomem->write_buf_size = 1; } - pt = SCM_PTAB_ENTRY (port); + scm_t_port *pt = SCM_PTAB_ENTRY (port); /* Match the expectation of `binary-port?'. */ pt->encoding = NULL; pt->rw_random = 1; @@ -973,74 +1284,9 @@ pt->read_pos = pt->read_end = pt->read_buf; pt->write_pos = pt->write_buf; pt->write_end = pt->write_buf + pt->write_buf_size; - - SCM_SETSTREAM (port, iomem); } -/* Re-initialize a memory port, updating its read/write buffer sizes. - An exception is thrown if the port is unbuffered. - TODO: Allow switching buffered/unbuffered. - An exception is also thrown if data is still buffered, except in the case - where the buffer size isn't changing (since that's just a nop). */ - -static void -ioscm_reinit_memory_port (SCM port, size_t read_buf_size, - size_t write_buf_size, const char *func_name) -{ - scm_t_port *pt = SCM_PTAB_ENTRY (port); - ioscm_memory_port *iomem = (ioscm_memory_port *) SCM_STREAM (port); - - gdb_assert (read_buf_size >= min_memory_port_buf_size - && read_buf_size <= max_memory_port_buf_size); - gdb_assert (write_buf_size >= min_memory_port_buf_size - && write_buf_size <= max_memory_port_buf_size); - - /* First check if the port is unbuffered. */ - - if (pt->read_buf == &pt->shortbuf) - { - gdb_assert (pt->write_buf == &pt->shortbuf); - scm_misc_error (func_name, _("port is unbuffered: ~a"), - scm_list_1 (port)); - } - - /* Next check if anything is buffered. */ - - if (read_buf_size != pt->read_buf_size - && pt->read_end != pt->read_buf) - { - scm_misc_error (func_name, _("read buffer not empty: ~a"), - scm_list_1 (port)); - } - - if (write_buf_size != pt->write_buf_size - && pt->write_pos != pt->write_buf) - { - scm_misc_error (func_name, _("write buffer not empty: ~a"), - scm_list_1 (port)); - } - - /* Now we can update the buffer sizes, but only if the size has changed. */ - - if (read_buf_size != pt->read_buf_size) - { - iomem->read_buf_size = read_buf_size; - pt->read_buf_size = read_buf_size; - xfree (pt->read_buf); - pt->read_buf = (unsigned char *) xmalloc (pt->read_buf_size); - pt->read_pos = pt->read_end = pt->read_buf; - } - - if (write_buf_size != pt->write_buf_size) - { - iomem->write_buf_size = write_buf_size; - pt->write_buf_size = write_buf_size; - xfree (pt->write_buf); - pt->write_buf = (unsigned char *) xmalloc (pt->write_buf_size); - pt->write_pos = pt->write_buf; - pt->write_end = pt->write_buf + pt->write_buf_size; - } -} +#endif /* (open-memory [#:mode string] [#:start address] [#:size integer]) -> port Return a port that can be used for reading and writing memory. @@ -1109,9 +1355,19 @@ mode_bits = ioscm_parse_mode_bits (FUNC_NAME, mode); - port = ioscm_open_port (memory_port_desc, mode_bits); + /* Edge case: empty range -> unbuffered. + There's no need to disallow empty ranges, but we need an unbuffered port + to get the semantics right. */ + if (size == 0) + mode_bits |= SCM_BUF0; + + auto stream = ioscm_init_memory_port_stream (start, end); + port = ioscm_open_port (memory_port_desc, mode_bits, + (scm_t_bits) stream); - ioscm_init_memory_port (port, start, end); +#if USING_GUILE_BEFORE_2_2 + ioscm_init_memory_port_buffers (port); +#endif scm_dynwind_end (); @@ -1124,7 +1380,11 @@ static int gdbscm_is_memory_port (SCM obj) { +#if USING_GUILE_BEFORE_2_2 return !SCM_IMP (obj) && (SCM_TYP16 (obj) == memory_port_desc); +#else + return SCM_PORTP (obj) && (SCM_PORT_TYPE (obj) == memory_port_desc); +#endif } /* (memory-port? obj) -> boolean */ @@ -1155,6 +1415,7 @@ static SCM gdbscm_memory_port_read_buffer_size (SCM port) { +#if USING_GUILE_BEFORE_2_2 ioscm_memory_port *iomem; SCM_ASSERT_TYPE (gdbscm_is_memory_port (port), port, SCM_ARG1, FUNC_NAME, @@ -1162,6 +1423,9 @@ iomem = (ioscm_memory_port *) SCM_STREAM (port); return scm_from_uint (iomem->read_buf_size); +#else + return scm_from_uint (0); +#endif } /* (set-memory-port-read-buffer-size! port size) -> unspecified @@ -1171,6 +1435,7 @@ static SCM gdbscm_set_memory_port_read_buffer_size_x (SCM port, SCM size) { +#if USING_GUILE_BEFORE_2_2 ioscm_memory_port *iomem; SCM_ASSERT_TYPE (gdbscm_is_memory_port (port), port, SCM_ARG1, FUNC_NAME, @@ -1190,6 +1455,9 @@ FUNC_NAME); return SCM_UNSPECIFIED; +#else + return scm_setvbuf (port, scm_from_utf8_symbol ("block"), size); +#endif } /* (memory-port-write-buffer-size port) -> integer */ @@ -1197,6 +1465,7 @@ static SCM gdbscm_memory_port_write_buffer_size (SCM port) { +#if USING_GUILE_BEFORE_2_2 ioscm_memory_port *iomem; SCM_ASSERT_TYPE (gdbscm_is_memory_port (port), port, SCM_ARG1, FUNC_NAME, @@ -1204,6 +1473,9 @@ iomem = (ioscm_memory_port *) SCM_STREAM (port); return scm_from_uint (iomem->write_buf_size); +#else + return scm_from_uint (0); +#endif } /* (set-memory-port-write-buffer-size! port size) -> unspecified @@ -1213,6 +1485,7 @@ static SCM gdbscm_set_memory_port_write_buffer_size_x (SCM port, SCM size) { +#if USING_GUILE_BEFORE_2_2 ioscm_memory_port *iomem; SCM_ASSERT_TYPE (gdbscm_is_memory_port (port), port, SCM_ARG1, FUNC_NAME, @@ -1232,6 +1505,9 @@ FUNC_NAME); return SCM_UNSPECIFIED; +#else + return scm_setvbuf (port, scm_from_utf8_symbol ("block"), size); +#endif } /* Initialize gdb ports. */ @@ -1366,9 +1642,11 @@ start_keyword = scm_from_latin1_keyword ("start"); size_keyword = scm_from_latin1_keyword ("size"); +#if USING_GUILE_BEFORE_2_2 /* Error message text for "out of range" memory port buffer sizes. */ out_of_range_buf_size = xstrprintf ("size not between %u - %u", min_memory_port_buf_size, max_memory_port_buf_size); +#endif } diff -Nru gdb-9.1/gdb/guile/scm-pretty-print.c gdb-10.2/gdb/guile/scm-pretty-print.c --- gdb-9.1/gdb/guile/scm-pretty-print.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/guile/scm-pretty-print.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* GDB/Scheme pretty-printing. - Copyright (C) 2008-2020 Free Software Foundation, Inc. + Copyright (C) 2008-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -943,36 +943,32 @@ enum ext_lang_rc gdbscm_apply_val_pretty_printer (const struct extension_language_defn *extlang, - struct type *type, - LONGEST embedded_offset, CORE_ADDR address, + struct value *value, struct ui_file *stream, int recurse, - struct value *val, const struct value_print_options *options, const struct language_defn *language) { + struct type *type = value_type (value); struct gdbarch *gdbarch = get_type_arch (type); SCM exception = SCM_BOOL_F; SCM printer = SCM_BOOL_F; SCM val_obj = SCM_BOOL_F; - struct value *value; enum display_hint hint; enum ext_lang_rc result = EXT_LANG_RC_NOP; enum string_repr_result print_result; - if (value_lazy (val)) - value_fetch_lazy (val); + if (value_lazy (value)) + value_fetch_lazy (value); /* No pretty-printer support for unavailable values. */ - if (!value_bytes_available (val, embedded_offset, TYPE_LENGTH (type))) + if (!value_bytes_available (value, 0, TYPE_LENGTH (type))) return EXT_LANG_RC_NOP; if (!gdb_scheme_initialized) return EXT_LANG_RC_NOP; /* Instantiate the printer. */ - value = value_from_component (val, type, embedded_offset); - - val_obj = vlscm_scm_from_value (value); + val_obj = vlscm_scm_from_value_no_release (value); if (gdbscm_is_exception (val_obj)) { exception = val_obj; diff -Nru gdb-9.1/gdb/guile/scm-progspace.c gdb-10.2/gdb/guile/scm-progspace.c --- gdb-9.1/gdb/guile/scm-progspace.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/guile/scm-progspace.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Guile interface to program spaces. - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -353,17 +353,16 @@ static SCM gdbscm_progspaces (void) { - struct program_space *ps; SCM result; result = SCM_EOL; - ALL_PSPACES (ps) - { - SCM item = psscm_scm_from_pspace (ps); + for (struct program_space *ps : program_spaces) + { + SCM item = psscm_scm_from_pspace (ps); - result = scm_cons (item, result); - } + result = scm_cons (item, result); + } return scm_reverse_x (result, SCM_EOL); } diff -Nru gdb-9.1/gdb/guile/scm-safe-call.c gdb-10.2/gdb/guile/scm-safe-call.c --- gdb-9.1/gdb/guile/scm-safe-call.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/guile/scm-safe-call.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* GDB/Scheme support for safe calls into the Guile interpreter. - Copyright (C) 2014-2020 Free Software Foundation, Inc. + Copyright (C) 2014-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/guile/scm-string.c gdb-10.2/gdb/guile/scm-string.c --- gdb-9.1/gdb/guile/scm-string.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/guile/scm-string.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* GDB/Scheme charset interface. - Copyright (C) 2014-2020 Free Software Foundation, Inc. + Copyright (C) 2014-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/guile/scm-symbol.c gdb-10.2/gdb/guile/scm-symbol.c --- gdb-9.1/gdb/guile/scm-symbol.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/guile/scm-symbol.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Scheme interface to symbols. - Copyright (C) 2008-2020 Free Software Foundation, Inc. + Copyright (C) 2008-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/guile/scm-symtab.c gdb-10.2/gdb/guile/scm-symtab.c --- gdb-9.1/gdb/guile/scm-symtab.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/guile/scm-symtab.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Scheme interface to symbol tables. - Copyright (C) 2008-2020 Free Software Foundation, Inc. + Copyright (C) 2008-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/guile/scm-type.c gdb-10.2/gdb/guile/scm-type.c --- gdb-9.1/gdb/guile/scm-type.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/guile/scm-type.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Scheme interface to types. - Copyright (C) 2008-2020 Free Software Foundation, Inc. + Copyright (C) 2008-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -27,7 +27,7 @@ #include "objfiles.h" #include "language.h" #include "bcache.h" -#include "dwarf2loc.h" +#include "dwarf2/loc.h" #include "typeprint.h" #include "guile-internal.h" @@ -512,9 +512,9 @@ struct type *type = tyscm_field_smob_containing_type (f_smob); /* This should be non-NULL by construction. */ - gdb_assert (TYPE_FIELDS (type) != NULL); + gdb_assert (type->fields () != NULL); - return &TYPE_FIELD (type, f_smob->field_num); + return &type->field (f_smob->field_num); } /* Type smob accessors. */ @@ -529,7 +529,7 @@ = tyscm_get_type_smob_arg_unsafe (self, SCM_ARG1, FUNC_NAME); struct type *type = t_smob->type; - return scm_from_int (TYPE_CODE (type)); + return scm_from_int (type->code ()); } /* (type-fields <gdb:type>) -> list @@ -560,7 +560,7 @@ containing_type_scm = tyscm_scm_from_type (containing_type); result = SCM_EOL; - for (i = 0; i < TYPE_NFIELDS (containing_type); ++i) + for (i = 0; i < containing_type->num_fields (); ++i) result = scm_cons (tyscm_make_field_smob (containing_type_scm, i), result); return scm_reverse_x (result, SCM_EOL); @@ -577,10 +577,10 @@ struct type *type = t_smob->type; const char *tagname = nullptr; - if (TYPE_CODE (type) == TYPE_CODE_STRUCT - || TYPE_CODE (type) == TYPE_CODE_UNION - || TYPE_CODE (type) == TYPE_CODE_ENUM) - tagname = TYPE_NAME (type); + if (type->code () == TYPE_CODE_STRUCT + || type->code () == TYPE_CODE_UNION + || type->code () == TYPE_CODE_ENUM) + tagname = type->name (); if (tagname == nullptr) return SCM_BOOL_F; @@ -597,9 +597,9 @@ = tyscm_get_type_smob_arg_unsafe (self, SCM_ARG1, FUNC_NAME); struct type *type = t_smob->type; - if (!TYPE_NAME (type)) + if (!type->name ()) return SCM_BOOL_F; - return gdbscm_scm_from_c_string (TYPE_NAME (type)); + return gdbscm_scm_from_c_string (type->name ()); } /* (type-print-name <gdb:type>) -> string @@ -685,17 +685,17 @@ } GDBSCM_HANDLE_GDB_EXCEPTION (exc); - if (TYPE_CODE (type) != TYPE_CODE_PTR - && TYPE_CODE (type) != TYPE_CODE_REF) + if (type->code () != TYPE_CODE_PTR + && type->code () != TYPE_CODE_REF) break; type = TYPE_TARGET_TYPE (type); } /* If this is not a struct, union, or enum type, raise TypeError exception. */ - if (TYPE_CODE (type) != TYPE_CODE_STRUCT - && TYPE_CODE (type) != TYPE_CODE_UNION - && TYPE_CODE (type) != TYPE_CODE_ENUM) + if (type->code () != TYPE_CODE_STRUCT + && type->code () != TYPE_CODE_UNION + && type->code () != TYPE_CODE_ENUM) return NULL; return type; @@ -817,21 +817,25 @@ /* Initialize these to appease GCC warnings. */ LONGEST low = 0, high = 0; - SCM_ASSERT_TYPE (TYPE_CODE (type) == TYPE_CODE_ARRAY - || TYPE_CODE (type) == TYPE_CODE_STRING - || TYPE_CODE (type) == TYPE_CODE_RANGE, + SCM_ASSERT_TYPE (type->code () == TYPE_CODE_ARRAY + || type->code () == TYPE_CODE_STRING + || type->code () == TYPE_CODE_RANGE, self, SCM_ARG1, FUNC_NAME, _("ranged type")); - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_ARRAY: case TYPE_CODE_STRING: - low = TYPE_LOW_BOUND (TYPE_INDEX_TYPE (type)); - high = TYPE_HIGH_BOUND (TYPE_INDEX_TYPE (type)); - break; case TYPE_CODE_RANGE: - low = TYPE_LOW_BOUND (type); - high = TYPE_HIGH_BOUND (type); + if (type->bounds ()->low.kind () == PROP_CONST) + low = type->bounds ()->low.const_val (); + else + low = 0; + + if (type->bounds ()->high.kind () == PROP_CONST) + high = type->bounds ()->high.const_val (); + else + high = 0; break; } @@ -969,7 +973,7 @@ gdbscm_out_of_range_error (FUNC_NAME, SCM_ARG1, self, _(not_composite_error)); - return scm_from_long (TYPE_NFIELDS (type)); + return scm_from_long (type->num_fields ()); } /* (type-field <gdb:type> string) -> <gdb:field> @@ -997,7 +1001,7 @@ { gdb::unique_xmalloc_ptr<char> field = gdbscm_scm_to_c_string (field_scm); - for (int i = 0; i < TYPE_NFIELDS (type); i++) + for (int i = 0; i < type->num_fields (); i++) { const char *t_field_name = TYPE_FIELD_NAME (type, i); @@ -1039,7 +1043,7 @@ gdb::unique_xmalloc_ptr<char> field = gdbscm_scm_to_c_string (field_scm); - for (int i = 0; i < TYPE_NFIELDS (type); i++) + for (int i = 0; i < type->num_fields (); i++) { const char *t_field_name = TYPE_FIELD_NAME (type, i); @@ -1105,11 +1109,11 @@ type = t_smob->type; SCM_ASSERT_TYPE (scm_is_signed_integer (progress, - 0, TYPE_NFIELDS (type)), + 0, type->num_fields ()), progress, SCM_ARG1, FUNC_NAME, _("integer")); field = scm_to_int (progress); - if (field < TYPE_NFIELDS (type)) + if (field < type->num_fields ()) { result = tyscm_make_field_smob (object, field); itscm_set_iterator_smob_progress_x (i_smob, scm_from_int (field + 1)); @@ -1147,8 +1151,8 @@ struct field *field = tyscm_field_smob_to_field (f_smob); /* A field can have a NULL type in some situations. */ - if (FIELD_TYPE (*field)) - return tyscm_scm_from_type (FIELD_TYPE (*field)); + if (field->type ()) + return tyscm_scm_from_type (field->type ()); return SCM_BOOL_F; } @@ -1163,7 +1167,7 @@ struct field *field = tyscm_field_smob_to_field (f_smob); struct type *type = tyscm_field_smob_containing_type (f_smob); - SCM_ASSERT_TYPE (TYPE_CODE (type) == TYPE_CODE_ENUM, + SCM_ASSERT_TYPE (type->code () == TYPE_CODE_ENUM, self, SCM_ARG1, FUNC_NAME, _("enum type")); return scm_from_long (FIELD_ENUMVAL (*field)); @@ -1180,7 +1184,7 @@ struct field *field = tyscm_field_smob_to_field (f_smob); struct type *type = tyscm_field_smob_containing_type (f_smob); - SCM_ASSERT_TYPE (TYPE_CODE (type) != TYPE_CODE_ENUM, + SCM_ASSERT_TYPE (type->code () != TYPE_CODE_ENUM, self, SCM_ARG1, FUNC_NAME, _("non-enum type")); return scm_from_long (FIELD_BITPOS (*field)); @@ -1222,7 +1226,7 @@ = tyscm_get_field_smob_arg_unsafe (self, SCM_ARG1, FUNC_NAME); struct type *type = tyscm_field_smob_containing_type (f_smob); - if (TYPE_CODE (type) == TYPE_CODE_STRUCT) + if (type->code () == TYPE_CODE_STRUCT) return scm_from_bool (f_smob->field_num < TYPE_N_BASECLASSES (type)); return SCM_BOOL_F; } diff -Nru gdb-9.1/gdb/guile/scm-utils.c gdb-10.2/gdb/guile/scm-utils.c --- gdb-9.1/gdb/guile/scm-utils.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/guile/scm-utils.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* General utility routines for GDB/Scheme code. - Copyright (C) 2014-2020 Free Software Foundation, Inc. + Copyright (C) 2014-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/guile/scm-value.c gdb-10.2/gdb/guile/scm-value.c --- gdb-9.1/gdb/guile/scm-value.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/guile/scm-value.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Scheme interface to values. - Copyright (C) 2008-2020 Free Software Foundation, Inc. + Copyright (C) 2008-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -261,6 +261,24 @@ return v_scm; } +/* Create a new <gdb:value> object that encapsulates VALUE. + The value is not released from the all_values chain. */ + +SCM +vlscm_scm_from_value_no_release (struct value *value) +{ + /* N.B. It's important to not cause any side-effects until we know the + conversion worked. */ + SCM v_scm = vlscm_make_value_smob (); + value_smob *v_smob = (value_smob *) SCM_SMOB_DATA (v_scm); + + value_incref (value); + v_smob->value = value; + vlscm_remember_scheme_value (v_smob); + + return v_scm; +} + /* Returns the <gdb:value> object in SELF. Throws an exception if SELF is not a <gdb:value> object. */ @@ -452,7 +470,7 @@ struct value *res_val; - switch (TYPE_CODE (check_typedef (value_type (value)))) + switch (check_typedef (value_type (value))->code ()) { case TYPE_CODE_PTR: res_val = value_ind (value); @@ -505,12 +523,12 @@ type = value_type (value); type = check_typedef (type); - if (((TYPE_CODE (type) == TYPE_CODE_PTR) - || (TYPE_CODE (type) == TYPE_CODE_REF)) - && (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_STRUCT)) + if (((type->code () == TYPE_CODE_PTR) + || (type->code () == TYPE_CODE_REF)) + && (TYPE_TARGET_TYPE (type)->code () == TYPE_CODE_STRUCT)) { struct value *target; - int was_pointer = TYPE_CODE (type) == TYPE_CODE_PTR; + int was_pointer = type->code () == TYPE_CODE_PTR; if (was_pointer) target = value_ind (value); @@ -526,7 +544,7 @@ type = lookup_lvalue_reference_type (type); } } - else if (TYPE_CODE (type) == TYPE_CODE_STRUCT) + else if (type->code () == TYPE_CODE_STRUCT) type = value_rtti_type (value, NULL, NULL, NULL); else { @@ -664,8 +682,8 @@ a subscript. */ struct value *tmp = coerce_ref (value); struct type *tmp_type = check_typedef (value_type (tmp)); - if (TYPE_CODE (tmp_type) != TYPE_CODE_ARRAY - && TYPE_CODE (tmp_type) != TYPE_CODE_PTR) + if (tmp_type->code () != TYPE_CODE_ARRAY + && tmp_type->code () != TYPE_CODE_PTR) error (_("Cannot subscript requested type")); struct value *res_val = value_subscript (tmp, value_as_long (index)); @@ -697,7 +715,7 @@ } GDBSCM_HANDLE_GDB_EXCEPTION (exc); - SCM_ASSERT_TYPE (TYPE_CODE (ftype) == TYPE_CODE_FUNC, self, + SCM_ASSERT_TYPE (ftype->code () == TYPE_CODE_FUNC, self, SCM_ARG1, FUNC_NAME, _("function (value of TYPE_CODE_FUNC)")); @@ -778,11 +796,11 @@ static int is_intlike (struct type *type, int ptr_ok) { - return (TYPE_CODE (type) == TYPE_CODE_INT - || TYPE_CODE (type) == TYPE_CODE_ENUM - || TYPE_CODE (type) == TYPE_CODE_BOOL - || TYPE_CODE (type) == TYPE_CODE_CHAR - || (ptr_ok && TYPE_CODE (type) == TYPE_CODE_PTR)); + return (type->code () == TYPE_CODE_INT + || type->code () == TYPE_CODE_ENUM + || type->code () == TYPE_CODE_BOOL + || type->code () == TYPE_CODE_CHAR + || (ptr_ok && type->code () == TYPE_CODE_PTR)); } /* (value->bool <gdb:value>) -> boolean @@ -815,7 +833,7 @@ try { - if (TYPE_CODE (type) == TYPE_CODE_PTR) + if (type->code () == TYPE_CODE_PTR) l = value_as_address (value); else l = value_as_long (value); @@ -859,7 +877,7 @@ try { - if (TYPE_CODE (type) == TYPE_CODE_PTR) + if (type->code () == TYPE_CODE_PTR) l = value_as_address (value); else l = value_as_long (value); @@ -902,7 +920,7 @@ } GDBSCM_HANDLE_GDB_EXCEPTION (exc); - SCM_ASSERT_TYPE (is_intlike (type, 0) || TYPE_CODE (type) == TYPE_CODE_FLT, + SCM_ASSERT_TYPE (is_intlike (type, 0) || type->code () == TYPE_CODE_FLT, self, SCM_ARG1, FUNC_NAME, _("number")); try @@ -1095,7 +1113,7 @@ type = value_type (value); realtype = check_typedef (type); - switch (TYPE_CODE (realtype)) + switch (realtype->code ()) { case TYPE_CODE_ARRAY: { diff -Nru gdb-9.1/gdb/h8300-tdep.c gdb-10.2/gdb/h8300-tdep.c --- gdb-9.1/gdb/h8300-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/h8300-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-machine dependent code for Renesas H8/300, for GDB. - Copyright (C) 1988-2020 Free Software Foundation, Inc. + Copyright (C) 1988-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -29,7 +29,7 @@ #include "gdbcore.h" #include "objfiles.h" #include "dis-asm.h" -#include "dwarf2-frame.h" +#include "dwarf2/frame.h" #include "frame-base.h" #include "frame-unwind.h" @@ -178,10 +178,10 @@ if (IS_MOVB_Rn24_SP (read_memory_unsigned_integer (pc + 2, 2, byte_order))) { - LONGEST disp = read_memory_integer (pc + 4, 4, byte_order); + ULONGEST disp = read_memory_unsigned_integer (pc + 4, 4, byte_order); /* ... and d:24 is negative. */ - if (disp < 0 && disp > 0xffffff) + if ((disp & 0x00800000) != 0) return 8; } } @@ -197,10 +197,10 @@ if (IS_MOVW_Rn24_SP (read_memory_unsigned_integer (pc + 2, 2, byte_order))) { - LONGEST disp = read_memory_integer (pc + 4, 4, byte_order); + ULONGEST disp = read_memory_unsigned_integer (pc + 4, 4, byte_order); /* ... and d:24 is negative. */ - if (disp < 0 && disp > 0xffffff) + if ((disp & 0x00800000) != 0) return 8; } } @@ -219,10 +219,11 @@ { if (IS_MOVL_Rn24_SP (read_memory_integer (pc + 4, 2, byte_order))) { - LONGEST disp = read_memory_integer (pc + 6, 4, byte_order); + ULONGEST disp = read_memory_unsigned_integer (pc + 6, 4, + byte_order); /* ... and d:24 is negative. */ - if (disp < 0 && disp > 0xffffff) + if ((disp & 0x00800000) != 0) return 10; } } @@ -740,7 +741,7 @@ store_unsigned_integer (valbuf + 2, 2, byte_order, c); break; case 8: /* long long is now 8 bytes. */ - if (TYPE_CODE (type) == TYPE_CODE_INT) + if (type->code () == TYPE_CODE_INT) { regcache_cooked_read_unsigned (regcache, E_RET0_REGNUM, &addr); c = read_memory_unsigned_integer ((CORE_ADDR) addr, len, byte_order); @@ -771,7 +772,7 @@ store_unsigned_integer (valbuf, TYPE_LENGTH (type), byte_order, c); break; case 8: /* long long is now 8 bytes. */ - if (TYPE_CODE (type) == TYPE_CODE_INT) + if (type->code () == TYPE_CODE_INT) { regcache_cooked_read_unsigned (regcache, E_RET0_REGNUM, &c); store_unsigned_integer (valbuf, 4, byte_order, c); @@ -792,8 +793,8 @@ /* Types of 1, 2 or 4 bytes are returned in R0/R1, everything else on the stack. */ - if (TYPE_CODE (value_type) == TYPE_CODE_STRUCT - || TYPE_CODE (value_type) == TYPE_CODE_UNION) + if (value_type->code () == TYPE_CODE_STRUCT + || value_type->code () == TYPE_CODE_UNION) return 1; return !(TYPE_LENGTH (value_type) == 1 || TYPE_LENGTH (value_type) == 2 @@ -805,14 +806,14 @@ { /* Types of 1, 2 or 4 bytes are returned in R0, INT types of 8 bytes are returned in R0/R1, everything else on the stack. */ - if (TYPE_CODE (value_type) == TYPE_CODE_STRUCT - || TYPE_CODE (value_type) == TYPE_CODE_UNION) + if (value_type->code () == TYPE_CODE_STRUCT + || value_type->code () == TYPE_CODE_UNION) return 1; return !(TYPE_LENGTH (value_type) == 1 || TYPE_LENGTH (value_type) == 2 || TYPE_LENGTH (value_type) == 4 || (TYPE_LENGTH (value_type) == 8 - && TYPE_CODE (value_type) == TYPE_CODE_INT)); + && value_type->code () == TYPE_CODE_INT)); } /* Function: store_return_value @@ -1377,8 +1378,9 @@ } +void _initialize_h8300_tdep (); void -_initialize_h8300_tdep (void) +_initialize_h8300_tdep () { register_gdbarch_init (bfd_arch_h8300, h8300_gdbarch_init); } diff -Nru gdb-9.1/gdb/hppa-bsd-tdep.c gdb-10.2/gdb/hppa-bsd-tdep.c --- gdb-9.1/gdb/hppa-bsd-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/hppa-bsd-tdep.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for HP PA-RISC BSD's. - Copyright (C) 2004-2020 Free Software Foundation, Inc. + Copyright (C) 2004-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -26,7 +26,7 @@ #include "hppa-tdep.h" #include "hppa-bsd-tdep.h" -#include "dwarf2-frame.h" +#include "dwarf2/frame.h" #include "solib-svr4.h" static CORE_ADDR @@ -87,8 +87,7 @@ we have to do it ourselves. */ pltgot = extract_unsigned_integer (buf, sizeof buf, byte_order); - pltgot += ANOFFSET (sec->objfile->section_offsets, - SECT_OFF_TEXT (sec->objfile)); + pltgot += sec->objfile->text_section_offset (); return pltgot; } diff -Nru gdb-9.1/gdb/hppa-bsd-tdep.h gdb-10.2/gdb/hppa-bsd-tdep.h --- gdb-9.1/gdb/hppa-bsd-tdep.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/hppa-bsd-tdep.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for HP PA-RISC BSD's. - Copyright (C) 2009-2020 Free Software Foundation, Inc. + Copyright (C) 2009-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/hppa-linux-nat.c gdb-10.2/gdb/hppa-linux-nat.c --- gdb-9.1/gdb/hppa-linux-nat.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/hppa-linux-nat.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Functions specific to running GDB native on HPPA running GNU/Linux. - Copyright (C) 2004-2020 Free Software Foundation, Inc. + Copyright (C) 2004-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -384,8 +384,9 @@ } } +void _initialize_hppa_linux_nat (); void -_initialize_hppa_linux_nat (void) +_initialize_hppa_linux_nat () { /* Register the target. */ linux_target = &the_hppa_linux_nat_target; diff -Nru gdb-9.1/gdb/hppa-linux-offsets.h gdb-10.2/gdb/hppa-linux-offsets.h --- gdb-9.1/gdb/hppa-linux-offsets.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/hppa-linux-offsets.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Register offsets for HPPA running GNU/Linux. - Copyright (C) 2007-2020 Free Software Foundation, Inc. + Copyright (C) 2007-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/hppa-linux-tdep.c gdb-10.2/gdb/hppa-linux-tdep.c --- gdb-9.1/gdb/hppa-linux-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/hppa-linux-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for GNU/Linux running on PA-RISC, for GDB. - Copyright (C) 2004-2020 Free Software Foundation, Inc. + Copyright (C) 2004-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -26,7 +26,7 @@ #include "glibc-tdep.h" #include "frame-unwind.h" #include "trad-frame.h" -#include "dwarf2-frame.h" +#include "dwarf2/frame.h" #include "value.h" #include "regset.h" #include "regcache.h" @@ -526,8 +526,9 @@ svr4_fetch_objfile_link_map); } +void _initialize_hppa_linux_tdep (); void -_initialize_hppa_linux_tdep (void) +_initialize_hppa_linux_tdep () { gdbarch_register_osabi (bfd_arch_hppa, 0, GDB_OSABI_LINUX, hppa_linux_init_abi); diff -Nru gdb-9.1/gdb/hppa-nbsd-nat.c gdb-10.2/gdb/hppa-nbsd-nat.c --- gdb-9.1/gdb/hppa-nbsd-nat.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/hppa-nbsd-nat.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Native-dependent code for NetBSD/hppa. - Copyright (C) 2008-2020 Free Software Foundation, Inc. + Copyright (C) 2008-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -171,12 +171,13 @@ { pid_t pid = regcache->ptid ().pid (); + int lwp = regcache->ptid ().lwp (); if (regnum == -1 || hppanbsd_gregset_supplies_p (regnum)) { struct reg regs; - if (ptrace (PT_GETREGS, pid, (PTRACE_TYPE_ARG3) ®s, 0) == -1) + if (ptrace (PT_GETREGS, pid, (PTRACE_TYPE_ARG3) ®s, lwp) == -1) perror_with_name (_("Couldn't get registers")); hppanbsd_supply_gregset (regcache, ®s); @@ -186,7 +187,7 @@ { struct fpreg fpregs; - if (ptrace (PT_GETFPREGS, pid, (PTRACE_TYPE_ARG3) &fpregs, 0) == -1) + if (ptrace (PT_GETFPREGS, pid, (PTRACE_TYPE_ARG3) &fpregs, lwp) == -1) perror_with_name (_("Couldn't get floating point status")); hppanbsd_supply_fpregset (regcache, &fpregs); @@ -200,17 +201,18 @@ hppa_nbsd_nat_target::store_registers (struct regcache *regcache, int regnum) { pid_t pid = regcache->ptid ().pid (); + int lwp = regcache->ptid ().lwp (); if (regnum == -1 || hppanbsd_gregset_supplies_p (regnum)) { struct reg regs; - if (ptrace (PT_GETREGS, pid, (PTRACE_TYPE_ARG3) ®s, 0) == -1) + if (ptrace (PT_GETREGS, pid, (PTRACE_TYPE_ARG3) ®s, lwp) == -1) perror_with_name (_("Couldn't get registers")); hppanbsd_collect_gregset (regcache, ®s, regnum); - if (ptrace (PT_SETREGS, pid, (PTRACE_TYPE_ARG3) ®s, 0) == -1) + if (ptrace (PT_SETREGS, pid, (PTRACE_TYPE_ARG3) ®s, lwp) == -1) perror_with_name (_("Couldn't write registers")); } @@ -218,18 +220,19 @@ { struct fpreg fpregs; - if (ptrace (PT_GETFPREGS, pid, (PTRACE_TYPE_ARG3) &fpregs, 0) == -1) + if (ptrace (PT_GETFPREGS, pid, (PTRACE_TYPE_ARG3) &fpregs, lwp) == -1) perror_with_name (_("Couldn't get floating point status")); hppanbsd_collect_fpregset (regcache, &fpregs, regnum); - if (ptrace (PT_SETFPREGS, pid, (PTRACE_TYPE_ARG3) &fpregs, 0) == -1) + if (ptrace (PT_SETFPREGS, pid, (PTRACE_TYPE_ARG3) &fpregs, lwp) == -1) perror_with_name (_("Couldn't write floating point status")); } } +void _initialize_hppanbsd_nat (); void -_initialize_hppanbsd_nat (void) +_initialize_hppanbsd_nat () { add_inf_child_target (&the_hppa_nbsd_nat_target); } diff -Nru gdb-9.1/gdb/hppa-nbsd-tdep.c gdb-10.2/gdb/hppa-nbsd-tdep.c --- gdb-9.1/gdb/hppa-nbsd-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/hppa-nbsd-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for NetBSD/hppa - Copyright (C) 2008-2020 Free Software Foundation, Inc. + Copyright (C) 2008-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -27,6 +27,7 @@ #include "hppa-tdep.h" #include "hppa-bsd-tdep.h" +#include "nbsd-tdep.h" #include "gdbarch.h" /* From <machine/mcontext.h>. */ @@ -201,6 +202,8 @@ /* Obviously NetBSD is BSD-based. */ hppabsd_init_abi (info, gdbarch); + nbsd_init_abi (info, gdbarch); + /* Core file support. */ set_gdbarch_iterate_over_regset_sections (gdbarch, hppanbsd_iterate_over_regset_sections); @@ -208,8 +211,9 @@ tramp_frame_prepend_unwinder (gdbarch, &hppanbsd_sigtramp_si4); } +void _initialize_hppanbsd_tdep (); void -_initialize_hppanbsd_tdep (void) +_initialize_hppanbsd_tdep () { gdbarch_register_osabi (bfd_arch_hppa, 0, GDB_OSABI_NETBSD, hppanbsd_init_abi); diff -Nru gdb-9.1/gdb/hppa-obsd-nat.c gdb-10.2/gdb/hppa-obsd-nat.c --- gdb-9.1/gdb/hppa-obsd-nat.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/hppa-obsd-nat.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Native-dependent code for OpenBSD/hppa. - Copyright (C) 2004-2020 Free Software Foundation, Inc. + Copyright (C) 2004-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -252,8 +252,9 @@ } } +void _initialize_hppaobsd_nat (); void -_initialize_hppaobsd_nat (void) +_initialize_hppaobsd_nat () { add_inf_child_target (&the_hppa_obsd_nat_target); } diff -Nru gdb-9.1/gdb/hppa-obsd-tdep.c gdb-10.2/gdb/hppa-obsd-tdep.c --- gdb-9.1/gdb/hppa-obsd-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/hppa-obsd-tdep.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for OpenBSD/hppa - Copyright (C) 2004-2020 Free Software Foundation, Inc. + Copyright (C) 2004-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -168,8 +168,9 @@ (gdbarch, hppaobsd_iterate_over_regset_sections); } +void _initialize_hppabsd_tdep (); void -_initialize_hppabsd_tdep (void) +_initialize_hppabsd_tdep () { gdbarch_register_osabi (bfd_arch_hppa, 0, GDB_OSABI_OPENBSD, hppaobsd_init_abi); diff -Nru gdb-9.1/gdb/hppa-tdep.c gdb-10.2/gdb/hppa-tdep.c --- gdb-9.1/gdb/hppa-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/hppa-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for the HP PA-RISC architecture. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. Contributed by the Center for Software Science at the University of Utah (pa-gdb-bugs@cs.utah.edu). @@ -258,7 +258,7 @@ if (size > 0) { - struct gdbarch *gdbarch = get_objfile_arch (objfile); + struct gdbarch *gdbarch = objfile->arch (); unsigned long tmp; unsigned i; char *buf = (char *) alloca (size); @@ -357,7 +357,7 @@ struct hppa_unwind_info *ui; struct hppa_objfile_private *obj_private; - text_offset = ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile)); + text_offset = objfile->text_section_offset (); ui = (struct hppa_unwind_info *) obstack_alloc (&objfile->objfile_obstack, sizeof (struct hppa_unwind_info)); @@ -763,8 +763,8 @@ store_unsigned_integer (param_val, 4, byte_order, struct_end - struct_ptr); } - else if (TYPE_CODE (type) == TYPE_CODE_INT - || TYPE_CODE (type) == TYPE_CODE_ENUM) + else if (type->code () == TYPE_CODE_INT + || type->code () == TYPE_CODE_ENUM) { /* Integer value store, right aligned. "unpack_long" takes care of any sign-extension problems. */ @@ -773,7 +773,7 @@ unpack_long (type, value_contents (arg))); } - else if (TYPE_CODE (type) == TYPE_CODE_FLT) + else if (type->code () == TYPE_CODE_FLT) { /* Floating point value store, right aligned. */ param_len = align_up (TYPE_LENGTH (type), 4); @@ -876,7 +876,7 @@ static int hppa64_integral_or_pointer_p (const struct type *type) { - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_INT: case TYPE_CODE_BOOL: @@ -903,7 +903,7 @@ static int hppa64_floating_p (const struct type *type) { - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_FLT: { @@ -1064,8 +1064,8 @@ /* If we are passing a function pointer, make sure we pass a function descriptor instead of the function entry address. */ - if (TYPE_CODE (type) == TYPE_CODE_PTR - && TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_FUNC) + if (type->code () == TYPE_CODE_PTR + && TYPE_TARGET_TYPE (type)->code () == TYPE_CODE_FUNC) { ULONGEST codeptr, fptr; @@ -1144,7 +1144,7 @@ /* The value always lives in the right hand end of the register (or register pair)? */ int b; - int reg = TYPE_CODE (type) == TYPE_CODE_FLT ? HPPA_FP4_REGNUM : 28; + int reg = type->code () == TYPE_CODE_FLT ? HPPA_FP4_REGNUM : 28; int part = TYPE_LENGTH (type) % 4; /* The left hand register contains only part of the value, transfer that first so that the rest can be xfered as entire @@ -3168,8 +3168,9 @@ fprintf_unfiltered (file, "elf = %s\n", tdep->is_elf ? "yes" : "no"); } +void _initialize_hppa_tdep (); void -_initialize_hppa_tdep (void) +_initialize_hppa_tdep () { gdbarch_register (bfd_arch_hppa, hppa_gdbarch_init, hppa_dump_tdep); diff -Nru gdb-9.1/gdb/hppa-tdep.h gdb-10.2/gdb/hppa-tdep.h --- gdb-9.1/gdb/hppa-tdep.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/hppa-tdep.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for the HP PA-RISC architecture. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/i386-bsd-nat.c gdb-10.2/gdb/i386-bsd-nat.c --- gdb-9.1/gdb/i386-bsd-nat.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/i386-bsd-nat.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Native-dependent code for modern i386 BSD's. - Copyright (C) 2000-2020 Free Software Foundation, Inc. + Copyright (C) 2000-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -34,6 +34,21 @@ #include "inf-ptrace.h" +static PTRACE_TYPE_RET +gdb_ptrace (PTRACE_TYPE_ARG1 request, ptid_t ptid, PTRACE_TYPE_ARG3 addr, + PTRACE_TYPE_ARG4 data) +{ +#ifdef __NetBSD__ + gdb_assert (data == 0); + /* Support for NetBSD threads: unlike other ptrace implementations in this + file, NetBSD requires that we pass both the pid and lwp. */ + return ptrace (request, ptid.pid (), addr, ptid.lwp ()); +#else + pid_t pid = get_ptrace_pid (ptid); + return ptrace (request, pid, addr, data); +#endif +} + /* In older BSD versions we cannot get at some of the segment registers. FreeBSD for example didn't support the %fs and %gs registers until the 3.0 release. We have autoconf checks for their @@ -130,13 +145,13 @@ void i386bsd_fetch_inferior_registers (struct regcache *regcache, int regnum) { - pid_t pid = get_ptrace_pid (regcache->ptid ()); + ptid_t ptid = regcache->ptid (); if (regnum == -1 || GETREGS_SUPPLIES (regnum)) { struct reg regs; - if (ptrace (PT_GETREGS, pid, (PTRACE_TYPE_ARG3) ®s, 0) == -1) + if (gdb_ptrace (PT_GETREGS, ptid, (PTRACE_TYPE_ARG3) ®s, 0) == -1) perror_with_name (_("Couldn't get registers")); i386bsd_supply_gregset (regcache, ®s); @@ -149,7 +164,7 @@ { register_t base; - if (ptrace (PT_GETFSBASE, pid, (PTRACE_TYPE_ARG3) &base, 0) == -1) + if (gdb_ptrace (PT_GETFSBASE, ptid, (PTRACE_TYPE_ARG3) &base, 0) == -1) perror_with_name (_("Couldn't get segment register fs_base")); regcache->raw_supply (I386_FSBASE_REGNUM, &base); @@ -162,7 +177,7 @@ { register_t base; - if (ptrace (PT_GETGSBASE, pid, (PTRACE_TYPE_ARG3) &base, 0) == -1) + if (gdb_ptrace (PT_GETGSBASE, ptid, (PTRACE_TYPE_ARG3) &base, 0) == -1) perror_with_name (_("Couldn't get segment register gs_base")); regcache->raw_supply (I386_GSBASE_REGNUM, &base); @@ -184,8 +199,8 @@ void *xstateregs; xstateregs = alloca (x86bsd_xsave_len); - if (ptrace (PT_GETXSTATE, pid, - (PTRACE_TYPE_ARG3) xstateregs, 0) == -1) + if (gdb_ptrace (PT_GETXSTATE, ptid, + (PTRACE_TYPE_ARG3) xstateregs, 0) == -1) perror_with_name (_("Couldn't get extended state status")); i387_supply_xsave (regcache, -1, xstateregs); @@ -195,7 +210,8 @@ #ifdef HAVE_PT_GETXMMREGS if (have_ptrace_xmmregs != 0 - && ptrace(PT_GETXMMREGS, pid, (PTRACE_TYPE_ARG3) xmmregs, 0) == 0) + && gdb_ptrace(PT_GETXMMREGS, ptid, + (PTRACE_TYPE_ARG3) xmmregs, 0) == 0) { have_ptrace_xmmregs = 1; i387_supply_fxsave (regcache, -1, xmmregs); @@ -204,7 +220,8 @@ { have_ptrace_xmmregs = 0; #endif - if (ptrace (PT_GETFPREGS, pid, (PTRACE_TYPE_ARG3) &fpregs, 0) == -1) + if (gdb_ptrace (PT_GETFPREGS, ptid, + (PTRACE_TYPE_ARG3) &fpregs, 0) == -1) perror_with_name (_("Couldn't get floating point status")); i387_supply_fsave (regcache, -1, &fpregs); @@ -220,18 +237,18 @@ void i386bsd_store_inferior_registers (struct regcache *regcache, int regnum) { - pid_t pid = get_ptrace_pid (regcache->ptid ()); + ptid_t ptid = regcache->ptid (); if (regnum == -1 || GETREGS_SUPPLIES (regnum)) { struct reg regs; - if (ptrace (PT_GETREGS, pid, (PTRACE_TYPE_ARG3) ®s, 0) == -1) + if (gdb_ptrace (PT_GETREGS, ptid, (PTRACE_TYPE_ARG3) ®s, 0) == -1) perror_with_name (_("Couldn't get registers")); i386bsd_collect_gregset (regcache, ®s, regnum); - if (ptrace (PT_SETREGS, pid, (PTRACE_TYPE_ARG3) ®s, 0) == -1) + if (gdb_ptrace (PT_SETREGS, ptid, (PTRACE_TYPE_ARG3) ®s, 0) == -1) perror_with_name (_("Couldn't write registers")); if (regnum != -1) @@ -245,7 +262,7 @@ regcache->raw_collect (I386_FSBASE_REGNUM, &base); - if (ptrace (PT_SETFSBASE, pid, (PTRACE_TYPE_ARG3) &base, 0) == -1) + if (gdb_ptrace (PT_SETFSBASE, ptid, (PTRACE_TYPE_ARG3) &base, 0) == -1) perror_with_name (_("Couldn't write segment register fs_base")); if (regnum != -1) return; @@ -258,7 +275,7 @@ regcache->raw_collect (I386_GSBASE_REGNUM, &base); - if (ptrace (PT_SETGSBASE, pid, (PTRACE_TYPE_ARG3) &base, 0) == -1) + if (gdb_ptrace (PT_SETGSBASE, ptid, (PTRACE_TYPE_ARG3) &base, 0) == -1) perror_with_name (_("Couldn't write segment register gs_base")); if (regnum != -1) return; @@ -278,14 +295,14 @@ void *xstateregs; xstateregs = alloca (x86bsd_xsave_len); - if (ptrace (PT_GETXSTATE, pid, - (PTRACE_TYPE_ARG3) xstateregs, 0) == -1) + if (gdb_ptrace (PT_GETXSTATE, ptid, + (PTRACE_TYPE_ARG3) xstateregs, 0) == -1) perror_with_name (_("Couldn't get extended state status")); i387_collect_xsave (regcache, -1, xstateregs, 0); - if (ptrace (PT_SETXSTATE, pid, - (PTRACE_TYPE_ARG3) xstateregs, x86bsd_xsave_len) == -1) + if (gdb_ptrace (PT_SETXSTATE, ptid, (PTRACE_TYPE_ARG3) xstateregs, + x86bsd_xsave_len) == -1) perror_with_name (_("Couldn't write extended state status")); return; } @@ -293,25 +310,29 @@ #ifdef HAVE_PT_GETXMMREGS if (have_ptrace_xmmregs != 0 - && ptrace(PT_GETXMMREGS, pid, (PTRACE_TYPE_ARG3) xmmregs, 0) == 0) + && gdb_ptrace(PT_GETXMMREGS, ptid, + (PTRACE_TYPE_ARG3) xmmregs, 0) == 0) { have_ptrace_xmmregs = 1; i387_collect_fxsave (regcache, regnum, xmmregs); - if (ptrace (PT_SETXMMREGS, pid, (PTRACE_TYPE_ARG3) xmmregs, 0) == -1) + if (gdb_ptrace (PT_SETXMMREGS, ptid, + (PTRACE_TYPE_ARG3) xmmregs, 0) == -1) perror_with_name (_("Couldn't write XMM registers")); } else { have_ptrace_xmmregs = 0; #endif - if (ptrace (PT_GETFPREGS, pid, (PTRACE_TYPE_ARG3) &fpregs, 0) == -1) + if (gdb_ptrace (PT_GETFPREGS, ptid, + (PTRACE_TYPE_ARG3) &fpregs, 0) == -1) perror_with_name (_("Couldn't get floating point status")); i387_collect_fsave (regcache, regnum, &fpregs); - if (ptrace (PT_SETFPREGS, pid, (PTRACE_TYPE_ARG3) &fpregs, 0) == -1) + if (gdb_ptrace (PT_SETFPREGS, ptid, + (PTRACE_TYPE_ARG3) &fpregs, 0) == -1) perror_with_name (_("Couldn't write floating point status")); #ifdef HAVE_PT_GETXMMREGS } @@ -319,8 +340,9 @@ } } +void _initialize_i386bsd_nat (); void -_initialize_i386bsd_nat (void) +_initialize_i386bsd_nat () { int offset; diff -Nru gdb-9.1/gdb/i386-bsd-nat.h gdb-10.2/gdb/i386-bsd-nat.h --- gdb-9.1/gdb/i386-bsd-nat.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/i386-bsd-nat.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Native-dependent code for modern i386 BSD's. - Copyright (C) 2004-2020 Free Software Foundation, Inc. + Copyright (C) 2004-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/i386-bsd-tdep.c gdb-10.2/gdb/i386-bsd-tdep.c --- gdb-9.1/gdb/i386-bsd-tdep.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/i386-bsd-tdep.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for i386 BSD's. - Copyright (C) 2001-2020 Free Software Foundation, Inc. + Copyright (C) 2001-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/i386-cygwin-tdep.c gdb-10.2/gdb/i386-cygwin-tdep.c --- gdb-9.1/gdb/i386-cygwin-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/i386-cygwin-tdep.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,262 +0,0 @@ -/* Target-dependent code for Cygwin running on i386's, for GDB. - - Copyright (C) 2003-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "defs.h" -#include "osabi.h" -#include "i386-tdep.h" -#include "windows-tdep.h" -#include "regset.h" -#include "gdb_obstack.h" -#include "xml-support.h" -#include "gdbcore.h" -#include "inferior.h" - -/* Core file support. */ - -/* This vector maps GDB's idea of a register's number into an address - in the windows exception context vector. */ - -static int i386_windows_gregset_reg_offset[] = -{ - 176, /* eax */ - 172, /* ecx */ - 168, /* edx */ - 164, /* ebx */ - - 196, /* esp */ - 180, /* ebp */ - 160, /* esi */ - 156, /* edi */ - - 184, /* eip */ - 192, /* eflags */ - 188, /* cs */ - 200, /* ss */ - - 152, /* ds */ - 148, /* es */ - 144, /* fs */ - 140, /* gs */ - - 56, /* FloatSave.RegisterArea[0 * 10] */ - 66, /* FloatSave.RegisterArea[1 * 10] */ - 76, /* FloatSave.RegisterArea[2 * 10] */ - 86, /* FloatSave.RegisterArea[3 * 10] */ - 96, /* FloatSave.RegisterArea[4 * 10] */ - 106, /* FloatSave.RegisterArea[5 * 10] */ - 116, /* FloatSave.RegisterArea[6 * 10] */ - 126, /* FloatSave.RegisterArea[7 * 10] */ - - 28, /* FloatSave.ControlWord */ - 32, /* FloatSave.StatusWord */ - 36, /* FloatSave.TagWord */ - 44, /* FloatSave.ErrorSelector */ - 40, /* FloatSave.ErrorOffset */ - 52, /* FloatSave.DataSelector */ - 48, /* FloatSave.DataOffset */ - 44, /* FloatSave.ErrorSelector */ - - /* XMM0-7 */ - 364, /* ExtendedRegisters[10*16] */ - 380, /* ExtendedRegisters[11*16] */ - 396, /* ExtendedRegisters[12*16] */ - 412, /* ExtendedRegisters[13*16] */ - 428, /* ExtendedRegisters[14*16] */ - 444, /* ExtendedRegisters[15*16] */ - 460, /* ExtendedRegisters[16*16] */ - 476, /* ExtendedRegisters[17*16] */ - - /* MXCSR */ - 228 /* ExtendedRegisters[24] */ -}; - -#define I386_WINDOWS_SIZEOF_GREGSET 716 - -struct cpms_data -{ - struct gdbarch *gdbarch; - struct obstack *obstack; - int module_count; -}; - -static void -core_process_module_section (bfd *abfd, asection *sect, void *obj) -{ - struct cpms_data *data = (struct cpms_data *) obj; - enum bfd_endian byte_order = gdbarch_byte_order (data->gdbarch); - - char *module_name; - size_t module_name_size; - CORE_ADDR base_addr; - - gdb_byte *buf = NULL; - - if (!startswith (sect->name, ".module")) - return; - - buf = (gdb_byte *) xmalloc (bfd_section_size (sect) + 1); - if (!buf) - { - printf_unfiltered ("memory allocation failed for %s\n", sect->name); - goto out; - } - if (!bfd_get_section_contents (abfd, sect, - buf, 0, bfd_section_size (sect))) - goto out; - - - - /* A DWORD (data_type) followed by struct windows_core_module_info. */ - - base_addr = - extract_unsigned_integer (buf + 4, 4, byte_order); - - module_name_size = - extract_unsigned_integer (buf + 8, 4, byte_order); - - if (12 + module_name_size > bfd_section_size (sect)) - goto out; - module_name = (char *) buf + 12; - - /* The first module is the .exe itself. */ - if (data->module_count != 0) - windows_xfer_shared_library (module_name, base_addr, - data->gdbarch, data->obstack); - data->module_count++; - -out: - if (buf) - xfree (buf); - return; -} - -static ULONGEST -windows_core_xfer_shared_libraries (struct gdbarch *gdbarch, - gdb_byte *readbuf, - ULONGEST offset, ULONGEST len) -{ - struct obstack obstack; - const char *buf; - ULONGEST len_avail; - struct cpms_data data = { gdbarch, &obstack, 0 }; - - obstack_init (&obstack); - obstack_grow_str (&obstack, "<library-list>\n"); - bfd_map_over_sections (core_bfd, - core_process_module_section, - &data); - obstack_grow_str0 (&obstack, "</library-list>\n"); - - buf = (const char *) obstack_finish (&obstack); - len_avail = strlen (buf); - if (offset >= len_avail) - return 0; - - if (len > len_avail - offset) - len = len_avail - offset; - memcpy (readbuf, buf + offset, len); - - obstack_free (&obstack, NULL); - return len; -} - -/* This is how we want PTIDs from core files to be printed. */ - -static std::string -i386_windows_core_pid_to_str (struct gdbarch *gdbarch, ptid_t ptid) -{ - if (ptid.lwp () != 0) - return string_printf ("Thread 0x%lx", ptid.lwp ()); - - return normal_pid_to_str (ptid); -} - -static CORE_ADDR -i386_cygwin_skip_trampoline_code (struct frame_info *frame, CORE_ADDR pc) -{ - return i386_pe_skip_trampoline_code (frame, pc, NULL); -} - -static const char * -i386_cygwin_auto_wide_charset (void) -{ - return "UTF-16"; -} - -static void -i386_cygwin_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) -{ - struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); - - windows_init_abi (info, gdbarch); - - set_gdbarch_skip_trampoline_code (gdbarch, i386_cygwin_skip_trampoline_code); - - set_gdbarch_skip_main_prologue (gdbarch, i386_skip_main_prologue); - - tdep->struct_return = reg_struct_return; - - tdep->gregset_reg_offset = i386_windows_gregset_reg_offset; - tdep->gregset_num_regs = ARRAY_SIZE (i386_windows_gregset_reg_offset); - tdep->sizeof_gregset = I386_WINDOWS_SIZEOF_GREGSET; - - tdep->sizeof_fpregset = 0; - - /* Core file support. */ - set_gdbarch_core_xfer_shared_libraries - (gdbarch, windows_core_xfer_shared_libraries); - set_gdbarch_core_pid_to_str (gdbarch, i386_windows_core_pid_to_str); - - set_gdbarch_auto_wide_charset (gdbarch, i386_cygwin_auto_wide_charset); -} - -static enum gdb_osabi -i386_cygwin_osabi_sniffer (bfd *abfd) -{ - const char *target_name = bfd_get_target (abfd); - - if (strcmp (target_name, "pei-i386") == 0) - return GDB_OSABI_CYGWIN; - - /* Cygwin uses elf core dumps. Do not claim all ELF executables, - check whether there is a .reg section of proper size. */ - if (strcmp (target_name, "elf32-i386") == 0) - { - asection *section = bfd_get_section_by_name (abfd, ".reg"); - if (section - && bfd_section_size (section) == I386_WINDOWS_SIZEOF_GREGSET) - return GDB_OSABI_CYGWIN; - } - - return GDB_OSABI_UNKNOWN; -} - -void -_initialize_i386_cygwin_tdep (void) -{ - gdbarch_register_osabi_sniffer (bfd_arch_i386, bfd_target_coff_flavour, - i386_cygwin_osabi_sniffer); - - /* Cygwin uses elf core dumps. */ - gdbarch_register_osabi_sniffer (bfd_arch_i386, bfd_target_elf_flavour, - i386_cygwin_osabi_sniffer); - - gdbarch_register_osabi (bfd_arch_i386, 0, GDB_OSABI_CYGWIN, - i386_cygwin_init_abi); -} diff -Nru gdb-9.1/gdb/i386-darwin-nat.c gdb-10.2/gdb/i386-darwin-nat.c --- gdb-9.1/gdb/i386-darwin-nat.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/i386-darwin-nat.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Darwin support for GDB, the GNU debugger. - Copyright (C) 1997-2020 Free Software Foundation, Inc. + Copyright (C) 1997-2021 Free Software Foundation, Inc. Contributed by Apple Computer, Inc. @@ -633,8 +633,9 @@ } } +void _initialize_i386_darwin_nat (); void -_initialize_i386_darwin_nat (void) +_initialize_i386_darwin_nat () { #ifdef BFD64 amd64_native_gregset64_reg_offset = amd64_darwin_thread_state_reg_offset; diff -Nru gdb-9.1/gdb/i386-darwin-tdep.c gdb-10.2/gdb/i386-darwin-tdep.c --- gdb-9.1/gdb/i386-darwin-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/i386-darwin-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Darwin support for GDB, the GNU debugger. - Copyright (C) 1997-2020 Free Software Foundation, Inc. + Copyright (C) 1997-2021 Free Software Foundation, Inc. Contributed by Apple Computer, Inc. @@ -34,7 +34,7 @@ #include "i386-darwin-tdep.h" #include "solib.h" #include "solib-darwin.h" -#include "dwarf2-frame.h" +#include "dwarf2/frame.h" #include <algorithm> /* Offsets into the struct i386_thread_state where we'll find the saved regs. @@ -109,7 +109,7 @@ static int i386_m128_p (struct type *type) { - return (TYPE_CODE (type) == TYPE_CODE_ARRAY && TYPE_VECTOR (type) + return (type->code () == TYPE_CODE_ARRAY && TYPE_VECTOR (type) && TYPE_LENGTH (type) == 16); } @@ -124,22 +124,22 @@ aligned to 8-byte boundaries. 7. [...] The caller aligns 128-bit vectors in the parameter area to 16-byte boundaries. */ - if (TYPE_CODE (type) == TYPE_CODE_ARRAY && TYPE_VECTOR (type)) + if (type->code () == TYPE_CODE_ARRAY && TYPE_VECTOR (type)) return TYPE_LENGTH (type); /* 4. The caller places all the fields of structures (or unions) with no vector elements in the parameter area. These structures are 4-byte aligned. 5. The caller places structures with vector elements on the stack, 16-byte aligned. */ - if (TYPE_CODE (type) == TYPE_CODE_STRUCT - || TYPE_CODE (type) == TYPE_CODE_UNION) + if (type->code () == TYPE_CODE_STRUCT + || type->code () == TYPE_CODE_UNION) { int i; int res = 4; - for (i = 0; i < TYPE_NFIELDS (type); i++) + for (i = 0; i < type->num_fields (); i++) { int align - = i386_darwin_arg_type_alignment (TYPE_FIELD_TYPE (type, i)); + = i386_darwin_arg_type_alignment (type->field (i).type ()); res = std::max (res, align); } @@ -286,8 +286,9 @@ return GDB_OSABI_UNKNOWN; } +void _initialize_i386_darwin_tdep (); void -_initialize_i386_darwin_tdep (void) +_initialize_i386_darwin_tdep () { gdbarch_register_osabi_sniffer (bfd_arch_unknown, bfd_target_mach_o_flavour, i386_mach_o_osabi_sniffer); diff -Nru gdb-9.1/gdb/i386-darwin-tdep.h gdb-10.2/gdb/i386-darwin-tdep.h --- gdb-9.1/gdb/i386-darwin-tdep.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/i386-darwin-tdep.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for Darwin x86. - Copyright (C) 2008-2020 Free Software Foundation, Inc. + Copyright (C) 2008-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/i386-dicos-tdep.c gdb-10.2/gdb/i386-dicos-tdep.c --- gdb-9.1/gdb/i386-dicos-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/i386-dicos-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for DICOS running on i386's, for GDB. - Copyright (C) 2008-2020 Free Software Foundation, Inc. + Copyright (C) 2008-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -41,8 +41,9 @@ return GDB_OSABI_UNKNOWN; } +void _initialize_i386_dicos_tdep (); void -_initialize_i386_dicos_tdep (void) +_initialize_i386_dicos_tdep () { gdbarch_register_osabi_sniffer (bfd_arch_i386, bfd_target_elf_flavour, i386_dicos_osabi_sniffer); diff -Nru gdb-9.1/gdb/i386-fbsd-nat.c gdb-10.2/gdb/i386-fbsd-nat.c --- gdb-9.1/gdb/i386-fbsd-nat.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/i386-fbsd-nat.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Native-dependent code for FreeBSD/i386. - Copyright (C) 2001-2020 Free Software Foundation, Inc. + Copyright (C) 2001-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -174,8 +174,9 @@ } #endif +void _initialize_i386fbsd_nat (); void -_initialize_i386fbsd_nat (void) +_initialize_i386fbsd_nat () { add_inf_child_target (&the_i386_fbsd_nat_target); diff -Nru gdb-9.1/gdb/i386-fbsd-tdep.c gdb-10.2/gdb/i386-fbsd-tdep.c --- gdb-9.1/gdb/i386-fbsd-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/i386-fbsd-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for FreeBSD/i386. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -30,6 +30,7 @@ #include "i387-tdep.h" #include "fbsd-tdep.h" #include "solib-svr4.h" +#include "inferior.h" /* Support for signal handlers. */ @@ -332,7 +333,8 @@ if (tdep->fsbase_regnum == -1) error (_("Unable to fetch %%gsbase")); - regcache = get_thread_arch_regcache (ptid, gdbarch); + regcache = get_thread_arch_regcache (current_inferior ()->process_target (), + ptid, gdbarch); target_fetch_registers (regcache, tdep->fsbase_regnum + 1); @@ -449,8 +451,9 @@ i386fbsd_get_thread_local_address); } +void _initialize_i386fbsd_tdep (); void -_initialize_i386fbsd_tdep (void) +_initialize_i386fbsd_tdep () { gdbarch_register_osabi (bfd_arch_i386, 0, GDB_OSABI_FREEBSD, i386fbsd4_init_abi); diff -Nru gdb-9.1/gdb/i386-fbsd-tdep.h gdb-10.2/gdb/i386-fbsd-tdep.h --- gdb-9.1/gdb/i386-fbsd-tdep.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/i386-fbsd-tdep.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for FreeBSD x86. - Copyright (C) 2015-2020 Free Software Foundation, Inc. + Copyright (C) 2015-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/i386-gnu-nat.c gdb-10.2/gdb/i386-gnu-nat.c --- gdb-9.1/gdb/i386-gnu-nat.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/i386-gnu-nat.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Low level interface to i386 running the GNU Hurd. - Copyright (C) 1992-2020 Free Software Foundation, Inc. + Copyright (C) 1992-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -425,8 +425,9 @@ } #endif /* i386_DEBUG_STATE */ +void _initialize_i386gnu_nat (); void -_initialize_i386gnu_nat (void) +_initialize_i386gnu_nat () { #ifdef i386_DEBUG_STATE x86_dr_low.set_control = i386_gnu_dr_set_control; @@ -438,6 +439,8 @@ x86_set_debug_register_length (4); #endif /* i386_DEBUG_STATE */ + gnu_target = &the_i386_gnu_nat_target; + /* Register the target. */ add_inf_child_target (&the_i386_gnu_nat_target); } diff -Nru gdb-9.1/gdb/i386-gnu-tdep.c gdb-10.2/gdb/i386-gnu-tdep.c --- gdb-9.1/gdb/i386-gnu-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/i386-gnu-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Target-dependent code for the GNU Hurd. - Copyright (C) 2002-2020 Free Software Foundation, Inc. + Copyright (C) 2002-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -17,11 +17,138 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include "defs.h" +#include "gdbcore.h" #include "osabi.h" #include "solib-svr4.h" #include "i386-tdep.h" +/* Recognizing signal handler frames. */ + +/* When the GNU/Hurd libc calls a signal handler, the return address points + inside the trampoline assembly snippet. + + If the trampoline function name can not be identified, we resort to reading + memory from the process in order to identify it. */ + +static const gdb_byte gnu_sigtramp_code[] = +{ +/* rpc_wait_trampoline: */ + 0xb8, 0xe7, 0xff, 0xff, 0xff, /* mov $-25,%eax */ + 0x9a, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, /* lcall $7,$0 */ + 0x89, 0x01, /* movl %eax, (%ecx) */ + 0x89, 0xdc, /* movl %ebx, %esp */ + +/* trampoline: */ + 0xff, 0xd2, /* call *%edx */ +/* RA HERE */ + 0x83, 0xc4, 0x0c, /* addl $12, %esp */ + 0xc3, /* ret */ + +/* firewall: */ + 0xf4, /* hlt */ +}; + +#define GNU_SIGTRAMP_LEN (sizeof gnu_sigtramp_code) +#define GNU_SIGTRAMP_TAIL 5 /* length of tail after RA */ + +/* If THIS_FRAME is a sigtramp routine, return the address of the + start of the routine. Otherwise, return 0. */ + +static CORE_ADDR +i386_gnu_sigtramp_start (struct frame_info *this_frame) +{ + CORE_ADDR pc = get_frame_pc (this_frame); + gdb_byte buf[GNU_SIGTRAMP_LEN]; + + if (!safe_frame_unwind_memory (this_frame, + pc + GNU_SIGTRAMP_TAIL - GNU_SIGTRAMP_LEN, + buf, GNU_SIGTRAMP_LEN)) + return 0; + + if (memcmp (buf, gnu_sigtramp_code, GNU_SIGTRAMP_LEN) != 0) + return 0; + + return pc; +} + +/* Return whether THIS_FRAME corresponds to a GNU/Linux sigtramp + routine. */ + +static int +i386_gnu_sigtramp_p (struct frame_info *this_frame) +{ + CORE_ADDR pc = get_frame_pc (this_frame); + const char *name; + + find_pc_partial_function (pc, &name, NULL, NULL); + + /* If we have a NAME, we can check for the trampoline function */ + if (name != NULL && strcmp (name, "trampoline") == 0) + return 1; + + return i386_gnu_sigtramp_start (this_frame) != 0; +} + +/* Offset to sc_i386_thread_state in sigcontext, from <bits/sigcontext.h>. */ +#define I386_GNU_SIGCONTEXT_THREAD_STATE_OFFSET 20 + +/* Assuming THIS_FRAME is a GNU/Linux sigtramp routine, return the + address of the associated sigcontext structure. */ + +static CORE_ADDR +i386_gnu_sigcontext_addr (struct frame_info *this_frame) +{ + struct gdbarch *gdbarch = get_frame_arch (this_frame); + enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); + CORE_ADDR pc; + CORE_ADDR sp; + gdb_byte buf[4]; + + get_frame_register (this_frame, I386_ESP_REGNUM, buf); + sp = extract_unsigned_integer (buf, 4, byte_order); + + pc = i386_gnu_sigtramp_start (this_frame); + if (pc) + { + CORE_ADDR sigcontext_addr; + + /* The sigcontext structure address is passed as the third argument to + the signal handler. */ + read_memory (sp + 8, buf, 4); + sigcontext_addr = extract_unsigned_integer (buf, 4, byte_order); + return sigcontext_addr + I386_GNU_SIGCONTEXT_THREAD_STATE_OFFSET; + } + + error (_("Couldn't recognize signal trampoline.")); + return 0; +} + +/* Mapping between the general-purpose registers in `struct + sigcontext' format (starting at sc_i386_thread_state) + and GDB's register cache layout. */ + +/* From <bits/sigcontext.h>. */ +static int i386_gnu_sc_reg_offset[] = +{ + 11 * 4, /* %eax */ + 10 * 4, /* %ecx */ + 9 * 4, /* %edx */ + 8 * 4, /* %ebx */ + 7 * 4, /* %esp */ + 6 * 4, /* %ebp */ + 5 * 4, /* %esi */ + 4 * 4, /* %edi */ + 12 * 4, /* %eip */ + 14 * 4, /* %eflags */ + 13 * 4, /* %cs */ + 16 * 4, /* %ss */ + 3 * 4, /* %ds */ + 2 * 4, /* %es */ + 1 * 4, /* %fs */ + 0 * 4 /* %gs */ +}; + /* From <sys/ucontext.h>. */ static int i386gnu_gregset_reg_offset[] = { @@ -59,10 +186,16 @@ tdep->sizeof_gregset = 19 * 4; tdep->jb_pc_offset = 20; /* From <bits/setjmp.h>. */ + + tdep->sigtramp_p = i386_gnu_sigtramp_p; + tdep->sigcontext_addr = i386_gnu_sigcontext_addr; + tdep->sc_reg_offset = i386_gnu_sc_reg_offset; + tdep->sc_num_regs = ARRAY_SIZE (i386_gnu_sc_reg_offset); } +void _initialize_i386gnu_tdep (); void -_initialize_i386gnu_tdep (void) +_initialize_i386gnu_tdep () { gdbarch_register_osabi (bfd_arch_i386, 0, GDB_OSABI_HURD, i386gnu_init_abi); } diff -Nru gdb-9.1/gdb/i386-go32-tdep.c gdb-10.2/gdb/i386-go32-tdep.c --- gdb-9.1/gdb/i386-go32-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/i386-go32-tdep.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for DJGPP/i386. - Copyright (C) 1988-2020 Free Software Foundation, Inc. + Copyright (C) 1988-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -62,6 +62,7 @@ } +void _initialize_i386_go32_tdep (); void _initialize_i386_go32_tdep () { diff -Nru gdb-9.1/gdb/i386-linux-nat.c gdb-10.2/gdb/i386-linux-nat.c --- gdb-9.1/gdb/i386-linux-nat.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/i386-linux-nat.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Native-dependent code for GNU/Linux i386. - Copyright (C) 1999-2020 Free Software Foundation, Inc. + Copyright (C) 1999-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -657,7 +657,7 @@ if (step) { - struct regcache *regcache = get_thread_regcache (ptid); + struct regcache *regcache = get_thread_regcache (this, ptid); struct gdbarch *gdbarch = regcache->arch (); enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); ULONGEST pc; @@ -711,8 +711,9 @@ perror_with_name (("ptrace")); } +void _initialize_i386_linux_nat (); void -_initialize_i386_linux_nat (void) +_initialize_i386_linux_nat () { linux_target = &the_i386_linux_nat_target; diff -Nru gdb-9.1/gdb/i386-linux-nat.h gdb-10.2/gdb/i386-linux-nat.h --- gdb-9.1/gdb/i386-linux-nat.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/i386-linux-nat.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Native-dependent code for GNU/Linux i386. - Copyright (C) 1999-2020 Free Software Foundation, Inc. + Copyright (C) 1999-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/i386-linux-tdep.c gdb-10.2/gdb/i386-linux-tdep.c --- gdb-9.1/gdb/i386-linux-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/i386-linux-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for GNU/Linux i386. - Copyright (C) 2000-2020 Free Software Foundation, Inc. + Copyright (C) 2000-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -26,7 +26,7 @@ #include "inferior.h" #include "osabi.h" #include "reggroups.h" -#include "dwarf2-frame.h" +#include "dwarf2/frame.h" #include "i386-tdep.h" #include "i386-linux-tdep.h" #include "linux-tdep.h" @@ -36,6 +36,7 @@ #include "symtab.h" #include "arch-utils.h" #include "xml-syscall.h" +#include "infrun.h" #include "i387-tdep.h" #include "gdbsupport/x86-xstate.h" @@ -387,19 +388,19 @@ #define SIG_CODE_BONDARY_FAULT 3 -/* i386 GNU/Linux implementation of the handle_segmentation_fault +/* i386 GNU/Linux implementation of the report_signal_info gdbarch hook. Displays information related to MPX bound violations. */ void -i386_linux_handle_segmentation_fault (struct gdbarch *gdbarch, - struct ui_out *uiout) +i386_linux_report_signal_info (struct gdbarch *gdbarch, struct ui_out *uiout, + enum gdb_signal siggnal) { /* -Wmaybe-uninitialized */ CORE_ADDR lower_bound = 0, upper_bound = 0, access = 0; int is_upper; long sig_code = 0; - if (!i386_mpx_enabled ()) + if (!i386_mpx_enabled () || siggnal != GDB_SIGNAL_SEGV) return; try @@ -797,12 +798,12 @@ which does not seem worth it. The same effect is achieved by patching that 'nop' instruction there instead. */ -static struct displaced_step_closure * +static displaced_step_closure_up i386_linux_displaced_step_copy_insn (struct gdbarch *gdbarch, CORE_ADDR from, CORE_ADDR to, struct regcache *regs) { - displaced_step_closure *closure_ + displaced_step_closure_up closure_ = i386_displaced_step_copy_insn (gdbarch, from, to, regs); if (i386_linux_get_syscall_number_from_regcache (regs) != -1) @@ -810,7 +811,7 @@ /* The closure returned by i386_displaced_step_copy_insn is simply a buffer with a copy of the instruction. */ i386_displaced_step_closure *closure - = (i386_displaced_step_closure *) closure_; + = (i386_displaced_step_closure *) closure_.get (); /* Fake nop. */ closure->buf[0] = 0x90; @@ -1072,12 +1073,12 @@ i386_linux_get_syscall_number); set_gdbarch_get_siginfo_type (gdbarch, x86_linux_get_siginfo_type); - set_gdbarch_handle_segmentation_fault (gdbarch, - i386_linux_handle_segmentation_fault); + set_gdbarch_report_signal_info (gdbarch, i386_linux_report_signal_info); } +void _initialize_i386_linux_tdep (); void -_initialize_i386_linux_tdep (void) +_initialize_i386_linux_tdep () { gdbarch_register_osabi (bfd_arch_i386, 0, GDB_OSABI_LINUX, i386_linux_init_abi); diff -Nru gdb-9.1/gdb/i386-linux-tdep.h gdb-10.2/gdb/i386-linux-tdep.h --- gdb-9.1/gdb/i386-linux-tdep.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/i386-linux-tdep.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for GNU/Linux x86. - Copyright (C) 2002-2020 Free Software Foundation, Inc. + Copyright (C) 2002-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -39,8 +39,9 @@ /* Handle and display information related to the MPX bound violation to the user. */ -extern void i386_linux_handle_segmentation_fault (struct gdbarch *gdbarch, - struct ui_out *uiout); +extern void i386_linux_report_signal_info (struct gdbarch *gdbarch, + struct ui_out *uiout, + enum gdb_signal siggnal); /* Return the target description according to XCR0. */ extern const struct target_desc *i386_linux_read_description (uint64_t xcr0); diff -Nru gdb-9.1/gdb/i386-nbsd-nat.c gdb-10.2/gdb/i386-nbsd-nat.c --- gdb-9.1/gdb/i386-nbsd-nat.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/i386-nbsd-nat.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Native-dependent code for NetBSD/i386. - Copyright (C) 2004-2020 Free Software Foundation, Inc. + Copyright (C) 2004-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -73,8 +73,9 @@ static i386_bsd_nat_target<nbsd_nat_target> the_i386_nbsd_nat_target; +void _initialize_i386nbsd_nat (); void -_initialize_i386nbsd_nat (void) +_initialize_i386nbsd_nat () { add_inf_child_target (&the_i386_nbsd_nat_target); diff -Nru gdb-9.1/gdb/i386-nbsd-tdep.c gdb-10.2/gdb/i386-nbsd-tdep.c --- gdb-9.1/gdb/i386-nbsd-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/i386-nbsd-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for NetBSD/i386. - Copyright (C) 1988-2020 Free Software Foundation, Inc. + Copyright (C) 1988-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -377,6 +377,8 @@ /* Obviously NetBSD is BSD-based. */ i386bsd_init_abi (info, gdbarch); + nbsd_init_abi (info, gdbarch); + /* NetBSD has a different `struct reg'. */ tdep->gregset_reg_offset = i386nbsd_r_reg_offset; tdep->gregset_num_regs = ARRAY_SIZE (i386nbsd_r_reg_offset); @@ -421,8 +423,9 @@ tdep->struct_return = pcc_struct_return; } +void _initialize_i386nbsd_tdep (); void -_initialize_i386nbsd_tdep (void) +_initialize_i386nbsd_tdep () { gdbarch_register_osabi (bfd_arch_i386, 0, GDB_OSABI_NETBSD, i386nbsdelf_init_abi); diff -Nru gdb-9.1/gdb/i386-nto-tdep.c gdb-10.2/gdb/i386-nto-tdep.c --- gdb-9.1/gdb/i386-nto-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/i386-nto-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for QNX Neutrino x86. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. Contributed by QNX Software Systems Ltd. @@ -367,8 +367,9 @@ set_gdbarch_wchar_signed (gdbarch, 0); } +void _initialize_i386nto_tdep (); void -_initialize_i386nto_tdep (void) +_initialize_i386nto_tdep () { init_i386nto_ops (); gdbarch_register_osabi (bfd_arch_i386, 0, GDB_OSABI_QNXNTO, diff -Nru gdb-9.1/gdb/i386-obsd-nat.c gdb-10.2/gdb/i386-obsd-nat.c --- gdb-9.1/gdb/i386-obsd-nat.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/i386-obsd-nat.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Native-dependent code for OpenBSD/i386. - Copyright (C) 2002-2020 Free Software Foundation, Inc. + Copyright (C) 2002-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -90,8 +90,9 @@ static i386_bsd_nat_target<obsd_nat_target> the_i386_obsd_nat_target; +void _initialize_i386obsd_nat (); void -_initialize_i386obsd_nat (void) +_initialize_i386obsd_nat () { add_inf_child_target (&i386_obsd_nat_target); diff -Nru gdb-9.1/gdb/i386-obsd-tdep.c gdb-10.2/gdb/i386-obsd-tdep.c --- gdb-9.1/gdb/i386-obsd-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/i386-obsd-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for OpenBSD/i386. - Copyright (C) 1988-2020 Free Software Foundation, Inc. + Copyright (C) 1988-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -443,8 +443,9 @@ (gdbarch, svr4_ilp32_fetch_link_map_offsets); } +void _initialize_i386obsd_tdep (); void -_initialize_i386obsd_tdep (void) +_initialize_i386obsd_tdep () { gdbarch_register_osabi (bfd_arch_i386, 0, GDB_OSABI_OPENBSD, i386obsd_init_abi); diff -Nru gdb-9.1/gdb/i386-sol2-nat.c gdb-10.2/gdb/i386-sol2-nat.c --- gdb-9.1/gdb/i386-sol2-nat.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/i386-sol2-nat.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Native-dependent code for Solaris x86. - Copyright (C) 1988-2020 Free Software Foundation, Inc. + Copyright (C) 1988-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -178,10 +178,22 @@ format and GDB's register array layout. */ static int regmap[] = { - EAX, ECX, EDX, EBX, - UESP, EBP, ESI, EDI, - EIP, EFL, CS, SS, - DS, ES, FS, GS + 11 /* EAX */, + 10 /* ECX */, + 9 /* EDX */, + 8 /* EBX */, + 17 /* UESP */, + 6 /* EBP */, + 5 /* ESI */, + 4 /* EDI */, + 14 /* EIP */, + 16 /* EFL */, + 15 /* CS */, + 18 /* SS */, + 3 /* DS */, + 2 /* ES */, + 1 /* FS */, + 0 /* GS */ }; /* Fill GDB's register array with the general-purpose register values @@ -241,8 +253,9 @@ #endif +void _initialize_amd64_sol2_nat (); void -_initialize_amd64_sol2_nat (void) +_initialize_amd64_sol2_nat () { #if PR_MODEL_NATIVE == PR_MODEL_LP64 amd64_native_gregset32_reg_offset = amd64_sol2_gregset32_reg_offset; diff -Nru gdb-9.1/gdb/i386-sol2-tdep.c gdb-10.2/gdb/i386-sol2-tdep.c --- gdb-9.1/gdb/i386-sol2-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/i386-sol2-tdep.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for Solaris x86. - Copyright (C) 2002-2020 Free Software Foundation, Inc. + Copyright (C) 2002-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -46,21 +46,6 @@ 0 * 4 /* %gs */ }; -/* Return whether THIS_FRAME corresponds to a Solaris sigtramp - routine. */ - -static int -i386_sol2_sigtramp_p (struct frame_info *this_frame) -{ - CORE_ADDR pc = get_frame_pc (this_frame); - const char *name; - - find_pc_partial_function (pc, &name, NULL, NULL); - return (name && (strcmp ("sigacthandler", name) == 0 - || strcmp (name, "ucbsigvechandler") == 0 - || strcmp (name, "__sighndlr") == 0)); -} - /* Solaris doesn't have a `struct sigcontext', but it does have a `mcontext_t' that contains the saved set of machine registers. */ @@ -75,30 +60,6 @@ return ucontext_addr + 36; } -/* SunPRO encodes the static variables. This is not related to C++ - mangling, it is done for C too. */ - -static const char * -i386_sol2_static_transform_name (const char *name) -{ - if (name[0] == '.') - { - const char *p; - - /* For file-local statics there will be a period, a bunch of - junk (the contents of which match a string given in the - N_OPT), a period and the name. For function-local statics - there will be a bunch of junk (which seems to change the - second character from 'A' to 'B'), a period, the name of the - function, and the name. So just skip everything before the - last period. */ - p = strrchr (name, '.'); - if (p != NULL) - name = p + 1; - } - return name; -} - /* Solaris 2. */ static void @@ -109,12 +70,7 @@ /* Solaris is SVR4-based. */ i386_svr4_init_abi (info, gdbarch); - /* The SunPRO compiler puts out 0 instead of the address in N_SO symbols, - and for SunPRO 3.0, N_FUN symbols too. */ - set_gdbarch_sofun_address_maybe_missing (gdbarch, 1); - - /* Handle SunPRO encoding of static symbols. */ - set_gdbarch_static_transform_name (gdbarch, i386_sol2_static_transform_name); + sol2_init_abi (info, gdbarch); /* Solaris reserves space for its FPU emulator in `fpregset_t'. There is also some space reserved for the registers of a Weitek @@ -125,18 +81,14 @@ tdep->sizeof_fpregset = 380; /* Signal trampolines are slightly different from SVR4. */ - tdep->sigtramp_p = i386_sol2_sigtramp_p; + tdep->sigtramp_p = sol2_sigtramp_p; tdep->sigcontext_addr = i386_sol2_mcontext_addr; tdep->sc_reg_offset = tdep->gregset_reg_offset; tdep->sc_num_regs = tdep->gregset_num_regs; /* Solaris has SVR4-style shared libraries. */ - set_gdbarch_skip_solib_resolver (gdbarch, sol2_skip_solib_resolver); set_solib_svr4_fetch_link_map_offsets (gdbarch, svr4_ilp32_fetch_link_map_offsets); - - /* How to print LWP PTIDs from core files. */ - set_gdbarch_core_pid_to_str (gdbarch, sol2_core_pid_to_str); } @@ -151,8 +103,9 @@ return GDB_OSABI_UNKNOWN; } +void _initialize_i386_sol2_tdep (); void -_initialize_i386_sol2_tdep (void) +_initialize_i386_sol2_tdep () { /* Register an ELF OS ABI sniffer for Solaris 2 binaries. */ gdbarch_register_osabi_sniffer (bfd_arch_i386, bfd_target_elf_flavour, diff -Nru gdb-9.1/gdb/i386-tdep.c gdb-10.2/gdb/i386-tdep.c --- gdb-9.1/gdb/i386-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/i386-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Intel 386 target-dependent stuff. - Copyright (C) 1988-2020 Free Software Foundation, Inc. + Copyright (C) 1988-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -22,7 +22,7 @@ #include "arch-utils.h" #include "command.h" #include "dummy-frame.h" -#include "dwarf2-frame.h" +#include "dwarf2/frame.h" #include "frame.h" #include "frame-base.h" #include "frame-unwind.h" @@ -65,6 +65,7 @@ #include <ctype.h> #include <algorithm> #include <unordered_set> +#include "producer.h" /* Register names. */ @@ -798,13 +799,14 @@ /* Some kernels may run one past a syscall insn, so we have to cope. */ -struct displaced_step_closure * +displaced_step_closure_up i386_displaced_step_copy_insn (struct gdbarch *gdbarch, CORE_ADDR from, CORE_ADDR to, struct regcache *regs) { size_t len = gdbarch_max_insn_length (gdbarch); - i386_displaced_step_closure *closure = new i386_displaced_step_closure (len); + std::unique_ptr<i386_displaced_step_closure> closure + (new i386_displaced_step_closure (len)); gdb_byte *buf = closure->buf.data (); read_memory (from, buf, len); @@ -830,7 +832,8 @@ displaced_step_dump_bytes (gdb_stdlog, buf, len); } - return closure; + /* This is a work around for a problem with g++ 4.8. */ + return displaced_step_closure_up (closure.release ()); } /* Fix up the state of registers and memory after having single-stepped @@ -1535,6 +1538,24 @@ { 0 } }; +/* Check whether PC points to an endbr32 instruction. */ +static CORE_ADDR +i386_skip_endbr (CORE_ADDR pc) +{ + static const gdb_byte endbr32[] = { 0xf3, 0x0f, 0x1e, 0xfb }; + + gdb_byte buf[sizeof (endbr32)]; + + /* Stop there if we can't read the code */ + if (target_read_code (pc, buf, sizeof (endbr32))) + return pc; + + /* If the instruction isn't an endbr32, stop */ + if (memcmp (buf, endbr32, sizeof (endbr32)) != 0) + return pc; + + return pc + sizeof (endbr32); +} /* Check whether PC points to a no-op instruction. */ static CORE_ADDR @@ -1812,6 +1833,7 @@ CORE_ADDR pc, CORE_ADDR current_pc, struct i386_frame_cache *cache) { + pc = i386_skip_endbr (pc); pc = i386_skip_noop (pc); pc = i386_follow_jump (gdbarch, pc); pc = i386_analyze_struct_return (pc, current_pc, cache); @@ -1845,12 +1867,13 @@ = skip_prologue_using_sal (gdbarch, func_addr); struct compunit_symtab *cust = find_pc_compunit_symtab (func_addr); - /* Clang always emits a line note before the prologue and another - one after. We trust clang to emit usable line notes. */ + /* LLVM backend (Clang/Flang) always emits a line note before the + prologue and another one after. We trust clang to emit usable + line notes. */ if (post_prologue_pc && (cust != NULL && COMPUNIT_PRODUCER (cust) != NULL - && startswith (COMPUNIT_PRODUCER (cust), "clang "))) + && producer_is_llvm (COMPUNIT_PRODUCER (cust)))) return std::max (start_pc, post_prologue_pc); } @@ -2631,19 +2654,19 @@ i386_16_byte_align_p (struct type *type) { type = check_typedef (type); - if ((TYPE_CODE (type) == TYPE_CODE_DECFLOAT - || (TYPE_CODE (type) == TYPE_CODE_ARRAY && TYPE_VECTOR (type))) + if ((type->code () == TYPE_CODE_DECFLOAT + || (type->code () == TYPE_CODE_ARRAY && TYPE_VECTOR (type))) && TYPE_LENGTH (type) == 16) return 1; - if (TYPE_CODE (type) == TYPE_CODE_ARRAY) + if (type->code () == TYPE_CODE_ARRAY) return i386_16_byte_align_p (TYPE_TARGET_TYPE (type)); - if (TYPE_CODE (type) == TYPE_CODE_STRUCT - || TYPE_CODE (type) == TYPE_CODE_UNION) + if (type->code () == TYPE_CODE_STRUCT + || type->code () == TYPE_CODE_UNION) { int i; - for (i = 0; i < TYPE_NFIELDS (type); i++) + for (i = 0; i < type->num_fields (); i++) { - if (i386_16_byte_align_p (TYPE_FIELD_TYPE (type, i))) + if (i386_16_byte_align_p (type->field (i).type ())) return 1; } } @@ -2666,12 +2689,15 @@ return sp - 16; } -static CORE_ADDR -i386_push_dummy_call (struct gdbarch *gdbarch, struct value *function, - struct regcache *regcache, CORE_ADDR bp_addr, int nargs, - struct value **args, CORE_ADDR sp, - function_call_return_method return_method, - CORE_ADDR struct_addr) +/* The "push_dummy_call" gdbarch method, optionally with the thiscall + calling convention. */ + +CORE_ADDR +i386_thiscall_push_dummy_call (struct gdbarch *gdbarch, struct value *function, + struct regcache *regcache, CORE_ADDR bp_addr, + int nargs, struct value **args, CORE_ADDR sp, + function_call_return_method return_method, + CORE_ADDR struct_addr, bool thiscall) { enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); gdb_byte buf[4]; @@ -2707,7 +2733,7 @@ args_space += 4; } - for (i = 0; i < nargs; i++) + for (i = thiscall ? 1 : 0; i < nargs; i++) { int len = TYPE_LENGTH (value_enclosing_type (args[i])); @@ -2759,6 +2785,10 @@ /* ...and fake a frame pointer. */ regcache->cooked_write (I386_EBP_REGNUM, buf); + /* The 'this' pointer needs to be in ECX. */ + if (thiscall) + regcache->cooked_write (I386_ECX_REGNUM, value_contents_all (args[0])); + /* MarkK wrote: This "+ 8" is all over the place: (i386_frame_this_id, i386_sigtramp_frame_this_id, i386_dummy_id). It's there, since all frame unwinders for @@ -2771,6 +2801,20 @@ return sp + 8; } +/* Implement the "push_dummy_call" gdbarch method. */ + +static CORE_ADDR +i386_push_dummy_call (struct gdbarch *gdbarch, struct value *function, + struct regcache *regcache, CORE_ADDR bp_addr, int nargs, + struct value **args, CORE_ADDR sp, + function_call_return_method return_method, + CORE_ADDR struct_addr) +{ + return i386_thiscall_push_dummy_call (gdbarch, function, regcache, bp_addr, + nargs, args, sp, return_method, + struct_addr, false); +} + /* These registers are used for returning integers (and on some targets also for returning `struct' and `union' values when their size and alignment match an integer type). */ @@ -2788,7 +2832,7 @@ int len = TYPE_LENGTH (type); gdb_byte buf[I386_MAX_REGISTER_SIZE]; - if (TYPE_CODE (type) == TYPE_CODE_FLT) + if (type->code () == TYPE_CODE_FLT) { if (tdep->st0_regnum < 0) { @@ -2838,7 +2882,7 @@ struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); int len = TYPE_LENGTH (type); - if (TYPE_CODE (type) == TYPE_CODE_FLT) + if (type->code () == TYPE_CODE_FLT) { ULONGEST fstat; gdb_byte buf[I386_MAX_REGISTER_SIZE]; @@ -2915,7 +2959,7 @@ i386_reg_struct_return_p (struct gdbarch *gdbarch, struct type *type) { struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); - enum type_code code = TYPE_CODE (type); + enum type_code code = type->code (); int len = TYPE_LENGTH (type); gdb_assert (code == TYPE_CODE_STRUCT @@ -2929,10 +2973,10 @@ /* Structures consisting of a single `float', `double' or 'long double' member are returned in %st(0). */ - if (code == TYPE_CODE_STRUCT && TYPE_NFIELDS (type) == 1) + if (code == TYPE_CODE_STRUCT && type->num_fields () == 1) { - type = check_typedef (TYPE_FIELD_TYPE (type, 0)); - if (TYPE_CODE (type) == TYPE_CODE_FLT) + type = check_typedef (type->field (0).type ()); + if (type->code () == TYPE_CODE_FLT) return (len == 4 || len == 8 || len == 12); } @@ -2950,7 +2994,7 @@ struct type *type, struct regcache *regcache, gdb_byte *readbuf, const gdb_byte *writebuf) { - enum type_code code = TYPE_CODE (type); + enum type_code code = type->code (); if (((code == TYPE_CODE_STRUCT || code == TYPE_CODE_UNION @@ -2997,9 +3041,9 @@ the structure. Since that should work for all structures that have only one member, we don't bother to check the member's type here. */ - if (code == TYPE_CODE_STRUCT && TYPE_NFIELDS (type) == 1) + if (code == TYPE_CODE_STRUCT && type->num_fields () == 1) { - type = check_typedef (TYPE_FIELD_TYPE (type, 0)); + type = check_typedef (type->field (0).type ()); return i386_return_value (gdbarch, function, type, regcache, readbuf, writebuf); } @@ -3057,7 +3101,7 @@ append_composite_type_field (t, "lbound", bt->builtin_data_ptr); append_composite_type_field (t, "ubound", bt->builtin_data_ptr); - TYPE_NAME (t) = "builtin_type_bound128"; + t->set_name ("builtin_type_bound128"); tdep->i386_bnd_type = t; } @@ -3080,13 +3124,14 @@ #if 0 union __gdb_builtin_type_vec512i { - int128_t uint128[4]; - int64_t v4_int64[8]; - int32_t v8_int32[16]; - int16_t v16_int16[32]; - int8_t v32_int8[64]; - double v4_double[8]; - float v8_float[16]; + int128_t v4_int128[4]; + int64_t v8_int64[8]; + int32_t v16_int32[16]; + int16_t v32_int16[32]; + int8_t v64_int8[64]; + double v8_double[8]; + float v16_float[16]; + bfloat16_t v32_bfloat16[32]; }; #endif @@ -3094,6 +3139,8 @@ t = arch_composite_type (gdbarch, "__gdb_builtin_type_vec512i", TYPE_CODE_UNION); + append_composite_type_field (t, "v32_bfloat16", + init_vector_type (bt->builtin_bfloat16, 32)); append_composite_type_field (t, "v16_float", init_vector_type (bt->builtin_float, 16)); append_composite_type_field (t, "v8_double", @@ -3110,7 +3157,7 @@ init_vector_type (bt->builtin_int128, 4)); TYPE_VECTOR (t) = 1; - TYPE_NAME (t) = "builtin_type_vec512i"; + t->set_name ("builtin_type_vec512i"); tdep->i386_zmm_type = t; } @@ -3133,13 +3180,14 @@ #if 0 union __gdb_builtin_type_vec256i { - int128_t uint128[2]; - int64_t v2_int64[4]; - int32_t v4_int32[8]; - int16_t v8_int16[16]; - int8_t v16_int8[32]; - double v2_double[4]; - float v4_float[8]; + int128_t v2_int128[2]; + int64_t v4_int64[4]; + int32_t v8_int32[8]; + int16_t v16_int16[16]; + int8_t v32_int8[32]; + double v4_double[4]; + float v8_float[8]; + bfloat16_t v16_bfloat16[16]; }; #endif @@ -3147,6 +3195,8 @@ t = arch_composite_type (gdbarch, "__gdb_builtin_type_vec256i", TYPE_CODE_UNION); + append_composite_type_field (t, "v16_bfloat16", + init_vector_type (bt->builtin_bfloat16, 16)); append_composite_type_field (t, "v8_float", init_vector_type (bt->builtin_float, 8)); append_composite_type_field (t, "v4_double", @@ -3163,7 +3213,7 @@ init_vector_type (bt->builtin_int128, 2)); TYPE_VECTOR (t) = 1; - TYPE_NAME (t) = "builtin_type_vec256i"; + t->set_name ("builtin_type_vec256i"); tdep->i386_ymm_type = t; } @@ -3205,7 +3255,7 @@ init_vector_type (bt->builtin_int8, 8)); TYPE_VECTOR (t) = 1; - TYPE_NAME (t) = "builtin_type_vec64i"; + t->set_name ("builtin_type_vec64i"); tdep->i386_mmx_type = t; } @@ -8186,7 +8236,9 @@ || strcmp (name, "_Float128") == 0 || strcmp (name, "complex _Float128") == 0 || strcmp (name, "complex(kind=16)") == 0 - || strcmp (name, "real(kind=16)") == 0) + || strcmp (name, "quad complex") == 0 + || strcmp (name, "real(kind=16)") == 0 + || strcmp (name, "real*16") == 0) return floatformats_ia64_quad; return default_floatformat_for_type (gdbarch, name, len); @@ -8375,13 +8427,13 @@ if (gdbarch_ptr_bit (gdbarch) == 32) { - if ((TYPE_CODE (type) == TYPE_CODE_INT - || TYPE_CODE (type) == TYPE_CODE_FLT) + if ((type->code () == TYPE_CODE_INT + || type->code () == TYPE_CODE_FLT) && TYPE_LENGTH (type) > 4) return 4; /* Handle x86's funny long double. */ - if (TYPE_CODE (type) == TYPE_CODE_FLT + if (type->code () == TYPE_CODE_FLT && gdbarch_long_double_bit (gdbarch) == TYPE_LENGTH (type) * 8) return 4; } @@ -8460,6 +8512,9 @@ alignment. */ set_gdbarch_long_double_bit (gdbarch, 96); + /* Support of bfloat16 format. */ + set_gdbarch_bfloat16_format (gdbarch, floatformats_bfloat16); + /* Support for floating-point data type variants. */ set_gdbarch_floatformat_for_type (gdbarch, i386_floatformat_for_type); @@ -9016,24 +9071,9 @@ static struct cmd_list_element *mpx_set_cmdlist, *mpx_show_cmdlist; -/* Helper function for the CLI commands. */ - -static void -set_mpx_cmd (const char *args, int from_tty) -{ - help_list (mpx_set_cmdlist, "set mpx ", all_commands, gdb_stdout); -} - -/* Helper function for the CLI commands. */ - -static void -show_mpx_cmd (const char *args, int from_tty) -{ - cmd_show_list (mpx_show_cmdlist, from_tty, ""); -} - +void _initialize_i386_tdep (); void -_initialize_i386_tdep (void) +_initialize_i386_tdep () { register_gdbarch_init (bfd_arch_i386, i386_gdbarch_init); @@ -9061,17 +9101,17 @@ /* Add "mpx" prefix for the set commands. */ - add_prefix_cmd ("mpx", class_support, set_mpx_cmd, _("\ + add_basic_prefix_cmd ("mpx", class_support, _("\ Set Intel Memory Protection Extensions specific variables."), - &mpx_set_cmdlist, "set mpx ", - 0 /* allow-unknown */, &setlist); + &mpx_set_cmdlist, "set mpx ", + 0 /* allow-unknown */, &setlist); /* Add "mpx" prefix for the show commands. */ - add_prefix_cmd ("mpx", class_support, show_mpx_cmd, _("\ + add_show_prefix_cmd ("mpx", class_support, _("\ Show Intel Memory Protection Extensions specific variables."), - &mpx_show_cmdlist, "show mpx ", - 0 /* allow-unknown */, &showlist); + &mpx_show_cmdlist, "show mpx ", + 0 /* allow-unknown */, &showlist); /* Add "bound" command for the show mpx commands list. */ diff -Nru gdb-9.1/gdb/i386-tdep.h gdb-10.2/gdb/i386-tdep.h --- gdb-9.1/gdb/i386-tdep.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/i386-tdep.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for the i386. - Copyright (C) 2001-2020 Free Software Foundation, Inc. + Copyright (C) 2001-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -399,6 +399,19 @@ extern CORE_ADDR i386_skip_main_prologue (struct gdbarch *gdbarch, CORE_ADDR pc); +/* The "push_dummy_call" gdbarch method, optionally with the thiscall + calling convention. */ +extern CORE_ADDR i386_thiscall_push_dummy_call (struct gdbarch *gdbarch, + struct value *function, + struct regcache *regcache, + CORE_ADDR bp_addr, + int nargs, struct value **args, + CORE_ADDR sp, + function_call_return_method + return_method, + CORE_ADDR struct_addr, + bool thiscall); + /* Return whether the THIS_FRAME corresponds to a sigtramp routine. */ extern int i386_sigtramp_p (struct frame_info *this_frame); @@ -428,7 +441,7 @@ typedef buf_displaced_step_closure i386_displaced_step_closure; -extern struct displaced_step_closure *i386_displaced_step_copy_insn +extern displaced_step_closure_up i386_displaced_step_copy_insn (struct gdbarch *gdbarch, CORE_ADDR from, CORE_ADDR to, struct regcache *regs); extern void i386_displaced_step_fixup (struct gdbarch *gdbarch, diff -Nru gdb-9.1/gdb/i386-windows-nat.c gdb-10.2/gdb/i386-windows-nat.c --- gdb-9.1/gdb/i386-windows-nat.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/i386-windows-nat.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2008-2020 Free Software Foundation, Inc. +/* Copyright (C) 2008-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -22,8 +22,11 @@ #include <windows.h> -#define context_offset(x) ((int)&(((CONTEXT *)NULL)->x)) -static const int mappings[] = +#ifdef __x86_64__ +#define CONTEXT WOW64_CONTEXT +#endif +#define context_offset(x) ((int)(size_t)&(((CONTEXT *)NULL)->x)) +const int i386_mappings[] = { context_offset (Eax), context_offset (Ecx), @@ -70,19 +73,21 @@ context_offset (ExtendedRegisters[24]) }; #undef context_offset +#undef CONTEXT /* segment_register_p_ftype implementation for x86. */ -static int +int i386_windows_segment_register_p (int regnum) { return regnum >= I386_CS_REGNUM && regnum <= I386_GS_REGNUM; } +void _initialize_i386_windows_nat (); void -_initialize_i386_windows_nat (void) +_initialize_i386_windows_nat () { - windows_set_context_register_offsets (mappings); - windows_set_segment_register_p (i386_windows_segment_register_p); +#ifndef __x86_64__ x86_set_debug_register_length (4); +#endif } diff -Nru gdb-9.1/gdb/i386-windows-tdep.c gdb-10.2/gdb/i386-windows-tdep.c --- gdb-9.1/gdb/i386-windows-tdep.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/i386-windows-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,326 @@ +/* Target-dependent code for Windows (including Cygwin) running on i386's, + for GDB. + + Copyright (C) 2003-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "defs.h" +#include "osabi.h" +#include "i386-tdep.h" +#include "windows-tdep.h" +#include "regset.h" +#include "gdb_obstack.h" +#include "xml-support.h" +#include "gdbcore.h" +#include "inferior.h" + +/* Core file support. */ + +/* This vector maps GDB's idea of a register's number into an address + in the windows exception context vector. */ + +static int i386_windows_gregset_reg_offset[] = +{ + 176, /* eax */ + 172, /* ecx */ + 168, /* edx */ + 164, /* ebx */ + + 196, /* esp */ + 180, /* ebp */ + 160, /* esi */ + 156, /* edi */ + + 184, /* eip */ + 192, /* eflags */ + 188, /* cs */ + 200, /* ss */ + + 152, /* ds */ + 148, /* es */ + 144, /* fs */ + 140, /* gs */ + + 56, /* FloatSave.RegisterArea[0 * 10] */ + 66, /* FloatSave.RegisterArea[1 * 10] */ + 76, /* FloatSave.RegisterArea[2 * 10] */ + 86, /* FloatSave.RegisterArea[3 * 10] */ + 96, /* FloatSave.RegisterArea[4 * 10] */ + 106, /* FloatSave.RegisterArea[5 * 10] */ + 116, /* FloatSave.RegisterArea[6 * 10] */ + 126, /* FloatSave.RegisterArea[7 * 10] */ + + 28, /* FloatSave.ControlWord */ + 32, /* FloatSave.StatusWord */ + 36, /* FloatSave.TagWord */ + 44, /* FloatSave.ErrorSelector */ + 40, /* FloatSave.ErrorOffset */ + 52, /* FloatSave.DataSelector */ + 48, /* FloatSave.DataOffset */ + 44, /* FloatSave.ErrorSelector */ + + /* XMM0-7 */ + 364, /* ExtendedRegisters[10*16] */ + 380, /* ExtendedRegisters[11*16] */ + 396, /* ExtendedRegisters[12*16] */ + 412, /* ExtendedRegisters[13*16] */ + 428, /* ExtendedRegisters[14*16] */ + 444, /* ExtendedRegisters[15*16] */ + 460, /* ExtendedRegisters[16*16] */ + 476, /* ExtendedRegisters[17*16] */ + + /* MXCSR */ + 228 /* ExtendedRegisters[24] */ +}; + +#define I386_WINDOWS_SIZEOF_GREGSET 716 + +struct cpms_data +{ + struct gdbarch *gdbarch; + struct obstack *obstack; + int module_count; +}; + +static void +core_process_module_section (bfd *abfd, asection *sect, void *obj) +{ + struct cpms_data *data = (struct cpms_data *) obj; + enum bfd_endian byte_order = gdbarch_byte_order (data->gdbarch); + + char *module_name; + size_t module_name_size; + CORE_ADDR base_addr; + + gdb_byte *buf = NULL; + + if (!startswith (sect->name, ".module")) + return; + + buf = (gdb_byte *) xmalloc (bfd_section_size (sect) + 1); + if (!buf) + { + printf_unfiltered ("memory allocation failed for %s\n", sect->name); + goto out; + } + if (!bfd_get_section_contents (abfd, sect, + buf, 0, bfd_section_size (sect))) + goto out; + + + + /* A DWORD (data_type) followed by struct windows_core_module_info. */ + + base_addr = + extract_unsigned_integer (buf + 4, 4, byte_order); + + module_name_size = + extract_unsigned_integer (buf + 8, 4, byte_order); + + if (12 + module_name_size > bfd_section_size (sect)) + goto out; + module_name = (char *) buf + 12; + + /* The first module is the .exe itself. */ + if (data->module_count != 0) + windows_xfer_shared_library (module_name, base_addr, + NULL, data->gdbarch, data->obstack); + data->module_count++; + +out: + xfree (buf); + return; +} + +static ULONGEST +windows_core_xfer_shared_libraries (struct gdbarch *gdbarch, + gdb_byte *readbuf, + ULONGEST offset, ULONGEST len) +{ + struct obstack obstack; + const char *buf; + ULONGEST len_avail; + struct cpms_data data = { gdbarch, &obstack, 0 }; + + obstack_init (&obstack); + obstack_grow_str (&obstack, "<library-list>\n"); + bfd_map_over_sections (core_bfd, + core_process_module_section, + &data); + obstack_grow_str0 (&obstack, "</library-list>\n"); + + buf = (const char *) obstack_finish (&obstack); + len_avail = strlen (buf); + if (offset >= len_avail) + return 0; + + if (len > len_avail - offset) + len = len_avail - offset; + memcpy (readbuf, buf + offset, len); + + obstack_free (&obstack, NULL); + return len; +} + +/* This is how we want PTIDs from core files to be printed. */ + +static std::string +i386_windows_core_pid_to_str (struct gdbarch *gdbarch, ptid_t ptid) +{ + if (ptid.lwp () != 0) + return string_printf ("Thread 0x%lx", ptid.lwp ()); + + return normal_pid_to_str (ptid); +} + +static CORE_ADDR +i386_windows_skip_trampoline_code (struct frame_info *frame, CORE_ADDR pc) +{ + return i386_pe_skip_trampoline_code (frame, pc, NULL); +} + +static const char * +i386_windows_auto_wide_charset (void) +{ + return "UTF-16"; +} + +/* Implement the "push_dummy_call" gdbarch method. */ + +static CORE_ADDR +i386_windows_push_dummy_call (struct gdbarch *gdbarch, struct value *function, + struct regcache *regcache, CORE_ADDR bp_addr, + int nargs, struct value **args, CORE_ADDR sp, + function_call_return_method return_method, + CORE_ADDR struct_addr) +{ + /* For non-static member functions of 32bit Windows programs, the thiscall + calling convention is used, so the 'this' pointer is passed in ECX. */ + bool thiscall = false; + + struct type *type = check_typedef (value_type (function)); + if (type->code () == TYPE_CODE_PTR) + type = check_typedef (TYPE_TARGET_TYPE (type)); + + /* read_subroutine_type sets for non-static member functions the + artificial flag of the first parameter ('this' pointer). */ + if (type->code () == TYPE_CODE_METHOD + && type->num_fields () > 0 + && TYPE_FIELD_ARTIFICIAL (type, 0) + && type->field (0).type ()->code () == TYPE_CODE_PTR) + thiscall = 1; + + return i386_thiscall_push_dummy_call (gdbarch, function, regcache, bp_addr, + nargs, args, sp, return_method, + struct_addr, thiscall); +} + +/* Common parts for gdbarch initialization for Windows and Cygwin on i386. */ + +static void +i386_windows_init_abi_common (struct gdbarch_info info, struct gdbarch *gdbarch) +{ + struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); + + set_gdbarch_skip_trampoline_code (gdbarch, i386_windows_skip_trampoline_code); + + set_gdbarch_skip_main_prologue (gdbarch, i386_skip_main_prologue); + + tdep->struct_return = reg_struct_return; + + tdep->gregset_reg_offset = i386_windows_gregset_reg_offset; + tdep->gregset_num_regs = ARRAY_SIZE (i386_windows_gregset_reg_offset); + tdep->sizeof_gregset = I386_WINDOWS_SIZEOF_GREGSET; + + tdep->sizeof_fpregset = 0; + + /* Core file support. */ + set_gdbarch_core_xfer_shared_libraries + (gdbarch, windows_core_xfer_shared_libraries); + set_gdbarch_core_pid_to_str (gdbarch, i386_windows_core_pid_to_str); + + set_gdbarch_auto_wide_charset (gdbarch, i386_windows_auto_wide_charset); +} + +/* gdbarch initialization for Windows on i386. */ + +static void +i386_windows_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) +{ + i386_windows_init_abi_common (info, gdbarch); + windows_init_abi (info, gdbarch); + + set_gdbarch_push_dummy_call (gdbarch, i386_windows_push_dummy_call); +} + +/* gdbarch initialization for Cygwin on i386. */ + +static void +i386_cygwin_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) +{ + i386_windows_init_abi_common (info, gdbarch); + cygwin_init_abi (info, gdbarch); +} + +static gdb_osabi +i386_windows_osabi_sniffer (bfd *abfd) +{ + const char *target_name = bfd_get_target (abfd); + + if (!streq (target_name, "pei-i386")) + return GDB_OSABI_UNKNOWN; + + if (is_linked_with_cygwin_dll (abfd)) + return GDB_OSABI_CYGWIN; + + return GDB_OSABI_WINDOWS; +} + +static enum gdb_osabi +i386_cygwin_core_osabi_sniffer (bfd *abfd) +{ + const char *target_name = bfd_get_target (abfd); + + /* Cygwin uses elf core dumps. Do not claim all ELF executables, + check whether there is a .reg section of proper size. */ + if (strcmp (target_name, "elf32-i386") == 0) + { + asection *section = bfd_get_section_by_name (abfd, ".reg"); + if (section != nullptr + && bfd_section_size (section) == I386_WINDOWS_SIZEOF_GREGSET) + return GDB_OSABI_CYGWIN; + } + + return GDB_OSABI_UNKNOWN; +} + +void _initialize_i386_windows_tdep (); +void +_initialize_i386_windows_tdep () +{ + gdbarch_register_osabi_sniffer (bfd_arch_i386, bfd_target_coff_flavour, + i386_windows_osabi_sniffer); + + /* Cygwin uses elf core dumps. */ + gdbarch_register_osabi_sniffer (bfd_arch_i386, bfd_target_elf_flavour, + i386_cygwin_core_osabi_sniffer); + + gdbarch_register_osabi (bfd_arch_i386, 0, GDB_OSABI_WINDOWS, + i386_windows_init_abi); + gdbarch_register_osabi (bfd_arch_i386, 0, GDB_OSABI_CYGWIN, + i386_cygwin_init_abi); +} diff -Nru gdb-9.1/gdb/i387-tdep.c gdb-10.2/gdb/i387-tdep.c --- gdb-9.1/gdb/i387-tdep.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/i387-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Intel 387 floating point stuff. - Copyright (C) 1988-2020 Free Software Foundation, Inc. + Copyright (C) 1988-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -332,7 +332,7 @@ /* Floating point registers must be converted unless we are accessing them in their hardware type or TYPE is not float. */ if (type == i387_ext_type (gdbarch) - || TYPE_CODE (type) != TYPE_CODE_FLT) + || type->code () != TYPE_CODE_FLT) return 0; else return 1; @@ -355,7 +355,7 @@ gdb_assert (i386_fp_regnum_p (gdbarch, regnum)); /* We only support floating-point values. */ - if (TYPE_CODE (type) != TYPE_CODE_FLT) + if (type->code () != TYPE_CODE_FLT) { warning (_("Cannot convert floating-point register value " "to non-floating-point type.")); @@ -387,7 +387,7 @@ gdb_assert (i386_fp_regnum_p (gdbarch, regnum)); /* We only support floating-point values. */ - if (TYPE_CODE (type) != TYPE_CODE_FLT) + if (type->code () != TYPE_CODE_FLT) { warning (_("Cannot convert non-floating-point type " "to floating-point register value.")); diff -Nru gdb-9.1/gdb/i387-tdep.h gdb-10.2/gdb/i387-tdep.h --- gdb-9.1/gdb/i387-tdep.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/i387-tdep.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for the i387. - Copyright (C) 2000-2020 Free Software Foundation, Inc. + Copyright (C) 2000-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/ia64-libunwind-tdep.c gdb-10.2/gdb/ia64-libunwind-tdep.c --- gdb-9.1/gdb/ia64-libunwind-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/ia64-libunwind-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Frame unwinder for ia64 frames using the libunwind library. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. Written by Jeff Johnston, contributed by Red Hat Inc. @@ -133,10 +133,10 @@ } static void * -libunwind_descr_init (struct gdbarch *gdbarch) +libunwind_descr_init (struct obstack *obstack) { struct libunwind_descr *descr - = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct libunwind_descr); + = OBSTACK_ZALLOC (obstack, struct libunwind_descr); return descr; } @@ -151,14 +151,7 @@ arch_descr = ((struct libunwind_descr *) gdbarch_data (gdbarch, libunwind_descr_handle)); - - if (arch_descr == NULL) - { - /* First time here. Must initialize data area. */ - arch_descr = (struct libunwind_descr *) libunwind_descr_init (gdbarch); - deprecated_set_gdbarch_data (gdbarch, - libunwind_descr_handle, arch_descr); - } + gdb_assert (arch_descr != NULL); /* Copy new descriptor info into arch descriptor. */ arch_descr->gdb2uw = descr->gdb2uw; @@ -591,11 +584,12 @@ return libunwind_initialized; } +void _initialize_libunwind_frame (); void -_initialize_libunwind_frame (void) +_initialize_libunwind_frame () { libunwind_descr_handle - = gdbarch_data_register_post_init (libunwind_descr_init); + = gdbarch_data_register_pre_init (libunwind_descr_init); libunwind_initialized = libunwind_load (); } diff -Nru gdb-9.1/gdb/ia64-libunwind-tdep.h gdb-10.2/gdb/ia64-libunwind-tdep.h --- gdb-9.1/gdb/ia64-libunwind-tdep.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/ia64-libunwind-tdep.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Frame unwinder for ia64 frames with libunwind frame information. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. Contributed by Jeff Johnston. diff -Nru gdb-9.1/gdb/ia64-linux-nat.c gdb-10.2/gdb/ia64-linux-nat.c --- gdb-9.1/gdb/ia64-linux-nat.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/ia64-linux-nat.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,7 +1,7 @@ /* Functions specific to running gdb native on IA-64 running GNU/Linux. - Copyright (C) 1999-2020 Free Software Foundation, Inc. + Copyright (C) 1999-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -21,6 +21,7 @@ #include "defs.h" #include "inferior.h" #include "target.h" +#include "gdbarch.h" #include "gdbcore.h" #include "regcache.h" #include "ia64-tdep.h" @@ -80,6 +81,8 @@ /* Override linux_nat_target low methods. */ void low_new_thread (struct lwp_info *lp) override; bool low_status_is_event (int status) override; + + void enable_watchpoints_in_psr (ptid_t ptid); }; static ia64_linux_nat_target the_ia64_linux_nat_target; @@ -529,10 +532,10 @@ #define IA64_PSR_DB (1UL << 24) #define IA64_PSR_DD (1UL << 39) -static void -enable_watchpoints_in_psr (ptid_t ptid) +void +ia64_linux_nat_target::enable_watchpoints_in_psr (ptid_t ptid) { - struct regcache *regcache = get_thread_regcache (ptid); + struct regcache *regcache = get_thread_regcache (this, ptid); ULONGEST psr; regcache_cooked_read_unsigned (regcache, IA64_PSR_REGNUM, &psr); @@ -921,8 +924,9 @@ || WSTOPSIG (status) == SIGILL); } +void _initialize_ia64_linux_nat (); void -_initialize_ia64_linux_nat (void) +_initialize_ia64_linux_nat () { /* Register the target. */ linux_target = &the_ia64_linux_nat_target; diff -Nru gdb-9.1/gdb/ia64-linux-tdep.c gdb-10.2/gdb/ia64-linux-tdep.c --- gdb-9.1/gdb/ia64-linux-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/ia64-linux-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for the IA-64 for GDB, the GNU debugger. - Copyright (C) 2000-2020 Free Software Foundation, Inc. + Copyright (C) 2000-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -258,8 +258,9 @@ ia64_linux_stap_is_single_operand); } +void _initialize_ia64_linux_tdep (); void -_initialize_ia64_linux_tdep (void) +_initialize_ia64_linux_tdep () { gdbarch_register_osabi (bfd_arch_ia64, 0, GDB_OSABI_LINUX, ia64_linux_init_abi); diff -Nru gdb-9.1/gdb/ia64-tdep.c gdb-10.2/gdb/ia64-tdep.c --- gdb-9.1/gdb/ia64-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/ia64-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for the IA-64 for GDB, the GNU debugger. - Copyright (C) 1999-2020 Free Software Foundation, Inc. + Copyright (C) 1999-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -330,7 +330,7 @@ if (group == all_reggroup) return 1; vector_p = TYPE_VECTOR (register_type (gdbarch, regnum)); - float_p = TYPE_CODE (register_type (gdbarch, regnum)) == TYPE_CODE_FLT; + float_p = register_type (gdbarch, regnum)->code () == TYPE_CODE_FLT; raw_p = regnum < NUM_IA64_RAW_REGS; if (group == float_reggroup) return float_p; @@ -1212,7 +1212,7 @@ ia64_convert_register_p (struct gdbarch *gdbarch, int regno, struct type *type) { return (regno >= IA64_FR0_REGNUM && regno <= IA64_FR127_REGNUM - && TYPE_CODE (type) == TYPE_CODE_FLT + && type->code () == TYPE_CODE_FLT && type != ia64_ext_type (gdbarch)); } @@ -2713,7 +2713,7 @@ ehdr = elf_tdata (bfd)->elf_header; phdr = elf_tdata (bfd)->phdr; - load_base = ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile)); + load_base = objfile->text_section_offset (); for (i = 0; i < ehdr->e_phnum; ++i) { @@ -2764,7 +2764,7 @@ dip->start_ip = p_text->p_vaddr + load_base; dip->end_ip = dip->start_ip + p_text->p_memsz; - dip->gp = ia64_find_global_pointer (get_objfile_arch (objfile), ip); + dip->gp = ia64_find_global_pointer (objfile->arch (), ip); dip->format = UNW_INFO_FORMAT_REMOTE_TABLE; dip->u.rti.name_ptr = (unw_word_t) bfd_get_filename (bfd); dip->u.rti.segbase = segbase; @@ -3149,9 +3149,9 @@ /* Don't use the struct convention for anything but structure, union, or array types. */ - if (!(TYPE_CODE (type) == TYPE_CODE_STRUCT - || TYPE_CODE (type) == TYPE_CODE_UNION - || TYPE_CODE (type) == TYPE_CODE_ARRAY)) + if (!(type->code () == TYPE_CODE_STRUCT + || type->code () == TYPE_CODE_UNION + || type->code () == TYPE_CODE_ARRAY)) return 0; /* HFAs are structures (or arrays) consisting entirely of floating @@ -3173,8 +3173,8 @@ static int ia64_struct_type_p (const struct type *type) { - return (TYPE_CODE (type) == TYPE_CODE_STRUCT - || TYPE_CODE (type) == TYPE_CODE_UNION); + return (type->code () == TYPE_CODE_STRUCT + || type->code () == TYPE_CODE_UNION); } static void @@ -3320,7 +3320,7 @@ static int is_float_or_hfa_type_recurse (struct type *t, struct type **etp) { - switch (TYPE_CODE (t)) + switch (t->code ()) { case TYPE_CODE_FLT: if (*etp) @@ -3340,9 +3340,9 @@ { int i; - for (i = 0; i < TYPE_NFIELDS (t); i++) + for (i = 0; i < t->num_fields (); i++) if (!is_float_or_hfa_type_recurse - (check_typedef (TYPE_FIELD_TYPE (t, i)), etp)) + (check_typedef (t->field (i).type ()), etp)) return 0; return 1; } @@ -3374,7 +3374,7 @@ static int slot_alignment_is_next_even (struct type *t) { - switch (TYPE_CODE (t)) + switch (t->code ()) { case TYPE_CODE_INT: case TYPE_CODE_FLT: @@ -3389,9 +3389,9 @@ { int i; - for (i = 0; i < TYPE_NFIELDS (t); i++) + for (i = 0; i < t->num_fields (); i++) if (slot_alignment_is_next_even - (check_typedef (TYPE_FIELD_TYPE (t, i)))) + (check_typedef (t->field (i).type ()))) return 1; return 0; } @@ -3699,7 +3699,7 @@ if ((nslots & 1) && slot_alignment_is_next_even (type)) nslots++; - if (TYPE_CODE (type) == TYPE_CODE_FUNC) + if (type->code () == TYPE_CODE_FUNC) nfuncargs++; nslots += (len + 7) / 8; @@ -3740,9 +3740,9 @@ len = TYPE_LENGTH (type); /* Special handling for function parameters. */ - if (len == 8 - && TYPE_CODE (type) == TYPE_CODE_PTR - && TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_FUNC) + if (len == 8 + && type->code () == TYPE_CODE_PTR + && TYPE_TARGET_TYPE (type)->code () == TYPE_CODE_FUNC) { gdb_byte val_buf[8]; ULONGEST faddr = extract_unsigned_integer (value_contents (arg), @@ -4012,8 +4012,9 @@ return gdbarch; } +void _initialize_ia64_tdep (); void -_initialize_ia64_tdep (void) +_initialize_ia64_tdep () { gdbarch_register (bfd_arch_ia64, ia64_gdbarch_init, NULL); } diff -Nru gdb-9.1/gdb/ia64-tdep.h gdb-10.2/gdb/ia64-tdep.h --- gdb-9.1/gdb/ia64-tdep.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/ia64-tdep.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for the ia64. - Copyright (C) 2004-2020 Free Software Foundation, Inc. + Copyright (C) 2004-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/ia64-vms-tdep.c gdb-10.2/gdb/ia64-vms-tdep.c --- gdb-9.1/gdb/ia64-vms-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/ia64-vms-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for OpenVMS IA-64. - Copyright (C) 2012-2020 Free Software Foundation, Inc. + Copyright (C) 2012-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -153,8 +153,9 @@ #endif } +void _initialize_ia64_vms_tdep (); void -_initialize_ia64_vms_tdep (void) +_initialize_ia64_vms_tdep () { gdbarch_register_osabi (bfd_arch_ia64, 0, GDB_OSABI_OPENVMS, ia64_openvms_init_abi); diff -Nru gdb-9.1/gdb/infcall.c gdb-10.2/gdb/infcall.c --- gdb-9.1/gdb/infcall.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/infcall.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Perform an inferior function call, for GDB, the GNU debugger. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -42,6 +42,7 @@ #include "thread-fsm.h" #include <algorithm> #include "gdbsupport/scope-exit.h" +#include <list> /* If we can't find a function's name from its address, we print this instead. */ @@ -168,7 +169,7 @@ saved by the called function. */ arg = value_coerce_to_target (arg); - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_REF: case TYPE_CODE_RVALUE_REF: @@ -183,7 +184,7 @@ if the value was not previously in memory - in some cases we should clearly be allowing this, but how? */ new_value = value_cast (TYPE_TARGET_TYPE (type), arg); - new_value = value_ref (new_value, TYPE_CODE (type)); + new_value = value_ref (new_value, type->code ()); return new_value; } case TYPE_CODE_INT: @@ -259,20 +260,20 @@ part of it. */ /* Determine address to call. */ - if (TYPE_CODE (ftype) == TYPE_CODE_FUNC - || TYPE_CODE (ftype) == TYPE_CODE_METHOD) + if (ftype->code () == TYPE_CODE_FUNC + || ftype->code () == TYPE_CODE_METHOD) funaddr = value_address (function); - else if (TYPE_CODE (ftype) == TYPE_CODE_PTR) + else if (ftype->code () == TYPE_CODE_PTR) { funaddr = value_as_address (function); ftype = check_typedef (TYPE_TARGET_TYPE (ftype)); - if (TYPE_CODE (ftype) == TYPE_CODE_FUNC - || TYPE_CODE (ftype) == TYPE_CODE_METHOD) + if (ftype->code () == TYPE_CODE_FUNC + || ftype->code () == TYPE_CODE_METHOD) funaddr = gdbarch_convert_from_func_ptr_addr (gdbarch, funaddr, current_top_target ()); } - if (TYPE_CODE (ftype) == TYPE_CODE_FUNC - || TYPE_CODE (ftype) == TYPE_CODE_METHOD) + if (ftype->code () == TYPE_CODE_FUNC + || ftype->code () == TYPE_CODE_METHOD) { if (TYPE_GNU_IFUNC (ftype)) { @@ -302,7 +303,7 @@ else value_type = TYPE_TARGET_TYPE (ftype); } - else if (TYPE_CODE (ftype) == TYPE_CODE_INT) + else if (ftype->code () == TYPE_CODE_INT) { /* Handle the case of functions lacking debugging info. Their values are characters since their addresses are char. */ @@ -437,7 +438,7 @@ thread_info *thr = inferior_thread (); bool stack_temporaries = thread_stack_temporaries_enabled_p (thr); - if (TYPE_CODE (ri->value_type) == TYPE_CODE_VOID) + if (ri->value_type->code () == TYPE_CODE_VOID) retval = allocate_value (ri->value_type); else if (ri->struct_return_p) { @@ -648,7 +649,8 @@ if (!was_running && call_thread_ptid == inferior_ptid && stop_stack_dummy == STOP_STACK_DUMMY) - finish_thread_state (user_visible_resume_ptid (0)); + finish_thread_state (call_thread->inf->process_target (), + user_visible_resume_ptid (0)); enable_watchpoints_after_interactive_call_stop (); @@ -704,6 +706,33 @@ return addr; } +/* The data structure which keeps a destructor function and + its implicit 'this' parameter. */ + +struct destructor_info +{ + destructor_info (struct value *function, struct value *self) + : function (function), self (self) { } + + struct value *function; + struct value *self; +}; + + +/* Auxiliary function that takes a list of destructor functions + with their 'this' parameters, and invokes the functions. */ + +static void +call_destructors (const std::list<destructor_info> &dtors_to_invoke, + struct type *default_return_type) +{ + for (auto vals : dtors_to_invoke) + { + call_function_by_hand (vals.function, default_return_type, + gdb::make_array_view (&(vals.self), 1)); + } +} + /* See infcall.h. */ struct value * @@ -798,7 +827,7 @@ values_type = check_typedef (values_type); - if (args.size () < TYPE_NFIELDS (ftype)) + if (args.size () < ftype->num_fields ()) error (_("Too few arguments in function call.")); /* A holder for the inferior status. @@ -983,6 +1012,12 @@ internal_error (__FILE__, __LINE__, _("bad switch")); } + /* Coerce the arguments and handle pass-by-reference. + We want to remember the destruction required for pass-by-ref values. + For these, store the dtor function and the 'this' argument + in DTORS_TO_INVOKE. */ + std::list<destructor_info> dtors_to_invoke; + for (int i = args.size () - 1; i >= 0; i--) { int prototyped; @@ -990,9 +1025,9 @@ /* FIXME drow/2002-05-31: Should just always mark methods as prototyped. Can we respect TYPE_VARARGS? Probably not. */ - if (TYPE_CODE (ftype) == TYPE_CODE_METHOD) + if (ftype->code () == TYPE_CODE_METHOD) prototyped = 1; - if (TYPE_TARGET_TYPE (ftype) == NULL && TYPE_NFIELDS (ftype) == 0 + if (TYPE_TARGET_TYPE (ftype) == NULL && ftype->num_fields () == 0 && default_return_type != NULL) { /* Calling a no-debug function with the return type @@ -1007,21 +1042,105 @@ */ prototyped = 1; } - else if (i < TYPE_NFIELDS (ftype)) + else if (i < ftype->num_fields ()) prototyped = TYPE_PROTOTYPED (ftype); else prototyped = 0; - if (i < TYPE_NFIELDS (ftype)) - param_type = TYPE_FIELD_TYPE (ftype, i); + if (i < ftype->num_fields ()) + param_type = ftype->field (i).type (); else param_type = NULL; + value *original_arg = args[i]; args[i] = value_arg_coerce (gdbarch, args[i], param_type, prototyped); - if (param_type != NULL && language_pass_by_reference (param_type)) - args[i] = value_addr (args[i]); + if (param_type == NULL) + continue; + + auto info = language_pass_by_reference (param_type); + if (!info.copy_constructible) + error (_("expression cannot be evaluated because the type '%s' " + "is not copy constructible"), param_type->name ()); + + if (!info.destructible) + error (_("expression cannot be evaluated because the type '%s' " + "is not destructible"), param_type->name ()); + + if (info.trivially_copyable) + continue; + + /* Make a copy of the argument on the stack. If the argument is + trivially copy ctor'able, copy bit by bit. Otherwise, call + the copy ctor to initialize the clone. */ + CORE_ADDR addr = reserve_stack_space (param_type, sp); + value *clone + = value_from_contents_and_address (param_type, nullptr, addr); + push_thread_stack_temporary (call_thread.get (), clone); + value *clone_ptr + = value_from_pointer (lookup_pointer_type (param_type), addr); + + if (info.trivially_copy_constructible) + { + int length = TYPE_LENGTH (param_type); + write_memory (addr, value_contents (args[i]), length); + } + else + { + value *copy_ctor; + value *cctor_args[2] = { clone_ptr, original_arg }; + find_overload_match (gdb::make_array_view (cctor_args, 2), + param_type->name (), METHOD, + &clone_ptr, nullptr, ©_ctor, nullptr, + nullptr, 0, EVAL_NORMAL); + + if (copy_ctor == nullptr) + error (_("expression cannot be evaluated because a copy " + "constructor for the type '%s' could not be found " + "(maybe inlined?)"), param_type->name ()); + + call_function_by_hand (copy_ctor, default_return_type, + gdb::make_array_view (cctor_args, 2)); + } + + /* If the argument has a destructor, remember it so that we + invoke it after the infcall is complete. */ + if (!info.trivially_destructible) + { + /* Looking up the function via overload resolution does not + work because the compiler (in particular, gcc) adds an + artificial int parameter in some cases. So we look up + the function by using the "~" name. This should be OK + because there can be only one dtor definition. */ + const char *dtor_name = nullptr; + for (int fieldnum = 0; + fieldnum < TYPE_NFN_FIELDS (param_type); + fieldnum++) + { + fn_field *fn + = TYPE_FN_FIELDLIST1 (param_type, fieldnum); + const char *field_name + = TYPE_FN_FIELDLIST_NAME (param_type, fieldnum); + + if (field_name[0] == '~') + dtor_name = TYPE_FN_FIELD_PHYSNAME (fn, 0); + } + + if (dtor_name == nullptr) + error (_("expression cannot be evaluated because a destructor " + "for the type '%s' could not be found " + "(maybe inlined?)"), param_type->name ()); + + value *dtor + = find_function_in_inferior (dtor_name, 0); + + /* Insert the dtor to the front of the list to call them + in reverse order later. */ + dtors_to_invoke.emplace_front (dtor, clone_ptr); + } + + args[i] = clone_ptr; } /* Reserve space for the return structure to be written on the @@ -1188,6 +1307,10 @@ maybe_remove_breakpoints (); gdb_assert (retval != NULL); + + /* Destruct the pass-by-ref argument clones. */ + call_destructors (dtors_to_invoke, default_return_type); + return retval; } @@ -1384,8 +1507,9 @@ gdb_assert_not_reached ("... should not be here"); } +void _initialize_infcall (); void -_initialize_infcall (void) +_initialize_infcall () { add_setshow_boolean_cmd ("may-call-functions", no_class, &may_call_functions_p, _("\ diff -Nru gdb-9.1/gdb/infcall.h gdb-10.2/gdb/infcall.h --- gdb-9.1/gdb/infcall.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/infcall.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Perform an inferior function call, for GDB, the GNU debugger. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/inf-child.c gdb-10.2/gdb/inf-child.c --- gdb-9.1/gdb/inf-child.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/inf-child.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Base/prototype target for default child (native) targets. - Copyright (C) 1988-2020 Free Software Foundation, Inc. + Copyright (C) 1988-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -206,7 +206,7 @@ void inf_child_target::maybe_unpush_target () { - if (!inf_child_explicitly_opened && !have_inferiors ()) + if (!inf_child_explicitly_opened) unpush_target (this); } diff -Nru gdb-9.1/gdb/inf-child.h gdb-10.2/gdb/inf-child.h --- gdb-9.1/gdb/inf-child.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/inf-child.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Base/prototype target for default child (native) targets. - Copyright (C) 2004-2020 Free Software Foundation, Inc. + Copyright (C) 2004-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/infcmd.c gdb-10.2/gdb/infcmd.c --- gdb-9.1/gdb/infcmd.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/infcmd.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Memory-access and commands for "inferior" process, for GDB. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -52,6 +52,7 @@ #include "thread-fsm.h" #include "top.h" #include "interps.h" +#include "skip.h" #include "gdbsupport/gdb_optional.h" #include "source.h" #include "cli/cli-style.h" @@ -99,27 +100,6 @@ int stopped_by_random_signal; -/* Accessor routines. */ - -/* Set the io terminal for the current inferior. Ownership of - TERMINAL_NAME is not transferred. */ - -void -set_inferior_io_terminal (const char *terminal_name) -{ - xfree (current_inferior ()->terminal); - - if (terminal_name != NULL && *terminal_name != '\0') - current_inferior ()->terminal = xstrdup (terminal_name); - else - current_inferior ()->terminal = NULL; -} - -const char * -get_inferior_io_terminal (void) -{ - return current_inferior ()->terminal; -} static void set_inferior_tty_command (const char *args, int from_tty, @@ -127,7 +107,7 @@ { /* CLI has assigned the user-provided value to inferior_io_terminal_scratch. Now route it to current inferior. */ - set_inferior_io_terminal (inferior_io_terminal_scratch); + current_inferior ()->set_tty (inferior_io_terminal_scratch); } static void @@ -136,13 +116,13 @@ { /* Note that we ignore the passed-in value in favor of computing it directly. */ - const char *inferior_io_terminal = get_inferior_io_terminal (); + const char *inferior_tty = current_inferior ()->tty (); - if (inferior_io_terminal == NULL) - inferior_io_terminal = ""; + if (inferior_tty == nullptr) + inferior_tty = ""; fprintf_filtered (gdb_stdout, _("Terminal for future runs of program being debugged " - "is \"%s\".\n"), inferior_io_terminal); + "is \"%s\".\n"), inferior_tty); } const char * @@ -150,12 +130,10 @@ { if (current_inferior ()->argc != 0) { - char *n; - - n = construct_inferior_arguments (current_inferior ()->argc, - current_inferior ()->argv); - set_inferior_args (n); - xfree (n); + gdb::array_view<char * const> args (current_inferior ()->argv, + current_inferior ()->argc); + std::string n = construct_inferior_arguments (args); + set_inferior_args (n.c_str ()); } if (current_inferior ()->args == NULL) @@ -258,125 +236,6 @@ "when starting the inferior is \"%s\".\n"), cwd); } - -/* Compute command-line string given argument vector. This does the - same shell processing as fork_inferior. */ - -char * -construct_inferior_arguments (int argc, char **argv) -{ - char *result; - - if (startup_with_shell) - { -#ifdef __MINGW32__ - /* This holds all the characters considered special to the - Windows shells. */ - static const char special[] = "\"!&*|[]{}<>?`~^=;, \t\n"; - static const char quote = '"'; -#else - /* This holds all the characters considered special to the - typical Unix shells. We include `^' because the SunOS - /bin/sh treats it as a synonym for `|'. */ - static const char special[] = "\"!#$&*()\\|[]{}<>?'`~^; \t\n"; - static const char quote = '\''; -#endif - int i; - int length = 0; - char *out, *cp; - - /* We over-compute the size. It shouldn't matter. */ - for (i = 0; i < argc; ++i) - length += 3 * strlen (argv[i]) + 1 + 2 * (argv[i][0] == '\0'); - - result = (char *) xmalloc (length); - out = result; - - for (i = 0; i < argc; ++i) - { - if (i > 0) - *out++ = ' '; - - /* Need to handle empty arguments specially. */ - if (argv[i][0] == '\0') - { - *out++ = quote; - *out++ = quote; - } - else - { -#ifdef __MINGW32__ - int quoted = 0; - - if (strpbrk (argv[i], special)) - { - quoted = 1; - *out++ = quote; - } -#endif - for (cp = argv[i]; *cp; ++cp) - { - if (*cp == '\n') - { - /* A newline cannot be quoted with a backslash (it - just disappears), only by putting it inside - quotes. */ - *out++ = quote; - *out++ = '\n'; - *out++ = quote; - } - else - { -#ifdef __MINGW32__ - if (*cp == quote) -#else - if (strchr (special, *cp) != NULL) -#endif - *out++ = '\\'; - *out++ = *cp; - } - } -#ifdef __MINGW32__ - if (quoted) - *out++ = quote; -#endif - } - } - *out = '\0'; - } - else - { - /* In this case we can't handle arguments that contain spaces, - tabs, or newlines -- see breakup_args(). */ - int i; - int length = 0; - - for (i = 0; i < argc; ++i) - { - char *cp = strchr (argv[i], ' '); - if (cp == NULL) - cp = strchr (argv[i], '\t'); - if (cp == NULL) - cp = strchr (argv[i], '\n'); - if (cp != NULL) - error (_("can't handle command-line " - "argument containing whitespace")); - length += strlen (argv[i]) + 1; - } - - result = (char *) xmalloc (length); - result[0] = '\0'; - for (i = 0; i < argc; ++i) - { - if (i > 0) - strcat (result, " "); - strcat (result, argv[i]); - } - } - - return result; -} - /* This function strips the '&' character (indicating background execution) that is added as *the last* of the arguments ARGS of a @@ -440,7 +299,8 @@ thr->suspend.stop_pc = 0; try { - thr->suspend.stop_pc = regcache_read_pc (get_current_regcache ()); + regcache *rc = get_thread_regcache (thr); + thr->suspend.stop_pc = regcache_read_pc (rc); } catch (const gdb_exception_error &ex) { @@ -644,10 +504,19 @@ events --- the frontend shouldn't see them as stopped. In all-stop, always finish the state of all threads, as we may be resuming more than just the new process. */ - ptid_t finish_ptid = (non_stop - ? ptid_t (current_inferior ()->pid) - : minus_one_ptid); - scoped_finish_thread_state finish_state (finish_ptid); + process_stratum_target *finish_target; + ptid_t finish_ptid; + if (non_stop) + { + finish_target = current_inferior ()->process_target (); + finish_ptid = ptid_t (current_inferior ()->pid); + } + else + { + finish_target = nullptr; + finish_ptid = minus_one_ptid; + } + scoped_finish_thread_state finish_state (finish_target, finish_ptid); /* Pass zero for FROM_TTY, because at this point the "run" command has done its thing; now we are setting up the running program. */ @@ -717,6 +586,9 @@ if (thread->state != THREAD_STOPPED) return 0; + if (!thread->inf->has_execution ()) + return 0; + switch_to_thread (thread); clear_proceed_status (0); proceed ((CORE_ADDR) -1, GDB_SIGNAL_DEFAULT); @@ -810,7 +682,7 @@ continue_command (const char *args, int from_tty) { int async_exec; - int all_threads = 0; + bool all_threads_p = false; ERROR_NO_INFERIOR; @@ -822,17 +694,17 @@ { if (startswith (args, "-a")) { - all_threads = 1; + all_threads_p = true; args += sizeof ("-a") - 1; if (*args == '\0') args = NULL; } } - if (!non_stop && all_threads) + if (!non_stop && all_threads_p) error (_("`-a' is meaningless in all-stop mode.")); - if (args != NULL && all_threads) + if (args != NULL && all_threads_p) error (_("Can't resume all threads and specify " "proceed count simultaneously.")); @@ -849,11 +721,11 @@ tp = inferior_thread (); else { + process_stratum_target *last_target; ptid_t last_ptid; - struct target_waitstatus ws; - get_last_target_status (&last_ptid, &ws); - tp = find_thread_ptid (last_ptid); + get_last_target_status (&last_target, &last_ptid, nullptr); + tp = find_thread_ptid (last_target, last_ptid); } if (tp != NULL) bs = tp->control.stop_bpstat; @@ -881,7 +753,7 @@ ERROR_NO_INFERIOR; ensure_not_tfind_mode (); - if (!non_stop || !all_threads) + if (!non_stop || !all_threads_p) { ensure_valid_thread (); ensure_not_running (); @@ -892,21 +764,24 @@ if (from_tty) printf_filtered (_("Continuing.\n")); - continue_1 (all_threads); + continue_1 (all_threads_p); } -/* Record the starting point of a "step" or "next" command. */ +/* Record in TP the starting point of a "step" or "next" command. */ static void -set_step_frame (void) +set_step_frame (thread_info *tp) { + /* This can be removed once this function no longer implicitly relies on the + inferior_ptid value. */ + gdb_assert (inferior_ptid == tp->ptid); + frame_info *frame = get_current_frame (); symtab_and_line sal = find_frame_sal (frame); - set_step_info (frame, sal); + set_step_info (tp, frame, sal); CORE_ADDR pc = get_frame_pc (frame); - thread_info *tp = inferior_thread (); tp->control.step_start_function = find_pc_function (pc); } @@ -983,7 +858,7 @@ thread->control.stepping_command = 1; } -static int prepare_one_step (struct step_command_fsm *sm); +static int prepare_one_step (thread_info *, struct step_command_fsm *sm); static void step_1 (int skip_subroutines, int single_inst, const char *count_string) @@ -1021,7 +896,7 @@ loop. Let the continuation figure out how many other steps we need to do, and handle them one at the time, through step_once. */ - if (!prepare_one_step (step_sm)) + if (!prepare_one_step (thr, step_sm)) proceed ((CORE_ADDR) -1, GDB_SIGNAL_DEFAULT); else { @@ -1032,7 +907,7 @@ thr->thread_fsm->clean_up (thr); proceeded = normal_stop (); if (!proceeded) - inferior_event_handler (INF_EXEC_COMPLETE, NULL); + inferior_event_handler (INF_EXEC_COMPLETE); all_uis_check_sync_execution_done (); } } @@ -1051,7 +926,7 @@ /* There are more steps to make, and we did stop due to ending a stepping range. Do another step. */ if (--count > 0) - return prepare_one_step (this); + return prepare_one_step (tp, this); set_finished (); } @@ -1083,19 +958,17 @@ resumed. */ static int -prepare_one_step (struct step_command_fsm *sm) +prepare_one_step (thread_info *tp, struct step_command_fsm *sm) { + /* This can be removed once this function no longer implicitly relies on the + inferior_ptid value. */ + gdb_assert (inferior_ptid == tp->ptid); + if (sm->count > 0) { struct frame_info *frame = get_current_frame (); - /* Don't assume THREAD is a valid thread id. It is set to -1 if - the longjmp breakpoint was not required. Use the - INFERIOR_PTID thread instead, which is the same thread when - THREAD is set. */ - struct thread_info *tp = inferior_thread (); - - set_step_frame (); + set_step_frame (tp); if (!sm->single_inst) { @@ -1106,14 +979,29 @@ && inline_skipped_frames (tp)) { ptid_t resume_ptid; + const char *fn = NULL; + symtab_and_line sal; + struct symbol *sym; /* Pretend that we've ran. */ resume_ptid = user_visible_resume_ptid (1); - set_running (resume_ptid, 1); + set_running (tp->inf->process_target (), resume_ptid, true); step_into_inline_frame (tp); - sm->count--; - return prepare_one_step (sm); + + frame = get_current_frame (); + sal = find_frame_sal (frame); + sym = get_frame_function (frame); + + if (sym != NULL) + fn = sym->print_name (); + + if (sal.line == 0 + || !function_name_is_marked_for_skip (fn, sal)) + { + sm->count--; + return prepare_one_step (tp, sm); + } } pc = get_frame_pc (frame); @@ -1301,10 +1189,14 @@ /* This indicates what will be resumed. Either a single thread, a whole process, or all threads of all processes. */ ptid_t resume_ptid = user_visible_resume_ptid (0); + process_stratum_target *resume_target + = user_visible_resume_target (resume_ptid); + + thread_info *current = inferior_thread (); - for (thread_info *tp : all_non_exited_threads (resume_ptid)) + for (thread_info *tp : all_non_exited_threads (resume_target, resume_ptid)) { - if (tp->ptid == inferior_ptid) + if (tp == current) continue; if (tp->suspend.stop_signal != GDB_SIGNAL_0 @@ -1450,7 +1342,7 @@ struct until_next_fsm *sm; clear_proceed_status (0); - set_step_frame (); + set_step_frame (tp); frame = get_current_frame (); @@ -1550,7 +1442,7 @@ struct value *value; value_type = check_typedef (value_type); - gdb_assert (TYPE_CODE (value_type) != TYPE_CODE_VOID); + gdb_assert (value_type->code () != TYPE_CODE_VOID); /* FIXME: 2003-09-27: When returning from a nested inferior function call, it's possible (with no help from the architecture vector) @@ -1641,7 +1533,7 @@ print_return_value (struct ui_out *uiout, struct return_value_info *rv) { if (rv->type == NULL - || TYPE_CODE (check_typedef (rv->type)) == TYPE_CODE_VOID) + || check_typedef (rv->type)->code () == TYPE_CODE_VOID) return; try @@ -1705,7 +1597,7 @@ internal_error (__FILE__, __LINE__, _("finish_command: function has no target type")); - if (TYPE_CODE (check_typedef (rv->type)) != TYPE_CODE_VOID) + if (check_typedef (rv->type)->code () != TYPE_CODE_VOID) { struct value *func; @@ -1907,7 +1799,7 @@ called by that frame. We don't use the magic "1" value for step_range_end, because then infrun will think this is nexti, and not step over the rest of this inlined function call. */ - set_step_info (frame, {}); + set_step_info (tp, frame, {}); tp->control.step_range_start = get_frame_pc (frame); tp->control.step_range_end = tp->control.step_range_start; tp->control.step_over_calls = STEP_OVER_ALL; @@ -1967,6 +1859,7 @@ bpstat bs; int num, stat; ptid_t ptid; + process_stratum_target *proc_target; if (!target_has_execution) { @@ -1975,18 +1868,17 @@ } if (non_stop) - ptid = inferior_ptid; - else { - struct target_waitstatus ws; - - get_last_target_status (&ptid, &ws); + ptid = inferior_ptid; + proc_target = current_inferior ()->process_target (); } + else + get_last_target_status (&proc_target, &ptid, nullptr); if (ptid == null_ptid || ptid == minus_one_ptid) error (_("No selected thread.")); - thread_info *tp = find_thread_ptid (ptid); + thread_info *tp = find_thread_ptid (proc_target, ptid); if (tp->state == THREAD_EXITED) error (_("Invalid selected thread.")); @@ -2211,8 +2103,8 @@ /* If virtual format is floating, print it that way, and in raw hex. */ - if (TYPE_CODE (regtype) == TYPE_CODE_FLT - || TYPE_CODE (regtype) == TYPE_CODE_DECFLOAT) + if (regtype->code () == TYPE_CODE_FLT + || regtype->code () == TYPE_CODE_DECFLOAT) { struct value_print_options opts; const gdb_byte *valaddr = value_contents_for_printing (val); @@ -2221,9 +2113,7 @@ get_user_print_options (&opts); opts.deref_ref = 1; - val_print (regtype, - value_embedded_offset (val), 0, - &format_stream, 0, val, &opts, current_language); + common_val_print (val, &format_stream, 0, &opts, current_language); if (print_raw_format) { @@ -2241,9 +2131,7 @@ /* Print the register in hex. */ get_formatted_print_options (&opts, 'x'); opts.deref_ref = 1; - val_print (regtype, - value_embedded_offset (val), 0, - &format_stream, 0, val, &opts, current_language); + common_val_print (val, &format_stream, 0, &opts, current_language); /* If not a vector register, print it also according to its natural format. */ if (print_raw_format && TYPE_VECTOR (regtype) == 0) @@ -2251,9 +2139,7 @@ pad_to_column (format_stream, value_column_2); get_user_print_options (&opts); opts.deref_ref = 1; - val_print (regtype, - value_embedded_offset (val), 0, - &format_stream, 0, val, &opts, current_language); + common_val_print (val, &format_stream, 0, &opts, current_language); } } @@ -2495,20 +2381,6 @@ printf_unfiltered (_("[Inferior %d (%s) killed]\n"), infnum, pid_str.c_str ()); - /* If we still have other inferiors to debug, then don't mess with - with their threads. */ - if (!have_inferiors ()) - { - init_thread_list (); /* Destroy thread info. */ - - /* Killing off the inferior can leave us with a core file. If - so, print the state we are left in. */ - if (target_has_stack) - { - printf_filtered (_("In %s,\n"), target_longname); - print_stack_frame (get_selected_frame (NULL), 1, SRC_AND_LOC, 1); - } - } bfd_cache_close_all (); } @@ -2766,6 +2638,9 @@ target_stop (ptid_t (inferior_ptid.pid ())); } + /* Check for exec file mismatch, and let the user solve it. */ + validate_exec_file (from_tty); + mode = async_exec ? ATTACH_POST_WAIT_RESUME : ATTACH_POST_WAIT_STOP; /* Some system don't generate traps when attaching to inferior. @@ -2789,12 +2664,16 @@ add_inferior_continuation (attach_command_continuation, a, attach_command_continuation_free_args); + /* Let infrun consider waiting for events out of this + target. */ + inferior->process_target ()->threads_executing = true; + if (!target_is_async_p ()) mark_infrun_async_event_handler (); return; } - - attach_post_wait (args, from_tty, mode); + else + attach_post_wait (args, from_tty, mode); } /* We had just found out that the target was already attached to an @@ -2911,20 +2790,15 @@ deprecated_detach_hook (); } -void -interrupt_target_1 (int all_threads) -{ - ptid_t ptid; - - if (all_threads) - ptid = minus_one_ptid; - else - ptid = inferior_ptid; +/* Stop PTID in the current target, and tag the PTID threads as having + been explicitly requested to stop. PTID can be a thread, a + process, or minus_one_ptid, meaning all threads of all inferiors of + the current target. */ - if (non_stop) - target_stop (ptid); - else - target_interrupt (); +static void +stop_current_target_threads_ns (ptid_t ptid) +{ + target_stop (ptid); /* Tag the thread as having been explicitly requested to stop, so other parts of gdb know not to resume this thread automatically, @@ -2932,8 +2806,32 @@ non-stop mode, as when debugging a multi-threaded application in all-stop mode, we will only get one stop event --- it's undefined which thread will report the event. */ + set_stop_requested (current_inferior ()->process_target (), + ptid, 1); +} + +/* See inferior.h. */ + +void +interrupt_target_1 (bool all_threads) +{ if (non_stop) - set_stop_requested (ptid, 1); + { + if (all_threads) + { + scoped_restore_current_thread restore_thread; + + for (inferior *inf : all_inferiors ()) + { + switch_to_inferior_no_thread (inf); + stop_current_target_threads_ns (minus_one_ptid); + } + } + else + stop_current_target_threads_ns (inferior_ptid); + } + else + target_interrupt (); } /* interrupt [-a] @@ -2996,14 +2894,6 @@ gdbarch_print_float_info (get_frame_arch (frame), gdb_stdout, frame, args); } -static void -unset_command (const char *args, int from_tty) -{ - printf_filtered (_("\"unset\" must be followed by the " - "name of an unset subcommand.\n")); - help_list (unsetlist, "unset ", all_commands, gdb_stdout); -} - /* Implement `info proc' family of commands. */ static void @@ -3121,8 +3011,9 @@ \n\ To start the inferior without using a shell, use \"set startup-with-shell off\"." +void _initialize_infcmd (); void -_initialize_infcmd (void) +_initialize_infcmd () { static struct cmd_list_element *info_proc_cmdlist; struct cmd_list_element *c = NULL; @@ -3140,9 +3031,9 @@ show_inferior_tty_command, &setlist, &showlist); cmd_name = "inferior-tty"; - c = lookup_cmd (&cmd_name, setlist, "", -1, 1); + c = lookup_cmd (&cmd_name, setlist, "", NULL, -1, 1); gdb_assert (c != NULL); - add_alias_cmd ("tty", c, class_alias, 0, &cmdlist); + add_alias_cmd ("tty", c, class_run, 0, &cmdlist); cmd_name = "args"; add_setshow_string_noescape_cmd (cmd_name, class_run, @@ -3153,7 +3044,7 @@ set_args_command, show_args_command, &setlist, &showlist); - c = lookup_cmd (&cmd_name, setlist, "", -1, 1); + c = lookup_cmd (&cmd_name, setlist, "", NULL, -1, 1); gdb_assert (c != NULL); set_cmd_completer (c, filename_completer); @@ -3172,7 +3063,7 @@ set_cwd_command, show_cwd_command, &setlist, &showlist); - c = lookup_cmd (&cmd_name, setlist, "", -1, 1); + c = lookup_cmd (&cmd_name, setlist, "", NULL, -1, 1); gdb_assert (c != NULL); set_cmd_completer (c, filename_completer); @@ -3183,9 +3074,9 @@ environment to be given to the program."), &showlist); set_cmd_completer (c, noop_completer); - add_prefix_cmd ("unset", no_class, unset_command, - _("Complement to certain \"set\" commands."), - &unsetlist, "unset ", 0, &cmdlist); + add_basic_prefix_cmd ("unset", no_class, + _("Complement to certain \"set\" commands."), + &unsetlist, "unset ", 0, &cmdlist); c = add_cmd ("environment", class_run, unset_environment_command, _("\ Cancel environment variable VAR for the program.\n\ @@ -3280,14 +3171,14 @@ Usage: stepi [N]\n\ Argument N means step N times (or till program stops for another \ reason).")); - add_com_alias ("si", "stepi", class_alias, 0); + add_com_alias ("si", "stepi", class_run, 0); add_com ("nexti", class_run, nexti_command, _("\ Step one instruction, but proceed through subroutine calls.\n\ Usage: nexti [N]\n\ Argument N means step N times (or till program stops for another \ reason).")); - add_com_alias ("ni", "nexti", class_alias, 0); + add_com_alias ("ni", "nexti", class_run, 0); add_com ("finish", class_run, finish_command, _("\ Execute until selected stack frame returns.\n\ diff -Nru gdb-9.1/gdb/inferior.c gdb-10.2/gdb/inferior.c --- gdb-9.1/gdb/inferior.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/inferior.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Multi-process control for GDB, the GNU debugger. - Copyright (C) 2008-2020 Free Software Foundation, Inc. + Copyright (C) 2008-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -79,7 +79,6 @@ discard_all_inferior_continuations (inf); inferior_free_data (inf); xfree (inf->args); - xfree (inf->terminal); target_desc_info_free (inf->tdesc_info); } @@ -90,6 +89,23 @@ registry_data () { inferior_alloc_data (this); + + m_target_stack.push (get_dummy_target ()); +} + +void +inferior::set_tty (const char *terminal_name) +{ + if (terminal_name != nullptr && *terminal_name != '\0') + m_terminal = make_unique_xstrdup (terminal_name); + else + m_terminal = NULL; +} + +const char * +inferior::tty () +{ + return m_terminal.get (); } struct inferior * @@ -160,7 +176,7 @@ /* If this program space is rendered useless, remove it. */ if (program_space_empty_p (inf->pspace)) - delete_program_space (inf->pspace); + delete inf->pspace; delete inf; } @@ -247,6 +263,7 @@ { /* If this is the first inferior with threads, reset the global thread id. */ + delete_exited_threads (); if (!any_thread_p ()) init_thread_list (); @@ -257,13 +274,6 @@ gdb::observers::inferior_appeared.notify (inf); } -void -discard_all_inferiors (void) -{ - for (inferior *inf : all_non_exited_inferiors ()) - exit_inferior_silent (inf); -} - struct inferior * find_inferior_id (int num) { @@ -275,14 +285,14 @@ } struct inferior * -find_inferior_pid (int pid) +find_inferior_pid (process_stratum_target *targ, int pid) { /* Looking for inferior pid == 0 is always wrong, and indicative of a bug somewhere else. There may be more than one with pid == 0, for instance. */ gdb_assert (pid != 0); - for (inferior *inf : all_inferiors ()) + for (inferior *inf : all_inferiors (targ)) if (inf->pid == pid) return inf; @@ -292,9 +302,9 @@ /* See inferior.h */ struct inferior * -find_inferior_ptid (ptid_t ptid) +find_inferior_ptid (process_stratum_target *targ, ptid_t ptid) { - return find_inferior_pid (ptid.pid ()); + return find_inferior_pid (targ, ptid.pid ()); } /* See inferior.h. */ @@ -314,17 +324,6 @@ return NULL; } -struct inferior * -iterate_over_inferiors (int (*callback) (struct inferior *, void *), - void *data) -{ - for (inferior *inf : all_inferiors_safe ()) - if ((*callback) (inf, data)) - return inf; - - return NULL; -} - int have_inferiors (void) { @@ -339,12 +338,12 @@ in the middle of a 'mourn' operation. */ int -number_of_live_inferiors (void) +number_of_live_inferiors (process_stratum_target *proc_target) { int num_inf = 0; - for (inferior *inf : all_non_exited_inferiors ()) - if (target_has_execution_1 (ptid_t (inf->pid))) + for (inferior *inf : all_non_exited_inferiors (proc_target)) + if (inf->has_execution ()) for (thread_info *tp ATTRIBUTE_UNUSED : inf->non_exited_threads ()) { /* Found a live thread in this inferior, go to the next @@ -361,7 +360,7 @@ int have_live_inferiors (void) { - return number_of_live_inferiors () > 0; + return number_of_live_inferiors (NULL) > 0; } /* Prune away any unused inferiors, and then prune away no longer used @@ -425,6 +424,31 @@ inf->num, inferior_pid_to_str (inf->pid).c_str (), filename); } +/* Helper for print_inferior. Returns the 'connection-id' string for + PROC_TARGET. */ + +static std::string +uiout_field_connection (process_stratum_target *proc_target) +{ + if (proc_target == NULL) + { + return {}; + } + else if (proc_target->connection_string () != NULL) + { + return string_printf ("%d (%s %s)", + proc_target->connection_number, + proc_target->shortname (), + proc_target->connection_string ()); + } + else + { + return string_printf ("%d (%s)", + proc_target->connection_number, + proc_target->shortname ()); + } +} + /* Prints the list of inferiors and their details on UIOUT. This is a version of 'info_inferior_command' suitable for use from MI. @@ -436,6 +460,7 @@ print_inferior (struct ui_out *uiout, const char *requested_inferiors) { int inf_count = 0; + size_t connection_id_len = 20; /* Compute number of inferiors we will print. */ for (inferior *inf : all_inferiors ()) @@ -443,6 +468,10 @@ if (!number_is_in_list (requested_inferiors, inf->num)) continue; + std::string conn = uiout_field_connection (inf->process_target ()); + if (connection_id_len < conn.size ()) + connection_id_len = conn.size (); + ++inf_count; } @@ -452,13 +481,20 @@ return; } - ui_out_emit_table table_emitter (uiout, 4, inf_count, "inferiors"); + ui_out_emit_table table_emitter (uiout, 5, inf_count, "inferiors"); uiout->table_header (1, ui_left, "current", ""); uiout->table_header (4, ui_left, "number", "Num"); uiout->table_header (17, ui_left, "target-id", "Description"); + uiout->table_header (connection_id_len, ui_left, + "connection-id", "Connection"); uiout->table_header (17, ui_left, "exec", "Executable"); uiout->table_body (); + + /* Restore the current thread after the loop because we switch the + inferior in the loop. */ + scoped_restore_current_pspace_and_thread restore_pspace_thread; + inferior *current_inf = current_inferior (); for (inferior *inf : all_inferiors ()) { if (!number_is_in_list (requested_inferiors, inf->num)) @@ -466,15 +502,22 @@ ui_out_emit_tuple tuple_emitter (uiout, NULL); - if (inf == current_inferior ()) + if (inf == current_inf) uiout->field_string ("current", "*"); else uiout->field_skip ("current"); uiout->field_signed ("number", inf->num); + /* Because target_pid_to_str uses current_top_target, + switch the inferior. */ + switch_to_inferior_no_thread (inf); + uiout->field_string ("target-id", inferior_pid_to_str (inf->pid)); + std::string conn = uiout_field_connection (inf->process_target ()); + uiout->field_string ("connection-id", conn.c_str ()); + if (inf->pspace->pspace_exec_filename != NULL) uiout->field_string ("exec", inf->pspace->pspace_exec_filename); else @@ -574,6 +617,16 @@ bfd_cache_close_all (); } +/* See inferior.h. */ + +void +switch_to_inferior_no_thread (inferior *inf) +{ + set_current_inferior (inf); + switch_to_no_thread (); + set_current_program_space (inf->pspace); +} + static void inferior_command (const char *args, int from_tty) { @@ -604,9 +657,7 @@ } else { - set_current_inferior (inf); - switch_to_no_thread (); - set_current_program_space (inf->pspace); + switch_to_inferior_no_thread (inf); gdb::observers::user_selected_context_changed.notify (USER_SELECTED_INFERIOR); @@ -685,7 +736,41 @@ return inf; } -/* add-inferior [-copies N] [-exec FILENAME] */ +/* Switch to inferior NEW_INF, a new inferior, and unless + NO_CONNECTION is true, push the process_stratum_target of ORG_INF + to NEW_INF. */ + +static void +switch_to_inferior_and_push_target (inferior *new_inf, + bool no_connection, inferior *org_inf) +{ + process_stratum_target *proc_target = org_inf->process_target (); + + /* Switch over temporarily, while reading executable and + symbols. */ + switch_to_inferior_no_thread (new_inf); + + /* Reuse the target for new inferior. */ + if (!no_connection && proc_target != NULL) + { + push_target (proc_target); + if (proc_target->connection_string () != NULL) + printf_filtered (_("Added inferior %d on connection %d (%s %s)\n"), + new_inf->num, + proc_target->connection_number, + proc_target->shortname (), + proc_target->connection_string ()); + else + printf_filtered (_("Added inferior %d on connection %d (%s)\n"), + new_inf->num, + proc_target->connection_number, + proc_target->shortname ()); + } + else + printf_filtered (_("Added inferior %d\n"), new_inf->num); +} + +/* add-inferior [-copies N] [-exec FILENAME] [-no-connection] */ static void add_inferior_command (const char *args, int from_tty) @@ -693,6 +778,7 @@ int i, copies = 1; gdb::unique_xmalloc_ptr<char> exec; symfile_add_flags add_flags = 0; + bool no_connection = false; if (from_tty) add_flags |= SYMFILE_VERBOSE; @@ -712,6 +798,8 @@ error (_("No argument to -copies")); copies = parse_and_eval_long (*argv); } + else if (strcmp (*argv, "-no-connection") == 0) + no_connection = true; else if (strcmp (*argv, "-exec") == 0) { ++argv; @@ -725,35 +813,32 @@ } } + inferior *orginf = current_inferior (); + scoped_restore_current_pspace_and_thread restore_pspace_thread; for (i = 0; i < copies; ++i) { - struct inferior *inf = add_inferior_with_spaces (); + inferior *inf = add_inferior_with_spaces (); - printf_filtered (_("Added inferior %d\n"), inf->num); + switch_to_inferior_and_push_target (inf, no_connection, orginf); if (exec != NULL) { - /* Switch over temporarily, while reading executable and - symbols.q. */ - set_current_program_space (inf->pspace); - set_current_inferior (inf); - switch_to_no_thread (); - exec_file_attach (exec.get (), from_tty); symbol_file_add_main (exec.get (), add_flags); } } } -/* clone-inferior [-copies N] [ID] */ +/* clone-inferior [-copies N] [ID] [-no-connection] */ static void clone_inferior_command (const char *args, int from_tty) { int i, copies = 1; struct inferior *orginf = NULL; + bool no_connection = false; if (args) { @@ -774,6 +859,8 @@ if (copies < 0) error (_("Invalid copies number")); } + else if (strcmp (*argv, "-no-connection") == 0) + no_connection = true; } else { @@ -819,15 +906,13 @@ inf->aspace = pspace->aspace; inf->gdbarch = orginf->gdbarch; + switch_to_inferior_and_push_target (inf, no_connection, orginf); + /* If the original inferior had a user specified target description, make the clone use it too. */ if (target_desc_info_from_user_p (inf->tdesc_info)) copy_inferior_target_desc_info (inf, orginf); - printf_filtered (_("Added inferior %d.\n"), inf->num); - - set_current_inferior (inf); - switch_to_no_thread (); clone_program_space (pspace, orginf->pspace); } } @@ -888,10 +973,13 @@ c = add_com ("add-inferior", no_class, add_inferior_command, _("\ Add a new inferior.\n\ -Usage: add-inferior [-copies N] [-exec FILENAME]\n\ +Usage: add-inferior [-copies N] [-exec FILENAME] [-no-connection]\n\ N is the optional number of inferiors to add, default is 1.\n\ FILENAME is the file name of the executable to use\n\ -as main program.")); +as main program.\n\ +By default, the new inferior inherits the current inferior's connection.\n\ +If -no-connection is specified, the new inferior begins with\n\ +no target connection yet.")); set_cmd_completer (c, filename_completer); add_com ("remove-inferiors", no_class, remove_inferior_command, _("\ @@ -900,11 +988,14 @@ add_com ("clone-inferior", no_class, clone_inferior_command, _("\ Clone inferior ID.\n\ -Usage: clone-inferior [-copies N] [ID]\n\ -Add N copies of inferior ID. The new inferior has the same\n\ +Usage: clone-inferior [-copies N] [-no-connection] [ID]\n\ +Add N copies of inferior ID. The new inferiors have the same\n\ executable loaded as the copied inferior. If -copies is not specified,\n\ adds 1 copy. If ID is not specified, it is the current inferior\n\ -that is cloned.")); +that is cloned.\n\ +By default, the new inferiors inherit the copied inferior's connection.\n\ +If -no-connection is specified, the new inferiors begin with\n\ +no target connection yet.")); add_cmd ("inferiors", class_run, detach_inferior_command, _("\ Detach from inferior ID (or list of IDS).\n\ diff -Nru gdb-9.1/gdb/inferior.h gdb-10.2/gdb/inferior.h --- gdb-9.1/gdb/inferior.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/inferior.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,7 +1,7 @@ /* Variables that describe the inferior process running under GDB: Where it is, why it stopped, and how to step it. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -21,6 +21,8 @@ #if !defined (INFERIOR_H) #define INFERIOR_H 1 +#include <exception> + struct target_waitstatus; struct frame_info; struct ui_file; @@ -52,10 +54,13 @@ #include "symfile-add-flags.h" #include "gdbsupport/refcounted-object.h" #include "gdbsupport/forward-scope-exit.h" +#include "gdbsupport/gdb_unique_ptr.h" #include "gdbsupport/common-inferior.h" #include "gdbthread.h" +#include "process-stratum-target.h" + struct infcall_suspend_state; struct infcall_control_state; @@ -77,7 +82,13 @@ /* If we are restoring the inferior state due to an exception, some error message will be printed. So, only warn the user when we cannot restore during normal execution. */ - if (!std::uncaught_exception ()) + bool unwinding; +#if __cpp_lib_uncaught_exceptions + unwinding = std::uncaught_exceptions () > 0; +#else + unwinding = std::uncaught_exception (); +#endif + if (!unwinding) warning (_("Failed to restore inferior state: %s"), e.what ()); } } @@ -115,11 +126,6 @@ extern void clear_sigint_trap (void); -/* Set/get file name for default use for standard in/out in the inferior. */ - -extern void set_inferior_io_terminal (const char *terminal_name); -extern const char *get_inferior_io_terminal (void); - /* Collected pid, tid, etc. of the debugged inferior. When there's no inferior, inferior_ptid.pid () will be 0. */ @@ -182,8 +188,6 @@ STARTUP_INFERIOR. */ extern ptid_t gdb_startup_inferior (pid_t pid, int num_traps); -extern char *construct_inferior_arguments (int, char **); - /* From infcmd.c */ /* Initial inferior setup. Determines the exec file is not yet known, @@ -206,7 +210,7 @@ extern void continue_1 (int all_threads); -extern void interrupt_target_1 (int all_threads); +extern void interrupt_target_1 (bool all_threads); using delete_longjmp_breakpoint_cleanup = FORWARD_SCOPE_EXIT (delete_longjmp_breakpoint); @@ -308,6 +312,10 @@ extern void set_current_inferior (inferior *); +/* Switch inferior (and program space) to INF, and switch to no thread + selected. */ +extern void switch_to_inferior_no_thread (inferior *inf); + /* GDB represents the state of each program execution with an object called an inferior. An inferior typically corresponds to a process but is more general and applies also to targets that do not have a @@ -339,6 +347,38 @@ /* Returns true if we can delete this inferior. */ bool deletable () const { return refcount () == 0; } + /* Push T in this inferior's target stack. */ + void push_target (struct target_ops *t) + { m_target_stack.push (t); } + + /* Unpush T from this inferior's target stack. */ + int unpush_target (struct target_ops *t) + { return m_target_stack.unpush (t); } + + /* Returns true if T is pushed in this inferior's target stack. */ + bool target_is_pushed (target_ops *t) + { return m_target_stack.is_pushed (t); } + + /* Find the target beneath T in this inferior's target stack. */ + target_ops *find_target_beneath (const target_ops *t) + { return m_target_stack.find_beneath (t); } + + /* Return the target at the top of this inferior's target stack. */ + target_ops *top_target () + { return m_target_stack.top (); } + + /* Return the target at process_stratum level in this inferior's + target stack. */ + struct process_stratum_target *process_target () + { return (process_stratum_target *) m_target_stack.at (process_stratum); } + + /* Return the target at STRATUM in this inferior's target stack. */ + target_ops *target_at (enum strata stratum) + { return m_target_stack.at (stratum); } + + bool has_execution () + { return target_has_execution_1 (this); } + /* Pointer to next inferior in singly-linked list of inferiors. */ struct inferior *next = NULL; @@ -374,6 +414,14 @@ inline safe_inf_threads_range threads_safe () { return safe_inf_threads_range (this->thread_list); } + /* Set/get file name for default use for standard in/out in the + inferior. On Unix systems, we try to make TERMINAL_NAME the + inferior's controlling terminal. If TERMINAL_NAME is nullptr or + the empty string, then the inferior inherits GDB's terminal (or + GDBserver's if spawning a remote process). */ + void set_tty (const char *terminal_name); + const char *tty (); + /* Convenient handle (GDB inferior id). Unique across all inferiors. */ int num = 0; @@ -419,9 +467,6 @@ this inferior. */ gdb::unique_xmalloc_ptr<char> cwd; - /* The name of terminal device to use for I/O. */ - char *terminal = NULL; - /* The terminal state as set by the last target_terminal::terminal_* call. */ target_terminal_state terminal_state = target_terminal_state::is_ours; @@ -500,6 +545,13 @@ /* Per inferior data-pointers required by other GDB modules. */ REGISTRY_FIELDS; + +private: + /* The inferior's target stack. */ + target_stack m_target_stack; + + /* The name of terminal device to use for I/O. */ + gdb::unique_xmalloc_ptr<char> m_terminal; }; /* Keep a registry of per-inferior data-pointers required by other GDB @@ -530,14 +582,14 @@ extern void inferior_appeared (struct inferior *inf, int pid); -/* Get rid of all inferiors. */ -extern void discard_all_inferiors (void); - -/* Search function to lookup an inferior by target 'pid'. */ -extern struct inferior *find_inferior_pid (int pid); - -/* Search function to lookup an inferior whose pid is equal to 'ptid.pid'. */ -extern struct inferior *find_inferior_ptid (ptid_t ptid); +/* Search function to lookup an inferior of TARG by target 'pid'. */ +extern struct inferior *find_inferior_pid (process_stratum_target *targ, + int pid); + +/* Search function to lookup an inferior of TARG whose pid is equal to + 'ptid.pid'. */ +extern struct inferior *find_inferior_ptid (process_stratum_target *targ, + ptid_t ptid); /* Search function to lookup an inferior by GDB 'num'. */ extern struct inferior *find_inferior_id (int num); @@ -547,25 +599,12 @@ extern struct inferior * find_inferior_for_program_space (struct program_space *pspace); -/* Inferior iterator function. - - Calls a callback function once for each inferior, so long as the - callback function returns false. If the callback function returns - true, the iteration will end and the current inferior will be - returned. This can be useful for implementing a search for a - inferior with arbitrary attributes, or for applying some operation - to every inferior. - - It is safe to delete the iterated inferior from the callback. */ -extern struct inferior *iterate_over_inferiors (int (*) (struct inferior *, - void *), - void *); - /* Returns true if the inferior list is not empty. */ extern int have_inferiors (void); -/* Returns the number of live inferiors (real live processes). */ -extern int number_of_live_inferiors (void); +/* Returns the number of live inferiors running on PROC_TARGET (real + live processes with execution). */ +extern int number_of_live_inferiors (process_stratum_target *proc_target); /* Returns true if there are any live inferiors in the inferior list (not cores, not executables, real live processes). */ @@ -622,18 +661,18 @@ */ inline all_inferiors_range -all_inferiors () +all_inferiors (process_stratum_target *proc_target = nullptr) { - return {}; + return all_inferiors_range (proc_target); } /* Return a range that can be used to walk over all inferiors with PID not zero, with range-for. */ inline all_non_exited_inferiors_range -all_non_exited_inferiors () +all_non_exited_inferiors (process_stratum_target *proc_target = nullptr) { - return {}; + return all_non_exited_inferiors_range (proc_target); } /* Prune away automatically added inferiors that aren't required diff -Nru gdb-9.1/gdb/inferior-iter.h gdb-10.2/gdb/inferior-iter.h --- gdb-9.1/gdb/inferior-iter.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/inferior-iter.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Inferior iterators and ranges for GDB, the GNU debugger. - Copyright (C) 2018-2020 Free Software Foundation, Inc. + Copyright (C) 2018-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -36,18 +36,23 @@ typedef int difference_type; /* Create an iterator pointing at HEAD. */ - explicit all_inferiors_iterator (inferior *head) - : m_inf (head) - {} + all_inferiors_iterator (process_stratum_target *proc_target, inferior *head) + : m_proc_target (proc_target) + { + /* Advance M_INF to the first inferior's position. */ + for (m_inf = head; m_inf != NULL; m_inf = m_inf->next) + if (m_inf_matches ()) + return; + } /* Create a one-past-end iterator. */ all_inferiors_iterator () - : m_inf (nullptr) + : m_proc_target (nullptr), m_inf (nullptr) {} all_inferiors_iterator &operator++ () { - m_inf = m_inf->next; + advance (); return *this; } @@ -58,6 +63,30 @@ { return m_inf != other.m_inf; } private: + /* Advance to next inferior, skipping filtered inferiors. */ + void advance () + { + /* The loop below is written in the natural way as-if we'd always + start at the beginning of the inferior list. This + fast-forwards the algorithm to the actual current position. */ + goto start; + + while (m_inf != NULL) + { + if (m_inf_matches ()) + return; + start: + m_inf = m_inf->next; + } + } + + bool m_inf_matches () + { + return (m_proc_target == nullptr + || m_proc_target == m_inf->process_target ()); + } + + process_stratum_target *m_proc_target; inferior *m_inf; }; @@ -80,10 +109,17 @@ inferiors with range-for. */ struct all_inferiors_range { + all_inferiors_range (process_stratum_target *proc_target = nullptr) + : m_filter_target (proc_target) + {} + all_inferiors_iterator begin () const - { return all_inferiors_iterator (inferior_list); } + { return all_inferiors_iterator (m_filter_target, inferior_list); } all_inferiors_iterator end () const { return all_inferiors_iterator (); } + +private: + process_stratum_target *m_filter_target; }; /* Iterate over all inferiors, safely. */ @@ -97,10 +133,26 @@ struct all_inferiors_safe_range { + explicit all_inferiors_safe_range (process_stratum_target *filter_target) + : m_filter_target (filter_target) + {} + + all_inferiors_safe_range () + : m_filter_target (nullptr) + {} + all_inferiors_safe_iterator begin () const - { return all_inferiors_safe_iterator (inferior_list); } + { + return (all_inferiors_safe_iterator + (all_inferiors_iterator (m_filter_target, inferior_list))); + } + all_inferiors_safe_iterator end () const { return all_inferiors_safe_iterator (); } + +private: + /* The filter. */ + process_stratum_target *m_filter_target; }; /* A range adapter that makes it possible to iterate over all @@ -108,10 +160,22 @@ struct all_non_exited_inferiors_range { + explicit all_non_exited_inferiors_range (process_stratum_target *filter_target) + : m_filter_target (filter_target) + {} + + all_non_exited_inferiors_range () + : m_filter_target (nullptr) + {} + all_non_exited_inferiors_iterator begin () const - { return all_non_exited_inferiors_iterator (inferior_list); } + { return all_non_exited_inferiors_iterator (m_filter_target, inferior_list); } all_non_exited_inferiors_iterator end () const { return all_non_exited_inferiors_iterator (); } + +private: + /* The filter. */ + process_stratum_target *m_filter_target; }; #endif /* !defined (INFERIOR_ITER_H) */ diff -Nru gdb-9.1/gdb/inf-loop.c gdb-10.2/gdb/inf-loop.c --- gdb-9.1/gdb/inf-loop.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/inf-loop.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Handling of inferior events for the event loop for GDB, the GNU debugger. - Copyright (C) 1999-2020 Free Software Foundation, Inc. + Copyright (C) 1999-2021 Free Software Foundation, Inc. Written by Elena Zannoni <ezannoni@cygnus.com> of Cygnus Solutions. This file is part of GDB. @@ -20,7 +20,7 @@ #include "defs.h" #include "inferior.h" #include "infrun.h" -#include "event-loop.h" +#include "gdbsupport/event-loop.h" #include "event-top.h" #include "inf-loop.h" #include "remote.h" @@ -34,13 +34,12 @@ /* General function to handle events in the inferior. */ void -inferior_event_handler (enum inferior_event_type event_type, - gdb_client_data client_data) +inferior_event_handler (enum inferior_event_type event_type) { switch (event_type) { case INF_REG_EVENT: - fetch_inferior_event (client_data); + fetch_inferior_event (); break; case INF_EXEC_COMPLETE: diff -Nru gdb-9.1/gdb/inf-loop.h gdb-10.2/gdb/inf-loop.h --- gdb-9.1/gdb/inf-loop.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/inf-loop.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Interface to the inferior event handling code for GDB, the GNU debugger. - Copyright (C) 1999-2020 Free Software Foundation, Inc. + Copyright (C) 1999-2021 Free Software Foundation, Inc. Written by Elena Zannoni <ezannoni@cygnus.com> of Cygnus Solutions. This file is part of GDB. @@ -22,7 +22,6 @@ #include "target.h" /* For enum inferior_event_type. */ -extern void inferior_event_handler (enum inferior_event_type event_type, - void* client_data); +extern void inferior_event_handler (enum inferior_event_type event_type); #endif /* #ifndef INF_LOOP_H */ diff -Nru gdb-9.1/gdb/inflow.c gdb-10.2/gdb/inflow.c --- gdb-9.1/gdb/inflow.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/inflow.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Low level interface to ptrace, for GDB when running under Unix. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -27,7 +27,7 @@ #include "observable.h" #include <signal.h> #include <fcntl.h> -#include "gdb_select.h" +#include "gdbsupport/gdb_select.h" #include "inflow.h" #include "gdbcmd.h" @@ -953,8 +953,9 @@ stdin_serial = serial_fdopen (0); } +void _initialize_inflow (); void -_initialize_inflow (void) +_initialize_inflow () { add_info ("terminal", info_terminal_command, _("Print inferior's saved terminal status.")); diff -Nru gdb-9.1/gdb/inflow.h gdb-10.2/gdb/inflow.h --- gdb-9.1/gdb/inflow.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/inflow.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Low level interface to ptrace, for GDB when running under Unix. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/inf-ptrace.c gdb-10.2/gdb/inf-ptrace.c --- gdb-9.1/gdb/inf-ptrace.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/inf-ptrace.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Low-level child interface to ptrace. - Copyright (C) 1988-2020 Free Software Foundation, Inc. + Copyright (C) 1988-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -37,61 +37,21 @@ -/* A unique_ptr helper to unpush a target. */ - -struct target_unpusher +static PTRACE_TYPE_RET +gdb_ptrace (PTRACE_TYPE_ARG1 request, ptid_t ptid, PTRACE_TYPE_ARG3 addr, + PTRACE_TYPE_ARG4 data) { - void operator() (struct target_ops *ops) const - { - unpush_target (ops); - } -}; - -/* A unique_ptr that unpushes a target on destruction. */ - -typedef std::unique_ptr<struct target_ops, target_unpusher> target_unpush_up; - - +#ifdef __NetBSD__ + return ptrace (request, ptid.pid (), addr, data); +#else + pid_t pid = get_ptrace_pid (ptid); + return ptrace (request, pid, addr, data); +#endif +} inf_ptrace_target::~inf_ptrace_target () {} -#ifdef PT_GET_PROCESS_STATE - -/* Target hook for follow_fork. On entry and at return inferior_ptid is - the ptid of the followed inferior. */ - -int -inf_ptrace_target::follow_fork (int follow_child, int detach_fork) -{ - if (!follow_child) - { - struct thread_info *tp = inferior_thread (); - pid_t child_pid = tp->pending_follow.value.related_pid.pid (); - - /* Breakpoints have already been detached from the child by - infrun.c. */ - - if (ptrace (PT_DETACH, child_pid, (PTRACE_TYPE_ARG3)1, 0) == -1) - perror_with_name (("ptrace")); - } - - return 0; -} - -int -inf_ptrace_target::insert_fork_catchpoint (int pid) -{ - return 0; -} - -int -inf_ptrace_target::remove_fork_catchpoint (int pid) -{ - return 0; -} - -#endif /* PT_GET_PROCESS_STATE */ /* Prepare to be traced. */ @@ -114,9 +74,6 @@ const std::string &allargs, char **env, int from_tty) { - pid_t pid; - ptid_t ptid; - /* Do not change either targets above or the same target if already present. The reason is the target stack is shared across multiple inferiors. */ int ops_already_pushed = target_is_pushed (this); @@ -129,14 +86,15 @@ unpusher.reset (this); } - pid = fork_inferior (exec_file, allargs, env, inf_ptrace_me, NULL, - NULL, NULL, NULL); + pid_t pid = fork_inferior (exec_file, allargs, env, inf_ptrace_me, NULL, + NULL, NULL, NULL); - ptid = ptid_t (pid); + ptid_t ptid (pid); /* We have something that executes now. We'll be running through the shell at this point (if startup-with-shell is true), but the pid shouldn't change. */ - add_thread_silent (ptid); + thread_info *thr = add_thread_silent (this, ptid); + switch_to_thread (thr); unpusher.release (); @@ -147,23 +105,6 @@ target_post_startup_inferior (ptid); } -#ifdef PT_GET_PROCESS_STATE - -void -inf_ptrace_target::post_startup_inferior (ptid_t pid) -{ - ptrace_event_t pe; - - /* Set the initial event mask. */ - memset (&pe, 0, sizeof pe); - pe.pe_set_event |= PTRACE_FORK; - if (ptrace (PT_SET_EVENT_MASK, pid.pid (), - (PTRACE_TYPE_ARG3)&pe, sizeof pe) == -1) - perror_with_name (("ptrace")); -} - -#endif - /* Clean up a rotting corpse of an inferior after it died. */ void @@ -186,7 +127,6 @@ void inf_ptrace_target::attach (const char *args, int from_tty) { - char *exec_file; pid_t pid; struct inferior *inf; @@ -210,7 +150,7 @@ if (from_tty) { - exec_file = get_exec_file (0); + const char *exec_file = get_exec_file (0); if (exec_file) printf_unfiltered (_("Attaching to program: %s, %s\n"), exec_file, @@ -232,35 +172,19 @@ inf = current_inferior (); inferior_appeared (inf, pid); inf->attach_flag = 1; - inferior_ptid = ptid_t (pid); /* Always add a main thread. If some target extends the ptrace target, it should decorate the ptid later with more info. */ - thread_info *thr = add_thread_silent (inferior_ptid); + thread_info *thr = add_thread_silent (this, ptid_t (pid)); + switch_to_thread (thr); + /* Don't consider the thread stopped until we've processed its initial SIGSTOP stop. */ - set_executing (thr->ptid, true); + set_executing (this, thr->ptid, true); unpusher.release (); } -#ifdef PT_GET_PROCESS_STATE - -void -inf_ptrace_target::post_attach (int pid) -{ - ptrace_event_t pe; - - /* Set the initial event mask. */ - memset (&pe, 0, sizeof pe); - pe.pe_set_event |= PTRACE_FORK; - if (ptrace (PT_SET_EVENT_MASK, pid, - (PTRACE_TYPE_ARG3)&pe, sizeof pe) == -1) - perror_with_name (("ptrace")); -} - -#endif - /* Detach from the inferior. If FROM_TTY is non-zero, be chatty about it. */ void @@ -291,7 +215,7 @@ void inf_ptrace_target::detach_success (inferior *inf) { - inferior_ptid = null_ptid; + switch_to_no_thread (); detach_inferior (inf); maybe_unpush_target (); @@ -314,8 +238,9 @@ target_mourn_inferior (inferior_ptid); } -/* Return which PID to pass to ptrace in order to observe/control the - tracee identified by PTID. */ +#ifndef __NetBSD__ + +/* See inf-ptrace.h. */ pid_t get_ptrace_pid (ptid_t ptid) @@ -329,6 +254,7 @@ pid = ptid.pid (); return pid; } +#endif /* Resume execution of thread PTID, or all threads if PTID is -1. If STEP is nonzero, single-step it. If SIGNAL is nonzero, give it @@ -337,15 +263,12 @@ void inf_ptrace_target::resume (ptid_t ptid, int step, enum gdb_signal signal) { - pid_t pid; - int request; + PTRACE_TYPE_ARG1 request; if (minus_one_ptid == ptid) /* Resume all threads. Traditionally ptrace() only supports single-threaded processes, so simply resume the inferior. */ - pid = inferior_ptid.pid (); - else - pid = get_ptrace_pid (ptid); + ptid = ptid_t (inferior_ptid.pid ()); if (catch_syscall_enabled () > 0) request = PT_SYSCALL; @@ -355,10 +278,10 @@ if (step) { /* If this system does not support PT_STEP, a higher level - function will have called single_step() to transmute the step - request into a continue request (by setting breakpoints on - all possible successor instructions), so we don't have to - worry about that here. */ + function will have called the appropriate functions to transmute the + step request into a continue request (by setting breakpoints on + all possible successor instructions), so we don't have to + worry about that here. */ request = PT_STEP; } @@ -366,7 +289,7 @@ where it was. If GDB wanted it to start some other way, we have already written a new program counter value to the child. */ errno = 0; - ptrace (request, pid, (PTRACE_TYPE_ARG3)1, gdb_signal_to_host (signal)); + gdb_ptrace (request, ptid, (PTRACE_TYPE_ARG3)1, gdb_signal_to_host (signal)); if (errno != 0) perror_with_name (("ptrace")); } @@ -408,49 +331,11 @@ } /* Ignore terminated detached child processes. */ - if (!WIFSTOPPED (status) && pid != inferior_ptid.pid ()) + if (!WIFSTOPPED (status) && find_inferior_pid (this, pid) == nullptr) pid = -1; } while (pid == -1); -#ifdef PT_GET_PROCESS_STATE - if (WIFSTOPPED (status)) - { - ptrace_state_t pe; - pid_t fpid; - - if (ptrace (PT_GET_PROCESS_STATE, pid, - (PTRACE_TYPE_ARG3)&pe, sizeof pe) == -1) - perror_with_name (("ptrace")); - - switch (pe.pe_report_event) - { - case PTRACE_FORK: - ourstatus->kind = TARGET_WAITKIND_FORKED; - ourstatus->value.related_pid = ptid_t (pe.pe_other_pid); - - /* Make sure the other end of the fork is stopped too. */ - fpid = waitpid (pe.pe_other_pid, &status, 0); - if (fpid == -1) - perror_with_name (("waitpid")); - - if (ptrace (PT_GET_PROCESS_STATE, fpid, - (PTRACE_TYPE_ARG3)&pe, sizeof pe) == -1) - perror_with_name (("ptrace")); - - gdb_assert (pe.pe_report_event == PTRACE_FORK); - gdb_assert (pe.pe_other_pid == pid); - if (fpid == inferior_ptid.pid ()) - { - ourstatus->value.related_pid = ptid_t (pe.pe_other_pid); - return ptid_t (fpid); - } - - return ptid_t (pid); - } - } -#endif - store_waitstatus (ourstatus, status); return ptid_t (pid); } @@ -461,7 +346,7 @@ be non-null. Return the number of transferred bytes. */ static ULONGEST -inf_ptrace_peek_poke (pid_t pid, gdb_byte *readbuf, +inf_ptrace_peek_poke (ptid_t ptid, gdb_byte *readbuf, const gdb_byte *writebuf, ULONGEST addr, ULONGEST len) { @@ -492,8 +377,8 @@ if (readbuf != NULL || chunk < sizeof (PTRACE_TYPE_RET)) { errno = 0; - buf.word = ptrace (PT_READ_I, pid, - (PTRACE_TYPE_ARG3)(uintptr_t) addr, 0); + buf.word = gdb_ptrace (PT_READ_I, ptid, + (PTRACE_TYPE_ARG3)(uintptr_t) addr, 0); if (errno != 0) break; if (readbuf != NULL) @@ -503,15 +388,15 @@ { memcpy (buf.byte + skip, writebuf + n, chunk); errno = 0; - ptrace (PT_WRITE_D, pid, (PTRACE_TYPE_ARG3)(uintptr_t) addr, + gdb_ptrace (PT_WRITE_D, ptid, (PTRACE_TYPE_ARG3)(uintptr_t) addr, buf.word); if (errno != 0) { /* Using the appropriate one (I or D) is necessary for Gould NP1, at least. */ errno = 0; - ptrace (PT_WRITE_I, pid, (PTRACE_TYPE_ARG3)(uintptr_t) addr, - buf.word); + gdb_ptrace (PT_WRITE_I, ptid, (PTRACE_TYPE_ARG3)(uintptr_t) addr, + buf.word); if (errno != 0) break; } @@ -529,7 +414,7 @@ const gdb_byte *writebuf, ULONGEST offset, ULONGEST len, ULONGEST *xfered_len) { - pid_t pid = get_ptrace_pid (inferior_ptid); + ptid_t ptid = inferior_ptid; switch (object) { @@ -553,7 +438,7 @@ piod.piod_len = len; errno = 0; - if (ptrace (PT_IO, pid, (caddr_t)&piod, 0) == 0) + if (gdb_ptrace (PT_IO, ptid, (caddr_t)&piod, 0) == 0) { /* Return the actual number of bytes read or written. */ *xfered_len = piod.piod_len; @@ -566,7 +451,7 @@ return TARGET_XFER_EOF; } #endif - *xfered_len = inf_ptrace_peek_poke (pid, readbuf, writebuf, + *xfered_len = inf_ptrace_peek_poke (ptid, readbuf, writebuf, offset, len); return *xfered_len != 0 ? TARGET_XFER_OK : TARGET_XFER_EOF; @@ -589,7 +474,7 @@ piod.piod_len = len; errno = 0; - if (ptrace (PT_IO, pid, (caddr_t)&piod, 0) == 0) + if (gdb_ptrace (PT_IO, ptid, (caddr_t)&piod, 0) == 0) { /* Return the actual number of bytes read or written. */ *xfered_len = piod.piod_len; @@ -633,39 +518,3 @@ { return normal_pid_to_str (ptid); } - -#if defined (PT_IO) && defined (PIOD_READ_AUXV) - -/* Read one auxv entry from *READPTR, not reading locations >= ENDPTR. - Return 0 if *READPTR is already at the end of the buffer. - Return -1 if there is insufficient buffer for a whole entry. - Return 1 if an entry was read into *TYPEP and *VALP. */ - -int -inf_ptrace_target::auxv_parse (gdb_byte **readptr, gdb_byte *endptr, - CORE_ADDR *typep, CORE_ADDR *valp) -{ - struct type *int_type = builtin_type (target_gdbarch ())->builtin_int; - struct type *ptr_type = builtin_type (target_gdbarch ())->builtin_data_ptr; - const int sizeof_auxv_type = TYPE_LENGTH (int_type); - const int sizeof_auxv_val = TYPE_LENGTH (ptr_type); - enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch ()); - gdb_byte *ptr = *readptr; - - if (endptr == ptr) - return 0; - - if (endptr - ptr < 2 * sizeof_auxv_val) - return -1; - - *typep = extract_unsigned_integer (ptr, sizeof_auxv_type, byte_order); - ptr += sizeof_auxv_val; /* Alignment. */ - *valp = extract_unsigned_integer (ptr, sizeof_auxv_val, byte_order); - ptr += sizeof_auxv_val; - - *readptr = ptr; - return 1; -} - -#endif - diff -Nru gdb-9.1/gdb/inf-ptrace.h gdb-10.2/gdb/inf-ptrace.h --- gdb-9.1/gdb/inf-ptrace.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/inf-ptrace.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Low level child interface to ptrace. - Copyright (C) 2004-2020 Free Software Foundation, Inc. + Copyright (C) 2004-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -43,17 +43,6 @@ void create_inferior (const char *, const std::string &, char **, int) override; -#ifdef PT_GET_PROCESS_STATE - int follow_fork (int, int) override; - - int insert_fork_catchpoint (int) override; - - int remove_fork_catchpoint (int) override; - - void post_startup_inferior (ptid_t) override; - - void post_attach (int) override; -#endif void mourn_inferior () override; @@ -68,19 +57,19 @@ ULONGEST offset, ULONGEST len, ULONGEST *xfered_len) override; -#if defined (PT_IO) && defined (PIOD_READ_AUXV) - int auxv_parse (gdb_byte **readptr, - gdb_byte *endptr, CORE_ADDR *typep, CORE_ADDR *valp) override; -#endif - protected: /* Cleanup the inferior after a successful ptrace detach. */ void detach_success (inferior *inf); }; +#ifndef __NetBSD__ /* Return which PID to pass to ptrace in order to observe/control the - tracee identified by PTID. */ + tracee identified by PTID. + + Unlike most other Operating Systems, NetBSD tracks both pid and lwp + and avoids this function. */ extern pid_t get_ptrace_pid (ptid_t); +#endif #endif diff -Nru gdb-9.1/gdb/infrun.c gdb-10.2/gdb/infrun.c --- gdb-9.1/gdb/infrun.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/infrun.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,7 +1,7 @@ /* Target-struct-independent code to start (run) and stop an inferior process. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -28,6 +28,7 @@ #include "gdbcore.h" #include "gdbcmd.h" #include "target.h" +#include "target-connection.h" #include "gdbthread.h" #include "annotate.h" #include "symfile.h" @@ -55,7 +56,7 @@ #include "target-dcache.h" #include "terminal.h" #include "solist.h" -#include "event-loop.h" +#include "gdbsupport/event-loop.h" #include "thread-fsm.h" #include "gdbsupport/enum-flags.h" #include "progspace-and-thread.h" @@ -63,6 +64,13 @@ #include "arch-utils.h" #include "gdbsupport/scope-exit.h" #include "gdbsupport/forward-scope-exit.h" +#include "gdbsupport/gdb_select.h" +#include <unordered_map> +#include "async-event.h" +#include "gdbsupport/selftest.h" +#include "scoped-mock-context.h" +#include "test-target.h" +#include "debug.h" /* Prototypes for local functions */ @@ -70,16 +78,10 @@ static void sig_print_header (void); -static int follow_fork (void); - -static int follow_fork_inferior (int follow_child, int detach_fork); - static void follow_inferior_reset_breakpoints (void); static int currently_stepping (struct thread_info *tp); -void nullify_last_target_wait_ptid (void); - static void insert_hp_step_resume_breakpoint_at_frame (struct frame_info *); static void insert_step_resume_breakpoint_at_caller (struct frame_info *); @@ -90,6 +92,8 @@ static void resume (gdb_signal sig); +static void wait_for_inferior (inferior *inf); + /* Asynchronous signal handler registered as event loop source for when we have pending events ready to be passed to the core. */ static struct async_event_handler *infrun_async_inferior_event_token; @@ -101,16 +105,24 @@ /* See infrun.h. */ void +infrun_debug_printf_1 (const char *func_name, const char *fmt, ...) +{ + va_list ap; + va_start (ap, fmt); + debug_prefixed_vprintf ("infrun", func_name, fmt, ap); + va_end (ap); +} + +/* See infrun.h. */ + +void infrun_async (int enable) { if (infrun_is_async != enable) { infrun_is_async = enable; - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, - "infrun: infrun_async(%d)\n", - enable); + infrun_debug_printf ("enable=%d", enable); if (enable) mark_async_event_handler (infrun_async_inferior_event_token); @@ -372,9 +384,10 @@ static int stop_print_frame; -/* This is a cached copy of the pid/waitstatus of the last event - returned by target_wait()/deprecated_target_wait_hook(). This - information is returned by get_last_target_status(). */ +/* This is a cached copy of the target/ptid/waitstatus of the last + event returned by target_wait()/deprecated_target_wait_hook(). + This information is returned by get_last_target_status(). */ +static process_stratum_target *target_last_proc_target; static ptid_t target_last_wait_ptid; static struct target_waitstatus target_last_waitstatus; @@ -407,8 +420,8 @@ the fork parent. At return inferior_ptid is the ptid of the followed inferior. */ -static int -follow_fork_inferior (int follow_child, int detach_fork) +static bool +follow_fork_inferior (bool follow_child, bool detach_fork) { int has_vforked; ptid_t parent_ptid, child_ptid; @@ -480,10 +493,12 @@ scoped_restore_current_pspace_and_thread restore_pspace_thread; - inferior_ptid = child_ptid; - add_thread_silent (inferior_ptid); set_current_inferior (child_inf); + switch_to_no_thread (); child_inf->symfile_flags = SYMFILE_NO_READ; + push_target (parent_inf->process_target ()); + thread_info *child_thr + = add_thread_silent (child_inf->process_target (), child_ptid); /* If this is a vfork child, then the address-space is shared with the parent. */ @@ -492,6 +507,8 @@ child_inf->pspace = parent_inf->pspace; child_inf->aspace = parent_inf->aspace; + exec_on_vfork (); + /* The parent will be frozen until the child is done with the shared region. Keep track of the parent. */ @@ -499,6 +516,11 @@ child_inf->pending_detach = 0; parent_inf->vfork_child = child_inf; parent_inf->pending_detach = 0; + + /* Now that the inferiors and program spaces are all + wired up, we can switch to the child thread (which + switches inferior and program space too). */ + switch_to_thread (child_thr); } else { @@ -508,6 +530,10 @@ set_current_program_space (child_inf->pspace); clone_program_space (child_inf->pspace, parent_inf->pspace); + /* solib_create_inferior_hook relies on the current + thread. */ + switch_to_thread (child_thr); + /* Let the shared library layer (e.g., solib-svr4) learn about this new process, relocate the cloned exec, pull in shared libraries, and install the solib event @@ -567,52 +593,63 @@ parent_pspace = parent_inf->pspace; - /* If we're vforking, we want to hold on to the parent until the - child exits or execs. At child exec or exit time we can - remove the old breakpoints from the parent and detach or - resume debugging it. Otherwise, detach the parent now; we'll - want to reuse it's program/address spaces, but we can't set - them to the child before removing breakpoints from the - parent, otherwise, the breakpoints module could decide to - remove breakpoints from the wrong process (since they'd be - assigned to the same address space). */ + process_stratum_target *target = parent_inf->process_target (); - if (has_vforked) - { - gdb_assert (child_inf->vfork_parent == NULL); - gdb_assert (parent_inf->vfork_child == NULL); - child_inf->vfork_parent = parent_inf; - child_inf->pending_detach = 0; - parent_inf->vfork_child = child_inf; - parent_inf->pending_detach = detach_fork; - parent_inf->waiting_for_vfork_done = 0; - } - else if (detach_fork) - { - if (print_inferior_events) - { - /* Ensure that we have a process ptid. */ - ptid_t process_ptid = ptid_t (parent_ptid.pid ()); + { + /* Hold a strong reference to the target while (maybe) + detaching the parent. Otherwise detaching could close the + target. */ + auto target_ref = target_ops_ref::new_reference (target); + + /* If we're vforking, we want to hold on to the parent until + the child exits or execs. At child exec or exit time we + can remove the old breakpoints from the parent and detach + or resume debugging it. Otherwise, detach the parent now; + we'll want to reuse it's program/address spaces, but we + can't set them to the child before removing breakpoints + from the parent, otherwise, the breakpoints module could + decide to remove breakpoints from the wrong process (since + they'd be assigned to the same address space). */ - target_terminal::ours_for_output (); - fprintf_filtered (gdb_stdlog, - _("[Detaching after fork from " - "parent %s]\n"), - target_pid_to_str (process_ptid).c_str ()); - } + if (has_vforked) + { + gdb_assert (child_inf->vfork_parent == NULL); + gdb_assert (parent_inf->vfork_child == NULL); + child_inf->vfork_parent = parent_inf; + child_inf->pending_detach = 0; + parent_inf->vfork_child = child_inf; + parent_inf->pending_detach = detach_fork; + parent_inf->waiting_for_vfork_done = 0; + } + else if (detach_fork) + { + if (print_inferior_events) + { + /* Ensure that we have a process ptid. */ + ptid_t process_ptid = ptid_t (parent_ptid.pid ()); - target_detach (parent_inf, 0); - } + target_terminal::ours_for_output (); + fprintf_filtered (gdb_stdlog, + _("[Detaching after fork from " + "parent %s]\n"), + target_pid_to_str (process_ptid).c_str ()); + } - /* Note that the detach above makes PARENT_INF dangling. */ + target_detach (parent_inf, 0); + parent_inf = NULL; + } + + /* Note that the detach above makes PARENT_INF dangling. */ - /* Add the child thread to the appropriate lists, and switch to - this new thread, before cloning the program space, and - informing the solib layer about this new process. */ + /* Add the child thread to the appropriate lists, and switch + to this new thread, before cloning the program space, and + informing the solib layer about this new process. */ + + set_current_inferior (child_inf); + push_target (target); + } - inferior_ptid = child_ptid; - add_thread_silent (inferior_ptid); - set_current_inferior (child_inf); + thread_info *child_thr = add_thread_silent (target, child_ptid); /* If this is a vfork child, then the address-space is shared with the parent. If we detached from the parent, then we can @@ -621,6 +658,8 @@ { child_inf->pspace = parent_pspace; child_inf->aspace = child_inf->pspace->aspace; + + exec_on_vfork (); } else { @@ -638,6 +677,8 @@ the core, this wouldn't be required. */ solib_create_inferior_hook (0); } + + switch_to_thread (child_thr); } return target_follow_fork (follow_child, detach_fork); @@ -647,11 +688,11 @@ if the inferior should be resumed; false, if the target for some reason decided it's best not to resume. */ -static int -follow_fork (void) +static bool +follow_fork () { - int follow_child = (follow_fork_mode_string == follow_fork_mode_child); - int should_resume = 1; + bool follow_child = (follow_fork_mode_string == follow_fork_mode_child); + bool should_resume = true; struct thread_info *tp; /* Copy user stepping state to the new inferior thread. FIXME: the @@ -662,16 +703,19 @@ struct breakpoint *exception_resume_breakpoint = NULL; CORE_ADDR step_range_start = 0; CORE_ADDR step_range_end = 0; + int current_line = 0; + symtab *current_symtab = NULL; struct frame_id step_frame_id = { 0 }; struct thread_fsm *thread_fsm = NULL; if (!non_stop) { + process_stratum_target *wait_target; ptid_t wait_ptid; struct target_waitstatus wait_status; /* Get the last target status returned by target_wait(). */ - get_last_target_status (&wait_ptid, &wait_status); + get_last_target_status (&wait_target, &wait_ptid, &wait_status); /* If not stopped at a fork event, then there's nothing else to do. */ @@ -682,16 +726,16 @@ /* Check if we switched over from WAIT_PTID, since the event was reported. */ if (wait_ptid != minus_one_ptid - && inferior_ptid != wait_ptid) + && (current_inferior ()->process_target () != wait_target + || inferior_ptid != wait_ptid)) { /* We did. Switch back to WAIT_PTID thread, to tell the target to follow it (in either direction). We'll afterwards refuse to resume, and inform the user what happened. */ - thread_info *wait_thread - = find_thread_ptid (wait_ptid); + thread_info *wait_thread = find_thread_ptid (wait_target, wait_ptid); switch_to_thread (wait_thread); - should_resume = 0; + should_resume = false; } } @@ -714,6 +758,8 @@ (tp->control.step_resume_breakpoint); step_range_start = tp->control.step_range_start; step_range_end = tp->control.step_range_end; + current_line = tp->current_line; + current_symtab = tp->current_symtab; step_frame_id = tp->control.step_frame_id; exception_resume_breakpoint = clone_momentary_breakpoint (tp->control.exception_resume_breakpoint); @@ -735,6 +781,7 @@ parent = inferior_ptid; child = tp->pending_follow.value.related_pid; + process_stratum_target *parent_targ = tp->inf->process_target (); /* Set up inferior(s) as specified by the caller, and tell the target to do whatever is necessary to follow either parent or child. */ @@ -750,7 +797,7 @@ or another. The previous selected thread may be gone from the lists by now, but if it is still around, need to clear the pending follow request. */ - tp = find_thread_ptid (parent); + tp = find_thread_ptid (parent_targ, parent); if (tp) tp->pending_follow.kind = TARGET_WAITKIND_SPURIOUS; @@ -761,7 +808,7 @@ /* If we followed the child, switch to it... */ if (follow_child) { - thread_info *child_thr = find_thread_ptid (child); + thread_info *child_thr = find_thread_ptid (parent_targ, child); switch_to_thread (child_thr); /* ... and preserve the stepping state, in case the @@ -773,6 +820,8 @@ = step_resume_breakpoint; tp->control.step_range_start = step_range_start; tp->control.step_range_end = step_range_end; + tp->current_line = current_line; + tp->current_symtab = current_symtab; tp->control.step_frame_id = step_frame_id; tp->control.exception_resume_breakpoint = exception_resume_breakpoint; @@ -864,10 +913,8 @@ && !thread->stop_requested && thread->suspend.stop_signal == GDB_SIGNAL_0) { - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, - "infrun: resuming vfork parent thread %s\n", - target_pid_to_str (thread->ptid).c_str ()); + infrun_debug_printf ("resuming vfork parent thread %s", + target_pid_to_str (thread->ptid).c_str ()); switch_to_thread (thread); clear_proceed_status (0); @@ -877,22 +924,6 @@ return 0; } -/* Save/restore inferior_ptid, current program space and current - inferior. Only use this if the current context points at an exited - inferior (and therefore there's no current thread to save). */ -class scoped_restore_exited_inferior -{ -public: - scoped_restore_exited_inferior () - : m_saved_ptid (&inferior_ptid) - {} - -private: - scoped_restore_tmpl<ptid_t> m_saved_ptid; - scoped_restore_current_program_space m_pspace; - scoped_restore_current_inferior m_inferior; -}; - /* Called whenever we notice an exec or exit event, to handle detaching or resuming a vfork parent. */ @@ -915,7 +946,6 @@ time. */ if (vfork_parent->pending_detach) { - struct thread_info *tp; struct program_space *pspace; struct address_space *aspace; @@ -923,20 +953,10 @@ vfork_parent->pending_detach = 0; - gdb::optional<scoped_restore_exited_inferior> - maybe_restore_inferior; - gdb::optional<scoped_restore_current_pspace_and_thread> - maybe_restore_thread; - - /* If we're handling a child exit, then inferior_ptid points - at the inferior's pid, not to a thread. */ - if (!exec) - maybe_restore_inferior.emplace (); - else - maybe_restore_thread.emplace (); + scoped_restore_current_pspace_and_thread restore_thread; /* We're letting loose of the parent. */ - tp = any_live_thread_of_inferior (vfork_parent); + thread_info *tp = any_live_thread_of_inferior (vfork_parent); switch_to_thread (tp); /* We're about to detach from the parent, which implicitly @@ -996,8 +1016,6 @@ } else { - struct program_space *pspace; - /* If this is a vfork child exiting, then the pspace and aspaces were shared with the parent. Since we're reporting the process exit, we'll be mourning all that is @@ -1007,24 +1025,18 @@ go ahead and create a new one for this exiting inferior. */ - /* Switch to null_ptid while running clone_program_space, so + /* Switch to no-thread while running clone_program_space, so that clone_program_space doesn't want to read the selected frame of a dead process. */ - scoped_restore restore_ptid - = make_scoped_restore (&inferior_ptid, null_ptid); + scoped_restore_current_thread restore_thread; + switch_to_no_thread (); - /* This inferior is dead, so avoid giving the breakpoints - module the option to write through to it (cloning a - program space resets breakpoints). */ - inf->aspace = NULL; - inf->pspace = NULL; - pspace = new program_space (maybe_new_address_space ()); - set_current_program_space (pspace); + inf->pspace = new program_space (maybe_new_address_space ()); + inf->aspace = inf->pspace->aspace; + set_current_program_space (inf->pspace); inf->removable = 1; inf->symfile_flags = SYMFILE_NO_READ; - clone_program_space (pspace, vfork_parent->pspace); - inf->pspace = pspace; - inf->aspace = pspace->aspace; + clone_program_space (inf->pspace, vfork_parent->pspace); resume_parent = vfork_parent->pid; } @@ -1037,10 +1049,8 @@ free now. */ scoped_restore_current_thread restore_thread; - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, - "infrun: resuming vfork parent process %d\n", - resume_parent); + infrun_debug_printf ("resuming vfork parent process %d", + resume_parent); iterate_over_threads (proceed_after_vfork_done, &resume_parent); } @@ -1190,9 +1200,11 @@ inf->pid = pid; target_follow_exec (inf, exec_file_target); - set_current_inferior (inf); - set_current_program_space (inf->pspace); - add_thread (ptid); + inferior *org_inferior = current_inferior (); + switch_to_inferior_no_thread (inf); + push_target (org_inferior->process_target ()); + thread_info *thr = add_thread (inf->process_target (), ptid); + switch_to_thread (thr); } else { @@ -1329,9 +1341,7 @@ static void clear_step_over_info (void) { - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, - "infrun: clear_step_over_info\n"); + infrun_debug_printf ("clearing step over info"); step_over_info.aspace = NULL; step_over_info.address = 0; step_over_info.nonsteppable_watchpoint_p = 0; @@ -1522,7 +1532,7 @@ /* If checking the mode of displaced instruction in copy area. */ if (displaced->step_thread != nullptr && displaced->step_copy == addr) - return displaced->step_closure; + return displaced->step_closure.get (); return NULL; } @@ -1538,8 +1548,7 @@ doesn't support it, GDB will instead use the traditional hold-and-step approach. If AUTO (which is the default), GDB will decide which technique to use to step over breakpoints depending on - which of all-stop or non-stop mode is active --- displaced stepping - in non-stop mode; hold-and-step in all-stop mode. */ + whether the target works in a non-stop way (see use_displaced_stepping). */ static enum auto_boolean can_use_displaced_stepping = AUTO_BOOLEAN_AUTO; @@ -1559,39 +1568,67 @@ "to step over breakpoints is %s.\n"), value); } +/* Return true if the gdbarch implements the required methods to use + displaced stepping. */ + +static bool +gdbarch_supports_displaced_stepping (gdbarch *arch) +{ + /* Only check for the presence of step_copy_insn. Other required methods + are checked by the gdbarch validation. */ + return gdbarch_displaced_step_copy_insn_p (arch); +} + /* Return non-zero if displaced stepping can/should be used to step over breakpoints of thread TP. */ -static int -use_displaced_stepping (struct thread_info *tp) +static bool +use_displaced_stepping (thread_info *tp) { - struct regcache *regcache = get_thread_regcache (tp); - struct gdbarch *gdbarch = regcache->arch (); + /* If the user disabled it explicitly, don't use displaced stepping. */ + if (can_use_displaced_stepping == AUTO_BOOLEAN_FALSE) + return false; + + /* If "auto", only use displaced stepping if the target operates in a non-stop + way. */ + if (can_use_displaced_stepping == AUTO_BOOLEAN_AUTO + && !target_is_non_stop_p ()) + return false; + + gdbarch *gdbarch = get_thread_regcache (tp)->arch (); + + /* If the architecture doesn't implement displaced stepping, don't use + it. */ + if (!gdbarch_supports_displaced_stepping (gdbarch)) + return false; + + /* If recording, don't use displaced stepping. */ + if (find_record_target () != nullptr) + return false; + displaced_step_inferior_state *displaced_state = get_displaced_stepping_state (tp->inf); - return (((can_use_displaced_stepping == AUTO_BOOLEAN_AUTO - && target_is_non_stop_p ()) - || can_use_displaced_stepping == AUTO_BOOLEAN_TRUE) - && gdbarch_displaced_step_copy_insn_p (gdbarch) - && find_record_target () == NULL - && !displaced_state->failed_before); + /* If displaced stepping failed before for this inferior, don't bother trying + again. */ + if (displaced_state->failed_before) + return false; + + return true; } -/* Clean out any stray displaced stepping state. */ +/* Simple function wrapper around displaced_step_inferior_state::reset. */ + static void -displaced_step_clear (struct displaced_step_inferior_state *displaced) +displaced_step_reset (displaced_step_inferior_state *displaced) { - /* Indicate that there is no cleanup pending. */ - displaced->step_thread = nullptr; - - delete displaced->step_closure; - displaced->step_closure = NULL; + displaced->reset (); } -/* A cleanup that wraps displaced_step_clear. */ -using displaced_step_clear_cleanup - = FORWARD_SCOPE_EXIT (displaced_step_clear); +/* A cleanup that wraps displaced_step_reset. We use this instead of, say, + SCOPE_EXIT, because it needs to be discardable with "cleanup.release ()". */ + +using displaced_step_reset_cleanup = FORWARD_SCOPE_EXIT (displaced_step_reset); /* Dump LEN bytes at BUF in hex to FILE, followed by a newline. */ void @@ -1630,12 +1667,11 @@ const address_space *aspace = regcache->aspace (); CORE_ADDR original, copy; ULONGEST len; - struct displaced_step_closure *closure; int status; /* We should never reach this function if the architecture does not support displaced stepping. */ - gdb_assert (gdbarch_displaced_step_copy_insn_p (gdbarch)); + gdb_assert (gdbarch_supports_displaced_stepping (gdbarch)); /* Nor if the thread isn't meant to step over a breakpoint. */ gdb_assert (tp->control.trap_expected); @@ -1673,7 +1709,7 @@ target_pid_to_str (tp->ptid).c_str ()); } - displaced_step_clear (displaced); + displaced_step_reset (displaced); scoped_restore_current_thread restore_thread; @@ -1722,9 +1758,9 @@ len); }; - closure = gdbarch_displaced_step_copy_insn (gdbarch, - original, copy, regcache); - if (closure == NULL) + displaced->step_closure + = gdbarch_displaced_step_copy_insn (gdbarch, original, copy, regcache); + if (displaced->step_closure == NULL) { /* The architecture doesn't know how or want to displaced step this instruction or instruction sequence. Fallback to @@ -1736,12 +1772,11 @@ succeeds. */ displaced->step_thread = tp; displaced->step_gdbarch = gdbarch; - displaced->step_closure = closure; displaced->step_original = original; displaced->step_copy = copy; { - displaced_step_clear_cleanup cleanup (displaced); + displaced_step_reset_cleanup cleanup (displaced); /* Resume execution at the copy. */ regcache_write_pc (regcache, copy); @@ -1776,12 +1811,8 @@ && ex.error != NOT_SUPPORTED_ERROR) throw; - if (debug_infrun) - { - fprintf_unfiltered (gdb_stdlog, - "infrun: disabling displaced stepping: %s\n", - ex.what ()); - } + infrun_debug_printf ("caught exception, disabling displaced stepping: %s", + ex.what ()); /* Be verbose if "set displaced-stepping" is "on", silent if "auto". */ @@ -1844,15 +1875,16 @@ if (displaced->step_thread != event_thread) return 0; - displaced_step_clear_cleanup cleanup (displaced); - - displaced_step_restore (displaced, displaced->step_thread->ptid); - /* Fixup may need to read memory/registers. Switch to the thread that we're fixing up. Also, target_stopped_by_watchpoint checks - the current thread. */ + the current thread, and displaced_step_restore performs ptid-dependent + memory accesses using current_inferior() and current_top_target(). */ switch_to_thread (event_thread); + displaced_step_reset_cleanup cleanup (displaced); + + displaced_step_restore (displaced, displaced->step_thread->ptid); + /* Did the instruction complete successfully? */ if (signal == GDB_SIGNAL_TRAP && !(target_stopped_by_watchpoint () @@ -1861,7 +1893,7 @@ { /* Fix up the resulting state. */ gdbarch_displaced_step_fixup (displaced->step_gdbarch, - displaced->step_closure, + displaced->step_closure.get (), displaced->step_original, displaced->step_copy, get_thread_regcache (displaced->step_thread)); @@ -1886,6 +1918,7 @@ discarded between events. */ struct execution_control_state { + process_stratum_target *target; ptid_t ptid; /* The thread that got the event, if this was a thread event; NULL otherwise. */ @@ -1963,11 +1996,7 @@ thread_step_over_chain_remove (tp); if (step_over_queue_head == NULL) - { - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, - "infrun: step-over queue now empty\n"); - } + infrun_debug_printf ("step-over queue now empty"); if (tp->control.trap_expected || tp->resumed @@ -1982,10 +2011,8 @@ tp->executing); } - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, - "infrun: resuming [%s] for step-over\n", - target_pid_to_str (tp->ptid).c_str ()); + infrun_debug_printf ("resuming [%s] for step-over", + target_pid_to_str (tp->ptid).c_str ()); /* keep_going_pass_signal skips the step-over if the breakpoint is no longer inserted. In all-stop, we want to keep looking @@ -2037,9 +2064,11 @@ /* Update global variables holding ptids to hold NEW_PTID if they were holding OLD_PTID. */ static void -infrun_thread_ptid_changed (ptid_t old_ptid, ptid_t new_ptid) +infrun_thread_ptid_changed (process_stratum_target *target, + ptid_t old_ptid, ptid_t new_ptid) { - if (inferior_ptid == old_ptid) + if (inferior_ptid == old_ptid + && current_inferior ()->process_target () == target) inferior_ptid = new_ptid; } @@ -2142,6 +2171,16 @@ return resume_ptid; } +/* See infrun.h. */ + +process_stratum_target * +user_visible_resume_target (ptid_t resume_ptid) +{ + return (resume_ptid == minus_one_ptid && sched_multi + ? NULL + : current_inferior ()->process_target ()); +} + /* Return a ptid representing the set of threads that we will resume, in the perspective of the target, assuming run control handling does not require leaving some threads stopped (e.g., stepping past @@ -2206,6 +2245,9 @@ target_resume (resume_ptid, step, sig); target_commit_resume (); + + if (target_can_async_p ()) + target_async (1); } /* Resume the inferior. SIG is the signal to give the inferior @@ -2218,7 +2260,6 @@ struct regcache *regcache = get_current_regcache (); struct gdbarch *gdbarch = regcache->arch (); struct thread_info *tp = inferior_thread (); - CORE_ADDR pc = regcache_read_pc (regcache); const address_space *aspace = regcache->aspace (); ptid_t resume_ptid; /* This represents the user's step vs continue request. When @@ -2236,20 +2277,15 @@ if (tp->suspend.waitstatus_pending_p) { - if (debug_infrun) - { - std::string statstr - = target_waitstatus_to_string (&tp->suspend.waitstatus); - - fprintf_unfiltered (gdb_stdlog, - "infrun: resume: thread %s has pending wait " - "status %s (currently_stepping=%d).\n", - target_pid_to_str (tp->ptid).c_str (), - statstr.c_str (), - currently_stepping (tp)); - } + infrun_debug_printf + ("thread %s has pending wait " + "status %s (currently_stepping=%d).", + target_pid_to_str (tp->ptid).c_str (), + target_waitstatus_to_string (&tp->suspend.waitstatus).c_str (), + currently_stepping (tp)); - tp->resumed = 1; + tp->inf->process_target ()->threads_executing = true; + tp->resumed = true; /* FIXME: What should we do if we are supposed to resume this thread with a signal? Maybe we should maintain a queue of @@ -2290,20 +2326,18 @@ Eventually, we'll see a TARGET_WAITKIND_VFORK_DONE event for the parent, and tell it to `keep_going', which automatically re-sets it stepping. */ - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, - "infrun: resume : clear step\n"); + infrun_debug_printf ("resume : clear step"); step = 0; } - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, - "infrun: resume (step=%d, signal=%s), " - "trap_expected=%d, current thread [%s] at %s\n", - step, gdb_signal_to_symbol_string (sig), - tp->control.trap_expected, - target_pid_to_str (inferior_ptid).c_str (), - paddress (gdbarch, pc)); + CORE_ADDR pc = regcache_read_pc (regcache); + + infrun_debug_printf ("step=%d, signal=%s, trap_expected=%d, " + "current thread [%s] at %s", + step, gdb_signal_to_symbol_string (sig), + tp->control.trap_expected, + target_pid_to_str (inferior_ptid).c_str (), + paddress (gdbarch, pc)); /* Normally, by the time we reach `resume', the breakpoints are either removed or inserted, as appropriate. The exception is if we're sitting @@ -2327,10 +2361,8 @@ signal handler (or hit some other event). We'll delete the step-resume breakpoint then. */ - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, - "infrun: resume: skipping permanent breakpoint, " - "deliver signal first\n"); + infrun_debug_printf ("resume: skipping permanent breakpoint, " + "deliver signal first"); clear_step_over_info (); tp->control.trap_expected = 0; @@ -2352,9 +2384,7 @@ { /* There's no signal to pass, we can go ahead and skip the permanent breakpoint manually. */ - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, - "infrun: resume: skipping permanent breakpoint\n"); + infrun_debug_printf ("skipping permanent breakpoint"); gdbarch_skip_permanent_breakpoint (gdbarch, regcache); /* Update pc to reflect the new address from which we will execute instructions. */ @@ -2377,7 +2407,7 @@ resume_ptid = internal_resume_ptid (user_step); do_target_resume (resume_ptid, 0, GDB_SIGNAL_0); - tp->resumed = 1; + tp->resumed = true; return; } } @@ -2388,8 +2418,8 @@ if (tp->control.trap_expected || bpstat_should_step ()) tp->control.may_range_step = 0; - /* If enabled, step over breakpoints by executing a copy of the - instruction at a different address. + /* If displaced stepping is enabled, step over breakpoints by executing a + copy of the instruction at a different address. We can't use displaced stepping when we have a signal to deliver; the comments for displaced_step_prepare explain why. The @@ -2409,9 +2439,7 @@ if (prepared == 0) { - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, - "Got placed in step-over queue\n"); + infrun_debug_printf ("Got placed in step-over queue"); tp->control.trap_expected = 0; return; @@ -2439,8 +2467,8 @@ pc = regcache_read_pc (get_thread_regcache (tp)); displaced = get_displaced_stepping_state (tp->inf); - step = gdbarch_displaced_step_hw_singlestep (gdbarch, - displaced->step_closure); + step = gdbarch_displaced_step_hw_singlestep + (gdbarch, displaced->step_closure.get ()); } } @@ -2477,7 +2505,7 @@ && step_over_info_valid_p ()) { /* If we have nested signals or a pending signal is delivered - immediately after a handler returns, might might already have + immediately after a handler returns, might already have a step-resume breakpoint set on the earlier handler. We cannot set another step-resume breakpoint; just continue on until the original breakpoint is hit. */ @@ -2548,10 +2576,8 @@ gdb.threads/non-stop-fair-events.exp, on targets that don't do displaced stepping. */ - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, - "infrun: resume: [%s] stepped breakpoint\n", - target_pid_to_str (tp->ptid).c_str ()); + infrun_debug_printf ("resume: [%s] stepped breakpoint", + target_pid_to_str (tp->ptid).c_str ()); tp->stepped_breakpoint = 1; @@ -2589,7 +2615,7 @@ } do_target_resume (resume_ptid, step, sig); - tp->resumed = 1; + tp->resumed = true; } /* Resume the inferior. SIG is the signal to give the inferior @@ -2652,10 +2678,7 @@ static void clear_proceed_status_thread (struct thread_info *tp) { - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, - "infrun: clear_proceed_status_thread (%s)\n", - target_pid_to_str (tp->ptid).c_str ()); + infrun_debug_printf ("%s", target_pid_to_str (tp->ptid).c_str ()); /* If we're starting a new sequence, then the previous finished single-step is no longer relevant. */ @@ -2663,28 +2686,20 @@ { if (tp->suspend.stop_reason == TARGET_STOPPED_BY_SINGLE_STEP) { - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, - "infrun: clear_proceed_status: pending " - "event of %s was a finished step. " - "Discarding.\n", - target_pid_to_str (tp->ptid).c_str ()); + infrun_debug_printf ("pending event of %s was a finished step. " + "Discarding.", + target_pid_to_str (tp->ptid).c_str ()); tp->suspend.waitstatus_pending_p = 0; tp->suspend.stop_reason = TARGET_STOPPED_BY_NO_REASON; } - else if (debug_infrun) + else { - std::string statstr - = target_waitstatus_to_string (&tp->suspend.waitstatus); - - fprintf_unfiltered (gdb_stdlog, - "infrun: clear_proceed_status_thread: thread %s " - "has pending wait status %s " - "(currently_stepping=%d).\n", - target_pid_to_str (tp->ptid).c_str (), - statstr.c_str (), - currently_stepping (tp)); + infrun_debug_printf + ("thread %s has pending wait status %s (currently_stepping=%d).", + target_pid_to_str (tp->ptid).c_str (), + target_waitstatus_to_string (&tp->suspend.waitstatus).c_str (), + currently_stepping (tp)); } } @@ -2734,10 +2749,12 @@ if (!non_stop && inferior_ptid != null_ptid) { ptid_t resume_ptid = user_visible_resume_ptid (step); + process_stratum_target *resume_target + = user_visible_resume_target (resume_ptid); /* In all-stop mode, delete the per-thread status of all threads we're about to resume, implicitly and explicitly. */ - for (thread_info *tp : all_non_exited_threads (resume_ptid)) + for (thread_info *tp : all_non_exited_threads (resume_target, resume_ptid)) clear_proceed_status_thread (tp); } @@ -2814,6 +2831,86 @@ execution_direction))); } +/* Calls target_commit_resume on all targets. */ + +static void +commit_resume_all_targets () +{ + scoped_restore_current_thread restore_thread; + + /* Map between process_target and a representative inferior. This + is to avoid committing a resume in the same target more than + once. Resumptions must be idempotent, so this is an + optimization. */ + std::unordered_map<process_stratum_target *, inferior *> conn_inf; + + for (inferior *inf : all_non_exited_inferiors ()) + if (inf->has_execution ()) + conn_inf[inf->process_target ()] = inf; + + for (const auto &ci : conn_inf) + { + inferior *inf = ci.second; + switch_to_inferior_no_thread (inf); + target_commit_resume (); + } +} + +/* Check that all the targets we're about to resume are in non-stop + mode. Ideally, we'd only care whether all targets support + target-async, but we're not there yet. E.g., stop_all_threads + doesn't know how to handle all-stop targets. Also, the remote + protocol in all-stop mode is synchronous, irrespective of + target-async, which means that things like a breakpoint re-set + triggered by one target would try to read memory from all targets + and fail. */ + +static void +check_multi_target_resumption (process_stratum_target *resume_target) +{ + if (!non_stop && resume_target == nullptr) + { + scoped_restore_current_thread restore_thread; + + /* This is used to track whether we're resuming more than one + target. */ + process_stratum_target *first_connection = nullptr; + + /* The first inferior we see with a target that does not work in + always-non-stop mode. */ + inferior *first_not_non_stop = nullptr; + + for (inferior *inf : all_non_exited_inferiors (resume_target)) + { + switch_to_inferior_no_thread (inf); + + if (!target_has_execution) + continue; + + process_stratum_target *proc_target + = current_inferior ()->process_target(); + + if (!target_is_non_stop_p ()) + first_not_non_stop = inf; + + if (first_connection == nullptr) + first_connection = proc_target; + else if (first_connection != proc_target + && first_not_non_stop != nullptr) + { + switch_to_inferior_no_thread (first_not_non_stop); + + proc_target = current_inferior ()->process_target(); + + error (_("Connection %d (%s) does not support " + "multi-target resumption."), + proc_target->connection_number, + make_target_connection_string (proc_target).c_str ()); + } + } + } +} + /* Basic routine for continuing the program in various fashions. ADDR is the address to resume at, or -1 for resume where stopped. @@ -2828,7 +2925,6 @@ struct regcache *regcache; struct gdbarch *gdbarch; CORE_ADDR pc; - ptid_t resume_ptid; struct execution_control_state ecss; struct execution_control_state *ecs = &ecss; int started; @@ -2841,7 +2937,7 @@ /* The target for some reason decided not to resume. */ normal_stop (); if (target_can_async_p ()) - inferior_event_handler (INF_EXEC_COMPLETE, NULL); + inferior_event_handler (INF_EXEC_COMPLETE); return; } @@ -2852,7 +2948,8 @@ gdbarch = regcache->arch (); const address_space *aspace = regcache->aspace (); - pc = regcache_read_pc (regcache); + pc = regcache_read_pc_protected (regcache); + thread_info *cur_thr = inferior_thread (); /* Fill in with reasonable starting values. */ @@ -2860,6 +2957,13 @@ gdb_assert (!thread_is_in_step_over_chain (cur_thr)); + ptid_t resume_ptid + = user_visible_resume_ptid (cur_thr->control.stepping_command); + process_stratum_target *resume_target + = user_visible_resume_target (resume_ptid); + + check_multi_target_resumption (resume_target); + if (addr == (CORE_ADDR) -1) { if (pc == cur_thr->suspend.stop_pc @@ -2889,12 +2993,10 @@ if (siggnal != GDB_SIGNAL_DEFAULT) cur_thr->suspend.stop_signal = siggnal; - resume_ptid = user_visible_resume_ptid (cur_thr->control.stepping_command); - /* If an exception is thrown from this point on, make sure to propagate GDB's knowledge of the executing state to the frontend/user running state. */ - scoped_finish_thread_state finish_state (resume_ptid); + scoped_finish_thread_state finish_state (resume_target, resume_ptid); /* Even if RESUME_PTID is a wildcard, and we end up resuming fewer threads (e.g., we might need to set threads stepping over @@ -2903,13 +3005,10 @@ inferior function, as in that case we pretend the inferior doesn't run at all. */ if (!cur_thr->control.in_infcall) - set_running (resume_ptid, 1); + set_running (resume_target, resume_ptid, true); - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, - "infrun: proceed (addr=%s, signal=%s)\n", - paddress (gdbarch, addr), - gdb_signal_to_symbol_string (siggnal)); + infrun_debug_printf ("addr=%s, signal=%s", paddress (gdbarch, addr), + gdb_signal_to_symbol_string (siggnal)); annotate_starting (); @@ -2938,8 +3037,11 @@ threads. */ if (!non_stop && !schedlock_applies (cur_thr)) { - for (thread_info *tp : all_non_exited_threads (resume_ptid)) + for (thread_info *tp : all_non_exited_threads (resume_target, + resume_ptid)) { + switch_to_thread_no_regs (tp); + /* Ignore the current thread here. It's handled afterwards. */ if (tp == cur_thr) @@ -2950,13 +3052,13 @@ gdb_assert (!thread_is_in_step_over_chain (tp)); - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, - "infrun: need to step-over [%s] first\n", - target_pid_to_str (tp->ptid).c_str ()); + infrun_debug_printf ("need to step-over [%s] first", + target_pid_to_str (tp->ptid).c_str ()); thread_step_over_chain_enqueue (tp); } + + switch_to_thread (cur_thr); } /* Enqueue the current thread last, so that we move all other @@ -2969,7 +3071,7 @@ advanced. Must do this before resuming any thread, as in all-stop/remote, once we resume we can't send any other packet until the target stops again. */ - cur_thr->prev_pc = regcache_read_pc (regcache); + cur_thr->prev_pc = regcache_read_pc_protected (regcache); { scoped_restore save_defer_tc = make_scoped_defer_target_commit_resume (); @@ -2991,38 +3093,42 @@ { /* In all-stop, but the target is always in non-stop mode. Start all other threads that are implicitly resumed too. */ - for (thread_info *tp : all_non_exited_threads (resume_ptid)) - { - if (tp->resumed) - { - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, - "infrun: proceed: [%s] resumed\n", - target_pid_to_str (tp->ptid).c_str ()); - gdb_assert (tp->executing || tp->suspend.waitstatus_pending_p); - continue; - } + for (thread_info *tp : all_non_exited_threads (resume_target, + resume_ptid)) + { + switch_to_thread_no_regs (tp); - if (thread_is_in_step_over_chain (tp)) - { - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, - "infrun: proceed: [%s] needs step-over\n", - target_pid_to_str (tp->ptid).c_str ()); - continue; - } + if (!tp->inf->has_execution ()) + { + infrun_debug_printf ("[%s] target has no execution", + target_pid_to_str (tp->ptid).c_str ()); + continue; + } - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, - "infrun: proceed: resuming %s\n", - target_pid_to_str (tp->ptid).c_str ()); + if (tp->resumed) + { + infrun_debug_printf ("[%s] resumed", + target_pid_to_str (tp->ptid).c_str ()); + gdb_assert (tp->executing || tp->suspend.waitstatus_pending_p); + continue; + } - reset_ecs (ecs, tp); - switch_to_thread (tp); - keep_going_pass_signal (ecs); - if (!ecs->wait_some_more) - error (_("Command aborted.")); - } + if (thread_is_in_step_over_chain (tp)) + { + infrun_debug_printf ("[%s] needs step-over", + target_pid_to_str (tp->ptid).c_str ()); + continue; + } + + infrun_debug_printf ("resuming %s", + target_pid_to_str (tp->ptid).c_str ()); + + reset_ecs (ecs, tp); + switch_to_thread (tp); + keep_going_pass_signal (ecs); + if (!ecs->wait_some_more) + error (_("Command aborted.")); + } } else if (!cur_thr->resumed && !thread_is_in_step_over_chain (cur_thr)) { @@ -3035,10 +3141,15 @@ } } - target_commit_resume (); + commit_resume_all_targets (); finish_state.release (); + /* If we've switched threads above, switch back to the previously + current thread. We don't want the user to see a different + selected thread. */ + switch_to_thread (cur_thr); + /* Tell the event loop to wait for it to stop. If the target supports asynchronous execution, it'll do this from within target_resume. */ @@ -3052,10 +3163,8 @@ void start_remote (int from_tty) { - struct inferior *inferior; - - inferior = current_inferior (); - inferior->control.stop_soon = STOP_QUIETLY_REMOTE; + inferior *inf = current_inferior (); + inf->control.stop_soon = STOP_QUIETLY_REMOTE; /* Always go on waiting for the target, regardless of the mode. */ /* FIXME: cagney/1999-09-23: At present it isn't possible to @@ -3071,7 +3180,7 @@ target_open() return to the caller an indication that the target is currently running and GDB state should be set to the same as for an async run. */ - wait_for_inferior (); + wait_for_inferior (inf); /* Now that the inferior has stopped, do any bookkeeping like loading shared libraries. We want to do this before normal_stop, @@ -3092,7 +3201,7 @@ clear_proceed_status (0); - target_last_wait_ptid = minus_one_ptid; + nullify_last_target_wait_ptid (); previous_inferior_ptid = inferior_ptid; } @@ -3122,11 +3231,13 @@ static void infrun_thread_stop_requested (ptid_t ptid) { + process_stratum_target *curr_target = current_inferior ()->process_target (); + /* PTID was requested to stop. If the thread was already stopped, but the user/frontend doesn't know about that yet (e.g., the thread had been temporarily paused for some step-over), set up for reporting the stop now. */ - for (thread_info *tp : all_threads (ptid)) + for (thread_info *tp : all_threads (curr_target, ptid)) { if (tp->state != THREAD_RUNNING) continue; @@ -3152,7 +3263,7 @@ /* Clear the inline-frame state, since we're re-processing the stop. */ - clear_inline_frame_state (tp->ptid); + clear_inline_frame_state (tp); /* If this thread was paused because some other thread was doing an inline-step over, let that finish first. Once @@ -3164,14 +3275,15 @@ /* Otherwise we can process the (new) pending event now. Set it so this pending event is considered by do_target_wait. */ - tp->resumed = 1; + tp->resumed = true; } } static void infrun_thread_thread_exit (struct thread_info *tp, int silent) { - if (target_last_wait_ptid == tp->ptid) + if (target_last_proc_target == tp->inf->process_target () + && target_last_wait_ptid == tp->ptid) nullify_last_target_wait_ptid (); } @@ -3244,19 +3356,19 @@ output as a unit; we want only one timestamp printed if debug_timestamp is set. */ - stb.printf ("infrun: target_wait (%d.%ld.%ld", + stb.printf ("[infrun] target_wait (%d.%ld.%ld", waiton_ptid.pid (), waiton_ptid.lwp (), waiton_ptid.tid ()); if (waiton_ptid.pid () != -1) stb.printf (" [%s]", target_pid_to_str (waiton_ptid).c_str ()); stb.printf (", status) =\n"); - stb.printf ("infrun: %d.%ld.%ld [%s],\n", + stb.printf ("[infrun] %d.%ld.%ld [%s],\n", result_ptid.pid (), result_ptid.lwp (), result_ptid.tid (), target_pid_to_str (result_ptid).c_str ()); - stb.printf ("infrun: %s\n", status_string.c_str ()); + stb.printf ("[infrun] %s\n", status_string.c_str ()); /* This uses %s in part to handle %'s in the text, but also to avoid a gcc error: the format attribute requires a string literal. */ @@ -3267,19 +3379,20 @@ had events. */ static struct thread_info * -random_pending_event_thread (ptid_t waiton_ptid) +random_pending_event_thread (inferior *inf, ptid_t waiton_ptid) { int num_events = 0; - auto has_event = [] (thread_info *tp) + auto has_event = [&] (thread_info *tp) { - return (tp->resumed + return (tp->ptid.matches (waiton_ptid) + && tp->resumed && tp->suspend.waitstatus_pending_p); }; /* First see how many events we have. Count only resumed threads that have an event pending. */ - for (thread_info *tp : all_non_exited_threads (waiton_ptid)) + for (thread_info *tp : inf->non_exited_threads ()) if (has_event (tp)) num_events++; @@ -3290,13 +3403,12 @@ int random_selector = (int) ((num_events * (double) rand ()) / (RAND_MAX + 1.0)); - if (debug_infrun && num_events > 1) - fprintf_unfiltered (gdb_stdlog, - "infrun: Found %d events, selecting #%d\n", - num_events, random_selector); + if (num_events > 1) + infrun_debug_printf ("Found %d events, selecting #%d", + num_events, random_selector); /* Select the Nth thread that has had an event. */ - for (thread_info *tp : all_non_exited_threads (waiton_ptid)) + for (thread_info *tp : inf->non_exited_threads ()) if (has_event (tp)) if (random_selector-- == 0) return tp; @@ -3306,29 +3418,35 @@ /* Wrapper for target_wait that first checks whether threads have pending statuses to report before actually asking the target for - more events. */ + more events. INF is the inferior we're using to call target_wait + on. */ static ptid_t -do_target_wait (ptid_t ptid, struct target_waitstatus *status, int options) +do_target_wait_1 (inferior *inf, ptid_t ptid, + target_waitstatus *status, int options) { ptid_t event_ptid; struct thread_info *tp; + /* We know that we are looking for an event in the target of inferior + INF, but we don't know which thread the event might come from. As + such we want to make sure that INFERIOR_PTID is reset so that none of + the wait code relies on it - doing so is always a mistake. */ + switch_to_inferior_no_thread (inf); + /* First check if there is a resumed thread with a wait status pending. */ if (ptid == minus_one_ptid || ptid.is_pid ()) { - tp = random_pending_event_thread (ptid); + tp = random_pending_event_thread (inf, ptid); } else { - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, - "infrun: Waiting for specific thread %s.\n", - target_pid_to_str (ptid).c_str ()); + infrun_debug_printf ("Waiting for specific thread %s.", + target_pid_to_str (ptid).c_str ()); /* We have a specific thread to check. */ - tp = find_thread_ptid (ptid); + tp = find_thread_ptid (inf, ptid); gdb_assert (tp != NULL); if (!tp->suspend.waitstatus_pending_p) tp = NULL; @@ -3347,31 +3465,25 @@ if (pc != tp->suspend.stop_pc) { - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, - "infrun: PC of %s changed. was=%s, now=%s\n", - target_pid_to_str (tp->ptid).c_str (), - paddress (gdbarch, tp->suspend.stop_pc), - paddress (gdbarch, pc)); + infrun_debug_printf ("PC of %s changed. was=%s, now=%s", + target_pid_to_str (tp->ptid).c_str (), + paddress (gdbarch, tp->suspend.stop_pc), + paddress (gdbarch, pc)); discard = 1; } else if (!breakpoint_inserted_here_p (regcache->aspace (), pc)) { - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, - "infrun: previous breakpoint of %s, at %s gone\n", - target_pid_to_str (tp->ptid).c_str (), - paddress (gdbarch, pc)); + infrun_debug_printf ("previous breakpoint of %s, at %s gone", + target_pid_to_str (tp->ptid).c_str (), + paddress (gdbarch, pc)); discard = 1; } if (discard) { - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, - "infrun: pending event of %s cancelled.\n", - target_pid_to_str (tp->ptid).c_str ()); + infrun_debug_printf ("pending event of %s cancelled.", + target_pid_to_str (tp->ptid).c_str ()); tp->suspend.waitstatus.kind = TARGET_WAITKIND_SPURIOUS; tp->suspend.stop_reason = TARGET_STOPPED_BY_NO_REASON; @@ -3380,16 +3492,10 @@ if (tp != NULL) { - if (debug_infrun) - { - std::string statstr - = target_waitstatus_to_string (&tp->suspend.waitstatus); - - fprintf_unfiltered (gdb_stdlog, - "infrun: Using pending wait status %s for %s.\n", - statstr.c_str (), - target_pid_to_str (tp->ptid).c_str ()); - } + infrun_debug_printf ("Using pending wait status %s for %s.", + target_waitstatus_to_string + (&tp->suspend.waitstatus).c_str (), + target_pid_to_str (tp->ptid).c_str ()); /* Now that we've selected our final event LWP, un-adjust its PC if it was a software breakpoint (and the target doesn't @@ -3427,6 +3533,11 @@ /* But if we don't find one, we'll have to wait. */ + /* We can't ask a non-async target to do a non-blocking wait, so this will be + a blocking wait. */ + if (!target_can_async_p ()) + options &= ~TARGET_WNOHANG; + if (deprecated_target_wait_hook) event_ptid = deprecated_target_wait_hook (ptid, status, options); else @@ -3435,6 +3546,90 @@ return event_ptid; } +/* Wrapper for target_wait that first checks whether threads have + pending statuses to report before actually asking the target for + more events. Polls for events from all inferiors/targets. */ + +static bool +do_target_wait (ptid_t wait_ptid, execution_control_state *ecs, int options) +{ + int num_inferiors = 0; + int random_selector; + + /* For fairness, we pick the first inferior/target to poll at random + out of all inferiors that may report events, and then continue + polling the rest of the inferior list starting from that one in a + circular fashion until the whole list is polled once. */ + + auto inferior_matches = [&wait_ptid] (inferior *inf) + { + return (inf->process_target () != NULL + && ptid_t (inf->pid).matches (wait_ptid)); + }; + + /* First see how many matching inferiors we have. */ + for (inferior *inf : all_inferiors ()) + if (inferior_matches (inf)) + num_inferiors++; + + if (num_inferiors == 0) + { + ecs->ws.kind = TARGET_WAITKIND_IGNORE; + return false; + } + + /* Now randomly pick an inferior out of those that matched. */ + random_selector = (int) + ((num_inferiors * (double) rand ()) / (RAND_MAX + 1.0)); + + if (num_inferiors > 1) + infrun_debug_printf ("Found %d inferiors, starting at #%d", + num_inferiors, random_selector); + + /* Select the Nth inferior that matched. */ + + inferior *selected = nullptr; + + for (inferior *inf : all_inferiors ()) + if (inferior_matches (inf)) + if (random_selector-- == 0) + { + selected = inf; + break; + } + + /* Now poll for events out of each of the matching inferior's + targets, starting from the selected one. */ + + auto do_wait = [&] (inferior *inf) + { + ecs->ptid = do_target_wait_1 (inf, wait_ptid, &ecs->ws, options); + ecs->target = inf->process_target (); + return (ecs->ws.kind != TARGET_WAITKIND_IGNORE); + }; + + /* Needed in 'all-stop + target-non-stop' mode, because we end up + here spuriously after the target is all stopped and we've already + reported the stop to the user, polling for events. */ + scoped_restore_current_thread restore_thread; + + int inf_num = selected->num; + for (inferior *inf = selected; inf != NULL; inf = inf->next) + if (inferior_matches (inf)) + if (do_wait (inf)) + return true; + + for (inferior *inf = inferior_list; + inf != NULL && inf->num < inf_num; + inf = inf->next) + if (inferior_matches (inf)) + if (do_wait (inf)) + return true; + + ecs->ws.kind = TARGET_WAITKIND_IGNORE; + return false; +} + /* Prepare and stabilize the inferior for detaching it. E.g., detaching while a thread is displaced stepping is a recipe for crashing it, as nothing would readjust the PC out of the scratch @@ -3453,9 +3648,7 @@ if (displaced->step_thread == nullptr) return; - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, - "displaced-stepping in-process while detaching"); + infrun_debug_printf ("displaced-stepping in-process while detaching"); scoped_restore restore_detaching = make_scoped_restore (&inf->detaching, true); @@ -3474,7 +3667,7 @@ don't get any event. */ target_dcache_invalidate (); - ecs->ptid = do_target_wait (pid_ptid, &ecs->ws, 0); + do_target_wait (pid_ptid, ecs, 0); if (debug_infrun) print_target_wait_results (pid_ptid, ecs->ptid, &ecs->ws); @@ -3482,7 +3675,8 @@ /* If an error happens while handling the event, propagate GDB's knowledge of the executing state to the frontend/user running state. */ - scoped_finish_thread_state finish_state (minus_one_ptid); + scoped_finish_thread_state finish_state (inf->process_target (), + minus_one_ptid); /* Now figure out what to do with the result of the result. */ handle_inferior_event (ecs); @@ -3510,25 +3704,23 @@ When this function actually returns it means the inferior should be left stopped and GDB should read more commands. */ -void -wait_for_inferior (void) +static void +wait_for_inferior (inferior *inf) { - if (debug_infrun) - fprintf_unfiltered - (gdb_stdlog, "infrun: wait_for_inferior ()\n"); + infrun_debug_printf ("wait_for_inferior ()"); SCOPE_EXIT { delete_just_stopped_threads_infrun_breakpoints (); }; /* If an error happens while handling the event, propagate GDB's knowledge of the executing state to the frontend/user running state. */ - scoped_finish_thread_state finish_state (minus_one_ptid); + scoped_finish_thread_state finish_state + (inf->process_target (), minus_one_ptid); while (1) { struct execution_control_state ecss; struct execution_control_state *ecs = &ecss; - ptid_t waiton_ptid = minus_one_ptid; memset (ecs, 0, sizeof (*ecs)); @@ -3540,10 +3732,11 @@ don't get any event. */ target_dcache_invalidate (); - ecs->ptid = do_target_wait (waiton_ptid, &ecs->ws, 0); + ecs->ptid = do_target_wait_1 (inf, minus_one_ptid, &ecs->ws, 0); + ecs->target = inf->process_target (); if (debug_infrun) - print_target_wait_results (waiton_ptid, ecs->ptid, &ecs->ws); + print_target_wait_results (minus_one_ptid, ecs->ptid, &ecs->ws); /* Now figure out what to do with the result of the result. */ handle_inferior_event (ecs); @@ -3664,12 +3857,11 @@ necessary cleanups. */ void -fetch_inferior_event (void *client_data) +fetch_inferior_event () { struct execution_control_state ecss; struct execution_control_state *ecs = &ecss; int cmd_done = 0; - ptid_t waiton_ptid = minus_one_ptid; memset (ecs, 0, sizeof (*ecs)); @@ -3693,14 +3885,11 @@ set_current_traceframe (-1); } - gdb::optional<scoped_restore_current_thread> maybe_restore_thread; - - if (non_stop) - /* In non-stop mode, the user/frontend should not notice a thread - switch due to internal events. Make sure we reverse to the - user selected thread and frame after handling the event and - running any breakpoint commands. */ - maybe_restore_thread.emplace (); + /* The user/frontend should not notice a thread switch due to + internal events. Make sure we revert to the user selected + thread and frame after handling the event and running any + breakpoint commands. */ + scoped_restore_current_thread restore_thread; overlay_cache_invalid = 1; /* Flush target cache before starting to handle each event. Target @@ -3713,17 +3902,23 @@ = make_scoped_restore (&execution_direction, target_execution_direction ()); - ecs->ptid = do_target_wait (waiton_ptid, &ecs->ws, - target_can_async_p () ? TARGET_WNOHANG : 0); + if (!do_target_wait (minus_one_ptid, ecs, TARGET_WNOHANG)) + return; + + gdb_assert (ecs->ws.kind != TARGET_WAITKIND_IGNORE); + + /* Switch to the target that generated the event, so we can do + target calls. */ + switch_to_target_no_thread (ecs->target); if (debug_infrun) - print_target_wait_results (waiton_ptid, ecs->ptid, &ecs->ws); + print_target_wait_results (minus_one_ptid, ecs->ptid, &ecs->ws); /* If an error happens while handling the event, propagate GDB's knowledge of the executing state to the frontend/user running state. */ ptid_t finish_ptid = !target_is_non_stop_p () ? minus_one_ptid : ecs->ptid; - scoped_finish_thread_state finish_state (finish_ptid); + scoped_finish_thread_state finish_state (ecs->target, finish_ptid); /* Get executed before scoped_restore_current_thread above to apply still for the thread which has thrown the exception. */ @@ -3737,7 +3932,7 @@ if (!ecs->wait_some_more) { - struct inferior *inf = find_inferior_ptid (ecs->ptid); + struct inferior *inf = find_inferior_ptid (ecs->target, ecs->ptid); int should_stop = 1; struct thread_info *thr = ecs->event_thread; @@ -3774,9 +3969,22 @@ if (!proceeded) { - inferior_event_handler (INF_EXEC_COMPLETE, NULL); + inferior_event_handler (INF_EXEC_COMPLETE); cmd_done = 1; } + + /* 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 <Thread + ID 2> has terminated." instead of "No thread + selected.". */ + if (!non_stop + && cmd_done + && ecs->ws.kind != TARGET_WAITKIND_NO_RESUMED) + restore_thread.dont_restore (); } } @@ -3802,11 +4010,15 @@ printf_unfiltered (_("completed.\n")); } -/* Record the frame and location we're currently stepping through. */ +/* See infrun.h. */ + void -set_step_info (struct frame_info *frame, struct symtab_and_line sal) +set_step_info (thread_info *tp, struct frame_info *frame, + struct symtab_and_line sal) { - struct thread_info *tp = inferior_thread (); + /* This can be removed once this function no longer implicitly relies on the + inferior_ptid value. */ + gdb_assert (inferior_ptid == tp->ptid); tp->control.step_frame_id = get_frame_id (frame); tp->control.step_stack_frame_id = get_stack_frame_id (frame); @@ -3826,31 +4038,39 @@ tss->step_after_step_resume_breakpoint = 0; } -/* Set the cached copy of the last ptid/waitstatus. */ +/* See infrun.h. */ void -set_last_target_status (ptid_t ptid, struct target_waitstatus status) +set_last_target_status (process_stratum_target *target, ptid_t ptid, + target_waitstatus status) { + target_last_proc_target = target; target_last_wait_ptid = ptid; target_last_waitstatus = status; } -/* Return the cached copy of the last pid/waitstatus returned by - target_wait()/deprecated_target_wait_hook(). The data is actually - cached by handle_inferior_event(), which gets called immediately - after target_wait()/deprecated_target_wait_hook(). */ +/* See infrun.h. */ void -get_last_target_status (ptid_t *ptidp, struct target_waitstatus *status) +get_last_target_status (process_stratum_target **target, ptid_t *ptid, + target_waitstatus *status) { - *ptidp = target_last_wait_ptid; - *status = target_last_waitstatus; + if (target != nullptr) + *target = target_last_proc_target; + if (ptid != nullptr) + *ptid = target_last_wait_ptid; + if (status != nullptr) + *status = target_last_waitstatus; } +/* See infrun.h. */ + void nullify_last_target_wait_ptid (void) { + target_last_proc_target = nullptr; target_last_wait_ptid = minus_one_ptid; + target_last_waitstatus = {}; } /* Switch thread contexts. */ @@ -3858,14 +4078,13 @@ static void context_switch (execution_control_state *ecs) { - if (debug_infrun - && ecs->ptid != inferior_ptid - && ecs->event_thread != inferior_thread ()) - { - fprintf_unfiltered (gdb_stdlog, "infrun: Switching context from %s ", - target_pid_to_str (inferior_ptid).c_str ()); - fprintf_unfiltered (gdb_stdlog, "to %s\n", - target_pid_to_str (ecs->ptid).c_str ()); + if (ecs->ptid != inferior_ptid + && (inferior_ptid == null_ptid + || ecs->event_thread != inferior_thread ())) + { + infrun_debug_printf ("Switching context from %s to %s", + target_pid_to_str (inferior_ptid).c_str (), + target_pid_to_str (ecs->ptid).c_str ()); } switch_to_thread (ecs->event_thread); @@ -4034,6 +4253,45 @@ return 0; } +/* Look for an inline frame that is marked for skip. + If PREV_FRAME is TRUE start at the previous frame, + otherwise start at the current frame. Stop at the + first non-inline frame, or at the frame where the + step started. */ + +static bool +inline_frame_is_marked_for_skip (bool prev_frame, struct thread_info *tp) +{ + struct frame_info *frame = get_current_frame (); + + if (prev_frame) + frame = get_prev_frame (frame); + + for (; frame != NULL; frame = get_prev_frame (frame)) + { + const char *fn = NULL; + symtab_and_line sal; + struct symbol *sym; + + if (frame_id_eq (get_frame_id (frame), tp->control.step_frame_id)) + break; + if (get_frame_type (frame) != INLINE_FRAME) + break; + + sal = find_frame_sal (frame); + sym = get_frame_function (frame); + + if (sym != NULL) + fn = sym->print_name (); + + if (sal.line != 0 + && function_name_is_marked_for_skip (fn, sal)) + return true; + } + + return false; +} + /* If the event thread has the stop requested flag set, pretend it stopped for a GDB_SIGNAL_0 (i.e., as if it stopped due to target_stop). */ @@ -4071,9 +4329,7 @@ if (catch_syscall_enabled () > 0 && catching_syscall_number (syscall_number) > 0) { - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, "infrun: syscall number = '%d'\n", - syscall_number); + infrun_debug_printf ("syscall number=%d", syscall_number); ecs->event_thread->control.stop_bpstat = bpstat_stop_status (regcache->aspace (), @@ -4107,14 +4363,16 @@ if (!ecs->stop_func_filled_in) { const block *block; + const general_symbol_info *gsi; /* Don't care about return value; stop_func_start and stop_func_name will both be 0 if it doesn't work. */ - find_pc_partial_function (ecs->event_thread->suspend.stop_pc, - &ecs->stop_func_name, - &ecs->stop_func_start, - &ecs->stop_func_end, - &block); + find_pc_partial_function_sym (ecs->event_thread->suspend.stop_pc, + &gsi, + &ecs->stop_func_start, + &ecs->stop_func_end, + &block); + ecs->stop_func_name = gsi == nullptr ? nullptr : gsi->print_name (); /* The call to find_pc_partial_function, above, will set stop_func_start and stop_func_end to the start and end @@ -4146,20 +4404,19 @@ static enum stop_kind get_inferior_stop_soon (execution_control_state *ecs) { - struct inferior *inf = find_inferior_ptid (ecs->ptid); + struct inferior *inf = find_inferior_ptid (ecs->target, ecs->ptid); gdb_assert (inf != NULL); return inf->control.stop_soon; } -/* Wait for one event. Store the resulting waitstatus in WS, and - return the event ptid. */ +/* Poll for one event out of the current target. Store the resulting + waitstatus in WS, and return the event ptid. Does not block. */ static ptid_t -wait_one (struct target_waitstatus *ws) +poll_one_curr_target (struct target_waitstatus *ws) { ptid_t event_ptid; - ptid_t wait_ptid = minus_one_ptid; overlay_cache_invalid = 1; @@ -4170,51 +4427,111 @@ target_dcache_invalidate (); if (deprecated_target_wait_hook) - event_ptid = deprecated_target_wait_hook (wait_ptid, ws, 0); + event_ptid = deprecated_target_wait_hook (minus_one_ptid, ws, TARGET_WNOHANG); else - event_ptid = target_wait (wait_ptid, ws, 0); + event_ptid = target_wait (minus_one_ptid, ws, TARGET_WNOHANG); if (debug_infrun) - print_target_wait_results (wait_ptid, event_ptid, ws); + print_target_wait_results (minus_one_ptid, event_ptid, ws); return event_ptid; } -/* Generate a wrapper for target_stopped_by_REASON that works on PTID - instead of the current thread. */ -#define THREAD_STOPPED_BY(REASON) \ -static int \ -thread_stopped_by_ ## REASON (ptid_t ptid) \ -{ \ - scoped_restore save_inferior_ptid = make_scoped_restore (&inferior_ptid); \ - inferior_ptid = ptid; \ - \ - return target_stopped_by_ ## REASON (); \ -} - -/* Generate thread_stopped_by_watchpoint. */ -THREAD_STOPPED_BY (watchpoint) -/* Generate thread_stopped_by_sw_breakpoint. */ -THREAD_STOPPED_BY (sw_breakpoint) -/* Generate thread_stopped_by_hw_breakpoint. */ -THREAD_STOPPED_BY (hw_breakpoint) +/* An event reported by wait_one. */ -/* Save the thread's event and stop reason to process it later. */ +struct wait_one_event +{ + /* The target the event came out of. */ + process_stratum_target *target; -static void -save_waitstatus (struct thread_info *tp, struct target_waitstatus *ws) + /* The PTID the event was for. */ + ptid_t ptid; + + /* The waitstatus. */ + target_waitstatus ws; +}; + +/* Wait for one event out of any target. */ + +static wait_one_event +wait_one () { - if (debug_infrun) + while (1) { - std::string statstr = target_waitstatus_to_string (ws); + for (inferior *inf : all_inferiors ()) + { + process_stratum_target *target = inf->process_target (); + if (target == NULL + || !target->is_async_p () + || !target->threads_executing) + continue; + + switch_to_inferior_no_thread (inf); + + wait_one_event event; + event.target = target; + event.ptid = poll_one_curr_target (&event.ws); + + if (event.ws.kind == TARGET_WAITKIND_NO_RESUMED) + { + /* If nothing is resumed, remove the target from the + event loop. */ + target_async (0); + } + else if (event.ws.kind != TARGET_WAITKIND_IGNORE) + return event; + } + + /* Block waiting for some event. */ + + fd_set readfds; + int nfds = 0; - fprintf_unfiltered (gdb_stdlog, - "infrun: saving status %s for %d.%ld.%ld\n", - statstr.c_str (), - tp->ptid.pid (), - tp->ptid.lwp (), - tp->ptid.tid ()); + FD_ZERO (&readfds); + + for (inferior *inf : all_inferiors ()) + { + process_stratum_target *target = inf->process_target (); + if (target == NULL + || !target->is_async_p () + || !target->threads_executing) + continue; + + int fd = target->async_wait_fd (); + FD_SET (fd, &readfds); + if (nfds <= fd) + nfds = fd + 1; + } + + if (nfds == 0) + { + /* No waitable targets left. All must be stopped. */ + return {NULL, minus_one_ptid, {TARGET_WAITKIND_NO_RESUMED}}; + } + + QUIT; + + int numfds = interruptible_select (nfds, &readfds, 0, NULL, 0); + if (numfds < 0) + { + if (errno == EINTR) + continue; + else + perror_with_name ("interruptible_select"); + } } +} + +/* Save the thread's event and stop reason to process it later. */ + +static void +save_waitstatus (struct thread_info *tp, const target_waitstatus *ws) +{ + infrun_debug_printf ("saving status %s for %d.%ld.%ld", + target_waitstatus_to_string (ws).c_str (), + tp->ptid.pid (), + tp->ptid.lwp (), + tp->ptid.tid ()); /* Record for later. */ tp->suspend.waitstatus = *ws; @@ -4230,19 +4547,22 @@ adjust_pc_after_break (tp, &tp->suspend.waitstatus); - if (thread_stopped_by_watchpoint (tp->ptid)) + scoped_restore_current_thread restore_thread; + switch_to_thread (tp); + + if (target_stopped_by_watchpoint ()) { tp->suspend.stop_reason = TARGET_STOPPED_BY_WATCHPOINT; } else if (target_supports_stopped_by_sw_breakpoint () - && thread_stopped_by_sw_breakpoint (tp->ptid)) + && target_stopped_by_sw_breakpoint ()) { tp->suspend.stop_reason = TARGET_STOPPED_BY_SW_BREAKPOINT; } else if (target_supports_stopped_by_hw_breakpoint () - && thread_stopped_by_hw_breakpoint (tp->ptid)) + && target_stopped_by_hw_breakpoint ()) { tp->suspend.stop_reason = TARGET_STOPPED_BY_HW_BREAKPOINT; @@ -4270,6 +4590,47 @@ } } +/* Mark the non-executing threads accordingly. In all-stop, all + threads of all processes are stopped when we get any event + reported. In non-stop mode, only the event thread stops. */ + +static void +mark_non_executing_threads (process_stratum_target *target, + ptid_t event_ptid, + struct target_waitstatus ws) +{ + ptid_t mark_ptid; + + if (!target_is_non_stop_p ()) + mark_ptid = minus_one_ptid; + else if (ws.kind == TARGET_WAITKIND_SIGNALLED + || ws.kind == TARGET_WAITKIND_EXITED) + { + /* If we're handling a process exit in non-stop mode, even + though threads haven't been deleted yet, one would think + that there is nothing to do, as threads of the dead process + will be soon deleted, and threads of any other process were + left running. However, on some targets, threads survive a + process exit event. E.g., for the "checkpoint" command, + when the current checkpoint/fork exits, linux-fork.c + automatically switches to another fork from within + target_mourn_inferior, by associating the same + inferior/thread to another fork. We haven't mourned yet at + this point, but we must mark any threads left in the + process as not-executing so that finish_thread_state marks + them stopped (in the user's perspective) if/when we present + the stop to the user. */ + mark_ptid = ptid_t (event_ptid.pid ()); + } + else + mark_ptid = event_ptid; + + set_executing (target, mark_ptid, false); + + /* Likewise the resumed flag. */ + set_resumed (target, mark_ptid, false); +} + /* See infrun.h. */ void @@ -4279,15 +4640,33 @@ int pass; int iterations = 0; - gdb_assert (target_is_non_stop_p ()); + gdb_assert (exists_non_stop_target ()); - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, "infrun: stop_all_threads\n"); + infrun_debug_printf ("starting"); scoped_restore_current_thread restore_thread; - target_thread_events (1); - SCOPE_EXIT { target_thread_events (0); }; + /* Enable thread events of all targets. */ + for (auto *target : all_non_exited_process_targets ()) + { + switch_to_target_no_thread (target); + target_thread_events (true); + } + + SCOPE_EXIT + { + /* Disable thread events of all targets. */ + for (auto *target : all_non_exited_process_targets ()) + { + switch_to_target_no_thread (target); + target_thread_events (false); + } + + /* Use infrun_debug_printf_1 directly to get a meaningful function + name. */ + if (debug_infrun) + infrun_debug_printf_1 ("stop_all_threads", "done"); + }; /* Request threads to stop, and then wait for the stops. Because threads we already know about can spawn more threads while we're @@ -4296,62 +4675,64 @@ until two passes find no threads that need to be stopped. */ for (pass = 0; pass < 2; pass++, iterations++) { - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, - "infrun: stop_all_threads, pass=%d, " - "iterations=%d\n", pass, iterations); + infrun_debug_printf ("pass=%d, iterations=%d", pass, iterations); while (1) { - ptid_t event_ptid; - struct target_waitstatus ws; - int need_wait = 0; + int waits_needed = 0; - update_thread_list (); + for (auto *target : all_non_exited_process_targets ()) + { + switch_to_target_no_thread (target); + update_thread_list (); + } /* Go through all threads looking for threads that we need to tell the target to stop. */ for (thread_info *t : all_non_exited_threads ()) { + /* For a single-target setting with an all-stop target, + we would not even arrive here. For a multi-target + setting, until GDB is able to handle a mixture of + all-stop and non-stop targets, simply skip all-stop + targets' threads. This should be fine due to the + protection of 'check_multi_target_resumption'. */ + + switch_to_thread_no_regs (t); + if (!target_is_non_stop_p ()) + continue; + if (t->executing) { /* If already stopping, don't request a stop again. We just haven't seen the notification yet. */ if (!t->stop_requested) { - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, - "infrun: %s executing, " - "need stop\n", - target_pid_to_str (t->ptid).c_str ()); + infrun_debug_printf (" %s executing, need stop", + target_pid_to_str (t->ptid).c_str ()); target_stop (t->ptid); t->stop_requested = 1; } else { - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, - "infrun: %s executing, " - "already stopping\n", - target_pid_to_str (t->ptid).c_str ()); + infrun_debug_printf (" %s executing, already stopping", + target_pid_to_str (t->ptid).c_str ()); } if (t->stop_requested) - need_wait = 1; + waits_needed++; } else { - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, - "infrun: %s not executing\n", - target_pid_to_str (t->ptid).c_str ()); + infrun_debug_printf (" %s not executing", + target_pid_to_str (t->ptid).c_str ()); /* The thread may be not executing, but still be resumed with a pending status to process. */ - t->resumed = 0; + t->resumed = false; } } - if (!need_wait) + if (waits_needed == 0) break; /* If we find new threads on the second iteration, restart @@ -4360,117 +4741,148 @@ if (pass > 0) pass = -1; - event_ptid = wait_one (&ws); - if (debug_infrun) + for (int i = 0; i < waits_needed; i++) { - fprintf_unfiltered (gdb_stdlog, - "infrun: stop_all_threads %s %s\n", - target_waitstatus_to_string (&ws).c_str (), - target_pid_to_str (event_ptid).c_str ()); - } + wait_one_event event = wait_one (); - if (ws.kind == TARGET_WAITKIND_NO_RESUMED - || ws.kind == TARGET_WAITKIND_THREAD_EXITED - || ws.kind == TARGET_WAITKIND_EXITED - || ws.kind == TARGET_WAITKIND_SIGNALLED) - { - /* All resumed threads exited - or one thread/process exited/signalled. */ - } - else - { - thread_info *t = find_thread_ptid (event_ptid); - if (t == NULL) - t = add_thread (event_ptid); - - t->stop_requested = 0; - t->executing = 0; - t->resumed = 0; - t->control.may_range_step = 0; - - /* This may be the first time we see the inferior report - a stop. */ - inferior *inf = find_inferior_ptid (event_ptid); - if (inf->needs_setup) + infrun_debug_printf + ("%s %s", target_waitstatus_to_string (&event.ws).c_str (), + target_pid_to_str (event.ptid).c_str ()); + + if (event.ws.kind == TARGET_WAITKIND_NO_RESUMED) { - switch_to_thread_no_regs (t); - setup_inferior (0); + /* All resumed threads exited. */ + break; } - - if (ws.kind == TARGET_WAITKIND_STOPPED - && ws.value.sig == GDB_SIGNAL_0) + else if (event.ws.kind == TARGET_WAITKIND_THREAD_EXITED + || event.ws.kind == TARGET_WAITKIND_EXITED + || event.ws.kind == TARGET_WAITKIND_SIGNALLED) { - /* We caught the event that we intended to catch, so - there's no event pending. */ - t->suspend.waitstatus.kind = TARGET_WAITKIND_IGNORE; - t->suspend.waitstatus_pending_p = 0; + /* One thread/process exited/signalled. */ + + thread_info *t = nullptr; - if (displaced_step_fixup (t, GDB_SIGNAL_0) < 0) + /* The target may have reported just a pid. If so, try + the first non-exited thread. */ + if (event.ptid.is_pid ()) { - /* Add it back to the step-over queue. */ - if (debug_infrun) + int pid = event.ptid.pid (); + inferior *inf = find_inferior_pid (event.target, pid); + for (thread_info *tp : inf->non_exited_threads ()) { - fprintf_unfiltered (gdb_stdlog, - "infrun: displaced-step of %s " - "canceled: adding back to the " - "step-over queue\n", - target_pid_to_str (t->ptid).c_str ()); + t = tp; + break; } - t->control.trap_expected = 0; - thread_step_over_chain_enqueue (t); + + /* If there is no available thread, the event would + have to be appended to a per-inferior event list, + which does not exist (and if it did, we'd have + to adjust run control command to be able to + resume such an inferior). We assert here instead + of going into an infinite loop. */ + gdb_assert (t != nullptr); + + infrun_debug_printf + ("using %s", target_pid_to_str (t->ptid).c_str ()); + } + else + { + t = find_thread_ptid (event.target, event.ptid); + /* Check if this is the first time we see this thread. + Don't bother adding if it individually exited. */ + if (t == nullptr + && event.ws.kind != TARGET_WAITKIND_THREAD_EXITED) + t = add_thread (event.target, event.ptid); + } + + if (t != nullptr) + { + /* Set the threads as non-executing to avoid + another stop attempt on them. */ + switch_to_thread_no_regs (t); + mark_non_executing_threads (event.target, event.ptid, + event.ws); + save_waitstatus (t, &event.ws); + t->stop_requested = false; } } else { - enum gdb_signal sig; - struct regcache *regcache; + thread_info *t = find_thread_ptid (event.target, event.ptid); + if (t == NULL) + t = add_thread (event.target, event.ptid); + + t->stop_requested = 0; + t->executing = 0; + t->resumed = false; + t->control.may_range_step = 0; + + /* This may be the first time we see the inferior report + a stop. */ + inferior *inf = find_inferior_ptid (event.target, event.ptid); + if (inf->needs_setup) + { + switch_to_thread_no_regs (t); + setup_inferior (0); + } - if (debug_infrun) + if (event.ws.kind == TARGET_WAITKIND_STOPPED + && event.ws.value.sig == GDB_SIGNAL_0) { - std::string statstr = target_waitstatus_to_string (&ws); + /* We caught the event that we intended to catch, so + there's no event pending. */ + t->suspend.waitstatus.kind = TARGET_WAITKIND_IGNORE; + t->suspend.waitstatus_pending_p = 0; + + if (displaced_step_fixup (t, GDB_SIGNAL_0) < 0) + { + /* Add it back to the step-over queue. */ + infrun_debug_printf + ("displaced-step of %s canceled: adding back to " + "the step-over queue", + target_pid_to_str (t->ptid).c_str ()); - fprintf_unfiltered (gdb_stdlog, - "infrun: target_wait %s, saving " - "status for %d.%ld.%ld\n", - statstr.c_str (), - t->ptid.pid (), - t->ptid.lwp (), - t->ptid.tid ()); + t->control.trap_expected = 0; + thread_step_over_chain_enqueue (t); + } } + else + { + enum gdb_signal sig; + struct regcache *regcache; - /* Record for later. */ - save_waitstatus (t, &ws); + infrun_debug_printf + ("target_wait %s, saving status for %d.%ld.%ld", + target_waitstatus_to_string (&event.ws).c_str (), + t->ptid.pid (), t->ptid.lwp (), t->ptid.tid ()); - sig = (ws.kind == TARGET_WAITKIND_STOPPED - ? ws.value.sig : GDB_SIGNAL_0); + /* Record for later. */ + save_waitstatus (t, &event.ws); - if (displaced_step_fixup (t, sig) < 0) - { - /* Add it back to the step-over queue. */ - t->control.trap_expected = 0; - thread_step_over_chain_enqueue (t); - } + sig = (event.ws.kind == TARGET_WAITKIND_STOPPED + ? event.ws.value.sig : GDB_SIGNAL_0); - regcache = get_thread_regcache (t); - t->suspend.stop_pc = regcache_read_pc (regcache); + if (displaced_step_fixup (t, sig) < 0) + { + /* Add it back to the step-over queue. */ + t->control.trap_expected = 0; + thread_step_over_chain_enqueue (t); + } - if (debug_infrun) - { - fprintf_unfiltered (gdb_stdlog, - "infrun: saved stop_pc=%s for %s " - "(currently_stepping=%d)\n", - paddress (target_gdbarch (), - t->suspend.stop_pc), - target_pid_to_str (t->ptid).c_str (), - currently_stepping (t)); + regcache = get_thread_regcache (t); + t->suspend.stop_pc = regcache_read_pc (regcache); + + infrun_debug_printf ("saved stop_pc=%s for %s " + "(currently_stepping=%d)", + paddress (target_gdbarch (), + t->suspend.stop_pc), + target_pid_to_str (t->ptid).c_str (), + currently_stepping (t)); } } } } } - - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, "infrun: stop_all_threads done\n"); } /* Handle a TARGET_WAITKIND_NO_RESUMED event. */ @@ -4480,10 +4892,9 @@ { if (target_can_async_p ()) { - struct ui *ui; int any_sync = 0; - ALL_UIS (ui) + for (ui *ui : all_uis ()) { if (ui->prompt_state == PROMPT_BLOCKED) { @@ -4497,10 +4908,7 @@ we're not synchronously waiting for events either. Just ignore. */ - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, - "infrun: TARGET_WAITKIND_NO_RESUMED " - "(ignoring: bg)\n"); + infrun_debug_printf ("TARGET_WAITKIND_NO_RESUMED (ignoring: bg)"); prepare_to_wait (ecs); return 1; } @@ -4537,44 +4945,75 @@ have resumed threads _now_. In the example above, this removes thread 3 from the thread list. If thread 2 was re-resumed, we ignore this event. If we find no thread resumed, then we cancel - the synchronous command show "no unwaited-for " to the user. */ - update_thread_list (); + the synchronous command and show "no unwaited-for " to the + user. */ - for (thread_info *thread : all_non_exited_threads ()) + inferior *curr_inf = current_inferior (); + + scoped_restore_current_thread restore_thread; + + for (auto *target : all_non_exited_process_targets ()) { - if (thread->executing - || thread->suspend.waitstatus_pending_p) - { - /* There were no unwaited-for children left in the target at - some point, but there are now. Just ignore. */ - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, - "infrun: TARGET_WAITKIND_NO_RESUMED " - "(ignoring: found resumed)\n"); - prepare_to_wait (ecs); - return 1; - } + switch_to_target_no_thread (target); + update_thread_list (); } - /* Note however that we may find no resumed thread because the whole - process exited meanwhile (thus updating the thread list results - in an empty thread list). In this case we know we'll be getting - a process exit event shortly. */ - for (inferior *inf : all_inferiors ()) + /* If: + + - the current target has no thread executing, and + - the current inferior is native, and + - the current inferior is the one which has the terminal, and + - we did nothing, + + then a Ctrl-C from this point on would remain stuck in the + kernel, until a thread resumes and dequeues it. That would + result in the GDB CLI not reacting to Ctrl-C, not able to + interrupt the program. To address this, if the current inferior + no longer has any thread executing, we give the terminal to some + other inferior that has at least one thread executing. */ + bool swap_terminal = true; + + /* Whether to ignore this TARGET_WAITKIND_NO_RESUMED event, or + whether to report it to the user. */ + bool ignore_event = false; + + for (thread_info *thread : all_non_exited_threads ()) { - if (inf->pid == 0) - continue; + if (swap_terminal && thread->executing) + { + if (thread->inf != curr_inf) + { + target_terminal::ours (); + + switch_to_thread (thread); + target_terminal::inferior (); + } + swap_terminal = false; + } - thread_info *thread = any_live_thread_of_inferior (inf); - if (thread == NULL) + if (!ignore_event + && (thread->executing + || thread->suspend.waitstatus_pending_p)) { - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, - "infrun: TARGET_WAITKIND_NO_RESUMED " - "(expect process exit)\n"); - prepare_to_wait (ecs); - return 1; + /* Either there were no unwaited-for children left in the + target at some point, but there are now, or some target + other than the eventing one has unwaited-for children + left. Just ignore. */ + infrun_debug_printf ("TARGET_WAITKIND_NO_RESUMED " + "(ignoring: found resumed)"); + + ignore_event = true; } + + if (ignore_event && !swap_terminal) + break; + } + + if (ignore_event) + { + switch_to_inferior_no_thread (curr_inf); + prepare_to_wait (ecs); + return 1; } /* Go ahead and report the event. */ @@ -4604,9 +5043,7 @@ enum stop_kind stop_soon; - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, "infrun: handle_inferior_event %s\n", - target_waitstatus_to_string (&ecs->ws).c_str ()); + infrun_debug_printf ("%s", target_waitstatus_to_string (&ecs->ws).c_str ()); if (ecs->ws.kind == TARGET_WAITKIND_IGNORE) { @@ -4633,8 +5070,8 @@ && handle_no_resumed (ecs)) return; - /* Cache the last pid/waitstatus. */ - set_last_target_status (ecs->ptid, ecs->ws); + /* Cache the last target/ptid/waitstatus. */ + set_last_target_status (ecs->target, ecs->ptid, ecs->ws); /* Always clear state belonging to the previous time we stopped. */ stop_stack_dummy = STOP_NONE; @@ -4651,10 +5088,10 @@ if (ecs->ws.kind != TARGET_WAITKIND_EXITED && ecs->ws.kind != TARGET_WAITKIND_SIGNALLED) { - ecs->event_thread = find_thread_ptid (ecs->ptid); + ecs->event_thread = find_thread_ptid (ecs->target, ecs->ptid); /* If it's a new thread, add it to the thread database. */ if (ecs->event_thread == NULL) - ecs->event_thread = add_thread (ecs->ptid); + ecs->event_thread = add_thread (ecs->target, ecs->ptid); /* Disable range stepping. If the next step request could use a range, this will be end up re-enabled then. */ @@ -4689,48 +5126,12 @@ if (breakpoint_inserted_here_p (regcache->aspace (), regcache_read_pc (regcache))) { - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, - "infrun: Treating signal as SIGTRAP\n"); + infrun_debug_printf ("Treating signal as SIGTRAP"); ecs->ws.value.sig = GDB_SIGNAL_TRAP; } } - /* Mark the non-executing threads accordingly. In all-stop, all - threads of all processes are stopped when we get any event - reported. In non-stop mode, only the event thread stops. */ - { - ptid_t mark_ptid; - - if (!target_is_non_stop_p ()) - mark_ptid = minus_one_ptid; - else if (ecs->ws.kind == TARGET_WAITKIND_SIGNALLED - || ecs->ws.kind == TARGET_WAITKIND_EXITED) - { - /* If we're handling a process exit in non-stop mode, even - though threads haven't been deleted yet, one would think - that there is nothing to do, as threads of the dead process - will be soon deleted, and threads of any other process were - left running. However, on some targets, threads survive a - process exit event. E.g., for the "checkpoint" command, - when the current checkpoint/fork exits, linux-fork.c - automatically switches to another fork from within - target_mourn_inferior, by associating the same - inferior/thread to another fork. We haven't mourned yet at - this point, but we must mark any threads left in the - process as not-executing so that finish_thread_state marks - them stopped (in the user's perspective) if/when we present - the stop to the user. */ - mark_ptid = ptid_t (ecs->ptid.pid ()); - } - else - mark_ptid = ecs->ptid; - - set_executing (mark_ptid, 0); - - /* Likewise the resumed flag. */ - set_resumed (mark_ptid, 0); - } + mark_non_executing_threads (ecs->target, ecs->ptid, ecs->ws); switch (ecs->ws.kind) { @@ -4802,8 +5203,7 @@ if (stop_soon == STOP_QUIETLY_NO_SIGSTOP || stop_soon == STOP_QUIETLY_REMOTE) { - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, "infrun: quietly stopped\n"); + infrun_debug_printf ("quietly stopped"); stop_waiting (ecs); return; } @@ -4829,9 +5229,21 @@ case TARGET_WAITKIND_EXITED: case TARGET_WAITKIND_SIGNALLED: - inferior_ptid = ecs->ptid; - set_current_inferior (find_inferior_ptid (ecs->ptid)); - set_current_program_space (current_inferior ()->pspace); + { + /* Depending on the system, ecs->ptid may point to a thread or + to a process. On some targets, target_mourn_inferior may + need to have access to the just-exited thread. That is the + case of GNU/Linux's "checkpoint" support, for example. + Call the switch_to_xxx routine as appropriate. */ + thread_info *thr = find_thread_ptid (ecs->target, ecs->ptid); + if (thr != nullptr) + switch_to_thread (thr); + else + { + inferior *inf = find_inferior_ptid (ecs->target, ecs->ptid); + switch_to_inferior_no_thread (inf); + } + } handle_vfork_child_exec_or_exit (0); target_terminal::ours (); /* Must do this before mourn anyway. */ @@ -4875,9 +5287,8 @@ information to the user. It's better to just warn her about it (if infrun debugging is enabled), and give up. */ - if (debug_infrun) - fprintf_filtered (gdb_stdlog, _("\ -Cannot fill $_exitsignal with the correct signal number.\n")); + infrun_debug_printf ("Cannot fill $_exitsignal with the correct " + "signal number."); } gdb::observers::signal_exited.notify (ecs->ws.value.sig); @@ -4889,8 +5300,6 @@ stop_waiting (ecs); return; - /* The following are the only cases in which we keep going; - the above cases end in a continue or goto. */ case TARGET_WAITKIND_FORKED: case TARGET_WAITKIND_VFORKED: /* Check whether the inferior is displaced stepping. */ @@ -4903,10 +5312,19 @@ if (displaced_step_in_progress_thread (ecs->event_thread)) { struct inferior *parent_inf - = find_inferior_ptid (ecs->ptid); + = find_inferior_ptid (ecs->target, ecs->ptid); struct regcache *child_regcache; CORE_ADDR parent_pc; + if (ecs->ws.kind == TARGET_WAITKIND_FORKED) + { + struct displaced_step_inferior_state *displaced + = get_displaced_stepping_state (parent_inf); + + /* Restore scratch pad for child process. */ + displaced_step_restore (displaced, ecs->ws.value.related_pid); + } + /* GDB has got TARGET_WAITKIND_FORKED or TARGET_WAITKIND_VFORKED, indicating that the displaced stepping of syscall instruction has been done. Perform cleanup for parent process here. Note @@ -4917,15 +5335,6 @@ that needs it. */ start_step_over (); - if (ecs->ws.kind == TARGET_WAITKIND_FORKED) - { - struct displaced_step_inferior_state *displaced - = get_displaced_stepping_state (parent_inf); - - /* Restore scratch pad for child process. */ - displaced_step_restore (displaced, ecs->ws.value.related_pid); - } - /* Since the vfork/fork syscall instruction was executed in the scratchpad, the child's PC is also within the scratchpad. Set the child's PC to the parent's PC value, which has already been fixed up. @@ -4934,7 +5343,8 @@ list yet at this point. */ child_regcache - = get_thread_arch_aspace_regcache (ecs->ws.value.related_pid, + = get_thread_arch_aspace_regcache (parent_inf->process_target (), + ecs->ws.value.related_pid, gdbarch, parent_inf->aspace); /* Read PC value of parent process. */ @@ -4996,16 +5406,21 @@ watchpoints, for example, always appear in the bpstat. */ if (!bpstat_causes_stop (ecs->event_thread->control.stop_bpstat)) { - int should_resume; - int follow_child + bool follow_child = (follow_fork_mode_string == follow_fork_mode_child); ecs->event_thread->suspend.stop_signal = GDB_SIGNAL_0; - should_resume = follow_fork (); + process_stratum_target *targ + = ecs->event_thread->inf->process_target (); + bool should_resume = follow_fork (); + + /* Note that one of these may be an invalid pointer, + depending on detach_fork. */ thread_info *parent = ecs->event_thread; - thread_info *child = find_thread_ptid (ecs->ws.value.related_pid); + thread_info *child + = find_thread_ptid (targ, ecs->ws.value.related_pid); /* At this point, the parent is marked running, and the child is marked stopped. */ @@ -5139,8 +5554,7 @@ /* Switch to the stopped thread. */ context_switch (ecs); - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, "infrun: stopped\n"); + infrun_debug_printf ("stopped"); delete_just_stopped_threads_single_step_breakpoints (); ecs->event_thread->suspend.stop_pc @@ -5167,43 +5581,34 @@ for (thread_info *tp : all_non_exited_threads ()) { + switch_to_thread_no_regs (tp); + if (tp == event_thread) { - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, - "infrun: restart threads: " - "[%s] is event thread\n", - target_pid_to_str (tp->ptid).c_str ()); + infrun_debug_printf ("restart threads: [%s] is event thread", + target_pid_to_str (tp->ptid).c_str ()); continue; } if (!(tp->state == THREAD_RUNNING || tp->control.in_infcall)) { - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, - "infrun: restart threads: " - "[%s] not meant to be running\n", - target_pid_to_str (tp->ptid).c_str ()); + infrun_debug_printf ("restart threads: [%s] not meant to be running", + target_pid_to_str (tp->ptid).c_str ()); continue; } if (tp->resumed) { - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, - "infrun: restart threads: [%s] resumed\n", - target_pid_to_str (tp->ptid).c_str ()); + infrun_debug_printf ("restart threads: [%s] resumed", + target_pid_to_str (tp->ptid).c_str ()); gdb_assert (tp->executing || tp->suspend.waitstatus_pending_p); continue; } if (thread_is_in_step_over_chain (tp)) { - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, - "infrun: restart threads: " - "[%s] needs step-over\n", - target_pid_to_str (tp->ptid).c_str ()); + infrun_debug_printf ("restart threads: [%s] needs step-over", + target_pid_to_str (tp->ptid).c_str ()); gdb_assert (!tp->resumed); continue; } @@ -5211,12 +5616,9 @@ if (tp->suspend.waitstatus_pending_p) { - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, - "infrun: restart threads: " - "[%s] has pending status\n", - target_pid_to_str (tp->ptid).c_str ()); - tp->resumed = 1; + infrun_debug_printf ("restart threads: [%s] has pending status", + target_pid_to_str (tp->ptid).c_str ()); + tp->resumed = true; continue; } @@ -5235,10 +5637,8 @@ if (currently_stepping (tp)) { - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, - "infrun: restart threads: [%s] was stepping\n", - target_pid_to_str (tp->ptid).c_str ()); + infrun_debug_printf ("restart threads: [%s] was stepping", + target_pid_to_str (tp->ptid).c_str ()); keep_going_stepped_thread (tp); } else @@ -5246,10 +5646,8 @@ struct execution_control_state ecss; struct execution_control_state *ecs = &ecss; - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, - "infrun: restart threads: [%s] continuing\n", - target_pid_to_str (tp->ptid).c_str ()); + infrun_debug_printf ("restart threads: [%s] continuing", + target_pid_to_str (tp->ptid).c_str ()); reset_ecs (ecs, tp); switch_to_thread (tp); keep_going_pass_signal (ecs); @@ -5342,12 +5740,8 @@ struct thread_info *tp = ecs->event_thread; struct regcache *regcache; - if (debug_infrun) - { - fprintf_unfiltered (gdb_stdlog, - "infrun: found resumed threads with " - "pending events, saving status\n"); - } + infrun_debug_printf ("found resumed threads with " + "pending events, saving status"); gdb_assert (pending != tp); @@ -5356,23 +5750,19 @@ /* This was cleared early, by handle_inferior_event. Set it so this pending event is considered by do_target_wait. */ - tp->resumed = 1; + tp->resumed = true; gdb_assert (!tp->executing); regcache = get_thread_regcache (tp); tp->suspend.stop_pc = regcache_read_pc (regcache); - if (debug_infrun) - { - fprintf_unfiltered (gdb_stdlog, - "infrun: saved stop_pc=%s for %s " - "(currently_stepping=%d)\n", - paddress (target_gdbarch (), - tp->suspend.stop_pc), - target_pid_to_str (tp->ptid).c_str (), - currently_stepping (tp)); - } + infrun_debug_printf ("saved stop_pc=%s for %s " + "(currently_stepping=%d)", + paddress (target_gdbarch (), + tp->suspend.stop_pc), + target_pid_to_str (tp->ptid).c_str (), + currently_stepping (tp)); /* This in-line step-over finished; clear this so we won't start a new one. This is what handle_signal_stop would @@ -5425,26 +5815,23 @@ { struct regcache *regcache = get_thread_regcache (ecs->event_thread); struct gdbarch *reg_gdbarch = regcache->arch (); - scoped_restore save_inferior_ptid = make_scoped_restore (&inferior_ptid); - inferior_ptid = ecs->ptid; + switch_to_thread (ecs->event_thread); - fprintf_unfiltered (gdb_stdlog, "infrun: stop_pc = %s\n", - paddress (reg_gdbarch, - ecs->event_thread->suspend.stop_pc)); + infrun_debug_printf ("stop_pc=%s", + paddress (reg_gdbarch, + ecs->event_thread->suspend.stop_pc)); if (target_stopped_by_watchpoint ()) { CORE_ADDR addr; - fprintf_unfiltered (gdb_stdlog, "infrun: stopped by watchpoint\n"); + infrun_debug_printf ("stopped by watchpoint"); if (target_stopped_data_address (current_top_target (), &addr)) - fprintf_unfiltered (gdb_stdlog, - "infrun: stopped data address = %s\n", - paddress (reg_gdbarch, addr)); + infrun_debug_printf ("stopped data address=%s", + paddress (reg_gdbarch, addr)); else - fprintf_unfiltered (gdb_stdlog, - "infrun: (no data address available)\n"); + infrun_debug_printf ("(no data address available)"); } } @@ -5454,8 +5841,7 @@ if (stop_soon == STOP_QUIETLY || stop_soon == STOP_QUIETLY_REMOTE) { context_switch (ecs); - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, "infrun: quietly stopped\n"); + infrun_debug_printf ("quietly stopped"); stop_print_frame = 1; stop_waiting (ecs); return; @@ -5496,8 +5882,7 @@ so, then switch to that thread. */ if (ecs->ptid != inferior_ptid) { - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, "infrun: context switch\n"); + infrun_debug_printf ("context switch"); context_switch (ecs); @@ -5528,25 +5913,16 @@ { if (single_step_breakpoint_inserted_here_p (aspace, pc)) { - if (debug_infrun) - { - fprintf_unfiltered (gdb_stdlog, - "infrun: [%s] hit another thread's " - "single-step breakpoint\n", - target_pid_to_str (ecs->ptid).c_str ()); - } + infrun_debug_printf ("[%s] hit another thread's single-step " + "breakpoint", + target_pid_to_str (ecs->ptid).c_str ()); ecs->hit_singlestep_breakpoint = 1; } } else { - if (debug_infrun) - { - fprintf_unfiltered (gdb_stdlog, - "infrun: [%s] hit its " - "single-step breakpoint\n", - target_pid_to_str (ecs->ptid).c_str ()); - } + infrun_debug_printf ("[%s] hit its single-step breakpoint", + target_pid_to_str (ecs->ptid).c_str ()); } } delete_just_stopped_threads_single_step_breakpoints (); @@ -5661,8 +6037,9 @@ int step_through_delay = gdbarch_single_step_through_delay (gdbarch, frame); - if (debug_infrun && step_through_delay) - fprintf_unfiltered (gdb_stdlog, "infrun: step through delay\n"); + if (step_through_delay) + infrun_debug_printf ("step through delay"); + if (ecs->event_thread->control.step_range_end == 0 && step_through_delay) { @@ -5703,14 +6080,14 @@ simply make sure to ignore it if `stopped_by_watchpoint' is set. */ - if (debug_infrun - && ecs->event_thread->suspend.stop_signal == GDB_SIGNAL_TRAP + if (ecs->event_thread->suspend.stop_signal == GDB_SIGNAL_TRAP && !bpstat_explains_signal (ecs->event_thread->control.stop_bpstat, GDB_SIGNAL_TRAP) && stopped_by_watchpoint) - fprintf_unfiltered (gdb_stdlog, - "infrun: no user watchpoint explains " - "watchpoint SIGTRAP, ignoring\n"); + { + infrun_debug_printf ("no user watchpoint explains watchpoint SIGTRAP, " + "ignoring"); + } /* NOTE: cagney/2003-03-29: These checks for a random signal at one stage in the past included checks for an inferior @@ -5741,8 +6118,8 @@ been removed. */ if (random_signal && target_stopped_by_sw_breakpoint ()) { - if (program_breakpoint_here_p (gdbarch, - ecs->event_thread->suspend.stop_pc)) + if (gdbarch_program_breakpoint_here_p (gdbarch, + ecs->event_thread->suspend.stop_pc)) { struct regcache *regcache; int decr_pc; @@ -5767,10 +6144,7 @@ else { /* A delayed software breakpoint event. Ignore the trap. */ - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, - "infrun: delayed software breakpoint " - "trap, ignoring\n"); + infrun_debug_printf ("delayed software breakpoint trap, ignoring"); random_signal = 0; } } @@ -5780,10 +6154,8 @@ if (random_signal && target_stopped_by_hw_breakpoint ()) { /* A delayed hardware breakpoint event. Ignore the trap. */ - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, - "infrun: delayed hardware breakpoint/watchpoint " - "trap, ignoring\n"); + infrun_debug_printf ("delayed hardware breakpoint/watchpoint " + "trap, ignoring"); random_signal = 0; } @@ -5807,8 +6179,7 @@ if (ecs->event_thread->stop_requested) { random_signal = 1; - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, "infrun: user-requested stop\n"); + infrun_debug_printf ("user-requested stop"); } /* For the program's own signals, act according to @@ -5817,12 +6188,11 @@ if (random_signal) { /* Signal not for debugging purposes. */ - struct inferior *inf = find_inferior_ptid (ecs->ptid); + struct inferior *inf = find_inferior_ptid (ecs->target, ecs->ptid); enum gdb_signal stop_signal = ecs->event_thread->suspend.stop_signal; - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, "infrun: random signal (%s)\n", - gdb_signal_to_symbol_string (stop_signal)); + infrun_debug_printf ("random signal (%s)", + gdb_signal_to_symbol_string (stop_signal)); stopped_by_random_signal = 1; @@ -5867,10 +6237,7 @@ code paths as single-step - set a breakpoint at the signal return address and then, once hit, step off that breakpoint. */ - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, - "infrun: signal arrived while stepping over " - "breakpoint\n"); + infrun_debug_printf ("signal arrived while stepping over breakpoint"); insert_hp_step_resume_breakpoint_at_frame (frame); ecs->event_thread->step_after_step_resume_breakpoint = 1; @@ -5901,10 +6268,7 @@ Note that this is only needed for a signal delivered while in the single-step range. Nested signals aren't a problem as they eventually all return. */ - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, - "infrun: signal may take us out of " - "single-step range\n"); + infrun_debug_printf ("signal may take us out of single-step range"); clear_step_over_info (); insert_hp_step_resume_breakpoint_at_frame (frame); @@ -5924,9 +6288,7 @@ if (!switch_back_to_stepped_thread (ecs)) { - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, - "infrun: random signal, keep going\n"); + infrun_debug_printf ("random signal, keep going"); keep_going (ecs); } @@ -5980,9 +6342,7 @@ install a momentary breakpoint at the target of the jmp_buf. */ - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, - "infrun: BPSTAT_WHAT_SET_LONGJMP_RESUME\n"); + infrun_debug_printf ("BPSTAT_WHAT_SET_LONGJMP_RESUME"); ecs->event_thread->stepping_over_breakpoint = 1; @@ -6003,10 +6363,8 @@ || !gdbarch_get_longjmp_target (gdbarch, frame, &jmp_buf_pc)) { - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, - "infrun: BPSTAT_WHAT_SET_LONGJMP_RESUME " - "(!gdbarch_get_longjmp_target)\n"); + infrun_debug_printf ("BPSTAT_WHAT_SET_LONGJMP_RESUME " + "(!gdbarch_get_longjmp_target)"); keep_going (ecs); return; } @@ -6041,9 +6399,7 @@ against stale dummy frames and user is not interested in stopping around longjmps. */ - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, - "infrun: BPSTAT_WHAT_CLEAR_LONGJMP_RESUME\n"); + infrun_debug_printf ("BPSTAT_WHAT_CLEAR_LONGJMP_RESUME"); gdb_assert (ecs->event_thread->control.exception_resume_breakpoint != NULL); @@ -6089,16 +6445,14 @@ return; case BPSTAT_WHAT_SINGLE: - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, "infrun: BPSTAT_WHAT_SINGLE\n"); + infrun_debug_printf ("BPSTAT_WHAT_SINGLE"); ecs->event_thread->stepping_over_breakpoint = 1; /* Still need to check other stuff, at least the case where we are stepping and step out of the right range. */ break; case BPSTAT_WHAT_STEP_RESUME: - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, "infrun: BPSTAT_WHAT_STEP_RESUME\n"); + infrun_debug_printf ("BPSTAT_WHAT_STEP_RESUME"); delete_step_resume_breakpoint (ecs->event_thread); if (ecs->event_thread->control.proceed_to_finish @@ -6130,11 +6484,10 @@ break; case BPSTAT_WHAT_STOP_NOISY: - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, "infrun: BPSTAT_WHAT_STOP_NOISY\n"); + infrun_debug_printf ("BPSTAT_WHAT_STOP_NOISY"); stop_print_frame = 1; - /* Assume the thread stopped for a breapoint. We'll still check + /* Assume the thread stopped for a breakpoint. We'll still check whether a/the breakpoint is there when the thread is next resumed. */ ecs->event_thread->stepping_over_breakpoint = 1; @@ -6143,11 +6496,10 @@ return; case BPSTAT_WHAT_STOP_SILENT: - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, "infrun: BPSTAT_WHAT_STOP_SILENT\n"); + infrun_debug_printf ("BPSTAT_WHAT_STOP_SILENT"); stop_print_frame = 0; - /* Assume the thread stopped for a breapoint. We'll still check + /* Assume the thread stopped for a breakpoint. We'll still check whether a/the breakpoint is there when the thread is next resumed. */ ecs->event_thread->stepping_over_breakpoint = 1; @@ -6155,8 +6507,7 @@ return; case BPSTAT_WHAT_HP_STEP_RESUME: - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, "infrun: BPSTAT_WHAT_HP_STEP_RESUME\n"); + infrun_debug_printf ("BPSTAT_WHAT_HP_STEP_RESUME"); delete_step_resume_breakpoint (ecs->event_thread); if (ecs->event_thread->step_after_step_resume_breakpoint) @@ -6191,10 +6542,7 @@ && sr_bp->type == bp_hp_step_resume && sr_bp->loc->address == ecs->event_thread->prev_pc) { - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, - "infrun: stepped permanent breakpoint, stopped in " - "handler\n"); + infrun_debug_printf ("stepped permanent breakpoint, stopped in handler"); delete_step_resume_breakpoint (ecs->event_thread); ecs->event_thread->step_after_step_resume_breakpoint = 0; } @@ -6212,9 +6560,7 @@ if (ecs->event_thread->control.step_resume_breakpoint) { - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, - "infrun: step-resume breakpoint is inserted\n"); + infrun_debug_printf ("step-resume breakpoint is inserted"); /* Having a step-resume breakpoint overrides anything else having to do with stepping commands until @@ -6225,8 +6571,7 @@ if (ecs->event_thread->control.step_range_end == 0) { - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, "infrun: no stepping, continue\n"); + infrun_debug_printf ("no stepping, continue"); /* Likewise if we aren't even stepping. */ keep_going (ecs); return; @@ -6255,11 +6600,10 @@ || frame_id_eq (get_frame_id (frame), ecs->event_thread->control.step_frame_id))) { - if (debug_infrun) - fprintf_unfiltered - (gdb_stdlog, "infrun: stepping inside range [%s-%s]\n", - paddress (gdbarch, ecs->event_thread->control.step_range_start), - paddress (gdbarch, ecs->event_thread->control.step_range_end)); + infrun_debug_printf + ("stepping inside range [%s-%s]", + paddress (gdbarch, ecs->event_thread->control.step_range_start), + paddress (gdbarch, ecs->event_thread->control.step_range_end)); /* Tentatively re-enable range stepping; `resume' disables it if necessary (e.g., if we're stepping over a breakpoint or we @@ -6302,9 +6646,7 @@ gdbarch_skip_solib_resolver (gdbarch, ecs->event_thread->suspend.stop_pc); - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, - "infrun: stepped into dynsym resolve code\n"); + infrun_debug_printf ("stepped into dynsym resolve code"); if (pc_after_resolver) { @@ -6327,9 +6669,7 @@ && gdbarch_in_indirect_branch_thunk (gdbarch, ecs->event_thread->suspend.stop_pc)) { - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, - "infrun: stepped into indirect branch thunk\n"); + infrun_debug_printf ("stepped into indirect branch thunk"); keep_going (ecs); return; } @@ -6339,9 +6679,7 @@ || ecs->event_thread->control.step_over_calls == STEP_OVER_ALL) && get_frame_type (frame) == SIGTRAMP_FRAME) { - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, - "infrun: stepped into signal trampoline\n"); + infrun_debug_printf ("stepped into signal trampoline"); /* The inferior, while doing a "step" or "next", has ended up in a signal trampoline (either by a signal being delivered or by the signal handler returning). Just single-step until the @@ -6366,9 +6704,7 @@ CORE_ADDR real_stop_pc = gdbarch_skip_trampoline_code (gdbarch, frame, stop_pc); - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, - "infrun: stepped into solib return tramp\n"); + infrun_debug_printf ("stepped into solib return tramp"); /* Only proceed through if we know where it's going. */ if (real_stop_pc) @@ -6421,8 +6757,7 @@ CORE_ADDR stop_pc = ecs->event_thread->suspend.stop_pc; CORE_ADDR real_stop_pc; - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, "infrun: stepped into subroutine\n"); + infrun_debug_printf ("stepped into subroutine"); if (ecs->event_thread->control.step_over_calls == STEP_OVER_NONE) { @@ -6524,7 +6859,8 @@ tmp_sal = find_pc_line (ecs->stop_func_start, 0); if (tmp_sal.line != 0 && !function_name_is_marked_for_skip (ecs->stop_func_name, - tmp_sal)) + tmp_sal) + && !inline_frame_is_marked_for_skip (true, ecs->event_thread)) { if (execution_direction == EXEC_REVERSE) handle_step_into_function_backward (gdbarch, ecs); @@ -6605,6 +6941,10 @@ } } + /* This always returns the sal for the inner-most frame when we are in a + stack of inlined frames, even if GDB actually believes that it is in a + more outer frame. This is checked for below by calls to + inline_skipped_frames. */ stop_pc_sal = find_pc_line (ecs->event_thread->suspend.stop_pc, 0); /* NOTE: tausq/2004-05-24: This if block used to be done before all @@ -6614,9 +6954,7 @@ && ecs->stop_func_name == NULL && stop_pc_sal.line == 0) { - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, - "infrun: stepped into undebuggable function\n"); + infrun_debug_printf ("stepped into undebuggable function"); /* The inferior just stepped into, or returned to, an undebuggable function (where there is no debugging information @@ -6649,8 +6987,7 @@ { /* It is stepi or nexti. We always want to stop stepping after one instruction. */ - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, "infrun: stepi/nexti\n"); + infrun_debug_printf ("stepi/nexti"); end_stepping_range (ecs); return; } @@ -6661,8 +6998,7 @@ stepping (does this always happen right after one instruction, when we do "s" in a function with no line numbers, or can this happen as a result of a return or longjmp?). */ - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, "infrun: no line number info\n"); + infrun_debug_printf ("line number info"); end_stepping_range (ecs); return; } @@ -6675,9 +7011,7 @@ ecs->event_thread->control.step_frame_id) && inline_skipped_frames (ecs->event_thread)) { - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, - "infrun: stepped into inlined function\n"); + infrun_debug_printf ("stepped into inlined function"); symtab_and_line call_sal = find_frame_sal (get_current_frame ()); @@ -6690,7 +7024,14 @@ if (call_sal.line == ecs->event_thread->current_line && call_sal.symtab == ecs->event_thread->current_symtab) - step_into_inline_frame (ecs->event_thread); + { + step_into_inline_frame (ecs->event_thread); + if (inline_frame_is_marked_for_skip (false, ecs->event_thread)) + { + keep_going (ecs); + return; + } + } end_stepping_range (ecs); return; @@ -6720,30 +7061,42 @@ && stepped_in_from (get_current_frame (), ecs->event_thread->control.step_frame_id)) { - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, - "infrun: stepping through inlined function\n"); + infrun_debug_printf ("stepping through inlined function"); - if (ecs->event_thread->control.step_over_calls == STEP_OVER_ALL) + if (ecs->event_thread->control.step_over_calls == STEP_OVER_ALL + || inline_frame_is_marked_for_skip (false, ecs->event_thread)) keep_going (ecs); else end_stepping_range (ecs); return; } + bool refresh_step_info = true; if ((ecs->event_thread->suspend.stop_pc == stop_pc_sal.pc) && (ecs->event_thread->current_line != stop_pc_sal.line || ecs->event_thread->current_symtab != stop_pc_sal.symtab)) { - /* We are at the start of a different line. So stop. Note that - we don't stop if we step into the middle of a different line. - That is said to make things like for (;;) statements work - better. */ - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, - "infrun: stepped to a different line\n"); - end_stepping_range (ecs); - return; + if (stop_pc_sal.is_stmt) + { + /* We are at the start of a different line. So stop. Note that + we don't stop if we step into the middle of a different line. + That is said to make things like for (;;) statements work + better. */ + infrun_debug_printf ("stepped to a different line"); + end_stepping_range (ecs); + return; + } + else if (frame_id_eq (get_frame_id (get_current_frame ()), + ecs->event_thread->control.step_frame_id)) + { + /* We are at the start of a different line, however, this line is + not marked as a statement, and we have not changed frame. We + ignore this line table entry, and continue stepping forward, + looking for a better place to stop. */ + refresh_step_info = false; + infrun_debug_printf ("stepped to a different line, but " + "it's not the start of a statement"); + } } /* We aren't done stepping. @@ -6751,15 +7104,22 @@ Optimize by setting the stepping range to the line. (We might not be in the original line, but if we entered a new line in mid-statement, we continue stepping. This makes - things like for(;;) statements work better.) */ + things like for(;;) statements work better.) + + If we entered a SAL that indicates a non-statement line table entry, + then we update the stepping range, but we don't update the step info, + which includes things like the line number we are stepping away from. + This means we will stop when we find a line table entry that is marked + as is-statement, even if it matches the non-statement one we just + stepped into. */ ecs->event_thread->control.step_range_start = stop_pc_sal.pc; ecs->event_thread->control.step_range_end = stop_pc_sal.end; ecs->event_thread->control.may_range_step = 1; - set_step_info (frame, stop_pc_sal); + if (refresh_step_info) + set_step_info (ecs->event_thread, frame, stop_pc_sal); - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, "infrun: keep going\n"); + infrun_debug_printf ("keep going"); keep_going (ecs); } @@ -6791,12 +7151,9 @@ if (ecs->event_thread->control.trap_expected && ecs->event_thread->suspend.stop_signal != GDB_SIGNAL_TRAP) { - if (debug_infrun) - { - fprintf_unfiltered (gdb_stdlog, - "infrun: need to finish step-over of [%s]\n", - target_pid_to_str (ecs->event_thread->ptid).c_str ()); - } + infrun_debug_printf + ("need to finish step-over of [%s]", + target_pid_to_str (ecs->event_thread->ptid).c_str ()); keep_going (ecs); return 1; } @@ -6805,13 +7162,8 @@ breakpoint of another thread. */ if (ecs->hit_singlestep_breakpoint) { - if (debug_infrun) - { - fprintf_unfiltered (gdb_stdlog, - "infrun: need to step [%s] over single-step " - "breakpoint\n", - target_pid_to_str (ecs->ptid).c_str ()); - } + infrun_debug_printf ("need to step [%s] over single-step breakpoint", + target_pid_to_str (ecs->ptid).c_str ()); keep_going (ecs); return 1; } @@ -6821,12 +7173,9 @@ another thread. */ if (thread_still_needs_step_over (ecs->event_thread)) { - if (debug_infrun) - { - fprintf_unfiltered (gdb_stdlog, - "infrun: thread [%s] still needs step-over\n", - target_pid_to_str (ecs->event_thread->ptid).c_str ()); - } + infrun_debug_printf + ("thread [%s] still needs step-over", + target_pid_to_str (ecs->event_thread->ptid).c_str ()); keep_going (ecs); return 1; } @@ -6861,10 +7210,13 @@ for (thread_info *tp : all_non_exited_threads ()) { + switch_to_thread_no_regs (tp); + /* Ignore threads of processes the caller is not resuming. */ if (!sched_multi - && tp->ptid.pid () != ecs->ptid.pid ()) + && (tp->inf->process_target () != ecs->target + || tp->inf->pid != ecs->ptid.pid ())) continue; /* When stepping over a breakpoint, we lock all threads @@ -6902,9 +7254,7 @@ if (stepping_thread != NULL) { - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, - "infrun: switching back to stepped thread\n"); + infrun_debug_printf ("switching back to stepped thread"); if (keep_going_stepped_thread (stepping_thread)) { @@ -6912,6 +7262,8 @@ return 1; } } + + switch_to_thread (ecs->event_thread); } return 0; @@ -6948,18 +7300,14 @@ if (tp->state == THREAD_EXITED || !target_thread_alive (tp->ptid)) { - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, - "infrun: not resuming previously " - "stepped thread, it has vanished\n"); + infrun_debug_printf ("not resuming previously stepped thread, it has " + "vanished"); delete_thread (tp); return 0; } - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, - "infrun: resuming previously stepped thread\n"); + infrun_debug_printf ("resuming previously stepped thread"); reset_ecs (ecs, tp); switch_to_thread (tp); @@ -6984,11 +7332,9 @@ { ptid_t resume_ptid; - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, - "infrun: expected thread advanced also (%s -> %s)\n", - paddress (target_gdbarch (), tp->prev_pc), - paddress (target_gdbarch (), tp->suspend.stop_pc)); + infrun_debug_printf ("expected thread advanced also (%s -> %s)", + paddress (target_gdbarch (), tp->prev_pc), + paddress (target_gdbarch (), tp->suspend.stop_pc)); /* Clear the info of the previous step-over, as it's no longer valid (if the thread was trying to step over a breakpoint, it @@ -7004,15 +7350,13 @@ get_frame_address_space (frame), tp->suspend.stop_pc); - tp->resumed = 1; + tp->resumed = true; resume_ptid = internal_resume_ptid (tp->control.stepping_command); do_target_resume (resume_ptid, 0, GDB_SIGNAL_0); } else { - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, - "infrun: expected thread still hasn't advanced\n"); + infrun_debug_printf ("expected thread still hasn't advanced"); keep_going_pass_signal (ecs); } @@ -7163,10 +7507,8 @@ gdb_assert (inferior_thread ()->control.step_resume_breakpoint == NULL); gdb_assert (sr_type == bp_step_resume || sr_type == bp_hp_step_resume); - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, - "infrun: inserting step-resume breakpoint at %s\n", - paddress (gdbarch, sr_sal.pc)); + infrun_debug_printf ("inserting step-resume breakpoint at %s", + paddress (gdbarch, sr_sal.pc)); inferior_thread ()->control.step_resume_breakpoint = set_momentary_breakpoint (gdbarch, sr_sal, sr_id, sr_type).release (); @@ -7252,10 +7594,8 @@ longjmp_resume_breakpoint when one is already active. */ gdb_assert (inferior_thread ()->control.exception_resume_breakpoint == NULL); - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, - "infrun: inserting longjmp-resume breakpoint at %s\n", - paddress (gdbarch, pc)); + infrun_debug_printf ("inserting longjmp-resume breakpoint at %s", + paddress (gdbarch, pc)); inferior_thread ()->control.exception_resume_breakpoint = set_momentary_breakpoint_at_pc (gdbarch, pc, bp_longjmp_resume).release (); @@ -7288,10 +7628,8 @@ { handler = value_as_address (value); - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, - "infrun: exception resume at %lx\n", - (unsigned long) handler); + infrun_debug_printf ("exception resume at %lx", + (unsigned long) handler); bp = set_momentary_breakpoint_at_pc (get_frame_arch (frame), handler, @@ -7328,11 +7666,8 @@ handler = value_as_address (arg_value); - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, - "infrun: exception resume at %s\n", - paddress (get_objfile_arch (probe->objfile), - handler)); + infrun_debug_printf ("exception resume at %s", + paddress (probe->objfile->arch (), handler)); bp = set_momentary_breakpoint_at_pc (get_frame_arch (frame), handler, bp_exception_resume).release (); @@ -7411,15 +7746,14 @@ static void stop_waiting (struct execution_control_state *ecs) { - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, "infrun: stop_waiting\n"); + infrun_debug_printf ("stop_waiting"); /* Let callers know we don't want to wait for the inferior anymore. */ ecs->wait_some_more = 0; - /* If all-stop, but the target is always in non-stop mode, stop all + /* If all-stop, but there exists a non-stop target, stop all threads now that we're presenting the stop to the user. */ - if (!non_stop && target_is_non_stop_p ()) + if (!non_stop && exists_non_stop_target ()) stop_all_threads (); } @@ -7434,17 +7768,15 @@ /* Save the pc before execution, to compare with pc after stop. */ ecs->event_thread->prev_pc - = regcache_read_pc (get_thread_regcache (ecs->event_thread)); + = regcache_read_pc_protected (get_thread_regcache (ecs->event_thread)); if (ecs->event_thread->control.trap_expected) { struct thread_info *tp = ecs->event_thread; - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, - "infrun: %s has trap_expected set, " - "resuming to collect trap\n", - target_pid_to_str (tp->ptid).c_str ()); + infrun_debug_printf ("%s has trap_expected set, " + "resuming to collect trap", + target_pid_to_str (tp->ptid).c_str ()); /* We haven't yet gotten our trap, and either: intercepted a non-signal event (e.g., a fork); or took a signal which we @@ -7462,20 +7794,15 @@ if (ecs->hit_singlestep_breakpoint || thread_still_needs_step_over (tp)) { - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, - "infrun: step-over already in progress: " - "step-over for %s deferred\n", - target_pid_to_str (tp->ptid).c_str ()); + infrun_debug_printf ("step-over already in progress: " + "step-over for %s deferred", + target_pid_to_str (tp->ptid).c_str ()); thread_step_over_chain_enqueue (tp); } else { - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, - "infrun: step-over in progress: " - "resume of %s deferred\n", - target_pid_to_str (tp->ptid).c_str ()); + infrun_debug_printf ("step-over in progress: resume of %s deferred", + target_pid_to_str (tp->ptid).c_str ()); } } else @@ -7575,12 +7902,15 @@ static void prepare_to_wait (struct execution_control_state *ecs) { - if (debug_infrun) - fprintf_unfiltered (gdb_stdlog, "infrun: prepare_to_wait\n"); + infrun_debug_printf ("prepare_to_wait"); ecs->wait_some_more = 1; - if (!target_is_async_p ()) + /* If the target can't async, emulate it by marking the infrun event + handler such that as soon as we get back to the event-loop, we + immediately end up in fetch_inferior_event again calling + target_wait. */ + if (!target_can_async_p ()) mark_infrun_async_event_handler (); } @@ -7665,20 +7995,6 @@ } } -/* Some targets/architectures can do extra processing/display of - segmentation faults. E.g., Intel MPX boundary faults. - Call the architecture dependent function to handle the fault. */ - -static void -handle_segmentation_fault (struct ui_out *uiout) -{ - struct regcache *regcache = get_current_regcache (); - struct gdbarch *gdbarch = regcache->arch (); - - if (gdbarch_handle_segmentation_fault_p (gdbarch)) - gdbarch_handle_segmentation_fault (gdbarch, uiout); -} - void print_signal_received_reason (struct ui_out *uiout, enum gdb_signal siggnal) { @@ -7721,8 +8037,10 @@ annotate_signal_string (); uiout->field_string ("signal-meaning", gdb_signal_to_string (siggnal)); - if (siggnal == GDB_SIGNAL_SEGV) - handle_segmentation_fault (uiout); + struct regcache *regcache = get_current_regcache (); + struct gdbarch *gdbarch = regcache->arch (); + if (gdbarch_report_signal_info_p (gdbarch)) + gdbarch_report_signal_info (gdbarch, uiout, siggnal); annotate_signal_string_end (); } @@ -7801,10 +8119,9 @@ print_stop_event (struct ui_out *uiout, bool displays) { struct target_waitstatus last; - ptid_t last_ptid; struct thread_info *tp; - get_last_target_status (&last_ptid, &last); + get_last_target_status (nullptr, nullptr, &last); { scoped_restore save_uiout = make_scoped_restore (¤t_uiout, uiout); @@ -7923,9 +8240,8 @@ normal_stop (void) { struct target_waitstatus last; - ptid_t last_ptid; - get_last_target_status (&last_ptid, &last); + get_last_target_status (nullptr, nullptr, &last); new_stop_id (); @@ -7934,10 +8250,10 @@ frontend/user running state. A QUIT is an easy exception to see here, so do this before any filtered output. */ - gdb::optional<scoped_finish_thread_state> maybe_finish_thread_state; + ptid_t finish_ptid = null_ptid; if (!non_stop) - maybe_finish_thread_state.emplace (minus_one_ptid); + finish_ptid = minus_one_ptid; else if (last.kind == TARGET_WAITKIND_SIGNALLED || last.kind == TARGET_WAITKIND_EXITED) { @@ -7947,10 +8263,17 @@ linux-fork.c automatically switches to another fork from within target_mourn_inferior. */ if (inferior_ptid != null_ptid) - maybe_finish_thread_state.emplace (ptid_t (inferior_ptid.pid ())); + finish_ptid = ptid_t (inferior_ptid.pid ()); } else if (last.kind != TARGET_WAITKIND_NO_RESUMED) - maybe_finish_thread_state.emplace (inferior_ptid); + finish_ptid = inferior_ptid; + + gdb::optional<scoped_finish_thread_state> maybe_finish_thread_state; + if (finish_ptid != null_ptid) + { + maybe_finish_thread_state.emplace + (user_visible_resume_target (finish_ptid), finish_ptid); + } /* As we're presenting a stop, and potentially removing breakpoints, update the thread list so we can tell whether there are threads @@ -8881,11 +9204,79 @@ static void infrun_async_inferior_event_handler (gdb_client_data data) { - inferior_event_handler (INF_REG_EVENT, NULL); + inferior_event_handler (INF_REG_EVENT); +} + +#if GDB_SELF_TEST +namespace selftests +{ + +/* Verify that when two threads with the same ptid exist (from two different + targets) and one of them changes ptid, we only update inferior_ptid if + it is appropriate. */ + +static void +infrun_thread_ptid_changed () +{ + gdbarch *arch = current_inferior ()->gdbarch; + + /* The thread which inferior_ptid represents changes ptid. */ + { + scoped_restore_current_pspace_and_thread restore; + + scoped_mock_context<test_target_ops> target1 (arch); + scoped_mock_context<test_target_ops> target2 (arch); + target2.mock_inferior.next = &target1.mock_inferior; + + ptid_t old_ptid (111, 222); + ptid_t new_ptid (111, 333); + + target1.mock_inferior.pid = old_ptid.pid (); + target1.mock_thread.ptid = old_ptid; + target2.mock_inferior.pid = old_ptid.pid (); + target2.mock_thread.ptid = old_ptid; + + auto restore_inferior_ptid = make_scoped_restore (&inferior_ptid, old_ptid); + set_current_inferior (&target1.mock_inferior); + + thread_change_ptid (&target1.mock_target, old_ptid, new_ptid); + + gdb_assert (inferior_ptid == new_ptid); + } + + /* A thread with the same ptid as inferior_ptid, but from another target, + changes ptid. */ + { + scoped_restore_current_pspace_and_thread restore; + + scoped_mock_context<test_target_ops> target1 (arch); + scoped_mock_context<test_target_ops> target2 (arch); + target2.mock_inferior.next = &target1.mock_inferior; + + ptid_t old_ptid (111, 222); + ptid_t new_ptid (111, 333); + + target1.mock_inferior.pid = old_ptid.pid (); + target1.mock_thread.ptid = old_ptid; + target2.mock_inferior.pid = old_ptid.pid (); + target2.mock_thread.ptid = old_ptid; + + auto restore_inferior_ptid = make_scoped_restore (&inferior_ptid, old_ptid); + set_current_inferior (&target2.mock_inferior); + + thread_change_ptid (&target1.mock_target, old_ptid, new_ptid); + + gdb_assert (inferior_ptid == old_ptid); + } } +} /* namespace selftests */ + +#endif /* GDB_SELF_TEST */ + +void _initialize_infrun (); void -_initialize_infrun (void) +_initialize_infrun () { struct cmd_list_element *c; @@ -9184,4 +9575,9 @@ show_observer_mode, &setlist, &showlist); + +#if GDB_SELF_TEST + selftests::register_test ("infrun_thread_ptid_changed", + selftests::infrun_thread_ptid_changed); +#endif } diff -Nru gdb-9.1/gdb/infrun.h gdb-10.2/gdb/infrun.h --- gdb-9.1/gdb/infrun.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/infrun.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 1986-2020 Free Software Foundation, Inc. +/* Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -25,10 +25,23 @@ struct frame_info; struct address_space; struct return_value_info; +struct process_stratum_target; +struct thread_info; /* True if we are debugging run control. */ extern unsigned int debug_infrun; +/* Print an "infrun" debug statement. Should be used through + infrun_debug_printf. */ +void ATTRIBUTE_PRINTF (2, 3) infrun_debug_printf_1 + (const char *func_name, const char *fmt, ...); + +#define infrun_debug_printf(fmt, ...) \ + do { \ + if (debug_infrun) \ + infrun_debug_printf_1 (__func__, fmt, ##__VA_ARGS__); \ + } while (0) + /* True if we are debugging displaced stepping. */ extern bool debug_displaced; @@ -93,7 +106,13 @@ resumed. */ extern ptid_t user_visible_resume_ptid (int step); -extern void wait_for_inferior (void); +/* Return the process_stratum target that we will proceed, in the + perspective of the user/frontend. If RESUME_PTID is + MINUS_ONE_PTID, then we'll resume all threads of all targets, so + the function returns NULL. Otherwise, we'll be resuming a process + or thread of the current process, so we return the current + inferior's process stratum target. */ +extern process_stratum_target *user_visible_resume_target (ptid_t resume_ptid); /* Return control to GDB when the inferior stops for real. Print appropriate messages, remove breakpoints, give terminal our modes, @@ -101,18 +120,28 @@ target, false otherwise. */ extern int normal_stop (void); -extern void get_last_target_status (ptid_t *ptid, +/* Return the cached copy of the last target/ptid/waitstatus returned + by target_wait()/deprecated_target_wait_hook(). The data is + actually cached by handle_inferior_event(), which gets called + immediately after target_wait()/deprecated_target_wait_hook(). */ +extern void get_last_target_status (process_stratum_target **target, + ptid_t *ptid, struct target_waitstatus *status); -extern void set_last_target_status (ptid_t ptid, +/* Set the cached copy of the last target/ptid/waitstatus. */ +extern void set_last_target_status (process_stratum_target *target, ptid_t ptid, struct target_waitstatus status); +/* Clear the cached copy of the last ptid/waitstatus returned by + target_wait(). */ +extern void nullify_last_target_wait_ptid (); + /* Stop all threads. Only returns after everything is halted. */ extern void stop_all_threads (void); extern void prepare_for_detach (void); -extern void fetch_inferior_event (void *); +extern void fetch_inferior_event (); extern void init_wait_for_inferior (void); @@ -133,7 +162,9 @@ triggers a non-steppable watchpoint. */ extern int stepping_past_nonsteppable_watchpoint (void); -extern void set_step_info (struct frame_info *frame, +/* Record in TP the frame and location we're currently stepping through. */ +extern void set_step_info (thread_info *tp, + struct frame_info *frame, struct symtab_and_line sal); /* Several print_*_reason helper functions to print why the inferior @@ -248,6 +279,8 @@ virtual ~displaced_step_closure () = 0; }; +using displaced_step_closure_up = std::unique_ptr<displaced_step_closure>; + /* A simple displaced step closure that contains only a byte buffer. */ struct buf_displaced_step_closure : displaced_step_closure @@ -273,7 +306,7 @@ failed_before = 0; step_thread = nullptr; step_gdbarch = nullptr; - step_closure = nullptr; + step_closure.reset (); step_original = 0; step_copy = 0; step_saved_copy.clear (); @@ -293,7 +326,7 @@ /* The closure provided gdbarch_displaced_step_copy_insn, to be used for post-step cleanup. */ - displaced_step_closure *step_closure; + displaced_step_closure_up step_closure; /* The address of the original instruction, and the copy we made. */ diff -Nru gdb-9.1/gdb/inline-frame.c gdb-10.2/gdb/inline-frame.c --- gdb-9.1/gdb/inline-frame.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/inline-frame.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Inline frame unwinder for GDB. - Copyright (C) 2008-2020 Free Software Foundation, Inc. + Copyright (C) 2008-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -37,9 +37,9 @@ struct inline_state { inline_state (thread_info *thread_, int skipped_frames_, CORE_ADDR saved_pc_, - symbol *skipped_symbol_) + std::vector<symbol *> &&skipped_symbols_) : thread (thread_), skipped_frames (skipped_frames_), saved_pc (saved_pc_), - skipped_symbol (skipped_symbol_) + skipped_symbols (std::move (skipped_symbols_)) {} /* The thread this data relates to. It should be a currently @@ -56,10 +56,10 @@ any skipped frames. */ CORE_ADDR saved_pc; - /* Only valid if SKIPPED_FRAMES is non-zero. This is the symbol - of the outermost skipped inline function. It's used to find the - call site of the current frame. */ - struct symbol *skipped_symbol; + /* Only valid if SKIPPED_FRAMES is non-zero. This is the list of all + function symbols that have been skipped, from inner most to outer + most. It is used to find the call site of the current frame. */ + std::vector<struct symbol *> skipped_symbols; }; static std::vector<inline_state> inline_states; @@ -95,37 +95,54 @@ return &state; } -/* Forget about any hidden inlined functions in PTID, which is new or - about to be resumed. PTID may be minus_one_ptid (all processes) - or a PID (all threads in this process). */ +/* See inline-frame.h. */ void -clear_inline_frame_state (ptid_t ptid) +clear_inline_frame_state (process_stratum_target *target, ptid_t filter_ptid) { - if (ptid == minus_one_ptid) - { - inline_states.clear (); - return; - } + gdb_assert (target != NULL); - if (ptid.is_pid ()) + if (filter_ptid == minus_one_ptid || filter_ptid.is_pid ()) { - int pid = ptid.pid (); + auto matcher = [target, &filter_ptid] (const inline_state &state) + { + thread_info *t = state.thread; + return (t->inf->process_target () == target + && t->ptid.matches (filter_ptid)); + }; + auto it = std::remove_if (inline_states.begin (), inline_states.end (), - [pid] (const inline_state &state) - { - return pid == state.thread->inf->pid; - }); + matcher); inline_states.erase (it, inline_states.end ()); return; } + + auto matcher = [target, &filter_ptid] (const inline_state &state) + { + thread_info *t = state.thread; + return (t->inf->process_target () == target + && filter_ptid == t->ptid); + }; + + auto it = std::find_if (inline_states.begin (), inline_states.end (), + matcher); + + if (it != inline_states.end ()) + unordered_remove (inline_states, it); +} + +/* See inline-frame.h. */ + +void +clear_inline_frame_state (thread_info *thread) +{ auto it = std::find_if (inline_states.begin (), inline_states.end (), - [&ptid] (const inline_state &state) + [thread] (const inline_state &state) { - return ptid == state.thread->ptid; + return thread == state.thread; }); if (it != inline_states.end ()) @@ -154,10 +171,6 @@ frame"). This will take work. */ gdb_assert (frame_id_p (*this_id)); - /* For now, require we don't match outer_frame_id either (see - comment above). */ - gdb_assert (!frame_id_eq (*this_id, outer_frame_id)); - /* Future work NOTE: Alexandre Oliva applied a patch to GCC 4.3 which generates DW_AT_entry_pc for inlined functions when possible. If this attribute is available, we should use it @@ -286,7 +299,8 @@ } /* Loop over the stop chain and determine if execution stopped in an - inlined frame because of a user breakpoint set at FRAME_BLOCK. */ + inlined frame because of a breakpoint with a user-specified location + set at FRAME_BLOCK. */ static bool stopped_by_user_bp_inline_frame (const block *frame_block, bpstat stop_chain) @@ -295,7 +309,8 @@ { struct breakpoint *bpt = s->breakpoint_at; - if (bpt != NULL && user_breakpoint_p (bpt)) + if (bpt != NULL + && (user_breakpoint_p (bpt) || bpt->type == bp_until)) { bp_location *loc = s->bp_location_at; enum bp_loc_type t = loc->loc_type; @@ -324,7 +339,7 @@ skip_inline_frames (thread_info *thread, bpstat stop_chain) { const struct block *frame_block, *cur_block; - struct symbol *last_sym = NULL; + std::vector<struct symbol *> skipped_syms; int skip_count = 0; /* This function is called right after reinitializing the frame @@ -352,7 +367,7 @@ break; skip_count++; - last_sym = BLOCK_FUNCTION (cur_block); + skipped_syms.push_back (BLOCK_FUNCTION (cur_block)); } else break; @@ -365,7 +380,8 @@ } gdb_assert (find_inline_frame_state (thread) == NULL); - inline_states.emplace_back (thread, skip_count, this_pc, last_sym); + inline_states.emplace_back (thread, skip_count, this_pc, + std::move (skipped_syms)); if (skip_count != 0) reinit_frame_cache (); @@ -404,9 +420,16 @@ inline_skipped_symbol (thread_info *thread) { inline_state *state = find_inline_frame_state (thread); - gdb_assert (state != NULL); - return state->skipped_symbol; + + /* This should only be called when we are skipping at least one frame, + hence SKIPPED_FRAMES will be greater than zero when we get here. + We initialise SKIPPED_FRAMES at the same time as we build + SKIPPED_SYMBOLS, hence it should be true that SKIPPED_FRAMES never + indexes outside of the SKIPPED_SYMBOLS vector. */ + gdb_assert (state->skipped_frames > 0); + gdb_assert (state->skipped_frames <= state->skipped_symbols.size ()); + return state->skipped_symbols[state->skipped_frames - 1]; } /* Return the number of functions inlined into THIS_FRAME. Some of diff -Nru gdb-9.1/gdb/inline-frame.h gdb-10.2/gdb/inline-frame.h --- gdb-9.1/gdb/inline-frame.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/inline-frame.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Definitions for inline frame support. - Copyright (C) 2008-2020 Free Software Foundation, Inc. + Copyright (C) 2008-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -23,6 +23,7 @@ struct frame_info; struct frame_unwind; struct bpstats; +struct process_stratum_target; /* The inline frame unwinder. */ @@ -39,10 +40,15 @@ void skip_inline_frames (thread_info *thread, struct bpstats *stop_chain); /* Forget about any hidden inlined functions in PTID, which is new or - about to be resumed. If PTID is minus_one_ptid, forget about all - hidden inlined functions. */ + about to be resumed. PTID may be minus_one_ptid (all processes of + TARGET) or a PID (all threads in this process of TARGET). */ -void clear_inline_frame_state (ptid_t ptid); +void clear_inline_frame_state (process_stratum_target *target, ptid_t ptid); + +/* Forget about any hidden inlined functions in THREAD, which is new + or about to be resumed. */ + +void clear_inline_frame_state (thread_info *thread); /* Step into an inlined function by unhiding it. */ diff -Nru gdb-9.1/gdb/interps.c gdb-10.2/gdb/interps.c --- gdb-9.1/gdb/interps.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/interps.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Manages interpreters for GDB, the GNU debugger. - Copyright (C) 2000-2020 Free Software Foundation, Inc. + Copyright (C) 2000-2021 Free Software Foundation, Inc. Written by Jim Ingham <jingham@apple.com> of Apple Computer, Inc. @@ -32,7 +32,7 @@ #include "defs.h" #include "gdbcmd.h" #include "ui-out.h" -#include "event-loop.h" +#include "gdbsupport/event-loop.h" #include "event-top.h" #include "interps.h" #include "completer.h" @@ -439,8 +439,9 @@ } /* This just adds the "interpreter-exec" command. */ +void _initialize_interpreter (); void -_initialize_interpreter (void) +_initialize_interpreter () { struct cmd_list_element *c; diff -Nru gdb-9.1/gdb/interps.h gdb-10.2/gdb/interps.h --- gdb-9.1/gdb/interps.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/interps.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Manages interpreters for GDB, the GNU debugger. - Copyright (C) 2000-2020 Free Software Foundation, Inc. + Copyright (C) 2000-2021 Free Software Foundation, Inc. Written by Jim Ingham <jingham@apple.com> of Apple Computer, Inc. diff -Nru gdb-9.1/gdb/iq2000-tdep.c gdb-10.2/gdb/iq2000-tdep.c --- gdb-9.1/gdb/iq2000-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/iq2000-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,7 +1,7 @@ /* Target-dependent code for the IQ2000 architecture, for GDB, the GNU Debugger. - Copyright (C) 2000-2020 Free Software Foundation, Inc. + Copyright (C) 2000-2021 Free Software Foundation, Inc. Contributed by Red Hat. @@ -24,7 +24,7 @@ #include "frame.h" #include "frame-base.h" #include "frame-unwind.h" -#include "dwarf2-frame.h" +#include "dwarf2/frame.h" #include "gdbtypes.h" #include "value.h" #include "dis-asm.h" @@ -89,7 +89,7 @@ struct type * type, const gdb_byte * buf) { enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); - enum type_code target = TYPE_CODE (TYPE_TARGET_TYPE (type)); + enum type_code target = TYPE_TARGET_TYPE (type)->code (); CORE_ADDR addr = extract_unsigned_integer (buf, TYPE_LENGTH (type), byte_order); @@ -109,7 +109,7 @@ struct type *type, gdb_byte *buf, CORE_ADDR addr) { enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); - enum type_code target = TYPE_CODE (TYPE_TARGET_TYPE (type)); + enum type_code target = TYPE_TARGET_TYPE (type)->code (); if (target == TYPE_CODE_FUNC || target == TYPE_CODE_METHOD) addr = insn_ptr_from_addr (addr); @@ -504,8 +504,8 @@ static int iq2000_use_struct_convention (struct type *type) { - return ((TYPE_CODE (type) == TYPE_CODE_STRUCT) - || (TYPE_CODE (type) == TYPE_CODE_UNION)) + return ((type->code () == TYPE_CODE_STRUCT) + || (type->code () == TYPE_CODE_UNION)) && TYPE_LENGTH (type) > 8; } @@ -597,26 +597,26 @@ struct type *ftype; /* Skip typedefs. */ - while (TYPE_CODE (type) == TYPE_CODE_TYPEDEF) + while (type->code () == TYPE_CODE_TYPEDEF) type = TYPE_TARGET_TYPE (type); /* Non-struct and non-union types are always passed by value. */ - if (TYPE_CODE (type) != TYPE_CODE_STRUCT - && TYPE_CODE (type) != TYPE_CODE_UNION) + if (type->code () != TYPE_CODE_STRUCT + && type->code () != TYPE_CODE_UNION) return 0; /* Structs with more than 1 field are always passed by address. */ - if (TYPE_NFIELDS (type) != 1) + if (type->num_fields () != 1) return 1; /* Get field type. */ - ftype = (TYPE_FIELDS (type))[0].type; + ftype = type->field (0).type (); /* The field type must have size 8, otherwise pass by address. */ if (TYPE_LENGTH (ftype) != 8) return 1; /* Skip typedefs of field type. */ - while (TYPE_CODE (ftype) == TYPE_CODE_TYPEDEF) + while (ftype->code () == TYPE_CODE_TYPEDEF) ftype = TYPE_TARGET_TYPE (ftype); /* If field is int or float, pass by value. */ - if (TYPE_CODE (ftype) == TYPE_CODE_FLT - || TYPE_CODE (ftype) == TYPE_CODE_INT) + if (ftype->code () == TYPE_CODE_FLT + || ftype->code () == TYPE_CODE_INT) return 0; /* Everything else, pass by address. */ return 1; @@ -839,8 +839,9 @@ Initializer function for the iq2000 module. Called by gdb at start-up. */ +void _initialize_iq2000_tdep (); void -_initialize_iq2000_tdep (void) +_initialize_iq2000_tdep () { register_gdbarch_init (bfd_arch_iq2000, iq2000_gdbarch_init); } diff -Nru gdb-9.1/gdb/jit.c gdb-10.2/gdb/jit.c --- gdb-9.1/gdb/jit.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/jit.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Handle JIT code generation in the inferior for GDB, the GNU Debugger. - Copyright (C) 2009-2020 Free Software Foundation, Inc. + Copyright (C) 2009-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -41,11 +41,10 @@ #include "gdb_bfd.h" #include "readline/tilde.h" #include "completer.h" +#include <forward_list> static std::string jit_reader_dir; -static const struct objfile_data *jit_objfile_data; - static const char *const jit_break_name = "__jit_debug_register_code"; static const char *const jit_descriptor_name = "__jit_debug_descriptor"; @@ -100,7 +99,7 @@ static file_ptr mem_bfd_iovec_pread (struct bfd *abfd, void *stream, void *buf, - file_ptr nbytes, file_ptr offset) + file_ptr nbytes, file_ptr offset) { int err; struct target_buffer *buffer = (struct target_buffer *) stream; @@ -135,7 +134,8 @@ /* Open a BFD from the target's memory. */ static gdb_bfd_ref_ptr -bfd_open_from_target_memory (CORE_ADDR addr, ULONGEST size, char *target) +bfd_open_from_target_memory (CORE_ADDR addr, ULONGEST size, + const char *target) { struct target_buffer *buffer = XNEW (struct target_buffer); @@ -185,13 +185,13 @@ if (jit_debug) fprintf_unfiltered (gdb_stdlog, _("Opening shared object %s.\n"), - file_name); + file_name); gdb_dlhandle_up so = gdb_dlopen (file_name); init_fn = (reader_init_fn_type *) gdb_dlsym (so, reader_init_fn_sym); if (!init_fn) error (_("Could not locate initialization function: %s."), - reader_init_fn_sym); + reader_init_fn_sym); if (gdb_dlsym (so, "plugin_is_GPL_compatible") == NULL) error (_("Reader not GPL compatible.")); @@ -239,65 +239,24 @@ loaded_jit_reader = NULL; } -/* Per-program space structure recording which objfile has the JIT - symbols. */ +/* Destructor for jiter_objfile_data. */ -struct jit_program_space_data +jiter_objfile_data::~jiter_objfile_data () { - /* The objfile. This is NULL if no objfile holds the JIT - symbols. */ - - struct objfile *objfile = nullptr; - - /* If this program space has __jit_debug_register_code, this is the - cached address from the minimal symbol. This is used to detect - relocations requiring the breakpoint to be re-created. */ - - CORE_ADDR cached_code_address = 0; - - /* This is the JIT event breakpoint, or NULL if it has not been - set. */ - - struct breakpoint *jit_breakpoint = nullptr; -}; - -static program_space_key<jit_program_space_data> jit_program_space_key; - -/* Per-objfile structure recording the addresses in the program space. - This object serves two purposes: for ordinary objfiles, it may - cache some symbols related to the JIT interface; and for - JIT-created objfiles, it holds some information about the - jit_code_entry. */ - -struct jit_objfile_data -{ - /* Symbol for __jit_debug_register_code. */ - struct minimal_symbol *register_code; - - /* Symbol for __jit_debug_descriptor. */ - struct minimal_symbol *descriptor; - - /* Address of struct jit_code_entry in this objfile. This is only - non-zero for objfiles that represent code created by the JIT. */ - CORE_ADDR addr; -}; + if (this->jit_breakpoint != nullptr) + delete_breakpoint (this->jit_breakpoint); +} -/* Fetch the jit_objfile_data associated with OBJF. If no data exists +/* Fetch the jiter_objfile_data associated with OBJF. If no data exists yet, make a new structure and attach it. */ -static struct jit_objfile_data * -get_jit_objfile_data (struct objfile *objf) +static jiter_objfile_data * +get_jiter_objfile_data (objfile *objf) { - struct jit_objfile_data *objf_data; - - objf_data = (struct jit_objfile_data *) objfile_data (objf, jit_objfile_data); - if (objf_data == NULL) - { - objf_data = XCNEW (struct jit_objfile_data); - set_objfile_data (objf, jit_objfile_data, objf_data); - } + if (objf->jiter_data == nullptr) + objf->jiter_data.reset (new jiter_objfile_data ()); - return objf_data; + return objf->jiter_data.get (); } /* Remember OBJFILE has been created for struct jit_code_entry located @@ -306,33 +265,18 @@ static void add_objfile_entry (struct objfile *objfile, CORE_ADDR entry) { - struct jit_objfile_data *objf_data; + gdb_assert (objfile->jited_data == nullptr); - objf_data = get_jit_objfile_data (objfile); - objf_data->addr = entry; -} - -/* Return jit_program_space_data for current program space. Allocate - if not already present. */ - -static struct jit_program_space_data * -get_jit_program_space_data () -{ - struct jit_program_space_data *ps_data; - - ps_data = jit_program_space_key.get (current_program_space); - if (ps_data == NULL) - ps_data = jit_program_space_key.emplace (current_program_space); - return ps_data; + objfile->jited_data.reset (new jited_objfile_data (entry)); } /* Helper function for reading the global JIT descriptor from remote - memory. Returns 1 if all went well, 0 otherwise. */ + memory. Returns true if all went well, false otherwise. */ -static int -jit_read_descriptor (struct gdbarch *gdbarch, - struct jit_descriptor *descriptor, - struct jit_program_space_data *ps_data) +static bool +jit_read_descriptor (gdbarch *gdbarch, + jit_descriptor *descriptor, + objfile *jiter) { int err; struct type *ptr_type; @@ -340,19 +284,17 @@ int desc_size; gdb_byte *desc_buf; enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); - struct jit_objfile_data *objf_data; - if (ps_data->objfile == NULL) - return 0; - objf_data = get_jit_objfile_data (ps_data->objfile); - if (objf_data->descriptor == NULL) - return 0; + gdb_assert (jiter != nullptr); + jiter_objfile_data *objf_data = jiter->jiter_data.get (); + gdb_assert (objf_data != nullptr); + + CORE_ADDR addr = MSYMBOL_VALUE_ADDRESS (jiter, objf_data->descriptor); if (jit_debug) fprintf_unfiltered (gdb_stdlog, "jit_read_descriptor, descriptor_addr = %s\n", - paddress (gdbarch, MSYMBOL_VALUE_ADDRESS (ps_data->objfile, - objf_data->descriptor))); + paddress (gdbarch, addr)); /* Figure out how big the descriptor is on the remote and how to read it. */ ptr_type = builtin_type (gdbarch)->builtin_data_ptr; @@ -361,14 +303,12 @@ desc_buf = (gdb_byte *) alloca (desc_size); /* Read the descriptor. */ - err = target_read_memory (MSYMBOL_VALUE_ADDRESS (ps_data->objfile, - objf_data->descriptor), - desc_buf, desc_size); + err = target_read_memory (addr, desc_buf, desc_size); if (err) { printf_unfiltered (_("Unable to read JIT descriptor from " "remote memory\n")); - return 0; + return false; } /* Fix the endianness to match the host. */ @@ -379,7 +319,7 @@ descriptor->first_entry = extract_typed_address (&desc_buf[8 + ptr_size], ptr_type); - return 1; + return true; } /* Helper function for reading a JITed code entry from remote memory. */ @@ -428,48 +368,68 @@ struct gdb_block { - /* gdb_blocks are linked into a tree structure. Next points to the - next node at the same depth as this block and parent to the - parent gdb_block. */ - struct gdb_block *next, *parent; + gdb_block (gdb_block *parent, CORE_ADDR begin, CORE_ADDR end, + const char *name) + : parent (parent), + begin (begin), + end (end), + name (name != nullptr ? xstrdup (name) : nullptr) + {} + + /* The parent of this block. */ + struct gdb_block *parent; /* Points to the "real" block that is being built out of this instance. This block will be added to a blockvector, which will then be added to a symtab. */ - struct block *real_block; + struct block *real_block = nullptr; /* The first and last code address corresponding to this block. */ CORE_ADDR begin, end; /* The name of this block (if any). If this is non-NULL, the FUNCTION symbol symbol is set to this value. */ - const char *name; + gdb::unique_xmalloc_ptr<char> name; }; /* Proxy object for building a symtab. */ struct gdb_symtab { + explicit gdb_symtab (const char *file_name) + : file_name (file_name != nullptr ? file_name : "") + {} + /* The list of blocks in this symtab. These will eventually be - converted to real blocks. */ - struct gdb_block *blocks; + converted to real blocks. + + This is specifically a linked list, instead of, for example, a vector, + because the pointers are returned to the user's debug info reader. So + it's important that the objects don't change location during their + lifetime (which would happen with a vector of objects getting resized). */ + std::forward_list<gdb_block> blocks; /* The number of blocks inserted. */ - int nblocks; + int nblocks = 0; /* A mapping between line numbers to PC. */ - struct linetable *linetable; + gdb::unique_xmalloc_ptr<struct linetable> linetable; /* The source file for this symtab. */ - const char *file_name; - struct gdb_symtab *next; + std::string file_name; }; /* Proxy object for building an object. */ struct gdb_object { - struct gdb_symtab *symtabs; + /* Symtabs of this object. + + This is specifically a linked list, instead of, for example, a vector, + because the pointers are returned to the user's debug info reader. So + it's important that the objects don't change location during their + lifetime (which would happen with a vector of objects getting resized). */ + std::forward_list<gdb_symtab> symtabs; }; /* The type of the `private' data passed around by the callback @@ -501,7 +461,7 @@ /* CB is not required right now, but sometime in the future we might need a handle to it, and we'd like to do that without breaking the ABI. */ - return XCNEW (struct gdb_object); + return new gdb_object; } /* Readers call into this function to open a new gdb_symtab, which, @@ -509,40 +469,13 @@ static struct gdb_symtab * jit_symtab_open_impl (struct gdb_symbol_callbacks *cb, - struct gdb_object *object, - const char *file_name) + struct gdb_object *object, + const char *file_name) { - struct gdb_symtab *ret; - /* CB stays unused. See comment in jit_object_open_impl. */ - ret = XCNEW (struct gdb_symtab); - ret->file_name = file_name ? xstrdup (file_name) : xstrdup (""); - ret->next = object->symtabs; - object->symtabs = ret; - return ret; -} - -/* Returns true if the block corresponding to old should be placed - before the block corresponding to new in the final blockvector. */ - -static int -compare_block (const struct gdb_block *const old, - const struct gdb_block *const newobj) -{ - if (old == NULL) - return 1; - if (old->begin < newobj->begin) - return 1; - else if (old->begin == newobj->begin) - { - if (old->end > newobj->end) - return 1; - else - return 0; - } - else - return 0; + object->symtabs.emplace_front (file_name); + return &object->symtabs.front (); } /* Called by readers to open a new gdb_block. This function also @@ -551,42 +484,15 @@ static struct gdb_block * jit_block_open_impl (struct gdb_symbol_callbacks *cb, - struct gdb_symtab *symtab, struct gdb_block *parent, - GDB_CORE_ADDR begin, GDB_CORE_ADDR end, const char *name) + struct gdb_symtab *symtab, struct gdb_block *parent, + GDB_CORE_ADDR begin, GDB_CORE_ADDR end, const char *name) { - struct gdb_block *block = XCNEW (struct gdb_block); - - block->next = symtab->blocks; - block->begin = (CORE_ADDR) begin; - block->end = (CORE_ADDR) end; - block->name = name ? xstrdup (name) : NULL; - block->parent = parent; - - /* Ensure that the blocks are inserted in the correct (reverse of - the order expected by blockvector). */ - if (compare_block (symtab->blocks, block)) - { - symtab->blocks = block; - } - else - { - struct gdb_block *i = symtab->blocks; - - for (;; i = i->next) - { - /* Guaranteed to terminate, since compare_block (NULL, _) - returns 1. */ - if (compare_block (i->next, block)) - { - block->next = i->next; - i->next = block; - break; - } - } - } + /* Place the block at the beginning of the list, it will be sorted when the + symtab is finalized. */ + symtab->blocks.emplace_front (parent, begin, end, name); symtab->nblocks++; - return block; + return &symtab->blocks.front (); } /* Readers call this to add a line mapping (from PC to line number) to @@ -594,8 +500,8 @@ static void jit_symtab_line_mapping_add_impl (struct gdb_symbol_callbacks *cb, - struct gdb_symtab *stab, int nlines, - struct gdb_line_mapping *map) + struct gdb_symtab *stab, int nlines, + struct gdb_line_mapping *map) { int i; int alloc_len; @@ -605,12 +511,13 @@ alloc_len = sizeof (struct linetable) + (nlines - 1) * sizeof (struct linetable_entry); - stab->linetable = (struct linetable *) xmalloc (alloc_len); + stab->linetable.reset (XNEWVAR (struct linetable, alloc_len)); stab->linetable->nitems = nlines; for (i = 0; i < nlines; i++) { stab->linetable->item[i].pc = (CORE_ADDR) map[i].pc; stab->linetable->item[i].line = map[i].line; + stab->linetable->item[i].is_stmt = 1; } } @@ -619,7 +526,7 @@ static void jit_symtab_close_impl (struct gdb_symbol_callbacks *cb, - struct gdb_symtab *stab) + struct gdb_symtab *stab) { /* Right now nothing needs to be done here. We may need to do some cleanup here in the future (again, without breaking the plugin @@ -632,17 +539,23 @@ finalize_symtab (struct gdb_symtab *stab, struct objfile *objfile) { struct compunit_symtab *cust; - struct gdb_block *gdb_block_iter, *gdb_block_iter_tmp; - struct block *block_iter; - int actual_nblocks, i; size_t blockvector_size; CORE_ADDR begin, end; struct blockvector *bv; - actual_nblocks = FIRST_LOCAL_BLOCK + stab->nblocks; + int actual_nblocks = FIRST_LOCAL_BLOCK + stab->nblocks; + + /* Sort the blocks in the order they should appear in the blockvector. */ + stab->blocks.sort([] (const gdb_block &a, const gdb_block &b) + { + if (a.begin != b.begin) + return a.begin < b.begin; + + return a.end > b.end; + }); - cust = allocate_compunit_symtab (objfile, stab->file_name); - allocate_symtab (cust, stab->file_name); + cust = allocate_compunit_symtab (objfile, stab->file_name.c_str ()); + allocate_symtab (cust, stab->file_name.c_str ()); add_compunit_symtab_to_objfile (cust); /* JIT compilers compile in memory. */ @@ -656,33 +569,32 @@ + sizeof (struct linetable)); SYMTAB_LINETABLE (COMPUNIT_FILETABS (cust)) = (struct linetable *) obstack_alloc (&objfile->objfile_obstack, size); - memcpy (SYMTAB_LINETABLE (COMPUNIT_FILETABS (cust)), stab->linetable, - size); + memcpy (SYMTAB_LINETABLE (COMPUNIT_FILETABS (cust)), + stab->linetable.get (), size); } blockvector_size = (sizeof (struct blockvector) - + (actual_nblocks - 1) * sizeof (struct block *)); + + (actual_nblocks - 1) * sizeof (struct block *)); bv = (struct blockvector *) obstack_alloc (&objfile->objfile_obstack, blockvector_size); COMPUNIT_BLOCKVECTOR (cust) = bv; - /* (begin, end) will contain the PC range this entire blockvector - spans. */ + /* At the end of this function, (begin, end) will contain the PC range this + entire blockvector spans. */ BLOCKVECTOR_MAP (bv) = NULL; - begin = stab->blocks->begin; - end = stab->blocks->end; + begin = stab->blocks.front ().begin; + end = stab->blocks.front ().end; BLOCKVECTOR_NBLOCKS (bv) = actual_nblocks; /* First run over all the gdb_block objects, creating a real block object for each. Simultaneously, keep setting the real_block fields. */ - for (i = (actual_nblocks - 1), gdb_block_iter = stab->blocks; - i >= FIRST_LOCAL_BLOCK; - i--, gdb_block_iter = gdb_block_iter->next) + int block_idx = FIRST_LOCAL_BLOCK; + for (gdb_block &gdb_block_iter : stab->blocks) { struct block *new_block = allocate_block (&objfile->objfile_obstack); - struct symbol *block_name = allocate_symbol (objfile); - struct type *block_type = arch_type (get_objfile_arch (objfile), + struct symbol *block_name = new (&objfile->objfile_obstack) symbol; + struct type *block_type = arch_type (objfile->arch (), TYPE_CODE_VOID, TARGET_CHAR_BIT, "void"); @@ -690,8 +602,8 @@ BLOCK_MULTIDICT (new_block) = mdict_create_linear (&objfile->objfile_obstack, NULL); /* The address range. */ - BLOCK_START (new_block) = (CORE_ADDR) gdb_block_iter->begin; - BLOCK_END (new_block) = (CORE_ADDR) gdb_block_iter->end; + BLOCK_START (new_block) = (CORE_ADDR) gdb_block_iter.begin; + BLOCK_END (new_block) = (CORE_ADDR) gdb_block_iter.end; /* The name. */ SYMBOL_DOMAIN (block_name) = VAR_DOMAIN; @@ -700,23 +612,25 @@ SYMBOL_TYPE (block_name) = lookup_function_type (block_type); SYMBOL_BLOCK_VALUE (block_name) = new_block; - block_name->name = obstack_strdup (&objfile->objfile_obstack, - gdb_block_iter->name); + block_name->m_name = obstack_strdup (&objfile->objfile_obstack, + gdb_block_iter.name.get ()); BLOCK_FUNCTION (new_block) = block_name; - BLOCKVECTOR_BLOCK (bv, i) = new_block; + BLOCKVECTOR_BLOCK (bv, block_idx) = new_block; if (begin > BLOCK_START (new_block)) - begin = BLOCK_START (new_block); + begin = BLOCK_START (new_block); if (end < BLOCK_END (new_block)) - end = BLOCK_END (new_block); + end = BLOCK_END (new_block); - gdb_block_iter->real_block = new_block; + gdb_block_iter.real_block = new_block; + + block_idx++; } /* Now add the special blocks. */ - block_iter = NULL; - for (i = 0; i < FIRST_LOCAL_BLOCK; i++) + struct block *block_iter = NULL; + for (enum block_enum i : { GLOBAL_BLOCK, STATIC_BLOCK }) { struct block *new_block; @@ -739,39 +653,22 @@ /* Fill up the superblock fields for the real blocks, using the real_block fields populated earlier. */ - for (gdb_block_iter = stab->blocks; - gdb_block_iter; - gdb_block_iter = gdb_block_iter->next) + for (gdb_block &gdb_block_iter : stab->blocks) { - if (gdb_block_iter->parent != NULL) + if (gdb_block_iter.parent != NULL) { /* If the plugin specifically mentioned a parent block, we use that. */ - BLOCK_SUPERBLOCK (gdb_block_iter->real_block) = - gdb_block_iter->parent->real_block; + BLOCK_SUPERBLOCK (gdb_block_iter.real_block) = + gdb_block_iter.parent->real_block; } else { /* And if not, we set a default parent block. */ - BLOCK_SUPERBLOCK (gdb_block_iter->real_block) = + BLOCK_SUPERBLOCK (gdb_block_iter.real_block) = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK); } } - - /* Free memory. */ - gdb_block_iter = stab->blocks; - - for (gdb_block_iter = stab->blocks, gdb_block_iter_tmp = gdb_block_iter->next; - gdb_block_iter; - gdb_block_iter = gdb_block_iter_tmp) - { - gdb_block_iter_tmp = gdb_block_iter->next; - xfree ((void *) gdb_block_iter->name); - xfree (gdb_block_iter); - } - xfree (stab->linetable); - xfree ((char *) stab->file_name); - xfree (stab); } /* Called when closing a gdb_objfile. Converts OBJ to a proper @@ -779,26 +676,23 @@ static void jit_object_close_impl (struct gdb_symbol_callbacks *cb, - struct gdb_object *obj) + struct gdb_object *obj) { - struct gdb_symtab *i, *j; struct objfile *objfile; jit_dbg_reader_data *priv_data; priv_data = (jit_dbg_reader_data *) cb->priv_data; - objfile = new struct objfile (NULL, "<< JIT compiled code >>", - OBJF_NOT_FILENAME); + objfile = objfile::make (nullptr, "<< JIT compiled code >>", + OBJF_NOT_FILENAME); objfile->per_bfd->gdbarch = target_gdbarch (); - j = NULL; - for (i = obj->symtabs; i; i = j) - { - j = i->next; - finalize_symtab (i, objfile); - } + for (gdb_symtab &symtab : obj->symtabs) + finalize_symtab (&symtab, objfile); + add_objfile_entry (objfile, *priv_data); - xfree (obj); + + delete obj; } /* Try to read CODE_ENTRY using the loaded jit reader (if any). @@ -807,9 +701,8 @@ static int jit_reader_try_read_symtab (struct jit_code_entry *code_entry, - CORE_ADDR entry_addr) + CORE_ADDR entry_addr) { - gdb_byte *gdb_mem; int status; jit_dbg_reader_data priv_data; struct gdb_reader_funcs *funcs; @@ -832,12 +725,12 @@ if (!loaded_jit_reader) return 0; - gdb_mem = (gdb_byte *) xmalloc (code_entry->symfile_size); + gdb::byte_vector gdb_mem (code_entry->symfile_size); status = 1; try { - if (target_read_memory (code_entry->symfile_addr, gdb_mem, + if (target_read_memory (code_entry->symfile_addr, gdb_mem.data (), code_entry->symfile_size)) status = 0; } @@ -849,15 +742,15 @@ if (status) { funcs = loaded_jit_reader->functions; - if (funcs->read (funcs, &callbacks, gdb_mem, code_entry->symfile_size) - != GDB_SUCCESS) - status = 0; + if (funcs->read (funcs, &callbacks, gdb_mem.data (), + code_entry->symfile_size) + != GDB_SUCCESS) + status = 0; } - xfree (gdb_mem); if (jit_debug && status == 0) fprintf_unfiltered (gdb_stdlog, - "Could not read symtab using the loaded JIT reader.\n"); + "Could not read symtab using the loaded JIT reader.\n"); return status; } @@ -866,8 +759,8 @@ static void jit_bfd_try_read_symtab (struct jit_code_entry *code_entry, - CORE_ADDR entry_addr, - struct gdbarch *gdbarch) + CORE_ADDR entry_addr, + struct gdbarch *gdbarch) { struct bfd_section *sec; struct objfile *objfile; @@ -902,7 +795,7 @@ b = gdbarch_bfd_arch_info (gdbarch); if (b->compatible (b, bfd_get_arch_info (nbfd.get ())) != b) warning (_("JITed object file architecture %s is not compatible " - "with target architecture %s."), + "with target architecture %s."), bfd_get_arch_info (nbfd.get ())->printable_name, b->printable_name); @@ -913,8 +806,8 @@ for (sec = nbfd->sections; sec != NULL; sec = sec->next) if ((bfd_section_flags (sec) & (SEC_ALLOC|SEC_LOAD)) != 0) { - /* We assume that these virtual addresses are absolute, and do not - treat them as offsets. */ + /* We assume that these virtual addresses are absolute, and do not + treat them as offsets. */ sai.emplace_back (bfd_section_vma (sec), bfd_section_name (sec), sec->index); @@ -936,16 +829,16 @@ static void jit_register_code (struct gdbarch *gdbarch, - CORE_ADDR entry_addr, struct jit_code_entry *code_entry) + CORE_ADDR entry_addr, struct jit_code_entry *code_entry) { int success; if (jit_debug) fprintf_unfiltered (gdb_stdlog, - "jit_register_code, symfile_addr = %s, " - "symfile_size = %s\n", - paddress (gdbarch, code_entry->symfile_addr), - pulongest (code_entry->symfile_size)); + "jit_register_code, symfile_addr = %s, " + "symfile_size = %s\n", + paddress (gdbarch, code_entry->symfile_addr), + pulongest (code_entry->symfile_size)); success = jit_reader_try_read_symtab (code_entry, entry_addr); @@ -953,18 +846,6 @@ jit_bfd_try_read_symtab (code_entry, entry_addr, gdbarch); } -/* This function unregisters JITed code and frees the corresponding - objfile. */ - -static void -jit_unregister_code (struct objfile *objfile) -{ - if (jit_debug) - fprintf_unfiltered (gdb_stdlog, "jit_unregister_code (%s)\n", - host_address_to_string (objfile)); - delete objfile; -} - /* Look up the objfile with this code entry address. */ static struct objfile * @@ -972,13 +853,10 @@ { for (objfile *objf : current_program_space->objfiles ()) { - struct jit_objfile_data *objf_data; - - objf_data - = (struct jit_objfile_data *) objfile_data (objf, jit_objfile_data); - if (objf_data != NULL && objf_data->addr == entry_addr) - return objf; + if (objf->jited_data != nullptr && objf->jited_data->addr == entry_addr) + return objf; } + return NULL; } @@ -988,80 +866,84 @@ static void jit_breakpoint_deleted (struct breakpoint *b) { - struct bp_location *iter; - if (b->type != bp_jit_event) return; - for (iter = b->loc; iter != NULL; iter = iter->next) + for (bp_location *iter = b->loc; iter != nullptr; iter = iter->next) { - struct jit_program_space_data *ps_data; - - ps_data = jit_program_space_key.get (iter->pspace); - if (ps_data != NULL && ps_data->jit_breakpoint == iter->owner) + for (objfile *objf : iter->pspace->objfiles ()) { - ps_data->cached_code_address = 0; - ps_data->jit_breakpoint = NULL; + jiter_objfile_data *jiter_data = objf->jiter_data.get (); + + if (jiter_data != nullptr + && jiter_data->jit_breakpoint == iter->owner) + { + jiter_data->cached_code_address = 0; + jiter_data->jit_breakpoint = nullptr; + } } } } -/* (Re-)Initialize the jit breakpoint if necessary. - Return 0 if the jit breakpoint has been successfully initialized. */ +/* (Re-)Initialize the jit breakpoints for JIT-producing objfiles in + PSPACE. */ -static int -jit_breakpoint_re_set_internal (struct gdbarch *gdbarch, - struct jit_program_space_data *ps_data) +static void +jit_breakpoint_re_set_internal (struct gdbarch *gdbarch, program_space *pspace) { - struct bound_minimal_symbol reg_symbol; - struct bound_minimal_symbol desc_symbol; - struct jit_objfile_data *objf_data; - CORE_ADDR addr; - - if (ps_data->objfile == NULL) + for (objfile *the_objfile : pspace->objfiles ()) { + if (the_objfile->skip_jit_symbol_lookup) + continue; + /* Lookup the registration symbol. If it is missing, then we assume we are not attached to a JIT. */ - reg_symbol = lookup_bound_minimal_symbol (jit_break_name); + bound_minimal_symbol reg_symbol + = lookup_minimal_symbol (jit_break_name, nullptr, the_objfile); if (reg_symbol.minsym == NULL || BMSYMBOL_VALUE_ADDRESS (reg_symbol) == 0) - return 1; + { + /* No need to repeat the lookup the next time. */ + the_objfile->skip_jit_symbol_lookup = true; + continue; + } - desc_symbol = lookup_minimal_symbol (jit_descriptor_name, NULL, - reg_symbol.objfile); + bound_minimal_symbol desc_symbol + = lookup_minimal_symbol (jit_descriptor_name, NULL, the_objfile); if (desc_symbol.minsym == NULL || BMSYMBOL_VALUE_ADDRESS (desc_symbol) == 0) - return 1; + { + /* No need to repeat the lookup the next time. */ + the_objfile->skip_jit_symbol_lookup = true; + continue; + } - objf_data = get_jit_objfile_data (reg_symbol.objfile); + jiter_objfile_data *objf_data + = get_jiter_objfile_data (reg_symbol.objfile); objf_data->register_code = reg_symbol.minsym; objf_data->descriptor = desc_symbol.minsym; - ps_data->objfile = reg_symbol.objfile; - } - else - objf_data = get_jit_objfile_data (ps_data->objfile); + CORE_ADDR addr = MSYMBOL_VALUE_ADDRESS (the_objfile, + objf_data->register_code); - addr = MSYMBOL_VALUE_ADDRESS (ps_data->objfile, objf_data->register_code); - - if (jit_debug) - fprintf_unfiltered (gdb_stdlog, - "jit_breakpoint_re_set_internal, " - "breakpoint_addr = %s\n", - paddress (gdbarch, addr)); - - if (ps_data->cached_code_address == addr) - return 0; - - /* Delete the old breakpoint. */ - if (ps_data->jit_breakpoint != NULL) - delete_breakpoint (ps_data->jit_breakpoint); - - /* Put a breakpoint in the registration symbol. */ - ps_data->cached_code_address = addr; - ps_data->jit_breakpoint = create_jit_event_breakpoint (gdbarch, addr); - - return 0; + if (jit_debug) + fprintf_unfiltered (gdb_stdlog, + "jit_breakpoint_re_set_internal, " + "breakpoint_addr = %s\n", + paddress (gdbarch, addr)); + + /* Check if we need to re-create the breakpoint. */ + if (objf_data->cached_code_address == addr) + continue; + + /* Delete the old breakpoint. */ + if (objf_data->jit_breakpoint != nullptr) + delete_breakpoint (objf_data->jit_breakpoint); + + /* Put a breakpoint in the registration symbol. */ + objf_data->cached_code_address = addr; + objf_data->jit_breakpoint = create_jit_event_breakpoint (gdbarch, addr); + } } /* The private data passed around in the frame unwind callback @@ -1081,7 +963,7 @@ static void jit_unwind_reg_set_impl (struct gdb_unwind_callbacks *cb, int dwarf_regnum, - struct gdb_reg_value *value) + struct gdb_reg_value *value) { struct jit_unwind_private *priv; int gdb_reg; @@ -1089,13 +971,13 @@ priv = (struct jit_unwind_private *) cb->priv_data; gdb_reg = gdbarch_dwarf2_reg_to_regnum (get_frame_arch (priv->this_frame), - dwarf_regnum); + dwarf_regnum); if (gdb_reg == -1) { if (jit_debug) - fprintf_unfiltered (gdb_stdlog, - _("Could not recognize DWARF regnum %d"), - dwarf_regnum); + fprintf_unfiltered (gdb_stdlog, + _("Could not recognize DWARF regnum %d"), + dwarf_regnum); value->free (value); return; } @@ -1157,7 +1039,7 @@ static int jit_frame_sniffer (const struct frame_unwind *self, - struct frame_info *this_frame, void **cache) + struct frame_info *this_frame, void **cache) { struct jit_unwind_private *priv_data; struct gdb_unwind_callbacks callbacks; @@ -1187,13 +1069,13 @@ if (funcs->unwind (funcs, &callbacks) == GDB_SUCCESS) { if (jit_debug) - fprintf_unfiltered (gdb_stdlog, _("Successfully unwound frame using " - "JIT reader.\n")); + fprintf_unfiltered (gdb_stdlog, _("Successfully unwound frame using " + "JIT reader.\n")); return 1; } if (jit_debug) fprintf_unfiltered (gdb_stdlog, _("Could not unwind frame using " - "JIT reader.\n")); + "JIT reader.\n")); jit_dealloc_cache (this_frame, *cache); *cache = NULL; @@ -1207,7 +1089,7 @@ static void jit_frame_this_id (struct frame_info *this_frame, void **cache, - struct frame_id *this_id) + struct frame_id *this_id) { struct jit_unwind_private priv; struct gdb_frame_id frame_id; @@ -1300,7 +1182,6 @@ { struct jit_descriptor descriptor; struct jit_code_entry cur_entry; - struct jit_program_space_data *ps_data; CORE_ADDR cur_entry_addr; if (jit_debug) @@ -1308,38 +1189,43 @@ jit_prepend_unwinder (gdbarch); - ps_data = get_jit_program_space_data (); - if (jit_breakpoint_re_set_internal (gdbarch, ps_data) != 0) - return; - - /* Read the descriptor so we can check the version number and load - any already JITed functions. */ - if (!jit_read_descriptor (gdbarch, &descriptor, ps_data)) - return; + jit_breakpoint_re_set_internal (gdbarch, current_program_space); - /* Check that the version number agrees with that we support. */ - if (descriptor.version != 1) + for (objfile *jiter : current_program_space->objfiles ()) { - printf_unfiltered (_("Unsupported JIT protocol version %ld " - "in descriptor (expected 1)\n"), - (long) descriptor.version); - return; - } + if (jiter->jiter_data == nullptr) + continue; + + /* Read the descriptor so we can check the version number and load + any already JITed functions. */ + if (!jit_read_descriptor (gdbarch, &descriptor, jiter)) + continue; - /* If we've attached to a running program, we need to check the descriptor - to register any functions that were already generated. */ - for (cur_entry_addr = descriptor.first_entry; - cur_entry_addr != 0; - cur_entry_addr = cur_entry.next_entry) - { - jit_read_code_entry (gdbarch, cur_entry_addr, &cur_entry); - - /* This hook may be called many times during setup, so make sure we don't - add the same symbol file twice. */ - if (jit_find_objf_with_entry_addr (cur_entry_addr) != NULL) - continue; + /* Check that the version number agrees with that we support. */ + if (descriptor.version != 1) + { + printf_unfiltered (_("Unsupported JIT protocol version %ld " + "in descriptor (expected 1)\n"), + (long) descriptor.version); + continue; + } - jit_register_code (gdbarch, cur_entry_addr, &cur_entry); + /* If we've attached to a running program, we need to check the + descriptor to register any functions that were already + generated. */ + for (cur_entry_addr = descriptor.first_entry; + cur_entry_addr != 0; + cur_entry_addr = cur_entry.next_entry) + { + jit_read_code_entry (gdbarch, cur_entry_addr, &cur_entry); + + /* This hook may be called many times during setup, so make sure + we don't add the same symbol file twice. */ + if (jit_find_objf_with_entry_addr (cur_entry_addr) != NULL) + continue; + + jit_register_code (gdbarch, cur_entry_addr, &cur_entry); + } } } @@ -1365,8 +1251,7 @@ void jit_breakpoint_re_set (void) { - jit_breakpoint_re_set_internal (target_gdbarch (), - get_jit_program_space_data ()); + jit_breakpoint_re_set_internal (target_gdbarch (), current_program_space); } /* This function cleans up any code entries left over when the @@ -1378,77 +1263,58 @@ { for (objfile *objf : current_program_space->objfiles_safe ()) { - struct jit_objfile_data *objf_data - = (struct jit_objfile_data *) objfile_data (objf, jit_objfile_data); - - if (objf_data != NULL && objf_data->addr != 0) - jit_unregister_code (objf); + if (objf->jited_data != nullptr && objf->jited_data->addr != 0) + objf->unlink (); } } void -jit_event_handler (struct gdbarch *gdbarch) +jit_event_handler (gdbarch *gdbarch, objfile *jiter) { struct jit_descriptor descriptor; - struct jit_code_entry code_entry; - CORE_ADDR entry_addr; - struct objfile *objf; + + /* If we get a JIT breakpoint event for this objfile, it is necessarily a + JITer. */ + gdb_assert (jiter->jiter_data != nullptr); /* Read the descriptor from remote memory. */ - if (!jit_read_descriptor (gdbarch, &descriptor, - get_jit_program_space_data ())) + if (!jit_read_descriptor (gdbarch, &descriptor, jiter)) return; - entry_addr = descriptor.relevant_entry; + CORE_ADDR entry_addr = descriptor.relevant_entry; /* Do the corresponding action. */ switch (descriptor.action_flag) { case JIT_NOACTION: break; + case JIT_REGISTER: - jit_read_code_entry (gdbarch, entry_addr, &code_entry); - jit_register_code (gdbarch, entry_addr, &code_entry); - break; + { + jit_code_entry code_entry; + jit_read_code_entry (gdbarch, entry_addr, &code_entry); + jit_register_code (gdbarch, entry_addr, &code_entry); + break; + } + case JIT_UNREGISTER: - objf = jit_find_objf_with_entry_addr (entry_addr); - if (objf == NULL) - printf_unfiltered (_("Unable to find JITed code " - "entry at address: %s\n"), - paddress (gdbarch, entry_addr)); - else - jit_unregister_code (objf); + { + objfile *jited = jit_find_objf_with_entry_addr (entry_addr); + if (jited == nullptr) + printf_unfiltered (_("Unable to find JITed code " + "entry at address: %s\n"), + paddress (gdbarch, entry_addr)); + else + jited->unlink (); + + break; + } - break; default: error (_("Unknown action_flag value in JIT descriptor!")); break; } } -/* Called to free the data allocated to the jit_program_space_data slot. */ - -static void -free_objfile_data (struct objfile *objfile, void *data) -{ - struct jit_objfile_data *objf_data = (struct jit_objfile_data *) data; - - if (objf_data->register_code != NULL) - { - struct jit_program_space_data *ps_data; - - ps_data = jit_program_space_key.get (objfile->pspace); - if (ps_data != NULL && ps_data->objfile == objfile) - { - ps_data->objfile = NULL; - if (ps_data->jit_breakpoint != NULL) - delete_breakpoint (ps_data->jit_breakpoint); - ps_data->cached_code_address = 0; - } - } - - xfree (data); -} - /* Initialize the jit_gdbarch_data slot with an instance of struct jit_gdbarch_data_type */ @@ -1463,11 +1329,12 @@ return data; } +void _initialize_jit (); void -_initialize_jit (void) +_initialize_jit () { jit_reader_dir = relocate_gdb_directory (JIT_READER_DIR, - JIT_READER_DIR_RELOCATABLE); + JIT_READER_DIR_RELOCATABLE); add_setshow_zuinteger_cmd ("jit", class_maintenance, &jit_debug, _("Set JIT debugging."), _("Show JIT debugging."), @@ -1480,8 +1347,6 @@ gdb::observers::inferior_exit.attach (jit_inferior_exit_hook); gdb::observers::breakpoint_deleted.attach (jit_breakpoint_deleted); - jit_objfile_data = - register_objfile_data_with_cleanup (NULL, free_objfile_data); jit_gdbarch_data = gdbarch_data_register_pre_init (jit_gdbarch_data_init); if (is_dl_available ()) { diff -Nru gdb-9.1/gdb/jit.h gdb-10.2/gdb/jit.h --- gdb-9.1/gdb/jit.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/jit.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* JIT declarations for GDB, the GNU Debugger. - Copyright (C) 2009-2020 Free Software Foundation, Inc. + Copyright (C) 2009-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -20,6 +20,9 @@ #ifndef JIT_H #define JIT_H +struct objfile; +struct minimal_symbol; + /* When the JIT breakpoint fires, the inferior wants us to take one of these actions. These values are used by the inferior, so the values of these enums cannot be changed. */ @@ -64,6 +67,41 @@ CORE_ADDR first_entry; }; +/* An objfile that defines the required symbols of the JIT interface has an + instance of this type attached to it. */ + +struct jiter_objfile_data +{ + ~jiter_objfile_data (); + + /* Symbol for __jit_debug_register_code. */ + minimal_symbol *register_code = nullptr; + + /* Symbol for __jit_debug_descriptor. */ + minimal_symbol *descriptor = nullptr; + + /* This is the relocated address of the __jit_debug_register_code function + provided by this objfile. This is used to detect relocations changes + requiring the breakpoint to be re-created. */ + CORE_ADDR cached_code_address = 0; + + /* This is the JIT event breakpoint, or nullptr if it has been deleted. */ + breakpoint *jit_breakpoint = nullptr; +}; + +/* An objfile that is the product of JIT compilation and was registered + using the JIT interface has an instance of this type attached to it. */ + +struct jited_objfile_data +{ + jited_objfile_data (CORE_ADDR addr) + : addr (addr) + {} + + /* Address of struct jit_code_entry for this objfile. */ + CORE_ADDR addr; +}; + /* Looks for the descriptor and registration symbols and breakpoints the registration function. If it finds both, it registers all the already JITed code. If it has already found the symbols, then it @@ -76,8 +114,9 @@ extern void jit_breakpoint_re_set (void); /* This function is called by handle_inferior_event when it decides - that the JIT event breakpoint has fired. */ + that the JIT event breakpoint has fired. JITER is the objfile + whose JIT event breakpoint has been hit. */ -extern void jit_event_handler (struct gdbarch *gdbarch); +extern void jit_event_handler (gdbarch *gdbarch, objfile *jiter); #endif /* JIT_H */ diff -Nru gdb-9.1/gdb/jit-reader.in gdb-10.2/gdb/jit-reader.in --- gdb-9.1/gdb/jit-reader.in 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/jit-reader.in 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* JIT declarations for GDB, the GNU Debugger. - Copyright (C) 2011-2020 Free Software Foundation, Inc. + Copyright (C) 2011-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/language.c gdb-10.2/gdb/language.c --- gdb-9.1/gdb/language.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/language.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Multiple source language support for GDB. - Copyright (C) 1991-2020 Free Software Foundation, Inc. + Copyright (C) 1991-2021 Free Software Foundation, Inc. Contributed by the Department of Computer Science at the State University of New York at Buffalo. @@ -47,24 +47,8 @@ #include <algorithm> #include "gdbarch.h" -static int unk_lang_parser (struct parser_state *); - static void set_range_case (void); -static void unk_lang_emit_char (int c, struct type *type, - struct ui_file *stream, int quoter); - -static void unk_lang_printchar (int c, struct type *type, - struct ui_file *stream); - -static void unk_lang_value_print (struct value *, struct ui_file *, - const struct value_print_options *); - -static CORE_ADDR unk_lang_trampoline (struct frame_info *, CORE_ADDR pc); - -/* Forward declaration */ -extern const struct language_defn unknown_language_defn; - /* The current (default at startup) state of type and range checking. (If the modes are set to "auto", though, these are changed based on the default language at startup, and then again based on the @@ -77,7 +61,7 @@ /* The current language and language_mode (see language.h). */ -const struct language_defn *current_language = &unknown_language_defn; +const struct language_defn *current_language = nullptr; enum language_mode language_mode = language_mode_auto; /* The language that the user expects to be typing in (the language @@ -85,26 +69,9 @@ const struct language_defn *expected_language; -/* The list of supported languages. Keep this in the same order as - the 'enum language' values. */ +/* Define the array containing all languages. */ -static const struct language_defn *languages[] = { - &unknown_language_defn, - &auto_language_defn, - &c_language_defn, - &objc_language_defn, - &cplus_language_defn, - &d_language_defn, - &go_language_defn, - &f_language_defn, - &m2_language_defn, - &asm_language_defn, - &pascal_language_defn, - &opencl_language_defn, - &rust_language_defn, - &minimal_language_defn, - &ada_language_defn, -}; +const struct language_defn *language_defn::languages[nr_languages]; /* The current values of the "set language/range/case-sensitive" enum commands. */ @@ -162,7 +129,7 @@ language = "auto"; /* Search the list of languages for a match. */ - for (const auto &lang : languages) + for (const auto &lang : language_defn::languages) { if (strcmp (lang->la_name, language) == 0) { @@ -377,7 +344,7 @@ enum language prev_language; prev_language = current_language->la_language; - current_language = languages[lang]; + current_language = language_def (lang); set_range_case (); return prev_language; } @@ -410,7 +377,7 @@ int pointer_type (struct type *type) { - return TYPE_CODE (type) == TYPE_CODE_PTR || TYPE_IS_REFERENCE (type); + return type->code () == TYPE_CODE_PTR || TYPE_IS_REFERENCE (type); } @@ -474,7 +441,7 @@ enum language language_enum (const char *str) { - for (const auto &lang : languages) + for (const auto &lang : language_defn::languages) if (strcmp (lang->la_name, str) == 0) return lang->la_language; @@ -489,7 +456,9 @@ const struct language_defn * language_def (enum language lang) { - return languages[lang]; + const struct language_defn *l = language_defn::languages[lang]; + gdb_assert (l != nullptr); + return l; } /* Return the language as a string. */ @@ -497,22 +466,9 @@ const char * language_str (enum language lang) { - return languages[lang]->la_name; + return language_def (lang)->la_name; } -static void -set_check (const char *ignore, int from_tty) -{ - printf_unfiltered ( - "\"set check\" must be followed by the name of a check subcommand.\n"); - help_list (setchecklist, "set check ", all_commands, gdb_stdout); -} - -static void -show_check (const char *ignore, int from_tty) -{ - cmd_show_list (showchecklist, from_tty, ""); -} /* Build and install the "set language LANG" command. */ @@ -525,16 +481,16 @@ /* Build the language names array, to be used as enumeration in the "set language" enum command. +1 for "local" and +1 for NULL termination. */ - language_names = new const char *[ARRAY_SIZE (languages) + 2]; + language_names = new const char *[ARRAY_SIZE (language_defn::languages) + 2]; /* Display "auto", "local" and "unknown" first, and then the rest, alpha sorted. */ const char **language_names_p = language_names; - *language_names_p++ = auto_language_defn.la_name; + *language_names_p++ = language_def (language_auto)->la_name; *language_names_p++ = "local"; - *language_names_p++ = unknown_language_defn.la_name; + *language_names_p++ = language_def (language_unknown)->la_name; const char **sort_begin = language_names_p; - for (const auto &lang : languages) + for (const auto &lang : language_defn::languages) { /* Already handled above. */ if (lang->la_language == language_auto @@ -546,7 +502,7 @@ std::sort (sort_begin, language_names_p, compare_cstrings); /* Add the filename extensions. */ - for (const auto &lang : languages) + for (const auto &lang : language_defn::languages) if (lang->la_filename_extensions != NULL) { for (size_t i = 0; lang->la_filename_extensions[i] != NULL; ++i) @@ -561,7 +517,7 @@ "The currently understood settings are:\n\nlocal or " "auto Automatic setting based on source file")); - for (const auto &lang : languages) + for (const auto &lang : language_defn::languages) { /* Already dealt with these above. */ if (lang->la_language == language_unknown @@ -596,15 +552,12 @@ CORE_ADDR skip_language_trampoline (struct frame_info *frame, CORE_ADDR pc) { - for (const auto &lang : languages) + for (const auto &lang : language_defn::languages) { - if (lang->skip_trampoline != NULL) - { - CORE_ADDR real_pc = lang->skip_trampoline (frame, pc); + CORE_ADDR real_pc = lang->skip_trampoline (frame, pc); - if (real_pc) - return real_pc; - } + if (real_pc != 0) + return real_pc; } return 0; @@ -620,91 +573,147 @@ language_demangle (const struct language_defn *current_language, const char *mangled, int options) { - if (current_language != NULL && current_language->la_demangle) - return current_language->la_demangle (mangled, options); + if (current_language != NULL) + return current_language->demangle (mangled, options); return NULL; } +/* Return information about whether TYPE should be passed + (and returned) by reference at the language level. */ + +struct language_pass_by_ref_info +language_pass_by_reference (struct type *type) +{ + return current_language->pass_by_reference_info (type); +} + +/* Return the default string containing the list of characters + delimiting words. This is a reasonable default value that + most languages should be able to use. */ + +const char * +default_word_break_characters (void) +{ + return " \t\n!@#$%^&*()+=|~`}{[]\"';:?/>.<,-"; +} + /* See language.h. */ -int -language_sniff_from_mangled_name (const struct language_defn *lang, - const char *mangled, char **demangled) +void +language_defn::print_array_index (struct type *index_type, LONGEST index, + struct ui_file *stream, + const value_print_options *options) const { - gdb_assert (lang != NULL); + struct value *index_value = value_from_longest (index_type, index); - if (lang->la_sniff_from_mangled_name == NULL) - { - *demangled = NULL; - return 0; - } + fprintf_filtered (stream, "["); + LA_VALUE_PRINT (index_value, stream, options); + fprintf_filtered (stream, "] = "); +} - return lang->la_sniff_from_mangled_name (mangled, demangled); +/* See language.h. */ + +gdb::unique_xmalloc_ptr<char> +language_defn::watch_location_expression (struct type *type, + CORE_ADDR addr) const +{ + /* Generates an expression that assumes a C like syntax is valid. */ + type = check_typedef (TYPE_TARGET_TYPE (check_typedef (type))); + std::string name = type_to_string (type); + return gdb::unique_xmalloc_ptr<char> + (xstrprintf ("* (%s *) %s", name.c_str (), core_addr_to_string (addr))); } -/* Return class name from physname or NULL. */ -char * -language_class_name_from_physname (const struct language_defn *lang, - const char *physname) +/* See language.h. */ + +void +language_defn::value_print (struct value *val, struct ui_file *stream, + const struct value_print_options *options) const { - if (lang != NULL && lang->la_class_name_from_physname) - return lang->la_class_name_from_physname (physname); - return NULL; + return c_value_print (val, stream, options); } -/* Return non-zero if TYPE should be passed (and returned) by - reference at the language level. */ +/* See language.h. */ + int -language_pass_by_reference (struct type *type) +language_defn::parser (struct parser_state *ps) const { - return current_language->la_pass_by_reference (type); + return c_parse (ps); } -/* Return zero; by default, types are passed by value at the language - level. The target ABI may pass or return some structs by reference - independent of this. */ -int -default_pass_by_reference (struct type *type) +/* See language.h. */ + +void +language_defn::value_print_inner + (struct value *val, struct ui_file *stream, int recurse, + const struct value_print_options *options) const { - return 0; + return c_value_print_inner (val, stream, recurse, options); } -/* Return the default string containing the list of characters - delimiting words. This is a reasonable default value that - most languages should be able to use. */ +/* See language.h. */ -const char * -default_word_break_characters (void) +void +language_defn::emitchar (int ch, struct type *chtype, + struct ui_file * stream, int quoter) const { - return " \t\n!@#$%^&*()+=|~`}{[]\"';:?/>.<,-"; + c_emit_char (ch, chtype, stream, quoter); } -/* Print the index of array elements using the C99 syntax. */ +/* See language.h. */ void -default_print_array_index (struct value *index_value, struct ui_file *stream, - const struct value_print_options *options) +language_defn::printchar (int ch, struct type *chtype, + struct ui_file * stream) const { - fprintf_filtered (stream, "["); - LA_VALUE_PRINT (index_value, stream, options); - fprintf_filtered (stream, "] = "); + c_printchar (ch, chtype, stream); +} + +/* See language.h. */ + +void +language_defn::printstr (struct ui_file *stream, struct type *elttype, + const gdb_byte *string, unsigned int length, + const char *encoding, int force_ellipses, + const struct value_print_options *options) const +{ + c_printstr (stream, elttype, string, length, encoding, force_ellipses, + options); +} + +/* See language.h. */ + +void +language_defn::print_typedef (struct type *type, struct symbol *new_symbol, + struct ui_file *stream) const +{ + c_print_typedef (type, new_symbol, stream); } /* See language.h. */ bool +language_defn::is_string_type_p (struct type *type) const +{ + return c_is_string_type_p (type); +} + +/* The default implementation of the get_symbol_name_matcher_inner method + from the language_defn class. Matches with strncmp_iw. */ + +static bool default_symbol_name_matcher (const char *symbol_search_name, const lookup_name_info &lookup_name, completion_match_result *comp_match_res) { - const std::string &name = lookup_name.name (); + gdb::string_view name = lookup_name.name (); completion_match_for_lcd *match_for_lcd = (comp_match_res != NULL ? &comp_match_res->match_for_lcd : NULL); strncmp_iw_mode mode = (lookup_name.completion_mode () ? strncmp_iw_mode::NORMAL : strncmp_iw_mode::MATCH_PARAMS); - if (strncmp_iw_with_mode (symbol_search_name, name.c_str (), name.size (), + if (strncmp_iw_with_mode (symbol_search_name, name.data (), name.size (), mode, language_minimal, match_for_lcd) == 0) { if (comp_match_res != NULL) @@ -717,111 +726,42 @@ /* See language.h. */ -bool -default_is_string_type_p (struct type *type) -{ - type = check_typedef (type); - while (TYPE_CODE (type) == TYPE_CODE_REF) - { - type = TYPE_TARGET_TYPE (type); - type = check_typedef (type); - } - return (TYPE_CODE (type) == TYPE_CODE_STRING); -} - -/* See language.h. */ - symbol_name_matcher_ftype * -get_symbol_name_matcher (const language_defn *lang, - const lookup_name_info &lookup_name) +language_defn::get_symbol_name_matcher + (const lookup_name_info &lookup_name) const { /* If currently in Ada mode, and the lookup name is wrapped in '<...>', hijack all symbol name comparisons using the Ada matcher, which handles the verbatim matching. */ if (current_language->la_language == language_ada && lookup_name.ada ().verbatim_p ()) - return current_language->la_get_symbol_name_matcher (lookup_name); - - if (lang->la_get_symbol_name_matcher != nullptr) - return lang->la_get_symbol_name_matcher (lookup_name); - return default_symbol_name_matcher; -} - -/* Define the language that is no language. */ - -static int -unk_lang_parser (struct parser_state *ps) -{ - return 1; -} - -static void -unk_lang_emit_char (int c, struct type *type, struct ui_file *stream, - int quoter) -{ - error (_("internal error - unimplemented " - "function unk_lang_emit_char called.")); -} - -static void -unk_lang_printchar (int c, struct type *type, struct ui_file *stream) -{ - error (_("internal error - unimplemented " - "function unk_lang_printchar called.")); -} - -static void -unk_lang_printstr (struct ui_file *stream, struct type *type, - const gdb_byte *string, unsigned int length, - const char *encoding, int force_ellipses, - const struct value_print_options *options) -{ - error (_("internal error - unimplemented " - "function unk_lang_printstr called.")); -} - -static void -unk_lang_print_type (struct type *type, const char *varstring, - struct ui_file *stream, int show, int level, - const struct type_print_options *flags) -{ - error (_("internal error - unimplemented " - "function unk_lang_print_type called.")); -} + return current_language->get_symbol_name_matcher_inner (lookup_name); -static void -unk_lang_val_print (struct type *type, - int embedded_offset, CORE_ADDR address, - struct ui_file *stream, int recurse, - struct value *val, - const struct value_print_options *options) -{ - error (_("internal error - unimplemented " - "function unk_lang_val_print called.")); + return this->get_symbol_name_matcher_inner (lookup_name); } -static void -unk_lang_value_print (struct value *val, struct ui_file *stream, - const struct value_print_options *options) -{ - error (_("internal error - unimplemented " - "function unk_lang_value_print called.")); -} +/* See language.h. */ -static CORE_ADDR unk_lang_trampoline (struct frame_info *frame, CORE_ADDR pc) +symbol_name_matcher_ftype * +language_defn::get_symbol_name_matcher_inner + (const lookup_name_info &lookup_name) const { - return 0; + return default_symbol_name_matcher; } -/* Unknown languages just use the cplus demangler. */ -static char *unk_lang_demangle (const char *mangled, int options) -{ - return gdb_demangle (mangled, options); -} +/* Return true if TYPE is a string type, otherwise return false. This + default implementation only detects TYPE_CODE_STRING. */ -static char *unk_lang_class_name (const char *mangled) +static bool +default_is_string_type_p (struct type *type) { - return NULL; + type = check_typedef (type); + while (type->code () == TYPE_CODE_REF) + { + type = TYPE_TARGET_TYPE (type); + type = check_typedef (type); + } + return (type->code () == TYPE_CODE_STRING); } static const struct op_print unk_op_print_tab[] = @@ -839,7 +779,9 @@ struct type *); } -const struct language_defn unknown_language_defn = +/* Constant data that describes the unknown language. */ + +extern const struct language_data unknown_language_data = { "unknown", "Unknown", @@ -850,47 +792,122 @@ macro_expansion_no, NULL, &exp_descriptor_standard, - unk_lang_parser, - null_post_parser, - unk_lang_printchar, /* Print character constant */ - unk_lang_printstr, - unk_lang_emit_char, - unk_lang_print_type, /* Print a type using appropriate syntax */ - default_print_typedef, /* Print a typedef using appropriate syntax */ - unk_lang_val_print, /* Print a value using appropriate syntax */ - unk_lang_value_print, /* Print a top-level value */ - default_read_var_value, /* la_read_var_value */ - unk_lang_trampoline, /* Language specific skip_trampoline */ "this", /* name_of_this */ true, /* store_sym_names_in_linkage_form_p */ - basic_lookup_symbol_nonlocal, /* lookup_symbol_nonlocal */ - basic_lookup_transparent_type,/* lookup_transparent_type */ - unk_lang_demangle, /* Language specific symbol demangler */ - NULL, - unk_lang_class_name, /* Language specific - class_name_from_physname */ unk_op_print_tab, /* expression operators for printing */ 1, /* c-style arrays */ 0, /* String lower bound */ - default_word_break_characters, - default_collect_symbol_completion_matches, - unknown_language_arch_info, /* la_language_arch_info. */ - default_print_array_index, - default_pass_by_reference, - c_watch_location_expression, - NULL, /* la_get_symbol_name_matcher */ - iterate_over_symbols, - default_search_name_hash, &default_varobj_ops, - NULL, - NULL, - default_is_string_type_p, "{...}" /* la_struct_too_deep_ellipsis */ }; -/* These two structs define fake entries for the "local" and "auto" - options. */ -const struct language_defn auto_language_defn = +/* Class representing the unknown language. */ + +class unknown_language : public language_defn +{ +public: + unknown_language () + : language_defn (language_unknown, unknown_language_data) + { /* Nothing. */ } + + /* See language.h. */ + void language_arch_info (struct gdbarch *gdbarch, + struct language_arch_info *lai) const override + { + unknown_language_arch_info (gdbarch, lai); + } + + /* See language.h. */ + + void print_type (struct type *type, const char *varstring, + struct ui_file *stream, int show, int level, + const struct type_print_options *flags) const override + { + error (_("unimplemented unknown_language::print_type called")); + } + + /* See language.h. */ + + char *demangle (const char *mangled, int options) const override + { + /* The unknown language just uses the C++ demangler. */ + return gdb_demangle (mangled, options); + } + + /* See language.h. */ + + void value_print (struct value *val, struct ui_file *stream, + const struct value_print_options *options) const override + { + error (_("unimplemented unknown_language::value_print called")); + } + + /* See language.h. */ + + void value_print_inner + (struct value *val, struct ui_file *stream, int recurse, + const struct value_print_options *options) const override + { + error (_("unimplemented unknown_language::value_print_inner called")); + } + + /* See language.h. */ + + int parser (struct parser_state *ps) const override + { + /* No parsing is done, just claim success. */ + return 1; + } + + /* See language.h. */ + + void emitchar (int ch, struct type *chtype, + struct ui_file *stream, int quoter) const override + { + error (_("unimplemented unknown_language::emitchar called")); + } + + /* See language.h. */ + + void printchar (int ch, struct type *chtype, + struct ui_file *stream) const override + { + error (_("unimplemented unknown_language::printchar called")); + } + + /* See language.h. */ + + void printstr (struct ui_file *stream, struct type *elttype, + const gdb_byte *string, unsigned int length, + const char *encoding, int force_ellipses, + const struct value_print_options *options) const override + { + error (_("unimplemented unknown_language::printstr called")); + } + + /* See language.h. */ + + void print_typedef (struct type *type, struct symbol *new_symbol, + struct ui_file *stream) const override + { + error (_("unimplemented unknown_language::print_typedef called")); + } + + /* See language.h. */ + + bool is_string_type_p (struct type *type) const override + { + return default_is_string_type_p (type); + } +}; + +/* Single instance of the unknown language class. */ + +static unknown_language unknown_language_defn; + +/* Constant data for the fake "auto" language. */ + +extern const struct language_data auto_language_data = { "auto", "Auto", @@ -901,44 +918,119 @@ macro_expansion_no, NULL, &exp_descriptor_standard, - unk_lang_parser, - null_post_parser, - unk_lang_printchar, /* Print character constant */ - unk_lang_printstr, - unk_lang_emit_char, - unk_lang_print_type, /* Print a type using appropriate syntax */ - default_print_typedef, /* Print a typedef using appropriate syntax */ - unk_lang_val_print, /* Print a value using appropriate syntax */ - unk_lang_value_print, /* Print a top-level value */ - default_read_var_value, /* la_read_var_value */ - unk_lang_trampoline, /* Language specific skip_trampoline */ "this", /* name_of_this */ false, /* store_sym_names_in_linkage_form_p */ - basic_lookup_symbol_nonlocal, /* lookup_symbol_nonlocal */ - basic_lookup_transparent_type,/* lookup_transparent_type */ - unk_lang_demangle, /* Language specific symbol demangler */ - NULL, - unk_lang_class_name, /* Language specific - class_name_from_physname */ unk_op_print_tab, /* expression operators for printing */ 1, /* c-style arrays */ 0, /* String lower bound */ - default_word_break_characters, - default_collect_symbol_completion_matches, - unknown_language_arch_info, /* la_language_arch_info. */ - default_print_array_index, - default_pass_by_reference, - c_watch_location_expression, - NULL, /* la_get_symbol_name_matcher */ - iterate_over_symbols, - default_search_name_hash, &default_varobj_ops, - NULL, - NULL, - default_is_string_type_p, "{...}" /* la_struct_too_deep_ellipsis */ }; +/* Class representing the fake "auto" language. */ + +class auto_language : public language_defn +{ +public: + auto_language () + : language_defn (language_auto, auto_language_data) + { /* Nothing. */ } + + /* See language.h. */ + void language_arch_info (struct gdbarch *gdbarch, + struct language_arch_info *lai) const override + { + unknown_language_arch_info (gdbarch, lai); + } + + /* See language.h. */ + + void print_type (struct type *type, const char *varstring, + struct ui_file *stream, int show, int level, + const struct type_print_options *flags) const override + { + error (_("unimplemented auto_language::print_type called")); + } + + /* See language.h. */ + + char *demangle (const char *mangled, int options) const override + { + /* The auto language just uses the C++ demangler. */ + return gdb_demangle (mangled, options); + } + + /* See language.h. */ + + void value_print (struct value *val, struct ui_file *stream, + const struct value_print_options *options) const override + { + error (_("unimplemented auto_language::value_print called")); + } + + /* See language.h. */ + + void value_print_inner + (struct value *val, struct ui_file *stream, int recurse, + const struct value_print_options *options) const override + { + error (_("unimplemented auto_language::value_print_inner called")); + } + + /* See language.h. */ + + int parser (struct parser_state *ps) const override + { + /* No parsing is done, just claim success. */ + return 1; + } + + /* See language.h. */ + + void emitchar (int ch, struct type *chtype, + struct ui_file *stream, int quoter) const override + { + error (_("unimplemented auto_language::emitchar called")); + } + + /* See language.h. */ + + void printchar (int ch, struct type *chtype, + struct ui_file *stream) const override + { + error (_("unimplemented auto_language::printchar called")); + } + + /* See language.h. */ + + void printstr (struct ui_file *stream, struct type *elttype, + const gdb_byte *string, unsigned int length, + const char *encoding, int force_ellipses, + const struct value_print_options *options) const override + { + error (_("unimplemented auto_language::printstr called")); + } + + /* See language.h. */ + + void print_typedef (struct type *type, struct symbol *new_symbol, + struct ui_file *stream) const override + { + error (_("unimplemented auto_language::print_typedef called")); + } + + /* See language.h. */ + + bool is_string_type_p (struct type *type) const override + { + return default_is_string_type_p (type); + } +}; + +/* Single instance of the fake "auto" language. */ + +static auto_language auto_language_defn; + /* Per-architecture language information. */ @@ -957,12 +1049,12 @@ struct language_gdbarch *l; l = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct language_gdbarch); - for (const auto &lang : languages) - if (lang != NULL && lang->la_language_arch_info != NULL) - { - lang->la_language_arch_info (gdbarch, - l->arch_info + lang->la_language); - } + for (const auto &lang : language_defn::languages) + { + gdb_assert (lang != nullptr); + lang->language_arch_info (gdbarch, + l->arch_info + lang->la_language); + } return l; } @@ -994,7 +1086,7 @@ { struct type *type = SYMBOL_TYPE (sym); - if (type && TYPE_CODE (type) == TYPE_CODE_BOOL) + if (type && type->code () == TYPE_CODE_BOOL) return type; } } @@ -1012,7 +1104,7 @@ for (p = lai->primitive_type_vector; (*p) != NULL; p++) { - if (strcmp (TYPE_NAME (*p), name) == 0) + if (strcmp ((*p)->name (), name) == 0) return p; } return NULL; @@ -1050,10 +1142,11 @@ gdbarch = TYPE_OWNER (type).gdbarch; symbol = new (gdbarch_obstack (gdbarch)) struct symbol (); - symbol->name = TYPE_NAME (type); - symbol->language = lang; + symbol->m_name = type->name (); + symbol->set_language (lang, nullptr); symbol->owner.arch = gdbarch; SYMBOL_OBJFILE_OWNED (symbol) = 0; + SYMBOL_SECTION (symbol) = 0; SYMBOL_TYPE (symbol) = type; SYMBOL_DOMAIN (symbol) = VAR_DOMAIN; SYMBOL_ACLASS_INDEX (symbol) = LOC_TYPEDEF; @@ -1134,8 +1227,9 @@ /* Initialize the language routines. */ +void _initialize_language (); void -_initialize_language (void) +_initialize_language () { static const char *const type_or_range_names[] = { "on", "off", "warn", "auto", NULL }; @@ -1148,15 +1242,15 @@ /* GDB commands for language specific stuff. */ - add_prefix_cmd ("check", no_class, set_check, - _("Set the status of the type/range checker."), - &setchecklist, "set check ", 0, &setlist); + add_basic_prefix_cmd ("check", no_class, + _("Set the status of the type/range checker."), + &setchecklist, "set check ", 0, &setlist); add_alias_cmd ("c", "check", no_class, 1, &setlist); add_alias_cmd ("ch", "check", no_class, 1, &setlist); - add_prefix_cmd ("check", no_class, show_check, - _("Show the status of the type/range checker."), - &showchecklist, "show check ", 0, &showlist); + add_show_prefix_cmd ("check", no_class, + _("Show the status of the type/range checker."), + &showchecklist, "show check ", 0, &showlist); add_alias_cmd ("c", "check", no_class, 1, &showlist); add_alias_cmd ("ch", "check", no_class, 1, &showlist); @@ -1177,6 +1271,11 @@ show_case_command, &setlist, &showlist); + /* In order to call SET_LANGUAGE (below) we need to make sure that + CURRENT_LANGUAGE is not NULL. So first set the language to unknown, + then we can change the language to 'auto'. */ + current_language = language_def (language_unknown); + add_set_language_command (); language = "auto"; diff -Nru gdb-9.1/gdb/language.h gdb-10.2/gdb/language.h --- gdb-9.1/gdb/language.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/language.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Source-language-related definitions for GDB. - Copyright (C) 1991-2020 Free Software Foundation, Inc. + Copyright (C) 1991-2021 Free Software Foundation, Inc. Contributed by the Department of Computer Science at the State University of New York at Buffalo. @@ -128,9 +128,65 @@ struct type *bool_type_default; }; -/* Structure tying together assorted information about a language. */ +/* In a language (particularly C++) a function argument of an aggregate + type (i.e. class/struct/union) may be implicitly passed by reference + even though it is declared a call-by-value argument in the source. + The struct below puts together necessary information for GDB to be + able to detect and carry out pass-by-reference semantics for a + particular type. This type is referred as T in the inlined comments + below. + + The default values of the fields are chosen to give correct semantics + for primitive types and for simple aggregate types, such as + + class T { + int x; + }; */ -struct language_defn +struct language_pass_by_ref_info +{ + /* True if an argument of type T can be passed to a function by value + (i.e. not through an implicit reference). False, otherwise. */ + bool trivially_copyable = true; + + /* True if a copy of a value of type T can be initialized by + memcpy'ing the value bit-by-bit. False, otherwise. + E.g. If T has a user-defined copy ctor, this should be false. */ + bool trivially_copy_constructible = true; + + /* True if a value of type T can be destructed simply by reclaiming + the memory area occupied by the value. False, otherwise. + E.g. If T has a user-defined destructor, this should be false. */ + bool trivially_destructible = true; + + /* True if it is allowed to create a copy of a value of type T. + False, otherwise. + E.g. If T has a deleted copy ctor, this should be false. */ + bool copy_constructible = true; + + /* True if a value of type T can be destructed. False, otherwise. + E.g. If T has a deleted destructor, this should be false. */ + bool destructible = true; +}; + +/* Splitting strings into words. */ +extern const char *default_word_break_characters (void); + +/* Structure tying together assorted information about a language. + + As we move over from the old structure based languages to a class + hierarchy of languages this structure will continue to contain a + mixture of both data and function pointers. + + Once the class hierarchy of languages in place the first task is to + remove the function pointers from this structure and convert them into + member functions on the different language classes. + + The current plan it to keep the constant data that describes a language + in this structure, and have each language pass in an instance of this + structure at construction time. */ + +struct language_data { /* Name of the language. */ @@ -169,94 +225,6 @@ const struct exp_descriptor *la_exp_desc; - /* Parser function. */ - - int (*la_parser) (struct parser_state *); - - /* Given an expression *EXPP created by prefixifying the result of - la_parser, perform any remaining processing necessary to complete - its translation. *EXPP may change; la_post_parser is responsible - for releasing its previous contents, if necessary. If - VOID_CONTEXT_P, then no value is expected from the expression. - If COMPLETING is non-zero, then the expression has been parsed - for completion, not evaluation. */ - - void (*la_post_parser) (expression_up *expp, int void_context_p, - int completing, innermost_block_tracker *tracker); - - void (*la_printchar) (int ch, struct type *chtype, - struct ui_file * stream); - - void (*la_printstr) (struct ui_file * stream, struct type *elttype, - const gdb_byte *string, unsigned int length, - const char *encoding, int force_ellipses, - const struct value_print_options *); - - void (*la_emitchar) (int ch, struct type *chtype, - struct ui_file * stream, int quoter); - - /* Print a type using syntax appropriate for this language. */ - - void (*la_print_type) (struct type *, const char *, struct ui_file *, int, - int, const struct type_print_options *); - - /* Print a typedef using syntax appropriate for this language. - TYPE is the underlying type. NEW_SYMBOL is the symbol naming - the type. STREAM is the output stream on which to print. */ - - void (*la_print_typedef) (struct type *type, struct symbol *new_symbol, - struct ui_file *stream); - - /* Print a value using syntax appropriate for this language. - - TYPE is the type of the sub-object to be printed. - - EMBEDDED_OFFSET is the offset into the outermost object of the - sub-object represented by TYPE. This is the object which this - call should print. Note that the enclosing type is not - available. - - ADDRESS is the address in the inferior of the enclosing object. - - STREAM is the stream on which the value is to be printed. - - RECURSE is the recursion depth. It is zero-based. - - OPTIONS are the formatting options to be used when - printing. */ - - void (*la_val_print) (struct type *type, - int embedded_offset, CORE_ADDR address, - struct ui_file *stream, int recurse, - struct value *val, - const struct value_print_options *options); - - /* Print a top-level value using syntax appropriate for this language. */ - - void (*la_value_print) (struct value *, struct ui_file *, - const struct value_print_options *); - - /* Given a symbol VAR, the corresponding block VAR_BLOCK (if any) and a - stack frame id FRAME, read the value of the variable and return (pointer - to a) struct value containing the value. - - VAR_BLOCK is needed if there's a possibility for VAR to be outside - FRAME. This is what happens if FRAME correspond to a nested function - and VAR is defined in the outer function. If callers know that VAR is - located in FRAME or is global/static, NULL can be passed as VAR_BLOCK. - - Throw an error if the variable cannot be found. */ - - struct value *(*la_read_var_value) (struct symbol *var, - const struct block *var_block, - struct frame_info *frame); - - /* PC is possibly an unknown languages trampoline. - If that PC falls in a trampoline belonging to this language, - return the address of the first pc in the real function, or 0 - if it isn't a language tramp for this language. */ - CORE_ADDR (*skip_trampoline) (struct frame_info *, CORE_ADDR); - /* Now come some hooks for lookup_symbol. */ /* If this is non-NULL, specifies the name that of the implicit @@ -284,41 +252,6 @@ const bool la_store_sym_names_in_linkage_form_p; - /* This is a function that lookup_symbol will call when it gets to - the part of symbol lookup where C looks up static and global - variables. */ - - struct block_symbol (*la_lookup_symbol_nonlocal) - (const struct language_defn *, - const char *, - const struct block *, - const domain_enum); - - /* Find the definition of the type with the given name. */ - struct type *(*la_lookup_transparent_type) (const char *); - - /* Return demangled language symbol, or NULL. */ - char *(*la_demangle) (const char *mangled, int options); - - /* Demangle a symbol according to this language's rules. Unlike - la_demangle, this does not take any options. - - *DEMANGLED will be set by this function. - - If this function returns 0, then *DEMANGLED must always be set - to NULL. - - If this function returns 1, the implementation may set this to - a xmalloc'd string holding the demangled form. However, it is - not required to. The string, if any, is owned by the caller. - - The resulting string should be of the form that will be - installed into a symbol. */ - int (*la_sniff_from_mangled_name) (const char *mangled, char **demangled); - - /* Return class name of a mangled method name or NULL. */ - char *(*la_class_name_from_physname) (const char *physname); - /* Table for printing expressions. */ const struct op_print *la_op_print_tab; @@ -331,119 +264,303 @@ /* Index to use for extracting the first element of a string. */ char string_lower_bound; - /* The list of characters forming word boundaries. */ - const char *(*la_word_break_characters) (void); - - /* Add to the completion tracker all symbols which are possible - completions for TEXT. WORD is the entire command on which the - completion is being made. If CODE is TYPE_CODE_UNDEF, then all - symbols should be examined; otherwise, only STRUCT_DOMAIN - symbols whose type has a code of CODE should be matched. */ - void (*la_collect_symbol_completion_matches) - (completion_tracker &tracker, - complete_symbol_mode mode, - symbol_name_match_type match_type, - const char *text, - const char *word, - enum type_code code); - - /* The per-architecture (OS/ABI) language information. */ - void (*la_language_arch_info) (struct gdbarch *, - struct language_arch_info *); - - /* Print the index of an element of an array. */ - void (*la_print_array_index) (struct value *index_value, - struct ui_file *stream, - const struct value_print_options *options); - - /* Return non-zero if TYPE should be passed (and returned) by - reference at the language level. */ - int (*la_pass_by_reference) (struct type *type); - - /* Return an expression that can be used for a location - watchpoint. TYPE is a pointer type that points to the memory - to watch, and ADDR is the address of the watched memory. */ - gdb::unique_xmalloc_ptr<char> (*la_watch_location_expression) - (struct type *type, CORE_ADDR addr); - - /* Return a pointer to the function that should be used to match a - symbol name against LOOKUP_NAME, according to this language's - rules. The matching algorithm depends on LOOKUP_NAME. For - example, on Ada, the matching algorithm depends on the symbol - name (wild/full/verbatim matching), and on whether we're doing - a normal lookup or a completion match lookup. - - This field may be NULL, in which case - default_symbol_name_matcher is used to perform the - matching. */ - symbol_name_matcher_ftype *(*la_get_symbol_name_matcher) - (const lookup_name_info &); - - /* Find all symbols in the current program space matching NAME in - DOMAIN, according to this language's rules. - - The search is done in BLOCK only. - The caller is responsible for iterating up through superblocks - if desired. - - For each one, call CALLBACK with the symbol. If CALLBACK - returns false, the iteration ends at that point. - - This field may not be NULL. If the language does not need any - special processing here, 'iterate_over_symbols' should be - used as the definition. */ - bool (*la_iterate_over_symbols) - (const struct block *block, const lookup_name_info &name, - domain_enum domain, - gdb::function_view<symbol_found_callback_ftype> callback); - - /* Hash the given symbol search name. Use - default_search_name_hash if no special treatment is - required. */ - unsigned int (*la_search_name_hash) (const char *name); - /* Various operations on varobj. */ const struct lang_varobj_ops *la_varobj_ops; - /* If this language allows compilation from the gdb command line, - this method should be non-NULL. When called it should return - an instance of struct gcc_context appropriate to the language. - When defined this method must never return NULL; instead it - should throw an exception on failure. The returned compiler - instance is owned by its caller and must be deallocated by - calling its 'destroy' method. */ - - compile_instance *(*la_get_compile_instance) (void); - - /* This method must be defined if 'la_get_gcc_context' is defined. - If 'la_get_gcc_context' is not defined, then this method is - ignored. - - This takes the user-supplied text and returns a new bit of code - to compile. - - INST is the compiler instance being used. - INPUT is the user's input text. - GDBARCH is the architecture to use. - EXPR_BLOCK is the block in which the expression is being - parsed. - EXPR_PC is the PC at which the expression is being parsed. */ + /* This string is used by the 'set print max-depth' setting. When GDB + replaces a struct or union (during value printing) that is "too + deep" this string is displayed instead. */ + const char *la_struct_too_deep_ellipsis; + + }; + +/* Base class from which all other language classes derive. */ + +struct language_defn : language_data +{ + language_defn (enum language lang, const language_data &init_data) + : language_data (init_data) + { + /* We should only ever create one instance of each language. */ + gdb_assert (languages[lang] == nullptr); + languages[lang] = this; + } + + /* Print the index of an element of an array. This default + implementation prints using C99 syntax. */ + + virtual void print_array_index (struct type *index_type, + LONGEST index_value, + struct ui_file *stream, + const value_print_options *options) const; + + /* Given a symbol VAR, the corresponding block VAR_BLOCK (if any) and a + stack frame id FRAME, read the value of the variable and return (pointer + to a) struct value containing the value. + + VAR_BLOCK is needed if there's a possibility for VAR to be outside + FRAME. This is what happens if FRAME correspond to a nested function + and VAR is defined in the outer function. If callers know that VAR is + located in FRAME or is global/static, NULL can be passed as VAR_BLOCK. + + Throw an error if the variable cannot be found. */ + + virtual struct value *read_var_value (struct symbol *var, + const struct block *var_block, + struct frame_info *frame) const; + + /* Return information about whether TYPE should be passed + (and returned) by reference at the language level. The default + implementation returns a LANGUAGE_PASS_BY_REF_INFO initialised in its + default state. */ + + virtual struct language_pass_by_ref_info pass_by_reference_info + (struct type *type) const + { + return {}; + } + + /* The per-architecture (OS/ABI) language information. */ + + virtual void language_arch_info (struct gdbarch *, + struct language_arch_info *) const = 0; + + /* Find the definition of the type with the given name. */ + + virtual struct type *lookup_transparent_type (const char *name) const + { + return basic_lookup_transparent_type (name); + } - std::string (*la_compute_program) (compile_instance *inst, + /* Find all symbols in the current program space matching NAME in + DOMAIN, according to this language's rules. + + The search is done in BLOCK only. + The caller is responsible for iterating up through superblocks + if desired. + + For each one, call CALLBACK with the symbol. If CALLBACK + returns false, the iteration ends at that point. + + This field may not be NULL. If the language does not need any + special processing here, 'iterate_over_symbols' should be + used as the definition. */ + virtual bool iterate_over_symbols + (const struct block *block, const lookup_name_info &name, + domain_enum domain, + gdb::function_view<symbol_found_callback_ftype> callback) const + { + return ::iterate_over_symbols (block, name, domain, callback); + } + + /* Return a pointer to the function that should be used to match a + symbol name against LOOKUP_NAME, according to this language's + rules. The matching algorithm depends on LOOKUP_NAME. For + example, on Ada, the matching algorithm depends on the symbol + name (wild/full/verbatim matching), and on whether we're doing + a normal lookup or a completion match lookup. + + As Ada wants to capture symbol matching for all languages in some + cases, then this method is a non-overridable interface. Languages + should override GET_SYMBOL_NAME_MATCHER_INNER if they need to. */ + + symbol_name_matcher_ftype *get_symbol_name_matcher + (const lookup_name_info &lookup_name) const; + + /* If this language allows compilation from the gdb command line, then + this method will return an instance of struct gcc_context appropriate + to the language. If compilation for this language is generally + supported, but something goes wrong then an exception is thrown. The + returned compiler instance is owned by its caller and must be + deallocated by the caller. If compilation is not supported for this + language then this method returns NULL. */ + + virtual compile_instance *get_compile_instance () const + { + return nullptr; + } + + /* This method must be overridden if 'get_compile_instance' is + overridden. + + This takes the user-supplied text and returns a new bit of code + to compile. + + INST is the compiler instance being used. + INPUT is the user's input text. + GDBARCH is the architecture to use. + EXPR_BLOCK is the block in which the expression is being + parsed. + EXPR_PC is the PC at which the expression is being parsed. */ + + virtual std::string compute_program (compile_instance *inst, const char *input, struct gdbarch *gdbarch, const struct block *expr_block, - CORE_ADDR expr_pc); + CORE_ADDR expr_pc) const + { + gdb_assert_not_reached ("language_defn::compute_program"); + } - /* Return true if TYPE is a string type. */ - bool (*la_is_string_type_p) (struct type *type); + /* Hash the given symbol search name. */ + virtual unsigned int search_name_hash (const char *name) const; - /* This string is used by the 'set print max-depth' setting. When GDB - replaces a struct or union (during value printing) that is "too - deep" this string is displayed instead. */ - const char *la_struct_too_deep_ellipsis; + /* Demangle a symbol according to this language's rules. Unlike + la_demangle, this does not take any options. - }; + *DEMANGLED will be set by this function. + + If this function returns false, then *DEMANGLED must always be set + to NULL. + + If this function returns true, the implementation may set this to + a xmalloc'd string holding the demangled form. However, it is + not required to. The string, if any, is owned by the caller. + + The resulting string should be of the form that will be + installed into a symbol. */ + virtual bool sniff_from_mangled_name (const char *mangled, + char **demangled) const + { + *demangled = nullptr; + return false; + } + + /* Return demangled language symbol version of MANGLED, or NULL. */ + virtual char *demangle (const char *mangled, int options) const + { + return nullptr; + } + + /* Print a type using syntax appropriate for this language. */ + + virtual void print_type (struct type *, const char *, struct ui_file *, int, + int, const struct type_print_options *) const = 0; + + /* PC is possibly an unknown languages trampoline. + If that PC falls in a trampoline belonging to this language, return + the address of the first pc in the real function, or 0 if it isn't a + language tramp for this language. */ + virtual CORE_ADDR skip_trampoline (struct frame_info *fi, CORE_ADDR pc) const + { + return (CORE_ADDR) 0; + } + + /* Return class name of a mangled method name or NULL. */ + virtual char *class_name_from_physname (const char *physname) const + { + return nullptr; + } + + /* The list of characters forming word boundaries. */ + virtual const char *word_break_characters (void) const + { + return default_word_break_characters (); + } + + /* Add to the completion tracker all symbols which are possible + completions for TEXT. WORD is the entire command on which the + completion is being made. If CODE is TYPE_CODE_UNDEF, then all + symbols should be examined; otherwise, only STRUCT_DOMAIN symbols + whose type has a code of CODE should be matched. */ + + virtual void collect_symbol_completion_matches + (completion_tracker &tracker, + complete_symbol_mode mode, + symbol_name_match_type name_match_type, + const char *text, + const char *word, + enum type_code code) const + { + return default_collect_symbol_completion_matches_break_on + (tracker, mode, name_match_type, text, word, "", code); + } + + /* This is a function that lookup_symbol will call when it gets to + the part of symbol lookup where C looks up static and global + variables. This default implements the basic C lookup rules. */ + + virtual struct block_symbol lookup_symbol_nonlocal + (const char *name, + const struct block *block, + const domain_enum domain) const; + + /* Return an expression that can be used for a location + watchpoint. TYPE is a pointer type that points to the memory + to watch, and ADDR is the address of the watched memory. */ + virtual gdb::unique_xmalloc_ptr<char> watch_location_expression + (struct type *type, CORE_ADDR addr) const; + + /* List of all known languages. */ + static const struct language_defn *languages[nr_languages]; + + /* Print a top-level value using syntax appropriate for this language. */ + virtual void value_print (struct value *val, struct ui_file *stream, + const struct value_print_options *options) const; + + /* Print a value using syntax appropriate for this language. RECURSE is + the recursion depth. It is zero-based. */ + virtual void value_print_inner + (struct value *val, struct ui_file *stream, int recurse, + const struct value_print_options *options) const; + + /* Parser function. */ + + virtual int parser (struct parser_state *ps) const; + + /* Given an expression *EXPP created by prefixifying the result of + la_parser, perform any remaining processing necessary to complete its + translation. *EXPP may change; la_post_parser is responsible for + releasing its previous contents, if necessary. If VOID_CONTEXT_P, + then no value is expected from the expression. If COMPLETING is + non-zero, then the expression has been parsed for completion, not + evaluation. */ + + virtual void post_parser (expression_up *expp, int void_context_p, + int completing, + innermost_block_tracker *tracker) const + { + /* By default the post-parser does nothing. */ + } + + /* Print the character CH (of type CHTYPE) on STREAM as part of the + contents of a literal string whose delimiter is QUOTER. */ + + virtual void emitchar (int ch, struct type *chtype, + struct ui_file *stream, int quoter) const; + + virtual void printchar (int ch, struct type *chtype, + struct ui_file * stream) const; + +/* Print the character string STRING, printing at most LENGTH characters. + Printing stops early if the number hits print_max; repeat counts + are printed as appropriate. Print ellipses at the end if we + had to stop before printing LENGTH characters, or if FORCE_ELLIPSES. */ + + virtual void printstr (struct ui_file *stream, struct type *elttype, + const gdb_byte *string, unsigned int length, + const char *encoding, int force_ellipses, + const struct value_print_options *options) const; + + + /* Print a typedef using syntax appropriate for this language. + TYPE is the underlying type. NEW_SYMBOL is the symbol naming + the type. STREAM is the output stream on which to print. */ + + virtual void print_typedef (struct type *type, struct symbol *new_symbol, + struct ui_file *stream) const; + + /* Return true if TYPE is a string type. */ + virtual bool is_string_type_p (struct type *type) const; + +protected: + + /* This is the overridable part of the GET_SYMBOL_NAME_MATCHER method. + See that method for a description of the arguments. */ + + virtual symbol_name_matcher_ftype *get_symbol_name_matcher_inner + (const lookup_name_info &lookup_name) const; +}; /* Pointer to the language_defn for our current language. This pointer always points to *some* valid struct; it can be used without checking @@ -529,27 +646,28 @@ with the "set language" command. */ #define LA_PRINT_TYPE(type,varstring,stream,show,level,flags) \ - (current_language->la_print_type(type,varstring,stream,show,level,flags)) + (current_language->print_type(type,varstring,stream,show,level,flags)) #define LA_PRINT_TYPEDEF(type,new_symbol,stream) \ - (current_language->la_print_typedef(type,new_symbol,stream)) + (current_language->print_typedef (type,new_symbol,stream)) #define LA_VALUE_PRINT(val,stream,options) \ - (current_language->la_value_print(val,stream,options)) + (current_language->value_print (val,stream,options)) #define LA_PRINT_CHAR(ch, type, stream) \ - (current_language->la_printchar(ch, type, stream)) + (current_language->printchar (ch, type, stream)) #define LA_PRINT_STRING(stream, elttype, string, length, encoding, force_ellipses, options) \ - (current_language->la_printstr(stream, elttype, string, length, \ - encoding, force_ellipses,options)) + (current_language->printstr (stream, elttype, string, length, \ + encoding, force_ellipses,options)) #define LA_EMIT_CHAR(ch, type, stream, quoter) \ - (current_language->la_emitchar(ch, type, stream, quoter)) + (current_language->emitchar (ch, type, stream, quoter)) -#define LA_PRINT_ARRAY_INDEX(index_value, stream, options) \ - (current_language->la_print_array_index(index_value, stream, options)) +#define LA_PRINT_ARRAY_INDEX(index_type, index_value, stream, options) \ + (current_language->print_array_index(index_type, index_value, stream, \ + options)) #define LA_ITERATE_OVER_SYMBOLS(BLOCK, NAME, DOMAIN, CALLBACK) \ - (current_language->la_iterate_over_symbols (BLOCK, NAME, DOMAIN, CALLBACK)) + (current_language->iterate_over_symbols (BLOCK, NAME, DOMAIN, CALLBACK)) /* Test a character to decide whether it can be printed in literal form or needs to be printed in another representation. For example, @@ -566,10 +684,6 @@ extern int pointer_type (struct type *); -/* Return true if TYPE is a string type, otherwise return false. This - default implementation only detects TYPE_CODE_STRING. */ -extern bool default_is_string_type_p (struct type *type); - /* Error messages */ extern void range_error (const char *, ...) ATTRIBUTE_PRINTF (1, 2); @@ -594,58 +708,15 @@ extern char *language_demangle (const struct language_defn *current_language, const char *mangled, int options); -/* A wrapper for la_sniff_from_mangled_name. The arguments and result - are as for the method. */ - -extern int language_sniff_from_mangled_name (const struct language_defn *lang, - const char *mangled, - char **demangled); - -/* Return class name from physname, or NULL. */ -extern char *language_class_name_from_physname (const struct language_defn *, - const char *physname); - -/* Splitting strings into words. */ -extern const char *default_word_break_characters (void); - -/* Print the index of an array element using the C99 syntax. */ -extern void default_print_array_index (struct value *index_value, - struct ui_file *stream, - const struct value_print_options *options); - -/* Return non-zero if TYPE should be passed (and returned) by - reference at the language level. */ -int language_pass_by_reference (struct type *type); - -/* Return zero; by default, types are passed by value at the language - level. The target ABI may pass or return some structs by reference - independent of this. */ -int default_pass_by_reference (struct type *type); - -/* The default implementation of la_print_typedef. */ -void default_print_typedef (struct type *type, struct symbol *new_symbol, - struct ui_file *stream); - -/* Default name hashing function. */ - -/* Produce an unsigned hash value from SEARCH_NAME that is consistent - with strcmp_iw, strcmp, and, at least on Ada symbols, wild_match. - That is, two identifiers equivalent according to any of those three - comparison operators hash to the same value. */ -extern unsigned int default_search_name_hash (const char *search_name); +/* Return information about whether TYPE should be passed + (and returned) by reference at the language level. */ +struct language_pass_by_ref_info language_pass_by_reference (struct type *type); void c_get_string (struct value *value, gdb::unique_xmalloc_ptr<gdb_byte> *buffer, int *length, struct type **char_type, const char **charset); -/* The default implementation of la_symbol_name_matcher. Matches with - strncmp_iw. */ -extern bool default_symbol_name_matcher - (const char *symbol_search_name, - const lookup_name_info &lookup_name, - completion_match_result *comp_match_res); - /* Get LANG's symbol_name_matcher method for LOOKUP_NAME. Returns default_symbol_name_matcher if not set. LANG is used as a hint; the function may ignore it depending on the current language and @@ -654,25 +725,6 @@ symbol_name_matcher_ftype *get_symbol_name_matcher (const language_defn *lang, const lookup_name_info &lookup_name); -/* The languages supported by GDB. */ - -extern const struct language_defn auto_language_defn; -extern const struct language_defn unknown_language_defn; -extern const struct language_defn minimal_language_defn; - -extern const struct language_defn ada_language_defn; -extern const struct language_defn asm_language_defn; -extern const struct language_defn c_language_defn; -extern const struct language_defn cplus_language_defn; -extern const struct language_defn d_language_defn; -extern const struct language_defn f_language_defn; -extern const struct language_defn go_language_defn; -extern const struct language_defn m2_language_defn; -extern const struct language_defn objc_language_defn; -extern const struct language_defn opencl_language_defn; -extern const struct language_defn pascal_language_defn; -extern const struct language_defn rust_language_defn; - /* Save the current language and restore it upon destruction. */ class scoped_restore_current_language @@ -715,7 +767,7 @@ { m_lang = current_language->la_language; m_switched = true; - set_language (SYMBOL_LANGUAGE (sym)); + set_language (sym->language ()); } else { diff -Nru gdb-9.1/gdb/libiberty.m4 gdb-10.2/gdb/libiberty.m4 --- gdb-9.1/gdb/libiberty.m4 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/libiberty.m4 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ dnl Bits libiberty clients must do on their autoconf step. dnl -dnl Copyright (C) 2012-2020 Free Software Foundation, Inc. +dnl Copyright (C) 2012-2021 Free Software Foundation, Inc. dnl dnl This file is free software; you can redistribute it and/or modify dnl it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/linespec.c gdb-10.2/gdb/linespec.c --- gdb-9.1/gdb/linespec.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/linespec.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Parser for linespec for the GNU debugger, GDB. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -1133,58 +1133,56 @@ struct program_space *search_pspace, bool include_inline, gdb::function_view<symbol_found_callback_ftype> callback) { - struct program_space *pspace; - - ALL_PSPACES (pspace) - { - if (search_pspace != NULL && search_pspace != pspace) - continue; - if (pspace->executing_startup) - continue; + for (struct program_space *pspace : program_spaces) + { + if (search_pspace != NULL && search_pspace != pspace) + continue; + if (pspace->executing_startup) + continue; - set_current_program_space (pspace); + set_current_program_space (pspace); - for (objfile *objfile : current_program_space->objfiles ()) - { - if (objfile->sf) - objfile->sf->qf->expand_symtabs_matching (objfile, - NULL, - lookup_name, - NULL, NULL, - search_domain); + for (objfile *objfile : current_program_space->objfiles ()) + { + if (objfile->sf) + objfile->sf->qf->expand_symtabs_matching (objfile, + NULL, + &lookup_name, + NULL, NULL, + search_domain); - for (compunit_symtab *cu : objfile->compunits ()) - { - struct symtab *symtab = COMPUNIT_FILETABS (cu); + for (compunit_symtab *cu : objfile->compunits ()) + { + struct symtab *symtab = COMPUNIT_FILETABS (cu); - iterate_over_file_blocks (symtab, lookup_name, name_domain, - callback); + iterate_over_file_blocks (symtab, lookup_name, name_domain, + callback); - if (include_inline) - { - const struct block *block; - int i; + if (include_inline) + { + const struct block *block; + int i; - for (i = FIRST_LOCAL_BLOCK; - i < BLOCKVECTOR_NBLOCKS (SYMTAB_BLOCKVECTOR (symtab)); - i++) - { - block = BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (symtab), i); - state->language->la_iterate_over_symbols - (block, lookup_name, name_domain, - [&] (block_symbol *bsym) - { - /* Restrict calls to CALLBACK to symbols - representing inline symbols only. */ - if (SYMBOL_INLINED (bsym->symbol)) - return callback (bsym); - return true; - }); - } - } - } - } - } + for (i = FIRST_LOCAL_BLOCK; + i < BLOCKVECTOR_NBLOCKS (SYMTAB_BLOCKVECTOR (symtab)); + i++) + { + block = BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (symtab), i); + state->language->iterate_over_symbols + (block, lookup_name, name_domain, + [&] (block_symbol *bsym) + { + /* Restrict calls to CALLBACK to symbols + representing inline symbols only. */ + if (SYMBOL_INLINED (bsym->symbol)) + return callback (bsym); + return true; + }); + } + } + } + } + } } /* Returns the block to be used for symbol searches from @@ -1224,7 +1222,7 @@ std::vector<struct type *> *superclasses) { int ibase; - const char *class_name = TYPE_NAME (t); + const char *class_name = t->name (); /* Ignore this class if it doesn't have a name. This is ugly, but unless we figure out how to get the physname without the name of @@ -1234,7 +1232,7 @@ int method_counter; lookup_name_info lookup_name (name, symbol_name_match_type::FULL); symbol_name_matcher_ftype *symbol_name_compare - = get_symbol_name_matcher (language_def (t_lang), lookup_name); + = language_def (t_lang)->get_symbol_name_matcher (lookup_name); t = check_typedef (t); @@ -2291,7 +2289,7 @@ if (MSYMBOL_TYPE (elem.minsym) == mst_data_gnu_ifunc) { struct gdbarch *gdbarch - = get_objfile_arch (elem.objfile); + = elem.objfile->arch (); msym_addr = (gdbarch_convert_from_func_ptr_addr (gdbarch, @@ -3203,7 +3201,7 @@ /* See linespec.h. */ void -decode_line_full (const struct event_location *location, int flags, +decode_line_full (struct event_location *location, int flags, struct program_space *search_pspace, struct symtab *default_symtab, int default_line, struct linespec_result *canonical, @@ -3232,6 +3230,10 @@ location); state = PARSER_STATE (&parser); + if (result.size () == 0) + throw_error (NOT_SUPPORTED_ERROR, _("Location %s not available"), + event_location_to_string (location)); + gdb_assert (result.size () == 1 || canonical->pre_expanded); canonical->pre_expanded = 1; @@ -3493,9 +3495,9 @@ t = SYMBOL_TYPE (sym); t = check_typedef (t); - if (TYPE_CODE (t) != TYPE_CODE_STRUCT - && TYPE_CODE (t) != TYPE_CODE_UNION - && TYPE_CODE (t) != TYPE_CODE_NAMESPACE) + if (t->code () != TYPE_CODE_STRUCT + && t->code () != TYPE_CODE_UNION + && t->code () != TYPE_CODE_NAMESPACE) return true; /* Continue iterating. */ slot = htab_find_slot (m_unique_syms, sym, INSERT); @@ -3670,12 +3672,12 @@ because we collect data across the program space before deciding what to do. */ last_result_len = 0; - unsigned int ix = 0; for (const auto &elt : *sym_classes) { struct type *t; struct program_space *pspace; struct symbol *sym = elt.symbol; + unsigned int ix = &elt - &*sym_classes->begin (); /* Program spaces that are executing startup should have been filtered out earlier. */ @@ -3683,7 +3685,7 @@ gdb_assert (!pspace->executing_startup); set_current_program_space (pspace); t = check_typedef (SYMBOL_TYPE (sym)); - find_methods (t, SYMBOL_LANGUAGE (sym), + find_methods (t, sym->language (), method_name, &result_names, &superclass_vec); /* Handle all items from a single program space at once; and be @@ -3696,7 +3698,7 @@ this program space, consider superclasses. */ if (result_names.size () == last_result_len) find_superclass_methods (std::move (superclass_vec), method_name, - SYMBOL_LANGUAGE (sym), &result_names); + sym->language (), &result_names); /* We have a list of candidate symbol names, so now we iterate over the symbol tables looking for all @@ -3706,7 +3708,6 @@ superclass_vec.clear (); last_result_len = result_names.size (); - ++ix; } } @@ -3787,9 +3788,7 @@ /* Find that file's data. */ if (search_pspace == NULL) { - struct program_space *pspace; - - ALL_PSPACES (pspace) + for (struct program_space *pspace : program_spaces) { if (pspace->executing_startup) continue; @@ -3899,9 +3898,10 @@ std::vector <block_symbol> *symbols, std::vector<bound_minimal_symbol> *minsyms) { - std::string canon = cp_canonicalize_string_no_typedefs (lookup_name); - if (!canon.empty ()) - lookup_name = canon.c_str (); + gdb::unique_xmalloc_ptr<char> canon + = cp_canonicalize_string_no_typedefs (lookup_name); + if (canon != nullptr) + lookup_name = canon.get (); /* It's important to not call expand_symtabs_matching unnecessarily as it can really slow things down (by unnecessarily expanding @@ -3998,7 +3998,7 @@ ALL_BLOCK_SYMBOLS (block, iter, sym) { - if (symbol_matches_domain (SYMBOL_LANGUAGE (sym), + if (symbol_matches_domain (sym->language (), SYMBOL_DOMAIN (sym), LABEL_DOMAIN) && cmp (sym->search_name (), name, name_len) == 0) { @@ -4168,7 +4168,7 @@ sscanf ((variable[1] == '$') ? variable + 2 : variable + 1, "%d", &index); val_history = access_value_history ((variable[1] == '$') ? -index : index); - if (TYPE_CODE (value_type (val_history)) != TYPE_CODE_INT) + if (value_type (val_history)->code () != TYPE_CODE_INT) error (_("History values used in line " "specs must have integer values.")); offset.offset = value_as_long (val_history); @@ -4335,29 +4335,27 @@ if (symtab == NULL) { - struct program_space *pspace; - - ALL_PSPACES (pspace) - { - if (search_pspace != NULL && search_pspace != pspace) - continue; - if (pspace->executing_startup) - continue; + for (struct program_space *pspace : program_spaces) + { + if (search_pspace != NULL && search_pspace != pspace) + continue; + if (pspace->executing_startup) + continue; - set_current_program_space (pspace); + set_current_program_space (pspace); - for (objfile *objfile : current_program_space->objfiles ()) - { - iterate_over_minimal_symbols (objfile, name, - [&] (struct minimal_symbol *msym) - { - add_minsym (msym, objfile, nullptr, - info->state->list_mode, - &minsyms); - return false; - }); - } - } + for (objfile *objfile : current_program_space->objfiles ()) + { + iterate_over_minimal_symbols (objfile, name, + [&] (struct minimal_symbol *msym) + { + add_minsym (msym, objfile, nullptr, + info->state->list_mode, + &minsyms); + return false; + }); + } + } } else { diff -Nru gdb-9.1/gdb/linespec.h gdb-10.2/gdb/linespec.h --- gdb-9.1/gdb/linespec.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/linespec.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Header for GDB line completion. - Copyright (C) 2000-2020 Free Software Foundation, Inc. + Copyright (C) 2000-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -124,7 +124,7 @@ strcmp sense) to FILTER will be returned; all others will be filtered out. */ -extern void decode_line_full (const struct event_location *location, int flags, +extern void decode_line_full (struct event_location *location, int flags, struct program_space *search_pspace, struct symtab *default_symtab, int default_line, struct linespec_result *canonical, diff -Nru gdb-9.1/gdb/linux-fork.c gdb-10.2/gdb/linux-fork.c --- gdb-9.1/gdb/linux-fork.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/linux-fork.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* GNU/Linux native-dependent code for debugging multiple forks. - Copyright (C) 2005-2020 Free Software Foundation, Inc. + Copyright (C) 2005-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -61,8 +61,8 @@ if (savedregs) delete savedregs; - if (filepos) - xfree (filepos); + + xfree (filepos); } ptid_t ptid = null_ptid; @@ -110,8 +110,7 @@ static bool one_fork_p () { - return (!fork_list.empty () - && &fork_list.front () == &fork_list.back ()); + return fork_list.size () == 1; } /* Add a new fork to the internal fork list. */ @@ -215,7 +214,6 @@ static void fork_load_infrun_state (struct fork_info *fp) { - extern void nullify_last_target_wait_ptid (); int i; linux_nat_switch_fork (fp->ptid); @@ -520,7 +518,7 @@ list, waitpid the ptid. If fi->parent_ptid is a part of lwp and it is stopped, waitpid the ptid. */ - thread_info *parent = find_thread_ptid (pptid); + thread_info *parent = find_thread_ptid (linux_target, pptid); if ((parent == NULL && find_fork_ptid (pptid)) || (parent != NULL && parent->state == THREAD_STOPPED)) { @@ -665,7 +663,7 @@ if (!fork_fn) error (_("checkpoint: can't find fork function in inferior.")); - gdbarch = get_objfile_arch (fork_objf); + gdbarch = fork_objf->arch (); ret = value_from_longest (builtin_type (gdbarch)->builtin_int, 0); /* Tell linux-nat.c that we're checkpointing this inferior. */ @@ -680,7 +678,7 @@ error (_("checkpoint: call_function_by_hand returned null.")); retpid = value_as_long (ret); - get_last_target_status (&last_target_ptid, &last_target_waitstatus); + get_last_target_status (nullptr, &last_target_ptid, &last_target_waitstatus); fp = find_fork_pid (retpid); @@ -752,8 +750,9 @@ linux_fork_context (fp, from_tty); } +void _initialize_linux_fork (); void -_initialize_linux_fork (void) +_initialize_linux_fork () { /* Checkpoint command: create a fork of the inferior process and set it aside for later debugging. */ diff -Nru gdb-9.1/gdb/linux-fork.h gdb-10.2/gdb/linux-fork.h --- gdb-9.1/gdb/linux-fork.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/linux-fork.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* GNU/Linux native-dependent code for debugging multiple forks. - Copyright (C) 2005-2020 Free Software Foundation, Inc. + Copyright (C) 2005-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/linux-nat.c gdb-10.2/gdb/linux-nat.c --- gdb-9.1/gdb/linux-nat.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/linux-nat.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* GNU/Linux native-dependent code common to multiple platforms. - Copyright (C) 2001-2020 Free Software Foundation, Inc. + Copyright (C) 2001-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -47,7 +47,7 @@ #include <sys/stat.h> /* for struct stat */ #include <fcntl.h> /* for O_RDONLY */ #include "inf-loop.h" -#include "event-loop.h" +#include "gdbsupport/event-loop.h" #include "event-top.h" #include <pwd.h> #include <sys/types.h> @@ -68,6 +68,7 @@ #include "gdbsupport/fileio.h" #include "gdbsupport/scope-exit.h" #include "gdbsupport/gdb-sigmask.h" +#include "debug.h" /* This comment documents high-level logic of this file. @@ -198,13 +199,30 @@ value); } +/* Print a debug statement. Should be used through linux_nat_debug_printf. */ + +static void ATTRIBUTE_PRINTF (2, 3) +linux_nat_debug_printf_1 (const char *func_name, const char *fmt, ...) +{ + va_list ap; + va_start (ap, fmt); + debug_prefixed_vprintf ("linux-nat", func_name, fmt, ap); + va_end (ap); +} + +#define linux_nat_debug_printf(fmt, ...) \ + do { \ + if (debug_linux_nat) \ + linux_nat_debug_printf_1 (__func__, fmt, ##__VA_ARGS__); \ + } while (0) + struct simple_pid_list { int pid; int status; struct simple_pid_list *next; }; -struct simple_pid_list *stopped_pids; +static struct simple_pid_list *stopped_pids; /* Whether target_thread_events is in effect. */ static int report_thread_events; @@ -440,8 +458,8 @@ ptid of the followed inferior. At return, inferior_ptid will be unchanged. */ -int -linux_nat_target::follow_fork (int follow_child, int detach_fork) +bool +linux_nat_target::follow_fork (bool follow_child, bool detach_fork) { if (!follow_child) { @@ -515,9 +533,12 @@ } else { - scoped_restore save_inferior_ptid - = make_scoped_restore (&inferior_ptid); - inferior_ptid = child_ptid; + /* Switching inferior_ptid is not enough, because then + inferior_thread () would crash by not finding the thread + in the current inferior. */ + scoped_restore_current_thread restore_current_thread; + thread_info *child = find_thread_ptid (this, child_ptid); + switch_to_thread (child); /* Let the thread_db layer learn about this new process. */ check_for_thread_db (); @@ -532,10 +553,8 @@ if (linux_supports_tracevforkdone ()) { - if (debug_linux_nat) - fprintf_unfiltered (gdb_stdlog, - "LCFF: waiting for VFORK_DONE on %d\n", - parent_pid); + linux_nat_debug_printf ("waiting for VFORK_DONE on %d", + parent_pid); parent_lp->stopped = 1; /* We'll handle the VFORK_DONE event like any other @@ -574,10 +593,7 @@ is only the single-step breakpoint at vfork's return point. */ - if (debug_linux_nat) - fprintf_unfiltered (gdb_stdlog, - "LCFF: no VFORK_DONE " - "support, sleeping a bit\n"); + linux_nat_debug_printf ("no VFORK_DONE support, sleeping a bit"); usleep (10000); @@ -608,7 +624,7 @@ check_for_thread_db (); } - return 0; + return false; } @@ -989,7 +1005,7 @@ /* This changes the thread's ptid while preserving the gdb thread num. Also changes the inferior pid, while preserving the inferior num. */ - thread_change_ptid (inferior_ptid, new_ptid); + thread_change_ptid (linux_target, inferior_ptid, new_ptid); /* We've just told GDB core that the thread changed target id, but, in fact, it really is a different thread, with different register @@ -1002,7 +1018,7 @@ static void exit_lwp (struct lwp_info *lp) { - struct thread_info *th = find_thread_ptid (lp->ptid); + struct thread_info *th = find_thread_ptid (linux_target, lp->ptid); if (th) { @@ -1027,9 +1043,7 @@ if (linux_proc_pid_is_stopped (pid)) { - if (debug_linux_nat) - fprintf_unfiltered (gdb_stdlog, - "LNPAW: Attaching to a stopped process\n"); + linux_nat_debug_printf ("Attaching to a stopped process"); /* The process is definitely stopped. It is in a job control stop, unless the kernel predates the TASK_STOPPED / @@ -1060,19 +1074,16 @@ if (!WIFSTOPPED (status)) { /* The pid we tried to attach has apparently just exited. */ - if (debug_linux_nat) - fprintf_unfiltered (gdb_stdlog, "LNPAW: Failed to stop %d: %s", - pid, status_to_str (status)); + linux_nat_debug_printf ("Failed to stop %d: %s", pid, + status_to_str (status)); return status; } if (WSTOPSIG (status) != SIGSTOP) { *signalled = 1; - if (debug_linux_nat) - fprintf_unfiltered (gdb_stdlog, - "LNPAW: Received %s after attaching\n", - status_to_str (status)); + linux_nat_debug_printf ("Received %s after attaching", + status_to_str (status)); } return status; @@ -1122,13 +1133,10 @@ if (err == ESRCH || (err == EPERM && linux_proc_pid_is_gone (lwpid))) { - if (debug_linux_nat) - { - fprintf_unfiltered (gdb_stdlog, - "Cannot attach to lwp %d: " - "thread is gone (%d: %s)\n", - lwpid, err, safe_strerror (err)); - } + linux_nat_debug_printf + ("Cannot attach to lwp %d: thread is gone (%d: %s)", + lwpid, err, safe_strerror (err)); + } else { @@ -1141,10 +1149,8 @@ } else { - if (debug_linux_nat) - fprintf_unfiltered (gdb_stdlog, - "PTRACE_ATTACH %s, 0, 0 (OK)\n", - target_pid_to_str (ptid).c_str ()); + linux_nat_debug_printf ("PTRACE_ATTACH %s, 0, 0 (OK)", + target_pid_to_str (ptid).c_str ()); lp = add_lwp (ptid); @@ -1162,9 +1168,9 @@ /* Also add the LWP to gdb's thread list, in case a matching libthread_db is not found (or the process uses raw clone). */ - add_thread (lp->ptid); - set_running (lp->ptid, 1); - set_executing (lp->ptid, 1); + add_thread (linux_target, lp->ptid); + set_running (linux_target, lp->ptid, true); + set_executing (linux_target, lp->ptid, true); } return 1; @@ -1203,7 +1209,7 @@ ptid = ptid_t (inferior_ptid.pid (), inferior_ptid.pid (), 0); - thread_change_ptid (inferior_ptid, ptid); + thread_change_ptid (linux_target, inferior_ptid, ptid); /* Add the initial process as the first LWP to the list. */ lp = add_initial_lwp (ptid); @@ -1246,10 +1252,8 @@ /* Save the wait status to report later. */ lp->resumed = 1; - if (debug_linux_nat) - fprintf_unfiltered (gdb_stdlog, - "LNA: waitpid %ld, saving status %s\n", - (long) lp->ptid.pid (), status_to_str (status)); + linux_nat_debug_printf ("waitpid %ld, saving status %s", + (long) lp->ptid.pid (), status_to_str (status)); lp->status = status; @@ -1304,7 +1308,7 @@ signo = gdb_signal_from_host (WSTOPSIG (lp->status)); else { - struct thread_info *tp = find_thread_ptid (lp->ptid); + struct thread_info *tp = find_thread_ptid (linux_target, lp->ptid); if (target_is_non_stop_p () && !tp->executing) { @@ -1315,39 +1319,33 @@ } else if (!target_is_non_stop_p ()) { - struct target_waitstatus last; ptid_t last_ptid; + process_stratum_target *last_target; - get_last_target_status (&last_ptid, &last); + get_last_target_status (&last_target, &last_ptid, nullptr); - if (lp->ptid.lwp () == last_ptid.lwp ()) + if (last_target == linux_target + && lp->ptid.lwp () == last_ptid.lwp ()) signo = tp->suspend.stop_signal; } } if (signo == GDB_SIGNAL_0) { - if (debug_linux_nat) - fprintf_unfiltered (gdb_stdlog, - "GPT: lwp %s has no pending signal\n", - target_pid_to_str (lp->ptid).c_str ()); + linux_nat_debug_printf ("lwp %s has no pending signal", + target_pid_to_str (lp->ptid).c_str ()); } else if (!signal_pass_state (signo)) { - if (debug_linux_nat) - fprintf_unfiltered (gdb_stdlog, - "GPT: lwp %s had signal %s, " - "but it is in no pass state\n", - target_pid_to_str (lp->ptid).c_str (), - gdb_signal_to_string (signo)); + linux_nat_debug_printf + ("lwp %s had signal %s but it is in no pass state", + target_pid_to_str (lp->ptid).c_str (), gdb_signal_to_string (signo)); } else { - if (debug_linux_nat) - fprintf_unfiltered (gdb_stdlog, - "GPT: lwp %s has pending signal %s\n", - target_pid_to_str (lp->ptid).c_str (), - gdb_signal_to_string (signo)); + linux_nat_debug_printf ("lwp %s has pending signal %s", + target_pid_to_str (lp->ptid).c_str (), + gdb_signal_to_string (signo)); return gdb_signal_to_host (signo); } @@ -1367,18 +1365,16 @@ gdb_assert (lp->status == 0 || WIFSTOPPED (lp->status)); - if (debug_linux_nat && lp->status) - fprintf_unfiltered (gdb_stdlog, "DC: Pending %s for %s on detach.\n", - strsignal (WSTOPSIG (lp->status)), - target_pid_to_str (lp->ptid).c_str ()); + if (lp->status != 0) + linux_nat_debug_printf ("Pending %s for %s on detach.", + strsignal (WSTOPSIG (lp->status)), + target_pid_to_str (lp->ptid).c_str ()); /* If there is a pending SIGSTOP, get rid of it. */ if (lp->signalled) { - if (debug_linux_nat) - fprintf_unfiltered (gdb_stdlog, - "DC: Sending SIGCONT to %s\n", - target_pid_to_str (lp->ptid).c_str ()); + linux_nat_debug_printf ("Sending SIGCONT to %s", + target_pid_to_str (lp->ptid).c_str ()); kill_lwp (lwpid, SIGCONT); lp->signalled = 0; @@ -1437,13 +1433,10 @@ safe_strerror (save_errno)); } } - else if (debug_linux_nat) - { - fprintf_unfiltered (gdb_stdlog, - "PTRACE_DETACH (%s, %s, 0) (OK)\n", - target_pid_to_str (lp->ptid).c_str (), - strsignal (signo)); - } + else + linux_nat_debug_printf ("PTRACE_DETACH (%s, %s, 0) (OK)", + target_pid_to_str (lp->ptid).c_str (), + strsignal (signo)); delete_lwp (lp->ptid); } @@ -1517,7 +1510,7 @@ handle the case of stepping a breakpoint instruction). */ if (step) { - struct regcache *regcache = get_thread_regcache (lp->ptid); + struct regcache *regcache = get_thread_regcache (linux_target, lp->ptid); lp->stop_pc = regcache_read_pc (regcache); } @@ -1536,7 +1529,7 @@ lp->stopped = 0; lp->core = -1; lp->stop_reason = TARGET_STOPPED_BY_NO_REASON; - registers_changed_ptid (lp->ptid); + registers_changed_ptid (linux_target, lp->ptid); } /* Called when we try to resume a stopped LWP and that errors out. If @@ -1595,43 +1588,33 @@ { if (lp->stopped) { - struct inferior *inf = find_inferior_ptid (lp->ptid); + struct inferior *inf = find_inferior_ptid (linux_target, lp->ptid); if (inf->vfork_child != NULL) { - if (debug_linux_nat) - fprintf_unfiltered (gdb_stdlog, - "RC: Not resuming %s (vfork parent)\n", - target_pid_to_str (lp->ptid).c_str ()); + linux_nat_debug_printf ("Not resuming %s (vfork parent)", + target_pid_to_str (lp->ptid).c_str ()); } else if (!lwp_status_pending_p (lp)) { - if (debug_linux_nat) - fprintf_unfiltered (gdb_stdlog, - "RC: Resuming sibling %s, %s, %s\n", - target_pid_to_str (lp->ptid).c_str (), - (signo != GDB_SIGNAL_0 - ? strsignal (gdb_signal_to_host (signo)) - : "0"), - step ? "step" : "resume"); + linux_nat_debug_printf ("Resuming sibling %s, %s, %s", + target_pid_to_str (lp->ptid).c_str (), + (signo != GDB_SIGNAL_0 + ? strsignal (gdb_signal_to_host (signo)) + : "0"), + step ? "step" : "resume"); linux_resume_one_lwp (lp, step, signo); } else { - if (debug_linux_nat) - fprintf_unfiltered (gdb_stdlog, - "RC: Not resuming sibling %s (has pending)\n", - target_pid_to_str (lp->ptid).c_str ()); + linux_nat_debug_printf ("Not resuming sibling %s (has pending)", + target_pid_to_str (lp->ptid).c_str ()); } } else - { - if (debug_linux_nat) - fprintf_unfiltered (gdb_stdlog, - "RC: Not resuming sibling %s (not stopped)\n", + linux_nat_debug_printf ("Not resuming sibling %s (not stopped)", target_pid_to_str (lp->ptid).c_str ()); - } } /* Callback for iterate_over_lwps. If LWP is EXCEPT, do nothing. @@ -1649,7 +1632,7 @@ { struct thread_info *thread; - thread = find_thread_ptid (lp->ptid); + thread = find_thread_ptid (linux_target, lp->ptid); if (thread != NULL) { signo = thread->suspend.stop_signal; @@ -1683,20 +1666,19 @@ struct lwp_info *lp; int resume_many; - if (debug_linux_nat) - fprintf_unfiltered (gdb_stdlog, - "LLR: Preparing to %s %s, %s, inferior_ptid %s\n", - step ? "step" : "resume", - target_pid_to_str (ptid).c_str (), - (signo != GDB_SIGNAL_0 - ? strsignal (gdb_signal_to_host (signo)) : "0"), - target_pid_to_str (inferior_ptid).c_str ()); + linux_nat_debug_printf ("Preparing to %s %s, %s, inferior_ptid %s", + step ? "step" : "resume", + target_pid_to_str (ptid).c_str (), + (signo != GDB_SIGNAL_0 + ? strsignal (gdb_signal_to_host (signo)) : "0"), + target_pid_to_str (inferior_ptid).c_str ()); /* A specific PTID means `step only this process id'. */ resume_many = (minus_one_ptid == ptid || ptid.is_pid ()); - /* Mark the lwps we're resuming as resumed. */ + /* Mark the lwps we're resuming as resumed and update their + last_resume_kind to resume_continue. */ iterate_over_lwps (ptid, resume_set_callback); /* See if it's the current inferior that should be handled @@ -1724,10 +1706,8 @@ && WSTOPSIG (lp->status) && sigismember (&pass_mask, WSTOPSIG (lp->status))) { - if (debug_linux_nat) - fprintf_unfiltered (gdb_stdlog, - "LLR: Not short circuiting for ignored " - "status 0x%x\n", lp->status); + linux_nat_debug_printf + ("Not short circuiting for ignored status 0x%x", lp->status); /* FIXME: What should we do if we are supposed to continue this thread with a signal? */ @@ -1743,10 +1723,8 @@ this thread with a signal? */ gdb_assert (signo == GDB_SIGNAL_0); - if (debug_linux_nat) - fprintf_unfiltered (gdb_stdlog, - "LLR: Short circuiting for status 0x%x\n", - lp->status); + linux_nat_debug_printf ("Short circuiting for status 0x%x", + lp->status); if (target_can_async_p ()) { @@ -1763,13 +1741,11 @@ return linux_nat_resume_callback (info, lp); }); - if (debug_linux_nat) - fprintf_unfiltered (gdb_stdlog, - "LLR: %s %s, %s (resume event thread)\n", - step ? "PTRACE_SINGLESTEP" : "PTRACE_CONT", - target_pid_to_str (lp->ptid).c_str (), - (signo != GDB_SIGNAL_0 - ? strsignal (gdb_signal_to_host (signo)) : "0")); + linux_nat_debug_printf ("%s %s, %s (resume event thread)", + step ? "PTRACE_SINGLESTEP" : "PTRACE_CONT", + target_pid_to_str (lp->ptid).c_str (), + (signo != GDB_SIGNAL_0 + ? strsignal (gdb_signal_to_host (signo)) : "0")); linux_resume_one_lwp (lp, step, signo); @@ -1806,7 +1782,7 @@ { struct target_waitstatus *ourstatus = &lp->waitstatus; struct gdbarch *gdbarch = target_thread_architecture (lp->ptid); - thread_info *thread = find_thread_ptid (lp->ptid); + thread_info *thread = find_thread_ptid (linux_target, lp->ptid); int syscall_number = (int) gdbarch_get_syscall_number (gdbarch, thread); if (stopping) @@ -1831,13 +1807,9 @@ actually get to execute. It seems it would be even more confusing to the user. */ - if (debug_linux_nat) - fprintf_unfiltered (gdb_stdlog, - "LHST: ignoring syscall %d " - "for LWP %ld (stopping threads), " - "resuming with PTRACE_CONT for SIGSTOP\n", - syscall_number, - lp->ptid.lwp ()); + linux_nat_debug_printf + ("ignoring syscall %d for LWP %ld (stopping threads), resuming with " + "PTRACE_CONT for SIGSTOP", syscall_number, lp->ptid.lwp ()); lp->syscall_state = TARGET_WAITKIND_IGNORE; ptrace (PTRACE_CONT, lp->ptid.lwp (), 0, 0); @@ -1862,26 +1834,18 @@ ourstatus->kind = lp->syscall_state; ourstatus->value.syscall_number = syscall_number; - if (debug_linux_nat) - fprintf_unfiltered (gdb_stdlog, - "LHST: stopping for %s of syscall %d" - " for LWP %ld\n", - lp->syscall_state - == TARGET_WAITKIND_SYSCALL_ENTRY - ? "entry" : "return", - syscall_number, - lp->ptid.lwp ()); + linux_nat_debug_printf + ("stopping for %s of syscall %d for LWP %ld", + (lp->syscall_state == TARGET_WAITKIND_SYSCALL_ENTRY + ? "entry" : "return"), syscall_number, lp->ptid.lwp ()); + return 0; } - if (debug_linux_nat) - fprintf_unfiltered (gdb_stdlog, - "LHST: ignoring %s of syscall %d " - "for LWP %ld\n", - lp->syscall_state == TARGET_WAITKIND_SYSCALL_ENTRY - ? "entry" : "return", - syscall_number, - lp->ptid.lwp ()); + linux_nat_debug_printf + ("ignoring %s of syscall %d for LWP %ld", + (lp->syscall_state == TARGET_WAITKIND_SYSCALL_ENTRY + ? "entry" : "return"), syscall_number, lp->ptid.lwp ()); } else { @@ -1901,13 +1865,9 @@ The points above mean that the next resume, be it PT_STEP or PT_CONTINUE, can not trigger a syscall trace event. */ - if (debug_linux_nat) - fprintf_unfiltered (gdb_stdlog, - "LHST: caught syscall event " - "with no syscall catchpoints." - " %d for LWP %ld, ignoring\n", - syscall_number, - lp->ptid.lwp ()); + linux_nat_debug_printf + ("caught syscall event with no syscall catchpoints. %d for LWP %ld, " + "ignoring", syscall_number, lp->ptid.lwp ()); lp->syscall_state = TARGET_WAITKIND_IGNORE; } @@ -1973,6 +1933,10 @@ inferior. */ linux_target->low_new_fork (lp, new_pid); } + else if (event == PTRACE_EVENT_CLONE) + { + linux_target->low_new_clone (lp, new_pid); + } if (event == PTRACE_EVENT_FORK && linux_fork_checkpointing_p (lp->ptid.pid ())) @@ -2008,11 +1972,8 @@ ourstatus->kind = TARGET_WAITKIND_IGNORE; - if (debug_linux_nat) - fprintf_unfiltered (gdb_stdlog, - "LHEW: Got clone event " - "from LWP %d, new child is LWP %ld\n", - pid, new_pid); + linux_nat_debug_printf + ("Got clone event from LWP %d, new child is LWP %ld", pid, new_pid); new_lp = add_lwp (ptid_t (lp->ptid.pid (), new_pid, 0)); new_lp->stopped = 1; @@ -2026,15 +1987,15 @@ /* The process is not using thread_db. Add the LWP to GDB's list. */ target_post_attach (new_lp->ptid.lwp ()); - add_thread (new_lp->ptid); + add_thread (linux_target, new_lp->ptid); } /* Even if we're stopping the thread for some reason internal to this module, from the perspective of infrun and the user/frontend, this new thread is running until it next reports a stop. */ - set_running (new_lp->ptid, 1); - set_executing (new_lp->ptid, 1); + set_running (linux_target, new_lp->ptid, true); + set_executing (linux_target, new_lp->ptid, true); if (WSTOPSIG (status) != SIGSTOP) { @@ -2051,12 +2012,9 @@ gdb_assert (new_lp->status == 0); /* Save the wait status to report later. */ - if (debug_linux_nat) - fprintf_unfiltered (gdb_stdlog, - "LHEW: waitpid of new LWP %ld, " - "saving status %s\n", - (long) new_lp->ptid.lwp (), - status_to_str (status)); + linux_nat_debug_printf + ("waitpid of new LWP %ld, saving status %s", + (long) new_lp->ptid.lwp (), status_to_str (status)); new_lp->status = status; } else if (report_thread_events) @@ -2073,10 +2031,7 @@ if (event == PTRACE_EVENT_EXEC) { - if (debug_linux_nat) - fprintf_unfiltered (gdb_stdlog, - "LHEW: Got exec event from LWP %ld\n", - lp->ptid.lwp ()); + linux_nat_debug_printf ("Got exec event from LWP %ld", lp->ptid.lwp ()); ourstatus->kind = TARGET_WAITKIND_EXECD; ourstatus->value.execd_pathname @@ -2093,21 +2048,17 @@ { if (current_inferior ()->waiting_for_vfork_done) { - if (debug_linux_nat) - fprintf_unfiltered (gdb_stdlog, - "LHEW: Got expected PTRACE_EVENT_" - "VFORK_DONE from LWP %ld: stopping\n", - lp->ptid.lwp ()); + linux_nat_debug_printf + ("Got expected PTRACE_EVENT_VFORK_DONE from LWP %ld: stopping", + lp->ptid.lwp ()); ourstatus->kind = TARGET_WAITKIND_VFORK_DONE; return 0; } - if (debug_linux_nat) - fprintf_unfiltered (gdb_stdlog, - "LHEW: Got PTRACE_EVENT_VFORK_DONE " - "from LWP %ld: ignoring\n", - lp->ptid.lwp ()); + linux_nat_debug_printf + ("Got PTRACE_EVENT_VFORK_DONE from LWP %ld: ignoring", lp->ptid.lwp ()); + return 1; } @@ -2121,8 +2072,7 @@ static void wait_for_signal () { - if (debug_linux_nat) - fprintf_unfiltered (gdb_stdlog, "linux-nat: about to sigsuspend\n"); + linux_nat_debug_printf ("about to sigsuspend"); sigsuspend (&suspend_mask); /* If the quit flag is set, it means that the user pressed Ctrl-C @@ -2166,9 +2116,8 @@ won't get an exit event. See comments on exec events at the top of the file. */ thread_dead = 1; - if (debug_linux_nat) - fprintf_unfiltered (gdb_stdlog, "WL: %s vanished.\n", - target_pid_to_str (lp->ptid).c_str ()); + linux_nat_debug_printf ("%s vanished.", + target_pid_to_str (lp->ptid).c_str ()); } if (pid != 0) break; @@ -2191,10 +2140,8 @@ && linux_proc_pid_is_zombie (lp->ptid.lwp ())) { thread_dead = 1; - if (debug_linux_nat) - fprintf_unfiltered (gdb_stdlog, - "WL: Thread group leader %s vanished.\n", - target_pid_to_str (lp->ptid).c_str ()); + linux_nat_debug_printf ("Thread group leader %s vanished.", + target_pid_to_str (lp->ptid).c_str ()); break; } @@ -2213,13 +2160,9 @@ { gdb_assert (pid == lp->ptid.lwp ()); - if (debug_linux_nat) - { - fprintf_unfiltered (gdb_stdlog, - "WL: waitpid %s received %s\n", + linux_nat_debug_printf ("waitpid %s received %s", target_pid_to_str (lp->ptid).c_str (), status_to_str (status)); - } /* Check if the thread has exited. */ if (WIFEXITED (status) || WIFSIGNALED (status)) @@ -2227,9 +2170,7 @@ if (report_thread_events || lp->ptid.pid () == lp->ptid.lwp ()) { - if (debug_linux_nat) - fprintf_unfiltered (gdb_stdlog, "WL: LWP %d exited.\n", - lp->ptid.pid ()); + linux_nat_debug_printf ("LWP %d exited.", lp->ptid.pid ()); /* If this is the leader exiting, it means the whole process is gone. Store the status to report to the @@ -2240,9 +2181,8 @@ } thread_dead = 1; - if (debug_linux_nat) - fprintf_unfiltered (gdb_stdlog, "WL: %s exited.\n", - target_pid_to_str (lp->ptid).c_str ()); + linux_nat_debug_printf ("%s exited.", + target_pid_to_str (lp->ptid).c_str ()); } } @@ -2257,7 +2197,7 @@ if (lp->must_set_ptrace_flags) { - struct inferior *inf = find_inferior_pid (lp->ptid.pid ()); + inferior *inf = find_inferior_pid (linux_target, lp->ptid.pid ()); int options = linux_nat_ptrace_options (inf->attach_flag); linux_enable_event_reporting (lp->ptid.lwp (), options); @@ -2286,10 +2226,7 @@ if (WIFSTOPPED (status) && WSTOPSIG (status) == SIGTRAP && linux_is_extended_waitstatus (status)) { - if (debug_linux_nat) - fprintf_unfiltered (gdb_stdlog, - "WL: Handling extended status 0x%06x\n", - status); + linux_nat_debug_printf ("Handling extended status 0x%06x", status); linux_handle_extended_wait (lp, status); return 0; } @@ -2306,21 +2243,13 @@ { int ret; - if (debug_linux_nat) - { - fprintf_unfiltered (gdb_stdlog, - "SC: kill %s **<SIGSTOP>**\n", + linux_nat_debug_printf ("kill %s **<SIGSTOP>**", target_pid_to_str (lp->ptid).c_str ()); - } + errno = 0; ret = kill_lwp (lp->ptid.lwp (), SIGSTOP); - if (debug_linux_nat) - { - fprintf_unfiltered (gdb_stdlog, - "SC: lwp kill %d %s\n", - ret, + linux_nat_debug_printf ("lwp kill %d %s", ret, errno ? safe_strerror (errno) : "ERRNO-OK"); - } lp->signalled = 1; gdb_assert (lp->status == 0); @@ -2408,10 +2337,8 @@ if (!linux_nat_has_pending_sigint (lp->ptid.lwp ())) { - if (debug_linux_nat) - fprintf_unfiltered (gdb_stdlog, - "MCIS: Clearing bogus flag for %s\n", - target_pid_to_str (lp->ptid).c_str ()); + linux_nat_debug_printf ("Clearing bogus flag for %s", + target_pid_to_str (lp->ptid).c_str ()); lp->ignore_sigint = 0; } } @@ -2484,7 +2411,7 @@ static int stop_wait_callback (struct lwp_info *lp) { - struct inferior *inf = find_inferior_ptid (lp->ptid); + inferior *inf = find_inferior_ptid (linux_target, lp->ptid); /* If this is a vfork parent, bail out, it is not going to report any SIGSTOP until the vfork is done with. */ @@ -2507,12 +2434,10 @@ errno = 0; ptrace (PTRACE_CONT, lp->ptid.lwp (), 0, 0); lp->stopped = 0; - if (debug_linux_nat) - fprintf_unfiltered (gdb_stdlog, - "PTRACE_CONT %s, 0, 0 (%s) " - "(discarding SIGINT)\n", - target_pid_to_str (lp->ptid).c_str (), - errno ? safe_strerror (errno) : "OK"); + linux_nat_debug_printf + ("PTRACE_CONT %s, 0, 0 (%s) (discarding SIGINT)", + target_pid_to_str (lp->ptid).c_str (), + errno ? safe_strerror (errno) : "OK"); return stop_wait_callback (lp); } @@ -2523,11 +2448,9 @@ { /* The thread was stopped with a signal other than SIGSTOP. */ - if (debug_linux_nat) - fprintf_unfiltered (gdb_stdlog, - "SWC: Pending event %s in %s\n", - status_to_str ((int) status), - target_pid_to_str (lp->ptid).c_str ()); + linux_nat_debug_printf ("Pending event %s in %s", + status_to_str ((int) status), + target_pid_to_str (lp->ptid).c_str ()); /* Save the sigtrap event. */ lp->status = status; @@ -2538,10 +2461,8 @@ { /* We caught the SIGSTOP that we intended to catch. */ - if (debug_linux_nat) - fprintf_unfiltered (gdb_stdlog, - "SWC: Expected SIGSTOP caught for %s.\n", - target_pid_to_str (lp->ptid).c_str ()); + linux_nat_debug_printf ("Expected SIGSTOP caught for %s.", + target_pid_to_str (lp->ptid).c_str ()); lp->signalled = 0; @@ -2577,7 +2498,7 @@ if (lp->stop_reason == TARGET_STOPPED_BY_SW_BREAKPOINT || lp->stop_reason == TARGET_STOPPED_BY_HW_BREAKPOINT) { - struct regcache *regcache = get_thread_regcache (lp->ptid); + struct regcache *regcache = get_thread_regcache (linux_target, lp->ptid); CORE_ADDR pc; int discard = 0; @@ -2585,23 +2506,19 @@ if (pc != lp->stop_pc) { - if (debug_linux_nat) - fprintf_unfiltered (gdb_stdlog, - "SC: PC of %s changed. was=%s, now=%s\n", - target_pid_to_str (lp->ptid).c_str (), - paddress (target_gdbarch (), lp->stop_pc), - paddress (target_gdbarch (), pc)); + linux_nat_debug_printf ("PC of %s changed. was=%s, now=%s", + target_pid_to_str (lp->ptid).c_str (), + paddress (target_gdbarch (), lp->stop_pc), + paddress (target_gdbarch (), pc)); discard = 1; } #if !USE_SIGTRAP_SIGINFO else if (!breakpoint_inserted_here_p (regcache->aspace (), pc)) { - if (debug_linux_nat) - fprintf_unfiltered (gdb_stdlog, - "SC: previous breakpoint of %s, at %s gone\n", - target_pid_to_str (lp->ptid).c_str (), - paddress (target_gdbarch (), lp->stop_pc)); + linux_nat_debug_printf ("previous breakpoint of %s, at %s gone", + target_pid_to_str (lp->ptid).c_str (), + paddress (target_gdbarch (), lp->stop_pc)); discard = 1; } @@ -2609,10 +2526,8 @@ if (discard) { - if (debug_linux_nat) - fprintf_unfiltered (gdb_stdlog, - "SC: pending event of %s cancelled.\n", - target_pid_to_str (lp->ptid).c_str ()); + linux_nat_debug_printf ("pending event of %s cancelled.", + target_pid_to_str (lp->ptid).c_str ()); lp->status = 0; linux_resume_one_lwp (lp, lp->step, GDB_SIGNAL_0); @@ -2698,7 +2613,7 @@ if (!linux_target->low_status_is_event (lp->status)) return; - regcache = get_thread_regcache (lp->ptid); + regcache = get_thread_regcache (linux_target, lp->ptid); gdbarch = regcache->arch (); pc = regcache_read_pc (regcache); @@ -2721,7 +2636,7 @@ { /* If we determine the LWP stopped for a SW breakpoint, trust it. Particularly don't check watchpoint - registers, because at least on s390, we'd find + registers, because, at least on s390, we'd find stopped-by-watchpoint as long as there's a watchpoint set. */ lp->stop_reason = TARGET_STOPPED_BY_SW_BREAKPOINT; @@ -2735,10 +2650,8 @@ } else if (siginfo.si_code == TRAP_TRACE) { - if (debug_linux_nat) - fprintf_unfiltered (gdb_stdlog, - "CSBB: %s stopped by trace\n", - target_pid_to_str (lp->ptid).c_str ()); + linux_nat_debug_printf ("%s stopped by trace", + target_pid_to_str (lp->ptid).c_str ()); /* We may have single stepped an instruction that triggered a watchpoint. In that case, on some @@ -2768,10 +2681,8 @@ if (lp->stop_reason == TARGET_STOPPED_BY_SW_BREAKPOINT) { - if (debug_linux_nat) - fprintf_unfiltered (gdb_stdlog, - "CSBB: %s stopped by software breakpoint\n", - target_pid_to_str (lp->ptid).c_str ()); + linux_nat_debug_printf ("%s stopped by software breakpoint", + target_pid_to_str (lp->ptid).c_str ()); /* Back up the PC if necessary. */ if (pc != sw_bp_pc) @@ -2782,17 +2693,13 @@ } else if (lp->stop_reason == TARGET_STOPPED_BY_HW_BREAKPOINT) { - if (debug_linux_nat) - fprintf_unfiltered (gdb_stdlog, - "CSBB: %s stopped by hardware breakpoint\n", - target_pid_to_str (lp->ptid).c_str ()); + linux_nat_debug_printf ("%s stopped by hardware breakpoint", + target_pid_to_str (lp->ptid).c_str ()); } else if (lp->stop_reason == TARGET_STOPPED_BY_WATCHPOINT) { - if (debug_linux_nat) - fprintf_unfiltered (gdb_stdlog, - "CSBB: %s stopped by hardware watchpoint\n", - target_pid_to_str (lp->ptid).c_str ()); + linux_nat_debug_printf ("%s stopped by hardware watchpoint", + target_pid_to_str (lp->ptid).c_str ()); } lp->stop_pc = pc; @@ -2866,10 +2773,8 @@ event_lp = iterate_over_lwps (filter, select_singlestep_lwp_callback); if (event_lp != NULL) { - if (debug_linux_nat) - fprintf_unfiltered (gdb_stdlog, - "SEL: Select single-step %s\n", - target_pid_to_str (event_lp->ptid).c_str ()); + linux_nat_debug_printf ("Select single-step %s", + target_pid_to_str (event_lp->ptid).c_str ()); } } @@ -2890,10 +2795,9 @@ random_selector = (int) ((num_events * (double) rand ()) / (RAND_MAX + 1.0)); - if (debug_linux_nat && num_events > 1) - fprintf_unfiltered (gdb_stdlog, - "SEL: Found %d events, selecting #%d\n", - num_events, random_selector); + if (num_events > 1) + linux_nat_debug_printf ("Found %d events, selecting #%d", + num_events, random_selector); event_lp = (iterate_over_lwps @@ -2925,7 +2829,7 @@ } /* Check if we should go on and pass this event to common code. - Return the affected lwp if we are, or NULL otherwise. */ + Return the affected lwp if we should, or NULL otherwise. */ static struct lwp_info * linux_nat_filter_event (int lwpid, int status) @@ -2952,23 +2856,18 @@ && (WSTOPSIG (status) == SIGTRAP && event == PTRACE_EVENT_EXEC)) { /* A multi-thread exec after we had seen the leader exiting. */ - if (debug_linux_nat) - fprintf_unfiltered (gdb_stdlog, - "LLW: Re-adding thread group leader LWP %d.\n", - lwpid); + linux_nat_debug_printf ("Re-adding thread group leader LWP %d.", lwpid); lp = add_lwp (ptid_t (lwpid, lwpid, 0)); lp->stopped = 1; lp->resumed = 1; - add_thread (lp->ptid); + add_thread (linux_target, lp->ptid); } if (WIFSTOPPED (status) && !lp) { - if (debug_linux_nat) - fprintf_unfiltered (gdb_stdlog, - "LHEW: saving LWP %ld status %s in stopped_pids list\n", - (long) lwpid, status_to_str (status)); + linux_nat_debug_printf ("saving LWP %ld status %s in stopped_pids list", + (long) lwpid, status_to_str (status)); add_to_pid_list (&stopped_pids, lwpid, status); return NULL; } @@ -2986,7 +2885,7 @@ if (WIFSTOPPED (status) && lp->must_set_ptrace_flags) { - struct inferior *inf = find_inferior_pid (lp->ptid.pid ()); + inferior *inf = find_inferior_pid (linux_target, lp->ptid.pid ()); int options = linux_nat_ptrace_options (inf->attach_flag); linux_enable_event_reporting (lp->ptid.lwp (), options); @@ -3015,10 +2914,8 @@ if (WIFSTOPPED (status) && WSTOPSIG (status) == SIGTRAP && linux_is_extended_waitstatus (status)) { - if (debug_linux_nat) - fprintf_unfiltered (gdb_stdlog, - "LLW: Handling extended status 0x%06x\n", - status); + linux_nat_debug_printf ("Handling extended status 0x%06x", status); + if (linux_handle_extended_wait (lp, status)) return NULL; } @@ -3029,10 +2926,8 @@ if (!report_thread_events && num_lwps (lp->ptid.pid ()) > 1) { - if (debug_linux_nat) - fprintf_unfiltered (gdb_stdlog, - "LLW: %s exited.\n", - target_pid_to_str (lp->ptid).c_str ()); + linux_nat_debug_printf ("%s exited.", + target_pid_to_str (lp->ptid).c_str ()); /* If there is at least one more LWP, then the exit signal was not the end of the debugged application and should be @@ -3045,10 +2940,8 @@ exit, if e.g., some other thread brings down the whole process (calls `exit'). So don't assert that the lwp is resumed. */ - if (debug_linux_nat) - fprintf_unfiltered (gdb_stdlog, - "LWP %ld exited (resumed=%d)\n", - lp->ptid.lwp (), lp->resumed); + linux_nat_debug_printf ("LWP %ld exited (resumed=%d)", + lp->ptid.lwp (), lp->resumed); /* Dead LWP's aren't expected to reported a pending sigstop. */ lp->signalled = 0; @@ -3068,21 +2961,17 @@ if (lp->last_resume_kind == resume_stop) { - if (debug_linux_nat) - fprintf_unfiltered (gdb_stdlog, - "LLW: resume_stop SIGSTOP caught for %s.\n", - target_pid_to_str (lp->ptid).c_str ()); + linux_nat_debug_printf ("resume_stop SIGSTOP caught for %s.", + target_pid_to_str (lp->ptid).c_str ()); } else { /* This is a delayed SIGSTOP. Filter out the event. */ - if (debug_linux_nat) - fprintf_unfiltered (gdb_stdlog, - "LLW: %s %s, 0, 0 (discard delayed SIGSTOP)\n", - lp->step ? - "PTRACE_SINGLESTEP" : "PTRACE_CONT", - target_pid_to_str (lp->ptid).c_str ()); + linux_nat_debug_printf + ("%s %s, 0, 0 (discard delayed SIGSTOP)", + lp->step ? "PTRACE_SINGLESTEP" : "PTRACE_CONT", + target_pid_to_str (lp->ptid).c_str ()); linux_resume_one_lwp (lp, lp->step, GDB_SIGNAL_0); gdb_assert (lp->resumed); @@ -3095,21 +2984,16 @@ if (lp->ignore_sigint && WIFSTOPPED (status) && WSTOPSIG (status) == SIGINT) { - if (debug_linux_nat) - fprintf_unfiltered (gdb_stdlog, - "LLW: Delayed SIGINT caught for %s.\n", - target_pid_to_str (lp->ptid).c_str ()); + linux_nat_debug_printf ("Delayed SIGINT caught for %s.", + target_pid_to_str (lp->ptid).c_str ()); /* This is a delayed SIGINT. */ lp->ignore_sigint = 0; linux_resume_one_lwp (lp, lp->step, GDB_SIGNAL_0); - if (debug_linux_nat) - fprintf_unfiltered (gdb_stdlog, - "LLW: %s %s, 0, 0 (discard SIGINT)\n", - lp->step ? - "PTRACE_SINGLESTEP" : "PTRACE_CONT", - target_pid_to_str (lp->ptid).c_str ()); + linux_nat_debug_printf ("%s %s, 0, 0 (discard SIGINT)", + lp->step ? "PTRACE_SINGLESTEP" : "PTRACE_CONT", + target_pid_to_str (lp->ptid).c_str ()); gdb_assert (lp->resumed); /* Discard the event. */ @@ -3118,7 +3002,7 @@ /* Don't report signals that GDB isn't interested in, such as signals that are neither printed nor stopped upon. Stopping all - threads can be a bit time-consuming so if we want decent + threads can be a bit time-consuming, so if we want decent performance with heavily multi-threaded programs, especially when they're using a high frequency timer, we'd better avoid it if we can. */ @@ -3152,19 +3036,16 @@ if (!lp->step && WSTOPSIG (status) && sigismember (&pass_mask, WSTOPSIG (status)) && (WSTOPSIG (status) != SIGSTOP - || !find_thread_ptid (lp->ptid)->stop_requested) + || !find_thread_ptid (linux_target, lp->ptid)->stop_requested) && !linux_wstatus_maybe_breakpoint (status)) { linux_resume_one_lwp (lp, lp->step, signo); - if (debug_linux_nat) - fprintf_unfiltered (gdb_stdlog, - "LLW: %s %s, %s (preempt 'handle')\n", - lp->step ? - "PTRACE_SINGLESTEP" : "PTRACE_CONT", - target_pid_to_str (lp->ptid).c_str (), - (signo != GDB_SIGNAL_0 - ? strsignal (gdb_signal_to_host (signo)) - : "0")); + linux_nat_debug_printf + ("%s %s, %s (preempt 'handle')", + lp->step ? "PTRACE_SINGLESTEP" : "PTRACE_CONT", + target_pid_to_str (lp->ptid).c_str (), + (signo != GDB_SIGNAL_0 + ? strsignal (gdb_signal_to_host (signo)) : "0")); return NULL; } } @@ -3196,11 +3077,9 @@ && num_lwps (inf->pid) > 1 && linux_proc_pid_is_zombie (inf->pid)) { - if (debug_linux_nat) - fprintf_unfiltered (gdb_stdlog, - "CZL: Thread group leader %d zombie " - "(it exited, or another thread execd).\n", - inf->pid); + linux_nat_debug_printf ("Thread group leader %d zombie " + "(it exited, or another thread execd).", + inf->pid); /* A leader zombie can mean one of two things: @@ -3220,10 +3099,7 @@ previous leader did exit voluntarily before some other thread execs). */ - if (debug_linux_nat) - fprintf_unfiltered (gdb_stdlog, - "CZL: Thread group leader %d vanished.\n", - inf->pid); + linux_nat_debug_printf ("Thread group leader %d vanished.", inf->pid); exit_lwp (leader_lp); } } @@ -3262,8 +3138,7 @@ struct lwp_info *lp; int status; - if (debug_linux_nat) - fprintf_unfiltered (gdb_stdlog, "LLW: enter\n"); + linux_nat_debug_printf ("enter"); /* The first time we get here after starting a new inferior, we may not have added it to the LWP list yet - this is the earliest @@ -3271,7 +3146,7 @@ if (inferior_ptid.is_pid ()) { /* Upgrade the main thread's ptid. */ - thread_change_ptid (inferior_ptid, + thread_change_ptid (linux_target, inferior_ptid, ptid_t (inferior_ptid.pid (), inferior_ptid.pid (), 0)); @@ -3286,11 +3161,9 @@ lp = iterate_over_lwps (ptid, status_callback); if (lp != NULL) { - if (debug_linux_nat) - fprintf_unfiltered (gdb_stdlog, - "LLW: Using pending wait status %s for %s.\n", - status_to_str (lp->status), - target_pid_to_str (lp->ptid).c_str ()); + linux_nat_debug_printf ("Using pending wait status %s for %s.", + status_to_str (lp->status), + target_pid_to_str (lp->ptid).c_str ()); } /* But if we don't find a pending event, we'll have to wait. Always @@ -3317,19 +3190,14 @@ errno = 0; lwpid = my_waitpid (-1, &status, __WALL | WNOHANG); - if (debug_linux_nat) - fprintf_unfiltered (gdb_stdlog, - "LNW: waitpid(-1, ...) returned %d, %s\n", - lwpid, errno ? safe_strerror (errno) : "ERRNO-OK"); + linux_nat_debug_printf ("waitpid(-1, ...) returned %d, %s", + lwpid, + errno ? safe_strerror (errno) : "ERRNO-OK"); if (lwpid > 0) { - if (debug_linux_nat) - { - fprintf_unfiltered (gdb_stdlog, - "LLW: waitpid %ld received %s\n", + linux_nat_debug_printf ("waitpid %ld received %s", (long) lwpid, status_to_str (status)); - } linux_nat_filter_event (lwpid, status); /* Retry until nothing comes out of waitpid. A single @@ -3359,8 +3227,7 @@ forever in the sigsuspend call below otherwise. */ if (iterate_over_lwps (ptid, resumed_callback) == NULL) { - if (debug_linux_nat) - fprintf_unfiltered (gdb_stdlog, "LLW: exit (no resumed LWP)\n"); + linux_nat_debug_printf ("exit (no resumed LWP)"); ourstatus->kind = TARGET_WAITKIND_NO_RESUMED; @@ -3372,8 +3239,7 @@ if (target_options & TARGET_WNOHANG) { - if (debug_linux_nat) - fprintf_unfiltered (gdb_stdlog, "LLW: exit (ignore)\n"); + linux_nat_debug_printf ("exit (ignore)"); ourstatus->kind = TARGET_WAITKIND_IGNORE; restore_child_signals_mask (&prev_mask); @@ -3416,7 +3282,7 @@ if (lp->stop_reason == TARGET_STOPPED_BY_SW_BREAKPOINT && !USE_SIGTRAP_SIGINFO) { - struct regcache *regcache = get_thread_regcache (lp->ptid); + struct regcache *regcache = get_thread_regcache (linux_target, lp->ptid); struct gdbarch *gdbarch = regcache->arch (); int decr_pc = gdbarch_decr_pc_after_break (gdbarch); @@ -3447,10 +3313,8 @@ if (linux_target->low_status_is_event (status)) { - if (debug_linux_nat) - fprintf_unfiltered (gdb_stdlog, - "LLW: trap ptid is %s.\n", - target_pid_to_str (lp->ptid).c_str ()); + linux_nat_debug_printf ("trap ptid is %s.", + target_pid_to_str (lp->ptid).c_str ()); } if (lp->waitstatus.kind != TARGET_WAITKIND_IGNORE) @@ -3461,8 +3325,7 @@ else store_waitstatus (ourstatus, status); - if (debug_linux_nat) - fprintf_unfiltered (gdb_stdlog, "LLW: exit\n"); + linux_nat_debug_printf ("exit"); restore_child_signals_mask (&prev_mask); @@ -3496,28 +3359,22 @@ { if (!lp->stopped) { - if (debug_linux_nat) - fprintf_unfiltered (gdb_stdlog, - "RSRL: NOT resuming LWP %s, not stopped\n", - target_pid_to_str (lp->ptid).c_str ()); + linux_nat_debug_printf ("NOT resuming LWP %s, not stopped", + target_pid_to_str (lp->ptid).c_str ()); } else if (!lp->resumed) { - if (debug_linux_nat) - fprintf_unfiltered (gdb_stdlog, - "RSRL: NOT resuming LWP %s, not resumed\n", - target_pid_to_str (lp->ptid).c_str ()); + linux_nat_debug_printf ("NOT resuming LWP %s, not resumed", + target_pid_to_str (lp->ptid).c_str ()); } else if (lwp_status_pending_p (lp)) { - if (debug_linux_nat) - fprintf_unfiltered (gdb_stdlog, - "RSRL: NOT resuming LWP %s, has pending status\n", - target_pid_to_str (lp->ptid).c_str ()); + linux_nat_debug_printf ("NOT resuming LWP %s, has pending status", + target_pid_to_str (lp->ptid).c_str ()); } else { - struct regcache *regcache = get_thread_regcache (lp->ptid); + struct regcache *regcache = get_thread_regcache (linux_target, lp->ptid); struct gdbarch *gdbarch = regcache->arch (); try @@ -3535,13 +3392,10 @@ if (!leave_stopped) { - if (debug_linux_nat) - fprintf_unfiltered (gdb_stdlog, - "RSRL: resuming stopped-resumed LWP %s at " - "%s: step=%d\n", - target_pid_to_str (lp->ptid).c_str (), - paddress (gdbarch, pc), - lp->step); + linux_nat_debug_printf + ("resuming stopped-resumed LWP %s at %s: step=%d", + target_pid_to_str (lp->ptid).c_str (), paddress (gdbarch, pc), + lp->step); linux_resume_one_lwp_throw (lp, lp->step, GDB_SIGNAL_0); } @@ -3562,14 +3416,8 @@ { ptid_t event_ptid; - if (debug_linux_nat) - { - std::string options_string = target_options_to_string (target_options); - fprintf_unfiltered (gdb_stdlog, - "linux_nat_wait: [%s], [%s]\n", - target_pid_to_str (ptid).c_str (), - options_string.c_str ()); - } + linux_nat_debug_printf ("[%s], [%s]", target_pid_to_str (ptid).c_str (), + target_options_to_string (target_options).c_str ()); /* Flush the async file first. */ if (target_is_async_p ()) @@ -3612,13 +3460,14 @@ errno = 0; kill_lwp (pid, SIGKILL); + if (debug_linux_nat) { int save_errno = errno; - fprintf_unfiltered (gdb_stdlog, - "KC: kill (SIGKILL) %ld, 0, 0 (%s)\n", (long) pid, - save_errno ? safe_strerror (save_errno) : "OK"); + linux_nat_debug_printf + ("kill (SIGKILL) %ld, 0, 0 (%s)", (long) pid, + save_errno != 0 ? safe_strerror (save_errno) : "OK"); } /* Some kernels ignore even SIGKILL for processes under ptrace. */ @@ -3629,9 +3478,9 @@ { int save_errno = errno; - fprintf_unfiltered (gdb_stdlog, - "KC: PTRACE_KILL %ld, 0, 0 (%s)\n", (long) pid, - save_errno ? safe_strerror (save_errno) : "OK"); + linux_nat_debug_printf + ("PTRACE_KILL %ld, 0, 0 (%s)", (long) pid, + save_errno ? safe_strerror (save_errno) : "OK"); } } @@ -3651,10 +3500,8 @@ res = my_waitpid (pid, NULL, __WALL); if (res != (pid_t) -1) { - if (debug_linux_nat) - fprintf_unfiltered (gdb_stdlog, - "KWC: wait %ld received unknown.\n", - (long) pid); + linux_nat_debug_printf ("wait %ld received unknown.", (long) pid); + /* The Linux kernel sometimes fails to kill a thread completely after PTRACE_KILL; that goes from the stop point in do_fork out to the one in get_signal_to_deliver @@ -4165,7 +4012,7 @@ bool linux_nat_target::supports_non_stop () { - return 1; + return true; } /* to_always_non_stop_p implementation. */ @@ -4173,27 +4020,22 @@ bool linux_nat_target::always_non_stop_p () { - return 1; + return true; } -/* True if we want to support multi-process. To be removed when GDB - supports multi-exec. */ - -int linux_multi_process = 1; - bool linux_nat_target::supports_multi_process () { - return linux_multi_process; + return true; } bool linux_nat_target::supports_disable_randomization () { #ifdef HAVE_PERSONALITY - return 1; + return true; #else - return 0; + return false; #endif } @@ -4208,8 +4050,7 @@ int old_errno = errno; if (debug_linux_nat) - ui_file_write_async_safe (gdb_stdlog, - "sigchld\n", sizeof ("sigchld\n") - 1); + gdb_stdlog->write_async_safe ("sigchld\n", sizeof ("sigchld\n") - 1); if (signo == SIGCHLD && linux_nat_event_pipe[0] != -1) @@ -4224,7 +4065,7 @@ static void handle_target_event (int error, gdb_client_data client_data) { - inferior_event_handler (INF_REG_EVENT, NULL); + inferior_event_handler (INF_REG_EVENT); } /* Create/destroy the target events pipe. Returns previous state. */ @@ -4265,6 +4106,12 @@ return previous; } +int +linux_nat_target::async_wait_fd () +{ + return linux_nat_event_pipe[0]; +} + /* target_async implementation. */ void @@ -4297,19 +4144,14 @@ { if (!lwp->stopped) { - if (debug_linux_nat) - fprintf_unfiltered (gdb_stdlog, - "LNSL: running -> suspending %s\n", - target_pid_to_str (lwp->ptid).c_str ()); + linux_nat_debug_printf ("running -> suspending %s", + target_pid_to_str (lwp->ptid).c_str ()); if (lwp->last_resume_kind == resume_stop) { - if (debug_linux_nat) - fprintf_unfiltered (gdb_stdlog, - "linux-nat: already stopping LWP %ld at " - "GDB's request\n", - lwp->ptid.lwp ()); + linux_nat_debug_printf ("already stopping LWP %ld at GDB's request", + lwp->ptid.lwp ()); return 0; } @@ -4322,15 +4164,12 @@ if (debug_linux_nat) { - if (find_thread_ptid (lwp->ptid)->stop_requested) - fprintf_unfiltered (gdb_stdlog, - "LNSL: already stopped/stop_requested %s\n", - target_pid_to_str (lwp->ptid).c_str ()); + if (find_thread_ptid (linux_target, lwp->ptid)->stop_requested) + linux_nat_debug_printf ("already stopped/stop_requested %s", + target_pid_to_str (lwp->ptid).c_str ()); else - fprintf_unfiltered (gdb_stdlog, - "LNSL: already stopped/no " - "stop_requested yet %s\n", - target_pid_to_str (lwp->ptid).c_str ()); + linux_nat_debug_printf ("already stopped/no stop_requested yet %s", + target_pid_to_str (lwp->ptid).c_str ()); } } return 0; @@ -4379,7 +4218,7 @@ pid = ptid.pid (); } - inf = find_inferior_pid (pid); + inf = find_inferior_pid (this, pid); gdb_assert (inf != NULL); return inf->aspace; } @@ -4535,8 +4374,9 @@ return inferior_ptid; } +void _initialize_linux_nat (); void -_initialize_linux_nat (void) +_initialize_linux_nat () { add_setshow_zuinteger_cmd ("lin-lwp", class_maintenance, &debug_linux_nat, _("\ diff -Nru gdb-9.1/gdb/linux-nat.h gdb-10.2/gdb/linux-nat.h --- gdb-9.1/gdb/linux-nat.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/linux-nat.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Native debugging support for GNU/Linux (LWP layer). - Copyright (C) 2000-2020 Free Software Foundation, Inc. + Copyright (C) 2000-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -88,6 +88,7 @@ bool supports_non_stop () override; bool always_non_stop_p () override; + int async_wait_fd () override; void async (int) override; void close () override; @@ -132,7 +133,7 @@ void post_attach (int) override; - int follow_fork (int, int) override; + bool follow_fork (bool, bool) override; std::vector<static_tracepoint_marker> static_tracepoint_markers_by_strid (const char *id) override; @@ -163,6 +164,10 @@ virtual void low_new_fork (struct lwp_info *parent, pid_t child_pid) {} + /* The method to call, if any, when a new clone event is detected. */ + virtual void low_new_clone (struct lwp_info *parent, pid_t child_lwp) + {} + /* The method to call, if any, when a process is no longer attached. */ virtual void low_forget_process (pid_t pid) @@ -228,7 +233,7 @@ /* When 'stopped' is set, this is where the lwp last stopped, with decr_pc_after_break already accounted for. If the LWP is - running, and stepping, this is the address at which the lwp was + running and stepping, this is the address at which the lwp was resumed (that is, it's the previous stop PC). If the LWP is running and not stepping, this is 0. */ CORE_ADDR stop_pc; @@ -237,7 +242,7 @@ int step; /* The reason the LWP last stopped, if we need to track it - (breakpoint, watchpoint, etc.) */ + (breakpoint, watchpoint, etc.). */ enum target_stop_reason stop_reason; /* On architectures where it is possible to know the data address of diff -Nru gdb-9.1/gdb/linux-nat-trad.c gdb-10.2/gdb/linux-nat-trad.c --- gdb-9.1/gdb/linux-nat-trad.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/linux-nat-trad.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Generic GNU/Linux target using traditional ptrace register access. - Copyright (C) 1988-2020 Free Software Foundation, Inc. + Copyright (C) 1988-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/linux-nat-trad.h gdb-10.2/gdb/linux-nat-trad.h --- gdb-9.1/gdb/linux-nat-trad.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/linux-nat-trad.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Generic GNU/Linux target using traditional ptrace register access. - Copyright (C) 2000-2020 Free Software Foundation, Inc. + Copyright (C) 2000-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/linux-record.c gdb-10.2/gdb/linux-record.c --- gdb-9.1/gdb/linux-record.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/linux-record.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Process record and replay target code for GNU/Linux. - Copyright (C) 2008-2020 Free Software Foundation, Inc. + Copyright (C) 2008-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/linux-record.h gdb-10.2/gdb/linux-record.h --- gdb-9.1/gdb/linux-record.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/linux-record.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Process record and replay target code for GNU/Linux. - Copyright (C) 2008-2020 Free Software Foundation, Inc. + Copyright (C) 2008-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/linux-tdep.c gdb-10.2/gdb/linux-tdep.c --- gdb-9.1/gdb/linux-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/linux-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for GNU/Linux, architecture independent. - Copyright (C) 2009-2020 Free Software Foundation, Inc. + Copyright (C) 2009-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -258,7 +258,7 @@ /* sival_t */ sigval_type = arch_composite_type (gdbarch, NULL, TYPE_CODE_UNION); - TYPE_NAME (sigval_type) = xstrdup ("sigval_t"); + sigval_type->set_name (xstrdup ("sigval_t")); append_composite_type_field (sigval_type, "sival_int", int_type); append_composite_type_field (sigval_type, "sival_ptr", void_ptr_type); @@ -352,7 +352,7 @@ /* struct siginfo */ siginfo_type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT); - TYPE_NAME (siginfo_type) = xstrdup ("siginfo"); + siginfo_type->set_name (xstrdup ("siginfo")); append_composite_type_field (siginfo_type, "si_signo", int_type); append_composite_type_field (siginfo_type, "si_errno", int_type); append_composite_type_field (siginfo_type, "si_code", int_type); @@ -701,22 +701,16 @@ if (!dump_p && private_p && offset == 0 && (filterflags & COREFILTER_ELF_HEADERS) != 0) { - /* Let's check if we have an ELF header. */ - gdb::unique_xmalloc_ptr<char> header; - int errcode; - /* Useful define specifying the size of the ELF magical header. */ #ifndef SELFMAG #define SELFMAG 4 #endif - /* Read the first SELFMAG bytes and check if it is ELFMAG. */ - if (target_read_string (addr, &header, SELFMAG, &errcode) == SELFMAG - && errcode == 0) + /* Let's check if we have an ELF header. */ + gdb_byte h[SELFMAG]; + if (target_read_memory (addr, h, SELFMAG) == 0) { - const char *h = header.get (); - /* The EI_MAG* and ELFMAG* constants come from <elf/common.h>. */ if (h[EI_MAG0] == ELFMAG0 && h[EI_MAG1] == ELFMAG1 @@ -732,6 +726,25 @@ return dump_p; } +/* As above, but return true only when we should dump the NT_FILE + entry. */ + +static int +dump_note_entry_p (filter_flags filterflags, const struct smaps_vmflags *v, + int maybe_private_p, int mapping_anon_p, int mapping_file_p, + const char *filename, ULONGEST addr, ULONGEST offset) +{ + /* vDSO and vsyscall mappings will end up in the core file. Don't + put them in the NT_FILE note. */ + if (strcmp ("[vdso]", filename) == 0 + || strcmp ("[vsyscall]", filename) == 0) + return 0; + + /* Otherwise, any other file-based mapping should be placed in the + note. */ + return filename != nullptr; +} + /* Implement the "info proc" command. */ static void @@ -1024,104 +1037,172 @@ } } -/* Implement "info proc mappings" for a corefile. */ +/* Implementation of `gdbarch_read_core_file_mappings', as defined in + gdbarch.h. + + This function reads the NT_FILE note (which BFD turns into the + section ".note.linuxcore.file"). The format of this note / section + is described as follows in the Linux kernel sources in + fs/binfmt_elf.c: + + long count -- how many files are mapped + long page_size -- units for file_ofs + array of [COUNT] elements of + long start + long end + long file_ofs + followed by COUNT filenames in ASCII: "FILE1" NUL "FILE2" NUL... + + CBFD is the BFD of the core file. + + PRE_LOOP_CB is the callback function to invoke prior to starting + the loop which processes individual entries. This callback will + only be executed after the note has been examined in enough + detail to verify that it's not malformed in some way. + + LOOP_CB is the callback function that will be executed once + for each mapping. */ static void -linux_core_info_proc_mappings (struct gdbarch *gdbarch, const char *args) +linux_read_core_file_mappings (struct gdbarch *gdbarch, + struct bfd *cbfd, + gdb::function_view<void (ULONGEST count)> + pre_loop_cb, + gdb::function_view<void (int num, + ULONGEST start, + ULONGEST end, + ULONGEST file_ofs, + const char *filename, + const void *other)> + loop_cb) { - asection *section; - ULONGEST count, page_size; - unsigned char *descdata, *filenames, *descend; - size_t note_size; - unsigned int addr_size_bits, addr_size; - struct gdbarch *core_gdbarch = gdbarch_from_bfd (core_bfd); - /* We assume this for reading 64-bit core files. */ + /* Ensure that ULONGEST is big enough for reading 64-bit core files. */ gdb_static_assert (sizeof (ULONGEST) >= 8); - section = bfd_get_section_by_name (core_bfd, ".note.linuxcore.file"); - if (section == NULL) - { - warning (_("unable to find mappings in core file")); - return; - } + /* It's not required that the NT_FILE note exists, so return silently + if it's not found. Beyond this point though, we'll complain + if problems are found. */ + asection *section = bfd_get_section_by_name (cbfd, ".note.linuxcore.file"); + if (section == nullptr) + return; - addr_size_bits = gdbarch_addr_bit (core_gdbarch); - addr_size = addr_size_bits / 8; - note_size = bfd_section_size (section); + unsigned int addr_size_bits = gdbarch_addr_bit (gdbarch); + unsigned int addr_size = addr_size_bits / 8; + size_t note_size = bfd_section_size (section); if (note_size < 2 * addr_size) - error (_("malformed core note - too short for header")); + { + warning (_("malformed core note - too short for header")); + return; + } - gdb::def_vector<unsigned char> contents (note_size); + gdb::def_vector<gdb_byte> contents (note_size); if (!bfd_get_section_contents (core_bfd, section, contents.data (), 0, note_size)) - error (_("could not get core note contents")); + { + warning (_("could not get core note contents")); + return; + } - descdata = contents.data (); - descend = descdata + note_size; + gdb_byte *descdata = contents.data (); + char *descend = (char *) descdata + note_size; if (descdata[note_size - 1] != '\0') - error (_("malformed note - does not end with \\0")); + { + warning (_("malformed note - does not end with \\0")); + return; + } - count = bfd_get (addr_size_bits, core_bfd, descdata); + ULONGEST count = bfd_get (addr_size_bits, core_bfd, descdata); descdata += addr_size; - page_size = bfd_get (addr_size_bits, core_bfd, descdata); + ULONGEST page_size = bfd_get (addr_size_bits, core_bfd, descdata); descdata += addr_size; if (note_size < 2 * addr_size + count * 3 * addr_size) - error (_("malformed note - too short for supplied file count")); - - printf_filtered (_("Mapped address spaces:\n\n")); - if (gdbarch_addr_bit (gdbarch) == 32) { - printf_filtered ("\t%10s %10s %10s %10s %s\n", - "Start Addr", - " End Addr", - " Size", " Offset", "objfile"); - } - else - { - printf_filtered (" %18s %18s %10s %10s %s\n", - "Start Addr", - " End Addr", - " Size", " Offset", "objfile"); + warning (_("malformed note - too short for supplied file count")); + return; } - filenames = descdata + count * 3 * addr_size; - while (--count > 0) - { - ULONGEST start, end, file_ofs; + char *filenames = (char *) descdata + count * 3 * addr_size; - if (filenames == descend) - error (_("malformed note - filenames end too early")); + /* Make sure that the correct number of filenames exist. Complain + if there aren't enough or are too many. */ + char *f = filenames; + for (int i = 0; i < count; i++) + { + if (f >= descend) + { + warning (_("malformed note - filename area is too small")); + return; + } + f += strnlen (f, descend - f) + 1; + } + /* Complain, but don't return early if the filename area is too big. */ + if (f != descend) + warning (_("malformed note - filename area is too big")); - start = bfd_get (addr_size_bits, core_bfd, descdata); + pre_loop_cb (count); + + for (int i = 0; i < count; i++) + { + ULONGEST start = bfd_get (addr_size_bits, core_bfd, descdata); descdata += addr_size; - end = bfd_get (addr_size_bits, core_bfd, descdata); + ULONGEST end = bfd_get (addr_size_bits, core_bfd, descdata); descdata += addr_size; - file_ofs = bfd_get (addr_size_bits, core_bfd, descdata); + ULONGEST file_ofs + = bfd_get (addr_size_bits, core_bfd, descdata) * page_size; descdata += addr_size; + char * filename = filenames; + filenames += strlen ((char *) filenames) + 1; - file_ofs *= page_size; + loop_cb (i, start, end, file_ofs, filename, nullptr); + } +} - if (gdbarch_addr_bit (gdbarch) == 32) - printf_filtered ("\t%10s %10s %10s %10s %s\n", - paddress (gdbarch, start), - paddress (gdbarch, end), - hex_string (end - start), - hex_string (file_ofs), - filenames); - else - printf_filtered (" %18s %18s %10s %10s %s\n", - paddress (gdbarch, start), - paddress (gdbarch, end), - hex_string (end - start), - hex_string (file_ofs), - filenames); +/* Implement "info proc mappings" for a corefile. */ - filenames += 1 + strlen ((char *) filenames); - } +static void +linux_core_info_proc_mappings (struct gdbarch *gdbarch, const char *args) +{ + linux_read_core_file_mappings (gdbarch, core_bfd, + [=] (ULONGEST count) + { + printf_filtered (_("Mapped address spaces:\n\n")); + if (gdbarch_addr_bit (gdbarch) == 32) + { + printf_filtered ("\t%10s %10s %10s %10s %s\n", + "Start Addr", + " End Addr", + " Size", " Offset", "objfile"); + } + else + { + printf_filtered (" %18s %18s %10s %10s %s\n", + "Start Addr", + " End Addr", + " Size", " Offset", "objfile"); + } + }, + [=] (int num, ULONGEST start, ULONGEST end, ULONGEST file_ofs, + const char *filename, const void *other) + { + if (gdbarch_addr_bit (gdbarch) == 32) + printf_filtered ("\t%10s %10s %10s %10s %s\n", + paddress (gdbarch, start), + paddress (gdbarch, end), + hex_string (end - start), + hex_string (file_ofs), + filename); + else + printf_filtered (" %18s %18s %10s %10s %s\n", + paddress (gdbarch, start), + paddress (gdbarch, end), + hex_string (end - start), + hex_string (file_ofs), + filename); + }); } /* Implement "info proc" for a corefile. */ @@ -1178,10 +1259,20 @@ const char *filename, void *data); +typedef int linux_dump_mapping_p_ftype (filter_flags filterflags, + const struct smaps_vmflags *v, + int maybe_private_p, + int mapping_anon_p, + int mapping_file_p, + const char *filename, + ULONGEST addr, + ULONGEST offset); + /* List memory regions in the inferior for a corefile. */ static int linux_find_memory_regions_full (struct gdbarch *gdbarch, + linux_dump_mapping_p_ftype *should_dump_mapping_p, linux_find_memory_region_ftype *func, void *obfd) { @@ -1332,9 +1423,10 @@ } if (has_anonymous) - should_dump_p = dump_mapping_p (filterflags, &v, priv, - mapping_anon_p, mapping_file_p, - filename, addr, offset); + should_dump_p = should_dump_mapping_p (filterflags, &v, priv, + mapping_anon_p, + mapping_file_p, + filename, addr, offset); else { /* Older Linux kernels did not support the "Anonymous:" counter. @@ -1398,22 +1490,11 @@ data.obfd = obfd; return linux_find_memory_regions_full (gdbarch, + dump_mapping_p, linux_find_memory_regions_thunk, &data); } -/* Determine which signal stopped execution. */ - -static int -find_signalled_thread (struct thread_info *info, void *data) -{ - if (info->suspend.stop_signal != GDB_SIGNAL_0 - && info->ptid.pid () == inferior_ptid.pid ()) - return 1; - - return 0; -} - /* This is used to pass information from linux_make_mappings_corefile_notes through linux_find_memory_regions_full. */ @@ -1493,7 +1574,9 @@ pack_long (buf, long_type, 1); obstack_grow (&data_obstack, buf, TYPE_LENGTH (long_type)); - linux_find_memory_regions_full (gdbarch, linux_make_mappings_callback, + linux_find_memory_regions_full (gdbarch, + dump_note_entry_p, + linux_make_mappings_callback, &mapping_data); if (mapping_data.file_count != 0) @@ -1618,8 +1701,8 @@ if (!gdbarch_get_siginfo_type_p (gdbarch)) return gdb::byte_vector (); - scoped_restore save_inferior_ptid = make_scoped_restore (&inferior_ptid); - inferior_ptid = thread->ptid; + scoped_restore_current_thread save_current_thread; + switch_to_thread (thread); siginfo_type = gdbarch_get_siginfo_type (gdbarch); @@ -1651,7 +1734,8 @@ { struct regcache *regcache; - regcache = get_thread_arch_regcache (info->ptid, args->gdbarch); + regcache = get_thread_arch_regcache (info->inf->process_target (), + info->ptid, args->gdbarch); target_fetch_registers (regcache, -1); gdb::byte_vector siginfo_data = linux_get_siginfo_data (info, args->gdbarch); @@ -1728,7 +1812,7 @@ /* Copying the program name. Only the basename matters. */ basename = lbasename (fname.get ()); - strncpy (p->pr_fname, basename, sizeof (p->pr_fname)); + strncpy (p->pr_fname, basename, sizeof (p->pr_fname) - 1); p->pr_fname[sizeof (p->pr_fname) - 1] = '\0'; infargs = get_inferior_args (); @@ -1738,7 +1822,7 @@ if (infargs != NULL) psargs = psargs + " " + infargs; - strncpy (p->pr_psargs, psargs.c_str (), sizeof (p->pr_psargs)); + strncpy (p->pr_psargs, psargs.c_str (), sizeof (p->pr_psargs) - 1); p->pr_psargs[sizeof (p->pr_psargs) - 1] = '\0'; xsnprintf (filename, sizeof (filename), "/proc/%d/stat", (int) pid); @@ -1860,6 +1944,30 @@ return 1; } +/* Find the signalled thread. In case there's more than one signalled + thread, prefer the current thread, if it is signalled. If no + thread was signalled, default to the current thread, unless it has + exited, in which case return NULL. */ + +static thread_info * +find_signalled_thread () +{ + thread_info *curr_thr = inferior_thread (); + if (curr_thr->state != THREAD_EXITED + && curr_thr->suspend.stop_signal != GDB_SIGNAL_0) + return curr_thr; + + for (thread_info *thr : current_inferior ()->non_exited_threads ()) + if (thr->suspend.stop_signal != GDB_SIGNAL_0) + return thr; + + /* Default to the current thread, unless it has exited. */ + if (curr_thr->state != THREAD_EXITED) + return curr_thr; + + return nullptr; +} + /* Build the note section for a corefile, and return it in a malloc buffer. */ @@ -1869,7 +1977,6 @@ struct linux_corefile_thread_data thread_args; struct elf_internal_linux_prpsinfo prpsinfo; char *note_data = NULL; - struct thread_info *curr_thr, *signalled_thr; if (! gdbarch_iterate_over_regset_sections_p (gdbarch)) return NULL; @@ -1897,26 +2004,21 @@ } /* Like the kernel, prefer dumping the signalled thread first. - "First thread" is what tools use to infer the signalled thread. - In case there's more than one signalled thread, prefer the - current thread, if it is signalled. */ - curr_thr = inferior_thread (); - if (curr_thr->suspend.stop_signal != GDB_SIGNAL_0) - signalled_thr = curr_thr; - else - { - signalled_thr = iterate_over_threads (find_signalled_thread, NULL); - if (signalled_thr == NULL) - signalled_thr = curr_thr; - } + "First thread" is what tools use to infer the signalled + thread. */ + thread_info *signalled_thr = find_signalled_thread (); thread_args.gdbarch = gdbarch; thread_args.obfd = obfd; thread_args.note_data = note_data; thread_args.note_size = note_size; - thread_args.stop_signal = signalled_thr->suspend.stop_signal; + if (signalled_thr != nullptr) + thread_args.stop_signal = signalled_thr->suspend.stop_signal; + else + thread_args.stop_signal = GDB_SIGNAL_0; - linux_corefile_thread (signalled_thr, &thread_args); + if (signalled_thr != nullptr) + linux_corefile_thread (signalled_thr, &thread_args); for (thread_info *thr : current_inferior ()->non_exited_threads ()) { if (thr == signalled_thr) @@ -2325,7 +2427,7 @@ "mmap" uses 64-bit off_t on x86_64 and 32-bit off_t on i386 and x32. */ struct value *mmap_val = find_function_in_inferior ("mmap64", &objf); struct value *addr_val; - struct gdbarch *gdbarch = get_objfile_arch (objf); + struct gdbarch *gdbarch = objf->arch (); CORE_ADDR retval; enum { @@ -2364,7 +2466,7 @@ struct objfile *objf; struct value *munmap_val = find_function_in_inferior ("munmap", &objf); struct value *retval_val; - struct gdbarch *gdbarch = get_objfile_arch (objf); + struct gdbarch *gdbarch = objf->arch (); LONGEST retval; enum { @@ -2471,6 +2573,7 @@ set_gdbarch_info_proc (gdbarch, linux_info_proc); set_gdbarch_core_info_proc (gdbarch, linux_core_info_proc); set_gdbarch_core_xfer_siginfo (gdbarch, linux_core_xfer_siginfo); + set_gdbarch_read_core_file_mappings (gdbarch, linux_read_core_file_mappings); set_gdbarch_find_memory_regions (gdbarch, linux_find_memory_regions); set_gdbarch_make_corefile_notes (gdbarch, linux_make_corefile_notes); set_gdbarch_has_shared_address_space (gdbarch, @@ -2485,8 +2588,9 @@ set_gdbarch_get_siginfo_type (gdbarch, linux_get_siginfo_type); } +void _initialize_linux_tdep (); void -_initialize_linux_tdep (void) +_initialize_linux_tdep () { linux_gdbarch_data_handle = gdbarch_data_register_post_init (init_linux_gdbarch_data); diff -Nru gdb-9.1/gdb/linux-tdep.h gdb-10.2/gdb/linux-tdep.h --- gdb-9.1/gdb/linux-tdep.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/linux-tdep.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for GNU/Linux, architecture independent. - Copyright (C) 2009-2020 Free Software Foundation, Inc. + Copyright (C) 2009-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/linux-thread-db.c gdb-10.2/gdb/linux-thread-db.c --- gdb-9.1/gdb/linux-thread-db.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/linux-thread-db.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* libthread_db assisted debugging support, generic parts. - Copyright (C) 1999-2020 Free Software Foundation, Inc. + Copyright (C) 1999-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -168,6 +168,9 @@ { struct thread_db_info *next; + /* The target this thread_db_info is bound to. */ + process_stratum_target *process_target; + /* Process id this object refers to. */ int pid; @@ -228,6 +231,7 @@ { struct thread_db_info *info = XCNEW (struct thread_db_info); + info->process_target = current_inferior ()->process_target (); info->pid = inferior_ptid.pid (); info->handle = handle; @@ -246,12 +250,12 @@ related to process PID, if any; NULL otherwise. */ static struct thread_db_info * -get_thread_db_info (int pid) +get_thread_db_info (process_stratum_target *targ, int pid) { struct thread_db_info *info; for (info = thread_db_list; info; info = info->next) - if (pid == info->pid) + if (targ == info->process_target && pid == info->pid) return info; return NULL; @@ -265,14 +269,14 @@ LIBTHREAD_DB_SO's dlopen'ed handle. */ static void -delete_thread_db_info (int pid) +delete_thread_db_info (process_stratum_target *targ, int pid) { struct thread_db_info *info, *info_prev; info_prev = NULL; for (info = thread_db_list; info; info_prev = info, info = info->next) - if (pid == info->pid) + if (targ == info->process_target && pid == info->pid) break; if (info == NULL) @@ -406,7 +410,7 @@ LWP. */ gdb_assert (ptid.lwp () != 0); - info = get_thread_db_info (ptid.pid ()); + info = get_thread_db_info (stopped->inf->process_target (), ptid.pid ()); /* Access an lwp we know is stopped. */ info->proc_handle.thread = stopped; @@ -422,7 +426,7 @@ thread_db_err_str (err)); /* Fill the cache. */ - tp = find_thread_ptid (ptid); + tp = find_thread_ptid (stopped->inf->process_target (), ptid); return record_thread (info, tp, ptid, &th, &ti); } @@ -434,12 +438,12 @@ { struct thread_db_info *info; - info = get_thread_db_info (child.pid ()); + info = get_thread_db_info (linux_target, child.pid ()); if (info == NULL) return 0; - thread_info *stopped = find_thread_ptid (parent); + thread_info *stopped = find_thread_ptid (linux_target, parent); thread_from_lwp (stopped, child); @@ -468,16 +472,17 @@ { struct bound_minimal_symbol version_msym; CORE_ADDR version_addr; - gdb::unique_xmalloc_ptr<char> version; - int err, got, retval = 0; + int got, retval = 0; version_msym = lookup_minimal_symbol (ver_symbol, NULL, NULL); if (version_msym.minsym == NULL) return 0; version_addr = BMSYMBOL_VALUE_ADDRESS (version_msym); - got = target_read_string (version_addr, &version, 32, &err); - if (err == 0 && memchr (version.get (), 0, got) == version.get () + got - 1) + gdb::unique_xmalloc_ptr<char> version + = target_read_string (version_addr, 32, &got); + if (version != nullptr + && memchr (version.get (), 0, got) == version.get () + got - 1) { int major, minor; @@ -684,13 +689,13 @@ to how GDB accesses TLS could result in this passing without exercising the calls it's supposed to. */ ptid_t ptid = ptid_t (tdb_testinfo->info->pid, ti.ti_lid, 0); - struct thread_info *thread_info = find_thread_ptid (ptid); + thread_info *thread_info = find_thread_ptid (linux_target, ptid); if (thread_info != NULL && thread_info->priv != NULL) { LOG ("; errno"); scoped_restore_current_thread restore_current_thread; - switch_to_thread (ptid); + switch_to_thread (thread_info); expression_up expr = parse_expression ("(int) errno"); struct value *val = evaluate_expression (expr.get ()); @@ -940,10 +945,8 @@ } /* The thread library was detected. Activate the thread_db target - if this is the first process using it. */ - if (thread_db_list->next == NULL) - push_target (&the_thread_db_target); - + for this process. */ + push_target (&the_thread_db_target); return true; } @@ -1013,7 +1016,8 @@ return true; /* This library "refused" to work on current inferior. */ - delete_thread_db_info (inferior_ptid.pid ()); + delete_thread_db_info (current_inferior ()->process_target (), + inferior_ptid.pid ()); return false; } @@ -1182,7 +1186,8 @@ { struct thread_db_info *info; - info = get_thread_db_info (inferior_ptid.pid ()); + info = get_thread_db_info (current_inferior ()->process_target (), + inferior_ptid.pid ()); if (info != NULL) return true; @@ -1349,7 +1354,7 @@ thread with this PTID, but it's marked exited, then the kernel reused the tid of an old thread. */ if (tp == NULL || tp->state == THREAD_EXITED) - tp = add_thread_with_info (ptid, priv); + tp = add_thread_with_info (info->process_target, ptid, priv); else tp->priv.reset (priv); @@ -1362,16 +1367,14 @@ void thread_db_target::detach (inferior *inf, int from_tty) { - delete_thread_db_info (inf->pid); + delete_thread_db_info (inf->process_target (), inf->pid); beneath ()->detach (inf, from_tty); /* NOTE: From this point on, inferior_ptid is null_ptid. */ - /* If there are no more processes using libpthread, detach the - thread_db target ops. */ - if (!thread_db_list) - unpush_target (this); + /* Detach the thread_db target from this inferior. */ + unpush_target (this); } ptid_t @@ -1380,7 +1383,10 @@ { struct thread_db_info *info; - ptid = beneath ()->wait (ptid, ourstatus, options); + process_stratum_target *beneath + = as_process_stratum_target (this->beneath ()); + + ptid = beneath->wait (ptid, ourstatus, options); switch (ourstatus->kind) { @@ -1391,7 +1397,7 @@ return ptid; } - info = get_thread_db_info (ptid.pid ()); + info = get_thread_db_info (beneath, ptid.pid ()); /* If this process isn't using thread_db, we're done. */ if (info == NULL) @@ -1401,15 +1407,14 @@ { /* New image, it may or may not end up using thread_db. Assume not unless we find otherwise. */ - delete_thread_db_info (ptid.pid ()); - if (!thread_db_list) - unpush_target (&the_thread_db_target); + delete_thread_db_info (beneath, ptid.pid ()); + unpush_target (this); return ptid; } /* Fill in the thread's user-level thread id and status. */ - thread_from_lwp (find_thread_ptid (ptid), ptid); + thread_from_lwp (find_thread_ptid (beneath, ptid), ptid); return ptid; } @@ -1417,13 +1422,15 @@ void thread_db_target::mourn_inferior () { - delete_thread_db_info (inferior_ptid.pid ()); + process_stratum_target *target_beneath + = as_process_stratum_target (this->beneath ()); + + delete_thread_db_info (target_beneath, inferior_ptid.pid ()); - beneath ()->mourn_inferior (); + target_beneath->mourn_inferior (); - /* Detach thread_db target ops. */ - if (!thread_db_list) - unpush_target (&the_thread_db_target); + /* Detach the thread_db target from this inferior. */ + unpush_target (this); } struct callback_data @@ -1488,7 +1495,7 @@ } ptid_t ptid (info->pid, ti.ti_lid); - tp = find_thread_ptid (ptid); + tp = find_thread_ptid (info->process_target, ptid); if (tp == NULL || tp->priv == NULL) record_thread (info, tp, ptid, th_p, &ti); @@ -1555,7 +1562,8 @@ struct thread_db_info *info; int i, loop; - info = get_thread_db_info (stopped->ptid.pid ()); + info = get_thread_db_info (stopped->inf->process_target (), + stopped->ptid.pid ()); /* Access an lwp we know is stopped. */ info->proc_handle.thread = stopped; @@ -1598,16 +1606,14 @@ for (inferior *inf : all_inferiors ()) { - struct thread_info *thread; - if (inf->pid == 0) continue; - info = get_thread_db_info (inf->pid); + info = get_thread_db_info (inf->process_target (), inf->pid); if (info == NULL) continue; - thread = any_live_thread_of_inferior (inf); + thread_info *thread = any_live_thread_of_inferior (inf); if (thread == NULL || thread->executing) continue; @@ -1622,7 +1628,7 @@ stop. That uses thread_db entry points that do not walk libpthread's thread list, so should be safe, as well as more efficient. */ - if (target_has_execution_1 (thread->ptid)) + if (thread->inf->has_execution ()) continue; thread_db_find_new_threads_1 (thread); @@ -1635,7 +1641,7 @@ std::string thread_db_target::pid_to_str (ptid_t ptid) { - struct thread_info *thread_info = find_thread_ptid (ptid); + thread_info *thread_info = find_thread_ptid (current_inferior (), ptid); if (thread_info != NULL && thread_info->priv != NULL) { @@ -1728,9 +1734,10 @@ CORE_ADDR offset) { struct thread_info *thread_info; - + process_stratum_target *beneath + = as_process_stratum_target (this->beneath ()); /* Find the matching thread. */ - thread_info = find_thread_ptid (ptid); + thread_info = find_thread_ptid (beneath, ptid); /* We may not have discovered the thread yet. */ if (thread_info != NULL && thread_info->priv == NULL) @@ -1740,7 +1747,7 @@ { td_err_e err; psaddr_t address; - thread_db_info *info = get_thread_db_info (ptid.pid ()); + thread_db_info *info = get_thread_db_info (beneath, ptid.pid ()); thread_db_thread_info *priv = get_thread_db_thread_info (thread_info); /* Finally, get the address of the variable. */ @@ -1799,7 +1806,7 @@ : (CORE_ADDR) (uintptr_t) address); } - return beneath ()->get_thread_local_address (ptid, lm, offset); + return beneath->get_thread_local_address (ptid, lm, offset); } /* Implement the to_get_ada_task_ptid target method for this target. */ @@ -1814,12 +1821,13 @@ void thread_db_target::resume (ptid_t ptid, int step, enum gdb_signal signo) { - struct thread_db_info *info; + process_stratum_target *beneath + = as_process_stratum_target (this->beneath ()); - if (ptid == minus_one_ptid) - info = get_thread_db_info (inferior_ptid.pid ()); - else - info = get_thread_db_info (ptid.pid ()); + thread_db_info *info + = get_thread_db_info (beneath, (ptid == minus_one_ptid + ? inferior_ptid.pid () + : ptid.pid ())); /* This workaround is only needed for child fork lwps stopped in a PTRACE_O_TRACEFORK event. When the inferior is resumed, the @@ -1827,7 +1835,7 @@ if (info) info->need_stale_parent_threads_check = 0; - beneath ()->resume (ptid, step, signo); + beneath->resume (ptid, step, signo); } /* std::sort helper function for info_auto_load_libthread_db, sort the @@ -1953,15 +1961,17 @@ if (inferior_pid == 0) error (_("No inferior running")); - info = get_thread_db_info (inferior_pid); + info = get_thread_db_info (current_inferior ()->process_target (), + inferior_pid); if (info == NULL) error (_("No libthread_db loaded")); check_thread_db (info, true); } +void _initialize_thread_db (); void -_initialize_thread_db (void) +_initialize_thread_db () { /* Defer loading of libthread_db.so until inferior is running. This allows gdb to load correct libthread_db for a given diff -Nru gdb-9.1/gdb/lm32-tdep.c gdb-10.2/gdb/lm32-tdep.c --- gdb-9.1/gdb/lm32-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/lm32-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,7 +1,7 @@ /* Target-dependent code for Lattice Mico32 processor, for GDB. Contributed by Jon Beniston <jon@beniston.com> - Copyright (C) 2009-2020 Free Software Foundation, Inc. + Copyright (C) 2009-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -81,7 +81,7 @@ return ((regnum >= SIM_LM32_R0_REGNUM) && (regnum <= SIM_LM32_RA_REGNUM)) || (regnum == SIM_LM32_PC_REGNUM); else if (group == system_reggroup) - return ((regnum >= SIM_LM32_EA_REGNUM) && (regnum <= SIM_LM32_BA_REGNUM)) + return ((regnum >= SIM_LM32_BA_REGNUM) && (regnum <= SIM_LM32_EA_REGNUM)) || ((regnum >= SIM_LM32_EID_REGNUM) && (regnum <= SIM_LM32_IP_REGNUM)); return default_register_reggroup_p (gdbarch, regnum, group); } @@ -258,7 +258,7 @@ ULONGEST val; /* Promote small integer types to int. */ - switch (TYPE_CODE (arg_type)) + switch (arg_type->code ()) { case TYPE_CODE_INT: case TYPE_CODE_BOOL: @@ -309,15 +309,15 @@ ULONGEST l; CORE_ADDR return_buffer; - if (TYPE_CODE (type) != TYPE_CODE_STRUCT - && TYPE_CODE (type) != TYPE_CODE_UNION - && TYPE_CODE (type) != TYPE_CODE_ARRAY && TYPE_LENGTH (type) <= 4) + if (type->code () != TYPE_CODE_STRUCT + && type->code () != TYPE_CODE_UNION + && type->code () != TYPE_CODE_ARRAY && TYPE_LENGTH (type) <= 4) { /* Return value is returned in a single register. */ regcache_cooked_read_unsigned (regcache, SIM_LM32_R1_REGNUM, &l); store_unsigned_integer (valbuf, TYPE_LENGTH (type), byte_order, l); } - else if ((TYPE_CODE (type) == TYPE_CODE_INT) && (TYPE_LENGTH (type) == 8)) + else if ((type->code () == TYPE_CODE_INT) && (TYPE_LENGTH (type) == 8)) { /* 64-bit values are returned in a register pair. */ regcache_cooked_read_unsigned (regcache, SIM_LM32_R1_REGNUM, &l); @@ -368,7 +368,7 @@ struct type *valtype, struct regcache *regcache, gdb_byte *readbuf, const gdb_byte *writebuf) { - enum type_code code = TYPE_CODE (valtype); + enum type_code code = valtype->code (); if (code == TYPE_CODE_STRUCT || code == TYPE_CODE_UNION @@ -549,8 +549,9 @@ return gdbarch; } +void _initialize_lm32_tdep (); void -_initialize_lm32_tdep (void) +_initialize_lm32_tdep () { register_gdbarch_init (bfd_arch_lm32, lm32_gdbarch_init); } diff -Nru gdb-9.1/gdb/location.c gdb-10.2/gdb/location.c --- gdb-9.1/gdb/location.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/location.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Data structures and API for event locations in GDB. - Copyright (C) 2013-2020 Free Software Foundation, Inc. + Copyright (C) 2013-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/location.h gdb-10.2/gdb/location.h --- gdb-9.1/gdb/location.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/location.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Data structures and API for event locations in GDB. - Copyright (C) 2013-2020 Free Software Foundation, Inc. + Copyright (C) 2013-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/m2-exp.c gdb-10.2/gdb/m2-exp.c --- gdb-9.1/gdb/m2-exp.c 2020-02-08 12:54:11.000000000 +0000 +++ gdb-10.2/gdb/m2-exp.c 2021-04-25 04:10:37.000000000 +0000 @@ -1,8 +1,9 @@ -/* A Bison parser, made by GNU Bison 3.0.4. */ +/* A Bison parser, made by GNU Bison 3.5.1. */ /* Bison implementation for Yacc-like parsers in C - Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc. + Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2020 Free Software Foundation, + Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -40,11 +41,14 @@ define necessary library symbols; they are noted "INFRINGES ON USER NAME SPACE" below. */ +/* Undocumented macros, especially those whose name start with YY_, + are private implementation details. Do not rely on them. */ + /* Identify Bison output. */ #define YYBISON 1 /* Bison version. */ -#define YYBISON_VERSION "3.0.4" +#define YYBISON_VERSION "3.5.1" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" @@ -61,8 +65,8 @@ -/* Copy the first part of user declarations. */ -#line 38 "m2-exp.y" /* yacc.c:339 */ +/* First part of user prologue. */ +#line 38 "m2-exp.y" #include "defs.h" @@ -101,13 +105,26 @@ static int number_sign = 1; -#line 105 "m2-exp.c.tmp" /* yacc.c:339 */ +#line 109 "m2-exp.c.tmp" +# ifndef YY_CAST +# ifdef __cplusplus +# define YY_CAST(Type, Val) static_cast<Type> (Val) +# define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast<Type> (Val) +# else +# define YY_CAST(Type, Val) ((Type) (Val)) +# define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val)) +# endif +# endif # ifndef YY_NULLPTRPTR -# if defined __cplusplus && 201103L <= __cplusplus -# define YY_NULLPTRPTR nullptr +# if defined __cplusplus +# if 201103L <= __cplusplus +# define YY_NULLPTRPTR nullptr +# else +# define YY_NULLPTRPTR 0 +# endif # else -# define YY_NULLPTRPTR 0 +# define YY_NULLPTRPTR ((void*)0) # endif # endif @@ -233,10 +250,9 @@ /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED - union YYSTYPE { -#line 82 "m2-exp.y" /* yacc.c:355 */ +#line 82 "m2-exp.y" LONGEST lval; ULONGEST ulval; @@ -253,9 +269,9 @@ int *ivec; -#line 257 "m2-exp.c.tmp" /* yacc.c:355 */ -}; +#line 273 "m2-exp.c.tmp" +}; typedef union YYSTYPE YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define YYSTYPE_IS_DECLARED 1 @@ -268,36 +284,81 @@ -/* Copy the second part of user declarations. */ -#line 274 "m2-exp.c.tmp" /* yacc.c:358 */ #ifdef short # undef short #endif -#ifdef YYTYPE_UINT8 -typedef YYTYPE_UINT8 yytype_uint8; -#else -typedef unsigned char yytype_uint8; +/* On compilers that do not define __PTRDIFF_MAX__ etc., make sure + <limits.h> and (if available) <stdint.h> are included + so that the code can choose integer types of a good width. */ + +#ifndef __PTRDIFF_MAX__ +# include <limits.h> /* INFRINGES ON USER NAME SPACE */ +# if defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__ +# include <stdint.h> /* INFRINGES ON USER NAME SPACE */ +# define YY_STDINT_H +# endif #endif -#ifdef YYTYPE_INT8 -typedef YYTYPE_INT8 yytype_int8; +/* Narrow types that promote to a signed type and that can represent a + signed or unsigned integer of at least N bits. In tables they can + save space and decrease cache pressure. Promoting to a signed type + helps avoid bugs in integer arithmetic. */ + +#ifdef __INT_LEAST8_MAX__ +typedef __INT_LEAST8_TYPE__ yytype_int8; +#elif defined YY_STDINT_H +typedef int_least8_t yytype_int8; #else typedef signed char yytype_int8; #endif -#ifdef YYTYPE_UINT16 -typedef YYTYPE_UINT16 yytype_uint16; +#ifdef __INT_LEAST16_MAX__ +typedef __INT_LEAST16_TYPE__ yytype_int16; +#elif defined YY_STDINT_H +typedef int_least16_t yytype_int16; +#else +typedef short yytype_int16; +#endif + +#if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__ +typedef __UINT_LEAST8_TYPE__ yytype_uint8; +#elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \ + && UINT_LEAST8_MAX <= INT_MAX) +typedef uint_least8_t yytype_uint8; +#elif !defined __UINT_LEAST8_MAX__ && UCHAR_MAX <= INT_MAX +typedef unsigned char yytype_uint8; #else -typedef unsigned short int yytype_uint16; +typedef short yytype_uint8; #endif -#ifdef YYTYPE_INT16 -typedef YYTYPE_INT16 yytype_int16; +#if defined __UINT_LEAST16_MAX__ && __UINT_LEAST16_MAX__ <= __INT_MAX__ +typedef __UINT_LEAST16_TYPE__ yytype_uint16; +#elif (!defined __UINT_LEAST16_MAX__ && defined YY_STDINT_H \ + && UINT_LEAST16_MAX <= INT_MAX) +typedef uint_least16_t yytype_uint16; +#elif !defined __UINT_LEAST16_MAX__ && USHRT_MAX <= INT_MAX +typedef unsigned short yytype_uint16; #else -typedef short int yytype_int16; +typedef int yytype_uint16; +#endif + +#ifndef YYPTRDIFF_T +# if defined __PTRDIFF_TYPE__ && defined __PTRDIFF_MAX__ +# define YYPTRDIFF_T __PTRDIFF_TYPE__ +# define YYPTRDIFF_MAXIMUM __PTRDIFF_MAX__ +# elif defined PTRDIFF_MAX +# ifndef ptrdiff_t +# include <stddef.h> /* INFRINGES ON USER NAME SPACE */ +# endif +# define YYPTRDIFF_T ptrdiff_t +# define YYPTRDIFF_MAXIMUM PTRDIFF_MAX +# else +# define YYPTRDIFF_T long +# define YYPTRDIFF_MAXIMUM LONG_MAX +# endif #endif #ifndef YYSIZE_T @@ -305,15 +366,27 @@ # define YYSIZE_T __SIZE_TYPE__ # elif defined size_t # define YYSIZE_T size_t -# elif ! defined YYSIZE_T +# elif defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__ # include <stddef.h> /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # else -# define YYSIZE_T unsigned int +# define YYSIZE_T unsigned # endif #endif -#define YYSIZE_MAXIMUM ((YYSIZE_T) -1) +#define YYSIZE_MAXIMUM \ + YY_CAST (YYPTRDIFF_T, \ + (YYPTRDIFF_MAXIMUM < YY_CAST (YYSIZE_T, -1) \ + ? YYPTRDIFF_MAXIMUM \ + : YY_CAST (YYSIZE_T, -1))) + +#define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X)) + +/* Stored state numbers (used for stacks). */ +typedef yytype_uint8 yy_state_t; + +/* State numbers in computations. */ +typedef int yy_state_fast_t; #ifndef YY_ # if defined YYENABLE_NLS && YYENABLE_NLS @@ -327,30 +400,19 @@ # endif #endif -#ifndef YY_ATTRIBUTE -# if (defined __GNUC__ \ - && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__))) \ - || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C -# define YY_ATTRIBUTE(Spec) __attribute__(Spec) +#ifndef YY_ATTRIBUTE_PURE +# if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__) +# define YY_ATTRIBUTE_PURE __attribute__ ((__pure__)) # else -# define YY_ATTRIBUTE(Spec) /* empty */ +# define YY_ATTRIBUTE_PURE # endif #endif -#ifndef YY_ATTRIBUTE_PURE -# define YY_ATTRIBUTE_PURE YY_ATTRIBUTE ((__pure__)) -#endif - #ifndef YY_ATTRIBUTE_UNUSED -# define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__)) -#endif - -#if !defined _Noreturn \ - && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112) -# if defined _MSC_VER && 1200 <= _MSC_VER -# define _Noreturn __declspec (noreturn) +# if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__) +# define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__)) # else -# define _Noreturn YY_ATTRIBUTE ((__noreturn__)) +# define YY_ATTRIBUTE_UNUSED # endif #endif @@ -361,13 +423,13 @@ # define YYUSE(E) /* empty */ #endif -#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ +#if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ /* Suppress an incorrect diagnostic about yylval being uninitialized. */ -# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ - _Pragma ("GCC diagnostic push") \ - _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\ +# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ + _Pragma ("GCC diagnostic push") \ + _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \ _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") -# define YY_IGNORE_MAYBE_UNINITIALIZED_END \ +# define YY_IGNORE_MAYBE_UNINITIALIZED_END \ _Pragma ("GCC diagnostic pop") #else # define YY_INITIAL_VALUE(Value) Value @@ -380,6 +442,20 @@ # define YY_INITIAL_VALUE(Value) /* Nothing. */ #endif +#if defined __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__ +# define YY_IGNORE_USELESS_CAST_BEGIN \ + _Pragma ("GCC diagnostic push") \ + _Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"") +# define YY_IGNORE_USELESS_CAST_END \ + _Pragma ("GCC diagnostic pop") +#endif +#ifndef YY_IGNORE_USELESS_CAST_BEGIN +# define YY_IGNORE_USELESS_CAST_BEGIN +# define YY_IGNORE_USELESS_CAST_END +#endif + + +#define YY_ASSERT(E) ((void) (0 && (E))) #if ! defined yyoverflow || YYERROR_VERBOSE @@ -455,17 +531,17 @@ /* A type that is properly aligned for any stack member. */ union yyalloc { - yytype_int16 yyss_alloc; + yy_state_t yyss_alloc; YYSTYPE yyvs_alloc; }; /* The size of the maximum gap between one aligned stack and the next. */ -# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) +# define YYSTACK_GAP_MAXIMUM (YYSIZEOF (union yyalloc) - 1) /* The size of an array large to enough to hold all stacks, each with N elements. */ # define YYSTACK_BYTES(N) \ - ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ + ((N) * (YYSIZEOF (yy_state_t) + YYSIZEOF (YYSTYPE)) \ + YYSTACK_GAP_MAXIMUM) # define YYCOPY_NEEDED 1 @@ -478,11 +554,11 @@ # define YYSTACK_RELOCATE(Stack_alloc, Stack) \ do \ { \ - YYSIZE_T yynewbytes; \ + YYPTRDIFF_T yynewbytes; \ YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ Stack = &yyptr->Stack_alloc; \ - yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ - yyptr += yynewbytes / sizeof (*yyptr); \ + yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \ + yyptr += yynewbytes / YYSIZEOF (*yyptr); \ } \ while (0) @@ -494,12 +570,12 @@ # ifndef YYCOPY # if defined __GNUC__ && 1 < __GNUC__ # define YYCOPY(Dst, Src, Count) \ - __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src))) + __builtin_memcpy (Dst, Src, YY_CAST (YYSIZE_T, (Count)) * sizeof (*(Src))) # else # define YYCOPY(Dst, Src, Count) \ do \ { \ - YYSIZE_T yyi; \ + YYPTRDIFF_T yyi; \ for (yyi = 0; yyi < (Count); yyi++) \ (Dst)[yyi] = (Src)[yyi]; \ } \ @@ -511,28 +587,29 @@ /* YYFINAL -- State number of the termination state. */ #define YYFINAL 69 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 912 +#define YYLAST 890 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 69 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 15 /* YYNRULES -- Number of rules. */ -#define YYNRULES 82 +#define YYNRULES 81 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 187 +#define YYNSTATES 185 -/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned - by yylex, with out-of-bounds checking. */ #define YYUNDEFTOK 2 #define YYMAXUTOK 304 + +/* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM + as returned by yylex, with out-of-bounds checking. */ #define YYTRANSLATE(YYX) \ - ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) + (0 <= (YYX) && (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) /* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM - as returned by yylex, without out-of-bounds checking. */ -static const yytype_uint8 yytranslate[] = + as returned by yylex. */ +static const yytype_int8 yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -569,17 +646,17 @@ #if YYDEBUG /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ -static const yytype_uint16 yyrline[] = +static const yytype_int16 yyrline[] = { 0, 151, 151, 152, 155, 164, 169, 168, 175, 179, 183, 184, 187, 191, 195, 199, 203, 209, 215, 219, 225, 229, 233, 237, 241, 246, 250, 257, 261, 268, - 274, 277, 281, 285, 289, 291, 301, 297, 309, 316, - 313, 324, 327, 331, 336, 341, 346, 352, 358, 366, - 370, 374, 378, 382, 386, 390, 394, 398, 400, 404, - 408, 412, 416, 420, 424, 428, 435, 441, 447, 455, - 466, 476, 485, 488, 497, 504, 508, 518, 530, 538, - 542, 560, 599 + 274, 277, 281, 285, 289, 291, 301, 297, 315, 312, + 323, 326, 330, 335, 340, 345, 351, 357, 365, 369, + 373, 377, 381, 385, 389, 393, 397, 399, 403, 407, + 411, 415, 419, 423, 427, 434, 440, 446, 454, 465, + 475, 484, 487, 496, 503, 507, 517, 529, 537, 541, + 559, 598 }; #endif @@ -605,7 +682,7 @@ # ifdef YYPRINT /* YYTOKNUM[NUM] -- (External) token number corresponding to the (internal) symbol number NUM (which must be that of a token). */ -static const yytype_uint16 yytoknum[] = +static const yytype_int16 yytoknum[] = { 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, @@ -617,79 +694,79 @@ }; # endif -#define YYPACT_NINF -90 +#define YYPACT_NINF (-89) -#define yypact_value_is_default(Yystate) \ - (!!((Yystate) == (-90))) +#define yypact_value_is_default(Yyn) \ + ((Yyn) == YYPACT_NINF) -#define YYTABLE_NINF -76 +#define YYTABLE_NINF (-75) -#define yytable_value_is_error(Yytable_value) \ - (!!((Yytable_value) == (-76))) +#define yytable_value_is_error(Yyn) \ + ((Yyn) == YYTABLE_NINF) /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ static const yytype_int16 yypact[] = { - 163, -90, -90, -90, -90, -90, -90, -90, -90, -90, - -90, 224, -35, -28, -22, -18, 2, 8, 17, 28, - 30, 31, 32, 34, 35, 36, 38, 39, -90, 163, - -90, 163, -90, -90, 163, 27, -90, 807, 163, -90, - -6, -4, -90, -21, 163, 7, -21, 163, 163, 163, - 163, 85, 85, 163, 85, 163, 163, 163, 163, 163, - 163, 163, 163, 7, 163, 309, 807, -32, -42, -90, - 163, 163, 163, 163, 163, 163, 163, 163, -15, 163, - 163, 163, 163, 163, 163, 163, 163, 163, -90, 90, - 163, -90, 7, -5, 163, 163, -24, 337, 365, 393, - 421, -19, 42, 449, 67, 477, 505, 533, 561, 253, - 281, 757, 783, 7, -90, 163, -90, 163, 831, -38, - -38, -38, -38, -38, -38, -38, 163, -90, 43, 149, - 210, 842, 851, 851, 7, 7, 7, 7, -90, 83, - 163, 163, -90, -90, 589, -31, -90, -90, -90, -90, - -90, -90, -90, -90, 163, -90, -90, -90, -90, 163, - -90, 163, -90, 163, 163, 807, 7, -90, 807, -34, - -33, -90, -90, 617, 645, 673, 701, 729, 163, -90, - -90, -90, -90, -90, -90, -90, 807 + 161, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, 222, -55, -53, -28, -22, -18, 2, 8, 17, + 28, 29, 30, 31, 32, 34, 35, 36, -89, 161, + -89, 161, -89, -89, 161, 46, -89, 805, 161, -89, + -6, -4, -89, -21, 161, 7, -21, 161, 161, 161, + 161, 83, 83, 161, 83, 161, 161, 161, 161, 161, + 161, 161, 161, 7, 161, 307, 805, -32, -42, -89, + 161, 161, 161, 161, 161, 161, 161, 161, -15, 161, + 161, 161, 161, 161, 161, 161, 161, 161, -89, 88, + -89, -89, 7, 14, 161, 161, -24, 335, 363, 391, + 419, 37, 38, 447, 65, 475, 503, 531, 559, 251, + 279, 755, 781, 7, -89, 161, -89, 161, 829, -38, + -38, -38, -38, -38, -38, -38, 161, -89, 41, 68, + 90, 146, 205, 205, 7, 7, 7, 7, -89, 161, + 161, -89, -89, 587, -31, -89, -89, -89, -89, -89, + -89, -89, -89, 161, -89, -89, -89, -89, 161, -89, + 161, -89, 161, 161, 805, 7, 805, -34, -33, -89, + -89, 615, 643, 671, 699, 727, 161, -89, -89, -89, + -89, -89, -89, -89, 805 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. Performed when YYTABLE does not specify something else to do. Zero means the default is an error. */ -static const yytype_uint8 yydefact[] = +static const yytype_int8 yydefact[] = { - 0, 68, 69, 66, 67, 70, 71, 74, 81, 76, - 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, - 6, 0, 10, 11, 41, 0, 3, 2, 0, 30, - 0, 78, 72, 4, 0, 24, 0, 0, 0, 0, + 0, 67, 68, 65, 66, 69, 70, 73, 80, 75, + 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 78, 0, + 6, 0, 10, 11, 40, 0, 3, 2, 0, 30, + 0, 77, 71, 4, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 8, 0, 0, 42, 0, 0, 1, + 0, 0, 0, 8, 0, 0, 41, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, - 0, 39, 9, 0, 0, 41, 0, 0, 0, 0, + 36, 38, 9, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 7, 48, 0, 34, 0, 65, 61, - 62, 59, 60, 56, 57, 58, 41, 31, 0, 64, - 63, 49, 54, 55, 50, 51, 52, 53, 29, 0, - 0, 41, 80, 77, 0, 0, 73, 12, 13, 15, - 14, 16, 17, 18, 0, 20, 21, 22, 23, 0, - 25, 0, 27, 0, 0, 43, 46, 38, 44, 0, - 0, 47, 35, 0, 0, 0, 0, 0, 0, 37, - 40, 19, 26, 28, 32, 33, 45 + 0, 0, 0, 7, 47, 0, 34, 0, 64, 60, + 61, 58, 59, 55, 56, 57, 40, 31, 0, 63, + 62, 48, 53, 54, 49, 50, 51, 52, 29, 0, + 40, 79, 76, 0, 0, 72, 12, 13, 15, 14, + 16, 17, 18, 0, 20, 21, 22, 23, 0, 25, + 0, 27, 0, 0, 42, 45, 43, 0, 0, 46, + 35, 0, 0, 0, 0, 0, 0, 37, 39, 19, + 26, 28, 32, 33, 44 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int8 yypgoto[] = { - -90, -90, -90, 0, -90, -90, 26, -90, -90, -89, - -90, -90, -90, -90, 54 + -89, -89, -89, 0, -89, -89, 26, -89, -89, -88, + -89, -89, -89, -89, 54 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - -1, 35, 36, 66, 64, 38, 39, 140, 141, 67, - 169, 40, 41, 42, 46 + -1, 35, 36, 66, 64, 38, 39, 139, 140, 67, + 167, 40, 41, 42, 46 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -697,137 +774,132 @@ number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_int16 yytable[] = { - 37, 10, 178, 115, 115, 115, 145, 142, 143, 79, + 37, 10, 176, 115, 115, 115, 47, 144, 48, 79, 80, 45, 81, 82, 83, 84, 85, 86, 87, 94, - 88, 89, 90, 91, 95, 117, 47, 69, 93, 63, - -75, 65, 180, 48, 179, 116, 172, 94, 92, 49, - 94, 146, 95, 50, 65, 95, 151, 97, 98, 99, - 100, 126, 170, 103, 43, 105, 106, 107, 108, 109, - 110, 111, 112, 51, 113, 88, 89, 90, 91, 52, - 118, 119, 120, 121, 122, 123, 124, 125, 53, 129, - 130, 131, 132, 133, 134, 135, 136, 137, 68, 54, - 139, 55, 56, 57, 144, 58, 59, 60, 96, 61, - 62, 10, 138, 154, 127, 101, 102, 152, 104, 95, - 0, 0, 0, 0, 0, 165, 0, 166, 0, 0, - 0, 70, 71, 72, 73, 74, 75, 76, 77, 78, - 79, 80, 128, 81, 82, 83, 84, 85, 86, 87, - 168, 88, 89, 90, 91, 0, 0, 0, 0, 0, - 0, 167, 0, 0, 173, 0, 0, 0, 0, 174, - 0, 175, 0, 176, 177, 0, 1, 0, 0, 2, - 3, 4, 5, 6, 7, 8, 9, 0, 186, 10, - 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, - 21, 22, 23, 24, 25, 26, 27, 80, 28, 81, - 82, 83, 84, 85, 86, 87, 0, 88, 89, 90, - 91, 0, 0, 0, 29, 30, 0, 0, 0, 0, - 0, 0, 0, 0, 31, 32, 33, 1, 0, 34, - 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, - 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, - 20, 21, 22, 23, 24, 25, 26, 27, 0, 28, + 88, 89, 90, 91, 95, 117, 141, 142, 93, 63, + -74, 65, 178, 49, 177, 116, 170, 94, 92, 50, + 94, 145, 95, 51, 65, 95, 69, 97, 98, 99, + 100, 126, 168, 103, 43, 105, 106, 107, 108, 109, + 110, 111, 112, 52, 113, 88, 89, 90, 91, 53, + 118, 119, 120, 121, 122, 123, 124, 125, 54, 129, + 130, 131, 132, 133, 134, 135, 136, 137, 68, 55, + 56, 57, 58, 59, 143, 60, 61, 62, 96, 10, + 138, 153, 150, 151, 127, 101, 102, 95, 104, 0, + 0, 0, 0, 0, 0, 164, 80, 165, 81, 82, + 83, 84, 85, 86, 87, 0, 88, 89, 90, 91, + 0, 0, 128, 0, 0, 0, 0, 0, 0, 166, 81, 82, 83, 84, 85, 86, 87, 0, 88, 89, - 90, 91, 0, 0, 0, 29, 30, 0, 0, 0, - 0, 0, 0, 0, 0, 44, 32, 33, 0, 159, - 34, 70, 71, 72, 73, 74, 75, 76, 77, 78, - 79, 80, 0, 81, 82, 83, 84, 85, 86, 87, - 0, 88, 89, 90, 91, 0, 0, 161, 160, 70, + 90, 91, 0, 171, 0, 0, 0, 0, 172, 0, + 173, 0, 174, 175, 1, 0, 0, 2, 3, 4, + 5, 6, 7, 8, 9, 0, 184, 10, 11, 12, + 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, + 23, 24, 25, 26, 27, 0, 28, 82, 83, 84, + 85, 86, 87, 0, 88, 89, 90, 91, 0, 0, + 0, 0, 29, 30, 0, 0, 0, 0, 0, 0, + 0, 0, 31, 32, 33, 1, 0, 34, 2, 3, + 4, 5, 6, 7, 8, 9, 0, 0, 10, 11, + 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, + 22, 23, 24, 25, 26, 27, 0, 28, 84, 85, + 86, 87, 0, 88, 89, 90, 91, 0, 0, 0, + 0, 0, 0, 29, 30, 0, 0, 0, 0, 0, + 0, 0, 0, 44, 32, 33, 0, 158, 34, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 0, 81, 82, 83, 84, 85, 86, 87, 0, 88, - 89, 90, 91, 0, 0, 0, 162, 70, 71, 72, + 89, 90, 91, 0, 0, 160, 159, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 0, 81, 82, 83, 84, 85, 86, 87, 0, 88, 89, 90, - 91, 0, 0, 0, 114, 70, 71, 72, 73, 74, + 91, 0, 0, 0, 161, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 0, 81, 82, 83, 84, 85, 86, 87, 0, 88, 89, 90, 91, 0, - 0, 0, 147, 70, 71, 72, 73, 74, 75, 76, + 0, 0, 114, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 0, 81, 82, 83, 84, 85, 86, 87, 0, 88, 89, 90, 91, 0, 0, 0, - 148, 70, 71, 72, 73, 74, 75, 76, 77, 78, + 146, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 0, 81, 82, 83, 84, 85, 86, 87, - 0, 88, 89, 90, 91, 0, 0, 0, 149, 70, + 0, 88, 89, 90, 91, 0, 0, 0, 147, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 0, 81, 82, 83, 84, 85, 86, 87, 0, 88, - 89, 90, 91, 0, 0, 0, 150, 70, 71, 72, + 89, 90, 91, 0, 0, 0, 148, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 0, 81, 82, 83, 84, 85, 86, 87, 0, 88, 89, 90, - 91, 0, 0, 0, 153, 70, 71, 72, 73, 74, + 91, 0, 0, 0, 149, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 0, 81, 82, 83, 84, 85, 86, 87, 0, 88, 89, 90, 91, 0, - 0, 0, 155, 70, 71, 72, 73, 74, 75, 76, + 0, 0, 152, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 0, 81, 82, 83, 84, 85, 86, 87, 0, 88, 89, 90, 91, 0, 0, 0, - 156, 70, 71, 72, 73, 74, 75, 76, 77, 78, + 154, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 0, 81, 82, 83, 84, 85, 86, 87, - 0, 88, 89, 90, 91, 0, 0, 0, 157, 70, + 0, 88, 89, 90, 91, 0, 0, 0, 155, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 0, 81, 82, 83, 84, 85, 86, 87, 0, 88, - 89, 90, 91, 0, 0, 0, 158, 70, 71, 72, + 89, 90, 91, 0, 0, 0, 156, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 0, 81, 82, 83, 84, 85, 86, 87, 0, 88, 89, 90, - 91, 0, 0, 0, 171, 70, 71, 72, 73, 74, + 91, 0, 0, 0, 157, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 0, 81, 82, 83, 84, 85, 86, 87, 0, 88, 89, 90, 91, 0, - 0, 0, 181, 70, 71, 72, 73, 74, 75, 76, + 0, 0, 169, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 0, 81, 82, 83, 84, 85, 86, 87, 0, 88, 89, 90, 91, 0, 0, 0, - 182, 70, 71, 72, 73, 74, 75, 76, 77, 78, + 179, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 0, 81, 82, 83, 84, 85, 86, 87, - 0, 88, 89, 90, 91, 0, 0, 0, 183, 70, + 0, 88, 89, 90, 91, 0, 0, 0, 180, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 0, 81, 82, 83, 84, 85, 86, 87, 0, 88, - 89, 90, 91, 0, 0, 0, 184, 70, 71, 72, + 89, 90, 91, 0, 0, 0, 181, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 0, 81, 82, 83, 84, 85, 86, 87, 0, 88, 89, 90, - 91, 0, 0, 163, 185, 70, 71, 72, 73, 74, + 91, 0, 0, 0, 182, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 0, 81, 82, 83, - 84, 85, 86, 87, 0, 88, 89, 90, 91, 164, - 0, 70, 71, 72, 73, 74, 75, 76, 77, 78, - 79, 80, 0, 81, 82, 83, 84, 85, 86, 87, - 0, 88, 89, 90, 91, 70, 71, 72, 73, 74, - 75, 76, 77, 78, 79, 80, 0, 81, 82, 83, - 84, 85, 86, 87, 0, 88, 89, 90, 91, -76, + 84, 85, 86, 87, 0, 88, 89, 90, 91, 0, + 0, 162, 183, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 0, 81, 82, 83, 84, 85, + 86, 87, 0, 88, 89, 90, 91, 163, 0, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 0, 81, 82, 83, 84, 85, 86, 87, 0, 88, - 89, 90, 91, 82, 83, 84, 85, 86, 87, 0, - 88, 89, 90, 91, 84, 85, 86, 87, 0, 88, - 89, 90, 91 + 89, 90, 91, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 0, 81, 82, 83, 84, 85, + 86, 87, 0, 88, 89, 90, 91, -75, 71, 72, + 73, 74, 75, 76, 77, 78, 79, 80, 0, 81, + 82, 83, 84, 85, 86, 87, 0, 88, 89, 90, + 91 }; static const yytype_int16 yycheck[] = { - 0, 16, 36, 36, 36, 36, 95, 12, 13, 47, + 0, 16, 36, 36, 36, 36, 61, 95, 61, 47, 48, 11, 50, 51, 52, 53, 54, 55, 56, 61, - 58, 59, 60, 61, 66, 67, 61, 0, 34, 29, + 58, 59, 60, 61, 66, 67, 12, 13, 34, 29, 34, 31, 65, 61, 68, 67, 67, 61, 38, 61, - 61, 65, 66, 61, 44, 66, 65, 47, 48, 49, - 50, 66, 141, 53, 0, 55, 56, 57, 58, 59, + 61, 65, 66, 61, 44, 66, 0, 47, 48, 49, + 50, 66, 140, 53, 0, 55, 56, 57, 58, 59, 60, 61, 62, 61, 64, 58, 59, 60, 61, 61, 70, 71, 72, 73, 74, 75, 76, 77, 61, 79, 80, 81, 82, 83, 84, 85, 86, 87, 34, 61, - 90, 61, 61, 61, 94, 61, 61, 61, 44, 61, - 61, 16, 12, 36, 78, 51, 52, 65, 54, 66, - -1, -1, -1, -1, -1, 115, -1, 117, -1, -1, - -1, 38, 39, 40, 41, 42, 43, 44, 45, 46, - 47, 48, 78, 50, 51, 52, 53, 54, 55, 56, - 140, 58, 59, 60, 61, -1, -1, -1, -1, -1, - -1, 68, -1, -1, 154, -1, -1, -1, -1, 159, - -1, 161, -1, 163, 164, -1, 3, -1, -1, 6, - 7, 8, 9, 10, 11, 12, 13, -1, 178, 16, - 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, - 27, 28, 29, 30, 31, 32, 33, 48, 35, 50, - 51, 52, 53, 54, 55, 56, -1, 58, 59, 60, - 61, -1, -1, -1, 51, 52, -1, -1, -1, -1, - -1, -1, -1, -1, 61, 62, 63, 3, -1, 66, - 6, 7, 8, 9, 10, 11, 12, 13, -1, -1, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, - 26, 27, 28, 29, 30, 31, 32, 33, -1, 35, + 61, 61, 61, 61, 94, 61, 61, 61, 44, 16, + 12, 36, 65, 65, 78, 51, 52, 66, 54, -1, + -1, -1, -1, -1, -1, 115, 48, 117, 50, 51, + 52, 53, 54, 55, 56, -1, 58, 59, 60, 61, + -1, -1, 78, -1, -1, -1, -1, -1, -1, 139, 50, 51, 52, 53, 54, 55, 56, -1, 58, 59, - 60, 61, -1, -1, -1, 51, 52, -1, -1, -1, - -1, -1, -1, -1, -1, 61, 62, 63, -1, 36, - 66, 38, 39, 40, 41, 42, 43, 44, 45, 46, - 47, 48, -1, 50, 51, 52, 53, 54, 55, 56, - -1, 58, 59, 60, 61, -1, -1, 36, 65, 38, + 60, 61, -1, 153, -1, -1, -1, -1, 158, -1, + 160, -1, 162, 163, 3, -1, -1, 6, 7, 8, + 9, 10, 11, 12, 13, -1, 176, 16, 17, 18, + 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, + 29, 30, 31, 32, 33, -1, 35, 51, 52, 53, + 54, 55, 56, -1, 58, 59, 60, 61, -1, -1, + -1, -1, 51, 52, -1, -1, -1, -1, -1, -1, + -1, -1, 61, 62, 63, 3, -1, 66, 6, 7, + 8, 9, 10, 11, 12, 13, -1, -1, 16, 17, + 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, + 28, 29, 30, 31, 32, 33, -1, 35, 53, 54, + 55, 56, -1, 58, 59, 60, 61, -1, -1, -1, + -1, -1, -1, 51, 52, -1, -1, -1, -1, -1, + -1, -1, -1, 61, 62, 63, -1, 36, 66, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, -1, 50, 51, 52, 53, 54, 55, 56, -1, 58, - 59, 60, 61, -1, -1, -1, 65, 38, 39, 40, + 59, 60, 61, -1, -1, 36, 65, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, -1, 50, 51, 52, 53, 54, 55, 56, -1, 58, 59, 60, 61, -1, -1, -1, 65, 38, 39, 40, 41, 42, @@ -872,24 +944,25 @@ 59, 60, 61, -1, -1, -1, 65, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, -1, 50, 51, 52, 53, 54, 55, 56, -1, 58, 59, 60, - 61, -1, -1, 36, 65, 38, 39, 40, 41, 42, - 43, 44, 45, 46, 47, 48, -1, 50, 51, 52, - 53, 54, 55, 56, -1, 58, 59, 60, 61, 36, - -1, 38, 39, 40, 41, 42, 43, 44, 45, 46, - 47, 48, -1, 50, 51, 52, 53, 54, 55, 56, - -1, 58, 59, 60, 61, 38, 39, 40, 41, 42, + 61, -1, -1, -1, 65, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, -1, 50, 51, 52, - 53, 54, 55, 56, -1, 58, 59, 60, 61, 38, + 53, 54, 55, 56, -1, 58, 59, 60, 61, -1, + -1, 36, 65, 38, 39, 40, 41, 42, 43, 44, + 45, 46, 47, 48, -1, 50, 51, 52, 53, 54, + 55, 56, -1, 58, 59, 60, 61, 36, -1, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, -1, 50, 51, 52, 53, 54, 55, 56, -1, 58, - 59, 60, 61, 51, 52, 53, 54, 55, 56, -1, - 58, 59, 60, 61, 53, 54, 55, 56, -1, 58, - 59, 60, 61 + 59, 60, 61, 38, 39, 40, 41, 42, 43, 44, + 45, 46, 47, 48, -1, 50, 51, 52, 53, 54, + 55, 56, -1, 58, 59, 60, 61, 38, 39, 40, + 41, 42, 43, 44, 45, 46, 47, 48, -1, 50, + 51, 52, 53, 54, 55, 56, -1, 58, 59, 60, + 61 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ -static const yytype_uint8 yystos[] = +static const yytype_int8 yystos[] = { 0, 3, 6, 7, 8, 9, 10, 11, 12, 13, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, @@ -904,40 +977,40 @@ 72, 83, 83, 72, 83, 72, 72, 72, 72, 72, 72, 72, 72, 72, 65, 36, 67, 67, 72, 72, 72, 72, 72, 72, 72, 72, 66, 75, 83, 72, - 72, 72, 72, 72, 72, 72, 72, 72, 12, 72, - 76, 77, 12, 13, 72, 78, 65, 65, 65, 65, - 65, 65, 65, 65, 36, 65, 65, 65, 65, 36, - 65, 36, 65, 36, 36, 72, 72, 68, 72, 79, - 78, 65, 67, 72, 72, 72, 72, 72, 36, 68, - 65, 65, 65, 65, 65, 65, 72 + 72, 72, 72, 72, 72, 72, 72, 72, 12, 76, + 77, 12, 13, 72, 78, 65, 65, 65, 65, 65, + 65, 65, 65, 36, 65, 65, 65, 65, 36, 65, + 36, 65, 36, 36, 72, 72, 72, 79, 78, 65, + 67, 72, 72, 72, 72, 72, 36, 68, 65, 65, + 65, 65, 65, 65, 72 }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ -static const yytype_uint8 yyr1[] = +static const yytype_int8 yyr1[] = { 0, 69, 70, 70, 71, 72, 73, 72, 72, 72, 74, 74, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, - 72, 72, 72, 72, 75, 75, 76, 72, 72, 77, - 72, 78, 78, 78, 79, 79, 72, 72, 72, 72, + 72, 72, 72, 72, 75, 75, 76, 72, 77, 72, + 78, 78, 78, 79, 79, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, - 72, 72, 72, 72, 72, 80, 81, 81, 82, 82, - 82, 82, 83 + 72, 72, 72, 72, 80, 81, 81, 82, 82, 82, + 82, 83 }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ -static const yytype_uint8 yyr2[] = +static const yytype_int8 yyr2[] = { 0, 2, 1, 1, 1, 2, 0, 3, 2, 2, 1, 1, 4, 4, 4, 4, 4, 4, 4, 6, 4, 4, 4, 4, 2, 4, 6, 4, 6, 3, - 1, 3, 6, 6, 3, 4, 0, 5, 4, 0, - 5, 0, 1, 3, 1, 3, 4, 4, 3, 3, + 1, 3, 6, 6, 3, 4, 0, 5, 0, 5, + 0, 1, 3, 1, 3, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, - 1, 1, 1, 4, 1, 1, 1, 3, 1, 1, - 3, 1, 1 + 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, + 1, 1, 4, 1, 1, 1, 3, 1, 1, 3, + 1, 1 }; @@ -953,22 +1026,22 @@ #define YYRECOVERING() (!!yyerrstatus) -#define YYBACKUP(Token, Value) \ -do \ - if (yychar == YYEMPTY) \ - { \ - yychar = (Token); \ - yylval = (Value); \ - YYPOPSTACK (yylen); \ - yystate = *yyssp; \ - goto yybackup; \ - } \ - else \ - { \ - yyerror (YY_("syntax error: cannot back up")); \ - YYERROR; \ - } \ -while (0) +#define YYBACKUP(Token, Value) \ + do \ + if (yychar == YYEMPTY) \ + { \ + yychar = (Token); \ + yylval = (Value); \ + YYPOPSTACK (yylen); \ + yystate = *yyssp; \ + goto yybackup; \ + } \ + else \ + { \ + yyerror (YY_("syntax error: cannot back up")); \ + YYERROR; \ + } \ + while (0) /* Error token number */ #define YYTERROR 1 @@ -1008,37 +1081,39 @@ } while (0) -/*----------------------------------------. -| Print this symbol's value on YYOUTPUT. | -`----------------------------------------*/ +/*-----------------------------------. +| Print this symbol's value on YYO. | +`-----------------------------------*/ static void -yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) +yy_symbol_value_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep) { - FILE *yyo = yyoutput; - YYUSE (yyo); + FILE *yyoutput = yyo; + YYUSE (yyoutput); if (!yyvaluep) return; # ifdef YYPRINT if (yytype < YYNTOKENS) - YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); + YYPRINT (yyo, yytoknum[yytype], *yyvaluep); # endif + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN YYUSE (yytype); + YY_IGNORE_MAYBE_UNINITIALIZED_END } -/*--------------------------------. -| Print this symbol on YYOUTPUT. | -`--------------------------------*/ +/*---------------------------. +| Print this symbol on YYO. | +`---------------------------*/ static void -yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) +yy_symbol_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep) { - YYFPRINTF (yyoutput, "%s %s (", + YYFPRINTF (yyo, "%s %s (", yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]); - yy_symbol_value_print (yyoutput, yytype, yyvaluep); - YYFPRINTF (yyoutput, ")"); + yy_symbol_value_print (yyo, yytype, yyvaluep); + YYFPRINTF (yyo, ")"); } /*------------------------------------------------------------------. @@ -1047,7 +1122,7 @@ `------------------------------------------------------------------*/ static void -yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop) +yy_stack_print (yy_state_t *yybottom, yy_state_t *yytop) { YYFPRINTF (stderr, "Stack now"); for (; yybottom <= yytop; yybottom++) @@ -1070,20 +1145,20 @@ `------------------------------------------------*/ static void -yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule) +yy_reduce_print (yy_state_t *yyssp, YYSTYPE *yyvsp, int yyrule) { - unsigned long int yylno = yyrline[yyrule]; + int yylno = yyrline[yyrule]; int yynrhs = yyr2[yyrule]; int yyi; - YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", + YYFPRINTF (stderr, "Reducing stack by rule %d (line %d):\n", yyrule - 1, yylno); /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { YYFPRINTF (stderr, " $%d = ", yyi + 1); yy_symbol_print (stderr, - yystos[yyssp[yyi + 1 - yynrhs]], - &(yyvsp[(yyi + 1) - (yynrhs)]) + yystos[+yyssp[yyi + 1 - yynrhs]], + &yyvsp[(yyi + 1) - (yynrhs)] ); YYFPRINTF (stderr, "\n"); } @@ -1127,13 +1202,13 @@ # ifndef yystrlen # if defined __GLIBC__ && defined _STRING_H -# define yystrlen strlen +# define yystrlen(S) (YY_CAST (YYPTRDIFF_T, strlen (S))) # else /* Return the length of YYSTR. */ -static YYSIZE_T +static YYPTRDIFF_T yystrlen (const char *yystr) { - YYSIZE_T yylen; + YYPTRDIFF_T yylen; for (yylen = 0; yystr[yylen]; yylen++) continue; return yylen; @@ -1169,12 +1244,12 @@ backslash-backslash). YYSTR is taken from yytname. If YYRES is null, do not copy; instead, return the length of what the result would have been. */ -static YYSIZE_T +static YYPTRDIFF_T yytnamerr (char *yyres, const char *yystr) { if (*yystr == '"') { - YYSIZE_T yyn = 0; + YYPTRDIFF_T yyn = 0; char const *yyp = yystr; for (;;) @@ -1187,7 +1262,10 @@ case '\\': if (*++yyp != '\\') goto do_not_strip_quotes; - /* Fall through. */ + else + goto append; + + append: default: if (yyres) yyres[yyn] = *yyp; @@ -1202,10 +1280,10 @@ do_not_strip_quotes: ; } - if (! yyres) + if (yyres) + return yystpcpy (yyres, yystr) - yyres; + else return yystrlen (yystr); - - return yystpcpy (yyres, yystr) - yyres; } # endif @@ -1218,19 +1296,19 @@ *YYMSG_ALLOC to the required number of bytes. Return 2 if the required number of bytes is too large to store. */ static int -yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, - yytype_int16 *yyssp, int yytoken) +yysyntax_error (YYPTRDIFF_T *yymsg_alloc, char **yymsg, + yy_state_t *yyssp, int yytoken) { - YYSIZE_T yysize0 = yytnamerr (YY_NULLPTRPTR, yytname[yytoken]); - YYSIZE_T yysize = yysize0; enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; /* Internationalized format string. */ const char *yyformat = YY_NULLPTRPTR; - /* Arguments of yyformat. */ + /* Arguments of yyformat: reported tokens (one for the "unexpected", + one per "expected"). */ char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; - /* Number of reported tokens (one for the "unexpected", one per - "expected"). */ + /* Actual size of YYARG. */ int yycount = 0; + /* Cumulated lengths of YYARG. */ + YYPTRDIFF_T yysize = 0; /* There are many possibilities here to consider: - If this state is a consistent state with a default action, then @@ -1257,7 +1335,9 @@ */ if (yytoken != YYEMPTY) { - int yyn = yypact[*yyssp]; + int yyn = yypact[+*yyssp]; + YYPTRDIFF_T yysize0 = yytnamerr (YY_NULLPTRPTR, yytname[yytoken]); + yysize = yysize0; yyarg[yycount++] = yytname[yytoken]; if (!yypact_value_is_default (yyn)) { @@ -1282,11 +1362,12 @@ } yyarg[yycount++] = yytname[yyx]; { - YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTRPTR, yytname[yyx]); - if (! (yysize <= yysize1 - && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) + YYPTRDIFF_T yysize1 + = yysize + yytnamerr (YY_NULLPTRPTR, yytname[yyx]); + if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM) + yysize = yysize1; + else return 2; - yysize = yysize1; } } } @@ -1298,6 +1379,7 @@ case N: \ yyformat = S; \ break + default: /* Avoid compiler warnings. */ YYCASE_(0, YY_("syntax error")); YYCASE_(1, YY_("syntax error, unexpected %s")); YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); @@ -1308,10 +1390,13 @@ } { - YYSIZE_T yysize1 = yysize + yystrlen (yyformat); - if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) + /* Don't count the "%s"s in the final size, but reserve room for + the terminator. */ + YYPTRDIFF_T yysize1 = yysize + (yystrlen (yyformat) - 2 * yycount) + 1; + if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM) + yysize = yysize1; + else return 2; - yysize = yysize1; } if (*yymsg_alloc < yysize) @@ -1337,8 +1422,8 @@ } else { - yyp++; - yyformat++; + ++yyp; + ++yyformat; } } return 0; @@ -1381,7 +1466,7 @@ int yyparse (void) { - int yystate; + yy_state_fast_t yystate; /* Number of tokens to shift before error messages enabled. */ int yyerrstatus; @@ -1393,16 +1478,16 @@ to xreallocate them elsewhere. */ /* The state stack. */ - yytype_int16 yyssa[YYINITDEPTH]; - yytype_int16 *yyss; - yytype_int16 *yyssp; + yy_state_t yyssa[YYINITDEPTH]; + yy_state_t *yyss; + yy_state_t *yyssp; /* The semantic value stack. */ YYSTYPE yyvsa[YYINITDEPTH]; YYSTYPE *yyvs; YYSTYPE *yyvsp; - YYSIZE_T yystacksize; + YYPTRDIFF_T yystacksize; int yyn; int yyresult; @@ -1416,7 +1501,7 @@ /* Buffer for error messages, and its allocated size. */ char yymsgbuf[128]; char *yymsg = yymsgbuf; - YYSIZE_T yymsg_alloc = sizeof yymsgbuf; + YYPTRDIFF_T yymsg_alloc = sizeof yymsgbuf; #endif #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) @@ -1437,46 +1522,54 @@ yychar = YYEMPTY; /* Cause a token to be read. */ goto yysetstate; + /*------------------------------------------------------------. -| yynewstate -- Push a new state, which is found in yystate. | +| yynewstate -- push a new state, which is found in yystate. | `------------------------------------------------------------*/ - yynewstate: +yynewstate: /* In all cases, when you get here, the value and location stacks have just been pushed. So pushing a state here evens the stacks. */ yyssp++; - yysetstate: - *yyssp = yystate; + +/*--------------------------------------------------------------------. +| yysetstate -- set current state (the top of the stack) to yystate. | +`--------------------------------------------------------------------*/ +yysetstate: + YYDPRINTF ((stderr, "Entering state %d\n", yystate)); + YY_ASSERT (0 <= yystate && yystate < YYNSTATES); + YY_IGNORE_USELESS_CAST_BEGIN + *yyssp = YY_CAST (yy_state_t, yystate); + YY_IGNORE_USELESS_CAST_END if (yyss + yystacksize - 1 <= yyssp) +#if !defined yyoverflow && !defined YYSTACK_RELOCATE + goto yyexhaustedlab; +#else { /* Get the current used size of the three stacks, in elements. */ - YYSIZE_T yysize = yyssp - yyss + 1; + YYPTRDIFF_T yysize = yyssp - yyss + 1; -#ifdef yyoverflow +# if defined yyoverflow { /* Give user a chance to xreallocate the stack. Use copies of these so that the &'s don't force the real ones into memory. */ + yy_state_t *yyss1 = yyss; YYSTYPE *yyvs1 = yyvs; - yytype_int16 *yyss1 = yyss; /* Each stack pointer address is followed by the size of the data in use in that stack, in bytes. This used to be a conditional around just the two extra args, but that might be undefined if yyoverflow is a macro. */ yyoverflow (YY_("memory exhausted"), - &yyss1, yysize * sizeof (*yyssp), - &yyvs1, yysize * sizeof (*yyvsp), + &yyss1, yysize * YYSIZEOF (*yyssp), + &yyvs1, yysize * YYSIZEOF (*yyvsp), &yystacksize); - yyss = yyss1; yyvs = yyvs1; } -#else /* no yyoverflow */ -# ifndef YYSTACK_RELOCATE - goto yyexhaustedlab; -# else +# else /* defined YYSTACK_RELOCATE */ /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) goto yyexhaustedlab; @@ -1485,42 +1578,43 @@ yystacksize = YYMAXDEPTH; { - yytype_int16 *yyss1 = yyss; + yy_state_t *yyss1 = yyss; union yyalloc *yyptr = - (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); + YY_CAST (union yyalloc *, + YYSTACK_ALLOC (YY_CAST (YYSIZE_T, YYSTACK_BYTES (yystacksize)))); if (! yyptr) goto yyexhaustedlab; YYSTACK_RELOCATE (yyss_alloc, yyss); YYSTACK_RELOCATE (yyvs_alloc, yyvs); -# undef YYSTACK_RELOCATE +# undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); } # endif -#endif /* no yyoverflow */ yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; - YYDPRINTF ((stderr, "Stack size increased to %lu\n", - (unsigned long int) yystacksize)); + YY_IGNORE_USELESS_CAST_BEGIN + YYDPRINTF ((stderr, "Stack size increased to %ld\n", + YY_CAST (long, yystacksize))); + YY_IGNORE_USELESS_CAST_END if (yyss + yystacksize - 1 <= yyssp) YYABORT; } - - YYDPRINTF ((stderr, "Entering state %d\n", yystate)); +#endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */ if (yystate == YYFINAL) YYACCEPT; goto yybackup; + /*-----------. | yybackup. | `-----------*/ yybackup: - /* Do appropriate processing given the current state. Read a lookahead token if we need one and don't already have one. */ @@ -1570,15 +1664,13 @@ /* Shift the lookahead token. */ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); - - /* Discard the shifted token. */ - yychar = YYEMPTY; - yystate = yyn; YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; YY_IGNORE_MAYBE_UNINITIALIZED_END + /* Discard the shifted token. */ + yychar = YYEMPTY; goto yynewstate; @@ -1593,7 +1685,7 @@ /*-----------------------------. -| yyreduce -- Do a reduction. | +| yyreduce -- do a reduction. | `-----------------------------*/ yyreduce: /* yyn is the number of a rule to reduce with. */ @@ -1613,411 +1705,408 @@ YY_REDUCE_PRINT (yyn); switch (yyn) { - case 4: -#line 156 "m2-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, OP_TYPE); + case 4: +#line 156 "m2-exp.y" + { write_exp_elt_opcode (pstate, OP_TYPE); write_exp_elt_type (pstate, (yyvsp[0].tval)); write_exp_elt_opcode (pstate, OP_TYPE); } -#line 1624 "m2-exp.c.tmp" /* yacc.c:1646 */ +#line 1716 "m2-exp.c.tmp" break; case 5: -#line 165 "m2-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_IND); } -#line 1630 "m2-exp.c.tmp" /* yacc.c:1646 */ +#line 165 "m2-exp.y" + { write_exp_elt_opcode (pstate, UNOP_IND); } +#line 1722 "m2-exp.c.tmp" break; case 6: -#line 169 "m2-exp.y" /* yacc.c:1646 */ - { number_sign = -1; } -#line 1636 "m2-exp.c.tmp" /* yacc.c:1646 */ +#line 169 "m2-exp.y" + { number_sign = -1; } +#line 1728 "m2-exp.c.tmp" break; case 7: -#line 171 "m2-exp.y" /* yacc.c:1646 */ - { number_sign = 1; +#line 171 "m2-exp.y" + { number_sign = 1; write_exp_elt_opcode (pstate, UNOP_NEG); } -#line 1643 "m2-exp.c.tmp" /* yacc.c:1646 */ +#line 1735 "m2-exp.c.tmp" break; case 8: -#line 176 "m2-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_PLUS); } -#line 1649 "m2-exp.c.tmp" /* yacc.c:1646 */ +#line 176 "m2-exp.y" + { write_exp_elt_opcode (pstate, UNOP_PLUS); } +#line 1741 "m2-exp.c.tmp" break; case 9: -#line 180 "m2-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_LOGICAL_NOT); } -#line 1655 "m2-exp.c.tmp" /* yacc.c:1646 */ +#line 180 "m2-exp.y" + { write_exp_elt_opcode (pstate, UNOP_LOGICAL_NOT); } +#line 1747 "m2-exp.c.tmp" break; case 12: -#line 188 "m2-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_CAP); } -#line 1661 "m2-exp.c.tmp" /* yacc.c:1646 */ +#line 188 "m2-exp.y" + { write_exp_elt_opcode (pstate, UNOP_CAP); } +#line 1753 "m2-exp.c.tmp" break; case 13: -#line 192 "m2-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_ORD); } -#line 1667 "m2-exp.c.tmp" /* yacc.c:1646 */ +#line 192 "m2-exp.y" + { write_exp_elt_opcode (pstate, UNOP_ORD); } +#line 1759 "m2-exp.c.tmp" break; case 14: -#line 196 "m2-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_ABS); } -#line 1673 "m2-exp.c.tmp" /* yacc.c:1646 */ +#line 196 "m2-exp.y" + { write_exp_elt_opcode (pstate, UNOP_ABS); } +#line 1765 "m2-exp.c.tmp" break; case 15: -#line 200 "m2-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_HIGH); } -#line 1679 "m2-exp.c.tmp" /* yacc.c:1646 */ +#line 200 "m2-exp.y" + { write_exp_elt_opcode (pstate, UNOP_HIGH); } +#line 1771 "m2-exp.c.tmp" break; case 16: -#line 204 "m2-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_MIN); +#line 204 "m2-exp.y" + { write_exp_elt_opcode (pstate, UNOP_MIN); write_exp_elt_type (pstate, (yyvsp[-1].tval)); write_exp_elt_opcode (pstate, UNOP_MIN); } -#line 1687 "m2-exp.c.tmp" /* yacc.c:1646 */ +#line 1779 "m2-exp.c.tmp" break; case 17: -#line 210 "m2-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_MAX); +#line 210 "m2-exp.y" + { write_exp_elt_opcode (pstate, UNOP_MAX); write_exp_elt_type (pstate, (yyvsp[-1].tval)); write_exp_elt_opcode (pstate, UNOP_MAX); } -#line 1695 "m2-exp.c.tmp" /* yacc.c:1646 */ +#line 1787 "m2-exp.c.tmp" break; case 18: -#line 216 "m2-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_FLOAT); } -#line 1701 "m2-exp.c.tmp" /* yacc.c:1646 */ +#line 216 "m2-exp.y" + { write_exp_elt_opcode (pstate, UNOP_FLOAT); } +#line 1793 "m2-exp.c.tmp" break; case 19: -#line 220 "m2-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_VAL); +#line 220 "m2-exp.y" + { write_exp_elt_opcode (pstate, BINOP_VAL); write_exp_elt_type (pstate, (yyvsp[-3].tval)); write_exp_elt_opcode (pstate, BINOP_VAL); } -#line 1709 "m2-exp.c.tmp" /* yacc.c:1646 */ +#line 1801 "m2-exp.c.tmp" break; case 20: -#line 226 "m2-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_CHR); } -#line 1715 "m2-exp.c.tmp" /* yacc.c:1646 */ +#line 226 "m2-exp.y" + { write_exp_elt_opcode (pstate, UNOP_CHR); } +#line 1807 "m2-exp.c.tmp" break; case 21: -#line 230 "m2-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_ODD); } -#line 1721 "m2-exp.c.tmp" /* yacc.c:1646 */ +#line 230 "m2-exp.y" + { write_exp_elt_opcode (pstate, UNOP_ODD); } +#line 1813 "m2-exp.c.tmp" break; case 22: -#line 234 "m2-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_TRUNC); } -#line 1727 "m2-exp.c.tmp" /* yacc.c:1646 */ +#line 234 "m2-exp.y" + { write_exp_elt_opcode (pstate, UNOP_TRUNC); } +#line 1819 "m2-exp.c.tmp" break; case 23: -#line 238 "m2-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_SIZEOF); } -#line 1733 "m2-exp.c.tmp" /* yacc.c:1646 */ +#line 238 "m2-exp.y" + { write_exp_elt_opcode (pstate, UNOP_SIZEOF); } +#line 1825 "m2-exp.c.tmp" break; case 24: -#line 242 "m2-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_SIZEOF); } -#line 1739 "m2-exp.c.tmp" /* yacc.c:1646 */ +#line 242 "m2-exp.y" + { write_exp_elt_opcode (pstate, UNOP_SIZEOF); } +#line 1831 "m2-exp.c.tmp" break; case 25: -#line 247 "m2-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_PREINCREMENT); } -#line 1745 "m2-exp.c.tmp" /* yacc.c:1646 */ +#line 247 "m2-exp.y" + { write_exp_elt_opcode (pstate, UNOP_PREINCREMENT); } +#line 1837 "m2-exp.c.tmp" break; case 26: -#line 251 "m2-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_ASSIGN_MODIFY); +#line 251 "m2-exp.y" + { write_exp_elt_opcode (pstate, BINOP_ASSIGN_MODIFY); write_exp_elt_opcode (pstate, BINOP_ADD); write_exp_elt_opcode (pstate, BINOP_ASSIGN_MODIFY); } -#line 1754 "m2-exp.c.tmp" /* yacc.c:1646 */ +#line 1846 "m2-exp.c.tmp" break; case 27: -#line 258 "m2-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_PREDECREMENT);} -#line 1760 "m2-exp.c.tmp" /* yacc.c:1646 */ +#line 258 "m2-exp.y" + { write_exp_elt_opcode (pstate, UNOP_PREDECREMENT);} +#line 1852 "m2-exp.c.tmp" break; case 28: -#line 262 "m2-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_ASSIGN_MODIFY); +#line 262 "m2-exp.y" + { write_exp_elt_opcode (pstate, BINOP_ASSIGN_MODIFY); write_exp_elt_opcode (pstate, BINOP_SUB); write_exp_elt_opcode (pstate, BINOP_ASSIGN_MODIFY); } -#line 1769 "m2-exp.c.tmp" /* yacc.c:1646 */ +#line 1861 "m2-exp.c.tmp" break; case 29: -#line 269 "m2-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); +#line 269 "m2-exp.y" + { write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); write_exp_string (pstate, (yyvsp[0].sval)); write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); } -#line 1777 "m2-exp.c.tmp" /* yacc.c:1646 */ +#line 1869 "m2-exp.c.tmp" break; case 31: -#line 278 "m2-exp.y" /* yacc.c:1646 */ - { error (_("Sets are not implemented."));} -#line 1783 "m2-exp.c.tmp" /* yacc.c:1646 */ +#line 278 "m2-exp.y" + { error (_("Sets are not implemented."));} +#line 1875 "m2-exp.c.tmp" break; case 32: -#line 282 "m2-exp.y" /* yacc.c:1646 */ - { error (_("Sets are not implemented."));} -#line 1789 "m2-exp.c.tmp" /* yacc.c:1646 */ +#line 282 "m2-exp.y" + { error (_("Sets are not implemented."));} +#line 1881 "m2-exp.c.tmp" break; case 33: -#line 286 "m2-exp.y" /* yacc.c:1646 */ - { error (_("Sets are not implemented."));} -#line 1795 "m2-exp.c.tmp" /* yacc.c:1646 */ +#line 286 "m2-exp.y" + { error (_("Sets are not implemented."));} +#line 1887 "m2-exp.c.tmp" break; case 34: -#line 290 "m2-exp.y" /* yacc.c:1646 */ - { error (_("Sets are not implemented."));} -#line 1801 "m2-exp.c.tmp" /* yacc.c:1646 */ +#line 290 "m2-exp.y" + { error (_("Sets are not implemented."));} +#line 1893 "m2-exp.c.tmp" break; case 35: -#line 292 "m2-exp.y" /* yacc.c:1646 */ - { error (_("Sets are not implemented."));} -#line 1807 "m2-exp.c.tmp" /* yacc.c:1646 */ +#line 292 "m2-exp.y" + { error (_("Sets are not implemented."));} +#line 1899 "m2-exp.c.tmp" break; case 36: -#line 301 "m2-exp.y" /* yacc.c:1646 */ - { pstate->start_arglist(); } -#line 1813 "m2-exp.c.tmp" /* yacc.c:1646 */ +#line 301 "m2-exp.y" + { pstate->start_arglist(); } +#line 1905 "m2-exp.c.tmp" break; case 37: -#line 303 "m2-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, MULTI_SUBSCRIPT); +#line 303 "m2-exp.y" + { + gdb_assert (pstate->arglist_len > 0); + write_exp_elt_opcode (pstate, MULTI_SUBSCRIPT); write_exp_elt_longcst (pstate, pstate->end_arglist()); - write_exp_elt_opcode (pstate, MULTI_SUBSCRIPT); } -#line 1822 "m2-exp.c.tmp" /* yacc.c:1646 */ + write_exp_elt_opcode (pstate, MULTI_SUBSCRIPT); + } +#line 1917 "m2-exp.c.tmp" break; case 38: -#line 310 "m2-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_SUBSCRIPT); } -#line 1828 "m2-exp.c.tmp" /* yacc.c:1646 */ +#line 315 "m2-exp.y" + { pstate->start_arglist (); } +#line 1923 "m2-exp.c.tmp" break; case 39: -#line 316 "m2-exp.y" /* yacc.c:1646 */ - { pstate->start_arglist (); } -#line 1834 "m2-exp.c.tmp" /* yacc.c:1646 */ - break; - - case 40: -#line 318 "m2-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, OP_FUNCALL); +#line 317 "m2-exp.y" + { write_exp_elt_opcode (pstate, OP_FUNCALL); write_exp_elt_longcst (pstate, pstate->end_arglist ()); write_exp_elt_opcode (pstate, OP_FUNCALL); } -#line 1843 "m2-exp.c.tmp" /* yacc.c:1646 */ +#line 1932 "m2-exp.c.tmp" + break; + + case 41: +#line 327 "m2-exp.y" + { pstate->arglist_len = 1; } +#line 1938 "m2-exp.c.tmp" break; case 42: -#line 328 "m2-exp.y" /* yacc.c:1646 */ - { pstate->arglist_len = 1; } -#line 1849 "m2-exp.c.tmp" /* yacc.c:1646 */ +#line 331 "m2-exp.y" + { pstate->arglist_len++; } +#line 1944 "m2-exp.c.tmp" break; case 43: -#line 332 "m2-exp.y" /* yacc.c:1646 */ - { pstate->arglist_len++; } -#line 1855 "m2-exp.c.tmp" /* yacc.c:1646 */ +#line 336 "m2-exp.y" + { pstate->arglist_len = 1; } +#line 1950 "m2-exp.c.tmp" break; case 44: -#line 337 "m2-exp.y" /* yacc.c:1646 */ - { pstate->arglist_len = 1; } -#line 1861 "m2-exp.c.tmp" /* yacc.c:1646 */ +#line 341 "m2-exp.y" + { pstate->arglist_len++; } +#line 1956 "m2-exp.c.tmp" break; case 45: -#line 342 "m2-exp.y" /* yacc.c:1646 */ - { pstate->arglist_len++; } -#line 1867 "m2-exp.c.tmp" /* yacc.c:1646 */ - break; - - case 46: -#line 347 "m2-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_MEMVAL); +#line 346 "m2-exp.y" + { write_exp_elt_opcode (pstate, UNOP_MEMVAL); write_exp_elt_type (pstate, (yyvsp[-2].tval)); write_exp_elt_opcode (pstate, UNOP_MEMVAL); } -#line 1875 "m2-exp.c.tmp" /* yacc.c:1646 */ +#line 1964 "m2-exp.c.tmp" break; - case 47: -#line 353 "m2-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_CAST); + case 46: +#line 352 "m2-exp.y" + { write_exp_elt_opcode (pstate, UNOP_CAST); write_exp_elt_type (pstate, (yyvsp[-3].tval)); write_exp_elt_opcode (pstate, UNOP_CAST); } -#line 1883 "m2-exp.c.tmp" /* yacc.c:1646 */ +#line 1972 "m2-exp.c.tmp" + break; + + case 47: +#line 358 "m2-exp.y" + { } +#line 1978 "m2-exp.c.tmp" break; case 48: -#line 359 "m2-exp.y" /* yacc.c:1646 */ - { } -#line 1889 "m2-exp.c.tmp" /* yacc.c:1646 */ +#line 366 "m2-exp.y" + { write_exp_elt_opcode (pstate, BINOP_REPEAT); } +#line 1984 "m2-exp.c.tmp" break; case 49: -#line 367 "m2-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_REPEAT); } -#line 1895 "m2-exp.c.tmp" /* yacc.c:1646 */ +#line 370 "m2-exp.y" + { write_exp_elt_opcode (pstate, BINOP_MUL); } +#line 1990 "m2-exp.c.tmp" break; case 50: -#line 371 "m2-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_MUL); } -#line 1901 "m2-exp.c.tmp" /* yacc.c:1646 */ +#line 374 "m2-exp.y" + { write_exp_elt_opcode (pstate, BINOP_DIV); } +#line 1996 "m2-exp.c.tmp" break; case 51: -#line 375 "m2-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_DIV); } -#line 1907 "m2-exp.c.tmp" /* yacc.c:1646 */ +#line 378 "m2-exp.y" + { write_exp_elt_opcode (pstate, BINOP_INTDIV); } +#line 2002 "m2-exp.c.tmp" break; case 52: -#line 379 "m2-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_INTDIV); } -#line 1913 "m2-exp.c.tmp" /* yacc.c:1646 */ +#line 382 "m2-exp.y" + { write_exp_elt_opcode (pstate, BINOP_REM); } +#line 2008 "m2-exp.c.tmp" break; case 53: -#line 383 "m2-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_REM); } -#line 1919 "m2-exp.c.tmp" /* yacc.c:1646 */ +#line 386 "m2-exp.y" + { write_exp_elt_opcode (pstate, BINOP_ADD); } +#line 2014 "m2-exp.c.tmp" break; case 54: -#line 387 "m2-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_ADD); } -#line 1925 "m2-exp.c.tmp" /* yacc.c:1646 */ +#line 390 "m2-exp.y" + { write_exp_elt_opcode (pstate, BINOP_SUB); } +#line 2020 "m2-exp.c.tmp" break; case 55: -#line 391 "m2-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_SUB); } -#line 1931 "m2-exp.c.tmp" /* yacc.c:1646 */ +#line 394 "m2-exp.y" + { write_exp_elt_opcode (pstate, BINOP_EQUAL); } +#line 2026 "m2-exp.c.tmp" break; case 56: -#line 395 "m2-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_EQUAL); } -#line 1937 "m2-exp.c.tmp" /* yacc.c:1646 */ +#line 398 "m2-exp.y" + { write_exp_elt_opcode (pstate, BINOP_NOTEQUAL); } +#line 2032 "m2-exp.c.tmp" break; case 57: -#line 399 "m2-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_NOTEQUAL); } -#line 1943 "m2-exp.c.tmp" /* yacc.c:1646 */ +#line 400 "m2-exp.y" + { write_exp_elt_opcode (pstate, BINOP_NOTEQUAL); } +#line 2038 "m2-exp.c.tmp" break; case 58: -#line 401 "m2-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_NOTEQUAL); } -#line 1949 "m2-exp.c.tmp" /* yacc.c:1646 */ +#line 404 "m2-exp.y" + { write_exp_elt_opcode (pstate, BINOP_LEQ); } +#line 2044 "m2-exp.c.tmp" break; case 59: -#line 405 "m2-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_LEQ); } -#line 1955 "m2-exp.c.tmp" /* yacc.c:1646 */ +#line 408 "m2-exp.y" + { write_exp_elt_opcode (pstate, BINOP_GEQ); } +#line 2050 "m2-exp.c.tmp" break; case 60: -#line 409 "m2-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_GEQ); } -#line 1961 "m2-exp.c.tmp" /* yacc.c:1646 */ +#line 412 "m2-exp.y" + { write_exp_elt_opcode (pstate, BINOP_LESS); } +#line 2056 "m2-exp.c.tmp" break; case 61: -#line 413 "m2-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_LESS); } -#line 1967 "m2-exp.c.tmp" /* yacc.c:1646 */ +#line 416 "m2-exp.y" + { write_exp_elt_opcode (pstate, BINOP_GTR); } +#line 2062 "m2-exp.c.tmp" break; case 62: -#line 417 "m2-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_GTR); } -#line 1973 "m2-exp.c.tmp" /* yacc.c:1646 */ +#line 420 "m2-exp.y" + { write_exp_elt_opcode (pstate, BINOP_LOGICAL_AND); } +#line 2068 "m2-exp.c.tmp" break; case 63: -#line 421 "m2-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_LOGICAL_AND); } -#line 1979 "m2-exp.c.tmp" /* yacc.c:1646 */ +#line 424 "m2-exp.y" + { write_exp_elt_opcode (pstate, BINOP_LOGICAL_OR); } +#line 2074 "m2-exp.c.tmp" break; case 64: -#line 425 "m2-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_LOGICAL_OR); } -#line 1985 "m2-exp.c.tmp" /* yacc.c:1646 */ +#line 428 "m2-exp.y" + { write_exp_elt_opcode (pstate, BINOP_ASSIGN); } +#line 2080 "m2-exp.c.tmp" break; case 65: -#line 429 "m2-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_ASSIGN); } -#line 1991 "m2-exp.c.tmp" /* yacc.c:1646 */ - break; - - case 66: -#line 436 "m2-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, OP_BOOL); +#line 435 "m2-exp.y" + { write_exp_elt_opcode (pstate, OP_BOOL); write_exp_elt_longcst (pstate, (LONGEST) (yyvsp[0].ulval)); write_exp_elt_opcode (pstate, OP_BOOL); } -#line 1999 "m2-exp.c.tmp" /* yacc.c:1646 */ +#line 2088 "m2-exp.c.tmp" break; - case 67: -#line 442 "m2-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, OP_BOOL); + case 66: +#line 441 "m2-exp.y" + { write_exp_elt_opcode (pstate, OP_BOOL); write_exp_elt_longcst (pstate, (LONGEST) (yyvsp[0].ulval)); write_exp_elt_opcode (pstate, OP_BOOL); } -#line 2007 "m2-exp.c.tmp" /* yacc.c:1646 */ +#line 2096 "m2-exp.c.tmp" break; - case 68: -#line 448 "m2-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, OP_LONG); + case 67: +#line 447 "m2-exp.y" + { write_exp_elt_opcode (pstate, OP_LONG); write_exp_elt_type (pstate, parse_m2_type (pstate)->builtin_int); write_exp_elt_longcst (pstate, (LONGEST) (yyvsp[0].lval)); write_exp_elt_opcode (pstate, OP_LONG); } -#line 2017 "m2-exp.c.tmp" /* yacc.c:1646 */ +#line 2106 "m2-exp.c.tmp" break; - case 69: -#line 456 "m2-exp.y" /* yacc.c:1646 */ - { + case 68: +#line 455 "m2-exp.y" + { write_exp_elt_opcode (pstate, OP_LONG); write_exp_elt_type (pstate, parse_m2_type (pstate) @@ -2025,69 +2114,69 @@ write_exp_elt_longcst (pstate, (LONGEST) (yyvsp[0].ulval)); write_exp_elt_opcode (pstate, OP_LONG); } -#line 2030 "m2-exp.c.tmp" /* yacc.c:1646 */ +#line 2119 "m2-exp.c.tmp" break; - case 70: -#line 467 "m2-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, OP_LONG); + case 69: +#line 466 "m2-exp.y" + { write_exp_elt_opcode (pstate, OP_LONG); write_exp_elt_type (pstate, parse_m2_type (pstate) ->builtin_char); write_exp_elt_longcst (pstate, (LONGEST) (yyvsp[0].ulval)); write_exp_elt_opcode (pstate, OP_LONG); } -#line 2041 "m2-exp.c.tmp" /* yacc.c:1646 */ +#line 2130 "m2-exp.c.tmp" break; - case 71: -#line 477 "m2-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, OP_FLOAT); + case 70: +#line 476 "m2-exp.y" + { write_exp_elt_opcode (pstate, OP_FLOAT); write_exp_elt_type (pstate, parse_m2_type (pstate) ->builtin_real); write_exp_elt_floatcst (pstate, (yyvsp[0].val)); write_exp_elt_opcode (pstate, OP_FLOAT); } -#line 2052 "m2-exp.c.tmp" /* yacc.c:1646 */ +#line 2141 "m2-exp.c.tmp" break; - case 73: -#line 489 "m2-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, OP_LONG); + case 72: +#line 488 "m2-exp.y" + { write_exp_elt_opcode (pstate, OP_LONG); write_exp_elt_type (pstate, parse_type (pstate)->builtin_int); write_exp_elt_longcst (pstate, (LONGEST) TYPE_LENGTH ((yyvsp[-1].tval))); write_exp_elt_opcode (pstate, OP_LONG); } -#line 2063 "m2-exp.c.tmp" /* yacc.c:1646 */ +#line 2152 "m2-exp.c.tmp" break; - case 74: -#line 498 "m2-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, OP_M2_STRING); + case 73: +#line 497 "m2-exp.y" + { write_exp_elt_opcode (pstate, OP_M2_STRING); write_exp_string (pstate, (yyvsp[0].sval)); write_exp_elt_opcode (pstate, OP_M2_STRING); } -#line 2071 "m2-exp.c.tmp" /* yacc.c:1646 */ +#line 2160 "m2-exp.c.tmp" break; - case 75: -#line 505 "m2-exp.y" /* yacc.c:1646 */ - { (yyval.bval) = SYMBOL_BLOCK_VALUE((yyvsp[0].sym)); } -#line 2077 "m2-exp.c.tmp" /* yacc.c:1646 */ + case 74: +#line 504 "m2-exp.y" + { (yyval.bval) = SYMBOL_BLOCK_VALUE((yyvsp[0].sym)); } +#line 2166 "m2-exp.c.tmp" break; - case 76: -#line 509 "m2-exp.y" /* yacc.c:1646 */ - { struct symbol *sym + case 75: +#line 508 "m2-exp.y" + { struct symbol *sym = lookup_symbol (copy_name ((yyvsp[0].sval)).c_str (), pstate->expression_context_block, VAR_DOMAIN, 0).symbol; (yyval.sym) = sym;} -#line 2087 "m2-exp.c.tmp" /* yacc.c:1646 */ +#line 2176 "m2-exp.c.tmp" break; - case 77: -#line 519 "m2-exp.y" /* yacc.c:1646 */ - { struct symbol *tem + case 76: +#line 518 "m2-exp.y" + { struct symbol *tem = lookup_symbol (copy_name ((yyvsp[0].sval)).c_str (), (yyvsp[-2].bval), VAR_DOMAIN, 0).symbol; if (!tem || SYMBOL_CLASS (tem) != LOC_BLOCK) @@ -2095,21 +2184,21 @@ copy_name ((yyvsp[0].sval)).c_str ()); (yyval.sym) = tem; } -#line 2100 "m2-exp.c.tmp" /* yacc.c:1646 */ +#line 2189 "m2-exp.c.tmp" break; - case 78: -#line 531 "m2-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, OP_VAR_VALUE); + case 77: +#line 530 "m2-exp.y" + { write_exp_elt_opcode (pstate, OP_VAR_VALUE); write_exp_elt_block (pstate, NULL); write_exp_elt_sym (pstate, (yyvsp[0].sym)); write_exp_elt_opcode (pstate, OP_VAR_VALUE); } -#line 2109 "m2-exp.c.tmp" /* yacc.c:1646 */ +#line 2198 "m2-exp.c.tmp" break; - case 80: -#line 543 "m2-exp.y" /* yacc.c:1646 */ - { struct block_symbol sym + case 79: +#line 542 "m2-exp.y" + { struct block_symbol sym = lookup_symbol (copy_name ((yyvsp[0].sval)).c_str (), (yyvsp[-2].bval), VAR_DOMAIN, 0); @@ -2123,12 +2212,12 @@ write_exp_elt_block (pstate, sym.block); write_exp_elt_sym (pstate, sym.symbol); write_exp_elt_opcode (pstate, OP_VAR_VALUE); } -#line 2128 "m2-exp.c.tmp" /* yacc.c:1646 */ +#line 2217 "m2-exp.c.tmp" break; - case 81: -#line 561 "m2-exp.y" /* yacc.c:1646 */ - { struct block_symbol sym; + case 80: +#line 560 "m2-exp.y" + { struct block_symbol sym; struct field_of_this_result is_a_field_of_this; sym @@ -2163,22 +2252,23 @@ arg.c_str ()); } } -#line 2168 "m2-exp.c.tmp" /* yacc.c:1646 */ +#line 2257 "m2-exp.c.tmp" break; - case 82: -#line 600 "m2-exp.y" /* yacc.c:1646 */ - { (yyval.tval) + case 81: +#line 599 "m2-exp.y" + { (yyval.tval) = lookup_typename (pstate->language (), copy_name ((yyvsp[0].sval)).c_str (), pstate->expression_context_block, 0); } -#line 2179 "m2-exp.c.tmp" /* yacc.c:1646 */ +#line 2268 "m2-exp.c.tmp" break; -#line 2183 "m2-exp.c.tmp" /* yacc.c:1646 */ +#line 2272 "m2-exp.c.tmp" + default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -2203,14 +2293,13 @@ /* Now 'shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ - - yyn = yyr1[yyn]; - - yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; - if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) - yystate = yytable[yystate]; - else - yystate = yydefgoto[yyn - YYNTOKENS]; + { + const int yylhs = yyr1[yyn] - YYNTOKENS; + const int yyi = yypgoto[yylhs] + *yyssp; + yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp + ? yytable[yyi] + : yydefgoto[yylhs]); + } goto yynewstate; @@ -2242,7 +2331,7 @@ { if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); - yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc); + yymsg = YY_CAST (char *, YYSTACK_ALLOC (YY_CAST (YYSIZE_T, yymsg_alloc))); if (!yymsg) { yymsg = yymsgbuf; @@ -2293,12 +2382,10 @@ | yyerrorlab -- error raised explicitly by YYERROR. | `---------------------------------------------------*/ yyerrorlab: - - /* Pacify compilers like GCC when the user code never invokes - YYERROR and the label yyerrorlab therefore never appears in user - code. */ - if (/*CONSTCOND*/ 0) - goto yyerrorlab; + /* Pacify compilers when the user code never invokes YYERROR and the + label yyerrorlab therefore never appears in user code. */ + if (0) + YYERROR; /* Do not reclaim the symbols of the rule whose action triggered this YYERROR. */ @@ -2360,6 +2447,7 @@ yyresult = 0; goto yyreturn; + /*-----------------------------------. | yyabortlab -- YYABORT comes here. | `-----------------------------------*/ @@ -2367,6 +2455,7 @@ yyresult = 1; goto yyreturn; + #if !defined yyoverflow || YYERROR_VERBOSE /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | @@ -2377,6 +2466,10 @@ /* Fall through. */ #endif + +/*-----------------------------------------------------. +| yyreturn -- parsing is finished, return the result. | +`-----------------------------------------------------*/ yyreturn: if (yychar != YYEMPTY) { @@ -2393,7 +2486,7 @@ while (yyssp != yyss) { yydestruct ("Cleanup: popping", - yystos[*yyssp], yyvsp); + yystos[+*yyssp], yyvsp); YYPOPSTACK (1); } #ifndef yyoverflow @@ -2406,7 +2499,7 @@ #endif return yyresult; } -#line 609 "m2-exp.y" /* yacc.c:1906 */ +#line 608 "m2-exp.y" /* Take care of parsing a number (anything that starts with a digit). diff -Nru gdb-9.1/gdb/m2-exp.y gdb-10.2/gdb/m2-exp.y --- gdb-9.1/gdb/m2-exp.y 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/m2-exp.y 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* YACC grammar for Modula-2 expressions, for GDB. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. Generated from expread.y (now c-exp.y) and contributed by the Department of Computer Science at the State University of New York at Buffalo, 1991. @@ -293,21 +293,20 @@ ; -/* Modula-2 array subscript notation [a,b,c...] */ +/* Modula-2 array subscript notation [a,b,c...]. */ exp : exp '[' /* This function just saves the number of arguments that follow in the list. It is *not* specific to function types */ { pstate->start_arglist(); } non_empty_arglist ']' %prec DOT - { write_exp_elt_opcode (pstate, MULTI_SUBSCRIPT); + { + gdb_assert (pstate->arglist_len > 0); + write_exp_elt_opcode (pstate, MULTI_SUBSCRIPT); write_exp_elt_longcst (pstate, pstate->end_arglist()); - write_exp_elt_opcode (pstate, MULTI_SUBSCRIPT); } - ; - -exp : exp '[' exp ']' - { write_exp_elt_opcode (pstate, BINOP_SUBSCRIPT); } + write_exp_elt_opcode (pstate, MULTI_SUBSCRIPT); + } ; exp : exp '(' diff -Nru gdb-9.1/gdb/m2-lang.c gdb-10.2/gdb/m2-lang.c --- gdb-9.1/gdb/m2-lang.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/m2-lang.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Modula 2 language support routines for GDB, the GNU debugger. - Copyright (C) 1992-2020 Free Software Foundation, Inc. + Copyright (C) 1992-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -30,59 +30,6 @@ #include "gdbarch.h" static void m2_printchar (int, struct type *, struct ui_file *); -static void m2_emit_char (int, struct type *, struct ui_file *, int); - -/* Print the character C on STREAM as part of the contents of a literal - string whose delimiter is QUOTER. Note that that format for printing - characters and strings is language specific. - FIXME: This is a copy of the same function from c-exp.y. It should - be replaced with a true Modula version. */ - -static void -m2_emit_char (int c, struct type *type, struct ui_file *stream, int quoter) -{ - - c &= 0xFF; /* Avoid sign bit follies. */ - - if (PRINT_LITERAL_FORM (c)) - { - if (c == '\\' || c == quoter) - { - fputs_filtered ("\\", stream); - } - fprintf_filtered (stream, "%c", c); - } - else - { - switch (c) - { - case '\n': - fputs_filtered ("\\n", stream); - break; - case '\b': - fputs_filtered ("\\b", stream); - break; - case '\t': - fputs_filtered ("\\t", stream); - break; - case '\f': - fputs_filtered ("\\f", stream); - break; - case '\r': - fputs_filtered ("\\r", stream); - break; - case '\033': - fputs_filtered ("\\e", stream); - break; - case '\007': - fputs_filtered ("\\a", stream); - break; - default: - fprintf_filtered (stream, "\\%.3o", (unsigned int) c); - break; - } - } -} /* FIXME: This is a copy of the same function from c-exp.y. It should be replaced with a true Modula version. */ @@ -95,107 +42,6 @@ fputs_filtered ("'", stream); } -/* Print the character string STRING, printing at most LENGTH characters. - Printing stops early if the number hits print_max; repeat counts - are printed as appropriate. Print ellipses at the end if we - had to stop before printing LENGTH characters, or if FORCE_ELLIPSES. - FIXME: This is a copy of the same function from c-exp.y. It should - be replaced with a true Modula version. */ - -static void -m2_printstr (struct ui_file *stream, struct type *type, const gdb_byte *string, - unsigned int length, const char *encoding, int force_ellipses, - const struct value_print_options *options) -{ - unsigned int i; - unsigned int things_printed = 0; - int in_quotes = 0; - int need_comma = 0; - - if (length == 0) - { - fputs_filtered ("\"\"", gdb_stdout); - return; - } - - for (i = 0; i < length && things_printed < options->print_max; ++i) - { - /* Position of the character we are examining - to see whether it is repeated. */ - unsigned int rep1; - /* Number of repetitions we have detected so far. */ - unsigned int reps; - - QUIT; - - if (need_comma) - { - fputs_filtered (", ", stream); - need_comma = 0; - } - - rep1 = i + 1; - reps = 1; - while (rep1 < length && string[rep1] == string[i]) - { - ++rep1; - ++reps; - } - - if (reps > options->repeat_count_threshold) - { - if (in_quotes) - { - fputs_filtered ("\", ", stream); - in_quotes = 0; - } - m2_printchar (string[i], type, stream); - fprintf_filtered (stream, " <repeats %u times>", reps); - i = rep1 - 1; - things_printed += options->repeat_count_threshold; - need_comma = 1; - } - else - { - if (!in_quotes) - { - fputs_filtered ("\"", stream); - in_quotes = 1; - } - LA_EMIT_CHAR (string[i], type, stream, '"'); - ++things_printed; - } - } - - /* Terminate the quotes if necessary. */ - if (in_quotes) - fputs_filtered ("\"", stream); - - if (force_ellipses || i < length) - fputs_filtered ("...", stream); -} - -/* Return true if TYPE is a string. */ - -static bool -m2_is_string_type_p (struct type *type) -{ - type = check_typedef (type); - if (TYPE_CODE (type) == TYPE_CODE_ARRAY - && TYPE_LENGTH (type) > 0 - && TYPE_LENGTH (TYPE_TARGET_TYPE (type)) > 0) - { - struct type *elttype = check_typedef (TYPE_TARGET_TYPE (type)); - - if (TYPE_LENGTH (elttype) == 1 - && (TYPE_CODE (elttype) == TYPE_CODE_INT - || TYPE_CODE (elttype) == TYPE_CODE_CHAR)) - return true; - } - - return false; -} - static struct value * evaluate_subexp_modula2 (struct type *expect_type, struct expression *exp, int *pos, enum noside noside) @@ -222,7 +68,7 @@ { struct value *temp = arg1; - type = TYPE_FIELD_TYPE (type, 1); + type = type->field (1).type (); /* i18n: Do not translate the "_m2_high" part! */ arg1 = value_struct_elt (&temp, NULL, "_m2_high", NULL, _("unbounded structure " @@ -250,8 +96,8 @@ if (m2_is_unbounded_array (type)) { struct value *temp = arg1; - type = TYPE_FIELD_TYPE (type, 0); - if (type == NULL || (TYPE_CODE (type) != TYPE_CODE_PTR)) + type = type->field (0).type (); + if (type == NULL || (type->code () != TYPE_CODE_PTR)) { warning (_("internal error: unbounded " "array structure is unknown")); @@ -269,11 +115,11 @@ return value_ind (value_ptradd (arg1, value_as_long (arg2))); } else - if (TYPE_CODE (type) != TYPE_CODE_ARRAY) + if (type->code () != TYPE_CODE_ARRAY) { - if (TYPE_NAME (type)) + if (type->name ()) error (_("cannot subscript something of type `%s'"), - TYPE_NAME (type)); + type->name ()); else error (_("cannot subscript requested type")); } @@ -339,32 +185,6 @@ nr_m2_primitive_types }; -static void -m2_language_arch_info (struct gdbarch *gdbarch, - struct language_arch_info *lai) -{ - const struct builtin_m2_type *builtin = builtin_m2_type (gdbarch); - - lai->string_char_type = builtin->builtin_char; - lai->primitive_type_vector - = GDBARCH_OBSTACK_CALLOC (gdbarch, nr_m2_primitive_types + 1, - struct type *); - - lai->primitive_type_vector [m2_primitive_type_char] - = builtin->builtin_char; - lai->primitive_type_vector [m2_primitive_type_int] - = builtin->builtin_int; - lai->primitive_type_vector [m2_primitive_type_card] - = builtin->builtin_card; - lai->primitive_type_vector [m2_primitive_type_real] - = builtin->builtin_real; - lai->primitive_type_vector [m2_primitive_type_bool] - = builtin->builtin_bool; - - lai->bool_type_symbol = "BOOLEAN"; - lai->bool_type_default = builtin->builtin_bool; -} - const struct exp_descriptor exp_descriptor_modula2 = { print_subexp_standard, @@ -375,7 +195,9 @@ evaluate_subexp_modula2 }; -extern const struct language_defn m2_language_defn = +/* Constant data describing the M2 language. */ + +extern const struct language_data m2_language_data = { "modula-2", "Modula-2", @@ -386,44 +208,236 @@ macro_expansion_no, NULL, &exp_descriptor_modula2, - m2_parse, /* parser */ - null_post_parser, - m2_printchar, /* Print character constant */ - m2_printstr, /* function to print string constant */ - m2_emit_char, /* Function to print a single character */ - m2_print_type, /* Print a type using appropriate syntax */ - m2_print_typedef, /* Print a typedef using appropriate syntax */ - m2_val_print, /* Print a value using appropriate syntax */ - c_value_print, /* Print a top-level value */ - default_read_var_value, /* la_read_var_value */ - NULL, /* Language specific skip_trampoline */ NULL, /* name_of_this */ false, /* la_store_sym_names_in_linkage_form_p */ - basic_lookup_symbol_nonlocal, /* lookup_symbol_nonlocal */ - basic_lookup_transparent_type,/* lookup_transparent_type */ - NULL, /* Language specific symbol demangler */ - NULL, - NULL, /* Language specific - class_name_from_physname */ m2_op_print_tab, /* expression operators for printing */ 0, /* arrays are first-class (not c-style) */ 0, /* String lower bound */ - default_word_break_characters, - default_collect_symbol_completion_matches, - m2_language_arch_info, - default_print_array_index, - default_pass_by_reference, - c_watch_location_expression, - NULL, /* la_get_symbol_name_matcher */ - iterate_over_symbols, - default_search_name_hash, &default_varobj_ops, - NULL, - NULL, - m2_is_string_type_p, "{...}" /* la_struct_too_deep_ellipsis */ }; +/* Class representing the M2 language. */ + +class m2_language : public language_defn +{ +public: + m2_language () + : language_defn (language_m2, m2_language_data) + { /* Nothing. */ } + + /* See language.h. */ + void language_arch_info (struct gdbarch *gdbarch, + struct language_arch_info *lai) const override + { + const struct builtin_m2_type *builtin = builtin_m2_type (gdbarch); + + lai->string_char_type = builtin->builtin_char; + lai->primitive_type_vector + = GDBARCH_OBSTACK_CALLOC (gdbarch, nr_m2_primitive_types + 1, + struct type *); + + lai->primitive_type_vector [m2_primitive_type_char] + = builtin->builtin_char; + lai->primitive_type_vector [m2_primitive_type_int] + = builtin->builtin_int; + lai->primitive_type_vector [m2_primitive_type_card] + = builtin->builtin_card; + lai->primitive_type_vector [m2_primitive_type_real] + = builtin->builtin_real; + lai->primitive_type_vector [m2_primitive_type_bool] + = builtin->builtin_bool; + + lai->bool_type_symbol = "BOOLEAN"; + lai->bool_type_default = builtin->builtin_bool; + } + + /* See language.h. */ + + void print_type (struct type *type, const char *varstring, + struct ui_file *stream, int show, int level, + const struct type_print_options *flags) const override + { + m2_print_type (type, varstring, stream, show, level, flags); + } + + /* See language.h. */ + + void value_print_inner + (struct value *val, struct ui_file *stream, int recurse, + const struct value_print_options *options) const override + { + return m2_value_print_inner (val, stream, recurse, options); + } + + /* See language.h. */ + + int parser (struct parser_state *ps) const override + { + return m2_parse (ps); + } + + /* See language.h. */ + + void emitchar (int ch, struct type *chtype, + struct ui_file *stream, int quoter) const override + { + ch &= 0xFF; /* Avoid sign bit follies. */ + + if (PRINT_LITERAL_FORM (ch)) + { + if (ch == '\\' || ch == quoter) + fputs_filtered ("\\", stream); + fprintf_filtered (stream, "%c", ch); + } + else + { + switch (ch) + { + case '\n': + fputs_filtered ("\\n", stream); + break; + case '\b': + fputs_filtered ("\\b", stream); + break; + case '\t': + fputs_filtered ("\\t", stream); + break; + case '\f': + fputs_filtered ("\\f", stream); + break; + case '\r': + fputs_filtered ("\\r", stream); + break; + case '\033': + fputs_filtered ("\\e", stream); + break; + case '\007': + fputs_filtered ("\\a", stream); + break; + default: + fprintf_filtered (stream, "\\%.3o", (unsigned int) ch); + break; + } + } + } + + /* See language.h. */ + + void printchar (int ch, struct type *chtype, + struct ui_file *stream) const override + { + m2_printchar (ch, chtype, stream); + } + + /* See language.h. */ + + void printstr (struct ui_file *stream, struct type *elttype, + const gdb_byte *string, unsigned int length, + const char *encoding, int force_ellipses, + const struct value_print_options *options) const override + { + unsigned int i; + unsigned int things_printed = 0; + int in_quotes = 0; + int need_comma = 0; + + if (length == 0) + { + fputs_filtered ("\"\"", gdb_stdout); + return; + } + + for (i = 0; i < length && things_printed < options->print_max; ++i) + { + /* Position of the character we are examining + to see whether it is repeated. */ + unsigned int rep1; + /* Number of repetitions we have detected so far. */ + unsigned int reps; + + QUIT; + + if (need_comma) + { + fputs_filtered (", ", stream); + need_comma = 0; + } + + rep1 = i + 1; + reps = 1; + while (rep1 < length && string[rep1] == string[i]) + { + ++rep1; + ++reps; + } + + if (reps > options->repeat_count_threshold) + { + if (in_quotes) + { + fputs_filtered ("\", ", stream); + in_quotes = 0; + } + m2_printchar (string[i], elttype, stream); + fprintf_filtered (stream, " <repeats %u times>", reps); + i = rep1 - 1; + things_printed += options->repeat_count_threshold; + need_comma = 1; + } + else + { + if (!in_quotes) + { + fputs_filtered ("\"", stream); + in_quotes = 1; + } + LA_EMIT_CHAR (string[i], elttype, stream, '"'); + ++things_printed; + } + } + + /* Terminate the quotes if necessary. */ + if (in_quotes) + fputs_filtered ("\"", stream); + + if (force_ellipses || i < length) + fputs_filtered ("...", stream); + } + + /* See language.h. */ + + void print_typedef (struct type *type, struct symbol *new_symbol, + struct ui_file *stream) const override + { + m2_print_typedef (type, new_symbol, stream); + } + + /* See language.h. */ + + bool is_string_type_p (struct type *type) const override + { + type = check_typedef (type); + if (type->code () == TYPE_CODE_ARRAY + && TYPE_LENGTH (type) > 0 + && TYPE_LENGTH (TYPE_TARGET_TYPE (type)) > 0) + { + struct type *elttype = check_typedef (TYPE_TARGET_TYPE (type)); + + if (TYPE_LENGTH (elttype) == 1 + && (elttype->code () == TYPE_CODE_INT + || elttype->code () == TYPE_CODE_CHAR)) + return true; + } + + return false; + } +}; + +/* Single instance of the M2 language. */ + +static m2_language m2_language_defn; + static void * build_m2_types (struct gdbarch *gdbarch) { @@ -457,8 +471,9 @@ /* Initialization for Modula-2 */ +void _initialize_m2_language (); void -_initialize_m2_language (void) +_initialize_m2_language () { m2_type_data = gdbarch_data_register_post_init (build_m2_types); } diff -Nru gdb-9.1/gdb/m2-lang.h gdb-10.2/gdb/m2-lang.h --- gdb-9.1/gdb/m2-lang.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/m2-lang.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Modula 2 language support definitions for GDB, the GNU debugger. - Copyright (C) 1992-2020 Free Software Foundation, Inc. + Copyright (C) 1992-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -35,10 +35,10 @@ extern int m2_is_long_set (struct type *type); extern int m2_is_unbounded_array (struct type *type); -extern void m2_val_print (struct type *, int, CORE_ADDR, - struct ui_file *, int, - struct value *, - const struct value_print_options *); +/* Implement la_value_print_inner for Modula-2. */ + +extern void m2_value_print_inner (struct value *, struct ui_file *, int, + const struct value_print_options *); extern int get_long_set_bounds (struct type *type, LONGEST *low, LONGEST *high); diff -Nru gdb-9.1/gdb/m2-typeprint.c gdb-10.2/gdb/m2-typeprint.c --- gdb-9.1/gdb/m2-typeprint.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/m2-typeprint.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Support for printing Modula 2 types for GDB, the GNU debugger. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -86,7 +86,7 @@ return; } - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_SET: m2_short_set(type, stream, show, level); @@ -163,8 +163,8 @@ { type = check_typedef (type); fprintf_filtered (stream, "TYPE "); - if (!TYPE_NAME (SYMBOL_TYPE (new_symbol)) - || strcmp (TYPE_NAME ((SYMBOL_TYPE (new_symbol))), + if (!SYMBOL_TYPE (new_symbol)->name () + || strcmp ((SYMBOL_TYPE (new_symbol))->name (), new_symbol->linkage_name ()) != 0) fprintf_filtered (stream, "%s = ", new_symbol->print_name ()); else @@ -178,8 +178,8 @@ void m2_type_name (struct type *type, struct ui_file *stream) { - if (TYPE_NAME (type) != NULL) - fputs_filtered (TYPE_NAME (type), stream); + if (type->name () != NULL) + fputs_filtered (type->name (), stream); } /* m2_range - displays a Modula-2 subrange type. */ @@ -188,7 +188,7 @@ m2_range (struct type *type, struct ui_file *stream, int show, int level, const struct type_print_options *flags) { - if (TYPE_HIGH_BOUND (type) == TYPE_LOW_BOUND (type)) + if (type->bounds ()->high.const_val () == type->bounds ()->low.const_val ()) { /* FIXME: TYPE_TARGET_TYPE used to be TYPE_DOMAIN_TYPE but that was wrong. Not sure if TYPE_TARGET_TYPE is correct though. */ @@ -200,9 +200,9 @@ struct type *target = TYPE_TARGET_TYPE (type); fprintf_filtered (stream, "["); - print_type_scalar (target, TYPE_LOW_BOUND (type), stream); + print_type_scalar (target, type->bounds ()->low.const_val (), stream); fprintf_filtered (stream, ".."); - print_type_scalar (target, TYPE_HIGH_BOUND (type), stream); + print_type_scalar (target, type->bounds ()->high.const_val (), stream); fprintf_filtered (stream, "]"); } } @@ -211,9 +211,9 @@ m2_typedef (struct type *type, struct ui_file *stream, int show, int level, const struct type_print_options *flags) { - if (TYPE_NAME (type) != NULL) + if (type->name () != NULL) { - fputs_filtered (TYPE_NAME (type), stream); + fputs_filtered (type->name (), stream); fputs_filtered (" = ", stream); } m2_print_type (TYPE_TARGET_TYPE (type), "", stream, show, level, flags); @@ -226,13 +226,13 @@ { fprintf_filtered (stream, "ARRAY ["); if (TYPE_LENGTH (TYPE_TARGET_TYPE (type)) > 0 - && !TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED (type)) + && type->bounds ()->high.kind () != PROP_UNDEFINED) { - if (TYPE_INDEX_TYPE (type) != 0) + if (type->index_type () != 0) { - m2_print_bounds (TYPE_INDEX_TYPE (type), stream, show, -1, 0); + m2_print_bounds (type->index_type (), stream, show, -1, 0); fprintf_filtered (stream, ".."); - m2_print_bounds (TYPE_INDEX_TYPE (type), stream, show, -1, 1); + m2_print_bounds (type->index_type (), stream, show, -1, 1); } else fputs_filtered (pulongest ((TYPE_LENGTH (type) @@ -282,9 +282,9 @@ fprintf_filtered (stream, "PROCEDURE "); m2_type_name (type, stream); if (TYPE_TARGET_TYPE (type) == NULL - || TYPE_CODE (TYPE_TARGET_TYPE (type)) != TYPE_CODE_VOID) + || TYPE_TARGET_TYPE (type)->code () != TYPE_CODE_VOID) { - int i, len = TYPE_NFIELDS (type); + int i, len = type->num_fields (); fprintf_filtered (stream, " ("); for (i = 0; i < len; i++) @@ -294,7 +294,7 @@ fputs_filtered (", ", stream); wrap_here (" "); } - m2_print_type (TYPE_FIELD_TYPE (type, i), "", stream, -1, 0, flags); + m2_print_type (type->field (i).type (), "", stream, -1, 0, flags); } fprintf_filtered (stream, ") : "); if (TYPE_TARGET_TYPE (type) != NULL) @@ -311,24 +311,24 @@ { struct type *target = TYPE_TARGET_TYPE (type); - if (TYPE_NFIELDS(type) == 0) + if (type->num_fields () == 0) return; if (print_high) - print_type_scalar (target, TYPE_HIGH_BOUND (type), stream); + print_type_scalar (target, type->bounds ()->high.const_val (), stream); else - print_type_scalar (target, TYPE_LOW_BOUND (type), stream); + print_type_scalar (target, type->bounds ()->low.const_val (), stream); } static void m2_short_set (struct type *type, struct ui_file *stream, int show, int level) { fprintf_filtered(stream, "SET ["); - m2_print_bounds (TYPE_INDEX_TYPE (type), stream, + m2_print_bounds (type->index_type (), stream, show - 1, level, 0); fprintf_filtered(stream, ".."); - m2_print_bounds (TYPE_INDEX_TYPE (type), stream, + m2_print_bounds (type->index_type (), stream, show - 1, level, 1); fprintf_filtered(stream, "]"); } @@ -341,26 +341,26 @@ int len, i; struct type *range; - if (TYPE_CODE (type) == TYPE_CODE_STRUCT) + if (type->code () == TYPE_CODE_STRUCT) { /* check if all fields of the RECORD are consecutive sets. */ - len = TYPE_NFIELDS (type); + len = type->num_fields (); for (i = TYPE_N_BASECLASSES (type); i < len; i++) { - if (TYPE_FIELD_TYPE (type, i) == NULL) + if (type->field (i).type () == NULL) return 0; - if (TYPE_CODE (TYPE_FIELD_TYPE (type, i)) != TYPE_CODE_SET) + if (type->field (i).type ()->code () != TYPE_CODE_SET) return 0; if (TYPE_FIELD_NAME (type, i) != NULL && (strcmp (TYPE_FIELD_NAME (type, i), "") != 0)) return 0; - range = TYPE_INDEX_TYPE (TYPE_FIELD_TYPE (type, i)); + range = type->field (i).type ()->index_type (); if ((i > TYPE_N_BASECLASSES (type)) - && previous_high + 1 != TYPE_LOW_BOUND (range)) + && previous_high + 1 != range->bounds ()->low.const_val ()) return 0; - previous_high = TYPE_HIGH_BOUND (range); + previous_high = range->bounds ()->high.const_val (); } return len>0; } @@ -372,11 +372,11 @@ This should be integrated into gdbtypes.c inside get_discrete_bounds. */ -static int +static bool m2_get_discrete_bounds (struct type *type, LONGEST *lowp, LONGEST *highp) { type = check_typedef (type); - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_CHAR: if (TYPE_LENGTH (type) < sizeof (LONGEST)) @@ -407,19 +407,19 @@ LONGEST l1, l2; LONGEST h1, h2; - if (TYPE_CODE (type) == TYPE_CODE_STRUCT) + if (type->code () == TYPE_CODE_STRUCT) { - len = TYPE_NFIELDS (type); + len = type->num_fields (); i = TYPE_N_BASECLASSES (type); if (len == 0) return 0; - range = TYPE_INDEX_TYPE (TYPE_FIELD_TYPE (type, i)); + range = type->field (i).type ()->index_type (); target = TYPE_TARGET_TYPE (range); - l1 = TYPE_LOW_BOUND (TYPE_INDEX_TYPE (TYPE_FIELD_TYPE (type, i))); - h1 = TYPE_HIGH_BOUND (TYPE_INDEX_TYPE (TYPE_FIELD_TYPE (type, len-1))); + l1 = type->field (i).type ()->bounds ()->low.const_val (); + h1 = type->field (len - 1).type ()->bounds ()->high.const_val (); *of_type = target; - if (m2_get_discrete_bounds (target, &l2, &h2) >= 0) + if (m2_get_discrete_bounds (target, &l2, &h2)) return (l1 == l2 && h1 == h2); error (_("long_set failed to find discrete bounds for its subtype")); return 0; @@ -434,15 +434,15 @@ { struct type *of_type; int i; - int len = TYPE_NFIELDS (type); + int len = type->num_fields (); LONGEST low; LONGEST high; if (m2_is_long_set (type)) { - if (TYPE_NAME (type) != NULL) + if (type->name () != NULL) { - fputs_filtered (TYPE_NAME (type), stream); + fputs_filtered (type->name (), stream); if (show == 0) return 1; fputs_filtered (" = ", stream); @@ -457,12 +457,12 @@ else { fprintf_filtered(stream, "["); - m2_print_bounds (TYPE_INDEX_TYPE (TYPE_FIELD_TYPE (type, i)), + m2_print_bounds (type->field (i).type ()->index_type (), stream, show - 1, level, 0); fprintf_filtered(stream, ".."); - m2_print_bounds (TYPE_INDEX_TYPE (TYPE_FIELD_TYPE (type, len-1)), + m2_print_bounds (type->field (len - 1).type ()->index_type (), stream, show - 1, level, 1); fprintf_filtered(stream, "]"); } @@ -482,7 +482,7 @@ int m2_is_unbounded_array (struct type *type) { - if (TYPE_CODE (type) == TYPE_CODE_STRUCT) + if (type->code () == TYPE_CODE_STRUCT) { /* * check if we have a structure with exactly two fields named @@ -490,13 +490,13 @@ * type of _m2_contents is a pointer. The TYPE_TARGET_TYPE * of the pointer determines the unbounded ARRAY OF type. */ - if (TYPE_NFIELDS (type) != 2) + if (type->num_fields () != 2) return 0; if (strcmp (TYPE_FIELD_NAME (type, 0), "_m2_contents") != 0) return 0; if (strcmp (TYPE_FIELD_NAME (type, 1), "_m2_high") != 0) return 0; - if (TYPE_CODE (TYPE_FIELD_TYPE (type, 0)) != TYPE_CODE_PTR) + if (type->field (0).type ()->code () != TYPE_CODE_PTR) return 0; return 1; } @@ -517,7 +517,7 @@ if (show > 0) { fputs_filtered ("ARRAY OF ", stream); - m2_print_type (TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (type, 0)), + m2_print_type (TYPE_TARGET_TYPE (type->field (0).type ()), "", stream, 0, level, flags); } return 1; @@ -530,11 +530,11 @@ int level, const struct type_print_options *flags) { /* Print the tag if it exists. */ - if (TYPE_NAME (type) != NULL) + if (type->name () != NULL) { - if (!startswith (TYPE_NAME (type), "$$")) + if (!startswith (type->name (), "$$")) { - fputs_filtered (TYPE_NAME (type), stream); + fputs_filtered (type->name (), stream); if (show > 0) fprintf_filtered (stream, " = "); } @@ -542,19 +542,19 @@ wrap_here (" "); if (show < 0) { - if (TYPE_CODE (type) == TYPE_CODE_STRUCT) + if (type->code () == TYPE_CODE_STRUCT) fprintf_filtered (stream, "RECORD ... END "); - else if (TYPE_CODE (type) == TYPE_CODE_UNION) + else if (type->code () == TYPE_CODE_UNION) fprintf_filtered (stream, "CASE ... END "); } else if (show > 0) { int i; - int len = TYPE_NFIELDS (type); + int len = type->num_fields (); - if (TYPE_CODE (type) == TYPE_CODE_STRUCT) + if (type->code () == TYPE_CODE_STRUCT) fprintf_filtered (stream, "RECORD\n"); - else if (TYPE_CODE (type) == TYPE_CODE_UNION) + else if (type->code () == TYPE_CODE_UNION) /* i18n: Do not translate "CASE" and "OF". */ fprintf_filtered (stream, _("CASE <variant> OF\n")); @@ -563,9 +563,10 @@ QUIT; print_spaces_filtered (level + 4, stream); - fputs_filtered (TYPE_FIELD_NAME (type, i), stream); + fputs_styled (TYPE_FIELD_NAME (type, i), + variable_name_style.style (), stream); fputs_filtered (" : ", stream); - m2_print_type (TYPE_FIELD_TYPE (type, i), + m2_print_type (type->field (i).type (), "", stream, 0, level + 4, flags); if (TYPE_FIELD_PACKED (type, i)) @@ -594,13 +595,13 @@ if (show < 0) { /* If we just printed a tag name, no need to print anything else. */ - if (TYPE_NAME (type) == NULL) + if (type->name () == NULL) fprintf_filtered (stream, "(...)"); } - else if (show > 0 || TYPE_NAME (type) == NULL) + else if (show > 0 || type->name () == NULL) { fprintf_filtered (stream, "("); - len = TYPE_NFIELDS (type); + len = type->num_fields (); lastval = 0; for (i = 0; i < len; i++) { @@ -608,7 +609,8 @@ if (i > 0) fprintf_filtered (stream, ", "); wrap_here (" "); - fputs_filtered (TYPE_FIELD_NAME (type, i), stream); + fputs_styled (TYPE_FIELD_NAME (type, i), + variable_name_style.style (), stream); if (lastval != TYPE_FIELD_ENUMVAL (type, i)) { fprintf_filtered (stream, " = %s", diff -Nru gdb-9.1/gdb/m2-valprint.c gdb-10.2/gdb/m2-valprint.c --- gdb-9.1/gdb/m2-valprint.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/m2-valprint.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Support for printing Modula 2 values for GDB, the GNU debugger. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -35,10 +35,8 @@ const struct value_print_options *options, struct ui_file *stream); static void -m2_print_array_contents (struct type *type, const gdb_byte *valaddr, - int embedded_offset, CORE_ADDR address, +m2_print_array_contents (struct value *val, struct ui_file *stream, int recurse, - struct value *val, const struct value_print_options *options, int len); @@ -51,15 +49,14 @@ { int len, i; - if (TYPE_CODE (type) == TYPE_CODE_STRUCT) + if (type->code () == TYPE_CODE_STRUCT) { - len = TYPE_NFIELDS (type); + len = type->num_fields (); i = TYPE_N_BASECLASSES (type); if (len == 0) return 0; - *low = TYPE_LOW_BOUND (TYPE_INDEX_TYPE (TYPE_FIELD_TYPE (type, i))); - *high = TYPE_HIGH_BOUND (TYPE_INDEX_TYPE (TYPE_FIELD_TYPE (type, - len-1))); + *low = type->field (i).type ()->bounds ()->low.const_val (); + *high = type->field (len - 1).type ()->bounds ()->high.const_val (); return 1; } error (_("expecting long_set")); @@ -85,11 +82,11 @@ type = check_typedef (type); fprintf_filtered (stream, "{"); - len = TYPE_NFIELDS (type); + len = type->num_fields (); if (get_long_set_bounds (type, &low_bound, &high_bound)) { field = TYPE_N_BASECLASSES (type); - range = TYPE_INDEX_TYPE (TYPE_FIELD_TYPE (type, field)); + range = type->field (field).type ()->index_type (); } else { @@ -100,11 +97,11 @@ target = TYPE_TARGET_TYPE (range); - if (get_discrete_bounds (range, &field_low, &field_high) >= 0) + if (get_discrete_bounds (range, &field_low, &field_high)) { for (i = low_bound; i <= high_bound; i++) { - bitval = value_bit_index (TYPE_FIELD_TYPE (type, field), + bitval = value_bit_index (type->field (field).type (), (TYPE_FIELD_BITPOS (type, field) / 8) + valaddr + embedded_offset, i); if (bitval < 0) @@ -139,8 +136,8 @@ field++; if (field == len) break; - range = TYPE_INDEX_TYPE (TYPE_FIELD_TYPE (type, field)); - if (get_discrete_bounds (range, &field_low, &field_high) < 0) + range = type->field (field).type ()->index_type (); + if (!get_discrete_bounds (range, &field_low, &field_high)) break; target = TYPE_TARGET_TYPE (range); } @@ -159,8 +156,7 @@ } static void -m2_print_unbounded_array (struct type *type, const gdb_byte *valaddr, - int embedded_offset, CORE_ADDR address, +m2_print_unbounded_array (struct value *value, struct ui_file *stream, int recurse, const struct value_print_options *options) { @@ -168,21 +164,19 @@ LONGEST len; struct value *val; - type = check_typedef (type); + struct type *type = check_typedef (value_type (value)); + const gdb_byte *valaddr = value_contents_for_printing (value); - addr = unpack_pointer (TYPE_FIELD_TYPE (type, 0), + addr = unpack_pointer (type->field (0).type (), (TYPE_FIELD_BITPOS (type, 0) / 8) + - valaddr + embedded_offset); + valaddr); - val = value_at_lazy (TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (type, 0)), + val = value_at_lazy (TYPE_TARGET_TYPE (type->field (0).type ()), addr); - len = unpack_field_as_long (type, valaddr + embedded_offset, 1); + len = unpack_field_as_long (type, valaddr, 1); fprintf_filtered (stream, "{"); - m2_print_array_contents (value_type (val), - value_contents_for_printing (val), - value_embedded_offset (val), addr, stream, - recurse, val, options, len); + m2_print_array_contents (val, stream, recurse, options, len); fprintf_filtered (stream, ", HIGH = %d}", (int) len); } @@ -196,7 +190,7 @@ struct type *elttype = check_typedef (TYPE_TARGET_TYPE (type)); int want_space = 0; - if (TYPE_CODE (elttype) == TYPE_CODE_FUNC) + if (elttype->code () == TYPE_CODE_FUNC) { /* Try to print what function it points to. */ print_function_pointer_address (options, gdbarch, addr, stream); @@ -214,7 +208,7 @@ pointed to, unless pointer is null. */ if (TYPE_LENGTH (elttype) == 1 - && TYPE_CODE (elttype) == TYPE_CODE_INT + && elttype->code () == TYPE_CODE_INT && (options->format == 0 || options->format == 's') && addr != 0) { @@ -242,7 +236,7 @@ fputs_filtered (paddress (gdbarch, addr), stream); fprintf_filtered (stream, "] : "); - if (TYPE_CODE (elttype) != TYPE_CODE_UNDEF) + if (elttype->code () != TYPE_CODE_UNDEF) { struct value *deref_val = value_at (TYPE_TARGET_TYPE (type), unpack_pointer (type, valaddr)); @@ -261,32 +255,27 @@ separated values. */ static void -m2_print_array_contents (struct type *type, const gdb_byte *valaddr, - int embedded_offset, CORE_ADDR address, +m2_print_array_contents (struct value *val, struct ui_file *stream, int recurse, - struct value *val, const struct value_print_options *options, int len) { - type = check_typedef (type); + struct type *type = check_typedef (value_type (val)); if (TYPE_LENGTH (type) > 0) { - if (options->prettyformat_arrays) - print_spaces_filtered (2 + 2 * recurse, stream); /* For an array of chars, print with string syntax. */ if (TYPE_LENGTH (type) == 1 && - ((TYPE_CODE (type) == TYPE_CODE_INT) + ((type->code () == TYPE_CODE_INT) || ((current_language->la_language == language_m2) - && (TYPE_CODE (type) == TYPE_CODE_CHAR))) + && (type->code () == TYPE_CODE_CHAR))) && (options->format == 0 || options->format == 's')) - val_print_string (type, NULL, address, len+1, stream, options); + val_print_string (type, NULL, value_address (val), len+1, stream, + options); else { fprintf_filtered (stream, "{"); - val_print_array_elements (type, embedded_offset, - address, stream, recurse, val, - options, 0); + value_print_array_elements (val, stream, recurse, options, 0); fprintf_filtered (stream, "}"); } } @@ -306,35 +295,31 @@ "}" }; -/* See val_print for a description of the various parameters of this - function; they are identical. */ +/* See m2-lang.h. */ void -m2_val_print (struct type *type, int embedded_offset, - CORE_ADDR address, struct ui_file *stream, int recurse, - struct value *original_value, - const struct value_print_options *options) +m2_value_print_inner (struct value *val, struct ui_file *stream, int recurse, + const struct value_print_options *options) { unsigned len; struct type *elttype; CORE_ADDR addr; - const gdb_byte *valaddr = value_contents_for_printing (original_value); + const gdb_byte *valaddr = value_contents_for_printing (val); + const CORE_ADDR address = value_address (val); - type = check_typedef (type); - switch (TYPE_CODE (type)) + struct type *type = check_typedef (value_type (val)); + switch (type->code ()) { case TYPE_CODE_ARRAY: if (TYPE_LENGTH (type) > 0 && TYPE_LENGTH (TYPE_TARGET_TYPE (type)) > 0) { elttype = check_typedef (TYPE_TARGET_TYPE (type)); len = TYPE_LENGTH (type) / TYPE_LENGTH (elttype); - if (options->prettyformat_arrays) - print_spaces_filtered (2 + 2 * recurse, stream); /* For an array of chars, print with string syntax. */ if (TYPE_LENGTH (elttype) == 1 && - ((TYPE_CODE (elttype) == TYPE_CODE_INT) + ((elttype->code () == TYPE_CODE_INT) || ((current_language->la_language == language_m2) - && (TYPE_CODE (elttype) == TYPE_CODE_CHAR))) + && (elttype->code () == TYPE_CODE_CHAR))) && (options->format == 0 || options->format == 's')) { /* If requested, look for the first null char and only print @@ -345,23 +330,20 @@ /* Look for a NULL char. */ for (temp_len = 0; - (valaddr + embedded_offset)[temp_len] - && temp_len < len && temp_len < options->print_max; + (valaddr[temp_len] + && temp_len < len && temp_len < options->print_max); temp_len++); len = temp_len; } LA_PRINT_STRING (stream, TYPE_TARGET_TYPE (type), - valaddr + embedded_offset, len, NULL, - 0, options); + valaddr, len, NULL, 0, options); } else { fprintf_filtered (stream, "{"); - val_print_array_elements (type, embedded_offset, - address, stream, - recurse, original_value, - options, 0); + value_print_array_elements (val, stream, recurse, + options, 0); fprintf_filtered (stream, "}"); } break; @@ -372,14 +354,12 @@ case TYPE_CODE_PTR: if (TYPE_CONST (type)) - print_variable_at_address (type, valaddr + embedded_offset, - stream, recurse, options); + print_variable_at_address (type, valaddr, stream, recurse, options); else if (options->format && options->format != 's') - val_print_scalar_formatted (type, embedded_offset, - original_value, options, 0, stream); + value_print_scalar_formatted (val, options, 0, stream); else { - addr = unpack_pointer (type, valaddr + embedded_offset); + addr = unpack_pointer (type, valaddr); print_unpacked_pointer (type, addr, address, options, stream); } break; @@ -393,19 +373,15 @@ /* Fall through. */ case TYPE_CODE_STRUCT: if (m2_is_long_set (type)) - m2_print_long_set (type, valaddr, embedded_offset, address, - stream); + m2_print_long_set (type, valaddr, 0, address, stream); else if (m2_is_unbounded_array (type)) - m2_print_unbounded_array (type, valaddr, embedded_offset, - address, stream, recurse, options); + m2_print_unbounded_array (val, stream, recurse, options); else - cp_print_value_fields (type, type, embedded_offset, - address, stream, recurse, original_value, - options, NULL, 0); + cp_print_value_fields (val, stream, recurse, options, NULL, 0); break; case TYPE_CODE_SET: - elttype = TYPE_INDEX_TYPE (type); + elttype = type->index_type (); elttype = check_typedef (elttype); if (TYPE_STUB (elttype)) { @@ -422,7 +398,7 @@ fputs_filtered ("{", stream); - i = get_discrete_bounds (range, &low_bound, &high_bound); + i = get_discrete_bounds (range, &low_bound, &high_bound) ? 0 : -1; maybe_bad_bstring: if (i < 0) { @@ -433,8 +409,7 @@ for (i = low_bound; i <= high_bound; i++) { - int element = value_bit_index (type, valaddr + embedded_offset, - i); + int element = value_bit_index (type, valaddr, i); if (element < 0) { @@ -449,16 +424,13 @@ need_comma = 1; if (i + 1 <= high_bound - && value_bit_index (type, valaddr + embedded_offset, - ++i)) + && value_bit_index (type, valaddr, ++i)) { int j = i; fputs_filtered ("..", stream); while (i + 1 <= high_bound - && value_bit_index (type, - valaddr + embedded_offset, - ++i)) + && value_bit_index (type, valaddr, ++i)) j = i; print_type_scalar (range, j, stream); } @@ -472,8 +444,8 @@ case TYPE_CODE_RANGE: if (TYPE_LENGTH (type) == TYPE_LENGTH (TYPE_TARGET_TYPE (type))) { - m2_val_print (TYPE_TARGET_TYPE (type), embedded_offset, - address, stream, recurse, original_value, options); + struct value *v = value_cast (TYPE_TARGET_TYPE (type), val); + m2_value_print_inner (v, stream, recurse, options); break; } /* FIXME: create_static_range_type does not set the unsigned bit in a @@ -497,9 +469,7 @@ case TYPE_CODE_BOOL: case TYPE_CODE_CHAR: default: - generic_val_print (type, embedded_offset, address, - stream, recurse, original_value, options, - &m2_decorations); + generic_value_print (val, stream, recurse, options, &m2_decorations); break; } } diff -Nru gdb-9.1/gdb/m32c-tdep.c gdb-10.2/gdb/m32c-tdep.c --- gdb-9.1/gdb/m32c-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/m32c-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Renesas M32C target-dependent code for GDB, the GNU debugger. - Copyright (C) 2004-2020 Free Software Foundation, Inc. + Copyright (C) 2004-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -27,8 +27,8 @@ #include "arch-utils.h" #include "frame.h" #include "frame-unwind.h" -#include "dwarf2-frame.h" -#include "dwarf2expr.h" +#include "dwarf2/frame.h" +#include "dwarf2/expr.h" #include "symtab.h" #include "gdbcore.h" #include "value.h" @@ -1986,7 +1986,7 @@ static int m32c_reg_arg_type (struct type *type) { - enum type_code code = TYPE_CODE (type); + enum type_code code = type->code (); return (code == TYPE_CODE_INT || code == TYPE_CODE_ENUM @@ -2021,11 +2021,11 @@ struct type *func_type = value_type (function); /* Dereference function pointer types. */ - if (TYPE_CODE (func_type) == TYPE_CODE_PTR) + if (func_type->code () == TYPE_CODE_PTR) func_type = TYPE_TARGET_TYPE (func_type); - gdb_assert (TYPE_CODE (func_type) == TYPE_CODE_FUNC || - TYPE_CODE (func_type) == TYPE_CODE_METHOD); + gdb_assert (func_type->code () == TYPE_CODE_FUNC || + func_type->code () == TYPE_CODE_METHOD); #if 0 /* The ABI description in gcc/config/m32c/m32c.abi says that @@ -2033,7 +2033,7 @@ separately, but the code in GCC doesn't actually do so. */ if (TYPE_PROTOTYPED (func_type)) #endif - num_prototyped_args = TYPE_NFIELDS (func_type); + num_prototyped_args = func_type->num_fields (); } /* First, if the function returns an aggregate by value, push a @@ -2153,7 +2153,7 @@ static int m32c_return_by_passed_buf (struct type *type) { - enum type_code code = TYPE_CODE (type); + enum type_code code = type->code (); return (code == TYPE_CODE_STRUCT || code == TYPE_CODE_UNION); @@ -2399,9 +2399,9 @@ { enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); enum type_code target_code; - gdb_assert (TYPE_CODE (type) == TYPE_CODE_PTR || TYPE_IS_REFERENCE (type)); + gdb_assert (type->code () == TYPE_CODE_PTR || TYPE_IS_REFERENCE (type)); - target_code = TYPE_CODE (TYPE_TARGET_TYPE (type)); + target_code = TYPE_TARGET_TYPE (type)->code (); if (target_code == TYPE_CODE_FUNC || target_code == TYPE_CODE_METHOD) { @@ -2478,11 +2478,11 @@ CORE_ADDR ptr; enum type_code target_code; - gdb_assert (TYPE_CODE (type) == TYPE_CODE_PTR || TYPE_IS_REFERENCE (type)); + gdb_assert (type->code () == TYPE_CODE_PTR || TYPE_IS_REFERENCE (type)); ptr = extract_unsigned_integer (buf, TYPE_LENGTH (type), byte_order); - target_code = TYPE_CODE (TYPE_TARGET_TYPE (type)); + target_code = TYPE_TARGET_TYPE (type)->code (); if (target_code == TYPE_CODE_FUNC || target_code == TYPE_CODE_METHOD) { @@ -2644,8 +2644,9 @@ return gdbarch; } +void _initialize_m32c_tdep (); void -_initialize_m32c_tdep (void) +_initialize_m32c_tdep () { register_gdbarch_init (bfd_arch_m32c, m32c_gdbarch_init); diff -Nru gdb-9.1/gdb/m32r-linux-nat.c gdb-10.2/gdb/m32r-linux-nat.c --- gdb-9.1/gdb/m32r-linux-nat.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/m32r-linux-nat.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Native-dependent code for GNU/Linux m32r. - Copyright (C) 2004-2020 Free Software Foundation, Inc. + Copyright (C) 2004-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -237,8 +237,9 @@ _("Got request to store bad register number %d."), regno); } +void _initialize_m32r_linux_nat (); void -_initialize_m32r_linux_nat (void) +_initialize_m32r_linux_nat () { /* Register the target. */ linux_target = &the_m32r_linux_nat_target; diff -Nru gdb-9.1/gdb/m32r-linux-tdep.c gdb-10.2/gdb/m32r-linux-tdep.c --- gdb-9.1/gdb/m32r-linux-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/m32r-linux-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for GNU/Linux m32r. - Copyright (C) 2004-2020 Free Software Foundation, Inc. + Copyright (C) 2004-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -471,8 +471,9 @@ svr4_fetch_objfile_link_map); } +void _initialize_m32r_linux_tdep (); void -_initialize_m32r_linux_tdep (void) +_initialize_m32r_linux_tdep () { gdbarch_register_osabi (bfd_arch_m32r, 0, GDB_OSABI_LINUX, m32r_linux_init_abi); diff -Nru gdb-9.1/gdb/m32r-tdep.c gdb-10.2/gdb/m32r-tdep.c --- gdb-9.1/gdb/m32r-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/m32r-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for Renesas M32R, for GDB. - Copyright (C) 1996-2020 Free Software Foundation, Inc. + Copyright (C) 1996-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -690,7 +690,7 @@ for (argnum = 0, stack_offset = 0; argnum < nargs; argnum++) { type = value_type (args[argnum]); - typecode = TYPE_CODE (type); + typecode = type->code (); len = TYPE_LENGTH (type); memset (valbuf, 0, sizeof (valbuf)); @@ -911,8 +911,9 @@ return gdbarch; } +void _initialize_m32r_tdep (); void -_initialize_m32r_tdep (void) +_initialize_m32r_tdep () { register_gdbarch_init (bfd_arch_m32r, m32r_gdbarch_init); } diff -Nru gdb-9.1/gdb/m32r-tdep.h gdb-10.2/gdb/m32r-tdep.h --- gdb-9.1/gdb/m32r-tdep.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/m32r-tdep.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for Renesas M32R, for GDB. - Copyright (C) 2004-2020 Free Software Foundation, Inc. + Copyright (C) 2004-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/m68hc11-tdep.c gdb-10.2/gdb/m68hc11-tdep.c --- gdb-9.1/gdb/m68hc11-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/m68hc11-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for Motorola 68HC11 & 68HC12 - Copyright (C) 1999-2020 Free Software Foundation, Inc. + Copyright (C) 1999-2021 Free Software Foundation, Inc. Contributed by Stephane Carrez, stcarrez@nerim.fr @@ -24,7 +24,7 @@ #include "frame.h" #include "frame-unwind.h" #include "frame-base.h" -#include "dwarf2-frame.h" +#include "dwarf2/frame.h" #include "trad-frame.h" #include "symtab.h" #include "gdbtypes.h" @@ -1290,9 +1290,9 @@ struct type *valtype, struct regcache *regcache, gdb_byte *readbuf, const gdb_byte *writebuf) { - if (TYPE_CODE (valtype) == TYPE_CODE_STRUCT - || TYPE_CODE (valtype) == TYPE_CODE_UNION - || TYPE_CODE (valtype) == TYPE_CODE_ARRAY + if (valtype->code () == TYPE_CODE_STRUCT + || valtype->code () == TYPE_CODE_UNION + || valtype->code () == TYPE_CODE_ARRAY || TYPE_LENGTH (valtype) > 4) return RETURN_VALUE_STRUCT_CONVENTION; else @@ -1512,8 +1512,9 @@ return gdbarch; } +void _initialize_m68hc11_tdep (); void -_initialize_m68hc11_tdep (void) +_initialize_m68hc11_tdep () { register_gdbarch_init (bfd_arch_m68hc11, m68hc11_gdbarch_init); register_gdbarch_init (bfd_arch_m68hc12, m68hc11_gdbarch_init); diff -Nru gdb-9.1/gdb/m68k-bsd-nat.c gdb-10.2/gdb/m68k-bsd-nat.c --- gdb-9.1/gdb/m68k-bsd-nat.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/m68k-bsd-nat.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Native-dependent code for Motorola 68000 BSD's. - Copyright (C) 2004-2020 Free Software Foundation, Inc. + Copyright (C) 2004-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -17,6 +17,8 @@ You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ +/* We define this to get types like register_t. */ +#define _KERNTYPES #include "defs.h" #include "gdbcore.h" #include "inferior.h" @@ -28,8 +30,9 @@ #include "m68k-tdep.h" #include "inf-ptrace.h" +#include "nbsd-nat.h" -struct m68k_bsd_nat_target final : public inf_ptrace_target +struct m68k_bsd_nat_target final : public nbsd_nat_target { void fetch_registers (struct regcache *, int) override; void store_registers (struct regcache *, int) override; @@ -54,7 +57,7 @@ static void m68kbsd_supply_gregset (struct regcache *regcache, const void *gregs) { - const char *regs = gregs; + const gdb_byte *regs = (const gdb_byte *) gregs; int regnum; for (regnum = M68K_D0_REGNUM; regnum <= M68K_PC_REGNUM; regnum++) @@ -67,7 +70,7 @@ m68kbsd_supply_fpregset (struct regcache *regcache, const void *fpregs) { struct gdbarch *gdbarch = regcache->arch (); - const char *regs = fpregs; + const gdb_byte *regs = (const gdb_byte *) fpregs; int regnum; for (regnum = M68K_FP0_REGNUM; regnum <= M68K_FPI_REGNUM; regnum++) @@ -82,7 +85,7 @@ m68kbsd_collect_gregset (const struct regcache *regcache, void *gregs, int regnum) { - char *regs = gregs; + gdb_byte *regs = (gdb_byte *) gregs; int i; for (i = M68K_D0_REGNUM; i <= M68K_PC_REGNUM; i++) @@ -118,12 +121,13 @@ m68k_bsd_nat_target::fetch_registers (struct regcache *regcache, int regnum) { pid_t pid = regcache->ptid ().pid (); + int lwp = regcache->ptid ().lwp (); if (regnum == -1 || m68kbsd_gregset_supplies_p (regnum)) { struct reg regs; - if (ptrace (PT_GETREGS, pid, (PTRACE_TYPE_ARG3) ®s, 0) == -1) + if (ptrace (PT_GETREGS, pid, (PTRACE_TYPE_ARG3) ®s, lwp) == -1) perror_with_name (_("Couldn't get registers")); m68kbsd_supply_gregset (regcache, ®s); @@ -133,7 +137,7 @@ { struct fpreg fpregs; - if (ptrace (PT_GETFPREGS, pid, (PTRACE_TYPE_ARG3) &fpregs, 0) == -1) + if (ptrace (PT_GETFPREGS, pid, (PTRACE_TYPE_ARG3) &fpregs, lwp) == -1) perror_with_name (_("Couldn't get floating point status")); m68kbsd_supply_fpregset (regcache, &fpregs); @@ -147,17 +151,18 @@ m68k_bsd_nat_target::store_registers (struct regcache *regcache, int regnum) { pid_t pid = regcache->ptid ().pid (); + int lwp = regcache->ptid ().lwp (); if (regnum == -1 || m68kbsd_gregset_supplies_p (regnum)) { struct reg regs; - if (ptrace (PT_GETREGS, pid, (PTRACE_TYPE_ARG3) ®s, 0) == -1) + if (ptrace (PT_GETREGS, pid, (PTRACE_TYPE_ARG3) ®s, lwp) == -1) perror_with_name (_("Couldn't get registers")); m68kbsd_collect_gregset (regcache, ®s, regnum); - if (ptrace (PT_SETREGS, pid, (PTRACE_TYPE_ARG3) ®s, 0) == -1) + if (ptrace (PT_SETREGS, pid, (PTRACE_TYPE_ARG3) ®s, lwp) == -1) perror_with_name (_("Couldn't write registers")); } @@ -165,12 +170,12 @@ { struct fpreg fpregs; - if (ptrace (PT_GETFPREGS, pid, (PTRACE_TYPE_ARG3) &fpregs, 0) == -1) + if (ptrace (PT_GETFPREGS, pid, (PTRACE_TYPE_ARG3) &fpregs, lwp) == -1) perror_with_name (_("Couldn't get floating point status")); m68kbsd_collect_fpregset (regcache, &fpregs, regnum); - if (ptrace (PT_SETFPREGS, pid, (PTRACE_TYPE_ARG3) &fpregs, 0) == -1) + if (ptrace (PT_SETFPREGS, pid, (PTRACE_TYPE_ARG3) &fpregs, lwp) == -1) perror_with_name (_("Couldn't write floating point status")); } } @@ -215,14 +220,15 @@ tmp = pcb->pcb_ps & 0xffff; regcache->raw_supply (M68K_PS_REGNUM, &tmp); - read_memory (pcb->pcb_regs[PCB_REGS_FP] + 4, (char *) &tmp, sizeof tmp); + read_memory (pcb->pcb_regs[PCB_REGS_FP] + 4, (gdb_byte *) &tmp, sizeof tmp); regcache->raw_supply (M68K_PC_REGNUM, &tmp); return 1; } +void _initialize_m68kbsd_nat (); void -_initialize_m68kbsd_nat (void) +_initialize_m68kbsd_nat () { add_inf_child_target (&the_m68k_bsd_nat_target); diff -Nru gdb-9.1/gdb/m68k-bsd-tdep.c gdb-10.2/gdb/m68k-bsd-tdep.c --- gdb-9.1/gdb/m68k-bsd-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/m68k-bsd-tdep.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for Motorola 68000 BSD's. - Copyright (C) 2004-2020 Free Software Foundation, Inc. + Copyright (C) 2004-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -152,8 +152,9 @@ (gdbarch, svr4_ilp32_fetch_link_map_offsets); } +void _initialize_m68kbsd_tdep (); void -_initialize_m68kbsd_tdep (void) +_initialize_m68kbsd_tdep () { gdbarch_register_osabi (bfd_arch_m68k, 0, GDB_OSABI_NETBSD, m68kbsd_init_abi); diff -Nru gdb-9.1/gdb/m68k-linux-nat.c gdb-10.2/gdb/m68k-linux-nat.c --- gdb-9.1/gdb/m68k-linux-nat.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/m68k-linux-nat.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Motorola m68k native support for GNU/Linux. - Copyright (C) 1996-2020 Free Software Foundation, Inc. + Copyright (C) 1996-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -511,8 +511,9 @@ return PS_OK; } +void _initialize_m68k_linux_nat (); void -_initialize_m68k_linux_nat (void) +_initialize_m68k_linux_nat () { /* Register the target. */ linux_target = &the_m68k_linux_nat_target; diff -Nru gdb-9.1/gdb/m68k-linux-tdep.c gdb-10.2/gdb/m68k-linux-tdep.c --- gdb-9.1/gdb/m68k-linux-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/m68k-linux-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Motorola m68k target-dependent support for GNU/Linux. - Copyright (C) 1996-2020 Free Software Foundation, Inc. + Copyright (C) 1996-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -423,8 +423,9 @@ svr4_fetch_objfile_link_map); } +void _initialize_m68k_linux_tdep (); void -_initialize_m68k_linux_tdep (void) +_initialize_m68k_linux_tdep () { gdbarch_register_osabi (bfd_arch_m68k, 0, GDB_OSABI_LINUX, m68k_linux_init_abi); diff -Nru gdb-9.1/gdb/m68k-tdep.c gdb-10.2/gdb/m68k-tdep.c --- gdb-9.1/gdb/m68k-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/m68k-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for the Motorola 68000 series. - Copyright (C) 1990-2020 Free Software Foundation, Inc. + Copyright (C) 1990-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include "defs.h" -#include "dwarf2-frame.h" +#include "dwarf2/frame.h" #include "frame.h" #include "frame-base.h" #include "frame-unwind.h" @@ -191,7 +191,7 @@ return 0; return (regnum >= M68K_FP0_REGNUM && regnum <= M68K_FP0_REGNUM + 7 /* We only support floating-point values. */ - && TYPE_CODE (type) == TYPE_CODE_FLT + && type->code () == TYPE_CODE_FLT && type != register_type (gdbarch, M68K_FP0_REGNUM)); } @@ -207,7 +207,7 @@ gdb_byte from[M68K_MAX_REGISTER_SIZE]; struct type *fpreg_type = register_type (gdbarch, M68K_FP0_REGNUM); - gdb_assert (TYPE_CODE (type) == TYPE_CODE_FLT); + gdb_assert (type->code () == TYPE_CODE_FLT); /* Convert to TYPE. */ if (!get_frame_register_bytes (frame, regnum, 0, @@ -232,7 +232,7 @@ M68K_FP0_REGNUM); /* We only support floating-point values. */ - if (TYPE_CODE (type) != TYPE_CODE_FLT) + if (type->code () != TYPE_CODE_FLT) { warning (_("Cannot convert non-floating-point type " "to floating-point register value.")); @@ -308,13 +308,13 @@ struct gdbarch *gdbarch = regcache->arch (); struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); - if (tdep->float_return && TYPE_CODE (type) == TYPE_CODE_FLT) + if (tdep->float_return && type->code () == TYPE_CODE_FLT) { struct type *fpreg_type = register_type (gdbarch, M68K_FP0_REGNUM); regcache->raw_read (M68K_FP0_REGNUM, buf); target_float_convert (buf, fpreg_type, valbuf, type); } - else if (TYPE_CODE (type) == TYPE_CODE_PTR && TYPE_LENGTH (type) == 4) + else if (type->code () == TYPE_CODE_PTR && TYPE_LENGTH (type) == 4) regcache->raw_read (M68K_A0_REGNUM, valbuf); else m68k_extract_return_value (type, regcache, valbuf); @@ -347,14 +347,14 @@ struct gdbarch *gdbarch = regcache->arch (); struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); - if (tdep->float_return && TYPE_CODE (type) == TYPE_CODE_FLT) + if (tdep->float_return && type->code () == TYPE_CODE_FLT) { struct type *fpreg_type = register_type (gdbarch, M68K_FP0_REGNUM); gdb_byte buf[M68K_MAX_REGISTER_SIZE]; target_float_convert (valbuf, type, buf, fpreg_type); regcache->raw_write (M68K_FP0_REGNUM, buf); } - else if (TYPE_CODE (type) == TYPE_CODE_PTR && TYPE_LENGTH (type) == 4) + else if (type->code () == TYPE_CODE_PTR && TYPE_LENGTH (type) == 4) { regcache->raw_write (M68K_A0_REGNUM, valbuf); regcache->raw_write (M68K_D0_REGNUM, valbuf); @@ -371,7 +371,7 @@ m68k_reg_struct_return_p (struct gdbarch *gdbarch, struct type *type) { struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); - enum type_code code = TYPE_CODE (type); + enum type_code code = type->code (); int len = TYPE_LENGTH (type); gdb_assert (code == TYPE_CODE_STRUCT || code == TYPE_CODE_UNION @@ -394,7 +394,7 @@ struct type *type, struct regcache *regcache, gdb_byte *readbuf, const gdb_byte *writebuf) { - enum type_code code = TYPE_CODE (type); + enum type_code code = type->code (); /* GCC returns a `long double' in memory too. */ if (((code == TYPE_CODE_STRUCT || code == TYPE_CODE_UNION @@ -430,7 +430,7 @@ struct type *type, struct regcache *regcache, gdb_byte *readbuf, const gdb_byte *writebuf) { - enum type_code code = TYPE_CODE (type); + enum type_code code = type->code (); if ((code == TYPE_CODE_STRUCT || code == TYPE_CODE_UNION || code == TYPE_CODE_COMPLEX) @@ -463,9 +463,9 @@ changing TYPE into the type of the first member of the structure. Since that should work for all structures that have only one member, we don't bother to check the member's type here. */ - if (code == TYPE_CODE_STRUCT && TYPE_NFIELDS (type) == 1) + if (code == TYPE_CODE_STRUCT && type->num_fields () == 1) { - type = check_typedef (TYPE_FIELD_TYPE (type, 0)); + type = check_typedef (type->field (0).type ()); return m68k_svr4_return_value (gdbarch, function, type, regcache, readbuf, writebuf); } @@ -511,9 +511,9 @@ /* Non-scalars bigger than 4 bytes are left aligned, others are right aligned. */ - if ((TYPE_CODE (value_type) == TYPE_CODE_STRUCT - || TYPE_CODE (value_type) == TYPE_CODE_UNION - || TYPE_CODE (value_type) == TYPE_CODE_ARRAY) + if ((value_type->code () == TYPE_CODE_STRUCT + || value_type->code () == TYPE_CODE_UNION + || value_type->code () == TYPE_CODE_ARRAY) && len > 4) offset = 0; else @@ -1281,8 +1281,9 @@ return; } +void _initialize_m68k_tdep (); void -_initialize_m68k_tdep (void) +_initialize_m68k_tdep () { gdbarch_register (bfd_arch_m68k, m68k_gdbarch_init, m68k_dump_tdep); } diff -Nru gdb-9.1/gdb/m68k-tdep.h gdb-10.2/gdb/m68k-tdep.h --- gdb-9.1/gdb/m68k-tdep.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/m68k-tdep.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for the Motorola 68000 series. - Copyright (C) 1990-2020 Free Software Foundation, Inc. + Copyright (C) 1990-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/machoread.c gdb-10.2/gdb/machoread.c --- gdb-9.1/gdb/machoread.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/machoread.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Darwin support for GDB, the GNU debugger. - Copyright (C) 2008-2020 Free Software Foundation, Inc. + Copyright (C) 2008-2021 Free Software Foundation, Inc. Contributed by AdaCore. @@ -28,7 +28,6 @@ #include "gdbcore.h" #include "mach-o.h" #include "aout/stab_gnu.h" -#include "psympriv.h" #include "complaints.h" #include "gdb_bfd.h" #include <string> @@ -494,7 +493,7 @@ { if (mach_o_debug_level > 4) { - struct gdbarch *arch = get_objfile_arch (main_objfile); + struct gdbarch *arch = main_objfile->arch (); printf_unfiltered (_("Adding symbol %s (addr: %s)\n"), sym->name, paddress (arch, sym->value)); @@ -568,7 +567,7 @@ if (mach_o_debug_level > 3) { - struct gdbarch *arch = get_objfile_arch (main_objfile); + struct gdbarch *arch = main_objfile->arch (); printf_unfiltered (_("resolve sect %s with %s (set to %s)\n"), sec->name, sym->name, @@ -640,7 +639,7 @@ /* Open the archive and check the format. */ gdb_bfd_ref_ptr archive_bfd (gdb_bfd_open (archive_name.c_str (), - gnutarget, -1)); + gnutarget)); if (archive_bfd == NULL) { warning (_("Could not open OSO archive file \"%s\""), @@ -706,7 +705,7 @@ } else { - gdb_bfd_ref_ptr abfd (gdb_bfd_open (oso->name, gnutarget, -1)); + gdb_bfd_ref_ptr abfd (gdb_bfd_open (oso->name, gnutarget)); if (abfd == NULL) warning (_("`%s': can't open to read symbols: %s."), oso->name, bfd_errmsg (bfd_get_error ())); @@ -907,12 +906,7 @@ struct obj_section *osect; /* Allocate section_offsets. */ - objfile->num_sections = bfd_count_sections (objfile->obfd); - objfile->section_offsets = (struct section_offsets *) - obstack_alloc (&objfile->objfile_obstack, - SIZEOF_N_SECTION_OFFSETS (objfile->num_sections)); - memset (objfile->section_offsets, 0, - SIZEOF_N_SECTION_OFFSETS (objfile->num_sections)); + objfile->section_offsets.assign (bfd_count_sections (objfile->obfd), 0); /* This code is run when we first add the objfile with symfile_add_with_addrs_or_offsets, when "addrs" not "offsets" are @@ -966,8 +960,9 @@ &psym_functions }; +void _initialize_machoread (); void -_initialize_machoread (void) +_initialize_machoread () { add_symtab_fns (bfd_target_mach_o_flavour, &macho_sym_fns); diff -Nru gdb-9.1/gdb/macrocmd.c gdb-10.2/gdb/macrocmd.c --- gdb-9.1/gdb/macrocmd.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/macrocmd.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* C preprocessor macro expansion commands for GDB. - Copyright (C) 2002-2020 Free Software Foundation, Inc. + Copyright (C) 2002-2021 Free Software Foundation, Inc. Contributed by Red Hat, Inc. This file is part of GDB. @@ -33,15 +33,6 @@ static struct cmd_list_element *macrolist; -static void -macro_command (const char *arg, int from_tty) -{ - printf_unfiltered - ("\"macro\" must be followed by the name of a macro command.\n"); - help_list (macrolist, "macro ", all_commands, gdb_stdout); -} - - /* Macro expansion commands. */ @@ -56,9 +47,6 @@ static void macro_expand_command (const char *exp, int from_tty) { - gdb::unique_xmalloc_ptr<struct macro_scope> ms; - gdb::unique_xmalloc_ptr<char> expanded; - /* You know, when the user doesn't specify any expression, it would be really cool if this defaulted to the last expression evaluated. Then it would be easy to ask, "Hey, what did I just evaluate?" But @@ -69,10 +57,12 @@ " expression you\n" "want to expand.")); - ms = default_macro_scope (); - if (ms) + gdb::unique_xmalloc_ptr<macro_scope> ms = default_macro_scope (); + + if (ms != nullptr) { - expanded = macro_expand (exp, standard_macro_lookup, ms.get ()); + gdb::unique_xmalloc_ptr<char> expanded = macro_expand (exp, *ms); + fputs_filtered ("expands to: ", gdb_stdout); fputs_filtered (expanded.get (), gdb_stdout); fputs_filtered ("\n", gdb_stdout); @@ -85,9 +75,6 @@ static void macro_expand_once_command (const char *exp, int from_tty) { - gdb::unique_xmalloc_ptr<struct macro_scope> ms; - gdb::unique_xmalloc_ptr<char> expanded; - /* You know, when the user doesn't specify any expression, it would be really cool if this defaulted to the last expression evaluated. And it should set the once-expanded text as the new `last @@ -98,10 +85,12 @@ " the expression\n" "you want to expand.")); - ms = default_macro_scope (); - if (ms) + gdb::unique_xmalloc_ptr<macro_scope> ms = default_macro_scope (); + + if (ms != nullptr) { - expanded = macro_expand_once (exp, standard_macro_lookup, ms.get ()); + gdb::unique_xmalloc_ptr<char> expanded = macro_expand_once (exp, *ms); + fputs_filtered ("expands to: ", gdb_stdout); fputs_filtered (expanded.get (), gdb_stdout); fputs_filtered ("\n", gdb_stdout); @@ -458,14 +447,15 @@ /* Initializing the `macrocmd' module. */ +void _initialize_macrocmd (); void -_initialize_macrocmd (void) +_initialize_macrocmd () { /* We introduce a new command prefix, `macro', under which we'll put the various commands for working with preprocessor macros. */ - add_prefix_cmd ("macro", class_info, macro_command, - _("Prefix for commands dealing with C preprocessor macros."), - ¯olist, "macro ", 0, &cmdlist); + add_basic_prefix_cmd ("macro", class_info, + _("Prefix for commands dealing with C preprocessor macros."), + ¯olist, "macro ", 0, &cmdlist); add_cmd ("expand", no_class, macro_expand_command, _("\ Fully expand any C/C++ preprocessor macro invocations in EXPRESSION.\n\ diff -Nru gdb-9.1/gdb/macroexp.c gdb-10.2/gdb/macroexp.c --- gdb-9.1/gdb/macroexp.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/macroexp.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* C preprocessor macro expansion for GDB. - Copyright (C) 2002-2020 Free Software Foundation, Inc. + Copyright (C) 2002-2021 Free Software Foundation, Inc. Contributed by Red Hat, Inc. This file is part of GDB. @@ -21,6 +21,7 @@ #include "gdb_obstack.h" #include "macrotab.h" #include "macroexp.h" +#include "macroscope.h" #include "c-lang.h" @@ -127,15 +128,14 @@ xfree (text); } - /* Release the text of the buffer to the caller, which is now - responsible for freeing it. */ - ATTRIBUTE_UNUSED_RESULT char *release () + /* Release the text of the buffer to the caller. */ + gdb::unique_xmalloc_ptr<char> release () { gdb_assert (! shared); gdb_assert (size); char *result = text; text = NULL; - return result; + return gdb::unique_xmalloc_ptr<char> (result); } /* Resize the buffer to be at least N bytes long. Raise an error if @@ -698,7 +698,7 @@ /* See macroexp.h. */ -char * +gdb::unique_xmalloc_ptr<char> macro_stringify (const char *str) { int len = strlen (str); @@ -877,9 +877,7 @@ static void scan (struct macro_buffer *dest, struct macro_buffer *src, struct macro_name_list *no_loop, - macro_lookup_ftype *lookup_func, - void *lookup_baton); - + const macro_scope &scope); /* A helper function for substitute_args. @@ -959,8 +957,7 @@ int is_varargs, const struct macro_buffer *va_arg_name, const std::vector<struct macro_buffer> &argv, struct macro_name_list *no_loop, - macro_lookup_ftype *lookup_func, - void *lookup_baton) + const macro_scope &scope) { /* The token we are currently considering. */ struct macro_buffer tok; @@ -1194,7 +1191,7 @@ referring to the argument's text, not the argument itself. */ struct macro_buffer arg_src (argv[arg].text, argv[arg].len); - scan (dest, &arg_src, no_loop, lookup_func, lookup_baton); + scan (dest, &arg_src, no_loop, scope); substituted = 1; } @@ -1224,8 +1221,7 @@ struct macro_buffer *dest, struct macro_buffer *src, struct macro_name_list *no_loop, - macro_lookup_ftype *lookup_func, - void *lookup_baton) + const macro_scope &scope) { struct macro_name_list new_no_loop; @@ -1243,7 +1239,7 @@ struct macro_buffer replacement_list (def->replacement, strlen (def->replacement)); - scan (dest, &replacement_list, &new_no_loop, lookup_func, lookup_baton); + scan (dest, &replacement_list, &new_no_loop, scope); return 1; } else if (def->kind == macro_function_like) @@ -1310,7 +1306,7 @@ expand an argument until we see how it's being used. */ struct macro_buffer substituted (0); substitute_args (&substituted, def, is_varargs, &va_arg_name, - argv, no_loop, lookup_func, lookup_baton); + argv, no_loop, scope); /* Now `substituted' is the macro's replacement list, with all argument values substituted into it properly. Re-scan it for @@ -1323,7 +1319,7 @@ `substituted's original text buffer after scanning it so we can free it. */ struct macro_buffer substituted_src (substituted.text, substituted.len); - scan (dest, &substituted_src, &new_no_loop, lookup_func, lookup_baton); + scan (dest, &substituted_src, &new_no_loop, scope); return 1; } @@ -1344,8 +1340,7 @@ struct macro_buffer *src_first, struct macro_buffer *src_rest, struct macro_name_list *no_loop, - macro_lookup_ftype *lookup_func, - void *lookup_baton) + const macro_scope &scope) { gdb_assert (src_first->shared); gdb_assert (src_rest->shared); @@ -1363,11 +1358,9 @@ if (! currently_rescanning (no_loop, id.c_str ())) { /* Does this identifier have a macro definition in scope? */ - struct macro_definition *def = lookup_func (id.c_str (), - lookup_baton); + macro_definition *def = standard_macro_lookup (id.c_str (), scope); - if (def && expand (id.c_str (), def, dest, src_rest, no_loop, - lookup_func, lookup_baton)) + if (def && expand (id.c_str (), def, dest, src_rest, no_loop, scope)) return 1; } } @@ -1385,8 +1378,7 @@ scan (struct macro_buffer *dest, struct macro_buffer *src, struct macro_name_list *no_loop, - macro_lookup_ftype *lookup_func, - void *lookup_baton) + const macro_scope &scope) { gdb_assert (src->shared); gdb_assert (! dest->shared); @@ -1408,7 +1400,7 @@ dest->last_token = dest->len; } - if (! maybe_expand (dest, &tok, src, no_loop, lookup_func, lookup_baton)) + if (! maybe_expand (dest, &tok, src, no_loop, scope)) /* We didn't end up expanding tok as a macro reference, so simply append it to dest. */ append_tokens_without_splicing (dest, &tok); @@ -1425,36 +1417,29 @@ gdb::unique_xmalloc_ptr<char> -macro_expand (const char *source, - macro_lookup_ftype *lookup_func, - void *lookup_func_baton) +macro_expand (const char *source, const macro_scope &scope) { struct macro_buffer src (source, strlen (source)); struct macro_buffer dest (0); dest.last_token = 0; - scan (&dest, &src, 0, lookup_func, lookup_func_baton); + scan (&dest, &src, 0, scope); dest.appendc ('\0'); - return gdb::unique_xmalloc_ptr<char> (dest.release ()); + return dest.release (); } gdb::unique_xmalloc_ptr<char> -macro_expand_once (const char *source, - macro_lookup_ftype *lookup_func, - void *lookup_func_baton) +macro_expand_once (const char *source, const macro_scope &scope) { error (_("Expand-once not implemented yet.")); } - -char * -macro_expand_next (const char **lexptr, - macro_lookup_ftype *lookup_func, - void *lookup_baton) +gdb::unique_xmalloc_ptr<char> +macro_expand_next (const char **lexptr, const macro_scope &scope) { struct macro_buffer tok; @@ -1467,10 +1452,10 @@ /* Get the text's first preprocessing token. */ if (! get_token (&tok, &src)) - return 0; + return nullptr; /* If it's a macro invocation, expand it. */ - if (maybe_expand (&dest, &tok, &src, 0, lookup_func, lookup_baton)) + if (maybe_expand (&dest, &tok, &src, 0, scope)) { /* It was a macro invocation! Package up the expansion as a null-terminated string and return it. Set *lexptr to the @@ -1482,6 +1467,6 @@ else { /* It wasn't a macro invocation. */ - return 0; + return nullptr; } } diff -Nru gdb-9.1/gdb/macroexp.h gdb-10.2/gdb/macroexp.h --- gdb-9.1/gdb/macroexp.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/macroexp.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Interface to C preprocessor macro expansion for GDB. - Copyright (C) 2002-2020 Free Software Foundation, Inc. + Copyright (C) 2002-2021 Free Software Foundation, Inc. Contributed by Red Hat, Inc. This file is part of GDB. @@ -21,38 +21,26 @@ #ifndef MACROEXP_H #define MACROEXP_H -/* A function for looking up preprocessor macro definitions. Return - the preprocessor definition of NAME in scope according to BATON, or - zero if NAME is not defined as a preprocessor macro. - - The caller must not free or modify the definition returned. It is - probably unwise for the caller to hold pointers to it for very - long; it probably lives in some objfile's obstacks. */ -typedef struct macro_definition *(macro_lookup_ftype) (const char *name, - void *baton); - - -/* Expand any preprocessor macros in SOURCE, and return the expanded - text. Use LOOKUP_FUNC and LOOKUP_FUNC_BATON to find identifiers' - preprocessor definitions. SOURCE is a null-terminated string. The - result is a null-terminated string, allocated using xmalloc; it is - the caller's responsibility to free it. */ +struct macro_scope; + +/* Expand any preprocessor macros in SOURCE (a null-terminated string), and + return the expanded text. + + Use SCOPE to find identifiers' preprocessor definitions. + + The result is a null-terminated string. */ gdb::unique_xmalloc_ptr<char> macro_expand (const char *source, - macro_lookup_ftype *lookup_func, - void *lookup_func_baton); + const macro_scope &scope); +/* Expand all preprocessor macro references that appear explicitly in SOURCE + (a null-terminated string), but do not expand any new macro references + introduced by that first level of expansion. -/* Expand all preprocessor macro references that appear explicitly in - SOURCE, but do not expand any new macro references introduced by - that first level of expansion. Use LOOKUP_FUNC and - LOOKUP_FUNC_BATON to find identifiers' preprocessor definitions. - SOURCE is a null-terminated string. The result is a - null-terminated string, allocated using xmalloc; it is the caller's - responsibility to free it. */ -gdb::unique_xmalloc_ptr<char> macro_expand_once (const char *source, - macro_lookup_ftype *lookup_func, - void *lookup_func_baton); + Use SCOPE to find identifiers' preprocessor definitions. + The result is a null-terminated string. */ +gdb::unique_xmalloc_ptr<char> macro_expand_once (const char *source, + const macro_scope &scope); /* If the null-terminated string pointed to by *LEXPTR begins with a macro invocation, return the result of expanding that invocation as @@ -61,9 +49,9 @@ contains no further macro invocations. Otherwise, if *LEXPTR does not start with a macro invocation, - return zero, and leave *LEXPTR unchanged. + return nullptr, and leave *LEXPTR unchanged. - Use LOOKUP_FUNC and LOOKUP_BATON to find macro definitions. + Use SCOPE to find macro definitions. If this function returns a string, the caller is responsible for freeing it, using xfree. @@ -80,9 +68,8 @@ much have to do tokenization to find the end of the string that needs to be macro-expanded. Our C/C++ tokenizer isn't really designed to be called by anything but the yacc parser engine. */ -char *macro_expand_next (const char **lexptr, - macro_lookup_ftype *lookup_func, - void *lookup_baton); +gdb::unique_xmalloc_ptr<char> macro_expand_next (const char **lexptr, + const macro_scope &scope); /* Functions to classify characters according to cpp rules. */ @@ -91,9 +78,7 @@ int macro_is_digit (int c); -/* Stringify STR according to C rules and return an xmalloc'd pointer - to the result. */ - -char *macro_stringify (const char *str); +/* Stringify STR according to C rules and return a null-terminated string. */ +gdb::unique_xmalloc_ptr<char> macro_stringify (const char *str); #endif /* MACROEXP_H */ diff -Nru gdb-9.1/gdb/macroscope.c gdb-10.2/gdb/macroscope.c --- gdb-9.1/gdb/macroscope.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/macroscope.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Functions for deciding which macros are currently in scope. - Copyright (C) 2002-2020 Free Software Foundation, Inc. + Copyright (C) 2002-2021 Free Software Foundation, Inc. Contributed by Red Hat, Inc. This file is part of GDB. @@ -140,20 +140,21 @@ location given by BATON, which must be a pointer to a `struct macro_scope' structure. */ struct macro_definition * -standard_macro_lookup (const char *name, void *baton) +standard_macro_lookup (const char *name, const macro_scope &ms) { - struct macro_scope *ms = (struct macro_scope *) baton; - struct macro_definition *result; - /* Give user-defined macros priority over all others. */ - result = macro_lookup_definition (macro_main (macro_user_macros), -1, name); - if (! result) - result = macro_lookup_definition (ms->file, ms->line, name); + macro_definition *result + = macro_lookup_definition (macro_main (macro_user_macros), -1, name); + + if (result == nullptr) + result = macro_lookup_definition (ms.file, ms.line, name); + return result; } +void _initialize_macroscope (); void -_initialize_macroscope (void) +_initialize_macroscope () { macro_user_macros = new_macro_table (NULL, NULL, NULL); macro_set_main (macro_user_macros, "<user-defined>"); diff -Nru gdb-9.1/gdb/macroscope.h gdb-10.2/gdb/macroscope.h --- gdb-9.1/gdb/macroscope.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/macroscope.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Interface to functions for deciding which macros are currently in scope. - Copyright (C) 2002-2020 Free Software Foundation, Inc. + Copyright (C) 2002-2021 Free Software Foundation, Inc. Contributed by Red Hat, Inc. This file is part of GDB. @@ -56,12 +56,9 @@ the user macro scope. */ gdb::unique_xmalloc_ptr<struct macro_scope> default_macro_scope (void); - /* Look up the definition of the macro named NAME in scope at the source - location given by BATON, which must be a pointer to a `struct - macro_scope' structure. This function is suitable for use as - a macro_lookup_ftype function. */ -struct macro_definition *standard_macro_lookup (const char *name, void *baton); - + location given by MS. */ +macro_definition *standard_macro_lookup (const char *name, + const macro_scope &ms); #endif /* MACROSCOPE_H */ diff -Nru gdb-9.1/gdb/macrotab.c gdb-10.2/gdb/macrotab.c --- gdb-9.1/gdb/macrotab.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/macrotab.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* C preprocessor macro tables for GDB. - Copyright (C) 2002-2020 Free Software Foundation, Inc. + Copyright (C) 2002-2021 Free Software Foundation, Inc. Contributed by Red Hat, Inc. This file is part of GDB. @@ -882,25 +882,19 @@ static struct macro_definition * fixup_definition (const char *filename, int line, struct macro_definition *def) { - static char *saved_expansion; - - if (saved_expansion) - { - xfree (saved_expansion); - saved_expansion = NULL; - } + static gdb::unique_xmalloc_ptr<char> saved_expansion; if (def->kind == macro_object_like) { if (def->argc == macro_FILE) { saved_expansion = macro_stringify (filename); - def->replacement = saved_expansion; + def->replacement = saved_expansion.get (); } else if (def->argc == macro_LINE) { - saved_expansion = xstrprintf ("%d", line); - def->replacement = saved_expansion; + saved_expansion.reset (xstrprintf ("%d", line)); + def->replacement = saved_expansion.get (); } } diff -Nru gdb-9.1/gdb/macrotab.h gdb-10.2/gdb/macrotab.h --- gdb-9.1/gdb/macrotab.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/macrotab.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Interface to C preprocessor macro tables for GDB. - Copyright (C) 2002-2020 Free Software Foundation, Inc. + Copyright (C) 2002-2021 Free Software Foundation, Inc. Contributed by Red Hat, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/main.c gdb-10.2/gdb/main.c --- gdb-9.1/gdb/main.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/main.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Top level stuff for GDB, the GNU debugger. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -28,7 +28,7 @@ #include <sys/types.h> #include <sys/stat.h> #include <ctype.h> -#include "event-loop.h" +#include "gdbsupport/event-loop.h" #include "ui-out.h" #include "interps.h" @@ -53,6 +53,7 @@ #include "gdbtk/generic/gdbtk.h" #endif #include "gdbsupport/alt-stack.h" +#include "observable.h" /* The selected interpreter. This will be used as a set command variable, so it should always be malloc'ed - since @@ -124,7 +125,8 @@ print_sys_errmsg (new_datadir, save_errno); } else if (!S_ISDIR (st.st_mode)) - warning (_("%s is not a directory."), new_datadir); + warning (_("%ps is not a directory."), + styled_string (file_name_style.style (), new_datadir)); gdb_datadir = gdb_realpath (new_datadir).get (); @@ -335,6 +337,61 @@ *local_gdbinit = localinit; } +/* Start up the event loop. This is the entry point to the event loop + from the command loop. */ + +static void +start_event_loop () +{ + /* Loop until there is nothing to do. This is the entry point to + the event loop engine. gdb_do_one_event will process one event + for each invocation. It blocks waiting for an event and then + processes it. */ + while (1) + { + int result = 0; + + try + { + result = gdb_do_one_event (); + } + catch (const gdb_exception &ex) + { + exception_print (gdb_stderr, ex); + + /* If any exception escaped to here, we better enable + stdin. Otherwise, any command that calls async_disable_stdin, + and then throws, will leave stdin inoperable. */ + SWITCH_THRU_ALL_UIS () + { + async_enable_stdin (); + } + /* If we long-jumped out of do_one_event, we probably didn't + get around to resetting the prompt, which leaves readline + in a messed-up state. Reset it here. */ + current_ui->prompt_state = PROMPT_NEEDED; + gdb::observers::command_error.notify (); + /* This call looks bizarre, but it is required. If the user + entered a command that caused an error, + after_char_processing_hook won't be called from + rl_callback_read_char_wrapper. Using a cleanup there + won't work, since we want this function to be called + after a new prompt is printed. */ + if (after_char_processing_hook) + (*after_char_processing_hook) (); + /* Maybe better to set a flag to be checked somewhere as to + whether display the prompt or not. */ + } + + if (result < 0) + break; + } + + /* We are done with the event loop. There are no more event sources + to listen to. So we exit GDB. */ + return; +} + /* Call command_loop. */ /* Prevent inlining this function for the benefit of GDB's selftests @@ -574,14 +631,9 @@ gdb_datadir = relocate_gdb_directory (GDB_DATADIR, GDB_DATADIR_RELOCATABLE); -#ifdef WITH_PYTHON_PATH - { - /* For later use in helping Python find itself. */ - char *tmp = concat (WITH_PYTHON_PATH, SLASH_STRING, "lib", (char *) NULL); - - python_libdir = relocate_gdb_directory (tmp, PYTHON_PATH_RELOCATABLE); - xfree (tmp); - } +#ifdef WITH_PYTHON_LIBDIR + python_libdir = relocate_gdb_directory (WITH_PYTHON_LIBDIR, + PYTHON_LIBDIR_RELOCATABLE); #endif #ifdef RELOC_SRCDIR @@ -954,7 +1006,6 @@ if (print_help) { print_gdb_help (gdb_stdout); - fputs_unfiltered ("\n", gdb_stdout); exit (0); } @@ -1120,7 +1171,7 @@ } if (ttyarg != NULL) - set_inferior_io_terminal (ttyarg); + current_inferior ()->set_tty (ttyarg); /* Error messages should no longer be distinguished with extra output. */ warning_pre_print = _("warning: "); @@ -1340,7 +1391,11 @@ GDB manual (available as on-line info or a printed manual).\n\ "), stream); if (REPORT_BUGS_TO[0] && stream == gdb_stdout) - fprintf_unfiltered (stream, _("\ -Report bugs to \"%s\".\n\ + fprintf_unfiltered (stream, _("\n\ +Report bugs to %s.\n\ "), REPORT_BUGS_TO); + if (stream == gdb_stdout) + fprintf_unfiltered (stream, _("\n\ +You can ask GDB-related questions on the GDB users mailing list\n\ +(gdb@sourceware.org) or on GDB's IRC channel (#gdb on Freenode).\n")); } diff -Nru gdb-9.1/gdb/main.h gdb-10.2/gdb/main.h --- gdb-9.1/gdb/main.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/main.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Main interface for GDB, the GNU debugger. - Copyright (C) 2002-2020 Free Software Foundation, Inc. + Copyright (C) 2002-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/MAINTAINERS gdb-10.2/gdb/MAINTAINERS --- gdb-9.1/gdb/MAINTAINERS 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/MAINTAINERS 2021-04-25 04:06:26.000000000 +0000 @@ -156,6 +156,7 @@ Simon Marchi simon.marchi@polymtl.ca Yao Qi qiyao@sourceware.org Tom Tromey tom@tromey.com +Tom de Vries tdevries@suse.de Ulrich Weigand Ulrich.Weigand@de.ibm.com Eli Zaretskii eliz@gnu.org @@ -241,11 +242,17 @@ alpha --target=alpha-elf ,-Werror + arc --target=arc-elf + Shahab Vahedi shahab@synopsys.com + arm --target=arm-elf ,-Werror Alan Hayward alan.hayward@arm.com avr --target=avr ,-Werror + bpf --target=bpf-unknown-none + Jose E. Marchesi jose.marchesi@oracle.com + cris --target=cris-elf ,-Werror , (sim does not build with -Werror) @@ -285,8 +292,7 @@ moxie --target=moxie-elf ,-Werror Anthony Green green@moxielogic.com - ms1 --target=ms1-elf ,-Werror - Kevin Buettner kevinb@redhat.com + ms1 Deleted nios2 --target=nios2-elf ,-Werror --target=nios2-linux-gnu ,-Werror @@ -304,7 +310,7 @@ riscv --target=riscv32-elf ,-Werror --target=riscv64-elf ,-Werror Andrew Burgess andrew.burgess@embecosm.com - Palmer Dabbelt palmer@sifive.com + Palmer Dabbelt palmer@dabbelt.com rl78 --target=rl78-elf ,-Werror @@ -371,7 +377,7 @@ testsuite gdbtk (gdb.gdbtk) Keith Seitz keiths@redhat.com -SystemTap Sergio Durigan Junior sergiodj@redhat.com +SystemTap Sergio Durigan Junior sergiodj@sergiodj.net @@ -439,6 +445,7 @@ FSF assignment and have submitted one good patch. Tankut Baris Aktemur tankut.baris.aktemur@intel.com +Mihails Strasuns mihails.strasuns@intel.com Pedro Alves pedro_alves@portugalmail.pt David Anderson davea@sgi.com John David Anglin dave.anglin@nrc-cnrc.gc.ca @@ -488,10 +495,12 @@ Dhananjay Deshpande dhananjayd@kpitcummins.com Markus Deuling deuling@de.ibm.com Klee Dienes kdienes@apple.com +Hannes Domani ssbssa@yahoo.de Gabriel Dos Reis gdr@integrable-solutions.net -Sergio Durigan Junior sergiodj@redhat.com +Sergio Durigan Junior sergiodj@sergiodj.net Michael Eager eager@eagercon.com Richard Earnshaw rearnsha@arm.com +Bernd Edlinger bernd.edlinger@hotmail.de Steve Ellcey sje@cup.hp.com Frank Ch. Eigler fche@redhat.com Ben Elliston bje@gnu.org @@ -631,6 +640,7 @@ Keith Seitz keiths@redhat.com Carlos Eduardo Seo cseo@linux.vnet.ibm.com Ozkan Sezer sezeroz@gmail.com +Alok Kumar Sharma AlokKumar.Sharma@amd.com Marcus Shawcroft marcus.shawcroft@arm.com Stan Shebs stanshebs@google.com Joel Sherrill joel.sherrill@oarcorp.com @@ -658,10 +668,10 @@ Andreas Tobler andreast@fgznet.ch Jon Turney jon.turney@dronecode.org.uk David Ung davidu@mips.com +Shahab Vahedi shahab@synopsys.com D Venkatasubramanian dvenkat@noida.hcltech.com Corinna Vinschen vinschen@redhat.com Jan Vrany jan.vrany@fit.cvut.cz -Tom de Vries tdevries@suse.de Sami Wagiaalla swagiaal@redhat.com Keith Walker keith.walker@arm.com Ricard Wanderlof ricardw@axis.com @@ -672,7 +682,7 @@ Ulrich Weigand uweigand@de.ibm.com Ken Werner ken.werner@de.ibm.com Tim Wiederhake tim.wiederhake@intel.com -Mark Wielaard mjw@redhat.com +Mark Wielaard mark@klomp.org Nathan Williams nathanw@wasabisystems.com Bob Wilson bob.wilson@acm.org Jim Wilson wilson@tuliptree.org diff -Nru gdb-9.1/gdb/maint.c gdb-10.2/gdb/maint.c --- gdb-9.1/gdb/maint.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/maint.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Support for GDB maintenance commands. - Copyright (C) 1992-2020 Free Software Foundation, Inc. + Copyright (C) 1992-2021 Free Software Foundation, Inc. Written by Fred Fish at Cygnus Support. @@ -52,16 +52,6 @@ static void maintenance_do_deprecate (const char *, int); -/* Access the maintenance subcommands. */ - -static void -maintenance_command (const char *args, int from_tty) -{ - printf_unfiltered (_("\"maintenance\" must be followed by " - "the name of a maintenance command.\n")); - help_list (maintenancelist, "maintenance ", all_commands, gdb_stdout); -} - #ifndef _WIN32 static void maintenance_dump_me (const char *args, int from_tty) @@ -139,32 +129,6 @@ set_per_command_space (strtol (args, NULL, 10)); } -/* The "maintenance info" command is defined as a prefix, with - allow_unknown 0. Therefore, its own definition is called only for - "maintenance info" with no args. */ - -static void -maintenance_info_command (const char *arg, int from_tty) -{ - printf_unfiltered (_("\"maintenance info\" must be followed " - "by the name of an info command.\n")); - help_list (maintenanceinfolist, "maintenance info ", all_commands, - gdb_stdout); -} - -/* The "maintenance check" command is defined as a prefix, with - allow_unknown 0. Therefore, its own definition is called only for - "maintenance check" with no args. */ - -static void -maintenance_check_command (const char *arg, int from_tty) -{ - printf_unfiltered (_("\"maintenance check\" must be followed " - "by the name of a check command.\n")); - help_list (maintenancechecklist, "maintenance check ", all_commands, - gdb_stdout); -} - /* Mini tokenizing lexer for 'maint info sections' command. */ static int @@ -281,37 +245,16 @@ printf_filtered ("\n"); } -/* Information passed between the "maintenance info sections" command, and - the worker function that prints each section. */ -struct maint_print_section_data -{ - /* The GDB objfile we're printing this section for. */ - struct objfile *objfile; - - /* The argument string passed by the user to the top level maintenance - info sections command. Used for filtering which sections are - printed. */ - const char *arg; - - /* The number of digits in the highest section index for all sections - from the bfd object associated with OBJFILE. Used when pretty - printing the index number to ensure all of the indexes line up. */ - int index_digits; - - /* Constructor. */ - maint_print_section_data (struct objfile *objfile, const char *arg, - bfd *abfd) - : objfile (objfile), - arg(arg) - { - int section_count = gdb_bfd_count_sections (abfd); - index_digits = ((int) log10 ((float) section_count)) + 1; - } - -private: - maint_print_section_data () = delete; - maint_print_section_data (const maint_print_section_data &) = delete; -}; +/* Return the number of digits required to display COUNT in decimal. + + Used when pretty printing index numbers to ensure all of the indexes line + up.*/ + +static int +index_digits (int count) +{ + return ((int) log10 ((float) count)) + 1; +} /* Helper function to pretty-print the section index of ASECT from ABFD. The INDEX_DIGITS is the number of digits in the largest index that will @@ -328,21 +271,20 @@ printf_filtered ("%-*s", (index_digits + 4), result.c_str ()); } -/* Print information about ASECT from ABFD. DATUM holds a pointer to a - maint_print_section_data object. The section will be printed using the - VMA's from the bfd, which will not be the relocated addresses for bfds - that should be relocated. The information must be printed with the - same layout as PRINT_OBJFILE_SECTION_INFO below. */ +/* Print information about ASECT from ABFD. The section will be printed using + the VMA's from the bfd, which will not be the relocated addresses for bfds + that should be relocated. The information must be printed with the same + layout as PRINT_OBJFILE_SECTION_INFO below. + + ARG is the argument string passed by the user to the top level maintenance + info sections command. Used for filtering which sections are printed. */ static void -print_bfd_section_info (bfd *abfd, - asection *asect, - void *datum) +print_bfd_section_info (bfd *abfd, asection *asect, const char *arg, + int index_digits) { flagword flags = bfd_section_flags (asect); const char *name = bfd_section_name (asect); - maint_print_section_data *print_data = (maint_print_section_data *) datum; - const char *arg = print_data->arg; if (arg == NULL || *arg == '\0' || match_substring (arg, name) @@ -354,7 +296,7 @@ addr = bfd_section_vma (asect); endaddr = addr + bfd_section_size (asect); - print_section_index (abfd, asect, print_data->index_digits); + print_section_index (abfd, asect, index_digits); maint_print_section_info (name, flags, addr, endaddr, asect->filepos, addr_size); } @@ -363,26 +305,26 @@ /* Print information about ASECT which is GDB's wrapper around a section from ABFD. The information must be printed with the same layout as PRINT_BFD_SECTION_INFO above. PRINT_DATA holds information used to - filter which sections are printed, and for formatting the output. */ + filter which sections are printed, and for formatting the output. + + ARG is the argument string passed by the user to the top level maintenance + info sections command. Used for filtering which sections are printed. */ static void -print_objfile_section_info (bfd *abfd, - struct obj_section *asect, - maint_print_section_data *print_data) +print_objfile_section_info (bfd *abfd, struct obj_section *asect, + const char *arg, int index_digits) { flagword flags = bfd_section_flags (asect->the_bfd_section); const char *name = bfd_section_name (asect->the_bfd_section); - const char *string = print_data->arg; - if (string == NULL || *string == '\0' - || match_substring (string, name) - || match_bfd_flags (string, flags)) + if (arg == NULL || *arg == '\0' + || match_substring (arg, name) + || match_bfd_flags (arg, flags)) { struct gdbarch *gdbarch = gdbarch_from_bfd (abfd); int addr_size = gdbarch_addr_bit (gdbarch) / 8; - print_section_index (abfd, asect->the_bfd_section, - print_data->index_digits); + print_section_index (abfd, asect->the_bfd_section, index_digits); maint_print_section_info (name, flags, obj_section_addr (asect), obj_section_endaddr (asect), @@ -412,26 +354,25 @@ return osect; } -/* Print information about ASECT from ABFD. DATUM holds a pointer to a - maint_print_section_data object. Where possible the information for - ASECT will print the relocated addresses of the section. */ +/* Print information about ASECT from ABFD. Where possible the information for + ASECT will print the relocated addresses of the section. + + ARG is the argument string passed by the user to the top level maintenance + info sections command. Used for filtering which sections are printed. */ static void -print_bfd_section_info_maybe_relocated (bfd *abfd, - asection *asect, - void *datum) +print_bfd_section_info_maybe_relocated (bfd *abfd, asection *asect, + objfile *objfile, const char *arg, + int index_digits) { - maint_print_section_data *print_data = (maint_print_section_data *) datum; - objfile *objfile = print_data->objfile; - gdb_assert (objfile->sections != NULL); obj_section *osect = maint_obj_section_from_bfd_section (abfd, asect, objfile); if (osect->the_bfd_section == NULL) - print_bfd_section_info (abfd, asect, datum); + print_bfd_section_info (abfd, asect, arg, index_digits); else - print_objfile_section_info (abfd, osect, print_data); + print_objfile_section_info (abfd, osect, arg, index_digits); } /* Implement the "maintenance info sections" command. */ @@ -466,24 +407,26 @@ else if (ofile->obfd != exec_bfd) continue; - maint_print_section_data print_data (ofile, arg, ofile->obfd); + int section_count = gdb_bfd_count_sections (ofile->obfd); - bfd_map_over_sections (ofile->obfd, - print_bfd_section_info_maybe_relocated, - (void *) &print_data); + for (asection *sect : gdb_bfd_sections (ofile->obfd)) + print_bfd_section_info_maybe_relocated + (ofile->obfd, sect, ofile, arg, index_digits (section_count)); } } if (core_bfd) { - maint_print_section_data print_data (nullptr, arg, core_bfd); - printf_filtered (_("Core file:\n")); printf_filtered (" `%s', ", bfd_get_filename (core_bfd)); wrap_here (" "); printf_filtered (_("file type %s.\n"), bfd_get_target (core_bfd)); - bfd_map_over_sections (core_bfd, print_bfd_section_info, - (void *) &print_data); + + int section_count = gdb_bfd_count_sections (core_bfd); + + for (asection *sect : gdb_bfd_sections (core_bfd)) + print_bfd_section_info (core_bfd, sect, arg, + index_digits (section_count)); } } @@ -511,19 +454,6 @@ } } -/* The "maintenance print" command is defined as a prefix, with - allow_unknown 0. Therefore, its own definition is called only for - "maintenance print" with no args. */ - -static void -maintenance_print_command (const char *arg, int from_tty) -{ - printf_unfiltered (_("\"maintenance print\" must be followed " - "by the name of a print command.\n")); - help_list (maintenanceprintlist, "maintenance print ", all_commands, - gdb_stdout); -} - /* The "maintenance translate-address" command converts a section and address to a symbol. This can be called in two ways: maintenance translate-address <secname> <addr> @@ -589,7 +519,7 @@ gdb_assert (sect->objfile && objfile_name (sect->objfile)); obj_name = objfile_name (sect->objfile); - if (MULTI_OBJFILE_P ()) + if (current_program_space->multi_objfile_p ()) printf_filtered (_("%s + %s in section %s of %s\n"), symbol_name, symbol_offset, section_name, obj_name); @@ -739,21 +669,6 @@ struct cmd_list_element *maintenance_set_cmdlist; struct cmd_list_element *maintenance_show_cmdlist; -static void -maintenance_set_cmd (const char *args, int from_tty) -{ - printf_unfiltered (_("\"maintenance set\" must be followed " - "by the name of a set command.\n")); - help_list (maintenance_set_cmdlist, "maintenance set ", all_commands, - gdb_stdout); -} - -static void -maintenance_show_cmd (const char *args, int from_tty) -{ - cmd_show_list (maintenance_show_cmdlist, from_tty, ""); -} - /* "maintenance with" command. */ static void @@ -845,12 +760,7 @@ } #endif -static int n_worker_threads = 0; - -bool worker_threads_disabled () -{ - return n_worker_threads == 0; -} +static int n_worker_threads = -1; /* Update the thread pool for the desired number of threads. */ static void @@ -1102,14 +1012,6 @@ } } -/* Command "show per-command" displays summary of all the current - "show per-command " settings. */ - -static void -show_per_command_cmd (const char *args, int from_tty) -{ - cmd_show_list (per_command_showlist, from_tty, ""); -} /* The "maintenance selftest" command. */ @@ -1118,7 +1020,8 @@ maintenance_selftest (const char *args, int from_tty) { #if GDB_SELF_TEST - selftests::run_tests (args); + gdb_argv argv (args); + selftests::run_tests (argv.as_array_view ()); #else printf_filtered (_("\ Selftests have been disabled for this build.\n")); @@ -1140,24 +1043,25 @@ } +void _initialize_maint_cmds (); void -_initialize_maint_cmds (void) +_initialize_maint_cmds () { struct cmd_list_element *cmd; - add_prefix_cmd ("maintenance", class_maintenance, maintenance_command, _("\ + add_basic_prefix_cmd ("maintenance", class_maintenance, _("\ Commands for use by GDB maintainers.\n\ Includes commands to dump specific internal GDB structures in\n\ a human readable form, to cause GDB to deliberately dump core, etc."), - &maintenancelist, "maintenance ", 0, - &cmdlist); + &maintenancelist, "maintenance ", 0, + &cmdlist); add_com_alias ("mt", "maintenance", class_maintenance, 1); - add_prefix_cmd ("info", class_maintenance, maintenance_info_command, _("\ + add_basic_prefix_cmd ("info", class_maintenance, _("\ Commands for showing internal info about the program being debugged."), - &maintenanceinfolist, "maintenance info ", 0, - &maintenancelist); + &maintenanceinfolist, "maintenance info ", 0, + &maintenancelist); add_alias_cmd ("i", "info", class_maintenance, 1, &maintenancelist); add_cmd ("sections", class_maintenance, maintenance_info_sections, _("\ @@ -1172,24 +1076,24 @@ lists all sections from all object files, including shared libraries."), &maintenanceinfolist); - add_prefix_cmd ("print", class_maintenance, maintenance_print_command, - _("Maintenance command for printing GDB internal state."), - &maintenanceprintlist, "maintenance print ", 0, - &maintenancelist); + add_basic_prefix_cmd ("print", class_maintenance, + _("Maintenance command for printing GDB internal state."), + &maintenanceprintlist, "maintenance print ", 0, + &maintenancelist); - add_prefix_cmd ("set", class_maintenance, maintenance_set_cmd, _("\ + add_basic_prefix_cmd ("set", class_maintenance, _("\ Set GDB internal variables used by the GDB maintainer.\n\ Configure variables internal to GDB that aid in GDB's maintenance"), - &maintenance_set_cmdlist, "maintenance set ", - 0/*allow-unknown*/, - &maintenancelist); + &maintenance_set_cmdlist, "maintenance set ", + 0/*allow-unknown*/, + &maintenancelist); - add_prefix_cmd ("show", class_maintenance, maintenance_show_cmd, _("\ + add_show_prefix_cmd ("show", class_maintenance, _("\ Show GDB internal variables used by the GDB maintainer.\n\ Configure variables internal to GDB that aid in GDB's maintenance"), - &maintenance_show_cmdlist, "maintenance show ", - 0/*allow-unknown*/, - &maintenancelist); + &maintenance_show_cmdlist, "maintenance show ", + 0/*allow-unknown*/, + &maintenancelist); cmd = add_cmd ("with", class_maintenance, maintenance_with_cmd, _("\ Like \"with\", but works with \"maintenance set\" variables.\n\ @@ -1236,10 +1140,10 @@ &per_command_setlist, "maintenance set per-command ", 1/*allow-unknown*/, &maintenance_set_cmdlist); - add_prefix_cmd ("per-command", class_maintenance, show_per_command_cmd, _("\ + add_show_prefix_cmd ("per-command", class_maintenance, _("\ Show per-command statistics settings."), - &per_command_showlist, "maintenance show per-command ", - 0/*allow-unknown*/, &maintenance_show_cmdlist); + &per_command_showlist, "maintenance show per-command ", + 0/*allow-unknown*/, &maintenance_show_cmdlist); add_setshow_boolean_cmd ("time", class_maintenance, &per_command_time, _("\ @@ -1303,10 +1207,10 @@ Takes an optional file parameter."), &maintenanceprintlist); - add_prefix_cmd ("check", class_maintenance, maintenance_check_command, _("\ + add_basic_prefix_cmd ("check", class_maintenance, _("\ Commands for checking internal gdb state."), - &maintenancechecklist, "maintenance check ", 0, - &maintenancelist); + &maintenancechecklist, "maintenance check ", 0, + &maintenancelist); add_cmd ("translate-address", class_maintenance, maintenance_translate_address, diff -Nru gdb-9.1/gdb/maint.h gdb-10.2/gdb/maint.h --- gdb-9.1/gdb/maint.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/maint.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Support for GDB maintenance commands. - Copyright (C) 2013-2020 Free Software Foundation, Inc. + Copyright (C) 2013-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -26,8 +26,6 @@ extern void set_per_command_space (int); -extern bool worker_threads_disabled (); - /* Records a run time and space usage to be used as a base for reporting elapsed time or change in space. */ diff -Nru gdb-9.1/gdb/maint-test-options.c gdb-10.2/gdb/maint-test-options.c --- gdb-9.1/gdb/maint-test-options.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/maint-test-options.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Maintenance commands for testing the options framework. - Copyright (C) 2019-2020 Free Software Foundation, Inc. + Copyright (C) 2019-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -411,30 +411,19 @@ /* Command list for maint test-options. */ struct cmd_list_element *maintenance_test_options_list; -/* The "maintenance test-options" prefix command. */ - -static void -maintenance_test_options_command (const char *arg, int from_tty) -{ - printf_unfiltered - (_("\"maintenance test-options\" must be followed " - "by the name of a subcommand.\n")); - help_list (maintenance_test_options_list, "maintenance test-options ", - all_commands, gdb_stdout); -} - +void _initialize_maint_test_options (); void _initialize_maint_test_options () { cmd_list_element *cmd; - add_prefix_cmd ("test-options", no_class, maintenance_test_options_command, - _("\ + add_basic_prefix_cmd ("test-options", no_class, + _("\ Generic command for testing the options infrastructure."), - &maintenance_test_options_list, - "maintenance test-options ", 0, - &maintenancelist); + &maintenance_test_options_list, + "maintenance test-options ", 0, + &maintenancelist); const auto def_group = make_test_options_options_def_group (nullptr); diff -Nru gdb-9.1/gdb/maint-test-settings.c gdb-10.2/gdb/maint-test-settings.c --- gdb-9.1/gdb/maint-test-settings.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/maint-test-settings.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Maintenance commands for testing the settings framework. - Copyright (C) 2019-2020 Free Software Foundation, Inc. + Copyright (C) 2019-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -27,26 +27,6 @@ /* Command list for "maint show test-settings". */ static cmd_list_element *maintenance_show_test_settings_list; -/* The "maintenance set test-settings" prefix command. */ - -static void -maintenance_set_test_settings_cmd (const char *args, int from_tty) -{ - printf_unfiltered (_("\"maintenance set test-settings\" must be followed " - "by the name of a set command.\n")); - help_list (maintenance_set_test_settings_list, - "maintenance set test-settings ", - all_commands, gdb_stdout); -} - -/* The "maintenance show test-settings" prefix command. */ - -static void -maintenance_show_test_settings_cmd (const char *args, int from_tty) -{ - cmd_show_list (maintenance_show_test_settings_list, from_tty, ""); -} - /* Control variables for all the "maintenance set/show test-settings xxx" commands. */ @@ -99,26 +79,27 @@ } +void _initialize_maint_test_settings (); void -_initialize_maint_test_settings (void) +_initialize_maint_test_settings () { maintenance_test_settings_filename = xstrdup ("/foo/bar"); - add_prefix_cmd ("test-settings", class_maintenance, - maintenance_set_test_settings_cmd, _("\ + add_basic_prefix_cmd ("test-settings", class_maintenance, + _("\ Set GDB internal variables used for set/show command infrastructure testing."), - &maintenance_set_test_settings_list, - "maintenance set test-settings ", - 0/*allow-unknown*/, - &maintenance_set_cmdlist); + &maintenance_set_test_settings_list, + "maintenance set test-settings ", + 0/*allow-unknown*/, + &maintenance_set_cmdlist); - add_prefix_cmd ("test-settings", class_maintenance, - maintenance_show_test_settings_cmd, _("\ + add_show_prefix_cmd ("test-settings", class_maintenance, + _("\ Show GDB internal variables used for set/show command infrastructure testing."), - &maintenance_show_test_settings_list, - "maintenance show test-settings ", - 0/*allow-unknown*/, - &maintenance_show_cmdlist); + &maintenance_show_test_settings_list, + "maintenance show test-settings ", + 0/*allow-unknown*/, + &maintenance_show_cmdlist); add_setshow_boolean_cmd ("boolean", class_maintenance, &maintenance_test_settings_boolean, _("\ diff -Nru gdb-9.1/gdb/Makefile.in gdb-10.2/gdb/Makefile.in --- gdb-9.1/gdb/Makefile.in 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/Makefile.in 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 1989-2020 Free Software Foundation, Inc. +# Copyright (C) 1989-2021 Free Software Foundation, Inc. # This file is part of GDB. @@ -154,7 +154,8 @@ LIBIBERTY = ../libiberty/libiberty.a # Where is the CTF library? Typically in ../libctf. -LIBCTF = ../libctf/.libs/libctf.a +LIBCTF = @LIBCTF@ +CTF_DEPS = @CTF_DEPS@ # Where is the BFD library? Typically in ../bfd. BFD_DIR = ../bfd @@ -213,6 +214,9 @@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ +DEBUGINFOD_CFLAGS = @DEBUGINFOD_CFLAGS@ +DEBUGINFOD_LIBS = @DEBUGINFOD_LIBS@ + RDYNAMIC = @RDYNAMIC@ # Where is the INTL library? Typically in ../intl. @@ -238,6 +242,10 @@ LIBGNU = $(GNULIB_BUILDDIR)/import/libgnu.a INCGNU = -I$(srcdir)/../gnulib/import -I$(GNULIB_BUILDDIR)/import +SUPPORT = ../gdbsupport +LIBSUPPORT = $(SUPPORT)/libgdbsupport.a +INCSUPPORT = -I$(srcdir)/.. -I.. + # # CLI sub directory definitons # @@ -396,11 +404,13 @@ python/py-record.c \ python/py-record-btrace.c \ python/py-record-full.c \ + python/py-registers.c \ python/py-signalevent.c \ python/py-stopevent.c \ python/py-symbol.c \ python/py-symtab.c \ python/py-threadevent.c \ + python/py-tui.c \ python/py-type.c \ python/py-unwind.c \ python/py-utils.c \ @@ -415,17 +425,20 @@ SUBDIR_PYTHON_LDFLAGS = SUBDIR_PYTHON_CFLAGS = -SUBDIR_UNITTESTS_SRCS = \ +SELFTESTS_SRCS = \ + disasm-selftests.c \ + gdbarch-selftests.c \ + selftest-arch.c \ unittests/array-view-selftests.c \ unittests/child-path-selftests.c \ unittests/cli-utils-selftests.c \ + unittests/command-def-selftests.c \ unittests/common-utils-selftests.c \ unittests/copy_bitwise-selftests.c \ unittests/environ-selftests.c \ unittests/filtered_iterator-selftests.c \ unittests/format_pieces-selftests.c \ unittests/function-view-selftests.c \ - unittests/help-doc-selftests.c \ unittests/lookup_name_info-selftests.c \ unittests/memory-map-selftests.c \ unittests/memrange-selftests.c \ @@ -449,7 +462,7 @@ unittests/vec-utils-selftests.c \ unittests/xml-utils-selftests.c -SUBDIR_UNITTESTS_OBS = $(patsubst %.c,%.o,$(SUBDIR_UNITTESTS_SRCS)) +SELFTESTS_OBS = $(patsubst %.c,%.o,$(SELFTESTS_SRCS)) SUBDIR_TARGET_SRCS = target/waitstatus.c SUBDIR_TARGET_OBS = $(patsubst %.c,%.o,$(SUBDIR_TARGET_SRCS)) @@ -547,7 +560,7 @@ CONFIG_UNINSTALL = @CONFIG_UNINSTALL@ HAVE_NATIVE_GCORE_TARGET = @HAVE_NATIVE_GCORE_TARGET@ -CONFIG_SRC_SUBDIR = arch cli mi gdbsupport compile tui unittests guile python \ +CONFIG_SRC_SUBDIR = arch cli dwarf2 mi compile tui unittests guile python \ target nat CONFIG_DEP_SUBDIR = $(addsuffix /$(DEPDIR),$(CONFIG_SRC_SUBDIR)) @@ -579,15 +592,17 @@ # are sometimes a little generic, we think that the risk of collision # with other header files is high. If that happens, we try to mitigate # a bit the consequences by putting the Python includes last in the list. -INTERNAL_CPPFLAGS = $(CPPFLAGS) @GUILE_CPPFLAGS@ @PYTHON_CPPFLAGS@ +INTERNAL_CPPFLAGS = $(CPPFLAGS) @GUILE_CPPFLAGS@ @PYTHON_CPPFLAGS@ \ + @LARGEFILE_CPPFLAGS@ # INTERNAL_CFLAGS is the aggregate of all other *CFLAGS macros. INTERNAL_CFLAGS_BASE = \ $(CXXFLAGS) $(GLOBAL_CFLAGS) $(PROFILE_CFLAGS) \ $(GDB_CFLAGS) $(OPCODES_CFLAGS) $(READLINE_CFLAGS) $(ZLIBINC) \ $(BFD_CFLAGS) $(INCLUDE_CFLAGS) $(LIBDECNUMBER_CFLAGS) \ - $(INTL_CFLAGS) $(INCGNU) $(ENABLE_CFLAGS) $(INTERNAL_CPPFLAGS) \ - $(SRCHIGH_CFLAGS) $(TOP_CFLAGS) $(PTHREAD_CFLAGS) + $(INTL_CFLAGS) $(INCGNU) $(INCSUPPORT) $(ENABLE_CFLAGS) \ + $(INTERNAL_CPPFLAGS) $(SRCHIGH_CFLAGS) $(TOP_CFLAGS) $(PTHREAD_CFLAGS) \ + $(DEBUGINFOD_CFLAGS) INTERNAL_WARN_CFLAGS = $(INTERNAL_CFLAGS_BASE) $(GDB_WARN_CFLAGS) INTERNAL_CFLAGS = $(INTERNAL_WARN_CFLAGS) $(GDB_WERROR_CFLAGS) @@ -606,15 +621,17 @@ # Libraries and corresponding dependencies for compiling gdb. # XM_CLIBS, defined in *config files, have host-dependent libs. # LIBIBERTY appears twice on purpose. -CLIBS = $(SIM) $(READLINE) $(OPCODES) $(BFD) $(LIBCTF) $(ZLIB) \ - $(INTL) $(LIBIBERTY) $(LIBDECNUMBER) \ +CLIBS = $(SIM) $(READLINE) $(OPCODES) $(LIBCTF) $(BFD) $(ZLIB) \ + $(LIBSUPPORT) $(INTL) $(LIBIBERTY) $(LIBDECNUMBER) \ $(XM_CLIBS) $(GDBTKLIBS) \ @LIBS@ @GUILE_LIBS@ @PYTHON_LIBS@ \ $(LIBEXPAT) $(LIBLZMA) $(LIBBABELTRACE) $(LIBIPT) \ - $(LIBIBERTY) $(WIN32LIBS) $(LIBGNU) $(LIBICONV) $(LIBMPFR) \ - $(SRCHIGH_LIBS) $(LIBXXHASH) $(PTHREAD_LIBS) -CDEPS = $(NAT_CDEPS) $(SIM) $(BFD) $(READLINE_DEPS) $(LIBCTF) \ - $(OPCODES) $(INTL_DEPS) $(LIBIBERTY) $(CONFIG_DEPS) $(LIBGNU) + $(WIN32LIBS) $(LIBGNU) $(LIBICONV) \ + $(LIBMPFR) $(SRCHIGH_LIBS) $(LIBXXHASH) $(PTHREAD_LIBS) \ + $(DEBUGINFOD_LIBS) +CDEPS = $(NAT_CDEPS) $(SIM) $(BFD) $(READLINE_DEPS) $(CTF_DEPS) \ + $(OPCODES) $(INTL_DEPS) $(LIBIBERTY) $(CONFIG_DEPS) $(LIBGNU) \ + $(LIBSUPPORT) DIST = gdb @@ -685,8 +702,10 @@ # All other target-dependent objects files (used with --enable-targets=all). ALL_TARGET_OBS = \ aarch32-tdep.o \ + arc-linux-tdep.o \ arc-tdep.o \ arch/aarch32.o \ + arch/arc.o \ arch/arm.o \ arch/arm-get-next-pcs.o \ arch/arm-linux.o \ @@ -705,6 +724,7 @@ avr-tdep.o \ bfin-linux-tdep.o \ bfin-tdep.o \ + bpf-tdep.o \ bsd-uthread.o \ cris-linux-tdep.o \ cris-tdep.o \ @@ -723,7 +743,6 @@ hppa-obsd-tdep.o \ hppa-tdep.o \ i386-bsd-tdep.o \ - i386-cygwin-tdep.o \ i386-darwin-tdep.o \ i386-dicos-tdep.o \ i386-fbsd-tdep.o \ @@ -735,6 +754,7 @@ i386-obsd-tdep.o \ i386-sol2-tdep.o \ i386-tdep.o \ + i386-windows-tdep.o \ i387-tdep.o \ iq2000-tdep.o \ linux-record.o \ @@ -777,6 +797,7 @@ ravenscar-thread.o \ riscv-fbsd-tdep.o \ riscv-linux-tdep.o \ + riscv-ravenscar-thread.o \ riscv-tdep.o \ rl78-tdep.o \ rs6000-aix-tdep.o \ @@ -943,6 +964,7 @@ alloc.c \ annotate.c \ arch-utils.c \ + async-event.c \ auto-load.c \ auxv.c \ ax-gdb.c \ @@ -967,38 +989,6 @@ cli-out.c \ coff-pe-read.c \ coffread.c \ - gdbsupport/agent.c \ - gdbsupport/btrace-common.c \ - gdbsupport/buffer.c \ - gdbsupport/cleanups.c \ - gdbsupport/common-debug.c \ - gdbsupport/common-exceptions.c \ - gdbsupport/common-inferior.c \ - gdbsupport/common-regcache.c \ - gdbsupport/common-utils.c \ - gdbsupport/errors.c \ - gdbsupport/environ.c \ - gdbsupport/fileio.c \ - gdbsupport/filestuff.c \ - gdbsupport/format.c \ - gdbsupport/job-control.c \ - gdbsupport/gdb-dlfcn.c \ - gdbsupport/gdb_tilde_expand.c \ - gdbsupport/gdb_vecs.c \ - gdbsupport/netstuff.c \ - gdbsupport/new-op.c \ - gdbsupport/pathstuff.c \ - gdbsupport/print-utils.c \ - gdbsupport/ptid.c \ - gdbsupport/rsp-low.c \ - gdbsupport/run-time-clock.c \ - gdbsupport/safe-strerror.c \ - gdbsupport/scoped_mmap.c \ - gdbsupport/signals.c \ - gdbsupport/signals-state-save-restore.c \ - gdbsupport/tdesc.c \ - gdbsupport/thread-pool.c \ - gdbsupport/xml-utils.c \ complaints.c \ completer.c \ continuations.c \ @@ -1016,20 +1006,28 @@ dbxread.c \ dcache.c \ debug.c \ + debuginfod-support.c \ dictionary.c \ disasm.c \ - disasm-selftests.c \ dummy-frame.c \ - dwarf-index-cache.c \ - dwarf-index-common.c \ - dwarf-index-write.c \ - dwarf2-frame.c \ - dwarf2-frame-tailcall.c \ - dwarf2expr.c \ - dwarf2loc.c \ - dwarf2read.c \ + dwarf2/abbrev.c \ + dwarf2/attribute.c \ + dwarf2/comp-unit.c \ + dwarf2/dwz.c \ + dwarf2/expr.c \ + dwarf2/frame-tailcall.c \ + dwarf2/frame.c \ + dwarf2/index-cache.c \ + dwarf2/index-common.c \ + dwarf2/index-write.c \ + dwarf2/leb.c \ + dwarf2/line-header.c \ + dwarf2/loc.c \ + dwarf2/macro.c \ + dwarf2/read.c \ + dwarf2/section.c \ + dwarf2/stringify.c \ eval.c \ - event-loop.c \ event-top.c \ exceptions.c \ exec.c \ @@ -1051,7 +1049,6 @@ gdb_obstack.c \ gdb_regex.c \ gdbarch.c \ - gdbarch-selftests.c \ gdbtypes.c \ gnu-v2-abi.c \ gnu-v3-abi.c \ @@ -1138,6 +1135,7 @@ symmisc.c \ symtab.c \ target.c \ + target-connection.c \ target-dcache.c \ target-descriptions.c \ target-memory.c \ @@ -1221,7 +1219,9 @@ arc-tdep.h \ arch-utils.h \ arm-linux-tdep.h \ + arm-nbsd-tdep.h \ arm-tdep.h \ + async-event.h \ auto-load.h \ auxv.h \ ax.h \ @@ -1255,14 +1255,13 @@ dictionary.h \ disasm.h \ dummy-frame.h \ - dwarf-index-cache.h \ - dwarf-index-common.h \ - dwarf2-frame.h \ - dwarf2-frame-tailcall.h \ - dwarf2expr.h \ - dwarf2loc.h \ - dwarf2read.h \ - event-loop.h \ + dwarf2/frame-tailcall.h \ + dwarf2/frame.h \ + dwarf2/expr.h \ + dwarf2/index-cache.h \ + dwarf2/index-common.h \ + dwarf2/loc.h \ + dwarf2/read.h \ event-top.h \ exceptions.h \ exec.h \ @@ -1380,6 +1379,7 @@ remote-fileio.h \ remote-notif.h \ riscv-fbsd-tdep.h \ + riscv-ravenscar-thread.h \ riscv-tdep.h \ rs6000-aix-tdep.h \ rs6000-tdep.h \ @@ -1453,6 +1453,7 @@ arch/aarch32.h \ arch/aarch64.h \ arch/aarch64-insn.h \ + arch/arc.h \ arch/arm.h \ arch/i386.h \ arch/ppc-linux-common.h \ @@ -1464,49 +1465,6 @@ cli/cli-setshow.h \ cli/cli-style.h \ cli/cli-utils.h \ - gdbsupport/buffer.h \ - gdbsupport/cleanups.h \ - gdbsupport/common-debug.h \ - gdbsupport/common-defs.h \ - gdbsupport/common-exceptions.h \ - gdbsupport/common-gdbthread.h \ - gdbsupport/common-regcache.h \ - gdbsupport/common-types.h \ - gdbsupport/common-utils.h \ - gdbsupport/job-control.h \ - gdbsupport/errors.h \ - gdbsupport/environ.h \ - gdbsupport/fileio.h \ - gdbsupport/format.h \ - gdbsupport/gdb-dlfcn.h \ - gdbsupport/gdb-sigmask.h \ - gdbsupport/gdb_assert.h \ - gdbsupport/gdb_binary_search.h \ - gdbsupport/gdb_tilde_expand.h \ - gdbsupport/gdb_locale.h \ - gdbsupport/gdb_proc_service.h \ - gdbsupport/gdb_setjmp.h \ - gdbsupport/gdb_signals.h \ - gdbsupport/gdb_sys_time.h \ - gdbsupport/gdb_vecs.h \ - gdbsupport/gdb_wait.h \ - gdbsupport/common-inferior.h \ - gdbsupport/netstuff.h \ - gdbsupport/host-defs.h \ - gdbsupport/parallel-for.h \ - gdbsupport/pathstuff.h \ - gdbsupport/print-utils.h \ - gdbsupport/ptid.h \ - gdbsupport/queue.h \ - gdbsupport/rsp-low.h \ - gdbsupport/run-time-clock.h \ - gdbsupport/signals-state-save-restore.h \ - gdbsupport/symbol.h \ - gdbsupport/tdesc.h \ - gdbsupport/thread-pool.h \ - gdbsupport/version.h \ - gdbsupport/x86-xstate.h \ - gdbsupport/xml-utils.h \ compile/compile.h \ compile/compile-c.h \ compile/compile-cplus.h \ @@ -1777,7 +1735,7 @@ true ; \ fi ; \ $(SHELL) $(srcdir)/../mkinstalldirs $(DESTDIR)$(bindir) ; \ - $(INSTALL_PROGRAM) gdb$(EXEEXT) \ + $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) gdb$(EXEEXT) \ $(DESTDIR)$(bindir)/$$transformed_name$(EXEEXT) ; \ $(SHELL) $(srcdir)/../mkinstalldirs $(DESTDIR)$(includedir)/gdb ; \ $(INSTALL_DATA) jit-reader.h $(DESTDIR)$(includedir)/gdb/jit-reader.h @@ -1965,13 +1923,8 @@ # I believe this is wrong; the makefile standards for distclean just # describe removing files; the only sort of "re-create a distribution" # functionality described is if the distributed files are unmodified. -# NB: While GDBSERVER might be configured on native systems, it isn't -# always included in SUBDIRS. Remove the gdbserver files explicitly. distclean: clean @$(MAKE) $(FLAGS_TO_PASS) DO=distclean "DODIRS=$(CLEANDIRS)" subdir_do - rm -f gdbserver/config.status gdbserver/config.log - rm -f gdbserver/tm.h gdbserver/xm.h gdbserver/nm.h - rm -f gdbserver/Makefile gdbserver/config.cache rm -f nm.h config.status config.h stamp-h b jit-reader.h rm -f gdb-gdb.py gdb-gdb.gdb rm -f y.output yacc.acts yacc.tmp y.tab.h @@ -2062,6 +2015,7 @@ transform.m4 \ ../bfd/bfd.m4 \ ../config/acinclude.m4 \ + ../config/enable.m4 \ ../config/plugins.m4 \ ../config/lead-dot.m4 \ ../config/override.m4 \ @@ -2127,8 +2081,8 @@ version.c: stamp-version; @true # Note that the obvious names for the temp file are taken by # create-version.sh. -stamp-version: Makefile version.in $(srcdir)/../bfd/version.h $(srcdir)/gdbsupport/create-version.sh - $(ECHO_GEN) $(SHELL) $(srcdir)/gdbsupport/create-version.sh $(srcdir) \ +stamp-version: Makefile version.in $(srcdir)/../bfd/version.h $(srcdir)/../gdbsupport/create-version.sh + $(ECHO_GEN) $(SHELL) $(srcdir)/../gdbsupport/create-version.sh $(srcdir) \ $(host_alias) $(target_alias) version-t.t @$(SHELL) $(srcdir)/../move-if-change version-t.t version.c @echo stamp > stamp-version @@ -2199,6 +2153,7 @@ avr-tdep.c \ bfin-linux-tdep.c \ bfin-tdep.c \ + bpf-tdep.c \ bsd-kvm.c \ bsd-uthread.c \ csky-linux-tdep.c \ @@ -2222,7 +2177,6 @@ hppa-tdep.c \ i386-bsd-nat.c \ i386-bsd-tdep.c \ - i386-cygwin-tdep.c \ i386-darwin-nat.c \ i386-darwin-tdep.c \ i386-dicos-tdep.c \ @@ -2239,6 +2193,7 @@ i386-sol2-nat.c \ i386-sol2-tdep.c \ i386-tdep.c \ + i386-windows-tdep.c \ i387-tdep.c \ ia64-libunwind-tdep.c \ ia64-linux-nat.c \ @@ -2299,6 +2254,7 @@ riscv-fbsd-tdep.c \ riscv-linux-nat.c \ riscv-linux-tdep.c \ + riscv-ravenscar-thread.c \ riscv-tdep.c \ rl78-tdep.c \ rs6000-lynx178-tdep.c \ @@ -2514,7 +2470,7 @@ true ; \ fi ; \ $(SHELL) $(srcdir)/../mkinstalldirs $(DESTDIR)$(bindir); \ - $(INSTALL_PROGRAM) insight$(EXEEXT) \ + $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) insight$(EXEEXT) \ $(DESTDIR)$(bindir)/$$transformed_name$(EXEEXT) ; \ $(SHELL) $(srcdir)/../mkinstalldirs \ $(DESTDIR)$(GDBTK_LIBRARY) ; \ diff -Nru gdb-9.1/gdb/make-target-delegates gdb-10.2/gdb/make-target-delegates --- gdb-9.1/gdb/make-target-delegates 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/make-target-delegates 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ #!/usr/bin/perl -# Copyright (C) 2013-2020 Free Software Foundation, Inc. +# Copyright (C) 2013-2021 Free Software Foundation, Inc. # # This file is part of GDB. # diff -Nru gdb-9.1/gdb/mdebugread.c gdb-10.2/gdb/mdebugread.c --- gdb-9.1/gdb/mdebugread.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/mdebugread.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Read a symbol table in ECOFF format (Third-Eye). - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. Original version contributed by Alessandro Forin (af@cs.cmu.edu) at CMU. Major work by Per Bothner, John Gilmore and Ian Lance Taylor @@ -251,10 +251,10 @@ static void sort_blocks (struct symtab *); -static struct partial_symtab *new_psymtab (const char *, struct objfile *); +static legacy_psymtab *new_psymtab (const char *, struct objfile *); -static void psymtab_to_symtab_1 (struct objfile *objfile, - struct partial_symtab *, const char *); +static void mdebug_expand_psymtab (legacy_psymtab *pst, + struct objfile *objfile); static void add_block (struct block *, struct symtab *); @@ -275,24 +275,15 @@ and reorders the symtab list at the end. SELF is not NULL. */ static void -mdebug_read_symtab (struct partial_symtab *self, struct objfile *objfile) +mdebug_read_symtab (legacy_psymtab *self, struct objfile *objfile) { - if (info_verbose) - { - printf_filtered (_("Reading in symbols for %s..."), self->filename); - gdb_flush (gdb_stdout); - } - next_symbol_text_func = mdebug_next_symbol_text; - psymtab_to_symtab_1 (objfile, self, self->filename); + self->expand_psymtab (objfile); /* Match with global symbols. This only needs to be done once, after all of the symtabs and dependencies have been read in. */ scan_file_globals (objfile); - - if (info_verbose) - printf_filtered (_("done.\n")); } /* File-level interface functions. */ @@ -389,7 +380,7 @@ struct pst_map { - struct partial_symtab *pst; /* the psymtab proper */ + legacy_psymtab *pst; /* the psymtab proper */ long n_globals; /* exported globals (external symbols) */ long globals_offset; /* cumulative */ }; @@ -580,9 +571,9 @@ static int parse_symbol (SYMR *sh, union aux_ext *ax, char *ext_sh, int bigend, - struct section_offsets *section_offsets, struct objfile *objfile) + const section_offsets §ion_offsets, struct objfile *objfile) { - struct gdbarch *gdbarch = get_objfile_arch (objfile); + struct gdbarch *gdbarch = objfile->arch (); const bfd_size_type external_sym_size = debug_swap->external_sym_size; void (*const swap_sym_in) (bfd *, void *, SYMR *) = debug_swap->swap_sym_in; const char *name; @@ -610,18 +601,18 @@ The value of a stBlock symbol is the displacement from the procedure address. */ if (sh->st != stEnd && sh->st != stBlock) - sh->value += ANOFFSET (section_offsets, SECT_OFF_TEXT (objfile)); + sh->value += section_offsets[SECT_OFF_TEXT (objfile)]; break; case scData: case scSData: case scRData: case scPData: case scXData: - sh->value += ANOFFSET (section_offsets, SECT_OFF_DATA (objfile)); + sh->value += section_offsets[SECT_OFF_DATA (objfile)]; break; case scBss: case scSBss: - sh->value += ANOFFSET (section_offsets, SECT_OFF_BSS (objfile)); + sh->value += section_offsets[SECT_OFF_BSS (objfile)]; break; } @@ -756,7 +747,7 @@ { t = parse_type (cur_fd, ax, sh->index + 1, 0, bigend, name); if (strcmp (name, "malloc") == 0 - && TYPE_CODE (t) == TYPE_CODE_VOID) + && t->code () == TYPE_CODE_VOID) { /* I don't know why, but, at least under Alpha GNU/Linux, when linking against a malloc without debugging @@ -794,11 +785,11 @@ /* All functions in C++ have prototypes. For C we don't have enough information in the debug info. */ - if (SYMBOL_LANGUAGE (s) == language_cplus) + if (s->language () == language_cplus) TYPE_PROTOTYPED (SYMBOL_TYPE (s)) = 1; /* Create and enter a new lexical context. */ - b = new_block (FUNCTION_BLOCK, SYMBOL_LANGUAGE (s)); + b = new_block (FUNCTION_BLOCK, s->language ()); SYMBOL_BLOCK_VALUE (s) = b; BLOCK_FUNCTION (b) = s; BLOCK_START (b) = BLOCK_END (b) = sh->value; @@ -1019,17 +1010,16 @@ (.Fxx or .xxfake or empty) for unnamed struct/union/enums. Alpha cc puts out an sh->iss of zero for those. */ if (sh->iss == 0 || name[0] == '.' || name[0] == '\0') - TYPE_NAME (t) = NULL; + t->set_name (NULL); else - TYPE_NAME (t) = obconcat (&mdebugread_objfile->objfile_obstack, - name, (char *) NULL); + t->set_name (obconcat (&mdebugread_objfile->objfile_obstack, + name, (char *) NULL)); - TYPE_CODE (t) = type_code; + t->set_code (type_code); TYPE_LENGTH (t) = sh->value; - TYPE_NFIELDS (t) = nfields; - TYPE_FIELDS (t) = f = ((struct field *) - TYPE_ALLOC (t, - nfields * sizeof (struct field))); + t->set_num_fields (nfields); + f = ((struct field *) TYPE_ALLOC (t, nfields * sizeof (struct field))); + t->set_fields (f); if (type_code == TYPE_CODE_ENUM) { @@ -1045,7 +1035,7 @@ are hopefully rare enough. Alpha cc -migrate has a sh.value field of zero, we adjust that too. */ - if (TYPE_LENGTH (t) == TYPE_NFIELDS (t) + if (TYPE_LENGTH (t) == t->num_fields () || TYPE_LENGTH (t) == 0) TYPE_LENGTH (t) = gdbarch_int_bit (gdbarch) / HOST_CHAR_BIT; for (ext_tsym = ext_sh + external_sym_size; @@ -1061,11 +1051,11 @@ break; SET_FIELD_ENUMVAL (*f, tsym.value); - FIELD_TYPE (*f) = t; + f->set_type (t); FIELD_NAME (*f) = debug_info->ss + cur_fdr->issBase + tsym.iss; FIELD_BITSIZE (*f) = 0; - enum_sym = allocate_symbol (mdebugread_objfile); + enum_sym = new (&mdebugread_objfile->objfile_obstack) symbol; enum_sym->set_linkage_name (obstack_strdup (&mdebugread_objfile->objfile_obstack, f->name)); @@ -1094,7 +1084,7 @@ /* gcc puts out an empty struct for an opaque struct definitions, do not create a symbol for it either. */ - if (TYPE_NFIELDS (t) == 0) + if (t->num_fields () == 0) { TYPE_STUB (t) = 1; break; @@ -1183,7 +1173,7 @@ } } - if (TYPE_NFIELDS (ftype) <= 0) + if (ftype->num_fields () <= 0) { /* No parameter type information is recorded with the function's type. Set that from the type of the parameter symbols. */ @@ -1195,9 +1185,10 @@ { struct block_iterator iter; - TYPE_NFIELDS (ftype) = nparams; - TYPE_FIELDS (ftype) = (struct field *) - TYPE_ALLOC (ftype, nparams * sizeof (struct field)); + ftype->set_num_fields (nparams); + ftype->set_fields + ((struct field *) + TYPE_ALLOC (ftype, nparams * sizeof (struct field))); iparams = 0; ALL_BLOCK_SYMBOLS (cblock, iter, sym) @@ -1207,7 +1198,7 @@ if (SYMBOL_IS_ARGUMENT (sym)) { - TYPE_FIELD_TYPE (ftype, iparams) = SYMBOL_TYPE (sym); + ftype->field (iparams).set_type (SYMBOL_TYPE (sym)); TYPE_FIELD_ARTIFICIAL (ftype, iparams) = 0; iparams++; } @@ -1242,13 +1233,13 @@ case stMember: /* member of struct or union */ { - struct field *f - = &TYPE_FIELDS (top_stack->cur_type)[top_stack->cur_field++]; + struct field *f = &top_stack->cur_type->field (top_stack->cur_field); + top_stack->cur_field++; FIELD_NAME (*f) = name; SET_FIELD_BITPOS (*f, sh->value); bitsize = 0; - FIELD_TYPE (*f) = parse_type (cur_fd, ax, sh->index, - &bitsize, bigend, name); + f->set_type (parse_type (cur_fd, ax, sh->index, &bitsize, bigend, + name)); FIELD_BITSIZE (*f) = bitsize; } break; @@ -1305,13 +1296,13 @@ add_symbol (s, top_stack->cur_st, top_stack->cur_block); /* Incomplete definitions of structs should not get a name. */ - if (TYPE_NAME (SYMBOL_TYPE (s)) == NULL - && (TYPE_NFIELDS (SYMBOL_TYPE (s)) != 0 - || (TYPE_CODE (SYMBOL_TYPE (s)) != TYPE_CODE_STRUCT - && TYPE_CODE (SYMBOL_TYPE (s)) != TYPE_CODE_UNION))) + if (SYMBOL_TYPE (s)->name () == NULL + && (SYMBOL_TYPE (s)->num_fields () != 0 + || (SYMBOL_TYPE (s)->code () != TYPE_CODE_STRUCT + && SYMBOL_TYPE (s)->code () != TYPE_CODE_UNION))) { - if (TYPE_CODE (SYMBOL_TYPE (s)) == TYPE_CODE_PTR - || TYPE_CODE (SYMBOL_TYPE (s)) == TYPE_CODE_FUNC) + if (SYMBOL_TYPE (s)->code () == TYPE_CODE_PTR + || SYMBOL_TYPE (s)->code () == TYPE_CODE_FUNC) { /* If we are giving a name to a type such as "pointer to foo" or "function returning foo", we better not set @@ -1333,7 +1324,7 @@ for anything except pointers or functions. */ } else - TYPE_NAME (SYMBOL_TYPE (s)) = s->linkage_name (); + SYMBOL_TYPE (s)->set_name (s->linkage_name ()); } break; @@ -1366,7 +1357,7 @@ static struct type * basic_type (int bt, struct objfile *objfile) { - struct gdbarch *gdbarch = get_objfile_arch (objfile); + struct gdbarch *gdbarch = objfile->arch (); struct type **map_bt = basic_type_data.get (objfile); struct type *tp; @@ -1438,13 +1429,11 @@ break; case btComplex: - tp = init_complex_type (objfile, "complex", - basic_type (btFloat, objfile)); + tp = init_complex_type ("complex", basic_type (btFloat, objfile)); break; case btDComplex: - tp = init_complex_type (objfile, "double complex", - basic_type (btFloat, objfile)); + tp = init_complex_type ("double complex", basic_type (btFloat, objfile)); break; case btFixedDec: @@ -1650,16 +1639,16 @@ /* DEC c89 produces cross references to qualified aggregate types, dereference them. */ - while (TYPE_CODE (tp) == TYPE_CODE_PTR - || TYPE_CODE (tp) == TYPE_CODE_ARRAY) + while (tp->code () == TYPE_CODE_PTR + || tp->code () == TYPE_CODE_ARRAY) tp = TYPE_TARGET_TYPE (tp); /* Make sure that TYPE_CODE(tp) has an expected type code. Any type may be returned from cross_ref if file indirect entries are corrupted. */ - if (TYPE_CODE (tp) != TYPE_CODE_STRUCT - && TYPE_CODE (tp) != TYPE_CODE_UNION - && TYPE_CODE (tp) != TYPE_CODE_ENUM) + if (tp->code () != TYPE_CODE_STRUCT + && tp->code () != TYPE_CODE_UNION + && tp->code () != TYPE_CODE_ENUM) { unexpected_type_code_complaint (sym_name); } @@ -1669,27 +1658,27 @@ exception is if we guessed wrong re struct/union/enum. But for struct vs. union a wrong guess is harmless, so don't complain(). */ - if ((TYPE_CODE (tp) == TYPE_CODE_ENUM + if ((tp->code () == TYPE_CODE_ENUM && type_code != TYPE_CODE_ENUM) - || (TYPE_CODE (tp) != TYPE_CODE_ENUM + || (tp->code () != TYPE_CODE_ENUM && type_code == TYPE_CODE_ENUM)) { bad_tag_guess_complaint (sym_name); } - if (TYPE_CODE (tp) != type_code) + if (tp->code () != type_code) { - TYPE_CODE (tp) = type_code; + tp->set_code (type_code); } /* Do not set the tag name if it is a compiler generated tag name (.Fxx or .xxfake or empty) for unnamed struct/union/enums. */ if (name[0] == '.' || name[0] == '\0') - TYPE_NAME (tp) = NULL; - else if (TYPE_NAME (tp) == NULL - || strcmp (TYPE_NAME (tp), name) != 0) - TYPE_NAME (tp) - = obstack_strdup (&mdebugread_objfile->objfile_obstack, name); + tp->set_name (NULL); + else if (tp->name () == NULL + || strcmp (tp->name (), name) != 0) + tp->set_name (obstack_strdup (&mdebugread_objfile->objfile_obstack, + name)); } } @@ -1709,7 +1698,7 @@ /* Make sure that TYPE_CODE(tp) has an expected type code. Any type may be returned from cross_ref if file indirect entries are corrupted. */ - if (TYPE_CODE (tp) != TYPE_CODE_RANGE) + if (tp->code () != TYPE_CODE_RANGE) { unexpected_type_code_complaint (sym_name); } @@ -1717,15 +1706,15 @@ { /* Usually, TYPE_CODE(tp) is already type_code. The main exception is if we guessed wrong re struct/union/enum. */ - if (TYPE_CODE (tp) != type_code) + if (tp->code () != type_code) { bad_tag_guess_complaint (sym_name); - TYPE_CODE (tp) = type_code; + tp->set_code (type_code); } - if (TYPE_NAME (tp) == NULL - || strcmp (TYPE_NAME (tp), name) != 0) - TYPE_NAME (tp) - = obstack_strdup (&mdebugread_objfile->objfile_obstack, name); + if (tp->name () == NULL + || strcmp (tp->name (), name) != 0) + tp->set_name (obstack_strdup (&mdebugread_objfile->objfile_obstack, + name)); } } if (t->bt == btTypedef) @@ -1744,12 +1733,12 @@ /* Deal with range types. */ if (t->bt == btRange) { - TYPE_NFIELDS (tp) = 0; - TYPE_RANGE_DATA (tp) = ((struct range_bounds *) - TYPE_ZALLOC (tp, sizeof (struct range_bounds))); - TYPE_LOW_BOUND (tp) = AUX_GET_DNLOW (bigend, ax); + tp->set_num_fields (0); + tp->set_bounds (((struct range_bounds *) + TYPE_ZALLOC (tp, sizeof (struct range_bounds)))); + tp->bounds ()->low.set_const_val (AUX_GET_DNLOW (bigend, ax)); ax++; - TYPE_HIGH_BOUND (tp) = AUX_GET_DNHIGH (bigend, ax); + tp->bounds ()->high.set_const_val (AUX_GET_DNHIGH (bigend, ax)); ax++; } @@ -1842,7 +1831,7 @@ /* The bounds type should be an integer type, but might be anything else due to corrupt aux entries. */ - if (TYPE_CODE (indx) != TYPE_CODE_INT) + if (indx->code () != TYPE_CODE_INT) { complaint (_("illegal array index type for %s, assuming int"), sym_name); @@ -1910,7 +1899,7 @@ static void parse_procedure (PDR *pr, struct compunit_symtab *search_symtab, - struct partial_symtab *pst) + legacy_psymtab *pst) { struct symbol *s, *i; const struct block *b; @@ -2023,8 +2012,7 @@ /* GDB expects the absolute function start address for the procedure descriptor in e->pdr.adr. As the address in the procedure descriptor is usually relative, - we would have to relocate e->pdr.adr with cur_fdr->adr and - ANOFFSET (pst->section_offsets, SECT_OFF_TEXT (pst->objfile)). + we would have to relocate e->pdr.adr with cur_fdr->adr. Unfortunately cur_fdr->adr and e->pdr.adr are both absolute in shared libraries on some systems, and on other systems e->pdr.adr is sometimes offset by a bogus value. @@ -2050,7 +2038,7 @@ if (processing_gcc_compilation == 0 && found_ecoff_debugging_info == 0 - && TYPE_CODE (TYPE_TARGET_TYPE (SYMBOL_TYPE (s))) == TYPE_CODE_VOID) + && TYPE_TARGET_TYPE (SYMBOL_TYPE (s))->code () == TYPE_CODE_VOID) SYMBOL_TYPE (s) = objfile_type (mdebugread_objfile)->nodebug_text_symbol; } @@ -2060,11 +2048,8 @@ This routine clobbers top_stack->cur_block and ->cur_st. */ -static void parse_external (EXTR *, int, struct section_offsets *, - struct objfile *); - static void -parse_external (EXTR *es, int bigend, struct section_offsets *section_offsets, +parse_external (EXTR *es, int bigend, const section_offsets §ion_offsets, struct objfile *objfile) { union aux_ext *ax; @@ -2298,7 +2283,7 @@ parse_partial_symbols (minimal_symbol_reader &reader, struct objfile *objfile) { - struct gdbarch *gdbarch = get_objfile_arch (objfile); + struct gdbarch *gdbarch = objfile->arch (); const bfd_size_type external_sym_size = debug_swap->external_sym_size; const bfd_size_type external_rfd_size = debug_swap->external_rfd_size; const bfd_size_type external_ext_size = debug_swap->external_ext_size; @@ -2314,7 +2299,7 @@ EXTR *ext_in; EXTR *ext_in_end; SYMR sh; - struct partial_symtab *pst; + legacy_psymtab *pst; int textlow_not_set = 1; /* List of current psymtab's include files. */ @@ -2324,7 +2309,7 @@ EXTR *extern_tab; struct pst_map *fdr_to_pst; /* Index within current psymtab dependency list. */ - struct partial_symtab **dependency_list; + legacy_psymtab **dependency_list; int dependencies_used, dependencies_allocated; char *name; enum language prev_language; @@ -2353,8 +2338,8 @@ dependencies_allocated = 30; dependencies_used = 0; dependency_list = - (struct partial_symtab **) alloca (dependencies_allocated * - sizeof (struct partial_symtab *)); + (legacy_psymtab **) alloca (dependencies_allocated * + sizeof (legacy_psymtab *)); set_last_source_file (NULL); @@ -2377,7 +2362,7 @@ fdr_to_pst = fdr_to_pst_holder.data (); fdr_to_pst++; { - struct partial_symtab *new_pst = new_psymtab ("", objfile); + legacy_psymtab *new_pst = new_psymtab ("", objfile); fdr_to_pst[-1].pst = new_pst; FDR_IDX (new_pst) = -1; @@ -2595,7 +2580,7 @@ /* Pass 3 over files, over local syms: fill in static symbols. */ for (f_idx = 0; f_idx < hdr->ifdMax; f_idx++) { - struct partial_symtab *save_pst; + legacy_psymtab *save_pst; EXTR *ext_ptr; CORE_ADDR textlow; @@ -2613,9 +2598,7 @@ textlow = fh->adr; else textlow = 0; - pst = start_psymtab_common (objfile, - fdr_name (fh), - textlow); + pst = new legacy_psymtab (fdr_name (fh), objfile, textlow); pst->read_symtab_private = XOBNEW (&objfile->objfile_obstack, symloc); memset (pst->read_symtab_private, 0, sizeof (struct symloc)); @@ -2627,7 +2610,8 @@ PENDING_LIST (pst) = pending_list; /* The way to turn this into a symtab is to call... */ - pst->read_symtab = mdebug_read_symtab; + pst->legacy_read_symtab = mdebug_read_symtab; + pst->legacy_expand_psymtab = mdebug_expand_psymtab; /* Set up language for the pst. The language from the FDR is used if it is unambigious (e.g. cfront @@ -2901,7 +2885,7 @@ { /* Here if prev stab wasn't N_SO. */ if (pst) { - pst = (struct partial_symtab *) 0; + pst = (legacy_psymtab *) 0; includes_used = 0; dependencies_used = 0; } @@ -3045,10 +3029,6 @@ switch (p[1]) { case 'S': - if (gdbarch_static_transform_name_p (gdbarch)) - namestring = gdbarch_static_transform_name - (gdbarch, namestring); - add_psymbol_to_list (gdb::string_view (namestring, p - namestring), true, VAR_DOMAIN, LOC_STATIC, @@ -3291,7 +3271,7 @@ if (pst && gdbarch_sofun_address_maybe_missing (gdbarch)) { - pst = (struct partial_symtab *) 0; + pst = (legacy_psymtab *) 0; includes_used = 0; dependencies_used = 0; } @@ -3592,9 +3572,8 @@ CORE_ADDR svalue; short section; - if (ext_ptr->ifd != f_idx) - internal_error (__FILE__, __LINE__, - _("failed internal consistency check")); + gdb_assert (ext_ptr->ifd == f_idx); + psh = &ext_ptr->asym; /* Do not add undefined symbols to the partial symbol table. */ @@ -3746,12 +3725,12 @@ /* Remove the dummy psymtab created for -O3 images above, if it is still empty, to enable the detection of stripped executables. */ - pst = objfile->partial_symtabs->psymtabs; - if (pst->next == NULL - && pst->number_of_dependencies == 0 - && pst->n_global_syms == 0 - && pst->n_static_syms == 0) - objfile->partial_symtabs->psymtabs = NULL; + partial_symtab *pst_del = objfile->partial_symtabs->psymtabs; + if (pst_del->next == NULL + && pst_del->number_of_dependencies == 0 + && pst_del->n_global_syms == 0 + && pst_del->n_static_syms == 0) + objfile->partial_symtabs->discard_psymtab (pst_del); } /* If the current psymbol has an enumerated type, we need to add @@ -3849,8 +3828,7 @@ The flow of control and even the memory allocation differs. FIXME. */ static void -psymtab_to_symtab_1 (struct objfile *objfile, - struct partial_symtab *pst, const char *filename) +mdebug_expand_psymtab (legacy_psymtab *pst, struct objfile *objfile) { bfd_size_type external_sym_size; bfd_size_type external_pdr_size; @@ -3862,35 +3840,16 @@ struct linetable *lines; CORE_ADDR lowest_pdr_addr = 0; int last_symtab_ended = 0; - struct section_offsets *section_offsets = objfile->section_offsets; + const section_offsets §ion_offsets = objfile->section_offsets; if (pst->readin) return; - pst->readin = 1; + pst->readin = true; /* Read in all partial symtabs on which this one is dependent. NOTE that we do have circular dependencies, sigh. We solved that by setting pst->readin before this point. */ - - for (i = 0; i < pst->number_of_dependencies; i++) - if (!pst->dependencies[i]->readin) - { - /* Inform about additional files to be read in. */ - if (info_verbose) - { - fputs_filtered (" ", gdb_stdout); - wrap_here (""); - fputs_filtered ("and ", gdb_stdout); - wrap_here (""); - printf_filtered ("%s...", - pst->dependencies[i]->filename); - wrap_here (""); /* Flush output */ - gdb_flush (gdb_stdout); - } - /* We only pass the filename for debug purposes. */ - psymtab_to_symtab_1 (objfile, pst->dependencies[i], - pst->dependencies[i]->filename); - } + pst->expand_dependencies (objfile); /* Do nothing if this is a dummy psymtab. */ @@ -3936,7 +3895,7 @@ if (processing_gcc_compilation != 0) { - struct gdbarch *gdbarch = get_objfile_arch (objfile); + struct gdbarch *gdbarch = objfile->arch (); /* This symbol table contains stabs-in-ecoff entries. */ @@ -3980,8 +3939,7 @@ && previous_stab_code != (unsigned char) N_SO && *name == '\000') { - valu += ANOFFSET (section_offsets, - SECT_OFF_TEXT (objfile)); + valu += section_offsets[SECT_OFF_TEXT (objfile)]; previous_stab_code = N_SO; cust = end_symtab (valu, SECT_OFF_TEXT (objfile)); end_stabs (); @@ -4028,8 +3986,7 @@ else { /* Handle encoded stab line number. */ - valu += ANOFFSET (section_offsets, - SECT_OFF_TEXT (objfile)); + valu += section_offsets[SECT_OFF_TEXT (objfile)]; record_line (get_current_subfile (), sh.index, gdbarch_addr_bits_remove (gdbarch, valu)); } @@ -4663,12 +4620,12 @@ /* Allocate a new partial_symtab NAME. */ -static struct partial_symtab * +static legacy_psymtab * new_psymtab (const char *name, struct objfile *objfile) { - struct partial_symtab *psymtab; + legacy_psymtab *psymtab; - psymtab = allocate_psymtab (name, objfile); + psymtab = new legacy_psymtab (name, objfile); /* Keep a backpointer to the file's symbols. */ @@ -4680,7 +4637,8 @@ PENDING_LIST (psymtab) = pending_list; /* The way to turn this into a symtab is to call... */ - psymtab->read_symtab = mdebug_read_symtab; + psymtab->legacy_read_symtab = mdebug_read_symtab; + psymtab->legacy_expand_psymtab = mdebug_expand_psymtab; return (psymtab); } @@ -4759,11 +4717,10 @@ static struct symbol * new_symbol (const char *name) { - struct symbol *s = allocate_symbol (mdebugread_objfile); + struct symbol *s = new (&mdebugread_objfile->objfile_obstack) symbol; - SYMBOL_SET_LANGUAGE (s, psymtab_language, - &mdebugread_objfile->objfile_obstack); - SYMBOL_SET_NAMES (s, name, true, mdebugread_objfile); + s->set_language (psymtab_language, &mdebugread_objfile->objfile_obstack); + s->compute_and_set_names (name, true, mdebugread_objfile->per_bfd); return s; } @@ -4775,7 +4732,7 @@ struct type *t; t = alloc_type (mdebugread_objfile); - TYPE_NAME (t) = name; + t->set_name (name); INIT_CPLUS_SPECIFIC (t); return t; } @@ -4809,8 +4766,9 @@ reader.install (); } +void _initialize_mdebugread (); void -_initialize_mdebugread (void) +_initialize_mdebugread () { mdebug_register_index = register_symbol_register_impl (LOC_REGISTER, &mdebug_register_funcs); diff -Nru gdb-9.1/gdb/mdebugread.h gdb-10.2/gdb/mdebugread.h --- gdb-9.1/gdb/mdebugread.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/mdebugread.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Read a symbol table in ECOFF format (Third-Eye). - Copyright (C) 2004-2020 Free Software Foundation, Inc. + Copyright (C) 2004-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/memattr.c gdb-10.2/gdb/memattr.c --- gdb-9.1/gdb/memattr.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/memattr.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Memory attributes support, for GDB. - Copyright (C) 2001-2020 Free Software Foundation, Inc. + Copyright (C) 2001-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -586,16 +586,12 @@ dont_repeat (); } -static void -dummy_cmd (const char *args, int from_tty) -{ -} - static struct cmd_list_element *mem_set_cmdlist; static struct cmd_list_element *mem_show_cmdlist; +void _initialize_mem (); void -_initialize_mem (void) +_initialize_mem () { add_com ("mem", class_vars, mem_command, _("\ Define attributes for memory region or reset memory region handling to " @@ -627,14 +623,14 @@ add_info ("mem", info_mem_command, _("Memory region attributes.")); - add_prefix_cmd ("mem", class_vars, dummy_cmd, _("\ + add_basic_prefix_cmd ("mem", class_vars, _("\ Memory regions settings."), - &mem_set_cmdlist, "set mem ", - 0/* allow-unknown */, &setlist); - add_prefix_cmd ("mem", class_vars, dummy_cmd, _("\ + &mem_set_cmdlist, "set mem ", + 0/* allow-unknown */, &setlist); + add_show_prefix_cmd ("mem", class_vars, _("\ Memory regions settings."), - &mem_show_cmdlist, "show mem ", - 0/* allow-unknown */, &showlist); + &mem_show_cmdlist, "show mem ", + 0/* allow-unknown */, &showlist); add_setshow_boolean_cmd ("inaccessible-by-default", no_class, &inaccessible_by_default, _("\ diff -Nru gdb-9.1/gdb/memattr.h gdb-10.2/gdb/memattr.h --- gdb-9.1/gdb/memattr.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/memattr.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Memory attributes support, for GDB. - Copyright (C) 2001-2020 Free Software Foundation, Inc. + Copyright (C) 2001-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/mem-break.c gdb-10.2/gdb/mem-break.c --- gdb-9.1/gdb/mem-break.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/mem-break.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Simulate breakpoints by patching locations in the target system, for GDB. - Copyright (C) 1990-2020 Free Software Foundation, Inc. + Copyright (C) 1990-2021 Free Software Foundation, Inc. Contributed by Cygnus Support. Written by John Gilmore. diff -Nru gdb-9.1/gdb/memory-map.c gdb-10.2/gdb/memory-map.c --- gdb-9.1/gdb/memory-map.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/memory-map.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Routines for handling XML memory maps provided by target. - Copyright (C) 2006-2020 Free Software Foundation, Inc. + Copyright (C) 2006-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/memory-map.h gdb-10.2/gdb/memory-map.h --- gdb-9.1/gdb/memory-map.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/memory-map.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Routines for handling XML memory maps provided by target. - Copyright (C) 2006-2020 Free Software Foundation, Inc. + Copyright (C) 2006-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/memrange.c gdb-10.2/gdb/memrange.c --- gdb-9.1/gdb/memrange.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/memrange.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Memory ranges - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/memrange.h gdb-10.2/gdb/memrange.h --- gdb-9.1/gdb/memrange.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/memrange.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* The memory range data structure, and associated utilities. - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/mep-tdep.c gdb-10.2/gdb/mep-tdep.c --- gdb-9.1/gdb/mep-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/mep-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for the Toshiba MeP for GDB, the GNU debugger. - Copyright (C) 2001-2020 Free Software Foundation, Inc. + Copyright (C) 2001-2021 Free Software Foundation, Inc. Contributed by Red Hat, Inc. @@ -2448,8 +2448,9 @@ return gdbarch; } +void _initialize_mep_tdep (); void -_initialize_mep_tdep (void) +_initialize_mep_tdep () { mep_csr_reggroup = reggroup_new ("csr", USER_REGGROUP); mep_cr_reggroup = reggroup_new ("cr", USER_REGGROUP); diff -Nru gdb-9.1/gdb/mi/mi-cmd-break.c gdb-10.2/gdb/mi/mi-cmd-break.c --- gdb-9.1/gdb/mi/mi-cmd-break.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/mi/mi-cmd-break.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* MI Command Set - breakpoint and watchpoint commands. - Copyright (C) 2000-2020 Free Software Foundation, Inc. + Copyright (C) 2000-2021 Free Software Foundation, Inc. Contributed by Cygnus Solutions (a Red Hat company). This file is part of GDB. diff -Nru gdb-9.1/gdb/mi/mi-cmd-break.h gdb-10.2/gdb/mi/mi-cmd-break.h --- gdb-9.1/gdb/mi/mi-cmd-break.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/mi/mi-cmd-break.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* MI Command Set - breakpoint and watchpoint commands. - Copyright (C) 2012-2020 Free Software Foundation, Inc. + Copyright (C) 2012-2021 Free Software Foundation, Inc. Contributed by Intel Corporation. diff -Nru gdb-9.1/gdb/mi/mi-cmd-catch.c gdb-10.2/gdb/mi/mi-cmd-catch.c --- gdb-9.1/gdb/mi/mi-cmd-catch.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/mi/mi-cmd-catch.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* MI Command Set - catch commands. - Copyright (C) 2012-2020 Free Software Foundation, Inc. + Copyright (C) 2012-2021 Free Software Foundation, Inc. Contributed by Intel Corporation. diff -Nru gdb-9.1/gdb/mi/mi-cmd-disas.c gdb-10.2/gdb/mi/mi-cmd-disas.c --- gdb-9.1/gdb/mi/mi-cmd-disas.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/mi/mi-cmd-disas.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* MI Command Set - disassemble commands. - Copyright (C) 2000-2020 Free Software Foundation, Inc. + Copyright (C) 2000-2021 Free Software Foundation, Inc. Contributed by Cygnus Solutions (a Red Hat company). This file is part of GDB. diff -Nru gdb-9.1/gdb/mi/mi-cmd-env.c gdb-10.2/gdb/mi/mi-cmd-env.c --- gdb-9.1/gdb/mi/mi-cmd-env.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/mi/mi-cmd-env.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* MI Command Set - environment commands. - Copyright (C) 2002-2020 Free Software Foundation, Inc. + Copyright (C) 2002-2021 Free Software Foundation, Inc. Contributed by Red Hat Inc. @@ -244,7 +244,7 @@ void mi_cmd_inferior_tty_set (const char *command, char **argv, int argc) { - set_inferior_io_terminal (argv[0]); + current_inferior ()->set_tty (argv[0]); } /* Print the inferior terminal device name. */ @@ -252,17 +252,17 @@ void mi_cmd_inferior_tty_show (const char *command, char **argv, int argc) { - const char *inferior_io_terminal = get_inferior_io_terminal (); - if ( !mi_valid_noargs ("-inferior-tty-show", argc, argv)) error (_("-inferior-tty-show: Usage: No args")); - if (inferior_io_terminal) - current_uiout->field_string ("inferior_tty_terminal", inferior_io_terminal); + const char *inferior_tty = current_inferior ()->tty (); + if (inferior_tty != NULL) + current_uiout->field_string ("inferior_tty_terminal", inferior_tty); } +void _initialize_mi_cmd_env (); void -_initialize_mi_cmd_env (void) +_initialize_mi_cmd_env () { const char *env; diff -Nru gdb-9.1/gdb/mi/mi-cmd-file.c gdb-10.2/gdb/mi/mi-cmd-file.c --- gdb-9.1/gdb/mi/mi-cmd-file.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/mi/mi-cmd-file.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* MI Command Set - file commands. - Copyright (C) 2000-2020 Free Software Foundation, Inc. + Copyright (C) 2000-2021 Free Software Foundation, Inc. Contributed by Cygnus Solutions (a Red Hat company). This file is part of GDB. @@ -121,7 +121,6 @@ { struct ui_out *uiout = current_uiout; const char *pattern; - struct so_list *so = NULL; switch (argc) { @@ -148,7 +147,7 @@ /* Print the table header. */ ui_out_emit_list list_emitter (uiout, "shared-libraries"); - ALL_SO_LIBS (so) + for (struct so_list *so : current_program_space->solibs ()) { if (so->so_name[0] == '\0') continue; diff -Nru gdb-9.1/gdb/mi/mi-cmd-info.c gdb-10.2/gdb/mi/mi-cmd-info.c --- gdb-9.1/gdb/mi/mi-cmd-info.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/mi/mi-cmd-info.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* MI Command Set - information commands. - Copyright (C) 2011-2020 Free Software Foundation, Inc. + Copyright (C) 2011-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/mi/mi-cmds.c gdb-10.2/gdb/mi/mi-cmds.c --- gdb-9.1/gdb/mi/mi-cmds.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/mi/mi-cmds.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* MI Command Set for GDB, the GNU debugger. - Copyright (C) 2000-2020 Free Software Foundation, Inc. + Copyright (C) 2000-2021 Free Software Foundation, Inc. Contributed by Cygnus Solutions (a Red Hat company). @@ -295,8 +295,9 @@ } } +void _initialize_mi_cmds (); void -_initialize_mi_cmds (void) +_initialize_mi_cmds () { build_table (mi_cmds); memset (&stats, 0, sizeof (stats)); diff -Nru gdb-9.1/gdb/mi/mi-cmds.h gdb-10.2/gdb/mi/mi-cmds.h --- gdb-9.1/gdb/mi/mi-cmds.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/mi/mi-cmds.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* MI Command Set for GDB, the GNU debugger. - Copyright (C) 2000-2020 Free Software Foundation, Inc. + Copyright (C) 2000-2021 Free Software Foundation, Inc. Contributed by Cygnus Solutions (a Red Hat company). diff -Nru gdb-9.1/gdb/mi/mi-cmd-stack.c gdb-10.2/gdb/mi/mi-cmd-stack.c --- gdb-9.1/gdb/mi/mi-cmd-stack.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/mi/mi-cmd-stack.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* MI Command Set - stack commands. - Copyright (C) 2000-2020 Free Software Foundation, Inc. + Copyright (C) 2000-2021 Free Software Foundation, Inc. Contributed by Cygnus Solutions (a Red Hat company). This file is part of GDB. @@ -543,7 +543,7 @@ get_no_prettyformat_print_options (&opts); opts.deref_ref = 1; common_val_print (arg->val, &stb, 0, &opts, - language_def (SYMBOL_LANGUAGE (arg->sym))); + language_def (arg->sym->language ())); } catch (const gdb_exception_error &except) { @@ -634,9 +634,8 @@ struct frame_arg arg, entryarg; if (SYMBOL_IS_ARGUMENT (sym)) - sym2 = lookup_symbol (sym->linkage_name (), - block, VAR_DOMAIN, - NULL).symbol; + sym2 = lookup_symbol_search_name (sym->search_name (), + block, VAR_DOMAIN).symbol; else sym2 = sym; gdb_assert (sym2 != NULL); @@ -650,9 +649,9 @@ { case PRINT_SIMPLE_VALUES: type = check_typedef (sym2->type); - if (TYPE_CODE (type) != TYPE_CODE_ARRAY - && TYPE_CODE (type) != TYPE_CODE_STRUCT - && TYPE_CODE (type) != TYPE_CODE_UNION) + if (type->code () != TYPE_CODE_ARRAY + && type->code () != TYPE_CODE_STRUCT + && type->code () != TYPE_CODE_UNION) { case PRINT_ALL_VALUES: if (SYMBOL_IS_ARGUMENT (sym)) diff -Nru gdb-9.1/gdb/mi/mi-cmd-target.c gdb-10.2/gdb/mi/mi-cmd-target.c --- gdb-9.1/gdb/mi/mi-cmd-target.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/mi/mi-cmd-target.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* MI Command Set - target commands. - Copyright (C) 2007-2020 Free Software Foundation, Inc. + Copyright (C) 2007-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/mi/mi-cmd-var.c gdb-10.2/gdb/mi/mi-cmd-var.c --- gdb-9.1/gdb/mi/mi-cmd-var.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/mi/mi-cmd-var.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* MI Command Set - varobj commands. - Copyright (C) 2000-2020 Free Software Foundation, Inc. + Copyright (C) 2000-2021 Free Software Foundation, Inc. Contributed by Cygnus Solutions (a Red Hat company). @@ -340,9 +340,9 @@ /* For PRINT_SIMPLE_VALUES, only print the value if it has a type and that type is not a compound type. */ - return (TYPE_CODE (type) != TYPE_CODE_ARRAY - && TYPE_CODE (type) != TYPE_CODE_STRUCT - && TYPE_CODE (type) != TYPE_CODE_UNION); + return (type->code () != TYPE_CODE_ARRAY + && type->code () != TYPE_CODE_STRUCT + && type->code () != TYPE_CODE_UNION); } } diff -Nru gdb-9.1/gdb/mi/mi-common.c gdb-10.2/gdb/mi/mi-common.c --- gdb-9.1/gdb/mi/mi-common.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/mi/mi-common.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Interface for common GDB/MI data - Copyright (C) 2005-2020 Free Software Foundation, Inc. + Copyright (C) 2005-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/mi/mi-common.h gdb-10.2/gdb/mi/mi-common.h --- gdb-9.1/gdb/mi/mi-common.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/mi/mi-common.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Interface for common GDB/MI data - Copyright (C) 2005-2020 Free Software Foundation, Inc. + Copyright (C) 2005-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/mi/mi-console.c gdb-10.2/gdb/mi/mi-console.c --- gdb-9.1/gdb/mi/mi-console.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/mi/mi-console.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* MI Console code. - Copyright (C) 2000-2020 Free Software Foundation, Inc. + Copyright (C) 2000-2021 Free Software Foundation, Inc. Contributed by Cygnus Solutions (a Red Hat company). diff -Nru gdb-9.1/gdb/mi/mi-console.h gdb-10.2/gdb/mi/mi-console.h --- gdb-9.1/gdb/mi/mi-console.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/mi/mi-console.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* MI Command Set - MI Console. - Copyright (C) 2000-2020 Free Software Foundation, Inc. + Copyright (C) 2000-2021 Free Software Foundation, Inc. Contributed by Cygnus Solutions (a Red Hat company). This file is part of GDB. diff -Nru gdb-9.1/gdb/mi/mi-getopt.c gdb-10.2/gdb/mi/mi-getopt.c --- gdb-9.1/gdb/mi/mi-getopt.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/mi/mi-getopt.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* MI Command Set - MI Option Parser. - Copyright (C) 2000-2020 Free Software Foundation, Inc. + Copyright (C) 2000-2021 Free Software Foundation, Inc. Contributed by Cygnus Solutions (a Red Hat company). This file is part of GDB. diff -Nru gdb-9.1/gdb/mi/mi-getopt.h gdb-10.2/gdb/mi/mi-getopt.h --- gdb-9.1/gdb/mi/mi-getopt.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/mi/mi-getopt.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* MI Option Parser. - Copyright (C) 2000-2020 Free Software Foundation, Inc. + Copyright (C) 2000-2021 Free Software Foundation, Inc. Contributed by Cygnus Solutions (a Red Hat company). This file is part of GDB. diff -Nru gdb-9.1/gdb/mi/mi-interp.c gdb-10.2/gdb/mi/mi-interp.c --- gdb-9.1/gdb/mi/mi-interp.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/mi/mi-interp.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* MI Interpreter Definitions and Commands for GDB, the GNU debugger. - Copyright (C) 2002-2020 Free Software Foundation, Inc. + Copyright (C) 2002-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -23,7 +23,7 @@ #include "interps.h" #include "event-top.h" -#include "event-loop.h" +#include "gdbsupport/event-loop.h" #include "inferior.h" #include "infrun.h" #include "ui-out.h" @@ -91,8 +91,6 @@ ssize_t len, const bfd_byte *myaddr); static void mi_on_sync_execution_done (void); -static int report_initial_inferior (struct inferior *inf, void *closure); - /* Display the MI prompt. */ static void @@ -137,12 +135,27 @@ if (top_level) { - /* The initial inferior is created before this function is - called, so we need to report it explicitly. Use iteration in - case future version of GDB creates more than one inferior - up-front. */ - iterate_over_inferiors (report_initial_inferior, mi); - } + /* The initial inferior is created before this function is called, so we + need to report it explicitly when initializing the top-level MI + interpreter. + + This is also called when additional MI interpreters are added (using + the new-ui command), when multiple inferiors possibly exist, so we need + to use iteration to report all the inferiors. mi_inferior_added can't + be used, because it would print the event on all the other MI UIs. */ + + for (inferior *inf : all_inferiors ()) + { + target_terminal::scoped_restore_terminal_state term_state; + target_terminal::ours_for_output (); + + fprintf_unfiltered (mi->event_channel, + "thread-group-added,id=\"i%d\"", + inf->num); + + gdb_flush (mi->event_channel); + } + } } void @@ -961,7 +974,8 @@ } static void -mi_on_resume_1 (struct mi_interp *mi, ptid_t ptid) +mi_on_resume_1 (struct mi_interp *mi, + process_stratum_target *targ, ptid_t ptid) { /* To cater for older frontends, emit ^running, but do it only once per each command. We do it here, since at this point we know @@ -984,7 +998,7 @@ && !multiple_inferiors_p ()) fprintf_unfiltered (mi->raw_stdout, "*running,thread-id=\"all\"\n"); else - for (thread_info *tp : all_non_exited_threads (ptid)) + for (thread_info *tp : all_non_exited_threads (targ, ptid)) mi_output_running (tp); if (!running_result_record_printed && mi_proceeded) @@ -1004,10 +1018,11 @@ { struct thread_info *tp = NULL; + process_stratum_target *target = current_inferior ()->process_target (); if (ptid == minus_one_ptid || ptid.is_pid ()) tp = inferior_thread (); else - tp = find_thread_ptid (ptid); + tp = find_thread_ptid (target, ptid); /* Suppress output while calling an inferior function. */ if (tp->control.in_infcall) @@ -1023,7 +1038,7 @@ target_terminal::scoped_restore_terminal_state term_state; target_terminal::ours_for_output (); - mi_on_resume_1 (mi, ptid); + mi_on_resume_1 (mi, target, ptid); } } @@ -1251,26 +1266,6 @@ } } -static int -report_initial_inferior (struct inferior *inf, void *closure) -{ - /* This function is called from mi_interpreter_init, and since - mi_inferior_added assumes that inferior is fully initialized - and top_level_interpreter_data is set, we cannot call - it here. */ - struct mi_interp *mi = (struct mi_interp *) closure; - - target_terminal::scoped_restore_terminal_state term_state; - target_terminal::ours_for_output (); - - fprintf_unfiltered (mi->event_channel, - "thread-group-added,id=\"i%d\"", - inf->num); - gdb_flush (mi->event_channel); - - return 0; -} - ui_out * mi_interp::interp_ui_out () { @@ -1333,8 +1328,9 @@ return new mi_interp (name); } +void _initialize_mi_interp (); void -_initialize_mi_interp (void) +_initialize_mi_interp () { /* The various interpreter levels. */ interp_factory_register (INTERP_MI1, mi_interp_factory); diff -Nru gdb-9.1/gdb/mi/mi-interp.h gdb-10.2/gdb/mi/mi-interp.h --- gdb-9.1/gdb/mi/mi-interp.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/mi/mi-interp.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* MI Interpreter Definitions and Commands for GDB, the GNU debugger. - Copyright (C) 2017-2020 Free Software Foundation, Inc. + Copyright (C) 2017-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/mi/mi-main.c gdb-10.2/gdb/mi/mi-main.c --- gdb-9.1/gdb/mi/mi-main.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/mi/mi-main.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* MI Command Set. - Copyright (C) 2000-2020 Free Software Foundation, Inc. + Copyright (C) 2000-2021 Free Software Foundation, Inc. Contributed by Cygnus Solutions (a Red Hat company). @@ -33,7 +33,7 @@ #include "ui-out.h" #include "mi-out.h" #include "interps.h" -#include "event-loop.h" +#include "gdbsupport/event-loop.h" #include "event-top.h" #include "gdbcore.h" /* For write_memory(). */ #include "value.h" @@ -390,17 +390,14 @@ } } -/* Callback for iterate_over_inferiors which starts the execution - of the given inferior. +/* Start the execution of the given inferior. - ARG is a pointer to an integer whose value, if non-zero, indicates - that the program should be stopped when reaching the main subprogram - (similar to what the CLI "start" command does). */ + START_P indicates whether the program should be stopped when reaching the + main subprogram (similar to what the CLI "start" command does). */ -static int -run_one_inferior (struct inferior *inf, void *arg) +static void +run_one_inferior (inferior *inf, bool start_p) { - int start_p = *(int *) arg; const char *run_cmd = start_p ? "start" : "run"; struct target_ops *run_target = find_run_target (); int async_p = mi_async && run_target->can_async_p (); @@ -414,14 +411,9 @@ switch_to_thread (tp); } else - { - set_current_inferior (inf); - switch_to_no_thread (); - set_current_program_space (inf->pspace); - } + switch_to_inferior_no_thread (inf); mi_execute_cli_command (run_cmd, async_p, async_p ? "&" : NULL); - return 0; } void @@ -466,7 +458,8 @@ { scoped_restore_current_pspace_and_thread restore_pspace_thread; - iterate_over_inferiors (run_one_inferior, &start_p); + for (inferior *inf : all_inferiors ()) + run_one_inferior (inf, start_p); } else { @@ -637,16 +630,13 @@ const std::set<int> *inferiors; }; -static int -print_one_inferior (struct inferior *inferior, void *xdata) +static void +print_one_inferior (struct inferior *inferior, bool recurse, + const std::set<int> &ids) { - struct print_one_inferior_data *top_data - = (struct print_one_inferior_data *) xdata; struct ui_out *uiout = current_uiout; - if (top_data->inferiors->empty () - || (top_data->inferiors->find (inferior->pid) - != top_data->inferiors->end ())) + if (ids.empty () || (ids.find (inferior->pid) != ids.end ())) { struct collect_cores_data data; ui_out_emit_tuple tuple_emitter (uiout, NULL); @@ -679,11 +669,9 @@ uiout->field_signed (NULL, b); } - if (top_data->recurse) + if (recurse) print_thread_info (uiout, NULL, inferior->pid); } - - return 0; } /* Output a field named 'cores' with a list as the value. The @@ -857,18 +845,14 @@ } else { - struct print_one_inferior_data data; - - data.recurse = recurse; - data.inferiors = &ids; - /* Local thread groups. Either no explicit ids -- and we print everything, or several explicit ids. In both cases, we print more than one group, and have to use 'groups' as the top-level element. */ ui_out_emit_list list_emitter (uiout, "groups"); update_thread_list (); - iterate_over_inferiors (print_one_inferior, &data); + for (inferior *inf : all_inferiors ()) + print_one_inferior (inf, recurse, ids); } } @@ -1136,9 +1120,7 @@ get_formatted_print_options (&opts, format); opts.deref_ref = 1; - val_print (value_type (val), - value_embedded_offset (val), 0, - &stb, 0, val, &opts, current_language); + common_val_print (val, &stb, 0, &opts, current_language); uiout->field_stream ("value", stb); } @@ -1723,23 +1705,11 @@ current_uiout->field_fmt ("inferior", "i%d", inf->num); } -/* Callback used to find the first inferior other than the current - one. */ - -static int -get_other_inferior (struct inferior *inf, void *arg) -{ - if (inf == current_inferior ()) - return 0; - - return 1; -} - void mi_cmd_remove_inferior (const char *command, char **argv, int argc) { int id; - struct inferior *inf; + struct inferior *inf_to_remove; if (argc != 1) error (_("-remove-inferior should be passed a single argument")); @@ -1747,18 +1717,23 @@ if (sscanf (argv[0], "i%d", &id) != 1) error (_("the thread group id is syntactically invalid")); - inf = find_inferior_id (id); - if (!inf) + inf_to_remove = find_inferior_id (id); + if (inf_to_remove == NULL) error (_("the specified thread group does not exist")); - if (inf->pid != 0) + if (inf_to_remove->pid != 0) error (_("cannot remove an active inferior")); - if (inf == current_inferior ()) + if (inf_to_remove == current_inferior ()) { struct thread_info *tp = 0; - struct inferior *new_inferior - = iterate_over_inferiors (get_other_inferior, NULL); + struct inferior *new_inferior = NULL; + + for (inferior *inf : all_inferiors ()) + { + if (inf != inf_to_remove) + new_inferior = inf; + } if (new_inferior == NULL) error (_("Cannot remove last inferior")); @@ -1773,7 +1748,7 @@ set_current_program_space (new_inferior->pspace); } - delete_inferior (inf); + delete_inferior (inf_to_remove); } @@ -2483,9 +2458,9 @@ type = check_typedef (value_type (val)); type_print (value_type (val), "", &stb, -1); uiout->field_stream ("type", stb); - if (TYPE_CODE (type) != TYPE_CODE_ARRAY - && TYPE_CODE (type) != TYPE_CODE_STRUCT - && TYPE_CODE (type) != TYPE_CODE_UNION) + if (type->code () != TYPE_CODE_ARRAY + && type->code () != TYPE_CODE_STRUCT + && type->code () != TYPE_CODE_UNION) { struct value_print_options opts; @@ -2753,8 +2728,9 @@ } +void _initialize_mi_main (); void -_initialize_mi_main (void) +_initialize_mi_main () { struct cmd_list_element *c; diff -Nru gdb-9.1/gdb/mi/mi-main.h gdb-10.2/gdb/mi/mi-main.h --- gdb-9.1/gdb/mi/mi-main.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/mi/mi-main.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* MI Internal Functions for GDB, the GNU debugger. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/mi/mi-out.c gdb-10.2/gdb/mi/mi-out.c --- gdb-9.1/gdb/mi/mi-out.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/mi/mi-out.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* MI Command Set - output generating routines. - Copyright (C) 2000-2020 Free Software Foundation, Inc. + Copyright (C) 2000-2021 Free Software Foundation, Inc. Contributed by Cygnus Solutions (a Red Hat company). diff -Nru gdb-9.1/gdb/mi/mi-out.h gdb-10.2/gdb/mi/mi-out.h --- gdb-9.1/gdb/mi/mi-out.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/mi/mi-out.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* MI Command Set - MI output generating routines for GDB. - Copyright (C) 2000-2020 Free Software Foundation, Inc. + Copyright (C) 2000-2021 Free Software Foundation, Inc. Contributed by Cygnus Solutions (a Red Hat company). This file is part of GDB. diff -Nru gdb-9.1/gdb/mi/mi-parse.c gdb-10.2/gdb/mi/mi-parse.c --- gdb-9.1/gdb/mi/mi-parse.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/mi/mi-parse.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* MI Command Set - MI parser. - Copyright (C) 2000-2020 Free Software Foundation, Inc. + Copyright (C) 2000-2021 Free Software Foundation, Inc. Contributed by Cygnus Solutions (a Red Hat company). diff -Nru gdb-9.1/gdb/mi/mi-parse.h gdb-10.2/gdb/mi/mi-parse.h --- gdb-9.1/gdb/mi/mi-parse.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/mi/mi-parse.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* MI Command Set - MI Command Parser. - Copyright (C) 2000-2020 Free Software Foundation, Inc. + Copyright (C) 2000-2021 Free Software Foundation, Inc. Contributed by Cygnus Solutions (a Red Hat company). This file is part of GDB. diff -Nru gdb-9.1/gdb/mi/mi-symbol-cmds.c gdb-10.2/gdb/mi/mi-symbol-cmds.c --- gdb-9.1/gdb/mi/mi-symbol-cmds.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/mi/mi-symbol-cmds.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* MI Command Set - symbol commands. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -50,7 +50,7 @@ already sorted by increasing values in the symbol table, so no need to perform any other sorting. */ - gdbarch = get_objfile_arch (SYMTAB_OBJFILE (s)); + gdbarch = SYMTAB_OBJFILE (s)->arch (); ui_out_emit_list list_emitter (uiout, "lines"); if (SYMTAB_LINETABLE (s) != NULL && SYMTAB_LINETABLE (s)->nitems > 0) @@ -96,7 +96,7 @@ output_nondebug_symbol (ui_out *uiout, const struct bound_minimal_symbol &msymbol) { - struct gdbarch *gdbarch = get_objfile_arch (msymbol.objfile); + struct gdbarch *gdbarch = msymbol.objfile->arch (); ui_out_emit_tuple tuple_emitter (uiout, NULL); uiout->field_core_addr ("address", gdbarch, diff -Nru gdb-9.1/gdb/microblaze-linux-tdep.c gdb-10.2/gdb/microblaze-linux-tdep.c --- gdb-9.1/gdb/microblaze-linux-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/microblaze-linux-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for Xilinx MicroBlaze. - Copyright (C) 2009-2020 Free Software Foundation, Inc. + Copyright (C) 2009-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -131,8 +131,9 @@ µblaze_linux_sighandler_tramp_frame); } +void _initialize_microblaze_linux_tdep (); void -_initialize_microblaze_linux_tdep (void) +_initialize_microblaze_linux_tdep () { gdbarch_register_osabi (bfd_arch_microblaze, 0, GDB_OSABI_LINUX, microblaze_linux_init_abi); diff -Nru gdb-9.1/gdb/microblaze-tdep.c gdb-10.2/gdb/microblaze-tdep.c --- gdb-9.1/gdb/microblaze-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/microblaze-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for Xilinx MicroBlaze. - Copyright (C) 2009-2020 Free Software Foundation, Inc. + Copyright (C) 2009-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -31,7 +31,7 @@ #include "target.h" #include "frame-base.h" #include "frame-unwind.h" -#include "dwarf2-frame.h" +#include "dwarf2/frame.h" #include "osabi.h" #include "target-descriptions.h" #include "opcodes/microblaze-opcm.h" @@ -753,8 +753,9 @@ return gdbarch; } +void _initialize_microblaze_tdep (); void -_initialize_microblaze_tdep (void) +_initialize_microblaze_tdep () { register_gdbarch_init (bfd_arch_microblaze, microblaze_gdbarch_init); diff -Nru gdb-9.1/gdb/microblaze-tdep.h gdb-10.2/gdb/microblaze-tdep.h --- gdb-9.1/gdb/microblaze-tdep.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/microblaze-tdep.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for Xilinx MicroBlaze. - Copyright (C) 2009-2020 Free Software Foundation, Inc. + Copyright (C) 2009-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/mingw-hdep.c gdb-10.2/gdb/mingw-hdep.c --- gdb-9.1/gdb/mingw-hdep.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/mingw-hdep.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Host support routines for MinGW, for GDB, the GNU debugger. - Copyright (C) 2006-2020 Free Software Foundation, Inc. + Copyright (C) 2006-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -20,9 +20,9 @@ #include "defs.h" #include "main.h" #include "serial.h" -#include "event-loop.h" +#include "gdbsupport/event-loop.h" -#include "gdb_select.h" +#include "gdbsupport/gdb_select.h" #include <windows.h> diff -Nru gdb-9.1/gdb/minidebug.c gdb-10.2/gdb/minidebug.c --- gdb-9.1/gdb/minidebug.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/minidebug.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Read MiniDebugInfo data from an objfile. - Copyright (C) 2012-2020 Free Software Foundation, Inc. + Copyright (C) 2012-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -26,6 +26,10 @@ #ifdef HAVE_LIBLZMA +/* We stash a reference to the .gnu_debugdata BFD on the enclosing + BFD. */ +static const bfd_key<gdb_bfd_ref_ptr> gnu_debug_key; + #include <lzma.h> /* Allocator function for LZMA. */ @@ -269,6 +273,10 @@ return NULL; #ifdef HAVE_LIBLZMA + gdb_bfd_ref_ptr *shared = gnu_debug_key.get (objfile->obfd); + if (shared != nullptr) + return *shared; + std::string filename = string_printf (_(".gnu_debugdata for %s"), objfile_name (objfile)); @@ -282,6 +290,9 @@ warning (_("Cannot parse .gnu_debugdata section; not a BFD object")); return NULL; } + + gnu_debug_key.emplace (objfile->obfd, abfd); + #else warning (_("Cannot parse .gnu_debugdata section; LZMA support was " "disabled at compile time")); diff -Nru gdb-9.1/gdb/minsyms.c gdb-10.2/gdb/minsyms.c --- gdb-9.1/gdb/minsyms.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/minsyms.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* GDB routines for manipulating the minimal symbol tables. - Copyright (C) 1992-2020 Free Software Foundation, Inc. + Copyright (C) 1992-2021 Free Software Foundation, Inc. Contributed by Cygnus Support, using pieces from other GDB modules. This file is part of GDB. @@ -54,7 +54,6 @@ #include <algorithm> #include "safe-ctype.h" #include "gdbsupport/parallel-for.h" -#include "maint.h" #if CXX_STD_THREAD #include <mutex> @@ -78,7 +77,7 @@ case mst_file_bss: case mst_data_gnu_ifunc: { - struct gdbarch *gdbarch = get_objfile_arch (objfile); + struct gdbarch *gdbarch = objfile->arch (); CORE_ADDR pc = gdbarch_convert_from_func_ptr_addr (gdbarch, msym_addr, current_top_target ()); @@ -163,7 +162,7 @@ { if (sym->demangled_hash_next == NULL) { - objfile->per_bfd->demangled_hash_languages.set (MSYMBOL_LANGUAGE (sym)); + objfile->per_bfd->demangled_hash_languages.set (sym->language ()); struct minimal_symbol **table = objfile->per_bfd->msymbol_demangled_hash; @@ -364,8 +363,8 @@ % MINIMAL_SYMBOL_HASH_SIZE); symbol_name_matcher_ftype *match - = get_symbol_name_matcher (language_def (lang), - lookup_name); + = language_def (lang)->get_symbol_name_matcher + (lookup_name); struct minimal_symbol **msymbol_demangled_hash = objfile->per_bfd->msymbol_demangled_hash; @@ -468,7 +467,7 @@ if (current_language->la_language == language_ada) return lookup_name.ada ().lookup_name ().c_str (); - return lookup_name.name ().c_str (); + return lookup_name.c_str (); } /* See minsyms.h. */ @@ -508,7 +507,7 @@ enum language lang = (enum language) liter; const language_defn *lang_def = language_def (lang); symbol_name_matcher_ftype *name_match - = get_symbol_name_matcher (lang_def, lookup_name); + = lang_def->get_symbol_name_matcher (lookup_name); unsigned int hash = lookup_name.search_name_hash (lang) % MINIMAL_SYMBOL_HASH_SIZE; @@ -667,24 +666,18 @@ gdb_assert_not_reached ("unhandled lookup_msym_prefer"); } -/* Search through the minimal symbol table for each objfile and find - the symbol whose address is the largest address that is still less - than or equal to PC, and matches SECTION (which is not NULL). - Returns a pointer to the minimal symbol if such a symbol is found, - or NULL if PC is not in a suitable range. +/* See minsyms.h. + Note that we need to look through ALL the minimal symbol tables before deciding on the symbol that comes closest to the specified PC. This is because objfiles can overlap, for example objfile A has .text at 0x100 and .data at 0x40000 and objfile B has .text at 0x234 and - .data at 0x40048. - - If WANT_TRAMPOLINE is set, prefer mst_solib_trampoline symbols when - there are text and trampoline symbols at the same address. - Otherwise prefer mst_text symbols. */ + .data at 0x40048. */ bound_minimal_symbol lookup_minimal_symbol_by_pc_section (CORE_ADDR pc_in, struct obj_section *section, - lookup_msym_prefer prefer) + lookup_msym_prefer prefer, + bound_minimal_symbol *previous) { int lo; int hi; @@ -694,6 +687,12 @@ struct objfile *best_objfile = NULL; struct bound_minimal_symbol result; + if (previous != nullptr) + { + previous->minsym = nullptr; + previous->objfile = nullptr; + } + if (section == NULL) { section = find_pc_section (pc_in); @@ -887,8 +886,23 @@ if (best_zero_sized != -1) hi = best_zero_sized; else - /* Go on to the next object file. */ - continue; + { + /* If needed record this symbol as the closest + previous symbol. */ + if (previous != nullptr) + { + if (previous->minsym == nullptr + || (MSYMBOL_VALUE_RAW_ADDRESS (&msymbol[hi]) + > MSYMBOL_VALUE_RAW_ADDRESS + (previous->minsym))) + { + previous->minsym = &msymbol[hi]; + previous->objfile = objfile; + } + } + /* Go on to the next object file. */ + continue; + } } /* The minimal symbol indexed by hi now is the best one in this @@ -1129,23 +1143,14 @@ m_msym_bunch = newobj; } msymbol = &m_msym_bunch->contents[m_msym_bunch_index]; - symbol_set_language (msymbol, language_auto, - &m_objfile->per_bfd->storage_obstack); + msymbol->set_language (language_auto, + &m_objfile->per_bfd->storage_obstack); if (copy_name) - msymbol->name = obstack_strndup (&m_objfile->per_bfd->storage_obstack, - name.data (), name.size ()); + msymbol->m_name = obstack_strndup (&m_objfile->per_bfd->storage_obstack, + name.data (), name.size ()); else - msymbol->name = name.data (); - - if (worker_threads_disabled ()) - { - /* To keep our behavior as close as possible to the previous non-threaded - behavior for GDB 9.1, we call symbol_set_names here when threads - are disabled. */ - symbol_set_names (msymbol, msymbol->name, false, m_objfile->per_bfd); - msymbol->name_set = 1; - } + msymbol->m_name = name.data (); SET_MSYMBOL_VALUE_ADDRESS (msymbol, address); MSYMBOL_SECTION (msymbol) = section; @@ -1407,22 +1412,22 @@ for (minimal_symbol *msym = start; msym < end; ++msym) { size_t idx = msym - msymbols; - hash_values[idx].name_length = strlen (msym->name); + hash_values[idx].name_length = strlen (msym->linkage_name ()); if (!msym->name_set) { - /* This will be freed later, by symbol_set_names. */ + /* This will be freed later, by compute_and_set_names. */ char *demangled_name - = symbol_find_demangled_name (msym, msym->name); - symbol_set_demangled_name - (msym, demangled_name, - &m_objfile->per_bfd->storage_obstack); + = symbol_find_demangled_name (msym, msym->linkage_name ()); + msym->set_demangled_name + (demangled_name, &m_objfile->per_bfd->storage_obstack); msym->name_set = 1; } /* This mangled_name_hash computation has to be outside of - the name_set check, or symbol_set_names below will + the name_set check, or compute_and_set_names below will be called with an invalid hash value. */ hash_values[idx].mangled_name_hash - = fast_hash (msym->name, hash_values[idx].name_length); + = fast_hash (msym->linkage_name (), + hash_values[idx].name_length); hash_values[idx].minsym_hash = msymbol_hash (msym->linkage_name ()); /* We only use this hash code if the search name differs @@ -1430,8 +1435,7 @@ build_minimal_symbol_hash_tables. */ if (msym->search_name () != msym->linkage_name ()) hash_values[idx].minsym_demangled_hash - = search_name_hash (MSYMBOL_LANGUAGE (msym), - msym->search_name ()); + = search_name_hash (msym->language (), msym->search_name ()); } { /* To limit how long we hold the lock, we only acquire it here @@ -1442,10 +1446,9 @@ for (minimal_symbol *msym = start; msym < end; ++msym) { size_t idx = msym - msymbols; - symbol_set_names - (msym, - gdb::string_view(msym->name, - hash_values[idx].name_length), + msym->compute_and_set_names + (gdb::string_view (msym->linkage_name (), + hash_values[idx].name_length), false, m_objfile->per_bfd, hash_values[idx].mangled_name_hash); diff -Nru gdb-9.1/gdb/minsyms.h gdb-10.2/gdb/minsyms.h --- gdb-9.1/gdb/minsyms.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/minsyms.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Minimal symbol table definitions for GDB. - Copyright (C) 2011-2020 Free Software Foundation, Inc. + Copyright (C) 2011-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -240,7 +240,9 @@ /* Search through the minimal symbol table for each objfile and find the symbol whose address is the largest address that is still less - than or equal to PC, and which matches SECTION. + than or equal to PC_IN, and which matches SECTION. A matching symbol + must either be zero sized and have address PC_IN, or PC_IN must fall + within the range of addresses covered by the matching symbol. If SECTION is NULL, this uses the result of find_pc_section instead. @@ -249,12 +251,17 @@ found, or NULL if PC is not in a suitable range. See definition of lookup_msym_prefer for description of PREFER. By - default mst_text symbols are preferred. */ + default mst_text symbols are preferred. + + If the PREVIOUS pointer is non-NULL, and no matching symbol is found, + then the contents will be set to reference the closest symbol before + PC_IN. */ struct bound_minimal_symbol lookup_minimal_symbol_by_pc_section - (CORE_ADDR, - struct obj_section *, - lookup_msym_prefer prefer = lookup_msym_prefer::TEXT); + (CORE_ADDR pc_in, + struct obj_section *section, + lookup_msym_prefer prefer = lookup_msym_prefer::TEXT, + bound_minimal_symbol *previous = nullptr); /* Backward compatibility: search through the minimal symbol table for a matching PC (no section given). diff -Nru gdb-9.1/gdb/mips64-obsd-nat.c gdb-10.2/gdb/mips64-obsd-nat.c --- gdb-9.1/gdb/mips64-obsd-nat.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/mips64-obsd-nat.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Native-dependent code for OpenBSD/mips64. - Copyright (C) 2004-2020 Free Software Foundation, Inc. + Copyright (C) 2004-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -115,8 +115,9 @@ perror_with_name (_("Couldn't write registers")); } +void _initialize_mips64obsd_nat (); void -_initialize_mips64obsd_nat (void) +_initialize_mips64obsd_nat () { add_inf_child_target (&the_mips64_obsd_nat_target); } diff -Nru gdb-9.1/gdb/mips64-obsd-tdep.c gdb-10.2/gdb/mips64-obsd-tdep.c --- gdb-9.1/gdb/mips64-obsd-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/mips64-obsd-tdep.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for OpenBSD/mips64. - Copyright (C) 2004-2020 Free Software Foundation, Inc. + Copyright (C) 2004-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -159,8 +159,9 @@ (gdbarch, svr4_lp64_fetch_link_map_offsets); } +void _initialize_mips64obsd_tdep (); void -_initialize_mips64obsd_tdep (void) +_initialize_mips64obsd_tdep () { gdbarch_register_osabi (bfd_arch_mips, 0, GDB_OSABI_OPENBSD, mips64obsd_init_abi); diff -Nru gdb-9.1/gdb/mips-fbsd-nat.c gdb-10.2/gdb/mips-fbsd-nat.c --- gdb-9.1/gdb/mips-fbsd-nat.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/mips-fbsd-nat.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Native-dependent code for FreeBSD/mips. - Copyright (C) 2017-2020 Free Software Foundation, Inc. + Copyright (C) 2017-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -126,8 +126,9 @@ } } +void _initialize_mips_fbsd_nat (); void -_initialize_mips_fbsd_nat (void) +_initialize_mips_fbsd_nat () { add_inf_child_target (&the_mips_fbsd_nat_target); } diff -Nru gdb-9.1/gdb/mips-fbsd-tdep.c gdb-10.2/gdb/mips-fbsd-tdep.c --- gdb-9.1/gdb/mips-fbsd-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/mips-fbsd-tdep.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for FreeBSD/mips. - Copyright (C) 2017-2020 Free Software Foundation, Inc. + Copyright (C) 2017-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -462,6 +462,20 @@ /* Shared library support. */ +/* FreeBSD/mips can use an alternate routine in the runtime linker to + resolve functions. */ + +static CORE_ADDR +mips_fbsd_skip_solib_resolver (struct gdbarch *gdbarch, CORE_ADDR pc) +{ + struct bound_minimal_symbol msym + = lookup_bound_minimal_symbol ("_mips_rtld_bind"); + if (msym.minsym != nullptr && BMSYMBOL_VALUE_ADDRESS (msym) == pc) + return frame_unwind_caller_pc (get_current_frame ()); + + return fbsd_skip_solib_resolver (gdbarch, pc); +} + /* FreeBSD/mips uses a slightly different `struct link_map' than the other FreeBSD platforms as it includes an additional `l_off' member. */ @@ -546,6 +560,8 @@ set_gdbarch_iterate_over_regset_sections (gdbarch, mips_fbsd_iterate_over_regset_sections); + set_gdbarch_skip_solib_resolver (gdbarch, mips_fbsd_skip_solib_resolver); + /* FreeBSD/mips has SVR4-style shared libraries. */ set_solib_svr4_fetch_link_map_offsets (gdbarch, (gdbarch_ptr_bit (gdbarch) == 32 ? @@ -553,8 +569,9 @@ mips_fbsd_lp64_fetch_link_map_offsets)); } +void _initialize_mips_fbsd_tdep (); void -_initialize_mips_fbsd_tdep (void) +_initialize_mips_fbsd_tdep () { gdbarch_register_osabi (bfd_arch_mips, 0, GDB_OSABI_FREEBSD, mips_fbsd_init_abi); diff -Nru gdb-9.1/gdb/mips-fbsd-tdep.h gdb-10.2/gdb/mips-fbsd-tdep.h --- gdb-9.1/gdb/mips-fbsd-tdep.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/mips-fbsd-tdep.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Common target dependent code for GDB on MIPS systems running FreeBSD. - Copyright (C) 2017-2020 Free Software Foundation, Inc. + Copyright (C) 2017-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/mips-linux-nat.c gdb-10.2/gdb/mips-linux-nat.c --- gdb-9.1/gdb/mips-linux-nat.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/mips-linux-nat.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Native-dependent code for GNU/Linux on MIPS processors. - Copyright (C) 2001-2020 Free Software Foundation, Inc. + Copyright (C) 2001-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -783,8 +783,9 @@ linux_nat_trad_target::close (); } +void _initialize_mips_linux_nat (); void -_initialize_mips_linux_nat (void) +_initialize_mips_linux_nat () { add_setshow_boolean_cmd ("show-debug-regs", class_maintenance, &show_debug_regs, _("\ diff -Nru gdb-9.1/gdb/mips-linux-tdep.c gdb-10.2/gdb/mips-linux-tdep.c --- gdb-9.1/gdb/mips-linux-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/mips-linux-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for GNU/Linux on MIPS processors. - Copyright (C) 2001-2020 Free Software Foundation, Inc. + Copyright (C) 2001-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -633,16 +633,14 @@ if (n64) { /* 'daddu t7,ra' or 'or t7, ra, zero'*/ - if (insn != 0x03e0782d || insn != 0x03e07825) + if (insn != 0x03e0782d && insn != 0x03e07825) return 0; - } else { /* 'addu t7,ra' or 'or t7, ra, zero'*/ - if (insn != 0x03e07821 || insn != 0x03e07825) + if (insn != 0x03e07821 && insn != 0x03e07825) return 0; - } insn = extract_unsigned_integer (p + 8, 4, byte_order); @@ -1642,8 +1640,9 @@ } } +void _initialize_mips_linux_tdep (); void -_initialize_mips_linux_tdep (void) +_initialize_mips_linux_tdep () { const struct bfd_arch_info *arch_info; diff -Nru gdb-9.1/gdb/mips-linux-tdep.h gdb-10.2/gdb/mips-linux-tdep.h --- gdb-9.1/gdb/mips-linux-tdep.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/mips-linux-tdep.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for GNU/Linux on MIPS processors. - Copyright (C) 2006-2020 Free Software Foundation, Inc. + Copyright (C) 2006-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/mips-nbsd-nat.c gdb-10.2/gdb/mips-nbsd-nat.c --- gdb-9.1/gdb/mips-nbsd-nat.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/mips-nbsd-nat.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Native-dependent code for MIPS systems running NetBSD. - Copyright (C) 2000-2020 Free Software Foundation, Inc. + Copyright (C) 2000-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -17,6 +17,8 @@ You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ +/* We define this to get types like register_t. */ +#define _KERNTYPES #include "defs.h" #include "inferior.h" #include "regcache.h" @@ -113,8 +115,9 @@ } } +void _initialize_mipsnbsd_nat (); void -_initialize_mipsnbsd_nat (void) +_initialize_mipsnbsd_nat () { add_inf_child_target (&the_mips_nbsd_nat_target); } diff -Nru gdb-9.1/gdb/mips-nbsd-tdep.c gdb-10.2/gdb/mips-nbsd-tdep.c --- gdb-9.1/gdb/mips-nbsd-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/mips-nbsd-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for NetBSD/mips. - Copyright (C) 2002-2020 Free Software Foundation, Inc. + Copyright (C) 2002-2021 Free Software Foundation, Inc. Contributed by Wasabi Systems, Inc. @@ -354,6 +354,8 @@ mipsnbsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) { + nbsd_init_abi (info, gdbarch); + set_gdbarch_iterate_over_regset_sections (gdbarch, mipsnbsd_iterate_over_regset_sections); @@ -371,8 +373,9 @@ mipsnbsd_lp64_fetch_link_map_offsets)); } +void _initialize_mipsnbsd_tdep (); void -_initialize_mipsnbsd_tdep (void) +_initialize_mipsnbsd_tdep () { gdbarch_register_osabi (bfd_arch_mips, 0, GDB_OSABI_NETBSD, mipsnbsd_init_abi); diff -Nru gdb-9.1/gdb/mips-nbsd-tdep.h gdb-10.2/gdb/mips-nbsd-tdep.h --- gdb-9.1/gdb/mips-nbsd-tdep.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/mips-nbsd-tdep.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Common target dependent code for GDB on MIPS systems running NetBSD. - Copyright (C) 2002-2020 Free Software Foundation, Inc. + Copyright (C) 2002-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/mipsread.c gdb-10.2/gdb/mipsread.c --- gdb-9.1/gdb/mipsread.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/mipsread.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Read a symbol table in MIPS' format (Third-Eye). - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. Contributed by Alessandro Forin (af@cs.cmu.edu) at CMU. Major work by Per Bothner, John Gilmore and Ian Lance Taylor at Cygnus Support. @@ -43,7 +43,6 @@ static void read_alphacoff_dynamic_symtab (minimal_symbol_reader &, - struct section_offsets *, struct objfile *objfile); /* Initialize anything that needs initializing when a completely new @@ -84,7 +83,7 @@ /* Add alpha coff dynamic symbols. */ - read_alphacoff_dynamic_symtab (reader, objfile->section_offsets, objfile); + read_alphacoff_dynamic_symtab (reader, objfile); /* Install any minimal symbols that have been collected as the current minimal symbols for this objfile. */ @@ -174,7 +173,6 @@ static void read_alphacoff_dynamic_symtab (minimal_symbol_reader &reader, - struct section_offsets *section_offsets, struct objfile *objfile) { bfd *abfd = objfile->obfd; @@ -381,8 +379,9 @@ &psym_functions }; +void _initialize_mipsread (); void -_initialize_mipsread (void) +_initialize_mipsread () { add_symtab_fns (bfd_target_ecoff_flavour, &ecoff_sym_fns); } diff -Nru gdb-9.1/gdb/mips-sde-tdep.c gdb-10.2/gdb/mips-sde-tdep.c --- gdb-9.1/gdb/mips-sde-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/mips-sde-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for SDE on MIPS processors. - Copyright (C) 2014-2020 Free Software Foundation, Inc. + Copyright (C) 2014-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -256,8 +256,9 @@ frame_base_append_sniffer (gdbarch, mips_sde_frame_base_sniffer); } +void _initialize_mips_sde_tdep (); void -_initialize_mips_sde_tdep (void) +_initialize_mips_sde_tdep () { gdbarch_register_osabi_sniffer (bfd_arch_mips, bfd_target_elf_flavour, diff -Nru gdb-9.1/gdb/mips-tdep.c gdb-10.2/gdb/mips-tdep.c --- gdb-9.1/gdb/mips-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/mips-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for the MIPS architecture, for GDB, the GNU Debugger. - Copyright (C) 1988-2020 Free Software Foundation, Inc. + Copyright (C) 1988-2021 Free Software Foundation, Inc. Contributed by Alessandro Forin(af@cs.cmu.edu) at CMU and by Per Bothner(bothner@cs.wisc.edu) at U.Wisconsin. @@ -51,7 +51,7 @@ #include "infcall.h" #include "remote.h" #include "target-descriptions.h" -#include "dwarf2-frame.h" +#include "dwarf2/frame.h" #include "user-regs.h" #include "valprint.h" #include "ax.h" @@ -687,7 +687,7 @@ if (reggroup == all_reggroup) return pseudo; vector_p = TYPE_VECTOR (register_type (gdbarch, regnum)); - float_p = TYPE_CODE (register_type (gdbarch, regnum)) == TYPE_CODE_FLT; + float_p = register_type (gdbarch, regnum)->code () == TYPE_CODE_FLT; /* FIXME: cagney/2003-04-13: Can't yet use gdbarch_num_regs (gdbarch), as not all architectures are multi-arch. */ raw_p = rawnum < gdbarch_num_regs (gdbarch); @@ -889,7 +889,7 @@ return (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG && register_size (gdbarch, regnum) == 4 && mips_float_register_p (gdbarch, regnum) - && TYPE_CODE (type) == TYPE_CODE_FLT && TYPE_LENGTH (type) == 8); + && type->code () == TYPE_CODE_FLT && TYPE_LENGTH (type) == 8); } /* This predicate tests for the case of a value of less than 8 @@ -4407,8 +4407,8 @@ || (MIPS_EABI (gdbarch) && (typecode == TYPE_CODE_STRUCT || typecode == TYPE_CODE_UNION) - && TYPE_NFIELDS (arg_type) == 1 - && TYPE_CODE (check_typedef (TYPE_FIELD_TYPE (arg_type, 0))) + && arg_type->num_fields () == 1 + && check_typedef (arg_type->field (0).type ())->code () == TYPE_CODE_FLT)) && MIPS_FPU_TYPE(gdbarch) != MIPS_FPU_NONE); } @@ -4419,23 +4419,23 @@ static int mips_type_needs_double_align (struct type *type) { - enum type_code typecode = TYPE_CODE (type); + enum type_code typecode = type->code (); if (typecode == TYPE_CODE_FLT && TYPE_LENGTH (type) == 8) return 1; else if (typecode == TYPE_CODE_STRUCT) { - if (TYPE_NFIELDS (type) < 1) + if (type->num_fields () < 1) return 0; - return mips_type_needs_double_align (TYPE_FIELD_TYPE (type, 0)); + return mips_type_needs_double_align (type->field (0).type ()); } else if (typecode == TYPE_CODE_UNION) { int i, n; - n = TYPE_NFIELDS (type); + n = type->num_fields (); for (i = 0; i < n; i++) - if (mips_type_needs_double_align (TYPE_FIELD_TYPE (type, i))) + if (mips_type_needs_double_align (type->field (i).type ())) return 1; return 0; } @@ -4562,7 +4562,7 @@ struct value *arg = args[argnum]; struct type *arg_type = check_typedef (value_type (arg)); int len = TYPE_LENGTH (arg_type); - enum type_code typecode = TYPE_CODE (arg_type); + enum type_code typecode = arg_type->code (); if (mips_debug) fprintf_unfiltered (gdb_stdlog, @@ -4782,17 +4782,17 @@ /* Floating point type? */ if (tdep->mips_fpu_type != MIPS_FPU_NONE) { - if (TYPE_CODE (type) == TYPE_CODE_FLT) + if (type->code () == TYPE_CODE_FLT) fp_return_type = 1; /* Structs with a single field of float type are returned in a floating point register. */ - if ((TYPE_CODE (type) == TYPE_CODE_STRUCT - || TYPE_CODE (type) == TYPE_CODE_UNION) - && TYPE_NFIELDS (type) == 1) + if ((type->code () == TYPE_CODE_STRUCT + || type->code () == TYPE_CODE_UNION) + && type->num_fields () == 1) { - struct type *fieldtype = TYPE_FIELD_TYPE (type, 0); + struct type *fieldtype = type->field (0).type (); - if (TYPE_CODE (check_typedef (fieldtype)) == TYPE_CODE_FLT) + if (check_typedef (fieldtype)->code () == TYPE_CODE_FLT) fp_return_type = 1; } } @@ -4841,7 +4841,7 @@ { int i; - if (TYPE_CODE (arg_type) != TYPE_CODE_STRUCT) + if (arg_type->code () != TYPE_CODE_STRUCT) return 0; if (MIPS_FPU_TYPE (gdbarch) != MIPS_FPU_DOUBLE) @@ -4850,13 +4850,13 @@ if (TYPE_LENGTH (arg_type) < offset + MIPS64_REGSIZE) return 0; - for (i = 0; i < TYPE_NFIELDS (arg_type); i++) + for (i = 0; i < arg_type->num_fields (); i++) { int pos; struct type *field_type; /* We're only looking at normal fields. */ - if (field_is_static (&TYPE_FIELD (arg_type, i)) + if (field_is_static (&arg_type->field (i)) || (TYPE_FIELD_BITPOS (arg_type, i) % 8) != 0) continue; @@ -4865,7 +4865,7 @@ if (pos > offset) return 0; - field_type = check_typedef (TYPE_FIELD_TYPE (arg_type, i)); + field_type = check_typedef (arg_type->field (i).type ()); /* If this field is entirely before the requested offset, go on to the next one. */ @@ -4873,7 +4873,7 @@ continue; /* If this is our special aligned double, we can stop. */ - if (TYPE_CODE (field_type) == TYPE_CODE_FLT + if (field_type->code () == TYPE_CODE_FLT && TYPE_LENGTH (field_type) == MIPS64_REGSIZE) return 1; @@ -4952,7 +4952,7 @@ struct value *arg = args[argnum]; struct type *arg_type = check_typedef (value_type (arg)); int len = TYPE_LENGTH (arg_type); - enum type_code typecode = TYPE_CODE (arg_type); + enum type_code typecode = arg_type->code (); if (mips_debug) fprintf_unfiltered (gdb_stdlog, @@ -5189,7 +5189,7 @@ if (TYPE_LENGTH (type) > 2 * MIPS64_REGSIZE) return RETURN_VALUE_STRUCT_CONVENTION; - else if (TYPE_CODE (type) == TYPE_CODE_FLT + else if (type->code () == TYPE_CODE_FLT && TYPE_LENGTH (type) == 16 && tdep->mips_fpu_type != MIPS_FPU_NONE) { @@ -5211,7 +5211,7 @@ writebuf ? writebuf + 8 : writebuf, 0); return RETURN_VALUE_REGISTER_CONVENTION; } - else if (TYPE_CODE (type) == TYPE_CODE_FLT + else if (type->code () == TYPE_CODE_FLT && tdep->mips_fpu_type != MIPS_FPU_NONE) { /* A single or double floating-point value that fits in FP0. */ @@ -5225,16 +5225,16 @@ readbuf, writebuf, 0); return RETURN_VALUE_REGISTER_CONVENTION; } - else if (TYPE_CODE (type) == TYPE_CODE_STRUCT - && TYPE_NFIELDS (type) <= 2 - && TYPE_NFIELDS (type) >= 1 - && ((TYPE_NFIELDS (type) == 1 - && (TYPE_CODE (check_typedef (TYPE_FIELD_TYPE (type, 0))) + else if (type->code () == TYPE_CODE_STRUCT + && type->num_fields () <= 2 + && type->num_fields () >= 1 + && ((type->num_fields () == 1 + && (check_typedef (type->field (0).type ())->code () == TYPE_CODE_FLT)) - || (TYPE_NFIELDS (type) == 2 - && (TYPE_CODE (check_typedef (TYPE_FIELD_TYPE (type, 0))) + || (type->num_fields () == 2 + && (check_typedef (type->field (0).type ())->code () == TYPE_CODE_FLT) - && (TYPE_CODE (check_typedef (TYPE_FIELD_TYPE (type, 1))) + && (check_typedef (type->field (1).type ())->code () == TYPE_CODE_FLT)))) { /* A struct that contains one or two floats. Each value is part @@ -5245,14 +5245,14 @@ for (field = 0, regnum = (tdep->mips_fpu_type != MIPS_FPU_NONE ? mips_regnum (gdbarch)->fp0 : MIPS_V0_REGNUM); - field < TYPE_NFIELDS (type); field++, regnum += 2) + field < type->num_fields (); field++, regnum += 2) { - int offset = (FIELD_BITPOS (TYPE_FIELDS (type)[field]) + int offset = (FIELD_BITPOS (type->field (field)) / TARGET_CHAR_BIT); if (mips_debug) fprintf_unfiltered (gdb_stderr, "Return float struct+%d\n", offset); - if (TYPE_LENGTH (TYPE_FIELD_TYPE (type, field)) == 16) + if (TYPE_LENGTH (type->field (field).type ()) == 16) { /* A 16-byte long double field goes in two consecutive registers. */ @@ -5270,15 +5270,15 @@ else mips_xfer_register (gdbarch, regcache, gdbarch_num_regs (gdbarch) + regnum, - TYPE_LENGTH (TYPE_FIELD_TYPE (type, field)), + TYPE_LENGTH (type->field (field).type ()), gdbarch_byte_order (gdbarch), readbuf, writebuf, offset); } return RETURN_VALUE_REGISTER_CONVENTION; } - else if (TYPE_CODE (type) == TYPE_CODE_STRUCT - || TYPE_CODE (type) == TYPE_CODE_UNION - || TYPE_CODE (type) == TYPE_CODE_ARRAY) + else if (type->code () == TYPE_CODE_STRUCT + || type->code () == TYPE_CODE_UNION + || type->code () == TYPE_CODE_ARRAY) { /* A composite type. Extract the left justified value, regardless of the byte order. I.e. DO NOT USE @@ -5419,7 +5419,7 @@ struct value *arg = args[argnum]; struct type *arg_type = check_typedef (value_type (arg)); int len = TYPE_LENGTH (arg_type); - enum type_code typecode = TYPE_CODE (arg_type); + enum type_code typecode = arg_type->code (); if (mips_debug) fprintf_unfiltered (gdb_stdlog, @@ -5663,11 +5663,11 @@ enum mips_fval_reg fval_reg; fval_reg = readbuf ? mips16 ? mips_fval_gpr : mips_fval_fpr : mips_fval_both; - if (TYPE_CODE (type) == TYPE_CODE_STRUCT - || TYPE_CODE (type) == TYPE_CODE_UNION - || TYPE_CODE (type) == TYPE_CODE_ARRAY) + if (type->code () == TYPE_CODE_STRUCT + || type->code () == TYPE_CODE_UNION + || type->code () == TYPE_CODE_ARRAY) return RETURN_VALUE_STRUCT_CONVENTION; - else if (TYPE_CODE (type) == TYPE_CODE_FLT + else if (type->code () == TYPE_CODE_FLT && TYPE_LENGTH (type) == 4 && tdep->mips_fpu_type != MIPS_FPU_NONE) { /* A single-precision floating-point value. If reading in or copying, @@ -5704,7 +5704,7 @@ readbuf, writebuf, 0); return RETURN_VALUE_REGISTER_CONVENTION; } - else if (TYPE_CODE (type) == TYPE_CODE_FLT + else if (type->code () == TYPE_CODE_FLT && TYPE_LENGTH (type) == 8 && tdep->mips_fpu_type != MIPS_FPU_NONE) { /* A double-precision floating-point value. If reading in or copying, @@ -5778,16 +5778,16 @@ return RETURN_VALUE_REGISTER_CONVENTION; } #if 0 - else if (TYPE_CODE (type) == TYPE_CODE_STRUCT - && TYPE_NFIELDS (type) <= 2 - && TYPE_NFIELDS (type) >= 1 - && ((TYPE_NFIELDS (type) == 1 - && (TYPE_CODE (TYPE_FIELD_TYPE (type, 0)) + else if (type->code () == TYPE_CODE_STRUCT + && type->num_fields () <= 2 + && type->num_fields () >= 1 + && ((type->num_fields () == 1 + && (TYPE_CODE (type->field (0).type ()) == TYPE_CODE_FLT)) - || (TYPE_NFIELDS (type) == 2 - && (TYPE_CODE (TYPE_FIELD_TYPE (type, 0)) + || (type->num_fields () == 2 + && (TYPE_CODE (type->field (0).type ()) == TYPE_CODE_FLT) - && (TYPE_CODE (TYPE_FIELD_TYPE (type, 1)) + && (TYPE_CODE (type->field (1).type ()) == TYPE_CODE_FLT))) && tdep->mips_fpu_type != MIPS_FPU_NONE) { @@ -5797,16 +5797,16 @@ int regnum; int field; for (field = 0, regnum = mips_regnum (gdbarch)->fp0; - field < TYPE_NFIELDS (type); field++, regnum += 2) + field < type->num_fields (); field++, regnum += 2) { - int offset = (FIELD_BITPOS (TYPE_FIELDS (type)[field]) + int offset = (FIELD_BITPOS (type->fields ()[field]) / TARGET_CHAR_BIT); if (mips_debug) fprintf_unfiltered (gdb_stderr, "Return float struct+%d\n", offset); mips_xfer_register (gdbarch, regcache, gdbarch_num_regs (gdbarch) + regnum, - TYPE_LENGTH (TYPE_FIELD_TYPE (type, field)), + TYPE_LENGTH (type->field (field).type ()), gdbarch_byte_order (gdbarch), readbuf, writebuf, offset); } @@ -5814,8 +5814,8 @@ } #endif #if 0 - else if (TYPE_CODE (type) == TYPE_CODE_STRUCT - || TYPE_CODE (type) == TYPE_CODE_UNION) + else if (type->code () == TYPE_CODE_STRUCT + || type->code () == TYPE_CODE_UNION) { /* A structure or union. Extract the left justified value, regardless of the byte order. I.e. DO NOT USE @@ -5941,7 +5941,7 @@ struct value *arg = args[argnum]; struct type *arg_type = check_typedef (value_type (arg)); int len = TYPE_LENGTH (arg_type); - enum type_code typecode = TYPE_CODE (arg_type); + enum type_code typecode = arg_type->code (); if (mips_debug) fprintf_unfiltered (gdb_stdlog, @@ -6109,11 +6109,11 @@ enum mips_fval_reg fval_reg; fval_reg = readbuf ? mips16 ? mips_fval_gpr : mips_fval_fpr : mips_fval_both; - if (TYPE_CODE (type) == TYPE_CODE_STRUCT - || TYPE_CODE (type) == TYPE_CODE_UNION - || TYPE_CODE (type) == TYPE_CODE_ARRAY) + if (type->code () == TYPE_CODE_STRUCT + || type->code () == TYPE_CODE_UNION + || type->code () == TYPE_CODE_ARRAY) return RETURN_VALUE_STRUCT_CONVENTION; - else if (fp_register_arg_p (gdbarch, TYPE_CODE (type), type)) + else if (fp_register_arg_p (gdbarch, type->code (), type)) { /* A floating-point value. If reading in or copying, then we get it from/put it to FP0 for standard MIPS code or GPR2 for MIPS16 code. @@ -6373,10 +6373,7 @@ fprintf_filtered (file, ": "); get_formatted_print_options (&opts, 'x'); - val_print_scalar_formatted (value_type (val), - value_embedded_offset (val), - val, - &opts, 0, file); + value_print_scalar_formatted (val, &opts, 0, file); } /* Print IEEE exception condition bits in FLAGS. */ @@ -6880,23 +6877,6 @@ return mips32_stack_frame_destroyed_p (gdbarch, pc); } -/* Root of all "set mips "/"show mips " commands. This will eventually be - used for all MIPS-specific commands. */ - -static void -show_mips_command (const char *args, int from_tty) -{ - help_list (showmipscmdlist, "show mips ", all_commands, gdb_stdout); -} - -static void -set_mips_command (const char *args, int from_tty) -{ - printf_unfiltered - ("\"set mips\" must be followed by an appropriate subcommand.\n"); - help_list (setmipscmdlist, "set mips ", all_commands, gdb_stdout); -} - /* Commands to show/set the MIPS FPU type. */ static void @@ -6937,14 +6917,6 @@ static void -set_mipsfpu_command (const char *args, int from_tty) -{ - printf_unfiltered ("\"set mipsfpu\" must be followed by \"double\", " - "\"single\",\"none\" or \"auto\".\n"); - show_mipsfpu_command (args, from_tty); -} - -static void set_mipsfpu_single_command (const char *args, int from_tty) { struct gdbarch_info info; @@ -8971,8 +8943,9 @@ mips_fpu_type_str (MIPS_FPU_TYPE (gdbarch))); } +void _initialize_mips_tdep (); void -_initialize_mips_tdep (void) +_initialize_mips_tdep () { static struct cmd_list_element *mipsfpulist = NULL; @@ -8992,13 +8965,13 @@ set_tdesc_property (mips_tdesc_gp64, PROPERTY_GP64, ""); /* Add root prefix command for all "set mips"/"show mips" commands. */ - add_prefix_cmd ("mips", no_class, set_mips_command, - _("Various MIPS specific commands."), - &setmipscmdlist, "set mips ", 0, &setlist); - - add_prefix_cmd ("mips", no_class, show_mips_command, - _("Various MIPS specific commands."), - &showmipscmdlist, "show mips ", 0, &showlist); + add_basic_prefix_cmd ("mips", no_class, + _("Various MIPS specific commands."), + &setmipscmdlist, "set mips ", 0, &setlist); + + add_show_prefix_cmd ("mips", no_class, + _("Various MIPS specific commands."), + &showmipscmdlist, "show mips ", 0, &showlist); /* Allow the user to override the ABI. */ add_setshow_enum_cmd ("abi", class_obscure, mips_abi_strings, @@ -9037,9 +9010,9 @@ /* Let the user turn off floating point and set the fence post for heuristic_proc_start. */ - add_prefix_cmd ("mipsfpu", class_support, set_mipsfpu_command, - _("Set use of MIPS floating-point coprocessor."), - &mipsfpulist, "set mipsfpu ", 0, &setlist); + add_basic_prefix_cmd ("mipsfpu", class_support, + _("Set use of MIPS floating-point coprocessor."), + &mipsfpulist, "set mipsfpu ", 0, &setlist); add_cmd ("single", class_support, set_mipsfpu_single_command, _("Select single-precision MIPS floating-point coprocessor."), &mipsfpulist); diff -Nru gdb-9.1/gdb/mips-tdep.h gdb-10.2/gdb/mips-tdep.h --- gdb-9.1/gdb/mips-tdep.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/mips-tdep.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent header for the MIPS architecture, for GDB, the GNU Debugger. - Copyright (C) 2002-2020 Free Software Foundation, Inc. + Copyright (C) 2002-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -162,15 +162,15 @@ /* Tell if the program counter value in MEMADDR is in a standard MIPS function. */ -extern int mips_pc_is_mips (bfd_vma memaddr); +extern int mips_pc_is_mips (CORE_ADDR memaddr); /* Tell if the program counter value in MEMADDR is in a MIPS16 function. */ -extern int mips_pc_is_mips16 (struct gdbarch *gdbarch, bfd_vma memaddr); +extern int mips_pc_is_mips16 (struct gdbarch *gdbarch, CORE_ADDR memaddr); /* Tell if the program counter value in MEMADDR is in a microMIPS function. */ -extern int mips_pc_is_micromips (struct gdbarch *gdbarch, bfd_vma memaddr); +extern int mips_pc_is_micromips (struct gdbarch *gdbarch, CORE_ADDR memaddr); /* Return the currently configured (or set) saved register size. */ extern unsigned int mips_abi_regsize (struct gdbarch *gdbarch); diff -Nru gdb-9.1/gdb/mn10300-linux-tdep.c gdb-10.2/gdb/mn10300-linux-tdep.c --- gdb-9.1/gdb/mn10300-linux-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/mn10300-linux-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for the Matsushita MN10300 for GDB, the GNU debugger. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -715,8 +715,9 @@ tramp_frame_prepend_unwinder (gdbarch, &am33_linux_rt_sigframe); } +void _initialize_mn10300_linux_tdep (); void -_initialize_mn10300_linux_tdep (void) +_initialize_mn10300_linux_tdep () { gdbarch_register_osabi (bfd_arch_mn10300, 0, GDB_OSABI_LINUX, am33_linux_init_osabi); diff -Nru gdb-9.1/gdb/mn10300-tdep.c gdb-10.2/gdb/mn10300-tdep.c --- gdb-9.1/gdb/mn10300-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/mn10300-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for the Matsushita MN10300 for GDB, the GNU debugger. - Copyright (C) 1996-2020 Free Software Foundation, Inc. + Copyright (C) 1996-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -28,7 +28,7 @@ #include "frame-unwind.h" #include "frame-base.h" #include "symtab.h" -#include "dwarf2-frame.h" +#include "dwarf2/frame.h" #include "osabi.h" #include "infcall.h" #include "prologue-value.h" @@ -88,7 +88,7 @@ { int i, align = 1; - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_INT: case TYPE_CODE_ENUM: @@ -107,9 +107,9 @@ case TYPE_CODE_STRUCT: case TYPE_CODE_UNION: - for (i = 0; i < TYPE_NFIELDS (type); i++) + for (i = 0; i < type->num_fields (); i++) { - int falign = mn10300_type_align (TYPE_FIELD_TYPE (type, i)); + int falign = mn10300_type_align (type->field (i).type ()); while (align < falign) align <<= 1; } @@ -137,14 +137,14 @@ if (TYPE_LENGTH (type) > 8) return 1; - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_STRUCT: case TYPE_CODE_UNION: /* Structures with a single field are handled as the field itself. */ - if (TYPE_NFIELDS (type) == 1) - return mn10300_use_struct_convention (TYPE_FIELD_TYPE (type, 0)); + if (type->num_fields () == 1) + return mn10300_use_struct_convention (type->field (0).type ()); /* Structures with word or double-word size are passed in memory, as long as they require at least word alignment. */ @@ -174,7 +174,7 @@ int len = TYPE_LENGTH (type); int reg, regsz; - if (TYPE_CODE (type) == TYPE_CODE_PTR) + if (type->code () == TYPE_CODE_PTR) reg = 4; else reg = 0; @@ -202,7 +202,7 @@ int len = TYPE_LENGTH (type); int reg, regsz; - if (TYPE_CODE (type) == TYPE_CODE_PTR) + if (type->code () == TYPE_CODE_PTR) reg = 4; else reg = 0; @@ -1208,7 +1208,7 @@ for (argnum = 0; argnum < nargs; argnum++) { /* FIXME what about structs? Unions? */ - if (TYPE_CODE (value_type (*args)) == TYPE_CODE_STRUCT + if (value_type (*args)->code () == TYPE_CODE_STRUCT && TYPE_LENGTH (value_type (*args)) > 8) { /* Change to pointer-to-type. */ @@ -1417,8 +1417,9 @@ tdep->am33_mode); } +void _initialize_mn10300_tdep (); void -_initialize_mn10300_tdep (void) +_initialize_mn10300_tdep () { gdbarch_register (bfd_arch_mn10300, mn10300_gdbarch_init, mn10300_dump_tdep); } diff -Nru gdb-9.1/gdb/mn10300-tdep.h gdb-10.2/gdb/mn10300-tdep.h --- gdb-9.1/gdb/mn10300-tdep.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/mn10300-tdep.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent interface for Matsushita MN10300 for GDB, the GNU debugger. - Copyright (C) 1996-2020 Free Software Foundation, Inc. + Copyright (C) 1996-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/moxie-tdep.c gdb-10.2/gdb/moxie-tdep.c --- gdb-9.1/gdb/moxie-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/moxie-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for Moxie. - Copyright (C) 2009-2020 Free Software Foundation, Inc. + Copyright (C) 2009-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -232,7 +232,7 @@ sym = lookup_symbol (func_name, NULL, VAR_DOMAIN, NULL).symbol; /* Don't use line number debug info for assembly source files. */ - if (sym && SYMBOL_LANGUAGE (sym) != language_asm) + if (sym && sym->language () != language_asm) { sal = find_pc_line (func_addr, 0); if (sal.end && sal.end < func_end) @@ -1103,8 +1103,9 @@ /* Register this machine's init routine. */ +void _initialize_moxie_tdep (); void -_initialize_moxie_tdep (void) +_initialize_moxie_tdep () { register_gdbarch_init (bfd_arch_moxie, moxie_gdbarch_init); } diff -Nru gdb-9.1/gdb/moxie-tdep.h gdb-10.2/gdb/moxie-tdep.h --- gdb-9.1/gdb/moxie-tdep.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/moxie-tdep.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for Moxie - Copyright (C) 2009-2020 Free Software Foundation, Inc. + Copyright (C) 2009-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/msp430-tdep.c gdb-10.2/gdb/msp430-tdep.c --- gdb-9.1/gdb/msp430-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/msp430-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,7 +1,7 @@ /* Target-dependent code for the Texas Instruments MSP430 for GDB, the GNU debugger. - Copyright (C) 2012-2020 Free Software Foundation, Inc. + Copyright (C) 2012-2021 Free Software Foundation, Inc. Contributed by Red Hat, Inc. @@ -32,7 +32,7 @@ #include "frame-base.h" #include "value.h" #include "gdbcore.h" -#include "dwarf2-frame.h" +#include "dwarf2/frame.h" #include "reggroups.h" #include "elf/msp430.h" @@ -570,8 +570,8 @@ int code_model = gdbarch_tdep (gdbarch)->code_model; if (TYPE_LENGTH (valtype) > 8 - || TYPE_CODE (valtype) == TYPE_CODE_STRUCT - || TYPE_CODE (valtype) == TYPE_CODE_UNION) + || valtype->code () == TYPE_CODE_STRUCT + || valtype->code () == TYPE_CODE_UNION) return RETURN_VALUE_STRUCT_CONVENTION; if (readbuf) @@ -585,7 +585,7 @@ int size = 2; if (code_model == MSP_LARGE_CODE_MODEL - && TYPE_CODE (valtype) == TYPE_CODE_PTR) + && valtype->code () == TYPE_CODE_PTR) { size = 4; } @@ -609,7 +609,7 @@ int size = 2; if (code_model == MSP_LARGE_CODE_MODEL - && TYPE_CODE (valtype) == TYPE_CODE_PTR) + && valtype->code () == TYPE_CODE_PTR) { size = 4; } @@ -652,12 +652,12 @@ struct type *func_type = value_type (function); /* Dereference function pointer types. */ - while (TYPE_CODE (func_type) == TYPE_CODE_PTR) + while (func_type->code () == TYPE_CODE_PTR) func_type = TYPE_TARGET_TYPE (func_type); /* The end result had better be a function or a method. */ - gdb_assert (TYPE_CODE (func_type) == TYPE_CODE_FUNC - || TYPE_CODE (func_type) == TYPE_CODE_METHOD); + gdb_assert (func_type->code () == TYPE_CODE_FUNC + || func_type->code () == TYPE_CODE_METHOD); /* We make two passes; the first does the stack allocation, the second actually stores the arguments. */ @@ -691,8 +691,8 @@ current_arg_on_stack = 0; - if (TYPE_CODE (arg_type) == TYPE_CODE_STRUCT - || TYPE_CODE (arg_type) == TYPE_CODE_UNION) + if (arg_type->code () == TYPE_CODE_STRUCT + || arg_type->code () == TYPE_CODE_UNION) { /* Aggregates of any size are passed by reference. */ store_unsigned_integer (struct_addr_buf, 4, byte_order, @@ -723,10 +723,10 @@ int size = 2; if (code_model == MSP_LARGE_CODE_MODEL - && (TYPE_CODE (arg_type) == TYPE_CODE_PTR + && (arg_type->code () == TYPE_CODE_PTR || TYPE_IS_REFERENCE (arg_type) - || TYPE_CODE (arg_type) == TYPE_CODE_STRUCT - || TYPE_CODE (arg_type) == TYPE_CODE_UNION)) + || arg_type->code () == TYPE_CODE_STRUCT + || arg_type->code () == TYPE_CODE_UNION)) { /* When using the large memory model, pointer, reference, struct, and union arguments are @@ -986,8 +986,9 @@ /* Register the initialization routine. */ +void _initialize_msp430_tdep (); void -_initialize_msp430_tdep (void) +_initialize_msp430_tdep () { register_gdbarch_init (bfd_arch_msp430, msp430_gdbarch_init); } diff -Nru gdb-9.1/gdb/namespace.c gdb-10.2/gdb/namespace.c --- gdb-9.1/gdb/namespace.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/namespace.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Code dealing with "using" directives for GDB. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/namespace.h gdb-10.2/gdb/namespace.h --- gdb-9.1/gdb/namespace.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/namespace.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Code dealing with "using" directives for GDB. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/nat/aarch64-linux.c gdb-10.2/gdb/nat/aarch64-linux.c --- gdb-9.1/gdb/nat/aarch64-linux.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/nat/aarch64-linux.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2009-2020 Free Software Foundation, Inc. +/* Copyright (C) 2009-2021 Free Software Foundation, Inc. Contributed by ARM Ltd. This file is part of GDB. diff -Nru gdb-9.1/gdb/nat/aarch64-linux.h gdb-10.2/gdb/nat/aarch64-linux.h --- gdb-9.1/gdb/nat/aarch64-linux.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/nat/aarch64-linux.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2009-2020 Free Software Foundation, Inc. +/* Copyright (C) 2009-2021 Free Software Foundation, Inc. Contributed by ARM Ltd. This file is part of GDB. diff -Nru gdb-9.1/gdb/nat/aarch64-linux-hw-point.c gdb-10.2/gdb/nat/aarch64-linux-hw-point.c --- gdb-9.1/gdb/nat/aarch64-linux-hw-point.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/nat/aarch64-linux-hw-point.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2009-2020 Free Software Foundation, Inc. +/* Copyright (C) 2009-2021 Free Software Foundation, Inc. Contributed by ARM Ltd. This file is part of GDB. @@ -23,8 +23,8 @@ #include "aarch64-linux-hw-point.h" #include <sys/uio.h> -#include <asm/ptrace.h> #include <sys/ptrace.h> +#include <asm/ptrace.h> #include <elf.h> /* Number of hardware breakpoints/watchpoints the target supports. diff -Nru gdb-9.1/gdb/nat/aarch64-linux-hw-point.h gdb-10.2/gdb/nat/aarch64-linux-hw-point.h --- gdb-9.1/gdb/nat/aarch64-linux-hw-point.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/nat/aarch64-linux-hw-point.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2009-2020 Free Software Foundation, Inc. +/* Copyright (C) 2009-2021 Free Software Foundation, Inc. Contributed by ARM Ltd. This file is part of GDB. diff -Nru gdb-9.1/gdb/nat/aarch64-sve-linux-ptrace.c gdb-10.2/gdb/nat/aarch64-sve-linux-ptrace.c --- gdb-9.1/gdb/nat/aarch64-sve-linux-ptrace.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/nat/aarch64-sve-linux-ptrace.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Common target dependent for AArch64 systems. - Copyright (C) 2018-2020 Free Software Foundation, Inc. + Copyright (C) 2018-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -92,11 +92,26 @@ bool aarch64_sve_set_vq (int tid, struct reg_buffer_common *reg_buf) { + uint64_t reg_vg = 0; + + /* The VG register may not be valid if we've not collected any value yet. + This can happen, for example, if we're restoring the regcache after an + inferior function call, and the VG register comes after the Z + registers. */ if (reg_buf->get_register_status (AARCH64_SVE_VG_REGNUM) != REG_VALID) - return false; + { + /* If vg is not available yet, fetch it from ptrace. The VG value from + ptrace is likely the correct one. */ + uint64_t vq = aarch64_sve_get_vq (tid); - uint64_t reg_vg = 0; - reg_buf->raw_collect (AARCH64_SVE_VG_REGNUM, ®_vg); + /* If something went wrong, just bail out. */ + if (vq == 0) + return false; + + reg_vg = sve_vg_from_vq (vq); + } + else + reg_buf->raw_collect (AARCH64_SVE_VG_REGNUM, ®_vg); return aarch64_sve_set_vq (tid, sve_vq_from_vg (reg_vg)); } diff -Nru gdb-9.1/gdb/nat/aarch64-sve-linux-ptrace.h gdb-10.2/gdb/nat/aarch64-sve-linux-ptrace.h --- gdb-9.1/gdb/nat/aarch64-sve-linux-ptrace.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/nat/aarch64-sve-linux-ptrace.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Common target dependent for AArch64 systems. - Copyright (C) 2018-2020 Free Software Foundation, Inc. + Copyright (C) 2018-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/nat/aarch64-sve-linux-sigcontext.h gdb-10.2/gdb/nat/aarch64-sve-linux-sigcontext.h --- gdb-9.1/gdb/nat/aarch64-sve-linux-sigcontext.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/nat/aarch64-sve-linux-sigcontext.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2018-2020 Free Software Foundation, Inc. +/* Copyright (C) 2018-2021 Free Software Foundation, Inc. Contributed by Arm Ltd. This file is part of GDB. @@ -166,7 +166,7 @@ /* Offset from the start of struct user_sve_header to the register data */ #define SVE_PT_REGS_OFFSET \ - ((sizeof(struct sve_context) + (SVE_VQ_BYTES - 1)) \ + ((sizeof(struct user_sve_header) + (SVE_VQ_BYTES - 1)) \ / SVE_VQ_BYTES * SVE_VQ_BYTES) /* diff -Nru gdb-9.1/gdb/nat/amd64-linux-siginfo.c gdb-10.2/gdb/nat/amd64-linux-siginfo.c --- gdb-9.1/gdb/nat/amd64-linux-siginfo.c 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/nat/amd64-linux-siginfo.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Low-level siginfo manipulation for amd64. - Copyright (C) 2002-2020 Free Software Foundation, Inc. + Copyright (C) 2002-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -17,8 +17,8 @@ You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ -#include <signal.h> #include "gdbsupport/common-defs.h" +#include <signal.h> #include "amd64-linux-siginfo.h" #define GDB_SI_SIZE 128 diff -Nru gdb-9.1/gdb/nat/amd64-linux-siginfo.h gdb-10.2/gdb/nat/amd64-linux-siginfo.h --- gdb-9.1/gdb/nat/amd64-linux-siginfo.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/nat/amd64-linux-siginfo.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Low-level siginfo manipulation for amd64. - Copyright (C) 2016-2020 Free Software Foundation, Inc. + Copyright (C) 2016-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/nat/fork-inferior.c gdb-10.2/gdb/nat/fork-inferior.c --- gdb-9.1/gdb/nat/fork-inferior.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/nat/fork-inferior.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Fork a Unix child process, and set up to debug it, for GDB and GDBserver. - Copyright (C) 1990-2020 Free Software Foundation, Inc. + Copyright (C) 1990-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -267,7 +267,8 @@ pid_t fork_inferior (const char *exec_file_arg, const std::string &allargs, char **env, void (*traceme_fun) (), - void (*init_trace_fun) (int), void (*pre_trace_fun) (), + gdb::function_view<void (int)> init_trace_fun, + void (*pre_trace_fun) (), const char *shell_file_arg, void (*exec_fun)(const char *file, char * const *argv, char * const *env)) @@ -439,7 +440,7 @@ initialize anything target-vector-specific that needs initializing. */ if (init_trace_fun) - (*init_trace_fun) (pid); + init_trace_fun (pid); /* We are now in the child process of interest, having exec'd the correct program, and are poised at the first instruction of the @@ -450,7 +451,7 @@ /* See nat/fork-inferior.h. */ ptid_t -startup_inferior (pid_t pid, int ntraps, +startup_inferior (process_stratum_target *proc_target, pid_t pid, int ntraps, struct target_waitstatus *last_waitstatus, ptid_t *last_ptid) { @@ -502,7 +503,7 @@ case TARGET_WAITKIND_SYSCALL_ENTRY: case TARGET_WAITKIND_SYSCALL_RETURN: /* Ignore gracefully during startup of the inferior. */ - switch_to_thread (event_ptid); + switch_to_thread (proc_target, event_ptid); break; case TARGET_WAITKIND_SIGNALLED: @@ -525,14 +526,17 @@ case TARGET_WAITKIND_EXECD: /* Handle EXEC signals as if they were SIGTRAP signals. */ - xfree (ws.value.execd_pathname); + /* Free the exec'ed pathname, but only if this isn't the + waitstatus we are returning to the caller. */ + if (pending_execs != 1) + xfree (ws.value.execd_pathname); resume_signal = GDB_SIGNAL_TRAP; - switch_to_thread (event_ptid); + switch_to_thread (proc_target, event_ptid); break; case TARGET_WAITKIND_STOPPED: resume_signal = ws.value.sig; - switch_to_thread (event_ptid); + switch_to_thread (proc_target, event_ptid); break; } diff -Nru gdb-9.1/gdb/nat/fork-inferior.h gdb-10.2/gdb/nat/fork-inferior.h --- gdb-9.1/gdb/nat/fork-inferior.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/nat/fork-inferior.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Functions and data responsible for forking the inferior process. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -21,6 +21,9 @@ #define NAT_FORK_INFERIOR_H #include <string> +#include "gdbsupport/function-view.h" + +struct process_stratum_target; /* Number of traps that happen between exec'ing the shell to run an inferior and when we finally get to the inferior code, not counting @@ -40,7 +43,7 @@ extern pid_t fork_inferior (const char *exec_file_arg, const std::string &allargs, char **env, void (*traceme_fun) (), - void (*init_trace_fun) (int), + gdb::function_view<void (int)> init_trace_fun, void (*pre_trace_fun) (), const char *shell_file_arg, void (*exec_fun) (const char *file, @@ -50,7 +53,8 @@ /* Accept NTRAPS traps from the inferior. Return the ptid of the inferior being started. */ -extern ptid_t startup_inferior (pid_t pid, int ntraps, +extern ptid_t startup_inferior (process_stratum_target *proc_target, + pid_t pid, int ntraps, struct target_waitstatus *mystatus, ptid_t *myptid); diff -Nru gdb-9.1/gdb/nat/gdb_ptrace.h gdb-10.2/gdb/nat/gdb_ptrace.h --- gdb-9.1/gdb/nat/gdb_ptrace.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/nat/gdb_ptrace.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Portable <sys/ptrace.h> - Copyright (C) 2004-2020 Free Software Foundation, Inc. + Copyright (C) 2004-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -121,14 +121,6 @@ # endif #endif -/* Some systems, in particular DEC OSF/1, Digital Unix, Compaq Tru64 - or whatever it's called these days, don't provide a prototype for - ptrace. Provide one to silence compiler warnings. */ - -#ifndef HAVE_DECL_PTRACE -extern PTRACE_TYPE_RET ptrace(); -#endif - /* Some systems, at least AIX and HP-UX have a ptrace with five arguments. Since we never use the fifth argument, define a ptrace macro that calls the real ptrace with the last argument set to diff -Nru gdb-9.1/gdb/nat/gdb_thread_db.h gdb-10.2/gdb/nat/gdb_thread_db.h --- gdb-9.1/gdb/nat/gdb_thread_db.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/nat/gdb_thread_db.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2000-2020 Free Software Foundation, Inc. +/* Copyright (C) 2000-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/nat/linux-btrace.c gdb-10.2/gdb/nat/linux-btrace.c --- gdb-9.1/gdb/nat/linux-btrace.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/nat/linux-btrace.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Linux-dependent part of branch trace support for GDB, and GDBserver. - Copyright (C) 2013-2020 Free Software Foundation, Inc. + Copyright (C) 2013-2021 Free Software Foundation, Inc. Contributed by Intel Corp. <markus.t.metzger@intel.com> @@ -90,6 +90,9 @@ cpu.model += (cpuid >> 12) & 0xf0; } } + else if (ebx == signature_AMD_ebx && ecx == signature_AMD_ecx + && edx == signature_AMD_edx) + cpu.vendor = CV_AMD; } return cpu; @@ -406,6 +409,9 @@ case CV_INTEL: return intel_supports_bts (&cpu); + + case CV_AMD: + return 0; } } @@ -889,7 +895,7 @@ return BTRACE_ERR_NONE; } - internal_error (__FILE__, __LINE__, _("Unkown btrace read type.")); + internal_error (__FILE__, __LINE__, _("Unknown btrace read type.")); } /* See linux-btrace.h. */ diff -Nru gdb-9.1/gdb/nat/linux-btrace.h gdb-10.2/gdb/nat/linux-btrace.h --- gdb-9.1/gdb/nat/linux-btrace.h 2020-02-08 12:49:29.000000000 +0000 +++ gdb-10.2/gdb/nat/linux-btrace.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Linux-dependent part of branch trace support for GDB, and GDBserver. - Copyright (C) 2013-2020 Free Software Foundation, Inc. + Copyright (C) 2013-2021 Free Software Foundation, Inc. Contributed by Intel Corp. <markus.t.metzger@intel.com> diff -Nru gdb-9.1/gdb/nat/linux-namespaces.c gdb-10.2/gdb/nat/linux-namespaces.c --- gdb-9.1/gdb/nat/linux-namespaces.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/nat/linux-namespaces.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Linux namespaces(7) support. - Copyright (C) 2015-2020 Free Software Foundation, Inc. + Copyright (C) 2015-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/nat/linux-namespaces.h gdb-10.2/gdb/nat/linux-namespaces.h --- gdb-9.1/gdb/nat/linux-namespaces.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/nat/linux-namespaces.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Linux namespaces(7) support. - Copyright (C) 2015-2020 Free Software Foundation, Inc. + Copyright (C) 2015-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/nat/linux-nat.h gdb-10.2/gdb/nat/linux-nat.h --- gdb-9.1/gdb/nat/linux-nat.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/nat/linux-nat.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Code for native debugging support for GNU/Linux (LWP layer). - Copyright (C) 2000-2020 Free Software Foundation, Inc. + Copyright (C) 2000-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/nat/linux-osdata.c gdb-10.2/gdb/nat/linux-osdata.c --- gdb-9.1/gdb/nat/linux-osdata.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/nat/linux-osdata.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Linux-specific functions to retrieve OS data. - Copyright (C) 2009-2020 Free Software Foundation, Inc. + Copyright (C) 2009-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/nat/linux-osdata.h gdb-10.2/gdb/nat/linux-osdata.h --- gdb-9.1/gdb/nat/linux-osdata.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/nat/linux-osdata.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Linux-specific functions to retrieve OS data. - Copyright (C) 2009-2020 Free Software Foundation, Inc. + Copyright (C) 2009-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/nat/linux-personality.c gdb-10.2/gdb/nat/linux-personality.c --- gdb-9.1/gdb/nat/linux-personality.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/nat/linux-personality.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Disable address space randomization based on inferior personality. - Copyright (C) 2008-2020 Free Software Foundation, Inc. + Copyright (C) 2008-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/nat/linux-personality.h gdb-10.2/gdb/nat/linux-personality.h --- gdb-9.1/gdb/nat/linux-personality.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/nat/linux-personality.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Disable address space randomization based on inferior personality. - Copyright (C) 2008-2020 Free Software Foundation, Inc. + Copyright (C) 2008-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/nat/linux-procfs.c gdb-10.2/gdb/nat/linux-procfs.c --- gdb-9.1/gdb/nat/linux-procfs.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/nat/linux-procfs.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Linux-specific PROCFS manipulation routines. - Copyright (C) 2009-2020 Free Software Foundation, Inc. + Copyright (C) 2009-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/nat/linux-procfs.h gdb-10.2/gdb/nat/linux-procfs.h --- gdb-9.1/gdb/nat/linux-procfs.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/nat/linux-procfs.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Linux-specific PROCFS manipulation routines. - Copyright (C) 2011-2020 Free Software Foundation, Inc. + Copyright (C) 2011-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/nat/linux-ptrace.c gdb-10.2/gdb/nat/linux-ptrace.c --- gdb-9.1/gdb/nat/linux-ptrace.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/nat/linux-ptrace.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Linux-specific ptrace manipulation routines. - Copyright (C) 2012-2020 Free Software Foundation, Inc. + Copyright (C) 2012-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/nat/linux-ptrace.h gdb-10.2/gdb/nat/linux-ptrace.h --- gdb-9.1/gdb/nat/linux-ptrace.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/nat/linux-ptrace.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2011-2020 Free Software Foundation, Inc. +/* Copyright (C) 2011-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/nat/linux-waitpid.c gdb-10.2/gdb/nat/linux-waitpid.c --- gdb-9.1/gdb/nat/linux-waitpid.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/nat/linux-waitpid.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Wrapper implementation for waitpid for GNU/Linux (LWP layer). - Copyright (C) 2001-2020 Free Software Foundation, Inc. + Copyright (C) 2001-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/nat/linux-waitpid.h gdb-10.2/gdb/nat/linux-waitpid.h --- gdb-9.1/gdb/nat/linux-waitpid.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/nat/linux-waitpid.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Wrapper for waitpid for GNU/Linux (LWP layer). - Copyright (C) 2000-2020 Free Software Foundation, Inc. + Copyright (C) 2000-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/nat/mips-linux-watch.c gdb-10.2/gdb/nat/mips-linux-watch.c --- gdb-9.1/gdb/nat/mips-linux-watch.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/nat/mips-linux-watch.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2009-2020 Free Software Foundation, Inc. +/* Copyright (C) 2009-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/nat/mips-linux-watch.h gdb-10.2/gdb/nat/mips-linux-watch.h --- gdb-9.1/gdb/nat/mips-linux-watch.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/nat/mips-linux-watch.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2009-2020 Free Software Foundation, Inc. +/* Copyright (C) 2009-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/nat/netbsd-nat.c gdb-10.2/gdb/nat/netbsd-nat.c --- gdb-9.1/gdb/nat/netbsd-nat.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/nat/netbsd-nat.c 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,213 @@ +/* Internal interfaces for the NetBSD code. + + Copyright (C) 2006-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "gdbsupport/common-defs.h" +#include "nat/netbsd-nat.h" +#include "gdbsupport/common-debug.h" + +#include <sys/types.h> +#include <sys/ptrace.h> +#include <sys/sysctl.h> + +#include <cstring> + +#include "gdbsupport/function-view.h" + +namespace netbsd_nat +{ + +/* See netbsd-nat.h. */ + +const char * +pid_to_exec_file (pid_t pid) +{ + static char buf[PATH_MAX]; + int mib[4] = {CTL_KERN, KERN_PROC_ARGS, pid, KERN_PROC_PATHNAME}; + size_t buflen = sizeof (buf); + if (::sysctl (mib, ARRAY_SIZE (mib), buf, &buflen, NULL, 0) != 0) + return NULL; + return buf; +} + +/* Generic thread (LWP) lister within a specified PID. The CALLBACK + parameters is a C++ function that is called for each detected thread. + When the CALLBACK function returns true, the iteration is interrupted. + + This function assumes internally that the queried process is stopped + and the number of threads does not change between two sysctl () calls. */ + +static bool +netbsd_thread_lister (const pid_t pid, + gdb::function_view<bool (const struct kinfo_lwp *)> + callback) +{ + int mib[5] = {CTL_KERN, KERN_LWP, pid, sizeof (struct kinfo_lwp), 0}; + size_t size; + + if (sysctl (mib, ARRAY_SIZE (mib), NULL, &size, NULL, 0) == -1 || size == 0) + perror_with_name (("sysctl")); + + mib[4] = size / sizeof (size_t); + + gdb::unique_xmalloc_ptr<struct kinfo_lwp[]> kl + ((struct kinfo_lwp *) xcalloc (size, 1)); + + if (sysctl (mib, ARRAY_SIZE (mib), kl.get (), &size, NULL, 0) == -1 + || size == 0) + perror_with_name (("sysctl")); + + for (size_t i = 0; i < size / sizeof (struct kinfo_lwp); i++) + { + struct kinfo_lwp *l = &kl[i]; + + /* Return true if the specified thread is alive. */ + auto lwp_alive + = [] (struct kinfo_lwp *lwp) + { + switch (lwp->l_stat) + { + case LSSLEEP: + case LSRUN: + case LSONPROC: + case LSSTOP: + case LSSUSPENDED: + return true; + default: + return false; + } + }; + + /* Ignore embryonic or demised threads. */ + if (!lwp_alive (l)) + continue; + + if (callback (l)) + return true; + } + + return false; +} + +/* See netbsd-nat.h. */ + +bool +thread_alive (ptid_t ptid) +{ + pid_t pid = ptid.pid (); + lwpid_t lwp = ptid.lwp (); + + auto fn + = [=] (const struct kinfo_lwp *kl) + { + return kl->l_lid == lwp; + }; + + return netbsd_thread_lister (pid, fn); +} + +/* See netbsd-nat.h. */ + +const char * +thread_name (ptid_t ptid) +{ + pid_t pid = ptid.pid (); + lwpid_t lwp = ptid.lwp (); + + static char buf[KI_LNAMELEN] = {}; + + auto fn + = [=] (const struct kinfo_lwp *kl) + { + if (kl->l_lid == lwp) + { + xsnprintf (buf, sizeof buf, "%s", kl->l_name); + return true; + } + return false; + }; + + if (netbsd_thread_lister (pid, fn)) + return buf; + else + return NULL; +} + +/* See netbsd-nat.h. */ + +void +for_each_thread (pid_t pid, gdb::function_view<void (ptid_t)> callback) +{ + auto fn + = [=, &callback] (const struct kinfo_lwp *kl) + { + ptid_t ptid = ptid_t (pid, kl->l_lid, 0); + callback (ptid); + return false; + }; + + netbsd_thread_lister (pid, fn); +} + +/* See netbsd-nat.h. */ + +void +enable_proc_events (pid_t pid) +{ + int events; + + if (ptrace (PT_GET_EVENT_MASK, pid, &events, sizeof (events)) == -1) + perror_with_name (("ptrace")); + + events |= PTRACE_LWP_CREATE; + events |= PTRACE_LWP_EXIT; + + if (ptrace (PT_SET_EVENT_MASK, pid, &events, sizeof (events)) == -1) + perror_with_name (("ptrace")); +} + +/* See netbsd-nat.h. */ + +int +qxfer_siginfo (pid_t pid, const char *annex, unsigned char *readbuf, + unsigned const char *writebuf, CORE_ADDR offset, int len) +{ + ptrace_siginfo_t psi; + + if (offset > sizeof (siginfo_t)) + return -1; + + if (ptrace (PT_GET_SIGINFO, pid, &psi, sizeof (psi)) == -1) + return -1; + + if (offset + len > sizeof (siginfo_t)) + len = sizeof (siginfo_t) - offset; + + if (readbuf != NULL) + memcpy (readbuf, ((gdb_byte *) &psi.psi_siginfo) + offset, len); + else + { + memcpy (((gdb_byte *) &psi.psi_siginfo) + offset, writebuf, len); + + if (ptrace (PT_SET_SIGINFO, pid, &psi, sizeof (psi)) == -1) + return -1; + } + return len; +} + +} diff -Nru gdb-9.1/gdb/nat/netbsd-nat.h gdb-10.2/gdb/nat/netbsd-nat.h --- gdb-9.1/gdb/nat/netbsd-nat.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/nat/netbsd-nat.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,72 @@ +/* Internal interfaces for the NetBSD code. + + Copyright (C) 2006-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef NAT_NETBSD_NAT_H +#define NAT_NETBSD_NAT_H + +#include "gdbsupport/function-view.h" + +#include <unistd.h> + +namespace netbsd_nat +{ + +/* Return the executable file name of a process specified by PID. Returns the + string in a static buffer. */ + +extern const char *pid_to_exec_file (pid_t pid); + +/* Return true if PTID is still active in the inferior. */ + +extern bool thread_alive (ptid_t ptid); + +/* Return the name assigned to a thread by an application. Returns + the string in a static buffer. + + This function assumes internally that the queried process is stopped. */ + +extern const char *thread_name (ptid_t ptid); + +/* A generic thread lister within a specific PID. The CALLBACK parameter + is a C++ function that is called for each detected thread. + + This function assumes internally that the queried process is stopped. */ + +extern void for_each_thread (pid_t pid, + gdb::function_view<void (ptid_t)> callback); + +/* Enable additional event reporting in a new process specified by PID. + + This function assumes internally that the queried process is stopped and + traced. */ + +extern void enable_proc_events (pid_t pid); + +/* Implement reading and writing of inferior's siginfo_t specified by PID. + Returns -1 on failure and the number of bytes on a successful transfer. + + This function assumes internally that the queried process is stopped and + traced. */ + +extern int qxfer_siginfo (pid_t pid, const char *annex, unsigned char *readbuf, + unsigned const char *writebuf, CORE_ADDR offset, + int len); +} + +#endif diff -Nru gdb-9.1/gdb/nat/ppc-linux.c gdb-10.2/gdb/nat/ppc-linux.c --- gdb-9.1/gdb/nat/ppc-linux.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/nat/ppc-linux.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/*Copyright (C) 2015-2020 Free Software Foundation, Inc. +/*Copyright (C) 2015-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/nat/ppc-linux.h gdb-10.2/gdb/nat/ppc-linux.h --- gdb-9.1/gdb/nat/ppc-linux.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/nat/ppc-linux.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 1995-2020 Free Software Foundation, Inc. +/* Copyright (C) 1995-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/nat/riscv-linux-tdesc.c gdb-10.2/gdb/nat/riscv-linux-tdesc.c --- gdb-9.1/gdb/nat/riscv-linux-tdesc.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/nat/riscv-linux-tdesc.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,83 @@ +/* GNU/Linux/RISC-V native target description support for GDB. + Copyright (C) 2020-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "gdbsupport/common-defs.h" + +#include "gdb_proc_service.h" +#include "arch/riscv.h" +#include "elf/common.h" +#include "nat/gdb_ptrace.h" +#include "nat/riscv-linux-tdesc.h" + +#include <sys/uio.h> + +/* Work around glibc header breakage causing ELF_NFPREG not to be usable. */ +#ifndef NFPREG +# define NFPREG 33 +#endif + +/* See nat/riscv-linux-tdesc.h. */ + +struct riscv_gdbarch_features +riscv_linux_read_features (int tid) +{ + struct riscv_gdbarch_features features; + elf_fpregset_t regs; + int flen; + + /* Figuring out xlen is easy. */ + features.xlen = sizeof (elf_greg_t); + + /* Start with no f-registers. */ + features.flen = 0; + + /* How much worth of f-registers can we fetch if any? */ + for (flen = sizeof (regs.__f.__f[0]); ; flen *= 2) + { + size_t regset_size; + struct iovec iov; + + /* Regsets have a uniform slot size, so we count FSCR like + an FP data register. */ + regset_size = ELF_NFPREG * flen; + if (regset_size > sizeof (regs)) + break; + + iov.iov_base = ®s; + iov.iov_len = regset_size; + if (ptrace (PTRACE_GETREGSET, tid, NT_FPREGSET, + (PTRACE_TYPE_ARG3) &iov) == -1) + { + switch (errno) + { + case EINVAL: + continue; + case EIO: + break; + default: + perror_with_name (_("Couldn't get registers")); + break; + } + } + else + features.flen = flen; + break; + } + + return features; +} diff -Nru gdb-9.1/gdb/nat/riscv-linux-tdesc.h gdb-10.2/gdb/nat/riscv-linux-tdesc.h --- gdb-9.1/gdb/nat/riscv-linux-tdesc.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/nat/riscv-linux-tdesc.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,28 @@ +/* GNU/Linux/RISC-V native target description support for GDB. + Copyright (C) 2020-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef NAT_RISCV_LINUX_TDESC_H +#define NAT_RISCV_LINUX_TDESC_H + +#include "arch/riscv.h" + +/* Determine XLEN and FLEN for the LWP identified by TID, and return a + corresponding features object. */ +struct riscv_gdbarch_features riscv_linux_read_features (int tid); + +#endif /* NAT_RISCV_LINUX_TDESC_H */ diff -Nru gdb-9.1/gdb/nat/windows-nat.c gdb-10.2/gdb/nat/windows-nat.c --- gdb-9.1/gdb/nat/windows-nat.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/nat/windows-nat.c 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,402 @@ +/* Internal interfaces for the Windows code + Copyright (C) 1995-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "gdbsupport/common-defs.h" +#include "nat/windows-nat.h" +#include "gdbsupport/common-debug.h" + +namespace windows_nat +{ + +HANDLE current_process_handle; +DWORD current_process_id; +DWORD main_thread_id; +enum gdb_signal last_sig = GDB_SIGNAL_0; +DEBUG_EVENT current_event; + +/* The most recent event from WaitForDebugEvent. Unlike + current_event, this is guaranteed never to come from a pending + stop. This is important because only data from the most recent + event from WaitForDebugEvent can be used when calling + ContinueDebugEvent. */ +static DEBUG_EVENT last_wait_event; + +DWORD desired_stop_thread_id = -1; +std::vector<pending_stop> pending_stops; +EXCEPTION_RECORD siginfo_er; + +#ifdef __x86_64__ +bool wow64_process = false; +bool ignore_first_breakpoint = false; +#endif + +/* Note that 'debug_events' must be locally defined in the relevant + functions. */ +#define DEBUG_EVENTS(x) if (debug_events) debug_printf x + +windows_thread_info::~windows_thread_info () +{ +} + +void +windows_thread_info::suspend () +{ + if (suspended != 0) + return; + + if (SuspendThread (h) == (DWORD) -1) + { + DWORD err = GetLastError (); + + /* We get Access Denied (5) when trying to suspend + threads that Windows started on behalf of the + debuggee, usually when those threads are just + about to exit. + We can get Invalid Handle (6) if the main thread + has exited. */ + if (err != ERROR_INVALID_HANDLE && err != ERROR_ACCESS_DENIED) + warning (_("SuspendThread (tid=0x%x) failed. (winerr %u)"), + (unsigned) tid, (unsigned) err); + suspended = -1; + } + else + suspended = 1; +} + +void +windows_thread_info::resume () +{ + if (suspended > 0) + { + stopped_at_software_breakpoint = false; + + if (ResumeThread (h) == (DWORD) -1) + { + DWORD err = GetLastError (); + warning (_("warning: ResumeThread (tid=0x%x) failed. (winerr %u)"), + (unsigned) tid, (unsigned) err); + } + } + suspended = 0; +} + +const char * +get_image_name (HANDLE h, void *address, int unicode) +{ +#ifdef __CYGWIN__ + static char buf[MAX_PATH]; +#else + static char buf[(2 * MAX_PATH) + 1]; +#endif + DWORD size = unicode ? sizeof (WCHAR) : sizeof (char); + char *address_ptr; + int len = 0; + char b[2]; + SIZE_T done; + + /* Attempt to read the name of the dll that was detected. + This is documented to work only when actively debugging + a program. It will not work for attached processes. */ + if (address == NULL) + return NULL; + +#ifdef _WIN32_WCE + /* Windows CE reports the address of the image name, + instead of an address of a pointer into the image name. */ + address_ptr = address; +#else + /* See if we could read the address of a string, and that the + address isn't null. */ + if (!ReadProcessMemory (h, address, &address_ptr, + sizeof (address_ptr), &done) + || done != sizeof (address_ptr) + || !address_ptr) + return NULL; +#endif + + /* Find the length of the string. */ + while (ReadProcessMemory (h, address_ptr + len++ * size, &b, size, &done) + && (b[0] != 0 || b[size - 1] != 0) && done == size) + continue; + + if (!unicode) + ReadProcessMemory (h, address_ptr, buf, len, &done); + else + { + WCHAR *unicode_address = (WCHAR *) alloca (len * sizeof (WCHAR)); + ReadProcessMemory (h, address_ptr, unicode_address, len * sizeof (WCHAR), + &done); +#ifdef __CYGWIN__ + wcstombs (buf, unicode_address, MAX_PATH); +#else + WideCharToMultiByte (CP_ACP, 0, unicode_address, len, buf, sizeof buf, + 0, 0); +#endif + } + + return buf; +} + +/* The exception thrown by a program to tell the debugger the name of + a thread. The exception record contains an ID of a thread and a + name to give it. This exception has no documented name, but MSDN + dubs it "MS_VC_EXCEPTION" in one code example. */ +#define MS_VC_EXCEPTION 0x406d1388 + +handle_exception_result +handle_exception (struct target_waitstatus *ourstatus, bool debug_exceptions) +{ +#define DEBUG_EXCEPTION_SIMPLE(x) if (debug_exceptions) \ + debug_printf ("gdb: Target exception %s at %s\n", x, \ + host_address_to_string (\ + current_event.u.Exception.ExceptionRecord.ExceptionAddress)) + + EXCEPTION_RECORD *rec = ¤t_event.u.Exception.ExceptionRecord; + DWORD code = rec->ExceptionCode; + handle_exception_result result = HANDLE_EXCEPTION_HANDLED; + + memcpy (&siginfo_er, rec, sizeof siginfo_er); + + ourstatus->kind = TARGET_WAITKIND_STOPPED; + + /* Record the context of the current thread. */ + thread_rec (ptid_t (current_event.dwProcessId, current_event.dwThreadId, 0), + DONT_SUSPEND); + + switch (code) + { + case EXCEPTION_ACCESS_VIOLATION: + DEBUG_EXCEPTION_SIMPLE ("EXCEPTION_ACCESS_VIOLATION"); + ourstatus->value.sig = GDB_SIGNAL_SEGV; + if (handle_access_violation (rec)) + return HANDLE_EXCEPTION_UNHANDLED; + break; + case STATUS_STACK_OVERFLOW: + DEBUG_EXCEPTION_SIMPLE ("STATUS_STACK_OVERFLOW"); + ourstatus->value.sig = GDB_SIGNAL_SEGV; + break; + case STATUS_FLOAT_DENORMAL_OPERAND: + DEBUG_EXCEPTION_SIMPLE ("STATUS_FLOAT_DENORMAL_OPERAND"); + ourstatus->value.sig = GDB_SIGNAL_FPE; + break; + case EXCEPTION_ARRAY_BOUNDS_EXCEEDED: + DEBUG_EXCEPTION_SIMPLE ("EXCEPTION_ARRAY_BOUNDS_EXCEEDED"); + ourstatus->value.sig = GDB_SIGNAL_FPE; + break; + case STATUS_FLOAT_INEXACT_RESULT: + DEBUG_EXCEPTION_SIMPLE ("STATUS_FLOAT_INEXACT_RESULT"); + ourstatus->value.sig = GDB_SIGNAL_FPE; + break; + case STATUS_FLOAT_INVALID_OPERATION: + DEBUG_EXCEPTION_SIMPLE ("STATUS_FLOAT_INVALID_OPERATION"); + ourstatus->value.sig = GDB_SIGNAL_FPE; + break; + case STATUS_FLOAT_OVERFLOW: + DEBUG_EXCEPTION_SIMPLE ("STATUS_FLOAT_OVERFLOW"); + ourstatus->value.sig = GDB_SIGNAL_FPE; + break; + case STATUS_FLOAT_STACK_CHECK: + DEBUG_EXCEPTION_SIMPLE ("STATUS_FLOAT_STACK_CHECK"); + ourstatus->value.sig = GDB_SIGNAL_FPE; + break; + case STATUS_FLOAT_UNDERFLOW: + DEBUG_EXCEPTION_SIMPLE ("STATUS_FLOAT_UNDERFLOW"); + ourstatus->value.sig = GDB_SIGNAL_FPE; + break; + case STATUS_FLOAT_DIVIDE_BY_ZERO: + DEBUG_EXCEPTION_SIMPLE ("STATUS_FLOAT_DIVIDE_BY_ZERO"); + ourstatus->value.sig = GDB_SIGNAL_FPE; + break; + case STATUS_INTEGER_DIVIDE_BY_ZERO: + DEBUG_EXCEPTION_SIMPLE ("STATUS_INTEGER_DIVIDE_BY_ZERO"); + ourstatus->value.sig = GDB_SIGNAL_FPE; + break; + case STATUS_INTEGER_OVERFLOW: + DEBUG_EXCEPTION_SIMPLE ("STATUS_INTEGER_OVERFLOW"); + ourstatus->value.sig = GDB_SIGNAL_FPE; + break; + case EXCEPTION_BREAKPOINT: +#ifdef __x86_64__ + if (ignore_first_breakpoint) + { + /* For WOW64 processes, there are always 2 breakpoint exceptions + on startup, first a BREAKPOINT for the 64bit ntdll.dll, + then a WX86_BREAKPOINT for the 32bit ntdll.dll. + Here we only care about the WX86_BREAKPOINT's. */ + ourstatus->kind = TARGET_WAITKIND_SPURIOUS; + ignore_first_breakpoint = false; + } + else if (wow64_process) + { + /* This breakpoint exception is triggered for WOW64 processes when + reaching an int3 instruction in 64bit code. + gdb checks for int3 in case of SIGTRAP, this fails because + Wow64GetThreadContext can only report the pc of 32bit code, and + gdb lets the target process continue. + So handle it as SIGINT instead, then the target is stopped + unconditionally. */ + DEBUG_EXCEPTION_SIMPLE ("EXCEPTION_BREAKPOINT"); + rec->ExceptionCode = DBG_CONTROL_C; + ourstatus->value.sig = GDB_SIGNAL_INT; + break; + } +#endif + /* FALLTHROUGH */ + case STATUS_WX86_BREAKPOINT: + DEBUG_EXCEPTION_SIMPLE ("EXCEPTION_BREAKPOINT"); + ourstatus->value.sig = GDB_SIGNAL_TRAP; +#ifdef _WIN32_WCE + /* Remove the initial breakpoint. */ + check_breakpoints ((CORE_ADDR) (long) current_event + .u.Exception.ExceptionRecord.ExceptionAddress); +#endif + break; + case DBG_CONTROL_C: + DEBUG_EXCEPTION_SIMPLE ("DBG_CONTROL_C"); + ourstatus->value.sig = GDB_SIGNAL_INT; + break; + case DBG_CONTROL_BREAK: + DEBUG_EXCEPTION_SIMPLE ("DBG_CONTROL_BREAK"); + ourstatus->value.sig = GDB_SIGNAL_INT; + break; + case EXCEPTION_SINGLE_STEP: + case STATUS_WX86_SINGLE_STEP: + DEBUG_EXCEPTION_SIMPLE ("EXCEPTION_SINGLE_STEP"); + ourstatus->value.sig = GDB_SIGNAL_TRAP; + break; + case EXCEPTION_ILLEGAL_INSTRUCTION: + DEBUG_EXCEPTION_SIMPLE ("EXCEPTION_ILLEGAL_INSTRUCTION"); + ourstatus->value.sig = GDB_SIGNAL_ILL; + break; + case EXCEPTION_PRIV_INSTRUCTION: + DEBUG_EXCEPTION_SIMPLE ("EXCEPTION_PRIV_INSTRUCTION"); + ourstatus->value.sig = GDB_SIGNAL_ILL; + break; + case EXCEPTION_NONCONTINUABLE_EXCEPTION: + DEBUG_EXCEPTION_SIMPLE ("EXCEPTION_NONCONTINUABLE_EXCEPTION"); + ourstatus->value.sig = GDB_SIGNAL_ILL; + break; + case MS_VC_EXCEPTION: + DEBUG_EXCEPTION_SIMPLE ("MS_VC_EXCEPTION"); + if (handle_ms_vc_exception (rec)) + { + ourstatus->value.sig = GDB_SIGNAL_TRAP; + result = HANDLE_EXCEPTION_IGNORED; + break; + } + /* treat improperly formed exception as unknown */ + /* FALLTHROUGH */ + default: + /* Treat unhandled first chance exceptions specially. */ + if (current_event.u.Exception.dwFirstChance) + return HANDLE_EXCEPTION_UNHANDLED; + debug_printf ("gdb: unknown target exception 0x%08x at %s\n", + (unsigned) current_event.u.Exception.ExceptionRecord.ExceptionCode, + host_address_to_string ( + current_event.u.Exception.ExceptionRecord.ExceptionAddress)); + ourstatus->value.sig = GDB_SIGNAL_UNKNOWN; + break; + } + + last_sig = ourstatus->value.sig; + return result; + +#undef DEBUG_EXCEPTION_SIMPLE +} + +/* See nat/windows-nat.h. */ + +bool +matching_pending_stop (bool debug_events) +{ + /* If there are pending stops, and we might plausibly hit one of + them, we don't want to actually continue the inferior -- we just + want to report the stop. In this case, we just pretend to + continue. See the comment by the definition of "pending_stops" + for details on why this is needed. */ + for (const auto &item : pending_stops) + { + if (desired_stop_thread_id == -1 + || desired_stop_thread_id == item.thread_id) + { + DEBUG_EVENTS (("windows_continue - pending stop anticipated, " + "desired=0x%x, item=0x%x\n", + desired_stop_thread_id, item.thread_id)); + return true; + } + } + + return false; +} + +/* See nat/windows-nat.h. */ + +gdb::optional<pending_stop> +fetch_pending_stop (bool debug_events) +{ + gdb::optional<pending_stop> result; + for (auto iter = pending_stops.begin (); + iter != pending_stops.end (); + ++iter) + { + if (desired_stop_thread_id == -1 + || desired_stop_thread_id == iter->thread_id) + { + result = *iter; + current_event = iter->event; + + DEBUG_EVENTS (("get_windows_debug_event - " + "pending stop found in 0x%x (desired=0x%x)\n", + iter->thread_id, desired_stop_thread_id)); + + pending_stops.erase (iter); + break; + } + } + + return result; +} + +/* See nat/windows-nat.h. */ + +BOOL +continue_last_debug_event (DWORD continue_status, bool debug_events) +{ + DEBUG_EVENTS (("ContinueDebugEvent (cpid=%d, ctid=0x%x, %s);\n", + (unsigned) last_wait_event.dwProcessId, + (unsigned) last_wait_event.dwThreadId, + continue_status == DBG_CONTINUE ? + "DBG_CONTINUE" : "DBG_EXCEPTION_NOT_HANDLED")); + + return ContinueDebugEvent (last_wait_event.dwProcessId, + last_wait_event.dwThreadId, + continue_status); +} + +/* See nat/windows-nat.h. */ + +BOOL +wait_for_debug_event (DEBUG_EVENT *event, DWORD timeout) +{ + BOOL result = WaitForDebugEvent (event, timeout); + if (result) + last_wait_event = *event; + return result; +} + +} diff -Nru gdb-9.1/gdb/nat/windows-nat.h gdb-10.2/gdb/nat/windows-nat.h --- gdb-9.1/gdb/nat/windows-nat.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/nat/windows-nat.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,267 @@ +/* Internal interfaces for the Windows code + Copyright (C) 1995-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef NAT_WINDOWS_NAT_H +#define NAT_WINDOWS_NAT_H + +#include <windows.h> +#include <vector> + +#include "gdbsupport/gdb_optional.h" +#include "target/waitstatus.h" + +#define STATUS_WX86_BREAKPOINT 0x4000001F +#define STATUS_WX86_SINGLE_STEP 0x4000001E + +namespace windows_nat +{ + +/* Thread information structure used to track extra information about + each thread. */ +struct windows_thread_info +{ + windows_thread_info (DWORD tid_, HANDLE h_, CORE_ADDR tlb) + : tid (tid_), + h (h_), + thread_local_base (tlb) + { + } + + ~windows_thread_info (); + + DISABLE_COPY_AND_ASSIGN (windows_thread_info); + + /* Ensure that this thread has been suspended. */ + void suspend (); + + /* Resume the thread if it has been suspended. */ + void resume (); + + /* The Win32 thread identifier. */ + DWORD tid; + + /* The handle to the thread. */ + HANDLE h; + + /* Thread Information Block address. */ + CORE_ADDR thread_local_base; + + /* This keeps track of whether SuspendThread was called on this + thread. -1 means there was a failure or that the thread was + explicitly not suspended, 1 means it was called, and 0 means it + was not. */ + int suspended = 0; + +#ifdef _WIN32_WCE + /* The context as retrieved right after suspending the thread. */ + CONTEXT base_context {}; +#endif + + /* The context of the thread, including any manipulations. */ + union + { + CONTEXT context {}; +#ifdef __x86_64__ + WOW64_CONTEXT wow64_context; +#endif + }; + + /* Whether debug registers changed since we last set CONTEXT back to + the thread. */ + bool debug_registers_changed = false; + + /* Nonzero if CONTEXT is invalidated and must be re-read from the + inferior thread. */ + bool reload_context = false; + + /* True if this thread is currently stopped at a software + breakpoint. This is used to offset the PC when needed. */ + bool stopped_at_software_breakpoint = false; + + /* True if we've adjusted the PC after hitting a software + breakpoint, false otherwise. This lets us avoid multiple + adjustments if the registers are read multiple times. */ + bool pc_adjusted = false; + + /* The name of the thread, allocated by xmalloc. */ + gdb::unique_xmalloc_ptr<char> name; +}; + + +/* Possible values to pass to 'thread_rec'. */ +enum thread_disposition_type +{ + /* Do not invalidate the thread's context, and do not suspend the + thread. */ + DONT_INVALIDATE_CONTEXT, + /* Invalidate the context, but do not suspend the thread. */ + DONT_SUSPEND, + /* Invalidate the context and suspend the thread. */ + INVALIDATE_CONTEXT +}; + +/* Find a thread record given a thread id. THREAD_DISPOSITION + controls whether the thread is suspended, and whether the context + is invalidated. + + This function must be supplied by the embedding application. */ +extern windows_thread_info *thread_rec (ptid_t ptid, + thread_disposition_type disposition); + + +/* Handle OUTPUT_DEBUG_STRING_EVENT from child process. Updates + OURSTATUS and returns the thread id if this represents a thread + change (this is specific to Cygwin), otherwise 0. + + Cygwin prepends its messages with a "cygwin:". Interpret this as + a Cygwin signal. Otherwise just print the string as a warning. + + This function must be supplied by the embedding application. */ +extern int handle_output_debug_string (struct target_waitstatus *ourstatus); + +/* Handle a DLL load event. + + This function assumes that the current event did not occur during + inferior initialization. + + This function must be supplied by the embedding application. */ + +extern void handle_load_dll (); + +/* Handle a DLL unload event. + + This function assumes that this event did not occur during inferior + initialization. + + This function must be supplied by the embedding application. */ + +extern void handle_unload_dll (); + +/* Handle MS_VC_EXCEPTION when processing a stop. MS_VC_EXCEPTION is + somewhat undocumented but is used to tell the debugger the name of + a thread. + + Return true if the exception was handled; return false otherwise. + + This function must be supplied by the embedding application. */ + +extern bool handle_ms_vc_exception (const EXCEPTION_RECORD *rec); + +/* When EXCEPTION_ACCESS_VIOLATION is processed, we give the embedding + application a chance to change it to be considered "unhandled". + This function must be supplied by the embedding application. If it + returns true, then the exception is "unhandled". */ + +extern bool handle_access_violation (const EXCEPTION_RECORD *rec); + + +/* Currently executing process */ +extern HANDLE current_process_handle; +extern DWORD current_process_id; +extern DWORD main_thread_id; +extern enum gdb_signal last_sig; + +/* The current debug event from WaitForDebugEvent or from a pending + stop. */ +extern DEBUG_EVENT current_event; + +/* The ID of the thread for which we anticipate a stop event. + Normally this is -1, meaning we'll accept an event in any + thread. */ +extern DWORD desired_stop_thread_id; + +/* A single pending stop. See "pending_stops" for more + information. */ +struct pending_stop +{ + /* The thread id. */ + DWORD thread_id; + + /* The target waitstatus we computed. */ + target_waitstatus status; + + /* The event. A few fields of this can be referenced after a stop, + and it seemed simplest to store the entire event. */ + DEBUG_EVENT event; +}; + +/* A vector of pending stops. Sometimes, Windows will report a stop + on a thread that has been ostensibly suspended. We believe what + happens here is that two threads hit a breakpoint simultaneously, + and the Windows kernel queues the stop events. However, this can + result in the strange effect of trying to single step thread A -- + leaving all other threads suspended -- and then seeing a stop in + thread B. To handle this scenario, we queue all such "pending" + stops here, and then process them once the step has completed. See + PR gdb/22992. */ +extern std::vector<pending_stop> pending_stops; + +/* Contents of $_siginfo */ +extern EXCEPTION_RECORD siginfo_er; + +#ifdef __x86_64__ +/* The target is a WOW64 process */ +extern bool wow64_process; +/* Ignore first breakpoint exception of WOW64 process */ +extern bool ignore_first_breakpoint; +#endif + +/* Return the name of the DLL referenced by H at ADDRESS. UNICODE + determines what sort of string is read from the inferior. Returns + the name of the DLL, or NULL on error. If a name is returned, it + is stored in a static buffer which is valid until the next call to + get_image_name. */ +extern const char *get_image_name (HANDLE h, void *address, int unicode); + +typedef enum +{ + HANDLE_EXCEPTION_UNHANDLED = 0, + HANDLE_EXCEPTION_HANDLED, + HANDLE_EXCEPTION_IGNORED +} handle_exception_result; + +extern handle_exception_result handle_exception + (struct target_waitstatus *ourstatus, bool debug_exceptions); + +/* Return true if there is a pending stop matching + desired_stop_thread_id. If DEBUG_EVENTS is true, logging will be + enabled. */ + +extern bool matching_pending_stop (bool debug_events); + +/* See if a pending stop matches DESIRED_STOP_THREAD_ID. If so, + remove it from the list of pending stops, set 'current_event', and + return it. Otherwise, return an empty optional. */ + +extern gdb::optional<pending_stop> fetch_pending_stop (bool debug_events); + +/* A simple wrapper for ContinueDebugEvent that continues the last + waited-for event. If DEBUG_EVENTS is true, logging will be + enabled. */ + +extern BOOL continue_last_debug_event (DWORD continue_status, + bool debug_events); + +/* A simple wrapper for WaitForDebugEvent that also sets the internal + 'last_wait_event' on success. */ + +extern BOOL wait_for_debug_event (DEBUG_EVENT *event, DWORD timeout); + +} + +#endif diff -Nru gdb-9.1/gdb/nat/x86-cpuid.h gdb-10.2/gdb/nat/x86-cpuid.h --- gdb-9.1/gdb/nat/x86-cpuid.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/nat/x86-cpuid.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* C API for x86 cpuid insn. - Copyright (C) 2007-2020 Free Software Foundation, Inc. + Copyright (C) 2007-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/nat/x86-dregs.c gdb-10.2/gdb/nat/x86-dregs.c --- gdb-9.1/gdb/nat/x86-dregs.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/nat/x86-dregs.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Debug register code for x86 (i386 and x86-64). - Copyright (C) 2001-2020 Free Software Foundation, Inc. + Copyright (C) 2001-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/nat/x86-dregs.h gdb-10.2/gdb/nat/x86-dregs.h --- gdb-9.1/gdb/nat/x86-dregs.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/nat/x86-dregs.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Debug register code for x86 (i386 and x86-64). - Copyright (C) 2009-2020 Free Software Foundation, Inc. + Copyright (C) 2009-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/nat/x86-gcc-cpuid.h gdb-10.2/gdb/nat/x86-gcc-cpuid.h --- gdb-9.1/gdb/nat/x86-gcc-cpuid.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/nat/x86-gcc-cpuid.h 2021-04-25 04:04:35.000000000 +0000 @@ -7,7 +7,7 @@ #define NAT_X86_GCC_CPUID_H /* - * Copyright (C) 2007-2020 Free Software Foundation, Inc. + * Copyright (C) 2007-2021 Free Software Foundation, Inc. * * This file is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the diff -Nru gdb-9.1/gdb/nat/x86-linux.c gdb-10.2/gdb/nat/x86-linux.c --- gdb-9.1/gdb/nat/x86-linux.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/nat/x86-linux.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Native-dependent code for GNU/Linux x86 (i386 and x86-64). - Copyright (C) 1999-2020 Free Software Foundation, Inc. + Copyright (C) 1999-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/nat/x86-linux-dregs.c gdb-10.2/gdb/nat/x86-linux-dregs.c --- gdb-9.1/gdb/nat/x86-linux-dregs.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/nat/x86-linux-dregs.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Low-level debug register code for GNU/Linux x86 (i386 and x86-64). - Copyright (C) 1999-2020 Free Software Foundation, Inc. + Copyright (C) 1999-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/nat/x86-linux-dregs.h gdb-10.2/gdb/nat/x86-linux-dregs.h --- gdb-9.1/gdb/nat/x86-linux-dregs.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/nat/x86-linux-dregs.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Low-level debug register code for GNU/Linux x86 (i386 and x86-64). - Copyright (C) 1999-2020 Free Software Foundation, Inc. + Copyright (C) 1999-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/nat/x86-linux.h gdb-10.2/gdb/nat/x86-linux.h --- gdb-9.1/gdb/nat/x86-linux.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/nat/x86-linux.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Native-dependent code for GNU/Linux x86 (i386 and x86-64). - Copyright (C) 1999-2020 Free Software Foundation, Inc. + Copyright (C) 1999-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/nbsd-nat.c gdb-10.2/gdb/nbsd-nat.c --- gdb-9.1/gdb/nbsd-nat.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/nbsd-nat.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Native-dependent code for NetBSD. - Copyright (C) 2006-2020 Free Software Foundation, Inc. + Copyright (C) 2006-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -20,6 +20,16 @@ #include "defs.h" #include "nbsd-nat.h" +#include "nat/netbsd-nat.h" +#include "gdbthread.h" +#include "nbsd-tdep.h" +#include "inferior.h" +#include "gdbarch.h" + +#include <sys/types.h> +#include <sys/ptrace.h> +#include <sys/sysctl.h> +#include <sys/wait.h> /* Return the name of a file that can be opened to get the symbols for the child process identified by PID. */ @@ -27,17 +37,755 @@ char * nbsd_nat_target::pid_to_exec_file (int pid) { - ssize_t len; - static char buf[PATH_MAX]; - char name[PATH_MAX]; + return const_cast<char *> (netbsd_nat::pid_to_exec_file (pid)); +} + +/* Return the current directory for the process identified by PID. */ + +static std::string +nbsd_pid_to_cwd (int pid) +{ + char buf[PATH_MAX]; + size_t buflen; + int mib[4] = {CTL_KERN, KERN_PROC_ARGS, pid, KERN_PROC_CWD}; + buflen = sizeof (buf); + if (sysctl (mib, ARRAY_SIZE (mib), buf, &buflen, NULL, 0)) + return ""; + return buf; +} + +/* Return the kinfo_proc2 structure for the process identified by PID. */ + +static bool +nbsd_pid_to_kinfo_proc2 (pid_t pid, struct kinfo_proc2 *kp) +{ + gdb_assert (kp != nullptr); + + size_t size = sizeof (*kp); + int mib[6] = {CTL_KERN, KERN_PROC2, KERN_PROC_PID, pid, + static_cast<int> (size), 1}; + return !sysctl (mib, ARRAY_SIZE (mib), kp, &size, NULL, 0); +} + +/* Return the command line for the process identified by PID. */ + +static gdb::unique_xmalloc_ptr<char[]> +nbsd_pid_to_cmdline (int pid) +{ + int mib[4] = {CTL_KERN, KERN_PROC_ARGS, pid, KERN_PROC_ARGV}; + + size_t size = 0; + if (::sysctl (mib, ARRAY_SIZE (mib), NULL, &size, NULL, 0) == -1 || size == 0) + return nullptr; + + gdb::unique_xmalloc_ptr<char[]> args (XNEWVAR (char, size)); + + if (::sysctl (mib, ARRAY_SIZE (mib), args.get (), &size, NULL, 0) == -1 + || size == 0) + return nullptr; + + /* Arguments are returned as a flattened string with NUL separators. + Join the arguments with spaces to form a single string. */ + for (size_t i = 0; i < size - 1; i++) + if (args[i] == '\0') + args[i] = ' '; + args[size - 1] = '\0'; + + return args; +} + +/* Return true if PTID is still active in the inferior. */ + +bool +nbsd_nat_target::thread_alive (ptid_t ptid) +{ + return netbsd_nat::thread_alive (ptid); +} + +/* Return the name assigned to a thread by an application. Returns + the string in a static buffer. */ + +const char * +nbsd_nat_target::thread_name (struct thread_info *thr) +{ + ptid_t ptid = thr->ptid; + return netbsd_nat::thread_name (ptid); +} + +/* Implement the "post_attach" target_ops method. */ + +static void +nbsd_add_threads (nbsd_nat_target *target, pid_t pid) +{ + auto fn + = [&target] (ptid_t ptid) + { + if (!in_thread_list (target, ptid)) + { + if (inferior_ptid.lwp () == 0) + thread_change_ptid (target, inferior_ptid, ptid); + else + add_thread (target, ptid); + } + }; + + netbsd_nat::for_each_thread (pid, fn); +} + +/* Implement the "post_startup_inferior" target_ops method. */ + +void +nbsd_nat_target::post_startup_inferior (ptid_t ptid) +{ + netbsd_nat::enable_proc_events (ptid.pid ()); +} + +/* Implement the "post_attach" target_ops method. */ + +void +nbsd_nat_target::post_attach (int pid) +{ + netbsd_nat::enable_proc_events (pid); + nbsd_add_threads (this, pid); +} + +/* Implement the "update_thread_list" target_ops method. */ + +void +nbsd_nat_target::update_thread_list () +{ + delete_exited_threads (); +} + +/* Convert PTID to a string. */ + +std::string +nbsd_nat_target::pid_to_str (ptid_t ptid) +{ + int lwp = ptid.lwp (); + + if (lwp != 0) + { + pid_t pid = ptid.pid (); + + return string_printf ("LWP %d of process %d", lwp, pid); + } + + return normal_pid_to_str (ptid); +} + +/* Retrieve all the memory regions in the specified process. */ + +static gdb::unique_xmalloc_ptr<struct kinfo_vmentry[]> +nbsd_kinfo_get_vmmap (pid_t pid, size_t *size) +{ + int mib[5] = {CTL_VM, VM_PROC, VM_PROC_MAP, pid, + sizeof (struct kinfo_vmentry)}; + + size_t length = 0; + if (sysctl (mib, ARRAY_SIZE (mib), NULL, &length, NULL, 0)) + { + *size = 0; + return NULL; + } + + /* Prereserve more space. The length argument is volatile and can change + between the sysctl(3) calls as this function can be called against a + running process. */ + length = length * 5 / 3; + + gdb::unique_xmalloc_ptr<struct kinfo_vmentry[]> kiv + (XNEWVAR (kinfo_vmentry, length)); + + if (sysctl (mib, ARRAY_SIZE (mib), kiv.get (), &length, NULL, 0)) + { + *size = 0; + return NULL; + } + + *size = length / sizeof (struct kinfo_vmentry); + return kiv; +} + +/* Iterate over all the memory regions in the current inferior, + calling FUNC for each memory region. OBFD is passed as the last + argument to FUNC. */ + +int +nbsd_nat_target::find_memory_regions (find_memory_region_ftype func, + void *data) +{ + pid_t pid = inferior_ptid.pid (); + + size_t nitems; + gdb::unique_xmalloc_ptr<struct kinfo_vmentry[]> vmentl + = nbsd_kinfo_get_vmmap (pid, &nitems); + if (vmentl == NULL) + perror_with_name (_("Couldn't fetch VM map entries.")); + + for (size_t i = 0; i < nitems; i++) + { + struct kinfo_vmentry *kve = &vmentl[i]; + + /* Skip unreadable segments and those where MAP_NOCORE has been set. */ + if (!(kve->kve_protection & KVME_PROT_READ) + || kve->kve_flags & KVME_FLAG_NOCOREDUMP) + continue; + + /* Skip segments with an invalid type. */ + switch (kve->kve_type) + { + case KVME_TYPE_VNODE: + case KVME_TYPE_ANON: + case KVME_TYPE_SUBMAP: + case KVME_TYPE_OBJECT: + break; + default: + continue; + } + + size_t size = kve->kve_end - kve->kve_start; + if (info_verbose) + { + fprintf_filtered (gdb_stdout, + "Save segment, %ld bytes at %s (%c%c%c)\n", + (long) size, + paddress (target_gdbarch (), kve->kve_start), + kve->kve_protection & KVME_PROT_READ ? 'r' : '-', + kve->kve_protection & KVME_PROT_WRITE ? 'w' : '-', + kve->kve_protection & KVME_PROT_EXEC ? 'x' : '-'); + } + + /* Invoke the callback function to create the corefile segment. + Pass MODIFIED as true, we do not know the real modification state. */ + func (kve->kve_start, size, kve->kve_protection & KVME_PROT_READ, + kve->kve_protection & KVME_PROT_WRITE, + kve->kve_protection & KVME_PROT_EXEC, 1, data); + } + return 0; +} + +/* Implement the "info_proc" target_ops method. */ + +bool +nbsd_nat_target::info_proc (const char *args, enum info_proc_what what) +{ + pid_t pid; + bool do_cmdline = false; + bool do_cwd = false; + bool do_exe = false; + bool do_mappings = false; + bool do_status = false; + + switch (what) + { + case IP_MINIMAL: + do_cmdline = true; + do_cwd = true; + do_exe = true; + break; + case IP_STAT: + case IP_STATUS: + do_status = true; + break; + case IP_MAPPINGS: + do_mappings = true; + break; + case IP_CMDLINE: + do_cmdline = true; + break; + case IP_EXE: + do_exe = true; + break; + case IP_CWD: + do_cwd = true; + break; + case IP_ALL: + do_cmdline = true; + do_cwd = true; + do_exe = true; + do_mappings = true; + do_status = true; + break; + default: + error (_("Not supported on this target.")); + } + + gdb_argv built_argv (args); + if (built_argv.count () == 0) + { + pid = inferior_ptid.pid (); + if (pid == 0) + error (_("No current process: you must name one.")); + } + else if (built_argv.count () == 1 && isdigit (built_argv[0][0])) + pid = strtol (built_argv[0], NULL, 10); + else + error (_("Invalid arguments.")); + + printf_filtered (_("process %d\n"), pid); + + if (do_cmdline) + { + gdb::unique_xmalloc_ptr<char[]> cmdline = nbsd_pid_to_cmdline (pid); + if (cmdline != nullptr) + printf_filtered ("cmdline = '%s'\n", cmdline.get ()); + else + warning (_("unable to fetch command line")); + } + if (do_cwd) + { + std::string cwd = nbsd_pid_to_cwd (pid); + if (cwd != "") + printf_filtered ("cwd = '%s'\n", cwd.c_str ()); + else + warning (_("unable to fetch current working directory")); + } + if (do_exe) + { + const char *exe = pid_to_exec_file (pid); + if (exe != nullptr) + printf_filtered ("exe = '%s'\n", exe); + else + warning (_("unable to fetch executable path name")); + } + if (do_mappings) + { + size_t nvment; + gdb::unique_xmalloc_ptr<struct kinfo_vmentry[]> vmentl + = nbsd_kinfo_get_vmmap (pid, &nvment); + + if (vmentl != nullptr) + { + int addr_bit = TARGET_CHAR_BIT * sizeof (void *); + nbsd_info_proc_mappings_header (addr_bit); + + struct kinfo_vmentry *kve = vmentl.get (); + for (int i = 0; i < nvment; i++, kve++) + nbsd_info_proc_mappings_entry (addr_bit, kve->kve_start, + kve->kve_end, kve->kve_offset, + kve->kve_flags, kve->kve_protection, + kve->kve_path); + } + else + warning (_("unable to fetch virtual memory map")); + } + if (do_status) + { + struct kinfo_proc2 kp; + if (!nbsd_pid_to_kinfo_proc2 (pid, &kp)) + warning (_("Failed to fetch process information")); + else + { + auto process_status + = [] (int8_t stat) + { + switch (stat) + { + case SIDL: + return "IDL"; + case SACTIVE: + return "ACTIVE"; + case SDYING: + return "DYING"; + case SSTOP: + return "STOP"; + case SZOMB: + return "ZOMB"; + case SDEAD: + return "DEAD"; + default: + return "? (unknown)"; + } + }; + + printf_filtered ("Name: %s\n", kp.p_comm); + printf_filtered ("State: %s\n", process_status(kp.p_realstat)); + printf_filtered ("Parent process: %" PRId32 "\n", kp.p_ppid); + printf_filtered ("Process group: %" PRId32 "\n", kp.p__pgid); + printf_filtered ("Session id: %" PRId32 "\n", kp.p_sid); + printf_filtered ("TTY: %" PRId32 "\n", kp.p_tdev); + printf_filtered ("TTY owner process group: %" PRId32 "\n", kp.p_tpgid); + printf_filtered ("User IDs (real, effective, saved): " + "%" PRIu32 " %" PRIu32 " %" PRIu32 "\n", + kp.p_ruid, kp.p_uid, kp.p_svuid); + printf_filtered ("Group IDs (real, effective, saved): " + "%" PRIu32 " %" PRIu32 " %" PRIu32 "\n", + kp.p_rgid, kp.p_gid, kp.p_svgid); + + printf_filtered ("Groups:"); + for (int i = 0; i < kp.p_ngroups; i++) + printf_filtered (" %" PRIu32, kp.p_groups[i]); + printf_filtered ("\n"); + printf_filtered ("Minor faults (no memory page): %" PRIu64 "\n", + kp.p_uru_minflt); + printf_filtered ("Major faults (memory page faults): %" PRIu64 "\n", + kp.p_uru_majflt); + printf_filtered ("utime: %" PRIu32 ".%06" PRIu32 "\n", + kp.p_uutime_sec, kp.p_uutime_usec); + printf_filtered ("stime: %" PRIu32 ".%06" PRIu32 "\n", + kp.p_ustime_sec, kp.p_ustime_usec); + printf_filtered ("utime+stime, children: %" PRIu32 ".%06" PRIu32 "\n", + kp.p_uctime_sec, kp.p_uctime_usec); + printf_filtered ("'nice' value: %" PRIu8 "\n", kp.p_nice); + printf_filtered ("Start time: %" PRIu32 ".%06" PRIu32 "\n", + kp.p_ustart_sec, kp.p_ustart_usec); + int pgtok = getpagesize () / 1024; + printf_filtered ("Data size: %" PRIuMAX " kB\n", + (uintmax_t) kp.p_vm_dsize * pgtok); + printf_filtered ("Stack size: %" PRIuMAX " kB\n", + (uintmax_t) kp.p_vm_ssize * pgtok); + printf_filtered ("Text size: %" PRIuMAX " kB\n", + (uintmax_t) kp.p_vm_tsize * pgtok); + printf_filtered ("Resident set size: %" PRIuMAX " kB\n", + (uintmax_t) kp.p_vm_rssize * pgtok); + printf_filtered ("Maximum RSS: %" PRIu64 " kB\n", kp.p_uru_maxrss); + printf_filtered ("Pending Signals:"); + for (size_t i = 0; i < ARRAY_SIZE (kp.p_siglist.__bits); i++) + printf_filtered (" %08" PRIx32, kp.p_siglist.__bits[i]); + printf_filtered ("\n"); + printf_filtered ("Ignored Signals:"); + for (size_t i = 0; i < ARRAY_SIZE (kp.p_sigignore.__bits); i++) + printf_filtered (" %08" PRIx32, kp.p_sigignore.__bits[i]); + printf_filtered ("\n"); + printf_filtered ("Caught Signals:"); + for (size_t i = 0; i < ARRAY_SIZE (kp.p_sigcatch.__bits); i++) + printf_filtered (" %08" PRIx32, kp.p_sigcatch.__bits[i]); + printf_filtered ("\n"); + } + } + + return true; +} + +/* Resume execution of a specified PTID, that points to a process or a thread + within a process. If one thread is specified, all other threads are + suspended. If STEP is nonzero, single-step it. If SIGNAL is nonzero, + give it that signal. */ + +static void +nbsd_resume(nbsd_nat_target *target, ptid_t ptid, int step, + enum gdb_signal signal) +{ + int request; + + gdb_assert (minus_one_ptid != ptid); + + if (ptid.lwp_p ()) + { + /* If ptid is a specific LWP, suspend all other LWPs in the process. */ + inferior *inf = find_inferior_ptid (target, ptid); + + for (thread_info *tp : inf->non_exited_threads ()) + { + if (tp->ptid.lwp () == ptid.lwp ()) + request = PT_RESUME; + else + request = PT_SUSPEND; + + if (ptrace (request, tp->ptid.pid (), NULL, tp->ptid.lwp ()) == -1) + perror_with_name (("ptrace")); + } + } + else + { + /* If ptid is a wildcard, resume all matching threads (they won't run + until the process is continued however). */ + for (thread_info *tp : all_non_exited_threads (target, ptid)) + if (ptrace (PT_RESUME, tp->ptid.pid (), NULL, tp->ptid.lwp ()) == -1) + perror_with_name (("ptrace")); + } + + if (step) + { + for (thread_info *tp : all_non_exited_threads (target, ptid)) + if (ptrace (PT_SETSTEP, tp->ptid.pid (), NULL, tp->ptid.lwp ()) == -1) + perror_with_name (("ptrace")); + } + else + { + for (thread_info *tp : all_non_exited_threads (target, ptid)) + if (ptrace (PT_CLEARSTEP, tp->ptid.pid (), NULL, tp->ptid.lwp ()) == -1) + perror_with_name (("ptrace")); + } + + if (catch_syscall_enabled () > 0) + request = PT_SYSCALL; + else + request = PT_CONTINUE; + + /* An address of (void *)1 tells ptrace to continue from + where it was. If GDB wanted it to start some other way, we have + already written a new program counter value to the child. */ + if (ptrace (request, ptid.pid (), (void *)1, gdb_signal_to_host (signal)) == -1) + perror_with_name (("ptrace")); +} + +/* Resume execution of thread PTID, or all threads of all inferiors + if PTID is -1. If STEP is nonzero, single-step it. If SIGNAL is nonzero, + give it that signal. */ + +void +nbsd_nat_target::resume (ptid_t ptid, int step, enum gdb_signal signal) +{ + if (minus_one_ptid != ptid) + nbsd_resume (this, ptid, step, signal); + else + { + for (inferior *inf : all_non_exited_inferiors (this)) + nbsd_resume (this, ptid_t (inf->pid, 0, 0), step, signal); + } +} + +/* Implement a safe wrapper around waitpid(). */ + +static pid_t +nbsd_wait (ptid_t ptid, struct target_waitstatus *ourstatus, int options) +{ + pid_t pid; + int status; - xsnprintf (name, PATH_MAX, "/proc/%d/exe", pid); - len = readlink (name, buf, PATH_MAX - 1); - if (len != -1) + set_sigint_trap (); + + do + { + /* The common code passes WNOHANG that leads to crashes, overwrite it. */ + pid = waitpid (ptid.pid (), &status, 0); + } + while (pid == -1 && errno == EINTR); + + clear_sigint_trap (); + + if (pid == -1) + perror_with_name (_("Child process unexpectedly missing")); + + store_waitstatus (ourstatus, status); + return pid; +} + +/* Wait for the child specified by PTID to do something. Return the + process ID of the child, or MINUS_ONE_PTID in case of error; store + the status in *OURSTATUS. */ + +ptid_t +nbsd_nat_target::wait (ptid_t ptid, struct target_waitstatus *ourstatus, + int target_options) +{ + pid_t pid = nbsd_wait (ptid, ourstatus, target_options); + ptid_t wptid = ptid_t (pid); + + /* If the child stopped, keep investigating its status. */ + if (ourstatus->kind != TARGET_WAITKIND_STOPPED) + return wptid; + + /* Extract the event and thread that received a signal. */ + ptrace_siginfo_t psi; + if (ptrace (PT_GET_SIGINFO, pid, &psi, sizeof (psi)) == -1) + perror_with_name (("ptrace")); + + /* Pick child's siginfo_t. */ + siginfo_t *si = &psi.psi_siginfo; + + int lwp = psi.psi_lwpid; + + int signo = si->si_signo; + const int code = si->si_code; + + /* Construct PTID with a specified thread that received the event. + If a signal was targeted to the whole process, lwp is 0. */ + wptid = ptid_t (pid, lwp, 0); + + /* Bail out on non-debugger oriented signals.. */ + if (signo != SIGTRAP) + return wptid; + + /* Stop examining non-debugger oriented SIGTRAP codes. */ + if (code <= SI_USER || code == SI_NOINFO) + return wptid; + + /* Process state for threading events */ + ptrace_state_t pst = {}; + if (code == TRAP_LWP) { - buf[len] = '\0'; - return buf; + if (ptrace (PT_GET_PROCESS_STATE, pid, &pst, sizeof (pst)) == -1) + perror_with_name (("ptrace")); } - return NULL; + if (code == TRAP_LWP && pst.pe_report_event == PTRACE_LWP_EXIT) + { + /* If GDB attaches to a multi-threaded process, exiting + threads might be skipped during post_attach that + have not yet reported their PTRACE_LWP_EXIT event. + Ignore exited events for an unknown LWP. */ + thread_info *thr = find_thread_ptid (this, wptid); + if (thr == nullptr) + ourstatus->kind = TARGET_WAITKIND_SPURIOUS; + else + { + ourstatus->kind = TARGET_WAITKIND_THREAD_EXITED; + /* NetBSD does not store an LWP exit status. */ + ourstatus->value.integer = 0; + + if (print_thread_events) + printf_unfiltered (_("[%s exited]\n"), + target_pid_to_str (wptid).c_str ()); + delete_thread (thr); + } + + /* The GDB core expects that the rest of the threads are running. */ + if (ptrace (PT_CONTINUE, pid, (void *) 1, 0) == -1) + perror_with_name (("ptrace")); + + return wptid; + } + + if (in_thread_list (this, ptid_t (pid))) + thread_change_ptid (this, ptid_t (pid), wptid); + + if (code == TRAP_LWP && pst.pe_report_event == PTRACE_LWP_CREATE) + { + /* If GDB attaches to a multi-threaded process, newborn + threads might be added by nbsd_add_threads that have + not yet reported their PTRACE_LWP_CREATE event. Ignore + born events for an already-known LWP. */ + if (in_thread_list (this, wptid)) + ourstatus->kind = TARGET_WAITKIND_SPURIOUS; + else + { + add_thread (this, wptid); + ourstatus->kind = TARGET_WAITKIND_THREAD_CREATED; + } + return wptid; + } + + if (code == TRAP_EXEC) + { + ourstatus->kind = TARGET_WAITKIND_EXECD; + ourstatus->value.execd_pathname = xstrdup (pid_to_exec_file (pid)); + return wptid; + } + + if (code == TRAP_TRACE) + { + /* Unhandled at this level. */ + return wptid; + } + + if (code == TRAP_SCE || code == TRAP_SCX) + { + int sysnum = si->si_sysnum; + + if (!catch_syscall_enabled () || !catching_syscall_number (sysnum)) + { + /* If the core isn't interested in this event, ignore it. */ + ourstatus->kind = TARGET_WAITKIND_SPURIOUS; + return wptid; + } + + ourstatus->kind = + (code == TRAP_SCE) ? TARGET_WAITKIND_SYSCALL_ENTRY : + TARGET_WAITKIND_SYSCALL_RETURN; + ourstatus->value.syscall_number = sysnum; + return wptid; + } + + if (code == TRAP_BRKPT) + { + /* Unhandled at this level. */ + return wptid; + } + + /* Unclassified SIGTRAP event. */ + ourstatus->kind = TARGET_WAITKIND_SPURIOUS; + return wptid; +} + +/* Implement the "insert_exec_catchpoint" target_ops method. */ + +int +nbsd_nat_target::insert_exec_catchpoint (int pid) +{ + /* Nothing to do. */ + return 0; +} + +/* Implement the "remove_exec_catchpoint" target_ops method. */ + +int +nbsd_nat_target::remove_exec_catchpoint (int pid) +{ + /* Nothing to do. */ + return 0; +} + +/* Implement the "set_syscall_catchpoint" target_ops method. */ + +int +nbsd_nat_target::set_syscall_catchpoint (int pid, bool needed, + int any_count, + gdb::array_view<const int> syscall_counts) +{ + /* Ignore the arguments. inf-ptrace.c will use PT_SYSCALL which + will catch all system call entries and exits. The system calls + are filtered by GDB rather than the kernel. */ + return 0; +} + +/* Implement the "supports_multi_process" target_ops method. */ + +bool +nbsd_nat_target::supports_multi_process () +{ + return true; +} + +/* Implement the "xfer_partial" target_ops method. */ + +enum target_xfer_status +nbsd_nat_target::xfer_partial (enum target_object object, + const char *annex, gdb_byte *readbuf, + const gdb_byte *writebuf, + ULONGEST offset, ULONGEST len, + ULONGEST *xfered_len) +{ + pid_t pid = inferior_ptid.pid (); + + switch (object) + { + case TARGET_OBJECT_SIGNAL_INFO: + { + len = netbsd_nat::qxfer_siginfo(pid, annex, readbuf, writebuf, offset, + len); + + if (len == -1) + return TARGET_XFER_E_IO; + + *xfered_len = len; + return TARGET_XFER_OK; + } + default: + return inf_ptrace_target::xfer_partial (object, annex, + readbuf, writebuf, offset, + len, xfered_len); + } +} + +/* Implement the "supports_dumpcore" target_ops method. */ + +bool +nbsd_nat_target::supports_dumpcore () +{ + return true; +} + +/* Implement the "dumpcore" target_ops method. */ + +void +nbsd_nat_target::dumpcore (const char *filename) +{ + pid_t pid = inferior_ptid.pid (); + + if (ptrace (PT_DUMPCORE, pid, const_cast<char *>(filename), + strlen (filename)) == -1) + perror_with_name (("ptrace")); } diff -Nru gdb-9.1/gdb/nbsd-nat.h gdb-10.2/gdb/nbsd-nat.h --- gdb-9.1/gdb/nbsd-nat.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/nbsd-nat.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Native-dependent code for NetBSD. - Copyright (C) 2006-2020 Free Software Foundation, Inc. + Copyright (C) 2006-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -22,11 +22,41 @@ #include "inf-ptrace.h" +struct thread_info; + /* A prototype NetBSD target. */ struct nbsd_nat_target : public inf_ptrace_target { char *pid_to_exec_file (int pid) override; + + bool thread_alive (ptid_t ptid) override; + const char *thread_name (struct thread_info *thr) override; + void post_startup_inferior (ptid_t ptid) override; + void post_attach (int pid) override; + void update_thread_list () override; + std::string pid_to_str (ptid_t ptid) override; + + int find_memory_regions (find_memory_region_ftype func, void *data) override; + bool info_proc (const char *, enum info_proc_what) override; + + void resume (ptid_t, int, enum gdb_signal) override; + ptid_t wait (ptid_t, struct target_waitstatus *, int) override; + int insert_exec_catchpoint (int pid) override; + int remove_exec_catchpoint (int pid) override; + int set_syscall_catchpoint (int pid, bool needed, int any_count, + gdb::array_view<const int> syscall_counts) + override; + + bool supports_multi_process () override; + enum target_xfer_status xfer_partial (enum target_object object, + const char *annex, + gdb_byte *readbuf, + const gdb_byte *writebuf, + ULONGEST offset, ULONGEST len, + ULONGEST *xfered_len) override; + bool supports_dumpcore () override; + void dumpcore (const char *filename) override; }; #endif /* nbsd-nat.h */ diff -Nru gdb-9.1/gdb/nbsd-tdep.c gdb-10.2/gdb/nbsd-tdep.c --- gdb-9.1/gdb/nbsd-tdep.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/nbsd-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Common target-dependent code for NetBSD systems. - Copyright (C) 2002-2020 Free Software Foundation, Inc. + Copyright (C) 2002-2021 Free Software Foundation, Inc. Contributed by Wasabi Systems, Inc. @@ -20,8 +20,29 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include "defs.h" +#include "auxv.h" #include "solib-svr4.h" #include "nbsd-tdep.h" +#include "gdbarch.h" +#include "objfiles.h" +#include "xml-syscall.h" + +/* Flags in the 'kve_protection' field in struct kinfo_vmentry. These + match the KVME_PROT_* constants in <sys/sysctl.h>. */ + +#define KINFO_VME_PROT_READ 0x00000001 +#define KINFO_VME_PROT_WRITE 0x00000002 +#define KINFO_VME_PROT_EXEC 0x00000004 + +/* Flags in the 'kve_flags' field in struct kinfo_vmentry. These + match the KVME_FLAG_* constants in <sys/sysctl.h>. */ + +#define KINFO_VME_FLAG_COW 0x00000001 +#define KINFO_VME_FLAG_NEEDS_COPY 0x00000002 +#define KINFO_VME_FLAG_NOCOREDUMP 0x00000004 +#define KINFO_VME_FLAG_PAGEABLE 0x00000008 +#define KINFO_VME_FLAG_GROWS_UP 0x00000010 +#define KINFO_VME_FLAG_GROWS_DOWN 0x00000020 /* FIXME: kettenis/20060115: We should really eliminate the next two functions completely. */ @@ -47,3 +68,565 @@ return (func_name != NULL && startswith (func_name, "__sigtramp")); } + +/* This enum is derived from NETBSD's <sys/signal.h>. */ + +enum + { + NBSD_SIGHUP = 1, + NBSD_SIGINT = 2, + NBSD_SIGQUIT = 3, + NBSD_SIGILL = 4, + NBSD_SIGTRAP = 5, + NBSD_SIGABRT = 6, + NBSD_SIGEMT = 7, + NBSD_SIGFPE = 8, + NBSD_SIGKILL = 9, + NBSD_SIGBUS = 10, + NBSD_SIGSEGV = 11, + NBSD_SIGSYS = 12, + NBSD_SIGPIPE = 13, + NBSD_SIGALRM = 14, + NBSD_SIGTERM = 15, + NBSD_SIGURG = 16, + NBSD_SIGSTOP = 17, + NBSD_SIGTSTP = 18, + NBSD_SIGCONT = 19, + NBSD_SIGCHLD = 20, + NBSD_SIGTTIN = 21, + NBSD_SIGTTOU = 22, + NBSD_SIGIO = 23, + NBSD_SIGXCPU = 24, + NBSD_SIGXFSZ = 25, + NBSD_SIGVTALRM = 26, + NBSD_SIGPROF = 27, + NBSD_SIGWINCH = 28, + NBSD_SIGINFO = 29, + NBSD_SIGUSR1 = 30, + NBSD_SIGUSR2 = 31, + NBSD_SIGPWR = 32, + NBSD_SIGRTMIN = 33, + NBSD_SIGRTMAX = 63, + }; + +/* Implement the "gdb_signal_from_target" gdbarch method. */ + +static enum gdb_signal +nbsd_gdb_signal_from_target (struct gdbarch *gdbarch, int signal) +{ + switch (signal) + { + case 0: + return GDB_SIGNAL_0; + + case NBSD_SIGHUP: + return GDB_SIGNAL_HUP; + + case NBSD_SIGINT: + return GDB_SIGNAL_INT; + + case NBSD_SIGQUIT: + return GDB_SIGNAL_QUIT; + + case NBSD_SIGILL: + return GDB_SIGNAL_ILL; + + case NBSD_SIGTRAP: + return GDB_SIGNAL_TRAP; + + case NBSD_SIGABRT: + return GDB_SIGNAL_ABRT; + + case NBSD_SIGEMT: + return GDB_SIGNAL_EMT; + + case NBSD_SIGFPE: + return GDB_SIGNAL_FPE; + + case NBSD_SIGKILL: + return GDB_SIGNAL_KILL; + + case NBSD_SIGBUS: + return GDB_SIGNAL_BUS; + + case NBSD_SIGSEGV: + return GDB_SIGNAL_SEGV; + + case NBSD_SIGSYS: + return GDB_SIGNAL_SYS; + + case NBSD_SIGPIPE: + return GDB_SIGNAL_PIPE; + + case NBSD_SIGALRM: + return GDB_SIGNAL_ALRM; + + case NBSD_SIGTERM: + return GDB_SIGNAL_TERM; + + case NBSD_SIGURG: + return GDB_SIGNAL_URG; + + case NBSD_SIGSTOP: + return GDB_SIGNAL_STOP; + + case NBSD_SIGTSTP: + return GDB_SIGNAL_TSTP; + + case NBSD_SIGCONT: + return GDB_SIGNAL_CONT; + + case NBSD_SIGCHLD: + return GDB_SIGNAL_CHLD; + + case NBSD_SIGTTIN: + return GDB_SIGNAL_TTIN; + + case NBSD_SIGTTOU: + return GDB_SIGNAL_TTOU; + + case NBSD_SIGIO: + return GDB_SIGNAL_IO; + + case NBSD_SIGXCPU: + return GDB_SIGNAL_XCPU; + + case NBSD_SIGXFSZ: + return GDB_SIGNAL_XFSZ; + + case NBSD_SIGVTALRM: + return GDB_SIGNAL_VTALRM; + + case NBSD_SIGPROF: + return GDB_SIGNAL_PROF; + + case NBSD_SIGWINCH: + return GDB_SIGNAL_WINCH; + + case NBSD_SIGINFO: + return GDB_SIGNAL_INFO; + + case NBSD_SIGUSR1: + return GDB_SIGNAL_USR1; + + case NBSD_SIGUSR2: + return GDB_SIGNAL_USR2; + + case NBSD_SIGPWR: + return GDB_SIGNAL_PWR; + + /* SIGRTMIN and SIGRTMAX are not continuous in <gdb/signals.def>, + therefore we have to handle them here. */ + case NBSD_SIGRTMIN: + return GDB_SIGNAL_REALTIME_33; + + case NBSD_SIGRTMAX: + return GDB_SIGNAL_REALTIME_63; + } + + if (signal >= NBSD_SIGRTMIN + 1 && signal <= NBSD_SIGRTMAX - 1) + { + int offset = signal - NBSD_SIGRTMIN + 1; + + return (enum gdb_signal) ((int) GDB_SIGNAL_REALTIME_34 + offset); + } + + return GDB_SIGNAL_UNKNOWN; +} + +/* Implement the "gdb_signal_to_target" gdbarch method. */ + +static int +nbsd_gdb_signal_to_target (struct gdbarch *gdbarch, + enum gdb_signal signal) +{ + switch (signal) + { + case GDB_SIGNAL_0: + return 0; + + case GDB_SIGNAL_HUP: + return NBSD_SIGHUP; + + case GDB_SIGNAL_INT: + return NBSD_SIGINT; + + case GDB_SIGNAL_QUIT: + return NBSD_SIGQUIT; + + case GDB_SIGNAL_ILL: + return NBSD_SIGILL; + + case GDB_SIGNAL_TRAP: + return NBSD_SIGTRAP; + + case GDB_SIGNAL_ABRT: + return NBSD_SIGABRT; + + case GDB_SIGNAL_EMT: + return NBSD_SIGEMT; + + case GDB_SIGNAL_FPE: + return NBSD_SIGFPE; + + case GDB_SIGNAL_KILL: + return NBSD_SIGKILL; + + case GDB_SIGNAL_BUS: + return NBSD_SIGBUS; + + case GDB_SIGNAL_SEGV: + return NBSD_SIGSEGV; + + case GDB_SIGNAL_SYS: + return NBSD_SIGSYS; + + case GDB_SIGNAL_PIPE: + return NBSD_SIGPIPE; + + case GDB_SIGNAL_ALRM: + return NBSD_SIGALRM; + + case GDB_SIGNAL_TERM: + return NBSD_SIGTERM; + + case GDB_SIGNAL_URG: + return NBSD_SIGSTOP; + + case GDB_SIGNAL_TSTP: + return NBSD_SIGTSTP; + + case GDB_SIGNAL_CONT: + return NBSD_SIGCONT; + + case GDB_SIGNAL_CHLD: + return NBSD_SIGCHLD; + + case GDB_SIGNAL_TTIN: + return NBSD_SIGTTIN; + + case GDB_SIGNAL_TTOU: + return NBSD_SIGTTOU; + + case GDB_SIGNAL_IO: + return NBSD_SIGIO; + + case GDB_SIGNAL_XCPU: + return NBSD_SIGXCPU; + + case GDB_SIGNAL_XFSZ: + return NBSD_SIGXFSZ; + + case GDB_SIGNAL_VTALRM: + return NBSD_SIGVTALRM; + + case GDB_SIGNAL_PROF: + return NBSD_SIGPROF; + + case GDB_SIGNAL_WINCH: + return NBSD_SIGWINCH; + + case GDB_SIGNAL_INFO: + return NBSD_SIGINFO; + + case GDB_SIGNAL_USR1: + return NBSD_SIGUSR1; + + case GDB_SIGNAL_USR2: + return NBSD_SIGUSR2; + + case GDB_SIGNAL_PWR: + return NBSD_SIGPWR; + + /* GDB_SIGNAL_REALTIME_33 is not continuous in <gdb/signals.def>, + therefore we have to handle it here. */ + case GDB_SIGNAL_REALTIME_33: + return NBSD_SIGRTMIN; + + /* Same comment applies to _64. */ + case GDB_SIGNAL_REALTIME_63: + return NBSD_SIGRTMAX; + } + + if (signal >= GDB_SIGNAL_REALTIME_34 + && signal <= GDB_SIGNAL_REALTIME_62) + { + int offset = signal - GDB_SIGNAL_REALTIME_32; + + return NBSD_SIGRTMIN + 1 + offset; + } + + return -1; +} + +/* Shared library resolver handling. */ + +static CORE_ADDR +nbsd_skip_solib_resolver (struct gdbarch *gdbarch, CORE_ADDR pc) +{ + struct bound_minimal_symbol msym; + + msym = lookup_minimal_symbol ("_rtld_bind_start", NULL, NULL); + if (msym.minsym && BMSYMBOL_VALUE_ADDRESS (msym) == pc) + return frame_unwind_caller_pc (get_current_frame ()); + else + return find_solib_trampoline_target (get_current_frame (), pc); +} + +static struct gdbarch_data *nbsd_gdbarch_data_handle; + +struct nbsd_gdbarch_data +{ + struct type *siginfo_type; +}; + +static void * +init_nbsd_gdbarch_data (struct gdbarch *gdbarch) +{ + return GDBARCH_OBSTACK_ZALLOC (gdbarch, struct nbsd_gdbarch_data); +} + +static struct nbsd_gdbarch_data * +get_nbsd_gdbarch_data (struct gdbarch *gdbarch) +{ + return ((struct nbsd_gdbarch_data *) + gdbarch_data (gdbarch, nbsd_gdbarch_data_handle)); +} + +/* Implement the "get_siginfo_type" gdbarch method. */ + +static struct type * +nbsd_get_siginfo_type (struct gdbarch *gdbarch) +{ + nbsd_gdbarch_data *nbsd_gdbarch_data = get_nbsd_gdbarch_data (gdbarch); + if (nbsd_gdbarch_data->siginfo_type != NULL) + return nbsd_gdbarch_data->siginfo_type; + + type *char_type = builtin_type (gdbarch)->builtin_char; + type *int_type = builtin_type (gdbarch)->builtin_int; + type *long_type = builtin_type (gdbarch)->builtin_long; + + type *void_ptr_type + = lookup_pointer_type (builtin_type (gdbarch)->builtin_void); + + type *int32_type = builtin_type (gdbarch)->builtin_int32; + type *uint32_type = builtin_type (gdbarch)->builtin_uint32; + type *uint64_type = builtin_type (gdbarch)->builtin_uint64; + + bool lp64 = TYPE_LENGTH (void_ptr_type) == 8; + size_t char_bits = gdbarch_addressable_memory_unit_size (gdbarch) * 8; + + /* pid_t */ + type *pid_type = arch_type (gdbarch, TYPE_CODE_TYPEDEF, + TYPE_LENGTH (int32_type) * char_bits, "pid_t"); + TYPE_TARGET_TYPE (pid_type) = int32_type; + + /* uid_t */ + type *uid_type = arch_type (gdbarch, TYPE_CODE_TYPEDEF, + TYPE_LENGTH (uint32_type) * char_bits, "uid_t"); + TYPE_TARGET_TYPE (uid_type) = uint32_type; + + /* clock_t */ + type *clock_type = arch_type (gdbarch, TYPE_CODE_TYPEDEF, + TYPE_LENGTH (int_type) * char_bits, "clock_t"); + TYPE_TARGET_TYPE (clock_type) = int_type; + + /* lwpid_t */ + type *lwpid_type = arch_type (gdbarch, TYPE_CODE_TYPEDEF, + TYPE_LENGTH (int32_type) * char_bits, + "lwpid_t"); + TYPE_TARGET_TYPE (lwpid_type) = int32_type; + + /* union sigval */ + type *sigval_type = arch_composite_type (gdbarch, NULL, TYPE_CODE_UNION); + sigval_type->set_name (gdbarch_obstack_strdup (gdbarch, "sigval")); + append_composite_type_field (sigval_type, "sival_int", int_type); + append_composite_type_field (sigval_type, "sival_ptr", void_ptr_type); + + /* union _option */ + type *option_type = arch_composite_type (gdbarch, NULL, TYPE_CODE_UNION); + option_type->set_name (gdbarch_obstack_strdup (gdbarch, "_option")); + append_composite_type_field (option_type, "_pe_other_pid", pid_type); + append_composite_type_field (option_type, "_pe_lwp", lwpid_type); + + /* union _reason */ + type *reason_type = arch_composite_type (gdbarch, NULL, TYPE_CODE_UNION); + + /* _rt */ + type *t = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT); + append_composite_type_field (t, "_pid", pid_type); + append_composite_type_field (t, "_uid", uid_type); + append_composite_type_field (t, "_value", sigval_type); + append_composite_type_field (reason_type, "_rt", t); + + /* _child */ + t = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT); + append_composite_type_field (t, "_pid", pid_type); + append_composite_type_field (t, "_uid", uid_type); + append_composite_type_field (t, "_status", int_type); + append_composite_type_field (t, "_utime", clock_type); + append_composite_type_field (t, "_stime", clock_type); + append_composite_type_field (reason_type, "_child", t); + + /* _fault */ + t = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT); + append_composite_type_field (t, "_addr", void_ptr_type); + append_composite_type_field (t, "_trap", int_type); + append_composite_type_field (t, "_trap2", int_type); + append_composite_type_field (t, "_trap3", int_type); + append_composite_type_field (reason_type, "_fault", t); + + /* _poll */ + t = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT); + append_composite_type_field (t, "_band", long_type); + append_composite_type_field (t, "_fd", int_type); + append_composite_type_field (reason_type, "_poll", t); + + /* _syscall */ + t = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT); + append_composite_type_field (t, "_sysnum", int_type); + append_composite_type_field (t, "_retval", + init_vector_type (int_type, 2)); + append_composite_type_field (t, "_error", int_type); + append_composite_type_field (t, "_args", + init_vector_type (uint64_type, 8)); + append_composite_type_field (reason_type, "_syscall", t); + + /* _ptrace_state */ + t = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT); + append_composite_type_field (t, "_pe_report_event", int_type); + append_composite_type_field (t, "_option", option_type); + append_composite_type_field (reason_type, "_ptrace_state", t); + + /* struct _ksiginfo */ + type *ksiginfo_type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT); + ksiginfo_type->set_name (gdbarch_obstack_strdup (gdbarch, "_ksiginfo")); + append_composite_type_field (ksiginfo_type, "_signo", int_type); + append_composite_type_field (ksiginfo_type, "_code", int_type); + append_composite_type_field (ksiginfo_type, "_errno", int_type); + if (lp64) + append_composite_type_field (ksiginfo_type, "_pad", int_type); + append_composite_type_field (ksiginfo_type, "_reason", reason_type); + + /* union siginfo */ + type *siginfo_type = arch_composite_type (gdbarch, NULL, TYPE_CODE_UNION); + siginfo_type->set_name (gdbarch_obstack_strdup (gdbarch, "siginfo")); + append_composite_type_field (siginfo_type, "si_pad", + init_vector_type (char_type, 128)); + append_composite_type_field (siginfo_type, "_info", ksiginfo_type); + + nbsd_gdbarch_data->siginfo_type = siginfo_type; + + return siginfo_type; +} + +/* See nbsd-tdep.h. */ + +void +nbsd_info_proc_mappings_header (int addr_bit) +{ + printf_filtered (_("Mapped address spaces:\n\n")); + if (addr_bit == 64) + { + printf_filtered (" %18s %18s %10s %10s %9s %s\n", + "Start Addr", + " End Addr", + " Size", " Offset", "Flags ", "File"); + } + else + { + printf_filtered ("\t%10s %10s %10s %10s %9s %s\n", + "Start Addr", + " End Addr", + " Size", " Offset", "Flags ", "File"); + } +} + +/* Helper function to generate mappings flags for a single VM map + entry in 'info proc mappings'. */ + +static const char * +nbsd_vm_map_entry_flags (int kve_flags, int kve_protection) +{ + static char vm_flags[9]; + + vm_flags[0] = (kve_protection & KINFO_VME_PROT_READ) ? 'r' : '-'; + vm_flags[1] = (kve_protection & KINFO_VME_PROT_WRITE) ? 'w' : '-'; + vm_flags[2] = (kve_protection & KINFO_VME_PROT_EXEC) ? 'x' : '-'; + vm_flags[3] = ' '; + vm_flags[4] = (kve_flags & KINFO_VME_FLAG_COW) ? 'C' : '-'; + vm_flags[5] = (kve_flags & KINFO_VME_FLAG_NEEDS_COPY) ? 'N' : '-'; + vm_flags[6] = (kve_flags & KINFO_VME_FLAG_PAGEABLE) ? 'P' : '-'; + vm_flags[7] = (kve_flags & KINFO_VME_FLAG_GROWS_UP) ? 'U' + : (kve_flags & KINFO_VME_FLAG_GROWS_DOWN) ? 'D' : '-'; + vm_flags[8] = '\0'; + + return vm_flags; +} + +void +nbsd_info_proc_mappings_entry (int addr_bit, ULONGEST kve_start, + ULONGEST kve_end, ULONGEST kve_offset, + int kve_flags, int kve_protection, + const char *kve_path) +{ + if (addr_bit == 64) + { + printf_filtered (" %18s %18s %10s %10s %9s %s\n", + hex_string (kve_start), + hex_string (kve_end), + hex_string (kve_end - kve_start), + hex_string (kve_offset), + nbsd_vm_map_entry_flags (kve_flags, kve_protection), + kve_path); + } + else + { + printf_filtered ("\t%10s %10s %10s %10s %9s %s\n", + hex_string (kve_start), + hex_string (kve_end), + hex_string (kve_end - kve_start), + hex_string (kve_offset), + nbsd_vm_map_entry_flags (kve_flags, kve_protection), + kve_path); + } +} + +/* Implement the "get_syscall_number" gdbarch method. */ + +static LONGEST +nbsd_get_syscall_number (struct gdbarch *gdbarch, thread_info *thread) +{ + + /* NetBSD doesn't use gdbarch_get_syscall_number since NetBSD + native targets fetch the system call number from the + 'si_sysnum' member of siginfo_t in nbsd_nat_target::wait. + However, system call catching requires this function to be + set. */ + + internal_error (__FILE__, __LINE__, _("nbsd_get_sycall_number called")); +} + +/* See nbsd-tdep.h. */ + +void +nbsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) +{ + set_gdbarch_gdb_signal_from_target (gdbarch, nbsd_gdb_signal_from_target); + set_gdbarch_gdb_signal_to_target (gdbarch, nbsd_gdb_signal_to_target); + set_gdbarch_skip_solib_resolver (gdbarch, nbsd_skip_solib_resolver); + set_gdbarch_auxv_parse (gdbarch, svr4_auxv_parse); + set_gdbarch_get_siginfo_type (gdbarch, nbsd_get_siginfo_type); + + /* `catch syscall' */ + set_xml_syscall_file_name (gdbarch, "syscalls/netbsd.xml"); + set_gdbarch_get_syscall_number (gdbarch, nbsd_get_syscall_number); +} + +void _initialize_nbsd_tdep (); +void +_initialize_nbsd_tdep () +{ + nbsd_gdbarch_data_handle + = gdbarch_data_register_post_init (init_nbsd_gdbarch_data); +} diff -Nru gdb-9.1/gdb/nbsd-tdep.h gdb-10.2/gdb/nbsd-tdep.h --- gdb-9.1/gdb/nbsd-tdep.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/nbsd-tdep.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Common target-dependent definitions for NetBSD systems. - Copyright (C) 2002-2020 Free Software Foundation, Inc. + Copyright (C) 2002-2021 Free Software Foundation, Inc. Contributed by Wasabi Systems, Inc. This file is part of GDB. @@ -25,4 +25,26 @@ int nbsd_pc_in_sigtramp (CORE_ADDR, const char *); +/* NetBSD specific set of ABI-related routines. */ + +void nbsd_init_abi (struct gdbarch_info, struct gdbarch *); + +/* Output the header for "info proc mappings". ADDR_BIT is the size + of a virtual address in bits. */ + +extern void nbsd_info_proc_mappings_header (int addr_bit); + +/* Output description of a single memory range for "info proc + mappings". ADDR_BIT is the size of a virtual address in bits. The + KVE_START, KVE_END, KVE_OFFSET, KVE_FLAGS, and KVE_PROTECTION + parameters should contain the value of the corresponding fields in + a 'struct kinfo_vmentry'. The KVE_PATH parameter should contain a + pointer to the 'kve_path' field in a 'struct kinfo_vmentry'. */ + +extern void nbsd_info_proc_mappings_entry (int addr_bit, ULONGEST kve_start, + ULONGEST kve_end, + ULONGEST kve_offset, + int kve_flags, int kve_protection, + const char *kve_path); + #endif /* NBSD_TDEP_H */ diff -Nru gdb-9.1/gdb/nds32-tdep.c gdb-10.2/gdb/nds32-tdep.c --- gdb-9.1/gdb/nds32-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/nds32-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for the NDS32 architecture, for GDB. - Copyright (C) 2013-2020 Free Software Foundation, Inc. + Copyright (C) 2013-2021 Free Software Foundation, Inc. Contributed by Andes Technology Corporation. This file is part of GDB. @@ -34,7 +34,7 @@ #include "dis-asm.h" #include "user-regs.h" #include "elf-bfd.h" -#include "dwarf2-frame.h" +#include "dwarf2/frame.h" #include "remote.h" #include "target-descriptions.h" @@ -1402,13 +1402,13 @@ while (1) { t = check_typedef (t); - typecode = TYPE_CODE (t); + typecode = t->code (); if (typecode != TYPE_CODE_STRUCT) break; - else if (TYPE_NFIELDS (t) != 1) + else if (t->num_fields () != 1) return 0; else - t = TYPE_FIELD_TYPE (t, 0); + t = t->field (0).type (); } return typecode == TYPE_CODE_FLT; @@ -1496,7 +1496,7 @@ and pushes all unnamed arguments in stack. */ if (abi_use_fpr && TYPE_VARARGS (func_type) - && i >= TYPE_NFIELDS (func_type)) + && i >= func_type->num_fields ()) goto use_stack; /* Try to use FPRs to pass arguments only when @@ -2096,8 +2096,9 @@ return gdbarch; } +void _initialize_nds32_tdep (); void -_initialize_nds32_tdep (void) +_initialize_nds32_tdep () { /* Initialize gdbarch. */ register_gdbarch_init (bfd_arch_nds32, nds32_gdbarch_init); diff -Nru gdb-9.1/gdb/nds32-tdep.h gdb-10.2/gdb/nds32-tdep.h --- gdb-9.1/gdb/nds32-tdep.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/nds32-tdep.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for the NDS32 architecture, for GDB. - Copyright (C) 2013-2020 Free Software Foundation, Inc. + Copyright (C) 2013-2021 Free Software Foundation, Inc. Contributed by Andes Technology Corporation. This file is part of GDB. diff -Nru gdb-9.1/gdb/NEWS gdb-10.2/gdb/NEWS --- gdb-9.1/gdb/NEWS 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/NEWS 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,172 @@ What has changed in GDB? (Organized release by release) +*** Changes in GDB 10 + +* There are new feature names for ARC targets: "org.gnu.gdb.arc.core" + and "org.gnu.gdb.arc.aux". The old names are still supported but + must be considered obsolete. They will be deprecated after some + grace period. + +* Help and apropos commands will now show the documentation of a + command only once, even if that command has one or more aliases. + These commands now show the command name, then all of its aliases, + and finally the description of the command. + +* 'help aliases' now shows only the user defined aliases. GDB predefined + aliases are shown together with their aliased command. + +* GDB now supports debuginfod, an HTTP server for distributing ELF/DWARF + debugging information as well as source code. + + When built with debuginfod, GDB can automatically query debuginfod + servers for the separate debug files and source code of the executable + being debugged. + + To build GDB with debuginfod, pass --with-debuginfod to configure (this + requires libdebuginfod, the debuginfod client library). + + debuginfod is distributed with elfutils, starting with version 0.178. + + You can get the latest version from https://sourceware.org/elfutils. + +* Multi-target debugging support + + GDB now supports debugging multiple target connections + simultaneously. For example, you can now have each inferior + connected to different remote servers running in different machines, + or have one inferior debugging a local native process, an inferior + debugging a core dump, etc. + + This support is experimental and comes with some limitations -- you + can only resume multiple targets simultaneously if all targets + support non-stop mode, and all remote stubs or servers must support + the same set of remote protocol features exactly. See also "info + connections" and "add-inferior -no-connection" below, and "maint set + target-non-stop" in the user manual. + +* New features in the GDB remote stub, GDBserver + + ** GDBserver is now supported on ARC GNU/Linux. + + ** GDBserver is now supported on RISC-V GNU/Linux. + + ** GDBserver no longer supports these host triplets: + + i[34567]86-*-lynxos* + powerpc-*-lynxos* + i[34567]86-*-nto* + bfin-*-*linux* + crisv32-*-linux* + cris-*-linux* + m32r*-*-linux* + tilegx-*-linux* + arm*-*-mingw32ce* + i[34567]86-*-mingw32ce* + +* Debugging MS-Windows processes now sets $_exitsignal when the + inferior is terminated by a signal, instead of setting $_exitcode. + +* Multithreaded symbol loading has now been enabled by default on systems + that support it (see entry for GDB 9, below), providing faster + performance for programs with many symbols. + +* The $_siginfo convenience variable now also works on Windows targets, + and will display the EXCEPTION_RECORD of the last handled exception. + +* TUI windows can now be arranged horizontally. + +* The command history filename can now be set to the empty string + either using 'set history filename' or by setting 'GDBHISTFILE=' in + the environment. The effect of setting this filename to the empty + string is that GDB will not try to load any previous command + history. + +* On Windows targets, it is now possible to debug 32-bit programs with a + 64-bit GDB. + +* New commands + +set exec-file-mismatch -- Set exec-file-mismatch handling (ask|warn|off). +show exec-file-mismatch -- Show exec-file-mismatch handling (ask|warn|off). + Set or show the option 'exec-file-mismatch'. When GDB attaches to a + running process, this new option indicates whether to detect + a mismatch between the current executable file loaded by GDB and the + executable file used to start the process. If 'ask', the default, + display a warning and ask the user whether to load the process + executable file; if 'warn', just display a warning; if 'off', don't + attempt to detect a mismatch. + +tui new-layout NAME WINDOW WEIGHT [WINDOW WEIGHT]... + Define a new TUI layout, specifying its name and the windows that + will be displayed. + +maintenance print xml-tdesc [FILE] + Prints the current target description as an XML document. If the + optional FILE is provided (which is an XML target description) then + the target description is read from FILE into GDB, and then + reprinted. + +maintenance print core-file-backed-mappings + Prints file-backed mappings loaded from a core file's note section. + Output is expected to be similar to that of "info proc mappings". + +* Changed commands + +alias [-a] [--] ALIAS = COMMAND [DEFAULT-ARGS...] + The alias command can now specify default args for an alias. + GDB automatically prepends the alias default args to the argument list + provided explicitly by the user. + For example, to have a backtrace with full details, you can define + an alias 'bt_ALL' as + 'alias bt_ALL = backtrace -entry-values both -frame-arg all + -past-main -past-entry -full'. + Alias default arguments can also use a set of nested 'with' commands, + e.g. 'alias pp10 = with print pretty -- with print elem 10 -- print' + defines the alias pp10 that will pretty print a maximum of 10 elements + of the given expression (if the expression is an array). + +* New targets + +GNU/Linux/RISC-V (gdbserver) riscv*-*-linux* +BPF bpf-unknown-none + +* Python API + + ** gdb.register_window_type can be used to implement new TUI windows + in Python. + + ** Dynamic types can now be queried. gdb.Type has a new attribute, + "dynamic", and gdb.Type.sizeof can be None for a dynamic type. A + field of a dynamic type may have None for its "bitpos" attribute + as well. + + ** Commands written in Python can be in the "TUI" help class by + registering with the new constant gdb.COMMAND_TUI. + + ** New method gdb.PendingFrame.architecture () to retrieve the + architecture of the pending frame. + + ** New gdb.Architecture.registers method that returns a + gdb.RegisterDescriptorIterator object, an iterator that returns + gdb.RegisterDescriptor objects. The new RegisterDescriptor is a + way to query the registers available for an architecture. + + ** New gdb.Architecture.register_groups method that returns a + gdb.RegisterGroupIterator object, an iterator that returns + gdb.RegisterGroup objects. The new RegisterGroup is a way to + discover the available register groups. + +* Guile API + + ** GDB can now be built with GNU Guile 3.0 and 2.2 in addition to 2.0. + + ** Procedures 'memory-port-read-buffer-size', + 'set-memory-port-read-buffer-size!', 'memory-port-write-buffer-size', + and 'set-memory-port-write-buffer-size!' are deprecated. When + using Guile 2.2 and later, users who need to control the size of + a memory port's internal buffer can use the 'setvbuf' procedure. + *** Changes in GDB 9 * 'thread-exited' event is now available in the annotations interface. @@ -234,6 +400,9 @@ "set debug remote". The default is 512 bytes. +info connections + Lists the target connections currently in use. + * Changed commands help @@ -278,6 +447,17 @@ old commands are now deprecated and may be removed in a future release. +add-inferior [-no-connection] + The add-inferior command now supports a "-no-connection" flag that + makes the new inferior start with no target connection associated. + By default, the new inferior inherits the target connection of the + current inferior. See also "info connections". + +info inferior + This command's output now includes a new "Connection" column + indicating which target connection an inferior is bound to. See + "info connections" above. + maint test-options require-delimiter maint test-options unknown-is-error maint test-options unknown-is-operand @@ -527,7 +707,7 @@ set debug compile-cplus-types show debug compile-cplus-types Control the display of debug output about type conversion in the - C++ compile feature. Commands have no effect while compiliong + C++ compile feature. Commands have no effect while compiling for other languages. set debug skip @@ -1270,7 +1450,7 @@ Additionally, a file spec and a function spec may now be combined. maint info line-table REGEXP - Display the contents of GDB's internal line table data struture. + Display the contents of GDB's internal line table data structure. maint selftest Run any GDB unit tests that were compiled in. @@ -1442,7 +1622,7 @@ set ada print-signatures on|off show ada print-signatures" Control whether parameter types and return types are displayed in overloads - selection menus. It is activaled (@code{on}) by default. + selection menus. It is activated (@code{on}) by default. set max-value-size show max-value-size @@ -1774,7 +1954,7 @@ Set the requested ring buffer size for branch tracing in BTS format. Qbtrace:pt - Enable Intel Procesor Trace-based branch tracing for the current + Enable Intel Processor Trace-based branch tracing for the current process. The remote stub reports support for this packet to GDB's qSupported query. @@ -2323,7 +2503,7 @@ * Newly installed $prefix/bin/gcore acts as a shell interface for the GDB command gcore. -* GDB now implements the the C++ 'typeid' operator. +* GDB now implements the C++ 'typeid' operator. * The new convenience variable $_exception holds the exception being thrown or caught at an exception-related catchpoint. @@ -4127,7 +4307,7 @@ * Removed remote protocol undocumented extension An undocumented extension to the remote protocol's `S' stop reply - packet that permited the stub to pass a process id was removed. + packet that permitted the stub to pass a process id was removed. Remote servers should use the `T' stop reply packet instead. * GDB now supports multiple function calling conventions according to the @@ -4147,7 +4327,7 @@ * Watchpoints can now be set on unreadable memory locations, e.g. addresses which will be allocated using malloc later in program execution. -* The qXfer:libraries:read remote procotol packet now allows passing a +* The qXfer:libraries:read remote protocol packet now allows passing a list of section offsets. * On GNU/Linux, GDB can now attach to stopped processes. Several race @@ -4521,7 +4701,7 @@ * New targets NetBSD/hppa hppa*-*-netbsd* -Xtensa GNU/Lunux xtensa*-*-linux* +Xtensa GNU/Linux xtensa*-*-linux* * Change in command line behavior -- corefiles vs. process ids. @@ -5107,7 +5287,7 @@ features including 32x64 (e.g., 64-bit amd64 GDB debugging a 32-bit i386 application). -GDB 6.3 will be the last release to include the the registers[] +GDB 6.3 will be the last release to include the registers[] compatibility module that allowed out-of-date configurations to continue to work. This change directly impacts the following configurations: @@ -5177,7 +5357,7 @@ * New ``start'' command. -This command runs the program until the begining of the main procedure. +This command runs the program until the beginning of the main procedure. * New BSD Kernel Data Access Library (libkvm) interface @@ -5374,7 +5554,7 @@ * "set prompt-escape-char" command deleted. The command "set prompt-escape-char" has been deleted. This command, -and its very obscure effet on GDB's prompt, was never documented, +and its very obscure effect on GDB's prompt, was never documented, tested, nor mentioned in the NEWS file. * OBSOLETE configurations and files @@ -6538,7 +6718,7 @@ remote side. The data cache could lead to incorrect results because it doesn't know about volatile variables, thus making it impossible to debug targets which use memory mapped I/O devices. `set remotecache -off' turns the the data cache off. +off' turns the data cache off. * Remote targets may have threads @@ -7084,7 +7264,7 @@ * Major bug fixes -The crash that occured when debugging Sun Ansi-C compiled binaries is +The crash that occurred when debugging Sun Ansi-C compiled binaries is fixed. This was due to mishandling of the extra N_SO stabs output by the compiler. @@ -7185,7 +7365,7 @@ Recent versions of gcc have a bug in how they emit debugging information for C++ methods (when using dbx-style stabs). The file 'gcc.patch' (in this directory) can be applied to gcc to fix the problem. Alternatively, if you -can't fix gcc, you can #define GCC_MANGLE_BUG when compling gdb/symtab.c. The +can't fix gcc, you can #define GCC_MANGLE_BUG when compiling gdb/symtab.c. The usual symptom is difficulty with setting breakpoints on methods. GDB complains about the method being non-existent. (We believe that version 2.2.2 of GCC has this problem.) @@ -7271,7 +7451,7 @@ * New malloc package GDB now uses a new memory manager called mmalloc, based on gmalloc. -Mmalloc is capable of handling mutiple heaps of memory. It is also +Mmalloc is capable of handling multiple heaps of memory. It is also capable of saving a heap to a file, and then mapping it back in later. This can be used to greatly speedup the startup of GDB by using a pre-parsed symbol table which lives in a mmalloc managed heap. For diff -Nru gdb-9.1/gdb/nios2-linux-tdep.c gdb-10.2/gdb/nios2-linux-tdep.c --- gdb-9.1/gdb/nios2-linux-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/nios2-linux-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Target-dependent code for GNU/Linux on Nios II. - Copyright (C) 2012-2020 Free Software Foundation, Inc. + Copyright (C) 2012-2021 Free Software Foundation, Inc. Contributed by Mentor Graphics, Inc. This file is part of GDB. @@ -248,8 +248,9 @@ tdep->jb_pc = 10; } +void _initialize_nios2_linux_tdep (); void -_initialize_nios2_linux_tdep (void) +_initialize_nios2_linux_tdep () { const struct bfd_arch_info *arch_info; diff -Nru gdb-9.1/gdb/nios2-tdep.c gdb-10.2/gdb/nios2-tdep.c --- gdb-9.1/gdb/nios2-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/nios2-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Target-machine dependent code for Nios II, for GDB. - Copyright (C) 2012-2020 Free Software Foundation, Inc. + Copyright (C) 2012-2021 Free Software Foundation, Inc. Contributed by Peter Brookes (pbrookes@altera.com) and Andrew Draper (adraper@altera.com). Contributed by Mentor Graphics, Inc. @@ -24,7 +24,7 @@ #include "frame-unwind.h" #include "frame-base.h" #include "trad-frame.h" -#include "dwarf2-frame.h" +#include "dwarf2/frame.h" #include "symtab.h" #include "inferior.h" #include "gdbtypes.h" @@ -2236,7 +2236,7 @@ static ULONGEST nios2_type_align (struct gdbarch *gdbarch, struct type *type) { - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_PTR: case TYPE_CODE_FUNC: @@ -2390,8 +2390,9 @@ return gdbarch; } +void _initialize_nios2_tdep (); void -_initialize_nios2_tdep (void) +_initialize_nios2_tdep () { gdbarch_register (bfd_arch_nios2, nios2_gdbarch_init, NULL); initialize_tdesc_nios2 (); diff -Nru gdb-9.1/gdb/nios2-tdep.h gdb-10.2/gdb/nios2-tdep.h --- gdb-9.1/gdb/nios2-tdep.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/nios2-tdep.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Target-dependent header for the Nios II architecture, for GDB. - Copyright (C) 2012-2020 Free Software Foundation, Inc. + Copyright (C) 2012-2021 Free Software Foundation, Inc. Contributed by Mentor Graphics, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/nto-procfs.c gdb-10.2/gdb/nto-procfs.c --- gdb-9.1/gdb/nto-procfs.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/nto-procfs.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,7 +1,7 @@ /* Machine independent support for QNX Neutrino /proc (process file system) for GDB. Written by Colin Burgess at QNX Software Systems Limited. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. Contributed by QNX Software Systems Ltd. @@ -393,7 +393,7 @@ prune_threads (); - pid = inferior_ptid.pid (); + pid = current_inferior ()->pid; status.tid = 1; @@ -409,7 +409,7 @@ (e.g. thread exited). */ continue; ptid = ptid_t (pid, 0, tid); - new_thread = find_thread_ptid (ptid); + new_thread = find_thread_ptid (this, ptid); if (!new_thread) new_thread = add_thread (ptid); update_thread_private_data (new_thread, tid, status.state, 0); @@ -693,7 +693,6 @@ void nto_procfs_target::attach (const char *args, int from_tty) { - char *exec_file; int pid; struct inferior *inf; @@ -704,7 +703,7 @@ if (from_tty) { - exec_file = (char *) get_exec_file (0); + const char *exec_file = get_exec_file (0); if (exec_file) printf_unfiltered ("Attaching to program `%s', %s\n", exec_file, @@ -713,7 +712,7 @@ printf_unfiltered ("Attaching to %s\n", target_pid_to_str (ptid_t (pid)).c_str ()); } - inferior_ptid = do_attach (ptid_t (pid)); + ptid_t ptid = do_attach (ptid_t (pid)); inf = current_inferior (); inferior_appeared (inf, pid); inf->attach_flag = 1; @@ -721,7 +720,9 @@ if (!target_is_pushed (ops)) push_target (ops); - procfs_update_thread_list (ops); + update_thread_list (); + + switch_to_thread (find_thread_ptid (this, ptid)); } void @@ -1001,19 +1002,16 @@ void nto_procfs_target::detach (inferior *inf, int from_tty) { - int pid; - target_announce_detach (); if (siggnal) - SignalKill (nto_node (), inferior_ptid.pid (), 0, 0, 0, 0); + SignalKill (nto_node (), inf->pid, 0, 0, 0, 0); close (ctl_fd); ctl_fd = -1; - pid = inferior_ptid.pid (); - inferior_ptid = null_ptid; - detach_inferior (pid); + switch_to_no_thread (); + detach_inferior (inf->pid); init_thread_list (); inf_child_maybe_unpush_target (ops); } @@ -1133,7 +1131,7 @@ SignalKill (nto_node (), inferior_ptid.pid (), 0, SIGKILL, 0, 0); close (ctl_fd); } - inferior_ptid = null_ptid; + switch_to_no_thread (); init_thread_list (); inf_child_mourn_inferior (ops); } @@ -1210,12 +1208,11 @@ const char *in = "", *out = "", *err = ""; int fd, fds[3]; sigset_t set; - const char *inferior_io_terminal = get_inferior_io_terminal (); struct inferior *inf; argv = xmalloc ((allargs.size () / (unsigned) 2 + 2) * sizeof (*argv)); - argv[0] = get_exec_file (1); + argv[0] = const_cast<char *> (get_exec_file (1)); if (!argv[0]) { if (exec_file) @@ -1235,14 +1232,15 @@ /* If the user specified I/O via gdb's --tty= arg, use it, but only if the i/o is not also being specified via redirection. */ - if (inferior_io_terminal) + const char *inferior_tty = current_inferior ()->tty (); + if (inferior_tty != nullptr) { if (!in[0]) - in = inferior_io_terminal; + in = inferior_tty; if (!out[0]) - out = inferior_io_terminal; + out = inferior_tty; if (!err[0]) - err = inferior_io_terminal; + err = inferior_tty; } if (in[0]) @@ -1304,8 +1302,9 @@ if (fds[2] != STDERR_FILENO) close (fds[2]); - inferior_ptid = do_attach (ptid_t (pid)); - procfs_update_thread_list (ops); + ptid_t ptid = do_attach (ptid_t (pid)); + update_thread_list (); + switch_to_thread (find_thread_ptid (this, ptid)); inf = current_inferior (); inferior_appeared (inf, pid); @@ -1506,8 +1505,9 @@ #define OSTYPE_NTO 1 +void _initialize_procfs (); void -_initialize_procfs (void) +_initialize_procfs () { sigset_t set; diff -Nru gdb-9.1/gdb/nto-tdep.c gdb-10.2/gdb/nto-tdep.c --- gdb-9.1/gdb/nto-tdep.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/nto-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* nto-tdep.c - general QNX Neutrino target functionality. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. Contributed by QNX Software Systems Ltd. diff -Nru gdb-9.1/gdb/nto-tdep.h gdb-10.2/gdb/nto-tdep.h --- gdb-9.1/gdb/nto-tdep.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/nto-tdep.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* nto-tdep.h - QNX Neutrino target header. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. Contributed by QNX Software Systems Ltd. diff -Nru gdb-9.1/gdb/objc-lang.c gdb-10.2/gdb/objc-lang.c --- gdb-9.1/gdb/objc-lang.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/objc-lang.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Objective-C language support routines for GDB, the GNU debugger. - Copyright (C) 2002-2020 Free Software Foundation, Inc. + Copyright (C) 2002-2021 Free Software Foundation, Inc. Contributed by Apple Computer, Inc. Written by Michael Snyder. @@ -95,7 +95,7 @@ else error (_("No struct type named %s."), name); } - if (TYPE_CODE (SYMBOL_TYPE (sym)) != TYPE_CODE_STRUCT) + if (SYMBOL_TYPE (sym)->code () != TYPE_CODE_STRUCT) { if (noerr) return 0; @@ -281,46 +281,6 @@ return NULL; /* Not an objc mangled name. */ } -/* la_sniff_from_mangled_name for ObjC. */ - -static int -objc_sniff_from_mangled_name (const char *mangled, char **demangled) -{ - *demangled = objc_demangle (mangled, 0); - return *demangled != NULL; -} - -/* Determine if we are currently in the Objective-C dispatch function. - If so, get the address of the method function that the dispatcher - would call and use that as the function to step into instead. Also - skip over the trampoline for the function (if any). This is better - for the user since they are only interested in stepping into the - method function anyway. */ -static CORE_ADDR -objc_skip_trampoline (struct frame_info *frame, CORE_ADDR stop_pc) -{ - struct gdbarch *gdbarch = get_frame_arch (frame); - CORE_ADDR real_stop_pc; - CORE_ADDR method_stop_pc; - - real_stop_pc = gdbarch_skip_trampoline_code (gdbarch, frame, stop_pc); - - if (real_stop_pc != 0) - find_objc_msgcall (real_stop_pc, &method_stop_pc); - else - find_objc_msgcall (stop_pc, &method_stop_pc); - - if (method_stop_pc) - { - real_stop_pc = gdbarch_skip_trampoline_code - (gdbarch, frame, method_stop_pc); - if (real_stop_pc == 0) - real_stop_pc = method_stop_pc; - } - - return real_stop_pc; -} - /* Table mapping opcodes into strings for printing operators and precedences of the operators. */ @@ -364,7 +324,10 @@ ".m", NULL }; -extern const struct language_defn objc_language_defn = { +/* Constant data representing the Objective-C language. */ + +extern const struct language_data objc_language_data = +{ "objective-c", /* Language name */ "Objective-C", language_objc, @@ -374,44 +337,94 @@ macro_expansion_c, objc_extensions, &exp_descriptor_standard, - c_parse, - null_post_parser, - c_printchar, /* Print a character constant */ - c_printstr, /* Function to print string constant */ - c_emit_char, - c_print_type, /* Print a type using appropriate syntax */ - c_print_typedef, /* Print a typedef using appropriate syntax */ - c_val_print, /* Print a value using appropriate syntax */ - c_value_print, /* Print a top-level value */ - default_read_var_value, /* la_read_var_value */ - objc_skip_trampoline, /* Language specific skip_trampoline */ "self", /* name_of_this */ false, /* la_store_sym_names_in_linkage_form_p */ - basic_lookup_symbol_nonlocal, /* lookup_symbol_nonlocal */ - basic_lookup_transparent_type,/* lookup_transparent_type */ - objc_demangle, /* Language specific symbol demangler */ - objc_sniff_from_mangled_name, - NULL, /* Language specific - class_name_from_physname */ objc_op_print_tab, /* Expression operators for printing */ 1, /* C-style arrays */ 0, /* String lower bound */ - default_word_break_characters, - default_collect_symbol_completion_matches, - c_language_arch_info, - default_print_array_index, - default_pass_by_reference, - c_watch_location_expression, - NULL, /* la_get_symbol_name_matcher */ - iterate_over_symbols, - default_search_name_hash, &default_varobj_ops, - NULL, - NULL, - c_is_string_type_p, "{...}" /* la_struct_too_deep_ellipsis */ }; +/* Class representing the Objective-C language. */ + +class objc_language : public language_defn +{ +public: + objc_language () + : language_defn (language_objc, objc_language_data) + { /* Nothing. */ } + + /* See language.h. */ + void language_arch_info (struct gdbarch *gdbarch, + struct language_arch_info *lai) const override + { + c_language_arch_info (gdbarch, lai); + } + + /* See language.h. */ + bool sniff_from_mangled_name (const char *mangled, + char **demangled) const override + { + *demangled = objc_demangle (mangled, 0); + return *demangled != NULL; + } + + /* See language.h. */ + + char *demangle (const char *mangled, int options) const override + { + return objc_demangle (mangled, options); + } + + /* See language.h. */ + + void print_type (struct type *type, const char *varstring, + struct ui_file *stream, int show, int level, + const struct type_print_options *flags) const override + { + c_print_type (type, varstring, stream, show, level, flags); + } + + /* See language.h. */ + + CORE_ADDR skip_trampoline (struct frame_info *frame, + CORE_ADDR stop_pc) const override + { + struct gdbarch *gdbarch = get_frame_arch (frame); + CORE_ADDR real_stop_pc; + CORE_ADDR method_stop_pc; + + /* Determine if we are currently in the Objective-C dispatch function. + If so, get the address of the method function that the dispatcher + would call and use that as the function to step into instead. Also + skip over the trampoline for the function (if any). This is better + for the user since they are only interested in stepping into the + method function anyway. */ + + real_stop_pc = gdbarch_skip_trampoline_code (gdbarch, frame, stop_pc); + + if (real_stop_pc != 0) + find_objc_msgcall (real_stop_pc, &method_stop_pc); + else + find_objc_msgcall (stop_pc, &method_stop_pc); + + if (method_stop_pc) + { + real_stop_pc = gdbarch_skip_trampoline_code + (gdbarch, frame, method_stop_pc); + if (real_stop_pc == 0) + real_stop_pc = method_stop_pc; + } + + return real_stop_pc; + } +}; + +/* Single instance of the class representing the Objective-C language. */ + +static objc_language objc_language_defn; + /* * ObjC: * Following functions help construct Objective-C message calls. @@ -1332,8 +1345,9 @@ return 0; } +void _initialize_objc_language (); void -_initialize_objc_language (void) +_initialize_objc_language () { add_info ("selectors", info_selectors_command, _("All Objective-C selectors, or those matching REGEXP.")); diff -Nru gdb-9.1/gdb/objc-lang.h gdb-10.2/gdb/objc-lang.h --- gdb-9.1/gdb/objc-lang.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/objc-lang.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Objective-C language support definitions for GDB, the GNU debugger. - Copyright (C) 1992-2020 Free Software Foundation, Inc. + Copyright (C) 1992-2021 Free Software Foundation, Inc. Contributed by Apple Computer, Inc. diff -Nru gdb-9.1/gdb/objfile-flags.h gdb-10.2/gdb/objfile-flags.h --- gdb-9.1/gdb/objfile-flags.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/objfile-flags.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Definition of objfile flags. - Copyright (C) 1992-2020 Free Software Foundation, Inc. + Copyright (C) 1992-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/objfiles.c gdb-10.2/gdb/objfiles.c --- gdb-9.1/gdb/objfiles.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/objfiles.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* GDB routines for manipulating objfiles. - Copyright (C) 1992-2020 Free Software Foundation, Inc. + Copyright (C) 1992-2021 Free Software Foundation, Inc. Contributed by Cygnus Support, using pieces from other GDB modules. @@ -54,6 +54,7 @@ #include "btrace.h" #include "gdbsupport/pathstuff.h" +#include <algorithm> #include <vector> /* Keep a registry of per-objfile data-pointers required by other GDB @@ -371,31 +372,6 @@ } per_bfd = get_objfile_bfd_data (this, abfd); - - /* Add this file onto the tail of the linked list of other such files. */ - - if (object_files == NULL) - object_files = this; - else - { - struct objfile *last_one; - - for (last_one = object_files; - last_one->next; - last_one = last_one->next); - last_one->next = this; - } - - /* Rebuild section map next time we need it. */ - get_objfile_pspace_data (pspace)->new_objfiles_available = 1; -} - -/* Retrieve the gdbarch associated with OBJFILE. */ - -struct gdbarch * -get_objfile_arch (const struct objfile *objfile) -{ - return objfile->per_bfd->gdbarch; } /* If there is a valid and known entry point, function fills *ENTRY_P with it @@ -407,9 +383,9 @@ if (symfile_objfile == NULL || !symfile_objfile->per_bfd->ei.entry_point_p) return 0; + int idx = symfile_objfile->per_bfd->ei.the_bfd_section_index; *entry_p = (symfile_objfile->per_bfd->ei.entry_point - + ANOFFSET (symfile_objfile->section_offsets, - symfile_objfile->per_bfd->ei.the_bfd_section_index)); + + symfile_objfile->section_offsets[idx]); return 1; } @@ -473,54 +449,9 @@ return *this; } -/* Unlink OBJFILE from the list of known objfiles. */ - -static void -unlink_objfile (struct objfile *objfile) -{ - struct objfile **objpp; - - for (objpp = &object_files; *objpp != NULL; objpp = &((*objpp)->next)) - { - if (*objpp == objfile) - { - *objpp = (*objpp)->next; - objfile->next = NULL; - return; - } - } - - internal_error (__FILE__, __LINE__, - _("unlink_objfile: objfile already unlinked")); -} - -/* Put one object file before a specified on in the global list. - This can be used to make sure an object file is destroyed before - another when using objfiles_safe to free all objfiles. */ -static void -put_objfile_before (struct objfile *objfile, struct objfile *before_this) -{ - struct objfile **objp; - - unlink_objfile (objfile); - - for (objp = &object_files; *objp != NULL; objp = &((*objp)->next)) - { - if (*objp == before_this) - { - objfile->next = *objp; - *objp = objfile; - return; - } - } - - internal_error (__FILE__, __LINE__, - _("put_objfile_before: before objfile not in list")); -} - /* Add OBJFILE as a separate debug objfile of PARENT. */ -void +static void add_separate_debug_objfile (struct objfile *objfile, struct objfile *parent) { gdb_assert (objfile && parent); @@ -535,10 +466,35 @@ objfile->separate_debug_objfile_backlink = parent; objfile->separate_debug_objfile_link = parent->separate_debug_objfile; parent->separate_debug_objfile = objfile; +} - /* Put the separate debug object before the normal one, this is so that - usage of objfiles_safe will stay safe. */ - put_objfile_before (objfile, parent); +/* See objfiles.h. */ + +objfile * +objfile::make (bfd *bfd_, const char *name_, objfile_flags flags_, + objfile *parent) +{ + objfile *result = new objfile (bfd_, name_, flags_); + if (parent != nullptr) + add_separate_debug_objfile (result, parent); + + /* Using std::make_shared might be a bit nicer here, but that would + require making the constructor public. */ + current_program_space->add_objfile (std::shared_ptr<objfile> (result), + parent); + + /* Rebuild section map next time we need it. */ + get_objfile_pspace_data (current_program_space)->new_objfiles_available = 1; + + return result; +} + +/* See objfiles.h. */ + +void +objfile::unlink () +{ + current_program_space->remove_objfile (this); } /* Free all separate debug objfile of OBJFILE, but don't free OBJFILE @@ -552,7 +508,7 @@ for (child = objfile->separate_debug_objfile; child;) { struct objfile *next_child = child->separate_debug_objfile_link; - delete child; + child->unlink (); child = next_child; } } @@ -628,13 +584,6 @@ else delete per_bfd; - /* Remove it from the chain of all objfiles. */ - - unlink_objfile (this); - - if (this == symfile_objfile) - symfile_objfile = NULL; - /* Before the symbol table code was redone to make it easier to selectively load and remove information particular to a specific linkage unit, gdb used to do these things whenever the monolithic @@ -663,28 +612,13 @@ get_objfile_pspace_data (pspace)->section_map_dirty = 1; } -/* Free all the object files at once and clean up their users. */ - -void -free_all_objfiles (void) -{ - struct so_list *so; - - /* Any objfile reference would become stale. */ - for (so = master_so_list (); so; so = so->next) - gdb_assert (so->objfile == NULL); - - for (objfile *objfile : current_program_space->objfiles_safe ()) - delete objfile; - clear_symtab_users (0); -} /* A helper function for objfile_relocate1 that relocates a single symbol. */ static void relocate_one_symbol (struct symbol *sym, struct objfile *objfile, - struct section_offsets *delta) + const section_offsets &delta) { fixup_symbol_section (sym, objfile); @@ -698,7 +632,7 @@ { SET_SYMBOL_VALUE_ADDRESS (sym, SYMBOL_VALUE_ADDRESS (sym) - + ANOFFSET (delta, SYMBOL_SECTION (sym))); + + delta[SYMBOL_SECTION (sym)]); } } @@ -708,19 +642,16 @@ static int objfile_relocate1 (struct objfile *objfile, - const struct section_offsets *new_offsets) + const section_offsets &new_offsets) { - struct section_offsets *delta = - ((struct section_offsets *) - alloca (SIZEOF_N_SECTION_OFFSETS (objfile->num_sections))); + section_offsets delta (objfile->section_offsets.size ()); int something_changed = 0; - for (int i = 0; i < objfile->num_sections; ++i) + for (int i = 0; i < objfile->section_offsets.size (); ++i) { - delta->offsets[i] = - ANOFFSET (new_offsets, i) - ANOFFSET (objfile->section_offsets, i); - if (ANOFFSET (delta, i) != 0) + delta[i] = new_offsets[i] - objfile->section_offsets[i]; + if (delta[i] != 0) something_changed = 1; } if (!something_changed) @@ -739,9 +670,7 @@ if (l) { for (int i = 0; i < l->nitems; ++i) - l->item[i].pc += ANOFFSET (delta, - COMPUNIT_BLOCK_LINE_SECTION - (cust)); + l->item[i].pc += delta[COMPUNIT_BLOCK_LINE_SECTION (cust)]; } } } @@ -752,8 +681,7 @@ int block_line_section = COMPUNIT_BLOCK_LINE_SECTION (cust); if (BLOCKVECTOR_MAP (bv)) - addrmap_relocate (BLOCKVECTOR_MAP (bv), - ANOFFSET (delta, block_line_section)); + addrmap_relocate (BLOCKVECTOR_MAP (bv), delta[block_line_section]); for (int i = 0; i < BLOCKVECTOR_NBLOCKS (bv); ++i) { @@ -762,16 +690,14 @@ struct mdict_iterator miter; b = BLOCKVECTOR_BLOCK (bv, i); - BLOCK_START (b) += ANOFFSET (delta, block_line_section); - BLOCK_END (b) += ANOFFSET (delta, block_line_section); + BLOCK_START (b) += delta[block_line_section]; + BLOCK_END (b) += delta[block_line_section]; if (BLOCK_RANGES (b) != nullptr) for (int j = 0; j < BLOCK_NRANGES (b); j++) { - BLOCK_RANGE_START (b, j) - += ANOFFSET (delta, block_line_section); - BLOCK_RANGE_END (b, j) += ANOFFSET (delta, - block_line_section); + BLOCK_RANGE_START (b, j) += delta[block_line_section]; + BLOCK_RANGE_END (b, j) += delta[block_line_section]; } /* We only want to iterate over the local symbols, not any @@ -799,8 +725,8 @@ { int i; - for (i = 0; i < objfile->num_sections; ++i) - (objfile->section_offsets)->offsets[i] = ANOFFSET (new_offsets, i); + for (i = 0; i < objfile->section_offsets.size (); ++i) + objfile->section_offsets[i] = new_offsets[i]; } /* Rebuild section map next time we need it. */ @@ -831,7 +757,7 @@ void objfile_relocate (struct objfile *objfile, - const struct section_offsets *new_offsets) + const section_offsets &new_offsets) { int changed = 0; @@ -850,15 +776,13 @@ addr_info_make_relative (&objfile_addrs, debug_objfile->obfd); - gdb_assert (debug_objfile->num_sections + gdb_assert (debug_objfile->section_offsets.size () == gdb_bfd_count_sections (debug_objfile->obfd)); - std::vector<struct section_offsets> - new_debug_offsets (SIZEOF_N_SECTION_OFFSETS (debug_objfile->num_sections)); - relative_addr_info_to_section_offsets (new_debug_offsets.data (), - debug_objfile->num_sections, - objfile_addrs); + section_offsets new_debug_offsets + (debug_objfile->section_offsets.size ()); + relative_addr_info_to_section_offsets (new_debug_offsets, objfile_addrs); - changed |= objfile_relocate1 (debug_objfile, new_debug_offsets.data ()); + changed |= objfile_relocate1 (debug_objfile, new_debug_offsets); } /* Relocate breakpoints as necessary, after things are relocated. */ @@ -873,14 +797,7 @@ static int objfile_rebase1 (struct objfile *objfile, CORE_ADDR slide) { - struct section_offsets *new_offsets = - ((struct section_offsets *) - alloca (SIZEOF_N_SECTION_OFFSETS (objfile->num_sections))); - int i; - - for (i = 0; i < objfile->num_sections; ++i) - new_offsets->offsets[i] = slide; - + section_offsets new_offsets (objfile->section_offsets.size (), slide); return objfile_relocate1 (objfile, new_offsets); } @@ -984,7 +901,7 @@ be soon. */ if (!(objf->flags & OBJF_USERLOADED) && (objf->flags & OBJF_SHARED)) - delete objf; + objf->unlink (); } } @@ -1207,7 +1124,7 @@ const CORE_ADDR sect2_endaddr = obj_section_endaddr (sect2); - struct gdbarch *const gdbarch = get_objfile_arch (objf1); + struct gdbarch *const gdbarch = objf1->arch (); complaint (_("unexpected overlap between:\n" " (A) section `%s' from `%s' [%s, %s)\n" @@ -1386,16 +1303,15 @@ (&get_objfile_pspace_data (pspace)->inhibit_updates, 1); } -/* Return 1 if ADDR maps into one of the sections of OBJFILE and 0 - otherwise. */ +/* See objfiles.h. */ -int +bool is_addr_in_objfile (CORE_ADDR addr, const struct objfile *objfile) { struct obj_section *osect; if (objfile == NULL) - return 0; + return false; ALL_OBJFILE_OSECTIONS (objfile, osect) { @@ -1404,12 +1320,14 @@ if (obj_section_addr (osect) <= addr && addr < obj_section_endaddr (osect)) - return 1; + return true; } - return 0; + return false; } -int +/* See objfiles.h. */ + +bool shared_objfile_contains_address_p (struct program_space *pspace, CORE_ADDR address) { @@ -1417,10 +1335,10 @@ { if ((objfile->flags & OBJF_SHARED) != 0 && is_addr_in_objfile (address, objfile)) - return 1; + return true; } - return 0; + return false; } /* The default implementation for the "iterate_over_objfiles_in_search_order" diff -Nru gdb-9.1/gdb/objfiles.h gdb-10.2/gdb/objfiles.h --- gdb-9.1/gdb/objfiles.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/objfiles.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Definitions for symbol file management in GDB. - Copyright (C) 1992-2020 Free Software Foundation, Inc. + Copyright (C) 1992-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -28,12 +28,15 @@ #include "registry.h" #include "gdb_bfd.h" #include "psymtab.h" +#include <atomic> #include <bitset> #include <vector> #include "gdbsupport/next-iterator.h" #include "gdbsupport/safe-iterator.h" #include "bcache.h" #include "gdbarch.h" +#include "gdbsupport/refcounted-object.h" +#include "jit.h" struct htab; struct objfile_data; @@ -139,7 +142,7 @@ /* Relocation offset applied to S. */ #define obj_section_offset(s) \ - (((s)->objfile->section_offsets)->offsets[gdb_bfd_section_index ((s)->objfile->obfd, (s)->the_bfd_section)]) + (((s)->objfile->section_offsets)[gdb_bfd_section_index ((s)->objfile->obfd, (s)->the_bfd_section)]) /* The memory address of section S (vma + offset). */ #define obj_section_addr(s) \ @@ -153,6 +156,37 @@ + bfd_section_size ((s)->the_bfd_section) \ + obj_section_offset (s)) +#define ALL_OBJFILE_OSECTIONS(objfile, osect) \ + for (osect = objfile->sections; osect < objfile->sections_end; osect++) \ + if (osect->the_bfd_section == NULL) \ + { \ + /* Nothing. */ \ + } \ + else + +#define SECT_OFF_DATA(objfile) \ + ((objfile->sect_index_data == -1) \ + ? (internal_error (__FILE__, __LINE__, \ + _("sect_index_data not initialized")), -1) \ + : objfile->sect_index_data) + +#define SECT_OFF_RODATA(objfile) \ + ((objfile->sect_index_rodata == -1) \ + ? (internal_error (__FILE__, __LINE__, \ + _("sect_index_rodata not initialized")), -1) \ + : objfile->sect_index_rodata) + +#define SECT_OFF_TEXT(objfile) \ + ((objfile->sect_index_text == -1) \ + ? (internal_error (__FILE__, __LINE__, \ + _("sect_index_text not initialized")), -1) \ + : objfile->sect_index_text) + +/* Sometimes the .bss section is missing from the objfile, so we don't + want to die here. Let the users of SECT_OFF_BSS deal with an + uninitialized section index. */ +#define SECT_OFF_BSS(objfile) (objfile)->sect_index_bss + /* The "objstats" structure provides a place for gdb to record some interesting information about its internal state at runtime, on a per objfile basis, such as information about the number of symbols @@ -242,13 +276,9 @@ auto_obstack storage_obstack; - /* Byte cache for file names. */ + /* String cache. */ - gdb::bcache filename_cache; - - /* Byte cache for macros. */ - - gdb::bcache macro_cache; + gdb::bcache string_cache; /* The gdbarch associated with the BFD. Note that this gdbarch is determined solely from BFD information, without looking at target @@ -394,9 +424,29 @@ struct objfile { +private: + + /* The only way to create an objfile is to call objfile::make. */ objfile (bfd *, const char *, objfile_flags); + +public: + + /* Normally you should not call delete. Instead, call 'unlink' to + remove it from the program space's list. In some cases, you may + need to hold a reference to an objfile that is independent of its + existence on the program space's list; for this case, the + destructor must be public so that shared_ptr can reference + it. */ ~objfile (); + /* Create an objfile. */ + static objfile *make (bfd *bfd_, const char *name_, objfile_flags flags_, + objfile *parent = nullptr); + + /* Remove an objfile from the current program space, and free + it. */ + void unlink (); + DISABLE_COPY_AND_ASSIGN (objfile); /* A range adapter that makes it possible to iterate over all @@ -470,12 +520,37 @@ return separate_debug_range (this); } + CORE_ADDR text_section_offset () const + { + return section_offsets[SECT_OFF_TEXT (this)]; + } + + CORE_ADDR data_section_offset () const + { + return section_offsets[SECT_OFF_DATA (this)]; + } + + /* Intern STRING and return the unique copy. The copy has the same + lifetime as the per-BFD object. */ + const char *intern (const char *str) + { + return (const char *) per_bfd->string_cache.insert (str, strlen (str) + 1); + } + + /* Intern STRING and return the unique copy. The copy has the same + lifetime as the per-BFD object. */ + const char *intern (const std::string &str) + { + return (const char *) per_bfd->string_cache.insert (str.c_str (), + str.size () + 1); + } - /* All struct objfile's are chained together by their next pointers. - The program space field "objfiles" (frequently referenced via - the macro "object_files") points to the first link in this chain. */ + /* Retrieve the gdbarch associated with this objfile. */ + struct gdbarch *arch () const + { + return per_bfd->gdbarch; + } - struct objfile *next = nullptr; /* The object file's original name as specified by the user, made absolute, and tilde-expanded. However, it is not canonicalized @@ -544,14 +619,12 @@ /* Set of relocation offsets to apply to each section. The table is indexed by the_bfd_section->index, thus it is generally as large as the number of sections in the binary. - The table is stored on the objfile_obstack. These offsets indicate that all symbols (including partial and minimal symbols) which have been read have been relocated by this much. Symbols which are yet to be read need to be relocated by it. */ - struct section_offsets *section_offsets = nullptr; - int num_sections = 0; + ::section_offsets section_offsets; /* Indexes in the section_offsets array. These are initialized by the *_symfile_offsets() family of functions (som_symfile_offsets, @@ -625,11 +698,37 @@ store these here rather than in struct block. Static links must be allocated on the objfile's obstack. */ htab_up static_links; + + /* JIT-related data for this objfile, if the objfile is a JITer; + that is, it produces JITed objfiles. */ + std::unique_ptr<jiter_objfile_data> jiter_data = nullptr; + + /* JIT-related data for this objfile, if the objfile is JITed; + that is, it was produced by a JITer. */ + std::unique_ptr<jited_objfile_data> jited_data = nullptr; + + /* A flag that is set to true if the JIT interface symbols are not + found in this objfile, so that we can skip the symbol lookup the + next time. If an objfile does not have the symbols, it will + never have them. */ + bool skip_jit_symbol_lookup = false; }; -/* Declarations for functions defined in objfiles.c */ +/* A deleter for objfile. */ -extern struct gdbarch *get_objfile_arch (const struct objfile *); +struct objfile_deleter +{ + void operator() (objfile *ptr) const + { + ptr->unlink (); + } +}; + +/* A unique pointer that holds an objfile. */ + +typedef std::unique_ptr<objfile, objfile_deleter> objfile_up; + +/* Declarations for functions defined in objfiles.c */ extern int entry_point_address_query (CORE_ADDR *entry_p); @@ -637,13 +736,9 @@ extern void build_objfile_section_table (struct objfile *); -extern void add_separate_debug_objfile (struct objfile *, struct objfile *); - extern void free_objfile_separate_debug (struct objfile *); -extern void free_all_objfiles (void); - -extern void objfile_relocate (struct objfile *, const struct section_offsets *); +extern void objfile_relocate (struct objfile *, const section_offsets &); extern void objfile_rebase (struct objfile *, CORE_ADDR); extern int objfile_has_partial_symbols (struct objfile *objfile); @@ -661,13 +756,16 @@ extern void objfiles_changed (void); -extern int is_addr_in_objfile (CORE_ADDR addr, const struct objfile *objfile); +/* Return true if ADDR maps into one of the sections of OBJFILE and false + otherwise. */ + +extern bool is_addr_in_objfile (CORE_ADDR addr, const struct objfile *objfile); /* Return true if ADDRESS maps into one of the sections of a OBJF_SHARED objfile of PSPACE and false otherwise. */ -extern int shared_objfile_contains_address_p (struct program_space *pspace, - CORE_ADDR address); +extern bool shared_objfile_contains_address_p (struct program_space *pspace, + CORE_ADDR address); /* This operation deletes all objfile entries that represent solibs that weren't explicitly loaded by the user, via e.g., the add-symbol-file @@ -713,42 +811,6 @@ (struct gdbarch *gdbarch, iterate_over_objfiles_in_search_order_cb_ftype *cb, void *cb_data, struct objfile *current_objfile); - - -#define ALL_OBJFILE_OSECTIONS(objfile, osect) \ - for (osect = objfile->sections; osect < objfile->sections_end; osect++) \ - if (osect->the_bfd_section == NULL) \ - { \ - /* Nothing. */ \ - } \ - else - -#define SECT_OFF_DATA(objfile) \ - ((objfile->sect_index_data == -1) \ - ? (internal_error (__FILE__, __LINE__, \ - _("sect_index_data not initialized")), -1) \ - : objfile->sect_index_data) - -#define SECT_OFF_RODATA(objfile) \ - ((objfile->sect_index_rodata == -1) \ - ? (internal_error (__FILE__, __LINE__, \ - _("sect_index_rodata not initialized")), -1) \ - : objfile->sect_index_rodata) - -#define SECT_OFF_TEXT(objfile) \ - ((objfile->sect_index_text == -1) \ - ? (internal_error (__FILE__, __LINE__, \ - _("sect_index_text not initialized")), -1) \ - : objfile->sect_index_text) - -/* Sometimes the .bss section is missing from the objfile, so we don't - want to die here. Let the users of SECT_OFF_BSS deal with an - uninitialized section index. */ -#define SECT_OFF_BSS(objfile) (objfile)->sect_index_bss - -/* Answer whether there is more than one object file loaded. */ - -#define MULTI_OBJFILE_P() (object_files && object_files->next) /* Reset the per-BFD storage area on OBJ. */ diff -Nru gdb-9.1/gdb/obsd-nat.c gdb-10.2/gdb/obsd-nat.c --- gdb-9.1/gdb/obsd-nat.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/obsd-nat.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Native-dependent code for OpenBSD. - Copyright (C) 2012-2020 Free Software Foundation, Inc. + Copyright (C) 2012-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -59,12 +59,12 @@ { ptid_t ptid = ptid_t (pid, pts.pts_tid, 0); - if (!in_thread_list (ptid)) + if (!in_thread_list (this, ptid)) { if (inferior_ptid.lwp () == 0) - thread_change_ptid (inferior_ptid, ptid); + thread_change_ptid (this, inferior_ptid, ptid); else - add_thread (ptid); + add_thread (this, ptid); } if (ptrace (PT_GET_THREAD_NEXT, pid, (caddr_t)&pts, sizeof pts) == -1) @@ -147,12 +147,12 @@ } ptid = ptid_t (pid, pe.pe_tid, 0); - if (!in_thread_list (ptid)) + if (!in_thread_list (this, ptid)) { if (inferior_ptid.lwp () == 0) - thread_change_ptid (inferior_ptid, ptid); + thread_change_ptid (this, inferior_ptid, ptid); else - add_thread (ptid); + add_thread (this, ptid); } } @@ -161,3 +161,66 @@ } #endif /* PT_GET_THREAD_FIRST */ + +#ifdef PT_GET_PROCESS_STATE + +void +obsd_nat_target::post_attach (int pid) +{ + ptrace_event_t pe; + + /* Set the initial event mask. */ + memset (&pe, 0, sizeof pe); + pe.pe_set_event |= PTRACE_FORK; + if (ptrace (PT_SET_EVENT_MASK, pid, + (PTRACE_TYPE_ARG3)&pe, sizeof pe) == -1) + perror_with_name (("ptrace")); +} + +void +obsd_nat_target::post_startup_inferior (ptid_t pid) +{ + ptrace_event_t pe; + + /* Set the initial event mask. */ + memset (&pe, 0, sizeof pe); + pe.pe_set_event |= PTRACE_FORK; + if (ptrace (PT_SET_EVENT_MASK, pid.pid (), + (PTRACE_TYPE_ARG3)&pe, sizeof pe) == -1) + perror_with_name (("ptrace")); +} + +/* Target hook for follow_fork. On entry and at return inferior_ptid is + the ptid of the followed inferior. */ + +bool +obsd_nat_target::follow_fork (bool follow_child, bool detach_fork) +{ + if (!follow_child) + { + struct thread_info *tp = inferior_thread (); + pid_t child_pid = tp->pending_follow.value.related_pid.pid (); + + /* Breakpoints have already been detached from the child by + infrun.c. */ + + if (ptrace (PT_DETACH, child_pid, (PTRACE_TYPE_ARG3)1, 0) == -1) + perror_with_name (("ptrace")); + } + + return false; +} + +int +obsd_nat_target::insert_fork_catchpoint (int pid) +{ + return 0; +} + +int +obsd_nat_target::remove_fork_catchpoint (int pid) +{ + return 0; +} + +#endif /* PT_GET_PROCESS_STATE */ diff -Nru gdb-9.1/gdb/obsd-nat.h gdb-10.2/gdb/obsd-nat.h --- gdb-9.1/gdb/obsd-nat.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/obsd-nat.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Native-dependent code for OpenBSD. - Copyright (C) 2014-2020 Free Software Foundation, Inc. + Copyright (C) 2014-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -28,6 +28,18 @@ std::string pid_to_str (ptid_t) override; void update_thread_list () override; ptid_t wait (ptid_t, struct target_waitstatus *, int) override; + +#ifdef PT_GET_PROCESS_STATE + bool follow_fork (bool, bool) override; + + int insert_fork_catchpoint (int) override; + + int remove_fork_catchpoint (int) override; + + void post_startup_inferior (ptid_t) override; + + void post_attach (int) override; +#endif }; #endif /* obsd-nat.h */ diff -Nru gdb-9.1/gdb/obsd-tdep.c gdb-10.2/gdb/obsd-tdep.c --- gdb-9.1/gdb/obsd-tdep.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/obsd-tdep.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for OpenBSD. - Copyright (C) 2005-2020 Free Software Foundation, Inc. + Copyright (C) 2005-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -18,6 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include "defs.h" +#include "auxv.h" #include "frame.h" #include "symtab.h" #include "objfiles.h" @@ -289,32 +290,6 @@ return -1; } -static int -obsd_auxv_parse (struct gdbarch *gdbarch, gdb_byte **readptr, - gdb_byte *endptr, CORE_ADDR *typep, CORE_ADDR *valp) -{ - struct type *int_type = builtin_type (gdbarch)->builtin_int; - struct type *ptr_type = builtin_type (gdbarch)->builtin_data_ptr; - const int sizeof_auxv_type = TYPE_LENGTH (int_type); - const int sizeof_auxv_val = TYPE_LENGTH (ptr_type); - enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); - gdb_byte *ptr = *readptr; - - if (endptr == ptr) - return 0; - - if (endptr - ptr < 2 * sizeof_auxv_val) - return -1; - - *typep = extract_unsigned_integer (ptr, sizeof_auxv_type, byte_order); - ptr += sizeof_auxv_val; /* Alignment. */ - *valp = extract_unsigned_integer (ptr, sizeof_auxv_val, byte_order); - ptr += sizeof_auxv_val; - - *readptr = ptr; - return 1; -} - void obsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) { @@ -323,6 +298,5 @@ set_gdbarch_gdb_signal_to_target (gdbarch, obsd_gdb_signal_to_target); - /* Unlike Linux, OpenBSD actually follows the ELF standard. */ - set_gdbarch_auxv_parse (gdbarch, obsd_auxv_parse); + set_gdbarch_auxv_parse (gdbarch, svr4_auxv_parse); } diff -Nru gdb-9.1/gdb/obsd-tdep.h gdb-10.2/gdb/obsd-tdep.h --- gdb-9.1/gdb/obsd-tdep.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/obsd-tdep.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for OpenBSD. - Copyright (C) 2005-2020 Free Software Foundation, Inc. + Copyright (C) 2005-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/observable.c gdb-10.2/gdb/observable.c --- gdb-9.1/gdb/observable.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/observable.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* GDB Notifications to Observers. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -75,6 +75,7 @@ DEFINE_OBSERVABLE (register_changed); DEFINE_OBSERVABLE (user_selected_context_changed); DEFINE_OBSERVABLE (source_styling_changed); +DEFINE_OBSERVABLE (current_source_symtab_and_line_changed); } /* namespace observers */ } /* namespace gdb */ @@ -86,8 +87,9 @@ fprintf_filtered (file, _("Observer debugging is %s.\n"), value); } +void _initialize_observer (); void -_initialize_observer (void) +_initialize_observer () { add_setshow_zuinteger_cmd ("observer", class_maintenance, &gdb::observers::observer_debug, _("\ diff -Nru gdb-9.1/gdb/observable.h gdb-10.2/gdb/observable.h --- gdb-9.1/gdb/observable.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/observable.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Observers - Copyright (C) 2016-2020 Free Software Foundation, Inc. + Copyright (C) 2016-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -27,6 +27,7 @@ struct objfile; struct thread_info; struct inferior; +struct process_stratum_target; struct trace_state_variable; namespace gdb @@ -165,8 +166,9 @@ /* The thread's ptid has changed. The OLD_PTID parameter specifies the old value, and NEW_PTID specifies the new value. */ -extern observable<ptid_t /* old_ptid */, ptid_t /* new_ptid */> - thread_ptid_changed; +extern observable<process_stratum_target * /* target */, + ptid_t /* old_ptid */, ptid_t /* new_ptid */> + thread_ptid_changed; /* The inferior INF has been added to the list of inferiors. At this point, it might not be associated with any process. */ @@ -241,6 +243,12 @@ should be reconsulted. */ extern observable<> source_styling_changed; +/* The CLI's notion of the current source has changed. This differs + from user_selected_context_changed in that it is also set by the + "list" command. */ + +extern observable<> current_source_symtab_and_line_changed; + } /* namespace observers */ } /* namespace gdb */ diff -Nru gdb-9.1/gdb/opencl-lang.c gdb-10.2/gdb/opencl-lang.c --- gdb-9.1/gdb/opencl-lang.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/opencl-lang.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* OpenCL language support for GDB, the GNU debugger. - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. Contributed by Ken Werner <ken.werner@de.ibm.com>. @@ -96,9 +96,9 @@ { LONGEST lowb, highb; - if (TYPE_CODE (types[i]) == TYPE_CODE_ARRAY && TYPE_VECTOR (types[i]) + if (types[i]->code () == TYPE_CODE_ARRAY && TYPE_VECTOR (types[i]) && get_array_bounds (types[i], &lowb, &highb) - && TYPE_CODE (TYPE_TARGET_TYPE (types[i])) == code + && TYPE_TARGET_TYPE (types[i])->code () == code && TYPE_UNSIGNED (TYPE_TARGET_TYPE (types[i])) == flag_unsigned && TYPE_LENGTH (TYPE_TARGET_TYPE (types[i])) == el_length && TYPE_LENGTH (types[i]) == length @@ -177,7 +177,7 @@ LONGEST lowb = 0; LONGEST highb = 0; - if (TYPE_CODE (type) == TYPE_CODE_ARRAY + if (type->code () == TYPE_CODE_ARRAY && !get_array_bounds (type, &lowb, &highb)) error (_("Could not determine the vector bounds")); @@ -206,7 +206,7 @@ LONGEST lowb = 0; LONGEST highb = 0; - if (TYPE_CODE (type) == TYPE_CODE_ARRAY + if (type->code () == TYPE_CODE_ARRAY && !get_array_bounds (type, &lowb, &highb)) error (_("Could not determine the vector bounds")); @@ -336,7 +336,7 @@ /* Multiple components of the vector are requested which means the resulting type is a vector as well. */ struct type *dst_type = - lookup_opencl_vector_type (gdbarch, TYPE_CODE (elm_type), + lookup_opencl_vector_type (gdbarch, elm_type->code (), TYPE_LENGTH (elm_type), TYPE_UNSIGNED (elm_type), n); @@ -497,7 +497,7 @@ struct type *rettype; struct value *ret; - if (TYPE_CODE (type) == TYPE_CODE_ARRAY && TYPE_VECTOR (type)) + if (type->code () == TYPE_CODE_ARRAY && TYPE_VECTOR (type)) { struct type *eltype = check_typedef (TYPE_TARGET_TYPE (type)); LONGEST lowb, highb; @@ -586,8 +586,8 @@ type1 = check_typedef (value_type (val1)); type2 = check_typedef (value_type (val2)); - t1_is_vec = (TYPE_CODE (type1) == TYPE_CODE_ARRAY && TYPE_VECTOR (type1)); - t2_is_vec = (TYPE_CODE (type2) == TYPE_CODE_ARRAY && TYPE_VECTOR (type2)); + t1_is_vec = (type1->code () == TYPE_CODE_ARRAY && TYPE_VECTOR (type1)); + t2_is_vec = (type2->code () == TYPE_CODE_ARRAY && TYPE_VECTOR (type2)); if (!t1_is_vec || !t2_is_vec) error (_("Vector operations are not supported on scalar types")); @@ -600,7 +600,7 @@ error (_("Could not determine the vector bounds")); /* Check whether the vector types are compatible. */ - if (TYPE_CODE (eltype1) != TYPE_CODE (eltype2) + if (eltype1->code () != eltype2->code () || TYPE_LENGTH (eltype1) != TYPE_LENGTH (eltype2) || TYPE_UNSIGNED (eltype1) != TYPE_UNSIGNED (eltype2) || lowb1 != lowb2 || highb1 != highb2) @@ -647,11 +647,11 @@ to_type = check_typedef (type); - code1 = TYPE_CODE (to_type); - code2 = TYPE_CODE (check_typedef (value_type (arg))); + code1 = to_type->code (); + code2 = check_typedef (value_type (arg))->code (); if (code2 == TYPE_CODE_REF) - code2 = TYPE_CODE (check_typedef (value_type (coerce_ref (arg)))); + code2 = check_typedef (value_type (coerce_ref(arg)))->code (); scalar = (code2 == TYPE_CODE_INT || code2 == TYPE_CODE_BOOL || code2 == TYPE_CODE_CHAR || code2 == TYPE_CODE_FLT @@ -687,9 +687,9 @@ struct value *val; struct type *type1 = check_typedef (value_type (arg1)); struct type *type2 = check_typedef (value_type (arg2)); - int t1_is_vec = (TYPE_CODE (type1) == TYPE_CODE_ARRAY + int t1_is_vec = (type1->code () == TYPE_CODE_ARRAY && TYPE_VECTOR (type1)); - int t2_is_vec = (TYPE_CODE (type2) == TYPE_CODE_ARRAY + int t2_is_vec = (type2->code () == TYPE_CODE_ARRAY && TYPE_VECTOR (type2)); if (!t1_is_vec && !t2_is_vec) @@ -710,7 +710,7 @@ struct value **v = t1_is_vec ? &arg2 : &arg1; struct type *t = t1_is_vec ? type2 : type1; - if (TYPE_CODE (t) != TYPE_CODE_FLT && !is_integral_type (t)) + if (t->code () != TYPE_CODE_FLT && !is_integral_type (t)) error (_("Argument to operation not a number or boolean.")); *v = opencl_value_cast (t1_is_vec ? type1 : type2, *v); @@ -739,7 +739,7 @@ scalar-to-vector widening. */ case BINOP_ASSIGN: (*pos)++; - arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside); + arg1 = evaluate_subexp (nullptr, exp, pos, noside); type1 = value_type (arg1); arg2 = evaluate_subexp (type1, exp, pos, noside); @@ -784,7 +784,7 @@ case BINOP_GEQ: case BINOP_LEQ: (*pos)++; - arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside); + arg1 = evaluate_subexp (nullptr, exp, pos, noside); arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside); if (noside == EVAL_SKIP) @@ -796,7 +796,7 @@ /* Handle the logical unary operator not(!). */ case UNOP_LOGICAL_NOT: (*pos)++; - arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside); + arg1 = evaluate_subexp (nullptr, exp, pos, noside); if (noside == EVAL_SKIP) return value_from_longest (builtin_type (exp->gdbarch)-> @@ -808,11 +808,11 @@ case BINOP_LOGICAL_AND: case BINOP_LOGICAL_OR: (*pos)++; - arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside); + arg1 = evaluate_subexp (nullptr, exp, pos, noside); if (noside == EVAL_SKIP) { - evaluate_subexp (NULL_TYPE, exp, pos, noside); + evaluate_subexp (nullptr, exp, pos, noside); return value_from_longest (builtin_type (exp->gdbarch)-> builtin_int, 1); @@ -826,16 +826,15 @@ Therefore we evaluate it once using EVAL_AVOID_SIDE_EFFECTS. */ int oldpos = *pos; - arg2 = evaluate_subexp (NULL_TYPE, exp, pos, - EVAL_AVOID_SIDE_EFFECTS); + arg2 = evaluate_subexp (nullptr, exp, pos, EVAL_AVOID_SIDE_EFFECTS); *pos = oldpos; type1 = check_typedef (value_type (arg1)); type2 = check_typedef (value_type (arg2)); - if ((TYPE_CODE (type1) == TYPE_CODE_ARRAY && TYPE_VECTOR (type1)) - || (TYPE_CODE (type2) == TYPE_CODE_ARRAY && TYPE_VECTOR (type2))) + if ((type1->code () == TYPE_CODE_ARRAY && TYPE_VECTOR (type1)) + || (type2->code () == TYPE_CODE_ARRAY && TYPE_VECTOR (type2))) { - arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside); + arg2 = evaluate_subexp (nullptr, exp, pos, noside); return opencl_relop (exp, arg1, arg2, op); } @@ -850,8 +849,8 @@ if (op == BINOP_LOGICAL_OR) tmp = !tmp; - arg2 = evaluate_subexp (NULL_TYPE, exp, pos, - tmp ? EVAL_SKIP : noside); + arg2 + = evaluate_subexp (nullptr, exp, pos, tmp ? EVAL_SKIP : noside); type1 = language_bool_type (exp->language_defn, exp->gdbarch); if (op == BINOP_LOGICAL_AND) @@ -866,23 +865,23 @@ /* Handle the ternary selection operator. */ case TERNOP_COND: (*pos)++; - arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside); + arg1 = evaluate_subexp (nullptr, exp, pos, noside); type1 = check_typedef (value_type (arg1)); - if (TYPE_CODE (type1) == TYPE_CODE_ARRAY && TYPE_VECTOR (type1)) + if (type1->code () == TYPE_CODE_ARRAY && TYPE_VECTOR (type1)) { struct value *arg3, *tmp, *ret; struct type *eltype2, *type3, *eltype3; int t2_is_vec, t3_is_vec, i; LONGEST lowb1, lowb2, lowb3, highb1, highb2, highb3; - arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside); - arg3 = evaluate_subexp (NULL_TYPE, exp, pos, noside); + arg2 = evaluate_subexp (nullptr, exp, pos, noside); + arg3 = evaluate_subexp (nullptr, exp, pos, noside); type2 = check_typedef (value_type (arg2)); type3 = check_typedef (value_type (arg3)); t2_is_vec - = TYPE_CODE (type2) == TYPE_CODE_ARRAY && TYPE_VECTOR (type2); + = type2->code () == TYPE_CODE_ARRAY && TYPE_VECTOR (type2); t3_is_vec - = TYPE_CODE (type3) == TYPE_CODE_ARRAY && TYPE_VECTOR (type3); + = type3->code () == TYPE_CODE_ARRAY && TYPE_VECTOR (type3); /* Widen the scalar operand to a vector if necessary. */ if (t2_is_vec || !t3_is_vec) @@ -911,7 +910,7 @@ error (_("Could not determine the vector bounds")); /* Throw an error if the types of arg2 or arg3 are incompatible. */ - if (TYPE_CODE (eltype2) != TYPE_CODE (eltype3) + if (eltype2->code () != eltype3->code () || TYPE_LENGTH (eltype2) != TYPE_LENGTH (eltype3) || TYPE_UNSIGNED (eltype2) != TYPE_UNSIGNED (eltype3) || lowb2 != lowb3 || highb2 != highb3) @@ -942,15 +941,15 @@ if (value_logical_not (arg1)) { /* Skip the second operand. */ - evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP); + evaluate_subexp (nullptr, exp, pos, EVAL_SKIP); - return evaluate_subexp (NULL_TYPE, exp, pos, noside); + return evaluate_subexp (nullptr, exp, pos, noside); } else { /* Skip the third operand. */ - arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside); - evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP); + arg2 = evaluate_subexp (nullptr, exp, pos, noside); + evaluate_subexp (nullptr, exp, pos, EVAL_SKIP); return arg2; } @@ -963,7 +962,7 @@ int tem = longest_to_int (exp->elts[pc + 1].longconst); (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1); - arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside); + arg1 = evaluate_subexp (nullptr, exp, pos, noside); type1 = check_typedef (value_type (arg1)); if (noside == EVAL_SKIP) @@ -971,7 +970,7 @@ return value_from_longest (builtin_type (exp->gdbarch)-> builtin_int, 1); } - else if (TYPE_CODE (type1) == TYPE_CODE_ARRAY && TYPE_VECTOR (type1)) + else if (type1->code () == TYPE_CODE_ARRAY && TYPE_VECTOR (type1)) { return opencl_component_ref (exp, arg1, &exp->elts[pc + 2].string, noside); @@ -994,44 +993,6 @@ return evaluate_subexp_c (expect_type, exp, pos, noside); } -/* Print OpenCL types. */ - -static void -opencl_print_type (struct type *type, const char *varstring, - struct ui_file *stream, int show, int level, - const struct type_print_options *flags) -{ - /* We nearly always defer to C type printing, except that vector - types are considered primitive in OpenCL, and should always - be printed using their TYPE_NAME. */ - if (show > 0) - { - type = check_typedef (type); - if (TYPE_CODE (type) == TYPE_CODE_ARRAY && TYPE_VECTOR (type) - && TYPE_NAME (type) != NULL) - show = 0; - } - - c_print_type (type, varstring, stream, show, level, flags); -} - -static void -opencl_language_arch_info (struct gdbarch *gdbarch, - struct language_arch_info *lai) -{ - struct type **types = builtin_opencl_type (gdbarch); - - /* Copy primitive types vector from gdbarch. */ - lai->primitive_type_vector = types; - - /* Type of elements of strings. */ - lai->string_char_type = types [opencl_primitive_type_char]; - - /* Specifies the return type of logical and relational operations. */ - lai->bool_type_symbol = "int"; - lai->bool_type_default = types [opencl_primitive_type_int]; -} - const struct exp_descriptor exp_descriptor_opencl = { print_subexp_standard, @@ -1042,7 +1003,8 @@ evaluate_subexp_opencl }; -extern const struct language_defn opencl_language_defn = +/* Constant data representing the OpenCL language. */ +extern const struct language_data opencl_language_data = { "opencl", /* Language name */ "OpenCL C", @@ -1053,44 +1015,66 @@ macro_expansion_c, NULL, &exp_descriptor_opencl, - c_parse, - null_post_parser, - c_printchar, /* Print a character constant */ - c_printstr, /* Function to print string constant */ - c_emit_char, /* Print a single char */ - opencl_print_type, /* Print a type using appropriate syntax */ - c_print_typedef, /* Print a typedef using appropriate syntax */ - c_val_print, /* Print a value using appropriate syntax */ - c_value_print, /* Print a top-level value */ - default_read_var_value, /* la_read_var_value */ - NULL, /* Language specific skip_trampoline */ NULL, /* name_of_this */ false, /* la_store_sym_names_in_linkage_form_p */ - basic_lookup_symbol_nonlocal, /* lookup_symbol_nonlocal */ - basic_lookup_transparent_type,/* lookup_transparent_type */ - NULL, /* Language specific symbol demangler */ - NULL, - NULL, /* Language specific - class_name_from_physname */ c_op_print_tab, /* expression operators for printing */ 1, /* c-style arrays */ 0, /* String lower bound */ - default_word_break_characters, - default_collect_symbol_completion_matches, - opencl_language_arch_info, - default_print_array_index, - default_pass_by_reference, - c_watch_location_expression, - NULL, /* la_get_symbol_name_matcher */ - iterate_over_symbols, - default_search_name_hash, &default_varobj_ops, - NULL, - NULL, - c_is_string_type_p, "{...}" /* la_struct_too_deep_ellipsis */ }; +/* Class representing the OpenCL language. */ + +class opencl_language : public language_defn +{ +public: + opencl_language () + : language_defn (language_opencl, opencl_language_data) + { /* Nothing. */ } + + /* See language.h. */ + void language_arch_info (struct gdbarch *gdbarch, + struct language_arch_info *lai) const override + { + struct type **types = builtin_opencl_type (gdbarch); + + /* Copy primitive types vector from gdbarch. */ + lai->primitive_type_vector = types; + + /* Type of elements of strings. */ + lai->string_char_type = types [opencl_primitive_type_char]; + + /* Specifies the return type of logical and relational operations. */ + lai->bool_type_symbol = "int"; + lai->bool_type_default = types [opencl_primitive_type_int]; + } + + /* See language.h. */ + + void print_type (struct type *type, const char *varstring, + struct ui_file *stream, int show, int level, + const struct type_print_options *flags) const override + { + /* We nearly always defer to C type printing, except that vector types + are considered primitive in OpenCL, and should always be printed + using their TYPE_NAME. */ + if (show > 0) + { + type = check_typedef (type); + if (type->code () == TYPE_CODE_ARRAY && TYPE_VECTOR (type) + && type->name () != NULL) + show = 0; + } + + c_print_type (type, varstring, stream, show, level, flags); + } +}; + +/* Single instance of the OpenCL language class. */ + +static opencl_language opencl_language_defn; + static void * build_opencl_types (struct gdbarch *gdbarch) { @@ -1105,21 +1089,21 @@ #define BUILD_OCL_VTYPES(TYPE)\ types[opencl_primitive_type_##TYPE##2] \ = init_vector_type (types[opencl_primitive_type_##TYPE], 2); \ - TYPE_NAME (types[opencl_primitive_type_##TYPE##2]) = OCL_STRING(TYPE ## 2); \ + types[opencl_primitive_type_##TYPE##2]->set_name (OCL_STRING(TYPE ## 2)); \ types[opencl_primitive_type_##TYPE##3] \ = init_vector_type (types[opencl_primitive_type_##TYPE], 3); \ - TYPE_NAME (types[opencl_primitive_type_##TYPE##3]) = OCL_STRING(TYPE ## 3); \ + types[opencl_primitive_type_##TYPE##3]->set_name (OCL_STRING(TYPE ## 3)); \ TYPE_LENGTH (types[opencl_primitive_type_##TYPE##3]) \ = 4 * TYPE_LENGTH (types[opencl_primitive_type_##TYPE]); \ types[opencl_primitive_type_##TYPE##4] \ = init_vector_type (types[opencl_primitive_type_##TYPE], 4); \ - TYPE_NAME (types[opencl_primitive_type_##TYPE##4]) = OCL_STRING(TYPE ## 4); \ + types[opencl_primitive_type_##TYPE##4]->set_name (OCL_STRING(TYPE ## 4)); \ types[opencl_primitive_type_##TYPE##8] \ = init_vector_type (types[opencl_primitive_type_##TYPE], 8); \ - TYPE_NAME (types[opencl_primitive_type_##TYPE##8]) = OCL_STRING(TYPE ## 8); \ + types[opencl_primitive_type_##TYPE##8]->set_name (OCL_STRING(TYPE ## 8)); \ types[opencl_primitive_type_##TYPE##16] \ = init_vector_type (types[opencl_primitive_type_##TYPE], 16); \ - TYPE_NAME (types[opencl_primitive_type_##TYPE##16]) = OCL_STRING(TYPE ## 16) + types[opencl_primitive_type_##TYPE##16]->set_name (OCL_STRING(TYPE ## 16)) types[opencl_primitive_type_char] = arch_integer_type (gdbarch, 8, 0, "char"); @@ -1178,8 +1162,9 @@ return types; } +void _initialize_opencl_language (); void -_initialize_opencl_language (void) +_initialize_opencl_language () { opencl_type_data = gdbarch_data_register_post_init (build_opencl_types); } diff -Nru gdb-9.1/gdb/or1k-linux-tdep.c gdb-10.2/gdb/or1k-linux-tdep.c --- gdb-9.1/gdb/or1k-linux-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/or1k-linux-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Target-dependent code for GNU/Linux on OpenRISC processors. - Copyright (C) 2018-2020 Free Software Foundation, Inc. + Copyright (C) 2018-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -163,8 +163,9 @@ /* Initialize OpenRISC Linux target support. */ +void _initialize_or1k_linux_tdep (); void -_initialize_or1k_linux_tdep (void) +_initialize_or1k_linux_tdep () { gdbarch_register_osabi (bfd_arch_or1k, 0, GDB_OSABI_LINUX, or1k_linux_init_abi); diff -Nru gdb-9.1/gdb/or1k-tdep.c gdb-10.2/gdb/or1k-tdep.c --- gdb-9.1/gdb/or1k-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/or1k-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Target-dependent code for the 32-bit OpenRISC 1000, for the GDB. - Copyright (C) 2008-2020 Free Software Foundation, Inc. + Copyright (C) 2008-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -35,7 +35,7 @@ #include "arch-utils.h" #include "frame-unwind.h" #include "frame-base.h" -#include "dwarf2-frame.h" +#include "dwarf2/frame.h" #include "trad-frame.h" #include "regset.h" #include "remote.h" @@ -245,7 +245,7 @@ gdb_byte *readbuf, const gdb_byte *writebuf) { enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); - enum type_code rv_type = TYPE_CODE (valtype); + enum type_code rv_type = valtype->code (); unsigned int rv_size = TYPE_LENGTH (valtype); int bpw = (gdbarch_tdep (gdbarch))->bytes_per_word; @@ -633,9 +633,9 @@ struct value *arg = args[argnum]; struct type *arg_type = check_typedef (value_type (arg)); int len = TYPE_LENGTH (arg_type); - enum type_code typecode = TYPE_CODE (arg_type); + enum type_code typecode = arg_type->code (); - if (TYPE_VARARGS (func_type) && argnum >= TYPE_NFIELDS (func_type)) + if (TYPE_VARARGS (func_type) && argnum >= func_type->num_fields ()) break; /* end or regular args, varargs go to stack. */ /* Extract the value, either a reference or the data. */ @@ -723,7 +723,7 @@ struct value *arg = args[argnum]; struct type *arg_type = check_typedef (value_type (arg)); int len = TYPE_LENGTH (arg_type); - enum type_code typecode = TYPE_CODE (arg_type); + enum type_code typecode = arg_type->code (); if ((TYPE_CODE_STRUCT == typecode) || (TYPE_CODE_UNION == typecode) || (len > bpw * 2)) @@ -755,7 +755,7 @@ struct value *arg = args[argnum]; struct type *arg_type = check_typedef (value_type (arg)); int len = TYPE_LENGTH (arg_type); - enum type_code typecode = TYPE_CODE (arg_type); + enum type_code typecode = arg_type->code (); /* The EABI passes structures that do not fit in a register by reference. In all other cases, pass the structure by value. */ if ((TYPE_CODE_STRUCT == typecode) || (TYPE_CODE_UNION == typecode) @@ -1269,8 +1269,9 @@ } +void _initialize_or1k_tdep (); void -_initialize_or1k_tdep (void) +_initialize_or1k_tdep () { /* Register this architecture. */ gdbarch_register (bfd_arch_or1k, or1k_gdbarch_init, or1k_dump_tdep); diff -Nru gdb-9.1/gdb/or1k-tdep.h gdb-10.2/gdb/or1k-tdep.h --- gdb-9.1/gdb/or1k-tdep.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/or1k-tdep.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Definitions to target GDB to OpenRISC 1000 32-bit targets. - Copyright (C) 2008-2020 Free Software Foundation, Inc. + Copyright (C) 2008-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/osabi.c gdb-10.2/gdb/osabi.c --- gdb-9.1/gdb/osabi.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/osabi.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* OS ABI variant handling for GDB. - Copyright (C) 2001-2020 Free Software Foundation, Inc. + Copyright (C) 2001-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -72,6 +72,7 @@ { "DJGPP", NULL }, { "QNX-Neutrino", NULL }, { "Cygwin", NULL }, + { "Windows", NULL }, { "AIX", NULL }, { "DICOS", NULL }, { "Darwin", NULL }, @@ -653,8 +654,9 @@ gdbarch_osabi_name (GDB_OSABI_DEFAULT)); } +void _initialize_gdb_osabi (); void -_initialize_gdb_osabi (void) +_initialize_gdb_osabi () { if (strcmp (gdb_osabi_names[GDB_OSABI_INVALID].pretty, "<invalid>") != 0) internal_error diff -Nru gdb-9.1/gdb/osabi.h gdb-10.2/gdb/osabi.h --- gdb-9.1/gdb/osabi.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/osabi.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* OS ABI variant handling for GDB. - Copyright (C) 2001-2020 Free Software Foundation, Inc. + Copyright (C) 2001-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -19,6 +19,38 @@ #ifndef OSABI_H #define OSABI_H +/* * List of known OS ABIs. If you change this, make sure to update the + table in osabi.c. */ +enum gdb_osabi +{ + GDB_OSABI_UNKNOWN = 0, /* keep this zero */ + GDB_OSABI_NONE, + + GDB_OSABI_SVR4, + GDB_OSABI_HURD, + GDB_OSABI_SOLARIS, + GDB_OSABI_LINUX, + GDB_OSABI_FREEBSD, + GDB_OSABI_NETBSD, + GDB_OSABI_OPENBSD, + GDB_OSABI_WINCE, + GDB_OSABI_GO32, + GDB_OSABI_QNXNTO, + GDB_OSABI_CYGWIN, + GDB_OSABI_WINDOWS, + GDB_OSABI_AIX, + GDB_OSABI_DICOS, + GDB_OSABI_DARWIN, + GDB_OSABI_SYMBIAN, + GDB_OSABI_OPENVMS, + GDB_OSABI_LYNXOS178, + GDB_OSABI_NEWLIB, + GDB_OSABI_SDE, + GDB_OSABI_PIKEOS, + + GDB_OSABI_INVALID /* keep this last */ +}; + /* Register an OS ABI sniffer. Each arch/flavour may have more than one sniffer. This is used to e.g. differentiate one OS's a.out from another. The first sniffer to return something other than diff -Nru gdb-9.1/gdb/osdata.c gdb-10.2/gdb/osdata.c --- gdb-9.1/gdb/osdata.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/osdata.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Routines for handling XML generic OS data provided by target. - Copyright (C) 2008-2020 Free Software Foundation, Inc. + Copyright (C) 2008-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -289,8 +289,9 @@ info_osdata (arg); } +void _initialize_osdata (); void -_initialize_osdata (void) +_initialize_osdata () { add_info ("os", info_osdata_command, _("Show OS data ARG.")); diff -Nru gdb-9.1/gdb/osdata.h gdb-10.2/gdb/osdata.h --- gdb-9.1/gdb/osdata.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/osdata.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Routines for handling XML generic OS data provided by target. - Copyright (C) 2008-2020 Free Software Foundation, Inc. + Copyright (C) 2008-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/parse.c gdb-10.2/gdb/parse.c --- gdb-9.1/gdb/parse.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/parse.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Parse expressions for GDB. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. Modified from expread.y by the Department of Computer Science at the State University of New York at Buffalo, 1991. @@ -1098,7 +1098,7 @@ struct symbol *func = block_linkage_function (block); if (func != NULL) - lang = language_def (SYMBOL_LANGUAGE (func)); + lang = language_def (func->language ()); if (lang == NULL || lang->la_language == language_unknown) lang = current_language; } @@ -1119,7 +1119,7 @@ try { - lang->la_parser (&ps); + lang->parser (&ps); } catch (const gdb_exception &except) { @@ -1146,8 +1146,7 @@ if (out_subexp) *out_subexp = subexp; - lang->la_post_parser (&result, void_context_p, ps.parse_completion, - tracker); + lang->post_parser (&result, void_context_p, ps.parse_completion, tracker); if (expressiondebug) dump_prefix_expression (result.get (), gdb_stdlog); @@ -1241,14 +1240,6 @@ return value_type (val); } -/* A post-parser that does nothing. */ - -void -null_post_parser (expression_up *exp, int void_context_p, int completin, - innermost_block_tracker *tracker) -{ -} - /* Parse floating point value P of length LEN. Return false if invalid, true if valid. The successfully parsed number is stored in DATA in @@ -1340,7 +1331,7 @@ return 1; /* Check objfile where is placed the code touching the variable. */ - objfile = lookup_objfile_from_block (block); + objfile = block_objfile (block); type = SYMBOL_TYPE (symbol); } @@ -1436,8 +1427,9 @@ } } +void _initialize_parse (); void -_initialize_parse (void) +_initialize_parse () { add_setshow_zuinteger_cmd ("expression", class_maintenance, &expressiondebug, diff -Nru gdb-9.1/gdb/parser-defs.h gdb-10.2/gdb/parser-defs.h --- gdb-9.1/gdb/parser-defs.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/parser-defs.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Parser definitions for GDB. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. Modified from expread.y by the Department of Computer Science at the State University of New York at Buffalo. @@ -350,9 +350,6 @@ extern const char *op_name_standard (enum exp_opcode); -extern void null_post_parser (expression_up *, int, int, - innermost_block_tracker *); - extern bool parse_float (const char *p, int len, const struct type *type, gdb_byte *data); diff -Nru gdb-9.1/gdb/p-exp.c gdb-10.2/gdb/p-exp.c --- gdb-9.1/gdb/p-exp.c 2020-02-08 12:54:11.000000000 +0000 +++ gdb-10.2/gdb/p-exp.c 2021-04-25 04:10:37.000000000 +0000 @@ -1,8 +1,9 @@ -/* A Bison parser, made by GNU Bison 3.0.4. */ +/* A Bison parser, made by GNU Bison 3.5.1. */ /* Bison implementation for Yacc-like parsers in C - Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc. + Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2020 Free Software Foundation, + Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -40,11 +41,14 @@ define necessary library symbols; they are noted "INFRINGES ON USER NAME SPACE" below. */ +/* Undocumented macros, especially those whose name start with YY_, + are private implementation details. Do not rely on them. */ + /* Identify Bison output. */ #define YYBISON 1 /* Bison version. */ -#define YYBISON_VERSION "3.0.4" +#define YYBISON_VERSION "3.5.1" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" @@ -61,8 +65,8 @@ -/* Copy the first part of user declarations. */ -#line 44 "p-exp.y" /* yacc.c:339 */ +/* First part of user prologue. */ +#line 44 "p-exp.y" #include "defs.h" @@ -101,13 +105,26 @@ static char *uptok (const char *, int); -#line 105 "p-exp.c.tmp" /* yacc.c:339 */ +#line 109 "p-exp.c.tmp" +# ifndef YY_CAST +# ifdef __cplusplus +# define YY_CAST(Type, Val) static_cast<Type> (Val) +# define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast<Type> (Val) +# else +# define YY_CAST(Type, Val) ((Type) (Val)) +# define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val)) +# endif +# endif # ifndef YY_NULLPTRPTR -# if defined __cplusplus && 201103L <= __cplusplus -# define YY_NULLPTRPTR nullptr +# if defined __cplusplus +# if 201103L <= __cplusplus +# define YY_NULLPTRPTR nullptr +# else +# define YY_NULLPTRPTR 0 +# endif # else -# define YY_NULLPTRPTR 0 +# define YY_NULLPTRPTR ((void*)0) # endif # endif @@ -209,10 +226,9 @@ /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED - union YYSTYPE { -#line 88 "p-exp.y" /* yacc.c:355 */ +#line 88 "p-exp.y" LONGEST lval; struct { @@ -237,9 +253,9 @@ int *ivec; -#line 241 "p-exp.c.tmp" /* yacc.c:355 */ -}; +#line 257 "p-exp.c.tmp" +}; typedef union YYSTYPE YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define YYSTYPE_IS_DECLARED 1 @@ -252,8 +268,8 @@ -/* Copy the second part of user declarations. */ -#line 112 "p-exp.y" /* yacc.c:358 */ +/* Second part of user prologue. */ +#line 112 "p-exp.y" /* YYSTYPE gets defined by %union */ static int parse_number (struct parser_state *, @@ -266,34 +282,82 @@ static void pop_current_type (void); static int search_field; -#line 270 "p-exp.c.tmp" /* yacc.c:358 */ +#line 286 "p-exp.c.tmp" + #ifdef short # undef short #endif -#ifdef YYTYPE_UINT8 -typedef YYTYPE_UINT8 yytype_uint8; -#else -typedef unsigned char yytype_uint8; +/* On compilers that do not define __PTRDIFF_MAX__ etc., make sure + <limits.h> and (if available) <stdint.h> are included + so that the code can choose integer types of a good width. */ + +#ifndef __PTRDIFF_MAX__ +# include <limits.h> /* INFRINGES ON USER NAME SPACE */ +# if defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__ +# include <stdint.h> /* INFRINGES ON USER NAME SPACE */ +# define YY_STDINT_H +# endif #endif -#ifdef YYTYPE_INT8 -typedef YYTYPE_INT8 yytype_int8; +/* Narrow types that promote to a signed type and that can represent a + signed or unsigned integer of at least N bits. In tables they can + save space and decrease cache pressure. Promoting to a signed type + helps avoid bugs in integer arithmetic. */ + +#ifdef __INT_LEAST8_MAX__ +typedef __INT_LEAST8_TYPE__ yytype_int8; +#elif defined YY_STDINT_H +typedef int_least8_t yytype_int8; #else typedef signed char yytype_int8; #endif -#ifdef YYTYPE_UINT16 -typedef YYTYPE_UINT16 yytype_uint16; +#ifdef __INT_LEAST16_MAX__ +typedef __INT_LEAST16_TYPE__ yytype_int16; +#elif defined YY_STDINT_H +typedef int_least16_t yytype_int16; +#else +typedef short yytype_int16; +#endif + +#if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__ +typedef __UINT_LEAST8_TYPE__ yytype_uint8; +#elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \ + && UINT_LEAST8_MAX <= INT_MAX) +typedef uint_least8_t yytype_uint8; +#elif !defined __UINT_LEAST8_MAX__ && UCHAR_MAX <= INT_MAX +typedef unsigned char yytype_uint8; #else -typedef unsigned short int yytype_uint16; +typedef short yytype_uint8; #endif -#ifdef YYTYPE_INT16 -typedef YYTYPE_INT16 yytype_int16; +#if defined __UINT_LEAST16_MAX__ && __UINT_LEAST16_MAX__ <= __INT_MAX__ +typedef __UINT_LEAST16_TYPE__ yytype_uint16; +#elif (!defined __UINT_LEAST16_MAX__ && defined YY_STDINT_H \ + && UINT_LEAST16_MAX <= INT_MAX) +typedef uint_least16_t yytype_uint16; +#elif !defined __UINT_LEAST16_MAX__ && USHRT_MAX <= INT_MAX +typedef unsigned short yytype_uint16; #else -typedef short int yytype_int16; +typedef int yytype_uint16; +#endif + +#ifndef YYPTRDIFF_T +# if defined __PTRDIFF_TYPE__ && defined __PTRDIFF_MAX__ +# define YYPTRDIFF_T __PTRDIFF_TYPE__ +# define YYPTRDIFF_MAXIMUM __PTRDIFF_MAX__ +# elif defined PTRDIFF_MAX +# ifndef ptrdiff_t +# include <stddef.h> /* INFRINGES ON USER NAME SPACE */ +# endif +# define YYPTRDIFF_T ptrdiff_t +# define YYPTRDIFF_MAXIMUM PTRDIFF_MAX +# else +# define YYPTRDIFF_T long +# define YYPTRDIFF_MAXIMUM LONG_MAX +# endif #endif #ifndef YYSIZE_T @@ -301,15 +365,27 @@ # define YYSIZE_T __SIZE_TYPE__ # elif defined size_t # define YYSIZE_T size_t -# elif ! defined YYSIZE_T +# elif defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__ # include <stddef.h> /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # else -# define YYSIZE_T unsigned int +# define YYSIZE_T unsigned # endif #endif -#define YYSIZE_MAXIMUM ((YYSIZE_T) -1) +#define YYSIZE_MAXIMUM \ + YY_CAST (YYPTRDIFF_T, \ + (YYPTRDIFF_MAXIMUM < YY_CAST (YYSIZE_T, -1) \ + ? YYPTRDIFF_MAXIMUM \ + : YY_CAST (YYSIZE_T, -1))) + +#define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X)) + +/* Stored state numbers (used for stacks). */ +typedef yytype_int8 yy_state_t; + +/* State numbers in computations. */ +typedef int yy_state_fast_t; #ifndef YY_ # if defined YYENABLE_NLS && YYENABLE_NLS @@ -323,30 +399,19 @@ # endif #endif -#ifndef YY_ATTRIBUTE -# if (defined __GNUC__ \ - && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__))) \ - || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C -# define YY_ATTRIBUTE(Spec) __attribute__(Spec) +#ifndef YY_ATTRIBUTE_PURE +# if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__) +# define YY_ATTRIBUTE_PURE __attribute__ ((__pure__)) # else -# define YY_ATTRIBUTE(Spec) /* empty */ +# define YY_ATTRIBUTE_PURE # endif #endif -#ifndef YY_ATTRIBUTE_PURE -# define YY_ATTRIBUTE_PURE YY_ATTRIBUTE ((__pure__)) -#endif - #ifndef YY_ATTRIBUTE_UNUSED -# define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__)) -#endif - -#if !defined _Noreturn \ - && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112) -# if defined _MSC_VER && 1200 <= _MSC_VER -# define _Noreturn __declspec (noreturn) +# if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__) +# define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__)) # else -# define _Noreturn YY_ATTRIBUTE ((__noreturn__)) +# define YY_ATTRIBUTE_UNUSED # endif #endif @@ -357,13 +422,13 @@ # define YYUSE(E) /* empty */ #endif -#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ +#if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ /* Suppress an incorrect diagnostic about yylval being uninitialized. */ -# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ - _Pragma ("GCC diagnostic push") \ - _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\ +# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ + _Pragma ("GCC diagnostic push") \ + _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \ _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") -# define YY_IGNORE_MAYBE_UNINITIALIZED_END \ +# define YY_IGNORE_MAYBE_UNINITIALIZED_END \ _Pragma ("GCC diagnostic pop") #else # define YY_INITIAL_VALUE(Value) Value @@ -376,6 +441,20 @@ # define YY_INITIAL_VALUE(Value) /* Nothing. */ #endif +#if defined __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__ +# define YY_IGNORE_USELESS_CAST_BEGIN \ + _Pragma ("GCC diagnostic push") \ + _Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"") +# define YY_IGNORE_USELESS_CAST_END \ + _Pragma ("GCC diagnostic pop") +#endif +#ifndef YY_IGNORE_USELESS_CAST_BEGIN +# define YY_IGNORE_USELESS_CAST_BEGIN +# define YY_IGNORE_USELESS_CAST_END +#endif + + +#define YY_ASSERT(E) ((void) (0 && (E))) #if ! defined yyoverflow || YYERROR_VERBOSE @@ -451,17 +530,17 @@ /* A type that is properly aligned for any stack member. */ union yyalloc { - yytype_int16 yyss_alloc; + yy_state_t yyss_alloc; YYSTYPE yyvs_alloc; }; /* The size of the maximum gap between one aligned stack and the next. */ -# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) +# define YYSTACK_GAP_MAXIMUM (YYSIZEOF (union yyalloc) - 1) /* The size of an array large to enough to hold all stacks, each with N elements. */ # define YYSTACK_BYTES(N) \ - ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ + ((N) * (YYSIZEOF (yy_state_t) + YYSIZEOF (YYSTYPE)) \ + YYSTACK_GAP_MAXIMUM) # define YYCOPY_NEEDED 1 @@ -474,11 +553,11 @@ # define YYSTACK_RELOCATE(Stack_alloc, Stack) \ do \ { \ - YYSIZE_T yynewbytes; \ + YYPTRDIFF_T yynewbytes; \ YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ Stack = &yyptr->Stack_alloc; \ - yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ - yyptr += yynewbytes / sizeof (*yyptr); \ + yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \ + yyptr += yynewbytes / YYSIZEOF (*yyptr); \ } \ while (0) @@ -490,12 +569,12 @@ # ifndef YYCOPY # if defined __GNUC__ && 1 < __GNUC__ # define YYCOPY(Dst, Src, Count) \ - __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src))) + __builtin_memcpy (Dst, Src, YY_CAST (YYSIZE_T, (Count)) * sizeof (*(Src))) # else # define YYCOPY(Dst, Src, Count) \ do \ { \ - YYSIZE_T yyi; \ + YYPTRDIFF_T yyi; \ for (yyi = 0; yyi < (Count); yyi++) \ (Dst)[yyi] = (Src)[yyi]; \ } \ @@ -518,17 +597,18 @@ /* YYNSTATES -- Number of states. */ #define YYNSTATES 126 -/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned - by yylex, with out-of-bounds checking. */ #define YYUNDEFTOK 2 #define YYMAXUTOK 292 + +/* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM + as returned by yylex, with out-of-bounds checking. */ #define YYTRANSLATE(YYX) \ - ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) + (0 <= (YYX) && (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) /* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM - as returned by yylex, without out-of-bounds checking. */ -static const yytype_uint8 yytranslate[] = + as returned by yylex. */ +static const yytype_int8 yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -564,16 +644,16 @@ #if YYDEBUG /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ -static const yytype_uint16 yyrline[] = +static const yytype_int16 yyrline[] = { 0, 194, 194, 194, 203, 204, 207, 214, 215, 220, 226, 232, 236, 240, 244, 249, 253, 271, 287, 293, - 305, 303, 336, 333, 349, 350, 352, 356, 371, 377, - 381, 381, 404, 408, 412, 416, 420, 424, 428, 434, - 440, 446, 452, 458, 464, 468, 472, 476, 480, 487, - 494, 502, 516, 524, 527, 542, 553, 557, 589, 617, - 636, 649, 665, 681, 682, 715, 776, 787, 791, 793, - 795, 800, 810, 811, 812, 813, 816, 817 + 305, 303, 337, 334, 350, 351, 353, 357, 372, 378, + 382, 382, 405, 409, 413, 417, 421, 425, 429, 435, + 441, 447, 453, 459, 465, 469, 473, 477, 481, 488, + 495, 503, 517, 525, 528, 543, 554, 558, 590, 618, + 637, 650, 666, 682, 683, 716, 777, 788, 792, 794, + 796, 801, 811, 812, 813, 814, 817, 818 }; #endif @@ -599,7 +679,7 @@ # ifdef YYPRINT /* YYTOKNUM[NUM] -- (External) token number corresponding to the (internal) symbol number NUM (which must be that of a token). */ -static const yytype_uint16 yytoknum[] = +static const yytype_int16 yytoknum[] = { 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, @@ -610,14 +690,14 @@ }; # endif -#define YYPACT_NINF -44 +#define YYPACT_NINF (-44) -#define yypact_value_is_default(Yystate) \ - (!!((Yystate) == (-44))) +#define yypact_value_is_default(Yyn) \ + ((Yyn) == YYPACT_NINF) -#define YYTABLE_NINF -61 +#define YYTABLE_NINF (-61) -#define yytable_value_is_error(Yytable_value) \ +#define yytable_value_is_error(Yyn) \ 0 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing @@ -642,7 +722,7 @@ /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. Performed when YYTABLE does not specify something else to do. Zero means the default is an error. */ -static const yytype_uint8 yydefact[] = +static const yytype_int8 yydefact[] = { 2, 0, 0, 1, 50, 52, 57, 76, 69, 51, 0, 0, 0, 0, 54, 58, 48, 49, 0, 0, @@ -762,7 +842,7 @@ /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ -static const yytype_uint8 yystos[] = +static const yytype_int8 yystos[] = { 0, 54, 55, 0, 3, 4, 5, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 23, 37, @@ -780,7 +860,7 @@ }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ -static const yytype_uint8 yyr1[] = +static const yytype_int8 yyr1[] = { 0, 53, 55, 54, 56, 56, 57, 58, 58, 59, 59, 59, 59, 59, 59, 60, 59, 59, 59, 59, @@ -793,7 +873,7 @@ }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ -static const yytype_uint8 yyr2[] = +static const yytype_int8 yyr2[] = { 0, 2, 0, 2, 1, 1, 1, 1, 3, 2, 2, 2, 2, 4, 4, 2, 2, 2, 3, 2, @@ -818,22 +898,22 @@ #define YYRECOVERING() (!!yyerrstatus) -#define YYBACKUP(Token, Value) \ -do \ - if (yychar == YYEMPTY) \ - { \ - yychar = (Token); \ - yylval = (Value); \ - YYPOPSTACK (yylen); \ - yystate = *yyssp; \ - goto yybackup; \ - } \ - else \ - { \ - yyerror (YY_("syntax error: cannot back up")); \ - YYERROR; \ - } \ -while (0) +#define YYBACKUP(Token, Value) \ + do \ + if (yychar == YYEMPTY) \ + { \ + yychar = (Token); \ + yylval = (Value); \ + YYPOPSTACK (yylen); \ + yystate = *yyssp; \ + goto yybackup; \ + } \ + else \ + { \ + yyerror (YY_("syntax error: cannot back up")); \ + YYERROR; \ + } \ + while (0) /* Error token number */ #define YYTERROR 1 @@ -873,37 +953,39 @@ } while (0) -/*----------------------------------------. -| Print this symbol's value on YYOUTPUT. | -`----------------------------------------*/ +/*-----------------------------------. +| Print this symbol's value on YYO. | +`-----------------------------------*/ static void -yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) +yy_symbol_value_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep) { - FILE *yyo = yyoutput; - YYUSE (yyo); + FILE *yyoutput = yyo; + YYUSE (yyoutput); if (!yyvaluep) return; # ifdef YYPRINT if (yytype < YYNTOKENS) - YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); + YYPRINT (yyo, yytoknum[yytype], *yyvaluep); # endif + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN YYUSE (yytype); + YY_IGNORE_MAYBE_UNINITIALIZED_END } -/*--------------------------------. -| Print this symbol on YYOUTPUT. | -`--------------------------------*/ +/*---------------------------. +| Print this symbol on YYO. | +`---------------------------*/ static void -yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) +yy_symbol_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep) { - YYFPRINTF (yyoutput, "%s %s (", + YYFPRINTF (yyo, "%s %s (", yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]); - yy_symbol_value_print (yyoutput, yytype, yyvaluep); - YYFPRINTF (yyoutput, ")"); + yy_symbol_value_print (yyo, yytype, yyvaluep); + YYFPRINTF (yyo, ")"); } /*------------------------------------------------------------------. @@ -912,7 +994,7 @@ `------------------------------------------------------------------*/ static void -yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop) +yy_stack_print (yy_state_t *yybottom, yy_state_t *yytop) { YYFPRINTF (stderr, "Stack now"); for (; yybottom <= yytop; yybottom++) @@ -935,20 +1017,20 @@ `------------------------------------------------*/ static void -yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule) +yy_reduce_print (yy_state_t *yyssp, YYSTYPE *yyvsp, int yyrule) { - unsigned long int yylno = yyrline[yyrule]; + int yylno = yyrline[yyrule]; int yynrhs = yyr2[yyrule]; int yyi; - YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", + YYFPRINTF (stderr, "Reducing stack by rule %d (line %d):\n", yyrule - 1, yylno); /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { YYFPRINTF (stderr, " $%d = ", yyi + 1); yy_symbol_print (stderr, - yystos[yyssp[yyi + 1 - yynrhs]], - &(yyvsp[(yyi + 1) - (yynrhs)]) + yystos[+yyssp[yyi + 1 - yynrhs]], + &yyvsp[(yyi + 1) - (yynrhs)] ); YYFPRINTF (stderr, "\n"); } @@ -992,13 +1074,13 @@ # ifndef yystrlen # if defined __GLIBC__ && defined _STRING_H -# define yystrlen strlen +# define yystrlen(S) (YY_CAST (YYPTRDIFF_T, strlen (S))) # else /* Return the length of YYSTR. */ -static YYSIZE_T +static YYPTRDIFF_T yystrlen (const char *yystr) { - YYSIZE_T yylen; + YYPTRDIFF_T yylen; for (yylen = 0; yystr[yylen]; yylen++) continue; return yylen; @@ -1034,12 +1116,12 @@ backslash-backslash). YYSTR is taken from yytname. If YYRES is null, do not copy; instead, return the length of what the result would have been. */ -static YYSIZE_T +static YYPTRDIFF_T yytnamerr (char *yyres, const char *yystr) { if (*yystr == '"') { - YYSIZE_T yyn = 0; + YYPTRDIFF_T yyn = 0; char const *yyp = yystr; for (;;) @@ -1052,7 +1134,10 @@ case '\\': if (*++yyp != '\\') goto do_not_strip_quotes; - /* Fall through. */ + else + goto append; + + append: default: if (yyres) yyres[yyn] = *yyp; @@ -1067,10 +1152,10 @@ do_not_strip_quotes: ; } - if (! yyres) + if (yyres) + return yystpcpy (yyres, yystr) - yyres; + else return yystrlen (yystr); - - return yystpcpy (yyres, yystr) - yyres; } # endif @@ -1083,19 +1168,19 @@ *YYMSG_ALLOC to the required number of bytes. Return 2 if the required number of bytes is too large to store. */ static int -yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, - yytype_int16 *yyssp, int yytoken) +yysyntax_error (YYPTRDIFF_T *yymsg_alloc, char **yymsg, + yy_state_t *yyssp, int yytoken) { - YYSIZE_T yysize0 = yytnamerr (YY_NULLPTRPTR, yytname[yytoken]); - YYSIZE_T yysize = yysize0; enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; /* Internationalized format string. */ const char *yyformat = YY_NULLPTRPTR; - /* Arguments of yyformat. */ + /* Arguments of yyformat: reported tokens (one for the "unexpected", + one per "expected"). */ char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; - /* Number of reported tokens (one for the "unexpected", one per - "expected"). */ + /* Actual size of YYARG. */ int yycount = 0; + /* Cumulated lengths of YYARG. */ + YYPTRDIFF_T yysize = 0; /* There are many possibilities here to consider: - If this state is a consistent state with a default action, then @@ -1122,7 +1207,9 @@ */ if (yytoken != YYEMPTY) { - int yyn = yypact[*yyssp]; + int yyn = yypact[+*yyssp]; + YYPTRDIFF_T yysize0 = yytnamerr (YY_NULLPTRPTR, yytname[yytoken]); + yysize = yysize0; yyarg[yycount++] = yytname[yytoken]; if (!yypact_value_is_default (yyn)) { @@ -1147,11 +1234,12 @@ } yyarg[yycount++] = yytname[yyx]; { - YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTRPTR, yytname[yyx]); - if (! (yysize <= yysize1 - && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) + YYPTRDIFF_T yysize1 + = yysize + yytnamerr (YY_NULLPTRPTR, yytname[yyx]); + if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM) + yysize = yysize1; + else return 2; - yysize = yysize1; } } } @@ -1163,6 +1251,7 @@ case N: \ yyformat = S; \ break + default: /* Avoid compiler warnings. */ YYCASE_(0, YY_("syntax error")); YYCASE_(1, YY_("syntax error, unexpected %s")); YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); @@ -1173,10 +1262,13 @@ } { - YYSIZE_T yysize1 = yysize + yystrlen (yyformat); - if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) + /* Don't count the "%s"s in the final size, but reserve room for + the terminator. */ + YYPTRDIFF_T yysize1 = yysize + (yystrlen (yyformat) - 2 * yycount) + 1; + if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM) + yysize = yysize1; + else return 2; - yysize = yysize1; } if (*yymsg_alloc < yysize) @@ -1202,8 +1294,8 @@ } else { - yyp++; - yyformat++; + ++yyp; + ++yyformat; } } return 0; @@ -1246,7 +1338,7 @@ int yyparse (void) { - int yystate; + yy_state_fast_t yystate; /* Number of tokens to shift before error messages enabled. */ int yyerrstatus; @@ -1258,16 +1350,16 @@ to xreallocate them elsewhere. */ /* The state stack. */ - yytype_int16 yyssa[YYINITDEPTH]; - yytype_int16 *yyss; - yytype_int16 *yyssp; + yy_state_t yyssa[YYINITDEPTH]; + yy_state_t *yyss; + yy_state_t *yyssp; /* The semantic value stack. */ YYSTYPE yyvsa[YYINITDEPTH]; YYSTYPE *yyvs; YYSTYPE *yyvsp; - YYSIZE_T yystacksize; + YYPTRDIFF_T yystacksize; int yyn; int yyresult; @@ -1281,7 +1373,7 @@ /* Buffer for error messages, and its allocated size. */ char yymsgbuf[128]; char *yymsg = yymsgbuf; - YYSIZE_T yymsg_alloc = sizeof yymsgbuf; + YYPTRDIFF_T yymsg_alloc = sizeof yymsgbuf; #endif #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) @@ -1302,46 +1394,54 @@ yychar = YYEMPTY; /* Cause a token to be read. */ goto yysetstate; + /*------------------------------------------------------------. -| yynewstate -- Push a new state, which is found in yystate. | +| yynewstate -- push a new state, which is found in yystate. | `------------------------------------------------------------*/ - yynewstate: +yynewstate: /* In all cases, when you get here, the value and location stacks have just been pushed. So pushing a state here evens the stacks. */ yyssp++; - yysetstate: - *yyssp = yystate; + +/*--------------------------------------------------------------------. +| yysetstate -- set current state (the top of the stack) to yystate. | +`--------------------------------------------------------------------*/ +yysetstate: + YYDPRINTF ((stderr, "Entering state %d\n", yystate)); + YY_ASSERT (0 <= yystate && yystate < YYNSTATES); + YY_IGNORE_USELESS_CAST_BEGIN + *yyssp = YY_CAST (yy_state_t, yystate); + YY_IGNORE_USELESS_CAST_END if (yyss + yystacksize - 1 <= yyssp) +#if !defined yyoverflow && !defined YYSTACK_RELOCATE + goto yyexhaustedlab; +#else { /* Get the current used size of the three stacks, in elements. */ - YYSIZE_T yysize = yyssp - yyss + 1; + YYPTRDIFF_T yysize = yyssp - yyss + 1; -#ifdef yyoverflow +# if defined yyoverflow { /* Give user a chance to xreallocate the stack. Use copies of these so that the &'s don't force the real ones into memory. */ + yy_state_t *yyss1 = yyss; YYSTYPE *yyvs1 = yyvs; - yytype_int16 *yyss1 = yyss; /* Each stack pointer address is followed by the size of the data in use in that stack, in bytes. This used to be a conditional around just the two extra args, but that might be undefined if yyoverflow is a macro. */ yyoverflow (YY_("memory exhausted"), - &yyss1, yysize * sizeof (*yyssp), - &yyvs1, yysize * sizeof (*yyvsp), + &yyss1, yysize * YYSIZEOF (*yyssp), + &yyvs1, yysize * YYSIZEOF (*yyvsp), &yystacksize); - yyss = yyss1; yyvs = yyvs1; } -#else /* no yyoverflow */ -# ifndef YYSTACK_RELOCATE - goto yyexhaustedlab; -# else +# else /* defined YYSTACK_RELOCATE */ /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) goto yyexhaustedlab; @@ -1350,42 +1450,43 @@ yystacksize = YYMAXDEPTH; { - yytype_int16 *yyss1 = yyss; + yy_state_t *yyss1 = yyss; union yyalloc *yyptr = - (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); + YY_CAST (union yyalloc *, + YYSTACK_ALLOC (YY_CAST (YYSIZE_T, YYSTACK_BYTES (yystacksize)))); if (! yyptr) goto yyexhaustedlab; YYSTACK_RELOCATE (yyss_alloc, yyss); YYSTACK_RELOCATE (yyvs_alloc, yyvs); -# undef YYSTACK_RELOCATE +# undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); } # endif -#endif /* no yyoverflow */ yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; - YYDPRINTF ((stderr, "Stack size increased to %lu\n", - (unsigned long int) yystacksize)); + YY_IGNORE_USELESS_CAST_BEGIN + YYDPRINTF ((stderr, "Stack size increased to %ld\n", + YY_CAST (long, yystacksize))); + YY_IGNORE_USELESS_CAST_END if (yyss + yystacksize - 1 <= yyssp) YYABORT; } - - YYDPRINTF ((stderr, "Entering state %d\n", yystate)); +#endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */ if (yystate == YYFINAL) YYACCEPT; goto yybackup; + /*-----------. | yybackup. | `-----------*/ yybackup: - /* Do appropriate processing given the current state. Read a lookahead token if we need one and don't already have one. */ @@ -1435,15 +1536,13 @@ /* Shift the lookahead token. */ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); - - /* Discard the shifted token. */ - yychar = YYEMPTY; - yystate = yyn; YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; YY_IGNORE_MAYBE_UNINITIALIZED_END + /* Discard the shifted token. */ + yychar = YYEMPTY; goto yynewstate; @@ -1458,7 +1557,7 @@ /*-----------------------------. -| yyreduce -- Do a reduction. | +| yyreduce -- do a reduction. | `-----------------------------*/ yyreduce: /* yyn is the number of a rule to reduce with. */ @@ -1478,92 +1577,92 @@ YY_REDUCE_PRINT (yyn); switch (yyn) { - case 2: -#line 194 "p-exp.y" /* yacc.c:1646 */ - { current_type = NULL; + case 2: +#line 194 "p-exp.y" + { current_type = NULL; intvar = NULL; search_field = 0; leftdiv_is_integer = 0; } -#line 1490 "p-exp.c.tmp" /* yacc.c:1646 */ +#line 1589 "p-exp.c.tmp" break; case 3: -#line 199 "p-exp.y" /* yacc.c:1646 */ - {} -#line 1496 "p-exp.c.tmp" /* yacc.c:1646 */ +#line 199 "p-exp.y" + {} +#line 1595 "p-exp.c.tmp" break; case 6: -#line 208 "p-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, OP_TYPE); +#line 208 "p-exp.y" + { write_exp_elt_opcode (pstate, OP_TYPE); write_exp_elt_type (pstate, (yyvsp[0].tval)); write_exp_elt_opcode (pstate, OP_TYPE); current_type = (yyvsp[0].tval); } -#line 1505 "p-exp.c.tmp" /* yacc.c:1646 */ +#line 1604 "p-exp.c.tmp" break; case 8: -#line 216 "p-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_COMMA); } -#line 1511 "p-exp.c.tmp" /* yacc.c:1646 */ +#line 216 "p-exp.y" + { write_exp_elt_opcode (pstate, BINOP_COMMA); } +#line 1610 "p-exp.c.tmp" break; case 9: -#line 221 "p-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_IND); +#line 221 "p-exp.y" + { write_exp_elt_opcode (pstate, UNOP_IND); if (current_type) current_type = TYPE_TARGET_TYPE (current_type); } -#line 1519 "p-exp.c.tmp" /* yacc.c:1646 */ +#line 1618 "p-exp.c.tmp" break; case 10: -#line 227 "p-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_ADDR); +#line 227 "p-exp.y" + { write_exp_elt_opcode (pstate, UNOP_ADDR); if (current_type) current_type = TYPE_POINTER_TYPE (current_type); } -#line 1527 "p-exp.c.tmp" /* yacc.c:1646 */ +#line 1626 "p-exp.c.tmp" break; case 11: -#line 233 "p-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_NEG); } -#line 1533 "p-exp.c.tmp" /* yacc.c:1646 */ +#line 233 "p-exp.y" + { write_exp_elt_opcode (pstate, UNOP_NEG); } +#line 1632 "p-exp.c.tmp" break; case 12: -#line 237 "p-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_LOGICAL_NOT); } -#line 1539 "p-exp.c.tmp" /* yacc.c:1646 */ +#line 237 "p-exp.y" + { write_exp_elt_opcode (pstate, UNOP_LOGICAL_NOT); } +#line 1638 "p-exp.c.tmp" break; case 13: -#line 241 "p-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_PREINCREMENT); } -#line 1545 "p-exp.c.tmp" /* yacc.c:1646 */ +#line 241 "p-exp.y" + { write_exp_elt_opcode (pstate, UNOP_PREINCREMENT); } +#line 1644 "p-exp.c.tmp" break; case 14: -#line 245 "p-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_PREDECREMENT); } -#line 1551 "p-exp.c.tmp" /* yacc.c:1646 */ +#line 245 "p-exp.y" + { write_exp_elt_opcode (pstate, UNOP_PREDECREMENT); } +#line 1650 "p-exp.c.tmp" break; case 15: -#line 250 "p-exp.y" /* yacc.c:1646 */ - { search_field = 1; } -#line 1557 "p-exp.c.tmp" /* yacc.c:1646 */ +#line 250 "p-exp.y" + { search_field = 1; } +#line 1656 "p-exp.c.tmp" break; case 16: -#line 254 "p-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); +#line 254 "p-exp.y" + { write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); write_exp_string (pstate, (yyvsp[0].sval)); write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); search_field = 0; if (current_type) { - while (TYPE_CODE (current_type) + while (current_type->code () == TYPE_CODE_PTR) current_type = TYPE_TARGET_TYPE (current_type); @@ -1571,18 +1670,18 @@ current_type, (yyvsp[0].sval).ptr, 0); } } -#line 1576 "p-exp.c.tmp" /* yacc.c:1646 */ +#line 1675 "p-exp.c.tmp" break; case 17: -#line 272 "p-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); +#line 272 "p-exp.y" + { write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); write_exp_string (pstate, (yyvsp[0].sval)); write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); search_field = 0; if (current_type) { - while (TYPE_CODE (current_type) + while (current_type->code () == TYPE_CODE_PTR) current_type = TYPE_TARGET_TYPE (current_type); @@ -1590,33 +1689,33 @@ current_type, (yyvsp[0].sval).ptr, 0); } } -#line 1595 "p-exp.c.tmp" /* yacc.c:1646 */ +#line 1694 "p-exp.c.tmp" break; case 18: -#line 288 "p-exp.y" /* yacc.c:1646 */ - { pstate->mark_struct_expression (); +#line 288 "p-exp.y" + { pstate->mark_struct_expression (); write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); write_exp_string (pstate, (yyvsp[-1].sval)); write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); } -#line 1604 "p-exp.c.tmp" /* yacc.c:1646 */ +#line 1703 "p-exp.c.tmp" break; case 19: -#line 294 "p-exp.y" /* yacc.c:1646 */ - { struct stoken s; +#line 294 "p-exp.y" + { struct stoken s; pstate->mark_struct_expression (); write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); s.ptr = ""; s.length = 0; write_exp_string (pstate, s); write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); } -#line 1616 "p-exp.c.tmp" /* yacc.c:1646 */ +#line 1715 "p-exp.c.tmp" break; case 20: -#line 305 "p-exp.y" /* yacc.c:1646 */ - { const char *arrayname; +#line 305 "p-exp.y" + { const char *arrayname; int arrayfieldindex; arrayfieldindex = is_pascal_string_type ( current_type, NULL, NULL, @@ -1630,35 +1729,36 @@ stringsval.ptr = buf; stringsval.length = strlen (arrayname); strcpy (buf, arrayname); - current_type = TYPE_FIELD_TYPE (current_type, - arrayfieldindex - 1); + current_type + = (current_type + ->field (arrayfieldindex - 1).type ()); write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); write_exp_string (pstate, stringsval); write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); } push_current_type (); } -#line 1642 "p-exp.c.tmp" /* yacc.c:1646 */ +#line 1742 "p-exp.c.tmp" break; case 21: -#line 327 "p-exp.y" /* yacc.c:1646 */ - { pop_current_type (); +#line 328 "p-exp.y" + { pop_current_type (); write_exp_elt_opcode (pstate, BINOP_SUBSCRIPT); if (current_type) current_type = TYPE_TARGET_TYPE (current_type); } -#line 1651 "p-exp.c.tmp" /* yacc.c:1646 */ +#line 1751 "p-exp.c.tmp" break; case 22: -#line 336 "p-exp.y" /* yacc.c:1646 */ - { push_current_type (); +#line 337 "p-exp.y" + { push_current_type (); pstate->start_arglist (); } -#line 1658 "p-exp.c.tmp" /* yacc.c:1646 */ +#line 1758 "p-exp.c.tmp" break; case 23: -#line 339 "p-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, OP_FUNCALL); +#line 340 "p-exp.y" + { write_exp_elt_opcode (pstate, OP_FUNCALL); write_exp_elt_longcst (pstate, pstate->end_arglist ()); write_exp_elt_opcode (pstate, OP_FUNCALL); @@ -1666,62 +1766,62 @@ if (current_type) current_type = TYPE_TARGET_TYPE (current_type); } -#line 1671 "p-exp.c.tmp" /* yacc.c:1646 */ +#line 1771 "p-exp.c.tmp" break; case 25: -#line 351 "p-exp.y" /* yacc.c:1646 */ - { pstate->arglist_len = 1; } -#line 1677 "p-exp.c.tmp" /* yacc.c:1646 */ +#line 352 "p-exp.y" + { pstate->arglist_len = 1; } +#line 1777 "p-exp.c.tmp" break; case 26: -#line 353 "p-exp.y" /* yacc.c:1646 */ - { pstate->arglist_len++; } -#line 1683 "p-exp.c.tmp" /* yacc.c:1646 */ +#line 354 "p-exp.y" + { pstate->arglist_len++; } +#line 1783 "p-exp.c.tmp" break; case 27: -#line 357 "p-exp.y" /* yacc.c:1646 */ - { if (current_type) +#line 358 "p-exp.y" + { if (current_type) { /* Allow automatic dereference of classes. */ - if ((TYPE_CODE (current_type) == TYPE_CODE_PTR) - && (TYPE_CODE (TYPE_TARGET_TYPE (current_type)) == TYPE_CODE_STRUCT) - && (TYPE_CODE ((yyvsp[-3].tval)) == TYPE_CODE_STRUCT)) + if ((current_type->code () == TYPE_CODE_PTR) + && (TYPE_TARGET_TYPE (current_type)->code () == TYPE_CODE_STRUCT) + && (((yyvsp[-3].tval))->code () == TYPE_CODE_STRUCT)) write_exp_elt_opcode (pstate, UNOP_IND); } write_exp_elt_opcode (pstate, UNOP_CAST); write_exp_elt_type (pstate, (yyvsp[-3].tval)); write_exp_elt_opcode (pstate, UNOP_CAST); current_type = (yyvsp[-3].tval); } -#line 1700 "p-exp.c.tmp" /* yacc.c:1646 */ +#line 1800 "p-exp.c.tmp" break; case 28: -#line 372 "p-exp.y" /* yacc.c:1646 */ - { } -#line 1706 "p-exp.c.tmp" /* yacc.c:1646 */ +#line 373 "p-exp.y" + { } +#line 1806 "p-exp.c.tmp" break; case 29: -#line 378 "p-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_MUL); } -#line 1712 "p-exp.c.tmp" /* yacc.c:1646 */ +#line 379 "p-exp.y" + { write_exp_elt_opcode (pstate, BINOP_MUL); } +#line 1812 "p-exp.c.tmp" break; case 30: -#line 381 "p-exp.y" /* yacc.c:1646 */ - { +#line 382 "p-exp.y" + { if (current_type && is_integral_type (current_type)) leftdiv_is_integer = 1; } -#line 1721 "p-exp.c.tmp" /* yacc.c:1646 */ +#line 1821 "p-exp.c.tmp" break; case 31: -#line 386 "p-exp.y" /* yacc.c:1646 */ - { +#line 387 "p-exp.y" + { if (leftdiv_is_integer && current_type && is_integral_type (current_type)) { @@ -1737,148 +1837,148 @@ write_exp_elt_opcode (pstate, BINOP_DIV); } -#line 1742 "p-exp.c.tmp" /* yacc.c:1646 */ +#line 1842 "p-exp.c.tmp" break; case 32: -#line 405 "p-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_INTDIV); } -#line 1748 "p-exp.c.tmp" /* yacc.c:1646 */ +#line 406 "p-exp.y" + { write_exp_elt_opcode (pstate, BINOP_INTDIV); } +#line 1848 "p-exp.c.tmp" break; case 33: -#line 409 "p-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_REM); } -#line 1754 "p-exp.c.tmp" /* yacc.c:1646 */ +#line 410 "p-exp.y" + { write_exp_elt_opcode (pstate, BINOP_REM); } +#line 1854 "p-exp.c.tmp" break; case 34: -#line 413 "p-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_ADD); } -#line 1760 "p-exp.c.tmp" /* yacc.c:1646 */ +#line 414 "p-exp.y" + { write_exp_elt_opcode (pstate, BINOP_ADD); } +#line 1860 "p-exp.c.tmp" break; case 35: -#line 417 "p-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_SUB); } -#line 1766 "p-exp.c.tmp" /* yacc.c:1646 */ +#line 418 "p-exp.y" + { write_exp_elt_opcode (pstate, BINOP_SUB); } +#line 1866 "p-exp.c.tmp" break; case 36: -#line 421 "p-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_LSH); } -#line 1772 "p-exp.c.tmp" /* yacc.c:1646 */ +#line 422 "p-exp.y" + { write_exp_elt_opcode (pstate, BINOP_LSH); } +#line 1872 "p-exp.c.tmp" break; case 37: -#line 425 "p-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_RSH); } -#line 1778 "p-exp.c.tmp" /* yacc.c:1646 */ +#line 426 "p-exp.y" + { write_exp_elt_opcode (pstate, BINOP_RSH); } +#line 1878 "p-exp.c.tmp" break; case 38: -#line 429 "p-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_EQUAL); +#line 430 "p-exp.y" + { write_exp_elt_opcode (pstate, BINOP_EQUAL); current_type = parse_type (pstate)->builtin_bool; } -#line 1786 "p-exp.c.tmp" /* yacc.c:1646 */ +#line 1886 "p-exp.c.tmp" break; case 39: -#line 435 "p-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_NOTEQUAL); +#line 436 "p-exp.y" + { write_exp_elt_opcode (pstate, BINOP_NOTEQUAL); current_type = parse_type (pstate)->builtin_bool; } -#line 1794 "p-exp.c.tmp" /* yacc.c:1646 */ +#line 1894 "p-exp.c.tmp" break; case 40: -#line 441 "p-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_LEQ); +#line 442 "p-exp.y" + { write_exp_elt_opcode (pstate, BINOP_LEQ); current_type = parse_type (pstate)->builtin_bool; } -#line 1802 "p-exp.c.tmp" /* yacc.c:1646 */ +#line 1902 "p-exp.c.tmp" break; case 41: -#line 447 "p-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_GEQ); +#line 448 "p-exp.y" + { write_exp_elt_opcode (pstate, BINOP_GEQ); current_type = parse_type (pstate)->builtin_bool; } -#line 1810 "p-exp.c.tmp" /* yacc.c:1646 */ +#line 1910 "p-exp.c.tmp" break; case 42: -#line 453 "p-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_LESS); +#line 454 "p-exp.y" + { write_exp_elt_opcode (pstate, BINOP_LESS); current_type = parse_type (pstate)->builtin_bool; } -#line 1818 "p-exp.c.tmp" /* yacc.c:1646 */ +#line 1918 "p-exp.c.tmp" break; case 43: -#line 459 "p-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_GTR); +#line 460 "p-exp.y" + { write_exp_elt_opcode (pstate, BINOP_GTR); current_type = parse_type (pstate)->builtin_bool; } -#line 1826 "p-exp.c.tmp" /* yacc.c:1646 */ +#line 1926 "p-exp.c.tmp" break; case 44: -#line 465 "p-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_BITWISE_AND); } -#line 1832 "p-exp.c.tmp" /* yacc.c:1646 */ +#line 466 "p-exp.y" + { write_exp_elt_opcode (pstate, BINOP_BITWISE_AND); } +#line 1932 "p-exp.c.tmp" break; case 45: -#line 469 "p-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_BITWISE_XOR); } -#line 1838 "p-exp.c.tmp" /* yacc.c:1646 */ +#line 470 "p-exp.y" + { write_exp_elt_opcode (pstate, BINOP_BITWISE_XOR); } +#line 1938 "p-exp.c.tmp" break; case 46: -#line 473 "p-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_BITWISE_IOR); } -#line 1844 "p-exp.c.tmp" /* yacc.c:1646 */ +#line 474 "p-exp.y" + { write_exp_elt_opcode (pstate, BINOP_BITWISE_IOR); } +#line 1944 "p-exp.c.tmp" break; case 47: -#line 477 "p-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, BINOP_ASSIGN); } -#line 1850 "p-exp.c.tmp" /* yacc.c:1646 */ +#line 478 "p-exp.y" + { write_exp_elt_opcode (pstate, BINOP_ASSIGN); } +#line 1950 "p-exp.c.tmp" break; case 48: -#line 481 "p-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, OP_BOOL); +#line 482 "p-exp.y" + { write_exp_elt_opcode (pstate, OP_BOOL); write_exp_elt_longcst (pstate, (LONGEST) (yyvsp[0].lval)); current_type = parse_type (pstate)->builtin_bool; write_exp_elt_opcode (pstate, OP_BOOL); } -#line 1859 "p-exp.c.tmp" /* yacc.c:1646 */ +#line 1959 "p-exp.c.tmp" break; case 49: -#line 488 "p-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, OP_BOOL); +#line 489 "p-exp.y" + { write_exp_elt_opcode (pstate, OP_BOOL); write_exp_elt_longcst (pstate, (LONGEST) (yyvsp[0].lval)); current_type = parse_type (pstate)->builtin_bool; write_exp_elt_opcode (pstate, OP_BOOL); } -#line 1868 "p-exp.c.tmp" /* yacc.c:1646 */ +#line 1968 "p-exp.c.tmp" break; case 50: -#line 495 "p-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, OP_LONG); +#line 496 "p-exp.y" + { write_exp_elt_opcode (pstate, OP_LONG); write_exp_elt_type (pstate, (yyvsp[0].typed_val_int).type); current_type = (yyvsp[0].typed_val_int).type; write_exp_elt_longcst (pstate, (LONGEST)((yyvsp[0].typed_val_int).val)); write_exp_elt_opcode (pstate, OP_LONG); } -#line 1878 "p-exp.c.tmp" /* yacc.c:1646 */ +#line 1978 "p-exp.c.tmp" break; case 51: -#line 503 "p-exp.y" /* yacc.c:1646 */ - { YYSTYPE val; +#line 504 "p-exp.y" + { YYSTYPE val; parse_number (pstate, (yyvsp[0].ssym).stoken.ptr, (yyvsp[0].ssym).stoken.length, 0, &val); write_exp_elt_opcode (pstate, OP_LONG); @@ -1888,22 +1988,22 @@ val.typed_val_int.val); write_exp_elt_opcode (pstate, OP_LONG); } -#line 1893 "p-exp.c.tmp" /* yacc.c:1646 */ +#line 1993 "p-exp.c.tmp" break; case 52: -#line 517 "p-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, OP_FLOAT); +#line 518 "p-exp.y" + { write_exp_elt_opcode (pstate, OP_FLOAT); write_exp_elt_type (pstate, (yyvsp[0].typed_val_float).type); current_type = (yyvsp[0].typed_val_float).type; write_exp_elt_floatcst (pstate, (yyvsp[0].typed_val_float).val); write_exp_elt_opcode (pstate, OP_FLOAT); } -#line 1903 "p-exp.c.tmp" /* yacc.c:1646 */ +#line 2003 "p-exp.c.tmp" break; case 54: -#line 530 "p-exp.y" /* yacc.c:1646 */ - { if (intvar) { +#line 531 "p-exp.y" + { if (intvar) { struct value * val, * mark; mark = value_mark (); @@ -1913,12 +2013,12 @@ value_release_to_mark (mark); } } -#line 1918 "p-exp.c.tmp" /* yacc.c:1646 */ +#line 2018 "p-exp.c.tmp" break; case 55: -#line 543 "p-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, OP_LONG); +#line 544 "p-exp.y" + { write_exp_elt_opcode (pstate, OP_LONG); write_exp_elt_type (pstate, parse_type (pstate)->builtin_int); current_type = parse_type (pstate)->builtin_int; @@ -1926,19 +2026,19 @@ write_exp_elt_longcst (pstate, (LONGEST) TYPE_LENGTH ((yyvsp[-1].tval))); write_exp_elt_opcode (pstate, OP_LONG); } -#line 1931 "p-exp.c.tmp" /* yacc.c:1646 */ +#line 2031 "p-exp.c.tmp" break; case 56: -#line 554 "p-exp.y" /* yacc.c:1646 */ - { write_exp_elt_opcode (pstate, UNOP_SIZEOF); +#line 555 "p-exp.y" + { write_exp_elt_opcode (pstate, UNOP_SIZEOF); current_type = parse_type (pstate)->builtin_int; } -#line 1938 "p-exp.c.tmp" /* yacc.c:1646 */ +#line 2038 "p-exp.c.tmp" break; case 57: -#line 558 "p-exp.y" /* yacc.c:1646 */ - { /* C strings are converted into array constants with +#line 559 "p-exp.y" + { /* C strings are converted into array constants with an explicit null byte added at the end. Thus the array upper bound is the string length. There is no such thing in C as a completely empty @@ -1966,12 +2066,12 @@ write_exp_elt_longcst (pstate, (LONGEST) ((yyvsp[0].sval).length)); write_exp_elt_opcode (pstate, OP_ARRAY); } -#line 1971 "p-exp.c.tmp" /* yacc.c:1646 */ +#line 2071 "p-exp.c.tmp" break; case 58: -#line 590 "p-exp.y" /* yacc.c:1646 */ - { +#line 591 "p-exp.y" + { struct value * this_val; struct type * this_type; write_exp_elt_opcode (pstate, OP_THIS); @@ -1985,7 +2085,7 @@ this_type = NULL; if (this_type) { - if (TYPE_CODE (this_type) == TYPE_CODE_PTR) + if (this_type->code () == TYPE_CODE_PTR) { this_type = TYPE_TARGET_TYPE (this_type); write_exp_elt_opcode (pstate, UNOP_IND); @@ -1994,12 +2094,12 @@ current_type = this_type; } -#line 1999 "p-exp.c.tmp" /* yacc.c:1646 */ +#line 2099 "p-exp.c.tmp" break; case 59: -#line 618 "p-exp.y" /* yacc.c:1646 */ - { +#line 619 "p-exp.y" + { if ((yyvsp[0].ssym).sym.symbol != 0) (yyval.bval) = SYMBOL_BLOCK_VALUE ((yyvsp[0].ssym).sym.symbol); else @@ -2015,12 +2115,12 @@ copy.c_str ()); } } -#line 2020 "p-exp.c.tmp" /* yacc.c:1646 */ +#line 2120 "p-exp.c.tmp" break; case 60: -#line 637 "p-exp.y" /* yacc.c:1646 */ - { +#line 638 "p-exp.y" + { std::string copy = copy_name ((yyvsp[0].sval)); struct symbol *tem = lookup_symbol (copy.c_str (), (yyvsp[-2].bval), @@ -2030,12 +2130,12 @@ error (_("No function \"%s\" in specified context."), copy.c_str ()); (yyval.bval) = SYMBOL_BLOCK_VALUE (tem); } -#line 2035 "p-exp.c.tmp" /* yacc.c:1646 */ +#line 2135 "p-exp.c.tmp" break; case 61: -#line 650 "p-exp.y" /* yacc.c:1646 */ - { struct block_symbol sym; +#line 651 "p-exp.y" + { struct block_symbol sym; std::string copy = copy_name ((yyvsp[0].sval)); sym = lookup_symbol (copy.c_str (), (yyvsp[-2].bval), @@ -2048,30 +2148,30 @@ write_exp_elt_block (pstate, sym.block); write_exp_elt_sym (pstate, sym.symbol); write_exp_elt_opcode (pstate, OP_VAR_VALUE); } -#line 2053 "p-exp.c.tmp" /* yacc.c:1646 */ +#line 2153 "p-exp.c.tmp" break; case 62: -#line 666 "p-exp.y" /* yacc.c:1646 */ - { +#line 667 "p-exp.y" + { struct type *type = (yyvsp[-2].tval); - if (TYPE_CODE (type) != TYPE_CODE_STRUCT - && TYPE_CODE (type) != TYPE_CODE_UNION) + if (type->code () != TYPE_CODE_STRUCT + && type->code () != TYPE_CODE_UNION) error (_("`%s' is not defined as an aggregate type."), - TYPE_NAME (type)); + type->name ()); write_exp_elt_opcode (pstate, OP_SCOPE); write_exp_elt_type (pstate, type); write_exp_string (pstate, (yyvsp[0].sval)); write_exp_elt_opcode (pstate, OP_SCOPE); } -#line 2071 "p-exp.c.tmp" /* yacc.c:1646 */ +#line 2171 "p-exp.c.tmp" break; case 64: -#line 683 "p-exp.y" /* yacc.c:1646 */ - { +#line 684 "p-exp.y" + { std::string name = copy_name ((yyvsp[0].sval)); struct symbol *sym; struct bound_minimal_symbol msymbol; @@ -2101,12 +2201,12 @@ error (_("No symbol \"%s\" in current context."), name.c_str ()); } -#line 2106 "p-exp.c.tmp" /* yacc.c:1646 */ +#line 2206 "p-exp.c.tmp" break; case 65: -#line 716 "p-exp.y" /* yacc.c:1646 */ - { struct block_symbol sym = (yyvsp[0].ssym).sym; +#line 717 "p-exp.y" + { struct block_symbol sym = (yyvsp[0].ssym).sym; if (sym.symbol) { @@ -2163,65 +2263,66 @@ arg.c_str ()); } } -#line 2168 "p-exp.c.tmp" /* yacc.c:1646 */ +#line 2268 "p-exp.c.tmp" break; case 68: -#line 792 "p-exp.y" /* yacc.c:1646 */ - { (yyval.tval) = lookup_pointer_type ((yyvsp[0].tval)); } -#line 2174 "p-exp.c.tmp" /* yacc.c:1646 */ +#line 793 "p-exp.y" + { (yyval.tval) = lookup_pointer_type ((yyvsp[0].tval)); } +#line 2274 "p-exp.c.tmp" break; case 69: -#line 794 "p-exp.y" /* yacc.c:1646 */ - { (yyval.tval) = (yyvsp[0].tsym).type; } -#line 2180 "p-exp.c.tmp" /* yacc.c:1646 */ +#line 795 "p-exp.y" + { (yyval.tval) = (yyvsp[0].tsym).type; } +#line 2280 "p-exp.c.tmp" break; case 70: -#line 796 "p-exp.y" /* yacc.c:1646 */ - { (yyval.tval) +#line 797 "p-exp.y" + { (yyval.tval) = lookup_struct (copy_name ((yyvsp[0].sval)).c_str (), pstate->expression_context_block); } -#line 2189 "p-exp.c.tmp" /* yacc.c:1646 */ +#line 2289 "p-exp.c.tmp" break; case 71: -#line 801 "p-exp.y" /* yacc.c:1646 */ - { (yyval.tval) +#line 802 "p-exp.y" + { (yyval.tval) = lookup_struct (copy_name ((yyvsp[0].sval)).c_str (), pstate->expression_context_block); } -#line 2198 "p-exp.c.tmp" /* yacc.c:1646 */ +#line 2298 "p-exp.c.tmp" break; case 72: -#line 810 "p-exp.y" /* yacc.c:1646 */ - { (yyval.sval) = (yyvsp[0].ssym).stoken; } -#line 2204 "p-exp.c.tmp" /* yacc.c:1646 */ +#line 811 "p-exp.y" + { (yyval.sval) = (yyvsp[0].ssym).stoken; } +#line 2304 "p-exp.c.tmp" break; case 73: -#line 811 "p-exp.y" /* yacc.c:1646 */ - { (yyval.sval) = (yyvsp[0].ssym).stoken; } -#line 2210 "p-exp.c.tmp" /* yacc.c:1646 */ +#line 812 "p-exp.y" + { (yyval.sval) = (yyvsp[0].ssym).stoken; } +#line 2310 "p-exp.c.tmp" break; case 74: -#line 812 "p-exp.y" /* yacc.c:1646 */ - { (yyval.sval) = (yyvsp[0].tsym).stoken; } -#line 2216 "p-exp.c.tmp" /* yacc.c:1646 */ +#line 813 "p-exp.y" + { (yyval.sval) = (yyvsp[0].tsym).stoken; } +#line 2316 "p-exp.c.tmp" break; case 75: -#line 813 "p-exp.y" /* yacc.c:1646 */ - { (yyval.sval) = (yyvsp[0].ssym).stoken; } -#line 2222 "p-exp.c.tmp" /* yacc.c:1646 */ +#line 814 "p-exp.y" + { (yyval.sval) = (yyvsp[0].ssym).stoken; } +#line 2322 "p-exp.c.tmp" break; -#line 2226 "p-exp.c.tmp" /* yacc.c:1646 */ +#line 2326 "p-exp.c.tmp" + default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -2246,14 +2347,13 @@ /* Now 'shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ - - yyn = yyr1[yyn]; - - yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; - if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) - yystate = yytable[yystate]; - else - yystate = yydefgoto[yyn - YYNTOKENS]; + { + const int yylhs = yyr1[yyn] - YYNTOKENS; + const int yyi = yypgoto[yylhs] + *yyssp; + yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp + ? yytable[yyi] + : yydefgoto[yylhs]); + } goto yynewstate; @@ -2285,7 +2385,7 @@ { if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); - yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc); + yymsg = YY_CAST (char *, YYSTACK_ALLOC (YY_CAST (YYSIZE_T, yymsg_alloc))); if (!yymsg) { yymsg = yymsgbuf; @@ -2336,12 +2436,10 @@ | yyerrorlab -- error raised explicitly by YYERROR. | `---------------------------------------------------*/ yyerrorlab: - - /* Pacify compilers like GCC when the user code never invokes - YYERROR and the label yyerrorlab therefore never appears in user - code. */ - if (/*CONSTCOND*/ 0) - goto yyerrorlab; + /* Pacify compilers when the user code never invokes YYERROR and the + label yyerrorlab therefore never appears in user code. */ + if (0) + YYERROR; /* Do not reclaim the symbols of the rule whose action triggered this YYERROR. */ @@ -2403,6 +2501,7 @@ yyresult = 0; goto yyreturn; + /*-----------------------------------. | yyabortlab -- YYABORT comes here. | `-----------------------------------*/ @@ -2410,6 +2509,7 @@ yyresult = 1; goto yyreturn; + #if !defined yyoverflow || YYERROR_VERBOSE /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | @@ -2420,6 +2520,10 @@ /* Fall through. */ #endif + +/*-----------------------------------------------------. +| yyreturn -- parsing is finished, return the result. | +`-----------------------------------------------------*/ yyreturn: if (yychar != YYEMPTY) { @@ -2436,7 +2540,7 @@ while (yyssp != yyss) { yydestruct ("Cleanup: popping", - yystos[*yyssp], yyvsp); + yystos[+*yyssp], yyvsp); YYPOPSTACK (1); } #ifndef yyoverflow @@ -2449,7 +2553,7 @@ #endif return yyresult; } -#line 827 "p-exp.y" /* yacc.c:1906 */ +#line 828 "p-exp.y" /* Take care of parsing a number (anything that starts with a digit). diff -Nru gdb-9.1/gdb/p-exp.y gdb-10.2/gdb/p-exp.y --- gdb-9.1/gdb/p-exp.y 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/p-exp.y 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* YACC parser for Pascal expressions, for GDB. - Copyright (C) 2000-2020 Free Software Foundation, Inc. + Copyright (C) 2000-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -257,7 +257,7 @@ search_field = 0; if (current_type) { - while (TYPE_CODE (current_type) + while (current_type->code () == TYPE_CODE_PTR) current_type = TYPE_TARGET_TYPE (current_type); @@ -275,7 +275,7 @@ search_field = 0; if (current_type) { - while (TYPE_CODE (current_type) + while (current_type->code () == TYPE_CODE_PTR) current_type = TYPE_TARGET_TYPE (current_type); @@ -316,8 +316,9 @@ stringsval.ptr = buf; stringsval.length = strlen (arrayname); strcpy (buf, arrayname); - current_type = TYPE_FIELD_TYPE (current_type, - arrayfieldindex - 1); + current_type + = (current_type + ->field (arrayfieldindex - 1).type ()); write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); write_exp_string (pstate, stringsval); write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); @@ -357,9 +358,9 @@ { if (current_type) { /* Allow automatic dereference of classes. */ - if ((TYPE_CODE (current_type) == TYPE_CODE_PTR) - && (TYPE_CODE (TYPE_TARGET_TYPE (current_type)) == TYPE_CODE_STRUCT) - && (TYPE_CODE ($1) == TYPE_CODE_STRUCT)) + if ((current_type->code () == TYPE_CODE_PTR) + && (TYPE_TARGET_TYPE (current_type)->code () == TYPE_CODE_STRUCT) + && (($1)->code () == TYPE_CODE_STRUCT)) write_exp_elt_opcode (pstate, UNOP_IND); } write_exp_elt_opcode (pstate, UNOP_CAST); @@ -601,7 +602,7 @@ this_type = NULL; if (this_type) { - if (TYPE_CODE (this_type) == TYPE_CODE_PTR) + if (this_type->code () == TYPE_CODE_PTR) { this_type = TYPE_TARGET_TYPE (this_type); write_exp_elt_opcode (pstate, UNOP_IND); @@ -666,10 +667,10 @@ { struct type *type = $1; - if (TYPE_CODE (type) != TYPE_CODE_STRUCT - && TYPE_CODE (type) != TYPE_CODE_UNION) + if (type->code () != TYPE_CODE_STRUCT + && type->code () != TYPE_CODE_UNION) error (_("`%s' is not defined as an aggregate type."), - TYPE_NAME (type)); + type->name ()); write_exp_elt_opcode (pstate, OP_SCOPE); write_exp_elt_type (pstate, type); diff -Nru gdb-9.1/gdb/p-lang.c gdb-10.2/gdb/p-lang.c --- gdb-9.1/gdb/p-lang.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/p-lang.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Pascal language support routines for GDB, the GNU debugger. - Copyright (C) 2000-2020 Free Software Foundation, Inc. + Copyright (C) 2000-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -100,11 +100,11 @@ struct type **char_type, const char **arrayname) { - if (type != NULL && TYPE_CODE (type) == TYPE_CODE_STRUCT) + if (type != NULL && type->code () == TYPE_CODE_STRUCT) { /* Old Borland type pascal strings from Free Pascal Compiler. */ /* Two fields: length and st. */ - if (TYPE_NFIELDS (type) == 2 + if (type->num_fields () == 2 && TYPE_FIELD_NAME (type, 0) && strcmp (TYPE_FIELD_NAME (type, 0), "length") == 0 && TYPE_FIELD_NAME (type, 1) @@ -113,18 +113,18 @@ if (length_pos) *length_pos = TYPE_FIELD_BITPOS (type, 0) / TARGET_CHAR_BIT; if (length_size) - *length_size = TYPE_LENGTH (TYPE_FIELD_TYPE (type, 0)); + *length_size = TYPE_LENGTH (type->field (0).type ()); if (string_pos) *string_pos = TYPE_FIELD_BITPOS (type, 1) / TARGET_CHAR_BIT; if (char_type) - *char_type = TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (type, 1)); + *char_type = TYPE_TARGET_TYPE (type->field (1).type ()); if (arrayname) *arrayname = TYPE_FIELD_NAME (type, 1); return 2; }; /* GNU pascal strings. */ /* Three fields: Capacity, length and schema$ or _p_schema. */ - if (TYPE_NFIELDS (type) == 3 + if (type->num_fields () == 3 && TYPE_FIELD_NAME (type, 0) && strcmp (TYPE_FIELD_NAME (type, 0), "Capacity") == 0 && TYPE_FIELD_NAME (type, 1) @@ -133,15 +133,15 @@ if (length_pos) *length_pos = TYPE_FIELD_BITPOS (type, 1) / TARGET_CHAR_BIT; if (length_size) - *length_size = TYPE_LENGTH (TYPE_FIELD_TYPE (type, 1)); + *length_size = TYPE_LENGTH (type->field (1).type ()); if (string_pos) *string_pos = TYPE_FIELD_BITPOS (type, 2) / TARGET_CHAR_BIT; /* FIXME: how can I detect wide chars in GPC ?? */ if (char_type) { - *char_type = TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (type, 2)); + *char_type = TYPE_TARGET_TYPE (type->field (2).type ()); - if (TYPE_CODE (*char_type) == TYPE_CODE_ARRAY) + if ((*char_type)->code () == TYPE_CODE_ARRAY) *char_type = TYPE_TARGET_TYPE (*char_type); } if (arrayname) @@ -152,16 +152,6 @@ return 0; } -/* This is a wrapper around IS_PASCAL_STRING_TYPE that returns true if TYPE - is a string. */ - -static bool -pascal_is_string_type_p (struct type *type) -{ - return is_pascal_string_type (type, nullptr, nullptr, nullptr, - nullptr, nullptr) > 0; -} - static void pascal_one_char (int, struct ui_file *, int *); /* Print the character C on STREAM as part of the contents of a literal @@ -192,23 +182,6 @@ } } -static void pascal_emit_char (int c, struct type *type, - struct ui_file *stream, int quoter); - -/* Print the character C on STREAM as part of the contents of a literal - string whose delimiter is QUOTER. Note that that format for printing - characters and strings is language specific. */ - -static void -pascal_emit_char (int c, struct type *type, struct ui_file *stream, int quoter) -{ - int in_quotes = 0; - - pascal_one_char (c, stream, &in_quotes); - if (in_quotes) - fputs_filtered ("'", stream); -} - void pascal_printchar (int c, struct type *type, struct ui_file *stream) { @@ -219,106 +192,6 @@ fputs_filtered ("'", stream); } -/* Print the character string STRING, printing at most LENGTH characters. - Printing stops early if the number hits print_max; repeat counts - are printed as appropriate. Print ellipses at the end if we - had to stop before printing LENGTH characters, or if FORCE_ELLIPSES. */ - -void -pascal_printstr (struct ui_file *stream, struct type *type, - const gdb_byte *string, unsigned int length, - const char *encoding, int force_ellipses, - const struct value_print_options *options) -{ - enum bfd_endian byte_order = type_byte_order (type); - unsigned int i; - unsigned int things_printed = 0; - int in_quotes = 0; - int need_comma = 0; - int width; - - /* Preserve TYPE's original type, just set its LENGTH. */ - check_typedef (type); - width = TYPE_LENGTH (type); - - /* If the string was not truncated due to `set print elements', and - the last byte of it is a null, we don't print that, in traditional C - style. */ - if ((!force_ellipses) && length > 0 - && extract_unsigned_integer (string + (length - 1) * width, width, - byte_order) == 0) - length--; - - if (length == 0) - { - fputs_filtered ("''", stream); - return; - } - - for (i = 0; i < length && things_printed < options->print_max; ++i) - { - /* Position of the character we are examining - to see whether it is repeated. */ - unsigned int rep1; - /* Number of repetitions we have detected so far. */ - unsigned int reps; - unsigned long int current_char; - - QUIT; - - if (need_comma) - { - fputs_filtered (", ", stream); - need_comma = 0; - } - - current_char = extract_unsigned_integer (string + i * width, width, - byte_order); - - rep1 = i + 1; - reps = 1; - while (rep1 < length - && extract_unsigned_integer (string + rep1 * width, width, - byte_order) == current_char) - { - ++rep1; - ++reps; - } - - if (reps > options->repeat_count_threshold) - { - if (in_quotes) - { - fputs_filtered ("', ", stream); - in_quotes = 0; - } - pascal_printchar (current_char, type, stream); - fprintf_filtered (stream, " %p[<repeats %u times>%p]", - metadata_style.style ().ptr (), - reps, nullptr); - i = rep1 - 1; - things_printed += options->repeat_count_threshold; - need_comma = 1; - } - else - { - if ((!in_quotes) && (PRINT_LITERAL_FORM (current_char))) - { - fputs_filtered ("'", stream); - in_quotes = 1; - } - pascal_one_char (current_char, stream, &in_quotes); - ++things_printed; - } - } - - /* Terminate the quotes if necessary. */ - if (in_quotes) - fputs_filtered ("'", stream); - - if (force_ellipses || i < length) - fputs_filtered ("...", stream); -} /* Table mapping opcodes into strings for printing operators @@ -375,61 +248,14 @@ nr_pascal_primitive_types }; -static void -pascal_language_arch_info (struct gdbarch *gdbarch, - struct language_arch_info *lai) -{ - const struct builtin_type *builtin = builtin_type (gdbarch); - - lai->string_char_type = builtin->builtin_char; - lai->primitive_type_vector - = GDBARCH_OBSTACK_CALLOC (gdbarch, nr_pascal_primitive_types + 1, - struct type *); - lai->primitive_type_vector [pascal_primitive_type_int] - = builtin->builtin_int; - lai->primitive_type_vector [pascal_primitive_type_long] - = builtin->builtin_long; - lai->primitive_type_vector [pascal_primitive_type_short] - = builtin->builtin_short; - lai->primitive_type_vector [pascal_primitive_type_char] - = builtin->builtin_char; - lai->primitive_type_vector [pascal_primitive_type_float] - = builtin->builtin_float; - lai->primitive_type_vector [pascal_primitive_type_double] - = builtin->builtin_double; - lai->primitive_type_vector [pascal_primitive_type_void] - = builtin->builtin_void; - lai->primitive_type_vector [pascal_primitive_type_long_long] - = builtin->builtin_long_long; - lai->primitive_type_vector [pascal_primitive_type_signed_char] - = builtin->builtin_signed_char; - lai->primitive_type_vector [pascal_primitive_type_unsigned_char] - = builtin->builtin_unsigned_char; - lai->primitive_type_vector [pascal_primitive_type_unsigned_short] - = builtin->builtin_unsigned_short; - lai->primitive_type_vector [pascal_primitive_type_unsigned_int] - = builtin->builtin_unsigned_int; - lai->primitive_type_vector [pascal_primitive_type_unsigned_long] - = builtin->builtin_unsigned_long; - lai->primitive_type_vector [pascal_primitive_type_unsigned_long_long] - = builtin->builtin_unsigned_long_long; - lai->primitive_type_vector [pascal_primitive_type_long_double] - = builtin->builtin_long_double; - lai->primitive_type_vector [pascal_primitive_type_complex] - = builtin->builtin_complex; - lai->primitive_type_vector [pascal_primitive_type_double_complex] - = builtin->builtin_double_complex; - - lai->bool_type_symbol = "boolean"; - lai->bool_type_default = builtin->builtin_bool; -} - static const char *p_extensions[] = { ".pas", ".p", ".pp", NULL }; -extern const struct language_defn pascal_language_defn = +/* Constant data representing the Pascal language. */ + +extern const struct language_data pascal_language_data = { "pascal", /* Language name */ "Pascal", @@ -440,39 +266,240 @@ macro_expansion_no, p_extensions, &exp_descriptor_standard, - pascal_parse, - null_post_parser, - pascal_printchar, /* Print a character constant */ - pascal_printstr, /* Function to print string constant */ - pascal_emit_char, /* Print a single char */ - pascal_print_type, /* Print a type using appropriate syntax */ - pascal_print_typedef, /* Print a typedef using appropriate syntax */ - pascal_val_print, /* Print a value using appropriate syntax */ - pascal_value_print, /* Print a top-level value */ - default_read_var_value, /* la_read_var_value */ - NULL, /* Language specific skip_trampoline */ "this", /* name_of_this */ false, /* la_store_sym_names_in_linkage_form_p */ - basic_lookup_symbol_nonlocal, /* lookup_symbol_nonlocal */ - basic_lookup_transparent_type,/* lookup_transparent_type */ - NULL, /* Language specific symbol demangler */ - NULL, - NULL, /* Language specific class_name_from_physname */ pascal_op_print_tab, /* expression operators for printing */ 1, /* c-style arrays */ 0, /* String lower bound */ - default_word_break_characters, - default_collect_symbol_completion_matches, - pascal_language_arch_info, - default_print_array_index, - default_pass_by_reference, - c_watch_location_expression, - NULL, /* la_compare_symbol_for_completion */ - iterate_over_symbols, - default_search_name_hash, &default_varobj_ops, - NULL, - NULL, - pascal_is_string_type_p, "{...}" /* la_struct_too_deep_ellipsis */ }; + +/* Class representing the Pascal language. */ + +class pascal_language : public language_defn +{ +public: + pascal_language () + : language_defn (language_pascal, pascal_language_data) + { /* Nothing. */ } + + /* See language.h. */ + void language_arch_info (struct gdbarch *gdbarch, + struct language_arch_info *lai) const override + { + const struct builtin_type *builtin = builtin_type (gdbarch); + + lai->string_char_type = builtin->builtin_char; + lai->primitive_type_vector + = GDBARCH_OBSTACK_CALLOC (gdbarch, nr_pascal_primitive_types + 1, + struct type *); + lai->primitive_type_vector [pascal_primitive_type_int] + = builtin->builtin_int; + lai->primitive_type_vector [pascal_primitive_type_long] + = builtin->builtin_long; + lai->primitive_type_vector [pascal_primitive_type_short] + = builtin->builtin_short; + lai->primitive_type_vector [pascal_primitive_type_char] + = builtin->builtin_char; + lai->primitive_type_vector [pascal_primitive_type_float] + = builtin->builtin_float; + lai->primitive_type_vector [pascal_primitive_type_double] + = builtin->builtin_double; + lai->primitive_type_vector [pascal_primitive_type_void] + = builtin->builtin_void; + lai->primitive_type_vector [pascal_primitive_type_long_long] + = builtin->builtin_long_long; + lai->primitive_type_vector [pascal_primitive_type_signed_char] + = builtin->builtin_signed_char; + lai->primitive_type_vector [pascal_primitive_type_unsigned_char] + = builtin->builtin_unsigned_char; + lai->primitive_type_vector [pascal_primitive_type_unsigned_short] + = builtin->builtin_unsigned_short; + lai->primitive_type_vector [pascal_primitive_type_unsigned_int] + = builtin->builtin_unsigned_int; + lai->primitive_type_vector [pascal_primitive_type_unsigned_long] + = builtin->builtin_unsigned_long; + lai->primitive_type_vector [pascal_primitive_type_unsigned_long_long] + = builtin->builtin_unsigned_long_long; + lai->primitive_type_vector [pascal_primitive_type_long_double] + = builtin->builtin_long_double; + lai->primitive_type_vector [pascal_primitive_type_complex] + = builtin->builtin_complex; + lai->primitive_type_vector [pascal_primitive_type_double_complex] + = builtin->builtin_double_complex; + + lai->bool_type_symbol = "boolean"; + lai->bool_type_default = builtin->builtin_bool; + } + + /* See language.h. */ + + void print_type (struct type *type, const char *varstring, + struct ui_file *stream, int show, int level, + const struct type_print_options *flags) const override + { + pascal_print_type (type, varstring, stream, show, level, flags); + } + + /* See language.h. */ + + void value_print (struct value *val, struct ui_file *stream, + const struct value_print_options *options) const override + { + return pascal_value_print (val, stream, options); + } + + /* See language.h. */ + + void value_print_inner + (struct value *val, struct ui_file *stream, int recurse, + const struct value_print_options *options) const override + { + return pascal_value_print_inner (val, stream, recurse, options); + } + + /* See language.h. */ + + int parser (struct parser_state *ps) const override + { + return pascal_parse (ps); + } + + /* See language.h. */ + + void emitchar (int ch, struct type *chtype, + struct ui_file *stream, int quoter) const override + { + int in_quotes = 0; + + pascal_one_char (ch, stream, &in_quotes); + if (in_quotes) + fputs_filtered ("'", stream); + } + + /* See language.h. */ + + void printchar (int ch, struct type *chtype, + struct ui_file *stream) const override + { + pascal_printchar (ch, chtype, stream); + } + + /* See language.h. */ + + void printstr (struct ui_file *stream, struct type *elttype, + const gdb_byte *string, unsigned int length, + const char *encoding, int force_ellipses, + const struct value_print_options *options) const override + { + enum bfd_endian byte_order = type_byte_order (elttype); + unsigned int i; + unsigned int things_printed = 0; + int in_quotes = 0; + int need_comma = 0; + int width; + + /* Preserve ELTTYPE's original type, just set its LENGTH. */ + check_typedef (elttype); + width = TYPE_LENGTH (elttype); + + /* If the string was not truncated due to `set print elements', and + the last byte of it is a null, we don't print that, in traditional C + style. */ + if ((!force_ellipses) && length > 0 + && extract_unsigned_integer (string + (length - 1) * width, width, + byte_order) == 0) + length--; + + if (length == 0) + { + fputs_filtered ("''", stream); + return; + } + + for (i = 0; i < length && things_printed < options->print_max; ++i) + { + /* Position of the character we are examining + to see whether it is repeated. */ + unsigned int rep1; + /* Number of repetitions we have detected so far. */ + unsigned int reps; + unsigned long int current_char; + + QUIT; + + if (need_comma) + { + fputs_filtered (", ", stream); + need_comma = 0; + } + + current_char = extract_unsigned_integer (string + i * width, width, + byte_order); + + rep1 = i + 1; + reps = 1; + while (rep1 < length + && extract_unsigned_integer (string + rep1 * width, width, + byte_order) == current_char) + { + ++rep1; + ++reps; + } + + if (reps > options->repeat_count_threshold) + { + if (in_quotes) + { + fputs_filtered ("', ", stream); + in_quotes = 0; + } + pascal_printchar (current_char, elttype, stream); + fprintf_filtered (stream, " %p[<repeats %u times>%p]", + metadata_style.style ().ptr (), + reps, nullptr); + i = rep1 - 1; + things_printed += options->repeat_count_threshold; + need_comma = 1; + } + else + { + if ((!in_quotes) && (PRINT_LITERAL_FORM (current_char))) + { + fputs_filtered ("'", stream); + in_quotes = 1; + } + pascal_one_char (current_char, stream, &in_quotes); + ++things_printed; + } + } + + /* Terminate the quotes if necessary. */ + if (in_quotes) + fputs_filtered ("'", stream); + + if (force_ellipses || i < length) + fputs_filtered ("...", stream); + } + + /* See language.h. */ + + void print_typedef (struct type *type, struct symbol *new_symbol, + struct ui_file *stream) const override + { + pascal_print_typedef (type, new_symbol, stream); + } + + /* See language.h. */ + + bool is_string_type_p (struct type *type) const override + { + return is_pascal_string_type (type, nullptr, nullptr, nullptr, + nullptr, nullptr) > 0; + } +}; + +/* Single instance of the Pascal language class. */ + +static pascal_language pascal_language_defn; diff -Nru gdb-9.1/gdb/p-lang.h gdb-10.2/gdb/p-lang.h --- gdb-9.1/gdb/p-lang.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/p-lang.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Pascal language support definitions for GDB, the GNU debugger. - Copyright (C) 2000-2020 Free Software Foundation, Inc. + Copyright (C) 2000-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -37,10 +37,10 @@ extern void pascal_print_typedef (struct type *, struct symbol *, struct ui_file *); -extern void pascal_val_print (struct type *, int, - CORE_ADDR, struct ui_file *, int, - struct value *, - const struct value_print_options *); +/* Implement la_value_print_inner for Pascal. */ + +extern void pascal_value_print_inner (struct value *, struct ui_file *, int, + const struct value_print_options *); extern void pascal_value_print (struct value *, struct ui_file *, const struct value_print_options *); @@ -56,10 +56,6 @@ extern void pascal_printchar (int, struct type *, struct ui_file *); -extern void pascal_printstr (struct ui_file *, struct type *, const gdb_byte *, - unsigned int, const char *, int, - const struct value_print_options *); - extern struct type **const pascal_builtin_types[]; /* These are in p-typeprint.c: */ @@ -72,14 +68,6 @@ pascal_type_print_varspec_prefix (struct type *, struct ui_file *, int, int, const struct type_print_options *); -extern void pascal_object_print_value_fields (struct type *, const gdb_byte *, - LONGEST, - CORE_ADDR, struct ui_file *, - int, - struct value *, - const struct value_print_options *, - struct type **, int); - extern int pascal_object_is_vtbl_ptr_type (struct type *); extern int pascal_object_is_vtbl_member (struct type *); diff -Nru gdb-9.1/gdb/po/gdb.pot gdb-10.2/gdb/po/gdb.pot --- gdb-9.1/gdb/po/gdb.pot 2020-02-08 12:54:12.000000000 +0000 +++ gdb-10.2/gdb/po/gdb.pot 2021-04-25 04:10:38.000000000 +0000 @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-02-08 16:54+0400\n" +"POT-Creation-Date: 2021-04-25 08:10+0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -17,57 +17,58 @@ "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" -#: aarch64-fbsd-nat.c:71 aarch64-fbsd-nat.c:103 alpha-bsd-nat.c:103 -#: alpha-bsd-nat.c:134 amd64-bsd-nat.c:55 amd64-bsd-nat.c:131 -#: amd64-fbsd-nat.c:172 amd64-linux-nat.c:225 amd64-linux-nat.c:309 -#: arm-fbsd-nat.c:74 arm-fbsd-nat.c:107 hppa-nbsd-nat.c:180 hppa-nbsd-nat.c:209 -#: hppa-obsd-nat.c:206 hppa-obsd-nat.c:233 i386-bsd-nat.c:140 -#: i386-bsd-nat.c:230 i386-linux-nat.c:223 i386-linux-nat.c:238 -#: m32r-linux-nat.c:121 m32r-linux-nat.c:170 m68k-bsd-nat.c:127 -#: m68k-bsd-nat.c:156 m68k-linux-nat.c:268 m68k-linux-nat.c:283 +#: aarch64-fbsd-nat.c:71 aarch64-fbsd-nat.c:103 alpha-bsd-nat.c:66 +#: alpha-bsd-nat.c:99 amd64-bsd-nat.c:71 amd64-bsd-nat.c:147 +#: amd64-fbsd-nat.c:172 amd64-linux-nat.c:225 amd64-linux-nat.c:285 +#: arm-fbsd-nat.c:74 arm-fbsd-nat.c:107 hppa-nbsd-nat.c:181 hppa-nbsd-nat.c:211 +#: hppa-obsd-nat.c:206 hppa-obsd-nat.c:233 i386-bsd-nat.c:155 +#: i386-bsd-nat.c:247 i386-linux-nat.c:223 i386-linux-nat.c:238 +#: m32r-linux-nat.c:121 m32r-linux-nat.c:170 m68k-bsd-nat.c:131 +#: m68k-bsd-nat.c:161 m68k-linux-nat.c:268 m68k-linux-nat.c:283 #: mips-fbsd-nat.c:74 mips-fbsd-nat.c:105 mips-linux-nat.c:286 -#: mips-linux-nat.c:367 mips-nbsd-nat.c:60 mips-nbsd-nat.c:90 -#: mips64-obsd-nat.c:95 mips64-obsd-nat.c:110 ppc-fbsd-nat.c:133 -#: ppc-fbsd-nat.c:159 ppc-nbsd-nat.c:98 ppc-nbsd-nat.c:127 ppc-obsd-nat.c:88 -#: ppc-obsd-nat.c:122 riscv-fbsd-nat.c:75 riscv-fbsd-nat.c:107 -#: riscv-linux-nat.c:217 riscv-linux-nat.c:235 riscv-linux-nat.c:272 -#: riscv-linux-nat.c:296 s390-linux-nat.c:281 s390-linux-nat.c:298 -#: sh-nbsd-nat.c:62 sh-nbsd-nat.c:84 sparc-nat.c:170 sparc-nat.c:203 -#: tilegx-linux-nat.c:143 tilegx-linux-nat.c:159 vax-bsd-nat.c:80 -#: vax-bsd-nat.c:95 xtensa-linux-nat.c:211 xtensa-linux-nat.c:230 +#: mips-linux-nat.c:367 mips-nbsd-nat.c:62 mips-nbsd-nat.c:92 +#: mips64-obsd-nat.c:95 mips64-obsd-nat.c:110 nat/riscv-linux-tdesc.c:73 +#: ppc-fbsd-nat.c:133 ppc-fbsd-nat.c:159 ppc-nbsd-nat.c:102 ppc-nbsd-nat.c:132 +#: ppc-obsd-nat.c:88 ppc-obsd-nat.c:122 riscv-fbsd-nat.c:75 +#: riscv-fbsd-nat.c:107 riscv-linux-nat.c:230 riscv-linux-nat.c:250 +#: riscv-linux-nat.c:287 riscv-linux-nat.c:313 s390-linux-nat.c:281 +#: s390-linux-nat.c:298 sh-nbsd-nat.c:64 sh-nbsd-nat.c:87 sparc-nat.c:169 +#: sparc-nat.c:205 tilegx-linux-nat.c:143 tilegx-linux-nat.c:159 +#: vax-bsd-nat.c:84 vax-bsd-nat.c:100 xtensa-linux-nat.c:211 +#: xtensa-linux-nat.c:230 msgid "Couldn't get registers" msgstr "" -#: aarch64-fbsd-nat.c:82 aarch64-fbsd-nat.c:117 alpha-bsd-nat.c:117 -#: alpha-bsd-nat.c:153 amd64-bsd-nat.c:108 amd64-bsd-nat.c:196 -#: amd64-linux-nat.c:258 amd64-linux-nat.c:344 arm-fbsd-nat.c:86 -#: arm-fbsd-nat.c:122 hppa-nbsd-nat.c:190 hppa-nbsd-nat.c:222 -#: hppa-obsd-nat.c:216 hppa-obsd-nat.c:246 i386-bsd-nat.c:208 -#: i386-bsd-nat.c:310 i386-linux-nat.c:287 i386-linux-nat.c:301 -#: m68k-bsd-nat.c:137 m68k-bsd-nat.c:169 m68k-linux-nat.c:362 +#: aarch64-fbsd-nat.c:82 aarch64-fbsd-nat.c:117 alpha-bsd-nat.c:80 +#: alpha-bsd-nat.c:118 amd64-bsd-nat.c:124 amd64-bsd-nat.c:212 +#: amd64-linux-nat.c:258 amd64-linux-nat.c:320 arm-fbsd-nat.c:86 +#: arm-fbsd-nat.c:122 hppa-nbsd-nat.c:191 hppa-nbsd-nat.c:224 +#: hppa-obsd-nat.c:216 hppa-obsd-nat.c:246 i386-bsd-nat.c:225 +#: i386-bsd-nat.c:330 i386-linux-nat.c:287 i386-linux-nat.c:301 +#: m68k-bsd-nat.c:141 m68k-bsd-nat.c:174 m68k-linux-nat.c:362 #: m68k-linux-nat.c:376 mips-fbsd-nat.c:84 mips-fbsd-nat.c:119 -#: mips-nbsd-nat.c:73 mips-nbsd-nat.c:107 ppc-obsd-nat.c:104 ppc-obsd-nat.c:141 +#: mips-nbsd-nat.c:75 mips-nbsd-nat.c:109 ppc-obsd-nat.c:104 ppc-obsd-nat.c:141 #: riscv-fbsd-nat.c:86 riscv-fbsd-nat.c:121 s390-linux-nat.c:318 -#: s390-linux-nat.c:335 sparc-nat.c:182 +#: s390-linux-nat.c:335 sparc-nat.c:187 msgid "Couldn't get floating point status" msgstr "" -#: aarch64-fbsd-nat.c:109 alpha-bsd-nat.c:140 amd64-bsd-nat.c:136 -#: amd64-linux-nat.c:314 arm-fbsd-nat.c:113 hppa-nbsd-nat.c:214 -#: hppa-obsd-nat.c:238 i386-bsd-nat.c:235 i386-linux-nat.c:243 -#: m32r-linux-nat.c:175 m68k-bsd-nat.c:161 m68k-linux-nat.c:288 -#: mips-fbsd-nat.c:111 mips-nbsd-nat.c:95 mips64-obsd-nat.c:115 -#: ppc-fbsd-nat.c:164 ppc-nbsd-nat.c:133 ppc-obsd-nat.c:132 -#: riscv-fbsd-nat.c:113 s390-linux-nat.c:303 sparc-nat.c:208 -#: tilegx-linux-nat.c:164 vax-bsd-nat.c:100 xtensa-linux-nat.c:238 +#: aarch64-fbsd-nat.c:109 alpha-bsd-nat.c:105 amd64-bsd-nat.c:152 +#: amd64-linux-nat.c:290 arm-fbsd-nat.c:113 hppa-nbsd-nat.c:216 +#: hppa-obsd-nat.c:238 i386-bsd-nat.c:252 i386-linux-nat.c:243 +#: m32r-linux-nat.c:175 m68k-bsd-nat.c:166 m68k-linux-nat.c:288 +#: mips-fbsd-nat.c:111 mips-nbsd-nat.c:97 mips64-obsd-nat.c:115 +#: ppc-fbsd-nat.c:164 ppc-nbsd-nat.c:138 ppc-obsd-nat.c:132 +#: riscv-fbsd-nat.c:113 s390-linux-nat.c:303 sparc-nat.c:210 +#: tilegx-linux-nat.c:164 vax-bsd-nat.c:105 xtensa-linux-nat.c:238 msgid "Couldn't write registers" msgstr "" -#: aarch64-fbsd-nat.c:123 alpha-bsd-nat.c:159 amd64-bsd-nat.c:201 -#: amd64-linux-nat.c:349 arm-fbsd-nat.c:128 hppa-nbsd-nat.c:227 -#: hppa-obsd-nat.c:251 i386-bsd-nat.c:315 i386-linux-nat.c:306 -#: m68k-bsd-nat.c:174 m68k-linux-nat.c:381 mips-fbsd-nat.c:125 -#: mips-nbsd-nat.c:112 ppc-obsd-nat.c:147 riscv-fbsd-nat.c:127 +#: aarch64-fbsd-nat.c:123 alpha-bsd-nat.c:124 amd64-bsd-nat.c:217 +#: amd64-linux-nat.c:325 arm-fbsd-nat.c:128 hppa-nbsd-nat.c:229 +#: hppa-obsd-nat.c:251 i386-bsd-nat.c:336 i386-linux-nat.c:306 +#: m68k-bsd-nat.c:179 m68k-linux-nat.c:381 mips-fbsd-nat.c:125 +#: mips-nbsd-nat.c:114 ppc-obsd-nat.c:147 riscv-fbsd-nat.c:127 #: s390-linux-nat.c:340 msgid "Couldn't write floating point status" msgstr "" @@ -121,7 +122,7 @@ msgid "Show whether to show variables that mirror the AArch64 debug registers." msgstr "" -#: aarch64-linux-nat.c:988 mips-linux-nat.c:792 x86-nat.c:280 +#: aarch64-linux-nat.c:988 mips-linux-nat.c:793 x86-nat.c:280 msgid "" "Use \"on\" to enable, \"off\" to disable.\n" "If enabled, the debug registers values are shown when GDB inserts\n" @@ -153,14 +154,14 @@ msgid "SVE Vector length in core file is invalid. (VQ=%s" msgstr "" -#: aarch64-linux-tdep.c:714 arm-linux-tdep.c:1204 i386-tdep.c:4133 -#: i386-tdep.c:4242 i386-tdep.c:4257 ppc-linux-tdep.c:1710 stap-probe.c:775 +#: aarch64-linux-tdep.c:714 arm-linux-tdep.c:1206 i386-tdep.c:4183 +#: i386-tdep.c:4292 i386-tdep.c:4307 ppc-linux-tdep.c:1710 stap-probe.c:775 #, possible-c-format msgid "Invalid register name `%s' on expression `%s'." msgstr "" -#: aarch64-linux-tdep.c:1394 amd64-linux-tdep.c:1498 arm-linux-tdep.c:1666 -#: i386-linux-tdep.c:468 s390-linux-tdep.c:817 +#: aarch64-linux-tdep.c:1394 amd64-linux-tdep.c:1498 arm-linux-tdep.c:1668 +#: i386-linux-tdep.c:469 s390-linux-tdep.c:817 #, possible-c-format msgid "Process record and replay target doesn't support syscall number %s\n" msgstr "" @@ -170,55 +171,55 @@ msgid "AArch64 debugging is %s.\n" msgstr "" -#: aarch64-tdep.c:1120 arm-tdep.c:3077 +#: aarch64-tdep.c:1259 arm-tdep.c:3189 #, possible-c-format msgid "Unexpected register %d" msgstr "" -#: aarch64-tdep.c:2432 +#: aarch64-tdep.c:2604 #, possible-c-format msgid "aarch64_pseudo_register_name: bad register number %d" msgstr "" -#: aarch64-tdep.c:2468 +#: aarch64-tdep.c:2640 #, possible-c-format msgid "aarch64_pseudo_register_type: bad register number %d" msgstr "" -#: aarch64-tdep.c:3082 gdbserver/linux-aarch64-tdesc.c:35 +#: aarch64-tdep.c:3287 #, possible-c-format msgid "VQ is %<PRIu64>, maximum supported value is %d" msgstr "" -#: aarch64-tdep.c:3173 +#: aarch64-tdep.c:3378 #, possible-c-format msgid "VQ out of bounds: %s (max %d)" msgstr "" -#: aarch64-tdep.c:3216 +#: aarch64-tdep.c:3421 msgid "Program contains both fpu and SVE features." msgstr "" -#: aarch64-tdep.c:3398 +#: aarch64-tdep.c:3607 #, possible-c-format msgid "aarch64_dump_tdep: Lowest pc = 0x%s" msgstr "" #. Debug this file's internals. -#: aarch64-tdep.c:3416 +#: aarch64-tdep.c:3626 msgid "Set AArch64 debugging." msgstr "" -#: aarch64-tdep.c:3417 +#: aarch64-tdep.c:3627 msgid "Show AArch64 debugging." msgstr "" -#: aarch64-tdep.c:3418 +#: aarch64-tdep.c:3628 msgid "When on, AArch64 specific debugging is enabled." msgstr "" #. We need to save SPSR value, which is not yet done. -#: aarch64-tdep.c:4394 arm-tdep.c:11052 arm-tdep.c:12071 +#: aarch64-tdep.c:4604 arm-tdep.c:11167 arm-tdep.c:12186 #, possible-c-format msgid "Process record does not support instruction 0x%0x at address %s.\n" msgstr "" @@ -274,12 +275,12 @@ msgid "Internal error in encoding of renaming declaration" msgstr "" -#: ada-exp.y:977 c-exp.y:961 p-exp.y:630 +#: ada-exp.y:977 c-exp.y:1001 p-exp.y:631 #, possible-c-format msgid "No file or function \"%s\"." msgstr "" -#: ada-exp.y:979 c-exp.y:978 m2-exp.y:523 p-exp.y:644 +#: ada-exp.y:979 c-exp.y:1018 m2-exp.y:522 p-exp.y:645 #, possible-c-format msgid "No function \"%s\" in specified context." msgstr "" @@ -303,9 +304,9 @@ msgid "No definition of \"%s\" found." msgstr "" -#: ada-exp.y:1327 c-exp.y:1087 c-exp.y:1140 cli/cli-cmds.c:1165 d-exp.y:493 -#: f-exp.y:506 go-exp.y:579 linespec.c:1623 linespec.c:3824 p-exp.y:707 -#: p-exp.y:766 source.c:214 symtab.c:4305 +#: ada-exp.y:1327 c-exp.y:1127 c-exp.y:1180 cli/cli-cmds.c:1217 d-exp.y:493 +#: f-exp.y:506 go-exp.y:579 linespec.c:1621 linespec.c:3823 p-exp.y:708 +#: p-exp.y:767 source.c:243 symtab.c:4341 msgid "No symbol table is loaded. Use the \"file\" command." msgstr "" @@ -328,458 +329,458 @@ msgid "Invalid use of type." msgstr "" -#: ada-lang.c:599 +#: ada-lang.c:551 #, possible-c-format msgid "Unable to find field %s in struct %s. Aborting" msgstr "" -#: ada-lang.c:720 +#: ada-lang.c:672 msgid "object size is larger than varsize-limit" msgstr "" -#: ada-lang.c:785 +#: ada-lang.c:751 msgid "Unexpected type in ada_discrete_type_high_bound." msgstr "" -#: ada-lang.c:806 +#: ada-lang.c:786 msgid "Unexpected type in ada_discrete_type_low_bound." msgstr "" -#: ada-lang.c:904 +#: ada-lang.c:881 msgid "Invalid address for Ada main program name." msgstr "" -#: ada-lang.c:986 +#: ada-lang.c:959 #, possible-c-format msgid "invalid Ada operator name: %s" msgstr "" -#: ada-lang.c:1647 ada-lang.c:1665 ada-lang.c:1679 ada-lang.c:1747 +#: ada-lang.c:1569 ada-lang.c:1587 ada-lang.c:1601 ada-lang.c:1669 msgid "Bad GNAT array descriptor" msgstr "" -#: ada-lang.c:1784 +#: ada-lang.c:1709 msgid "Bad GNAT array descriptor bounds" msgstr "" -#: ada-lang.c:2028 +#: ada-lang.c:1957 msgid "Bounds unavailable for null array pointer." msgstr "" -#: ada-lang.c:2117 +#: ada-lang.c:2046 msgid "could not understand bit size information on packed array" msgstr "" -#: ada-lang.c:2215 +#: ada-lang.c:2144 msgid "could not find bounds information on packed array" msgstr "" -#: ada-lang.c:2222 +#: ada-lang.c:2151 msgid "could not understand bounds information on packed array" msgstr "" -#: ada-lang.c:2256 +#: ada-lang.c:2185 msgid "can't unpack array" msgstr "" -#: ada-lang.c:2309 +#: ada-lang.c:2238 msgid "attempt to do packed indexing of something other than a packed array" msgstr "" -#: ada-lang.c:2319 +#: ada-lang.c:2248 msgid "don't know bounds of array" msgstr "" -#: ada-lang.c:2325 +#: ada-lang.c:2254 #, possible-c-format msgid "packed array index %ld out of bounds" msgstr "" -#: ada-lang.c:2397 +#: ada-lang.c:2326 #, possible-c-format msgid "Cannot unpack %d bits into buffer of %d bytes" msgstr "" -#: ada-lang.c:2626 ada-lang.c:9814 valops.c:990 +#: ada-lang.c:2555 ada-lang.c:9521 valops.c:990 msgid "Left operand of assignment is not a modifiable lvalue." msgstr "" -#: ada-lang.c:2748 ada-lang.c:2806 +#: ada-lang.c:2677 ada-lang.c:2734 #, possible-c-format msgid "too many subscripts (%d expected)" msgstr "" -#: ada-lang.c:2841 ada-lang.c:2869 +#: ada-lang.c:2770 ada-lang.c:2801 msgid "unable to get positions in slice, use bounds instead" msgstr "" -#: ada-lang.c:2964 +#: ada-lang.c:2896 #, possible-c-format msgid "invalid dimension number to '%s" msgstr "" -#: ada-lang.c:2983 +#: ada-lang.c:2915 msgid "attempt to take bound of something that is not an array" msgstr "" -#: ada-lang.c:3147 +#: ada-lang.c:3079 msgid "Could not find operator name for opcode" msgstr "" -#: ada-lang.c:3288 ada-lang.c:3301 linespec.c:1562 +#: ada-lang.c:3220 ada-lang.c:3233 linespec.c:1560 msgid "one or more choice numbers" msgstr "" -#: ada-lang.c:3308 +#: ada-lang.c:3240 msgid "Argument must be choice number" msgstr "" -#: ada-lang.c:3312 +#: ada-lang.c:3244 msgid "cancelled" msgstr "" -#: ada-lang.c:3339 +#: ada-lang.c:3271 #, possible-c-format msgid "Select no more than %d of the above" msgstr "" -#: ada-lang.c:3362 +#: ada-lang.c:3294 msgid "Request to select 0 symbols!" msgstr "" -#: ada-lang.c:3367 linespec.c:1541 +#: ada-lang.c:3299 linespec.c:1539 msgid "" "canceled because the command is ambiguous\n" "See set/show multiple-symbol." msgstr "" -#: ada-lang.c:3377 +#: ada-lang.c:3309 msgid "[0] cancel\n" msgstr "" -#: ada-lang.c:3379 +#: ada-lang.c:3311 msgid "[1] all\n" msgstr "" -#: ada-lang.c:3397 +#: ada-lang.c:3329 #, possible-c-format msgid " at %p[<no source file available>%p]:%d\n" msgstr "" -#: ada-lang.c:3401 +#: ada-lang.c:3333 #, possible-c-format msgid " at %ps:%d\n" msgstr "" -#: ada-lang.c:3423 +#: ada-lang.c:3355 #, possible-c-format msgid " at %s:%d\n" msgstr "" -#: ada-lang.c:3433 +#: ada-lang.c:3365 #, possible-c-format msgid "'(%s) (enumeral)\n" msgstr "" -#: ada-lang.c:3444 +#: ada-lang.c:3376 #, possible-c-format msgid " in %s (enumeral)\n" msgstr "" -#: ada-lang.c:3445 +#: ada-lang.c:3377 #, possible-c-format msgid " at %s:?\n" msgstr "" -#: ada-lang.c:3449 +#: ada-lang.c:3381 msgid " (enumeral)\n" msgstr "" -#: ada-lang.c:3450 +#: ada-lang.c:3382 msgid " at ?\n" msgstr "" -#: ada-lang.c:3655 +#: ada-lang.c:3565 msgid "Unexpected operator during name resolution" msgstr "" -#: ada-lang.c:3719 +#: ada-lang.c:3629 #, possible-c-format msgid "No definition found for %s" msgstr "" -#: ada-lang.c:3731 ada-lang.c:3781 +#: ada-lang.c:3641 ada-lang.c:3691 #, possible-c-format msgid "Could not find a match for %s" msgstr "" -#: ada-lang.c:3736 ada-lang.c:4025 +#: ada-lang.c:3646 ada-lang.c:3934 #, possible-c-format msgid "Multiple matches for %s\n" msgstr "" -#: ada-lang.c:4459 valops.c:2162 +#: ada-lang.c:4368 valops.c:2166 #, possible-c-format msgid "There is no member named %s." msgstr "" -#: ada-lang.c:4465 +#: ada-lang.c:4374 msgid "Attempt to extract a component of a value that is not a record." msgstr "" #. PNH: Do we ever get here? See ada_search_struct_field, #. find_struct_field. -#: ada-lang.c:7491 +#: ada-lang.c:7208 msgid "Cannot assign this kind of variant record" msgstr "" -#: ada-lang.c:7560 +#: ada-lang.c:7276 #, possible-c-format msgid "Type %s is not a structure or union type" msgstr "" -#: ada-lang.c:7561 +#: ada-lang.c:7277 msgid "(null)" msgstr "" -#: ada-lang.c:7644 inferior.c:410 +#: ada-lang.c:7358 inferior.c:409 msgid "<null>" msgstr "" -#: ada-lang.c:7646 +#: ada-lang.c:7360 #, possible-c-format msgid "Type %s has no component named %s" msgstr "" -#: ada-lang.c:7930 +#: ada-lang.c:7630 msgid "unexpected null name on descriptive type" msgstr "" -#: ada-lang.c:8319 +#: ada-lang.c:8016 #, possible-c-format msgid "Invalid type size for `%s' detected: %s." msgstr "" -#: ada-lang.c:8322 +#: ada-lang.c:8019 #, possible-c-format msgid "Invalid type size for <unnamed> detected: %s." msgstr "" -#: ada-lang.c:8333 +#: ada-lang.c:8030 msgid "record type with dynamic size is larger than varsize-limit" msgstr "" -#: ada-lang.c:8773 +#: ada-lang.c:8474 msgid "array type with dynamic size is larger than varsize-limit" msgstr "" -#: ada-lang.c:8882 +#: ada-lang.c:8583 #, possible-c-format msgid "unable to read value of %s (%s)" msgstr "" -#: ada-lang.c:9171 +#: ada-lang.c:8871 msgid "'POS only defined on discrete types" msgstr "" -#: ada-lang.c:9174 +#: ada-lang.c:8875 msgid "enumeration value is invalid: can't find 'POS" msgstr "" -#: ada-lang.c:9191 -msgid "'VAL only defined on discrete types" +#: ada-lang.c:8897 +msgid "argument to 'VAL out of range" msgstr "" -#: ada-lang.c:9193 -msgid "'VAL requires integral argument" +#: ada-lang.c:8907 +msgid "'VAL only defined on discrete types" msgstr "" -#: ada-lang.c:9200 -msgid "argument to 'VAL out of range" +#: ada-lang.c:8909 +msgid "'VAL requires integral argument" msgstr "" -#: ada-lang.c:9526 ada-lang.c:9564 +#: ada-lang.c:9233 ada-lang.c:9271 msgid "unable to determine array bounds" msgstr "" -#: ada-lang.c:9605 +#: ada-lang.c:9312 msgid "cannot assign arrays of different length" msgstr "" -#: ada-lang.c:9619 +#: ada-lang.c:9326 msgid "Incompatible types in assignment" msgstr "" -#: ada-lang.c:9653 +#: ada-lang.c:9360 #, possible-c-format msgid "second operand of %s must not be zero." msgstr "" -#: ada-lang.c:9704 +#: ada-lang.c:9411 msgid "Attempt to compare array with non-array" msgstr "" -#: ada-lang.c:9830 +#: ada-lang.c:9537 msgid "Left-hand side must be array or record." msgstr "" -#: ada-lang.c:9855 +#: ada-lang.c:9562 msgid "Misplaced 'others' clause" msgstr "" -#: ada-lang.c:9860 +#: ada-lang.c:9567 msgid "Internal error: bad aggregate clause" msgstr "" -#: ada-lang.c:9882 +#: ada-lang.c:9589 msgid "Extra components in aggregate ignored." msgstr "" -#: ada-lang.c:9949 +#: ada-lang.c:9656 msgid "Invalid record component association." msgstr "" -#: ada-lang.c:9955 +#: ada-lang.c:9662 #, possible-c-format msgid "Unknown component name: %s." msgstr "" -#: ada-lang.c:9960 +#: ada-lang.c:9667 msgid "Index in component association out of bounds." msgstr "" -#: ada-lang.c:10036 +#: ada-lang.c:9743 msgid "Internal error: miscounted aggregate components." msgstr "" -#: ada-lang.c:10460 +#: ada-lang.c:10167 msgid "Fixed-point values must be assigned to fixed-point variables" msgstr "" -#: ada-lang.c:10481 +#: ada-lang.c:10188 msgid "Operands of fixed-point addition must have the same type" msgstr "" -#: ada-lang.c:10507 +#: ada-lang.c:10214 msgid "Operands of fixed-point subtraction must have the same type" msgstr "" #. Only encountered when an unresolved symbol occurs in a #. context other than a function call, in which case, it is #. invalid. -#: ada-lang.c:10610 ada-lang.c:10700 +#: ada-lang.c:10317 ada-lang.c:10407 #, possible-c-format msgid "Unexpected unresolved symbol, %s, during evaluation" msgstr "" -#: ada-lang.c:10756 +#: ada-lang.c:10463 #, possible-c-format msgid "cannot subscript or call something of type `%s'" msgstr "" -#: ada-lang.c:10792 +#: ada-lang.c:10499 msgid "cannot subscript or call a record" msgstr "" -#: ada-lang.c:10794 +#: ada-lang.c:10501 #, possible-c-format msgid "wrong number of subscripts; expecting %d" msgstr "" -#: ada-lang.c:10806 ada-lang.c:10820 +#: ada-lang.c:10513 ada-lang.c:10527 msgid "element type of array unknown" msgstr "" -#: ada-lang.c:10829 +#: ada-lang.c:10536 msgid "Attempt to index or call something other than an array or function" msgstr "" -#: ada-lang.c:10859 +#: ada-lang.c:10566 msgid "cannot slice a packed array" msgstr "" -#: ada-lang.c:10888 valops.c:3809 +#: ada-lang.c:10595 valops.c:3768 msgid "cannot take slice of non-array" msgstr "" -#: ada-lang.c:10927 +#: ada-lang.c:10634 msgid "Membership test incompletely implemented; always returns true" msgstr "" -#: ada-lang.c:11016 +#: ada-lang.c:10725 #, possible-c-format msgid "Invalid operand to '%s" msgstr "" #. Should never happen. -#: ada-lang.c:11035 ada-lang.c:11069 ada-lang.c:11094 ada-lang.c:11126 +#: ada-lang.c:10744 ada-lang.c:10778 ada-lang.c:10803 ada-lang.c:10835 msgid "unexpected attribute encountered" msgstr "" -#: ada-lang.c:11102 +#: ada-lang.c:10811 msgid "the 'length attribute applies only to array types" msgstr "" -#: ada-lang.c:11106 +#: ada-lang.c:10815 msgid "unimplemented type attribute" msgstr "" -#: ada-lang.c:11176 +#: ada-lang.c:10885 msgid "'modulus must be applied to modular type" msgstr "" -#: ada-lang.c:11273 +#: ada-lang.c:10982 msgid "Attempt to dereference null array pointer." msgstr "" -#: ada-lang.c:11317 eval.c:2689 eval.c:3178 valops.c:1578 +#: ada-lang.c:11026 eval.c:2701 eval.c:3188 valops.c:1582 msgid "Attempt to take contents of a non-pointer value." msgstr "" -#: ada-lang.c:11396 eval.c:2900 +#: ada-lang.c:11105 eval.c:2912 msgid "Attempt to use a type name as an expression" msgstr "" -#: ada-lang.c:11408 +#: ada-lang.c:11117 #, possible-c-format msgid "" "Undefined name, ambiguous name, or renaming used in component association: " "%s." msgstr "" -#: ada-lang.c:11411 +#: ada-lang.c:11120 msgid "Aggregates only allowed on the right of an assignment" msgstr "" -#: ada-lang.c:11414 +#: ada-lang.c:11123 msgid "aggregate apparently mangled" msgstr "" -#: ada-lang.c:11692 +#: ada-lang.c:11400 msgid "Unknown lower bound, using 1." msgstr "" -#: ada-lang.c:11708 +#: ada-lang.c:11416 #, possible-c-format msgid "Unknown upper bound, using %ld." msgstr "" -#: ada-lang.c:11912 ada-lang.c:11935 +#: ada-lang.c:11627 ada-lang.c:11650 msgid "" "Your Ada runtime appears to be missing some debugging information.\n" "Cannot insert Ada exception catchpoint in this configuration." msgstr "" -#: ada-lang.c:11923 ada-lang.c:11946 +#: ada-lang.c:11638 ada-lang.c:11661 #, possible-c-format msgid "Symbol \"%s\" is not a function (class = %d)" msgstr "" -#: ada-lang.c:11997 +#: ada-lang.c:11712 msgid "Unable to insert catchpoint. Is this an Ada main program?" msgstr "" -#: ada-lang.c:12005 +#: ada-lang.c:11720 msgid "Unable to insert catchpoint. Try to start the program first." msgstr "" @@ -789,134 +790,130 @@ #. configurable run time mode, or that a-except as been optimized #. out by the linker... In any case, at this point it is not worth #. supporting this feature. -#: ada-lang.c:12014 +#: ada-lang.c:11729 msgid "Cannot insert Ada exception catchpoints in this configuration." msgstr "" -#: ada-lang.c:12184 ada-lang.c:12619 ada-lang.c:12672 ada-lang.c:12706 +#: ada-lang.c:11899 ada-lang.c:12335 ada-lang.c:12388 ada-lang.c:12422 msgid "unexpected catchpoint type" msgstr "" -#: ada-lang.c:12269 +#: ada-lang.c:11985 #, possible-c-format msgid "failed to get exception name: %s" msgstr "" -#: ada-lang.c:12368 +#: ada-lang.c:12084 #, possible-c-format msgid "failed to reevaluate internal exception condition for catchpoint %d: %s" msgstr "" -#: ada-lang.c:12463 +#: ada-lang.c:12179 msgid "Error in testing exception condition:\n" msgstr "" -#: ada-lang.c:12589 ada-lang.c:12643 +#: ada-lang.c:12305 ada-lang.c:12359 #, possible-c-format msgid "`%s' Ada exception" msgstr "" -#: ada-lang.c:12607 ada-lang.c:12659 +#: ada-lang.c:12323 ada-lang.c:12375 #, possible-c-format msgid "`%s' Ada exception handlers" msgstr "" -#: ada-lang.c:12633 break-catch-throw.c:315 +#: ada-lang.c:12349 break-catch-throw.c:317 msgid "Temporary catchpoint " msgstr "" -#: ada-lang.c:12634 +#: ada-lang.c:12350 msgid "Catchpoint " msgstr "" -#: ada-lang.c:12648 +#: ada-lang.c:12364 msgid "all Ada exceptions" msgstr "" -#: ada-lang.c:12652 +#: ada-lang.c:12368 msgid "unhandled Ada exceptions" msgstr "" -#: ada-lang.c:12664 +#: ada-lang.c:12380 msgid "all Ada exceptions handlers" msgstr "" -#: ada-lang.c:12668 +#: ada-lang.c:12384 msgid "failed Ada assertions" msgstr "" -#: ada-lang.c:12767 +#: ada-lang.c:12483 msgid "Condition missing after `if' keyword" msgstr "" -#: ada-lang.c:12777 breakpoint.c:876 breakpoint.c:890 +#: ada-lang.c:12493 breakpoint.c:867 breakpoint.c:888 msgid "Junk at end of expression" msgstr "" -#: ada-lang.c:12831 ada-lang.c:12857 +#: ada-lang.c:12547 ada-lang.c:12573 #, possible-c-format msgid "unexpected catchpoint kind (%d)" msgstr "" -#: ada-lang.c:12946 +#: ada-lang.c:12662 #, possible-c-format msgid "Catchpoint symbol not found: %s" msgstr "" -#: ada-lang.c:12949 +#: ada-lang.c:12665 #, possible-c-format msgid "Unable to insert catchpoint. %s is not a function." msgstr "" -#: ada-lang.c:13083 +#: ada-lang.c:12799 msgid "condition missing after `if' keyword" msgstr "" -#: ada-lang.c:13090 break-catch-throw.c:440 breakpoint.c:9131 -#: breakpoint.c:11025 breakpoint.c:11157 breakpoint.c:11201 breakpoint.c:14795 +#: ada-lang.c:12806 break-catch-throw.c:442 breakpoint.c:9185 +#: breakpoint.c:11071 breakpoint.c:11205 breakpoint.c:11249 breakpoint.c:14871 msgid "Junk at end of arguments." msgstr "" -#: ada-lang.c:13406 +#: ada-lang.c:13122 msgid "invalid regular expression" msgstr "" -#: ada-lang.c:13421 +#: ada-lang.c:13137 #, possible-c-format msgid "All Ada exceptions matching regular expression \"%s\":\n" msgstr "" -#: ada-lang.c:13423 +#: ada-lang.c:13139 msgid "All defined Ada exceptions:\n" msgstr "" #. XXX: gdb_sprint_host_address, type_sprint -#: ada-lang.c:13603 +#: ada-lang.c:13319 msgid "Type @" msgstr "" -#: ada-lang.c:14156 -msgid "\"set ada\" must be followed by the name of a setting.\n" -msgstr "" - -#: ada-lang.c:14239 +#: ada-lang.c:14285 msgid "Prefix command for changing Ada-specific settings." msgstr "" -#: ada-lang.c:14243 +#: ada-lang.c:14289 msgid "Generic command for showing Ada-specific settings." msgstr "" -#: ada-lang.c:14247 +#: ada-lang.c:14293 msgid "Enable or disable an optimization trusting PAD types over XVS types." msgstr "" -#: ada-lang.c:14248 +#: ada-lang.c:14294 msgid "" "Show whether an optimization trusting PAD types over XVS types is activated." msgstr "" -#: ada-lang.c:14250 +#: ada-lang.c:14296 msgid "" "This is related to the encoding used by the GNAT compiler. The debugger\n" "should normally trust the contents of PAD types, but certain older versions\n" @@ -928,19 +925,19 @@ "this option to \"off\" unless necessary." msgstr "" -#: ada-lang.c:14261 +#: ada-lang.c:14307 msgid "" "Enable or disable the output of formal and return types for functions in the " "overloads selection menu." msgstr "" -#: ada-lang.c:14263 +#: ada-lang.c:14309 msgid "" "Show whether the output of formal and return types for functions in the " "overloads selection menu is activated." msgstr "" -#: ada-lang.c:14268 +#: ada-lang.c:14314 msgid "" "Catch Ada exceptions, when raised.\n" "Usage: catch exception [ARG] [if CONDITION]\n" @@ -954,7 +951,7 @@ "exception should cause a stop." msgstr "" -#: ada-lang.c:14284 +#: ada-lang.c:14330 msgid "" "Catch Ada exceptions, when handled.\n" "Usage: catch handlers [ARG] [if CONDITION]\n" @@ -964,7 +961,7 @@ "exception should cause a stop." msgstr "" -#: ada-lang.c:14295 +#: ada-lang.c:14341 msgid "" "Catch failed Ada assertions, when raised.\n" "Usage: catch assert [if CONDITION]\n" @@ -972,21 +969,21 @@ "exception should cause a stop." msgstr "" -#: ada-lang.c:14307 +#: ada-lang.c:14353 msgid "Set the maximum number of bytes allowed in a variable-size object." msgstr "" -#: ada-lang.c:14308 +#: ada-lang.c:14354 msgid "Show the maximum number of bytes allowed in a variable-size object." msgstr "" -#: ada-lang.c:14309 +#: ada-lang.c:14355 msgid "" "Attempts to access an object whose size is not a compile-time constant\n" "and exceeds this limit will cause an error." msgstr "" -#: ada-lang.c:14315 +#: ada-lang.c:14361 msgid "" "List all Ada exception names.\n" "Usage: info exceptions [REGEXP]\n" @@ -994,61 +991,61 @@ "the regular expression are listed." msgstr "" -#: ada-lang.c:14322 +#: ada-lang.c:14368 msgid "Set Ada maintenance-related variables." msgstr "" -#: ada-lang.c:14327 +#: ada-lang.c:14373 msgid "Show Ada maintenance-related variables." msgstr "" -#: ada-lang.c:14334 +#: ada-lang.c:14380 msgid "Set whether descriptive types generated by GNAT should be ignored." msgstr "" -#: ada-lang.c:14335 +#: ada-lang.c:14381 msgid "Show whether descriptive types generated by GNAT should be ignored." msgstr "" -#: ada-lang.c:14336 +#: ada-lang.c:14382 msgid "" "When enabled, the debugger will stop using the DW_AT_GNAT_descriptive_type\n" "DWARF attribute." msgstr "" -#: ada-lex.l:143 ada-lex.l:147 +#: ada-lex.l:145 ada-lex.l:149 msgid "Based real literals not implemented yet." msgstr "" -#: ada-lex.l:170 +#: ada-lex.l:172 msgid "ill-formed or non-terminated string literal" msgstr "" -#: ada-lex.l:301 +#: ada-lex.l:303 #, possible-c-format msgid "Invalid character '%s' in expression." msgstr "" -#: ada-lex.l:354 +#: ada-lex.l:356 #, possible-c-format msgid "Invalid base: %d." msgstr "" -#: ada-lex.l:365 ada-lex.l:372 +#: ada-lex.l:367 ada-lex.l:374 msgid "Integer literal out of range" msgstr "" -#: ada-lex.l:367 +#: ada-lex.l:369 #, possible-c-format msgid "Invalid digit `%c' in based literal" msgstr "" -#: ada-lex.l:612 +#: ada-lex.l:614 #, possible-c-format msgid "ambiguous attribute name: `%s'" msgstr "" -#: ada-lex.l:615 +#: ada-lex.l:617 #, possible-c-format msgid "unrecognized attribute: `%s'" msgstr "" @@ -1154,29 +1151,29 @@ msgid "%s. Aborting" msgstr "" -#: ada-tasks.c:1001 +#: ada-tasks.c:1003 msgid "Cannot inspect Ada tasks when program is not running" msgstr "" -#: ada-tasks.c:1027 ada-tasks.c:1196 ada-tasks.c:1372 +#: ada-tasks.c:1029 ada-tasks.c:1198 ada-tasks.c:1374 msgid "Your application does not use any Ada tasks.\n" msgstr "" -#: ada-tasks.c:1156 +#: ada-tasks.c:1158 #, possible-c-format msgid "Accepting RV with %-4d" msgstr "" -#: ada-tasks.c:1161 +#: ada-tasks.c:1163 #, possible-c-format msgid "Waiting on RV with %-3d" msgstr "" -#: ada-tasks.c:1177 +#: ada-tasks.c:1179 msgid "<no name>" msgstr "" -#: ada-tasks.c:1201 ada-tasks.c:1321 +#: ada-tasks.c:1203 ada-tasks.c:1323 #, possible-c-format msgid "" "Task ID %d not known. Use the \"info tasks\" command to\n" @@ -1184,154 +1181,150 @@ msgstr "" #. Print the Ada task ID. -#: ada-tasks.c:1206 +#: ada-tasks.c:1208 #, possible-c-format msgid "Ada Task: %s\n" msgstr "" -#: ada-tasks.c:1211 +#: ada-tasks.c:1213 #, possible-c-format msgid "Name: %s\n" msgstr "" -#: ada-tasks.c:1213 +#: ada-tasks.c:1215 msgid "<no name>\n" msgstr "" #. Print the TID and LWP. -#: ada-tasks.c:1216 +#: ada-tasks.c:1218 #, possible-c-format msgid "Thread: %#lx\n" msgstr "" -#: ada-tasks.c:1217 +#: ada-tasks.c:1219 #, possible-c-format msgid "LWP: %#lx\n" msgstr "" -#: ada-tasks.c:1221 +#: ada-tasks.c:1223 #, possible-c-format msgid "Base CPU: %d\n" msgstr "" -#: ada-tasks.c:1230 +#: ada-tasks.c:1232 #, possible-c-format msgid "Parent: %d" msgstr "" -#: ada-tasks.c:1236 +#: ada-tasks.c:1238 msgid "No parent\n" msgstr "" #. Print the base priority. -#: ada-tasks.c:1239 +#: ada-tasks.c:1241 #, possible-c-format msgid "Base Priority: %d\n" msgstr "" -#: ada-tasks.c:1248 +#: ada-tasks.c:1250 #, possible-c-format msgid "State: Accepting rendezvous with %d" msgstr "" -#: ada-tasks.c:1254 +#: ada-tasks.c:1256 #, possible-c-format msgid "State: Waiting on task %d's entry" msgstr "" -#: ada-tasks.c:1258 +#: ada-tasks.c:1260 #, possible-c-format msgid "State: %s" msgstr "" -#: ada-tasks.c:1298 +#: ada-tasks.c:1300 msgid "[Current task is unknown]\n" msgstr "" -#: ada-tasks.c:1305 +#: ada-tasks.c:1307 #, possible-c-format msgid "[Current task is %s]\n" msgstr "" -#: ada-tasks.c:1326 +#: ada-tasks.c:1328 #, possible-c-format msgid "Cannot switch to task %s: Task is no longer running" msgstr "" -#: ada-tasks.c:1348 +#: ada-tasks.c:1350 #, possible-c-format msgid "" "Unable to compute thread ID for task %s.\n" "Cannot switch to this task." msgstr "" -#: ada-tasks.c:1354 +#: ada-tasks.c:1356 #, possible-c-format msgid "[Switching to task %s]\n" msgstr "" -#: ada-tasks.c:1467 +#: ada-tasks.c:1468 msgid "Provide information about all known Ada tasks." msgstr "" -#: ada-tasks.c:1469 +#: ada-tasks.c:1470 msgid "" "Use this command to switch between Ada tasks.\n" "Without argument, this command simply prints the current task ID." msgstr "" -#: ada-typeprint.c:388 +#: ada-typeprint.c:389 msgid "<undecipherable array type>" msgstr "" -#: ada-typeprint.c:719 +#: ada-typeprint.c:849 msgid " <incomplete type> end record" msgstr "" -#: ada-typeprint.c:893 +#: ada-typeprint.c:1023 #, possible-c-format msgid "<%s-byte integer>" msgstr "" -#: ada-typeprint.c:916 +#: ada-typeprint.c:1046 #, possible-c-format msgid "<%s-byte float>" msgstr "" -#: ada-typeprint.c:930 +#: ada-typeprint.c:1060 msgid "array (?) of ? (<mal-formed descriptor>)" msgstr "" -#: ada-valprint.c:165 valprint.c:2010 -msgid "unable to get positions in array, use bounds instead" -msgstr "" - -#: ada-valprint.c:237 ada-valprint.c:528 +#: ada-valprint.c:214 ada-valprint.c:499 #, possible-c-format msgid " %p[<repeats %u times>%p]" msgstr "" -#: ada-valprint.c:460 +#: ada-valprint.c:431 msgid "internal error: unhandled type in ada_print_scalar" msgstr "" -#: ada-valprint.c:464 typeprint.c:677 +#: ada-valprint.c:435 typeprint.c:668 msgid "Invalid type code in symbol table." msgstr "" -#: ada-valprint.c:673 +#: ada-valprint.c:634 msgid "<optimized out or zero length>" msgstr "" -#: ada-valprint.c:1217 cp-valprint.c:314 guile/scm-pretty-print.c:631 -#: mi/mi-cmd-stack.c:536 mi/mi-cmd-stack.c:550 python/py-prettyprint.c:267 -#: python/py-framefilter.c:401 stack.c:456 stack.c:493 +#: ada-valprint.c:1112 cp-valprint.c:311 guile/scm-pretty-print.c:631 +#: mi/mi-cmd-stack.c:536 mi/mi-cmd-stack.c:550 python/py-framefilter.c:401 +#: python/py-prettyprint.c:267 stack.c:456 stack.c:493 #, possible-c-format msgid "<error reading variable: %s>" msgstr "" #. Could not get the array bounds. Pretend this is an empty array. -#: ada-varobj.c:251 valprint.c:2027 +#: ada-varobj.c:253 valprint.c:1896 msgid "unable to get bounds of array, assuming null array" msgstr "" @@ -1352,15 +1345,15 @@ msgid "Debugger's willingness to use agent in inferior as a helper is %s.\n" msgstr "" -#: agent.c:84 +#: agent.c:85 msgid "Set debugger's willingness to use agent as a helper." msgstr "" -#: agent.c:85 +#: agent.c:86 msgid "Show debugger's willingness to use agent as a helper." msgstr "" -#: agent.c:86 +#: agent.c:87 msgid "" "If on, GDB will delegate some of the debugging operations to the\n" "agent, if the target supports it. This will speed up those\n" @@ -1404,73 +1397,73 @@ msgstr "" #. i18n: Like "Thread-Id %d, [state] unknown" -#: aix-thread.c:621 btrace.c:1884 source.c:668 +#: aix-thread.c:621 btrace.c:1886 source.c:694 msgid "unknown" msgstr "" -#: aix-thread.c:1048 +#: aix-thread.c:1054 #, possible-c-format msgid "aix-thread resume: unknown pthread %ld" msgstr "" -#: aix-thread.c:1055 +#: aix-thread.c:1061 #, possible-c-format msgid "aix-thread resume: no tid for pthread %ld" msgstr "" -#: aix-thread.c:1225 +#: aix-thread.c:1233 #, possible-c-format msgid "aix-thread: fetch_registers: pthdb_pthread_context returned %s" msgstr "" -#: aix-thread.c:1508 +#: aix-thread.c:1516 #, possible-c-format msgid "aix-thread: store_registers: pthdb_pthread_context returned %s" msgstr "" -#: aix-thread.c:1566 +#: aix-thread.c:1574 #, possible-c-format msgid "aix-thread: store_registers: pthdb_pthread_setcontext returned %s" msgstr "" -#: aix-thread.c:1755 +#: aix-thread.c:1765 #, possible-c-format msgid "Thread %ld" msgstr "" #. i18n: Like "thread-identifier %d, [state] running, suspended" -#: aix-thread.c:1784 +#: aix-thread.c:1794 #, c-format msgid "tid %d" msgstr "" #. i18n: Like "Thread-Id %d, [state] running, suspended" -#: aix-thread.c:1795 +#: aix-thread.c:1805 #, c-format msgid ", suspended" msgstr "" #. i18n: Like "Thread-Id %d, [state] running, detached" -#: aix-thread.c:1801 +#: aix-thread.c:1811 #, c-format msgid ", detached" msgstr "" #. i18n: Like "Thread-Id %d, [state] running, cancel pending" -#: aix-thread.c:1806 +#: aix-thread.c:1816 #, c-format msgid ", cancel pending" msgstr "" -#: aix-thread.c:1838 +#: aix-thread.c:1849 msgid "Set debugging of AIX thread module." msgstr "" -#: aix-thread.c:1839 +#: aix-thread.c:1850 msgid "Show debugging of AIX thread module." msgstr "" -#: aix-thread.c:1840 +#: aix-thread.c:1851 msgid "Enables debugging output (used to debug GDB)." msgstr "" @@ -1509,69 +1502,69 @@ "(more likely) you have encountered a bug in GDB.\n" msgstr "" -#: alpha-tdep.c:1838 mips-tdep.c:9068 +#: alpha-tdep.c:1839 mips-tdep.c:9041 msgid "Set the distance searched for the start of a function." msgstr "" -#: alpha-tdep.c:1839 mips-tdep.c:9069 +#: alpha-tdep.c:1840 mips-tdep.c:9042 msgid "Show the distance searched for the start of a function." msgstr "" -#: alpha-tdep.c:1840 mips-tdep.c:9070 +#: alpha-tdep.c:1841 mips-tdep.c:9043 msgid "" "If you are debugging a stripped executable, GDB needs to search through the\n" "program for the start of a function. This command sets the distance of the\n" "search. The only need to set it is when debugging a stripped executable." msgstr "" -#: amd64-bsd-nat.c:68 amd64-linux-nat.c:272 i386-bsd-nat.c:153 +#: amd64-bsd-nat.c:84 i386-bsd-nat.c:168 msgid "Couldn't get segment register fs_base" msgstr "" -#: amd64-bsd-nat.c:81 amd64-linux-nat.c:280 i386-bsd-nat.c:166 +#: amd64-bsd-nat.c:97 i386-bsd-nat.c:181 msgid "Couldn't get segment register gs_base" msgstr "" -#: amd64-bsd-nat.c:100 amd64-bsd-nat.c:184 amd64-linux-nat.c:251 -#: amd64-linux-nat.c:333 i386-bsd-nat.c:189 i386-bsd-nat.c:283 +#: amd64-bsd-nat.c:116 amd64-bsd-nat.c:200 amd64-linux-nat.c:251 +#: amd64-linux-nat.c:309 i386-bsd-nat.c:204 i386-bsd-nat.c:300 msgid "Couldn't get extended state status" msgstr "" -#: amd64-bsd-nat.c:152 amd64-linux-nat.c:364 i386-bsd-nat.c:249 +#: amd64-bsd-nat.c:168 i386-bsd-nat.c:266 msgid "Couldn't write segment register fs_base" msgstr "" -#: amd64-bsd-nat.c:167 amd64-linux-nat.c:371 i386-bsd-nat.c:262 +#: amd64-bsd-nat.c:183 i386-bsd-nat.c:279 msgid "Couldn't write segment register gs_base" msgstr "" -#: amd64-bsd-nat.c:190 amd64-linux-nat.c:339 i386-bsd-nat.c:289 +#: amd64-bsd-nat.c:206 amd64-linux-nat.c:315 i386-bsd-nat.c:306 #: i386-linux-nat.c:372 msgid "Couldn't write extended state status" msgstr "" -#: amd64-fbsd-nat.c:247 +#: amd64-fbsd-nat.c:248 #, possible-c-format msgid "" "offsetof (struct sigcontext, sc_rip) yields %d instead of %d.\n" "Please report this to <bug-gdb@gnu.org>." msgstr "" -#: amd64-fbsd-nat.c:260 +#: amd64-fbsd-nat.c:261 #, possible-c-format msgid "" "offsetof (struct sigcontext, sc_rsp) yields %d instead of %d.\n" "Please report this to <bug-gdb@gnu.org>." msgstr "" -#: amd64-fbsd-nat.c:273 +#: amd64-fbsd-nat.c:274 #, possible-c-format msgid "" "offsetof (struct sigcontext, sc_rbp) yields %d instead of %d.\n" "Please report this to <bug-gdb@gnu.org>." msgstr "" -#: amd64-fbsd-tdep.c:221 +#: amd64-fbsd-tdep.c:223 #, possible-c-format msgid "Unable to fetch %%fsbase" msgstr "" @@ -1581,102 +1574,98 @@ msgid "unable to find free reg" msgstr "" -#: arc-tdep.c:803 +#: arc-tdep.c:954 #, possible-c-format msgid "arc: extract_return_value: type length %u too large" msgstr "" -#: arc-tdep.c:857 +#: arc-tdep.c:1008 msgid "arc_store_return_value: type length too large." msgstr "" -#: arc-tdep.c:1804 arc-tdep.c:1820 -msgid "Error: ARC v2 target description supplied for non-ARCv2 target.\n" -msgstr "" - -#: arc-tdep.c:1837 -msgid "" -"Error: ARCompact target description supplied for non-ARCompact target.\n" +#: arc-tdep.c:1882 +#, possible-c-format +msgid "unknown machine id %lu" msgstr "" -#: arc-tdep.c:1848 -msgid "" -"Error: Couldn't find core register feature in supplied target description." +#: arc-tdep.c:1908 riscv-tdep.c:3060 +#, possible-c-format +msgid "unknown ELF header class %d" msgstr "" -#: arc-tdep.c:1882 arc-tdep.c:1906 +#: arc-tdep.c:2032 #, possible-c-format -msgid "Error: Cannot find required register `%s' in feature `%s'.\n" +msgid "Error: Cannot find required register(s) %s in feature '%s'.\n" msgstr "" -#: arc-tdep.c:1894 +#: arc-tdep.c:2110 arc-tdep.c:2117 #, possible-c-format msgid "" -"Error: Cannot find required feature `%s' in supplied target description.\n" +"Error: Cannot find required feature '%s' in supplied target description.\n" msgstr "" -#: arc-tdep.c:2160 +#: arc-tdep.c:2385 msgid "ARC-specific maintenance commands for printing GDB internal state." msgstr "" -#: arc-tdep.c:2167 +#: arc-tdep.c:2392 msgid "Dump arc_instruction structure for specified address." msgstr "" -#: arc-tdep.c:2173 +#: arc-tdep.c:2398 msgid "Set ARC specific debugging." msgstr "" -#: arc-tdep.c:2174 +#: arc-tdep.c:2399 msgid "Show ARC specific debugging." msgstr "" -#: arc-tdep.c:2175 +#: arc-tdep.c:2400 msgid "Non-zero enables ARC specific debugging." msgstr "" #. multiply -#: arch/arm-get-next-pcs.c:682 arch/arm-get-next-pcs.c:703 -#: arch/arm-get-next-pcs.c:819 arch/arm.c:134 +#: arch/arm.c:123 arch/arm-get-next-pcs.c:683 arch/arm-get-next-pcs.c:704 +#: arch/arm-get-next-pcs.c:820 msgid "Invalid update to pc in instruction" msgstr "" -#: arch/arm-get-next-pcs.c:899 -msgid "Bad bit-field extraction" -msgstr "" - -#: arch/arm.c:205 +#: arch/arm.c:194 msgid "bad value in switch" msgstr "" -#: arch/arm.c:419 +#: arch/arm.c:408 #, possible-c-format msgid "Invalid Arm FP type: %d" msgstr "" -#: arch/arm.c:454 +#: arch/arm.c:443 #, possible-c-format msgid "Invalid Arm M type: %d" msgstr "" +#: arch/arm-get-next-pcs.c:900 +msgid "Bad bit-field extraction" +msgstr "" + #: arch-utils.c:220 m32c-tdep.c:2551 m32c-tdep.c:2572 msgid "No virtual frame pointer available" msgstr "" #: arch-utils.c:319 -msgid "The target endianness is set automatically (currently big endian)\n" +msgid "The target endianness is set automatically (currently big endian).\n" msgstr "" #: arch-utils.c:322 -msgid "The target endianness is set automatically (currently little endian)\n" +msgid "The target endianness is set automatically (currently little endian).\n" msgstr "" #: arch-utils.c:327 -msgid "The target is assumed to be big endian\n" +msgid "The target is set to big endian.\n" msgstr "" #: arch-utils.c:330 -msgid "The target is assumed to be little endian\n" +msgid "The target is set to little endian.\n" msgstr "" #: arch-utils.c:345 @@ -1712,12 +1701,12 @@ #: arch-utils.c:479 #, possible-c-format -msgid "The target architecture is set automatically (currently %s)\n" +msgid "The target architecture is set to \"auto\" (currently \"%s\").\n" msgstr "" #: arch-utils.c:483 #, possible-c-format -msgid "The target architecture is assumed to be %s\n" +msgid "The target architecture is set to \"%s\".\n" msgstr "" #: arch-utils.c:504 @@ -1762,15 +1751,15 @@ msgid "This architecture has no method to collect a return address." msgstr "" -#: arch-utils.c:894 +#: arch-utils.c:926 msgid "This target does not support inferior memory allocation by mmap." msgstr "" -#: arch-utils.c:1012 +#: arch-utils.c:1061 msgid "Set endianness of target." msgstr "" -#: arch-utils.c:1013 +#: arch-utils.c:1062 msgid "Show endianness of target." msgstr "" @@ -1816,199 +1805,197 @@ msgid "Unexpected error setting watchpoint" msgstr "" -#: arm-linux-tdep.c:1773 +#: arm-linux-tdep.c:1775 msgid "arm_linux_init_abi: Floating point model not supported" msgstr "" -#: arm-nbsd-nat.c:88 +#: arm-nbsd-nat.c:76 msgid "unable to fetch general register" msgstr "" -#: arm-nbsd-nat.c:137 arm-nbsd-nat.c:185 arm-nbsd-nat.c:222 -msgid "unable to fetch general registers" +#: arm-nbsd-nat.c:96 +msgid "unable to fetch floating-point register" msgstr "" -#: arm-nbsd-nat.c:155 -msgid "unable to fetch floating-point register" +#: arm-nbsd-nat.c:110 arm-nbsd-nat.c:292 +msgid "Invalid register number." msgstr "" -#: arm-nbsd-nat.c:279 arm-nbsd-nat.c:356 +#: arm-nbsd-nat.c:126 arm-nbsd-nat.c:164 +msgid "unable to fetch general registers" +msgstr "" + +#: arm-nbsd-nat.c:221 arm-nbsd-nat.c:298 #, possible-c-format msgid "unable to write register %d to inferior" msgstr "" -#: arm-nbsd-nat.c:321 +#: arm-nbsd-nat.c:264 msgid "unable to store general registers" msgstr "" -#: arm-nbsd-nat.c:335 +#: arm-nbsd-nat.c:278 msgid "unable to fetch floating-point registers" msgstr "" -#: arm-nbsd-nat.c:378 +#: arm-nbsd-nat.c:321 msgid "unable to store floating-point registers" msgstr "" -#: arm-nbsd-nat.c:410 -msgid "wrong size of register set in core file" -msgstr "" - -#: arm-nbsd-nat.c:422 -msgid "wrong size of FPA register set in core file" +#: arm-nbsd-tdep.c:135 arm-tdep.c:9378 +msgid "arm_gdbarch_init: bad byte order for float format" msgstr "" -#: arm-nbsd-tdep.c:63 arm-tdep.c:9278 -msgid "arm_gdbarch_init: bad byte order for float format" +#. Thread (process) stack could not be fetched, +#. give warning and exit. +#: arm-tdep.c:2979 +msgid "no PSP thread stack unwinding supported." msgstr "" -#: arm-tdep.c:3350 arm-tdep.c:3372 +#: arm-tdep.c:3462 arm-tdep.c:3484 #, possible-c-format msgid "Invalid VFP CPRC type: %d." msgstr "" -#: arm-tdep.c:3872 +#: arm-tdep.c:3984 #, possible-c-format msgid "Hardware FPU type %d\n" msgstr "" -#: arm-tdep.c:3874 +#: arm-tdep.c:3986 #, possible-c-format msgid "Software FPU type %d\n" msgstr "" #. i18n: [floating point unit] mask -#: arm-tdep.c:3876 +#: arm-tdep.c:3988 msgid "mask: " msgstr "" #. i18n: [floating point unit] flags -#: arm-tdep.c:3879 +#: arm-tdep.c:3991 msgid "flags: " msgstr "" -#: arm-tdep.c:4108 +#: arm-tdep.c:4220 #, possible-c-format msgid "Bad REGNUM %d" msgstr "" #. Unpredictable behaviour. Try to do something sensible (switch to ARM #. mode, align dest to 4 bytes). -#: arm-tdep.c:4414 +#: arm-tdep.c:4526 msgid "Single-stepping BX to non-word-aligned ARM instruction." msgstr "" -#: arm-tdep.c:4476 +#: arm-tdep.c:4588 msgid "Instruction wrote to PC in an unexpected way when single-stepping" msgstr "" -#: arm-tdep.c:4482 +#: arm-tdep.c:4594 msgid "Invalid argument to displaced_write_reg" msgstr "" -#: arm-tdep.c:5442 +#: arm-tdep.c:5554 msgid "copy_extra_ld_st: instruction decode error" msgstr "" -#: arm-tdep.c:5756 +#: arm-tdep.c:5868 msgid "Cannot single-step exception return" msgstr "" -#: arm-tdep.c:5876 +#: arm-tdep.c:5989 #, possible-c-format msgid "displaced: LDM: move loaded register r%d to r%d\n" msgstr "" -#: arm-tdep.c:5881 +#: arm-tdep.c:5994 #, possible-c-format msgid "displaced: LDM: register r%d already in the right place\n" msgstr "" -#: arm-tdep.c:5901 +#: arm-tdep.c:6014 #, possible-c-format msgid "displaced: LDM: restored clobbered register r%d\n" msgstr "" -#: arm-tdep.c:5944 arm-tdep.c:6055 +#: arm-tdep.c:6057 arm-tdep.c:6168 msgid "displaced: Unpredictable LDM or STM with base register r15" msgstr "" -#: arm-tdep.c:6013 arm-tdep.c:6099 +#: arm-tdep.c:6126 arm-tdep.c:6212 #, possible-c-format msgid "" "displaced: LDM r%d%s, {..., pc}: original reg list %.4x, modified list %.4x\n" msgstr "" -#: arm-tdep.c:7115 +#: arm-tdep.c:7228 #, possible-c-format msgid "displaced: POP {..., pc}: original reg list %.4x, modified list %.4x\n" msgstr "" -#: arm-tdep.c:7232 +#: arm-tdep.c:7345 msgid "thumb_process_displaced_16bit_insn: Instruction decode error" msgstr "" -#: arm-tdep.c:7439 +#: arm-tdep.c:7552 msgid "thumb_process_displaced_32bit_insn: Instruction decode error" msgstr "" -#: arm-tdep.c:7523 +#: arm-tdep.c:7636 msgid "arm_process_displaced_insn: Instruction decode error" msgstr "" -#: arm-tdep.c:7836 +#: arm-tdep.c:7949 msgid "arm_extract_return_value: Floating point model not supported" msgstr "" -#: arm-tdep.c:8040 +#: arm-tdep.c:8152 msgid "arm_store_return_value: Floating point model not supported" msgstr "" -#: arm-tdep.c:8329 -msgid "\"set arm\" must be followed by an apporpriate subcommand.\n" -msgstr "" - -#: arm-tdep.c:8353 rs6000-tdep.c:7199 rs6000-tdep.c:7226 +#: arm-tdep.c:8451 rs6000-tdep.c:7184 rs6000-tdep.c:7211 msgid "could not update architecture" msgstr "" -#: arm-tdep.c:8370 +#: arm-tdep.c:8468 #, possible-c-format msgid "Invalid fp model accepted: %s." msgstr "" -#: arm-tdep.c:8384 +#: arm-tdep.c:8482 #, possible-c-format msgid "The current ARM floating point model is \"auto\" (currently \"%s\").\n" msgstr "" -#: arm-tdep.c:8388 +#: arm-tdep.c:8486 #, possible-c-format msgid "The current ARM floating point model is \"%s\".\n" msgstr "" -#: arm-tdep.c:8407 +#: arm-tdep.c:8505 #, possible-c-format msgid "Invalid ABI accepted: %s." msgstr "" -#: arm-tdep.c:8421 +#: arm-tdep.c:8519 #, possible-c-format msgid "The current ARM ABI is \"auto\" (currently \"%s\").\n" msgstr "" -#: arm-tdep.c:8425 +#: arm-tdep.c:8523 #, possible-c-format msgid "The current ARM ABI is \"%s\".\n" msgstr "" -#: arm-tdep.c:8434 +#: arm-tdep.c:8532 #, possible-c-format msgid "" "The current execution mode assumed (when symbols are unavailable) is \"%s" "\".\n" msgstr "" -#: arm-tdep.c:8444 +#: arm-tdep.c:8542 #, possible-c-format msgid "" "The current execution mode assumed (even when symbols are available) is \"%s" @@ -2016,57 +2003,92 @@ msgstr "" #. Leave it as "auto". -#: arm-tdep.c:8970 +#: arm-tdep.c:9070 #, possible-c-format msgid "unknown ARM EABI version 0x%x" msgstr "" -#: arm-tdep.c:9471 +#: arm-tdep.c:9571 +#, possible-c-format +msgid "arm_dump_tdep: fp_model = %i\n" +msgstr "" + +#: arm-tdep.c:9573 +#, possible-c-format +msgid "arm_dump_tdep: have_fpa_registers = %i\n" +msgstr "" + +#: arm-tdep.c:9575 +#, possible-c-format +msgid "arm_dump_tdep: have_wmmx_registers = %i\n" +msgstr "" + +#: arm-tdep.c:9577 +#, possible-c-format +msgid "arm_dump_tdep: vfp_register_count = %i\n" +msgstr "" + +#: arm-tdep.c:9579 #, possible-c-format -msgid "arm_dump_tdep: Lowest pc = 0x%lx" +msgid "arm_dump_tdep: have_vfp_pseudos = %i\n" msgstr "" -#: arm-tdep.c:9502 arm-tdep.c:9506 +#: arm-tdep.c:9581 +#, possible-c-format +msgid "arm_dump_tdep: have_neon_pseudos = %i\n" +msgstr "" + +#: arm-tdep.c:9583 +#, possible-c-format +msgid "arm_dump_tdep: have_neon = %i\n" +msgstr "" + +#: arm-tdep.c:9585 +#, possible-c-format +msgid "arm_dump_tdep: Lowest pc = 0x%lx\n" +msgstr "" + +#: arm-tdep.c:9617 arm-tdep.c:9621 msgid "Various ARM-specific commands." msgstr "" -#: arm-tdep.c:9537 +#: arm-tdep.c:9652 msgid "The valid values are:\n" msgstr "" -#: arm-tdep.c:9539 +#: arm-tdep.c:9654 msgid "The default is \"std\"." msgstr "" -#: arm-tdep.c:9543 +#: arm-tdep.c:9658 msgid "Set the disassembly style." msgstr "" -#: arm-tdep.c:9544 +#: arm-tdep.c:9659 msgid "Show the disassembly style." msgstr "" -#: arm-tdep.c:9551 +#: arm-tdep.c:9666 msgid "Set usage of ARM 32-bit mode." msgstr "" -#: arm-tdep.c:9552 +#: arm-tdep.c:9667 msgid "Show usage of ARM 32-bit mode." msgstr "" -#: arm-tdep.c:9553 +#: arm-tdep.c:9668 msgid "When off, a 26-bit PC will be used." msgstr "" -#: arm-tdep.c:9561 +#: arm-tdep.c:9676 msgid "Set the floating point type." msgstr "" -#: arm-tdep.c:9562 +#: arm-tdep.c:9677 msgid "Show the floating point type." msgstr "" -#: arm-tdep.c:9563 +#: arm-tdep.c:9678 msgid "" "auto - Determine the FP typefrom the OS-ABI.\n" "softfpa - Software FP, mixed-endian doubles on little-endian ARMs.\n" @@ -2075,47 +2097,47 @@ "vfp - VFP co-processor." msgstr "" -#: arm-tdep.c:9573 +#: arm-tdep.c:9688 msgid "Set the ABI." msgstr "" -#: arm-tdep.c:9574 +#: arm-tdep.c:9689 msgid "Show the ABI." msgstr "" -#: arm-tdep.c:9582 +#: arm-tdep.c:9697 msgid "Set the mode assumed when symbols are unavailable." msgstr "" -#: arm-tdep.c:9583 +#: arm-tdep.c:9698 msgid "Show the mode assumed when symbols are unavailable." msgstr "" -#: arm-tdep.c:9588 +#: arm-tdep.c:9703 msgid "Set the mode assumed even when symbols are available." msgstr "" -#: arm-tdep.c:9589 +#: arm-tdep.c:9704 msgid "Show the mode assumed even when symbols are available." msgstr "" -#: arm-tdep.c:9595 +#: arm-tdep.c:9710 msgid "Set ARM debugging." msgstr "" -#: arm-tdep.c:9596 +#: arm-tdep.c:9711 msgid "Show ARM debugging." msgstr "" -#: arm-tdep.c:9597 +#: arm-tdep.c:9712 msgid "When on, arm-specific debugging is enabled." msgstr "" -#: arm-tdep.c:11639 arm-tdep.c:12162 rs6000-tdep.c:5850 s390-tdep.c:3108 +#: arm-tdep.c:11754 arm-tdep.c:12277 rs6000-tdep.c:5851 s390-tdep.c:3110 msgid "no syscall record support\n" msgstr "" -#: arm-tdep.c:13073 arm-tdep.c:13288 +#: arm-tdep.c:13188 arm-tdep.c:13403 #, possible-c-format msgid "Process record: error reading memory at addr %s len = %d.\n" msgstr "" @@ -2236,16 +2258,16 @@ "\tinfo \"(gdb)Auto-loading safe path\"\n" msgstr "" -#: auto-load.c:770 auto-load.c:795 +#: auto-load.c:770 auto-load.c:802 #, possible-c-format msgid "auto-load: Attempted file \"%s\" %s.\n" msgstr "" -#: auto-load.c:771 auto-load.c:798 +#: auto-load.c:771 auto-load.c:805 msgid "exists" msgstr "" -#: auto-load.c:771 auto-load.c:798 +#: auto-load.c:771 auto-load.c:805 msgid "does not exist" msgstr "" @@ -2254,70 +2276,70 @@ msgid "auto-load: Searching 'set auto-load scripts-directory' path \"%s\".\n" msgstr "" -#: auto-load.c:811 +#: auto-load.c:818 #, possible-c-format msgid "auto-load: Loading %s script \"%s\" by extension for objfile \"%s\".\n" msgstr "" -#: auto-load.c:871 +#: auto-load.c:878 #, possible-c-format msgid "auto-load: Stripped .exe suffix, retrying with \"%s\".\n" msgstr "" -#: auto-load.c:918 auto-load.c:1021 +#: auto-load.c:925 auto-load.c:1028 #, possible-c-format msgid "" "auto-load: Loading %s script \"%s\" from section \"%s\" of objfile \"%s\".\n" msgstr "" #. We don't throw an error, the program is still debuggable. -#: auto-load.c:992 +#: auto-load.c:999 #, possible-c-format msgid "" "Missing/bad script name in entry at offset %u in section %s\n" "of file %ps." msgstr "" -#: auto-load.c:1073 +#: auto-load.c:1080 #, possible-c-format msgid "Invalid entry in %s section" msgstr "" -#: auto-load.c:1084 +#: auto-load.c:1091 #, possible-c-format msgid "Non-nul-terminated entry in %s at offset %u" msgstr "" -#: auto-load.c:1096 +#: auto-load.c:1103 #, possible-c-format msgid "Empty entry in %s at offset %u" msgstr "" -#: auto-load.c:1127 +#: auto-load.c:1134 #, possible-c-format msgid "Couldn't read %s section of %ps" msgstr "" -#: auto-load.c:1277 mi/mi-cmd-file.c:143 solib.c:966 solib.c:1045 +#: auto-load.c:1284 mi/mi-cmd-file.c:142 solib.c:955 solib.c:1033 #, possible-c-format msgid "Invalid regexp: %s" msgstr "" -#: auto-load.c:1356 +#: auto-load.c:1363 msgid "Local .gdbinit file was not found.\n" msgstr "" -#: auto-load.c:1358 +#: auto-load.c:1365 #, possible-c-format msgid "Local .gdbinit file \"%ps\" has been loaded.\n" msgstr "" -#: auto-load.c:1362 +#: auto-load.c:1369 #, possible-c-format msgid "Local .gdbinit file \"%ps\" has not been loaded.\n" msgstr "" -#: auto-load.c:1379 +#: auto-load.c:1386 #, possible-c-format msgid "" "Unsupported auto-load script at offset %u in section %s\n" @@ -2325,7 +2347,7 @@ "Use `info auto-load %s-scripts [REGEXP]' to list them." msgstr "" -#: auto-load.c:1403 +#: auto-load.c:1410 #, possible-c-format msgid "" "Missing auto-load script at offset %u in section %s\n" @@ -2333,65 +2355,65 @@ "Use `info auto-load %s-scripts [REGEXP]' to list them." msgstr "" -#: auto-load.c:1434 +#: auto-load.c:1441 msgid "" "Valid is only global 'set auto-load no'; otherwise check the auto-load sub-" "commands." msgstr "" -#: auto-load.c:1453 +#: auto-load.c:1460 msgid "" "Auto-loading specific settings.\n" "Configure various auto-load-specific variables such as\n" "automatic loading of Python scripts." msgstr "" -#: auto-load.c:1480 +#: auto-load.c:1478 msgid "" "Show auto-loading specific settings.\n" "Show configuration of various auto-load-specific variables such as\n" "automatic loading of Python scripts." msgstr "" -#: auto-load.c:1523 +#: auto-load.c:1521 msgid "" "Print current status of auto-loaded files.\n" "Print whether various files like Python scripts or .gdbinit files have been\n" "found and/or loaded." msgstr "" -#: auto-load.c:1544 +#: auto-load.c:1543 msgid "Enable or disable auto-loading of canned sequences of commands scripts." msgstr "" -#: auto-load.c:1545 +#: auto-load.c:1544 msgid "" "Show whether auto-loading of canned sequences of commands scripts is enabled." msgstr "" -#: auto-load.c:1547 +#: auto-load.c:1546 msgid "" "If enabled, canned sequences of commands are loaded when the debugger reads\n" "an executable or shared library.\n" "This option has security implications for untrusted inferiors." msgstr "" -#: auto-load.c:1556 +#: auto-load.c:1555 msgid "" "Print the list of automatically loaded sequences of commands.\n" "Usage: info auto-load gdb-scripts [REGEXP]" msgstr "" -#: auto-load.c:1561 +#: auto-load.c:1560 msgid "Enable or disable auto-loading of .gdbinit script in current directory." msgstr "" -#: auto-load.c:1562 +#: auto-load.c:1561 msgid "" "Show whether auto-loading .gdbinit script in current directory is enabled." msgstr "" -#: auto-load.c:1564 +#: auto-load.c:1563 msgid "" "If enabled, canned sequences of commands are loaded when debugger starts\n" "from .gdbinit file in current directory. Such files are deprecated,\n" @@ -2399,28 +2421,28 @@ "This option has security implications for untrusted inferiors." msgstr "" -#: auto-load.c:1574 +#: auto-load.c:1573 msgid "" "Print whether current directory .gdbinit file has been loaded.\n" "Usage: info auto-load local-gdbinit" msgstr "" -#: auto-load.c:1582 +#: auto-load.c:1581 #, possible-c-format msgid "GDB scripts: OBJFILE%s\n" msgstr "" -#: auto-load.c:1589 +#: auto-load.c:1588 #, possible-c-format msgid "Python scripts: OBJFILE%s\n" msgstr "" -#: auto-load.c:1597 +#: auto-load.c:1596 #, possible-c-format msgid "Guile scripts: OBJFILE%s\n" msgstr "" -#: auto-load.c:1602 +#: auto-load.c:1601 #, possible-c-format msgid "" "Automatically loaded scripts are located in one of the directories listed\n" @@ -2435,23 +2457,23 @@ "option." msgstr "" -#: auto-load.c:1619 +#: auto-load.c:1618 msgid "Set the list of directories from which to load auto-loaded scripts." msgstr "" -#: auto-load.c:1620 +#: auto-load.c:1619 msgid "Show the list of directories from which to load auto-loaded scripts." msgstr "" -#: auto-load.c:1634 +#: auto-load.c:1633 msgid "Set the list of files and directories that are safe for auto-loading." msgstr "" -#: auto-load.c:1635 +#: auto-load.c:1634 msgid "Show the list of files and directories that are safe for auto-loading." msgstr "" -#: auto-load.c:1636 +#: auto-load.c:1635 msgid "" "Various files loaded automatically for the 'set auto-load ...' options must\n" "be located in one of the directories listed by this option. Warning will " @@ -2467,7 +2489,7 @@ "This option has security implications for untrusted inferiors." msgstr "" -#: auto-load.c:1655 +#: auto-load.c:1654 msgid "" "Add entries to the list of directories from which it is safe to auto-load " "files.\n" @@ -2476,7 +2498,7 @@ "access the current full list setting." msgstr "" -#: auto-load.c:1664 +#: auto-load.c:1663 msgid "" "Add entries to the list of directories from which to load auto-loaded " "scripts.\n" @@ -2484,279 +2506,315 @@ "'show auto-load scripts-directory' to access the current full list setting." msgstr "" -#: auto-load.c:1672 +#: auto-load.c:1671 msgid "Set auto-load verifications debugging." msgstr "" -#: auto-load.c:1673 +#: auto-load.c:1672 msgid "Show auto-load verifications debugging." msgstr "" -#: auto-load.c:1674 +#: auto-load.c:1673 msgid "" "When non-zero, debugging output for files of 'set auto-load ...'\n" "is displayed." msgstr "" -#: auxv.c:426 +#: auxv.c:457 msgid "End of vector" msgstr "" -#: auxv.c:427 auxv.c:449 +#: auxv.c:458 auxv.c:480 msgid "Entry should be ignored" msgstr "" -#: auxv.c:428 +#: auxv.c:459 msgid "File descriptor of program" msgstr "" -#: auxv.c:429 +#: auxv.c:460 msgid "Program headers for program" msgstr "" -#: auxv.c:430 +#: auxv.c:461 msgid "Size of program header entry" msgstr "" -#: auxv.c:431 +#: auxv.c:462 msgid "Number of program headers" msgstr "" -#: auxv.c:432 +#: auxv.c:463 msgid "System page size" msgstr "" -#: auxv.c:433 +#: auxv.c:464 msgid "Base address of interpreter" msgstr "" -#: auxv.c:434 +#: auxv.c:465 msgid "Flags" msgstr "" -#: auxv.c:435 +#: auxv.c:466 msgid "Entry point of program" msgstr "" -#: auxv.c:436 +#: auxv.c:467 msgid "Program is not ELF" msgstr "" -#: auxv.c:437 auxv.c:465 +#: auxv.c:468 auxv.c:508 msgid "Real user ID" msgstr "" -#: auxv.c:438 auxv.c:464 +#: auxv.c:469 auxv.c:507 msgid "Effective user ID" msgstr "" -#: auxv.c:439 auxv.c:467 +#: auxv.c:470 auxv.c:510 msgid "Real group ID" msgstr "" -#: auxv.c:440 auxv.c:466 +#: auxv.c:471 auxv.c:509 msgid "Effective group ID" msgstr "" -#: auxv.c:441 +#: auxv.c:472 msgid "Frequency of times()" msgstr "" -#: auxv.c:442 +#: auxv.c:473 msgid "String identifying platform" msgstr "" -#: auxv.c:443 auxv.c:475 fbsd-tdep.c:1597 +#: auxv.c:474 auxv.c:518 fbsd-tdep.c:1599 msgid "Machine-dependent CPU capability hints" msgstr "" -#: auxv.c:445 +#: auxv.c:476 msgid "Used FPU control word" msgstr "" -#: auxv.c:446 +#: auxv.c:477 msgid "Data cache block size" msgstr "" -#: auxv.c:447 +#: auxv.c:478 msgid "Instruction cache block size" msgstr "" -#: auxv.c:448 +#: auxv.c:479 msgid "Unified cache block size" msgstr "" -#: auxv.c:450 +#: auxv.c:481 msgid "String identifying base platform" msgstr "" -#: auxv.c:452 +#: auxv.c:483 msgid "Address of 16 random bytes" msgstr "" -#: auxv.c:453 fbsd-tdep.c:1598 +#: auxv.c:484 fbsd-tdep.c:1600 msgid "Extension of AT_HWCAP" msgstr "" -#: auxv.c:454 +#: auxv.c:485 msgid "File name of executable" msgstr "" -#: auxv.c:455 +#: auxv.c:486 msgid "Boolean, was exec setuid-like?" msgstr "" -#: auxv.c:456 +#: auxv.c:487 msgid "Special system info/entry points" msgstr "" -#: auxv.c:457 +#: auxv.c:488 msgid "System-supplied DSO's ELF header" msgstr "" -#: auxv.c:459 +#: auxv.c:490 msgid "L1 Instruction cache information" msgstr "" -#: auxv.c:461 +#: auxv.c:492 +msgid "L1 Instruction cache size" +msgstr "" + +#: auxv.c:493 +msgid "L1 Instruction cache geometry" +msgstr "" + +#: auxv.c:495 msgid "L1 Data cache information" msgstr "" -#: auxv.c:462 +#: auxv.c:496 +msgid "L1 Data cache size" +msgstr "" + +#: auxv.c:497 +msgid "L1 Data cache geometry" +msgstr "" + +#: auxv.c:499 msgid "L2 cache information" msgstr "" -#: auxv.c:463 +#: auxv.c:500 +msgid "L2 cache size" +msgstr "" + +#: auxv.c:501 +msgid "L2 cache geometry" +msgstr "" + +#: auxv.c:502 msgid "L3 cache information" msgstr "" -#: auxv.c:468 +#: auxv.c:503 +msgid "L3 cache size" +msgstr "" + +#: auxv.c:504 +msgid "L3 cache geometry" +msgstr "" + +#: auxv.c:505 +msgid "Minimum stack size for signal delivery" +msgstr "" + +#: auxv.c:511 msgid "Dynamic linker's ELF header" msgstr "" -#: auxv.c:469 +#: auxv.c:512 msgid "Dynamic linker's section headers" msgstr "" -#: auxv.c:471 +#: auxv.c:514 msgid "String giving name of dynamic linker" msgstr "" -#: auxv.c:473 +#: auxv.c:516 msgid "Large pagesize" msgstr "" -#: auxv.c:474 +#: auxv.c:517 msgid "Platform name string" msgstr "" -#: auxv.c:477 +#: auxv.c:520 msgid "Should flush icache?" msgstr "" -#: auxv.c:478 +#: auxv.c:521 msgid "CPU name string" msgstr "" -#: auxv.c:479 +#: auxv.c:522 msgid "COFF entry point address" msgstr "" -#: auxv.c:480 +#: auxv.c:523 msgid "COFF executable file descriptor" msgstr "" -#: auxv.c:483 +#: auxv.c:526 msgid "Canonicalized file name given to execve" msgstr "" -#: auxv.c:484 +#: auxv.c:527 msgid "String for name of MMU module" msgstr "" -#: auxv.c:485 +#: auxv.c:528 msgid "Dynamic linker's data segment address" msgstr "" -#: auxv.c:488 +#: auxv.c:531 msgid "AF_SUN_ flags passed from the kernel" msgstr "" -#: auxv.c:489 +#: auxv.c:532 msgid "Name of emulation binary for runtime linker" msgstr "" -#: auxv.c:491 +#: auxv.c:534 msgid "Name of brand library" msgstr "" -#: auxv.c:492 +#: auxv.c:535 msgid "Aux vector for brand modules 1" msgstr "" -#: auxv.c:494 +#: auxv.c:537 msgid "Aux vector for brand modules 2" msgstr "" -#: auxv.c:496 +#: auxv.c:539 msgid "Aux vector for brand modules 3" msgstr "" -#: auxv.c:498 +#: auxv.c:541 msgid "Machine-dependent CPU capability hints 2" msgstr "" -#: auxv.c:537 +#: auxv.c:580 msgid "The program has no auxiliary information now." msgstr "" -#: auxv.c:543 +#: auxv.c:586 msgid "No auxiliary vector found, or failed reading it." msgstr "" -#: auxv.c:545 +#: auxv.c:588 msgid "Auxiliary vector is empty." msgstr "" -#: auxv.c:553 +#: auxv.c:597 msgid "" "Display the inferior's auxiliary vector.\n" "This is information provided by the operating system at program startup." msgstr "" -#: avr-tdep.c:402 avr-tdep.c:420 i386-tdep.c:475 i386-tdep.c:3244 -#: i386-tdep.c:3445 i386-tdep.c:3582 i386-tdep.c:3664 s390-tdep.c:1288 -#: s390-tdep.c:1311 s390-tdep.c:1386 s390-tdep.c:1443 s390-tdep.c:1505 -#: s390-tdep.c:1551 sparc64-tdep.c:899 +#: avr-tdep.c:405 avr-tdep.c:423 i386-tdep.c:476 i386-tdep.c:3294 +#: i386-tdep.c:3495 i386-tdep.c:3632 i386-tdep.c:3714 s390-tdep.c:1290 +#: s390-tdep.c:1313 s390-tdep.c:1388 s390-tdep.c:1445 s390-tdep.c:1507 +#: s390-tdep.c:1553 sparc64-tdep.c:891 msgid "invalid regnum" msgstr "" -#: avr-tdep.c:663 +#: avr-tdep.c:666 #, possible-c-format msgid "Num pushes too large: %d\n" msgstr "" -#: avr-tdep.c:1564 +#: avr-tdep.c:1567 msgid "ERR: info io_registers NOT supported by current target\n" msgstr "" -#: avr-tdep.c:1574 +#: avr-tdep.c:1577 msgid "Error fetching number of io registers\n" msgstr "" -#: avr-tdep.c:1580 +#: avr-tdep.c:1583 #, possible-c-format msgid "" "Target has %u io registers:\n" "\n" msgstr "" -#: avr-tdep.c:1598 +#: avr-tdep.c:1601 #, possible-c-format msgid "ERR: error reading avr.io_reg:%x,%x\n" msgstr "" -#: avr-tdep.c:1632 +#: avr-tdep.c:1636 msgid "Query remote AVR target for I/O space register values." msgstr "" @@ -2786,7 +2844,7 @@ msgid "Couldn't resolve symbol `%s'." msgstr "" -#: ax-gdb.c:720 findvar.c:359 findvar.c:741 printcmd.c:1519 tracepoint.c:2629 +#: ax-gdb.c:720 findvar.c:367 findvar.c:749 printcmd.c:1515 tracepoint.c:2629 msgid "LOC_COMPUTED variable missing a method" msgstr "" @@ -2873,17 +2931,17 @@ msgid "non-aggregate type to gen_struct_elt_for_reference" msgstr "" -#: ax-gdb.c:1607 valops.c:3354 +#: ax-gdb.c:1607 valops.c:3313 msgid "pointers to bitfield members not allowed" msgstr "" #. FIXME we need a way to do "want_address" equivalent -#: ax-gdb.c:1611 valops.c:3405 +#: ax-gdb.c:1611 valops.c:3364 #, possible-c-format msgid "Cannot reference non-static field \"%s\"" msgstr "" -#: ax-gdb.c:1631 eval.c:997 valops.c:3574 +#: ax-gdb.c:1631 eval.c:996 valops.c:3533 #, possible-c-format msgid "No symbol \"%s\" in namespace \"%s\"." msgstr "" @@ -2952,7 +3010,7 @@ msgid "no `%s' found" msgstr "" -#: ax-gdb.c:2258 eval.c:1284 eval.c:3075 +#: ax-gdb.c:2258 eval.c:1296 eval.c:3085 #, possible-c-format msgid "There is no field named %s" msgstr "" @@ -2970,16 +3028,16 @@ msgid "cannot subscript requested type: cannot call user defined functions" msgstr "" -#: ax-gdb.c:2358 eval.c:2317 eval.c:2358 eval.c:2382 m2-lang.c:275 +#: ax-gdb.c:2358 eval.c:2329 eval.c:2370 eval.c:2394 m2-lang.c:121 #, possible-c-format msgid "cannot subscript something of type `%s'" msgstr "" -#: ax-gdb.c:2361 eval.c:2320 eval.c:2385 m2-lang.c:278 +#: ax-gdb.c:2361 eval.c:2332 eval.c:2397 m2-lang.c:124 msgid "cannot subscript requested type" msgstr "" -#: ax-gdb.c:2366 valarith.c:934 +#: ax-gdb.c:2366 valarith.c:1098 msgid "Argument to arithmetic operation not a number or boolean." msgstr "" @@ -2999,15 +3057,15 @@ msgid "Must start with a format string." msgstr "" -#: ax-gdb.c:2705 breakpoint.c:2228 printcmd.c:2550 +#: ax-gdb.c:2705 breakpoint.c:2249 printcmd.c:2495 msgid "Bad format string, non-terminated '\"'." msgstr "" -#: ax-gdb.c:2710 breakpoint.c:2233 printcmd.c:2555 +#: ax-gdb.c:2710 breakpoint.c:2254 printcmd.c:2500 msgid "Invalid argument syntax" msgstr "" -#: ax-gdb.c:2750 +#: ax-gdb.c:2751 msgid "" "Translate an expression into remote agent bytecode for tracing.\n" "Usage: maint agent [-at LOCATION,] EXPRESSION\n" @@ -3015,7 +3073,7 @@ "If not, generate remote agent bytecode for current frame pc address." msgstr "" -#: ax-gdb.c:2758 +#: ax-gdb.c:2759 msgid "" "Translate an expression into remote agent bytecode for evaluation.\n" "Usage: maint agent-eval [-at LOCATION,] EXPRESSION\n" @@ -3023,7 +3081,7 @@ "If not, generate remote agent bytecode for current frame pc address." msgstr "" -#: ax-gdb.c:2766 +#: ax-gdb.c:2767 msgid "" "Translate an expression into remote agent bytecode for evaluation and " "display the bytecodes." @@ -3098,7 +3156,7 @@ msgstr "" #: ax-general.c:372 darwin-nat-info.c:292 darwin-nat-info.c:585 -#: darwin-nat-info.c:787 darwin-nat.c:545 +#: darwin-nat-info.c:787 darwin-nat.c:522 msgid "\n" msgstr "" @@ -3251,40 +3309,57 @@ msgid "DW_OP_entry_value resolving cannot find DW_TAG_call_site %s in %s" msgstr "" -#: blockframe.c:411 +#: blockframe.c:415 msgid "Entry block not found in find_function_entry_range_from_pc" msgstr "" -#: break-catch-sig.c:196 +#: bpf-tdep.c:78 +#, possible-c-format +msgid "Debugging of BPF is %s.\n" +msgstr "" + +#: bpf-tdep.c:380 +msgid "Set BPF debugging." +msgstr "" + +#: bpf-tdep.c:381 +msgid "Show BPF debugging." +msgstr "" + +#: bpf-tdep.c:382 +msgid "Enables BPF specific debugging output." +msgstr "" + +#: break-catch-sig.c:195 #, possible-c-format msgid "Catchpoint %d (signal %s), " msgstr "" -#: break-catch-sig.c:264 +#: break-catch-sig.c:263 #, possible-c-format msgid "Catchpoint %d (signals" msgstr "" -#: break-catch-sig.c:266 +#: break-catch-sig.c:265 #, possible-c-format msgid "Catchpoint %d (signal" msgstr "" -#: break-catch-sig.c:277 +#: break-catch-sig.c:276 #, possible-c-format msgid "Catchpoint %d (any signal)" msgstr "" -#: break-catch-sig.c:279 +#: break-catch-sig.c:278 #, possible-c-format msgid "Catchpoint %d (standard signals)" msgstr "" -#: break-catch-sig.c:357 +#: break-catch-sig.c:356 msgid "'all' cannot be caught with other signals" msgstr "" -#: break-catch-sig.c:373 +#: break-catch-sig.c:372 #, possible-c-format msgid "Unknown signal name '%s'." msgstr "" @@ -3300,22 +3375,22 @@ "(if your system supports that), or signal numbers." msgstr "" -#: break-catch-syscall.c:296 +#: break-catch-syscall.c:295 #, possible-c-format msgid "Catchpoint %d (syscalls" msgstr "" -#: break-catch-syscall.c:298 +#: break-catch-syscall.c:297 #, possible-c-format msgid "Catchpoint %d (syscall" msgstr "" -#: break-catch-syscall.c:313 +#: break-catch-syscall.c:312 #, possible-c-format msgid "Catchpoint %d (any syscall)" msgstr "" -#: break-catch-syscall.c:408 +#: break-catch-syscall.c:407 #, possible-c-format msgid "Unknown syscall group '%s'." msgstr "" @@ -3323,12 +3398,12 @@ #. Here we have to issue an error instead of a warning, #. because GDB cannot do anything useful if there's no #. syscall number to be caught. -#: break-catch-syscall.c:418 +#: break-catch-syscall.c:417 #, possible-c-format msgid "Unknown syscall name '%s'." msgstr "" -#: break-catch-syscall.c:438 +#: break-catch-syscall.c:437 msgid "The feature 'catch syscall' is not supported on this architecture yet." msgstr "" @@ -3345,7 +3420,7 @@ #. block supposedly visible in this function. Let us #. first make sure that it is visible and if so, let #. us display its contents. -#: break-catch-throw.c:103 f-valprint.c:451 probe.c:808 +#: break-catch-throw.c:103 f-valprint.c:457 probe.c:806 msgid "No frame selected" msgstr "" @@ -3365,79 +3440,79 @@ msgid "error computing probe argument at c++ exception catchpoint" msgstr "" -#: break-catch-throw.c:300 +#: break-catch-throw.c:302 msgid "\tmatching: " msgstr "" -#: break-catch-throw.c:315 +#: break-catch-throw.c:317 msgid "Catchpoint" msgstr "" -#: break-catch-throw.c:318 +#: break-catch-throw.c:320 msgid "(throw)" msgstr "" -#: break-catch-throw.c:319 +#: break-catch-throw.c:321 msgid "(catch)" msgstr "" -#: break-catch-throw.c:319 +#: break-catch-throw.c:321 msgid "(rethrow)" msgstr "" -#: break-catch-throw.c:368 +#: break-catch-throw.c:370 msgid "invalid type-matching regexp" msgstr "" -#: break-catch-throw.c:445 +#: break-catch-throw.c:447 msgid "Unsupported or unknown exception event; cannot catch it" msgstr "" #. Add catch and tcatch sub-commands. -#: break-catch-throw.c:541 +#: break-catch-throw.c:544 msgid "Catch an exception, when caught." msgstr "" -#: break-catch-throw.c:547 +#: break-catch-throw.c:550 msgid "Catch an exception, when thrown." msgstr "" -#: break-catch-throw.c:553 +#: break-catch-throw.c:556 msgid "Catch an exception, when rethrown." msgstr "" -#: breakpoint.c:327 +#: breakpoint.c:331 #, possible-c-format msgid "Debugger's willingness to use watchpoint hardware is %s.\n" msgstr "" -#: breakpoint.c:343 +#: breakpoint.c:347 #, possible-c-format msgid "Debugger's behavior regarding pending breakpoints is %s.\n" msgstr "" -#: breakpoint.c:359 +#: breakpoint.c:363 #, possible-c-format msgid "Automatic usage of hardware breakpoints is %s.\n" msgstr "" -#: breakpoint.c:376 +#: breakpoint.c:380 #, possible-c-format msgid "Always inserted breakpoint mode is %s.\n" msgstr "" -#: breakpoint.c:712 +#: breakpoint.c:718 msgid "" "Target does not support breakpoint condition evaluation.\n" "Using host evaluation mode instead." msgstr "" -#: breakpoint.c:768 +#: breakpoint.c:774 #, possible-c-format msgid "Breakpoint condition evaluation mode is %s (currently %s).\n" msgstr "" -#: breakpoint.c:773 +#: breakpoint.c:779 #, possible-c-format msgid "Breakpoint condition evaluation mode is %s.\n" msgstr "" @@ -3447,482 +3522,478 @@ msgid "Breakpoint %d now unconditional.\n" msgstr "" -#: breakpoint.c:954 +#: breakpoint.c:967 msgid "breakpoint number" msgstr "" -#: breakpoint.c:959 +#: breakpoint.c:972 #, possible-c-format msgid "Bad breakpoint argument: '%s'" msgstr "" -#: breakpoint.c:972 guile/scm-breakpoint.c:947 python/py-breakpoint.c:1176 +#: breakpoint.c:985 guile/scm-breakpoint.c:947 python/py-breakpoint.c:1176 #, possible-c-format msgid "" "Only one stop condition allowed. There is currently a %s stop condition " "defined for this breakpoint." msgstr "" -#: breakpoint.c:984 breakpoint.c:13862 +#: breakpoint.c:997 breakpoint.c:13948 #, possible-c-format msgid "No breakpoint number %d." msgstr "" -#: breakpoint.c:999 +#: breakpoint.c:1012 msgid "The 'while-stepping' command can only be used for tracepoints" msgstr "" -#: breakpoint.c:1009 +#: breakpoint.c:1022 msgid "The 'collect' command can only be used for tracepoints" msgstr "" -#: breakpoint.c:1012 +#: breakpoint.c:1025 msgid "The 'teval' command can only be used for tracepoints" msgstr "" -#: breakpoint.c:1097 +#: breakpoint.c:1110 msgid "The 'while-stepping' command cannot be used for fast tracepoint" msgstr "" -#: breakpoint.c:1100 +#: breakpoint.c:1113 msgid "The 'while-stepping' command cannot be used for static tracepoint" msgstr "" -#: breakpoint.c:1104 +#: breakpoint.c:1117 msgid "The 'while-stepping' command can be used only once" msgstr "" -#: breakpoint.c:1121 +#: breakpoint.c:1134 msgid "The 'while-stepping' command cannot be nested" msgstr "" -#: breakpoint.c:1238 +#: breakpoint.c:1261 #, possible-c-format msgid "Type commands for breakpoint(s) %s, one per line." msgstr "" -#: breakpoint.c:1476 +#: breakpoint.c:1499 #, possible-c-format msgid "reading through apparently deleted breakpoint #%d?" msgstr "" -#: breakpoint.c:1758 breakpoint.c:1939 +#: breakpoint.c:1781 breakpoint.c:1962 msgid "" "Can't set read/access watchpoint when hardware watchpoints are disabled." msgstr "" -#: breakpoint.c:1918 +#: breakpoint.c:1941 msgid "Target does not support this type of hardware watchpoint." msgstr "" -#: breakpoint.c:1921 +#: breakpoint.c:1944 msgid "There are not enough available hardware resources for this watchpoint." msgstr "" -#: breakpoint.c:1942 +#: breakpoint.c:1965 msgid "Expression cannot be implemented with read/access watchpoint." msgstr "" -#: breakpoint.c:1963 +#: breakpoint.c:1986 #, possible-c-format msgid "" "Watchpoint %d deleted because the program has left the block\n" "in which its expression is valid.\n" msgstr "" -#: breakpoint.c:2219 +#: breakpoint.c:2240 msgid "No format string following the location" msgstr "" -#: breakpoint.c:2497 -msgid "" -"Note: automatically using hardware breakpoints for read-only addresses.\n" -msgstr "" - -#: breakpoint.c:2508 +#: breakpoint.c:2493 #, possible-c-format msgid "" "Cannot insert breakpoint %d.\n" "Cannot set software breakpoint at read-only address %s\n" msgstr "" -#: breakpoint.c:2547 +#: breakpoint.c:2534 #, possible-c-format msgid "hardware breakpoint %d not supported in overlay!" msgstr "" -#: breakpoint.c:2751 +#: breakpoint.c:2738 #, possible-c-format msgid "" "Error inserting catchpoint %d: Your system does not support this type\n" "of catchpoint." msgstr "" -#: breakpoint.c:2755 +#: breakpoint.c:2742 #, possible-c-format msgid "Error inserting catchpoint %d." msgstr "" -#: breakpoint.c:3037 +#: breakpoint.c:3028 #, possible-c-format msgid "" "Thread-specific breakpoint %d deleted - thread %s no longer in the thread " "list.\n" msgstr "" -#: breakpoint.c:3602 +#: breakpoint.c:3624 msgid "Cannot detach breakpoints of inferior_ptid" msgstr "" -#: breakpoint.c:3759 +#: breakpoint.c:3781 #, possible-c-format msgid "Could not remove hardware watchpoint %d." msgstr "" -#: breakpoint.c:4459 +#: breakpoint.c:4481 msgid "<unreadable>" msgstr "" -#: breakpoint.c:4537 +#: breakpoint.c:4559 msgid "print_bp_stop_message: unrecognized enum value" msgstr "" -#: breakpoint.c:4553 +#: breakpoint.c:4575 msgid "Stopped due to shared library event:\n" msgstr "" -#: breakpoint.c:4555 +#: breakpoint.c:4577 msgid "Stopped due to shared library event (no libraries added or removed)\n" msgstr "" -#: breakpoint.c:4565 +#: breakpoint.c:4587 msgid " Inferior unloaded " msgstr "" -#: breakpoint.c:4580 +#: breakpoint.c:4602 msgid " Inferior loaded " msgstr "" -#: breakpoint.c:4997 +#: breakpoint.c:5019 #, possible-c-format msgid "Watchpoint %d deleted.\n" msgstr "" -#: breakpoint.c:5233 +#: breakpoint.c:5255 msgid "Watchpoint condition cannot be tested in the current scope" msgstr "" -#: breakpoint.c:5627 +#: breakpoint.c:5652 msgid "bpstat_what: tracepoint encountered" msgstr "" -#: breakpoint.c:5648 +#: breakpoint.c:5673 #, possible-c-format msgid "bpstat_what: unhandled bptype %d" msgstr "" -#: breakpoint.c:5925 +#: breakpoint.c:5950 #, possible-c-format msgid "bptypes table does not describe type #%d." msgstr "" -#: breakpoint.c:6640 +#: breakpoint.c:6665 msgid "Note: breakpoint " msgstr "" #. if (others == ???) -#: breakpoint.c:6642 +#: breakpoint.c:6667 msgid "Note: breakpoints " msgstr "" -#: breakpoint.c:6660 +#: breakpoint.c:6685 #, possible-c-format msgid "also set at pc %ps.\n" msgstr "" -#: breakpoint.c:6854 +#: breakpoint.c:6885 #, possible-c-format msgid "Breakpoint %d address previously adjusted from %s to %s." msgstr "" -#: breakpoint.c:6857 +#: breakpoint.c:6888 #, possible-c-format msgid "Breakpoint address adjusted from %s to %s." msgstr "" -#: breakpoint.c:6955 +#: breakpoint.c:6986 msgid "unknown breakpoint type" msgstr "" -#: breakpoint.c:7539 +#: breakpoint.c:7570 #, possible-c-format msgid "Temporarily disabling breakpoints for unloaded shared library \"%s\"" msgstr "" -#: breakpoint.c:7734 +#: breakpoint.c:7765 #, possible-c-format msgid "Catchpoint %d (fork)" msgstr "" -#: breakpoint.c:7849 +#: breakpoint.c:7880 #, possible-c-format msgid "Catchpoint %d (vfork)" msgstr "" -#: breakpoint.c:8006 +#: breakpoint.c:8037 #, possible-c-format msgid "load of library matching %s" msgstr "" -#: breakpoint.c:8008 +#: breakpoint.c:8039 msgid "load of library" msgstr "" -#: breakpoint.c:8013 +#: breakpoint.c:8044 #, possible-c-format msgid "unload of library matching %s" msgstr "" -#: breakpoint.c:8015 +#: breakpoint.c:8046 msgid "unload of library" msgstr "" -#: breakpoint.c:8028 +#: breakpoint.c:8059 #, possible-c-format msgid "Catchpoint %d (%s)" msgstr "" -#: breakpoint.c:8068 stack.c:2385 symtab.c:4336 symtab.c:4728 symtab.c:4736 +#: breakpoint.c:8099 stack.c:2357 symtab.c:4372 symtab.c:4764 symtab.c:4772 msgid "Invalid regexp" msgstr "" -#: breakpoint.c:8264 +#: breakpoint.c:8295 #, possible-c-format msgid "Catchpoint %d (exec)" msgstr "" -#: breakpoint.c:8656 printcmd.c:2545 +#: breakpoint.c:8594 +msgid "" +"Note: automatically using hardware breakpoints for read-only addresses.\n" +msgstr "" + +#: breakpoint.c:8710 printcmd.c:2490 msgid "Bad format string, missing '\"'." msgstr "" -#: breakpoint.c:8663 +#: breakpoint.c:8717 msgid "No function supplied for dprintf call" msgstr "" -#: breakpoint.c:8681 +#: breakpoint.c:8735 msgid "Target cannot run dprintf commands, falling back to GDB printf" msgstr "" -#: breakpoint.c:8687 +#: breakpoint.c:8741 msgid "Invalid dprintf style." msgstr "" -#: breakpoint.c:8743 breakpoint.c:14243 +#: breakpoint.c:8797 breakpoint.c:14329 msgid "No hardware breakpoint support in the target." msgstr "" -#: breakpoint.c:8745 breakpoint.c:9790 breakpoint.c:14245 +#: breakpoint.c:8799 breakpoint.c:9844 breakpoint.c:14331 msgid "Hardware breakpoints used exceeds limit." msgstr "" -#: breakpoint.c:8798 breakpoint.c:8806 +#: breakpoint.c:8852 breakpoint.c:8860 #, possible-c-format msgid "Probed static tracepoint marker \"%s\"\n" msgstr "" -#: breakpoint.c:8811 +#: breakpoint.c:8865 msgid "Couldn't determine the static tracepoint marker to probe" msgstr "" -#: breakpoint.c:8831 +#: breakpoint.c:8885 #, possible-c-format msgid "Garbage '%s' follows condition" msgstr "" -#: breakpoint.c:8841 breakpoint.c:9570 +#: breakpoint.c:8895 breakpoint.c:9624 msgid "Format string required" msgstr "" -#: breakpoint.c:8844 +#: breakpoint.c:8898 #, possible-c-format msgid "Garbage '%s' at end of command" msgstr "" -#: breakpoint.c:8984 +#: breakpoint.c:9038 msgid "No default breakpoint address now." msgstr "" -#: breakpoint.c:9053 +#: breakpoint.c:9107 #, possible-c-format msgid "May not have a fast tracepoint at %s%s" msgstr "" -#: breakpoint.c:9109 +#: breakpoint.c:9163 msgid "Junk after thread keyword." msgstr "" -#: breakpoint.c:9120 +#: breakpoint.c:9174 msgid "Junk after task keyword." msgstr "" -#: breakpoint.c:9122 +#: breakpoint.c:9176 #, possible-c-format msgid "Unknown task %d." msgstr "" -#: breakpoint.c:9152 +#: breakpoint.c:9206 #, possible-c-format msgid "No known static tracepoint marker named %s" msgstr "" -#: breakpoint.c:9251 +#: breakpoint.c:9305 #, possible-c-format msgid "Make %s pending on future shared library load? " msgstr "" -#: breakpoint.c:9312 mi/mi-cmd-break.c:343 +#: breakpoint.c:9366 mi/mi-cmd-break.c:343 #, possible-c-format msgid "Garbage '%s' at end of location" msgstr "" -#: breakpoint.c:9361 +#: breakpoint.c:9415 msgid "" "Multiple breakpoints were set.\n" "Use the \"delete\" command to delete unwanted breakpoints." msgstr "" -#: breakpoint.c:9413 linespec.c:2204 +#: breakpoint.c:9467 linespec.c:2202 #, possible-c-format msgid "No line %d in file \"%s\"." msgstr "" -#: breakpoint.c:9485 +#: breakpoint.c:9539 msgid "" "Specify the type of breakpoint to set.\n" "Usage: stop in <function | address>\n" " stop at <line>\n" msgstr "" -#: breakpoint.c:9518 +#: breakpoint.c:9572 msgid "Usage: stop in <function | address>\n" msgstr "" -#: breakpoint.c:9550 +#: breakpoint.c:9604 msgid "Usage: stop at LINE\n" msgstr "" -#: breakpoint.c:9594 +#: breakpoint.c:9648 msgid "May only run agent-printf on the target" msgstr "" -#: breakpoint.c:9719 +#: breakpoint.c:9773 #, possible-c-format msgid "Hardware assisted ranged breakpoint %d from %s to %s." msgstr "" -#: breakpoint.c:9761 breakpoint.c:9834 +#: breakpoint.c:9815 breakpoint.c:9888 msgid "Could not find location of the end of the range." msgstr "" -#: breakpoint.c:9783 +#: breakpoint.c:9837 msgid "This target does not support hardware ranged breakpoints." msgstr "" -#: breakpoint.c:9794 +#: breakpoint.c:9848 msgid "No address range specified." msgstr "" -#: breakpoint.c:9802 +#: breakpoint.c:9856 msgid "Too few arguments." msgstr "" -#: breakpoint.c:9804 +#: breakpoint.c:9858 msgid "Could not find location of the beginning of the range." msgstr "" -#: breakpoint.c:9810 breakpoint.c:9839 +#: breakpoint.c:9864 breakpoint.c:9893 msgid "Cannot create a ranged breakpoint with multiple locations." msgstr "" -#: breakpoint.c:9845 +#: breakpoint.c:9899 msgid "Invalid address range, end precedes start." msgstr "" #. Length overflowed. -#: breakpoint.c:9850 +#: breakpoint.c:9904 msgid "Address range too large." msgstr "" -#: breakpoint.c:10224 breakpoint.c:10361 breakpoint.c:10417 breakpoint.c:10448 +#: breakpoint.c:10278 breakpoint.c:10415 breakpoint.c:10471 breakpoint.c:10501 msgid "Invalid hardware watchpoint type." msgstr "" -#: breakpoint.c:10255 +#: breakpoint.c:10309 msgid "Invalid watchpoint type." msgstr "" -#: breakpoint.c:10365 +#: breakpoint.c:10419 msgid "" "\n" "Check the underlying instruction at PC for the memory\n" "address and value which triggered this watchpoint.\n" msgstr "" -#: breakpoint.c:10536 +#: breakpoint.c:10589 msgid "You can specify only one thread." msgstr "" -#: breakpoint.c:10555 +#: breakpoint.c:10608 msgid "You can specify only one mask." msgstr "" -#: breakpoint.c:10598 +#: breakpoint.c:10651 #, possible-c-format msgid "Cannot watch constant value `%.*s'." msgstr "" -#: breakpoint.c:10627 +#: breakpoint.c:10680 msgid "This target does not support masked watchpoints." msgstr "" -#: breakpoint.c:10629 +#: breakpoint.c:10682 msgid "Invalid mask or memory region." msgstr "" -#: breakpoint.c:10652 +#: breakpoint.c:10705 msgid "Junk at end of command." msgstr "" -#: breakpoint.c:11020 +#: breakpoint.c:11068 msgid "Couldn't get information on specified line." msgstr "" -#: breakpoint.c:11174 +#: breakpoint.c:11222 msgid "unsupported or unknown fork kind; cannot catch it" msgstr "" -#: breakpoint.c:11251 breakpoint.c:11258 -msgid "Catch requires an event name." -msgstr "" - -#: breakpoint.c:11308 +#: breakpoint.c:11345 msgid "No source file specified." msgstr "" -#: breakpoint.c:11402 +#: breakpoint.c:11439 #, possible-c-format msgid "No breakpoint at %s." msgstr "" -#: breakpoint.c:11404 +#: breakpoint.c:11441 msgid "No breakpoint at this line." msgstr "" -#: breakpoint.c:11425 +#: breakpoint.c:11462 msgid "Deleted breakpoint " msgstr "" -#: breakpoint.c:11427 +#: breakpoint.c:11464 msgid "Deleted breakpoints " msgstr "" @@ -3934,237 +4005,237 @@ #. Note that at this point, old_loc->owner is still #. valid, as delete_breakpoint frees the breakpoint #. only after calling us. -#: breakpoint.c:11848 +#: breakpoint.c:11914 #, possible-c-format msgid "warning: Error removing breakpoint %d\n" msgstr "" -#: breakpoint.c:12082 +#: breakpoint.c:12159 #, possible-c-format msgid " (%s) pending." msgstr "" -#: breakpoint.c:12087 +#: breakpoint.c:12164 #, possible-c-format msgid " (%s,%s) pending." msgstr "" -#: breakpoint.c:12093 +#: breakpoint.c:12170 #, possible-c-format msgid " (%s %s) pending." msgstr "" -#: breakpoint.c:12440 +#: breakpoint.c:12517 msgid "Temporary breakpoint" msgstr "" -#: breakpoint.c:12442 +#: breakpoint.c:12519 msgid "Breakpoint" msgstr "" -#: breakpoint.c:12443 breakpoint.c:12756 breakpoint.c:12760 breakpoint.c:12764 +#: breakpoint.c:12520 breakpoint.c:12833 breakpoint.c:12837 breakpoint.c:12841 #, possible-c-format msgid " %d" msgstr "" -#: breakpoint.c:12445 +#: breakpoint.c:12522 msgid " at gnu-indirect-function resolver" msgstr "" -#: breakpoint.c:12448 +#: breakpoint.c:12525 #, possible-c-format msgid "Hardware assisted breakpoint %d" msgstr "" -#: breakpoint.c:12451 +#: breakpoint.c:12528 #, possible-c-format msgid "Dprintf %d" msgstr "" -#: breakpoint.c:12472 +#: breakpoint.c:12549 #, possible-c-format msgid "unhandled breakpoint type %d" msgstr "" #. Not sure how we will get here. #. GDB should not stop for these breakpoints. -#: breakpoint.c:12585 +#: breakpoint.c:12662 msgid "Thread Event Breakpoint: gdb should not stop!\n" msgstr "" #. By analogy with the thread event, GDB should not stop for these. -#: breakpoint.c:12590 +#: breakpoint.c:12667 msgid "Overlay Event Breakpoint: gdb should not stop!\n" msgstr "" #. These should never be enabled. -#: breakpoint.c:12595 +#: breakpoint.c:12672 msgid "Longjmp Master Breakpoint: gdb should not stop!\n" msgstr "" #. These should never be enabled. -#: breakpoint.c:12600 +#: breakpoint.c:12677 msgid "std::terminate Master Breakpoint: gdb should not stop!\n" msgstr "" #. These should never be enabled. -#: breakpoint.c:12606 +#: breakpoint.c:12683 msgid "Exception Master Breakpoint: gdb should not stop!\n" msgstr "" -#: breakpoint.c:12709 +#: breakpoint.c:12786 msgid "probe not found" msgstr "" -#: breakpoint.c:12755 +#: breakpoint.c:12832 msgid "Tracepoint" msgstr "" -#: breakpoint.c:12759 +#: breakpoint.c:12836 msgid "Fast tracepoint" msgstr "" -#: breakpoint.c:12763 +#: breakpoint.c:12840 msgid "Static tracepoint" msgstr "" -#: breakpoint.c:12768 breakpoint.c:12787 +#: breakpoint.c:12845 breakpoint.c:12864 #, possible-c-format msgid "unhandled tracepoint type %d" msgstr "" -#: breakpoint.c:13016 +#: breakpoint.c:13093 #, possible-c-format msgid "marker %s not found" msgstr "" -#: breakpoint.c:13180 +#: breakpoint.c:13257 msgid "Delete all breakpoints? " msgstr "" -#: breakpoint.c:13296 +#: breakpoint.c:13373 #, possible-c-format msgid "static tracepoint %d changed probed marker from %s to %s" msgstr "" -#: breakpoint.c:13327 +#: breakpoint.c:13404 #, possible-c-format msgid "marker for static tracepoint %d (%s) not found at previous line number" msgstr "" -#: breakpoint.c:13457 +#: breakpoint.c:13534 #, possible-c-format msgid "Could not reset ranged breakpoint %d: multiple locations found\n" msgstr "" -#: breakpoint.c:13497 +#: breakpoint.c:13574 #, possible-c-format msgid "failed to reevaluate condition for breakpoint %d: %s" msgstr "" -#: breakpoint.c:13838 +#: breakpoint.c:13924 #, possible-c-format msgid "Ignore count ignored for tracepoint %d." msgstr "" -#: breakpoint.c:13847 +#: breakpoint.c:13933 #, possible-c-format msgid "Will stop next time breakpoint %d is reached." msgstr "" -#: breakpoint.c:13851 +#: breakpoint.c:13937 #, possible-c-format msgid "Will ignore next crossing of breakpoint %d." msgstr "" -#: breakpoint.c:13854 +#: breakpoint.c:13940 #, possible-c-format msgid "Will ignore next %d crossings of breakpoint %d." msgstr "" -#: breakpoint.c:13874 +#: breakpoint.c:13960 msgid "a breakpoint number" msgstr "" -#: breakpoint.c:13878 +#: breakpoint.c:13964 #, possible-c-format msgid "bad breakpoint number: '%s'" msgstr "" -#: breakpoint.c:13880 +#: breakpoint.c:13966 msgid "Second argument (specified ignore-count) is missing." msgstr "" -#: breakpoint.c:13899 +#: breakpoint.c:13985 #, possible-c-format msgid "bad breakpoint number at or near '%d'" msgstr "" -#: breakpoint.c:13918 +#: breakpoint.c:14004 #, possible-c-format msgid "No breakpoint number %d.\n" msgstr "" -#: breakpoint.c:13931 +#: breakpoint.c:14017 msgid "one or more breakpoint numbers" msgstr "" -#: breakpoint.c:13957 +#: breakpoint.c:14043 #, possible-c-format msgid "Bad breakpoint number '%d'" msgstr "" -#: breakpoint.c:13960 breakpoint.c:13967 +#: breakpoint.c:14046 breakpoint.c:14053 #, possible-c-format msgid "Bad breakpoint location number '%d'" msgstr "" -#: breakpoint.c:13994 +#: breakpoint.c:14080 #, possible-c-format msgid "Negative breakpoint number '%.*s'" msgstr "" -#: breakpoint.c:13995 +#: breakpoint.c:14081 #, possible-c-format msgid "Negative breakpoint location number '%.*s'" msgstr "" -#: breakpoint.c:13999 +#: breakpoint.c:14085 #, possible-c-format msgid "Bad breakpoint number '%.*s'" msgstr "" -#: breakpoint.c:14000 +#: breakpoint.c:14086 #, possible-c-format msgid "Bad breakpoint location number '%.*s'" msgstr "" -#: breakpoint.c:14026 breakpoint.c:14076 +#: breakpoint.c:14112 breakpoint.c:14162 #, possible-c-format msgid "Bad breakpoint number at or near: '%s'" msgstr "" -#: breakpoint.c:14027 +#: breakpoint.c:14113 #, possible-c-format msgid "Bad breakpoint location number at or near: '%s'" msgstr "" -#: breakpoint.c:14038 +#: breakpoint.c:14124 #, possible-c-format msgid "Inverted breakpoint range at '%.*s'" msgstr "" -#: breakpoint.c:14039 +#: breakpoint.c:14125 #, possible-c-format msgid "Inverted breakpoint location range at '%.*s'" msgstr "" -#: breakpoint.c:14264 +#: breakpoint.c:14350 #, possible-c-format msgid "Cannot enable watchpoint %d: " msgstr "" -#: breakpoint.c:14329 +#: breakpoint.c:14415 msgid "hit count" msgstr "" @@ -4172,72 +4243,68 @@ #. address. Since there is no way to confirm that the address #. means the same thing as when the trace was started, warn the #. user. -#: breakpoint.c:14610 +#: breakpoint.c:14686 #, possible-c-format msgid "Uploaded tracepoint %d has no source location, using raw address" msgstr "" -#: breakpoint.c:14619 +#: breakpoint.c:14695 #, possible-c-format msgid "Uploaded tracepoint %d condition has no source form, ignoring it" msgstr "" -#: breakpoint.c:14669 +#: breakpoint.c:14745 #, possible-c-format msgid "Uploaded tracepoint %d actions have no source form, ignoring them" msgstr "" -#: breakpoint.c:14743 +#: breakpoint.c:14819 msgid "Delete all tracepoints? " msgstr "" -#: breakpoint.c:14766 +#: breakpoint.c:14842 #, possible-c-format msgid "Setting tracepoint %d's passcount to %d\n" msgstr "" -#: breakpoint.c:14783 +#: breakpoint.c:14859 msgid "passcount command requires an argument (count + optional TP num)" msgstr "" -#: breakpoint.c:14879 +#: breakpoint.c:14955 #, possible-c-format msgid "bad tracepoint number at or near '%s'\n" msgstr "" -#: breakpoint.c:14882 +#: breakpoint.c:14958 msgid "No previous tracepoint\n" msgstr "" -#: breakpoint.c:14922 +#: breakpoint.c:14998 msgid "Argument required (file name in which to save)" msgstr "" -#: breakpoint.c:14948 +#: breakpoint.c:15024 msgid "Nothing to save." msgstr "" -#: breakpoint.c:14957 +#: breakpoint.c:15033 #, possible-c-format msgid "Unable to open file '%s' for saving (%s)" msgstr "" -#: breakpoint.c:15025 +#: breakpoint.c:15101 #, possible-c-format msgid "Saved to file '%s'.\n" msgstr "" -#: breakpoint.c:15144 -msgid "\"save\" must be followed by the name of a save subcommand.\n" -msgstr "" - -#: breakpoint.c:15417 +#: breakpoint.c:15486 msgid "" "Set ignore-count of breakpoint number N to COUNT.\n" "Usage is `ignore N COUNT'." msgstr "" -#: breakpoint.c:15422 +#: breakpoint.c:15491 msgid "" "Set commands to be executed when the given breakpoints are hit.\n" "Give a space-separated breakpoint list as argument after \"commands\".\n" @@ -4250,14 +4317,14 @@ "then no output is printed when it is hit, except what the commands print." msgstr "" -#: breakpoint.c:15433 +#: breakpoint.c:15502 msgid "" "Specify breakpoint number N to break only if COND is true.\n" "Usage is `condition N COND', where N is an integer and COND is an\n" "expression to be evaluated whenever breakpoint N is reached." msgstr "" -#: breakpoint.c:15439 +#: breakpoint.c:15508 msgid "" "Set a temporary breakpoint.\n" "Like \"break\" except the breakpoint is only temporary,\n" @@ -4266,7 +4333,7 @@ "\n" msgstr "" -#: breakpoint.c:15448 +#: breakpoint.c:15517 msgid "" "Set a hardware assisted breakpoint.\n" "Like \"break\" except the breakpoint requires hardware support,\n" @@ -4274,7 +4341,7 @@ "\n" msgstr "" -#: breakpoint.c:15456 +#: breakpoint.c:15525 msgid "" "Set a temporary hardware assisted breakpoint.\n" "Like \"hbreak\" except the breakpoint is only temporary,\n" @@ -4282,7 +4349,7 @@ "\n" msgstr "" -#: breakpoint.c:15464 +#: breakpoint.c:15533 msgid "" "Enable all or some breakpoints.\n" "Usage: enable [BREAKPOINTNUM]...\n" @@ -4292,7 +4359,7 @@ "With a subcommand you can enable temporarily." msgstr "" -#: breakpoint.c:15475 +#: breakpoint.c:15544 msgid "" "Enable all or some breakpoints.\n" "Usage: enable breakpoints [BREAKPOINTNUM]...\n" @@ -4301,21 +4368,21 @@ "May be abbreviated to simply \"enable\"." msgstr "" -#: breakpoint.c:15483 +#: breakpoint.c:15552 msgid "" "Enable some breakpoints for one hit.\n" "Usage: enable breakpoints once BREAKPOINTNUM...\n" "If a breakpoint is hit while enabled in this fashion, it becomes disabled." msgstr "" -#: breakpoint.c:15489 +#: breakpoint.c:15558 msgid "" "Enable some breakpoints and delete when hit.\n" "Usage: enable breakpoints delete BREAKPOINTNUM...\n" "If a breakpoint is hit while enabled in this fashion, it is deleted." msgstr "" -#: breakpoint.c:15495 +#: breakpoint.c:15564 msgid "" "Enable some breakpoints for COUNT hits.\n" "Usage: enable breakpoints count COUNT BREAKPOINTNUM...\n" @@ -4323,21 +4390,21 @@ "the count is decremented; when it reaches zero, the breakpoint is disabled." msgstr "" -#: breakpoint.c:15502 +#: breakpoint.c:15571 msgid "" "Enable some breakpoints and delete when hit.\n" "Usage: enable delete BREAKPOINTNUM...\n" "If a breakpoint is hit while enabled in this fashion, it is deleted." msgstr "" -#: breakpoint.c:15508 +#: breakpoint.c:15577 msgid "" "Enable some breakpoints for one hit.\n" "Usage: enable once BREAKPOINTNUM...\n" "If a breakpoint is hit while enabled in this fashion, it becomes disabled." msgstr "" -#: breakpoint.c:15514 +#: breakpoint.c:15583 msgid "" "Enable some breakpoints for COUNT hits.\n" "Usage: enable count COUNT BREAKPOINTNUM...\n" @@ -4345,7 +4412,7 @@ "the count is decremented; when it reaches zero, the breakpoint is disabled." msgstr "" -#: breakpoint.c:15521 +#: breakpoint.c:15590 msgid "" "Disable all or some breakpoints.\n" "Usage: disable [BREAKPOINTNUM]...\n" @@ -4354,7 +4421,7 @@ "A disabled breakpoint is not forgotten, but has no effect until re-enabled." msgstr "" -#: breakpoint.c:15531 +#: breakpoint.c:15600 msgid "" "Disable all or some breakpoints.\n" "Usage: disable breakpoints [BREAKPOINTNUM]...\n" @@ -4364,7 +4431,7 @@ "This command may be abbreviated \"disable\"." msgstr "" -#: breakpoint.c:15540 +#: breakpoint.c:15609 msgid "" "Delete all or some breakpoints.\n" "Usage: delete [BREAKPOINTNUM]...\n" @@ -4374,7 +4441,7 @@ "Also a prefix command for deletion of other GDB objects." msgstr "" -#: breakpoint.c:15551 +#: breakpoint.c:15620 msgid "" "Delete all or some breakpoints or auto-display expressions.\n" "Usage: delete breakpoints [BREAKPOINTNUM]...\n" @@ -4383,7 +4450,7 @@ "This command may be abbreviated \"delete\"." msgstr "" -#: breakpoint.c:15559 +#: breakpoint.c:15628 msgid "" "Clear breakpoint at specified location.\n" "Argument may be a linespec, explicit, or address location as described " @@ -4395,23 +4462,23 @@ "\n" msgstr "" -#: breakpoint.c:15569 +#: breakpoint.c:15638 msgid "Set breakpoint at specified location.\n" msgstr "" -#: breakpoint.c:15581 +#: breakpoint.c:15650 msgid "Break in function/address or break at a line in the current file." msgstr "" -#: breakpoint.c:15585 +#: breakpoint.c:15654 msgid "Break in function or address." msgstr "" -#: breakpoint.c:15587 +#: breakpoint.c:15656 msgid "Break at a line in the current file." msgstr "" -#: breakpoint.c:15588 +#: breakpoint.c:15657 msgid "" "Status of user-settable breakpoints, or breakpoint number NUMBER.\n" "The \"Type\" column indicates one of:\n" @@ -4433,7 +4500,7 @@ "breakpoint set." msgstr "" -#: breakpoint.c:15605 +#: breakpoint.c:15674 msgid "" "Status of specified breakpoints (all user-settable breakpoints if no " "argument).\n" @@ -4456,7 +4523,7 @@ "breakpoint set." msgstr "" -#: breakpoint.c:15623 +#: breakpoint.c:15692 msgid "" "Status of all breakpoints, or breakpoint number NUMBER.\n" "The \"Type\" column indicates one of:\n" @@ -4482,43 +4549,43 @@ "breakpoint set." msgstr "" -#: breakpoint.c:15644 +#: breakpoint.c:15713 msgid "Set catchpoints to catch events." msgstr "" #. allow-unknown -#: breakpoint.c:15649 +#: breakpoint.c:15718 msgid "Set temporary catchpoints to catch events." msgstr "" #. allow-unknown -#: breakpoint.c:15654 +#: breakpoint.c:15723 msgid "Catch calls to fork." msgstr "" -#: breakpoint.c:15659 +#: breakpoint.c:15728 msgid "Catch calls to vfork." msgstr "" -#: breakpoint.c:15664 +#: breakpoint.c:15733 msgid "Catch calls to exec." msgstr "" -#: breakpoint.c:15669 +#: breakpoint.c:15738 msgid "" "Catch loads of shared libraries.\n" "Usage: catch load [REGEX]\n" "If REGEX is given, only stop for libraries matching the regular expression." msgstr "" -#: breakpoint.c:15676 +#: breakpoint.c:15745 msgid "" "Catch unloads of shared libraries.\n" "Usage: catch unload [REGEX]\n" "If REGEX is given, only stop for libraries matching the regular expression." msgstr "" -#: breakpoint.c:15684 +#: breakpoint.c:15753 msgid "" "Set a watchpoint for an expression.\n" "Usage: watch [-l|-location] EXPRESSION\n" @@ -4528,7 +4595,7 @@ "the memory to which it refers." msgstr "" -#: breakpoint.c:15693 +#: breakpoint.c:15762 msgid "" "Set a read watchpoint for an expression.\n" "Usage: rwatch [-l|-location] EXPRESSION\n" @@ -4538,7 +4605,7 @@ "the memory to which it refers." msgstr "" -#: breakpoint.c:15702 +#: breakpoint.c:15771 msgid "" "Set a watchpoint for an expression.\n" "Usage: awatch [-l|-location] EXPRESSION\n" @@ -4548,19 +4615,19 @@ "the memory to which it refers." msgstr "" -#: breakpoint.c:15711 +#: breakpoint.c:15780 msgid "Status of specified watchpoints (all watchpoints if no argument)." msgstr "" -#: breakpoint.c:15717 +#: breakpoint.c:15786 msgid "Set debugger's willingness to use watchpoint hardware." msgstr "" -#: breakpoint.c:15718 +#: breakpoint.c:15787 msgid "Show debugger's willingness to use watchpoint hardware." msgstr "" -#: breakpoint.c:15719 +#: breakpoint.c:15788 msgid "" "If zero, gdb will not use hardware for new watchpoints, even if\n" "such is available. (However, any hardware watchpoints that were\n" @@ -4569,19 +4636,19 @@ msgstr "" #. Tracepoint manipulation commands. -#: breakpoint.c:15732 +#: breakpoint.c:15801 msgid "" "Set a tracepoint at specified location.\n" "\n" msgstr "" -#: breakpoint.c:15744 +#: breakpoint.c:15813 msgid "" "Set a fast tracepoint at specified location.\n" "\n" msgstr "" -#: breakpoint.c:15751 +#: breakpoint.c:15820 msgid "" "Set a static tracepoint at location or marker.\n" "\n" @@ -4601,35 +4668,35 @@ "\n" msgstr "" -#: breakpoint.c:15773 +#: breakpoint.c:15842 msgid "" "Status of specified tracepoints (all tracepoints if no argument).\n" "Convenience variable \"$tpnum\" contains the number of the\n" "last tracepoint set." msgstr "" -#: breakpoint.c:15780 +#: breakpoint.c:15849 msgid "" "Delete specified tracepoints.\n" "Arguments are tracepoint numbers, separated by spaces.\n" "No argument means delete all tracepoints." msgstr "" -#: breakpoint.c:15787 +#: breakpoint.c:15856 msgid "" "Disable specified tracepoints.\n" "Arguments are tracepoint numbers, separated by spaces.\n" "No argument means disable all tracepoints." msgstr "" -#: breakpoint.c:15794 +#: breakpoint.c:15863 msgid "" "Enable specified tracepoints.\n" "Arguments are tracepoint numbers, separated by spaces.\n" "No argument means enable all tracepoints." msgstr "" -#: breakpoint.c:15801 +#: breakpoint.c:15870 msgid "" "Set the passcount for a tracepoint.\n" "The trace will end when the tracepoint has been passed 'count' times.\n" @@ -4637,12 +4704,12 @@ "if TPNUM is omitted, passcount refers to the last tracepoint defined." msgstr "" -#: breakpoint.c:15808 +#: breakpoint.c:15877 msgid "Save breakpoint definitions as a script." msgstr "" #. allow-unknown -#: breakpoint.c:15812 +#: breakpoint.c:15881 msgid "" "Save current breakpoint definitions as a script.\n" "This includes all types of breakpoints (breakpoints, watchpoints,\n" @@ -4650,29 +4717,29 @@ "session to restore them." msgstr "" -#: breakpoint.c:15820 +#: breakpoint.c:15889 msgid "" "Save current tracepoint definitions as a script.\n" "Use the 'source' command in another debug session to restore them." msgstr "" #. allow-unknown -#: breakpoint.c:15829 breakpoint.c:15835 +#: breakpoint.c:15898 breakpoint.c:15904 msgid "" "Breakpoint specific settings.\n" "Configure various breakpoint-specific variables such as\n" "pending breakpoint behavior." msgstr "" -#: breakpoint.c:15843 +#: breakpoint.c:15912 msgid "Set debugger's behavior regarding pending breakpoints." msgstr "" -#: breakpoint.c:15844 +#: breakpoint.c:15913 msgid "Show debugger's behavior regarding pending breakpoints." msgstr "" -#: breakpoint.c:15845 +#: breakpoint.c:15914 msgid "" "If on, an unrecognized breakpoint location will cause gdb to create a\n" "pending breakpoint. If off, an unrecognized breakpoint location results in\n" @@ -4680,15 +4747,15 @@ "user-query to see if a pending breakpoint should be created." msgstr "" -#: breakpoint.c:15858 +#: breakpoint.c:15927 msgid "Set automatic usage of hardware breakpoints." msgstr "" -#: breakpoint.c:15859 +#: breakpoint.c:15928 msgid "Show automatic usage of hardware breakpoints." msgstr "" -#: breakpoint.c:15860 +#: breakpoint.c:15929 msgid "" "If set, the debugger will automatically use hardware breakpoints for\n" "breakpoints set with \"break\" but falling in read-only memory. If not " @@ -4696,15 +4763,15 @@ "a warning will be emitted for such breakpoints." msgstr "" -#: breakpoint.c:15870 +#: breakpoint.c:15939 msgid "Set mode for inserting breakpoints." msgstr "" -#: breakpoint.c:15871 +#: breakpoint.c:15940 msgid "Show mode for inserting breakpoints." msgstr "" -#: breakpoint.c:15872 +#: breakpoint.c:15941 msgid "" "When this mode is on, breakpoints are inserted immediately as soon as\n" "they're created, kept inserted even when execution stops, and removed\n" @@ -4713,15 +4780,15 @@ "when execution stops." msgstr "" -#: breakpoint.c:15885 +#: breakpoint.c:15954 msgid "Set mode of breakpoint condition evaluation." msgstr "" -#: breakpoint.c:15886 +#: breakpoint.c:15955 msgid "Show mode of breakpoint condition evaluation." msgstr "" -#: breakpoint.c:15887 +#: breakpoint.c:15956 msgid "" "When this is set to \"host\", breakpoint conditions will be\n" "evaluated on the host's side by GDB. When it is set to \"target\",\n" @@ -4730,10 +4797,10 @@ "side.\n" "If this is set to \"auto\" (default), this will be automatically set to\n" "\"target\" if it supports condition evaluation, otherwise it will\n" -"be set to \"gdb\"" +"be set to \"host\"." msgstr "" -#: breakpoint.c:15900 +#: breakpoint.c:15969 msgid "" "Set a breakpoint for an address range.\n" "break-range START-LOCATION, END-LOCATION\n" @@ -4751,7 +4818,7 @@ "range (including START-LOCATION and END-LOCATION)." msgstr "" -#: breakpoint.c:15916 +#: breakpoint.c:15985 msgid "" "Set a dynamic printf at specified location.\n" "dprintf location,format string,arg1,arg2,...\n" @@ -4759,15 +4826,15 @@ "\n" msgstr "" -#: breakpoint.c:15924 +#: breakpoint.c:15993 msgid "Set the style of usage for dynamic printf." msgstr "" -#: breakpoint.c:15925 +#: breakpoint.c:15994 msgid "Show the style of usage for dynamic printf." msgstr "" -#: breakpoint.c:15926 +#: breakpoint.c:15995 msgid "" "This setting chooses how GDB will do a dynamic printf.\n" "If the value is \"gdb\", then the printing is done by GDB to its own\n" @@ -4777,37 +4844,37 @@ "output stream by setting dprintf-function and dprintf-channel." msgstr "" -#: breakpoint.c:15938 +#: breakpoint.c:16007 msgid "Set the function to use for dynamic printf." msgstr "" -#: breakpoint.c:15939 +#: breakpoint.c:16008 msgid "Show the function to use for dynamic printf." msgstr "" -#: breakpoint.c:15946 +#: breakpoint.c:16015 msgid "Set the channel to use for dynamic printf." msgstr "" -#: breakpoint.c:15947 +#: breakpoint.c:16016 msgid "Show the channel to use for dynamic printf." msgstr "" -#: breakpoint.c:15953 +#: breakpoint.c:16022 msgid "Set whether dprintf continues after GDB disconnects." msgstr "" -#: breakpoint.c:15954 +#: breakpoint.c:16023 msgid "Show whether dprintf continues after GDB disconnects." msgstr "" -#: breakpoint.c:15955 +#: breakpoint.c:16024 msgid "" "Use this to let dprintf commands continue to hit and produce output\n" "even if GDB disconnects or detaches from the target." msgstr "" -#: breakpoint.c:15962 +#: breakpoint.c:16031 #, possible-c-format msgid "" "Target agent only formatted printing, like the C \"printf\" function.\n" @@ -4816,11 +4883,11 @@ "This is useful for formatted output in user-defined commands." msgstr "" -#: bsd-kvm.c:70 +#: bsd-kvm.c:71 msgid "Kernel memory interface" msgstr "" -#: bsd-kvm.c:71 +#: bsd-kvm.c:72 msgid "" "Use a kernel virtual memory image as a target.\n" "Optionally specify the filename of a core dump." @@ -4906,7 +4973,7 @@ msgid "Overflow at instruction %u (offset = 0x%<PRIx64>, pc = 0x%<PRIx64>)." msgstr "" -#: btrace.c:1319 btrace.c:3003 +#: btrace.c:1319 btrace.c:3006 #, possible-c-format msgid "Failed to synchronize onto the Intel Processor Trace stream: %s." msgstr "" @@ -4918,12 +4985,12 @@ "%<PRIx64>): %s." msgstr "" -#: btrace.c:1456 btrace.c:1474 btrace.c:3044 +#: btrace.c:1456 btrace.c:1474 btrace.c:3047 #, possible-c-format msgid "Failed to configure the Intel Processor Trace decoder: %s." msgstr "" -#: btrace.c:1462 btrace.c:3050 +#: btrace.c:1462 btrace.c:3053 msgid "Failed to allocate the Intel Processor Trace decoder." msgstr "" @@ -4935,192 +5002,205 @@ msgid "Unexpected branch trace format." msgstr "" -#: btrace.c:1536 btrace.c:1794 gdbsupport/btrace-common.c:85 -#: gdbsupport/btrace-common.c:105 gdbsupport/btrace-common.c:189 -#: nat/linux-btrace.c:923 record-btrace.c:544 -msgid "Unkown branch trace format." +#: btrace.c:1536 btrace.c:1796 nat/linux-btrace.c:703 record-btrace.c:551 +msgid "Unknown branch trace format." +msgstr "" + +#: btrace.c:1595 +#, possible-c-format +msgid "Recording already enabled on thread %s (%s)." msgstr "" -#: btrace.c:1599 nat/linux-btrace.c:681 +#: btrace.c:1600 nat/linux-btrace.c:687 msgid "Intel Processor Trace support was disabled at compile time." msgstr "" -#: btrace.c:1735 +#: btrace.c:1609 +#, possible-c-format +msgid "Failed to enable recording on thread %s (%s)." +msgstr "" + +#: btrace.c:1655 +#, possible-c-format +msgid "Recording not enabled on thread %s (%s)." +msgstr "" + +#: btrace.c:1737 msgid "Error while trying to read delta trace. Falling back to a full read." msgstr "" -#: btrace.c:1849 +#: btrace.c:1851 msgid "instruction overflow" msgstr "" -#: btrace.c:1852 +#: btrace.c:1854 msgid "unknown instruction" msgstr "" -#: btrace.c:1864 +#: btrace.c:1866 msgid "trace decode cancelled" msgstr "" -#: btrace.c:1867 dwarf-index-cache.c:275 +#: btrace.c:1869 dwarf2/index-cache.c:267 msgid "disabled" msgstr "" -#: btrace.c:1870 +#: btrace.c:1872 msgid "overflow" msgstr "" -#: btrace.c:1951 +#: btrace.c:1954 msgid "Failed to read branch trace." msgstr "" -#: btrace.c:2016 +#: btrace.c:2019 #, possible-c-format msgid "Unsupported btrace version: \"%s\"" msgstr "" -#: btrace.c:2043 +#: btrace.c:2046 msgid "Btrace format error." msgstr "" -#: btrace.c:2062 +#: btrace.c:2065 msgid "Bad raw data size." msgstr "" -#: btrace.c:2078 +#: btrace.c:2081 msgid "Bad hex encoding." msgstr "" -#: btrace.c:2209 +#: btrace.c:2212 msgid "btrace" msgstr "" -#: btrace.c:2212 +#: btrace.c:2215 msgid "Error parsing branch trace." msgstr "" -#: btrace.c:2219 +#: btrace.c:2222 msgid "Cannot process branch trace. XML support was disabled at compile time." msgstr "" -#: btrace.c:2306 +#: btrace.c:2309 msgid "btrace-conf" msgstr "" -#: btrace.c:2309 +#: btrace.c:2312 msgid "Error parsing branch trace configuration." msgstr "" -#: btrace.c:2313 +#: btrace.c:2316 msgid "" "Cannot process the branch trace configuration. XML support was disabled at " "compile time." msgstr "" -#: btrace.c:2365 btrace.c:2382 btrace.c:2654 btrace.c:2667 record-btrace.c:260 -#: record-btrace.c:2044 record-btrace.c:2796 +#: btrace.c:2368 btrace.c:2385 btrace.c:2657 btrace.c:2670 record-btrace.c:262 +#: record-btrace.c:2067 record-btrace.c:2826 msgid "No trace." msgstr "" -#: btrace.c:2998 +#: btrace.c:3001 #, possible-c-format msgid "Error at trace offset 0x%<PRIx64>: %s." msgstr "" -#: btrace.c:3187 btrace.c:3206 record.c:439 record.c:459 +#: btrace.c:3190 btrace.c:3209 record.c:422 record.c:442 #, possible-c-format msgid "Expected positive number, got: %s." msgstr "" -#: btrace.c:3191 +#: btrace.c:3194 msgid "Number too big." msgstr "" -#: btrace.c:3220 record.c:409 record.c:421 record.c:472 +#: btrace.c:3223 record.c:392 record.c:404 record.c:455 #, possible-c-format msgid "Junk after argument: %s." msgstr "" -#: btrace.c:3233 btrace.c:3336 btrace.c:3355 btrace.c:3418 record-btrace.c:251 -#: record-btrace.c:561 record-btrace.c:1379 +#: btrace.c:3236 btrace.c:3339 btrace.c:3358 btrace.c:3376 record-btrace.c:253 +#: record-btrace.c:567 record-btrace.c:1397 msgid "No thread." msgstr "" -#: btrace.c:3241 +#: btrace.c:3244 msgid "No trace.\n" msgstr "" -#: btrace.c:3265 +#: btrace.c:3268 #, possible-c-format msgid "'%u' is out of range." msgstr "" -#: btrace.c:3333 btrace.c:3352 btrace.c:3415 record-btrace.c:2880 -#: record-btrace.c:2901 record-btrace.c:2922 +#: btrace.c:3336 btrace.c:3355 btrace.c:3373 record-btrace.c:2910 +#: record-btrace.c:2931 record-btrace.c:2952 msgid "Invalid argument." msgstr "" -#: btrace.c:3426 +#: btrace.c:3384 msgid "No btrace configuration." msgstr "" -#: btrace.c:3428 +#: btrace.c:3386 #, possible-c-format msgid "Format: %s.\n" msgstr "" -#: btrace.c:3437 btrace.c:3452 +#: btrace.c:3395 btrace.c:3410 #, possible-c-format msgid "Number of packets: %zu.\n" msgstr "" -#: btrace.c:3447 +#: btrace.c:3405 #, possible-c-format msgid "Version: %u.%u.%u%s.\n" msgstr "" -#: btrace.c:3468 +#: btrace.c:3426 #, possible-c-format msgid "Skip PAD packets is %s.\n" msgstr "" -#: btrace.c:3478 +#: btrace.c:3437 msgid "Info about branch tracing data." msgstr "" -#: btrace.c:3481 +#: btrace.c:3440 msgid "Branch tracing maintenance commands." msgstr "" -#: btrace.c:3485 +#: btrace.c:3444 msgid "Set branch tracing specific variables." msgstr "" -#: btrace.c:3490 +#: btrace.c:3449 msgid "Set Intel Processor Trace specific variables." msgstr "" -#: btrace.c:3495 +#: btrace.c:3455 msgid "Show branch tracing specific variables." msgstr "" -#: btrace.c:3500 +#: btrace.c:3460 msgid "Show Intel Processor Trace specific variables." msgstr "" -#: btrace.c:3506 +#: btrace.c:3467 msgid "Set whether PAD packets should be skipped in the btrace packet history." msgstr "" -#: btrace.c:3507 +#: btrace.c:3468 msgid "" "Show whether PAD packets should be skipped in the btrace packet history." msgstr "" -#: btrace.c:3508 +#: btrace.c:3469 msgid "When enabled, PAD packets are ignored in the btrace packet history." msgstr "" -#: btrace.c:3515 +#: btrace.c:3476 msgid "" "Print the raw branch tracing data.\n" "With no argument, print ten more packets after the previous ten-line print.\n" @@ -5132,13 +5212,13 @@ "first." msgstr "" -#: btrace.c:3527 +#: btrace.c:3488 msgid "" "Clears the branch tracing packet history.\n" "Discards the raw branch tracing data but not the execution history data." msgstr "" -#: btrace.c:3532 +#: btrace.c:3493 msgid "" "Clears the branch tracing data.\n" "Discards the raw branch tracing data and the execution history data.\n" @@ -5155,7 +5235,7 @@ msgid "File \"%s\" has a different build-id, file skipped" msgstr "" -#: build-id.c:79 symfile.c:1288 +#: build-id.c:79 symfile.c:1276 #, possible-c-format msgid " Trying %s..." msgstr "" @@ -5164,7 +5244,7 @@ msgid " no, unable to compute real path\n" msgstr "" -#: build-id.c:102 symfile.c:1297 +#: build-id.c:102 symfile.c:1285 msgid " no, unable to open.\n" msgstr "" @@ -5172,7 +5252,7 @@ msgid " no, build-id does not match.\n" msgstr "" -#: build-id.c:116 symfile.c:1371 +#: build-id.c:116 symfile.c:1359 msgid " yes!\n" msgstr "" @@ -5188,27 +5268,27 @@ msgid "\"%s\": separate debug info file has no debug info" msgstr "" -#: buildsym.c:320 +#: buildsym.c:321 #, possible-c-format msgid "block end address less than block start address in %s (patched it)" msgstr "" -#: buildsym.c:326 +#: buildsym.c:327 #, possible-c-format msgid "block end address %s less than block start address %s (patched it)" msgstr "" -#: buildsym.c:358 +#: buildsym.c:359 #, possible-c-format msgid "inner block not inside outer block in %s" msgstr "" -#: buildsym.c:363 +#: buildsym.c:364 #, possible-c-format msgid "inner block (%s-%s) not inside outer block (%s-%s)" msgstr "" -#: buildsym.c:489 +#: buildsym.c:490 #, possible-c-format msgid "block at %s out of order" msgstr "" @@ -5218,227 +5298,227 @@ #. same. FIXME: Find out why it is happening. This is not #. believed to happen in most cases (even for coffread.c); #. it used to be an abort(). -#: buildsym.c:850 +#: buildsym.c:830 msgid "Context stack not empty in end_symtab" msgstr "" -#: buildsym.c:1191 +#: buildsym.c:1184 msgid "Context stack not empty in augment_type_symtab" msgstr "" -#: buildsym.c:1193 +#: buildsym.c:1186 msgid "Blocks in a type symtab" msgstr "" -#: buildsym.c:1195 +#: buildsym.c:1188 msgid "Macro in a type symtab" msgstr "" -#: buildsym.c:1197 +#: buildsym.c:1190 msgid "Line numbers recorded in a type symtab" msgstr "" -#: c-exp.y:481 +#: c-exp.y:484 #, possible-c-format msgid "%s is not an ObjC Class" msgstr "" -#: c-exp.y:912 +#: c-exp.y:952 msgid "Undefined string concatenation." msgstr "" -#: c-exp.y:988 go-exp.y:539 +#: c-exp.y:1028 go-exp.y:539 #, possible-c-format msgid "@entry can be used only for function parameters, not for \"%s\"" msgstr "" -#: c-exp.y:1006 eval.c:1367 m2-exp.y:548 p-exp.y:656 +#: c-exp.y:1046 eval.c:1379 m2-exp.y:547 p-exp.y:657 #, possible-c-format msgid "No symbol \"%s\" in specified context." msgstr "" -#: c-exp.y:1022 c-exp.y:1038 d-exp.y:502 p-exp.y:671 +#: c-exp.y:1062 c-exp.y:1078 d-exp.y:502 p-exp.y:672 #, possible-c-format msgid "`%s' is not defined as an aggregate type." msgstr "" -#: c-exp.y:1057 +#: c-exp.y:1097 #, possible-c-format msgid "No type \"%s\" within class or namespace \"%s\"." msgstr "" -#: c-exp.y:1089 c-exp.y:1142 d-exp.y:455 d-exp.y:495 f-exp.y:508 go-exp.y:582 -#: m2-exp.y:592 p-exp.y:710 p-exp.y:769 printcmd.c:1472 valops.c:2700 +#: c-exp.y:1129 c-exp.y:1182 d-exp.y:455 d-exp.y:495 f-exp.y:508 go-exp.y:582 +#: m2-exp.y:591 p-exp.y:711 p-exp.y:770 printcmd.c:1468 valops.c:2660 #, possible-c-format msgid "No symbol \"%s\" in current context." msgstr "" -#: c-exp.y:1818 +#: c-exp.y:1882 msgid "parameter types following 'void'" msgstr "" -#: c-exp.y:1821 +#: c-exp.y:1885 msgid "'void' invalid as parameter type" msgstr "" -#: c-exp.y:1997 d-exp.y:819 go-exp.y:787 p-exp.y:970 +#: c-exp.y:2080 d-exp.y:819 go-exp.y:787 p-exp.y:971 msgid "Numeric constant too large." msgstr "" -#: c-exp.y:2099 +#: c-exp.y:2186 msgid "\\x escape without a following hex digit" msgstr "" -#: c-exp.y:2149 +#: c-exp.y:2236 #, possible-c-format msgid "\\%c escape without a following hex digit" msgstr "" -#: c-exp.y:2325 d-exp.y:930 go-exp.y:921 macroexp.c:410 p-exp.y:1373 +#: c-exp.y:2412 d-exp.y:930 go-exp.y:921 macroexp.c:410 p-exp.y:1374 msgid "Unterminated string in expression." msgstr "" -#: c-exp.y:2327 d-exp.y:932 go-exp.y:923 macroexp.c:353 p-exp.y:1204 +#: c-exp.y:2414 d-exp.y:932 go-exp.y:923 macroexp.c:353 p-exp.y:1205 msgid "Unmatched single quote." msgstr "" -#: c-exp.y:2696 d-exp.y:1176 f-exp.y:1215 go-exp.y:1148 m2-exp.y:918 -#: p-exp.y:1300 +#: c-exp.y:2795 d-exp.y:1176 f-exp.y:1215 go-exp.y:1148 m2-exp.y:917 +#: p-exp.y:1301 #, possible-c-format msgid "Invalid number \"%s\"." msgstr "" -#: c-exp.y:2769 d-exp.y:1228 go-exp.y:1200 p-exp.y:1191 +#: c-exp.y:2868 d-exp.y:1228 go-exp.y:1200 p-exp.y:1192 msgid "Empty character constant." msgstr "" -#: c-exp.y:2779 d-exp.y:1236 go-exp.y:1208 p-exp.y:1210 +#: c-exp.y:2878 d-exp.y:1236 go-exp.y:1208 p-exp.y:1211 msgid "Invalid character constant." msgstr "" #. We must have come across a bad character (e.g. ';'). -#: c-exp.y:2787 f-exp.y:1249 go-exp.y:1217 m2-exp.y:927 p-exp.y:1385 +#: c-exp.y:2886 f-exp.y:1249 go-exp.y:1217 m2-exp.y:926 p-exp.y:1386 #, possible-c-format msgid "Invalid character '%c' in expression." msgstr "" -#: c-exp.y:3109 +#: c-exp.y:3212 msgid "not reached" msgstr "" -#: c-exp.y:3378 d-exp.y:1647 f-exp.y:1369 go-exp.y:1582 m2-exp.y:1052 -#: p-exp.y:1749 +#: c-exp.y:3481 d-exp.y:1647 f-exp.y:1369 go-exp.y:1582 m2-exp.y:1051 +#: p-exp.y:1750 #, possible-c-format msgid "A %s in expression, near `%s'." msgstr "" -#: c-lang.c:65 c-lang.c:623 +#: c-lang.c:67 c-lang.c:625 msgid "unhandled c_string_type" msgstr "" -#: c-lang.c:328 eval.c:3093 valops.c:1425 valops.c:1440 valops.c:1489 +#: c-lang.c:330 eval.c:3103 valops.c:1425 valops.c:1440 valops.c:1489 msgid "Attempt to take address of value not located in memory." msgstr "" -#: c-lang.c:382 +#: c-lang.c:384 #, possible-c-format msgid "Trying to read string with inappropriate type `%s'." msgstr "" -#: c-lang.c:386 +#: c-lang.c:388 msgid "Trying to read string with inappropriate type." msgstr "" -#: c-lang.c:487 +#: c-lang.c:489 msgid "Malformed escape sequence" msgstr "" -#: c-lang.c:514 +#: c-lang.c:516 msgid "\\x used with no following hex digits." msgstr "" -#: c-lang.c:536 +#: c-lang.c:538 msgid "\\u used with no following hex digits" msgstr "" -#: c-lang.c:681 +#: c-lang.c:683 msgid "Could not convert character constant to target character set" msgstr "" #. To avoid memory corruption. -#: c-lang.c:707 eval.c:1483 +#: c-lang.c:709 eval.c:1495 msgid "Too many array elements" msgstr "" -#: c-typeprint.c:470 +#: c-typeprint.c:472 msgid "type not handled in c_type_print_varspec_prefix()" msgstr "" -#: c-typeprint.c:846 +#: c-typeprint.c:851 msgid "type not handled in c_type_print_varspec_suffix()" msgstr "" -#: c-typeprint.c:883 +#: c-typeprint.c:888 #, possible-c-format msgid "[with %s = " msgstr "" -#: c-typeprint.c:897 +#: c-typeprint.c:902 msgid "] " msgstr "" -#: c-typeprint.c:1118 c-typeprint.c:1628 +#: c-typeprint.c:1123 c-typeprint.c:1634 #, possible-c-format msgid "%p[<incomplete type>%p]\n" msgstr "" -#: c-typeprint.c:1122 c-typeprint.c:1632 +#: c-typeprint.c:1127 c-typeprint.c:1638 #, possible-c-format msgid "%p[<no data fields>%p]\n" msgstr "" -#: c-typeprint.c:1281 +#: c-typeprint.c:1286 #, possible-c-format msgid "%p[<undefined type>%p] %s;\n" msgstr "" -#: c-typeprint.c:1331 +#: c-typeprint.c:1336 #, possible-c-format msgid "<badly mangled name '%s'>" msgstr "" -#: c-typeprint.c:1470 m2-typeprint.c:85 +#: c-typeprint.c:1475 m2-typeprint.c:85 msgid "<type unknown>" msgstr "" -#: c-typeprint.c:1517 +#: c-typeprint.c:1522 msgid "<unnamed typedef>" msgstr "" -#: c-typeprint.c:1667 +#: c-typeprint.c:1673 msgid "struct <unknown>" msgstr "" #. This should not occur. -#: c-typeprint.c:1676 +#: c-typeprint.c:1682 msgid "<range type>" msgstr "" -#: c-typeprint.c:1699 +#: c-typeprint.c:1705 #, possible-c-format msgid "<invalid type code %d>" msgstr "" -#: c-valprint.c:253 valprint.c:441 +#: c-valprint.c:251 valprint.c:442 msgid "Could not determine the array high bound" msgstr "" -#: c-valprint.c:321 +#: c-valprint.c:308 #, possible-c-format msgid "%d vtable entries" msgstr "" -#: c-valprint.c:672 +#: c-valprint.c:602 msgid " [incomplete object]" msgstr "" @@ -5500,19 +5580,19 @@ msgstr "" #. No valid charset found, generate error here. -#: charset.c:992 -msgid "Unable to find a vaild charset for string conversions" +#: charset.c:993 +msgid "Unable to find a valid charset for string conversions" msgstr "" -#: charset.c:1035 +#: charset.c:1037 msgid "Set the host and target character sets." msgstr "" -#: charset.c:1036 +#: charset.c:1038 msgid "Show the host and target character sets." msgstr "" -#: charset.c:1037 +#: charset.c:1039 msgid "" "The `host character set' is the one used by the system GDB is running on.\n" "The `target character set' is the one used by the program being debugged.\n" @@ -5521,15 +5601,15 @@ "To see a list of the character sets GDB supports, type `set charset <TAB>'." msgstr "" -#: charset.c:1051 +#: charset.c:1053 msgid "Set the host character set." msgstr "" -#: charset.c:1052 +#: charset.c:1054 msgid "Show the host character set." msgstr "" -#: charset.c:1053 +#: charset.c:1055 msgid "" "The `host character set' is the one used by the system GDB is running on.\n" "You may only use supersets of ASCII for your host character set; GDB does\n" @@ -5538,15 +5618,15 @@ "<TAB>'." msgstr "" -#: charset.c:1063 +#: charset.c:1065 msgid "Set the target character set." msgstr "" -#: charset.c:1064 +#: charset.c:1066 msgid "Show the target character set." msgstr "" -#: charset.c:1065 +#: charset.c:1067 msgid "" "The `target character set' is the one used by the program being debugged.\n" "GDB translates characters and strings between the host and target\n" @@ -5555,15 +5635,15 @@ "charset'<TAB>" msgstr "" -#: charset.c:1076 +#: charset.c:1078 msgid "Set the target wide character set." msgstr "" -#: charset.c:1077 +#: charset.c:1079 msgid "Show the target wide character set." msgstr "" -#: charset.c:1078 +#: charset.c:1080 msgid "" "The `target wide character set' is the one used by the program being " "debugged.\n" @@ -5574,405 +5654,410 @@ "`set target-wide-charset'<TAB>" msgstr "" -#: cli/cli-utils.c:43 -msgid "History value must have integer type." +#: cli/cli-logging.c:33 +#, possible-c-format +msgid "The current logfile is \"%ps\".\n" msgstr "" -#: cli/cli-utils.c:55 +#: cli/cli-logging.c:43 #, possible-c-format -msgid "Convenience variable $%s does not have integer value." +msgid "" +"Currently logging to %s. Turn the logging off and on to make the new " +"setting effective." msgstr "" -#. There is no number here. (e.g. "cond a == b"). -#: cli/cli-utils.c:66 +#: cli/cli-logging.c:59 #, possible-c-format -msgid "Expected integer at: %s" +msgid "Whether logging overwrites or appends to the log file is %s.\n" msgstr "" -#: cli/cli-utils.c:72 +#: cli/cli-logging.c:79 #, possible-c-format -msgid "Trailing junk at: %s" +msgid "The logging output mode is %s.\n" msgstr "" -#: cli/cli-utils.c:103 -msgid "History value must have integer type.\n" +#: cli/cli-logging.c:106 +msgid "set logging" msgstr "" -#: cli/cli-utils.c:125 -msgid "Convenience variable must have integer value.\n" +#: cli/cli-logging.c:175 +msgid "Set logging options." msgstr "" -#: cli/cli-utils.c:188 -#, possible-c-format -msgid "Unrecognized option '%s' to %s command. Try \"help %s\"." +#: cli/cli-logging.c:178 +msgid "Show logging options." msgstr "" -#: cli/cli-utils.c:200 -#, possible-c-format -msgid "" -"%sIf NAMEREGEXP is provided, only prints the %s whose name\n" -"matches NAMEREGEXP.\n" -"If -t TYPEREGEXP is provided, only prints the %s whose type\n" -"matches TYPEREGEXP. Note that the matching is done with the type\n" -"printed by the 'whatis' command.\n" -"By default, the command might produce headers and/or messages indicating\n" -"why no %s can be printed.\n" -"The flag -q disables the production of these headers and messages.%s" +#: cli/cli-logging.c:180 +msgid "Set whether logging overwrites or appends to the log file." msgstr "" -#: cli/cli-utils.c:210 -msgid "" -"\n" -"By default, the command will include non-debug symbols in the output;\n" -"these can be excluded using the -n flag." +#: cli/cli-logging.c:181 +msgid "Show whether logging overwrites or appends to the log file." msgstr "" -#: cli/cli-utils.c:282 -msgid "inverted range" +#: cli/cli-logging.c:182 +msgid "If set, logging overrides the log file." msgstr "" -#: cli/cli-utils.c:298 cli/cli-utils.c:304 -msgid "negative value" +#: cli/cli-logging.c:187 +msgid "Set the logging output mode." msgstr "" -#: cli/cli-utils.c:356 cli/cli-utils.c:362 -msgid "Arguments must be numbers or '$' variables." +#: cli/cli-logging.c:188 +msgid "Show the logging output mode." msgstr "" -#: cli/cli-utils.c:439 -#, possible-c-format -msgid "%s: -c and -s are mutually exclusive" +#: cli/cli-logging.c:189 +msgid "" +"If redirect is off, output will go to both the screen and the log file.\n" +"If redirect is on, output will go only to the log file." msgstr "" -#: cli/cli-option.c:192 cli/cli-option.c:238 -#, possible-c-format -msgid "Unrecognized option at: %s" +#: cli/cli-logging.c:196 +msgid "Set the logging debug output mode." msgstr "" -#: cli/cli-option.c:222 -#, possible-c-format -msgid "Ambiguous option at: -%s" +#: cli/cli-logging.c:197 +msgid "Show the logging debug output mode." msgstr "" -#: cli/cli-option.c:316 -#, possible-c-format -msgid "Value given for `-%s' is not a boolean: %.*s" +#: cli/cli-logging.c:198 +msgid "" +"If debug redirect is off, debug will go to both the screen and the log " +"file.\n" +"If debug redirect is on, debug will go only to the log file." msgstr "" -#. Treat e.g., "maint test-options -string --" as if there -#. was no argument after "-string". -#: cli/cli-option.c:433 cli/cli-option.c:439 -#, possible-c-format -msgid "-%s requires an argument" +#: cli/cli-logging.c:204 +msgid "Set the current logfile." msgstr "" -#. Not yet. -#: cli/cli-option.c:448 -msgid "option type not supported" +#: cli/cli-logging.c:205 +msgid "Show the current logfile." msgstr "" -#: cli/cli-option.c:828 -msgid "option type not handled" +#: cli/cli-logging.c:206 +msgid "The logfile is used when directing GDB's output." msgstr "" -#: cli/cli-cmds.c:191 -#, possible-c-format -msgid "Argument required (%s)." +#: cli/cli-logging.c:212 +msgid "Enable logging." +msgstr "" + +#: cli/cli-logging.c:214 +msgid "Disable logging." msgstr "" -#: cli/cli-cmds.c:201 -msgid "\"info\" must be followed by the name of an info command.\n" +#: cli/cli-cmds.c:192 +#, possible-c-format +msgid "Argument required (%s)." msgstr "" -#: cli/cli-cmds.c:221 +#: cli/cli-cmds.c:213 msgid "Missing arguments." msgstr "" -#: cli/cli-cmds.c:227 +#: cli/cli-cmds.c:219 msgid "Missing setting before '--' delimiter" msgstr "" -#: cli/cli-cmds.c:238 +#: cli/cli-cmds.c:231 msgid "Cannot use this setting with the \"with\" command" msgstr "" -#: cli/cli-cmds.c:269 +#: cli/cli-cmds.c:262 #, possible-c-format msgid "Couldn't restore setting: %s" msgstr "" -#: cli/cli-cmds.c:352 +#: cli/cli-cmds.c:334 +msgid "ALIAS missing." +msgstr "" + +#: cli/cli-cmds.c:392 msgid "max-completions is zero, completion is disabled.\n" msgstr "" #. ARG_PREFIX and WORD are included in the output so that emacs #. will include the message in the output. -#: cli/cli-cmds.c:391 +#: cli/cli-cmds.c:431 #, possible-c-format msgid "%s%s %s\n" msgstr "" -#: cli/cli-cmds.c:434 cli/cli-script.c:1444 infcmd.c:1215 infcmd.c:1232 -#: infcmd.c:1328 infcmd.c:1943 infcmd.c:2484 symfile.c:1092 symfile.c:1251 -#: symfile.c:2355 symfile.c:2442 tracepoint.c:2064 tracepoint.c:2070 +#: cli/cli-cmds.c:474 cli/cli-script.c:1445 infcmd.c:1103 infcmd.c:1120 +#: infcmd.c:1220 infcmd.c:1835 infcmd.c:2370 symfile.c:1081 symfile.c:1237 +#: symfile.c:2338 symfile.c:2425 tracepoint.c:2064 tracepoint.c:2070 msgid "Not confirmed." msgstr "" -#: cli/cli-cmds.c:445 +#: cli/cli-cmds.c:485 #, possible-c-format msgid "The \"pwd\" command does not take an argument: %s" msgstr "" -#: cli/cli-cmds.c:450 +#: cli/cli-cmds.c:490 #, possible-c-format msgid "Error finding name of working directory: %s" msgstr "" -#: cli/cli-cmds.c:454 +#: cli/cli-cmds.c:494 #, possible-c-format msgid "" "Working directory %ps\n" " (canonically %ps).\n" msgstr "" -#: cli/cli-cmds.c:459 +#: cli/cli-cmds.c:499 #, possible-c-format msgid "Working directory %ps.\n" msgstr "" -#: cli/cli-cmds.c:575 +#: cli/cli-cmds.c:615 #, possible-c-format msgid "Script filename extension recognition is \"%s\".\n" msgstr "" -#: cli/cli-cmds.c:673 +#: cli/cli-cmds.c:713 msgid "source command requires file name of file to source." msgstr "" -#: cli/cli-cmds.c:806 +#: cli/cli-cmds.c:858 #, possible-c-format msgid "unexpected shell command exit status %d" msgstr "" -#: cli/cli-cmds.c:857 +#: cli/cli-cmds.c:909 msgid "Fork failed" msgstr "" -#: cli/cli-cmds.c:891 +#: cli/cli-cmds.c:943 msgid "No default source file yet." msgstr "" -#: cli/cli-cmds.c:915 +#: cli/cli-cmds.c:967 msgid "Specified line is ambiguous:\n" msgstr "" -#: cli/cli-cmds.c:922 cli/cli-cmds.c:1247 +#: cli/cli-cmds.c:974 cli/cli-cmds.c:1299 msgid "Junk at end of line specification." msgstr "" -#: cli/cli-cmds.c:933 cli/cli-cmds.c:1265 +#: cli/cli-cmds.c:985 cli/cli-cmds.c:1317 #, possible-c-format msgid "No source file for address %s." msgstr "" -#: cli/cli-cmds.c:955 cli/cli-cmds.c:1286 +#: cli/cli-cmds.c:1007 cli/cli-cmds.c:1338 #, possible-c-format msgid "No line number known for %s." msgstr "" -#: cli/cli-cmds.c:989 +#: cli/cli-cmds.c:1041 msgid "" "Indicates to use the specified delimiter string to separate\n" "COMMAND from SHELL_COMMAND, in alternative to |. This is useful in\n" "case COMMAND contains a | character." msgstr "" -#: cli/cli-cmds.c:1022 +#: cli/cli-cmds.c:1074 msgid "Missing COMMAND" msgstr "" -#: cli/cli-cmds.c:1027 +#: cli/cli-cmds.c:1079 msgid "Missing delimiter before SHELL_COMMAND" msgstr "" -#: cli/cli-cmds.c:1038 +#: cli/cli-cmds.c:1090 msgid "Missing SHELL_COMMAND" msgstr "" -#: cli/cli-cmds.c:1043 +#: cli/cli-cmds.c:1095 #, possible-c-format msgid "Error launching \"%s\"" msgstr "" -#: cli/cli-cmds.c:1060 +#: cli/cli-cmds.c:1112 #, possible-c-format msgid "shell command \"%s\" failed: %s" msgstr "" -#: cli/cli-cmds.c:1148 +#: cli/cli-cmds.c:1200 #, possible-c-format msgid "Already at the start of %s." msgstr "" -#: cli/cli-cmds.c:1207 +#: cli/cli-cmds.c:1259 #, possible-c-format msgid "Specified first line '%.*s' is ambiguous:\n" msgstr "" -#: cli/cli-cmds.c:1238 +#: cli/cli-cmds.c:1290 #, possible-c-format msgid "Specified last line '%s' is ambiguous:\n" msgstr "" -#: cli/cli-cmds.c:1251 +#: cli/cli-cmds.c:1303 msgid "Specified first and last lines are in different files." msgstr "" -#: cli/cli-cmds.c:1253 +#: cli/cli-cmds.c:1305 msgid "Two empty args do not say what lines to list." msgstr "" -#: cli/cli-cmds.c:1295 cli/cli-cmds.c:1303 +#: cli/cli-cmds.c:1347 cli/cli-cmds.c:1355 msgid "No default source file yet. Do \"help list\"." msgstr "" -#: cli/cli-cmds.c:1362 +#: cli/cli-cmds.c:1416 #, possible-c-format msgid "Address range %s to %s:\n" msgstr "" -#: cli/cli-cmds.c:1391 dwarf2loc.c:574 dwarf2loc.c:2032 dwarf2loc.c:2068 -#: python/py-symbol.c:393 python/py-symbol.c:501 stack.c:2525 stack.c:2636 +#: cli/cli-cmds.c:1439 dwarf2/loc.c:645 dwarf2/loc.c:2127 dwarf2/loc.c:2163 +#: python/py-symbol.c:393 python/py-symbol.c:501 stack.c:2497 stack.c:2608 #: valops.c:1291 msgid "No frame selected." msgstr "" -#: cli/cli-cmds.c:1395 +#: cli/cli-cmds.c:1443 msgid "No function contains program counter for selected frame." msgstr "" -#: cli/cli-cmds.c:1452 record.c:494 record.c:632 +#: cli/cli-cmds.c:1501 record.c:477 record.c:615 msgid "Missing modifier." msgstr "" -#: cli/cli-cmds.c:1468 +#: cli/cli-cmds.c:1517 msgid "Invalid disassembly modifier." msgstr "" -#: cli/cli-cmds.c:1477 +#: cli/cli-cmds.c:1526 msgid "Cannot specify both /m and /s." msgstr "" -#: cli/cli-cmds.c:1493 +#: cli/cli-cmds.c:1542 msgid "No function contains specified address." msgstr "" -#: cli/cli-cmds.c:1547 +#: cli/cli-cmds.c:1602 msgid "Not a user command." msgstr "" -#: cli/cli-cmds.c:1569 +#: cli/cli-cmds.c:1624 msgid "REGEXP string is empty" msgstr "" -#: cli/cli-cmds.c:1572 +#: cli/cli-cmds.c:1627 msgid "Error in regular expression" msgstr "" -#: cli/cli-cmds.c:1629 -msgid "Usage: alias [-a] [--] ALIAS = COMMAND" +#: cli/cli-cmds.c:1645 +msgid "" +"Specify that ALIAS is an abbreviation of COMMAND.\n" +"Abbreviations are not used in command completion." +msgstr "" + +#: cli/cli-cmds.c:1743 +#, possible-c-format +msgid "Invalid command to alias to: %s" +msgstr "" + +#: cli/cli-cmds.c:1746 +msgid "Cannot define an alias of an alias that has default args" +msgstr "" + +#: cli/cli-cmds.c:1754 +msgid "Usage: alias [-a] [--] ALIAS = COMMAND [DEFAULT-ARGS...]" msgstr "" -#: cli/cli-cmds.c:1677 +#: cli/cli-cmds.c:1801 #, possible-c-format msgid "Invalid command name: %s" msgstr "" -#: cli/cli-cmds.c:1679 +#: cli/cli-cmds.c:1803 #, possible-c-format msgid "Invalid command element name: %s" msgstr "" -#: cli/cli-cmds.c:1693 +#: cli/cli-cmds.c:1834 #, possible-c-format -msgid "Invalid command to alias to: %s" +msgid "Alias already exists: %s" msgstr "" -#: cli/cli-cmds.c:1699 +#: cli/cli-cmds.c:1840 #, possible-c-format -msgid "Alias already exists: %s" +msgid "Alias %s is the name of an existing command" msgstr "" -#: cli/cli-cmds.c:1722 +#: cli/cli-cmds.c:1868 msgid "Mismatched command length between ALIAS and COMMAND." msgstr "" -#: cli/cli-cmds.c:1741 +#: cli/cli-cmds.c:1887 msgid "ALIAS and COMMAND prefixes do not match." msgstr "" -#: cli/cli-cmds.c:1762 +#: cli/cli-cmds.c:1918 #, possible-c-format msgid "file: \"%s\", line number: %d, symbol: \"%s\"\n" msgstr "" -#: cli/cli-cmds.c:1850 -msgid "\"set debug\" must be followed by the name of a debug subcommand.\n" -msgstr "" - -#: cli/cli-cmds.c:1874 +#: cli/cli-cmds.c:2016 #, possible-c-format msgid "Verbose printing of informational messages is %s.\n" msgstr "" -#: cli/cli-cmds.c:1877 +#: cli/cli-cmds.c:2019 #, possible-c-format msgid "Verbosity is %s.\n" msgstr "" -#: cli/cli-cmds.c:1884 +#: cli/cli-cmds.c:2026 #, possible-c-format msgid "History expansion on command input is %s.\n" msgstr "" -#: cli/cli-cmds.c:1892 +#: cli/cli-cmds.c:2034 #, possible-c-format msgid "Debugging of remote protocol is %s.\n" msgstr "" -#: cli/cli-cmds.c:1901 +#: cli/cli-cmds.c:2043 #, possible-c-format msgid "Timeout limit to wait for target to respond is %s.\n" msgstr "" -#: cli/cli-cmds.c:1910 +#: cli/cli-cmds.c:2052 #, possible-c-format msgid "The max call depth for user-defined commands is %s.\n" msgstr "" -#: cli/cli-cmds.c:1924 +#: cli/cli-cmds.c:2066 #, possible-c-format msgid "You must provide an argument to %s" msgstr "" -#: cli/cli-cmds.c:1926 +#: cli/cli-cmds.c:2068 #, possible-c-format msgid "You can only provide one argument to %s" msgstr "" -#: cli/cli-cmds.c:1932 +#: cli/cli-cmds.c:2074 #, possible-c-format msgid "First argument of %s must be a string." msgstr "" -#: cli/cli-cmds.c:1938 +#: cli/cli-cmds.c:2080 #, possible-c-format msgid "First argument of %s must be a valid setting of the 'show' command." msgstr "" #. Define the classes of commands. #. They will appear in the help list in alphabetical order. -#: cli/cli-cmds.c:2116 +#: cli/cli-cmds.c:2259 msgid "" "Maintenance commands.\n" "Some gdb commands are provided just for use by gdb maintainers.\n" @@ -5980,42 +6065,42 @@ "well documented as user commands." msgstr "" -#: cli/cli-cmds.c:2122 +#: cli/cli-cmds.c:2265 msgid "Obscure features." msgstr "" -#: cli/cli-cmds.c:2124 -msgid "Aliases of other commands." +#: cli/cli-cmds.c:2267 +msgid "User-defined aliases of other commands." msgstr "" -#: cli/cli-cmds.c:2125 +#: cli/cli-cmds.c:2268 msgid "" "User-defined commands.\n" "The commands in this class are those defined by the user.\n" "Use the \"define\" command to define a command." msgstr "" -#: cli/cli-cmds.c:2129 +#: cli/cli-cmds.c:2272 msgid "Support facilities." msgstr "" -#: cli/cli-cmds.c:2131 +#: cli/cli-cmds.c:2274 msgid "Status inquiries." msgstr "" -#: cli/cli-cmds.c:2132 +#: cli/cli-cmds.c:2275 msgid "Specifying and examining files." msgstr "" -#: cli/cli-cmds.c:2135 +#: cli/cli-cmds.c:2278 msgid "Making program stop at certain points." msgstr "" -#: cli/cli-cmds.c:2136 +#: cli/cli-cmds.c:2279 msgid "Examining data." msgstr "" -#: cli/cli-cmds.c:2137 +#: cli/cli-cmds.c:2280 msgid "" "Examining the stack.\n" "The stack is made up of stack frames. Gdb assigns numbers to stack frames\n" @@ -6027,18 +6112,25 @@ "The commands below can be used to select other frames by number or address." msgstr "" -#: cli/cli-cmds.c:2146 +#: cli/cli-cmds.c:2291 +msgid "" +"TUI is the GDB text based interface.\n" +"In TUI mode, GDB can display several text windows showing\n" +"the source file, the processor registers, the program disassembly, ..." +msgstr "" + +#: cli/cli-cmds.c:2295 msgid "Running the program." msgstr "" #. Define general commands. -#: cli/cli-cmds.c:2150 +#: cli/cli-cmds.c:2299 msgid "" "Print working directory.\n" "This is used for your program as well." msgstr "" -#: cli/cli-cmds.c:2154 +#: cli/cli-cmds.c:2303 msgid "" "Set working directory to DIR for debugger.\n" "The debugger's current working directory specifies where scripts and other\n" @@ -6048,7 +6140,7 @@ "way is to use the \"set cwd\" command." msgstr "" -#: cli/cli-cmds.c:2162 +#: cli/cli-cmds.c:2311 msgid "" "Print a constant string. Give string as argument.\n" "C escape sequences may be used in the argument.\n" @@ -6059,15 +6151,15 @@ "to be printed or after trailing whitespace." msgstr "" -#: cli/cli-cmds.c:2172 +#: cli/cli-cmds.c:2321 msgid "Set mode for script filename extension recognition." msgstr "" -#: cli/cli-cmds.c:2173 +#: cli/cli-cmds.c:2322 msgid "Show mode for script filename extension recognition." msgstr "" -#: cli/cli-cmds.c:2174 +#: cli/cli-cmds.c:2323 msgid "" "off == no filename extension recognition (all sourced files are GDB " "scripts)\n" @@ -6077,7 +6169,7 @@ "supported" msgstr "" -#: cli/cli-cmds.c:2184 +#: cli/cli-cmds.c:2333 msgid "" "Exit gdb.\n" "Usage: quit [EXPR]\n" @@ -6085,56 +6177,51 @@ "used as GDB's exit code. The default is zero." msgstr "" -#: cli/cli-cmds.c:2190 +#: cli/cli-cmds.c:2339 msgid "Print list of commands." msgstr "" -#: cli/cli-cmds.c:2195 top.c:1939 +#: cli/cli-cmds.c:2344 top.c:1996 msgid "Set verbosity." msgstr "" -#: cli/cli-cmds.c:2196 top.c:1940 +#: cli/cli-cmds.c:2345 top.c:1997 msgid "Show verbosity." msgstr "" -#: cli/cli-cmds.c:2203 +#: cli/cli-cmds.c:2351 msgid "Generic command for setting command history parameters." msgstr "" -#: cli/cli-cmds.c:2206 +#: cli/cli-cmds.c:2354 msgid "Generic command for showing command history parameters." msgstr "" -#: cli/cli-cmds.c:2209 +#: cli/cli-cmds.c:2358 msgid "Set history expansion on command input." msgstr "" -#: cli/cli-cmds.c:2210 +#: cli/cli-cmds.c:2359 msgid "Show history expansion on command input." msgstr "" -#: cli/cli-cmds.c:2211 +#: cli/cli-cmds.c:2360 msgid "Without an argument, history expansion is enabled." msgstr "" -#: cli/cli-cmds.c:2217 +#: cli/cli-cmds.c:2366 msgid "Generic command for showing things about the program being debugged." msgstr "" -#: cli/cli-cmds.c:2224 +#: cli/cli-cmds.c:2373 msgid "List the completions for the rest of the line as a command." msgstr "" -#: cli/cli-cmds.c:2226 +#: cli/cli-cmds.c:2375 msgid "Generic command for showing things about the debugger." msgstr "" -#. Another way to get at the same thing. -#: cli/cli-cmds.c:2230 -msgid "Show all GDB settings." -msgstr "" - -#: cli/cli-cmds.c:2232 +#: cli/cli-cmds.c:2381 msgid "" "Temporarily set SETTING to VALUE, run COMMAND, and restore SETTING.\n" "Usage: with SETTING [VALUE] [-- COMMAND]\n" @@ -6151,7 +6238,7 @@ " w la p -- w p el u -- p obj" msgstr "" -#: cli/cli-cmds.c:2249 +#: cli/cli-cmds.c:2398 msgid "" "$_gdb_setting_str - returns the value of a GDB setting as a string.\n" "Usage: $_gdb_setting_str (setting)\n" @@ -6162,7 +6249,7 @@ "as \"unlimited\"." msgstr "" -#: cli/cli-cmds.c:2259 +#: cli/cli-cmds.c:2408 msgid "" "$_gdb_setting - returns the value of a GDB setting.\n" "Usage: $_gdb_setting (setting)\n" @@ -6172,7 +6259,7 @@ "as 0 or -1 depending on the setting." msgstr "" -#: cli/cli-cmds.c:2268 +#: cli/cli-cmds.c:2417 msgid "" "$_gdb_maint_setting_str - returns the value of a GDB maintenance setting as " "a string.\n" @@ -6184,7 +6271,7 @@ "as \"unlimited\"." msgstr "" -#: cli/cli-cmds.c:2278 +#: cli/cli-cmds.c:2427 msgid "" "$_gdb_maint_setting - returns the value of a GDB maintenance setting.\n" "Usage: $_gdb_maint_setting (setting)\n" @@ -6194,64 +6281,64 @@ "as 0 or -1 depending on the setting." msgstr "" -#: cli/cli-cmds.c:2287 +#: cli/cli-cmds.c:2436 msgid "" "Show the history of commands you typed.\n" "You can supply a command number to start with, or a `+' to start after\n" "the previous command number shown." msgstr "" -#: cli/cli-cmds.c:2294 +#: cli/cli-cmds.c:2443 msgid "Show what version of GDB this is." msgstr "" -#: cli/cli-cmds.c:2297 +#: cli/cli-cmds.c:2446 msgid "Show how GDB was configured at build time." msgstr "" -#: cli/cli-cmds.c:2299 +#: cli/cli-cmds.c:2448 msgid "Set debugging of remote protocol." msgstr "" -#: cli/cli-cmds.c:2300 +#: cli/cli-cmds.c:2449 msgid "Show debugging of remote protocol." msgstr "" -#: cli/cli-cmds.c:2301 +#: cli/cli-cmds.c:2450 msgid "" "When enabled, each packet sent or received with the remote target\n" "is displayed." msgstr "" -#: cli/cli-cmds.c:2309 +#: cli/cli-cmds.c:2458 msgid "Set timeout limit to wait for target to respond." msgstr "" -#: cli/cli-cmds.c:2310 +#: cli/cli-cmds.c:2459 msgid "Show timeout limit to wait for target to respond." msgstr "" -#: cli/cli-cmds.c:2311 +#: cli/cli-cmds.c:2460 msgid "" "This value is used to set the time limit for gdb to wait for a response\n" "from the target." msgstr "" -#: cli/cli-cmds.c:2319 +#: cli/cli-cmds.c:2468 msgid "Generic command for setting gdb debugging flags." msgstr "" -#: cli/cli-cmds.c:2323 +#: cli/cli-cmds.c:2472 msgid "Generic command for showing gdb debugging flags." msgstr "" -#: cli/cli-cmds.c:2326 +#: cli/cli-cmds.c:2475 msgid "" "Execute the rest of the line as a shell command.\n" "With no arguments, run an inferior shell." msgstr "" -#: cli/cli-cmds.c:2333 +#: cli/cli-cmds.c:2482 msgid "" "Edit specified file or function.\n" "With no argument, edits file containing most recent line listed.\n" @@ -6263,7 +6350,7 @@ "Uses EDITOR environment variable contents as editor (or ex as default)." msgstr "" -#: cli/cli-cmds.c:2345 +#: cli/cli-cmds.c:2494 msgid "" "Send the output of a gdb command to a shell command.\n" "Usage: | [COMMAND] | SHELL_COMMAND\n" @@ -6281,7 +6368,7 @@ "and send its output to SHELL_COMMAND." msgstr "" -#: cli/cli-cmds.c:2363 +#: cli/cli-cmds.c:2512 msgid "" "List specified function or line.\n" "With no argument, lists ten more lines after or around previous listing.\n" @@ -6302,11 +6389,16 @@ "can be shown using \"show listsize\"." msgstr "" -#: cli/cli-cmds.c:2387 +#: cli/cli-cmds.c:2536 msgid "" "Disassemble a specified section of memory.\n" +"Usage: disassemble[/m|/r|/s] START [, END]\n" "Default is the function surrounding the pc of the selected frame.\n" "\n" +"With a /s modifier, source lines are included (if available).\n" +"In this mode, the output is displayed in PC address order, and\n" +"file names and contents for all relevant source files are displayed.\n" +"\n" "With a /m modifier, source lines are included (if available).\n" "This view is \"source centric\": the output is in source line order,\n" "regardless of any optimization that is present. Only the main source file\n" @@ -6314,11 +6406,6 @@ "This modifier hasn't proved useful in practice and is deprecated\n" "in favor of /s.\n" "\n" -"With a /s modifier, source lines are included (if available).\n" -"This differs from /m in two important respects:\n" -"- the output is still in pc address order, and\n" -"- file names and contents for all relevant source files are displayed.\n" -"\n" "With a /r modifier, raw instructions in hex are included.\n" "\n" "With a single argument, the function surrounding that address is dumped.\n" @@ -6332,18 +6419,18 @@ "you must type \"disassemble 'foo.c'::bar\" and not \"disassemble foo.c:bar\"." msgstr "" -#: cli/cli-cmds.c:2415 +#: cli/cli-cmds.c:2564 msgid "Run the ``make'' program using the rest of the line as arguments." msgstr "" -#: cli/cli-cmds.c:2418 +#: cli/cli-cmds.c:2567 msgid "" "Show definitions of non-python/scheme user defined commands.\n" "Argument is the name of the user defined command.\n" "With no argument, show definitions of all user defined commands." msgstr "" -#: cli/cli-cmds.c:2422 +#: cli/cli-cmds.c:2571 msgid "" "Search for commands matching a REGEXP.\n" "Usage: apropos [-v] REGEXP\n" @@ -6351,43 +6438,53 @@ "of the matching commands." msgstr "" -#: cli/cli-cmds.c:2429 +#: cli/cli-cmds.c:2578 msgid "Set the max call depth for non-python/scheme user-defined commands." msgstr "" -#: cli/cli-cmds.c:2430 +#: cli/cli-cmds.c:2579 msgid "Show the max call depth for non-python/scheme user-defined commands." msgstr "" -#: cli/cli-cmds.c:2436 +#: cli/cli-cmds.c:2585 msgid "Set tracing of GDB CLI commands." msgstr "" -#: cli/cli-cmds.c:2437 +#: cli/cli-cmds.c:2586 msgid "Show state of GDB CLI command tracing." msgstr "" -#: cli/cli-cmds.c:2438 +#: cli/cli-cmds.c:2587 msgid "When 'on', each command is displayed as it is executed." msgstr "" -#: cli/cli-cmds.c:2444 +#: cli/cli-cmds.c:2596 msgid "" "Define a new command that is an alias of an existing command.\n" -"Usage: alias [-a] [--] ALIAS = COMMAND\n" +"Usage: alias [-a] [--] ALIAS = COMMAND [DEFAULT-ARGS...]\n" "ALIAS is the name of the alias command to create.\n" "COMMAND is the command being aliased to.\n" -"If \"-a\" is specified, the command is an abbreviation,\n" -"and will not appear in help command list output.\n" +"\n" +"Options:\n" +"%OPTIONS%\n" +"\n" +"GDB will automatically prepend the provided DEFAULT-ARGS to the list\n" +"of arguments explicitly provided when using ALIAS.\n" +"Use \"help aliases\" to list all user defined aliases and their default " +"args.\n" "\n" "Examples:\n" "Make \"spe\" an alias of \"set print elements\":\n" -" alias spe = set print elements\n" +" alias spe set print elements\n" "Make \"elms\" an alias of \"elements\" in the \"set print\" command:\n" -" alias -a set print elms = set print elements" +" alias -a set print elms set print elements\n" +"Make \"btf\" an alias of \"backtrace -full -past-entry -past-main\" :\n" +" alias btf = backtrace -full -past-entry -past-main\n" +"Make \"wLapPeu\" an alias of 2 nested \"with\":\n" +" alias wLapPeu = with language pascal -- with print elements unlimited --" msgstr "" -#: cli/cli-cmds.c:2458 +#: cli/cli-cmds.c:2625 #, possible-c-format msgid "" "Read commands from a file named FILE.\n" @@ -6401,401 +6498,280 @@ "when GDB is started." msgstr "" -#: cli/cli-decode.c:1559 -#, possible-c-format -msgid "Undefined %scommand: \"%s\". Try \"help%s%.*s\"." +#: cli/cli-setshow.c:74 +msgid "\"on\", \"off\" or \"auto\" expected." msgstr "" -#: cli/cli-decode.c:1593 +#: cli/cli-setshow.c:176 #, possible-c-format -msgid "Lack of needed %scommand" +msgid "Junk after \"%.*s\": %s" msgstr "" -#: cli/cli-decode.c:1658 -#, possible-c-format -msgid "Ambiguous %scommand \"%s\": %s." +#: cli/cli-setshow.c:197 cli/cli-setshow.c:230 cli/cli-setshow.c:460 +msgid "integer to set it to, or \"unlimited\"." msgstr "" -#: cli/cli-decode.c:1665 -msgid "Argument must be preceded by space." +#: cli/cli-setshow.c:199 cli/cli-setshow.c:462 +msgid "integer to set it to." msgstr "" -#: cli/cli-decode.c:1955 -msgid "Invalid command" +#: cli/cli-setshow.c:217 cli/cli-setshow.c:240 cli/cli-setshow.c:478 +#, possible-c-format +msgid "integer %s out of range" msgstr "" -#: cli/cli-style.c:177 -msgid "The " +#: cli/cli-setshow.c:242 +msgid "only -1 is allowed to set as unlimited" msgstr "" -#: cli/cli-style.c:178 +#: cli/cli-setshow.c:264 #, possible-c-format -msgid "\"%s\" style" +msgid "Requires an argument. Valid arguments are %s." msgstr "" -#: cli/cli-style.c:179 +#: cli/cli-setshow.c:290 #, possible-c-format -msgid " %s is: %s\n" +msgid "Undefined item: \"%.*s\"." msgstr "" -#: cli/cli-style.c:189 -msgid "foreground color" +#: cli/cli-setshow.c:293 +#, possible-c-format +msgid "Ambiguous item \"%.*s\"." msgstr "" -#: cli/cli-style.c:199 -msgid "background color" +#: cli/cli-setshow.c:379 +msgid "filename to set it to." msgstr "" -#: cli/cli-style.c:209 -msgid "display intensity" +#: cli/cli-setshow.c:418 +msgid "\"on\" or \"off\" expected." msgstr "" -#: cli/cli-style.c:235 -msgid "Set the foreground color for this property." +#: cli/cli-setshow.c:496 +#, possible-c-format +msgid "Junk after item \"%.*s\": %s" msgstr "" -#: cli/cli-style.c:236 -msgid "Show the foreground color for this property." +#: cli/cli-setshow.c:518 +msgid "gdb internal error: bad var_type in do_setshow_command" msgstr "" -#: cli/cli-style.c:243 -msgid "Set the background color for this property." +#: cli/cli-script.c:157 +msgid "if command requires an argument." msgstr "" -#: cli/cli-style.c:244 -msgid "Show the background color for this property." +#: cli/cli-script.c:159 +msgid "while command requires an argument." msgstr "" -#: cli/cli-style.c:252 -msgid "Set the display intensity for this property." +#: cli/cli-script.c:161 +msgid "define command requires an argument." msgstr "" -#: cli/cli-style.c:253 -msgid "Show the display intensity for this property." +#: cli/cli-script.c:182 +msgid "Error reading in canned sequence of commands." msgstr "" -#: cli/cli-style.c:266 -msgid "\"set style\" must be followed by an appropriate subcommand.\n" +#: cli/cli-script.c:405 +msgid "Error executing canned sequence of commands." msgstr "" -#: cli/cli-style.c:289 -msgid "CLI output styling is enabled.\n" +#: cli/cli-script.c:461 +msgid "Max user call depth exceeded -- command aborted." msgstr "" -#: cli/cli-style.c:291 -msgid "CLI output styling is disabled.\n" +#: cli/cli-script.c:691 +msgid "Invalid control type in canned commands structure." msgstr "" -#: cli/cli-style.c:299 -msgid "Source code styling is enabled.\n" +#: cli/cli-script.c:879 +#, possible-c-format +msgid "Missing argument %ld in user function." msgstr "" -#: cli/cli-style.c:301 -msgid "Source code styling is disabled.\n" +#: cli/cli-script.c:907 +msgid "Control nesting too deep!" msgstr "" -#: cli/cli-style.c:319 cli/cli-style.c:323 -msgid "" -"Style-specific settings.\n" -"Configure various style-related variables, such as colors" +#: cli/cli-script.c:1090 +msgid "Recursed on a simple control type." msgstr "" -#: cli/cli-style.c:328 -msgid "Set whether CLI styling is enabled." +#: cli/cli-script.c:1316 +msgid "name of command to define" msgstr "" -#: cli/cli-style.c:329 -msgid "Show whether CLI is enabled." +#: cli/cli-script.c:1337 +#, possible-c-format +msgid "\"%s\" is not a prefix command." msgstr "" -#: cli/cli-style.c:330 -msgid "If enabled, output to the terminal is styled." +#: cli/cli-script.c:1347 +#, possible-c-format +msgid "Junk in argument list: \"%s\"" msgstr "" -#: cli/cli-style.c:335 -msgid "Set whether source code styling is enabled." +#: cli/cli-script.c:1406 +#, possible-c-format +msgid "" +"Keeping subcommands of prefix command \"%s\".\n" +"Redefine command \"%s\"? " msgstr "" -#: cli/cli-style.c:336 -msgid "Show whether source code styling is enabled." +#: cli/cli-script.c:1409 +#, possible-c-format +msgid "Redefine command \"%s\"? " msgstr "" -#: cli/cli-style.c:337 -msgid "" -"If enabled, source code is styled.\n" -"Note that source styling only works if styling in general is enabled,\n" -"see \"show style enabled\".Source highlighting is disabled in this " -"installation of gdb, because\n" -"it was not linked against GNU Source Highlight." +#: cli/cli-script.c:1412 +#, possible-c-format +msgid "Really redefine built-in command \"%s\"? " msgstr "" -#: cli/cli-style.c:370 -msgid "" -"Filename display styling.\n" -"Configure filename colors and display intensity." +#: cli/cli-script.c:1414 +#, possible-c-format +msgid "Command \"%s\" not redefined." msgstr "" -#: cli/cli-style.c:375 -msgid "" -"Function name display styling.\n" -"Configure function name colors and display intensity" +#: cli/cli-script.c:1441 +#, possible-c-format +msgid "Your new `%s' command does not hook any existing command." msgstr "" -#: cli/cli-style.c:380 -msgid "" -"Variable name display styling.\n" -"Configure variable name colors and display intensity" +#: cli/cli-script.c:1444 +msgid "Proceed? " msgstr "" -#: cli/cli-style.c:385 -msgid "" -"Address display styling.\n" -"Configure address colors and display intensity" +#. Should never come here as hookc would be 0. +#: cli/cli-script.c:1500 hppa-tdep.c:3127 hppa-tdep.c:3140 infcall.c:1012 +#: infcmd.c:1468 language.c:431 mi/mi-out.c:227 mi/mi-out.c:247 mips-tdep.c:305 +#: mips-tdep.c:509 mips-tdep.c:2235 mips-tdep.c:5762 mips-tdep.c:6907 +#: mn10300-tdep.c:127 reggroups.c:274 remote.c:2129 remote.c:8810 +#: remote.c:10073 utils.c:381 utils.c:409 +msgid "bad switch" msgstr "" -#: cli/cli-style.c:390 -msgid "" -"Title display styling.\n" -"Configure title colors and display intensity\n" -"Some commands (such as \"apropos -v REGEXP\") use the title style to " -"improve\n" -"readability." +#: cli/cli-script.c:1525 cli/cli-script.c:1575 +#, possible-c-format +msgid "Command \"%s\" is built-in." +msgstr "" + +#: cli/cli-script.c:1610 +msgid "called with NULL file pointer!" msgstr "" -#: cli/cli-style.c:397 +#: cli/cli-script.c:1629 +#, possible-c-format msgid "" -"Highlight display styling.\n" -"Configure highlight colors and display intensity\n" -"Some commands use the highlight style to draw the attention to a part\n" -"of their output." +"%s:%d: Error in sourced command file:\n" +"%s" msgstr "" -#: cli/cli-style.c:404 +#. "document", "define" and "define-prefix" use command_completer, +#. as this helps the user to either type the command name and/or +#. its prefixes. +#: cli/cli-script.c:1679 msgid "" -"Metadata display styling.\n" -"Configure metadata colors and display intensity\n" -"The \"metadata\" style is used when GDB displays information about\n" -"your data, for example \"<unavailable>\"" +"Document a user-defined command.\n" +"Give command name as argument. Give documentation on following lines.\n" +"End with a line of just \"end\"." msgstr "" -#: cli/cli-style.c:411 +#: cli/cli-script.c:1684 msgid "" -"TUI border display styling.\n" -"Configure TUI border colors\n" -"The \"tui-border\" style is used when GDB displays the border of a\n" -"TUI window that does not have the focus." +"Define a new command name. Command name is argument.\n" +"Definition appears on following lines, one command per line.\n" +"End with a line of just \"end\".\n" +"Use the \"document\" command to give documentation for the new command.\n" +"Commands defined in this way may accept an unlimited number of arguments\n" +"accessed via $arg0 .. $argN. $argc tells how many arguments have\n" +"been passed." msgstr "" -#: cli/cli-style.c:418 +#: cli/cli-script.c:1694 msgid "" -"TUI active border display styling.\n" -"Configure TUI active border colors\n" -"The \"tui-active-border\" style is used when GDB displays the border of a\n" -"TUI window that does have the focus." -msgstr "" - -#: cli/cli-logging.c:33 -#, possible-c-format -msgid "The current logfile is \"%ps\".\n" +"Define or mark a command as a user-defined prefix command.\n" +"User defined prefix commands can be used as prefix commands for\n" +"other user defined commands.\n" +"If the command already exists, it is changed to a prefix command." msgstr "" -#: cli/cli-logging.c:43 -#, possible-c-format +#: cli/cli-script.c:1701 msgid "" -"Currently logging to %s. Turn the logging off and on to make the new " -"setting effective." -msgstr "" - -#: cli/cli-logging.c:59 -#, possible-c-format -msgid "Whether logging overwrites or appends to the log file is %s.\n" -msgstr "" - -#: cli/cli-logging.c:79 -#, possible-c-format -msgid "The logging output mode is %s.\n" -msgstr "" - -#: cli/cli-logging.c:106 -msgid "set logging" +"Execute nested commands WHILE the conditional expression is non zero.\n" +"The conditional expression must follow the word `while' and must in turn be\n" +"followed by a new line. The nested commands must be entered one per line,\n" +"and should be terminated by the word `end'." msgstr "" -#: cli/cli-logging.c:171 +#: cli/cli-script.c:1707 msgid "" -"\"set logging\" lets you log output to a file.\n" -"Usage: set logging on [FILENAME]\n" -" set logging off\n" -" set logging file FILENAME\n" -" set logging overwrite [on|off]\n" -" set logging redirect [on|off]\n" +"Execute nested commands once IF the conditional expression is non zero.\n" +"The conditional expression must follow the word `if' and must in turn be\n" +"followed by a new line. The nested commands must be entered one per line,\n" +"and should be terminated by the word 'else' or `end'. If an else clause\n" +"is used, the same rules apply to its nested commands as to the first ones." msgstr "" -#: cli/cli-logging.c:183 +#: cli/cli-decode.c:1781 #, possible-c-format -msgid "Currently logging to \"%s\".\n" +msgid "Undefined %scommand: \"%s\". Try \"help%s%.*s\"." msgstr "" -#: cli/cli-logging.c:186 +#: cli/cli-decode.c:1821 #, possible-c-format -msgid "Future logs will be written to %s.\n" -msgstr "" - -#: cli/cli-logging.c:190 -msgid "Logs will overwrite the log file.\n" -msgstr "" - -#: cli/cli-logging.c:192 -msgid "Logs will be appended to the log file.\n" -msgstr "" - -#: cli/cli-logging.c:195 -msgid "Output will be sent only to the log file.\n" -msgstr "" - -#: cli/cli-logging.c:197 -msgid "Output will be logged and displayed.\n" -msgstr "" - -#: cli/cli-logging.c:200 -msgid "Debug output will be sent only to the log file.\n" -msgstr "" - -#: cli/cli-logging.c:202 -msgid "Debug output will be logged and displayed.\n" -msgstr "" - -#: cli/cli-logging.c:211 -msgid "Set logging options." -msgstr "" - -#: cli/cli-logging.c:214 -msgid "Show logging options." -msgstr "" - -#: cli/cli-logging.c:216 -msgid "Set whether logging overwrites or appends to the log file." -msgstr "" - -#: cli/cli-logging.c:217 -msgid "Show whether logging overwrites or appends to the log file." -msgstr "" - -#: cli/cli-logging.c:218 -msgid "If set, logging overrides the log file." -msgstr "" - -#: cli/cli-logging.c:223 -msgid "Set the logging output mode." -msgstr "" - -#: cli/cli-logging.c:224 -msgid "Show the logging output mode." -msgstr "" - -#: cli/cli-logging.c:225 -msgid "" -"If redirect is off, output will go to both the screen and the log file.\n" -"If redirect is on, output will go only to the log file." -msgstr "" - -#: cli/cli-logging.c:232 -msgid "Set the logging debug output mode." -msgstr "" - -#: cli/cli-logging.c:233 -msgid "Show the logging debug output mode." -msgstr "" - -#: cli/cli-logging.c:234 -msgid "" -"If debug redirect is off, debug will go to both the screen and the log " -"file.\n" -"If debug redirect is on, debug will go only to the log file." -msgstr "" - -#: cli/cli-logging.c:240 -msgid "Set the current logfile." -msgstr "" - -#: cli/cli-logging.c:241 -msgid "Show the current logfile." -msgstr "" - -#: cli/cli-logging.c:242 -msgid "The logfile is used when directing GDB's output." -msgstr "" - -#: cli/cli-logging.c:248 -msgid "Enable logging." -msgstr "" - -#: cli/cli-logging.c:250 -msgid "Disable logging." -msgstr "" - -#: cli/cli-setshow.c:74 -msgid "\"on\", \"off\" or \"auto\" expected." +msgid "Lack of needed %scommand" msgstr "" -#: cli/cli-setshow.c:176 +#: cli/cli-decode.c:1886 #, possible-c-format -msgid "Junk after \"%.*s\": %s" +msgid "Ambiguous %scommand \"%s\": %s." msgstr "" -#: cli/cli-setshow.c:197 cli/cli-setshow.c:230 cli/cli-setshow.c:460 -msgid "integer to set it to, or \"unlimited\"." +#: cli/cli-decode.c:1893 +msgid "Argument must be preceded by space." msgstr "" -#: cli/cli-setshow.c:199 cli/cli-setshow.c:462 -msgid "integer to set it to." +#: cli/cli-decode.c:2184 +msgid "Invalid command" msgstr "" -#: cli/cli-setshow.c:217 cli/cli-setshow.c:240 cli/cli-setshow.c:478 +#: cli/cli-option.c:192 cli/cli-option.c:238 #, possible-c-format -msgid "integer %s out of range" -msgstr "" - -#: cli/cli-setshow.c:242 -msgid "only -1 is allowed to set as unlimited" +msgid "Unrecognized option at: %s" msgstr "" -#: cli/cli-setshow.c:264 +#: cli/cli-option.c:222 #, possible-c-format -msgid "Requires an argument. Valid arguments are %s." +msgid "Ambiguous option at: -%s" msgstr "" -#: cli/cli-setshow.c:290 +#: cli/cli-option.c:316 #, possible-c-format -msgid "Undefined item: \"%.*s\"." +msgid "Value given for `-%s' is not a boolean: %.*s" msgstr "" -#: cli/cli-setshow.c:293 +#. Treat e.g., "maint test-options -string --" as if there +#. was no argument after "-string". +#: cli/cli-option.c:433 cli/cli-option.c:439 #, possible-c-format -msgid "Ambiguous item \"%.*s\"." -msgstr "" - -#: cli/cli-setshow.c:379 -msgid "filename to set it to." -msgstr "" - -#: cli/cli-setshow.c:418 -msgid "\"on\" or \"off\" expected." +msgid "-%s requires an argument" msgstr "" -#: cli/cli-setshow.c:496 -#, possible-c-format -msgid "Junk after item \"%.*s\": %s" +#. Not yet. +#: cli/cli-option.c:448 +msgid "option type not supported" msgstr "" -#: cli/cli-setshow.c:518 -msgid "gdb internal error: bad var_type in do_setshow_command" +#: cli/cli-option.c:828 +msgid "option type not handled" msgstr "" #: cli/cli-dump.c:66 msgid "Missing filename." msgstr "" -#: cli/cli-dump.c:89 cli/cli-dump.c:107 nat/linux-btrace.c:568 +#: cli/cli-dump.c:89 cli/cli-dump.c:107 nat/linux-btrace.c:574 #, possible-c-format msgid "Failed to open %s: %s." msgstr "" @@ -6821,219 +6797,183 @@ msgid "bfd_openw_or_error: unknown mode %s." msgstr "" -#: cli/cli-dump.c:134 -msgid "" -"\"dump\" must be followed by a subcommand.\n" -"\n" -msgstr "" - -#: cli/cli-dump.c:141 -msgid "" -"\"append\" must be followed by a subcommand.\n" -"\n" -msgstr "" - -#: cli/cli-dump.c:172 +#: cli/cli-dump.c:158 #, possible-c-format msgid "writing dump file '%s' (%s)" msgstr "" -#: cli/cli-dump.c:189 +#: cli/cli-dump.c:175 msgid "Missing start address." msgstr "" -#: cli/cli-dump.c:194 +#: cli/cli-dump.c:180 msgid "Missing stop address." msgstr "" -#: cli/cli-dump.c:200 +#: cli/cli-dump.c:186 msgid "Invalid memory address range (start >= end)." msgstr "" -#: cli/cli-dump.c:231 +#: cli/cli-dump.c:217 #, possible-c-format msgid "No value to %s." msgstr "" -#: cli/cli-dump.c:234 +#: cli/cli-dump.c:220 msgid "Invalid expression." msgstr "" -#: cli/cli-dump.c:251 +#: cli/cli-dump.c:237 msgid "value is not an lval: address assumed to be zero" msgstr "" #. No, no useable data in this section. -#: cli/cli-dump.c:420 +#: cli/cli-dump.c:406 #, possible-c-format msgid "skipping section %s...\n" msgstr "" -#: cli/cli-dump.c:438 +#: cli/cli-dump.c:424 #, possible-c-format msgid "Failed to read bfd file %s: '%s'." msgstr "" -#: cli/cli-dump.c:461 cli/cli-dump.c:513 +#: cli/cli-dump.c:447 cli/cli-dump.c:499 #, possible-c-format msgid "restore: memory write failed (%s)." msgstr "" -#: cli/cli-dump.c:471 +#: cli/cli-dump.c:457 #, possible-c-format msgid "Failed to open %s: %s" msgstr "" -#: cli/cli-dump.c:484 +#: cli/cli-dump.c:470 #, possible-c-format msgid "Start address is greater than length of binary file %s." msgstr "" -#: cli/cli-dump.c:557 +#: cli/cli-dump.c:543 msgid "Start must be less than end." msgstr "" -#: cli/cli-dump.c:585 -msgid "\"dump srec\" must be followed by a subcommand.\n" -msgstr "" - -#: cli/cli-dump.c:592 -msgid "\"dump ihex\" must be followed by a subcommand.\n" -msgstr "" - -#: cli/cli-dump.c:599 -msgid "\"dump verilog\" must be followed by a subcommand.\n" -msgstr "" - -#: cli/cli-dump.c:606 -msgid "\"dump tekhex\" must be followed by a subcommand.\n" -msgstr "" - -#: cli/cli-dump.c:613 -msgid "\"dump binary\" must be followed by a subcommand.\n" -msgstr "" - -#: cli/cli-dump.c:620 -msgid "\"append binary\" must be followed by a subcommand.\n" -msgstr "" - -#: cli/cli-dump.c:631 +#: cli/cli-dump.c:575 msgid "Dump target code/data to a local file." msgstr "" -#: cli/cli-dump.c:636 +#: cli/cli-dump.c:580 msgid "Append target code/data to a local file." msgstr "" -#: cli/cli-dump.c:652 +#: cli/cli-dump.c:596 msgid "Write target code/data to an srec file." msgstr "" -#: cli/cli-dump.c:658 +#: cli/cli-dump.c:602 msgid "Write target code/data to an intel hex file." msgstr "" -#: cli/cli-dump.c:664 +#: cli/cli-dump.c:608 msgid "Write target code/data to a verilog hex file." msgstr "" -#: cli/cli-dump.c:670 +#: cli/cli-dump.c:614 msgid "Write target code/data to a tekhex file." msgstr "" -#: cli/cli-dump.c:676 +#: cli/cli-dump.c:620 msgid "Write target code/data to a raw binary file." msgstr "" -#: cli/cli-dump.c:682 +#: cli/cli-dump.c:626 msgid "Append target code/data to a raw binary file." msgstr "" -#: cli/cli-dump.c:687 +#: cli/cli-dump.c:631 msgid "" "Write contents of memory to an srec file.\n" "Arguments are FILE START STOP. Writes the contents of memory\n" "within the range [START .. STOP) to the specified FILE in srec format." msgstr "" -#: cli/cli-dump.c:693 +#: cli/cli-dump.c:637 msgid "" "Write the value of an expression to an srec file.\n" "Arguments are FILE EXPRESSION. Writes the value of EXPRESSION\n" "to the specified FILE in srec format." msgstr "" -#: cli/cli-dump.c:699 +#: cli/cli-dump.c:643 msgid "" "Write contents of memory to an ihex file.\n" "Arguments are FILE START STOP. Writes the contents of memory within\n" "the range [START .. STOP) to the specified FILE in intel hex format." msgstr "" -#: cli/cli-dump.c:705 +#: cli/cli-dump.c:649 msgid "" "Write the value of an expression to an ihex file.\n" "Arguments are FILE EXPRESSION. Writes the value of EXPRESSION\n" "to the specified FILE in intel hex format." msgstr "" -#: cli/cli-dump.c:711 +#: cli/cli-dump.c:655 msgid "" "Write contents of memory to a verilog hex file.\n" "Arguments are FILE START STOP. Writes the contents of memory within\n" "the range [START .. STOP) to the specified FILE in verilog hex format." msgstr "" -#: cli/cli-dump.c:717 +#: cli/cli-dump.c:661 msgid "" "Write the value of an expression to a verilog hex file.\n" "Arguments are FILE EXPRESSION. Writes the value of EXPRESSION\n" "to the specified FILE in verilog hex format." msgstr "" -#: cli/cli-dump.c:723 +#: cli/cli-dump.c:667 msgid "" "Write contents of memory to a tekhex file.\n" "Arguments are FILE START STOP. Writes the contents of memory\n" "within the range [START .. STOP) to the specified FILE in tekhex format." msgstr "" -#: cli/cli-dump.c:729 +#: cli/cli-dump.c:673 msgid "" "Write the value of an expression to a tekhex file.\n" "Arguments are FILE EXPRESSION. Writes the value of EXPRESSION\n" "to the specified FILE in tekhex format." msgstr "" -#: cli/cli-dump.c:735 +#: cli/cli-dump.c:679 msgid "" "Write contents of memory to a raw binary file.\n" "Arguments are FILE START STOP. Writes the contents of memory\n" "within the range [START .. STOP) to the specified FILE in binary format." msgstr "" -#: cli/cli-dump.c:741 +#: cli/cli-dump.c:685 msgid "" "Write the value of an expression to a raw binary file.\n" "Arguments are FILE EXPRESSION. Writes the value of EXPRESSION\n" "to the specified FILE in raw target ordered bytes." msgstr "" -#: cli/cli-dump.c:747 +#: cli/cli-dump.c:691 msgid "" "Append contents of memory to a raw binary file.\n" "Arguments are FILE START STOP. Writes the contents of memory within the\n" "range [START .. STOP) to the specified FILE in raw target ordered bytes." msgstr "" -#: cli/cli-dump.c:753 +#: cli/cli-dump.c:697 msgid "" "Append the value of an expression to a raw binary file.\n" "Arguments are FILE EXPRESSION. Writes the value of EXPRESSION\n" "to the specified FILE in raw target ordered bytes." msgstr "" -#: cli/cli-dump.c:759 +#: cli/cli-dump.c:703 msgid "" "Restore the contents of FILE to target memory.\n" "Arguments are FILE OFFSET START END where all except FILE are optional.\n" @@ -7042,163 +6982,241 @@ "(file relative) will be restored to target memory." msgstr "" -#: cli/cli-script.c:157 -msgid "if command requires an argument." +#: cli/cli-utils.c:43 +msgid "History value must have integer type." msgstr "" -#: cli/cli-script.c:159 -msgid "while command requires an argument." +#: cli/cli-utils.c:55 +#, possible-c-format +msgid "Convenience variable $%s does not have integer value." msgstr "" -#: cli/cli-script.c:161 -msgid "define command requires an argument." +#. There is no number here. (e.g. "cond a == b"). +#: cli/cli-utils.c:66 +#, possible-c-format +msgid "Expected integer at: %s" msgstr "" -#: cli/cli-script.c:182 -msgid "Error reading in canned sequence of commands." +#: cli/cli-utils.c:72 +#, possible-c-format +msgid "Trailing junk at: %s" msgstr "" -#: cli/cli-script.c:409 -msgid "Error executing canned sequence of commands." +#: cli/cli-utils.c:103 +msgid "History value must have integer type.\n" msgstr "" -#: cli/cli-script.c:465 -msgid "Max user call depth exceeded -- command aborted." +#: cli/cli-utils.c:125 +msgid "Convenience variable must have integer value.\n" msgstr "" -#: cli/cli-script.c:690 -msgid "Invalid control type in canned commands structure." +#: cli/cli-utils.c:188 +#, possible-c-format +msgid "Unrecognized option '%s' to %s command. Try \"help %s\"." msgstr "" -#: cli/cli-script.c:878 +#: cli/cli-utils.c:200 #, possible-c-format -msgid "Missing argument %ld in user function." +msgid "" +"%sIf NAMEREGEXP is provided, only prints the %s whose name\n" +"matches NAMEREGEXP.\n" +"If -t TYPEREGEXP is provided, only prints the %s whose type\n" +"matches TYPEREGEXP. Note that the matching is done with the type\n" +"printed by the 'whatis' command.\n" +"By default, the command might produce headers and/or messages indicating\n" +"why no %s can be printed.\n" +"The flag -q disables the production of these headers and messages.%s" msgstr "" -#: cli/cli-script.c:906 -msgid "Control nesting too deep!" +#: cli/cli-utils.c:210 +msgid "" +"\n" +"By default, the command will include non-debug symbols in the output;\n" +"these can be excluded using the -n flag." msgstr "" -#: cli/cli-script.c:1089 -msgid "Recursed on a simple control type." +#: cli/cli-utils.c:282 +msgid "inverted range" msgstr "" -#: cli/cli-script.c:1315 -msgid "name of command to define" +#: cli/cli-utils.c:298 cli/cli-utils.c:304 +msgid "negative value" msgstr "" -#: cli/cli-script.c:1336 -#, possible-c-format -msgid "\"%s\" is not a prefix command." +#: cli/cli-utils.c:356 cli/cli-utils.c:362 +msgid "Arguments must be numbers or '$' variables." msgstr "" -#: cli/cli-script.c:1346 +#: cli/cli-utils.c:439 #, possible-c-format -msgid "Junk in argument list: \"%s\"" +msgid "%s: -c and -s are mutually exclusive" msgstr "" -#: cli/cli-script.c:1405 -#, possible-c-format -msgid "" -"Keeping subcommands of prefix command \"%s\".\n" -"Redefine command \"%s\"? " +#: cli/cli-style.c:177 +msgid "The " msgstr "" -#: cli/cli-script.c:1408 +#: cli/cli-style.c:178 #, possible-c-format -msgid "Redefine command \"%s\"? " +msgid "\"%s\" style" msgstr "" -#: cli/cli-script.c:1411 +#: cli/cli-style.c:179 #, possible-c-format -msgid "Really redefine built-in command \"%s\"? " +msgid " %s is: %s\n" msgstr "" -#: cli/cli-script.c:1413 -#, possible-c-format -msgid "Command \"%s\" not redefined." +#: cli/cli-style.c:189 +msgid "foreground color" msgstr "" -#: cli/cli-script.c:1440 -#, possible-c-format -msgid "Your new `%s' command does not hook any existing command." +#: cli/cli-style.c:199 +msgid "background color" msgstr "" -#: cli/cli-script.c:1443 -msgid "Proceed? " +#: cli/cli-style.c:209 +msgid "display intensity" msgstr "" -#. Should never come here as hookc would be 0. -#: cli/cli-script.c:1499 gdbsupport/common-exceptions.c:93 -#: gdbsupport/common-exceptions.c:109 gdbsupport/common-exceptions.c:125 -#: hppa-tdep.c:3127 hppa-tdep.c:3140 infcall.c:983 infcmd.c:1576 language.c:464 -#: mi/mi-out.c:227 mi/mi-out.c:247 mips-tdep.c:305 mips-tdep.c:509 -#: mips-tdep.c:2235 mips-tdep.c:5762 mips-tdep.c:6927 mn10300-tdep.c:127 -#: reggroups.c:274 remote.c:2116 remote.c:8663 remote.c:9949 utils.c:380 -#: utils.c:408 -msgid "bad switch" +#: cli/cli-style.c:231 +msgid "Set the foreground color for this property." msgstr "" -#: cli/cli-script.c:1524 cli/cli-script.c:1575 -#, possible-c-format -msgid "Command \"%s\" is built-in." +#: cli/cli-style.c:232 +msgid "Show the foreground color for this property." msgstr "" -#: cli/cli-script.c:1610 -msgid "called with NULL file pointer!" +#: cli/cli-style.c:239 +msgid "Set the background color for this property." msgstr "" -#: cli/cli-script.c:1629 -#, possible-c-format +#: cli/cli-style.c:240 +msgid "Show the background color for this property." +msgstr "" + +#: cli/cli-style.c:248 +msgid "Set the display intensity for this property." +msgstr "" + +#: cli/cli-style.c:249 +msgid "Show the display intensity for this property." +msgstr "" + +#: cli/cli-style.c:271 +msgid "CLI output styling is enabled.\n" +msgstr "" + +#: cli/cli-style.c:273 +msgid "CLI output styling is disabled.\n" +msgstr "" + +#: cli/cli-style.c:281 +msgid "Source code styling is enabled.\n" +msgstr "" + +#: cli/cli-style.c:283 +msgid "Source code styling is disabled.\n" +msgstr "" + +#: cli/cli-style.c:290 cli/cli-style.c:294 msgid "" -"%s:%d: Error in sourced command file:\n" -"%s" +"Style-specific settings.\n" +"Configure various style-related variables, such as colors" msgstr "" -#. "document", "define" and "define-prefix" use command_completer, -#. as this helps the user to either type the command name and/or -#. its prefixes. -#: cli/cli-script.c:1678 +#: cli/cli-style.c:299 +msgid "Set whether CLI styling is enabled." +msgstr "" + +#: cli/cli-style.c:300 +msgid "Show whether CLI is enabled." +msgstr "" + +#: cli/cli-style.c:301 +msgid "If enabled, output to the terminal is styled." +msgstr "" + +#: cli/cli-style.c:306 +msgid "Set whether source code styling is enabled." +msgstr "" + +#: cli/cli-style.c:307 +msgid "Show whether source code styling is enabled." +msgstr "" + +#: cli/cli-style.c:308 msgid "" -"Document a user-defined command.\n" -"Give command name as argument. Give documentation on following lines.\n" -"End with a line of just \"end\"." +"If enabled, source code is styled.\n" +"Note that source styling only works if styling in general is enabled,\n" +"see \"show style enabled\".Source highlighting may be disabled in this " +"installation of gdb, because\n" +"it was not linked against GNU Source Highlight. However, it might still be\n" +"available if the appropriate extension is available at runtime." msgstr "" -#: cli/cli-script.c:1683 +#: cli/cli-style.c:321 msgid "" -"Define a new command name. Command name is argument.\n" -"Definition appears on following lines, one command per line.\n" -"End with a line of just \"end\".\n" -"Use the \"document\" command to give documentation for the new command.\n" -"Commands defined in this way may accept an unlimited number of arguments\n" -"accessed via $arg0 .. $argN. $argc tells how many arguments have\n" -"been passed." +"Filename display styling.\n" +"Configure filename colors and display intensity." msgstr "" -#: cli/cli-script.c:1693 +#: cli/cli-style.c:327 msgid "" -"Define or mark a command as a user-defined prefix command.\n" -"User defined prefix commands can be used as prefix commands for\n" -"other user defined commands.\n" -"If the command already exists, it is changed to a prefix command." +"Function name display styling.\n" +"Configure function name colors and display intensity" msgstr "" -#: cli/cli-script.c:1700 +#: cli/cli-style.c:333 msgid "" -"Execute nested commands WHILE the conditional expression is non zero.\n" -"The conditional expression must follow the word `while' and must in turn be\n" -"followed by a new line. The nested commands must be entered one per line,\n" -"and should be terminated by the word `end'." +"Variable name display styling.\n" +"Configure variable name colors and display intensity" msgstr "" -#: cli/cli-script.c:1706 +#: cli/cli-style.c:339 msgid "" -"Execute nested commands once IF the conditional expression is non zero.\n" -"The conditional expression must follow the word `if' and must in turn be\n" -"followed by a new line. The nested commands must be entered one per line,\n" -"and should be terminated by the word 'else' or `end'. If an else clause\n" -"is used, the same rules apply to its nested commands as to the first ones." +"Address display styling.\n" +"Configure address colors and display intensity" +msgstr "" + +#: cli/cli-style.c:345 +msgid "" +"Title display styling.\n" +"Configure title colors and display intensity\n" +"Some commands (such as \"apropos -v REGEXP\") use the title style to " +"improve\n" +"readability." +msgstr "" + +#: cli/cli-style.c:353 +msgid "" +"Highlight display styling.\n" +"Configure highlight colors and display intensity\n" +"Some commands use the highlight style to draw the attention to a part\n" +"of their output." +msgstr "" + +#: cli/cli-style.c:361 +msgid "" +"Metadata display styling.\n" +"Configure metadata colors and display intensity\n" +"The \"metadata\" style is used when GDB displays information about\n" +"your data, for example \"<unavailable>\"" +msgstr "" + +#: cli/cli-style.c:369 +msgid "" +"TUI border display styling.\n" +"Configure TUI border colors\n" +"The \"tui-border\" style is used when GDB displays the border of a\n" +"TUI window that does not have the focus." +msgstr "" + +#: cli/cli-style.c:377 +msgid "" +"TUI active border display styling.\n" +"Configure TUI active border colors\n" +"The \"tui-active-border\" style is used when GDB displays the border of a\n" +"TUI window that does have the focus." msgstr "" #: coff-pe-read.c:177 @@ -7234,35 +7252,35 @@ msgid "Wrong value of export RVA for dll \"%s\": 0x%lx instead of 0x%lx\n" msgstr "" -#: coff-pe-read.c:529 +#: coff-pe-read.c:535 #, possible-c-format msgid "DLL \"%s\" has %ld export entries, base=%ld\n" msgstr "" -#: coff-pe-read.c:602 +#: coff-pe-read.c:608 #, possible-c-format msgid "Export name \"%s\" ord. %lu, RVA 0x%lx in dll \"%s\" not handled\n" msgstr "" -#: coff-pe-read.c:609 +#: coff-pe-read.c:615 #, possible-c-format msgid "Finished reading \"%s\", exports %ld, forwards %ld, total %ld/%ld.\n" msgstr "" -#: coff-pe-read.c:683 +#: coff-pe-read.c:689 #, possible-c-format msgid "Coff PE read debugging is %s.\n" msgstr "" -#: coff-pe-read.c:693 +#: coff-pe-read.c:700 msgid "Set coff PE read debugging." msgstr "" -#: coff-pe-read.c:694 +#: coff-pe-read.c:701 msgid "Show coff PE read debugging." msgstr "" -#: coff-pe-read.c:695 +#: coff-pe-read.c:702 msgid "" "When set, debugging messages for coff reading of exported symbols are " "displayed." @@ -7317,51 +7335,139 @@ msgstr "" #. We attempted to pop an empty context stack. -#: coffread.c:1134 +#: coffread.c:1132 #, possible-c-format msgid "" "`.eb' symbol without matching `.bb' symbol ignored starting at symnum %d" msgstr "" -#: coffread.c:1143 xcoffread.c:197 +#: coffread.c:1141 xcoffread.c:198 #, possible-c-format msgid "Mismatched .eb symbol ignored starting at symnum %d" msgstr "" -#: coffread.c:1209 coffread.c:1216 coffread.c:1226 +#: coffread.c:1205 coffread.c:1212 coffread.c:1222 #, possible-c-format msgid "%s: error reading symbols" msgstr "" -#: coffread.c:1240 +#: coffread.c:1236 #, c-format msgid "thumb symbol %s, class 0x%x\n" msgstr "" -#: coffread.c:1349 +#: coffread.c:1345 msgid "coff file name too long" msgstr "" -#: coffread.c:1417 +#: coffread.c:1413 #, possible-c-format msgid "Line number pointer %ld lower than start of line numbers" msgstr "" -#: coffread.c:1812 +#: coffread.c:1800 #, possible-c-format msgid "Symbol table entry for %s has bad tagndx value" msgstr "" -#: coffread.c:1969 +#: coffread.c:1957 #, possible-c-format msgid "Unexpected type for symbol %s" msgstr "" +#: compile/compile-c-support.c:56 +#, possible-c-format +msgid "Invalid GCC mode size %d." +msgstr "" + +#: compile/compile-c-support.c:87 +#, possible-c-format +msgid "could not find symbol %s in library %s" +msgstr "" + +#: compile/compile-c-support.c:118 +msgid "" +"The loaded version of GCC does not support the required version of the API." +msgstr "" + +#: compile/compile-c-support.c:355 compile/compile-c-support.c:379 +#: compile/compile-c-support.c:480 +msgid "Unknown compiler scope reached." +msgstr "" + +#: compile/compile-cplus-types.c:182 +msgid "malformed TYPE_NAME during parsing" +msgstr "" + +#: compile/compile-cplus-types.c:461 compile/compile-c-types.c:48 +msgid "array type with non-constant lower bound is not supported" +msgstr "" + +#: compile/compile-cplus-types.c:469 compile/compile-c-types.c:51 +msgid "cannot convert array type with non-zero lower bound to C" +msgstr "" + +#: compile/compile-cplus-types.c:480 compile/compile-c-types.c:60 +msgid "variably-sized vector type is not supported" +msgstr "" + +#. This can happen if we have a DW_AT_declaration DIE +#. for the method, but no "definition"-type DIE (with +#. DW_AT_specification referencing the decl DIE), i.e., +#. the compiler has probably optimized the method away. +#. +#. In this case, all we can hope to do is issue a warning +#. to the user letting him know. If the user has not actually +#. requested using this method, things should still work. +#: compile/compile-cplus-types.c:761 +#, possible-c-format +msgid "" +"Method %s appears to be optimized out.\n" +"All references to this method will be undefined." +msgstr "" + +#: compile/compile-cplus-types.c:981 compile/compile-c-types.c:171 +msgid "function has unknown return type; assuming int" +msgstr "" + +#: compile/compile-cplus-types.c:1200 +#, possible-c-format +msgid "unhandled TYPE_CODE %d" +msgstr "" + +#: compile/compile-cplus-types.c:1412 +msgid "Set debugging of C++ compile type conversion." +msgstr "" + +#: compile/compile-cplus-types.c:1413 +msgid "Show debugging of C++ compile type conversion." +msgstr "" + +#: compile/compile-cplus-types.c:1414 +msgid "" +"When enabled debugging messages are printed during C++ type conversion for\n" +"the compile commands." +msgstr "" + +#: compile/compile-cplus-types.c:1423 +msgid "Set debugging of C++ compile scopes." +msgstr "" + +#: compile/compile-cplus-types.c:1424 +msgid "Show debugging of C++ compile scopes." +msgstr "" + +#: compile/compile-cplus-types.c:1425 +msgid "" +"When enabled debugging messages are printed about definition scopes during\n" +"C++ type conversion for the compile commands." +msgstr "" + #: compile/compile.c:176 msgid "Unexpected type id from GCC, check you use recent enough GCC." msgstr "" -#: compile/compile.c:225 utils.c:622 +#: compile/compile.c:225 utils.c:609 #, possible-c-format msgid "%s" msgstr "" @@ -7402,48 +7508,48 @@ msgid "The program must be running for the compile command to work." msgstr "" -#: compile/compile.c:695 +#: compile/compile.c:697 #, possible-c-format msgid "No compiler support for language %s." msgstr "" -#: compile/compile.c:726 +#: compile/compile.c:724 msgid "Neither a simple expression, or a multi-line specified." msgstr "" -#: compile/compile.c:739 +#: compile/compile.c:737 msgid "" "Command 'set compile-gcc' requires GCC version 6 or higher (libcc1 interface " "version 1 or higher)" msgstr "" -#: compile/compile.c:782 +#: compile/compile.c:780 msgid "Could not open source file for writing" msgstr "" -#: compile/compile.c:787 +#: compile/compile.c:785 msgid "Could not write to source file" msgstr "" -#: compile/compile.c:798 +#: compile/compile.c:796 msgid "Compilation failed." msgstr "" -#: compile/compile.c:867 +#: compile/compile.c:865 #, possible-c-format msgid "Invalid register name \"%s\"." msgstr "" -#: compile/compile.c:874 +#: compile/compile.c:872 #, possible-c-format msgid "Cannot find gdbarch register \"%s\"." msgstr "" -#: compile/compile.c:966 +#: compile/compile.c:965 msgid "Command to compile source code and inject it into the inferior." msgstr "" -#: compile/compile.c:974 +#: compile/compile.c:973 msgid "" "Compile, inject, and execute code.\n" "\n" @@ -7462,7 +7568,7 @@ "indicate the end of the expression." msgstr "" -#: compile/compile.c:998 +#: compile/compile.c:997 msgid "" "Evaluate a file containing source code.\n" "\n" @@ -7472,7 +7578,7 @@ "%OPTIONS%" msgstr "" -#: compile/compile.c:1015 +#: compile/compile.c:1014 msgid "" "Evaluate EXPR by using the compiler and print result.\n" "\n" @@ -7498,42 +7604,42 @@ "but no count or size letter (see \"x\" command)." msgstr "" -#: compile/compile.c:1045 +#: compile/compile.c:1044 msgid "Set compile command debugging." msgstr "" -#: compile/compile.c:1046 +#: compile/compile.c:1045 msgid "Show compile command debugging." msgstr "" -#: compile/compile.c:1047 +#: compile/compile.c:1046 msgid "When on, compile command debugging is enabled." msgstr "" -#: compile/compile.c:1054 +#: compile/compile.c:1053 msgid "Set compile command GCC command-line arguments." msgstr "" -#: compile/compile.c:1055 +#: compile/compile.c:1054 msgid "Show compile command GCC command-line arguments." msgstr "" -#: compile/compile.c:1056 +#: compile/compile.c:1055 msgid "" "Use options like -I (include file directory) or ABI settings.\n" "String quoting is parsed like in shell, for example:\n" " -mno-align-double \"-I/dir with a space/include\"" msgstr "" -#: compile/compile.c:1082 +#: compile/compile.c:1081 msgid "Set compile command GCC driver filename." msgstr "" -#: compile/compile.c:1084 +#: compile/compile.c:1083 msgid "Show compile command GCC driver filename." msgstr "" -#: compile/compile.c:1086 +#: compile/compile.c:1085 msgid "" "It should be absolute filename of the gcc executable.\n" "If empty the default target triplet will be searched in $PATH." @@ -7588,132 +7694,140 @@ "%s-%s." msgstr "" -#: compile/compile-object-load.c:442 compile/compile-object-load.c:451 +#: compile/compile-object-load.c:443 compile/compile-object-load.c:452 #, possible-c-format msgid "No \"%s\" symbol found" msgstr "" -#: compile/compile-object-load.c:455 +#: compile/compile-object-load.c:456 #, possible-c-format msgid "Type of \"%s\" is not a pointer" msgstr "" -#: compile/compile-object-load.c:461 +#: compile/compile-object-load.c:462 #, possible-c-format msgid "Expected address scope in compiled module \"%s\"." msgstr "" -#: compile/compile-object-load.c:467 compile/compile-object-load.c:481 +#: compile/compile-object-load.c:468 compile/compile-object-load.c:482 #, possible-c-format msgid "Invalid type code %d of symbol \"%s\" in compiled module \"%s\"." msgstr "" -#: compile/compile-object-load.c:488 +#: compile/compile-object-load.c:489 #, possible-c-format msgid "" "Referenced types do not match for symbols \"%s\" and \"%s\" in compiled " "module \"%s\"." msgstr "" -#: compile/compile-object-load.c:512 +#: compile/compile-object-load.c:513 #, possible-c-format msgid "" "Invalid type code %d of first parameter of function \"%s\" in compiled " "module \"%s\"." msgstr "" -#: compile/compile-object-load.c:519 +#: compile/compile-object-load.c:520 #, possible-c-format msgid "" "Invalid type code %d of dereferenced first parameter of function \"%s\" in " "compiled module \"%s\"." msgstr "" -#: compile/compile-object-load.c:553 +#: compile/compile-object-load.c:554 #, possible-c-format msgid "Invalid register \"%s\" position %s bits or size %s bits" msgstr "" -#: compile/compile-object-load.c:559 +#: compile/compile-object-load.c:560 #, possible-c-format msgid "Invalid register \"%s\" type code %d" msgstr "" -#: compile/compile-object-load.c:566 +#: compile/compile-object-load.c:567 #, possible-c-format msgid "Register \"%s\" is optimized out." msgstr "" -#: compile/compile-object-load.c:568 +#: compile/compile-object-load.c:569 #, possible-c-format msgid "Register \"%s\" is not available." msgstr "" -#: compile/compile-object-load.c:573 +#: compile/compile-object-load.c:574 #, possible-c-format msgid "Cannot write register \"%s\" to inferior memory at %s." msgstr "" -#: compile/compile-object-load.c:608 +#: compile/compile-object-load.c:609 #, possible-c-format msgid "\"%s\": could not open as compiled module: %s" msgstr "" -#: compile/compile-object-load.c:612 +#: compile/compile-object-load.c:613 #, possible-c-format msgid "\"%s\": not in loadable format: %s" msgstr "" -#: compile/compile-object-load.c:617 +#: compile/compile-object-load.c:618 #, possible-c-format msgid "\"%s\": not in object format." msgstr "" -#: compile/compile-object-load.c:630 +#: compile/compile-object-load.c:631 #, possible-c-format msgid "Cannot read symbols of compiled module \"%s\": %s" msgstr "" -#: compile/compile-object-load.c:645 +#: compile/compile-object-load.c:646 #, possible-c-format msgid "Cannot find function \"%s\" in compiled module \"%s\"." msgstr "" -#: compile/compile-object-load.c:649 +#: compile/compile-object-load.c:650 #, possible-c-format msgid "Invalid type code %d of function \"%s\" in compiled module \"%s\"." msgstr "" -#: compile/compile-object-load.c:670 +#: compile/compile-object-load.c:671 #, possible-c-format msgid "invalid scope %d" msgstr "" -#: compile/compile-object-load.c:673 +#: compile/compile-object-load.c:674 #, possible-c-format msgid "Invalid %d parameters of function \"%s\" in compiled module \"%s\"." msgstr "" -#: compile/compile-object-load.c:678 +#: compile/compile-object-load.c:679 #, possible-c-format msgid "Invalid return type of function \"%s\" in compiled module \"%s\"." msgstr "" -#: compile/compile-object-load.c:689 +#: compile/compile-object-load.c:690 #, possible-c-format msgid "Cannot parse symbols of compiled module \"%s\": %s" msgstr "" -#: compile/compile-object-load.c:739 +#: compile/compile-object-load.c:740 #, possible-c-format msgid "Could not find symbol \"%s\" for compiled module \"%s\"." msgstr "" -#: compile/compile-object-load.c:746 +#: compile/compile-object-load.c:747 #, possible-c-format msgid "%ld symbols were missing, cannot continue." msgstr "" +#: compile/compile-c-types.c:329 +msgid "variable has unknown type; assuming int" +msgstr "" + +#: compile/compile-c-types.c:334 +msgid "cannot convert gdb type to gcc type" +msgstr "" + #: compile/compile-c-symbols.c:114 compile/compile-cplus-symbols.c:108 #, possible-c-format msgid "Unsupported LOC_CONST_BYTES for symbol \"%s\"." @@ -7739,7 +7853,7 @@ msgstr "" #. Probably TLS here. -#: compile/compile-c-symbols.c:135 compile/compile-loc2c.c:633 +#: compile/compile-c-symbols.c:135 compile/compile-loc2c.c:635 #: compile/compile-cplus-symbols.c:129 #, possible-c-format msgid "" @@ -7747,13 +7861,13 @@ "current thread in compiled code." msgstr "" -#: compile/compile-c-symbols.c:153 compile/compile-loc2c.c:623 +#: compile/compile-c-symbols.c:153 compile/compile-loc2c.c:625 #: compile/compile-cplus-symbols.c:147 #, possible-c-format msgid "Symbol \"%s\" cannot be used because there is no selected frame" msgstr "" -#: compile/compile-c-symbols.c:160 compile/compile-loc2c.c:629 +#: compile/compile-c-symbols.c:160 compile/compile-loc2c.c:631 #: compile/compile-cplus-symbols.c:154 #, possible-c-format msgid "" @@ -7769,120 +7883,24 @@ msgid "LOC_COMPUTED variable missing a method." msgstr "" -#: compile/compile-c-types.c:48 compile/compile-cplus-types.c:461 -msgid "array type with non-constant lower bound is not supported" +#: compile/compile-loc2c.c:100 +msgid "inconsistent stack depths" msgstr "" -#: compile/compile-c-types.c:51 compile/compile-cplus-types.c:469 -msgid "cannot convert array type with non-zero lower bound to C" +#: compile/compile-loc2c.c:363 compile/compile-loc2c.c:1110 +#, possible-c-format +msgid "unhandled DWARF op: %s" msgstr "" -#: compile/compile-c-types.c:60 compile/compile-cplus-types.c:480 -msgid "variably-sized vector type is not supported" +#: compile/compile-loc2c.c:878 dwarf2/loc.c:3283 +msgid "No block found for address" msgstr "" -#: compile/compile-c-types.c:171 compile/compile-cplus-types.c:981 -msgid "function has unknown return type; assuming int" -msgstr "" - -#: compile/compile-c-types.c:329 -msgid "variable has unknown type; assuming int" -msgstr "" - -#: compile/compile-c-types.c:334 -msgid "cannot convert gdb type to gcc type" -msgstr "" - -#: compile/compile-cplus-types.c:182 -msgid "malformed TYPE_NAME during parsing" -msgstr "" - -#. This can happen if we have a DW_AT_declaration DIE -#. for the method, but no "definition"-type DIE (with -#. DW_AT_specification referencing the decl DIE), i.e., -#. the compiler has probably optimized the method away. -#. -#. In this case, all we can hope to do is issue a warning -#. to the user letting him know. If the user has not actually -#. requested using this method, things should still work. -#: compile/compile-cplus-types.c:761 -#, possible-c-format -msgid "" -"Method %s appears to be optimized out.\n" -"All references to this method will be undefined." -msgstr "" - -#: compile/compile-cplus-types.c:1200 -#, possible-c-format -msgid "unhandled TYPE_CODE %d" -msgstr "" - -#: compile/compile-cplus-types.c:1411 -msgid "Set debugging of C++ compile type conversion." -msgstr "" - -#: compile/compile-cplus-types.c:1412 -msgid "Show debugging of C++ compile type conversion." -msgstr "" - -#: compile/compile-cplus-types.c:1413 -msgid "" -"When enabled debugging messages are printed during C++ type conversion for\n" -"the compile commands." -msgstr "" - -#: compile/compile-cplus-types.c:1422 -msgid "Set debugging of C++ compile scopes." -msgstr "" - -#: compile/compile-cplus-types.c:1423 -msgid "Show debugging of C++ compile scopes." -msgstr "" - -#: compile/compile-cplus-types.c:1424 -msgid "" -"When enabled debugging messages are printed about definition scopes during\n" -"C++ type conversion for the compile commands." -msgstr "" - -#: compile/compile-c-support.c:56 -#, possible-c-format -msgid "Invalid GCC mode size %d." -msgstr "" - -#: compile/compile-c-support.c:87 -#, possible-c-format -msgid "could not find symbol %s in library %s" -msgstr "" - -#: compile/compile-c-support.c:118 -msgid "" -"The loaded version of GCC does not support the required version of the API." -msgstr "" - -#: compile/compile-c-support.c:355 compile/compile-c-support.c:379 -#: compile/compile-c-support.c:480 -msgid "Unknown compiler scope reached." -msgstr "" - -#: compile/compile-loc2c.c:99 -msgid "inconsistent stack depths" -msgstr "" - -#: compile/compile-loc2c.c:362 compile/compile-loc2c.c:1108 -#, possible-c-format -msgid "unhandled DWARF op: %s" -msgstr "" - -#: compile/compile-loc2c.c:876 dwarf2loc.c:3126 -msgid "No block found for address" -msgstr "" - -#: compile/compile-loc2c.c:881 dwarf2loc.c:3131 +#: compile/compile-loc2c.c:883 dwarf2/loc.c:3288 msgid "No function found for block" msgstr "" -#: compile/compile-loc2c.c:958 dwarf2loc.c:3188 +#: compile/compile-loc2c.c:960 dwarf2/loc.c:3346 #, possible-c-format msgid "Unsupported size %d in %s" msgstr "" @@ -7896,31 +7914,31 @@ msgid "Max number of complaints about incorrect symbols is %s.\n" msgstr "" -#: complaints.c:81 +#: complaints.c:82 msgid "Set max number of complaints about incorrect symbols." msgstr "" -#: complaints.c:82 +#: complaints.c:83 msgid "Show max number of complaints about incorrect symbols." msgstr "" -#: completer.c:1593 +#: completer.c:1685 msgid "Max completions reached." msgstr "" -#: completer.c:2361 +#: completer.c:2520 msgid "*** List may be truncated, max-completions reached. ***" msgstr "" -#: completer.c:2942 +#: completer.c:3102 msgid "Set maximum number of completion candidates." msgstr "" -#: completer.c:2943 +#: completer.c:3103 msgid "Show maximum number of completion candidates." msgstr "" -#: completer.c:2944 +#: completer.c:3104 msgid "" "Use this to limit the number of candidates considered\n" "during completion. Specifying \"unlimited\" or -1\n" @@ -7928,11 +7946,11 @@ "a very large limit can make completion slow." msgstr "" -#: copying.c:647 copying.c:655 +#: copying.c:648 copying.c:656 msgid "Conditions for redistributing copies of GDB." msgstr "" -#: copying.c:650 copying.c:657 +#: copying.c:651 copying.c:658 msgid "Various kinds of warranty you do not have." msgstr "" @@ -7952,22 +7970,22 @@ #. Actually, address between memaddr and memaddr + len was out of #. bounds. -#: corefile.c:167 +#: corefile.c:166 #, possible-c-format msgid "Cannot access memory at address %s" msgstr "" -#: corefile.c:170 +#: corefile.c:169 #, possible-c-format msgid "Memory at address %s unavailable." msgstr "" -#: corefile.c:429 +#: corefile.c:401 #, possible-c-format msgid "The current BFD target is \"%s\".\n" msgstr "" -#: corefile.c:487 +#: corefile.c:459 msgid "" "Use FILE as core dump for examining memory and registers.\n" "Usage: core-file FILE\n" @@ -7975,52 +7993,72 @@ "`target core' and `detach' commands." msgstr "" -#: corefile.c:496 +#: corefile.c:468 msgid "Set the current BFD target." msgstr "" -#: corefile.c:497 +#: corefile.c:469 msgid "Show the current BFD target." msgstr "" -#: corefile.c:498 +#: corefile.c:470 msgid "Use `set gnutarget auto' to specify automatic detection." msgstr "" -#: corelow.c:59 +#: corelow.c:61 msgid "Local core dump file" msgstr "" -#: corelow.c:60 +#: corelow.c:62 msgid "" "Use a core file as a target.\n" "Specify the filename of the core file." msgstr "" -#: corelow.c:147 record-full.c:932 +#: corelow.c:161 +#, possible-c-format +msgid "\"%s\": Core file format not supported" +msgstr "" + +#: corelow.c:168 record-full.c:933 #, possible-c-format msgid "\"%s\": Can't find sections: %s" msgstr "" -#: corelow.c:220 +#: corelow.c:236 #, possible-c-format -msgid "\"%s\": ambiguous core format, %d handlers match" +msgid "Can't open file %s during file-backed mapping note processing" msgstr "" -#: corelow.c:224 +#. If we get here, there's a good chance that it's due to +#. an internal error. We issue a warning instead of an +#. internal error because of the possibility that the +#. file was removed in between checking for its +#. existence during the expansion in exec_file_find() +#. and the calls to bfd_openr() / bfd_check_format(). +#. Output both the path from the core file note along +#. with its expansion to make debugging this problem +#. easier. +#: corelow.c:257 #, possible-c-format -msgid "\"%s\": no core file handler recognizes format" +msgid "" +"Can't open file %s which was expanded to %s during file-backed mapping note " +"processing" msgstr "" -#: corelow.c:331 +#: corelow.c:274 +msgid "Can't make section" +msgstr "" + +#: corelow.c:371 msgid "No core file now.\n" msgstr "" -#: corelow.c:390 +#: corelow.c:430 msgid "No core file specified. (Use `detach' to stop debugging a core file.)" msgstr "" -#: corelow.c:393 +#: corelow.c:433 msgid "No core file specified." msgstr "" @@ -8028,49 +8066,65 @@ #. FIXME: should be checking for errors from bfd_close (for one #. thing, on error it does not free all the storage associated #. with the bfd). -#: corelow.c:423 +#: corelow.c:461 #, possible-c-format msgid "\"%s\" is not a core dump: %s" msgstr "" -#: corelow.c:502 +#: corelow.c:539 #, possible-c-format msgid "Core was generated by `%s'.\n" msgstr "" -#: corelow.c:524 +#: corelow.c:561 #, possible-c-format -msgid "Program terminated with signal %s, %s.\n" +msgid "Program terminated with signal %s, %s" +msgstr "" + +#: corelow.c:565 tracepoint.c:1861 +msgid ".\n" msgstr "" -#: corelow.c:607 +#: corelow.c:645 #, possible-c-format msgid "Couldn't find %s registers in core file." msgstr "" -#: corelow.c:615 +#: corelow.c:653 #, possible-c-format msgid "Section `%s' in core file too small." msgstr "" -#: corelow.c:621 +#: corelow.c:659 #, possible-c-format msgid "Unexpected size of section `%s' in core file." msgstr "" -#: corelow.c:629 +#: corelow.c:667 #, possible-c-format msgid "Couldn't read %s registers from `%s' section in core file." msgstr "" -#: corelow.c:777 +#: corelow.c:884 msgid "Couldn't read NT_AUXV note in core file." msgstr "" -#: corelow.c:812 +#: corelow.c:919 msgid "Couldn't read StackGhost cookie in core file." msgstr "" +#. No output for summary mode. +#: corelow.c:1121 fbsd-tdep.c:1133 linux-tdep.c:839 linux-tdep.c:1172 +#: nbsd-tdep.c:528 procfs.c:3287 +msgid "" +"Mapped address spaces:\n" +"\n" +msgstr "" + +#: corelow.c:1190 +msgid "Print core file's file-backed mappings." +msgstr "" + #: cp-abi.c:39 msgid "ABI doesn't define required function is_constructor_name" msgstr "" @@ -8115,11 +8169,11 @@ msgid "GDB cannot find the type name from a std::type_info on this target" msgstr "" -#: cp-abi.c:253 +#: cp-abi.c:255 msgid "Too many C++ ABIs, please increase CP_ABI_MAX in cp-abi.c" msgstr "" -#: cp-abi.c:271 +#: cp-abi.c:273 #, possible-c-format msgid "Cannot find C++ ABI \"%s\" to set it as auto default." msgstr "" @@ -8129,13 +8183,13 @@ msgid "Could not find \"%s\" in ABI list" msgstr "" -#: cp-abi.c:400 +#: cp-abi.c:401 msgid "" "Set the ABI used for inspecting C++ objects.\n" "\"set cp-abi\" with no arguments will list the available ABIs." msgstr "" -#: cp-abi.c:407 +#: cp-abi.c:408 msgid "Show the ABI used for inspecting C++ objects." msgstr "" @@ -8169,21 +8223,21 @@ msgid "The `maint namespace' command was removed.\n" msgstr "" -#: cp-namespace.c:1071 +#: cp-namespace.c:1072 msgid "Deprecated placeholder for removed functionality." msgstr "" -#: cp-support.c:576 +#: cp-support.c:645 #, possible-c-format msgid "internal error: string \"%s\" failed to be canonicalized" msgstr "" -#: cp-support.c:1442 +#: cp-support.c:1509 #, possible-c-format msgid "RTTI symbol not found for class '%s'" msgstr "" -#: cp-support.c:1448 +#: cp-support.c:1515 #, possible-c-format msgid "RTTI symbol for class '%s' is not a type" msgstr "" @@ -8192,48 +8246,44 @@ #. symbols for namespaces with the same name as the struct. #. This warning is an indication of a bug in the lookup order #. or a bug in the way that the symbol tables are populated. -#: cp-support.c:1463 +#: cp-support.c:1530 #, possible-c-format msgid "RTTI symbol for class '%s' is a namespace" msgstr "" -#: cp-support.c:1466 +#: cp-support.c:1533 #, possible-c-format msgid "RTTI symbol for class '%s' has bad type" msgstr "" -#: cp-support.c:1515 +#: cp-support.c:1582 #, possible-c-format msgid "unable to demangle '%s' (demangler failed with signal %d)" msgstr "" -#: cp-support.c:1529 +#: cp-support.c:1596 #, possible-c-format msgid "" "%s\n" "Attempting to dump core.\n" msgstr "" -#: cp-support.c:2031 +#: cp-support.c:2088 #, possible-c-format msgid "" "%s:%d: make-paramless self-test failed: (completion=%d) \"%s\" -> %s, " "expected %s" msgstr "" -#: cp-support.c:2126 -msgid "\"maintenance cplus\" must be followed by the name of a command.\n" -msgstr "" - -#: cp-support.c:2171 +#: cp-support.c:2216 msgid "C++ maintenance commands." msgstr "" -#: cp-support.c:2182 +#: cp-support.c:2227 msgid "Print the first class/namespace component of NAME." msgstr "" -#: cp-support.c:2186 +#: cp-support.c:2231 msgid "" "Show the virtual function table for a C++ object.\n" "Usage: info vtbl EXPRESSION\n" @@ -8241,98 +8291,98 @@ "resulting object." msgstr "" -#: cp-support.c:2193 +#: cp-support.c:2238 msgid "Set whether to attempt to catch demangler crashes." msgstr "" -#: cp-support.c:2194 +#: cp-support.c:2239 msgid "Show whether to attempt to catch demangler crashes." msgstr "" -#: cp-support.c:2195 +#: cp-support.c:2240 msgid "" "If enabled GDB will attempt to catch demangler crashes and\n" "display the offending symbol." msgstr "" -#: cp-valprint.c:281 p-valprint.c:634 valprint.c:351 +#: cp-valprint.c:277 p-valprint.c:617 valprint.c:353 msgid "<synthetic pointer>" msgstr "" -#: cp-valprint.c:641 cp-valprint.c:673 p-valprint.c:868 +#: cp-valprint.c:581 cp-valprint.c:609 p-valprint.c:842 msgid "<same as static member of an already seen type>" msgstr "" -#: cris-tdep.c:283 i386-linux-tdep.c:315 +#: cris-tdep.c:284 i386-gnu-tdep.c:123 i386-linux-tdep.c:316 msgid "Couldn't recognize signal trampoline." msgstr "" #. Invalid (unimplemented) register. Should not happen as there are #. no unimplemented CRISv32 registers. -#: cris-tdep.c:1595 +#: cris-tdep.c:1596 #, possible-c-format msgid "crisv32_register_type: unknown regno %d" msgstr "" -#: cris-tdep.c:1629 +#: cris-tdep.c:1630 msgid "cris_store_return_value: type length too large." msgstr "" -#: cris-tdep.c:1797 +#: cris-tdep.c:1798 msgid "cris_extract_return_value: type length too large" msgstr "" #. Could not find a target. Things are likely to go downhill #. from here. -#: cris-tdep.c:2040 +#: cris-tdep.c:2041 msgid "CRIS software single step could not find a step target." msgstr "" -#: cris-tdep.c:3807 +#: cris-tdep.c:3775 msgid "wrong size gregset struct in core file" msgstr "" -#: cris-tdep.c:3840 +#: cris-tdep.c:3826 msgid "Set the current CRIS version." msgstr "" -#: cris-tdep.c:3841 +#: cris-tdep.c:3827 msgid "Show the current CRIS version." msgstr "" -#: cris-tdep.c:3842 +#: cris-tdep.c:3828 msgid "" "Set to 10 for CRISv10 or 32 for CRISv32 if autodetection fails.\n" "Defaults to 10. " msgstr "" -#: cris-tdep.c:3852 +#: cris-tdep.c:3838 msgid "Set the current CRIS mode." msgstr "" -#: cris-tdep.c:3853 +#: cris-tdep.c:3839 msgid "Show the current CRIS mode." msgstr "" -#: cris-tdep.c:3854 +#: cris-tdep.c:3840 msgid "" "Set to CRIS_MODE_GURU when debugging in guru mode.\n" "Makes GDB use the NRP register instead of the ERP register in certain cases." msgstr "" -#: cris-tdep.c:3863 +#: cris-tdep.c:3849 msgid "Set the usage of Dwarf-2 CFI for CRIS." msgstr "" -#: cris-tdep.c:3864 +#: cris-tdep.c:3850 msgid "Show the usage of Dwarf-2 CFI for CRIS." msgstr "" -#: cris-tdep.c:3865 +#: cris-tdep.c:3851 msgid "Set this to \"off\" if using gcc-cris < R59." msgstr "" -#: cris-tdep.c:3903 cris-tdep.c:3929 +#: cris-tdep.c:3887 cris-tdep.c:3913 msgid "cris_gdbarch_update: failed to update architecture." msgstr "" @@ -8341,128 +8391,128 @@ msgid "Invalid breakpoint address 0x%x is an odd number." msgstr "" -#: csky-tdep.c:2253 +#: csky-tdep.c:2254 msgid "Set C-Sky debugging." msgstr "" -#: csky-tdep.c:2254 +#: csky-tdep.c:2255 msgid "Show C-Sky debugging." msgstr "" -#: csky-tdep.c:2255 +#: csky-tdep.c:2256 msgid "When on, C-Sky specific debugging is enabled." msgstr "" -#: ctfread.c:208 +#: ctfread.c:242 #, possible-c-format msgid "An internal GDB problem: ctf_ id_t %ld type already set" msgstr "" -#: ctfread.c:342 +#: ctfread.c:376 #, possible-c-format msgid "ctf_add_member_cb: %s has NO type (%ld)" msgstr "" -#: ctfread.c:473 +#: ctfread.c:507 #, possible-c-format msgid "ctf_type_encoding read_base_type failed - %s" msgstr "" -#: ctfread.c:483 +#: ctfread.c:517 #, possible-c-format msgid "ctf_type_aname read_base_type failed - %s" msgstr "" -#: ctfread.c:530 +#: ctfread.c:564 #, possible-c-format msgid "read_base_type: unsupported base kind (%d)" msgstr "" -#: ctfread.c:594 +#: ctfread.c:628 #, possible-c-format msgid "ctf_member_iter process_struct_members failed - %s" msgstr "" -#: ctfread.c:675 +#: ctfread.c:709 #, possible-c-format msgid "ctf_enum_iter process_enum_type failed - %s" msgstr "" -#: ctfread.c:726 +#: ctfread.c:760 #, possible-c-format msgid "ctf_array_info read_array_type failed - %s" msgstr "" -#: ctfread.c:769 +#: ctfread.c:803 #, possible-c-format msgid "read_const_type: NULL base type (%ld)" msgstr "" -#: ctfread.c:793 +#: ctfread.c:827 #, possible-c-format msgid "read_volatile_type: NULL base type (%ld)" msgstr "" -#: ctfread.c:819 +#: ctfread.c:853 #, possible-c-format msgid "read_restrict_type: NULL base type (%ld)" msgstr "" -#: ctfread.c:864 +#: ctfread.c:898 #, possible-c-format msgid "read_pointer_type: NULL target type (%ld)" msgstr "" -#: ctfread.c:1040 +#: ctfread.c:1074 #, possible-c-format msgid "ctf_add_var_cb: %s has NO type (%ld)" msgstr "" -#: ctfread.c:1052 +#: ctfread.c:1086 #, possible-c-format msgid "ctf_add_var_cb: kind unsupported (%d)" msgstr "" -#: ctfread.c:1210 +#: ctfread.c:1233 #, possible-c-format msgid "ctf_type_iter psymtab_to_symtab failed - %s" msgstr "" -#: ctfread.c:1216 +#: ctfread.c:1239 #, possible-c-format msgid "ctf_variable_iter psymtab_to_symtab failed - %s" msgstr "" -#: ctfread.c:1246 dwarf2read.c:9513 +#: ctfread.c:1269 #, possible-c-format msgid "bug: psymtab for %s is already read in." msgstr "" -#: ctfread.c:1251 +#: ctfread.c:1274 #, possible-c-format msgid "Reading in CTF data for %s..." msgstr "" -#: ctfread.c:1270 dwarf2read.c:9544 mdebugread.c:295 +#: ctfread.c:1293 msgid "done.\n" msgstr "" -#: ctfread.c:1405 +#: ctfread.c:1416 #, possible-c-format msgid "ctf_type_iter scan_partial_symbols failed - %s" msgstr "" -#: ctfread.c:1409 +#: ctfread.c:1420 #, possible-c-format msgid "ctf_variable_iter scan_partial_symbols failed - %s" msgstr "" -#: ctfread.c:1469 +#: ctfread.c:1480 #, possible-c-format msgid "ctf_bfdopen failed on %s - %s" msgstr "" -#: ctfread.c:1474 +#: ctfread.c:1485 #, possible-c-format msgid "ctf_arc_open_by_name failed on %s - %s" msgstr "" @@ -8904,254 +8954,254 @@ msgid "Parameter is saved, host or none" msgstr "" -#: darwin-nat-info.c:845 +#: darwin-nat-info.c:846 msgid "Get list of tasks in system." msgstr "" -#: darwin-nat-info.c:847 +#: darwin-nat-info.c:848 msgid "Get list of ports in a task." msgstr "" -#: darwin-nat-info.c:849 +#: darwin-nat-info.c:850 msgid "Get info on a specific port." msgstr "" -#: darwin-nat-info.c:851 +#: darwin-nat-info.c:852 msgid "Get info on a specific task." msgstr "" -#: darwin-nat-info.c:853 +#: darwin-nat-info.c:854 msgid "Get list of threads in a task." msgstr "" -#: darwin-nat-info.c:855 +#: darwin-nat-info.c:856 msgid "Get info on a specific thread." msgstr "" -#: darwin-nat-info.c:858 +#: darwin-nat-info.c:859 msgid "Get information on all mach region for the task." msgstr "" -#: darwin-nat-info.c:860 +#: darwin-nat-info.c:861 msgid "Get information on all mach sub region for the task." msgstr "" -#: darwin-nat-info.c:862 +#: darwin-nat-info.c:863 msgid "Get information on mach region at given address." msgstr "" -#: darwin-nat-info.c:865 +#: darwin-nat-info.c:866 msgid "Disp mach exceptions." msgstr "" -#: darwin-nat.c:176 +#: darwin-nat.c:172 #, possible-c-format msgid "[%d inferior]: " msgstr "" -#: darwin-nat.c:188 +#: darwin-nat.c:184 msgid "[UNKNOWN]" msgstr "" -#: darwin-nat.c:190 +#: darwin-nat.c:186 #, possible-c-format msgid "Mach error at \"%s:%u\" in function \"%s\": %s (0x%lx)" msgstr "" -#: darwin-nat.c:222 +#: darwin-nat.c:218 #, c-format msgid "unknown (%d)" msgstr "" -#: darwin-nat.c:247 +#: darwin-nat.c:243 #, possible-c-format msgid "ptrace (%s, %d, 0x%lx, %d): %d (%s)\n" msgstr "" -#: darwin-nat.c:249 +#: darwin-nat.c:245 msgid "no error" msgstr "" -#: darwin-nat.c:325 +#: darwin-nat.c:321 #, possible-c-format msgid " new_ix:%d/%d, old_ix:%d/%d, new_id:0x%x old_id:0x%x\n" msgstr "" -#: darwin-nat.c:485 +#: darwin-nat.c:462 msgid "message header:\n" msgstr "" -#: darwin-nat.c:486 +#: darwin-nat.c:463 #, possible-c-format msgid " bits: 0x%x\n" msgstr "" -#: darwin-nat.c:487 +#: darwin-nat.c:464 #, possible-c-format msgid " size: 0x%x\n" msgstr "" -#: darwin-nat.c:488 +#: darwin-nat.c:465 #, possible-c-format msgid " remote-port: 0x%x\n" msgstr "" -#: darwin-nat.c:489 +#: darwin-nat.c:466 #, possible-c-format msgid " local-port: 0x%x\n" msgstr "" -#: darwin-nat.c:490 +#: darwin-nat.c:467 #, possible-c-format msgid " reserved: 0x%x\n" msgstr "" -#: darwin-nat.c:491 +#: darwin-nat.c:468 #, possible-c-format msgid " id: 0x%x\n" msgstr "" -#: darwin-nat.c:510 +#: darwin-nat.c:487 #, possible-c-format msgid "body: descriptor_count=%u\n" msgstr "" -#: darwin-nat.c:519 +#: darwin-nat.c:496 #, possible-c-format msgid " descr %d: type=%u (port) name=0x%x, dispo=%d\n" msgstr "" -#: darwin-nat.c:523 +#: darwin-nat.c:500 #, possible-c-format msgid " descr %d: type=%u\n" msgstr "" -#: darwin-nat.c:533 +#: darwin-nat.c:510 #, possible-c-format msgid "NDR: mig=%02x if=%02x encod=%02x int=%02x char=%02x float=%02x\n" msgstr "" -#: darwin-nat.c:541 +#: darwin-nat.c:518 msgid " data:" msgstr "" -#: darwin-nat.c:694 +#: darwin-nat.c:671 #, possible-c-format msgid "darwin_decode_exception_message: unknown task 0x%x\n" msgstr "" -#: darwin-nat.c:842 +#: darwin-nat.c:819 #, possible-c-format msgid "darwin_resume_thread: state=%d, thread=0x%x, step=%d nsignal=%d\n" msgstr "" -#: darwin-nat.c:855 +#: darwin-nat.c:832 #, possible-c-format msgid "ptrace THUP: res=%d\n" msgstr "" -#: darwin-nat.c:862 +#: darwin-nat.c:839 #, possible-c-format msgid "darwin_resume_thread: kill 0x%x %d: %d\n" msgstr "" #. Set or reset single step. -#: darwin-nat.c:868 +#: darwin-nat.c:845 #, possible-c-format msgid "darwin_set_sstep (thread=0x%x, enable=%d)\n" msgstr "" -#: darwin-nat.c:951 +#: darwin-nat.c:911 #, possible-c-format msgid "darwin_resume: pid=%d, tid=0x%lx, step=%d, signal=%d\n" msgstr "" -#: darwin-nat.c:1025 +#: darwin-nat.c:983 #, possible-c-format msgid "darwin_wait: ill-formatted message (id=0x%x)\n" msgstr "" -#: darwin-nat.c:1045 +#: darwin-nat.c:1003 #, possible-c-format msgid "darwin_wait: thread=0x%x, got %s\n" msgstr "" -#: darwin-nat.c:1068 +#: darwin-nat.c:1026 #, possible-c-format msgid " (signal %d: %s)\n" msgstr "" -#: darwin-nat.c:1109 +#: darwin-nat.c:1067 #, possible-c-format msgid "darwin_wait: ill-formatted message (id=0x%x, res=%d)\n" msgstr "" -#: darwin-nat.c:1134 +#: darwin-nat.c:1092 #, possible-c-format msgid "wait4: res=%d: %s\n" msgstr "" -#: darwin-nat.c:1150 +#: darwin-nat.c:1108 #, possible-c-format msgid "darwin_wait: pid=%d exit, status=0x%x\n" msgstr "" -#: darwin-nat.c:1161 +#: darwin-nat.c:1118 #, possible-c-format msgid "darwin_wait: pid=%d\n" msgstr "" #. Unknown message. -#: darwin-nat.c:1170 +#: darwin-nat.c:1127 #, possible-c-format msgid "darwin: got unknown message, id: 0x%x" msgstr "" -#: darwin-nat.c:1220 +#: darwin-nat.c:1176 #, possible-c-format msgid "darwin_wait: waiting for a message pid=%d thread=%lx\n" msgstr "" -#: darwin-nat.c:1256 +#: darwin-nat.c:1212 #, possible-c-format msgid "mach_msg: ret=0x%x\n" msgstr "" -#: darwin-nat.c:1293 +#: darwin-nat.c:1254 #, possible-c-format msgid "darwin_wait: mach_msg(pending) ret=0x%x\n" msgstr "" -#: darwin-nat.c:1315 +#: darwin-nat.c:1277 #, possible-c-format msgid "darwin_wait: thread 0x%x hit a non-gdb breakpoint\n" msgstr "" -#: darwin-nat.c:1319 +#: darwin-nat.c:1281 msgid "darwin_wait: unhandled pending message\n" msgstr "" -#: darwin-nat.c:1437 +#: darwin-nat.c:1399 #, possible-c-format msgid "cannot kill: %s" msgstr "" -#: darwin-nat.c:1507 +#: darwin-nat.c:1469 #, possible-c-format msgid "Unable to save exception ports, task_get_exception_portsreturned: %d" msgstr "" -#: darwin-nat.c:1519 +#: darwin-nat.c:1481 #, possible-c-format msgid "Unable to set exception ports, task_set_exception_portsreturned: %d" msgstr "" -#: darwin-nat.c:1570 +#: darwin-nat.c:1532 #, possible-c-format msgid "Failed to kill inferior: kill (%d, 9) returned [%s]" msgstr "" -#: darwin-nat.c:1589 +#: darwin-nat.c:1551 #, possible-c-format msgid "" "Termination notification request failed, mach_port_request_notification\n" @@ -9161,95 +9211,95 @@ #. This is unexpected, as there should not be any previously #. registered notification request. But this is not a fatal #. issue, so just emit a warning. -#: darwin-nat.c:1598 +#: darwin-nat.c:1560 msgid "" "A task termination request was registered before the debugger registered\n" "its own. This is unexpected, but should otherwise not have any actual\n" "impact on the debugging session." msgstr "" -#: darwin-nat.c:1627 +#: darwin-nat.c:1589 #, possible-c-format msgid "" "Unable to find Mach task port for process-id %d: %s (0x%lx).\n" " (please check gdb is codesigned - see taskgated(8))" msgstr "" -#: darwin-nat.c:1632 +#: darwin-nat.c:1594 #, possible-c-format msgid "inferior task: 0x%x, pid: %d\n" msgstr "" -#: darwin-nat.c:1641 +#: darwin-nat.c:1603 #, possible-c-format msgid "Unable to create exception port, mach_port_allocate returned: %d" msgstr "" -#: darwin-nat.c:1649 +#: darwin-nat.c:1611 #, possible-c-format msgid "Unable to create exception port, mach_port_insert_right returned: %d" msgstr "" -#: darwin-nat.c:1657 +#: darwin-nat.c:1619 #, possible-c-format msgid "Unable to create port set, mach_port_allocate returned: %d" msgstr "" -#: darwin-nat.c:1664 +#: darwin-nat.c:1626 #, possible-c-format msgid "" "Unable to move exception port into new port set, mach_port_move_member\n" "returned: %d" msgstr "" -#: darwin-nat.c:1674 +#: darwin-nat.c:1636 #, possible-c-format msgid "Unable to create notification port, mach_port_allocate returned: %d" msgstr "" -#: darwin-nat.c:1681 +#: darwin-nat.c:1643 #, possible-c-format msgid "" "Unable to move notification port into new port set, mach_port_move_member\n" "returned: %d" msgstr "" -#: darwin-nat.c:1753 +#: darwin-nat.c:1715 #, possible-c-format msgid "unable to read from pipe, read returned: %d" msgstr "" -#: darwin-nat.c:1779 +#: darwin-nat.c:1741 #, possible-c-format msgid "unable to create a pipe: %s" msgstr "" -#: darwin-nat.c:1867 +#: darwin-nat.c:1829 #, possible-c-format msgid "Could not open shell (%s) for reading: %s" msgstr "" -#: darwin-nat.c:1872 +#: darwin-nat.c:1834 #, possible-c-format msgid "Could not make cache directory \"%s\": %s" msgstr "" -#: darwin-nat.c:1880 +#: darwin-nat.c:1842 #, possible-c-format msgid "Could not open temporary file \"%s\" for writing: %s" msgstr "" -#: darwin-nat.c:1885 +#: darwin-nat.c:1847 #, possible-c-format msgid "Could not copy shell to cache as \"%s\": %s" msgstr "" -#: darwin-nat.c:1891 +#: darwin-nat.c:1853 #, possible-c-format msgid "Could not rename shell cache file to \"%s\": %s" msgstr "" -#: darwin-nat.c:1920 +#: darwin-nat.c:1882 #, possible-c-format msgid "" "This version of macOS has System Integrity Protection.\n" @@ -9257,7 +9307,7 @@ "but because your shell (%s) is not an absolute path, this is being skipped." msgstr "" -#: darwin-nat.c:1930 +#: darwin-nat.c:1892 #, possible-c-format msgid "" "This version of macOS has System Integrity Protection.\n" @@ -9266,7 +9316,7 @@ "The error was: %s" msgstr "" -#: darwin-nat.c:1956 +#: darwin-nat.c:1918 #, possible-c-format msgid "" "This version of macOS has System Integrity Protection.\n" @@ -9278,7 +9328,7 @@ " set startup-with-shell off" msgstr "" -#: darwin-nat.c:1967 +#: darwin-nat.c:1929 #, possible-c-format msgid "" "Note: this version of macOS has System Integrity Protection.\n" @@ -9287,113 +9337,113 @@ " %s\n" msgstr "" -#: darwin-nat.c:1994 +#: darwin-nat.c:1957 msgid "startup-with-shell is now temporarily disabled" msgstr "" #. Trying to masturbate? -#: darwin-nat.c:2044 gnu-nat.c:2205 inf-ptrace.c:200 +#: darwin-nat.c:2011 gnu-nat.c:2175 inf-ptrace.c:140 msgid "I refuse to debug myself!" msgstr "" -#: darwin-nat.c:2051 inf-ptrace.c:216 remote.c:5798 +#: darwin-nat.c:2018 inf-ptrace.c:156 remote.c:5877 #, possible-c-format msgid "Attaching to program: %s, %s\n" msgstr "" -#: darwin-nat.c:2054 inf-ptrace.c:219 procfs.c:1889 remote.c:5801 +#: darwin-nat.c:2021 inf-ptrace.c:159 procfs.c:1786 remote.c:5880 #, possible-c-format msgid "Attaching to %s\n" msgstr "" -#: darwin-nat.c:2059 +#: darwin-nat.c:2026 #, possible-c-format msgid "Can't attach to process %d: %s (%d)" msgstr "" -#: darwin-nat.c:2111 +#: darwin-nat.c:2077 #, possible-c-format msgid "Unable to detach from process-id %d: %s (%d)" msgstr "" -#: darwin-nat.c:2132 +#: darwin-nat.c:2098 #, possible-c-format msgid "Thread 0x%lx of process %u" msgstr "" -#: darwin-nat.c:2158 +#: darwin-nat.c:2124 #, possible-c-format msgid "darwin_read_write_inferior(task=0x%x, %s, len=%s)\n" msgstr "" -#: darwin-nat.c:2175 +#: darwin-nat.c:2141 #, possible-c-format msgid "darwin_read_write_inferior: mach_vm_read failed at %s: %s" msgstr "" -#: darwin-nat.c:2205 +#: darwin-nat.c:2171 #, possible-c-format msgid "darwin_read_write_inferior: mach_vm_region_recurse failed at %s: %s\n" msgstr "" -#: darwin-nat.c:2213 +#: darwin-nat.c:2179 #, possible-c-format msgid "" "darwin_read_write_inferior: mach_vm_region_recurse addr=%s, start=%s, len=" "%s\n" msgstr "" -#: darwin-nat.c:2222 +#: darwin-nat.c:2188 #, possible-c-format msgid "No memory at %s (vs %s+0x%x). Nothing written" msgstr "" -#: darwin-nat.c:2249 +#: darwin-nat.c:2215 #, possible-c-format msgid "" "darwin_read_write_inferior: mach_vm_protect failed at %s (len=0x%lx, prot=0x" "%x): %s" msgstr "" -#: darwin-nat.c:2268 +#: darwin-nat.c:2234 #, possible-c-format msgid "darwin_read_write_inferior: mach_vm_write failed: %s" msgstr "" -#: darwin-nat.c:2280 +#: darwin-nat.c:2246 #, possible-c-format msgid "" "darwin_read_write_inferior: mach_vm_protect restore failed at %s (len=0x" "%lx): %s" msgstr "" -#: darwin-nat.c:2340 +#: darwin-nat.c:2306 #, possible-c-format msgid "darwin_xfer_partial(%s, %s, rbuf=%s, wbuf=%s) pid=%u\n" msgstr "" -#: darwin-nat.c:2501 +#: darwin-nat.c:2468 #, possible-c-format msgid "GDB task: 0x%lx, pid: %d\n" msgstr "" -#: darwin-nat.c:2505 +#: darwin-nat.c:2472 msgid "Set if printing inferior communication debugging statements." msgstr "" -#: darwin-nat.c:2506 +#: darwin-nat.c:2473 msgid "Show if printing inferior communication debugging statements." msgstr "" -#: darwin-nat.c:2512 +#: darwin-nat.c:2479 msgid "Set if mach exceptions are caught." msgstr "" -#: darwin-nat.c:2513 +#: darwin-nat.c:2480 msgid "Show if mach exceptions are caught." msgstr "" -#: darwin-nat.c:2514 +#: darwin-nat.c:2481 msgid "" "When this mode is on, all low level exceptions are reported before being\n" "reported by the kernel." @@ -9401,7 +9451,7 @@ #. If we haven't found it yet, ignore it. It's #. probably some new type we don't know about yet. -#: dbxread.c:175 mdebugread.c:3339 +#: dbxread.c:175 mdebugread.c:3319 #, possible-c-format msgid "unknown symbol type %s" msgstr "" @@ -9438,19 +9488,19 @@ msgid "bad string table offset in symbol %d" msgstr "" -#: dbxread.c:943 mdebugread.c:2225 xcoffread.c:2161 +#: dbxread.c:943 mdebugread.c:2210 xcoffread.c:2107 #, possible-c-format msgid "function `%s' appears to be defined outside of all compilation units" msgstr "" -#: dbxread.c:1181 +#: dbxread.c:1179 #, possible-c-format msgid "string table offset backs up at %d" msgstr "" #. FIXME: we should not get here without a PST to work on. #. Attempt to recover. -#: dbxread.c:1326 +#: dbxread.c:1324 #, possible-c-format msgid "N_BINCL %s not in entries for any file, at symtab pos %d" msgstr "" @@ -9475,12 +9525,12 @@ #. certainly don't want to spend the time searching to #. the end of every string looking for a #. backslash. -#: dbxread.c:1751 mdebugread.c:3275 xcoffread.c:2868 +#: dbxread.c:1747 mdebugread.c:3255 xcoffread.c:2809 #, possible-c-format msgid "unknown symbol descriptor `%c'" msgstr "" -#: dbxread.c:2245 +#: dbxread.c:2199 msgid "First symbol in segment of executable not a source symbol" msgstr "" @@ -9488,39 +9538,37 @@ #. 2000 would output N_LSYM entries after N_LBRAC #. entries. As a consequence, these symbols are simply #. discarded. Complain if this is the case. -#: dbxread.c:2517 +#: dbxread.c:2471 msgid "" "misplaced N_LBRAC entry; discarding local symbols which have no enclosing " "block" msgstr "" -#: dbxread.c:2537 +#: dbxread.c:2491 msgid "block start larger than block end" msgstr "" -#: dbxread.c:2720 exec.c:521 exec.c:787 gdbsupport/print-utils.c:77 -#: gdbsupport/print-utils.c:120 gdbsupport/print-utils.c:288 mdebugread.c:3597 -#: printcmd.c:1013 printcmd.c:2706 psymtab.c:695 psymtab.c:708 target.c:647 -#: ui-out.c:782 utils.c:1583 valprint.c:1367 +#: dbxread.c:2674 printcmd.c:1009 printcmd.c:2651 target.c:661 ui-out.c:782 +#: valprint.c:1264 msgid "failed internal consistency check" msgstr "" -#: dbxread.c:2810 +#: dbxread.c:2763 #, possible-c-format msgid "unmatched N_LBRAC before symtab pos %d" msgstr "" -#: dbxread.c:2956 dbxread.c:3049 dbxread.c:3143 +#: dbxread.c:2909 dbxread.c:3002 dbxread.c:3096 #, possible-c-format msgid "ridiculous string table size: %d bytes" msgstr "" -#: dbxread.c:3122 +#: dbxread.c:3075 #, possible-c-format msgid "stabsect_build_psymtabs: Found stabs (%s), but not string section (%s)" msgstr "" -#: dbxread.c:3130 +#: dbxread.c:3083 #, possible-c-format msgid "Can't find %s section in symbol file" msgstr "" @@ -9571,15 +9619,15 @@ msgid "Invalid dcache line size: %u (must be power of 2)." msgstr "" -#: dcache.c:691 +#: dcache.c:678 msgid "Set cache use for remote targets." msgstr "" -#: dcache.c:692 +#: dcache.c:679 msgid "Show cache use for remote targets." msgstr "" -#: dcache.c:693 +#: dcache.c:680 msgid "" "This used to enable the data cache for remote targets. The cache\n" "functionality is now controlled by the memory region system and the\n" @@ -9587,7 +9635,7 @@ "exists only for compatibility reasons." msgstr "" -#: dcache.c:703 +#: dcache.c:690 msgid "" "Print information on the dcache performance.\n" "Usage: info dcache [LINENUMBER]\n" @@ -9596,31 +9644,40 @@ "the contents of the given line." msgstr "" -#: dcache.c:710 +#: dcache.c:697 msgid "Use this command to set number of lines in dcache and line-size." msgstr "" -#. allow_unknown -#: dcache.c:713 +#: dcache.c:701 msgid "Show dcachesettings." msgstr "" -#: dcache.c:718 +#: dcache.c:707 msgid "Set dcache line size in bytes (must be power of 2)." msgstr "" -#: dcache.c:719 +#: dcache.c:708 msgid "Show dcache line size." msgstr "" -#: dcache.c:726 +#: dcache.c:715 msgid "Set number of dcache lines." msgstr "" -#: dcache.c:727 +#: dcache.c:716 msgid "Show number of dcache lines." msgstr "" +#: debuginfod-support.c:120 +#, possible-c-format +msgid "Download failed: %s. Continuing without source file %ps.\n" +msgstr "" + +#: debuginfod-support.c:153 +#, possible-c-format +msgid "Download failed: %s. Continuing without debug info for %ps.\n" +msgstr "" + #: dicos-tdep.c:82 dicos-tdep.c:96 #, possible-c-format msgid "Can't read elf symbols from %s: %s" @@ -9640,33 +9697,33 @@ msgid "--- no source info for this pc ---\n" msgstr "" -#: disasm.c:948 +#: disasm.c:955 msgid "'set disassembler-options ...' is not supported on this architecture.\n" msgstr "" -#: disasm.c:985 +#: disasm.c:992 #, possible-c-format msgid "Invalid disassembler option value: '%s'.\n" msgstr "" -#: disasm.c:1015 +#: disasm.c:1022 #, possible-c-format msgid "" "The current disassembler options are '%s'\n" "\n" msgstr "" -#: disasm.c:1022 +#: disasm.c:1029 msgid "There are no disassembler options available for this architecture.\n" msgstr "" -#: disasm.c:1030 +#: disasm.c:1037 msgid "" "The following disassembler options are supported for use with the\n" "'set disassembler-options OPTION [,OPTION]...' command:\n" msgstr "" -#: disasm.c:1091 +#: disasm.c:1098 #, possible-c-format msgid "" "\n" @@ -9674,7 +9731,7 @@ " " msgstr "" -#: disasm.c:1138 +#: disasm.c:1146 msgid "" "Set the disassembler options.\n" "Usage: set disassembler-options OPTION [,OPTION]...\n" @@ -9682,7 +9739,7 @@ "See: 'show disassembler-options' for valid option values." msgstr "" -#: disasm.c:1141 +#: disasm.c:1149 msgid "Show the disassembler options." msgstr "" @@ -9699,21 +9756,21 @@ "report this bug." msgstr "" -#: dtrace-probe.c:780 dtrace-probe.c:804 linux-thread-db.c:1954 +#: dtrace-probe.c:779 dtrace-probe.c:803 linux-thread-db.c:1962 msgid "No inferior running" msgstr "" -#: dtrace-probe.c:813 +#: dtrace-probe.c:812 #, possible-c-format msgid "Probe %s:%s cannot be disabled: no enablers." msgstr "" -#: dtrace-probe.c:862 +#: dtrace-probe.c:861 #, possible-c-format msgid "could not obtain the contents ofsection '%s' in objfile `%s'." msgstr "" -#: dtrace-probe.c:887 +#: dtrace-probe.c:886 msgid "Enabled" msgstr "" @@ -9731,2285 +9788,2367 @@ msgid "maintenance print dummy-frames" msgstr "" -#: dummy-frame.c:438 +#: dummy-frame.c:439 msgid "Print the contents of the internal dummy-frame stack." msgstr "" -#: dwarf-index-cache.c:131 -msgid "The index cache directory name is empty, skipping store." +#: dwarf2/read.c:1238 +#, possible-c-format +msgid "The upper bound on the age of cached DWARF compilation units is %s.\n" msgstr "" -#: dwarf-index-cache.c:140 -#, possible-c-format -msgid "index cache: could not make cache directory: %s" +#: dwarf2/read.c:1734 +msgid ".debug_line section has line data without a file" msgstr "" -#: dwarf-index-cache.c:189 -msgid "The index cache directory name is empty, skipping cache lookup." +#: dwarf2/read.c:1740 +msgid ".debug_line section has line program sequence without an end" msgstr "" -#: dwarf-index-cache.c:253 -msgid "Missing arguments. See \"help set index-cache\" for help.\n" +#: dwarf2/read.c:1747 +msgid "location expression too complex" msgstr "" -#: dwarf-index-cache.c:274 +#: dwarf2/read.c:1754 #, possible-c-format -msgid "The index cache is currently %s.\n" +msgid "const value length mismatch for '%s', got %d, expected %d" msgstr "" -#: dwarf-index-cache.c:275 -msgid "enabled" +#: dwarf2/read.c:1761 +#, possible-c-format +msgid "invalid attribute class or form for '%s' in '%s'" msgstr "" -#: dwarf-index-cache.c:322 +#: dwarf2/read.c:1980 #, possible-c-format -msgid "%s Cache hits (this session): %u\n" +msgid "" +"Discarding section %s which has a section size (%s) larger than the file " +"size [in module %s]" msgstr "" -#: dwarf-index-cache.c:324 +#: dwarf2/read.c:2198 #, possible-c-format -msgid "%sCache misses (this session): %u\n" +msgid "could not read '.gnu_debugaltlink' section: %s" msgstr "" -#: dwarf-index-cache.c:339 -msgid "Couldn't determine a path for the index cache directory." +#: dwarf2/read.c:2246 elfread.c:1332 +#, possible-c-format +msgid "File \"%s\" from debuginfod cannot be opened as bfd" msgstr "" -#: dwarf-index-cache.c:343 -msgid "Set index-cache options." +#: dwarf2/read.c:2254 +#, possible-c-format +msgid "could not find '.gnu_debugaltlink' file for %s" msgstr "" -#: dwarf-index-cache.c:348 -msgid "Show index-cache options." +#: dwarf2/read.c:2738 +#, possible-c-format +msgid ".gdb_index address table has invalid range (%s - %s)" msgstr "" -#: dwarf-index-cache.c:353 -msgid "Enable the index cache." +#: dwarf2/read.c:2745 +#, possible-c-format +msgid ".gdb_index address table has invalid CU number %u" msgstr "" -#: dwarf-index-cache.c:357 -msgid "Disable the index cache." +#: dwarf2/read.c:2785 +#, possible-c-format +msgid "" +"Section .debug_aranges in %s has duplicate debug_info_offset %s, ignoring ." +"debug_aranges." msgstr "" -#: dwarf-index-cache.c:361 -msgid "Set the directory of the index cache." +#: dwarf2/read.c:2812 +#, possible-c-format +msgid "" +"Section .debug_aranges in %s entry at offset %s length %s exceeds section " +"length %s, ignoring .debug_aranges." msgstr "" -#: dwarf-index-cache.c:362 -msgid "Show the directory of the index cache." +#: dwarf2/read.c:2827 +#, possible-c-format +msgid "" +"Section .debug_aranges in %s entry at offset %s has unsupported version %d, " +"ignoring .debug_aranges." msgstr "" -#: dwarf-index-cache.c:370 -msgid "Show some stats about the index cache." +#: dwarf2/read.c:2841 +#, possible-c-format +msgid "" +"Section .debug_aranges in %s entry at offset %s debug_info_offset %s does " +"not exists, ignoring .debug_aranges." msgstr "" -#: dwarf-index-cache.c:376 -msgid "Set display of index-cache debug messages." +#: dwarf2/read.c:2854 +#, possible-c-format +msgid "" +"Section .debug_aranges in %s entry at offset %s address_size %u is invalid, " +"ignoring .debug_aranges." msgstr "" -#: dwarf-index-cache.c:377 -msgid "Show display of index-cache debug messages." +#: dwarf2/read.c:2864 +#, possible-c-format +msgid "" +"Section .debug_aranges in %s entry at offset %s segment_selector_size %u is " +"not supported, ignoring .debug_aranges." msgstr "" -#: dwarf-index-cache.c:378 -msgid "When non-zero, debugging output for the index cache is displayed." +#: dwarf2/read.c:2881 +#, possible-c-format +msgid "" +"Section .debug_aranges in %s entry at offset %s padding is not zero, " +"ignoring .debug_aranges." msgstr "" -#: dwarf-index-write.c:78 -msgid "couldn't data write to file" +#: dwarf2/read.c:2892 +#, possible-c-format +msgid "" +"Section .debug_aranges in %s entry at offset %s address list is not properly " +"terminated, ignoring .debug_aranges." msgstr "" -#: dwarf-index-write.c:547 -msgid "" -"Ada is not currently supported by the index; use the DWARF 5 index instead" +#: dwarf2/read.c:3021 +#, possible-c-format +msgid "Skipping obsolete .gdb_index section in %s." msgstr "" -#: dwarf-index-write.c:975 +#: dwarf2/read.c:3040 #, possible-c-format -msgid "Duplicate string \"%s\" in .debug_str section [in module %s]" +msgid "" +"Skipping deprecated .gdb_index section in %s.\n" +"Do \"set use-deprecated-index-sections on\" before the file is read\n" +"to use the section anyway." msgstr "" -#: dwarf-index-write.c:1641 +#: dwarf2/read.c:3160 #, possible-c-format -msgid "Can't open `%s' for writing" +msgid "could not read '.gdb_index' section from %s; skipping" msgstr "" -#: dwarf-index-write.c:1680 -msgid "Cannot use an index to create the index" +#: dwarf2/read.c:3573 dwarf2/read.c:4736 +#, possible-c-format +msgid ".gdb_index entry has bad CU index [in module %s]" msgstr "" -#: dwarf-index-write.c:1683 -msgid "Cannot make an index when the file has multiple .debug_types sections" +#: dwarf2/read.c:3702 +#, possible-c-format +msgid " Number of read CUs: %d\n" msgstr "" -#: dwarf-index-write.c:1746 -msgid "usage: save gdb-index [-dwarf-5] DIRECTORY" +#: dwarf2/read.c:3703 +#, possible-c-format +msgid " Number of unread CUs: %d\n" msgstr "" -#: dwarf-index-write.c:1776 +#: dwarf2/read.c:4268 #, possible-c-format -msgid "Error while writing index for `%s': " +msgid "%s:%d: match_type=%s, looking-for=\"%s\", expected=\"%s\", got=\"%s\"\n" msgstr "" -#: dwarf-index-write.c:1788 -msgid "" -"Save a gdb-index file.\n" -"Usage: save gdb-index [-dwarf-5] DIRECTORY\n" -"\n" -"No options create one file with .gdb-index extension for pre-DWARF-5\n" -"compatible .gdb_index section. With -dwarf-5 creates two files with\n" -"extension .debug_names and .debug_str for DWARF-5 .debug_names section." +#: dwarf2/read.c:4914 +#, possible-c-format +msgid "(Internal error: pc %s in read in CU, but not in symtab.)" msgstr "" -#: dwarf2-frame.c:224 +#. There may be multiple per-CU indices. +#: dwarf2/read.c:5059 #, possible-c-format msgid "" -"incomplete CFI data; DW_CFA_restore unspecified\n" -"register %s (#%d) at %s" +"Section .debug_names in %s length %s does not match section length %s, " +"ignoring .debug_names." msgstr "" -#: dwarf2-frame.c:302 dwarf2expr.h:212 +#: dwarf2/read.c:5071 #, possible-c-format -msgid "%s is invalid in this context" +msgid "" +"Section .debug_names in %s has unsupported version %d, ignoring .debug_names." msgstr "" -#. This is actually invalid DWARF, but if we ever do run across -#. it somehow, we might as well support it. So, instead, report -#. it as unimplemented. -#: dwarf2-frame.c:334 +#: dwarf2/read.c:5082 +#, possible-c-format msgid "" -"Not implemented: computing unwound register using explicit value operator" +"Section .debug_names in %s has unsupported padding %d, ignoring .debug_names." msgstr "" -#: dwarf2-frame.c:462 +#: dwarf2/read.c:5103 #, possible-c-format -msgid "bad CFI data; mismatched DW_CFA_restore_state at %s" +msgid "" +"Section .debug_names in %s has unsupported %lu foreign TUs, ignoring ." +"debug_names." msgstr "" -#: dwarf2-frame.c:595 +#: dwarf2/read.c:5166 #, possible-c-format msgid "" -"Call Frame Instruction op %d in vendor extension space is not handled on " -"this architecture." +"Section .debug_names in %s has duplicate index %s, ignoring .debug_names." msgstr "" -#: dwarf2-frame.c:601 -msgid "Unknown CFI encountered." -msgstr "" - -#: dwarf2-frame.c:886 -msgid "Could not compute CFA; needed to translate this expression" -msgstr "" - -#: dwarf2-frame.c:925 dwarf2-frame.c:1076 -msgid "Unknown CFA rule." -msgstr "" - -#: dwarf2-frame.c:1128 +#: dwarf2/read.c:5195 #, possible-c-format -msgid "incomplete CFI data; unspecified registers (e.g., %s) at %s" +msgid "" +"Section .debug_names in %s has abbreviation_table of size %s vs. written as " +"%u, ignoring .debug_names." msgstr "" -#: dwarf2-frame.c:1324 -msgid "Unknown register rule." +#: dwarf2/read.c:5310 +#, possible-c-format +msgid "could not read '.debug_names' section from %s; skipping" msgstr "" -#: dwarf2-frame.c:1457 -msgid "cfa not available for record btrace target" +#: dwarf2/read.c:5458 dwarf2/read.c:5510 +#, possible-c-format +msgid "Wrong .debug_names with name index %u but name_count=%u [in module %s]" msgstr "" -#: dwarf2-frame.c:1463 -msgid "" -"can't compute CFA for this frame: required registers or memory are " -"unavailable" +#: dwarf2/read.c:5481 +#, possible-c-format +msgid "Wrong .debug_names hash for string at index %u [in module %s]" msgstr "" -#: dwarf2-frame.c:1468 -msgid "can't compute CFA for this frame: frame base not available" +#: dwarf2/read.c:5547 +#, possible-c-format +msgid "Wrong .debug_names undefined abbrev code %s [in module %s]" msgstr "" -#: dwarf2-frame.c:1543 -msgid "Unsupported address size" +#: dwarf2/read.c:5587 +#, possible-c-format +msgid "Unsupported .debug_names form %s [in module %s]" msgstr "" -#: dwarf2-frame.c:1560 -msgid "Unsupported encoding: DW_EH_PE_indirect" +#: dwarf2/read.c:5598 +#, possible-c-format +msgid ".debug_names entry has bad CU index %s [in module %s]" msgstr "" -#: dwarf2-frame.c:1593 dwarf2-frame.c:1641 -msgid "Invalid or unsupported encoding" +#: dwarf2/read.c:5610 +#, possible-c-format +msgid ".debug_names entry has bad TU index %s [in module %s]" msgstr "" -#: dwarf2-frame.c:1806 -msgid "Found a CIE when not expecting it." +#: dwarf2/read.c:6500 +#, possible-c-format +msgid "" +"debug type entry at offset %s is duplicate to the entry at offset %s, " +"signature %s" msgstr "" -#: dwarf2-frame.c:1978 -msgid "Found an FDE when not expecting it." +#: dwarf2/read.c:6914 +#, possible-c-format +msgid "" +"Dwarf Error: signature mismatch %s vs %s while reading TU at offset %s [in " +"module %s]" msgstr "" -#: dwarf2-frame.c:2119 +#: dwarf2/read.c:7034 #, possible-c-format -msgid "Corrupt data in %s:%s; align 4 workaround apparently succeeded" +msgid "Dwarf Error: missing dwo_id for dwo_name %s [in module %s]" msgstr "" -#: dwarf2-frame.c:2126 +#: dwarf2/read.c:7265 #, possible-c-format -msgid "Corrupt data in %s:%s; align 8 workaround apparently succeeded" +msgid "" +"compilation unit with DW_AT_GNU_dwo_name has children (offset %s) [in module " +"%s]" msgstr "" -#: dwarf2-frame.c:2133 +#: dwarf2/read.c:8301 dwarf2/read.c:10142 #, possible-c-format -msgid "Corrupt data in %s:%s" +msgid "" +"Dwarf Error: DW_TAG_imported_unit is not supported in type units [in module " +"%s]" msgstr "" -#: dwarf2-frame.c:2216 +#. FIXME drow/2004-04-01: What should we be doing with +#. function-local names? For partial symbols, we should probably be +#. ignoring them. +#: dwarf2/read.c:8424 #, possible-c-format -msgid "skipping .eh_frame info of %s: %s" +msgid "unhandled containing DIE tag %s for DIE at %s" msgstr "" -#: dwarf2-frame.c:2250 -#, possible-c-format -msgid "skipping .debug_frame info of %s: %s" +#: dwarf2/read.c:8794 dwarf2/read.c:18904 +msgid "malformed enumerator DIE ignored" msgstr "" -#: dwarf2-frame.c:2354 +#: dwarf2/read.c:8833 #, possible-c-format -msgid "The DWARF stack unwinders are currently %s.\n" +msgid "" +"Dwarf Error: Could not find abbrev number %d in %s at offset %s [in module " +"%s]" msgstr "" -#: dwarf2-frame.c:2364 -msgid "Set whether the DWARF stack frame unwinders are used." +#: dwarf2/read.c:8888 dwarf2/read.c:19139 +msgid "ignoring absolute DW_AT_sibling" msgstr "" -#: dwarf2-frame.c:2365 -msgid "Show whether the DWARF stack frame unwinders are used." +#: dwarf2/read.c:8895 dwarf2/read.c:19147 +msgid "DW_AT_sibling points backwards" msgstr "" -#: dwarf2-frame.c:2366 -msgid "" -"When enabled the DWARF stack frame unwinders can be used for architectures\n" -"that support the DWARF unwinders. Enabling the DWARF unwinders for an\n" -"architecture that doesn't support them will have no effect." +#: dwarf2/read.c:8994 dwarf2/read.c:20014 +#, possible-c-format +msgid "Dwarf Error: Cannot handle %s in DWARF reader [in module %s]" msgstr "" -#: dwarf2expr.c:77 +#: dwarf2/read.c:9455 #, possible-c-format -msgid "Unsupported address size in DWARF expressions: %d bits" +msgid "Symtab %s has objects from two different Go packages: %s and %s" msgstr "" -#: dwarf2expr.c:127 -msgid "dwarf expression stack underflow" +#: dwarf2/read.c:9619 +#, possible-c-format +msgid "Could not parse Rust enum encoding string \"%s\"[in module %s]" msgstr "" -#: dwarf2expr.c:138 dwarf2expr.c:238 +#: dwarf2/read.c:10295 #, possible-c-format -msgid "Asked for position %d of stack, stack only has %zu elements on it." +msgid "Tag '%s' has unexpected children" msgstr "" -#: dwarf2expr.c:152 -msgid "integral type expected in DWARF expression" +#: dwarf2/read.c:10535 +msgid "template parameter missing DW_AT_type" msgstr "" -#: dwarf2expr.c:172 -msgid "no unsigned variant found for type, while evaluating DWARF expression" +#: dwarf2/read.c:10551 +msgid "template parameter missing DW_AT_const_value" msgstr "" -#: dwarf2expr.c:194 -msgid "no signed variant found for type, while evaluating DWARF expression" +#. It may not mean a bug in GDB. The compiler could also +#. compute DW_AT_linkage_name incorrectly. But in such case +#. GDB would need to be bug-to-bug compatible. +#: dwarf2/read.c:10737 +#, possible-c-format +msgid "" +"Computed physname <%s> does not match demangled <%s> (from linkage <%s>) - " +"DIE at %s [in module %s]" msgstr "" -#: dwarf2expr.c:317 -msgid "DWARF expression error: ran off end of buffer reading uleb128 value" +#: dwarf2/read.c:10798 +#, possible-c-format +msgid "DIE at %s has too many recursively imported declarations" msgstr "" -#: dwarf2expr.c:329 -msgid "DWARF expression error: ran off end of buffer reading sleb128 value" +#: dwarf2/read.c:10861 dwarf2/read.c:10951 +#, possible-c-format +msgid "Tag '%s' has no DW_AT_import" msgstr "" -#: dwarf2expr.c:338 -msgid "DWARF expression error: ran off end of buffer reading leb128 value" +#: dwarf2/read.c:10941 +#, possible-c-format +msgid "child DW_TAG_imported_declaration expected - DIE at %s [in module %s]" msgstr "" -#: dwarf2expr.c:353 +#: dwarf2/read.c:10962 #, possible-c-format msgid "" -"DWARF-2 expression error: `%s' operations must be used either alone or in " -"conjunction with DW_OP_piece or DW_OP_bit_piece." +"child DW_TAG_imported_declaration has unknown imported name - DIE at %s [in " +"module %s]" msgstr "" -#: dwarf2expr.c:564 -#, possible-c-format -msgid "DWARF-2 expression error: Loop detected (%d)." +#: dwarf2/read.c:11222 +msgid "CU refers to both DW_AT_macros and DW_AT_macro_info" msgstr "" -#: dwarf2expr.c:758 dwarf2loc.c:3042 -msgid "DW_OP_implicit_value: too few bytes available." +#: dwarf2/read.c:11511 +#, possible-c-format +msgid "" +"Dwarf Error: debug entry at offset %s is missing its dwo_id [in module %s]" msgstr "" -#: dwarf2expr.c:779 +#: dwarf2/read.c:11592 +#, possible-c-format msgid "" -"DWARF-2 expression error: DW_OP_implicit_pointer is not allowed in frame " -"context" +"debug cu entry at offset %s is duplicate to the entry at offset %s, " +"signature %s" msgstr "" -#: dwarf2expr.c:870 -msgid "Not implemented: computing frame base using explicit value operator" +#: dwarf2/read.c:11794 +#, possible-c-format +msgid "Dwarf Error: unsupported DWP file version (%s) [in module %s]" msgstr "" -#: dwarf2expr.c:901 +#: dwarf2/read.c:11800 #, possible-c-format -msgid "Not enough elements for DW_OP_swap. Need 2, have %zu." +msgid "" +"Dwarf Error: number of slots in DWP hash table (%s) is not power of 2 [in " +"module %s]" msgstr "" -#: dwarf2expr.c:919 +#: dwarf2/read.c:11823 #, possible-c-format -msgid "Not enough elements for DW_OP_rot. Need 3, have %zu." +msgid "Empty DWP but nr_slots,nr_units,nr_columns not all zero [in modules %s]" msgstr "" -#: dwarf2expr.c:1031 -msgid "Incompatible types on DWARF stack" +#: dwarf2/read.c:11848 dwarf2/read.c:11918 +#, possible-c-format +msgid "" +"Dwarf Error: bad DWP hash table, too few columns in section table [in module " +"%s]" msgstr "" -#: dwarf2expr.c:1154 -msgid "Can't be reached." +#: dwarf2/read.c:11854 dwarf2/read.c:11924 +#, possible-c-format +msgid "" +"Dwarf Error: bad DWP hash table, too many columns in section table [in " +"module %s]" msgstr "" -#: dwarf2expr.c:1241 +#: dwarf2/read.c:11866 dwarf2/read.c:11936 +#, possible-c-format msgid "" -"DWARF-2 expression error: DW_OP_GNU_uninit must always be the very last op." +"Dwarf Error: bad DWP hash table, bad section id %d in section table [in " +"module %s]" msgstr "" -#: dwarf2expr.c:1285 -msgid "DW_OP_entry_value: too few bytes available." +#: dwarf2/read.c:11872 dwarf2/read.c:11942 +#, possible-c-format +msgid "" +"Dwarf Error: bad DWP hash table, duplicate section id %d in section table " +"[in module %s]" msgstr "" -#: dwarf2expr.c:1310 +#: dwarf2/read.c:11884 dwarf2/read.c:11952 +#, possible-c-format msgid "" -"DWARF-2 expression error: DW_OP_entry_value is supported only for single " -"DW_OP_reg* or for DW_OP_breg*(0)+DW_OP_deref*" +"Dwarf Error: bad DWP hash table, missing/duplicate DWO info/types section " +"[in module %s]" msgstr "" -#: dwarf2expr.c:1387 -msgid "DW_OP_reinterpret has wrong size" +#: dwarf2/read.c:11891 dwarf2/read.c:11959 +#, possible-c-format +msgid "" +"Dwarf Error: bad DWP hash table, missing DWO abbrev section [in module %s]" msgstr "" -#: dwarf2expr.c:1402 +#: dwarf2/read.c:11903 dwarf2/read.c:11971 #, possible-c-format -msgid "Unhandled dwarf expression opcode 0x%x" +msgid "Dwarf Error: DWP index section is corrupt (too small) [in module %s]" msgstr "" -#: dwarf2loc.c:107 -msgid "access outside bounds of object referenced via synthetic pointer" +#: dwarf2/read.c:12119 +#, possible-c-format +msgid "" +"Dwarf Error: bad DWP hash table, section number too large [in module %s]" msgstr "" -#: dwarf2loc.c:324 -msgid "dwarf2_find_location_expression: Corrupted DWARF expression." +#: dwarf2/read.c:12127 +#, possible-c-format +msgid "Dwarf Error: bad DWP hash table, invalid section found [in module %s]" msgstr "" -#: dwarf2loc.c:526 +#: dwarf2/read.c:12137 #, possible-c-format -msgid "Could not find the frame base for \"%s\"." +msgid "Dwarf Error: bad DWP hash table, missing DWO sections [in module %s]" msgstr "" -#: dwarf2loc.c:565 -msgid "Bad DW_OP_GNU_variable_value DIE." +#: dwarf2/read.c:12143 +#, possible-c-format +msgid "Dwarf Error: bad DWP hash table, too many DWO sections [in module %s]" msgstr "" -#: dwarf2loc.c:571 -msgid "Type of DW_OP_GNU_variable_value DIE must be an integer or pointer." +#: dwarf2/read.c:12246 +#, possible-c-format +msgid "" +"Dwarf Error: Bad DWP V2 or V5 section info, doesn't fit in section %s [in " +"module %s]" msgstr "" -#: dwarf2loc.c:631 -msgid "Could not find type for DW_OP_const_type" +#: dwarf2/read.c:12680 +#, possible-c-format +msgid "Dwarf Error: bad DWP hash table, lookup didn't terminate [in module %s]" msgstr "" -#: dwarf2loc.c:633 -msgid "DW_OP_const_type has different sizes for type and data" +#. Technically speaking, we should try to limp along, but this is +#. pretty bizarre. We use pulongest here because that's the established +#. portability solution (e.g, we cannot use %u for uint32_t). +#: dwarf2/read.c:13197 +#, possible-c-format +msgid "" +"Dwarf Error: DWP file CU version %s doesn't match TU version %s [in DWP file " +"%s]" msgstr "" -#: dwarf2loc.c:651 -msgid "Location address is not set." +#: dwarf2/read.c:13376 +#, possible-c-format +msgid "" +"Could not find DWO %s %s(%s)%s referenced by %s at offset %s [in module %s]" msgstr "" -#: dwarf2loc.c:683 dwarf2loc.c:1367 -msgid "Cannot resolve DW_AT_call_data_value" +#: dwarf2/read.c:13495 +#, possible-c-format +msgid "DIE %s and its abstract origin %s have different tags" msgstr "" -#: dwarf2loc.c:715 -msgid "frame address is not available." +#: dwarf2/read.c:13541 +#, possible-c-format +msgid "Child DIE %s and its abstract origin %s have different tags" msgstr "" -#: dwarf2loc.c:771 +#: dwarf2/read.c:13546 #, possible-c-format -msgid "Entry values and tail call frames debugging is %s.\n" +msgid "Child DIE %s and its abstract origin %s have different parents" msgstr "" -#: dwarf2loc.c:800 +#: dwarf2/read.c:13558 #, possible-c-format -msgid "DW_AT_call_target is not specified at %s in %s" +msgid "Multiple children of DIE %s refer to DIE %s as their abstract origin" msgstr "" -#: dwarf2loc.c:812 +#: dwarf2/read.c:13627 #, possible-c-format -msgid "" -"DW_AT_call_target DWARF block resolving requires known frame which is " -"currently not available at %s in %s" +msgid "missing name for subprogram DIE at %s" msgstr "" -#: dwarf2loc.c:845 +#: dwarf2/read.c:13638 #, possible-c-format -msgid "Cannot find function \"%s\" for a call site target at %s in %s" +msgid "cannot get low and high bounds for subprogram DIE at %s" msgstr "" -#: dwarf2loc.c:859 -msgid "invalid call site target kind" +#: dwarf2/read.c:13893 +#, possible-c-format +msgid "missing DW_AT_call_return_pc for DW_TAG_call_site DIE %s [in module %s]" msgstr "" -#: dwarf2loc.c:875 +#: dwarf2/read.c:13909 #, possible-c-format -msgid "DW_TAG_call_site resolving failed to find function name for address %s" +msgid "Duplicate PC %s for DW_TAG_call_site DIE %s [in module %s]" msgstr "" -#: dwarf2loc.c:933 +#: dwarf2/read.c:13925 #, possible-c-format msgid "" -"DW_OP_entry_value resolving has found function \"%s\" at %s can call itself " -"via tail calls" +"Tag %d is not DW_TAG_call_site_parameter in DW_TAG_call_site child DIE %s " +"[in module %s]" msgstr "" -#: dwarf2loc.c:1085 +#: dwarf2/read.c:13987 #, possible-c-format -msgid "Unable to find function for PC %s" +msgid "Cannot find function owning DW_TAG_call_site DIE %s [in module %s]" msgstr "" -#: dwarf2loc.c:1172 +#: dwarf2/read.c:14034 #, possible-c-format msgid "" -"There are no unambiguously determinable intermediate callers or callees " -"between caller function \"%s\" at %s and callee function \"%s\" at %s" +"DW_AT_call_target target DIE has invalid physname, for referencing DIE %s " +"[in module %s]" msgstr "" -#: dwarf2loc.c:1274 +#: dwarf2/read.c:14047 #, possible-c-format msgid "" -"DW_OP_entry_value resolving callee gdbarch %s (of %s (%s)) does not match " -"caller gdbarch %s" +"DW_AT_call_target target DIE has invalid low pc, for referencing DIE %s [in " +"module %s]" msgstr "" -#: dwarf2loc.c:1288 +#: dwarf2/read.c:14058 #, possible-c-format -msgid "DW_OP_entry_value resolving requires caller of %s (%s)" +msgid "" +"DW_TAG_call_site DW_AT_call_target is neither block nor reference, for DIE " +"%s [in module %s]" msgstr "" -#: dwarf2loc.c:1305 +#. As DW_OP_GNU_parameter_ref uses CU-relative offset this +#. binding can be done only inside one CU. Such referenced DIE +#. therefore cannot be even moved to DW_TAG_partial_unit. +#: dwarf2/read.c:14104 #, possible-c-format msgid "" -"DW_OP_entry_value resolving expects callee %s at %s but the called frame is " -"for %s at %s" +"DW_AT_call_parameter offset is not in CU for DW_TAG_call_site child DIE %s " +"[in module %s]" msgstr "" -#. DW_TAG_call_site_parameter will be missing just if GCC could not -#. determine its value. -#: dwarf2loc.c:1331 +#: dwarf2/read.c:14115 #, possible-c-format -msgid "Cannot find matching parameter at DW_TAG_call_site %s at %s" -msgstr "" - -#: dwarf2loc.c:1510 msgid "" -"DWARF-2 expression error: DW_OP_entry_value is supported only for single " -"DW_OP_reg* or for DW_OP_fbreg(*)" +"No DW_FORM_block* DW_AT_location for DW_TAG_call_site child DIE %s [in " +"module %s]" msgstr "" -#: dwarf2loc.c:1591 -msgid "Should not be able to create a lazy value with an enclosing type" +#: dwarf2/read.c:14132 +#, possible-c-format +msgid "" +"Only single DW_OP_reg or DW_OP_fbreg is supported for DW_FORM_block* " +"DW_AT_location is supported for DW_TAG_call_site child DIE %s [in module %s]" msgstr "" -#: dwarf2loc.c:1685 +#: dwarf2/read.c:14147 +#, possible-c-format msgid "" -"Can't do read-modify-write to update bitfield; containing word has been " -"optimized out" +"No DW_FORM_block* DW_AT_call_value for DW_TAG_call_site child DIE %s [in " +"module %s]" msgstr "" -#: dwarf2loc.c:1690 +#: dwarf2/read.c:14167 +#, possible-c-format msgid "" -"Can't do read-modify-write to update bitfield; containing word is unavailable" +"No DW_FORM_block* DW_AT_call_data_value for DW_TAG_call_site child DIE %s " +"[in module %s]" msgstr "" -#: dwarf2loc.c:1844 dwarf2loc.c:2330 -msgid "invalid location type" +#: dwarf2/read.c:14274 dwarf2/read.c:14475 +#, possible-c-format +msgid "Offset %d out of bounds for DW_AT_ranges attribute" msgstr "" -#: dwarf2loc.c:2025 -msgid "Invalid use of DW_OP_implicit_pointer" +#: dwarf2/read.c:14387 +msgid "Invalid .debug_rnglists data (no base address)" msgstr "" -#: dwarf2loc.c:2221 -msgid "cannot use offset on synthetic pointer to register" +#. Inverted range entries are invalid. +#: dwarf2/read.c:14398 +msgid "Invalid .debug_rnglists data (inverted range)" msgstr "" -#: dwarf2loc.c:2524 -msgid "cannot find reference address for offset property" +#. We have no valid base address for the DW_RLE_offset_pair. +#: dwarf2/read.c:14412 +msgid "Invalid .debug_rnglists data (no base address for DW_RLE_offset_pair)" msgstr "" -#: dwarf2loc.c:2732 +#: dwarf2/read.c:14426 #, possible-c-format -msgid "DWARF operator %s cannot be translated to an agent expression" +msgid ".debug_rnglists entry has start address of zero [in module %s]" msgstr "" -#: dwarf2loc.c:2735 +#: dwarf2/read.c:14436 #, possible-c-format -msgid "" -"Unknown DWARF operator 0x%02x cannot be translated to an agent expression" +msgid "Offset %d is not terminated for DW_AT_ranges attribute" msgstr "" -#: dwarf2loc.c:2753 -#, possible-c-format -msgid "bad DWARF register number %d" +#. We have no valid base address for the ranges +#. data. +#: dwarf2/read.c:14513 +msgid "Invalid .debug_ranges data (no base address)" msgstr "" -#: dwarf2loc.c:2768 -#, possible-c-format -msgid "Unable to access DWARF register number %d" +#. Inverted range entries are invalid. +#: dwarf2/read.c:14520 +msgid "Invalid .debug_ranges data (inverted range)" msgstr "" -#: dwarf2loc.c:2769 +#: dwarf2/read.c:14536 #, possible-c-format -msgid "Unable to access DWARF register number %s" +msgid ".debug_ranges entry has start address of zero [in module %s]" msgstr "" -#: dwarf2loc.c:3044 +#: dwarf2/read.c:15277 #, possible-c-format -msgid "Cannot translate DW_OP_implicit_value of %d bytes" -msgstr "" - -#: dwarf2loc.c:3407 -msgid "Cannot translate empty pieces to agent expressions" +msgid "Unhandled DW_AT_accessibility value (%x)" msgstr "" -#: dwarf2loc.c:3420 -msgid "Expression pieces exceed word size" +#: dwarf2/read.c:15319 +#, possible-c-format +msgid "invalid discriminant marker: %d" msgstr "" -#: dwarf2loc.c:3509 -msgid "invalid label" +#: dwarf2/read.c:15330 +msgid "DW_AT_discr_list missing low value" msgstr "" -#. The text is output as "$bad_register_number". -#. That is why we use the underscores. -#: dwarf2loc.c:3583 -msgid "bad_register_number" +#: dwarf2/read.c:15344 +msgid "DW_AT_discr_list missing high value" msgstr "" -#: dwarf2loc.c:3606 dwarf2loc.c:3615 +#: dwarf2/read.c:15554 #, possible-c-format -msgid "a variable in $%s" +msgid "unsupported accessibility %d" msgstr "" -#: dwarf2loc.c:3636 -#, possible-c-format -msgid "No block found for address for symbol \"%s\"." +#: dwarf2/read.c:15566 +msgid "unexpected virtuality in component of Ada type" msgstr "" -#: dwarf2loc.c:3642 +#: dwarf2/read.c:15617 #, possible-c-format -msgid "No function found for block for symbol \"%s\"." +msgid "unrecognized DW_AT_defaulted value (%s)" msgstr "" -#: dwarf2loc.c:3655 -#, possible-c-format -msgid "Unexpected opcode after DW_OP_breg%u for symbol \"%s\"." +#: dwarf2/read.c:15637 +msgid "unexpected member function in Ada type" msgstr "" -#: dwarf2loc.c:3673 +#: dwarf2/read.c:15702 #, possible-c-format -msgid "a variable at frame base reg $%s offset %s+%s" +msgid "member function type missing for '%s'" msgstr "" -#: dwarf2loc.c:3685 +#: dwarf2/read.c:15784 #, possible-c-format -msgid "a variable at offset %s from base reg $%s" +msgid "cannot determine context for virtual member function \"%s\" (offset %s)" msgstr "" -#: dwarf2loc.c:3717 dwarf2loc.c:3741 +#. GCC does this, as of 2008-08-25; PR debug/37237. +#: dwarf2/read.c:15811 #, possible-c-format msgid "" -"a thread-local variable at offset 0x%s in the thread-local storage for `%s'" +"Member function \"%s\" (offset %s) is virtual but the vtable offset is not " +"specified" +msgstr "" + +#: dwarf2/read.c:15827 +msgid "unexpected member functions in Ada type" msgstr "" -#: dwarf2loc.c:3752 +#: dwarf2/read.c:15924 #, possible-c-format -msgid "the constant %d" +msgid "DW_AT_alignment must have constant form - DIE at %s [in module %s]" msgstr "" -#: dwarf2loc.c:3786 +#: dwarf2/read.c:15937 #, possible-c-format -msgid "Unrecognized DWARF opcode 0x%02x at %ld" +msgid "DW_AT_alignment value must not be negative - DIE at %s [in module %s]" msgstr "" -#: dwarf2loc.c:4161 -msgid ", and " +#: dwarf2/read.c:15950 +#, possible-c-format +msgid "DW_AT_alignment value must not be zero - DIE at %s [in module %s]" msgstr "" -#: dwarf2loc.c:4177 -msgid "a complex DWARF expression:\n" +#: dwarf2/read.c:15958 +#, possible-c-format +msgid "DW_AT_alignment value must be a power of 2 - DIE at %s [in module %s]" msgstr "" -#: dwarf2loc.c:4199 +#: dwarf2/read.c:15976 #, possible-c-format -msgid "an empty %s-byte piece" +msgid "DW_AT_alignment value too large - DIE at %s [in module %s]" msgstr "" -#: dwarf2loc.c:4202 +#: dwarf2/read.c:15996 #, possible-c-format -msgid " [%s-byte piece]" +msgid "unrecognized DW_AT_calling_convention value (%s) for a type" msgstr "" -#: dwarf2loc.c:4214 +#: dwarf2/read.c:16022 #, possible-c-format -msgid "an empty %s-bit piece" +msgid "unrecognized DW_AT_calling_convention value (%s) for a subroutine" msgstr "" -#: dwarf2loc.c:4218 +#: dwarf2/read.c:16188 #, possible-c-format -msgid " [%s-bit piece, offset %s bits]" +msgid "nested DW_TAG_variant_part seen - DIE at %s [in module %s]" msgstr "" -#: dwarf2loc.c:4230 +#: dwarf2/read.c:16220 #, possible-c-format -msgid "Corrupted DWARF2 expression for \"%s\"." +msgid "DW_AT_discr does not have DIE reference form - DIE at %s [in module %s]" msgstr "" -#: dwarf2loc.c:4284 dwarf2loc.c:4497 +#: dwarf2/read.c:16243 #, possible-c-format -msgid "symbol \"%s\" is optimized out" +msgid "" +"saw DW_TAG_variant outside DW_TAG_variant_part - DIE at %s [in module %s]" msgstr "" -#: dwarf2loc.c:4394 -msgid "multi-location:\n" +#: dwarf2/read.c:16251 +#, possible-c-format +msgid "nested DW_TAG_variant seen - DIE at %s [in module %s]" msgstr "" -#: dwarf2loc.c:4421 +#: dwarf2/read.c:16422 #, possible-c-format -msgid " Base address %s" +msgid "virtual function table pointer not found when defining class '%s'" msgstr "" -#: dwarf2loc.c:4429 +#: dwarf2/read.c:16540 #, possible-c-format -msgid "Corrupted DWARF expression for symbol \"%s\"." +msgid "" +"could not find suitable symtab for template parameter - DIE at %s [in module " +"%s]" msgstr "" -#. (It would improve readability to print only the minimum -#. necessary digits of the second number of the range.) -#: dwarf2loc.c:4447 +#: dwarf2/read.c:16818 #, possible-c-format -msgid " Range %s-%s: " +msgid "unable to read array DW_AT_byte_stride - DIE at %s [in module %s]" msgstr "" -#: dwarf2loc.c:4522 -msgid "Set entry values and tail call frames debugging." +#: dwarf2/read.c:16864 +#, possible-c-format +msgid "unable to find array range - DIE at %s [in module %s]" msgstr "" -#: dwarf2loc.c:4524 -msgid "Show entry values and tail call frames debugging." +#: dwarf2/read.c:16912 +msgid "DW_AT_byte_size for array type smaller than the total size of elements" msgstr "" -#: dwarf2loc.c:4526 +#. GDB has handled this for a long time, but it is +#. not specified by DWARF. It seems to have been +#. emitted by gfortran at least as recently as: +#. http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23057. +#: dwarf2/read.c:17138 +#, possible-c-format msgid "" -"When non-zero, the process of determining parameter values from function " -"entry point and tail call frames will be printed." +"Variable in common block has DW_AT_data_member_location - DIE at %s [in " +"module %s]" msgstr "" -#: dwarf2read.c:1439 +#: dwarf2/read.c:17371 #, possible-c-format -msgid "The upper bound on the age of cached DWARF compilation units is %s.\n" +msgid "invalid pointer size %d" msgstr "" -#: dwarf2read.c:2033 -msgid "statement list doesn't fit in .debug_line section" +#: dwarf2/read.c:17375 +#, possible-c-format +msgid "Invalid DW_AT_alignment - DIE at %s [in module %s]" msgstr "" -#: dwarf2read.c:2039 -msgid ".debug_line section has line data without a file" +#: dwarf2/read.c:17598 +msgid "" +"DW_AT_bit_size and DW_AT_string_length_bit_size not currently supported on " +"DW_TAG_string_type." msgstr "" -#: dwarf2read.c:2045 -msgid ".debug_line section has line program sequence without an end" +#. Self-referential typedefs are, it seems, not allowed by the DWARF +#. spec and cause infinite loops in GDB. +#: dwarf2/read.c:17869 +#, possible-c-format +msgid "Self-referential DW_TAG_typedef - DIE at %s [in module %s]" msgstr "" -#: dwarf2read.c:2052 -msgid "location expression too complex" +#: dwarf2/read.c:18014 +msgid "DW_AT_name missing from DW_TAG_base_type" msgstr "" -#: dwarf2read.c:2059 +#: dwarf2/read.c:18033 #, possible-c-format -msgid "const value length mismatch for '%s', got %d, expected %d" +msgid "DW_AT_endianity has unrecognized value %d" msgstr "" -#: dwarf2read.c:2066 +#: dwarf2/read.c:18107 #, possible-c-format -msgid "debug info runs off end of %s section [in module %s]" +msgid "unsupported DW_ATE_UTF bit size: '%d'" msgstr "" -#: dwarf2read.c:2075 +#: dwarf2/read.c:18116 #, possible-c-format -msgid "" -"macro debug info contains a malformed macro definition:\n" -"`%s'" +msgid "unsupported DW_AT_encoding: '%s'" msgstr "" -#: dwarf2read.c:2083 +#: dwarf2/read.c:18372 #, possible-c-format -msgid "invalid attribute class or form for '%s' in '%s'" +msgid "Missing DW_AT_lower_bound - DIE at %s [in module %s]" msgstr "" -#: dwarf2read.c:2370 +#: dwarf2/read.c:18393 #, possible-c-format -msgid "" -"Discarding section %s which has a section size (%s) larger than the file " -"size [in module %s]" +msgid "Unresolved DW_AT_upper_bound - DIE at %s [in module %s]" msgstr "" -#: dwarf2read.c:2515 +#: dwarf2/read.c:18398 #, possible-c-format -msgid "" -"Dwarf Error: DWP format V2 with relocations is not supported in section %s " -"[in module %s]" +msgid "Unresolved DW_AT_count - DIE at %s [in module %s]" msgstr "" -#: dwarf2read.c:2559 +#: dwarf2/read.c:18443 #, possible-c-format -msgid "Dwarf Error: Can't read DWARF data in section %s [in module %s]" +msgid "Found DW_AT_bit_stride and DW_AT_byte_stride - DIE at %s [in module %s]" msgstr "" -#: dwarf2read.c:2688 +#: dwarf2/read.c:18642 #, possible-c-format -msgid "could not read '.gnu_debugaltlink' section: %s" +msgid "Dwarf Error: could not find abbrev number %d [in module %s]" msgstr "" -#: dwarf2read.c:2721 +#: dwarf2/read.c:18889 #, possible-c-format -msgid "could not find '.gnu_debugaltlink' file for %s" +msgid "" +"DW_TAG_typedef has childen - GCC PR debug/47510 bug - DIE at %s [in module " +"%s]" msgstr "" -#: dwarf2read.c:3196 +#: dwarf2/read.c:19254 #, possible-c-format -msgid ".gdb_index address table has invalid range (%s - %s)" +msgid "DW_AT_low_pc %s is zero for DIE at %s [in module %s]" msgstr "" -#: dwarf2read.c:3203 +#: dwarf2/read.c:19266 #, possible-c-format -msgid ".gdb_index address table has invalid CU number %u" +msgid "DW_AT_low_pc %s is not < DW_AT_high_pc %s for DIE at %s [in module %s]" msgstr "" -#: dwarf2read.c:3244 +#: dwarf2/read.c:19321 #, possible-c-format msgid "" -"Section .debug_aranges in %s has duplicate debug_info_offset %s, ignoring ." -"debug_aranges." +"Dwarf Error: Type Unit at offset %s contains external reference to offset %s " +"[in module %s].\n" msgstr "" -#: dwarf2read.c:3271 +#: dwarf2/read.c:19359 #, possible-c-format -msgid "" -"Section .debug_aranges in %s entry at offset %s length %s exceeds section " -"length %s, ignoring .debug_aranges." +msgid "Dwarf Error: Cannot not find DIE at %s [from module %s]\n" msgstr "" -#: dwarf2read.c:3286 +#: dwarf2/read.c:19613 #, possible-c-format -msgid "" -"Section .debug_aranges in %s entry at offset %s has unsupported version %d, " -"ignoring .debug_aranges." +msgid "DW_FORM_loclistx used without .debug_loclists section [in module %s]" msgstr "" -#: dwarf2read.c:3300 +#: dwarf2/read.c:19619 #, possible-c-format -msgid "" -"Section .debug_aranges in %s entry at offset %s debug_info_offset %s does " -"not exists, ignoring .debug_aranges." +msgid "DW_AT_loclists_base is smaller than header size [in module %s]" msgstr "" -#: dwarf2read.c:3313 +#: dwarf2/read.c:19629 #, possible-c-format msgid "" -"Section .debug_aranges in %s entry at offset %s address_size %u is invalid, " -"ignoring .debug_aranges." +"DW_FORM_loclistx pointing outside of .debug_loclists offset array [in module " +"%s]" msgstr "" -#: dwarf2read.c:3323 +#: dwarf2/read.c:19634 #, possible-c-format msgid "" -"Section .debug_aranges in %s entry at offset %s segment_selector_size %u is " -"not supported, ignoring .debug_aranges." +"DW_FORM_loclistx pointing outside of .debug_loclists section [in module %s]" msgstr "" -#: dwarf2read.c:3340 +#: dwarf2/read.c:19640 #, possible-c-format msgid "" -"Section .debug_aranges in %s entry at offset %s padding is not zero, " -"ignoring .debug_aranges." +"Reading DW_FORM_loclistx index beyond end of.debug_loclists section [in " +"module %s]" msgstr "" -#: dwarf2read.c:3351 +#: dwarf2/read.c:19677 #, possible-c-format -msgid "" -"Section .debug_aranges in %s entry at offset %s address list is not properly " -"terminated, ignoring .debug_aranges." +msgid "DW_FORM_rnglistx used without .debug_rnglists section [in module %s]" msgstr "" -#: dwarf2read.c:3481 +#: dwarf2/read.c:19684 #, possible-c-format -msgid "Skipping obsolete .gdb_index section in %s." +msgid "DW_AT_rnglists_base is smaller than header size [in module %s]" msgstr "" -#: dwarf2read.c:3500 +#: dwarf2/read.c:19694 #, possible-c-format msgid "" -"Skipping deprecated .gdb_index section in %s.\n" -"Do \"set use-deprecated-index-sections on\" before the file is read\n" -"to use the section anyway." +"DW_FORM_rnglistx index pointing outside of .debug_rnglists offset array [in " +"module %s]" msgstr "" -#: dwarf2read.c:3620 +#: dwarf2/read.c:19700 #, possible-c-format -msgid "could not read '.gdb_index' section from %s; skipping" +msgid "" +"DW_FORM_rnglistx pointing outside of .debug_rnglists section [in module %s]" msgstr "" -#: dwarf2read.c:3996 dwarf2read.c:5087 +#: dwarf2/read.c:19706 #, possible-c-format -msgid ".gdb_index entry has bad CU index [in module %s]" +msgid "" +"Reading DW_FORM_rnglistx index beyond end of.debug_rnglists section [in " +"module %s]" msgstr "" -#: dwarf2read.c:4123 -#, possible-c-format -msgid " Number of read CUs: %d\n" +#: dwarf2/read.c:19760 +msgid "Unexpected DWARF form." msgstr "" -#: dwarf2read.c:4124 +#: dwarf2/read.c:20034 #, possible-c-format -msgid " Number of unread CUs: %d\n" +msgid "Suspicious DW_AT_byte_size value treated as zero instead of %s" msgstr "" -#: dwarf2read.c:4625 +#: dwarf2/read.c:20108 #, possible-c-format -msgid "%s:%d: match_type=%s, looking-for=\"%s\", expected=\"%s\", got=\"%s\"\n" +msgid "DW_FORM_addr_index used without .debug_addr section [in module %s]" msgstr "" -#: dwarf2read.c:5257 +#: dwarf2/read.c:20112 #, possible-c-format -msgid "(Internal error: pc %s in read in CU, but not in symtab.)" +msgid "" +"DW_FORM_addr_index pointing outside of .debug_addr section [in module %s]" msgstr "" -#. There may be multiple per-CU indices. -#: dwarf2read.c:5402 +#: dwarf2/read.c:20207 dwarf2/read.c:20212 #, possible-c-format -msgid "" -"Section .debug_names in %s length %s does not match section length %s, " -"ignoring .debug_names." +msgid "%s used without %s section in CU at offset %s [in module %s]" msgstr "" -#: dwarf2read.c:5414 +#: dwarf2/read.c:20224 #, possible-c-format msgid "" -"Section .debug_names in %s has unsupported version %d, ignoring .debug_names." +"Offset from %s pointing outside of .debug_str.dwo section in CU at offset %s " +"[in module %s]" msgstr "" -#: dwarf2read.c:5425 +#: dwarf2/read.c:20254 #, possible-c-format -msgid "" -"Section .debug_names in %s has unsupported padding %d, ignoring .debug_names." +msgid "%s used in Fission stub without %s in CU at offset 0x%lx [in module %s]" msgstr "" -#: dwarf2read.c:5446 +#: dwarf2/read.c:20384 #, possible-c-format -msgid "" -"Section .debug_names in %s has unsupported %lu foreign TUs, ignoring ." -"debug_names." +msgid "string type expected for attribute %s for DIE at %s in module %s" +msgstr "" + +#: dwarf2/read.c:20506 +msgid "missing .debug_line.dwo section" +msgstr "" + +#: dwarf2/read.c:20508 +msgid "missing .debug_line section" msgstr "" -#: dwarf2read.c:5509 +#: dwarf2/read.c:21021 #, possible-c-format -msgid "" -"Section .debug_names in %s has duplicate index %s, ignoring .debug_names." +msgid ".debug_line address at offset 0x%lx is 0 [in module %s]" +msgstr "" + +#: dwarf2/read.c:21155 dwarf2/read.c:21163 +msgid "mangled .debug_line section" +msgstr "" + +#: dwarf2/read.c:21546 +msgid "file index out of range" msgstr "" -#: dwarf2read.c:5538 +#. Not a tag we recognize. Hopefully we aren't processing +#. trash data, but since we must specifically ignore things +#. we don't recognize, there is nothing else we should do at +#. this point. +#: dwarf2/read.c:21850 #, possible-c-format -msgid "" -"Section .debug_names in %s has abbreviation_table of size %s vs. written as " -"%u, ignoring .debug_names." +msgid "unsupported tag: '%s'" msgstr "" -#: dwarf2read.c:5636 +#: dwarf2/read.c:22012 dwarf2/read.c:23358 #, possible-c-format -msgid "could not read '.debug_names' section from %s; skipping" +msgid "unsupported const value attribute form: '%s'" msgstr "" -#: dwarf2read.c:5772 dwarf2read.c:5824 +#: dwarf2/read.c:22126 #, possible-c-format -msgid "Wrong .debug_names with name index %u but name_count=%u [in module %s]" +msgid "" +"Dwarf Error: Problem turning containing type into gdb type [in module %s]" msgstr "" -#: dwarf2read.c:5795 +#: dwarf2/read.c:22142 #, possible-c-format -msgid "Wrong .debug_names hash for string at index %u [in module %s]" +msgid "<unknown type in %s, CU %s, DIE %s>" msgstr "" -#: dwarf2read.c:5861 +#: dwarf2/read.c:22192 #, possible-c-format -msgid "Wrong .debug_names undefined abbrev code %s [in module %s]" +msgid "Dwarf Error: Bad type attribute %s in DIE at %s [in module %s]" msgstr "" -#: dwarf2read.c:5889 +#: dwarf2/read.c:22320 #, possible-c-format -msgid "Unsupported .debug_names form %s [in module %s]" +msgid "unexpected tag in read_type_die: '%s'" msgstr "" -#: dwarf2read.c:5900 +#: dwarf2/read.c:22531 #, possible-c-format -msgid ".debug_names entry has bad CU index %s [in module %s]" +msgid "template param type '%s' defined within parent '%s'" msgstr "" -#: dwarf2read.c:5912 +#: dwarf2/read.c:22995 #, possible-c-format -msgid ".debug_names entry has bad TU index %s [in module %s]" +msgid "Dwarf Error: Expected reference attribute [in module %s]" msgstr "" -#: dwarf2read.c:6463 +#: dwarf2/read.c:23090 #, possible-c-format msgid "" -"Dwarf Error: wrong version in compilation unit header (is %d, should be 2, " -"3, 4 or 5) [in module %s]" +"Dwarf Error: Cannot find DIE at %s referenced from DIE at %s [in module %s]" msgstr "" -#: dwarf2read.c:6478 -msgid "read_comp_unit_head: invalid section_kind" +#. We shouldn't get here for a dummy CU, but don't crash on the user. +#. Instead just throw an error, not much else we can do. +#: dwarf2/read.c:23120 dwarf2/read.c:23260 +#, possible-c-format +msgid "Dwarf Error: Dummy CU at %s referenced in module %s" msgstr "" -#: dwarf2read.c:6492 +#: dwarf2/read.c:23126 dwarf2/read.c:23266 #, possible-c-format -msgid "" -"Dwarf Error: wrong unit_type in compilation unit header (is %s, should be " -"%s) [in module %s]" +msgid "Dwarf Error: Cannot find DIE at %s referenced in module %s" msgstr "" -#: dwarf2read.c:6502 +#: dwarf2/read.c:23187 #, possible-c-format msgid "" -"Dwarf Error: wrong unit_type in compilation unit header (is %#04x, should be " -"one of: %s, %s, %s, %s or %s) [in module %s]" -msgstr "" - -#: dwarf2read.c:6527 -msgid "read_comp_unit_head: dwarf from non elf file" +"Dwarf Error: DIE at %s referenced in module %s is neither DW_FORM_block* nor " +"DW_FORM_exprloc" msgstr "" -#: dwarf2read.c:6547 +#: dwarf2/read.c:23476 dwarf2/read.c:23513 #, possible-c-format msgid "" -"Dwarf Error: Too big type_offset in compilation unit header (is %s) [in " +"Dwarf Error: Cannot find signatured DIE %s referenced from DIE at %s [in " "module %s]" msgstr "" -#: dwarf2read.c:6586 +#: dwarf2/read.c:23486 dwarf2/read.c:23544 #, possible-c-format msgid "" -"Dwarf Error: bad offset (%s) in compilation unit header (offset %s + 6) [in " +"Dwarf Error: Problem reading signatured DIE %s referenced from DIE at %s [in " "module %s]" msgstr "" -#: dwarf2read.c:6596 +#: dwarf2/read.c:23535 #, possible-c-format msgid "" -"Dwarf Error: bad length (0x%x) in compilation unit header (offset %s + 0) " -"[in module %s]" +"Dwarf Error: Cannot build signatured type %s referenced from DIE at %s [in " +"module %s]" msgstr "" -#: dwarf2read.c:6887 +#: dwarf2/read.c:23579 #, possible-c-format msgid "" -"debug type entry at offset %s is duplicate to the entry at offset %s, " -"signature %s" +"Dwarf Error: DW_AT_signature has bad form %s in DIE at %s [in module %s]" msgstr "" -#: dwarf2read.c:7322 +#: dwarf2/read.c:23909 #, possible-c-format -msgid "" -"Dwarf Error: signature mismatch %s vs %s while reading TU at offset %s [in " -"module %s]" +msgid "unsupported stack op: '%s'" msgstr "" -#: dwarf2read.c:7457 +#: dwarf2/read.c:23912 #, possible-c-format -msgid "Dwarf Error: missing dwo_id for dwo_name %s [in module %s]" +msgid "unsupported stack op: '%02x'" msgstr "" -#: dwarf2read.c:7718 -#, possible-c-format -msgid "" -"compilation unit with DW_AT_GNU_dwo_name has children (offset %s) [in module " -"%s]" +#: dwarf2/read.c:23924 +msgid "location description stack overflow" msgstr "" -#: dwarf2read.c:8774 dwarf2read.c:10598 -#, possible-c-format -msgid "" -"Dwarf Error: DW_TAG_imported_unit is not supported in type units [in module " -"%s]" +#: dwarf2/read.c:23931 +msgid "location description stack underflow" msgstr "" -#. FIXME drow/2004-04-01: What should we be doing with -#. function-local names? For partial symbols, we should probably be -#. ignoring them. -#: dwarf2read.c:8897 +#: dwarf2/read.c:24011 #, possible-c-format -msgid "unhandled containing DIE tag %s for DIE at %s" -msgstr "" - -#: dwarf2read.c:9269 dwarf2read.c:18779 -msgid "malformed enumerator DIE ignored" +msgid "missing %s section" msgstr "" -#: dwarf2read.c:9308 +#: dwarf2/read.c:24044 #, possible-c-format -msgid "" -"Dwarf Error: Could not find abbrev number %d in %s at offset %s [in module " -"%s]" +msgid ".debug_rnglists section cannot be used in DWARF %d" msgstr "" -#: dwarf2read.c:9361 dwarf2read.c:18999 -msgid "ignoring absolute DW_AT_sibling" +#: dwarf2/read.c:24062 +msgid ".debug_rnglists section is missing from .dwo file." msgstr "" -#: dwarf2read.c:9368 dwarf2read.c:19007 -msgid "DW_AT_sibling points backwards" +#: dwarf2/read.c:24114 +msgid "Location list used without specifying the CU base address." msgstr "" -#: dwarf2read.c:9465 dwarf2read.c:19610 +#: dwarf2/read.c:24268 #, possible-c-format -msgid "Dwarf Error: Cannot handle %s in DWARF reader [in module %s]" +msgid "" +"Dwarf Error: could not find partial DIE containing offset %s [in module %s]" msgstr "" -#: dwarf2read.c:9520 mdebugread.c:282 +#: dwarf2/read.c:24281 #, possible-c-format -msgid "Reading in symbols for %s..." +msgid "invalid dwarf2 offset %s" msgstr "" -#: dwarf2read.c:9933 +#: dwarf2/read.c:24588 #, possible-c-format -msgid "Symtab %s has objects from two different Go packages: %s and %s" +msgid "A problem internal to GDB: DIE %s has type already set" msgstr "" -#: dwarf2read.c:10060 +#: dwarf2/read.c:24727 #, possible-c-format -msgid "Could not parse Rust enum encoding string \"%s\"[in module %s]" +msgid "Whether to check \"physname\" is %s.\n" msgstr "" -#: dwarf2read.c:10742 -#, possible-c-format -msgid "Tag '%s' has unexpected children" +#: dwarf2/read.c:24735 +msgid "" +"Set DWARF specific variables.\n" +"Configure DWARF variables such as the cache size." msgstr "" -#: dwarf2read.c:10976 -msgid "template parameter missing DW_AT_type" +#. allow-unknown +#: dwarf2/read.c:24741 +msgid "" +"Show DWARF specific variables.\n" +"Show DWARF variables such as the cache size." msgstr "" -#: dwarf2read.c:10992 -msgid "template parameter missing DW_AT_const_value" +#: dwarf2/read.c:24748 +msgid "Set the upper bound on the age of cached DWARF compilation units." msgstr "" -#. It may not mean a bug in GDB. The compiler could also -#. compute DW_AT_linkage_name incorrectly. But in such case -#. GDB would need to be bug-to-bug compatible. -#: dwarf2read.c:11184 -#, possible-c-format -msgid "" -"Computed physname <%s> does not match demangled <%s> (from linkage <%s>) - " -"DIE at %s [in module %s]" +#: dwarf2/read.c:24749 +msgid "Show the upper bound on the age of cached DWARF compilation units." msgstr "" -#: dwarf2read.c:11245 -#, possible-c-format -msgid "DIE at %s has too many recursively imported declarations" +#: dwarf2/read.c:24750 +msgid "" +"A higher limit means that cached compilation units will be stored\n" +"in memory longer, and more total memory will be used. Zero disables\n" +"caching, which can slow down startup." msgstr "" -#: dwarf2read.c:11308 dwarf2read.c:11398 -#, possible-c-format -msgid "Tag '%s' has no DW_AT_import" +#: dwarf2/read.c:24759 +msgid "Set debugging of the DWARF reader." msgstr "" -#: dwarf2read.c:11388 -#, possible-c-format -msgid "child DW_TAG_imported_declaration expected - DIE at %s [in module %s]" +#: dwarf2/read.c:24760 +msgid "Show debugging of the DWARF reader." msgstr "" -#: dwarf2read.c:11409 -#, possible-c-format +#: dwarf2/read.c:24761 msgid "" -"child DW_TAG_imported_declaration has unknown imported name - DIE at %s [in " -"module %s]" +"When enabled (non-zero), debugging messages are printed during DWARF\n" +"reading and symtab expansion. A value of 1 (one) provides basic\n" +"information. A value greater than 1 provides more verbose information." msgstr "" -#: dwarf2read.c:11674 -msgid "CU refers to both DW_AT_macros and DW_AT_macro_info" +#: dwarf2/read.c:24769 +msgid "Set debugging of the DWARF DIE reader." msgstr "" -#: dwarf2read.c:11976 -#, possible-c-format -msgid "" -"Dwarf Error: debug entry at offset %s is missing its dwo_id [in module %s]" +#: dwarf2/read.c:24770 +msgid "Show debugging of the DWARF DIE reader." msgstr "" -#: dwarf2read.c:12056 -#, possible-c-format +#: dwarf2/read.c:24771 msgid "" -"debug cu entry at offset %s is duplicate to the entry at offset %s, " -"signature %s" +"When enabled (non-zero), DIEs are dumped after they are read in.\n" +"The value is the maximum depth to print." msgstr "" -#: dwarf2read.c:12239 -#, possible-c-format -msgid "Dwarf Error: unsupported DWP file version (%s) [in module %s]" +#: dwarf2/read.c:24778 +msgid "Set debugging of the dwarf line reader." msgstr "" -#: dwarf2read.c:12245 -#, possible-c-format +#: dwarf2/read.c:24779 +msgid "Show debugging of the dwarf line reader." +msgstr "" + +#: dwarf2/read.c:24780 msgid "" -"Dwarf Error: number of slots in DWP hash table (%s) is not power of 2 [in " -"module %s]" +"When enabled (non-zero), line number entries are dumped as they are read " +"in.\n" +"A value of 1 (one) provides basic information.\n" +"A value greater than 1 provides more verbose information." msgstr "" -#: dwarf2read.c:12266 -#, possible-c-format -msgid "Empty DWP but nr_slots,nr_units,nr_columns not all zero [in modules %s]" +#: dwarf2/read.c:24788 +msgid "Set cross-checking of \"physname\" code against demangler." msgstr "" -#: dwarf2read.c:12291 -#, possible-c-format -msgid "" -"Dwarf Error: bad DWP hash table, too few columns in section table [in module " -"%s]" +#: dwarf2/read.c:24789 +msgid "Show cross-checking of \"physname\" code against demangler." msgstr "" -#: dwarf2read.c:12297 -#, possible-c-format +#: dwarf2/read.c:24790 msgid "" -"Dwarf Error: bad DWP hash table, too many columns in section table [in " -"module %s]" +"When enabled, GDB's internal \"physname\" code is checked against\n" +"the demangler." msgstr "" -#: dwarf2read.c:12309 -#, possible-c-format -msgid "" -"Dwarf Error: bad DWP hash table, bad section id %d in section table [in " -"module %s]" +#: dwarf2/read.c:24797 +msgid "Set whether to use deprecated gdb_index sections." msgstr "" -#: dwarf2read.c:12315 -#, possible-c-format -msgid "" -"Dwarf Error: bad DWP hash table, duplicate section id %d in section table " -"[in module %s]" +#: dwarf2/read.c:24798 +msgid "Show whether to use deprecated gdb_index sections." msgstr "" -#: dwarf2read.c:12327 -#, possible-c-format +#: dwarf2/read.c:24799 msgid "" -"Dwarf Error: bad DWP hash table, missing/duplicate DWO info/types section " -"[in module %s]" +"When enabled, deprecated .gdb_index sections are used anyway.\n" +"Normally they are ignored either because of a missing feature or\n" +"performance issue.\n" +"Warning: This option must be enabled before gdb reads the file." msgstr "" -#: dwarf2read.c:12334 +#: dwarf2/leb.c:131 #, possible-c-format -msgid "" -"Dwarf Error: bad DWP hash table, missing DWO abbrev section [in module %s]" +msgid "read_offset_1: bad switch [in module %s]" msgstr "" -#: dwarf2read.c:12346 +#: dwarf2/section.c:36 #, possible-c-format -msgid "Dwarf Error: DWP index section is corrupt (too small) [in module %s]" +msgid "debug info runs off end of %s section [in module %s]" msgstr "" -#: dwarf2read.c:12495 +#: dwarf2/section.c:142 #, possible-c-format msgid "" -"Dwarf Error: bad DWP hash table, section number too large [in module %s]" +"Dwarf Error: DWP format V2 with relocations is not supported in section %s " +"[in module %s]" msgstr "" -#: dwarf2read.c:12503 +#: dwarf2/section.c:185 #, possible-c-format -msgid "Dwarf Error: bad DWP hash table, invalid section found [in module %s]" +msgid "Dwarf Error: Can't read DWARF data in section %s [in module %s]" msgstr "" -#: dwarf2read.c:12513 +#: dwarf2/section.c:197 #, possible-c-format -msgid "Dwarf Error: bad DWP hash table, missing DWO sections [in module %s]" +msgid "%s used without %s section [in module %s]" msgstr "" -#: dwarf2read.c:12519 +#: dwarf2/section.c:200 #, possible-c-format -msgid "Dwarf Error: bad DWP hash table, too many DWO sections [in module %s]" +msgid "%s pointing outside of %s section [in module %s]" msgstr "" -#: dwarf2read.c:12624 -#, possible-c-format -msgid "" -"Dwarf Error: Bad DWP V2 section info, doesn't fit in section %s [in module " -"%s]" +#: dwarf2/index-write.c:80 +msgid "couldn't data write to file" msgstr "" -#: dwarf2read.c:12870 +#: dwarf2/index-write.c:1009 #, possible-c-format -msgid "Dwarf Error: bad DWP hash table, lookup didn't terminate [in module %s]" +msgid "Duplicate string \"%s\" in .debug_str section [in module %s]" msgstr "" -#. Technically speaking, we should try to limp along, but this is -#. pretty bizarre. We use pulongest here because that's the established -#. portability solution (e.g, we cannot use %u for uint32_t). -#: dwarf2read.c:13321 +#: dwarf2/index-write.c:1672 #, possible-c-format -msgid "" -"Dwarf Error: DWP file CU version %s doesn't match TU version %s [in DWP file " -"%s]" +msgid "Can't open `%s' for writing" msgstr "" -#: dwarf2read.c:13497 -#, possible-c-format -msgid "" -"Could not find DWO %s %s(%s)%s referenced by %s at offset %s [in module %s]" +#: dwarf2/index-write.c:1710 +msgid "Cannot use an index to create the index" msgstr "" -#: dwarf2read.c:13615 -#, possible-c-format -msgid "DIE %s and its abstract origin %s have different tags" +#: dwarf2/index-write.c:1713 +msgid "Cannot make an index when the file has multiple .debug_types sections" msgstr "" -#: dwarf2read.c:13661 -#, possible-c-format -msgid "Child DIE %s and its abstract origin %s have different tags" +#: dwarf2/index-write.c:1776 +msgid "usage: save gdb-index [-dwarf-5] DIRECTORY" msgstr "" -#: dwarf2read.c:13666 +#: dwarf2/index-write.c:1805 #, possible-c-format -msgid "Child DIE %s and its abstract origin %s have different parents" +msgid "Error while writing index for `%s': " msgstr "" -#: dwarf2read.c:13678 -#, possible-c-format -msgid "Multiple children of DIE %s refer to DIE %s as their abstract origin" +#: dwarf2/index-write.c:1818 +msgid "" +"Save a gdb-index file.\n" +"Usage: save gdb-index [-dwarf-5] DIRECTORY\n" +"\n" +"No options create one file with .gdb-index extension for pre-DWARF-5\n" +"compatible .gdb_index section. With -dwarf-5 creates two files with\n" +"extension .debug_names and .debug_str for DWARF-5 .debug_names section." msgstr "" -#: dwarf2read.c:13747 +#: dwarf2/expr.c:78 #, possible-c-format -msgid "missing name for subprogram DIE at %s" +msgid "Unsupported address size in DWARF expressions: %d bits" msgstr "" -#: dwarf2read.c:13758 -#, possible-c-format -msgid "cannot get low and high bounds for subprogram DIE at %s" +#: dwarf2/expr.c:128 +msgid "dwarf expression stack underflow" msgstr "" -#: dwarf2read.c:14003 +#: dwarf2/expr.c:139 dwarf2/expr.c:239 #, possible-c-format -msgid "missing DW_AT_call_return_pc for DW_TAG_call_site DIE %s [in module %s]" +msgid "Asked for position %d of stack, stack only has %zu elements on it." msgstr "" -#: dwarf2read.c:14019 -#, possible-c-format -msgid "Duplicate PC %s for DW_TAG_call_site DIE %s [in module %s]" +#: dwarf2/expr.c:153 +msgid "integral type expected in DWARF expression" msgstr "" -#: dwarf2read.c:14035 -#, possible-c-format -msgid "" -"Tag %d is not DW_TAG_call_site_parameter in DW_TAG_call_site child DIE %s " -"[in module %s]" +#: dwarf2/expr.c:173 +msgid "no unsigned variant found for type, while evaluating DWARF expression" msgstr "" -#: dwarf2read.c:14097 -#, possible-c-format -msgid "Cannot find function owning DW_TAG_call_site DIE %s [in module %s]" +#: dwarf2/expr.c:195 +msgid "no signed variant found for type, while evaluating DWARF expression" msgstr "" -#: dwarf2read.c:14143 -#, possible-c-format -msgid "" -"DW_AT_call_target target DIE has invalid physname, for referencing DIE %s " -"[in module %s]" +#: dwarf2/expr.c:318 +msgid "DWARF expression error: ran off end of buffer reading uleb128 value" msgstr "" -#: dwarf2read.c:14156 -#, possible-c-format -msgid "" -"DW_AT_call_target target DIE has invalid low pc, for referencing DIE %s [in " -"module %s]" +#: dwarf2/expr.c:330 +msgid "DWARF expression error: ran off end of buffer reading sleb128 value" msgstr "" -#: dwarf2read.c:14167 -#, possible-c-format -msgid "" -"DW_TAG_call_site DW_AT_call_target is neither block nor reference, for DIE " -"%s [in module %s]" +#: dwarf2/expr.c:339 +msgid "DWARF expression error: ran off end of buffer reading leb128 value" msgstr "" -#. As DW_OP_GNU_parameter_ref uses CU-relative offset this -#. binding can be done only inside one CU. Such referenced DIE -#. therefore cannot be even moved to DW_TAG_partial_unit. -#: dwarf2read.c:14213 +#: dwarf2/expr.c:354 #, possible-c-format msgid "" -"DW_AT_call_parameter offset is not in CU for DW_TAG_call_site child DIE %s " -"[in module %s]" +"DWARF-2 expression error: `%s' operations must be used either alone or in " +"conjunction with DW_OP_piece or DW_OP_bit_piece." msgstr "" -#: dwarf2read.c:14224 +#: dwarf2/expr.c:565 #, possible-c-format -msgid "" -"No DW_FORM_block* DW_AT_location for DW_TAG_call_site child DIE %s [in " -"module %s]" +msgid "DWARF-2 expression error: Loop detected (%d)." msgstr "" -#: dwarf2read.c:14241 -#, possible-c-format -msgid "" -"Only single DW_OP_reg or DW_OP_fbreg is supported for DW_FORM_block* " -"DW_AT_location is supported for DW_TAG_call_site child DIE %s [in module %s]" +#: dwarf2/expr.c:759 dwarf2/loc.c:3197 +msgid "DW_OP_implicit_value: too few bytes available." msgstr "" -#: dwarf2read.c:14256 -#, possible-c-format +#: dwarf2/expr.c:780 msgid "" -"No DW_FORM_block* DW_AT_call_value for DW_TAG_call_site child DIE %s [in " -"module %s]" +"DWARF-2 expression error: DW_OP_implicit_pointer is not allowed in frame " +"context" msgstr "" -#: dwarf2read.c:14276 -#, possible-c-format -msgid "" -"No DW_FORM_block* DW_AT_call_data_value for DW_TAG_call_site child DIE %s " -"[in module %s]" +#: dwarf2/expr.c:871 +msgid "Not implemented: computing frame base using explicit value operator" msgstr "" -#: dwarf2read.c:14383 dwarf2read.c:14551 +#: dwarf2/expr.c:902 #, possible-c-format -msgid "Offset %d out of bounds for DW_AT_ranges attribute" -msgstr "" - -#. We have no valid base address for the ranges -#. data. -#: dwarf2read.c:14464 dwarf2read.c:14476 -msgid "Invalid .debug_rnglists data (no base address)" -msgstr "" - -#. Inverted range entries are invalid. -#: dwarf2read.c:14483 -msgid "Invalid .debug_rnglists data (inverted range)" -msgstr "" - -#: dwarf2read.c:14499 -#, possible-c-format -msgid ".debug_rnglists entry has start address of zero [in module %s]" +msgid "Not enough elements for DW_OP_swap. Need 2, have %zu." msgstr "" -#: dwarf2read.c:14509 +#: dwarf2/expr.c:920 #, possible-c-format -msgid "Offset %d is not terminated for DW_AT_ranges attribute" -msgstr "" - -#. We have no valid base address for the ranges -#. data. -#: dwarf2read.c:14590 -msgid "Invalid .debug_ranges data (no base address)" +msgid "Not enough elements for DW_OP_rot. Need 3, have %zu." msgstr "" -#. Inverted range entries are invalid. -#: dwarf2read.c:14597 -msgid "Invalid .debug_ranges data (inverted range)" +#: dwarf2/expr.c:1032 +msgid "Incompatible types on DWARF stack" msgstr "" -#: dwarf2read.c:14613 -#, possible-c-format -msgid ".debug_ranges entry has start address of zero [in module %s]" +#: dwarf2/expr.c:1155 +msgid "Can't be reached." msgstr "" -#: dwarf2read.c:15330 -#, possible-c-format -msgid "Unhandled DW_AT_accessibility value (%x)" +#: dwarf2/expr.c:1242 +msgid "" +"DWARF-2 expression error: DW_OP_GNU_uninit must always be the very last op." msgstr "" -#: dwarf2read.c:15427 -#, possible-c-format -msgid "unsupported accessibility %d" +#: dwarf2/expr.c:1287 +msgid "DW_OP_entry_value: too few bytes available." msgstr "" -#: dwarf2read.c:15439 -msgid "unexpected virtuality in component of Ada type" +#: dwarf2/expr.c:1312 +msgid "" +"DWARF-2 expression error: DW_OP_entry_value is supported only for single " +"DW_OP_reg* or for DW_OP_breg*(0)+DW_OP_deref*" msgstr "" -#: dwarf2read.c:15491 -msgid "unexpected member function in Ada type" +#: dwarf2/expr.c:1389 +msgid "DW_OP_reinterpret has wrong size" msgstr "" -#: dwarf2read.c:15556 +#: dwarf2/expr.c:1404 #, possible-c-format -msgid "member function type missing for '%s'" +msgid "Unhandled dwarf expression opcode 0x%x" msgstr "" -#: dwarf2read.c:15628 +#: dwarf2/dwz.c:29 #, possible-c-format -msgid "cannot determine context for virtual member function \"%s\" (offset %s)" +msgid "DW_FORM_GNU_strp_alt used without .debug_str section [in module %s]" msgstr "" -#. GCC does this, as of 2008-08-25; PR debug/37237. -#: dwarf2read.c:15655 +#: dwarf2/dwz.c:33 #, possible-c-format msgid "" -"Member function \"%s\" (offset %s) is virtual but the vtable offset is not " -"specified" +"DW_FORM_GNU_strp_alt pointing outside of .debug_str section [in module %s]" msgstr "" -#: dwarf2read.c:15671 -msgid "unexpected member functions in Ada type" +#: dwarf2/index-cache.c:132 +msgid "The index cache directory name is empty, skipping store." msgstr "" -#: dwarf2read.c:15768 +#: dwarf2/index-cache.c:141 #, possible-c-format -msgid "DW_AT_alignment must have constant form - DIE at %s [in module %s]" +msgid "index cache: could not make cache directory: %s" msgstr "" -#: dwarf2read.c:15781 -#, possible-c-format -msgid "DW_AT_alignment value must not be negative - DIE at %s [in module %s]" +#: dwarf2/index-cache.c:190 +msgid "The index cache directory name is empty, skipping cache lookup." msgstr "" -#: dwarf2read.c:15794 +#: dwarf2/index-cache.c:266 #, possible-c-format -msgid "DW_AT_alignment value must not be zero - DIE at %s [in module %s]" +msgid "The index cache is currently %s.\n" msgstr "" -#: dwarf2read.c:15802 -#, possible-c-format -msgid "DW_AT_alignment value must be a power of 2 - DIE at %s [in module %s]" +#: dwarf2/index-cache.c:267 +msgid "enabled" msgstr "" -#: dwarf2read.c:15820 +#: dwarf2/index-cache.c:314 #, possible-c-format -msgid "DW_AT_alignment value too large - DIE at %s [in module %s]" +msgid "%s Cache hits (this session): %u\n" msgstr "" -#: dwarf2read.c:16030 +#: dwarf2/index-cache.c:316 #, possible-c-format -msgid "DW_AT_discr_list is not supported yet - DIE at %s [in module %s]" +msgid "%sCache misses (this session): %u\n" msgstr "" -#: dwarf2read.c:16084 -#, possible-c-format -msgid "DW_AT_discr does not have DIE reference form - DIE at %s [in module %s]" +#: dwarf2/index-cache.c:332 +msgid "Couldn't determine a path for the index cache directory." msgstr "" -#: dwarf2read.c:16162 -#, possible-c-format -msgid "virtual function table pointer not found when defining class '%s'" +#: dwarf2/index-cache.c:336 +msgid "Set index-cache options." msgstr "" -#: dwarf2read.c:16279 -#, possible-c-format -msgid "" -"could not find suitable symtab for template parameter - DIE at %s [in module " -"%s]" +#: dwarf2/index-cache.c:342 +msgid "Show index-cache options." msgstr "" -#: dwarf2read.c:16571 -#, possible-c-format -msgid "unable to read array DW_AT_byte_stride - DIE at %s [in module %s]" +#: dwarf2/index-cache.c:347 +msgid "Enable the index cache." msgstr "" -#: dwarf2read.c:16655 -msgid "DW_AT_byte_size for array type smaller than the total size of elements" +#: dwarf2/index-cache.c:351 +msgid "Disable the index cache." msgstr "" -#. GDB has handled this for a long time, but it is -#. not specified by DWARF. It seems to have been -#. emitted by gfortran at least as recently as: -#. http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23057. -#: dwarf2read.c:16881 -#, possible-c-format -msgid "" -"Variable in common block has DW_AT_data_member_location - DIE at %s [in " -"module %s]" +#: dwarf2/index-cache.c:355 +msgid "Set the directory of the index cache." msgstr "" -#: dwarf2read.c:17115 -#, possible-c-format -msgid "invalid pointer size %d" +#: dwarf2/index-cache.c:356 +msgid "Show the directory of the index cache." msgstr "" -#: dwarf2read.c:17119 -#, possible-c-format -msgid "Invalid DW_AT_alignment - DIE at %s [in module %s]" +#: dwarf2/index-cache.c:364 +msgid "Show some stats about the index cache." msgstr "" -#: dwarf2read.c:17343 -msgid "" -"DW_AT_bit_size and DW_AT_string_length_bit_size not currently supported on " -"DW_TAG_string_type." +#: dwarf2/index-cache.c:370 +msgid "Set display of index-cache debug messages." msgstr "" -#. Self-referential typedefs are, it seems, not allowed by the DWARF -#. spec and cause infinite loops in GDB. -#: dwarf2read.c:17613 -#, possible-c-format -msgid "Self-referential DW_TAG_typedef - DIE at %s [in module %s]" +#: dwarf2/index-cache.c:371 +msgid "Show display of index-cache debug messages." msgstr "" -#: dwarf2read.c:17748 -msgid "DW_AT_name missing from DW_TAG_base_type" +#: dwarf2/index-cache.c:372 +msgid "When non-zero, debugging output for the index cache is displayed." msgstr "" -#: dwarf2read.c:17767 +#: dwarf2/frame.c:230 #, possible-c-format -msgid "DW_AT_endianity has unrecognized value %d" +msgid "" +"incomplete CFI data; DW_CFA_restore unspecified\n" +"register %s (#%d) at %s" msgstr "" -#: dwarf2read.c:17829 +#: dwarf2/frame.c:312 dwarf2/expr.h:213 #, possible-c-format -msgid "unsupported DW_ATE_UTF bit size: '%d'" +msgid "%s is invalid in this context" msgstr "" -#: dwarf2read.c:17838 -#, possible-c-format -msgid "unsupported DW_AT_encoding: '%s'" +#. This is actually invalid DWARF, but if we ever do run across +#. it somehow, we might as well support it. So, instead, report +#. it as unimplemented. +#: dwarf2/frame.c:343 +msgid "" +"Not implemented: computing unwound register using explicit value operator" msgstr "" -#: dwarf2read.c:18105 +#: dwarf2/frame.c:471 #, possible-c-format -msgid "Missing DW_AT_lower_bound - DIE at %s [in module %s]" +msgid "bad CFI data; mismatched DW_CFA_restore_state at %s" msgstr "" -#: dwarf2read.c:18126 +#: dwarf2/frame.c:604 #, possible-c-format -msgid "Unresolved DW_AT_upper_bound - DIE at %s [in module %s]" +msgid "" +"Call Frame Instruction op %d in vendor extension space is not handled on " +"this architecture." msgstr "" -#: dwarf2read.c:18131 -#, possible-c-format -msgid "Unresolved DW_AT_count - DIE at %s [in module %s]" +#: dwarf2/frame.c:610 +msgid "Unknown CFI encountered." msgstr "" -#: dwarf2read.c:18177 -#, possible-c-format -msgid "Found DW_AT_bit_stride and DW_AT_byte_stride - DIE at %s [in module %s]" +#: dwarf2/frame.c:895 +msgid "Could not compute CFA; needed to translate this expression" msgstr "" -#: dwarf2read.c:18381 -#, possible-c-format -msgid "Dwarf Error: could not find abbrev number %d [in module %s]" +#: dwarf2/frame.c:938 dwarf2/frame.c:1085 +msgid "Unknown CFA rule." msgstr "" -#: dwarf2read.c:18764 +#: dwarf2/frame.c:1137 #, possible-c-format -msgid "" -"DW_TAG_typedef has childen - GCC PR debug/47510 bug - DIE at %s [in module " -"%s]" +msgid "incomplete CFI data; unspecified registers (e.g., %s) at %s" msgstr "" -#: dwarf2read.c:19108 -#, possible-c-format -msgid "DW_AT_low_pc %s is zero for DIE at %s [in module %s]" +#: dwarf2/frame.c:1329 +msgid "Unknown register rule." msgstr "" -#: dwarf2read.c:19120 -#, possible-c-format -msgid "DW_AT_low_pc %s is not < DW_AT_high_pc %s for DIE at %s [in module %s]" +#: dwarf2/frame.c:1458 +msgid "cfa not available for record btrace target" msgstr "" -#: dwarf2read.c:19178 -#, possible-c-format +#: dwarf2/frame.c:1464 msgid "" -"Dwarf Error: Type Unit at offset %s contains external reference to offset %s " -"[in module %s].\n" +"can't compute CFA for this frame: required registers or memory are " +"unavailable" msgstr "" -#: dwarf2read.c:19213 -#, possible-c-format -msgid "could not find partial DIE %s in cache [from module %s]\n" +#: dwarf2/frame.c:1469 +msgid "can't compute CFA for this frame: frame base not available" msgstr "" -#. For now flag a hard error. -#. Later we can turn this into a complaint. -#. For now flag a hard error. -#. Later we can turn this into a complaint if warranted. -#: dwarf2read.c:19557 dwarf2read.c:19574 -#, possible-c-format -msgid "Dwarf Error: %s found in non-DWO CU [in module %s]" +#: dwarf2/frame.c:1513 +msgid "Unsupported address size" msgstr "" -#: dwarf2read.c:19630 -#, possible-c-format -msgid "Suspicious DW_AT_byte_size value treated as zero instead of %s" +#: dwarf2/frame.c:1530 +msgid "Unsupported encoding: DW_EH_PE_indirect" msgstr "" -#: dwarf2read.c:19729 -#, possible-c-format -msgid "read_address: bad switch, signed [in module %s]" +#: dwarf2/frame.c:1563 dwarf2/frame.c:1611 +msgid "Invalid or unsupported encoding" msgstr "" -#: dwarf2read.c:19748 -#, possible-c-format -msgid "read_address: bad switch, unsigned [in module %s]" +#: dwarf2/frame.c:1798 +msgid "Found a CIE when not expecting it." msgstr "" -#: dwarf2read.c:19841 -msgid "intermixed 32-bit and 64-bit DWARF sections" +#: dwarf2/frame.c:1970 +msgid "Found an FDE when not expecting it." msgstr "" -#: dwarf2read.c:19878 +#: dwarf2/frame.c:2113 #, possible-c-format -msgid "read_offset_1: bad switch [in module %s]" +msgid "Corrupt data in %s:%s; align 4 workaround apparently succeeded" msgstr "" -#: dwarf2read.c:19924 +#: dwarf2/frame.c:2120 #, possible-c-format -msgid "%s used without %s section [in module %s]" +msgid "Corrupt data in %s:%s; align 8 workaround apparently succeeded" msgstr "" -#: dwarf2read.c:19927 +#: dwarf2/frame.c:2127 #, possible-c-format -msgid "%s pointing outside of %s section [in module %s]" +msgid "Corrupt data in %s:%s" msgstr "" -#: dwarf2read.c:19972 +#: dwarf2/frame.c:2204 #, possible-c-format -msgid "DW_FORM_GNU_strp_alt used without .debug_str section [in module %s]" +msgid "skipping .eh_frame info of %s: %s" msgstr "" -#: dwarf2read.c:19976 +#: dwarf2/frame.c:2233 #, possible-c-format -msgid "" -"DW_FORM_GNU_strp_alt pointing outside of .debug_str section [in module %s]" +msgid "skipping .debug_frame info of %s: %s" msgstr "" -#: dwarf2read.c:20087 +#: dwarf2/frame.c:2298 #, possible-c-format -msgid "DW_FORM_addr_index used without .debug_addr section [in module %s]" +msgid "The DWARF stack unwinders are currently %s.\n" msgstr "" -#: dwarf2read.c:20090 -#, possible-c-format -msgid "" -"DW_FORM_addr_index pointing outside of .debug_addr section [in module %s]" +#: dwarf2/frame.c:2309 +msgid "Set whether the DWARF stack frame unwinders are used." msgstr "" -#: dwarf2read.c:20221 -#, possible-c-format -msgid "" -"%s used without .debug_str.dwo section in CU at offset %s [in module %s]" +#: dwarf2/frame.c:2310 +msgid "Show whether the DWARF stack frame unwinders are used." msgstr "" -#: dwarf2read.c:20225 -#, possible-c-format +#: dwarf2/frame.c:2311 msgid "" -"%s used without .debug_str_offsets.dwo section in CU at offset %s [in module " -"%s]" +"When enabled the DWARF stack frame unwinders can be used for architectures\n" +"that support the DWARF unwinders. Enabling the DWARF unwinders for an\n" +"architecture that doesn't support them will have no effect." msgstr "" -#: dwarf2read.c:20229 +#: dwarf2/line-header.c:92 #, possible-c-format -msgid "" -"%s pointing outside of .debug_str_offsets.dwo section in CU at offset %s [in " -"module %s]" +msgid "bad file number in macro information (%d)" msgstr "" -#: dwarf2read.c:20239 -#, possible-c-format -msgid "" -"Offset from %s pointing outside of .debug_str.dwo section in CU at offset %s " -"[in module %s]" +#: dwarf2/line-header.c:121 +msgid "statement list doesn't fit in .debug_line section" msgstr "" -#: dwarf2read.c:20391 -#, possible-c-format -msgid "string type expected for attribute %s for DIE at %s in module %s" +#: dwarf2/line-header.c:145 +msgid "intermixed 32-bit and 64-bit DWARF sections" msgstr "" -#: dwarf2read.c:20651 +#: dwarf2/line-header.c:271 #, possible-c-format msgid "Unknown format content type %s" msgstr "" -#: dwarf2read.c:20689 -msgid "missing .debug_line.dwo section" -msgstr "" - -#: dwarf2read.c:20691 -msgid "missing .debug_line section" -msgstr "" - #. This is a version we don't understand. The format could have #. changed in ways we don't handle properly so just punt. -#: dwarf2read.c:20734 +#: dwarf2/line-header.c:332 msgid "unsupported version in .debug_line section" msgstr "" -#: dwarf2read.c:20749 +#: dwarf2/line-header.c:347 #, possible-c-format msgid "unsupported segment selector size %u in .debug_line section" msgstr "" -#: dwarf2read.c:20771 +#: dwarf2/line-header.c:369 msgid "invalid maximum_ops_per_instruction in `.debug_line' section" msgstr "" -#: dwarf2read.c:20844 +#: dwarf2/line-header.c:442 msgid "line number info header doesn't fit in `.debug_line' section" msgstr "" -#: dwarf2read.c:21309 +#: dwarf2/comp-unit.c:80 #, possible-c-format -msgid ".debug_line address at offset 0x%lx is 0 [in module %s]" +msgid "" +"Dwarf Error: wrong version in compilation unit header (is %d, should be 2, " +"3, 4 or 5) [in module %s]" msgstr "" -#: dwarf2read.c:21436 dwarf2read.c:21444 -msgid "mangled .debug_line section" +#: dwarf2/comp-unit.c:95 +msgid "read_comp_unit_head: invalid section_kind" msgstr "" -#: dwarf2read.c:21827 -msgid "file index out of range" +#: dwarf2/comp-unit.c:109 +#, possible-c-format +msgid "" +"Dwarf Error: wrong unit_type in compilation unit header (is %s, should be " +"%s) [in module %s]" msgstr "" -#. Not a tag we recognize. Hopefully we aren't processing -#. trash data, but since we must specifically ignore things -#. we don't recognize, there is nothing else we should do at -#. this point. -#: dwarf2read.c:22129 +#: dwarf2/comp-unit.c:119 #, possible-c-format -msgid "unsupported tag: '%s'" +msgid "" +"Dwarf Error: wrong unit_type in compilation unit header (is %#04x, should be " +"one of: %s, %s, %s, %s or %s) [in module %s]" msgstr "" -#: dwarf2read.c:22289 dwarf2read.c:23797 -#, possible-c-format -msgid "unsupported const value attribute form: '%s'" +#: dwarf2/comp-unit.c:143 +msgid "read_comp_unit_head: dwarf from non elf file" msgstr "" -#: dwarf2read.c:22403 +#: dwarf2/comp-unit.c:163 #, possible-c-format msgid "" -"Dwarf Error: Problem turning containing type into gdb type [in module %s]" +"Dwarf Error: Too big type_offset in compilation unit header (is %s) [in " +"module %s]" msgstr "" -#: dwarf2read.c:22420 +#: dwarf2/comp-unit.c:185 #, possible-c-format -msgid "<unknown type in %s, CU %s, DIE %s>" +msgid "" +"Dwarf Error: bad offset (%s) in compilation unit header (offset %s + 6) [in " +"module %s]" msgstr "" -#: dwarf2read.c:22472 +#: dwarf2/comp-unit.c:195 #, possible-c-format -msgid "Dwarf Error: Bad type attribute %s in DIE at %s [in module %s]" +msgid "" +"Dwarf Error: bad length (0x%x) in compilation unit header (offset %s + 0) " +"[in module %s]" msgstr "" -#: dwarf2read.c:22600 +#: dwarf2/comp-unit.c:245 #, possible-c-format -msgid "unexpected tag in read_type_die: '%s'" +msgid "read_address: bad switch, signed [in module %s]" msgstr "" -#: dwarf2read.c:22814 +#: dwarf2/comp-unit.c:264 #, possible-c-format -msgid "template param type '%s' defined within parent '%s'" +msgid "read_address: bad switch, unsigned [in module %s]" msgstr "" -#: dwarf2read.c:23397 -#, possible-c-format -msgid "unsupported die ref attribute form: '%s'" +#: dwarf2/loc.c:112 +msgid "access outside bounds of object referenced via synthetic pointer" msgstr "" -#. For DW_FORM_data16 see attr_form_is_constant. -#: dwarf2read.c:23419 -#, possible-c-format -msgid "Attribute value is not a constant (%s)" +#: dwarf2/loc.c:403 +msgid "dwarf2_find_location_expression: Corrupted DWARF expression." msgstr "" -#: dwarf2read.c:23442 +#: dwarf2/loc.c:599 #, possible-c-format -msgid "Dwarf Error: Expected reference attribute [in module %s]" +msgid "Could not find the frame base for \"%s\"." msgstr "" -#: dwarf2read.c:23524 -#, possible-c-format -msgid "" -"Dwarf Error: Cannot find DIE at %s referenced from DIE at %s [in module %s]" +#: dwarf2/loc.c:636 +msgid "Bad DW_OP_GNU_variable_value DIE." msgstr "" -#. We shouldn't get here for a dummy CU, but don't crash on the user. -#. Instead just throw an error, not much else we can do. -#: dwarf2read.c:23557 dwarf2read.c:23699 -#, possible-c-format -msgid "Dwarf Error: Dummy CU at %s referenced in module %s" +#: dwarf2/loc.c:642 +msgid "Type of DW_OP_GNU_variable_value DIE must be an integer or pointer." msgstr "" -#: dwarf2read.c:23563 dwarf2read.c:23705 -#, possible-c-format -msgid "Dwarf Error: Cannot find DIE at %s referenced in module %s" +#: dwarf2/loc.c:704 +msgid "Could not find type for DW_OP_const_type" msgstr "" -#: dwarf2read.c:23625 -#, possible-c-format -msgid "" -"Dwarf Error: DIE at %s referenced in module %s is neither DW_FORM_block* nor " -"DW_FORM_exprloc" +#: dwarf2/loc.c:706 +msgid "DW_OP_const_type has different sizes for type and data" msgstr "" -#: dwarf2read.c:23911 dwarf2read.c:23949 -#, possible-c-format -msgid "" -"Dwarf Error: Cannot find signatured DIE %s referenced from DIE at %s [in " -"module %s]" +#: dwarf2/loc.c:724 dwarf2/loc.c:2465 +msgid "Location address is not set." msgstr "" -#: dwarf2read.c:23921 dwarf2read.c:23979 +#: dwarf2/loc.c:758 dwarf2/loc.c:1451 +msgid "Cannot resolve DW_AT_call_data_value" +msgstr "" + +#: dwarf2/loc.c:795 +msgid "frame address is not available." +msgstr "" + +#: dwarf2/loc.c:851 #, possible-c-format -msgid "" -"Dwarf Error: Problem reading signatured DIE %s referenced from DIE at %s [in " -"module %s]" +msgid "Entry values and tail call frames debugging is %s.\n" msgstr "" -#: dwarf2read.c:23970 +#: dwarf2/loc.c:880 #, possible-c-format -msgid "" -"Dwarf Error: Cannot build signatured type %s referenced from DIE at %s [in " -"module %s]" +msgid "DW_AT_call_target is not specified at %s in %s" msgstr "" -#: dwarf2read.c:24014 +#: dwarf2/loc.c:892 #, possible-c-format msgid "" -"Dwarf Error: DW_AT_signature has bad form %s in DIE at %s [in module %s]" +"DW_AT_call_target DWARF block resolving requires known frame which is " +"currently not available at %s in %s" msgstr "" -#: dwarf2read.c:24335 +#: dwarf2/loc.c:926 #, possible-c-format -msgid "unsupported stack op: '%s'" +msgid "Cannot find function \"%s\" for a call site target at %s in %s" msgstr "" -#: dwarf2read.c:24338 -#, possible-c-format -msgid "unsupported stack op: '%02x'" +#: dwarf2/loc.c:940 +msgid "invalid call site target kind" msgstr "" -#: dwarf2read.c:24349 -msgid "location description stack overflow" +#: dwarf2/loc.c:956 +#, possible-c-format +msgid "DW_TAG_call_site resolving failed to find function name for address %s" msgstr "" -#: dwarf2read.c:24355 -msgid "location description stack underflow" +#: dwarf2/loc.c:1014 +#, possible-c-format +msgid "" +"DW_OP_entry_value resolving has found function \"%s\" at %s can call itself " +"via tail calls" msgstr "" -#: dwarf2read.c:24418 +#: dwarf2/loc.c:1165 #, possible-c-format -msgid "bad file number in macro information (%d)" +msgid "Unable to find function for PC %s" msgstr "" -#: dwarf2read.c:24481 +#: dwarf2/loc.c:1252 #, possible-c-format msgid "" -"macro definition contains spaces in formal argument list:\n" -"`%s'" +"There are no unambiguously determinable intermediate callers or callees " +"between caller function \"%s\" at %s and callee function \"%s\" at %s" msgstr "" -#: dwarf2read.c:24712 +#: dwarf2/loc.c:1356 #, possible-c-format -msgid "invalid form 0x%x in `%s'" +msgid "" +"DW_OP_entry_value resolving callee gdbarch %s (of %s (%s)) does not match " +"caller gdbarch %s" msgstr "" -#: dwarf2read.c:24739 +#: dwarf2/loc.c:1370 #, possible-c-format -msgid "unrecognized DW_MACFINO opcode 0x%x" +msgid "DW_OP_entry_value resolving requires caller of %s (%s)" msgstr "" -#: dwarf2read.c:24784 +#: dwarf2/loc.c:1387 #, possible-c-format -msgid "unrecognized version `%d' in .debug_macro section" +msgid "" +"DW_OP_entry_value resolving expects callee %s at %s but the called frame is " +"for %s at %s" msgstr "" -#. DWARF violation as no main source is present. -#: dwarf2read.c:24933 +#. DW_TAG_call_site_parameter will be missing just if GCC could not +#. determine its value. +#: dwarf2/loc.c:1413 #, possible-c-format -msgid "debug info with no main source gives macro %s on line %d: %s" +msgid "Cannot find matching parameter at DW_TAG_call_site %s at %s" msgstr "" -#: dwarf2read.c:24935 dwarf2read.c:24943 dwarf2read.c:24957 -msgid "definition" +#: dwarf2/loc.c:1599 +msgid "" +"DWARF-2 expression error: DW_OP_entry_value is supported only for single " +"DW_OP_reg* or for DW_OP_fbreg(*)" msgstr "" -#: dwarf2read.c:24935 dwarf2read.c:24943 dwarf2read.c:24957 -msgid "undefinition" +#: dwarf2/loc.c:1686 +msgid "Should not be able to create a lazy value with an enclosing type" msgstr "" -#: dwarf2read.c:24941 -#, possible-c-format -msgid "debug info gives %s macro %s with %s line %d: %s" +#: dwarf2/loc.c:1780 +msgid "" +"Can't do read-modify-write to update bitfield; containing word has been " +"optimized out" msgstr "" -#: dwarf2read.c:24942 dwarf2read.c:24956 dwarf2read.c:24986 -msgid "command-line" +#: dwarf2/loc.c:1785 +msgid "" +"Can't do read-modify-write to update bitfield; containing word is unavailable" msgstr "" -#: dwarf2read.c:24942 dwarf2read.c:24956 -msgid "in-file" +#: dwarf2/loc.c:1938 dwarf2/loc.c:2425 +msgid "invalid location type" msgstr "" -#: dwarf2read.c:24944 dwarf2read.c:24987 -msgid "zero" +#: dwarf2/loc.c:2120 +msgid "Invalid use of DW_OP_implicit_pointer" msgstr "" -#: dwarf2read.c:24944 dwarf2read.c:24987 -msgid "non-zero" +#: dwarf2/loc.c:2316 +msgid "cannot use offset on synthetic pointer to register" msgstr "" -#. Fedora's rpm-build's "debugedit" binary -#. corrupted .debug_macro sections. -#. -#. For more info, see -#. https://bugzilla.redhat.com/show_bug.cgi?id=1708786 -#: dwarf2read.c:24953 -#, possible-c-format -msgid "" -"debug info gives %s invalid macro %s without body (corrupted?) at line %d on " -"file %s" +#: dwarf2/loc.c:2675 +msgid "cannot find reference address for offset property" msgstr "" -#: dwarf2read.c:24984 +#: dwarf2/loc.c:2887 #, possible-c-format -msgid "debug info gives source %d included from %s at %s line %d" +msgid "DWARF operator %s cannot be translated to an agent expression" msgstr "" -#: dwarf2read.c:24986 skip.c:336 -msgid "file" +#: dwarf2/loc.c:2890 +#, possible-c-format +msgid "" +"Unknown DWARF operator 0x%02x cannot be translated to an agent expression" msgstr "" -#: dwarf2read.c:25003 -msgid "macro debug info has an unmatched `close_file' directive" +#: dwarf2/loc.c:2908 +#, possible-c-format +msgid "bad DWARF register number %d" msgstr "" -#: dwarf2read.c:25030 -msgid "no terminating 0-type entry for macros in `.debug_macinfo' section" +#: dwarf2/loc.c:2923 +#, possible-c-format +msgid "Unable to access DWARF register number %d" msgstr "" -#. This has actually happened; see -#. http://sourceware.org/bugzilla/show_bug.cgi?id=13568. -#: dwarf2read.c:25071 -msgid "recursive DW_MACRO_import in .debug_macro section" +#: dwarf2/loc.c:2924 +#, possible-c-format +msgid "Unable to access DWARF register number %s" msgstr "" -#: dwarf2read.c:25165 +#: dwarf2/loc.c:3199 #, possible-c-format -msgid "missing %s section" +msgid "Cannot translate DW_OP_implicit_value of %d bytes" msgstr "" -#: dwarf2read.c:25462 -msgid "Location list used without specifying the CU base address." +#: dwarf2/loc.c:3565 +msgid "Cannot translate empty pieces to agent expressions" msgstr "" -#: dwarf2read.c:25653 -#, possible-c-format -msgid "" -"Dwarf Error: could not find partial DIE containing offset %s [in module %s]" +#: dwarf2/loc.c:3578 +msgid "Expression pieces exceed word size" msgstr "" -#: dwarf2read.c:25666 -#, possible-c-format -msgid "invalid dwarf2 offset %s" +#: dwarf2/loc.c:3672 +msgid "invalid label" +msgstr "" + +#. The text is output as "$bad_register_number". +#. That is why we use the underscores. +#: dwarf2/loc.c:3748 +msgid "bad_register_number" msgstr "" -#: dwarf2read.c:25887 +#: dwarf2/loc.c:3772 dwarf2/loc.c:3781 #, possible-c-format -msgid "DW_AT_allocated has the wrong form (%s) at DIE %s" +msgid "a variable in $%s" msgstr "" -#: dwarf2read.c:25903 +#: dwarf2/loc.c:3802 #, possible-c-format -msgid "DW_AT_associated has the wrong form (%s) at DIE %s" +msgid "No block found for address for symbol \"%s\"." msgstr "" -#: dwarf2read.c:25932 +#: dwarf2/loc.c:3808 #, possible-c-format -msgid "A problem internal to GDB: DIE %s has type already set" +msgid "No function found for block for symbol \"%s\"." msgstr "" -#: dwarf2read.c:26091 +#: dwarf2/loc.c:3821 #, possible-c-format -msgid "Whether to always disassemble DWARF expressions is %s.\n" +msgid "Unexpected opcode after DW_OP_breg%u for symbol \"%s\"." msgstr "" -#: dwarf2read.c:26101 +#: dwarf2/loc.c:3839 #, possible-c-format -msgid "Whether to check \"physname\" is %s.\n" +msgid "a variable at frame base reg $%s offset %s+%s" msgstr "" -#: dwarf2read.c:26108 -msgid "" -"Set DWARF specific variables.\n" -"Configure DWARF variables such as the cache size." +#: dwarf2/loc.c:3851 +#, possible-c-format +msgid "a variable at offset %s from base reg $%s" msgstr "" -#. allow-unknown -#: dwarf2read.c:26114 +#: dwarf2/loc.c:3883 dwarf2/loc.c:3907 +#, possible-c-format msgid "" -"Show DWARF specific variables.\n" -"Show DWARF variables such as the cache size." +"a thread-local variable at offset 0x%s in the thread-local storage for `%s'" msgstr "" -#: dwarf2read.c:26121 -msgid "Set the upper bound on the age of cached DWARF compilation units." +#: dwarf2/loc.c:3918 +#, possible-c-format +msgid "the constant %d" msgstr "" -#: dwarf2read.c:26122 -msgid "Show the upper bound on the age of cached DWARF compilation units." +#: dwarf2/loc.c:3953 +#, possible-c-format +msgid "Unrecognized DWARF opcode 0x%02x at %ld" msgstr "" -#: dwarf2read.c:26123 -msgid "" -"A higher limit means that cached compilation units will be stored\n" -"in memory longer, and more total memory will be used. Zero disables\n" -"caching, which can slow down startup." +#: dwarf2/loc.c:4330 +#, possible-c-format +msgid "Whether to always disassemble DWARF expressions is %s.\n" msgstr "" -#: dwarf2read.c:26133 -msgid "Set whether `info address' always disassembles DWARF expressions." +#: dwarf2/loc.c:4358 +msgid ", and " msgstr "" -#: dwarf2read.c:26134 -msgid "Show whether `info address' always disassembles DWARF expressions." +#: dwarf2/loc.c:4374 +msgid "a complex DWARF expression:\n" msgstr "" -#: dwarf2read.c:26135 -msgid "" -"When enabled, DWARF expressions are always printed in an assembly-like\n" -"syntax. When disabled, expressions will be printed in a more\n" -"conversational style, when possible." +#: dwarf2/loc.c:4396 +#, possible-c-format +msgid "an empty %s-byte piece" msgstr "" -#: dwarf2read.c:26144 -msgid "Set debugging of the DWARF reader." +#: dwarf2/loc.c:4399 +#, possible-c-format +msgid " [%s-byte piece]" msgstr "" -#: dwarf2read.c:26145 -msgid "Show debugging of the DWARF reader." +#: dwarf2/loc.c:4411 +#, possible-c-format +msgid "an empty %s-bit piece" msgstr "" -#: dwarf2read.c:26146 -msgid "" -"When enabled (non-zero), debugging messages are printed during DWARF\n" -"reading and symtab expansion. A value of 1 (one) provides basic\n" -"information. A value greater than 1 provides more verbose information." +#: dwarf2/loc.c:4415 +#, possible-c-format +msgid " [%s-bit piece, offset %s bits]" msgstr "" -#: dwarf2read.c:26154 -msgid "Set debugging of the DWARF DIE reader." +#: dwarf2/loc.c:4427 +#, possible-c-format +msgid "Corrupted DWARF2 expression for \"%s\"." msgstr "" -#: dwarf2read.c:26155 -msgid "Show debugging of the DWARF DIE reader." +#: dwarf2/loc.c:4481 dwarf2/loc.c:4716 +#, possible-c-format +msgid "symbol \"%s\" is optimized out" msgstr "" -#: dwarf2read.c:26156 -msgid "" -"When enabled (non-zero), DIEs are dumped after they are read in.\n" -"The value is the maximum depth to print." +#: dwarf2/loc.c:4592 +msgid "multi-location:\n" msgstr "" -#: dwarf2read.c:26163 -msgid "Set debugging of the dwarf line reader." +#: dwarf2/loc.c:4627 +#, possible-c-format +msgid " Base address %s" msgstr "" -#: dwarf2read.c:26164 -msgid "Show debugging of the dwarf line reader." +#: dwarf2/loc.c:4638 +#, possible-c-format +msgid "Corrupted DWARF expression for symbol \"%s\"." msgstr "" -#: dwarf2read.c:26165 -msgid "" -"When enabled (non-zero), line number entries are dumped as they are read " -"in.\n" -"A value of 1 (one) provides basic information.\n" -"A value greater than 1 provides more verbose information." +#. (It would improve readability to print only the minimum +#. necessary digits of the second number of the range.) +#: dwarf2/loc.c:4666 +#, possible-c-format +msgid " Range %s-%s: " msgstr "" -#: dwarf2read.c:26173 -msgid "Set cross-checking of \"physname\" code against demangler." +#: dwarf2/loc.c:4743 +msgid "Set entry values and tail call frames debugging." msgstr "" -#: dwarf2read.c:26174 -msgid "Show cross-checking of \"physname\" code against demangler." +#: dwarf2/loc.c:4745 +msgid "Show entry values and tail call frames debugging." msgstr "" -#: dwarf2read.c:26175 +#: dwarf2/loc.c:4747 msgid "" -"When enabled, GDB's internal \"physname\" code is checked against\n" -"the demangler." +"When non-zero, the process of determining parameter values from function " +"entry point and tail call frames will be printed." msgstr "" -#: dwarf2read.c:26182 -msgid "Set whether to use deprecated gdb_index sections." +#: dwarf2/loc.c:4755 +msgid "Set whether `info address' always disassembles DWARF expressions." msgstr "" -#: dwarf2read.c:26183 -msgid "Show whether to use deprecated gdb_index sections." +#: dwarf2/loc.c:4756 +msgid "Show whether `info address' always disassembles DWARF expressions." msgstr "" -#: dwarf2read.c:26184 +#: dwarf2/loc.c:4757 msgid "" -"When enabled, deprecated .gdb_index sections are used anyway.\n" -"Normally they are ignored either because of a missing feature or\n" -"performance issue.\n" -"Warning: This option must be enabled before gdb reads the file." +"When enabled, DWARF expressions are always printed in an assembly-like\n" +"syntax. When disabled, expressions will be printed in a more\n" +"conversational style, when possible." msgstr "" -#: elfread.c:154 +#: dwarf2/macro.c:42 #, possible-c-format -msgid "Loadable section \"%s\" outside of ELF segments" +msgid "" +"macro debug info contains a malformed macro definition:\n" +"`%s'" msgstr "" -#. This case indicates buggy inferior program, the resolved address -#. should never change. -#: elfread.c:754 +#: dwarf2/macro.c:78 #, possible-c-format msgid "" -"gnu-indirect-function \"%s\" has changed its resolved function_address from " -"%s to %s" +"macro definition contains spaces in formal argument list:\n" +"`%s'" msgstr "" -#: elfread.c:1011 +#: dwarf2/macro.c:306 #, possible-c-format -msgid "handle_inferior_event: Invalid gnu-indirect-function breakpoint type %d" +msgid "invalid form 0x%x in `%s'" msgstr "" -#: elfread.c:1084 elfread.c:1097 elfread.c:1123 machoread.c:808 machoread.c:824 +#: dwarf2/macro.c:333 #, possible-c-format -msgid "Can't read symbols from %s: %s" +msgid "unrecognized DW_MACFINO opcode 0x%x" msgstr "" -#: eval.c:303 -msgid "too many initializers" +#: dwarf2/macro.c:378 +#, possible-c-format +msgid "unrecognized version `%d' in .debug_macro section" msgstr "" -#: eval.c:307 -msgid "don't know which variant you want to set" +#. DWARF violation as no main source is present. +#: dwarf2/macro.c:525 +#, possible-c-format +msgid "debug info with no main source gives macro %s on line %d: %s" msgstr "" -#: eval.c:368 -msgid "tuple index out of range" +#: dwarf2/macro.c:527 dwarf2/macro.c:535 dwarf2/macro.c:549 +msgid "definition" msgstr "" -#: eval.c:766 -msgid "Cannot evaluate function -- may be inlined" +#: dwarf2/macro.c:527 dwarf2/macro.c:535 dwarf2/macro.c:549 +msgid "undefinition" msgstr "" -#: eval.c:791 valarith.c:504 valarith.c:618 -msgid "Xmethod is missing return type." +#: dwarf2/macro.c:533 +#, possible-c-format +msgid "debug info gives %s macro %s with %s line %d: %s" msgstr "" -#: eval.c:817 -msgid "" -"Expression of type other than \"Function returning ...\" used as function" +#: dwarf2/macro.c:534 dwarf2/macro.c:548 dwarf2/macro.c:578 +msgid "command-line" +msgstr "" + +#: dwarf2/macro.c:534 dwarf2/macro.c:548 +msgid "in-file" +msgstr "" + +#: dwarf2/macro.c:536 dwarf2/macro.c:579 +msgid "zero" +msgstr "" + +#: dwarf2/macro.c:536 dwarf2/macro.c:579 +msgid "non-zero" +msgstr "" + +#. Fedora's rpm-build's "debugedit" binary +#. corrupted .debug_macro sections. +#. +#. For more info, see +#. https://bugzilla.redhat.com/show_bug.cgi?id=1708786 +#: dwarf2/macro.c:545 +#, possible-c-format +msgid "" +"debug info gives %s invalid macro %s without body (corrupted?) at line %d on " +"file %s" +msgstr "" + +#: dwarf2/macro.c:576 +#, possible-c-format +msgid "debug info gives source %d included from %s at %s line %d" +msgstr "" + +#: dwarf2/macro.c:578 skip.c:333 +msgid "file" +msgstr "" + +#: dwarf2/macro.c:595 +msgid "macro debug info has an unmatched `close_file' directive" +msgstr "" + +#: dwarf2/macro.c:622 +msgid "no terminating 0-type entry for macros in `.debug_macinfo' section" +msgstr "" + +#. This has actually happened; see +#. http://sourceware.org/bugzilla/show_bug.cgi?id=13568. +#: dwarf2/macro.c:663 +msgid "recursive DW_MACRO_import in .debug_macro section" +msgstr "" + +#: dwarf2/attribute.c:128 +#, possible-c-format +msgid "unsupported die ref attribute form: '%s'" +msgstr "" + +#. For DW_FORM_data16 see attribute::form_is_constant. +#: dwarf2/attribute.c:148 +#, possible-c-format +msgid "Attribute value is not a constant (%s)" +msgstr "" + +#: elfread.c:152 +#, possible-c-format +msgid "Loadable section \"%s\" outside of ELF segments" +msgstr "" + +#. This case indicates buggy inferior program, the resolved address +#. should never change. +#: elfread.c:753 +#, possible-c-format +msgid "" +"gnu-indirect-function \"%s\" has changed its resolved function_address from " +"%s to %s" +msgstr "" + +#: elfread.c:1010 +#, possible-c-format +msgid "handle_inferior_event: Invalid gnu-indirect-function breakpoint type %d" +msgstr "" + +#: elfread.c:1083 elfread.c:1096 elfread.c:1122 machoread.c:807 machoread.c:823 +#, possible-c-format +msgid "Can't read symbols from %s: %s" +msgstr "" + +#: eval.c:302 +msgid "too many initializers" +msgstr "" + +#: eval.c:306 +msgid "don't know which variant you want to set" +msgstr "" + +#: eval.c:367 +msgid "tuple index out of range" +msgstr "" + +#: eval.c:765 +msgid "Cannot evaluate function -- may be inlined" +msgstr "" + +#: eval.c:790 valarith.c:513 valarith.c:627 +msgid "Xmethod is missing return type." +msgstr "" + +#: eval.c:816 +msgid "" +"Expression of type other than \"Function returning ...\" used as function" msgstr "" -#: eval.c:912 +#: eval.c:911 msgid "Non-pointer-to-member value used in pointer-to-member construct" msgstr "" #. For the time being, we don't handle this. -#: eval.c:1145 +#: eval.c:1143 #, possible-c-format msgid "Call to overloaded function %s requires `this' pointer" msgstr "" -#: eval.c:1344 +#: eval.c:1356 #, possible-c-format msgid "Symbol \"%s\" does not have any specific entry value" msgstr "" -#: eval.c:1387 +#: eval.c:1399 #, possible-c-format msgid "Register $%s not available." msgstr "" -#: eval.c:1400 +#: eval.c:1412 #, possible-c-format msgid "Value of register %s not available." msgstr "" -#: eval.c:1509 +#: eval.c:1521 msgid "(power)set type with unknown size" msgstr "" #. different element modes. -#: eval.c:1532 +#: eval.c:1544 msgid "POWERSET tuple elements of different mode" msgstr "" -#: eval.c:1536 +#: eval.c:1548 msgid "incompatible POWERSET tuple elements" msgstr "" -#: eval.c:1539 +#: eval.c:1551 msgid "empty POWERSET tuple range" msgstr "" -#: eval.c:1543 +#: eval.c:1555 msgid "POWERSET tuple element out of range" msgstr "" -#: eval.c:1708 +#: eval.c:1719 msgid "no 'respondsTo:' or 'respondsToSelector:' method" msgstr "" -#: eval.c:1717 +#: eval.c:1728 msgid "no 'methodFor:' or 'methodForSelector:' method" msgstr "" -#: eval.c:1736 +#: eval.c:1747 msgid "Target does not respond to this message selector." msgstr "" -#: eval.c:1821 +#: eval.c:1832 msgid "method address has symbol information with non-function type; skipping" msgstr "" -#: eval.c:1874 +#: eval.c:1885 msgid "Expression of type other than \"method returning ...\" used as a method" msgstr "" -#: eval.c:2007 +#: eval.c:2018 msgid "Cannot perform substring on this type" msgstr "" -#: eval.c:2123 +#: eval.c:2134 msgid "non-pointer-to-member value used in pointer-to-member construct" msgstr "" -#: eval.c:2398 +#: eval.c:2410 #, possible-c-format msgid "Too many subscripts for F77 (%d Max)" msgstr "" -#: eval.c:2403 +#: eval.c:2415 msgid "Wrong number of subscripts" msgstr "" -#: eval.c:2598 +#: eval.c:2610 msgid "Non-integral right operand for \"@\" operator." msgstr "" -#: eval.c:2668 +#: eval.c:2680 msgid "Attempt to dereference pointer to member without an object" msgstr "" -#: eval.c:2733 +#: eval.c:2745 msgid "could not determine alignment of type" msgstr "" -#: eval.c:2939 +#: eval.c:2950 msgid "Attempt to use a type as an expression" msgstr "" @@ -12021,153 +12160,156 @@ #. If there are any cases landing here which mean a user error, #. then they should be separate cases, with more descriptive #. error messages. -#: eval.c:2968 +#: eval.c:2978 msgid "GDB does not (yet) know how to evaluate that kind of expression" msgstr "" -#: eval.c:3044 +#: eval.c:3054 msgid "Attempt to take address of register or constant." msgstr "" -#: eval.c:3343 +#: eval.c:3353 msgid "Internal error in eval_type." msgstr "" -#: eval.c:3354 +#: eval.c:3364 msgid "Can't get dimensions for a non-array type" msgstr "" -#: event-loop.c:431 event-loop.c:440 event-loop.c:504 event-loop.c:608 -#: event-loop.c:713 event-loop.c:778 event-loop.c:861 event-loop.c:1232 -msgid "use_poll without HAVE_POLL" -msgstr "" - -#: event-loop.c:702 -#, possible-c-format -msgid "Error detected on fd %d\n" -msgstr "" - -#: event-loop.c:705 -#, possible-c-format -msgid "Invalid or non-`poll'able fd %d\n" -msgstr "" - -#: event-loop.c:720 -#, possible-c-format -msgid "Exception condition detected on fd %d\n" -msgstr "" - -#: event-top.c:374 +#: event-top.c:375 msgid "double prompt" msgstr "" #. If stdin died, we may as well kill gdb. -#: event-top.c:488 +#: event-top.c:489 msgid "error detected on stdin\n" msgstr "" #. This message is based on ANSI C, section 4.7. Note that integer #. divide by zero causes this, so "float" is a misnomer. -#: event-top.c:1203 +#: event-top.c:1216 msgid "Erroneous arithmetic operation." msgstr "" -#: exceptions.c:108 +#: exceptions.c:104 msgid "Bad switch." msgstr "" -#: exec.c:54 +#: exec.c:57 msgid "Local exec file" msgstr "" -#: exec.c:55 +#: exec.c:58 msgid "" "Use an executable file as a target.\n" "Specify the filename of the executable file." msgstr "" -#: exec.c:92 +#: exec.c:107 +#, possible-c-format +msgid "exec-file-mismatch handling is currently \"%s\".\n" +msgstr "" + +#: exec.c:127 +#, possible-c-format +msgid "Unrecognized exec-file-mismatch setting: \"%s\"" +msgstr "" + +#: exec.c:139 #, possible-c-format msgid "Writing into executable and core files is %s.\n" msgstr "" -#: exec.c:208 +#: exec.c:308 +#, possible-c-format +msgid "" +"Build ID mismatch between current exec-file %ps\n" +"and automatically determined exec-file %ps\n" +"exec-file-mismatch handling is currently \"%s\"" +msgstr "" + +#: exec.c:329 +#, possible-c-format +msgid "loading %ps %s" +msgstr "" + +#: exec.c:354 msgid "" "No executable has been specified and target does not support\n" "determining executable automatically. Try using the \"file\" command." msgstr "" -#: exec.c:261 +#: exec.c:407 msgid "No executable file now.\n" msgstr "" -#: exec.c:286 +#: exec.c:432 #, possible-c-format msgid "writing into executable files is not supported for %s sysroots" msgstr "" -#: exec.c:334 +#: exec.c:483 #, possible-c-format -msgid "\"%s\": could not open as an executable file: %s." +msgid "\"%ps\": could not open as an executable file: %s." msgstr "" -#: exec.c:351 +#: exec.c:501 #, possible-c-format -msgid "\"%s\": not in executable format: %s" +msgid "\"%ps\": not in executable format: %s" msgstr "" -#: exec.c:361 +#: exec.c:511 #, possible-c-format -msgid "\"%s\": can't find the file sections: %s" +msgid "\"%ps\": can't find the file sections: %s" msgstr "" -#: exec.c:398 +#: exec.c:549 msgid "" "A program is being debugged already.\n" "Are you sure you want to change the file? " msgstr "" -#: exec.c:400 +#: exec.c:551 msgid "File not changed." msgstr "" -#: exec.c:414 +#: exec.c:565 msgid "No executable file name was specified" msgstr "" -#: exec.c:884 maint.c:449 maint.c:484 +#: exec.c:1065 maint.c:390 maint.c:423 #, possible-c-format msgid "file type %s.\n" msgstr "" -#: exec.c:909 +#: exec.c:1090 #, possible-c-format -msgid "Cannot find section for the entry point of %s." +msgid "Cannot find section for the entry point of %ps." msgstr "" -#: exec.c:915 +#: exec.c:1097 #, possible-c-format msgid "\tEntry point: %s\n" msgstr "" -#: exec.c:948 +#: exec.c:1132 msgid "\t<no file loaded>\n" msgstr "" -#: exec.c:963 +#: exec.c:1147 msgid "Must specify section name and its virtual address" msgstr "" -#: exec.c:990 +#: exec.c:1174 #, possible-c-format msgid "Section %s not found" msgstr "" -#: exec.c:1026 +#: exec.c:1211 msgid "Can't create a corefile" msgstr "" -#: exec.c:1042 +#: exec.c:1228 msgid "" "Use FILE as program to be debugged.\n" "It is read for its symbols, for getting the contents of pure memory,\n" @@ -12177,7 +12319,7 @@ "No arg means to have no executable file and no symbols." msgstr "" -#: exec.c:1052 +#: exec.c:1238 msgid "" "Use FILE as program for getting contents of pure memory.\n" "If FILE cannot be found as specified, your execution directory path\n" @@ -12185,7 +12327,7 @@ "No arg means have no executable file." msgstr "" -#: exec.c:1059 +#: exec.c:1245 msgid "" "Change the base address of section SECTION of the exec file to ADDR.\n" "This can be used if the exec file does not contain section addresses,\n" @@ -12194,15 +12336,38 @@ "``info files'' command lists all the sections and their addresses." msgstr "" -#: exec.c:1066 +#: exec.c:1252 msgid "Set writing into executable and core files." msgstr "" -#: exec.c:1067 +#: exec.c:1253 msgid "Show writing into executable and core files." msgstr "" -#: expprint.c:253 +#: exec.c:1262 +msgid "Set exec-file-mismatch handling (ask|warn|off)." +msgstr "" + +#: exec.c:1264 +msgid "Show exec-file-mismatch handling (ask|warn|off)." +msgstr "" + +#: exec.c:1266 +msgid "" +"Specifies how to handle a mismatch between the current exec-file\n" +"loaded by GDB and the exec-file automatically determined when attaching\n" +"to a process:\n" +"\n" +" ask - warn the user and ask whether to load the determined exec-file.\n" +" warn - warn the user, but do not change the exec-file.\n" +" off - do not check for mismatch.\n" +"\n" +"GDB detects a mismatch by comparing the build IDs of the files.\n" +"If the user confirms loading the determined exec-file, then its symbols\n" +"will be loaded as well." +msgstr "" + +#: expprint.c:251 msgid "bad selector" msgstr "" @@ -12211,36 +12376,36 @@ #. Not found; don't try to keep going because we don't know how #. to interpret further elements. For example, this happens #. if opcode is OP_TYPE. -#: expprint.c:504 expprint.c:615 +#: expprint.c:500 expprint.c:611 msgid "Invalid expression" msgstr "" -#: expprint.c:515 +#: expprint.c:511 #, possible-c-format msgid "<language %s has no 'this'>" msgstr "" -#: extension.c:199 +#: extension.c:175 #, possible-c-format msgid "Scripting in the \"%s\" language is not supported in this copy of GDB." msgstr "" -#: extension.c:869 +#: extension.c:814 #, possible-c-format msgid "Error while looking for matching xmethod workers defined in %s." msgstr "" -#: extension.c:883 +#: extension.c:828 #, possible-c-format msgid "Error while looking for arg types of a xmethod worker defined in %s." msgstr "" -#: extension.c:899 +#: extension.c:844 #, possible-c-format msgid "Error while fetching result type of an xmethod worker defined in %s." msgstr "" -#: f-exp.y:772 m2-exp.y:686 +#: f-exp.y:772 m2-exp.y:685 msgid "Overflow on numeric constant." msgstr "" @@ -12253,50 +12418,50 @@ msgid "unsupported kind %d for type %s" msgstr "" -#: f-lang.c:69 +#: f-lang.c:65 msgid "unrecognized character type" msgstr "" -#: f-lang.c:287 +#: f-lang.c:159 #, possible-c-format msgid "ABS of type %s not supported" msgstr "" -#: f-lang.c:296 +#: f-lang.c:168 msgid "non-matching types for parameters to MOD ()" msgstr "" -#: f-lang.c:315 +#: f-lang.c:187 msgid "calling MOD (N, 0) is undefined" msgstr "" -#: f-lang.c:320 +#: f-lang.c:192 #, possible-c-format msgid "MOD of type %s not supported" msgstr "" -#: f-lang.c:329 +#: f-lang.c:201 msgid "argument to CEILING must be of type float" msgstr "" -#: f-lang.c:344 +#: f-lang.c:216 msgid "argument to FLOOR must be of type float" msgstr "" -#: f-lang.c:360 +#: f-lang.c:232 msgid "non-matching types for parameters to MODULO ()" msgstr "" -#: f-lang.c:387 +#: f-lang.c:259 #, possible-c-format msgid "MODULO of type %s not supported" msgstr "" -#: f-lang.c:408 +#: f-lang.c:280 msgid "argument to kind must be an intrinsic type" msgstr "" -#: f-typeprint.c:461 +#: f-typeprint.c:466 #, possible-c-format msgid "Invalid type code (%d) in symbol table." msgstr "" @@ -12305,38 +12470,38 @@ msgid "Lower bound may not be '*' in F77" msgstr "" -#: f-valprint.c:191 +#: f-valprint.c:188 #, possible-c-format msgid "Type node corrupt! F77 arrays cannot have %d subscripts (%d Max)" msgstr "" -#: f-valprint.c:405 +#: f-valprint.c:411 #, possible-c-format msgid "Contents of F77 COMMON block '%s':\n" msgstr "" -#: f-valprint.c:408 +#: f-valprint.c:414 msgid "Contents of blank COMMON block:\n" msgstr "" -#: f-valprint.c:459 stack.c:2598 +#: f-valprint.c:465 stack.c:2570 msgid "No symbol table info available.\n" msgstr "" -#: f-valprint.c:476 +#: f-valprint.c:482 #, possible-c-format msgid "No common block '%s'.\n" msgstr "" -#: f-valprint.c:478 +#: f-valprint.c:484 msgid "No common blocks.\n" msgstr "" -#: f-valprint.c:486 +#: f-valprint.c:493 msgid "Print out the values contained in a Fortran COMMON block." msgstr "" -#: fbsd-nat.c:104 +#: fbsd-nat.c:104 nbsd-nat.c:224 msgid "Couldn't fetch VM map entries." msgstr "" @@ -12345,32 +12510,32 @@ msgid "Couldn't open %s." msgstr "" -#: fbsd-nat.c:327 infcmd.c:3019 procfs.c:3552 +#: fbsd-nat.c:327 infcmd.c:2909 nbsd-nat.c:311 procfs.c:3330 msgid "Not supported on this target." msgstr "" -#: fbsd-nat.c:335 linux-tdep.c:763 procfs.c:3574 +#: fbsd-nat.c:335 linux-tdep.c:776 nbsd-nat.c:319 procfs.c:3352 msgid "No current process: you must name one." msgstr "" -#: fbsd-nat.c:340 +#: fbsd-nat.c:340 nbsd-nat.c:324 msgid "Invalid arguments." msgstr "" -#: fbsd-nat.c:342 fbsd-tdep.c:1516 +#: fbsd-nat.c:342 fbsd-tdep.c:1518 nbsd-nat.c:326 #, possible-c-format msgid "process %d\n" msgstr "" -#: fbsd-nat.c:354 +#: fbsd-nat.c:354 nbsd-nat.c:334 msgid "unable to fetch command line" msgstr "" -#: fbsd-nat.c:373 +#: fbsd-nat.c:373 nbsd-nat.c:342 msgid "unable to fetch current working directory" msgstr "" -#: fbsd-nat.c:394 +#: fbsd-nat.c:394 nbsd-nat.c:350 msgid "unable to fetch executable path name" msgstr "" @@ -12378,11 +12543,11 @@ msgid "unable to fetch list of open files" msgstr "" -#: fbsd-nat.c:435 +#: fbsd-nat.c:435 nbsd-nat.c:371 msgid "unable to fetch virtual memory map" msgstr "" -#: fbsd-nat.c:441 fbsd-nat.c:936 fbsd-nat.c:1441 +#: fbsd-nat.c:441 fbsd-nat.c:936 fbsd-nat.c:1442 nbsd-nat.c:377 msgid "Failed to fetch process information" msgstr "" @@ -12396,165 +12561,182 @@ msgid "Debugging of FreeBSD native target is %s.\n" msgstr "" -#: fbsd-nat.c:1351 linux-nat.c:1010 procfs.c:2287 procfs.c:2408 +#: fbsd-nat.c:1352 linux-nat.c:1026 nbsd-nat.c:630 procfs.c:2149 procfs.c:2256 #, possible-c-format msgid "[%s exited]\n" msgstr "" -#: fbsd-nat.c:1676 +#: fbsd-nat.c:1684 msgid "Set debugging of FreeBSD lwp module." msgstr "" -#: fbsd-nat.c:1677 +#: fbsd-nat.c:1685 msgid "Show debugging of FreeBSD lwp module." msgstr "" -#: fbsd-nat.c:1678 fbsd-nat.c:1686 linux-nat.c:4544 linux-nat.c:4553 +#: fbsd-nat.c:1686 fbsd-nat.c:1694 linux-nat.c:4384 linux-nat.c:4393 msgid "Enables printf debugging output." msgstr "" -#: fbsd-nat.c:1684 +#: fbsd-nat.c:1692 msgid "Set debugging of FreeBSD native target." msgstr "" -#: fbsd-nat.c:1685 +#: fbsd-nat.c:1693 msgid "Show debugging of FreeBSD native target." msgstr "" -#: fbsd-tdep.c:953 +#: fbsd-tdep.c:955 msgid "Failed to format IPv4 address" msgstr "" -#: fbsd-tdep.c:968 +#: fbsd-tdep.c:970 msgid "Failed to format IPv6 address" msgstr "" -#: fbsd-tdep.c:978 +#: fbsd-tdep.c:980 msgid "" "Open files:\n" "\n" msgstr "" -#: fbsd-tdep.c:1057 +#: fbsd-tdep.c:1059 msgid "unable to find open files in core file" msgstr "" -#: fbsd-tdep.c:1063 fbsd-tdep.c:1196 fbsd-tdep.c:1244 linux-tdep.c:1053 +#: fbsd-tdep.c:1065 fbsd-tdep.c:1198 fbsd-tdep.c:1246 linux-tdep.c:1095 msgid "malformed core note - too short for header" msgstr "" -#: fbsd-tdep.c:1068 fbsd-tdep.c:1201 fbsd-tdep.c:1249 fbsd-tdep.c:1355 -#: linux-tdep.c:1058 +#: fbsd-tdep.c:1070 fbsd-tdep.c:1203 fbsd-tdep.c:1251 fbsd-tdep.c:1357 +#: linux-tdep.c:1103 msgid "could not get core note contents" msgstr "" -#: fbsd-tdep.c:1082 fbsd-tdep.c:1263 +#: fbsd-tdep.c:1084 fbsd-tdep.c:1265 msgid "malformed core note - file structure too small" msgstr "" -#. No output for summary mode. -#: fbsd-tdep.c:1131 linux-tdep.c:826 linux-tdep.c:1075 procfs.c:3509 -msgid "" -"Mapped address spaces:\n" -"\n" -msgstr "" - -#: fbsd-tdep.c:1190 linux-tdep.c:1044 +#: fbsd-tdep.c:1192 msgid "unable to find mappings in core file" msgstr "" -#: fbsd-tdep.c:1214 +#: fbsd-tdep.c:1216 msgid "malformed core note - vmmap entry too small" msgstr "" -#: fbsd-tdep.c:1328 +#: fbsd-tdep.c:1330 msgid "unable to find process info in core file" msgstr "" -#: fbsd-tdep.c:1350 +#: fbsd-tdep.c:1352 msgid "malformed core note - too short" msgstr "" -#: fbsd-tdep.c:1365 +#: fbsd-tdep.c:1367 msgid "unsupported process information in core file" msgstr "" -#: fbsd-tdep.c:1526 +#: fbsd-tdep.c:1528 msgid "Command line unavailable" msgstr "" -#: fbsd-tdep.c:1535 +#: fbsd-tdep.c:1537 msgid "unable to read current working directory" msgstr "" -#: fbsd-tdep.c:1544 +#: fbsd-tdep.c:1546 msgid "unable to read executable path name" msgstr "" -#: fbsd-tdep.c:1587 +#: fbsd-tdep.c:1589 msgid "Executable path" msgstr "" -#: fbsd-tdep.c:1588 +#: fbsd-tdep.c:1590 msgid "Canary for SSP" msgstr "" -#: fbsd-tdep.c:1590 +#: fbsd-tdep.c:1592 msgid "OSRELDATE" msgstr "" -#: fbsd-tdep.c:1591 +#: fbsd-tdep.c:1593 msgid "Number of CPUs" msgstr "" -#: fbsd-tdep.c:1592 +#: fbsd-tdep.c:1594 msgid "Pagesizes" msgstr "" -#: fbsd-tdep.c:1593 +#: fbsd-tdep.c:1595 msgid "Number of pagesizes" msgstr "" -#: fbsd-tdep.c:1594 +#: fbsd-tdep.c:1596 msgid "Pointer to timehands" msgstr "" -#: fbsd-tdep.c:1595 +#: fbsd-tdep.c:1597 msgid "Initial stack protection" msgstr "" -#: fbsd-tdep.c:1596 +#: fbsd-tdep.c:1598 msgid "ELF header e_flags" msgstr "" +#: fbsd-tdep.c:1601 +msgid "ELF BSD flags" +msgstr "" + +#: fbsd-tdep.c:1602 +msgid "Argument count" +msgstr "" + +#: fbsd-tdep.c:1603 +msgid "Argument vector" +msgstr "" + +#: fbsd-tdep.c:1604 +msgid "Environment count" +msgstr "" + +#: fbsd-tdep.c:1605 +msgid "Environment vector" +msgstr "" + +#: fbsd-tdep.c:1606 +msgid "Pointer to ps_strings" +msgstr "" + #. FreeBSD doesn't use gdbarch_get_syscall_number since FreeBSD #. native targets fetch the system call number from the #. 'pl_syscall_code' member of struct ptrace_lwpinfo in fbsd_wait. #. However, system call catching requires this function to be #. set. -#: fbsd-tdep.c:1951 +#: fbsd-tdep.c:1959 msgid "fbsd_get_sycall_number called" msgstr "" -#: fbsd-tdep.c:1961 +#: fbsd-tdep.c:1969 #, possible-c-format msgid "Unable to resolve symbol '%s'" msgstr "" -#: fbsd-tdep.c:1965 +#: fbsd-tdep.c:1973 #, possible-c-format msgid "Unable to read value of '%s'" msgstr "" -#: fbsd-tdep.c:1983 +#: fbsd-tdep.c:1991 msgid "Unable to find Struct_Obj_Entry symbol" msgstr "" -#: fbsd-tdep.c:2027 +#: fbsd-tdep.c:2035 msgid "Cannot fetch runtime linker structure offsets" msgstr "" -#: fbsd-tdep.c:2036 fbsd-tdep.c:2052 fbsd-tdep.c:2061 target.c:687 target.c:772 +#: fbsd-tdep.c:2044 fbsd-tdep.c:2060 fbsd-tdep.c:2069 target.c:702 target.c:787 msgid "Cannot find thread-local variables on this target" msgstr "" @@ -12571,15 +12753,15 @@ "The assumed file system kind for target reported file names is \"%s\".\n" msgstr "" -#: filesystem.c:85 +#: filesystem.c:86 msgid "Set assumed file system kind for target reported file names." msgstr "" -#: filesystem.c:86 +#: filesystem.c:87 msgid "Show assumed file system kind for target reported file names." msgstr "" -#: filesystem.c:88 +#: filesystem.c:89 msgid "" "If `unix', target file names (e.g., loaded shared library file names)\n" "starting the forward slash (`/') character are considered absolute,\n" @@ -12603,8 +12785,8 @@ msgid "Empty search range.\n" msgstr "" -#: findcmd.c:128 python/py-lazy-string.c:177 python/py-lazy-string.c:210 -#: python/py-value.c:478 +#: findcmd.c:128 python/py-value.c:478 python/py-lazy-string.c:177 +#: python/py-lazy-string.c:210 msgid "Invalid length." msgstr "" @@ -12628,7 +12810,7 @@ msgid "Search space too small to contain pattern." msgstr "" -#: findcmd.c:286 +#: findcmd.c:287 msgid "" "Search memory for a sequence of bytes.\n" "Usage:\n" @@ -12661,174 +12843,173 @@ msgid "store_typed_address: type is not a pointer or reference" msgstr "" -#: findvar.c:570 +#: findvar.c:578 #, possible-c-format msgid "No frame is currently executing in block %s." msgstr "" -#: findvar.c:573 +#: findvar.c:581 msgid "No frame is currently executing in specified block" msgstr "" -#: findvar.c:604 +#: findvar.c:612 #, possible-c-format msgid "Cannot read `%s' without registers" msgstr "" -#: findvar.c:670 findvar.c:682 +#: findvar.c:678 findvar.c:690 #, possible-c-format msgid "Unknown argument list address for `%s'." msgstr "" -#: findvar.c:696 +#: findvar.c:704 #, possible-c-format msgid "Cannot look up value of a typedef `%s'." msgstr "" -#: findvar.c:723 findvar.c:733 +#: findvar.c:731 findvar.c:741 #, possible-c-format msgid "Value of register variable not available for `%s'." msgstr "" -#: findvar.c:769 +#: findvar.c:777 #, possible-c-format msgid "Missing %s symbol \"%s\"." msgstr "" -#: findvar.c:795 +#: findvar.c:803 #, possible-c-format msgid "Cannot look up value of a botched symbol `%s'." msgstr "" -#: findvar.c:961 +#: findvar.c:968 #, possible-c-format msgid "Invalid register #%d, expecting 0 <= # < %d" msgstr "" -#: fork-child.c:117 gdbserver/fork-child.c:83 +#: fork-child.c:112 msgid "setpgrp failed in child" msgstr "" -#: fork-child.c:153 +#: fork-child.c:151 #, possible-c-format msgid "Use of shell to start subprocesses is %s.\n" msgstr "" -#: fork-child.c:160 +#: fork-child.c:159 msgid "" "Set a wrapper for running programs.\n" "The wrapper prepares the system and environment for the new program." msgstr "" -#: fork-child.c:163 +#: fork-child.c:162 msgid "Show the wrapper for running programs." msgstr "" -#: fork-child.c:169 +#: fork-child.c:168 msgid "Disable use of an execution wrapper." msgstr "" -#: fork-child.c:173 +#: fork-child.c:172 msgid "Set use of shell to start subprocesses. The default is on." msgstr "" -#: fork-child.c:174 +#: fork-child.c:173 msgid "Show use of shell to start subprocesses." msgstr "" -#: frame-unwind.c:168 +#: frame-unwind.c:196 msgid "frame_unwind_find_by_frame failed" msgstr "" -#: frame.c:308 infrun.c:8730 stack.c:2076 stack.c:2363 +#: frame.c:328 infrun.c:9053 stack.c:2097 stack.c:2335 msgid "Unable to restore previously selected frame." msgstr "" -#: frame.c:320 +#: frame.c:340 #, possible-c-format msgid "Frame debugging is %s.\n" msgstr "" -#: frame.c:330 +#: frame.c:350 #, possible-c-format msgid "Whether backtraces should continue past \"main\" is %s.\n" msgstr "" -#: frame.c:341 +#: frame.c:361 #, possible-c-format msgid "" "Whether backtraces should continue past the entry point of a program is %s.\n" msgstr "" -#: frame.c:353 +#: frame.c:373 #, possible-c-format msgid "An upper bound on the number of backtrace levels is %s.\n" msgstr "" -#: frame.c:973 frame.c:1045 +#: frame.c:1021 frame.c:1095 msgid "PC not available" msgstr "" -#: frame.c:975 +#: frame.c:1023 msgid "PC not saved" msgstr "" -#: frame.c:1084 +#: frame.c:1134 msgid "Cannot pop the initial frame." msgstr "" -#: frame.c:1091 infcmd.c:1957 +#: frame.c:1141 infcmd.c:1849 msgid "Cannot find the caller frame." msgstr "" -#: frame.c:1193 frame.c:1293 frame.c:1327 +#: frame.c:1243 frame.c:1343 frame.c:1377 #, possible-c-format msgid "Register %d was not saved" msgstr "" -#: frame.c:1196 frame.c:1298 frame.c:1332 gdbsupport/common-regcache.c:34 -#: regcache.c:567 +#: frame.c:1246 frame.c:1348 frame.c:1382 regcache.c:679 #, possible-c-format msgid "Register %d is not available" msgstr "" -#: frame.c:1382 +#: frame.c:1432 msgid "Attempt to assign to a register that was not saved." msgstr "" -#: frame.c:1394 +#: frame.c:1444 msgid "Attempt to assign to an unmodifiable value." msgstr "" -#: frame.c:1452 +#: frame.c:1502 #, possible-c-format msgid "" "Bad debug information detected: Attempt to read %d bytes from registers." msgstr "" -#: frame.c:1605 ia64-libunwind-tdep.c:346 ia64-tdep.c:1917 ia64-tdep.c:2288 +#: frame.c:1657 ia64-libunwind-tdep.c:339 ia64-tdep.c:1917 ia64-tdep.c:2288 msgid "No registers." msgstr "" -#: frame.c:1607 stack.c:1956 stack.c:1984 stack.c:3196 stack.c:3244 -#: stack.c:3259 thread.c:1863 +#: frame.c:1659 stack.c:1977 stack.c:2005 stack.c:3168 stack.c:3216 +#: stack.c:3231 thread.c:1893 msgid "No stack." msgstr "" -#: frame.c:1609 +#: frame.c:1661 msgid "No memory." msgstr "" #. show_cmd_cb -#: frame.c:2942 +#: frame.c:2992 msgid "Set whether backtraces should continue past \"main\"." msgstr "" -#: frame.c:2943 +#: frame.c:2993 msgid "Show whether backtraces should continue past \"main\"." msgstr "" -#: frame.c:2944 +#: frame.c:2994 msgid "" "Normally the caller of \"main\" is not of interest, so GDB will terminate\n" "the backtrace at \"main\". Set this if you need to see the rest\n" @@ -12836,60 +13017,60 @@ msgstr "" #. show_cmd_cb -#: frame.c:2953 +#: frame.c:3003 msgid "" "Set whether backtraces should continue past the entry point of a program." msgstr "" -#: frame.c:2954 +#: frame.c:3004 msgid "" "Show whether backtraces should continue past the entry point of a program." msgstr "" -#: frame.c:2955 +#: frame.c:3005 msgid "" "Normally there are no callers beyond the entry point of a program, so GDB\n" "will terminate the backtrace there. Set this if you need to see\n" "the rest of the stack trace." msgstr "" -#: frame.c:2970 +#: frame.c:3021 msgid "" "Set backtrace specific variables.\n" "Configure backtrace variables such as the backtrace limit" msgstr "" #. allow-unknown -#: frame.c:2975 +#: frame.c:3026 msgid "" "Show backtrace specific variables.\n" "Show backtrace variables such as the backtrace limit." msgstr "" -#: frame.c:2982 +#: frame.c:3033 msgid "Set an upper bound on the number of backtrace levels." msgstr "" -#: frame.c:2983 +#: frame.c:3034 msgid "Show the upper bound on the number of backtrace levels." msgstr "" -#: frame.c:2984 +#: frame.c:3035 msgid "" "No more than the specified number of frames can be displayed or examined.\n" "Literal \"unlimited\" or zero means no limit." msgstr "" #. Debug this files internals. -#: frame.c:2997 +#: frame.c:3048 msgid "Set frame debugging." msgstr "" -#: frame.c:2998 +#: frame.c:3049 msgid "Show frame debugging." msgstr "" -#: frame.c:2999 +#: frame.c:3050 msgid "When non-zero, frame specific internal debugging is enabled." msgstr "" @@ -12939,30 +13120,30 @@ msgid "writing note section (%s)" msgstr "" -#: gcore.c:175 +#: gcore.c:180 msgid "Can't find default bfd machine type (need execfile)." msgstr "" -#: gcore.c:189 +#: gcore.c:194 msgid "Can't find bfd architecture for corefile (need execfile)." msgstr "" -#: gcore.c:455 +#: gcore.c:460 #, possible-c-format msgid "Couldn't make gcore segment: %s" msgstr "" -#: gcore.c:553 +#: gcore.c:558 #, possible-c-format msgid "Memory read failed for corefile section, %s bytes at %s." msgstr "" -#: gcore.c:562 +#: gcore.c:567 #, possible-c-format msgid "Failed to write corefile contents (%s)." msgstr "" -#: gcore.c:596 +#: gcore.c:602 msgid "" "Save a core file with the current state of the debugged process.\n" "Usage: generate-core-file [FILENAME]\n" @@ -12998,103 +13179,99 @@ msgid "Can't demangle \"%s\"" msgstr "" -#: gdb-demangle.c:239 +#: gdb-demangle.c:240 msgid "Set demangling of encoded C++/ObjC names when displaying symbols." msgstr "" -#: gdb-demangle.c:240 +#: gdb-demangle.c:241 msgid "Show demangling of encoded C++/ObjC names when displaying symbols." msgstr "" -#: gdb-demangle.c:246 +#: gdb-demangle.c:247 msgid "Set demangling of C++/ObjC names in disassembly listings." msgstr "" -#: gdb-demangle.c:247 +#: gdb-demangle.c:248 msgid "Show demangling of C++/ObjC names in disassembly listings." msgstr "" -#: gdb-demangle.c:255 +#: gdb-demangle.c:256 msgid "Set the current C++ demangling style." msgstr "" -#: gdb-demangle.c:256 +#: gdb-demangle.c:257 msgid "Show the current C++ demangling style." msgstr "" -#: gdb-demangle.c:257 +#: gdb-demangle.c:258 msgid "" "Use `set demangle-style' without arguments for a list of demangling styles." msgstr "" -#: gdb-demangle.c:263 +#: gdb-demangle.c:264 msgid "" "Demangle a mangled name.\n" "Usage: demangle [-l LANGUAGE] [--] NAME\n" "If LANGUAGE is not specified, NAME is demangled in the current language." msgstr "" -#: gdb_bfd.c:144 +#: gdb_bfd.c:134 #, possible-c-format msgid "BFD sharing is %s.\n" msgstr "" -#: gdb_bfd.c:154 +#: gdb_bfd.c:144 #, possible-c-format msgid "BFD cache debugging is %s.\n" msgstr "" -#: gdb_bfd.c:513 +#: gdb_bfd.c:544 #, possible-c-format msgid "cannot close \"%s\": %s" msgstr "" -#: gdb_bfd.c:704 +#: gdb_bfd.c:726 #, possible-c-format msgid "Can't read data for section '%s' in file '%s'" msgstr "" -#: gdb_bfd.c:731 gdb_bfd.c:744 +#: gdb_bfd.c:753 gdb_bfd.c:766 #, possible-c-format msgid "Problem reading \"%s\" for CRC: %s" msgstr "" -#: gdb_bfd.c:971 +#: gdb_bfd.c:1006 msgid "List the BFDs that are currently open." msgstr "" -#: gdb_bfd.c:976 +#: gdb_bfd.c:1011 msgid "Set whether gdb will share bfds that appear to be the same file." msgstr "" -#: gdb_bfd.c:977 +#: gdb_bfd.c:1012 msgid "Show whether gdb will share bfds that appear to be the same file." msgstr "" -#: gdb_bfd.c:978 +#: gdb_bfd.c:1013 msgid "" "When enabled gdb will reuse existing bfds rather than reopening the\n" "same file. To decide if two files are the same then gdb compares the\n" "filename, file size, file modification time, and file inode." msgstr "" -#: gdb_bfd.c:988 +#: gdb_bfd.c:1023 msgid "Set bfd cache debugging." msgstr "" -#: gdb_bfd.c:989 +#: gdb_bfd.c:1024 msgid "Show bfd cache debugging." msgstr "" -#: gdb_bfd.c:990 +#: gdb_bfd.c:1025 msgid "When non-zero, bfd cache specific debugging is enabled." msgstr "" -#: gdbarch-selftests.c:77 regcache.c:1526 regcache.c:1694 -msgid "target already pushed" -msgstr "" - -#: gdbarch.c:68 +#: gdbarch.c:58 #, possible-c-format msgid "Architecture debugging is %s.\n" msgstr "" @@ -13104,812 +13281,418 @@ msgid "verify_gdbarch: the following are invalid ...%s" msgstr "" -#: gdbarch.c:5322 +#: gdbarch.c:5309 +msgid "" +"gdbarch post-init data field can only be used after gdbarch is fully " +"initialised" +msgstr "" + +#: gdbarch.c:5355 msgid "gdbarch_architecture_names: multi-arch unknown" msgstr "" -#: gdbarch.c:5348 +#: gdbarch.c:5381 #, possible-c-format msgid "gdbarch: Attempt to register unknown architecture (%d)" msgstr "" -#: gdbarch.c:5359 +#: gdbarch.c:5392 #, possible-c-format msgid "gdbarch: Duplicate registration of architecture (%s)" msgstr "" -#: gdbarch.c:5554 +#: gdbarch.c:5588 msgid "Set architecture debugging." msgstr "" -#: gdbarch.c:5555 +#: gdbarch.c:5589 msgid "Show architecture debugging." msgstr "" -#: gdbarch.c:5556 +#: gdbarch.c:5590 msgid "When non-zero, architecture debugging is enabled." msgstr "" -#: gdbserver/linux-x86-low.c:766 gdbserver/linux-tile-low.c:159 -msgid "Can't debug 64-bit process with 32-bit GDBserver" -msgstr "" - -#: gdbserver/linux-x86-low.c:769 -msgid "Can't debug x86-64 process with 32-bit GDBserver" -msgstr "" - -#: gdbserver/remote-utils.c:198 -#, c-format -msgid "Could not obtain remote address: %s\n" -msgstr "" - -#: gdbserver/remote-utils.c:201 -#, c-format -msgid "Remote debugging from host %s, port %s\n" -msgstr "" - -#: gdbserver/remote-utils.c:276 +#: gdbtypes.c:142 #, possible-c-format -msgid "%s: cannot resolve name: %s" +msgid "" +"Resolution of opaque struct/class/union types (if set before loading " +"symbols) is %s.\n" msgstr "" -#: gdbserver/remote-utils.c:309 +#: gdbtypes.c:153 #, possible-c-format -msgid "Invalid 'ai_family' %d\n" -msgstr "" - -#: gdbserver/remote-utils.c:405 -#, c-format -msgid "Can't obtain port where we are listening: %s" -msgstr "" - -#: gdbserver/remote-utils.c:408 -#, c-format -msgid "Listening on port %s\n" +msgid "Debugging of C++ overloading is %s.\n" msgstr "" -#: gdbserver/gdbreplay.c:175 ser-tcp.c:291 +#: gdbtypes.c:163 #, possible-c-format -msgid "Missing port on hostname '%s'" -msgstr "" - -#: gdbserver/linux-s390-low.c:482 -msgid "Couldn't determine word size, assuming 64-bit." -msgstr "" - -#: gdbserver/ax.c:837 printcmd.c:2587 -msgid "Wrong number of arguments for specified format-string" +msgid "Strict type checking is %s.\n" msgstr "" -#: gdbserver/ax.c:889 -msgid "long long not supported in agent printf" +#: gdbtypes.c:598 +#, possible-c-format +msgid "Unknown address space specifier: \"%s\"" msgstr "" -#: gdbserver/ax.c:928 +#: gdbtypes.c:1661 #, possible-c-format -msgid "Format directive in '%s' not supported in agent printf" +msgid "Invalid anonymous type %s [in module %s], GCC PR debug/47510 bug?" msgstr "" -#: gdbserver/ax.c:1334 -msgid "Unterminated format string in printf bytecode" +#: gdbtypes.c:1684 +#, possible-c-format +msgid "No type named %s." msgstr "" -#: gdbserver/linux-low.c:745 linux-nat.c:2115 +#: gdbtypes.c:1725 objc-lang.c:96 #, possible-c-format -msgid "unknown ptrace event %d" +msgid "No struct type named %s." msgstr "" -#: gdbserver/linux-low.c:1171 linux-nat.c:1138 +#: gdbtypes.c:1729 gdbtypes.c:1804 objc-lang.c:103 #, possible-c-format -msgid "Cannot attach to lwp %d: %s" +msgid "This context has class, union or enum %s, not a struct." msgstr "" -#: gdbserver/linux-low.c:1563 linux-nat.c:1423 +#: gdbtypes.c:1747 #, possible-c-format -msgid "Couldn't reap LWP %d while detaching: %s" +msgid "No union type named %s." msgstr "" -#: gdbserver/linux-low.c:1568 linux-nat.c:1428 +#. If we get here, it's not a union. +#: gdbtypes.c:1755 #, possible-c-format -msgid "Reaping LWP %d while detaching returned unexpected status 0x%x" +msgid "This context has class, struct or enum %s, not a union." msgstr "" -#: gdbserver/linux-low.c:1575 linux-nat.c:1435 +#: gdbtypes.c:1770 #, possible-c-format -msgid "Can't detach %s: %s" +msgid "No enum type named %s." msgstr "" -#: gdbserver/regcache.c:439 +#: gdbtypes.c:1774 #, possible-c-format -msgid "That operation is not available on integers of more than%d bytes." +msgid "This context has class, struct or union %s, not an enum." msgstr "" -#: gdbserver/thread-db.c:666 +#: gdbtypes.c:1800 #, possible-c-format -msgid "libthread-db-search-path component too long, ignored: %s." +msgid "No template type named %s." msgstr "" -#: gdbserver/target.h:624 gdbserver/target.h:633 gdbserver/target.h:644 -#: gdbserver/target.h:654 remote.c:13763 remote.c:13812 remote.c:13853 -msgid "Target does not support branch tracing." +#: gdbtypes.c:1830 +#, possible-c-format +msgid "Type %s is not a structure or union type." msgstr "" -#: gdbserver/server.c:272 remote-sim.c:625 -msgid "No executable file specified." +#: gdbtypes.c:1866 +#, possible-c-format +msgid "Type %s has no component named %s." msgstr "" -#: gdbserver/server.c:392 gdbserver/server.c:404 -msgid "Btrace already enabled." +#: gdbtypes.c:2031 +msgid "stub type has NULL name" msgstr "" -#: gdbserver/server.c:417 -msgid "Branch tracing not enabled." +#: gdbtypes.c:2201 +msgid "" +"bit strides that are not a multiple of the byte size are currently not " +"supported" msgstr "" -#: gdbserver/server.c:420 x86-linux-nat.c:241 -msgid "Could not disable branch tracing." +#. Could be a bug in our code, but it could also happen +#. if the DWARF info is not correct. Issue a warning, +#. and assume no byte/bit stride (leave bit_stride = 0). +#: gdbtypes.c:2277 +#, possible-c-format +msgid "cannot determine array stride for type %s" msgstr "" -#: gdbserver/server.c:462 -msgid "Bad Qbtrace operation. Use bts, pt, or off." +#: gdbtypes.c:2401 gdbtypes.c:2557 +msgid "Cannot determine struct field location (invalid location kind)" msgstr "" -#: gdbserver/server.c:666 +#: gdbtypes.c:3028 #, possible-c-format -msgid "[QEnvironmentHexEncoded received '%s']\n" +msgid "Internal: Cannot demangle mangled name `%s'." msgstr "" -#: gdbserver/server.c:667 +#: gdbtypes.c:4137 #, possible-c-format -msgid "[Environment variable to be set: '%s']\n" +msgid "Unsupported field kind %d by check_types_equal" msgstr "" -#: gdbserver/server.c:675 +#: gdbtypes.c:4804 #, possible-c-format -msgid "Unexpected format for environment variable: '%s'" +msgid ") length %d\n" msgstr "" -#: gdbserver/server.c:697 -#, possible-c-format -msgid "[QEnvironmentUnset received '%s']\n" +#: gdbtypes.c:4983 +msgid " <same as already seen type>\n" msgstr "" -#: gdbserver/server.c:698 +#: gdbtypes.c:5427 #, possible-c-format -msgid "[Environment variable to be unset: '%s']\n" +msgid "Unexpected type field location kind: %d" msgstr "" -#: gdbserver/server.c:860 -#, possible-c-format -msgid "[Inferior will %s started with shell]" +#: gdbtypes.c:6062 +msgid "Set debugging of C++ overloading." msgstr "" -#: gdbserver/server.c:878 -#, possible-c-format -msgid "[Set the inferior's current directory to %s]\n" +#: gdbtypes.c:6063 +msgid "Show debugging of C++ overloading." msgstr "" -#: gdbserver/server.c:888 -msgid "[Unset the inferior's current directory; will use gdbserver's cwd]\n" +#: gdbtypes.c:6064 +msgid "When enabled, ranking of the functions is displayed." msgstr "" -#: gdbserver/server.c:3563 -#, possible-c-format -msgid "Could not find current working directory: %s" +#: gdbtypes.c:6073 +msgid "" +"Set resolution of opaque struct/class/union types (if set before loading " +"symbols)." msgstr "" -#: gdbserver/server.c:3771 maint.c:1123 maint.c:1137 -#, c-format -msgid "Selftests have been disabled for this build.\n" +#: gdbtypes.c:6075 +msgid "" +"Show resolution of opaque struct/class/union types (if set before loading " +"symbols)." msgstr "" -#: gdbserver/win32-low.c:585 -msgid "Could not convert the expanded inferior cwd to wide-char." -msgstr "" - -#. ??? TODO: handle other escape sequences. -#: gdbsupport/format.c:90 -#, possible-c-format -msgid "Unrecognized escape character \\%c in format string." -msgstr "" - -#: gdbsupport/format.c:344 -msgid "`*' not supported for precision or width in printf" -msgstr "" - -#: gdbsupport/format.c:347 -msgid "Format specifier `n' not supported in printf" -msgstr "" - -#: gdbsupport/format.c:350 -msgid "Incomplete format specifier at end of format string" -msgstr "" - -#: gdbsupport/format.c:353 -#, possible-c-format -msgid "Unrecognized format specifier '%c' in printf" -msgstr "" - -#: gdbsupport/format.c:357 -#, possible-c-format -msgid "Inappropriate modifiers to format specifier '%c' in printf" -msgstr "" - -#: gdbsupport/pathstuff.c:258 -msgid "Couldn't find temp dir path, both TMP and TEMP are unset." -msgstr "" - -#: gdbsupport/scoped_mmap.c:40 -msgid "file to mmap is empty" -msgstr "" - -#: gdbsupport/btrace-common.c:32 -msgid "No or unknown format" -msgstr "" - -#: gdbsupport/btrace-common.c:35 -msgid "Branch Trace Store" -msgstr "" - -#: gdbsupport/btrace-common.c:38 -msgid "Intel Processor Trace" -msgstr "" - -#: gdbsupport/btrace-common.c:41 gdbsupport/btrace-common.c:61 -msgid "Unknown branch trace format" -msgstr "" - -#: gdbsupport/common-utils.c:57 -msgid "vasprintf call failed" -msgstr "" - -#: gdbsupport/agent.c:117 -msgid "Error reading helper thread's id in lib" -msgstr "" - -#: gdbsupport/agent.c:152 -#, possible-c-format -msgid "error opening sync socket: %s" -msgstr "" - -#: gdbsupport/agent.c:161 -msgid "string overflow allocating socket name" -msgstr "" - -#: gdbsupport/agent.c:169 -#, possible-c-format -msgid "" -"error connecting sync socket (%s): %s. Make sure the directory exists and " -"that it is writable." -msgstr "" - -#: gdbsupport/agent.c:200 -msgid "unable to write" -msgstr "" - -#: gdbsupport/agent.c:248 -msgid "Error reading command response" -msgstr "" - -#: gdbsupport/agent.c:268 -msgid "Error reading capability of agent" -msgstr "" - -#: gdbsupport/gdb_assert.h:42 -#, possible-c-format -msgid "%s: Assertion `%s' failed." -msgstr "" - -#: gdbsupport/gdb_assert.h:46 -#, possible-c-format -msgid "Assertion `%s' failed." -msgstr "" - -#: gdbsupport/print-utils.c:241 -msgid "hex_string_custom: insufficient space to store result" -msgstr "" - -#: gdbsupport/signals.c:352 -msgid "GDB bug: target.c (gdb_signal_from_host): unrecognized real-time signal" -msgstr "" - -#. The user might be trying to do "signal SIGSAK" where this system -#. doesn't have SIGSAK. -#: gdbsupport/signals.c:647 -#, possible-c-format -msgid "Signal %s does not exist on this system." -msgstr "" - -#: gdbsupport/gdb-dlfcn.c:73 gdbsupport/gdb-dlfcn.c:87 -#, possible-c-format -msgid "Could not load %s: %s" -msgstr "" - -#: gdbsupport/filestuff.c:218 -msgid "fd not found in open_fds" -msgstr "" - -#: gdbsupport/filestuff.c:381 -msgid "socketpair not available on this host" -msgstr "" - -#: gdbsupport/filestuff.c:422 -msgid "pipe not available on this host" -msgstr "" - -#: gdbsupport/gdb_tilde_expand.c:39 -#, possible-c-format -msgid "Could not find a match for '%s'." -msgstr "" - -#: gdbsupport/gdb_tilde_expand.c:41 -#, possible-c-format -msgid "glob could not process pattern '%s'." -msgstr "" - -#: gdbsupport/signals-state-save-restore.c:74 -#, c-format -msgid "warning: Found custom handler for signal %d (%s) preinstalled.\n" -msgstr "" - -#: gdbsupport/signals-state-save-restore.c:82 -#, c-format -msgid "" -"Some signal dispositions inherited from the environment (SIG_DFL/SIG_IGN)\n" -"won't be propagated to spawned programs.\n" -msgstr "" - -#: gdbsupport/gdb_string_view.h:190 -#, possible-c-format -msgid "" -"basic_string_view::at: __pos (which is %zu) >= this->size() (which is %zu)" -msgstr "" - -#: gdbsupport/gdb_string_view.h:260 -#, possible-c-format -msgid "" -"basic_string_view::copy: __pos (which is %zu) > this->size() (which is %zu)" -msgstr "" - -#: gdbsupport/gdb_string_view.h:280 -#, possible-c-format -msgid "" -"basic_string_view::substr: __pos (which is %zu) > this->size() (which is %zu)" -msgstr "" - -#: gdbsupport/rsp-low.c:35 -#, possible-c-format -msgid "Reply contains invalid hex digit %d" -msgstr "" - -#: gdbsupport/rsp-low.c:289 -msgid "Received too much data from the target." -msgstr "" - -#: gdbsupport/rsp-low.c:303 -msgid "Unmatched escape character in target response." -msgstr "" - -#: gdbsupport/common-exceptions.c:77 gdbsupport/common-exceptions.c:122 -msgid "bad state" -msgstr "" - -#: gdbsupport/netstuff.c:68 -#, possible-c-format -msgid "Missing close bracket in hostname '%s'" -msgstr "" - -#: gdbsupport/netstuff.c:78 -#, possible-c-format -msgid "Invalid cruft after close bracket in '%s'" -msgstr "" - -#: gdbsupport/netstuff.c:86 -#, possible-c-format -msgid "Missing open bracket in hostname '%s'" -msgstr "" - -#: gdbsupport/selftest.c:86 -#, possible-c-format -msgid "Running selftest %s.\n" -msgstr "" - -#: gdbsupport/selftest.c:99 -#, possible-c-format -msgid "Ran %d unit tests, %d failed\n" -msgstr "" - -#: gdbsupport/tdesc.c:307 gdbsupport/tdesc.c:361 -#, possible-c-format -msgid "xml output is not supported for type \"%s\"." -msgstr "" - -#. Check that VALUE is true, and, if not, throw an exception. -#: gdbsupport/selftest.h:70 -#, possible-c-format -msgid "self-test failed at %s:%d" -msgstr "" - -#: gdbtypes.c:137 -#, possible-c-format -msgid "" -"Resolution of opaque struct/class/union types (if set before loading " -"symbols) is %s.\n" -msgstr "" - -#: gdbtypes.c:148 -#, possible-c-format -msgid "Debugging of C++ overloading is %s.\n" -msgstr "" - -#: gdbtypes.c:158 -#, possible-c-format -msgid "Strict type checking is %s.\n" -msgstr "" - -#: gdbtypes.c:593 -#, possible-c-format -msgid "Unknown address space specifier: \"%s\"" -msgstr "" - -#: gdbtypes.c:1548 -#, possible-c-format -msgid "Invalid anonymous type %s [in module %s], GCC PR debug/47510 bug?" -msgstr "" - -#: gdbtypes.c:1571 -#, possible-c-format -msgid "No type named %s." -msgstr "" - -#: gdbtypes.c:1612 objc-lang.c:96 -#, possible-c-format -msgid "No struct type named %s." -msgstr "" - -#: gdbtypes.c:1616 gdbtypes.c:1691 objc-lang.c:103 -#, possible-c-format -msgid "This context has class, union or enum %s, not a struct." -msgstr "" - -#: gdbtypes.c:1634 -#, possible-c-format -msgid "No union type named %s." -msgstr "" - -#. If we get here, it's not a union. -#: gdbtypes.c:1642 -#, possible-c-format -msgid "This context has class, struct or enum %s, not a union." -msgstr "" - -#: gdbtypes.c:1657 -#, possible-c-format -msgid "No enum type named %s." -msgstr "" - -#: gdbtypes.c:1661 -#, possible-c-format -msgid "This context has class, struct or union %s, not an enum." -msgstr "" - -#: gdbtypes.c:1687 -#, possible-c-format -msgid "No template type named %s." -msgstr "" - -#: gdbtypes.c:1717 -#, possible-c-format -msgid "Type %s is not a structure or union type." -msgstr "" - -#: gdbtypes.c:1753 -#, possible-c-format -msgid "Type %s has no component named %s." -msgstr "" - -#: gdbtypes.c:1918 -msgid "stub type has NULL name" -msgstr "" - -#: gdbtypes.c:2076 -msgid "" -"bit strides that are not a multiple of the byte size are currently not " -"supported" -msgstr "" - -#. Could be a bug in our code, but it could also happen -#. if the DWARF info is not correct. Issue a warning, -#. and assume no byte/bit stride (leave bit_stride = 0). -#: gdbtypes.c:2158 -#, possible-c-format -msgid "cannot determine array stride for type %s" -msgstr "" - -#: gdbtypes.c:2248 -msgid "Cannot determine struct field location (invalid location kind)" -msgstr "" - -#: gdbtypes.c:2700 -#, possible-c-format -msgid "Internal: Cannot demangle mangled name `%s'." -msgstr "" - -#: gdbtypes.c:3788 -#, possible-c-format -msgid "Unsupported field kind %d by check_types_equal" -msgstr "" - -#: gdbtypes.c:4455 -#, possible-c-format -msgid ") length %d\n" -msgstr "" - -#: gdbtypes.c:4604 -msgid " <same as already seen type>\n" -msgstr "" - -#: gdbtypes.c:5051 -#, possible-c-format -msgid "Unexpected type field location kind: %d" -msgstr "" - -#: gdbtypes.c:5696 -msgid "Set debugging of C++ overloading." -msgstr "" - -#: gdbtypes.c:5697 -msgid "Show debugging of C++ overloading." -msgstr "" - -#: gdbtypes.c:5698 -msgid "When enabled, ranking of the functions is displayed." -msgstr "" - -#: gdbtypes.c:5707 -msgid "" -"Set resolution of opaque struct/class/union types (if set before loading " -"symbols)." -msgstr "" - -#: gdbtypes.c:5709 -msgid "" -"Show resolution of opaque struct/class/union types (if set before loading " -"symbols)." -msgstr "" - -#: gdbtypes.c:5718 +#: gdbtypes.c:6084 msgid "Set strict type checking." msgstr "" -#: gdbtypes.c:5719 +#: gdbtypes.c:6085 msgid "Show strict type checking." msgstr "" #. * A helper macro that returns the name of a type or "unnamed type" #. if the type has no name. -#: gdbtypes.h:1600 +#: gdbtypes.h:1825 msgid "<unnamed type>" msgstr "" #. * A helper macro that returns the name of an error type. If the #. type has a name, it is used; otherwise, a default is used. -#: gdbtypes.h:1606 +#: gdbtypes.h:1831 msgid "<error type>" msgstr "" -#: gnu-nat.c:345 +#: gnu-nat.c:320 #, possible-c-format msgid "Stopped %s." msgstr "" -#: gnu-nat.c:483 gnu-nat.c:513 +#: gnu-nat.c:458 gnu-nat.c:488 #, possible-c-format msgid "Error setting exception port for %s: %s" msgstr "" -#: gnu-nat.c:590 +#: gnu-nat.c:565 #, possible-c-format msgid "Couldn't request notification for port %lu: %s" msgstr "" -#: gnu-nat.c:740 +#: gnu-nat.c:715 #, possible-c-format msgid "Error allocating event port: %s" msgstr "" -#: gnu-nat.c:765 +#: gnu-nat.c:740 #, possible-c-format msgid "Error getting task for pid %d: %s" msgstr "" -#: gnu-nat.c:869 +#: gnu-nat.c:844 #, possible-c-format msgid "Pid %d has an additional task suspend count of %d; clear it? " msgstr "" -#: gnu-nat.c:872 +#: gnu-nat.c:847 msgid "Additional task suspend count left untouched." msgstr "" -#: gnu-nat.c:899 gnu-nat.c:904 +#: gnu-nat.c:874 gnu-nat.c:879 #, possible-c-format msgid "Can't modify tracing state for pid %d: %s" msgstr "" -#: gnu-nat.c:1376 +#: gnu-nat.c:1351 #, possible-c-format msgid "Can't forward spontaneous exception (%s)." msgstr "" #. Can't do too much... -#: gnu-nat.c:1416 +#: gnu-nat.c:1391 #, possible-c-format msgid "Can't deliver signal %s: No signal thread." msgstr "" -#: gnu-nat.c:1418 +#: gnu-nat.c:1393 #, possible-c-format msgid "Delivering signal %s: %s" msgstr "" -#: gnu-nat.c:1449 +#: gnu-nat.c:1424 #, possible-c-format msgid "Can't continue process: %s" msgstr "" -#: gnu-nat.c:1491 +#: gnu-nat.c:1460 msgid "There are no threads; try again later." msgstr "" -#: gnu-nat.c:1515 +#: gnu-nat.c:1484 #, possible-c-format msgid "wait request failed: %s" msgstr "" -#: gnu-nat.c:1551 +#: gnu-nat.c:1520 #, possible-c-format msgid "Couldn't wait for an event: %s" msgstr "" #. Whatever it is, it's something strange. -#: gnu-nat.c:1571 +#: gnu-nat.c:1540 #, possible-c-format msgid "Got a strange event, msg id = %d." msgstr "" -#: gnu-nat.c:1574 +#: gnu-nat.c:1543 #, possible-c-format msgid "Handling event, msgid = %d: %s" msgstr "" -#: gnu-nat.c:1749 +#: gnu-nat.c:1718 #, possible-c-format msgid "Pid %d died with unknown exit status, using SIGKILL." msgstr "" -#: gnu-nat.c:1802 +#: gnu-nat.c:1771 #, possible-c-format msgid "illegal rpc: %s" msgstr "" -#: gnu-nat.c:1847 +#: gnu-nat.c:1816 #, possible-c-format msgid "Can't wait for pid %d: %s" msgstr "" -#: gnu-nat.c:1953 +#: gnu-nat.c:1922 #, possible-c-format msgid "Signal delivery failed: %s" msgstr "" -#: gnu-nat.c:2025 +#: gnu-nat.c:1994 #, possible-c-format msgid "Aborting %s with unforwarded exception %s." msgstr "" -#: gnu-nat.c:2054 +#: gnu-nat.c:2023 #, possible-c-format msgid "Can't run single thread id %s: no such thread!" msgstr "" -#: gnu-nat.c:2065 +#: gnu-nat.c:2034 #, possible-c-format msgid "Can't step thread id %s: no such thread." msgstr "" -#: gnu-nat.c:2286 +#: gnu-nat.c:2254 msgid "stop target function not implemented" msgstr "" -#: gnu-nat.c:2320 +#: gnu-nat.c:2288 #, possible-c-format msgid "Read from inferior faulted: %s" msgstr "" -#: gnu-nat.c:2326 +#: gnu-nat.c:2294 #, possible-c-format msgid "gnu_read_inferior vm_deallocate failed: %s" msgstr "" -#: gnu-nat.c:2413 +#: gnu-nat.c:2381 #, possible-c-format msgid "No memory at 0x%lx. Nothing written" msgstr "" -#: gnu-nat.c:2422 +#: gnu-nat.c:2390 #, possible-c-format msgid "Memory at address 0x%lx is unwritable. Nothing written" msgstr "" -#: gnu-nat.c:2495 +#: gnu-nat.c:2463 #, possible-c-format msgid "%s: %s" msgstr "" -#: gnu-nat.c:2660 +#: gnu-nat.c:2626 #, possible-c-format msgid "vm_region failed: %s" msgstr "" -#: gnu-nat.c:2781 +#: gnu-nat.c:2747 #, possible-c-format msgid "Illegal argument for \"%s\" command, should be an integer." msgstr "" -#: gnu-nat.c:2794 +#: gnu-nat.c:2760 #, possible-c-format msgid "Illegal argument for \"%s\" command, should be \"%s\" or \"%s\"." msgstr "" -#: gnu-nat.c:2806 +#: gnu-nat.c:2772 #, possible-c-format msgid "Garbage after \"%s\" command: `%s'" msgstr "" -#: gnu-nat.c:2817 +#: gnu-nat.c:2783 msgid "No current thread." msgstr "" -#: gnu-nat.c:2828 +#: gnu-nat.c:2794 msgid "No current process." msgstr "" -#: gnu-nat.c:2948 +#: gnu-nat.c:2914 msgid "No inferior task." msgstr "" -#: gnu-nat.c:2954 +#: gnu-nat.c:2920 #, possible-c-format msgid "Couldn't extract send right %lu from inferior: %s" msgstr "" -#: gnu-nat.c:2970 +#: gnu-nat.c:2936 #, possible-c-format msgid "Can't set exception port for %s: %s" msgstr "" -#: gnu-nat.c:2981 +#: gnu-nat.c:2947 msgid "No argument to \"set task exception-port\" command." msgstr "" -#: gnu-nat.c:3007 +#: gnu-nat.c:2973 msgid "" "Illegal argument to \"set signal-thread\" command.\n" "Should be a thread ID, or \"none\"." msgstr "" -#: gnu-nat.c:3158 +#: gnu-nat.c:3124 #, possible-c-format msgid "%ld: %s." msgstr "" -#: gnu-nat.c:3168 utils.c:604 +#: gnu-nat.c:3134 utils.c:591 #, possible-c-format msgid "%s." msgstr "" -#: gnu-nat.c:3208 +#: gnu-nat.c:3174 msgid "" "Set whether the new threads are suspended while gdb has control.\n" "This property normally has no effect because the whole task is\n" @@ -13917,78 +13700,78 @@ "The default value is \"off\"." msgstr "" -#: gnu-nat.c:3214 +#: gnu-nat.c:3180 msgid "Show whether new threads are suspended while gdb has control." msgstr "" -#: gnu-nat.c:3218 +#: gnu-nat.c:3184 msgid "Set whether new threads are allowed to run (once gdb has noticed them)." msgstr "" -#: gnu-nat.c:3221 +#: gnu-nat.c:3187 msgid "" "Show whether new threads are allowed to run (once gdb has noticed them)." msgstr "" -#: gnu-nat.c:3226 +#: gnu-nat.c:3192 msgid "Set the default detach-suspend-count value for new threads." msgstr "" -#: gnu-nat.c:3229 +#: gnu-nat.c:3195 msgid "Show the default detach-suspend-count value for new threads." msgstr "" -#: gnu-nat.c:3232 +#: gnu-nat.c:3198 msgid "" "Set whether the inferior process's signals will be intercepted.\n" "Mach exceptions (such as breakpoint traps) are not affected." msgstr "" -#: gnu-nat.c:3237 +#: gnu-nat.c:3203 msgid "Show whether the inferior process's signals will be intercepted." msgstr "" -#: gnu-nat.c:3242 +#: gnu-nat.c:3208 msgid "" "Set the thread that gdb thinks is the libc signal thread.\n" "This thread is run when delivering a signal to a non-stopped process." msgstr "" -#: gnu-nat.c:3247 +#: gnu-nat.c:3213 msgid "Set the thread that gdb thinks is the libc signal thread." msgstr "" -#: gnu-nat.c:3252 +#: gnu-nat.c:3218 msgid "" "Set whether gdb thinks the inferior process is stopped as with SIGSTOP.\n" "Stopped process will be continued by sending them a signal." msgstr "" -#: gnu-nat.c:3256 +#: gnu-nat.c:3222 msgid "" "Show whether gdb thinks the inferior process is stopped as with SIGSTOP." msgstr "" -#: gnu-nat.c:3260 +#: gnu-nat.c:3226 msgid "" "Set whether exceptions in the inferior process will be trapped.\n" "When exceptions are turned off, neither breakpoints nor single-stepping\n" "will work." msgstr "" -#: gnu-nat.c:3267 +#: gnu-nat.c:3233 msgid "Show whether exceptions in the inferior process will be trapped." msgstr "" -#: gnu-nat.c:3272 +#: gnu-nat.c:3238 msgid "Command prefix for setting task attributes." msgstr "" -#: gnu-nat.c:3275 +#: gnu-nat.c:3241 msgid "Command prefix for showing task attributes." msgstr "" -#: gnu-nat.c:3278 +#: gnu-nat.c:3244 msgid "" "Set whether the task is suspended while gdb has control.\n" "A value of \"on\" takes effect immediately, otherwise nothing happens\n" @@ -13997,19 +13780,19 @@ "used to pause individual threads by default instead." msgstr "" -#: gnu-nat.c:3286 +#: gnu-nat.c:3252 msgid "Show whether the task is suspended while gdb has control." msgstr "" -#: gnu-nat.c:3290 +#: gnu-nat.c:3256 msgid "Set the suspend count will leave on the thread when detaching." msgstr "" -#: gnu-nat.c:3293 +#: gnu-nat.c:3259 msgid "Show the suspend count will leave on the thread when detaching." msgstr "" -#: gnu-nat.c:3297 +#: gnu-nat.c:3263 msgid "" "Set the task exception port to which we forward exceptions.\n" "The argument should be the value of the send right in the task." @@ -14017,54 +13800,54 @@ #. A convenient way of turning on all options require to noninvasively #. debug running tasks. -#: gnu-nat.c:3307 +#: gnu-nat.c:3273 msgid "" "Set task options so that we interfere as little as possible.\n" "This is the same as setting `task pause', `exceptions', and\n" "`signals' to the opposite value." msgstr "" -#: gnu-nat.c:3315 +#: gnu-nat.c:3281 msgid "Show information about the task's send rights." msgstr "" -#: gnu-nat.c:3317 +#: gnu-nat.c:3283 msgid "Show information about the task's receive rights." msgstr "" -#: gnu-nat.c:3319 +#: gnu-nat.c:3285 msgid "Show information about the task's port rights." msgstr "" -#: gnu-nat.c:3321 +#: gnu-nat.c:3287 msgid "Show information about the task's port sets." msgstr "" -#: gnu-nat.c:3323 +#: gnu-nat.c:3289 msgid "Show information about the task's dead names." msgstr "" -#: gnu-nat.c:3400 +#: gnu-nat.c:3366 msgid "No argument to \"set thread exception-port\" command." msgstr "" -#: gnu-nat.c:3444 +#: gnu-nat.c:3410 msgid "Command prefix for setting thread properties." msgstr "" -#: gnu-nat.c:3447 +#: gnu-nat.c:3413 msgid "Command prefix for setting default thread properties." msgstr "" -#: gnu-nat.c:3451 +#: gnu-nat.c:3417 msgid "Command prefix for showing thread properties." msgstr "" -#: gnu-nat.c:3454 +#: gnu-nat.c:3420 msgid "Command prefix for showing default thread properties." msgstr "" -#: gnu-nat.c:3458 +#: gnu-nat.c:3424 msgid "" "Set whether the current thread is suspended while gdb has control.\n" "A value of \"on\" takes effect immediately, otherwise nothing happens\n" @@ -14074,55 +13857,55 @@ "The default value is \"off\"." msgstr "" -#: gnu-nat.c:3466 +#: gnu-nat.c:3432 msgid "Show whether the current thread is suspended while gdb has control." msgstr "" -#: gnu-nat.c:3471 +#: gnu-nat.c:3437 msgid "Set whether the current thread is allowed to run." msgstr "" -#: gnu-nat.c:3474 +#: gnu-nat.c:3440 msgid "Show whether the current thread is allowed to run." msgstr "" -#: gnu-nat.c:3477 +#: gnu-nat.c:3443 msgid "" "Set the suspend count will leave on the thread when detaching.\n" "Note that this is relative to suspend count when gdb noticed the thread;\n" "use the `thread takeover-suspend-count' to force it to an absolute value." msgstr "" -#: gnu-nat.c:3482 +#: gnu-nat.c:3448 msgid "" "Show the suspend count will leave on the thread when detaching.\n" "Note that this is relative to suspend count when gdb noticed the thread;\n" "use the `thread takeover-suspend-count' to force it to an absolute value." msgstr "" -#: gnu-nat.c:3488 +#: gnu-nat.c:3454 msgid "" "Set the thread exception port to which we forward exceptions.\n" "This overrides the task exception port.\n" "The argument should be the value of the send right in the task." msgstr "" -#: gnu-nat.c:3497 +#: gnu-nat.c:3463 msgid "" "Force the threads absolute suspend-count to be gdb's.\n" "Prior to giving this command, gdb's thread suspend-counts are relative\n" "to the thread's initial suspend-count when gdb notices the threads." msgstr "" -#: gnu-nat.c:3513 +#: gnu-nat.c:3480 msgid "Set debugging output for the gnu backend." msgstr "" -#: gnu-nat.c:3514 +#: gnu-nat.c:3481 msgid "Show debugging output for the gnu backend." msgstr "" -#: gnu-nat.c:3541 +#: gnu-nat.c:3508 #, possible-c-format msgid "Error flushing inferior's cache : %s" msgstr "" @@ -14139,62 +13922,62 @@ msgid "Baseclass offset not found" msgstr "" -#: gnu-v3-abi.c:335 +#: gnu-v3-abi.c:337 #, possible-c-format msgid "can't find linker symbol for virtual table for `%s' value" msgstr "" -#: gnu-v3-abi.c:338 +#: gnu-v3-abi.c:340 #, possible-c-format msgid " found `%s' instead" msgstr "" -#: gnu-v3-abi.c:420 +#: gnu-v3-abi.c:422 msgid "Only classes can have virtual functions." msgstr "" -#: gnu-v3-abi.c:470 +#: gnu-v3-abi.c:496 msgid "Expected a negative vbase offset (old compiler?)" msgstr "" -#: gnu-v3-abi.c:474 +#: gnu-v3-abi.c:500 msgid "Misaligned vbase offset." msgstr "" -#: gnu-v3-abi.c:888 +#: gnu-v3-abi.c:914 #, possible-c-format msgid "vtable for '%s' @ %s (subobject @ %s):\n" msgstr "" -#: gnu-v3-abi.c:917 printcmd.c:2042 stack.c:1581 value.c:2554 +#: gnu-v3-abi.c:943 printcmd.c:1992 stack.c:1602 value.c:2565 #, possible-c-format msgid "<error: %s>" msgstr "" -#: gnu-v3-abi.c:964 +#: gnu-v3-abi.c:990 msgid "This object does not have a virtual function table\n" msgstr "" -#: gnu-v3-abi.c:1087 +#: gnu-v3-abi.c:1114 msgid "cannot find typeinfo for unnamed type" msgstr "" -#: gnu-v3-abi.c:1110 +#: gnu-v3-abi.c:1138 #, possible-c-format msgid "cannot find typeinfo for object of type '%s'" msgstr "" -#: gnu-v3-abi.c:1123 +#: gnu-v3-abi.c:1151 #, possible-c-format msgid "could not find typeinfo symbol for '%s'" msgstr "" -#: gnu-v3-abi.c:1146 +#: gnu-v3-abi.c:1174 #, possible-c-format msgid "could not find minimal symbol for typeinfo address %s" msgstr "" -#: gnu-v3-abi.c:1154 +#: gnu-v3-abi.c:1182 #, possible-c-format msgid "typeinfo symbol '%s' has unexpected name" msgstr "" @@ -14223,133 +14006,133 @@ "Use the `run' command to run DJGPP programs." msgstr "" -#: go32-nat.c:551 +#: go32-nat.c:552 #, possible-c-format msgid "Invalid register no. %d in fetch_register." msgstr "" -#: go32-nat.c:581 +#: go32-nat.c:582 #, possible-c-format msgid "Invalid register no. %d in store_register." msgstr "" -#: go32-nat.c:707 go32-nat.c:2102 +#: go32-nat.c:708 go32-nat.c:2094 msgid "Cannot allocate redirection storage: not enough memory.\n" msgstr "" -#: go32-nat.c:716 +#: go32-nat.c:717 msgid "Syntax error in command line." msgstr "" -#: go32-nat.c:725 +#: go32-nat.c:726 msgid "Command line too long." msgstr "" -#: go32-nat.c:748 +#: go32-nat.c:749 #, possible-c-format msgid "Load failed for image %s" msgstr "" -#: go32-nat.c:811 +#: go32-nat.c:808 #, possible-c-format msgid "Invalid register %d in go32_set_dr.\n" msgstr "" -#: go32-nat.c:852 +#: go32-nat.c:849 #, possible-c-format msgid "Invalid register %d in go32_get_dr.\n" msgstr "" -#: go32-nat.c:944 +#: go32-nat.c:941 #, possible-c-format msgid "Cannot redirect standard handles for program: %s." msgstr "" -#: go32-nat.c:978 +#: go32-nat.c:975 #, possible-c-format msgid "Cannot redirect standard handles for debugger: %s." msgstr "" -#: go32-nat.c:1702 +#: go32-nat.c:1699 #, possible-c-format msgid "Invalid LDT entry 0x%03lx." msgstr "" -#: go32-nat.c:1740 +#: go32-nat.c:1737 #, possible-c-format msgid "Invalid LDT entry %#lx: outside valid limits [0..%#x]" msgstr "" -#: go32-nat.c:1770 +#: go32-nat.c:1767 #, possible-c-format msgid "Invalid GDT entry 0x%03lx: not an integral multiple of 8." msgstr "" -#: go32-nat.c:1782 +#: go32-nat.c:1779 #, possible-c-format msgid "Invalid GDT entry %#lx: outside valid limits [0..%#x]" msgstr "" -#: go32-nat.c:1811 +#: go32-nat.c:1808 #, possible-c-format msgid "Invalid (negative) IDT entry %ld." msgstr "" -#: go32-nat.c:1823 +#: go32-nat.c:1820 #, possible-c-format msgid "Invalid IDT entry %#lx: outside valid limits [0..%#x]" msgstr "" -#: go32-nat.c:1981 go32-nat.c:2031 +#: go32-nat.c:1978 go32-nat.c:2028 #, possible-c-format msgid "Entry %ld is outside valid limits [0..1023]." msgstr "" -#: go32-nat.c:2058 +#: go32-nat.c:2055 msgid "linear address" msgstr "" -#: go32-nat.c:2108 +#: go32-nat.c:2100 msgid "Print information specific to DJGPP (aka MS-DOS) debugging." msgstr "" -#: go32-nat.c:2112 +#: go32-nat.c:2104 msgid "" "Display information about the target system, including CPU, OS, DPMI, etc." msgstr "" -#: go32-nat.c:2115 +#: go32-nat.c:2107 msgid "" "Display entries in the LDT (Local Descriptor Table).\n" "Entry number (an expression) as an argument means display only that entry." msgstr "" -#: go32-nat.c:2119 +#: go32-nat.c:2111 msgid "" "Display entries in the GDT (Global Descriptor Table).\n" "Entry number (an expression) as an argument means display only that entry." msgstr "" -#: go32-nat.c:2123 +#: go32-nat.c:2115 msgid "" "Display entries in the IDT (Interrupt Descriptor Table).\n" "Entry number (an expression) as an argument means display only that entry." msgstr "" -#: go32-nat.c:2127 +#: go32-nat.c:2119 msgid "" "Display entries in the Page Directory.\n" "Entry number (an expression) as an argument means display only that entry." msgstr "" -#: go32-nat.c:2131 +#: go32-nat.c:2123 msgid "" "Display entries in Page Tables.\n" "Entry number (an expression) as an argument means display only entries\n" "from the Page Table pointed to by the specified Page Directory entry." msgstr "" -#: go32-nat.c:2136 +#: go32-nat.c:2128 msgid "" "Display a Page Table entry for a linear address.\n" "The address argument must be a linear address, after adding to\n" @@ -14361,254 +14144,260 @@ "the `info dos ldt' command." msgstr "" -#: guile/scm-ports.c:464 -msgid "output port" +#: guile/scm-frame.c:326 +msgid "inferior" msgstr "" -#: guile/scm-ports.c:466 -msgid "thunk" +#: guile/scm-frame.c:329 +msgid "inferior has changed" msgstr "" -#: guile/scm-ports.c:592 -msgid "error reading memory" +#: guile/scm-frame.c:444 guile/scm-frame.c:483 guile/scm-frame.c:514 +#: guile/scm-frame.c:546 guile/scm-frame.c:582 guile/scm-frame.c:616 +#: guile/scm-frame.c:668 guile/scm-frame.c:706 guile/scm-frame.c:744 +#: guile/scm-frame.c:781 guile/scm-frame.c:829 guile/scm-frame.c:877 +#: guile/scm-frame.c:980 +msgid "<gdb:frame>" msgstr "" -#: guile/scm-ports.c:615 -msgid "overflow in offset calculation" +#: guile/scm-frame.c:626 +msgid "cannot find block for frame" msgstr "" -#: guile/scm-ports.c:627 -msgid "bad offset" +#: guile/scm-frame.c:835 +msgid "unknown register" msgstr "" -#: guile/scm-ports.c:652 guile/scm-ports.c:678 -msgid "writing beyond end of memory range" +#: guile/scm-frame.c:931 +msgid "variable not found" msgstr "" -#: guile/scm-ports.c:657 guile/scm-ports.c:685 guile/scm-ports.c:717 -msgid "error writing memory" +#: guile/scm-frame.c:937 +msgid "gdb:symbol or string" msgstr "" -#: guile/scm-ports.c:813 -msgid "bad seek" +#: guile/scm-frame.c:1019 +msgid "No frame is currently selected" msgstr "" -#: guile/scm-ports.c:901 guile/scm-ports.c:914 -msgid "bad mode string" +#: guile/scm-gsmob.c:151 +msgid "any gdb smob" msgstr "" -#: guile/scm-ports.c:1003 -msgid "port is unbuffered: ~a" +#: guile/scm-value.c:482 +msgid "" +"Trying to get the referenced value from a value which is neither a pointer " +"nor a reference" msgstr "" -#: guile/scm-ports.c:1012 -msgid "read buffer not empty: ~a" +#: guile/scm-value.c:636 guile/scm-type.c:990 guile/scm-type.c:1031 +#: guile/scm-utils.c:205 guile/scm-param.c:514 guile/scm-param.c:701 +#: guile/scm-pretty-print.c:156 +msgid "string" msgstr "" -#: guile/scm-ports.c:1019 -msgid "write buffer not empty: ~a" +#: guile/scm-value.c:687 +msgid "Cannot subscript requested type" msgstr "" -#: guile/scm-ports.c:1103 guile/scm-disasm.c:233 -msgid "start+size overflows" +#: guile/scm-value.c:720 +msgid "function (value of TYPE_CODE_FUNC)" msgstr "" -#: guile/scm-ports.c:1179 guile/scm-ports.c:1221 guile/scm-breakpoint.c:666 -#: guile/scm-breakpoint.c:707 guile/scm-type.c:1109 guile/scm-param.c:762 -msgid "integer" +#: guile/scm-value.c:723 guile/scm-objfile.c:290 guile/scm-progspace.c:330 +#: guile/scm-param.c:494 guile/scm-pretty-print.c:255 +msgid "list" msgstr "" -#: guile/scm-cmd.c:244 -msgid "<gdb:command>" +#: guile/scm-value.c:832 guile/scm-value.c:876 +msgid "integer-like gdb value" msgstr "" -#: guile/scm-cmd.c:306 -msgid "Could not convert arguments to Scheme string." +#: guile/scm-value.c:924 +msgid "number" msgstr "" -#: guile/scm-cmd.c:327 -msgid "Error occurred in Scheme-implemented GDB command." +#: guile/scm-value.c:953 +msgid "number can't be converted to a double" msgstr "" -#. Inform the user, but otherwise ignore the entire result. -#: guile/scm-cmd.c:359 -msgid "Bad text from completer: " +#: guile/scm-value.c:1015 +msgid "invalid error kind" msgstr "" -#: guile/scm-cmd.c:396 -msgid "Could not convert \"text\" argument to Scheme string." +#: guile/scm-value.c:1103 guile/scm-lazy-string.c:162 +msgid "invalid length" msgstr "" -#: guile/scm-cmd.c:400 -msgid "Could not convert \"word\" argument to Scheme string." +#: guile/scm-value.c:1140 +msgid "length is larger than array size" msgstr "" -#. Inform the user, but otherwise ignore. -#: guile/scm-cmd.c:450 -msgid "Bad completer result: " +#: guile/scm-lazy-string.c:169 +msgid "cannot create a lazy string with address 0x0, and a non-zero length" msgstr "" -#: guile/scm-cmd.c:490 guile/scm-cmd.c:696 -msgid "no command name found" +#: guile/scm-lazy-string.c:176 +msgid "a lazy string's type cannot be NULL" msgstr "" -#: guile/scm-cmd.c:518 -#, possible-c-format -msgid "could not find command prefix '%s'" +#: guile/scm-lazy-string.c:308 +msgid "cannot create a value from NULL" msgstr "" -#: guile/scm-cmd.c:534 -#, possible-c-format -msgid "'%s' is not a prefix command" +#: guile/scm-type.c:71 +msgid "type is not a structure, union, or enum type" msgstr "" -#: guile/scm-cmd.c:682 guile/scm-param.c:244 python/py-param.c:342 -#: python/py-cmd.c:534 -msgid "This command is not documented." +#: guile/scm-type.c:730 python/py-type.c:520 +msgid "Array length must not be negative" msgstr "" -#: guile/scm-cmd.c:702 guile/scm-pretty-print.c:158 guile/scm-iterator.c:162 -#: guile/scm-param.c:915 guile/scm-param.c:920 -msgid "procedure" +#: guile/scm-type.c:823 +msgid "ranged type" msgstr "" -#: guile/scm-cmd.c:709 guile/scm-param.c:894 -msgid "invalid command class argument" +#: guile/scm-type.c:1017 +msgid "Unknown field" msgstr "" -#: guile/scm-cmd.c:716 -msgid "integer or procedure" +#: guile/scm-type.c:1113 guile/scm-ports.c:1444 guile/scm-ports.c:1494 +#: guile/scm-breakpoint.c:666 guile/scm-breakpoint.c:707 guile/scm-param.c:762 +msgid "integer" msgstr "" -#: guile/scm-cmd.c:722 -msgid "invalid completion type argument" +#: guile/scm-type.c:1171 +msgid "enum type" msgstr "" -#: guile/scm-cmd.c:751 -msgid "command is already registered" +#: guile/scm-type.c:1188 +msgid "non-enum type" msgstr "" -#: guile/scm-lazy-string.c:162 guile/scm-value.c:1085 -msgid "invalid length" +#: guile/scm-ports.c:591 +msgid "output port" msgstr "" -#: guile/scm-lazy-string.c:169 -msgid "cannot create a lazy string with address 0x0, and a non-zero length" +#: guile/scm-ports.c:593 +msgid "thunk" msgstr "" -#: guile/scm-lazy-string.c:176 -msgid "a lazy string's type cannot be NULL" +#: guile/scm-ports.c:721 guile/scm-ports.c:1086 +msgid "error reading memory" msgstr "" -#: guile/scm-lazy-string.c:308 -msgid "cannot create a value from NULL" +#: guile/scm-ports.c:744 +msgid "overflow in offset calculation" msgstr "" -#: guile/scm-utils.c:205 guile/scm-value.c:618 guile/scm-pretty-print.c:156 -#: guile/scm-type.c:986 guile/scm-type.c:1027 guile/scm-param.c:514 -#: guile/scm-param.c:701 -msgid "string" +#: guile/scm-ports.c:756 +msgid "bad offset" msgstr "" -#: guile/scm-utils.c:215 guile/scm-breakpoint.c:589 guile/scm-breakpoint.c:628 -#: guile/scm-param.c:722 -msgid "boolean" +#: guile/scm-ports.c:781 guile/scm-ports.c:899 guile/scm-ports.c:1103 +msgid "writing beyond end of memory range" msgstr "" -#: guile/scm-utils.c:224 -msgid "int" +#: guile/scm-ports.c:786 guile/scm-ports.c:906 guile/scm-ports.c:938 +#: guile/scm-ports.c:1107 +msgid "error writing memory" msgstr "" -#: guile/scm-utils.c:233 -msgid "unsigned int" +#: guile/scm-ports.c:875 guile/scm-ports.c:1125 +msgid "bad seek" msgstr "" -#: guile/scm-utils.c:242 -msgid "long" +#: guile/scm-ports.c:1006 +msgid "port is unbuffered: ~a" msgstr "" -#: guile/scm-utils.c:251 -msgid "unsigned long" +#: guile/scm-ports.c:1015 +msgid "read buffer not empty: ~a" msgstr "" -#: guile/scm-utils.c:260 -msgid "LONGEST" +#: guile/scm-ports.c:1022 +msgid "write buffer not empty: ~a" msgstr "" -#: guile/scm-utils.c:269 -msgid "ULONGEST" +#: guile/scm-ports.c:1199 guile/scm-ports.c:1212 +msgid "bad mode string" msgstr "" -#: guile/scm-utils.c:389 -msgid "Unrecognized keyword: ~a" +#: guile/scm-ports.c:1349 guile/scm-disasm.c:233 +msgid "start+size overflows" msgstr "" -#: guile/scm-utils.c:397 -msgid "Missing value for keyword argument" +#: guile/scm-disasm.c:209 +msgid "input port" msgstr "" -#: guile/scm-utils.c:442 -msgid "Too many arguments" +#: guile/scm-disasm.c:219 +msgid "offset provided but port is missing" msgstr "" -#: guile/scm-frame.c:326 -msgid "inferior" +#: guile/scm-objfile.c:222 +msgid "<gdb:objfile>" msgstr "" -#: guile/scm-frame.c:329 -msgid "inferior has changed" +#: guile/scm-symtab.c:268 +msgid "<gdb:symtab>" msgstr "" -#: guile/scm-frame.c:444 guile/scm-frame.c:483 guile/scm-frame.c:514 -#: guile/scm-frame.c:546 guile/scm-frame.c:582 guile/scm-frame.c:616 -#: guile/scm-frame.c:668 guile/scm-frame.c:706 guile/scm-frame.c:744 -#: guile/scm-frame.c:781 guile/scm-frame.c:829 guile/scm-frame.c:877 -#: guile/scm-frame.c:980 -msgid "<gdb:frame>" +#: guile/scm-symtab.c:515 +msgid "<gdb:sal>" msgstr "" -#: guile/scm-frame.c:626 -msgid "cannot find block for frame" +#: guile/scm-block.c:279 guile/scm-block.c:305 +msgid "<gdb:block>" msgstr "" -#: guile/scm-frame.c:835 -msgid "unknown register" +#: guile/scm-block.c:700 +msgid "cannot locate object file for block" msgstr "" -#: guile/scm-frame.c:931 -msgid "variable not found" +#: guile/scm-progspace.c:233 +msgid "<gdb:progspace>" msgstr "" -#: guile/scm-frame.c:937 -msgid "gdb:symbol or string" +#: guile/scm-utils.c:215 guile/scm-breakpoint.c:589 guile/scm-breakpoint.c:628 +#: guile/scm-param.c:722 +msgid "boolean" msgstr "" -#: guile/scm-frame.c:1019 -msgid "No frame is currently selected" +#: guile/scm-utils.c:224 +msgid "int" msgstr "" -#: guile/scm-disasm.c:209 -msgid "input port" +#: guile/scm-utils.c:233 +msgid "unsigned int" msgstr "" -#: guile/scm-disasm.c:219 -msgid "offset provided but port is missing" +#: guile/scm-utils.c:242 +msgid "long" msgstr "" -#: guile/scm-symtab.c:268 -msgid "<gdb:symtab>" +#: guile/scm-utils.c:251 +msgid "unsigned long" msgstr "" -#: guile/scm-symtab.c:515 -msgid "<gdb:sal>" +#: guile/scm-utils.c:260 +msgid "LONGEST" msgstr "" -#: guile/scm-block.c:279 guile/scm-block.c:305 -msgid "<gdb:block>" +#: guile/scm-utils.c:269 +msgid "ULONGEST" msgstr "" -#: guile/scm-block.c:700 -msgid "cannot locate object file for block" +#: guile/scm-utils.c:389 +msgid "Unrecognized keyword: ~a" +msgstr "" + +#: guile/scm-utils.c:397 +msgid "Missing value for keyword argument" +msgstr "" + +#: guile/scm-utils.c:442 +msgid "Too many arguments" msgstr "" #: guile/scm-breakpoint.c:323 @@ -14659,45 +14448,6 @@ msgid "procedure or #f" msgstr "" -#: guile/scm-value.c:464 -msgid "" -"Trying to get the referenced value from a value which is neither a pointer " -"nor a reference" -msgstr "" - -#: guile/scm-value.c:669 -msgid "Cannot subscript requested type" -msgstr "" - -#: guile/scm-value.c:702 -msgid "function (value of TYPE_CODE_FUNC)" -msgstr "" - -#: guile/scm-value.c:705 guile/scm-pretty-print.c:255 guile/scm-param.c:494 -#: guile/scm-progspace.c:330 guile/scm-objfile.c:290 -msgid "list" -msgstr "" - -#: guile/scm-value.c:814 guile/scm-value.c:858 -msgid "integer-like gdb value" -msgstr "" - -#: guile/scm-value.c:906 -msgid "number" -msgstr "" - -#: guile/scm-value.c:935 -msgid "number can't be converted to a double" -msgstr "" - -#: guile/scm-value.c:997 -msgid "invalid error kind" -msgstr "" - -#: guile/scm-value.c:1122 -msgid "length is larger than array size" -msgstr "" - #: guile/scm-math.c:540 guile/scm-math.c:555 msgid "value out of range for type" msgstr "" @@ -14714,153 +14464,160 @@ msgid "No type allowed" msgstr "" -#: guile/scm-pretty-print.c:370 guile/scm-pretty-print.c:415 -msgid "pretty-printer list is not a list" +#: guile/scm-param.c:244 guile/scm-cmd.c:682 python/py-param.c:342 +#: python/py-cmd.c:535 +msgid "This command is not documented." msgstr "" -#: guile/scm-pretty-print.c:382 -msgid "pretty-printer list contains non-pretty-printer object" +#: guile/scm-param.c:289 +msgid "Error occurred setting parameter." msgstr "" -#: guile/scm-pretty-print.c:395 -msgid "invalid lookup object in pretty-printer matcher" +#: guile/scm-param.c:293 +#, possible-c-format +msgid "Result of %s set-func is not a string." msgstr "" -#: guile/scm-pretty-print.c:408 -msgid "invalid result from pretty-printer lookup" +#: guile/scm-param.c:300 guile/scm-param.c:344 +msgid "Error converting show text to host string." msgstr "" -#: guile/scm-pretty-print.c:558 -msgid "invalid result from pretty-printer to-string" +#: guile/scm-param.c:325 +#, possible-c-format +msgid "Error converting parameter value \"%s\" to Scheme string." msgstr "" -#: guile/scm-pretty-print.c:620 python/py-prettyprint.c:264 valprint.c:1090 -msgid "<error reading variable>" +#: guile/scm-param.c:336 +msgid "Error occurred showing parameter." msgstr "" -#: guile/scm-pretty-print.c:741 -msgid "pretty-printer \"children\" object is not a procedure or #f" +#: guile/scm-param.c:500 +msgid "enumeration list is empty" msgstr "" -#: guile/scm-pretty-print.c:764 -msgid "" -"result of pretty-printer \"children\" procedure is not a <gdb:iterator> " -"object" +#: guile/scm-param.c:651 +msgid "program error: unhandled type" msgstr "" -#: guile/scm-pretty-print.c:804 -msgid "" -"result of pretty-printer children iterator is not a pair or (end-of-" -"iteration)" +#: guile/scm-param.c:673 +msgid "string or #f for non-PARAM_FILENAME parameters" msgstr "" -#: guile/scm-pretty-print.c:814 -msgid "first element of pretty-printer children iterator is not a string" +#: guile/scm-param.c:714 +msgid "not member of enumeration" msgstr "" -#: guile/guile.c:177 guile/guile.c:371 -msgid "guile-repl currently does not take any arguments." +#: guile/scm-param.c:730 +msgid "boolean or #:auto" msgstr "" -#: guile/guile.c:254 -msgid "Invalid \"guile\" block structure." +#: guile/scm-param.c:749 +msgid "integer or #:unlimited" msgstr "" -#: guile/guile.c:372 guile/guile.c:380 -msgid "Guile scripting is not supported in this copy of GDB." +#: guile/scm-param.c:781 +msgid "must be >= -1" msgstr "" -#: guile/guile.c:422 -msgid "\"info guile\" must be followed by the name of an info command.\n" +#: guile/scm-param.c:894 guile/scm-cmd.c:709 +msgid "invalid command class argument" msgstr "" -#: guile/guile.c:527 -msgid "Error in function ~s:~%" +#: guile/scm-param.c:900 +msgid "invalid parameter type argument" msgstr "" -#: guile/guile.c:551 -msgid "Throw to key `~a' with args `~s'.~%" +#: guile/scm-param.c:905 +msgid "#:enum-values can only be provided with PARAM_ENUM" msgstr "" -#: guile/guile.c:566 -#, possible-c-format -msgid "" -"Could not complete Guile gdb module initialization from:\n" -"%s.\n" -"Limited Guile support is available.\n" -"Suggest passing --data-directory=/path/to/gdb/data-directory." +#: guile/scm-param.c:910 +msgid "PARAM_ENUM requires an enum-values argument" msgstr "" -#: guile/guile.c:713 -msgid "" -"Start an interactive Guile prompt.\n" -"\n" -"To return to GDB, type the EOF character (e.g., Ctrl-D on an empty\n" -"prompt) or ,quit." +#: guile/scm-param.c:915 guile/scm-param.c:920 guile/scm-cmd.c:702 +#: guile/scm-iterator.c:162 guile/scm-pretty-print.c:158 +msgid "procedure" msgstr "" -#: guile/guile.c:719 -msgid "" -"Start a Guile interactive prompt.\n" -"\n" -"Guile scripting is not supported in this copy of GDB.\n" -"This command is only a placeholder." +#: guile/scm-param.c:991 +msgid "parameter is already registered" msgstr "" -#: guile/guile.c:732 -msgid "" -"Evaluate one or more Guile expressions.\n" -"\n" -"The expression(s) can be given as an argument, for instance:\n" -"\n" -" guile (display 23)\n" -"\n" -"The result of evaluating the last expression is printed.\n" -"\n" -"If no argument is given, the following lines are read and passed\n" -"to Guile for evaluation. Type a line containing \"end\" to indicate\n" -"the end of the set of expressions.\n" -"\n" -"The Guile GDB module must first be imported before it can be used.\n" -"Do this with:\n" -"(gdb) guile (use-modules (gdb))\n" -"or if you want to import the (gdb) module with a prefix, use:\n" -"(gdb) guile (use-modules ((gdb) #:renamer (symbol-prefix-proc 'gdb:)))\n" -"\n" -"The Guile interactive session, started with the \"guile-repl\"\n" -"command, provides extensive help and apropos capabilities.\n" -"Type \",help\" once in a Guile interactive session." +#: guile/scm-param.c:1004 +msgid "parameter exists, \"set\" command is already defined" msgstr "" -#: guile/guile.c:755 -msgid "" -"Evaluate a Guile expression.\n" -"\n" -"Guile scripting is not supported in this copy of GDB.\n" -"This command is only a placeholder." +#: guile/scm-param.c:1009 +msgid "parameter exists, \"show\" command is already defined" msgstr "" -#: guile/guile.c:765 guile/guile.c:771 -msgid "Prefix command for Guile preference settings." +#: guile/scm-param.c:1048 +msgid "<gdb:parameter> or string" msgstr "" -#: guile/guile.c:777 -msgid "Prefix command for Guile info displays." +#: guile/scm-param.c:1085 +msgid "parameter not found" msgstr "" -#: guile/guile.c:785 -msgid "Set mode for Guile exception printing on error." +#: guile/scm-param.c:1090 +msgid "not a parameter" msgstr "" -#: guile/guile.c:786 -msgid "Show the mode of Guile exception printing on error." +#: guile/scm-cmd.c:244 +msgid "<gdb:command>" msgstr "" -#: guile/guile.c:787 python/python.c:1797 -msgid "" -"none == no stack or message will be printed.\n" -"full == a message and a stack will be printed.\n" -"message == an error message without a stack will be printed." +#: guile/scm-cmd.c:306 +msgid "Could not convert arguments to Scheme string." +msgstr "" + +#: guile/scm-cmd.c:327 +msgid "Error occurred in Scheme-implemented GDB command." +msgstr "" + +#. Inform the user, but otherwise ignore the entire result. +#: guile/scm-cmd.c:359 +msgid "Bad text from completer: " +msgstr "" + +#: guile/scm-cmd.c:396 +msgid "Could not convert \"text\" argument to Scheme string." +msgstr "" + +#: guile/scm-cmd.c:400 +msgid "Could not convert \"word\" argument to Scheme string." +msgstr "" + +#. Inform the user, but otherwise ignore. +#: guile/scm-cmd.c:450 +msgid "Bad completer result: " +msgstr "" + +#: guile/scm-cmd.c:490 guile/scm-cmd.c:696 +msgid "no command name found" +msgstr "" + +#: guile/scm-cmd.c:518 +#, possible-c-format +msgid "could not find command prefix '%s'" +msgstr "" + +#: guile/scm-cmd.c:534 +#, possible-c-format +msgid "'%s' is not a prefix command" +msgstr "" + +#: guile/scm-cmd.c:716 +msgid "integer or procedure" +msgstr "" + +#: guile/scm-cmd.c:722 +msgid "invalid completion type argument" +msgstr "" + +#: guile/scm-cmd.c:751 +msgid "command is already registered" msgstr "" #: guile/scm-exception.c:244 @@ -14924,30 +14681,6 @@ msgid "Error in Scheme exception printing:\n" msgstr "" -#: guile/scm-type.c:71 -msgid "type is not a structure, union, or enum type" -msgstr "" - -#: guile/scm-type.c:730 python/py-type.c:517 -msgid "Array length must not be negative" -msgstr "" - -#: guile/scm-type.c:823 -msgid "ranged type" -msgstr "" - -#: guile/scm-type.c:1013 -msgid "Unknown field" -msgstr "" - -#: guile/scm-type.c:1167 -msgid "enum type" -msgstr "" - -#: guile/scm-type.c:1184 -msgid "non-enum type" -msgstr "" - #: guile/scm-symbol.c:275 msgid "<gdb:symbol>" msgstr "" @@ -14964,111 +14697,114 @@ msgid "Symbol requires a frame to compute its value" msgstr "" -#: guile/scm-symbol.c:612 valops.c:3763 +#: guile/scm-symbol.c:612 valops.c:3722 msgid "no frame selected" msgstr "" -#. Set this now in case an exception is thrown. -#: guile/scm-safe-call.c:180 -msgid "Error while executing Scheme code." +#: guile/guile.c:177 guile/guile.c:371 +msgid "guile-repl currently does not take any arguments." msgstr "" -#: guile/scm-gsmob.c:151 -msgid "any gdb smob" +#: guile/guile.c:254 +msgid "Invalid \"guile\" block structure." msgstr "" -#: guile/scm-param.c:289 -msgid "Error occurred setting parameter." +#: guile/guile.c:372 guile/guile.c:380 +msgid "Guile scripting is not supported in this copy of GDB." msgstr "" -#: guile/scm-param.c:293 -#, possible-c-format -msgid "Result of %s set-func is not a string." +#: guile/guile.c:500 +msgid "Error in function ~s:~%" msgstr "" -#: guile/scm-param.c:300 guile/scm-param.c:344 -msgid "Error converting show text to host string." +#: guile/guile.c:524 +msgid "Throw to key `~a' with args `~s'.~%" msgstr "" -#: guile/scm-param.c:325 +#: guile/guile.c:539 #, possible-c-format -msgid "Error converting parameter value \"%s\" to Scheme string." -msgstr "" - -#: guile/scm-param.c:336 -msgid "Error occurred showing parameter." -msgstr "" - -#: guile/scm-param.c:500 -msgid "enumeration list is empty" -msgstr "" - -#: guile/scm-param.c:651 -msgid "program error: unhandled type" -msgstr "" - -#: guile/scm-param.c:673 -msgid "string or #f for non-PARAM_FILENAME parameters" +msgid "" +"Could not complete Guile gdb module initialization from:\n" +"%s.\n" +"Limited Guile support is available.\n" +"Suggest passing --data-directory=/path/to/gdb/data-directory." msgstr "" -#: guile/scm-param.c:714 -msgid "not member of enumeration" +#: guile/guile.c:686 +msgid "" +"Start an interactive Guile prompt.\n" +"\n" +"To return to GDB, type the EOF character (e.g., Ctrl-D on an empty\n" +"prompt) or ,quit." msgstr "" -#: guile/scm-param.c:730 -msgid "boolean or #:auto" +#: guile/guile.c:692 +msgid "" +"Start a Guile interactive prompt.\n" +"\n" +"Guile scripting is not supported in this copy of GDB.\n" +"This command is only a placeholder." msgstr "" -#: guile/scm-param.c:749 -msgid "integer or #:unlimited" -msgstr "" - -#: guile/scm-param.c:781 -msgid "must be >= -1" -msgstr "" - -#: guile/scm-param.c:900 -msgid "invalid parameter type argument" -msgstr "" - -#: guile/scm-param.c:905 -msgid "#:enum-values can only be provided with PARAM_ENUM" -msgstr "" - -#: guile/scm-param.c:910 -msgid "PARAM_ENUM requires an enum-values argument" -msgstr "" - -#: guile/scm-param.c:991 -msgid "parameter is already registered" +#: guile/guile.c:705 +msgid "" +"Evaluate one or more Guile expressions.\n" +"\n" +"The expression(s) can be given as an argument, for instance:\n" +"\n" +" guile (display 23)\n" +"\n" +"The result of evaluating the last expression is printed.\n" +"\n" +"If no argument is given, the following lines are read and passed\n" +"to Guile for evaluation. Type a line containing \"end\" to indicate\n" +"the end of the set of expressions.\n" +"\n" +"The Guile GDB module must first be imported before it can be used.\n" +"Do this with:\n" +"(gdb) guile (use-modules (gdb))\n" +"or if you want to import the (gdb) module with a prefix, use:\n" +"(gdb) guile (use-modules ((gdb) #:renamer (symbol-prefix-proc 'gdb:)))\n" +"\n" +"The Guile interactive session, started with the \"guile-repl\"\n" +"command, provides extensive help and apropos capabilities.\n" +"Type \",help\" once in a Guile interactive session." msgstr "" -#: guile/scm-param.c:1004 -msgid "parameter exists, \"set\" command is already defined" +#: guile/guile.c:728 +msgid "" +"Evaluate a Guile expression.\n" +"\n" +"Guile scripting is not supported in this copy of GDB.\n" +"This command is only a placeholder." msgstr "" -#: guile/scm-param.c:1009 -msgid "parameter exists, \"show\" command is already defined" +#: guile/guile.c:738 guile/guile.c:744 +msgid "Prefix command for Guile preference settings." msgstr "" -#: guile/scm-param.c:1048 -msgid "<gdb:parameter> or string" +#: guile/guile.c:750 +msgid "Prefix command for Guile info displays." msgstr "" -#: guile/scm-param.c:1085 -msgid "parameter not found" +#: guile/guile.c:758 +msgid "Set mode for Guile exception printing on error." msgstr "" -#: guile/scm-param.c:1090 -msgid "not a parameter" +#: guile/guile.c:759 +msgid "Show the mode of Guile exception printing on error." msgstr "" -#: guile/scm-progspace.c:233 -msgid "<gdb:progspace>" +#: guile/guile.c:760 python/python.c:1873 +msgid "" +"none == no stack or message will be printed.\n" +"full == a message and a stack will be printed.\n" +"message == an error message without a stack will be printed." msgstr "" -#: guile/scm-objfile.c:222 -msgid "<gdb:objfile>" +#. Set this now in case an exception is thrown. +#: guile/scm-safe-call.c:180 +msgid "Error while executing Scheme code." msgstr "" #: guile/scm-auto-load.c:41 @@ -15097,39 +14833,83 @@ "Usage: info auto-load guile-scripts [REGEXP]" msgstr "" -#: h8300-tdep.c:751 h8300-tdep.c:783 +#: guile/scm-pretty-print.c:370 guile/scm-pretty-print.c:415 +msgid "pretty-printer list is not a list" +msgstr "" + +#: guile/scm-pretty-print.c:382 +msgid "pretty-printer list contains non-pretty-printer object" +msgstr "" + +#: guile/scm-pretty-print.c:395 +msgid "invalid lookup object in pretty-printer matcher" +msgstr "" + +#: guile/scm-pretty-print.c:408 +msgid "invalid result from pretty-printer lookup" +msgstr "" + +#: guile/scm-pretty-print.c:558 +msgid "invalid result from pretty-printer to-string" +msgstr "" + +#: guile/scm-pretty-print.c:620 python/py-prettyprint.c:264 valprint.c:987 +msgid "<error reading variable>" +msgstr "" + +#: guile/scm-pretty-print.c:741 +msgid "pretty-printer \"children\" object is not a procedure or #f" +msgstr "" + +#: guile/scm-pretty-print.c:764 +msgid "" +"result of pretty-printer \"children\" procedure is not a <gdb:iterator> " +"object" +msgstr "" + +#: guile/scm-pretty-print.c:804 +msgid "" +"result of pretty-printer children iterator is not a pair or (end-of-" +"iteration)" +msgstr "" + +#: guile/scm-pretty-print.c:814 +msgid "first element of pretty-printer children iterator is not a string" +msgstr "" + +#: h8300-tdep.c:752 h8300-tdep.c:784 msgid "I don't know how this 8 byte value is returned." msgstr "" #. long long, double and long double #. are all defined as 4 byte types so #. far so this shouldn't happen. -#: h8300-tdep.c:846 +#: h8300-tdep.c:847 msgid "I don't know how to return an 8 byte value." msgstr "" -#: h8300-tdep.c:938 +#: h8300-tdep.c:939 #, possible-c-format msgid "h8300_register_name_common: illegal register number %d" msgstr "" -#: h8300-tdep.c:1125 +#: h8300-tdep.c:1126 #, possible-c-format msgid "h8300_register_type: illegal register number %d" msgstr "" -#: hppa-linux-nat.c:168 ia64-linux-nat.c:351 +#: hppa-linux-nat.c:168 ia64-linux-nat.c:354 #, possible-c-format msgid "Invalid register number %d." msgstr "" -#: hppa-linux-nat.c:242 i386-linux-nat.c:125 ia64-linux-nat.c:792 +#: hppa-linux-nat.c:242 i386-linux-nat.c:125 ia64-linux-nat.c:795 #: linux-nat-trad.c:63 m68k-linux-nat.c:133 #, possible-c-format msgid "Couldn't read register %s (#%d): %s." msgstr "" -#: hppa-linux-nat.c:267 i386-linux-nat.c:151 ia64-linux-nat.c:847 +#: hppa-linux-nat.c:267 i386-linux-nat.c:151 ia64-linux-nat.c:850 #: linux-nat-trad.c:124 m68k-linux-nat.c:186 #, possible-c-format msgid "Couldn't write register %s (#%d): %s." @@ -15158,46 +14938,46 @@ msgid "Unsupported address size: %d" msgstr "" -#: hppa-tdep.c:3177 +#: hppa-tdep.c:3178 msgid "Print unwind table entry at given address." msgstr "" #. Debug this files internals. -#: hppa-tdep.c:3181 +#: hppa-tdep.c:3182 msgid "" "Set whether hppa target specific debugging information should be displayed." msgstr "" -#: hppa-tdep.c:3183 +#: hppa-tdep.c:3184 msgid "Show whether hppa target specific debugging information is displayed." msgstr "" -#: hppa-tdep.c:3184 +#: hppa-tdep.c:3185 msgid "" "This flag controls whether hppa target specific debugging information is\n" "displayed. This information is particularly useful for debugging frame\n" "unwinding problems." msgstr "" -#: i386-bsd-nat.c:303 +#: i386-bsd-nat.c:322 msgid "Couldn't write XMM registers" msgstr "" -#: i386-bsd-nat.c:361 +#: i386-bsd-nat.c:383 #, possible-c-format msgid "" "offsetof (struct sigcontext, sc_pc) yields %d instead of %d.\n" "Please report this to <bug-gdb@gnu.org>." msgstr "" -#: i386-bsd-nat.c:374 +#: i386-bsd-nat.c:396 #, possible-c-format msgid "" "offsetof (struct sigcontext, sc_sp) yields %d instead of %d.\n" "Please report this to <bug-gdb@gnu.org>." msgstr "" -#: i386-bsd-nat.c:387 +#: i386-bsd-nat.c:409 #, possible-c-format msgid "" "offsetof (struct sigcontext, sc_fp) yields %d instead of %d.\n" @@ -15229,11 +15009,11 @@ msgid "darwin_set_sstep: unknown flavour: %d" msgstr "" -#: i386-fbsd-tdep.c:249 i386-linux-tdep.c:662 +#: i386-fbsd-tdep.c:250 i386-linux-tdep.c:663 msgid "Couldn't read `xcr0' bytes from `.reg-xstate' section in core file." msgstr "" -#: i386-fbsd-tdep.c:333 i386-fbsd-tdep.c:341 +#: i386-fbsd-tdep.c:334 i386-fbsd-tdep.c:343 #, possible-c-format msgid "Unable to fetch %%gsbase" msgstr "" @@ -15309,53 +15089,53 @@ msgid "Got request to store bad register number %d." msgstr "" -#: i386-linux-tdep.c:430 +#: i386-linux-tdep.c:431 msgid "Upper bound violation" msgstr "" -#: i386-linux-tdep.c:432 +#: i386-linux-tdep.c:433 msgid "Lower bound violation" msgstr "" -#: i386-linux-tdep.c:434 sparc64-linux-tdep.c:152 sparc64-linux-tdep.c:158 -#: sparc64-linux-tdep.c:164 +#: i386-linux-tdep.c:435 sparc64-linux-tdep.c:153 sparc64-linux-tdep.c:159 +#: sparc64-linux-tdep.c:165 msgid " while accessing address " msgstr "" -#: i386-linux-tdep.c:437 +#: i386-linux-tdep.c:438 msgid "" "\n" "Bounds: [lower = " msgstr "" -#: i386-linux-tdep.c:440 +#: i386-linux-tdep.c:441 msgid ", upper = " msgstr "" -#: i386-linux-tdep.c:443 +#: i386-linux-tdep.c:444 msgid "]" msgstr "" -#: i386-tdep.c:2795 +#: i386-tdep.c:2839 msgid "Cannot find floating-point return value." msgstr "" -#: i386-tdep.c:2826 m68k-tdep.c:300 +#: i386-tdep.c:2870 m68k-tdep.c:300 #, possible-c-format msgid "Cannot extract return value of %d bytes long." msgstr "" -#: i386-tdep.c:2848 +#: i386-tdep.c:2892 msgid "Cannot set floating-point return value." msgstr "" -#: i386-tdep.c:2891 m68k-tdep.c:340 +#: i386-tdep.c:2935 m68k-tdep.c:340 #, possible-c-format msgid "Cannot store return value of %d bytes long." msgstr "" -#: i386-tdep.c:4912 i386-tdep.c:5820 i386-tdep.c:6489 i386-tdep.c:7039 -#: i386-tdep.c:7091 +#: i386-tdep.c:4962 i386-tdep.c:5870 i386-tdep.c:6539 i386-tdep.c:7089 +#: i386-tdep.c:7141 #, possible-c-format msgid "" "Process record ignores the memory change of instruction at address %s\n" @@ -15365,150 +15145,150 @@ #. XXX #. int3 -#: i386-tdep.c:6828 +#: i386-tdep.c:6878 msgid "Process record does not support instruction int3.\n" msgstr "" -#: i386-tdep.c:6845 +#: i386-tdep.c:6895 #, possible-c-format msgid "Process record does not support instruction int 0x%02x.\n" msgstr "" #. XXX #. into -#: i386-tdep.c:6859 +#: i386-tdep.c:6909 msgid "Process record does not support instruction into.\n" msgstr "" #. bound -#: i386-tdep.c:6870 +#: i386-tdep.c:6920 msgid "Process record does not support instruction bound.\n" msgstr "" #. wrmsr -#: i386-tdep.c:6906 +#: i386-tdep.c:6956 msgid "Process record does not support instruction wrmsr.\n" msgstr "" #. rdmsr -#: i386-tdep.c:6913 +#: i386-tdep.c:6963 msgid "Process record does not support instruction rdmsr.\n" msgstr "" -#: i386-tdep.c:6934 +#: i386-tdep.c:6984 msgid "Process record does not support instruction sysenter.\n" msgstr "" #. sysexit -#: i386-tdep.c:6946 +#: i386-tdep.c:6996 msgid "Process record does not support instruction sysexit.\n" msgstr "" -#: i386-tdep.c:6957 +#: i386-tdep.c:7007 msgid "Process record does not support instruction syscall.\n" msgstr "" #. sysret -#: i386-tdep.c:6969 +#: i386-tdep.c:7019 msgid "Process record does not support instruction sysret.\n" msgstr "" #. hlt -#: i386-tdep.c:6983 +#: i386-tdep.c:7033 msgid "Process record does not support instruction hlt.\n" msgstr "" -#: i386-tdep.c:8102 +#: i386-tdep.c:8152 #, possible-c-format msgid "Process record does not support instruction 0x%02x at address %s.\n" msgstr "" -#: i386-tdep.c:8163 +#: i386-tdep.c:8213 #, possible-c-format msgid "" "; instruction is only %d bytes long, need at least %d bytes for the jump" msgstr "" -#: i386-tdep.c:8798 +#: i386-tdep.c:8853 #, possible-c-format msgid "BNDCFGU register invalid, read status %d." msgstr "" -#: i386-tdep.c:8844 +#: i386-tdep.c:8899 msgid "" "bound table examination not supported for 64-bit process with 32-bit GDB" msgstr "" -#: i386-tdep.c:8862 +#: i386-tdep.c:8917 #, possible-c-format msgid "Invalid bounds directory entry at %s." msgstr "" -#: i386-tdep.c:8938 +#: i386-tdep.c:8993 msgid "Intel Memory Protection Extensions not supported on this target.\n" msgstr "" -#: i386-tdep.c:8945 +#: i386-tdep.c:9000 msgid "Address of pointer variable expected.\n" msgstr "" -#: i386-tdep.c:8981 +#: i386-tdep.c:9036 msgid "Intel Memory Protection Extensions not supported on this target." msgstr "" -#: i386-tdep.c:8985 +#: i386-tdep.c:9040 msgid "Pointer value expected." msgstr "" -#: i386-tdep.c:8992 +#: i386-tdep.c:9047 msgid "wrong number of arguments: missing lower and upper bound." msgstr "" -#: i386-tdep.c:8998 +#: i386-tdep.c:9053 msgid "Wrong number of arguments; Missing upper bound." msgstr "" -#: i386-tdep.c:9042 +#: i386-tdep.c:9082 msgid "Set the disassembly flavor." msgstr "" -#: i386-tdep.c:9043 +#: i386-tdep.c:9083 msgid "Show the disassembly flavor." msgstr "" -#: i386-tdep.c:9044 +#: i386-tdep.c:9084 msgid "" "The valid values are \"att\" and \"intel\", and the default value is \"att\"." msgstr "" -#: i386-tdep.c:9053 +#: i386-tdep.c:9093 msgid "Set the convention for returning small structs." msgstr "" -#: i386-tdep.c:9054 +#: i386-tdep.c:9094 msgid "Show the convention for returning small structs." msgstr "" -#: i386-tdep.c:9055 +#: i386-tdep.c:9095 msgid "" "Valid values are \"default\", \"pcc\" and \"reg\", and the default value\n" "is \"default\"." msgstr "" #. Add "mpx" prefix for the set commands. -#: i386-tdep.c:9064 +#: i386-tdep.c:9104 msgid "Set Intel Memory Protection Extensions specific variables." msgstr "" #. allow-unknown #. Add "mpx" prefix for the show commands. -#: i386-tdep.c:9071 +#: i386-tdep.c:9111 msgid "Show Intel Memory Protection Extensions specific variables." msgstr "" #: i387-tdep.c:111 i387-tdep.c:149 i387-tdep.c:297 i387-tdep.c:307 #: i387-tdep.c:309 i387-tdep.c:311 i387-tdep.c:313 i387-tdep.c:315 -#: i387-tdep.c:319 tui/tui-stack.c:331 valprint.c:386 +#: i387-tdep.c:319 tui/tui-stack.c:326 valprint.c:388 msgid "<unavailable>" msgstr "" @@ -15531,11 +15311,11 @@ msgid "invalid i387 regclass" msgstr "" -#: ia64-libunwind-tdep.c:236 +#: ia64-libunwind-tdep.c:229 msgid "Can't get libunwind sp register." msgstr "" -#: ia64-libunwind-tdep.c:523 ia64-libunwind-tdep.c:526 +#: ia64-libunwind-tdep.c:516 ia64-libunwind-tdep.c:519 #, possible-c-format msgid "[GDB failed to load %s: %s]\n" msgstr "" @@ -15584,85 +15364,112 @@ msgid "Argument given to \"disconnect\"." msgstr "" -#: inf-loop.c:90 +#: inf-loop.c:89 msgid "Event type not recognized.\n" msgstr "" -#: inf-ptrace.c:229 +#: inf-ptrace.c:169 msgid "This system does not support attaching to a process" msgstr "" -#: inf-ptrace.c:283 +#: inf-ptrace.c:207 msgid "This system does not support detaching from a process" msgstr "" -#: inf-ptrace.c:401 obsd-nat.c:98 rs6000-nat.c:519 +#: inf-ptrace.c:324 obsd-nat.c:98 rs6000-nat.c:519 #, possible-c-format msgid "Child process unexpectedly missing: %s.\n" msgstr "" -#: inf-ptrace.c:626 +#: inf-ptrace.c:511 #, possible-c-format msgid "\tUsing the running image of %s %s.\n" msgstr "" -#: infcall.c:65 +#: infcall.c:66 #, possible-c-format msgid "Permission to call functions in the program is %s.\n" msgstr "" -#: infcall.c:95 +#: infcall.c:96 #, possible-c-format msgid "Coercion of floats to doubles when calling functions is %s.\n" msgstr "" -#: infcall.c:113 +#: infcall.c:114 #, possible-c-format msgid "" "Unwinding of stack if a signal is received while in a call dummy is %s.\n" msgstr "" -#: infcall.c:139 +#: infcall.c:140 #, possible-c-format msgid "" "Unwind stack if a C++ exception is unhandled while in a call dummy is %s.\n" msgstr "" -#: infcall.c:335 +#: infcall.c:336 msgid "Invalid data type for function to be called." msgstr "" -#: infcall.c:369 infcall.c:794 +#: infcall.c:370 infcall.c:823 #, possible-c-format msgid "'%s' has unknown return type; cast the call to its declared return type" msgstr "" -#: infcall.c:373 +#: infcall.c:374 msgid "" "function has unknown return type; cast the call to its declared return type" msgstr "" -#: infcall.c:757 +#: infcall.c:786 msgid "Cannot call functions in the program: may-call-functions is off." msgstr "" -#: infcall.c:764 +#: infcall.c:793 msgid "May not call functions while looking at trace frames." msgstr "" -#: infcall.c:767 +#: infcall.c:796 msgid "Cannot call functions in reverse mode." msgstr "" -#: infcall.c:781 +#: infcall.c:810 msgid "This target does not support function calls." msgstr "" -#: infcall.c:802 +#: infcall.c:831 msgid "Too few arguments in function call." msgstr "" -#: infcall.c:1218 +#: infcall.c:1064 +#, possible-c-format +msgid "" +"expression cannot be evaluated because the type '%s' is not copy " +"constructible" +msgstr "" + +#: infcall.c:1068 +#, possible-c-format +msgid "" +"expression cannot be evaluated because the type '%s' is not destructible" +msgstr "" + +#: infcall.c:1099 +#, possible-c-format +msgid "" +"expression cannot be evaluated because a copy constructor for the type '%s' " +"could not be found (maybe inlined?)" +msgstr "" + +#: infcall.c:1131 +#, possible-c-format +msgid "" +"expression cannot be evaluated because a destructor for the type '%s' could " +"not be found (maybe inlined?)" +msgstr "" + +#: infcall.c:1341 #, possible-c-format msgid "" "%s\n" @@ -15675,7 +15482,7 @@ #. We could discard the dummy frame here given that the program exited, #. but it will get garbage collected the next time the program is #. run anyway. -#: infcall.c:1246 +#: infcall.c:1369 #, possible-c-format msgid "" "The program being debugged exited while in a function called from GDB.\n" @@ -15683,7 +15490,7 @@ "(%s) will be abandoned." msgstr "" -#: infcall.c:1266 +#: infcall.c:1389 #, possible-c-format msgid "" "The program received a signal in another thread while\n" @@ -15693,7 +15500,7 @@ "When the function is done executing, GDB will silently stop." msgstr "" -#: infcall.c:1274 +#: infcall.c:1397 #, possible-c-format msgid "" "The program stopped in another thread while making a function call from " @@ -15705,7 +15512,7 @@ #. FIXME: Insert a bunch of wrap_here; name can be very #. long if it's a C++ name with arguments and stuff. -#: infcall.c:1307 +#: infcall.c:1430 #, possible-c-format msgid "" "The program being debugged was signaled while in a function called from " @@ -15718,7 +15525,7 @@ #. FIXME: Insert a bunch of wrap_here; name can be very #. long if it's a C++ name with arguments and stuff. -#: infcall.c:1325 +#: infcall.c:1448 #, possible-c-format msgid "" "The program being debugged was signaled while in a function called from " @@ -15730,7 +15537,7 @@ "When the function is done executing, GDB will silently stop." msgstr "" -#: infcall.c:1346 +#: infcall.c:1469 #, possible-c-format msgid "" "The program being debugged entered a std::terminate call, most likely\n" @@ -15750,7 +15557,7 @@ #. someday this will be implemented (it would not be easy). #. FIXME: Insert a bunch of wrap_here; name can be very long if it's #. a C++ name with arguments and stuff. -#: infcall.c:1373 +#: infcall.c:1496 #, possible-c-format msgid "" "The program being debugged stopped while in a function called from GDB.\n" @@ -15759,30 +15566,30 @@ "When the function is done executing, GDB will silently stop." msgstr "" -#: infcall.c:1391 +#: infcall.c:1515 msgid "Set permission to call functions in the program." msgstr "" -#: infcall.c:1392 +#: infcall.c:1516 msgid "Show permission to call functions in the program." msgstr "" -#: infcall.c:1393 +#: infcall.c:1517 msgid "" "When this permission is on, GDB may call functions in the program.\n" "Otherwise, any sort of attempt to call a function in the program\n" "will result in an error." msgstr "" -#: infcall.c:1402 +#: infcall.c:1526 msgid "Set coercion of floats to doubles when calling functions." msgstr "" -#: infcall.c:1403 +#: infcall.c:1527 msgid "Show coercion of floats to doubles when calling functions." msgstr "" -#: infcall.c:1404 +#: infcall.c:1528 msgid "" "Variables of type float should generally be converted to doubles before\n" "calling an unprototyped function, and left alone when calling a prototyped\n" @@ -15793,15 +15600,15 @@ "The default is to perform the conversion." msgstr "" -#: infcall.c:1417 +#: infcall.c:1541 msgid "Set unwinding of stack if a signal is received while in a call dummy." msgstr "" -#: infcall.c:1418 +#: infcall.c:1542 msgid "Show unwinding of stack if a signal is received while in a call dummy." msgstr "" -#: infcall.c:1419 +#: infcall.c:1543 msgid "" "The unwindonsignal lets the user determine what gdb should do if a signal\n" "is received while in a function called from gdb (call dummy). If set, gdb\n" @@ -15810,16 +15617,16 @@ "The default is to stop in the frame where the signal was received." msgstr "" -#: infcall.c:1429 +#: infcall.c:1553 msgid "Set unwinding of stack if std::terminate is called while in call dummy." msgstr "" -#: infcall.c:1430 +#: infcall.c:1554 msgid "" "Show unwinding of stack if std::terminate() is called while in a call dummy." msgstr "" -#: infcall.c:1432 +#: infcall.c:1556 msgid "" "The unwind on terminating exception flag lets the user determine\n" "what gdb should do if a std::terminate() call is made from the\n" @@ -15829,136 +15636,132 @@ "The default is to unwind the frame." msgstr "" -#: infcmd.c:66 infcmd.c:2482 infcmd.c:2869 linux-fork.c:651 record-btrace.c:387 -#: remote-sim.c:894 +#: infcmd.c:67 infcmd.c:2368 infcmd.c:2748 linux-fork.c:649 record-btrace.c:394 +#: remote-sim.c:880 msgid "The program is not being run." msgstr "" -#: infcmd.c:144 +#: infcmd.c:124 #, possible-c-format msgid "Terminal for future runs of program being debugged is \"%s\".\n" msgstr "" -#: infcmd.c:251 +#: infcmd.c:229 msgid "" "You have not set the inferior's current working directory.\n" "The inferior will inherit GDB's cwd if native debugging, or the remote\n" "server's cwd if remote debugging.\n" msgstr "" -#: infcmd.c:257 +#: infcmd.c:235 #, possible-c-format msgid "" "Current working directory that will be used when starting the inferior is " "\"%s\".\n" msgstr "" -#: infcmd.c:362 -msgid "can't handle command-line argument containing whitespace" -msgstr "" - -#: infcmd.c:468 +#: infcmd.c:328 msgid "" "platform-specific solib_create_inferior_hook did not load initial shared " "libraries." msgstr "" -#: infcmd.c:508 +#: infcmd.c:368 msgid "" "The program being debugged has been started already.\n" "Start it from the beginning? " msgstr "" -#: infcmd.c:510 +#: infcmd.c:370 msgid "Program not restarted." msgstr "" -#: infcmd.c:523 +#: infcmd.c:383 msgid "Asynchronous execution not supported on this target." msgstr "" -#: infcmd.c:592 +#: infcmd.c:452 msgid "The target does not support running in non-stop mode." msgstr "" -#: infcmd.c:690 +#: infcmd.c:559 msgid "No symbol table loaded. Use the \"file\" command." msgstr "" -#: infcmd.c:731 +#: infcmd.c:603 msgid "Cannot execute this command without a live selected thread." msgstr "" -#: infcmd.c:742 +#: infcmd.c:614 msgid "Cannot execute this command while looking at trace frames." msgstr "" -#: infcmd.c:750 +#: infcmd.c:622 msgid "Cannot execute this command while the selected thread is running." msgstr "" -#: infcmd.c:833 +#: infcmd.c:705 msgid "`-a' is meaningless in all-stop mode." msgstr "" -#: infcmd.c:836 +#: infcmd.c:708 msgid "Can't resume all threads and specify proceed count simultaneously." msgstr "" -#: infcmd.c:893 +#: infcmd.c:765 msgid "Continuing.\n" msgstr "" -#: infcmd.c:1139 infcmd.c:1772 +#: infcmd.c:1027 infcmd.c:1664 msgid "Cannot find bounds of current function" msgstr "" -#: infcmd.c:1142 +#: infcmd.c:1030 #, possible-c-format msgid "" "Single stepping until exit from function %s,\n" "which has no line number information.\n" msgstr "" -#: infcmd.c:1193 +#: infcmd.c:1081 msgid "starting address" msgstr "" -#: infcmd.c:1198 +#: infcmd.c:1086 msgid "Unreasonable jump request" msgstr "" -#: infcmd.c:1203 +#: infcmd.c:1091 msgid "No source file has been specified." msgstr "" -#: infcmd.c:1212 +#: infcmd.c:1100 #, possible-c-format msgid "Line %d is not in `%s'. Jump anyway? " msgstr "" -#: infcmd.c:1229 +#: infcmd.c:1117 msgid "WARNING!!! Destination is in unmapped overlay! Jump anyway? " msgstr "" -#: infcmd.c:1242 +#: infcmd.c:1130 msgid "Continuing at " msgstr "" -#: infcmd.c:1273 infcmd.c:1358 +#: infcmd.c:1161 infcmd.c:1250 msgid "signal number" msgstr "" -#: infcmd.c:1314 +#: infcmd.c:1206 msgid "Note:\n" msgstr "" -#: infcmd.c:1315 +#: infcmd.c:1207 #, possible-c-format msgid " Thread %s previously stopped with signal %s, %s.\n" msgstr "" -#: infcmd.c:1324 +#: infcmd.c:1216 #, possible-c-format msgid "" "Continuing thread %s (the current thread) with specified signal will\n" @@ -15966,188 +15769,179 @@ "Continue anyway? " msgstr "" -#: infcmd.c:1334 +#: infcmd.c:1226 msgid "Continuing with no signal.\n" msgstr "" -#: infcmd.c:1336 +#: infcmd.c:1228 #, possible-c-format msgid "Continuing with signal %s.\n" msgstr "" -#: infcmd.c:1378 +#: infcmd.c:1270 msgid "Signal handling set to not pass this signal to the program." msgstr "" -#: infcmd.c:1469 +#: infcmd.c:1361 msgid "Execution is not within a known function." msgstr "" -#: infcmd.c:1530 +#: infcmd.c:1422 msgid "a location" msgstr "" -#: infcmd.c:1622 +#: infcmd.c:1514 msgid "<not displayed>" msgstr "" -#: infcmd.c:1706 +#: infcmd.c:1598 msgid "finish_command: function has no target type" msgstr "" -#: infcmd.c:1886 +#: infcmd.c:1778 msgid "The \"finish\" command does not take any arguments." msgstr "" #. Finishing from an inline frame is completely different. We don't #. try to show the "return value" - no way to locate it. -#: infcmd.c:1888 infcmd.c:1902 +#: infcmd.c:1780 infcmd.c:1794 msgid "No selected frame." msgstr "" -#: infcmd.c:1890 +#: infcmd.c:1782 msgid "\"finish\" not meaningful in the outermost frame." msgstr "" -#: infcmd.c:1919 infcmd.c:1944 +#: infcmd.c:1811 infcmd.c:1836 msgid "Run till exit from " msgstr "" -#: infcmd.c:1936 +#: infcmd.c:1828 msgid "Run back to call of " msgstr "" -#: infcmd.c:1940 +#: infcmd.c:1832 #, possible-c-format msgid "" "warning: Function %s does not return normally.\n" "Try to finish anyway? " msgstr "" -#: infcmd.c:1973 +#: infcmd.c:1866 msgid "The program being debugged is not being run.\n" msgstr "" -#: infcmd.c:1987 +#: infcmd.c:1879 msgid "No selected thread." msgstr "" -#: infcmd.c:1992 +#: infcmd.c:1884 msgid "Invalid selected thread." msgstr "" -#: infcmd.c:1994 thread.c:921 +#: infcmd.c:1886 thread.c:922 msgid "Selected thread is running." msgstr "" -#: infcmd.c:2000 +#: infcmd.c:1892 #, possible-c-format msgid "Program stopped at %s.\n" msgstr "" -#: infcmd.c:2003 +#: infcmd.c:1895 msgid "It stopped after being stepped.\n" msgstr "" -#: infcmd.c:2012 +#: infcmd.c:1904 msgid "It stopped at a breakpoint that has since been deleted.\n" msgstr "" -#: infcmd.c:2016 +#: infcmd.c:1908 #, possible-c-format msgid "It stopped at breakpoint %d.\n" msgstr "" -#: infcmd.c:2022 +#: infcmd.c:1914 #, possible-c-format msgid "It stopped with signal %s, %s.\n" msgstr "" -#: infcmd.c:2029 +#: infcmd.c:1921 msgid "Type \"info stack\" or \"info registers\" for more information.\n" msgstr "" -#: infcmd.c:2074 +#: infcmd.c:1966 msgid "environment variable and value" msgstr "" -#: infcmd.c:2098 +#: infcmd.c:1990 msgid "environment variable to set" msgstr "" -#: infcmd.c:2120 +#: infcmd.c:2012 #, possible-c-format msgid "Setting environment variable \"%s\" to null value.\n" msgstr "" #. If there is no argument, delete all environment variables. #. Ask for confirmation if reading from the terminal. -#: infcmd.c:2136 +#: infcmd.c:2028 msgid "Delete all environment variables? " msgstr "" -#: infcmd.c:2326 infcmd.c:2467 infcmd.c:2993 +#: infcmd.c:2212 infcmd.c:2353 infcmd.c:2891 msgid "The program has no registers now." msgstr "" -#: infcmd.c:2350 +#: infcmd.c:2236 msgid "Missing register name" msgstr "" #. Nothing matched. -#: infcmd.c:2421 +#: infcmd.c:2307 #, possible-c-format msgid "Invalid register `%.*s'" msgstr "" -#: infcmd.c:2483 +#: infcmd.c:2369 msgid "Kill the program being debugged? " msgstr "" -#: infcmd.c:2495 +#: infcmd.c:2381 #, possible-c-format msgid "[Inferior %d (%s) killed]\n" msgstr "" -#: infcmd.c:2508 -#, possible-c-format -msgid "In %s,\n" -msgstr "" - -#: infcmd.c:2702 target.c:1989 +#: infcmd.c:2574 target.c:1928 msgid "A program is being debugged already. Kill it? " msgstr "" -#: infcmd.c:2705 +#: infcmd.c:2577 msgid "Not killed." msgstr "" -#: infcmd.c:2720 +#: infcmd.c:2592 msgid "Cannot attach to this target in non-stop mode" msgstr "" -#: infcmd.c:2959 +#: infcmd.c:2857 msgid "-a is meaningless in all-stop mode." msgstr "" -#: infcmd.c:3002 -msgid "\"unset\" must be followed by the name of an unset subcommand.\n" -msgstr "" - -#: infcmd.c:3102 +#: infcmd.c:2992 #, possible-c-format msgid "Printing of return value after `finish' is %s.\n" msgstr "" -#: infcmd.c:3133 +#: infcmd.c:3024 msgid "Set terminal for future runs of program being debugged." msgstr "" -#: infcmd.c:3134 +#: infcmd.c:3025 msgid "Show terminal for future runs of program being debugged." msgstr "" -#: infcmd.c:3135 +#: infcmd.c:3026 msgid "" "Usage: set inferior-tty [TTY]\n" "\n" @@ -16155,39 +15949,39 @@ "is restored." msgstr "" -#: infcmd.c:3149 +#: infcmd.c:3040 msgid "Set argument list to give program being debugged when it is started." msgstr "" -#: infcmd.c:3150 +#: infcmd.c:3041 msgid "Show argument list to give program being debugged when it is started." msgstr "" -#: infcmd.c:3151 +#: infcmd.c:3042 msgid "" "Follow this command with any number of args, to be passed to the program." msgstr "" -#: infcmd.c:3162 +#: infcmd.c:3053 msgid "" "Set the current working directory to be used when the inferior is started.\n" "Changing this setting does not have any effect on inferiors that are\n" "already running." msgstr "" -#: infcmd.c:3166 +#: infcmd.c:3057 msgid "" "Show the current working directory that is used when the inferior is started." msgstr "" -#: infcmd.c:3168 +#: infcmd.c:3059 msgid "" "Use this command to change the current working directory that will be used\n" "when the inferior is started. This setting does not affect GDB's current\n" "working directory." msgstr "" -#: infcmd.c:3179 +#: infcmd.c:3070 msgid "" "The environment to give the program, or one variable's value.\n" "With an argument VAR, prints the value of environment variable VAR to\n" @@ -16195,17 +15989,17 @@ "environment to be given to the program." msgstr "" -#: infcmd.c:3187 +#: infcmd.c:3078 msgid "Complement to certain \"set\" commands." msgstr "" -#: infcmd.c:3190 +#: infcmd.c:3081 msgid "" "Cancel environment variable VAR for the program.\n" "This does not affect the program until the next \"run\" command." msgstr "" -#: infcmd.c:3196 +#: infcmd.c:3087 msgid "" "Set environment variable value to give the program.\n" "Arguments are VAR VALUE where VAR is variable name and VALUE is value.\n" @@ -16213,7 +16007,7 @@ "This does not affect the program until the next \"run\" command." msgstr "" -#: infcmd.c:3204 +#: infcmd.c:3095 msgid "" "Add directory DIR(s) to beginning of search path for object files.\n" "$cwd in the path means the current working directory.\n" @@ -16222,7 +16016,7 @@ "fully linked executable files and separately compiled object files as needed." msgstr "" -#: infcmd.c:3213 +#: infcmd.c:3104 msgid "" "Current search path for finding object files.\n" "$cwd in the path means the current working directory.\n" @@ -16231,11 +16025,11 @@ "fully linked executable files and separately compiled object files as needed." msgstr "" -#: infcmd.c:3224 +#: infcmd.c:3115 msgid "Kill execution of program being debugged." msgstr "" -#: infcmd.c:3227 +#: infcmd.c:3118 msgid "" "Attach to a process or file outside of GDB.\n" "This command attaches to another target, of the same type as your last\n" @@ -16250,21 +16044,21 @@ "to specify the program, and to load its symbol table." msgstr "" -#: infcmd.c:3240 +#: infcmd.c:3131 msgid "" "Detach a process or file previously attached.\n" "If a process, it is no longer traced, and it continues its execution. If\n" "you were debugging a file, the file is closed and gdb no longer accesses it." msgstr "" -#: infcmd.c:3246 +#: infcmd.c:3137 msgid "" "Disconnect from a target.\n" "The target will wait for another debugger to connect. Not available for\n" "all targets." msgstr "" -#: infcmd.c:3251 +#: infcmd.c:3142 msgid "" "Continue program with the specified signal.\n" "Usage: signal SIGNAL\n" @@ -16279,7 +16073,7 @@ "the current thread only." msgstr "" -#: infcmd.c:3264 +#: infcmd.c:3155 msgid "" "Queue a signal to be delivered to the current thread when it is resumed.\n" "Usage: queue-signal SIGNAL\n" @@ -16294,28 +16088,28 @@ "the current thread only." msgstr "" -#: infcmd.c:3278 +#: infcmd.c:3169 msgid "" "Step one instruction exactly.\n" "Usage: stepi [N]\n" "Argument N means step N times (or till program stops for another reason)." msgstr "" -#: infcmd.c:3285 +#: infcmd.c:3176 msgid "" "Step one instruction, but proceed through subroutine calls.\n" "Usage: nexti [N]\n" "Argument N means step N times (or till program stops for another reason)." msgstr "" -#: infcmd.c:3292 +#: infcmd.c:3183 msgid "" "Execute until selected stack frame returns.\n" "Usage: finish\n" "Upon return, the value returned is printed and put in the value history." msgstr "" -#: infcmd.c:3298 +#: infcmd.c:3189 msgid "" "Step program, proceeding through subroutine calls.\n" "Usage: next [N]\n" @@ -16324,14 +16118,14 @@ "the call, in effect treating it as a single source line." msgstr "" -#: infcmd.c:3306 +#: infcmd.c:3197 msgid "" "Step program until it reaches a different source line.\n" "Usage: step [N]\n" "Argument N means step N times (or till program stops for another reason)." msgstr "" -#: infcmd.c:3313 +#: infcmd.c:3204 msgid "" "Execute until past the current line or past a LOCATION.\n" "Execute until the program reaches a source line greater than the current\n" @@ -16339,14 +16133,14 @@ "frame." msgstr "" -#: infcmd.c:3321 +#: infcmd.c:3212 msgid "" "Continue the program up to the given location (same form as args for break " "command).\n" "Execution will also stop upon exit from the current stack frame." msgstr "" -#: infcmd.c:3327 +#: infcmd.c:3218 msgid "" "Continue program being debugged at specified line or address.\n" "Usage: jump LOCATION\n" @@ -16354,7 +16148,7 @@ "for an address to start at." msgstr "" -#: infcmd.c:3335 +#: infcmd.c:3226 msgid "" "Continue program being debugged, after signal or breakpoint.\n" "Usage: continue [N]\n" @@ -16368,20 +16162,20 @@ "Specifying -a and an ignore count simultaneously is an error." msgstr "" -#: infcmd.c:3349 +#: infcmd.c:3240 msgid "Start debugged program.\n" msgstr "" -#: infcmd.c:3355 +#: infcmd.c:3246 msgid "" "Start the debugged program stopping at the beginning of the main procedure.\n" msgstr "" -#: infcmd.c:3360 +#: infcmd.c:3251 msgid "Start the debugged program stopping at the first instruction.\n" msgstr "" -#: infcmd.c:3366 +#: infcmd.c:3257 msgid "" "Interrupt the execution of the debugged program.\n" "If non-stop mode is enabled, interrupt only the current thread,\n" @@ -16389,7 +16183,7 @@ "interrupt all running threads in non-stop mode, use the -a option." msgstr "" -#: infcmd.c:3371 +#: infcmd.c:3262 msgid "" "List of integer registers and their contents, for selected stack frame.\n" "One or more register names as argument means describe the given registers.\n" @@ -16397,7 +16191,7 @@ "in the named register groups." msgstr "" -#: infcmd.c:3379 +#: infcmd.c:3270 msgid "" "List of all registers and their contents, for selected stack frame.\n" "One or more register names as argument means describe the given registers.\n" @@ -16405,174 +16199,179 @@ "in the named register groups." msgstr "" -#: infcmd.c:3387 +#: infcmd.c:3278 msgid "Execution status of the program." msgstr "" -#: infcmd.c:3390 +#: infcmd.c:3281 msgid "Print the status of the floating point unit." msgstr "" -#: infcmd.c:3393 +#: infcmd.c:3284 msgid "Print the status of the vector unit." msgstr "" -#: infcmd.c:3396 +#: infcmd.c:3287 msgid "" "Show additional information about a process.\n" "Specify any process id, or use the program being debugged by default." msgstr "" #. allow-unknown -#: infcmd.c:3402 +#: infcmd.c:3293 msgid "List memory regions mapped by the specified process." msgstr "" -#: infcmd.c:3406 +#: infcmd.c:3297 msgid "List process info from /proc/PID/stat." msgstr "" -#: infcmd.c:3410 +#: infcmd.c:3301 msgid "List process info from /proc/PID/status." msgstr "" -#: infcmd.c:3414 +#: infcmd.c:3305 msgid "List current working directory of the specified process." msgstr "" -#: infcmd.c:3418 +#: infcmd.c:3309 msgid "List command line arguments of the specified process." msgstr "" -#: infcmd.c:3422 +#: infcmd.c:3313 msgid "List absolute filename for executable of the specified process." msgstr "" -#: infcmd.c:3426 +#: infcmd.c:3317 msgid "List files opened by the specified process." msgstr "" -#: infcmd.c:3430 +#: infcmd.c:3321 msgid "List all available info about the specified process." msgstr "" -#: infcmd.c:3435 +#: infcmd.c:3326 msgid "Set whether `finish' prints the return value." msgstr "" -#: infcmd.c:3436 +#: infcmd.c:3327 msgid "Show whether `finish' prints the return value." msgstr "" -#: inferior.c:127 +#: inferior.c:143 #, possible-c-format msgid "[New inferior %d (%s)]\n" msgstr "" -#: inferior.c:131 +#: inferior.c:147 #, possible-c-format msgid "[New inferior %d]\n" msgstr "" -#: inferior.c:240 remote.c:5681 +#: inferior.c:256 remote.c:5759 #, possible-c-format msgid "[Inferior %d (%s) detached]\n" msgstr "" -#: inferior.c:422 +#: inferior.c:421 msgid "<noexec>" msgstr "" -#: inferior.c:424 +#: inferior.c:423 #, possible-c-format msgid "[Switching to inferior %d [%s] (%s)]\n" msgstr "" -#: inferior.c:488 +#: inferior.c:531 msgid "" "\n" "\tis vfork child of inferior " msgstr "" -#: inferior.c:493 +#: inferior.c:536 msgid "" "\n" "\tis vfork parent of inferior " msgstr "" -#: inferior.c:505 +#: inferior.c:548 msgid "Requires argument (inferior id(s) to detach)" msgstr "" -#: inferior.c:515 inferior.c:552 inferior.c:587 inferior.c:640 inferior.c:790 +#: inferior.c:558 inferior.c:595 inferior.c:640 inferior.c:691 inferior.c:877 #, possible-c-format msgid "Inferior ID %d not known." msgstr "" -#: inferior.c:521 inferior.c:558 +#: inferior.c:564 inferior.c:601 #, possible-c-format msgid "Inferior ID %d is not running." msgstr "" -#: inferior.c:528 inferior.c:565 +#: inferior.c:571 inferior.c:608 #, possible-c-format msgid "Inferior ID %d has no threads." msgstr "" -#: inferior.c:542 +#: inferior.c:585 msgid "Requires argument (inferior id(s) to kill)" msgstr "" -#: inferior.c:595 mi/mi-main.c:412 +#: inferior.c:648 mi/mi-main.c:409 msgid "Inferior has no threads." msgstr "" -#: inferior.c:630 +#: inferior.c:681 msgid "Requires an argument (inferior id(s) to remove)" msgstr "" -#: inferior.c:646 +#: inferior.c:697 #, possible-c-format msgid "Can not remove current inferior %d." msgstr "" -#: inferior.c:652 +#: inferior.c:703 #, possible-c-format msgid "Can not remove active inferior %d." msgstr "" -#: inferior.c:712 inferior.c:771 -msgid "No argument to -copies" -msgstr "" - -#: inferior.c:719 -msgid "No argument to -exec" +#: inferior.c:758 +#, possible-c-format +msgid "Added inferior %d on connection %d (%s %s)\n" msgstr "" -#: inferior.c:724 inferior.c:794 mi/mi-main.c:1611 -msgid "Invalid argument" +#: inferior.c:764 +#, possible-c-format +msgid "Added inferior %d on connection %d (%s)\n" msgstr "" -#: inferior.c:734 +#: inferior.c:770 #, possible-c-format msgid "Added inferior %d\n" msgstr "" -#: inferior.c:775 -msgid "Invalid copies number" +#: inferior.c:798 inferior.c:856 +msgid "No argument to -copies" msgstr "" -#: inferior.c:827 -#, possible-c-format -msgid "Added inferior %d.\n" +#: inferior.c:807 +msgid "No argument to -exec" +msgstr "" + +#: inferior.c:812 inferior.c:881 mi/mi-main.c:1593 +msgid "Invalid argument" +msgstr "" + +#: inferior.c:860 +msgid "Invalid copies number" msgstr "" -#: inferior.c:840 +#: inferior.c:925 #, possible-c-format msgid "Printing of inferior events is %s.\n" msgstr "" -#: inferior.c:884 +#: inferior.c:969 msgid "" "Print a list of inferiors being managed.\n" "Usage: info inferiors [ID]...\n" @@ -16580,59 +16379,65 @@ "By default all inferiors are displayed." msgstr "" -#: inferior.c:889 +#: inferior.c:974 msgid "" "Add a new inferior.\n" -"Usage: add-inferior [-copies N] [-exec FILENAME]\n" +"Usage: add-inferior [-copies N] [-exec FILENAME] [-no-connection]\n" "N is the optional number of inferiors to add, default is 1.\n" "FILENAME is the file name of the executable to use\n" -"as main program." +"as main program.\n" +"By default, the new inferior inherits the current inferior's connection.\n" +"If -no-connection is specified, the new inferior begins with\n" +"no target connection yet." msgstr "" -#: inferior.c:897 +#: inferior.c:985 msgid "" "Remove inferior ID (or list of IDs).\n" "Usage: remove-inferiors ID..." msgstr "" -#: inferior.c:901 +#: inferior.c:989 msgid "" "Clone inferior ID.\n" -"Usage: clone-inferior [-copies N] [ID]\n" -"Add N copies of inferior ID. The new inferior has the same\n" +"Usage: clone-inferior [-copies N] [-no-connection] [ID]\n" +"Add N copies of inferior ID. The new inferiors have the same\n" "executable loaded as the copied inferior. If -copies is not specified,\n" "adds 1 copy. If ID is not specified, it is the current inferior\n" -"that is cloned." +"that is cloned.\n" +"By default, the new inferiors inherit the copied inferior's connection.\n" +"If -no-connection is specified, the new inferiors begin with\n" +"no target connection yet." msgstr "" -#: inferior.c:909 +#: inferior.c:1000 msgid "" "Detach from inferior ID (or list of IDS).\n" "Usage; detach inferiors ID..." msgstr "" -#: inferior.c:914 +#: inferior.c:1005 msgid "" "Kill inferior ID (or list of IDs).\n" "Usage: kill inferiors ID..." msgstr "" -#: inferior.c:919 +#: inferior.c:1010 msgid "" "Use this command to switch between inferiors.\n" "Usage: inferior ID\n" "The new inferior ID must be currently known." msgstr "" -#: inferior.c:926 +#: inferior.c:1017 msgid "Set printing of inferior events (such as inferior start and exit)." msgstr "" -#: inferior.c:927 +#: inferior.c:1018 msgid "Show printing of inferior events (such as inferior start and exit)." msgstr "" -#: inferior.h:81 +#: inferior.h:92 #, possible-c-format msgid "Failed to restore inferior state: %s" msgstr "" @@ -16657,70 +16462,70 @@ msgid "Failed to create new terminal session: setsid: %s" msgstr "" -#: inflow.c:960 +#: inflow.c:961 msgid "Print inferior's saved terminal status." msgstr "" -#: infrun.c:138 +#: infrun.c:150 #, possible-c-format msgid "Mode of the step operation is %s.\n" msgstr "" -#: infrun.c:159 +#: infrun.c:171 #, possible-c-format msgid "Displace stepping debugging is %s.\n" msgstr "" -#: infrun.c:167 +#: infrun.c:179 #, possible-c-format msgid "Inferior debugging is %s.\n" msgstr "" -#: infrun.c:181 +#: infrun.c:193 #, possible-c-format msgid "Disabling randomization of debuggee's virtual address space is %s.\n" msgstr "" -#: infrun.c:185 +#: infrun.c:197 msgid "" "Disabling randomization of debuggee's virtual address space is unsupported " "on\n" "this platform.\n" msgstr "" -#: infrun.c:195 +#: infrun.c:207 msgid "" "Disabling randomization of debuggee's virtual address space is unsupported " "on\n" "this platform." msgstr "" -#: infrun.c:212 infrun.c:241 mi/mi-main.c:116 target.c:3851 target.c:3904 -#: target.c:3960 +#: infrun.c:224 infrun.c:253 mi/mi-main.c:116 target.c:3823 target.c:3896 +#: target.c:3952 msgid "Cannot change this setting while the inferior is running." msgstr "" -#: infrun.c:223 +#: infrun.c:235 #, possible-c-format msgid "Controlling the inferior in non-stop mode is %s.\n" msgstr "" -#: infrun.c:266 infrun.c:294 +#: infrun.c:278 infrun.c:306 #, possible-c-format msgid "Observer mode is now %s.\n" msgstr "" -#: infrun.c:274 +#: infrun.c:286 #, possible-c-format msgid "Observer mode is %s.\n" msgstr "" -#: infrun.c:367 +#: infrun.c:379 #, possible-c-format msgid "Stopping for shared library events is %s.\n" msgstr "" -#: infrun.c:398 +#: infrun.c:411 #, possible-c-format msgid "Debugger response to a program call of fork or vfork is \"%s\".\n" msgstr "" @@ -16730,24 +16535,24 @@ #. the parent stays blocked. If we're telling the parent to run #. in the foreground, the user will not be able to ctrl-c to get #. back the terminal, effectively hanging the debug session. -#: infrun.c:431 +#: infrun.c:444 msgid "" "Can not resume the parent process over vfork in the foreground while\n" "holding the child stopped. Try \"set detach-on-fork\" or \"set schedule-" "multiple\".\n" msgstr "" -#: infrun.c:463 +#: infrun.c:476 #, possible-c-format msgid "[Detaching after %s from child %s]\n" msgstr "" -#: infrun.c:551 +#: infrun.c:577 #, possible-c-format msgid "[Attaching after %s %s to child %s]\n" msgstr "" -#: infrun.c:599 +#: infrun.c:633 #, possible-c-format msgid "[Detaching after fork from parent %s]\n" msgstr "" @@ -16758,191 +16563,192 @@ #. forked. In that case, the resume command #. issued is most likely not applicable to the #. child, so just warn, and refuse to resume. -#: infrun.c:789 +#: infrun.c:838 msgid "Not resuming: switched threads before following fork child." msgstr "" -#: infrun.c:969 +#: infrun.c:989 #, possible-c-format msgid "[Detaching vfork parent %s after child exec]\n" msgstr "" -#: infrun.c:975 +#: infrun.c:995 #, possible-c-format msgid "[Detaching vfork parent %s after child exit]\n" msgstr "" -#: infrun.c:1066 +#: infrun.c:1076 #, possible-c-format msgid "Follow exec mode is \"%s\".\n" msgstr "" -#: infrun.c:1148 +#: infrun.c:1158 #, possible-c-format msgid "%s is executing new program: %s\n" msgstr "" -#: infrun.c:1165 +#: infrun.c:1175 #, possible-c-format msgid "" "Could not load symbols for executable %s.\n" "Do you need \"set sysroot\"?" msgstr "" -#: infrun.c:1553 +#: infrun.c:1562 #, possible-c-format msgid "" "Debugger's willingness to use displaced stepping to step over breakpoints is " "%s (currently %s).\n" msgstr "" -#: infrun.c:1558 +#: infrun.c:1567 #, possible-c-format msgid "" "Debugger's willingness to use displaced stepping to step over breakpoints is " "%s.\n" msgstr "" -#: infrun.c:1713 +#: infrun.c:1749 #, possible-c-format msgid "" "Error accessing memory address %s (%s) for displaced-stepping scratch space." msgstr "" -#: infrun.c:1790 +#: infrun.c:1821 #, possible-c-format msgid "disabling displaced stepping: %s" msgstr "" -#: infrun.c:2004 infrun.c:3024 infrun.c:3034 utils.c:439 +#: infrun.c:2031 infrun.c:3130 infrun.c:3140 utils.c:440 msgid "Command aborted." msgstr "" -#: infrun.c:2065 +#: infrun.c:2094 #, possible-c-format msgid "Mode for locking scheduler during execution is \"%s\".\n" msgstr "" -#: infrun.c:2076 +#: infrun.c:2105 #, possible-c-format msgid "Target '%s' cannot support this command." msgstr "" -#: infrun.c:2259 +#: infrun.c:2295 #, possible-c-format msgid "Couldn't deliver signal %s to %s." msgstr "" -#: infrun.c:3499 +#: infrun.c:2905 +#, possible-c-format +msgid "Connection %d (%s) does not support multi-target resumption." +msgstr "" + +#: infrun.c:3693 msgid "Program exited while detaching" msgstr "" -#: infrun.c:3802 +#: infrun.c:4010 msgid "completed.\n" msgstr "" -#: infrun.c:4812 +#: infrun.c:5212 #, possible-c-format msgid "unhandled stop_soon: %d" msgstr "" -#: infrun.c:4879 -msgid "Cannot fill $_exitsignal with the correct signal number.\n" -msgstr "" - -#: infrun.c:7786 +#: infrun.c:8104 msgid "Unknown value." msgstr "" -#: infrun.c:7841 +#: infrun.c:8158 msgid "" "Cannot remove breakpoints because program is no longer writable.\n" "Further execution is probably impossible.\n" msgstr "" -#: infrun.c:7994 linux-fork.c:354 linux-fork.c:387 +#: infrun.c:8317 linux-fork.c:352 linux-fork.c:385 #, possible-c-format msgid "[Switching to %s]\n" msgstr "" -#: infrun.c:8007 +#: infrun.c:8330 msgid "No unwaited-for children left.\n" msgstr "" -#: infrun.c:8191 +#: infrun.c:8514 msgid "Signal Stop\tPrint\tPass to program\tDescription\n" msgstr "" -#: infrun.c:8224 +#: infrun.c:8547 msgid "signal to handle" msgstr "" #. Not a number and not a recognized flag word => complain. -#: infrun.c:8323 +#: infrun.c:8646 #, possible-c-format msgid "Unrecognized or ambiguous flag word: \"%s\"." msgstr "" -#: infrun.c:8338 +#: infrun.c:8661 #, possible-c-format msgid "" "%s is used by the debugger.\n" "Are you sure you want to change it? " msgstr "" -#: infrun.c:8345 +#: infrun.c:8668 msgid "Not confirmed, unchanged.\n" msgstr "" -#: infrun.c:8410 +#: infrun.c:8733 msgid "" "Only signals 1-15 are valid as numeric signals.\n" "Use \"info signals\" for a list of symbolic signals." msgstr "" -#: infrun.c:8453 +#: infrun.c:8776 msgid "" "\n" "Use the \"handle\" command to change these tables.\n" msgstr "" -#: infrun.c:8487 +#: infrun.c:8810 msgid "Unable to read siginfo" msgstr "" -#: infrun.c:8510 +#: infrun.c:8833 msgid "Unable to write siginfo" msgstr "" -#: infrun.c:8839 +#: infrun.c:9162 msgid "Target does not support this operation." msgstr "" -#: infrun.c:8849 +#: infrun.c:9172 msgid "Forward.\n" msgstr "" -#: infrun.c:8852 +#: infrun.c:9175 msgid "Reverse.\n" msgstr "" -#: infrun.c:8856 +#: infrun.c:9179 #, possible-c-format msgid "bogus execution_direction value: %d" msgstr "" -#: infrun.c:8865 +#: infrun.c:9188 #, possible-c-format msgid "Resuming the execution of threads of all processes is %s.\n" msgstr "" -#: infrun.c:8896 +#: infrun.c:9287 msgid "" "What debugger does when program gets various signals.\n" "Specify a signal as argument to print info on that signal only." msgstr "" -#: infrun.c:8901 +#: infrun.c:9292 msgid "" "Specify how to handle signals.\n" "Usage: handle SIGNAL [ACTIONS]\n" @@ -16969,46 +16775,46 @@ "all signals cumulatively specified." msgstr "" -#: infrun.c:8929 +#: infrun.c:9320 msgid "" "There is no `stop' command, but you can set a hook on `stop'.\n" "This allows you to set a list of commands to be run each time execution\n" "of the program stops." msgstr "" -#: infrun.c:8934 +#: infrun.c:9325 msgid "Set inferior debugging." msgstr "" -#: infrun.c:8935 +#: infrun.c:9326 msgid "Show inferior debugging." msgstr "" -#: infrun.c:8936 +#: infrun.c:9327 msgid "When non-zero, inferior specific debugging is enabled." msgstr "" -#: infrun.c:8943 +#: infrun.c:9334 msgid "Set displaced stepping debugging." msgstr "" -#: infrun.c:8944 +#: infrun.c:9335 msgid "Show displaced stepping debugging." msgstr "" -#: infrun.c:8945 +#: infrun.c:9336 msgid "When non-zero, displaced stepping specific debugging is enabled." msgstr "" -#: infrun.c:8952 +#: infrun.c:9343 msgid "Set whether gdb controls the inferior in non-stop mode." msgstr "" -#: infrun.c:8953 +#: infrun.c:9344 msgid "Show whether gdb controls the inferior in non-stop mode." msgstr "" -#: infrun.c:8954 +#: infrun.c:9345 msgid "" "When debugging a multi-threaded program and this setting is\n" "off (the default, also called all-stop mode), when one thread stops\n" @@ -17023,30 +16829,30 @@ "leave it stopped or free to run as needed." msgstr "" -#: infrun.c:9032 +#: infrun.c:9423 msgid "Set stopping for shared library events." msgstr "" -#: infrun.c:9033 +#: infrun.c:9424 msgid "Show stopping for shared library events." msgstr "" -#: infrun.c:9034 +#: infrun.c:9425 msgid "" "If nonzero, gdb will give control to the user when the dynamic linker\n" "notifies gdb of shared library events. The most common event of interest\n" "to the user would be loading/unloading of a new library." msgstr "" -#: infrun.c:9044 +#: infrun.c:9435 msgid "Set debugger response to a program call of fork or vfork." msgstr "" -#: infrun.c:9045 +#: infrun.c:9436 msgid "Show debugger response to a program call of fork or vfork." msgstr "" -#: infrun.c:9046 +#: infrun.c:9437 msgid "" "A fork or vfork creates a new process. follow-fork-mode can be:\n" " parent - the original process is debugged after a fork\n" @@ -17055,15 +16861,15 @@ "By default, the debugger will follow the parent process." msgstr "" -#: infrun.c:9058 +#: infrun.c:9449 msgid "Set debugger response to a program call of exec." msgstr "" -#: infrun.c:9059 +#: infrun.c:9450 msgid "Show debugger response to a program call of exec." msgstr "" -#: infrun.c:9060 +#: infrun.c:9451 msgid "" "An exec call replaces the program image of a process.\n" "\n" @@ -17082,15 +16888,15 @@ "By default, the debugger will use the same inferior." msgstr "" -#: infrun.c:9081 +#: infrun.c:9472 msgid "Set mode for locking scheduler during execution." msgstr "" -#: infrun.c:9082 +#: infrun.c:9473 msgid "Show mode for locking scheduler during execution." msgstr "" -#: infrun.c:9083 +#: infrun.c:9474 msgid "" "off == no locking (threads may preempt at any time)\n" "on == full locking (no thread except the current thread may run)\n" @@ -17103,15 +16909,15 @@ "execution." msgstr "" -#: infrun.c:9095 +#: infrun.c:9486 msgid "Set mode for resuming threads of all processes." msgstr "" -#: infrun.c:9096 +#: infrun.c:9487 msgid "Show mode for resuming threads of all processes." msgstr "" -#: infrun.c:9097 +#: infrun.c:9488 msgid "" "When on, execution commands (such as 'continue' or 'next') resume all\n" "threads of all processes. When off (which is the default), execution\n" @@ -17120,30 +16926,30 @@ "mode (see help set scheduler-locking)." msgstr "" -#: infrun.c:9107 +#: infrun.c:9498 msgid "Set mode of the step operation." msgstr "" -#: infrun.c:9108 +#: infrun.c:9499 msgid "Show mode of the step operation." msgstr "" -#: infrun.c:9109 +#: infrun.c:9500 msgid "" "When set, doing a step over a function without debug line information\n" "will stop at the first instruction of that function. Otherwise, the\n" "function is skipped and the step command stops at a different source line." msgstr "" -#: infrun.c:9118 +#: infrun.c:9509 msgid "Set debugger's willingness to use displaced stepping." msgstr "" -#: infrun.c:9119 +#: infrun.c:9510 msgid "Show debugger's willingness to use displaced stepping." msgstr "" -#: infrun.c:9120 +#: infrun.c:9511 msgid "" "If on, gdb will use displaced stepping to step over breakpoints if it is\n" "supported by the target architecture. If off, gdb will not use displaced\n" @@ -17155,57 +16961,57 @@ "use it in all-stop mode (see help set non-stop)." msgstr "" -#: infrun.c:9132 +#: infrun.c:9523 msgid "" "Set direction of execution.\n" "Options are 'forward' or 'reverse'." msgstr "" -#: infrun.c:9134 +#: infrun.c:9525 msgid "Show direction of execution (forward/reverse)." msgstr "" -#: infrun.c:9135 +#: infrun.c:9526 msgid "Tells gdb whether to execute forward or backward." msgstr "" #. Set/show detach-on-fork: user-settable mode. -#: infrun.c:9141 +#: infrun.c:9532 msgid "Set whether gdb will detach the child of a fork." msgstr "" -#: infrun.c:9142 +#: infrun.c:9533 msgid "Show whether gdb will detach the child of a fork." msgstr "" -#: infrun.c:9143 +#: infrun.c:9534 msgid "Tells gdb whether to detach the child of a fork." msgstr "" -#: infrun.c:9150 +#: infrun.c:9541 msgid "Set disabling of debuggee's virtual address space randomization." msgstr "" -#: infrun.c:9151 +#: infrun.c:9542 msgid "Show disabling of debuggee's virtual address space randomization." msgstr "" -#: infrun.c:9152 +#: infrun.c:9543 msgid "" "When this mode is on (which is the default), randomization of the virtual\n" "address space is disabled. Standalone programs run with the randomization\n" "enabled by default on some platforms." msgstr "" -#: infrun.c:9176 +#: infrun.c:9567 msgid "Set whether gdb controls the inferior in observer mode." msgstr "" -#: infrun.c:9177 +#: infrun.c:9568 msgid "Show whether gdb controls the inferior in observer mode." msgstr "" -#: infrun.c:9178 +#: infrun.c:9569 msgid "" "In observer mode, GDB can get data from the inferior, but not\n" "affect its execution. Registers and memory may not be changed,\n" @@ -17241,7 +17047,7 @@ msgid "error in command: \"%s\"." msgstr "" -#: interps.c:448 +#: interps.c:449 msgid "" "Execute a command in an interpreter.\n" "Usage: interpreter-exec INTERPRETER COMMAND...\n" @@ -17257,7 +17063,7 @@ msgid "breakpoint_from_pc: invalid breakpoint address 0x%lx" msgstr "" -#: jit.c:70 +#: jit.c:69 #, possible-c-format msgid "JIT debugging is %s.\n" msgstr "" @@ -17292,69 +17098,69 @@ msgid "No JIT reader loaded." msgstr "" -#: jit.c:369 +#: jit.c:309 msgid "Unable to read JIT descriptor from remote memory\n" msgstr "" -#: jit.c:414 +#: jit.c:354 msgid "Unable to read JIT code entry from remote memory!" msgstr "" -#: jit.c:888 +#: jit.c:781 msgid "Error opening JITed symbol file, ignoring it.\n" msgstr "" -#: jit.c:896 +#: jit.c:789 msgid "JITed symbol file is not an object file, ignoring it.\n" msgstr "" -#: jit.c:904 +#: jit.c:797 #, possible-c-format msgid "" "JITed object file architecture %s is not compatible with target architecture " "%s." msgstr "" -#: jit.c:1097 +#: jit.c:979 #, possible-c-format msgid "Could not recognize DWARF regnum %d" msgstr "" -#: jit.c:1190 +#: jit.c:1072 msgid "Successfully unwound frame using JIT reader.\n" msgstr "" -#: jit.c:1195 +#: jit.c:1077 msgid "Could not unwind frame using JIT reader.\n" msgstr "" -#: jit.c:1323 +#: jit.c:1207 #, possible-c-format msgid "Unsupported JIT protocol version %ld in descriptor (expected 1)\n" msgstr "" -#: jit.c:1415 +#: jit.c:1303 #, possible-c-format msgid "Unable to find JITed code entry at address: %s\n" msgstr "" -#: jit.c:1423 +#: jit.c:1313 msgid "Unknown action_flag value in JIT descriptor!" msgstr "" -#: jit.c:1472 +#: jit.c:1339 msgid "Set JIT debugging." msgstr "" -#: jit.c:1473 +#: jit.c:1340 msgid "Show JIT debugging." msgstr "" -#: jit.c:1474 +#: jit.c:1341 msgid "When non-zero, JIT debugging is enabled." msgstr "" -#: jit.c:1490 +#: jit.c:1355 msgid "" "Load FILE as debug info reader and unwinder for JIT compiled code.\n" "Usage: jit-reader-load FILE\n" @@ -17362,7 +17168,7 @@ "JIT compiled code. The file is loaded from " msgstr "" -#: jit.c:1499 +#: jit.c:1364 msgid "" "Unload the currently loaded JIT debug info reader.\n" "Usage: jit-reader-unload\n" @@ -17370,69 +17176,69 @@ "Do \"help jit-reader-load\" for info on loading debug info readers." msgstr "" -#: language.c:117 +#: language.c:84 msgid "Warning: the current language does not match this frame." msgstr "" -#: language.c:132 +#: language.c:99 #, possible-c-format msgid "The current source language is \"auto; currently %s\".\n" msgstr "" -#: language.c:137 +#: language.c:104 #, possible-c-format msgid "The current source language is \"%s\".\n" msgstr "" -#: language.c:238 +#: language.c:205 #, possible-c-format msgid "Range checking is \"auto; currently %s\".\n" msgstr "" -#: language.c:242 +#: language.c:209 #, possible-c-format msgid "Range checking is \"%s\".\n" msgstr "" -#: language.c:246 language.c:282 +#: language.c:213 language.c:249 msgid "the current range check setting does not match the language.\n" msgstr "" -#: language.c:279 +#: language.c:246 #, possible-c-format msgid "Unrecognized range check setting: \"%s\"" msgstr "" -#: language.c:310 +#: language.c:277 #, possible-c-format msgid "Case sensitivity in name search is \"auto; currently %s\".\n" msgstr "" -#: language.c:316 +#: language.c:283 #, possible-c-format msgid "Case sensitivity in name search is \"%s\".\n" msgstr "" -#: language.c:320 language.c:353 +#: language.c:287 language.c:320 msgid "the current case sensitivity setting does not match the language.\n" msgstr "" -#: language.c:396 +#: language.c:363 #, possible-c-format msgid "Current language: %s\n" msgstr "" -#: language.c:401 +#: language.c:368 #, possible-c-format msgid "Range checking: %s\n" msgstr "" -#: language.c:403 +#: language.c:370 #, possible-c-format msgid "Case sensitivity: %s\n" msgstr "" -#: language.c:560 +#: language.c:516 #, c-format msgid "" "Set the current source language.\n" @@ -17441,59 +17247,91 @@ "local or auto Automatic setting based on source file" msgstr "" -#: language.c:586 +#: language.c:542 msgid "Show the current source language." msgstr "" -#: language.c:762 -msgid "internal error - unimplemented function unk_lang_emit_char called." +#: language.c:826 +msgid "unimplemented unknown_language::print_type called" +msgstr "" + +#: language.c:842 +msgid "unimplemented unknown_language::value_print called" +msgstr "" + +#: language.c:851 +msgid "unimplemented unknown_language::value_print_inner called" +msgstr "" + +#: language.c:867 +msgid "unimplemented unknown_language::emitchar called" +msgstr "" + +#: language.c:875 +msgid "unimplemented unknown_language::printchar called" +msgstr "" + +#: language.c:885 +msgid "unimplemented unknown_language::printstr called" +msgstr "" + +#: language.c:893 +msgid "unimplemented unknown_language::print_typedef called" +msgstr "" + +#: language.c:952 +msgid "unimplemented auto_language::print_type called" +msgstr "" + +#: language.c:968 +msgid "unimplemented auto_language::value_print called" msgstr "" -#: language.c:769 -msgid "internal error - unimplemented function unk_lang_printchar called." +#: language.c:977 +msgid "unimplemented auto_language::value_print_inner called" msgstr "" -#: language.c:779 -msgid "internal error - unimplemented function unk_lang_printstr called." +#: language.c:993 +msgid "unimplemented auto_language::emitchar called" msgstr "" -#: language.c:788 -msgid "internal error - unimplemented function unk_lang_print_type called." +#: language.c:1001 +msgid "unimplemented auto_language::printchar called" msgstr "" -#: language.c:799 -msgid "internal error - unimplemented function unk_lang_val_print called." +#: language.c:1011 +msgid "unimplemented auto_language::printstr called" msgstr "" -#: language.c:807 -msgid "internal error - unimplemented function unk_lang_value_print called." +#: language.c:1019 +msgid "unimplemented auto_language::print_typedef called" msgstr "" -#: language.c:1152 +#: language.c:1246 msgid "Set the status of the type/range checker." msgstr "" -#: language.c:1158 +#: language.c:1252 msgid "Show the status of the type/range checker." msgstr "" -#: language.c:1165 +#: language.c:1259 msgid "Set range checking (on/warn/off/auto)." msgstr "" -#: language.c:1166 +#: language.c:1260 msgid "Show range checking (on/warn/off/auto)." msgstr "" -#: language.c:1172 +#: language.c:1266 msgid "Set case sensitivity in name search (on/off/auto)." msgstr "" -#: language.c:1173 +#: language.c:1267 msgid "Show case sensitivity in name search (on/off/auto)." msgstr "" -#: language.c:1174 +#: language.c:1268 msgid "For Fortran the default is off; for other languages the default is on." msgstr "" @@ -17501,100 +17339,105 @@ msgid "unmatched quote" msgstr "" -#: linespec.c:1550 +#: linespec.c:1548 msgid "" "[0] cancel\n" "[1] all\n" msgstr "" -#: linespec.c:1570 +#: linespec.c:1568 msgid "canceled" msgstr "" -#: linespec.c:1585 +#: linespec.c:1583 #, possible-c-format msgid "No choice number %d.\n" msgstr "" -#: linespec.c:1597 +#: linespec.c:1595 #, possible-c-format msgid "duplicate request for %d ignored.\n" msgstr "" -#: linespec.c:1633 +#: linespec.c:1631 #, possible-c-format msgid "" "Undefined convenience variable or function \"%s\" not defined in \"%s\"." msgstr "" -#: linespec.c:1637 +#: linespec.c:1635 #, possible-c-format msgid "Undefined convenience variable or function \"%s\" not defined." msgstr "" -#: linespec.c:1644 +#: linespec.c:1642 #, possible-c-format msgid "Function \"%s\" not defined in \"%s\"." msgstr "" -#: linespec.c:1648 +#: linespec.c:1646 #, possible-c-format msgid "Function \"%s\" not defined." msgstr "" -#: linespec.c:1671 +#: linespec.c:1669 #, possible-c-format msgid "malformed linespec error: unexpected %s, \"%s\"" msgstr "" -#: linespec.c:1676 +#: linespec.c:1674 #, possible-c-format msgid "malformed linespec error: unexpected %s" msgstr "" -#: linespec.c:1687 +#: linespec.c:1685 #, possible-c-format msgid "No label \"%s\" defined in function \"%s\"." msgstr "" -#: linespec.c:1691 +#: linespec.c:1689 #, possible-c-format msgid "No label \"%s\" defined in current function." msgstr "" -#: linespec.c:1700 +#: linespec.c:1698 #, possible-c-format msgid "No source file named %s." msgstr "" -#: linespec.c:1734 +#: linespec.c:1732 #, possible-c-format msgid "malformed line offset: \"%s\"" msgstr "" -#: linespec.c:2207 +#: linespec.c:2205 #, possible-c-format msgid "No line %d in the current file." msgstr "" -#: linespec.c:3291 linespec.c:3314 +#: linespec.c:3234 +#, possible-c-format +msgid "Location %s not available" +msgstr "" + +#: linespec.c:3293 linespec.c:3316 msgid "Empty line specification." msgstr "" -#: linespec.c:3303 linespec.c:3326 +#: linespec.c:3305 linespec.c:3328 #, possible-c-format msgid "Junk at end of line specification: %s" msgstr "" #. The error message doesn't really matter, because this case #. should only hit during breakpoint reset. -#: linespec.c:3363 +#: linespec.c:3365 msgid "cannot evaluate expressions while program space is in startup" msgstr "" #. Throw an NOT_FOUND_ERROR. This will be caught by the caller #. and other attempts to locate the symbol will be made. -#: linespec.c:3718 +#: linespec.c:3719 msgid "see caller, this text doesn't matter" msgstr "" @@ -17606,134 +17449,134 @@ msgid "Convenience variables used in line specs must have integer values." msgstr "" -#: linux-fork.c:374 linux-fork.c:550 +#: linux-fork.c:372 linux-fork.c:548 #, possible-c-format msgid "Unable to detach %s" msgstr "" -#: linux-fork.c:438 +#: linux-fork.c:436 #, possible-c-format msgid "Couldn't restore checkpoint state in %s: %s" msgstr "" -#: linux-fork.c:497 +#: linux-fork.c:495 msgid "Requires argument (checkpoint id to delete)" msgstr "" -#: linux-fork.c:501 linux-fork.c:543 +#: linux-fork.c:499 linux-fork.c:541 #, possible-c-format msgid "No such checkpoint id, %s" msgstr "" -#: linux-fork.c:504 +#: linux-fork.c:502 msgid "Please switch to another checkpoint before deleting the current one" msgstr "" -#: linux-fork.c:508 +#: linux-fork.c:506 #, possible-c-format msgid "Unable to kill pid %s" msgstr "" -#: linux-fork.c:515 +#: linux-fork.c:513 #, possible-c-format msgid "Killed %s\n" msgstr "" -#: linux-fork.c:528 +#: linux-fork.c:526 #, possible-c-format msgid "Unable to wait pid %s" msgstr "" -#: linux-fork.c:539 +#: linux-fork.c:537 msgid "Requires argument (checkpoint id to detach)" msgstr "" -#: linux-fork.c:546 +#: linux-fork.c:544 msgid "Please switch to another checkpoint before detaching the current one" msgstr "" -#: linux-fork.c:553 +#: linux-fork.c:551 #, possible-c-format msgid "Detached %s\n" msgstr "" -#: linux-fork.c:584 +#: linux-fork.c:582 msgid " (main process)" msgstr "" -#: linux-fork.c:585 +#: linux-fork.c:583 msgid " at " msgstr "" -#: linux-fork.c:590 +#: linux-fork.c:588 #, possible-c-format msgid ", file %s" msgstr "" -#: linux-fork.c:593 +#: linux-fork.c:591 #, possible-c-format msgid ", line %d" msgstr "" -#: linux-fork.c:608 +#: linux-fork.c:606 #, possible-c-format msgid "No checkpoint number %d.\n" msgstr "" -#: linux-fork.c:610 +#: linux-fork.c:608 msgid "No checkpoints.\n" msgstr "" -#: linux-fork.c:656 +#: linux-fork.c:654 msgid "checkpoint: can't checkpoint multiple threads." msgstr "" -#: linux-fork.c:666 +#: linux-fork.c:664 msgid "checkpoint: can't find fork function in inferior." msgstr "" #. Probably can't happen. -#: linux-fork.c:680 +#: linux-fork.c:678 msgid "checkpoint: call_function_by_hand returned null." msgstr "" -#: linux-fork.c:691 +#: linux-fork.c:689 #, possible-c-format msgid "checkpoint %d: fork returned pid %ld.\n" msgstr "" -#: linux-fork.c:698 +#: linux-fork.c:696 #, possible-c-format msgid " gdb says parent = %ld.\n" msgstr "" -#: linux-fork.c:704 +#: linux-fork.c:702 msgid "Failed to find new fork" msgstr "" -#: linux-fork.c:734 +#: linux-fork.c:732 #, possible-c-format msgid "Switching to %s\n" msgstr "" -#: linux-fork.c:747 +#: linux-fork.c:745 msgid "Requires argument (checkpoint id to restart)" msgstr "" -#: linux-fork.c:750 +#: linux-fork.c:748 #, possible-c-format msgid "Not found: checkpoint id %s" msgstr "" #. Checkpoint command: create a fork of the inferior process #. and set it aside for later debugging. -#: linux-fork.c:761 +#: linux-fork.c:760 msgid "Fork a duplicate process (experimental)." msgstr "" #. Restart command: restore the context of a specified checkpoint #. process. -#: linux-fork.c:767 +#: linux-fork.c:766 msgid "" "Restore program context from a checkpoint.\n" "Usage: restart N\n" @@ -17742,89 +17585,114 @@ #. Delete checkpoint command: kill the process and remove it from #. the fork list. -#: linux-fork.c:775 +#: linux-fork.c:774 msgid "Delete a checkpoint (experimental)." msgstr "" #. Detach checkpoint command: release the process to run independently, #. and remove it from the fork list. -#: linux-fork.c:782 +#: linux-fork.c:781 msgid "Detach from a checkpoint (experimental)." msgstr "" -#: linux-fork.c:790 +#: linux-fork.c:789 msgid "IDs of currently known checkpoints." msgstr "" -#: linux-nat.c:197 +#: linux-nat.c:198 #, possible-c-format msgid "Debugging of GNU/Linux lwp module is %s.\n" msgstr "" -#: linux-nat.c:496 +#: linux-nat.c:514 msgid "Couldn't do single step" msgstr "" -#: linux-nat.c:498 +#: linux-nat.c:516 msgid "Couldn't wait vfork process" msgstr "" -#: linux-nat.c:1221 +#: linux-nat.c:1146 +#, possible-c-format +msgid "Cannot attach to lwp %d: %s" +msgstr "" + +#: linux-nat.c:1227 msgid "Unable to attach: program exited normally." msgstr "" -#: linux-nat.c:1223 +#: linux-nat.c:1229 #, possible-c-format msgid "Unable to attach: program exited with code %d." msgstr "" -#: linux-nat.c:1234 +#: linux-nat.c:1240 #, possible-c-format msgid "Unable to attach: program terminated with signal %s, %s." msgstr "" -#: linux-nat.c:1241 +#: linux-nat.c:1247 #, possible-c-format msgid "unexpected status %d for PID %ld" msgstr "" -#: linux-nat.c:1958 +#: linux-nat.c:1419 +#, possible-c-format +msgid "Couldn't reap LWP %d while detaching: %s" +msgstr "" + +#: linux-nat.c:1424 +#, possible-c-format +msgid "Reaping LWP %d while detaching returned unexpected status 0x%x" +msgstr "" + +#: linux-nat.c:1431 +#, possible-c-format +msgid "Can't detach %s: %s" +msgstr "" + +#: linux-nat.c:1918 msgid "waiting for new child" msgstr "" -#: linux-nat.c:1961 +#: linux-nat.c:1921 #, possible-c-format msgid "wait returned unexpected PID %d" msgstr "" -#: linux-nat.c:1964 +#: linux-nat.c:1924 #, possible-c-format msgid "wait returned unexpected status 0x%x" msgstr "" -#: linux-nat.c:4023 linux-nat.c:4036 +#: linux-nat.c:2066 +#, possible-c-format +msgid "unknown ptrace event %d" +msgstr "" + +#: linux-nat.c:3870 linux-nat.c:3883 #, possible-c-format msgid "Could not parse signal set: %s" msgstr "" -#: linux-nat.c:4068 +#: linux-nat.c:3915 #, possible-c-format msgid "Could not open %s" msgstr "" -#: linux-nat.c:4542 +#: linux-nat.c:4382 msgid "Set debugging of GNU/Linux lwp module." msgstr "" -#: linux-nat.c:4543 +#: linux-nat.c:4383 msgid "Show debugging of GNU/Linux lwp module." msgstr "" -#: linux-nat.c:4551 +#: linux-nat.c:4391 msgid "Set debugging of GNU/Linux namespaces module." msgstr "" -#: linux-nat.c:4552 +#: linux-nat.c:4392 msgid "Show debugging of GNU/Linux namespaces module." msgstr "" @@ -17894,265 +17762,269 @@ msgid "Could not compile regex to match '<file> (deleted)'" msgstr "" -#: linux-tdep.c:765 +#: linux-tdep.c:778 msgid "Can't determine the current process's PID: you must name one." msgstr "" -#: linux-tdep.c:772 +#: linux-tdep.c:785 #, possible-c-format msgid "Too many parameters: %s" msgstr "" -#: linux-tdep.c:774 +#: linux-tdep.c:787 #, possible-c-format msgid "process %ld\n" msgstr "" -#: linux-tdep.c:795 linux-tdep.c:877 linux-tdep.c:887 linux-tdep.c:1023 -#: linux-tdep.c:2285 nat/linux-procfs.c:40 nat/linux-procfs.c:137 -#: sparc64-tdep.c:337 +#: linux-tdep.c:808 linux-tdep.c:890 linux-tdep.c:900 linux-tdep.c:1036 +#: linux-tdep.c:2387 nat/linux-procfs.c:40 nat/linux-procfs.c:137 +#: sparc64-tdep.c:329 #, possible-c-format msgid "unable to open /proc file '%s'" msgstr "" -#: linux-tdep.c:805 linux-tdep.c:815 +#: linux-tdep.c:818 linux-tdep.c:828 #, possible-c-format msgid "unable to read link '%s'" msgstr "" -#: linux-tdep.c:898 +#: linux-tdep.c:911 #, possible-c-format msgid "Process: %s\n" msgstr "" -#: linux-tdep.c:917 +#: linux-tdep.c:930 #, possible-c-format msgid "State: %c\n" msgstr "" -#: linux-tdep.c:920 +#: linux-tdep.c:933 #, possible-c-format msgid "Parent process: %s\n" msgstr "" -#: linux-tdep.c:923 +#: linux-tdep.c:936 #, possible-c-format msgid "Process group: %s\n" msgstr "" -#: linux-tdep.c:926 +#: linux-tdep.c:939 #, possible-c-format msgid "Session id: %s\n" msgstr "" -#: linux-tdep.c:929 +#: linux-tdep.c:942 #, possible-c-format msgid "TTY: %s\n" msgstr "" -#: linux-tdep.c:932 +#: linux-tdep.c:945 #, possible-c-format msgid "TTY owner process group: %s\n" msgstr "" -#: linux-tdep.c:936 +#: linux-tdep.c:949 #, possible-c-format msgid "Flags: %s\n" msgstr "" -#: linux-tdep.c:939 +#: linux-tdep.c:952 #, possible-c-format msgid "Minor faults (no memory page): %s\n" msgstr "" -#: linux-tdep.c:942 +#: linux-tdep.c:955 #, possible-c-format msgid "Minor faults, children: %s\n" msgstr "" -#: linux-tdep.c:945 +#: linux-tdep.c:958 #, possible-c-format msgid "Major faults (memory page faults): %s\n" msgstr "" -#: linux-tdep.c:948 +#: linux-tdep.c:961 #, possible-c-format msgid "Major faults, children: %s\n" msgstr "" -#: linux-tdep.c:951 +#: linux-tdep.c:964 #, possible-c-format msgid "utime: %s\n" msgstr "" -#: linux-tdep.c:954 +#: linux-tdep.c:967 #, possible-c-format msgid "stime: %s\n" msgstr "" -#: linux-tdep.c:957 +#: linux-tdep.c:970 #, possible-c-format msgid "utime, children: %s\n" msgstr "" -#: linux-tdep.c:960 +#: linux-tdep.c:973 #, possible-c-format msgid "stime, children: %s\n" msgstr "" -#: linux-tdep.c:963 +#: linux-tdep.c:976 #, possible-c-format msgid "jiffies remaining in current time slice: %s\n" msgstr "" -#: linux-tdep.c:967 +#: linux-tdep.c:980 #, possible-c-format msgid "'nice' value: %s\n" msgstr "" -#: linux-tdep.c:970 +#: linux-tdep.c:983 #, possible-c-format msgid "jiffies until next timeout: %s\n" msgstr "" -#: linux-tdep.c:973 +#: linux-tdep.c:986 #, possible-c-format msgid "jiffies until next SIGALRM: %s\n" msgstr "" -#: linux-tdep.c:976 +#: linux-tdep.c:989 #, possible-c-format msgid "start time (jiffies since system boot): %s\n" msgstr "" -#: linux-tdep.c:980 +#: linux-tdep.c:993 #, possible-c-format msgid "Virtual memory size: %s\n" msgstr "" -#: linux-tdep.c:983 +#: linux-tdep.c:996 #, possible-c-format msgid "Resident set size: %s\n" msgstr "" -#: linux-tdep.c:986 +#: linux-tdep.c:999 #, possible-c-format msgid "rlim: %s\n" msgstr "" -#: linux-tdep.c:989 +#: linux-tdep.c:1002 #, possible-c-format msgid "Start of text: %s\n" msgstr "" -#: linux-tdep.c:992 +#: linux-tdep.c:1005 #, possible-c-format msgid "End of text: %s\n" msgstr "" -#: linux-tdep.c:995 +#: linux-tdep.c:1008 #, possible-c-format msgid "Start of stack: %s\n" msgstr "" -#: linux-tdep.c:1000 +#: linux-tdep.c:1013 #, possible-c-format msgid "Kernel stack pointer: %s\n" msgstr "" -#: linux-tdep.c:1003 +#: linux-tdep.c:1016 #, possible-c-format msgid "Kernel instr pointer: %s\n" msgstr "" -#: linux-tdep.c:1006 +#: linux-tdep.c:1019 #, possible-c-format msgid "Pending signals bitmap: %s\n" msgstr "" -#: linux-tdep.c:1009 +#: linux-tdep.c:1022 #, possible-c-format msgid "Blocked signals bitmap: %s\n" msgstr "" -#: linux-tdep.c:1012 +#: linux-tdep.c:1025 #, possible-c-format msgid "Ignored signals bitmap: %s\n" msgstr "" -#: linux-tdep.c:1015 +#: linux-tdep.c:1028 #, possible-c-format msgid "Catched signals bitmap: %s\n" msgstr "" -#: linux-tdep.c:1018 +#: linux-tdep.c:1031 #, possible-c-format msgid "wchan (system call): %s\n" msgstr "" -#: linux-tdep.c:1064 +#: linux-tdep.c:1112 msgid "malformed note - does not end with \\0" msgstr "" -#: linux-tdep.c:1073 +#: linux-tdep.c:1124 msgid "malformed note - too short for supplied file count" msgstr "" -#: linux-tdep.c:1097 -msgid "malformed note - filenames end too early" +#: linux-tdep.c:1137 +msgid "malformed note - filename area is too small" msgstr "" #: linux-tdep.c:1144 +msgid "malformed note - filename area is too big" +msgstr "" + +#: linux-tdep.c:1225 msgid "unable to find command name in core file" msgstr "" -#: linux-tdep.c:1151 +#: linux-tdep.c:1232 msgid "unable to handle request" msgstr "" -#: linux-tdep.c:1287 +#: linux-tdep.c:1378 #, possible-c-format msgid "Error parsing {s,}maps file '%s'" msgstr "" -#: linux-tdep.c:1307 +#: linux-tdep.c:1398 #, possible-c-format msgid "Error parsing {s,}maps file '%s' number" msgstr "" -#: linux-tdep.c:2354 +#: linux-tdep.c:2456 #, possible-c-format msgid "Failed inferior mmap call for %s bytes, errno is changed." msgstr "" -#: linux-tdep.c:2383 +#: linux-tdep.c:2485 #, possible-c-format msgid "Failed inferior munmap call at %s for %s bytes, errno is changed." msgstr "" -#: linux-tdep.c:2404 +#: linux-tdep.c:2506 msgid "Cannot find AT_ENTRY auxiliary vector entry." msgstr "" -#: linux-tdep.c:2449 +#: linux-tdep.c:2551 #, possible-c-format msgid "Use of /proc/PID/coredump_filter file to generate corefiles is %s.\n" msgstr "" -#: linux-tdep.c:2460 +#: linux-tdep.c:2562 #, possible-c-format msgid "Dumping of mappings marked with the VM_DONTDUMP flag is %s.\n" msgstr "" -#: linux-tdep.c:2499 +#: linux-tdep.c:2603 msgid "Set whether gcore should consider /proc/PID/coredump_filter." msgstr "" -#: linux-tdep.c:2501 +#: linux-tdep.c:2605 msgid "Show whether gcore should consider /proc/PID/coredump_filter." msgstr "" -#: linux-tdep.c:2503 +#: linux-tdep.c:2607 msgid "" "Use this command to set whether gcore should consider the contents\n" "of /proc/PID/coredump_filter when generating the corefile. For more " @@ -18160,17 +18032,17 @@ "about this file, refer to the manpage of core(5)." msgstr "" -#: linux-tdep.c:2511 +#: linux-tdep.c:2615 msgid "" "Set whether gcore should dump mappings marked with the VM_DONTDUMP flag." msgstr "" -#: linux-tdep.c:2513 +#: linux-tdep.c:2617 msgid "" "Show whether gcore should dump mappings marked with the VM_DONTDUMP flag." msgstr "" -#: linux-tdep.c:2515 +#: linux-tdep.c:2619 msgid "" "Use this command to set whether gcore should dump mappings marked with the\n" "VM_DONTDUMP flag (\"dd\" in /proc/PID/smaps) when generating the corefile. " @@ -18197,213 +18069,213 @@ msgid "libthread-db debugging is %s.\n" msgstr "" -#: linux-thread-db.c:286 +#: linux-thread-db.c:290 #, possible-c-format msgid "Cannot deregister process %d from libthread_db: %s" msgstr "" -#: linux-thread-db.c:416 +#: linux-thread-db.c:420 #, possible-c-format msgid "Cannot find user-level thread for LWP %ld: %s" msgstr "" -#: linux-thread-db.c:421 +#: linux-thread-db.c:425 #, possible-c-format msgid "thread_get_info_callback: cannot get thread info: %s" msgstr "" -#: linux-thread-db.c:457 +#: linux-thread-db.c:461 #, possible-c-format msgid "Symbol \"%s\" not found in libthread_db: %s" msgstr "" -#: linux-thread-db.c:532 +#: linux-thread-db.c:537 msgid "Warning: couldn't activate thread debugging using libthread_db: " msgstr "" -#: linux-thread-db.c:621 +#: linux-thread-db.c:626 #, possible-c-format msgid "%s failed: %s" msgstr "" #. Some platforms require execution for td_ta_map_lwp2thr. -#: linux-thread-db.c:659 +#: linux-thread-db.c:664 msgid "; can't map_lwp2thr" msgstr "" -#: linux-thread-db.c:731 +#: linux-thread-db.c:736 msgid "Running libthread_db integrity checks:\n" msgstr "" -#: linux-thread-db.c:772 +#: linux-thread-db.c:777 #, possible-c-format msgid "td_ta_thr_iter failed: %s" msgstr "" -#: linux-thread-db.c:775 +#: linux-thread-db.c:780 msgid "no threads seen" msgstr "" -#: linux-thread-db.c:783 +#: linux-thread-db.c:788 msgid "libthread_db integrity checks failed: " msgstr "" -#: linux-thread-db.c:789 +#: linux-thread-db.c:794 msgid "libthread_db integrity checks passed.\n" msgstr "" -#: linux-thread-db.c:830 +#: linux-thread-db.c:835 #, possible-c-format msgid "Cannot initialize libthread_db: %s" msgstr "" -#: linux-thread-db.c:845 +#: linux-thread-db.c:850 #, possible-c-format msgid "td_ta_new failed: %s\n" msgstr "" -#: linux-thread-db.c:859 +#: linux-thread-db.c:864 #, possible-c-format msgid "td_ta_new failed: %s" msgstr "" -#: linux-thread-db.c:921 sol-thread.c:647 +#: linux-thread-db.c:926 sol-thread.c:641 msgid "[Thread debugging using libthread_db enabled]\n" msgstr "" -#: linux-thread-db.c:938 +#: linux-thread-db.c:943 #, possible-c-format msgid "Using host libthread_db library \"%ps\".\n" msgstr "" -#: linux-thread-db.c:961 +#: linux-thread-db.c:964 #, possible-c-format msgid "Trying host libthread_db library: %s.\n" msgstr "" -#: linux-thread-db.c:971 +#: linux-thread-db.c:974 #, possible-c-format msgid "open failed: %s.\n" msgstr "" -#: linux-thread-db.c:976 +#: linux-thread-db.c:979 #, possible-c-format msgid "" "auto-load: Loading libthread-db library \"%s\" from explicit directory.\n" msgstr "" -#: linux-thread-db.c:987 +#: linux-thread-db.c:990 #, possible-c-format msgid "dlopen failed: %s.\n" msgstr "" -#: linux-thread-db.c:1001 +#: linux-thread-db.c:1004 #, possible-c-format msgid "Host %s resolved to: %s.\n" msgstr "" -#: linux-thread-db.c:1032 +#: linux-thread-db.c:1036 #, possible-c-format msgid "Expected absolute pathname for libpthread in the inferior, but got %ps." msgstr "" -#: linux-thread-db.c:1161 +#: linux-thread-db.c:1165 #, possible-c-format msgid "thread_db_load_search returning %d\n" msgstr "" -#: linux-thread-db.c:1206 +#: linux-thread-db.c:1211 msgid "" "Unable to find libthread_db matching inferior's thread library, thread " "debugging will not be available." msgstr "" -#: linux-thread-db.c:1296 +#: linux-thread-db.c:1301 msgid "" "Target and debugger are in different PID namespaces; thread lists and other " "data are likely unreliable. Connect to gdbserver inside the container." msgstr "" -#: linux-thread-db.c:1446 +#: linux-thread-db.c:1453 #, possible-c-format msgid "find_new_threads_callback: cannot get thread info: %s" msgstr "" -#: linux-thread-db.c:1537 +#: linux-thread-db.c:1544 #, possible-c-format msgid "Found %d new threads in iteration %d.\n" msgstr "" -#: linux-thread-db.c:1580 +#: linux-thread-db.c:1588 #, possible-c-format msgid "Cannot find new threads: %s" msgstr "" -#: linux-thread-db.c:1690 +#: linux-thread-db.c:1696 #, possible-c-format msgid "Thread handle size mismatch: %d vs %zu (from libthread_db)" msgstr "" -#: linux-thread-db.c:1752 +#: linux-thread-db.c:1759 msgid "No TLS library support" msgstr "" -#: linux-thread-db.c:1767 +#: linux-thread-db.c:1774 msgid "TLS load module not found" msgstr "" -#: linux-thread-db.c:1786 +#: linux-thread-db.c:1793 msgid "TLS not allocated yet" msgstr "" -#: linux-thread-db.c:1864 +#: linux-thread-db.c:1872 msgid "'info auto-load libthread-db' does not accept any parameters" msgstr "" -#: linux-thread-db.c:1942 +#: linux-thread-db.c:1950 msgid "No auto-loaded libthread-db.\n" msgstr "" -#: linux-thread-db.c:1958 +#: linux-thread-db.c:1967 msgid "No libthread_db loaded" msgstr "" -#: linux-thread-db.c:1976 +#: linux-thread-db.c:1986 msgid "Set search path for libthread_db." msgstr "" -#: linux-thread-db.c:1977 +#: linux-thread-db.c:1987 msgid "Show the current search path or libthread_db." msgstr "" -#: linux-thread-db.c:1978 +#: linux-thread-db.c:1988 msgid "" "This path is used to search for libthread_db to be loaded into gdb itself.\n" "Its value is a colon (':') separate list of directories to search.\n" "Setting the search path to an empty list resets it to its default value." msgstr "" -#: linux-thread-db.c:1988 +#: linux-thread-db.c:1998 msgid "Set libthread-db debugging." msgstr "" -#: linux-thread-db.c:1989 +#: linux-thread-db.c:1999 msgid "Show libthread-db debugging." msgstr "" -#: linux-thread-db.c:1990 +#: linux-thread-db.c:2000 msgid "When non-zero, libthread-db debugging is enabled." msgstr "" -#: linux-thread-db.c:1997 +#: linux-thread-db.c:2007 msgid "Enable or disable auto-loading of inferior specific libthread_db." msgstr "" -#: linux-thread-db.c:1998 +#: linux-thread-db.c:2008 msgid "Show whether auto-loading inferior specific libthread_db is enabled." msgstr "" -#: linux-thread-db.c:1999 +#: linux-thread-db.c:2009 msgid "" "If enabled, libthread_db will be searched in 'set libthread-db-search-path'\n" "locations to load libthread_db compatible with the inferior.\n" @@ -18411,25 +18283,25 @@ "This option has security implications for untrusted inferiors." msgstr "" -#: linux-thread-db.c:2009 +#: linux-thread-db.c:2019 msgid "" "Print the list of loaded inferior specific libthread_db.\n" "Usage: info auto-load libthread-db" msgstr "" -#: linux-thread-db.c:2014 +#: linux-thread-db.c:2024 msgid "Run integrity checks on the current inferior's libthread_db." msgstr "" -#: linux-thread-db.c:2020 +#: linux-thread-db.c:2030 msgid "Set whether to check libthread_db at load time." msgstr "" -#: linux-thread-db.c:2021 +#: linux-thread-db.c:2031 msgid "Show whether to check libthread_db at load time." msgstr "" -#: linux-thread-db.c:2022 +#: linux-thread-db.c:2032 msgid "" "If enabled GDB will run integrity checks on inferior specific libthread_db\n" "as they are loaded." @@ -18462,53 +18334,53 @@ msgid "Sets are not implemented." msgstr "" -#: m2-exp.y:590 +#: m2-exp.y:589 msgid "No symbol table is loaded. Use the \"symbol-file\" command." msgstr "" -#: m2-exp.y:655 +#: m2-exp.y:654 msgid "Floating point numbers must be base 10." msgstr "" -#: m2-exp.y:657 +#: m2-exp.y:656 #, possible-c-format msgid "Invalid digit '%c' in number." msgstr "" -#: m2-exp.y:665 +#: m2-exp.y:664 #, possible-c-format msgid "Invalid digit '%c' in octal number." msgstr "" -#: m2-exp.y:706 +#: m2-exp.y:705 msgid "Overflow on numeric constant -- number too large." msgstr "" -#: m2-exp.y:871 +#: m2-exp.y:870 msgid "Unterminated string or character constant." msgstr "" -#: m2-exp.y:1003 +#: m2-exp.y:1002 msgid "internal: Undefined class in m2lex()" msgstr "" -#: m2-exp.y:1007 +#: m2-exp.y:1006 msgid "internal: Unforseen case in m2lex()" msgstr "" -#: m2-exp.y:1010 +#: m2-exp.y:1009 msgid "unhandled token in m2lex()" msgstr "" -#: m2-lang.c:228 +#: m2-lang.c:74 msgid "unbounded structure missing _m2_high field" msgstr "" -#: m2-lang.c:256 +#: m2-lang.c:102 msgid "internal error: unbounded array structure is unknown" msgstr "" -#: m2-lang.c:262 +#: m2-lang.c:108 msgid "unbounded structure missing _m2_contents field" msgstr "" @@ -18533,7 +18405,7 @@ msgid "long_set failed to find discrete bounds for its subtype" msgstr "" -#: m2-typeprint.c:427 m2-valprint.c:65 +#: m2-typeprint.c:427 m2-valprint.c:62 msgid "expecting long_set" msgstr "" @@ -18547,22 +18419,22 @@ msgid "CASE <variant> OF\n" msgstr "" -#: m2-valprint.c:97 +#: m2-valprint.c:94 msgid "<unknown bounds of set>" msgstr "" -#: m2-valprint.c:111 +#: m2-valprint.c:108 msgid "bit test is out of range" msgstr "" #. This happens (without TYPE_STUB set) on systems which don't use #. dbx xrefs (NO_DBX_XREFS in gcc) if a file has a "struct foo *bar" #. and no complete type for struct foo in that file. -#: m2-valprint.c:413 valprint.c:993 valprint.c:1052 +#: m2-valprint.c:389 valprint.c:910 valprint.c:952 msgid "<incomplete type>" msgstr "" -#: m2-valprint.c:429 +#: m2-valprint.c:405 msgid "<error value>" msgstr "" @@ -18619,209 +18491,209 @@ msgstr "" #. Unexpected empty N_SO. -#: machoread.c:192 +#: machoread.c:191 msgid "Unexpected empty N_SO stab" msgstr "" #. Debugging symbols are not expected here. -#: machoread.c:209 +#: machoread.c:208 #, possible-c-format msgid "%s: Unexpected debug stab outside SO markers" msgstr "" #. Unexpected empty N_SO. -#: machoread.c:226 +#: machoread.c:225 msgid "Empty SO section" msgstr "" -#: machoread.c:236 +#: machoread.c:235 msgid "Three SO in a raw" msgstr "" -#: machoread.c:245 +#: machoread.c:244 #, possible-c-format msgid "stabs debugging not supported for %s" msgstr "" -#: machoread.c:257 +#: machoread.c:256 msgid "Unexpected stab after SO" msgstr "" -#: machoread.c:274 +#: machoread.c:273 msgid "Missing nul SO" msgstr "" -#: machoread.c:302 +#: machoread.c:301 msgid "unhandled stab for dwarf OSO file" msgstr "" -#: machoread.c:308 +#: machoread.c:307 msgid "non-debugging symbol within SO" msgstr "" -#: machoread.c:314 +#: machoread.c:313 msgid "missing nul SO" msgstr "" -#: machoread.c:399 +#: machoread.c:398 #, possible-c-format msgid "can't find symbol '%s' in minsymtab" msgstr "" -#: machoread.c:426 +#: machoread.c:425 #, possible-c-format msgid "Loading debugging symbols from oso: %s\n" msgstr "" -#: machoread.c:430 symfile.c:1761 +#: machoread.c:429 symfile.c:1745 #, possible-c-format msgid "`%s': can't read symbols: %s." msgstr "" -#: machoread.c:437 +#: machoread.c:436 #, possible-c-format msgid "`%s': file time stamp mismatch." msgstr "" -#: machoread.c:445 +#: machoread.c:444 #, possible-c-format msgid "`%s': can't create hash table" msgstr "" -#: machoread.c:492 +#: machoread.c:491 #, possible-c-format msgid "Duplicated symbol %s in symbol table" msgstr "" -#: machoread.c:499 +#: machoread.c:498 #, possible-c-format msgid "Adding symbol %s (addr: %s)\n" msgstr "" -#: machoread.c:573 +#: machoread.c:572 #, possible-c-format msgid "resolve sect %s with %s (set to %s)\n" msgstr "" -#: machoread.c:646 +#: machoread.c:645 #, possible-c-format msgid "Could not open OSO archive file \"%s\"" msgstr "" -#: machoread.c:653 +#: machoread.c:652 #, possible-c-format msgid "OSO archive file \"%s\" not an archive." msgstr "" -#: machoread.c:664 +#: machoread.c:663 #, possible-c-format msgid "Could not read archive members out of OSO archive \"%s\"" msgstr "" -#: machoread.c:702 +#: machoread.c:701 #, possible-c-format msgid "Could not find specified archive member for OSO name \"%s\"" msgstr "" -#: machoread.c:711 symfile.c:1754 +#: machoread.c:710 symfile.c:1738 #, possible-c-format msgid "`%s': can't open to read symbols: %s." msgstr "" -#: machoread.c:755 machoread.c:774 +#: machoread.c:754 machoread.c:773 #, possible-c-format msgid "can't find UUID in %s" msgstr "" -#: machoread.c:761 +#: machoread.c:760 #, possible-c-format msgid "can't open dsym file %s" msgstr "" -#: machoread.c:767 +#: machoread.c:766 #, possible-c-format msgid "bad dsym file format: %s" msgstr "" -#: machoread.c:780 +#: machoread.c:779 #, possible-c-format msgid "dsym file UUID doesn't match the one in %s" msgstr "" -#: machoread.c:847 +#: machoread.c:846 msgid "dsym file found\n" msgstr "" -#: machoread.c:891 +#: machoread.c:890 #, possible-c-format msgid "Relocate section '%s' of %s\n" msgstr "" -#: machoread.c:976 +#: machoread.c:971 msgid "Set if printing Mach-O symbols processing." msgstr "" -#: machoread.c:977 +#: machoread.c:972 msgid "Show if printing Mach-O symbols processing." msgstr "" -#: macrocmd.c:68 +#: macrocmd.c:56 msgid "" "You must follow the `macro expand' command with the expression you\n" "want to expand." msgstr "" -#: macrocmd.c:97 +#: macrocmd.c:84 msgid "" "You must follow the `macro expand-once' command with the expression\n" "you want to expand." msgstr "" -#: macrocmd.c:131 +#: macrocmd.c:120 msgid " included at " msgstr "" -#: macrocmd.c:211 +#: macrocmd.c:200 msgid "" "You must follow the `info macro' command with the name of the macro\n" "whose definition you want to see." msgstr "" -#: macrocmd.c:352 +#: macrocmd.c:341 msgid "usage: macro define NAME[(ARGUMENT-LIST)] [REPLACEMENT-LIST]" msgstr "" -#: macrocmd.c:357 macrocmd.c:429 +#: macrocmd.c:346 macrocmd.c:418 msgid "Invalid macro name." msgstr "" -#: macrocmd.c:385 +#: macrocmd.c:374 msgid "Macro is missing an argument." msgstr "" -#: macrocmd.c:391 +#: macrocmd.c:380 msgid "Two macro arguments with identical names." msgstr "" -#: macrocmd.c:401 +#: macrocmd.c:390 msgid "',' or ')' expected at end of macro arguments." msgstr "" -#: macrocmd.c:424 +#: macrocmd.c:413 msgid "usage: macro undef NAME" msgstr "" -#: macrocmd.c:467 +#: macrocmd.c:457 msgid "Prefix for commands dealing with C preprocessor macros." msgstr "" -#: macrocmd.c:470 +#: macrocmd.c:460 msgid "" "Fully expand any C/C++ preprocessor macro invocations in EXPRESSION.\n" "Show the expanded expression." msgstr "" -#: macrocmd.c:475 +#: macrocmd.c:465 msgid "" "Expand C/C++ preprocessor macro invocations appearing directly in " "EXPRESSION.\n" @@ -18836,7 +18708,7 @@ "expression work together to yield a pre-processed expression." msgstr "" -#: macrocmd.c:490 +#: macrocmd.c:480 msgid "" "Show the definition of MACRO, and it's source location.\n" "Usage: info macro [-a|-all] [--] MACRO\n" @@ -18846,14 +18718,14 @@ " -- Specify the end of arguments and the beginning of the MACRO." msgstr "" -#: macrocmd.c:498 +#: macrocmd.c:488 msgid "" "Show the definitions of all macros at LINESPEC, or the current source " "location.\n" "Usage: info macros [LINESPEC]" msgstr "" -#: macrocmd.c:502 +#: macrocmd.c:492 msgid "" "Define a new C/C++ preprocessor macro.\n" "The GDB command `macro define DEFINITION' is equivalent to placing a\n" @@ -18864,12 +18736,12 @@ " (gdb) macro define MIN(x,y) ((x) < (y) ? (x) : (y))" msgstr "" -#: macrocmd.c:512 +#: macrocmd.c:502 msgid "" "Remove the definition of the C/C++ preprocessor macro with the given name." msgstr "" -#: macrocmd.c:517 +#: macrocmd.c:507 msgid "List all the macros defined using the `macro define' command." msgstr "" @@ -18894,48 +18766,48 @@ msgid "Malformed argument list for macro `%s'." msgstr "" -#: macroexp.c:1012 +#: macroexp.c:1009 msgid "__VA_OPT__ cannot appear inside __VA_OPT__" msgstr "" -#: macroexp.c:1021 +#: macroexp.c:1018 msgid "__VA_OPT__ must be followed by an open parenthesis" msgstr "" -#: macroexp.c:1042 +#: macroexp.c:1039 msgid "__VA_OPT__ is only valid in a variadic macro" msgstr "" -#: macroexp.c:1063 +#: macroexp.c:1060 msgid "Stringification operator requires an argument." msgstr "" -#: macroexp.c:1068 +#: macroexp.c:1065 msgid "Argument to stringification operator must name a macro parameter." msgstr "" -#: macroexp.c:1082 +#: macroexp.c:1079 msgid "Stray splicing operator" msgstr "" -#: macroexp.c:1114 +#: macroexp.c:1111 msgid "Splicing operator at end of macro" msgstr "" -#: macroexp.c:1208 +#: macroexp.c:1205 msgid "Unterminated __VA_OPT__" msgstr "" -#: macroexp.c:1300 +#: macroexp.c:1296 #, possible-c-format msgid "Wrong number of arguments to macro `%s' (expected %d, got %d)." msgstr "" -#: macroexp.c:1331 +#: macroexp.c:1327 msgid "bad macro definition kind" msgstr "" -#: macroexp.c:1450 +#: macroexp.c:1438 msgid "Expand-once not implemented yet." msgstr "" @@ -18966,80 +18838,80 @@ msgid "no definition for macro `%s' in scope to #undef at %s:%d" msgstr "" -#: main.c:127 source.c:569 +#: main.c:128 #, possible-c-format -msgid "%s is not a directory." +msgid "%ps is not a directory." msgstr "" -#: main.c:433 +#: main.c:490 #, possible-c-format msgid "%s: '--readnow' and '--readnever' cannot be specified simultaneously" msgstr "" -#: main.c:540 +#: main.c:597 msgid "fatal error: libbfd ABI mismatch" msgstr "" -#: main.c:557 +#: main.c:614 msgid "error finding working directory" msgstr "" -#: main.c:732 +#: main.c:784 #, possible-c-format msgid "%s: TUI mode is not supported" msgstr "" -#: main.c:782 +#: main.c:834 #, possible-c-format msgid "%s: empty path for `--data-directory'" msgstr "" -#: main.c:791 +#: main.c:843 #, possible-c-format msgid "%s: unable to load tclcommand file \"%s\"" msgstr "" -#: main.c:826 +#: main.c:878 #, possible-c-format msgid "could not set baud rate to `%s'." msgstr "" -#: main.c:839 +#: main.c:891 #, possible-c-format msgid "could not set timeout limit to `%s'." msgstr "" -#: main.c:861 +#: main.c:913 #, possible-c-format msgid "Use `%s --help' for a complete list of options." msgstr "" -#: main.c:892 +#: main.c:944 #, possible-c-format msgid "%s: `--args' specified but no program specified" msgstr "" -#: main.c:927 +#: main.c:979 #, possible-c-format msgid "Excess command line arguments ignored. (%s%s)\n" msgstr "" -#: main.c:1009 +#: main.c:1060 msgid "" "\n" "warning: " msgstr "" -#: main.c:1086 +#: main.c:1137 msgid "Can't attach to process and specify a core file at the same time." msgstr "" #. Error messages should no longer be distinguished with extra output. -#: main.c:1126 +#: main.c:1177 msgid "warning: " msgstr "" -#: main.c:1137 +#: main.c:1188 #, possible-c-format msgid "auto-load: Loading .gdbinit file \"%s\".\n" msgstr "" @@ -19047,7 +18919,7 @@ #. Note: The options in the list below are only approximately sorted #. in the alphabetical order, so as to group closely related options #. together. -#: main.c:1246 +#: main.c:1297 msgid "" "This is the GNU debugger. Usage:\n" "\n" @@ -19056,7 +18928,7 @@ "\n" msgstr "" -#: main.c:1251 +#: main.c:1302 msgid "" "Selection of debuggee and its files:\n" "\n" @@ -19073,7 +18945,7 @@ "\n" msgstr "" -#: main.c:1264 +#: main.c:1315 msgid "" "Initial commands and command files:\n" "\n" @@ -19091,7 +18963,7 @@ "\n" msgstr "" -#: main.c:1278 +#: main.c:1329 msgid "" "Output and user interface control:\n" "\n" @@ -19104,11 +18976,11 @@ " --nw Do not use the GUI interface.\n" msgstr "" -#: main.c:1288 +#: main.c:1339 msgid " --tui Use a terminal user interface.\n" msgstr "" -#: main.c:1292 +#: main.c:1343 msgid "" " --dbx DBX compatibility mode.\n" " -q, --quiet, --silent\n" @@ -19116,7 +18988,7 @@ "\n" msgstr "" -#: main.c:1297 +#: main.c:1348 msgid "" "Operating modes:\n" "\n" @@ -19140,37 +19012,46 @@ " Set GDB's data-directory to DIR.\n" msgstr "" -#: main.c:1314 +#: main.c:1365 msgid "" "\n" "At startup, GDB reads the following init files and executes their commands:\n" msgstr "" -#: main.c:1326 +#: main.c:1377 #, possible-c-format msgid " * system-wide init files: %s\n" msgstr "" -#: main.c:1331 +#: main.c:1382 #, possible-c-format msgid " * user-specific init file: %s\n" msgstr "" -#: main.c:1335 +#: main.c:1386 #, possible-c-format msgid " * local init file (see also 'set auto-load local-gdbinit'): ./%s\n" msgstr "" -#: main.c:1338 +#: main.c:1389 msgid "" "\n" "For more information, type \"help\" from within GDB, or consult the\n" "GDB manual (available as on-line info or a printed manual).\n" msgstr "" -#: main.c:1343 +#: main.c:1394 #, possible-c-format -msgid "Report bugs to \"%s\".\n" +msgid "" +"\n" +"Report bugs to %s.\n" +msgstr "" + +#: main.c:1398 +msgid "" +"\n" +"You can ask GDB-related questions on the GDB users mailing list\n" +"(gdb@sourceware.org) or on GDB's IRC channel (#gdb on Freenode).\n" msgstr "" #: maint-test-options.c:152 @@ -19216,16 +19097,11 @@ msgid "A string option." msgstr "" -#: maint-test-options.c:420 -msgid "" -"\"maintenance test-options\" must be followed by the name of a subcommand.\n" -msgstr "" - -#: maint-test-options.c:433 +#: maint-test-options.c:422 msgid "Generic command for testing the options infrastructure." msgstr "" -#: maint-test-options.c:442 +#: maint-test-options.c:431 msgid "" "Command used for testing options processing.\n" "Usage: maint test-options require-delimiter [[OPTION]... --] [OPERAND]...\n" @@ -19237,7 +19113,7 @@ "to mark the end of option processing." msgstr "" -#: maint-test-options.c:454 +#: maint-test-options.c:443 msgid "" "Command used for testing options processing.\n" "Usage: maint test-options unknown-is-error [OPTION]... [OPERAND]...\n" @@ -19246,7 +19122,7 @@ "%OPTIONS%" msgstr "" -#: maint-test-options.c:463 +#: maint-test-options.c:452 msgid "" "Command used for testing options processing.\n" "Usage: maint test-options unknown-is-operand [OPTION]... [OPERAND]...\n" @@ -19255,7 +19131,7 @@ "%OPTIONS%" msgstr "" -#: maint-test-options.c:494 +#: maint-test-options.c:483 msgid "" "Show maintenance test-options completion result.\n" "Shows the results of completing\n" @@ -19264,204 +19140,179 @@ "\"maint test-options unknown-is-operand\"." msgstr "" -#: maint-test-settings.c:35 -msgid "" -"\"maintenance set test-settings\" must be followed by the name of a set " -"command.\n" -msgstr "" - -#: maint-test-settings.c:108 +#: maint-test-settings.c:89 msgid "" "Set GDB internal variables used for set/show command infrastructure testing." msgstr "" -#: maint-test-settings.c:116 +#: maint-test-settings.c:97 msgid "" "Show GDB internal variables used for set/show command infrastructure testing." msgstr "" -#: maint-test-settings.c:124 maint-test-settings.c:125 -#: maint-test-settings.c:134 maint-test-settings.c:135 -#: maint-test-settings.c:144 maint-test-settings.c:145 -#: maint-test-settings.c:154 maint-test-settings.c:155 -#: maint-test-settings.c:164 maint-test-settings.c:165 -#: maint-test-settings.c:175 maint-test-settings.c:176 -#: maint-test-settings.c:186 maint-test-settings.c:187 -#: maint-test-settings.c:196 maint-test-settings.c:197 -#: maint-test-settings.c:206 maint-test-settings.c:207 -#: maint-test-settings.c:216 maint-test-settings.c:217 -#: maint-test-settings.c:227 maint-test-settings.c:228 -#: maint-test-settings.c:238 maint-test-settings.c:239 +#: maint-test-settings.c:105 maint-test-settings.c:106 +#: maint-test-settings.c:115 maint-test-settings.c:116 +#: maint-test-settings.c:125 maint-test-settings.c:126 +#: maint-test-settings.c:135 maint-test-settings.c:136 +#: maint-test-settings.c:145 maint-test-settings.c:146 +#: maint-test-settings.c:156 maint-test-settings.c:157 +#: maint-test-settings.c:167 maint-test-settings.c:168 +#: maint-test-settings.c:177 maint-test-settings.c:178 +#: maint-test-settings.c:187 maint-test-settings.c:188 +#: maint-test-settings.c:197 maint-test-settings.c:198 +#: maint-test-settings.c:208 maint-test-settings.c:209 +#: maint-test-settings.c:219 maint-test-settings.c:220 msgid "command used for internal testing." msgstr "" -#: maint.c:60 -msgid "" -"\"maintenance\" must be followed by the name of a maintenance command.\n" -msgstr "" - -#: maint.c:69 +#: maint.c:59 msgid "Should GDB dump core? " msgstr "" -#: maint.c:121 +#: maint.c:111 msgid "This command has been moved to \"demangle\".\n" msgstr "" -#: maint.c:128 +#: maint.c:118 msgid "\"maintenance time\" takes a numeric argument.\n" msgstr "" -#: maint.c:149 -msgid "\"maintenance info\" must be followed by the name of an info command.\n" -msgstr "" - -#: maint.c:162 -msgid "" -"\"maintenance check\" must be followed by the name of a check command.\n" -msgstr "" - -#: maint.c:446 +#: maint.c:387 msgid "Exec file:\n" msgstr "" -#: maint.c:464 +#: maint.c:405 #, possible-c-format msgid " Object file: %s\n" msgstr "" -#: maint.c:481 +#: maint.c:420 msgid "Core file:\n" msgstr "" -#: maint.c:509 regcache-dump.c:231 +#: maint.c:452 regcache-dump.c:231 msgid "maintenance print architecture" msgstr "" -#: maint.c:521 -msgid "" -"\"maintenance print\" must be followed by the name of a print command.\n" -msgstr "" - -#: maint.c:541 +#: maint.c:471 msgid "requires argument (address or section + address)" msgstr "" #. End of command? -#: maint.c:551 +#: maint.c:481 msgid "Need to specify section name and address" msgstr "" -#: maint.c:563 +#: maint.c:493 #, possible-c-format msgid "Unknown section %s." msgstr "" -#: maint.c:593 +#: maint.c:523 #, possible-c-format msgid "%s + %s in section %s of %s\n" msgstr "" -#: maint.c:597 +#: maint.c:527 #, possible-c-format msgid "%s + %s in section %s\n" msgstr "" -#: maint.c:601 +#: maint.c:531 #, possible-c-format msgid "%s + %s\n" msgstr "" -#: maint.c:604 +#: maint.c:534 #, possible-c-format msgid "no symbol at %s:%s\n" msgstr "" -#: maint.c:607 +#: maint.c:537 #, possible-c-format msgid "no symbol at %s\n" msgstr "" -#: maint.c:622 +#: maint.c:552 msgid "" "\"maintenance deprecate\" takes an argument,\n" "the command you want to deprecate, and optionally the replacement command\n" "enclosed in quotes.\n" msgstr "" -#: maint.c:636 +#: maint.c:566 msgid "" "\"maintenance undeprecate\" takes an argument, \n" "the command you want to undeprecate.\n" msgstr "" -#: maint.c:667 +#: maint.c:597 #, possible-c-format msgid "Can't find command '%s' to deprecate.\n" msgstr "" -#: maint.c:745 -msgid "\"maintenance set\" must be followed by the name of a set command.\n" -msgstr "" - -#: maint.c:782 +#: maint.c:697 #, possible-c-format msgid "Internal profiling is %s.\n" msgstr "" -#: maint.c:844 +#: maint.c:759 msgid "Profiling support is not available on this system." msgstr "" -#: maint.c:964 +#: maint.c:874 msgid "command finished" msgstr "" -#: maint.c:977 +#: maint.c:887 #, possible-c-format msgid "Startup time: %.6f (cpu), %.6f (wall)\n" msgstr "" -#: maint.c:978 +#: maint.c:888 #, possible-c-format msgid "Command execution time: %.6f (cpu), %.6f (wall)\n" msgstr "" -#: maint.c:992 +#: maint.c:902 #, possible-c-format msgid "Space used: %ld (%s%ld during startup)\n" msgstr "" -#: maint.c:993 +#: maint.c:903 #, possible-c-format msgid "Space used: %ld (%s%ld for this command)\n" msgstr "" -#: maint.c:1005 +#: maint.c:915 #, possible-c-format msgid "#symtabs: %d (+%d), #compunits: %d (+%d), #blocks: %d (+%d)\n" msgstr "" -#: maint.c:1041 +#: maint.c:951 msgid "command started" msgstr "" -#: maint.c:1095 +#: maint.c:1005 msgid "Bad value for 'mt set per-command no'." msgstr "" -#: maint.c:1148 +#: maint.c:1026 maint.c:1040 +msgid "Selftests have been disabled for this build.\n" +msgstr "" + +#: maint.c:1052 msgid "" "Commands for use by GDB maintainers.\n" "Includes commands to dump specific internal GDB structures in\n" "a human readable form, to cause GDB to deliberately dump core, etc." msgstr "" -#: maint.c:1157 +#: maint.c:1061 msgid "Commands for showing internal info about the program being debugged." msgstr "" -#: maint.c:1163 +#: maint.c:1067 msgid "" "List the BFD sections of the exec and core files.\n" "Arguments may be any combination of:\n" @@ -19474,23 +19325,23 @@ "lists all sections from all object files, including shared libraries." msgstr "" -#: maint.c:1176 +#: maint.c:1080 msgid "Maintenance command for printing GDB internal state." msgstr "" -#: maint.c:1180 +#: maint.c:1084 msgid "" "Set GDB internal variables used by the GDB maintainer.\n" "Configure variables internal to GDB that aid in GDB's maintenance" msgstr "" -#: maint.c:1187 +#: maint.c:1091 msgid "" "Show GDB internal variables used by the GDB maintainer.\n" "Configure variables internal to GDB that aid in GDB's maintenance" msgstr "" -#: maint.c:1194 +#: maint.c:1098 msgid "" "Like \"with\", but works with \"maintenance set\" variables.\n" "Usage: maintenance with SETTING [VALUE] [-- COMMAND]\n" @@ -19499,81 +19350,81 @@ "subcommands." msgstr "" -#: maint.c:1204 +#: maint.c:1108 msgid "" "Get fatal error; make debugger dump its core.\n" "GDB sets its handling of SIGQUIT back to SIG_DFL and then sends\n" "itself a SIGQUIT signal." msgstr "" -#: maint.c:1212 +#: maint.c:1116 msgid "" "Give GDB an internal error.\n" "Cause GDB to behave as if an internal error was detected." msgstr "" -#: maint.c:1218 +#: maint.c:1122 msgid "" "Give GDB an internal warning.\n" "Cause GDB to behave as if an internal warning was reported." msgstr "" -#: maint.c:1224 +#: maint.c:1128 msgid "" "Give GDB a demangler warning.\n" "Cause GDB to behave as if a demangler warning was reported." msgstr "" -#: maint.c:1229 +#: maint.c:1133 msgid "This command has been moved to \"demangle\"." msgstr "" -#: maint.c:1234 +#: maint.c:1138 msgid "Per-command statistics settings." msgstr "" #. allow-unknown -#: maint.c:1239 +#: maint.c:1143 msgid "Show per-command statistics settings." msgstr "" -#: maint.c:1245 +#: maint.c:1149 msgid "Set whether to display per-command execution time." msgstr "" -#: maint.c:1246 +#: maint.c:1150 msgid "Show whether to display per-command execution time." msgstr "" -#: maint.c:1248 +#: maint.c:1152 msgid "" "If enabled, the execution time for each command will be\n" "displayed following the command's output." msgstr "" -#: maint.c:1255 +#: maint.c:1159 msgid "Set whether to display per-command space usage." msgstr "" -#: maint.c:1256 +#: maint.c:1160 msgid "Show whether to display per-command space usage." msgstr "" -#: maint.c:1258 +#: maint.c:1162 msgid "" "If enabled, the space usage for each command will be\n" "displayed following the command's output." msgstr "" -#: maint.c:1265 +#: maint.c:1169 msgid "Set whether to display per-command symtab statistics." msgstr "" -#: maint.c:1266 +#: maint.c:1170 msgid "Show whether to display per-command symtab statistics." msgstr "" -#: maint.c:1268 +#: maint.c:1172 msgid "" "If enabled, the basic symtab statistics for each command will be\n" "displayed following the command's output." @@ -19581,7 +19432,7 @@ #. This is equivalent to "mt set per-command time on". #. Kept because some people are used to typing "mt time 1". -#: maint.c:1276 +#: maint.c:1180 msgid "" "Set the display of time usage.\n" "If nonzero, will cause the execution time for each command to be\n" @@ -19590,39 +19441,39 @@ #. This is equivalent to "mt set per-command space on". #. Kept because some people are used to typing "mt space 1". -#: maint.c:1284 +#: maint.c:1188 msgid "" "Set the display of space usage.\n" "If nonzero, will cause the execution space for each command to be\n" "displayed, following the command's output." msgstr "" -#: maint.c:1290 +#: maint.c:1194 msgid "" "Print a type chain for a given symbol.\n" "For each node in a type chain, print the raw data for each member of\n" "the type structure, and the interpretation of the data." msgstr "" -#: maint.c:1297 +#: maint.c:1201 msgid "Print statistics about internal gdb state." msgstr "" -#: maint.c:1301 +#: maint.c:1205 msgid "" "Print the internal architecture configuration.\n" "Takes an optional file parameter." msgstr "" -#: maint.c:1306 +#: maint.c:1210 msgid "Commands for checking internal gdb state." msgstr "" -#: maint.c:1313 +#: maint.c:1217 msgid "Translate a section name and address to a symbol." msgstr "" -#: maint.c:1316 +#: maint.c:1220 msgid "" "Deprecate a command (for testing purposes).\n" "Usage: maintenance deprecate COMMANDNAME [\"REPLACEMENT\"]\n" @@ -19631,7 +19482,7 @@ "rather you should use the C function deprecate_cmd()." msgstr "" -#: maint.c:1323 +#: maint.c:1227 msgid "" "Undeprecate a command (for testing purposes).\n" "Usage: maintenance undeprecate COMMANDNAME\n" @@ -19639,7 +19490,7 @@ "You probably shouldn't use this." msgstr "" -#: maint.c:1330 +#: maint.c:1234 msgid "" "Run gdb's unit tests.\n" "Usage: maintenance selftest [FILTER]\n" @@ -19647,31 +19498,31 @@ "If a filter is given, only the tests with that value in their name will ran." msgstr "" -#: maint.c:1338 +#: maint.c:1242 msgid "List the registered selftests." msgstr "" -#: maint.c:1341 +#: maint.c:1245 msgid "Set internal profiling." msgstr "" -#: maint.c:1342 +#: maint.c:1246 msgid "Show internal profiling." msgstr "" -#: maint.c:1343 +#: maint.c:1247 msgid "When enabled GDB is profiled." msgstr "" -#: maint.c:1352 +#: maint.c:1256 msgid "Set the number of worker threads GDB can use." msgstr "" -#: maint.c:1353 +#: maint.c:1257 msgid "Show the number of worker threads GDB can use." msgstr "" -#: maint.c:1354 +#: maint.c:1258 msgid "" "GDB may use multiple threads to speed up certain CPU-intensive operations,\n" "such as demangling symbol names." @@ -19707,149 +19558,149 @@ msgid "unexpected type code for %s" msgstr "" -#: mdebugread.c:377 +#: mdebugread.c:368 #, possible-c-format msgid "" "\n" "%s not compiled with -g, debugging support is limited.\n" msgstr "" -#: mdebugread.c:380 +#: mdebugread.c:371 msgid "You should compile with -g2 or -g3 for best debugging support.\n" msgstr "" -#: mdebugread.c:523 stabsread.c:184 +#: mdebugread.c:514 stabsread.c:184 #, possible-c-format msgid "bad register number %d (max %d) in symbol %s" msgstr "" -#: mdebugread.c:743 mdebugread.c:1353 +#: mdebugread.c:734 mdebugread.c:1344 #, possible-c-format msgid "unknown symbol type 0x%x" msgstr "" -#: mdebugread.c:960 +#: mdebugread.c:951 #, possible-c-format msgid "declaration block contains unhandled symbol type %d" msgstr "" -#: mdebugread.c:1238 +#: mdebugread.c:1229 #, possible-c-format msgid "stEnd with storage class %d not handled" msgstr "" -#: mdebugread.c:1595 +#: mdebugread.c:1584 #, possible-c-format msgid "can't handle TIR fBitfield for %s" msgstr "" -#: mdebugread.c:1624 +#: mdebugread.c:1613 #, possible-c-format msgid "unable to cross ref btIndirect for %s" msgstr "" -#: mdebugread.c:1739 +#: mdebugread.c:1728 #, possible-c-format msgid "unable to cross ref btTypedef for %s" msgstr "" -#: mdebugread.c:1785 +#: mdebugread.c:1774 #, possible-c-format msgid "illegal TIR continued for %s" msgstr "" -#: mdebugread.c:1847 +#: mdebugread.c:1836 #, possible-c-format msgid "illegal array index type for %s, assuming int" msgstr "" -#: mdebugread.c:1894 +#: mdebugread.c:1883 #, possible-c-format msgid "unknown type qualifier 0x%x" msgstr "" #. Static procedure at address pr->adr. Sigh. #. FIXME-32x64. assuming pr->adr fits in long. -#: mdebugread.c:1926 +#: mdebugread.c:1915 #, possible-c-format msgid "can't handle PDR for static proc at 0x%lx" msgstr "" -#: mdebugread.c:1989 +#: mdebugread.c:1978 #, possible-c-format msgid "PDR for %s, but no symbol" msgstr "" -#: mdebugread.c:2114 +#: mdebugread.c:2099 #, possible-c-format msgid "Warning: %s `%s' is undefined (in %s)\n" msgstr "" -#: mdebugread.c:2212 +#: mdebugread.c:2197 #, possible-c-format msgid "guessed size of linetable for %s incorrectly" msgstr "" -#: mdebugread.c:2466 +#: mdebugread.c:2451 #, possible-c-format msgid "bad ifd for external symbol: %d (max %ld)" msgstr "" -#: mdebugread.c:2472 +#: mdebugread.c:2457 #, possible-c-format msgid "bad iss for external symbol: %ld (max %ld)" msgstr "" #. This should not happen either... FIXME. -#: mdebugread.c:3435 +#: mdebugread.c:3415 #, possible-c-format msgid "bad proc end in aux found from symbol %s" msgstr "" #. This happens with the Ultrix kernel. -#: mdebugread.c:3547 +#: mdebugread.c:3527 #, possible-c-format msgid "bad aux index at block symbol %s" msgstr "" #. Both complaints are valid: one gives symbol sym_name, #. the other the offending symbol type. -#: mdebugread.c:3568 +#: mdebugread.c:3548 #, possible-c-format msgid "unknown local symbol %s" msgstr "" -#: mdebugread.c:3570 +#: mdebugread.c:3550 #, possible-c-format msgid "with type %d" msgstr "" -#: mdebugread.c:3731 +#: mdebugread.c:3710 #, possible-c-format msgid "bad file number %ld" msgstr "" -#: mdebugread.c:4042 +#: mdebugread.c:3999 #, possible-c-format msgid "unknown stabs symbol %s" msgstr "" -#: mdebugread.c:4225 +#: mdebugread.c:4182 #, possible-c-format msgid "File %s contains %d unresolved references:" msgstr "" -#: mdebugread.c:4401 +#: mdebugread.c:4358 #, possible-c-format msgid "illegal tq0 in forward typedef for %s" msgstr "" -#: mdebugread.c:4437 +#: mdebugread.c:4394 #, possible-c-format msgid "illegal bt %d in forward typedef for %s" msgstr "" -#: mdebugread.c:4804 +#: mdebugread.c:4761 #, possible-c-format msgid "Error reading ECOFF debugging information: %s" msgstr "" @@ -19926,7 +19777,7 @@ msgid "Delete all memory regions? " msgstr "" -#: memattr.c:600 +#: memattr.c:596 msgid "" "Define attributes for memory region or reset memory region handling to " "target-based.\n" @@ -19937,7 +19788,7 @@ " CACHE may be cache or nocache" msgstr "" -#: memattr.c:609 +#: memattr.c:605 msgid "" "Enable memory region.\n" "Arguments are the IDs of the memory regions to enable.\n" @@ -19945,7 +19796,7 @@ "Do \"info mem\" to see current list of IDs." msgstr "" -#: memattr.c:615 +#: memattr.c:611 msgid "" "Disable memory region.\n" "Arguments are the IDs of the memory regions to disable.\n" @@ -19953,7 +19804,7 @@ "Do \"info mem\" to see current list of IDs." msgstr "" -#: memattr.c:621 +#: memattr.c:617 msgid "" "Delete memory region.\n" "Arguments are the IDs of the memory regions to delete.\n" @@ -19961,24 +19812,24 @@ "Do \"info mem\" to see current list of IDs." msgstr "" -#: memattr.c:628 +#: memattr.c:624 msgid "Memory region attributes." msgstr "" #. allow-unknown -#: memattr.c:630 memattr.c:634 +#: memattr.c:626 memattr.c:630 msgid "Memory regions settings." msgstr "" -#: memattr.c:640 +#: memattr.c:636 msgid "Set handling of unknown memory regions." msgstr "" -#: memattr.c:641 +#: memattr.c:637 msgid "Show handling of unknown memory regions." msgstr "" -#: memattr.c:642 +#: memattr.c:638 msgid "" "If on, and some memory map is defined, debugger will emit errors on\n" "accesses to memory not defined in the memory map. If off, accesses to all\n" @@ -20026,6 +19877,88 @@ "%s is %s-endian." msgstr "" +#: mi/mi-cmd-disas.c:150 +msgid "" +"-data-disassemble: Usage: ( [-f filename -l linenum [-n howmany]] | [-s " +"startaddr -e endaddr] | [-a addr] ) [--] mode." +msgstr "" + +#: mi/mi-cmd-disas.c:155 +msgid "-data-disassemble: Mode argument must be in the range 0-5." +msgstr "" + +#: mi/mi-cmd-disas.c:190 +msgid "-data-disassemble: Invalid filename." +msgstr "" + +#: mi/mi-cmd-disas.c:192 +msgid "-data-disassemble: Invalid line number" +msgstr "" + +#: mi/mi-cmd-disas.c:194 mi/mi-cmd-disas.c:200 +msgid "-data-disassemble: No function contains specified address" +msgstr "" + +#: mi/mi-cmds.c:279 +#, possible-c-format +msgid "command `%s' appears to be duplicated" +msgstr "" + +#: mi/mi-cmd-file.c:43 +msgid "-file-list-exec-source-file: Usage: No args" +msgstr "" + +#: mi/mi-cmd-file.c:53 +msgid "-file-list-exec-source-file: No symtab" +msgstr "" + +#: mi/mi-cmd-file.c:89 +msgid "-file-list-exec-source-files: Usage: No args" +msgstr "" + +#: mi/mi-cmd-file.c:134 +msgid "Usage: -file-list-shared-libraries [REGEXP]" +msgstr "" + +#: mi/mi-cmd-catch.c:79 mi/mi-cmd-catch.c:147 mi/mi-cmd-catch.c:215 +#: mi/mi-main.c:455 skip.c:296 +#, possible-c-format +msgid "Invalid argument: %s" +msgstr "" + +#: mi/mi-cmd-catch.c:152 +msgid "\"-e\" and \"-u\" are mutually exclusive" +msgstr "" + +#: mi/mi-cmd-catch.c:266 +msgid "-catch-load/unload: Missing <library name>" +msgstr "" + +#: mi/mi-cmd-catch.c:268 +msgid "-catch-load/unload: Garbage following the <library name>" +msgstr "" + +#: mi/mi-cmd-target.c:40 +msgid "-target-file-get: Usage: REMOTE_FILE LOCAL_FILE" +msgstr "" + +#: mi/mi-cmd-target.c:64 +msgid "-target-file-put: Usage: LOCAL_FILE REMOTE_FILE" +msgstr "" + +#: mi/mi-cmd-target.c:88 +msgid "-target-file-delete: Usage: REMOTE_FILE" +msgstr "" + +#: mi/mi-interp.c:210 +msgid "-interpreter-exec: Usage: -interpreter-exec interp command" +msgstr "" + +#: mi/mi-interp.c:215 +#, possible-c-format +msgid "-interpreter-exec: could not find interpreter \"%s\"" +msgstr "" + #: mi/mi-cmd-env.c:66 msgid "-environment-pwd: No arguments allowed" msgstr "" @@ -20039,7 +19972,7 @@ msgid "-environment-cd: Usage DIRECTORY" msgstr "" -#: mi/mi-cmd-env.c:258 +#: mi/mi-cmd-env.c:256 msgid "-inferior-tty-show: Usage: No args" msgstr "" @@ -20110,192 +20043,119 @@ msgid "breakpoint %d not found." msgstr "" -#: mi/mi-cmds.c:279 +#: mi/mi-parse.c:278 #, possible-c-format -msgid "command `%s' appears to be duplicated" +msgid "Undefined MI command: %s" msgstr "" -#: mi/mi-symbol-cmds.c:41 -msgid "-symbol-list-lines: Usage: SOURCE_FILENAME" +#: mi/mi-parse.c:317 +msgid "Duplicate '--thread-group' option" msgstr "" -#: mi/mi-symbol-cmds.c:47 -msgid "-symbol-list-lines: Unknown source file name." +#: mi/mi-parse.c:320 +msgid "Invalid thread group id" msgstr "" -#: mi/mi-symbol-cmds.c:180 -msgid "invalid value for --max-results argument" +#: mi/mi-parse.c:331 +msgid "Duplicate '--thread' option" msgstr "" -#: mi/mi-cmd-stack.c:55 -msgid "-enable-frame-filters: no arguments allowed" +#: mi/mi-parse.c:342 +msgid "Duplicate '--frame' option" msgstr "" -#: mi/mi-cmd-stack.c:122 -msgid "-stack-list-frames: Usage: [--no-frame-filters] [FRAME_LOW FRAME_HIGH]" +#: mi/mi-parse.c:356 +#, possible-c-format +msgid "Invalid --language argument: %s" msgstr "" -#: mi/mi-cmd-stack.c:146 -msgid "-stack-list-frames: Not enough frames in stack." +#: mi/mi-parse.c:362 +#, possible-c-format +msgid "Invalid value for the '%s' option" msgstr "" -#: mi/mi-cmd-stack.c:193 -msgid "-stack-info-depth: Usage: [MAX_DEPTH]" +#: mi/mi-parse.c:372 +#, possible-c-format +msgid "Problem parsing arguments: %s %s" msgstr "" -#: mi/mi-cmd-stack.c:262 +#: mi/mi-parse.c:399 +#, possible-c-format msgid "" -"-stack-list-locals: Usage: [--no-frame-filters] [--skip-unavailable] " -"PRINT_VALUES" +"Unknown value for PRINT_VALUES: must be: 0 or \"%s\", 1 or \"%s\", 2 or \"%s" +"\"" msgstr "" -#: mi/mi-cmd-stack.c:335 -msgid "" -"-stack-list-arguments: Usage: [--no-frame-filters] [--skip-unavailable] " -"PRINT_VALUES [FRAME_LOW FRAME_HIGH]" +#: mi/mi-getopt.c:37 +msgid "mi_getopt_long: oind out of bounds" msgstr "" -#: mi/mi-cmd-stack.c:362 -msgid "-stack-list-arguments: Not enough frames in stack." +#: mi/mi-getopt.c:63 +#, possible-c-format +msgid "%s: Option %s requires an argument" msgstr "" -#: mi/mi-cmd-stack.c:453 -msgid "" -"-stack-list-variables: Usage: [--no-frame-filters] [--skip-unavailable] " -"PRINT_VALUES" +#: mi/mi-getopt.c:77 +#, possible-c-format +msgid "%s: Unknown option ``%s''" msgstr "" -#: mi/mi-cmd-stack.c:758 -msgid "-stack-select-frame: Usage: FRAME_SPEC" +#: mi/mi-cmd-var.c:102 +msgid "-var-create: Usage: NAME FRAME EXPRESSION." msgstr "" -#: mi/mi-cmd-stack.c:767 -msgid "-stack-info-frame: No arguments allowed" +#: mi/mi-cmd-var.c:115 +msgid "-var-create: name of object must begin with a letter" msgstr "" -#: mi/mi-cmd-file.c:43 -msgid "-file-list-exec-source-file: Usage: No args" +#: mi/mi-cmd-var.c:135 +msgid "-var-create: unable to create variable object" msgstr "" -#: mi/mi-cmd-file.c:53 -msgid "-file-list-exec-source-file: No symtab" +#: mi/mi-cmd-var.c:152 +msgid "-var-delete: Usage: [-c] EXPRESSION." msgstr "" -#: mi/mi-cmd-file.c:89 -msgid "-file-list-exec-source-files: Usage: No args" +#: mi/mi-cmd-var.c:161 +msgid "-var-delete: Missing required argument after '-c': variable object name" msgstr "" -#: mi/mi-cmd-file.c:135 -msgid "Usage: -file-list-shared-libraries [REGEXP]" +#: mi/mi-cmd-var.c:164 +msgid "-var-delete: Illegal variable object name" msgstr "" -#: mi/mi-cmd-info.c:43 -msgid "Usage: -info-ada-exceptions [REGEXP]" +#: mi/mi-cmd-var.c:172 +msgid "-var-delete: Invalid option." msgstr "" -#: mi/mi-cmd-info.c:75 -msgid "Usage: -info-gdb-mi-command MI_COMMAND_NAME" +#: mi/mi-cmd-var.c:212 +msgid "" +"Must specify the format as: \"natural\", \"binary\", \"decimal\", " +"\"hexadecimal\", \"octal\" or \"zero-hexadecimal\"" msgstr "" -#: mi/mi-cmd-info.c:103 -msgid "Usage: -info-os [INFOTYPE]" +#: mi/mi-cmd-var.c:224 +msgid "-var-set-format: Usage: NAME FORMAT." msgstr "" -#: mi/mi-cmd-target.c:40 -msgid "-target-file-get: Usage: REMOTE_FILE LOCAL_FILE" +#: mi/mi-cmd-var.c:248 +msgid "Usage: NAME VISUALIZER_FUNCTION." msgstr "" -#: mi/mi-cmd-target.c:64 -msgid "-target-file-put: Usage: LOCAL_FILE REMOTE_FILE" +#: mi/mi-cmd-var.c:253 varobj.c:450 +msgid "Variable object not found" msgstr "" -#: mi/mi-cmd-target.c:88 -msgid "-target-file-delete: Usage: REMOTE_FILE" +#: mi/mi-cmd-var.c:265 +msgid "-var-set-format: Usage: NAME FROZEN_FLAG." msgstr "" -#: mi/mi-cmd-catch.c:79 mi/mi-cmd-catch.c:147 mi/mi-cmd-catch.c:215 -#: mi/mi-main.c:463 skip.c:299 -#, possible-c-format -msgid "Invalid argument: %s" +#: mi/mi-cmd-var.c:274 +msgid "Invalid flag value" msgstr "" -#: mi/mi-cmd-catch.c:152 -msgid "\"-e\" and \"-u\" are mutually exclusive" -msgstr "" - -#: mi/mi-cmd-catch.c:266 -msgid "-catch-load/unload: Missing <library name>" -msgstr "" - -#: mi/mi-cmd-catch.c:268 -msgid "-catch-load/unload: Garbage following the <library name>" -msgstr "" - -#: mi/mi-interp.c:197 -msgid "-interpreter-exec: Usage: -interpreter-exec interp command" -msgstr "" - -#: mi/mi-interp.c:202 -#, possible-c-format -msgid "-interpreter-exec: could not find interpreter \"%s\"" -msgstr "" - -#: mi/mi-cmd-var.c:102 -msgid "-var-create: Usage: NAME FRAME EXPRESSION." -msgstr "" - -#: mi/mi-cmd-var.c:115 -msgid "-var-create: name of object must begin with a letter" -msgstr "" - -#: mi/mi-cmd-var.c:135 -msgid "-var-create: unable to create variable object" -msgstr "" - -#: mi/mi-cmd-var.c:152 -msgid "-var-delete: Usage: [-c] EXPRESSION." -msgstr "" - -#: mi/mi-cmd-var.c:161 -msgid "-var-delete: Missing required argument after '-c': variable object name" -msgstr "" - -#: mi/mi-cmd-var.c:164 -msgid "-var-delete: Illegal variable object name" -msgstr "" - -#: mi/mi-cmd-var.c:172 -msgid "-var-delete: Invalid option." -msgstr "" - -#: mi/mi-cmd-var.c:212 -msgid "" -"Must specify the format as: \"natural\", \"binary\", \"decimal\", " -"\"hexadecimal\", \"octal\" or \"zero-hexadecimal\"" -msgstr "" - -#: mi/mi-cmd-var.c:224 -msgid "-var-set-format: Usage: NAME FORMAT." -msgstr "" - -#: mi/mi-cmd-var.c:248 -msgid "Usage: NAME VISUALIZER_FUNCTION." -msgstr "" - -#: mi/mi-cmd-var.c:253 varobj.c:450 -msgid "Variable object not found" -msgstr "" - -#: mi/mi-cmd-var.c:265 -msgid "-var-set-format: Usage: NAME FROZEN_FLAG." -msgstr "" - -#: mi/mi-cmd-var.c:274 -msgid "Invalid flag value" -msgstr "" - -#: mi/mi-cmd-var.c:291 -msgid "-var-show-format: Usage: NAME." +#: mi/mi-cmd-var.c:291 +msgid "-var-show-format: Usage: NAME." msgstr "" #: mi/mi-cmd-var.c:309 @@ -20358,6 +20218,64 @@ msgid "-var-set-update-range: Usage: VAROBJ FROM TO" msgstr "" +#: mi/mi-cmd-stack.c:55 +msgid "-enable-frame-filters: no arguments allowed" +msgstr "" + +#: mi/mi-cmd-stack.c:122 +msgid "-stack-list-frames: Usage: [--no-frame-filters] [FRAME_LOW FRAME_HIGH]" +msgstr "" + +#: mi/mi-cmd-stack.c:146 +msgid "-stack-list-frames: Not enough frames in stack." +msgstr "" + +#: mi/mi-cmd-stack.c:193 +msgid "-stack-info-depth: Usage: [MAX_DEPTH]" +msgstr "" + +#: mi/mi-cmd-stack.c:262 +msgid "" +"-stack-list-locals: Usage: [--no-frame-filters] [--skip-unavailable] " +"PRINT_VALUES" +msgstr "" + +#: mi/mi-cmd-stack.c:335 +msgid "" +"-stack-list-arguments: Usage: [--no-frame-filters] [--skip-unavailable] " +"PRINT_VALUES [FRAME_LOW FRAME_HIGH]" +msgstr "" + +#: mi/mi-cmd-stack.c:362 +msgid "-stack-list-arguments: Not enough frames in stack." +msgstr "" + +#: mi/mi-cmd-stack.c:453 +msgid "" +"-stack-list-variables: Usage: [--no-frame-filters] [--skip-unavailable] " +"PRINT_VALUES" +msgstr "" + +#: mi/mi-cmd-stack.c:757 +msgid "-stack-select-frame: Usage: FRAME_SPEC" +msgstr "" + +#: mi/mi-cmd-stack.c:766 +msgid "-stack-info-frame: No arguments allowed" +msgstr "" + +#: mi/mi-symbol-cmds.c:41 +msgid "-symbol-list-lines: Usage: SOURCE_FILENAME" +msgstr "" + +#: mi/mi-symbol-cmds.c:47 +msgid "-symbol-list-lines: Unknown source file name." +msgstr "" + +#: mi/mi-symbol-cmds.c:180 +msgid "invalid value for --max-results argument" +msgstr "" + #: mi/mi-main.c:128 #, possible-c-format msgid "Whether MI is in asynchronous mode is %s.\n" @@ -20372,406 +20290,339 @@ msgid "Target %s does not support this command." msgstr "" -#: mi/mi-main.c:498 +#: mi/mi-main.c:491 msgid "Usage: -target-detach [pid | thread-group]" msgstr "" -#: mi/mi-main.c:513 +#: mi/mi-main.c:506 #, possible-c-format msgid "Invalid syntax of thread-group id '%s'" msgstr "" -#: mi/mi-main.c:517 +#: mi/mi-main.c:510 #, possible-c-format msgid "Non-existent thread-group id '%d'" msgstr "" -#: mi/mi-main.c:527 +#: mi/mi-main.c:520 #, possible-c-format msgid "Invalid identifier '%s'" msgstr "" -#: mi/mi-main.c:534 +#: mi/mi-main.c:527 msgid "Thread group is empty" msgstr "" -#: mi/mi-main.c:552 +#: mi/mi-main.c:545 msgid "-thread-select: USAGE: threadnum." msgstr "" -#: mi/mi-main.c:557 +#: mi/mi-main.c:550 #, possible-c-format msgid "Thread ID %d not known." msgstr "" -#: mi/mi-main.c:578 +#: mi/mi-main.c:571 msgid "-thread-list-ids: No arguments required." msgstr "" -#: mi/mi-main.c:607 mi/mi-main.c:2452 +#: mi/mi-main.c:600 mi/mi-main.c:2427 msgid "Invalid MI command" msgstr "" -#: mi/mi-main.c:822 +#: mi/mi-main.c:810 msgid "only '0' and '1' are valid values for the '--recurse' option" msgstr "" -#: mi/mi-main.c:834 mi/mi-main.c:839 +#: mi/mi-main.c:822 mi/mi-main.c:827 #, possible-c-format msgid "invalid syntax of group id '%s'" msgstr "" -#: mi/mi-main.c:854 +#: mi/mi-main.c:842 #, possible-c-format msgid "Non-existent thread group id '%d'" msgstr "" -#: mi/mi-main.c:914 mi/mi-main.c:986 mi/mi-main.c:1107 mi/mi-main.c:1198 +#: mi/mi-main.c:898 mi/mi-main.c:970 mi/mi-main.c:1091 mi/mi-main.c:1180 msgid "bad register number" msgstr "" -#: mi/mi-main.c:1069 +#: mi/mi-main.c:1053 msgid "" "-data-list-register-values: Usage: -data-list-register-values [--skip-" "unavailable] <format> [<regnum1>...<regnumN>]" msgstr "" -#: mi/mi-main.c:1168 +#: mi/mi-main.c:1150 msgid "" "-data-write-register-values: Usage: -data-write-register-values <format> " "[<regnum1> <value1>...<regnumN> <valueN>]" msgstr "" -#: mi/mi-main.c:1172 +#: mi/mi-main.c:1154 msgid "-data-write-register-values: No registers." msgstr "" -#: mi/mi-main.c:1175 +#: mi/mi-main.c:1157 msgid "-data-write-register-values: No regs and values specified." msgstr "" -#: mi/mi-main.c:1178 +#: mi/mi-main.c:1160 msgid "-data-write-register-values: Regs and vals are not in pairs." msgstr "" -#: mi/mi-main.c:1214 +#: mi/mi-main.c:1196 msgid "-data-evaluate-expression: Usage: -data-evaluate-expression expression" msgstr "" -#: mi/mi-main.c:1294 +#: mi/mi-main.c:1276 msgid "" "-data-read-memory: Usage: ADDR WORD-FORMAT WORD-SIZE NR-ROWS NR-COLS " "[ASCHAR]." msgstr "" -#: mi/mi-main.c:1331 +#: mi/mi-main.c:1313 msgid "-data-read-memory: invalid number of rows." msgstr "" -#: mi/mi-main.c:1336 +#: mi/mi-main.c:1318 msgid "-data-read-memory: invalid number of columns." msgstr "" -#: mi/mi-main.c:1352 mi/mi-main.c:1472 +#: mi/mi-main.c:1334 mi/mi-main.c:1454 msgid "Unable to read memory." msgstr "" -#: mi/mi-main.c:1463 +#: mi/mi-main.c:1445 msgid "Usage: [ -o OFFSET ] ADDR LENGTH." msgstr "" -#: mi/mi-main.c:1548 +#: mi/mi-main.c:1530 msgid "" "-data-write-memory: Usage: [-o COLUMN_OFFSET] ADDR FORMAT WORD-SIZE VALUE." msgstr "" -#: mi/mi-main.c:1585 +#: mi/mi-main.c:1567 msgid "Usage: ADDR DATA [COUNT]." msgstr "" -#: mi/mi-main.c:1593 +#: mi/mi-main.c:1575 #, possible-c-format msgid "" "Hex-encoded '%s' must represent an integral number of addressable memory " "units." msgstr "" -#: mi/mi-main.c:1663 +#: mi/mi-main.c:1645 #, possible-c-format msgid "-enable-timings: Usage: %s {yes|no}" msgstr "" -#: mi/mi-main.c:1692 +#: mi/mi-main.c:1674 msgid "-list-features should be passed no arguments" msgstr "" -#: mi/mi-main.c:1710 +#: mi/mi-main.c:1692 msgid "-list-target-features should be passed no arguments" msgstr "" -#: mi/mi-main.c:1719 +#: mi/mi-main.c:1701 msgid "-add-inferior should be passed no arguments" msgstr "" -#: mi/mi-main.c:1745 +#: mi/mi-main.c:1715 msgid "-remove-inferior should be passed a single argument" msgstr "" -#: mi/mi-main.c:1748 +#: mi/mi-main.c:1718 msgid "the thread group id is syntactically invalid" msgstr "" -#: mi/mi-main.c:1752 +#: mi/mi-main.c:1722 msgid "the specified thread group does not exist" msgstr "" -#: mi/mi-main.c:1755 +#: mi/mi-main.c:1725 msgid "cannot remove an active inferior" msgstr "" -#: mi/mi-main.c:1764 +#: mi/mi-main.c:1739 msgid "Cannot remove last inferior" msgstr "" -#: mi/mi-main.c:2029 +#: mi/mi-main.c:2004 msgid "Cannot specify --thread-group together with --all" msgstr "" -#: mi/mi-main.c:2032 +#: mi/mi-main.c:2007 msgid "Cannot specify --thread together with --all" msgstr "" -#: mi/mi-main.c:2035 +#: mi/mi-main.c:2010 msgid "Cannot specify --thread together with --thread-group" msgstr "" -#: mi/mi-main.c:2038 +#: mi/mi-main.c:2013 msgid "Cannot specify --frame without --thread" msgstr "" -#: mi/mi-main.c:2046 +#: mi/mi-main.c:2021 msgid "Invalid thread group for the --thread-group option" msgstr "" -#: mi/mi-main.c:2068 +#: mi/mi-main.c:2043 #, possible-c-format msgid "Invalid thread id: %d" msgstr "" -#: mi/mi-main.c:2071 +#: mi/mi-main.c:2046 #, possible-c-format msgid "Thread id: %d has terminated" msgstr "" -#: mi/mi-main.c:2086 +#: mi/mi-main.c:2061 #, possible-c-format msgid "Invalid frame id: %d" msgstr "" -#: mi/mi-main.c:2274 +#: mi/mi-main.c:2249 msgid "Usage: -trace-define-variable VARIABLE [VALUE]" msgstr "" -#: mi/mi-main.c:2278 tracepoint.c:343 +#: mi/mi-main.c:2253 tracepoint.c:343 msgid "Name of trace variable should start with '$'" msgstr "" -#: mi/mi-main.c:2296 +#: mi/mi-main.c:2271 msgid "-trace-list-variables: no arguments allowed" msgstr "" -#: mi/mi-main.c:2307 +#: mi/mi-main.c:2282 msgid "trace selection mode is required" msgstr "" -#: mi/mi-main.c:2322 +#: mi/mi-main.c:2297 msgid "frame number is required" msgstr "" -#: mi/mi-main.c:2328 +#: mi/mi-main.c:2303 msgid "tracepoint number is required" msgstr "" -#: mi/mi-main.c:2334 +#: mi/mi-main.c:2309 msgid "PC is required" msgstr "" -#: mi/mi-main.c:2340 mi/mi-main.c:2347 +#: mi/mi-main.c:2315 mi/mi-main.c:2322 msgid "Start and end PC are required" msgstr "" -#: mi/mi-main.c:2354 +#: mi/mi-main.c:2329 msgid "Line is required" msgstr "" -#: mi/mi-main.c:2362 mi/mi-main.c:2368 +#: mi/mi-main.c:2337 mi/mi-main.c:2343 msgid "Could not find the specified line" msgstr "" -#: mi/mi-main.c:2371 +#: mi/mi-main.c:2346 #, possible-c-format msgid "Invalid mode '%s'" msgstr "" -#: mi/mi-main.c:2416 +#: mi/mi-main.c:2391 msgid "Exactly one argument required (file in which to save trace data)" msgstr "" -#: mi/mi-main.c:2568 +#: mi/mi-main.c:2543 msgid "" "Usage: -trace-frame-collected [--var-print-values PRINT_VALUES] [--comp-" "print-values PRINT_VALUES] [--registers-format FORMAT][--memory-contents]" msgstr "" -#: mi/mi-main.c:2717 +#: mi/mi-main.c:2692 msgid "Usage: -complete COMMAND" msgstr "" -#: mi/mi-main.c:2720 +#: mi/mi-main.c:2695 msgid "max-completions is zero, completion is disabled." msgstr "" -#: mi/mi-main.c:2762 +#: mi/mi-main.c:2738 msgid "Set whether MI asynchronous mode is enabled." msgstr "" -#: mi/mi-main.c:2763 +#: mi/mi-main.c:2739 msgid "Show whether MI asynchronous mode is enabled." msgstr "" -#: mi/mi-main.c:2764 +#: mi/mi-main.c:2740 msgid "Tells GDB whether MI should be in asynchronous mode." msgstr "" -#: mi/mi-cmd-disas.c:150 -msgid "" -"-data-disassemble: Usage: ( [-f filename -l linenum [-n howmany]] | [-s " -"startaddr -e endaddr] | [-a addr] ) [--] mode." -msgstr "" - -#: mi/mi-cmd-disas.c:155 -msgid "-data-disassemble: Mode argument must be in the range 0-5." -msgstr "" - -#: mi/mi-cmd-disas.c:190 -msgid "-data-disassemble: Invalid filename." -msgstr "" - -#: mi/mi-cmd-disas.c:192 -msgid "-data-disassemble: Invalid line number" -msgstr "" - -#: mi/mi-cmd-disas.c:194 mi/mi-cmd-disas.c:200 -msgid "-data-disassemble: No function contains specified address" -msgstr "" - -#: mi/mi-parse.c:278 -#, possible-c-format -msgid "Undefined MI command: %s" -msgstr "" - -#: mi/mi-parse.c:317 -msgid "Duplicate '--thread-group' option" -msgstr "" - -#: mi/mi-parse.c:320 -msgid "Invalid thread group id" -msgstr "" - -#: mi/mi-parse.c:331 -msgid "Duplicate '--thread' option" -msgstr "" - -#: mi/mi-parse.c:342 -msgid "Duplicate '--frame' option" -msgstr "" - -#: mi/mi-parse.c:356 -#, possible-c-format -msgid "Invalid --language argument: %s" -msgstr "" - -#: mi/mi-parse.c:362 -#, possible-c-format -msgid "Invalid value for the '%s' option" -msgstr "" - -#: mi/mi-parse.c:372 -#, possible-c-format -msgid "Problem parsing arguments: %s %s" -msgstr "" - -#: mi/mi-parse.c:399 -#, possible-c-format -msgid "" -"Unknown value for PRINT_VALUES: must be: 0 or \"%s\", 1 or \"%s\", 2 or \"%s" -"\"" -msgstr "" - -#: mi/mi-getopt.c:37 -msgid "mi_getopt_long: oind out of bounds" +#: mi/mi-cmd-info.c:43 +msgid "Usage: -info-ada-exceptions [REGEXP]" msgstr "" -#: mi/mi-getopt.c:63 -#, possible-c-format -msgid "%s: Option %s requires an argument" +#: mi/mi-cmd-info.c:75 +msgid "Usage: -info-gdb-mi-command MI_COMMAND_NAME" msgstr "" -#: mi/mi-getopt.c:77 -#, possible-c-format -msgid "%s: Unknown option ``%s''" +#: mi/mi-cmd-info.c:103 +msgid "Usage: -info-os [INFOTYPE]" msgstr "" #: microblaze-tdep.c:548 msgid "Unsupported return value size requested" msgstr "" -#: microblaze-tdep.c:765 +#: microblaze-tdep.c:766 msgid "Set microblaze debugging." msgstr "" -#: microblaze-tdep.c:766 +#: microblaze-tdep.c:767 msgid "Show microblaze debugging." msgstr "" -#: microblaze-tdep.c:767 +#: microblaze-tdep.c:768 msgid "When non-zero, microblaze specific debugging is enabled." msgstr "" -#: minidebug.c:272 +#: minidebug.c:280 #, possible-c-format msgid ".gnu_debugdata for %s" msgstr "" -#: minidebug.c:282 +#: minidebug.c:290 msgid "Cannot parse .gnu_debugdata section; not a BFD object" msgstr "" -#: minidebug.c:286 +#: minidebug.c:297 msgid "" "Cannot parse .gnu_debugdata section; LZMA support was disabled at compile " "time" msgstr "" -#: minsyms.c:939 +#: minsyms.c:953 #, possible-c-format msgid "" "GDB cannot resolve STT_GNU_IFUNC symbol at address %s without the ELF " "support compiled in." msgstr "" -#: minsyms.c:950 +#: minsyms.c:964 #, possible-c-format msgid "" "GDB cannot resolve STT_GNU_IFUNC symbol \"%s\" without the ELF support " "compiled in." msgstr "" -#: minsyms.c:961 +#: minsyms.c:975 msgid "elf_gnu_ifunc_resolver_stop cannot be reached." msgstr "" -#: minsyms.c:970 +#: minsyms.c:984 msgid "elf_gnu_ifunc_resolver_return_stop cannot be reached." msgstr "" @@ -20781,16 +20632,16 @@ msgstr "" #: mips-linux-nat.c:305 mips-linux-nat.c:381 ppc-fbsd-nat.c:143 -#: ppc-fbsd-nat.c:171 ppc-nbsd-nat.c:109 ppc-nbsd-nat.c:141 +#: ppc-fbsd-nat.c:171 ppc-nbsd-nat.c:113 ppc-nbsd-nat.c:146 msgid "Couldn't get FP registers" msgstr "" -#: mips-linux-nat.c:372 riscv-linux-nat.c:279 riscv-linux-nat.c:303 -#: sh-nbsd-nat.c:92 +#: mips-linux-nat.c:372 riscv-linux-nat.c:294 riscv-linux-nat.c:320 +#: sh-nbsd-nat.c:95 msgid "Couldn't set registers" msgstr "" -#: mips-linux-nat.c:387 ppc-fbsd-nat.c:176 ppc-nbsd-nat.c:147 +#: mips-linux-nat.c:387 ppc-fbsd-nat.c:176 ppc-nbsd-nat.c:152 msgid "Couldn't set FP registers" msgstr "" @@ -20802,11 +20653,11 @@ msgid "Couldn't write debug register" msgstr "" -#: mips-linux-nat.c:790 +#: mips-linux-nat.c:791 msgid "Set whether to show variables that mirror the mips debug registers." msgstr "" -#: mips-linux-nat.c:791 +#: mips-linux-nat.c:792 msgid "Show whether to show variables that mirror the mips debug registers." msgstr "" @@ -20865,57 +20716,57 @@ msgid "mips_read_fp_register_double: bad access to odd-numbered FP register" msgstr "" -#: mips-tdep.c:6596 riscv-tdep.c:959 +#: mips-tdep.c:6593 riscv-tdep.c:1062 msgid "Not a valid register for the current processor type" msgstr "" -#: mips-tdep.c:6958 mips-tdep.c:6972 mips-tdep.c:6986 +#: mips-tdep.c:6930 mips-tdep.c:6944 mips-tdep.c:6958 msgid "set mipsfpu failed" msgstr "" -#: mips-tdep.c:7999 +#: mips-tdep.c:7971 #, possible-c-format msgid "unsupported ABI %s." msgstr "" -#: mips-tdep.c:8013 +#: mips-tdep.c:7985 msgid "unrecognized .gcc_compiled_longXX" msgstr "" -#: mips-tdep.c:8025 +#: mips-tdep.c:7997 msgid "unknown ABI string" msgstr "" -#: mips-tdep.c:8042 +#: mips-tdep.c:8014 msgid "unknown compressed ISA string" msgstr "" -#: mips-tdep.c:8606 mips-tdep.c:8655 +#: mips-tdep.c:8578 mips-tdep.c:8627 msgid "unknown ABI in switch" msgstr "" -#: mips-tdep.c:8893 +#: mips-tdep.c:8865 #, possible-c-format msgid "The compressed ISA encoding used is %s.\n" msgstr "" -#: mips-tdep.c:8982 +#: mips-tdep.c:8955 msgid "mips_abi_strings out of sync" msgstr "" -#: mips-tdep.c:8996 mips-tdep.c:9000 +#: mips-tdep.c:8969 mips-tdep.c:8973 msgid "Various MIPS specific commands." msgstr "" -#: mips-tdep.c:9005 +#: mips-tdep.c:8978 msgid "Set the MIPS ABI used by this program." msgstr "" -#: mips-tdep.c:9006 +#: mips-tdep.c:8979 msgid "Show the MIPS ABI used by this program." msgstr "" -#: mips-tdep.c:9007 +#: mips-tdep.c:8980 msgid "" "This option can be set to one of:\n" " auto - the default ABI associated with the current binary\n" @@ -20927,15 +20778,15 @@ " eabi64" msgstr "" -#: mips-tdep.c:9025 +#: mips-tdep.c:8998 msgid "Set the compressed ISA encoding used by MIPS code." msgstr "" -#: mips-tdep.c:9026 +#: mips-tdep.c:8999 msgid "Show the compressed ISA encoding used by MIPS code." msgstr "" -#: mips-tdep.c:9027 +#: mips-tdep.c:9000 msgid "" "Select the compressed ISA encoding used in functions that have no symbol\n" "information available. The encoding can be set to either of:\n" @@ -20944,74 +20795,74 @@ "and is updated automatically from ELF file flags if available." msgstr "" -#: mips-tdep.c:9041 +#: mips-tdep.c:9014 msgid "Set use of MIPS floating-point coprocessor." msgstr "" -#: mips-tdep.c:9044 +#: mips-tdep.c:9017 msgid "Select single-precision MIPS floating-point coprocessor." msgstr "" -#: mips-tdep.c:9047 +#: mips-tdep.c:9020 msgid "Select double-precision MIPS floating-point coprocessor." msgstr "" -#: mips-tdep.c:9053 +#: mips-tdep.c:9026 msgid "Select no MIPS floating-point coprocessor." msgstr "" -#: mips-tdep.c:9058 +#: mips-tdep.c:9031 msgid "Select MIPS floating-point coprocessor automatically." msgstr "" -#: mips-tdep.c:9061 +#: mips-tdep.c:9034 msgid "Show current use of MIPS floating-point coprocessor target." msgstr "" -#: mips-tdep.c:9082 +#: mips-tdep.c:9055 msgid "Set zeroing of upper 32 bits of 64-bit addresses." msgstr "" -#: mips-tdep.c:9083 +#: mips-tdep.c:9056 msgid "Show zeroing of upper 32 bits of 64-bit addresses." msgstr "" -#: mips-tdep.c:9084 +#: mips-tdep.c:9057 msgid "" "Use \"on\" to enable the masking, \"off\" to disable it and \"auto\" to\n" "allow GDB to determine the correct value." msgstr "" -#: mips-tdep.c:9093 +#: mips-tdep.c:9066 msgid "" "Set compatibility with 64-bit MIPS target that transfers 32-bit quantities." msgstr "" -#: mips-tdep.c:9095 +#: mips-tdep.c:9068 msgid "" "Show compatibility with 64-bit MIPS target that transfers 32-bit quantities." msgstr "" -#: mips-tdep.c:9097 +#: mips-tdep.c:9070 msgid "" "Use \"on\" to enable backward compatibility with older MIPS 64 GDB+target\n" "that would transfer 32 bits for some registers (e.g. SR, FSR) and\n" "64 bits for others. Use \"off\" to disable compatibility mode" msgstr "" -#: mips-tdep.c:9109 +#: mips-tdep.c:9082 msgid "Set mips debugging." msgstr "" -#: mips-tdep.c:9110 +#: mips-tdep.c:9083 msgid "Show mips debugging." msgstr "" -#: mips-tdep.c:9111 +#: mips-tdep.c:9084 msgid "When non-zero, mips specific debugging is enabled." msgstr "" -#: mipsread.c:80 +#: mipsread.c:79 #, possible-c-format msgid "Error reading symbol table: %s" msgstr "" @@ -21043,109 +20894,115 @@ msgid "Unknown msp430 isa" msgstr "" -#: nat/linux-ptrace.c:44 +#: nat/linux-procfs.c:290 #, possible-c-format -msgid "process %d is already traced by process %d" +msgid "Could not open /proc/%ld/task." msgstr "" -#: nat/linux-ptrace.c:49 -#, possible-c-format -msgid "process %d is a zombie - the process has already terminated" +#: nat/linux-procfs.c:375 +msgid "/proc is not accessible." msgstr "" -#: nat/linux-ptrace.c:92 -#, possible-c-format -msgid "%s: failed to kill child pid %ld %s" +#: nat/linux-btrace.c:339 +msgid "Branch trace may be incomplete." msgstr "" -#: nat/linux-ptrace.c:101 +#: nat/linux-btrace.c:436 #, possible-c-format -msgid "%s: kill waitpid returned %ld: %s" +msgid "" +"You do not have permission to record the process. Try setting %s to 2 or " +"less." msgstr "" -#: nat/linux-ptrace.c:108 +#: nat/linux-btrace.c:443 #, possible-c-format -msgid "%s: kill status %d is not WIFSIGNALED!" +msgid "Failed to start recording: %s" msgstr "" -#: nat/linux-ptrace.c:135 -#, possible-c-format -msgid "linux_ptrace_test_ret_to_nx: Cannot mmap: %s" +#: nat/linux-btrace.c:457 +msgid "BTS support has been disabled for the target cpu." msgstr "" -#: nat/linux-ptrace.c:147 +#: nat/linux-btrace.c:529 nat/linux-btrace.c:669 #, possible-c-format -msgid "linux_ptrace_test_ret_to_nx: Cannot fork: %s" +msgid "Failed to map trace buffer: %s." msgstr "" -#: nat/linux-ptrace.c:155 -#, possible-c-format -msgid "linux_ptrace_test_ret_to_nx: Cannot PTRACE_TRACEME: %s" +#: nat/linux-btrace.c:547 +msgid "Failed to determine trace buffer size." msgstr "" -#: nat/linux-ptrace.c:185 +#: nat/linux-btrace.c:578 #, possible-c-format -msgid "linux_ptrace_test_ret_to_nx: waitpid returned %ld: %s" +msgid "Failed to read the PT event type from %s." msgstr "" -#: nat/linux-ptrace.c:193 +#: nat/linux-btrace.c:619 #, possible-c-format -msgid "linux_ptrace_test_ret_to_nx: WTERMSIG %d is not SIGKILL!" +msgid "Failed to map trace user page: %s." msgstr "" -#: nat/linux-ptrace.c:196 -msgid "" -"Cannot call inferior functions, Linux kernel PaX protection forbids return " -"to non-executable pages!" +#: nat/linux-btrace.c:700 +msgid "Bad branch trace format." msgstr "" -#: nat/linux-ptrace.c:203 +#: nat/linux-btrace.c:898 +msgid "Unknown btrace read type." +msgstr "" + +#: nat/linux-btrace.c:929 +msgid "Unkown branch trace format." +msgstr "" + +#: nat/aarch64-linux-hw-point.c:79 #, possible-c-format -msgid "linux_ptrace_test_ret_to_nx: status %d is not WIFSTOPPED!" +msgid "Unexpected hardware watchpoint length register value 0x%x" msgstr "" -#: nat/linux-ptrace.c:212 +#: nat/aarch64-linux-hw-point.c:113 +msgid "Unrecognized breakpoint/watchpoint type" +msgstr "" + +#: nat/aarch64-linux-hw-point.c:707 +msgid "Unexpected error setting hardware debug registers" +msgstr "" + +#: nat/aarch64-linux-hw-point.c:786 #, possible-c-format msgid "" -"linux_ptrace_test_ret_to_nx: WSTOPSIG %d is neither SIGTRAP nor SIGSEGV!" +"Unexpected number of hardware watchpoint registers reported by ptrace, got " +"%d, expected %d." msgstr "" -#: nat/linux-ptrace.c:222 -#, possible-c-format -msgid "linux_ptrace_test_ret_to_nx: Cannot PTRACE_GETREGS: %s" +#: nat/aarch64-linux-hw-point.c:794 +msgid "Unable to determine the number of hardware watchpoints available." msgstr "" -#: nat/linux-ptrace.c:250 +#: nat/aarch64-linux-hw-point.c:808 #, possible-c-format msgid "" -"linux_ptrace_test_ret_to_nx: PC %p is neither near return address %p nor is " -"the return instruction %p!" +"Unexpected number of hardware breakpoint registers reported by ptrace, got " +"%d, expected %d." msgstr "" -#: nat/linux-ptrace.c:254 -msgid "" -"Cannot call inferior functions on this system - Linux kernel with broken " -"i386 NX (non-executable pages) support detected!" +#: nat/aarch64-linux-hw-point.c:816 +msgid "Unable to determine the number of hardware breakpoints available." msgstr "" -#: nat/linux-ptrace.c:359 -#, possible-c-format -msgid "linux_check_ptrace_features: waitpid: unexpected result %d." +#: nat/aarch64-sve-linux-ptrace.c:55 +msgid "Invalid SVE state from kernel; SVE disabled." msgstr "" -#: nat/linux-ptrace.c:362 -#, possible-c-format -msgid "linux_check_ptrace_features: waitpid: unexpected status %d." +#: nat/aarch64-sve-linux-ptrace.c:128 +msgid "Unable to fetch SVE register header" msgstr "" -#: nat/linux-ptrace.c:429 -msgid "linux_test_for_tracefork: failed to resume child" +#: nat/aarch64-sve-linux-ptrace.c:140 +msgid "Unable to fetch SVE registers" msgstr "" -#: nat/linux-ptrace.c:459 -#, possible-c-format -msgid "" -"linux_test_for_tracefork: unexpected result from waitpid (%d, status 0x%x)" +#: nat/aarch64-sve-linux-ptrace.c:160 nat/aarch64-sve-linux-ptrace.c:231 +msgid "Invalid SVE header from kernel." msgstr "" #: nat/linux-personality.c:49 @@ -21158,109 +21015,153 @@ msgid "Error restoring address space randomization: %s" msgstr "" -#: nat/x86-dregs.c:228 -msgid "The i386 doesn't support data-read watchpoints.\n" +#: nat/x86-linux-dregs.c:52 +msgid "Couldn't read debug register" msgstr "" -#: nat/x86-dregs.c:240 +#: nat/mips-linux-watch.c:36 nat/mips-linux-watch.c:54 +#: nat/mips-linux-watch.c:71 nat/mips-linux-watch.c:89 +#: nat/mips-linux-watch.c:112 nat/mips-linux-watch.c:130 +#: nat/mips-linux-watch.c:151 +msgid "Unrecognized watch register style" +msgstr "" + +#: nat/fork-inferior.c:512 #, possible-c-format -msgid "Invalid hardware breakpoint type %d in x86_length_and_rw_bits.\n" +msgid "During startup program terminated with signal %s, %s." msgstr "" -#: nat/x86-dregs.c:258 +#: nat/fork-inferior.c:521 #, possible-c-format -msgid "Invalid hardware breakpoint length %d in x86_length_and_rw_bits.\n" +msgid "During startup program exited with code %d." msgstr "" -#: nat/x86-dregs.c:428 +#: nat/fork-inferior.c:524 +msgid "During startup program exited normally." +msgstr "" + +#: nat/linux-ptrace.c:44 #, possible-c-format -msgid "Invalid value %d of operation in x86_handle_nonaligned_watchpoint.\n" +msgid "process %d is already traced by process %d" msgstr "" -#: nat/aarch64-linux-hw-point.c:79 +#: nat/linux-ptrace.c:49 #, possible-c-format -msgid "Unexpected hardware watchpoint length register value 0x%x" +msgid "process %d is a zombie - the process has already terminated" msgstr "" -#: nat/aarch64-linux-hw-point.c:113 -msgid "Unrecognized breakpoint/watchpoint type" +#: nat/linux-ptrace.c:92 +#, possible-c-format +msgid "%s: failed to kill child pid %ld %s" msgstr "" -#: nat/aarch64-linux-hw-point.c:707 -msgid "Unexpected error setting hardware debug registers" +#: nat/linux-ptrace.c:101 +#, possible-c-format +msgid "%s: kill waitpid returned %ld: %s" msgstr "" -#: nat/aarch64-linux-hw-point.c:786 +#: nat/linux-ptrace.c:108 #, possible-c-format -msgid "" -"Unexpected number of hardware watchpoint registers reported by ptrace, got " -"%d, expected %d." +msgid "%s: kill status %d is not WIFSIGNALED!" msgstr "" -#: nat/aarch64-linux-hw-point.c:794 -msgid "Unable to determine the number of hardware watchpoints available." +#: nat/linux-ptrace.c:135 +#, possible-c-format +msgid "linux_ptrace_test_ret_to_nx: Cannot mmap: %s" msgstr "" -#: nat/aarch64-linux-hw-point.c:808 +#: nat/linux-ptrace.c:147 #, possible-c-format -msgid "" -"Unexpected number of hardware breakpoint registers reported by ptrace, got " -"%d, expected %d." +msgid "linux_ptrace_test_ret_to_nx: Cannot fork: %s" msgstr "" -#: nat/aarch64-linux-hw-point.c:816 -msgid "Unable to determine the number of hardware breakpoints available." +#: nat/linux-ptrace.c:155 +#, possible-c-format +msgid "linux_ptrace_test_ret_to_nx: Cannot PTRACE_TRACEME: %s" msgstr "" -#: nat/linux-btrace.c:336 -msgid "Branch trace may be incomplete." +#: nat/linux-ptrace.c:185 +#, possible-c-format +msgid "linux_ptrace_test_ret_to_nx: waitpid returned %ld: %s" msgstr "" -#: nat/linux-btrace.c:430 +#: nat/linux-ptrace.c:193 #, possible-c-format +msgid "linux_ptrace_test_ret_to_nx: WTERMSIG %d is not SIGKILL!" +msgstr "" + +#: nat/linux-ptrace.c:196 msgid "" -"You do not have permission to record the process. Try setting %s to 2 or " -"less." +"Cannot call inferior functions, Linux kernel PaX protection forbids return " +"to non-executable pages!" msgstr "" -#: nat/linux-btrace.c:437 +#: nat/linux-ptrace.c:203 #, possible-c-format -msgid "Failed to start recording: %s" +msgid "linux_ptrace_test_ret_to_nx: status %d is not WIFSTOPPED!" msgstr "" -#: nat/linux-btrace.c:451 -msgid "BTS support has been disabled for the target cpu." +#: nat/linux-ptrace.c:212 +#, possible-c-format +msgid "" +"linux_ptrace_test_ret_to_nx: WSTOPSIG %d is neither SIGTRAP nor SIGSEGV!" msgstr "" -#: nat/linux-btrace.c:523 nat/linux-btrace.c:663 +#: nat/linux-ptrace.c:222 #, possible-c-format -msgid "Failed to map trace buffer: %s." +msgid "linux_ptrace_test_ret_to_nx: Cannot PTRACE_GETREGS: %s" msgstr "" -#: nat/linux-btrace.c:541 -msgid "Failed to determine trace buffer size." +#: nat/linux-ptrace.c:250 +#, possible-c-format +msgid "" +"linux_ptrace_test_ret_to_nx: PC %p is neither near return address %p nor is " +"the return instruction %p!" +msgstr "" + +#: nat/linux-ptrace.c:254 +msgid "" +"Cannot call inferior functions on this system - Linux kernel with broken " +"i386 NX (non-executable pages) support detected!" msgstr "" -#: nat/linux-btrace.c:572 +#: nat/linux-ptrace.c:359 #, possible-c-format -msgid "Failed to read the PT event type from %s." +msgid "linux_check_ptrace_features: waitpid: unexpected result %d." msgstr "" -#: nat/linux-btrace.c:613 +#: nat/linux-ptrace.c:362 #, possible-c-format -msgid "Failed to map trace user page: %s." +msgid "linux_check_ptrace_features: waitpid: unexpected status %d." msgstr "" -#: nat/linux-btrace.c:694 -msgid "Bad branch trace format." +#: nat/linux-ptrace.c:429 +msgid "linux_test_for_tracefork: failed to resume child" msgstr "" -#: nat/linux-btrace.c:697 -msgid "Unknown branch trace format." +#: nat/linux-ptrace.c:459 +#, possible-c-format +msgid "" +"linux_test_for_tracefork: unexpected result from waitpid (%d, status 0x%x)" +msgstr "" + +#: nat/x86-dregs.c:228 +msgid "The i386 doesn't support data-read watchpoints.\n" +msgstr "" + +#: nat/x86-dregs.c:240 +#, possible-c-format +msgid "Invalid hardware breakpoint type %d in x86_length_and_rw_bits.\n" +msgstr "" + +#: nat/x86-dregs.c:258 +#, possible-c-format +msgid "Invalid hardware breakpoint length %d in x86_length_and_rw_bits.\n" msgstr "" -#: nat/linux-btrace.c:892 -msgid "Unkown btrace read type." +#: nat/x86-dregs.c:428 +#, possible-c-format +msgid "Invalid value %d of operation in x86_handle_nonaligned_watchpoint.\n" msgstr "" #: nat/linux-namespaces.c:740 @@ -21292,54 +21193,27 @@ msgid "unknown pid %d" msgstr "" -#: nat/x86-linux-dregs.c:52 -msgid "Couldn't read debug register" -msgstr "" - -#: nat/fork-inferior.c:511 -#, possible-c-format -msgid "During startup program terminated with signal %s, %s." -msgstr "" - -#: nat/fork-inferior.c:520 +#: nat/windows-nat.c:73 #, possible-c-format -msgid "During startup program exited with code %d." -msgstr "" - -#: nat/fork-inferior.c:523 -msgid "During startup program exited normally." -msgstr "" - -#: nat/aarch64-sve-linux-ptrace.c:55 -msgid "Invalid SVE state from kernel; SVE disabled." -msgstr "" - -#: nat/aarch64-sve-linux-ptrace.c:113 -msgid "Unable to fetch SVE register header" -msgstr "" - -#: nat/aarch64-sve-linux-ptrace.c:125 -msgid "Unable to fetch SVE registers" -msgstr "" - -#: nat/aarch64-sve-linux-ptrace.c:145 nat/aarch64-sve-linux-ptrace.c:216 -msgid "Invalid SVE header from kernel." +msgid "SuspendThread (tid=0x%x) failed. (winerr %u)" msgstr "" -#: nat/linux-procfs.c:290 +#: nat/windows-nat.c:91 #, possible-c-format -msgid "Could not open /proc/%ld/task." +msgid "warning: ResumeThread (tid=0x%x) failed. (winerr %u)" msgstr "" -#: nat/linux-procfs.c:375 -msgid "/proc is not accessible." +#: nbsd-nat.c:560 +msgid "Child process unexpectedly missing" msgstr "" -#: nat/mips-linux-watch.c:36 nat/mips-linux-watch.c:54 -#: nat/mips-linux-watch.c:71 nat/mips-linux-watch.c:89 -#: nat/mips-linux-watch.c:112 nat/mips-linux-watch.c:130 -#: nat/mips-linux-watch.c:151 -msgid "Unrecognized watch register style" +#. NetBSD doesn't use gdbarch_get_syscall_number since NetBSD +#. native targets fetch the system call number from the +#. 'si_sysnum' member of siginfo_t in nbsd_nat_target::wait. +#. However, system call catching requires this function to be +#. set. +#: nbsd-tdep.c:607 +msgid "nbsd_get_sycall_number called" msgstr "" #: nds32-tdep.c:417 nds32-tdep.c:432 @@ -21363,15 +21237,15 @@ msgid "Cannot store return value of %d bytes long floating-point." msgstr "" -#: nios2-tdep.c:2401 +#: nios2-tdep.c:2402 msgid "Set Nios II debugging." msgstr "" -#: nios2-tdep.c:2402 +#: nios2-tdep.c:2403 msgid "Show Nios II debugging." msgstr "" -#: nios2-tdep.c:2403 +#: nios2-tdep.c:2404 msgid "When on, Nios II specific debugging is enabled." msgstr "" @@ -21411,30 +21285,30 @@ msgid "Invalid target CPU." msgstr "" -#: nto-procfs.c:703 procfs.c:1879 +#: nto-procfs.c:702 procfs.c:1768 msgid "Attaching GDB to itself is not a good idea..." msgstr "" -#: nto-procfs.c:745 +#: nto-procfs.c:746 #, possible-c-format msgid "Couldn't open proc file %s, error %d (%s)" msgstr "" -#: nto-procfs.c:748 +#: nto-procfs.c:749 msgid "Couldn't stop process" msgstr "" -#: nto-procfs.c:769 +#: nto-procfs.c:770 msgid "" "Interrupted while waiting for the program.\n" "Give up (and stop debugging it)? " msgstr "" -#: nto-procfs.c:1123 +#: nto-procfs.c:1121 msgid "run error!\n" msgstr "" -#: nto-procfs.c:1297 +#: nto-procfs.c:1295 #, possible-c-format msgid "Error spawning %s: %d (%s)" msgstr "" @@ -21463,99 +21337,91 @@ msgid "NSString: internal error -- no way to create new NSString" msgstr "" -#: objc-lang.c:496 +#: objc-lang.c:509 #, possible-c-format msgid "Can't find selector \"%s\"" msgstr "" -#: objc-lang.c:543 +#: objc-lang.c:556 msgid "internal: compare_selectors(1)" msgstr "" -#: objc-lang.c:548 +#: objc-lang.c:561 msgid "internal: compare_selectors(2)" msgstr "" -#: objc-lang.c:591 objc-lang.c:745 +#: objc-lang.c:604 objc-lang.c:758 #, possible-c-format msgid "Regexp is too long: %s" msgstr "" -#: objc-lang.c:604 objc-lang.c:758 thread.c:1917 +#: objc-lang.c:617 objc-lang.c:771 thread.c:1947 #, possible-c-format msgid "Invalid regexp (%s): %s" msgstr "" -#: objc-lang.c:625 +#: objc-lang.c:638 #, possible-c-format msgid "Bad method name '%s'" msgstr "" -#: objc-lang.c:643 +#: objc-lang.c:656 #, possible-c-format msgid "" "Selectors matching \"%s\":\n" "\n" msgstr "" -#: objc-lang.c:693 +#: objc-lang.c:706 #, possible-c-format msgid "No selectors matching \"%s\"\n" msgstr "" -#: objc-lang.c:712 +#: objc-lang.c:725 msgid "internal: compare_classes(1)" msgstr "" -#: objc-lang.c:785 +#: objc-lang.c:798 #, possible-c-format msgid "" "Classes matching \"%s\":\n" "\n" msgstr "" -#: objc-lang.c:827 +#: objc-lang.c:840 #, possible-c-format msgid "No classes matching \"%s\"\n" msgstr "" -#: objc-lang.c:1190 +#: objc-lang.c:1203 msgid "Unable to locate _NSPrintForDebugger in child process" msgstr "" -#: objc-lang.c:1196 +#: objc-lang.c:1209 msgid "object returns null description" msgstr "" -#: objc-lang.c:1207 +#: objc-lang.c:1220 msgid "<object returns empty description>" msgstr "" -#: objc-lang.c:1339 +#: objc-lang.c:1353 msgid "All Objective-C selectors, or those matching REGEXP." msgstr "" -#: objc-lang.c:1341 +#: objc-lang.c:1355 msgid "All Objective-C classes, or those matching REGEXP." msgstr "" -#: objc-lang.c:1343 +#: objc-lang.c:1357 msgid "Ask an Objective-C object to print itself." msgstr "" -#: objfiles.c:425 +#: objfiles.c:401 msgid "Entry point address is not known." msgstr "" -#: objfiles.c:494 -msgid "unlink_objfile: objfile already unlinked" -msgstr "" - -#: objfiles.c:518 -msgid "put_objfile_before: before objfile not in list" -msgstr "" - -#: objfiles.c:1212 +#: objfiles.c:1129 #, possible-c-format msgid "" "unexpected overlap between:\n" @@ -21565,32 +21431,32 @@ msgstr "" #. Nothing. -#: objfiles.h:729 +#: objfiles.h:170 msgid "sect_index_data not initialized" msgstr "" -#: objfiles.h:735 +#: objfiles.h:176 msgid "sect_index_rodata not initialized" msgstr "" -#: objfiles.h:741 +#: objfiles.h:182 msgid "sect_index_text not initialized" msgstr "" -#: observable.c:86 +#: observable.c:87 #, possible-c-format msgid "Observer debugging is %s.\n" msgstr "" -#: observable.c:93 +#: observable.c:95 msgid "Set observer debugging." msgstr "" -#: observable.c:94 +#: observable.c:96 msgid "Show observer debugging." msgstr "" -#: observable.c:95 +#: observable.c:97 msgid "When non-zero, observer debugging is enabled." msgstr "" @@ -21600,8 +21466,8 @@ msgstr "" #: opencl-lang.c:182 opencl-lang.c:211 opencl-lang.c:390 opencl-lang.c:507 -#: opencl-lang.c:600 opencl-lang.c:911 valarith.c:1308 valarith.c:1354 -#: valarith.c:1656 valarith.c:1689 valops.c:865 +#: opencl-lang.c:600 opencl-lang.c:910 valarith.c:1454 valarith.c:1500 +#: valarith.c:1803 valarith.c:1845 valops.c:865 msgid "Could not determine the vector bounds" msgstr "" @@ -21623,20 +21489,20 @@ msgid "Vector operations are not supported on scalar types" msgstr "" -#: opencl-lang.c:607 opencl-lang.c:918 valarith.c:1364 +#: opencl-lang.c:607 opencl-lang.c:917 valarith.c:1510 msgid "Cannot perform operation on vectors with different types" msgstr "" -#: opencl-lang.c:714 valarith.c:1407 +#: opencl-lang.c:714 valarith.c:1553 msgid "Argument to operation not a number or boolean." msgstr "" #. Throw an error if arg2 or arg3 aren't vectors. -#: opencl-lang.c:901 +#: opencl-lang.c:900 msgid "Cannot perform conditional operation on incompatible types" msgstr "" -#: opencl-lang.c:924 +#: opencl-lang.c:923 msgid "Cannot perform conditional operation on vectors with different sizes" msgstr "" @@ -21665,84 +21531,84 @@ msgid "end addr %s is less than start addr %s" msgstr "" -#: or1k-tdep.c:1282 +#: or1k-tdep.c:1283 msgid "Set OpenRISC debugging." msgstr "" -#: or1k-tdep.c:1283 +#: or1k-tdep.c:1284 msgid "Show OpenRISC debugging." msgstr "" -#: or1k-tdep.c:1284 +#: or1k-tdep.c:1285 msgid "When on, OpenRISC specific debugging is enabled." msgstr "" -#: osabi.c:159 +#: osabi.c:160 #, possible-c-format msgid "" "gdbarch_register_osabi: An attempt to register a handler for OS ABI \"%s\" " "for architecture %s was made. The handler will not be registered" msgstr "" -#: osabi.c:177 +#: osabi.c:178 #, possible-c-format msgid "" "gdbarch_register_osabi: A handler for OS ABI \"%s\" has already been " "registered for architecture %s" msgstr "" -#: osabi.c:269 +#: osabi.c:270 #, possible-c-format msgid "" "gdbarch_lookup_osabi: invalid OS ABI (%d) from sniffer for architecture %s " "flavour %d" msgstr "" -#: osabi.c:288 +#: osabi.c:289 #, possible-c-format msgid "" "gdbarch_lookup_osabi: multiple %sspecific OS ABI match for architecture %s " "flavour %d: first match \"%s\", second match \"%s\"" msgstr "" -#: osabi.c:493 +#: osabi.c:494 #, possible-c-format msgid "GNU ABI tag value %u unrecognized." msgstr "" -#: osabi.c:627 +#: osabi.c:628 #, possible-c-format msgid "Invalid OS ABI \"%s\" passed to command handler." msgstr "" -#: osabi.c:635 +#: osabi.c:636 msgid "Updating OS ABI failed." msgstr "" -#: osabi.c:644 +#: osabi.c:645 #, possible-c-format msgid "The current OS ABI is \"auto\" (currently \"%s\").\n" msgstr "" -#: osabi.c:648 +#: osabi.c:649 #, possible-c-format msgid "The current OS ABI is \"%s\".\n" msgstr "" -#: osabi.c:652 +#: osabi.c:653 #, possible-c-format msgid "The default OS ABI is \"%s\".\n" msgstr "" -#: osabi.c:662 +#: osabi.c:664 msgid "_initialize_gdb_osabi: gdb_osabi_names[] is inconsistent" msgstr "" -#: osabi.c:672 +#: osabi.c:674 msgid "Set OS ABI of target." msgstr "" -#: osabi.c:673 +#: osabi.c:675 msgid "Show OS ABI of target." msgstr "" @@ -21774,7 +21640,7 @@ msgid "Available types of OS data not reported." msgstr "" -#: osdata.c:296 +#: osdata.c:297 msgid "Show OS data ARG." msgstr "" @@ -21786,21 +21652,21 @@ msgid "type not handled in pascal_type_print_varspec_suffix()" msgstr "" -#: p-valprint.c:416 +#: p-valprint.c:398 #, possible-c-format msgid "Invalid pascal type code %d in symbol table." msgstr "" -#: p-valprint.c:463 +#: p-valprint.c:446 #, possible-c-format msgid "Printing of pascal static members is %s.\n" msgstr "" -#: p-valprint.c:898 +#: p-valprint.c:869 msgid "Set printing of pascal static members." msgstr "" -#: p-valprint.c:899 +#: p-valprint.c:870 msgid "Show printing of pascal static members." msgstr "" @@ -21822,104 +21688,118 @@ msgid "expression to compute" msgstr "" -#: parse.c:1169 +#: parse.c:1168 msgid "Junk after end of expression." msgstr "" -#: parse.c:1444 +#: parse.c:1436 msgid "Set expression debugging." msgstr "" -#: parse.c:1445 +#: parse.c:1437 msgid "Show expression debugging." msgstr "" -#: parse.c:1446 +#: parse.c:1438 msgid "" "When non-zero, the internal representation of expressions will be printed." msgstr "" -#: parse.c:1453 +#: parse.c:1445 msgid "Set parser debugging." msgstr "" -#: parse.c:1454 +#: parse.c:1446 msgid "Show parser debugging." msgstr "" -#: parse.c:1455 +#: parse.c:1447 msgid "When non-zero, expression parser tracing will be enabled." msgstr "" -#: ppc-fbsd-tdep.c:308 +#: ppc-fbsd-tdep.c:310 msgid "Unable to fetch tcb pointer" msgstr "" -#: ppc-linux-nat.c:429 ppc-linux-nat.c:1049 ppc-linux-nat.c:2632 -msgid "Unable to fetch VSX registers" +#: ppc-linux-nat.c:436 +msgid "" +"Error when detecting the debug register interface. Debug registers will be " +"unavailable." msgstr "" -#: ppc-linux-nat.c:456 ppc-linux-nat.c:1077 ppc-linux-nat.c:2646 +#: ppc-linux-nat.c:727 ppc-linux-nat.c:1347 ppc-linux-nat.c:1978 +msgid "Unable to fetch VSX registers" +msgstr "" + +#: ppc-linux-nat.c:754 ppc-linux-nat.c:1375 ppc-linux-nat.c:1992 msgid "Unable to fetch AltiVec registers" msgstr "" #. Anything else needs to be reported. -#: ppc-linux-nat.c:486 ppc-linux-nat.c:2611 +#: ppc-linux-nat.c:784 ppc-linux-nat.c:1957 msgid "Unable to fetch SPE registers" msgstr "" -#: ppc-linux-nat.c:555 ppc-linux-nat.c:579 s390-linux-nat.c:362 +#: ppc-linux-nat.c:853 ppc-linux-nat.c:877 s390-linux-nat.c:362 #: s390-linux-nat.c:382 msgid "Couldn't get register set" msgstr "" -#: ppc-linux-nat.c:584 s390-linux-nat.c:387 +#: ppc-linux-nat.c:882 s390-linux-nat.c:387 msgid "Couldn't set register set" msgstr "" -#: ppc-linux-nat.c:813 +#: ppc-linux-nat.c:1111 #, possible-c-format msgid "fetch_register: unexpected byte order: %d" msgstr "" -#: ppc-linux-nat.c:837 ppc-linux-nat.c:1389 +#: ppc-linux-nat.c:1135 ppc-linux-nat.c:1687 msgid "Couldn't get general-purpose registers." msgstr "" -#: ppc-linux-nat.c:889 ppc-linux-nat.c:1451 +#: ppc-linux-nat.c:1187 ppc-linux-nat.c:1749 msgid "Couldn't get floating-point registers." msgstr "" -#: ppc-linux-nat.c:1057 +#: ppc-linux-nat.c:1355 msgid "Unable to store VSX registers" msgstr "" -#: ppc-linux-nat.c:1085 +#: ppc-linux-nat.c:1383 msgid "Unable to store AltiVec registers" msgstr "" #. Anything else needs to be reported. -#: ppc-linux-nat.c:1112 +#: ppc-linux-nat.c:1410 msgid "Unable to set SPE registers" msgstr "" -#: ppc-linux-nat.c:1401 +#: ppc-linux-nat.c:1699 msgid "Couldn't set general-purpose registers." msgstr "" -#: ppc-linux-nat.c:1463 +#: ppc-linux-nat.c:1761 msgid "Couldn't set floating-point registers." msgstr "" -#: ppc-linux-nat.c:1796 -msgid "Unexpected error setting breakpoint or watchpoint" +#: ppc-linux-nat.c:2872 +msgid "Error deleting hardware breakpoint or watchpoint" +msgstr "" + +#: ppc-linux-nat.c:2899 +msgid "Error setting hardware breakpoint or watchpoint" +msgstr "" + +#: ppc-linux-nat.c:2918 +msgid "Error clearing hardware watchpoint" msgstr "" -#: ppc-linux-nat.c:1843 -msgid "Unexpected error deleting breakpoint or watchpoint" +#: ppc-linux-nat.c:2927 +msgid "Error setting hardware watchpoint" msgstr "" -#: ppc-linux-nat.c:2501 +#: ppc-linux-nat.c:3028 msgid "The given mask covers kernel address space and cannot be used.\n" msgstr "" @@ -21942,12 +21822,12 @@ msgid "Printing of source filename and line number with <symbol> is %s.\n" msgstr "" -#: printcmd.c:399 +#: printcmd.c:396 #, possible-c-format msgid "Undefined output size \"%c\"." msgstr "" -#: printcmd.c:503 +#: printcmd.c:499 #, possible-c-format msgid "Undefined output format \"%c\"." msgstr "" @@ -21955,246 +21835,250 @@ #. We reach here when line info is not available. In this case, #. we print a message and just exit the loop. The return value #. is calculated after the loop. -#: printcmd.c:803 +#: printcmd.c:799 msgid "No line number information available for address " msgstr "" #. The read was unsuccessful, so exit the loop. -#: printcmd.c:889 +#: printcmd.c:885 #, possible-c-format msgid "Cannot access memory at address %s\n" msgstr "" -#: printcmd.c:1040 +#: printcmd.c:1036 #, possible-c-format msgid "Unable to display strings with size '%c', using 'b' instead." msgstr "" -#: printcmd.c:1137 +#: printcmd.c:1133 #, possible-c-format msgid "Size letters are meaningless in \"%s\" command." msgstr "" -#: printcmd.c:1139 +#: printcmd.c:1135 #, possible-c-format msgid "Item count other than 1 is meaningless in \"%s\" command." msgstr "" -#: printcmd.c:1142 +#: printcmd.c:1138 #, possible-c-format msgid "Format letter \"%c\" is meaningless in \"%s\" command." msgstr "" -#: printcmd.c:1312 +#: printcmd.c:1308 msgid "Expression is not an assignment (and might have no effect)" msgstr "" -#: printcmd.c:1328 +#: printcmd.c:1324 msgid "address" msgstr "" -#: printcmd.c:1352 +#: printcmd.c:1348 msgid "mapped" msgstr "" -#: printcmd.c:1352 +#: printcmd.c:1348 msgid "unmapped" msgstr "" -#: printcmd.c:1373 +#: printcmd.c:1369 #, possible-c-format msgid "%s in load address range of %s overlay section %s of %s\n" msgstr "" -#: printcmd.c:1377 +#: printcmd.c:1373 #, possible-c-format msgid "%s in load address range of section %s of %s\n" msgstr "" -#: printcmd.c:1382 +#: printcmd.c:1378 #, possible-c-format msgid "%s in %s overlay section %s of %s\n" msgstr "" -#: printcmd.c:1385 +#: printcmd.c:1381 #, possible-c-format msgid "%s in section %s of %s\n" msgstr "" -#: printcmd.c:1390 +#: printcmd.c:1386 #, possible-c-format msgid "%s in load address range of %s overlay section %s\n" msgstr "" -#: printcmd.c:1395 +#: printcmd.c:1391 #, possible-c-format msgid "%s in load address range of section %s\n" msgstr "" -#: printcmd.c:1399 +#: printcmd.c:1395 #, possible-c-format msgid "%s in %s overlay section %s\n" msgstr "" -#: printcmd.c:1402 +#: printcmd.c:1398 #, possible-c-format msgid "%s in section %s\n" msgstr "" -#: printcmd.c:1407 +#: printcmd.c:1403 #, possible-c-format msgid "No symbol matches %s.\n" msgstr "" -#: printcmd.c:1423 +#: printcmd.c:1419 msgid "Argument required." msgstr "" -#: printcmd.c:1531 +#: printcmd.c:1527 #, possible-c-format msgid "an argument in register %s" msgstr "" -#: printcmd.c:1534 +#: printcmd.c:1530 #, possible-c-format msgid "a variable in register %s" msgstr "" -#: printcmd.c:1539 printcmd.c:1616 +#: printcmd.c:1535 printcmd.c:1612 msgid "static storage at address " msgstr "" -#: printcmd.c:1546 printcmd.c:1585 printcmd.c:1622 +#: printcmd.c:1542 printcmd.c:1581 printcmd.c:1618 msgid "" ",\n" " -- loaded at " msgstr "" -#: printcmd.c:1549 printcmd.c:1588 printcmd.c:1626 +#: printcmd.c:1545 printcmd.c:1584 printcmd.c:1622 #, possible-c-format msgid " in overlay section %s" msgstr "" -#: printcmd.c:1557 +#: printcmd.c:1553 #, possible-c-format msgid "address of an argument in register %s" msgstr "" -#: printcmd.c:1562 +#: printcmd.c:1558 #, possible-c-format msgid "an argument at offset %ld" msgstr "" -#: printcmd.c:1566 +#: printcmd.c:1562 #, possible-c-format msgid "a local variable at frame offset %ld" msgstr "" -#: printcmd.c:1570 +#: printcmd.c:1566 #, possible-c-format msgid "a reference argument at offset %ld" msgstr "" -#: printcmd.c:1574 +#: printcmd.c:1570 msgid "a typedef" msgstr "" -#: printcmd.c:1578 +#: printcmd.c:1574 msgid "a function at address " msgstr "" -#: printcmd.c:1608 +#: printcmd.c:1604 #, possible-c-format msgid "" "a thread-local variable at offset %s in the thread-local storage for `%s'" msgstr "" -#: printcmd.c:1635 +#: printcmd.c:1631 msgid "optimized out" msgstr "" -#: printcmd.c:1639 +#: printcmd.c:1635 msgid "of unknown (botched) type" msgstr "" -#: printcmd.c:1698 +#: printcmd.c:1693 msgid "starting display address" msgstr "" -#: printcmd.c:1853 +#: printcmd.c:1810 msgid "one or more display numbers" msgstr "" -#: printcmd.c:1863 +#: printcmd.c:1820 #, possible-c-format msgid "bad display number at or near '%s'" msgstr "" -#: printcmd.c:1872 printcmd.c:2079 +#: printcmd.c:1830 printcmd.c:2025 #, possible-c-format msgid "No display number %d.\n" msgstr "" -#: printcmd.c:1894 +#: printcmd.c:1844 msgid "Delete all auto-display expressions? " msgstr "" -#: printcmd.c:1942 +#: printcmd.c:1892 #, possible-c-format msgid "Unable to display \"%s\": %s" msgstr "" -#: printcmd.c:2006 +#: printcmd.c:1956 #, possible-c-format msgid "%p[<error: %s>%p]\n" msgstr "" -#: printcmd.c:2089 +#: printcmd.c:2035 #, possible-c-format msgid "Disabling display %d to avoid infinite recursion.\n" msgstr "" -#: printcmd.c:2102 +#: printcmd.c:2046 msgid "There are no auto-display expressions now.\n" msgstr "" -#: printcmd.c:2104 +#: printcmd.c:2048 msgid "" "Auto-display expressions now in effect:\n" "Num Enb Expression\n" msgstr "" -#: printcmd.c:2117 +#: printcmd.c:2061 msgid " (cannot be evaluated in the current context)" msgstr "" -#: printcmd.c:2539 +#: printcmd.c:2484 msgid "format-control string and values to print" msgstr "" -#: printcmd.c:2614 +#: printcmd.c:2532 +msgid "Wrong number of arguments for specified format-string" +msgstr "" + +#: printcmd.c:2559 #, possible-c-format msgid "expected wchar_t argument for %%lc" msgstr "" -#: printcmd.c:2646 +#: printcmd.c:2591 msgid "long long not supported in printf" msgstr "" -#: printcmd.c:2750 +#: printcmd.c:2696 msgid "" "Describe where symbol SYM is stored.\n" "Usage: info address SYM" msgstr "" -#: printcmd.c:2753 +#: printcmd.c:2699 msgid "" "Describe what symbol is at location ADDR.\n" "Usage: info symbol ADDR\n" "Only for symbols with fixed locations (global or static scope)." msgstr "" -#: printcmd.c:2758 +#: printcmd.c:2704 msgid "" "Examine memory: x/FMT ADDRESS.\n" "ADDRESS is an expression for the memory address to examine.\n" @@ -22212,13 +22096,13 @@ "with this command or \"print\"." msgstr "" -#: printcmd.c:2773 +#: printcmd.c:2719 msgid "" "Expressions to display when program stops, with code numbers.\n" "Usage: info display" msgstr "" -#: printcmd.c:2777 +#: printcmd.c:2723 msgid "" "Cancel some expressions to be displayed when program stops.\n" "Usage: undisplay [NUM]...\n" @@ -22228,7 +22112,7 @@ "Do \"info display\" to see current list of code numbers." msgstr "" -#: printcmd.c:2786 +#: printcmd.c:2732 msgid "" "Print value of expression EXP each time the program stops.\n" "Usage: display[/FMT] EXP\n" @@ -22241,7 +22125,7 @@ "Use \"undisplay\" to cancel display requests previously made." msgstr "" -#: printcmd.c:2796 +#: printcmd.c:2742 msgid "" "Enable some expressions to be displayed when program stops.\n" "Usage: enable display [NUM]...\n" @@ -22250,7 +22134,7 @@ "Do \"info display\" to see current list of code numbers." msgstr "" -#: printcmd.c:2803 +#: printcmd.c:2749 msgid "" "Disable some expressions to be displayed when program stops.\n" "Usage: disable display [NUM]...\n" @@ -22259,7 +22143,7 @@ "Do \"info display\" to see current list of code numbers." msgstr "" -#: printcmd.c:2810 +#: printcmd.c:2756 msgid "" "Cancel some expressions to be displayed when program stops.\n" "Usage: delete display [NUM]...\n" @@ -22268,7 +22152,7 @@ "Do \"info display\" to see current list of code numbers." msgstr "" -#: printcmd.c:2817 +#: printcmd.c:2763 #, possible-c-format msgid "" "Formatted printing, like the C \"printf\" function.\n" @@ -22276,14 +22160,14 @@ "This supports most C printf format specifications, like %s, %d, etc." msgstr "" -#: printcmd.c:2822 +#: printcmd.c:2768 msgid "" "Like \"print\" but don't put in value history and don't print newline.\n" "Usage: output EXP\n" "This is useful in user-defined commands." msgstr "" -#: printcmd.c:2827 +#: printcmd.c:2773 msgid "" "Evaluate expression EXP and assign result to variable VAR.\n" "Usage: set VAR = EXP\n" @@ -22298,7 +22182,7 @@ "You can see these environment settings with the \"show\" command." msgstr "" -#: printcmd.c:2841 +#: printcmd.c:2787 msgid "" "Evaluate expression EXP and assign result to variable VAR.\n" "Usage: assign VAR = EXP\n" @@ -22314,7 +22198,7 @@ msgstr "" #. "call" is the same as "set", but handy for dbx users to call fns. -#: printcmd.c:2854 +#: printcmd.c:2800 msgid "" "Call a function in the program.\n" "Usage: call EXP\n" @@ -22323,7 +22207,7 @@ "history, if it is not void." msgstr "" -#: printcmd.c:2862 +#: printcmd.c:2808 msgid "" "Evaluate expression EXP and assign result to variable VAR.\n" "Usage: set variable VAR = EXP\n" @@ -22335,7 +22219,7 @@ "This may usually be abbreviated to simply \"set\"." msgstr "" -#: printcmd.c:2876 +#: printcmd.c:2822 msgid "" "Print value of expression EXP.\n" "Usage: print [[OPTION]... --] [/FMT] [EXP]\n" @@ -22370,15 +22254,15 @@ "but no count or size letter (see \"x\" command)." msgstr "" -#: printcmd.c:2915 +#: printcmd.c:2861 msgid "Set the largest offset that will be printed in <SYMBOL+1234> form." msgstr "" -#: printcmd.c:2916 +#: printcmd.c:2862 msgid "Show the largest offset that will be printed in <SYMBOL+1234> form." msgstr "" -#: printcmd.c:2917 +#: printcmd.c:2863 msgid "" "Tell GDB to only display the symbolic form of an address if the\n" "offset between the closest earlier symbol and the address is less than\n" @@ -22388,15 +22272,15 @@ "it. Zero is equivalent to \"unlimited\"." msgstr "" -#: printcmd.c:2927 +#: printcmd.c:2873 msgid "Set printing of source filename and line number with <SYMBOL>." msgstr "" -#: printcmd.c:2928 +#: printcmd.c:2874 msgid "Show printing of source filename and line number with <SYMBOL>." msgstr "" -#: printcmd.c:2934 +#: printcmd.c:2880 msgid "" "Construct a GDB command and then evaluate it.\n" "Usage: eval \"format string\", ARG1, ARG2, ARG3, ..., ARGN\n" @@ -22426,76 +22310,76 @@ msgid "invalid objfile name" msgstr "" -#: probe.c:198 +#: probe.c:196 #, possible-c-format msgid "No probe matching objfile=`%s', provider=`%s', name=`%s'" msgstr "" -#: probe.c:199 probe.c:200 +#: probe.c:197 probe.c:198 msgid "<any>" msgstr "" -#: probe.c:289 +#: probe.c:287 msgid "Invalid provider regexp" msgstr "" -#: probe.c:292 +#: probe.c:290 msgid "Invalid probe regexp" msgstr "" -#: probe.c:295 +#: probe.c:293 msgid "Invalid object file regexp" msgstr "" -#: probe.c:410 +#: probe.c:408 msgid "n/a" msgstr "" -#: probe.c:548 +#: probe.c:546 msgid "Type" msgstr "" -#: probe.c:550 +#: probe.c:548 msgid "Provider" msgstr "" -#: probe.c:551 +#: probe.c:549 msgid "Name" msgstr "" -#: probe.c:552 +#: probe.c:550 msgid "Where" msgstr "" -#: probe.c:566 +#: probe.c:564 msgid "Object" msgstr "" -#: probe.c:605 probe.c:629 probe.c:664 +#: probe.c:603 probe.c:627 probe.c:662 msgid "No probes matched.\n" msgstr "" -#: probe.c:640 +#: probe.c:638 #, possible-c-format msgid "Probe %s:%s enabled.\n" msgstr "" -#: probe.c:645 +#: probe.c:643 #, possible-c-format msgid "Probe %s:%s cannot be enabled.\n" msgstr "" -#: probe.c:675 +#: probe.c:673 #, possible-c-format msgid "Probe %s:%s disabled.\n" msgstr "" -#: probe.c:680 +#: probe.c:678 #, possible-c-format msgid "Probe %s:%s cannot be disabled.\n" msgstr "" -#: probe.c:784 +#: probe.c:782 msgid "" "Show available static probes.\n" "Usage: info probes [all|TYPE [ARGS]]\n" @@ -22507,26 +22391,26 @@ "will show information about all types of probes." msgstr "" -#: probe.c:819 probe.c:849 +#: probe.c:817 probe.c:847 #, possible-c-format msgid "No probe at PC %s" msgstr "" -#: probe.c:826 +#: probe.c:824 #, possible-c-format msgid "Invalid probe argument %d -- probe has %u arguments available" msgstr "" -#: probe.c:863 +#: probe.c:861 #, possible-c-format msgid "Invalid probe argument %d -- probe has %d arguments available" msgstr "" -#: probe.c:912 +#: probe.c:911 msgid "Show information about all type of probes." msgstr "" -#: probe.c:916 +#: probe.c:915 msgid "" "Enable probes.\n" "Usage: enable probes [PROVIDER [NAME [OBJECT]]]\n" @@ -22538,7 +22422,7 @@ "all defined probes." msgstr "" -#: probe.c:927 +#: probe.c:926 msgid "" "Disable probes.\n" "Usage: disable probes [PROVIDER [NAME [OBJECT]]]\n" @@ -22550,19 +22434,19 @@ "all defined probes." msgstr "" -#: proc-api.c:422 +#: proc-api.c:421 msgid "Set tracing for /proc api calls." msgstr "" -#: proc-api.c:423 +#: proc-api.c:422 msgid "Show tracing for /proc api calls." msgstr "" -#: proc-api.c:430 +#: proc-api.c:429 msgid "Set filename for /proc tracefile." msgstr "" -#: proc-api.c:431 +#: proc-api.c:430 msgid "Show filename for /proc tracefile." msgstr "" @@ -22571,155 +22455,145 @@ msgid "Can't determine the current address space of thread %s\n" msgstr "" -#: procfs.c:330 +#: procfs.c:317 #, possible-c-format msgid "procfs: couldn't find pid %d (kernel thread %d) in procinfo list." msgstr "" -#: procfs.c:334 +#: procfs.c:321 #, possible-c-format msgid "procfs: couldn't find pid %d in procinfo list." msgstr "" -#: procfs.c:809 +#: procfs.c:794 #, possible-c-format msgid "procfs: modify_flag failed to turn %s %s" msgstr "" -#: procfs.c:1003 +#: procfs.c:984 msgid "procfs: set_traced_signals failed" msgstr "" -#: procfs.c:1626 -#, possible-c-format -msgid "procfs_find_LDT_entry: could not find procinfo for %d:%ld." -msgstr "" - -#: procfs.c:1634 -#, possible-c-format -msgid "procfs_find_LDT_entry: could not read gregs for %d:%ld." -msgstr "" - -#: procfs.c:1886 +#: procfs.c:1783 #, possible-c-format msgid "Attaching to program `%s', %s\n" msgstr "" -#: procfs.c:1912 target.c:3175 +#: procfs.c:1811 target.c:3113 #, possible-c-format msgid "Detaching from program: %s, %s\n" msgstr "" -#: procfs.c:1933 +#: procfs.c:1832 msgid "procfs: out of memory in 'attach'" msgstr "" -#: procfs.c:2022 +#: procfs.c:1920 msgid "Was stopped when attached, make it runnable again? " msgstr "" -#: procfs.c:2065 +#: procfs.c:1959 #, possible-c-format msgid "procfs: fetch_registers failed to find procinfo for %s" msgstr "" -#: procfs.c:2114 +#: procfs.c:2008 #, possible-c-format msgid "procfs: store_registers: failed to find procinfo for %s" msgstr "" -#: procfs.c:2233 +#: procfs.c:2095 #, possible-c-format msgid "procfs: couldn't stop process %d: wait returned %d." msgstr "" -#: procfs.c:2339 +#: procfs.c:2198 msgid "procfs: trapped on entry to " msgstr "" -#: procfs.c:2350 procfs.c:2436 +#: procfs.c:2209 procfs.c:2275 #, possible-c-format msgid "%ld syscall arguments:\n" msgstr "" -#: procfs.c:2425 +#: procfs.c:2264 msgid "procfs: trapped on exit from " msgstr "" -#: procfs.c:2454 +#: procfs.c:2293 #, possible-c-format msgid "Retry #%d:\n" msgstr "" -#: procfs.c:2487 +#: procfs.c:2326 msgid "child stopped for unknown reason:\n" msgstr "" -#: procfs.c:2489 +#: procfs.c:2328 msgid "... giving up..." msgstr "" -#: procfs.c:2514 +#: procfs.c:2352 msgid "procfs: ...giving up..." msgstr "" -#: procfs.c:2741 +#: procfs.c:2529 msgid "" "resume: target already running. Pretend to resume, and hope for the best!" msgstr "" -#: procfs.c:2777 +#: procfs.c:2565 #, possible-c-format msgid "\tUsing the running image of %s %s via /proc.\n" msgstr "" -#: procfs.c:2868 +#: procfs.c:2651 msgid "procfs: out of memory in 'init_inferior'" msgstr "" -#: procfs.c:2951 +#: procfs.c:2731 msgid "procfs: create_procinfo failed in child." msgstr "" #. Not found. This must be an error rather than merely passing #. the file to execlp(), because execlp() would try all the #. exec()s, causing GDB to get confused. -#: procfs.c:3081 +#: procfs.c:2859 #, possible-c-format msgid "procfs:%d -- Can't find shell %s in PATH" msgstr "" -#: procfs.c:3595 +#: procfs.c:3373 #, possible-c-format msgid "process %d flags:\n" msgstr "" -#: procfs.c:3605 +#: procfs.c:3383 #, possible-c-format msgid "thread %d flags:\n" msgstr "" -#: procfs.c:3663 +#: procfs.c:3441 msgid "you must be debugging a process to use this command." msgstr "" -#: procfs.c:3666 +#: procfs.c:3444 msgid "system call to trace" msgstr "" -#: procfs.c:3707 +#: procfs.c:3486 msgid "Give a trace of entries into the syscall." msgstr "" -#: procfs.c:3709 +#: procfs.c:3488 msgid "Give a trace of exits from the syscall." msgstr "" -#: procfs.c:3711 +#: procfs.c:3490 msgid "Cancel a trace of entries into the syscall." msgstr "" -#: procfs.c:3713 +#: procfs.c:3492 msgid "Cancel a trace of exits from the syscall." msgstr "" @@ -22728,21 +22602,21 @@ msgid "Could not recognize version of Intel Compiler in: \"%s\"" msgstr "" -#: progspace.c:335 +#: progspace.c:382 #, possible-c-format msgid "program space ID %d not known." msgstr "" -#: progspace.c:415 +#: progspace.c:447 msgid "Info about currently known program spaces." msgstr "" -#: psymtab.c:106 +#: psymtab.c:100 #, possible-c-format msgid "Reading symbols from %s...\n" msgstr "" -#: psymtab.c:116 +#: psymtab.c:110 #, possible-c-format msgid "(No debugging symbols found in %s)\n" msgstr "" @@ -22750,57 +22624,62 @@ #. Might want to error() here (in case symtab is corrupt and #. will cause a core dump), but maybe we can successfully #. continue, so let's not. -#: psymtab.c:400 +#: psymtab.c:391 #, possible-c-format msgid "(Internal error: pc %s in read in psymtab, but not in symtab.)\n" msgstr "" -#: psymtab.c:798 +#: psymtab.c:761 +#, possible-c-format +msgid "Reading in symbols for %s...\n" +msgstr "" + +#: psymtab.c:795 msgid "select_source_symtab: readin pst found and no symtabs." msgstr "" -#: psymtab.c:1015 +#: psymtab.c:1010 #, possible-c-format msgid " Number of psym tables (not yet expanded): %d\n" msgstr "" -#: psymtab.c:1812 symmisc.c:413 +#: psymtab.c:1852 symmisc.c:433 msgid "Missing pc value" msgstr "" -#: psymtab.c:1818 symmisc.c:419 +#: psymtab.c:1858 symmisc.c:439 msgid "Missing source file" msgstr "" -#: psymtab.c:1824 symmisc.c:425 symmisc.c:698 +#: psymtab.c:1864 symmisc.c:445 symmisc.c:718 msgid "Missing objfile name" msgstr "" #. Future proofing: Don't allow OUTFILE to begin with "-". -#: psymtab.c:1836 symmisc.c:437 symmisc.c:710 +#: psymtab.c:1876 symmisc.c:457 symmisc.c:730 #, possible-c-format msgid "Unknown option: %s" msgstr "" -#: psymtab.c:1844 symmisc.c:445 +#: psymtab.c:1884 symmisc.c:465 msgid "Must specify at most one of -pc and -source" msgstr "" -#: psymtab.c:1851 symmisc.c:452 symmisc.c:722 +#: psymtab.c:1891 symmisc.c:472 symmisc.c:742 msgid "Junk at end of command" msgstr "" -#: psymtab.c:1943 +#: psymtab.c:1983 #, possible-c-format msgid "No partial symtab for address: %s" msgstr "" -#: psymtab.c:1945 +#: psymtab.c:1985 #, possible-c-format msgid "No partial symtab for source file: %s" msgstr "" -#: psymtab.c:2163 +#: psymtab.c:2209 msgid "" "Print dump of current partial symbol definitions.\n" "Usage: mt print psymbols [-objfile OBJFILE] [-pc ADDRESS] [--] [OUTFILE]\n" @@ -22812,71 +22691,17 @@ "If OBJFILE is provided, dump only that file's minimal symbols." msgstr "" -#: psymtab.c:2174 +#: psymtab.c:2220 msgid "" "List the partial symbol tables for all object files.\n" "This does not include information about individual partial symbols,\n" "just the symbol table structures themselves." msgstr "" -#: psymtab.c:2181 +#: psymtab.c:2227 msgid "Check consistency of currently expanded psymtabs versus symtabs." msgstr "" -#: python/py-auto-load.c:40 -#, possible-c-format -msgid "Auto-loading of Python scripts is %s.\n" -msgstr "" - -#: python/py-auto-load.c:67 -msgid "Set the debugger's behaviour regarding auto-loaded Python scripts." -msgstr "" - -#: python/py-auto-load.c:68 -msgid "Show the debugger's behaviour regarding auto-loaded Python scripts." -msgstr "" - -#: python/py-auto-load.c:69 -msgid "" -"If enabled, auto-loaded Python scripts are loaded when the debugger reads\n" -"an executable or shared library.\n" -"This options has security implications for untrusted inferiors." -msgstr "" - -#: python/py-auto-load.c:78 -msgid "" -"Set the debugger's behaviour regarding auto-loaded Python scripts, " -"deprecated." -msgstr "" - -#: python/py-auto-load.c:81 -msgid "" -"Show the debugger's behaviour regarding auto-loaded Python scripts, " -"deprecated." -msgstr "" - -#: python/py-auto-load.c:96 -msgid "" -"Print the list of automatically loaded Python scripts.\n" -"Usage: info auto-load python-scripts [REGEXP]" -msgstr "" - -#: python/py-auto-load.c:100 -msgid "Print the list of automatically loaded Python scripts, deprecated." -msgstr "" - -#: python/py-lazy-string.c:112 -msgid "Cannot create a value from NULL." -msgstr "" - -#: python/py-lazy-string.c:184 -msgid "Cannot create a lazy string with address 0x0, and a non-zero length." -msgstr "" - -#: python/py-lazy-string.c:192 -msgid "A lazy string's type cannot be NULL." -msgstr "" - #: python/py-value.c:131 msgid "Object must support the python buffer protocol." msgstr "" @@ -22955,142 +22780,16 @@ msgid "Cannot convert value to float." msgstr "" -#: python/py-value.c:1899 +#: python/py-value.c:1920 #, possible-c-format msgid "Could not convert Python object: %S." msgstr "" -#: python/py-value.c:1902 +#: python/py-value.c:1923 #, possible-c-format msgid "Could not convert Python object: %s." msgstr "" -#. Require a valid block. All access to block_object->block should be -#. gated by this call. -#: python/py-block.c:63 -msgid "Block is invalid." -msgstr "" - -#. Require a valid block. This macro is called during block iterator -#. creation, and at each next call. -#: python/py-block.c:75 -msgid "Source block for iterator is invalid." -msgstr "" - -#: python/py-block.c:361 -msgid "Symbol is null." -msgstr "" - -#. Require a valid Architecture. -#: python/py-arch.c:40 -msgid "Architecture is invalid." -msgstr "" - -#: python/py-arch.c:151 -msgid "Argument 'end_pc' should be a (long) integer." -msgstr "" - -#: python/py-arch.c:159 -msgid "" -"Argument 'end_pc' should be greater than or equal to the argument 'start_pc'." -msgstr "" - -#: python/py-arch.c:171 -msgid "Argument 'count' should be an non-negative integer." -msgstr "" - -#: python/py-prettyprint.c:418 -msgid "Result of children iterator not a tuple of two elements." -msgstr "" - -#: python/py-prettyprint.c:429 -msgid "Bad result from children iterator.\n" -msgstr "" - -#: python/py-prettyprint.c:519 python/py-xmethods.c:537 -#: python/py-xmethods.c:544 python/py-xmethods.c:558 python/py-xmethods.c:569 -#: python/py-xmethods.c:578 python/py-function.c:94 python/python.c:309 -#: python/python.c:392 python/python.c:408 -msgid "Error while executing Python code." -msgstr "" - -#: python/py-prettyprint.c:686 -msgid "Argument must be a gdb.Value." -msgstr "" - -#: python/py-record.c:80 python/py-record.c:96 python/py-record.c:109 -#: python/py-record.c:122 python/py-record.c:135 python/py-record.c:148 -#: python/py-record.c:161 python/py-record.c:174 python/py-record.c:205 -#: python/py-record.c:218 python/py-record.c:231 python/py-record.c:244 -#: python/py-record.c:257 python/py-record.c:270 python/py-record.c:301 -#: python/py-record.c:314 python/py-record.c:327 python/py-record.c:340 -#: python/py-record.c:353 python/py-record.c:366 python/py-instruction.c:40 -msgid "Not implemented." -msgstr "" - -#. Require that OBJF be a valid objfile. -#: python/py-objfile.c:66 -msgid "Objfile no longer exists." -msgstr "" - -#: python/py-objfile.c:245 -msgid "Cannot delete the pretty_printers attribute." -msgstr "" - -#: python/py-objfile.c:252 -msgid "The pretty_printers attribute must be a list." -msgstr "" - -#: python/py-objfile.c:284 -msgid "Cannot delete the frame filters attribute." -msgstr "" - -#: python/py-objfile.c:291 -msgid "The frame_filters attribute must be a dictionary." -msgstr "" - -#: python/py-objfile.c:324 -msgid "Cannot delete the frame unwinders attribute." -msgstr "" - -#: python/py-objfile.c:331 -msgid "The frame_unwinders attribute must be a list." -msgstr "" - -#: python/py-objfile.c:375 -msgid "Cannot delete the type_printers attribute." -msgstr "" - -#: python/py-objfile.c:382 -msgid "The type_printers attribute must be a list." -msgstr "" - -#: python/py-objfile.c:642 -msgid "Not a valid build id." -msgstr "" - -#: python/py-objfile.c:653 -msgid "Objfile not found." -msgstr "" - -#: python/py-framefilter.c:99 -msgid "Unexpected value. Expecting a gdb.Symbol or a Python string." -msgstr "" - -#: python/py-framefilter.c:483 -msgid "No symbol or value provided." -msgstr "" - -#: python/py-framefilter.c:942 -msgid "FrameDecorator.function: expecting a String, integer or None." -msgstr "" - -#. We've printed all the frames we were asked to -#. print, but more frames existed. -#: python/py-framefilter.c:1229 stack.c:2087 -msgid "(More stack frames follow...)\n" -msgstr "" - #: python/py-param.c:142 msgid "String required for filename." msgstr "" @@ -23147,7 +22846,7 @@ msgid "The enumeration item not a string." msgstr "" -#: python/py-param.c:682 python/py-cmd.c:470 +#: python/py-param.c:682 python/py-cmd.c:471 msgid "Invalid command class argument." msgstr "" @@ -23159,194 +22858,291 @@ msgid "Only PARAM_ENUM accepts a fourth argument." msgstr "" -#: python/py-xmethods.c:362 -msgid "" -"Arg type returned by the get_arg_types method of a debug method worker " -"object is not a gdb.Type object." +#: python/python.c:209 +msgid "Python not initialized" msgstr "" -#: python/py-xmethods.c:381 -msgid "" -"Arg type returned by the get_arg_types method of an xmethod worker object is " -"not a gdb.Type object." +#: python/python.c:229 python/python.c:1966 +msgid "internal error: Unhandled Python exception" msgstr "" -#: python/py-xmethods.c:490 -msgid "" -"Type returned by the get_result_type method of an xmethod worker object is " -"not a gdb.Type object." +#: python/python.c:341 python/python.c:424 python/python.c:440 +#: python/py-prettyprint.c:519 python/py-xmethods.c:537 +#: python/py-xmethods.c:544 python/py-xmethods.c:558 python/py-xmethods.c:569 +#: python/py-xmethods.c:578 python/py-function.c:94 +msgid "Error while executing Python code." msgstr "" -#: python/py-unwind.c:182 -#, possible-c-format -msgid "The value of the '%s' attribute is not a pointer." +#: python/python.c:375 +msgid "Installation error: gdb._execute_file function is missing" msgstr "" -#: python/py-unwind.c:422 -msgid "frame_id should have 'sp' attribute." +#: python/python.c:417 +msgid "Invalid \"python\" block structure." msgstr "" -#: python/py-unwind.c:542 -msgid "A Unwinder should return gdb.UnwindInfo instance." +#: python/python.c:518 +msgid "Programmer error: unhandled type." msgstr "" -#: python/py-unwind.c:641 -msgid "Set Python unwinder debugging." +#: python/python.c:547 +#, possible-c-format +msgid "Could not find parameter `%s'." msgstr "" -#: python/py-unwind.c:642 -msgid "Show Python unwinder debugging." +#: python/python.c:551 +#, possible-c-format +msgid "`%s' is not a parameter." msgstr "" -#: python/py-unwind.c:643 -msgid "When non-zero, Python unwinder debugging is enabled." +#: python/python.c:788 +msgid "Number of breakpoints exceeds throttled maximum." msgstr "" -#: python/py-breakpoint.c:126 -msgid "Cannot delete `enabled' attribute." +#: python/python.c:1032 +msgid "Posted event is not callable" msgstr "" -#: python/py-breakpoint.c:133 -msgid "The value of `enabled' must be a boolean." +#: python/python.c:1095 +msgid "Return from prompt_hook must be either a Python string, or None" msgstr "" -#: python/py-breakpoint.c:168 -msgid "Cannot delete `silent' attribute." +#: python/python.c:1322 +msgid "Error occurred computing Python errormessage.\n" msgstr "" -#: python/py-breakpoint.c:174 -msgid "The value of `silent' must be a boolean." +#: python/python.c:1571 +msgid "Python scripting is not supported in this copy of GDB." msgstr "" -#: python/py-breakpoint.c:199 -msgid "Cannot delete `thread' attribute." +#: python/python.c:1815 +msgid "" +"Start an interactive Python prompt.\n" +"\n" +"To return to GDB, type the EOF character (e.g., Ctrl-D on an empty\n" +"prompt).\n" +"\n" +"Alternatively, a single-line Python command can be given as an\n" +"argument, and if the command is an expression, the result will be\n" +"printed. For example:\n" +"\n" +" (gdb) python-interactive 2 + 3\n" +" 5" msgstr "" -#: python/py-breakpoint.c:210 -msgid "Invalid thread ID." +#: python/python.c:1828 +msgid "" +"Start a Python interactive prompt.\n" +"\n" +"Python scripting is not supported in this copy of GDB.\n" +"This command is only a placeholder." msgstr "" -#: python/py-breakpoint.c:219 -msgid "The value of `thread' must be an integer or None." +#: python/python.c:1839 +msgid "" +"Evaluate a Python command.\n" +"\n" +"The command can be given as an argument, for instance:\n" +"\n" +" python print (23)\n" +"\n" +"If no argument is given, the following lines are read and used\n" +"as the Python commands. Type a line containing \"end\" to indicate\n" +"the end of the command." msgstr "" -#: python/py-breakpoint.c:241 -msgid "Cannot delete `task' attribute." +#: python/python.c:1850 +msgid "" +"Evaluate a Python command.\n" +"\n" +"Python scripting is not supported in this copy of GDB.\n" +"This command is only a placeholder." msgstr "" -#: python/py-breakpoint.c:261 -msgid "Invalid task ID." +#: python/python.c:1861 python/python.c:1866 +msgid "Prefix command for python preference settings." msgstr "" -#: python/py-breakpoint.c:270 -msgid "The value of `task' must be an integer or None." +#: python/python.c:1871 +msgid "Set mode for Python stack dump on error." msgstr "" -#: python/py-breakpoint.c:316 -msgid "Cannot delete `ignore_count' attribute." +#: python/python.c:1872 +msgid "Show the mode of Python stack printing on error." msgstr "" -#: python/py-breakpoint.c:322 -msgid "The value of `ignore_count' must be an integer." +#. This is passed in one call to warning so that blank lines aren't +#. inserted between each line of text. +#: python/python.c:1939 +#, possible-c-format +msgid "" +"\n" +"Could not load the Python gdb module from `%s'.\n" +"Limited Python support is available from the _gdb module.\n" +"Suggest passing --data-directory=/path/to/gdb/data-directory." msgstr "" -#: python/py-breakpoint.c:355 -msgid "Cannot delete `hit_count' attribute." +#. Require a valid symbol table. All access to symtab_object->symtab +#. should be gated by this call. +#: python/py-symtab.c:52 +msgid "Symbol Table is invalid." msgstr "" -#: python/py-breakpoint.c:368 -msgid "The value of `hit_count' must be zero." +#. Require a valid symbol table and line object. All access to +#. sal_object->sal should be gated by this call. +#: python/py-symtab.c:83 +msgid "Symbol Table and Line is invalid." msgstr "" -#: python/py-breakpoint.c:449 -msgid "Cannot delete `condition' attribute." +#: python/py-linetable.c:75 +msgid "Symbol Table in line table is invalid." msgstr "" -#: python/py-breakpoint.c:684 +#: python/py-linetable.c:198 python/py-linetable.c:229 +msgid "Linetable information not found in symbol table" +msgstr "" + +#. Require a valid Architecture. +#: python/py-arch.c:40 +msgid "Architecture is invalid." +msgstr "" + +#: python/py-arch.c:151 +msgid "Argument 'end_pc' should be a (long) integer." +msgstr "" + +#: python/py-arch.c:159 msgid "" -"Breakpoints specified with spec cannot have source, function, label or line " -"defined." +"Argument 'end_pc' should be greater than or equal to the argument 'start_pc'." msgstr "" -#: python/py-breakpoint.c:696 -msgid "Watchpoints cannot be set by explicit location parameters." +#: python/py-arch.c:171 +msgid "Argument 'count' should be an non-negative integer." msgstr "" -#: python/py-breakpoint.c:707 -msgid "Neither spec nor explicit location set." +#: python/py-framefilter.c:99 +msgid "Unexpected value. Expecting a gdb.Symbol or a Python string." msgstr "" -#: python/py-breakpoint.c:716 -msgid "Specifying a source must also include a line, label or function." +#: python/py-framefilter.c:483 +msgid "No symbol or value provided." msgstr "" -#: python/py-breakpoint.c:764 -msgid "Line keyword should be an integer or a string. " +#: python/py-framefilter.c:942 +msgid "FrameDecorator.function: expecting a String, integer or None." msgstr "" -#: python/py-breakpoint.c:857 -msgid "Cannot understand watchpoint access type." +#. We've printed all the frames we were asked to +#. print, but more frames existed. +#: python/py-framefilter.c:1229 stack.c:2108 +msgid "(More stack frames follow...)\n" msgstr "" -#: python/py-breakpoint.c:861 -msgid "Do not understand breakpoint type to set." +#. Require that PSPACE_OBJ be a valid program space ID. +#: python/py-progspace.c:68 +msgid "Program space no longer exists." msgstr "" -#: python/py-breakpoint.c:1039 -msgid "Error while creating breakpoint from GDB." +#. Require a valid symbol. All access to symbol_object->symbol should be +#. gated by this call. +#: python/py-symbol.c:48 +msgid "Symbol is invalid." msgstr "" -#. Require that BREAKPOINT be a valid breakpoint ID; throw a Python -#. exception if it is invalid. -#. Require that BREAKPOINT be a valid breakpoint ID; throw a Python -#. exception if it is invalid. This macro is for use in setter functions. -#: python/python-internal.h:348 python/python-internal.h:358 -#, possible-c-format -msgid "Breakpoint %d is invalid." +#: python/py-symbol.c:275 +msgid "invalid frame" msgstr "" -#: python/py-linetable.c:75 -msgid "Symbol Table in line table is invalid." +#: python/py-symbol.c:279 +msgid "symbol requires a frame to compute its value" msgstr "" -#: python/py-linetable.c:198 python/py-linetable.c:229 -msgid "Linetable information not found in symbol table" +#: python/py-lazy-string.c:112 +msgid "Cannot create a value from NULL." msgstr "" -#. Require that PSPACE_OBJ be a valid program space ID. -#: python/py-progspace.c:68 -msgid "Program space no longer exists." +#: python/py-lazy-string.c:184 +msgid "Cannot create a lazy string with address 0x0, and a non-zero length." msgstr "" -#. Require a valid frame. This must be called inside a TRY_CATCH, or -#. another context in which a gdb exception is allowed. -#: python/py-frame.c:54 -msgid "Frame is invalid." +#: python/py-lazy-string.c:192 +msgid "A lazy string's type cannot be NULL." msgstr "" -#: python/py-frame.c:265 -msgid "Unknown register." +#. Require that "Window" be a valid window. +#: python/py-tui.c:344 python/py-tui.c:424 +msgid "TUI window is invalid." msgstr "" -#: python/py-frame.c:302 -msgid "Cannot locate block for frame." +#: python/py-tui.c:430 +msgid "Cannot delete \"title\" attribute." msgstr "" -#: python/py-frame.c:508 python/py-type.c:929 -msgid "Second argument must be block." +#: python/py-type.c:504 +msgid "Array bound must be an integer" +msgstr "" + +#: python/py-type.c:587 +msgid "This type does not have a range." +msgstr "" + +#: python/py-type.c:653 +msgid "Type does not have a target." +msgstr "" + +#: python/py-type.c:884 +msgid "Null type name." msgstr "" -#: python/py-frame.c:533 +#: python/py-type.c:912 +msgid "Type is not a template." +msgstr "" + +#: python/py-type.c:924 python/py-type.c:986 #, possible-c-format -msgid "Variable '%s' not found." +msgid "No argument %d in template." msgstr "" -#: python/py-frame.c:541 -msgid "Argument must be a symbol or string." +#: python/py-type.c:952 +msgid "Template argument number must be non-negative" msgstr "" -#: python/py-frame.c:635 -msgid "Invalid frame stop reason." +#: python/py-type.c:962 python/py-frame.c:510 +msgid "Second argument must be block." +msgstr "" + +#: python/py-type.c:997 +msgid "Template argument is optimized out" +msgstr "" + +#: python/py-type.c:1418 +msgid "'block' argument must be a Block." +msgstr "" + +#: python/py-record.c:80 python/py-record.c:96 python/py-record.c:109 +#: python/py-record.c:122 python/py-record.c:135 python/py-record.c:148 +#: python/py-record.c:161 python/py-record.c:174 python/py-record.c:205 +#: python/py-record.c:218 python/py-record.c:231 python/py-record.c:244 +#: python/py-record.c:257 python/py-record.c:270 python/py-record.c:301 +#: python/py-record.c:314 python/py-record.c:327 python/py-record.c:340 +#: python/py-record.c:353 python/py-record.c:366 python/py-instruction.c:40 +msgid "Not implemented." +msgstr "" + +#. Require a valid block. All access to block_object->block should be +#. gated by this call. +#: python/py-block.c:63 +msgid "Block is invalid." +msgstr "" + +#. Require a valid block. This macro is called during block iterator +#. creation, and at each next call. +#: python/py-block.c:75 +msgid "Source block for iterator is invalid." +msgstr "" + +#: python/py-block.c:361 +msgid "Symbol is null." msgstr "" #. Require that INFERIOR be a valid inferior ID. @@ -23358,25 +23154,117 @@ msgid "could not find gdb thread object" msgstr "" -#: python/py-inferior.c:605 +#: python/py-inferior.c:601 #, possible-c-format msgid "Memory buffer for address %s, which is %s bytes long." msgstr "" -#: python/py-inferior.c:640 +#: python/py-inferior.c:636 msgid "The memory buffer supports only one segment." msgstr "" -#: python/py-inferior.c:717 +#: python/py-inferior.c:713 msgid "Search range is empty." msgstr "" -#: python/py-inferior.c:725 +#: python/py-inferior.c:721 msgid "The search range is too large." msgstr "" -#: python/py-inferior.c:798 -msgid "Argument 'handle' must be a thread handle object." +#: python/py-inferior.c:794 +msgid "Argument 'handle' must be a thread handle object." +msgstr "" + +#: python/py-unwind.c:150 +#, possible-c-format +msgid "The value of the '%s' attribute is not a pointer." +msgstr "" + +#: python/py-unwind.c:390 +msgid "frame_id should have 'sp' attribute." +msgstr "" + +#: python/py-unwind.c:526 +msgid "A Unwinder should return gdb.UnwindInfo instance." +msgstr "" + +#: python/py-unwind.c:625 +msgid "Set Python unwinder debugging." +msgstr "" + +#: python/py-unwind.c:626 +msgid "Show Python unwinder debugging." +msgstr "" + +#: python/py-unwind.c:627 +msgid "When non-zero, Python unwinder debugging is enabled." +msgstr "" + +#: python/py-utils.c:55 +msgid "Expected a string or unicode object." +msgstr "" + +#: python/py-utils.c:281 +msgid "Overflow converting to address." +msgstr "" + +#. An error occurred computing the string representation of the +#. error message. This is rare, but we should inform the user. +#: python/py-utils.c:399 +msgid "" +"An error occurred in Python and then another occurred computing the error " +"message.\n" +msgstr "" + +#: python/py-utils.c:420 +#, possible-c-format +msgid "Error occurred in Python: %s" +msgstr "" + +#: python/py-utils.c:422 +msgid "Error occurred in Python." +msgstr "" + +#: python/py-auto-load.c:40 +#, possible-c-format +msgid "Auto-loading of Python scripts is %s.\n" +msgstr "" + +#: python/py-auto-load.c:67 +msgid "Set the debugger's behaviour regarding auto-loaded Python scripts." +msgstr "" + +#: python/py-auto-load.c:68 +msgid "Show the debugger's behaviour regarding auto-loaded Python scripts." +msgstr "" + +#: python/py-auto-load.c:69 +msgid "" +"If enabled, auto-loaded Python scripts are loaded when the debugger reads\n" +"an executable or shared library.\n" +"This options has security implications for untrusted inferiors." +msgstr "" + +#: python/py-auto-load.c:78 +msgid "" +"Set the debugger's behaviour regarding auto-loaded Python scripts, " +"deprecated." +msgstr "" + +#: python/py-auto-load.c:81 +msgid "" +"Show the debugger's behaviour regarding auto-loaded Python scripts, " +"deprecated." +msgstr "" + +#: python/py-auto-load.c:96 +msgid "" +"Print the list of automatically loaded Python scripts.\n" +"Usage: info auto-load python-scripts [REGEXP]" +msgstr "" + +#: python/py-auto-load.c:100 +msgid "Print the list of automatically loaded Python scripts, deprecated." msgstr "" #: python/py-finishbreakpoint.c:185 python/py-finishbreakpoint.c:208 @@ -23433,16 +23321,65 @@ msgid "Command object already initialized." msgstr "" -#: python/py-cmd.c:477 +#: python/py-cmd.c:478 msgid "Invalid completion type argument." msgstr "" -#: python/py-function.c:82 -msgid "No method named 'invoke' in object." +#. Require that OBJF be a valid objfile. +#: python/py-objfile.c:66 +msgid "Objfile no longer exists." msgstr "" -#: python/py-function.c:128 -msgid "This function is not documented." +#: python/py-objfile.c:245 +msgid "Cannot delete the pretty_printers attribute." +msgstr "" + +#: python/py-objfile.c:252 +msgid "The pretty_printers attribute must be a list." +msgstr "" + +#: python/py-objfile.c:284 +msgid "Cannot delete the frame filters attribute." +msgstr "" + +#: python/py-objfile.c:291 +msgid "The frame_filters attribute must be a dictionary." +msgstr "" + +#: python/py-objfile.c:324 +msgid "Cannot delete the frame unwinders attribute." +msgstr "" + +#: python/py-objfile.c:331 +msgid "The frame_unwinders attribute must be a list." +msgstr "" + +#: python/py-objfile.c:375 +msgid "Cannot delete the type_printers attribute." +msgstr "" + +#: python/py-objfile.c:382 +msgid "The type_printers attribute must be a list." +msgstr "" + +#: python/py-objfile.c:642 +msgid "Not a valid build id." +msgstr "" + +#: python/py-objfile.c:653 +msgid "Objfile not found." +msgstr "" + +#: python/py-prettyprint.c:418 +msgid "Result of children iterator not a tuple of two elements." +msgstr "" + +#: python/py-prettyprint.c:429 +msgid "Bad result from children iterator.\n" +msgstr "" + +#: python/py-prettyprint.c:681 +msgid "Argument must be a gdb.Value." msgstr "" #: python/py-record-btrace.c:81 @@ -23450,7 +23387,7 @@ msgstr "" #: python/py-record-btrace.c:90 python/py-record-btrace.c:96 -#: record-btrace.c:2836 +#: record-btrace.c:2866 msgid "No such instruction." msgstr "" @@ -23491,467 +23428,416 @@ msgid "Argument must be instruction." msgstr "" -#: python/py-varobj.c:101 -msgid "Invalid item from the child list" +#. Require a valid frame. This must be called inside a TRY_CATCH, or +#. another context in which a gdb exception is allowed. +#: python/py-frame.c:53 +msgid "Frame is invalid." msgstr "" -#: python/py-varobj.c:169 -msgid "Null value returned for children" +#: python/py-frame.c:267 +msgid "Can't read register." msgstr "" -#: python/py-varobj.c:176 -msgid "Could not get children iterator" +#: python/py-frame.c:304 +msgid "Cannot locate block for frame." msgstr "" -#. Require that INFERIOR be a valid inferior ID. -#: python/py-infthread.c:34 python/py-infthread.c:91 -msgid "Thread no longer exists." +#: python/py-frame.c:535 +#, possible-c-format +msgid "Variable '%s' not found." msgstr "" -#: python/py-infthread.c:98 -msgid "Cannot delete `name' attribute." +#: python/py-frame.c:543 +msgid "Argument must be a symbol or string." msgstr "" -#: python/py-infthread.c:108 -msgid "The value of `name' must be a string." +#: python/py-frame.c:637 +msgid "Invalid frame stop reason." msgstr "" -#: python/py-infthread.c:280 -msgid "Thread handle not found." +#: python/py-xmethods.c:362 +msgid "" +"Arg type returned by the get_arg_types method of a debug method worker " +"object is not a gdb.Type object." msgstr "" -#. Require a valid symbol table. All access to symtab_object->symtab -#. should be gated by this call. -#: python/py-symtab.c:52 -msgid "Symbol Table is invalid." +#: python/py-xmethods.c:381 +msgid "" +"Arg type returned by the get_arg_types method of an xmethod worker object is " +"not a gdb.Type object." msgstr "" -#. Require a valid symbol table and line object. All access to -#. sal_object->sal should be gated by this call. -#: python/py-symtab.c:83 -msgid "Symbol Table and Line is invalid." +#: python/py-xmethods.c:490 +msgid "" +"Type returned by the get_result_type method of an xmethod worker object is " +"not a gdb.Type object." msgstr "" -#: python/python.c:205 -msgid "Python not initialized" +#. Require that INFERIOR be a valid inferior ID. +#: python/py-infthread.c:34 python/py-infthread.c:91 +msgid "Thread no longer exists." msgstr "" -#: python/python.c:225 python/python.c:1890 -msgid "internal error: Unhandled Python exception" +#: python/py-infthread.c:98 +msgid "Cannot delete `name' attribute." msgstr "" -#: python/python.c:343 -msgid "Installation error: gdb._execute_file function is missing" +#: python/py-infthread.c:108 +msgid "The value of `name' must be a string." msgstr "" -#: python/python.c:385 -msgid "Invalid \"python\" block structure." +#: python/py-infthread.c:280 +msgid "Thread handle not found." msgstr "" -#: python/python.c:486 -msgid "Programmer error: unhandled type." +#. Require that BREAKPOINT be a valid breakpoint ID; throw a Python +#. exception if it is invalid. +#. Require that BREAKPOINT be a valid breakpoint ID; throw a Python +#. exception if it is invalid. This macro is for use in setter functions. +#: python/python-internal.h:348 python/python-internal.h:358 +#, possible-c-format +msgid "Breakpoint %d is invalid." msgstr "" -#: python/python.c:515 -#, possible-c-format -msgid "Could not find parameter `%s'." +#: python/py-breakpoint.c:126 +msgid "Cannot delete `enabled' attribute." msgstr "" -#: python/python.c:519 -#, possible-c-format -msgid "`%s' is not a parameter." +#: python/py-breakpoint.c:133 +msgid "The value of `enabled' must be a boolean." msgstr "" -#: python/python.c:750 -msgid "Number of breakpoints exceeds throttled maximum." +#: python/py-breakpoint.c:168 +msgid "Cannot delete `silent' attribute." msgstr "" -#: python/python.c:1009 -msgid "Posted event is not callable" +#: python/py-breakpoint.c:174 +msgid "The value of `silent' must be a boolean." msgstr "" -#: python/python.c:1072 -msgid "Return from prompt_hook must be either a Python string, or None" +#: python/py-breakpoint.c:199 +msgid "Cannot delete `thread' attribute." msgstr "" -#: python/python.c:1231 -msgid "Error occurred computing Python errormessage.\n" +#: python/py-breakpoint.c:210 +msgid "Invalid thread ID." msgstr "" -#: python/python.c:1482 -msgid "Python scripting is not supported in this copy of GDB." +#: python/py-breakpoint.c:219 +msgid "The value of `thread' must be an integer or None." msgstr "" -#: python/python.c:1739 -msgid "" -"Start an interactive Python prompt.\n" -"\n" -"To return to GDB, type the EOF character (e.g., Ctrl-D on an empty\n" -"prompt).\n" -"\n" -"Alternatively, a single-line Python command can be given as an\n" -"argument, and if the command is an expression, the result will be\n" -"printed. For example:\n" -"\n" -" (gdb) python-interactive 2 + 3\n" -" 5" +#: python/py-breakpoint.c:241 +msgid "Cannot delete `task' attribute." msgstr "" -#: python/python.c:1752 -msgid "" -"Start a Python interactive prompt.\n" -"\n" -"Python scripting is not supported in this copy of GDB.\n" -"This command is only a placeholder." +#: python/py-breakpoint.c:261 +msgid "Invalid task ID." msgstr "" -#: python/python.c:1763 -msgid "" -"Evaluate a Python command.\n" -"\n" -"The command can be given as an argument, for instance:\n" -"\n" -" python print (23)\n" -"\n" -"If no argument is given, the following lines are read and used\n" -"as the Python commands. Type a line containing \"end\" to indicate\n" -"the end of the command." +#: python/py-breakpoint.c:270 +msgid "The value of `task' must be an integer or None." msgstr "" -#: python/python.c:1774 -msgid "" -"Evaluate a Python command.\n" -"\n" -"Python scripting is not supported in this copy of GDB.\n" -"This command is only a placeholder." +#: python/py-breakpoint.c:316 +msgid "Cannot delete `ignore_count' attribute." msgstr "" -#: python/python.c:1785 python/python.c:1790 -msgid "Prefix command for python preference settings." +#: python/py-breakpoint.c:322 +msgid "The value of `ignore_count' must be an integer." msgstr "" -#: python/python.c:1795 -msgid "Set mode for Python stack dump on error." +#: python/py-breakpoint.c:355 +msgid "Cannot delete `hit_count' attribute." msgstr "" -#: python/python.c:1796 -msgid "Show the mode of Python stack printing on error." +#: python/py-breakpoint.c:368 +msgid "The value of `hit_count' must be zero." msgstr "" -#. This is passed in one call to warning so that blank lines aren't -#. inserted between each line of text. -#: python/python.c:1863 -#, possible-c-format -msgid "" -"\n" -"Could not load the Python gdb module from `%s'.\n" -"Limited Python support is available from the _gdb module.\n" -"Suggest passing --data-directory=/path/to/gdb/data-directory." +#: python/py-breakpoint.c:449 +msgid "Cannot delete `condition' attribute." msgstr "" -#. Require a valid symbol. All access to symbol_object->symbol should be -#. gated by this call. -#: python/py-symbol.c:48 -msgid "Symbol is invalid." +#: python/py-breakpoint.c:684 +msgid "" +"Breakpoints specified with spec cannot have source, function, label or line " +"defined." msgstr "" -#: python/py-symbol.c:275 -msgid "invalid frame" +#: python/py-breakpoint.c:696 +msgid "Watchpoints cannot be set by explicit location parameters." msgstr "" -#: python/py-symbol.c:279 -msgid "symbol requires a frame to compute its value" +#: python/py-breakpoint.c:707 +msgid "Neither spec nor explicit location set." msgstr "" -#: python/py-utils.c:55 -msgid "Expected a string or unicode object." +#: python/py-breakpoint.c:716 +msgid "Specifying a source must also include a line, label or function." msgstr "" -#: python/py-utils.c:281 -msgid "Overflow converting to address." +#: python/py-breakpoint.c:764 +msgid "Line keyword should be an integer or a string. " msgstr "" -#. An error occurred computing the string representation of the -#. error message. This is rare, but we should inform the user. -#: python/py-utils.c:399 -msgid "" -"An error occurred in Python and then another occurred computing the error " -"message.\n" +#: python/py-breakpoint.c:857 +msgid "Cannot understand watchpoint access type." msgstr "" -#: python/py-utils.c:420 -#, possible-c-format -msgid "Error occurred in Python: %s" +#: python/py-breakpoint.c:861 +msgid "Do not understand breakpoint type to set." msgstr "" -#: python/py-utils.c:422 -msgid "Error occurred in Python." +#: python/py-breakpoint.c:1039 +msgid "Error while creating breakpoint from GDB." msgstr "" -#: python/py-type.c:501 -msgid "Array bound must be an integer" +#: python/py-varobj.c:101 +msgid "Invalid item from the child list" msgstr "" -#: python/py-type.c:584 -msgid "This type does not have a range." +#: python/py-varobj.c:169 +msgid "Null value returned for children" msgstr "" -#: python/py-type.c:646 -msgid "Type does not have a target." +#: python/py-varobj.c:176 +msgid "Could not get children iterator" msgstr "" -#: python/py-type.c:851 -msgid "Null type name." +#: python/py-registers.c:233 +msgid "No more groups" msgstr "" -#: python/py-type.c:879 -msgid "Type is not a template." +#: python/py-registers.c:283 +msgid "Unknown register group name." msgstr "" -#: python/py-type.c:891 python/py-type.c:953 -#, possible-c-format -msgid "No argument %d in template." +#: python/py-registers.c:324 +msgid "No more registers" msgstr "" -#: python/py-type.c:919 -msgid "Template argument number must be non-negative" +#: python/py-registers.c:419 +msgid "Invalid Architecture in RegisterDescriptor" msgstr "" -#: python/py-type.c:964 -msgid "Template argument is optimized out" +#: python/py-function.c:82 +msgid "No method named 'invoke' in object." msgstr "" -#: python/py-type.c:1385 -msgid "'block' argument must be a Block." +#: python/py-function.c:128 +msgid "This function is not documented." msgstr "" -#: ravenscar-thread.c:73 +#: ravenscar-thread.c:74 msgid "Ravenscar tasks." msgstr "" -#: ravenscar-thread.c:74 +#: ravenscar-thread.c:75 msgid "Ravenscar tasks support." msgstr "" -#: ravenscar-thread.c:542 +#: ravenscar-thread.c:672 #, possible-c-format msgid "%s. Task/thread support disabled." msgstr "" -#: ravenscar-thread.c:565 -msgid "\"set ravenscar\" must be followed by the name of a setting.\n" -msgstr "" - -#: ravenscar-thread.c:586 +#: ravenscar-thread.c:701 msgid "Support for Ravenscar task/thread switching is enabled\n" msgstr "" -#: ravenscar-thread.c:589 +#: ravenscar-thread.c:704 msgid "Support for Ravenscar task/thread switching is disabled\n" msgstr "" -#: ravenscar-thread.c:604 +#: ravenscar-thread.c:720 msgid "Prefix command for changing Ravenscar-specific settings." msgstr "" -#: ravenscar-thread.c:608 +#: ravenscar-thread.c:724 msgid "Prefix command for showing Ravenscar-specific settings." msgstr "" -#: ravenscar-thread.c:612 +#: ravenscar-thread.c:728 msgid "Enable or disable support for GNAT Ravenscar tasks." msgstr "" -#: ravenscar-thread.c:613 +#: ravenscar-thread.c:729 msgid "Show whether support for GNAT Ravenscar tasks is enabled." msgstr "" -#: ravenscar-thread.c:615 +#: ravenscar-thread.c:731 msgid "" "Enable or disable support for task/thread switching with the GNAT\n" "Ravenscar run-time library for bareboard configuration." msgstr "" -#: record-btrace.c:48 +#: record-btrace.c:50 msgid "Branch tracing target" msgstr "" -#: record-btrace.c:49 +#: record-btrace.c:51 msgid "Collect control-flow trace and provide the execution history." msgstr "" -#: record-btrace.c:236 +#: record-btrace.c:238 msgid "Internal error: bad record btrace cpu state." msgstr "" -#: record-btrace.c:502 record-btrace.c:518 +#: record-btrace.c:509 record-btrace.c:525 #, possible-c-format msgid "Buffer size: %u%s.\n" msgstr "" -#: record-btrace.c:527 +#: record-btrace.c:534 #, possible-c-format msgid "Recording format: %s.\n" msgstr "" -#: record-btrace.c:597 +#: record-btrace.c:605 #, possible-c-format msgid "" "Recorded %u instructions in %u functions (%u gaps) for thread %s (%s).\n" msgstr "" -#: record-btrace.c:603 +#: record-btrace.c:611 #, possible-c-format msgid "Replay in progress. At instruction %u.\n" msgstr "" -#: record-btrace.c:615 +#: record-btrace.c:623 msgid "[" msgstr "" -#: record-btrace.c:619 +#: record-btrace.c:627 msgid "decode error (" msgstr "" -#: record-btrace.c:621 +#: record-btrace.c:629 msgid "): " msgstr "" -#: record-btrace.c:624 +#: record-btrace.c:632 msgid "]\n" msgstr "" -#: record-btrace.c:864 record-btrace.c:990 +#: record-btrace.c:881 record-btrace.c:1007 msgid "Bad record instruction-history-size." msgstr "" -#: record-btrace.c:924 record-btrace.c:1281 +#: record-btrace.c:941 record-btrace.c:1298 msgid "At the start of the branch trace record.\n" msgstr "" -#: record-btrace.c:926 record-btrace.c:1283 +#: record-btrace.c:943 record-btrace.c:1300 msgid "At the end of the branch trace record.\n" msgstr "" -#: record-btrace.c:953 record-btrace.c:956 record-btrace.c:1310 -#: record-btrace.c:1313 +#: record-btrace.c:970 record-btrace.c:973 record-btrace.c:1327 +#: record-btrace.c:1330 msgid "Bad range." msgstr "" -#: record-btrace.c:962 record-btrace.c:1319 +#: record-btrace.c:979 record-btrace.c:1336 msgid "Range out of bounds." msgstr "" -#: record-btrace.c:1189 +#: record-btrace.c:1206 msgid "\tinst " msgstr "" -#: record-btrace.c:1195 +#: record-btrace.c:1212 msgid "\tat " msgstr "" -#: record-btrace.c:1218 record-btrace.c:1347 +#: record-btrace.c:1235 record-btrace.c:1364 msgid "Bad record function-call-history-size." msgstr "" -#: record-btrace.c:1560 +#: record-btrace.c:1581 msgid "Cannot write registers while replaying." msgstr "" -#: record-btrace.c:1725 +#: record-btrace.c:1746 msgid "Registers are not available in btrace record history" msgstr "" -#: record-btrace.c:1733 +#: record-btrace.c:1754 msgid "No caller in btrace record history" msgstr "" -#: record-btrace.c:2444 +#: record-btrace.c:2470 msgid "invalid stepping type." msgstr "" -#: record-btrace.c:2828 +#: record-btrace.c:2858 msgid "Instruction number out of range." msgstr "" -#: record-btrace.c:2951 -msgid "\"set record btrace\" must be followed by an appropriate subcommand.\n" -msgstr "" - -#: record-btrace.c:2971 +#: record-btrace.c:2982 #, possible-c-format msgid "Replay memory access is %s.\n" msgstr "" -#: record-btrace.c:2981 record-btrace.c:2992 record-btrace.c:3012 -#: record-btrace.c:3017 record-btrace.c:3047 +#: record-btrace.c:2992 record-btrace.c:3003 record-btrace.c:3023 +#: record-btrace.c:3028 record-btrace.c:3058 #, possible-c-format msgid "Trailing junk: '%s'." msgstr "" -#: record-btrace.c:3022 +#: record-btrace.c:3033 msgid "Bad format. See \"help set record btrace cpu\"." msgstr "" -#: record-btrace.c:3025 +#: record-btrace.c:3036 msgid "Cpu family too big." msgstr "" -#: record-btrace.c:3028 +#: record-btrace.c:3039 msgid "Cpu model too big." msgstr "" -#: record-btrace.c:3031 +#: record-btrace.c:3042 msgid "Cpu stepping too big." msgstr "" -#: record-btrace.c:3052 +#: record-btrace.c:3063 msgid "btrace cpu is 'auto'.\n" msgstr "" -#: record-btrace.c:3056 +#: record-btrace.c:3067 msgid "btrace cpu is 'none'.\n" msgstr "" -#: record-btrace.c:3064 +#: record-btrace.c:3075 #, possible-c-format msgid "btrace cpu is 'intel: %u/%u'.\n" msgstr "" -#: record-btrace.c:3068 +#: record-btrace.c:3079 #, possible-c-format msgid "btrace cpu is 'intel: %u/%u/%u'.\n" msgstr "" -#: record-btrace.c:3076 +#: record-btrace.c:3087 msgid "Internal error: bad cpu state." msgstr "" -#: record-btrace.c:3084 -msgid "" -"\"set record btrace bts\" must be followed by an appropriate subcommand.\n" -msgstr "" - -#: record-btrace.c:3103 -msgid "" -"\"set record btrace pt\" must be followed by an appropriate subcommand.\n" -msgstr "" - -#: record-btrace.c:3124 +#: record-btrace.c:3097 #, possible-c-format msgid "The record/replay bts buffer size is %s.\n" msgstr "" -#: record-btrace.c:3135 +#: record-btrace.c:3108 #, possible-c-format msgid "The record/replay pt buffer size is %s.\n" msgstr "" -#: record-btrace.c:3145 +#: record-btrace.c:3119 msgid "Start branch trace recording." msgstr "" -#: record-btrace.c:3150 +#: record-btrace.c:3124 msgid "" "Start branch trace recording in Branch Trace Store (BTS) format.\n" "\n" @@ -23959,30 +23845,30 @@ "This format may not be available on all processors." msgstr "" -#: record-btrace.c:3158 +#: record-btrace.c:3132 msgid "" "Start branch trace recording in Intel Processor Trace format.\n" "\n" "This format may not be available on all processors." msgstr "" -#: record-btrace.c:3165 record-full.c:2834 record.c:811 +#: record-btrace.c:3139 record-full.c:2829 record.c:795 msgid "Set record options." msgstr "" -#: record-btrace.c:3169 record-full.c:2838 record.c:815 +#: record-btrace.c:3143 record-full.c:2833 record.c:799 msgid "Show record options." msgstr "" -#: record-btrace.c:3173 +#: record-btrace.c:3147 msgid "Set what memory accesses are allowed during replay." msgstr "" -#: record-btrace.c:3174 +#: record-btrace.c:3148 msgid "Show what memory accesses are allowed during replay." msgstr "" -#: record-btrace.c:3176 +#: record-btrace.c:3150 msgid "" "Default is READ-ONLY.\n" "\n" @@ -23995,7 +23881,7 @@ "replay." msgstr "" -#: record-btrace.c:3188 +#: record-btrace.c:3162 msgid "" "Set the cpu to be used for trace decode.\n" "\n" @@ -24012,35 +23898,35 @@ "When set to \"none\", errata workarounds are disabled." msgstr "" -#: record-btrace.c:3201 +#: record-btrace.c:3175 msgid "Automatically determine the cpu to be used for trace decode." msgstr "" -#: record-btrace.c:3205 +#: record-btrace.c:3179 msgid "Do not enable errata workarounds for trace decode." msgstr "" -#: record-btrace.c:3209 +#: record-btrace.c:3183 msgid "Show the cpu to be used for trace decode." msgstr "" -#: record-btrace.c:3214 +#: record-btrace.c:3188 msgid "Set record btrace bts options." msgstr "" -#: record-btrace.c:3219 +#: record-btrace.c:3194 msgid "Show record btrace bts options." msgstr "" -#: record-btrace.c:3225 +#: record-btrace.c:3201 msgid "Set the record/replay bts buffer size." msgstr "" -#: record-btrace.c:3226 +#: record-btrace.c:3202 msgid "Show the record/replay bts buffer size." msgstr "" -#: record-btrace.c:3226 +#: record-btrace.c:3202 msgid "" "When starting recording request a trace buffer of this size. The actual " "buffer size may differ from the requested size. Use \"info record\" to see " @@ -24052,23 +23938,23 @@ "The trace buffer size may not be changed while recording." msgstr "" -#: record-btrace.c:3238 +#: record-btrace.c:3214 msgid "Set record btrace pt options." msgstr "" -#: record-btrace.c:3243 +#: record-btrace.c:3220 msgid "Show record btrace pt options." msgstr "" -#: record-btrace.c:3249 +#: record-btrace.c:3227 msgid "Set the record/replay pt buffer size." msgstr "" -#: record-btrace.c:3250 +#: record-btrace.c:3228 msgid "Show the record/replay pt buffer size." msgstr "" -#: record-btrace.c:3250 +#: record-btrace.c:3228 msgid "" "Bigger buffers allow longer recording but also take more time to process the " "recorded execution.\n" @@ -24076,209 +23962,205 @@ "\" to see the actual buffer size." msgstr "" -#: record-full.c:211 +#: record-full.c:212 msgid "Process record and replay target" msgstr "" -#: record-full.c:213 +#: record-full.c:214 msgid "Log program while executing and replay execution from log." msgstr "" -#: record-full.c:690 +#: record-full.c:691 msgid "" "Do you want to auto delete previous execution log entries when record/replay " "buffer becomes full (record full stop-at-limit)?" msgstr "" -#: record-full.c:693 +#: record-full.c:694 msgid "Process record: stopped by user." msgstr "" -#: record-full.c:760 +#: record-full.c:761 msgid "Process record: inferior program stopped." msgstr "" -#: record-full.c:762 record-full.c:1545 record-full.c:1554 record-full.c:1560 +#: record-full.c:763 record-full.c:1558 record-full.c:1567 record-full.c:1573 msgid "Process record: failed to record execution log." msgstr "" -#: record-full.c:867 +#: record-full.c:868 #, possible-c-format msgid "Process record: error writing memory at addr = %s len = %d." msgstr "" -#: record-full.c:950 +#: record-full.c:951 msgid "Process record: the program is not being run." msgstr "" -#: record-full.c:952 +#: record-full.c:953 msgid "Process record target can't debug inferior in non-stop mode (non-stop)." msgstr "" -#: record-full.c:956 +#: record-full.c:957 msgid "" "Process record: the current architecture doesn't support record function." msgstr "" -#: record-full.c:1586 +#: record-full.c:1599 msgid "" "Because GDB is in replay mode, changing the value of a register will make " "the execution log unusable from this point onward. Change all registers?" msgstr "" -#: record-full.c:1592 +#: record-full.c:1605 #, possible-c-format msgid "" "Because GDB is in replay mode, changing the value of a register will make " "the execution log unusable from this point onward. Change register %s?" msgstr "" -#: record-full.c:1614 record-full.c:1648 +#: record-full.c:1627 record-full.c:1661 msgid "Process record canceled the operation." msgstr "" #. Let user choose if he wants to write memory or not. -#: record-full.c:1644 +#: record-full.c:1657 #, possible-c-format msgid "" "Because GDB is in replay mode, writing to memory will make the execution log " "unusable from this point onward. Write memory at address %s?" msgstr "" -#: record-full.c:1879 reverse.c:255 +#: record-full.c:1892 reverse.c:255 #, possible-c-format msgid "Unbalanced quotes: %s" msgstr "" -#: record-full.c:1908 +#: record-full.c:1921 msgid "Replay mode:\n" msgstr "" -#: record-full.c:1910 +#: record-full.c:1923 msgid "Record mode:\n" msgstr "" #. Display instruction number for first instruction in the log. -#: record-full.c:1922 +#: record-full.c:1935 #, possible-c-format msgid "Lowest recorded instruction number is %s.\n" msgstr "" -#: record-full.c:1927 +#: record-full.c:1940 #, possible-c-format msgid "Current instruction number is %s.\n" msgstr "" #. Display instruction number for last instruction in the log. -#: record-full.c:1931 +#: record-full.c:1944 #, possible-c-format msgid "Highest recorded instruction number is %s.\n" msgstr "" #. Display log count. -#: record-full.c:1935 +#: record-full.c:1948 #, possible-c-format msgid "Log contains %u instructions.\n" msgstr "" -#: record-full.c:1939 +#: record-full.c:1952 msgid "No instructions have been logged.\n" msgstr "" #. Display max log size. -#: record-full.c:1942 +#: record-full.c:1955 #, possible-c-format msgid "Max logged instructions is %u.\n" msgstr "" -#: record-full.c:1986 +#: record-full.c:1999 msgid "Target insn not found." msgstr "" -#: record-full.c:1988 +#: record-full.c:2001 msgid "Already at target insn." msgstr "" -#: record-full.c:1991 +#: record-full.c:2004 #, possible-c-format msgid "Go forward to insn number %s\n" msgstr "" -#: record-full.c:1997 +#: record-full.c:2010 #, possible-c-format msgid "Go backward to insn number %s\n" msgstr "" -#: record-full.c:2122 record-full.c:2212 target.c:523 +#: record-full.c:2135 record-full.c:2225 target.c:514 msgid "You can't do that without a process to debug." msgstr "" -#: record-full.c:2299 +#: record-full.c:2312 #, possible-c-format msgid "Failed to read %d bytes from core file %s ('%s')." msgstr "" -#: record-full.c:2360 +#: record-full.c:2373 #, possible-c-format msgid "Version mis-match or file format error in core file %s." msgstr "" -#: record-full.c:2467 +#: record-full.c:2480 #, possible-c-format msgid "Bad entry type in core file %s." msgstr "" -#: record-full.c:2492 +#: record-full.c:2505 #, possible-c-format msgid "Auto increase record/replay buffer limit to %u." msgstr "" #. Succeeded. -#: record-full.c:2497 +#: record-full.c:2510 #, possible-c-format msgid "Restored records from core file %s.\n" msgstr "" -#: record-full.c:2513 +#: record-full.c:2526 #, possible-c-format msgid "Failed to write %d bytes to core file %s ('%s')." msgstr "" -#: record-full.c:2599 +#: record-full.c:2612 #, possible-c-format msgid "Failed to create 'precord' section for corefile %s: %s" msgstr "" #. Succeeded. -#: record-full.c:2728 +#: record-full.c:2741 #, possible-c-format msgid "Saved core file %s with execution log.\n" msgstr "" -#: record-full.c:2789 -msgid "\"set record full\" must be followed by an appropriate subcommand.\n" -msgstr "" - -#: record-full.c:2818 +#: record-full.c:2813 msgid "Start full execution recording." msgstr "" -#: record-full.c:2822 +#: record-full.c:2817 msgid "" "Restore the execution log from a file.\n" "Argument is filename. File must be created with 'record save'." msgstr "" -#: record-full.c:2843 +#: record-full.c:2838 msgid "Set whether record/replay stops when record/replay buffer becomes full." msgstr "" -#: record-full.c:2844 +#: record-full.c:2839 msgid "" "Show whether record/replay stops when record/replay buffer becomes full." msgstr "" -#: record-full.c:2846 +#: record-full.c:2841 msgid "" "Default is ON.\n" "When ON, if the record/replay buffer becomes full, ask user what to do.\n" @@ -24286,32 +24168,32 @@ "delete the oldest recorded instruction to make room for each new one." msgstr "" -#: record-full.c:2863 +#: record-full.c:2858 msgid "Set record/replay buffer limit." msgstr "" -#: record-full.c:2864 +#: record-full.c:2859 msgid "Show record/replay buffer limit." msgstr "" -#: record-full.c:2864 +#: record-full.c:2859 msgid "" "Set the maximum number of instructions to be stored in the\n" "record/replay buffer. A value of either \"unlimited\" or zero means no\n" "limit. Default is 200000." msgstr "" -#: record-full.c:2881 +#: record-full.c:2876 msgid "" "Set whether query if PREC cannot record memory change of next instruction." msgstr "" -#: record-full.c:2883 +#: record-full.c:2878 msgid "" "Show whether query if PREC cannot record memory change of next instruction." msgstr "" -#: record-full.c:2885 +#: record-full.c:2880 msgid "" "Default is OFF.\n" "When ON, query if PREC cannot record memory change of next instruction." @@ -24360,108 +24242,104 @@ msgid "Process record is stopped and all execution logs are deleted.\n" msgstr "" -#: record.c:322 -msgid "\"set record\" must be followed by an appropriate subcommand.\n" -msgstr "" - -#: record.c:345 +#: record.c:328 msgid "No record target is currently active.\n" msgstr "" -#: record.c:349 +#: record.c:332 #, possible-c-format msgid "Active record target: %s\n" msgstr "" -#: record.c:384 +#: record.c:367 msgid "Command requires an argument (insn number to go to)." msgstr "" -#: record.c:521 record.c:654 +#: record.c:504 record.c:637 #, possible-c-format msgid "Invalid modifier: %c." msgstr "" -#: record.c:744 +#: record.c:727 #, possible-c-format msgid "integer %u out of range" msgstr "" -#: record.c:781 +#: record.c:765 msgid "Set debugging of record/replay feature." msgstr "" -#: record.c:782 +#: record.c:766 msgid "Show debugging of record/replay feature." msgstr "" -#: record.c:783 +#: record.c:767 msgid "When enabled, debugging output for record/replay feature is displayed." msgstr "" -#: record.c:789 +#: record.c:773 msgid "Set number of instructions to print in \"record instruction-history\"." msgstr "" -#: record.c:790 +#: record.c:774 msgid "Show number of instructions to print in \"record instruction-history\"." msgstr "" -#: record.c:791 +#: record.c:775 msgid "" "A size of \"unlimited\" means unlimited instructions. The default is 10." msgstr "" -#: record.c:797 +#: record.c:781 msgid "Set number of function to print in \"record function-call-history\"." msgstr "" -#: record.c:798 +#: record.c:782 msgid "Show number of functions to print in \"record function-call-history\"." msgstr "" -#: record.c:799 +#: record.c:783 msgid "A size of \"unlimited\" means unlimited lines. The default is 10." msgstr "" -#: record.c:805 +#: record.c:789 msgid "Start recording." msgstr "" -#: record.c:819 +#: record.c:803 msgid "Info record options." msgstr "" -#: record.c:824 +#: record.c:808 msgid "" "Save the execution log to a file.\n" "Usage: record save [FILENAME]\n" "Default filename is 'gdb_record.PROCESS_ID'." msgstr "" -#: record.c:831 +#: record.c:815 msgid "Delete the rest of execution log and start recording it anew." msgstr "" -#: record.c:837 +#: record.c:821 msgid "Stop the record/replay target." msgstr "" -#: record.c:841 +#: record.c:825 msgid "" "Restore the program to its state at instruction number N.\n" "Argument is instruction number, as shown by 'info record'." msgstr "" -#: record.c:847 +#: record.c:831 msgid "Go to the beginning of the execution log." msgstr "" -#: record.c:852 +#: record.c:836 msgid "Go to the end of the execution log." msgstr "" -#: record.c:855 +#: record.c:839 msgid "" "Print disassembled instructions stored in the execution log.\n" "With a /m or /s modifier, source lines are included (if available).\n" @@ -24482,7 +24360,7 @@ "instruction-history-size\"." msgstr "" -#: record.c:875 +#: record.c:859 msgid "" "Prints the execution history at function granularity.\n" "It prints one line for each sequence of instructions that belong to the same " @@ -24504,54 +24382,58 @@ "call-history-size\"." msgstr "" -#: regcache-dump.c:312 +#: regcache-dump.c:313 msgid "" "Print the internal register configuration.\n" "Takes an optional file parameter." msgstr "" -#: regcache-dump.c:316 +#: regcache-dump.c:317 msgid "" "Print the internal register configuration including raw values.\n" "Takes an optional file parameter." msgstr "" -#: regcache-dump.c:321 +#: regcache-dump.c:322 msgid "" "Print the internal register configuration including cooked values.\n" "Takes an optional file parameter." msgstr "" -#: regcache-dump.c:326 +#: regcache-dump.c:327 msgid "" "Print the internal register configuration including each register's group.\n" "Takes an optional file parameter." msgstr "" -#: regcache-dump.c:331 +#: regcache-dump.c:332 msgid "" "Print the internal register configuration including remote register number " "and g/G packets offset.\n" "Takes an optional file parameter." msgstr "" -#: regcache.c:1185 +#: regcache.c:1297 msgid "PC register is not available" msgstr "" -#: regcache.c:1191 +#: regcache.c:1303 msgid "regcache_read_pc: Unable to find PC" msgstr "" -#: regcache.c:1207 +#: regcache.c:1337 msgid "regcache_write_pc: Unable to update PC" msgstr "" -#: regcache.c:1261 +#: regcache.c:1391 msgid "Register cache flushed.\n" msgstr "" -#: regcache.c:1810 +#: regcache.c:1917 +msgid "target already pushed" +msgstr "" + +#: regcache.c:2086 msgid "Force gdb to flush its register cache (maintainer command)." msgstr "" @@ -24559,93 +24441,97 @@ msgid "maintenance print reggroups" msgstr "" -#: reggroups.c:339 +#: reggroups.c:340 msgid "" "Print the internal register group names.\n" "Takes an optional file parameter." msgstr "" -#: remote-fileio.c:1282 +#: remote-fileio.c:1284 msgid "Illegal argument for \"set remote system-call-allowed\" command" msgstr "" -#: remote-fileio.c:1289 +#: remote-fileio.c:1291 #, possible-c-format msgid "Garbage after \"show remote system-call-allowed\" command: `%s'" msgstr "" -#: remote-fileio.c:1301 +#: remote-fileio.c:1303 msgid "Set if the host system(3) call is allowed for the target." msgstr "" -#: remote-fileio.c:1305 +#: remote-fileio.c:1307 msgid "Show if the host system(3) call is allowed for the target." msgstr "" -#: remote-notif.c:244 +#: remote-notif.c:246 msgid "Set debugging of async remote notification." msgstr "" -#: remote-notif.c:245 +#: remote-notif.c:247 msgid "Show debugging of async remote notification." msgstr "" -#: remote-notif.c:246 +#: remote-notif.c:248 msgid "" "When non-zero, debugging output about async remote notifications is enabled." msgstr "" -#: remote-sim.c:79 +#: remote-sim.c:117 msgid "simulator" msgstr "" -#: remote-sim.c:80 +#: remote-sim.c:118 msgid "Use the compiled-in simulator." msgstr "" -#: remote-sim.c:225 +#: remote-sim.c:216 #, possible-c-format msgid "Unable to create simulator instance for inferior %d." msgstr "" -#: remote-sim.c:240 +#: remote-sim.c:237 #, possible-c-format msgid "" "Inferior %d and inferior %d would have identical simulator state.\n" "(This simulator does not support the running of more than one inferior.)" msgstr "" -#: remote-sim.c:537 +#: remote-sim.c:536 msgid "Register size different to expected" msgstr "" -#: remote-sim.c:540 +#: remote-sim.c:539 #, possible-c-format msgid "Register %d not updated" msgstr "" -#: remote-sim.c:542 +#: remote-sim.c:541 #, possible-c-format msgid "Register %s not updated" msgstr "" -#: remote-sim.c:580 +#: remote-sim.c:579 msgid "program to load" msgstr "" -#: remote-sim.c:587 +#: remote-sim.c:586 msgid "GDB sim does not yet support a load offset." msgstr "" -#: remote-sim.c:596 +#: remote-sim.c:595 msgid "unable to load program" msgstr "" -#: remote-sim.c:627 remote-sim.c:1066 +#: remote-sim.c:624 +msgid "No executable file specified." +msgstr "" + +#: remote-sim.c:626 remote-sim.c:1038 msgid "No program loaded." msgstr "" -#: remote-sim.c:655 +#: remote-sim.c:654 msgid "Unable to create sim inferior." msgstr "" @@ -24653,12 +24539,12 @@ msgid "unable to create simulator instance" msgstr "" -#: remote-sim.c:862 +#: remote-sim.c:854 #, possible-c-format msgid "gdbsim_resume: pid %d, step %d, signal %d\n" msgstr "" -#: remote-sim.c:974 +#: remote-sim.c:947 #, possible-c-format msgid "Unable to wait for pid %d. Inferior not found." msgstr "" @@ -24671,166 +24557,166 @@ #. Consistent with that model, access to the simulator, via sim #. commands, is restricted to the period when the channel to the #. simulator is open. -#: remote-sim.c:1192 +#: remote-sim.c:1164 msgid "Not connected to the simulator target" msgstr "" -#: remote-sim.c:1305 +#: remote-sim.c:1278 msgid "Send a command to the simulator." msgstr "" #. The remote target. -#: remote.c:83 +#: remote.c:84 msgid "" "Use a remote computer via a serial line, using a gdb-specific protocol.\n" "Specify the serial device it is connected to\n" "(e.g. /dev/ttyS0, /dev/ttya, COM1, etc.)." msgstr "" -#: remote.c:393 +#: remote.c:397 msgid "Remote serial target in gdb-specific protocol" msgstr "" -#: remote.c:943 +#: remote.c:951 msgid "Extended remote serial target in gdb-specific protocol" msgstr "" #. malformed packet error #. general case: -#: remote.c:1104 +#: remote.c:1112 msgid "remote.c: error in outgoing packet." msgstr "" -#: remote.c:1106 +#: remote.c:1114 #, possible-c-format msgid "remote.c: error in outgoing packet at field #%ld." msgstr "" -#: remote.c:1109 +#: remote.c:1117 #, possible-c-format msgid "Target returns error code '%s'." msgstr "" -#: remote.c:1140 +#: remote.c:1148 #, possible-c-format msgid "invalid qRelocInsn packet: %s" msgstr "" -#: remote.c:1169 +#: remote.c:1177 msgid "warning: relocating instruction: " msgstr "" -#: remote.c:1454 +#: remote.c:1462 msgid "" "Send the ASCII ETX character (Ctrl-c) to the remote target to interrupt the " "execution of the program.\n" msgstr "" -#: remote.c:1459 +#: remote.c:1467 msgid "" "send a break signal to the remote target to interrupt the execution of the " "program.\n" msgstr "" -#: remote.c:1463 +#: remote.c:1471 msgid "" "Send a break signal and 'g' a.k.a. Magic SysRq g to the remote target to " "interrupt the execution of Linux kernel.\n" msgstr "" -#: remote.c:1468 remote.c:4219 +#: remote.c:1476 remote.c:4269 #, possible-c-format msgid "Invalid value for interrupt_sequence_mode: %s." msgstr "" -#: remote.c:1599 +#: remote.c:1607 msgid "Argument required (integer, `fixed' or `limited')." msgstr "" -#: remote.c:1612 +#: remote.c:1620 #, possible-c-format msgid "Invalid %s (bad syntax)." msgstr "" -#: remote.c:1627 +#: remote.c:1635 #, possible-c-format msgid "" "The target may not be able to correctly handle a %s\n" "of %ld bytes. Change the packet size? " msgstr "" -#: remote.c:1630 +#: remote.c:1638 msgid "Packet size not changed." msgstr "" -#: remote.c:1641 +#: remote.c:1649 #, possible-c-format msgid "The %s is 0 (default). " msgstr "" -#: remote.c:1643 +#: remote.c:1651 #, possible-c-format msgid "The %s is %ld. " msgstr "" -#: remote.c:1645 +#: remote.c:1653 #, possible-c-format msgid "Packets are fixed at %ld bytes.\n" msgstr "" -#: remote.c:1652 +#: remote.c:1660 #, possible-c-format msgid "Packets are limited to %ld bytes.\n" msgstr "" -#: remote.c:1684 +#: remote.c:1693 #, possible-c-format msgid "The maximum number of target hardware watchpoints is %s.\n" msgstr "" -#: remote.c:1695 +#: remote.c:1704 #, possible-c-format msgid "The maximum length (in bytes) of a target hardware watchpoint is %s.\n" msgstr "" -#: remote.c:1706 +#: remote.c:1715 #, possible-c-format msgid "The maximum number of target hardware breakpoints is %s.\n" msgstr "" -#: remote.c:1723 +#: remote.c:1732 #, possible-c-format msgid "Number of remote packet characters to display is %s.\n" msgstr "" -#: remote.c:1804 +#: remote.c:1814 #, possible-c-format msgid "Support for the `%s' packet is auto-detected, currently %s.\n" msgstr "" -#: remote.c:1810 +#: remote.c:1820 #, possible-c-format msgid "Support for the `%s' packet is currently %s.\n" msgstr "" -#: remote.c:1895 +#: remote.c:1905 msgid "packet_ok: attempt to use a disabled packet" msgstr "" #. If the stub previously indicated that the packet was #. supported then there is a protocol error. -#: remote.c:1919 +#: remote.c:1929 #, possible-c-format msgid "Protocol error: %s (%s) conflicting enabled responses." msgstr "" #. The user set it wrong. -#: remote.c:1925 +#: remote.c:1935 #, possible-c-format msgid "Enabled packet %s (%s) not recognized by stub" msgstr "" -#: remote.c:2148 +#: remote.c:2161 #, possible-c-format msgid "Could not find config for %s" msgstr "" @@ -24839,39 +24725,39 @@ #. We're out of sync with the target now. Did it continue #. or not? We can't tell which thread it was in non-stop, #. so just ignore this. -#: remote.c:2320 remote.c:3930 remote.c:3955 remote.c:4067 remote.c:5279 -#: remote.c:7666 remote.c:7764 remote.c:10530 remote.c:14110 +#: remote.c:2333 remote.c:3993 remote.c:4018 remote.c:4121 remote.c:5348 +#: remote.c:7794 remote.c:7903 remote.c:10654 remote.c:14249 #, possible-c-format msgid "Remote failure reply: %s" msgstr "" -#: remote.c:2960 +#: remote.c:3000 #, possible-c-format msgid "invalid remote ptid: %s" msgstr "" -#: remote.c:3243 +#: remote.c:3283 msgid "Incomplete response to threadinfo request." msgstr "" #. This is an answer to a different request. -#: remote.c:3246 +#: remote.c:3286 msgid "ERROR RMT Thread info mismatch." msgstr "" -#: remote.c:3260 +#: remote.c:3300 msgid "ERROR RMT: threadinfo tag mismatch." msgstr "" -#: remote.c:3268 +#: remote.c:3308 msgid "ERROR RMT: length of threadid is not 16." msgstr "" -#: remote.c:3283 +#: remote.c:3323 msgid "ERROR RMT: 'exists' length too long." msgstr "" -#: remote.c:3307 +#: remote.c:3347 msgid "ERROR RMT: unknown thread info tag." msgstr "" @@ -24883,907 +24769,918 @@ #. exit #. wait for packet, then exit #. -#: remote.c:3419 +#: remote.c:3459 msgid "HMM: threadlist did not echo arg thread, dropping it." msgstr "" -#: remote.c:3426 +#: remote.c:3466 msgid "RMT ERROR : failed to get remote thread list." msgstr "" -#: remote.c:3434 +#: remote.c:3474 msgid "RMT ERROR: threadlist response longer than requested." msgstr "" -#: remote.c:3462 +#: remote.c:3502 msgid "Remote fetch threadlist -infinite loop-." msgstr "" -#: remote.c:3697 +#: remote.c:3737 msgid "threads" msgstr "" -#: remote.c:3846 +#: remote.c:3909 msgid "remote_threads_extra_info" msgstr "" -#: remote.c:4102 remote.c:4129 +#: remote.c:4156 remote.c:4183 #, possible-c-format msgid "Target reported unsupported offsets: %s" msgstr "" -#: remote.c:4127 +#: remote.c:4181 #, possible-c-format msgid "Malformed response to offset query, %s" msgstr "" -#: remote.c:4175 +#: remote.c:4228 msgid "Can not handle qOffsets TextSeg response with this symbol file" msgstr "" -#: remote.c:4554 +#: remote.c:4605 #, possible-c-format msgid "Remote replied unexpectedly to '%s': %s" msgstr "" -#: remote.c:4607 +#: remote.c:4658 msgid "Non-stop mode requested, but remote does not support non-stop" msgstr "" -#: remote.c:4614 +#: remote.c:4665 #, possible-c-format msgid "Remote refused setting non-stop mode with: %s" msgstr "" -#: remote.c:4631 +#: remote.c:4682 #, possible-c-format msgid "Remote refused setting all-stop mode with: %s" msgstr "" -#: remote.c:4655 remote.c:4764 +#: remote.c:4706 remote.c:4822 msgid "The target is not running (try extended-remote?)" msgstr "" -#: remote.c:4801 +#: remote.c:4859 msgid "Trace is already running on the target.\n" msgstr "" -#: remote.c:4944 +#: remote.c:5013 msgid "" "The remote protocol may be unreliable over UDP.\n" "Some events may be lost, rendering further debugging impossible." msgstr "" -#: remote.c:4980 +#: remote.c:5049 #, possible-c-format msgid "Remote refused setting permissions with: %s" msgstr "" -#: remote.c:5019 +#: remote.c:5088 #, possible-c-format msgid "Remote qSupported response supplied an unexpected value for \"%s\"." msgstr "" -#: remote.c:5041 +#: remote.c:5110 #, possible-c-format msgid "Remote target reported \"%s\" without a size." msgstr "" -#: remote.c:5050 +#: remote.c:5119 #, possible-c-format msgid "Remote target reported \"%s\" with a bad size: \"%s\"." msgstr "" -#: remote.c:5309 +#: remote.c:5378 msgid "empty item in \"qSupported\" response" msgstr "" -#: remote.c:5340 +#: remote.c:5409 #, possible-c-format msgid "unrecognized item \"%s\" in \"qSupported\" response" msgstr "" -#: remote.c:5413 +#: remote.c:5482 msgid "" "The target is not responding to GDB commands.\n" "Stop debugging it? " msgstr "" -#: remote.c:5452 remote.c:6744 +#: remote.c:5531 remote.c:6827 msgid "Disconnected from target." msgstr "" -#: remote.c:5461 +#: remote.c:5540 msgid "" "To open a remote debug connection, you need to specify what\n" "serial device is attached to the remote system\n" "(e.g. /dev/ttyS0, /dev/ttya, COM1, etc.)." msgstr "" -#: remote.c:5471 +#: remote.c:5550 msgid "Already connected to a remote target. Disconnect? " msgstr "" -#: remote.c:5472 +#: remote.c:5551 msgid "Still connected." msgstr "" -#: remote.c:5634 +#: remote.c:5712 msgid "Remote doesn't know how to detach" msgstr "" -#: remote.c:5636 +#: remote.c:5714 msgid "Can't detach process." msgstr "" -#: remote.c:5653 +#: remote.c:5731 msgid "No process to detach from." msgstr "" -#: remote.c:5662 +#: remote.c:5740 msgid "Ending remote debugging.\n" msgstr "" -#: remote.c:5763 +#: remote.c:5842 msgid "Argument given to \"disconnect\" when remotely debugging." msgstr "" -#: remote.c:5791 remote.c:5825 +#: remote.c:5870 remote.c:5904 msgid "This target does not support attaching to a process" msgstr "" -#: remote.c:5820 +#: remote.c:5899 #, possible-c-format msgid "Attaching to %s failed with: %s" msgstr "" -#: remote.c:5827 +#: remote.c:5906 #, possible-c-format msgid "Attaching to %s failed" msgstr "" -#: remote.c:6106 +#: remote.c:6186 #, possible-c-format msgid " - Can't pass signal %d to target in reverse: ignored." msgstr "" -#: remote.c:6110 +#: remote.c:6190 msgid "Remote reverse-step not supported." msgstr "" -#: remote.c:6112 +#: remote.c:6192 msgid "Remote reverse-continue not supported." msgstr "" -#: remote.c:6209 remote.c:6362 +#: remote.c:6289 remote.c:6442 #, possible-c-format msgid "Unexpected vCont reply in non-stop mode: %s" msgstr "" -#: remote.c:6590 +#: remote.c:6673 msgid "Remote server does not support stopping threads" msgstr "" -#: remote.c:6623 +#: remote.c:6706 #, possible-c-format msgid "Stopping %s failed: %s" msgstr "" -#: remote.c:6672 +#: remote.c:6755 msgid "No support for interrupting the remote target." msgstr "" -#: remote.c:6674 +#: remote.c:6757 #, possible-c-format msgid "Interrupting target failed: %s" msgstr "" -#: remote.c:6740 +#: remote.c:6823 msgid "" "The target is not responding to interrupt requests.\n" "Stop debugging it? " msgstr "" -#: remote.c:6749 +#: remote.c:6832 msgid "" "Interrupted while waiting for the program.\n" "Give up waiting? " msgstr "" #. We got an unknown stop reply. -#: remote.c:6850 +#: remote.c:6933 msgid "Unknown stop reply" msgstr "" -#: remote.c:7187 +#: remote.c:7270 #, possible-c-format msgid "" "Malformed packet(a) (missing colon): %s\n" "Packet: '%s'\n" msgstr "" -#: remote.c:7191 +#: remote.c:7274 #, possible-c-format msgid "" "Malformed packet(a) (missing register number): %s\n" "Packet: '%s'\n" msgstr "" -#: remote.c:7235 +#: remote.c:7318 msgid "Unexpected swbreak stop reason" msgstr "" -#: remote.c:7249 +#: remote.c:7332 msgid "Unexpected hwbreak stop reason" msgstr "" -#: remote.c:7386 +#: remote.c:7466 #, possible-c-format msgid "" "Remote sent bad register number %s: %s\n" "Packet: '%s'\n" msgstr "" -#: remote.c:7399 +#: remote.c:7479 #, possible-c-format msgid "Remote reply is too short: %s" msgstr "" -#: remote.c:7412 +#: remote.c:7492 #, possible-c-format msgid "" "Remote register badly formatted: %s\n" "here: %s" msgstr "" -#: remote.c:7441 +#: remote.c:7521 #, possible-c-format msgid "stop reply packet badly formatted: %s" msgstr "" -#: remote.c:7491 remote.c:7494 +#: remote.c:7571 remote.c:7574 #, possible-c-format msgid "unknown stop reply packet: %s" msgstr "" -#: remote.c:7505 -#, possible-c-format -msgid "No process or thread specified in stop reply: %s" +#: remote.c:7717 +msgid "" +"multi-inferior target stopped without sending a process-id, using first non-" +"exited inferior" msgstr "" -#: remote.c:7672 remote.c:7814 +#: remote.c:7721 +msgid "" +"multi-threaded target stopped without sending a thread-id, using first non-" +"exited thread" +msgstr "" + +#: remote.c:7800 remote.c:7953 #, possible-c-format msgid "Invalid remote reply: %s" msgstr "" -#: remote.c:7904 +#: remote.c:8051 #, possible-c-format msgid "Could not fetch register \"%s\"; remote failure reply '%s'" msgstr "" -#: remote.c:7923 +#: remote.c:8070 msgid "fetch_register_using_p: early buf termination" msgstr "" -#: remote.c:7944 +#: remote.c:8091 #, possible-c-format msgid "Could not read registers; remote failure reply '%s'" msgstr "" -#: remote.c:7965 +#: remote.c:8112 #, possible-c-format msgid "Remote 'g' packet reply is of odd length: %s" msgstr "" -#: remote.c:7984 +#: remote.c:8131 #, possible-c-format msgid "" "Remote 'g' packet reply is too long (expected %ld bytes, got %d bytes): %s" msgstr "" -#: remote.c:8014 +#: remote.c:8161 #, possible-c-format msgid "Truncated register %d in remote 'g' packet" msgstr "" -#: remote.c:8043 remote.c:8062 +#: remote.c:8190 remote.c:8209 msgid "unexpected end of 'g' packet reply" msgstr "" -#: remote.c:8103 +#: remote.c:8250 msgid "could not set remote traceframe" msgstr "" -#: remote.c:8212 +#: remote.c:8359 #, possible-c-format msgid "Could not write register \"%s\"; remote failure reply '%s'" msgstr "" -#: remote.c:8217 remote.c:9765 +#: remote.c:8364 remote.c:9912 msgid "Bad result from packet_ok" msgstr "" -#: remote.c:8256 +#: remote.c:8403 #, possible-c-format msgid "Could not write registers; remote failure reply '%s'" msgstr "" -#: remote.c:8495 +#: remote.c:8642 msgid "remote_write_bytes_aux: bad packet format" msgstr "" -#: remote.c:8545 +#: remote.c:8692 msgid "minimum packet size too small to write data" msgstr "" -#: remote.c:8661 +#: remote.c:8808 msgid "remote_write_bytes: bad internal state" msgstr "" -#: remote.c:8864 +#: remote.c:9011 msgid "Too long remote packet." msgstr "" -#: remote.c:8867 remote.c:11158 +#: remote.c:9014 remote.c:11282 msgid "Communication problem with target." msgstr "" -#: remote.c:8894 +#: remote.c:9041 msgid "Remote target does not support flash erase" msgstr "" -#: remote.c:8896 +#: remote.c:9043 msgid "Error erasing flash with vFlashErase packet" msgstr "" -#: remote.c:8926 +#: remote.c:9073 msgid "Remote target does not support vFlashDone" msgstr "" -#: remote.c:8928 +#: remote.c:9075 msgid "Error finishing flash operation" msgstr "" -#: remote.c:8991 +#: remote.c:9138 msgid "Remote connection closed" msgstr "" -#: remote.c:8994 remote.c:9023 +#: remote.c:9141 remote.c:9170 msgid "Remote communication error. Target disconnected." msgstr "" -#: remote.c:9099 +#: remote.c:9246 msgid "" "Cannot execute this command while the target is running.\n" "Use the \"interrupt\" command to stop the target\n" "and then try again." msgstr "" -#: remote.c:9431 +#: remote.c:9578 #, possible-c-format msgid "Invalid run length encoding: %s\n" msgstr "" -#: remote.c:9460 +#: remote.c:9607 #, possible-c-format msgid "Watchdog timer is %s.\n" msgstr "" -#: remote.c:9549 +#: remote.c:9696 msgid "Watchdog timeout has expired. Target detached." msgstr "" #. We have tried hard enough, and just can't receive the #. packet/notification. Give up. -#: remote.c:9571 +#: remote.c:9718 msgid "Ignoring packet error, continuing...\n" msgstr "" -#: remote.c:9675 remote.c:9690 +#: remote.c:9822 remote.c:9837 #, possible-c-format msgid "Can't kill fork child process %d" msgstr "" -#: remote.c:9737 +#: remote.c:9884 msgid "Can't kill process" msgstr "" -#: remote.c:9889 +#: remote.c:10013 msgid "Target does not support QDisableRandomization." msgstr "" -#: remote.c:9891 +#: remote.c:10015 #, possible-c-format msgid "Bogus QDisableRandomization reply from target: %s" msgstr "" -#: remote.c:9910 +#: remote.c:10034 msgid "Remote file name too long for run packet" msgstr "" -#: remote.c:9922 +#: remote.c:10046 msgid "Argument list too long for run packet" msgstr "" -#: remote.c:9943 +#: remote.c:10067 msgid "" "Running the default executable on the remote target failed; try \"set remote " "exec-file\"?" msgstr "" -#: remote.c:9946 +#: remote.c:10070 #, possible-c-format msgid "Running \"%s\" on the remote target failed" msgstr "" -#: remote.c:9976 +#: remote.c:10100 #, possible-c-format msgid "Unable to %s environment variable '%s' on remote." msgstr "" -#: remote.c:9992 +#: remote.c:10116 msgid "Unable to reset environment on remote." msgstr "" -#: remote.c:10039 +#: remote.c:10163 #, possible-c-format msgid "" "Remote replied unexpectedly while setting the inferior's working\n" "directory: %s" msgstr "" -#: remote.c:10081 +#: remote.c:10205 #, possible-c-format msgid "Remote replied unexpectedly while setting startup-with-shell: %s" msgstr "" -#: remote.c:10097 +#: remote.c:10221 msgid "Remote target does not support \"set remote exec-file\"" msgstr "" -#: remote.c:10099 +#: remote.c:10223 msgid "Remote target does not support \"set args\" or run ARGS" msgstr "" -#: remote.c:10225 +#: remote.c:10349 msgid "Target doesn't support breakpoints that have target side commands." msgstr "" -#: remote.c:10282 +#: remote.c:10406 #, possible-c-format msgid "hw_bp_to_z: bad watchpoint type %d" msgstr "" -#: remote.c:10322 +#: remote.c:10446 msgid "remote_insert_watchpoint: reached end of function" msgstr "" -#: remote.c:10369 +#: remote.c:10493 msgid "remote_remove_watchpoint: reached end of function" msgstr "" -#: remote.c:10539 +#: remote.c:10663 msgid "remote_insert_hw_breakpoint: reached end of function" msgstr "" -#: remote.c:10580 +#: remote.c:10704 msgid "remote_remove_hw_breakpoint: reached end of function" msgstr "" -#: remote.c:10647 +#: remote.c:10771 msgid "command cannot be used without an exec file" msgstr "" -#: remote.c:10680 +#: remote.c:10804 #, possible-c-format msgid "target memory fault, section %s, range %s -- %s" msgstr "" -#: remote.c:10696 +#: remote.c:10820 msgid "" "One or more sections of the target image does not match\n" "the loaded file\n" msgstr "" -#: remote.c:10699 +#: remote.c:10823 #, possible-c-format msgid "No loaded section named '%s'.\n" msgstr "" -#: remote.c:10802 +#: remote.c:10926 #, possible-c-format msgid "Unknown remote qXfer reply: %s" msgstr "" -#: remote.c:10808 +#: remote.c:10932 msgid "Remote qXfer reply contained no data." msgstr "" -#: remote.c:10997 +#: remote.c:11121 msgid "remote query is only available after target open" msgstr "" -#: remote.c:11101 +#: remote.c:11225 msgid "Pattern is too large to transmit to remote target." msgstr "" -#: remote.c:11123 remote.c:11128 +#: remote.c:11247 remote.c:11252 #, possible-c-format msgid "Unknown qSearch:memory reply: %s" msgstr "" -#: remote.c:11140 +#: remote.c:11264 msgid "remote rcmd is only available after target open" msgstr "" -#: remote.c:11152 +#: remote.c:11276 #, possible-c-format msgid "\"monitor\" command ``%s'' is too long." msgstr "" -#: remote.c:11179 remote.c:12691 remote.c:13010 remote.c:13107 remote.c:13217 -#: remote.c:13267 remote.c:13345 remote.c:13408 remote.c:13438 +#: remote.c:11303 remote.c:12809 remote.c:13128 remote.c:13223 remote.c:13333 +#: remote.c:13383 remote.c:13461 remote.c:13524 remote.c:13554 msgid "Target does not support this command." msgstr "" -#: remote.c:11190 +#: remote.c:11314 msgid "Protocol error with Rcmd" msgstr "" -#: remote.c:11221 remote.c:12389 remote.c:12481 remote.c:12540 +#: remote.c:11345 remote.c:12513 remote.c:12605 remote.c:12664 msgid "command can only be used with remote target" msgstr "" -#: remote.c:11230 +#: remote.c:11354 msgid "remote-packet command requires packet text as argument" msgstr "" -#: remote.c:11273 +#: remote.c:11397 msgid "Remote threadset test\n" msgstr "" -#: remote.c:11379 +#: remote.c:11503 msgid "Fetch and print the remote list of thread identifiers, one pkt only." msgstr "" -#: remote.c:11382 +#: remote.c:11506 msgid "Fetch and display info about one thread." msgstr "" -#: remote.c:11384 +#: remote.c:11508 msgid "Test setting to a different thread." msgstr "" -#: remote.c:11386 +#: remote.c:11510 msgid "Iterate through updating all remote thread info." msgstr "" -#: remote.c:11388 +#: remote.c:11512 msgid "Remote thread alive test." msgstr "" -#: remote.c:11471 +#: remote.c:11595 msgid "Remote target doesn't support qGetTLSAddr packet" msgstr "" -#: remote.c:11474 +#: remote.c:11598 msgid "Remote target failed to process qGetTLSAddr request" msgstr "" -#: remote.c:11478 +#: remote.c:11602 msgid "TLS not supported or disabled on this target" msgstr "" -#: remote.c:11514 +#: remote.c:11638 msgid "Remote target doesn't support qGetTIBAddr packet" msgstr "" -#: remote.c:11516 +#: remote.c:11640 msgid "Remote target failed to process qGetTIBAddr request" msgstr "" -#: remote.c:11519 +#: remote.c:11643 msgid "qGetTIBAddr not supported or disabled on this target" msgstr "" -#: remote.c:11568 +#: remote.c:11692 #, possible-c-format msgid "Duplicate g packet description added for size %d" msgstr "" -#: remote.c:11628 remote.c:11649 remote.c:11671 +#: remote.c:11752 remote.c:11773 remote.c:11795 msgid "Packet too long for target." msgstr "" -#: remote.c:11882 +#: remote.c:12006 #, possible-c-format msgid "Reading %s from remote target...\n" msgstr "" -#: remote.c:11887 +#: remote.c:12011 msgid "" "File transfers from remote targets can be slow. Use \"set sysroot\" to " "access files locally instead." msgstr "" -#: remote.c:11991 +#: remote.c:12115 #, possible-c-format msgid "Read returned %d, but %d bytes." msgstr "" -#: remote.c:12155 +#: remote.c:12279 #, possible-c-format msgid "Readlink returned %d, but %d bytes." msgstr "" -#: remote.c:12207 +#: remote.c:12331 #, possible-c-format msgid "vFile:fstat returned %d, but %d bytes." msgstr "" -#: remote.c:12210 +#: remote.c:12334 #, possible-c-format msgid "vFile:fstat returned %d bytes, but expecting %d." msgstr "" -#: remote.c:12256 +#: remote.c:12380 msgid "" "remote target does not support file transfer, attempting to access files " "from local filesystem." msgstr "" -#: remote.c:12326 +#: remote.c:12450 #, possible-c-format msgid "Unknown remote I/O error %d" msgstr "" -#: remote.c:12328 +#: remote.c:12452 #, possible-c-format msgid "Remote I/O error: %s" msgstr "" -#: remote.c:12433 +#: remote.c:12557 #, possible-c-format msgid "Error reading %s." msgstr "" -#: remote.c:12456 +#: remote.c:12580 #, possible-c-format msgid "Remote write of %d bytes returned 0!" msgstr "" -#: remote.c:12472 +#: remote.c:12596 #, possible-c-format msgid "Successfully sent file \"%s\".\n" msgstr "" -#: remote.c:12531 +#: remote.c:12655 #, possible-c-format msgid "Successfully fetched file \"%s\".\n" msgstr "" -#: remote.c:12555 +#: remote.c:12679 #, possible-c-format msgid "Successfully deleted file \"%s\".\n" msgstr "" -#: remote.c:12562 +#: remote.c:12686 msgid "file to put" msgstr "" -#: remote.c:12566 +#: remote.c:12690 msgid "Invalid parameters to remote put" msgstr "" -#: remote.c:12575 +#: remote.c:12699 msgid "file to get" msgstr "" -#: remote.c:12579 +#: remote.c:12703 msgid "Invalid parameters to remote get" msgstr "" -#: remote.c:12588 +#: remote.c:12712 msgid "file to delete" msgstr "" -#: remote.c:12592 +#: remote.c:12716 msgid "Invalid parameters to remote delete" msgstr "" -#: remote.c:12714 remote.c:12729 remote.c:12941 remote.c:12957 +#: remote.c:12832 remote.c:12847 remote.c:13059 remote.c:13075 msgid "Target does not support source download." msgstr "" -#: remote.c:12746 +#: remote.c:12864 msgid "Tracepoint packet too large for target." msgstr "" -#: remote.c:12790 +#: remote.c:12908 msgid "Fast tracepoint not valid during download" msgstr "" #. Fast tracepoints are functionally identical to regular #. tracepoints, so don't take lack of support as a reason to #. give up on the trace run. -#: remote.c:12797 +#: remote.c:12915 #, possible-c-format msgid "" "Target does not support fast tracepoints, downloading %d as regular " "tracepoint" msgstr "" -#: remote.c:12818 +#: remote.c:12936 msgid "Static tracepoint not valid during download" msgstr "" #. Fast tracepoints are functionally identical to regular #. tracepoints, so don't take lack of support as a reason #. to give up on the trace run. -#: remote.c:12824 +#: remote.c:12942 msgid "Target does not support static tracepoints" msgstr "" -#: remote.c:12859 +#: remote.c:12977 #, possible-c-format msgid "Target does not support conditional tracepoints, ignoring tp %d cond" msgstr "" -#: remote.c:12877 +#: remote.c:12995 msgid "Target does not support tracepoints." msgstr "" -#: remote.c:12899 remote.c:12922 +#: remote.c:13017 remote.c:13040 msgid "Error on target while setting tracepoints." msgstr "" -#: remote.c:13004 +#: remote.c:13122 msgid "Trace state variable name too long for tsv definition packet" msgstr "" -#: remote.c:13012 +#: remote.c:13130 msgid "Error on target while downloading trace state variable." msgstr "" -#: remote.c:13027 +#: remote.c:13144 msgid "" "Target does not support enabling tracepoints while a trace run is ongoing." msgstr "" -#: remote.c:13029 +#: remote.c:13146 msgid "Error on target while enabling tracepoint." msgstr "" -#: remote.c:13044 +#: remote.c:13160 msgid "" "Target does not support disabling tracepoints while a trace run is ongoing." msgstr "" -#: remote.c:13046 +#: remote.c:13162 msgid "Error on target while disabling tracepoint." msgstr "" -#: remote.c:13084 +#: remote.c:13200 msgid "Too many sections for read-only sections definition packet." msgstr "" -#: remote.c:13109 remote.c:13219 remote.c:13292 remote.c:13295 remote.c:13347 -#: remote.c:13410 remote.c:13440 remote.c:13516 remote.c:13561 +#: remote.c:13225 remote.c:13335 remote.c:13408 remote.c:13411 remote.c:13463 +#: remote.c:13526 remote.c:13556 remote.c:13632 remote.c:13677 #, possible-c-format msgid "Bogus reply from target: %s" msgstr "" -#: remote.c:13153 +#: remote.c:13269 #, possible-c-format msgid "Bogus trace status reply from target: %s" msgstr "" -#: remote.c:13261 +#: remote.c:13377 #, possible-c-format msgid "Unknown trace find type %d" msgstr "" -#: remote.c:13276 +#: remote.c:13392 msgid "Unable to parse trace frame number" msgstr "" -#: remote.c:13286 +#: remote.c:13402 msgid "Unable to parse tracepoint number" msgstr "" -#: remote.c:13339 +#: remote.c:13455 msgid "Remote file name too long for trace save packet" msgstr "" -#: remote.c:13413 +#: remote.c:13529 msgid "Target does not support disconnected tracing." msgstr "" -#: remote.c:13638 +#: remote.c:13754 #, possible-c-format msgid "Failed to configure the BTS buffer size: %s" msgstr "" -#: remote.c:13640 +#: remote.c:13756 msgid "Failed to configure the BTS buffer size." msgstr "" -#: remote.c:13660 +#: remote.c:13776 #, possible-c-format msgid "Failed to configure the trace buffer size: %s" msgstr "" -#: remote.c:13662 +#: remote.c:13778 msgid "Failed to configure the trace buffer size." msgstr "" -#: remote.c:13715 +#: remote.c:13831 msgid "" "Target is recording using Intel Processor Trace but support was disabled at " "compile time." msgstr "" -#: remote.c:13730 +#: remote.c:13846 #, possible-c-format msgid "Target is recording using %s.\n" msgstr "" -#: remote.c:13776 x86-linux-nat.c:226 +#: remote.c:13879 remote.c:13928 remote.c:13969 +msgid "Target does not support branch tracing." +msgstr "" + +#: remote.c:13892 x86-linux-nat.c:226 #, possible-c-format msgid "Could not enable branch tracing for %s: %s" msgstr "" -#: remote.c:13779 +#: remote.c:13895 #, possible-c-format msgid "Could not enable branch tracing for %s." msgstr "" -#: remote.c:13823 +#: remote.c:13939 #, possible-c-format msgid "Could not disable branch tracing for %s: %s" msgstr "" -#: remote.c:13826 +#: remote.c:13942 #, possible-c-format msgid "Could not disable branch tracing for %s." msgstr "" -#: remote.c:13856 +#: remote.c:13972 msgid "Cannot process branch tracing result. XML parsing not supported." msgstr "" -#: remote.c:13872 +#: remote.c:13988 #, possible-c-format msgid "Bad branch tracing read type: %u." msgstr "" -#: remote.c:13924 +#: remote.c:14039 #, possible-c-format msgid "not currently attached to process %d" msgstr "" -#: remote.c:13989 +#: remote.c:14104 #, possible-c-format msgid "Thread handle size mismatch: %d vs %zu (from remote)" msgstr "" -#: remote.c:14107 +#: remote.c:14246 #, possible-c-format msgid "Remote refused setting thread events: %s" msgstr "" -#: remote.c:14218 +#: remote.c:14351 #, possible-c-format msgid "Debugger's willingness to use range stepping is %s.\n" msgstr "" -#: remote.c:14248 +#: remote.c:14381 msgid "Range stepping is not supported by the current target" msgstr "" #. set/show remote ... #. allow-unknown -#: remote.c:14274 remote.c:14280 +#: remote.c:14408 remote.c:14414 msgid "" "Remote protocol specific variables.\n" "Configure various remote-protocol specific variables such as\n" @@ -25791,14 +25688,14 @@ msgstr "" #. allow-unknown -#: remote.c:14287 +#: remote.c:14421 msgid "" "Compare section data on target to the exec file.\n" "Argument is a single section name (default: all loaded sections).\n" "To compare only read-only loaded sections, specify the -r option." msgstr "" -#: remote.c:14293 +#: remote.c:14427 msgid "" "Send an arbitrary packet to a remote target.\n" " maintenance packet TEXT\n" @@ -25808,57 +25705,57 @@ "terminating `#' character and checksum." msgstr "" -#: remote.c:14302 +#: remote.c:14436 msgid "Set whether to send break if interrupted." msgstr "" -#: remote.c:14303 +#: remote.c:14437 msgid "Show whether to send break if interrupted." msgstr "" -#: remote.c:14304 +#: remote.c:14438 msgid "If set, a break, instead of a cntrl-c, is sent to the remote target." msgstr "" -#: remote.c:14317 +#: remote.c:14451 msgid "Set interrupt sequence to remote target." msgstr "" -#: remote.c:14318 +#: remote.c:14452 msgid "Show interrupt sequence to remote target." msgstr "" -#: remote.c:14319 +#: remote.c:14453 msgid "" "Valid value is \"Ctrl-C\", \"BREAK\" or \"BREAK-g\". The default is \"Ctrl-C" "\"." msgstr "" -#: remote.c:14326 +#: remote.c:14460 msgid "" "Set whether interrupt-sequence is sent to remote target when gdb connects to." msgstr "" -#: remote.c:14327 +#: remote.c:14461 msgid "" "Show whether interrupt-sequence is sent to remote target when gdb connects " "to." msgstr "" -#: remote.c:14328 +#: remote.c:14462 msgid "If set, interrupt sequence is sent to remote target." msgstr "" #. Install commands for configuring memory read/write packets. -#: remote.c:14335 +#: remote.c:14469 msgid "Set the maximum number of bytes per memory write packet (deprecated)." msgstr "" -#: remote.c:14338 +#: remote.c:14472 msgid "Show the maximum number of bytes per memory write packet (deprecated)." msgstr "" -#: remote.c:14342 +#: remote.c:14476 msgid "" "Set the maximum number of bytes per memory-write packet.\n" "Specify the number of bytes in a packet or 0 (zero) for the\n" @@ -25867,7 +25764,7 @@ "further restriction and ``limit'' to enable that restriction." msgstr "" -#: remote.c:14350 +#: remote.c:14484 msgid "" "Set the maximum number of bytes per memory-read packet.\n" "Specify the number of bytes in a packet or 0 (zero) for the\n" @@ -25876,107 +25773,107 @@ "further restriction and ``limit'' to enable that restriction." msgstr "" -#: remote.c:14359 +#: remote.c:14493 msgid "Show the maximum number of bytes per memory-write packet." msgstr "" -#: remote.c:14363 +#: remote.c:14497 msgid "Show the maximum number of bytes per memory-read packet." msgstr "" -#: remote.c:14367 +#: remote.c:14501 msgid "Set the maximum number of target hardware watchpoints." msgstr "" -#: remote.c:14368 +#: remote.c:14502 msgid "Show the maximum number of target hardware watchpoints." msgstr "" -#: remote.c:14369 +#: remote.c:14503 msgid "Specify \"unlimited\" for unlimited hardware watchpoints." msgstr "" -#: remote.c:14376 +#: remote.c:14510 msgid "Set the maximum length (in bytes) of a target hardware watchpoint." msgstr "" -#: remote.c:14377 +#: remote.c:14511 msgid "Show the maximum length (in bytes) of a target hardware watchpoint." msgstr "" -#: remote.c:14378 +#: remote.c:14512 msgid "Specify \"unlimited\" to allow watchpoints of unlimited size." msgstr "" -#: remote.c:14383 +#: remote.c:14517 msgid "Set the maximum number of target hardware breakpoints." msgstr "" -#: remote.c:14384 +#: remote.c:14518 msgid "Show the maximum number of target hardware breakpoints." msgstr "" -#: remote.c:14385 +#: remote.c:14519 msgid "Specify \"unlimited\" for unlimited hardware breakpoints." msgstr "" -#: remote.c:14391 +#: remote.c:14525 msgid "Set the maximum size of the address (in bits) in a memory packet." msgstr "" -#: remote.c:14392 +#: remote.c:14526 msgid "Show the maximum size of the address (in bits) in a memory packet." msgstr "" -#: remote.c:14689 +#: remote.c:14823 msgid "Set use of remote protocol `Z' packets." msgstr "" -#: remote.c:14690 +#: remote.c:14824 msgid "Show use of remote protocol `Z' packets." msgstr "" -#: remote.c:14691 +#: remote.c:14825 msgid "" "When set, GDB will attempt to use the remote breakpoint and watchpoint\n" "packets." msgstr "" -#: remote.c:14700 +#: remote.c:14834 msgid "" "Manipulate files on the remote system.\n" "Transfer files to and from the remote target system." msgstr "" -#: remote.c:14707 +#: remote.c:14841 msgid "Copy a local file to the remote system." msgstr "" -#: remote.c:14711 +#: remote.c:14845 msgid "Copy a remote file to the local system." msgstr "" -#: remote.c:14715 +#: remote.c:14849 msgid "Delete a remote file." msgstr "" -#: remote.c:14719 +#: remote.c:14853 msgid "Set the remote pathname for \"run\"." msgstr "" -#: remote.c:14720 +#: remote.c:14854 msgid "Show the remote pathname for \"run\"." msgstr "" -#: remote.c:14728 +#: remote.c:14862 msgid "Enable or disable range stepping." msgstr "" -#: remote.c:14729 +#: remote.c:14863 msgid "Show whether target-assisted range stepping is enabled." msgstr "" -#: remote.c:14730 +#: remote.c:14864 msgid "" "If on, and the target supports it, when stepping a source line, GDB\n" "tells the target to step the corresponding range of addresses itself " @@ -25986,31 +25883,31 @@ "stepping is supported by the target. The default is on." msgstr "" -#: remote.c:14741 +#: remote.c:14875 msgid "Set watchdog timer." msgstr "" -#: remote.c:14742 +#: remote.c:14876 msgid "Show watchdog timer." msgstr "" -#: remote.c:14743 +#: remote.c:14877 msgid "" "When non-zero, this timeout is used instead of waiting forever for a target\n" "to finish a low-level step or continue operation. If the specified amount\n" "of time passes without a response from the target, an error occurs." msgstr "" -#: remote.c:14752 +#: remote.c:14886 msgid "Set the maximum number of characters to display for each remote packet." msgstr "" -#: remote.c:14753 +#: remote.c:14887 msgid "" "Show the maximum number of characters to display for each remote packet." msgstr "" -#: remote.c:14754 +#: remote.c:14888 msgid "Specify \"unlimited\" to display all the characters." msgstr "" @@ -26042,7 +25939,7 @@ msgid "No bookmark #%d." msgstr "" -#: reverse.c:240 thread.c:1913 +#: reverse.c:240 thread.c:1943 msgid "Command requires an argument." msgstr "" @@ -26061,14 +25958,14 @@ msgid "No bookmarks.\n" msgstr "" -#: reverse.c:328 +#: reverse.c:329 msgid "" "Step program backward until it reaches the beginning of another source " "line.\n" "Argument N means do this N times (or till program stops for another reason)." msgstr "" -#: reverse.c:334 +#: reverse.c:335 msgid "" "Step program backward, proceeding through subroutine calls.\n" "Like the \"reverse-step\" command as long as subroutine calls do not " @@ -26077,19 +25974,19 @@ "Argument N means do this N times (or till program stops for another reason)." msgstr "" -#: reverse.c:342 +#: reverse.c:343 msgid "" "Step backward exactly one instruction.\n" "Argument N means do this N times (or till program stops for another reason)." msgstr "" -#: reverse.c:348 +#: reverse.c:349 msgid "" "Step backward one instruction, but proceed through called subroutines.\n" "Argument N means do this N times (or till program stops for another reason)." msgstr "" -#: reverse.c:354 +#: reverse.c:355 msgid "" "Continue program being debugged but run it in reverse.\n" "If proceeding from breakpoint, a number N may be used as an argument,\n" @@ -26097,18 +25994,18 @@ "the breakpoint won't break until the Nth time it is reached)." msgstr "" -#: reverse.c:361 +#: reverse.c:362 msgid "Execute backward until just before selected stack frame is called." msgstr "" -#: reverse.c:364 +#: reverse.c:365 msgid "" "Set a bookmark in the program's execution history.\n" "A bookmark represents a point in the execution history \n" "that can be returned to at a later point in the debug session." msgstr "" -#: reverse.c:368 +#: reverse.c:369 msgid "" "Status of user-settable bookmarks.\n" "Bookmarks are user-settable markers representing a point in the \n" @@ -26116,14 +26013,14 @@ "session." msgstr "" -#: reverse.c:373 +#: reverse.c:374 msgid "" "Delete a bookmark from the bookmark list.\n" "Argument is a bookmark number or numbers,\n" " or no argument to delete all bookmarks." msgstr "" -#: reverse.c:378 +#: reverse.c:379 msgid "" "Go to an earlier-bookmarked point in the program's execution history.\n" "Argument is the bookmark number of a bookmark saved earlier by using \n" @@ -26132,138 +26029,125 @@ " end (end of recording)" msgstr "" -#: riscv-fbsd-tdep.c:192 +#: riscv-fbsd-tdep.c:194 #, possible-c-format msgid "Unable to fetch %%tp" msgstr "" -#: riscv-tdep.c:277 +#: riscv-tdep.c:406 #, possible-c-format msgid "Debugger's use of compressed breakpoints is set to %s.\n" msgstr "" -#: riscv-tdep.c:300 -msgid "\"set riscv\" must be followed by an appropriate subcommand.\n" -msgstr "" - -#: riscv-tdep.c:323 -msgid "\"set debug riscv\" must be followed by an appropriate subcommand.\n" -msgstr "" - -#: riscv-tdep.c:335 +#: riscv-tdep.c:428 #, possible-c-format msgid "RiscV debug variable `%s' is set to: %s\n" msgstr "" -#: riscv-tdep.c:485 +#: riscv-tdep.c:578 msgid "unhandled breakpoint kind" msgstr "" -#: riscv-tdep.c:2210 riscv-tdep.c:2220 riscv-tdep.c:2235 riscv-tdep.c:2242 -#: riscv-tdep.c:2262 riscv-tdep.c:2268 +#: riscv-tdep.c:2314 riscv-tdep.c:2324 riscv-tdep.c:2339 riscv-tdep.c:2346 +#: riscv-tdep.c:2366 riscv-tdep.c:2372 msgid "failed during argument setup" msgstr "" #. The second location should never be a reference, any #. argument being passed by reference just places its address #. in the first location and is done. -#: riscv-tdep.c:2384 riscv-tdep.c:2607 riscv-tdep.c:2748 riscv-tdep.c:2771 -#: riscv-tdep.c:2794 +#: riscv-tdep.c:2488 riscv-tdep.c:2720 riscv-tdep.c:2862 riscv-tdep.c:2885 +#: riscv-tdep.c:2908 msgid "invalid argument location" msgstr "" -#: riscv-tdep.c:2421 riscv-tdep.c:2568 +#: riscv-tdep.c:2525 riscv-tdep.c:2687 msgid "unknown argument location type" msgstr "" -#: riscv-tdep.c:2946 -#, possible-c-format -msgid "unknown ELF header class %d" -msgstr "" - -#: riscv-tdep.c:3229 +#: riscv-tdep.c:3412 #, possible-c-format msgid "bfd requires xlen %d, but target has xlen %d" msgstr "" -#: riscv-tdep.c:3235 +#: riscv-tdep.c:3418 #, possible-c-format msgid "bfd requires flen %d, but target has flen %d" msgstr "" -#: riscv-tdep.c:3522 riscv-tdep.c:3527 +#: riscv-tdep.c:3708 riscv-tdep.c:3713 msgid "RISC-V specific debug commands." msgstr "" -#: riscv-tdep.c:3532 +#: riscv-tdep.c:3718 msgid "Set riscv breakpoint debugging." msgstr "" -#: riscv-tdep.c:3533 +#: riscv-tdep.c:3719 msgid "Show riscv breakpoint debugging." msgstr "" -#: riscv-tdep.c:3534 +#: riscv-tdep.c:3720 msgid "" "When non-zero, print debugging information for the riscv specific parts\n" "of the breakpoint mechanism." msgstr "" -#: riscv-tdep.c:3542 +#: riscv-tdep.c:3728 msgid "Set riscv inferior call debugging." msgstr "" -#: riscv-tdep.c:3543 +#: riscv-tdep.c:3729 msgid "Show riscv inferior call debugging." msgstr "" -#: riscv-tdep.c:3544 +#: riscv-tdep.c:3730 msgid "" "When non-zero, print debugging information for the riscv specific parts\n" "of the inferior call mechanism." msgstr "" -#: riscv-tdep.c:3552 +#: riscv-tdep.c:3738 msgid "Set riscv stack unwinding debugging." msgstr "" -#: riscv-tdep.c:3553 +#: riscv-tdep.c:3739 msgid "Show riscv stack unwinding debugging." msgstr "" -#: riscv-tdep.c:3554 +#: riscv-tdep.c:3740 msgid "" "When non-zero, print debugging information for the riscv specific parts\n" "of the stack unwinding mechanism." msgstr "" -#: riscv-tdep.c:3562 +#: riscv-tdep.c:3748 msgid "Set riscv gdbarch initialisation debugging." msgstr "" -#: riscv-tdep.c:3563 +#: riscv-tdep.c:3749 msgid "Show riscv gdbarch initialisation debugging." msgstr "" -#: riscv-tdep.c:3564 +#: riscv-tdep.c:3750 msgid "" "When non-zero, print debugging information for the riscv gdbarch\n" "initialisation process." msgstr "" -#: riscv-tdep.c:3573 riscv-tdep.c:3577 +#: riscv-tdep.c:3759 riscv-tdep.c:3763 msgid "RISC-V specific commands." msgstr "" -#: riscv-tdep.c:3584 +#: riscv-tdep.c:3770 msgid "Set debugger's use of compressed breakpoints." msgstr "" -#: riscv-tdep.c:3585 +#: riscv-tdep.c:3771 msgid "\tShow debugger's use of compressed breakpoints." msgstr "" -#: riscv-tdep.c:3586 +#: riscv-tdep.c:3772 msgid "" "Debugging compressed code requires compressed breakpoints to be used. If\n" "left to 'auto' then gdb will use them if the existing instruction is a\n" @@ -26303,75 +26187,71 @@ msgid "ptrace ldinfo" msgstr "" -#: rs6000-tdep.c:2498 +#: rs6000-tdep.c:2499 #, possible-c-format msgid "rs6000_pseudo_register_type: called on unexpected register '%s' (%d)" msgstr "" -#: rs6000-tdep.c:2937 +#: rs6000-tdep.c:2938 msgid "" "Cannot write to the checkpointed EFP register, the corresponding vector " "register is unavailable." msgstr "" -#: rs6000-tdep.c:2972 +#: rs6000-tdep.c:2973 #, possible-c-format msgid "rs6000_pseudo_register_read: called on unexpected register '%s' (%d)" msgstr "" -#: rs6000-tdep.c:3002 +#: rs6000-tdep.c:3003 #, possible-c-format msgid "rs6000_pseudo_register_write: called on unexpected register '%s' (%d)" msgstr "" -#: rs6000-tdep.c:3144 +#: rs6000-tdep.c:3145 #, possible-c-format msgid "rs6000_pseudo_register_collect: called on unexpected register '%s' (%d)" msgstr "" -#: rs6000-tdep.c:7179 -msgid "\"set powerpc\" must be followed by an appropriate subcommand.\n" -msgstr "" - -#: rs6000-tdep.c:7220 +#: rs6000-tdep.c:7205 #, possible-c-format msgid "Invalid vector ABI accepted: %s." msgstr "" -#: rs6000-tdep.c:7236 +#: rs6000-tdep.c:7221 #, possible-c-format msgid "Use of exact watchpoints is %s.\n" msgstr "" -#: rs6000-tdep.c:7340 rs6000-tdep.c:7344 +#: rs6000-tdep.c:7326 rs6000-tdep.c:7330 msgid "Various PowerPC-specific commands." msgstr "" -#: rs6000-tdep.c:7350 +#: rs6000-tdep.c:7336 msgid "Set whether to use a soft-float ABI." msgstr "" -#: rs6000-tdep.c:7351 +#: rs6000-tdep.c:7337 msgid "Show whether to use a soft-float ABI." msgstr "" -#: rs6000-tdep.c:7358 +#: rs6000-tdep.c:7344 msgid "Set the vector ABI." msgstr "" -#: rs6000-tdep.c:7359 +#: rs6000-tdep.c:7345 msgid "Show the vector ABI." msgstr "" -#: rs6000-tdep.c:7365 +#: rs6000-tdep.c:7351 msgid "Set whether to use just one debug register for watchpoints on scalars." msgstr "" -#: rs6000-tdep.c:7367 +#: rs6000-tdep.c:7353 msgid "Show whether to use just one debug register for watchpoints on scalars." msgstr "" -#: rs6000-tdep.c:7369 +#: rs6000-tdep.c:7355 msgid "" "If true, GDB will use only one debug register when watching a variable of\n" "scalar type, thus assuming that the variable is accessed through the " @@ -26485,128 +26365,135 @@ msgid "%s in expression, near `%s'." msgstr "" +#. Perhaps we could get here by trying to print an Ada variant +#. record in Rust mode. Unlikely, but an error is safer than an +#. assert. +#: rust-lang.c:101 +msgid "Could not find active enum variant" +msgstr "" + #. Print the enum type name here to be more clear. -#: rust-lang.c:477 +#: rust-lang.c:425 #, possible-c-format msgid "%s {%p[<No data fields>%p]}" msgstr "" -#: rust-lang.c:615 +#: rust-lang.c:558 msgid "Could not determine the array bounds" msgstr "" -#: rust-lang.c:1180 +#: rust-lang.c:1038 msgid "Method calls only supported on struct or enum types" msgstr "" -#: rust-lang.c:1182 +#: rust-lang.c:1040 msgid "Method call on nameless type" msgstr "" -#: rust-lang.c:1189 +#: rust-lang.c:1047 #, possible-c-format msgid "Could not find function named '%s'" msgstr "" -#: rust-lang.c:1193 +#: rust-lang.c:1051 #, possible-c-format msgid "Function '%s' takes no arguments" msgstr "" -#: rust-lang.c:1262 +#: rust-lang.c:1120 msgid "Range expression with different types" msgstr "" -#: rust-lang.c:1371 +#: rust-lang.c:1229 msgid "Can't take slice of array without '&'" msgstr "" -#: rust-lang.c:1395 +#: rust-lang.c:1253 msgid "Could not find 'data_ptr' in slice type" msgstr "" -#: rust-lang.c:1400 rust-lang.c:1451 +#: rust-lang.c:1258 rust-lang.c:1309 msgid "Cannot subscript non-array type" msgstr "" -#: rust-lang.c:1430 +#: rust-lang.c:1288 msgid "Can't compute array bounds" msgstr "" -#: rust-lang.c:1432 +#: rust-lang.c:1290 msgid "Found array with non-zero lower bound" msgstr "" -#: rust-lang.c:1457 +#: rust-lang.c:1315 msgid "Index less than zero" msgstr "" -#: rust-lang.c:1459 +#: rust-lang.c:1317 msgid "Index greater than length" msgstr "" -#: rust-lang.c:1475 +#: rust-lang.c:1333 msgid "High index less than zero" msgstr "" -#: rust-lang.c:1477 +#: rust-lang.c:1335 msgid "Low index greater than high index" msgstr "" -#: rust-lang.c:1479 +#: rust-lang.c:1337 msgid "High index greater than length" msgstr "" -#: rust-lang.c:1642 +#: rust-lang.c:1500 msgid "Array with negative number of elements" msgstr "" -#: rust-lang.c:1683 +#: rust-lang.c:1545 #, possible-c-format msgid "Cannot access field %d of empty enum %s" msgstr "" -#: rust-lang.c:1706 +#: rust-lang.c:1560 #, possible-c-format msgid "Cannot access field %d of variant %s::%s, there are only %d fields" msgstr "" -#: rust-lang.c:1712 +#: rust-lang.c:1566 #, possible-c-format msgid "Cannot access field %d of %s, there are only %d fields" msgstr "" -#: rust-lang.c:1721 +#: rust-lang.c:1575 #, possible-c-format msgid "Variant %s::%s is not a tuple variant" msgstr "" -#: rust-lang.c:1725 +#: rust-lang.c:1579 #, possible-c-format msgid "" "Attempting to access anonymous field %d of %s, which is not a tuple, tuple " "struct, or tuple-like variant" msgstr "" -#: rust-lang.c:1734 +#: rust-lang.c:1588 msgid "" "Anonymous field access is only allowed on tuples, tuple structs, and tuple-" "like enum variants" msgstr "" -#: rust-lang.c:1755 +#: rust-lang.c:1613 #, possible-c-format msgid "Cannot access field %s of empty enum %s" msgstr "" -#: rust-lang.c:1772 +#: rust-lang.c:1622 #, possible-c-format msgid "" "Attempting to access named field %s of tuple variant %s::%s, which has only " "anonymous fields" msgstr "" -#: rust-lang.c:1784 +#: rust-lang.c:1634 #, possible-c-format msgid "Could not find field %s of struct variant %s::%s" msgstr "" @@ -26641,34 +26528,34 @@ msgid "Couldn't modify watchpoint status" msgstr "" -#: s390-linux-nat.c:1057 +#: s390-linux-nat.c:1058 msgid "Set whether to show the PER (debug) hardware state." msgstr "" -#: s390-linux-nat.c:1058 +#: s390-linux-nat.c:1059 msgid "Show whether to show the PER (debug) hardware state." msgstr "" -#: s390-linux-nat.c:1059 +#: s390-linux-nat.c:1060 msgid "" "Use \"on\" to enable, \"off\" to disable.\n" "If enabled, the PER state is shown after it is changed by GDB,\n" "and when the inferior triggers a breakpoint or watchpoint." msgstr "" -#: s390-tdep.c:1953 +#: s390-tdep.c:1955 msgid "Stack overflow" msgstr "" -#: s390-tdep.c:2071 +#: s390-tdep.c:2073 msgid "invalid return type" msgstr "" -#: s390-tdep.c:2109 +#: s390-tdep.c:2111 msgid "Cannot set function return value." msgstr "" -#: s390-tdep.c:2111 +#: s390-tdep.c:2113 msgid "Function return value unknown." msgstr "" @@ -26698,71 +26585,71 @@ #. timer tick #. keyboard #. slave icu -#: ser-go32.c:931 +#: ser-go32.c:932 msgid "Set COM1 base i/o port address." msgstr "" -#: ser-go32.c:932 +#: ser-go32.c:933 msgid "Show COM1 base i/o port address." msgstr "" -#: ser-go32.c:938 +#: ser-go32.c:939 msgid "Set COM1 interrupt request." msgstr "" -#: ser-go32.c:939 +#: ser-go32.c:940 msgid "Show COM1 interrupt request." msgstr "" -#: ser-go32.c:945 +#: ser-go32.c:946 msgid "Set COM2 base i/o port address." msgstr "" -#: ser-go32.c:946 +#: ser-go32.c:947 msgid "Show COM2 base i/o port address." msgstr "" -#: ser-go32.c:952 +#: ser-go32.c:953 msgid "Set COM2 interrupt request." msgstr "" -#: ser-go32.c:953 +#: ser-go32.c:954 msgid "Show COM2 interrupt request." msgstr "" -#: ser-go32.c:959 +#: ser-go32.c:960 msgid "Set COM3 base i/o port address." msgstr "" -#: ser-go32.c:960 +#: ser-go32.c:961 msgid "Show COM3 base i/o port address." msgstr "" -#: ser-go32.c:966 +#: ser-go32.c:967 msgid "Set COM3 interrupt request." msgstr "" -#: ser-go32.c:967 +#: ser-go32.c:968 msgid "Show COM3 interrupt request." msgstr "" -#: ser-go32.c:973 +#: ser-go32.c:974 msgid "Set COM4 base i/o port address." msgstr "" -#: ser-go32.c:974 +#: ser-go32.c:975 msgid "Show COM4 base i/o port address." msgstr "" -#: ser-go32.c:980 +#: ser-go32.c:981 msgid "Set COM4 interrupt request." msgstr "" -#: ser-go32.c:981 +#: ser-go32.c:982 msgid "Show COM4 interrupt request." msgstr "" -#: ser-go32.c:988 +#: ser-go32.c:989 msgid "Print DOS serial port status." msgstr "" @@ -26796,35 +26683,40 @@ msgid "error starting child process '%s': %s" msgstr "" +#: ser-tcp.c:291 +#, possible-c-format +msgid "Missing port on hostname '%s'" +msgstr "" + #: ser-tcp.c:299 #, possible-c-format msgid "%s: cannot resolve name: %s\n" msgstr "" #. allow-unknown -#: ser-tcp.c:482 ser-tcp.c:487 +#: ser-tcp.c:469 ser-tcp.c:474 msgid "" "TCP protocol specific variables.\n" "Configure variables specific to remote TCP connections." msgstr "" -#: ser-tcp.c:494 +#: ser-tcp.c:481 msgid "Set auto-retry on socket connect." msgstr "" -#: ser-tcp.c:495 +#: ser-tcp.c:482 msgid "Show auto-retry on socket connect." msgstr "" -#: ser-tcp.c:501 +#: ser-tcp.c:488 msgid "Set timeout limit in seconds for socket connection." msgstr "" -#: ser-tcp.c:502 +#: ser-tcp.c:489 msgid "Show timeout limit in seconds for socket connection." msgstr "" -#: ser-tcp.c:503 +#: ser-tcp.c:490 msgid "" "If set to \"unlimited\", GDB will keep attempting to establish a\n" "connection forever, unless interrupted with Ctrl-c.\n" @@ -26857,98 +26749,98 @@ msgid "Invalid baud rate %d. Maximum value is %d." msgstr "" -#: ser-unix.c:508 +#: ser-unix.c:509 msgid "Set use of hardware flow control for remote serial I/O." msgstr "" -#: ser-unix.c:509 +#: ser-unix.c:510 msgid "Show use of hardware flow control for remote serial I/O." msgstr "" -#: ser-unix.c:510 +#: ser-unix.c:511 msgid "" "Enable or disable hardware flow control (RTS/CTS) on the serial port\n" "when debugging using remote targets." msgstr "" -#: serial.c:392 +#: serial.c:396 msgid "serial_readchar: blocking read in async mode" msgstr "" -#: serial.c:647 +#: serial.c:637 #, possible-c-format msgid "Baud rate for remote serial I/O is %s.\n" msgstr "" -#: serial.c:679 +#: serial.c:670 msgid "" "Connect the terminal directly up to the command monitor.\n" "Use <CR>~. or <CR>~^D to break out." msgstr "" -#: serial.c:684 +#: serial.c:675 msgid "Set default serial/parallel port configuration." msgstr "" -#: serial.c:690 +#: serial.c:681 msgid "Show default serial/parallel port configuration." msgstr "" #. If target is open when baud changes, it doesn't take effect until #. the next open (I think, not sure). -#: serial.c:698 +#: serial.c:689 msgid "Set baud rate for remote serial I/O." msgstr "" -#: serial.c:699 +#: serial.c:690 msgid "Show baud rate for remote serial I/O." msgstr "" -#: serial.c:700 +#: serial.c:691 msgid "" "This value is used to set the speed of the serial port when debugging\n" "using remote targets." msgstr "" -#: serial.c:708 +#: serial.c:699 msgid "Set parity for remote serial I/O." msgstr "" -#: serial.c:709 +#: serial.c:700 msgid "Show parity for remote serial I/O." msgstr "" -#: serial.c:715 +#: serial.c:706 msgid "Set filename for remote session recording." msgstr "" -#: serial.c:716 +#: serial.c:707 msgid "Show filename for remote session recording." msgstr "" -#: serial.c:717 +#: serial.c:708 msgid "" "This file is used to record the remote session for future playback\n" "by gdbserver." msgstr "" -#: serial.c:725 +#: serial.c:716 msgid "Set numerical base for remote session logging." msgstr "" -#: serial.c:726 +#: serial.c:717 msgid "Show numerical base for remote session logging." msgstr "" -#: serial.c:733 +#: serial.c:724 msgid "Set serial debugging." msgstr "" -#: serial.c:734 +#: serial.c:725 msgid "Show serial debugging." msgstr "" -#: serial.c:735 +#: serial.c:726 msgid "When non-zero, serial port debugging is enabled." msgstr "" @@ -26956,15 +26848,15 @@ msgid "sh_register_convert_to_raw called with non DR register number" msgstr "" -#: sh-tdep.c:2437 +#: sh-tdep.c:2424 msgid "Set calling convention used when calling target functions from GDB." msgstr "" -#: sh-tdep.c:2439 +#: sh-tdep.c:2426 msgid "Show calling convention used when calling target functions from GDB." msgstr "" -#: sh-tdep.c:2441 +#: sh-tdep.c:2428 msgid "" "gcc - Use GCC calling convention (default).\n" "renesas - Enforce Renesas calling convention." @@ -26988,78 +26880,78 @@ msgid "Function %s will be skipped when stepping.\n" msgstr "" -#: skip.c:216 +#: skip.c:212 msgid "No default function now." msgstr "" -#: skip.c:221 +#: skip.c:219 #, possible-c-format msgid "No function found containing current program point %s." msgstr "" -#: skip.c:259 skip.c:267 skip.c:275 skip.c:283 +#: skip.c:256 skip.c:264 skip.c:272 skip.c:280 #, possible-c-format msgid "Missing value for %s option." msgstr "" -#: skip.c:288 +#: skip.c:285 #, possible-c-format msgid "Invalid skip option: %s" msgstr "" -#: skip.c:303 +#: skip.c:300 msgid "Cannot specify both -file and -gfile." msgstr "" -#: skip.c:306 +#: skip.c:303 msgid "Cannot specify both -function and -rfunction." msgstr "" -#: skip.c:335 +#: skip.c:332 msgid "File(s)" msgstr "" -#: skip.c:335 +#: skip.c:332 msgid "File" msgstr "" -#: skip.c:336 +#: skip.c:333 msgid "file(s)" msgstr "" -#: skip.c:338 +#: skip.c:335 msgid "Function(s)" msgstr "" -#: skip.c:338 +#: skip.c:335 msgid "Function" msgstr "" -#: skip.c:342 skip.c:347 +#: skip.c:339 skip.c:344 #, possible-c-format msgid "%s %s will be skipped when stepping.\n" msgstr "" -#: skip.c:352 +#: skip.c:349 #, possible-c-format msgid "%s %s in %s %s will be skipped when stepping.\n" msgstr "" -#: skip.c:377 +#: skip.c:374 msgid "Not skipping any files or functions.\n" msgstr "" -#: skip.c:380 +#: skip.c:377 #, possible-c-format msgid "No skiplist entries found with number %s.\n" msgstr "" -#: skip.c:450 skip.c:466 skip.c:490 +#: skip.c:447 skip.c:463 skip.c:487 #, possible-c-format msgid "No skiplist entries found with number %s." msgstr "" -#: skip.c:674 +#: skip.c:672 msgid "" "Ignore a function while stepping.\n" "\n" @@ -27075,21 +26967,21 @@ " -rfu|-rfunction FUNCTION-NAME-REGULAR-EXPRESSION" msgstr "" -#: skip.c:689 +#: skip.c:687 msgid "" "Ignore a file while stepping.\n" "Usage: skip file [FILE-NAME]\n" "If no filename is given, ignore the current file." msgstr "" -#: skip.c:696 +#: skip.c:694 msgid "" "Ignore a function while stepping.\n" "Usage: skip function [FUNCTION-NAME]\n" "If no function name is given, skip the current function." msgstr "" -#: skip.c:703 +#: skip.c:701 msgid "" "Enable skip entries.\n" "Usage: skip enable [NUMBER | RANGE]...\n" @@ -27099,7 +26991,7 @@ "If you don't specify any numbers or ranges, we'll enable all skip entries." msgstr "" -#: skip.c:712 +#: skip.c:710 msgid "" "Disable skip entries.\n" "Usage: skip disable [NUMBER | RANGE]...\n" @@ -27110,7 +27002,7 @@ "If you don't specify any numbers or ranges, we'll disable all skip entries." msgstr "" -#: skip.c:721 +#: skip.c:719 msgid "" "Delete skip entries.\n" "Usage: skip delete [NUMBER | RANGES]...\n" @@ -27120,7 +27012,7 @@ "If you don't specify any numbers or ranges, we'll delete all skip entries." msgstr "" -#: skip.c:730 +#: skip.c:728 msgid "" "Display the status of skips.\n" "Usage: info skip [NUMBER | RANGES]...\n" @@ -27130,17 +27022,17 @@ "If you don't specify any numbers or ranges, we'll show all skips." msgstr "" -#: skip.c:739 +#: skip.c:737 msgid "" "Set whether to print the debug output about skipping files and functions." msgstr "" -#: skip.c:741 +#: skip.c:739 msgid "" "Show whether the debug output about skipping files and functions is printed." msgstr "" -#: skip.c:743 +#: skip.c:741 msgid "" "When non-zero, debug output about skipping files and functions is displayed." msgstr "" @@ -27184,74 +27076,74 @@ msgstr "" #. Inactive thread. -#: sol-thread.c:414 sol-thread.c:446 +#: sol-thread.c:414 sol-thread.c:436 msgid "This version of Solaris can't start inactive threads." msgstr "" -#: sol-thread.c:416 sol-thread.c:448 +#: sol-thread.c:416 sol-thread.c:438 #, possible-c-format msgid "Specified thread %ld seems to have terminated" msgstr "" -#: sol-thread.c:499 +#: sol-thread.c:493 msgid "sol_thread_fetch_registers: thread == 0" msgstr "" -#: sol-thread.c:503 +#: sol-thread.c:497 #, possible-c-format msgid "sol_thread_fetch_registers: td_ta_map_id2thr: %s" msgstr "" -#: sol-thread.c:510 +#: sol-thread.c:504 #, possible-c-format msgid "sol_thread_fetch_registers: td_thr_getgregs %s" msgstr "" -#: sol-thread.c:520 +#: sol-thread.c:514 #, possible-c-format msgid "sol_thread_fetch_registers: td_thr_getfpregs %s" msgstr "" -#: sol-thread.c:553 +#: sol-thread.c:547 #, possible-c-format msgid "sol_thread_store_registers: td_ta_map_id2thr %s" msgstr "" -#: sol-thread.c:560 +#: sol-thread.c:554 #, possible-c-format msgid "sol_thread_store_registers: td_thr_getgregs %s" msgstr "" -#: sol-thread.c:564 +#: sol-thread.c:558 #, possible-c-format msgid "sol_thread_store_registers: td_thr_getfpregs %s" msgstr "" -#: sol-thread.c:573 +#: sol-thread.c:567 #, possible-c-format msgid "sol_thread_store_registers: td_thr_setgregs %s" msgstr "" -#: sol-thread.c:577 +#: sol-thread.c:571 #, possible-c-format msgid "sol_thread_store_registers: td_thr_setfpregs %s" msgstr "" -#: sol-thread.c:634 +#: sol-thread.c:628 #, possible-c-format msgid "sol_thread_new_objfile: td_init: %s" msgstr "" -#: sol-thread.c:662 +#: sol-thread.c:656 #, possible-c-format msgid "Cannot initialize thread debugging library: %s" msgstr "" -#: sol-thread.c:1131 +#: sol-thread.c:1101 msgid "info sol-thread: failed to get info for thread." msgstr "" -#: sol-thread.c:1219 +#: sol-thread.c:1190 msgid "Show info on Solaris user threads." msgstr "" @@ -27279,72 +27171,72 @@ msgid "%s (missing XML support?)" msgstr "" -#: solib-aix.c:464 +#: solib-aix.c:460 msgid "unable to relocate main executable (no info from loader)" msgstr "" #. Should never happen, but recover as best as we can (trying #. to open pathname without decoding, possibly leading to #. a failure), rather than triggering an assert failure). -#: solib-aix.c:579 +#: solib-aix.c:575 #, possible-c-format msgid "missing '(' in shared object pathname: %s" msgstr "" #. Arrange to free PATHNAME when the error is thrown. -#: solib-aix.c:599 solib.c:472 +#: solib-aix.c:595 solib.c:472 #, possible-c-format msgid "Could not open `%s' as an executable file: %s" msgstr "" -#: solib-aix.c:609 +#: solib-aix.c:605 #, possible-c-format msgid "\"%s\": not in executable format: %s." msgstr "" -#: solib-aix.c:627 +#: solib-aix.c:623 #, possible-c-format msgid "\"%s\": member \"%s\" missing." msgstr "" -#: solib-aix.c:634 +#: solib-aix.c:630 #, possible-c-format msgid "%s(%s): not in object format: %s." msgstr "" -#: solib-aix.c:679 +#: solib-aix.c:675 #, possible-c-format msgid "unable to find TOC entry for pc %s (no section contains this PC)" msgstr "" -#: solib-aix.c:685 +#: solib-aix.c:681 #, possible-c-format msgid "unable to find TOC entry for pc %s (%s has no data section)" msgstr "" -#: solib-aix.c:720 +#: solib-aix.c:716 #, possible-c-format msgid "solib-aix debugging is %s.\n" msgstr "" -#: solib-aix.c:746 +#: solib-aix.c:743 msgid "Control the debugging traces for the solib-aix module." msgstr "" -#: solib-aix.c:747 +#: solib-aix.c:744 msgid "Show whether solib-aix debugging traces are enabled." msgstr "" -#: solib-aix.c:748 +#: solib-aix.c:745 msgid "When on, solib-aix debugging traces are enabled." msgstr "" -#: solib-darwin.c:524 +#: solib-darwin.c:522 #, possible-c-format msgid "unhandled dyld version (%d)" msgstr "" -#: solib-darwin.c:659 +#: solib-darwin.c:657 #, possible-c-format msgid "`%s': not a shared-library: %s" msgstr "" @@ -27374,42 +27266,41 @@ "incomplete." msgstr "" -#: solib-dsbt.c:693 +#: solib-dsbt.c:691 msgid "" "dsbt_current_sos: Unable to fetch load map. Shared object chain may be " "incomplete." msgstr "" -#: solib-dsbt.c:710 solib-frv.c:415 -#, possible-c-format -msgid "Can't read pathname for link map entry: %s." +#: solib-dsbt.c:708 solib-frv.c:413 +msgid "Can't read pathname for link map entry." msgstr "" -#: solib-dsbt.c:757 solib-frv.c:486 solib-svr4.c:2444 +#: solib-dsbt.c:754 solib-frv.c:483 solib-svr4.c:2454 msgid "" "Unable to find dynamic linker breakpoint function.\n" "GDB will be unable to debug shared library initializers\n" "and track explicitly loaded dynamic code." msgstr "" -#: solib-dsbt.c:971 solib-frv.c:845 +#: solib-dsbt.c:967 solib-frv.c:841 msgid "shared library handler failed to enable breakpoint" msgstr "" -#: solib-dsbt.c:1021 +#: solib-dsbt.c:1017 #, possible-c-format msgid "solib-dsbt debugging is %s.\n" msgstr "" -#: solib-dsbt.c:1040 +#: solib-dsbt.c:1037 msgid "Set internal debugging of shared library code for DSBT ELF." msgstr "" -#: solib-dsbt.c:1041 +#: solib-dsbt.c:1038 msgid "Show internal debugging of shared library code for DSBT ELF." msgstr "" -#: solib-dsbt.c:1042 +#: solib-dsbt.c:1039 msgid "When non-zero, DSBT solib specific internal debugging is enabled." msgstr "" @@ -27419,58 +27310,58 @@ "incomplete." msgstr "" -#: solib-frv.c:392 +#: solib-frv.c:390 msgid "" "frv_current_sos: Unable to fetch load map. Shared object chain may be " "incomplete." msgstr "" -#: solib-frv.c:582 +#: solib-frv.c:579 msgid "Unable to determine dynamic linker loadmap address." msgstr "" -#: solib-frv.c:595 +#: solib-frv.c:592 #, possible-c-format msgid "Unable to load dynamic linker loadmap at address %s." msgstr "" -#: solib-frv.c:626 +#: solib-frv.c:623 msgid "Could not find symbol _dl_debug_addr in dynamic linker" msgstr "" -#: solib-frv.c:649 +#: solib-frv.c:646 #, possible-c-format msgid "" "Unable to fetch contents of _dl_debug_addr (at address %s) from dynamic " "linker" msgstr "" -#: solib-frv.c:675 +#: solib-frv.c:672 #, possible-c-format msgid "" "Unable to fetch _dl_debug_addr->r_brk (at address %s) from dynamic linker" msgstr "" -#: solib-frv.c:686 +#: solib-frv.c:683 #, possible-c-format msgid "" "Unable to fetch _dl_debug_addr->.r_brk entry point (at address %s) from " "dynamic linker" msgstr "" -#: solib-frv.c:782 +#: solib-frv.c:779 msgid "Unable to load the executable's loadmap." msgstr "" -#: solib-frv.c:1160 +#: solib-frv.c:1145 msgid "Set internal debugging of shared library code for FR-V." msgstr "" -#: solib-frv.c:1161 +#: solib-frv.c:1146 msgid "Show internal debugging of shared library code for FR-V." msgstr "" -#: solib-frv.c:1162 +#: solib-frv.c:1147 msgid "When non-zero, FR-V solib specific internal debugging is enabled." msgstr "" @@ -27500,41 +27391,39 @@ "version mismatch?)" msgstr "" -#: solib-svr4.c:973 +#: solib-svr4.c:971 msgid "Attempt to reload symbols from process? " msgstr "" -#: solib-svr4.c:1000 -#, possible-c-format -msgid "failed to read exec filename from attached file: %s" +#: solib-svr4.c:999 +msgid "failed to read exec filename from attached file" msgstr "" -#: solib-svr4.c:1150 +#: solib-svr4.c:1148 #, possible-c-format msgid "SVR4 Library list has unsupported version \"%s\"" msgstr "" -#: solib-svr4.c:1209 solib-target.c:217 +#: solib-svr4.c:1207 solib-target.c:217 msgid "target library list" msgstr "" -#: solib-svr4.c:1314 +#: solib-svr4.c:1309 #, possible-c-format msgid "Corrupted shared library list: %s != %s" msgstr "" -#: solib-svr4.c:1342 -#, possible-c-format -msgid "Can't read pathname for load map: %s." +#: solib-svr4.c:1337 +msgid "Can't read pathname for load map." msgstr "" -#: solib-svr4.c:1864 +#: solib-svr4.c:1857 msgid "" "Probes-based dynamic linker interface failed.\n" "Reverting to original interface." msgstr "" -#: solib-svr4.c:2121 +#: solib-svr4.c:2134 msgid "" "Initializing probes-based dynamic linker interface failed.\n" "Reverting to original interface." @@ -27543,7 +27432,7 @@ #. It can be printed repeatedly as there is no easy way to check #. the executable symbols/file has been already relocated to #. displacement. -#: solib-svr4.c:2904 +#: solib-svr4.c:2914 #, possible-c-format msgid "" "Using PIE (Position Independent Executable) displacement %s for \"%s\".\n" @@ -27557,18 +27446,18 @@ msgid "No segment or section bases defined" msgstr "" -#: solib-target.c:329 +#: solib-target.c:327 #, possible-c-format msgid "" "Could not relocate shared library \"%s\": wrong number of ALLOC sections" msgstr "" -#: solib-target.c:373 +#: solib-target.c:371 #, possible-c-format msgid "Could not relocate shared library \"%s\": no segments" msgstr "" -#: solib-target.c:383 +#: solib-target.c:382 #, possible-c-format msgid "Could not relocate shared library \"%s\": bad offsets" msgstr "" @@ -27600,23 +27489,23 @@ msgid "Can't find the file sections in `%s': %s" msgstr "" -#: solib.c:705 +#: solib.c:698 #, possible-c-format msgid "Error while reading shared library symbols for %s:\n" msgstr "" -#: solib.c:883 solib.c:1336 +#: solib.c:874 solib.c:1323 msgid "Error while mapping shared library sections:\n" msgstr "" -#: solib.c:900 +#: solib.c:891 #, possible-c-format msgid "" "Could not load shared library symbols for %s.\n" "Do you need \"set solib-search-path\" or \"set sysroot\"?" msgstr "" -#: solib.c:905 +#: solib.c:896 #, possible-c-format msgid "" "Could not load shared library symbols for %d libraries, e.g. %s.\n" @@ -27624,68 +27513,68 @@ "Do you need \"set solib-search-path\" or \"set sysroot\"?" msgstr "" -#: solib.c:952 +#: solib.c:941 #, possible-c-format msgid "Loading symbols for shared libraries: %s\n" msgstr "" -#: solib.c:956 solib.c:1290 +#: solib.c:945 solib.c:1277 msgid "Loading symbols for shared libraries.\n" msgstr "" -#: solib.c:1001 +#: solib.c:990 #, possible-c-format msgid "Symbols already loaded for %s\n" msgstr "" -#: solib.c:1116 +#: solib.c:1105 msgid "No shared libraries matched.\n" msgstr "" -#: solib.c:1118 +#: solib.c:1107 msgid "No shared libraries loaded at this time.\n" msgstr "" -#: solib.c:1123 +#: solib.c:1112 msgid "(*): Shared library is missing debugging information.\n" msgstr "" -#: solib.c:1419 +#: solib.c:1406 #, possible-c-format msgid "\"%s\" is deprecated, use \"%s\" instead." msgstr "" -#: solib.c:1421 +#: solib.c:1408 #, possible-c-format msgid "sysroot set to \"%s\"." msgstr "" -#: solib.c:1434 +#: solib.c:1421 #, possible-c-format msgid "Autoloading of shared library symbols is %s.\n" msgstr "" -#: solib.c:1580 +#: solib.c:1567 msgid "Load shared object library symbols for files matching REGEXP." msgstr "" -#: solib.c:1582 +#: solib.c:1569 msgid "Status of loaded shared object libraries." msgstr "" -#: solib.c:1585 +#: solib.c:1572 msgid "Unload all shared object library symbols." msgstr "" -#: solib.c:1588 +#: solib.c:1575 msgid "Set autoloading of shared library symbols." msgstr "" -#: solib.c:1589 +#: solib.c:1576 msgid "Show autoloading of shared library symbols." msgstr "" -#: solib.c:1590 +#: solib.c:1577 msgid "" "If \"on\", symbols from all shared object libraries will be loaded\n" "automatically when the inferior begins execution, when the dynamic linker\n" @@ -27693,32 +27582,32 @@ "inferior. Otherwise, symbols must be loaded manually, using `sharedlibrary'." msgstr "" -#: solib.c:1601 +#: solib.c:1588 msgid "Set an alternate system root." msgstr "" -#: solib.c:1602 +#: solib.c:1589 msgid "Show the current system root." msgstr "" -#: solib.c:1603 +#: solib.c:1590 msgid "" "The system root is used to load absolute shared library symbol files.\n" "For other (relative) files, you can add directories using\n" "`set solib-search-path'." msgstr "" -#: solib.c:1617 +#: solib.c:1604 msgid "" "Set the search path for loading non-absolute shared library symbol files." msgstr "" -#: solib.c:1619 +#: solib.c:1606 msgid "" "Show the search path for loading non-absolute shared library symbol files." msgstr "" -#: solib.c:1621 +#: solib.c:1608 msgid "" "This takes precedence over the environment variables PATH and " "LD_LIBRARY_PATH." @@ -27728,136 +27617,141 @@ msgid "Source file is more recent than executable." msgstr "" -#: source.c:97 +#: source.c:126 #, possible-c-format msgid "Number of source lines gdb will list by default is %s.\n" msgstr "" -#: source.c:120 +#: source.c:149 #, possible-c-format msgid "Filenames are displayed as \"%s\".\n" msgstr "" -#: source.c:322 +#: source.c:351 msgid "Can't find a default source file" msgstr "" -#: source.c:426 +#: source.c:453 msgid "Reinitialize source path to empty? " msgstr "" -#: source.c:650 +#: source.c:595 +#, possible-c-format +msgid "%s is not a directory." +msgstr "" + +#: source.c:676 msgid "No current source file.\n" msgstr "" -#: source.c:655 +#: source.c:681 #, possible-c-format msgid "Current source file is %s\n" msgstr "" -#: source.c:657 +#: source.c:683 #, possible-c-format msgid "Compilation directory is %s\n" msgstr "" -#: source.c:659 +#: source.c:685 #, possible-c-format msgid "Located in %s\n" msgstr "" -#: source.c:662 +#: source.c:688 #, possible-c-format msgid "Contains %d line%s.\n" msgstr "" -#: source.c:665 +#: source.c:691 #, possible-c-format msgid "Source language is %s.\n" msgstr "" -#: source.c:666 +#: source.c:692 #, possible-c-format msgid "Producer is %s.\n" msgstr "" -#: source.c:669 +#: source.c:695 #, possible-c-format msgid "Compiled with %s debugging format.\n" msgstr "" -#: source.c:671 +#: source.c:697 #, possible-c-format msgid "%s preprocessor macro info.\n" msgstr "" -#: source.c:1182 +#: source.c:1236 msgid "invalid filename_display_string" msgstr "" -#: source.c:1287 +#: source.c:1341 #, possible-c-format msgid "Line number %d out of range; %s has %d lines." msgstr "" -#: source.c:1426 +#: source.c:1483 msgid "No line number information available" msgstr "" #. Is there any case in which we get here, and have an address #. which the user would want to see? If we have debugging symbols #. and no line numbers? -#: source.c:1486 +#: source.c:1542 #, possible-c-format msgid "Line number %d is out of range for \"%s\".\n" msgstr "" -#: source.c:1521 +#: source.c:1577 msgid "Expression not found" msgstr "" -#: source.c:1581 +#: source.c:1637 msgid "Expression not found\n" msgstr "" -#: source.c:1698 +#: source.c:1754 msgid "Too many arguments in command" msgstr "" -#: source.c:1707 +#: source.c:1763 #, possible-c-format msgid "Source path substitution rule matching `%s':\n" msgstr "" -#: source.c:1709 +#: source.c:1765 msgid "List of all source path substitution rules:\n" msgstr "" -#: source.c:1732 source.c:1783 +#: source.c:1788 source.c:1839 msgid "Incorrect usage, too many arguments in command" msgstr "" -#: source.c:1742 +#: source.c:1798 msgid "Delete all source path substitution rules? " msgstr "" -#: source.c:1743 +#: source.c:1799 msgid "Canceled" msgstr "" -#: source.c:1765 +#: source.c:1821 #, possible-c-format msgid "No substitution rule defined for `%s'" msgstr "" -#: source.c:1780 +#: source.c:1836 msgid "Incorrect usage, too few arguments in command" msgstr "" -#: source.c:1786 +#: source.c:1842 msgid "First argument must be at least one character long" msgstr "" -#: source.c:1847 +#: source.c:1904 msgid "" "Add directory DIR to beginning of search path for source files.\n" "Forget cached info on source file locations and line positions.\n" @@ -27866,15 +27760,15 @@ "With no argument, reset the search path to $cdir:$cwd, the default." msgstr "" -#: source.c:1863 +#: source.c:1920 msgid "Set the search path for finding source files." msgstr "" -#: source.c:1865 +#: source.c:1922 msgid "Show the search path for finding source files." msgstr "" -#: source.c:1867 +#: source.c:1924 msgid "" "$cwd in the path means the current working directory.\n" "$cdir in the path means the compilation directory of the source file.\n" @@ -27883,11 +27777,11 @@ "Setting the value to an empty string sets it to $cdir:$cwd, the default." msgstr "" -#: source.c:1878 +#: source.c:1935 msgid "Information about the current source file." msgstr "" -#: source.c:1880 +#: source.c:1937 msgid "" "Core addresses of the code for a source line.\n" "Line can be specified as\n" @@ -27902,35 +27796,35 @@ "The address is also stored as the value of \"$_\"." msgstr "" -#: source.c:1892 +#: source.c:1949 msgid "" "Search for regular expression (see regex(3)) from last line listed.\n" "The matching line number is also stored as the value of \"$_\"." msgstr "" -#: source.c:1898 +#: source.c:1955 msgid "" "Search backward for regular expression (see regex(3)) from last line " "listed.\n" "The matching line number is also stored as the value of \"$_\"." msgstr "" -#: source.c:1903 +#: source.c:1960 msgid "Set number of source lines gdb will list by default." msgstr "" -#: source.c:1904 +#: source.c:1961 msgid "Show number of source lines gdb will list by default." msgstr "" -#: source.c:1905 +#: source.c:1962 msgid "" "Use this to choose how many source lines the \"list\" displays (unless\n" "the \"list\" argument explicitly specifies some other number).\n" "A value of \"unlimited\", or zero, means there's no limit." msgstr "" -#: source.c:1914 +#: source.c:1971 msgid "" "Add a substitution rule to rewrite the source directories.\n" "Usage: set substitute-path FROM TO\n" @@ -27940,7 +27834,7 @@ "is replaced by the new one." msgstr "" -#: source.c:1924 +#: source.c:1981 msgid "" "Delete one or all substitution rules rewriting the source directories.\n" "Usage: unset substitute-path [FROM]\n" @@ -27949,7 +27843,7 @@ "If the debugger cannot find a rule for FROM, it will display a warning." msgstr "" -#: source.c:1933 +#: source.c:1990 msgid "" "Show one or all substitution rules rewriting the source directories.\n" "Usage: show substitute-path [FROM]\n" @@ -27957,15 +27851,15 @@ "is not specified, print all substitution rules." msgstr "" -#: source.c:1942 +#: source.c:1999 msgid "Set how to display filenames." msgstr "" -#: source.c:1943 +#: source.c:2000 msgid "Show how to display filenames." msgstr "" -#: source.c:1944 +#: source.c:2001 msgid "" "filename-display can be:\n" " basename - display only basename of a filename\n" @@ -27974,15 +27868,15 @@ "By default, relative filenames are displayed." msgstr "" -#: sparc-nat.c:229 +#: sparc-nat.c:238 msgid "Couldn't get floating-point registers" msgstr "" -#: sparc-nat.c:242 +#: sparc-nat.c:251 msgid "Couldn't write floating-point registers" msgstr "" -#: sparc-nat.c:288 +#: sparc-nat.c:297 msgid "Couldn't get StackGhost cookie" msgstr "" @@ -27996,67 +27890,67 @@ msgid "sparc32_pseudo_register_type: bad register number %d" msgstr "" -#: sparc64-linux-tdep.c:151 +#: sparc64-linux-tdep.c:152 msgid "ADI disabled" msgstr "" -#: sparc64-linux-tdep.c:157 +#: sparc64-linux-tdep.c:158 msgid "ADI deferred mismatch" msgstr "" -#: sparc64-linux-tdep.c:163 +#: sparc64-linux-tdep.c:164 msgid "ADI precise mismatch" msgstr "" -#: sparc64-tdep.c:355 sparc64-tdep.c:376 +#: sparc64-tdep.c:347 sparc64-tdep.c:368 #, possible-c-format msgid "Address at %s is not in ADI maps" msgstr "" -#: sparc64-tdep.c:425 sparc64-tdep.c:443 sparc64-tdep.c:463 sparc64-tdep.c:499 +#: sparc64-tdep.c:417 sparc64-tdep.c:435 sparc64-tdep.c:455 sparc64-tdep.c:491 msgid "No ADI information" msgstr "" -#: sparc64-tdep.c:427 sparc64-tdep.c:445 +#: sparc64-tdep.c:419 sparc64-tdep.c:437 #, possible-c-format msgid "No ADI information at %s" msgstr "" -#: sparc64-tdep.c:460 sparc64-tdep.c:496 +#: sparc64-tdep.c:452 sparc64-tdep.c:488 msgid "ADI command requires a live process/thread" msgstr "" -#: sparc64-tdep.c:477 +#: sparc64-tdep.c:469 msgid "Usage: adi examine|x[/COUNT] [ADDR]" msgstr "" -#: sparc64-tdep.c:492 +#: sparc64-tdep.c:484 msgid "Usage: adi assign|a[/COUNT] ADDR = VERSION" msgstr "" -#: sparc64-tdep.c:531 +#: sparc64-tdep.c:523 #, possible-c-format msgid "Invalid ADI version tag %d" msgstr "" -#: sparc64-tdep.c:542 +#: sparc64-tdep.c:534 msgid "ADI version related commands." msgstr "" -#: sparc64-tdep.c:545 +#: sparc64-tdep.c:537 msgid "Examine ADI versions." msgstr "" -#: sparc64-tdep.c:548 +#: sparc64-tdep.c:540 msgid "Assign ADI versions." msgstr "" -#: sparc64-tdep.c:818 +#: sparc64-tdep.c:810 #, possible-c-format msgid "sparc64_pseudo_register_name: bad register number %d" msgstr "" -#: sparc64-tdep.c:858 +#: sparc64-tdep.c:850 #, possible-c-format msgid "sparc64_pseudo_register_type: bad register number %d" msgstr "" @@ -28080,93 +27974,93 @@ msgid "Bad stabs string '%s'" msgstr "" -#: stabsread.c:733 +#: stabsread.c:727 #, possible-c-format msgid "Unknown C++ symbol name `%s'" msgstr "" -#: stabsread.c:1488 +#: stabsread.c:1444 msgid "couldn't parse type; debugger out of date?" msgstr "" #. Complain and keep going, so compilers can invent new #. cross-reference types. -#: stabsread.c:1608 +#: stabsread.c:1564 #, possible-c-format msgid "Unrecognized cross-reference type `%c'" msgstr "" -#: stabsread.c:1833 +#: stabsread.c:1789 #, possible-c-format msgid "" "Prototyped function type didn't end arguments with `#':\n" "%s" msgstr "" -#: stabsread.c:1945 +#: stabsread.c:1901 #, possible-c-format msgid "invalid (minimal) member type data format at symtab pos %d." msgstr "" -#: stabsread.c:2049 +#: stabsread.c:2005 msgid "GDB internal error, type is NULL in stabsread.c." msgstr "" -#: stabsread.c:2078 +#: stabsread.c:2034 #, possible-c-format msgid "Unknown builtin type %d" msgstr "" -#: stabsread.c:2244 +#: stabsread.c:2200 #, possible-c-format msgid "Method has bad physname %s\n" msgstr "" -#: stabsread.c:2433 +#: stabsread.c:2389 #, possible-c-format msgid "const/volatile indicator missing, got '%c'" msgstr "" #. error -#: stabsread.c:2516 +#: stabsread.c:2472 #, possible-c-format msgid "member function type missing, got '%c'" msgstr "" -#: stabsread.c:2770 +#: stabsread.c:2726 #, possible-c-format msgid "C++ abbreviated type name unknown at symtab pos %d" msgstr "" -#: stabsread.c:3130 +#: stabsread.c:3086 #, possible-c-format msgid "Unknown virtual character `%c' for baseclass" msgstr "" -#: stabsread.c:3147 +#: stabsread.c:3103 #, possible-c-format msgid "Unknown visibility `%c' for baseclass" msgstr "" #. Virtual function table field not found. -#: stabsread.c:3255 +#: stabsread.c:3211 #, possible-c-format msgid "virtual function table pointer not found when defining class `%s'" msgstr "" -#: stabsread.c:3367 +#: stabsread.c:3324 #, possible-c-format msgid "Unknown visibility `%c' for field" msgstr "" -#: stabsread.c:3403 +#: stabsread.c:3360 #, possible-c-format msgid "struct/union type gets multiply defined: %s%s" msgstr "" #. Does this actually ever happen? Is that why we are worrying #. about dealing with it rather than just calling error_type? -#: stabsread.c:4194 +#: stabsread.c:4152 #, possible-c-format msgid "base type %d of range type is not defined" msgstr "" @@ -28175,33 +28069,33 @@ #. output contained `(0,41),(0,42)=@s8;-16;,(0,43),(0,1);' where should #. have been present ";-16,(0,43)" reference instead. This way the #. excessive ";" marker prematurely stops the parameters parsing. -#: stabsread.c:4235 +#: stabsread.c:4193 msgid "Invalid (empty) method arguments" msgstr "" -#: stabsread.c:4277 +#: stabsread.c:4235 msgid "Invalid symbol data: common block within common block" msgstr "" -#: stabsread.c:4302 +#: stabsread.c:4260 msgid "ECOMM symbol unmatched by BCOMM" msgstr "" -#: stabsread.c:4506 +#: stabsread.c:4464 msgid "need a type name" msgstr "" -#: stabsread.c:4531 +#: stabsread.c:4489 #, possible-c-format msgid "forward-referenced types left unresolved, type code %d." msgstr "" -#: stabsread.c:4679 +#: stabsread.c:4637 #, possible-c-format msgid "%s: common block `%s' from global_sym_chain unresolved" msgstr "" -#: stabsread.c:4761 stabsread.c:4766 +#: stabsread.c:4719 stabsread.c:4724 #, possible-c-format msgid "invalid symbol name \"%s\"" msgstr "" @@ -28233,15 +28127,15 @@ msgstr "" #. show_cmd_cb -#: stack.c:165 stack.c:3615 +#: stack.c:165 stack.c:3579 msgid "Set whether to print frame arguments in raw form." msgstr "" -#: stack.c:166 stack.c:3616 +#: stack.c:166 stack.c:3580 msgid "Show whether to print frame arguments in raw form." msgstr "" -#: stack.c:167 stack.c:3617 +#: stack.c:167 stack.c:3581 msgid "" "If set, frame arguments are printed in raw form, bypassing any\n" "pretty-printers for that value." @@ -28268,78 +28162,78 @@ msgid "Causes Python frame filter elided frames to not be printed." msgstr "" -#: stack.c:949 +#: stack.c:955 #, possible-c-format msgid "Debugger's willingness to use disassemble-next-line is %s.\n" msgstr "" -#: stack.c:1527 +#: stack.c:1548 #, possible-c-format msgid "Stack level %d, frame at " msgstr "" -#: stack.c:1532 +#: stack.c:1553 msgid "Stack frame at " msgstr "" -#: stack.c:1598 +#: stack.c:1619 #, possible-c-format msgid " Outermost frame: %s\n" msgstr "" -#: stack.c:1882 +#: stack.c:1903 #, possible-c-format msgid "No frame at level %s." msgstr "" -#: stack.c:1896 +#: stack.c:1917 #, possible-c-format msgid "No frame at address %s." msgstr "" -#: stack.c:1910 +#: stack.c:1931 msgid "Missing address argument to view a frame" msgstr "" -#: stack.c:1938 +#: stack.c:1959 msgid "Missing function name argument" msgstr "" -#: stack.c:1941 +#: stack.c:1962 #, possible-c-format msgid "No frame for function \"%s\"." msgstr "" -#: stack.c:2097 +#: stack.c:2118 #, possible-c-format msgid "Backtrace stopped: %s\n" msgstr "" -#: stack.c:2416 +#: stack.c:2388 msgid "PC unavailable, cannot determine locals.\n" msgstr "" -#: stack.c:2448 +#: stack.c:2420 msgid "No locals.\n" msgstr "" -#: stack.c:2450 +#: stack.c:2422 msgid "No matching locals.\n" msgstr "" -#: stack.c:2590 +#: stack.c:2562 msgid "PC unavailable, cannot determine args.\n" msgstr "" -#: stack.c:2618 +#: stack.c:2590 msgid "No arguments.\n" msgstr "" -#: stack.c:2620 +#: stack.c:2592 msgid "No matching arguments.\n" msgstr "" -#: stack.c:2708 +#: stack.c:2680 msgid "Initial frame selected; you cannot go up." msgstr "" @@ -28347,80 +28241,80 @@ #. "down" means to really go down (and let me know if that is #. impossible), but "down 9999" can be used to mean go all the #. way down without getting an error. -#: stack.c:2745 +#: stack.c:2717 msgid "Bottom (innermost) frame selected; you cannot go down." msgstr "" -#: stack.c:2781 +#: stack.c:2753 msgid "Can not force return from an inlined function." msgstr "" -#: stack.c:2804 +#: stack.c:2776 msgid "" "Return value type not available for selected stack frame.\n" "Please use an explicit cast of the value to return." msgstr "" -#: stack.c:2851 +#: stack.c:2823 #, possible-c-format msgid "%sMake selected stack frame return now? " msgstr "" -#: stack.c:2856 +#: stack.c:2828 msgid "Function does not return normally to caller." msgstr "" -#: stack.c:2857 +#: stack.c:2829 #, possible-c-format msgid "%sMake %s return now? " msgstr "" -#: stack.c:2861 +#: stack.c:2833 msgid "Not confirmed" msgstr "" -#: stack.c:2954 +#: stack.c:2926 #, possible-c-format msgid "'%s' not within current stack frame." msgstr "" -#: stack.c:2971 +#: stack.c:2943 msgid "Disables printing the frame location information." msgstr "" -#: stack.c:2976 thread.c:1564 +#: stack.c:2948 thread.c:1594 msgid "Print any error raised by COMMAND and continue." msgstr "" -#: stack.c:2981 thread.c:1569 +#: stack.c:2953 thread.c:1599 msgid "Silently ignore any errors or empty output produced by COMMAND." msgstr "" -#: stack.c:3036 +#: stack.c:3008 msgid "Please specify a command to apply on the selected frames" msgstr "" -#: stack.c:3066 stack.c:3077 +#: stack.c:3038 stack.c:3049 msgid "frame apply unable to get selected frame." msgstr "" -#: stack.c:3214 +#: stack.c:3186 msgid "Missing or invalid LEVEL... argument" msgstr "" -#: stack.c:3262 +#: stack.c:3234 msgid "Missing COUNT argument." msgstr "" -#: stack.c:3265 +#: stack.c:3237 msgid "Invalid COUNT argument." msgstr "" -#: stack.c:3285 +#: stack.c:3257 msgid "Please specify a command to apply on all frames" msgstr "" -#: stack.c:3347 +#: stack.c:3320 msgid "" "Make selected stack frame return to its caller.\n" "Control remains in the debugger, but when you continue\n" @@ -28428,31 +28322,31 @@ "If an argument is given, it is an expression for the value to return." msgstr "" -#: stack.c:3353 +#: stack.c:3326 msgid "" "Select and print stack frame that called this one.\n" "An argument says how many frames up to go." msgstr "" -#: stack.c:3356 +#: stack.c:3329 msgid "" "Same as the `up' command, but does not print anything.\n" "This is useful in command scripts." msgstr "" -#: stack.c:3360 +#: stack.c:3333 msgid "" "Select and print stack frame called by this one.\n" "An argument says how many frames down to go." msgstr "" -#: stack.c:3365 +#: stack.c:3338 msgid "" "Same as the `down' command, but does not print anything.\n" "This is useful in command scripts." msgstr "" -#: stack.c:3370 stack.c:3436 +#: stack.c:3343 msgid "" "Select and print a stack frame.\n" "With no argument, print the selected stack frame. (See also \"info frame" @@ -28460,7 +28354,7 @@ "A single numerical argument specifies the frame to select." msgstr "" -#: stack.c:3390 +#: stack.c:3362 msgid "" "Apply a command to a number of frames.\n" "Usage: frame apply COUNT [OPTION]... COMMAND\n" @@ -28468,14 +28362,14 @@ "frames.\n" msgstr "" -#: stack.c:3403 +#: stack.c:3375 msgid "" "Apply a command to all frames.\n" "\n" "Usage: frame apply all [OPTION]... COMMAND\n" msgstr "" -#: stack.c:3415 +#: stack.c:3387 msgid "" "Apply a command to a list of frames.\n" "\n" @@ -28483,7 +28377,7 @@ "LEVEL is a space-separated list of levels of frames to apply COMMAND on.\n" msgstr "" -#: stack.c:3428 +#: stack.c:3400 msgid "" "Apply a command to all frames (ignoring errors and empty output).\n" "Usage: faas [OPTION]... COMMAND\n" @@ -28491,14 +28385,14 @@ "See \"help frame apply all\" for available options." msgstr "" -#: stack.c:3444 +#: stack.c:3408 msgid "" "Select and print a stack frame by stack address.\n" "\n" "Usage: frame address STACK-ADDRESS" msgstr "" -#: stack.c:3451 +#: stack.c:3415 msgid "" "View a stack frame that might be outside the current backtrace.\n" "\n" @@ -28506,7 +28400,7 @@ " frame view STACK-ADDRESS PC-ADDRESS" msgstr "" -#: stack.c:3459 +#: stack.c:3423 msgid "" "Select and print a stack frame by function name.\n" "\n" @@ -28515,27 +28409,27 @@ "The innermost frame that visited function NAME is selected." msgstr "" -#: stack.c:3470 +#: stack.c:3434 msgid "" "Select and print a stack frame by level.\n" "\n" "Usage: frame level LEVEL" msgstr "" -#: stack.c:3477 +#: stack.c:3441 msgid "" "Select a stack frame without printing anything.\n" "A single numerical argument specifies the frame to select." msgstr "" -#: stack.c:3484 +#: stack.c:3448 msgid "" "Select a stack frame by stack address.\n" "\n" "Usage: select-frame address STACK-ADDRESS" msgstr "" -#: stack.c:3493 +#: stack.c:3457 msgid "" "Select a stack frame that might be outside the current backtrace.\n" "\n" @@ -28543,21 +28437,21 @@ " select-frame view STACK-ADDRESS PC-ADDRESS" msgstr "" -#: stack.c:3502 +#: stack.c:3466 msgid "" "Select a stack frame by function name.\n" "\n" "Usage: select-frame function NAME" msgstr "" -#: stack.c:3511 +#: stack.c:3475 msgid "" "Select a stack frame by level.\n" "\n" "Usage: select-frame level LEVEL" msgstr "" -#: stack.c:3522 +#: stack.c:3486 msgid "" "Print backtrace of all stack frames, or innermost COUNT frames.\n" "Usage: backtrace [OPTION]... [QUALIFIER]... [COUNT | -COUNT]\n" @@ -28574,11 +28468,11 @@ "With a negative COUNT, print outermost -COUNT frames." msgstr "" -#: stack.c:3547 +#: stack.c:3511 msgid "Backtrace of the stack, or innermost COUNT frames." msgstr "" -#: stack.c:3551 +#: stack.c:3515 msgid "" "All about the selected stack frame.\n" "With no arguments, displays information about the currently selected stack\n" @@ -28586,14 +28480,14 @@ "the information is then printed about the specified frame." msgstr "" -#: stack.c:3559 +#: stack.c:3523 msgid "" "Print information about a stack frame selected by stack address.\n" "\n" "Usage: info frame address STACK-ADDRESS" msgstr "" -#: stack.c:3566 +#: stack.c:3530 msgid "" "Print information about a stack frame outside the current backtrace.\n" "\n" @@ -28601,59 +28495,59 @@ " info frame view STACK-ADDRESS PC-ADDRESS" msgstr "" -#: stack.c:3574 +#: stack.c:3538 msgid "" "Print information about a stack frame selected by function name.\n" "\n" "Usage: info frame function NAME" msgstr "" -#: stack.c:3582 +#: stack.c:3546 msgid "" "Print information about a stack frame selected by level.\n" "\n" "Usage: info frame level LEVEL" msgstr "" -#: stack.c:3589 +#: stack.c:3553 msgid "" "All local variables of current stack frame or those matching REGEXPs.\n" "Usage: info locals [-q] [-t TYPEREGEXP] [NAMEREGEXP]\n" "Prints the local variables of the current stack frame.\n" msgstr "" -#: stack.c:3593 +#: stack.c:3557 msgid "local variables" msgstr "" -#: stack.c:3597 +#: stack.c:3561 msgid "" "All argument variables of current stack frame or those matching REGEXPs.\n" "Usage: info args [-q] [-t TYPEREGEXP] [NAMEREGEXP]\n" "Prints the argument variables of the current stack frame.\n" msgstr "" -#: stack.c:3601 +#: stack.c:3565 msgid "argument variables" msgstr "" -#: stack.c:3606 +#: stack.c:3570 msgid "" "Select the stack frame that contains NAME.\n" "Usage: func NAME" msgstr "" -#: stack.c:3625 +#: stack.c:3589 msgid "" "Set whether to disassemble next source line or insn when execution stops." msgstr "" -#: stack.c:3627 +#: stack.c:3591 msgid "" "Show whether to disassemble next source line or insn when execution stops." msgstr "" -#: stack.c:3629 +#: stack.c:3593 msgid "" "If ON, GDB will display disassembly of the next source line, in addition\n" "to displaying the source line itself. If the next source line cannot\n" @@ -28751,18 +28645,18 @@ msgid "unrecognized bitness %s%c' for probe `%s'" msgstr "" -#: stap-probe.c:1322 +#: stap-probe.c:1321 msgid "" "The SystemTap SDT probe support is not fully implemented on this target;\n" "you will not be able to inspect the arguments of the probes.\n" "Please report a bug against GDB requesting a port to this target." msgstr "" -#: stap-probe.c:1440 +#: stap-probe.c:1436 msgid "Could not read the value of a SystemTap semaphore." msgstr "" -#: stap-probe.c:1456 +#: stap-probe.c:1452 msgid "Could not write the value of a SystemTap semaphore." msgstr "" @@ -28791,21 +28685,21 @@ msgid "Semaphore" msgstr "" -#: stap-probe.c:1719 +#: stap-probe.c:1720 msgid "Set SystemTap expression debugging." msgstr "" -#: stap-probe.c:1720 +#: stap-probe.c:1721 msgid "Show SystemTap expression debugging." msgstr "" -#: stap-probe.c:1721 +#: stap-probe.c:1722 msgid "" "When non-zero, the internal representation of SystemTap expressions will be " "printed." msgstr "" -#: stap-probe.c:1728 +#: stap-probe.c:1729 msgid "" "Show information about SystemTap static probes.\n" "Usage: info probes stap [PROVIDER [NAME [OBJECT]]]\n" @@ -28823,7 +28717,7 @@ msgid "Standard register ``$ps'' is not available for this target" msgstr "" -#: symfile-debug.c:645 +#: symfile-debug.c:644 #, possible-c-format msgid "Symfile debugging is %s.\n" msgstr "" @@ -28840,182 +28734,182 @@ msgid "When enabled, all calls to the symfile functions are logged." msgstr "" -#: symfile-mem.c:94 +#: symfile-mem.c:93 msgid "add-symbol-file-from-memory not supported for this target" msgstr "" -#: symfile-mem.c:99 +#: symfile-mem.c:98 msgid "Failed to read a valid object file image from memory." msgstr "" -#: symfile-mem.c:109 +#: symfile-mem.c:108 #, possible-c-format msgid "Got object file from memory but can't read symbols: %s." msgstr "" -#: symfile-mem.c:141 +#: symfile-mem.c:140 msgid "add-symbol-file-from-memory requires an expression argument" msgstr "" -#: symfile-mem.c:151 +#: symfile-mem.c:150 msgid "Must use symbol-file or exec-file before add-symbol-file-from-memory." msgstr "" -#: symfile-mem.c:181 +#: symfile-mem.c:180 msgid "Could not load vsyscall page because no executable was specified" msgstr "" -#: symfile-mem.c:211 +#: symfile-mem.c:212 msgid "" "Load the symbols out of memory from a dynamically loaded object file.\n" "Give an expression for the address of the file's shared object file header." msgstr "" -#: symfile.c:507 +#: symfile.c:506 #, possible-c-format msgid "no loadable sections found in added symbol-file %s" msgstr "" -#: symfile.c:620 +#: symfile.c:619 #, possible-c-format msgid "section %s not found in %s" msgstr "" -#: symfile.c:1091 +#: symfile.c:1080 #, possible-c-format msgid "Load new symbol table from \"%s\"? " msgstr "" -#: symfile.c:1109 +#: symfile.c:1095 #, possible-c-format msgid "Reading symbols from %ps...\n" msgstr "" -#: symfile.c:1122 +#: symfile.c:1108 #, possible-c-format msgid "Expanding full symbols from %ps...\n" msgstr "" -#: symfile.c:1135 +#: symfile.c:1121 #, possible-c-format msgid "(No debugging symbols found in %ps)\n" msgstr "" -#: symfile.c:1248 +#: symfile.c:1234 #, possible-c-format msgid "Discard symbol table from `%s'? " msgstr "" -#: symfile.c:1250 +#: symfile.c:1236 msgid "Discard symbol table? " msgstr "" -#: symfile.c:1261 +#: symfile.c:1249 msgid "No symbol file now.\n" msgstr "" -#: symfile.c:1321 +#: symfile.c:1309 msgid " no, same file as the objfile.\n" msgstr "" -#: symfile.c:1335 symfile.c:1353 +#: symfile.c:1323 symfile.c:1341 msgid " no, error computing CRC.\n" msgstr "" -#: symfile.c:1360 +#: symfile.c:1348 #, possible-c-format msgid "" "the debug information found in \"%s\" does not match \"%s\" (CRC mismatch).\n" msgstr "" -#: symfile.c:1365 +#: symfile.c:1353 msgid " no, CRC doesn't match.\n" msgstr "" -#: symfile.c:1382 +#: symfile.c:1370 #, possible-c-format msgid "" "The directory where separate debug symbols are searched for is \"%s\".\n" msgstr "" -#: symfile.c:1406 +#: symfile.c:1394 #, possible-c-format msgid "" "\n" "Looking for separate debug info (debug link) for %s\n" msgstr "" -#: symfile.c:1593 +#: symfile.c:1581 msgid "-readnow and -readnever cannot be used simultaneously" msgstr "" -#: symfile.c:1640 symfile.c:1657 symfile.c:2269 symfile.c:2299 +#: symfile.c:1628 symfile.c:1645 symfile.c:2252 symfile.c:2282 #, possible-c-format msgid "Unrecognized argument \"%s\"" msgstr "" -#: symfile.c:1650 symfile.c:2291 +#: symfile.c:1638 symfile.c:2274 msgid "Missing argument to -o" msgstr "" -#: symfile.c:1661 +#: symfile.c:1649 msgid "no symbol file name was specified" msgstr "" -#: symfile.c:1812 +#: symfile.c:1796 #, possible-c-format msgid "I'm sorry, Dave, I can't do that. Symbol format `%s' unknown." msgstr "" -#: symfile.c:1971 +#: symfile.c:1955 #, possible-c-format msgid "Download verify read failed at %s" msgstr "" -#: symfile.c:1974 +#: symfile.c:1958 #, possible-c-format msgid "Download verify compare failed at %s" msgstr "" -#: symfile.c:1986 +#: symfile.c:1970 msgid "Canceled the download" msgstr "" -#: symfile.c:2038 +#: symfile.c:2022 msgid "file to load" msgstr "" -#: symfile.c:2053 +#: symfile.c:2037 #, possible-c-format msgid "Invalid download offset:%s." msgstr "" -#: symfile.c:2056 +#: symfile.c:2040 msgid "Too many parameters." msgstr "" -#: symfile.c:2066 +#: symfile.c:2050 #, possible-c-format msgid "\"%s\" is not an object file: %s" msgstr "" -#: symfile.c:2081 +#: symfile.c:2065 msgid "Load failed" msgstr "" -#: symfile.c:2246 +#: symfile.c:2229 msgid "add-symbol-file takes a file name and an address" msgstr "" -#: symfile.c:2278 +#: symfile.c:2261 msgid "Missing section name after \"-s\"" msgstr "" -#: symfile.c:2280 +#: symfile.c:2263 msgid "Missing section address after \"-s\"" msgstr "" -#: symfile.c:2303 +#: symfile.c:2286 msgid "You must provide a filename to be loaded." msgstr "" @@ -29024,157 +28918,157 @@ #. functions. We have to split this up into separate print #. statements because hex_string returns a local static #. string. -#: symfile.c:2313 +#: symfile.c:2296 #, possible-c-format msgid "add symbol table from file \"%s\"" msgstr "" -#: symfile.c:2326 +#: symfile.c:2309 msgid " at\n" msgstr "" -#: symfile.c:2346 +#: symfile.c:2329 #, possible-c-format msgid "%s offset by %s\n" msgstr "" -#: symfile.c:2348 +#: symfile.c:2331 msgid " with all sections" msgstr "" -#: symfile.c:2349 +#: symfile.c:2332 msgid "with other sections" msgstr "" -#: symfile.c:2360 +#: symfile.c:2343 #, possible-c-format msgid "newly-added symbol file \"%s\" does not provide any symbols" msgstr "" -#: symfile.c:2385 +#: symfile.c:2368 msgid "remove-symbol-file: no symbol file provided" msgstr "" -#: symfile.c:2395 +#: symfile.c:2378 msgid "Missing address argument" msgstr "" -#: symfile.c:2398 symfile.c:2419 +#: symfile.c:2381 symfile.c:2402 #, possible-c-format msgid "Junk after %s" msgstr "" -#: symfile.c:2437 +#: symfile.c:2420 msgid "No symbol file found" msgstr "" -#: symfile.c:2440 +#: symfile.c:2423 #, possible-c-format msgid "Remove symbol table from file \"%s\"? " msgstr "" #. FIXME, should use print_sys_errmsg but it's not filtered. -#: symfile.c:2478 +#: symfile.c:2461 #, possible-c-format msgid "`%s' has disappeared; keeping its symbols.\n" msgstr "" -#: symfile.c:2488 +#: symfile.c:2468 #, possible-c-format msgid "`%s' has changed; re-reading symbols.\n" msgstr "" -#: symfile.c:2552 +#: symfile.c:2532 #, possible-c-format msgid "Can't open %s to read symbols." msgstr "" -#: symfile.c:2559 +#: symfile.c:2539 #, possible-c-format msgid "Can't read symbols from %s: %s." msgstr "" -#: symfile.c:2644 +#: symfile.c:2615 msgid "(no debugging symbols found)\n" msgstr "" -#: symfile.c:2713 +#: symfile.c:2684 #, possible-c-format msgid "Mapping between filename extension and source language is \"%s\".\n" msgstr "" -#: symfile.c:2727 +#: symfile.c:2698 #, possible-c-format msgid "'%s': Filename extension must begin with '.'" msgstr "" -#: symfile.c:2734 symfile.c:2745 +#: symfile.c:2705 symfile.c:2716 #, possible-c-format msgid "'%s': two arguments required -- filename extension and language" msgstr "" -#: symfile.c:2780 +#: symfile.c:2751 msgid "Filename extensions and the languages they represent:" msgstr "" -#: symfile.c:3262 +#: symfile.c:3231 msgid "No sections are mapped.\n" msgstr "" -#: symfile.c:3274 symfile.c:3320 +#: symfile.c:3243 symfile.c:3289 msgid "" "Overlay debugging not enabled. Use either the 'overlay auto' or\n" "the 'overlay manual' command." msgstr "" -#: symfile.c:3279 symfile.c:3325 +#: symfile.c:3248 symfile.c:3294 msgid "Argument required: name of an overlay section" msgstr "" -#: symfile.c:3301 +#: symfile.c:3270 #, possible-c-format msgid "Note: section %s unmapped by overlap\n" msgstr "" -#: symfile.c:3307 symfile.c:3337 +#: symfile.c:3276 symfile.c:3306 #, possible-c-format msgid "No overlay section called %s" msgstr "" -#: symfile.c:3333 +#: symfile.c:3302 #, possible-c-format msgid "Section %s is not mapped" msgstr "" -#: symfile.c:3350 +#: symfile.c:3319 msgid "Automatic overlay debugging enabled." msgstr "" -#: symfile.c:3363 +#: symfile.c:3332 msgid "Overlay debugging enabled." msgstr "" -#: symfile.c:3376 +#: symfile.c:3345 msgid "Overlay debugging disabled." msgstr "" -#: symfile.c:3387 +#: symfile.c:3356 msgid "This target does not know how to read its overlay state." msgstr "" -#: symfile.c:3490 +#: symfile.c:3447 msgid "" "Error reading inferior's overlay table: couldn't find `_novlys' variable\n" "in inferior. Use `overlay manual' mode." msgstr "" -#: symfile.c:3499 symfile.c:3579 +#: symfile.c:3456 symfile.c:3536 msgid "" "Error reading inferior's overlay table: couldn't find `_ovly_table' array\n" "in inferior. Use `overlay manual' mode." msgstr "" -#: symfile.c:3914 +#: symfile.c:3857 msgid "" "Load symbol table from executable file FILE.\n" "Usage: symbol-file [-readnow | -readnever] [-o OFF] FILE\n" @@ -29183,7 +29077,7 @@ "to execute.\n" msgstr "" -#: symfile.c:3922 +#: symfile.c:3865 msgid "" "Load symbols from FILE, assuming FILE has been dynamically loaded.\n" "Usage: add-symbol-file FILE [-readnow | -readnever] [-o OFF] [ADDR] [-s SECT-" @@ -29196,7 +29090,7 @@ "of all sections for which no other address was specified.\n" msgstr "" -#: symfile.c:3937 +#: symfile.c:3880 msgid "" "Remove a symbol file added via the add-symbol-file command.\n" "Usage: remove-symbol-file FILENAME\n" @@ -29205,7 +29099,7 @@ "that lies within the boundaries of this symbol file in memory." msgstr "" -#: symfile.c:3945 +#: symfile.c:3888 msgid "" "Dynamically load FILE into the running program.\n" "FILE symbols are recorded for access from GDB.\n" @@ -29215,77 +29109,77 @@ "on its own." msgstr "" -#: symfile.c:3955 +#: symfile.c:3898 msgid "Commands for debugging overlays." msgstr "" -#: symfile.c:3962 +#: symfile.c:3905 msgid "Assert that an overlay section is mapped." msgstr "" -#: symfile.c:3965 +#: symfile.c:3908 msgid "Assert that an overlay section is unmapped." msgstr "" -#: symfile.c:3968 +#: symfile.c:3911 msgid "List mappings of overlay sections." msgstr "" -#: symfile.c:3971 +#: symfile.c:3914 msgid "Enable overlay debugging." msgstr "" -#: symfile.c:3973 +#: symfile.c:3916 msgid "Disable overlay debugging." msgstr "" -#: symfile.c:3975 +#: symfile.c:3918 msgid "Enable automatic overlay debugging." msgstr "" -#: symfile.c:3977 +#: symfile.c:3920 msgid "Read the overlay mapping state from the target." msgstr "" -#: symfile.c:3981 +#: symfile.c:3924 msgid "Set mapping between filename extension and source language." msgstr "" -#: symfile.c:3982 +#: symfile.c:3925 msgid "Show mapping between filename extension and source language." msgstr "" -#: symfile.c:3983 +#: symfile.c:3926 msgid "Usage: set extension-language .foo bar" msgstr "" -#: symfile.c:3990 +#: symfile.c:3933 msgid "All filename extensions associated with a source language." msgstr "" -#: symfile.c:3993 +#: symfile.c:3936 msgid "Set the directories where separate debug symbols are searched for." msgstr "" -#: symfile.c:3994 +#: symfile.c:3937 msgid "Show the directories where separate debug symbols are searched for." msgstr "" -#: symfile.c:3995 +#: symfile.c:3938 msgid "" "Separate debug symbols are first searched for in the same\n" "directory as the binary, then in the `" msgstr "" -#: symfile.c:4006 +#: symfile.c:3949 msgid "Set printing of symbol loading messages." msgstr "" -#: symfile.c:4007 +#: symfile.c:3950 msgid "Show printing of symbol loading messages." msgstr "" -#: symfile.c:4008 +#: symfile.c:3951 msgid "" "off == turn all messages off\n" "brief == print messages for the executable,\n" @@ -29294,172 +29188,163 @@ " and messages for each shared library." msgstr "" -#: symfile.c:4019 +#: symfile.c:3962 msgid "Set printing of separate debug info file search debug." msgstr "" -#: symfile.c:4020 +#: symfile.c:3963 msgid "Show printing of separate debug info file search debug." msgstr "" -#: symfile.c:4021 +#: symfile.c:3964 msgid "" "When on, GDB prints the searched locations while looking for separate debug " "info files." msgstr "" -#: symmisc.c:70 +#: symmisc.c:68 #, possible-c-format msgid "Byte cache statistics for '%s':\n" msgstr "" -#: symmisc.c:90 +#: symmisc.c:85 #, possible-c-format msgid "Statistics for '%s':\n" msgstr "" -#: symmisc.c:92 +#: symmisc.c:87 #, possible-c-format msgid " Number of \"stab\" symbols read: %d\n" msgstr "" -#: symmisc.c:95 +#: symmisc.c:90 #, possible-c-format msgid " Number of \"minimal\" symbols read: %d\n" msgstr "" -#: symmisc.c:98 +#: symmisc.c:93 #, possible-c-format msgid " Number of \"partial\" symbols read: %d\n" msgstr "" -#: symmisc.c:101 +#: symmisc.c:96 #, possible-c-format msgid " Number of \"full\" symbols read: %d\n" msgstr "" -#: symmisc.c:104 +#: symmisc.c:99 #, possible-c-format msgid " Number of \"types\" defined: %d\n" msgstr "" -#: symmisc.c:120 +#: symmisc.c:115 #, possible-c-format msgid " Number of symbol tables: %d\n" msgstr "" -#: symmisc.c:121 +#: symmisc.c:116 #, possible-c-format msgid " Number of symbol tables with line tables: %d\n" msgstr "" -#: symmisc.c:123 +#: symmisc.c:118 #, possible-c-format msgid " Number of symbol tables with blockvectors: %d\n" msgstr "" -#: symmisc.c:127 +#: symmisc.c:122 #, possible-c-format msgid " Space used by string tables: %d\n" msgstr "" -#: symmisc.c:129 +#: symmisc.c:124 #, possible-c-format msgid " Total memory used for objfile obstack: %s\n" msgstr "" -#: symmisc.c:132 +#: symmisc.c:127 #, possible-c-format msgid " Total memory used for BFD obstack: %s\n" msgstr "" -#: symmisc.c:136 +#: symmisc.c:131 #, possible-c-format msgid " Total memory used for psymbol cache: %d\n" msgstr "" -#: symmisc.c:138 -#, possible-c-format -msgid " Total memory used for macro cache: %d\n" -msgstr "" - -#: symmisc.c:140 +#: symmisc.c:133 #, possible-c-format -msgid " Total memory used for file name cache: %d\n" +msgid " Total memory used for string cache: %d\n" msgstr "" -#: symmisc.c:267 +#: symmisc.c:259 #, possible-c-format msgid "internal error: minimal symbol count %d != %d" msgstr "" -#: symmisc.c:466 +#: symmisc.c:486 #, possible-c-format msgid "No symtab for address: %s" msgstr "" -#: symmisc.c:506 +#: symmisc.c:526 #, possible-c-format msgid "No symtab for source file: %s" msgstr "" -#: symmisc.c:915 +#: symmisc.c:950 msgid "Extra arguments after regexp." msgstr "" -#: symmisc.c:973 +#: symmisc.c:1004 #, possible-c-format msgid "objfile: %s ((struct objfile *) %s)\n" msgstr "" -#: symmisc.c:976 +#: symmisc.c:1007 #, possible-c-format msgid "compunit_symtab: ((struct compunit_symtab *) %s)\n" msgstr "" -#: symmisc.c:978 +#: symmisc.c:1009 #, possible-c-format msgid "symtab: %s ((struct symtab *) %s)\n" msgstr "" -#: symmisc.c:982 +#: symmisc.c:1013 #, possible-c-format msgid "linetable: ((struct linetable *) %s):\n" msgstr "" -#: symmisc.c:986 +#: symmisc.c:1017 msgid "No line table.\n" msgstr "" -#: symmisc.c:988 +#: symmisc.c:1019 msgid "Line table has no lines.\n" msgstr "" -#. Leave space for 6 digits of index and line number. After that the -#. tables will just not format as well. -#: symmisc.c:995 -#, possible-c-format -msgid "%-6s %6s %s\n" -msgstr "" - -#: symmisc.c:996 +#: symmisc.c:1026 msgid "INDEX" msgstr "" -#: symmisc.c:996 +#: symmisc.c:1027 msgid "LINE" msgstr "" -#: symmisc.c:996 +#: symmisc.c:1028 msgid "ADDRESS" msgstr "" -#: symmisc.c:1003 -#, possible-c-format -msgid "%-6d %6d %s\n" +#: symmisc.c:1029 +msgid "IS-STMT" +msgstr "" + +#: symmisc.c:1042 +msgid "END" msgstr "" -#: symmisc.c:1051 +#: symmisc.c:1092 msgid "" "Print dump of current symbol definitions.\n" "Usage: mt print symbols [-pc ADDRESS] [--] [OUTFILE]\n" @@ -29471,7 +29356,7 @@ "If OBJFILE is provided, dump only that file's minimal symbols." msgstr "" -#: symmisc.c:1062 +#: symmisc.c:1103 msgid "" "Print dump of current minimal symbol definitions.\n" "Usage: mt print msymbols [-objfile OBJFILE] [--] [OUTFILE]\n" @@ -29480,13 +29365,13 @@ "If OBJFILE is provided, dump only that file's minimal symbols." msgstr "" -#: symmisc.c:1071 +#: symmisc.c:1112 msgid "" "Print dump of current object file definitions.\n" "With an argument REGEXP, list the object files with matching names." msgstr "" -#: symmisc.c:1075 +#: symmisc.c:1116 msgid "" "List the full symbol tables for all object files.\n" "This does not include information about individual symbols, blocks, or\n" @@ -29494,48 +29379,48 @@ "With an argument REGEXP, list the symbol tables with matching names." msgstr "" -#: symmisc.c:1082 +#: symmisc.c:1123 msgid "" "List the contents of all line tables, from all symbol tables.\n" "With an argument REGEXP, list just the line tables for the symbol\n" "tables with matching names." msgstr "" -#: symmisc.c:1089 +#: symmisc.c:1130 msgid "Check consistency of currently expanded symtabs." msgstr "" -#: symmisc.c:1094 +#: symmisc.c:1135 msgid "" "Expand symbol tables.\n" "With an argument REGEXP, only expand the symbol tables with matching names." msgstr "" -#: symtab.c:1327 +#: symtab.c:1301 #, possible-c-format msgid "Symbol cache size is too large, max is %u." msgstr "" -#: symtab.c:1559 +#: symtab.c:1531 #, possible-c-format msgid "" "Symbol cache for pspace %d\n" "%s:\n" msgstr "" -#: symtab.c:1630 +#: symtab.c:1598 #, possible-c-format msgid "" "Symbol cache statistics for pspace %d\n" "%s:\n" msgstr "" -#: symtab.c:2102 +#: symtab.c:2071 #, possible-c-format msgid "Internal error: `%s' is not an aggregate" msgstr "" -#: symtab.c:2373 +#: symtab.c:2337 #, possible-c-format msgid "" "Internal: %s symbol `%s' found in %s psymtab but not in symtab.\n" @@ -29543,193 +29428,198 @@ "\t (if a template, try specifying an instantiation: %s<type>)." msgstr "" -#: symtab.c:4050 +#: symtab.c:3179 +msgid "" +"Infinite recursion detected in find_pc_sect_line;please file a bug report" +msgstr "" + +#: symtab.c:4086 msgid "mismatched quoting on brackets, try 'operator\\[\\]'" msgstr "" -#: symtab.c:4058 +#: symtab.c:4094 msgid "nothing is allowed between '[' and ']'" msgstr "" -#: symtab.c:4114 +#: symtab.c:4150 msgid "`operator ()' must be specified without whitespace in `()'" msgstr "" -#: symtab.c:4120 +#: symtab.c:4156 msgid "`operator ?:' must be specified without whitespace in `?:'" msgstr "" -#: symtab.c:4126 +#: symtab.c:4162 msgid "`operator []' must be specified without whitespace in `[]'" msgstr "" -#: symtab.c:4131 +#: symtab.c:4167 #, possible-c-format msgid "`operator %s' not supported" msgstr "" -#: symtab.c:4240 +#: symtab.c:4276 msgid "Show only the files having a dirname matching REGEXP." msgstr "" -#: symtab.c:4246 +#: symtab.c:4282 msgid "Show only the files having a basename matching REGEXP." msgstr "" -#: symtab.c:4273 +#: symtab.c:4309 #, possible-c-format msgid "(dirname matching regular expression \"%s\")" msgstr "" -#: symtab.c:4276 +#: symtab.c:4312 #, possible-c-format msgid "(basename matching regular expression \"%s\")" msgstr "" -#: symtab.c:4279 +#: symtab.c:4315 #, possible-c-format msgid "(filename matching regular expression \"%s\")" msgstr "" -#: symtab.c:4322 +#: symtab.c:4358 msgid "You cannot give both -basename and -dirname to 'info sources'." msgstr "" -#: symtab.c:4325 +#: symtab.c:4361 msgid "Missing REGEXP for 'info sources'." msgstr "" -#: symtab.c:4340 +#: symtab.c:4376 msgid "Source files for which symbols have been read in:\n" msgstr "" -#: symtab.c:4357 +#: symtab.c:4393 msgid "Source files for which symbols will be read in on demand:\n" msgstr "" -#: symtab.c:4854 +#: symtab.c:4890 #, possible-c-format msgid "" "\n" "File %ps:\n" msgstr "" -#: symtab.c:4890 +#: symtab.c:4926 #, possible-c-format msgid "%ps %ps\n" msgstr "" -#: symtab.c:4926 +#: symtab.c:4962 #, possible-c-format msgid "" "All %ss matching regular expression \"%s\" with type matching regular " "expression \"%s\":\n" msgstr "" -#: symtab.c:4930 +#: symtab.c:4966 #, possible-c-format msgid "All %ss matching regular expression \"%s\":\n" msgstr "" -#: symtab.c:4937 +#: symtab.c:4973 #, possible-c-format msgid "All defined %ss with type matching regular expression \"%s\" :\n" msgstr "" -#: symtab.c:4941 +#: symtab.c:4977 #, possible-c-format msgid "All defined %ss:\n" msgstr "" -#: symtab.c:4954 +#: symtab.c:4990 msgid "" "\n" "Non-debugging symbols:\n" msgstr "" -#: symtab.c:6466 +#: symtab.c:6488 msgid "All variables in all modules:" msgstr "" -#: symtab.c:6467 +#: symtab.c:6489 msgid "All functions in all modules:" msgstr "" -#: symtab.c:6471 +#: symtab.c:6493 #, possible-c-format msgid "All variables matching regular expression \"%s\" in all modules:" msgstr "" -#: symtab.c:6473 +#: symtab.c:6495 #, possible-c-format msgid "All functions matching regular expression \"%s\" in all modules:" msgstr "" -#: symtab.c:6482 +#: symtab.c:6504 #, possible-c-format msgid "" "All variables with type matching regular expression \"%s\" in all modules:" msgstr "" -#: symtab.c:6484 +#: symtab.c:6506 #, possible-c-format msgid "" "All functions with type matching regular expression \"%s\" in all modules:" msgstr "" -#: symtab.c:6490 +#: symtab.c:6512 #, possible-c-format msgid "" "All variables matching regular expression \"%s\",\n" "\twith type matching regular expression \"%s\" in all modules:" msgstr "" -#: symtab.c:6493 +#: symtab.c:6515 #, possible-c-format msgid "" "All functions matching regular expression \"%s\",\n" "\twith type matching regular expression \"%s\" in all modules:" msgstr "" -#: symtab.c:6506 +#: symtab.c:6528 #, possible-c-format msgid "All variables in all modules matching regular expression \"%s\":" msgstr "" -#: symtab.c:6508 +#: symtab.c:6530 #, possible-c-format msgid "All functions in all modules matching regular expression \"%s\":" msgstr "" -#: symtab.c:6514 +#: symtab.c:6536 #, possible-c-format msgid "" "All variables matching regular expression \"%s\",\n" "\tin all modules matching regular expression \"%s\":" msgstr "" -#: symtab.c:6517 +#: symtab.c:6539 #, possible-c-format msgid "" "All functions matching regular expression \"%s\",\n" "\tin all modules matching regular expression \"%s\":" msgstr "" -#: symtab.c:6527 +#: symtab.c:6549 #, possible-c-format msgid "" "All variables with type matching regular expression \"%s\"\n" "\tin all modules matching regular expression \"%s\":" msgstr "" -#: symtab.c:6530 +#: symtab.c:6552 #, possible-c-format msgid "" "All functions with type matching regular expression \"%s\"\n" "\tin all modules matching regular expression \"%s\":" msgstr "" -#: symtab.c:6537 +#: symtab.c:6559 #, possible-c-format msgid "" "All variables matching regular expression \"%s\",\n" @@ -29737,7 +29627,7 @@ "\tin all modules matching regular expression \"%s\":" msgstr "" -#: symtab.c:6541 +#: symtab.c:6563 #, possible-c-format msgid "" "All functions matching regular expression \"%s\",\n" @@ -29745,41 +29635,41 @@ "\tin all modules matching regular expression \"%s\":" msgstr "" -#: symtab.c:6580 +#: symtab.c:6602 #, possible-c-format msgid "Module \"%s\":\n" msgstr "" -#: symtab.c:6702 +#: symtab.c:6725 msgid "" "All global and static variable names or those matching REGEXPs.\n" "Usage: info variables [-q] [-n] [-t TYPEREGEXP] [NAMEREGEXP]\n" "Prints the global and static variables.\n" msgstr "" -#: symtab.c:6706 symtab.c:6716 +#: symtab.c:6729 symtab.c:6739 msgid "global and static variables" msgstr "" -#: symtab.c:6712 +#: symtab.c:6735 msgid "" "All global and static variable names, or those matching REGEXPs.\n" "Usage: whereis [-q] [-n] [-t TYPEREGEXP] [NAMEREGEXP]\n" "Prints the global and static variables.\n" msgstr "" -#: symtab.c:6722 +#: symtab.c:6745 msgid "" "All function names or those matching REGEXPs.\n" "Usage: info functions [-q] [-n] [-t TYPEREGEXP] [NAMEREGEXP]\n" "Prints the functions.\n" msgstr "" -#: symtab.c:6726 +#: symtab.c:6749 msgid "functions" msgstr "" -#: symtab.c:6730 +#: symtab.c:6753 msgid "" "All type names, or those matching REGEXP.\n" "Usage: info types [-q] [REGEXP]\n" @@ -29787,7 +29677,7 @@ "REGEXP is given. The optional flag -q disables printing of headers." msgstr "" -#: symtab.c:6740 +#: symtab.c:6763 msgid "" "All source files in the program or those matching REGEXP.\n" "Usage: info sources [OPTION]... [REGEXP]\n" @@ -29797,15 +29687,15 @@ "%OPTIONS%" msgstr "" -#: symtab.c:6753 +#: symtab.c:6776 msgid "All module names, or those matching REGEXP." msgstr "" -#: symtab.c:6756 +#: symtab.c:6779 msgid "Print information about modules." msgstr "" -#: symtab.c:6761 +#: symtab.c:6784 msgid "" "Display functions arranged by modules.\n" "Usage: info module functions [-q] [-m MODREGEXP] [-t TYPEREGEXP] [REGEXP]\n" @@ -29821,7 +29711,7 @@ "The -q flag suppresses printing some header information." msgstr "" -#: symtab.c:6778 +#: symtab.c:6801 msgid "" "Display variables arranged by modules.\n" "Usage: info module variables [-q] [-m MODREGEXP] [-t TYPEREGEXP] [REGEXP]\n" @@ -29837,32 +29727,32 @@ "The -q flag suppresses printing some header information." msgstr "" -#: symtab.c:6796 +#: symtab.c:6819 msgid "Set a breakpoint for all functions matching REGEXP." msgstr "" -#: symtab.c:6800 +#: symtab.c:6823 msgid "Set how the debugger handles ambiguities in expressions." msgstr "" -#: symtab.c:6801 +#: symtab.c:6824 msgid "Show how the debugger handles ambiguities in expressions." msgstr "" -#: symtab.c:6802 +#: symtab.c:6825 msgid "" "Valid values are \"ask\", \"all\", \"cancel\", and the default is \"all\"." msgstr "" -#: symtab.c:6807 +#: symtab.c:6830 msgid "Set whether a source file may have multiple base names." msgstr "" -#: symtab.c:6808 +#: symtab.c:6831 msgid "Show whether a source file may have multiple base names." msgstr "" -#: symtab.c:6809 +#: symtab.c:6832 msgid "" "(A \"base name\" is the name of a file with the directory part removed.\n" "Example: The base name of \"/home/user/hello.c\" is \"hello.c\".)\n" @@ -29873,61 +29763,67 @@ "one base name, and gdb will do file name comparisons more efficiently." msgstr "" -#: symtab.c:6821 +#: symtab.c:6844 msgid "Set debugging of symbol table creation." msgstr "" -#: symtab.c:6822 +#: symtab.c:6845 msgid "Show debugging of symbol table creation." msgstr "" -#: symtab.c:6822 +#: symtab.c:6845 msgid "" "When enabled (non-zero), debugging messages are printed when building\n" "symbol tables. A value of 1 (one) normally provides enough information.\n" "A value greater than 1 provides more verbose information." msgstr "" -#: symtab.c:6831 +#: symtab.c:6854 msgid "Set debugging of symbol lookup." msgstr "" -#: symtab.c:6832 +#: symtab.c:6855 msgid "Show debugging of symbol lookup." msgstr "" -#: symtab.c:6833 +#: symtab.c:6856 msgid "When enabled (non-zero), symbol lookups are logged." msgstr "" -#: symtab.c:6840 +#: symtab.c:6863 msgid "Set the size of the symbol cache." msgstr "" -#: symtab.c:6841 +#: symtab.c:6864 msgid "Show the size of the symbol cache." msgstr "" -#: symtab.c:6841 +#: symtab.c:6864 msgid "" "The size of the symbol cache.\n" "If zero then the symbol cache is disabled." msgstr "" -#: symtab.c:6849 +#: symtab.c:6872 msgid "Dump the symbol cache for each program space." msgstr "" -#: symtab.c:6854 +#: symtab.c:6877 msgid "Print symbol cache statistics for each program space." msgstr "" -#: symtab.c:6859 +#: symtab.c:6882 msgid "Flush the symbol cache for each program space." msgstr "" -#: symtab.h:1336 -msgid "Section index is uninitialized" +#: target-connection.c:100 +msgid "No connections.\n" +msgstr "" + +#: target-connection.c:158 +msgid "" +"Target connections in use.\n" +"Shows the list of target connections currently in use." msgstr "" #: target-dcache.c:104 @@ -29940,15 +29836,15 @@ msgid "Cache use for code accesses is %s.\n" msgstr "" -#: target-dcache.c:159 +#: target-dcache.c:160 msgid "Set cache use for stack access." msgstr "" -#: target-dcache.c:160 +#: target-dcache.c:161 msgid "Show cache use for stack access." msgstr "" -#: target-dcache.c:161 +#: target-dcache.c:162 msgid "" "When on, use the target memory cache for all stack access, regardless of " "any\n" @@ -29956,15 +29852,15 @@ "By default, caching for stack access is on." msgstr "" -#: target-dcache.c:170 +#: target-dcache.c:171 msgid "Set cache use for code segment access." msgstr "" -#: target-dcache.c:171 +#: target-dcache.c:172 msgid "Show cache use for code segment access." msgstr "" -#: target-dcache.c:172 +#: target-dcache.c:173 msgid "" "When on, use the target memory cache for all code segment accesses,\n" "regardless of any configured memory regions. This improves remote\n" @@ -29972,128 +29868,128 @@ "access is on." msgstr "" -#: target-descriptions.c:542 +#: target-descriptions.c:570 msgid "Architecture rejected target-supplied description" msgstr "" -#: target-descriptions.c:551 +#: target-descriptions.c:579 msgid "Target-supplied registers are not supported by the current architecture" msgstr "" -#: target-descriptions.c:578 +#: target-descriptions.c:606 msgid "Could not remove target-supplied description" msgstr "" -#: target-descriptions.c:915 target-descriptions.c:937 +#: target-descriptions.c:961 target-descriptions.c:983 #, possible-c-format msgid "Register \"%s\" has an unsupported size (%d bits)" msgstr "" -#: target-descriptions.c:1164 +#: target-descriptions.c:1243 #, possible-c-format msgid "Attempted to add duplicate compatible architecture \"%s\"" msgstr "" -#: target-descriptions.c:1179 +#: target-descriptions.c:1260 #, possible-c-format msgid "Attempted to add duplicate property \"%s\"" msgstr "" -#: target-descriptions.c:1257 +#: target-descriptions.c:1320 #, possible-c-format msgid "The target description will be read from \"%s\".\n" msgstr "" -#: target-descriptions.c:1260 +#: target-descriptions.c:1323 msgid "The target description will be read from the target.\n" msgstr "" -#: target-descriptions.c:1371 target-descriptions.c:1492 +#: target-descriptions.c:1436 target-descriptions.c:1557 #, possible-c-format msgid "C output is not supported type \"%s\"." msgstr "" -#: target-descriptions.c:1634 +#: target-descriptions.c:1699 #, possible-c-format msgid "\"regnum\" attribute %ld is not the largest number (%d)." msgstr "" -#: target-descriptions.c:1698 +#: target-descriptions.c:1763 target-descriptions.c:1820 msgid "There is no target description to print." msgstr "" -#: target-descriptions.c:1701 -msgid "The current target description did not come from an XML file." -msgstr "" - -#: target-descriptions.c:1771 +#: target-descriptions.c:1867 #, possible-c-format msgid "Could not convert description for %s to xml.\n" msgstr "" -#: target-descriptions.c:1780 +#: target-descriptions.c:1876 #, possible-c-format msgid "Could not convert description for %s from xml.\n" msgstr "" -#: target-descriptions.c:1786 +#: target-descriptions.c:1882 #, possible-c-format msgid "Converted description for %s does not match.\n" msgstr "" -#: target-descriptions.c:1802 +#: target-descriptions.c:1898 msgid "Missing dir name" msgstr "" -#: target-descriptions.c:1816 +#: target-descriptions.c:1912 #, possible-c-format msgid "Descriptions for %s do not match.\n" msgstr "" -#: target-descriptions.c:1823 +#: target-descriptions.c:1919 #, possible-c-format msgid "Tested %lu XML files, %d failed\n" msgstr "" -#: target-descriptions.c:1832 +#: target-descriptions.c:1931 msgid "Set target description specific variables." msgstr "" #. allow-unknown -#: target-descriptions.c:1836 +#: target-descriptions.c:1935 msgid "Show target description specific variables." msgstr "" #. allow-unknown -#: target-descriptions.c:1840 +#: target-descriptions.c:1939 msgid "Unset target description specific variables." msgstr "" -#: target-descriptions.c:1847 +#: target-descriptions.c:1946 msgid "Set the file to read for an XML target description." msgstr "" -#: target-descriptions.c:1848 +#: target-descriptions.c:1947 msgid "Show the file to read for an XML target description." msgstr "" -#: target-descriptions.c:1849 +#: target-descriptions.c:1948 msgid "" "When set, GDB will read the target description from a local\n" "file instead of querying the remote target." msgstr "" -#: target-descriptions.c:1856 +#: target-descriptions.c:1955 msgid "" "Unset the file to read for an XML target description.\n" "When unset, GDB will read the description from the target." msgstr "" -#: target-descriptions.c:1861 +#: target-descriptions.c:1960 msgid "Print the current target description as a C source file." msgstr "" -#: target-descriptions.c:1868 +#: target-descriptions.c:1965 +msgid "Print the current target description as an XML file." +msgstr "" + +#: target-descriptions.c:1971 msgid "" "Check equality of GDB target descriptions and XML created descriptions.\n" "Check the target descriptions created in GDB equal the descriptions\n" @@ -30138,17 +30034,17 @@ msgid "Error writing data to flash" msgstr "" -#: target.c:174 +#: target.c:169 #, possible-c-format msgid "Target debugging is %s.\n" msgstr "" -#: target.c:272 +#: target.c:260 #, possible-c-format msgid "target already added (\"%s\")." msgstr "" -#: target.c:276 +#: target.c:264 msgid "" "Connect to a target machine or process.\n" "The first argument is the type or protocol of the target machine.\n" @@ -30157,34 +30053,34 @@ "`help target ' followed by the protocol name." msgstr "" -#: target.c:516 +#: target.c:507 #, possible-c-format msgid "You can't do that when your target is `%s'" msgstr "" -#: target.c:529 +#: target.c:520 msgid "No saved terminal information.\n" msgstr "" -#: target.c:610 +#: target.c:621 msgid "Attempt to unpush the dummy target" msgstr "" -#: target.c:726 +#: target.c:741 msgid "Cannot find thread-local variables in this thread library." msgstr "" -#: target.c:731 +#: target.c:746 #, possible-c-format msgid "Cannot find shared library `%s' in dynamic linker's load module list" msgstr "" -#: target.c:734 +#: target.c:749 #, possible-c-format msgid "Cannot find executable file `%s' in dynamic linker's load module list" msgstr "" -#: target.c:739 +#: target.c:754 #, possible-c-format msgid "" "The inferior has not yet allocated storage for thread-local variables in\n" @@ -30192,7 +30088,7 @@ "for %s" msgstr "" -#: target.c:746 +#: target.c:761 #, possible-c-format msgid "" "The inferior has not yet allocated storage for thread-local variables in\n" @@ -30200,78 +30096,78 @@ "for %s" msgstr "" -#: target.c:755 +#: target.c:770 #, possible-c-format msgid "" "Cannot find thread-local storage for %s, shared library %s:\n" "%s" msgstr "" -#: target.c:760 +#: target.c:775 #, possible-c-format msgid "" "Cannot find thread-local storage for %s, executable file %s:\n" "%s" msgstr "" -#: target.c:931 +#: target.c:889 msgid "Writing to flash memory forbidden in this context" msgstr "" -#: target.c:1165 +#: target.c:1131 #, possible-c-format msgid "Writing to memory is not allowed (addr %s, len %s)" msgstr "" -#: target.c:1381 +#: target.c:1347 msgid "Overlapping regions in memory map: ignoring" msgstr "" -#: target.c:1408 +#: target.c:1374 #, possible-c-format msgid "Mode for reading from readonly sections is %s.\n" msgstr "" -#: target.c:1808 +#: target.c:1774 #, possible-c-format msgid "target object %d, annex %s, contained unexpected null characters" msgstr "" -#: target.c:1851 +#: target.c:1817 msgid "May not insert breakpoints" msgstr "" -#: target.c:1871 +#: target.c:1837 msgid "May not remove breakpoints" msgstr "" -#: target.c:1884 +#: target.c:1850 #, possible-c-format msgid "Symbols from \"%s\".\n" msgstr "" -#: target.c:1895 +#: target.c:1861 msgid "\tWhile running this, GDB does not access memory from...\n" msgstr "" -#: target.c:1992 +#: target.c:1938 msgid "Program not killed." msgstr "" -#: target.c:2157 +#: target.c:2119 msgid "could not find a target to follow fork" msgstr "" -#: target.c:2181 +#: target.c:2143 msgid "could not find a target to follow mourn inferior" msgstr "" -#: target.c:2235 target.c:2290 +#: target.c:2197 target.c:2252 #, possible-c-format msgid "Unable to access %s bytes of target memory at %s, halting search." msgstr "" -#: target.c:2358 +#: target.c:2320 #, possible-c-format msgid "" "The \"%s\" target does not support \"run\". Try \"help target\" or " @@ -30281,236 +30177,236 @@ #. This function is only called if the target is running. In that #. case there should have been a process_stratum target and it #. should either know how to create inferiors, or not... -#: target.c:2366 +#: target.c:2328 msgid "No targets found" msgstr "" -#: target.c:2378 +#: target.c:2340 #, possible-c-format msgid "Whether GDB may automatically connect to the native target is %s.\n" msgstr "" -#: target.c:2395 +#: target.c:2357 #, possible-c-format msgid "native target already set (\"%s\")." msgstr "" -#: target.c:2423 +#: target.c:2385 #, possible-c-format msgid "Don't know how to %s. Try \"help target\"." msgstr "" -#: target.c:3111 +#: target.c:3049 #, possible-c-format msgid "target file %s contained unexpected null characters" msgstr "" -#: target.c:3230 target.c:3239 +#: target.c:3168 target.c:3177 msgid "Command not implemented for this target." msgstr "" -#: target.c:3252 +#: target.c:3198 msgid "None" msgstr "" -#: target.c:3312 target.c:3324 +#: target.c:3258 target.c:3270 msgid "May not interrupt or stop the target, ignoring attempt" msgstr "" -#: target.c:3436 +#: target.c:3408 #, possible-c-format msgid "Writing to registers is not allowed (regno %d)" msgstr "" -#: target.c:3757 +#: target.c:3729 msgid "\"monitor\" command not supported by this target." msgstr "" -#: target.c:3789 +#: target.c:3761 msgid "Erasing flash memory region at address " msgstr "" -#: target.c:3801 +#: target.c:3773 msgid "No flash memory regions found.\n" msgstr "" -#: target.c:3809 +#: target.c:3781 msgid "The current target stack is:\n" msgstr "" -#: target.c:3863 +#: target.c:3835 #, possible-c-format msgid "Controlling the inferior in asynchronous mode is %s.\n" msgstr "" -#: target.c:3919 +#: target.c:3911 #, possible-c-format msgid "Whether the target is always in non-stop mode is %s (currently %s).\n" msgstr "" -#: target.c:3924 +#: target.c:3916 #, possible-c-format msgid "Whether the target is always in non-stop mode is %s.\n" msgstr "" -#: target.c:3993 +#: target.c:3985 msgid "Set target debugging." msgstr "" -#: target.c:3994 +#: target.c:3986 msgid "Show target debugging." msgstr "" -#: target.c:3995 +#: target.c:3987 msgid "" "When non-zero, target debugging is enabled. Higher numbers are more\n" "verbose." msgstr "" -#: target.c:4003 +#: target.c:3995 msgid "Set mode for reading from readonly sections." msgstr "" -#: target.c:4004 +#: target.c:3996 msgid "Show mode for reading from readonly sections." msgstr "" -#: target.c:4005 +#: target.c:3997 msgid "" "When this mode is on, memory reads from readonly sections (such as .text)\n" "will be read from the object file instead of from the target. This will\n" "result in significant performance improvement for remote targets." msgstr "" -#: target.c:4014 +#: target.c:4006 msgid "Send a command to the remote monitor (remote targets only)." msgstr "" -#: target.c:4017 +#: target.c:4009 msgid "Print the name of each layer of the internal target stack." msgstr "" -#: target.c:4021 +#: target.c:4013 msgid "Set whether gdb controls the inferior in asynchronous mode." msgstr "" -#: target.c:4022 +#: target.c:4014 msgid "Show whether gdb controls the inferior in asynchronous mode." msgstr "" -#: target.c:4023 +#: target.c:4015 msgid "Tells gdb whether to control the inferior in asynchronous mode." msgstr "" -#: target.c:4031 +#: target.c:4023 msgid "Set whether gdb always controls the inferior in non-stop mode." msgstr "" -#: target.c:4032 +#: target.c:4024 msgid "Show whether gdb always controls the inferior in non-stop mode." msgstr "" -#: target.c:4033 +#: target.c:4025 msgid "Tells gdb whether to control the inferior in non-stop mode." msgstr "" -#: target.c:4041 +#: target.c:4033 msgid "Set permission to write into registers." msgstr "" -#: target.c:4042 +#: target.c:4034 msgid "Show permission to write into registers." msgstr "" -#: target.c:4043 +#: target.c:4035 msgid "" "When this permission is on, GDB may write into the target's registers.\n" "Otherwise, any sort of write attempt will result in an error." msgstr "" -#: target.c:4050 +#: target.c:4042 msgid "Set permission to write into target memory." msgstr "" -#: target.c:4051 +#: target.c:4043 msgid "Show permission to write into target memory." msgstr "" -#: target.c:4052 +#: target.c:4044 msgid "" "When this permission is on, GDB may write into the target's memory.\n" "Otherwise, any sort of write attempt will result in an error." msgstr "" -#: target.c:4059 +#: target.c:4051 msgid "Set permission to insert breakpoints in the target." msgstr "" -#: target.c:4060 +#: target.c:4052 msgid "Show permission to insert breakpoints in the target." msgstr "" -#: target.c:4061 +#: target.c:4053 msgid "" "When this permission is on, GDB may insert breakpoints in the program.\n" "Otherwise, any sort of insertion attempt will result in an error." msgstr "" -#: target.c:4068 +#: target.c:4060 msgid "Set permission to insert tracepoints in the target." msgstr "" -#: target.c:4069 +#: target.c:4061 msgid "Show permission to insert tracepoints in the target." msgstr "" -#: target.c:4070 +#: target.c:4062 msgid "" "When this permission is on, GDB may insert tracepoints in the program.\n" "Otherwise, any sort of insertion attempt will result in an error." msgstr "" -#: target.c:4077 +#: target.c:4069 msgid "Set permission to insert fast tracepoints in the target." msgstr "" -#: target.c:4078 +#: target.c:4070 msgid "Show permission to insert fast tracepoints in the target." msgstr "" -#: target.c:4079 +#: target.c:4071 msgid "" "When this permission is on, GDB may insert fast tracepoints.\n" "Otherwise, any sort of insertion attempt will result in an error." msgstr "" -#: target.c:4086 +#: target.c:4078 msgid "Set permission to interrupt or signal the target." msgstr "" -#: target.c:4087 +#: target.c:4079 msgid "Show permission to interrupt or signal the target." msgstr "" -#: target.c:4088 +#: target.c:4080 msgid "" "When this permission is on, GDB may interrupt/stop the target's execution.\n" "Otherwise, any attempt to interrupt or stop will be ignored." msgstr "" -#: target.c:4095 +#: target.c:4087 msgid "Erase all flash memory regions." msgstr "" -#: target.c:4098 +#: target.c:4090 msgid "Set whether GDB may automatically connect to the native target." msgstr "" -#: target.c:4099 +#: target.c:4091 msgid "Show whether GDB may automatically connect to the native target." msgstr "" -#: target.c:4100 +#: target.c:4092 msgid "" "When on, and GDB is not connected to a target yet, GDB\n" "attempts \"run\" and other commands with the native target." @@ -30524,150 +30420,150 @@ msgid "should not call async_reply_reason here" msgstr "" -#: thread.c:324 +#: thread.c:297 #, possible-c-format msgid "[New %s]\n" msgstr "" -#: thread.c:907 +#: thread.c:908 msgid "No thread selected." msgstr "" -#: thread.c:913 +#: thread.c:914 msgid "The current thread has terminated" msgstr "" -#: thread.c:981 +#: thread.c:982 msgid "Requested thread not found in requested process" msgstr "" -#: thread.c:1068 +#: thread.c:1076 msgid "No threads.\n" msgstr "" -#: thread.c:1070 +#: thread.c:1078 #, possible-c-format msgid "No threads match '%s'.\n" msgstr "" -#: thread.c:1215 +#: thread.c:1222 msgid "Show global thread IDs." msgstr "" -#: thread.c:1368 +#: thread.c:1377 #, possible-c-format msgid "" "Couldn't restore frame #%d in current thread. Bottom (innermost) frame " "selected:" msgstr "" -#: thread.c:1519 thread.c:1530 +#: thread.c:1543 #, possible-c-format msgid "" "\n" "Thread %s (%s):\n" msgstr "" -#: thread.c:1545 +#: thread.c:1575 msgid "" "Call COMMAND for all threads in ascending order.\n" "The default is descending order." msgstr "" -#: thread.c:1559 +#: thread.c:1589 msgid "Disables printing the thread information." msgstr "" -#: thread.c:1617 +#: thread.c:1647 msgid "Please specify a command at the end of 'thread apply all'" msgstr "" -#: thread.c:1738 +#: thread.c:1768 msgid "Please specify a thread ID list" msgstr "" -#: thread.c:1758 +#: thread.c:1788 msgid "Please specify a command following the thread ID list" msgstr "" -#: thread.c:1781 +#: thread.c:1811 #, possible-c-format msgid "Unknown inferior %d" msgstr "" -#: thread.c:1799 +#: thread.c:1829 #, possible-c-format msgid "Unknown thread %d.%d" msgstr "" -#: thread.c:1801 +#: thread.c:1831 #, possible-c-format msgid "Unknown thread %d" msgstr "" -#: thread.c:1807 +#: thread.c:1837 #, possible-c-format msgid "Thread %s has terminated." msgstr "" -#: thread.c:1822 +#: thread.c:1852 msgid "Please specify a command to apply on all threads" msgstr "" -#: thread.c:1833 +#: thread.c:1863 msgid "Please specify a command to apply on all frames of all threads" msgstr "" -#: thread.c:1847 thread.c:1895 +#: thread.c:1877 thread.c:1925 msgid "No thread selected" msgstr "" -#: thread.c:1854 +#: thread.c:1884 #, possible-c-format msgid "[Current thread is %s (%s) (exited)]\n" msgstr "" -#: thread.c:1858 +#: thread.c:1888 #, possible-c-format msgid "[Current thread is %s (%s)]\n" msgstr "" -#: thread.c:1924 +#: thread.c:1960 #, possible-c-format msgid "Thread %s has name '%s'\n" msgstr "" -#: thread.c:1932 +#: thread.c:1968 #, possible-c-format msgid "Thread %s has target name '%s'\n" msgstr "" -#: thread.c:1940 +#: thread.c:1976 #, possible-c-format msgid "Thread %s has target id '%s'\n" msgstr "" -#: thread.c:1948 +#: thread.c:1984 #, possible-c-format msgid "Thread %s has extra info '%s'\n" msgstr "" -#: thread.c:1954 +#: thread.c:1990 #, possible-c-format msgid "No threads match '%s'\n" msgstr "" -#: thread.c:1964 +#: thread.c:2000 #, possible-c-format msgid "Printing of thread events is %s.\n" msgstr "" -#: thread.c:1974 +#: thread.c:2010 #, possible-c-format msgid "Thread ID %s has terminated." msgstr "" -#: thread.c:2127 +#: thread.c:2183 msgid "" "Display currently known threads.\n" "Usage: info threads [OPTION]... [ID]...\n" @@ -30678,27 +30574,27 @@ "Otherwise, all threads are displayed." msgstr "" -#: thread.c:2140 +#: thread.c:2196 msgid "" "Use this command to switch between threads.\n" "The new thread ID must be currently known." msgstr "" -#: thread.c:2157 +#: thread.c:2213 msgid "" "Apply a command to a list of threads.\n" "Usage: thread apply ID... [OPTION]... COMMAND\n" "ID is a space-separated list of IDs of threads to apply COMMAND on.\n" msgstr "" -#: thread.c:2173 +#: thread.c:2229 msgid "" "Apply a command to all threads.\n" "\n" "Usage: thread apply all [OPTION]... COMMAND\n" msgstr "" -#: thread.c:2185 +#: thread.c:2241 msgid "" "Apply a command to all threads (ignoring errors and empty output).\n" "Usage: taas [OPTION]... COMMAND\n" @@ -30706,7 +30602,7 @@ "See \"help thread apply all\" for available options." msgstr "" -#: thread.c:2192 +#: thread.c:2248 msgid "" "Apply a command to all frames of all threads (ignoring errors and empty " "output).\n" @@ -30716,25 +30612,25 @@ "See \"help frame apply all\" for available options." msgstr "" -#: thread.c:2200 +#: thread.c:2256 msgid "" "Set the current thread's name.\n" "Usage: thread name [NAME]\n" "If NAME is not given, then any existing name is removed." msgstr "" -#: thread.c:2204 +#: thread.c:2260 msgid "" "Find threads that match a regular expression.\n" "Usage: thread find REGEXP\n" "Will display thread ids whose name, target ID, or extra info matches REGEXP." msgstr "" -#: thread.c:2213 +#: thread.c:2269 msgid "Set printing of thread events (such as thread start and exit)." msgstr "" -#: thread.c:2214 +#: thread.c:2270 msgid "Show printing of thread events (such as thread start and exit)." msgstr "" @@ -30782,296 +30678,322 @@ msgid "unhandled state" msgstr "" -#: top.c:136 +#: top.c:140 #, possible-c-format msgid "Whether to confirm potentially dangerous operations is %s.\n" msgstr "" -#: top.c:342 +#: top.c:346 msgid "opening terminal failed" msgstr "" -#: top.c:362 +#: top.c:366 msgid "Usage: new-ui INTERPRETER TTY" msgstr "" -#: top.c:647 +#: top.c:664 msgid "That is not a command, just a help topic." msgstr "" -#: top.c:763 +#: top.c:780 msgid "No previous command to relaunch" msgstr "" -#: top.c:890 +#: top.c:913 #, possible-c-format msgid "Saving of the history record on exit is %s.\n" msgstr "" -#: top.c:902 +#: top.c:916 +msgid "" +"Saving of the history is disabled due to the value of 'history filename'.\n" +msgstr "" + +#: top.c:928 #, possible-c-format msgid "The size of the command history is %s.\n" msgstr "" -#: top.c:915 +#: top.c:941 #, possible-c-format msgid "The number of history entries to look back at for duplicates is %s.\n" msgstr "" -#: top.c:925 +#: top.c:964 +#, possible-c-format +msgid "The filename in which to record the command history is \"%ps\".\n" +msgstr "" + +#: top.c:968 +msgid "" +"There is no filename currently set for recording the command history in.\n" +msgstr "" + +#: top.c:1236 #, possible-c-format -msgid "The filename in which to record the command history is \"%s\".\n" +msgid "Could not rename %ps to %ps: %s" msgstr "" -#: top.c:1194 top.c:1224 +#: top.c:1268 #, possible-c-format msgid "Could not rename %s to %s: %s" msgstr "" -#: top.c:1400 +#: top.c:1444 msgid "Type \"show configuration\" for configuration details.\n" msgstr "" -#: top.c:1406 +#: top.c:1450 msgid "For bug reporting instructions, please see:\n" msgstr "" -#: top.c:1410 +#: top.c:1454 msgid "" "Find the GDB manual and other documentation resources online at:\n" " <http://www.gnu.org/software/gdb/documentation/>." msgstr "" -#: top.c:1413 +#: top.c:1457 msgid "For help, type \"help\".\n" msgstr "" -#: top.c:1415 +#: top.c:1459 msgid "Type \"apropos word\" to search for commands related to \"word\"." msgstr "" -#: top.c:1423 +#: top.c:1467 #, possible-c-format msgid "" "This GDB was configured as follows:\n" " configure --host=%s --target=%s\n" msgstr "" -#: top.c:1427 +#: top.c:1472 #, possible-c-format msgid "" " --with-auto-load-dir=%s\n" " --with-auto-load-safe-path=%s\n" msgstr "" -#: top.c:1432 +#: top.c:1478 msgid " --with-expat\n" msgstr "" -#: top.c:1436 +#: top.c:1482 msgid " --without-expat\n" msgstr "" -#: top.c:1441 +#: top.c:1488 #, possible-c-format msgid " --with-gdb-datadir=%s%s\n" msgstr "" -#: top.c:1445 +#: top.c:1493 #, possible-c-format msgid " --with-iconv-bin=%s%s\n" msgstr "" -#: top.c:1450 +#: top.c:1499 #, possible-c-format msgid " --with-jit-reader-dir=%s%s\n" msgstr "" -#: top.c:1454 +#: top.c:1504 msgid " --with-libunwind-ia64\n" msgstr "" -#: top.c:1458 +#: top.c:1508 msgid " --without-libunwind-ia64\n" msgstr "" -#: top.c:1463 +#: top.c:1514 msgid " --with-lzma\n" msgstr "" -#: top.c:1467 +#: top.c:1518 msgid " --without-lzma\n" msgstr "" -#: top.c:1472 +#: top.c:1524 msgid " --with-babeltrace\n" msgstr "" -#: top.c:1476 -msgid "" -" --without-babeltrace\n" -"\t\t" +#: top.c:1528 +msgid " --without-babeltrace\n" msgstr "" -#: top.c:1481 +#: top.c:1534 msgid " --with-intel-pt\n" msgstr "" -#: top.c:1485 +#: top.c:1538 msgid " --without-intel-pt\n" msgstr "" -#: top.c:1490 +#: top.c:1544 msgid " --with-mpfr\n" msgstr "" -#: top.c:1494 +#: top.c:1548 msgid " --without-mpfr\n" msgstr "" -#: top.c:1499 +#: top.c:1553 msgid " --with-xxhash\n" msgstr "" -#: top.c:1503 +#: top.c:1557 msgid " --without-xxhash\n" msgstr "" -#: top.c:1508 +#: top.c:1562 #, possible-c-format msgid " --with-python=%s%s\n" msgstr "" -#: top.c:1512 +#: top.c:1566 msgid " --without-python\n" msgstr "" -#: top.c:1517 +#: top.c:1571 +#, possible-c-format +msgid " --with-python-libdir=%s%s\n" +msgstr "" + +#: top.c:1575 +msgid " --without-python-libdir\n" +msgstr "" + +#: top.c:1581 +msgid " --with-debuginfod\n" +msgstr "" + +#: top.c:1585 +msgid " --without-debuginfod\n" +msgstr "" + +#: top.c:1591 msgid " --with-guile\n" msgstr "" -#: top.c:1521 +#: top.c:1595 msgid " --without-guile\n" msgstr "" -#: top.c:1526 +#: top.c:1601 msgid " --enable-source-highlight\n" msgstr "" -#: top.c:1530 +#: top.c:1605 msgid " --disable-source-highlight\n" msgstr "" -#: top.c:1535 +#: top.c:1611 #, possible-c-format msgid " --with-relocated-sources=%s\n" msgstr "" -#: top.c:1540 +#: top.c:1617 #, possible-c-format msgid " --with-separate-debug-dir=%s%s\n" msgstr "" -#: top.c:1544 +#: top.c:1622 #, possible-c-format msgid " --with-sysroot=%s%s\n" msgstr "" -#: top.c:1548 +#: top.c:1627 #, possible-c-format msgid " --with-system-gdbinit=%s%s\n" msgstr "" -#: top.c:1552 +#: top.c:1632 #, possible-c-format msgid " --with-system-gdbinit-dir=%s%s\n" msgstr "" #. We assume "relocatable" will be printed at least once, thus we always #. print this text. It's a reasonably safe assumption for now. -#: top.c:1557 +#: top.c:1638 msgid "" "\n" "(\"Relocatable\" means the directory can be moved with the GDB installation\n" "tree, and GDB will still find it.)\n" msgstr "" -#: top.c:1636 +#: top.c:1705 #, possible-c-format msgid "\tInferior %d [%s] will be detached.\n" msgstr "" -#: top.c:1640 +#: top.c:1709 #, possible-c-format msgid "\tInferior %d [%s] will be killed.\n" msgstr "" -#: top.c:1659 +#: top.c:1726 msgid "" "A debugging session is active.\n" "\n" msgstr "" -#: top.c:1661 +#: top.c:1731 msgid "" "\n" "Quit anyway? " msgstr "" -#: top.c:1905 -msgid "\"set history\" must be followed by the name of a history subcommand.\n" -msgstr "" - -#: top.c:1934 +#: top.c:1991 msgid "Set verbose printing of informational messages." msgstr "" -#: top.c:1935 +#: top.c:1992 msgid "Show verbose printing of informational messages." msgstr "" -#: top.c:2020 +#: top.c:2080 #, possible-c-format msgid "Gdb's prompt is \"%s\".\n" msgstr "" -#: top.c:2038 +#: top.c:2098 #, possible-c-format msgid "Editing of command lines as they are typed is %s.\n" msgstr "" -#: top.c:2040 +#: top.c:2100 msgid "on" msgstr "" -#: top.c:2040 +#: top.c:2100 msgid "off" msgstr "" -#: top.c:2047 +#: top.c:2107 #, possible-c-format msgid "Annotation_level is %s.\n" msgstr "" -#: top.c:2054 +#: top.c:2114 #, possible-c-format msgid "Notification of completion for asynchronous execution commands is %s.\n" msgstr "" -#: top.c:2077 +#: top.c:2137 #, possible-c-format -msgid "GDB's data directory is \"%s\".\n" +msgid "GDB's data directory is \"%ps\".\n" msgstr "" -#: top.c:2133 +#: top.c:2200 msgid "Set gdb's prompt." msgstr "" -#: top.c:2134 +#: top.c:2201 msgid "Show gdb's prompt." msgstr "" -#: top.c:2139 +#: top.c:2206 msgid "" "Don't repeat this command.\n" "Primarily used inside of user-defined commands that should not be repeated " @@ -31079,44 +31001,44 @@ "hitting return." msgstr "" -#: top.c:2145 +#: top.c:2212 msgid "Set editing of command lines as they are typed." msgstr "" -#: top.c:2146 +#: top.c:2213 msgid "Show editing of command lines as they are typed." msgstr "" -#: top.c:2147 +#: top.c:2214 msgid "" "Use \"on\" to enable the editing, and \"off\" to disable it.\n" "Without an argument, command line editing is enabled. To edit, use\n" "EMACS-like or VI-like commands like control-P or ESC." msgstr "" -#: top.c:2155 +#: top.c:2222 msgid "Set saving of the history record on exit." msgstr "" -#: top.c:2156 +#: top.c:2223 msgid "Show saving of the history record on exit." msgstr "" -#: top.c:2157 +#: top.c:2224 msgid "" "Use \"on\" to enable the saving, and \"off\" to disable it.\n" "Without an argument, saving is enabled." msgstr "" -#: top.c:2165 +#: top.c:2232 msgid "Set the size of the command history." msgstr "" -#: top.c:2166 +#: top.c:2233 msgid "Show the size of the command history." msgstr "" -#: top.c:2167 +#: top.c:2234 msgid "" "This is the number of previous commands to keep a record of.\n" "If set to \"unlimited\", the number of commands kept in the history\n" @@ -31124,15 +31046,15 @@ "variable \"GDBHISTSIZE\", or to 256 if this variable is not set." msgstr "" -#: top.c:2177 +#: top.c:2244 msgid "Set how far back in history to look for and remove duplicate entries." msgstr "" -#: top.c:2178 +#: top.c:2245 msgid "Show how far back in history to look for and remove duplicate entries." msgstr "" -#: top.c:2179 +#: top.c:2246 msgid "" "If set to a nonzero value N, GDB will look back at the last N history " "entries\n" @@ -31144,73 +31066,73 @@ "By default this option is set to 0." msgstr "" -#: top.c:2191 +#: top.c:2258 msgid "Set the filename in which to record the command history." msgstr "" -#: top.c:2192 +#: top.c:2259 msgid "Show the filename in which to record the command history." msgstr "" -#: top.c:2193 +#: top.c:2260 msgid "(the list of previous commands of which a record is kept)." msgstr "" -#: top.c:2199 +#: top.c:2266 msgid "Set whether to confirm potentially dangerous operations." msgstr "" -#: top.c:2200 +#: top.c:2267 msgid "Show whether to confirm potentially dangerous operations." msgstr "" -#: top.c:2206 +#: top.c:2273 msgid "Set annotation_level." msgstr "" -#: top.c:2207 +#: top.c:2274 msgid "Show annotation_level." msgstr "" -#: top.c:2208 +#: top.c:2275 msgid "" "0 == normal; 1 == fullname (for use when running under emacs)\n" "2 == output annotated suitably for use by programs that control GDB." msgstr "" -#: top.c:2216 +#: top.c:2283 msgid "Set notification of completion for asynchronous execution commands." msgstr "" -#: top.c:2217 +#: top.c:2284 msgid "Show notification of completion for asynchronous execution commands." msgstr "" -#: top.c:2218 +#: top.c:2285 msgid "Use \"on\" to enable the notification, and \"off\" to disable it." msgstr "" -#: top.c:2225 +#: top.c:2292 msgid "Set GDB's data directory." msgstr "" -#: top.c:2226 +#: top.c:2293 msgid "Show GDB's data directory." msgstr "" -#: top.c:2227 +#: top.c:2294 msgid "When set, GDB uses the specified path to search for data files." msgstr "" -#: top.c:2234 +#: top.c:2301 msgid "Set whether GDB's standard input is a terminal." msgstr "" -#: top.c:2235 +#: top.c:2302 msgid "Show whether GDB's standard input is a terminal." msgstr "" -#: top.c:2236 +#: top.c:2303 msgid "" "If on, GDB assumes that standard input is a terminal. In practice, it\n" "means that GDB should wait for the user to answer queries associated to\n" @@ -31220,7 +31142,7 @@ "input settings." msgstr "" -#: top.c:2247 +#: top.c:2314 msgid "" "Create a new UI.\n" "Usage: new-ui INTERPRETER TTY\n" @@ -31258,7 +31180,7 @@ msgid "Unable to open directory '%s' for saving trace data (%s)" msgstr "" -#: tracectf.c:362 tracectf.c:371 tracefile-tfile.c:127 +#: tracectf.c:362 tracectf.c:371 tracefile-tfile.c:128 #, possible-c-format msgid "Unable to open file '%s' for saving trace data (%s)" msgstr "" @@ -31292,34 +31214,34 @@ msgid "Wrong event id of the first event of the second packet" msgstr "" -#: tracectf.c:1306 +#: tracectf.c:1307 msgid "ctf_xfer_partial: trace file is read-only" msgstr "" -#: tracectf.c:1624 tracefile-tfile.c:755 +#: tracectf.c:1625 tracefile-tfile.c:755 msgid "unknown tfind type" msgstr "" -#: tracectf.c:1704 +#: tracectf.c:1705 #, possible-c-format msgid "Unhandled trace block type (%s) while building trace frame info." msgstr "" -#: tracefile-tfile.c:45 +#: tracefile-tfile.c:46 msgid "Local trace dump file" msgstr "" -#: tracefile-tfile.c:46 +#: tracefile-tfile.c:47 msgid "" "Use a trace file as a target.\n" "Specify the filename of the trace file." msgstr "" -#: tracefile-tfile.c:449 +#: tracefile-tfile.c:450 msgid "Premature end of file while reading trace file" msgstr "" -#: tracefile-tfile.c:469 +#: tracefile-tfile.c:470 msgid "No trace file specified." msgstr "" @@ -31335,11 +31257,11 @@ msgid "No register block size recorded in trace file" msgstr "" -#: tracefile-tfile.c:563 +#: tracefile-tfile.c:564 msgid "No traceframes present in this file." msgstr "" -#: tracefile-tfile.c:611 +#: tracefile-tfile.c:612 #, possible-c-format msgid "Ignoring trace file definition \"%s\"" msgstr "" @@ -31396,7 +31318,7 @@ msgid "Tracepoint %d does while-stepping, cannot infer $pc" msgstr "" -#: tracefile.c:477 +#: tracefile.c:478 msgid "" "Save the trace data to a file.\n" "Use the '-ctf' option to save the data to CTF format.\n" @@ -31662,10 +31584,6 @@ msgid " (%d%% full)" msgstr "" -#: tracepoint.c:1861 -msgid ".\n" -msgstr "" - #: tracepoint.c:1864 #, possible-c-format msgid "Trace buffer has %d bytes free.\n" @@ -31881,19 +31799,19 @@ msgid "trace frame info" msgstr "" -#: tracepoint.c:3998 +#: tracepoint.c:3999 msgid "List the variables local to a scope." msgstr "" -#: tracepoint.c:4001 +#: tracepoint.c:4002 msgid "Tracing of program execution without stopping the program." msgstr "" -#: tracepoint.c:4005 +#: tracepoint.c:4006 msgid "Print everything collected at the current tracepoint." msgstr "" -#: tracepoint.c:4007 +#: tracepoint.c:4008 msgid "" "Define a trace state variable.\n" "Argument is a $-prefixed name, optionally followed\n" @@ -31901,7 +31819,7 @@ "at the start of tracing." msgstr "" -#: tracepoint.c:4014 +#: tracepoint.c:4015 msgid "" "Delete one or more trace state variables.\n" "Arguments are the names of the variables to delete.\n" @@ -31909,33 +31827,33 @@ msgstr "" #. FIXME add a trace variable completer. -#: tracepoint.c:4020 +#: tracepoint.c:4021 msgid "Status of trace state variables and their values." msgstr "" -#: tracepoint.c:4024 +#: tracepoint.c:4025 msgid "List target static tracepoints markers." msgstr "" -#: tracepoint.c:4027 +#: tracepoint.c:4028 msgid "" "Select a trace frame.\n" "No argument means forward by one frame; '-' means backward by one frame." msgstr "" -#: tracepoint.c:4032 +#: tracepoint.c:4033 msgid "" "Select a trace frame whose PC is outside the given range (exclusive).\n" "Usage: tfind outside ADDR1, ADDR2" msgstr "" -#: tracepoint.c:4037 +#: tracepoint.c:4038 msgid "" "Select a trace frame whose PC is in the given range (inclusive).\n" "Usage: tfind range ADDR1, ADDR2" msgstr "" -#: tracepoint.c:4042 +#: tracepoint.c:4043 msgid "" "Select a trace frame by source line.\n" "Argument can be a line number (with optional source file),\n" @@ -31943,31 +31861,31 @@ "Default argument is 'the next source line that was traced'." msgstr "" -#: tracepoint.c:4049 +#: tracepoint.c:4050 msgid "" "Select a trace frame by tracepoint number.\n" "Default is the tracepoint for the current trace frame." msgstr "" -#: tracepoint.c:4054 +#: tracepoint.c:4055 msgid "" "Select a trace frame by PC.\n" "Default is the current PC, or the PC of the current trace frame." msgstr "" -#: tracepoint.c:4059 +#: tracepoint.c:4060 msgid "De-select any trace frame and resume 'live' debugging." msgstr "" -#: tracepoint.c:4066 +#: tracepoint.c:4067 msgid "Select the first trace frame in the trace buffer." msgstr "" -#: tracepoint.c:4070 +#: tracepoint.c:4071 msgid "Display the status of the current trace data collection." msgstr "" -#: tracepoint.c:4072 +#: tracepoint.c:4073 msgid "" "Stop trace data collection.\n" "Usage: tstop [NOTES]...\n" @@ -31975,7 +31893,7 @@ "reported by tstatus (if the target supports trace notes)." msgstr "" -#: tracepoint.c:4078 +#: tracepoint.c:4079 msgid "" "Start trace data collection.\n" "Usage: tstart [NOTES]...\n" @@ -31983,7 +31901,7 @@ "reported by tstatus (if the target supports trace notes)." msgstr "" -#: tracepoint.c:4084 +#: tracepoint.c:4085 msgid "" "Ends a list of commands or actions.\n" "Several GDB commands allow you to enter a list of commands or actions.\n" @@ -31993,7 +31911,7 @@ "Note: the \"end\" command cannot be used at the gdb prompt." msgstr "" -#: tracepoint.c:4092 +#: tracepoint.c:4093 msgid "" "Specify single-stepping behavior at a tracepoint.\n" "Argument is number of instructions to trace in single-step mode\n" @@ -32004,7 +31922,7 @@ "Note: this command can only be used in a tracepoint \"actions\" list." msgstr "" -#: tracepoint.c:4103 +#: tracepoint.c:4104 msgid "" "Specify one or more data items to be collected at a tracepoint.\n" "Accepts a comma-separated list of (one or more) expressions. GDB will\n" @@ -32017,7 +31935,7 @@ "Note: this command can only be used in a tracepoint \"actions\" list." msgstr "" -#: tracepoint.c:4114 +#: tracepoint.c:4115 msgid "" "Specify one or more expressions to be evaluated at a tracepoint.\n" "Accepts a comma-separated list of (one or more) expressions.\n" @@ -32025,7 +31943,7 @@ "Note: this command can only be used in a tracepoint \"actions\" list." msgstr "" -#: tracepoint.c:4120 +#: tracepoint.c:4121 msgid "" "Specify the actions to be taken at a tracepoint.\n" "Tracepoint actions may include collecting of specified data,\n" @@ -32033,323 +31951,355 @@ "depending on target's capabilities." msgstr "" -#: tracepoint.c:4128 +#: tracepoint.c:4129 msgid "Set the list of expressions to collect by default." msgstr "" -#: tracepoint.c:4129 +#: tracepoint.c:4130 msgid "Show the list of expressions to collect by default." msgstr "" -#: tracepoint.c:4135 +#: tracepoint.c:4136 msgid "Set whether tracing continues after GDB disconnects." msgstr "" -#: tracepoint.c:4136 +#: tracepoint.c:4137 msgid "Show whether tracing continues after GDB disconnects." msgstr "" -#: tracepoint.c:4137 +#: tracepoint.c:4138 msgid "" "Use this to continue a tracing run even if GDB disconnects\n" "or detaches from the target. You can reconnect later and look at\n" "trace data collected in the meantime." msgstr "" -#: tracepoint.c:4147 +#: tracepoint.c:4148 msgid "Set target's use of circular trace buffer." msgstr "" -#: tracepoint.c:4148 +#: tracepoint.c:4149 msgid "Show target's use of circular trace buffer." msgstr "" -#: tracepoint.c:4149 +#: tracepoint.c:4150 msgid "" "Use this to make the trace buffer into a circular buffer,\n" "which will discard traceframes (oldest first) instead of filling\n" "up and stopping the trace run." msgstr "" -#: tracepoint.c:4159 +#: tracepoint.c:4160 msgid "Set requested size of trace buffer." msgstr "" -#: tracepoint.c:4160 +#: tracepoint.c:4161 msgid "Show requested size of trace buffer." msgstr "" -#: tracepoint.c:4161 +#: tracepoint.c:4162 msgid "" "Use this to choose a size for the trace buffer. Some targets\n" "may have fixed or limited buffer sizes. Specifying \"unlimited\" or -1\n" "disables any attempt to set the buffer size and lets the target choose." msgstr "" -#: tracepoint.c:4169 +#: tracepoint.c:4170 msgid "Set the user name to use for current and future trace runs." msgstr "" -#: tracepoint.c:4170 +#: tracepoint.c:4171 msgid "Show the user name to use for current and future trace runs." msgstr "" -#: tracepoint.c:4176 +#: tracepoint.c:4177 msgid "Set notes string to use for current and future trace runs." msgstr "" -#: tracepoint.c:4177 +#: tracepoint.c:4178 msgid "Show the notes string to use for current and future trace runs." msgstr "" -#: tracepoint.c:4183 +#: tracepoint.c:4184 msgid "Set notes string to use for future tstop commands." msgstr "" -#: tracepoint.c:4184 +#: tracepoint.c:4185 msgid "Show the notes string to use for future tstop commands." msgstr "" -#: tui/tui-source.h:58 -msgid "[ No Source Available ]" +#: tui/tui-layout.c:170 +msgid "layout not found!?" msgstr "" -#: tui/tui-regs.c:394 -msgid "[ Register Values Unavailable ]" +#: tui/tui-layout.c:363 +#, possible-c-format +msgid "Unknown window type \"%s\"" msgstr "" -#: tui/tui-regs.c:600 +#: tui/tui-layout.c:367 #, possible-c-format -msgid "ambiguous register group name '%s'" +msgid "Could not create window \"%s\"" msgstr "" -#: tui/tui-regs.c:606 +#: tui/tui-layout.c:401 #, possible-c-format -msgid "unknown register group '%s'" +msgid "Window type \"%s\" is built-in" +msgstr "" + +#: tui/tui-layout.c:649 tui/tui-win.c:906 +msgid "Invalid window height specified" msgstr "" -#: tui/tui-regs.c:615 +#: tui/tui-layout.c:867 +#, possible-c-format msgid "" -"\"tui reg\" must be followed by the name of either a register group,\n" -"or one of 'next' or 'prev'. Known register groups are:\n" +"Apply the \"%s\" layout.\n" +"This layout was created using:\n" +" tui new-layout %s %s" msgstr "" -#: tui/tui-regs.c:661 -msgid "TUI command to control the register window." +#: tui/tui-layout.c:946 +msgid "No layout name specified" msgstr "" -#: tui/tui-interp.c:297 -msgid "tui_exec called" +#: tui/tui-layout.c:948 +msgid "Layout name cannot start with '-'" msgstr "" -#: tui/tui.c:426 -#, possible-c-format -msgid "Cannot enable the TUI when the interpreter is '%s'" +#: tui/tui-layout.c:981 +msgid "Extra '}' in layout specification" msgstr "" -#: tui/tui.c:431 -msgid "Cannot enable the TUI when output is not a terminal" +#: tui/tui-layout.c:989 +#, possible-c-format +msgid "Unknown window \"%s\"" msgstr "" -#: tui/tui.c:442 +#: tui/tui-layout.c:991 #, possible-c-format -msgid "Cannot enable the TUI: error opening terminal [TERM=%s]" +msgid "Window \"%s\" seen twice in layout" msgstr "" -#: tui/tui.c:464 +#: tui/tui-layout.c:996 #, possible-c-format -msgid "" -"Cannot enable the TUI: terminal doesn't support cursor addressing [TERM=%s]" +msgid "Weight out of range: %s" msgstr "" -#: tui/tui.c:682 -msgid "Enable TUI display mode." +#: tui/tui-layout.c:1011 +msgid "Missing '}' in layout specification" msgstr "" -#: tui/tui.c:685 -msgid "Disable TUI display mode." +#: tui/tui-layout.c:1013 +msgid "New layout does not contain any windows" msgstr "" -#: tui/tui-layout.c:260 -msgid "Usage: layout prev | next | LAYOUT-NAME" +#: tui/tui-layout.c:1015 +msgid "New layout does not contain the \"" msgstr "" -#: tui/tui-layout.c:264 -msgid "Ambiguous command input." +#: tui/tui-layout.c:1034 +msgid "" +"Change the layout of windows.\n" +"Usage: layout prev | next | LAYOUT-NAME" msgstr "" -#: tui/tui-layout.c:285 -#, possible-c-format -msgid "Unrecognized layout: %s" +#: tui/tui-layout.c:1040 +msgid "Apply the next TUI layout." +msgstr "" + +#: tui/tui-layout.c:1043 +msgid "Apply the previous TUI layout." +msgstr "" + +#: tui/tui-layout.c:1046 +msgid "Apply the TUI register layout." msgstr "" -#: tui/tui-layout.c:554 +#: tui/tui-layout.c:1050 msgid "" -"Change the layout of windows.\n" -"Usage: layout prev | next | LAYOUT-NAME\n" -"Layout names are:\n" -" src : Displays source and command windows.\n" -" asm : Displays disassembly and command windows.\n" -" split : Displays source, disassembly and command windows.\n" -" regs : Displays register window. If existing layout\n" -" is source/command or assembly/command, the \n" -" register window is displayed. If the\n" -" source/assembly/command (split) is displayed, \n" -" the register window is displayed with \n" -" the window that has current logical focus." +"Create a new TUI layout.\n" +"Usage: tui new-layout [-horizontal] NAME WINDOW WEIGHT [WINDOW WEIGHT]...\n" +"Create a new TUI layout. The new layout will be named NAME,\n" +"and can be accessed using \"layout NAME\".\n" +"The windows will be displayed in the specified order.\n" +"A WINDOW can also be of the form:\n" +" { [-horizontal] NAME WEIGHT [NAME WEIGHT]... }\n" +"This form indicates a sub-frame.\n" +"Each WEIGHT is an integer, which holds the relative size\n" +"to be allocated to the window." msgstr "" -#: tui/tui-win.c:198 +#: tui/tui-io.c:858 +msgid "Cannot create pipe for readline" +msgstr "" + +#: tui/tui-io.c:862 +msgid "Cannot redirect readline output" +msgstr "" + +#: tui/tui-win.c:193 #, possible-c-format msgid "The attribute mode to use for the active TUI window border is \"%s\".\n" msgstr "" -#: tui/tui-win.c:210 +#: tui/tui-win.c:205 #, possible-c-format msgid "The attribute mode to use for the TUI window borders is \"%s\".\n" msgstr "" -#: tui/tui-win.c:222 +#: tui/tui-win.c:217 #, possible-c-format msgid "The kind of border for TUI windows is \"%s\".\n" msgstr "" -#: tui/tui-win.c:321 -msgid "\"tui\" must be followed by the name of a tui command.\n" -msgstr "" - -#: tui/tui-win.c:331 +#: tui/tui-win.c:308 msgid "Text User Interface commands." msgstr "" -#: tui/tui-win.c:358 +#: tui/tui-win.c:335 #, possible-c-format msgid "TUI resize messaging is %s.\n" msgstr "" -#: tui/tui-win.c:834 tui/tui-win.c:1005 +#: tui/tui-win.c:672 #, possible-c-format -msgid "Unrecognized window name \"%s\"" +msgid "Window name \"%*s\" is ambiguous" +msgstr "" + +#: tui/tui-win.c:688 +msgid "name of window to focus" msgstr "" -#: tui/tui-win.c:836 tui/tui-win.c:1007 +#: tui/tui-win.c:700 tui/tui-win.c:870 #, possible-c-format -msgid "Window \"%s\" is not visible" +msgid "Unrecognized window name \"%s\"" msgstr "" -#: tui/tui-win.c:840 +#: tui/tui-win.c:702 tui/tui-win.c:872 #, possible-c-format -msgid "Focus set to %s window.\n" +msgid "Window \"%s\" is not visible" msgstr "" -#: tui/tui-win.c:844 +#: tui/tui-win.c:706 #, possible-c-format -msgid "" -"Incorrect Number of Arguments.\n" -"%s" +msgid "Focus set to %s window.\n" msgstr "" -#: tui/tui-win.c:852 +#: tui/tui-win.c:715 msgid "The TUI is not active.\n" msgstr "" -#: tui/tui-win.c:873 +#: tui/tui-win.c:736 msgid "(has focus)" msgstr "" -#: tui/tui-win.c:920 +#: tui/tui-win.c:785 msgid "Tab width must not be 0" msgstr "" -#: tui/tui-win.c:933 +#: tui/tui-win.c:798 #, possible-c-format msgid "TUI tab width is %s spaces.\n" msgstr "" -#: tui/tui-win.c:957 +#: tui/tui-win.c:822 #, possible-c-format msgid "TUI source window compactness is %s.\n" msgstr "" -#: tui/tui-win.c:972 +#: tui/tui-win.c:837 msgid "Tab widths greater than 0 must be specified." msgstr "" -#: tui/tui-win.c:1039 tui/tui-win.c:1045 -#, possible-c-format -msgid "" -"Invalid window height specified.\n" -"%s" +#: tui/tui-win.c:856 +msgid "name of window" msgstr "" -#: tui/tui-win.c:1381 +#: tui/tui-win.c:973 #, possible-c-format msgid "Unrecognized window `%s'" msgstr "" -#: tui/tui-win.c:1383 +#: tui/tui-win.c:975 msgid "Window is not visible" msgstr "" -#: tui/tui-win.c:1404 tui/tui-win.c:1408 +#: tui/tui-win.c:997 tui/tui-win.c:1001 msgid "TUI configuration variables." msgstr "" -#: tui/tui-win.c:1413 +#: tui/tui-win.c:1006 msgid "Refresh the terminal display." msgstr "" -#: tui/tui-win.c:1415 +#: tui/tui-win.c:1008 msgid "" "Set the width (in characters) of tab stops.\n" "Usage: tabset N" msgstr "" -#: tui/tui-win.c:1420 -msgid "Set or modify the height of a specified window.\n" +#: tui/tui-win.c:1013 +msgid "" +"Set or modify the height of a specified window.\n" +"Usage: winheight WINDOW-NAME [+ | -] NUM-LINES\n" +"Use \"info win\" to see the names of the windows currently being displayed." msgstr "" -#: tui/tui-win.c:1431 -msgid "List of all displayed windows." +#: tui/tui-win.c:1020 +msgid "" +"List of all displayed windows.\n" +"Usage: info win" msgstr "" -#: tui/tui-win.c:1432 -msgid "Set focus to named window or next/prev window.\n" +#: tui/tui-win.c:1022 +msgid "" +"Set focus to named window or next/prev window.\n" +"Usage: focus [WINDOW-NAME | next | prev]\n" +"Use \"info win\" to see the names of the windows currently being displayed." msgstr "" -#: tui/tui-win.c:1442 +#: tui/tui-win.c:1028 msgid "" "Scroll window forward.\n" -"Usage: + [WIN] [N]" +"Usage: + [N] [WIN]\n" +"Scroll window WIN N lines forwards. Both WIN and N are optional, N\n" +"defaults to 1, and WIN defaults to the currently focused window." msgstr "" -#: tui/tui-win.c:1445 +#: tui/tui-win.c:1033 msgid "" "Scroll window backward.\n" -"Usage: - [WIN] [N]" +"Usage: - [N] [WIN]\n" +"Scroll window WIN N lines backwards. Both WIN and N are optional, N\n" +"defaults to 1, and WIN defaults to the currently focused window." msgstr "" -#: tui/tui-win.c:1448 +#: tui/tui-win.c:1038 msgid "" "Scroll window text to the left.\n" -"Usage: < [WIN] [N]" +"Usage: < [N] [WIN]\n" +"Scroll window WIN N characters left. Both WIN and N are optional, N\n" +"defaults to 1, and WIN defaults to the currently focused window." msgstr "" -#: tui/tui-win.c:1451 +#: tui/tui-win.c:1043 msgid "" "Scroll window text to the right.\n" -"Usage: > [WIN] [N]" +"Usage: > [N] [WIN]\n" +"Scroll window WIN N characters right. Both WIN and N are optional, N\n" +"defaults to 1, and WIN defaults to the currently focused window." msgstr "" -#: tui/tui-win.c:1457 +#: tui/tui-win.c:1051 msgid "Set the kind of border for TUI windows." msgstr "" -#: tui/tui-win.c:1458 +#: tui/tui-win.c:1052 msgid "Show the kind of border for TUI windows." msgstr "" -#: tui/tui-win.c:1459 +#: tui/tui-win.c:1053 msgid "" "This variable controls the border of TUI windows:\n" " space use a white space\n" @@ -32357,15 +32307,15 @@ " acs use the Alternate Character Set" msgstr "" -#: tui/tui-win.c:1469 +#: tui/tui-win.c:1063 msgid "Set the attribute mode to use for the TUI window borders." msgstr "" -#: tui/tui-win.c:1470 +#: tui/tui-win.c:1064 msgid "Show the attribute mode to use for the TUI window borders." msgstr "" -#: tui/tui-win.c:1471 +#: tui/tui-win.c:1065 msgid "" "This variable controls the attributes to use for the window borders:\n" " normal normal display\n" @@ -32377,15 +32327,15 @@ " bold-standout use extra bright or bold with standout mode" msgstr "" -#: tui/tui-win.c:1485 +#: tui/tui-win.c:1079 msgid "Set the attribute mode to use for the active TUI window border." msgstr "" -#: tui/tui-win.c:1486 +#: tui/tui-win.c:1080 msgid "Show the attribute mode to use for the active TUI window border." msgstr "" -#: tui/tui-win.c:1487 +#: tui/tui-win.c:1081 msgid "" "This variable controls the attributes to use for the active window border:\n" " normal normal display\n" @@ -32397,113 +32347,170 @@ " bold-standout use extra bright or bold with standout mode" msgstr "" -#: tui/tui-win.c:1501 +#: tui/tui-win.c:1095 msgid "Set the tab width, in characters, for the TUI." msgstr "" -#: tui/tui-win.c:1502 +#: tui/tui-win.c:1096 msgid "Show the tab witdh, in characters, for the TUI." msgstr "" -#: tui/tui-win.c:1503 +#: tui/tui-win.c:1097 msgid "" "This variable controls how many spaces are used to display a tab character." msgstr "" -#: tui/tui-win.c:1509 +#: tui/tui-win.c:1103 msgid "Set TUI resize messaging." msgstr "" -#: tui/tui-win.c:1510 +#: tui/tui-win.c:1104 msgid "Show TUI resize messaging." msgstr "" -#: tui/tui-win.c:1511 +#: tui/tui-win.c:1105 msgid "When enabled GDB will print a message when the terminal is resized." msgstr "" -#: tui/tui-win.c:1519 +#: tui/tui-win.c:1113 msgid "Set whether the TUI source window is compact." msgstr "" -#: tui/tui-win.c:1520 +#: tui/tui-win.c:1114 msgid "Show whether the TUI source window is compact." msgstr "" -#: tui/tui-win.c:1521 +#: tui/tui-win.c:1115 msgid "" "This variable controls whether the TUI source window is shown\n" "in a compact form. The compact form puts the source closer to\n" "the line numbers and uses less horizontal space." msgstr "" -#: tui/tui-disasm.h:53 +#: tui/tui-source.h:53 +msgid "[ No Source Available ]" +msgstr "" + +#: tui/tui-stack.c:381 +msgid "" +"Update the source window and locator to display the current execution " +"point.\n" +"Usage: update" +msgstr "" + +#: tui/tui-regs.c:417 +msgid "[ Register Values Unavailable ]" +msgstr "" + +#: tui/tui-regs.c:581 +#, possible-c-format +msgid "ambiguous register group name '%s'" +msgstr "" + +#: tui/tui-regs.c:587 +#, possible-c-format +msgid "unknown register group '%s'" +msgstr "" + +#: tui/tui-regs.c:596 +msgid "" +"\"tui reg\" must be followed by the name of either a register group,\n" +"or one of 'next' or 'prev'. Known register groups are:\n" +msgstr "" + +#: tui/tui-regs.c:636 +msgid "" +"TUI command to control the register window.\n" +"Usage: tui reg NAME\n" +"NAME is the name of the register group to display" +msgstr "" + +#: tui/tui-disasm.h:48 msgid "[ No Assembly Available ]" msgstr "" -#: tui/tui-io.c:877 -msgid "Cannot create pipe for readline" +#: tui/tui-interp.c:297 +msgid "tui_exec called" msgstr "" -#: tui/tui-io.c:881 -msgid "Cannot redirect readline output" +#: tui/tui.c:379 +#, possible-c-format +msgid "Cannot enable the TUI when the interpreter is '%s'" +msgstr "" + +#: tui/tui.c:384 +msgid "Cannot enable the TUI when output is not a terminal" +msgstr "" + +#: tui/tui.c:395 +#, possible-c-format +msgid "Cannot enable the TUI: error opening terminal [TERM=%s]" +msgstr "" + +#: tui/tui.c:417 +#, possible-c-format +msgid "" +"Cannot enable the TUI: terminal doesn't support cursor addressing [TERM=%s]" msgstr "" -#: tui/tui-stack.c:386 +#: tui/tui.c:574 msgid "" -"Update the source window and locator to display the current execution point." +"Enable TUI display mode.\n" +"Usage: tui enable" msgstr "" -#: typeprint.c:377 -msgid "Language not supported." +#: tui/tui.c:578 +msgid "" +"Disable TUI display mode.\n" +"Usage: tui disable" msgstr "" -#: typeprint.c:420 +#: typeprint.c:411 msgid "<unknown return type>" msgstr "" -#: typeprint.c:428 +#: typeprint.c:419 #, possible-c-format msgid "'%s' has unknown type; cast it to its declared type" msgstr "" -#: typeprint.c:488 +#: typeprint.c:479 #, possible-c-format msgid "unrecognized flag '%c'" msgstr "" -#: typeprint.c:494 +#: typeprint.c:485 msgid "flag expected" msgstr "" -#: typeprint.c:496 +#: typeprint.c:487 msgid "expected space after format" msgstr "" -#: typeprint.c:673 +#: typeprint.c:664 msgid "internal error: unhandled type in print_type_scalar" msgstr "" -#: typeprint.c:745 +#: typeprint.c:722 #, possible-c-format msgid "Printing of methods defined in a class in %s\n" msgstr "" -#: typeprint.c:762 +#: typeprint.c:739 #, possible-c-format msgid "Printing of typedefs defined in a class in %s\n" msgstr "" -#: typeprint.c:791 +#: typeprint.c:768 msgid "Will not print nested types defined in a class\n" msgstr "" -#: typeprint.c:796 +#: typeprint.c:773 #, possible-c-format msgid "Will print %s nested types defined in a class\n" msgstr "" -#: typeprint.c:806 +#: typeprint.c:784 msgid "" "Print definition of type TYPE.\n" "Usage: ptype[/FLAGS] TYPE | EXPRESSION\n" @@ -32522,51 +32529,51 @@ " /o print offsets and sizes of fields in a struct (like pahole)" msgstr "" -#: typeprint.c:825 +#: typeprint.c:803 msgid "" "Print data type of expression EXP.\n" "Only one level of typedefs is unrolled. See also \"ptype\"." msgstr "" -#: typeprint.c:830 +#: typeprint.c:808 msgid "Generic command for showing type-printing settings." msgstr "" -#: typeprint.c:833 +#: typeprint.c:812 msgid "Generic command for setting how types print." msgstr "" -#: typeprint.c:837 +#: typeprint.c:817 msgid "Set printing of methods defined in classes." msgstr "" -#: typeprint.c:838 +#: typeprint.c:818 msgid "Show printing of methods defined in classes." msgstr "" -#: typeprint.c:844 +#: typeprint.c:824 msgid "Set printing of typedefs defined in classes." msgstr "" -#: typeprint.c:845 +#: typeprint.c:825 msgid "Show printing of typedefs defined in classes." msgstr "" -#: typeprint.c:853 +#: typeprint.c:833 msgid "" "Set the number of recursive nested type definitions to print (\"unlimited\" " "or -1 to show all)." msgstr "" -#: typeprint.c:855 +#: typeprint.c:835 msgid "Show the number of recursive nested type definitions to print." msgstr "" -#: typeprint.c:867 +#: typeprint.c:847 msgid "<not allocated>" msgstr "" -#: typeprint.c:875 +#: typeprint.c:855 msgid "<not associated>" msgstr "" @@ -32638,8 +32645,11 @@ msgid "ui-out internal error in handling headers." msgstr "" -#: unittests/environ-selftests.c:273 -msgid "Could not set environment variable for testing." +#: unittests/lookup_name_info-selftests.c:44 +#, possible-c-format +msgid "" +"%s:%d: make-paramless self-test failed: (completion=%d, lang=%d) \"%s\" -> " +"\"%s\", expected \"%s\"" msgstr "" #: unittests/copy_bitwise-selftests.c:87 @@ -32647,32 +32657,29 @@ msgid "copy_bitwise %s != %s (%u+%u -> %u)" msgstr "" -#: unittests/lookup_name_info-selftests.c:44 -#, possible-c-format -msgid "" -"%s:%d: make-paramless self-test failed: (completion=%d, lang=%d) \"%s\" -> " -"\"%s\", expected \"%s\"" +#: unittests/environ-selftests.c:273 +msgid "Could not set environment variable for testing." msgstr "" #: unittests/vec-utils-selftests.c:53 msgid "detected self move assign" msgstr "" -#: user-regs.c:243 +#: user-regs.c:239 msgid "List the names of the current user registers." msgstr "" -#: utils.c:114 +#: utils.c:115 #, possible-c-format msgid "Printing of 8-bit characters in strings as \\nnn is %s.\n" msgstr "" -#: utils.c:128 +#: utils.c:129 #, possible-c-format msgid "State of pagination is %s.\n" msgstr "" -#: utils.c:243 +#: utils.c:244 #, possible-c-format msgid "" "%s\n" @@ -32680,20 +32687,20 @@ "time.\n" msgstr "" -#: utils.c:372 +#: utils.c:373 #, possible-c-format msgid "" "%s\n" "Quit this debugging session? " msgstr "" -#: utils.c:382 +#: utils.c:383 msgid "" "\n" "This is a bug, please report it." msgstr "" -#: utils.c:384 +#: utils.c:385 #, possible-c-format msgid "" " For instructions, see:\n" @@ -32703,69 +32710,69 @@ #. Default (yes/batch case) is to dump core. This leaves a GDB #. `dropping' so that it is easier to see that something went #. wrong in GDB. -#: utils.c:399 +#: utils.c:400 #, possible-c-format msgid "" "%s\n" "Create a core file of GDB? " msgstr "" -#: utils.c:512 +#: utils.c:501 #, possible-c-format msgid "Configure what GDB does when %s is detected." msgstr "" -#: utils.c:515 +#: utils.c:504 #, possible-c-format msgid "Show what GDB does when %s is detected." msgstr "" -#: utils.c:534 +#: utils.c:521 #, possible-c-format msgid "Set whether GDB should quit when an %s is detected." msgstr "" -#: utils.c:537 +#: utils.c:524 #, possible-c-format msgid "Show whether GDB will quit when an %s is detected." msgstr "" -#: utils.c:557 +#: utils.c:544 #, possible-c-format msgid "Set whether GDB should create a core file of GDB when %s is detected." msgstr "" -#: utils.c:560 +#: utils.c:547 #, possible-c-format msgid "Show whether GDB will create a core file of GDB when %s is detected." msgstr "" -#: utils.c:685 +#: utils.c:672 #, possible-c-format msgid "virtual memory exhausted: can't allocate %ld bytes." msgstr "" -#: utils.c:690 +#: utils.c:677 msgid "virtual memory exhausted." msgstr "" -#: utils.c:834 +#: utils.c:830 #, possible-c-format msgid "(%s or %s) [answered %c; input not from terminal]\n" msgstr "" -#: utils.c:850 +#: utils.c:846 #, possible-c-format msgid "%s%s(%s or %s) %s" msgstr "" #. Invalid entries are not defaulted and require another selection. -#: utils.c:898 +#: utils.c:894 #, possible-c-format msgid "Please answer %s or %s.\n" msgstr "" -#: utils.c:1074 +#: utils.c:1070 #, possible-c-format msgid "" "The escape sequence `\\%c' is equivalent to plain `%c', which has no " @@ -32773,101 +32780,101 @@ "in the `%s' character set." msgstr "" -#: utils.c:1185 +#: utils.c:1181 #, possible-c-format msgid "Number of lines gdb thinks are in a page is %s.\n" msgstr "" -#: utils.c:1196 +#: utils.c:1192 #, possible-c-format msgid "Number of characters gdb thinks are in a line is %s.\n" msgstr "" -#: utils.c:2834 +#: utils.c:2836 #, possible-c-format msgid "Timestamping debugging messages is %s.\n" msgstr "" -#: utils.c:2938 +#: utils.c:2940 #, possible-c-format msgid "invalid hex \"%s\"" msgstr "" -#: utils.c:2951 +#: utils.c:2953 #, possible-c-format msgid "invalid decimal \"%s\"" msgstr "" -#: utils.c:3095 +#: utils.c:3119 msgid "process-id to attach" msgstr "" -#: utils.c:3101 +#: utils.c:3125 #, possible-c-format msgid "Illegal process-id: %s." msgstr "" -#: utils.c:3439 +#: utils.c:3464 msgid "Set number of characters where GDB should wrap lines of its output." msgstr "" -#: utils.c:3440 +#: utils.c:3465 msgid "Show number of characters where GDB should wrap lines of its output." msgstr "" -#: utils.c:3441 +#: utils.c:3466 msgid "" "This affects where GDB wraps its output to fit the screen width.\n" "Setting this to \"unlimited\" or zero prevents GDB from wrapping its output." msgstr "" -#: utils.c:3448 +#: utils.c:3473 msgid "Set number of lines in a page for GDB output pagination." msgstr "" -#: utils.c:3449 +#: utils.c:3474 msgid "Show number of lines in a page for GDB output pagination." msgstr "" -#: utils.c:3450 +#: utils.c:3475 msgid "" "This affects the number of lines after which GDB will pause\n" "its output and ask you whether to continue.\n" "Setting this to \"unlimited\" or zero causes GDB never pause during output." msgstr "" -#: utils.c:3459 +#: utils.c:3484 msgid "Set state of GDB output pagination." msgstr "" -#: utils.c:3460 +#: utils.c:3485 msgid "Show state of GDB output pagination." msgstr "" -#: utils.c:3461 +#: utils.c:3486 msgid "" "When pagination is ON, GDB pauses at end of each screenful of\n" "its output and asks you whether to continue.\n" "Turning pagination off is an alternative to \"set height unlimited\"." msgstr "" -#: utils.c:3470 +#: utils.c:3495 msgid "Set printing of 8-bit characters in strings as \\nnn." msgstr "" -#: utils.c:3471 +#: utils.c:3496 msgid "Show printing of 8-bit characters in strings as \\nnn." msgstr "" -#: utils.c:3478 +#: utils.c:3503 msgid "Set timestamping of debugging messages." msgstr "" -#: utils.c:3479 +#: utils.c:3504 msgid "Show timestamping of debugging messages." msgstr "" -#: utils.c:3480 +#: utils.c:3505 msgid "" "When set, debugging messages will be marked with seconds and microseconds." msgstr "" @@ -32895,142 +32902,142 @@ msgid "Type size unknown, assuming 1. Try casting to a known type, or void *." msgstr "" -#: valarith.c:166 +#: valarith.c:174 msgid "array or string index out of range" msgstr "" -#: valarith.c:178 +#: valarith.c:186 msgid "not an array or string" msgstr "" -#: valarith.c:211 +#: valarith.c:220 msgid "no such vector element (vector not associated)" msgstr "" -#: valarith.c:213 +#: valarith.c:222 msgid "no such vector element (vector not allocated)" msgstr "" -#: valarith.c:215 +#: valarith.c:224 msgid "no such vector element" msgstr "" -#: valarith.c:320 +#: valarith.c:329 #, possible-c-format msgid "Could not find %s." msgstr "" -#: valarith.c:368 +#: valarith.c:377 msgid "Can't do that binary op on that type" msgstr "" -#: valarith.c:455 valarith.c:481 +#: valarith.c:464 valarith.c:490 msgid "Invalid binary operation specified." msgstr "" -#: valarith.c:521 valarith.c:635 +#: valarith.c:530 valarith.c:644 #, possible-c-format msgid "member function %s not found" msgstr "" -#: valarith.c:544 +#: valarith.c:553 msgid "Can't do that unary op on that type" msgstr "" -#: valarith.c:595 +#: valarith.c:604 msgid "Invalid unary operation specified." msgstr "" -#: valarith.c:730 +#: valarith.c:739 msgid "unimplemented support for boolean repeats" msgstr "" -#: valarith.c:734 +#: valarith.c:743 msgid "can't repeat values of that type" msgstr "" -#: valarith.c:744 +#: valarith.c:753 msgid "Strings can only be concatenated with other strings." msgstr "" -#: valarith.c:777 +#: valarith.c:786 msgid "Booleans can only be concatenated with other bitstrings or booleans." msgstr "" -#: valarith.c:780 +#: valarith.c:789 msgid "unimplemented support for boolean concatenation." msgstr "" #. We don't know how to concatenate these operands. -#: valarith.c:785 +#: valarith.c:794 msgid "illegal operands for concatenation." msgstr "" -#: valarith.c:799 valarith.c:830 +#: valarith.c:808 valarith.c:839 msgid "Attempt to raise 0 to negative power." msgstr "" #. The DFP extension to the C language does not allow mixing of #. * decimal float types with other float types in expressions #. * (see WDTR 24732, page 12). -#: valarith.c:872 +#: valarith.c:881 msgid "Mixing decimal floating types with other floating types is not allowed." msgstr "" -#: valarith.c:891 valarith.c:910 +#: valarith.c:900 valarith.c:919 #, possible-c-format msgid "Don't know how to convert from %s to %s." msgstr "" -#: valarith.c:994 -msgid "Invalid operation on booleans." +#: valarith.c:1068 valarith.c:1290 valarith.c:1419 +msgid "Invalid binary operation on numbers." msgstr "" -#: valarith.c:1054 valarith.c:1065 valarith.c:1179 valarith.c:1190 -msgid "Division by zero" +#: valarith.c:1148 +msgid "Invalid operation on booleans." msgstr "" -#: valarith.c:1144 valarith.c:1273 -msgid "Invalid binary operation on numbers." +#: valarith.c:1200 valarith.c:1211 valarith.c:1325 valarith.c:1336 +msgid "Division by zero" msgstr "" -#: valarith.c:1319 +#: valarith.c:1465 msgid "conversion of scalar to vector involves truncation" msgstr "" -#: valarith.c:1350 +#: valarith.c:1496 msgid "Vector operations are only supported among vectors" msgstr "" -#: valarith.c:1543 +#: valarith.c:1689 msgid "Invalid type combination in equality test." msgstr "" -#: valarith.c:1616 +#: valarith.c:1762 msgid "Invalid type combination in ordering comparison." msgstr "" -#: valarith.c:1635 +#: valarith.c:1782 msgid "Argument to positive operation not a number." msgstr "" -#: valarith.c:1667 +#: valarith.c:1823 msgid "Argument to negate operation not a number." msgstr "" -#: valarith.c:1700 +#: valarith.c:1866 msgid "Argument to complement operation not an integer, boolean." msgstr "" -#: valarith.c:1741 +#: valarith.c:1907 msgid "Second argument of 'IN' has wrong type" msgstr "" -#: valarith.c:1746 +#: valarith.c:1912 msgid "First argument of 'IN' has wrong type" msgstr "" -#: valarith.c:1750 +#: valarith.c:1916 msgid "First argument of 'IN' not in range" msgstr "" @@ -33166,74 +33173,69 @@ msgid "Can't take address of \"%s\" which isn't an lvalue." msgstr "" -#: valops.c:1606 +#: valops.c:1610 #, possible-c-format msgid "bad array bounds (%d, %d)" msgstr "" -#: valops.c:1614 +#: valops.c:1618 msgid "array elements must all be the same size" msgstr "" -#: valops.c:1702 +#: valops.c:1706 msgid "typecmp: no argument list" msgstr "" -#: valops.c:1780 +#: valops.c:1784 #, possible-c-format msgid "base class '%s' is ambiguous in type '%s'" msgstr "" -#: valops.c:1911 valops.c:2052 +#: valops.c:1915 valops.c:2056 msgid "virtual baseclass botch" msgstr "" -#: valops.c:1997 +#: valops.c:2001 #, possible-c-format msgid "cannot resolve overloaded method `%s': no arguments supplied" msgstr "" -#: valops.c:2133 valops.c:2219 +#: valops.c:2137 valops.c:2223 #, possible-c-format msgid "Attempt to extract a component of a value that is not a %s." msgstr "" -#: valops.c:2156 +#: valops.c:2160 #, possible-c-format msgid "Cannot take address of method %s." msgstr "" -#: valops.c:2160 +#: valops.c:2164 #, possible-c-format msgid "There is no member or method named %s." msgstr "" -#: valops.c:2172 +#: valops.c:2176 #, possible-c-format msgid "" "One of the arguments you tried to pass to %s could not be converted to what " "the function wants." msgstr "" -#: valops.c:2189 +#: valops.c:2193 #, possible-c-format msgid "Structure has no component named %s." msgstr "" -#: valops.c:2230 +#: valops.c:2234 msgid "No field with matching bitpos and type." msgstr "" -#: valops.c:2275 -#, possible-c-format -msgid "Could not find variant corresponding to discriminant %s" -msgstr "" - -#: valops.c:2417 +#: valops.c:2377 msgid "Attempt to extract a component of a value that is not a struct or union" msgstr "" -#: valops.c:2547 +#: valops.c:2507 #, possible-c-format msgid "Couldn't find method %s%s%s" msgstr "" @@ -33242,335 +33244,335 @@ #. FIXME: GDB does not support the general ambiguous case. #. All candidates should be collected and presented the #. user. -#: valops.c:2714 +#: valops.c:2674 msgid "Ambiguous overload resolution" msgstr "" #. Incomparable top contenders. #. This is an error incompatible candidates #. should not have been proposed. -#: valops.c:2719 +#: valops.c:2679 msgid "Internal error: incompatible overload candidates proposed" msgstr "" -#: valops.c:2731 +#: valops.c:2691 msgid "Internal error: unexpected overload comparison result" msgstr "" -#: valops.c:2747 +#: valops.c:2707 #, possible-c-format msgid "Cannot resolve method %s%s%s to any overloaded instance" msgstr "" -#: valops.c:2752 +#: valops.c:2712 #, possible-c-format msgid "Cannot resolve function %s to any overloaded instance" msgstr "" -#: valops.c:2758 +#: valops.c:2718 #, possible-c-format msgid "" "Using non-standard conversion to match method %s%s%s to supplied arguments" msgstr "" -#: valops.c:2764 +#: valops.c:2724 #, possible-c-format msgid "" "Using non-standard conversion to match function %s to supplied arguments" msgstr "" -#: valops.c:3148 +#: valops.c:3107 msgid "name of destructor must equal name of class" msgstr "" -#: valops.c:3187 +#: valops.c:3146 #, possible-c-format msgid "no constant named \"%s\" in enum \"%s\"" msgstr "" -#: valops.c:3218 +#: valops.c:3177 msgid "non-aggregate type in value_aggregate_elt" msgstr "" -#: valops.c:3337 +#: valops.c:3296 msgid "Internal error: non-aggregate type to value_struct_elt_for_reference" msgstr "" -#: valops.c:3445 +#: valops.c:3404 msgid "no member function matches that type instantiation" msgstr "" -#: valops.c:3471 +#: valops.c:3430 #, possible-c-format msgid "non-unique member `%s' requires type instantiation" msgstr "" -#: valops.c:3478 +#: valops.c:3437 msgid "no matching member function" msgstr "" -#: valops.c:3509 +#: valops.c:3468 #, possible-c-format msgid "Cannot reference virtual member function \"%s\"" msgstr "" -#: valops.c:3663 +#: valops.c:3622 msgid "Unexpected value type." msgstr "" -#: valops.c:3729 +#: valops.c:3688 #, possible-c-format msgid "" "Couldn't retrieve complete object of RTTI type %s; object may be in " "register(s)." msgstr "" -#: valops.c:3761 +#: valops.c:3720 msgid "no `this' in current language" msgstr "" -#: valops.c:3769 +#: valops.c:3728 #, possible-c-format msgid "current stack frame does not contain a variable named `%s'" msgstr "" -#: valops.c:3812 +#: valops.c:3771 msgid "array not allocated" msgstr "" -#: valops.c:3814 +#: valops.c:3773 msgid "array not associated" msgstr "" -#: valops.c:3818 +#: valops.c:3777 msgid "slice from bad array or bitstring" msgstr "" -#: valops.c:3822 +#: valops.c:3781 msgid "slice out of range" msgstr "" -#: valops.c:3909 +#: valops.c:3889 msgid "cannot cast non-number to complex" msgstr "" -#: valops.c:3916 +#: valops.c:3897 msgid "Set overload resolution in evaluating C++ functions." msgstr "" -#: valops.c:3917 +#: valops.c:3898 msgid "Show overload resolution in evaluating C++ functions." msgstr "" -#: valprint.c:152 +#: valprint.c:154 #, possible-c-format msgid "Limit on string chars or array elements to print is %s.\n" msgstr "" -#: valprint.c:166 +#: valprint.c:168 #, possible-c-format msgid "Default input radix for entering numbers is %s.\n" msgstr "" -#: valprint.c:176 +#: valprint.c:178 #, possible-c-format msgid "Default output radix for printing of values is %s.\n" msgstr "" -#: valprint.c:187 +#: valprint.c:189 #, possible-c-format msgid "Printing of array indexes is %s.\n" msgstr "" -#: valprint.c:198 +#: valprint.c:200 #, possible-c-format msgid "Threshold for repeated print elements is %s.\n" msgstr "" -#: valprint.c:209 +#: valprint.c:211 #, possible-c-format msgid "Printing of char arrays to stop at first null char is %s.\n" msgstr "" -#: valprint.c:220 +#: valprint.c:222 #, possible-c-format msgid "Pretty formatting of structures is %s.\n" msgstr "" -#: valprint.c:229 +#: valprint.c:231 #, possible-c-format msgid "Pretty formatting of arrays is %s.\n" msgstr "" -#: valprint.c:240 +#: valprint.c:242 #, possible-c-format msgid "Printing of unions interior to structures is %s.\n" msgstr "" -#: valprint.c:250 +#: valprint.c:252 #, possible-c-format msgid "Printing of addresses is %s.\n" msgstr "" -#: valprint.c:258 +#: valprint.c:260 #, possible-c-format msgid "Printing of symbols when printing pointers is %s.\n" msgstr "" -#: valprint.c:374 +#: valprint.c:376 msgid "<optimized out>" msgstr "" -#: valprint.c:380 +#: valprint.c:382 msgid "<not saved>" msgstr "" -#: valprint.c:392 +#: valprint.c:394 msgid "<invalid address>" msgstr "" -#: valprint.c:1005 +#: valprint.c:921 #, possible-c-format msgid "Unhandled type code %d in symbol table." msgstr "" -#: valprint.c:1122 +#: valprint.c:1019 msgid "<address of value unknown>" msgstr "" -#: valprint.c:1147 +#: valprint.c:1044 #, possible-c-format msgid "<internal function %s>" msgstr "" -#: valprint.c:1389 +#: valprint.c:1286 msgid "Value out of range." msgstr "" -#: valprint.c:1577 valprint.c:1627 +#: valprint.c:1474 valprint.c:1524 msgid "Internal error in octal conversion;" msgstr "" -#: valprint.c:2640 +#: valprint.c:2506 #, possible-c-format msgid " <repeats %u times>" msgstr "" -#: valprint.c:2900 +#: valprint.c:2766 #, possible-c-format msgid "<error: %ps>" msgstr "" -#: valprint.c:2914 +#: valprint.c:2780 #, possible-c-format msgid "Maximum print depth is %s.\n" msgstr "" -#: valprint.c:2947 +#: valprint.c:2813 #, possible-c-format msgid "Nonsense input radix ``decimal %u''; input radix unchanged." msgstr "" -#: valprint.c:2953 +#: valprint.c:2819 #, possible-c-format msgid "Input radix now set to decimal %u, hex %x, octal %o.\n" msgstr "" -#: valprint.c:2989 +#: valprint.c:2855 #, possible-c-format msgid "Unsupported output radix ``decimal %u''; output radix unchanged." msgstr "" -#: valprint.c:2996 +#: valprint.c:2862 #, possible-c-format msgid "Output radix now set to decimal %u, hex %x, octal %o.\n" msgstr "" -#: valprint.c:3020 +#: valprint.c:2886 #, possible-c-format msgid "Input and output radices now set to decimal %u, hex %x, octal %o.\n" msgstr "" -#: valprint.c:3035 +#: valprint.c:2901 #, possible-c-format msgid "Input and output radices set to decimal %u, hex %x, octal %o.\n" msgstr "" -#: valprint.c:3041 +#: valprint.c:2907 #, possible-c-format msgid "Input radix set to decimal %u, hex %x, octal %o.\n" msgstr "" -#: valprint.c:3044 +#: valprint.c:2910 #, possible-c-format msgid "Output radix set to decimal %u, hex %x, octal %o.\n" msgstr "" -#: valprint.c:3085 +#: valprint.c:2923 #, possible-c-format msgid "Printing of C++ virtual function tables is %s.\n" msgstr "" -#: valprint.c:3097 +#: valprint.c:2935 #, possible-c-format msgid "Printing of object's derived type based on vtable info is %s.\n" msgstr "" -#: valprint.c:3108 +#: valprint.c:2946 #, possible-c-format msgid "Printing of C++ static members is %s.\n" msgstr "" #. show_cmd_cb -#: valprint.c:3131 +#: valprint.c:2969 msgid "Set printing of addresses." msgstr "" -#: valprint.c:3132 +#: valprint.c:2970 msgid "Show printing of addresses." msgstr "" #. show_cmd_cb -#: valprint.c:3140 +#: valprint.c:2978 msgid "Set pretty formatting of arrays." msgstr "" -#: valprint.c:3141 +#: valprint.c:2979 msgid "Show pretty formatting of arrays." msgstr "" #. show_cmd_cb -#: valprint.c:3149 +#: valprint.c:2987 msgid "Set printing of array indexes." msgstr "" -#: valprint.c:3150 +#: valprint.c:2988 msgid "Show printing of array indexes." msgstr "" #. show_cmd_cb -#: valprint.c:3158 +#: valprint.c:2996 msgid "Set limit on string chars or array elements to print." msgstr "" -#: valprint.c:3159 +#: valprint.c:2997 msgid "Show limit on string chars or array elements to print." msgstr "" -#: valprint.c:3160 +#: valprint.c:2998 msgid "\"unlimited\" causes there to be no limit." msgstr "" #. show_cmd_cb -#: valprint.c:3167 +#: valprint.c:3005 msgid "Set maximum print depth for nested structures, unions and arrays." msgstr "" -#: valprint.c:3168 +#: valprint.c:3006 msgid "Show maximum print depth for nested structures, unions, and arrays." msgstr "" -#: valprint.c:3169 +#: valprint.c:3007 msgid "" "When structures, unions, or arrays are nested beyond this depth then they\n" "will be replaced with either '{...}' or '(...)' depending on the language.\n" @@ -33578,116 +33580,116 @@ msgstr "" #. show_cmd_cb -#: valprint.c:3178 +#: valprint.c:3016 msgid "Set printing of char arrays to stop at first null char." msgstr "" -#: valprint.c:3179 +#: valprint.c:3017 msgid "Show printing of char arrays to stop at first null char." msgstr "" #. show_cmd_cb -#: valprint.c:3187 valprint.c:3251 +#: valprint.c:3025 valprint.c:3089 msgid "Set printing of C++ virtual function tables." msgstr "" -#: valprint.c:3188 valprint.c:3252 +#: valprint.c:3026 valprint.c:3090 msgid "Show printing of C++ virtual function tables." msgstr "" #. show_cmd_cb -#: valprint.c:3196 +#: valprint.c:3034 msgid "Set pretty formatting of structures." msgstr "" -#: valprint.c:3197 +#: valprint.c:3035 msgid "Show pretty formatting of structures." msgstr "" #. show_cmd_cb -#: valprint.c:3205 +#: valprint.c:3043 msgid "Set whether to print values in raw form." msgstr "" -#: valprint.c:3206 +#: valprint.c:3044 msgid "Show whether to print values in raw form." msgstr "" -#: valprint.c:3207 +#: valprint.c:3045 msgid "" "If set, values are printed in raw form, bypassing any\n" "pretty-printers for that value." msgstr "" #. show_cmd_cb -#: valprint.c:3215 +#: valprint.c:3053 msgid "Set threshold for repeated print elements." msgstr "" -#: valprint.c:3216 +#: valprint.c:3054 msgid "Show threshold for repeated print elements." msgstr "" -#: valprint.c:3217 +#: valprint.c:3055 msgid "\"unlimited\" causes all elements to be individually printed." msgstr "" #. show_cmd_cb -#: valprint.c:3224 +#: valprint.c:3062 msgid "Set printing of C++ static members." msgstr "" -#: valprint.c:3225 +#: valprint.c:3063 msgid "Show printing of C++ static members." msgstr "" #. show_cmd_cb -#: valprint.c:3233 +#: valprint.c:3071 msgid "Set printing of symbol names when printing pointers." msgstr "" -#: valprint.c:3234 +#: valprint.c:3072 msgid "Show printing of symbol names when printing pointers." msgstr "" #. show_cmd_cb -#: valprint.c:3242 +#: valprint.c:3080 msgid "Set printing of unions interior to structures." msgstr "" -#: valprint.c:3243 +#: valprint.c:3081 msgid "Show printing of unions interior to structures." msgstr "" -#: valprint.c:3271 +#: valprint.c:3110 msgid "Generic command for setting how things print." msgstr "" -#: valprint.c:3278 +#: valprint.c:3117 msgid "Generic command for showing print settings." msgstr "" -#: valprint.c:3284 +#: valprint.c:3123 msgid "Generic command for setting what things to print in \"raw\" mode." msgstr "" -#: valprint.c:3291 +#: valprint.c:3130 msgid "Generic command for showing \"print raw\" settings." msgstr "" -#: valprint.c:3301 +#: valprint.c:3140 msgid "Set default input radix for entering numbers." msgstr "" -#: valprint.c:3302 +#: valprint.c:3141 msgid "Show default input radix for entering numbers." msgstr "" -#: valprint.c:3309 +#: valprint.c:3148 msgid "Set default output radix for printing of values." msgstr "" -#: valprint.c:3310 +#: valprint.c:3149 msgid "Show default output radix for printing of values." msgstr "" @@ -33698,14 +33700,14 @@ #. add_show_from_set() commands aren't really appropriate. #. FIXME: i18n: With the new add_setshow_integer command, that is no #. longer true - show can display anything. -#: valprint.c:3323 +#: valprint.c:3162 msgid "" "Set default input and output number radices.\n" "Use 'set input-radix' or 'set output-radix' to independently set each.\n" "Without an argument, sets both radices back to the default value of 10." msgstr "" -#: valprint.c:3328 +#: valprint.c:3167 msgid "" "Show the default input and output number radices.\n" "Use 'show input-radix' or 'show output-radix' to independently show each." @@ -33727,54 +33729,54 @@ #: value.c:1005 #, possible-c-format -msgid "value of type `%s' requires %u bytes, which is more than max-value-size" +msgid "value of type `%s' requires %s bytes, which is more than max-value-size" msgstr "" #: value.c:1008 #, possible-c-format -msgid "value requires %u bytes, which is more than max-value-size" +msgid "value requires %s bytes, which is more than max-value-size" msgstr "" #: value.c:1218 msgid "register has not been saved in frame" msgstr "" -#: value.c:1818 +#: value.c:1829 msgid "The history is empty." msgstr "" -#: value.c:1820 +#: value.c:1831 msgid "There is only one value in the history." msgstr "" -#: value.c:1822 +#: value.c:1833 #, possible-c-format msgid "History does not go back to $$%d." msgstr "" -#: value.c:1825 +#: value.c:1836 #, possible-c-format msgid "History has not yet reached $%d." msgstr "" -#: value.c:1971 +#: value.c:1982 msgid "Init-if-undefined requires an assignment expression." msgstr "" -#: value.c:1976 +#: value.c:1987 msgid "The first parameter to init-if-undefined should be a GDB variable." msgstr "" -#: value.c:2149 +#: value.c:2160 msgid "bad kind" msgstr "" #. We can never get a component of any other kind. -#: value.c:2243 +#: value.c:2254 msgid "set_internalvar_component" msgstr "" -#: value.c:2254 +#: value.c:2265 #, possible-c-format msgid "Cannot overwrite convenience function %s" msgstr "" @@ -33783,67 +33785,67 @@ #. The user can't create them except via Python, and if Python support #. is installed this message will never be printed ($_streq will #. exist). -#: value.c:2565 +#: value.c:2576 msgid "" "No debugger convenience variables now defined.\n" "Convenience variables have names starting with \"$\";\n" "use \"set\" as in \"set $foo = 5\" to define them.\n" msgstr "" -#: value.c:2789 +#: value.c:2800 msgid "Value can't be converted to integer." msgstr "" -#: value.c:2822 +#: value.c:2833 msgid "Invalid floating value found in program." msgstr "" #. FIXME: would like to include fieldval in the message, but #. we don't have a sprintf_longest. -#: value.c:3301 +#: value.c:3298 #, possible-c-format msgid "Value does not fit in %s bits." msgstr "" -#: value.c:3360 +#: value.c:3357 #, possible-c-format msgid "Unexpected type (%d) encountered for integer constant." msgstr "" -#: value.c:3402 +#: value.c:3399 #, possible-c-format msgid "Unexpected type (%d) encountered for unsigned integer constant." msgstr "" -#: value.c:3702 +#: value.c:3711 msgid "Function return type unknown." msgstr "" -#: value.c:3833 +#: value.c:3842 msgid "infinite loop while fetching a register" msgstr "" -#: value.c:3928 +#: value.c:3937 msgid "Unexpected lazy value type." msgstr "" -#: value.c:3943 +#: value.c:3952 msgid "You must provide one argument for $_isvoid." msgstr "" -#: value.c:3959 +#: value.c:3968 msgid "You must provide one argument for $_creal." msgstr "" -#: value.c:3964 value.c:3983 +#: value.c:3973 value.c:3992 msgid "expected a complex number" msgstr "" -#: value.c:3978 +#: value.c:3987 msgid "You must provide one argument for $_cimag." msgstr "" -#: value.c:4133 +#: value.c:4142 msgid "" "Debugger convenience (\"$foo\") variables and functions.\n" "Convenience variables are created when you assign them values;\n" @@ -33856,11 +33858,11 @@ "Convenience functions are defined via the Python API." msgstr "" -#: value.c:4148 +#: value.c:4157 msgid "Elements of value history around item number IDX (or last ten)." msgstr "" -#: value.c:4152 +#: value.c:4161 msgid "" "Initialize a convenience variable if necessary.\n" "init-if-undefined VARIABLE = EXPRESSION\n" @@ -33869,18 +33871,18 @@ "VARIABLE is already initialized." msgstr "" -#: value.c:4159 +#: value.c:4168 msgid "Placeholder command for showing help on convenience functions." msgstr "" -#: value.c:4163 +#: value.c:4172 msgid "" "Check whether an expression is void.\n" "Usage: $_isvoid (expression)\n" "Return 1 if the expression is void, zero otherwise." msgstr "" -#: value.c:4169 +#: value.c:4178 msgid "" "Extract the real part of a complex number.\n" "Usage: $_creal (expression)\n" @@ -33888,7 +33890,7 @@ "type of a complex number." msgstr "" -#: value.c:4176 +#: value.c:4185 msgid "" "Extract the imaginary part of a complex number.\n" "Usage: $_cimag (expression)\n" @@ -33896,15 +33898,15 @@ "type of a complex number." msgstr "" -#: value.c:4184 +#: value.c:4193 msgid "Set maximum sized value gdb will load from the inferior." msgstr "" -#: value.c:4185 +#: value.c:4194 msgid "Show maximum sized value gdb will load from the inferior." msgstr "" -#: value.c:4186 +#: value.c:4195 msgid "" "Use this to control the maximum size, in bytes, of a value that gdb\n" "will load from the inferior. Setting this value to 'unlimited'\n" @@ -33952,30 +33954,26 @@ msgid "Assertion failed: Could not find varobj \"%s\" in root list" msgstr "" -#: varobj.c:2530 +#: varobj.c:2531 msgid "Set varobj debugging." msgstr "" -#: varobj.c:2531 +#: varobj.c:2532 msgid "Show varobj debugging." msgstr "" -#: varobj.c:2532 +#: varobj.c:2533 msgid "When non-zero, varobj debugging is enabled." msgstr "" -#: windows-nat.c:408 -#, possible-c-format -msgid "SuspendThread (tid=0x%x) failed. (winerr %u)" -msgstr "" - -#: windows-nat.c:527 +#: windows-nat.c:537 #, possible-c-format msgid "[%s exited with code %u]\n" msgstr "" -#: windows-nat.c:758 -msgid "dll path too long" +#: windows-nat.c:828 +#, possible-c-format +msgid "dll path for \"%s\" too long or inaccessible" msgstr "" #. We did not find any DLL that was previously loaded at this address, @@ -33985,95 +33983,95 @@ #. 4 mysterious UNLOAD_DLL_DEBUG_EVENTs during the startup phase (these #. events are apparently caused by the WOW layer, the interface between #. 32bit and 64bit worlds). -#: windows-nat.c:919 +#: windows-nat.c:930 #, possible-c-format msgid "dll starting at %s not found." msgstr "" -#: windows-nat.c:954 +#: windows-nat.c:972 msgid "signal-event requires an argument (integer event id)" msgstr "" -#: windows-nat.c:960 +#: windows-nat.c:978 #, possible-c-format msgid "Failed to convert `%s' to event id" msgstr "" -#: windows-nat.c:1369 +#: windows-nat.c:1352 #, possible-c-format msgid "" "Failed to resume program execution (ContinueDebugEvent failed, error %u)" msgstr "" -#: windows-nat.c:1388 +#: windows-nat.c:1371 #, possible-c-format msgid "OpenProcess call failed, GetLastError = %u" msgstr "" -#: windows-nat.c:1510 +#: windows-nat.c:1523 msgid "Could not interrupt program. Press Ctrl-c in the program console." msgstr "" -#: windows-nat.c:1615 +#: windows-nat.c:1639 #, possible-c-format msgid "During startup program exited with code 0x%x." msgstr "" -#: windows-nat.c:1986 +#: windows-nat.c:2145 #, possible-c-format msgid "Can't attach to process %u (error %u)" msgstr "" -#: windows-nat.c:2017 +#: windows-nat.c:2187 #, possible-c-format msgid "Can't detach process %u (error %u)" msgstr "" -#: windows-nat.c:2074 windows-nat.c:2084 +#: windows-nat.c:2256 windows-nat.c:2266 #, possible-c-format msgid "Error getting executable filename: %u." msgstr "" -#: windows-nat.c:2078 +#: windows-nat.c:2260 #, possible-c-format msgid "Error converting executable filename to POSIX: %d." msgstr "" -#: windows-nat.c:2551 +#: windows-nat.c:2733 msgid "No executable specified, use `target exec'." msgstr "" -#: windows-nat.c:2579 windows-nat.c:2584 +#: windows-nat.c:2761 windows-nat.c:2766 #, possible-c-format msgid "Error starting executable: %d" msgstr "" -#: windows-nat.c:2595 +#: windows-nat.c:2777 #, possible-c-format msgid "Error starting executable via shell: %d" msgstr "" -#: windows-nat.c:2614 +#: windows-nat.c:2796 #, possible-c-format msgid "Error converting inferior cwd: %d" msgstr "" -#: windows-nat.c:2713 +#: windows-nat.c:2895 #, possible-c-format msgid "Error in redirection: %s." msgstr "" -#: windows-nat.c:2730 +#: windows-nat.c:2912 #, possible-c-format msgid "Warning: Failed to open TTY %s, error %#x." msgstr "" -#: windows-nat.c:2814 +#: windows-nat.c:2996 #, possible-c-format msgid "Error creating process %s, (error %u)." msgstr "" -#: windows-nat.c:3053 +#: windows-nat.c:3292 msgid "" "Signal a crashed process with event ID, to allow its debugging.\n" "This command is needed in support of setting up GDB as JIT debugger on MS-" @@ -34082,163 +34080,181 @@ "process will be supplied by the Windows JIT debugging mechanism." msgstr "" -#: windows-nat.c:3061 +#: windows-nat.c:3300 msgid "Set use of shell to start subprocess." msgstr "" -#: windows-nat.c:3062 +#: windows-nat.c:3301 msgid "Show use of shell to start subprocess." msgstr "" -#: windows-nat.c:3069 +#: windows-nat.c:3308 msgid "Break when an exception is detected in the Cygwin DLL itself." msgstr "" -#: windows-nat.c:3070 +#: windows-nat.c:3309 msgid "Show whether gdb breaks on exceptions in the Cygwin DLL itself." msgstr "" -#: windows-nat.c:3077 +#: windows-nat.c:3316 msgid "Set creation of new console when creating child process." msgstr "" -#: windows-nat.c:3078 +#: windows-nat.c:3317 msgid "Show creation of new console when creating child process." msgstr "" -#: windows-nat.c:3084 +#: windows-nat.c:3323 msgid "Set creation of new group when creating child process." msgstr "" -#: windows-nat.c:3085 +#: windows-nat.c:3324 msgid "Show creation of new group when creating child process." msgstr "" -#: windows-nat.c:3091 +#: windows-nat.c:3330 msgid "Set whether to display execution in child process." msgstr "" -#: windows-nat.c:3092 +#: windows-nat.c:3331 msgid "Show whether to display execution in child process." msgstr "" -#: windows-nat.c:3098 +#: windows-nat.c:3337 msgid "Set whether to display kernel events in child process." msgstr "" -#: windows-nat.c:3099 +#: windows-nat.c:3338 msgid "Show whether to display kernel events in child process." msgstr "" -#: windows-nat.c:3105 +#: windows-nat.c:3344 msgid "Set whether to display memory accesses in child process." msgstr "" -#: windows-nat.c:3106 +#: windows-nat.c:3345 msgid "Show whether to display memory accesses in child process." msgstr "" -#: windows-nat.c:3113 +#: windows-nat.c:3352 msgid "Set whether to display kernel exceptions in child process." msgstr "" -#: windows-nat.c:3114 +#: windows-nat.c:3353 msgid "Show whether to display kernel exceptions in child process." msgstr "" -#: windows-nat.c:3123 +#: windows-nat.c:3362 msgid "Display selectors infos." msgstr "" -#: windows-nat.c:3137 +#: windows-nat.c:3376 #, possible-c-format msgid "Invalid register %d in cygwin_set_dr.\n" msgstr "" -#: windows-nat.c:3221 +#: windows-nat.c:3459 #, possible-c-format msgid "obsolete '%s' found. Rename to '%s'." msgstr "" #. This will probably fail on Windows 9x/Me. Let the user know #. that we're missing some functionality. -#: windows-nat.c:3346 +#: windows-nat.c:3594 msgid "" "cannot automatically find executable file or library to read symbols.\n" "Use \"file\" or \"dll\" command to load executable/libraries directly." msgstr "" -#: windows-tdep.c:255 +#: windows-tdep.c:407 msgid "Unable to read tlb" msgstr "" -#: windows-tdep.c:265 +#: windows-tdep.c:417 msgid "Impossible to change the Thread Local Base" msgstr "" -#: windows-tdep.c:329 +#: windows-tdep.c:481 #, possible-c-format msgid "Unable to get thread local base for %s\n" msgstr "" -#: windows-tdep.c:337 +#: windows-tdep.c:489 #, possible-c-format msgid "Unable to read thread information block for %s at address %s\n" msgstr "" -#: windows-tdep.c:344 +#: windows-tdep.c:496 #, possible-c-format msgid "Thread Information Block %s at %s\n" msgstr "" -#: windows-tdep.c:356 +#: windows-tdep.c:508 #, possible-c-format msgid "%s is 0x%s\n" msgstr "" -#: windows-tdep.c:358 +#: windows-tdep.c:510 #, possible-c-format msgid "TIB[0x%s] is 0x%s\n" msgstr "" -#: windows-tdep.c:441 +#: windows-tdep.c:601 #, possible-c-format msgid "Show all non-zero elements of Thread Information Block is %s.\n" msgstr "" -#: windows-tdep.c:458 +#: windows-tdep.c:614 msgid "Print information specific to Win32 debugging." msgstr "" -#: windows-tdep.c:497 +#: windows-tdep.c:1016 +msgid "%s: import table's virtual address (0x%" +msgstr "" + +#: windows-tdep.c:1031 +#, possible-c-format +msgid "%s: failed to get contents of .idata section." +msgstr "" + +#: windows-tdep.c:1048 +#, possible-c-format +msgid "%s: unexpected end of .idata section." +msgstr "" + +#: windows-tdep.c:1066 +msgid "%s: name's virtual address (0x%" +msgstr "" + +#: windows-tdep.c:1100 msgid "Display thread information block." msgstr "" -#: windows-tdep.c:503 +#: windows-tdep.c:1106 msgid "Set whether to display all non-zero fields of thread information block." msgstr "" -#: windows-tdep.c:504 +#: windows-tdep.c:1107 msgid "" "Show whether to display all non-zero fields of thread information block." msgstr "" -#: windows-tdep.c:505 +#: windows-tdep.c:1108 msgid "" "Use \"on\" to enable, \"off\" to disable.\n" "If enabled, all non-zero fields of thread information block are displayed,\n" "even if their meaning is unknown." msgstr "" -#: x86-bsd-nat.c:62 +#: x86-bsd-nat.c:74 msgid "Couldn't read debug registers" msgstr "" -#: x86-bsd-nat.c:74 +#: x86-bsd-nat.c:85 msgid "Couldn't get debug registers" msgstr "" -#: x86-bsd-nat.c:87 +#: x86-bsd-nat.c:98 msgid "Couldn't write debug registers" msgstr "" @@ -34254,6 +34270,10 @@ msgid "Can't debug 64-bit process with 32-bit GDB" msgstr "" +#: x86-linux-nat.c:241 +msgid "Could not disable branch tracing." +msgstr "" + #: x86-nat.c:278 msgid "Set whether to show variables that mirror the x86 debug registers." msgstr "" @@ -34262,11 +34282,11 @@ msgid "Show whether to show variables that mirror the x86 debug registers." msgstr "" -#: xcoffread.c:185 +#: xcoffread.c:186 msgid "line numbers off, `.bf' symbol not found" msgstr "" -#: xcoffread.c:191 +#: xcoffread.c:192 #, possible-c-format msgid "Mismatched .ef symbol ignored starting at symnum %d" msgstr "" @@ -34276,70 +34296,70 @@ #. This can happen with old versions of GCC. #. GCC 2.3.3-930426 does not exhibit this on a test case which #. a user said produced the message for him. -#: xcoffread.c:545 +#: xcoffread.c:550 msgid "Nested C_BINCL symbols" msgstr "" -#: xcoffread.c:562 +#: xcoffread.c:567 msgid "Mismatched C_BINCL/C_EINCL pair" msgstr "" -#: xcoffread.c:845 +#: xcoffread.c:850 msgid "Bad line table offset in C_EINCL directive" msgstr "" -#: xcoffread.c:966 xcoffread.c:980 +#: xcoffread.c:971 xcoffread.c:985 msgid "Unexpected symbol continuation" msgstr "" -#: xcoffread.c:1435 +#: xcoffread.c:1437 #, possible-c-format msgid "Unrecognized storage class %d." msgstr "" -#: xcoffread.c:1619 +#: xcoffread.c:1612 #, possible-c-format msgid "Unexpected storage class: %d" msgstr "" -#: xcoffread.c:1706 +#: xcoffread.c:1698 msgid "Invalid symbol offset" msgstr "" -#: xcoffread.c:1963 +#: xcoffread.c:1911 #, possible-c-format msgid "cannot seek to string table in %s: %s" msgstr "" -#: xcoffread.c:1990 +#: xcoffread.c:1938 #, possible-c-format msgid "cannot read string table from %s: %s" msgstr "" -#: xcoffread.c:1993 +#: xcoffread.c:1941 msgid "bad symbol file: string table does not end with null character" msgstr "" -#: xcoffread.c:2340 +#: xcoffread.c:2285 msgid "More than one XMC_TC0 symbol found." msgstr "" -#: xcoffread.c:2489 +#: xcoffread.c:2434 #, possible-c-format msgid "Storage class %d not recognized during scan" msgstr "" -#: xcoffread.c:2962 +#: xcoffread.c:2903 #, possible-c-format msgid "Error reading .debug section of `%s': %s" msgstr "" -#: xcoffread.c:2975 +#: xcoffread.c:2916 #, possible-c-format msgid "Error reading symbols from %s: %s" msgstr "" -#: xcoffread.c:2983 +#: xcoffread.c:2924 msgid "reading symbol table" msgstr "" @@ -34459,11 +34479,11 @@ msgid "XML debugging is %s.\n" msgstr "" -#: xml-support.c:996 +#: xml-support.c:994 msgid "seek to end of file" msgstr "" -#: xml-support.c:1005 +#: xml-support.c:1003 #, possible-c-format msgid "Read error from \"%s\"" msgstr "" @@ -34776,15 +34796,15 @@ msgid "xtensa_dump_tdep(): not implemented" msgstr "" -#: xtensa-tdep.c:3265 +#: xtensa-tdep.c:3266 msgid "Set Xtensa debugging." msgstr "" -#: xtensa-tdep.c:3266 +#: xtensa-tdep.c:3267 msgid "Show Xtensa debugging." msgstr "" -#: xtensa-tdep.c:3266 +#: xtensa-tdep.c:3267 msgid "" "When non-zero, Xtensa-specific debugging is enabled. Can be 1, 2, 3, or 4 " "indicating the level of debugging." diff -Nru gdb-9.1/gdb/posix-hdep.c gdb-10.2/gdb/posix-hdep.c --- gdb-9.1/gdb/posix-hdep.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/posix-hdep.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Host support routines for MinGW, for GDB, the GNU debugger. - Copyright (C) 2006-2020 Free Software Foundation, Inc. + Copyright (C) 2006-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -18,9 +18,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include "defs.h" -#include "event-loop.h" +#include "gdbsupport/event-loop.h" -#include "gdb_select.h" +#include "gdbsupport/gdb_select.h" /* Wrapper for select. Nothing special needed on POSIX platforms. */ diff -Nru gdb-9.1/gdb/ppc64-tdep.c gdb-10.2/gdb/ppc64-tdep.c --- gdb-9.1/gdb/ppc64-tdep.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/ppc64-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Common target-dependent code for ppc64 GDB, the GNU debugger. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/ppc64-tdep.h gdb-10.2/gdb/ppc64-tdep.h --- gdb-9.1/gdb/ppc64-tdep.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/ppc64-tdep.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Common target-dependent code for ppc64. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/ppc-fbsd-nat.c gdb-10.2/gdb/ppc-fbsd-nat.c --- gdb-9.1/gdb/ppc-fbsd-nat.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/ppc-fbsd-nat.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Native-dependent code for PowerPC's running FreeBSD, for GDB. - Copyright (C) 2013-2020 Free Software Foundation, Inc. + Copyright (C) 2013-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -201,8 +201,9 @@ return 1; } +void _initialize_ppcfbsd_nat (); void -_initialize_ppcfbsd_nat (void) +_initialize_ppcfbsd_nat () { add_inf_child_target (&the_ppc_fbsd_nat_target); diff -Nru gdb-9.1/gdb/ppc-fbsd-tdep.c gdb-10.2/gdb/ppc-fbsd-tdep.c --- gdb-9.1/gdb/ppc-fbsd-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/ppc-fbsd-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for PowerPC systems running FreeBSD. - Copyright (C) 2013-2020 Free Software Foundation, Inc. + Copyright (C) 2013-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -35,6 +35,7 @@ #include "ppc-fbsd-tdep.h" #include "fbsd-tdep.h" #include "solib-svr4.h" +#include "inferior.h" /* 32-bit regset descriptions. */ @@ -289,7 +290,8 @@ struct regcache *regcache; int tp_offset, tp_regnum; - regcache = get_thread_arch_regcache (ptid, gdbarch); + regcache = get_thread_arch_regcache (current_inferior ()->process_target (), + ptid, gdbarch); if (tdep->wordsize == 4) { @@ -359,8 +361,9 @@ ppcfbsd_get_thread_local_address); } +void _initialize_ppcfbsd_tdep (); void -_initialize_ppcfbsd_tdep (void) +_initialize_ppcfbsd_tdep () { gdbarch_register_osabi (bfd_arch_powerpc, bfd_mach_ppc, GDB_OSABI_FREEBSD, ppcfbsd_init_abi); diff -Nru gdb-9.1/gdb/ppc-fbsd-tdep.h gdb-10.2/gdb/ppc-fbsd-tdep.h --- gdb-9.1/gdb/ppc-fbsd-tdep.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/ppc-fbsd-tdep.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for GDB on PowerPC systems running FreeBSD. - Copyright (C) 2013-2020 Free Software Foundation, Inc. + Copyright (C) 2013-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/ppc-linux-nat.c gdb-10.2/gdb/ppc-linux-nat.c --- gdb-9.1/gdb/ppc-linux-nat.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/ppc-linux-nat.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* PPC GNU/Linux native support. - Copyright (C) 1988-2020 Free Software Foundation, Inc. + Copyright (C) 1988-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -18,7 +18,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include "defs.h" -#include "observable.h" #include "frame.h" #include "inferior.h" #include "gdbthread.h" @@ -38,6 +37,9 @@ #include "nat/gdb_ptrace.h" #include "nat/linux-ptrace.h" #include "inf-ptrace.h" +#include <algorithm> +#include <unordered_map> +#include <list> /* Prototypes for supply_gregset etc. */ #include "gregset.h" @@ -136,6 +138,10 @@ #define PPC_DEBUG_FEATURE_DATA_BP_DAWR 0x10 #endif /* PPC_DEBUG_FEATURE_DATA_BP_DAWR */ +/* The version of the PowerPC HWDEBUG kernel interface that we will use, if + available. */ +#define PPC_DEBUG_CURRENT_VERSION 1 + /* Similarly for the general-purpose (gp0 -- gp31) and floating-point registers (fp0 -- fp31). */ #ifndef PTRACE_GETREGS @@ -270,6 +276,214 @@ them and gotten an error. */ int have_ptrace_getsetfpregs = 1; +/* Private arch info associated with each thread lwp_info object, used + for debug register handling. */ + +struct arch_lwp_info +{ + /* When true, indicates that the debug registers installed in the + thread no longer correspond to the watchpoints and breakpoints + requested by GDB. */ + bool debug_regs_stale; + + /* We need a back-reference to the PTID of the thread so that we can + cleanup the debug register state of the thread in + low_delete_thread. */ + ptid_t lwp_ptid; +}; + +/* Class used to detect which set of ptrace requests that + ppc_linux_nat_target will use to install and remove hardware + breakpoints and watchpoints. + + The interface is only detected once, testing the ptrace calls. The + result can indicate that no interface is available. + + The Linux kernel provides two different sets of ptrace requests to + handle hardware watchpoints and breakpoints for Power: + + - PPC_PTRACE_GETHWDBGINFO, PPC_PTRACE_SETHWDEBUG, and + PPC_PTRACE_DELHWDEBUG. + + Or + + - PTRACE_SET_DEBUGREG and PTRACE_GET_DEBUGREG + + The first set is the more flexible one and allows setting watchpoints + with a variable watched region length and, for BookE processors, + multiple types of debug registers (e.g. hardware breakpoints and + hardware-assisted conditions for watchpoints). The second one only + allows setting one debug register, a watchpoint, so we only use it if + the first one is not available. */ + +class ppc_linux_dreg_interface +{ +public: + + ppc_linux_dreg_interface () + : m_interface (), m_hwdebug_info () + { + }; + + DISABLE_COPY_AND_ASSIGN (ppc_linux_dreg_interface); + + /* One and only one of these three functions returns true, indicating + whether the corresponding interface is the one we detected. The + interface must already have been detected as a precontidion. */ + + bool hwdebug_p () + { + gdb_assert (detected_p ()); + return *m_interface == HWDEBUG; + } + + bool debugreg_p () + { + gdb_assert (detected_p ()); + return *m_interface == DEBUGREG; + } + + bool unavailable_p () + { + gdb_assert (detected_p ()); + return *m_interface == UNAVAILABLE; + } + + /* Returns the debug register capabilities of the target. Should only + be called if the interface is HWDEBUG. */ + const struct ppc_debug_info &hwdebug_info () + { + gdb_assert (hwdebug_p ()); + + return m_hwdebug_info; + } + + /* Returns true if the interface has already been detected. This is + useful for cases when we know there is no work to be done if the + interface hasn't been detected yet. */ + bool detected_p () + { + return m_interface.has_value (); + } + + /* Detect the available interface, if any, if it hasn't been detected + before, using PTID for the necessary ptrace calls. */ + + void detect (const ptid_t &ptid) + { + if (m_interface.has_value ()) + return; + + gdb_assert (ptid.lwp_p ()); + + bool no_features = false; + + if (ptrace (PPC_PTRACE_GETHWDBGINFO, ptid.lwp (), 0, &m_hwdebug_info) + >= 0) + { + /* If there are no advertised features, we don't use the + HWDEBUG interface and try the DEBUGREG interface instead. + It shouldn't be necessary to do this, however, when the + kernel is configured without CONFIG_HW_BREAKPOINTS (selected + by CONFIG_PERF_EVENTS), there is a bug that causes + watchpoints installed with the HWDEBUG interface not to + trigger. When this is the case, features will be zero, + which we use as an indicator to fall back to the DEBUGREG + interface. */ + if (m_hwdebug_info.features != 0) + { + m_interface.emplace (HWDEBUG); + return; + } + else + no_features = true; + } + + /* EIO indicates that the request is invalid, so we try DEBUGREG + next. Technically, it can also indicate other failures, but we + can't differentiate those. + + Other errors could happen for various reasons. We could get an + ESRCH if the traced thread was killed by a signal. Trying to + detect the interface with another thread in the future would be + complicated, as callers would have to handle an "unknown + interface" case. It's also unclear if raising an exception + here would be safe. + + Other errors, such as ENODEV, could be more permanent and cause + a failure for any thread. + + For simplicity, with all errors other than EIO, we set the + interface to UNAVAILABLE and don't try DEBUGREG. If DEBUGREG + fails too, we'll also set the interface to UNAVAILABLE. It's + unlikely that trying the DEBUGREG interface with this same thread + would work, for errors other than EIO. This means that these + errors will cause hardware watchpoints and breakpoints to become + unavailable throughout a GDB session. */ + + if (no_features || errno == EIO) + { + unsigned long wp; + + if (ptrace (PTRACE_GET_DEBUGREG, ptid.lwp (), 0, &wp) >= 0) + { + m_interface.emplace (DEBUGREG); + return; + } + } + + if (errno != EIO) + warning (_("Error when detecting the debug register interface. " + "Debug registers will be unavailable.")); + + m_interface.emplace (UNAVAILABLE); + return; + } + +private: + + /* HWDEBUG represents the set of calls PPC_PTRACE_GETHWDBGINFO, + PPC_PTRACE_SETHWDEBUG and PPC_PTRACE_DELHWDEBUG. + + DEBUGREG represents the set of calls PTRACE_SET_DEBUGREG and + PTRACE_GET_DEBUGREG. + + UNAVAILABLE can indicate that the kernel doesn't support any of the + two sets of requests or that there was an error when we tried to + detect wich interface is available. */ + + enum debug_reg_interface + { + UNAVAILABLE, + HWDEBUG, + DEBUGREG + }; + + /* The interface option. Initialized if has_value () returns true. */ + gdb::optional<enum debug_reg_interface> m_interface; + + /* The info returned by the kernel with PPC_PTRACE_GETHWDBGINFO. Only + valid if we determined that the interface is HWDEBUG. */ + struct ppc_debug_info m_hwdebug_info; +}; + +/* Per-process information. This includes the hardware watchpoints and + breakpoints that GDB requested to this target. */ + +struct ppc_linux_process_info +{ + /* The list of hardware watchpoints and breakpoints that GDB requested + for this process. + + Only used when the interface is HWDEBUG. */ + std::list<struct ppc_hw_breakpoint> requested_hw_bps; + + /* The watchpoint value that GDB requested for this process. + + Only used when the interface is DEBUGREG. */ + gdb::optional<long> requested_wp_val; +}; + struct ppc_linux_nat_target final : public linux_nat_target { /* Add our register access methods. */ @@ -299,10 +513,6 @@ int remove_mask_watchpoint (CORE_ADDR, CORE_ADDR, enum target_hw_bp_type) override; - bool stopped_by_watchpoint () override; - - bool stopped_data_address (CORE_ADDR *) override; - bool watchpoint_addr_within_range (CORE_ADDR, CORE_ADDR, int) override; bool can_accel_watchpoint_condition (CORE_ADDR, int, int, struct expression *) @@ -319,7 +529,95 @@ override; /* Override linux_nat_target low methods. */ + bool low_stopped_by_watchpoint () override; + + bool low_stopped_data_address (CORE_ADDR *) override; + void low_new_thread (struct lwp_info *lp) override; + + void low_delete_thread (arch_lwp_info *) override; + + void low_new_fork (struct lwp_info *, pid_t) override; + + void low_new_clone (struct lwp_info *, pid_t) override; + + void low_forget_process (pid_t pid) override; + + void low_prepare_to_resume (struct lwp_info *) override; + +private: + + void copy_thread_dreg_state (const ptid_t &parent_ptid, + const ptid_t &child_ptid); + + void mark_thread_stale (struct lwp_info *lp); + + void mark_debug_registers_changed (pid_t pid); + + void register_hw_breakpoint (pid_t pid, + const struct ppc_hw_breakpoint &bp); + + void clear_hw_breakpoint (pid_t pid, + const struct ppc_hw_breakpoint &a); + + void register_wp (pid_t pid, long wp_value); + + void clear_wp (pid_t pid); + + bool can_use_watchpoint_cond_accel (void); + + void calculate_dvc (CORE_ADDR addr, int len, + CORE_ADDR data_value, + uint32_t *condition_mode, + uint64_t *condition_value); + + int check_condition (CORE_ADDR watch_addr, + struct expression *cond, + CORE_ADDR *data_value, int *len); + + int num_memory_accesses (const std::vector<value_ref_ptr> &chain); + + int get_trigger_type (enum target_hw_bp_type type); + + void create_watchpoint_request (struct ppc_hw_breakpoint *p, + CORE_ADDR addr, + int len, + enum target_hw_bp_type type, + struct expression *cond, + int insert); + + bool hwdebug_point_cmp (const struct ppc_hw_breakpoint &a, + const struct ppc_hw_breakpoint &b); + + void init_arch_lwp_info (struct lwp_info *lp); + + arch_lwp_info *get_arch_lwp_info (struct lwp_info *lp); + + /* The ptrace interface we'll use to install hardware watchpoints and + breakpoints (debug registers). */ + ppc_linux_dreg_interface m_dreg_interface; + + /* A map from pids to structs containing info specific to each + process. */ + std::unordered_map<pid_t, ppc_linux_process_info> m_process_info; + + /* Callable object to hash ptids by their lwp number. */ + struct ptid_hash + { + std::size_t operator() (const ptid_t &ptid) const + { + return std::hash<long>{} (ptid.lwp ()); + } + }; + + /* A map from ptid_t objects to a list of pairs of slots and hardware + breakpoint objects. This keeps track of which hardware breakpoints + and watchpoints were last installed in each slot of each thread. + + Only used when the interface is HWDEBUG. */ + std::unordered_map <ptid_t, + std::list<std::pair<long, ppc_hw_breakpoint>>, + ptid_hash> m_installed_hw_bps; }; static ppc_linux_nat_target the_ppc_linux_nat_target; @@ -1555,296 +1853,317 @@ function to fail most of the time, so we ignore them. */ } -/* The cached DABR value, to install in new threads. - This variable is used when the PowerPC HWDEBUG ptrace - interface is not available. */ -static long saved_dabr_value; - -/* Global structure that will store information about the available - features provided by the PowerPC HWDEBUG ptrace interface. */ -static struct ppc_debug_info hwdebug_info; - -/* Global variable that holds the maximum number of slots that the - kernel will use. This is only used when PowerPC HWDEBUG ptrace interface - is available. */ -static size_t max_slots_number = 0; - -struct hw_break_tuple +void +ppc_linux_nat_target::store_registers (struct regcache *regcache, int regno) { - long slot; - struct ppc_hw_breakpoint *hw_break; -}; - -/* This is an internal vector created to store information about *points - inserted for each thread. This is used when PowerPC HWDEBUG ptrace - interface is available. */ -struct thread_points - { - /* The TID to which this *point relates. */ - int tid; - /* Information about the *point, such as its address, type, etc. - - Each element inside this vector corresponds to a hardware - breakpoint or watchpoint in the thread represented by TID. The maximum - size of these vector is MAX_SLOTS_NUMBER. If the hw_break element of - the tuple is NULL, then the position in the vector is free. */ - struct hw_break_tuple *hw_breaks; - }; + pid_t tid = get_ptrace_pid (regcache->ptid ()); -static std::vector<thread_points *> ppc_threads; + if (regno >= 0) + store_register (regcache, tid, regno); + else + store_ppc_registers (regcache, tid); +} -/* The version of the PowerPC HWDEBUG kernel interface that we will use, if - available. */ -#define PPC_DEBUG_CURRENT_VERSION 1 +/* Functions for transferring registers between a gregset_t or fpregset_t + (see sys/ucontext.h) and gdb's regcache. The word size is that used + by the ptrace interface, not the current program's ABI. Eg. if a + powerpc64-linux gdb is being used to debug a powerpc32-linux app, we + read or write 64-bit gregsets. This is to suit the host libthread_db. */ -/* Returns non-zero if we support the PowerPC HWDEBUG ptrace interface. */ -static int -have_ptrace_hwdebug_interface (void) +void +supply_gregset (struct regcache *regcache, const gdb_gregset_t *gregsetp) { - static int have_ptrace_hwdebug_interface = -1; - - if (have_ptrace_hwdebug_interface == -1) - { - int tid; - - tid = inferior_ptid.lwp (); - if (tid == 0) - tid = inferior_ptid.pid (); - - /* Check for kernel support for PowerPC HWDEBUG ptrace interface. */ - if (ptrace (PPC_PTRACE_GETHWDBGINFO, tid, 0, &hwdebug_info) >= 0) - { - /* Check whether PowerPC HWDEBUG ptrace interface is functional and - provides any supported feature. */ - if (hwdebug_info.features != 0) - { - have_ptrace_hwdebug_interface = 1; - max_slots_number = hwdebug_info.num_instruction_bps - + hwdebug_info.num_data_bps - + hwdebug_info.num_condition_regs; - return have_ptrace_hwdebug_interface; - } - } - /* Old school interface and no PowerPC HWDEBUG ptrace support. */ - have_ptrace_hwdebug_interface = 0; - memset (&hwdebug_info, 0, sizeof (struct ppc_debug_info)); - } + const struct regset *regset = ppc_linux_gregset (sizeof (long)); - return have_ptrace_hwdebug_interface; + ppc_supply_gregset (regset, regcache, -1, gregsetp, sizeof (*gregsetp)); } -int -ppc_linux_nat_target::can_use_hw_breakpoint (enum bptype type, int cnt, int ot) +void +fill_gregset (const struct regcache *regcache, + gdb_gregset_t *gregsetp, int regno) { - int total_hw_wp, total_hw_bp; - - if (have_ptrace_hwdebug_interface ()) - { - /* When PowerPC HWDEBUG ptrace interface is available, the number of - available hardware watchpoints and breakpoints is stored at the - hwdebug_info struct. */ - total_hw_bp = hwdebug_info.num_instruction_bps; - total_hw_wp = hwdebug_info.num_data_bps; - } - else - { - /* When we do not have PowerPC HWDEBUG ptrace interface, we should - consider having 1 hardware watchpoint and no hardware breakpoints. */ - total_hw_bp = 0; - total_hw_wp = 1; - } + const struct regset *regset = ppc_linux_gregset (sizeof (long)); - if (type == bp_hardware_watchpoint || type == bp_read_watchpoint - || type == bp_access_watchpoint || type == bp_watchpoint) - { - if (cnt + ot > total_hw_wp) - return -1; - } - else if (type == bp_hardware_breakpoint) - { - if (total_hw_bp == 0) - { - /* No hardware breakpoint support. */ - return 0; - } - if (cnt > total_hw_bp) - return -1; - } + if (regno == -1) + memset (gregsetp, 0, sizeof (*gregsetp)); + ppc_collect_gregset (regset, regcache, regno, gregsetp, sizeof (*gregsetp)); +} - if (!have_ptrace_hwdebug_interface ()) - { - int tid; - ptid_t ptid = inferior_ptid; +void +supply_fpregset (struct regcache *regcache, const gdb_fpregset_t * fpregsetp) +{ + const struct regset *regset = ppc_linux_fpregset (); - /* We need to know whether ptrace supports PTRACE_SET_DEBUGREG - and whether the target has DABR. If either answer is no, the - ptrace call will return -1. Fail in that case. */ - tid = ptid.lwp (); - if (tid == 0) - tid = ptid.pid (); + ppc_supply_fpregset (regset, regcache, -1, + fpregsetp, sizeof (*fpregsetp)); +} - if (ptrace (PTRACE_SET_DEBUGREG, tid, 0, 0) == -1) - return 0; - } +void +fill_fpregset (const struct regcache *regcache, + gdb_fpregset_t *fpregsetp, int regno) +{ + const struct regset *regset = ppc_linux_fpregset (); - return 1; + ppc_collect_fpregset (regset, regcache, regno, + fpregsetp, sizeof (*fpregsetp)); } int -ppc_linux_nat_target::region_ok_for_hw_watchpoint (CORE_ADDR addr, int len) +ppc_linux_nat_target::auxv_parse (gdb_byte **readptr, + gdb_byte *endptr, CORE_ADDR *typep, + CORE_ADDR *valp) { - /* Handle sub-8-byte quantities. */ - if (len <= 0) - return 0; + int tid = inferior_ptid.lwp (); + if (tid == 0) + tid = inferior_ptid.pid (); - /* The PowerPC HWDEBUG ptrace interface tells if there are alignment - restrictions for watchpoints in the processors. In that case, we use that - information to determine the hardcoded watchable region for - watchpoints. */ - if (have_ptrace_hwdebug_interface ()) - { - int region_size; - /* Embedded DAC-based processors, like the PowerPC 440 have ranged - watchpoints and can watch any access within an arbitrary memory - region. This is useful to watch arrays and structs, for instance. It - takes two hardware watchpoints though. */ - if (len > 1 - && hwdebug_info.features & PPC_DEBUG_FEATURE_DATA_BP_RANGE - && linux_get_hwcap (current_top_target ()) & PPC_FEATURE_BOOKE) - return 2; - /* Check if the processor provides DAWR interface. */ - if (hwdebug_info.features & PPC_DEBUG_FEATURE_DATA_BP_DAWR) - /* DAWR interface allows to watch up to 512 byte wide ranges which - can't cross a 512 byte boundary. */ - region_size = 512; - else - region_size = hwdebug_info.data_bp_alignment; - /* Server processors provide one hardware watchpoint and addr+len should - fall in the watchable region provided by the ptrace interface. */ - if (region_size - && (addr + len > (addr & ~(region_size - 1)) + region_size)) - return 0; - } - /* addr+len must fall in the 8 byte watchable region for DABR-based - processors (i.e., server processors). Without the new PowerPC HWDEBUG - ptrace interface, DAC-based processors (i.e., embedded processors) will - use addresses aligned to 4-bytes due to the way the read/write flags are - passed in the old ptrace interface. */ - else if (((linux_get_hwcap (current_top_target ()) & PPC_FEATURE_BOOKE) - && (addr + len) > (addr & ~3) + 4) - || (addr + len) > (addr & ~7) + 8) + int sizeof_auxv_field = ppc_linux_target_wordsize (tid); + + enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch ()); + gdb_byte *ptr = *readptr; + + if (endptr == ptr) return 0; + if (endptr - ptr < sizeof_auxv_field * 2) + return -1; + + *typep = extract_unsigned_integer (ptr, sizeof_auxv_field, byte_order); + ptr += sizeof_auxv_field; + *valp = extract_unsigned_integer (ptr, sizeof_auxv_field, byte_order); + ptr += sizeof_auxv_field; + + *readptr = ptr; return 1; } -/* This function compares two ppc_hw_breakpoint structs field-by-field. */ -static int -hwdebug_point_cmp (struct ppc_hw_breakpoint *a, struct ppc_hw_breakpoint *b) +const struct target_desc * +ppc_linux_nat_target::read_description () { - return (a->trigger_type == b->trigger_type - && a->addr_mode == b->addr_mode - && a->condition_mode == b->condition_mode - && a->addr == b->addr - && a->addr2 == b->addr2 - && a->condition_value == b->condition_value); -} + int tid = inferior_ptid.lwp (); + if (tid == 0) + tid = inferior_ptid.pid (); -/* This function can be used to retrieve a thread_points by the TID of the - related process/thread. If nothing has been found, and ALLOC_NEW is 0, - it returns NULL. If ALLOC_NEW is non-zero, a new thread_points for the - provided TID will be created and returned. */ -static struct thread_points * -hwdebug_find_thread_points_by_tid (int tid, int alloc_new) -{ - for (thread_points *t : ppc_threads) + if (have_ptrace_getsetevrregs) { - if (t->tid == tid) - return t; - } + struct gdb_evrregset_t evrregset; - struct thread_points *t = NULL; + if (ptrace (PTRACE_GETEVRREGS, tid, 0, &evrregset) >= 0) + return tdesc_powerpc_e500l; - /* Do we need to allocate a new point_item - if the wanted one does not exist? */ - if (alloc_new) - { - t = XNEW (struct thread_points); - t->hw_breaks = XCNEWVEC (struct hw_break_tuple, max_slots_number); - t->tid = tid; - ppc_threads.push_back (t); - } + /* EIO means that the PTRACE_GETEVRREGS request isn't supported. + Anything else needs to be reported. */ + else if (errno != EIO) + perror_with_name (_("Unable to fetch SPE registers")); + } - return t; -} + struct ppc_linux_features features = ppc_linux_no_features; -/* This function is a generic wrapper that is responsible for inserting a - *point (i.e., calling `ptrace' in order to issue the request to the - kernel) and registering it internally in GDB. */ -static void -hwdebug_insert_point (struct ppc_hw_breakpoint *b, int tid) -{ - int i; - long slot; - gdb::unique_xmalloc_ptr<ppc_hw_breakpoint> p (XDUP (ppc_hw_breakpoint, b)); - struct hw_break_tuple *hw_breaks; - struct thread_points *t; - - errno = 0; - slot = ptrace (PPC_PTRACE_SETHWDEBUG, tid, 0, p.get ()); - if (slot < 0) - perror_with_name (_("Unexpected error setting breakpoint or watchpoint")); - - /* Everything went fine, so we have to register this *point. */ - t = hwdebug_find_thread_points_by_tid (tid, 1); - gdb_assert (t != NULL); - hw_breaks = t->hw_breaks; + features.wordsize = ppc_linux_target_wordsize (tid); - /* Find a free element in the hw_breaks vector. */ - for (i = 0; i < max_slots_number; i++) + CORE_ADDR hwcap = linux_get_hwcap (current_top_target ()); + CORE_ADDR hwcap2 = linux_get_hwcap2 (current_top_target ()); + + if (have_ptrace_getsetvsxregs + && (hwcap & PPC_FEATURE_HAS_VSX)) { - if (hw_breaks[i].hw_break == NULL) + gdb_vsxregset_t vsxregset; + + if (ptrace (PTRACE_GETVSXREGS, tid, 0, &vsxregset) >= 0) + features.vsx = true; + + /* EIO means that the PTRACE_GETVSXREGS request isn't supported. + Anything else needs to be reported. */ + else if (errno != EIO) + perror_with_name (_("Unable to fetch VSX registers")); + } + + if (have_ptrace_getvrregs + && (hwcap & PPC_FEATURE_HAS_ALTIVEC)) + { + gdb_vrregset_t vrregset; + + if (ptrace (PTRACE_GETVRREGS, tid, 0, &vrregset) >= 0) + features.altivec = true; + + /* EIO means that the PTRACE_GETVRREGS request isn't supported. + Anything else needs to be reported. */ + else if (errno != EIO) + perror_with_name (_("Unable to fetch AltiVec registers")); + } + + features.isa205 = ppc_linux_has_isa205 (hwcap); + + if ((hwcap2 & PPC_FEATURE2_DSCR) + && check_regset (tid, NT_PPC_PPR, PPC_LINUX_SIZEOF_PPRREGSET) + && check_regset (tid, NT_PPC_DSCR, PPC_LINUX_SIZEOF_DSCRREGSET)) + { + features.ppr_dscr = true; + if ((hwcap2 & PPC_FEATURE2_ARCH_2_07) + && (hwcap2 & PPC_FEATURE2_TAR) + && (hwcap2 & PPC_FEATURE2_EBB) + && check_regset (tid, NT_PPC_TAR, PPC_LINUX_SIZEOF_TARREGSET) + && check_regset (tid, NT_PPC_EBB, PPC_LINUX_SIZEOF_EBBREGSET) + && check_regset (tid, NT_PPC_PMU, PPC_LINUX_SIZEOF_PMUREGSET)) { - hw_breaks[i].slot = slot; - hw_breaks[i].hw_break = p.release (); - break; + features.isa207 = true; + if ((hwcap2 & PPC_FEATURE2_HTM) + && check_regset (tid, NT_PPC_TM_SPR, + PPC_LINUX_SIZEOF_TM_SPRREGSET)) + features.htm = true; } } - gdb_assert (i != max_slots_number); + return ppc_linux_match_description (features); } -/* This function is a generic wrapper that is responsible for removing a - *point (i.e., calling `ptrace' in order to issue the request to the - kernel), and unregistering it internally at GDB. */ -static void -hwdebug_remove_point (struct ppc_hw_breakpoint *b, int tid) +/* Routines for installing hardware watchpoints and breakpoints. When + GDB requests a hardware watchpoint or breakpoint to be installed, we + register the request for the pid of inferior_ptid in a map with one + entry per process. We then issue a stop request to all the threads of + this process, and mark a per-thread flag indicating that their debug + registers should be updated. Right before they are next resumed, we + remove all previously installed debug registers and install all the + ones GDB requested. We then update a map with one entry per thread + that keeps track of what debug registers were last installed in each + thread. + + We use this second map to remove installed registers before installing + the ones requested by GDB, and to copy the debug register state after + a thread clones or forks, since depending on the kernel configuration, + debug registers can be inherited. */ + +/* Check if we support and have enough resources to install a hardware + watchpoint or breakpoint. See the description in target.h. */ + +int +ppc_linux_nat_target::can_use_hw_breakpoint (enum bptype type, int cnt, + int ot) { - int i; - struct hw_break_tuple *hw_breaks; - struct thread_points *t; + int total_hw_wp, total_hw_bp; + + m_dreg_interface.detect (inferior_ptid); + + if (m_dreg_interface.unavailable_p ()) + return 0; + + if (m_dreg_interface.hwdebug_p ()) + { + /* When PowerPC HWDEBUG ptrace interface is available, the number of + available hardware watchpoints and breakpoints is stored at the + hwdebug_info struct. */ + total_hw_bp = m_dreg_interface.hwdebug_info ().num_instruction_bps; + total_hw_wp = m_dreg_interface.hwdebug_info ().num_data_bps; + } + else + { + gdb_assert (m_dreg_interface.debugreg_p ()); + + /* With the DEBUGREG ptrace interface, we should consider having 1 + hardware watchpoint and no hardware breakpoints. */ + total_hw_bp = 0; + total_hw_wp = 1; + } + + if (type == bp_hardware_watchpoint || type == bp_read_watchpoint + || type == bp_access_watchpoint || type == bp_watchpoint) + { + if (total_hw_wp == 0) + return 0; + else if (cnt + ot > total_hw_wp) + return -1; + else + return 1; + } + else if (type == bp_hardware_breakpoint) + { + if (total_hw_bp == 0) + return 0; + else if (cnt > total_hw_bp) + return -1; + else + return 1; + } + + return 0; +} + +/* Returns 1 if we can watch LEN bytes at address ADDR, 0 otherwise. */ + +int +ppc_linux_nat_target::region_ok_for_hw_watchpoint (CORE_ADDR addr, int len) +{ + /* Handle sub-8-byte quantities. */ + if (len <= 0) + return 0; - t = hwdebug_find_thread_points_by_tid (tid, 0); - gdb_assert (t != NULL); - hw_breaks = t->hw_breaks; - - for (i = 0; i < max_slots_number; i++) - if (hw_breaks[i].hw_break && hwdebug_point_cmp (hw_breaks[i].hw_break, b)) - break; - - gdb_assert (i != max_slots_number); - - /* We have to ignore ENOENT errors because the kernel implements hardware - breakpoints/watchpoints as "one-shot", that is, they are automatically - deleted when hit. */ - errno = 0; - if (ptrace (PPC_PTRACE_DELHWDEBUG, tid, 0, hw_breaks[i].slot) < 0) - if (errno != ENOENT) - perror_with_name (_("Unexpected error deleting " - "breakpoint or watchpoint")); + m_dreg_interface.detect (inferior_ptid); + + if (m_dreg_interface.unavailable_p ()) + return 0; + + /* The PowerPC HWDEBUG ptrace interface tells if there are alignment + restrictions for watchpoints in the processors. In that case, we use that + information to determine the hardcoded watchable region for + watchpoints. */ + if (m_dreg_interface.hwdebug_p ()) + { + int region_size; + const struct ppc_debug_info &hwdebug_info = (m_dreg_interface + .hwdebug_info ()); - xfree (hw_breaks[i].hw_break); - hw_breaks[i].hw_break = NULL; + /* Embedded DAC-based processors, like the PowerPC 440 have ranged + watchpoints and can watch any access within an arbitrary memory + region. This is useful to watch arrays and structs, for instance. It + takes two hardware watchpoints though. */ + if (len > 1 + && hwdebug_info.features & PPC_DEBUG_FEATURE_DATA_BP_RANGE + && linux_get_hwcap (current_top_target ()) & PPC_FEATURE_BOOKE) + return 2; + /* Check if the processor provides DAWR interface. */ + if (hwdebug_info.features & PPC_DEBUG_FEATURE_DATA_BP_DAWR) + /* DAWR interface allows to watch up to 512 byte wide ranges which + can't cross a 512 byte boundary. */ + region_size = 512; + else + region_size = hwdebug_info.data_bp_alignment; + /* Server processors provide one hardware watchpoint and addr+len should + fall in the watchable region provided by the ptrace interface. */ + if (region_size + && (addr + len > (addr & ~(region_size - 1)) + region_size)) + return 0; + } + /* addr+len must fall in the 8 byte watchable region for DABR-based + processors (i.e., server processors). Without the new PowerPC HWDEBUG + ptrace interface, DAC-based processors (i.e., embedded processors) will + use addresses aligned to 4-bytes due to the way the read/write flags are + passed in the old ptrace interface. */ + else + { + gdb_assert (m_dreg_interface.debugreg_p ()); + + if (((linux_get_hwcap (current_top_target ()) & PPC_FEATURE_BOOKE) + && (addr + len) > (addr & ~3) + 4) + || (addr + len) > (addr & ~7) + 8) + return 0; + } + + return 1; +} + +/* This function compares two ppc_hw_breakpoint structs + field-by-field. */ + +bool +ppc_linux_nat_target::hwdebug_point_cmp (const struct ppc_hw_breakpoint &a, + const struct ppc_hw_breakpoint &b) +{ + return (a.trigger_type == b.trigger_type + && a.addr_mode == b.addr_mode + && a.condition_mode == b.condition_mode + && a.addr == b.addr + && a.addr2 == b.addr2 + && a.condition_value == b.condition_value); } /* Return the number of registers needed for a ranged breakpoint. */ @@ -1852,22 +2171,28 @@ int ppc_linux_nat_target::ranged_break_num_registers () { - return ((have_ptrace_hwdebug_interface () - && hwdebug_info.features & PPC_DEBUG_FEATURE_INSN_BP_RANGE)? + m_dreg_interface.detect (inferior_ptid); + + return ((m_dreg_interface.hwdebug_p () + && (m_dreg_interface.hwdebug_info ().features + & PPC_DEBUG_FEATURE_INSN_BP_RANGE))? 2 : -1); } -/* Insert the hardware breakpoint described by BP_TGT. Returns 0 for - success, 1 if hardware breakpoints are not supported or -1 for failure. */ +/* Register the hardware breakpoint described by BP_TGT, to be inserted + when the threads of inferior_ptid are resumed. Returns 0 for success, + or -1 if the HWDEBUG interface that we need for hardware breakpoints + is not available. */ int ppc_linux_nat_target::insert_hw_breakpoint (struct gdbarch *gdbarch, struct bp_target_info *bp_tgt) { - struct lwp_info *lp; struct ppc_hw_breakpoint p; - if (!have_ptrace_hwdebug_interface ()) + m_dreg_interface.detect (inferior_ptid); + + if (!m_dreg_interface.hwdebug_p ()) return -1; p.version = PPC_DEBUG_CURRENT_VERSION; @@ -1890,20 +2215,25 @@ p.addr2 = 0; } - ALL_LWPS (lp) - hwdebug_insert_point (&p, lp->ptid.lwp ()); + register_hw_breakpoint (inferior_ptid.pid (), p); return 0; } +/* Clear a registration for the hardware breakpoint given by type BP_TGT. + It will be removed from the threads of inferior_ptid when they are + next resumed. Returns 0 for success, or -1 if the HWDEBUG interface + that we need for hardware breakpoints is not available. */ + int ppc_linux_nat_target::remove_hw_breakpoint (struct gdbarch *gdbarch, struct bp_target_info *bp_tgt) { - struct lwp_info *lp; struct ppc_hw_breakpoint p; - if (!have_ptrace_hwdebug_interface ()) + m_dreg_interface.detect (inferior_ptid); + + if (!m_dreg_interface.hwdebug_p ()) return -1; p.version = PPC_DEBUG_CURRENT_VERSION; @@ -1926,14 +2256,16 @@ p.addr2 = 0; } - ALL_LWPS (lp) - hwdebug_remove_point (&p, lp->ptid.lwp ()); + clear_hw_breakpoint (inferior_ptid.pid (), p); return 0; } -static int -get_trigger_type (enum target_hw_bp_type type) +/* Return the trigger value to set in a ppc_hw_breakpoint object for a + given hardware watchpoint TYPE. We assume type is not hw_execute. */ + +int +ppc_linux_nat_target::get_trigger_type (enum target_hw_bp_type type) { int t; @@ -1947,19 +2279,18 @@ return t; } -/* Insert a new masked watchpoint at ADDR using the mask MASK. - RW may be hw_read for a read watchpoint, hw_write for a write watchpoint - or hw_access for an access watchpoint. Returns 0 on success and throws - an error on failure. */ +/* Register a new masked watchpoint at ADDR using the mask MASK, to be + inserted when the threads of inferior_ptid are resumed. RW may be + hw_read for a read watchpoint, hw_write for a write watchpoint or + hw_access for an access watchpoint. */ int ppc_linux_nat_target::insert_mask_watchpoint (CORE_ADDR addr, CORE_ADDR mask, target_hw_bp_type rw) { - struct lwp_info *lp; struct ppc_hw_breakpoint p; - gdb_assert (have_ptrace_hwdebug_interface ()); + gdb_assert (m_dreg_interface.hwdebug_p ()); p.version = PPC_DEBUG_CURRENT_VERSION; p.trigger_type = get_trigger_type (rw); @@ -1969,25 +2300,23 @@ p.addr2 = mask; p.condition_value = 0; - ALL_LWPS (lp) - hwdebug_insert_point (&p, lp->ptid.lwp ()); + register_hw_breakpoint (inferior_ptid.pid (), p); return 0; } -/* Remove a masked watchpoint at ADDR with the mask MASK. - RW may be hw_read for a read watchpoint, hw_write for a write watchpoint - or hw_access for an access watchpoint. Returns 0 on success and throws - an error on failure. */ +/* Clear a registration for a masked watchpoint at ADDR with the mask + MASK. It will be removed from the threads of inferior_ptid when they + are next resumed. RW may be hw_read for a read watchpoint, hw_write + for a write watchpoint or hw_access for an access watchpoint. */ int ppc_linux_nat_target::remove_mask_watchpoint (CORE_ADDR addr, CORE_ADDR mask, target_hw_bp_type rw) { - struct lwp_info *lp; struct ppc_hw_breakpoint p; - gdb_assert (have_ptrace_hwdebug_interface ()); + gdb_assert (m_dreg_interface.hwdebug_p ()); p.version = PPC_DEBUG_CURRENT_VERSION; p.trigger_type = get_trigger_type (rw); @@ -1997,39 +2326,42 @@ p.addr2 = mask; p.condition_value = 0; - ALL_LWPS (lp) - hwdebug_remove_point (&p, lp->ptid.lwp ()); + clear_hw_breakpoint (inferior_ptid.pid (), p); return 0; } -/* Check whether we have at least one free DVC register. */ -static int -can_use_watchpoint_cond_accel (void) +/* Check whether we have at least one free DVC register for the threads + of the pid of inferior_ptid. */ + +bool +ppc_linux_nat_target::can_use_watchpoint_cond_accel (void) { - struct thread_points *p; - int tid = inferior_ptid.lwp (); - int cnt = hwdebug_info.num_condition_regs, i; + m_dreg_interface.detect (inferior_ptid); - if (!have_ptrace_hwdebug_interface () || cnt == 0) - return 0; + if (!m_dreg_interface.hwdebug_p ()) + return false; - p = hwdebug_find_thread_points_by_tid (tid, 0); + int cnt = m_dreg_interface.hwdebug_info ().num_condition_regs; - if (p) - { - for (i = 0; i < max_slots_number; i++) - if (p->hw_breaks[i].hw_break != NULL - && (p->hw_breaks[i].hw_break->condition_mode - != PPC_BREAKPOINT_CONDITION_NONE)) - cnt--; + if (cnt == 0) + return false; - /* There are no available slots now. */ - if (cnt <= 0) - return 0; - } + auto process_it = m_process_info.find (inferior_ptid.pid ()); - return 1; + /* No breakpoints or watchpoints have been requested for this process, + we have at least one free DVC register. */ + if (process_it == m_process_info.end ()) + return true; + + for (const ppc_hw_breakpoint &bp : process_it->second.requested_hw_bps) + if (bp.condition_mode != PPC_BREAKPOINT_CONDITION_NONE) + cnt--; + + if (cnt <= 0) + return false; + + return true; } /* Calculate the enable bits and the contents of the Data Value Compare @@ -2040,10 +2372,16 @@ On exit, CONDITION_MODE will hold the enable bits for the DVC, and CONDITION_VALUE will hold the value which should be put in the DVC register. */ -static void -calculate_dvc (CORE_ADDR addr, int len, CORE_ADDR data_value, - uint32_t *condition_mode, uint64_t *condition_value) + +void +ppc_linux_nat_target::calculate_dvc (CORE_ADDR addr, int len, + CORE_ADDR data_value, + uint32_t *condition_mode, + uint64_t *condition_value) { + const struct ppc_debug_info &hwdebug_info = (m_dreg_interface. + hwdebug_info ()); + int i, num_byte_enable, align_offset, num_bytes_off_dvc, rightmost_enabled_byte; CORE_ADDR addr_end_data, addr_end_dvc; @@ -2082,8 +2420,10 @@ Returns -1 if there's any register access involved, or if there are other kinds of values which are not acceptable in a condition expression (e.g., lval_computed or lval_internalvar). */ -static int -num_memory_accesses (const std::vector<value_ref_ptr> &chain) + +int +ppc_linux_nat_target::num_memory_accesses (const std::vector<value_ref_ptr> + &chain) { int found_memory_cnt = 0; @@ -2131,9 +2471,11 @@ If the function returns 1, DATA_VALUE will contain the constant against which the watch value should be compared and LEN will contain the size of the constant. */ -static int -check_condition (CORE_ADDR watch_addr, struct expression *cond, - CORE_ADDR *data_value, int *len) + +int +ppc_linux_nat_target::check_condition (CORE_ADDR watch_addr, + struct expression *cond, + CORE_ADDR *data_value, int *len) { int pc = 1, num_accesses_left, num_accesses_right; struct value *left_val, *right_val; @@ -2180,18 +2522,21 @@ return 1; } -/* Return non-zero if the target is capable of using hardware to evaluate - the condition expression, thus only triggering the watchpoint when it is +/* Return true if the target is capable of using hardware to evaluate the + condition expression, thus only triggering the watchpoint when it is true. */ + bool -ppc_linux_nat_target::can_accel_watchpoint_condition (CORE_ADDR addr, int len, - int rw, +ppc_linux_nat_target::can_accel_watchpoint_condition (CORE_ADDR addr, + int len, int rw, struct expression *cond) { CORE_ADDR data_value; - return (have_ptrace_hwdebug_interface () - && hwdebug_info.num_condition_regs > 0 + m_dreg_interface.detect (inferior_ptid); + + return (m_dreg_interface.hwdebug_p () + && (m_dreg_interface.hwdebug_info ().num_condition_regs > 0) && check_condition (addr, cond, &data_value, &len)); } @@ -2200,11 +2545,16 @@ evaluated by hardware. INSERT tells if we are creating a request for inserting or removing the watchpoint. */ -static void -create_watchpoint_request (struct ppc_hw_breakpoint *p, CORE_ADDR addr, - int len, enum target_hw_bp_type type, - struct expression *cond, int insert) +void +ppc_linux_nat_target::create_watchpoint_request (struct ppc_hw_breakpoint *p, + CORE_ADDR addr, int len, + enum target_hw_bp_type type, + struct expression *cond, + int insert) { + const struct ppc_debug_info &hwdebug_info = (m_dreg_interface + .hwdebug_info ()); + if (len == 1 || !(hwdebug_info.features & PPC_DEBUG_FEATURE_DATA_BP_RANGE)) { @@ -2246,28 +2596,33 @@ p->addr = (uint64_t) addr; } +/* Register a watchpoint, to be inserted when the threads of the group of + inferior_ptid are next resumed. Returns 0 on success, and -1 if there + is no ptrace interface available to install the watchpoint. */ + int ppc_linux_nat_target::insert_watchpoint (CORE_ADDR addr, int len, enum target_hw_bp_type type, struct expression *cond) { - struct lwp_info *lp; - int ret = -1; + m_dreg_interface.detect (inferior_ptid); - if (have_ptrace_hwdebug_interface ()) + if (m_dreg_interface.unavailable_p ()) + return -1; + + if (m_dreg_interface.hwdebug_p ()) { struct ppc_hw_breakpoint p; create_watchpoint_request (&p, addr, len, type, cond, 1); - ALL_LWPS (lp) - hwdebug_insert_point (&p, lp->ptid.lwp ()); - - ret = 0; + register_hw_breakpoint (inferior_ptid.pid (), p); } else { - long dabr_value; + gdb_assert (m_dreg_interface.debugreg_p ()); + + long wp_value; long read_mode, write_mode; if (linux_get_hwcap (current_top_target ()) & PPC_FEATURE_BOOKE) @@ -2285,144 +2640,303 @@ write_mode = 6; } - dabr_value = addr & ~(read_mode | write_mode); + wp_value = addr & ~(read_mode | write_mode); switch (type) { case hw_read: /* Set read and translate bits. */ - dabr_value |= read_mode; + wp_value |= read_mode; break; case hw_write: /* Set write and translate bits. */ - dabr_value |= write_mode; + wp_value |= write_mode; break; case hw_access: /* Set read, write and translate bits. */ - dabr_value |= read_mode | write_mode; + wp_value |= read_mode | write_mode; break; } - saved_dabr_value = dabr_value; - - ALL_LWPS (lp) - if (ptrace (PTRACE_SET_DEBUGREG, lp->ptid.lwp (), 0, - saved_dabr_value) < 0) - return -1; - - ret = 0; + register_wp (inferior_ptid.pid (), wp_value); } - return ret; + return 0; } +/* Clear a registration for a hardware watchpoint. It will be removed + from the threads of the group of inferior_ptid when they are next + resumed. */ + int ppc_linux_nat_target::remove_watchpoint (CORE_ADDR addr, int len, enum target_hw_bp_type type, struct expression *cond) { - struct lwp_info *lp; - int ret = -1; + gdb_assert (!m_dreg_interface.unavailable_p ()); - if (have_ptrace_hwdebug_interface ()) + if (m_dreg_interface.hwdebug_p ()) { struct ppc_hw_breakpoint p; create_watchpoint_request (&p, addr, len, type, cond, 0); - ALL_LWPS (lp) - hwdebug_remove_point (&p, lp->ptid.lwp ()); - - ret = 0; + clear_hw_breakpoint (inferior_ptid.pid (), p); } else { - saved_dabr_value = 0; - ALL_LWPS (lp) - if (ptrace (PTRACE_SET_DEBUGREG, lp->ptid.lwp (), 0, - saved_dabr_value) < 0) - return -1; + gdb_assert (m_dreg_interface.debugreg_p ()); - ret = 0; + clear_wp (inferior_ptid.pid ()); } - return ret; + return 0; } +/* Clean up the per-process info associated with PID. When using the + HWDEBUG interface, we also erase the per-thread state of installed + debug registers for all the threads that belong to the group of PID. + + Usually the thread state is cleaned up by low_delete_thread. We also + do it here because low_new_thread is not called for the initial LWP, + so low_delete_thread won't be able to clean up this state. */ + void -ppc_linux_nat_target::low_new_thread (struct lwp_info *lp) +ppc_linux_nat_target::low_forget_process (pid_t pid) { - int tid = lp->ptid.lwp (); + if ((!m_dreg_interface.detected_p ()) + || (m_dreg_interface.unavailable_p ())) + return; - if (have_ptrace_hwdebug_interface ()) + ptid_t pid_ptid (pid, 0, 0); + + m_process_info.erase (pid); + + if (m_dreg_interface.hwdebug_p ()) { - int i; - struct thread_points *p; - struct hw_break_tuple *hw_breaks; + for (auto it = m_installed_hw_bps.begin (); + it != m_installed_hw_bps.end ();) + { + if (it->first.matches (pid_ptid)) + it = m_installed_hw_bps.erase (it); + else + it++; + } + } +} - if (ppc_threads.empty ()) - return; +/* Copy the per-process state associated with the pid of PARENT to the + sate of CHILD_PID. GDB expects that a forked process will have the + same hardware breakpoints and watchpoints as the parent. + + If we're using the HWDEBUG interface, also copy the thread debug + register state for the ptid of PARENT to the state for CHILD_PID. + + Like for clone events, we assume the kernel will copy the debug + registers from the parent thread to the child. The + low_prepare_to_resume function is made to work even if it doesn't. + + We copy the thread state here and not in low_new_thread since we don't + have the pid of the parent in low_new_thread. Even if we did, + low_new_thread might not be called immediately after the fork event is + detected. For instance, with the checkpointing system (see + linux-fork.c), the thread won't be added until GDB decides to switch + to a new checkpointed process. At that point, the debug register + state of the parent thread is unlikely to correspond to the state it + had at the point when it forked. */ - /* Get a list of breakpoints from any thread. */ - p = ppc_threads.back (); - hw_breaks = p->hw_breaks; - - /* Copy that thread's breakpoints and watchpoints to the new thread. */ - for (i = 0; i < max_slots_number; i++) - if (hw_breaks[i].hw_break) - { - /* Older kernels did not make new threads inherit their parent - thread's debug state, so we always clear the slot and replicate - the debug state ourselves, ensuring compatibility with all - kernels. */ - - /* The ppc debug resource accounting is done through "slots". - Ask the kernel the deallocate this specific *point's slot. */ - ptrace (PPC_PTRACE_DELHWDEBUG, tid, 0, hw_breaks[i].slot); +void +ppc_linux_nat_target::low_new_fork (struct lwp_info *parent, + pid_t child_pid) +{ + if ((!m_dreg_interface.detected_p ()) + || (m_dreg_interface.unavailable_p ())) + return; - hwdebug_insert_point (hw_breaks[i].hw_break, tid); - } + auto process_it = m_process_info.find (parent->ptid.pid ()); + + if (process_it != m_process_info.end ()) + m_process_info[child_pid] = m_process_info[parent->ptid.pid ()]; + + if (m_dreg_interface.hwdebug_p ()) + { + ptid_t child_ptid (child_pid, child_pid, 0); + + copy_thread_dreg_state (parent->ptid, child_ptid); } - else - ptrace (PTRACE_SET_DEBUGREG, tid, 0, saved_dabr_value); } -static void -ppc_linux_thread_exit (struct thread_info *tp, int silent) +/* Copy the thread debug register state from the PARENT thread to the the + state for CHILD_LWP, if we're using the HWDEBUG interface. We assume + the kernel copies the debug registers from one thread to another after + a clone event. The low_prepare_to_resume function is made to work + even if it doesn't. */ + +void +ppc_linux_nat_target::low_new_clone (struct lwp_info *parent, + pid_t child_lwp) { - int i; - int tid = tp->ptid.lwp (); - struct hw_break_tuple *hw_breaks; - struct thread_points *t = NULL; + if ((!m_dreg_interface.detected_p ()) + || (m_dreg_interface.unavailable_p ())) + return; + + if (m_dreg_interface.hwdebug_p ()) + { + ptid_t child_ptid (parent->ptid.pid (), child_lwp, 0); - if (!have_ptrace_hwdebug_interface ()) + copy_thread_dreg_state (parent->ptid, child_ptid); + } +} + +/* Initialize the arch-specific thread state for LP so that it contains + the ptid for lp, so that we can use it in low_delete_thread. Mark the + new thread LP as stale so that we update its debug registers before + resuming it. This is not called for the initial thread. */ + +void +ppc_linux_nat_target::low_new_thread (struct lwp_info *lp) +{ + init_arch_lwp_info (lp); + + mark_thread_stale (lp); +} + +/* Delete the per-thread debug register stale flag. */ + +void +ppc_linux_nat_target::low_delete_thread (struct arch_lwp_info + *lp_arch_info) +{ + if (lp_arch_info != NULL) + { + if (m_dreg_interface.detected_p () + && m_dreg_interface.hwdebug_p ()) + m_installed_hw_bps.erase (lp_arch_info->lwp_ptid); + + xfree (lp_arch_info); + } +} + +/* Install or delete debug registers in thread LP so that it matches what + GDB requested before it is resumed. */ + +void +ppc_linux_nat_target::low_prepare_to_resume (struct lwp_info *lp) +{ + if ((!m_dreg_interface.detected_p ()) + || (m_dreg_interface.unavailable_p ())) return; - for (i = 0; i < ppc_threads.size (); i++) + /* We have to re-install or clear the debug registers if we set the + stale flag. + + In addition, some kernels configurations can disable a hardware + watchpoint after it is hit. Usually, GDB will remove and re-install + a hardware watchpoint when the thread stops if "breakpoint + always-inserted" is off, or to single-step a watchpoint. But so + that we don't rely on this behavior, if we stop due to a hardware + breakpoint or watchpoint, we also refresh our debug registers. */ + + arch_lwp_info *lp_arch_info = get_arch_lwp_info (lp); + + bool stale_dregs = (lp->stop_reason == TARGET_STOPPED_BY_WATCHPOINT + || lp->stop_reason == TARGET_STOPPED_BY_HW_BREAKPOINT + || lp_arch_info->debug_regs_stale); + + if (!stale_dregs) + return; + + gdb_assert (lp->ptid.lwp_p ()); + + auto process_it = m_process_info.find (lp->ptid.pid ()); + + if (m_dreg_interface.hwdebug_p ()) { - if (ppc_threads[i]->tid == tid) + /* First, delete any hardware watchpoint or breakpoint installed in + the inferior and update the thread state. */ + auto installed_it = m_installed_hw_bps.find (lp->ptid); + + if (installed_it != m_installed_hw_bps.end ()) { - t = ppc_threads[i]; - break; + auto &bp_list = installed_it->second; + + for (auto bp_it = bp_list.begin (); bp_it != bp_list.end ();) + { + /* We ignore ENOENT to account for various possible kernel + behaviors, e.g. the kernel might or might not copy debug + registers across forks and clones, and we always copy + the debug register state when fork and clone events are + detected. */ + if (ptrace (PPC_PTRACE_DELHWDEBUG, lp->ptid.lwp (), 0, + bp_it->first) < 0) + if (errno != ENOENT) + perror_with_name (_("Error deleting hardware " + "breakpoint or watchpoint")); + + /* We erase the entries one at a time after successfuly + removing the corresponding slot form the thread so that + if we throw an exception above in a future iteration the + map remains consistent. */ + bp_it = bp_list.erase (bp_it); + } + + gdb_assert (bp_list.empty ()); } - } - if (t == NULL) - return; + /* Now we install all the requested hardware breakpoints and + watchpoints and update the thread state. */ + + if (process_it != m_process_info.end ()) + { + auto &bp_list = m_installed_hw_bps[lp->ptid]; - unordered_remove (ppc_threads, i); + for (ppc_hw_breakpoint bp + : process_it->second.requested_hw_bps) + { + long slot = ptrace (PPC_PTRACE_SETHWDEBUG, lp->ptid.lwp (), + 0, &bp); + + if (slot < 0) + perror_with_name (_("Error setting hardware " + "breakpoint or watchpoint")); + + /* Keep track of which slots we installed in this + thread. */ + bp_list.emplace (bp_list.begin (), slot, bp); + } + } + } + else + { + gdb_assert (m_dreg_interface.debugreg_p ()); - hw_breaks = t->hw_breaks; + /* Passing 0 to PTRACE_SET_DEBUGREG will clear the watchpoint. We + always clear the watchpoint instead of just overwriting it, in + case there is a request for a new watchpoint, because on some + older kernel versions and configurations simply overwriting the + watchpoint after it was hit would not re-enable it. */ + if (ptrace (PTRACE_SET_DEBUGREG, lp->ptid.lwp (), 0, 0) < 0) + perror_with_name (_("Error clearing hardware watchpoint")); + + /* GDB requested a watchpoint to be installed. */ + if (process_it != m_process_info.end () + && process_it->second.requested_wp_val.has_value ()) + { + long wp = *(process_it->second.requested_wp_val); - for (i = 0; i < max_slots_number; i++) - if (hw_breaks[i].hw_break) - xfree (hw_breaks[i].hw_break); + if (ptrace (PTRACE_SET_DEBUGREG, lp->ptid.lwp (), 0, wp) < 0) + perror_with_name (_("Error setting hardware watchpoint")); + } + } - xfree (t->hw_breaks); - xfree (t); + lp_arch_info->debug_regs_stale = false; } +/* Return true if INFERIOR_PTID is known to have been stopped by a + hardware watchpoint, false otherwise. If true is returned, write the + address that the kernel reported as causing the SIGTRAP in ADDR_P. */ + bool -ppc_linux_nat_target::stopped_data_address (CORE_ADDR *addr_p) +ppc_linux_nat_target::low_stopped_data_address (CORE_ADDR *addr_p) { siginfo_t siginfo; @@ -2433,38 +2947,45 @@ || (siginfo.si_code & 0xffff) != 0x0004 /* TRAP_HWBKPT */) return false; - if (have_ptrace_hwdebug_interface ()) - { - int i; - struct thread_points *t; - struct hw_break_tuple *hw_breaks; - /* The index (or slot) of the *point is passed in the si_errno field. */ + gdb_assert (!m_dreg_interface.unavailable_p ()); + + /* Check if this signal corresponds to a hardware breakpoint. We only + need to check this if we're using the HWDEBUG interface, since the + DEBUGREG interface only allows setting one hardware watchpoint. */ + if (m_dreg_interface.hwdebug_p ()) + { + /* The index (or slot) of the *point is passed in the si_errno + field. Currently, this is only the case if the kernel was + configured with CONFIG_PPC_ADV_DEBUG_REGS. If not, we assume + the kernel will set si_errno to a value that doesn't correspond + to any real slot. */ int slot = siginfo.si_errno; - t = hwdebug_find_thread_points_by_tid (inferior_ptid.lwp (), 0); + auto installed_it = m_installed_hw_bps.find (inferior_ptid); - /* Find out if this *point is a hardware breakpoint. - If so, we should return 0. */ - if (t) - { - hw_breaks = t->hw_breaks; - for (i = 0; i < max_slots_number; i++) - if (hw_breaks[i].hw_break && hw_breaks[i].slot == slot - && hw_breaks[i].hw_break->trigger_type - == PPC_BREAKPOINT_TRIGGER_EXECUTE) - return false; - } + /* We must have installed slots for the thread if it got a + TRAP_HWBKPT signal. */ + gdb_assert (installed_it != m_installed_hw_bps.end ()); + + for (const auto & slot_bp_pair : installed_it->second) + if (slot_bp_pair.first == slot + && (slot_bp_pair.second.trigger_type + == PPC_BREAKPOINT_TRIGGER_EXECUTE)) + return false; } *addr_p = (CORE_ADDR) (uintptr_t) siginfo.si_addr; return true; } +/* Return true if INFERIOR_PTID is known to have been stopped by a + hardware watchpoint, false otherwise. */ + bool -ppc_linux_nat_target::stopped_by_watchpoint () +ppc_linux_nat_target::low_stopped_by_watchpoint () { CORE_ADDR addr; - return stopped_data_address (&addr); + return low_stopped_data_address (&addr); } bool @@ -2472,9 +2993,11 @@ CORE_ADDR start, int length) { + gdb_assert (!m_dreg_interface.unavailable_p ()); + int mask; - if (have_ptrace_hwdebug_interface () + if (m_dreg_interface.hwdebug_p () && linux_get_hwcap (current_top_target ()) & PPC_FEATURE_BOOKE) return start <= addr && start + length >= addr; else if (linux_get_hwcap (current_top_target ()) & PPC_FEATURE_BOOKE) @@ -2491,10 +3014,14 @@ /* Return the number of registers needed for a masked hardware watchpoint. */ int -ppc_linux_nat_target::masked_watch_num_registers (CORE_ADDR addr, CORE_ADDR mask) +ppc_linux_nat_target::masked_watch_num_registers (CORE_ADDR addr, + CORE_ADDR mask) { - if (!have_ptrace_hwdebug_interface () - || (hwdebug_info.features & PPC_DEBUG_FEATURE_DATA_BP_MASK) == 0) + m_dreg_interface.detect (inferior_ptid); + + if (!m_dreg_interface.hwdebug_p () + || (m_dreg_interface.hwdebug_info ().features + & PPC_DEBUG_FEATURE_DATA_BP_MASK) == 0) return -1; else if ((mask & 0xC0000000) != 0xC0000000) { @@ -2507,177 +3034,182 @@ return 2; } +/* Copy the per-thread debug register state, if any, from thread + PARENT_PTID to thread CHILD_PTID, if the debug register being used is + HWDEBUG. */ + void -ppc_linux_nat_target::store_registers (struct regcache *regcache, int regno) +ppc_linux_nat_target::copy_thread_dreg_state (const ptid_t &parent_ptid, + const ptid_t &child_ptid) { - pid_t tid = get_ptrace_pid (regcache->ptid ()); + gdb_assert (m_dreg_interface.hwdebug_p ()); - if (regno >= 0) - store_register (regcache, tid, regno); - else - store_ppc_registers (regcache, tid); + auto installed_it = m_installed_hw_bps.find (parent_ptid); + + if (installed_it != m_installed_hw_bps.end ()) + m_installed_hw_bps[child_ptid] = m_installed_hw_bps[parent_ptid]; } -/* Functions for transferring registers between a gregset_t or fpregset_t - (see sys/ucontext.h) and gdb's regcache. The word size is that used - by the ptrace interface, not the current program's ABI. Eg. if a - powerpc64-linux gdb is being used to debug a powerpc32-linux app, we - read or write 64-bit gregsets. This is to suit the host libthread_db. */ +/* Mark the debug register stale flag for the new thread, if we have + already detected which debug register interface we use. */ void -supply_gregset (struct regcache *regcache, const gdb_gregset_t *gregsetp) +ppc_linux_nat_target::mark_thread_stale (struct lwp_info *lp) { - const struct regset *regset = ppc_linux_gregset (sizeof (long)); - - ppc_supply_gregset (regset, regcache, -1, gregsetp, sizeof (*gregsetp)); -} + if ((!m_dreg_interface.detected_p ()) + || (m_dreg_interface.unavailable_p ())) + return; -void -fill_gregset (const struct regcache *regcache, - gdb_gregset_t *gregsetp, int regno) -{ - const struct regset *regset = ppc_linux_gregset (sizeof (long)); + arch_lwp_info *lp_arch_info = get_arch_lwp_info (lp); - if (regno == -1) - memset (gregsetp, 0, sizeof (*gregsetp)); - ppc_collect_gregset (regset, regcache, regno, gregsetp, sizeof (*gregsetp)); + lp_arch_info->debug_regs_stale = true; } +/* Mark all the threads of the group of PID as stale with respect to + debug registers and issue a stop request to each such thread that + isn't already stopped. */ + void -supply_fpregset (struct regcache *regcache, const gdb_fpregset_t * fpregsetp) +ppc_linux_nat_target::mark_debug_registers_changed (pid_t pid) { - const struct regset *regset = ppc_linux_fpregset (); + /* We do this in two passes to make sure all threads are marked even if + we get an exception when stopping one of them. */ - ppc_supply_fpregset (regset, regcache, -1, - fpregsetp, sizeof (*fpregsetp)); -} + iterate_over_lwps (ptid_t (pid), + [this] (struct lwp_info *lp) -> int { + this->mark_thread_stale (lp); + return 0; + }); + + iterate_over_lwps (ptid_t (pid), + [] (struct lwp_info *lp) -> int { + if (!lwp_is_stopped (lp)) + linux_stop_lwp (lp); + return 0; + }); +} + +/* Register a hardware breakpoint or watchpoint BP for the pid PID, then + mark the stale flag for all threads of the group of PID, and issue a + stop request for them. The breakpoint or watchpoint will be installed + the next time each thread is resumed. Should only be used if the + debug register interface is HWDEBUG. */ void -fill_fpregset (const struct regcache *regcache, - gdb_fpregset_t *fpregsetp, int regno) +ppc_linux_nat_target::register_hw_breakpoint (pid_t pid, + const struct + ppc_hw_breakpoint &bp) { - const struct regset *regset = ppc_linux_fpregset (); + gdb_assert (m_dreg_interface.hwdebug_p ()); - ppc_collect_fpregset (regset, regcache, regno, - fpregsetp, sizeof (*fpregsetp)); + m_process_info[pid].requested_hw_bps.push_back (bp); + + mark_debug_registers_changed (pid); } -int -ppc_linux_nat_target::auxv_parse (gdb_byte **readptr, - gdb_byte *endptr, CORE_ADDR *typep, - CORE_ADDR *valp) +/* Clear a registration for a hardware breakpoint or watchpoint BP for + the pid PID, then mark the stale flag for all threads of the group of + PID, and issue a stop request for them. The breakpoint or watchpoint + will be removed the next time each thread is resumed. Should only be + used if the debug register interface is HWDEBUG. */ + +void +ppc_linux_nat_target::clear_hw_breakpoint (pid_t pid, + const struct ppc_hw_breakpoint &bp) { - int tid = inferior_ptid.lwp (); - if (tid == 0) - tid = inferior_ptid.pid (); + gdb_assert (m_dreg_interface.hwdebug_p ()); - int sizeof_auxv_field = ppc_linux_target_wordsize (tid); + auto process_it = m_process_info.find (pid); - enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch ()); - gdb_byte *ptr = *readptr; + gdb_assert (process_it != m_process_info.end ()); - if (endptr == ptr) - return 0; + auto bp_it = std::find_if (process_it->second.requested_hw_bps.begin (), + process_it->second.requested_hw_bps.end (), + [&bp, this] + (const struct ppc_hw_breakpoint &curr) + { return hwdebug_point_cmp (bp, curr); } + ); - if (endptr - ptr < sizeof_auxv_field * 2) - return -1; + /* If GDB is removing a watchpoint, it must have been inserted. */ + gdb_assert (bp_it != process_it->second.requested_hw_bps.end ()); - *typep = extract_unsigned_integer (ptr, sizeof_auxv_field, byte_order); - ptr += sizeof_auxv_field; - *valp = extract_unsigned_integer (ptr, sizeof_auxv_field, byte_order); - ptr += sizeof_auxv_field; + process_it->second.requested_hw_bps.erase (bp_it); - *readptr = ptr; - return 1; + mark_debug_registers_changed (pid); } -const struct target_desc * -ppc_linux_nat_target::read_description () -{ - int tid = inferior_ptid.lwp (); - if (tid == 0) - tid = inferior_ptid.pid (); +/* Register the hardware watchpoint value WP_VALUE for the pid PID, + then mark the stale flag for all threads of the group of PID, and + issue a stop request for them. The breakpoint or watchpoint will be + installed the next time each thread is resumed. Should only be used + if the debug register interface is DEBUGREG. */ - if (have_ptrace_getsetevrregs) - { - struct gdb_evrregset_t evrregset; +void +ppc_linux_nat_target::register_wp (pid_t pid, long wp_value) +{ + gdb_assert (m_dreg_interface.debugreg_p ()); - if (ptrace (PTRACE_GETEVRREGS, tid, 0, &evrregset) >= 0) - return tdesc_powerpc_e500l; + /* Our other functions should have told GDB that we only have one + hardware watchpoint with this interface. */ + gdb_assert (!m_process_info[pid].requested_wp_val.has_value ()); - /* EIO means that the PTRACE_GETEVRREGS request isn't supported. - Anything else needs to be reported. */ - else if (errno != EIO) - perror_with_name (_("Unable to fetch SPE registers")); - } + m_process_info[pid].requested_wp_val.emplace (wp_value); - struct ppc_linux_features features = ppc_linux_no_features; + mark_debug_registers_changed (pid); +} - features.wordsize = ppc_linux_target_wordsize (tid); +/* Clear the hardware watchpoint registration for the pid PID, then mark + the stale flag for all threads of the group of PID, and issue a stop + request for them. The breakpoint or watchpoint will be installed the + next time each thread is resumed. Should only be used if the debug + register interface is DEBUGREG. */ - CORE_ADDR hwcap = linux_get_hwcap (current_top_target ()); - CORE_ADDR hwcap2 = linux_get_hwcap2 (current_top_target ()); +void +ppc_linux_nat_target::clear_wp (pid_t pid) +{ + gdb_assert (m_dreg_interface.debugreg_p ()); - if (have_ptrace_getsetvsxregs - && (hwcap & PPC_FEATURE_HAS_VSX)) - { - gdb_vsxregset_t vsxregset; + auto process_it = m_process_info.find (pid); - if (ptrace (PTRACE_GETVSXREGS, tid, 0, &vsxregset) >= 0) - features.vsx = true; + gdb_assert (process_it != m_process_info.end ()); + gdb_assert (process_it->second.requested_wp_val.has_value ()); - /* EIO means that the PTRACE_GETVSXREGS request isn't supported. - Anything else needs to be reported. */ - else if (errno != EIO) - perror_with_name (_("Unable to fetch VSX registers")); - } + process_it->second.requested_wp_val.reset (); - if (have_ptrace_getvrregs - && (hwcap & PPC_FEATURE_HAS_ALTIVEC)) - { - gdb_vrregset_t vrregset; + mark_debug_registers_changed (pid); +} - if (ptrace (PTRACE_GETVRREGS, tid, 0, &vrregset) >= 0) - features.altivec = true; +/* Initialize the arch-specific thread state for LWP, if it not already + created. */ - /* EIO means that the PTRACE_GETVRREGS request isn't supported. - Anything else needs to be reported. */ - else if (errno != EIO) - perror_with_name (_("Unable to fetch AltiVec registers")); +void +ppc_linux_nat_target::init_arch_lwp_info (struct lwp_info *lp) +{ + if (lwp_arch_private_info (lp) == NULL) + { + lwp_set_arch_private_info (lp, XCNEW (struct arch_lwp_info)); + lwp_arch_private_info (lp)->debug_regs_stale = false; + lwp_arch_private_info (lp)->lwp_ptid = lp->ptid; } +} - features.isa205 = ppc_linux_has_isa205 (hwcap); +/* Get the arch-specific thread state for LWP, creating it if + necessary. */ - if ((hwcap2 & PPC_FEATURE2_DSCR) - && check_regset (tid, NT_PPC_PPR, PPC_LINUX_SIZEOF_PPRREGSET) - && check_regset (tid, NT_PPC_DSCR, PPC_LINUX_SIZEOF_DSCRREGSET)) - { - features.ppr_dscr = true; - if ((hwcap2 & PPC_FEATURE2_ARCH_2_07) - && (hwcap2 & PPC_FEATURE2_TAR) - && (hwcap2 & PPC_FEATURE2_EBB) - && check_regset (tid, NT_PPC_TAR, PPC_LINUX_SIZEOF_TARREGSET) - && check_regset (tid, NT_PPC_EBB, PPC_LINUX_SIZEOF_EBBREGSET) - && check_regset (tid, NT_PPC_PMU, PPC_LINUX_SIZEOF_PMUREGSET)) - { - features.isa207 = true; - if ((hwcap2 & PPC_FEATURE2_HTM) - && check_regset (tid, NT_PPC_TM_SPR, - PPC_LINUX_SIZEOF_TM_SPRREGSET)) - features.htm = true; - } - } +arch_lwp_info * +ppc_linux_nat_target::get_arch_lwp_info (struct lwp_info *lp) +{ + init_arch_lwp_info (lp); - return ppc_linux_match_description (features); + return lwp_arch_private_info (lp); } +void _initialize_ppc_linux_nat (); void -_initialize_ppc_linux_nat (void) +_initialize_ppc_linux_nat () { linux_target = &the_ppc_linux_nat_target; - gdb::observers::thread_exit.attach (ppc_linux_thread_exit); - /* Register the target. */ add_inf_child_target (linux_target); } diff -Nru gdb-9.1/gdb/ppc-linux-tdep.c gdb-10.2/gdb/ppc-linux-tdep.c --- gdb-9.1/gdb/ppc-linux-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/ppc-linux-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for GDB, the GNU debugger. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -250,8 +250,8 @@ struct type *valtype, struct regcache *regcache, gdb_byte *readbuf, const gdb_byte *writebuf) { - if ((TYPE_CODE (valtype) == TYPE_CODE_STRUCT - || TYPE_CODE (valtype) == TYPE_CODE_UNION) + if ((valtype->code () == TYPE_CODE_STRUCT + || valtype->code () == TYPE_CODE_UNION) && !((TYPE_LENGTH (valtype) == 16 || TYPE_LENGTH (valtype) == 8) && TYPE_VECTOR (valtype))) return RETURN_VALUE_STRUCT_CONVENTION; @@ -2155,8 +2155,9 @@ ppc_init_linux_record_tdep (&ppc64_linux_record_tdep, 8); } +void _initialize_ppc_linux_tdep (); void -_initialize_ppc_linux_tdep (void) +_initialize_ppc_linux_tdep () { /* Register for all sub-families of the POWER/PowerPC: 32-bit and 64-bit PowerPC, and the older rs6k. */ diff -Nru gdb-9.1/gdb/ppc-linux-tdep.h gdb-10.2/gdb/ppc-linux-tdep.h --- gdb-9.1/gdb/ppc-linux-tdep.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/ppc-linux-tdep.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for GDB, the GNU debugger. - Copyright (C) 2008-2020 Free Software Foundation, Inc. + Copyright (C) 2008-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/ppc-nbsd-nat.c gdb-10.2/gdb/ppc-nbsd-nat.c --- gdb-9.1/gdb/ppc-nbsd-nat.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/ppc-nbsd-nat.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Native-dependent code for NetBSD/powerpc. - Copyright (C) 2002-2020 Free Software Foundation, Inc. + Copyright (C) 2002-2021 Free Software Foundation, Inc. Contributed by Wasabi Systems, Inc. @@ -19,6 +19,8 @@ You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ +/* We define this to get types like register_t. */ +#define _KERNTYPES #include "defs.h" #include <sys/types.h> @@ -35,8 +37,9 @@ #include "ppc-nbsd-tdep.h" #include "bsd-kvm.h" #include "inf-ptrace.h" +#include "nbsd-nat.h" -struct ppc_nbsd_nat_target final : public inf_ptrace_target +struct ppc_nbsd_nat_target final : public nbsd_nat_target { void fetch_registers (struct regcache *, int) override; void store_registers (struct regcache *, int) override; @@ -89,12 +92,13 @@ { struct gdbarch *gdbarch = regcache->arch (); pid_t pid = regcache->ptid ().pid (); + int lwp = regcache->ptid ().lwp (); if (regnum == -1 || getregs_supplies (gdbarch, regnum)) { struct reg regs; - if (ptrace (PT_GETREGS, pid, (PTRACE_TYPE_ARG3) ®s, 0) == -1) + if (ptrace (PT_GETREGS, pid, (PTRACE_TYPE_ARG3) ®s, lwp) == -1) perror_with_name (_("Couldn't get registers")); ppc_supply_gregset (&ppcnbsd_gregset, regcache, @@ -105,7 +109,7 @@ { struct fpreg fpregs; - if (ptrace (PT_GETFPREGS, pid, (PTRACE_TYPE_ARG3) &fpregs, 0) == -1) + if (ptrace (PT_GETFPREGS, pid, (PTRACE_TYPE_ARG3) &fpregs, lwp) == -1) perror_with_name (_("Couldn't get FP registers")); ppc_supply_fpregset (&ppcnbsd_fpregset, regcache, @@ -118,18 +122,19 @@ { struct gdbarch *gdbarch = regcache->arch (); pid_t pid = regcache->ptid ().pid (); + int lwp = regcache->ptid ().lwp (); if (regnum == -1 || getregs_supplies (gdbarch, regnum)) { struct reg regs; - if (ptrace (PT_GETREGS, pid, (PTRACE_TYPE_ARG3) ®s, 0) == -1) + if (ptrace (PT_GETREGS, pid, (PTRACE_TYPE_ARG3) ®s, lwp) == -1) perror_with_name (_("Couldn't get registers")); ppc_collect_gregset (&ppcnbsd_gregset, regcache, regnum, ®s, sizeof regs); - if (ptrace (PT_SETREGS, pid, (PTRACE_TYPE_ARG3) ®s, 0) == -1) + if (ptrace (PT_SETREGS, pid, (PTRACE_TYPE_ARG3) ®s, lwp) == -1) perror_with_name (_("Couldn't write registers")); } @@ -137,13 +142,13 @@ { struct fpreg fpregs; - if (ptrace (PT_GETFPREGS, pid, (PTRACE_TYPE_ARG3) &fpregs, 0) == -1) + if (ptrace (PT_GETFPREGS, pid, (PTRACE_TYPE_ARG3) &fpregs, lwp) == -1) perror_with_name (_("Couldn't get FP registers")); ppc_collect_fpregset (&ppcnbsd_fpregset, regcache, regnum, &fpregs, sizeof fpregs); - if (ptrace (PT_SETFPREGS, pid, (PTRACE_TYPE_ARG3) &fpregs, 0) == -1) + if (ptrace (PT_SETFPREGS, pid, (PTRACE_TYPE_ARG3) &fpregs, lwp) == -1) perror_with_name (_("Couldn't set FP registers")); } } @@ -179,8 +184,9 @@ return 1; } +void _initialize_ppcnbsd_nat (); void -_initialize_ppcnbsd_nat (void) +_initialize_ppcnbsd_nat () { /* Support debugging kernel virtual memory images. */ bsd_kvm_add_target (ppcnbsd_supply_pcb); diff -Nru gdb-9.1/gdb/ppc-nbsd-tdep.c gdb-10.2/gdb/ppc-nbsd-tdep.c --- gdb-9.1/gdb/ppc-nbsd-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/ppc-nbsd-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for NetBSD/powerpc. - Copyright (C) 2002-2020 Free Software Foundation, Inc. + Copyright (C) 2002-2021 Free Software Foundation, Inc. Contributed by Wasabi Systems, Inc. @@ -28,7 +28,8 @@ #include "tramp-frame.h" #include "ppc-tdep.h" -#include "ppc-nbsd-tdep.h" +#include "nbsd-tdep.h" +#include "ppc-tdep.h" #include "solib-svr4.h" /* Register offsets from <machine/reg.h>. */ @@ -74,8 +75,8 @@ gdb_byte *readbuf, const gdb_byte *writebuf) { #if 0 - if ((TYPE_CODE (valtype) == TYPE_CODE_STRUCT - || TYPE_CODE (valtype) == TYPE_CODE_UNION) + if ((valtype->code () == TYPE_CODE_STRUCT + || valtype->code () == TYPE_CODE_UNION) && !((TYPE_LENGTH (valtype) == 16 || TYPE_LENGTH (valtype) == 8) && TYPE_VECTOR (valtype)) && !(TYPE_LENGTH (valtype) == 1 @@ -173,6 +174,8 @@ ppcnbsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) { + nbsd_init_abi (info, gdbarch); + /* For NetBSD, this is an on again, off again thing. Some systems do use the broken struct convention, and some don't. */ set_gdbarch_return_value (gdbarch, ppcnbsd_return_value); @@ -188,8 +191,9 @@ tramp_frame_prepend_unwinder (gdbarch, &ppcnbsd2_sigtramp); } +void _initialize_ppcnbsd_tdep (); void -_initialize_ppcnbsd_tdep (void) +_initialize_ppcnbsd_tdep () { gdbarch_register_osabi (bfd_arch_powerpc, 0, GDB_OSABI_NETBSD, ppcnbsd_init_abi); diff -Nru gdb-9.1/gdb/ppc-nbsd-tdep.h gdb-10.2/gdb/ppc-nbsd-tdep.h --- gdb-9.1/gdb/ppc-nbsd-tdep.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/ppc-nbsd-tdep.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for NetBSD/powerpc. - Copyright (C) 2004-2020 Free Software Foundation, Inc. + Copyright (C) 2004-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -29,4 +29,4 @@ extern const struct regset ppcnbsd_gregset; extern const struct regset ppcnbsd_fpregset; -#endif /* ppc-nbsd-tdep.h */ +#endif /* PPC_NBSD_TDEP_H */ diff -Nru gdb-9.1/gdb/ppc-obsd-nat.c gdb-10.2/gdb/ppc-obsd-nat.c --- gdb-9.1/gdb/ppc-obsd-nat.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/ppc-obsd-nat.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Native-dependent code for OpenBSD/powerpc. - Copyright (C) 2004-2020 Free Software Foundation, Inc. + Copyright (C) 2004-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -187,8 +187,9 @@ return 1; } +void _initialize_ppcobsd_nat (); void -_initialize_ppcobsd_nat (void) +_initialize_ppcobsd_nat () { add_inf_child_target (&the_ppc_obsd_nat_target); diff -Nru gdb-9.1/gdb/ppc-obsd-tdep.c gdb-10.2/gdb/ppc-obsd-tdep.c --- gdb-9.1/gdb/ppc-obsd-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/ppc-obsd-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for OpenBSD/powerpc. - Copyright (C) 2004-2020 Free Software Foundation, Inc. + Copyright (C) 2004-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -261,8 +261,9 @@ frame_unwind_append_unwinder (gdbarch, &ppcobsd_sigtramp_frame_unwind); } +void _initialize_ppcobsd_tdep (); void -_initialize_ppcobsd_tdep (void) +_initialize_ppcobsd_tdep () { gdbarch_register_osabi (bfd_arch_rs6000, 0, GDB_OSABI_OPENBSD, ppcobsd_init_abi); diff -Nru gdb-9.1/gdb/ppc-obsd-tdep.h gdb-10.2/gdb/ppc-obsd-tdep.h --- gdb-9.1/gdb/ppc-obsd-tdep.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/ppc-obsd-tdep.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for OpenBSD/powerpc. - Copyright (C) 2004-2020 Free Software Foundation, Inc. + Copyright (C) 2004-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/ppc-ravenscar-thread.c gdb-10.2/gdb/ppc-ravenscar-thread.c --- gdb-9.1/gdb/ppc-ravenscar-thread.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/ppc-ravenscar-thread.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Ravenscar PowerPC target support. - Copyright (C) 2011-2020 Free Software Foundation, Inc. + Copyright (C) 2011-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/ppc-ravenscar-thread.h gdb-10.2/gdb/ppc-ravenscar-thread.h --- gdb-9.1/gdb/ppc-ravenscar-thread.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/ppc-ravenscar-thread.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Ravenscar PowerPC target support. - Copyright (C) 2012-2020 Free Software Foundation, Inc. + Copyright (C) 2012-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/ppc-sysv-tdep.c gdb-10.2/gdb/ppc-sysv-tdep.c --- gdb-9.1/gdb/ppc-sysv-tdep.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/ppc-sysv-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,7 +1,7 @@ /* Target-dependent code for PowerPC systems using the SVR4 ABI for GDB, the GNU debugger. - Copyright (C) 2000-2020 Free Software Foundation, Inc. + Copyright (C) 2000-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -40,10 +40,10 @@ { ftype = check_typedef (ftype); - if (TYPE_CODE (ftype) == TYPE_CODE_PTR) + if (ftype->code () == TYPE_CODE_PTR) ftype = check_typedef (TYPE_TARGET_TYPE (ftype)); - return (TYPE_CODE (ftype) == TYPE_CODE_FUNC + return (ftype->code () == TYPE_CODE_FUNC && TYPE_CALLING_CONVENTION (ftype) == DW_CC_GDB_IBM_OpenCL); } @@ -124,7 +124,7 @@ int len = TYPE_LENGTH (type); const bfd_byte *val = value_contents (arg); - if (TYPE_CODE (type) == TYPE_CODE_FLT && len <= 8 + if (type->code () == TYPE_CODE_FLT && len <= 8 && !tdep->soft_float) { /* Floating point value converted to "double" then @@ -164,7 +164,7 @@ argoffset += len; } } - else if (TYPE_CODE (type) == TYPE_CODE_FLT + else if (type->code () == TYPE_CODE_FLT && len == 16 && !tdep->soft_float && (gdbarch_long_double_format (gdbarch) @@ -191,9 +191,9 @@ } } else if (len == 8 - && (TYPE_CODE (type) == TYPE_CODE_INT /* long long */ - || TYPE_CODE (type) == TYPE_CODE_FLT /* double */ - || (TYPE_CODE (type) == TYPE_CODE_DECFLOAT + && (type->code () == TYPE_CODE_INT /* long long */ + || type->code () == TYPE_CODE_FLT /* double */ + || (type->code () == TYPE_CODE_DECFLOAT && tdep->soft_float))) { /* "long long" or soft-float "double" or "_Decimal64" @@ -227,10 +227,10 @@ } } else if (len == 16 - && ((TYPE_CODE (type) == TYPE_CODE_FLT + && ((type->code () == TYPE_CODE_FLT && (gdbarch_long_double_format (gdbarch) == floatformats_ibm_long_double)) - || (TYPE_CODE (type) == TYPE_CODE_DECFLOAT + || (type->code () == TYPE_CODE_DECFLOAT && tdep->soft_float))) { /* Soft-float IBM long double or _Decimal128 passed in @@ -260,7 +260,7 @@ greg += 4; } } - else if (TYPE_CODE (type) == TYPE_CODE_DECFLOAT && len <= 8 + else if (type->code () == TYPE_CODE_DECFLOAT && len <= 8 && !tdep->soft_float) { /* 32-bit and 64-bit decimal floats go in f1 .. f8. They can @@ -299,7 +299,7 @@ argoffset += len; } } - else if (TYPE_CODE (type) == TYPE_CODE_DECFLOAT && len == 16 + else if (type->code () == TYPE_CODE_DECFLOAT && len == 16 && !tdep->soft_float) { /* 128-bit decimal floats go in f2 .. f7, always in even/odd @@ -334,7 +334,7 @@ freg += 2; } else if (len < 16 - && TYPE_CODE (type) == TYPE_CODE_ARRAY + && type->code () == TYPE_CODE_ARRAY && TYPE_VECTOR (type) && opencl_abi) { @@ -347,7 +347,7 @@ { const gdb_byte *elval = val + i * TYPE_LENGTH (eltype); - if (TYPE_CODE (eltype) == TYPE_CODE_FLT && !tdep->soft_float) + if (eltype->code () == TYPE_CODE_FLT && !tdep->soft_float) { if (freg <= 8) { @@ -421,7 +421,7 @@ } } else if (len >= 16 - && TYPE_CODE (type) == TYPE_CODE_ARRAY + && type->code () == TYPE_CODE_ARRAY && TYPE_VECTOR (type) && opencl_abi) { @@ -450,7 +450,7 @@ } } else if (len == 16 - && TYPE_CODE (type) == TYPE_CODE_ARRAY + && type->code () == TYPE_CODE_ARRAY && TYPE_VECTOR (type) && tdep->vector_abi == POWERPC_VEC_ALTIVEC) { @@ -471,7 +471,7 @@ } } else if (len == 8 - && TYPE_CODE (type) == TYPE_CODE_ARRAY + && type->code () == TYPE_CODE_ARRAY && TYPE_VECTOR (type) && tdep->vector_abi == POWERPC_VEC_SPE) { @@ -503,12 +503,12 @@ gdb_byte word[PPC_MAX_REGISTER_SIZE]; memset (word, 0, PPC_MAX_REGISTER_SIZE); if (len > tdep->wordsize - || TYPE_CODE (type) == TYPE_CODE_STRUCT - || TYPE_CODE (type) == TYPE_CODE_UNION) + || type->code () == TYPE_CODE_STRUCT + || type->code () == TYPE_CODE_UNION) { /* Structs and large values are put in an aligned stack slot ... */ - if (TYPE_CODE (type) == TYPE_CODE_ARRAY + if (type->code () == TYPE_CODE_ARRAY && TYPE_VECTOR (type) && len >= 16) structoffset = align_up (structoffset, 16); @@ -523,7 +523,7 @@ sp + structoffset); structoffset += len; } - else if (TYPE_CODE (type) == TYPE_CODE_INT) + else if (type->code () == TYPE_CODE_INT) /* Sign or zero extend the "int" into a "word". */ store_unsigned_integer (word, tdep->wordsize, byte_order, unpack_long (type, val)); @@ -599,7 +599,7 @@ { struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); - gdb_assert (TYPE_CODE (valtype) == TYPE_CODE_DECFLOAT); + gdb_assert (valtype->code () == TYPE_CODE_DECFLOAT); /* 32-bit and 64-bit decimal floats in f1. */ if (TYPE_LENGTH (valtype) <= 8) @@ -681,7 +681,7 @@ gdb_assert (tdep->wordsize == 4); - if (TYPE_CODE (type) == TYPE_CODE_FLT + if (type->code () == TYPE_CODE_FLT && TYPE_LENGTH (type) <= 8 && !tdep->soft_float) { @@ -706,7 +706,7 @@ } return RETURN_VALUE_REGISTER_CONVENTION; } - if (TYPE_CODE (type) == TYPE_CODE_FLT + if (type->code () == TYPE_CODE_FLT && TYPE_LENGTH (type) == 16 && !tdep->soft_float && (gdbarch_long_double_format (gdbarch) @@ -726,10 +726,10 @@ return RETURN_VALUE_REGISTER_CONVENTION; } if (TYPE_LENGTH (type) == 16 - && ((TYPE_CODE (type) == TYPE_CODE_FLT + && ((type->code () == TYPE_CODE_FLT && (gdbarch_long_double_format (gdbarch) == floatformats_ibm_long_double)) - || (TYPE_CODE (type) == TYPE_CODE_DECFLOAT && tdep->soft_float))) + || (type->code () == TYPE_CODE_DECFLOAT && tdep->soft_float))) { /* Soft-float IBM long double or _Decimal128 stored in r3, r4, r5, r6. */ @@ -749,9 +749,9 @@ } return RETURN_VALUE_REGISTER_CONVENTION; } - if ((TYPE_CODE (type) == TYPE_CODE_INT && TYPE_LENGTH (type) == 8) - || (TYPE_CODE (type) == TYPE_CODE_FLT && TYPE_LENGTH (type) == 8) - || (TYPE_CODE (type) == TYPE_CODE_DECFLOAT && TYPE_LENGTH (type) == 8 + if ((type->code () == TYPE_CODE_INT && TYPE_LENGTH (type) == 8) + || (type->code () == TYPE_CODE_FLT && TYPE_LENGTH (type) == 8) + || (type->code () == TYPE_CODE_DECFLOAT && TYPE_LENGTH (type) == 8 && tdep->soft_float)) { if (readbuf) @@ -770,15 +770,15 @@ } return RETURN_VALUE_REGISTER_CONVENTION; } - if (TYPE_CODE (type) == TYPE_CODE_DECFLOAT && !tdep->soft_float) + if (type->code () == TYPE_CODE_DECFLOAT && !tdep->soft_float) return get_decimal_float_return_value (gdbarch, type, regcache, readbuf, writebuf); - else if ((TYPE_CODE (type) == TYPE_CODE_INT - || TYPE_CODE (type) == TYPE_CODE_CHAR - || TYPE_CODE (type) == TYPE_CODE_BOOL - || TYPE_CODE (type) == TYPE_CODE_PTR + else if ((type->code () == TYPE_CODE_INT + || type->code () == TYPE_CODE_CHAR + || type->code () == TYPE_CODE_BOOL + || type->code () == TYPE_CODE_PTR || TYPE_IS_REFERENCE (type) - || TYPE_CODE (type) == TYPE_CODE_ENUM) + || type->code () == TYPE_CODE_ENUM) && TYPE_LENGTH (type) <= tdep->wordsize) { if (readbuf) @@ -803,7 +803,7 @@ } /* OpenCL vectors < 16 bytes are returned as distinct scalars in f1..f2 or r3..r10. */ - if (TYPE_CODE (type) == TYPE_CODE_ARRAY + if (type->code () == TYPE_CODE_ARRAY && TYPE_VECTOR (type) && TYPE_LENGTH (type) < 16 && opencl_abi) @@ -815,7 +815,7 @@ { int offset = i * TYPE_LENGTH (eltype); - if (TYPE_CODE (eltype) == TYPE_CODE_FLT) + if (eltype->code () == TYPE_CODE_FLT) { int regnum = tdep->ppc_fp0_regnum + 1 + i; gdb_byte regval[PPC_MAX_REGISTER_SIZE]; @@ -857,7 +857,7 @@ return RETURN_VALUE_REGISTER_CONVENTION; } /* OpenCL vectors >= 16 bytes are returned in v2..v9. */ - if (TYPE_CODE (type) == TYPE_CODE_ARRAY + if (type->code () == TYPE_CODE_ARRAY && TYPE_VECTOR (type) && TYPE_LENGTH (type) >= 16 && opencl_abi) @@ -879,7 +879,7 @@ return RETURN_VALUE_REGISTER_CONVENTION; } if (TYPE_LENGTH (type) == 16 - && TYPE_CODE (type) == TYPE_CODE_ARRAY + && type->code () == TYPE_CODE_ARRAY && TYPE_VECTOR (type) && tdep->vector_abi == POWERPC_VEC_ALTIVEC) { @@ -896,7 +896,7 @@ return RETURN_VALUE_REGISTER_CONVENTION; } if (TYPE_LENGTH (type) == 16 - && TYPE_CODE (type) == TYPE_CODE_ARRAY + && type->code () == TYPE_CODE_ARRAY && TYPE_VECTOR (type) && tdep->vector_abi == POWERPC_VEC_GENERIC) { @@ -920,7 +920,7 @@ return RETURN_VALUE_REGISTER_CONVENTION; } if (TYPE_LENGTH (type) == 8 - && TYPE_CODE (type) == TYPE_CODE_ARRAY + && type->code () == TYPE_CODE_ARRAY && TYPE_VECTOR (type) && tdep->vector_abi == POWERPC_VEC_SPE) { @@ -1076,25 +1076,25 @@ { type = check_typedef (type); - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_FLT: case TYPE_CODE_DECFLOAT: if (!*field_type) *field_type = type; - if (TYPE_CODE (*field_type) == TYPE_CODE (type) + if ((*field_type)->code () == type->code () && TYPE_LENGTH (*field_type) == TYPE_LENGTH (type)) return 1; break; case TYPE_CODE_COMPLEX: type = TYPE_TARGET_TYPE (type); - if (TYPE_CODE (type) == TYPE_CODE_FLT - || TYPE_CODE (type) == TYPE_CODE_DECFLOAT) + if (type->code () == TYPE_CODE_FLT + || type->code () == TYPE_CODE_DECFLOAT) { if (!*field_type) *field_type = type; - if (TYPE_CODE (*field_type) == TYPE_CODE (type) + if ((*field_type)->code () == type->code () && TYPE_LENGTH (*field_type) == TYPE_LENGTH (type)) return 2; } @@ -1105,7 +1105,7 @@ { if (!*field_type) *field_type = type; - if (TYPE_CODE (*field_type) == TYPE_CODE (type) + if ((*field_type)->code () == type->code () && TYPE_LENGTH (*field_type) == TYPE_LENGTH (type)) return 1; } @@ -1138,19 +1138,19 @@ LONGEST count = 0; int i; - for (i = 0; i < TYPE_NFIELDS (type); i++) + for (i = 0; i < type->num_fields (); i++) { LONGEST sub_count; - if (field_is_static (&TYPE_FIELD (type, i))) + if (field_is_static (&type->field (i))) continue; sub_count = ppc64_aggregate_candidate - (TYPE_FIELD_TYPE (type, i), field_type); + (type->field (i).type (), field_type); if (sub_count == -1) return -1; - if (TYPE_CODE (type) == TYPE_CODE_STRUCT) + if (type->code () == TYPE_CODE_STRUCT) count += sub_count; else count = std::max (count, sub_count); @@ -1184,17 +1184,17 @@ { /* Complex types at the top level are treated separately. However, complex types can be elements of homogeneous aggregates. */ - if (TYPE_CODE (type) == TYPE_CODE_STRUCT - || TYPE_CODE (type) == TYPE_CODE_UNION - || (TYPE_CODE (type) == TYPE_CODE_ARRAY && !TYPE_VECTOR (type))) + if (type->code () == TYPE_CODE_STRUCT + || type->code () == TYPE_CODE_UNION + || (type->code () == TYPE_CODE_ARRAY && !TYPE_VECTOR (type))) { struct type *field_type = NULL; LONGEST field_count = ppc64_aggregate_candidate (type, &field_type); if (field_count > 0) { - int n_regs = ((TYPE_CODE (field_type) == TYPE_CODE_FLT - || TYPE_CODE (field_type) == TYPE_CODE_DECFLOAT)? + int n_regs = ((field_type->code () == TYPE_CODE_FLT + || field_type->code () == TYPE_CODE_DECFLOAT)? (TYPE_LENGTH (field_type) + 7) >> 3 : 1); /* The ELFv2 ABI allows homogeneous aggregates to occupy @@ -1323,7 +1323,7 @@ return; if (TYPE_LENGTH (type) <= 8 - && TYPE_CODE (type) == TYPE_CODE_FLT) + && type->code () == TYPE_CODE_FLT) { /* Floats and doubles go in f1 .. f13. 32-bit floats are converted to double first. */ @@ -1340,7 +1340,7 @@ argpos->freg++; } else if (TYPE_LENGTH (type) <= 8 - && TYPE_CODE (type) == TYPE_CODE_DECFLOAT) + && type->code () == TYPE_CODE_DECFLOAT) { /* Floats and doubles go in f1 .. f13. 32-bit decimal floats are placed in the least significant word. */ @@ -1359,7 +1359,7 @@ argpos->freg++; } else if (TYPE_LENGTH (type) == 16 - && TYPE_CODE (type) == TYPE_CODE_FLT + && type->code () == TYPE_CODE_FLT && (gdbarch_long_double_format (gdbarch) == floatformats_ibm_long_double)) { @@ -1376,7 +1376,7 @@ argpos->freg += 2; } else if (TYPE_LENGTH (type) == 16 - && TYPE_CODE (type) == TYPE_CODE_DECFLOAT) + && type->code () == TYPE_CODE_DECFLOAT) { /* 128-bit decimal floating-point values are stored in and even/odd pair of FPRs, with the even FPR holding the most significant half. */ @@ -1421,14 +1421,14 @@ { struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); - if (TYPE_CODE (type) == TYPE_CODE_FLT - || TYPE_CODE (type) == TYPE_CODE_DECFLOAT) + if (type->code () == TYPE_CODE_FLT + || type->code () == TYPE_CODE_DECFLOAT) { /* Floating-point scalars are passed in floating-point registers. */ ppc64_sysv_abi_push_val (gdbarch, val, TYPE_LENGTH (type), 0, argpos); ppc64_sysv_abi_push_freg (gdbarch, type, val, argpos); } - else if (TYPE_CODE (type) == TYPE_CODE_ARRAY && TYPE_VECTOR (type) + else if (type->code () == TYPE_CODE_ARRAY && TYPE_VECTOR (type) && tdep->vector_abi == POWERPC_VEC_ALTIVEC && TYPE_LENGTH (type) == 16) { @@ -1436,7 +1436,7 @@ ppc64_sysv_abi_push_val (gdbarch, val, TYPE_LENGTH (type), 16, argpos); ppc64_sysv_abi_push_vreg (gdbarch, val, argpos); } - else if (TYPE_CODE (type) == TYPE_CODE_ARRAY && TYPE_VECTOR (type) + else if (type->code () == TYPE_CODE_ARRAY && TYPE_VECTOR (type) && TYPE_LENGTH (type) >= 16) { /* Non-Altivec vectors are passed by reference. */ @@ -1450,11 +1450,11 @@ /* ... and pass a pointer to the copy as parameter. */ ppc64_sysv_abi_push_integer (gdbarch, addr, argpos); } - else if ((TYPE_CODE (type) == TYPE_CODE_INT - || TYPE_CODE (type) == TYPE_CODE_ENUM - || TYPE_CODE (type) == TYPE_CODE_BOOL - || TYPE_CODE (type) == TYPE_CODE_CHAR - || TYPE_CODE (type) == TYPE_CODE_PTR + else if ((type->code () == TYPE_CODE_INT + || type->code () == TYPE_CODE_ENUM + || type->code () == TYPE_CODE_BOOL + || type->code () == TYPE_CODE_CHAR + || type->code () == TYPE_CODE_PTR || TYPE_IS_REFERENCE (type)) && TYPE_LENGTH (type) <= tdep->wordsize) { @@ -1467,14 +1467,14 @@ /* Convert any function code addresses into descriptors. */ if (tdep->elf_abi == POWERPC_ELF_V1 - && (TYPE_CODE (type) == TYPE_CODE_PTR - || TYPE_CODE (type) == TYPE_CODE_REF)) + && (type->code () == TYPE_CODE_PTR + || type->code () == TYPE_CODE_REF)) { struct type *target_type = check_typedef (TYPE_TARGET_TYPE (type)); - if (TYPE_CODE (target_type) == TYPE_CODE_FUNC - || TYPE_CODE (target_type) == TYPE_CODE_METHOD) + if (target_type->code () == TYPE_CODE_FUNC + || target_type->code () == TYPE_CODE_METHOD) { CORE_ADDR desc = word; @@ -1493,14 +1493,14 @@ /* The ABI (version 1.9) specifies that structs containing a single floating-point value, at any level of nesting of single-member structs, are passed in floating-point registers. */ - if (TYPE_CODE (type) == TYPE_CODE_STRUCT - && TYPE_NFIELDS (type) == 1) + if (type->code () == TYPE_CODE_STRUCT + && type->num_fields () == 1) { - while (TYPE_CODE (type) == TYPE_CODE_STRUCT - && TYPE_NFIELDS (type) == 1) - type = check_typedef (TYPE_FIELD_TYPE (type, 0)); + while (type->code () == TYPE_CODE_STRUCT + && type->num_fields () == 1) + type = check_typedef (type->field (0).type ()); - if (TYPE_CODE (type) == TYPE_CODE_FLT) + if (type->code () == TYPE_CODE_FLT) ppc64_sysv_abi_push_freg (gdbarch, type, val, argpos); } @@ -1516,10 +1516,10 @@ { const gdb_byte *elval = val + i * TYPE_LENGTH (eltype); - if (TYPE_CODE (eltype) == TYPE_CODE_FLT - || TYPE_CODE (eltype) == TYPE_CODE_DECFLOAT) + if (eltype->code () == TYPE_CODE_FLT + || eltype->code () == TYPE_CODE_DECFLOAT) ppc64_sysv_abi_push_freg (gdbarch, eltype, elval, argpos); - else if (TYPE_CODE (eltype) == TYPE_CODE_ARRAY + else if (eltype->code () == TYPE_CODE_ARRAY && TYPE_VECTOR (eltype) && tdep->vector_abi == POWERPC_VEC_ALTIVEC && TYPE_LENGTH (eltype) == 16) @@ -1635,7 +1635,7 @@ struct type *type = check_typedef (value_type (arg)); const bfd_byte *val = value_contents (arg); - if (TYPE_CODE (type) == TYPE_CODE_COMPLEX) + if (type->code () == TYPE_CODE_COMPLEX) { /* Complex types are passed as if two independent scalars. */ struct type *eltype = check_typedef (TYPE_TARGET_TYPE (type)); @@ -1644,7 +1644,7 @@ ppc64_sysv_abi_push_param (gdbarch, eltype, val + TYPE_LENGTH (eltype), &argpos); } - else if (TYPE_CODE (type) == TYPE_CODE_ARRAY && TYPE_VECTOR (type) + else if (type->code () == TYPE_CODE_ARRAY && TYPE_VECTOR (type) && opencl_abi) { /* OpenCL vectors shorter than 16 bytes are passed as if @@ -1704,7 +1704,7 @@ struct type *ftype = check_typedef (value_type (function)); CORE_ADDR desc_addr = value_as_address (function); - if (TYPE_CODE (ftype) == TYPE_CODE_PTR + if (ftype->code () == TYPE_CODE_PTR || convert_code_addr_to_desc_addr (func_addr, &desc_addr)) { /* The TOC is the second double word in the descriptor. */ @@ -1742,10 +1742,10 @@ struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); /* Integers live in GPRs starting at r3. */ - if ((TYPE_CODE (valtype) == TYPE_CODE_INT - || TYPE_CODE (valtype) == TYPE_CODE_ENUM - || TYPE_CODE (valtype) == TYPE_CODE_CHAR - || TYPE_CODE (valtype) == TYPE_CODE_BOOL) + if ((valtype->code () == TYPE_CODE_INT + || valtype->code () == TYPE_CODE_ENUM + || valtype->code () == TYPE_CODE_CHAR + || valtype->code () == TYPE_CODE_BOOL) && TYPE_LENGTH (valtype) <= 8) { int regnum = tdep->ppc_gp0_regnum + 3 + index; @@ -1772,7 +1772,7 @@ /* Floats and doubles go in f1 .. f13. 32-bit floats are converted to double first. */ if (TYPE_LENGTH (valtype) <= 8 - && TYPE_CODE (valtype) == TYPE_CODE_FLT) + && valtype->code () == TYPE_CODE_FLT) { int regnum = tdep->ppc_fp0_regnum + 1 + index; struct type *regtype = register_type (gdbarch, regnum); @@ -1794,7 +1794,7 @@ /* Floats and doubles go in f1 .. f13. 32-bit decimal floats are placed in the least significant word. */ if (TYPE_LENGTH (valtype) <= 8 - && TYPE_CODE (valtype) == TYPE_CODE_DECFLOAT) + && valtype->code () == TYPE_CODE_DECFLOAT) { int regnum = tdep->ppc_fp0_regnum + 1 + index; int offset = 0; @@ -1813,7 +1813,7 @@ /* IBM long double stored in two consecutive FPRs. */ if (TYPE_LENGTH (valtype) == 16 - && TYPE_CODE (valtype) == TYPE_CODE_FLT + && valtype->code () == TYPE_CODE_FLT && (gdbarch_long_double_format (gdbarch) == floatformats_ibm_long_double)) { @@ -1835,7 +1835,7 @@ /* 128-bit decimal floating-point values are stored in an even/odd pair of FPRs, with the even FPR holding the most significant half. */ if (TYPE_LENGTH (valtype) == 16 - && TYPE_CODE (valtype) == TYPE_CODE_DECFLOAT) + && valtype->code () == TYPE_CODE_DECFLOAT) { int regnum = tdep->ppc_fp0_regnum + 2 + 2 * index; int lopart = gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG ? 8 : 0; @@ -1856,7 +1856,7 @@ /* AltiVec vectors are returned in VRs starting at v2. */ if (TYPE_LENGTH (valtype) == 16 - && TYPE_CODE (valtype) == TYPE_CODE_ARRAY && TYPE_VECTOR (valtype) + && valtype->code () == TYPE_CODE_ARRAY && TYPE_VECTOR (valtype) && tdep->vector_abi == POWERPC_VEC_ALTIVEC) { int regnum = tdep->ppc_vr0_regnum + 2 + index; @@ -1870,7 +1870,7 @@ /* Short vectors are returned in GPRs starting at r3. */ if (TYPE_LENGTH (valtype) <= 8 - && TYPE_CODE (valtype) == TYPE_CODE_ARRAY && TYPE_VECTOR (valtype)) + && valtype->code () == TYPE_CODE_ARRAY && TYPE_VECTOR (valtype)) { int regnum = tdep->ppc_gp0_regnum + 3 + index; int offset = 0; @@ -1917,7 +1917,7 @@ gdb_assert (ppc_floating_point_unit_p (gdbarch)); /* Complex types are returned as if two independent scalars. */ - if (TYPE_CODE (valtype) == TYPE_CODE_COMPLEX) + if (valtype->code () == TYPE_CODE_COMPLEX) { eltype = check_typedef (TYPE_TARGET_TYPE (valtype)); @@ -1938,7 +1938,7 @@ /* OpenCL vectors shorter than 16 bytes are returned as if a series of independent scalars; OpenCL vectors 16 bytes or longer are returned as if a series of AltiVec vectors. */ - if (TYPE_CODE (valtype) == TYPE_CODE_ARRAY && TYPE_VECTOR (valtype) + if (valtype->code () == TYPE_CODE_ARRAY && TYPE_VECTOR (valtype) && opencl_abi) { if (TYPE_LENGTH (valtype) < 16) @@ -1962,7 +1962,7 @@ } /* All pointers live in r3. */ - if (TYPE_CODE (valtype) == TYPE_CODE_PTR || TYPE_IS_REFERENCE (valtype)) + if (valtype->code () == TYPE_CODE_PTR || TYPE_IS_REFERENCE (valtype)) { int regnum = tdep->ppc_gp0_regnum + 3; @@ -1974,10 +1974,10 @@ } /* Small character arrays are returned, right justified, in r3. */ - if (TYPE_CODE (valtype) == TYPE_CODE_ARRAY + if (valtype->code () == TYPE_CODE_ARRAY && !TYPE_VECTOR (valtype) && TYPE_LENGTH (valtype) <= 8 - && TYPE_CODE (TYPE_TARGET_TYPE (valtype)) == TYPE_CODE_INT + && TYPE_TARGET_TYPE (valtype)->code () == TYPE_CODE_INT && TYPE_LENGTH (TYPE_TARGET_TYPE (valtype)) == 1) { int regnum = tdep->ppc_gp0_regnum + 3; @@ -1996,9 +1996,9 @@ aggregates are returned in registers. */ if (tdep->elf_abi == POWERPC_ELF_V2 && ppc64_elfv2_abi_homogeneous_aggregate (valtype, &eltype, &nelt) - && (TYPE_CODE (eltype) == TYPE_CODE_FLT - || TYPE_CODE (eltype) == TYPE_CODE_DECFLOAT - || (TYPE_CODE (eltype) == TYPE_CODE_ARRAY + && (eltype->code () == TYPE_CODE_FLT + || eltype->code () == TYPE_CODE_DECFLOAT + || (eltype->code () == TYPE_CODE_ARRAY && TYPE_VECTOR (eltype) && tdep->vector_abi == POWERPC_VEC_ALTIVEC && TYPE_LENGTH (eltype) == 16))) @@ -2022,9 +2022,9 @@ returned in registers r3:r4. */ if (tdep->elf_abi == POWERPC_ELF_V2 && TYPE_LENGTH (valtype) <= 16 - && (TYPE_CODE (valtype) == TYPE_CODE_STRUCT - || TYPE_CODE (valtype) == TYPE_CODE_UNION - || (TYPE_CODE (valtype) == TYPE_CODE_ARRAY + && (valtype->code () == TYPE_CODE_STRUCT + || valtype->code () == TYPE_CODE_UNION + || (valtype->code () == TYPE_CODE_ARRAY && !TYPE_VECTOR (valtype)))) { int n_regs = ((TYPE_LENGTH (valtype) + tdep->wordsize - 1) diff -Nru gdb-9.1/gdb/ppc-tdep.h gdb-10.2/gdb/ppc-tdep.h --- gdb-9.1/gdb/ppc-tdep.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/ppc-tdep.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for GDB, the GNU debugger. - Copyright (C) 2000-2020 Free Software Foundation, Inc. + Copyright (C) 2000-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/printcmd.c gdb-10.2/gdb/printcmd.c --- gdb-9.1/gdb/printcmd.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/printcmd.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Print values for GNU debugger GDB. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -116,13 +116,27 @@ static int current_display_number; +/* Last allocated display number. */ + +static int display_number; + struct display { - /* Chain link to next auto-display item. */ - struct display *next; + display (const char *exp_string_, expression_up &&exp_, + const struct format_data &format_, struct program_space *pspace_, + const struct block *block_) + : exp_string (exp_string_), + exp (std::move (exp_)), + number (++display_number), + format (format_), + pspace (pspace_), + block (block_), + enabled_p (true) + { + } /* The expression as the user typed it. */ - char *exp_string; + std::string exp_string; /* Expression to be evaluated and displayed. */ expression_up exp; @@ -140,27 +154,13 @@ const struct block *block; /* Status of this display (enabled or disabled). */ - int enabled_p; + bool enabled_p; }; -/* Chain of expressions whose values should be displayed - automatically each time the program stops. */ - -static struct display *display_chain; +/* Expressions whose values should be displayed automatically each + time the program stops. */ -static int display_number; - -/* Walk the following statement or block through all displays. - ALL_DISPLAYS_SAFE does so even if the statement deletes the current - display. */ - -#define ALL_DISPLAYS(B) \ - for (B = display_chain; B; B = B->next) - -#define ALL_DISPLAYS_SAFE(B,TMP) \ - for (B = display_chain; \ - B ? (TMP = B->next, 1): 0; \ - B = TMP) +static std::vector<std::unique_ptr<struct display>> all_displays; /* Prototypes for local functions. */ @@ -311,20 +311,17 @@ } if (options->format == 0 || options->format == 's' - || TYPE_CODE (type) == TYPE_CODE_REF - || TYPE_CODE (type) == TYPE_CODE_ARRAY - || TYPE_CODE (type) == TYPE_CODE_STRING - || TYPE_CODE (type) == TYPE_CODE_STRUCT - || TYPE_CODE (type) == TYPE_CODE_UNION - || TYPE_CODE (type) == TYPE_CODE_NAMESPACE) + || type->code () == TYPE_CODE_REF + || type->code () == TYPE_CODE_ARRAY + || type->code () == TYPE_CODE_STRING + || type->code () == TYPE_CODE_STRUCT + || type->code () == TYPE_CODE_UNION + || type->code () == TYPE_CODE_NAMESPACE) value_print (val, stream, options); else /* User specified format, so don't look to the type to tell us what to do. */ - val_print_scalar_formatted (type, - value_embedded_offset (val), - val, - options, size, stream); + value_print_scalar_formatted (val, options, size, stream); } /* Return builtin floating point type of same length as TYPE. @@ -364,7 +361,7 @@ /* If the value is a pointer, and pointers and addresses are not the same, then at this point, the value's length (in target bytes) is gdbarch_addr_bit/TARGET_CHAR_BIT, not TYPE_LENGTH (type). */ - if (TYPE_CODE (type) == TYPE_CODE_PTR) + if (type->code () == TYPE_CODE_PTR) len = gdbarch_addr_bit (gdbarch) / TARGET_CHAR_BIT; /* If we are printing it as unsigned, truncate it in case it is actually @@ -414,15 +411,14 @@ range case, we want to avoid this, so we store the unpacked value here for possible use later. */ gdb::optional<LONGEST> val_long; - if ((TYPE_CODE (type) == TYPE_CODE_FLT + if ((type->code () == TYPE_CODE_FLT && (options->format == 'o' || options->format == 'x' || options->format == 't' || options->format == 'z' || options->format == 'd' || options->format == 'u')) - || (TYPE_CODE (type) == TYPE_CODE_RANGE - && TYPE_RANGE_DATA (type)->bias != 0)) + || (type->code () == TYPE_CODE_RANGE && type->bounds ()->bias != 0)) { val_long.emplace (unpack_long (type, valaddr)); converted_bytes.resize (TYPE_LENGTH (type)); @@ -435,10 +431,10 @@ of a floating-point type of the same length, if that exists. Otherwise, the data is printed as integer. */ char format = options->format; - if (format == 'f' && TYPE_CODE (type) != TYPE_CODE_FLT) + if (format == 'f' && type->code () != TYPE_CODE_FLT) { type = float_type_from_length (type); - if (TYPE_CODE (type) != TYPE_CODE_FLT) + if (type->code () != TYPE_CODE_FLT) format = 0; } @@ -454,7 +450,7 @@ print_decimal_chars (stream, valaddr, len, false, byte_order); break; case 0: - if (TYPE_CODE (type) != TYPE_CODE_FLT) + if (type->code () != TYPE_CODE_FLT) { print_decimal_chars (stream, valaddr, len, !TYPE_UNSIGNED (type), byte_order); @@ -1221,7 +1217,7 @@ val = access_value_history (0); if (voidprint || (val && value_type (val) && - TYPE_CODE (value_type (val)) != TYPE_CODE_VOID)) + value_type (val)->code () != TYPE_CODE_VOID)) print_value (val, print_opts); } @@ -1367,7 +1363,7 @@ gdb_assert (osect->objfile && objfile_name (osect->objfile)); obj_name = objfile_name (osect->objfile); - if (MULTI_OBJFILE_P ()) + if (current_program_space->multi_objfile_p ()) if (pc_in_unmapped_range (addr, osect)) if (section_is_overlay (osect)) printf_filtered (_("%s in load address range of " @@ -1445,7 +1441,7 @@ { struct objfile *objfile = msymbol.objfile; - gdbarch = get_objfile_arch (objfile); + gdbarch = objfile->arch (); load_addr = BMSYMBOL_VALUE_ADDRESS (msymbol); printf_filtered ("Symbol \""); @@ -1684,8 +1680,7 @@ val = coerce_ref (val); /* In rvalue contexts, such as this, functions are coerced into pointers to functions. This makes "x/i main" work. */ - if (/* last_format == 'i' && */ - TYPE_CODE (value_type (val)) == TYPE_CODE_FUNC + if (value_type (val)->code () == TYPE_CODE_FUNC && VALUE_LVAL (val) == lval_memory) next_address = value_address (val); else @@ -1766,27 +1761,9 @@ innermost_block_tracker tracker; expression_up expr = parse_expression (exp, &tracker); - newobj = new display (); - - newobj->exp_string = xstrdup (exp); - newobj->exp = std::move (expr); - newobj->block = tracker.block (); - newobj->pspace = current_program_space; - newobj->number = ++display_number; - newobj->format = fmt; - newobj->enabled_p = 1; - newobj->next = NULL; - - if (display_chain == NULL) - display_chain = newobj; - else - { - struct display *last; - - for (last = display_chain; last->next != NULL; last = last->next) - ; - last->next = newobj; - } + newobj = new display (exp, std::move (expr), fmt, + current_program_space, tracker.block ()); + all_displays.emplace_back (newobj); if (from_tty) do_one_display (newobj); @@ -1794,26 +1771,13 @@ dont_repeat (); } -static void -free_display (struct display *d) -{ - xfree (d->exp_string); - delete d; -} - /* Clear out the display_chain. Done when new symtabs are loaded, since this invalidates the types stored in many expressions. */ void -clear_displays (void) +clear_displays () { - struct display *d; - - while ((d = display_chain) != NULL) - { - display_chain = d->next; - free_display (d); - } + all_displays.clear (); } /* Delete the auto-display DISPLAY. */ @@ -1821,21 +1785,16 @@ static void delete_display (struct display *display) { - struct display *d; - gdb_assert (display != NULL); - if (display_chain == display) - display_chain = display->next; - - ALL_DISPLAYS (d) - if (d->next == display) - { - d->next = display->next; - break; - } - - free_display (display); + auto iter = std::find_if (all_displays.begin (), + all_displays.end (), + [=] (const std::unique_ptr<struct display> &item) + { + return item.get () == display; + }); + gdb_assert (iter != all_displays.end ()); + all_displays.erase (iter); } /* Call FUNCTION on each of the displays whose numbers are given in @@ -1843,9 +1802,7 @@ static void map_display_numbers (const char *args, - void (*function) (struct display *, - void *), - void *data) + gdb::function_view<void (struct display *)> function) { int num; @@ -1863,27 +1820,20 @@ warning (_("bad display number at or near '%s'"), p); else { - struct display *d, *tmp; - - ALL_DISPLAYS_SAFE (d, tmp) - if (d->number == num) - break; - if (d == NULL) + auto iter = std::find_if (all_displays.begin (), + all_displays.end (), + [=] (const std::unique_ptr<display> &item) + { + return item->number == num; + }); + if (iter == all_displays.end ()) printf_unfiltered (_("No display number %d.\n"), num); else - function (d, data); + function (iter->get ()); } } } -/* Callback for map_display_numbers, that deletes a display. */ - -static void -do_delete_display (struct display *d, void *data) -{ - delete_display (d); -} - /* "undisplay" command. */ static void @@ -1897,7 +1847,7 @@ return; } - map_display_numbers (args, do_delete_display, NULL); + map_display_numbers (args, delete_display); dont_repeat (); } @@ -1910,7 +1860,7 @@ { int within_current_scope; - if (d->enabled_p == 0) + if (!d->enabled_p) return; /* The expression carries the architecture that was used at parse time. @@ -1932,15 +1882,15 @@ try { innermost_block_tracker tracker; - d->exp = parse_expression (d->exp_string, &tracker); + d->exp = parse_expression (d->exp_string.c_str (), &tracker); d->block = tracker.block (); } catch (const gdb_exception &ex) { /* Can't re-parse the expression. Disable this display item. */ - d->enabled_p = 0; + d->enabled_p = false; warning (_("Unable to display \"%s\": %s"), - d->exp_string, ex.what ()); + d->exp_string.c_str (), ex.what ()); return; } } @@ -1980,7 +1930,7 @@ annotate_display_expression (); - puts_filtered (d->exp_string); + puts_filtered (d->exp_string.c_str ()); annotate_display_expression_end (); if (d->format.count != 1 || d->format.format == 'i') @@ -2019,7 +1969,7 @@ annotate_display_expression (); - puts_filtered (d->exp_string); + puts_filtered (d->exp_string.c_str ()); annotate_display_expression_end (); printf_filtered (" = "); @@ -2056,10 +2006,8 @@ void do_displays (void) { - struct display *d; - - for (d = display_chain; d; d = d->next) - do_one_display (d); + for (auto &d : all_displays) + do_one_display (d.get ()); } /* Delete the auto-display which we were in the process of displaying. @@ -2068,12 +2016,10 @@ void disable_display (int num) { - struct display *d; - - for (d = display_chain; d; d = d->next) + for (auto &d : all_displays) if (d->number == num) { - d->enabled_p = 0; + d->enabled_p = false; return; } printf_unfiltered (_("No display number %d.\n"), num); @@ -2096,15 +2042,13 @@ static void info_display_command (const char *ignore, int from_tty) { - struct display *d; - - if (!display_chain) + if (all_displays.empty ()) printf_unfiltered (_("There are no auto-display expressions now.\n")); else printf_filtered (_("Auto-display expressions now in effect:\n\ Num Enb Expression\n")); - for (d = display_chain; d; d = d->next) + for (auto &d : all_displays) { printf_filtered ("%d: %c ", d->number, "ny"[(int) d->enabled_p]); if (d->format.size) @@ -2112,38 +2056,31 @@ d->format.format); else if (d->format.format) printf_filtered ("/%c ", d->format.format); - puts_filtered (d->exp_string); + puts_filtered (d->exp_string.c_str ()); if (d->block && !contained_in (get_selected_block (0), d->block, true)) printf_filtered (_(" (cannot be evaluated in the current context)")); printf_filtered ("\n"); } } -/* Callback fo map_display_numbers, that enables or disables the - passed in display D. */ - -static void -do_enable_disable_display (struct display *d, void *data) -{ - d->enabled_p = *(int *) data; -} - /* Implementation of both the "disable display" and "enable display" commands. ENABLE decides what to do. */ static void -enable_disable_display_command (const char *args, int from_tty, int enable) +enable_disable_display_command (const char *args, int from_tty, bool enable) { if (args == NULL) { - struct display *d; - - ALL_DISPLAYS (d) + for (auto &d : all_displays) d->enabled_p = enable; return; } - map_display_numbers (args, do_enable_disable_display, &enable); + map_display_numbers (args, + [=] (struct display *d) + { + d->enabled_p = enable; + }); } /* The "enable display" command. */ @@ -2151,7 +2088,7 @@ static void enable_display_command (const char *args, int from_tty) { - enable_disable_display_command (args, from_tty, 1); + enable_disable_display_command (args, from_tty, true); } /* The "disable display" command. */ @@ -2159,7 +2096,7 @@ static void disable_display_command (const char *args, int from_tty) { - enable_disable_display_command (args, from_tty, 0); + enable_disable_display_command (args, from_tty, false); } /* display_chain items point to blocks and expressions. Some expressions in @@ -2173,7 +2110,6 @@ static void clear_dangling_display_expressions (struct objfile *objfile) { - struct display *d; struct program_space *pspace; /* With no symbol file we cannot have a block or expression from it. */ @@ -2186,17 +2122,25 @@ gdb_assert (objfile->pspace == pspace); } - for (d = display_chain; d != NULL; d = d->next) + for (auto &d : all_displays) { if (d->pspace != pspace) continue; - if (lookup_objfile_from_block (d->block) == objfile + struct objfile *bl_objf = nullptr; + if (d->block != nullptr) + { + bl_objf = block_objfile (d->block); + if (bl_objf->separate_debug_objfile_backlink != nullptr) + bl_objf = bl_objf->separate_debug_objfile_backlink; + } + + if (bl_objf == objfile || (d->exp != NULL && exp_uses_objfile (d->exp.get (), objfile))) - { - d->exp.reset (); - d->block = NULL; - } + { + d->exp.reset (); + d->block = NULL; + } } } @@ -2260,7 +2204,8 @@ { const gdb_byte *str; - if (VALUE_LVAL (value) == lval_internalvar + if (value_type (value)->code () != TYPE_CODE_PTR + && VALUE_LVAL (value) == lval_internalvar && c_is_string_type_p (value_type (value))) { size_t len = TYPE_LENGTH (value_type (value)); @@ -2440,7 +2385,7 @@ In either case, the result of the conversion is a byte buffer formatted in the target format for the target type. */ - if (TYPE_CODE (fmt_type) == TYPE_CODE_FLT) + if (fmt_type->code () == TYPE_CODE_FLT) { param_type = float_type_from_length (param_type); if (param_type != value_type (value)) @@ -2610,7 +2555,7 @@ valtype = value_type (val_args[i]); if (TYPE_LENGTH (valtype) != TYPE_LENGTH (wctype) - || TYPE_CODE (valtype) != TYPE_CODE_INT) + || valtype->code () != TYPE_CODE_INT) error (_("expected wchar_t argument for %%lc")); bytes = value_contents (val_args[i]); @@ -2720,7 +2665,7 @@ ui_printf (arg, gdb_stdout); reset_terminal_style (gdb_stdout); wrap_here (""); - ui_file_flush (gdb_stdout); + gdb_stdout->flush (); } /* Implement the "eval" command. */ @@ -2737,8 +2682,9 @@ execute_command (expanded.c_str (), from_tty); } +void _initialize_printcmd (); void -_initialize_printcmd (void) +_initialize_printcmd () { struct cmd_list_element *c; diff -Nru gdb-9.1/gdb/probe.c gdb-10.2/gdb/probe.c --- gdb-9.1/gdb/probe.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/probe.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Generic static probe support for GDB. - Copyright (C) 2012-2020 Free Software Foundation, Inc. + Copyright (C) 2012-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -185,9 +185,7 @@ } else { - struct program_space *pspace; - - ALL_PSPACES (pspace) + for (struct program_space *pspace : program_spaces) parse_probes_in_pspace (spops, pspace, objfile_namestr, provider, name, &result); } @@ -876,8 +874,9 @@ std::vector<const static_probe_ops *> all_static_probe_ops; +void _initialize_probe (); void -_initialize_probe (void) +_initialize_probe () { all_static_probe_ops.push_back (&any_static_probe_ops); diff -Nru gdb-9.1/gdb/probe.h gdb-10.2/gdb/probe.h --- gdb-9.1/gdb/probe.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/probe.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Generic SDT probe support for GDB. - Copyright (C) 2012-2020 Free Software Foundation, Inc. + Copyright (C) 2012-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/proc-api.c gdb-10.2/gdb/proc-api.c --- gdb-9.1/gdb/proc-api.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/proc-api.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Machine independent support for Solaris /proc (process file system) for GDB. - Copyright (C) 1999-2020 Free Software Foundation, Inc. + Copyright (C) 1999-2021 Free Software Foundation, Inc. Written by Michael Snyder at Cygnus Solutions. Based on work by Fred Fish, Stu Grossman, Geoff Noer, and others. @@ -28,8 +28,6 @@ #include "gdbcmd.h" #include "completer.h" -#define _STRUCTURED_PROC 1 - #include <sys/types.h> #include <sys/procfs.h> #include <sys/proc.h> /* for struct proc */ @@ -416,8 +414,9 @@ } } +void _initialize_proc_api (); void -_initialize_proc_api (void) +_initialize_proc_api () { add_setshow_boolean_cmd ("procfs-trace", no_class, &procfs_trace, _("\ Set tracing for /proc api calls."), _("\ diff -Nru gdb-9.1/gdb/process-stratum-target.c gdb-10.2/gdb/process-stratum-target.c --- gdb-9.1/gdb/process-stratum-target.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/process-stratum-target.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Abstract base class inherited by all process_stratum targets - Copyright (C) 2018-2020 Free Software Foundation, Inc. + Copyright (C) 2018-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -29,7 +29,7 @@ process_stratum_target::thread_address_space (ptid_t ptid) { /* Fall-back to the "main" address space of the inferior. */ - inferior *inf = find_inferior_ptid (ptid); + inferior *inf = find_inferior_ptid (this, ptid); if (inf == NULL || inf->aspace == NULL) internal_error (__FILE__, __LINE__, @@ -43,7 +43,7 @@ struct gdbarch * process_stratum_target::thread_architecture (ptid_t ptid) { - inferior *inf = find_inferior_ptid (ptid); + inferior *inf = find_inferior_ptid (this, ptid); gdb_assert (inf != NULL); return inf->gdbarch; } @@ -77,9 +77,34 @@ } bool -process_stratum_target::has_execution (ptid_t the_ptid) +process_stratum_target::has_execution (inferior *inf) { - /* If there's no thread selected, then we can't make it run through - hoops. */ - return the_ptid != null_ptid; + /* If there's a process running already, we can't make it run + through hoops. */ + return inf->pid != 0; +} + +/* See process-stratum-target.h. */ + +std::set<process_stratum_target *> +all_non_exited_process_targets () +{ + /* Inferiors may share targets. To eliminate duplicates, use a set. */ + std::set<process_stratum_target *> targets; + for (inferior *inf : all_non_exited_inferiors ()) + targets.insert (inf->process_target ()); + + return targets; +} + +/* See process-stratum-target.h. */ + +void +switch_to_target_no_thread (process_stratum_target *target) +{ + for (inferior *inf : all_inferiors (target)) + { + switch_to_inferior_no_thread (inf); + break; + } } diff -Nru gdb-9.1/gdb/process-stratum-target.h gdb-10.2/gdb/process-stratum-target.h --- gdb-9.1/gdb/process-stratum-target.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/process-stratum-target.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Abstract base class inherited by all process_stratum targets - Copyright (C) 2018-2020 Free Software Foundation, Inc. + Copyright (C) 2018-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -21,6 +21,7 @@ #define PROCESS_STRATUM_TARGET_H #include "target.h" +#include <set> /* Abstract base class inherited by all process_stratum targets. */ @@ -31,6 +32,16 @@ strata stratum () const final override { return process_stratum; } + /* Return a string representation of this target's open connection. + This string is used to distinguish different instances of a given + target type. For example, when remote debugging, the target is + called "remote", but since we may have more than one remote + target open, connection_string() returns the connection serial + connection name, e.g., "localhost:10001", "192.168.0.1:20000", + etc. This string is shown in several places, e.g., in "info + connections" and "info inferiors". */ + virtual const char *connection_string () { return nullptr; } + /* We must default these because they must be implemented by any target that can run. */ bool can_async_p () override { return false; } @@ -50,7 +61,35 @@ bool has_memory () override; bool has_stack () override; bool has_registers () override; - bool has_execution (ptid_t the_ptid) override; + bool has_execution (inferior *inf) override; + + /* True if any thread is, or may be executing. We need to track + this separately because until we fully sync the thread list, we + won't know whether the target is fully stopped, even if we see + stop events for all known threads, because any of those threads + may have spawned new threads we haven't heard of yet. */ + bool threads_executing = false; + + /* The connection number. Visible in "info connections". */ + int connection_number = 0; }; +/* Downcast TARGET to process_stratum_target. */ + +static inline process_stratum_target * +as_process_stratum_target (target_ops *target) +{ + gdb_assert (target->stratum () == process_stratum); + return static_cast<process_stratum_target *> (target); +} + +/* Return a collection of targets that have non-exited inferiors. */ + +extern std::set<process_stratum_target *> all_non_exited_process_targets (); + +/* Switch to the first inferior (and program space) of TARGET, and + switch to no thread selected. */ + +extern void switch_to_target_no_thread (process_stratum_target *target); + #endif /* !defined (PROCESS_STRATUM_TARGET_H) */ diff -Nru gdb-9.1/gdb/proc-events.c gdb-10.2/gdb/proc-events.c --- gdb-9.1/gdb/proc-events.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/proc-events.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Machine-independent support for Solaris /proc (process file system) - Copyright (C) 1999-2020 Free Software Foundation, Inc. + Copyright (C) 1999-2021 Free Software Foundation, Inc. Written by Michael Snyder at Cygnus Solutions. Based on work by Fred Fish, Stu Grossman, Geoff Noer, and others. @@ -30,8 +30,6 @@ #include "defs.h" -#define _STRUCTURED_PROC 1 - #include <sys/types.h> #include <sys/procfs.h> #include <sys/syscall.h> @@ -762,8 +760,9 @@ { } +void _initialize_proc_events (); void -_initialize_proc_events (void) +_initialize_proc_events () { init_syscall_table (); } diff -Nru gdb-9.1/gdb/proc-flags.c gdb-10.2/gdb/proc-flags.c --- gdb-9.1/gdb/proc-flags.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/proc-flags.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Machine independent support for Solaris /proc (process file system) for GDB. - Copyright (C) 1999-2020 Free Software Foundation, Inc. + Copyright (C) 1999-2021 Free Software Foundation, Inc. Written by Michael Snyder at Cygnus Solutions. Based on work by Fred Fish, Stu Grossman, Geoff Noer, and others. @@ -27,8 +27,6 @@ #include "defs.h" -#define _STRUCTURED_PROC 1 - #include <sys/types.h> #include <sys/procfs.h> diff -Nru gdb-9.1/gdb/procfs.c gdb-10.2/gdb/procfs.c --- gdb-9.1/gdb/procfs.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/procfs.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Machine independent support for Solaris /proc (process file system) for GDB. - Copyright (C) 1999-2020 Free Software Foundation, Inc. + Copyright (C) 1999-2021 Free Software Foundation, Inc. Written by Michael Snyder at Cygnus Solutions. Based on work by Fred Fish, Stu Grossman, Geoff Noer, and others. @@ -33,8 +33,6 @@ #include "nat/fork-inferior.h" #include "gdbarch.h" -#define _STRUCTURED_PROC 1 /* Should be done by configure script. */ - #include <sys/procfs.h> #include <sys/fault.h> #include <sys/syscall.h> @@ -160,6 +158,8 @@ int can_use_hw_breakpoint (enum bptype, int, int) override; bool stopped_data_address (CORE_ADDR *) override; + + void procfs_init_inferior (int pid); }; static procfs_target the_procfs_target; @@ -195,18 +195,6 @@ /* =================== END, TARGET_OPS "MODULE" =================== */ -/* World Unification: - - Put any typedefs, defines etc. here that are required for the - unification of code that handles different versions of /proc. */ - -enum { READ_WATCHFLAG = WA_READ, - WRITE_WATCHFLAG = WA_WRITE, - EXEC_WATCHFLAG = WA_EXEC, - AFTER_WATCHFLAG = WA_TRAPAFTER -}; - - /* =================== STRUCT PROCINFO "MODULE" =================== */ /* FIXME: this comment will soon be out of date W.R.T. threads. */ @@ -229,7 +217,6 @@ inferior's procinfo information. */ /* format strings for /proc paths */ -#define MAIN_PROC_NAME_FMT "/proc/%d" #define CTL_PROC_NAME_FMT "/proc/%d/ctl" #define AS_PROC_NAME_FMT "/proc/%d/as" #define MAP_PROC_NAME_FMT "/proc/%d/map" @@ -385,14 +372,14 @@ several. Here is some rationale: There are several file descriptors that may need to be open - for any given process or LWP. The ones we're interested in are: + for any given process or LWP. The ones we're interested in are: - control (ctl) write-only change the state - status (status) read-only query the state - address space (as) read/write access memory - map (map) read-only virtual addr map - Most of these are opened lazily as they are needed. - The pathnames for the 'files' for an LWP look slightly - different from those of a first-class process: + Most of these are opened lazily as they are needed. + The pathnames for the 'files' for an LWP look slightly + different from those of a first-class process: Pathnames for a process (<proc-id>): /proc/<proc-id>/ctl /proc/<proc-id>/status @@ -401,8 +388,8 @@ Pathnames for an LWP (lwp-id): /proc/<proc-id>/lwp/<lwp-id>/lwpctl /proc/<proc-id>/lwp/<lwp-id>/lwpstatus - An LWP has no map or address space file descriptor, since - the memory map and address space are shared by all LWPs. */ + An LWP has no map or address space file descriptor, since + the memory map and address space are shared by all LWPs. */ /* In this case, there are several different file descriptors that we might be asked to open. The control file descriptor will be @@ -477,7 +464,7 @@ /* Chain into list. */ if (tid == 0) { - xsnprintf (pi->pathname, sizeof (pi->pathname), MAIN_PROC_NAME_FMT, pid); + xsnprintf (pi->pathname, sizeof (pi->pathname), "/proc/%d", pid); pi->next = procinfo_list; procinfo_list = pi; } @@ -590,7 +577,7 @@ /* =================== END, STRUCT PROCINFO "MODULE" =================== */ -/* =================== /proc "MODULE" =================== */ +/* =================== /proc "MODULE" =================== */ /* This "module" is the interface layer between the /proc system API and the gdb target vector functions. This layer consists of access @@ -598,9 +585,7 @@ need to use from the /proc API. The main motivation for this layer is to hide the fact that there - are two very different implementations of the /proc API. Rather - than have a bunch of #ifdefs all thru the gdb target vector - functions, we do our best to hide them all in here. */ + were two very different implementations of the /proc API. */ static long proc_flags (procinfo *pi); static int proc_why (procinfo *pi); @@ -929,10 +914,6 @@ - clear current signal - abort the current system call - stop as soon as finished with system call - - (ioctl): set traced signal set - - (ioctl): set held signal set - - (ioctl): set traced fault set - - (ioctl): set start pc (vaddr) Always clears the current fault. PI is the process or LWP to operate on. If STEP is true, set the process or LWP to trap after @@ -1315,6 +1296,7 @@ char sinfo[sizeof (siginfo_t)]; } arg; siginfo_t mysinfo; + process_stratum_target *wait_target; ptid_t wait_ptid; struct target_waitstatus wait_status; @@ -1327,8 +1309,9 @@ pi = find_procinfo_or_die (pi->pid, 0); /* The pointer is just a type alias. */ - get_last_target_status (&wait_ptid, &wait_status); - if (wait_ptid == inferior_ptid + get_last_target_status (&wait_target, &wait_ptid, &wait_status); + if (wait_target == &the_procfs_target + && wait_ptid == inferior_ptid && wait_status.kind == TARGET_WAITKIND_STOPPED && wait_status.value.sig == gdb_signal_from_host (signo) && proc_get_status (pi) @@ -1565,92 +1548,10 @@ return (write (pi->ctl_fd, &arg, sizeof (arg)) == sizeof (arg)); } -#if (defined(__i386__) || defined(__x86_64__)) && defined (sun) - -#include <sys/sysi86.h> - -/* The KEY is actually the value of the lower 16 bits of the GS - register for the LWP that we're interested in. Returns the - matching ssh struct (LDT entry). */ - -static struct ssd * -proc_get_LDT_entry (procinfo *pi, int key) /* ARI: editCase function */ -{ - static struct ssd *ldt_entry = NULL; - char pathname[MAX_PROC_NAME_SIZE]; - - /* Allocate space for one LDT entry. - This alloc must persist, because we return a pointer to it. */ - if (ldt_entry == NULL) - ldt_entry = XNEW (struct ssd); - - /* Open the file descriptor for the LDT table. */ - xsnprintf (pathname, sizeof (pathname), "/proc/%d/ldt", pi->pid); - scoped_fd fd (open_with_retry (pathname, O_RDONLY)); - if (fd.get () < 0) - { - proc_warn (pi, "proc_get_LDT_entry (open)", __LINE__); - return NULL; - } - - /* Now 'read' thru the table, find a match and return it. */ - while (read (fd.get (), ldt_entry, sizeof (struct ssd)) - == sizeof (struct ssd)) - { - if (ldt_entry->sel == 0 - && ldt_entry->bo == 0 - && ldt_entry->acc1 == 0 - && ldt_entry->acc2 == 0) - break; /* end of table */ - /* If key matches, return this entry. */ - if (ldt_entry->sel == key) - return ldt_entry; - } - /* Loop ended, match not found. */ - return NULL; -} - -/* Returns the pointer to the LDT entry of PTID. */ - -struct ssd * -procfs_find_LDT_entry (ptid_t ptid) /* ARI: editCase function */ -{ - gdb_gregset_t *gregs; - int key; - procinfo *pi; - - /* Find procinfo for the lwp. */ - pi = find_procinfo (ptid.pid (), ptid.lwp ()); - if (pi == NULL) - { - warning (_("procfs_find_LDT_entry: could not find procinfo for %d:%ld."), - ptid.pid (), ptid.lwp ()); - return NULL; - } - /* get its general registers. */ - gregs = proc_get_gregs (pi); - if (gregs == NULL) - { - warning (_("procfs_find_LDT_entry: could not read gregs for %d:%ld."), - ptid.pid (), ptid.lwp ()); - return NULL; - } - /* Now extract the GS register's lower 16 bits. */ - key = (*gregs)[GS] & 0xffff; - - /* Find the matching entry and return it. */ - return proc_get_LDT_entry (pi, key); -} - -#endif - /* =============== END, non-thread part of /proc "MODULE" =============== */ /* =================== Thread "MODULE" =================== */ -/* NOTE: you'll see more ifdefs and duplication of functions here, - since there is a different way to do threads on every OS. */ - /* Returns the number of threads for the process. */ static int @@ -1667,9 +1568,7 @@ return pi->prstatus.pr_nlwp; } -/* LWP version. - - Return the ID of the thread that had an event of interest. +/* Return the ID of the thread that had an event of interest. (ie. the one that hit a breakpoint or other traced event). All other things being equal, this should be the ID of a thread that is currently executing. */ @@ -1693,8 +1592,7 @@ } /* Discover the IDs of all the threads within the process, and create - a procinfo for each of them (chained to the parent). This - unfortunately requires a different method on every OS. Returns + a procinfo for each of them (chained to the parent). Returns non-zero for success, zero for failure. */ static int @@ -1801,7 +1699,7 @@ /* Here are all of the gdb target vector functions and their friends. */ -static ptid_t do_attach (ptid_t ptid); +static void do_attach (ptid_t ptid); static void do_detach (); static void proc_trace_syscalls_1 (procinfo *pi, int syscallnum, int entry_or_exit, int mode, int from_tty); @@ -1845,16 +1743,8 @@ return __LINE__; /* Method for tracing exec syscalls. */ - /* GW: Rationale... - Not all systems with /proc have all the exec* syscalls with the same - names. On the SGI, for example, there is no SYS_exec, but there - *is* a SYS_execv. So, we try to account for that. */ - traced_syscall_exits = XNEW (sysset_t); premptyset (traced_syscall_exits); -#ifdef SYS_exec - praddset (traced_syscall_exits, SYS_exec); -#endif praddset (traced_syscall_exits, SYS_execve); praddset (traced_syscall_exits, SYS_lwp_create); praddset (traced_syscall_exits, SYS_lwp_exit); @@ -1870,7 +1760,6 @@ void procfs_target::attach (const char *args, int from_tty) { - char *exec_file; int pid; pid = parse_pid_to_attach (args); @@ -1878,9 +1767,17 @@ if (pid == getpid ()) error (_("Attaching GDB to itself is not a good idea...")); + /* Push the target if needed, ensure it gets un-pushed it if attach fails. */ + target_unpush_up unpusher; + if (!target_is_pushed (this)) + { + push_target (this); + unpusher.reset (this); + } + if (from_tty) { - exec_file = get_exec_file (0); + const char *exec_file = get_exec_file (0); if (exec_file) printf_filtered (_("Attaching to program `%s', %s\n"), @@ -1891,9 +1788,11 @@ fflush (stdout); } - inferior_ptid = do_attach (ptid_t (pid)); - if (!target_is_pushed (this)) - push_target (this); + + do_attach (ptid_t (pid)); + + /* Everything went fine, keep the target pushed. */ + unpusher.release (); } void @@ -1915,12 +1814,12 @@ do_detach (); - inferior_ptid = null_ptid; + switch_to_no_thread (); detach_inferior (inf); maybe_unpush_target (); } -static ptid_t +static void do_attach (ptid_t ptid) { procinfo *pi; @@ -1988,9 +1887,8 @@ /* Add it to gdb's thread list. */ ptid = ptid_t (pi->pid, lwpid, 0); - add_thread (ptid); - - return ptid; + thread_info *thr = add_thread (&the_procfs_target, ptid); + switch_to_thread (thr); } static void @@ -2038,10 +1936,6 @@ /* Fetch register REGNUM from the inferior. If REGNUM is -1, do this for all registers. - ??? Is the following note still relevant? We can't get individual - registers with the PT_GETREGS ptrace(2) request either, yet we - don't bother with caching at all in that case. - NOTE: Since the /proc interface cannot give us individual registers, we pay no attention to REGNUM, and just fetch them all. This results in the possibility that we will do unnecessarily many @@ -2141,42 +2035,6 @@ } } -static int -syscall_is_lwp_exit (procinfo *pi, int scall) -{ - if (scall == SYS_lwp_exit) - return 1; - return 0; -} - -static int -syscall_is_exit (procinfo *pi, int scall) -{ - if (scall == SYS_exit) - return 1; - return 0; -} - -static int -syscall_is_exec (procinfo *pi, int scall) -{ -#ifdef SYS_exec - if (scall == SYS_exec) - return 1; -#endif - if (scall == SYS_execve) - return 1; - return 0; -} - -static int -syscall_is_lwp_create (procinfo *pi, int scall) -{ - if (scall == SYS_lwp_create) - return 1; - return 0; -} - /* Retrieve the next stop event from the child process. If child has not stopped yet, wait for it to stop. Translate /proc eventcodes (or possibly wait eventcodes) into gdb internal event codes. @@ -2202,7 +2060,11 @@ retval = ptid_t (-1); /* Find procinfo for main process. */ - pi = find_procinfo_or_die (inferior_ptid.pid (), 0); + + /* procfs_target currently only supports one inferior. */ + inferior *inf = current_inferior (); + + pi = find_procinfo_or_die (inf->pid, 0); if (pi) { /* We must assume that the status is stale now... */ @@ -2229,10 +2091,10 @@ wait_retval = ::wait (&wstat); /* "wait" for the child's exit. */ /* Wrong child? */ - if (wait_retval != inferior_ptid.pid ()) + if (wait_retval != inf->pid) error (_("procfs: couldn't stop " "process %d: wait returned %d."), - inferior_ptid.pid (), wait_retval); + inf->pid, wait_retval); /* FIXME: might I not just use waitpid? Or try find_procinfo to see if I know about this child? */ retval = ptid_t (wait_retval); @@ -2281,19 +2143,17 @@ wstat = (what << 8) | 0177; break; case PR_SYSENTRY: - if (syscall_is_lwp_exit (pi, what)) + if (what == SYS_lwp_exit) { if (print_thread_events) printf_unfiltered (_("[%s exited]\n"), target_pid_to_str (retval).c_str ()); - delete_thread (find_thread_ptid (retval)); - status->kind = TARGET_WAITKIND_SPURIOUS; - return retval; + delete_thread (find_thread_ptid (this, retval)); + target_continue_no_signal (ptid); + goto wait_again; } - else if (syscall_is_exit (pi, what)) + else if (what == SYS_exit) { - struct inferior *inf; - /* Handle SYS_exit call only. */ /* Stopped at entry to SYS_exit. Make it runnable, resume it, then use @@ -2308,14 +2168,13 @@ if (!proc_run_process (pi, 0, 0)) proc_error (pi, "target_wait, run_process", __LINE__); - inf = find_inferior_pid (pi->pid); if (inf->attach_flag) { /* Don't call wait: simulate waiting for exit, return a "success" exit code. Bogus: what if it returns something else? */ wstat = 0; - retval = inferior_ptid; /* ? ? ? */ + retval = ptid_t (inf->pid); /* ? ? ? */ } else { @@ -2354,23 +2213,13 @@ i, sysargs[i]); } - if (status) - { - /* How to exit gracefully, returning "unknown - event". */ - status->kind = TARGET_WAITKIND_SPURIOUS; - return inferior_ptid; - } - else - { - /* How to keep going without returning to wfi: */ - target_continue_no_signal (ptid); - goto wait_again; - } + /* How to keep going without returning to wfi: */ + target_continue_no_signal (ptid); + goto wait_again; } break; case PR_SYSEXIT: - if (syscall_is_exec (pi, what)) + if (what == SYS_execve) { /* Hopefully this is our own "fork-child" execing the real child. Hoax this event into a trap, and @@ -2378,7 +2227,7 @@ address. */ wstat = (SIGTRAP << 8) | 0177; } - else if (syscall_is_lwp_create (pi, what)) + else if (what == SYS_lwp_create) { /* This syscall is somewhat like fork/exec. We will get the event twice: once for the parent @@ -2395,31 +2244,21 @@ temp_ptid = ptid_t (pi->pid, temp_tid, 0); /* If not in GDB's thread list, add it. */ - if (!in_thread_list (temp_ptid)) - add_thread (temp_ptid); + if (!in_thread_list (this, temp_ptid)) + add_thread (this, temp_ptid); - /* Return to WFI, but tell it to immediately resume. */ - status->kind = TARGET_WAITKIND_SPURIOUS; - return inferior_ptid; + target_continue_no_signal (ptid); + goto wait_again; } - else if (syscall_is_lwp_exit (pi, what)) + else if (what == SYS_lwp_exit) { if (print_thread_events) printf_unfiltered (_("[%s exited]\n"), target_pid_to_str (retval).c_str ()); - delete_thread (find_thread_ptid (retval)); + delete_thread (find_thread_ptid (this, retval)); status->kind = TARGET_WAITKIND_SPURIOUS; return retval; } - else if (0) - { - /* FIXME: Do we need to handle SYS_sproc, - SYS_fork, or SYS_vfork here? The old procfs - seemed to use this event to handle threads on - older (non-LWP) systems, where I'm assuming - that threads were actually separate processes. - Irix, maybe? Anyway, low priority for now. */ - } else { printf_filtered (_("procfs: trapped on exit from ")); @@ -2440,8 +2279,8 @@ i, sysargs[i]); } - status->kind = TARGET_WAITKIND_SPURIOUS; - return inferior_ptid; + target_continue_no_signal (ptid); + goto wait_again; } break; case PR_REQUESTED: @@ -2464,8 +2303,8 @@ /* If not in GDB's thread list, add it. */ temp_ptid = ptid_t (pi->pid, temp_tid, 0); - if (!in_thread_list (temp_ptid)) - add_thread (temp_ptid); + if (!in_thread_list (this, temp_ptid)) + add_thread (this, temp_ptid); status->kind = TARGET_WAITKIND_STOPPED; status->value.sig = GDB_SIGNAL_0; @@ -2492,13 +2331,12 @@ /* Got this far without error: If retval isn't in the threads database, add it. */ if (retval.pid () > 0 - && retval != inferior_ptid - && !in_thread_list (retval)) + && !in_thread_list (this, retval)) { /* We have a new thread. We need to add it both to GDB's list and to our own. If we don't create a procinfo, resume may be unhappy later. */ - add_thread (retval); + add_thread (this, retval); if (find_procinfo (retval.pid (), retval.lwp ()) == NULL) create_procinfo (retval.pid (), @@ -2605,20 +2443,6 @@ /* About to run the child; invalidate caches and do any other cleanup. */ -#if 0 - if (pi->gregs_dirty) - if (parent == NULL || proc_get_current_thread (parent) != pi->tid) - if (!proc_set_gregs (pi)) /* flush gregs cache */ - proc_warn (pi, "target_resume, set_gregs", - __LINE__); - if (gdbarch_fp0_regnum (target_gdbarch ()) >= 0) - if (pi->fpregs_dirty) - if (parent == NULL || proc_get_current_thread (parent) != pi->tid) - if (!proc_set_fpregs (pi)) /* flush fpregs cache */ - proc_warn (pi, "target_resume, set_fpregs", - __LINE__); -#endif - if (parent != NULL) { /* The presence of a parent indicates that this is an LWP. @@ -2629,36 +2453,12 @@ } pi->gregs_valid = 0; pi->fpregs_valid = 0; -#if 0 - pi->gregs_dirty = 0; - pi->fpregs_dirty = 0; -#endif pi->status_valid = 0; pi->threads_valid = 0; return 0; } -#if 0 -/* A callback function for iterate_over_threads. Find the - asynchronous signal thread, and make it runnable. See if that - helps matters any. */ - -static int -make_signal_thread_runnable (procinfo *process, procinfo *pi, void *ptr) -{ -#ifdef PR_ASLWP - if (proc_flags (pi) & PR_ASLWP) - { - if (!proc_run_process (pi, 0, -1)) - proc_error (pi, "make_signal_thread_runnable", __LINE__); - return 1; - } -#endif - return 0; -} -#endif - /* Make the child process runnable. Normally we will then call procfs_wait and wait for it to stop again (unless gdb is async). @@ -2675,21 +2475,14 @@ procinfo *pi, *thread; int native_signo; - /* 2.1: - prrun.prflags |= PRSVADDR; - prrun.pr_vaddr = $PC; set resume address - prrun.prflags |= PRSTRACE; trace signals in pr_trace (all) - prrun.prflags |= PRSFAULT; trace faults in pr_fault (all but PAGE) - prrun.prflags |= PRCFAULT; clear current fault. - - PRSTRACE and PRSFAULT can be done by other means - (proc_trace_signals, proc_trace_faults) - PRSVADDR is unnecessary. - PRCFAULT may be replaced by a PIOCCFAULT call (proc_clear_current_fault) + /* FIXME: Check/reword. */ + + /* prrun.prflags |= PRCFAULT; clear current fault. + PRCFAULT may be replaced by a PCCFAULT call (proc_clear_current_fault) This basically leaves PRSTEP and PRCSIG. - PRCSIG is like PIOCSSIG (proc_clear_current_signal). + PRCSIG is like PCSSIG (proc_clear_current_signal). So basically PR_STEP is the sole argument that must be passed - to proc_run_process (for use in the prrun struct by ioctl). */ + to proc_run_process. */ /* Find procinfo for main process. */ pi = find_procinfo_or_die (inferior_ptid.pid (), 0); @@ -2724,11 +2517,6 @@ others. Set the child process's PR_ASYNC flag. */ if (!proc_set_async (pi)) proc_error (pi, "target_resume, set_async", __LINE__); -#if 0 - proc_iterate_over_threads (pi, - make_signal_thread_runnable, - NULL); -#endif pi = thread; /* Substitute the thread's procinfo for run. */ } @@ -2851,18 +2639,13 @@ whatever is necessary to make the child ready to be debugged, and then wait for the child to synchronize. */ -static void -procfs_init_inferior (struct target_ops *ops, int pid) +void +procfs_target::procfs_init_inferior (int pid) { procinfo *pi; int fail; int lwpid; - /* This routine called on the parent side (GDB side) - after GDB forks the inferior. */ - if (!target_is_pushed (ops)) - push_target (ops); - pi = create_procinfo (pid, 0); if (pi == NULL) perror (_("procfs: out of memory in 'init_inferior'")); @@ -2878,8 +2661,6 @@ procfs_notice_signals prfillset (fault) prdelset (FLTPAGE) - PIOCWSTOP - PIOCSFAULT */ /* If not stopped yet, wait for it to stop. */ @@ -2922,8 +2703,7 @@ /* We already have a main thread registered in the thread table at this point, but it didn't have any lwp info yet. Notify the core about it. This changes inferior_ptid as well. */ - thread_change_ptid (ptid_t (pid), - ptid_t (pid, lwpid, 0)); + thread_change_ptid (this, ptid_t (pid), ptid_t (pid, lwpid, 0)); gdb_startup_inferior (pid, START_INFERIOR_TRAPS_EXPECTED); } @@ -2959,17 +2739,8 @@ _exit (127); } - /* Method for tracing exec syscalls. */ - /* GW: Rationale... - Not all systems with /proc have all the exec* syscalls with the same - names. On the SGI, for example, there is no SYS_exec, but there - *is* a SYS_execv. So, we try to account for that. */ - exitset = XNEW (sysset_t); premptyset (exitset); -#ifdef SYS_exec - praddset (exitset, SYS_exec); -#endif praddset (exitset, SYS_execve); if (!proc_set_traced_sysexit (pi, exitset)) @@ -2996,6 +2767,13 @@ /*destroy_procinfo (pi);*/ } +/* Dummy function to be sure fork_inferior uses fork(2) and not vfork(2). + This avoids a possible deadlock gdb and its vfork'ed child. */ +static void +procfs_pre_trace (void) +{ +} + /* This function is called BEFORE gdb forks the inferior process. Its only real responsibility is to set things up for the fork, and tell GDB which two functions to call after the fork (one for the parent, @@ -3084,15 +2862,19 @@ shell_file = tryname; } + if (!target_is_pushed (this)) + push_target (this); + pid = fork_inferior (exec_file, allargs, env, procfs_set_exec_trap, - NULL, NULL, shell_file, NULL); + NULL, procfs_pre_trace, shell_file, NULL); /* We have something that executes now. We'll be running through the shell at this point (if startup-with-shell is true), but the pid shouldn't change. */ - add_thread_silent (ptid_t (pid)); + thread_info *thr = add_thread_silent (this, ptid_t (pid)); + switch_to_thread (thr); - procfs_init_inferior (this, pid); + procfs_init_inferior (pid); } /* An observer for the "inferior_created" event. */ @@ -3109,9 +2891,9 @@ { ptid_t gdb_threadid = ptid_t (pi->pid, thread->tid, 0); - thread_info *thr = find_thread_ptid (gdb_threadid); + thread_info *thr = find_thread_ptid (&the_procfs_target, gdb_threadid); if (thr == NULL || thr->state == THREAD_EXITED) - add_thread (gdb_threadid); + add_thread (&the_procfs_target, gdb_threadid); return 0; } @@ -3219,22 +3001,22 @@ { switch (rwflag) { /* FIXME: need an enum! */ case hw_write: /* default watchpoint (write) */ - pflags = WRITE_WATCHFLAG; + pflags = WA_WRITE; break; case hw_read: /* read watchpoint */ - pflags = READ_WATCHFLAG; + pflags = WA_READ; break; case hw_access: /* access watchpoint */ - pflags = READ_WATCHFLAG | WRITE_WATCHFLAG; + pflags = WA_READ | WA_WRITE; break; case hw_execute: /* execution HW breakpoint */ - pflags = EXEC_WATCHFLAG; + pflags = WA_EXEC; break; default: /* Something weird. Return error. */ return -1; } if (after) /* Stop after r/w access is completed. */ - pflags |= AFTER_WATCHFLAG; + pflags |= WA_TRAPAFTER; } if (!proc_set_watchpoint (pi, addr, len, pflags)) @@ -3253,11 +3035,7 @@ /* Return non-zero if we can set a hardware watchpoint of type TYPE. TYPE is one of bp_hardware_watchpoint, bp_read_watchpoint, bp_write_watchpoint, or bp_hardware_watchpoint. CNT is the number of watchpoints used so - far. - - Note: procfs_can_use_hw_breakpoint() is not yet used by all - procfs.c targets due to the fact that some of them still define - target_can_use_hardware_watchpoint. */ + far. */ int procfs_target::can_use_hw_breakpoint (enum bptype type, int cnt, int othertype) @@ -3698,8 +3476,9 @@ proc_trace_syscalls (args, from_tty, PR_SYSEXIT, FLAG_RESET); } +void _initialize_procfs (); void -_initialize_procfs (void) +_initialize_procfs () { gdb::observers::inferior_created.attach (procfs_inferior_created); @@ -3740,7 +3519,7 @@ char *note_data, int *note_size, enum gdb_signal stop_signal) { - struct regcache *regcache = get_thread_regcache (ptid); + struct regcache *regcache = get_thread_regcache (&the_procfs_target, ptid); gdb_gregset_t gregs; gdb_fpregset_t fpregs; unsigned long merged_pid; @@ -3752,8 +3531,6 @@ once it is implemented in this platform: gdbarch_iterate_over_regset_sections(). */ - scoped_restore save_inferior_ptid = make_scoped_restore (&inferior_ptid); - inferior_ptid = ptid; target_fetch_registers (regcache, -1); fill_gregset (regcache, &gregs, -1); diff -Nru gdb-9.1/gdb/procfs.h gdb-10.2/gdb/procfs.h --- gdb-9.1/gdb/procfs.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/procfs.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Native debugging support for procfs targets. - Copyright (C) 2009-2020 Free Software Foundation, Inc. + Copyright (C) 2009-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -25,10 +25,4 @@ extern ptid_t procfs_first_available (void); -#if (defined (__i386__) || defined (__x86_64__)) && defined (sun) -struct ssd; - -extern struct ssd *procfs_find_LDT_entry (ptid_t); -#endif - #endif /* PROCFS_H */ diff -Nru gdb-9.1/gdb/proc-service.c gdb-10.2/gdb/proc-service.c --- gdb-9.1/gdb/proc-service.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/proc-service.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* <proc_service.h> implementation. - Copyright (C) 1999-2020 Free Software Foundation, Inc. + Copyright (C) 1999-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -70,17 +70,22 @@ ps_xfer_memory (const struct ps_prochandle *ph, psaddr_t addr, gdb_byte *buf, size_t len, int write) { - scoped_restore save_inferior_ptid = make_scoped_restore (&inferior_ptid); - int ret; - CORE_ADDR core_addr = ps_addr_to_core_addr (addr); + scoped_restore_current_inferior restore_inferior; + set_current_inferior (ph->thread->inf); + scoped_restore_current_program_space restore_current_progspace; + set_current_program_space (ph->thread->inf->pspace); + + scoped_restore save_inferior_ptid = make_scoped_restore (&inferior_ptid); inferior_ptid = ph->thread->ptid; + CORE_ADDR core_addr = ps_addr_to_core_addr (addr); + + int ret; if (write) ret = target_write_memory (core_addr, buf, len); else ret = target_read_memory (core_addr, buf, len); - return (ret == 0 ? PS_OK : PS_ERR); } @@ -129,16 +134,15 @@ /* Get a regcache for LWPID using its inferior's "main" architecture, which is the register set libthread_db expects to be using. In multi-arch debugging scenarios, the thread's architecture may - differ from the inferior's "main" architecture. E.g., in the Cell - combined debugger, if GDB happens to interrupt SPU code, the - thread's architecture is SPU, and the main architecture is - PowerPC. */ + differ from the inferior's "main" architecture. */ static struct regcache * get_ps_regcache (struct ps_prochandle *ph, lwpid_t lwpid) { inferior *inf = ph->thread->inf; - return get_thread_arch_regcache (ptid_t (inf->pid, lwpid), inf->gdbarch); + return get_thread_arch_regcache (inf->process_target (), + ptid_t (inf->pid, lwpid), + inf->gdbarch); } /* Get the general registers of LWP LWPID within the target process PH @@ -208,8 +212,9 @@ return ph->thread->ptid.pid (); } +void _initialize_proc_service (); void -_initialize_proc_service (void) +_initialize_proc_service () { /* This function solely exists to make sure this module is linked into the final binary. */ diff -Nru gdb-9.1/gdb/proc-service.list gdb-10.2/gdb/proc-service.list --- gdb-9.1/gdb/proc-service.list 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/proc-service.list 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* -Wl,--dynamic-list symbols exported for libthread_db. - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/proc-utils.h gdb-10.2/gdb/proc-utils.h --- gdb-9.1/gdb/proc-utils.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/proc-utils.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Machine independent support for SVR4 /proc (process file system) for GDB. - Copyright (C) 1999-2020 Free Software Foundation, Inc. + Copyright (C) 1999-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/proc-why.c gdb-10.2/gdb/proc-why.c --- gdb-9.1/gdb/proc-why.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/proc-why.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Machine-independent support for Solaris /proc (process file system) - Copyright (C) 1999-2020 Free Software Foundation, Inc. + Copyright (C) 1999-2021 Free Software Foundation, Inc. Written by Michael Snyder at Cygnus Solutions. Based on work by Fred Fish, Stu Grossman, Geoff Noer, and others. @@ -20,8 +20,6 @@ #include "defs.h" -#define _STRUCTURED_PROC 1 - #include <sys/types.h> #include <sys/procfs.h> diff -Nru gdb-9.1/gdb/producer.c gdb-10.2/gdb/producer.c --- gdb-9.1/gdb/producer.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/producer.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Producer string parsers for GDB. - Copyright (C) 2012-2020 Free Software Foundation, Inc. + Copyright (C) 2012-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -125,6 +125,15 @@ return false; } +/* See producer.h. */ + +bool +producer_is_llvm (const char *producer) +{ + return ((producer != NULL) && (startswith (producer, "clang ") + || startswith (producer, " F90 Flang "))); +} + #if defined GDB_SELF_TEST namespace selftests { namespace producer { @@ -203,11 +212,28 @@ SELF_CHECK (producer_is_gcc (gnu_exp, &major, &minor) && major == 5 && minor == 0); } + + { + static const char clang_llvm_exp[] = "clang version 12.0.0 (CLANG: bld#8)"; + int major = 0, minor = 0; + SELF_CHECK (!producer_is_icc (clang_llvm_exp, NULL, NULL)); + SELF_CHECK (!producer_is_gcc (clang_llvm_exp, &major, &minor)); + SELF_CHECK (producer_is_llvm (clang_llvm_exp)); + } + + { + static const char flang_llvm_exp[] = " F90 Flang - 1.5 2017-05-01"; + int major = 0, minor = 0; + SELF_CHECK (!producer_is_icc (flang_llvm_exp, NULL, NULL)); + SELF_CHECK (!producer_is_gcc (flang_llvm_exp, &major, &minor)); + SELF_CHECK (producer_is_llvm (flang_llvm_exp)); + } } } } #endif +void _initialize_producer (); void _initialize_producer () { diff -Nru gdb-9.1/gdb/producer.h gdb-10.2/gdb/producer.h --- gdb-9.1/gdb/producer.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/producer.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Producer string parsers for GDB. - Copyright (C) 2012-2020 Free Software Foundation, Inc. + Copyright (C) 2012-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -52,4 +52,8 @@ running on Intel(R) 64, Version 18.0 Beta ....". */ extern bool producer_is_icc (const char *producer, int *major, int *minor); +/* Returns true if the given PRODUCER string is LLVM (clang/flang) or + false otherwise.*/ +extern bool producer_is_llvm (const char *producer); + #endif diff -Nru gdb-9.1/gdb/progspace-and-thread.c gdb-10.2/gdb/progspace-and-thread.c --- gdb-9.1/gdb/progspace-and-thread.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/progspace-and-thread.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2009-2020 Free Software Foundation, Inc. +/* Copyright (C) 2009-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -25,8 +25,9 @@ switch_to_program_space_and_thread (program_space *pspace) { inferior *inf = find_inferior_for_program_space (pspace); + gdb_assert (inf != nullptr); - if (inf != NULL && inf->pid != 0) + if (inf->pid != 0) { thread_info *tp = any_live_thread_of_inferior (inf); @@ -39,6 +40,5 @@ } } - switch_to_no_thread (); - set_current_program_space (pspace); + switch_to_inferior_no_thread (inf); } diff -Nru gdb-9.1/gdb/progspace-and-thread.h gdb-10.2/gdb/progspace-and-thread.h --- gdb-9.1/gdb/progspace-and-thread.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/progspace-and-thread.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2009-2020 Free Software Foundation, Inc. +/* Copyright (C) 2009-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/progspace.c gdb-10.2/gdb/progspace.c --- gdb-9.1/gdb/progspace.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/progspace.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Program and address space management, for GDB, the GNU debugger. - Copyright (C) 2009-2020 Free Software Foundation, Inc. + Copyright (C) 2009-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -23,14 +23,16 @@ #include "arch-utils.h" #include "gdbcore.h" #include "solib.h" +#include "solist.h" #include "gdbthread.h" #include "inferior.h" +#include <algorithm> /* The last program space number assigned. */ int last_program_space_num = 0; /* The head of the program spaces list. */ -struct program_space *program_spaces; +std::vector<struct program_space *> program_spaces; /* Pointer to the current program space. */ struct program_space *current_program_space; @@ -78,7 +80,7 @@ if (shared_aspace) { /* Just return the first in the list. */ - return program_spaces->aspace; + return program_spaces[0]->aspace; } return new_address_space (); @@ -107,36 +109,38 @@ -/* Adds a new empty program space to the program space list, and binds - it to ASPACE. Returns the pointer to the new object. */ +/* Remove a program space from the program spaces list. */ + +static void +remove_program_space (program_space *pspace) +{ + gdb_assert (pspace != NULL); + + auto iter = std::find (program_spaces.begin (), program_spaces.end (), + pspace); + gdb_assert (iter != program_spaces.end ()); + program_spaces.erase (iter); +} + +/* See progspace.h. */ program_space::program_space (address_space *aspace_) -: num (++last_program_space_num), aspace (aspace_) + : num (++last_program_space_num), + aspace (aspace_) { program_space_alloc_data (this); - if (program_spaces == NULL) - program_spaces = this; - else - { - struct program_space *last; - - for (last = program_spaces; last->next != NULL; last = last->next) - ; - last->next = this; - } + program_spaces.push_back (this); } -/* Releases program space PSPACE, and all its contents (shared - libraries, objfiles, and any other references to the PSPACE in - other modules). It is an internal error to call this when PSPACE - is the current program space, since there should always be a - program space. */ +/* See progspace.h. */ program_space::~program_space () { gdb_assert (this != current_program_space); + remove_program_space (this); + scoped_restore_current_program_space restore_pspace; set_current_program_space (this); @@ -145,6 +149,9 @@ no_shared_libraries (NULL, 0); exec_close (); free_all_objfiles (); + /* Defer breakpoint re-set because we don't want to create new + locations for this pspace which we're tearing down. */ + clear_symtab_users (SYMFILE_DEFER_BP_RESET); if (!gdbarch_has_shared_address_space (target_gdbarch ())) free_address_space (this->aspace); clear_section_table (&this->target_sections); @@ -153,6 +160,70 @@ program_space_free_data (this); } +/* See progspace.h. */ + +void +program_space::free_all_objfiles () +{ + /* Any objfile reference would become stale. */ + for (struct so_list *so : current_program_space->solibs ()) + gdb_assert (so->objfile == NULL); + + while (!objfiles_list.empty ()) + objfiles_list.front ()->unlink (); +} + +/* See progspace.h. */ + +void +program_space::add_objfile (std::shared_ptr<objfile> &&objfile, + struct objfile *before) +{ + if (before == nullptr) + objfiles_list.push_back (std::move (objfile)); + else + { + auto iter = std::find_if (objfiles_list.begin (), objfiles_list.end (), + [=] (const std::shared_ptr<::objfile> &objf) + { + return objf.get () == before; + }); + gdb_assert (iter != objfiles_list.end ()); + objfiles_list.insert (iter, std::move (objfile)); + } +} + +/* See progspace.h. */ + +void +program_space::remove_objfile (struct objfile *objfile) +{ + /* Removing an objfile from the objfile list invalidates any frame + that was built using frame info found in the objfile. Reinit the + frame cache to get rid of any frame that might otherwise + reference stale info. */ + reinit_frame_cache (); + + auto iter = std::find_if (objfiles_list.begin (), objfiles_list.end (), + [=] (const std::shared_ptr<::objfile> &objf) + { + return objf.get () == objfile; + }); + gdb_assert (iter != objfiles_list.end ()); + objfiles_list.erase (iter); + + if (objfile == symfile_object_file) + symfile_object_file = NULL; +} + +/* See progspace.h. */ + +next_adapter<struct so_list> +program_space::solibs () const +{ + return next_adapter<struct so_list> (this->so_list); +} + /* Copies program space SRC to DEST. Copies the main executable file, and the main symbol file. Returns DEST. */ @@ -202,33 +273,6 @@ return 1; } -/* Remove a program space from the program spaces list and release it. It is - an error to call this function while PSPACE is the current program space. */ - -void -delete_program_space (struct program_space *pspace) -{ - struct program_space *ss, **ss_link; - gdb_assert (pspace != NULL); - gdb_assert (pspace != current_program_space); - - ss = program_spaces; - ss_link = &program_spaces; - while (ss != NULL) - { - if (ss == pspace) - { - *ss_link = ss->next; - break; - } - - ss_link = &ss->next; - ss = *ss_link; - } - - delete pspace; -} - /* Prints the list of program spaces and their details on UIOUT. If REQUESTED is not -1, it's the ID of the pspace that should be printed. Otherwise, all spaces are printed. */ @@ -236,11 +280,10 @@ static void print_program_space (struct ui_out *uiout, int requested) { - struct program_space *pspace; int count = 0; /* Compute number of pspaces we will print. */ - ALL_PSPACES (pspace) + for (struct program_space *pspace : program_spaces) { if (requested != -1 && pspace->num != requested) continue; @@ -257,9 +300,8 @@ uiout->table_header (17, ui_left, "exec", "Executable"); uiout->table_body (); - ALL_PSPACES (pspace) + for (struct program_space *pspace : program_spaces) { - struct inferior *inf; int printed_header; if (requested != -1 && requested != pspace->num) @@ -285,9 +327,16 @@ e.g., both parent/child inferiors in a vfork, or, on targets that share pspaces between inferiors. */ printed_header = 0; - for (inf = inferior_list; inf; inf = inf->next) + + /* We're going to switch inferiors. */ + scoped_restore_current_thread restore_thread; + + for (inferior *inf : all_inferiors ()) if (inf->pspace == pspace) { + /* Switch to inferior in order to call target methods. */ + switch_to_inferior_no_thread (inf); + if (!printed_header) { printed_header = 1; @@ -310,9 +359,7 @@ static int valid_program_space_id (int num) { - struct program_space *pspace; - - ALL_PSPACES (pspace) + for (struct program_space *pspace : program_spaces) if (pspace->num == num) return 1; @@ -338,20 +385,6 @@ print_program_space (current_uiout, requested); } -/* Simply returns the count of program spaces. */ - -int -number_of_program_spaces (void) -{ - struct program_space *pspace; - int count = 0; - - ALL_PSPACES (pspace) - count++; - - return count; -} - /* Update all program spaces matching to address spaces. The user may have created several program spaces, and loaded executables into them before connecting to the target interface that will create the @@ -367,7 +400,6 @@ update_address_spaces (void) { int shared_aspace = gdbarch_has_shared_address_space (target_gdbarch ()); - struct program_space *pspace; struct inferior *inf; init_address_spaces (); @@ -377,11 +409,11 @@ struct address_space *aspace = new_address_space (); free_address_space (current_program_space->aspace); - ALL_PSPACES (pspace) + for (struct program_space *pspace : program_spaces) pspace->aspace = aspace; } else - ALL_PSPACES (pspace) + for (struct program_space *pspace : program_spaces) { free_address_space (pspace->aspace); pspace->aspace = new_address_space (); diff -Nru gdb-9.1/gdb/progspace.h gdb-10.2/gdb/progspace.h --- gdb-9.1/gdb/progspace.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/progspace.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Program and address space management, for GDB, the GNU debugger. - Copyright (C) 2009-2020 Free Software Foundation, Inc. + Copyright (C) 2009-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -27,6 +27,8 @@ #include "registry.h" #include "gdbsupport/next-iterator.h" #include "gdbsupport/safe-iterator.h" +#include <list> +#include <vector> struct target_ops; struct bfd; @@ -36,6 +38,80 @@ struct address_space; struct program_space_data; struct address_space_data; +struct so_list; + +typedef std::list<std::shared_ptr<objfile>> objfile_list; + +/* An iterator that wraps an iterator over std::shared_ptr<objfile>, + and dereferences the returned object. This is useful for iterating + over a list of shared pointers and returning raw pointers -- which + helped avoid touching a lot of code when changing how objfiles are + managed. */ + +class unwrapping_objfile_iterator +{ +public: + + typedef unwrapping_objfile_iterator self_type; + typedef typename ::objfile *value_type; + typedef typename ::objfile &reference; + typedef typename ::objfile **pointer; + typedef typename objfile_list::iterator::iterator_category iterator_category; + typedef typename objfile_list::iterator::difference_type difference_type; + + unwrapping_objfile_iterator (const objfile_list::iterator &iter) + : m_iter (iter) + { + } + + objfile *operator* () const + { + return m_iter->get (); + } + + unwrapping_objfile_iterator operator++ () + { + ++m_iter; + return *this; + } + + bool operator!= (const unwrapping_objfile_iterator &other) const + { + return m_iter != other.m_iter; + } + +private: + + /* The underlying iterator. */ + objfile_list::iterator m_iter; +}; + + +/* A range that returns unwrapping_objfile_iterators. */ + +struct unwrapping_objfile_range +{ + typedef unwrapping_objfile_iterator iterator; + + unwrapping_objfile_range (objfile_list &ol) + : m_list (ol) + { + } + + iterator begin () const + { + return iterator (m_list.begin ()); + } + + iterator end () const + { + return iterator (m_list.end ()); + } + +private: + + objfile_list &m_list; +}; /* A program space represents a symbolic view of an address space. Roughly speaking, it holds all the data associated with a @@ -135,10 +211,18 @@ struct program_space { - program_space (address_space *aspace_); + /* Constructs a new empty program space, binds it to ASPACE, and + adds it to the program space list. */ + explicit program_space (address_space *aspace); + + /* Releases a program space, and all its contents (shared libraries, + objfiles, and any other references to the program space in other + modules). It is an internal error to call this when the program + space is the current program space, since there should always be + a program space. */ ~program_space (); - typedef next_adapter<struct objfile> objfiles_range; + typedef unwrapping_objfile_range objfiles_range; /* Return an iterable object that can be used to iterate over all objfiles. The basic use is in a foreach, like: @@ -146,12 +230,10 @@ for (objfile *objf : pspace->objfiles ()) { ... } */ objfiles_range objfiles () { - return objfiles_range (objfiles_head); + return unwrapping_objfile_range (objfiles_list); } - typedef next_adapter<struct objfile, - basic_safe_iterator<next_iterator<objfile>>> - objfiles_safe_range; + typedef basic_safe_range<objfiles_range> objfiles_safe_range; /* An iterable object that can be used to iterate over all objfiles. The basic use is in a foreach, like: @@ -162,11 +244,34 @@ deleted during iteration. */ objfiles_safe_range objfiles_safe () { - return objfiles_safe_range (objfiles_head); + return objfiles_safe_range (objfiles_list); + } + + /* Add OBJFILE to the list of objfiles, putting it just before + BEFORE. If BEFORE is nullptr, it will go at the end of the + list. */ + void add_objfile (std::shared_ptr<objfile> &&objfile, + struct objfile *before); + + /* Remove OBJFILE from the list of objfiles. */ + void remove_objfile (struct objfile *objfile); + + /* Return true if there is more than one object file loaded; false + otherwise. */ + bool multi_objfile_p () const + { + return objfiles_list.size () > 1; } - /* Pointer to next in linked list. */ - struct program_space *next = NULL; + /* Free all the objfiles associated with this program space. */ + void free_all_objfiles (); + + /* Return a range adapter for iterating over all the solibs in this + program space. Use it like: + + for (so_list *so : pspace->solibs ()) { ... } */ + next_adapter<struct so_list> solibs () const; + /* Unique ID number. */ int num = 0; @@ -215,9 +320,8 @@ (e.g. the argument to the "symbol-file" or "file" command). */ struct objfile *symfile_object_file = NULL; - /* All known objfiles are kept in a linked list. This points to - the head of this list. */ - struct objfile *objfiles_head = NULL; + /* All known objfiles are kept in a linked list. */ + std::list<std::shared_ptr<objfile>> objfiles_list; /* The set of target sections matching the sections mapped into this program space. Managed by both exec_ops and solib.c. */ @@ -258,30 +362,16 @@ #define symfile_objfile current_program_space->symfile_object_file -/* All known objfiles are kept in a linked list. This points to the - root of this list. */ -#define object_files current_program_space->objfiles_head - /* The set of target sections matching the sections mapped into the current program space. */ #define current_target_sections (¤t_program_space->target_sections) /* The list of all program spaces. There's always at least one. */ -extern struct program_space *program_spaces; +extern std::vector<struct program_space *>program_spaces; /* The current program space. This is always non-null. */ extern struct program_space *current_program_space; -#define ALL_PSPACES(pspace) \ - for ((pspace) = program_spaces; (pspace) != NULL; (pspace) = (pspace)->next) - -/* Remove a program space from the program spaces list and release it. It is - an error to call this function while PSPACE is the current program space. */ -extern void delete_program_space (struct program_space *pspace); - -/* Returns the number of program spaces listed. */ -extern int number_of_program_spaces (void); - /* Returns true iff there's no inferior bound to PSPACE. */ extern int program_space_empty_p (struct program_space *pspace); diff -Nru gdb-9.1/gdb/prologue-value.c gdb-10.2/gdb/prologue-value.c --- gdb-9.1/gdb/prologue-value.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/prologue-value.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Prologue value handling for GDB. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/prologue-value.h gdb-10.2/gdb/prologue-value.h --- gdb-9.1/gdb/prologue-value.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/prologue-value.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Interface to prologue value handling for GDB. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/psympriv.h gdb-10.2/gdb/psympriv.h --- gdb-9.1/gdb/psympriv.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/psympriv.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Private partial symbol table definitions. - Copyright (C) 2009-2020 Free Software Foundation, Inc. + Copyright (C) 2009-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -55,8 +55,7 @@ the offsets provided in OBJFILE. */ CORE_ADDR address (const struct objfile *objfile) const { - return (ginfo.value.address - + ANOFFSET (objfile->section_offsets, ginfo.section)); + return ginfo.value.address + objfile->section_offsets[ginfo.section]; } /* Set the address of this partial symbol. The address must be @@ -100,11 +99,65 @@ They are all chained on partial symtab lists. Even after the source file has been read into a symtab, the - partial_symtab remains around. They are allocated on an obstack, - objfile_obstack. */ + partial_symtab remains around. */ struct partial_symtab { + /* Allocate a new partial symbol table associated with OBJFILE. + FILENAME (which must be non-NULL) is the filename of this partial + symbol table; it is copied into the appropriate storage. The + partial symtab will also be installed using + psymtab_storage::install. */ + + partial_symtab (const char *filename, struct objfile *objfile) + ATTRIBUTE_NONNULL (2) ATTRIBUTE_NONNULL (3); + + /* Like the above, but also sets the initial text low and text high + from the ADDR argument, and sets the global- and + static-offsets. */ + + partial_symtab (const char *filename, struct objfile *objfile, + CORE_ADDR addr) + ATTRIBUTE_NONNULL (2) ATTRIBUTE_NONNULL (3); + + virtual ~partial_symtab () + { + } + + /* Psymtab expansion is done in two steps: + - a call to read_symtab + - while that call is in progress, calls to expand_psymtab can be made, + both for this psymtab, and its dependencies. + This makes a distinction between a toplevel psymtab (for which both + read_symtab and expand_psymtab will be called) and a non-toplevel + psymtab (for which only expand_psymtab will be called). The + distinction can be used f.i. to do things before and after all + dependencies of a top-level psymtab have been expanded. + + Read the full symbol table corresponding to this partial symbol + table. Typically calls expand_psymtab. */ + virtual void read_symtab (struct objfile *) = 0; + + /* Expand the full symbol table for this partial symbol table. Typically + calls expand_dependencies. */ + virtual void expand_psymtab (struct objfile *) = 0; + + /* Ensure that all the dependencies are read in. Calls + expand_psymtab for each non-shared dependency. */ + void expand_dependencies (struct objfile *); + + /* Return true if the symtab corresponding to this psymtab has been + read in in the context of this objfile. */ + virtual bool readin_p (struct objfile *) const = 0; + + /* Return a pointer to the compunit allocated for this source file + in the context of this objfile. + + Return nullptr if the compunit was not read in or if there was no + symtab. */ + virtual struct compunit_symtab *get_compunit_symtab + (struct objfile *) const = 0; + /* Return the raw low text address of this partial_symtab. */ CORE_ADDR raw_text_low () const { @@ -120,15 +173,13 @@ /* Return the relocated low text address of this partial_symtab. */ CORE_ADDR text_low (struct objfile *objfile) const { - return m_text_low + ANOFFSET (objfile->section_offsets, - SECT_OFF_TEXT (objfile)); + return m_text_low + objfile->text_section_offset (); } /* Return the relocated high text address of this partial_symtab. */ CORE_ADDR text_high (struct objfile *objfile) const { - return m_text_high + ANOFFSET (objfile->section_offsets, - SECT_OFF_TEXT (objfile)); + return m_text_high + objfile->text_section_offset (); } /* Set the low text address of this partial_symtab. */ @@ -148,21 +199,21 @@ /* Chain of all existing partial symtabs. */ - struct partial_symtab *next; + struct partial_symtab *next = nullptr; /* Name of the source file which this partial_symtab defines, or if the psymtab is anonymous then a descriptive name for debugging purposes, or "". It must not be NULL. */ - const char *filename; + const char *filename = nullptr; /* Full path of the source file. NULL if not known. */ - char *fullname; + char *fullname = nullptr; /* Directory in which it was compiled, or NULL if we don't know. */ - const char *dirname; + const char *dirname = nullptr; /* Range of text addresses covered by this file; texthigh is the beginning of the next section. Do not use if PSYMTABS_ADDRMAP_SUPPORTED @@ -171,8 +222,8 @@ text_low_valid and text_high_valid fields; these are located later in this structure for better packing. */ - CORE_ADDR m_text_low; - CORE_ADDR m_text_high; + CORE_ADDR m_text_low = 0; + CORE_ADDR m_text_high = 0; /* If NULL, this is an ordinary partial symbol table. @@ -201,7 +252,7 @@ The choice of which one should be canonical is left to the debuginfo reader; it can be arbitrary. */ - struct partial_symtab *user; + struct partial_symtab *user = nullptr; /* Array of pointers to all of the partial_symtab's which this one depends on. Since this array can only be set to previous or @@ -212,17 +263,17 @@ in foo.h may use type numbers defined in foo.c. For other debugging formats there may be no need to use dependencies. */ - struct partial_symtab **dependencies; + struct partial_symtab **dependencies = nullptr; - int number_of_dependencies; + int number_of_dependencies = 0; /* Global symbol list. This list will be sorted after readin to improve access. Binary search will be the usual method of finding a symbol within it. globals_offset is an integer offset within global_psymbols[]. */ - int globals_offset; - int n_global_syms; + int globals_offset = 0; + int n_global_syms = 0; /* Static symbol list. This list will *not* be sorted after readin; to find a symbol in it, exhaustive search must be used. This is @@ -232,24 +283,18 @@ how long errors take). This is an offset and size within static_psymbols[]. */ - int statics_offset; - int n_static_syms; - - /* Non-zero if the symtab corresponding to this psymtab has been - readin. This is located here so that this structure packs better - on 64-bit systems. */ - - unsigned char readin; + int statics_offset = 0; + int n_static_syms = 0; /* True iff objfile->psymtabs_addrmap is properly populated for this partial_symtab. For discontiguous overlapping psymtabs is the only usable info in PSYMTABS_ADDRMAP. */ - unsigned char psymtabs_addrmap_supported; + bool psymtabs_addrmap_supported = false; /* True if the name of this partial symtab is not a source file name. */ - unsigned char anonymous; + bool anonymous = false; /* A flag that is temporarily used when searching psymtabs. */ @@ -259,23 +304,89 @@ unsigned int text_low_valid : 1; unsigned int text_high_valid : 1; +}; + +/* A partial symtab that tracks the "readin" and "compunit_symtab" + information in the ordinary way -- by storing it directly in this + object. */ +struct standard_psymtab : public partial_symtab +{ + standard_psymtab (const char *filename, struct objfile *objfile) + : partial_symtab (filename, objfile) + { + } + + standard_psymtab (const char *filename, struct objfile *objfile, + CORE_ADDR addr) + : partial_symtab (filename, objfile, addr) + { + } + + bool readin_p (struct objfile *) const override + { + return readin; + } + + struct compunit_symtab *get_compunit_symtab (struct objfile *) const override + { + return compunit_symtab; + } + + /* True if the symtab corresponding to this psymtab has been + readin. */ + + bool readin = false; /* Pointer to compunit eventually allocated for this source file, 0 if !readin or if we haven't looked for the symtab after it was readin. */ - struct compunit_symtab *compunit_symtab; + struct compunit_symtab *compunit_symtab = nullptr; +}; + +/* A partial_symtab that works in the historical db way. This should + not be used in new code, but exists to transition the somewhat + unmaintained "legacy" debug formats. */ + +struct legacy_psymtab : public standard_psymtab +{ + legacy_psymtab (const char *filename, struct objfile *objfile) + : standard_psymtab (filename, objfile) + { + } + + legacy_psymtab (const char *filename, struct objfile *objfile, + CORE_ADDR addr) + : standard_psymtab (filename, objfile, addr) + { + } + + void read_symtab (struct objfile *objf) override + { + if (legacy_read_symtab) + (*legacy_read_symtab) (this, objf); + } + + void expand_psymtab (struct objfile *objf) override + { + (*legacy_expand_psymtab) (this, objf); + } /* Pointer to function which will read in the symtab corresponding to this psymtab. */ - void (*read_symtab) (struct partial_symtab *, struct objfile *); + void (*legacy_read_symtab) (legacy_psymtab *, struct objfile *) = nullptr; + + /* Pointer to function which will actually expand this psymtab into + a full symtab. */ + + void (*legacy_expand_psymtab) (legacy_psymtab *, struct objfile *) = nullptr; /* Information that lets read_symtab() locate the part of the symbol table that this psymtab corresponds to. This information is private to the format-dependent symbol reading routines. For further detail examine the various symbol reading modules. */ - void *read_symtab_private; + void *read_symtab_private = nullptr; }; /* Specify whether a partial psymbol should be allocated on the global @@ -314,33 +425,22 @@ enum language language, struct objfile *objfile); +/* Add a symbol to the partial symbol table of OBJFILE. The psymbol + must be fully constructed, and the names must be set and intern'd + as appropriate. */ + +extern void add_psymbol_to_list (const partial_symbol &psym, + psymbol_placement where, + struct objfile *objfile); + /* Initialize storage for partial symbols. If partial symbol storage has already been initialized, this does nothing. TOTAL_SYMBOLS is an estimate of how many symbols there will be. */ extern void init_psymbol_list (struct objfile *objfile, int total_symbols); -extern struct partial_symtab *start_psymtab_common (struct objfile *, - const char *, CORE_ADDR); - extern void end_psymtab_common (struct objfile *, struct partial_symtab *); -/* Allocate a new partial symbol table associated with OBJFILE. - FILENAME (which must be non-NULL) is the filename of this partial - symbol table; it is copied into the appropriate storage. A new - partial symbol table is returned; aside from "next" and "filename", - its fields are initialized to zero. */ - -extern struct partial_symtab *allocate_psymtab (const char *filename, - struct objfile *objfile) - ATTRIBUTE_NONNULL (1); - -static inline void -discard_psymtab (struct objfile *objfile, struct partial_symtab *pst) -{ - objfile->partial_symtabs->discard_psymtab (pst); -} - /* Used when recording partial symbol tables. On destruction, discards any partial symbol tables that have been built. However, the tables can be kept by calling the "keep" method. */ diff -Nru gdb-9.1/gdb/psymtab.c gdb-10.2/gdb/psymtab.c --- gdb-9.1/gdb/psymtab.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/psymtab.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Partial symbol tables. - Copyright (C) 2009-2020 Free Software Foundation, Inc. + Copyright (C) 2009-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -39,7 +39,8 @@ static struct partial_symbol *lookup_partial_symbol (struct objfile *, struct partial_symtab *, - const char *, int, + const lookup_name_info &, + int, domain_enum); static const char *psymtab_to_fullname (struct partial_symtab *ps); @@ -64,29 +65,22 @@ psymtab_storage::~psymtab_storage () { + partial_symtab *iter = psymtabs; + while (iter != nullptr) + { + partial_symtab *next = iter->next; + delete iter; + iter = next; + } } /* See psymtab.h. */ -struct partial_symtab * -psymtab_storage::allocate_psymtab () +void +psymtab_storage::install_psymtab (partial_symtab *pst) { - struct partial_symtab *psymtab; - - if (free_psymtabs != nullptr) - { - psymtab = free_psymtabs; - free_psymtabs = psymtab->next; - } - else - psymtab = XOBNEW (obstack (), struct partial_symtab); - - memset (psymtab, 0, sizeof (struct partial_symtab)); - - psymtab->next = psymtabs; - psymtabs = psymtab; - - return psymtab; + pst->next = psymtabs; + psymtabs = pst; } @@ -138,7 +132,7 @@ gdb_assert (pst->user == NULL); /* Don't visit already-expanded psymtabs. */ - if (pst->readin) + if (pst->readin_p (objfile)) return 0; /* This may expand more than one symtab, and we want to iterate over @@ -163,17 +157,15 @@ for (partial_symtab *pst : require_partial_symbols (objfile, true)) { - /* We can skip shared psymtabs here, because any file name will be - attached to the unshared psymtab. */ - if (pst->user != NULL) - continue; - /* Anonymous psymtabs don't have a file name. */ if (pst->anonymous) continue; if (compare_filenames_for_search (pst->filename, name)) { + while (pst->user) + pst = pst->user; + if (partial_map_expand_apply (objfile, name, real_path, pst, callback)) return true; @@ -316,8 +308,7 @@ if (objfile->partial_symtabs->psymtabs != NULL && objfile->partial_symtabs->psymtabs_addrmap != NULL) { - CORE_ADDR baseaddr = ANOFFSET (objfile->section_offsets, - SECT_OFF_TEXT (objfile)); + CORE_ADDR baseaddr = objfile->text_section_offset (); struct partial_symtab *pst = ((struct partial_symtab *) @@ -393,15 +384,15 @@ msymbol); if (ps != NULL) { - if (warn_if_readin && ps->readin) + if (warn_if_readin && ps->readin_p (objfile)) /* Might want to error() here (in case symtab is corrupt and will cause a core dump), but maybe we can successfully continue, so let's not. */ warning (_("\ (Internal error: pc %s in read in psymtab, but not in symtab.)\n"), - paddress (get_objfile_arch (objfile), pc)); + paddress (objfile->arch (), pc)); psymtab_to_symtab (objfile, ps); - return ps->compunit_symtab; + return ps->get_compunit_symtab (objfile); } return NULL; } @@ -490,10 +481,13 @@ lookup_name_info lookup_name (name, symbol_name_match_type::FULL); + lookup_name_info psym_lookup_name = lookup_name.make_ignore_params (); + for (partial_symtab *ps : require_partial_symbols (objfile, true)) { - if (!ps->readin && lookup_partial_symbol (objfile, ps, name, - psymtab_index, domain)) + if (!ps->readin_p (objfile) + && lookup_partial_symbol (objfile, ps, psym_lookup_name, + psymtab_index, domain)) { struct symbol *sym, *with_opaque = NULL; struct compunit_symtab *stab = psymtab_to_symtab (objfile, ps); @@ -525,15 +519,45 @@ return stab_best; } +/* Psymtab version of lookup_global_symbol_language. See its definition in + the definition of quick_symbol_functions in symfile.h. */ + +static enum language +psym_lookup_global_symbol_language (struct objfile *objfile, const char *name, + domain_enum domain, bool *symbol_found_p) +{ + *symbol_found_p = false; + if (objfile->sf == NULL) + return language_unknown; + + lookup_name_info lookup_name (name, symbol_name_match_type::FULL); + + for (partial_symtab *ps : require_partial_symbols (objfile, true)) + { + struct partial_symbol *psym; + if (ps->readin_p (objfile)) + continue; + + psym = lookup_partial_symbol (objfile, ps, lookup_name, 1, domain); + if (psym) + { + *symbol_found_p = true; + return psym->ginfo.language (); + } + } + + return language_unknown; +} + /* Returns true if PSYM matches LOOKUP_NAME. */ static bool psymbol_name_matches (partial_symbol *psym, const lookup_name_info &lookup_name) { - const language_defn *lang = language_def (psym->ginfo.language); + const language_defn *lang = language_def (psym->ginfo.language ()); symbol_name_matcher_ftype *name_match - = get_symbol_name_matcher (lang, lookup_name); + = lang->get_symbol_name_matcher (lookup_name); return name_match (psym->ginfo.search_name (), lookup_name, NULL); } @@ -581,9 +605,8 @@ center = bottom + (top - bottom) / 2; gdb_assert (center < top); - enum language lang = (*center)->ginfo.language; - const char *lang_ln - = name.language_lookup_name (lang).c_str (); + enum language lang = (*center)->ginfo.language (); + const char *lang_ln = name.language_lookup_name (lang); if (ordered_compare ((*center)->ginfo.search_name (), lang_ln) >= 0) @@ -596,7 +619,7 @@ while (top <= real_top && psymbol_name_matches (*top, name)) { - if (symbol_matches_domain ((*top)->ginfo.language, + if (symbol_matches_domain ((*top)->ginfo.language (), (*top)->domain, domain)) return *top; top++; @@ -610,7 +633,7 @@ { for (psym = start; psym < start + length; psym++) { - if (symbol_matches_domain ((*psym)->ginfo.language, + if (symbol_matches_domain ((*psym)->ginfo.language (), (*psym)->domain, domain) && psymbol_name_matches (*psym, name)) return *psym; @@ -620,42 +643,14 @@ return NULL; } -/* Returns the name used to search psymtabs. Unlike symtabs, psymtabs do - not contain any method/function instance information (since this would - force reading type information while reading psymtabs). Therefore, - if NAME contains overload information, it must be stripped before searching - psymtabs. */ - -static gdb::unique_xmalloc_ptr<char> -psymtab_search_name (const char *name) -{ - switch (current_language->la_language) - { - case language_cplus: - { - if (strchr (name, '(')) - { - gdb::unique_xmalloc_ptr<char> ret = cp_remove_params (name); - - if (ret) - return ret; - } - } - break; - - default: - break; - } - - return make_unique_xstrdup (name); -} - -/* Look, in partial_symtab PST, for symbol whose natural name is NAME. - Check the global symbols if GLOBAL, the static symbols if not. */ +/* Look, in partial_symtab PST, for symbol whose natural name is + LOOKUP_NAME. Check the global symbols if GLOBAL, the static + symbols if not. */ static struct partial_symbol * lookup_partial_symbol (struct objfile *objfile, - struct partial_symtab *pst, const char *name, + struct partial_symtab *pst, + const lookup_name_info &lookup_name, int global, domain_enum domain) { struct partial_symbol **start, **psym; @@ -666,10 +661,6 @@ if (length == 0) return NULL; - gdb::unique_xmalloc_ptr<char> search_name = psymtab_search_name (name); - - lookup_name_info lookup_name (search_name.get (), symbol_name_match_type::FULL); - start = (global ? &objfile->partial_symtabs->global_psymbols[pst->globals_offset] : &objfile->partial_symtabs->static_psymbols[pst->statics_offset]); @@ -690,11 +681,11 @@ while (top > bottom) { center = bottom + (top - bottom) / 2; - if (!(center < top)) - internal_error (__FILE__, __LINE__, - _("failed internal consistency check")); + + gdb_assert (center < top); + if (strcmp_iw_ordered ((*center)->ginfo.search_name (), - search_name.get ()) >= 0) + lookup_name.c_str ()) >= 0) { top = center; } @@ -703,9 +694,8 @@ bottom = center + 1; } } - if (!(top == bottom)) - internal_error (__FILE__, __LINE__, - _("failed internal consistency check")); + + gdb_assert (top == bottom); /* For `case_sensitivity == case_sensitive_off' strcmp_iw_ordered will search more exactly than what matches SYMBOL_MATCHES_SEARCH_NAME. */ @@ -719,7 +709,7 @@ while (top <= real_top && symbol_matches_search_name (&(*top)->ginfo, lookup_name)) { - if (symbol_matches_domain ((*top)->ginfo.language, + if (symbol_matches_domain ((*top)->ginfo.language (), (*top)->domain, domain)) return *top; top++; @@ -733,7 +723,7 @@ { for (psym = start; psym < start + length; psym++) { - if (symbol_matches_domain ((*psym)->ginfo.language, + if (symbol_matches_domain ((*psym)->ginfo.language (), (*psym)->domain, domain) && symbol_matches_search_name (&(*psym)->ginfo, lookup_name)) return *psym; @@ -758,18 +748,25 @@ pst = pst->user; /* If it's been looked up before, return it. */ - if (pst->compunit_symtab) - return pst->compunit_symtab; + if (pst->get_compunit_symtab (objfile)) + return pst->get_compunit_symtab (objfile); /* If it has not yet been read in, read it. */ - if (!pst->readin) + if (!pst->readin_p (objfile)) { scoped_restore decrementer = increment_reading_symtab (); - (*pst->read_symtab) (pst, objfile); + if (info_verbose) + { + printf_filtered (_("Reading in symbols for %s...\n"), + pst->filename); + gdb_flush (gdb_stdout); + } + + pst->read_symtab (objfile); } - return pst->compunit_symtab; + return pst->get_compunit_symtab (objfile); } /* Psymtab version of find_last_source_symtab. See its definition in @@ -792,7 +789,7 @@ if (cs_pst) { - if (cs_pst->readin) + if (cs_pst->readin_p (ofp)) { internal_error (__FILE__, __LINE__, _("select_source_symtab: " @@ -835,7 +832,7 @@ while (count-- > 0) { QUIT; - fprintf_filtered (outfile, " `%s'", (*p)->ginfo.name); + fprintf_filtered (outfile, " `%s'", (*p)->ginfo.linkage_name ()); if ((*p)->ginfo.demangled_name () != NULL) { fprintf_filtered (outfile, " `%s'", @@ -928,7 +925,7 @@ dump_psymtab (struct objfile *objfile, struct partial_symtab *psymtab, struct ui_file *outfile) { - struct gdbarch *gdbarch = get_objfile_arch (objfile); + struct gdbarch *gdbarch = objfile->arch (); int i; if (psymtab->anonymous) @@ -949,13 +946,11 @@ gdb_print_host_address (objfile, outfile); fprintf_filtered (outfile, ")\n"); - if (psymtab->readin) + if (psymtab->readin_p (objfile)) { fprintf_filtered (outfile, " Full symtab was read (at "); - gdb_print_host_address (psymtab->compunit_symtab, outfile); - fprintf_filtered (outfile, " by function at "); - gdb_print_host_address (psymtab->read_symtab, outfile); + gdb_print_host_address (psymtab->get_compunit_symtab (objfile), outfile); fprintf_filtered (outfile, ")\n"); } @@ -1009,7 +1004,7 @@ i = 0; for (partial_symtab *ps : require_partial_symbols (objfile, true)) { - if (ps->readin == 0) + if (!ps->readin_p (objfile)) i++; } printf_filtered (_(" Number of psym tables (not yet expanded): %d\n"), i); @@ -1047,14 +1042,17 @@ psym_expand_symtabs_for_function (struct objfile *objfile, const char *func_name) { + lookup_name_info base_lookup (func_name, symbol_name_match_type::FULL); + lookup_name_info lookup_name = base_lookup.make_ignore_params (); + for (partial_symtab *ps : require_partial_symbols (objfile, true)) { - if (ps->readin) + if (ps->readin_p (objfile)) continue; - if ((lookup_partial_symbol (objfile, ps, func_name, 1, VAR_DOMAIN) + if ((lookup_partial_symbol (objfile, ps, lookup_name, 1, VAR_DOMAIN) != NULL) - || (lookup_partial_symbol (objfile, ps, func_name, 0, VAR_DOMAIN) + || (lookup_partial_symbol (objfile, ps, lookup_name, 0, VAR_DOMAIN) != NULL)) psymtab_to_symtab (objfile, ps); } @@ -1104,7 +1102,7 @@ { const char *fullname; - if (ps->readin) + if (ps->readin_p (objfile)) continue; /* We can skip shared psymtabs here, because any file name will be @@ -1184,7 +1182,7 @@ for (partial_symtab *ps : require_partial_symbols (objfile, true)) { QUIT; - if (ps->readin + if (ps->readin_p (objfile) || match_partial_symbol (objfile, ps, global, name, domain, ordered_compare)) { @@ -1304,13 +1302,11 @@ psym_expand_symtabs_matching (struct objfile *objfile, gdb::function_view<expand_symtabs_file_matcher_ftype> file_matcher, - const lookup_name_info &lookup_name_in, + const lookup_name_info *lookup_name, gdb::function_view<expand_symtabs_symbol_matcher_ftype> symbol_matcher, gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify, enum search_domain domain) { - lookup_name_info lookup_name = lookup_name_in.make_ignore_params (); - /* Clear the search flags. */ for (partial_symtab *ps : require_partial_symbols (objfile, true)) ps->searched_flag = PST_NOT_SEARCHED; @@ -1319,7 +1315,7 @@ { QUIT; - if (ps->readin) + if (ps->readin_p (objfile)) continue; /* We skip shared psymtabs because file-matching doesn't apply @@ -1347,8 +1343,10 @@ continue; } - if (recursively_search_psymtabs (ps, objfile, domain, - lookup_name, symbol_matcher)) + if ((symbol_matcher == NULL && lookup_name == NULL) + || recursively_search_psymtabs (ps, objfile, domain, + lookup_name->make_ignore_params (), + symbol_matcher)) { struct compunit_symtab *symtab = psymtab_to_symtab (objfile, ps); @@ -1451,6 +1449,7 @@ psym_forget_cached_source_info, psym_map_symtabs_matching_filename, psym_lookup_symbol, + psym_lookup_global_symbol_language, psym_print_stats, psym_dump, psym_expand_symtabs_for_function, @@ -1483,24 +1482,30 @@ }); } -/* Allocate and partially fill a partial symtab. It will be - completely filled at the end of the symbol list. - - FILENAME is the name of the symbol-file we are reading from. */ +/* Partially fill a partial symtab. It will be completely filled at + the end of the symbol list. */ -struct partial_symtab * -start_psymtab_common (struct objfile *objfile, - const char *filename, - CORE_ADDR textlow) +partial_symtab::partial_symtab (const char *filename, + struct objfile *objfile, + CORE_ADDR textlow) + : partial_symtab (filename, objfile) { - struct partial_symtab *psymtab; + set_text_low (textlow); + set_text_high (raw_text_low ()); /* default */ - psymtab = allocate_psymtab (filename, objfile); - psymtab->set_text_low (textlow); - psymtab->set_text_high (psymtab->raw_text_low ()); /* default */ - psymtab->globals_offset = objfile->partial_symtabs->global_psymbols.size (); - psymtab->statics_offset = objfile->partial_symtabs->static_psymbols.size (); - return psymtab; + auto *v1 = new std::vector<partial_symbol *>; + objfile->partial_symtabs->current_global_psymbols.push_back (v1); + auto *v2 = new std::vector<partial_symbol *>; + objfile->partial_symtabs->current_static_psymbols.push_back (v2); +} + +/* Concat vectors V1 and V2. */ + +static void +concat (std::vector<partial_symbol *> *v1, std::vector<partial_symbol *> *v2) +{ + v1->insert (v1->end (), v2->begin (), v2->end ()); + v2->clear (); } /* Perform "finishing up" operations of a partial symtab. */ @@ -1508,10 +1513,26 @@ void end_psymtab_common (struct objfile *objfile, struct partial_symtab *pst) { - pst->n_global_syms = (objfile->partial_symtabs->global_psymbols.size () - - pst->globals_offset); - pst->n_static_syms = (objfile->partial_symtabs->static_psymbols.size () - - pst->statics_offset); + pst->globals_offset = objfile->partial_symtabs->global_psymbols.size (); + pst->statics_offset = objfile->partial_symtabs->static_psymbols.size (); + + auto *current_global_psymbols + = objfile->partial_symtabs->current_global_psymbols.back (); + auto *current_static_psymbols + = objfile->partial_symtabs->current_static_psymbols.back (); + objfile->partial_symtabs->current_global_psymbols.pop_back (); + objfile->partial_symtabs->current_static_psymbols.pop_back (); + + pst->n_global_syms + = current_global_psymbols->size (); + pst->n_static_syms + = current_static_psymbols->size (); + + concat (&objfile->partial_symtabs->global_psymbols, current_global_psymbols); + concat (&objfile->partial_symtabs->static_psymbols, current_static_psymbols); + + delete current_global_psymbols; + delete current_static_psymbols; sort_pst_symbols (objfile, pst); } @@ -1526,7 +1547,7 @@ { unsigned long h = 0; struct partial_symbol *psymbol = (struct partial_symbol *) addr; - unsigned int lang = psymbol->ginfo.language; + unsigned int lang = psymbol->ginfo.language (); unsigned int domain = psymbol->domain; unsigned int theclass = psymbol->aclass; @@ -1534,9 +1555,9 @@ h = fast_hash (&lang, sizeof (unsigned int), h); h = fast_hash (&domain, sizeof (unsigned int), h); h = fast_hash (&theclass, sizeof (unsigned int), h); - /* Note that psymbol names are interned via symbol_set_names, so + /* Note that psymbol names are interned via compute_and_set_names, so there's no need to hash the contents of the name here. */ - h = fast_hash (&psymbol->ginfo.name, sizeof (psymbol->ginfo.name), h); + h = fast_hash (&psymbol->ginfo.m_name, sizeof (psymbol->ginfo.m_name), h); return h; } @@ -1553,13 +1574,13 @@ return (memcmp (&sym1->ginfo.value, &sym2->ginfo.value, sizeof (sym1->ginfo.value)) == 0 - && sym1->ginfo.language == sym2->ginfo.language + && sym1->ginfo.language () == sym2->ginfo.language () && sym1->domain == sym2->domain && sym1->aclass == sym2->aclass /* Note that psymbol names are interned via - symbol_set_names, so there's no need to compare the + compute_and_set_names, so there's no need to compare the contents of the name here. */ - && sym1->ginfo.name == sym2->ginfo.name); + && sym1->ginfo.linkage_name () == sym2->ginfo.linkage_name ()); } /* Helper function, initialises partial symbol structure and stashes @@ -1569,26 +1590,9 @@ different domain (or address) is possible and correct. */ static struct partial_symbol * -add_psymbol_to_bcache (gdb::string_view name, bool copy_name, - domain_enum domain, - enum address_class theclass, - short section, - CORE_ADDR coreaddr, - enum language language, struct objfile *objfile, - int *added) +add_psymbol_to_bcache (const partial_symbol &psymbol, struct objfile *objfile, + bool *added) { - struct partial_symbol psymbol; - memset (&psymbol, 0, sizeof (psymbol)); - - psymbol.set_unrelocated_address (coreaddr); - psymbol.ginfo.section = section; - psymbol.domain = domain; - psymbol.aclass = theclass; - symbol_set_language (&psymbol.ginfo, language, - objfile->partial_symtabs->obstack ()); - symbol_set_names (&psymbol.ginfo, name, copy_name, - objfile->per_bfd); - /* Stash the partial symbol away in the cache. */ return ((struct partial_symbol *) objfile->partial_symtabs->psymbol_cache.insert @@ -1609,21 +1613,14 @@ /* See psympriv.h. */ void -add_psymbol_to_list (gdb::string_view name, bool copy_name, - domain_enum domain, - enum address_class theclass, - short section, +add_psymbol_to_list (const partial_symbol &psymbol, psymbol_placement where, - CORE_ADDR coreaddr, - enum language language, struct objfile *objfile) + struct objfile *objfile) { - struct partial_symbol *psym; - - int added; + bool added; /* Stash the partial symbol away in the cache. */ - psym = add_psymbol_to_bcache (name, copy_name, domain, theclass, - section, coreaddr, language, objfile, &added); + partial_symbol *psym = add_psymbol_to_bcache (psymbol, objfile, &added); /* Do not duplicate global partial symbols. */ if (where == psymbol_placement::GLOBAL && !added) @@ -1632,14 +1629,38 @@ /* Save pointer to partial symbol in psymtab, growing symtab if needed. */ std::vector<partial_symbol *> *list = (where == psymbol_placement::STATIC - ? &objfile->partial_symtabs->static_psymbols - : &objfile->partial_symtabs->global_psymbols); + ? objfile->partial_symtabs->current_static_psymbols.back () + : objfile->partial_symtabs->current_global_psymbols.back ()); append_psymbol_to_list (list, psym, objfile); } /* See psympriv.h. */ void +add_psymbol_to_list (gdb::string_view name, bool copy_name, + domain_enum domain, + enum address_class theclass, + short section, + psymbol_placement where, + CORE_ADDR coreaddr, + enum language language, struct objfile *objfile) +{ + struct partial_symbol psymbol; + memset (&psymbol, 0, sizeof (psymbol)); + + psymbol.set_unrelocated_address (coreaddr); + psymbol.ginfo.section = section; + psymbol.domain = domain; + psymbol.aclass = theclass; + psymbol.ginfo.set_language (language, objfile->partial_symtabs->obstack ()); + psymbol.ginfo.compute_and_set_names (name, copy_name, objfile->per_bfd); + + add_psymbol_to_list (psymbol, where, objfile); +} + +/* See psympriv.h. */ + +void init_psymbol_list (struct objfile *objfile, int total_symbols) { if (objfile->partial_symtabs->global_psymbols.capacity () == 0 @@ -1656,16 +1677,14 @@ /* See psympriv.h. */ -struct partial_symtab * -allocate_psymtab (const char *filename, struct objfile *objfile) +partial_symtab::partial_symtab (const char *filename_, struct objfile *objfile) + : searched_flag (PST_NOT_SEARCHED), + text_low_valid (0), + text_high_valid (0) { - struct partial_symtab *psymtab - = objfile->partial_symtabs->allocate_psymtab (); + objfile->partial_symtabs->install_psymtab (this); - psymtab->filename - = ((const char *) objfile->per_bfd->filename_cache.insert - (filename, strlen (filename) + 1)); - psymtab->compunit_symtab = NULL; + filename = objfile->intern (filename_); if (symtab_create_debug) { @@ -1684,12 +1703,37 @@ } fprintf_filtered (gdb_stdlog, "Created psymtab %s for module %s.\n", - host_address_to_string (psymtab), filename); + host_address_to_string (this), filename); } +} + +/* See psympriv.h. */ - return psymtab; +void +partial_symtab::expand_dependencies (struct objfile *objfile) +{ + for (int i = 0; i < number_of_dependencies; ++i) + { + if (!dependencies[i]->readin_p (objfile) + && dependencies[i]->user == NULL) + { + /* Inform about additional files to be read in. */ + if (info_verbose) + { + fputs_filtered (" ", gdb_stdout); + wrap_here (""); + fputs_filtered ("and ", gdb_stdout); + wrap_here (""); + printf_filtered ("%s...", dependencies[i]->filename); + wrap_here (""); /* Flush output */ + gdb_flush (gdb_stdout); + } + dependencies[i]->expand_psymtab (objfile); + } + } } + void psymtab_storage::discard_psymtab (struct partial_symtab *pst) { @@ -1708,11 +1752,7 @@ while ((*prev_pst) != pst) prev_pst = &((*prev_pst)->next); (*prev_pst) = pst->next; - - /* Next, put it on a free list for recycling. */ - - pst->next = free_psymtabs; - free_psymtabs = pst; + delete pst; } @@ -1739,7 +1779,7 @@ { struct dump_psymtab_addrmap_data *data = (struct dump_psymtab_addrmap_data *) datap; - struct gdbarch *gdbarch = get_objfile_arch (data->objfile); + struct gdbarch *gdbarch = data->objfile->arch (); struct partial_symtab *addrmap_psymtab = (struct partial_symtab *) obj; const char *psymtab_address_or_end = NULL; @@ -1951,15 +1991,13 @@ static void maintenance_info_psymtabs (const char *regexp, int from_tty) { - struct program_space *pspace; - if (regexp) re_comp (regexp); - ALL_PSPACES (pspace) + for (struct program_space *pspace : program_spaces) for (objfile *objfile : pspace->objfiles ()) { - struct gdbarch *gdbarch = get_objfile_arch (objfile); + struct gdbarch *gdbarch = objfile->arch (); /* We don't want to print anything for this objfile until we actually find a symtab whose name matches. */ @@ -1987,7 +2025,7 @@ host_address_to_string (psymtab)); printf_filtered (" readin %s\n", - psymtab->readin ? "yes" : "no"); + psymtab->readin_p (objfile) ? "yes" : "no"); printf_filtered (" fullname %s\n", psymtab->fullname ? psymtab->fullname : "(null)"); @@ -2029,6 +2067,11 @@ } else printf_filtered ("(none)\n"); + if (psymtab->user) + printf_filtered (" user %s " + "((struct partial_symtab *) %s)\n", + psymtab->user->filename, + host_address_to_string (psymtab->user)); printf_filtered (" dependencies "); if (psymtab->number_of_dependencies) { @@ -2068,17 +2111,17 @@ struct compunit_symtab *cust = NULL; const struct blockvector *bv; const struct block *b; - int length; + int i; for (objfile *objfile : current_program_space->objfiles ()) for (partial_symtab *ps : require_partial_symbols (objfile, true)) { - struct gdbarch *gdbarch = get_objfile_arch (objfile); + struct gdbarch *gdbarch = objfile->arch (); /* We don't call psymtab_to_symtab here because that may cause symtab expansion. When debugging a problem it helps if checkers leave things unchanged. */ - cust = ps->compunit_symtab; + cust = ps->get_compunit_symtab (objfile); /* First do some checks that don't require the associated symtab. */ if (ps->text_high (objfile) < ps->text_low (objfile)) @@ -2102,26 +2145,29 @@ b = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK); partial_symbol **psym = &objfile->partial_symtabs->static_psymbols[ps->statics_offset]; - length = ps->n_static_syms; - while (length--) + for (i = 0; i < ps->n_static_syms; psym++, i++) { + /* Skip symbols for inlined functions without address. These may + or may not have a match in the full symtab. */ + if ((*psym)->aclass == LOC_BLOCK + && (*psym)->ginfo.value.address == 0) + continue; + sym = block_lookup_symbol (b, (*psym)->ginfo.search_name (), symbol_name_match_type::SEARCH_NAME, (*psym)->domain); if (!sym) { printf_filtered ("Static symbol `"); - puts_filtered ((*psym)->ginfo.name); + puts_filtered ((*psym)->ginfo.linkage_name ()); printf_filtered ("' only found in "); puts_filtered (ps->filename); printf_filtered (" psymtab\n"); } - psym++; } b = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK); psym = &objfile->partial_symtabs->global_psymbols[ps->globals_offset]; - length = ps->n_global_syms; - while (length--) + for (i = 0; i < ps->n_global_syms; psym++, i++) { sym = block_lookup_symbol (b, (*psym)->ginfo.search_name (), symbol_name_match_type::SEARCH_NAME, @@ -2129,12 +2175,11 @@ if (!sym) { printf_filtered ("Global symbol `"); - puts_filtered ((*psym)->ginfo.name); + puts_filtered ((*psym)->ginfo.linkage_name ()); printf_filtered ("' only found in "); puts_filtered (ps->filename); printf_filtered (" psymtab\n"); } - psym++; } if (ps->raw_text_high () != 0 && (ps->text_low (objfile) < BLOCK_START (b) @@ -2157,8 +2202,9 @@ } } +void _initialize_psymtab (); void -_initialize_psymtab (void) +_initialize_psymtab () { add_cmd ("psymbols", class_maintenance, maintenance_print_psymbols, _("\ Print dump of current partial symbol definitions.\n\ diff -Nru gdb-9.1/gdb/psymtab.h gdb-10.2/gdb/psymtab.h --- gdb-9.1/gdb/psymtab.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/psymtab.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Public partial symbol table definitions. - Copyright (C) 2009-2020 Free Software Foundation, Inc. + Copyright (C) 2009-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -36,7 +36,9 @@ other memory managed by this class), or on the per-BFD object. The only link from the psymtab storage object back to the objfile (or objfile_obstack) that is made by the core psymtab code is the - compunit_symtab member in the psymtab. + compunit_symtab member in the standard_psymtab -- and a given + symbol reader can avoid this by implementing its own subclasses of + partial_symtab. However, it is up to each symbol reader to maintain this invariant in other ways, if it wants to reuse psymtabs across multiple @@ -83,11 +85,10 @@ return OBSTACK_CALLOC (obstack (), number, struct partial_symtab *); } - /* Allocate a new psymtab on the psymtab obstack. The new psymtab - will be linked in to the "psymtabs" list, but otherwise all other - fields will be zero. */ + /* Install a psymtab on the psymtab list. This transfers ownership + of PST to this object. */ - struct partial_symtab *allocate_psymtab (); + void install_psymtab (partial_symtab *pst); typedef next_adapter<struct partial_symtab> partial_symtab_range; @@ -128,11 +129,13 @@ std::vector<partial_symbol *> global_psymbols; std::vector<partial_symbol *> static_psymbols; -private: + /* Stack of vectors of partial symbols, using during psymtab + initialization. */ - /* List of freed partial symtabs, available for re-use. */ + std::vector<std::vector<partial_symbol *>*> current_global_psymbols; + std::vector<std::vector<partial_symbol *>*> current_static_psymbols; - struct partial_symtab *free_psymtabs = nullptr; +private: /* The obstack where allocations are made. This is lazily allocated so that we don't waste memory when there are no psymtabs. */ diff -Nru gdb-9.1/gdb/ptrace.m4 gdb-10.2/gdb/ptrace.m4 --- gdb-9.1/gdb/ptrace.m4 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/ptrace.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -dnl Copyright (C) 2012-2020 Free Software Foundation, Inc. +dnl Copyright (C) 2012-2021 Free Software Foundation, Inc. dnl dnl This file is part of GDB. dnl @@ -31,11 +31,7 @@ # include <unistd.h> #endif ' -# There is no point in checking if we don't have a prototype. -AC_CHECK_DECLS(ptrace, [], [ - : ${gdb_cv_func_ptrace_ret='int'} - : ${gdb_cv_func_ptrace_args='int,int,long,long'} -], $gdb_ptrace_headers) + # Check return type. Varargs (used on GNU/Linux) conflict with the # empty argument list, so check for that explicitly. AC_CACHE_CHECK([return type of ptrace], gdb_cv_func_ptrace_ret, diff -Nru gdb-9.1/gdb/p-typeprint.c gdb-10.2/gdb/p-typeprint.c --- gdb-9.1/gdb/p-typeprint.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/p-typeprint.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Support for printing Pascal types for GDB, the GNU debugger. - Copyright (C) 2000-2020 Free Software Foundation, Inc. + Copyright (C) 2000-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -53,7 +53,7 @@ enum type_code code; int demangled_args; - code = TYPE_CODE (type); + code = type->code (); if (show > 0) type = check_typedef (type); @@ -140,7 +140,7 @@ fprintf_filtered (stream, "%s%s ", BASETYPE_VIA_PUBLIC (type, i) ? "public" : "private", BASETYPE_VIA_VIRTUAL (type, i) ? " virtual" : ""); - name = TYPE_NAME (TYPE_BASECLASS (type, i)); + name = TYPE_BASECLASS (type, i)->name (); fprintf_filtered (stream, "%s", name ? name : "(null)"); } if (i > 0) @@ -211,12 +211,12 @@ if (type == 0) return; - if (TYPE_NAME (type) && show <= 0) + if (type->name () && show <= 0) return; QUIT; - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_PTR: fprintf_filtered (stream, "^"); @@ -229,7 +229,7 @@ if (passed_a_ptr) fprintf_filtered (stream, "("); if (TYPE_TARGET_TYPE (type) != NULL - && TYPE_CODE (TYPE_TARGET_TYPE (type)) != TYPE_CODE_VOID) + && TYPE_TARGET_TYPE (type)->code () != TYPE_CODE_VOID) { fprintf_filtered (stream, "function "); } @@ -258,7 +258,7 @@ fprintf_filtered (stream, "("); if (TYPE_TARGET_TYPE (type) != NULL - && TYPE_CODE (TYPE_TARGET_TYPE (type)) != TYPE_CODE_VOID) + && TYPE_TARGET_TYPE (type)->code () != TYPE_CODE_VOID) { fprintf_filtered (stream, "function "); } @@ -274,10 +274,10 @@ fprintf_filtered (stream, "("); fprintf_filtered (stream, "array "); if (TYPE_LENGTH (TYPE_TARGET_TYPE (type)) > 0 - && !TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED (type)) + && type->bounds ()->high.kind () != PROP_UNDEFINED) fprintf_filtered (stream, "[%s..%s] ", - plongest (TYPE_ARRAY_LOWER_BOUND_VALUE (type)), - plongest (TYPE_ARRAY_UPPER_BOUND_VALUE (type))); + plongest (type->bounds ()->low.const_val ()), + plongest (type->bounds ()->high.const_val ())); fprintf_filtered (stream, "of "); break; @@ -309,7 +309,7 @@ pascal_print_func_args (struct type *type, struct ui_file *stream, const struct type_print_options *flags) { - int i, len = TYPE_NFIELDS (type); + int i, len = type->num_fields (); if (len) { @@ -327,7 +327,7 @@ { fprintf_filtered (stream, "var "); } */ - pascal_print_type (TYPE_FIELD_TYPE (type, i), "" /* TYPE_FIELD_NAME + pascal_print_type (type->field (i).type (), "" /* TYPE_FIELD_NAME seems invalid! */ ,stream, -1, 0, flags); } @@ -347,7 +347,7 @@ const struct type_print_options *flags) { if (TYPE_TARGET_TYPE (type) == NULL - || TYPE_CODE (TYPE_TARGET_TYPE (type)) != TYPE_CODE_VOID) + || TYPE_TARGET_TYPE (type)->code () != TYPE_CODE_VOID) { fprintf_filtered (stream, " : "); pascal_type_print_varspec_prefix (TYPE_TARGET_TYPE (type), @@ -377,12 +377,12 @@ if (type == 0) return; - if (TYPE_NAME (type) && show <= 0) + if (type->name () && show <= 0) return; QUIT; - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_ARRAY: if (passed_a_ptr) @@ -476,10 +476,10 @@ } /* void pointer */ - if ((TYPE_CODE (type) == TYPE_CODE_PTR) - && (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_VOID)) + if ((type->code () == TYPE_CODE_PTR) + && (TYPE_TARGET_TYPE (type)->code () == TYPE_CODE_VOID)) { - fputs_filtered (TYPE_NAME (type) ? TYPE_NAME (type) : "pointer", + fputs_filtered (type->name () ? type->name () : "pointer", stream); return; } @@ -487,15 +487,15 @@ just print the type name directly from the type. */ if (show <= 0 - && TYPE_NAME (type) != NULL) + && type->name () != NULL) { - fputs_filtered (TYPE_NAME (type), stream); + fputs_filtered (type->name (), stream); return; } type = check_typedef (type); - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_TYPEDEF: case TYPE_CODE_PTR: @@ -523,9 +523,9 @@ only after args !! */ break; case TYPE_CODE_STRUCT: - if (TYPE_NAME (type) != NULL) + if (type->name () != NULL) { - fputs_filtered (TYPE_NAME (type), stream); + fputs_filtered (type->name (), stream); fputs_filtered (" = ", stream); } if (HAVE_CPLUS_STRUCT (type)) @@ -539,9 +539,9 @@ goto struct_union; case TYPE_CODE_UNION: - if (TYPE_NAME (type) != NULL) + if (type->name () != NULL) { - fputs_filtered (TYPE_NAME (type), stream); + fputs_filtered (type->name (), stream); fputs_filtered (" = ", stream); } fprintf_filtered (stream, "case <?> of "); @@ -551,15 +551,15 @@ if (show < 0) { /* If we just printed a tag name, no need to print anything else. */ - if (TYPE_NAME (type) == NULL) + if (type->name () == NULL) fprintf_filtered (stream, "{...}"); } - else if (show > 0 || TYPE_NAME (type) == NULL) + else if (show > 0 || type->name () == NULL) { pascal_type_print_derivation_info (stream, type); fprintf_filtered (stream, "\n"); - if ((TYPE_NFIELDS (type) == 0) && (TYPE_NFN_FIELDS (type) == 0)) + if ((type->num_fields () == 0) && (TYPE_NFN_FIELDS (type) == 0)) { if (TYPE_STUB (type)) fprintfi_filtered (level + 4, stream, "<incomplete type>\n"); @@ -576,7 +576,7 @@ /* If there is a base class for this type, do not print the field that it occupies. */ - len = TYPE_NFIELDS (type); + len = type->num_fields (); for (i = TYPE_N_BASECLASSES (type); i < len; i++) { QUIT; @@ -618,12 +618,12 @@ } print_spaces_filtered (level + 4, stream); - if (field_is_static (&TYPE_FIELD (type, i))) + if (field_is_static (&type->field (i))) fprintf_filtered (stream, "static "); - pascal_print_type (TYPE_FIELD_TYPE (type, i), + pascal_print_type (type->field (i).type (), TYPE_FIELD_NAME (type, i), stream, show - 1, level + 4, flags); - if (!field_is_static (&TYPE_FIELD (type, i)) + if (!field_is_static (&type->field (i)) && TYPE_FIELD_PACKED (type, i)) { /* It is a bitfield. This code does not attempt @@ -707,8 +707,7 @@ fprintf_filtered (stream, "destructor "); } else if (TYPE_TARGET_TYPE (TYPE_FN_FIELD_TYPE (f, j)) != 0 - && TYPE_CODE (TYPE_TARGET_TYPE ( - TYPE_FN_FIELD_TYPE (f, j))) != TYPE_CODE_VOID) + && TYPE_TARGET_TYPE (TYPE_FN_FIELD_TYPE(f, j))->code () != TYPE_CODE_VOID) { fprintf_filtered (stream, "function "); } @@ -723,8 +722,7 @@ stream); if (TYPE_TARGET_TYPE (TYPE_FN_FIELD_TYPE (f, j)) != 0 - && TYPE_CODE (TYPE_TARGET_TYPE ( - TYPE_FN_FIELD_TYPE (f, j))) != TYPE_CODE_VOID) + && TYPE_TARGET_TYPE (TYPE_FN_FIELD_TYPE(f, j))->code () != TYPE_CODE_VOID) { fputs_filtered (" : ", stream); type_print (TYPE_TARGET_TYPE (TYPE_FN_FIELD_TYPE (f, j)), @@ -741,9 +739,9 @@ break; case TYPE_CODE_ENUM: - if (TYPE_NAME (type) != NULL) + if (type->name () != NULL) { - fputs_filtered (TYPE_NAME (type), stream); + fputs_filtered (type->name (), stream); if (show > 0) fputs_filtered (" ", stream); } @@ -754,13 +752,13 @@ if (show < 0) { /* If we just printed a tag name, no need to print anything else. */ - if (TYPE_NAME (type) == NULL) + if (type->name () == NULL) fprintf_filtered (stream, "(...)"); } - else if (show > 0 || TYPE_NAME (type) == NULL) + else if (show > 0 || type->name () == NULL) { fprintf_filtered (stream, "("); - len = TYPE_NFIELDS (type); + len = type->num_fields (); lastval = 0; for (i = 0; i < len; i++) { @@ -799,15 +797,15 @@ { struct type *target = TYPE_TARGET_TYPE (type); - print_type_scalar (target, TYPE_LOW_BOUND (type), stream); + print_type_scalar (target, type->bounds ()->low.const_val (), stream); fputs_filtered ("..", stream); - print_type_scalar (target, TYPE_HIGH_BOUND (type), stream); + print_type_scalar (target, type->bounds ()->high.const_val (), stream); } break; case TYPE_CODE_SET: fputs_filtered ("set of ", stream); - pascal_print_type (TYPE_INDEX_TYPE (type), "", stream, + pascal_print_type (type->index_type (), "", stream, show - 1, level, flags); break; @@ -820,9 +818,9 @@ such as fundamental types. For these, just print whatever the type name is, as recorded in the type itself. If there is no type name, then complain. */ - if (TYPE_NAME (type) != NULL) + if (type->name () != NULL) { - fputs_filtered (TYPE_NAME (type), stream); + fputs_filtered (type->name (), stream); } else { @@ -830,7 +828,7 @@ an error (). */ fprintf_styled (stream, metadata_style.style (), "<invalid unnamed pascal type code %d>", - TYPE_CODE (type)); + type->code ()); } break; } diff -Nru gdb-9.1/gdb/p-valprint.c gdb-10.2/gdb/p-valprint.c --- gdb-9.1/gdb/p-valprint.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/p-valprint.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Support for printing Pascal values for GDB, the GNU debugger. - Copyright (C) 2000-2020 Free Software Foundation, Inc. + Copyright (C) 2000-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -42,6 +42,11 @@ #include "cli/cli-style.h" +static void pascal_object_print_value_fields (struct value *, struct ui_file *, + int, + const struct value_print_options *, + struct type **, int); + /* Decorations for Pascal. */ static const struct generic_val_print_decorations p_decorations = @@ -56,16 +61,15 @@ "}" }; -/* See val_print for a description of the various parameters of this - function; they are identical. */ +/* See p-lang.h. */ void -pascal_val_print (struct type *type, - int embedded_offset, CORE_ADDR address, - struct ui_file *stream, int recurse, - struct value *original_value, - const struct value_print_options *options) +pascal_value_print_inner (struct value *val, struct ui_file *stream, + int recurse, + const struct value_print_options *options) + { + struct type *type = check_typedef (value_type (val)); struct gdbarch *gdbarch = get_type_arch (type); enum bfd_endian byte_order = type_byte_order (type); unsigned int i = 0; /* Number of characters printed */ @@ -76,10 +80,9 @@ struct type *char_type; CORE_ADDR addr; int want_space = 0; - const gdb_byte *valaddr = value_contents_for_printing (original_value); + const gdb_byte *valaddr = value_contents_for_printing (val); - type = check_typedef (type); - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_ARRAY: { @@ -90,16 +93,12 @@ len = high_bound - low_bound + 1; elttype = check_typedef (TYPE_TARGET_TYPE (type)); eltlen = TYPE_LENGTH (elttype); - if (options->prettyformat_arrays) - { - print_spaces_filtered (2 + 2 * recurse, stream); - } /* If 's' format is used, try to print out as string. If no format is given, print as string if element type is of TYPE_CODE_CHAR and element size is 1,2 or 4. */ if (options->format == 's' || ((eltlen == 1 || eltlen == 2 || eltlen == 4) - && TYPE_CODE (elttype) == TYPE_CODE_CHAR + && elttype->code () == TYPE_CODE_CHAR && options->format == 0)) { /* If requested, look for the first null char and only print @@ -110,17 +109,15 @@ /* Look for a NULL char. */ for (temp_len = 0; - extract_unsigned_integer (valaddr + embedded_offset + - temp_len * eltlen, eltlen, - byte_order) + extract_unsigned_integer (valaddr + temp_len * eltlen, + eltlen, byte_order) && temp_len < len && temp_len < options->print_max; temp_len++); len = temp_len; } LA_PRINT_STRING (stream, TYPE_TARGET_TYPE (type), - valaddr + embedded_offset, len, NULL, 0, - options); + valaddr, len, NULL, 0, options); i = len; } else @@ -137,23 +134,20 @@ { i = 0; } - val_print_array_elements (type, embedded_offset, - address, stream, recurse, - original_value, options, i); + value_print_array_elements (val, stream, recurse, options, i); fprintf_filtered (stream, "}"); } break; } /* Array of unspecified length: treat like pointer to first elt. */ - addr = address + embedded_offset; + addr = value_address (val); } goto print_unpacked_pointer; case TYPE_CODE_PTR: if (options->format && options->format != 's') { - val_print_scalar_formatted (type, embedded_offset, - original_value, options, 0, stream); + value_print_scalar_formatted (val, options, 0, stream); break; } if (options->vtblprint && pascal_object_is_vtbl_ptr_type (type)) @@ -162,18 +156,18 @@ /* Print vtable entry - we only get here if we ARE using -fvtable_thunks. (Otherwise, look under TYPE_CODE_STRUCT.) */ /* Extract the address, assume that it is unsigned. */ - addr = extract_unsigned_integer (valaddr + embedded_offset, + addr = extract_unsigned_integer (valaddr, TYPE_LENGTH (type), byte_order); print_address_demangle (options, gdbarch, addr, stream, demangle); break; } check_typedef (TYPE_TARGET_TYPE (type)); - addr = unpack_pointer (type, valaddr + embedded_offset); + addr = unpack_pointer (type, valaddr); print_unpacked_pointer: elttype = check_typedef (TYPE_TARGET_TYPE (type)); - if (TYPE_CODE (elttype) == TYPE_CODE_FUNC) + if (elttype->code () == TYPE_CODE_FUNC) { /* Try to print what function it points to. */ print_address_demangle (options, gdbarch, addr, stream, demangle); @@ -189,10 +183,10 @@ /* For a pointer to char or unsigned char, also print the string pointed to, unless pointer is null. */ if (((TYPE_LENGTH (elttype) == 1 - && (TYPE_CODE (elttype) == TYPE_CODE_INT - || TYPE_CODE (elttype) == TYPE_CODE_CHAR)) - || ((TYPE_LENGTH (elttype) == 2 || TYPE_LENGTH (elttype) == 4) - && TYPE_CODE (elttype) == TYPE_CODE_CHAR)) + && (elttype->code () == TYPE_CODE_INT + || elttype->code () == TYPE_CODE_CHAR)) + || ((TYPE_LENGTH (elttype) == 2 || TYPE_LENGTH (elttype) == 4) + && elttype->code () == TYPE_CODE_CHAR)) && (options->format == 0 || options->format == 's') && addr != 0) { @@ -227,8 +221,7 @@ else if (pascal_object_is_vtbl_member (type)) { /* Print vtbl's nicely. */ - CORE_ADDR vt_address = unpack_pointer (type, - valaddr + embedded_offset); + CORE_ADDR vt_address = unpack_pointer (type, valaddr); struct bound_minimal_symbol msymbol = lookup_minimal_symbol_by_pc (vt_address); @@ -293,9 +286,7 @@ case TYPE_CODE_UNDEF: case TYPE_CODE_BOOL: case TYPE_CODE_CHAR: - generic_val_print (type, embedded_offset, address, - stream, recurse, original_value, options, - &p_decorations); + generic_value_print (val, stream, recurse, options, &p_decorations); break; case TYPE_CODE_UNION: @@ -314,12 +305,10 @@ /* Extract the address, assume that it is unsigned. */ print_address_demangle (options, gdbarch, - extract_unsigned_integer (valaddr + embedded_offset - + TYPE_FIELD_BITPOS (type, - VTBL_FNADDR_OFFSET) / 8, - TYPE_LENGTH (TYPE_FIELD_TYPE (type, - VTBL_FNADDR_OFFSET)), - byte_order), + extract_unsigned_integer + (valaddr + TYPE_FIELD_BITPOS (type, VTBL_FNADDR_OFFSET) / 8, + TYPE_LENGTH (type->field (VTBL_FNADDR_OFFSET).type ()), + byte_order), stream, demangle); } else @@ -327,23 +316,19 @@ if (is_pascal_string_type (type, &length_pos, &length_size, &string_pos, &char_type, NULL)) { - len = extract_unsigned_integer (valaddr + embedded_offset - + length_pos, length_size, - byte_order); - LA_PRINT_STRING (stream, char_type, - valaddr + embedded_offset + string_pos, + len = extract_unsigned_integer (valaddr + length_pos, + length_size, byte_order); + LA_PRINT_STRING (stream, char_type, valaddr + string_pos, len, NULL, 0, options); } else - pascal_object_print_value_fields (type, valaddr, embedded_offset, - address, stream, recurse, - original_value, options, - NULL, 0); + pascal_object_print_value_fields (val, stream, recurse, + options, NULL, 0); } break; case TYPE_CODE_SET: - elttype = TYPE_INDEX_TYPE (type); + elttype = type->index_type (); elttype = check_typedef (elttype); if (TYPE_STUB (elttype)) { @@ -358,14 +343,15 @@ fputs_filtered ("[", stream); - int bound_info = get_discrete_bounds (range, &low_bound, &high_bound); + int bound_info = (get_discrete_bounds (range, &low_bound, &high_bound) + ? 0 : -1); if (low_bound == 0 && high_bound == -1 && TYPE_LENGTH (type) > 0) { /* If we know the size of the set type, we can figure out the maximum value. */ bound_info = 0; high_bound = TYPE_LENGTH (type) * TARGET_CHAR_BIT - 1; - TYPE_HIGH_BOUND (range) = high_bound; + range->bounds ()->high.set_const_val (high_bound); } maybe_bad_bstring: if (bound_info < 0) @@ -376,8 +362,7 @@ for (i = low_bound; i <= high_bound; i++) { - int element = value_bit_index (type, - valaddr + embedded_offset, i); + int element = value_bit_index (type, valaddr, i); if (element < 0) { @@ -392,16 +377,13 @@ need_comma = 1; if (i + 1 <= high_bound - && value_bit_index (type, - valaddr + embedded_offset, ++i)) + && value_bit_index (type, valaddr, ++i)) { int j = i; fputs_filtered ("..", stream); while (i + 1 <= high_bound - && value_bit_index (type, - valaddr + embedded_offset, - ++i)) + && value_bit_index (type, valaddr, ++i)) j = i; print_type_scalar (range, j, stream); } @@ -414,9 +396,10 @@ default: error (_("Invalid pascal type code %d in symbol table."), - TYPE_CODE (type)); + type->code ()); } } + void pascal_value_print (struct value *val, struct ui_file *stream, @@ -433,15 +416,15 @@ Object pascal: if it is a member pointer, we will take care of that when we print it. */ - if (TYPE_CODE (type) == TYPE_CODE_PTR - || TYPE_CODE (type) == TYPE_CODE_REF) + if (type->code () == TYPE_CODE_PTR + || type->code () == TYPE_CODE_REF) { /* Hack: remove (char *) for char strings. Their type is indicated by the quoted string anyway. */ - if (TYPE_CODE (type) == TYPE_CODE_PTR - && TYPE_NAME (type) == NULL - && TYPE_NAME (TYPE_TARGET_TYPE (type)) != NULL - && strcmp (TYPE_NAME (TYPE_TARGET_TYPE (type)), "char") == 0) + if (type->code () == TYPE_CODE_PTR + && type->name () == NULL + && TYPE_TARGET_TYPE (type)->name () != NULL + && strcmp (TYPE_TARGET_TYPE (type)->name (), "char") == 0) { /* Print nothing. */ } @@ -471,10 +454,7 @@ struct ui_file *, int, const struct value_print_options *); -static void pascal_object_print_value (struct type *, const gdb_byte *, - LONGEST, - CORE_ADDR, struct ui_file *, int, - struct value *, +static void pascal_object_print_value (struct value *, struct ui_file *, int, const struct value_print_options *, struct type **); @@ -488,7 +468,7 @@ int pascal_object_is_vtbl_ptr_type (struct type *type) { - const char *type_name = TYPE_NAME (type); + const char *type_name = type->name (); return (type_name != NULL && strcmp (type_name, pascal_vtbl_ptr_name) == 0); @@ -500,15 +480,15 @@ int pascal_object_is_vtbl_member (struct type *type) { - if (TYPE_CODE (type) == TYPE_CODE_PTR) + if (type->code () == TYPE_CODE_PTR) { type = TYPE_TARGET_TYPE (type); - if (TYPE_CODE (type) == TYPE_CODE_ARRAY) + if (type->code () == TYPE_CODE_ARRAY) { type = TYPE_TARGET_TYPE (type); - if (TYPE_CODE (type) == TYPE_CODE_STRUCT /* If not using + if (type->code () == TYPE_CODE_STRUCT /* If not using thunks. */ - || TYPE_CODE (type) == TYPE_CODE_PTR) /* If using thunks. */ + || type->code () == TYPE_CODE_PTR) /* If using thunks. */ { /* Virtual functions tables are full of pointers to virtual functions. */ @@ -520,21 +500,18 @@ } /* Mutually recursive subroutines of pascal_object_print_value and - c_val_print to print out a structure's fields: + pascal_value_print to print out a structure's fields: pascal_object_print_value_fields and pascal_object_print_value. - TYPE, VALADDR, ADDRESS, STREAM, RECURSE, and OPTIONS have the - same meanings as in pascal_object_print_value and c_val_print. + VAL, STREAM, RECURSE, and OPTIONS have the same meanings as in + pascal_object_print_value and c_value_print. DONT_PRINT is an array of baseclass types that we should not print, or zero if called from top level. */ -void -pascal_object_print_value_fields (struct type *type, const gdb_byte *valaddr, - LONGEST offset, - CORE_ADDR address, struct ui_file *stream, +static void +pascal_object_print_value_fields (struct value *val, struct ui_file *stream, int recurse, - struct value *val, const struct value_print_options *options, struct type **dont_print_vb, int dont_print_statmem) @@ -543,17 +520,16 @@ char *last_dont_print = (char *) obstack_next_free (&dont_print_statmem_obstack); - type = check_typedef (type); + struct type *type = check_typedef (value_type (val)); fprintf_filtered (stream, "{"); - len = TYPE_NFIELDS (type); + len = type->num_fields (); n_baseclasses = TYPE_N_BASECLASSES (type); /* Print out baseclasses such that we don't print duplicates of virtual baseclasses. */ if (n_baseclasses > 0) - pascal_object_print_value (type, valaddr, offset, address, - stream, recurse + 1, val, + pascal_object_print_value (val, stream, recurse + 1, options, dont_print_vb); if (!len && n_baseclasses == 1) @@ -562,6 +538,7 @@ { struct obstack tmp_obstack = dont_print_statmem_obstack; int fields_seen = 0; + const gdb_byte *valaddr = value_contents_for_printing (val); if (dont_print_statmem == 0) { @@ -575,7 +552,7 @@ { /* If requested, skip printing of static fields. */ if (!options->pascal_static_field_print - && field_is_static (&TYPE_FIELD (type, i))) + && field_is_static (&type->field (i))) continue; if (fields_seen) fprintf_filtered (stream, ", "); @@ -586,7 +563,7 @@ fprintf_filtered (stream, "\n"); print_spaces_filtered (2 + 2 * recurse, stream); fputs_filtered ("members of ", stream); - fputs_filtered (TYPE_NAME (type), stream); + fputs_filtered (type->name (), stream); fputs_filtered (": ", stream); } } @@ -602,18 +579,24 @@ wrap_here (n_spaces (2 + 2 * recurse)); } - annotate_field_begin (TYPE_FIELD_TYPE (type, i)); + annotate_field_begin (type->field (i).type ()); - if (field_is_static (&TYPE_FIELD (type, i))) - fputs_filtered ("static ", stream); - fprintf_symbol_filtered (stream, TYPE_FIELD_NAME (type, i), - language_cplus, - DMGL_PARAMS | DMGL_ANSI); + if (field_is_static (&type->field (i))) + { + fputs_filtered ("static ", stream); + fprintf_symbol_filtered (stream, + TYPE_FIELD_NAME (type, i), + current_language->la_language, + DMGL_PARAMS | DMGL_ANSI); + } + else + fputs_styled (TYPE_FIELD_NAME (type, i), + variable_name_style.style (), stream); annotate_field_name_end (); fputs_filtered (" = ", stream); annotate_field_value (); - if (!field_is_static (&TYPE_FIELD (type, i)) + if (!field_is_static (&type->field (i)) && TYPE_FIELD_PACKED (type, i)) { struct value *v; @@ -638,7 +621,7 @@ { struct value_print_options opts = *options; - v = value_field_bitfield (type, i, valaddr, offset, val); + v = value_field_bitfield (type, i, valaddr, 0, val); opts.deref_ref = 0; common_val_print (v, stream, recurse + 1, &opts, @@ -652,13 +635,13 @@ fputs_styled ("<optimized out or zero length>", metadata_style.style (), stream); } - else if (field_is_static (&TYPE_FIELD (type, i))) + else if (field_is_static (&type->field (i))) { /* struct value *v = value_static_field (type, i); v4.17 specific. */ struct value *v; - v = value_field_bitfield (type, i, valaddr, offset, val); + v = value_field_bitfield (type, i, valaddr, 0, val); if (v == NULL) val_print_optimized_out (NULL, stream); @@ -671,14 +654,11 @@ struct value_print_options opts = *options; opts.deref_ref = 0; - /* val_print (TYPE_FIELD_TYPE (type, i), - valaddr + TYPE_FIELD_BITPOS (type, i) / 8, - address + TYPE_FIELD_BITPOS (type, i) / 8, 0, - stream, format, 0, recurse + 1, pretty); */ - val_print (TYPE_FIELD_TYPE (type, i), - offset + TYPE_FIELD_BITPOS (type, i) / 8, - address, stream, recurse + 1, val, &opts, - current_language); + + struct value *v = value_primitive_field (val, 0, i, + value_type (val)); + common_val_print (v, stream, recurse + 1, &opts, + current_language); } } annotate_field_end (); @@ -705,17 +685,15 @@ baseclasses. */ static void -pascal_object_print_value (struct type *type, const gdb_byte *valaddr, - LONGEST offset, - CORE_ADDR address, struct ui_file *stream, +pascal_object_print_value (struct value *val, struct ui_file *stream, int recurse, - struct value *val, const struct value_print_options *options, struct type **dont_print_vb) { struct type **last_dont_print = (struct type **) obstack_next_free (&dont_print_vb_obstack); struct obstack tmp_obstack = dont_print_vb_obstack; + struct type *type = check_typedef (value_type (val)); int i, n_baseclasses = TYPE_N_BASECLASSES (type); if (dont_print_vb == 0) @@ -731,11 +709,8 @@ { LONGEST boffset = 0; struct type *baseclass = check_typedef (TYPE_BASECLASS (type, i)); - const char *basename = TYPE_NAME (baseclass); - const gdb_byte *base_valaddr = NULL; - LONGEST thisoffset; + const char *basename = baseclass->name (); int skip = 0; - gdb::byte_vector buf; if (BASETYPE_VIA_VIRTUAL (type, i)) { @@ -752,14 +727,14 @@ obstack_ptr_grow (&dont_print_vb_obstack, baseclass); } - thisoffset = offset; - + struct value *base_value; try { - boffset = baseclass_offset (type, i, valaddr, offset, address, val); + base_value = value_primitive_field (val, 0, i, type); } catch (const gdb_exception_error &ex) { + base_value = nullptr; if (ex.error == NOT_AVAILABLE_ERROR) skip = -1; else @@ -774,18 +749,18 @@ if (boffset < 0 || boffset >= TYPE_LENGTH (type)) { - buf.resize (TYPE_LENGTH (baseclass)); + CORE_ADDR address= value_address (val); + gdb::byte_vector buf (TYPE_LENGTH (baseclass)); - base_valaddr = buf.data (); if (target_read_memory (address + boffset, buf.data (), TYPE_LENGTH (baseclass)) != 0) skip = 1; - address = address + boffset; - thisoffset = 0; + base_value = value_from_contents_and_address (baseclass, + buf.data (), + address + boffset); + baseclass = value_type (base_value); boffset = 0; } - else - base_valaddr = valaddr; } if (options->prettyformat) @@ -805,11 +780,10 @@ else if (skip > 0) val_print_invalid_address (stream); else - pascal_object_print_value_fields (baseclass, base_valaddr, - thisoffset + boffset, address, - stream, recurse, val, options, - (struct type **) obstack_base (&dont_print_vb_obstack), - 0); + pascal_object_print_value_fields + (base_value, stream, recurse, options, + (struct type **) obstack_base (&dont_print_vb_obstack), + 0); fputs_filtered (", ", stream); flush_it: @@ -851,7 +825,7 @@ return; } - if (TYPE_CODE (type) == TYPE_CODE_STRUCT) + if (type->code () == TYPE_CODE_STRUCT) { CORE_ADDR *first_dont_print, addr; int i; @@ -877,12 +851,8 @@ sizeof (CORE_ADDR)); type = check_typedef (type); - pascal_object_print_value_fields (type, - value_contents_for_printing (val), - value_embedded_offset (val), - addr, - stream, recurse, - val, options, NULL, 1); + pascal_object_print_value_fields (val, stream, recurse, + options, NULL, 1); return; } @@ -891,8 +861,9 @@ common_val_print (val, stream, recurse, &opts, current_language); } +void _initialize_pascal_valprint (); void -_initialize_pascal_valprint (void) +_initialize_pascal_valprint () { add_setshow_boolean_cmd ("pascal_static-members", class_support, &user_print_options.pascal_static_field_print, _("\ diff -Nru gdb-9.1/gdb/python/lib/gdb/command/explore.py gdb-10.2/gdb/python/lib/gdb/command/explore.py --- gdb-9.1/gdb/python/lib/gdb/command/explore.py 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/python/lib/gdb/command/explore.py 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ # GDB 'explore' command. -# Copyright (C) 2012-2020 Free Software Foundation, Inc. +# Copyright (C) 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/python/lib/gdb/command/frame_filters.py gdb-10.2/gdb/python/lib/gdb/command/frame_filters.py --- gdb-9.1/gdb/python/lib/gdb/command/frame_filters.py 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/python/lib/gdb/command/frame_filters.py 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ # Frame-filter commands. -# Copyright (C) 2013-2020 Free Software Foundation, Inc. +# Copyright (C) 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/python/lib/gdb/command/__init__.py gdb-10.2/gdb/python/lib/gdb/command/__init__.py --- gdb-9.1/gdb/python/lib/gdb/command/__init__.py 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/python/lib/gdb/command/__init__.py 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2010-2020 Free Software Foundation, Inc. +# Copyright (C) 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/python/lib/gdb/command/pretty_printers.py gdb-10.2/gdb/python/lib/gdb/command/pretty_printers.py --- gdb-9.1/gdb/python/lib/gdb/command/pretty_printers.py 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/python/lib/gdb/command/pretty_printers.py 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ # Pretty-printer commands. -# Copyright (C) 2010-2020 Free Software Foundation, Inc. +# Copyright (C) 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/python/lib/gdb/command/prompt.py gdb-10.2/gdb/python/lib/gdb/command/prompt.py --- gdb-9.1/gdb/python/lib/gdb/command/prompt.py 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/python/lib/gdb/command/prompt.py 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ # Extended prompt. -# Copyright (C) 2011-2020 Free Software Foundation, Inc. +# Copyright (C) 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/python/lib/gdb/command/type_printers.py gdb-10.2/gdb/python/lib/gdb/command/type_printers.py --- gdb-9.1/gdb/python/lib/gdb/command/type_printers.py 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/python/lib/gdb/command/type_printers.py 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ # Type printer commands. -# Copyright (C) 2010-2020 Free Software Foundation, Inc. +# Copyright (C) 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/python/lib/gdb/command/unwinders.py gdb-10.2/gdb/python/lib/gdb/command/unwinders.py --- gdb-9.1/gdb/python/lib/gdb/command/unwinders.py 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/python/lib/gdb/command/unwinders.py 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ # Unwinder commands. -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/python/lib/gdb/command/xmethods.py gdb-10.2/gdb/python/lib/gdb/command/xmethods.py --- gdb-9.1/gdb/python/lib/gdb/command/xmethods.py 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/python/lib/gdb/command/xmethods.py 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ # Xmethod commands. -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/python/lib/gdb/FrameDecorator.py gdb-10.2/gdb/python/lib/gdb/FrameDecorator.py --- gdb-9.1/gdb/python/lib/gdb/FrameDecorator.py 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/python/lib/gdb/FrameDecorator.py 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2013-2020 Free Software Foundation, Inc. +# Copyright (C) 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/python/lib/gdb/FrameIterator.py gdb-10.2/gdb/python/lib/gdb/FrameIterator.py --- gdb-9.1/gdb/python/lib/gdb/FrameIterator.py 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/python/lib/gdb/FrameIterator.py 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2013-2020 Free Software Foundation, Inc. +# Copyright (C) 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/python/lib/gdb/frames.py gdb-10.2/gdb/python/lib/gdb/frames.py --- gdb-9.1/gdb/python/lib/gdb/frames.py 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/python/lib/gdb/frames.py 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ # Frame-filter commands. -# Copyright (C) 2013-2020 Free Software Foundation, Inc. +# Copyright (C) 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/python/lib/gdb/function/as_string.py gdb-10.2/gdb/python/lib/gdb/function/as_string.py --- gdb-9.1/gdb/python/lib/gdb/function/as_string.py 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/python/lib/gdb/function/as_string.py 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2016-2020 Free Software Foundation, Inc. +# Copyright (C) 2016-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/python/lib/gdb/function/caller_is.py gdb-10.2/gdb/python/lib/gdb/function/caller_is.py --- gdb-9.1/gdb/python/lib/gdb/function/caller_is.py 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/python/lib/gdb/function/caller_is.py 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ # Caller-is functions. -# Copyright (C) 2008-2020 Free Software Foundation, Inc. +# Copyright (C) 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/python/lib/gdb/function/__init__.py gdb-10.2/gdb/python/lib/gdb/function/__init__.py --- gdb-9.1/gdb/python/lib/gdb/function/__init__.py 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/python/lib/gdb/function/__init__.py 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2012-2020 Free Software Foundation, Inc. +# Copyright (C) 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/python/lib/gdb/function/strfns.py gdb-10.2/gdb/python/lib/gdb/function/strfns.py --- gdb-9.1/gdb/python/lib/gdb/function/strfns.py 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/python/lib/gdb/function/strfns.py 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ # Useful gdb string convenience functions. -# Copyright (C) 2012-2020 Free Software Foundation, Inc. +# Copyright (C) 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/python/lib/gdb/__init__.py gdb-10.2/gdb/python/lib/gdb/__init__.py --- gdb-9.1/gdb/python/lib/gdb/__init__.py 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/python/lib/gdb/__init__.py 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2010-2020 Free Software Foundation, Inc. +# Copyright (C) 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -210,3 +210,17 @@ """find_pc_line (pc) -> Symtab_and_line. Return the gdb.Symtab_and_line object corresponding to the pc value.""" return current_progspace().find_pc_line(pc) + +try: + from pygments import formatters, lexers, highlight + def colorize(filename, contents): + # Don't want any errors. + try: + lexer = lexers.get_lexer_for_filename(filename, stripnl=False) + formatter = formatters.TerminalFormatter() + return highlight(contents, lexer, formatter) + except: + return None +except: + def colorize(filename, contents): + return None diff -Nru gdb-9.1/gdb/python/lib/gdb/printer/bound_registers.py gdb-10.2/gdb/python/lib/gdb/printer/bound_registers.py --- gdb-9.1/gdb/python/lib/gdb/printer/bound_registers.py 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/python/lib/gdb/printer/bound_registers.py 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ # Pretty-printers for bounds registers. -# Copyright (C) 2013-2020 Free Software Foundation, Inc. +# Copyright (C) 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/python/lib/gdb/printer/__init__.py gdb-10.2/gdb/python/lib/gdb/printer/__init__.py --- gdb-9.1/gdb/python/lib/gdb/printer/__init__.py 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/python/lib/gdb/printer/__init__.py 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2014-2020 Free Software Foundation, Inc. +# Copyright (C) 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/python/lib/gdb/printing.py gdb-10.2/gdb/python/lib/gdb/printing.py --- gdb-9.1/gdb/python/lib/gdb/printing.py 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/python/lib/gdb/printing.py 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ # Pretty-printer utilities. -# Copyright (C) 2010-2020 Free Software Foundation, Inc. +# Copyright (C) 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/python/lib/gdb/prompt.py gdb-10.2/gdb/python/lib/gdb/prompt.py --- gdb-9.1/gdb/python/lib/gdb/prompt.py 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/python/lib/gdb/prompt.py 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ # Extended prompt utilities. -# Copyright (C) 2011-2020 Free Software Foundation, Inc. +# Copyright (C) 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/python/lib/gdb/types.py gdb-10.2/gdb/python/lib/gdb/types.py --- gdb-9.1/gdb/python/lib/gdb/types.py 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/python/lib/gdb/types.py 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ # Type utilities. -# Copyright (C) 2010-2020 Free Software Foundation, Inc. +# Copyright (C) 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/python/lib/gdb/unwinder.py gdb-10.2/gdb/python/lib/gdb/unwinder.py --- gdb-9.1/gdb/python/lib/gdb/unwinder.py 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/python/lib/gdb/unwinder.py 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020 Free Software Foundation, Inc. +# Copyright (C) 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/python/lib/gdb/xmethod.py gdb-10.2/gdb/python/lib/gdb/xmethod.py --- gdb-9.1/gdb/python/lib/gdb/xmethod.py 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/python/lib/gdb/xmethod.py 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ # Python side of the support for xmethods. -# Copyright (C) 2013-2020 Free Software Foundation, Inc. +# Copyright (C) 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/python/py-all-events.def gdb-10.2/gdb/python/py-all-events.def --- gdb-9.1/gdb/python/py-all-events.def 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/python/py-all-events.def 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Python event definitions -*- c++ -*- - Copyright (C) 2017-2020 Free Software Foundation, Inc. + Copyright (C) 2017-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/python/py-arch.c gdb-10.2/gdb/python/py-arch.c --- gdb-9.1/gdb/python/py-arch.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/python/py-arch.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Python interface to architecture - Copyright (C) 2013-2020 Free Software Foundation, Inc. + Copyright (C) 2013-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -226,6 +226,42 @@ return result_list.release (); } +/* Implementation of gdb.Architecture.registers (self, reggroup) -> Iterator. + Returns an iterator over register descriptors for registers in GROUP + within the architecture SELF. */ + +static PyObject * +archpy_registers (PyObject *self, PyObject *args, PyObject *kw) +{ + static const char *keywords[] = { "reggroup", NULL }; + struct gdbarch *gdbarch = NULL; + const char *group_name = NULL; + + /* Parse method arguments. */ + if (!gdb_PyArg_ParseTupleAndKeywords (args, kw, "|s", keywords, + &group_name)) + return NULL; + + /* Extract the gdbarch from the self object. */ + ARCHPY_REQUIRE_VALID (self, gdbarch); + + return gdbpy_new_register_descriptor_iterator (gdbarch, group_name); +} + +/* Implementation of gdb.Architecture.register_groups (self) -> Iterator. + Returns an iterator that will give up all valid register groups in the + architecture SELF. */ + +static PyObject * +archpy_register_groups (PyObject *self, PyObject *args) +{ + struct gdbarch *gdbarch = NULL; + + /* Extract the gdbarch from the self object. */ + ARCHPY_REQUIRE_VALID (self, gdbarch); + return gdbpy_new_reggroup_iterator (gdbarch); +} + /* Initializes the Architecture class in the gdb module. */ int @@ -249,6 +285,15 @@ "disassemble (start_pc [, end_pc [, count]]) -> List.\n\ Return a list of at most COUNT disassembled instructions from START_PC to\n\ END_PC." }, + { "registers", (PyCFunction) archpy_registers, + METH_VARARGS | METH_KEYWORDS, + "registers ([ group-name ]) -> Iterator.\n\ +Return an iterator of register descriptors for the registers in register\n\ +group GROUP-NAME." }, + { "register_groups", archpy_register_groups, + METH_NOARGS, + "register_groups () -> Iterator.\n\ +Return an iterator over all of the register groups in this architecture." }, {NULL} /* Sentinel */ }; diff -Nru gdb-9.1/gdb/python/py-auto-load.c gdb-10.2/gdb/python/py-auto-load.c --- gdb-9.1/gdb/python/py-auto-load.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/python/py-auto-load.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* GDB routines for supporting auto-loaded scripts. - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -84,12 +84,12 @@ NULL, NULL, show_auto_load_python_scripts, &setlist, &showlist); cmd_name = "auto-load-scripts"; - cmd = lookup_cmd (&cmd_name, setlist, "", -1, 1); + cmd = lookup_cmd (&cmd_name, setlist, "", NULL, -1, 1); deprecate_cmd (cmd, "set auto-load python-scripts"); /* It is needed because lookup_cmd updates the CMD_NAME pointer. */ cmd_name = "auto-load-scripts"; - cmd = lookup_cmd (&cmd_name, showlist, "", -1, 1); + cmd = lookup_cmd (&cmd_name, showlist, "", NULL, -1, 1); deprecate_cmd (cmd, "show auto-load python-scripts"); add_cmd ("python-scripts", class_info, info_auto_load_python_scripts, diff -Nru gdb-9.1/gdb/python/py-block.c gdb-10.2/gdb/python/py-block.c --- gdb-9.1/gdb/python/py-block.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/python/py-block.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Python interface to blocks. - Copyright (C) 2008-2020 Free Software Foundation, Inc. + Copyright (C) 2008-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/python/py-bpevent.c gdb-10.2/gdb/python/py-bpevent.c --- gdb-9.1/gdb/python/py-bpevent.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/python/py-bpevent.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Python interface to inferior breakpoint stop events. - Copyright (C) 2009-2020 Free Software Foundation, Inc. + Copyright (C) 2009-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/python/py-breakpoint.c gdb-10.2/gdb/python/py-breakpoint.c --- gdb-9.1/gdb/python/py-breakpoint.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/python/py-breakpoint.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Python interface to breakpoints - Copyright (C) 2008-2020 Free Software Foundation, Inc. + Copyright (C) 2008-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/python/py-cmd.c gdb-10.2/gdb/python/py-cmd.c --- gdb-9.1/gdb/python/py-cmd.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/python/py-cmd.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* gdb commands implemented in Python - Copyright (C) 2008-2020 Free Software Foundation, Inc. + Copyright (C) 2008-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -390,7 +390,7 @@ std::string prefix_text (name, i + 1); prefix_text2 = prefix_text.c_str (); - elt = lookup_cmd_1 (&prefix_text2, *start_list, NULL, 1); + elt = lookup_cmd_1 (&prefix_text2, *start_list, NULL, NULL, 1); if (elt == NULL || elt == CMD_LIST_AMBIGUOUS) { PyErr_Format (PyExc_RuntimeError, _("Could not find command prefix %s."), @@ -465,7 +465,8 @@ && cmdtype != class_files && cmdtype != class_support && cmdtype != class_info && cmdtype != class_breakpoint && cmdtype != class_trace && cmdtype != class_obscure - && cmdtype != class_maintenance && cmdtype != class_user) + && cmdtype != class_maintenance && cmdtype != class_user + && cmdtype != class_tui) { PyErr_Format (PyExc_RuntimeError, _("Invalid command class argument.")); return -1; @@ -593,8 +594,7 @@ if (PyType_Ready (&cmdpy_object_type) < 0) return -1; - /* Note: alias and user are special; pseudo appears to be unused, - and there is no reason to expose tui, I think. */ + /* Note: alias and user are special. */ if (PyModule_AddIntConstant (gdb_module, "COMMAND_NONE", no_class) < 0 || PyModule_AddIntConstant (gdb_module, "COMMAND_RUNNING", class_run) < 0 || PyModule_AddIntConstant (gdb_module, "COMMAND_DATA", class_vars) < 0 @@ -611,7 +611,8 @@ class_obscure) < 0 || PyModule_AddIntConstant (gdb_module, "COMMAND_MAINTENANCE", class_maintenance) < 0 - || PyModule_AddIntConstant (gdb_module, "COMMAND_USER", class_user) < 0) + || PyModule_AddIntConstant (gdb_module, "COMMAND_USER", class_user) < 0 + || PyModule_AddIntConstant (gdb_module, "COMMAND_TUI", class_tui) < 0) return -1; for (i = 0; i < N_COMPLETERS; ++i) diff -Nru gdb-9.1/gdb/python/py-continueevent.c gdb-10.2/gdb/python/py-continueevent.c --- gdb-9.1/gdb/python/py-continueevent.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/python/py-continueevent.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Python interface to inferior continue events. - Copyright (C) 2009-2020 Free Software Foundation, Inc. + Copyright (C) 2009-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/python/py-event.c gdb-10.2/gdb/python/py-event.c --- gdb-9.1/gdb/python/py-event.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/python/py-event.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Python interface to inferior events. - Copyright (C) 2009-2020 Free Software Foundation, Inc. + Copyright (C) 2009-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/python/py-event.h gdb-10.2/gdb/python/py-event.h --- gdb-9.1/gdb/python/py-event.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/python/py-event.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Python interface to inferior events. - Copyright (C) 2009-2020 Free Software Foundation, Inc. + Copyright (C) 2009-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/python/py-events.h gdb-10.2/gdb/python/py-events.h --- gdb-9.1/gdb/python/py-events.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/python/py-events.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Python interface to inferior events. - Copyright (C) 2009-2020 Free Software Foundation, Inc. + Copyright (C) 2009-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/python/py-event-types.def gdb-10.2/gdb/python/py-event-types.def --- gdb-9.1/gdb/python/py-event-types.def 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/python/py-event-types.def 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Python event definitions -*- c++ -*- - Copyright (C) 2017-2020 Free Software Foundation, Inc. + Copyright (C) 2017-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/python/py-evtregistry.c gdb-10.2/gdb/python/py-evtregistry.c --- gdb-9.1/gdb/python/py-evtregistry.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/python/py-evtregistry.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Python interface to inferior thread event registries. - Copyright (C) 2009-2020 Free Software Foundation, Inc. + Copyright (C) 2009-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/python/py-evts.c gdb-10.2/gdb/python/py-evts.c --- gdb-9.1/gdb/python/py-evts.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/python/py-evts.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Python interface to inferior events. - Copyright (C) 2009-2020 Free Software Foundation, Inc. + Copyright (C) 2009-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/python/py-exitedevent.c gdb-10.2/gdb/python/py-exitedevent.c --- gdb-9.1/gdb/python/py-exitedevent.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/python/py-exitedevent.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Python interface to inferior exit events. - Copyright (C) 2009-2020 Free Software Foundation, Inc. + Copyright (C) 2009-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/python/py-finishbreakpoint.c gdb-10.2/gdb/python/py-finishbreakpoint.c --- gdb-9.1/gdb/python/py-finishbreakpoint.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/python/py-finishbreakpoint.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Python interface to finish breakpoints - Copyright (C) 2011-2020 Free Software Foundation, Inc. + Copyright (C) 2011-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -253,7 +253,7 @@ check_typedef (TYPE_TARGET_TYPE (SYMBOL_TYPE (function))); /* Remember only non-void return types. */ - if (TYPE_CODE (ret_type) != TYPE_CODE_VOID) + if (ret_type->code () != TYPE_CODE_VOID) { struct value *func_value; diff -Nru gdb-9.1/gdb/python/py-frame.c gdb-10.2/gdb/python/py-frame.c --- gdb-9.1/gdb/python/py-frame.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/python/py-frame.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Python interface to stack frames - Copyright (C) 2008-2020 Free Software Foundation, Inc. + Copyright (C) 2008-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -27,7 +27,6 @@ #include "python-internal.h" #include "symfile.h" #include "objfiles.h" -#include "user-regs.h" typedef struct { PyObject_HEAD @@ -242,12 +241,11 @@ static PyObject * frapy_read_register (PyObject *self, PyObject *args) { - const char *regnum_str; + PyObject *pyo_reg_id; struct value *val = NULL; - if (!PyArg_ParseTuple (args, "s", ®num_str)) + if (!PyArg_UnpackTuple (args, "read_register", 1, 1, &pyo_reg_id)) return NULL; - try { struct frame_info *frame; @@ -255,14 +253,18 @@ FRAPY_REQUIRE_VALID (self, frame); - regnum = user_reg_map_name_to_regnum (get_frame_arch (frame), - regnum_str, - strlen (regnum_str)); - if (regnum >= 0) - val = value_of_register (regnum, frame); + if (!gdbpy_parse_register_id (get_frame_arch (frame), pyo_reg_id, + ®num)) + { + PyErr_SetString (PyExc_ValueError, "Bad register"); + return NULL; + } + + gdb_assert (regnum >= 0); + val = value_of_register (regnum, frame); if (val == NULL) - PyErr_SetString (PyExc_ValueError, _("Unknown register.")); + PyErr_SetString (PyExc_ValueError, _("Can't read register.")); } catch (const gdb_exception &except) { diff -Nru gdb-9.1/gdb/python/py-framefilter.c gdb-10.2/gdb/python/py-framefilter.c --- gdb-9.1/gdb/python/py-framefilter.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/python/py-framefilter.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Python frame filters - Copyright (C) 2013-2020 Free Software Foundation, Inc. + Copyright (C) 2013-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -109,7 +109,7 @@ from the symbol. If mode is not "auto", then the language has been explicitly set, use that. */ if (language_mode == language_mode_auto) - *language = language_def (SYMBOL_LANGUAGE (*sym)); + *language = language_def ((*sym)->language ()); else *language = current_language; } @@ -240,9 +240,9 @@ if (args_type == MI_PRINT_ALL_VALUES) should_print = 1; else if (args_type == MI_PRINT_SIMPLE_VALUES - && TYPE_CODE (type) != TYPE_CODE_ARRAY - && TYPE_CODE (type) != TYPE_CODE_STRUCT - && TYPE_CODE (type) != TYPE_CODE_UNION) + && type->code () != TYPE_CODE_ARRAY + && type->code () != TYPE_CODE_STRUCT + && type->code () != TYPE_CODE_UNION) should_print = 1; } else if (args_type != NO_VALUES) @@ -320,7 +320,7 @@ { if (fa->val == NULL && fa->error == NULL) return; - language = language_def (SYMBOL_LANGUAGE (fa->sym)); + language = language_def (fa->sym->language ()); val = fa->val; } else @@ -349,14 +349,14 @@ string_file stb; fprintf_symbol_filtered (&stb, fa->sym->print_name (), - SYMBOL_LANGUAGE (fa->sym), + fa->sym->language (), DMGL_PARAMS | DMGL_ANSI); if (fa->entry_kind == print_entry_values_compact) { stb.puts ("="); fprintf_symbol_filtered (&stb, fa->sym->print_name (), - SYMBOL_LANGUAGE (fa->sym), + fa->sym->language (), DMGL_PARAMS | DMGL_ANSI); } if (fa->entry_kind == print_entry_values_only diff -Nru gdb-9.1/gdb/python/py-function.c gdb-10.2/gdb/python/py-function.c --- gdb-9.1/gdb/python/py-function.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/python/py-function.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Convenience functions implemented in Python. - Copyright (C) 2008-2020 Free Software Foundation, Inc. + Copyright (C) 2008-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/python/py-gdb-readline.c gdb-10.2/gdb/python/py-gdb-readline.c --- gdb-9.1/gdb/python/py-gdb-readline.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/python/py-gdb-readline.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Readline support for Python. - Copyright (C) 2012-2020 Free Software Foundation, Inc. + Copyright (C) 2012-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/python/py-inferior.c gdb-10.2/gdb/python/py-inferior.c --- gdb-9.1/gdb/python/py-inferior.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/python/py-inferior.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Python interface to inferiors. - Copyright (C) 2009-2020 Free Software Foundation, Inc. + Copyright (C) 2009-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -193,7 +193,7 @@ return; gdbpy_enter enter_py (objfile != NULL - ? get_objfile_arch (objfile) + ? objfile->arch () : target_gdbarch (), current_language); @@ -462,18 +462,6 @@ return pspace_to_pspace_object (pspace).release (); } -static int -build_inferior_list (struct inferior *inf, void *arg) -{ - PyObject *list = (PyObject *) arg; - gdbpy_ref<inferior_object> inferior = inferior_to_inferior_object (inf); - - if (inferior == NULL) - return 0; - - return PyList_Append (list, (PyObject *) inferior.get ()) ? 1 : 0; -} - /* Implementation of gdb.inferiors () -> (gdb.Inferior, ...). Returns a tuple of all inferiors. */ PyObject * @@ -483,8 +471,16 @@ if (list == NULL) return NULL; - if (iterate_over_inferiors (build_inferior_list, list.get ())) - return NULL; + for (inferior *inf : all_inferiors ()) + { + gdbpy_ref<inferior_object> inferior = inferior_to_inferior_object (inf); + + if (inferior == NULL) + continue; + + if (PyList_Append (list.get (), (PyObject *) inferior.get ()) != 0) + return NULL; + } return PyList_AsTuple (list.get ()); } @@ -740,7 +736,7 @@ GDB_PY_HANDLE_EXCEPTION (except); if (found) - return PyLong_FromLong (found_addr); + return gdb_py_object_from_ulongest (found_addr).release (); else Py_RETURN_NONE; } diff -Nru gdb-9.1/gdb/python/py-infevents.c gdb-10.2/gdb/python/py-infevents.c --- gdb-9.1/gdb/python/py-infevents.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/python/py-infevents.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Python interface to inferior function events. - Copyright (C) 2013-2020 Free Software Foundation, Inc. + Copyright (C) 2013-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -48,7 +48,7 @@ if (evpy_add_attribute (event.get (), "ptid", ptid_obj.get ()) < 0) return NULL; - gdbpy_ref<> addr_obj (PyLong_FromLongLong (addr)); + gdbpy_ref<> addr_obj = gdb_py_object_from_ulongest (addr); if (addr_obj == NULL) return NULL; @@ -97,7 +97,7 @@ if (event == NULL) return NULL; - gdbpy_ref<> addr_obj (PyLong_FromLongLong (addr)); + gdbpy_ref<> addr_obj = gdb_py_object_from_ulongest (addr); if (addr_obj == NULL) return NULL; diff -Nru gdb-9.1/gdb/python/py-infthread.c gdb-10.2/gdb/python/py-infthread.c --- gdb-9.1/gdb/python/py-infthread.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/python/py-infthread.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Python interface to inferior threads. - Copyright (C) 2009-2020 Free Software Foundation, Inc. + Copyright (C) 2009-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/python/py-instruction.c gdb-10.2/gdb/python/py-instruction.c --- gdb-9.1/gdb/python/py-instruction.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/python/py-instruction.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Python interface to instruction objects. - Copyright 2017-2020 Free Software Foundation, Inc. + Copyright 2017-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/python/py-instruction.h gdb-10.2/gdb/python/py-instruction.h --- gdb-9.1/gdb/python/py-instruction.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/python/py-instruction.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Python interface to instruction objects. - Copyright 2017-2020 Free Software Foundation, Inc. + Copyright 2017-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/python/py-lazy-string.c gdb-10.2/gdb/python/py-lazy-string.c --- gdb-9.1/gdb/python/py-lazy-string.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/python/py-lazy-string.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Python interface to lazy strings. - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -120,7 +120,7 @@ gdb_assert (type != NULL); realtype = check_typedef (type); - switch (TYPE_CODE (realtype)) + switch (realtype->code ()) { case TYPE_CODE_PTR: /* If a length is specified we need to convert this to an array @@ -194,7 +194,7 @@ } realtype = check_typedef (type); - switch (TYPE_CODE (realtype)) + switch (realtype->code ()) { case TYPE_CODE_ARRAY: { @@ -258,7 +258,7 @@ gdb_assert (type != NULL); realtype = check_typedef (type); - switch (TYPE_CODE (realtype)) + switch (realtype->code ()) { case TYPE_CODE_PTR: case TYPE_CODE_ARRAY: diff -Nru gdb-9.1/gdb/python/py-linetable.c gdb-10.2/gdb/python/py-linetable.c --- gdb-9.1/gdb/python/py-linetable.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/python/py-linetable.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Python interface to line tables. - Copyright (C) 2013-2020 Free Software Foundation, Inc. + Copyright (C) 2013-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -336,7 +336,7 @@ { linetable_entry_object *obj = (linetable_entry_object *) self; - return gdb_py_object_from_longest (obj->pc).release (); + return gdb_py_object_from_ulongest (obj->pc).release (); } /* LineTable iterator functions. */ diff -Nru gdb-9.1/gdb/python/py-newobjfileevent.c gdb-10.2/gdb/python/py-newobjfileevent.c --- gdb-9.1/gdb/python/py-newobjfileevent.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/python/py-newobjfileevent.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Python interface to new object file loading events. - Copyright (C) 2011-2020 Free Software Foundation, Inc. + Copyright (C) 2011-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/python/py-objfile.c gdb-10.2/gdb/python/py-objfile.c --- gdb-9.1/gdb/python/py-objfile.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/python/py-objfile.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Python interface to objfiles. - Copyright (C) 2008-2020 Free Software Foundation, Inc. + Copyright (C) 2008-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -661,7 +661,7 @@ static void py_free_objfile (struct objfile *objfile, void *datum) { - gdbpy_enter enter_py (get_objfile_arch (objfile), current_language); + gdbpy_enter enter_py (objfile->arch (), current_language); gdbpy_ref<objfile_object> object ((objfile_object *) datum); object->objfile = NULL; } diff -Nru gdb-9.1/gdb/python/py-param.c gdb-10.2/gdb/python/py-param.c --- gdb-9.1/gdb/python/py-param.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/python/py-param.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* GDB parameters implemented in Python - Copyright (C) 2008-2020 Free Software Foundation, Inc. + Copyright (C) 2008-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -569,12 +569,12 @@ /* Lookup created parameter, and register Python object against the parameter context. Perform this task against both lists. */ tmp_name = cmd_name; - param = lookup_cmd (&tmp_name, *show_list, "", 0, 1); + param = lookup_cmd (&tmp_name, *show_list, "", NULL, 0, 1); if (param) set_cmd_context (param, self); tmp_name = cmd_name; - param = lookup_cmd (&tmp_name, *set_list, "", 0, 1); + param = lookup_cmd (&tmp_name, *set_list, "", NULL, 0, 1); if (param) set_cmd_context (param, self); } diff -Nru gdb-9.1/gdb/python/py-prettyprint.c gdb-10.2/gdb/python/py-prettyprint.c --- gdb-9.1/gdb/python/py-prettyprint.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/python/py-prettyprint.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Python pretty-printing - Copyright (C) 2008-2020 Free Software Foundation, Inc. + Copyright (C) 2008-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -558,22 +558,20 @@ enum ext_lang_rc gdbpy_apply_val_pretty_printer (const struct extension_language_defn *extlang, - struct type *type, - LONGEST embedded_offset, CORE_ADDR address, + struct value *value, struct ui_file *stream, int recurse, - struct value *val, const struct value_print_options *options, const struct language_defn *language) { + struct type *type = value_type (value); struct gdbarch *gdbarch = get_type_arch (type); - struct value *value; enum string_repr_result print_result; - if (value_lazy (val)) - value_fetch_lazy (val); + if (value_lazy (value)) + value_fetch_lazy (value); /* No pretty-printer support for unavailable values. */ - if (!value_bytes_available (val, embedded_offset, TYPE_LENGTH (type))) + if (!value_bytes_available (value, 0, TYPE_LENGTH (type))) return EXT_LANG_RC_NOP; if (!gdb_python_initialized) @@ -581,10 +579,7 @@ gdbpy_enter enter_py (gdbarch, language); - /* Instantiate the printer. */ - value = value_from_component (val, type, embedded_offset); - - gdbpy_ref<> val_obj (value_to_value_object (value)); + gdbpy_ref<> val_obj (value_to_value_object_no_release (value)); if (val_obj == NULL) { print_stack_unless_memory_error (stream); diff -Nru gdb-9.1/gdb/python/py-progspace.c gdb-10.2/gdb/python/py-progspace.c --- gdb-9.1/gdb/python/py-progspace.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/python/py-progspace.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Python interface to program spaces. - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/python/py-record-btrace.c gdb-10.2/gdb/python/py-record-btrace.c --- gdb-9.1/gdb/python/py-record-btrace.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/python/py-record-btrace.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Python interface to btrace instruction history. - Copyright 2016-2020 Free Software Foundation, Inc. + Copyright 2016-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -808,7 +808,7 @@ struct PyMethodDef btpy_list_methods[] = { - { "count", btpy_list_count, METH_O, "count number of occurences"}, + { "count", btpy_list_count, METH_O, "count number of occurrences"}, { "index", btpy_list_index, METH_O, "index of entry"}, {NULL} }; diff -Nru gdb-9.1/gdb/python/py-record-btrace.h gdb-10.2/gdb/python/py-record-btrace.h --- gdb-9.1/gdb/python/py-record-btrace.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/python/py-record-btrace.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Python interface to btrace record targets. - Copyright 2016-2020 Free Software Foundation, Inc. + Copyright 2016-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/python/py-record.c gdb-10.2/gdb/python/py-record.c --- gdb-9.1/gdb/python/py-record.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/python/py-record.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Python interface to record targets. - Copyright 2016-2020 Free Software Foundation, Inc. + Copyright 2016-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/python/py-record-full.c gdb-10.2/gdb/python/py-record-full.c --- gdb-9.1/gdb/python/py-record-full.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/python/py-record-full.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Python interface to btrace instruction history. - Copyright 2016-2020 Free Software Foundation, Inc. + Copyright 2016-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/python/py-record-full.h gdb-10.2/gdb/python/py-record-full.h --- gdb-9.1/gdb/python/py-record-full.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/python/py-record-full.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Python interface to full record targets. - Copyright 2016-2020 Free Software Foundation, Inc. + Copyright 2016-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/python/py-record.h gdb-10.2/gdb/python/py-record.h --- gdb-9.1/gdb/python/py-record.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/python/py-record.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Python interface to record targets. - Copyright 2017-2020 Free Software Foundation, Inc. + Copyright 2017-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/python/py-ref.h gdb-10.2/gdb/python/py-ref.h --- gdb-9.1/gdb/python/py-ref.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/python/py-ref.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Python reference-holding class - Copyright (C) 2016-2020 Free Software Foundation, Inc. + Copyright (C) 2016-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/python/py-registers.c gdb-10.2/gdb/python/py-registers.c --- gdb-9.1/gdb/python/py-registers.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/python/py-registers.c 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,613 @@ +/* Python interface to register, and register group information. + + Copyright (C) 2020-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "defs.h" +#include "gdbarch.h" +#include "arch-utils.h" +#include "disasm.h" +#include "reggroups.h" +#include "python-internal.h" +#include "user-regs.h" +#include <unordered_map> + +/* Token to access per-gdbarch data related to register descriptors. */ +static struct gdbarch_data *gdbpy_register_object_data = NULL; + +/* Structure for iterator over register descriptors. */ +typedef struct { + PyObject_HEAD + + /* The register group that the user is iterating over. This will never + be NULL. */ + struct reggroup *reggroup; + + /* The next register number to lookup. Starts at 0 and counts up. */ + int regnum; + + /* Pointer back to the architecture we're finding registers for. */ + struct gdbarch *gdbarch; +} register_descriptor_iterator_object; + +extern PyTypeObject register_descriptor_iterator_object_type + CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("register_descriptor_iterator_object"); + +/* A register descriptor. */ +typedef struct { + PyObject_HEAD + + /* The register this is a descriptor for. */ + int regnum; + + /* The architecture this is a register for. */ + struct gdbarch *gdbarch; +} register_descriptor_object; + +extern PyTypeObject register_descriptor_object_type + CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("register_descriptor_object"); + +/* Structure for iterator over register groups. */ +typedef struct { + PyObject_HEAD + + /* The last register group returned. Initially this will be NULL. */ + struct reggroup *reggroup; + + /* Pointer back to the architecture we're finding registers for. */ + struct gdbarch *gdbarch; +} reggroup_iterator_object; + +extern PyTypeObject reggroup_iterator_object_type + CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("reggroup_iterator_object"); + +/* A register group object. */ +typedef struct { + PyObject_HEAD + + /* The register group being described. */ + struct reggroup *reggroup; +} reggroup_object; + +extern PyTypeObject reggroup_object_type + CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("reggroup_object"); + +/* Associates a vector of gdb.RegisterDescriptor objects with GDBARCH as + gdbarch_data via the gdbarch post init registration mechanism + (gdbarch_data_register_post_init). */ + +static void * +gdbpy_register_object_data_init (struct gdbarch *gdbarch) +{ + return new std::vector<gdbpy_ref<>>; +} + +/* Return a gdb.RegisterGroup object wrapping REGGROUP. The register + group objects are cached, and the same Python object will always be + returned for the same REGGROUP pointer. */ + +static gdbpy_ref<> +gdbpy_get_reggroup (struct reggroup *reggroup) +{ + /* Map from GDB's internal reggroup objects to the Python representation. + GDB's reggroups are global, and are never deleted, so using a map like + this is safe. */ + static std::unordered_map<struct reggroup *,gdbpy_ref<>> + gdbpy_reggroup_object_map; + + /* If there is not already a suitable Python object in the map then + create a new one, and add it to the map. */ + if (gdbpy_reggroup_object_map[reggroup] == nullptr) + { + /* Create a new object and fill in its details. */ + gdbpy_ref<reggroup_object> group + (PyObject_New (reggroup_object, ®group_object_type)); + if (group == NULL) + return NULL; + group->reggroup = reggroup; + gdbpy_reggroup_object_map[reggroup] + = gdbpy_ref<> ((PyObject *) group.release ()); + } + + /* Fetch the Python object wrapping REGGROUP from the map, increasing + the reference count is handled by the gdbpy_ref class. */ + return gdbpy_reggroup_object_map[reggroup]; +} + +/* Convert a gdb.RegisterGroup to a string, it just returns the name of + the register group. */ + +static PyObject * +gdbpy_reggroup_to_string (PyObject *self) +{ + reggroup_object *group = (reggroup_object *) self; + struct reggroup *reggroup = group->reggroup; + + const char *name = reggroup_name (reggroup); + return PyString_FromString (name); +} + +/* Implement gdb.RegisterGroup.name (self) -> String. + Return a string that is the name of this register group. */ + +static PyObject * +gdbpy_reggroup_name (PyObject *self, void *closure) +{ + return gdbpy_reggroup_to_string (self); +} + +/* Return a gdb.RegisterDescriptor object for REGNUM from GDBARCH. For + each REGNUM (in GDBARCH) only one descriptor is ever created, which is + then cached on the GDBARCH. */ + +static gdbpy_ref<> +gdbpy_get_register_descriptor (struct gdbarch *gdbarch, + int regnum) +{ + auto &vec + = *(std::vector<gdbpy_ref<>> *) gdbarch_data (gdbarch, + gdbpy_register_object_data); + + /* Ensure that we have enough entries in the vector. */ + if (vec.size () <= regnum) + vec.resize ((regnum + 1), nullptr); + + /* If we don't already have a descriptor for REGNUM in GDBARCH then + create one now. */ + if (vec[regnum] == nullptr) + { + gdbpy_ref <register_descriptor_object> reg + (PyObject_New (register_descriptor_object, + ®ister_descriptor_object_type)); + if (reg == NULL) + return NULL; + reg->regnum = regnum; + reg->gdbarch = gdbarch; + vec[regnum] = gdbpy_ref<> ((PyObject *) reg.release ()); + } + + /* Grab the register descriptor from the vector, the reference count is + automatically incremented thanks to gdbpy_ref. */ + return vec[regnum]; +} + +/* Convert the register descriptor to a string. */ + +static PyObject * +gdbpy_register_descriptor_to_string (PyObject *self) +{ + register_descriptor_object *reg + = (register_descriptor_object *) self; + struct gdbarch *gdbarch = reg->gdbarch; + int regnum = reg->regnum; + + const char *name = gdbarch_register_name (gdbarch, regnum); + return PyString_FromString (name); +} + +/* Implement gdb.RegisterDescriptor.name attribute get function. Return a + string that is the name of this register. Due to checking when register + descriptors are created the name will never by the empty string. */ + +static PyObject * +gdbpy_register_descriptor_name (PyObject *self, void *closure) +{ + return gdbpy_register_descriptor_to_string (self); +} + +/* Return a reference to the gdb.RegisterGroupsIterator object. */ + +static PyObject * +gdbpy_reggroup_iter (PyObject *self) +{ + Py_INCREF (self); + return self; +} + +/* Return the next gdb.RegisterGroup object from the iterator. */ + +static PyObject * +gdbpy_reggroup_iter_next (PyObject *self) +{ + reggroup_iterator_object *iter_obj + = (reggroup_iterator_object *) self; + struct gdbarch *gdbarch = iter_obj->gdbarch; + + struct reggroup *next_group = reggroup_next (gdbarch, iter_obj->reggroup); + if (next_group == NULL) + { + PyErr_SetString (PyExc_StopIteration, _("No more groups")); + return NULL; + } + + iter_obj->reggroup = next_group; + return gdbpy_get_reggroup (iter_obj->reggroup).release (); +} + +/* Return a new gdb.RegisterGroupsIterator over all the register groups in + GDBARCH. */ + +PyObject * +gdbpy_new_reggroup_iterator (struct gdbarch *gdbarch) +{ + gdb_assert (gdbarch != nullptr); + + /* Create a new object and fill in its internal state. */ + reggroup_iterator_object *iter + = PyObject_New (reggroup_iterator_object, + ®group_iterator_object_type); + if (iter == NULL) + return NULL; + iter->reggroup = NULL; + iter->gdbarch = gdbarch; + return (PyObject *) iter; +} + +/* Create and return a new gdb.RegisterDescriptorIterator object which + will iterate over all registers in GROUP_NAME for GDBARCH. If + GROUP_NAME is either NULL or the empty string then the ALL_REGGROUP is + used, otherwise lookup the register group matching GROUP_NAME and use + that. + + This function can return NULL if GROUP_NAME isn't found. */ + +PyObject * +gdbpy_new_register_descriptor_iterator (struct gdbarch *gdbarch, + const char *group_name) +{ + struct reggroup *grp = NULL; + + /* Lookup the requested register group, or find the default. */ + if (group_name == NULL || *group_name == '\0') + grp = all_reggroup; + else + { + grp = reggroup_find (gdbarch, group_name); + if (grp == NULL) + { + PyErr_SetString (PyExc_ValueError, + _("Unknown register group name.")); + return NULL; + } + } + /* Create a new iterator object initialised for this architecture and + fill in all of the details. */ + register_descriptor_iterator_object *iter + = PyObject_New (register_descriptor_iterator_object, + ®ister_descriptor_iterator_object_type); + if (iter == NULL) + return NULL; + iter->regnum = 0; + iter->gdbarch = gdbarch; + gdb_assert (grp != NULL); + iter->reggroup = grp; + + return (PyObject *) iter; +} + +/* Return a reference to the gdb.RegisterDescriptorIterator object. */ + +static PyObject * +gdbpy_register_descriptor_iter (PyObject *self) +{ + Py_INCREF (self); + return self; +} + +/* Return the next register name. */ + +static PyObject * +gdbpy_register_descriptor_iter_next (PyObject *self) +{ + register_descriptor_iterator_object *iter_obj + = (register_descriptor_iterator_object *) self; + struct gdbarch *gdbarch = iter_obj->gdbarch; + + do + { + if (iter_obj->regnum >= gdbarch_num_cooked_regs (gdbarch)) + { + PyErr_SetString (PyExc_StopIteration, _("No more registers")); + return NULL; + } + + const char *name = nullptr; + int regnum = iter_obj->regnum; + if (gdbarch_register_reggroup_p (gdbarch, regnum, + iter_obj->reggroup)) + name = gdbarch_register_name (gdbarch, regnum); + iter_obj->regnum++; + + if (name != nullptr && *name != '\0') + return gdbpy_get_register_descriptor (gdbarch, regnum).release (); + } + while (true); +} + +/* Implement: + + gdb.RegisterDescriptorIterator.find (self, name) -> gdb.RegisterDescriptor + + Look up a descriptor for register with NAME. If no matching register is + found then return None. */ + +static PyObject * +register_descriptor_iter_find (PyObject *self, PyObject *args, PyObject *kw) +{ + static const char *keywords[] = { "name", NULL }; + const char *register_name = NULL; + + register_descriptor_iterator_object *iter_obj + = (register_descriptor_iterator_object *) self; + struct gdbarch *gdbarch = iter_obj->gdbarch; + + if (!gdb_PyArg_ParseTupleAndKeywords (args, kw, "s", keywords, + ®ister_name)) + return NULL; + + if (register_name != NULL && *register_name != '\0') + { + int regnum = user_reg_map_name_to_regnum (gdbarch, register_name, + strlen (register_name)); + if (regnum >= 0) + return gdbpy_get_register_descriptor (gdbarch, regnum).release (); + } + + Py_RETURN_NONE; +} + +/* See python-internal.h. */ + +bool +gdbpy_parse_register_id (struct gdbarch *gdbarch, PyObject *pyo_reg_id, + int *reg_num) +{ + gdb_assert (pyo_reg_id != NULL); + + /* The register could be a string, its name. */ + if (gdbpy_is_string (pyo_reg_id)) + { + gdb::unique_xmalloc_ptr<char> reg_name (gdbpy_obj_to_string (pyo_reg_id)); + + if (reg_name != NULL) + { + *reg_num = user_reg_map_name_to_regnum (gdbarch, reg_name.get (), + strlen (reg_name.get ())); + return *reg_num >= 0; + } + } + /* The register could be its internal GDB register number. */ + else if (PyInt_Check (pyo_reg_id)) + { + long value; + if (gdb_py_int_as_long (pyo_reg_id, &value) && (int) value == value) + { + if (user_reg_map_regnum_to_name (gdbarch, value) != NULL) + { + *reg_num = (int) value; + return true; + } + } + } + /* The register could be a gdb.RegisterDescriptor object. */ + else if (PyObject_IsInstance (pyo_reg_id, + (PyObject *) ®ister_descriptor_object_type)) + { + register_descriptor_object *reg + = (register_descriptor_object *) pyo_reg_id; + if (reg->gdbarch == gdbarch) + { + *reg_num = reg->regnum; + return true; + } + else + PyErr_SetString (PyExc_ValueError, + _("Invalid Architecture in RegisterDescriptor")); + } + + gdb_assert (PyErr_Occurred ()); + return false; +} + +/* Initializes the new Python classes from this file in the gdb module. */ + +int +gdbpy_initialize_registers () +{ + gdbpy_register_object_data + = gdbarch_data_register_post_init (gdbpy_register_object_data_init); + + register_descriptor_object_type.tp_new = PyType_GenericNew; + if (PyType_Ready (®ister_descriptor_object_type) < 0) + return -1; + if (gdb_pymodule_addobject + (gdb_module, "RegisterDescriptor", + (PyObject *) ®ister_descriptor_object_type) < 0) + return -1; + + reggroup_iterator_object_type.tp_new = PyType_GenericNew; + if (PyType_Ready (®group_iterator_object_type) < 0) + return -1; + if (gdb_pymodule_addobject + (gdb_module, "RegisterGroupsIterator", + (PyObject *) ®group_iterator_object_type) < 0) + return -1; + + reggroup_object_type.tp_new = PyType_GenericNew; + if (PyType_Ready (®group_object_type) < 0) + return -1; + if (gdb_pymodule_addobject + (gdb_module, "RegisterGroup", + (PyObject *) ®group_object_type) < 0) + return -1; + + register_descriptor_iterator_object_type.tp_new = PyType_GenericNew; + if (PyType_Ready (®ister_descriptor_iterator_object_type) < 0) + return -1; + return (gdb_pymodule_addobject + (gdb_module, "RegisterDescriptorIterator", + (PyObject *) ®ister_descriptor_iterator_object_type)); +} + +static PyMethodDef register_descriptor_iterator_object_methods [] = { + { "find", (PyCFunction) register_descriptor_iter_find, + METH_VARARGS | METH_KEYWORDS, + "registers (name) -> gdb.RegisterDescriptor.\n\ +Return a register descriptor for the register NAME, or None if no register\n\ +with that name exists in this iterator." }, + {NULL} /* Sentinel */ +}; + +PyTypeObject register_descriptor_iterator_object_type = { + PyVarObject_HEAD_INIT (NULL, 0) + "gdb.RegisterDescriptorIterator", /*tp_name*/ + sizeof (register_descriptor_iterator_object), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + 0, /*tp_dealloc*/ + 0, /*tp_print*/ + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + 0, /*tp_compare*/ + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash */ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_ITER, /*tp_flags*/ + "GDB architecture register descriptor iterator object", /*tp_doc */ + 0, /*tp_traverse */ + 0, /*tp_clear */ + 0, /*tp_richcompare */ + 0, /*tp_weaklistoffset */ + gdbpy_register_descriptor_iter, /*tp_iter */ + gdbpy_register_descriptor_iter_next, /*tp_iternext */ + register_descriptor_iterator_object_methods /*tp_methods */ +}; + +static gdb_PyGetSetDef gdbpy_register_descriptor_getset[] = { + { "name", gdbpy_register_descriptor_name, NULL, + "The name of this register.", NULL }, + { NULL } /* Sentinel */ +}; + +PyTypeObject register_descriptor_object_type = { + PyVarObject_HEAD_INIT (NULL, 0) + "gdb.RegisterDescriptor", /*tp_name*/ + sizeof (register_descriptor_object), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + 0, /*tp_dealloc*/ + 0, /*tp_print*/ + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + 0, /*tp_compare*/ + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash */ + 0, /*tp_call*/ + gdbpy_register_descriptor_to_string, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT, /*tp_flags*/ + "GDB architecture register descriptor object", /*tp_doc */ + 0, /*tp_traverse */ + 0, /*tp_clear */ + 0, /*tp_richcompare */ + 0, /*tp_weaklistoffset */ + 0, /*tp_iter */ + 0, /*tp_iternext */ + 0, /*tp_methods */ + 0, /*tp_members */ + gdbpy_register_descriptor_getset /*tp_getset */ +}; + +PyTypeObject reggroup_iterator_object_type = { + PyVarObject_HEAD_INIT (NULL, 0) + "gdb.RegisterGroupsIterator", /*tp_name*/ + sizeof (reggroup_iterator_object), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + 0, /*tp_dealloc*/ + 0, /*tp_print*/ + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + 0, /*tp_compare*/ + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash */ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_ITER, /*tp_flags*/ + "GDB register groups iterator object", /*tp_doc */ + 0, /*tp_traverse */ + 0, /*tp_clear */ + 0, /*tp_richcompare */ + 0, /*tp_weaklistoffset */ + gdbpy_reggroup_iter, /*tp_iter */ + gdbpy_reggroup_iter_next, /*tp_iternext */ + 0 /*tp_methods */ +}; + +static gdb_PyGetSetDef gdbpy_reggroup_getset[] = { + { "name", gdbpy_reggroup_name, NULL, + "The name of this register group.", NULL }, + { NULL } /* Sentinel */ +}; + +PyTypeObject reggroup_object_type = { + PyVarObject_HEAD_INIT (NULL, 0) + "gdb.RegisterGroup", /*tp_name*/ + sizeof (reggroup_object), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + 0, /*tp_dealloc*/ + 0, /*tp_print*/ + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + 0, /*tp_compare*/ + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash */ + 0, /*tp_call*/ + gdbpy_reggroup_to_string, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT, /*tp_flags*/ + "GDB register group object", /*tp_doc */ + 0, /*tp_traverse */ + 0, /*tp_clear */ + 0, /*tp_richcompare */ + 0, /*tp_weaklistoffset */ + 0, /*tp_iter */ + 0, /*tp_iternext */ + 0, /*tp_methods */ + 0, /*tp_members */ + gdbpy_reggroup_getset /*tp_getset */ +}; diff -Nru gdb-9.1/gdb/python/py-signalevent.c gdb-10.2/gdb/python/py-signalevent.c --- gdb-9.1/gdb/python/py-signalevent.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/python/py-signalevent.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Python interface to inferior signal stop events. - Copyright (C) 2009-2020 Free Software Foundation, Inc. + Copyright (C) 2009-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/python/py-stopevent.c gdb-10.2/gdb/python/py-stopevent.c --- gdb-9.1/gdb/python/py-stopevent.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/python/py-stopevent.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Python interface to inferior stop events. - Copyright (C) 2009-2020 Free Software Foundation, Inc. + Copyright (C) 2009-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/python/py-stopevent.h gdb-10.2/gdb/python/py-stopevent.h --- gdb-9.1/gdb/python/py-stopevent.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/python/py-stopevent.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Python interface to inferior events. - Copyright (C) 2009-2020 Free Software Foundation, Inc. + Copyright (C) 2009-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/python/py-symbol.c gdb-10.2/gdb/python/py-symbol.c --- gdb-9.1/gdb/python/py-symbol.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/python/py-symbol.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Python interface to symbols. - Copyright (C) 2008-2020 Free Software Foundation, Inc. + Copyright (C) 2008-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/python/py-symtab.c gdb-10.2/gdb/python/py-symtab.c --- gdb-9.1/gdb/python/py-symtab.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/python/py-symtab.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Python interface to symbol tables. - Copyright (C) 2008-2020 Free Software Foundation, Inc. + Copyright (C) 2008-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/python/python.c gdb-10.2/gdb/python/python.c --- gdb-9.1/gdb/python/python.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/python/python.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* General python/gdb code - Copyright (C) 2008-2020 Free Software Foundation, Inc. + Copyright (C) 2008-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -27,7 +27,7 @@ #include "objfiles.h" #include "value.h" #include "language.h" -#include "event-loop.h" +#include "gdbsupport/event-loop.h" #include "readline/tilde.h" #include "python.h" #include "extension-priv.h" @@ -149,6 +149,8 @@ static int gdbpy_check_quit_flag (const struct extension_language_defn *); static enum ext_lang_rc gdbpy_before_prompt_hook (const struct extension_language_defn *, const char *current_gdb_prompt); +static gdb::optional<std::string> gdbpy_colorize + (const std::string &filename, const std::string &contents); /* The interface between gdb proper and loading of python scripts. */ @@ -188,6 +190,8 @@ gdbpy_before_prompt_hook, gdbpy_get_matching_xmethod_workers, + + gdbpy_colorize, }; /* Architecture and language to be used in callbacks from @@ -234,6 +238,30 @@ PyGILState_Release (m_state); } +/* A helper class to save and restore the GIL, but without touching + the other globals that are handled by gdbpy_enter. */ + +class gdbpy_gil +{ +public: + + gdbpy_gil () + : m_state (PyGILState_Ensure ()) + { + } + + ~gdbpy_gil () + { + PyGILState_Release (m_state); + } + + DISABLE_COPY_AND_ASSIGN (gdbpy_gil); + +private: + + PyGILState_STATE m_state; +}; + /* Set the quit flag. */ static void @@ -247,6 +275,10 @@ static int gdbpy_check_quit_flag (const struct extension_language_defn *extlang) { + if (!gdb_python_initialized) + return 0; + + gdbpy_gil gil; return PyOS_InterruptOccurred (); } @@ -620,6 +652,12 @@ } catch (const gdb_exception &except) { + /* If an exception occurred then we won't hit normal_stop (), or have + an exception reach the top level of the event loop, which are the + two usual places in which stdin would be re-enabled. So, before we + convert the exception and continue back in Python, we should + re-enable stdin here. */ + async_enable_stdin (); GDB_PY_HANDLE_EXCEPTION (except); } @@ -810,6 +848,15 @@ if (! PyArg_ParseTuple (args, "|s", &arg)) return NULL; + /* Treat a string consisting of just whitespace the same as + NULL. */ + if (arg != NULL) + { + arg = skip_spaces (arg); + if (*arg == '\0') + arg = NULL; + } + if (arg != NULL) location = string_to_event_location_basic (&arg, python_language, symbol_name_match_type::WILD); @@ -924,30 +971,6 @@ /* Posting and handling events. */ -/* A helper class to save and restore the GIL, but without touching - the other globals that are handled by gdbpy_enter. */ - -class gdbpy_gil -{ -public: - - gdbpy_gil () - : m_state (PyGILState_Ensure ()) - { - } - - ~gdbpy_gil () - { - PyGILState_Release (m_state); - } - - DISABLE_COPY_AND_ASSIGN (gdbpy_gil); - -private: - - PyGILState_STATE m_state; -}; - /* A single event. */ struct gdbpy_event { @@ -956,7 +979,7 @@ { } - gdbpy_event (gdbpy_event &&other) + gdbpy_event (gdbpy_event &&other) noexcept : m_func (other.m_func) { other.m_func = nullptr; @@ -1095,6 +1118,74 @@ return EXT_LANG_RC_NOP; } +/* This is the extension_language_ops.colorize "method". */ + +static gdb::optional<std::string> +gdbpy_colorize (const std::string &filename, const std::string &contents) +{ + if (!gdb_python_initialized) + return {}; + + gdbpy_enter enter_py (get_current_arch (), current_language); + + if (gdb_python_module == nullptr + || !PyObject_HasAttrString (gdb_python_module, "colorize")) + return {}; + + gdbpy_ref<> hook (PyObject_GetAttrString (gdb_python_module, "colorize")); + if (hook == nullptr) + { + gdbpy_print_stack (); + return {}; + } + + if (!PyCallable_Check (hook.get ())) + return {}; + + gdbpy_ref<> fname_arg (PyString_FromString (filename.c_str ())); + if (fname_arg == nullptr) + { + gdbpy_print_stack (); + return {}; + } + gdbpy_ref<> contents_arg (PyString_FromString (contents.c_str ())); + if (contents_arg == nullptr) + { + gdbpy_print_stack (); + return {}; + } + + gdbpy_ref<> result (PyObject_CallFunctionObjArgs (hook.get (), + fname_arg.get (), + contents_arg.get (), + nullptr)); + if (result == nullptr) + { + gdbpy_print_stack (); + return {}; + } + + if (!gdbpy_is_string (result.get ())) + return {}; + + gdbpy_ref<> unic = python_string_to_unicode (result.get ()); + if (unic == nullptr) + { + gdbpy_print_stack (); + return {}; + } + gdbpy_ref<> host_str (PyUnicode_AsEncodedString (unic.get (), + host_charset (), + nullptr)); + if (host_str == nullptr) + { + gdbpy_print_stack (); + return {}; + } + + return std::string (PyBytes_AsString (host_str.get ())); +} + /* Printing. */ @@ -1263,19 +1354,17 @@ static PyObject * gdbpy_progspaces (PyObject *unused1, PyObject *unused2) { - struct program_space *ps; - gdbpy_ref<> list (PyList_New (0)); if (list == NULL) return NULL; - ALL_PSPACES (ps) - { - gdbpy_ref<> item = pspace_to_pspace_object (ps); + for (struct program_space *ps : program_spaces) + { + gdbpy_ref<> item = pspace_to_pspace_object (ps); - if (item == NULL || PyList_Append (list.get (), item.get ()) == -1) - return NULL; - } + if (item == NULL || PyList_Append (list.get (), item.get ()) == -1) + return NULL; + } return list.release (); } @@ -1302,7 +1391,7 @@ if (!gdb_python_initialized) return; - gdbpy_enter enter_py (get_objfile_arch (objfile), current_language); + gdbpy_enter enter_py (objfile->arch (), current_language); gdbpy_current_objfile = objfile; python_run_simple_file (file, filename); @@ -1324,7 +1413,7 @@ if (!gdb_python_initialized) return; - gdbpy_enter enter_py (get_objfile_arch (objfile), current_language); + gdbpy_enter enter_py (objfile->arch (), current_language); gdbpy_current_objfile = objfile; PyRun_SimpleString (script); @@ -1503,23 +1592,6 @@ static struct cmd_list_element *user_set_python_list; static struct cmd_list_element *user_show_python_list; -/* Function for use by 'set python' prefix command. */ - -static void -user_set_python (const char *args, int from_tty) -{ - help_list (user_set_python_list, "set python ", all_commands, - gdb_stdout); -} - -/* Function for use by 'show python' prefix command. */ - -static void -user_show_python (const char *args, int from_tty) -{ - cmd_show_list (user_show_python_list, from_tty, ""); -} - /* Initialize the Python code. */ #ifdef HAVE_PYTHON @@ -1548,6 +1620,7 @@ Py_Finalize (); + gdb_python_initialized = false; restore_active_ext_lang (previous_active); } @@ -1555,6 +1628,7 @@ /* This is called via the PyImport_AppendInittab mechanism called during initialization, to make the built-in _gdb module known to Python. */ +PyMODINIT_FUNC init__gdb_module (void); PyMODINIT_FUNC init__gdb_module (void) { @@ -1591,12 +1665,7 @@ std::string oldloc = setlocale (LC_ALL, NULL); setlocale (LC_ALL, ""); progsize = strlen (progname.get ()); - progname_copy = (wchar_t *) xmalloc ((progsize + 1) * sizeof (wchar_t)); - if (!progname_copy) - { - fprintf (stderr, "out of memory\n"); - return false; - } + progname_copy = XNEWVEC (wchar_t, progsize + 1); count = mbstowcs (progname_copy, progname.get (), progsize + 1); if (count == (size_t) -1) { @@ -1618,7 +1687,12 @@ #endif Py_Initialize (); +#if PY_VERSION_HEX < 0x03090000 + /* PyEval_InitThreads became deprecated in Python 3.9 and will + be removed in Python 3.11. Prior to Python 3.7, this call was + required to initialize the GIL. */ PyEval_InitThreads (); +#endif #ifdef IS_PY3K gdb_module = PyImport_ImportModule ("_gdb"); @@ -1685,8 +1759,10 @@ || gdbpy_initialize_py_events () < 0 || gdbpy_initialize_event () < 0 || gdbpy_initialize_arch () < 0 + || gdbpy_initialize_registers () < 0 || gdbpy_initialize_xmethods () < 0 - || gdbpy_initialize_unwind () < 0) + || gdbpy_initialize_unwind () < 0 + || gdbpy_initialize_tui () < 0) return false; #define GDB_PY_DEFINE_EVENT_TYPE(name, py_name, doc, base) \ @@ -1715,8 +1791,7 @@ return false; /* Release the GIL while gdb runs. */ - PyThreadState_Swap (NULL); - PyEval_ReleaseLock (); + PyEval_SaveThread (); make_final_cleanup (finalize_python, NULL); @@ -1730,8 +1805,9 @@ /* See python.h. */ cmd_list_element *python_cmd_element = nullptr; +void _initialize_python (); void -_initialize_python (void) +_initialize_python () { add_com ("python-interactive", class_obscure, python_interactive_command, @@ -1781,15 +1857,15 @@ add_com_alias ("py", "python", class_obscure, 1); /* Add set/show python print-stack. */ - add_prefix_cmd ("python", no_class, user_show_python, - _("Prefix command for python preference settings."), - &user_show_python_list, "show python ", 0, - &showlist); - - add_prefix_cmd ("python", no_class, user_set_python, - _("Prefix command for python preference settings."), - &user_set_python_list, "set python ", 0, - &setlist); + add_basic_prefix_cmd ("python", no_class, + _("Prefix command for python preference settings."), + &user_show_python_list, "show python ", 0, + &showlist); + + add_show_prefix_cmd ("python", no_class, + _("Prefix command for python preference settings."), + &user_set_python_list, "set python ", 0, + &setlist); add_setshow_enum_cmd ("print-stack", no_class, python_excp_enums, &gdbpy_should_print_stack, _("\ @@ -2038,6 +2114,13 @@ "convenience_variable (NAME, VALUE) -> None.\n\ Set the value of the convenience variable $NAME." }, +#ifdef TUI + { "register_window_type", (PyCFunction) gdbpy_register_tui_window, + METH_VARARGS | METH_KEYWORDS, + "register_window_type (NAME, CONSTRUCSTOR) -> None\n\ +Register a TUI window constructor." }, +#endif /* TUI */ + {NULL, NULL, 0, NULL} }; diff -Nru gdb-9.1/gdb/python/python.h gdb-10.2/gdb/python/python.h --- gdb-9.1/gdb/python/python.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/python/python.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Python/gdb header for generic use in gdb - Copyright (C) 2008-2020 Free Software Foundation, Inc. + Copyright (C) 2008-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/python/python-internal.h gdb-10.2/gdb/python/python-internal.h --- gdb-9.1/gdb/python/python-internal.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/python/python-internal.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Gdb/Python header for private use by Python module. - Copyright (C) 2008-2020 Free Software Foundation, Inc. + Copyright (C) 2008-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -391,10 +391,8 @@ extern enum ext_lang_rc gdbpy_apply_val_pretty_printer (const struct extension_language_defn *, - struct type *type, - LONGEST embedded_offset, CORE_ADDR address, + struct value *value, struct ui_file *stream, int recurse, - struct value *val, const struct value_print_options *options, const struct language_defn *language); extern enum ext_lang_bt_status gdbpy_apply_frame_filter @@ -447,6 +445,8 @@ char *gdbpy_parse_command_name (const char *name, struct cmd_list_element ***base_list, struct cmd_list_element **start_list); +PyObject *gdbpy_register_tui_window (PyObject *self, PyObject *args, + PyObject *kw); PyObject *symtab_and_line_to_sal_object (struct symtab_and_line sal); PyObject *symtab_to_symtab_object (struct symtab *symtab); @@ -454,6 +454,7 @@ PyObject *block_to_block_object (const struct block *block, struct objfile *objfile); PyObject *value_to_value_object (struct value *v); +PyObject *value_to_value_object_no_release (struct value *v); PyObject *type_to_type_object (struct type *); PyObject *frame_info_to_frame_object (struct frame_info *frame); PyObject *symtab_to_linetable_object (PyObject *symtab); @@ -472,6 +473,10 @@ PyObject *gdbarch_to_arch_object (struct gdbarch *gdbarch); +PyObject *gdbpy_new_register_descriptor_iterator (struct gdbarch *gdbarch, + const char *group_name); +PyObject *gdbpy_new_reggroup_iterator (struct gdbarch *gdbarch); + gdbpy_ref<thread_object> create_thread_object (struct thread_info *tp); gdbpy_ref<> thread_to_thread_object (thread_info *thr);; gdbpy_ref<inferior_object> inferior_to_inferior_object (inferior *inf); @@ -539,10 +544,14 @@ CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION; int gdbpy_initialize_arch (void) CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION; +int gdbpy_initialize_registers () + CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION; int gdbpy_initialize_xmethods (void) CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION; int gdbpy_initialize_unwind (void) CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION; +int gdbpy_initialize_tui () + CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION; /* A wrapper for PyErr_Fetch that handles reference counting for the caller. */ @@ -767,4 +776,23 @@ /* A unique_ptr specialization for Py_buffer. */ typedef std::unique_ptr<Py_buffer, Py_buffer_deleter> Py_buffer_up; +/* Parse a register number from PYO_REG_ID and place the register number + into *REG_NUM. The register is a register for GDBARCH. + + If a register is parsed successfully then *REG_NUM will have been + updated, and true is returned. Otherwise the contents of *REG_NUM are + undefined, and false is returned. + + The PYO_REG_ID object can be a string, the name of the register. This + is the slowest approach as GDB has to map the name to a number for each + call. Alternatively PYO_REG_ID can be an internal GDB register + number. This is quick but should not be encouraged as this means + Python scripts are now dependent on GDB's internal register numbering. + Final PYO_REG_ID can be a gdb.RegisterDescriptor object, these objects + can be looked up by name once, and then cache the register number so + should be as quick as using a register number. */ + +extern bool gdbpy_parse_register_id (struct gdbarch *gdbarch, + PyObject *pyo_reg_id, int *reg_num); + #endif /* PYTHON_PYTHON_INTERNAL_H */ diff -Nru gdb-9.1/gdb/python/py-threadevent.c gdb-10.2/gdb/python/py-threadevent.c --- gdb-9.1/gdb/python/py-threadevent.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/python/py-threadevent.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2009-2020 Free Software Foundation, Inc. +/* Copyright (C) 2009-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -27,7 +27,9 @@ { if (non_stop) { - thread_info *thread = find_thread_ptid (ptid); + thread_info *thread + = find_thread_ptid (current_inferior ()->process_target (), + ptid); if (thread != nullptr) return thread_to_thread_object (thread); PyErr_SetString (PyExc_RuntimeError, "Could not find event thread"); diff -Nru gdb-9.1/gdb/python/py-tui.c gdb-10.2/gdb/python/py-tui.c --- gdb-9.1/gdb/python/py-tui.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/python/py-tui.c 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,519 @@ +/* TUI windows implemented in Python + + Copyright (C) 2020-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + + +#include "defs.h" +#include "arch-utils.h" +#include "python-internal.h" + +#ifdef TUI + +/* Note that Python's public headers may define HAVE_NCURSES_H, so if + we unconditionally include this (outside the #ifdef above), then we + can get a compile error when ncurses is not in fact installed. See + PR tui/25597; or the upstream Python bug + https://bugs.python.org/issue20768. */ +#include "gdb_curses.h" + +#include "tui/tui-data.h" +#include "tui/tui-io.h" +#include "tui/tui-layout.h" +#include "tui/tui-wingeneral.h" +#include "tui/tui-winsource.h" + +class tui_py_window; + +/* A PyObject representing a TUI window. */ + +struct gdbpy_tui_window +{ + PyObject_HEAD + + /* The TUI window, or nullptr if the window has been deleted. */ + tui_py_window *window; +}; + +extern PyTypeObject gdbpy_tui_window_object_type + CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("gdbpy_tui_window"); + +/* A TUI window written in Python. */ + +class tui_py_window : public tui_win_info +{ +public: + + tui_py_window (const char *name, gdbpy_ref<gdbpy_tui_window> wrapper) + : m_name (name), + m_wrapper (std::move (wrapper)) + { + m_wrapper->window = this; + } + + ~tui_py_window (); + + DISABLE_COPY_AND_ASSIGN (tui_py_window); + + /* Set the "user window" to the indicated reference. The user + window is the object returned the by user-defined window + constructor. */ + void set_user_window (gdbpy_ref<> &&user_window) + { + m_window = std::move (user_window); + } + + const char *name () const override + { + return m_name.c_str (); + } + + void rerender () override; + void do_scroll_vertical (int num_to_scroll) override; + void do_scroll_horizontal (int num_to_scroll) override; + + /* Erase and re-box the window. */ + void erase () + { + if (is_visible ()) + { + werase (handle.get ()); + check_and_display_highlight_if_needed (); + cursor_x = 0; + cursor_y = 0; + } + } + + /* Write STR to the window. */ + void output (const char *str); + + /* A helper function to compute the viewport width. */ + int viewport_width () const + { + return std::max (0, width - 2); + } + + /* A helper function to compute the viewport height. */ + int viewport_height () const + { + return std::max (0, height - 2); + } + +private: + + /* Location of the cursor. */ + int cursor_x = 0; + int cursor_y = 0; + + /* The name of this window. */ + std::string m_name; + + /* The underlying Python window object. */ + gdbpy_ref<> m_window; + + /* The Python wrapper for this object. */ + gdbpy_ref<gdbpy_tui_window> m_wrapper; +}; + +tui_py_window::~tui_py_window () +{ + gdbpy_enter enter_py (get_current_arch (), current_language); + + /* This can be null if the user-provided Python construction + function failed. */ + if (m_window != nullptr + && PyObject_HasAttrString (m_window.get (), "close")) + { + gdbpy_ref<> result (PyObject_CallMethod (m_window.get (), "close", + nullptr)); + if (result == nullptr) + gdbpy_print_stack (); + } + + /* Unlink. */ + m_wrapper->window = nullptr; + /* Explicitly free the Python references. We have to do this + manually because we need to hold the GIL while doing so. */ + m_wrapper.reset (nullptr); + m_window.reset (nullptr); +} + +void +tui_py_window::rerender () +{ + gdbpy_enter enter_py (get_current_arch (), current_language); + + if (PyObject_HasAttrString (m_window.get (), "render")) + { + gdbpy_ref<> result (PyObject_CallMethod (m_window.get (), "render", + nullptr)); + if (result == nullptr) + gdbpy_print_stack (); + } +} + +void +tui_py_window::do_scroll_horizontal (int num_to_scroll) +{ + gdbpy_enter enter_py (get_current_arch (), current_language); + + if (PyObject_HasAttrString (m_window.get (), "hscroll")) + { + gdbpy_ref<> result (PyObject_CallMethod (m_window.get(), "hscroll", + "i", num_to_scroll, nullptr)); + if (result == nullptr) + gdbpy_print_stack (); + } +} + +void +tui_py_window::do_scroll_vertical (int num_to_scroll) +{ + gdbpy_enter enter_py (get_current_arch (), current_language); + + if (PyObject_HasAttrString (m_window.get (), "vscroll")) + { + gdbpy_ref<> result (PyObject_CallMethod (m_window.get (), "vscroll", + "i", num_to_scroll, nullptr)); + if (result == nullptr) + gdbpy_print_stack (); + } +} + +void +tui_py_window::output (const char *text) +{ + int vwidth = viewport_width (); + + while (cursor_y < viewport_height () && *text != '\0') + { + wmove (handle.get (), cursor_y + 1, cursor_x + 1); + + std::string line = tui_copy_source_line (&text, 0, 0, + vwidth - cursor_x, 0); + tui_puts (line.c_str (), handle.get ()); + + if (*text == '\n') + { + ++text; + ++cursor_y; + cursor_x = 0; + } + else + cursor_x = getcurx (handle.get ()) - 1; + } + + wrefresh (handle.get ()); +} + + + +/* A callable that is used to create a TUI window. It wraps the + user-supplied window constructor. */ + +class gdbpy_tui_window_maker +{ +public: + + explicit gdbpy_tui_window_maker (gdbpy_ref<> &&constr) + : m_constr (std::move (constr)) + { + } + + ~gdbpy_tui_window_maker (); + + gdbpy_tui_window_maker (gdbpy_tui_window_maker &&other) noexcept + : m_constr (std::move (other.m_constr)) + { + } + + gdbpy_tui_window_maker (const gdbpy_tui_window_maker &other) + { + gdbpy_enter enter_py (get_current_arch (), current_language); + m_constr = other.m_constr; + } + + gdbpy_tui_window_maker &operator= (gdbpy_tui_window_maker &&other) + { + m_constr = std::move (other.m_constr); + return *this; + } + + gdbpy_tui_window_maker &operator= (const gdbpy_tui_window_maker &other) + { + gdbpy_enter enter_py (get_current_arch (), current_language); + m_constr = other.m_constr; + return *this; + } + + tui_win_info *operator() (const char *name); + +private: + + /* A constructor that is called to make a TUI window. */ + gdbpy_ref<> m_constr; +}; + +gdbpy_tui_window_maker::~gdbpy_tui_window_maker () +{ + gdbpy_enter enter_py (get_current_arch (), current_language); + m_constr.reset (nullptr); +} + +tui_win_info * +gdbpy_tui_window_maker::operator() (const char *win_name) +{ + gdbpy_enter enter_py (get_current_arch (), current_language); + + gdbpy_ref<gdbpy_tui_window> wrapper + (PyObject_New (gdbpy_tui_window, &gdbpy_tui_window_object_type)); + if (wrapper == nullptr) + { + gdbpy_print_stack (); + return nullptr; + } + + std::unique_ptr<tui_py_window> window + (new tui_py_window (win_name, wrapper)); + + gdbpy_ref<> user_window + (PyObject_CallFunctionObjArgs (m_constr.get (), + (PyObject *) wrapper.get (), + nullptr)); + if (user_window == nullptr) + { + gdbpy_print_stack (); + return nullptr; + } + + window->set_user_window (std::move (user_window)); + /* Window is now owned by the TUI. */ + return window.release (); +} + +/* Implement "gdb.register_window_type". */ + +PyObject * +gdbpy_register_tui_window (PyObject *self, PyObject *args, PyObject *kw) +{ + static const char *keywords[] = { "name", "constructor", nullptr }; + + const char *name; + PyObject *cons_obj; + + if (!gdb_PyArg_ParseTupleAndKeywords (args, kw, "sO", keywords, + &name, &cons_obj)) + return nullptr; + + try + { + gdbpy_tui_window_maker constr (gdbpy_ref<>::new_reference (cons_obj)); + tui_register_window (name, constr); + } + catch (const gdb_exception &except) + { + gdbpy_convert_exception (except); + return nullptr; + } + + Py_RETURN_NONE; +} + + + +/* Require that "Window" be a valid window. */ + +#define REQUIRE_WINDOW(Window) \ + do { \ + if ((Window)->window == nullptr) \ + return PyErr_Format (PyExc_RuntimeError, \ + _("TUI window is invalid.")); \ + } while (0) + +/* Python function which checks the validity of a TUI window + object. */ +static PyObject * +gdbpy_tui_is_valid (PyObject *self, PyObject *args) +{ + gdbpy_tui_window *win = (gdbpy_tui_window *) self; + + if (win->window != nullptr) + Py_RETURN_TRUE; + Py_RETURN_FALSE; +} + +/* Python function that erases the TUI window. */ +static PyObject * +gdbpy_tui_erase (PyObject *self, PyObject *args) +{ + gdbpy_tui_window *win = (gdbpy_tui_window *) self; + + REQUIRE_WINDOW (win); + + win->window->erase (); + + Py_RETURN_NONE; +} + +/* Python function that writes some text to a TUI window. */ +static PyObject * +gdbpy_tui_write (PyObject *self, PyObject *args) +{ + gdbpy_tui_window *win = (gdbpy_tui_window *) self; + const char *text; + + if (!PyArg_ParseTuple (args, "s", &text)) + return nullptr; + + REQUIRE_WINDOW (win); + + win->window->output (text); + + Py_RETURN_NONE; +} + +/* Return the width of the TUI window. */ +static PyObject * +gdbpy_tui_width (PyObject *self, void *closure) +{ + gdbpy_tui_window *win = (gdbpy_tui_window *) self; + REQUIRE_WINDOW (win); + return PyLong_FromLong (win->window->viewport_width ()); +} + +/* Return the height of the TUI window. */ +static PyObject * +gdbpy_tui_height (PyObject *self, void *closure) +{ + gdbpy_tui_window *win = (gdbpy_tui_window *) self; + REQUIRE_WINDOW (win); + return PyLong_FromLong (win->window->viewport_height ()); +} + +/* Return the title of the TUI window. */ +static PyObject * +gdbpy_tui_title (PyObject *self, void *closure) +{ + gdbpy_tui_window *win = (gdbpy_tui_window *) self; + REQUIRE_WINDOW (win); + return host_string_to_python_string (win->window->title.c_str ()).release (); +} + +/* Set the title of the TUI window. */ +static int +gdbpy_tui_set_title (PyObject *self, PyObject *newvalue, void *closure) +{ + gdbpy_tui_window *win = (gdbpy_tui_window *) self; + + if (win->window == nullptr) + { + PyErr_Format (PyExc_RuntimeError, _("TUI window is invalid.")); + return -1; + } + + if (win->window == nullptr) + { + PyErr_Format (PyExc_TypeError, _("Cannot delete \"title\" attribute.")); + return -1; + } + + gdb::unique_xmalloc_ptr<char> value + = python_string_to_host_string (newvalue); + if (value == nullptr) + return -1; + + win->window->title = value.get (); + return 0; +} + +static gdb_PyGetSetDef tui_object_getset[] = +{ + { "width", gdbpy_tui_width, NULL, "Width of the window.", NULL }, + { "height", gdbpy_tui_height, NULL, "Height of the window.", NULL }, + { "title", gdbpy_tui_title, gdbpy_tui_set_title, "Title of the window.", + NULL }, + { NULL } /* Sentinel */ +}; + +static PyMethodDef tui_object_methods[] = +{ + { "is_valid", gdbpy_tui_is_valid, METH_NOARGS, + "is_valid () -> Boolean\n\ +Return true if this TUI window is valid, false if not." }, + { "erase", gdbpy_tui_erase, METH_NOARGS, + "Erase the TUI window." }, + { "write", (PyCFunction) gdbpy_tui_write, METH_VARARGS, + "Append a string to the TUI window." }, + { NULL } /* Sentinel. */ +}; + +PyTypeObject gdbpy_tui_window_object_type = +{ + PyVarObject_HEAD_INIT (NULL, 0) + "gdb.TuiWindow", /*tp_name*/ + sizeof (gdbpy_tui_window), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + 0, /*tp_dealloc*/ + 0, /*tp_print*/ + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + 0, /*tp_compare*/ + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash */ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro */ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /*tp_flags*/ + "GDB TUI window object", /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + 0, /* tp_iter */ + 0, /* tp_iternext */ + tui_object_methods, /* tp_methods */ + 0, /* tp_members */ + tui_object_getset, /* tp_getset */ + 0, /* tp_base */ + 0, /* tp_dict */ + 0, /* tp_descr_get */ + 0, /* tp_descr_set */ + 0, /* tp_dictoffset */ + 0, /* tp_init */ + 0, /* tp_alloc */ +}; + +#endif /* TUI */ + +/* Initialize this module. */ + +int +gdbpy_initialize_tui () +{ +#ifdef TUI + gdbpy_tui_window_object_type.tp_new = PyType_GenericNew; + if (PyType_Ready (&gdbpy_tui_window_object_type) < 0) + return -1; +#endif /* TUI */ + + return 0; +} diff -Nru gdb-9.1/gdb/python/py-type.c gdb-10.2/gdb/python/py-type.c --- gdb-9.1/gdb/python/py-type.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/python/py-type.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Python interface to types. - Copyright (C) 2008-2020 Free Software Foundation, Inc. + Copyright (C) 2008-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -157,7 +157,7 @@ { struct type *type = ((type_object *) self)->type; - return PyInt_FromLong (TYPE_CODE (type)); + return PyInt_FromLong (type->code ()); } /* Helper function for typy_fields which converts a single field to a @@ -177,11 +177,11 @@ if (PyObject_SetAttrString (result.get (), "parent_type", arg.get ()) < 0) return NULL; - if (!field_is_static (&TYPE_FIELD (type, field))) + if (!field_is_static (&type->field (field))) { const char *attrstring; - if (TYPE_CODE (type) == TYPE_CODE_ENUM) + if (type->code () == TYPE_CODE_ENUM) { arg.reset (gdb_py_long_from_longest (TYPE_FIELD_ENUMVAL (type, field))); @@ -189,8 +189,11 @@ } else { - arg.reset (gdb_py_long_from_longest (TYPE_FIELD_BITPOS (type, - field))); + if (TYPE_FIELD_LOC_KIND (type, field) == FIELD_LOC_KIND_DWARF_BLOCK) + arg = gdbpy_ref<>::new_reference (Py_None); + else + arg.reset (gdb_py_long_from_longest (TYPE_FIELD_BITPOS (type, + field))); attrstring = "bitpos"; } @@ -224,7 +227,7 @@ if (PyObject_SetAttrString (result.get (), "artificial", arg.get ()) < 0) return NULL; - if (TYPE_CODE (type) == TYPE_CODE_STRUCT) + if (type->code () == TYPE_CODE_STRUCT) arg = gdbpy_ref<>::new_reference (field < TYPE_N_BASECLASSES (type) ? Py_True : Py_False); else @@ -239,10 +242,10 @@ return NULL; /* A field can have a NULL type in some situations. */ - if (TYPE_FIELD_TYPE (type, field) == NULL) + if (type->field (field).type () == NULL) arg = gdbpy_ref<>::new_reference (Py_None); else - arg.reset (type_to_type_object (TYPE_FIELD_TYPE (type, field))); + arg.reset (type_to_type_object (type->field (field).type ())); if (arg == NULL) return NULL; if (PyObject_SetAttrString (result.get (), "type", arg.get ()) < 0) @@ -353,7 +356,7 @@ { struct type *type = ((type_object *) self)->type; - if (TYPE_CODE (type) != TYPE_CODE_ARRAY) + if (type->code () != TYPE_CODE_ARRAY) return typy_fields_items (self, iter_values); /* Array type. Handle this as a special case because the common @@ -390,9 +393,9 @@ { struct type *type = ((type_object *) self)->type; - if (TYPE_NAME (type) == NULL) + if (type->name () == NULL) Py_RETURN_NONE; - return PyString_FromString (TYPE_NAME (type)); + return PyString_FromString (type->name ()); } /* Return the type's tag, or None. */ @@ -402,10 +405,10 @@ struct type *type = ((type_object *) self)->type; const char *tagname = nullptr; - if (TYPE_CODE (type) == TYPE_CODE_STRUCT - || TYPE_CODE (type) == TYPE_CODE_UNION - || TYPE_CODE (type) == TYPE_CODE_ENUM) - tagname = TYPE_NAME (type); + if (type->code () == TYPE_CODE_STRUCT + || type->code () == TYPE_CODE_UNION + || type->code () == TYPE_CODE_ENUM) + tagname = type->name (); if (tagname == nullptr) Py_RETURN_NONE; @@ -460,17 +463,17 @@ GDB_PY_HANDLE_EXCEPTION (except); } - if (TYPE_CODE (type) != TYPE_CODE_PTR && !TYPE_IS_REFERENCE (type)) + if (type->code () != TYPE_CODE_PTR && !TYPE_IS_REFERENCE (type)) break; type = TYPE_TARGET_TYPE (type); } /* If this is not a struct, union, or enum type, raise TypeError exception. */ - if (TYPE_CODE (type) != TYPE_CODE_STRUCT - && TYPE_CODE (type) != TYPE_CODE_UNION - && TYPE_CODE (type) != TYPE_CODE_ENUM - && TYPE_CODE (type) != TYPE_CODE_FUNC) + if (type->code () != TYPE_CODE_STRUCT + && type->code () != TYPE_CODE_UNION + && type->code () != TYPE_CODE_ENUM + && type->code () != TYPE_CODE_FUNC) { PyErr_SetString (PyExc_TypeError, "Type is not a structure, union, enum, or function type."); @@ -576,25 +579,29 @@ /* Initialize these to appease GCC warnings. */ LONGEST low = 0, high = 0; - if (TYPE_CODE (type) != TYPE_CODE_ARRAY - && TYPE_CODE (type) != TYPE_CODE_STRING - && TYPE_CODE (type) != TYPE_CODE_RANGE) + if (type->code () != TYPE_CODE_ARRAY + && type->code () != TYPE_CODE_STRING + && type->code () != TYPE_CODE_RANGE) { PyErr_SetString (PyExc_RuntimeError, _("This type does not have a range.")); return NULL; } - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_ARRAY: case TYPE_CODE_STRING: - low = TYPE_LOW_BOUND (TYPE_INDEX_TYPE (type)); - high = TYPE_HIGH_BOUND (TYPE_INDEX_TYPE (type)); - break; case TYPE_CODE_RANGE: - low = TYPE_LOW_BOUND (type); - high = TYPE_HIGH_BOUND (type); + if (type->bounds ()->low.kind () == PROP_CONST) + low = type->bounds ()->low.const_val (); + else + low = 0; + + if (type->bounds ()->high.kind () == PROP_CONST) + high = type->bounds ()->high.const_val (); + else + high = 0; break; } @@ -710,9 +717,12 @@ { struct type *type = ((type_object *) self)->type; + bool size_varies = false; try { check_typedef (type); + + size_varies = TYPE_HAS_DYNAMIC_LENGTH (type); } catch (const gdb_exception &except) { @@ -720,6 +730,8 @@ /* Ignore exceptions. */ + if (size_varies) + Py_RETURN_NONE; return gdb_py_long_from_longest (TYPE_LENGTH (type)); } @@ -744,6 +756,27 @@ return gdb_py_object_from_ulongest (align).release (); } +/* Return whether or not the type is dynamic. */ +static PyObject * +typy_get_dynamic (PyObject *self, void *closure) +{ + struct type *type = ((type_object *) self)->type; + + bool result = false; + try + { + result = is_dynamic_type (type); + } + catch (const gdb_exception &except) + { + /* Ignore exceptions. */ + } + + if (result) + Py_RETURN_TRUE; + Py_RETURN_FALSE; +} + static struct type * typy_lookup_typename (const char *type_name, const struct block *block) { @@ -846,7 +879,7 @@ std::string err; struct type *argtype; - if (TYPE_NAME (type) == NULL) + if (type->name () == NULL) { PyErr_SetString (PyExc_RuntimeError, _("Null type name.")); return NULL; @@ -855,7 +888,7 @@ try { /* Note -- this is not thread-safe. */ - info = cp_demangled_name_to_comp (TYPE_NAME (type), &err); + info = cp_demangled_name_to_comp (type->name (), &err); } catch (const gdb_exception &except) { @@ -1049,7 +1082,7 @@ /* This prevents another thread from freeing the objects we're operating on. */ - gdbpy_enter enter_py (get_objfile_arch (objfile), current_language); + gdbpy_enter enter_py (objfile->arch (), current_language); copied_types = create_copied_types_hash (objfile); @@ -1121,7 +1154,7 @@ if (type == NULL) return -1; - return TYPE_NFIELDS (type); + return type->num_fields (); } /* Implements boolean evaluation of gdb.Type. Handle this like other @@ -1164,7 +1197,7 @@ if (type == NULL) return NULL; - for (i = 0; i < TYPE_NFIELDS (type); i++) + for (i = 0; i < type->num_fields (); i++) { const char *t_field_name = TYPE_FIELD_NAME (type, i); @@ -1222,7 +1255,7 @@ if (type == NULL) return NULL; - for (i = 0; i < TYPE_NFIELDS (type); i++) + for (i = 0; i < type->num_fields (); i++) { const char *t_field_name = TYPE_FIELD_NAME (type, i); @@ -1307,7 +1340,7 @@ typy_iterator_object *iter_obj = (typy_iterator_object *) self; struct type *type = iter_obj->source->type; - if (iter_obj->field < TYPE_NFIELDS (type)) + if (iter_obj->field < type->num_fields ()) { gdbpy_ref<> result = make_fielditem (type, iter_obj->field, iter_obj->kind); @@ -1436,6 +1469,8 @@ "The alignment of this type, in bytes.", NULL }, { "code", typy_get_code, NULL, "The code for this type.", NULL }, + { "dynamic", typy_get_dynamic, NULL, + "Whether this type is dynamic.", NULL }, { "name", typy_get_name, NULL, "The name for this type, or None.", NULL }, { "sizeof", typy_get_sizeof, NULL, diff -Nru gdb-9.1/gdb/python/py-unwind.c gdb-10.2/gdb/python/py-unwind.c --- gdb-9.1/gdb/python/py-unwind.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/python/py-unwind.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Python frame unwinder interface. - Copyright (C) 2015-2020 Free Software Foundation, Inc. + Copyright (C) 2015-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -27,7 +27,6 @@ #include "python-internal.h" #include "regcache.h" #include "valprint.h" -#include "user-regs.h" #define TRACE_PY_UNWIND(level, args...) if (pyuw_debug >= level) \ { fprintf_unfiltered (gdb_stdlog, args); } @@ -101,37 +100,6 @@ static struct gdbarch_data *pyuw_gdbarch_data; -/* Parses register id, which can be either a number or a name. - Returns 1 on success, 0 otherwise. */ - -static int -pyuw_parse_register_id (struct gdbarch *gdbarch, PyObject *pyo_reg_id, - int *reg_num) -{ - if (pyo_reg_id == NULL) - return 0; - if (gdbpy_is_string (pyo_reg_id)) - { - gdb::unique_xmalloc_ptr<char> reg_name (gdbpy_obj_to_string (pyo_reg_id)); - - if (reg_name == NULL) - return 0; - *reg_num = user_reg_map_name_to_regnum (gdbarch, reg_name.get (), - strlen (reg_name.get ())); - return *reg_num >= 0; - } - else if (PyInt_Check (pyo_reg_id)) - { - long value; - if (gdb_py_int_as_long (pyo_reg_id, &value) && (int) value == value) - { - *reg_num = (int) value; - return user_reg_map_regnum_to_name (gdbarch, *reg_num) != NULL; - } - } - return 0; -} - /* Convert gdb.Value instance to inferior's pointer. Return 1 on success, 0 on failure. */ @@ -275,7 +243,7 @@ if (!PyArg_UnpackTuple (args, "previous_frame_register", 2, 2, &pyo_reg_id, &pyo_reg_value)) return NULL; - if (!pyuw_parse_register_id (pending_frame->gdbarch, pyo_reg_id, ®num)) + if (!gdbpy_parse_register_id (pending_frame->gdbarch, pyo_reg_id, ®num)) { PyErr_SetString (PyExc_ValueError, "Bad register"); return NULL; @@ -376,7 +344,7 @@ } if (!PyArg_UnpackTuple (args, "read_register", 1, 1, &pyo_reg_id)) return NULL; - if (!pyuw_parse_register_id (pending_frame->gdbarch, pyo_reg_id, ®num)) + if (!gdbpy_parse_register_id (pending_frame->gdbarch, pyo_reg_id, ®num)) { PyErr_SetString (PyExc_ValueError, "Bad register"); return NULL; @@ -441,6 +409,22 @@ frame_id_build_special (sp, pc, special)); } +/* Implementation of PendingFrame.architecture (self) -> gdb.Architecture. */ + +static PyObject * +pending_framepy_architecture (PyObject *self, PyObject *args) +{ + pending_frame_object *pending_frame = (pending_frame_object *) self; + + if (pending_frame->frame_info == NULL) + { + PyErr_SetString (PyExc_ValueError, + "Attempting to read register from stale PendingFrame"); + return NULL; + } + return gdbarch_to_arch_object (pending_frame->gdbarch); +} + /* frame_unwind.this_id method. */ static void @@ -671,6 +655,10 @@ "create_unwind_info (FRAME_ID) -> gdb.UnwindInfo\n" "Construct UnwindInfo for this PendingFrame, using FRAME_ID\n" "to identify it." }, + { "architecture", + pending_framepy_architecture, METH_NOARGS, + "architecture () -> gdb.Architecture\n" + "The architecture for this PendingFrame." }, {NULL} /* Sentinel */ }; diff -Nru gdb-9.1/gdb/python/py-utils.c gdb-10.2/gdb/python/py-utils.c --- gdb-9.1/gdb/python/py-utils.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/python/py-utils.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* General utility routines for GDB/Python. - Copyright (C) 2008-2020 Free Software Foundation, Inc. + Copyright (C) 2008-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/python/py-value.c gdb-10.2/gdb/python/py-value.c --- gdb-9.1/gdb/python/py-value.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/python/py-value.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Python interface to values. - Copyright (C) 2008-2020 Free Software Foundation, Inc. + Copyright (C) 2008-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -251,7 +251,7 @@ scoped_value_mark free_values; self_val = ((value_object *) self)->value; - switch (TYPE_CODE (check_typedef (value_type (self_val)))) + switch (check_typedef (value_type (self_val))->code ()) { case TYPE_CODE_PTR: res_val = value_ind (self_val); @@ -400,11 +400,11 @@ type = value_type (val); type = check_typedef (type); - if (((TYPE_CODE (type) == TYPE_CODE_PTR) || TYPE_IS_REFERENCE (type)) - && (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_STRUCT)) + if (((type->code () == TYPE_CODE_PTR) || TYPE_IS_REFERENCE (type)) + && (TYPE_TARGET_TYPE (type)->code () == TYPE_CODE_STRUCT)) { struct value *target; - int was_pointer = TYPE_CODE (type) == TYPE_CODE_PTR; + int was_pointer = type->code () == TYPE_CODE_PTR; if (was_pointer) target = value_ind (val); @@ -420,7 +420,7 @@ type = lookup_lvalue_reference_type (type); } } - else if (TYPE_CODE (type) == TYPE_CODE_STRUCT) + else if (type->code () == TYPE_CODE_STRUCT) type = value_rtti_type (val, NULL, NULL, NULL); else { @@ -488,7 +488,7 @@ type = value_type (value); realtype = check_typedef (type); - switch (TYPE_CODE (realtype)) + switch (realtype->code ()) { case TYPE_CODE_ARRAY: { @@ -846,10 +846,10 @@ { val_type = value_type (v); val_type = check_typedef (val_type); - if (TYPE_IS_REFERENCE (val_type) || TYPE_CODE (val_type) == TYPE_CODE_PTR) + if (TYPE_IS_REFERENCE (val_type) || val_type->code () == TYPE_CODE_PTR) val_type = check_typedef (TYPE_TARGET_TYPE (val_type)); - type_code = TYPE_CODE (val_type); + type_code = val_type->code (); if ((type_code == TYPE_CODE_STRUCT || type_code == TYPE_CODE_UNION) && types_equal (val_type, parent_type)) has_field = 1; @@ -997,12 +997,12 @@ struct type *val_type; val_type = check_typedef (value_type (tmp)); - if (TYPE_CODE (val_type) == TYPE_CODE_PTR) + if (val_type->code () == TYPE_CODE_PTR) res_val = value_cast (lookup_pointer_type (base_class_type), tmp); - else if (TYPE_CODE (val_type) == TYPE_CODE_REF) + else if (val_type->code () == TYPE_CODE_REF) res_val = value_cast (lookup_lvalue_reference_type (base_class_type), tmp); - else if (TYPE_CODE (val_type) == TYPE_CODE_RVALUE_REF) + else if (val_type->code () == TYPE_CODE_RVALUE_REF) res_val = value_cast (lookup_rvalue_reference_type (base_class_type), tmp); else @@ -1023,8 +1023,8 @@ tmp = coerce_ref (tmp); type = check_typedef (value_type (tmp)); - if (TYPE_CODE (type) != TYPE_CODE_ARRAY - && TYPE_CODE (type) != TYPE_CODE_PTR) + if (type->code () != TYPE_CODE_ARRAY + && type->code () != TYPE_CODE_PTR) error (_("Cannot subscript requested type.")); else res_val = value_subscript (tmp, value_as_long (idx)); @@ -1072,7 +1072,7 @@ GDB_PY_HANDLE_EXCEPTION (except); } - if (TYPE_CODE (ftype) != TYPE_CODE_FUNC) + if (ftype->code () != TYPE_CODE_FUNC) { PyErr_SetString (PyExc_RuntimeError, _("Value is not callable (not TYPE_CODE_FUNC).")); @@ -1279,10 +1279,10 @@ rtype = STRIP_REFERENCE (rtype); handled = 1; - if (TYPE_CODE (ltype) == TYPE_CODE_PTR + if (ltype->code () == TYPE_CODE_PTR && is_integral_type (rtype)) res_val = value_ptradd (arg1, value_as_long (arg2)); - else if (TYPE_CODE (rtype) == TYPE_CODE_PTR + else if (rtype->code () == TYPE_CODE_PTR && is_integral_type (ltype)) res_val = value_ptradd (arg2, value_as_long (arg1)); else @@ -1303,12 +1303,12 @@ rtype = STRIP_REFERENCE (rtype); handled = 1; - if (TYPE_CODE (ltype) == TYPE_CODE_PTR - && TYPE_CODE (rtype) == TYPE_CODE_PTR) + if (ltype->code () == TYPE_CODE_PTR + && rtype->code () == TYPE_CODE_PTR) /* A ptrdiff_t for the target would be preferable here. */ res_val = value_from_longest (builtin_type_pyint, value_ptrdiff (arg1, arg2)); - else if (TYPE_CODE (ltype) == TYPE_CODE_PTR + else if (ltype->code () == TYPE_CODE_PTR && is_integral_type (rtype)) res_val = value_ptradd (arg1, - value_as_long (arg2)); else @@ -1492,7 +1492,7 @@ { type = check_typedef (value_type (self_value->value)); - if (is_integral_type (type) || TYPE_CODE (type) == TYPE_CODE_PTR) + if (is_integral_type (type) || type->code () == TYPE_CODE_PTR) nonzero = !!value_as_long (self_value->value); else if (is_floating_value (self_value->value)) nonzero = !target_float_is_zero (value_contents (self_value->value), @@ -1684,7 +1684,7 @@ } if (!is_integral_type (type) - && TYPE_CODE (type) != TYPE_CODE_PTR) + && type->code () != TYPE_CODE_PTR) error (_("Cannot convert value to int.")); l = value_as_long (value); @@ -1720,7 +1720,7 @@ type = check_typedef (type); if (!is_integral_type (type) - && TYPE_CODE (type) != TYPE_CODE_PTR) + && type->code () != TYPE_CODE_PTR) error (_("Cannot convert value to long.")); l = value_as_long (value); @@ -1748,9 +1748,9 @@ { type = check_typedef (type); - if (TYPE_CODE (type) == TYPE_CODE_FLT && is_floating_value (value)) + if (type->code () == TYPE_CODE_FLT && is_floating_value (value)) d = target_float_to_host_double (value_contents (value), type); - else if (TYPE_CODE (type) == TYPE_CODE_INT) + else if (type->code () == TYPE_CODE_INT) { /* Note that valpy_long accepts TYPE_CODE_PTR and some others here here -- but casting a pointer or bool to a @@ -1788,6 +1788,27 @@ return (PyObject *) val_obj; } +/* Returns an object for a value, but without releasing it from the + all_values chain. */ +PyObject * +value_to_value_object_no_release (struct value *val) +{ + value_object *val_obj; + + val_obj = PyObject_New (value_object, &value_object_type); + if (val_obj != NULL) + { + value_incref (val); + val_obj->value = val; + val_obj->address = NULL; + val_obj->type = NULL; + val_obj->dynamic_type = NULL; + note_value (val_obj); + } + + return (PyObject *) val_obj; +} + /* Returns a borrowed reference to the struct value corresponding to the given value object. */ struct value * @@ -1951,7 +1972,7 @@ if (var != NULL) { res_val = value_of_internalvar (python_gdbarch, var); - if (TYPE_CODE (value_type (res_val)) == TYPE_CODE_VOID) + if (value_type (res_val)->code () == TYPE_CODE_VOID) res_val = NULL; } } diff -Nru gdb-9.1/gdb/python/py-varobj.c gdb-10.2/gdb/python/py-varobj.c --- gdb-9.1/gdb/python/py-varobj.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/python/py-varobj.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2013-2020 Free Software Foundation, Inc. +/* Copyright (C) 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/python/py-xmethods.c gdb-10.2/gdb/python/py-xmethods.c --- gdb-9.1/gdb/python/py-xmethods.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/python/py-xmethods.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Support for debug methods in Python. - Copyright (C) 2013-2020 Free Software Foundation, Inc. + Copyright (C) 2013-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -425,7 +425,7 @@ obj_type = check_typedef (value_type (obj)); this_type = check_typedef (type_object_to_type (m_this_type)); - if (TYPE_CODE (obj_type) == TYPE_CODE_PTR) + if (obj_type->code () == TYPE_CODE_PTR) { struct type *this_ptr = lookup_pointer_type (this_type); @@ -435,7 +435,7 @@ else if (TYPE_IS_REFERENCE (obj_type)) { struct type *this_ref - = lookup_reference_type (this_type, TYPE_CODE (obj_type)); + = lookup_reference_type (this_type, obj_type->code ()); if (!types_equal (obj_type, this_ref)) obj = value_cast (this_ref, obj); @@ -510,7 +510,7 @@ obj_type = check_typedef (value_type (obj)); this_type = check_typedef (type_object_to_type (m_this_type)); - if (TYPE_CODE (obj_type) == TYPE_CODE_PTR) + if (obj_type->code () == TYPE_CODE_PTR) { struct type *this_ptr = lookup_pointer_type (this_type); @@ -520,7 +520,7 @@ else if (TYPE_IS_REFERENCE (obj_type)) { struct type *this_ref - = lookup_reference_type (this_type, TYPE_CODE (obj_type)); + = lookup_reference_type (this_type, obj_type->code ()); if (!types_equal (obj_type, this_ref)) obj = value_cast (this_ref, obj); diff -Nru gdb-9.1/gdb/ravenscar-thread.c gdb-10.2/gdb/ravenscar-thread.c --- gdb-9.1/gdb/ravenscar-thread.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/ravenscar-thread.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Ada Ravenscar thread support. - Copyright (C) 2004-2020 Free Software Foundation, Inc. + Copyright (C) 2004-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -30,6 +30,7 @@ #include "top.h" #include "regcache.h" #include "objfiles.h" +#include <unordered_map> /* This module provides support for "Ravenscar" tasks (Ada) when debugging on bare-metal targets. @@ -77,8 +78,8 @@ struct ravenscar_thread_target final : public target_ops { ravenscar_thread_target () + : m_base_ptid (inferior_ptid) { - update_inferior_ptid (); } const target_info &info () const override @@ -102,18 +103,31 @@ bool stopped_data_address (CORE_ADDR *) override; + enum target_xfer_status xfer_partial (enum target_object object, + const char *annex, + gdb_byte *readbuf, + const gdb_byte *writebuf, + ULONGEST offset, ULONGEST len, + ULONGEST *xfered_len) override; + bool thread_alive (ptid_t ptid) override; int core_of_thread (ptid_t ptid) override; void update_thread_list () override; - const char *extra_thread_info (struct thread_info *) override; - std::string pid_to_str (ptid_t) override; ptid_t get_ada_task_ptid (long lwp, long thread) override; + struct btrace_target_info *enable_btrace (ptid_t ptid, + const struct btrace_config *conf) + override + { + ptid = get_base_thread_from_ravenscar_task (ptid); + return beneath ()->enable_btrace (ptid, conf); + } + void mourn_inferior () override; void close () override @@ -121,17 +135,36 @@ delete this; } + thread_info *add_active_thread (); + private: /* PTID of the last thread that received an event. This can be useful to determine the associated task that received the event, to make it the current task. */ - ptid_t m_base_ptid = null_ptid; + ptid_t m_base_ptid; - void update_inferior_ptid (); ptid_t active_task (int cpu); bool task_is_currently_active (ptid_t ptid); bool runtime_initialized (); + int get_thread_base_cpu (ptid_t ptid); + ptid_t get_base_thread_from_ravenscar_task (ptid_t ptid); + void add_thread (struct ada_task_info *task); + + /* Like switch_to_thread, but uses the base ptid for the thread. */ + void set_base_thread_from_ravenscar_task (ptid_t ptid) + { + process_stratum_target *proc_target + = as_process_stratum_target (this->beneath ()); + ptid_t underlying = get_base_thread_from_ravenscar_task (ptid); + switch_to_thread (find_thread_ptid (proc_target, underlying)); + } + + /* This maps a TID to the CPU on which it was running. This is + needed because sometimes the runtime will report an active task + that hasn't yet been put on the list of tasks that is read by + ada-tasks.c. */ + std::unordered_map<long, int> m_cpu_map; }; /* Return true iff PTID corresponds to a ravenscar task. */ @@ -155,17 +188,26 @@ This assume that PTID is a valid ptid_t. Otherwise, a gdb_assert will be triggered. */ -static int -ravenscar_get_thread_base_cpu (ptid_t ptid) +int +ravenscar_thread_target::get_thread_base_cpu (ptid_t ptid) { int base_cpu; if (is_ravenscar_task (ptid)) { - struct ada_task_info *task_info = ada_get_task_info_from_ptid (ptid); - - gdb_assert (task_info != NULL); - base_cpu = task_info->base_cpu; + /* Prefer to not read inferior memory if possible, to avoid + reentrancy problems with xfer_partial. */ + auto iter = m_cpu_map.find (ptid.tid ()); + + if (iter != m_cpu_map.end ()) + base_cpu = iter->second; + else + { + struct ada_task_info *task_info = ada_get_task_info_from_ptid (ptid); + + gdb_assert (task_info != NULL); + base_cpu = task_info->base_cpu; + } } else { @@ -189,8 +231,7 @@ bool ravenscar_thread_target::task_is_currently_active (ptid_t ptid) { - ptid_t active_task_ptid - = active_task (ravenscar_get_thread_base_cpu (ptid)); + ptid_t active_task_ptid = active_task (get_thread_base_cpu (ptid)); return ptid == active_task_ptid; } @@ -201,46 +242,51 @@ This is the thread that corresponds to the CPU on which the task is running. */ -static ptid_t -get_base_thread_from_ravenscar_task (ptid_t ptid) +ptid_t +ravenscar_thread_target::get_base_thread_from_ravenscar_task (ptid_t ptid) { int base_cpu; if (!is_ravenscar_task (ptid)) return ptid; - base_cpu = ravenscar_get_thread_base_cpu (ptid); + base_cpu = get_thread_base_cpu (ptid); return ptid_t (ptid.pid (), base_cpu, 0); } -/* Fetch the ravenscar running thread from target memory and - update inferior_ptid accordingly. */ +/* Fetch the ravenscar running thread from target memory, make sure + there's a corresponding thread in the thread list, and return it. + If the runtime is not initialized, return NULL. */ -void -ravenscar_thread_target::update_inferior_ptid () +thread_info * +ravenscar_thread_target::add_active_thread () { - int base_cpu; + process_stratum_target *proc_target + = as_process_stratum_target (this->beneath ()); - m_base_ptid = inferior_ptid; + int base_cpu; - gdb_assert (!is_ravenscar_task (inferior_ptid)); - base_cpu = ravenscar_get_thread_base_cpu (m_base_ptid); + gdb_assert (!is_ravenscar_task (m_base_ptid)); + base_cpu = get_thread_base_cpu (m_base_ptid); - /* If the runtime has not been initialized yet, the inferior_ptid is - the only ptid that there is. */ if (!runtime_initialized ()) - return; + return nullptr; /* Make sure we set m_base_ptid before calling active_task as the latter relies on it. */ - inferior_ptid = active_task (base_cpu); - gdb_assert (inferior_ptid != null_ptid); + ptid_t active_ptid = active_task (base_cpu); + gdb_assert (active_ptid != null_ptid); /* The running thread may not have been added to system.tasking.debug's list yet; so ravenscar_update_thread_list may not always add it to the thread list. Add it here. */ - if (!find_thread_ptid (inferior_ptid)) - add_thread (inferior_ptid); + thread_info *active_thr = find_thread_ptid (proc_target, active_ptid); + if (active_thr == nullptr) + { + active_thr = ::add_thread (proc_target, active_ptid); + m_cpu_map[active_ptid.tid ()] = base_cpu; + } + return active_thr; } /* The Ravenscar Runtime exports a symbol which contains the ID of @@ -326,7 +372,12 @@ /* If we see a wildcard resume, we simply pass that on. Otherwise, arrange to resume the base ptid. */ inferior_ptid = m_base_ptid; - if (ptid != minus_one_ptid) + if (ptid.is_pid ()) + { + /* We only have one process, so resume all threads of it. */ + ptid = minus_one_ptid; + } + else if (ptid != minus_one_ptid) ptid = m_base_ptid; beneath ()->resume (ptid, step, siggnal); } @@ -336,50 +387,62 @@ struct target_waitstatus *status, int options) { + process_stratum_target *beneath + = as_process_stratum_target (this->beneath ()); ptid_t event_ptid; - inferior_ptid = m_base_ptid; if (ptid != minus_one_ptid) ptid = m_base_ptid; - event_ptid = beneath ()->wait (ptid, status, 0); - /* Find any new threads that might have been created, and update - inferior_ptid to the active thread. + event_ptid = beneath->wait (ptid, status, 0); + /* Find any new threads that might have been created, and return the + active thread. Only do it if the program is still alive, though. Otherwise, this causes problems when debugging through the remote protocol, because we might try switching threads (and thus sending packets) after the remote has disconnected. */ if (status->kind != TARGET_WAITKIND_EXITED - && status->kind != TARGET_WAITKIND_SIGNALLED) + && status->kind != TARGET_WAITKIND_SIGNALLED + && runtime_initialized ()) { - inferior_ptid = event_ptid; + m_base_ptid = event_ptid; this->update_thread_list (); - this->update_inferior_ptid (); + return this->add_active_thread ()->ptid; } - else - inferior_ptid = m_base_ptid; - return inferior_ptid; + return event_ptid; } /* Add the thread associated to the given TASK to the thread list (if the thread has already been added, this is a no-op). */ -static void -ravenscar_add_thread (struct ada_task_info *task) +void +ravenscar_thread_target::add_thread (struct ada_task_info *task) { - if (find_thread_ptid (task->ptid) == NULL) - add_thread (task->ptid); + if (find_thread_ptid (current_inferior (), task->ptid) == NULL) + { + ::add_thread (current_inferior ()->process_target (), task->ptid); + m_cpu_map[task->ptid.tid ()] = task->base_cpu; + } } void ravenscar_thread_target::update_thread_list () { + /* iterate_over_live_ada_tasks requires that inferior_ptid be set, + but this isn't always the case in target methods. So, we ensure + it here. */ + scoped_restore save_ptid = make_scoped_restore (&inferior_ptid, + m_base_ptid); + /* Do not clear the thread list before adding the Ada task, to keep the thread that the process stratum has included into it (m_base_ptid) and the running thread, that may not have been included to system.tasking.debug's list yet. */ - iterate_over_live_ada_tasks (ravenscar_add_thread); + iterate_over_live_ada_tasks ([=] (struct ada_task_info *task) + { + this->add_thread (task); + }); } ptid_t @@ -393,12 +456,6 @@ return ptid_t (m_base_ptid.pid (), 0, tid); } -const char * -ravenscar_thread_target::extra_thread_info (thread_info *tp) -{ - return "Ravenscar task"; -} - bool ravenscar_thread_target::thread_alive (ptid_t ptid) { @@ -409,23 +466,61 @@ std::string ravenscar_thread_target::pid_to_str (ptid_t ptid) { - return string_printf ("Thread %#x", (int) ptid.tid ()); + if (!is_ravenscar_task (ptid)) + return beneath ()->pid_to_str (ptid); + + return string_printf ("Ravenscar Thread %#x", (int) ptid.tid ()); } +/* Temporarily set the ptid of a regcache to some other value. When + this object is destroyed, the regcache's original ptid is + restored. */ + +class temporarily_change_regcache_ptid +{ +public: + + temporarily_change_regcache_ptid (struct regcache *regcache, ptid_t new_ptid) + : m_regcache (regcache), + m_save_ptid (regcache->ptid ()) + { + m_regcache->set_ptid (new_ptid); + } + + ~temporarily_change_regcache_ptid () + { + m_regcache->set_ptid (m_save_ptid); + } + +private: + + /* The regcache. */ + struct regcache *m_regcache; + /* The saved ptid. */ + ptid_t m_save_ptid; +}; + void ravenscar_thread_target::fetch_registers (struct regcache *regcache, int regnum) { ptid_t ptid = regcache->ptid (); - if (runtime_initialized () - && is_ravenscar_task (ptid) - && !task_is_currently_active (ptid)) + if (runtime_initialized () && is_ravenscar_task (ptid)) { - struct gdbarch *gdbarch = regcache->arch (); - struct ravenscar_arch_ops *arch_ops - = gdbarch_ravenscar_ops (gdbarch); + if (task_is_currently_active (ptid)) + { + ptid_t base = get_base_thread_from_ravenscar_task (ptid); + temporarily_change_regcache_ptid changer (regcache, base); + beneath ()->fetch_registers (regcache, regnum); + } + else + { + struct gdbarch *gdbarch = regcache->arch (); + struct ravenscar_arch_ops *arch_ops + = gdbarch_ravenscar_ops (gdbarch); - arch_ops->fetch_registers (regcache, regnum); + arch_ops->fetch_registers (regcache, regnum); + } } else beneath ()->fetch_registers (regcache, regnum); @@ -437,15 +532,22 @@ { ptid_t ptid = regcache->ptid (); - if (runtime_initialized () - && is_ravenscar_task (ptid) - && !task_is_currently_active (ptid)) + if (runtime_initialized () && is_ravenscar_task (ptid)) { - struct gdbarch *gdbarch = regcache->arch (); - struct ravenscar_arch_ops *arch_ops - = gdbarch_ravenscar_ops (gdbarch); + if (task_is_currently_active (ptid)) + { + ptid_t base = get_base_thread_from_ravenscar_task (ptid); + temporarily_change_regcache_ptid changer (regcache, base); + beneath ()->store_registers (regcache, regnum); + } + else + { + struct gdbarch *gdbarch = regcache->arch (); + struct ravenscar_arch_ops *arch_ops + = gdbarch_ravenscar_ops (gdbarch); - arch_ops->store_registers (regcache, regnum); + arch_ops->store_registers (regcache, regnum); + } } else beneath ()->store_registers (regcache, regnum); @@ -456,11 +558,18 @@ { ptid_t ptid = regcache->ptid (); - if (runtime_initialized () - && is_ravenscar_task (ptid) - && !task_is_currently_active (ptid)) + if (runtime_initialized () && is_ravenscar_task (ptid)) { - /* Nothing. */ + if (task_is_currently_active (ptid)) + { + ptid_t base = get_base_thread_from_ravenscar_task (ptid); + temporarily_change_regcache_ptid changer (regcache, base); + beneath ()->prepare_to_store (regcache); + } + else + { + /* Nothing. */ + } } else beneath ()->prepare_to_store (regcache); @@ -471,8 +580,8 @@ bool ravenscar_thread_target::stopped_by_sw_breakpoint () { - scoped_restore save_ptid = make_scoped_restore (&inferior_ptid); - inferior_ptid = get_base_thread_from_ravenscar_task (inferior_ptid); + scoped_restore_current_thread saver; + set_base_thread_from_ravenscar_task (inferior_ptid); return beneath ()->stopped_by_sw_breakpoint (); } @@ -481,8 +590,8 @@ bool ravenscar_thread_target::stopped_by_hw_breakpoint () { - scoped_restore save_ptid = make_scoped_restore (&inferior_ptid); - inferior_ptid = get_base_thread_from_ravenscar_task (inferior_ptid); + scoped_restore_current_thread saver; + set_base_thread_from_ravenscar_task (inferior_ptid); return beneath ()->stopped_by_hw_breakpoint (); } @@ -491,8 +600,8 @@ bool ravenscar_thread_target::stopped_by_watchpoint () { - scoped_restore save_ptid = make_scoped_restore (&inferior_ptid); - inferior_ptid = get_base_thread_from_ravenscar_task (inferior_ptid); + scoped_restore_current_thread saver; + set_base_thread_from_ravenscar_task (inferior_ptid); return beneath ()->stopped_by_watchpoint (); } @@ -501,8 +610,8 @@ bool ravenscar_thread_target::stopped_data_address (CORE_ADDR *addr_p) { - scoped_restore save_ptid = make_scoped_restore (&inferior_ptid); - inferior_ptid = get_base_thread_from_ravenscar_task (inferior_ptid); + scoped_restore_current_thread saver; + set_base_thread_from_ravenscar_task (inferior_ptid); return beneath ()->stopped_data_address (addr_p); } @@ -510,8 +619,9 @@ ravenscar_thread_target::mourn_inferior () { m_base_ptid = null_ptid; - beneath ()->mourn_inferior (); + target_ops *beneath = this->beneath (); unpush_target (this); + beneath->mourn_inferior (); } /* Implement the to_core_of_thread target_ops "method". */ @@ -519,9 +629,29 @@ int ravenscar_thread_target::core_of_thread (ptid_t ptid) { + scoped_restore_current_thread saver; + set_base_thread_from_ravenscar_task (inferior_ptid); + return beneath ()->core_of_thread (inferior_ptid); +} + +/* Implement the target xfer_partial method. */ + +enum target_xfer_status +ravenscar_thread_target::xfer_partial (enum target_object object, + const char *annex, + gdb_byte *readbuf, + const gdb_byte *writebuf, + ULONGEST offset, ULONGEST len, + ULONGEST *xfered_len) +{ scoped_restore save_ptid = make_scoped_restore (&inferior_ptid); + /* Calling get_base_thread_from_ravenscar_task can read memory from + the inferior. However, that function is written to prefer our + internal map, so it should not result in recursive calls in + practice. */ inferior_ptid = get_base_thread_from_ravenscar_task (inferior_ptid); - return beneath ()->core_of_thread (inferior_ptid); + return beneath ()->xfer_partial (object, annex, readbuf, writebuf, + offset, len, xfered_len); } /* Observer on inferior_created: push ravenscar thread stratum if needed. */ @@ -543,8 +673,11 @@ return; } - target_ops_up target_holder (new ravenscar_thread_target ()); - push_target (std::move (target_holder)); + ravenscar_thread_target *rtarget = new ravenscar_thread_target (); + push_target (target_ops_up (rtarget)); + thread_info *thr = rtarget->add_active_thread (); + if (thr != nullptr) + switch_to_thread (thr); } ptid_t @@ -557,24 +690,6 @@ static struct cmd_list_element *set_ravenscar_list; static struct cmd_list_element *show_ravenscar_list; -/* Implement the "set ravenscar" prefix command. */ - -static void -set_ravenscar_command (const char *arg, int from_tty) -{ - printf_unfiltered (_(\ -"\"set ravenscar\" must be followed by the name of a setting.\n")); - help_list (set_ravenscar_list, "set ravenscar ", all_commands, gdb_stdout); -} - -/* Implement the "show ravenscar" prefix command. */ - -static void -show_ravenscar_command (const char *args, int from_tty) -{ - cmd_show_list (show_ravenscar_list, from_tty, ""); -} - /* Implement the "show ravenscar task-switching" command. */ static void @@ -593,6 +708,7 @@ /* Module startup initialization function, automagically called by init.c. */ +void _initialize_ravenscar (); void _initialize_ravenscar () { @@ -600,13 +716,13 @@ ravenscar ops if needed. */ gdb::observers::inferior_created.attach (ravenscar_inferior_created); - add_prefix_cmd ("ravenscar", no_class, set_ravenscar_command, - _("Prefix command for changing Ravenscar-specific settings."), - &set_ravenscar_list, "set ravenscar ", 0, &setlist); - - add_prefix_cmd ("ravenscar", no_class, show_ravenscar_command, - _("Prefix command for showing Ravenscar-specific settings."), - &show_ravenscar_list, "show ravenscar ", 0, &showlist); + add_basic_prefix_cmd ("ravenscar", no_class, + _("Prefix command for changing Ravenscar-specific settings."), + &set_ravenscar_list, "set ravenscar ", 0, &setlist); + + add_show_prefix_cmd ("ravenscar", no_class, + _("Prefix command for showing Ravenscar-specific settings."), + &show_ravenscar_list, "show ravenscar ", 0, &showlist); add_setshow_boolean_cmd ("task-switching", class_obscure, &ravenscar_task_support, _("\ diff -Nru gdb-9.1/gdb/ravenscar-thread.h gdb-10.2/gdb/ravenscar-thread.h --- gdb-9.1/gdb/ravenscar-thread.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/ravenscar-thread.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Ada Ravenscar thread support. - Copyright (C) 2004-2020 Free Software Foundation, Inc. + Copyright (C) 2004-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/README gdb-10.2/gdb/README --- gdb-9.1/gdb/README 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/README 2021-04-25 04:06:26.000000000 +0000 @@ -432,6 +432,15 @@ Use the curses library instead of the termcap library, for text-mode terminal operations. +`--with-debuginfod' + Build GDB with libdebuginfod, the debuginfod client library. Used + to automatically fetch source files and separate debug files from + debuginfod servers using the associated executable's build ID. + Enabled by default if libdebuginfod is installed and found at + configure time. debuginfod is packaged with elfutils, starting + with version 0.178. You can get the latest version from + 'https://sourceware.org/elfutils/'. + `--with-libunwind-ia64' Use the libunwind library for unwinding function call stack on ia64 target platforms. @@ -583,12 +592,11 @@ standalone on an m68k, i386, or SPARC cpu and communicate properly with the remote.c stub over a serial line. - The directory gdb/gdbserver/ contains `gdbserver', a program that + The directory gdbserver/ contains `gdbserver', a program that allows remote debugging for Unix applications. GDBserver is only -supported for some native configurations, including Sun 3, Sun 4, and -Linux. +supported for some native configurations. - The file gdb/gdbserver/README includes further notes on GDBserver; in + The file gdbserver/README includes further notes on GDBserver; in particular, it explains how to build GDBserver for cross-debugging (where GDBserver runs on the target machine, which is of a different architecture than the host machine running GDB). diff -Nru gdb-9.1/gdb/record-btrace.c gdb-10.2/gdb/record-btrace.c --- gdb-9.1/gdb/record-btrace.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/record-btrace.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Branch trace support for GDB, the GNU debugger. - Copyright (C) 2013-2020 Free Software Foundation, Inc. + Copyright (C) 2013-2021 Free Software Foundation, Inc. Contributed by Intel Corp. <markus.t.metzger@intel.com> @@ -36,12 +36,14 @@ #include "frame-unwind.h" #include "hashtab.h" #include "infrun.h" -#include "event-loop.h" +#include "gdbsupport/event-loop.h" #include "inf-loop.h" #include "inferior.h" #include <algorithm> #include "gdbarch.h" #include "cli/cli-style.h" +#include "async-event.h" +#include <forward_list> static const target_info record_btrace_target_info = { "record-btrace", @@ -283,6 +285,11 @@ static void record_btrace_enable_warn (struct thread_info *tp) { + /* Ignore this thread if its inferior is not recorded by us. */ + target_ops *rec = tp->inf->target_at (record_stratum); + if (rec != &record_btrace_ops) + return; + try { btrace_enable (tp, &record_btrace_conf); @@ -319,7 +326,7 @@ static void record_btrace_handle_async_inferior_event (gdb_client_data data) { - inferior_event_handler (INF_REG_EVENT, NULL); + inferior_event_handler (INF_REG_EVENT); } /* See record-btrace.h. */ @@ -386,7 +393,7 @@ if (!target_has_execution) error (_("The program is not being run.")); - for (thread_info *tp : all_non_exited_threads ()) + for (thread_info *tp : current_inferior ()->non_exited_threads ()) if (args == NULL || *args == 0 || number_is_in_list (args, tp->global_num)) { btrace_enable (tp, &record_btrace_conf); @@ -408,7 +415,7 @@ record_btrace_auto_disable (); - for (thread_info *tp : all_non_exited_threads ()) + for (thread_info *tp : current_inferior ()->non_exited_threads ()) if (tp->btrace.target != NULL) btrace_disable (tp); } @@ -442,7 +449,7 @@ /* We should have already stopped recording. Tear down btrace in case we have not. */ - for (thread_info *tp : all_non_exited_threads ()) + for (thread_info *tp : current_inferior ()->non_exited_threads ()) btrace_teardown (tp); } @@ -541,7 +548,7 @@ return; } - internal_error (__FILE__, __LINE__, _("Unkown branch trace format.")); + internal_error (__FILE__, __LINE__, _("Unknown branch trace format.")); } /* The info_record method of target record-btrace. */ @@ -556,10 +563,11 @@ DEBUG ("info"); - tp = find_thread_ptid (inferior_ptid); - if (tp == NULL) + if (inferior_ptid == null_ptid) error (_("No thread.")); + tp = inferior_thread (); + validate_registers_access (); btinfo = &tp->btrace; @@ -717,7 +725,16 @@ range = btrace_mk_line_range (symtab, 0, 0); for (i = 0; i < nlines - 1; i++) { - if ((lines[i].pc == pc) && (lines[i].line != 0)) + /* The test of is_stmt here was added when the is_stmt field was + introduced to the 'struct linetable_entry' structure. This + ensured that this loop maintained the same behaviour as before we + introduced is_stmt. That said, it might be that we would be + better off not checking is_stmt here, this would lead to us + possibly adding more line numbers to the range. At the time this + change was made I was unsure how to test this so chose to go with + maintaining the existing experience. */ + if ((lines[i].pc == pc) && (lines[i].line != 0) + && (lines[i].is_stmt == 1)) range = btrace_line_range_add (range, lines[i].line); } @@ -1373,7 +1390,8 @@ enum record_method record_btrace_target::record_method (ptid_t ptid) { - struct thread_info * const tp = find_thread_ptid (ptid); + process_stratum_target *proc_target = current_inferior ()->process_target (); + thread_info *const tp = find_thread_ptid (proc_target, ptid); if (tp == NULL) error (_("No thread.")); @@ -1389,7 +1407,8 @@ bool record_btrace_target::record_is_replaying (ptid_t ptid) { - for (thread_info *tp : all_non_exited_threads (ptid)) + process_stratum_target *proc_target = current_inferior ()->process_target (); + for (thread_info *tp : all_non_exited_threads (proc_target, ptid)) if (btrace_is_replaying (tp)) return true; @@ -1519,14 +1538,16 @@ void record_btrace_target::fetch_registers (struct regcache *regcache, int regno) { - struct btrace_insn_iterator *replay; - struct thread_info *tp; + btrace_insn_iterator *replay = nullptr; - tp = find_thread_ptid (regcache->ptid ()); - gdb_assert (tp != NULL); + /* Thread-db may ask for a thread's registers before GDB knows about the + thread. We forward the request to the target beneath in this + case. */ + thread_info *tp = find_thread_ptid (regcache->target (), regcache->ptid ()); + if (tp != nullptr) + replay = tp->btrace.replay; - replay = tp->btrace.replay; - if (replay != NULL && !record_btrace_generating_corefile) + if (replay != nullptr && !record_btrace_generating_corefile) { const struct btrace_insn *insn; struct gdbarch *gdbarch; @@ -1958,7 +1979,7 @@ get_thread_current_frame_id (struct thread_info *tp) { struct frame_id id; - int executing; + bool executing; /* Set current thread, which is implicitly used by get_current_frame. */ @@ -1966,6 +1987,8 @@ switch_to_thread (tp); + process_stratum_target *proc_target = tp->inf->process_target (); + /* Clear the executing flag to allow changes to the current frame. We are not actually running, yet. We just started a reverse execution command or a record goto command. @@ -1974,7 +1997,7 @@ move the thread. Since we need to recompute the stack, we temporarily set EXECUTING to false. */ executing = tp->executing; - set_executing (inferior_ptid, false); + set_executing (proc_target, inferior_ptid, false); id = null_frame_id; try @@ -1984,13 +2007,13 @@ catch (const gdb_exception &except) { /* Restore the previous execution state. */ - set_executing (inferior_ptid, executing); + set_executing (proc_target, inferior_ptid, executing); throw; } /* Restore the previous execution state. */ - set_executing (inferior_ptid, executing); + set_executing (proc_target, inferior_ptid, executing); return id; } @@ -2154,11 +2177,14 @@ record_btrace_wait below. For all-stop targets, we only step INFERIOR_PTID and continue others. */ + + process_stratum_target *proc_target = current_inferior ()->process_target (); + if (!target_is_non_stop_p ()) { gdb_assert (inferior_ptid.matches (ptid)); - for (thread_info *tp : all_non_exited_threads (ptid)) + for (thread_info *tp : all_non_exited_threads (proc_target, ptid)) { if (tp->ptid.matches (inferior_ptid)) record_btrace_resume_thread (tp, flag); @@ -2168,7 +2194,7 @@ } else { - for (thread_info *tp : all_non_exited_threads (ptid)) + for (thread_info *tp : all_non_exited_threads (proc_target, ptid)) record_btrace_resume_thread (tp, flag); } @@ -2526,7 +2552,8 @@ } /* Keep a work list of moving threads. */ - for (thread_info *tp : all_non_exited_threads (ptid)) + process_stratum_target *proc_target = current_inferior ()->process_target (); + for (thread_info *tp : all_non_exited_threads (proc_target, ptid)) if ((tp->btrace.flags & (BTHR_MOVE | BTHR_STOP)) != 0) moving.push_back (tp); @@ -2609,7 +2636,7 @@ /* Stop all other threads. */ if (!target_is_non_stop_p ()) { - for (thread_info *tp : all_non_exited_threads ()) + for (thread_info *tp : current_inferior ()->non_exited_threads ()) record_btrace_cancel_resume (tp); } @@ -2646,7 +2673,10 @@ } else { - for (thread_info *tp : all_non_exited_threads (ptid)) + process_stratum_target *proc_target + = current_inferior ()->process_target (); + + for (thread_info *tp : all_non_exited_threads (proc_target, ptid)) { tp->btrace.flags &= ~BTHR_MOVE; tp->btrace.flags |= BTHR_STOP; @@ -2843,7 +2873,7 @@ void record_btrace_target::record_stop_replaying () { - for (thread_info *tp : all_non_exited_threads ()) + for (thread_info *tp : current_inferior ()->non_exited_threads ()) record_btrace_stop_replaying (tp); } @@ -2943,25 +2973,6 @@ } } -/* The "set record btrace" command. */ - -static void -cmd_set_record_btrace (const char *args, int from_tty) -{ - printf_unfiltered (_("\"set record btrace\" must be followed " - "by an appropriate subcommand.\n")); - help_list (set_record_btrace_cmdlist, "set record btrace ", - all_commands, gdb_stdout); -} - -/* The "show record btrace" command. */ - -static void -cmd_show_record_btrace (const char *args, int from_tty) -{ - cmd_show_list (show_record_btrace_cmdlist, from_tty, ""); -} - /* The "show record btrace replay-memory-access" command. */ static void @@ -3076,44 +3087,6 @@ error (_("Internal error: bad cpu state.")); } -/* The "s record btrace bts" command. */ - -static void -cmd_set_record_btrace_bts (const char *args, int from_tty) -{ - printf_unfiltered (_("\"set record btrace bts\" must be followed " - "by an appropriate subcommand.\n")); - help_list (set_record_btrace_bts_cmdlist, "set record btrace bts ", - all_commands, gdb_stdout); -} - -/* The "show record btrace bts" command. */ - -static void -cmd_show_record_btrace_bts (const char *args, int from_tty) -{ - cmd_show_list (show_record_btrace_bts_cmdlist, from_tty, ""); -} - -/* The "set record btrace pt" command. */ - -static void -cmd_set_record_btrace_pt (const char *args, int from_tty) -{ - printf_unfiltered (_("\"set record btrace pt\" must be followed " - "by an appropriate subcommand.\n")); - help_list (set_record_btrace_pt_cmdlist, "set record btrace pt ", - all_commands, gdb_stdout); -} - -/* The "show record btrace pt" command. */ - -static void -cmd_show_record_btrace_pt (const char *args, int from_tty) -{ - cmd_show_list (show_record_btrace_pt_cmdlist, from_tty, ""); -} - /* The "record bts buffer-size" show value function. */ static void @@ -3138,8 +3111,9 @@ /* Initialize btrace commands. */ +void _initialize_record_btrace (); void -_initialize_record_btrace (void) +_initialize_record_btrace () { add_prefix_cmd ("btrace", class_obscure, cmd_record_btrace_start, _("Start branch trace recording."), &record_btrace_cmdlist, @@ -3161,13 +3135,13 @@ &record_btrace_cmdlist); add_alias_cmd ("pt", "btrace pt", class_obscure, 1, &record_cmdlist); - add_prefix_cmd ("btrace", class_support, cmd_set_record_btrace, - _("Set record options."), &set_record_btrace_cmdlist, - "set record btrace ", 0, &set_record_cmdlist); - - add_prefix_cmd ("btrace", class_support, cmd_show_record_btrace, - _("Show record options."), &show_record_btrace_cmdlist, - "show record btrace ", 0, &show_record_cmdlist); + add_basic_prefix_cmd ("btrace", class_support, + _("Set record options."), &set_record_btrace_cmdlist, + "set record btrace ", 0, &set_record_cmdlist); + + add_show_prefix_cmd ("btrace", class_support, + _("Show record options."), &show_record_btrace_cmdlist, + "show record btrace ", 0, &show_record_cmdlist); add_setshow_enum_cmd ("replay-memory-access", no_class, replay_memory_access_types, &replay_memory_access, _("\ @@ -3210,15 +3184,17 @@ Show the cpu to be used for trace decode."), &show_record_btrace_cmdlist); - add_prefix_cmd ("bts", class_support, cmd_set_record_btrace_bts, - _("Set record btrace bts options."), - &set_record_btrace_bts_cmdlist, - "set record btrace bts ", 0, &set_record_btrace_cmdlist); - - add_prefix_cmd ("bts", class_support, cmd_show_record_btrace_bts, - _("Show record btrace bts options."), - &show_record_btrace_bts_cmdlist, - "show record btrace bts ", 0, &show_record_btrace_cmdlist); + add_basic_prefix_cmd ("bts", class_support, + _("Set record btrace bts options."), + &set_record_btrace_bts_cmdlist, + "set record btrace bts ", 0, + &set_record_btrace_cmdlist); + + add_show_prefix_cmd ("bts", class_support, + _("Show record btrace bts options."), + &show_record_btrace_bts_cmdlist, + "show record btrace bts ", 0, + &show_record_btrace_cmdlist); add_setshow_uinteger_cmd ("buffer-size", no_class, &record_btrace_conf.bts.size, @@ -3234,15 +3210,17 @@ &set_record_btrace_bts_cmdlist, &show_record_btrace_bts_cmdlist); - add_prefix_cmd ("pt", class_support, cmd_set_record_btrace_pt, - _("Set record btrace pt options."), - &set_record_btrace_pt_cmdlist, - "set record btrace pt ", 0, &set_record_btrace_cmdlist); - - add_prefix_cmd ("pt", class_support, cmd_show_record_btrace_pt, - _("Show record btrace pt options."), - &show_record_btrace_pt_cmdlist, - "show record btrace pt ", 0, &show_record_btrace_cmdlist); + add_basic_prefix_cmd ("pt", class_support, + _("Set record btrace pt options."), + &set_record_btrace_pt_cmdlist, + "set record btrace pt ", 0, + &set_record_btrace_cmdlist); + + add_show_prefix_cmd ("pt", class_support, + _("Show record btrace pt options."), + &show_record_btrace_pt_cmdlist, + "show record btrace pt ", 0, + &show_record_btrace_cmdlist); add_setshow_uinteger_cmd ("buffer-size", no_class, &record_btrace_conf.pt.size, diff -Nru gdb-9.1/gdb/record-btrace.h gdb-10.2/gdb/record-btrace.h --- gdb-9.1/gdb/record-btrace.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/record-btrace.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Branch trace support for GDB, the GNU debugger. - Copyright (C) 2016-2020 Free Software Foundation, Inc. + Copyright (C) 2016-2021 Free Software Foundation, Inc. Contributed by Intel Corp. <tim.wiederhake@intel.com> diff -Nru gdb-9.1/gdb/record.c gdb-10.2/gdb/record.c --- gdb-9.1/gdb/record.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/record.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Process record and replay target for GDB, the GNU debugger. - Copyright (C) 2008-2020 Free Software Foundation, Inc. + Copyright (C) 2008-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -314,23 +314,6 @@ gdb::observers::record_changed.notify (current_inferior (), 0, NULL, NULL); } -/* The "set record" command. */ - -static void -set_record_command (const char *args, int from_tty) -{ - printf_unfiltered (_("\"set record\" must be followed " - "by an appropriate subcommand.\n")); - help_list (set_record_cmdlist, "set record ", all_commands, gdb_stdout); -} - -/* The "show record" command. */ - -static void -show_record_command (const char *args, int from_tty) -{ - cmd_show_list (show_record_cmdlist, from_tty, ""); -} /* The "info record" command. */ @@ -772,8 +755,9 @@ &record_call_history_size); } +void _initialize_record (); void -_initialize_record (void) +_initialize_record () { struct cmd_list_element *c; @@ -807,13 +791,13 @@ set_cmd_completer (c, filename_completer); add_com_alias ("rec", "record", class_obscure, 1); - add_prefix_cmd ("record", class_support, set_record_command, - _("Set record options."), &set_record_cmdlist, - "set record ", 0, &setlist); + add_basic_prefix_cmd ("record", class_support, + _("Set record options."), &set_record_cmdlist, + "set record ", 0, &setlist); add_alias_cmd ("rec", "record", class_obscure, 1, &setlist); - add_prefix_cmd ("record", class_support, show_record_command, - _("Show record options."), &show_record_cmdlist, - "show record ", 0, &showlist); + add_show_prefix_cmd ("record", class_support, + _("Show record options."), &show_record_cmdlist, + "show record ", 0, &showlist); add_alias_cmd ("rec", "record", class_obscure, 1, &showlist); add_prefix_cmd ("record", class_support, info_record_command, _("Info record options."), &info_record_cmdlist, diff -Nru gdb-9.1/gdb/record-full.c gdb-10.2/gdb/record-full.c --- gdb-9.1/gdb/record-full.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/record-full.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Process record and replay target for GDB, the GNU debugger. - Copyright (C) 2013-2020 Free Software Foundation, Inc. + Copyright (C) 2013-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -31,13 +31,14 @@ #include "record-full.h" #include "elf-bfd.h" #include "gcore.h" -#include "event-loop.h" +#include "gdbsupport/event-loop.h" #include "inf-loop.h" #include "gdb_bfd.h" #include "observable.h" #include "infrun.h" #include "gdbsupport/gdb_unlinker.h" #include "gdbsupport/byte-vector.h" +#include "async-event.h" #include <signal.h> @@ -319,7 +320,7 @@ struct bp_target_info *, enum remove_bp_reason) override; - bool has_execution (ptid_t) override; + bool has_execution (inferior *inf) override; }; static record_full_target record_full_ops; @@ -904,7 +905,7 @@ static void record_full_async_inferior_event_handler (gdb_client_data data) { - inferior_event_handler (INF_REG_EVENT, NULL); + inferior_event_handler (INF_REG_EVENT); } /* Open the process record target for 'core' files. */ @@ -1036,6 +1037,9 @@ beneath ()->async (enable); } +/* The PTID and STEP arguments last passed to + record_full_target::resume. */ +static ptid_t record_full_resume_ptid = null_ptid; static int record_full_resume_step = 0; /* True if we've been resumed, and so each record_full_wait call should @@ -1064,6 +1068,7 @@ void record_full_target::resume (ptid_t ptid, int step, enum gdb_signal signal) { + record_full_resume_ptid = inferior_ptid; record_full_resume_step = step; record_full_resumed = 1; record_full_execution_dir = ::execution_direction; @@ -1190,7 +1195,8 @@ /* This is not a single step. */ ptid_t ret; CORE_ADDR tmp_pc; - struct gdbarch *gdbarch = target_thread_architecture (inferior_ptid); + struct gdbarch *gdbarch + = target_thread_architecture (record_full_resume_ptid); while (1) { @@ -1223,6 +1229,8 @@ interested in the event. */ registers_changed (); + switch_to_thread (current_inferior ()->process_target (), + ret); regcache = get_current_regcache (); tmp_pc = regcache_read_pc (regcache); const struct address_space *aspace = regcache->aspace (); @@ -1255,14 +1263,17 @@ if (gdbarch_software_single_step_p (gdbarch)) { + process_stratum_target *proc_target + = current_inferior ()->process_target (); + /* Try to insert the software single step breakpoint. If insert success, set step to 0. */ - set_executing (inferior_ptid, 0); + set_executing (proc_target, inferior_ptid, false); reinit_frame_cache (); step = !insert_single_step_breakpoints (gdbarch); - set_executing (inferior_ptid, 1); + set_executing (proc_target, inferior_ptid, true); } if (record_debug) @@ -1285,6 +1296,8 @@ } else { + switch_to_thread (current_inferior ()->process_target (), + record_full_resume_ptid); struct regcache *regcache = get_current_regcache (); struct gdbarch *gdbarch = regcache->arch (); const struct address_space *aspace = regcache->aspace (); @@ -2239,7 +2252,7 @@ /* "has_execution" method for prec over corefile. */ bool -record_full_core_target::has_execution (ptid_t the_ptid) +record_full_core_target::has_execution (inferior *inf) { return true; } @@ -2781,27 +2794,9 @@ } } -/* The "set record full" command. */ - -static void -set_record_full_command (const char *args, int from_tty) -{ - printf_unfiltered (_("\"set record full\" must be followed " - "by an appropriate subcommand.\n")); - help_list (set_record_full_cmdlist, "set record full ", all_commands, - gdb_stdout); -} - -/* The "show record full" command. */ - -static void -show_record_full_command (const char *args, int from_tty) -{ - cmd_show_list (show_record_full_cmdlist, from_tty, ""); -} - +void _initialize_record_full (); void -_initialize_record_full (void) +_initialize_record_full () { struct cmd_list_element *c; @@ -2830,13 +2825,13 @@ set_cmd_completer (c, filename_completer); deprecate_cmd (c, "record full restore"); - add_prefix_cmd ("full", class_support, set_record_full_command, - _("Set record options."), &set_record_full_cmdlist, - "set record full ", 0, &set_record_cmdlist); - - add_prefix_cmd ("full", class_support, show_record_full_command, - _("Show record options."), &show_record_full_cmdlist, - "show record full ", 0, &show_record_cmdlist); + add_basic_prefix_cmd ("full", class_support, + _("Set record options."), &set_record_full_cmdlist, + "set record full ", 0, &set_record_cmdlist); + + add_show_prefix_cmd ("full", class_support, + _("Show record options."), &show_record_full_cmdlist, + "show record full ", 0, &show_record_cmdlist); /* Record instructions number limit command. */ add_setshow_boolean_cmd ("stop-at-limit", no_class, diff -Nru gdb-9.1/gdb/record-full.h gdb-10.2/gdb/record-full.h --- gdb-9.1/gdb/record-full.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/record-full.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Process record and replay target for GDB, the GNU debugger. - Copyright (C) 2013-2020 Free Software Foundation, Inc. + Copyright (C) 2013-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/record.h gdb-10.2/gdb/record.h --- gdb-9.1/gdb/record.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/record.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Process record and replay target for GDB, the GNU debugger. - Copyright (C) 2008-2020 Free Software Foundation, Inc. + Copyright (C) 2008-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/regcache.c gdb-10.2/gdb/regcache.c --- gdb-9.1/gdb/regcache.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/regcache.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Cache and manage the values of registers for GDB, the GNU debugger. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -22,13 +22,14 @@ #include "gdbthread.h" #include "target.h" #include "test-target.h" +#include "scoped-mock-context.h" #include "gdbarch.h" #include "gdbcmd.h" #include "regcache.h" #include "reggroups.h" #include "observable.h" #include "regset.h" -#include <forward_list> +#include <unordered_map> /* * DATA STRUCTURE @@ -101,7 +102,7 @@ /* Lay out the register cache. - NOTE: cagney/2002-05-22: Only register_type() is used when + NOTE: cagney/2002-05-22: Only register_type () is used when constructing the register cache. It is assumed that the register's raw size, virtual size and type length are all the same. */ @@ -196,10 +197,11 @@ } } -regcache::regcache (gdbarch *gdbarch, const address_space *aspace_) +regcache::regcache (process_stratum_target *target, gdbarch *gdbarch, + const address_space *aspace_) /* The register buffers. A read/write register cache can only hold [0 .. gdbarch_num_regs). */ - : detached_regcache (gdbarch, false), m_aspace (aspace_) + : detached_regcache (gdbarch, false), m_aspace (aspace_), m_target (target) { m_ptid = minus_one_ptid; } @@ -311,51 +313,93 @@ gdb_assert (regnum < gdbarch_num_regs (arch ())); } -/* Global structure containing the current regcache. */ +/* Type to map a ptid to a list of regcaches (one thread may have multiple + regcaches, associated to different gdbarches). */ + +using ptid_regcache_map + = std::unordered_multimap<ptid_t, regcache_up, hash_ptid>; + +/* Type holding regcaches for a given pid. */ + +using pid_ptid_regcache_map = std::unordered_map<int, ptid_regcache_map>; + +/* Type holding regcaches for a given target. */ + +using target_pid_ptid_regcache_map + = std::unordered_map<process_stratum_target *, pid_ptid_regcache_map>; + +/* Global structure containing the existing regcaches. */ /* NOTE: this is a write-through cache. There is no "dirty" bit for recording if the register values have been changed (eg. by the user). Therefore all registers must be written back to the target when appropriate. */ -std::forward_list<regcache *> regcache::current_regcache; +static target_pid_ptid_regcache_map regcaches; struct regcache * -get_thread_arch_aspace_regcache (ptid_t ptid, struct gdbarch *gdbarch, +get_thread_arch_aspace_regcache (process_stratum_target *target, + ptid_t ptid, gdbarch *arch, struct address_space *aspace) { - for (const auto ®cache : regcache::current_regcache) - if (regcache->ptid () == ptid && regcache->arch () == gdbarch) - return regcache; + gdb_assert (target != nullptr); + + /* Find the map for this target. */ + pid_ptid_regcache_map &pid_ptid_regc_map = regcaches[target]; + + /* Find the map for this pid. */ + ptid_regcache_map &ptid_regc_map = pid_ptid_regc_map[ptid.pid ()]; - regcache *new_regcache = new regcache (gdbarch, aspace); + /* Check first if a regcache for this arch already exists. */ + auto range = ptid_regc_map.equal_range (ptid); + for (auto it = range.first; it != range.second; ++it) + { + if (it->second->arch () == arch) + return it->second.get (); + } - regcache::current_regcache.push_front (new_regcache); + /* It does not exist, create it. */ + regcache *new_regcache = new regcache (target, arch, aspace); new_regcache->set_ptid (ptid); + /* Work around a problem with g++ 4.8 (PR96537): Call the regcache_up + constructor explictly instead of implicitly. */ + ptid_regc_map.insert (std::make_pair (ptid, regcache_up (new_regcache))); return new_regcache; } struct regcache * -get_thread_arch_regcache (ptid_t ptid, struct gdbarch *gdbarch) +get_thread_arch_regcache (process_stratum_target *target, ptid_t ptid, + struct gdbarch *gdbarch) { + scoped_restore_current_inferior restore_current_inferior; + set_current_inferior (find_inferior_ptid (target, ptid)); address_space *aspace = target_thread_address_space (ptid); - return get_thread_arch_aspace_regcache (ptid, gdbarch, aspace); + return get_thread_arch_aspace_regcache (target, ptid, gdbarch, aspace); } +static process_stratum_target *current_thread_target; static ptid_t current_thread_ptid; static struct gdbarch *current_thread_arch; struct regcache * -get_thread_regcache (ptid_t ptid) +get_thread_regcache (process_stratum_target *target, ptid_t ptid) { - if (!current_thread_arch || current_thread_ptid != ptid) + if (!current_thread_arch + || target != current_thread_target + || current_thread_ptid != ptid) { + gdb_assert (ptid != null_ptid); + current_thread_ptid = ptid; + current_thread_target = target; + + scoped_restore_current_inferior restore_current_inferior; + set_current_inferior (find_inferior_ptid (target, ptid)); current_thread_arch = target_thread_architecture (ptid); } - return get_thread_arch_regcache (ptid, current_thread_arch); + return get_thread_arch_regcache (target, ptid, current_thread_arch); } /* See regcache.h. */ @@ -363,7 +407,8 @@ struct regcache * get_thread_regcache (thread_info *thread) { - return get_thread_regcache (thread->ptid); + return get_thread_regcache (thread->inf->process_target (), + thread->ptid); } struct regcache * @@ -377,7 +422,11 @@ struct regcache * get_thread_regcache_for_ptid (ptid_t ptid) { - return get_thread_regcache (ptid); + /* This function doesn't take a process_stratum_target parameter + because it's a gdbsupport/ routine implemented by both gdb and + gdbserver. It always refers to a ptid of the current target. */ + process_stratum_target *proc_target = current_inferior ()->process_target (); + return get_thread_regcache (proc_target, ptid); } /* Observer for the target_changed event. */ @@ -388,15 +437,34 @@ registers_changed (); } -/* Update global variables old ptids to hold NEW_PTID if they were - holding OLD_PTID. */ -void -regcache::regcache_thread_ptid_changed (ptid_t old_ptid, ptid_t new_ptid) +/* Update regcaches related to OLD_PTID to now use NEW_PTID. */ +static void +regcache_thread_ptid_changed (process_stratum_target *target, + ptid_t old_ptid, ptid_t new_ptid) { - for (auto ®cache : regcache::current_regcache) - { - if (regcache->ptid () == old_ptid) - regcache->set_ptid (new_ptid); + /* Look up map for target. */ + auto pid_ptid_regc_map_it = regcaches.find (target); + if (pid_ptid_regc_map_it == regcaches.end ()) + return; + + /* Look up map for pid. */ + pid_ptid_regcache_map &pid_ptid_regc_map = pid_ptid_regc_map_it->second; + auto ptid_regc_map_it = pid_ptid_regc_map.find (old_ptid.pid ()); + if (ptid_regc_map_it == pid_ptid_regc_map.end ()) + return; + + /* Update all regcaches belonging to old_ptid. */ + ptid_regcache_map &ptid_regc_map = ptid_regc_map_it->second; + auto range = ptid_regc_map.equal_range (old_ptid); + for (auto it = range.first; it != range.second;) + { + regcache_up rc = std::move (it->second); + rc->set_ptid (new_ptid); + + /* Remove old before inserting new, to avoid rehashing, + which would invalidate iterators. */ + it = ptid_regc_map.erase (it); + ptid_regc_map.insert (std::make_pair (new_ptid, std::move (rc))); } } @@ -412,29 +480,73 @@ Indicate that registers may have changed, so invalidate the cache. */ void -registers_changed_ptid (ptid_t ptid) +registers_changed_ptid (process_stratum_target *target, ptid_t ptid) { - for (auto oit = regcache::current_regcache.before_begin (), - it = std::next (oit); - it != regcache::current_regcache.end (); - ) + if (target == nullptr) { - if ((*it)->ptid ().matches (ptid)) + /* Since there can be ptid clashes between targets, it's not valid to + pass a ptid without saying to which target it belongs. */ + gdb_assert (ptid == minus_one_ptid); + + /* Delete all the regcaches of all targets. */ + regcaches.clear (); + } + else if (ptid.is_pid ()) + { + /* Non-NULL target and pid ptid, delete all regcaches belonging + to this (TARGET, PID). */ + + /* Look up map for target. */ + auto pid_ptid_regc_map_it = regcaches.find (target); + if (pid_ptid_regc_map_it != regcaches.end ()) { - delete *it; - it = regcache::current_regcache.erase_after (oit); + pid_ptid_regcache_map &pid_ptid_regc_map + = pid_ptid_regc_map_it->second; + + pid_ptid_regc_map.erase (ptid.pid ()); } - else - oit = it++; } + else if (ptid != minus_one_ptid) + { + /* Non-NULL target and non-minus_one_ptid, delete all regcaches belonging + to this (TARGET, PTID). */ - if (current_thread_ptid.matches (ptid)) + /* Look up map for target. */ + auto pid_ptid_regc_map_it = regcaches.find (target); + if (pid_ptid_regc_map_it != regcaches.end ()) + { + pid_ptid_regcache_map &pid_ptid_regc_map + = pid_ptid_regc_map_it->second; + + /* Look up map for pid. */ + auto ptid_regc_map_it + = pid_ptid_regc_map.find (ptid.pid ()); + if (ptid_regc_map_it != pid_ptid_regc_map.end ()) + { + ptid_regcache_map &ptid_regc_map + = ptid_regc_map_it->second; + + ptid_regc_map.erase (ptid); + } + } + } + else { + /* Non-NULL target and minus_one_ptid, delete all regcaches + associated to this target. */ + regcaches.erase (target); + } + + if ((target == nullptr || current_thread_target == target) + && current_thread_ptid.matches (ptid)) + { + current_thread_target = NULL; current_thread_ptid = null_ptid; current_thread_arch = NULL; } - if (inferior_ptid.matches (ptid)) + if ((target == nullptr || current_inferior ()->process_target () == target) + && inferior_ptid.matches (ptid)) { /* We just deleted the regcache of the current thread. Need to forget about any frames we have cached, too. */ @@ -447,13 +559,13 @@ void registers_changed_thread (thread_info *thread) { - registers_changed_ptid (thread->ptid); + registers_changed_ptid (thread->inf->process_target (), thread->ptid); } void registers_changed (void) { - registers_changed_ptid (minus_one_ptid); + registers_changed_ptid (nullptr, minus_one_ptid); } void @@ -1192,6 +1304,24 @@ return pc_val; } +/* See gdbsupport/common-regcache.h. */ + +CORE_ADDR +regcache_read_pc_protected (regcache *regcache) +{ + CORE_ADDR pc; + try + { + pc = regcache_read_pc (regcache); + } + catch (const gdb_exception_error &ex) + { + pc = 0; + } + + return pc; +} + void regcache_write_pc (struct regcache *regcache, CORE_ADDR pc) { @@ -1346,7 +1476,7 @@ { static const char blt[] = "builtin_type"; - t = TYPE_NAME (register_type (m_gdbarch, regnum)); + t = register_type (m_gdbarch, regnum)->name (); if (t == NULL) { if (!footnote_register_type_name_null) @@ -1386,69 +1516,203 @@ namespace selftests { -class regcache_access : public regcache +static size_t +regcaches_size () { -public: + size_t size = 0; + + for (auto pid_ptid_regc_map_it = regcaches.cbegin (); + pid_ptid_regc_map_it != regcaches.cend (); + ++pid_ptid_regc_map_it) + { + const pid_ptid_regcache_map &pid_ptid_regc_map + = pid_ptid_regc_map_it->second; + + for (auto ptid_regc_map_it = pid_ptid_regc_map.cbegin (); + ptid_regc_map_it != pid_ptid_regc_map.cend (); + ++ptid_regc_map_it) + { + const ptid_regcache_map &ptid_regc_map + = ptid_regc_map_it->second; + + size += ptid_regc_map.size (); + } + } + + return size; +} + +/* Return the count of regcaches for (TARGET, PTID) in REGCACHES. */ + +static int +regcache_count (process_stratum_target *target, ptid_t ptid) +{ + /* Look up map for target. */ + auto pid_ptid_regc_map_it = regcaches.find (target); + if (pid_ptid_regc_map_it != regcaches.end ()) + { + pid_ptid_regcache_map &pid_ptid_regc_map = pid_ptid_regc_map_it->second; + + /* Look map for pid. */ + auto ptid_regc_map_it = pid_ptid_regc_map.find (ptid.pid ()); + if (ptid_regc_map_it != pid_ptid_regc_map.end ()) + { + ptid_regcache_map &ptid_regc_map = ptid_regc_map_it->second; + auto range = ptid_regc_map.equal_range (ptid); + + return std::distance (range.first, range.second); + } + } + + return 0; +}; + +/* Wrapper around get_thread_arch_aspace_regcache that does some self checks. */ + +static void +get_thread_arch_aspace_regcache_and_check (process_stratum_target *target, + ptid_t ptid) +{ + /* We currently only test with a single gdbarch. Any gdbarch will do, so use + the current inferior's gdbarch. Also use the current inferior's address + space. */ + gdbarch *arch = current_inferior ()->gdbarch; + address_space *aspace = current_inferior ()->aspace; + regcache *regcache + = get_thread_arch_aspace_regcache (target, ptid, arch, aspace); + + SELF_CHECK (regcache != NULL); + SELF_CHECK (regcache->target () == target); + SELF_CHECK (regcache->ptid () == ptid); + SELF_CHECK (regcache->arch () == arch); + SELF_CHECK (regcache->aspace () == aspace); +} + +/* The data that the regcaches selftests must hold onto for the duration of the + test. */ - /* Return the number of elements in current_regcache. */ +struct regcache_test_data +{ + regcache_test_data () + { + /* Ensure the regcaches container is empty at the start. */ + registers_changed (); + } - static size_t - current_regcache_size () + ~regcache_test_data () { - return std::distance (regcache::current_regcache.begin (), - regcache::current_regcache.end ()); + /* Make sure to leave the global regcaches container empty. */ + registers_changed (); } + + test_target_ops test_target1; + test_target_ops test_target2; }; +using regcache_test_data_up = std::unique_ptr<regcache_test_data>; + +/* Set up a few regcaches from two different targets, for use in + regcache-management tests. + + Return a pointer, because the `regcache_test_data` type is not moveable. */ + +static regcache_test_data_up +populate_regcaches_for_test () +{ + regcache_test_data_up data (new regcache_test_data); + size_t expected_regcache_size = 0; + + SELF_CHECK (regcaches_size () == 0); + + /* Populate the regcache container with a few regcaches for the two test + targets. */ + for (int pid : { 1, 2 }) + { + for (long lwp : { 1, 2, 3 }) + { + get_thread_arch_aspace_regcache_and_check + (&data->test_target1, ptid_t (pid, lwp)); + expected_regcache_size++; + SELF_CHECK (regcaches_size () == expected_regcache_size); + + get_thread_arch_aspace_regcache_and_check + (&data->test_target2, ptid_t (pid, lwp)); + expected_regcache_size++; + SELF_CHECK (regcaches_size () == expected_regcache_size); + } + } + + return data; +} + static void -current_regcache_test (void) +get_thread_arch_aspace_regcache_test () { - /* It is empty at the start. */ - SELF_CHECK (regcache_access::current_regcache_size () == 0); + /* populate_regcaches_for_test already tests most of the + get_thread_arch_aspace_regcache functionality. */ + regcache_test_data_up data = populate_regcaches_for_test (); + size_t regcaches_size_before = regcaches_size (); - ptid_t ptid1 (1), ptid2 (2), ptid3 (3); + /* Test that getting an existing regcache doesn't create a new one. */ + get_thread_arch_aspace_regcache_and_check (&data->test_target1, ptid_t (2, 2)); + SELF_CHECK (regcaches_size () == regcaches_size_before); +} - /* Get regcache from ptid1, a new regcache is added to - current_regcache. */ - regcache *regcache = get_thread_arch_aspace_regcache (ptid1, - target_gdbarch (), - NULL); + /* Test marking all regcaches of all targets as changed. */ - SELF_CHECK (regcache != NULL); - SELF_CHECK (regcache->ptid () == ptid1); - SELF_CHECK (regcache_access::current_regcache_size () == 1); +static void +registers_changed_ptid_all_test () +{ + regcache_test_data_up data = populate_regcaches_for_test (); - /* Get regcache from ptid2, a new regcache is added to - current_regcache. */ - regcache = get_thread_arch_aspace_regcache (ptid2, - target_gdbarch (), - NULL); - SELF_CHECK (regcache != NULL); - SELF_CHECK (regcache->ptid () == ptid2); - SELF_CHECK (regcache_access::current_regcache_size () == 2); + registers_changed_ptid (nullptr, minus_one_ptid); + SELF_CHECK (regcaches_size () == 0); +} - /* Get regcache from ptid3, a new regcache is added to - current_regcache. */ - regcache = get_thread_arch_aspace_regcache (ptid3, - target_gdbarch (), - NULL); - SELF_CHECK (regcache != NULL); - SELF_CHECK (regcache->ptid () == ptid3); - SELF_CHECK (regcache_access::current_regcache_size () == 3); +/* Test marking regcaches of a specific target as changed. */ - /* Get regcache from ptid2 again, nothing is added to - current_regcache. */ - regcache = get_thread_arch_aspace_regcache (ptid2, - target_gdbarch (), - NULL); - SELF_CHECK (regcache != NULL); - SELF_CHECK (regcache->ptid () == ptid2); - SELF_CHECK (regcache_access::current_regcache_size () == 3); +static void +registers_changed_ptid_target_test () +{ + regcache_test_data_up data = populate_regcaches_for_test (); + + registers_changed_ptid (&data->test_target1, minus_one_ptid); + SELF_CHECK (regcaches_size () == 6); - /* Mark ptid2 is changed, so regcache of ptid2 should be removed from - current_regcache. */ - registers_changed_ptid (ptid2); - SELF_CHECK (regcache_access::current_regcache_size () == 2); + /* Check that we deleted the regcache for the right target. */ + SELF_CHECK (regcache_count (&data->test_target1, ptid_t (2, 2)) == 0); + SELF_CHECK (regcache_count (&data->test_target2, ptid_t (2, 2)) == 1); +} + +/* Test marking regcaches of a specific (target, pid) as changed. */ + +static void +registers_changed_ptid_target_pid_test () +{ + regcache_test_data_up data = populate_regcaches_for_test (); + + registers_changed_ptid (&data->test_target1, ptid_t (2)); + SELF_CHECK (regcaches_size () == 9); + + /* Regcaches from target1 should not exist, while regcaches from target2 + should exist. */ + SELF_CHECK (regcache_count (&data->test_target1, ptid_t (2, 2)) == 0); + SELF_CHECK (regcache_count (&data->test_target2, ptid_t (2, 2)) == 1); +} + +/* Test marking regcaches of a specific (target, ptid) as changed. */ + +static void +registers_changed_ptid_target_ptid_test () +{ + regcache_test_data_up data = populate_regcaches_for_test (); + + registers_changed_ptid (&data->test_target1, ptid_t (2, 2)); + SELF_CHECK (regcaches_size () == 11); + + /* Check that we deleted the regcache for the right target. */ + SELF_CHECK (regcache_count (&data->test_target1, ptid_t (2, 2)) == 0); + SELF_CHECK (regcache_count (&data->test_target2, ptid_t (2, 2)) == 1); } class target_ops_no_register : public test_target_ops @@ -1509,8 +1773,9 @@ class readwrite_regcache : public regcache { public: - readwrite_regcache (struct gdbarch *gdbarch) - : regcache (gdbarch, nullptr) + readwrite_regcache (process_stratum_target *target, + struct gdbarch *gdbarch) + : regcache (target, gdbarch, nullptr) {} }; @@ -1520,49 +1785,7 @@ static void cooked_read_test (struct gdbarch *gdbarch) { - /* Error out if debugging something, because we're going to push the - test target, which would pop any existing target. */ - if (current_top_target ()->stratum () >= process_stratum) - error (_("target already pushed")); - - /* Create a mock environment. An inferior with a thread, with a - process_stratum target pushed. */ - - target_ops_no_register mock_target; - ptid_t mock_ptid (1, 1); - inferior mock_inferior (mock_ptid.pid ()); - address_space mock_aspace {}; - mock_inferior.gdbarch = gdbarch; - mock_inferior.aspace = &mock_aspace; - thread_info mock_thread (&mock_inferior, mock_ptid); - mock_inferior.thread_list = &mock_thread; - - /* Add the mock inferior to the inferior list so that look ups by - target+ptid can find it. */ - scoped_restore restore_inferior_list - = make_scoped_restore (&inferior_list); - inferior_list = &mock_inferior; - - /* Switch to the mock inferior. */ - scoped_restore_current_inferior restore_current_inferior; - set_current_inferior (&mock_inferior); - - /* Push the process_stratum target so we can mock accessing - registers. */ - push_target (&mock_target); - - /* Pop it again on exit (return/exception). */ - struct on_exit - { - ~on_exit () - { - pop_all_targets_at_and_above (process_stratum); - } - } pop_targets; - - /* Switch to the mock thread. */ - scoped_restore restore_inferior_ptid - = make_scoped_restore (&inferior_ptid, mock_ptid); + scoped_mock_context<target_ops_no_register> mockctx (gdbarch); /* Test that read one raw register from regcache_no_target will go to the target layer. */ @@ -1577,21 +1800,21 @@ break; } - readwrite_regcache readwrite (gdbarch); + readwrite_regcache readwrite (&mockctx.mock_target, gdbarch); gdb::def_vector<gdb_byte> buf (register_size (gdbarch, nonzero_regnum)); readwrite.raw_read (nonzero_regnum, buf.data ()); /* raw_read calls target_fetch_registers. */ - SELF_CHECK (mock_target.fetch_registers_called > 0); - mock_target.reset (); + SELF_CHECK (mockctx.mock_target.fetch_registers_called > 0); + mockctx.mock_target.reset (); /* Mark all raw registers valid, so the following raw registers accesses won't go to target. */ for (auto i = 0; i < gdbarch_num_regs (gdbarch); i++) readwrite.raw_update (i); - mock_target.reset (); + mockctx.mock_target.reset (); /* Then, read all raw and pseudo registers, and don't expect calling to_{fetch,store}_registers. */ for (int regnum = 0; regnum < gdbarch_num_cooked_regs (gdbarch); regnum++) @@ -1604,18 +1827,18 @@ SELF_CHECK (REG_VALID == readwrite.cooked_read (regnum, inner_buf.data ())); - SELF_CHECK (mock_target.fetch_registers_called == 0); - SELF_CHECK (mock_target.store_registers_called == 0); - SELF_CHECK (mock_target.xfer_partial_called == 0); + SELF_CHECK (mockctx.mock_target.fetch_registers_called == 0); + SELF_CHECK (mockctx.mock_target.store_registers_called == 0); + SELF_CHECK (mockctx.mock_target.xfer_partial_called == 0); - mock_target.reset (); + mockctx.mock_target.reset (); } readonly_detached_regcache readonly (readwrite); /* GDB may go to target layer to fetch all registers and memory for readonly regcache. */ - mock_target.reset (); + mockctx.mock_target.reset (); for (int regnum = 0; regnum < gdbarch_num_cooked_regs (gdbarch); regnum++) { @@ -1673,11 +1896,11 @@ } } - SELF_CHECK (mock_target.fetch_registers_called == 0); - SELF_CHECK (mock_target.store_registers_called == 0); - SELF_CHECK (mock_target.xfer_partial_called == 0); + SELF_CHECK (mockctx.mock_target.fetch_registers_called == 0); + SELF_CHECK (mockctx.mock_target.store_registers_called == 0); + SELF_CHECK (mockctx.mock_target.xfer_partial_called == 0); - mock_target.reset (); + mockctx.mock_target.reset (); } } @@ -1710,7 +1933,7 @@ } } pop_targets; - readwrite_regcache readwrite (gdbarch); + readwrite_regcache readwrite (&mock_target, gdbarch); const int num_regs = gdbarch_num_cooked_regs (gdbarch); @@ -1734,17 +1957,17 @@ std::vector<gdb_byte> buf (register_size (gdbarch, regnum), 0); const auto type = register_type (gdbarch, regnum); - if (TYPE_CODE (type) == TYPE_CODE_FLT - || TYPE_CODE (type) == TYPE_CODE_DECFLOAT) + if (type->code () == TYPE_CODE_FLT + || type->code () == TYPE_CODE_DECFLOAT) { /* Generate valid float format. */ target_float_from_string (expected.data (), type, "1.25"); } - else if (TYPE_CODE (type) == TYPE_CODE_INT - || TYPE_CODE (type) == TYPE_CODE_ARRAY - || TYPE_CODE (type) == TYPE_CODE_PTR - || TYPE_CODE (type) == TYPE_CODE_UNION - || TYPE_CODE (type) == TYPE_CODE_STRUCT) + else if (type->code () == TYPE_CODE_INT + || type->code () == TYPE_CODE_ARRAY + || type->code () == TYPE_CODE_PTR + || type->code () == TYPE_CODE_UNION + || type->code () == TYPE_CODE_STRUCT) { if (bfd_arch == bfd_arch_ia64 || (regnum >= gdbarch_num_regs (gdbarch) @@ -1774,7 +1997,7 @@ expected[j] = j; } } - else if (TYPE_CODE (type) == TYPE_CODE_FLAGS) + else if (type->code () == TYPE_CODE_FLAGS) { /* No idea how to test flags. */ continue; @@ -1793,28 +2016,92 @@ } } +/* Verify that when two threads with the same ptid exist (from two different + targets) and one of them changes ptid, we only update the appropriate + regcaches. */ + +static void +regcache_thread_ptid_changed () +{ + /* This test relies on the global regcache list to initially be empty. */ + registers_changed (); + + /* Any arch will do. */ + gdbarch *arch = current_inferior ()->gdbarch; + + /* Prepare two targets with one thread each, with the same ptid. */ + scoped_mock_context<test_target_ops> target1 (arch); + scoped_mock_context<test_target_ops> target2 (arch); + target2.mock_inferior.next = &target1.mock_inferior; + + ptid_t old_ptid (111, 222); + ptid_t new_ptid (111, 333); + + target1.mock_inferior.pid = old_ptid.pid (); + target1.mock_thread.ptid = old_ptid; + target2.mock_inferior.pid = old_ptid.pid (); + target2.mock_thread.ptid = old_ptid; + + gdb_assert (regcaches.empty ()); + + /* Populate the regcaches container. */ + get_thread_arch_aspace_regcache (&target1.mock_target, old_ptid, arch, + nullptr); + get_thread_arch_aspace_regcache (&target2.mock_target, old_ptid, arch, + nullptr); + + gdb_assert (regcaches.size () == 2); + gdb_assert (regcache_count (&target1.mock_target, old_ptid) == 1); + gdb_assert (regcache_count (&target1.mock_target, new_ptid) == 0); + gdb_assert (regcache_count (&target2.mock_target, old_ptid) == 1); + gdb_assert (regcache_count (&target2.mock_target, new_ptid) == 0); + + thread_change_ptid (&target1.mock_target, old_ptid, new_ptid); + + gdb_assert (regcaches.size () == 2); + gdb_assert (regcache_count (&target1.mock_target, old_ptid) == 0); + gdb_assert (regcache_count (&target1.mock_target, new_ptid) == 1); + gdb_assert (regcache_count (&target2.mock_target, old_ptid) == 1); + gdb_assert (regcache_count (&target2.mock_target, new_ptid) == 0); + + /* Leave the regcache list empty. */ + registers_changed (); + gdb_assert (regcaches.empty ()); +} + } // namespace selftests #endif /* GDB_SELF_TEST */ +void _initialize_regcache (); void -_initialize_regcache (void) +_initialize_regcache () { regcache_descr_handle = gdbarch_data_register_post_init (init_regcache_descr); gdb::observers::target_changed.attach (regcache_observer_target_changed); - gdb::observers::thread_ptid_changed.attach - (regcache::regcache_thread_ptid_changed); + gdb::observers::thread_ptid_changed.attach (regcache_thread_ptid_changed); add_com ("flushregs", class_maintenance, reg_flush_command, _("Force gdb to flush its register cache (maintainer command).")); #if GDB_SELF_TEST - selftests::register_test ("current_regcache", selftests::current_regcache_test); + selftests::register_test ("get_thread_arch_aspace_regcache", + selftests::get_thread_arch_aspace_regcache_test); + selftests::register_test ("registers_changed_ptid_all", + selftests::registers_changed_ptid_all_test); + selftests::register_test ("registers_changed_ptid_target", + selftests::registers_changed_ptid_target_test); + selftests::register_test ("registers_changed_ptid_target_pid", + selftests::registers_changed_ptid_target_pid_test); + selftests::register_test ("registers_changed_ptid_target_ptid", + selftests::registers_changed_ptid_target_ptid_test); selftests::register_test_foreach_arch ("regcache::cooked_read_test", selftests::cooked_read_test); selftests::register_test_foreach_arch ("regcache::cooked_write_test", selftests::cooked_write_test); + selftests::register_test ("regcache_thread_ptid_changed", + selftests::regcache_thread_ptid_changed); #endif } diff -Nru gdb-9.1/gdb/regcache-dump.c gdb-10.2/gdb/regcache-dump.c --- gdb-9.1/gdb/regcache-dump.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/regcache-dump.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 1986-2020 Free Software Foundation, Inc. +/* Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -305,8 +305,9 @@ regcache_print (args, regcache_dump_remote); } +void _initialize_regcache_dump (); void -_initialize_regcache_dump (void) +_initialize_regcache_dump () { add_cmd ("registers", class_maintenance, maintenance_print_registers, _("Print the internal register configuration.\n" diff -Nru gdb-9.1/gdb/regcache.h gdb-10.2/gdb/regcache.h --- gdb-9.1/gdb/regcache.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/regcache.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Cache and manage the values of registers for GDB, the GNU debugger. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -22,24 +22,26 @@ #include "gdbsupport/common-regcache.h" #include "gdbsupport/function-view.h" -#include <forward_list> struct regcache; struct regset; struct gdbarch; struct address_space; class thread_info; +struct process_stratum_target; extern struct regcache *get_current_regcache (void); -extern struct regcache *get_thread_regcache (ptid_t ptid); +extern struct regcache *get_thread_regcache (process_stratum_target *target, + ptid_t ptid); /* Get the regcache of THREAD. */ extern struct regcache *get_thread_regcache (thread_info *thread); -extern struct regcache *get_thread_arch_regcache (ptid_t, struct gdbarch *); -extern struct regcache *get_thread_arch_aspace_regcache (ptid_t, - struct gdbarch *, - struct address_space *); +extern struct regcache *get_thread_arch_regcache + (process_stratum_target *targ, ptid_t, struct gdbarch *); +extern struct regcache *get_thread_arch_aspace_regcache + (process_stratum_target *target, ptid_t, + struct gdbarch *, struct address_space *); extern enum register_status regcache_raw_read_signed (struct regcache *regcache, @@ -385,15 +387,18 @@ this->m_ptid = ptid; } + process_stratum_target *target () const + { + return m_target; + } + /* Dump the contents of a register from the register cache to the target debug. */ void debug_print_register (const char *func, int regno); - static void regcache_thread_ptid_changed (ptid_t old_ptid, ptid_t new_ptid); protected: - regcache (gdbarch *gdbarch, const address_space *aspace_); - - static std::forward_list<regcache *> current_regcache; + regcache (process_stratum_target *target, gdbarch *gdbarch, + const address_space *aspace); private: @@ -421,16 +426,17 @@ /* If this is a read-write cache, which thread's registers is it connected to? */ + process_stratum_target *m_target; ptid_t m_ptid; friend struct regcache * - get_thread_arch_aspace_regcache (ptid_t ptid, struct gdbarch *gdbarch, + get_thread_arch_aspace_regcache (process_stratum_target *target, ptid_t ptid, + struct gdbarch *gdbarch, struct address_space *aspace); - - friend void - registers_changed_ptid (ptid_t ptid); }; +using regcache_up = std::unique_ptr<regcache>; + class readonly_detached_regcache : public readable_regcache { public: @@ -451,7 +457,8 @@ }; extern void registers_changed (void); -extern void registers_changed_ptid (ptid_t); +extern void registers_changed_ptid (process_stratum_target *target, + ptid_t ptid); /* Indicate that registers of THREAD may have changed, so invalidate the cache. */ diff -Nru gdb-9.1/gdb/regformats/arm/arm-with-iwmmxt.dat gdb-10.2/gdb/regformats/arm/arm-with-iwmmxt.dat --- gdb-9.1/gdb/regformats/arm/arm-with-iwmmxt.dat 2019-02-23 12:20:11.000000000 +0000 +++ gdb-10.2/gdb/regformats/arm/arm-with-iwmmxt.dat 1970-01-01 00:00:00.000000000 +0000 @@ -1,53 +0,0 @@ -# THIS FILE IS GENERATED. -*- buffer-read-only: t -*- vi :set ro: -# Generated from: arm/arm-with-iwmmxt.xml -name:arm_with_iwmmxt -xmltarget:arm-with-iwmmxt.xml -expedite:r11,sp,pc -32:r0 -32:r1 -32:r2 -32:r3 -32:r4 -32:r5 -32:r6 -32:r7 -32:r8 -32:r9 -32:r10 -32:r11 -32:r12 -32:sp -32:lr -32:pc -0: -0: -0: -0: -0: -0: -0: -0: -0: -32:cpsr -64:wR0 -64:wR1 -64:wR2 -64:wR3 -64:wR4 -64:wR5 -64:wR6 -64:wR7 -64:wR8 -64:wR9 -64:wR10 -64:wR11 -64:wR12 -64:wR13 -64:wR14 -64:wR15 -32:wCSSF -32:wCASF -32:wCGR0 -32:wCGR1 -32:wCGR2 -32:wCGR3 diff -Nru gdb-9.1/gdb/regformats/arm/arm-with-neon.dat gdb-10.2/gdb/regformats/arm/arm-with-neon.dat --- gdb-9.1/gdb/regformats/arm/arm-with-neon.dat 2019-02-23 12:20:11.000000000 +0000 +++ gdb-10.2/gdb/regformats/arm/arm-with-neon.dat 1970-01-01 00:00:00.000000000 +0000 @@ -1,64 +0,0 @@ -# THIS FILE IS GENERATED. -*- buffer-read-only: t -*- vi :set ro: -# Generated from: arm/arm-with-neon.xml -name:arm_with_neon -xmltarget:arm-with-neon.xml -expedite:r11,sp,pc -32:r0 -32:r1 -32:r2 -32:r3 -32:r4 -32:r5 -32:r6 -32:r7 -32:r8 -32:r9 -32:r10 -32:r11 -32:r12 -32:sp -32:lr -32:pc -0: -0: -0: -0: -0: -0: -0: -0: -0: -32:cpsr -64:d0 -64:d1 -64:d2 -64:d3 -64:d4 -64:d5 -64:d6 -64:d7 -64:d8 -64:d9 -64:d10 -64:d11 -64:d12 -64:d13 -64:d14 -64:d15 -64:d16 -64:d17 -64:d18 -64:d19 -64:d20 -64:d21 -64:d22 -64:d23 -64:d24 -64:d25 -64:d26 -64:d27 -64:d28 -64:d29 -64:d30 -64:d31 -32:fpscr diff -Nru gdb-9.1/gdb/regformats/arm/arm-with-vfpv2.dat gdb-10.2/gdb/regformats/arm/arm-with-vfpv2.dat --- gdb-9.1/gdb/regformats/arm/arm-with-vfpv2.dat 2019-02-23 12:20:11.000000000 +0000 +++ gdb-10.2/gdb/regformats/arm/arm-with-vfpv2.dat 1970-01-01 00:00:00.000000000 +0000 @@ -1,48 +0,0 @@ -# THIS FILE IS GENERATED. -*- buffer-read-only: t -*- vi :set ro: -# Generated from: arm/arm-with-vfpv2.xml -name:arm_with_vfpv2 -xmltarget:arm-with-vfpv2.xml -expedite:r11,sp,pc -32:r0 -32:r1 -32:r2 -32:r3 -32:r4 -32:r5 -32:r6 -32:r7 -32:r8 -32:r9 -32:r10 -32:r11 -32:r12 -32:sp -32:lr -32:pc -0: -0: -0: -0: -0: -0: -0: -0: -0: -32:cpsr -64:d0 -64:d1 -64:d2 -64:d3 -64:d4 -64:d5 -64:d6 -64:d7 -64:d8 -64:d9 -64:d10 -64:d11 -64:d12 -64:d13 -64:d14 -64:d15 -32:fpscr diff -Nru gdb-9.1/gdb/regformats/arm/arm-with-vfpv3.dat gdb-10.2/gdb/regformats/arm/arm-with-vfpv3.dat --- gdb-9.1/gdb/regformats/arm/arm-with-vfpv3.dat 2019-02-23 12:20:11.000000000 +0000 +++ gdb-10.2/gdb/regformats/arm/arm-with-vfpv3.dat 1970-01-01 00:00:00.000000000 +0000 @@ -1,64 +0,0 @@ -# THIS FILE IS GENERATED. -*- buffer-read-only: t -*- vi :set ro: -# Generated from: arm/arm-with-vfpv3.xml -name:arm_with_vfpv3 -xmltarget:arm-with-vfpv3.xml -expedite:r11,sp,pc -32:r0 -32:r1 -32:r2 -32:r3 -32:r4 -32:r5 -32:r6 -32:r7 -32:r8 -32:r9 -32:r10 -32:r11 -32:r12 -32:sp -32:lr -32:pc -0: -0: -0: -0: -0: -0: -0: -0: -0: -32:cpsr -64:d0 -64:d1 -64:d2 -64:d3 -64:d4 -64:d5 -64:d6 -64:d7 -64:d8 -64:d9 -64:d10 -64:d11 -64:d12 -64:d13 -64:d14 -64:d15 -64:d16 -64:d17 -64:d18 -64:d19 -64:d20 -64:d21 -64:d22 -64:d23 -64:d24 -64:d25 -64:d26 -64:d27 -64:d28 -64:d29 -64:d30 -64:d31 -32:fpscr diff -Nru gdb-9.1/gdb/regformats/reg-arm.dat gdb-10.2/gdb/regformats/reg-arm.dat --- gdb-9.1/gdb/regformats/reg-arm.dat 2019-02-23 12:20:11.000000000 +0000 +++ gdb-10.2/gdb/regformats/reg-arm.dat 1970-01-01 00:00:00.000000000 +0000 @@ -1,29 +0,0 @@ -name:arm -xmlarch:arm -expedite:r11,sp,pc -32:r0 -32:r1 -32:r2 -32:r3 -32:r4 -32:r5 -32:r6 -32:r7 -32:r8 -32:r9 -32:r10 -32:r11 -32:r12 -32:sp -32:lr -32:pc -96:f0 -96:f1 -96:f2 -96:f3 -96:f4 -96:f5 -96:f6 -96:f7 -32:fps -32:cpsr diff -Nru gdb-9.1/gdb/regformats/reg-bfin.dat gdb-10.2/gdb/regformats/reg-bfin.dat --- gdb-9.1/gdb/regformats/reg-bfin.dat 2019-02-23 12:20:11.000000000 +0000 +++ gdb-10.2/gdb/regformats/reg-bfin.dat 1970-01-01 00:00:00.000000000 +0000 @@ -1,56 +0,0 @@ -name:bfin -expedite:pc,sp,fp -32:r0 -32:r1 -32:r2 -32:r3 -32:r4 -32:r5 -32:r6 -32:r7 -32:p0 -32:p1 -32:p2 -32:p3 -32:p4 -32:p5 -32:sp -32:fp -32:i0 -32:i1 -32:i2 -32:i3 -32:m0 -32:m1 -32:m2 -32:m3 -32:b0 -32:b1 -32:b2 -32:b3 -32:l0 -32:l1 -32:l2 -32:l3 -32:a0x -32:a0w -32:a1x -32:a1w -32:astat -32:rets -32:lc0 -32:lt0 -32:lb0 -32:lc1 -32:lt1 -32:lb1 -32:cycles -32:cycles2 -32:usp -32:seqstat -32:syscfg -32:reti -32:retx -32:retn -32:rete -32:pc diff -Nru gdb-9.1/gdb/regformats/reg-cris.dat gdb-10.2/gdb/regformats/reg-cris.dat --- gdb-9.1/gdb/regformats/reg-cris.dat 2019-02-23 12:20:11.000000000 +0000 +++ gdb-10.2/gdb/regformats/reg-cris.dat 1970-01-01 00:00:00.000000000 +0000 @@ -1,35 +0,0 @@ -name:cris -expedite:r8,sp,pc -32:r0 -32:r1 -32:r2 -32:r3 -32:r4 -32:r5 -32:r6 -32:r7 -32:r8 -32:r9 -32:r10 -32:r11 -32:r12 -32:r13 -32:sp -32:pc - -8:p0 -8:vr -0:p2 -0:p3 -16:p4 -16:ccr -0:p6 -32:mof -32:p8 -32:ibr -32:irp -32:srp -32:bar -32:dccr -32:brp -32:usp diff -Nru gdb-9.1/gdb/regformats/reg-crisv32.dat gdb-10.2/gdb/regformats/reg-crisv32.dat --- gdb-9.1/gdb/regformats/reg-crisv32.dat 2019-02-23 12:20:11.000000000 +0000 +++ gdb-10.2/gdb/regformats/reg-crisv32.dat 1970-01-01 00:00:00.000000000 +0000 @@ -1,54 +0,0 @@ -name:crisv32 -expedite:r8,sp,pc -32:r0 -32:r1 -32:r2 -32:r3 -32:r4 -32:r5 -32:r6 -32:r7 -32:r8 -32:r9 -32:r10 -32:r11 -32:r12 -32:r13 -32:sp -32:acr - -8:bz -8:vr -32:pid -8:srs -16:wz -32:exs -32:eda -32:mof -32:dz -32:ebp -32:erp -32:srp -32:nrp -32:ccs -32:usp -32:spc - -32:pc - -32:s0 -32:s1 -32:s2 -32:s3 -32:s4 -32:s5 -32:s6 -32:s7 -32:s8 -32:s9 -32:s10 -32:s11 -32:s12 -32:s13 -32:s14 -32:s15 diff -Nru gdb-9.1/gdb/regformats/regdat.sh gdb-10.2/gdb/regformats/regdat.sh --- gdb-9.1/gdb/regformats/regdat.sh 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/regformats/regdat.sh 2021-04-25 04:04:35.000000000 +0000 @@ -1,7 +1,7 @@ #!/bin/sh -u # Register protocol definitions for GDB, the GNU debugger. -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is part of GDB. # @@ -127,6 +127,10 @@ echo "const struct target_desc *tdesc_${name};" echo "" + + # This is necessary for -Wmissing-declarations. + echo "void init_registers_${name} (void);" + echo "void" echo "init_registers_${name} (void)" echo "{" diff -Nru gdb-9.1/gdb/regformats/regdef.h gdb-10.2/gdb/regformats/regdef.h --- gdb-9.1/gdb/regformats/regdef.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/regformats/regdef.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Register protocol definition structures for the GNU Debugger - Copyright (C) 2001-2020 Free Software Foundation, Inc. + Copyright (C) 2001-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -19,6 +19,8 @@ #ifndef REGFORMATS_REGDEF_H #define REGFORMATS_REGDEF_H +namespace gdb { + struct reg { reg (int _offset) @@ -60,4 +62,6 @@ } }; +} /* namespace gdb */ + #endif /* REGFORMATS_REGDEF_H */ diff -Nru gdb-9.1/gdb/regformats/reg-m32r.dat gdb-10.2/gdb/regformats/reg-m32r.dat --- gdb-9.1/gdb/regformats/reg-m32r.dat 2019-02-23 12:20:11.000000000 +0000 +++ gdb-10.2/gdb/regformats/reg-m32r.dat 1970-01-01 00:00:00.000000000 +0000 @@ -1,27 +0,0 @@ -name:m32r -expedite:pc,lr,sp -32:r0 -32:r1 -32:r2 -32:r3 -32:r4 -32:r5 -32:r6 -32:r7 -32:r8 -32:r9 -32:r10 -32:r11 -32:r12 -32:fp -32:lr -32:sp -32:psw -32:cbr -32:spi -32:spu -32:bpc -32:pc -32:accl -32:acch -32:evb diff -Nru gdb-9.1/gdb/regformats/reg-tilegx32.dat gdb-10.2/gdb/regformats/reg-tilegx32.dat --- gdb-9.1/gdb/regformats/reg-tilegx32.dat 2019-02-23 12:20:11.000000000 +0000 +++ gdb-10.2/gdb/regformats/reg-tilegx32.dat 1970-01-01 00:00:00.000000000 +0000 @@ -1,67 +0,0 @@ -name:tilegx32 -expedite:sp,lr,pc -64:r0 -64:r1 -64:r2 -64:r3 -64:r4 -64:r5 -64:r6 -64:r7 -64:r8 -64:r9 -64:r10 -64:r11 -64:r12 -64:r13 -64:r14 -64:r15 -64:r16 -64:r17 -64:r18 -64:r19 -64:r20 -64:r21 -64:r22 -64:r23 -64:r24 -64:r25 -64:r26 -64:r27 -64:r28 -64:r29 -64:r30 -64:r31 -64:r32 -64:r33 -64:r34 -64:r35 -64:r36 -64:r37 -64:r38 -64:r39 -64:r40 -64:r41 -64:r42 -64:r43 -64:r44 -64:r45 -64:r46 -64:r47 -64:r48 -64:r49 -64:r50 -64:r51 -64:r52 -64:tp -64:sp -64:lr -64:sn -64:io0 -64:io1 -64:us0 -64:us1 -64:us2 -64:us3 -64:zero -32:pc diff -Nru gdb-9.1/gdb/regformats/reg-tilegx.dat gdb-10.2/gdb/regformats/reg-tilegx.dat --- gdb-9.1/gdb/regformats/reg-tilegx.dat 2019-02-23 12:20:11.000000000 +0000 +++ gdb-10.2/gdb/regformats/reg-tilegx.dat 1970-01-01 00:00:00.000000000 +0000 @@ -1,67 +0,0 @@ -name:tilegx -expedite:sp,lr,pc -64:r0 -64:r1 -64:r2 -64:r3 -64:r4 -64:r5 -64:r6 -64:r7 -64:r8 -64:r9 -64:r10 -64:r11 -64:r12 -64:r13 -64:r14 -64:r15 -64:r16 -64:r17 -64:r18 -64:r19 -64:r20 -64:r21 -64:r22 -64:r23 -64:r24 -64:r25 -64:r26 -64:r27 -64:r28 -64:r29 -64:r30 -64:r31 -64:r32 -64:r33 -64:r34 -64:r35 -64:r36 -64:r37 -64:r38 -64:r39 -64:r40 -64:r41 -64:r42 -64:r43 -64:r44 -64:r45 -64:r46 -64:r47 -64:r48 -64:r49 -64:r50 -64:r51 -64:r52 -64:tp -64:sp -64:lr -64:sn -64:io0 -64:io1 -64:us0 -64:us1 -64:us2 -64:us3 -64:zero -64:pc diff -Nru gdb-9.1/gdb/reggroups.c gdb-10.2/gdb/reggroups.c --- gdb-9.1/gdb/reggroups.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/reggroups.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Register groupings for GDB, the GNU debugger. - Copyright (C) 2002-2020 Free Software Foundation, Inc. + Copyright (C) 2002-2021 Free Software Foundation, Inc. Contributed by Red Hat. @@ -202,8 +202,8 @@ if (group == all_reggroup) return 1; vector_p = TYPE_VECTOR (register_type (gdbarch, regnum)); - float_p = (TYPE_CODE (register_type (gdbarch, regnum)) == TYPE_CODE_FLT - || (TYPE_CODE (register_type (gdbarch, regnum)) + float_p = (register_type (gdbarch, regnum)->code () == TYPE_CODE_FLT + || (register_type (gdbarch, regnum)->code () == TYPE_CODE_DECFLOAT)); raw_p = regnum < gdbarch_num_regs (gdbarch); if (group == float_reggroup) @@ -321,8 +321,9 @@ struct reggroup *const save_reggroup = &save_group; struct reggroup *const restore_reggroup = &restore_group; +void _initialize_reggroup (); void -_initialize_reggroup (void) +_initialize_reggroup () { reggroups_data = gdbarch_data_register_pre_init (reggroups_init); diff -Nru gdb-9.1/gdb/reggroups.h gdb-10.2/gdb/reggroups.h --- gdb-9.1/gdb/reggroups.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/reggroups.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Register groupings for GDB, the GNU debugger. - Copyright (C) 2002-2020 Free Software Foundation, Inc. + Copyright (C) 2002-2021 Free Software Foundation, Inc. Contributed by Red Hat. diff -Nru gdb-9.1/gdb/registry.c gdb-10.2/gdb/registry.c --- gdb-9.1/gdb/registry.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/registry.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Support functions for general registry objects. - Copyright (C) 2011-2020 Free Software Foundation, Inc. + Copyright (C) 2011-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/registry.h gdb-10.2/gdb/registry.h --- gdb-9.1/gdb/registry.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/registry.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Macros for general registry objects. - Copyright (C) 2011-2020 Free Software Foundation, Inc. + Copyright (C) 2011-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/regset.h gdb-10.2/gdb/regset.h --- gdb-9.1/gdb/regset.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/regset.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Manage register sets. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/remote.c gdb-10.2/gdb/remote.c --- gdb-9.1/gdb/remote.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/remote.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Remote target communications for serial-line targets in custom GDB protocol - Copyright (C) 1988-2020 Free Software Foundation, Inc. + Copyright (C) 1988-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -49,7 +49,7 @@ #include "gdbsupport/gdb_sys_time.h" -#include "event-loop.h" +#include "gdbsupport/event-loop.h" #include "event-top.h" #include "inf-loop.h" @@ -77,6 +77,7 @@ #include "gdbsupport/byte-vector.h" #include <algorithm> #include <unordered_map> +#include "async-event.h" /* The remote target. */ @@ -278,6 +279,9 @@ /* The status of the stub support for the various vCont actions. */ vCont_action_support supports_vCont; + /* Whether vCont support was probed already. This is a workaround + until packet_support is per-connection. */ + bool supports_vCont_probed; /* True if the user has pressed Ctrl-C, but the target hasn't responded to that. */ @@ -403,6 +407,8 @@ const target_info &info () const override { return remote_target_info; } + const char *connection_string () override; + thread_control_capabilities get_thread_control_capabilities () override { return tc_schedlock; } @@ -537,6 +543,8 @@ void async (int) override; + int async_wait_fd () override; + void thread_events (int) override; int can_do_single_step () override; @@ -667,7 +675,7 @@ const struct btrace_config *btrace_conf (const struct btrace_target_info *) override; bool augmented_libraries_svr4_read () override; - int follow_fork (int, int) override; + bool follow_fork (bool, bool) override; void follow_exec (struct inferior *, const char *) override; int insert_fork_catchpoint (int) override; int remove_fork_catchpoint (int) override; @@ -1026,7 +1034,7 @@ static void remote_btrace_reset (remote_state *rs); -static void remote_unpush_and_throw (void); +static void remote_unpush_and_throw (remote_target *target); /* For "remote". */ @@ -1268,7 +1276,7 @@ show_remote_exec_file (struct ui_file *file, int from_tty, struct cmd_list_element *cmd, const char *value) { - fprintf_filtered (file, "%s\n", remote_exec_file_var); + fprintf_filtered (file, "%s\n", get_remote_exec_file ()); } static int @@ -1376,7 +1384,7 @@ static remote_target * get_current_remote_target () { - target_ops *proc_target = find_target_at (process_stratum); + target_ops *proc_target = current_inferior ()->process_target (); return dynamic_cast<remote_target *> (proc_target); } @@ -1657,6 +1665,7 @@ } } +/* FIXME: needs to be per-remote-target. */ static struct memory_packet_config memory_write_packet_config = { "memory-write-packet-size", @@ -1730,6 +1739,7 @@ return get_memory_packet_size (&memory_write_packet_config); } +/* FIXME: needs to be per-remote-target. */ static struct memory_packet_config memory_read_packet_config = { "memory-read-packet-size", @@ -2086,6 +2096,9 @@ PACKET_MAX }; +/* FIXME: needs to be per-remote-target. Ignoring this for now, + assuming all remote targets are the same server (thus all support + the same packets). */ static struct packet_config remote_protocol_packets[PACKET_MAX]; /* Returns the packet's corresponding "set remote foo-packet" command @@ -2367,6 +2380,27 @@ between program/address spaces. We simply bind the inferior to the program space's address space. */ inf = current_inferior (); + + /* However, if the current inferior is already bound to a + process, find some other empty inferior. */ + if (inf->pid != 0) + { + inf = nullptr; + for (inferior *it : all_inferiors ()) + if (it->pid == 0) + { + inf = it; + break; + } + } + if (inf == nullptr) + { + /* Since all inferiors were already bound to a process, add + a new inferior. */ + inf = add_inferior_with_spaces (); + } + switch_to_inferior_no_thread (inf); + push_target (this); inferior_appeared (inf, pid); } @@ -2378,11 +2412,15 @@ if (try_open_exec && get_exec_file (0) == NULL) exec_file_locate_attach (pid, 0, 1); + /* Check for exec file mismatch, and let the user solve it. */ + validate_exec_file (1); + return inf; } static remote_thread_info *get_remote_thread_info (thread_info *thread); -static remote_thread_info *get_remote_thread_info (ptid_t ptid); +static remote_thread_info *get_remote_thread_info (remote_target *target, + ptid_t ptid); /* Add thread PTID to GDB's thread list. Tag it as executing/running according to RUNNING. */ @@ -2400,13 +2438,13 @@ might be confusing to the user. Be silent then, preserving the age old behavior. */ if (rs->starting_up) - thread = add_thread_silent (ptid); + thread = add_thread_silent (this, ptid); else - thread = add_thread (ptid); + thread = add_thread (this, ptid); get_remote_thread_info (thread)->vcont_resumed = executing; - set_executing (ptid, executing); - set_running (ptid, running); + set_executing (this, ptid, executing); + set_running (this, ptid, running); return thread; } @@ -2429,7 +2467,7 @@ /* If this is a new thread, add it to GDB's thread list. If we leave it up to WFI to do this, bad things will happen. */ - thread_info *tp = find_thread_ptid (currthread); + thread_info *tp = find_thread_ptid (this, currthread); if (tp != NULL && tp->state == THREAD_EXITED) { /* We're seeing an event on a thread id we knew had exited. @@ -2438,7 +2476,7 @@ return; } - if (!in_thread_list (currthread)) + if (!in_thread_list (this, currthread)) { struct inferior *inf = NULL; int pid = currthread.pid (); @@ -2451,12 +2489,13 @@ stub doesn't support qC. This is the first stop reported after an attach, so this is the main thread. Update the ptid in the thread list. */ - if (in_thread_list (ptid_t (pid))) - thread_change_ptid (inferior_ptid, currthread); + if (in_thread_list (this, ptid_t (pid))) + thread_change_ptid (this, inferior_ptid, currthread); else { - remote_add_thread (currthread, running, executing); - inferior_ptid = currthread; + thread_info *thr + = remote_add_thread (currthread, running, executing); + switch_to_thread (thr); } return; } @@ -2468,7 +2507,7 @@ doesn't support qC. This is the first stop reported after an attach, so this is the main thread. Update the ptid in the thread list. */ - thread_change_ptid (inferior_ptid, currthread); + thread_change_ptid (this, inferior_ptid, currthread); return; } @@ -2476,7 +2515,7 @@ extended-remote which already was debugging an inferior, we may not know about it yet. Add it before adding its child thread, so notifications are emitted in a sensible order. */ - if (find_inferior_pid (currthread.pid ()) == NULL) + if (find_inferior_pid (this, currthread.pid ()) == NULL) { struct remote_state *rs = get_remote_state (); bool fake_pid_p = !remote_multi_process_p (rs); @@ -2516,10 +2555,12 @@ return static_cast<remote_thread_info *> (thread->priv.get ()); } +/* Return PTID's private thread data, creating it if necessary. */ + static remote_thread_info * -get_remote_thread_info (ptid_t ptid) +get_remote_thread_info (remote_target *target, ptid_t ptid) { - thread_info *thr = find_thread_ptid (ptid); + thread_info *thr = find_thread_ptid (target, ptid); return get_remote_thread_info (thr); } @@ -2575,8 +2616,7 @@ putpkt (pass_packet); getpkt (&rs->buf, 0); packet_ok (rs->buf, &remote_protocol_packets[PACKET_QPassSignals]); - if (rs->last_pass_packet) - xfree (rs->last_pass_packet); + xfree (rs->last_pass_packet); rs->last_pass_packet = pass_packet; } else @@ -3745,6 +3785,18 @@ return 0; } +/* Return true if INF only has one non-exited thread. */ + +static bool +has_single_non_exited_thread (inferior *inf) +{ + int count = 0; + for (thread_info *tp ATTRIBUTE_UNUSED : inf->non_exited_threads ()) + if (++count > 1) + break; + return count == 1; +} + /* Implement the to_update_thread_list function for the remote targets. */ @@ -3779,8 +3831,19 @@ target. */ for (thread_info *tp : all_threads_safe ()) { + if (tp->inf->process_target () != this) + continue; + if (!context.contains_thread (tp->ptid)) { + /* Do not remove the thread if it is the last thread in + the inferior. This situation happens when we have a + pending exit process status to process. Otherwise we + may end up with a seemingly live inferior (i.e. pid + != 0) that has no threads. */ + if (has_single_non_exited_thread (tp->inf)) + continue; + /* Not found. */ delete_thread (tp); } @@ -3804,7 +3867,7 @@ remote_notice_new_inferior (item.ptid, executing); - thread_info *tp = find_thread_ptid (item.ptid); + thread_info *tp = find_thread_ptid (this, item.ptid); remote_thread_info *info = get_remote_thread_info (tp); info->core = item.core; info->extra = std::move (item.extra); @@ -4006,13 +4069,6 @@ /* Make sure we leave stdin registered in the event loop. */ terminal_ours (); - /* We don't have a connection to the remote stub anymore. Get rid - of all the inferiors and their threads we were controlling. - Reset inferior_ptid to null_ptid first, as otherwise has_stack_frame - will be unable to find the thread corresponding to (pid, 0, 0). */ - inferior_ptid = null_ptid; - discard_all_inferiors (); - trace_reset_local_state (); delete this; @@ -4049,8 +4105,6 @@ char *ptr; int lose, num_segments = 0, do_sections, do_segments; CORE_ADDR text_addr, data_addr, bss_addr, segments[2]; - struct section_offsets *offs; - struct symfile_segment_data *data; if (symfile_objfile == NULL) return; @@ -4128,12 +4182,10 @@ else if (*ptr != '\0') warning (_("Target reported unsupported offsets: %s"), buf); - offs = ((struct section_offsets *) - alloca (SIZEOF_N_SECTION_OFFSETS (symfile_objfile->num_sections))); - memcpy (offs, symfile_objfile->section_offsets, - SIZEOF_N_SECTION_OFFSETS (symfile_objfile->num_sections)); + section_offsets offs = symfile_objfile->section_offsets; - data = get_symfile_segment_data (symfile_objfile->obfd); + symfile_segment_data_up data + = get_symfile_segment_data (symfile_objfile->obfd); do_segments = (data != NULL); do_sections = num_segments == 0; @@ -4146,10 +4198,10 @@ by assuming that the .text and .data offsets apply to the whole text and data segments. Convert the offsets given in the packet to base addresses for symfile_map_offsets_to_segments. */ - else if (data && data->num_segments == 2) + else if (data != nullptr && data->segments.size () == 2) { - segments[0] = data->segment_bases[0] + text_addr; - segments[1] = data->segment_bases[1] + data_addr; + segments[0] = data->segments[0].base + text_addr; + segments[1] = data->segments[1].base + data_addr; num_segments = 2; } /* If the object file has only one segment, assume that it is text @@ -4157,9 +4209,9 @@ but programs with no code are useless. Of course the code might have ended up in the data segment... to detect that we would need the permissions here. */ - else if (data && data->num_segments == 1) + else if (data && data->segments.size () == 1) { - segments[0] = data->segment_bases[0] + text_addr; + segments[0] = data->segments[0].base + text_addr; num_segments = 1; } /* There's no way to relocate by segment. */ @@ -4168,8 +4220,9 @@ if (do_segments) { - int ret = symfile_map_offsets_to_segments (symfile_objfile->obfd, data, - offs, num_segments, segments); + int ret = symfile_map_offsets_to_segments (symfile_objfile->obfd, + data.get (), offs, + num_segments, segments); if (ret == 0 && !do_sections) error (_("Can not handle qOffsets TextSeg " @@ -4179,20 +4232,17 @@ do_sections = 0; } - if (data) - free_symfile_segment_data (data); - if (do_sections) { - offs->offsets[SECT_OFF_TEXT (symfile_objfile)] = text_addr; + offs[SECT_OFF_TEXT (symfile_objfile)] = text_addr; /* This is a temporary kludge to force data and bss to use the same offsets because that's what nlmconv does now. The real solution requires changes to the stub and remote.c that I don't have time to do right now. */ - offs->offsets[SECT_OFF_DATA (symfile_objfile)] = data_addr; - offs->offsets[SECT_OFF_BSS (symfile_objfile)] = data_addr; + offs[SECT_OFF_DATA (symfile_objfile)] = data_addr; + offs[SECT_OFF_BSS (symfile_objfile)] = data_addr; } objfile_relocate (symfile_objfile, offs); @@ -4297,9 +4347,10 @@ struct remote_state *rs = get_remote_state (); bool fake_pid_p = false; - inferior_ptid = null_ptid; + switch_to_no_thread (); - /* Now, if we have thread information, update inferior_ptid. */ + /* Now, if we have thread information, update the current thread's + ptid. */ ptid_t curr_ptid = get_current_thread (wait_status); if (curr_ptid != null_ptid) @@ -4322,7 +4373,7 @@ /* Add the main thread and switch to it. Don't try reading registers yet, since we haven't fetched the target description yet. */ - thread_info *tp = add_thread_silent (curr_ptid); + thread_info *tp = add_thread_silent (this, curr_ptid); switch_to_thread_no_regs (tp); } @@ -4398,7 +4449,7 @@ if (ignore_event) continue; - struct thread_info *evthread = find_thread_ptid (event_ptid); + thread_info *evthread = find_thread_ptid (this, event_ptid); if (ws.kind == TARGET_WAITKIND_STOPPED) { @@ -4418,14 +4469,14 @@ || ws.value.sig != GDB_SIGNAL_0) evthread->suspend.waitstatus_pending_p = 1; - set_executing (event_ptid, 0); - set_running (event_ptid, 0); + set_executing (this, event_ptid, false); + set_running (this, event_ptid, false); get_remote_thread_info (evthread)->vcont_resumed = 0; } /* "Notice" the new inferiors before anything related to registers/memory. */ - for (inferior *inf : all_non_exited_inferiors ()) + for (inferior *inf : all_non_exited_inferiors (this)) { inf->needs_setup = 1; @@ -4446,7 +4497,7 @@ /* If all threads of an inferior were already stopped, we haven't setup the inferior yet. */ - for (inferior *inf : all_non_exited_inferiors ()) + for (inferior *inf : all_non_exited_inferiors (this)) { if (inf->needs_setup) { @@ -4460,7 +4511,7 @@ /* Now go over all threads that are stopped, and print their current frame. If all-stop, then if there's a signalled thread, pick that as current. */ - for (thread_info *thread : all_non_exited_threads ()) + for (thread_info *thread : all_non_exited_threads (this)) { if (first == NULL) first = thread; @@ -4499,7 +4550,7 @@ /* For "info program". */ thread_info *thread = inferior_thread (); if (thread->state == THREAD_STOPPED) - set_last_target_status (inferior_ptid, thread->suspend.waitstatus); + set_last_target_status (this, inferior_ptid, thread->suspend.waitstatus); } /* Start the remote connection and sync state. */ @@ -4672,7 +4723,7 @@ /* Let the stub know that we want it to return the thread. */ set_continue_thread (minus_one_ptid); - if (thread_count () == 0) + if (thread_count (this) == 0) { /* Target has no concept of threads at all. GDB treats non-threaded target as single-threaded; add a main @@ -4685,8 +4736,8 @@ says should be current. If we're reconnecting to a multi-threaded program, this will ideally be the thread that last reported an event before GDB disconnected. */ - inferior_ptid = get_current_thread (wait_status); - if (inferior_ptid == null_ptid) + ptid_t curr_thread = get_current_thread (wait_status); + if (curr_thread == null_ptid) { /* Odd... The target was able to list threads, but not tell us which thread was current (no "thread" @@ -4698,8 +4749,15 @@ "warning: couldn't determine remote " "current thread; picking first in list.\n"); - inferior_ptid = inferior_list->thread_list->ptid; + for (thread_info *tp : all_non_exited_threads (this, + minus_one_ptid)) + { + switch_to_thread (tp); + break; + } } + else + switch_to_thread (find_thread_ptid (this, curr_thread)); } /* init_wait_for_inferior should be called before get_offsets in order @@ -4758,7 +4816,7 @@ remote_notif_get_pending_events (notif); } - if (thread_count () == 0) + if (thread_count (this) == 0) { if (!extended_p) error (_("The target is not running (try extended-remote?)")); @@ -4820,6 +4878,17 @@ insert_breakpoints (); } +const char * +remote_target::connection_string () +{ + remote_state *rs = get_remote_state (); + + if (rs->remote_desc->name != NULL) + return rs->remote_desc->name; + else + return NULL; +} + /* Open a connection to a remote debugger. NAME is the filename used for communication. */ @@ -5412,7 +5481,7 @@ { if (query (_("The target is not responding to GDB commands.\n" "Stop debugging it? "))) - remote_unpush_and_throw (); + remote_unpush_and_throw (this); } /* If ^C has already been sent once, offer to disconnect. */ else if (!target_terminal::is_ours () && rs->ctrlc_pending_p) @@ -5436,19 +5505,29 @@ curr_quit_handler_target->remote_serial_quit_handler (); } -/* Remove any of the remote.c targets from target stack. Upper targets depend - on it so remove them first. */ +/* Remove the remote target from the target stack of each inferior + that is using it. Upper targets depend on it so remove them + first. */ static void -remote_unpush_target (void) +remote_unpush_target (remote_target *target) { - pop_all_targets_at_and_above (process_stratum); + /* We have to unpush the target from all inferiors, even those that + aren't running. */ + scoped_restore_current_inferior restore_current_inferior; + + for (inferior *inf : all_inferiors (target)) + { + switch_to_inferior_no_thread (inf); + pop_all_targets_at_and_above (process_stratum); + generic_mourn_inferior (); + } } static void -remote_unpush_and_throw (void) +remote_unpush_and_throw (remote_target *target) { - remote_unpush_target (); + remote_unpush_target (target); throw_error (TARGET_CLOSE_ERROR, _("Disconnected from target.")); } @@ -5465,7 +5544,7 @@ /* If we're connected to a running target, target_preopen will kill it. Ask this question first, before target_preopen has a chance to kill anything. */ - if (curr_remote != NULL && !have_inferiors ()) + if (curr_remote != NULL && !target_has_execution) { if (from_tty && !query (_("Already connected to a remote target. Disconnect? "))) @@ -5526,8 +5605,7 @@ /* Register extra event sources in the event loop. */ rs->remote_async_inferior_event_token - = create_async_event_handler (remote_async_inferior_event_handler, - remote); + = create_async_event_handler (remote_async_inferior_event_handler, remote); rs->notif_state = remote_notif_state_allocate (remote); /* Reset the target state; these things will be queried either by @@ -5594,7 +5672,7 @@ /* Pop the partially set up target - unless something else did already before throwing the exception. */ if (ex.error != TARGET_CLOSE_ERROR) - remote_unpush_target (); + remote_unpush_target (remote); throw; } } @@ -5658,10 +5736,10 @@ remote_detach_pid (pid); /* Exit only if this is the only active inferior. */ - if (from_tty && !rs->extended && number_of_live_inferiors () == 1) + if (from_tty && !rs->extended && number_of_live_inferiors (this) == 1) puts_filtered (_("Ending remote debugging.\n")); - struct thread_info *tp = find_thread_ptid (inferior_ptid); + thread_info *tp = find_thread_ptid (this, inferior_ptid); /* Check to see if we are detaching a fork parent. Note that if we are detaching a fork child, tp == NULL. */ @@ -5683,7 +5761,7 @@ } else { - inferior_ptid = null_ptid; + switch_to_no_thread (); detach_inferior (current_inferior ()); } } @@ -5707,8 +5785,8 @@ it is named remote_follow_fork in anticipation of using it for the remote target as well. */ -int -remote_target::follow_fork (int follow_child, int detach_fork) +bool +remote_target::follow_fork (bool follow_child, bool detach_fork) { struct remote_state *rs = get_remote_state (); enum target_waitkind kind = inferior_thread ()->pending_follow.kind; @@ -5734,7 +5812,8 @@ remote_detach_pid (child_pid); } } - return 0; + + return false; } /* Target follow-exec function for remote targets. Save EXECD_PATHNAME @@ -5763,10 +5842,10 @@ error (_("Argument given to \"disconnect\" when remotely debugging.")); /* Make sure we unpush even the extended remote targets. Calling - target_mourn_inferior won't unpush, and remote_mourn won't - unpush if there is more than one inferior left. */ - unpush_target (this); - generic_mourn_inferior (); + target_mourn_inferior won't unpush, and + remote_target::mourn_inferior won't unpush if there is more than + one inferior left. */ + remote_unpush_target (this); if (from_tty) puts_filtered ("Ending remote debugging.\n"); @@ -5792,7 +5871,7 @@ if (from_tty) { - char *exec_file = get_exec_file (0); + const char *exec_file = get_exec_file (0); if (exec_file) printf_unfiltered (_("Attaching to program: %s, %s\n"), exec_file, @@ -5828,36 +5907,36 @@ target_pid_to_str (ptid_t (pid)).c_str ()); } - set_current_inferior (remote_add_inferior (false, pid, 1, 0)); + switch_to_inferior_no_thread (remote_add_inferior (false, pid, 1, 0)); inferior_ptid = ptid_t (pid); if (target_is_non_stop_p ()) { - struct thread_info *thread; - /* Get list of threads. */ update_thread_list (); - thread = first_thread_of_inferior (current_inferior ()); - if (thread) - inferior_ptid = thread->ptid; - else - inferior_ptid = ptid_t (pid); + thread_info *thread = first_thread_of_inferior (current_inferior ()); + if (thread != nullptr) + switch_to_thread (thread); /* Invalidate our notion of the remote current thread. */ record_currthread (rs, minus_one_ptid); } else { - /* Now, if we have thread information, update inferior_ptid. */ - inferior_ptid = remote_current_thread (inferior_ptid); + /* Now, if we have thread information, update the main thread's + ptid. */ + ptid_t curr_ptid = remote_current_thread (ptid_t (pid)); /* Add the main thread to the thread list. */ - thread_info *thr = add_thread_silent (inferior_ptid); + thread_info *thr = add_thread_silent (this, curr_ptid); + + switch_to_thread (thr); + /* Don't consider the thread stopped until we've processed the saved stop reply. */ - set_executing (thr->ptid, true); + set_executing (this, thr->ptid, true); } /* Next, if the target can specify a description, read it. We do @@ -5959,6 +6038,7 @@ } packet_ok (rs->buf, &remote_protocol_packets[PACKET_vCont]); + rs->supports_vCont_probed = true; } /* Helper function for building "vCont" resumptions. Write a @@ -5996,10 +6076,10 @@ { /* If we don't know about the target thread's tid, then we're resuming magic_null_ptid (see caller). */ - tp = find_thread_ptid (magic_null_ptid); + tp = find_thread_ptid (this, magic_null_ptid); } else - tp = find_thread_ptid (ptid); + tp = find_thread_ptid (this, ptid); gdb_assert (tp != NULL); if (tp->control.may_range_step) @@ -6062,7 +6142,7 @@ remote_target::append_pending_thread_resumptions (char *p, char *endp, ptid_t ptid) { - for (thread_info *thread : all_non_exited_threads (ptid)) + for (thread_info *thread : all_non_exited_threads (this, ptid)) if (inferior_ptid != thread->ptid && thread->suspend.stop_signal != GDB_SIGNAL_0) { @@ -6095,7 +6175,7 @@ else set_continue_thread (ptid); - for (thread_info *thread : all_non_exited_threads ()) + for (thread_info *thread : all_non_exited_threads (this)) resume_clear_thread_private_info (thread); buf = rs->buf.data (); @@ -6232,9 +6312,9 @@ remote_thread_info *remote_thr; if (minus_one_ptid == ptid || ptid.is_pid ()) - remote_thr = get_remote_thread_info (inferior_ptid); + remote_thr = get_remote_thread_info (this, inferior_ptid); else - remote_thr = get_remote_thread_info (ptid); + remote_thr = get_remote_thread_info (this, ptid); remote_thr->last_resume_step = step; remote_thr->last_resume_sig = siggnal; @@ -6466,7 +6546,7 @@ may_global_wildcard_vcont = 1; /* And assume every process is individually wildcard-able too. */ - for (inferior *inf : all_non_exited_inferiors ()) + for (inferior *inf : all_non_exited_inferiors (this)) { remote_inferior *priv = get_remote_inferior (inf); @@ -6477,7 +6557,7 @@ disable process and global wildcard resumes appropriately. */ check_pending_events_prevent_wildcard_vcont (&may_global_wildcard_vcont); - for (thread_info *tp : all_non_exited_threads ()) + for (thread_info *tp : all_non_exited_threads (this)) { /* If a thread of a process is not meant to be resumed, then we can't wildcard that process. */ @@ -6506,7 +6586,7 @@ struct vcont_builder vcont_builder (this); /* Threads first. */ - for (thread_info *tp : all_non_exited_threads ()) + for (thread_info *tp : all_non_exited_threads (this)) { remote_thread_info *remote_thr = get_remote_thread_info (tp); @@ -6535,7 +6615,7 @@ supposed to be resumed. */ any_process_wildcard = 0; - for (inferior *inf : all_non_exited_inferiors ()) + for (inferior *inf : all_non_exited_inferiors (this)) { if (get_remote_inferior (inf)->may_wildcard_vcont) { @@ -6556,7 +6636,7 @@ } else { - for (inferior *inf : all_non_exited_inferiors ()) + for (inferior *inf : all_non_exited_inferiors (this)) { if (get_remote_inferior (inf)->may_wildcard_vcont) { @@ -6583,7 +6663,10 @@ char *p = rs->buf.data (); char *endp = p + get_remote_packet_size (); - if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN) + /* FIXME: This supports_vCont_probed check is a workaround until + packet_support is per-connection. */ + if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN + || !rs->supports_vCont_probed) remote_vcont_probe (); if (!rs->supports_vCont.t) @@ -6740,7 +6823,7 @@ if (query (_("The target is not responding to interrupt requests.\n" "Stop debugging it? "))) { - remote_unpush_target (); + remote_unpush_target (this); throw_error (TARGET_CLOSE_ERROR, _("Disconnected from target.")); } } @@ -6782,9 +6865,9 @@ tb[0] = c; tb[1] = 0; - ui_file_puts (gdb_stdtarg, tb); + gdb_stdtarg->puts (tb); } - ui_file_flush (gdb_stdtarg); + gdb_stdtarg->flush (); } struct stop_reply : public notif_event @@ -6947,7 +7030,7 @@ /* For any threads stopped at a fork event, remove the corresponding fork child threads from the CONTEXT list. */ - for (thread_info *thread : all_non_exited_threads ()) + for (thread_info *thread : all_non_exited_threads (this)) { struct target_waitstatus *ws = thread_pending_fork_status (thread); @@ -6989,7 +7072,7 @@ || event->ws.kind == TARGET_WAITKIND_VFORKED) *may_global_wildcard = 0; - struct inferior *inf = find_inferior_ptid (event->ptid); + struct inferior *inf = find_inferior_ptid (this, event->ptid); /* This may be the first time we heard about this process. Regardless, we must not do a global wildcard resume, otherwise @@ -7339,25 +7422,22 @@ reported expedited registers. */ if (event->ptid == null_ptid) { + /* If there is no thread-id information then leave + the event->ptid as null_ptid. Later in + process_stop_reply we will pick a suitable + thread. */ const char *thr = strstr (p1 + 1, ";thread:"); if (thr != NULL) event->ptid = read_ptid (thr + strlen (";thread:"), NULL); - else - { - /* Either the current thread hasn't changed, - or the inferior is not multi-threaded. - The event must be for the thread we last - set as (or learned as being) current. */ - event->ptid = event->rs->general_thread; - } } if (rsa == NULL) { - inferior *inf = (event->ptid == null_ptid - ? NULL - : find_inferior_ptid (event->ptid)); + inferior *inf + = (event->ptid == null_ptid + ? NULL + : find_inferior_ptid (this, event->ptid)); /* If this is the first time we learn anything about this process, skip the registers included in this packet, since we don't yet @@ -7445,7 +7525,6 @@ case 'W': /* Target exited. */ case 'X': { - int pid; ULONGEST value; /* GDB used to accept only 2 hex chars here. Stubs should @@ -7469,8 +7548,9 @@ event->ws.value.sig = GDB_SIGNAL_UNKNOWN; } - /* If no process is specified, assume inferior_ptid. */ - pid = inferior_ptid.pid (); + /* If no process is specified, return null_ptid, and let the + caller figure out the right process to use. */ + int pid = 0; if (*p == '\0') ; else if (*p == ';') @@ -7500,9 +7580,6 @@ event->ptid = minus_one_ptid; break; } - - if (target_is_non_stop_p () && event->ptid == null_ptid) - error (_("No process or thread specified in stop reply: %s"), buf); } /* When the stub wants to tell GDB about a new notification reply, it @@ -7604,10 +7681,61 @@ *status = stop_reply->ws; ptid = stop_reply->ptid; - /* If no thread/process was reported by the stub, assume the current - inferior. */ + /* If no thread/process was reported by the stub then use the first + non-exited thread in the current target. */ if (ptid == null_ptid) - ptid = inferior_ptid; + { + /* Some stop events apply to all threads in an inferior, while others + only apply to a single thread. */ + bool is_stop_for_all_threads + = (status->kind == TARGET_WAITKIND_EXITED + || status->kind == TARGET_WAITKIND_SIGNALLED); + + for (thread_info *thr : all_non_exited_threads (this)) + { + if (ptid != null_ptid + && (!is_stop_for_all_threads + || ptid.pid () != thr->ptid.pid ())) + { + static bool warned = false; + + if (!warned) + { + /* If you are seeing this warning then the remote target + has stopped without specifying a thread-id, but the + target does have multiple threads (or inferiors), and + so GDB is having to guess which thread stopped. + + Examples of what might cause this are the target + sending and 'S' stop packet, or a 'T' stop packet and + not including a thread-id. + + Additionally, the target might send a 'W' or 'X + packet without including a process-id, when the target + has multiple running inferiors. */ + if (is_stop_for_all_threads) + warning (_("multi-inferior target stopped without " + "sending a process-id, using first " + "non-exited inferior")); + else + warning (_("multi-threaded target stopped without " + "sending a thread-id, using first " + "non-exited thread")); + warned = true; + } + break; + } + + /* If this is a stop for all threads then don't use a particular + threads ptid, instead create a new ptid where only the pid + field is set. */ + if (is_stop_for_all_threads) + ptid = ptid_t (thr->ptid.pid ()); + else + ptid = thr->ptid; + } + gdb_assert (ptid != null_ptid); + } if (status->kind != TARGET_WAITKIND_EXITED && status->kind != TARGET_WAITKIND_SIGNALLED @@ -7617,7 +7745,7 @@ if (!stop_reply->regcache.empty ()) { struct regcache *regcache - = get_thread_arch_regcache (ptid, stop_reply->arch); + = get_thread_arch_regcache (this, ptid, stop_reply->arch); for (cached_reg_t ® : stop_reply->regcache) { @@ -7629,7 +7757,7 @@ } remote_notice_new_inferior (ptid, 0); - remote_thread_info *remote_thr = get_remote_thread_info (ptid); + remote_thread_info *remote_thr = get_remote_thread_info (this, ptid); remote_thr->core = stop_reply->core; remote_thr->stop_reason = stop_reply->stop_reason; remote_thr->watch_data_address = stop_reply->watch_data_address; @@ -7696,6 +7824,17 @@ } } +/* Return the first resumed thread. */ + +static ptid_t +first_remote_resumed_thread (remote_target *target) +{ + for (thread_info *tp : all_non_exited_threads (target, minus_one_ptid)) + if (tp->resumed) + return tp->ptid; + return null_ptid; +} + /* Wait until the remote machine stops, then return, storing status in STATUS just as `wait' would. */ @@ -7832,11 +7971,19 @@ if (event_ptid != null_ptid) record_currthread (rs, event_ptid); else - event_ptid = inferior_ptid; + event_ptid = first_remote_resumed_thread (this); } else - /* A process exit. Invalidate our notion of current thread. */ - record_currthread (rs, minus_one_ptid); + { + /* A process exit. Invalidate our notion of current thread. */ + record_currthread (rs, minus_one_ptid); + /* It's possible that the packet did not include a pid. */ + if (event_ptid == null_ptid) + event_ptid = first_remote_resumed_thread (this); + /* EVENT_PTID could still be NULL_PTID. Double-check. */ + if (event_ptid == null_ptid) + event_ptid = magic_null_ptid; + } return event_ptid; } @@ -8947,11 +9094,11 @@ for output compatibility with throw_perror_with_name. */ static void -unpush_and_perror (const char *string) +unpush_and_perror (remote_target *target, const char *string) { int saved_errno = errno; - remote_unpush_target (); + remote_unpush_target (target); throw_error (TARGET_CLOSE_ERROR, "%s: %s.", string, safe_strerror (saved_errno)); } @@ -8987,12 +9134,12 @@ switch ((enum serial_rc) ch) { case SERIAL_EOF: - remote_unpush_target (); + remote_unpush_target (this); throw_error (TARGET_CLOSE_ERROR, _("Remote connection closed")); /* no return */ case SERIAL_ERROR: - unpush_and_perror (_("Remote communication error. " - "Target disconnected.")); + unpush_and_perror (this, _("Remote communication error. " + "Target disconnected.")); /* no return */ case SERIAL_TIMEOUT: break; @@ -9020,8 +9167,8 @@ if (serial_write (rs->remote_desc, str, len)) { - unpush_and_perror (_("Remote communication error. " - "Target disconnected.")); + unpush_and_perror (this, _("Remote communication error. " + "Target disconnected.")); } if (rs->got_ctrlc_during_io) @@ -9544,7 +9691,7 @@ if (forever) /* Watchdog went off? Kill the target. */ { - remote_unpush_target (); + remote_unpush_target (this); throw_error (TARGET_CLOSE_ERROR, _("Watchdog timeout has expired. " "Target detached.")); @@ -9661,7 +9808,7 @@ /* Kill the fork child threads of any threads in process PID that are stopped at a fork event. */ - for (thread_info *thread : all_non_exited_threads ()) + for (thread_info *thread : all_non_exited_threads (this)) { struct target_waitstatus *ws = &thread->pending_follow; @@ -9721,7 +9868,7 @@ inferior, then we will tell gdbserver to exit and unpush the target. */ if (res == -1 && !remote_multi_process_p (rs) - && number_of_live_inferiors () == 1) + && number_of_live_inferiors (this) == 1) { remote_kill_k (); @@ -9807,12 +9954,9 @@ discard_pending_stop_replies (current_inferior ()); /* In 'target remote' mode with one inferior, we close the connection. */ - if (!rs->extended && number_of_live_inferiors () <= 1) + if (!rs->extended && number_of_live_inferiors (this) <= 1) { - unpush_target (this); - - /* remote_close takes care of doing most of the clean up. */ - generic_mourn_inferior (); + remote_unpush_target (this); return; } @@ -9847,26 +9991,6 @@ /* Call common code to mark the inferior as not running. */ generic_mourn_inferior (); - - if (!have_inferiors ()) - { - if (!remote_multi_process_p (rs)) - { - /* Check whether the target is running now - some remote stubs - automatically restart after kill. */ - putpkt ("?"); - getpkt (&rs->buf, 0); - - if (rs->buf[0] == 'S' || rs->buf[0] == 'T') - { - /* Assume that the target has been restarted. Set - inferior_ptid so that bits of core GDB realizes - there's something here, e.g., so that the user can - say "kill" again. */ - inferior_ptid = magic_null_ptid; - } - } - } } bool @@ -12594,12 +12718,6 @@ remote_file_delete (argv[0], from_tty); } -static void -remote_command (const char *args, int from_tty) -{ - help_list (remote_cmdlist, "remote ", all_commands, gdb_stdout); -} - bool remote_target::can_execute_reverse () { @@ -12754,7 +12872,7 @@ encode_actions_rsp (loc, &tdp_actions, &stepping_actions); tpaddr = loc->address; - sprintf_vma (addrbuf, tpaddr); + strcpy (addrbuf, phex (tpaddr, sizeof (CORE_ADDR))); ret = snprintf (buf.data (), buf.size (), "QTDP:%x:%s:%c:%lx:%x", b->number, addrbuf, /* address */ (b->enable_state == bp_enabled ? 'E' : 'D'), @@ -13016,11 +13134,10 @@ remote_target::enable_tracepoint (struct bp_location *location) { struct remote_state *rs = get_remote_state (); - char addr_buf[40]; - sprintf_vma (addr_buf, location->address); xsnprintf (rs->buf.data (), get_remote_packet_size (), "QTEnable:%x:%s", - location->owner->number, addr_buf); + location->owner->number, + phex (location->address, sizeof (CORE_ADDR))); putpkt (rs->buf); remote_get_noisy_reply (); if (rs->buf[0] == '\0') @@ -13033,11 +13150,10 @@ remote_target::disable_tracepoint (struct bp_location *location) { struct remote_state *rs = get_remote_state (); - char addr_buf[40]; - sprintf_vma (addr_buf, location->address); xsnprintf (rs->buf.data (), get_remote_packet_size (), "QTDisable:%x:%s", - location->owner->number, addr_buf); + location->owner->number, + phex (location->address, sizeof (CORE_ADDR))); putpkt (rs->buf); remote_get_noisy_reply (); if (rs->buf[0] == '\0') @@ -13416,7 +13532,7 @@ int remote_target::core_of_thread (ptid_t ptid) { - struct thread_info *info = find_thread_ptid (ptid); + thread_info *info = find_thread_ptid (this, ptid); if (info != NULL && info->priv != NULL) return get_remote_thread_info (info)->core; @@ -13696,7 +13812,7 @@ scoped_restore_current_thread restore_thread; - for (thread_info *tp : all_non_exited_threads ()) + for (thread_info *tp : all_non_exited_threads (this)) { set_general_thread (tp->ptid); @@ -13912,13 +14028,12 @@ remote_target::pid_to_exec_file (int pid) { static gdb::optional<gdb::char_vector> filename; - struct inferior *inf; char *annex = NULL; if (packet_support (PACKET_qXfer_exec_file) != PACKET_ENABLE) return NULL; - inf = find_inferior_pid (pid); + inferior *inf = find_inferior_pid (this, pid); if (inf == NULL) internal_error (__FILE__, __LINE__, _("not currently attached to process %d"), pid); @@ -13979,7 +14094,7 @@ int handle_len, inferior *inf) { - for (thread_info *tp : all_non_exited_threads ()) + for (thread_info *tp : all_non_exited_threads (this)) { remote_thread_info *priv = get_remote_thread_info (tp); @@ -14042,13 +14157,37 @@ { /* Don't propogate error information up to the client. Instead let the client find out about the error by querying the target. */ - inferior_event_handler (INF_REG_EVENT, NULL); + inferior_event_handler (INF_REG_EVENT); } static void remote_async_inferior_event_handler (gdb_client_data data) { - inferior_event_handler (INF_REG_EVENT, data); + remote_target *remote = (remote_target *) data; + /* Hold a strong reference to the remote target while handling an + event, since that could result in closing the connection. */ + auto remote_ref = target_ops_ref::new_reference (remote); + + inferior_event_handler (INF_REG_EVENT); + + remote_state *rs = remote->get_remote_state (); + + /* inferior_event_handler may have consumed an event pending on the + infrun side without calling target_wait on the REMOTE target, or + may have pulled an event out of a different target. Keep trying + for this remote target as long it still has either pending events + or unacknowledged notifications. */ + + if (rs->notif_state->pending_event[notif_client_stop.id] != NULL + || !rs->stop_reply_queue.empty ()) + mark_async_event_handler (rs->remote_async_inferior_event_token); +} + +int +remote_target::async_wait_fd () +{ + struct remote_state *rs = get_remote_state (); + return rs->remote_desc->fd; } void @@ -14115,12 +14254,6 @@ } static void -set_remote_cmd (const char *args, int from_tty) -{ - help_list (remote_set_cmdlist, "set remote ", all_commands, gdb_stdout); -} - -static void show_remote_cmd (const char *args, int from_tty) { /* We can't just use cmd_show_list here, because we want to skip @@ -14249,8 +14382,9 @@ } } +void _initialize_remote (); void -_initialize_remote (void) +_initialize_remote () { struct cmd_list_element *cmd; const char *cmd_name; @@ -14271,12 +14405,12 @@ /* set/show remote ... */ - add_prefix_cmd ("remote", class_maintenance, set_remote_cmd, _("\ + add_basic_prefix_cmd ("remote", class_maintenance, _("\ Remote protocol specific variables.\n\ Configure various remote-protocol specific variables such as\n\ the packets being used."), - &remote_set_cmdlist, "set remote ", - 0 /* allow-unknown */, &setlist); + &remote_set_cmdlist, "set remote ", + 0 /* allow-unknown */, &setlist); add_prefix_cmd ("remote", class_maintenance, show_remote_cmd, _("\ Remote protocol specific variables.\n\ Configure various remote-protocol specific variables such as\n\ @@ -14306,10 +14440,10 @@ set_remotebreak, show_remotebreak, &setlist, &showlist); cmd_name = "remotebreak"; - cmd = lookup_cmd (&cmd_name, setlist, "", -1, 1); + cmd = lookup_cmd (&cmd_name, setlist, "", NULL, -1, 1); deprecate_cmd (cmd, "set remote interrupt-sequence"); cmd_name = "remotebreak"; /* needed because lookup_cmd updates the pointer */ - cmd = lookup_cmd (&cmd_name, showlist, "", -1, 1); + cmd = lookup_cmd (&cmd_name, showlist, "", NULL, -1, 1); deprecate_cmd (cmd, "show remote interrupt-sequence"); add_setshow_enum_cmd ("interrupt-sequence", class_support, @@ -14697,11 +14831,11 @@ `Z' packets is %s. */ &remote_set_cmdlist, &remote_show_cmdlist); - add_prefix_cmd ("remote", class_files, remote_command, _("\ + add_basic_prefix_cmd ("remote", class_files, _("\ Manipulate files on the remote system.\n\ Transfer files to and from the remote target system."), - &remote_cmdlist, "remote ", - 0 /* allow-unknown */, &cmdlist); + &remote_cmdlist, "remote ", + 0 /* allow-unknown */, &cmdlist); add_cmd ("put", class_files, remote_put_command, _("Copy a local file to the remote system."), @@ -14757,5 +14891,5 @@ &setdebuglist, &showdebuglist); /* Eventually initialize fileio. See fileio.c */ - initialize_remote_fileio (remote_set_cmdlist, remote_show_cmdlist); + initialize_remote_fileio (&remote_set_cmdlist, &remote_show_cmdlist); } diff -Nru gdb-9.1/gdb/remote-fileio.c gdb-10.2/gdb/remote-fileio.c --- gdb-9.1/gdb/remote-fileio.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/remote-fileio.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Remote File-I/O communications - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -25,7 +25,7 @@ #include "gdbsupport/gdb_wait.h" #include <sys/stat.h> #include "remote-fileio.h" -#include "event-loop.h" +#include "gdbsupport/event-loop.h" #include "target.h" #include "filenames.h" #include "gdbsupport/filestuff.h" @@ -541,7 +541,7 @@ limit this read to something smaller than that - by a safe margin, in case the limit depends on system resources or version. */ - ret = ui_file_read (gdb_stdtargin, (char *) buffer, 16383); + ret = gdb_stdtargin->read ((char *) buffer, 16383); if (ret > 0 && (size_t)ret > length) { remaining_buf = (char *) xmalloc (ret - length); @@ -639,10 +639,12 @@ xfree (buffer); return; case FIO_FD_CONSOLE_OUT: - ui_file_write (target_fd == 1 ? gdb_stdtarg : gdb_stdtargerr, - (char *) buffer, length); - ui_file_flush (target_fd == 1 ? gdb_stdtarg : gdb_stdtargerr); - ret = length; + { + ui_file *file = target_fd == 1 ? gdb_stdtarg : gdb_stdtargerr; + file->write ((char *) buffer, length); + file->flush (); + ret = length; + } break; default: ret = write (fd, buffer, length); @@ -1293,15 +1295,15 @@ } void -initialize_remote_fileio (struct cmd_list_element *remote_set_cmdlist, - struct cmd_list_element *remote_show_cmdlist) +initialize_remote_fileio (struct cmd_list_element **remote_set_cmdlist, + struct cmd_list_element **remote_show_cmdlist) { add_cmd ("system-call-allowed", no_class, set_system_call_allowed, _("Set if the host system(3) call is allowed for the target."), - &remote_set_cmdlist); + remote_set_cmdlist); add_cmd ("system-call-allowed", no_class, show_system_call_allowed, _("Show if the host system(3) call is allowed for the target."), - &remote_show_cmdlist); + remote_show_cmdlist); } diff -Nru gdb-9.1/gdb/remote-fileio.h gdb-10.2/gdb/remote-fileio.h --- gdb-9.1/gdb/remote-fileio.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/remote-fileio.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Remote File-I/O communications - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -37,8 +37,8 @@ /* Called from _initialize_remote (). */ extern void initialize_remote_fileio ( - struct cmd_list_element *remote_set_cmdlist, - struct cmd_list_element *remote_show_cmdlist); + struct cmd_list_element **remote_set_cmdlist, + struct cmd_list_element **remote_show_cmdlist); /* Unpack a struct fio_stat. */ extern void remote_fileio_to_host_stat (struct fio_stat *fst, diff -Nru gdb-9.1/gdb/remote.h gdb-10.2/gdb/remote.h --- gdb-9.1/gdb/remote.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/remote.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Remote target communications for serial-line targets in custom GDB protocol - Copyright (C) 1999-2020 Free Software Foundation, Inc. + Copyright (C) 1999-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/remote-notif.c gdb-10.2/gdb/remote-notif.c --- gdb-9.1/gdb/remote-notif.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/remote-notif.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Remote notification in GDB protocol - Copyright (C) 1988-2020 Free Software Foundation, Inc. + Copyright (C) 1988-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -35,11 +35,12 @@ #include "remote.h" #include "remote-notif.h" #include "observable.h" -#include "event-loop.h" +#include "gdbsupport/event-loop.h" #include "target.h" #include "inferior.h" #include "infrun.h" #include "gdbcmd.h" +#include "async-event.h" bool notif_debug = false; @@ -237,8 +238,9 @@ delete pending_event[i]; } +void _initialize_notif (); void -_initialize_notif (void) +_initialize_notif () { add_setshow_boolean_cmd ("notification", no_class, ¬if_debug, _("\ diff -Nru gdb-9.1/gdb/remote-notif.h gdb-10.2/gdb/remote-notif.h --- gdb-9.1/gdb/remote-notif.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/remote-notif.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Remote notification in GDB protocol - Copyright (C) 1988-2020 Free Software Foundation, Inc. + Copyright (C) 1988-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/remote-sim.c gdb-10.2/gdb/remote-sim.c --- gdb-9.1/gdb/remote-sim.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/remote-sim.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Generic remote debugging interface for simulators. - Copyright (C) 1993-2020 Free Software Foundation, Inc. + Copyright (C) 1993-2021 Free Software Foundation, Inc. Contributed by Cygnus Support. Steve Chamberlain (sac@cygnus.com). @@ -74,6 +74,44 @@ sim_* are the interface to the simulator (see remote-sim.h). gdbsim_* are stuff which is internal to gdb. */ +/* Value of the next pid to allocate for an inferior. As indicated + elsewhere, its initial value is somewhat arbitrary; it's critical + though that it's not zero or negative. */ +static int next_pid; +#define INITIAL_PID 42000 + +/* Simulator-specific, per-inferior state. */ +struct sim_inferior_data { + explicit sim_inferior_data (SIM_DESC desc) + : gdbsim_desc (desc), + remote_sim_ptid (next_pid, 0, next_pid) + { + gdb_assert (remote_sim_ptid != null_ptid); + ++next_pid; + } + + ~sim_inferior_data (); + + /* Flag which indicates whether or not the program has been loaded. */ + int program_loaded = 0; + + /* Simulator descriptor for this inferior. */ + SIM_DESC gdbsim_desc; + + /* This is the ptid we use for this particular simulator instance. Its + value is somewhat arbitrary, as the simulator target don't have a + notion of tasks or threads, but we need something non-null to place + in inferior_ptid. For simulators which permit multiple instances, + we also need a unique identifier to use for each inferior. */ + ptid_t remote_sim_ptid; + + /* Signal with which to resume. */ + enum gdb_signal resume_siggnal = GDB_SIGNAL_0; + + /* Flag which indicates whether resume should step or not. */ + int resume_step = 0; +}; + static const target_info gdbsim_target_info = { "sim", N_("simulator"), @@ -126,47 +164,16 @@ bool has_all_memory () override; bool has_memory () override; + +private: + sim_inferior_data *get_inferior_data_by_ptid (ptid_t ptid, + int sim_instance_needed); + void resume_one_inferior (inferior *inf, bool step, gdb_signal siggnal); + void close_one_inferior (inferior *inf); }; static struct gdbsim_target gdbsim_ops; -/* Value of the next pid to allocate for an inferior. As indicated - elsewhere, its initial value is somewhat arbitrary; it's critical - though that it's not zero or negative. */ -static int next_pid; -#define INITIAL_PID 42000 - -/* Simulator-specific, per-inferior state. */ -struct sim_inferior_data { - explicit sim_inferior_data (SIM_DESC desc) - : gdbsim_desc (desc), - remote_sim_ptid (next_pid, 0, next_pid) - { - ++next_pid; - } - - ~sim_inferior_data (); - - /* Flag which indicates whether or not the program has been loaded. */ - int program_loaded = 0; - - /* Simulator descriptor for this inferior. */ - SIM_DESC gdbsim_desc; - - /* This is the ptid we use for this particular simulator instance. Its - value is somewhat arbitrary, as the simulator target don't have a - notion of tasks or threads, but we need something non-null to place - in inferior_ptid. For simulators which permit multiple instances, - we also need a unique identifier to use for each inferior. */ - ptid_t remote_sim_ptid; - - /* Signal with which to resume. */ - enum gdb_signal resume_siggnal = GDB_SIGNAL_0; - - /* Flag which indicates whether resume should step or not. */ - int resume_step = 0; -}; - static inferior_key<sim_inferior_data> sim_inferior_data_key; /* Flag indicating the "open" status of this module. It's set to 1 @@ -183,21 +190,6 @@ static host_callback gdb_callback; static int callbacks_initialized = 0; -/* Callback for iterate_over_inferiors. It checks to see if the sim - descriptor passed via ARG is the same as that for the inferior - designated by INF. Return true if so; false otherwise. */ - -static int -check_for_duplicate_sim_descriptor (struct inferior *inf, void *arg) -{ - struct sim_inferior_data *sim_data; - SIM_DESC new_sim_desc = (SIM_DESC) arg; - - sim_data = sim_inferior_data_key.get (inf); - - return (sim_data != NULL && sim_data->gdbsim_desc == new_sim_desc); -} - /* Flags indicating whether or not a sim instance is needed. One of these flags should be passed to get_sim_inferior_data(). */ @@ -219,27 +211,33 @@ if (sim_instance_needed == SIM_INSTANCE_NEEDED && (sim_data == NULL || sim_data->gdbsim_desc == NULL)) { - struct inferior *idup; sim_desc = sim_open (SIM_OPEN_DEBUG, &gdb_callback, exec_bfd, sim_argv); if (sim_desc == NULL) error (_("Unable to create simulator instance for inferior %d."), inf->num); - idup = iterate_over_inferiors (check_for_duplicate_sim_descriptor, - sim_desc); - if (idup != NULL) + /* Check if the sim descriptor is the same as that of another + inferior. */ + for (inferior *other_inf : all_inferiors ()) { - /* We don't close the descriptor due to the fact that it's - shared with some other inferior. If we were to close it, - that might needlessly muck up the other inferior. Of - course, it's possible that the damage has already been - done... Note that it *will* ultimately be closed during - cleanup of the other inferior. */ - sim_desc = NULL; - error ( - _("Inferior %d and inferior %d would have identical simulator state.\n" - "(This simulator does not support the running of more than one inferior.)"), - inf->num, idup->num); + sim_inferior_data *other_sim_data + = sim_inferior_data_key.get (other_inf); + + if (other_sim_data != NULL + && other_sim_data->gdbsim_desc == sim_desc) + { + /* We don't close the descriptor due to the fact that it's + shared with some other inferior. If we were to close it, + that might needlessly muck up the other inferior. Of + course, it's possible that the damage has already been + done... Note that it *will* ultimately be closed during + cleanup of the other inferior. */ + sim_desc = NULL; + error ( +_("Inferior %d and inferior %d would have identical simulator state.\n" + "(This simulator does not support the running of more than one inferior.)"), + inf->num, other_inf->num); + } } } @@ -262,8 +260,9 @@ inferior in question. Return NULL when no inferior is found or when ptid has a zero or negative pid component. */ -static struct sim_inferior_data * -get_sim_inferior_data_by_ptid (ptid_t ptid, int sim_instance_needed) +sim_inferior_data * +gdbsim_target::get_inferior_data_by_ptid (ptid_t ptid, + int sim_instance_needed) { struct inferior *inf; int pid = ptid.pid (); @@ -271,7 +270,7 @@ if (pid <= 0) return NULL; - inf = find_inferior_pid (pid); + inf = find_inferior_pid (this, pid); if (inf) return get_sim_inferior_data (inf, sim_instance_needed); @@ -352,7 +351,7 @@ static int gdb_os_write_stdout (host_callback *p, const char *buf, int len) { - ui_file_write (gdb_stdtarg, buf, len); + gdb_stdtarg->write (buf, len); return len; } @@ -361,7 +360,7 @@ static void gdb_os_flush_stdout (host_callback *p) { - ui_file_flush (gdb_stdtarg); + gdb_stdtarg->flush (); } /* GDB version of os_write_stderr callback. */ @@ -376,7 +375,7 @@ { b[0] = buf[i]; b[1] = 0; - ui_file_puts (gdb_stdtargerr, b); + gdb_stdtargerr->puts (b); } return len; } @@ -386,7 +385,7 @@ static void gdb_os_flush_stderr (host_callback *p) { - ui_file_flush (gdb_stdtargerr); + gdb_stdtargerr->flush (); } /* GDB version of printf_filtered callback. */ @@ -441,7 +440,7 @@ gdbsim_target::fetch_registers (struct regcache *regcache, int regno) { struct gdbarch *gdbarch = regcache->arch (); - struct inferior *inf = find_inferior_ptid (regcache->ptid ()); + struct inferior *inf = find_inferior_ptid (this, regcache->ptid ()); struct sim_inferior_data *sim_data = get_sim_inferior_data (inf, SIM_INSTANCE_NEEDED); @@ -510,7 +509,7 @@ gdbsim_target::store_registers (struct regcache *regcache, int regno) { struct gdbarch *gdbarch = regcache->arch (); - struct inferior *inf = find_inferior_ptid (regcache->ptid ()); + struct inferior *inf = find_inferior_ptid (this, regcache->ptid ()); struct sim_inferior_data *sim_data = get_sim_inferior_data (inf, SIM_INSTANCE_NEEDED); @@ -654,9 +653,10 @@ != SIM_RC_OK) error (_("Unable to create sim inferior.")); - inferior_ptid = sim_data->remote_sim_ptid; - inferior_appeared (current_inferior (), inferior_ptid.pid ()); - add_thread_silent (inferior_ptid); + inferior_appeared (current_inferior (), + sim_data->remote_sim_ptid.pid ()); + thread_info *thr = add_thread_silent (this, sim_data->remote_sim_ptid); + switch_to_thread (thr); insert_breakpoints (); /* Needed to get correct instruction in cache. */ @@ -762,16 +762,15 @@ /* There's nothing running after "target sim" or "load"; not until "run". */ - inferior_ptid = null_ptid; + switch_to_no_thread (); gdbsim_is_open = 1; } -/* Callback for iterate_over_inferiors. Called (indirectly) by - gdbsim_close(). */ +/* Helper for gdbsim_target::close. */ -static int -gdbsim_close_inferior (struct inferior *inf, void *arg) +void +gdbsim_target::close_one_inferior (inferior *inf) { struct sim_inferior_data *sim_data = sim_inferior_data_key.get (inf); if (sim_data != NULL) @@ -785,14 +784,12 @@ Thus we need to verify the existence of an inferior using the pid in question before setting inferior_ptid via switch_to_thread() or mourning the inferior. */ - if (find_inferior_ptid (ptid) != NULL) + if (find_inferior_ptid (this, ptid) != NULL) { - switch_to_thread (ptid); + switch_to_thread (this, ptid); generic_mourn_inferior (); } } - - return 0; } /* Close out all files and local state before this target loses control. */ @@ -803,7 +800,8 @@ if (remote_debug) fprintf_unfiltered (gdb_stdlog, "gdbsim_close\n"); - iterate_over_inferiors (gdbsim_close_inferior, NULL); + for (inferior *inf : all_inferiors (this)) + close_one_inferior (inf); if (sim_argv != NULL) { @@ -839,45 +837,30 @@ or to run free; SIGGNAL is the signal value (e.g. SIGINT) to be given to the target, or zero for no signal. */ -struct resume_data -{ - enum gdb_signal siggnal; - int step; -}; - -static int -gdbsim_resume_inferior (struct inferior *inf, void *arg) +void +gdbsim_target::resume_one_inferior (inferior *inf, bool step, + gdb_signal siggnal) { struct sim_inferior_data *sim_data = get_sim_inferior_data (inf, SIM_INSTANCE_NOT_NEEDED); - struct resume_data *rd = (struct resume_data *) arg; if (sim_data) { - sim_data->resume_siggnal = rd->siggnal; - sim_data->resume_step = rd->step; + sim_data->resume_siggnal = siggnal; + sim_data->resume_step = step; if (remote_debug) fprintf_unfiltered (gdb_stdlog, _("gdbsim_resume: pid %d, step %d, signal %d\n"), - inf->pid, rd->step, rd->siggnal); + inf->pid, step, siggnal); } - - /* When called from iterate_over_inferiors, a zero return causes the - iteration process to proceed until there are no more inferiors to - consider. */ - return 0; } void gdbsim_target::resume (ptid_t ptid, int step, enum gdb_signal siggnal) { - struct resume_data rd; struct sim_inferior_data *sim_data - = get_sim_inferior_data_by_ptid (ptid, SIM_INSTANCE_NOT_NEEDED); - - rd.siggnal = siggnal; - rd.step = step; + = get_inferior_data_by_ptid (ptid, SIM_INSTANCE_NOT_NEEDED); /* We don't access any sim_data members within this function. What's of interest is whether or not the call to @@ -887,9 +870,12 @@ either have multiple inferiors to resume or an error condition. */ if (sim_data) - gdbsim_resume_inferior (find_inferior_ptid (ptid), &rd); + resume_one_inferior (find_inferior_ptid (this, ptid), step, siggnal); else if (ptid == minus_one_ptid) - iterate_over_inferiors (gdbsim_resume_inferior, &rd); + { + for (inferior *inf : all_inferiors (this)) + resume_one_inferior (inf, step, siggnal); + } else error (_("The program is not being run.")); } @@ -903,30 +889,17 @@ For simulators that do not support this operation, just abort. */ -static int -gdbsim_interrupt_inferior (struct inferior *inf, void *arg) +void +gdbsim_target::interrupt () { - struct sim_inferior_data *sim_data - = get_sim_inferior_data (inf, SIM_INSTANCE_NEEDED); - - if (sim_data) + for (inferior *inf : all_inferiors ()) { - if (!sim_stop (sim_data->gdbsim_desc)) - { + sim_inferior_data *sim_data + = get_sim_inferior_data (inf, SIM_INSTANCE_NEEDED); + + if (sim_data != nullptr && !sim_stop (sim_data->gdbsim_desc)) quit (); - } } - - /* When called from iterate_over_inferiors, a zero return causes the - iteration process to proceed until there are no more inferiors to - consider. */ - return 0; -} - -void -gdbsim_target::interrupt () -{ - iterate_over_inferiors (gdbsim_interrupt_inferior, NULL); } /* GDB version of os_poll_quit callback. @@ -969,11 +942,10 @@ SIM_INSTANCE_NEEDED); else { - sim_data = get_sim_inferior_data_by_ptid (ptid, SIM_INSTANCE_NEEDED); + sim_data = get_inferior_data_by_ptid (ptid, SIM_INSTANCE_NEEDED); if (sim_data == NULL) error (_("Unable to wait for pid %d. Inferior not found."), ptid.pid ()); - inferior_ptid = ptid; } if (remote_debug) @@ -1029,7 +1001,7 @@ break; } - return inferior_ptid; + return sim_data->remote_sim_ptid; } /* Get ready to modify the registers array. On machines which store @@ -1248,7 +1220,7 @@ gdbsim_target::thread_alive (ptid_t ptid) { struct sim_inferior_data *sim_data - = get_sim_inferior_data_by_ptid (ptid, SIM_INSTANCE_NOT_NEEDED); + = get_inferior_data_by_ptid (ptid, SIM_INSTANCE_NOT_NEEDED); if (sim_data == NULL) return false; @@ -1294,8 +1266,9 @@ return true; } +void _initialize_remote_sim (); void -_initialize_remote_sim (void) +_initialize_remote_sim () { struct cmd_list_element *c; diff -Nru gdb-9.1/gdb/reply_mig_hack.awk gdb-10.2/gdb/reply_mig_hack.awk --- gdb-9.1/gdb/reply_mig_hack.awk 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/reply_mig_hack.awk 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # Reply server mig-output massager # -# Copyright (C) 1995-2020 Free Software Foundation, Inc. +# Copyright (C) 1995-2021 Free Software Foundation, Inc. # # Written by Miles Bader <miles@gnu.ai.mit.edu> # @@ -130,7 +130,8 @@ # two arguments. # This is possibly bogus, but easier than supplying bogus values for all # the other args (we can't just pass 0 for them, as they might not be scalar). - print "\t OutP->RetCode = (*(kern_return_t (*)(mach_port_t, kern_return_t)) " user_function_name ") (In0P->Head.msgh_request_port, In0P->" arg_name[0] ");"; + print "\t void * __error_call = " user_function_name ";"; + print "\t OutP->RetCode = (*(kern_return_t (*)(mach_port_t, kern_return_t)) __error_call) (In0P->Head.msgh_request_port, In0P->" arg_name[0] ");"; print "\t return;"; print "\t }"; print ""; diff -Nru gdb-9.1/gdb/reverse.c gdb-10.2/gdb/reverse.c --- gdb-9.1/gdb/reverse.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/reverse.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Reverse execution and reverse debugging. - Copyright (C) 2006-2020 Free Software Foundation, Inc. + Copyright (C) 2006-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -322,14 +322,15 @@ } } +void _initialize_reverse (); void -_initialize_reverse (void) +_initialize_reverse () { add_com ("reverse-step", class_run, reverse_step, _("\ Step program backward until it reaches the beginning of another source line.\n\ Argument N means do this N times (or till program stops for another reason).") ); - add_com_alias ("rs", "reverse-step", class_alias, 1); + add_com_alias ("rs", "reverse-step", class_run, 1); add_com ("reverse-next", class_run, reverse_next, _("\ Step program backward, proceeding through subroutine calls.\n\ @@ -337,26 +338,26 @@ when they do, the call is treated as one instruction.\n\ Argument N means do this N times (or till program stops for another reason).") ); - add_com_alias ("rn", "reverse-next", class_alias, 1); + add_com_alias ("rn", "reverse-next", class_run, 1); add_com ("reverse-stepi", class_run, reverse_stepi, _("\ Step backward exactly one instruction.\n\ Argument N means do this N times (or till program stops for another reason).") ); - add_com_alias ("rsi", "reverse-stepi", class_alias, 0); + add_com_alias ("rsi", "reverse-stepi", class_run, 0); add_com ("reverse-nexti", class_run, reverse_nexti, _("\ Step backward one instruction, but proceed through called subroutines.\n\ Argument N means do this N times (or till program stops for another reason).") ); - add_com_alias ("rni", "reverse-nexti", class_alias, 0); + add_com_alias ("rni", "reverse-nexti", class_run, 0); add_com ("reverse-continue", class_run, reverse_continue, _("\ Continue program being debugged but run it in reverse.\n\ If proceeding from breakpoint, a number N may be used as an argument,\n\ which means to set the ignore count of that breakpoint to N - 1 (so that\n\ the breakpoint won't break until the Nth time it is reached).")); - add_com_alias ("rc", "reverse-continue", class_alias, 0); + add_com_alias ("rc", "reverse-continue", class_run, 0); add_com ("reverse-finish", class_run, reverse_finish, _("\ Execute backward until just before selected stack frame is called.")); diff -Nru gdb-9.1/gdb/riscv-fbsd-nat.c gdb-10.2/gdb/riscv-fbsd-nat.c --- gdb-9.1/gdb/riscv-fbsd-nat.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/riscv-fbsd-nat.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Native-dependent code for FreeBSD/riscv. - Copyright (C) 2018-2020 Free Software Foundation, Inc. + Copyright (C) 2018-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -128,8 +128,9 @@ } } +void _initialize_riscv_fbsd_nat (); void -_initialize_riscv_fbsd_nat (void) +_initialize_riscv_fbsd_nat () { add_inf_child_target (&the_riscv_fbsd_nat_target); } diff -Nru gdb-9.1/gdb/riscv-fbsd-tdep.c gdb-10.2/gdb/riscv-fbsd-tdep.c --- gdb-9.1/gdb/riscv-fbsd-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/riscv-fbsd-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Target-dependent code for FreeBSD on RISC-V processors. - Copyright (C) 2018-2020 Free Software Foundation, Inc. + Copyright (C) 2018-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -26,6 +26,7 @@ #include "trad-frame.h" #include "tramp-frame.h" #include "gdbarch.h" +#include "inferior.h" /* Register maps. */ @@ -80,7 +81,7 @@ regcache_supply_regset, regcache_collect_regset }; -/* Implement the "regset_from_core_section" gdbarch method. */ +/* Implement the "iterate_over_regset_sections" gdbarch method. */ static void riscv_fbsd_iterate_over_regset_sections (struct gdbarch *gdbarch, @@ -183,7 +184,8 @@ { struct regcache *regcache; - regcache = get_thread_arch_regcache (ptid, gdbarch); + regcache = get_thread_arch_regcache (current_inferior ()->process_target (), + ptid, gdbarch); target_fetch_registers (regcache, RISCV_TP_REGNUM); @@ -223,8 +225,9 @@ riscv_fbsd_get_thread_local_address); } +void _initialize_riscv_fbsd_tdep (); void -_initialize_riscv_fbsd_tdep (void) +_initialize_riscv_fbsd_tdep () { gdbarch_register_osabi (bfd_arch_riscv, 0, GDB_OSABI_FREEBSD, riscv_fbsd_init_abi); diff -Nru gdb-9.1/gdb/riscv-fbsd-tdep.h gdb-10.2/gdb/riscv-fbsd-tdep.h --- gdb-9.1/gdb/riscv-fbsd-tdep.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/riscv-fbsd-tdep.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* FreeBSD/riscv target support, prototypes. - Copyright (C) 2018-2020 Free Software Foundation, Inc. + Copyright (C) 2018-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/riscv-linux-nat.c gdb-10.2/gdb/riscv-linux-nat.c --- gdb-9.1/gdb/riscv-linux-nat.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/riscv-linux-nat.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Native-dependent code for GNU/Linux RISC-V. - Copyright (C) 2018-2020 Free Software Foundation, Inc. + Copyright (C) 2018-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -22,12 +22,18 @@ #include "linux-nat.h" #include "riscv-tdep.h" #include "inferior.h" -#include "target-descriptions.h" #include "elf/common.h" +#include "nat/riscv-linux-tdesc.h" + #include <sys/ptrace.h> +/* Work around glibc header breakage causing ELF_NFPREG not to be usable. */ +#ifndef NFPREG +# define NFPREG 33 +#endif + /* RISC-V Linux native additions to the default linux support. */ class riscv_linux_nat_target final : public linux_nat_target @@ -88,21 +94,35 @@ supply_fpregset_regnum (struct regcache *regcache, const prfpregset_t *fpregs, int regnum) { + int flen = register_size (regcache->arch (), RISCV_FIRST_FP_REGNUM); + union + { + const prfpregset_t *fpregs; + const gdb_byte *buf; + } + fpbuf = { .fpregs = fpregs }; int i; if (regnum == -1) { /* We only support the FP registers and FCSR here. */ - for (i = RISCV_FIRST_FP_REGNUM; i <= RISCV_LAST_FP_REGNUM; i++) - regcache->raw_supply (i, &fpregs->__d.__f[i - RISCV_FIRST_FP_REGNUM]); + for (i = RISCV_FIRST_FP_REGNUM; + i <= RISCV_LAST_FP_REGNUM; + i++, fpbuf.buf += flen) + regcache->raw_supply (i, fpbuf.buf); - regcache->raw_supply (RISCV_CSR_FCSR_REGNUM, &fpregs->__d.__fcsr); + regcache->raw_supply (RISCV_CSR_FCSR_REGNUM, fpbuf.buf); } else if (regnum >= RISCV_FIRST_FP_REGNUM && regnum <= RISCV_LAST_FP_REGNUM) - regcache->raw_supply (regnum, - &fpregs->__d.__f[regnum - RISCV_FIRST_FP_REGNUM]); + { + fpbuf.buf += flen * (regnum - RISCV_FIRST_FP_REGNUM); + regcache->raw_supply (regnum, fpbuf.buf); + } else if (regnum == RISCV_CSR_FCSR_REGNUM) - regcache->raw_supply (RISCV_CSR_FCSR_REGNUM, &fpregs->__d.__fcsr); + { + fpbuf.buf += flen * (RISCV_LAST_FP_REGNUM - RISCV_FIRST_FP_REGNUM + 1); + regcache->raw_supply (RISCV_CSR_FCSR_REGNUM, fpbuf.buf); + } } /* Copy all floating point registers from regset FPREGS into REGCACHE. */ @@ -145,19 +165,35 @@ fill_fpregset (const struct regcache *regcache, prfpregset_t *fpregs, int regnum) { + int flen = register_size (regcache->arch (), RISCV_FIRST_FP_REGNUM); + union + { + prfpregset_t *fpregs; + gdb_byte *buf; + } + fpbuf = { .fpregs = fpregs }; + int i; + if (regnum == -1) { /* We only support the FP registers and FCSR here. */ - for (int i = RISCV_FIRST_FP_REGNUM; i <= RISCV_LAST_FP_REGNUM; i++) - regcache->raw_collect (i, &fpregs->__d.__f[i - RISCV_FIRST_FP_REGNUM]); + for (i = RISCV_FIRST_FP_REGNUM; + i <= RISCV_LAST_FP_REGNUM; + i++, fpbuf.buf += flen) + regcache->raw_collect (i, fpbuf.buf); - regcache->raw_collect (RISCV_CSR_FCSR_REGNUM, &fpregs->__d.__fcsr); + regcache->raw_collect (RISCV_CSR_FCSR_REGNUM, fpbuf.buf); } else if (regnum >= RISCV_FIRST_FP_REGNUM && regnum <= RISCV_LAST_FP_REGNUM) - regcache->raw_collect (regnum, - &fpregs->__d.__f[regnum - RISCV_FIRST_FP_REGNUM]); + { + fpbuf.buf += flen * (regnum - RISCV_FIRST_FP_REGNUM); + regcache->raw_collect (regnum, fpbuf.buf); + } else if (regnum == RISCV_CSR_FCSR_REGNUM) - regcache->raw_collect (RISCV_CSR_FCSR_REGNUM, &fpregs->__d.__fcsr); + { + fpbuf.buf += flen * (RISCV_LAST_FP_REGNUM - RISCV_FIRST_FP_REGNUM + 1); + regcache->raw_collect (RISCV_CSR_FCSR_REGNUM, fpbuf.buf); + } } /* Return a target description for the current target. */ @@ -165,32 +201,9 @@ const struct target_desc * riscv_linux_nat_target::read_description () { - struct riscv_gdbarch_features features; - struct iovec iov; - elf_fpregset_t regs; - int tid; - - /* Figuring out xlen is easy. */ - features.xlen = sizeof (elf_greg_t); - - tid = inferior_ptid.lwp (); - - iov.iov_base = ®s; - iov.iov_len = sizeof (regs); - - /* Can we fetch the f-registers? */ - if (ptrace (PTRACE_GETREGSET, tid, NT_FPREGSET, - (PTRACE_TYPE_ARG3) &iov) == -1) - features.flen = 0; /* No f-registers. */ - else - { - /* TODO: We need a way to figure out the actual length of the - f-registers. We could have 64-bit x-registers, with 32-bit - f-registers. For now, just assumed xlen and flen match. */ - features.flen = features.xlen; - } - - return riscv_create_target_description (features); + const struct riscv_gdbarch_features features + = riscv_linux_read_features (inferior_ptid.lwp ()); + return riscv_lookup_target_description (features); } /* Fetch REGNUM (or all registers if REGNUM == -1) from the target @@ -228,7 +241,9 @@ elf_fpregset_t regs; iov.iov_base = ®s; - iov.iov_len = sizeof (regs); + iov.iov_len = ELF_NFPREG * register_size (regcache->arch (), + RISCV_FIRST_FP_REGNUM); + gdb_assert (iov.iov_len <= sizeof (regs)); if (ptrace (PTRACE_GETREGSET, tid, NT_FPREGSET, (PTRACE_TYPE_ARG3) &iov) == -1) @@ -289,7 +304,9 @@ elf_fpregset_t regs; iov.iov_base = ®s; - iov.iov_len = sizeof (regs); + iov.iov_len = ELF_NFPREG * register_size (regcache->arch (), + RISCV_FIRST_FP_REGNUM); + gdb_assert (iov.iov_len <= sizeof (regs)); if (ptrace (PTRACE_GETREGSET, tid, NT_FPREGSET, (PTRACE_TYPE_ARG3) &iov) == -1) @@ -310,8 +327,9 @@ /* Initialize RISC-V Linux native support. */ +void _initialize_riscv_linux_nat (); void -_initialize_riscv_linux_nat (void) +_initialize_riscv_linux_nat () { /* Register the target. */ linux_target = &the_riscv_linux_nat_target; diff -Nru gdb-9.1/gdb/riscv-linux-tdep.c gdb-10.2/gdb/riscv-linux-tdep.c --- gdb-9.1/gdb/riscv-linux-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/riscv-linux-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Target-dependent code for GNU/Linux on RISC-V processors. - Copyright (C) 2018-2020 Free Software Foundation, Inc. + Copyright (C) 2018-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -186,8 +186,9 @@ /* Initialize RISC-V Linux target support. */ +void _initialize_riscv_linux_tdep (); void -_initialize_riscv_linux_tdep (void) +_initialize_riscv_linux_tdep () { gdbarch_register_osabi (bfd_arch_riscv, 0, GDB_OSABI_LINUX, riscv_linux_init_abi); diff -Nru gdb-9.1/gdb/riscv-ravenscar-thread.c gdb-10.2/gdb/riscv-ravenscar-thread.c --- gdb-9.1/gdb/riscv-ravenscar-thread.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/riscv-ravenscar-thread.c 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,140 @@ +/* Ravenscar RISC-V target support. + + Copyright (C) 2019-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "defs.h" +#include "gdbarch.h" +#include "gdbcore.h" +#include "regcache.h" +#include "riscv-tdep.h" +#include "inferior.h" +#include "ravenscar-thread.h" +#include "riscv-ravenscar-thread.h" + +struct riscv_ravenscar_ops : public ravenscar_arch_ops +{ + void fetch_registers (struct regcache *regcache, int regnum) override; + void store_registers (struct regcache *regcache, int regnum) override; + +private: + + /* Return the offset of the register in the context buffer. */ + int register_offset (struct gdbarch *arch, int regnum); +}; + +int +riscv_ravenscar_ops::register_offset (struct gdbarch *arch, int regnum) +{ + int offset; + if (regnum == RISCV_RA_REGNUM || regnum == RISCV_PC_REGNUM) + offset = 0; + else if (regnum == RISCV_SP_REGNUM) + offset = 1; + else if (regnum == RISCV_ZERO_REGNUM + 8) /* S0 */ + offset = 2; + else if (regnum == RISCV_ZERO_REGNUM + 9) /* S1 */ + offset = 3; + else if (regnum >= RISCV_ZERO_REGNUM + 19 + && regnum <= RISCV_ZERO_REGNUM + 27) /* S2..S11 */ + offset = regnum - (RISCV_ZERO_REGNUM + 19) + 4; + else if (regnum >= RISCV_FIRST_FP_REGNUM + && regnum <= RISCV_FIRST_FP_REGNUM + 11) + offset = regnum - RISCV_FIRST_FP_REGNUM + 14; /* FS0..FS11 */ + else + { + /* Not saved. */ + return -1; + } + + int size = register_size (arch, regnum); + return offset * size; +} + +/* Supply register REGNUM, which has been saved on REGISTER_ADDR, to the + regcache. */ + +static void +supply_register_at_address (struct regcache *regcache, int regnum, + CORE_ADDR register_addr) +{ + struct gdbarch *gdbarch = regcache->arch (); + int buf_size = register_size (gdbarch, regnum); + gdb_byte *buf; + + buf = (gdb_byte *) alloca (buf_size); + read_memory (register_addr, buf, buf_size); + regcache->raw_supply (regnum, buf); +} + +void +riscv_ravenscar_ops::fetch_registers (struct regcache *regcache, int regnum) +{ + struct gdbarch *gdbarch = regcache->arch (); + const int num_regs = gdbarch_num_regs (gdbarch); + int current_regnum; + CORE_ADDR current_address; + CORE_ADDR thread_descriptor_address; + + /* The tid is the thread_id field, which is a pointer to the thread. */ + thread_descriptor_address = (CORE_ADDR) inferior_ptid.tid (); + + /* Read registers. */ + for (current_regnum = 0; current_regnum < num_regs; current_regnum++) + { + int offset = register_offset (gdbarch, current_regnum); + + if (offset != -1) + { + current_address = thread_descriptor_address + offset; + supply_register_at_address (regcache, current_regnum, + current_address); + } + } +} + +void +riscv_ravenscar_ops::store_registers (struct regcache *regcache, int regnum) +{ + struct gdbarch *gdbarch = regcache->arch (); + int buf_size = register_size (gdbarch, regnum); + gdb_byte buf[buf_size]; + CORE_ADDR register_address; + + int offset = register_offset (gdbarch, regnum); + if (offset != -1) + { + register_address = inferior_ptid.tid () + offset; + + regcache->raw_collect (regnum, buf); + write_memory (register_address, + buf, + buf_size); + } +} + +/* The ravenscar_arch_ops vector for most RISC-V targets. */ + +static struct riscv_ravenscar_ops riscv_ravenscar_ops; + +/* Register riscv_ravenscar_ops in GDBARCH. */ + +void +register_riscv_ravenscar_ops (struct gdbarch *gdbarch) +{ + set_gdbarch_ravenscar_ops (gdbarch, &riscv_ravenscar_ops); +} diff -Nru gdb-9.1/gdb/riscv-ravenscar-thread.h gdb-10.2/gdb/riscv-ravenscar-thread.h --- gdb-9.1/gdb/riscv-ravenscar-thread.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/riscv-ravenscar-thread.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,27 @@ +/* Ravenscar RISC-V target support. + + Copyright (C) 2019-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef RISCV_RAVENSCAR_THREAD_H +#define RISCV_RAVENSCAR_THREAD_H + +struct gdbarch; + +extern void register_riscv_ravenscar_ops (struct gdbarch *gdbarch); + +#endif diff -Nru gdb-9.1/gdb/riscv-tdep.c gdb-10.2/gdb/riscv-tdep.c --- gdb-9.1/gdb/riscv-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/riscv-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for the RISC-V architecture, for GDB. - Copyright (C) 2018-2020 Free Software Foundation, Inc. + Copyright (C) 2018-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -47,7 +47,7 @@ #include "floatformat.h" #include "remote.h" #include "target-descriptions.h" -#include "dwarf2-frame.h" +#include "dwarf2/frame.h" #include "user-regs.h" #include "valprint.h" #include "gdbsupport/common-defs.h" @@ -56,6 +56,7 @@ #include "observable.h" #include "prologue-value.h" #include "arch/riscv.h" +#include "riscv-ravenscar-thread.h" /* The stack must be 16-byte aligned. */ #define SP_ALIGNMENT 16 @@ -100,6 +101,66 @@ static reggroup *csr_reggroup = NULL; +/* Callback function for user_reg_add. */ + +static struct value * +value_of_riscv_user_reg (struct frame_info *frame, const void *baton) +{ + const int *reg_p = (const int *) baton; + return value_of_register (*reg_p, frame); +} + +/* Information about a register alias that needs to be set up for this + target. These are collected when the target's XML description is + analysed, and then processed later, once the gdbarch has been created. */ + +class riscv_pending_register_alias +{ +public: + /* Constructor. */ + + riscv_pending_register_alias (const char *name, const void *baton) + : m_name (name), + m_baton (baton) + { /* Nothing. */ } + + /* Convert this into a user register for GDBARCH. */ + + void create (struct gdbarch *gdbarch) const + { + user_reg_add (gdbarch, m_name, value_of_riscv_user_reg, m_baton); + } + +private: + /* The name for this alias. */ + const char *m_name; + + /* The baton value for passing to user_reg_add. This must point to some + data that will live for at least as long as the gdbarch object to + which the user register is attached. */ + const void *m_baton; +}; + +/* Registers in the RISCV_REGISTER_FEATURE lists below are either optional, + or required. For example the $pc register is always going to be a + required register, you can't do much debugging without that. In + contrast, most of the CSRs are optional, GDB doesn't require them in + order to have a useful debug session. This enum models the difference + between these register types. */ + +enum riscv_register_required_status +{ + /* This register is optional within this feature. */ + RISCV_REG_OPTIONAL, + + /* This register is required within this feature. */ + RISCV_REG_REQUIRED, + + /* This register is required, the register must either be in this + feature, or it could appear within the CSR feature. */ + RISCV_REG_REQUIRED_MAYBE_CSR +}; + /* A set of registers that we expect to find in a tdesc_feature. These are use in RISCV_GDBARCH_INIT when processing the target description. */ @@ -114,60 +175,118 @@ /* List of names for this register. The first name in this list is the preferred name, the name GDB should use when describing this register. */ - std::vector <const char *> names; + std::vector<const char *> names; - /* When true this register is required in this feature set. */ - bool required_p; + /* Is this register required within this feature? In some cases the + register could be required, but might also be in the CSR feature. */ + riscv_register_required_status required; + + /* Look in FEATURE for a register with a name from this classes names + list. If the register is found then register its number with + TDESC_DATA and add all its aliases to the ALIASES list. REG_SET is + used to help create the aliases. */ + bool check (struct tdesc_arch_data *tdesc_data, + const struct tdesc_feature *feature, + const struct riscv_register_feature *reg_set, + std::vector<riscv_pending_register_alias> *aliases) const; }; /* The name for this feature. This is the name used to find this feature within the target description. */ const char *name; + /* For x-regs and f-regs we always force GDB to use the first name from + the REGISTERS.NAMES vector, it is therefore important that we create + user-register aliases for all of the remaining names at indexes 1+ in + the names vector. + + For CSRs we take a different approach, we prefer whatever name the + target description uses, in this case we want to create user-register + aliases for any other names that aren't the target description + provided name. + + When this flag is true we are dealing with the first case, and when + this is false we are dealing with the latter. */ + bool prefer_first_name; + /* List of all the registers that we expect that we might find in this register set. */ - std::vector <struct register_info> registers; + std::vector<struct register_info> registers; }; +/* See description in the class declaration above. */ + +bool +riscv_register_feature::register_info::check + (struct tdesc_arch_data *tdesc_data, + const struct tdesc_feature *feature, + const struct riscv_register_feature *reg_set, + std::vector<riscv_pending_register_alias> *aliases) const +{ + for (const char *name : this->names) + { + bool found = tdesc_numbered_register (feature, tdesc_data, + this->regnum, name); + if (found) + { + /* We know that the target description mentions this + register. In RISCV_REGISTER_NAME we ensure that GDB + always uses the first name for each register, so here we + add aliases for all of the remaining names. */ + bool prefer_first_name = reg_set->prefer_first_name; + int start_index = prefer_first_name ? 1 : 0; + for (int i = start_index; i < this->names.size (); ++i) + { + const char *alias = this->names[i]; + if (alias == name && !prefer_first_name) + continue; + aliases->emplace_back (alias, (void *) &this->regnum); + } + return true; + } + } + return false; +} + /* The general x-registers feature set. */ static const struct riscv_register_feature riscv_xreg_feature = { - "org.gnu.gdb.riscv.cpu", + "org.gnu.gdb.riscv.cpu", true, { - { RISCV_ZERO_REGNUM + 0, { "zero", "x0" }, true }, - { RISCV_ZERO_REGNUM + 1, { "ra", "x1" }, true }, - { RISCV_ZERO_REGNUM + 2, { "sp", "x2" }, true }, - { RISCV_ZERO_REGNUM + 3, { "gp", "x3" }, true }, - { RISCV_ZERO_REGNUM + 4, { "tp", "x4" }, true }, - { RISCV_ZERO_REGNUM + 5, { "t0", "x5" }, true }, - { RISCV_ZERO_REGNUM + 6, { "t1", "x6" }, true }, - { RISCV_ZERO_REGNUM + 7, { "t2", "x7" }, true }, - { RISCV_ZERO_REGNUM + 8, { "fp", "x8", "s0" }, true }, - { RISCV_ZERO_REGNUM + 9, { "s1", "x9" }, true }, - { RISCV_ZERO_REGNUM + 10, { "a0", "x10" }, true }, - { RISCV_ZERO_REGNUM + 11, { "a1", "x11" }, true }, - { RISCV_ZERO_REGNUM + 12, { "a2", "x12" }, true }, - { RISCV_ZERO_REGNUM + 13, { "a3", "x13" }, true }, - { RISCV_ZERO_REGNUM + 14, { "a4", "x14" }, true }, - { RISCV_ZERO_REGNUM + 15, { "a5", "x15" }, true }, - { RISCV_ZERO_REGNUM + 16, { "a6", "x16" }, true }, - { RISCV_ZERO_REGNUM + 17, { "a7", "x17" }, true }, - { RISCV_ZERO_REGNUM + 18, { "s2", "x18" }, true }, - { RISCV_ZERO_REGNUM + 19, { "s3", "x19" }, true }, - { RISCV_ZERO_REGNUM + 20, { "s4", "x20" }, true }, - { RISCV_ZERO_REGNUM + 21, { "s5", "x21" }, true }, - { RISCV_ZERO_REGNUM + 22, { "s6", "x22" }, true }, - { RISCV_ZERO_REGNUM + 23, { "s7", "x23" }, true }, - { RISCV_ZERO_REGNUM + 24, { "s8", "x24" }, true }, - { RISCV_ZERO_REGNUM + 25, { "s9", "x25" }, true }, - { RISCV_ZERO_REGNUM + 26, { "s10", "x26" }, true }, - { RISCV_ZERO_REGNUM + 27, { "s11", "x27" }, true }, - { RISCV_ZERO_REGNUM + 28, { "t3", "x28" }, true }, - { RISCV_ZERO_REGNUM + 29, { "t4", "x29" }, true }, - { RISCV_ZERO_REGNUM + 30, { "t5", "x30" }, true }, - { RISCV_ZERO_REGNUM + 31, { "t6", "x31" }, true }, - { RISCV_ZERO_REGNUM + 32, { "pc" }, true } + { RISCV_ZERO_REGNUM + 0, { "zero", "x0" }, RISCV_REG_REQUIRED }, + { RISCV_ZERO_REGNUM + 1, { "ra", "x1" }, RISCV_REG_REQUIRED }, + { RISCV_ZERO_REGNUM + 2, { "sp", "x2" }, RISCV_REG_REQUIRED }, + { RISCV_ZERO_REGNUM + 3, { "gp", "x3" }, RISCV_REG_REQUIRED }, + { RISCV_ZERO_REGNUM + 4, { "tp", "x4" }, RISCV_REG_REQUIRED }, + { RISCV_ZERO_REGNUM + 5, { "t0", "x5" }, RISCV_REG_REQUIRED }, + { RISCV_ZERO_REGNUM + 6, { "t1", "x6" }, RISCV_REG_REQUIRED }, + { RISCV_ZERO_REGNUM + 7, { "t2", "x7" }, RISCV_REG_REQUIRED }, + { RISCV_ZERO_REGNUM + 8, { "fp", "x8", "s0" }, RISCV_REG_REQUIRED }, + { RISCV_ZERO_REGNUM + 9, { "s1", "x9" }, RISCV_REG_REQUIRED }, + { RISCV_ZERO_REGNUM + 10, { "a0", "x10" }, RISCV_REG_REQUIRED }, + { RISCV_ZERO_REGNUM + 11, { "a1", "x11" }, RISCV_REG_REQUIRED }, + { RISCV_ZERO_REGNUM + 12, { "a2", "x12" }, RISCV_REG_REQUIRED }, + { RISCV_ZERO_REGNUM + 13, { "a3", "x13" }, RISCV_REG_REQUIRED }, + { RISCV_ZERO_REGNUM + 14, { "a4", "x14" }, RISCV_REG_REQUIRED }, + { RISCV_ZERO_REGNUM + 15, { "a5", "x15" }, RISCV_REG_REQUIRED }, + { RISCV_ZERO_REGNUM + 16, { "a6", "x16" }, RISCV_REG_REQUIRED }, + { RISCV_ZERO_REGNUM + 17, { "a7", "x17" }, RISCV_REG_REQUIRED }, + { RISCV_ZERO_REGNUM + 18, { "s2", "x18" }, RISCV_REG_REQUIRED }, + { RISCV_ZERO_REGNUM + 19, { "s3", "x19" }, RISCV_REG_REQUIRED }, + { RISCV_ZERO_REGNUM + 20, { "s4", "x20" }, RISCV_REG_REQUIRED }, + { RISCV_ZERO_REGNUM + 21, { "s5", "x21" }, RISCV_REG_REQUIRED }, + { RISCV_ZERO_REGNUM + 22, { "s6", "x22" }, RISCV_REG_REQUIRED }, + { RISCV_ZERO_REGNUM + 23, { "s7", "x23" }, RISCV_REG_REQUIRED }, + { RISCV_ZERO_REGNUM + 24, { "s8", "x24" }, RISCV_REG_REQUIRED }, + { RISCV_ZERO_REGNUM + 25, { "s9", "x25" }, RISCV_REG_REQUIRED }, + { RISCV_ZERO_REGNUM + 26, { "s10", "x26" }, RISCV_REG_REQUIRED }, + { RISCV_ZERO_REGNUM + 27, { "s11", "x27" }, RISCV_REG_REQUIRED }, + { RISCV_ZERO_REGNUM + 28, { "t3", "x28" }, RISCV_REG_REQUIRED }, + { RISCV_ZERO_REGNUM + 29, { "t4", "x29" }, RISCV_REG_REQUIRED }, + { RISCV_ZERO_REGNUM + 30, { "t5", "x30" }, RISCV_REG_REQUIRED }, + { RISCV_ZERO_REGNUM + 31, { "t6", "x31" }, RISCV_REG_REQUIRED }, + { RISCV_ZERO_REGNUM + 32, { "pc" }, RISCV_REG_REQUIRED } } }; @@ -175,44 +294,44 @@ static const struct riscv_register_feature riscv_freg_feature = { - "org.gnu.gdb.riscv.fpu", + "org.gnu.gdb.riscv.fpu", true, { - { RISCV_FIRST_FP_REGNUM + 0, { "ft0", "f0" }, true }, - { RISCV_FIRST_FP_REGNUM + 1, { "ft1", "f1" }, true }, - { RISCV_FIRST_FP_REGNUM + 2, { "ft2", "f2" }, true }, - { RISCV_FIRST_FP_REGNUM + 3, { "ft3", "f3" }, true }, - { RISCV_FIRST_FP_REGNUM + 4, { "ft4", "f4" }, true }, - { RISCV_FIRST_FP_REGNUM + 5, { "ft5", "f5" }, true }, - { RISCV_FIRST_FP_REGNUM + 6, { "ft6", "f6" }, true }, - { RISCV_FIRST_FP_REGNUM + 7, { "ft7", "f7" }, true }, - { RISCV_FIRST_FP_REGNUM + 8, { "fs0", "f8" }, true }, - { RISCV_FIRST_FP_REGNUM + 9, { "fs1", "f9" }, true }, - { RISCV_FIRST_FP_REGNUM + 10, { "fa0", "f10" }, true }, - { RISCV_FIRST_FP_REGNUM + 11, { "fa1", "f11" }, true }, - { RISCV_FIRST_FP_REGNUM + 12, { "fa2", "f12" }, true }, - { RISCV_FIRST_FP_REGNUM + 13, { "fa3", "f13" }, true }, - { RISCV_FIRST_FP_REGNUM + 14, { "fa4", "f14" }, true }, - { RISCV_FIRST_FP_REGNUM + 15, { "fa5", "f15" }, true }, - { RISCV_FIRST_FP_REGNUM + 16, { "fa6", "f16" }, true }, - { RISCV_FIRST_FP_REGNUM + 17, { "fa7", "f17" }, true }, - { RISCV_FIRST_FP_REGNUM + 18, { "fs2", "f18" }, true }, - { RISCV_FIRST_FP_REGNUM + 19, { "fs3", "f19" }, true }, - { RISCV_FIRST_FP_REGNUM + 20, { "fs4", "f20" }, true }, - { RISCV_FIRST_FP_REGNUM + 21, { "fs5", "f21" }, true }, - { RISCV_FIRST_FP_REGNUM + 22, { "fs6", "f22" }, true }, - { RISCV_FIRST_FP_REGNUM + 23, { "fs7", "f23" }, true }, - { RISCV_FIRST_FP_REGNUM + 24, { "fs8", "f24" }, true }, - { RISCV_FIRST_FP_REGNUM + 25, { "fs9", "f25" }, true }, - { RISCV_FIRST_FP_REGNUM + 26, { "fs10", "f26" }, true }, - { RISCV_FIRST_FP_REGNUM + 27, { "fs11", "f27" }, true }, - { RISCV_FIRST_FP_REGNUM + 28, { "ft8", "f28" }, true }, - { RISCV_FIRST_FP_REGNUM + 29, { "ft9", "f29" }, true }, - { RISCV_FIRST_FP_REGNUM + 30, { "ft10", "f30" }, true }, - { RISCV_FIRST_FP_REGNUM + 31, { "ft11", "f31" }, true }, - - { RISCV_CSR_FFLAGS_REGNUM, { "fflags" }, true }, - { RISCV_CSR_FRM_REGNUM, { "frm" }, true }, - { RISCV_CSR_FCSR_REGNUM, { "fcsr" }, true }, + { RISCV_FIRST_FP_REGNUM + 0, { "ft0", "f0" }, RISCV_REG_REQUIRED }, + { RISCV_FIRST_FP_REGNUM + 1, { "ft1", "f1" }, RISCV_REG_REQUIRED }, + { RISCV_FIRST_FP_REGNUM + 2, { "ft2", "f2" }, RISCV_REG_REQUIRED }, + { RISCV_FIRST_FP_REGNUM + 3, { "ft3", "f3" }, RISCV_REG_REQUIRED }, + { RISCV_FIRST_FP_REGNUM + 4, { "ft4", "f4" }, RISCV_REG_REQUIRED }, + { RISCV_FIRST_FP_REGNUM + 5, { "ft5", "f5" }, RISCV_REG_REQUIRED }, + { RISCV_FIRST_FP_REGNUM + 6, { "ft6", "f6" }, RISCV_REG_REQUIRED }, + { RISCV_FIRST_FP_REGNUM + 7, { "ft7", "f7" }, RISCV_REG_REQUIRED }, + { RISCV_FIRST_FP_REGNUM + 8, { "fs0", "f8" }, RISCV_REG_REQUIRED }, + { RISCV_FIRST_FP_REGNUM + 9, { "fs1", "f9" }, RISCV_REG_REQUIRED }, + { RISCV_FIRST_FP_REGNUM + 10, { "fa0", "f10" }, RISCV_REG_REQUIRED }, + { RISCV_FIRST_FP_REGNUM + 11, { "fa1", "f11" }, RISCV_REG_REQUIRED }, + { RISCV_FIRST_FP_REGNUM + 12, { "fa2", "f12" }, RISCV_REG_REQUIRED }, + { RISCV_FIRST_FP_REGNUM + 13, { "fa3", "f13" }, RISCV_REG_REQUIRED }, + { RISCV_FIRST_FP_REGNUM + 14, { "fa4", "f14" }, RISCV_REG_REQUIRED }, + { RISCV_FIRST_FP_REGNUM + 15, { "fa5", "f15" }, RISCV_REG_REQUIRED }, + { RISCV_FIRST_FP_REGNUM + 16, { "fa6", "f16" }, RISCV_REG_REQUIRED }, + { RISCV_FIRST_FP_REGNUM + 17, { "fa7", "f17" }, RISCV_REG_REQUIRED }, + { RISCV_FIRST_FP_REGNUM + 18, { "fs2", "f18" }, RISCV_REG_REQUIRED }, + { RISCV_FIRST_FP_REGNUM + 19, { "fs3", "f19" }, RISCV_REG_REQUIRED }, + { RISCV_FIRST_FP_REGNUM + 20, { "fs4", "f20" }, RISCV_REG_REQUIRED }, + { RISCV_FIRST_FP_REGNUM + 21, { "fs5", "f21" }, RISCV_REG_REQUIRED }, + { RISCV_FIRST_FP_REGNUM + 22, { "fs6", "f22" }, RISCV_REG_REQUIRED }, + { RISCV_FIRST_FP_REGNUM + 23, { "fs7", "f23" }, RISCV_REG_REQUIRED }, + { RISCV_FIRST_FP_REGNUM + 24, { "fs8", "f24" }, RISCV_REG_REQUIRED }, + { RISCV_FIRST_FP_REGNUM + 25, { "fs9", "f25" }, RISCV_REG_REQUIRED }, + { RISCV_FIRST_FP_REGNUM + 26, { "fs10", "f26" }, RISCV_REG_REQUIRED }, + { RISCV_FIRST_FP_REGNUM + 27, { "fs11", "f27" }, RISCV_REG_REQUIRED }, + { RISCV_FIRST_FP_REGNUM + 28, { "ft8", "f28" }, RISCV_REG_REQUIRED }, + { RISCV_FIRST_FP_REGNUM + 29, { "ft9", "f29" }, RISCV_REG_REQUIRED }, + { RISCV_FIRST_FP_REGNUM + 30, { "ft10", "f30" }, RISCV_REG_REQUIRED }, + { RISCV_FIRST_FP_REGNUM + 31, { "ft11", "f31" }, RISCV_REG_REQUIRED }, + + { RISCV_CSR_FFLAGS_REGNUM, { "fflags", "csr1" }, RISCV_REG_REQUIRED_MAYBE_CSR }, + { RISCV_CSR_FRM_REGNUM, { "frm", "csr2" }, RISCV_REG_REQUIRED_MAYBE_CSR }, + { RISCV_CSR_FCSR_REGNUM, { "fcsr", "csr3" }, RISCV_REG_REQUIRED_MAYBE_CSR }, } }; @@ -225,9 +344,9 @@ static const struct riscv_register_feature riscv_virtual_feature = { - "org.gnu.gdb.riscv.virtual", + "org.gnu.gdb.riscv.virtual", false, { - { RISCV_PRIV_REGNUM, { "priv" }, false } + { RISCV_PRIV_REGNUM, { "priv" }, RISCV_REG_OPTIONAL } } }; @@ -237,10 +356,10 @@ static struct riscv_register_feature riscv_csr_feature = { - "org.gnu.gdb.riscv.csr", + "org.gnu.gdb.riscv.csr", false, { -#define DECLARE_CSR(NAME,VALUE) \ - { RISCV_ ## VALUE ## _REGNUM, { # NAME }, false }, +#define DECLARE_CSR(NAME,VALUE,CLASS,DEFINE_VER,ABORT_VER) \ + { RISCV_ ## VALUE ## _REGNUM, { # NAME }, RISCV_REG_OPTIONAL }, #include "opcode/riscv-opc.h" #undef DECLARE_CSR } @@ -257,6 +376,16 @@ int csr_num = reg.regnum - RISCV_FIRST_CSR_REGNUM; const char *alias = xstrprintf ("csr%d", csr_num); reg.names.push_back (alias); + + /* Setup the other csr aliases. We don't use a switch table here in + case there are multiple aliases with the same value. Also filter + based on ABRT_VER in order to avoid a very old alias for misa that + duplicates the name "misa" but at a different CSR address. */ +#define DECLARE_CSR_ALIAS(NAME,VALUE,CLASS,DEF_VER,ABRT_VER) \ + if (csr_num == VALUE && ABRT_VER >= PRIV_SPEC_CLASS_1P11) \ + reg.names.push_back ( # NAME ); +#include "opcode/riscv-opc.h" +#undef DECLARE_CSR_ALIAS } } @@ -283,47 +412,11 @@ static struct cmd_list_element *setriscvcmdlist = NULL; static struct cmd_list_element *showriscvcmdlist = NULL; -/* The show callback for the 'show riscv' prefix command. */ - -static void -show_riscv_command (const char *args, int from_tty) -{ - help_list (showriscvcmdlist, "show riscv ", all_commands, gdb_stdout); -} - -/* The set callback for the 'set riscv' prefix command. */ - -static void -set_riscv_command (const char *args, int from_tty) -{ - printf_unfiltered - (_("\"set riscv\" must be followed by an appropriate subcommand.\n")); - help_list (setriscvcmdlist, "set riscv ", all_commands, gdb_stdout); -} - /* The set and show lists for 'set riscv' and 'show riscv' prefixes. */ static struct cmd_list_element *setdebugriscvcmdlist = NULL; static struct cmd_list_element *showdebugriscvcmdlist = NULL; -/* The show callback for the 'show debug riscv' prefix command. */ - -static void -show_debug_riscv_command (const char *args, int from_tty) -{ - help_list (showdebugriscvcmdlist, "show debug riscv ", all_commands, gdb_stdout); -} - -/* The set callback for the 'set debug riscv' prefix command. */ - -static void -set_debug_riscv_command (const char *args, int from_tty) -{ - printf_unfiltered - (_("\"set debug riscv\" must be followed by an appropriate subcommand.\n")); - help_list (setdebugriscvcmdlist, "set debug riscv ", all_commands, gdb_stdout); -} - /* The show callback for all 'show debug riscv VARNAME' variables. */ static void @@ -486,18 +579,9 @@ } } -/* Callback function for user_reg_add. */ - -static struct value * -value_of_riscv_user_reg (struct frame_info *frame, const void *baton) -{ - const int *reg_p = (const int *) baton; - return value_of_register (*reg_p, frame); -} - /* Implement the register_name gdbarch method. This is used instead of the function supplied by calling TDESC_USE_REGISTERS so that we can - ensure the preferred names are offered. */ + ensure the preferred names are offered for x-regs and f-regs. */ static const char * riscv_register_name (struct gdbarch *gdbarch, int regnum) @@ -509,12 +593,18 @@ if (name == NULL || name[0] == '\0') return NULL; + /* We want GDB to use the ABI names for registers even if the target + gives us a target description with the architectural name. For + example we want to see 'ra' instead of 'x1' whatever the target + description called it. */ if (regnum >= RISCV_ZERO_REGNUM && regnum < RISCV_FIRST_FP_REGNUM) { gdb_assert (regnum < riscv_xreg_feature.registers.size ()); return riscv_xreg_feature.registers[regnum].names[0]; } + /* Like with the x-regs we prefer the abi names for the floating point + registers. */ if (regnum >= RISCV_FIRST_FP_REGNUM && regnum <= RISCV_LAST_FP_REGNUM) { if (riscv_has_fp_regs (gdbarch)) @@ -527,28 +617,34 @@ return NULL; } - /* Check that there's no gap between the set of registers handled above, - and the set of registers handled next. */ - gdb_assert ((RISCV_LAST_FP_REGNUM + 1) == RISCV_FIRST_CSR_REGNUM); - - if (regnum >= RISCV_FIRST_CSR_REGNUM && regnum <= RISCV_LAST_CSR_REGNUM) - { -#define DECLARE_CSR(NAME,VALUE) \ - case RISCV_ ## VALUE ## _REGNUM: return # NAME; - - switch (regnum) - { -#include "opcode/riscv-opc.h" - } -#undef DECLARE_CSR - } + /* Some targets (QEMU) are reporting these three registers twice, once + in the FPU feature, and once in the CSR feature. Both of these read + the same underlying state inside the target, but naming the register + twice in the target description results in GDB having two registers + with the same name, only one of which can ever be accessed, but both + will show up in 'info register all'. Unless, we identify the + duplicate copies of these registers (in riscv_tdesc_unknown_reg) and + then hide the registers here by giving them no name. */ + struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); + if (tdep->duplicate_fflags_regnum == regnum) + return NULL; + if (tdep->duplicate_frm_regnum == regnum) + return NULL; + if (tdep->duplicate_fcsr_regnum == regnum) + return NULL; - if (regnum == RISCV_PRIV_REGNUM) - return "priv"; + /* The remaining registers are different. For all other registers on the + machine we prefer to see the names that the target description + provides. This is particularly important for CSRs which might be + renamed over time. If GDB keeps track of the "latest" name, but a + particular target provides an older name then we don't want to force + users to see the newer name in register output. + + The other case that reaches here are any registers that the target + provided that GDB is completely unaware of. For these we have no + choice but to accept the target description name. - /* It is possible that that the target provides some registers that GDB - is unaware of, in that case just return the NAME from the target - description. */ + Just accept whatever name TDESC_REGISTER_NAME returned. */ return name; } @@ -579,7 +675,7 @@ append_composite_type_field (t, "float", bt->builtin_float); append_composite_type_field (t, "double", bt->builtin_double); TYPE_VECTOR (t) = 1; - TYPE_NAME (t) = "builtin_type_fpreg_d"; + t->set_name ("builtin_type_fpreg_d"); tdep->riscv_fpreg_d_type = t; } @@ -609,10 +705,10 @@ present the registers using a union type. */ int flen = riscv_isa_flen (gdbarch); if (flen == 8 - && TYPE_CODE (type) == TYPE_CODE_FLT + && type->code () == TYPE_CODE_FLT && TYPE_LENGTH (type) == flen - && (strcmp (TYPE_NAME (type), "builtin_type_ieee_double") == 0 - || strcmp (TYPE_NAME (type), "double") == 0)) + && (strcmp (type->name (), "builtin_type_ieee_double") == 0 + || strcmp (type->name (), "double") == 0)) type = riscv_fpreg_d_type (gdbarch); } @@ -622,7 +718,7 @@ || regnum == RISCV_SP_REGNUM || regnum == RISCV_GP_REGNUM || regnum == RISCV_TP_REGNUM) - && TYPE_CODE (type) == TYPE_CODE_INT + && type->code () == TYPE_CODE_INT && TYPE_LENGTH (type) == xlen) { /* This spots the case where some interesting registers are defined @@ -675,16 +771,16 @@ print_raw_format = (value_entirely_available (val) && !value_optimized_out (val)); - if (TYPE_CODE (regtype) == TYPE_CODE_FLT - || (TYPE_CODE (regtype) == TYPE_CODE_UNION - && TYPE_NFIELDS (regtype) == 2 - && TYPE_CODE (TYPE_FIELD_TYPE (regtype, 0)) == TYPE_CODE_FLT - && TYPE_CODE (TYPE_FIELD_TYPE (regtype, 1)) == TYPE_CODE_FLT) - || (TYPE_CODE (regtype) == TYPE_CODE_UNION - && TYPE_NFIELDS (regtype) == 3 - && TYPE_CODE (TYPE_FIELD_TYPE (regtype, 0)) == TYPE_CODE_FLT - && TYPE_CODE (TYPE_FIELD_TYPE (regtype, 1)) == TYPE_CODE_FLT - && TYPE_CODE (TYPE_FIELD_TYPE (regtype, 2)) == TYPE_CODE_FLT)) + if (regtype->code () == TYPE_CODE_FLT + || (regtype->code () == TYPE_CODE_UNION + && regtype->num_fields () == 2 + && regtype->field (0).type ()->code () == TYPE_CODE_FLT + && regtype->field (1).type ()->code () == TYPE_CODE_FLT) + || (regtype->code () == TYPE_CODE_UNION + && regtype->num_fields () == 3 + && regtype->field (0).type ()->code () == TYPE_CODE_FLT + && regtype->field (1).type ()->code () == TYPE_CODE_FLT + && regtype->field (2).type ()->code () == TYPE_CODE_FLT)) { struct value_print_options opts; const gdb_byte *valaddr = value_contents_for_printing (val); @@ -693,9 +789,7 @@ get_user_print_options (&opts); opts.deref_ref = 1; - val_print (regtype, - value_embedded_offset (val), 0, - file, 0, val, &opts, current_language); + common_val_print (val, file, 0, &opts, current_language); if (print_raw_format) { @@ -712,9 +806,7 @@ /* Print the register in hex. */ get_formatted_print_options (&opts, 'x'); opts.deref_ref = 1; - val_print (regtype, - value_embedded_offset (val), 0, - file, 0, val, &opts, current_language); + common_val_print (val, file, 0, &opts, current_language); if (print_raw_format) { @@ -848,9 +940,7 @@ get_user_print_options (&opts); opts.deref_ref = 1; fprintf_filtered (file, "\t"); - val_print (regtype, - value_embedded_offset (val), 0, - file, 0, val, &opts, current_language); + common_val_print (val, file, 0, &opts, current_language); } } } @@ -869,7 +959,7 @@ switch (regnum) { -#define DECLARE_CSR(name, num) case RISCV_ ## num ## _REGNUM: +#define DECLARE_CSR(name, num, class, define_ver, abort_ver) case RISCV_ ## num ## _REGNUM: #include "opcode/riscv-opc.h" #undef DECLARE_CSR return true; @@ -894,6 +984,19 @@ if (regnum > RISCV_LAST_REGNUM) { + /* Any extra registers from the CSR tdesc_feature (identified in + riscv_tdesc_unknown_reg) are removed from the save/restore groups + as some targets (QEMU) report CSRs which then can't be read. */ + struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); + if ((reggroup == restore_reggroup || reggroup == save_reggroup) + && regnum >= tdep->unknown_csrs_first_regnum + && regnum < (tdep->unknown_csrs_first_regnum + + tdep->unknown_csrs_count)) + return 0; + + /* This is some other unknown register from the target description. + In this case we trust whatever the target description says about + which groups this register should be in. */ int ret = tdesc_register_in_reggroup_p (gdbarch, regnum, reggroup); if (ret != -1) return ret; @@ -968,7 +1071,7 @@ else reggroup = general_reggroup; - for (regnum = 0; regnum <= RISCV_LAST_REGNUM; ++regnum) + for (regnum = 0; regnum < gdbarch_num_cooked_regs (gdbarch); ++regnum) { /* Zero never changes, so might as well hide by default. */ if (regnum == RISCV_ZERO_REGNUM && !print_all) @@ -1669,7 +1772,7 @@ riscv_type_align (gdbarch *gdbarch, type *type) { type = check_typedef (type); - if (TYPE_CODE (type) == TYPE_CODE_ARRAY && TYPE_VECTOR (type)) + if (type->code () == TYPE_CODE_ARRAY && TYPE_VECTOR (type)) return std::min (TYPE_LENGTH (type), (ULONGEST) BIGGEST_ALIGNMENT); /* Anything else will be aligned by the generic code. */ @@ -1732,8 +1835,9 @@ will go. */ int c_length; - /* The offset within CONTENTS for this part of the argument. Will - always be 0 for the first part. For the second part of the + /* The offset within CONTENTS for this part of the argument. This can + be non-zero even for the first part (the first field of a struct can + have a non-zero offset due to padding). For the second part of the argument, this might be the C_LENGTH value of the first part, however, if we are passing a structure in two registers, and there's is padding between the first and second field, then this offset @@ -2084,7 +2188,7 @@ void riscv_struct_info::analyse_inner (struct type *type, int offset) { - unsigned int count = TYPE_NFIELDS (type); + unsigned int count = type->num_fields (); unsigned int i; for (i = 0; i < count; ++i) @@ -2092,12 +2196,12 @@ if (TYPE_FIELD_LOC_KIND (type, i) != FIELD_LOC_KIND_BITPOS) continue; - struct type *field_type = TYPE_FIELD_TYPE (type, i); + struct type *field_type = type->field (i).type (); field_type = check_typedef (field_type); int field_offset = offset + TYPE_FIELD_BITPOS (type, i) / TARGET_CHAR_BIT; - switch (TYPE_CODE (field_type)) + switch (field_type->code ()) { case TYPE_CODE_STRUCT: analyse_inner (field_type, field_offset); @@ -2144,7 +2248,7 @@ sinfo.analyse (ainfo->type); if (sinfo.number_of_fields () == 1 - && TYPE_CODE (sinfo.field_type (0)) == TYPE_CODE_COMPLEX) + && sinfo.field_type(0)->code () == TYPE_CODE_COMPLEX) { /* The following is similar to RISCV_CALL_ARG_COMPLEX_FLOAT, except we use the type of the complex field instead of the @@ -2174,7 +2278,7 @@ } if (sinfo.number_of_fields () == 1 - && TYPE_CODE (sinfo.field_type (0)) == TYPE_CODE_FLT) + && sinfo.field_type(0)->code () == TYPE_CODE_FLT) { /* The following is similar to RISCV_CALL_ARG_SCALAR_FLOAT, except we use the type of the first scalar field instead of @@ -2197,9 +2301,9 @@ } if (sinfo.number_of_fields () == 2 - && TYPE_CODE (sinfo.field_type (0)) == TYPE_CODE_FLT + && sinfo.field_type(0)->code () == TYPE_CODE_FLT && TYPE_LENGTH (sinfo.field_type (0)) <= cinfo->flen - && TYPE_CODE (sinfo.field_type (1)) == TYPE_CODE_FLT + && sinfo.field_type(1)->code () == TYPE_CODE_FLT && TYPE_LENGTH (sinfo.field_type (1)) <= cinfo->flen && riscv_arg_regs_available (&cinfo->float_regs) >= 2) { @@ -2223,7 +2327,7 @@ if (sinfo.number_of_fields () == 2 && riscv_arg_regs_available (&cinfo->int_regs) >= 1 - && (TYPE_CODE (sinfo.field_type (0)) == TYPE_CODE_FLT + && (sinfo.field_type(0)->code () == TYPE_CODE_FLT && TYPE_LENGTH (sinfo.field_type (0)) <= cinfo->flen && is_integral_type (sinfo.field_type (1)) && TYPE_LENGTH (sinfo.field_type (1)) <= cinfo->xlen)) @@ -2247,7 +2351,7 @@ && riscv_arg_regs_available (&cinfo->int_regs) >= 1 && (is_integral_type (sinfo.field_type (0)) && TYPE_LENGTH (sinfo.field_type (0)) <= cinfo->xlen - && TYPE_CODE (sinfo.field_type (1)) == TYPE_CODE_FLT + && sinfo.field_type(1)->code () == TYPE_CODE_FLT && TYPE_LENGTH (sinfo.field_type (1)) <= cinfo->flen)) { int len0 = TYPE_LENGTH (sinfo.field_type (0)); @@ -2300,7 +2404,7 @@ ainfo->argloc[0].c_length = 0; ainfo->argloc[1].c_length = 0; - switch (TYPE_CODE (ainfo->type)) + switch (ainfo->type->code ()) { case TYPE_CODE_INT: case TYPE_CODE_BOOL: @@ -2422,6 +2526,26 @@ } } +/* Wrapper around REGCACHE->cooked_write. Places the LEN bytes of DATA + into a buffer that is at least as big as the register REGNUM, padding + out the DATA with either 0x00, or 0xff. For floating point registers + 0xff is used, for everyone else 0x00 is used. */ + +static void +riscv_regcache_cooked_write (int regnum, const gdb_byte *data, int len, + struct regcache *regcache, int flen) +{ + gdb_byte tmp [sizeof (ULONGEST)]; + + /* FP values in FP registers must be NaN-boxed. */ + if (riscv_is_fp_regno_p (regnum) && len < flen) + memset (tmp, -1, sizeof (tmp)); + else + memset (tmp, 0, sizeof (tmp)); + memcpy (tmp, data, len); + regcache->cooked_write (regnum, tmp); +} + /* Implement the push dummy call gdbarch callback. */ static CORE_ADDR @@ -2448,7 +2572,7 @@ struct type *ftype = check_typedef (value_type (function)); - if (TYPE_CODE (ftype) == TYPE_CODE_PTR) + if (ftype->code () == TYPE_CODE_PTR) ftype = check_typedef (TYPE_TARGET_TYPE (ftype)); /* We'll use register $a0 if we're returning a struct. */ @@ -2465,7 +2589,7 @@ arg_type = check_typedef (value_type (arg_value)); riscv_arg_location (gdbarch, info, &call_info, arg_type, - TYPE_VARARGS (ftype) && i >= TYPE_NFIELDS (ftype)); + TYPE_VARARGS (ftype) && i >= ftype->num_fields ()); if (info->type != arg_type) arg_value = value_cast (info->type, arg_value); @@ -2531,18 +2655,13 @@ { case riscv_arg_info::location::in_reg: { - gdb_byte tmp [sizeof (ULONGEST)]; - gdb_assert (info->argloc[0].c_length <= info->length); - /* FP values in FP registers must be NaN-boxed. */ - if (riscv_is_fp_regno_p (info->argloc[0].loc_data.regno) - && info->argloc[0].c_length < call_info.flen) - memset (tmp, -1, sizeof (tmp)); - else - memset (tmp, 0, sizeof (tmp)); - memcpy (tmp, (info->contents + info->argloc[0].c_offset), - info->argloc[0].c_length); - regcache->cooked_write (info->argloc[0].loc_data.regno, tmp); + + riscv_regcache_cooked_write (info->argloc[0].loc_data.regno, + (info->contents + + info->argloc[0].c_offset), + info->argloc[0].c_length, + regcache, call_info.flen); second_arg_length = (((info->argloc[0].c_length + info->argloc[0].c_offset) < info->length) ? info->argloc[1].c_length : 0); @@ -2574,19 +2693,13 @@ { case riscv_arg_info::location::in_reg: { - gdb_byte tmp [sizeof (ULONGEST)]; - gdb_assert ((riscv_is_fp_regno_p (info->argloc[1].loc_data.regno) && second_arg_length <= call_info.flen) || second_arg_length <= call_info.xlen); - /* FP values in FP registers must be NaN-boxed. */ - if (riscv_is_fp_regno_p (info->argloc[1].loc_data.regno) - && second_arg_length < call_info.flen) - memset (tmp, -1, sizeof (tmp)); - else - memset (tmp, 0, sizeof (tmp)); - memcpy (tmp, second_arg_data, second_arg_length); - regcache->cooked_write (info->argloc[1].loc_data.regno, tmp); + riscv_regcache_cooked_write (info->argloc[1].loc_data.regno, + second_arg_data, + second_arg_length, + regcache, call_info.flen); } break; @@ -2706,9 +2819,9 @@ if (writebuf) { const gdb_byte *ptr = writebuf + info.argloc[0].c_offset; - regcache->cooked_write_part (regnum, 0, + riscv_regcache_cooked_write (regnum, ptr, info.argloc[0].c_length, - ptr); + regcache, call_info.flen); } /* A return value in register can have a second part in a @@ -2735,10 +2848,11 @@ if (writebuf) { - writebuf += info.argloc[1].c_offset; - regcache->cooked_write_part (regnum, 0, - info.argloc[1].c_length, - writebuf); + const gdb_byte *ptr + = writebuf + info.argloc[1].c_offset; + riscv_regcache_cooked_write + (regnum, ptr, info.argloc[1].c_length, + regcache, call_info.flen); } break; @@ -2972,7 +3086,7 @@ features.xlen = 8; /* Now build a target description based on the feature set. */ - return riscv_create_target_description (features); + return riscv_lookup_target_description (features); } /* All of the registers in REG_SET are checked for in FEATURE, TDESC_DATA @@ -2982,24 +3096,26 @@ static bool riscv_check_tdesc_feature (struct tdesc_arch_data *tdesc_data, - const struct tdesc_feature *feature, - const struct riscv_register_feature *reg_set) + const struct tdesc_feature *main_feature, + const struct tdesc_feature *csr_feature, + const struct riscv_register_feature *reg_set, + std::vector<riscv_pending_register_alias> *aliases) { for (const auto ® : reg_set->registers) { - bool found = false; + bool found = reg.check (tdesc_data, main_feature, reg_set, aliases); - for (const char *name : reg.names) + if (!found && reg.required != RISCV_REG_OPTIONAL) { - found = - tdesc_numbered_register (feature, tdesc_data, reg.regnum, name); - - if (found) - break; + if (reg.required == RISCV_REG_REQUIRED_MAYBE_CSR + && csr_feature != nullptr) + { + gdb_assert (main_feature != csr_feature); + found = reg.check (tdesc_data, csr_feature, reg_set, aliases); + } + if (!found) + return false; } - - if (!found && reg.required_p) - return false; } return true; @@ -3023,24 +3139,6 @@ reggroup_add (gdbarch, csr_reggroup); } -/* Create register aliases for all the alternative names that exist for - registers in REG_SET. */ - -static void -riscv_setup_register_aliases (struct gdbarch *gdbarch, - const struct riscv_register_feature *reg_set) -{ - for (auto ® : reg_set->registers) - { - /* The first item in the names list is the preferred name for the - register, this is what RISCV_REGISTER_NAME returns, and so we - don't need to create an alias with that name here. */ - for (int i = 1; i < reg.names.size (); ++i) - user_reg_add (gdbarch, reg.names[i], value_of_riscv_user_reg, - ®.regnum); - } -} - /* Implement the "dwarf2_reg_to_regnum" gdbarch method. */ static int @@ -3097,6 +3195,85 @@ return target_options; } +/* Call back from tdesc_use_registers, called for each unknown register + found in the target description. + + See target-description.h (typedef tdesc_unknown_register_ftype) for a + discussion of the arguments and return values. */ + +static int +riscv_tdesc_unknown_reg (struct gdbarch *gdbarch, tdesc_feature *feature, + const char *reg_name, int possible_regnum) +{ + /* At one point in time GDB had an incorrect default target description + that duplicated the fflags, frm, and fcsr registers in both the FPU + and CSR register sets. + + Some targets (QEMU) copied these target descriptions into their source + tree, and so we're currently stuck working with some targets that + declare the same registers twice. + + There's not much we can do about this any more. Assuming the target + will direct a request for either register number to the correct + underlying hardware register then it doesn't matter which one GDB + uses, so long as we (GDB) are consistent (so that we don't end up with + invalid cache misses). + + As we always scan the FPU registers first, then the CSRs, if the + target has included the offending registers in both sets then we will + always see the FPU copies here, as the CSR versions will replace them + in the register list. + + To prevent these duplicates showing up in any of the register list, + record their register numbers here. */ + if (strcmp (tdesc_feature_name (feature), riscv_freg_feature.name) == 0) + { + struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); + int *regnum_ptr = nullptr; + + if (strcmp (reg_name, "fflags") == 0) + regnum_ptr = &tdep->duplicate_fflags_regnum; + else if (strcmp (reg_name, "frm") == 0) + regnum_ptr = &tdep->duplicate_frm_regnum; + else if (strcmp (reg_name, "fcsr") == 0) + regnum_ptr = &tdep->duplicate_fcsr_regnum; + + if (regnum_ptr != nullptr) + { + /* This means the register appears more than twice in the target + description. Just let GDB add this as another register. + We'll have duplicates in the register name list, but there's + not much more we can do. */ + if (*regnum_ptr != -1) + return -1; + + /* Record the number assigned to this register, then return the + number (so it actually gets assigned to this register). */ + *regnum_ptr = possible_regnum; + return possible_regnum; + } + } + + /* Any unknown registers in the CSR feature are recorded within a single + block so we can easily identify these registers when making choices + about register groups in riscv_register_reggroup_p. */ + if (strcmp (tdesc_feature_name (feature), riscv_csr_feature.name) == 0) + { + struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); + if (tdep->unknown_csrs_first_regnum == -1) + tdep->unknown_csrs_first_regnum = possible_regnum; + gdb_assert (tdep->unknown_csrs_first_regnum + + tdep->unknown_csrs_count == possible_regnum); + tdep->unknown_csrs_count++; + return possible_regnum; + } + + /* Some other unknown register. Don't assign this a number now, it will + be assigned a number automatically later by the target description + handling code. */ + return -1; +} + /* Implement the gnu_triplet_regexp method. A single compiler supports both 32-bit and 64-bit code, and may be named riscv32 or riscv64 or (not recommended) riscv. */ @@ -3144,10 +3321,12 @@ return NULL; struct tdesc_arch_data *tdesc_data = tdesc_data_alloc (); + std::vector<riscv_pending_register_alias> pending_aliases; bool valid_p = riscv_check_tdesc_feature (tdesc_data, - feature_cpu, - &riscv_xreg_feature); + feature_cpu, feature_csr, + &riscv_xreg_feature, + &pending_aliases); if (valid_p) { /* Check that all of the core cpu registers have the same bitsize. */ @@ -3167,7 +3346,9 @@ if (feature_fpu != NULL) { valid_p &= riscv_check_tdesc_feature (tdesc_data, feature_fpu, - &riscv_freg_feature); + feature_csr, + &riscv_freg_feature, + &pending_aliases); /* Search for the first floating point register (by any alias), to determine the bitsize. */ @@ -3202,12 +3383,14 @@ } if (feature_virtual) - riscv_check_tdesc_feature (tdesc_data, feature_virtual, - &riscv_virtual_feature); + riscv_check_tdesc_feature (tdesc_data, feature_virtual, feature_csr, + &riscv_virtual_feature, + &pending_aliases); if (feature_csr) - riscv_check_tdesc_feature (tdesc_data, feature_csr, - &riscv_csr_feature); + riscv_check_tdesc_feature (tdesc_data, feature_csr, nullptr, + &riscv_csr_feature, + &pending_aliases); if (!valid_p) { @@ -3328,7 +3511,7 @@ set_gdbarch_print_registers_info (gdbarch, riscv_print_registers_info); /* Finalise the target description registers. */ - tdesc_use_registers (gdbarch, tdesc, tdesc_data); + tdesc_use_registers (gdbarch, tdesc, tdesc_data, riscv_tdesc_unknown_reg); /* Override the register type callback setup by the target description mechanism. This allows us to provide special type for floating point @@ -3345,11 +3528,11 @@ want, ignoring what the target tells us. */ set_gdbarch_register_reggroup_p (gdbarch, riscv_register_reggroup_p); - /* Create register aliases for alternative register names. */ - riscv_setup_register_aliases (gdbarch, &riscv_xreg_feature); - if (riscv_has_fp_regs (gdbarch)) - riscv_setup_register_aliases (gdbarch, &riscv_freg_feature); - riscv_setup_register_aliases (gdbarch, &riscv_csr_feature); + /* Create register aliases for alternative register names. We only + create aliases for registers which were mentioned in the target + description. */ + for (const auto &alias : pending_aliases) + alias.create (gdbarch); /* Compile command hooks. */ set_gdbarch_gcc_target_options (gdbarch, riscv_gcc_target_options); @@ -3358,6 +3541,8 @@ /* Hook in OS ABI-specific overrides, if they have been registered. */ gdbarch_init_osabi (info, gdbarch); + register_riscv_ravenscar_ops (gdbarch); + return gdbarch; } @@ -3508,8 +3693,9 @@ csr_reggroup = reggroup_new ("csr", USER_REGGROUP); } +void _initialize_riscv_tdep (); void -_initialize_riscv_tdep (void) +_initialize_riscv_tdep () { riscv_create_csr_aliases (); riscv_init_reggroups (); @@ -3518,15 +3704,15 @@ /* Add root prefix command for all "set debug riscv" and "show debug riscv" commands. */ - add_prefix_cmd ("riscv", no_class, set_debug_riscv_command, - _("RISC-V specific debug commands."), - &setdebugriscvcmdlist, "set debug riscv ", 0, - &setdebuglist); - - add_prefix_cmd ("riscv", no_class, show_debug_riscv_command, - _("RISC-V specific debug commands."), - &showdebugriscvcmdlist, "show debug riscv ", 0, - &showdebuglist); + add_basic_prefix_cmd ("riscv", no_class, + _("RISC-V specific debug commands."), + &setdebugriscvcmdlist, "set debug riscv ", 0, + &setdebuglist); + + add_show_prefix_cmd ("riscv", no_class, + _("RISC-V specific debug commands."), + &showdebugriscvcmdlist, "show debug riscv ", 0, + &showdebuglist); add_setshow_zuinteger_cmd ("breakpoints", class_maintenance, &riscv_debug_breakpoints, _("\ @@ -3569,13 +3755,13 @@ &setdebugriscvcmdlist, &showdebugriscvcmdlist); /* Add root prefix command for all "set riscv" and "show riscv" commands. */ - add_prefix_cmd ("riscv", no_class, set_riscv_command, - _("RISC-V specific commands."), - &setriscvcmdlist, "set riscv ", 0, &setlist); - - add_prefix_cmd ("riscv", no_class, show_riscv_command, - _("RISC-V specific commands."), - &showriscvcmdlist, "show riscv ", 0, &showlist); + add_basic_prefix_cmd ("riscv", no_class, + _("RISC-V specific commands."), + &setriscvcmdlist, "set riscv ", 0, &setlist); + + add_show_prefix_cmd ("riscv", no_class, + _("RISC-V specific commands."), + &showriscvcmdlist, "show riscv ", 0, &showlist); use_compressed_breakpoints = AUTO_BOOLEAN_AUTO; diff -Nru gdb-9.1/gdb/riscv-tdep.h gdb-10.2/gdb/riscv-tdep.h --- gdb-9.1/gdb/riscv-tdep.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/riscv-tdep.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,7 +1,7 @@ /* Target-dependent header for the RISC-V architecture, for GDB, the GNU Debugger. - Copyright (C) 2018-2020 Free Software Foundation, Inc. + Copyright (C) 2018-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -44,7 +44,7 @@ RISCV_LAST_FP_REGNUM = 64, /* Last Floating Point Register */ RISCV_FIRST_CSR_REGNUM = 65, /* First CSR */ -#define DECLARE_CSR(name, num) \ +#define DECLARE_CSR(name, num, class, define_version, abort_version) \ RISCV_ ## num ## _REGNUM = RISCV_FIRST_CSR_REGNUM + num, #include "opcode/riscv-opc.h" #undef DECLARE_CSR @@ -79,6 +79,21 @@ /* ISA-specific data types. */ struct type *riscv_fpreg_d_type = nullptr; + + /* Use for tracking unknown CSRs in the target description. + UNKNOWN_CSRS_FIRST_REGNUM is the number assigned to the first unknown + CSR. All other unknown CSRs will be assigned sequential numbers after + this, with UNKNOWN_CSRS_COUNT being the total number of unknown CSRs. */ + int unknown_csrs_first_regnum = -1; + int unknown_csrs_count = 0; + + /* Some targets (QEMU) are reporting three registers twice in the target + description they send. These three register numbers, when not set to + -1, are for the duplicate copies of these registers. */ + int duplicate_fflags_regnum = -1; + int duplicate_frm_regnum = -1; + int duplicate_fcsr_regnum = -1; + }; diff -Nru gdb-9.1/gdb/rl78-tdep.c gdb-10.2/gdb/rl78-tdep.c --- gdb-9.1/gdb/rl78-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/rl78-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for the Renesas RL78 for GDB, the GNU debugger. - Copyright (C) 2011-2020 Free Software Foundation, Inc. + Copyright (C) 2011-2021 Free Software Foundation, Inc. Contributed by Red Hat, Inc. @@ -32,7 +32,7 @@ #include "frame-base.h" #include "value.h" #include "gdbcore.h" -#include "dwarf2-frame.h" +#include "dwarf2/frame.h" #include "reggroups.h" #include "elf/rl78.h" @@ -1048,8 +1048,8 @@ = extract_unsigned_integer (buf, TYPE_LENGTH (type), byte_order); /* Is it a code address? */ - if (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_FUNC - || TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_METHOD + if (TYPE_TARGET_TYPE (type)->code () == TYPE_CODE_FUNC + || TYPE_TARGET_TYPE (type)->code () == TYPE_CODE_METHOD || TYPE_CODE_SPACE (TYPE_TARGET_TYPE (type)) || TYPE_LENGTH (type) == 4) return rl78_make_instruction_address (addr); @@ -1480,8 +1480,9 @@ /* Register the above initialization routine. */ +void _initialize_rl78_tdep (); void -_initialize_rl78_tdep (void) +_initialize_rl78_tdep () { register_gdbarch_init (bfd_arch_rl78, rl78_gdbarch_init); } diff -Nru gdb-9.1/gdb/rs6000-aix-tdep.c gdb-10.2/gdb/rs6000-aix-tdep.c --- gdb-9.1/gdb/rs6000-aix-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/rs6000-aix-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Native support code for PPC AIX, for GDB the GNU debugger. - Copyright (C) 2006-2020 Free Software Foundation, Inc. + Copyright (C) 2006-2021 Free Software Foundation, Inc. Free Software Foundation, Inc. @@ -349,7 +349,7 @@ type = check_typedef (value_type (arg)); len = TYPE_LENGTH (type); - if (TYPE_CODE (type) == TYPE_CODE_FLT) + if (type->code () == TYPE_CODE_FLT) { /* Floating point arguments are passed in fpr's, as well as gpr's. There are 13 fpr's reserved for passing parameters. At this point @@ -473,7 +473,7 @@ /* Float types should be passed in fpr's, as well as in the stack. */ - if (TYPE_CODE (type) == TYPE_CODE_FLT && f_argno < 13) + if (type->code () == TYPE_CODE_FLT && f_argno < 13) { gdb_assert (len <= 8); @@ -527,7 +527,7 @@ /* AltiVec extension: Functions that declare a vector data type as a return value place that return value in VR2. */ - if (TYPE_CODE (valtype) == TYPE_CODE_ARRAY && TYPE_VECTOR (valtype) + if (valtype->code () == TYPE_CODE_ARRAY && TYPE_VECTOR (valtype) && TYPE_LENGTH (valtype) == 16) { if (readbuf) @@ -543,16 +543,16 @@ allocated buffer into which the callee is assumed to store its return value. All explicit parameters are appropriately relabeled. */ - if (TYPE_CODE (valtype) == TYPE_CODE_STRUCT - || TYPE_CODE (valtype) == TYPE_CODE_UNION - || TYPE_CODE (valtype) == TYPE_CODE_ARRAY) + if (valtype->code () == TYPE_CODE_STRUCT + || valtype->code () == TYPE_CODE_UNION + || valtype->code () == TYPE_CODE_ARRAY) return RETURN_VALUE_STRUCT_CONVENTION; /* Scalar floating-point values are returned in FPR1 for float or double, and in FPR1:FPR2 for quadword precision. Fortran complex*8 and complex*16 are returned in FPR1:FPR2, and complex*32 is returned in FPR1:FPR4. */ - if (TYPE_CODE (valtype) == TYPE_CODE_FLT + if (valtype->code () == TYPE_CODE_FLT && (TYPE_LENGTH (valtype) == 4 || TYPE_LENGTH (valtype) == 8)) { struct type *regtype = register_type (gdbarch, tdep->ppc_fp0_regnum); @@ -608,7 +608,7 @@ if (TYPE_LENGTH (valtype) == 8) { - gdb_assert (TYPE_CODE (valtype) != TYPE_CODE_FLT); + gdb_assert (valtype->code () != TYPE_CODE_FLT); gdb_assert (tdep->wordsize == 4); if (readbuf) @@ -1177,8 +1177,9 @@ frame_unwind_append_unwinder (gdbarch, &aix_sighandle_frame_unwind); } +void _initialize_rs6000_aix_tdep (); void -_initialize_rs6000_aix_tdep (void) +_initialize_rs6000_aix_tdep () { gdbarch_register_osabi_sniffer (bfd_arch_rs6000, bfd_target_xcoff_flavour, diff -Nru gdb-9.1/gdb/rs6000-aix-tdep.h gdb-10.2/gdb/rs6000-aix-tdep.h --- gdb-9.1/gdb/rs6000-aix-tdep.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/rs6000-aix-tdep.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2013-2020 Free Software Foundation, Inc. +/* Copyright (C) 2013-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/rs6000-lynx178-tdep.c gdb-10.2/gdb/rs6000-lynx178-tdep.c --- gdb-9.1/gdb/rs6000-lynx178-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/rs6000-lynx178-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2012-2020 Free Software Foundation, Inc. +/* Copyright (C) 2012-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -96,7 +96,7 @@ type = check_typedef (value_type (arg)); len = TYPE_LENGTH (type); - if (TYPE_CODE (type) == TYPE_CODE_FLT) + if (type->code () == TYPE_CODE_FLT) { /* Floating point arguments are passed in fpr's, as well as gpr's. @@ -222,7 +222,7 @@ /* Float types should be passed in fpr's, as well as in the stack. */ - if (TYPE_CODE (type) == TYPE_CODE_FLT && f_argno < 13) + if (type->code () == TYPE_CODE_FLT && f_argno < 13) { gdb_assert (len <= 8); @@ -274,7 +274,7 @@ /* AltiVec extension: Functions that declare a vector data type as a return value place that return value in VR2. */ - if (TYPE_CODE (valtype) == TYPE_CODE_ARRAY && TYPE_VECTOR (valtype) + if (valtype->code () == TYPE_CODE_ARRAY && TYPE_VECTOR (valtype) && TYPE_LENGTH (valtype) == 16) { if (readbuf) @@ -290,16 +290,16 @@ allocated buffer into which the callee is assumed to store its return value. All explicit parameters are appropriately relabeled. */ - if (TYPE_CODE (valtype) == TYPE_CODE_STRUCT - || TYPE_CODE (valtype) == TYPE_CODE_UNION - || TYPE_CODE (valtype) == TYPE_CODE_ARRAY) + if (valtype->code () == TYPE_CODE_STRUCT + || valtype->code () == TYPE_CODE_UNION + || valtype->code () == TYPE_CODE_ARRAY) return RETURN_VALUE_STRUCT_CONVENTION; /* Scalar floating-point values are returned in FPR1 for float or double, and in FPR1:FPR2 for quadword precision. Fortran complex*8 and complex*16 are returned in FPR1:FPR2, and complex*32 is returned in FPR1:FPR4. */ - if (TYPE_CODE (valtype) == TYPE_CODE_FLT + if (valtype->code () == TYPE_CODE_FLT && (TYPE_LENGTH (valtype) == 4 || TYPE_LENGTH (valtype) == 8)) { struct type *regtype = register_type (gdbarch, tdep->ppc_fp0_regnum); @@ -355,7 +355,7 @@ if (TYPE_LENGTH (valtype) == 8) { - gdb_assert (TYPE_CODE (valtype) != TYPE_CODE_FLT); + gdb_assert (valtype->code () != TYPE_CODE_FLT); gdb_assert (tdep->wordsize == 4); if (readbuf) @@ -406,8 +406,9 @@ set_gdbarch_long_double_bit (gdbarch, 8 * TARGET_CHAR_BIT); } +void _initialize_rs6000_lynx178_tdep (); void -_initialize_rs6000_lynx178_tdep (void) +_initialize_rs6000_lynx178_tdep () { gdbarch_register_osabi_sniffer (bfd_arch_rs6000, bfd_target_xcoff_flavour, diff -Nru gdb-9.1/gdb/rs6000-nat.c gdb-10.2/gdb/rs6000-nat.c --- gdb-9.1/gdb/rs6000-nat.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/rs6000-nat.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* IBM RS/6000 native-dependent code for GDB, the GNU debugger. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -668,8 +668,9 @@ } } +void _initialize_rs6000_nat (); void -_initialize_rs6000_nat (void) +_initialize_rs6000_nat () { add_inf_child_target (&the_rs6000_nat_target); } diff -Nru gdb-9.1/gdb/rs6000-tdep.c gdb-10.2/gdb/rs6000-tdep.c --- gdb-9.1/gdb/rs6000-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/rs6000-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for GDB, the GNU debugger. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -37,7 +37,7 @@ #include "sim-regno.h" #include "gdb/sim-ppc.h" #include "reggroups.h" -#include "dwarf2-frame.h" +#include "dwarf2/frame.h" #include "target-descriptions.h" #include "user-regs.h" #include "record-full.h" @@ -855,7 +855,7 @@ /* We can't displaced step atomic sequences. */ -static struct displaced_step_closure * +static displaced_step_closure_up ppc_displaced_step_copy_insn (struct gdbarch *gdbarch, CORE_ADDR from, CORE_ADDR to, struct regcache *regs) @@ -894,7 +894,8 @@ displaced_step_dump_bytes (gdb_stdlog, buf, len); } - return closure.release (); + /* This is a work around for a problem with g++ 4.8. */ + return displaced_step_closure_up (closure.release ()); } /* Fix up the state of registers and memory after having single-stepped @@ -2273,7 +2274,7 @@ init_vector_type (bt->builtin_int8, 8)); TYPE_VECTOR (t) = 1; - TYPE_NAME (t) = "ppc_builtin_type_vec64"; + t->set_name ("ppc_builtin_type_vec64"); tdep->ppc_builtin_type_vec64 = t; } @@ -2320,7 +2321,7 @@ init_vector_type (bt->builtin_int8, 16)); TYPE_VECTOR (t) = 1; - TYPE_NAME (t) = "ppc_builtin_type_vec128"; + t->set_name ("ppc_builtin_type_vec128"); tdep->ppc_builtin_type_vec128 = t; } @@ -2530,7 +2531,7 @@ return (tdep->ppc_fp0_regnum >= 0 && regnum >= tdep->ppc_fp0_regnum && regnum < tdep->ppc_fp0_regnum + ppc_num_fprs - && TYPE_CODE (type) == TYPE_CODE_FLT + && type->code () == TYPE_CODE_FLT && TYPE_LENGTH (type) != TYPE_LENGTH (builtin_type (gdbarch)->builtin_double)); } @@ -2545,7 +2546,7 @@ struct gdbarch *gdbarch = get_frame_arch (frame); gdb_byte from[PPC_MAX_REGISTER_SIZE]; - gdb_assert (TYPE_CODE (type) == TYPE_CODE_FLT); + gdb_assert (type->code () == TYPE_CODE_FLT); if (!get_frame_register_bytes (frame, regnum, 0, register_size (gdbarch, regnum), @@ -2567,7 +2568,7 @@ struct gdbarch *gdbarch = get_frame_arch (frame); gdb_byte to[PPC_MAX_REGISTER_SIZE]; - gdb_assert (TYPE_CODE (type) == TYPE_CODE_FLT); + gdb_assert (type->code () == TYPE_CODE_FLT); target_float_convert (from, type, to, builtin_type (gdbarch)->builtin_double); @@ -3314,7 +3315,7 @@ /* Information about a particular processor variant. */ -struct variant +struct ppc_variant { /* Name of this variant. */ const char *name; @@ -3332,7 +3333,7 @@ struct target_desc **tdesc; }; -static struct variant variants[] = +static struct ppc_variant variants[] = { {"powerpc", "PowerPC user-level", bfd_arch_powerpc, bfd_mach_ppc, &tdesc_powerpc_altivec32}, @@ -3391,10 +3392,10 @@ /* Return the variant corresponding to architecture ARCH and machine number MACH. If no such variant exists, return null. */ -static const struct variant * +static const struct ppc_variant * find_variant_by_arch (enum bfd_architecture arch, unsigned long mach) { - const struct variant *v; + const struct ppc_variant *v; for (v = variants; v->name; v++) if (arch == v->arch && mach == v->mach) @@ -6198,7 +6199,7 @@ layout, if we do not already have one. */ if (! tdesc_has_registers (tdesc)) { - const struct variant *v; + const struct ppc_variant *v; /* Choose variant. */ v = find_variant_by_arch (arch, mach); @@ -7171,22 +7172,6 @@ /* FIXME: Dump gdbarch_tdep. */ } -/* PowerPC-specific commands. */ - -static void -set_powerpc_command (const char *args, int from_tty) -{ - printf_unfiltered (_("\ -\"set powerpc\" must be followed by an appropriate subcommand.\n")); - help_list (setpowerpccmdlist, "set powerpc ", all_commands, gdb_stdout); -} - -static void -show_powerpc_command (const char *args, int from_tty) -{ - cmd_show_list (showpowerpccmdlist, from_tty, ""); -} - static void powerpc_set_soft_float (const char *args, int from_tty, struct cmd_list_element *c) @@ -7307,8 +7292,9 @@ /* Initialization code. */ +void _initialize_rs6000_tdep (); void -_initialize_rs6000_tdep (void) +_initialize_rs6000_tdep () { gdbarch_register (bfd_arch_rs6000, rs6000_gdbarch_init, rs6000_dump_tdep); gdbarch_register (bfd_arch_powerpc, rs6000_gdbarch_init, rs6000_dump_tdep); @@ -7336,13 +7322,13 @@ /* Add root prefix command for all "set powerpc"/"show powerpc" commands. */ - add_prefix_cmd ("powerpc", no_class, set_powerpc_command, - _("Various PowerPC-specific commands."), - &setpowerpccmdlist, "set powerpc ", 0, &setlist); - - add_prefix_cmd ("powerpc", no_class, show_powerpc_command, - _("Various PowerPC-specific commands."), - &showpowerpccmdlist, "show powerpc ", 0, &showlist); + add_basic_prefix_cmd ("powerpc", no_class, + _("Various PowerPC-specific commands."), + &setpowerpccmdlist, "set powerpc ", 0, &setlist); + + add_show_prefix_cmd ("powerpc", no_class, + _("Various PowerPC-specific commands."), + &showpowerpccmdlist, "show powerpc ", 0, &showlist); /* Add a command to allow the user to force the ABI. */ add_setshow_auto_boolean_cmd ("soft-float", class_support, diff -Nru gdb-9.1/gdb/rs6000-tdep.h gdb-10.2/gdb/rs6000-tdep.h --- gdb-9.1/gdb/rs6000-tdep.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/rs6000-tdep.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2006-2020 Free Software Foundation, Inc. +/* Copyright (C) 2006-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/run-on-main-thread.c gdb-10.2/gdb/run-on-main-thread.c --- gdb-9.1/gdb/run-on-main-thread.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/run-on-main-thread.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Run a function on the main thread - Copyright (C) 2019-2020 Free Software Foundation, Inc. + Copyright (C) 2019-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -22,7 +22,7 @@ #if CXX_STD_THREAD #include <mutex> #endif -#include "event-loop.h" +#include "gdbsupport/event-loop.h" /* The serial event used when posting runnables. */ @@ -89,6 +89,7 @@ serial_event_set (runnable_event); } +void _initialize_run_on_main_thread (); void _initialize_run_on_main_thread () { diff -Nru gdb-9.1/gdb/run-on-main-thread.h gdb-10.2/gdb/run-on-main-thread.h --- gdb-9.1/gdb/run-on-main-thread.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/run-on-main-thread.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Run a function on the main thread - Copyright (C) 2019-2020 Free Software Foundation, Inc. + Copyright (C) 2019-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/rust-exp.c gdb-10.2/gdb/rust-exp.c --- gdb-9.1/gdb/rust-exp.c 2020-02-08 12:54:11.000000000 +0000 +++ gdb-10.2/gdb/rust-exp.c 2021-04-25 04:10:37.000000000 +0000 @@ -1,8 +1,9 @@ -/* A Bison parser, made by GNU Bison 3.0.4. */ +/* A Bison parser, made by GNU Bison 3.5.1. */ /* Bison implementation for Yacc-like parsers in C - Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc. + Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2020 Free Software Foundation, + Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -40,11 +41,14 @@ define necessary library symbols; they are noted "INFRINGES ON USER NAME SPACE" below. */ +/* Undocumented macros, especially those whose name start with YY_, + are private implementation details. Do not rely on them. */ + /* Identify Bison output. */ #define YYBISON 1 /* Bison version. */ -#define YYBISON_VERSION "3.0.4" +#define YYBISON_VERSION "3.5.1" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" @@ -61,8 +65,8 @@ -/* Copy the first part of user declarations. */ -#line 30 "rust-exp.y" /* yacc.c:339 */ +/* First part of user prologue. */ +#line 30 "rust-exp.y" #include "defs.h" @@ -114,13 +118,26 @@ typedef std::vector<set_field> rust_set_vector; -#line 118 "rust-exp.c.tmp" /* yacc.c:339 */ +#line 122 "rust-exp.c.tmp" +# ifndef YY_CAST +# ifdef __cplusplus +# define YY_CAST(Type, Val) static_cast<Type> (Val) +# define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast<Type> (Val) +# else +# define YY_CAST(Type, Val) ((Type) (Val)) +# define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val)) +# endif +# endif # ifndef YY_NULLPTRPTR -# if defined __cplusplus && 201103L <= __cplusplus -# define YY_NULLPTRPTR nullptr +# if defined __cplusplus +# if 201103L <= __cplusplus +# define YY_NULLPTRPTR nullptr +# else +# define YY_NULLPTRPTR 0 +# endif # else -# define YY_NULLPTRPTR 0 +# define YY_NULLPTRPTR ((void*)0) # endif # endif @@ -218,10 +235,9 @@ /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED - union YYSTYPE { -#line 83 "rust-exp.y" /* yacc.c:355 */ +#line 83 "rust-exp.y" /* A typed integer constant. */ struct typed_val_int typed_val_int; @@ -252,9 +268,9 @@ "super::" prefixes on a path. */ unsigned int depth; -#line 256 "rust-exp.c.tmp" /* yacc.c:355 */ -}; +#line 272 "rust-exp.c.tmp" +}; typedef union YYSTYPE YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define YYSTYPE_IS_DECLARED 1 @@ -266,8 +282,8 @@ -/* Copy the second part of user declarations. */ -#line 114 "rust-exp.y" /* yacc.c:358 */ +/* Second part of user prologue. */ +#line 114 "rust-exp.y" struct rust_parser; @@ -496,34 +512,82 @@ }; -#line 500 "rust-exp.c.tmp" /* yacc.c:358 */ +#line 516 "rust-exp.c.tmp" + #ifdef short # undef short #endif -#ifdef YYTYPE_UINT8 -typedef YYTYPE_UINT8 yytype_uint8; -#else -typedef unsigned char yytype_uint8; +/* On compilers that do not define __PTRDIFF_MAX__ etc., make sure + <limits.h> and (if available) <stdint.h> are included + so that the code can choose integer types of a good width. */ + +#ifndef __PTRDIFF_MAX__ +# include <limits.h> /* INFRINGES ON USER NAME SPACE */ +# if defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__ +# include <stdint.h> /* INFRINGES ON USER NAME SPACE */ +# define YY_STDINT_H +# endif #endif -#ifdef YYTYPE_INT8 -typedef YYTYPE_INT8 yytype_int8; +/* Narrow types that promote to a signed type and that can represent a + signed or unsigned integer of at least N bits. In tables they can + save space and decrease cache pressure. Promoting to a signed type + helps avoid bugs in integer arithmetic. */ + +#ifdef __INT_LEAST8_MAX__ +typedef __INT_LEAST8_TYPE__ yytype_int8; +#elif defined YY_STDINT_H +typedef int_least8_t yytype_int8; #else typedef signed char yytype_int8; #endif -#ifdef YYTYPE_UINT16 -typedef YYTYPE_UINT16 yytype_uint16; +#ifdef __INT_LEAST16_MAX__ +typedef __INT_LEAST16_TYPE__ yytype_int16; +#elif defined YY_STDINT_H +typedef int_least16_t yytype_int16; #else -typedef unsigned short int yytype_uint16; +typedef short yytype_int16; #endif -#ifdef YYTYPE_INT16 -typedef YYTYPE_INT16 yytype_int16; +#if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__ +typedef __UINT_LEAST8_TYPE__ yytype_uint8; +#elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \ + && UINT_LEAST8_MAX <= INT_MAX) +typedef uint_least8_t yytype_uint8; +#elif !defined __UINT_LEAST8_MAX__ && UCHAR_MAX <= INT_MAX +typedef unsigned char yytype_uint8; #else -typedef short int yytype_int16; +typedef short yytype_uint8; +#endif + +#if defined __UINT_LEAST16_MAX__ && __UINT_LEAST16_MAX__ <= __INT_MAX__ +typedef __UINT_LEAST16_TYPE__ yytype_uint16; +#elif (!defined __UINT_LEAST16_MAX__ && defined YY_STDINT_H \ + && UINT_LEAST16_MAX <= INT_MAX) +typedef uint_least16_t yytype_uint16; +#elif !defined __UINT_LEAST16_MAX__ && USHRT_MAX <= INT_MAX +typedef unsigned short yytype_uint16; +#else +typedef int yytype_uint16; +#endif + +#ifndef YYPTRDIFF_T +# if defined __PTRDIFF_TYPE__ && defined __PTRDIFF_MAX__ +# define YYPTRDIFF_T __PTRDIFF_TYPE__ +# define YYPTRDIFF_MAXIMUM __PTRDIFF_MAX__ +# elif defined PTRDIFF_MAX +# ifndef ptrdiff_t +# include <stddef.h> /* INFRINGES ON USER NAME SPACE */ +# endif +# define YYPTRDIFF_T ptrdiff_t +# define YYPTRDIFF_MAXIMUM PTRDIFF_MAX +# else +# define YYPTRDIFF_T long +# define YYPTRDIFF_MAXIMUM LONG_MAX +# endif #endif #ifndef YYSIZE_T @@ -531,15 +595,27 @@ # define YYSIZE_T __SIZE_TYPE__ # elif defined size_t # define YYSIZE_T size_t -# elif ! defined YYSIZE_T +# elif defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__ # include <stddef.h> /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # else -# define YYSIZE_T unsigned int +# define YYSIZE_T unsigned # endif #endif -#define YYSIZE_MAXIMUM ((YYSIZE_T) -1) +#define YYSIZE_MAXIMUM \ + YY_CAST (YYPTRDIFF_T, \ + (YYPTRDIFF_MAXIMUM < YY_CAST (YYSIZE_T, -1) \ + ? YYPTRDIFF_MAXIMUM \ + : YY_CAST (YYSIZE_T, -1))) + +#define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X)) + +/* Stored state numbers (used for stacks). */ +typedef yytype_uint8 yy_state_t; + +/* State numbers in computations. */ +typedef int yy_state_fast_t; #ifndef YY_ # if defined YYENABLE_NLS && YYENABLE_NLS @@ -553,30 +629,19 @@ # endif #endif -#ifndef YY_ATTRIBUTE -# if (defined __GNUC__ \ - && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__))) \ - || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C -# define YY_ATTRIBUTE(Spec) __attribute__(Spec) +#ifndef YY_ATTRIBUTE_PURE +# if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__) +# define YY_ATTRIBUTE_PURE __attribute__ ((__pure__)) # else -# define YY_ATTRIBUTE(Spec) /* empty */ +# define YY_ATTRIBUTE_PURE # endif #endif -#ifndef YY_ATTRIBUTE_PURE -# define YY_ATTRIBUTE_PURE YY_ATTRIBUTE ((__pure__)) -#endif - #ifndef YY_ATTRIBUTE_UNUSED -# define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__)) -#endif - -#if !defined _Noreturn \ - && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112) -# if defined _MSC_VER && 1200 <= _MSC_VER -# define _Noreturn __declspec (noreturn) +# if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__) +# define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__)) # else -# define _Noreturn YY_ATTRIBUTE ((__noreturn__)) +# define YY_ATTRIBUTE_UNUSED # endif #endif @@ -587,13 +652,13 @@ # define YYUSE(E) /* empty */ #endif -#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ +#if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ /* Suppress an incorrect diagnostic about yylval being uninitialized. */ -# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ - _Pragma ("GCC diagnostic push") \ - _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\ +# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ + _Pragma ("GCC diagnostic push") \ + _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \ _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") -# define YY_IGNORE_MAYBE_UNINITIALIZED_END \ +# define YY_IGNORE_MAYBE_UNINITIALIZED_END \ _Pragma ("GCC diagnostic pop") #else # define YY_INITIAL_VALUE(Value) Value @@ -606,6 +671,20 @@ # define YY_INITIAL_VALUE(Value) /* Nothing. */ #endif +#if defined __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__ +# define YY_IGNORE_USELESS_CAST_BEGIN \ + _Pragma ("GCC diagnostic push") \ + _Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"") +# define YY_IGNORE_USELESS_CAST_END \ + _Pragma ("GCC diagnostic pop") +#endif +#ifndef YY_IGNORE_USELESS_CAST_BEGIN +# define YY_IGNORE_USELESS_CAST_BEGIN +# define YY_IGNORE_USELESS_CAST_END +#endif + + +#define YY_ASSERT(E) ((void) (0 && (E))) #if ! defined yyoverflow || YYERROR_VERBOSE @@ -681,17 +760,17 @@ /* A type that is properly aligned for any stack member. */ union yyalloc { - yytype_int16 yyss_alloc; + yy_state_t yyss_alloc; YYSTYPE yyvs_alloc; }; /* The size of the maximum gap between one aligned stack and the next. */ -# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) +# define YYSTACK_GAP_MAXIMUM (YYSIZEOF (union yyalloc) - 1) /* The size of an array large to enough to hold all stacks, each with N elements. */ # define YYSTACK_BYTES(N) \ - ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ + ((N) * (YYSIZEOF (yy_state_t) + YYSIZEOF (YYSTYPE)) \ + YYSTACK_GAP_MAXIMUM) # define YYCOPY_NEEDED 1 @@ -704,11 +783,11 @@ # define YYSTACK_RELOCATE(Stack_alloc, Stack) \ do \ { \ - YYSIZE_T yynewbytes; \ + YYPTRDIFF_T yynewbytes; \ YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ Stack = &yyptr->Stack_alloc; \ - yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ - yyptr += yynewbytes / sizeof (*yyptr); \ + yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \ + yyptr += yynewbytes / YYSIZEOF (*yyptr); \ } \ while (0) @@ -720,12 +799,12 @@ # ifndef YYCOPY # if defined __GNUC__ && 1 < __GNUC__ # define YYCOPY(Dst, Src, Count) \ - __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src))) + __builtin_memcpy (Dst, Src, YY_CAST (YYSIZE_T, (Count)) * sizeof (*(Src))) # else # define YYCOPY(Dst, Src, Count) \ do \ { \ - YYSIZE_T yyi; \ + YYPTRDIFF_T yyi; \ for (yyi = 0; yyi < (Count); yyi++) \ (Dst)[yyi] = (Src)[yyi]; \ } \ @@ -748,17 +827,18 @@ /* YYNSTATES -- Number of states. */ #define YYNSTATES 219 -/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned - by yylex, with out-of-bounds checking. */ #define YYUNDEFTOK 2 #define YYMAXUTOK 290 + +/* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM + as returned by yylex, with out-of-bounds checking. */ #define YYTRANSLATE(YYX) \ - ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) + (0 <= (YYX) && (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) /* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM - as returned by yylex, without out-of-bounds checking. */ -static const yytype_uint8 yytranslate[] = + as returned by yylex. */ +static const yytype_int8 yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -794,7 +874,7 @@ #if YYDEBUG /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ -static const yytype_uint16 yyrline[] = +static const yytype_int16 yyrline[] = { 0, 439, 439, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 463, 464, 465, 469, 477, 494, 499, @@ -840,7 +920,7 @@ # ifdef YYPRINT /* YYTOKNUM[NUM] -- (External) token number corresponding to the (internal) symbol number NUM (which must be that of a token). */ -static const yytype_uint16 yytoknum[] = +static const yytype_int16 yytoknum[] = { 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, @@ -851,15 +931,15 @@ }; # endif -#define YYPACT_NINF -181 +#define YYPACT_NINF (-181) -#define yypact_value_is_default(Yystate) \ - (!!((Yystate) == (-181))) +#define yypact_value_is_default(Yyn) \ + ((Yyn) == YYPACT_NINF) -#define YYTABLE_NINF -123 +#define YYTABLE_NINF (-123) -#define yytable_value_is_error(Yytable_value) \ - (!!((Yytable_value) == (-123))) +#define yytable_value_is_error(Yyn) \ + ((Yyn) == YYTABLE_NINF) /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ @@ -892,7 +972,7 @@ /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. Performed when YYTABLE does not specify something else to do. Zero means the default is an error. */ -static const yytype_uint8 yydefact[] = +static const yytype_int8 yydefact[] = { 87, 92, 99, 36, 37, 39, 40, 38, 41, 42, 93, 0, 0, 35, 87, 0, 87, 87, 87, 87, @@ -1175,7 +1255,7 @@ /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ -static const yytype_uint8 yystos[] = +static const yytype_int8 yystos[] = { 0, 3, 4, 6, 7, 8, 9, 10, 14, 15, 17, 19, 22, 23, 24, 33, 40, 42, 43, 44, @@ -1202,7 +1282,7 @@ }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ -static const yytype_uint8 yyr1[] = +static const yytype_int8 yyr1[] = { 0, 59, 60, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 62, 63, 64, 65, @@ -1220,7 +1300,7 @@ }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ -static const yytype_uint8 yyr2[] = +static const yytype_int8 yyr2[] = { 0, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 2, 4, 2, @@ -1250,22 +1330,22 @@ #define YYRECOVERING() (!!yyerrstatus) -#define YYBACKUP(Token, Value) \ -do \ - if (yychar == YYEMPTY) \ - { \ - yychar = (Token); \ - yylval = (Value); \ - YYPOPSTACK (yylen); \ - yystate = *yyssp; \ - goto yybackup; \ - } \ - else \ - { \ - yyerror (parser, YY_("syntax error: cannot back up")); \ - YYERROR; \ - } \ -while (0) +#define YYBACKUP(Token, Value) \ + do \ + if (yychar == YYEMPTY) \ + { \ + yychar = (Token); \ + yylval = (Value); \ + YYPOPSTACK (yylen); \ + yystate = *yyssp; \ + goto yybackup; \ + } \ + else \ + { \ + yyerror (parser, YY_("syntax error: cannot back up")); \ + YYERROR; \ + } \ + while (0) /* Error token number */ #define YYTERROR 1 @@ -1305,38 +1385,40 @@ } while (0) -/*----------------------------------------. -| Print this symbol's value on YYOUTPUT. | -`----------------------------------------*/ +/*-----------------------------------. +| Print this symbol's value on YYO. | +`-----------------------------------*/ static void -yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, struct rust_parser *parser) +yy_symbol_value_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep, struct rust_parser *parser) { - FILE *yyo = yyoutput; - YYUSE (yyo); + FILE *yyoutput = yyo; + YYUSE (yyoutput); YYUSE (parser); if (!yyvaluep) return; # ifdef YYPRINT if (yytype < YYNTOKENS) - YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); + YYPRINT (yyo, yytoknum[yytype], *yyvaluep); # endif + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN YYUSE (yytype); + YY_IGNORE_MAYBE_UNINITIALIZED_END } -/*--------------------------------. -| Print this symbol on YYOUTPUT. | -`--------------------------------*/ +/*---------------------------. +| Print this symbol on YYO. | +`---------------------------*/ static void -yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, struct rust_parser *parser) +yy_symbol_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep, struct rust_parser *parser) { - YYFPRINTF (yyoutput, "%s %s (", + YYFPRINTF (yyo, "%s %s (", yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]); - yy_symbol_value_print (yyoutput, yytype, yyvaluep, parser); - YYFPRINTF (yyoutput, ")"); + yy_symbol_value_print (yyo, yytype, yyvaluep, parser); + YYFPRINTF (yyo, ")"); } /*------------------------------------------------------------------. @@ -1345,7 +1427,7 @@ `------------------------------------------------------------------*/ static void -yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop) +yy_stack_print (yy_state_t *yybottom, yy_state_t *yytop) { YYFPRINTF (stderr, "Stack now"); for (; yybottom <= yytop; yybottom++) @@ -1368,20 +1450,20 @@ `------------------------------------------------*/ static void -yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule, struct rust_parser *parser) +yy_reduce_print (yy_state_t *yyssp, YYSTYPE *yyvsp, int yyrule, struct rust_parser *parser) { - unsigned long int yylno = yyrline[yyrule]; + int yylno = yyrline[yyrule]; int yynrhs = yyr2[yyrule]; int yyi; - YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", + YYFPRINTF (stderr, "Reducing stack by rule %d (line %d):\n", yyrule - 1, yylno); /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { YYFPRINTF (stderr, " $%d = ", yyi + 1); yy_symbol_print (stderr, - yystos[yyssp[yyi + 1 - yynrhs]], - &(yyvsp[(yyi + 1) - (yynrhs)]) + yystos[+yyssp[yyi + 1 - yynrhs]], + &yyvsp[(yyi + 1) - (yynrhs)] , parser); YYFPRINTF (stderr, "\n"); } @@ -1425,13 +1507,13 @@ # ifndef yystrlen # if defined __GLIBC__ && defined _STRING_H -# define yystrlen strlen +# define yystrlen(S) (YY_CAST (YYPTRDIFF_T, strlen (S))) # else /* Return the length of YYSTR. */ -static YYSIZE_T +static YYPTRDIFF_T yystrlen (const char *yystr) { - YYSIZE_T yylen; + YYPTRDIFF_T yylen; for (yylen = 0; yystr[yylen]; yylen++) continue; return yylen; @@ -1467,12 +1549,12 @@ backslash-backslash). YYSTR is taken from yytname. If YYRES is null, do not copy; instead, return the length of what the result would have been. */ -static YYSIZE_T +static YYPTRDIFF_T yytnamerr (char *yyres, const char *yystr) { if (*yystr == '"') { - YYSIZE_T yyn = 0; + YYPTRDIFF_T yyn = 0; char const *yyp = yystr; for (;;) @@ -1485,7 +1567,10 @@ case '\\': if (*++yyp != '\\') goto do_not_strip_quotes; - /* Fall through. */ + else + goto append; + + append: default: if (yyres) yyres[yyn] = *yyp; @@ -1500,10 +1585,10 @@ do_not_strip_quotes: ; } - if (! yyres) + if (yyres) + return yystpcpy (yyres, yystr) - yyres; + else return yystrlen (yystr); - - return yystpcpy (yyres, yystr) - yyres; } # endif @@ -1516,19 +1601,19 @@ *YYMSG_ALLOC to the required number of bytes. Return 2 if the required number of bytes is too large to store. */ static int -yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, - yytype_int16 *yyssp, int yytoken) +yysyntax_error (YYPTRDIFF_T *yymsg_alloc, char **yymsg, + yy_state_t *yyssp, int yytoken) { - YYSIZE_T yysize0 = yytnamerr (YY_NULLPTRPTR, yytname[yytoken]); - YYSIZE_T yysize = yysize0; enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; /* Internationalized format string. */ const char *yyformat = YY_NULLPTRPTR; - /* Arguments of yyformat. */ + /* Arguments of yyformat: reported tokens (one for the "unexpected", + one per "expected"). */ char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; - /* Number of reported tokens (one for the "unexpected", one per - "expected"). */ + /* Actual size of YYARG. */ int yycount = 0; + /* Cumulated lengths of YYARG. */ + YYPTRDIFF_T yysize = 0; /* There are many possibilities here to consider: - If this state is a consistent state with a default action, then @@ -1555,7 +1640,9 @@ */ if (yytoken != YYEMPTY) { - int yyn = yypact[*yyssp]; + int yyn = yypact[+*yyssp]; + YYPTRDIFF_T yysize0 = yytnamerr (YY_NULLPTRPTR, yytname[yytoken]); + yysize = yysize0; yyarg[yycount++] = yytname[yytoken]; if (!yypact_value_is_default (yyn)) { @@ -1580,11 +1667,12 @@ } yyarg[yycount++] = yytname[yyx]; { - YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTRPTR, yytname[yyx]); - if (! (yysize <= yysize1 - && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) + YYPTRDIFF_T yysize1 + = yysize + yytnamerr (YY_NULLPTRPTR, yytname[yyx]); + if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM) + yysize = yysize1; + else return 2; - yysize = yysize1; } } } @@ -1596,6 +1684,7 @@ case N: \ yyformat = S; \ break + default: /* Avoid compiler warnings. */ YYCASE_(0, YY_("syntax error")); YYCASE_(1, YY_("syntax error, unexpected %s")); YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); @@ -1606,10 +1695,13 @@ } { - YYSIZE_T yysize1 = yysize + yystrlen (yyformat); - if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) + /* Don't count the "%s"s in the final size, but reserve room for + the terminator. */ + YYPTRDIFF_T yysize1 = yysize + (yystrlen (yyformat) - 2 * yycount) + 1; + if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM) + yysize = yysize1; + else return 2; - yysize = yysize1; } if (*yymsg_alloc < yysize) @@ -1635,8 +1727,8 @@ } else { - yyp++; - yyformat++; + ++yyp; + ++yyformat; } } return 0; @@ -1684,7 +1776,7 @@ /* Number of syntax errors so far. */ int yynerrs; - int yystate; + yy_state_fast_t yystate; /* Number of tokens to shift before error messages enabled. */ int yyerrstatus; @@ -1696,16 +1788,16 @@ to xreallocate them elsewhere. */ /* The state stack. */ - yytype_int16 yyssa[YYINITDEPTH]; - yytype_int16 *yyss; - yytype_int16 *yyssp; + yy_state_t yyssa[YYINITDEPTH]; + yy_state_t *yyss; + yy_state_t *yyssp; /* The semantic value stack. */ YYSTYPE yyvsa[YYINITDEPTH]; YYSTYPE *yyvs; YYSTYPE *yyvsp; - YYSIZE_T yystacksize; + YYPTRDIFF_T yystacksize; int yyn; int yyresult; @@ -1719,7 +1811,7 @@ /* Buffer for error messages, and its allocated size. */ char yymsgbuf[128]; char *yymsg = yymsgbuf; - YYSIZE_T yymsg_alloc = sizeof yymsgbuf; + YYPTRDIFF_T yymsg_alloc = sizeof yymsgbuf; #endif #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) @@ -1740,46 +1832,54 @@ yychar = YYEMPTY; /* Cause a token to be read. */ goto yysetstate; + /*------------------------------------------------------------. -| yynewstate -- Push a new state, which is found in yystate. | +| yynewstate -- push a new state, which is found in yystate. | `------------------------------------------------------------*/ - yynewstate: +yynewstate: /* In all cases, when you get here, the value and location stacks have just been pushed. So pushing a state here evens the stacks. */ yyssp++; - yysetstate: - *yyssp = yystate; + +/*--------------------------------------------------------------------. +| yysetstate -- set current state (the top of the stack) to yystate. | +`--------------------------------------------------------------------*/ +yysetstate: + YYDPRINTF ((stderr, "Entering state %d\n", yystate)); + YY_ASSERT (0 <= yystate && yystate < YYNSTATES); + YY_IGNORE_USELESS_CAST_BEGIN + *yyssp = YY_CAST (yy_state_t, yystate); + YY_IGNORE_USELESS_CAST_END if (yyss + yystacksize - 1 <= yyssp) +#if !defined yyoverflow && !defined YYSTACK_RELOCATE + goto yyexhaustedlab; +#else { /* Get the current used size of the three stacks, in elements. */ - YYSIZE_T yysize = yyssp - yyss + 1; + YYPTRDIFF_T yysize = yyssp - yyss + 1; -#ifdef yyoverflow +# if defined yyoverflow { /* Give user a chance to xreallocate the stack. Use copies of these so that the &'s don't force the real ones into memory. */ + yy_state_t *yyss1 = yyss; YYSTYPE *yyvs1 = yyvs; - yytype_int16 *yyss1 = yyss; /* Each stack pointer address is followed by the size of the data in use in that stack, in bytes. This used to be a conditional around just the two extra args, but that might be undefined if yyoverflow is a macro. */ yyoverflow (YY_("memory exhausted"), - &yyss1, yysize * sizeof (*yyssp), - &yyvs1, yysize * sizeof (*yyvsp), + &yyss1, yysize * YYSIZEOF (*yyssp), + &yyvs1, yysize * YYSIZEOF (*yyvsp), &yystacksize); - yyss = yyss1; yyvs = yyvs1; } -#else /* no yyoverflow */ -# ifndef YYSTACK_RELOCATE - goto yyexhaustedlab; -# else +# else /* defined YYSTACK_RELOCATE */ /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) goto yyexhaustedlab; @@ -1788,42 +1888,43 @@ yystacksize = YYMAXDEPTH; { - yytype_int16 *yyss1 = yyss; + yy_state_t *yyss1 = yyss; union yyalloc *yyptr = - (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); + YY_CAST (union yyalloc *, + YYSTACK_ALLOC (YY_CAST (YYSIZE_T, YYSTACK_BYTES (yystacksize)))); if (! yyptr) goto yyexhaustedlab; YYSTACK_RELOCATE (yyss_alloc, yyss); YYSTACK_RELOCATE (yyvs_alloc, yyvs); -# undef YYSTACK_RELOCATE +# undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); } # endif -#endif /* no yyoverflow */ yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; - YYDPRINTF ((stderr, "Stack size increased to %lu\n", - (unsigned long int) yystacksize)); + YY_IGNORE_USELESS_CAST_BEGIN + YYDPRINTF ((stderr, "Stack size increased to %ld\n", + YY_CAST (long, yystacksize))); + YY_IGNORE_USELESS_CAST_END if (yyss + yystacksize - 1 <= yyssp) YYABORT; } - - YYDPRINTF ((stderr, "Entering state %d\n", yystate)); +#endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */ if (yystate == YYFINAL) YYACCEPT; goto yybackup; + /*-----------. | yybackup. | `-----------*/ yybackup: - /* Do appropriate processing given the current state. Read a lookahead token if we need one and don't already have one. */ @@ -1873,15 +1974,13 @@ /* Shift the lookahead token. */ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); - - /* Discard the shifted token. */ - yychar = YYEMPTY; - yystate = yyn; YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; YY_IGNORE_MAYBE_UNINITIALIZED_END + /* Discard the shifted token. */ + yychar = YYEMPTY; goto yynewstate; @@ -1896,7 +1995,7 @@ /*-----------------------------. -| yyreduce -- Do a reduction. | +| yyreduce -- do a reduction. | `-----------------------------*/ yyreduce: /* yyn is the number of a rule to reduce with. */ @@ -1916,29 +2015,29 @@ YY_REDUCE_PRINT (yyn); switch (yyn) { - case 2: -#line 440 "rust-exp.y" /* yacc.c:1646 */ - { + case 2: +#line 440 "rust-exp.y" + { /* If we are completing and see a valid parse, rust_ast will already have been set. */ if (parser->rust_ast == NULL) parser->rust_ast = (yyvsp[0].op); } -#line 1929 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 2028 "rust-exp.c.tmp" break; case 16: -#line 470 "rust-exp.y" /* yacc.c:1646 */ - { +#line 470 "rust-exp.y" + { (yyvsp[-1].params)->push_back ((yyvsp[-3].op)); error (_("Tuple expressions not supported yet")); } -#line 1938 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 2037 "rust-exp.c.tmp" break; case 17: -#line 478 "rust-exp.y" /* yacc.c:1646 */ - { +#line 478 "rust-exp.y" + { struct typed_val_int val; val.type @@ -1948,18 +2047,18 @@ val.val = 0; (yyval.op) = parser->ast_literal (val); } -#line 1953 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 2052 "rust-exp.c.tmp" break; case 18: -#line 495 "rust-exp.y" /* yacc.c:1646 */ - { (yyval.op) = parser->ast_struct ((yyvsp[-3].op), (yyvsp[-1].field_inits)); } -#line 1959 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 495 "rust-exp.y" + { (yyval.op) = parser->ast_struct ((yyvsp[-3].op), (yyvsp[-1].field_inits)); } +#line 2058 "rust-exp.c.tmp" break; case 19: -#line 500 "rust-exp.y" /* yacc.c:1646 */ - { +#line 500 "rust-exp.y" + { struct set_field sf; sf.name.ptr = NULL; @@ -1968,54 +2067,54 @@ (yyval.one_field_init) = sf; } -#line 1973 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 2072 "rust-exp.c.tmp" break; case 20: -#line 510 "rust-exp.y" /* yacc.c:1646 */ - { +#line 510 "rust-exp.y" + { struct set_field sf; sf.name = (yyvsp[-2].sval); sf.init = (yyvsp[0].op); (yyval.one_field_init) = sf; } -#line 1985 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 2084 "rust-exp.c.tmp" break; case 21: -#line 518 "rust-exp.y" /* yacc.c:1646 */ - { +#line 518 "rust-exp.y" + { struct set_field sf; sf.name = (yyvsp[0].sval); sf.init = parser->ast_path ((yyvsp[0].sval), NULL); (yyval.one_field_init) = sf; } -#line 1997 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 2096 "rust-exp.c.tmp" break; case 22: -#line 529 "rust-exp.y" /* yacc.c:1646 */ - { +#line 529 "rust-exp.y" + { (yyval.field_inits) = parser->new_set_vector (); } -#line 2005 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 2104 "rust-exp.c.tmp" break; case 23: -#line 533 "rust-exp.y" /* yacc.c:1646 */ - { +#line 533 "rust-exp.y" + { rust_set_vector *result = parser->new_set_vector (); result->push_back ((yyvsp[0].one_field_init)); (yyval.field_inits) = result; } -#line 2015 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 2114 "rust-exp.c.tmp" break; case 24: -#line 539 "rust-exp.y" /* yacc.c:1646 */ - { +#line 539 "rust-exp.y" + { struct set_field sf; sf.name = (yyvsp[-4].sval); @@ -2023,12 +2122,12 @@ (yyvsp[0].field_inits)->push_back (sf); (yyval.field_inits) = (yyvsp[0].field_inits); } -#line 2028 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 2127 "rust-exp.c.tmp" break; case 25: -#line 548 "rust-exp.y" /* yacc.c:1646 */ - { +#line 548 "rust-exp.y" + { struct set_field sf; sf.name = (yyvsp[-2].sval); @@ -2036,90 +2135,90 @@ (yyvsp[0].field_inits)->push_back (sf); (yyval.field_inits) = (yyvsp[0].field_inits); } -#line 2041 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 2140 "rust-exp.c.tmp" break; case 26: -#line 560 "rust-exp.y" /* yacc.c:1646 */ - { (yyval.op) = parser->ast_call_ish (OP_ARRAY, NULL, (yyvsp[-1].params)); } -#line 2047 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 560 "rust-exp.y" + { (yyval.op) = parser->ast_call_ish (OP_ARRAY, NULL, (yyvsp[-1].params)); } +#line 2146 "rust-exp.c.tmp" break; case 27: -#line 562 "rust-exp.y" /* yacc.c:1646 */ - { (yyval.op) = parser->ast_call_ish (OP_ARRAY, NULL, (yyvsp[-1].params)); } -#line 2053 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 562 "rust-exp.y" + { (yyval.op) = parser->ast_call_ish (OP_ARRAY, NULL, (yyvsp[-1].params)); } +#line 2152 "rust-exp.c.tmp" break; case 28: -#line 564 "rust-exp.y" /* yacc.c:1646 */ - { (yyval.op) = parser->ast_operation (OP_RUST_ARRAY, (yyvsp[-3].op), (yyvsp[-1].op)); } -#line 2059 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 564 "rust-exp.y" + { (yyval.op) = parser->ast_operation (OP_RUST_ARRAY, (yyvsp[-3].op), (yyvsp[-1].op)); } +#line 2158 "rust-exp.c.tmp" break; case 29: -#line 566 "rust-exp.y" /* yacc.c:1646 */ - { (yyval.op) = parser->ast_operation (OP_RUST_ARRAY, (yyvsp[-3].op), (yyvsp[-1].op)); } -#line 2065 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 566 "rust-exp.y" + { (yyval.op) = parser->ast_operation (OP_RUST_ARRAY, (yyvsp[-3].op), (yyvsp[-1].op)); } +#line 2164 "rust-exp.c.tmp" break; case 30: -#line 571 "rust-exp.y" /* yacc.c:1646 */ - { (yyval.op) = parser->ast_range ((yyvsp[-1].op), NULL, false); } -#line 2071 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 571 "rust-exp.y" + { (yyval.op) = parser->ast_range ((yyvsp[-1].op), NULL, false); } +#line 2170 "rust-exp.c.tmp" break; case 31: -#line 573 "rust-exp.y" /* yacc.c:1646 */ - { (yyval.op) = parser->ast_range ((yyvsp[-2].op), (yyvsp[0].op), false); } -#line 2077 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 573 "rust-exp.y" + { (yyval.op) = parser->ast_range ((yyvsp[-2].op), (yyvsp[0].op), false); } +#line 2176 "rust-exp.c.tmp" break; case 32: -#line 575 "rust-exp.y" /* yacc.c:1646 */ - { (yyval.op) = parser->ast_range ((yyvsp[-2].op), (yyvsp[0].op), true); } -#line 2083 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 575 "rust-exp.y" + { (yyval.op) = parser->ast_range ((yyvsp[-2].op), (yyvsp[0].op), true); } +#line 2182 "rust-exp.c.tmp" break; case 33: -#line 577 "rust-exp.y" /* yacc.c:1646 */ - { (yyval.op) = parser->ast_range (NULL, (yyvsp[0].op), false); } -#line 2089 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 577 "rust-exp.y" + { (yyval.op) = parser->ast_range (NULL, (yyvsp[0].op), false); } +#line 2188 "rust-exp.c.tmp" break; case 34: -#line 579 "rust-exp.y" /* yacc.c:1646 */ - { (yyval.op) = parser->ast_range (NULL, (yyvsp[0].op), true); } -#line 2095 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 579 "rust-exp.y" + { (yyval.op) = parser->ast_range (NULL, (yyvsp[0].op), true); } +#line 2194 "rust-exp.c.tmp" break; case 35: -#line 581 "rust-exp.y" /* yacc.c:1646 */ - { (yyval.op) = parser->ast_range (NULL, NULL, false); } -#line 2101 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 581 "rust-exp.y" + { (yyval.op) = parser->ast_range (NULL, NULL, false); } +#line 2200 "rust-exp.c.tmp" break; case 36: -#line 586 "rust-exp.y" /* yacc.c:1646 */ - { (yyval.op) = parser->ast_literal ((yyvsp[0].typed_val_int)); } -#line 2107 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 586 "rust-exp.y" + { (yyval.op) = parser->ast_literal ((yyvsp[0].typed_val_int)); } +#line 2206 "rust-exp.c.tmp" break; case 37: -#line 588 "rust-exp.y" /* yacc.c:1646 */ - { (yyval.op) = parser->ast_literal ((yyvsp[0].typed_val_int)); } -#line 2113 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 588 "rust-exp.y" + { (yyval.op) = parser->ast_literal ((yyvsp[0].typed_val_int)); } +#line 2212 "rust-exp.c.tmp" break; case 38: -#line 590 "rust-exp.y" /* yacc.c:1646 */ - { (yyval.op) = parser->ast_dliteral ((yyvsp[0].typed_val_float)); } -#line 2119 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 590 "rust-exp.y" + { (yyval.op) = parser->ast_dliteral ((yyvsp[0].typed_val_float)); } +#line 2218 "rust-exp.c.tmp" break; case 39: -#line 592 "rust-exp.y" /* yacc.c:1646 */ - { +#line 592 "rust-exp.y" + { struct set_field field; struct typed_val_int val; struct stoken token; @@ -2146,18 +2245,18 @@ (yyval.op) = parser->ast_struct (parser->ast_path (token, NULL), fields); } -#line 2151 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 2250 "rust-exp.c.tmp" break; case 40: -#line 620 "rust-exp.y" /* yacc.c:1646 */ - { (yyval.op) = parser->ast_string ((yyvsp[0].sval)); } -#line 2157 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 620 "rust-exp.y" + { (yyval.op) = parser->ast_string ((yyvsp[0].sval)); } +#line 2256 "rust-exp.c.tmp" break; case 41: -#line 622 "rust-exp.y" /* yacc.c:1646 */ - { +#line 622 "rust-exp.y" + { struct typed_val_int val; val.type = language_bool_type (parser->language (), @@ -2165,12 +2264,12 @@ val.val = 1; (yyval.op) = parser->ast_literal (val); } -#line 2170 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 2269 "rust-exp.c.tmp" break; case 42: -#line 631 "rust-exp.y" /* yacc.c:1646 */ - { +#line 631 "rust-exp.y" + { struct typed_val_int val; val.type = language_bool_type (parser->language (), @@ -2178,318 +2277,318 @@ val.val = 0; (yyval.op) = parser->ast_literal (val); } -#line 2183 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 2282 "rust-exp.c.tmp" break; case 43: -#line 643 "rust-exp.y" /* yacc.c:1646 */ - { (yyval.op) = parser->ast_structop ((yyvsp[-2].op), (yyvsp[0].sval).ptr, 0); } -#line 2189 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 643 "rust-exp.y" + { (yyval.op) = parser->ast_structop ((yyvsp[-2].op), (yyvsp[0].sval).ptr, 0); } +#line 2288 "rust-exp.c.tmp" break; case 44: -#line 645 "rust-exp.y" /* yacc.c:1646 */ - { +#line 645 "rust-exp.y" + { (yyval.op) = parser->ast_structop ((yyvsp[-2].op), (yyvsp[0].sval).ptr, 1); parser->rust_ast = (yyval.op); } -#line 2198 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 2297 "rust-exp.c.tmp" break; case 45: -#line 650 "rust-exp.y" /* yacc.c:1646 */ - { (yyval.op) = parser->ast_structop_anonymous ((yyvsp[-2].op), (yyvsp[0].typed_val_int)); } -#line 2204 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 650 "rust-exp.y" + { (yyval.op) = parser->ast_structop_anonymous ((yyvsp[-2].op), (yyvsp[0].typed_val_int)); } +#line 2303 "rust-exp.c.tmp" break; case 46: -#line 655 "rust-exp.y" /* yacc.c:1646 */ - { (yyval.op) = parser->ast_operation (BINOP_SUBSCRIPT, (yyvsp[-3].op), (yyvsp[-1].op)); } -#line 2210 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 655 "rust-exp.y" + { (yyval.op) = parser->ast_operation (BINOP_SUBSCRIPT, (yyvsp[-3].op), (yyvsp[-1].op)); } +#line 2309 "rust-exp.c.tmp" break; case 47: -#line 660 "rust-exp.y" /* yacc.c:1646 */ - { (yyval.op) = parser->ast_unary (UNOP_PLUS, (yyvsp[0].op)); } -#line 2216 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 660 "rust-exp.y" + { (yyval.op) = parser->ast_unary (UNOP_PLUS, (yyvsp[0].op)); } +#line 2315 "rust-exp.c.tmp" break; case 48: -#line 663 "rust-exp.y" /* yacc.c:1646 */ - { (yyval.op) = parser->ast_unary (UNOP_NEG, (yyvsp[0].op)); } -#line 2222 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 663 "rust-exp.y" + { (yyval.op) = parser->ast_unary (UNOP_NEG, (yyvsp[0].op)); } +#line 2321 "rust-exp.c.tmp" break; case 49: -#line 666 "rust-exp.y" /* yacc.c:1646 */ - { +#line 666 "rust-exp.y" + { /* Note that we provide a Rust-specific evaluator override for UNOP_COMPLEMENT, so it can do the right thing for both bool and integral values. */ (yyval.op) = parser->ast_unary (UNOP_COMPLEMENT, (yyvsp[0].op)); } -#line 2234 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 2333 "rust-exp.c.tmp" break; case 50: -#line 675 "rust-exp.y" /* yacc.c:1646 */ - { (yyval.op) = parser->ast_unary (UNOP_IND, (yyvsp[0].op)); } -#line 2240 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 675 "rust-exp.y" + { (yyval.op) = parser->ast_unary (UNOP_IND, (yyvsp[0].op)); } +#line 2339 "rust-exp.c.tmp" break; case 51: -#line 678 "rust-exp.y" /* yacc.c:1646 */ - { (yyval.op) = parser->ast_unary (UNOP_ADDR, (yyvsp[0].op)); } -#line 2246 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 678 "rust-exp.y" + { (yyval.op) = parser->ast_unary (UNOP_ADDR, (yyvsp[0].op)); } +#line 2345 "rust-exp.c.tmp" break; case 52: -#line 681 "rust-exp.y" /* yacc.c:1646 */ - { (yyval.op) = parser->ast_unary (UNOP_ADDR, (yyvsp[0].op)); } -#line 2252 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 681 "rust-exp.y" + { (yyval.op) = parser->ast_unary (UNOP_ADDR, (yyvsp[0].op)); } +#line 2351 "rust-exp.c.tmp" break; case 53: -#line 683 "rust-exp.y" /* yacc.c:1646 */ - { (yyval.op) = parser->ast_unary (UNOP_SIZEOF, (yyvsp[-1].op)); } -#line 2258 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 683 "rust-exp.y" + { (yyval.op) = parser->ast_unary (UNOP_SIZEOF, (yyvsp[-1].op)); } +#line 2357 "rust-exp.c.tmp" break; case 58: -#line 695 "rust-exp.y" /* yacc.c:1646 */ - { (yyval.op) = parser->ast_operation (BINOP_MUL, (yyvsp[-2].op), (yyvsp[0].op)); } -#line 2264 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 695 "rust-exp.y" + { (yyval.op) = parser->ast_operation (BINOP_MUL, (yyvsp[-2].op), (yyvsp[0].op)); } +#line 2363 "rust-exp.c.tmp" break; case 59: -#line 698 "rust-exp.y" /* yacc.c:1646 */ - { (yyval.op) = parser->ast_operation (BINOP_REPEAT, (yyvsp[-2].op), (yyvsp[0].op)); } -#line 2270 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 698 "rust-exp.y" + { (yyval.op) = parser->ast_operation (BINOP_REPEAT, (yyvsp[-2].op), (yyvsp[0].op)); } +#line 2369 "rust-exp.c.tmp" break; case 60: -#line 701 "rust-exp.y" /* yacc.c:1646 */ - { (yyval.op) = parser->ast_operation (BINOP_DIV, (yyvsp[-2].op), (yyvsp[0].op)); } -#line 2276 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 701 "rust-exp.y" + { (yyval.op) = parser->ast_operation (BINOP_DIV, (yyvsp[-2].op), (yyvsp[0].op)); } +#line 2375 "rust-exp.c.tmp" break; case 61: -#line 704 "rust-exp.y" /* yacc.c:1646 */ - { (yyval.op) = parser->ast_operation (BINOP_REM, (yyvsp[-2].op), (yyvsp[0].op)); } -#line 2282 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 704 "rust-exp.y" + { (yyval.op) = parser->ast_operation (BINOP_REM, (yyvsp[-2].op), (yyvsp[0].op)); } +#line 2381 "rust-exp.c.tmp" break; case 62: -#line 707 "rust-exp.y" /* yacc.c:1646 */ - { (yyval.op) = parser->ast_operation (BINOP_LESS, (yyvsp[-2].op), (yyvsp[0].op)); } -#line 2288 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 707 "rust-exp.y" + { (yyval.op) = parser->ast_operation (BINOP_LESS, (yyvsp[-2].op), (yyvsp[0].op)); } +#line 2387 "rust-exp.c.tmp" break; case 63: -#line 710 "rust-exp.y" /* yacc.c:1646 */ - { (yyval.op) = parser->ast_operation (BINOP_GTR, (yyvsp[-2].op), (yyvsp[0].op)); } -#line 2294 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 710 "rust-exp.y" + { (yyval.op) = parser->ast_operation (BINOP_GTR, (yyvsp[-2].op), (yyvsp[0].op)); } +#line 2393 "rust-exp.c.tmp" break; case 64: -#line 713 "rust-exp.y" /* yacc.c:1646 */ - { (yyval.op) = parser->ast_operation (BINOP_BITWISE_AND, (yyvsp[-2].op), (yyvsp[0].op)); } -#line 2300 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 713 "rust-exp.y" + { (yyval.op) = parser->ast_operation (BINOP_BITWISE_AND, (yyvsp[-2].op), (yyvsp[0].op)); } +#line 2399 "rust-exp.c.tmp" break; case 65: -#line 716 "rust-exp.y" /* yacc.c:1646 */ - { (yyval.op) = parser->ast_operation (BINOP_BITWISE_IOR, (yyvsp[-2].op), (yyvsp[0].op)); } -#line 2306 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 716 "rust-exp.y" + { (yyval.op) = parser->ast_operation (BINOP_BITWISE_IOR, (yyvsp[-2].op), (yyvsp[0].op)); } +#line 2405 "rust-exp.c.tmp" break; case 66: -#line 719 "rust-exp.y" /* yacc.c:1646 */ - { (yyval.op) = parser->ast_operation (BINOP_BITWISE_XOR, (yyvsp[-2].op), (yyvsp[0].op)); } -#line 2312 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 719 "rust-exp.y" + { (yyval.op) = parser->ast_operation (BINOP_BITWISE_XOR, (yyvsp[-2].op), (yyvsp[0].op)); } +#line 2411 "rust-exp.c.tmp" break; case 67: -#line 722 "rust-exp.y" /* yacc.c:1646 */ - { (yyval.op) = parser->ast_operation (BINOP_ADD, (yyvsp[-2].op), (yyvsp[0].op)); } -#line 2318 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 722 "rust-exp.y" + { (yyval.op) = parser->ast_operation (BINOP_ADD, (yyvsp[-2].op), (yyvsp[0].op)); } +#line 2417 "rust-exp.c.tmp" break; case 68: -#line 725 "rust-exp.y" /* yacc.c:1646 */ - { (yyval.op) = parser->ast_operation (BINOP_SUB, (yyvsp[-2].op), (yyvsp[0].op)); } -#line 2324 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 725 "rust-exp.y" + { (yyval.op) = parser->ast_operation (BINOP_SUB, (yyvsp[-2].op), (yyvsp[0].op)); } +#line 2423 "rust-exp.c.tmp" break; case 69: -#line 728 "rust-exp.y" /* yacc.c:1646 */ - { (yyval.op) = parser->ast_operation (BINOP_LOGICAL_OR, (yyvsp[-2].op), (yyvsp[0].op)); } -#line 2330 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 728 "rust-exp.y" + { (yyval.op) = parser->ast_operation (BINOP_LOGICAL_OR, (yyvsp[-2].op), (yyvsp[0].op)); } +#line 2429 "rust-exp.c.tmp" break; case 70: -#line 731 "rust-exp.y" /* yacc.c:1646 */ - { (yyval.op) = parser->ast_operation (BINOP_LOGICAL_AND, (yyvsp[-2].op), (yyvsp[0].op)); } -#line 2336 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 731 "rust-exp.y" + { (yyval.op) = parser->ast_operation (BINOP_LOGICAL_AND, (yyvsp[-2].op), (yyvsp[0].op)); } +#line 2435 "rust-exp.c.tmp" break; case 71: -#line 734 "rust-exp.y" /* yacc.c:1646 */ - { (yyval.op) = parser->ast_operation (BINOP_EQUAL, (yyvsp[-2].op), (yyvsp[0].op)); } -#line 2342 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 734 "rust-exp.y" + { (yyval.op) = parser->ast_operation (BINOP_EQUAL, (yyvsp[-2].op), (yyvsp[0].op)); } +#line 2441 "rust-exp.c.tmp" break; case 72: -#line 737 "rust-exp.y" /* yacc.c:1646 */ - { (yyval.op) = parser->ast_operation (BINOP_NOTEQUAL, (yyvsp[-2].op), (yyvsp[0].op)); } -#line 2348 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 737 "rust-exp.y" + { (yyval.op) = parser->ast_operation (BINOP_NOTEQUAL, (yyvsp[-2].op), (yyvsp[0].op)); } +#line 2447 "rust-exp.c.tmp" break; case 73: -#line 740 "rust-exp.y" /* yacc.c:1646 */ - { (yyval.op) = parser->ast_operation (BINOP_LEQ, (yyvsp[-2].op), (yyvsp[0].op)); } -#line 2354 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 740 "rust-exp.y" + { (yyval.op) = parser->ast_operation (BINOP_LEQ, (yyvsp[-2].op), (yyvsp[0].op)); } +#line 2453 "rust-exp.c.tmp" break; case 74: -#line 743 "rust-exp.y" /* yacc.c:1646 */ - { (yyval.op) = parser->ast_operation (BINOP_GEQ, (yyvsp[-2].op), (yyvsp[0].op)); } -#line 2360 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 743 "rust-exp.y" + { (yyval.op) = parser->ast_operation (BINOP_GEQ, (yyvsp[-2].op), (yyvsp[0].op)); } +#line 2459 "rust-exp.c.tmp" break; case 75: -#line 746 "rust-exp.y" /* yacc.c:1646 */ - { (yyval.op) = parser->ast_operation (BINOP_LSH, (yyvsp[-2].op), (yyvsp[0].op)); } -#line 2366 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 746 "rust-exp.y" + { (yyval.op) = parser->ast_operation (BINOP_LSH, (yyvsp[-2].op), (yyvsp[0].op)); } +#line 2465 "rust-exp.c.tmp" break; case 76: -#line 749 "rust-exp.y" /* yacc.c:1646 */ - { (yyval.op) = parser->ast_operation (BINOP_RSH, (yyvsp[-2].op), (yyvsp[0].op)); } -#line 2372 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 749 "rust-exp.y" + { (yyval.op) = parser->ast_operation (BINOP_RSH, (yyvsp[-2].op), (yyvsp[0].op)); } +#line 2471 "rust-exp.c.tmp" break; case 77: -#line 754 "rust-exp.y" /* yacc.c:1646 */ - { (yyval.op) = parser->ast_cast ((yyvsp[-2].op), (yyvsp[0].op)); } -#line 2378 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 754 "rust-exp.y" + { (yyval.op) = parser->ast_cast ((yyvsp[-2].op), (yyvsp[0].op)); } +#line 2477 "rust-exp.c.tmp" break; case 78: -#line 759 "rust-exp.y" /* yacc.c:1646 */ - { (yyval.op) = parser->ast_operation (BINOP_ASSIGN, (yyvsp[-2].op), (yyvsp[0].op)); } -#line 2384 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 759 "rust-exp.y" + { (yyval.op) = parser->ast_operation (BINOP_ASSIGN, (yyvsp[-2].op), (yyvsp[0].op)); } +#line 2483 "rust-exp.c.tmp" break; case 79: -#line 764 "rust-exp.y" /* yacc.c:1646 */ - { (yyval.op) = parser->ast_compound_assignment ((yyvsp[-1].opcode), (yyvsp[-2].op), (yyvsp[0].op)); } -#line 2390 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 764 "rust-exp.y" + { (yyval.op) = parser->ast_compound_assignment ((yyvsp[-1].opcode), (yyvsp[-2].op), (yyvsp[0].op)); } +#line 2489 "rust-exp.c.tmp" break; case 80: -#line 770 "rust-exp.y" /* yacc.c:1646 */ - { (yyval.op) = (yyvsp[-1].op); } -#line 2396 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 770 "rust-exp.y" + { (yyval.op) = (yyvsp[-1].op); } +#line 2495 "rust-exp.c.tmp" break; case 81: -#line 775 "rust-exp.y" /* yacc.c:1646 */ - { +#line 775 "rust-exp.y" + { (yyval.params) = parser->new_op_vector (); (yyval.params)->push_back ((yyvsp[0].op)); } -#line 2405 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 2504 "rust-exp.c.tmp" break; case 82: -#line 780 "rust-exp.y" /* yacc.c:1646 */ - { +#line 780 "rust-exp.y" + { (yyvsp[-2].params)->push_back ((yyvsp[0].op)); (yyval.params) = (yyvsp[-2].params); } -#line 2414 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 2513 "rust-exp.c.tmp" break; case 83: -#line 788 "rust-exp.y" /* yacc.c:1646 */ - { +#line 788 "rust-exp.y" + { /* The result can't be NULL. */ (yyval.params) = parser->new_op_vector (); } -#line 2423 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 2522 "rust-exp.c.tmp" break; case 84: -#line 793 "rust-exp.y" /* yacc.c:1646 */ - { (yyval.params) = (yyvsp[0].params); } -#line 2429 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 793 "rust-exp.y" + { (yyval.params) = (yyvsp[0].params); } +#line 2528 "rust-exp.c.tmp" break; case 85: -#line 798 "rust-exp.y" /* yacc.c:1646 */ - { (yyval.params) = (yyvsp[-1].params); } -#line 2435 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 798 "rust-exp.y" + { (yyval.params) = (yyvsp[-1].params); } +#line 2534 "rust-exp.c.tmp" break; case 86: -#line 803 "rust-exp.y" /* yacc.c:1646 */ - { (yyval.op) = parser->ast_call_ish (OP_FUNCALL, (yyvsp[-1].op), (yyvsp[0].params)); } -#line 2441 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 803 "rust-exp.y" + { (yyval.op) = parser->ast_call_ish (OP_FUNCALL, (yyvsp[-1].op), (yyvsp[0].params)); } +#line 2540 "rust-exp.c.tmp" break; case 89: -#line 813 "rust-exp.y" /* yacc.c:1646 */ - { (yyval.depth) = 1; } -#line 2447 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 813 "rust-exp.y" + { (yyval.depth) = 1; } +#line 2546 "rust-exp.c.tmp" break; case 90: -#line 815 "rust-exp.y" /* yacc.c:1646 */ - { (yyval.depth) = (yyvsp[-2].depth) + 1; } -#line 2453 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 815 "rust-exp.y" + { (yyval.depth) = (yyvsp[-2].depth) + 1; } +#line 2552 "rust-exp.c.tmp" break; case 91: -#line 820 "rust-exp.y" /* yacc.c:1646 */ - { (yyval.op) = (yyvsp[0].op); } -#line 2459 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 820 "rust-exp.y" + { (yyval.op) = (yyvsp[0].op); } +#line 2558 "rust-exp.c.tmp" break; case 92: -#line 822 "rust-exp.y" /* yacc.c:1646 */ - { (yyval.op) = parser->ast_path ((yyvsp[0].sval), NULL); } -#line 2465 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 822 "rust-exp.y" + { (yyval.op) = parser->ast_path ((yyvsp[0].sval), NULL); } +#line 2564 "rust-exp.c.tmp" break; case 93: -#line 824 "rust-exp.y" /* yacc.c:1646 */ - { (yyval.op) = parser->ast_path (make_stoken ("self"), NULL); } -#line 2471 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 824 "rust-exp.y" + { (yyval.op) = parser->ast_path (make_stoken ("self"), NULL); } +#line 2570 "rust-exp.c.tmp" break; case 95: -#line 830 "rust-exp.y" /* yacc.c:1646 */ - { (yyval.op) = parser->super_name ((yyvsp[0].op), 0); } -#line 2477 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 830 "rust-exp.y" + { (yyval.op) = parser->super_name ((yyvsp[0].op), 0); } +#line 2576 "rust-exp.c.tmp" break; case 96: -#line 832 "rust-exp.y" /* yacc.c:1646 */ - { (yyval.op) = parser->super_name ((yyvsp[0].op), (yyvsp[-1].depth)); } -#line 2483 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 832 "rust-exp.y" + { (yyval.op) = parser->super_name ((yyvsp[0].op), (yyvsp[-1].depth)); } +#line 2582 "rust-exp.c.tmp" break; case 97: -#line 834 "rust-exp.y" /* yacc.c:1646 */ - { (yyval.op) = parser->crate_name ((yyvsp[0].op)); } -#line 2489 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 834 "rust-exp.y" + { (yyval.op) = parser->crate_name ((yyvsp[0].op)); } +#line 2588 "rust-exp.c.tmp" break; case 98: -#line 836 "rust-exp.y" /* yacc.c:1646 */ - { +#line 836 "rust-exp.y" + { /* This is a gdb extension to make it possible to refer to items in other crates. It just bypasses adding the current crate to the front of the @@ -2499,61 +2598,61 @@ NULL), (yyvsp[0].op)->right.params); } -#line 2504 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 2603 "rust-exp.c.tmp" break; case 99: -#line 850 "rust-exp.y" /* yacc.c:1646 */ - { (yyval.op) = parser->ast_path ((yyvsp[0].sval), NULL); } -#line 2510 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 850 "rust-exp.y" + { (yyval.op) = parser->ast_path ((yyvsp[0].sval), NULL); } +#line 2609 "rust-exp.c.tmp" break; case 100: -#line 852 "rust-exp.y" /* yacc.c:1646 */ - { +#line 852 "rust-exp.y" + { (yyval.op) = parser->ast_path (parser->concat3 ((yyvsp[-2].op)->left.sval.ptr, "::", (yyvsp[0].sval).ptr), NULL); } -#line 2520 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 2619 "rust-exp.c.tmp" break; case 101: -#line 858 "rust-exp.y" /* yacc.c:1646 */ - { (yyval.op) = parser->ast_path ((yyvsp[-4].op)->left.sval, (yyvsp[-1].params)); } -#line 2526 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 858 "rust-exp.y" + { (yyval.op) = parser->ast_path ((yyvsp[-4].op)->left.sval, (yyvsp[-1].params)); } +#line 2625 "rust-exp.c.tmp" break; case 102: -#line 860 "rust-exp.y" /* yacc.c:1646 */ - { +#line 860 "rust-exp.y" + { (yyval.op) = parser->ast_path ((yyvsp[-4].op)->left.sval, (yyvsp[-1].params)); parser->push_back ('>'); } -#line 2535 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 2634 "rust-exp.c.tmp" break; case 104: -#line 869 "rust-exp.y" /* yacc.c:1646 */ - { (yyval.op) = parser->super_name ((yyvsp[0].op), 0); } -#line 2541 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 869 "rust-exp.y" + { (yyval.op) = parser->super_name ((yyvsp[0].op), 0); } +#line 2640 "rust-exp.c.tmp" break; case 105: -#line 871 "rust-exp.y" /* yacc.c:1646 */ - { (yyval.op) = parser->super_name ((yyvsp[0].op), (yyvsp[-1].depth)); } -#line 2547 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 871 "rust-exp.y" + { (yyval.op) = parser->super_name ((yyvsp[0].op), (yyvsp[-1].depth)); } +#line 2646 "rust-exp.c.tmp" break; case 106: -#line 873 "rust-exp.y" /* yacc.c:1646 */ - { (yyval.op) = parser->crate_name ((yyvsp[0].op)); } -#line 2553 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 873 "rust-exp.y" + { (yyval.op) = parser->crate_name ((yyvsp[0].op)); } +#line 2652 "rust-exp.c.tmp" break; case 107: -#line 875 "rust-exp.y" /* yacc.c:1646 */ - { +#line 875 "rust-exp.y" + { /* This is a gdb extension to make it possible to refer to items in other crates. It just bypasses adding the current crate to the front of the @@ -2563,121 +2662,122 @@ NULL), (yyvsp[0].op)->right.params); } -#line 2568 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 2667 "rust-exp.c.tmp" break; case 108: -#line 889 "rust-exp.y" /* yacc.c:1646 */ - { (yyval.op) = parser->ast_path ((yyvsp[0].sval), NULL); } -#line 2574 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 889 "rust-exp.y" + { (yyval.op) = parser->ast_path ((yyvsp[0].sval), NULL); } +#line 2673 "rust-exp.c.tmp" break; case 109: -#line 891 "rust-exp.y" /* yacc.c:1646 */ - { +#line 891 "rust-exp.y" + { (yyval.op) = parser->ast_path (parser->concat3 ((yyvsp[-2].op)->left.sval.ptr, "::", (yyvsp[0].sval).ptr), NULL); } -#line 2584 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 2683 "rust-exp.c.tmp" break; case 111: -#line 901 "rust-exp.y" /* yacc.c:1646 */ - { (yyval.op) = parser->ast_path ((yyvsp[-3].op)->left.sval, (yyvsp[-1].params)); } -#line 2590 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 901 "rust-exp.y" + { (yyval.op) = parser->ast_path ((yyvsp[-3].op)->left.sval, (yyvsp[-1].params)); } +#line 2689 "rust-exp.c.tmp" break; case 112: -#line 903 "rust-exp.y" /* yacc.c:1646 */ - { +#line 903 "rust-exp.y" + { (yyval.op) = parser->ast_path ((yyvsp[-3].op)->left.sval, (yyvsp[-1].params)); parser->push_back ('>'); } -#line 2599 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 2698 "rust-exp.c.tmp" break; case 114: -#line 912 "rust-exp.y" /* yacc.c:1646 */ - { (yyval.op) = parser->ast_array_type ((yyvsp[-3].op), (yyvsp[-1].typed_val_int)); } -#line 2605 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 912 "rust-exp.y" + { (yyval.op) = parser->ast_array_type ((yyvsp[-3].op), (yyvsp[-1].typed_val_int)); } +#line 2704 "rust-exp.c.tmp" break; case 115: -#line 914 "rust-exp.y" /* yacc.c:1646 */ - { (yyval.op) = parser->ast_array_type ((yyvsp[-3].op), (yyvsp[-1].typed_val_int)); } -#line 2611 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 914 "rust-exp.y" + { (yyval.op) = parser->ast_array_type ((yyvsp[-3].op), (yyvsp[-1].typed_val_int)); } +#line 2710 "rust-exp.c.tmp" break; case 116: -#line 916 "rust-exp.y" /* yacc.c:1646 */ - { (yyval.op) = parser->ast_slice_type ((yyvsp[-1].op)); } -#line 2617 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 916 "rust-exp.y" + { (yyval.op) = parser->ast_slice_type ((yyvsp[-1].op)); } +#line 2716 "rust-exp.c.tmp" break; case 117: -#line 918 "rust-exp.y" /* yacc.c:1646 */ - { (yyval.op) = parser->ast_reference_type ((yyvsp[0].op)); } -#line 2623 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 918 "rust-exp.y" + { (yyval.op) = parser->ast_reference_type ((yyvsp[0].op)); } +#line 2722 "rust-exp.c.tmp" break; case 118: -#line 920 "rust-exp.y" /* yacc.c:1646 */ - { (yyval.op) = parser->ast_pointer_type ((yyvsp[0].op), 1); } -#line 2629 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 920 "rust-exp.y" + { (yyval.op) = parser->ast_pointer_type ((yyvsp[0].op), 1); } +#line 2728 "rust-exp.c.tmp" break; case 119: -#line 922 "rust-exp.y" /* yacc.c:1646 */ - { (yyval.op) = parser->ast_pointer_type ((yyvsp[0].op), 0); } -#line 2635 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 922 "rust-exp.y" + { (yyval.op) = parser->ast_pointer_type ((yyvsp[0].op), 0); } +#line 2734 "rust-exp.c.tmp" break; case 120: -#line 924 "rust-exp.y" /* yacc.c:1646 */ - { (yyval.op) = parser->ast_function_type ((yyvsp[0].op), (yyvsp[-3].params)); } -#line 2641 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 924 "rust-exp.y" + { (yyval.op) = parser->ast_function_type ((yyvsp[0].op), (yyvsp[-3].params)); } +#line 2740 "rust-exp.c.tmp" break; case 121: -#line 926 "rust-exp.y" /* yacc.c:1646 */ - { (yyval.op) = parser->ast_tuple_type ((yyvsp[-1].params)); } -#line 2647 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 926 "rust-exp.y" + { (yyval.op) = parser->ast_tuple_type ((yyvsp[-1].params)); } +#line 2746 "rust-exp.c.tmp" break; case 122: -#line 931 "rust-exp.y" /* yacc.c:1646 */ - { (yyval.params) = NULL; } -#line 2653 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 931 "rust-exp.y" + { (yyval.params) = NULL; } +#line 2752 "rust-exp.c.tmp" break; case 123: -#line 933 "rust-exp.y" /* yacc.c:1646 */ - { (yyval.params) = (yyvsp[0].params); } -#line 2659 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 933 "rust-exp.y" + { (yyval.params) = (yyvsp[0].params); } +#line 2758 "rust-exp.c.tmp" break; case 124: -#line 938 "rust-exp.y" /* yacc.c:1646 */ - { +#line 938 "rust-exp.y" + { rust_op_vector *result = parser->new_op_vector (); result->push_back ((yyvsp[0].op)); (yyval.params) = result; } -#line 2669 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 2768 "rust-exp.c.tmp" break; case 125: -#line 944 "rust-exp.y" /* yacc.c:1646 */ - { +#line 944 "rust-exp.y" + { (yyvsp[-2].params)->push_back ((yyvsp[0].op)); (yyval.params) = (yyvsp[-2].params); } -#line 2678 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 2777 "rust-exp.c.tmp" break; -#line 2682 "rust-exp.c.tmp" /* yacc.c:1646 */ +#line 2781 "rust-exp.c.tmp" + default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -2702,14 +2802,13 @@ /* Now 'shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ - - yyn = yyr1[yyn]; - - yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; - if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) - yystate = yytable[yystate]; - else - yystate = yydefgoto[yyn - YYNTOKENS]; + { + const int yylhs = yyr1[yyn] - YYNTOKENS; + const int yyi = yypgoto[yylhs] + *yyssp; + yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp + ? yytable[yyi] + : yydefgoto[yylhs]); + } goto yynewstate; @@ -2741,7 +2840,7 @@ { if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); - yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc); + yymsg = YY_CAST (char *, YYSTACK_ALLOC (YY_CAST (YYSIZE_T, yymsg_alloc))); if (!yymsg) { yymsg = yymsgbuf; @@ -2792,12 +2891,10 @@ | yyerrorlab -- error raised explicitly by YYERROR. | `---------------------------------------------------*/ yyerrorlab: - - /* Pacify compilers like GCC when the user code never invokes - YYERROR and the label yyerrorlab therefore never appears in user - code. */ - if (/*CONSTCOND*/ 0) - goto yyerrorlab; + /* Pacify compilers when the user code never invokes YYERROR and the + label yyerrorlab therefore never appears in user code. */ + if (0) + YYERROR; /* Do not reclaim the symbols of the rule whose action triggered this YYERROR. */ @@ -2859,6 +2956,7 @@ yyresult = 0; goto yyreturn; + /*-----------------------------------. | yyabortlab -- YYABORT comes here. | `-----------------------------------*/ @@ -2866,6 +2964,7 @@ yyresult = 1; goto yyreturn; + #if !defined yyoverflow || YYERROR_VERBOSE /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | @@ -2876,6 +2975,10 @@ /* Fall through. */ #endif + +/*-----------------------------------------------------. +| yyreturn -- parsing is finished, return the result. | +`-----------------------------------------------------*/ yyreturn: if (yychar != YYEMPTY) { @@ -2892,7 +2995,7 @@ while (yyssp != yyss) { yydestruct ("Cleanup: popping", - yystos[*yyssp], yyvsp, parser); + yystos[+*yyssp], yyvsp, parser); YYPOPSTACK (1); } #ifndef yyoverflow @@ -2905,7 +3008,7 @@ #endif return yyresult; } -#line 950 "rust-exp.y" /* yacc.c:1906 */ +#line 950 "rust-exp.y" /* A struct of this type is used to describe a token. */ @@ -4293,7 +4396,7 @@ call expression. */ rust_op_vector *params = operation->right.params; - if (TYPE_CODE (type) != TYPE_CODE_NAMESPACE) + if (type->code () != TYPE_CODE_NAMESPACE) { if (!rust_tuple_struct_type_p (type)) error (_("Type %s is not a tuple struct"), varname); @@ -4372,8 +4475,8 @@ error (_("No symbol '%s' in current context"), varname); if (!want_type - && TYPE_CODE (type) == TYPE_CODE_STRUCT - && TYPE_NFIELDS (type) == 0) + && type->code () == TYPE_CODE_STRUCT + && type->num_fields () == 0) { /* A unit-like struct. */ write_exp_elt_opcode (pstate, OP_AGGREGATE); @@ -4429,7 +4532,7 @@ if (type == NULL) error (_("Could not find type '%s'"), operation->left.sval.ptr); - if (TYPE_CODE (type) != TYPE_CODE_STRUCT + if (type->code () != TYPE_CODE_STRUCT || rust_tuple_type_p (type) || rust_tuple_struct_type_p (type)) error (_("Struct expression applied to non-struct type")); @@ -4684,8 +4787,8 @@ { int i; - // Set up dummy "parser", so that rust_type works. - struct parser_state ps (&rust_language_defn, target_gdbarch (), + /* Set up dummy "parser", so that rust_type works. */ + struct parser_state ps (language_def (language_rust), target_gdbarch (), nullptr, 0, 0, nullptr, 0, nullptr); rust_parser parser (&ps); @@ -4785,8 +4888,9 @@ #endif /* GDB_SELF_TEST */ +void _initialize_rust_exp (); void -_initialize_rust_exp (void) +_initialize_rust_exp () { int code = regcomp (&number_regex, number_regex_text, REG_EXTENDED); /* If the regular expression was incorrect, it was a programming diff -Nru gdb-9.1/gdb/rust-exp.y gdb-10.2/gdb/rust-exp.y --- gdb-9.1/gdb/rust-exp.y 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/rust-exp.y 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Bison parser for Rust expressions, for GDB. - Copyright (C) 2016-2020 Free Software Foundation, Inc. + Copyright (C) 2016-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -2334,7 +2334,7 @@ call expression. */ rust_op_vector *params = operation->right.params; - if (TYPE_CODE (type) != TYPE_CODE_NAMESPACE) + if (type->code () != TYPE_CODE_NAMESPACE) { if (!rust_tuple_struct_type_p (type)) error (_("Type %s is not a tuple struct"), varname); @@ -2413,8 +2413,8 @@ error (_("No symbol '%s' in current context"), varname); if (!want_type - && TYPE_CODE (type) == TYPE_CODE_STRUCT - && TYPE_NFIELDS (type) == 0) + && type->code () == TYPE_CODE_STRUCT + && type->num_fields () == 0) { /* A unit-like struct. */ write_exp_elt_opcode (pstate, OP_AGGREGATE); @@ -2470,7 +2470,7 @@ if (type == NULL) error (_("Could not find type '%s'"), operation->left.sval.ptr); - if (TYPE_CODE (type) != TYPE_CODE_STRUCT + if (type->code () != TYPE_CODE_STRUCT || rust_tuple_type_p (type) || rust_tuple_struct_type_p (type)) error (_("Struct expression applied to non-struct type")); @@ -2725,8 +2725,8 @@ { int i; - // Set up dummy "parser", so that rust_type works. - struct parser_state ps (&rust_language_defn, target_gdbarch (), + /* Set up dummy "parser", so that rust_type works. */ + struct parser_state ps (language_def (language_rust), target_gdbarch (), nullptr, 0, 0, nullptr, 0, nullptr); rust_parser parser (&ps); @@ -2826,8 +2826,9 @@ #endif /* GDB_SELF_TEST */ +void _initialize_rust_exp (); void -_initialize_rust_exp (void) +_initialize_rust_exp () { int code = regcomp (&number_regex, number_regex_text, REG_EXTENDED); /* If the regular expression was incorrect, it was a programming diff -Nru gdb-9.1/gdb/rust-lang.c gdb-10.2/gdb/rust-lang.c --- gdb-9.1/gdb/rust-lang.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/rust-lang.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Rust language support routines for GDB, the GNU debugger. - Copyright (C) 2016-2020 Free Software Foundation, Inc. + Copyright (C) 2016-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -68,38 +68,37 @@ enum. */ static bool -rust_enum_p (const struct type *type) +rust_enum_p (struct type *type) { - return (TYPE_CODE (type) == TYPE_CODE_STRUCT - && TYPE_NFIELDS (type) == 1 - && TYPE_FLAG_DISCRIMINATED_UNION (TYPE_FIELD_TYPE (type, 0))); + /* is_dynamic_type will return true if any field has a dynamic + attribute -- but we only want to check the top level. */ + return TYPE_HAS_VARIANT_PARTS (type); } -/* Return true if TYPE, which must be an enum type, has no - variants. */ +/* Return true if TYPE, which must be an already-resolved enum type, + has no variants. */ static bool rust_empty_enum_p (const struct type *type) { - gdb_assert (rust_enum_p (type)); - /* In Rust the enum always fills the containing structure. */ - gdb_assert (TYPE_FIELD_BITPOS (type, 0) == 0); - - return TYPE_NFIELDS (TYPE_FIELD_TYPE (type, 0)) == 0; + return type->num_fields () == 0; } -/* Given an enum type and contents, find which variant is active. */ +/* Given an already-resolved enum type and contents, find which + variant is active. */ -static struct field * -rust_enum_variant (struct type *type, const gdb_byte *contents) +static int +rust_enum_variant (struct type *type) { - /* In Rust the enum always fills the containing structure. */ - gdb_assert (TYPE_FIELD_BITPOS (type, 0) == 0); - - struct type *union_type = TYPE_FIELD_TYPE (type, 0); - - int fieldno = value_union_variant (union_type, contents); - return &TYPE_FIELD (union_type, fieldno); + /* The active variant is simply the first non-artificial field. */ + for (int i = 0; i < type->num_fields (); ++i) + if (!TYPE_FIELD_ARTIFICIAL (type, i)) + return i; + + /* Perhaps we could get here by trying to print an Ada variant + record in Rust mode. Unlikely, but an error is safer than an + assert. */ + error (_("Could not find active enum variant")); } /* See rust-lang.h. */ @@ -110,9 +109,9 @@ /* The current implementation is a bit of a hack, but there's nothing else in the debuginfo to distinguish a tuple from a struct. */ - return (TYPE_CODE (type) == TYPE_CODE_STRUCT - && TYPE_NAME (type) != NULL - && TYPE_NAME (type)[0] == '('); + return (type->code () == TYPE_CODE_STRUCT + && type->name () != NULL + && type->name ()[0] == '('); } /* Return true if all non-static fields of a structlike type are in a @@ -125,11 +124,11 @@ field_number = 0; - if (TYPE_CODE (type) != TYPE_CODE_STRUCT) + if (type->code () != TYPE_CODE_STRUCT) return false; - for (i = 0; i < TYPE_NFIELDS (type); ++i) + for (i = 0; i < type->num_fields (); ++i) { - if (!field_is_static (&TYPE_FIELD (type, i))) + if (!field_is_static (&type->field (i))) { char buf[20]; @@ -150,7 +149,7 @@ /* This is just an approximation until DWARF can represent Rust more precisely. We exclude zero-length structs because they may not be tuple structs, and there's no way to tell. */ - return TYPE_NFIELDS (type) > 0 && rust_underscore_fields (type); + return type->num_fields () > 0 && rust_underscore_fields (type); } /* Return true if TYPE is a slice type, otherwise false. */ @@ -158,10 +157,10 @@ static bool rust_slice_type_p (struct type *type) { - return (TYPE_CODE (type) == TYPE_CODE_STRUCT - && TYPE_NAME (type) != NULL - && (strncmp (TYPE_NAME (type), "&[", 2) == 0 - || strcmp (TYPE_NAME (type), "&str") == 0)); + return (type->code () == TYPE_CODE_STRUCT + && type->name () != NULL + && (strncmp (type->name (), "&[", 2) == 0 + || strcmp (type->name (), "&str") == 0)); } /* Return true if TYPE is a range type, otherwise false. */ @@ -171,23 +170,23 @@ { int i; - if (TYPE_CODE (type) != TYPE_CODE_STRUCT - || TYPE_NFIELDS (type) > 2 - || TYPE_NAME (type) == NULL - || strstr (TYPE_NAME (type), "::Range") == NULL) + if (type->code () != TYPE_CODE_STRUCT + || type->num_fields () > 2 + || type->name () == NULL + || strstr (type->name (), "::Range") == NULL) return false; - if (TYPE_NFIELDS (type) == 0) + if (type->num_fields () == 0) return true; i = 0; if (strcmp (TYPE_FIELD_NAME (type, 0), "start") == 0) { - if (TYPE_NFIELDS (type) == 1) + if (type->num_fields () == 1) return true; i = 1; } - else if (TYPE_NFIELDS (type) == 2) + else if (type->num_fields () == 2) { /* First field had to be "start". */ return false; @@ -203,8 +202,8 @@ static bool rust_inclusive_range_type_p (struct type *type) { - return (strstr (TYPE_NAME (type), "::RangeInclusive") != NULL - || strstr (TYPE_NAME (type), "::RangeToInclusive") != NULL); + return (strstr (type->name (), "::RangeInclusive") != NULL + || strstr (type->name (), "::RangeToInclusive") != NULL); } /* Return true if TYPE seems to be the type "u8", otherwise false. */ @@ -212,7 +211,7 @@ static bool rust_u8_type_p (struct type *type) { - return (TYPE_CODE (type) == TYPE_CODE_INT + return (type->code () == TYPE_CODE_INT && TYPE_UNSIGNED (type) && TYPE_LENGTH (type) == 1); } @@ -222,31 +221,11 @@ static bool rust_chartype_p (struct type *type) { - return (TYPE_CODE (type) == TYPE_CODE_CHAR + return (type->code () == TYPE_CODE_CHAR && TYPE_LENGTH (type) == 4 && TYPE_UNSIGNED (type)); } -/* Return true if TYPE is a string type. */ - -static bool -rust_is_string_type_p (struct type *type) -{ - LONGEST low_bound, high_bound; - - type = check_typedef (type); - return ((TYPE_CODE (type) == TYPE_CODE_STRING) - || (TYPE_CODE (type) == TYPE_CODE_PTR - && (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_ARRAY - && rust_u8_type_p (TYPE_TARGET_TYPE (TYPE_TARGET_TYPE (type))) - && get_array_bounds (TYPE_TARGET_TYPE (type), &low_bound, - &high_bound))) - || (TYPE_CODE (type) == TYPE_CODE_STRUCT - && !rust_enum_p (type) - && rust_slice_type_p (type) - && strcmp (TYPE_NAME (type), "&str") == 0)); -} - /* If VALUE represents a trait object pointer, return the underlying pointer with the correct (i.e., runtime) type. Otherwise, return NULL. */ @@ -256,7 +235,7 @@ { struct type *type = check_typedef (value_type (value)); - if (TYPE_CODE (type) != TYPE_CODE_STRUCT || TYPE_NFIELDS (type) != 2) + if (type->code () != TYPE_CODE_STRUCT || type->num_fields () != 2) return NULL; /* Try to be a bit resilient if the ABI changes. */ @@ -282,43 +261,7 @@ -/* la_emitchar implementation for Rust. */ - -static void -rust_emitchar (int c, struct type *type, struct ui_file *stream, int quoter) -{ - if (!rust_chartype_p (type)) - generic_emit_char (c, type, stream, quoter, - target_charset (get_type_arch (type))); - else if (c == '\\' || c == quoter) - fprintf_filtered (stream, "\\%c", c); - else if (c == '\n') - fputs_filtered ("\\n", stream); - else if (c == '\r') - fputs_filtered ("\\r", stream); - else if (c == '\t') - fputs_filtered ("\\t", stream); - else if (c == '\0') - fputs_filtered ("\\0", stream); - else if (c >= 32 && c <= 127 && isprint (c)) - fputc_filtered (c, stream); - else if (c <= 255) - fprintf_filtered (stream, "\\x%02x", c); - else - fprintf_filtered (stream, "\\u{%06x}", c); -} - -/* la_printchar implementation for Rust. */ - -static void -rust_printchar (int c, struct type *type, struct ui_file *stream) -{ - fputs_filtered ("'", stream); - LA_EMIT_CHAR (c, type, stream, '\''); - fputs_filtered ("'", stream); -} - -/* la_printstr implementation for Rust. */ +/* language_defn::printstr implementation for Rust. */ static void rust_printstr (struct ui_file *stream, struct type *type, @@ -351,6 +294,10 @@ +static void rust_value_print_inner (struct value *val, struct ui_file *stream, + int recurse, + const struct value_print_options *options); + /* Helper function to print a string slice. */ static void @@ -369,15 +316,14 @@ /* rust_val_print helper for structs and untagged unions. */ static void -val_print_struct (struct type *type, int embedded_offset, - CORE_ADDR address, struct ui_file *stream, - int recurse, struct value *val, +val_print_struct (struct value *val, struct ui_file *stream, int recurse, const struct value_print_options *options) { int i; int first_field; + struct type *type = check_typedef (value_type (val)); - if (rust_slice_type_p (type) && strcmp (TYPE_NAME (type), "&str") == 0) + if (rust_slice_type_p (type) && strcmp (type->name (), "&str") == 0) { /* If what we are printing here is actually a string within a structure then VAL will be the original parent value, while TYPE @@ -386,7 +332,7 @@ However, RUST_VAL_PRINT_STR looks up the fields of the string inside VAL, assuming that VAL is the string. So, recreate VAL as a value representing just the string. */ - val = value_at_lazy (type, value_address (val) + embedded_offset); + val = value_at_lazy (type, value_address (val)); rust_val_print_str (stream, val, options); return; } @@ -397,13 +343,13 @@ if (!is_tuple) { - if (TYPE_NAME (type) != NULL) - fprintf_filtered (stream, "%s", TYPE_NAME (type)); + if (type->name () != NULL) + fprintf_filtered (stream, "%s", type->name ()); - if (TYPE_NFIELDS (type) == 0) + if (type->num_fields () == 0) return; - if (TYPE_NAME (type) != NULL) + if (type->name () != NULL) fputs_filtered (" ", stream); } @@ -416,9 +362,9 @@ opts.deref_ref = 0; first_field = 1; - for (i = 0; i < TYPE_NFIELDS (type); ++i) + for (i = 0; i < type->num_fields (); ++i) { - if (field_is_static (&TYPE_FIELD (type, i))) + if (field_is_static (&type->field (i))) continue; if (!first_field) @@ -436,15 +382,13 @@ if (!is_tuple && !is_tuple_struct) { - fputs_filtered (TYPE_FIELD_NAME (type, i), stream); + fputs_styled (TYPE_FIELD_NAME (type, i), + variable_name_style.style (), stream); fputs_filtered (": ", stream); } - val_print (TYPE_FIELD_TYPE (type, i), - embedded_offset + TYPE_FIELD_BITPOS (type, i) / 8, - address, - stream, recurse + 1, val, &opts, - current_language); + rust_value_print_inner (value_field (val, i), stream, recurse + 1, + &opts); } if (options->prettyformat) @@ -462,34 +406,37 @@ /* rust_val_print helper for discriminated unions (Rust enums). */ static void -rust_print_enum (struct type *type, int embedded_offset, - CORE_ADDR address, struct ui_file *stream, - int recurse, struct value *val, +rust_print_enum (struct value *val, struct ui_file *stream, int recurse, const struct value_print_options *options) { struct value_print_options opts = *options; + struct type *type = check_typedef (value_type (val)); opts.deref_ref = 0; + gdb_assert (rust_enum_p (type)); + gdb::array_view<const gdb_byte> view (value_contents_for_printing (val), + TYPE_LENGTH (value_type (val))); + type = resolve_dynamic_type (type, view, value_address (val)); + if (rust_empty_enum_p (type)) { /* Print the enum type name here to be more clear. */ fprintf_filtered (stream, _("%s {%p[<No data fields>%p]}"), - TYPE_NAME (type), + type->name (), metadata_style.style ().ptr (), nullptr); return; } - const gdb_byte *valaddr = value_contents_for_printing (val); - struct field *variant_field = rust_enum_variant (type, valaddr); - embedded_offset += FIELD_BITPOS (*variant_field) / 8; - struct type *variant_type = FIELD_TYPE (*variant_field); + int variant_fieldno = rust_enum_variant (type); + val = value_field (val, variant_fieldno); + struct type *variant_type = type->field (variant_fieldno).type (); - int nfields = TYPE_NFIELDS (variant_type); + int nfields = variant_type->num_fields (); bool is_tuple = rust_tuple_struct_type_p (variant_type); - fprintf_filtered (stream, "%s", TYPE_NAME (variant_type)); + fprintf_filtered (stream, "%s", variant_type->name ()); if (nfields == 0) { /* In case of a nullary variant like 'None', just output @@ -507,22 +454,19 @@ } bool first_field = true; - for (int j = 0; j < TYPE_NFIELDS (variant_type); j++) + for (int j = 0; j < variant_type->num_fields (); j++) { if (!first_field) fputs_filtered (", ", stream); first_field = false; if (!is_tuple) - fprintf_filtered (stream, "%s: ", - TYPE_FIELD_NAME (variant_type, j)); + fprintf_filtered (stream, "%ps: ", + styled_string (variable_name_style.style (), + TYPE_FIELD_NAME (variant_type, j))); - val_print (TYPE_FIELD_TYPE (variant_type, j), - (embedded_offset - + TYPE_FIELD_BITPOS (variant_type, j) / 8), - address, - stream, recurse + 1, val, &opts, - current_language); + rust_value_print_inner (value_field (val, j), stream, recurse + 1, + &opts); } if (is_tuple) @@ -545,60 +489,61 @@ "]" }; -/* la_val_print implementation for Rust. */ - +/* la_value_print_inner implementation for Rust. */ static void -rust_val_print (struct type *type, int embedded_offset, - CORE_ADDR address, struct ui_file *stream, int recurse, - struct value *val, - const struct value_print_options *options) +rust_value_print_inner (struct value *val, struct ui_file *stream, + int recurse, + const struct value_print_options *options) { - const gdb_byte *valaddr = value_contents_for_printing (val); + struct value_print_options opts = *options; + opts.deref_ref = 1; - type = check_typedef (type); - switch (TYPE_CODE (type)) + if (opts.prettyformat == Val_prettyformat_default) + opts.prettyformat = (opts.prettyformat_structs + ? Val_prettyformat : Val_no_prettyformat); + + struct type *type = check_typedef (value_type (val)); + switch (type->code ()) { case TYPE_CODE_PTR: { LONGEST low_bound, high_bound; - if (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_ARRAY + if (TYPE_TARGET_TYPE (type)->code () == TYPE_CODE_ARRAY && rust_u8_type_p (TYPE_TARGET_TYPE (TYPE_TARGET_TYPE (type))) && get_array_bounds (TYPE_TARGET_TYPE (type), &low_bound, - &high_bound)) { - /* We have a pointer to a byte string, so just print - that. */ - struct type *elttype = check_typedef (TYPE_TARGET_TYPE (type)); - CORE_ADDR addr; - struct gdbarch *arch = get_type_arch (type); - int unit_size = gdbarch_addressable_memory_unit_size (arch); + &high_bound)) + { + /* We have a pointer to a byte string, so just print + that. */ + struct type *elttype = check_typedef (TYPE_TARGET_TYPE (type)); + CORE_ADDR addr = value_as_address (val); + struct gdbarch *arch = get_type_arch (type); - addr = unpack_pointer (type, valaddr + embedded_offset * unit_size); - if (options->addressprint) - { - fputs_filtered (paddress (arch, addr), stream); - fputs_filtered (" ", stream); - } + if (opts.addressprint) + { + fputs_filtered (paddress (arch, addr), stream); + fputs_filtered (" ", stream); + } - fputs_filtered ("b", stream); - val_print_string (TYPE_TARGET_TYPE (elttype), "ASCII", addr, - high_bound - low_bound + 1, stream, - options); - break; - } + fputs_filtered ("b", stream); + val_print_string (TYPE_TARGET_TYPE (elttype), "ASCII", addr, + high_bound - low_bound + 1, stream, + &opts); + break; + } } - /* Fall through. */ + goto generic_print; case TYPE_CODE_METHODPTR: case TYPE_CODE_MEMBERPTR: - c_val_print (type, embedded_offset, address, stream, - recurse, val, options); + c_value_print_inner (val, stream, recurse, &opts); break; case TYPE_CODE_INT: /* Recognize the unit type. */ if (TYPE_UNSIGNED (type) && TYPE_LENGTH (type) == 0 - && TYPE_NAME (type) != NULL && strcmp (TYPE_NAME (type), "()") == 0) + && type->name () != NULL && strcmp (type->name (), "()") == 0) { fputs_filtered ("()", stream); break; @@ -607,8 +552,6 @@ case TYPE_CODE_STRING: { - struct gdbarch *arch = get_type_arch (type); - int unit_size = gdbarch_addressable_memory_unit_size (arch); LONGEST low_bound, high_bound; if (!get_array_bounds (type, &low_bound, &high_bound)) @@ -619,8 +562,8 @@ encoding. */ fputs_filtered ("b", stream); rust_printstr (stream, TYPE_TARGET_TYPE (type), - valaddr + embedded_offset * unit_size, - high_bound - low_bound + 1, "ASCII", 0, options); + value_contents_for_printing (val), + high_bound - low_bound + 1, "ASCII", 0, &opts); } break; @@ -642,24 +585,20 @@ for printing a union is same as that for a struct, the only difference is that the input type will have overlapping fields. */ - val_print_struct (type, embedded_offset, address, stream, - recurse, val, options); + val_print_struct (val, stream, recurse, &opts); break; case TYPE_CODE_STRUCT: if (rust_enum_p (type)) - rust_print_enum (type, embedded_offset, address, stream, - recurse, val, options); + rust_print_enum (val, stream, recurse, &opts); else - val_print_struct (type, embedded_offset, address, stream, - recurse, val, options); + val_print_struct (val, stream, recurse, &opts); break; default: generic_print: /* Nothing special yet. */ - generic_val_print (type, embedded_offset, address, stream, - recurse, val, options, &rust_decorations); + generic_value_print (val, stream, recurse, &opts, &rust_decorations); } } @@ -681,7 +620,7 @@ /* Print a tuple type simply. */ if (rust_tuple_type_p (type)) { - fputs_filtered (TYPE_NAME (type), stream); + fputs_filtered (type->name (), stream); return; } @@ -698,13 +637,11 @@ /* Compute properties of TYPE here because, in the enum case, the rest of the code ends up looking only at the variant part. */ - const char *tagname = TYPE_NAME (type); + const char *tagname = type->name (); bool is_tuple_struct = rust_tuple_struct_type_p (type); bool is_tuple = rust_tuple_type_p (type); bool is_enum = rust_enum_p (type); - int enum_discriminant_index = -1; - if (for_rust_enum) { /* Already printing an outer enum, so nothing to print here. */ @@ -715,27 +652,11 @@ if (is_enum) { fputs_filtered ("enum ", stream); - - if (rust_empty_enum_p (type)) - { - if (tagname != NULL) - { - fputs_filtered (tagname, stream); - fputs_filtered (" ", stream); - } - fputs_filtered ("{}", stream); - return; - } - - type = TYPE_FIELD_TYPE (type, 0); - - struct dynamic_prop *discriminant_prop - = get_dyn_prop (DYN_PROP_DISCRIMINATED, type); - struct discriminant_info *info - = (struct discriminant_info *) discriminant_prop->data.baton; - enum_discriminant_index = info->discriminant_index; + dynamic_prop *prop = type->dyn_prop (DYN_PROP_VARIANT_PARTS); + if (prop != nullptr && prop->kind () == PROP_TYPE) + type = prop->original_type (); } - else if (TYPE_CODE (type) == TYPE_CODE_STRUCT) + else if (type->code () == TYPE_CODE_STRUCT) fputs_filtered ("struct ", stream); else fputs_filtered ("union ", stream); @@ -744,7 +665,7 @@ fputs_filtered (tagname, stream); } - if (TYPE_NFIELDS (type) == 0 && !is_tuple) + if (type->num_fields () == 0 && !is_tuple) return; if (for_rust_enum && !flags->print_offsets) fputs_filtered (is_tuple_struct ? "(" : "{", stream); @@ -756,11 +677,11 @@ field indices here because it simplifies calls to print_offset_data::update below. */ std::vector<int> fields; - for (int i = 0; i < TYPE_NFIELDS (type); ++i) + for (int i = 0; i < type->num_fields (); ++i) { - if (field_is_static (&TYPE_FIELD (type, i))) + if (field_is_static (&type->field (i))) continue; - if (is_enum && i == enum_discriminant_index) + if (is_enum && TYPE_FIELD_ARTIFICIAL (type, i)) continue; fields.push_back (i); } @@ -776,8 +697,8 @@ { QUIT; - gdb_assert (!field_is_static (&TYPE_FIELD (type, i))); - gdb_assert (! (is_enum && i == enum_discriminant_index)); + gdb_assert (!field_is_static (&type->field (i))); + gdb_assert (! (is_enum && TYPE_FIELD_ARTIFICIAL (type, i))); if (flags->print_offsets) podata->update (type, i, stream); @@ -791,11 +712,14 @@ if (!for_rust_enum || flags->print_offsets) print_spaces_filtered (level + 2, stream); if (is_enum) - fputs_filtered (TYPE_FIELD_NAME (type, i), stream); + fputs_styled (TYPE_FIELD_NAME (type, i), variable_name_style.style (), + stream); else if (!is_tuple_struct) - fprintf_filtered (stream, "%s: ", TYPE_FIELD_NAME (type, i)); + fprintf_filtered (stream, "%ps: ", + styled_string (variable_name_style.style (), + TYPE_FIELD_NAME (type, i))); - rust_internal_print_type (TYPE_FIELD_TYPE (type, i), NULL, + rust_internal_print_type (type->field (i).type (), NULL, stream, (is_enum ? show : show - 1), level + 2, flags, is_enum, podata); if (!for_rust_enum || flags->print_offsets) @@ -803,7 +727,7 @@ /* Note that this check of "I" is ok because we only sorted the fields by offset when print_offsets was set, so we won't take this branch in that case. */ - else if (i + 1 < TYPE_NFIELDS (type)) + else if (i + 1 < type->num_fields ()) fputs_filtered (", ", stream); } @@ -821,19 +745,6 @@ fputs_filtered (is_tuple_struct ? ")" : "}", stream); } -/* la_print_typedef implementation for Rust. */ - -static void -rust_print_typedef (struct type *type, - struct symbol *new_symbol, - struct ui_file *stream) -{ - type = check_typedef (type); - fprintf_filtered (stream, "type %s = ", new_symbol->print_name ()); - type_print (type, "", stream, 0); - fprintf_filtered (stream, ";"); -} - /* la_print_type implementation for Rust. */ static void @@ -844,19 +755,19 @@ { QUIT; if (show <= 0 - && TYPE_NAME (type) != NULL) + && type->name () != NULL) { /* Rust calls the unit type "void" in its debuginfo, but we don't want to print it as that. */ - if (TYPE_CODE (type) == TYPE_CODE_VOID) + if (type->code () == TYPE_CODE_VOID) fputs_filtered ("()", stream); else - fputs_filtered (TYPE_NAME (type), stream); + fputs_filtered (type->name (), stream); return; } type = check_typedef (type); - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_VOID: /* If we have an enum, we've already printed the type's @@ -875,17 +786,17 @@ if (varstring != NULL) fputs_filtered (varstring, stream); fputs_filtered ("(", stream); - for (int i = 0; i < TYPE_NFIELDS (type); ++i) + for (int i = 0; i < type->num_fields (); ++i) { QUIT; if (i > 0) fputs_filtered (", ", stream); - rust_internal_print_type (TYPE_FIELD_TYPE (type, i), "", stream, + rust_internal_print_type (type->field (i).type (), "", stream, -1, 0, flags, false, podata); } fputs_filtered (")", stream); /* If it returns unit, we can omit the return type. */ - if (TYPE_CODE (TYPE_TARGET_TYPE (type)) != TYPE_CODE_VOID) + if (TYPE_TARGET_TYPE (type)->code () != TYPE_CODE_VOID) { fputs_filtered (" -> ", stream); rust_internal_print_type (TYPE_TARGET_TYPE (type), "", stream, @@ -902,8 +813,8 @@ stream, show - 1, level, flags, false, podata); - if (TYPE_HIGH_BOUND_KIND (TYPE_INDEX_TYPE (type)) == PROP_LOCEXPR - || TYPE_HIGH_BOUND_KIND (TYPE_INDEX_TYPE (type)) == PROP_LOCLIST) + if (type->bounds ()->high.kind () == PROP_LOCEXPR + || type->bounds ()->high.kind () == PROP_LOCLIST) fprintf_filtered (stream, "; variable length"); else if (get_array_bounds (type, &low_bound, &high_bound)) fprintf_filtered (stream, "; %s", @@ -923,26 +834,28 @@ int len = 0; fputs_filtered ("enum ", stream); - if (TYPE_NAME (type) != NULL) + if (type->name () != NULL) { - fputs_filtered (TYPE_NAME (type), stream); + fputs_filtered (type->name (), stream); fputs_filtered (" ", stream); - len = strlen (TYPE_NAME (type)); + len = strlen (type->name ()); } fputs_filtered ("{\n", stream); - for (int i = 0; i < TYPE_NFIELDS (type); ++i) + for (int i = 0; i < type->num_fields (); ++i) { const char *name = TYPE_FIELD_NAME (type, i); QUIT; if (len > 0 - && strncmp (name, TYPE_NAME (type), len) == 0 + && strncmp (name, type->name (), len) == 0 && name[len] == ':' && name[len + 1] == ':') name += len + 2; - fprintfi_filtered (level + 2, stream, "%s,\n", name); + fprintfi_filtered (level + 2, stream, "%ps,\n", + styled_string (variable_name_style.style (), + name)); } fputs_filtered ("}", stream); @@ -951,8 +864,8 @@ case TYPE_CODE_PTR: { - if (TYPE_NAME (type) != nullptr) - fputs_filtered (TYPE_NAME (type), stream); + if (type->name () != nullptr) + fputs_filtered (type->name (), stream); else { /* We currently can't distinguish between pointers and @@ -969,16 +882,6 @@ } } -static void -rust_print_type (struct type *type, const char *varstring, - struct ui_file *stream, int show, int level, - const struct type_print_options *flags) -{ - print_offset_data podata; - rust_internal_print_type (type, varstring, stream, show, level, - flags, false, &podata); -} - /* Like arch_composite_type, but uses TYPE to decide how to allocate @@ -999,29 +902,29 @@ if (field2 != NULL) ++nfields; - TYPE_CODE (result) = TYPE_CODE_STRUCT; - TYPE_NAME (result) = name; + result->set_code (TYPE_CODE_STRUCT); + result->set_name (name); - TYPE_NFIELDS (result) = nfields; - TYPE_FIELDS (result) - = (struct field *) TYPE_ZALLOC (result, nfields * sizeof (struct field)); + result->set_num_fields (nfields); + result->set_fields + ((struct field *) TYPE_ZALLOC (result, nfields * sizeof (struct field))); i = 0; bitpos = 0; if (field1 != NULL) { - struct field *field = &TYPE_FIELD (result, i); + struct field *field = &result->field (i); SET_FIELD_BITPOS (*field, bitpos); bitpos += TYPE_LENGTH (type1) * TARGET_CHAR_BIT; FIELD_NAME (*field) = field1; - FIELD_TYPE (*field) = type1; + field->set_type (type1); ++i; } if (field2 != NULL) { - struct field *field = &TYPE_FIELD (result, i); + struct field *field = &result->field (i); unsigned align = type_align (type2); if (align != 0) @@ -1036,14 +939,14 @@ SET_FIELD_BITPOS (*field, bitpos); FIELD_NAME (*field) = field2; - FIELD_TYPE (*field) = type2; + field->set_type (type2); ++i; } if (i > 0) TYPE_LENGTH (result) = (TYPE_FIELD_BITPOS (result, i - 1) / TARGET_CHAR_BIT + - TYPE_LENGTH (TYPE_FIELD_TYPE (result, i - 1))); + TYPE_LENGTH (result->field (i - 1).type ())); return result; } @@ -1084,51 +987,6 @@ nr_rust_primitive_types }; -/* la_language_arch_info implementation for Rust. */ - -static void -rust_language_arch_info (struct gdbarch *gdbarch, - struct language_arch_info *lai) -{ - const struct builtin_type *builtin = builtin_type (gdbarch); - struct type *tem; - struct type **types; - unsigned int length; - - types = GDBARCH_OBSTACK_CALLOC (gdbarch, nr_rust_primitive_types + 1, - struct type *); - - types[rust_primitive_bool] = arch_boolean_type (gdbarch, 8, 1, "bool"); - types[rust_primitive_char] = arch_character_type (gdbarch, 32, 1, "char"); - types[rust_primitive_i8] = arch_integer_type (gdbarch, 8, 0, "i8"); - types[rust_primitive_u8] = arch_integer_type (gdbarch, 8, 1, "u8"); - types[rust_primitive_i16] = arch_integer_type (gdbarch, 16, 0, "i16"); - types[rust_primitive_u16] = arch_integer_type (gdbarch, 16, 1, "u16"); - types[rust_primitive_i32] = arch_integer_type (gdbarch, 32, 0, "i32"); - types[rust_primitive_u32] = arch_integer_type (gdbarch, 32, 1, "u32"); - types[rust_primitive_i64] = arch_integer_type (gdbarch, 64, 0, "i64"); - types[rust_primitive_u64] = arch_integer_type (gdbarch, 64, 1, "u64"); - - length = 8 * TYPE_LENGTH (builtin->builtin_data_ptr); - types[rust_primitive_isize] = arch_integer_type (gdbarch, length, 0, "isize"); - types[rust_primitive_usize] = arch_integer_type (gdbarch, length, 1, "usize"); - - types[rust_primitive_f32] = arch_float_type (gdbarch, 32, "f32", - floatformats_ieee_single); - types[rust_primitive_f64] = arch_float_type (gdbarch, 64, "f64", - floatformats_ieee_double); - - types[rust_primitive_unit] = arch_integer_type (gdbarch, 0, 1, "()"); - - tem = make_cv_type (1, 0, types[rust_primitive_u8], NULL); - types[rust_primitive_str] = rust_slice_type ("&str", tem, - types[rust_primitive_usize]); - - lai->primitive_type_vector = types; - lai->bool_type_default = types[rust_primitive_bool]; - lai->string_char_type = types[rust_primitive_u8]; -} - /* A helper for rust_evaluate_subexp that handles OP_FUNCALL. */ @@ -1156,12 +1014,12 @@ /* Evaluate the argument to STRUCTOP_STRUCT, then find its type in order to look up the method. */ - arg0 = evaluate_subexp (NULL_TYPE, exp, pos, noside); + arg0 = evaluate_subexp (nullptr, exp, pos, noside); if (noside == EVAL_SKIP) { for (i = 0; i < num_args; ++i) - evaluate_subexp (NULL_TYPE, exp, pos, noside); + evaluate_subexp (nullptr, exp, pos, noside); return arg0; } @@ -1169,19 +1027,19 @@ args[0] = arg0; /* We don't yet implement real Deref semantics. */ - while (TYPE_CODE (value_type (args[0])) == TYPE_CODE_PTR) + while (value_type (args[0])->code () == TYPE_CODE_PTR) args[0] = value_ind (args[0]); type = value_type (args[0]); - if ((TYPE_CODE (type) != TYPE_CODE_STRUCT - && TYPE_CODE (type) != TYPE_CODE_UNION - && TYPE_CODE (type) != TYPE_CODE_ENUM) + if ((type->code () != TYPE_CODE_STRUCT + && type->code () != TYPE_CODE_UNION + && type->code () != TYPE_CODE_ENUM) || rust_tuple_type_p (type)) error (_("Method calls only supported on struct or enum types")); - if (TYPE_NAME (type) == NULL) + if (type->name () == NULL) error (_("Method call on nameless type")); - std::string name = std::string (TYPE_NAME (type)) + "::" + method; + std::string name = std::string (type->name ()) + "::" + method; block = get_selected_block (0); sym = lookup_symbol (name.c_str (), block, VAR_DOMAIN, NULL); @@ -1189,16 +1047,16 @@ error (_("Could not find function named '%s'"), name.c_str ()); fn_type = SYMBOL_TYPE (sym.symbol); - if (TYPE_NFIELDS (fn_type) == 0) + if (fn_type->num_fields () == 0) error (_("Function '%s' takes no arguments"), name.c_str ()); - if (TYPE_CODE (TYPE_FIELD_TYPE (fn_type, 0)) == TYPE_CODE_PTR) + if (fn_type->field (0).type ()->code () == TYPE_CODE_PTR) args[0] = value_addr (args[0]); function = address_of_variable (sym.symbol, block); for (i = 0; i < num_args; ++i) - args[i + 1] = evaluate_subexp (NULL_TYPE, exp, pos, noside); + args[i + 1] = evaluate_subexp (nullptr, exp, pos, noside); if (noside == EVAL_AVOID_SIDE_EFFECTS) result = value_zero (TYPE_TARGET_TYPE (fn_type), not_lval); @@ -1226,10 +1084,10 @@ if (kind == HIGH_BOUND_DEFAULT || kind == NONE_BOUND_DEFAULT || kind == NONE_BOUND_DEFAULT_EXCLUSIVE) - low = evaluate_subexp (NULL_TYPE, exp, pos, noside); + low = evaluate_subexp (nullptr, exp, pos, noside); if (kind == LOW_BOUND_DEFAULT || kind == LOW_BOUND_DEFAULT_EXCLUSIVE || kind == NONE_BOUND_DEFAULT || kind == NONE_BOUND_DEFAULT_EXCLUSIVE) - high = evaluate_subexp (NULL_TYPE, exp, pos, noside); + high = evaluate_subexp (nullptr, exp, pos, noside); bool inclusive = (kind == NONE_BOUND_DEFAULT || kind == LOW_BOUND_DEFAULT); if (noside == EVAL_SKIP) @@ -1321,7 +1179,7 @@ *high = 0; *kind = BOTH_BOUND_DEFAULT; - if (TYPE_NFIELDS (type) == 0) + if (type->num_fields () == 0) return; i = 0; @@ -1331,7 +1189,7 @@ *low = value_as_long (value_field (range, 0)); ++i; } - if (TYPE_NFIELDS (type) > i + if (type->num_fields () > i && strcmp (TYPE_FIELD_NAME (type, i), "end") == 0) { *kind = (*kind == BOTH_BOUND_DEFAULT @@ -1358,8 +1216,8 @@ int want_slice = 0; ++*pos; - lhs = evaluate_subexp (NULL_TYPE, exp, pos, noside); - rhs = evaluate_subexp (NULL_TYPE, exp, pos, noside); + lhs = evaluate_subexp (nullptr, exp, pos, noside); + rhs = evaluate_subexp (nullptr, exp, pos, noside); if (noside == EVAL_SKIP) return lhs; @@ -1379,22 +1237,22 @@ if (noside == EVAL_AVOID_SIDE_EFFECTS) { struct type *base_type = nullptr; - if (TYPE_CODE (type) == TYPE_CODE_ARRAY) + if (type->code () == TYPE_CODE_ARRAY) base_type = TYPE_TARGET_TYPE (type); else if (rust_slice_type_p (type)) { - for (int i = 0; i < TYPE_NFIELDS (type); ++i) + for (int i = 0; i < type->num_fields (); ++i) { if (strcmp (TYPE_FIELD_NAME (type, i), "data_ptr") == 0) { - base_type = TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (type, i)); + base_type = TYPE_TARGET_TYPE (type->field (i).type ()); break; } } if (base_type == nullptr) error (_("Could not find 'data_ptr' in slice type")); } - else if (TYPE_CODE (type) == TYPE_CODE_PTR) + else if (type->code () == TYPE_CODE_PTR) base_type = TYPE_TARGET_TYPE (type); else error (_("Cannot subscript non-array type")); @@ -1423,7 +1281,7 @@ LONGEST low_bound; struct value *base; - if (TYPE_CODE (type) == TYPE_CODE_ARRAY) + if (type->code () == TYPE_CODE_ARRAY) { base = lhs; if (!get_array_bounds (type, &low_bound, &high_bound)) @@ -1441,7 +1299,7 @@ low_bound = 0; high_bound = value_as_long (len); } - else if (TYPE_CODE (type) == TYPE_CODE_PTR) + else if (type->code () == TYPE_CODE_PTR) { base = lhs; low_bound = 0; @@ -1483,7 +1341,7 @@ "usize"); const char *new_name = ((type != nullptr && rust_slice_type_p (type)) - ? TYPE_NAME (type) : "&[*gdb*]"); + ? type->name () : "&[*gdb*]"); slice = rust_slice_type (new_name, value_type (result), usize); @@ -1538,13 +1396,13 @@ struct value *value; ++*pos; - value = evaluate_subexp (NULL_TYPE, exp, pos, noside); + value = evaluate_subexp (nullptr, exp, pos, noside); if (noside == EVAL_SKIP) { /* Preserving the type is enough. */ return value; } - if (TYPE_CODE (value_type (value)) == TYPE_CODE_BOOL) + if (value_type (value)->code () == TYPE_CODE_BOOL) result = value_from_longest (value_type (value), value_logical_not (value)); else @@ -1669,49 +1527,45 @@ pc = (*pos)++; field_number = longest_to_int (exp->elts[pc + 1].longconst); (*pos) += 2; - lhs = evaluate_subexp (NULL_TYPE, exp, pos, noside); + lhs = evaluate_subexp (nullptr, exp, pos, noside); - type = value_type (lhs); + type = value_type (lhs); - if (TYPE_CODE (type) == TYPE_CODE_STRUCT) + if (type->code () == TYPE_CODE_STRUCT) { struct type *outer_type = NULL; if (rust_enum_p (type)) { + gdb::array_view<const gdb_byte> view (value_contents (lhs), + TYPE_LENGTH (type)); + type = resolve_dynamic_type (type, view, value_address (lhs)); + if (rust_empty_enum_p (type)) error (_("Cannot access field %d of empty enum %s"), - field_number, TYPE_NAME (type)); - - const gdb_byte *valaddr = value_contents (lhs); - struct field *variant_field = rust_enum_variant (type, valaddr); - - struct value *union_value = value_primitive_field (lhs, 0, 0, - type); + field_number, type->name ()); - int fieldno = (variant_field - - &TYPE_FIELD (value_type (union_value), 0)); - lhs = value_primitive_field (union_value, 0, fieldno, - value_type (union_value)); + int fieldno = rust_enum_variant (type); + lhs = value_primitive_field (lhs, 0, fieldno, type); outer_type = type; type = value_type (lhs); } /* Tuples and tuple structs */ - nfields = TYPE_NFIELDS (type); + nfields = type->num_fields (); if (field_number >= nfields || field_number < 0) { if (outer_type != NULL) error(_("Cannot access field %d of variant %s::%s, " "there are only %d fields"), - field_number, TYPE_NAME (outer_type), - rust_last_path_segment (TYPE_NAME (type)), + field_number, outer_type->name (), + rust_last_path_segment (type->name ()), nfields); else error(_("Cannot access field %d of %s, " "there are only %d fields"), - field_number, TYPE_NAME (type), nfields); + field_number, type->name (), nfields); } /* Tuples are tuple structs too. */ @@ -1719,13 +1573,13 @@ { if (outer_type != NULL) error(_("Variant %s::%s is not a tuple variant"), - TYPE_NAME (outer_type), - rust_last_path_segment (TYPE_NAME (type))); + outer_type->name (), + rust_last_path_segment (type->name ())); else error(_("Attempting to access anonymous field %d " "of %s, which is not a tuple, tuple struct, or " "tuple-like variant"), - field_number, TYPE_NAME (type)); + field_number, type->name ()); } result = value_primitive_field (lhs, 0, field_number, type); @@ -1745,34 +1599,30 @@ pc = (*pos)++; tem = longest_to_int (exp->elts[pc + 1].longconst); (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1); - lhs = evaluate_subexp (NULL_TYPE, exp, pos, noside); + lhs = evaluate_subexp (nullptr, exp, pos, noside); const char *field_name = &exp->elts[pc + 2].string; type = value_type (lhs); - if (TYPE_CODE (type) == TYPE_CODE_STRUCT && rust_enum_p (type)) + if (type->code () == TYPE_CODE_STRUCT && rust_enum_p (type)) { + gdb::array_view<const gdb_byte> view (value_contents (lhs), + TYPE_LENGTH (type)); + type = resolve_dynamic_type (type, view, value_address (lhs)); + if (rust_empty_enum_p (type)) error (_("Cannot access field %s of empty enum %s"), - field_name, TYPE_NAME (type)); - - const gdb_byte *valaddr = value_contents (lhs); - struct field *variant_field = rust_enum_variant (type, valaddr); + field_name, type->name ()); - struct value *union_value = value_primitive_field (lhs, 0, 0, - type); - - int fieldno = (variant_field - - &TYPE_FIELD (value_type (union_value), 0)); - lhs = value_primitive_field (union_value, 0, fieldno, - value_type (union_value)); + int fieldno = rust_enum_variant (type); + lhs = value_primitive_field (lhs, 0, fieldno, type); struct type *outer_type = type; type = value_type (lhs); if (rust_tuple_type_p (type) || rust_tuple_struct_type_p (type)) error (_("Attempting to access named field %s of tuple " "variant %s::%s, which has only anonymous fields"), - field_name, TYPE_NAME (outer_type), - rust_last_path_segment (TYPE_NAME (type))); + field_name, outer_type->name (), + rust_last_path_segment (type->name ())); try { @@ -1782,8 +1632,8 @@ catch (const gdb_exception_error &except) { error (_("Could not find field %s of struct variant %s::%s"), - field_name, TYPE_NAME (outer_type), - rust_last_path_segment (TYPE_NAME (type))); + field_name, outer_type->name (), + rust_last_path_segment (type->name ())); } } else @@ -2042,76 +1892,6 @@ -/* Implementation of la_lookup_symbol_nonlocal for Rust. */ - -static struct block_symbol -rust_lookup_symbol_nonlocal (const struct language_defn *langdef, - const char *name, - const struct block *block, - const domain_enum domain) -{ - struct block_symbol result = {}; - - if (symbol_lookup_debug) - { - fprintf_unfiltered (gdb_stdlog, - "rust_lookup_symbol_non_local" - " (%s, %s (scope %s), %s)\n", - name, host_address_to_string (block), - block_scope (block), domain_name (domain)); - } - - /* Look up bare names in the block's scope. */ - std::string scopedname; - if (name[cp_find_first_component (name)] == '\0') - { - const char *scope = block_scope (block); - - if (scope[0] != '\0') - { - scopedname = std::string (scope) + "::" + name; - name = scopedname.c_str (); - } - else - name = NULL; - } - - if (name != NULL) - { - result = lookup_symbol_in_static_block (name, block, domain); - if (result.symbol == NULL) - result = lookup_global_symbol (name, block, domain); - } - return result; -} - - - -/* la_sniff_from_mangled_name for Rust. */ - -static int -rust_sniff_from_mangled_name (const char *mangled, char **demangled) -{ - *demangled = gdb_demangle (mangled, DMGL_PARAMS | DMGL_ANSI); - return *demangled != NULL; -} - - - -/* la_watch_location_expression for Rust. */ - -static gdb::unique_xmalloc_ptr<char> -rust_watch_location_expression (struct type *type, CORE_ADDR addr) -{ - type = check_typedef (TYPE_TARGET_TYPE (check_typedef (type))); - std::string name = type_to_string (type); - return gdb::unique_xmalloc_ptr<char> - (xstrprintf ("*(%s as *mut %s)", core_addr_to_string (addr), - name.c_str ())); -} - - - static const struct exp_descriptor exp_descriptor_rust = { rust_print_subexp, @@ -2127,7 +1907,9 @@ ".rs", NULL }; -extern const struct language_defn rust_language_defn = +/* Constant data representing the Rust language. */ + +extern const struct language_data rust_language_data = { "rust", "Rust", @@ -2138,40 +1920,238 @@ macro_expansion_no, rust_extensions, &exp_descriptor_rust, - rust_parse, - null_post_parser, - rust_printchar, /* Print a character constant */ - rust_printstr, /* Function to print string constant */ - rust_emitchar, /* Print a single char */ - rust_print_type, /* Print a type using appropriate syntax */ - rust_print_typedef, /* Print a typedef using appropriate syntax */ - rust_val_print, /* Print a value using appropriate syntax */ - c_value_print, /* Print a top-level value */ - default_read_var_value, /* la_read_var_value */ - NULL, /* Language specific skip_trampoline */ NULL, /* name_of_this */ false, /* la_store_sym_names_in_linkage_form_p */ - rust_lookup_symbol_nonlocal, /* lookup_symbol_nonlocal */ - basic_lookup_transparent_type,/* lookup_transparent_type */ - gdb_demangle, /* Language specific symbol demangler */ - rust_sniff_from_mangled_name, - NULL, /* Language specific - class_name_from_physname */ c_op_print_tab, /* expression operators for printing */ 1, /* c-style arrays */ 0, /* String lower bound */ - default_word_break_characters, - default_collect_symbol_completion_matches, - rust_language_arch_info, - default_print_array_index, - default_pass_by_reference, - rust_watch_location_expression, - NULL, /* la_get_symbol_name_matcher */ - iterate_over_symbols, - default_search_name_hash, &default_varobj_ops, - NULL, - NULL, - rust_is_string_type_p, "{...}" /* la_struct_too_deep_ellipsis */ }; + +/* Class representing the Rust language. */ + +class rust_language : public language_defn +{ +public: + rust_language () + : language_defn (language_rust, rust_language_data) + { /* Nothing. */ } + + /* See language.h. */ + void language_arch_info (struct gdbarch *gdbarch, + struct language_arch_info *lai) const override + { + const struct builtin_type *builtin = builtin_type (gdbarch); + + struct type **types + = GDBARCH_OBSTACK_CALLOC (gdbarch, nr_rust_primitive_types + 1, + struct type *); + + types[rust_primitive_bool] = arch_boolean_type (gdbarch, 8, 1, "bool"); + types[rust_primitive_char] = arch_character_type (gdbarch, 32, 1, "char"); + types[rust_primitive_i8] = arch_integer_type (gdbarch, 8, 0, "i8"); + types[rust_primitive_u8] = arch_integer_type (gdbarch, 8, 1, "u8"); + types[rust_primitive_i16] = arch_integer_type (gdbarch, 16, 0, "i16"); + types[rust_primitive_u16] = arch_integer_type (gdbarch, 16, 1, "u16"); + types[rust_primitive_i32] = arch_integer_type (gdbarch, 32, 0, "i32"); + types[rust_primitive_u32] = arch_integer_type (gdbarch, 32, 1, "u32"); + types[rust_primitive_i64] = arch_integer_type (gdbarch, 64, 0, "i64"); + types[rust_primitive_u64] = arch_integer_type (gdbarch, 64, 1, "u64"); + + unsigned int length = 8 * TYPE_LENGTH (builtin->builtin_data_ptr); + types[rust_primitive_isize] = arch_integer_type (gdbarch, length, 0, "isize"); + types[rust_primitive_usize] = arch_integer_type (gdbarch, length, 1, "usize"); + + types[rust_primitive_f32] = arch_float_type (gdbarch, 32, "f32", + floatformats_ieee_single); + types[rust_primitive_f64] = arch_float_type (gdbarch, 64, "f64", + floatformats_ieee_double); + + types[rust_primitive_unit] = arch_integer_type (gdbarch, 0, 1, "()"); + + struct type *tem = make_cv_type (1, 0, types[rust_primitive_u8], NULL); + types[rust_primitive_str] = rust_slice_type ("&str", tem, + types[rust_primitive_usize]); + + lai->primitive_type_vector = types; + lai->bool_type_default = types[rust_primitive_bool]; + lai->string_char_type = types[rust_primitive_u8]; + } + + /* See language.h. */ + bool sniff_from_mangled_name (const char *mangled, + char **demangled) const override + { + *demangled = gdb_demangle (mangled, DMGL_PARAMS | DMGL_ANSI); + return *demangled != NULL; + } + + /* See language.h. */ + + char *demangle (const char *mangled, int options) const override + { + return gdb_demangle (mangled, options); + } + + /* See language.h. */ + + void print_type (struct type *type, const char *varstring, + struct ui_file *stream, int show, int level, + const struct type_print_options *flags) const override + { + print_offset_data podata; + rust_internal_print_type (type, varstring, stream, show, level, + flags, false, &podata); + } + + /* See language.h. */ + + gdb::unique_xmalloc_ptr<char> watch_location_expression + (struct type *type, CORE_ADDR addr) const override + { + type = check_typedef (TYPE_TARGET_TYPE (check_typedef (type))); + std::string name = type_to_string (type); + return gdb::unique_xmalloc_ptr<char> + (xstrprintf ("*(%s as *mut %s)", core_addr_to_string (addr), + name.c_str ())); + } + + /* See language.h. */ + + void value_print_inner + (struct value *val, struct ui_file *stream, int recurse, + const struct value_print_options *options) const override + { + return rust_value_print_inner (val, stream, recurse, options); + } + + /* See language.h. */ + + struct block_symbol lookup_symbol_nonlocal + (const char *name, const struct block *block, + const domain_enum domain) const override + { + struct block_symbol result = {}; + + if (symbol_lookup_debug) + { + fprintf_unfiltered (gdb_stdlog, + "rust_lookup_symbol_non_local" + " (%s, %s (scope %s), %s)\n", + name, host_address_to_string (block), + block_scope (block), domain_name (domain)); + } + + /* Look up bare names in the block's scope. */ + std::string scopedname; + if (name[cp_find_first_component (name)] == '\0') + { + const char *scope = block_scope (block); + + if (scope[0] != '\0') + { + scopedname = std::string (scope) + "::" + name; + name = scopedname.c_str (); + } + else + name = NULL; + } + + if (name != NULL) + { + result = lookup_symbol_in_static_block (name, block, domain); + if (result.symbol == NULL) + result = lookup_global_symbol (name, block, domain); + } + return result; + } + + /* See language.h. */ + + int parser (struct parser_state *ps) const override + { + return rust_parse (ps); + } + + /* See language.h. */ + + void emitchar (int ch, struct type *chtype, + struct ui_file *stream, int quoter) const override + { + if (!rust_chartype_p (chtype)) + generic_emit_char (ch, chtype, stream, quoter, + target_charset (get_type_arch (chtype))); + else if (ch == '\\' || ch == quoter) + fprintf_filtered (stream, "\\%c", ch); + else if (ch == '\n') + fputs_filtered ("\\n", stream); + else if (ch == '\r') + fputs_filtered ("\\r", stream); + else if (ch == '\t') + fputs_filtered ("\\t", stream); + else if (ch == '\0') + fputs_filtered ("\\0", stream); + else if (ch >= 32 && ch <= 127 && isprint (ch)) + fputc_filtered (ch, stream); + else if (ch <= 255) + fprintf_filtered (stream, "\\x%02x", ch); + else + fprintf_filtered (stream, "\\u{%06x}", ch); + } + + /* See language.h. */ + + void printchar (int ch, struct type *chtype, + struct ui_file *stream) const override + { + fputs_filtered ("'", stream); + LA_EMIT_CHAR (ch, chtype, stream, '\''); + fputs_filtered ("'", stream); + } + + /* See language.h. */ + + void printstr (struct ui_file *stream, struct type *elttype, + const gdb_byte *string, unsigned int length, + const char *encoding, int force_ellipses, + const struct value_print_options *options) const override + { + rust_printstr (stream, elttype, string, length, encoding, + force_ellipses, options); + } + + /* See language.h. */ + + void print_typedef (struct type *type, struct symbol *new_symbol, + struct ui_file *stream) const override + { + type = check_typedef (type); + fprintf_filtered (stream, "type %s = ", new_symbol->print_name ()); + type_print (type, "", stream, 0); + fprintf_filtered (stream, ";"); + } + + /* See language.h. */ + + bool is_string_type_p (struct type *type) const override + { + LONGEST low_bound, high_bound; + + type = check_typedef (type); + return ((type->code () == TYPE_CODE_STRING) + || (type->code () == TYPE_CODE_PTR + && (TYPE_TARGET_TYPE (type)->code () == TYPE_CODE_ARRAY + && rust_u8_type_p (TYPE_TARGET_TYPE (TYPE_TARGET_TYPE (type))) + && get_array_bounds (TYPE_TARGET_TYPE (type), &low_bound, + &high_bound))) + || (type->code () == TYPE_CODE_STRUCT + && !rust_enum_p (type) + && rust_slice_type_p (type) + && strcmp (type->name (), "&str") == 0)); + } +}; + +/* Single instance of the Rust language class. */ + +static rust_language rust_language_defn; diff -Nru gdb-9.1/gdb/rust-lang.h gdb-10.2/gdb/rust-lang.h --- gdb-9.1/gdb/rust-lang.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/rust-lang.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Rust language support definitions for GDB, the GNU debugger. - Copyright (C) 2016-2020 Free Software Foundation, Inc. + Copyright (C) 2016-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/rx-tdep.c gdb-10.2/gdb/rx-tdep.c --- gdb-9.1/gdb/rx-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/rx-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for the Renesas RX for GDB, the GNU debugger. - Copyright (C) 2008-2020 Free Software Foundation, Inc. + Copyright (C) 2008-2021 Free Software Foundation, Inc. Contributed by Red Hat, Inc. @@ -32,7 +32,7 @@ #include "frame-base.h" #include "value.h" #include "gdbcore.h" -#include "dwarf2-frame.h" +#include "dwarf2/frame.h" #include "remote.h" #include "target-descriptions.h" @@ -668,12 +668,12 @@ struct type *func_type = value_type (function); /* Dereference function pointer types. */ - while (TYPE_CODE (func_type) == TYPE_CODE_PTR) + while (func_type->code () == TYPE_CODE_PTR) func_type = TYPE_TARGET_TYPE (func_type); /* The end result had better be a function or a method. */ - gdb_assert (TYPE_CODE (func_type) == TYPE_CODE_FUNC - || TYPE_CODE (func_type) == TYPE_CODE_METHOD); + gdb_assert (func_type->code () == TYPE_CODE_FUNC + || func_type->code () == TYPE_CODE_METHOD); /* Functions with a variable number of arguments have all of their variable arguments and the last non-variable argument passed @@ -687,7 +687,7 @@ of the ``arg_reg'' variable to get these other details correct. */ if (TYPE_VARARGS (func_type)) - num_register_candidate_args = TYPE_NFIELDS (func_type) - 1; + num_register_candidate_args = func_type->num_fields () - 1; else num_register_candidate_args = 4; @@ -706,8 +706,8 @@ { struct type *return_type = TYPE_TARGET_TYPE (func_type); - gdb_assert (TYPE_CODE (return_type) == TYPE_CODE_STRUCT - || TYPE_CODE (func_type) == TYPE_CODE_UNION); + gdb_assert (return_type->code () == TYPE_CODE_STRUCT + || func_type->code () == TYPE_CODE_UNION); if (TYPE_LENGTH (return_type) > 16 || TYPE_LENGTH (return_type) % 4 != 0) @@ -728,7 +728,7 @@ if (i == 0 && struct_addr != 0 && return_method != return_method_struct - && TYPE_CODE (arg_type) == TYPE_CODE_PTR + && arg_type->code () == TYPE_CODE_PTR && extract_unsigned_integer (arg_bits, 4, byte_order) == struct_addr) { @@ -739,8 +739,8 @@ regcache_cooked_write_unsigned (regcache, RX_R15_REGNUM, struct_addr); } - else if (TYPE_CODE (arg_type) != TYPE_CODE_STRUCT - && TYPE_CODE (arg_type) != TYPE_CODE_UNION + else if (arg_type->code () != TYPE_CODE_STRUCT + && arg_type->code () != TYPE_CODE_UNION && arg_size <= 8) { /* Argument is a scalar. */ @@ -796,10 +796,10 @@ int p_arg_size = 4; if (TYPE_PROTOTYPED (func_type) - && i < TYPE_NFIELDS (func_type)) + && i < func_type->num_fields ()) { struct type *p_arg_type = - TYPE_FIELD_TYPE (func_type, i); + func_type->field (i).type (); p_arg_size = TYPE_LENGTH (p_arg_type); } @@ -874,8 +874,8 @@ ULONGEST valtype_len = TYPE_LENGTH (valtype); if (TYPE_LENGTH (valtype) > 16 - || ((TYPE_CODE (valtype) == TYPE_CODE_STRUCT - || TYPE_CODE (valtype) == TYPE_CODE_UNION) + || ((valtype->code () == TYPE_CODE_STRUCT + || valtype->code () == TYPE_CODE_UNION) && TYPE_LENGTH (valtype) % 4 != 0)) return RETURN_VALUE_STRUCT_CONVENTION; @@ -1057,8 +1057,9 @@ /* Register the above initialization routine. */ +void _initialize_rx_tdep (); void -_initialize_rx_tdep (void) +_initialize_rx_tdep () { register_gdbarch_init (bfd_arch_rx, rx_gdbarch_init); initialize_tdesc_rx (); diff -Nru gdb-9.1/gdb/s12z-tdep.c gdb-10.2/gdb/s12z-tdep.c --- gdb-9.1/gdb/s12z-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/s12z-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Target-dependent code for the S12Z, for the GDB. - Copyright (C) 2018-2020 Free Software Foundation, Inc. + Copyright (C) 2018-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -21,7 +21,7 @@ #include "defs.h" #include "arch-utils.h" -#include "dwarf2-frame.h" +#include "dwarf2/frame.h" #include "gdbsupport/errors.h" #include "frame-unwind.h" #include "gdbcore.h" @@ -614,9 +614,9 @@ struct type *type, struct regcache *regcache, gdb_byte *readbuf, const gdb_byte *writebuf) { - if (TYPE_CODE (type) == TYPE_CODE_STRUCT - || TYPE_CODE (type) == TYPE_CODE_UNION - || TYPE_CODE (type) == TYPE_CODE_ARRAY + if (type->code () == TYPE_CODE_STRUCT + || type->code () == TYPE_CODE_UNION + || type->code () == TYPE_CODE_ARRAY || TYPE_LENGTH (type) > 4) return RETURN_VALUE_STRUCT_CONVENTION; @@ -685,8 +685,9 @@ return gdbarch; } +void _initialize_s12z_tdep (); void -_initialize_s12z_tdep (void) +_initialize_s12z_tdep () { gdbarch_register (bfd_arch_s12z, s12z_gdbarch_init, NULL); } diff -Nru gdb-9.1/gdb/s390-linux-nat.c gdb-10.2/gdb/s390-linux-nat.c --- gdb-9.1/gdb/s390-linux-nat.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/s390-linux-nat.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* S390 native-dependent code for GDB, the GNU debugger. - Copyright (C) 2001-2020 Free Software Foundation, Inc. + Copyright (C) 2001-2021 Free Software Foundation, Inc. Contributed by D.J. Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com) for IBM Deutschland Entwicklung GmbH, IBM Corporation. @@ -1045,8 +1045,9 @@ tdesc_s390_linux32); } +void _initialize_s390_nat (); void -_initialize_s390_nat (void) +_initialize_s390_nat () { /* Register the target. */ linux_target = &the_s390_linux_nat_target; diff -Nru gdb-9.1/gdb/s390-linux-tdep.c gdb-10.2/gdb/s390-linux-tdep.c --- gdb-9.1/gdb/s390-linux-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/s390-linux-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for GNU/Linux on s390. - Copyright (C) 2001-2020 Free Software Foundation, Inc. + Copyright (C) 2001-2021 Free Software Foundation, Inc. Contributed by D.J. Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com) for IBM Deutschland Entwicklung GmbH, IBM Corporation. @@ -1177,8 +1177,9 @@ set_xml_syscall_file_name (gdbarch, XML_SYSCALL_FILENAME_S390X); } +void _initialize_s390_linux_tdep (); void -_initialize_s390_linux_tdep (void) +_initialize_s390_linux_tdep () { /* Hook us into the OSABI mechanism. */ gdbarch_register_osabi (bfd_arch_s390, bfd_mach_s390_31, GDB_OSABI_LINUX, diff -Nru gdb-9.1/gdb/s390-linux-tdep.h gdb-10.2/gdb/s390-linux-tdep.h --- gdb-9.1/gdb/s390-linux-tdep.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/s390-linux-tdep.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for GNU/Linux on s390. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/s390-tdep.c gdb-10.2/gdb/s390-tdep.c --- gdb-9.1/gdb/s390-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/s390-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for s390. - Copyright (C) 2001-2020 Free Software Foundation, Inc. + Copyright (C) 2001-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -21,7 +21,7 @@ #include "arch-utils.h" #include "ax-gdb.h" -#include "dwarf2-frame.h" +#include "dwarf2/frame.h" #include "elf/s390.h" #include "elf-bfd.h" #include "frame-base.h" @@ -63,7 +63,7 @@ if (TYPE_LENGTH (t) > 8) { - switch (TYPE_CODE (t)) + switch (t->code ()) { case TYPE_CODE_INT: case TYPE_CODE_RANGE: @@ -425,7 +425,7 @@ /* Implementation of gdbarch_displaced_step_copy_insn. */ -static struct displaced_step_closure * +static displaced_step_closure_up s390_displaced_step_copy_insn (struct gdbarch *gdbarch, CORE_ADDR from, CORE_ADDR to, struct regcache *regs) @@ -477,7 +477,8 @@ displaced_step_dump_bytes (gdb_stdlog, buf, len); } - return closure.release (); + /* This is a work around for a problem with g++ 4.8. */ + return displaced_step_closure_up (closure.release ()); } /* Fix up the state of registers and memory after having single-stepped @@ -517,14 +518,15 @@ paddress (gdbarch, pc), insnlen, (int) amode); /* Handle absolute branch and save instructions. */ - if (is_rr (insn, op_basr, &r1, &r2) + int op_basr_p = is_rr (insn, op_basr, &r1, &r2); + if (op_basr_p || is_rx (insn, op_bas, &r1, &d2, &x2, &b2)) { /* Recompute saved return address in R1. */ regcache_cooked_write_unsigned (regs, S390_R0_REGNUM + r1, amode | (from + insnlen)); /* Update PC iff the instruction doesn't actually branch. */ - if (insn[0] == op_basr && r2 == 0) + if (op_basr_p && r2 == 0) regcache_write_pc (regs, from + insnlen); } @@ -1637,21 +1639,21 @@ static struct type * s390_effective_inner_type (struct type *type, unsigned int min_size) { - while (TYPE_CODE (type) == TYPE_CODE_STRUCT) + while (type->code () == TYPE_CODE_STRUCT) { struct type *inner = NULL; /* Find a non-static field, if any. Unless there's exactly one, abort the unwrapping. */ - for (int i = 0; i < TYPE_NFIELDS (type); i++) + for (int i = 0; i < type->num_fields (); i++) { - struct field f = TYPE_FIELD (type, i); + struct field f = type->field (i); if (field_is_static (&f)) continue; if (inner != NULL) return type; - inner = FIELD_TYPE (f); + inner = f.type (); } if (inner == NULL) @@ -1680,8 +1682,8 @@ or double. */ type = s390_effective_inner_type (type, 0); - return (TYPE_CODE (type) == TYPE_CODE_FLT - || TYPE_CODE (type) == TYPE_CODE_DECFLOAT); + return (type->code () == TYPE_CODE_FLT + || type->code () == TYPE_CODE_DECFLOAT); } /* Return non-zero if TYPE should be passed like a vector. */ @@ -1695,7 +1697,7 @@ /* Structs containing just a vector are passed like a vector. */ type = s390_effective_inner_type (type, TYPE_LENGTH (type)); - return TYPE_CODE (type) == TYPE_CODE_ARRAY && TYPE_VECTOR (type); + return type->code () == TYPE_CODE_ARRAY && TYPE_VECTOR (type); } /* Determine whether N is a power of two. */ @@ -1713,7 +1715,7 @@ static int s390_function_arg_integer (struct type *type) { - enum type_code code = TYPE_CODE (type); + enum type_code code = type->code (); if (TYPE_LENGTH (type) > 8) return 0; @@ -1920,7 +1922,7 @@ CORE_ADDR param_area_start, new_sp; struct type *ftype = check_typedef (value_type (function)); - if (TYPE_CODE (ftype) == TYPE_CODE_PTR) + if (ftype->code () == TYPE_CODE_PTR) ftype = check_typedef (TYPE_TARGET_TYPE (ftype)); arg_prep.copy = sp; @@ -1937,7 +1939,7 @@ and arg_state.argp with the size of the parameter area. */ for (i = 0; i < nargs; i++) s390_handle_arg (&arg_state, args[i], tdep, word_size, byte_order, - TYPE_VARARGS (ftype) && i >= TYPE_NFIELDS (ftype)); + TYPE_VARARGS (ftype) && i >= ftype->num_fields ()); param_area_start = align_down (arg_state.copy - arg_state.argp, 8); @@ -1964,7 +1966,7 @@ /* Write all parameters. */ for (i = 0; i < nargs; i++) s390_handle_arg (&arg_state, args[i], tdep, word_size, byte_order, - TYPE_VARARGS (ftype) && i >= TYPE_NFIELDS (ftype)); + TYPE_VARARGS (ftype) && i >= ftype->num_fields ()); /* Store return PSWA. In 31-bit mode, keep addressing mode bit. */ if (word_size == 4) @@ -2020,7 +2022,7 @@ enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); int word_size = gdbarch_ptr_bit (gdbarch) / 8; int length = TYPE_LENGTH (type); - int code = TYPE_CODE (type); + int code = type->code (); if (code == TYPE_CODE_FLT || code == TYPE_CODE_DECFLOAT) { @@ -2082,7 +2084,7 @@ type = check_typedef (type); - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_STRUCT: case TYPE_CODE_UNION: @@ -7215,8 +7217,9 @@ return gdbarch; } +void _initialize_s390_tdep (); void -_initialize_s390_tdep (void) +_initialize_s390_tdep () { /* Hook us into the gdbarch mechanism. */ register_gdbarch_init (bfd_arch_s390, s390_gdbarch_init); diff -Nru gdb-9.1/gdb/s390-tdep.h gdb-10.2/gdb/s390-tdep.h --- gdb-9.1/gdb/s390-tdep.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/s390-tdep.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for s390. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -117,7 +117,7 @@ op_basr = 0x0d, op_bas = 0x4d, op_bcr = 0x07, - op_bc = 0x0d, + op_bc = 0x47, op_bctr = 0x06, op_bctgr = 0xb946, op_bct = 0x46, diff -Nru gdb-9.1/gdb/sanitize.m4 gdb-10.2/gdb/sanitize.m4 --- gdb-9.1/gdb/sanitize.m4 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/sanitize.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ dnl Sanitization-related configure macro for GDB -dnl Copyright (C) 2018-2020 Free Software Foundation, Inc. +dnl Copyright (C) 2018-2021 Free Software Foundation, Inc. dnl dnl This file is part of GDB. dnl diff -Nru gdb-9.1/gdb/scoped-mock-context.h gdb-10.2/gdb/scoped-mock-context.h --- gdb-9.1/gdb/scoped-mock-context.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/scoped-mock-context.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,82 @@ +/* RAII type to create a temporary mock context. + + Copyright (C) 2020-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef SCOPED_MOCK_CONTEXT_H +#define SCOPED_MOCK_CONTEXT_H + +#include "inferior.h" +#include "gdbthread.h" +#include "progspace.h" +#include "progspace-and-thread.h" + +#if GDB_SELF_TEST +namespace selftests { + +/* RAII type to create (and switch to) a temporary mock context. An + inferior with a thread, with a process_stratum target pushed. */ + +template<typename Target> +struct scoped_mock_context +{ + /* Order here is important. */ + + Target mock_target; + ptid_t mock_ptid {1, 1}; + program_space mock_pspace {new_address_space ()}; + inferior mock_inferior {mock_ptid.pid ()}; + thread_info mock_thread {&mock_inferior, mock_ptid}; + + scoped_restore_current_pspace_and_thread restore_pspace_thread; + + scoped_restore_tmpl<thread_info *> restore_thread_list + {&mock_inferior.thread_list, &mock_thread}; + + /* Add the mock inferior to the inferior list so that look ups by + target+ptid can find it. */ + scoped_restore_tmpl<inferior *> restore_inferior_list + {&inferior_list, &mock_inferior}; + + explicit scoped_mock_context (gdbarch *gdbarch) + { + mock_inferior.gdbarch = gdbarch; + mock_inferior.aspace = mock_pspace.aspace; + mock_inferior.pspace = &mock_pspace; + + /* Switch to the mock inferior. */ + switch_to_inferior_no_thread (&mock_inferior); + + /* Push the process_stratum target so we can mock accessing + registers. */ + gdb_assert (mock_target.stratum () == process_stratum); + push_target (&mock_target); + + /* Switch to the mock thread. */ + switch_to_thread (&mock_thread); + } + + ~scoped_mock_context () + { + pop_all_targets_at_and_above (process_stratum); + } +}; + +} // namespace selftests +#endif /* GDB_SELF_TEST */ + +#endif /* !defined (SCOPED_MOCK_CONTEXT_H) */ diff -Nru gdb-9.1/gdb/score-tdep.c gdb-10.2/gdb/score-tdep.c --- gdb-9.1/gdb/score-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/score-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,7 +1,7 @@ /* Target-dependent code for the S+core architecture, for GDB, the GNU Debugger. - Copyright (C) 2006-2020 Free Software Foundation, Inc. + Copyright (C) 2006-2021 Free Software Foundation, Inc. Contributed by Qinwei (qinwei@sunnorth.com.cn) Contributed by Ching-Peng Lin (cplin@sunplus.com) @@ -34,7 +34,7 @@ #include "frame-unwind.h" #include "frame-base.h" #include "trad-frame.h" -#include "dwarf2-frame.h" +#include "dwarf2/frame.h" #include "score-tdep.h" #define G_FLD(_i,_ms,_ls) \ @@ -442,9 +442,9 @@ struct type *type, struct regcache *regcache, gdb_byte * readbuf, const gdb_byte * writebuf) { - if (TYPE_CODE (type) == TYPE_CODE_STRUCT - || TYPE_CODE (type) == TYPE_CODE_UNION - || TYPE_CODE (type) == TYPE_CODE_ARRAY) + if (type->code () == TYPE_CODE_STRUCT + || type->code () == TYPE_CODE_UNION + || type->code () == TYPE_CODE_ARRAY) return RETURN_VALUE_STRUCT_CONVENTION; else { @@ -469,7 +469,7 @@ static int score_type_needs_double_align (struct type *type) { - enum type_code typecode = TYPE_CODE (type); + enum type_code typecode = type->code (); if ((typecode == TYPE_CODE_INT && TYPE_LENGTH (type) == 8) || (typecode == TYPE_CODE_FLT && TYPE_LENGTH (type) == 8)) @@ -478,9 +478,9 @@ { int i, n; - n = TYPE_NFIELDS (type); + n = type->num_fields (); for (i = 0; i < n; i++) - if (score_type_needs_double_align (TYPE_FIELD_TYPE (type, i))) + if (score_type_needs_double_align (type->field (i).type ())) return 1; return 0; } @@ -529,7 +529,7 @@ { struct value *arg = args[argnum]; struct type *arg_type = check_typedef (value_type (arg)); - enum type_code typecode = TYPE_CODE (arg_type); + enum type_code typecode = arg_type->code (); const gdb_byte *val = value_contents (arg); int downward_offset = 0; int arg_last_part_p = 0; @@ -918,13 +918,15 @@ && G_FLD (inst->v, 2, 0) == 0x0) { /* subei! r0, n */ - sp_offset += (int) pow (2, G_FLD (inst->v, 6, 3)); + sp_offset += (int) pow (2.0, G_FLD (inst->v, 6, 3)); } else if (G_FLD (inst->v, 14, 7) == 0xc0 && G_FLD (inst->v, 2, 0) == 0x0) { /* addei! r0, n */ - sp_offset -= (int) pow (2, G_FLD (inst->v, 6, 3)); + /* Solaris 11+gcc 5.5 has ambiguous overloads of pow, so we + pass 2.0 instead of 2 to get the right one. */ + sp_offset -= (int) pow (2.0, G_FLD (inst->v, 6, 3)); } } else @@ -1508,8 +1510,9 @@ return gdbarch; } +void _initialize_score_tdep (); void -_initialize_score_tdep (void) +_initialize_score_tdep () { gdbarch_register (bfd_arch_score, score_gdbarch_init, NULL); } diff -Nru gdb-9.1/gdb/score-tdep.h gdb-10.2/gdb/score-tdep.h --- gdb-9.1/gdb/score-tdep.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/score-tdep.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,7 +1,7 @@ /* Target-dependent code for the S+core architecture, for GDB, the GNU Debugger. - Copyright (C) 2006-2020 Free Software Foundation, Inc. + Copyright (C) 2006-2021 Free Software Foundation, Inc. Contributed by Qinwei (qinwei@sunnorth.com.cn) Contributed by Ching-Peng Lin (cplin@sunplus.com) diff -Nru gdb-9.1/gdb/selftest-arch.c gdb-10.2/gdb/selftest-arch.c --- gdb-9.1/gdb/selftest-arch.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/selftest-arch.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* GDB self-test for each gdbarch. - Copyright (C) 2017-2020 Free Software Foundation, Inc. + Copyright (C) 2017-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/selftest-arch.h gdb-10.2/gdb/selftest-arch.h --- gdb-9.1/gdb/selftest-arch.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/selftest-arch.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* GDB self-test for each gdbarch. - Copyright (C) 2017-2020 Free Software Foundation, Inc. + Copyright (C) 2017-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/selftest.m4 gdb-10.2/gdb/selftest.m4 --- gdb-9.1/gdb/selftest.m4 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/selftest.m4 1970-01-01 00:00:00.000000000 +0000 @@ -1,45 +0,0 @@ -dnl Copyright (C) 2018-2020 Free Software Foundation, Inc. -dnl -dnl This file is part of GDB. -dnl -dnl This program is free software; you can redistribute it and/or modify -dnl it under the terms of the GNU General Public License as published by -dnl the Free Software Foundation; either version 3 of the License, or -dnl (at your option) any later version. -dnl -dnl This program is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -dnl GNU General Public License for more details. -dnl -dnl You should have received a copy of the GNU General Public License -dnl along with this program. If not, see <http://www.gnu.org/licenses/>. - -dnl GDB_AC_SELFTEST(ACTION-IF-ENABLED) -dnl -dnl Enable the unit/self tests if needed. If they are enabled, AC_DEFINE -dnl the GDB_SELF_TEST macro, and execute ACTION-IF-ENABLED. - -AC_DEFUN([GDB_AC_SELFTEST],[ -# Check whether we will enable the inclusion of unit tests when -# compiling GDB. -# -# The default value of this option changes depending whether we're on -# development mode (in which case it's "true") or not (in which case -# it's "false"). -AC_ARG_ENABLE(unit-tests, -AS_HELP_STRING([--enable-unit-tests], -[Enable the inclusion of unit tests when compiling GDB]), -[case "${enableval}" in - yes) enable_unittests=true ;; - no) enable_unittests=false ;; - *) AC_MSG_ERROR( -[bad value ${enableval} for --{enable,disable}-unit-tests option]) ;; -esac], [enable_unittests=$development]) - -if $enable_unittests; then - AC_DEFINE(GDB_SELF_TEST, 1, - [Define if self-testing features should be enabled]) - $1 -fi -]) diff -Nru gdb-9.1/gdb/sentinel-frame.c gdb-10.2/gdb/sentinel-frame.c --- gdb-9.1/gdb/sentinel-frame.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/sentinel-frame.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Code dealing with register stack frames, for GDB, the GNU debugger. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/sentinel-frame.h gdb-10.2/gdb/sentinel-frame.h --- gdb-9.1/gdb/sentinel-frame.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/sentinel-frame.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Code dealing with register stack frames, for GDB, the GNU debugger. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/ser-base.c gdb-10.2/gdb/ser-base.c --- gdb-9.1/gdb/ser-base.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/ser-base.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Generic serial interface functions. - Copyright (C) 1992-2020 Free Software Foundation, Inc. + Copyright (C) 1992-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -20,9 +20,9 @@ #include "defs.h" #include "serial.h" #include "ser-base.h" -#include "event-loop.h" +#include "gdbsupport/event-loop.h" -#include "gdb_select.h" +#include "gdbsupport/gdb_select.h" #include "gdbsupport/gdb_sys_time.h" #ifdef USE_WIN32API #include <winsock2.h> diff -Nru gdb-9.1/gdb/ser-base.h gdb-10.2/gdb/ser-base.h --- gdb-9.1/gdb/ser-base.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/ser-base.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Generic serial interface functions. - Copyright (C) 2005-2020 Free Software Foundation, Inc. + Copyright (C) 2005-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/ser-event.c gdb-10.2/gdb/ser-event.c --- gdb-9.1/gdb/ser-event.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/ser-event.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Serial interface for a selectable event. - Copyright (C) 2016-2020 Free Software Foundation, Inc. + Copyright (C) 2016-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/ser-event.h gdb-10.2/gdb/ser-event.h --- gdb-9.1/gdb/ser-event.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/ser-event.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Serial interface for a selectable event. - Copyright (C) 2016-2020 Free Software Foundation, Inc. + Copyright (C) 2016-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/ser-go32.c gdb-10.2/gdb/ser-go32.c --- gdb-9.1/gdb/ser-go32.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/ser-go32.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Remote serial interface for local (hardwired) serial ports for GO32. - Copyright (C) 1992-2020 Free Software Foundation, Inc. + Copyright (C) 1992-2021 Free Software Foundation, Inc. Contributed by Nigel Stephens, Algorithmics Ltd. (nigel@algor.co.uk). @@ -915,8 +915,9 @@ #endif } +void _initialize_ser_dos (); void -_initialize_ser_dos (void) +_initialize_ser_dos () { serial_add_interface (&dos_ops); diff -Nru gdb-9.1/gdb/serial.c gdb-10.2/gdb/serial.c --- gdb-9.1/gdb/serial.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/serial.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Generic serial interface routines - Copyright (C) 1992-2020 Free Software Foundation, Inc. + Copyright (C) 1992-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -247,6 +247,7 @@ return NULL; } + scb->name = open_name != NULL ? xstrdup (open_name) : NULL; scb->next = scb_base; scb_base = scb; @@ -291,6 +292,7 @@ scb = new_serial (ops); + scb->name = NULL; scb->next = scb_base; scb_base = scb; @@ -330,6 +332,8 @@ if (really_close) scb->ops->close (scb); + xfree (scb->name); + /* For serial_is_open. */ scb->bufp = NULL; @@ -619,20 +623,6 @@ static struct cmd_list_element *serial_set_cmdlist; static struct cmd_list_element *serial_show_cmdlist; -static void -serial_set_cmd (const char *args, int from_tty) -{ - printf_unfiltered ("\"set serial\" must be followed " - "by the name of a command.\n"); - help_list (serial_set_cmdlist, "set serial ", all_commands, gdb_stdout); -} - -static void -serial_show_cmd (const char *args, int from_tty) -{ - cmd_show_list (serial_show_cmdlist, from_tty, ""); -} - /* Baud rate specified for talking to serial target systems. Default is left as -1, so targets can choose their own defaults. */ /* FIXME: This means that "show serial baud" and gr_files_info can @@ -672,8 +662,9 @@ serial_parity = GDBPARITY_NONE; } +void _initialize_serial (); void -_initialize_serial (void) +_initialize_serial () { #if 0 add_com ("connect", class_obscure, connect_command, _("\ @@ -681,17 +672,17 @@ Use <CR>~. or <CR>~^D to break out.")); #endif /* 0 */ - add_prefix_cmd ("serial", class_maintenance, serial_set_cmd, _("\ + add_basic_prefix_cmd ("serial", class_maintenance, _("\ Set default serial/parallel port configuration."), - &serial_set_cmdlist, "set serial ", - 0/*allow-unknown*/, - &setlist); + &serial_set_cmdlist, "set serial ", + 0/*allow-unknown*/, + &setlist); - add_prefix_cmd ("serial", class_maintenance, serial_show_cmd, _("\ + add_show_prefix_cmd ("serial", class_maintenance, _("\ Show default serial/parallel port configuration."), - &serial_show_cmdlist, "show serial ", - 0/*allow-unknown*/, - &showlist); + &serial_show_cmdlist, "show serial ", + 0/*allow-unknown*/, + &showlist); /* If target is open when baud changes, it doesn't take effect until the next open (I think, not sure). */ diff -Nru gdb-9.1/gdb/serial.h gdb-10.2/gdb/serial.h --- gdb-9.1/gdb/serial.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/serial.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Remote serial support interface definitions for GDB, the GNU Debugger. - Copyright (C) 1992-2020 Free Software Foundation, Inc. + Copyright (C) 1992-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -240,6 +240,7 @@ buffer. -ve for sticky errors. */ unsigned char *bufp; /* Current byte */ unsigned char buf[BUFSIZ]; /* Da buffer itself */ + char *name; /* The name of the device or host */ struct serial *next; /* Pointer to the next `struct serial *' */ int debug_p; /* Trace this serial devices operation. */ int async_state; /* Async internal state. */ diff -Nru gdb-9.1/gdb/ser-mingw.c gdb-10.2/gdb/ser-mingw.c --- gdb-9.1/gdb/ser-mingw.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/ser-mingw.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Serial interface for local (hardwired) serial ports on Windows systems - Copyright (C) 2006-2020 Free Software Foundation, Inc. + Copyright (C) 2006-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -1338,8 +1338,9 @@ net_windows_done_wait_handle }; +void _initialize_ser_windows (); void -_initialize_ser_windows (void) +_initialize_ser_windows () { WSADATA wsa_data; diff -Nru gdb-9.1/gdb/ser-pipe.c gdb-10.2/gdb/ser-pipe.c --- gdb-9.1/gdb/ser-pipe.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/ser-pipe.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Serial interface for a pipe to a separate program - Copyright (C) 1999-2020 Free Software Foundation, Inc. + Copyright (C) 1999-2021 Free Software Foundation, Inc. Contributed by Cygnus Solutions. @@ -228,8 +228,9 @@ ser_unix_write_prim }; +void _initialize_ser_pipe (); void -_initialize_ser_pipe (void) +_initialize_ser_pipe () { serial_add_interface (&pipe_ops); } diff -Nru gdb-9.1/gdb/ser-tcp.c gdb-10.2/gdb/ser-tcp.c --- gdb-9.1/gdb/ser-tcp.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/ser-tcp.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Serial interface for raw TCP connections on Un*x like systems. - Copyright (C) 1992-2020 Free Software Foundation, Inc. + Copyright (C) 1992-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -58,7 +58,7 @@ #endif #include <signal.h> -#include "gdb_select.h" +#include "gdbsupport/gdb_select.h" #include <algorithm> #ifndef HAVE_SOCKLEN_T @@ -424,20 +424,6 @@ return (serial_write (scb, "\377\363", 2)); } -/* Support for "set tcp" and "show tcp" commands. */ - -static void -set_tcp_cmd (const char *args, int from_tty) -{ - help_list (tcp_set_cmdlist, "set tcp ", all_commands, gdb_stdout); -} - -static void -show_tcp_cmd (const char *args, int from_tty) -{ - help_list (tcp_show_cmdlist, "show tcp ", all_commands, gdb_stdout); -} - #ifndef USE_WIN32API /* The TCP ops. */ @@ -469,8 +455,9 @@ #endif /* USE_WIN32API */ +void _initialize_ser_tcp (); void -_initialize_ser_tcp (void) +_initialize_ser_tcp () { #ifdef USE_WIN32API /* Do nothing; the TCP serial operations will be initialized in @@ -479,16 +466,16 @@ serial_add_interface (&tcp_ops); #endif /* USE_WIN32API */ - add_prefix_cmd ("tcp", class_maintenance, set_tcp_cmd, _("\ + add_basic_prefix_cmd ("tcp", class_maintenance, _("\ TCP protocol specific variables.\n\ Configure variables specific to remote TCP connections."), - &tcp_set_cmdlist, "set tcp ", - 0 /* allow-unknown */, &setlist); - add_prefix_cmd ("tcp", class_maintenance, show_tcp_cmd, _("\ + &tcp_set_cmdlist, "set tcp ", + 0 /* allow-unknown */, &setlist); + add_show_prefix_cmd ("tcp", class_maintenance, _("\ TCP protocol specific variables.\n\ Configure variables specific to remote TCP connections."), - &tcp_show_cmdlist, "show tcp ", - 0 /* allow-unknown */, &showlist); + &tcp_show_cmdlist, "show tcp ", + 0 /* allow-unknown */, &showlist); add_setshow_boolean_cmd ("auto-retry", class_obscure, &tcp_auto_retry, _("\ diff -Nru gdb-9.1/gdb/ser-tcp.h gdb-10.2/gdb/ser-tcp.h --- gdb-9.1/gdb/ser-tcp.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/ser-tcp.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Serial interface for raw TCP connections on Un*x like systems. - Copyright (C) 2006-2020 Free Software Foundation, Inc. + Copyright (C) 2006-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/ser-uds.c gdb-10.2/gdb/ser-uds.c --- gdb-9.1/gdb/ser-uds.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/ser-uds.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Serial interface for local domain connections on Un*x like systems. - Copyright (C) 1992-2020 Free Software Foundation, Inc. + Copyright (C) 1992-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -111,8 +111,9 @@ uds_write_prim }; +void _initialize_ser_socket (); void -_initialize_ser_socket (void) +_initialize_ser_socket () { serial_add_interface (&uds_ops); } diff -Nru gdb-9.1/gdb/ser-unix.c gdb-10.2/gdb/ser-unix.c --- gdb-9.1/gdb/ser-unix.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/ser-unix.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Serial interface for local (hardwired) serial ports on Un*x like systems - Copyright (C) 1992-2020 Free Software Foundation, Inc. + Copyright (C) 1992-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -28,7 +28,7 @@ #include <sys/socket.h> #include "gdbsupport/gdb_sys_time.h" -#include "gdb_select.h" +#include "gdbsupport/gdb_select.h" #include "gdbcmd.h" #include "gdbsupport/filestuff.h" #include <termios.h> @@ -498,8 +498,9 @@ ser_unix_write_prim }; +void _initialize_ser_hardwire (); void -_initialize_ser_hardwire (void) +_initialize_ser_hardwire () { serial_add_interface (&hardwire_ops); diff -Nru gdb-9.1/gdb/ser-unix.h gdb-10.2/gdb/ser-unix.h --- gdb-9.1/gdb/ser-unix.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/ser-unix.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Serial interface for UN*X file-descriptor based connection. - Copyright (C) 1999-2020 Free Software Foundation, Inc. + Copyright (C) 1999-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/sh-linux-tdep.c gdb-10.2/gdb/sh-linux-tdep.c --- gdb-9.1/gdb/sh-linux-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/sh-linux-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for GNU/Linux Super-H. - Copyright (C) 2005-2020 Free Software Foundation, Inc. + Copyright (C) 2005-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -208,8 +208,9 @@ tramp_frame_prepend_unwinder (gdbarch, &sh_linux_rt_sigreturn_tramp_frame); } +void _initialize_sh_linux_tdep (); void -_initialize_sh_linux_tdep (void) +_initialize_sh_linux_tdep () { gdbarch_register_osabi (bfd_arch_sh, 0, GDB_OSABI_LINUX, sh_linux_init_abi); } diff -Nru gdb-9.1/gdb/sh-nbsd-nat.c gdb-10.2/gdb/sh-nbsd-nat.c --- gdb-9.1/gdb/sh-nbsd-nat.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/sh-nbsd-nat.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Native-dependent code for NetBSD/sh. - Copyright (C) 2002-2020 Free Software Foundation, Inc. + Copyright (C) 2002-2021 Free Software Foundation, Inc. Contributed by Wasabi Systems, Inc. @@ -28,9 +28,10 @@ #include "sh-tdep.h" #include "inf-ptrace.h" +#include "nbsd-nat.h" #include "regcache.h" -struct sh_nbsd_nat_target final : public inf_ptrace_target +struct sh_nbsd_nat_target final : public nbsd_nat_target { void fetch_registers (struct regcache *, int) override; void store_registers (struct regcache *, int) override; @@ -52,13 +53,14 @@ sh_nbsd_nat_target::fetch_registers (struct regcache *regcache, int regno) { pid_t pid = regcache->ptid ().pid (); + int lwp = regcache->ptid ().lwp (); if (regno == -1 || GETREGS_SUPPLIES (regcache->arch (), regno)) { struct reg inferior_registers; if (ptrace (PT_GETREGS, pid, - (PTRACE_TYPE_ARG3) &inferior_registers, 0) == -1) + (PTRACE_TYPE_ARG3) &inferior_registers, lwp) == -1) perror_with_name (_("Couldn't get registers")); sh_corefile_supply_regset (&sh_corefile_gregset, regcache, regno, @@ -74,13 +76,14 @@ sh_nbsd_nat_target::store_registers (struct regcache *regcache, int regno) { pid_t pid = regcache->ptid ().pid (); + int lwp = regcache->ptid ().lwp (); if (regno == -1 || GETREGS_SUPPLIES (regcache->arch (), regno)) { struct reg inferior_registers; if (ptrace (PT_GETREGS, pid, - (PTRACE_TYPE_ARG3) &inferior_registers, 0) == -1) + (PTRACE_TYPE_ARG3) &inferior_registers, lwp) == -1) perror_with_name (_("Couldn't get registers")); sh_corefile_collect_regset (&sh_corefile_gregset, regcache, regno, @@ -88,7 +91,7 @@ SHNBSD_SIZEOF_GREGS); if (ptrace (PT_SETREGS, pid, - (PTRACE_TYPE_ARG3) &inferior_registers, 0) == -1) + (PTRACE_TYPE_ARG3) &inferior_registers, lwp) == -1) perror_with_name (_("Couldn't set registers")); if (regno != -1) @@ -96,8 +99,9 @@ } } +void _initialize_shnbsd_nat (); void -_initialize_shnbsd_nat (void) +_initialize_shnbsd_nat () { add_inf_child_target (&the_sh_nbsd_nat_target); } diff -Nru gdb-9.1/gdb/sh-nbsd-tdep.c gdb-10.2/gdb/sh-nbsd-tdep.c --- gdb-9.1/gdb/sh-nbsd-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/sh-nbsd-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for NetBSD/sh. - Copyright (C) 2002-2020 Free Software Foundation, Inc. + Copyright (C) 2002-2021 Free Software Foundation, Inc. Contributed by Wasabi Systems, Inc. @@ -26,6 +26,7 @@ #include "osabi.h" #include "sh-tdep.h" +#include "nbsd-tdep.h" #include "solib-svr4.h" #include "gdbarch.h" @@ -63,6 +64,7 @@ struct gdbarch *gdbarch) { struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); + nbsd_init_abi (info, gdbarch); tdep->core_gregmap = (struct sh_corefile_regmap *)regmap; tdep->sizeof_gregset = 84; @@ -71,8 +73,9 @@ (gdbarch, svr4_ilp32_fetch_link_map_offsets); } +void _initialize_shnbsd_tdep (); void -_initialize_shnbsd_tdep (void) +_initialize_shnbsd_tdep () { gdbarch_register_osabi (bfd_arch_sh, 0, GDB_OSABI_NETBSD, shnbsd_init_abi); diff -Nru gdb-9.1/gdb/sh-tdep.c gdb-10.2/gdb/sh-tdep.c --- gdb-9.1/gdb/sh-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/sh-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for Renesas Super-H, for GDB. - Copyright (C) 1993-2020 Free Software Foundation, Inc. + Copyright (C) 1993-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -24,7 +24,7 @@ #include "frame.h" #include "frame-base.h" #include "frame-unwind.h" -#include "dwarf2-frame.h" +#include "dwarf2/frame.h" #include "symtab.h" #include "gdbtypes.h" #include "gdbcmd.h" @@ -92,10 +92,10 @@ { func_type = check_typedef (func_type); - if (TYPE_CODE (func_type) == TYPE_CODE_PTR) + if (func_type->code () == TYPE_CODE_PTR) func_type = check_typedef (TYPE_TARGET_TYPE (func_type)); - if (TYPE_CODE (func_type) == TYPE_CODE_FUNC + if (func_type->code () == TYPE_CODE_FUNC && TYPE_CALLING_CONVENTION (func_type) == DW_CC_GNU_renesas_sh) val = 1; } @@ -813,11 +813,11 @@ sh_use_struct_convention (int renesas_abi, struct type *type) { int len = TYPE_LENGTH (type); - int nelem = TYPE_NFIELDS (type); + int nelem = type->num_fields (); /* The Renesas ABI returns aggregate types always on stack. */ - if (renesas_abi && (TYPE_CODE (type) == TYPE_CODE_STRUCT - || TYPE_CODE (type) == TYPE_CODE_UNION)) + if (renesas_abi && (type->code () == TYPE_CODE_STRUCT + || type->code () == TYPE_CODE_UNION)) return 1; /* Non-power of 2 length types and types bigger than 8 bytes (which don't @@ -832,13 +832,13 @@ /* If the first field in the aggregate has the same length as the entire aggregate type, the type is returned in registers. */ - if (TYPE_LENGTH (TYPE_FIELD_TYPE (type, 0)) == len) + if (TYPE_LENGTH (type->field (0).type ()) == len) return 0; /* If the size of the aggregate is 8 bytes and the first field is of size 4 bytes its alignment is equal to long long's alignment, so it's returned in registers. */ - if (len == 8 && TYPE_LENGTH (TYPE_FIELD_TYPE (type, 0)) == 4) + if (len == 8 && TYPE_LENGTH (type->field (0).type ()) == 4) return 0; /* Otherwise use struct convention. */ @@ -849,7 +849,7 @@ sh_use_struct_convention_nofpu (int renesas_abi, struct type *type) { /* The Renesas ABI returns long longs/doubles etc. always on stack. */ - if (renesas_abi && TYPE_NFIELDS (type) == 0 && TYPE_LENGTH (type) >= 8) + if (renesas_abi && type->num_fields () == 0 && TYPE_LENGTH (type) >= 8) return 1; return sh_use_struct_convention (renesas_abi, type); } @@ -1040,17 +1040,17 @@ sh_treat_as_flt_p (struct type *type) { /* Ordinary float types are obviously treated as float. */ - if (TYPE_CODE (type) == TYPE_CODE_FLT) + if (type->code () == TYPE_CODE_FLT) return 1; /* Otherwise non-struct types are not treated as float. */ - if (TYPE_CODE (type) != TYPE_CODE_STRUCT) + if (type->code () != TYPE_CODE_STRUCT) return 0; /* Otherwise structs with more than one member are not treated as float. */ - if (TYPE_NFIELDS (type) != 1) + if (type->num_fields () != 1) return 0; /* Otherwise if the type of that member is float, the whole type is treated as float. */ - if (TYPE_CODE (TYPE_FIELD_TYPE (type, 0)) == TYPE_CODE_FLT) + if (type->field (0).type ()->code () == TYPE_CODE_FLT) return 1; /* Otherwise it's not treated as float. */ return 0; @@ -1084,7 +1084,7 @@ registers have been used so far. */ if (sh_is_renesas_calling_convention (func_type) && TYPE_VARARGS (func_type)) - last_reg_arg = TYPE_NFIELDS (func_type) - 2; + last_reg_arg = func_type->num_fields () - 2; /* First force sp to a 4-byte alignment. */ sp = sh_frame_align (gdbarch, sp); @@ -1115,9 +1115,9 @@ /* In Renesas ABI, long longs and aggregate types are always passed on stack. */ else if (sh_is_renesas_calling_convention (func_type) - && ((TYPE_CODE (type) == TYPE_CODE_INT && len == 8) - || TYPE_CODE (type) == TYPE_CODE_STRUCT - || TYPE_CODE (type) == TYPE_CODE_UNION)) + && ((type->code () == TYPE_CODE_INT && len == 8) + || type->code () == TYPE_CODE_STRUCT + || type->code () == TYPE_CODE_UNION)) pass_on_stack = 1; /* In contrast to non-FPU CPUs, arguments are never split between registers and stack. If an argument doesn't fit in the remaining @@ -1225,7 +1225,7 @@ registers have been used so far. */ if (sh_is_renesas_calling_convention (func_type) && TYPE_VARARGS (func_type)) - last_reg_arg = TYPE_NFIELDS (func_type) - 2; + last_reg_arg = func_type->num_fields () - 2; /* First force sp to a 4-byte alignment. */ sp = sh_frame_align (gdbarch, sp); @@ -1248,10 +1248,10 @@ /* Renesas ABI pushes doubles and long longs entirely on stack. Same goes for aggregate types. */ if (sh_is_renesas_calling_convention (func_type) - && ((TYPE_CODE (type) == TYPE_CODE_INT && len >= 8) - || (TYPE_CODE (type) == TYPE_CODE_FLT && len >= 8) - || TYPE_CODE (type) == TYPE_CODE_STRUCT - || TYPE_CODE (type) == TYPE_CODE_UNION)) + && ((type->code () == TYPE_CODE_INT && len >= 8) + || (type->code () == TYPE_CODE_FLT && len >= 8) + || type->code () == TYPE_CODE_STRUCT + || type->code () == TYPE_CODE_UNION)) pass_on_stack = 1; while (len > 0) { @@ -2408,29 +2408,16 @@ return gdbarch; } -static void -show_sh_command (const char *args, int from_tty) -{ - help_list (showshcmdlist, "show sh ", all_commands, gdb_stdout); -} - -static void -set_sh_command (const char *args, int from_tty) -{ - printf_unfiltered - ("\"set sh\" must be followed by an appropriate subcommand.\n"); - help_list (setshcmdlist, "set sh ", all_commands, gdb_stdout); -} - +void _initialize_sh_tdep (); void -_initialize_sh_tdep (void) +_initialize_sh_tdep () { gdbarch_register (bfd_arch_sh, sh_gdbarch_init, NULL); - add_prefix_cmd ("sh", no_class, set_sh_command, "SH specific commands.", - &setshcmdlist, "set sh ", 0, &setlist); - add_prefix_cmd ("sh", no_class, show_sh_command, "SH specific commands.", - &showshcmdlist, "show sh ", 0, &showlist); + add_basic_prefix_cmd ("sh", no_class, "SH specific commands.", + &setshcmdlist, "set sh ", 0, &setlist); + add_show_prefix_cmd ("sh", no_class, "SH specific commands.", + &showshcmdlist, "show sh ", 0, &showlist); add_setshow_enum_cmd ("calling-convention", class_vars, sh_cc_enum, &sh_active_calling_convention, diff -Nru gdb-9.1/gdb/sh-tdep.h gdb-10.2/gdb/sh-tdep.h --- gdb-9.1/gdb/sh-tdep.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/sh-tdep.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Target-specific definition for a Renesas Super-H. - Copyright (C) 1993-2020 Free Software Foundation, Inc. + Copyright (C) 1993-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/sim-regno.h gdb-10.2/gdb/sim-regno.h --- gdb-9.1/gdb/sim-regno.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/sim-regno.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Generic remote debugging interface for simulators. - Copyright (C) 2002-2020 Free Software Foundation, Inc. + Copyright (C) 2002-2021 Free Software Foundation, Inc. Contributed by Red Hat, Inc. diff -Nru gdb-9.1/gdb/skip.c gdb-10.2/gdb/skip.c --- gdb-9.1/gdb/skip.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/skip.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Skipping uninteresting files and functions while stepping. - Copyright (C) 2011-2020 Free Software Foundation, Inc. + Copyright (C) 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -209,18 +209,15 @@ /* Default to the current function if no argument is given. */ if (arg == NULL) { + frame_info *fi = get_selected_frame (_("No default function now.")); + struct symbol *sym = get_frame_function (fi); const char *name = NULL; - CORE_ADDR pc; - if (!last_displayed_sal_is_valid ()) - error (_("No default function now.")); - - pc = get_last_displayed_addr (); - if (!find_pc_partial_function (pc, &name, NULL, NULL)) - { - error (_("No function found containing current program point %s."), - paddress (get_current_arch (), pc)); - } + if (sym != NULL) + name = sym->print_name (); + else + error (_("No function found containing current program point %s."), + paddress (get_current_arch (), get_frame_pc (fi))); skip_function (name); return; } @@ -665,8 +662,9 @@ } } +void _initialize_step_skip (); void -_initialize_step_skip (void) +_initialize_step_skip () { static struct cmd_list_element *skiplist = NULL; struct cmd_list_element *c; diff -Nru gdb-9.1/gdb/skip.h gdb-10.2/gdb/skip.h --- gdb-9.1/gdb/skip.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/skip.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Header for skipping over uninteresting files and functions when debugging. - Copyright (C) 2011-2020 Free Software Foundation, Inc. + Copyright (C) 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/sol2-tdep.c gdb-10.2/gdb/sol2-tdep.c --- gdb-9.1/gdb/sol2-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/sol2-tdep.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for Solaris. - Copyright (C) 2006-2020 Free Software Foundation, Inc. + Copyright (C) 2006-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -25,7 +25,43 @@ #include "sol2-tdep.h" -CORE_ADDR +/* The Solaris signal trampolines reside in libc. For normal signals, + the function `sigacthandler' is used. This signal trampoline will + call the signal handler using the System V calling convention, + where the third argument is a pointer to an instance of + `ucontext_t', which has a member `uc_mcontext' that contains the + saved registers. Incidentally, the kernel passes the `ucontext_t' + pointer as the third argument of the signal trampoline too, and + `sigacthandler' simply passes it on. However, if you link your + program with "-L/usr/ucblib -R/usr/ucblib -lucb", the function + `ucbsigvechandler' will be used, which invokes the using the BSD + convention, where the third argument is a pointer to an instance of + `struct sigcontext'. It is the `ucbsigvechandler' function that + converts the `ucontext_t' to a `sigcontext', and back. Unless the + signal handler modifies the `struct sigcontext' we can safely + ignore this. */ + +static int +sol2_pc_in_sigtramp (CORE_ADDR pc, const char *name) +{ + return (name && (strcmp (name, "sigacthandler") == 0 + || strcmp (name, "ucbsigvechandler") == 0 + || strcmp (name, "__sighndlr") == 0)); +} + +/* Return whether THIS_FRAME corresponds to a Solaris sigtramp routine. */ + +int +sol2_sigtramp_p (struct frame_info *this_frame) +{ + CORE_ADDR pc = get_frame_pc (this_frame); + const char *name; + + find_pc_partial_function (pc, &name, NULL, NULL); + return sol2_pc_in_sigtramp (pc, name); +} + +static CORE_ADDR sol2_skip_solib_resolver (struct gdbarch *gdbarch, CORE_ADDR pc) { struct bound_minimal_symbol msym; @@ -37,17 +73,15 @@ return 0; } -/* This is how we want PTIDs from Solaris core files to be - printed. */ +/* This is how we want PTIDs from Solaris core files to be printed. */ -std::string +static std::string sol2_core_pid_to_str (struct gdbarch *gdbarch, ptid_t ptid) { struct inferior *inf; int pid; - /* Check whether we're printing an LWP (gdb thread) or a - process. */ + /* Check whether we're printing an LWP (gdb thread) or a process. */ pid = ptid.lwp (); if (pid != 0) { @@ -56,12 +90,28 @@ } /* GDB didn't use to put a NT_PSTATUS note in Solaris cores. If - that's missing, then we're dealing with a fake PID corelow.c made - up. */ - inf = find_inferior_ptid (ptid); + that's missing, then we're dealing with a fake PID corelow.c made up. */ + inf = find_inferior_ptid (current_inferior ()->process_target (), ptid); if (inf == NULL || inf->fake_pid_p) return "<core>"; /* Not fake; print as usual. */ return normal_pid_to_str (ptid); } + +/* To be called from GDB_OSABI_SOLARIS handlers. */ + +void +sol2_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) +{ + /* The Sun compilers (Sun ONE Studio, Forte Developer, Sun WorkShop, SunPRO) + compiler puts out 0 instead of the address in N_SO stabs. Starting with + SunPRO 3.0, the compiler does this for N_FUN stabs too. */ + set_gdbarch_sofun_address_maybe_missing (gdbarch, 1); + + /* Solaris uses SVR4-style shared libraries. */ + set_gdbarch_skip_solib_resolver (gdbarch, sol2_skip_solib_resolver); + + /* How to print LWP PTIDs from core files. */ + set_gdbarch_core_pid_to_str (gdbarch, sol2_core_pid_to_str); +} diff -Nru gdb-9.1/gdb/sol2-tdep.h gdb-10.2/gdb/sol2-tdep.h --- gdb-9.1/gdb/sol2-tdep.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/sol2-tdep.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for Solaris. - Copyright (C) 2006-2020 Free Software Foundation, Inc. + Copyright (C) 2006-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -22,8 +22,8 @@ struct gdbarch; -CORE_ADDR sol2_skip_solib_resolver (struct gdbarch *, CORE_ADDR); +int sol2_sigtramp_p (struct frame_info *this_frame); -std::string sol2_core_pid_to_str (struct gdbarch *gdbarch, ptid_t ptid); +void sol2_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch); #endif /* sol2-tdep.h */ diff -Nru gdb-9.1/gdb/solib-aix.c gdb-10.2/gdb/solib-aix.c --- gdb-9.1/gdb/solib-aix.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/solib-aix.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2013-2020 Free Software Foundation, Inc. +/* Copyright (C) 2013-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -390,19 +390,15 @@ } /* Compute and return the OBJFILE's section_offset array, using - the associated loader info (INFO). + the associated loader info (INFO). */ - The resulting array is computed on the heap and must be - deallocated after use. */ - -static gdb::unique_xmalloc_ptr<struct section_offsets> +static section_offsets solib_aix_get_section_offsets (struct objfile *objfile, lm_info_aix *info) { bfd *abfd = objfile->obfd; - gdb::unique_xmalloc_ptr<struct section_offsets> offsets - (XCNEWVEC (struct section_offsets, objfile->num_sections)); + section_offsets offsets (objfile->section_offsets.size ()); /* .text */ @@ -411,7 +407,7 @@ struct bfd_section *sect = objfile->sections[objfile->sect_index_text].the_bfd_section; - offsets->offsets[objfile->sect_index_text] + offsets[objfile->sect_index_text] = info->text_addr + sect->filepos - bfd_section_vma (sect); } @@ -422,7 +418,7 @@ struct bfd_section *sect = objfile->sections[objfile->sect_index_data].the_bfd_section; - offsets->offsets[objfile->sect_index_data] + offsets[objfile->sect_index_data] = info->data_addr - bfd_section_vma (sect); } @@ -435,8 +431,8 @@ if (objfile->sect_index_bss != -1 && objfile->sect_index_data != -1) { - offsets->offsets[objfile->sect_index_bss] - = (offsets->offsets[objfile->sect_index_data] + offsets[objfile->sect_index_bss] + = (offsets[objfile->sect_index_data] + solib_aix_bss_data_overlap (abfd)); } @@ -468,10 +464,10 @@ lm_info_aix &exec_info = (*library_list)[0]; if (symfile_objfile != NULL) { - gdb::unique_xmalloc_ptr<struct section_offsets> offsets + section_offsets offsets = solib_aix_get_section_offsets (symfile_objfile, &exec_info); - objfile_relocate (symfile_objfile, offsets.get ()); + objfile_relocate (symfile_objfile, offsets); } } @@ -615,7 +611,7 @@ (gdb_bfd_openr_next_archived_file (archive_bfd.get (), NULL)); while (object_bfd != NULL) { - if (member_name == object_bfd->filename) + if (member_name == bfd_get_filename (object_bfd.get ())) break; object_bfd = gdb_bfd_openr_next_archived_file (archive_bfd.get (), @@ -641,10 +637,10 @@ along with appended parenthesized member name in order to allow commands listing all shared libraries to display. Otherwise, we would only be displaying the name of the archive member object. */ - bfd_set_filename (object_bfd.get (), - xstrprintf ("%s%s", - bfd_get_filename (archive_bfd.get ()), - sep)); + std::string fname = string_printf ("%s%s", + bfd_get_filename (archive_bfd.get ()), + sep); + bfd_set_filename (object_bfd.get (), fname.c_str ()); return object_bfd; } @@ -723,8 +719,9 @@ /* The target_so_ops for AIX targets. */ struct target_so_ops solib_aix_so_ops; +void _initialize_solib_aix (); void -_initialize_solib_aix (void) +_initialize_solib_aix () { solib_aix_so_ops.relocate_section_addresses = solib_aix_relocate_section_addresses; diff -Nru gdb-9.1/gdb/solib-aix.h gdb-10.2/gdb/solib-aix.h --- gdb-9.1/gdb/solib-aix.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/solib-aix.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2013-2020 Free Software Foundation, Inc. +/* Copyright (C) 2013-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/solib.c gdb-10.2/gdb/solib.c --- gdb-9.1/gdb/solib.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/solib.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Handle shared libraries for GDB, the GNU Debugger. - Copyright (C) 1990-2020 Free Software Foundation, Inc. + Copyright (C) 1990-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -647,13 +647,6 @@ } -/* Return address of first so_list entry in master shared object list. */ -struct so_list * -master_so_list (void) -{ - return so_list_head; -} - /* Read in symbols for shared object SO. If SYMFILE_VERBOSE is set in FLAGS, be chatty about it. Return true if any symbols were actually loaded. */ @@ -713,15 +706,13 @@ return false; } -/* Return true if KNOWN->objfile is used by any other so_list object in the - SO_LIST_HEAD list. Return false otherwise. */ +/* Return true if KNOWN->objfile is used by any other so_list object + in the list of shared libraries. Return false otherwise. */ static bool solib_used (const struct so_list *const known) { - const struct so_list *pivot; - - for (pivot = so_list_head; pivot != NULL; pivot = pivot->next) + for (const struct so_list *pivot : current_program_space->solibs ()) if (pivot != known && pivot->objfile == known->objfile) return true; return false; @@ -784,8 +775,8 @@ the time we're done walking GDB's list, the inferior's list contains only the new shared objects, which we then add. */ - gdb = so_list_head; - gdb_link = &so_list_head; + gdb = current_program_space->so_list; + gdb_link = ¤t_program_space->so_list; while (gdb) { struct so_list *i = inferior; @@ -835,7 +826,7 @@ /* Unless the user loaded it explicitly, free SO's objfile. */ if (gdb->objfile && ! (gdb->objfile->flags & OBJF_USERLOADED) && !solib_used (gdb)) - delete gdb->objfile; + gdb->objfile->unlink (); /* Some targets' section tables might be referring to sections from so->abfd; remove them. */ @@ -943,8 +934,6 @@ void solib_add (const char *pattern, int from_tty, int readsyms) { - struct so_list *gdb; - if (print_symbol_loading_p (from_tty, 0, 0)) { if (pattern != NULL) @@ -979,7 +968,7 @@ if (from_tty) add_flags |= SYMFILE_VERBOSE; - for (gdb = so_list_head; gdb; gdb = gdb->next) + for (struct so_list *gdb : current_program_space->solibs ()) if (! pattern || re_exec (gdb->so_name)) { /* Normally, we would read the symbols from that library @@ -1030,7 +1019,6 @@ static void info_sharedlibrary_command (const char *pattern, int from_tty) { - struct so_list *so = NULL; /* link map state variable */ bool so_missing_debug_info = false; int addr_width; int nr_libs; @@ -1053,7 +1041,8 @@ /* ui_out_emit_table table_emitter needs to know the number of rows, so we need to make two passes over the libs. */ - for (nr_libs = 0, so = so_list_head; so; so = so->next) + nr_libs = 0; + for (struct so_list *so : current_program_space->solibs ()) { if (so->so_name[0]) { @@ -1074,7 +1063,7 @@ uiout->table_body (); - ALL_SO_LIBS (so) + for (struct so_list *so : current_program_space->solibs ()) { if (! so->so_name[0]) continue; @@ -1185,11 +1174,11 @@ disable_breakpoints_in_shlibs (); - while (so_list_head) + while (current_program_space->so_list) { - struct so_list *so = so_list_head; + struct so_list *so = current_program_space->so_list; - so_list_head = so->next; + current_program_space->so_list = so->next; gdb::observers::solib_unloaded.notify (so); remove_target_sections (so); free_so (so); @@ -1284,12 +1273,10 @@ static void reload_shared_libraries_1 (int from_tty) { - struct so_list *so; - if (print_symbol_loading_p (from_tty, 0, 0)) printf_unfiltered (_("Loading symbols for shared libraries.\n")); - for (so = so_list_head; so != NULL; so = so->next) + for (struct so_list *so : current_program_space->solibs ()) { const char *found_pathname = NULL; bool was_loaded = so->symbols_loaded != 0; @@ -1312,7 +1299,7 @@ { if (so->objfile && ! (so->objfile->flags & OBJF_USERLOADED) && !solib_used (so)) - delete so->objfile; + so->objfile->unlink (); remove_target_sections (so); clear_so (so); } @@ -1552,25 +1539,25 @@ return symaddr; } -/* SO_LIST_HEAD may contain user-loaded object files that can be removed - out-of-band by the user. So upon notification of free_objfile remove - all references to any user-loaded file that is about to be freed. */ +/* The shared library list may contain user-loaded object files that + can be removed out-of-band by the user. So upon notification of + free_objfile remove all references to any user-loaded file that is + about to be freed. */ static void remove_user_added_objfile (struct objfile *objfile) { - struct so_list *so; - if (objfile != 0 && objfile->flags & OBJF_USERLOADED) { - for (so = so_list_head; so != NULL; so = so->next) + for (struct so_list *so : current_program_space->solibs ()) if (so->objfile == objfile) so->objfile = NULL; } } +void _initialize_solib (); void -_initialize_solib (void) +_initialize_solib () { solib_data = gdbarch_data_register_pre_init (solib_init); diff -Nru gdb-9.1/gdb/solib-darwin.c gdb-10.2/gdb/solib-darwin.c --- gdb-9.1/gdb/solib-darwin.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/solib-darwin.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Handle Darwin shared libraries for GDB, the GNU Debugger. - Copyright (C) 2009-2020 Free Software Foundation, Inc. + Copyright (C) 2009-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -251,8 +251,6 @@ CORE_ADDR path_addr; struct mach_o_header_external hdr; unsigned long hdr_val; - gdb::unique_xmalloc_ptr<char> file_path; - int errcode; /* Read image info from inferior. */ if (target_read_memory (iinfo, buf, image_info_size)) @@ -275,9 +273,9 @@ if (hdr_val == BFD_MACH_O_MH_EXECUTE) continue; - target_read_string (path_addr, &file_path, - SO_NAME_MAX_PATH_SIZE - 1, &errcode); - if (errcode) + gdb::unique_xmalloc_ptr<char> file_path + = target_read_string (path_addr, SO_NAME_MAX_PATH_SIZE - 1); + if (file_path == nullptr) break; /* Create and fill the new so_list element. */ @@ -436,7 +434,7 @@ return NULL; /* Create a bfd for the interpreter. */ - gdb_bfd_ref_ptr dyld_bfd (gdb_bfd_open (interp_name, gnutarget, -1)); + gdb_bfd_ref_ptr dyld_bfd (gdb_bfd_open (interp_name, gnutarget)); if (dyld_bfd != NULL) { gdb_bfd_ref_ptr sub @@ -662,15 +660,16 @@ /* The current filename for fat-binary BFDs is a name generated by BFD, usually a string containing the name of the architecture. Reset its value to the actual filename. */ - bfd_set_filename (res.get (), xstrdup (pathname)); + bfd_set_filename (res.get (), pathname); return res; } struct target_so_ops darwin_so_ops; +void _initialize_darwin_solib (); void -_initialize_darwin_solib (void) +_initialize_darwin_solib () { darwin_so_ops.relocate_section_addresses = darwin_relocate_section_addresses; darwin_so_ops.free_so = darwin_free_so; diff -Nru gdb-9.1/gdb/solib-darwin.h gdb-10.2/gdb/solib-darwin.h --- gdb-9.1/gdb/solib-darwin.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/solib-darwin.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Handle shared libraries for GDB, the GNU Debugger. - Copyright (C) 2009-2020 Free Software Foundation, Inc. + Copyright (C) 2009-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/solib-dsbt.c gdb-10.2/gdb/solib-dsbt.c --- gdb-9.1/gdb/solib-dsbt.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/solib-dsbt.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Handle TIC6X (DSBT) shared libraries for GDB, the GNU Debugger. - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -681,8 +681,6 @@ this in the list of shared objects. */ if (dsbt_index != 0) { - int errcode; - gdb::unique_xmalloc_ptr<char> name_buf; struct int_elf32_dsbt_loadmap *loadmap; struct so_list *sop; CORE_ADDR addr; @@ -703,12 +701,11 @@ addr = extract_unsigned_integer (lm_buf.l_name, sizeof (lm_buf.l_name), byte_order); - target_read_string (addr, &name_buf, SO_NAME_MAX_PATH_SIZE - 1, - &errcode); + gdb::unique_xmalloc_ptr<char> name_buf + = target_read_string (addr, SO_NAME_MAX_PATH_SIZE - 1); - if (errcode != 0) - warning (_("Can't read pathname for link map entry: %s."), - safe_strerror (errcode)); + if (name_buf == nullptr) + warning (_("Can't read pathname for link map entry.")); else { if (solib_dsbt_debug) @@ -911,8 +908,7 @@ info->main_executable_lm_info = new lm_info_dsbt; info->main_executable_lm_info->map = ldm; - gdb::unique_xmalloc_ptr<struct section_offsets> new_offsets - (XCNEWVEC (struct section_offsets, symfile_objfile->num_sections)); + section_offsets new_offsets (symfile_objfile->section_offsets.size ()); changed = 0; ALL_OBJFILE_OSECTIONS (symfile_objfile, osect) @@ -926,7 +922,7 @@ /* Current address of section. */ addr = obj_section_addr (osect); /* Offset from where this section started. */ - offset = ANOFFSET (symfile_objfile->section_offsets, osect_idx); + offset = symfile_objfile->section_offsets[osect_idx]; /* Original address prior to any past relocations. */ orig_addr = addr - offset; @@ -935,10 +931,10 @@ if (ldm->segs[seg].p_vaddr <= orig_addr && orig_addr < ldm->segs[seg].p_vaddr + ldm->segs[seg].p_memsz) { - new_offsets->offsets[osect_idx] + new_offsets[osect_idx] = ldm->segs[seg].addr - ldm->segs[seg].p_vaddr; - if (new_offsets->offsets[osect_idx] != offset) + if (new_offsets[osect_idx] != offset) changed = 1; break; } @@ -946,7 +942,7 @@ } if (changed) - objfile_relocate (symfile_objfile, new_offsets.get ()); + objfile_relocate (symfile_objfile, new_offsets); /* Now that symfile_objfile has been relocated, we can compute the GOT value and stash it away. */ @@ -1023,8 +1019,9 @@ struct target_so_ops dsbt_so_ops; +void _initialize_dsbt_solib (); void -_initialize_dsbt_solib (void) +_initialize_dsbt_solib () { dsbt_so_ops.relocate_section_addresses = dsbt_relocate_section_addresses; dsbt_so_ops.free_so = dsbt_free_so; diff -Nru gdb-9.1/gdb/solib-frv.c gdb-10.2/gdb/solib-frv.c --- gdb-9.1/gdb/solib-frv.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/solib-frv.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Handle FR-V (FDPIC) shared libraries for GDB, the GNU Debugger. - Copyright (C) 2004-2020 Free Software Foundation, Inc. + Copyright (C) 2004-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -376,8 +376,6 @@ this in the list of shared objects. */ if (got_addr != mgot) { - int errcode; - gdb::unique_xmalloc_ptr<char> name_buf; struct int_elf32_fdpic_loadmap *loadmap; struct so_list *sop; CORE_ADDR addr; @@ -404,16 +402,15 @@ addr = extract_unsigned_integer (lm_buf.l_name, sizeof (lm_buf.l_name), byte_order); - target_read_string (addr, &name_buf, SO_NAME_MAX_PATH_SIZE - 1, - &errcode); + gdb::unique_xmalloc_ptr<char> name_buf + = target_read_string (addr, SO_NAME_MAX_PATH_SIZE - 1); if (solib_frv_debug) fprintf_unfiltered (gdb_stdlog, "current_sos: name = %s\n", name_buf.get ()); - if (errcode != 0) - warning (_("Can't read pathname for link map entry: %s."), - safe_strerror (errcode)); + if (name_buf == nullptr) + warning (_("Can't read pathname for link map entry.")); else { strncpy (sop->so_name, name_buf.get (), @@ -785,8 +782,7 @@ main_executable_lm_info = new lm_info_frv; main_executable_lm_info->map = ldm; - gdb::unique_xmalloc_ptr<struct section_offsets> new_offsets - (XCNEWVEC (struct section_offsets, symfile_objfile->num_sections)); + section_offsets new_offsets (symfile_objfile->section_offsets.size ()); changed = 0; ALL_OBJFILE_OSECTIONS (symfile_objfile, osect) @@ -800,7 +796,7 @@ /* Current address of section. */ addr = obj_section_addr (osect); /* Offset from where this section started. */ - offset = ANOFFSET (symfile_objfile->section_offsets, osect_idx); + offset = symfile_objfile->section_offsets[osect_idx]; /* Original address prior to any past relocations. */ orig_addr = addr - offset; @@ -809,10 +805,10 @@ if (ldm->segs[seg].p_vaddr <= orig_addr && orig_addr < ldm->segs[seg].p_vaddr + ldm->segs[seg].p_memsz) { - new_offsets->offsets[osect_idx] + new_offsets[osect_idx] = ldm->segs[seg].addr - ldm->segs[seg].p_vaddr; - if (new_offsets->offsets[osect_idx] != offset) + if (new_offsets[osect_idx] != offset) changed = 1; break; } @@ -820,7 +816,7 @@ } if (changed) - objfile_relocate (symfile_objfile, new_offsets.get ()); + objfile_relocate (symfile_objfile, new_offsets); /* Now that symfile_objfile has been relocated, we can compute the GOT value and stash it away. */ @@ -909,10 +905,7 @@ CORE_ADDR frv_fdpic_find_global_pointer (CORE_ADDR addr) { - struct so_list *so; - - so = master_so_list (); - while (so) + for (struct so_list *so : current_program_space->solibs ()) { int seg; lm_info_frv *li = (lm_info_frv *) so->lm_info; @@ -924,8 +917,6 @@ && addr < map->segs[seg].addr + map->segs[seg].p_memsz) return li->got_value; } - - so = so->next; } /* Didn't find it in any of the shared objects. So assume it's in the @@ -970,10 +961,7 @@ in list of shared objects. */ if (addr == 0) { - struct so_list *so; - - so = master_so_list (); - while (so) + for (struct so_list *so : current_program_space->solibs ()) { lm_info_frv *li = (lm_info_frv *) so->lm_info; @@ -982,8 +970,6 @@ if (addr != 0) break; - - so = so->next; } } @@ -1117,8 +1103,6 @@ CORE_ADDR frv_fetch_objfile_link_map (struct objfile *objfile) { - struct so_list *so; - /* Cause frv_current_sos() to be run if it hasn't been already. */ if (main_lm_addr == 0) solib_add (0, 0, 1); @@ -1129,7 +1113,7 @@ /* The other link map addresses may be found by examining the list of shared libraries. */ - for (so = master_so_list (); so; so = so->next) + for (struct so_list *so : current_program_space->solibs ()) { lm_info_frv *li = (lm_info_frv *) so->lm_info; @@ -1143,8 +1127,9 @@ struct target_so_ops frv_so_ops; +void _initialize_frv_solib (); void -_initialize_frv_solib (void) +_initialize_frv_solib () { frv_so_ops.relocate_section_addresses = frv_relocate_section_addresses; frv_so_ops.free_so = frv_free_so; diff -Nru gdb-9.1/gdb/solib.h gdb-10.2/gdb/solib.h --- gdb-9.1/gdb/solib.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/solib.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Shared library declarations for GDB, the GNU Debugger. - Copyright (C) 1992-2020 Free Software Foundation, Inc. + Copyright (C) 1992-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -28,9 +28,6 @@ #include "symfile-add-flags.h" -/* List of known shared objects */ -#define so_list_head current_program_space->so_list - /* Called when we free all symtabs, to free the shared library information as well. */ @@ -81,9 +78,9 @@ /* Synchronize GDB's shared object list with inferior's. Extract the list of currently loaded shared objects from the - inferior, and compare it with the list of shared objects currently - in GDB's so_list_head list. Edit so_list_head to bring it in sync - with the inferior's new list. + inferior, and compare it with the list of shared objects in the + current program space's list of shared libraries. Edit + so_list_head to bring it in sync with the inferior's new list. If we notice that the inferior has unloaded some shared objects, free any symbolic info GDB had read about those shared objects. diff -Nru gdb-9.1/gdb/solib-svr4.c gdb-10.2/gdb/solib-svr4.c --- gdb-9.1/gdb/solib-svr4.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/solib-svr4.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Handle SVR4 shared libraries for GDB, the GNU Debugger. - Copyright (C) 1990-2020 Free Software Foundation, Inc. + Copyright (C) 1990-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -957,8 +957,6 @@ open_symbol_file_object (int from_tty) { CORE_ADDR lm, l_name; - gdb::unique_xmalloc_ptr<char> filename; - int errcode; struct link_map_offsets *lmo = svr4_fetch_link_map_offsets (); struct type *ptr_type = builtin_type (target_gdbarch ())->builtin_data_ptr; int l_name_size = TYPE_LENGTH (ptr_type); @@ -993,12 +991,12 @@ return 0; /* No filename. */ /* Now fetch the filename from target memory. */ - target_read_string (l_name, &filename, SO_NAME_MAX_PATH_SIZE - 1, &errcode); + gdb::unique_xmalloc_ptr<char> filename + = target_read_string (l_name, SO_NAME_MAX_PATH_SIZE - 1); - if (errcode) + if (filename == nullptr) { - warning (_("failed to read exec filename from attached file: %s"), - safe_strerror (errcode)); + warning (_("failed to read exec filename from attached file")); return 0; } @@ -1297,9 +1295,6 @@ for (; lm != 0; prev_lm = lm, lm = next_lm) { - int errcode; - gdb::unique_xmalloc_ptr<char> buffer; - so_list_up newobj (XCNEW (struct so_list)); lm_info_svr4 *li = lm_info_read (lm).release (); @@ -1330,17 +1325,16 @@ } /* Extract this shared object's name. */ - target_read_string (li->l_name, &buffer, SO_NAME_MAX_PATH_SIZE - 1, - &errcode); - if (errcode != 0) + gdb::unique_xmalloc_ptr<char> buffer + = target_read_string (li->l_name, SO_NAME_MAX_PATH_SIZE - 1); + if (buffer == nullptr) { /* If this entry's l_name address matches that of the inferior executable, then this is not a normal shared object, but (most likely) a vDSO. In this case, silently skip it; otherwise emit a warning. */ if (first_l_name == 0 || li->l_name != first_l_name) - warning (_("Can't read pathname for load map: %s."), - safe_strerror (errcode)); + warning (_("Can't read pathname for load map.")); continue; } @@ -1537,7 +1531,6 @@ CORE_ADDR svr4_fetch_objfile_link_map (struct objfile *objfile) { - struct so_list *so; struct svr4_info *info = get_svr4_info (objfile->pspace); /* Cause svr4_current_sos() to be run if it hasn't been already. */ @@ -1555,7 +1548,7 @@ /* The other link map addresses may be found by examining the list of shared libraries. */ - for (so = master_so_list (); so; so = so->next) + for (struct so_list *so : current_program_space->solibs ()) if (so->objfile == objfile) { lm_info_svr4 *li = (lm_info_svr4 *) so->lm_info; @@ -1942,7 +1935,27 @@ /* Always locate the debug struct, in case it moved. */ info->debug_base = 0; if (locate_base (info) == 0) - return; + { + /* It's possible for the reloc_complete probe to be triggered before + the linker has set the DT_DEBUG pointer (for example, when the + linker has finished relocating an LD_AUDIT library or its + dependencies). Since we can't yet handle libraries from other link + namespaces, we don't lose anything by ignoring them here. */ + struct value *link_map_id_val; + try + { + link_map_id_val = pa->prob->evaluate_argument (0, frame); + } + catch (const gdb_exception_error) + { + link_map_id_val = NULL; + } + /* glibc and illumos' libc both define LM_ID_BASE as zero. */ + if (link_map_id_val != NULL && value_as_long (link_map_id_val) != 0) + action = DO_NOTHING; + else + return; + } /* GDB does not currently support libraries loaded via dlmopen into namespaces other than the initial one. We must ignore @@ -2253,8 +2266,7 @@ CORE_ADDR load_addr; tmp_bfd = os->objfile->obfd; - load_addr = ANOFFSET (os->objfile->section_offsets, - SECT_OFF_TEXT (os->objfile)); + load_addr = os->objfile->text_section_offset (); interp_sect = bfd_get_section_by_name (tmp_bfd, ".text"); if (interp_sect) @@ -2288,7 +2300,6 @@ CORE_ADDR load_addr = 0; int load_addr_found = 0; int loader_found_in_list = 0; - struct so_list *so; struct target_ops *tmp_bfd_target; sym_addr = 0; @@ -2321,8 +2332,7 @@ /* On a running target, we can get the dynamic linker's base address from the shared library table. */ - so = master_so_list (); - while (so) + for (struct so_list *so : current_program_space->solibs ()) { if (svr4_same_1 (interp_name, so->so_original_name)) { @@ -2331,7 +2341,6 @@ load_addr = lm_addr_check (so, tmp_bfd.get ()); break; } - so = so->next; } /* If we were not able to find the base address of the loader @@ -2375,7 +2384,8 @@ if (!load_addr_found) { struct regcache *regcache - = get_thread_arch_regcache (inferior_ptid, target_gdbarch ()); + = get_thread_arch_regcache (current_inferior ()->process_target (), + inferior_ptid, target_gdbarch ()); load_addr = (regcache_read_pc (regcache) - exec_entry_point (tmp_bfd.get (), tmp_bfd_target)); @@ -2955,15 +2965,8 @@ if (symfile_objfile) { - struct section_offsets *new_offsets; - int i; - - new_offsets = XALLOCAVEC (struct section_offsets, - symfile_objfile->num_sections); - - for (i = 0; i < symfile_objfile->num_sections; i++) - new_offsets->offsets[i] = displacement; - + section_offsets new_offsets (symfile_objfile->section_offsets.size (), + displacement); objfile_relocate (symfile_objfile, new_offsets); } else if (exec_bfd) @@ -3247,8 +3250,9 @@ } } +void _initialize_svr4_solib (); void -_initialize_svr4_solib (void) +_initialize_svr4_solib () { solib_svr4_data = gdbarch_data_register_pre_init (solib_svr4_init); diff -Nru gdb-9.1/gdb/solib-svr4.h gdb-10.2/gdb/solib-svr4.h --- gdb-9.1/gdb/solib-svr4.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/solib-svr4.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Handle shared libraries for GDB, the GNU Debugger. - Copyright (C) 2000-2020 Free Software Foundation, Inc. + Copyright (C) 2000-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/solib-target.c gdb-10.2/gdb/solib-target.c --- gdb-9.1/gdb/solib-target.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/solib-target.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Definitions for targets which report shared library events. - Copyright (C) 2007-2020 Free Software Foundation, Inc. + Copyright (C) 2007-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -46,7 +46,7 @@ /* The cached offsets for each section of this shared library, determined from SEGMENT_BASES, or SECTION_BASES. */ - section_offsets *offsets = NULL; + section_offsets offsets; }; typedef std::vector<std::unique_ptr<lm_info_target>> lm_info_vector; @@ -305,13 +305,11 @@ /* Build the offset table only once per object file. We can not do it any earlier, since we need to open the file first. */ - if (li->offsets == NULL) + if (li->offsets.empty ()) { int num_sections = gdb_bfd_count_sections (so->abfd); - li->offsets - = ((struct section_offsets *) - xzalloc (SIZEOF_N_SECTION_OFFSETS (num_sections))); + li->offsets.assign (num_sections, 0); if (!li->section_bases.empty ()) { @@ -356,7 +354,7 @@ gdb_assert (so->addr_low <= so->addr_high); found_range = 1; } - li->offsets->offsets[i] = li->section_bases[bases_index]; + li->offsets[i] = li->section_bases[bases_index]; bases_index++; } if (!found_range) @@ -366,9 +364,9 @@ } else if (!li->segment_bases.empty ()) { - struct symfile_segment_data *data; + symfile_segment_data_up data + = get_symfile_segment_data (so->abfd); - data = get_symfile_segment_data (so->abfd); if (data == NULL) warning (_("\ Could not relocate shared library \"%s\": no segments"), so->so_name); @@ -377,7 +375,8 @@ ULONGEST orig_delta; int i; - if (!symfile_map_offsets_to_segments (so->abfd, data, li->offsets, + if (!symfile_map_offsets_to_segments (so->abfd, data.get (), + li->offsets, li->segment_bases.size (), li->segment_bases.data ())) warning (_("\ @@ -387,9 +386,9 @@ "info sharedlibrary". Report any consecutive segments which were relocated as a single unit. */ gdb_assert (li->segment_bases.size () > 0); - orig_delta = li->segment_bases[0] - data->segment_bases[0]; + orig_delta = li->segment_bases[0] - data->segments[0].base; - for (i = 1; i < data->num_segments; i++) + for (i = 1; i < data->segments.size (); i++) { /* If we have run out of offsets, assume all remaining segments have the same offset. */ @@ -398,25 +397,22 @@ /* If this segment does not have the same offset, do not include it in the library's range. */ - if (li->segment_bases[i] - data->segment_bases[i] + if (li->segment_bases[i] - data->segments[i].base != orig_delta) break; } so->addr_low = li->segment_bases[0]; - so->addr_high = (data->segment_bases[i - 1] - + data->segment_sizes[i - 1] + so->addr_high = (data->segments[i - 1].base + + data->segments[i - 1].size + orig_delta); gdb_assert (so->addr_low <= so->addr_high); - - free_symfile_segment_data (data); } } } - offset = li->offsets->offsets[gdb_bfd_section_index - (sec->the_bfd_section->owner, - sec->the_bfd_section)]; + offset = li->offsets[gdb_bfd_section_index (sec->the_bfd_section->owner, + sec->the_bfd_section)]; sec->addr += offset; sec->endaddr += offset; } @@ -440,8 +436,9 @@ struct target_so_ops solib_target_so_ops; +void _initialize_solib_target (); void -_initialize_solib_target (void) +_initialize_solib_target () { solib_target_so_ops.relocate_section_addresses = solib_target_relocate_section_addresses; diff -Nru gdb-9.1/gdb/solib-target.h gdb-10.2/gdb/solib-target.h --- gdb-9.1/gdb/solib-target.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/solib-target.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Handle shared libraries for GDB, the GNU Debugger. - Copyright (C) 2007-2020 Free Software Foundation, Inc. + Copyright (C) 2007-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/solist.h gdb-10.2/gdb/solist.h --- gdb-9.1/gdb/solist.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/solist.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Shared library declarations for GDB, the GNU Debugger. - Copyright (C) 1990-2020 Free Software Foundation, Inc. + Copyright (C) 1990-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -24,11 +24,6 @@ #include "symtab.h" #include "gdb_bfd.h" -#define ALL_SO_LIBS(so) \ - for (so = so_list_head; \ - so != NULL; \ - so = so->next) - /* Base class for target-specific link map information. */ struct lm_info_base @@ -183,9 +178,6 @@ /* A unique pointer to a so_list. */ typedef std::unique_ptr<so_list, so_deleter> so_list_up; -/* Return address of first so_list entry in master shared object list. */ -struct so_list *master_so_list (void); - /* Find main executable binary file. */ extern gdb::unique_xmalloc_ptr<char> exec_file_find (const char *in_pathname, int *fd); diff -Nru gdb-9.1/gdb/sol-thread.c gdb-10.2/gdb/sol-thread.c --- gdb-9.1/gdb/sol-thread.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/sol-thread.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Solaris threads debugging interface. - Copyright (C) 1996-2020 Free Software Foundation, Inc. + Copyright (C) 1996-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -427,16 +427,6 @@ sol_thread_target::wait (ptid_t ptid, struct target_waitstatus *ourstatus, int options) { - ptid_t rtnval; - ptid_t save_ptid; - - save_ptid = inferior_ptid; - scoped_restore save_inferior_ptid = make_scoped_restore (&inferior_ptid); - - inferior_ptid = thread_to_lwp (inferior_ptid, main_ph.ptid.pid ()); - if (inferior_ptid.pid () == -1) - inferior_ptid = procfs_first_available (); - if (ptid.pid () != -1) { ptid_t ptid_for_warning = ptid; @@ -449,21 +439,25 @@ ptid_for_warning.tid ()); } - rtnval = beneath ()->wait (ptid, ourstatus, options); + ptid_t rtnval = beneath ()->wait (ptid, ourstatus, options); if (ourstatus->kind != TARGET_WAITKIND_EXITED) { /* Map the LWP of interest back to the appropriate thread ID. */ - rtnval = lwp_to_thread (rtnval); - if (rtnval.pid () == -1) - rtnval = save_ptid; + ptid_t thr_ptid = lwp_to_thread (rtnval); + if (thr_ptid.pid () != -1) + rtnval = thr_ptid; /* See if we have a new thread. */ - if (rtnval.tid_p () && rtnval != save_ptid) + if (rtnval.tid_p ()) { - thread_info *thr = find_thread_ptid (rtnval); + thread_info *thr = find_thread_ptid (current_inferior (), rtnval); if (thr == NULL || thr->state == THREAD_EXITED) - add_thread (rtnval); + { + process_stratum_target *proc_target + = current_inferior ()->process_target (); + add_thread (proc_target, rtnval); + } } } @@ -851,9 +845,10 @@ ps_err_e ps_lgetregs (struct ps_prochandle *ph, lwpid_t lwpid, prgregset_t gregset) { - ptid_t ptid = ptid_t (inferior_ptid.pid (), lwpid, 0); + ptid_t ptid = ptid_t (current_inferior ()->pid, lwpid, 0); struct regcache *regcache - = get_thread_arch_regcache (ptid, target_gdbarch ()); + = get_thread_arch_regcache (current_inferior ()->process_target (), + ptid, target_gdbarch ()); target_fetch_registers (regcache, -1); fill_gregset (regcache, (gdb_gregset_t *) gregset, -1); @@ -867,9 +862,10 @@ ps_lsetregs (struct ps_prochandle *ph, lwpid_t lwpid, const prgregset_t gregset) { - ptid_t ptid = ptid_t (inferior_ptid.pid (), lwpid, 0); + ptid_t ptid = ptid_t (current_inferior ()->pid, lwpid, 0); struct regcache *regcache - = get_thread_arch_regcache (ptid, target_gdbarch ()); + = get_thread_arch_regcache (current_inferior ()->process_target (), + ptid, target_gdbarch ()); supply_gregset (regcache, (const gdb_gregset_t *) gregset); target_store_registers (regcache, -1); @@ -919,9 +915,10 @@ ps_lgetfpregs (struct ps_prochandle *ph, lwpid_t lwpid, prfpregset_t *fpregset) { - ptid_t ptid = ptid_t (inferior_ptid.pid (), lwpid, 0); + ptid_t ptid = ptid_t (current_inferior ()->pid, lwpid, 0); struct regcache *regcache - = get_thread_arch_regcache (ptid, target_gdbarch ()); + = get_thread_arch_regcache (current_inferior ()->process_target (), + ptid, target_gdbarch ()); target_fetch_registers (regcache, -1); fill_fpregset (regcache, (gdb_fpregset_t *) fpregset, -1); @@ -935,9 +932,10 @@ ps_lsetfpregs (struct ps_prochandle *ph, lwpid_t lwpid, const prfpregset_t * fpregset) { - ptid_t ptid = ptid_t (inferior_ptid.pid (), lwpid, 0); + ptid_t ptid = ptid_t (current_inferior ()->pid, lwpid, 0); struct regcache *regcache - = get_thread_arch_regcache (ptid, target_gdbarch ()); + = get_thread_arch_regcache (current_inferior ()->process_target (), + ptid, target_gdbarch ()); supply_fpregset (regcache, (const gdb_fpregset_t *) fpregset); target_store_registers (regcache, -1); @@ -961,38 +959,6 @@ return PS_OK; } - -#if (defined(__i386__) || defined(__x86_64__)) && defined (sun) - -/* Reads the local descriptor table of a LWP. - - This function is necessary on x86-solaris only. Without it, the loading - of libthread_db would fail because of ps_lgetLDT being undefined. */ - -ps_err_e -ps_lgetLDT (struct ps_prochandle *ph, lwpid_t lwpid, struct ssd *pldt) /* ARI: editCase function */ -{ - /* NOTE: only used on Solaris, therefore OK to refer to procfs.c. */ - struct ssd *ret; - - /* FIXME: can't I get the process ID from the prochandle or - something? */ - - if (inferior_ptid.pid () <= 0 || lwpid <= 0) - return PS_BADLID; - - ret = procfs_find_LDT_entry (ptid_t (inferior_ptid.pid (), - lwpid, 0)); - if (ret) - { - memcpy (pldt, ret, sizeof (struct ssd)); - return PS_OK; - } - else - /* LDT not found. */ - return PS_ERR; -} -#endif /* Convert PTID to printable form. */ @@ -1036,10 +1002,14 @@ if (retval != TD_OK) return -1; - ptid_t ptid = ptid_t (inferior_ptid.pid (), 0, ti.ti_tid); - thread_info *thr = find_thread_ptid (ptid); + ptid_t ptid = ptid_t (current_inferior ()->pid, 0, ti.ti_tid); + thread_info *thr = find_thread_ptid (current_inferior (), ptid); if (thr == NULL || thr->state == THREAD_EXITED) - add_thread (ptid); + { + process_stratum_target *proc_target + = current_inferior ()->process_target (); + add_thread (proc_target, ptid); + } return 0; } @@ -1178,8 +1148,9 @@ return (thread_info->ptid); } +void _initialize_sol_thread (); void -_initialize_sol_thread (void) +_initialize_sol_thread () { void *dlhandle; diff -Nru gdb-9.1/gdb/source.c gdb-10.2/gdb/source.c --- gdb-9.1/gdb/source.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/source.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* List lines of source files for GDB, the GNU debugger. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -47,6 +47,9 @@ #include "gdbsupport/pathstuff.h" #include "source-cache.h" #include "cli/cli-style.h" +#include "observable.h" +#include "build-id.h" +#include "debuginfod-support.h" #define OPEN_MODE (O_RDONLY | O_BINARY) #define FDOPEN_MODE FOPEN_RB @@ -71,13 +74,39 @@ struct current_source_location { +public: + + current_source_location () = default; + + /* Set the value. */ + void set (struct symtab *s, int l) + { + m_symtab = s; + m_line = l; + gdb::observers::current_source_symtab_and_line_changed.notify (); + } + + /* Get the symtab. */ + struct symtab *symtab () const + { + return m_symtab; + } + + /* Get the line number. */ + int line () const + { + return m_line; + } + +private: + /* Symtab of default file for listing lines of. */ - struct symtab *symtab = nullptr; + struct symtab *m_symtab = nullptr; /* Default next line to list. */ - int line = 0; + int m_line = 0; }; static program_space_key<current_source_location> current_source_key; @@ -191,8 +220,8 @@ current_source_location *loc = get_source_location (current_program_space); cursal.pspace = current_program_space; - cursal.symtab = loc->symtab; - cursal.line = loc->line; + cursal.symtab = loc->symtab (); + cursal.line = loc->line (); cursal.pc = 0; cursal.end = 0; @@ -215,7 +244,7 @@ /* Pull in a current source symtab if necessary. */ current_source_location *loc = get_source_location (current_program_space); - if (loc->symtab == nullptr) + if (loc->symtab () == nullptr) select_source_symtab (0); } @@ -232,13 +261,12 @@ current_source_location *loc = get_source_location (sal.pspace); cursal.pspace = sal.pspace; - cursal.symtab = loc->symtab; - cursal.line = loc->line; + cursal.symtab = loc->symtab (); + cursal.line = loc->line (); cursal.pc = 0; cursal.end = 0; - loc->symtab = sal.symtab; - loc->line = sal.line; + loc->set (sal.symtab, sal.line); /* Force the next "list" to center around the current line. */ clear_lines_listed_range (); @@ -252,8 +280,7 @@ clear_current_source_symtab_and_line (void) { current_source_location *loc = get_source_location (current_program_space); - loc->symtab = nullptr; - loc->line = 0; + loc->set (nullptr, 0); } /* See source.h. */ @@ -265,13 +292,12 @@ { current_source_location *loc = get_source_location (SYMTAB_PSPACE (s)); - loc->symtab = s; - loc->line = 1; + loc->set (s, 1); return; } current_source_location *loc = get_source_location (current_program_space); - if (loc->symtab != nullptr) + if (loc->symtab () != nullptr) return; /* Make the default place to list be the function `main' @@ -280,15 +306,14 @@ if (bsym.symbol != nullptr && SYMBOL_CLASS (bsym.symbol) == LOC_BLOCK) { symtab_and_line sal = find_function_start_sal (bsym.symbol, true); - loc->symtab = sal.symtab; - loc->line = std::max (sal.line - (lines_to_list - 1), 1); + loc->set (sal.symtab, std::max (sal.line - (lines_to_list - 1), 1)); return; } /* Alright; find the last file in the symtab list (ignoring .h's and namespace symtabs). */ - loc->line = 1; + struct symtab *new_symtab = nullptr; for (objfile *ofp : current_program_space->objfiles ()) { @@ -301,12 +326,13 @@ if (!(len > 2 && (strcmp (&name[len - 2], ".h") == 0 || strcmp (name, "<<C++-namespaces>>") == 0))) - loc->symtab = symtab; + new_symtab = symtab; } } } - if (loc->symtab != nullptr) + loc->set (new_symtab, 1); + if (new_symtab != nullptr) return; for (objfile *objfile : current_program_space->objfiles ()) @@ -314,10 +340,13 @@ if (objfile->sf) s = objfile->sf->qf->find_last_source_symtab (objfile); if (s) - loc->symtab = s; + new_symtab = s; + } + if (new_symtab != nullptr) + { + loc->set (new_symtab,1); + return; } - if (loc->symtab != nullptr) - return; error (_("Can't find a default source file")); } @@ -392,9 +421,7 @@ void forget_cached_source_info (void) { - struct program_space *pspace; - - ALL_PSPACES (pspace) + for (struct program_space *pspace : program_spaces) for (objfile *objfile : pspace->objfiles ()) { forget_cached_source_info_for_objfile (objfile); @@ -540,8 +567,7 @@ new_name_holder.reset (concat (name, ".", (char *) NULL)); #endif else if (!IS_ABSOLUTE_PATH (name) && name[0] != '$') - new_name_holder.reset (concat (current_directory, SLASH_STRING, name, - (char *) NULL)); + new_name_holder = gdb_abspath (name); else new_name_holder.reset (savestring (name, p - name)); name = new_name_holder.get (); @@ -642,7 +668,7 @@ { current_source_location *loc = get_source_location (current_program_space); - struct symtab *s = loc->symtab; + struct symtab *s = loc->symtab (); struct compunit_symtab *cust; if (!s) @@ -1122,6 +1148,34 @@ s->fullname = NULL; scoped_fd fd = find_and_open_source (s->filename, SYMTAB_DIRNAME (s), &fullname); + + if (fd.get () < 0) + { + if (SYMTAB_COMPUNIT (s) != nullptr) + { + const objfile *ofp = COMPUNIT_OBJFILE (SYMTAB_COMPUNIT (s)); + + std::string srcpath; + if (IS_ABSOLUTE_PATH (s->filename)) + srcpath = s->filename; + else if (SYMTAB_DIRNAME (s) != nullptr) + { + srcpath = SYMTAB_DIRNAME (s); + srcpath += SLASH_STRING; + srcpath += s->filename; + } + + const struct bfd_build_id *build_id = build_id_bfd_get (ofp->obfd); + + /* Query debuginfod for the source file. */ + if (build_id != nullptr && !srcpath.empty ()) + fd = debuginfod_source_query (build_id->data, + build_id->size, + srcpath.c_str (), + &fullname); + } + } + s->fullname = fullname.release (); return fd; } @@ -1199,9 +1253,9 @@ current_source_location *loc = get_source_location (current_program_space); - loc->symtab = s; - loc->line = line; + loc->set (s, line); first_line_listed = line; + last_line_listed = line; /* If printing of source lines is disabled, just print file and line number. */ @@ -1290,17 +1344,18 @@ } const char *iter = lines.c_str (); + int new_lineno = loc->line (); while (nlines-- > 0 && *iter != '\0') { char buf[20]; - last_line_listed = loc->line; + last_line_listed = loc->line (); if (flags & PRINT_SOURCE_LINES_FILENAME) { uiout->text (symtab_to_filename_for_display (s)); uiout->text (":"); } - xsnprintf (buf, sizeof (buf), "%d\t", loc->line++); + xsnprintf (buf, sizeof (buf), "%d\t", new_lineno++); uiout->text (buf); while (*iter != '\0') @@ -1355,6 +1410,8 @@ } uiout->text ("\n"); } + + loc->set (loc->symtab (), new_lineno); } @@ -1394,12 +1451,12 @@ { current_source_location *loc = get_source_location (current_program_space); - curr_sal.symtab = loc->symtab; + curr_sal.symtab = loc->symtab (); curr_sal.pspace = current_program_space; if (last_line_listed != 0) curr_sal.line = last_line_listed; else - curr_sal.line = loc->line; + curr_sal.line = loc->line (); sals = curr_sal; } @@ -1440,8 +1497,7 @@ else if (sal.line > 0 && find_line_pc_range (sal, &start_pc, &end_pc)) { - struct gdbarch *gdbarch - = get_objfile_arch (SYMTAB_OBJFILE (sal.symtab)); + struct gdbarch *gdbarch = SYMTAB_OBJFILE (sal.symtab)->arch (); if (start_pc == end_pc) { @@ -1476,7 +1532,7 @@ /* If this is the only line, show the source code. If it could not find the file, don't do anything special. */ - if (sals.size () == 1) + if (annotation_level > 0 && sals.size () == 1) annotate_source_line (sal.symtab, sal.line, 0, start_pc); } else @@ -1503,12 +1559,12 @@ current_source_location *loc = get_source_location (current_program_space); - if (loc->symtab == nullptr) + if (loc->symtab () == nullptr) select_source_symtab (0); - scoped_fd desc (open_source_file (loc->symtab)); + scoped_fd desc (open_source_file (loc->symtab ())); if (desc.get () < 0) - perror_with_name (symtab_to_filename_for_display (loc->symtab)); + perror_with_name (symtab_to_filename_for_display (loc->symtab ())); int line = (forward ? last_line_listed + 1 @@ -1516,12 +1572,12 @@ const std::vector<off_t> *offsets; if (line < 1 - || !g_source_cache.get_line_charpos (loc->symtab, &offsets) + || !g_source_cache.get_line_charpos (loc->symtab (), &offsets) || line > offsets->size ()) error (_("Expression not found")); if (lseek (desc.get (), (*offsets)[line - 1], 0) < 0) - perror_with_name (symtab_to_filename_for_display (loc->symtab)); + perror_with_name (symtab_to_filename_for_display (loc->symtab ())); gdb_file_up stream = desc.to_file (FDOPEN_MODE); clearerr (stream.get ()); @@ -1556,9 +1612,9 @@ if (re_exec (buf.data ()) > 0) { /* Match! */ - print_source_lines (loc->symtab, line, line + 1, 0); + print_source_lines (loc->symtab (), line, line + 1, 0); set_internalvar_integer (lookup_internalvar ("_"), line); - loc->line = std::max (line - lines_to_list / 2, 1); + loc->set (loc->symtab (), std::max (line - lines_to_list / 2, 1)); return; } @@ -1572,7 +1628,7 @@ if (fseek (stream.get (), (*offsets)[line - 1], 0) < 0) { const char *filename - = symtab_to_filename_for_display (loc->symtab); + = symtab_to_filename_for_display (loc->symtab ()); perror_with_name (filename); } } @@ -1831,8 +1887,9 @@ } +void _initialize_source (); void -_initialize_source (void) +_initialize_source () { struct cmd_list_element *c; diff -Nru gdb-9.1/gdb/source-cache.c gdb-10.2/gdb/source-cache.c --- gdb-9.1/gdb/source-cache.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/source-cache.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Cache of styled source file text - Copyright (C) 2018-2020 Free Software Foundation, Inc. + Copyright (C) 2018-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -176,11 +176,21 @@ } } - std::string contents = get_plain_source_lines (s, fullname); + std::string contents; + try + { + contents = get_plain_source_lines (s, fullname); + } + catch (const gdb_exception_error &e) + { + /* If 's' is not found, an exception is thrown. */ + return false; + } -#ifdef HAVE_SOURCE_HIGHLIGHT if (source_styling && gdb_stdout->can_emit_style_escape ()) { +#ifdef HAVE_SOURCE_HIGHLIGHT + bool already_styled = false; const char *lang_name = get_language_name (SYMTAB_LANGUAGE (s)); if (lang_name != nullptr) { @@ -202,6 +212,7 @@ std::ostringstream output; highlighter->highlight (input, output, lang_name, fullname); contents = output.str (); + already_styled = true; } catch (...) { @@ -213,8 +224,16 @@ un-highlighted text. */ } } - } + + if (!already_styled) #endif /* HAVE_SOURCE_HIGHLIGHT */ + { + gdb::optional<std::string> ext_contents; + ext_contents = ext_lang_colorize (fullname, contents); + if (ext_contents.has_value ()) + contents = std::move (*ext_contents); + } + } source_text result = { std::move (fullname), std::move (contents) }; m_source_map.push_back (std::move (result)); @@ -231,26 +250,20 @@ source_cache::get_line_charpos (struct symtab *s, const std::vector<off_t> **offsets) { - try - { - std::string fullname = symtab_to_fullname (s); - - auto iter = m_offset_cache.find (fullname); - if (iter == m_offset_cache.end ()) - { - ensure (s); - iter = m_offset_cache.find (fullname); - /* cache_source_text ensured this was entered. */ - gdb_assert (iter != m_offset_cache.end ()); - } + std::string fullname = symtab_to_fullname (s); - *offsets = &iter->second; - return true; - } - catch (const gdb_exception_error &e) + auto iter = m_offset_cache.find (fullname); + if (iter == m_offset_cache.end ()) { - return false; + if (!ensure (s)) + return false; + iter = m_offset_cache.find (fullname); + /* cache_source_text ensured this was entered. */ + gdb_assert (iter != m_offset_cache.end ()); } + + *offsets = &iter->second; + return true; } /* A helper function that extracts the desired source lines from TEXT, @@ -329,6 +342,7 @@ } #endif +void _initialize_source_cache (); void _initialize_source_cache () { diff -Nru gdb-9.1/gdb/source-cache.h gdb-10.2/gdb/source-cache.h --- gdb-9.1/gdb/source-cache.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/source-cache.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Cache of styled source file text - Copyright (C) 2018-2020 Free Software Foundation, Inc. + Copyright (C) 2018-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/source.h gdb-10.2/gdb/source.h --- gdb-9.1/gdb/source.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/source.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* List lines of source files for GDB, the GNU debugger. - Copyright (C) 1999-2020 Free Software Foundation, Inc. + Copyright (C) 1999-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/sparc64-fbsd-nat.c gdb-10.2/gdb/sparc64-fbsd-nat.c --- gdb-9.1/gdb/sparc64-fbsd-nat.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/sparc64-fbsd-nat.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Native-dependent code for FreeBSD/sparc64. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -62,8 +62,9 @@ /* Add some extra features to the generic SPARC target. */ static sparc_target<fbsd_nat_target> the_sparc64_fbsd_nat_target; +void _initialize_sparc64fbsd_nat (); void -_initialize_sparc64fbsd_nat (void) +_initialize_sparc64fbsd_nat () { add_inf_child_target (&the_sparc64_fbsd_nat_target); diff -Nru gdb-9.1/gdb/sparc64-fbsd-tdep.c gdb-10.2/gdb/sparc64-fbsd-tdep.c --- gdb-9.1/gdb/sparc64-fbsd-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/sparc64-fbsd-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for FreeBSD/sparc64. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -242,8 +242,9 @@ (gdbarch, svr4_lp64_fetch_link_map_offsets); } +void _initialize_sparc64fbsd_tdep (); void -_initialize_sparc64fbsd_tdep (void) +_initialize_sparc64fbsd_tdep () { gdbarch_register_osabi (bfd_arch_sparc, bfd_mach_sparc_v9, GDB_OSABI_FREEBSD, sparc64fbsd_init_abi); diff -Nru gdb-9.1/gdb/sparc64-linux-nat.c gdb-10.2/gdb/sparc64-linux-nat.c --- gdb-9.1/gdb/sparc64-linux-nat.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/sparc64-linux-nat.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Native-dependent code for GNU/Linux UltraSPARC. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -35,10 +35,10 @@ public: /* Add our register access methods. */ void fetch_registers (struct regcache *regcache, int regnum) override - { sparc_fetch_inferior_registers (regcache, regnum); } + { sparc_fetch_inferior_registers (this, regcache, regnum); } void store_registers (struct regcache *regcache, int regnum) override - { sparc_store_inferior_registers (regcache, regnum); } + { sparc_store_inferior_registers (this, regcache, regnum); } /* Override linux_nat_target low methods. */ @@ -88,8 +88,9 @@ sparc64_collect_fpregset (&sparc64_bsd_fpregmap, regcache, regnum, fpregs); } +void _initialize_sparc64_linux_nat (); void -_initialize_sparc64_linux_nat (void) +_initialize_sparc64_linux_nat () { sparc_fpregmap = &sparc64_bsd_fpregmap; diff -Nru gdb-9.1/gdb/sparc64-linux-tdep.c gdb-10.2/gdb/sparc64-linux-tdep.c --- gdb-9.1/gdb/sparc64-linux-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/sparc64-linux-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for GNU/Linux UltraSPARC. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -20,7 +20,7 @@ #include "defs.h" #include "frame.h" #include "frame-unwind.h" -#include "dwarf2-frame.h" +#include "dwarf2/frame.h" #include "regset.h" #include "regcache.h" #include "gdbarch.h" @@ -116,15 +116,16 @@ trad_frame_set_id (this_cache, frame_id_build (base, func)); } -/* sparc64 GNU/Linux implementation of the handle_segmentation_fault +/* sparc64 GNU/Linux implementation of the report_signal_info gdbarch hook. Displays information related to ADI memory corruptions. */ static void -sparc64_linux_handle_segmentation_fault (struct gdbarch *gdbarch, - struct ui_out *uiout) +sparc64_linux_report_signal_info (struct gdbarch *gdbarch, struct ui_out *uiout, + enum gdb_signal siggnal) { - if (gdbarch_bfd_arch_info (gdbarch)->bits_per_word != 64) + if (gdbarch_bfd_arch_info (gdbarch)->bits_per_word != 64 + || siggnal != GDB_SIGNAL_SEGV) return; CORE_ADDR addr = 0; @@ -404,12 +405,12 @@ set_xml_syscall_file_name (gdbarch, XML_SYSCALL_FILENAME_SPARC64); set_gdbarch_get_syscall_number (gdbarch, sparc64_linux_get_syscall_number); - set_gdbarch_handle_segmentation_fault (gdbarch, - sparc64_linux_handle_segmentation_fault); + set_gdbarch_report_signal_info (gdbarch, sparc64_linux_report_signal_info); } +void _initialize_sparc64_linux_tdep (); void -_initialize_sparc64_linux_tdep (void) +_initialize_sparc64_linux_tdep () { gdbarch_register_osabi (bfd_arch_sparc, bfd_mach_sparc_v9, GDB_OSABI_LINUX, sparc64_linux_init_abi); diff -Nru gdb-9.1/gdb/sparc64-nat.c gdb-10.2/gdb/sparc64-nat.c --- gdb-9.1/gdb/sparc64-nat.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/sparc64-nat.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Native-dependent code for GNU/Linux UltraSPARC. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -69,8 +69,9 @@ return 0; } +void _initialize_sparc64_nat (); void -_initialize_sparc64_nat (void) +_initialize_sparc64_nat () { sparc_supply_gregset = sparc64_supply_gregset; sparc_collect_gregset = sparc64_collect_gregset; diff -Nru gdb-9.1/gdb/sparc64-nbsd-nat.c gdb-10.2/gdb/sparc64-nbsd-nat.c --- gdb-9.1/gdb/sparc64-nbsd-nat.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/sparc64-nbsd-nat.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Native-dependent code for NetBSD/sparc64. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -170,8 +170,9 @@ /* We've got nothing to add to the generic SPARC target. */ static sparc_target<inf_ptrace_target> the_sparc64_nbsd_nat_target; +void _initialize_sparc64nbsd_nat (); void -_initialize_sparc64nbsd_nat (void) +_initialize_sparc64nbsd_nat () { sparc_supply_gregset = sparc64nbsd_supply_gregset; sparc_collect_gregset = sparc64nbsd_collect_gregset; diff -Nru gdb-9.1/gdb/sparc64-nbsd-tdep.c gdb-10.2/gdb/sparc64-nbsd-tdep.c --- gdb-9.1/gdb/sparc64-nbsd-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/sparc64-nbsd-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for NetBSD/sparc64. - Copyright (C) 2002-2020 Free Software Foundation, Inc. + Copyright (C) 2002-2021 Free Software Foundation, Inc. Based on code contributed by Wasabi Systems, Inc. This file is part of GDB. @@ -249,6 +249,8 @@ { struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); + nbsd_init_abi (info, gdbarch); + tdep->gregset = &sparc64nbsd_gregset; tdep->sizeof_gregset = 160; @@ -268,8 +270,9 @@ (gdbarch, svr4_lp64_fetch_link_map_offsets); } +void _initialize_sparc64nbsd_tdep (); void -_initialize_sparc64nbsd_tdep (void) +_initialize_sparc64nbsd_tdep () { gdbarch_register_osabi (bfd_arch_sparc, bfd_mach_sparc_v9, GDB_OSABI_NETBSD, sparc64nbsd_init_abi); diff -Nru gdb-9.1/gdb/sparc64-obsd-nat.c gdb-10.2/gdb/sparc64-obsd-nat.c --- gdb-9.1/gdb/sparc64-obsd-nat.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/sparc64-obsd-nat.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Native-dependent code for OpenBSD/sparc64. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -109,8 +109,9 @@ /* Add some extra features to the generic SPARC target. */ static sparc_target<obsd_nat_target> the_sparc64_obsd_nat_target; +void _initialize_sparc64obsd_nat (); void -_initialize_sparc64obsd_nat (void) +_initialize_sparc64obsd_nat () { sparc_supply_gregset = sparc64_supply_gregset; sparc_collect_gregset = sparc64_collect_gregset; diff -Nru gdb-9.1/gdb/sparc64-obsd-tdep.c gdb-10.2/gdb/sparc64-obsd-tdep.c --- gdb-9.1/gdb/sparc64-obsd-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/sparc64-obsd-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for OpenBSD/sparc64. - Copyright (C) 2004-2020 Free Software Foundation, Inc. + Copyright (C) 2004-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -27,6 +27,7 @@ #include "symtab.h" #include "objfiles.h" #include "trad-frame.h" +#include "inferior.h" #include "obsd-tdep.h" #include "sparc64-tdep.h" @@ -328,6 +329,9 @@ CORE_ADDR fp, fp_addr = addr + SPARC64OBSD_UTHREAD_FP_OFFSET; gdb_byte buf[8]; + /* This function calls functions that depend on the global current thread. */ + gdb_assert (regcache->ptid () == inferior_ptid); + gdb_assert (regnum >= -1); fp = read_memory_unsigned_integer (fp_addr, 8, byte_order); @@ -373,6 +377,9 @@ CORE_ADDR sp; gdb_byte buf[8]; + /* This function calls functions that depend on the global current thread. */ + gdb_assert (regcache->ptid () == inferior_ptid); + gdb_assert (regnum >= -1); if (regnum == SPARC_SP_REGNUM || regnum == -1) @@ -440,8 +447,9 @@ bsd_uthread_set_collect_uthread (gdbarch, sparc64obsd_collect_uthread); } +void _initialize_sparc64obsd_tdep (); void -_initialize_sparc64obsd_tdep (void) +_initialize_sparc64obsd_tdep () { gdbarch_register_osabi (bfd_arch_sparc, bfd_mach_sparc_v9, GDB_OSABI_OPENBSD, sparc64obsd_init_abi); diff -Nru gdb-9.1/gdb/sparc64-sol2-tdep.c gdb-10.2/gdb/sparc64-sol2-tdep.c --- gdb-9.1/gdb/sparc64-sol2-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/sparc64-sol2-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for Solaris UltraSPARC. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -180,15 +180,9 @@ struct frame_info *this_frame, void **this_cache) { - CORE_ADDR pc = get_frame_pc (this_frame); - const char *name; - - find_pc_partial_function (pc, &name, NULL, NULL); - if (sparc_sol2_pc_in_sigtramp (pc, name)) - return 1; - - return 0; + return sol2_sigtramp_p (this_frame); } + static const struct frame_unwind sparc64_sol2_sigtramp_frame_unwind = { SIGTRAMP_FRAME, @@ -201,7 +195,7 @@ -void +static void sparc64_sol2_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) { struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); @@ -216,19 +210,10 @@ sparc64_init_abi (info, gdbarch); - /* The Sun compilers (Sun ONE Studio, Forte Developer, Sun WorkShop, SunPRO) - compiler puts out 0 instead of the address in N_SO stabs. Starting with - SunPRO 3.0, the compiler does this for N_FUN stabs too. */ - set_gdbarch_sofun_address_maybe_missing (gdbarch, 1); - - /* The Sun compilers also do "globalization"; see the comment in - sparc_sol2_static_transform_name for more information. */ - set_gdbarch_static_transform_name - (gdbarch, sparc_sol2_static_transform_name); + sol2_init_abi (info, gdbarch); /* Solaris has SVR4-style shared libraries... */ set_gdbarch_skip_trampoline_code (gdbarch, find_solib_trampoline_target); - set_gdbarch_skip_solib_resolver (gdbarch, sol2_skip_solib_resolver); set_solib_svr4_fetch_link_map_offsets (gdbarch, svr4_lp64_fetch_link_map_offsets); @@ -238,13 +223,11 @@ /* Solaris has kernel-assisted single-stepping support. */ set_gdbarch_software_single_step (gdbarch, NULL); - - /* How to print LWP PTIDs from core files. */ - set_gdbarch_core_pid_to_str (gdbarch, sol2_core_pid_to_str); } +void _initialize_sparc64_sol2_tdep (); void -_initialize_sparc64_sol2_tdep (void) +_initialize_sparc64_sol2_tdep () { gdbarch_register_osabi (bfd_arch_sparc, bfd_mach_sparc_v9, GDB_OSABI_SOLARIS, sparc64_sol2_init_abi); diff -Nru gdb-9.1/gdb/sparc64-tdep.c gdb-10.2/gdb/sparc64-tdep.c --- gdb-9.1/gdb/sparc64-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/sparc64-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for UltraSPARC. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -19,7 +19,7 @@ #include "defs.h" #include "arch-utils.h" -#include "dwarf2-frame.h" +#include "dwarf2/frame.h" #include "frame.h" #include "frame-base.h" #include "frame-unwind.h" @@ -33,8 +33,8 @@ #include "target-descriptions.h" #include "target.h" #include "value.h" - #include "sparc64-tdep.h" +#include <forward_list> /* This file implements the SPARC 64-bit ABI as defined by the section "Low-Level System Information" of the SPARC Compliance @@ -86,7 +86,7 @@ static struct cmd_list_element *sparc64adilist = NULL; /* ADI stat settings. */ -typedef struct +struct adi_stat_t { /* The ADI block size. */ unsigned long blksize; @@ -108,11 +108,11 @@ /* ADI is available. */ bool is_avail = false; -} adi_stat_t; +}; /* Per-process ADI stat info. */ -typedef struct sparc64_adi_info +struct sparc64_adi_info { sparc64_adi_info (pid_t pid_) : pid (pid_) @@ -124,7 +124,7 @@ /* The ADI stat. */ adi_stat_t stat = {}; -} sparc64_adi_info; +}; static std::forward_list<sparc64_adi_info> adi_proc_list; @@ -186,14 +186,6 @@ } -static void -info_adi_command (const char *args, int from_tty) -{ - printf_unfiltered ("\"adi\" must be followed by \"examine\" " - "or \"assign\".\n"); - help_list (sparc64adilist, "adi ", all_commands, gdb_stdout); -} - /* Read attributes of a maps entry in /proc/[pid]/adi/maps. */ static void @@ -295,7 +287,7 @@ snprintf (cl_name, sizeof(cl_name), "/proc/%ld/adi/tags", (long) pid); int target_errno; proc->stat.tag_fd = target_fileio_open (NULL, cl_name, O_RDWR|O_EXCL, - 0, &target_errno); + false, 0, &target_errno); return proc->stat.tag_fd; } @@ -534,13 +526,13 @@ do_assign (next_address, cnt, version); } +void _initialize_sparc64_adi_tdep (); void -_initialize_sparc64_adi_tdep (void) +_initialize_sparc64_adi_tdep () { - - add_prefix_cmd ("adi", class_support, info_adi_command, - _("ADI version related commands."), - &sparc64adilist, "adi ", 0, &cmdlist); + add_basic_prefix_cmd ("adi", class_support, + _("ADI version related commands."), + &sparc64adilist, "adi ", 0, &cmdlist); add_cmd ("examine", class_support, adi_examine_command, _("Examine ADI versions."), &sparc64adilist); add_alias_cmd ("x", "examine", no_class, 1, &sparc64adilist); @@ -558,7 +550,7 @@ static int sparc64_integral_or_pointer_p (const struct type *type) { - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_INT: case TYPE_CODE_BOOL: @@ -590,7 +582,7 @@ static int sparc64_floating_p (const struct type *type) { - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_FLT: { @@ -610,7 +602,7 @@ static int sparc64_complex_floating_p (const struct type *type) { - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_COMPLEX: { @@ -634,7 +626,7 @@ static int sparc64_structure_or_union_p (const struct type *type) { - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_STRUCT: case TYPE_CODE_UNION: @@ -1173,7 +1165,7 @@ static int sparc64_16_byte_align_p (struct type *type) { - if (TYPE_CODE (type) == TYPE_CODE_ARRAY) + if (type->code () == TYPE_CODE_ARRAY) { struct type *t = check_typedef (TYPE_TARGET_TYPE (type)); @@ -1187,9 +1179,9 @@ { int i; - for (i = 0; i < TYPE_NFIELDS (type); i++) + for (i = 0; i < type->num_fields (); i++) { - struct type *subtype = check_typedef (TYPE_FIELD_TYPE (type, i)); + struct type *subtype = check_typedef (type->field (i).type ()); if (sparc64_16_byte_align_p (subtype)) return 1; @@ -1214,7 +1206,7 @@ gdb_assert (element < 16); - if (TYPE_CODE (type) == TYPE_CODE_ARRAY) + if (type->code () == TYPE_CODE_ARRAY) { gdb_byte buf[8]; int regnum = SPARC_F0_REGNUM + element * 2 + bitpos / 32; @@ -1264,9 +1256,9 @@ { int i; - for (i = 0; i < TYPE_NFIELDS (type); i++) + for (i = 0; i < type->num_fields (); i++) { - struct type *subtype = check_typedef (TYPE_FIELD_TYPE (type, i)); + struct type *subtype = check_typedef (type->field (i).type ()); int subpos = bitpos + TYPE_FIELD_BITPOS (type, i); sparc64_store_floating_fields (regcache, subtype, valbuf, @@ -1282,9 +1274,9 @@ probably in older releases to. To appease GCC, if a structure has only a single `float' member, we store its value in %f1 too (we already have stored in %f0). */ - if (TYPE_NFIELDS (type) == 1) + if (type->num_fields () == 1) { - struct type *subtype = check_typedef (TYPE_FIELD_TYPE (type, 0)); + struct type *subtype = check_typedef (type->field (0).type ()); if (sparc64_floating_p (subtype) && TYPE_LENGTH (subtype) == 4) regcache->cooked_write (SPARC_F1_REGNUM, valbuf); @@ -1303,7 +1295,7 @@ { struct gdbarch *gdbarch = regcache->arch (); - if (TYPE_CODE (type) == TYPE_CODE_ARRAY) + if (type->code () == TYPE_CODE_ARRAY) { int len = TYPE_LENGTH (type); int regnum = SPARC_F0_REGNUM + bitpos / 32; @@ -1352,9 +1344,9 @@ { int i; - for (i = 0; i < TYPE_NFIELDS (type); i++) + for (i = 0; i < type->num_fields (); i++) { - struct type *subtype = check_typedef (TYPE_FIELD_TYPE (type, i)); + struct type *subtype = check_typedef (type->field (i).type ()); int subpos = bitpos + TYPE_FIELD_BITPOS (type, i); sparc64_extract_floating_fields (regcache, subtype, valbuf, subpos); @@ -1664,7 +1656,7 @@ for (i = 0; i < ((len + 7) / 8); i++) regcache->cooked_read (SPARC_O0_REGNUM + i, buf + i * 8); - if (TYPE_CODE (type) != TYPE_CODE_UNION) + if (type->code () != TYPE_CODE_UNION) sparc64_extract_floating_fields (regcache, type, buf, 0); memcpy (valbuf, buf, len); } @@ -1675,7 +1667,7 @@ regcache->cooked_read (SPARC_F0_REGNUM + i, buf + i * 4); memcpy (valbuf, buf, len); } - else if (TYPE_CODE (type) == TYPE_CODE_ARRAY) + else if (type->code () == TYPE_CODE_ARRAY) { /* Small arrays are returned the same way as small structures. */ gdb_assert (len <= 32); @@ -1719,7 +1711,7 @@ memcpy (buf, valbuf, len); for (i = 0; i < ((len + 7) / 8); i++) regcache->cooked_write (SPARC_O0_REGNUM + i, buf + i * 8); - if (TYPE_CODE (type) != TYPE_CODE_UNION) + if (type->code () != TYPE_CODE_UNION) sparc64_store_floating_fields (regcache, type, buf, 0, 0); } else if (sparc64_floating_p (type) || sparc64_complex_floating_p (type)) @@ -1729,7 +1721,7 @@ for (i = 0; i < len / 4; i++) regcache->cooked_write (SPARC_F0_REGNUM + i, buf + i * 4); } - else if (TYPE_CODE (type) == TYPE_CODE_ARRAY) + else if (type->code () == TYPE_CODE_ARRAY) { /* Small arrays are returned the same way as small structures. */ gdb_assert (len <= 32); diff -Nru gdb-9.1/gdb/sparc64-tdep.h gdb-10.2/gdb/sparc64-tdep.h --- gdb-9.1/gdb/sparc64-tdep.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/sparc64-tdep.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for UltraSPARC. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -119,9 +119,6 @@ extern const struct sparc_gregmap sparc64_sol2_gregmap; extern const struct sparc_fpregmap sparc64_sol2_fpregmap; -extern void sparc64_sol2_init_abi (struct gdbarch_info info, - struct gdbarch *gdbarch); - /* Variables exported from sparc64-fbsd-tdep.c. */ /* Register offsets for FreeBSD/sparc64. */ diff -Nru gdb-9.1/gdb/sparc-linux-nat.c gdb-10.2/gdb/sparc-linux-nat.c --- gdb-9.1/gdb/sparc-linux-nat.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/sparc-linux-nat.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Native-dependent code for GNU/Linux SPARC. - Copyright (C) 2005-2020 Free Software Foundation, Inc. + Copyright (C) 2005-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -66,8 +66,9 @@ sparc32_collect_fpregset (sparc_fpregmap, regcache, regnum, fpregs); } +void _initialize_sparc_linux_nat (); void -_initialize_sparc_linux_nat (void) +_initialize_sparc_linux_nat () { sparc_fpregmap = &sparc32_bsd_fpregmap; diff -Nru gdb-9.1/gdb/sparc-linux-tdep.c gdb-10.2/gdb/sparc-linux-tdep.c --- gdb-9.1/gdb/sparc-linux-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/sparc-linux-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for GNU/Linux SPARC. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include "defs.h" -#include "dwarf2-frame.h" +#include "dwarf2/frame.h" #include "frame.h" #include "frame-unwind.h" #include "gdbtypes.h" @@ -465,8 +465,9 @@ sparc32_linux_gdb_signal_to_target); } +void _initialize_sparc_linux_tdep (); void -_initialize_sparc_linux_tdep (void) +_initialize_sparc_linux_tdep () { gdbarch_register_osabi (bfd_arch_sparc, 0, GDB_OSABI_LINUX, sparc32_linux_init_abi); diff -Nru gdb-9.1/gdb/sparc-nat.c gdb-10.2/gdb/sparc-nat.c --- gdb-9.1/gdb/sparc-nat.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/sparc-nat.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Native-dependent code for SPARC. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -78,6 +78,19 @@ #define PTRACE_SETFPREGS PT_SETFPREGS #endif +static PTRACE_TYPE_RET +gdb_ptrace (PTRACE_TYPE_ARG1 request, ptid_t ptid, PTRACE_TYPE_ARG3 addr) +{ +#ifdef __NetBSD__ + /* Support for NetBSD threads: unlike other ptrace implementations in this + file, NetBSD requires that we pass both the pid and lwp. */ + return ptrace (request, ptid.pid (), addr, ptid.lwp ()); +#else + pid_t pid = get_ptrace_pid (ptid); + return ptrace (request, pid, addr, 0); +#endif +} + /* Register set description. */ const struct sparc_gregmap *sparc_gregmap; const struct sparc_fpregmap *sparc_fpregmap; @@ -134,25 +147,11 @@ for all registers (including the floating-point registers). */ void -sparc_fetch_inferior_registers (struct regcache *regcache, int regnum) +sparc_fetch_inferior_registers (process_stratum_target *proc_target, + regcache *regcache, int regnum) { struct gdbarch *gdbarch = regcache->arch (); - pid_t pid; - - /* NOTE: cagney/2002-12-03: This code assumes that the currently - selected light weight processes' registers can be written - directly into the selected thread's register cache. This works - fine when given an 1:1 LWP:thread model (such as found on - GNU/Linux) but will, likely, have problems when used on an N:1 - (userland threads) or N:M (userland multiple LWP) model. In the - case of the latter two, the LWP's registers do not necessarily - belong to the selected thread (the LWP could be in the middle of - executing the thread switch code). - - These functions should instead be parameterized with an explicit - object (struct regcache, struct thread_info?) into which the LWPs - registers can be written. */ - pid = get_ptrace_pid (regcache->ptid ()); + ptid_t ptid = regcache->ptid (); if (regnum == SPARC_G0_REGNUM) { @@ -166,9 +165,15 @@ { gregset_t regs; - if (ptrace (PTRACE_GETREGS, pid, (PTRACE_TYPE_ARG3) ®s, 0) == -1) + if (gdb_ptrace (PTRACE_GETREGS, ptid, (PTRACE_TYPE_ARG3) ®s) == -1) perror_with_name (_("Couldn't get registers")); + /* Deep down, sparc_supply_rwindow reads memory, so needs the global + thread context to be set. */ + thread_info *thread = find_thread_ptid (proc_target, ptid); + scoped_restore_current_thread restore_thread; + switch_to_thread (thread); + sparc_supply_gregset (sparc_gregmap, regcache, -1, ®s); if (regnum != -1) return; @@ -178,7 +183,7 @@ { fpregset_t fpregs; - if (ptrace (PTRACE_GETFPREGS, pid, (PTRACE_TYPE_ARG3) &fpregs, 0) == -1) + if (gdb_ptrace (PTRACE_GETFPREGS, ptid, (PTRACE_TYPE_ARG3) &fpregs) == -1) perror_with_name (_("Couldn't get floating point status")); sparc_supply_fpregset (sparc_fpregmap, regcache, -1, &fpregs); @@ -186,25 +191,22 @@ } void -sparc_store_inferior_registers (struct regcache *regcache, int regnum) +sparc_store_inferior_registers (process_stratum_target *proc_target, + regcache *regcache, int regnum) { struct gdbarch *gdbarch = regcache->arch (); - pid_t pid; - - /* NOTE: cagney/2002-12-02: See comment in fetch_inferior_registers - about threaded assumptions. */ - pid = get_ptrace_pid (regcache->ptid ()); + ptid_t ptid = regcache->ptid (); if (regnum == -1 || sparc_gregset_supplies_p (gdbarch, regnum)) { gregset_t regs; - if (ptrace (PTRACE_GETREGS, pid, (PTRACE_TYPE_ARG3) ®s, 0) == -1) + if (gdb_ptrace (PTRACE_GETREGS, ptid, (PTRACE_TYPE_ARG3) ®s) == -1) perror_with_name (_("Couldn't get registers")); sparc_collect_gregset (sparc_gregmap, regcache, regnum, ®s); - if (ptrace (PTRACE_SETREGS, pid, (PTRACE_TYPE_ARG3) ®s, 0) == -1) + if (gdb_ptrace (PTRACE_SETREGS, ptid, (PTRACE_TYPE_ARG3) ®s) == -1) perror_with_name (_("Couldn't write registers")); /* Deal with the stack regs. */ @@ -214,6 +216,13 @@ ULONGEST sp; regcache_cooked_read_unsigned (regcache, SPARC_SP_REGNUM, &sp); + + /* Deep down, sparc_collect_rwindow writes memory, so needs the global + thread context to be set. */ + thread_info *thread = find_thread_ptid (proc_target, ptid); + scoped_restore_current_thread restore_thread; + switch_to_thread (thread); + sparc_collect_rwindow (regcache, sp, regnum); } @@ -225,7 +234,7 @@ { fpregset_t fpregs, saved_fpregs; - if (ptrace (PTRACE_GETFPREGS, pid, (PTRACE_TYPE_ARG3) &fpregs, 0) == -1) + if (gdb_ptrace (PTRACE_GETFPREGS, ptid, (PTRACE_TYPE_ARG3) &fpregs) == -1) perror_with_name (_("Couldn't get floating-point registers")); memcpy (&saved_fpregs, &fpregs, sizeof (fpregs)); @@ -237,8 +246,8 @@ to write the registers if nothing changed. */ if (memcmp (&saved_fpregs, &fpregs, sizeof (fpregs)) != 0) { - if (ptrace (PTRACE_SETFPREGS, pid, - (PTRACE_TYPE_ARG3) &fpregs, 0) == -1) + if (gdb_ptrace (PTRACE_SETFPREGS, ptid, + (PTRACE_TYPE_ARG3) &fpregs) == -1) perror_with_name (_("Couldn't write floating-point registers")); } @@ -305,8 +314,9 @@ } +void _initialize_sparc_nat (); void -_initialize_sparc_nat (void) +_initialize_sparc_nat () { /* Default to using SunOS 4 register sets. */ if (sparc_gregmap == NULL) diff -Nru gdb-9.1/gdb/sparc-nat.h gdb-10.2/gdb/sparc-nat.h --- gdb-9.1/gdb/sparc-nat.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/sparc-nat.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Native-dependent code for SPARC. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -41,8 +41,10 @@ extern int sparc32_gregset_supplies_p (struct gdbarch *gdbarch, int regnum); extern int sparc32_fpregset_supplies_p (struct gdbarch *gdbarch, int regnum); -extern void sparc_fetch_inferior_registers (struct regcache *, int); -extern void sparc_store_inferior_registers (struct regcache *, int); +extern void sparc_fetch_inferior_registers (process_stratum_target *proc_target, + regcache *, int); +extern void sparc_store_inferior_registers (process_stratum_target *proc_target, + regcache *, int); extern target_xfer_status sparc_xfer_wcookie (enum target_object object, const char *annex, @@ -59,10 +61,10 @@ struct sparc_target : public BaseTarget { void fetch_registers (struct regcache *regcache, int regnum) override - { sparc_fetch_inferior_registers (regcache, regnum); } + { sparc_fetch_inferior_registers (this, regcache, regnum); } void store_registers (struct regcache *regcache, int regnum) override - { sparc_store_inferior_registers (regcache, regnum); } + { sparc_store_inferior_registers (this, regcache, regnum); } enum target_xfer_status xfer_partial (enum target_object object, const char *annex, @@ -75,8 +77,8 @@ return sparc_xfer_wcookie (object, annex, readbuf, writebuf, offset, len, xfered_len); - return BaseTarget (object, annex, readbuf, writebuf, - offset, len, xfered_len); + return BaseTarget::xfer_partial (object, annex, readbuf, writebuf, + offset, len, xfered_len); } }; diff -Nru gdb-9.1/gdb/sparc-nbsd-nat.c gdb-10.2/gdb/sparc-nbsd-nat.c --- gdb-9.1/gdb/sparc-nbsd-nat.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/sparc-nbsd-nat.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Native-dependent code for NetBSD/sparc. - Copyright (C) 2002-2020 Free Software Foundation, Inc. + Copyright (C) 2002-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -57,8 +57,9 @@ static sparc_target<inf_ptrace_target> the_sparc_nbsd_nat_target; +void _initialize_sparcnbsd_nat (); void -_initialize_sparcnbsd_nat (void) +_initialize_sparcnbsd_nat () { sparc_gregmap = &sparc32nbsd_gregmap; sparc_fpregmap = &sparc32_bsd_fpregmap; diff -Nru gdb-9.1/gdb/sparc-nbsd-tdep.c gdb-10.2/gdb/sparc-nbsd-tdep.c --- gdb-9.1/gdb/sparc-nbsd-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/sparc-nbsd-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for NetBSD/sparc. - Copyright (C) 2002-2020 Free Software Foundation, Inc. + Copyright (C) 2002-2021 Free Software Foundation, Inc. Contributed by Wasabi Systems, Inc. This file is part of GDB. @@ -296,6 +296,8 @@ { struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); + nbsd_init_abi (info, gdbarch); + /* NetBSD doesn't support the 128-bit `long double' from the psABI. */ set_gdbarch_long_double_bit (gdbarch, 64); set_gdbarch_long_double_format (gdbarch, floatformats_ieee_double); @@ -315,8 +317,9 @@ (gdbarch, svr4_ilp32_fetch_link_map_offsets); } +void _initialize_sparcnbsd_tdep (); void -_initialize_sparcnbsd_tdep (void) +_initialize_sparcnbsd_tdep () { gdbarch_register_osabi (bfd_arch_sparc, 0, GDB_OSABI_NETBSD, sparc32nbsd_init_abi); diff -Nru gdb-9.1/gdb/sparc-obsd-tdep.c gdb-10.2/gdb/sparc-obsd-tdep.c --- gdb-9.1/gdb/sparc-obsd-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/sparc-obsd-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for OpenBSD/sparc. - Copyright (C) 2004-2020 Free Software Foundation, Inc. + Copyright (C) 2004-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -25,6 +25,7 @@ #include "regcache.h" #include "symtab.h" #include "trad-frame.h" +#include "inferior.h" #include "obsd-tdep.h" #include "sparc-tdep.h" @@ -158,6 +159,9 @@ CORE_ADDR fp, fp_addr = addr + SPARC32OBSD_UTHREAD_FP_OFFSET; gdb_byte buf[4]; + /* This function calls functions that depend on the global current thread. */ + gdb_assert (regcache->ptid () == inferior_ptid); + gdb_assert (regnum >= -1); fp = read_memory_unsigned_integer (fp_addr, 4, byte_order); @@ -203,6 +207,9 @@ CORE_ADDR sp; gdb_byte buf[4]; + /* This function calls functions that depend on the global current thread. */ + gdb_assert (regcache->ptid () == inferior_ptid); + gdb_assert (regnum >= -1); if (regnum == SPARC_SP_REGNUM || regnum == -1) @@ -246,8 +253,9 @@ bsd_uthread_set_collect_uthread (gdbarch, sparc32obsd_collect_uthread); } +void _initialize_sparc32obsd_tdep (); void -_initialize_sparc32obsd_tdep (void) +_initialize_sparc32obsd_tdep () { gdbarch_register_osabi (bfd_arch_sparc, 0, GDB_OSABI_OPENBSD, sparc32obsd_init_abi); diff -Nru gdb-9.1/gdb/sparc-ravenscar-thread.c gdb-10.2/gdb/sparc-ravenscar-thread.c --- gdb-9.1/gdb/sparc-ravenscar-thread.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/sparc-ravenscar-thread.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Ravenscar SPARC target support. - Copyright (C) 2004-2020 Free Software Foundation, Inc. + Copyright (C) 2004-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/sparc-ravenscar-thread.h gdb-10.2/gdb/sparc-ravenscar-thread.h --- gdb-9.1/gdb/sparc-ravenscar-thread.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/sparc-ravenscar-thread.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Ravenscar SPARC target support. - Copyright (C) 2012-2020 Free Software Foundation, Inc. + Copyright (C) 2012-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/sparc-sol2-nat.c gdb-10.2/gdb/sparc-sol2-nat.c --- gdb-9.1/gdb/sparc-sol2-nat.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/sparc-sol2-nat.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Native-dependent code for Solaris SPARC. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/sparc-sol2-tdep.c gdb-10.2/gdb/sparc-sol2-tdep.c --- gdb-9.1/gdb/sparc-sol2-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/sparc-sol2-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for Solaris SPARC. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -99,30 +99,6 @@ }; -/* The Solaris signal trampolines reside in libc. For normal signals, - the function `sigacthandler' is used. This signal trampoline will - call the signal handler using the System V calling convention, - where the third argument is a pointer to an instance of - `ucontext_t', which has a member `uc_mcontext' that contains the - saved registers. Incidentally, the kernel passes the `ucontext_t' - pointer as the third argument of the signal trampoline too, and - `sigacthandler' simply passes it on. However, if you link your - program with "-L/usr/ucblib -R/usr/ucblib -lucb", the function - `ucbsigvechandler' will be used, which invokes the using the BSD - convention, where the third argument is a pointer to an instance of - `struct sigcontext'. It is the `ucbsigvechandler' function that - converts the `ucontext_t' to a `sigcontext', and back. Unless the - signal handler modifies the `struct sigcontext' we can safely - ignore this. */ - -int -sparc_sol2_pc_in_sigtramp (CORE_ADDR pc, const char *name) -{ - return (name && (strcmp (name, "sigacthandler") == 0 - || strcmp (name, "ucbsigvechandler") == 0 - || strcmp (name, "__sighndlr") == 0)); -} - static struct sparc_frame_cache * sparc32_sol2_sigtramp_frame_cache (struct frame_info *this_frame, void **this_cache) @@ -201,14 +177,7 @@ struct frame_info *this_frame, void **this_cache) { - CORE_ADDR pc = get_frame_pc (this_frame); - const char *name; - - find_pc_partial_function (pc, &name, NULL, NULL); - if (sparc_sol2_pc_in_sigtramp (pc, name)) - return 1; - - return 0; + return sol2_sigtramp_p (this_frame); } static const struct frame_unwind sparc32_sol2_sigtramp_frame_unwind = @@ -221,39 +190,9 @@ sparc32_sol2_sigtramp_frame_sniffer }; -/* Unglobalize NAME. */ - -const char * -sparc_sol2_static_transform_name (const char *name) -{ - /* The Sun compilers (Sun ONE Studio, Forte Developer, Sun WorkShop, - SunPRO) convert file static variables into global values, a - process known as globalization. In order to do this, the - compiler will create a unique prefix and prepend it to each file - static variable. For static variables within a function, this - globalization prefix is followed by the function name (nested - static variables within a function are supposed to generate a - warning message, and are left alone). The procedure is - documented in the Stabs Interface Manual, which is distributed - with the compilers, although version 4.0 of the manual seems to - be incorrect in some places, at least for SPARC. The - globalization prefix is encoded into an N_OPT stab, with the form - "G=<prefix>". The globalization prefix always seems to start - with a dollar sign '$'; a dot '.' is used as a separator. So we - simply strip everything up until the last dot. */ - - if (name[0] == '$') - { - const char *p = strrchr (name, '.'); - if (p) - return p + 1; - } - - return name; -} -void +static void sparc32_sol2_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) { struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); @@ -264,19 +203,10 @@ tdep->fpregset = &sparc32_sol2_fpregset; tdep->sizeof_fpregset = 400; - /* The Sun compilers (Sun ONE Studio, Forte Developer, Sun WorkShop, SunPRO) - compiler puts out 0 instead of the address in N_SO stabs. Starting with - SunPRO 3.0, the compiler does this for N_FUN stabs too. */ - set_gdbarch_sofun_address_maybe_missing (gdbarch, 1); - - /* The Sun compilers also do "globalization"; see the comment in - sparc_sol2_static_transform_name for more information. */ - set_gdbarch_static_transform_name - (gdbarch, sparc_sol2_static_transform_name); + sol2_init_abi (info, gdbarch); /* Solaris has SVR4-style shared libraries... */ set_gdbarch_skip_trampoline_code (gdbarch, find_solib_trampoline_target); - set_gdbarch_skip_solib_resolver (gdbarch, sol2_skip_solib_resolver); set_solib_svr4_fetch_link_map_offsets (gdbarch, svr4_ilp32_fetch_link_map_offsets); @@ -288,13 +218,11 @@ set_gdbarch_software_single_step (gdbarch, NULL); frame_unwind_append_unwinder (gdbarch, &sparc32_sol2_sigtramp_frame_unwind); - - /* How to print LWP PTIDs from core files. */ - set_gdbarch_core_pid_to_str (gdbarch, sol2_core_pid_to_str); } +void _initialize_sparc_sol2_tdep (); void -_initialize_sparc_sol2_tdep (void) +_initialize_sparc_sol2_tdep () { gdbarch_register_osabi (bfd_arch_sparc, 0, GDB_OSABI_SOLARIS, sparc32_sol2_init_abi); diff -Nru gdb-9.1/gdb/sparc-tdep.c gdb-10.2/gdb/sparc-tdep.c --- gdb-9.1/gdb/sparc-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/sparc-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for SPARC. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -21,7 +21,7 @@ #include "arch-utils.h" #include "dis-asm.h" #include "dwarf2.h" -#include "dwarf2-frame.h" +#include "dwarf2/frame.h" #include "frame.h" #include "frame-base.h" #include "frame-unwind.h" @@ -214,7 +214,7 @@ { int len = TYPE_LENGTH (type); - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_INT: case TYPE_CODE_BOOL: @@ -242,7 +242,7 @@ static int sparc_floating_p (const struct type *type) { - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_FLT: { @@ -261,7 +261,7 @@ static int sparc_complex_floating_p (const struct type *type) { - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_COMPLEX: { @@ -284,7 +284,7 @@ static int sparc_structure_or_union_p (const struct type *type) { - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_STRUCT: case TYPE_CODE_UNION: @@ -303,7 +303,7 @@ static bool sparc_structure_return_p (const struct type *type) { - if (TYPE_CODE (type) == TYPE_CODE_ARRAY && TYPE_VECTOR (type)) + if (type->code () == TYPE_CODE_ARRAY && TYPE_VECTOR (type)) { /* Float vectors are always returned by memory. */ if (sparc_floating_p (check_typedef (TYPE_TARGET_TYPE (type)))) @@ -331,7 +331,7 @@ static bool sparc_arg_by_memory_p (const struct type *type) { - if (TYPE_CODE (type) == TYPE_CODE_ARRAY && TYPE_VECTOR (type)) + if (type->code () == TYPE_CODE_ARRAY && TYPE_VECTOR (type)) { /* Float vectors are always passed by memory. */ if (sparc_floating_p (check_typedef (TYPE_TARGET_TYPE (type)))) @@ -1228,7 +1228,7 @@ sparc32_struct_return_from_sym (struct symbol *sym) { struct type *type = check_typedef (SYMBOL_TYPE (sym)); - enum type_code code = TYPE_CODE (type); + enum type_code code = type->code (); if (code == TYPE_CODE_FUNC || code == TYPE_CODE_METHOD) { @@ -1402,7 +1402,7 @@ gdb_assert (!sparc_structure_return_p (type)); if (sparc_floating_p (type) || sparc_complex_floating_p (type) - || TYPE_CODE (type) == TYPE_CODE_ARRAY) + || type->code () == TYPE_CODE_ARRAY) { /* Floating return values. */ regcache->cooked_read (SPARC_F0_REGNUM, buf); @@ -1944,6 +1944,9 @@ gdb_byte buf[8]; int i; + /* This function calls functions that depend on the global current thread. */ + gdb_assert (regcache->ptid () == inferior_ptid); + if (sp & 1) { /* Registers are 64-bit. */ @@ -2018,6 +2021,9 @@ gdb_byte buf[8]; int i; + /* This function calls functions that depend on the global current thread. */ + gdb_assert (regcache->ptid () == inferior_ptid); + if (sp & 1) { /* Registers are 64-bit. */ @@ -2258,8 +2264,9 @@ 32 * 4, /* %fsr */ }; +void _initialize_sparc_tdep (); void -_initialize_sparc_tdep (void) +_initialize_sparc_tdep () { register_gdbarch_init (bfd_arch_sparc, sparc32_gdbarch_init); } diff -Nru gdb-9.1/gdb/sparc-tdep.h gdb-10.2/gdb/sparc-tdep.h --- gdb-9.1/gdb/sparc-tdep.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/sparc-tdep.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for SPARC. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -245,13 +245,6 @@ extern const struct sparc_gregmap sparc32_sol2_gregmap; extern const struct sparc_fpregmap sparc32_sol2_fpregmap; -extern int sparc_sol2_pc_in_sigtramp (CORE_ADDR pc, const char *name); - -extern const char *sparc_sol2_static_transform_name (const char *name); - -extern void sparc32_sol2_init_abi (struct gdbarch_info info, - struct gdbarch *gdbarch); - /* Functions and variables exported from sparcnbsd-tdep.c. */ /* Register offsets for NetBSD. */ diff -Nru gdb-9.1/gdb/stabsread.c gdb-10.2/gdb/stabsread.c --- gdb-9.1/gdb/stabsread.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/stabsread.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Support routines for decoding "stabs" debugging information format. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -369,7 +369,7 @@ static struct type * dbx_init_float_type (struct objfile *objfile, int bits) { - struct gdbarch *gdbarch = get_objfile_arch (objfile); + struct gdbarch *gdbarch = objfile->arch (); const struct floatformat **format; struct type *type; @@ -423,7 +423,7 @@ /* On xcoff, if a global is defined and never referenced, ld will remove it from the executable. There is then a N_GSYM stab for it, but no regular (C_EXT) symbol. */ - sym = allocate_symbol (objfile); + sym = new (&objfile->objfile_obstack) symbol; SYMBOL_DOMAIN (sym) = VAR_DOMAIN; SYMBOL_ACLASS_INDEX (sym) = LOC_OPTIMIZED_OUT; sym->set_linkage_name @@ -649,7 +649,7 @@ define_symbol (CORE_ADDR valu, const char *string, int desc, int type, struct objfile *objfile) { - struct gdbarch *gdbarch = get_objfile_arch (objfile); + struct gdbarch *gdbarch = objfile->arch (); struct symbol *sym; const char *p = find_name_end (string); int deftype; @@ -687,7 +687,7 @@ e.g. ":t10=*2" or a nameless enum like " :T16=ered:0,green:1,blue:2,;" */ nameless = (p == string || ((string[0] == ' ') && (string[1] == ':'))); - current_symbol = sym = allocate_symbol (objfile); + current_symbol = sym = new (&objfile->objfile_obstack) symbol; if (processing_gcc_compilation) { @@ -700,8 +700,8 @@ SYMBOL_LINE (sym) = 0; /* unknown */ } - SYMBOL_SET_LANGUAGE (sym, get_current_subfile ()->language, - &objfile->objfile_obstack); + sym->set_language (get_current_subfile ()->language, + &objfile->objfile_obstack); if (is_cplus_marker (string[0])) { @@ -723,12 +723,6 @@ /* This was an anonymous type that was never fixed up. */ goto normal; - case 'X': - /* SunPRO (3.0 at least) static variable encoding. */ - if (gdbarch_static_transform_name_p (gdbarch)) - goto normal; - /* fall through */ - default: complaint (_("Unknown C++ symbol name `%s'"), string); @@ -738,9 +732,9 @@ else { normal: - std::string new_name; + gdb::unique_xmalloc_ptr<char> new_name; - if (SYMBOL_LANGUAGE (sym) == language_cplus) + if (sym->language () == language_cplus) { char *name = (char *) alloca (p - string + 1); @@ -748,17 +742,13 @@ name[p - string] = '\0'; new_name = cp_canonicalize_string (name); } - if (!new_name.empty ()) - { - SYMBOL_SET_NAMES (sym, - new_name, - 1, objfile); - } + if (new_name != nullptr) + sym->compute_and_set_names (new_name.get (), true, objfile->per_bfd); else - SYMBOL_SET_NAMES (sym, gdb::string_view (string, p - string), true, - objfile); + sym->compute_and_set_names (gdb::string_view (string, p - string), true, + objfile->per_bfd); - if (SYMBOL_LANGUAGE (sym) == language_cplus) + if (sym->language () == language_cplus) cp_scan_for_anonymous_namespaces (get_buildsym_compunit (), sym, objfile); @@ -959,7 +949,7 @@ /* Function result types are described as the result type in stabs. We need to convert this to the function-returning-type-X type in GDB. E.g. "int" is converted to "function returning int". */ - if (TYPE_CODE (SYMBOL_TYPE (sym)) != TYPE_CODE_FUNC) + if (SYMBOL_TYPE (sym)->code () != TYPE_CODE_FUNC) SYMBOL_TYPE (sym) = lookup_function_type (SYMBOL_TYPE (sym)); /* All functions in C++ have prototypes. Stabs does not offer an @@ -990,8 +980,9 @@ } /* Allocate parameter information fields and fill them in. */ - TYPE_FIELDS (ftype) = (struct field *) - TYPE_ALLOC (ftype, nsemi * sizeof (struct field)); + ftype->set_fields + ((struct field *) + TYPE_ALLOC (ftype, nsemi * sizeof (struct field))); while (*p++ == ';') { struct type *ptype; @@ -1008,12 +999,12 @@ a TYPE_CODE_VOID type by read_type, and we have to turn it back into builtin_int here. FIXME: Do we need a new builtin_promoted_int_arg ? */ - if (TYPE_CODE (ptype) == TYPE_CODE_VOID) + if (ptype->code () == TYPE_CODE_VOID) ptype = objfile_type (objfile)->builtin_int; - TYPE_FIELD_TYPE (ftype, nparams) = ptype; + ftype->field (nparams).set_type (ptype); TYPE_FIELD_ARTIFICIAL (ftype, nparams++) = 0; } - TYPE_NFIELDS (ftype) = nparams; + ftype->set_num_fields (nparams); TYPE_PROTOTYPED (ftype) = 1; } break; @@ -1097,7 +1088,7 @@ really an int. */ if (TYPE_LENGTH (SYMBOL_TYPE (sym)) < gdbarch_int_bit (gdbarch) / TARGET_CHAR_BIT - && TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_INT) + && SYMBOL_TYPE (sym)->code () == TYPE_CODE_INT) { SYMBOL_TYPE (sym) = TYPE_UNSIGNED (SYMBOL_TYPE (sym)) @@ -1189,23 +1180,6 @@ SYMBOL_TYPE (sym) = read_type (&p, objfile); SYMBOL_ACLASS_INDEX (sym) = LOC_STATIC; SET_SYMBOL_VALUE_ADDRESS (sym, valu); - if (gdbarch_static_transform_name_p (gdbarch) - && gdbarch_static_transform_name (gdbarch, sym->linkage_name ()) - != sym->linkage_name ()) - { - struct bound_minimal_symbol msym; - - msym = lookup_minimal_symbol (sym->linkage_name (), NULL, objfile); - if (msym.minsym != NULL) - { - const char *new_name = gdbarch_static_transform_name - (gdbarch, sym->linkage_name ()); - - sym->set_linkage_name (new_name); - SET_SYMBOL_VALUE_ADDRESS (sym, - BMSYMBOL_VALUE_ADDRESS (msym)); - } - } SYMBOL_DOMAIN (sym) = VAR_DOMAIN; add_symbol_to_list (sym, get_file_symbols ()); break; @@ -1225,7 +1199,7 @@ This is important to do, because of forward references: The cleanup of undefined types stored in undef_types only uses STRUCT_DOMAIN symbols to perform the replacement. */ - synonym = (SYMBOL_LANGUAGE (sym) == language_ada && p[-2] != 'T'); + synonym = (sym->language () == language_ada && p[-2] != 'T'); /* Typedef */ SYMBOL_TYPE (sym) = read_type (&p, objfile); @@ -1242,9 +1216,9 @@ a base type which did not have its name defined when the derived class was output. We fill in the derived class's base part member's name here in that case. */ - if (TYPE_NAME (SYMBOL_TYPE (sym)) != NULL) - if ((TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_STRUCT - || TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_UNION) + if (SYMBOL_TYPE (sym)->name () != NULL) + if ((SYMBOL_TYPE (sym)->code () == TYPE_CODE_STRUCT + || SYMBOL_TYPE (sym)->code () == TYPE_CODE_UNION) && TYPE_N_BASECLASSES (SYMBOL_TYPE (sym))) { int j; @@ -1252,14 +1226,14 @@ for (j = TYPE_N_BASECLASSES (SYMBOL_TYPE (sym)) - 1; j >= 0; j--) if (TYPE_BASECLASS_NAME (SYMBOL_TYPE (sym), j) == 0) TYPE_BASECLASS_NAME (SYMBOL_TYPE (sym), j) = - TYPE_NAME (TYPE_BASECLASS (SYMBOL_TYPE (sym), j)); + TYPE_BASECLASS (SYMBOL_TYPE (sym), j)->name (); } - if (TYPE_NAME (SYMBOL_TYPE (sym)) == NULL) + if (SYMBOL_TYPE (sym)->name () == NULL) { - if ((TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_PTR + if ((SYMBOL_TYPE (sym)->code () == TYPE_CODE_PTR && strcmp (sym->linkage_name (), vtbl_ptr_name)) - || TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_FUNC) + || SYMBOL_TYPE (sym)->code () == TYPE_CODE_FUNC) { /* If we are giving a name to a type such as "pointer to foo" or "function returning foo", we better not set @@ -1298,12 +1272,10 @@ /* Pascal accepts names for pointer types. */ if (get_current_subfile ()->language == language_pascal) - { - TYPE_NAME (SYMBOL_TYPE (sym)) = sym->linkage_name (); - } + SYMBOL_TYPE (sym)->set_name (sym->linkage_name ()); } else - TYPE_NAME (SYMBOL_TYPE (sym)) = sym->linkage_name (); + SYMBOL_TYPE (sym)->set_name (sym->linkage_name ()); } add_symbol_to_list (sym, get_file_symbols ()); @@ -1311,19 +1283,19 @@ if (synonym) { /* Create the STRUCT_DOMAIN clone. */ - struct symbol *struct_sym = allocate_symbol (objfile); + struct symbol *struct_sym = new (&objfile->objfile_obstack) symbol; *struct_sym = *sym; SYMBOL_ACLASS_INDEX (struct_sym) = LOC_TYPEDEF; SYMBOL_VALUE (struct_sym) = valu; SYMBOL_DOMAIN (struct_sym) = STRUCT_DOMAIN; - if (TYPE_NAME (SYMBOL_TYPE (sym)) == 0) - TYPE_NAME (SYMBOL_TYPE (sym)) - = obconcat (&objfile->objfile_obstack, sym->linkage_name (), - (char *) NULL); + if (SYMBOL_TYPE (sym)->name () == 0) + SYMBOL_TYPE (sym)->set_name + (obconcat (&objfile->objfile_obstack, sym->linkage_name (), + (char *) NULL)); add_symbol_to_list (struct_sym, get_file_symbols ()); } - + break; case 'T': @@ -1344,25 +1316,25 @@ SYMBOL_ACLASS_INDEX (sym) = LOC_TYPEDEF; SYMBOL_VALUE (sym) = valu; SYMBOL_DOMAIN (sym) = STRUCT_DOMAIN; - if (TYPE_NAME (SYMBOL_TYPE (sym)) == 0) - TYPE_NAME (SYMBOL_TYPE (sym)) - = obconcat (&objfile->objfile_obstack, sym->linkage_name (), - (char *) NULL); + if (SYMBOL_TYPE (sym)->name () == 0) + SYMBOL_TYPE (sym)->set_name + (obconcat (&objfile->objfile_obstack, sym->linkage_name (), + (char *) NULL)); add_symbol_to_list (sym, get_file_symbols ()); if (synonym) { /* Clone the sym and then modify it. */ - struct symbol *typedef_sym = allocate_symbol (objfile); + struct symbol *typedef_sym = new (&objfile->objfile_obstack) symbol; *typedef_sym = *sym; SYMBOL_ACLASS_INDEX (typedef_sym) = LOC_TYPEDEF; SYMBOL_VALUE (typedef_sym) = valu; SYMBOL_DOMAIN (typedef_sym) = VAR_DOMAIN; - if (TYPE_NAME (SYMBOL_TYPE (sym)) == 0) - TYPE_NAME (SYMBOL_TYPE (sym)) - = obconcat (&objfile->objfile_obstack, sym->linkage_name (), - (char *) NULL); + if (SYMBOL_TYPE (sym)->name () == 0) + SYMBOL_TYPE (sym)->set_name + (obconcat (&objfile->objfile_obstack, sym->linkage_name (), + (char *) NULL)); add_symbol_to_list (typedef_sym, get_file_symbols ()); } break; @@ -1372,24 +1344,8 @@ SYMBOL_TYPE (sym) = read_type (&p, objfile); SYMBOL_ACLASS_INDEX (sym) = LOC_STATIC; SET_SYMBOL_VALUE_ADDRESS (sym, valu); - if (gdbarch_static_transform_name_p (gdbarch) - && gdbarch_static_transform_name (gdbarch, sym->linkage_name ()) - != sym->linkage_name ()) - { - struct bound_minimal_symbol msym; - - msym = lookup_minimal_symbol (sym->linkage_name (), NULL, objfile); - if (msym.minsym != NULL) - { - const char *new_name = gdbarch_static_transform_name - (gdbarch, sym->linkage_name ()); - - sym->set_linkage_name (new_name); - SET_SYMBOL_VALUE_ADDRESS (sym, BMSYMBOL_VALUE_ADDRESS (msym)); - } - } SYMBOL_DOMAIN (sym) = VAR_DOMAIN; - add_symbol_to_list (sym, get_local_symbols ()); + add_symbol_to_list (sym, get_local_symbols ()); break; case 'v': @@ -1552,7 +1508,7 @@ /* If this is a forward reference, arrange to complain if it doesn't get patched up by the time we're done reading. */ - if (TYPE_CODE (type) == TYPE_CODE_UNDEF) + if (type->code () == TYPE_CODE_UNDEF) add_undefined_type (type, typenums); return type; @@ -1641,10 +1597,10 @@ memcpy (name, *pp, p - *pp); name[p - *pp] = '\0'; - std::string new_name = cp_canonicalize_string (name); - if (!new_name.empty ()) + gdb::unique_xmalloc_ptr<char> new_name = cp_canonicalize_string (name); + if (new_name != nullptr) type_name = obstack_strdup (&objfile->objfile_obstack, - new_name); + new_name.get ()); } if (type_name == NULL) { @@ -1674,7 +1630,7 @@ if (SYMBOL_CLASS (sym) == LOC_TYPEDEF && SYMBOL_DOMAIN (sym) == STRUCT_DOMAIN - && (TYPE_CODE (SYMBOL_TYPE (sym)) == code) + && (SYMBOL_TYPE (sym)->code () == code) && strcmp (sym->linkage_name (), type_name) == 0) { obstack_free (&objfile->objfile_obstack, type_name); @@ -1691,8 +1647,8 @@ fill in the rest of the fields when we get the full type. */ type = dbx_alloc_type (typenums, objfile); - TYPE_CODE (type) = code; - TYPE_NAME (type) = type_name; + type->set_code (code); + type->set_name (type_name); INIT_CPLUS_SPECIFIC (type); TYPE_STUB (type) = 1; @@ -1720,14 +1676,14 @@ /* Allocate and enter the typedef type first. This handles recursive types. */ type = dbx_alloc_type (typenums, objfile); - TYPE_CODE (type) = TYPE_CODE_TYPEDEF; + type->set_code (TYPE_CODE_TYPEDEF); { struct type *xtype = read_type (pp, objfile); if (type == xtype) { /* It's being defined as itself. That means it is "void". */ - TYPE_CODE (type) = TYPE_CODE_VOID; + type->set_code (TYPE_CODE_VOID); TYPE_LENGTH (type) = 1; } else if (type_size >= 0 || is_string) @@ -1756,7 +1712,7 @@ "complete_this_type" function, but never create unnecessary copies of a type otherwise. */ replace_type (type, xtype); - TYPE_NAME (type) = NULL; + type->set_name (NULL); } else { @@ -1839,13 +1795,13 @@ that's just an empty argument list. */ if (arg_types && ! arg_types->next - && TYPE_CODE (arg_types->type) == TYPE_CODE_VOID) + && arg_types->type->code () == TYPE_CODE_VOID) num_args = 0; - TYPE_FIELDS (func_type) - = (struct field *) TYPE_ALLOC (func_type, - num_args * sizeof (struct field)); - memset (TYPE_FIELDS (func_type), 0, num_args * sizeof (struct field)); + func_type->set_fields + ((struct field *) TYPE_ALLOC (func_type, + num_args * sizeof (struct field))); + memset (func_type->fields (), 0, num_args * sizeof (struct field)); { int i; struct type_list *t; @@ -1854,9 +1810,9 @@ when we read it, so the list is reversed. Build the fields array right-to-left. */ for (t = arg_types, i = num_args - 1; t; t = t->next, i--) - TYPE_FIELD_TYPE (func_type, i) = t->type; + func_type->field (i).set_type (t->type); } - TYPE_NFIELDS (func_type) = num_args; + func_type->set_num_fields (num_args); TYPE_PROTOTYPED (func_type) = 1; type = func_type; @@ -2026,7 +1982,7 @@ type = dbx_alloc_type (typenums, objfile); type = read_array_type (pp, type, objfile); if (is_string) - TYPE_CODE (type) = TYPE_CODE_STRING; + type->set_code (TYPE_CODE_STRING); if (is_vector) make_vector_type (type); break; @@ -2190,12 +2146,12 @@ break; case 25: /* Complex type consisting of two IEEE single precision values. */ - rettype = init_complex_type (objfile, "complex", + rettype = init_complex_type ("complex", rs6000_builtin_type (12, objfile)); break; case 26: /* Complex type consisting of two IEEE double precision values. */ - rettype = init_complex_type (objfile, "double complex", + rettype = init_complex_type ("double complex", rs6000_builtin_type (13, objfile)); break; case 27: @@ -2373,10 +2329,10 @@ } /* These are methods, not functions. */ - if (TYPE_CODE (new_sublist->fn_field.type) == TYPE_CODE_FUNC) - TYPE_CODE (new_sublist->fn_field.type) = TYPE_CODE_METHOD; + if (new_sublist->fn_field.type->code () == TYPE_CODE_FUNC) + new_sublist->fn_field.type->set_code (TYPE_CODE_METHOD); else - gdb_assert (TYPE_CODE (new_sublist->fn_field.type) + gdb_assert (new_sublist->fn_field.type->code () == TYPE_CODE_METHOD); /* If this is just a stub, then we don't have the real name here. */ @@ -2754,7 +2710,7 @@ switch (cpp_abbrev) { case 'f': /* $vf -- a virtual function table pointer */ - name = TYPE_NAME (context); + name = context->name (); if (name == NULL) { name = ""; @@ -2764,7 +2720,7 @@ break; case 'b': /* $vb -- a virtual bsomethingorother */ - name = TYPE_NAME (context); + name = context->name (); if (name == NULL) { complaint (_("C++ abbreviated type name " @@ -2793,7 +2749,7 @@ invalid_cpp_abbrev_complaint (*pp); return 0; } - fip->list->field.type = read_type (pp, objfile); + fip->list->field.set_type (read_type (pp, objfile)); if (**pp == ',') (*pp)++; /* Skip the comma. */ else @@ -2827,7 +2783,7 @@ const char *p, struct type *type, struct objfile *objfile) { - struct gdbarch *gdbarch = get_objfile_arch (objfile); + struct gdbarch *gdbarch = objfile->arch (); fip->list->field.name = obstack_strndup (&objfile->objfile_obstack, *pp, p - *pp); @@ -2845,7 +2801,7 @@ fip->list->visibility = VISIBILITY_PUBLIC; } - fip->list->field.type = read_type (pp, objfile); + fip->list->field.set_type (read_type (pp, objfile)); if (**pp == ':') { p = ++(*pp); @@ -2922,18 +2878,18 @@ Note that forward refs cannot be packed, and treat enums as if they had the width of ints. */ - struct type *field_type = check_typedef (FIELD_TYPE (fip->list->field)); + struct type *field_type = check_typedef (fip->list->field.type ()); - if (TYPE_CODE (field_type) != TYPE_CODE_INT - && TYPE_CODE (field_type) != TYPE_CODE_RANGE - && TYPE_CODE (field_type) != TYPE_CODE_BOOL - && TYPE_CODE (field_type) != TYPE_CODE_ENUM) + if (field_type->code () != TYPE_CODE_INT + && field_type->code () != TYPE_CODE_RANGE + && field_type->code () != TYPE_CODE_BOOL + && field_type->code () != TYPE_CODE_ENUM) { FIELD_BITSIZE (fip->list->field) = 0; } if ((FIELD_BITSIZE (fip->list->field) == TARGET_CHAR_BIT * TYPE_LENGTH (field_type) - || (TYPE_CODE (field_type) == TYPE_CODE_ENUM + || (field_type->code () == TYPE_CODE_ENUM && FIELD_BITSIZE (fip->list->field) == gdbarch_int_bit (gdbarch)) ) @@ -3166,8 +3122,8 @@ base class. Read it, and remember it's type name as this field's name. */ - newobj->field.type = read_type (pp, objfile); - newobj->field.name = TYPE_NAME (newobj->field.type); + newobj->field.set_type (read_type (pp, objfile)); + newobj->field.name = newobj->field.type ()->name (); /* Skip trailing ';' and bump count of number of fields seen. */ if (**pp == ';') @@ -3238,7 +3194,7 @@ set_type_vptr_basetype (type, t); if (type == t) /* Our own class provides vtbl ptr. */ { - for (i = TYPE_NFIELDS (t) - 1; + for (i = t->num_fields () - 1; i >= TYPE_N_BASECLASSES (t); --i) { @@ -3254,7 +3210,7 @@ /* Virtual function table field not found. */ complaint (_("virtual function table pointer " "not found when defining class `%s'"), - TYPE_NAME (type)); + type->name ()); return 0; } else @@ -3314,10 +3270,11 @@ non-public fields. Record the field count, allocate space for the array of fields, and create blank visibility bitfields if necessary. */ - TYPE_NFIELDS (type) = nfields; - TYPE_FIELDS (type) = (struct field *) - TYPE_ALLOC (type, sizeof (struct field) * nfields); - memset (TYPE_FIELDS (type), 0, sizeof (struct field) * nfields); + type->set_num_fields (nfields); + type->set_fields + ((struct field *) + TYPE_ALLOC (type, sizeof (struct field) * nfields)); + memset (type->fields (), 0, sizeof (struct field) * nfields); if (non_public_fields) { @@ -3343,7 +3300,7 @@ while (nfields-- > 0) { - TYPE_FIELD (type, nfields) = fip->list->field; + type->field (nfields) = fip->list->field; switch (fip->list->visibility) { case VISIBILITY_PRIVATE: @@ -3383,10 +3340,10 @@ const char *name = ""; const char *kind = ""; - if (TYPE_NAME (type)) + if (type->name ()) { - name = TYPE_NAME (type); - switch (TYPE_CODE (type)) + name = type->name (); + switch (type->code ()) { case TYPE_CODE_STRUCT: kind = "struct "; break; case TYPE_CODE_UNION: kind = "union "; break; @@ -3471,7 +3428,7 @@ Obviously, GDB can't fix this by itself, but it can at least avoid scribbling on existing structure type objects when new definitions appear. */ - if (! (TYPE_CODE (type) == TYPE_CODE_UNDEF + if (! (type->code () == TYPE_CODE_UNDEF || TYPE_STUB (type))) { complain_about_struct_wipeout (type); @@ -3481,7 +3438,7 @@ } INIT_CPLUS_SPECIFIC (type); - TYPE_CODE (type) = type_code; + type->set_code (type_code); TYPE_STUB (type) = 0; /* First comes the total size in bytes. */ @@ -3585,7 +3542,7 @@ read_enum_type (const char **pp, struct type *type, struct objfile *objfile) { - struct gdbarch *gdbarch = get_objfile_arch (objfile); + struct gdbarch *gdbarch = objfile->arch (); const char *p; char *name; long n; @@ -3636,10 +3593,10 @@ if (nbits != 0) return error_type (pp, objfile); - sym = allocate_symbol (objfile); + sym = new (&objfile->objfile_obstack) symbol; sym->set_linkage_name (name); - SYMBOL_SET_LANGUAGE (sym, get_current_subfile ()->language, - &objfile->objfile_obstack); + sym->set_language (get_current_subfile ()->language, + &objfile->objfile_obstack); SYMBOL_ACLASS_INDEX (sym) = LOC_CONST; SYMBOL_DOMAIN (sym) = VAR_DOMAIN; SYMBOL_VALUE (sym) = n; @@ -3656,14 +3613,15 @@ TYPE_LENGTH (type) = gdbarch_int_bit (gdbarch) / HOST_CHAR_BIT; set_length_in_type_chain (type); - TYPE_CODE (type) = TYPE_CODE_ENUM; + type->set_code (TYPE_CODE_ENUM); TYPE_STUB (type) = 0; if (unsigned_enum) TYPE_UNSIGNED (type) = 1; - TYPE_NFIELDS (type) = nsyms; - TYPE_FIELDS (type) = (struct field *) - TYPE_ALLOC (type, sizeof (struct field) * nsyms); - memset (TYPE_FIELDS (type), 0, sizeof (struct field) * nsyms); + type->set_num_fields (nsyms); + type->set_fields + ((struct field *) + TYPE_ALLOC (type, sizeof (struct field) * nsyms)); + memset (type->fields (), 0, sizeof (struct field) * nsyms); /* Find the symbols for the values and put them into the type. The symbols can be found in the symlist that we put them on @@ -3684,7 +3642,7 @@ SYMBOL_TYPE (xsym) = type; TYPE_FIELD_NAME (type, n) = xsym->linkage_name (); - SET_FIELD_ENUMVAL (TYPE_FIELD (type, n), SYMBOL_VALUE (xsym)); + SET_FIELD_ENUMVAL (type->field (n), SYMBOL_VALUE (xsym)); TYPE_FIELD_BITSIZE (type, n) = 0; } if (syms == osyms) @@ -3809,7 +3767,7 @@ || details == NF_COMPLEX32) { rettype = dbx_init_float_type (objfile, nbits / 2); - return init_complex_type (objfile, NULL, rettype); + return init_complex_type (NULL, rettype); } return dbx_init_float_type (objfile, nbits); @@ -4001,7 +3959,7 @@ read_range_type (const char **pp, int typenums[2], int type_size, struct objfile *objfile) { - struct gdbarch *gdbarch = get_objfile_arch (objfile); + struct gdbarch *gdbarch = objfile->arch (); const char *orig_pp = *pp; int rangenums[2]; long n2, n3; @@ -4103,7 +4061,7 @@ = dbx_init_float_type (objfile, n2 * TARGET_CHAR_BIT); if (self_subrange) - return init_complex_type (objfile, NULL, float_type); + return init_complex_type (NULL, float_type); else return float_type; } @@ -4235,7 +4193,7 @@ complaint (_("Invalid (empty) method arguments")); *varargsp = 0; } - else if (TYPE_CODE (types[n - 1]) != TYPE_CODE_VOID) + else if (types[n - 1]->code () != TYPE_CODE_VOID) *varargsp = 1; else { @@ -4245,7 +4203,7 @@ rval = XCNEWVEC (struct field, n); for (i = 0; i < n; i++) - rval[i].type = types[i]; + rval[i].set_type (types[i]); *nargsp = n; return rval; } @@ -4303,7 +4261,7 @@ return; } - sym = allocate_symbol (objfile); + sym = new (&objfile->objfile_obstack) symbol; /* Note: common_block_name already saved on objfile_obstack. */ sym->set_linkage_name (common_block_name); SYMBOL_ACLASS_INDEX (sym) = LOC_BLOCK; @@ -4414,7 +4372,7 @@ static void add_undefined_type (struct type *type, int typenums[2]) { - if (TYPE_NAME (type) == NULL) + if (type->name () == NULL) add_undefined_type_noname (type, typenums); else add_undefined_type_1 (type); @@ -4433,7 +4391,7 @@ struct type **type; type = dbx_lookup_type (nat.typenums, objfile); - if (nat.type != *type && TYPE_CODE (*type) != TYPE_CODE_UNDEF) + if (nat.type != *type && (*type)->code () != TYPE_CODE_UNDEF) { /* The instance flags of the undefined type are still unset, and needs to be copied over from the reference type. @@ -4483,7 +4441,7 @@ for (type = undef_types; type < undef_types + undef_types_length; type++) { - switch (TYPE_CODE (*type)) + switch ((*type)->code ()) { case TYPE_CODE_STRUCT: @@ -4499,7 +4457,7 @@ struct pending *ppt; int i; /* Name of the type, without "struct" or "union". */ - const char *type_name = TYPE_NAME (*type); + const char *type_name = (*type)->name (); if (type_name == NULL) { @@ -4514,8 +4472,8 @@ if (SYMBOL_CLASS (sym) == LOC_TYPEDEF && SYMBOL_DOMAIN (sym) == STRUCT_DOMAIN - && (TYPE_CODE (SYMBOL_TYPE (sym)) == - TYPE_CODE (*type)) + && (SYMBOL_TYPE (sym)->code () == + (*type)->code ()) && (TYPE_INSTANCE_FLAGS (*type) == TYPE_INSTANCE_FLAGS (SYMBOL_TYPE (sym))) && strcmp (sym->linkage_name (), type_name) == 0) @@ -4530,7 +4488,7 @@ { complaint (_("forward-referenced types left unresolved, " "type code %d."), - TYPE_CODE (*type)); + (*type)->code ()); } break; } @@ -4783,8 +4741,9 @@ /* Initializer for this module. */ +void _initialize_stabsread (); void -_initialize_stabsread (void) +_initialize_stabsread () { undef_types_allocated = 20; undef_types_length = 0; diff -Nru gdb-9.1/gdb/stabsread.h gdb-10.2/gdb/stabsread.h --- gdb-9.1/gdb/stabsread.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/stabsread.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Include file for stabs debugging format support functions. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -20,6 +20,7 @@ #define STABSREAD_H struct objfile; +struct legacy_psymtab; enum language; /* Definitions, prototypes, etc for stabs debugging format support @@ -170,15 +171,15 @@ /* Functions exported by dbxread.c. These are not in stabsread.c because they are only used by some stabs readers. */ -extern struct partial_symtab *dbx_end_psymtab - (struct objfile *objfile, struct partial_symtab *pst, +extern legacy_psymtab *dbx_end_psymtab + (struct objfile *objfile, legacy_psymtab *pst, const char **include_list, int num_includes, int capping_symbol_offset, CORE_ADDR capping_text, - struct partial_symtab **dependency_list, int number_dependencies, + legacy_psymtab **dependency_list, int number_dependencies, int textlow_not_set); extern void process_one_symbol (int, int, CORE_ADDR, const char *, - const struct section_offsets *, + const section_offsets &, struct objfile *, enum language); extern void elfstab_build_psymtabs (struct objfile *objfile, diff -Nru gdb-9.1/gdb/stack.c gdb-10.2/gdb/stack.c --- gdb-9.1/gdb/stack.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/stack.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Print and select stack frames for GDB, the GNU debugger. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -330,7 +330,7 @@ return false; } - return get_frame_pc (frame) != sal.pc; + return get_frame_pc (frame) != sal.pc || !sal.is_stmt; } /* See frame.h. */ @@ -428,7 +428,7 @@ annotate_arg_emitter arg_emitter; ui_out_emit_tuple tuple_emitter (uiout, NULL); fprintf_symbol_filtered (&stb, arg->sym->print_name (), - SYMBOL_LANGUAGE (arg->sym), DMGL_PARAMS | DMGL_ANSI); + arg->sym->language (), DMGL_PARAMS | DMGL_ANSI); if (arg->entry_kind == print_entry_values_compact) { /* It is OK to provide invalid MI-like stream as with @@ -436,7 +436,7 @@ stb.puts ("="); fprintf_symbol_filtered (&stb, arg->sym->print_name (), - SYMBOL_LANGUAGE (arg->sym), + arg->sym->language (), DMGL_PARAMS | DMGL_ANSI); } if (arg->entry_kind == print_entry_values_only @@ -474,7 +474,7 @@ /* Use the appropriate language to display our symbol, unless the user forced the language to a specific language. */ if (language_mode == language_mode_auto) - language = language_def (SYMBOL_LANGUAGE (arg->sym)); + language = language_def (arg->sym->language ()); else language = current_language; @@ -486,7 +486,7 @@ vp_opts.summary = fp_opts.print_frame_arguments == print_frame_arguments_scalars; - common_val_print (arg->val, &stb, 2, &vp_opts, language); + common_val_print_checked (arg->val, &stb, 2, &vp_opts, language); } catch (const gdb_exception_error &except) { @@ -744,6 +744,12 @@ = (print_names && fp_opts.print_frame_arguments != print_frame_arguments_none); + /* Temporarily change the selected frame to the given FRAME. + This allows routines that rely on the selected frame instead + of being given a frame as parameter to use the correct frame. */ + scoped_restore_selected_frame restore_selected_frame; + select_frame (frame); + if (func) { const struct block *b = SYMBOL_BLOCK_VALUE (func); @@ -1126,10 +1132,25 @@ { int mid_statement = ((print_what == SRC_LINE) && frame_show_address (frame, sal)); - annotate_source_line (sal.symtab, sal.line, mid_statement, - get_frame_pc (frame)); - - if (deprecated_print_frame_info_listing_hook) + if (annotation_level > 0 + && annotate_source_line (sal.symtab, sal.line, mid_statement, + get_frame_pc (frame))) + { + /* The call to ANNOTATE_SOURCE_LINE already printed the + annotation for this source line, so we avoid the two cases + below and do not print the actual source line. The + documentation for annotations makes it clear that the source + line annotation is printed __instead__ of printing the source + line, not as well as. + + However, if we fail to print the source line, which usually + means either the source file is missing, or the requested + line is out of range of the file, then we don't print the + source annotation, and will pass through the "normal" print + source line code below, the expectation is that this code + will print an appropriate error. */ + } + else if (deprecated_print_frame_info_listing_hook) deprecated_print_frame_info_listing_hook (sal.symtab, sal.line, sal.line + 1, 0); else @@ -1261,7 +1282,7 @@ { const char *print_name = func->print_name (); - *funlang = SYMBOL_LANGUAGE (func); + *funlang = func->language (); if (funcp) *funcp = func; if (*funlang == language_cplus) @@ -1291,7 +1312,7 @@ if (msymbol.minsym != NULL) { funname.reset (xstrdup (msymbol.minsym->print_name ())); - *funlang = MSYMBOL_LANGUAGE (msymbol.minsym); + *funlang = msymbol.minsym->language (); } } @@ -1495,7 +1516,7 @@ if (func) { funname = func->print_name (); - funlang = SYMBOL_LANGUAGE (func); + funlang = func->language (); if (funlang == language_cplus) { /* It seems appropriate to use print_name() here, @@ -1517,7 +1538,7 @@ if (msymbol.minsym != NULL) { funname = msymbol.minsym->print_name (); - funlang = MSYMBOL_LANGUAGE (msymbol.minsym); + funlang = msymbol.minsym->language (); } } calling_frame_info = get_prev_frame (fi); @@ -2237,6 +2258,7 @@ { switch (SYMBOL_CLASS (sym)) { + case LOC_CONST: case LOC_LOCAL: case LOC_REGISTER: case LOC_STATIC: @@ -2256,56 +2278,6 @@ } } - -/* Same, but print labels. */ - -#if 0 -/* Commented out, as the code using this function has also been - commented out. FIXME:brobecker/2009-01-13: Find out why the code - was commented out in the first place. The discussion introducing - this change (2007-12-04: Support lexical blocks and function bodies - that occupy non-contiguous address ranges) did not explain why - this change was made. */ -static int -print_block_frame_labels (struct gdbarch *gdbarch, struct block *b, - int *have_default, struct ui_file *stream) -{ - struct block_iterator iter; - struct symbol *sym; - int values_printed = 0; - - ALL_BLOCK_SYMBOLS (b, iter, sym) - { - if (strcmp (sym->linkage_name (), "default") == 0) - { - if (*have_default) - continue; - *have_default = 1; - } - if (SYMBOL_CLASS (sym) == LOC_LABEL) - { - struct symtab_and_line sal; - struct value_print_options opts; - - sal = find_pc_line (SYMBOL_VALUE_ADDRESS (sym), 0); - values_printed = 1; - fputs_filtered (sym->print_name (), stream); - get_user_print_options (&opts); - if (opts.addressprint) - { - fprintf_filtered (stream, " "); - fputs_filtered (paddress (gdbarch, SYMBOL_VALUE_ADDRESS (sym)), - stream); - } - fprintf_filtered (stream, " in file %s, line %d\n", - sal.symtab->filename, sal.line); - } - } - - return values_printed; -} -#endif - /* Iterate over all the local variables in block B, including all its superblocks, stopping when the top-level block is reached. */ @@ -2818,7 +2790,7 @@ function = read_var_value (thisfun, NULL, thisframe); rv_conv = RETURN_VALUE_REGISTER_CONVENTION; - if (TYPE_CODE (return_type) == TYPE_CODE_VOID) + if (return_type->code () == TYPE_CODE_VOID) /* If the return-type is "void", don't try to find the return-value's location. However, do still evaluate the return expression so that, even when the expression result @@ -3339,8 +3311,9 @@ /* Commands with a prefix of `info frame'. */ static struct cmd_list_element *info_frame_cmd_list = NULL; +void _initialize_stack (); void -_initialize_stack (void) +_initialize_stack () { struct cmd_list_element *cmd; @@ -3372,7 +3345,6 @@ With no argument, print the selected stack frame. (See also \"info frame\").\n\ A single numerical argument specifies the frame to select."), &frame_cmd_list, "frame ", 1, &cmdlist); - add_com_alias ("f", "frame", class_stack, 1); #define FRAME_APPLY_OPTION_HELP "\ @@ -3432,14 +3404,6 @@ See \"help frame apply all\" for available options.")); set_cmd_completer_handle_brkchars (cmd, frame_apply_all_cmd_completer); - add_prefix_cmd ("frame", class_stack, - &frame_cmd.base_command, _("\ -Select and print a stack frame.\n\ -With no argument, print the selected stack frame. (See also \"info frame\").\n\ -A single numerical argument specifies the frame to select."), - &frame_cmd_list, "frame ", 1, &cmdlist); - add_com_alias ("f", "frame", class_stack, 1); - add_cmd ("address", class_stack, &frame_cmd.address, _("\ Select and print a stack frame by stack address.\n\ @@ -3542,7 +3506,7 @@ add_com_alias ("bt", "backtrace", class_stack, 0); - add_com_alias ("where", "backtrace", class_alias, 0); + add_com_alias ("where", "backtrace", class_stack, 0); add_info ("stack", backtrace_command, _("Backtrace of the stack, or innermost COUNT frames.")); add_info_alias ("s", "stack", 1); diff -Nru gdb-9.1/gdb/stack.h gdb-10.2/gdb/stack.h --- gdb-9.1/gdb/stack.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/stack.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Stack manipulation commands, for GDB the GNU Debugger. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/stap-probe.c gdb-10.2/gdb/stap-probe.c --- gdb-9.1/gdb/stap-probe.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/stap-probe.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* SystemTap probe support for GDB. - Copyright (C) 2012-2020 Free Software Foundation, Inc. + Copyright (C) 2012-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -1290,8 +1290,7 @@ static CORE_ADDR relocate_address (CORE_ADDR address, struct objfile *objfile) { - return address + ANOFFSET (objfile->section_offsets, - SECT_OFF_DATA (objfile)); + return address + objfile->data_section_offset (); } /* Implementation of the get_relocated_address method. */ @@ -1431,9 +1430,6 @@ struct type *type = builtin_type (gdbarch)->builtin_unsigned_short; ULONGEST value; - if (address == 0) - return; - /* Swallow errors. */ if (target_read_memory (address, bytes, TYPE_LENGTH (type)) != 0) { @@ -1467,6 +1463,8 @@ void stap_probe::set_semaphore (struct objfile *objfile, struct gdbarch *gdbarch) { + if (m_sem_addr == 0) + return; stap_modify_semaphore (relocate_address (m_sem_addr, objfile), 1, gdbarch); } @@ -1475,6 +1473,8 @@ void stap_probe::clear_semaphore (struct objfile *objfile, struct gdbarch *gdbarch) { + if (m_sem_addr == 0) + return; stap_modify_semaphore (relocate_address (m_sem_addr, objfile), 0, gdbarch); } @@ -1517,7 +1517,7 @@ { bfd *abfd = objfile->obfd; int size = bfd_get_arch_size (abfd) / 8; - struct gdbarch *gdbarch = get_objfile_arch (objfile); + struct gdbarch *gdbarch = objfile->arch (); struct type *ptr_type = builtin_type (gdbarch)->builtin_data_ptr; /* Provider and the name of the probe. */ @@ -1606,7 +1606,7 @@ { complaint (_("could not obtain base address for " "SystemTap section on objfile `%s'."), - obfd->filename); + bfd_get_filename (obfd)); return 0; } @@ -1709,8 +1709,9 @@ info_probes_for_spops (arg, from_tty, &stap_static_probe_ops); } +void _initialize_stap_probe (); void -_initialize_stap_probe (void) +_initialize_stap_probe () { all_static_probe_ops.push_back (&stap_static_probe_ops); diff -Nru gdb-9.1/gdb/stap-probe.h gdb-10.2/gdb/stap-probe.h --- gdb-9.1/gdb/stap-probe.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/stap-probe.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* SystemTap probe support for GDB. - Copyright (C) 2012-2020 Free Software Foundation, Inc. + Copyright (C) 2012-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/std-operator.def gdb-10.2/gdb/std-operator.def --- gdb-9.1/gdb/std-operator.def 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/std-operator.def 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Standard language operator definitions for GDB, the GNU debugger. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/std-regs.c gdb-10.2/gdb/std-regs.c --- gdb-9.1/gdb/std-regs.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/std-regs.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Builtin frame register, for GDB, the GNU debugger. - Copyright (C) 2002-2020 Free Software Foundation, Inc. + Copyright (C) 2002-2021 Free Software Foundation, Inc. Contributed by Red Hat. @@ -91,8 +91,9 @@ error (_("Standard register ``$ps'' is not available for this target")); } +void _initialize_frame_reg (); void -_initialize_frame_reg (void) +_initialize_frame_reg () { /* Frame based $fp, $pc, $sp and $ps. These only come into play when the target does not define its own version of these diff -Nru gdb-9.1/gdb/stubs/buildvms.com gdb-10.2/gdb/stubs/buildvms.com --- gdb-9.1/gdb/stubs/buildvms.com 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/stubs/buildvms.com 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ $! Command to build the gdb stub -$! Copyright (C) 2012-2020 Free Software Foundation, Inc. +$! Copyright (C) 2012-2021 Free Software Foundation, Inc. $! $! This file is part of GDB. $! diff -Nru gdb-9.1/gdb/stubs/ChangeLog gdb-10.2/gdb/stubs/ChangeLog --- gdb-9.1/gdb/stubs/ChangeLog 2019-11-19 01:10:41.000000000 +0000 +++ gdb-10.2/gdb/stubs/ChangeLog 2020-09-13 02:33:41.000000000 +0000 @@ -1,3 +1,7 @@ +2020-04-28 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + * ia64vms-stub.c: Fix typo in comment (thead -> thread). + 2019-10-26 Tom de Vries <tdevries@suse.de> * ia64vms-stub.c: Fix typos in comments. diff -Nru gdb-9.1/gdb/stubs/ia64vms-stub.c gdb-10.2/gdb/stubs/ia64vms-stub.c --- gdb-9.1/gdb/stubs/ia64vms-stub.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/stubs/ia64vms-stub.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* GDB stub for Itanium OpenVMS - Copyright (C) 2012-2020 Free Software Foundation, Inc. + Copyright (C) 2012-2021 Free Software Foundation, Inc. Contributed by Tristan Gingold, AdaCore. @@ -776,7 +776,7 @@ return blk.dbgext$l_stop_value; } -/* Get next thead (after THR). Start with 0. */ +/* Get next thread (after THR). Start with 0. */ static unsigned int thread_next (unsigned int thr) diff -Nru gdb-9.1/gdb/stub-termcap.c gdb-10.2/gdb/stub-termcap.c --- gdb-9.1/gdb/stub-termcap.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/stub-termcap.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* A very minimal do-nothing termcap emulation stub. - Copyright (C) 2005-2020 Free Software Foundation, Inc. + Copyright (C) 2005-2021 Free Software Foundation, Inc. Contributed by CodeSourcery, LLC. diff -Nru gdb-9.1/gdb/symfile-add-flags.h gdb-10.2/gdb/symfile-add-flags.h --- gdb-9.1/gdb/symfile-add-flags.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/symfile-add-flags.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Definition of symfile add flags. - Copyright (C) 1990-2020 Free Software Foundation, Inc. + Copyright (C) 1990-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -44,6 +44,12 @@ /* The new objfile should be marked OBJF_NOT_FILENAME. */ SYMFILE_NOT_FILENAME = 1 << 5, + + /* If SYMFILE_VERBOSE (interpreted as from_tty) and SYMFILE_ALWAYS_CONFIRM, + always ask user to confirm loading the symbol file. + Without this flag, symbol_file_add_with_addrs asks a confirmation only + for a main symbol file replacing a file having symbols. */ + SYMFILE_ALWAYS_CONFIRM = 1 << 6, }; DEF_ENUM_FLAGS_TYPE (enum symfile_add_flag, symfile_add_flags); diff -Nru gdb-9.1/gdb/symfile.c gdb-10.2/gdb/symfile.c --- gdb-9.1/gdb/symfile.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/symfile.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Generic symbol file reading for the GNU debugger, GDB. - Copyright (C) 1990-2020 Free Software Foundation, Inc. + Copyright (C) 1990-2021 Free Software Foundation, Inc. Contributed by Cygnus Support, using pieces from other GDB modules. @@ -269,7 +269,7 @@ { int sectindex = sap[i].sectindex; - sap[i].addr += objfile->section_offsets->offsets[sectindex]; + sap[i].addr += objfile->section_offsets[sectindex]; } return sap; } @@ -315,14 +315,14 @@ later, e.g. by the remote qOffsets packet, and then this will be wrong! That's why we try segments first. */ - for (i = 0; i < objfile->num_sections; i++) + for (i = 0; i < objfile->section_offsets.size (); i++) { - if (ANOFFSET (objfile->section_offsets, i) != 0) + if (objfile->section_offsets[i] != 0) { break; } } - if (i == objfile->num_sections) + if (i == objfile->section_offsets.size ()) { if (objfile->sect_index_text == -1) objfile->sect_index_text = 0; @@ -339,7 +339,7 @@ struct place_section_arg { - struct section_offsets *offsets; + section_offsets *offsets; CORE_ADDR lowest; }; @@ -350,7 +350,8 @@ place_section (bfd *abfd, asection *sect, void *obj) { struct place_section_arg *arg = (struct place_section_arg *) obj; - CORE_ADDR *offsets = arg->offsets->offsets, start_addr; + section_offsets &offsets = *arg->offsets; + CORE_ADDR start_addr; int done; ULONGEST align = ((ULONGEST) 1) << bfd_section_alignment (sect); @@ -408,17 +409,15 @@ } /* Store section_addr_info as prepared (made relative and with SECTINDEX - filled-in) by addr_info_make_relative into SECTION_OFFSETS of NUM_SECTIONS - entries. */ + filled-in) by addr_info_make_relative into SECTION_OFFSETS. */ void -relative_addr_info_to_section_offsets (struct section_offsets *section_offsets, - int num_sections, +relative_addr_info_to_section_offsets (section_offsets §ion_offsets, const section_addr_info &addrs) { int i; - memset (section_offsets, 0, SIZEOF_N_SECTION_OFFSETS (num_sections)); + section_offsets.assign (section_offsets.size (), 0); /* Now calculate offsets for section that were specified by the caller. */ for (i = 0; i < addrs.size (); i++) @@ -432,7 +431,7 @@ /* Record all sections in offsets. */ /* The section_offsets in the objfile are here filled in using the BFD index. */ - section_offsets->offsets[osp->sectindex] = osp->addr; + section_offsets[osp->sectindex] = osp->addr; } } @@ -636,12 +635,8 @@ default_symfile_offsets (struct objfile *objfile, const section_addr_info &addrs) { - objfile->num_sections = gdb_bfd_count_sections (objfile->obfd); - objfile->section_offsets = (struct section_offsets *) - obstack_alloc (&objfile->objfile_obstack, - SIZEOF_N_SECTION_OFFSETS (objfile->num_sections)); - relative_addr_info_to_section_offsets (objfile->section_offsets, - objfile->num_sections, addrs); + objfile->section_offsets.resize (gdb_bfd_count_sections (objfile->obfd)); + relative_addr_info_to_section_offsets (objfile->section_offsets, addrs); /* For relocatable files, all loadable sections will start at zero. The zero is meaningless, so try to pick arbitrary addresses such @@ -662,11 +657,11 @@ if (cur_sec == NULL) { - CORE_ADDR *offsets = objfile->section_offsets->offsets; + section_offsets &offsets = objfile->section_offsets; /* Pick non-overlapping offsets for sections the user did not place explicitly. */ - arg.offsets = objfile->section_offsets; + arg.offsets = &objfile->section_offsets; arg.lowest = 0; bfd_map_over_sections (objfile->obfd, place_section, &arg); @@ -722,12 +717,11 @@ It assumes that object files do not have segments, and fully linked files have a single segment. */ -struct symfile_segment_data * +symfile_segment_data_up default_symfile_segments (bfd *abfd) { int num_sections, i; asection *sect; - struct symfile_segment_data *data; CORE_ADDR low, high; /* Relocatable files contain enough information to position each @@ -750,13 +744,12 @@ low = bfd_section_vma (sect); high = low + bfd_section_size (sect); - data = XCNEW (struct symfile_segment_data); - data->num_segments = 1; - data->segment_bases = XCNEW (CORE_ADDR); - data->segment_sizes = XCNEW (CORE_ADDR); + symfile_segment_data_up data (new symfile_segment_data); num_sections = bfd_count_sections (abfd); - data->segment_info = XCNEWVEC (int, num_sections); + + /* All elements are initialized to 0 (map to no segment). */ + data->segment_info.resize (num_sections); for (i = 0, sect = abfd->sections; sect != NULL; i++, sect = sect->next) { @@ -774,8 +767,7 @@ data->segment_info[i] = 1; } - data->segment_bases[0] = low; - data->segment_sizes[0] = high - low; + data->segments.emplace_back (low, high - low); return data; } @@ -857,14 +849,14 @@ /* Make certain that the address points at real code, and not a function descriptor. */ entry_point - = gdbarch_convert_from_func_ptr_addr (get_objfile_arch (objfile), + = gdbarch_convert_from_func_ptr_addr (objfile->arch (), entry_point, current_top_target ()); /* Remove any ISA markers, so that this matches entries in the symbol table. */ ei->entry_point - = gdbarch_addr_bits_remove (get_objfile_arch (objfile), entry_point); + = gdbarch_addr_bits_remove (objfile->arch (), entry_point); found = 0; ALL_OBJFILE_OSECTIONS (objfile, osect) @@ -902,7 +894,7 @@ (as gleaned by GDB's shared library code). We convert each address into an offset from the section VMA's as it appears in the object file, and then call the file's sym_offsets function to convert this - into a format-specific offset table --- a `struct section_offsets'. + into a format-specific offset table --- a `section_offsets'. The sectindex field is used to control the ordering of sections with the same name. Upon return, it is updated to contain the corresponding BFD section index, or -1 if the section was not found. @@ -926,13 +918,8 @@ /* No symbols to load, but we still need to make sure that the section_offsets table is allocated. */ int num_sections = gdb_bfd_count_sections (objfile->obfd); - size_t size = SIZEOF_N_SECTION_OFFSETS (num_sections); - objfile->num_sections = num_sections; - objfile->section_offsets - = (struct section_offsets *) obstack_alloc (&objfile->objfile_obstack, - size); - memset (objfile->section_offsets, 0, size); + objfile->section_offsets.assign (num_sections, 0); return; } @@ -940,7 +927,7 @@ if an error occurs during symbol reading. */ gdb::optional<clear_symtab_users_cleanup> defer_clear_users; - std::unique_ptr<struct objfile> objfile_holder (objfile); + objfile_up objfile_holder (objfile); /* If ADDRS is NULL, put together a dummy address list. We now establish the convention that an addr of zero means @@ -958,7 +945,7 @@ if (symfile_objfile != NULL) { - delete symfile_objfile; + symfile_objfile->unlink (); gdb_assert (symfile_objfile == NULL); } @@ -1064,6 +1051,7 @@ struct objfile *objfile; const int from_tty = add_flags & SYMFILE_VERBOSE; const int mainline = add_flags & SYMFILE_MAINLINE; + const int always_confirm = add_flags & SYMFILE_ALWAYS_CONFIRM; const int should_print = (print_symbol_loading_p (from_tty, mainline, 1) && (readnow_symbol_files || (add_flags & SYMFILE_NO_READ) == 0)); @@ -1082,21 +1070,19 @@ if ((add_flags & SYMFILE_NOT_FILENAME) != 0) flags |= OBJF_NOT_FILENAME; - /* Give user a chance to burp if we'd be + /* Give user a chance to burp if ALWAYS_CONFIRM or we'd be interactively wiping out any existing symbols. */ - if ((have_full_symbols () || have_partial_symbols ()) - && mainline - && from_tty + if (from_tty + && (always_confirm + || ((have_full_symbols () || have_partial_symbols ()) + && mainline)) && !query (_("Load new symbol table from \"%s\"? "), name)) error (_("Not confirmed.")); if (mainline) flags |= OBJF_MAINLINE; - objfile = new struct objfile (abfd, name, flags); - - if (parent) - add_separate_debug_objfile (objfile, parent); + objfile = objfile::make (abfd, name, flags, parent); /* We either created a new mapped symbol table, mapped an existing symbol table file which has not had initial symbol reading @@ -1176,7 +1162,7 @@ symbol_file_add_with_addrs (bfd, name, symfile_flags, &sap, objfile->flags & (OBJF_REORDERED | OBJF_SHARED | OBJF_READNOW - | OBJF_USERLOADED), + | OBJF_USERLOADED | OBJF_MAINLINE), objfile); } @@ -1254,7 +1240,9 @@ objfiles get stale by free_all_objfiles. */ no_shared_libraries (NULL, from_tty); - free_all_objfiles (); + current_program_space->free_all_objfiles (); + + clear_symtab_users (0); gdb_assert (symfile_objfile == NULL); if (from_tty) @@ -1289,7 +1277,7 @@ gdb_flush (gdb_stdout); } - gdb_bfd_ref_ptr abfd (gdb_bfd_open (name.c_str (), gnutarget, -1)); + gdb_bfd_ref_ptr abfd (gdb_bfd_open (name.c_str (), gnutarget)); if (abfd == NULL) { @@ -1678,35 +1666,31 @@ } } -/* Set the initial language. - - FIXME: A better solution would be to record the language in the - psymtab when reading partial symbols, and then use it (if known) to - set the language. This would be a win for formats that encode the - language in an easily discoverable place, such as DWARF. For - stabs, we can jump through hoops looking for specially named - symbols or try to intuit the language from the specific type of - stabs we find, but we can't do that until later when we read in - full symbols. */ +/* Set the initial language. */ void set_initial_language (void) { + if (language_mode == language_mode_manual) + return; enum language lang = main_language (); + /* Make C the default language. */ + enum language default_lang = language_c; if (lang == language_unknown) { const char *name = main_name (); - struct symbol *sym = lookup_symbol (name, NULL, VAR_DOMAIN, NULL).symbol; + struct symbol *sym + = lookup_symbol_in_language (name, NULL, VAR_DOMAIN, default_lang, + NULL).symbol; if (sym != NULL) - lang = SYMBOL_LANGUAGE (sym); + lang = sym->language (); } if (lang == language_unknown) { - /* Make C the default language */ - lang = language_c; + lang = default_lang; } set_language (lang); @@ -2057,7 +2041,7 @@ } /* Open the file for loading. */ - gdb_bfd_ref_ptr loadfile_bfd (gdb_bfd_open (filename.get (), gnutarget, -1)); + gdb_bfd_ref_ptr loadfile_bfd (gdb_bfd_open (filename.get (), gnutarget)); if (loadfile_bfd == NULL) perror_with_name (filename.get ()); @@ -2167,8 +2151,7 @@ CORE_ADDR offset) { /* Add OFFSET to all sections by default. */ - std::vector<struct section_offsets> offsets (objf->num_sections, - { { offset } }); + section_offsets offsets (objf->section_offsets.size (), offset); /* Create sorted lists of all sections in ADDRS as well as all sections in OBJF. */ @@ -2206,11 +2189,11 @@ } if (cmp == 0) - offsets[objf_sect->sectindex].offsets[0] = 0; + offsets[objf_sect->sectindex] = 0; } /* Apply the new section offsets. */ - objfile_relocate (objf, offsets.data ()); + objfile_relocate (objf, offsets); } /* This function allows the addition of incrementally linked object files. @@ -2441,7 +2424,7 @@ objfile_name (objf))) error (_("Not confirmed.")); - delete objf; + objf->unlink (); clear_symtab_users (0); } @@ -2469,7 +2452,7 @@ a `shared library' on AIX is also an archive), then you should stat on the archive name, not member name. */ if (objfile->obfd->my_archive) - res = stat (objfile->obfd->my_archive->filename, &new_statbuf); + res = stat (bfd_get_filename (objfile->obfd->my_archive), &new_statbuf); else res = stat (objfile_name (objfile), &new_statbuf); if (res != 0) @@ -2482,9 +2465,6 @@ new_modtime = new_statbuf.st_mtime; if (new_modtime != objfile->mtime) { - struct section_offsets *offsets; - int num_offsets; - printf_filtered (_("`%s' has changed; re-reading symbols.\n"), objfile_name (objfile)); @@ -2498,7 +2478,7 @@ /* If we get an error, blow away this objfile (not sure if that is the correct response for things like shared libraries). */ - std::unique_ptr<struct objfile> objfile_holder (objfile); + objfile_up objfile_holder (objfile); /* We need to do this whenever any symbols go away. */ clear_symtab_users_cleanup defer_clear_users (0); @@ -2546,7 +2526,7 @@ obfd_filename = bfd_get_filename (objfile->obfd); /* Open the new BFD before freeing the old one, so that the filename remains live. */ - gdb_bfd_ref_ptr temp (gdb_bfd_open (obfd_filename, gnutarget, -1)); + gdb_bfd_ref_ptr temp (gdb_bfd_open (obfd_filename, gnutarget)); objfile->obfd = temp.release (); if (objfile->obfd == NULL) error (_("Can't open %s to read symbols."), obfd_filename); @@ -2559,20 +2539,17 @@ error (_("Can't read symbols from %s: %s."), objfile_name (objfile), bfd_errmsg (bfd_get_error ())); - /* Save the offsets, we will nuke them with the rest of the - objfile_obstack. */ - num_offsets = objfile->num_sections; - offsets = ((struct section_offsets *) - alloca (SIZEOF_N_SECTION_OFFSETS (num_offsets))); - memcpy (offsets, objfile->section_offsets, - SIZEOF_N_SECTION_OFFSETS (num_offsets)); - objfile->reset_psymtabs (); /* NB: after this call to obstack_free, objfiles_changed will need to be called (see discussion below). */ obstack_free (&objfile->objfile_obstack, 0); objfile->sections = NULL; + objfile->section_offsets.clear (); + objfile->sect_index_bss = -1; + objfile->sect_index_data = -1; + objfile->sect_index_rodata = -1; + objfile->sect_index_text = -1; objfile->compunit_symtabs = NULL; objfile->template_symbols = NULL; objfile->static_links.reset (nullptr); @@ -2598,15 +2575,6 @@ build_objfile_section_table (objfile); - /* We use the same section offsets as from last time. I'm not - sure whether that is always correct for shared libraries. */ - objfile->section_offsets = (struct section_offsets *) - obstack_alloc (&objfile->objfile_obstack, - SIZEOF_N_SECTION_OFFSETS (num_offsets)); - memcpy (objfile->section_offsets, offsets, - SIZEOF_N_SECTION_OFFSETS (num_offsets)); - objfile->num_sections = num_offsets; - /* What the hell is sym_new_init for, anyway? The concept of distinguishing between the main file and additional files in this way seems rather dubious. */ @@ -2636,6 +2604,9 @@ objfiles_changed (); + /* Recompute section offsets and section indices. */ + objfile->sf->sym_offsets (objfile, {}); + read_symbols (objfile, 0); if (!objfile_has_symbols (objfile)) @@ -2810,9 +2781,7 @@ struct symtab *symtab = OBSTACK_ZALLOC (&objfile->objfile_obstack, struct symtab); - symtab->filename - = ((const char *) objfile->per_bfd->filename_cache.insert - (filename, strlen (filename) + 1)); + symtab->filename = objfile->intern (filename); symtab->fullname = NULL; symtab->language = deduce_language_from_filename (filename); @@ -3036,7 +3005,7 @@ case ovly_auto: /* overlay debugging automatic */ /* Unles there is a gdbarch_overlay_update function, there's really nothing useful to do here (can't really go auto). */ - gdbarch = get_objfile_arch (osect->objfile); + gdbarch = osect->objfile->arch (); if (gdbarch_overlay_update_p (gdbarch)) { if (overlay_cache_invalid) @@ -3235,7 +3204,7 @@ ALL_OBJFILE_OSECTIONS (objfile, osect) if (section_is_mapped (osect)) { - struct gdbarch *gdbarch = get_objfile_arch (objfile); + struct gdbarch *gdbarch = objfile->arch (); const char *name; bfd_vma lma, vma; int size; @@ -3387,20 +3356,9 @@ error (_("This target does not know how to read its overlay state.")); } -/* Function: overlay_command - A place-holder for a mis-typed command. */ - /* Command list chain containing all defined "overlay" subcommands. */ static struct cmd_list_element *overlaylist; -static void -overlay_command (const char *args, int from_tty) -{ - printf_unfiltered - ("\"overlay\" must be followed by the name of an overlay command.\n"); - help_list (overlaylist, "overlay ", all_commands, gdb_stdout); -} - /* Target Overlays for the "Simplest" overlay manager: This is GDB's default target overlay layer. It works with the @@ -3448,8 +3406,7 @@ static void simple_free_overlay_table (void) { - if (cache_ovly_table) - xfree (cache_ovly_table); + xfree (cache_ovly_table); cache_novlys = 0; cache_ovly_table = NULL; cache_ovly_table_base = 0; @@ -3502,7 +3459,7 @@ return 0; } - gdbarch = get_objfile_arch (ovly_table_msym.objfile); + gdbarch = ovly_table_msym.objfile->arch (); word_size = gdbarch_long_bit (gdbarch) / TARGET_CHAR_BIT; byte_order = gdbarch_byte_order (gdbarch); @@ -3531,7 +3488,7 @@ { int i; asection *bsect = osect->the_bfd_section; - struct gdbarch *gdbarch = get_objfile_arch (osect->objfile); + struct gdbarch *gdbarch = osect->objfile->arch (); int word_size = gdbarch_long_bit (gdbarch) / TARGET_CHAR_BIT; enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); @@ -3670,7 +3627,7 @@ return (*objfile->sf->sym_relocate) (objfile, sectp, buf); } -struct symfile_segment_data * +symfile_segment_data_up get_symfile_segment_data (bfd *abfd) { const struct sym_fns *sf = find_sym_fns (abfd); @@ -3681,15 +3638,6 @@ return sf->sym_segments (abfd); } -void -free_symfile_segment_data (struct symfile_segment_data *data) -{ - xfree (data->segment_bases); - xfree (data->segment_sizes); - xfree (data->segment_info); - xfree (data); -} - /* Given: - DATA, containing segment addresses from the object file ABFD, and the mapping from ABFD's sections onto the segments that own them, @@ -3708,7 +3656,7 @@ int symfile_map_offsets_to_segments (bfd *abfd, const struct symfile_segment_data *data, - struct section_offsets *offsets, + section_offsets &offsets, int num_segment_bases, const CORE_ADDR *segment_bases) { @@ -3722,13 +3670,13 @@ /* If we do not have segment mappings for the object file, we can not relocate it by segments. */ gdb_assert (data != NULL); - gdb_assert (data->num_segments > 0); + gdb_assert (data->segments.size () > 0); for (i = 0, sect = abfd->sections; sect != NULL; i++, sect = sect->next) { int which = data->segment_info[i]; - gdb_assert (0 <= which && which <= data->num_segments); + gdb_assert (0 <= which && which <= data->segments.size ()); /* Don't bother computing offsets for sections that aren't loaded as part of any segment. */ @@ -3740,8 +3688,7 @@ if (which > num_segment_bases) which = num_segment_bases; - offsets->offsets[i] = (segment_bases[which - 1] - - data->segment_bases[which - 1]); + offsets[i] = segment_bases[which - 1] - data->segments[which - 1].base; } return 1; @@ -3753,17 +3700,14 @@ bfd *abfd = objfile->obfd; int i; asection *sect; - struct symfile_segment_data *data; - data = get_symfile_segment_data (objfile->obfd); + symfile_segment_data_up data + = get_symfile_segment_data (objfile->obfd); if (data == NULL) return; - if (data->num_segments != 1 && data->num_segments != 2) - { - free_symfile_segment_data (data); - return; - } + if (data->segments.size () != 1 && data->segments.size () != 2) + return; for (i = 0, sect = abfd->sections; sect != NULL; i++, sect = sect->next) { @@ -3786,8 +3730,6 @@ objfile->sect_index_bss = sect->index; } } - - free_symfile_segment_data (data); } /* Listen for free_objfile events. */ @@ -3816,7 +3758,7 @@ { if (objfile->sf) objfile->sf->qf->expand_symtabs_matching (objfile, file_matcher, - lookup_name, + &lookup_name, symbol_matcher, expansion_notify, kind); } @@ -3897,8 +3839,9 @@ #endif /* GDB_SELF_TEST */ +void _initialize_symfile (); void -_initialize_symfile (void) +_initialize_symfile () { struct cmd_list_element *c; @@ -3951,12 +3894,12 @@ on its own."), &cmdlist); set_cmd_completer (c, filename_completer); - add_prefix_cmd ("overlay", class_support, overlay_command, - _("Commands for debugging overlays."), &overlaylist, - "overlay ", 0, &cmdlist); + add_basic_prefix_cmd ("overlay", class_support, + _("Commands for debugging overlays."), &overlaylist, + "overlay ", 0, &cmdlist); - add_com_alias ("ovly", "overlay", class_alias, 1); - add_com_alias ("ov", "overlay", class_alias, 1); + add_com_alias ("ovly", "overlay", class_support, 1); + add_com_alias ("ov", "overlay", class_support, 1); add_cmd ("map-overlay", class_support, map_overlay_command, _("Assert that an overlay section is mapped."), &overlaylist); diff -Nru gdb-9.1/gdb/symfile-debug.c gdb-10.2/gdb/symfile-debug.c --- gdb-9.1/gdb/symfile-debug.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/symfile-debug.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Debug logging for the symbol file functions for the GNU debugger, GDB. - Copyright (C) 2013-2020 Free Software Foundation, Inc. + Copyright (C) 2013-2021 Free Software Foundation, Inc. Contributed by Cygnus Support, using pieces from other GDB modules. @@ -254,7 +254,7 @@ debug_qf_expand_symtabs_matching (struct objfile *objfile, gdb::function_view<expand_symtabs_file_matcher_ftype> file_matcher, - const lookup_name_info &lookup_name, + const lookup_name_info *lookup_name, gdb::function_view<expand_symtabs_symbol_matcher_ftype> symbol_matcher, gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify, enum search_domain kind) @@ -362,6 +362,7 @@ debug_qf_forget_cached_source_info, debug_qf_map_symtabs_matching_filename, debug_qf_lookup_symbol, + NULL, debug_qf_print_stats, debug_qf_dump, debug_qf_expand_symtabs_for_function, @@ -474,7 +475,7 @@ debug_data->real_sf->sym_offsets (objfile, info); } -static struct symfile_segment_data * +static symfile_segment_data_up debug_sym_segments (bfd *abfd) { /* This API function is annoying, it doesn't take a "this" pointer. @@ -620,9 +621,7 @@ static void set_debug_symfile (const char *args, int from_tty, struct cmd_list_element *c) { - struct program_space *pspace; - - ALL_PSPACES (pspace) + for (struct program_space *pspace : program_spaces) for (objfile *objfile : pspace->objfiles ()) { if (debug_symfile) @@ -645,8 +644,9 @@ fprintf_filtered (file, _("Symfile debugging is %s.\n"), value); } +void _initialize_symfile_debug (); void -_initialize_symfile_debug (void) +_initialize_symfile_debug () { add_setshow_boolean_cmd ("symfile", no_class, &debug_symfile, _("\ Set debugging of the symfile functions."), _("\ diff -Nru gdb-9.1/gdb/symfile.h gdb-10.2/gdb/symfile.h --- gdb-9.1/gdb/symfile.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/symfile.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Definitions for reading symbol files into GDB. - Copyright (C) 1990-2020 Free Software Foundation, Inc. + Copyright (C) 1990-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -80,26 +80,32 @@ each BFD section belongs to. */ struct symfile_segment_data { - /* How many segments are present in this file. If there are + struct segment + { + segment (CORE_ADDR base, CORE_ADDR size) + : base (base), size (size) + {} + + /* The original base address the segment. */ + CORE_ADDR base; + + /* The memory size of the segment. */ + CORE_ADDR size; + }; + + /* The segments present in this file. If there are two, the text segment is the first one and the data segment is the second one. */ - int num_segments; + std::vector<segment> segments; - /* If NUM_SEGMENTS is greater than zero, the original base address - of each segment. */ - CORE_ADDR *segment_bases; - - /* If NUM_SEGMENTS is greater than zero, the memory size of each - segment. */ - CORE_ADDR *segment_sizes; - - /* If NUM_SEGMENTS is greater than zero, this is an array of entries - recording which segment contains each BFD section. - SEGMENT_INFO[I] is S+1 if the I'th BFD section belongs to segment + /* This is an array of entries recording which segment contains each BFD + section. SEGMENT_INFO[I] is S+1 if the I'th BFD section belongs to segment S, or zero if it is not in any segment. */ - int *segment_info; + std::vector<int> segment_info; }; +using symfile_segment_data_up = std::unique_ptr<symfile_segment_data>; + /* Callback for quick_symbol_functions->map_symbol_filenames. */ typedef void (symbol_filename_ftype) (const char *filename, @@ -183,6 +189,17 @@ const char *name, domain_enum domain); + /* Check to see if the global symbol is defined in a "partial" symbol table + of OBJFILE. NAME is the name of the symbol to look for. DOMAIN + indicates what sort of symbol to search for. + + If found, sets *symbol_found_p to true and returns the symbol language. + defined, or NULL if no such symbol table exists. */ + enum language (*lookup_global_symbol_language) (struct objfile *objfile, + const char *name, + domain_enum domain, + bool *symbol_found_p); + /* Print statistics about any indices loaded for OBJFILE. The statistics should be printed to gdb_stdout. This is used for "maint print statistics". */ @@ -242,11 +259,14 @@ names (the passed file name is already only the lbasename'd part). - Otherwise, if KIND does not match, this symbol is skipped. + If the file is not skipped, and SYMBOL_MATCHER and LOOKUP_NAME are NULL, + the symbol table is expanded. + + Otherwise, individual symbols are considered. + + If KIND does not match, the symbol is skipped. - If even KIND matches, SYMBOL_MATCHER is called for each symbol - defined in the file. The symbol "search" name is passed to - SYMBOL_MATCHER. + If the symbol name does not match LOOKUP_NAME, the symbol is skipped. If SYMBOL_MATCHER returns false, then the symbol is skipped. @@ -254,7 +274,7 @@ void (*expand_symtabs_matching) (struct objfile *objfile, gdb::function_view<expand_symtabs_file_matcher_ftype> file_matcher, - const lookup_name_info &lookup_name, + const lookup_name_info *lookup_name, gdb::function_view<expand_symtabs_symbol_matcher_ftype> symbol_matcher, gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify, enum search_domain kind); @@ -346,7 +366,7 @@ the segments of ABFD. Each segment is a unit of the file which may be relocated independently. */ - struct symfile_segment_data *(*sym_segments) (bfd *abfd); + symfile_segment_data_up (*sym_segments) (bfd *abfd); /* This function should read the linetable from the objfile when the line table cannot be read while processing the debugging @@ -373,8 +393,7 @@ build_section_addr_info_from_objfile (const struct objfile *objfile); extern void relative_addr_info_to_section_offsets - (struct section_offsets *section_offsets, int num_sections, - const section_addr_info &addrs); + (section_offsets §ion_offsets, const section_addr_info &addrs); extern void addr_info_make_relative (section_addr_info *addrs, bfd *abfd); @@ -388,7 +407,7 @@ /* The default version of sym_fns.sym_segments for readers that don't do anything special. */ -extern struct symfile_segment_data *default_symfile_segments (bfd *abfd); +extern symfile_segment_data_up default_symfile_segments (bfd *abfd); /* The default version of sym_fns.sym_relocate for readers that don't do anything special. */ @@ -515,10 +534,9 @@ extern int symfile_map_offsets_to_segments (bfd *, const struct symfile_segment_data *, - struct section_offsets *, + section_offsets &, int, const CORE_ADDR *); -struct symfile_segment_data *get_symfile_segment_data (bfd *abfd); -void free_symfile_segment_data (struct symfile_segment_data *data); +symfile_segment_data_up get_symfile_segment_data (bfd *abfd); extern scoped_restore_tmpl<int> increment_reading_symtab (void); @@ -569,6 +587,7 @@ struct dwarf2_section_names macinfo; struct dwarf2_section_names macro; struct dwarf2_section_names str; + struct dwarf2_section_names str_offsets; struct dwarf2_section_names line_str; struct dwarf2_section_names ranges; struct dwarf2_section_names rnglists; @@ -618,8 +637,6 @@ extern void dwarf2_build_psymtabs (struct objfile *); extern void dwarf2_build_frame_info (struct objfile *); -void dwarf2_free_objfile (struct objfile *); - /* From minidebug.c. */ extern gdb_bfd_ref_ptr find_separate_debug_file_in_section (struct objfile *); diff -Nru gdb-9.1/gdb/symfile-mem.c gdb-10.2/gdb/symfile-mem.c --- gdb-9.1/gdb/symfile-mem.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/symfile-mem.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Reading symbol files from memory. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -57,7 +57,7 @@ /* Verify parameters of target_read_memory_bfd and target_read_memory are compatible. */ -gdb_static_assert (sizeof (CORE_ADDR) == sizeof (bfd_vma)); +gdb_static_assert (sizeof (CORE_ADDR) >= sizeof (bfd_vma)); gdb_static_assert (sizeof (gdb_byte) == sizeof (bfd_byte)); gdb_static_assert (sizeof (ssize_t) <= sizeof (bfd_size_type)); @@ -78,11 +78,10 @@ and read its in-core symbols out of inferior memory. SIZE, if non-zero, is the known size of the object. TEMPL is a bfd representing the target's format. NAME is the name to use for this - symbol file in messages; it can be NULL or a malloc-allocated string - which will be attached to the BFD. */ + symbol file in messages; it can be NULL. */ static struct objfile * symbol_file_add_from_memory (struct bfd *templ, CORE_ADDR addr, - size_t size, char *name, int from_tty) + size_t size, const char *name, int from_tty) { struct objfile *objf; struct bfd *nbfd; @@ -102,7 +101,7 @@ gdb_bfd_ref_ptr nbfd_holder = gdb_bfd_ref_ptr::new_reference (nbfd); if (name == NULL) - name = xstrdup ("shared object read from target memory"); + name = "shared object read from target memory"; bfd_set_filename (nbfd, name); if (!bfd_check_format (nbfd, bfd_object)) @@ -183,8 +182,9 @@ return; } - char *name = xstrprintf ("system-supplied DSO at %s", - paddress (target_gdbarch (), vsyscall_range.start)); + std::string name = string_printf ("system-supplied DSO at %s", + paddress (target_gdbarch (), + vsyscall_range.start)); try { /* Pass zero for FROM_TTY, because the action of loading the @@ -193,7 +193,7 @@ symbol_file_add_from_memory (bfd, vsyscall_range.start, vsyscall_range.length, - name, + name.c_str (), 0 /* from_tty */); } catch (const gdb_exception &ex) @@ -203,8 +203,9 @@ } } +void _initialize_symfile_mem (); void -_initialize_symfile_mem (void) +_initialize_symfile_mem () { add_cmd ("add-symbol-file-from-memory", class_files, add_symbol_file_from_memory_command, diff -Nru gdb-9.1/gdb/symmisc.c gdb-10.2/gdb/symmisc.c --- gdb-9.1/gdb/symmisc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/symmisc.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Do various things to symbol tables (other than lookup), for GDB. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -61,9 +61,7 @@ void print_symbol_bcache_statistics (void) { - struct program_space *pspace; - - ALL_PSPACES (pspace) + for (struct program_space *pspace : program_spaces) for (objfile *objfile : pspace->objfiles ()) { QUIT; @@ -71,75 +69,70 @@ objfile_name (objfile)); objfile->partial_symtabs->psymbol_cache.print_statistics ("partial symbol cache"); - objfile->per_bfd->macro_cache.print_statistics - ("preprocessor macro cache"); - objfile->per_bfd->filename_cache.print_statistics ("file name cache"); + objfile->per_bfd->string_cache.print_statistics ("string cache"); } } void print_objfile_statistics (void) { - struct program_space *pspace; int i, linetables, blockvectors; - ALL_PSPACES (pspace) - for (objfile *objfile : pspace->objfiles ()) - { - QUIT; - printf_filtered (_("Statistics for '%s':\n"), objfile_name (objfile)); - if (OBJSTAT (objfile, n_stabs) > 0) - printf_filtered (_(" Number of \"stab\" symbols read: %d\n"), - OBJSTAT (objfile, n_stabs)); - if (objfile->per_bfd->n_minsyms > 0) - printf_filtered (_(" Number of \"minimal\" symbols read: %d\n"), - objfile->per_bfd->n_minsyms); - if (OBJSTAT (objfile, n_psyms) > 0) - printf_filtered (_(" Number of \"partial\" symbols read: %d\n"), - OBJSTAT (objfile, n_psyms)); - if (OBJSTAT (objfile, n_syms) > 0) - printf_filtered (_(" Number of \"full\" symbols read: %d\n"), - OBJSTAT (objfile, n_syms)); - if (OBJSTAT (objfile, n_types) > 0) - printf_filtered (_(" Number of \"types\" defined: %d\n"), - OBJSTAT (objfile, n_types)); - if (objfile->sf) - objfile->sf->qf->print_stats (objfile); - i = linetables = 0; - for (compunit_symtab *cu : objfile->compunits ()) - { - for (symtab *s : compunit_filetabs (cu)) - { - i++; - if (SYMTAB_LINETABLE (s) != NULL) - linetables++; - } - } - blockvectors = std::distance (objfile->compunits ().begin (), - objfile->compunits ().end ()); - printf_filtered (_(" Number of symbol tables: %d\n"), i); - printf_filtered (_(" Number of symbol tables with line tables: %d\n"), - linetables); - printf_filtered (_(" Number of symbol tables with blockvectors: %d\n"), - blockvectors); - - if (OBJSTAT (objfile, sz_strtab) > 0) - printf_filtered (_(" Space used by string tables: %d\n"), - OBJSTAT (objfile, sz_strtab)); - printf_filtered (_(" Total memory used for objfile obstack: %s\n"), - pulongest (obstack_memory_used (&objfile - ->objfile_obstack))); - printf_filtered (_(" Total memory used for BFD obstack: %s\n"), - pulongest (obstack_memory_used (&objfile->per_bfd - ->storage_obstack))); - printf_filtered - (_(" Total memory used for psymbol cache: %d\n"), - objfile->partial_symtabs->psymbol_cache.memory_used ()); - printf_filtered (_(" Total memory used for macro cache: %d\n"), - objfile->per_bfd->macro_cache.memory_used ()); - printf_filtered (_(" Total memory used for file name cache: %d\n"), - objfile->per_bfd->filename_cache.memory_used ()); - } + for (struct program_space *pspace : program_spaces) + for (objfile *objfile : pspace->objfiles ()) + { + QUIT; + printf_filtered (_("Statistics for '%s':\n"), objfile_name (objfile)); + if (OBJSTAT (objfile, n_stabs) > 0) + printf_filtered (_(" Number of \"stab\" symbols read: %d\n"), + OBJSTAT (objfile, n_stabs)); + if (objfile->per_bfd->n_minsyms > 0) + printf_filtered (_(" Number of \"minimal\" symbols read: %d\n"), + objfile->per_bfd->n_minsyms); + if (OBJSTAT (objfile, n_psyms) > 0) + printf_filtered (_(" Number of \"partial\" symbols read: %d\n"), + OBJSTAT (objfile, n_psyms)); + if (OBJSTAT (objfile, n_syms) > 0) + printf_filtered (_(" Number of \"full\" symbols read: %d\n"), + OBJSTAT (objfile, n_syms)); + if (OBJSTAT (objfile, n_types) > 0) + printf_filtered (_(" Number of \"types\" defined: %d\n"), + OBJSTAT (objfile, n_types)); + if (objfile->sf) + objfile->sf->qf->print_stats (objfile); + i = linetables = 0; + for (compunit_symtab *cu : objfile->compunits ()) + { + for (symtab *s : compunit_filetabs (cu)) + { + i++; + if (SYMTAB_LINETABLE (s) != NULL) + linetables++; + } + } + blockvectors = std::distance (objfile->compunits ().begin (), + objfile->compunits ().end ()); + printf_filtered (_(" Number of symbol tables: %d\n"), i); + printf_filtered (_(" Number of symbol tables with line tables: %d\n"), + linetables); + printf_filtered (_(" Number of symbol tables with blockvectors: %d\n"), + blockvectors); + + if (OBJSTAT (objfile, sz_strtab) > 0) + printf_filtered (_(" Space used by string tables: %d\n"), + OBJSTAT (objfile, sz_strtab)); + printf_filtered (_(" Total memory used for objfile obstack: %s\n"), + pulongest (obstack_memory_used (&objfile + ->objfile_obstack))); + printf_filtered (_(" Total memory used for BFD obstack: %s\n"), + pulongest (obstack_memory_used (&objfile->per_bfd + ->storage_obstack))); + printf_filtered + (_(" Total memory used for psymbol cache: %d\n"), + objfile->partial_symtabs->psymbol_cache.memory_used ()); + printf_filtered (_(" Total memory used for string cache: %d\n"), + objfile->per_bfd->string_cache.memory_used ()); + } } static void @@ -183,7 +176,7 @@ static void dump_msymbols (struct objfile *objfile, struct ui_file *outfile) { - struct gdbarch *gdbarch = get_objfile_arch (objfile); + struct gdbarch *gdbarch = objfile->arch (); int index; char ms_type; @@ -240,8 +233,7 @@ /* Use the relocated address as shown in the symbol here -- do not try to respect copy relocations. */ CORE_ADDR addr = (msymbol->value.address - + ANOFFSET (objfile->section_offsets, - msymbol->section)); + + objfile->section_offsets[msymbol->section]); fputs_filtered (paddress (gdbarch, addr), outfile); fprintf_filtered (outfile, " %s", msymbol->linkage_name ()); if (section) @@ -274,7 +266,7 @@ dump_symtab_1 (struct symtab *symtab, struct ui_file *outfile) { struct objfile *objfile = SYMTAB_OBJFILE (symtab); - struct gdbarch *gdbarch = get_objfile_arch (objfile); + struct gdbarch *gdbarch = objfile->arch (); int i; struct mdict_iterator miter; int len; @@ -284,8 +276,10 @@ const struct block *b; int depth; - fprintf_filtered (outfile, "\nSymtab for file %s\n", - symtab_to_filename_for_display (symtab)); + fprintf_filtered (outfile, "\nSymtab for file %s at %s\n", + symtab_to_filename_for_display (symtab), + host_address_to_string (symtab)); + if (SYMTAB_DIRNAME (symtab) != NULL) fprintf_filtered (outfile, "Compilation directory is %s\n", SYMTAB_DIRNAME (symtab)); @@ -306,12 +300,14 @@ { fprintf_filtered (outfile, " line %d at ", l->item[i].line); fputs_filtered (paddress (gdbarch, l->item[i].pc), outfile); + if (l->item[i].is_stmt) + fprintf_filtered (outfile, "\t(stmt)"); fprintf_filtered (outfile, "\n"); } } /* Now print the block info, but only for compunit symtabs since we will print lots of duplicate info otherwise. */ - if (symtab == COMPUNIT_FILETABS (SYMTAB_COMPUNIT (symtab))) + if (is_main_symtab_of_compunit_symtab (symtab)) { fprintf_filtered (outfile, "\nBlockvector:\n\n"); bv = SYMTAB_BLOCKVECTOR (symtab); @@ -374,6 +370,30 @@ "\nBlockvector same as owning compunit: %s\n\n", compunit_filename); } + + /* Print info about the user of this compunit_symtab, and the + compunit_symtabs included by this one. */ + if (is_main_symtab_of_compunit_symtab (symtab)) + { + struct compunit_symtab *cust = SYMTAB_COMPUNIT (symtab); + + if (cust->user != nullptr) + { + const char *addr + = host_address_to_string (COMPUNIT_FILETABS (cust->user)); + fprintf_filtered (outfile, "Compunit user: %s\n", addr); + } + if (cust->includes != nullptr) + for (i = 0; ; ++i) + { + struct compunit_symtab *include = cust->includes[i]; + if (include == nullptr) + break; + const char *addr + = host_address_to_string (COMPUNIT_FILETABS (include)); + fprintf_filtered (outfile, "Compunit include: %s\n", addr); + } + } } static void @@ -536,7 +556,7 @@ if (SYMBOL_DOMAIN (symbol) == STRUCT_DOMAIN) { - if (TYPE_NAME (SYMBOL_TYPE (symbol))) + if (SYMBOL_TYPE (symbol)->name ()) { LA_PRINT_TYPE (SYMBOL_TYPE (symbol), "", outfile, 1, depth, &type_print_raw_options); @@ -544,9 +564,9 @@ else { fprintf_filtered (outfile, "%s %s = ", - (TYPE_CODE (SYMBOL_TYPE (symbol)) == TYPE_CODE_ENUM + (SYMBOL_TYPE (symbol)->code () == TYPE_CODE_ENUM ? "enum" - : (TYPE_CODE (SYMBOL_TYPE (symbol)) == TYPE_CODE_STRUCT + : (SYMBOL_TYPE (symbol)->code () == TYPE_CODE_STRUCT ? "struct" : "union")), symbol->linkage_name ()); LA_PRINT_TYPE (SYMBOL_TYPE (symbol), "", outfile, 1, depth, @@ -563,7 +583,7 @@ /* Print details of types, except for enums where it's clutter. */ LA_PRINT_TYPE (SYMBOL_TYPE (symbol), symbol->print_name (), outfile, - TYPE_CODE (SYMBOL_TYPE (symbol)) != TYPE_CODE_ENUM, + SYMBOL_TYPE (symbol)->code () != TYPE_CODE_ENUM, depth, &type_print_raw_options); fprintf_filtered (outfile, "; "); @@ -739,14 +759,12 @@ static void maintenance_print_objfiles (const char *regexp, int from_tty) { - struct program_space *pspace; - dont_repeat (); if (regexp) re_comp (regexp); - ALL_PSPACES (pspace) + for (struct program_space *pspace : program_spaces) for (objfile *objfile : pspace->objfiles ()) { QUIT; @@ -761,14 +779,12 @@ static void maintenance_info_symtabs (const char *regexp, int from_tty) { - struct program_space *pspace; - dont_repeat (); if (regexp) re_comp (regexp); - ALL_PSPACES (pspace) + for (struct program_space *pspace : program_spaces) for (objfile *objfile : pspace->objfiles ()) { /* We don't want to print anything for this objfile until we @@ -812,6 +828,28 @@ " ((struct blockvector *) %s)\n", host_address_to_string (COMPUNIT_BLOCKVECTOR (cust))); + printf_filtered (" user" + " ((struct compunit_symtab *) %s)\n", + cust->user != nullptr + ? host_address_to_string (cust->user) + : "(null)"); + if (cust->includes != nullptr) + { + printf_filtered (" ( includes\n"); + for (int i = 0; ; ++i) + { + struct compunit_symtab *include + = cust->includes[i]; + if (include == nullptr) + break; + const char *addr + = host_address_to_string (include); + printf_filtered (" (%s %s)\n", + "(struct compunit_symtab *)", + addr); + } + printf_filtered (" )\n"); + } printed_compunit_symtab_start = 1; } @@ -851,9 +889,7 @@ static void maintenance_check_symtabs (const char *ignore, int from_tty) { - struct program_space *pspace; - - ALL_PSPACES (pspace) + for (struct program_space *pspace : program_spaces) for (objfile *objfile : pspace->objfiles ()) { /* We don't want to print anything for this objfile until we @@ -899,7 +935,6 @@ static void maintenance_expand_symtabs (const char *args, int from_tty) { - struct program_space *pspace; char *regexp = NULL; /* We use buildargv here so that we handle spaces in the regexp @@ -919,7 +954,7 @@ if (regexp) re_comp (regexp); - ALL_PSPACES (pspace) + for (struct program_space *pspace : program_spaces) for (objfile *objfile : pspace->objfiles ()) { if (objfile->sf) @@ -932,12 +967,8 @@ return (!basenames && (regexp == NULL || re_exec (filename))); }, - lookup_name_info::match_any (), - [] (const char *symname) - { - /* Since we're not searching on symbols, just return true. */ - return true; - }, + NULL, + NULL, NULL, ALL_DOMAIN); } @@ -988,20 +1019,31 @@ printf_filtered (_("Line table has no lines.\n")); else { - int i; - /* Leave space for 6 digits of index and line number. After that the tables will just not format as well. */ - printf_filtered (_("%-6s %6s %s\n"), - _("INDEX"), _("LINE"), _("ADDRESS")); + struct ui_out *uiout = current_uiout; + ui_out_emit_table table_emitter (uiout, 4, -1, "line-table"); + uiout->table_header (6, ui_left, "index", _("INDEX")); + uiout->table_header (6, ui_left, "line", _("LINE")); + uiout->table_header (18, ui_left, "address", _("ADDRESS")); + uiout->table_header (1, ui_left, "is-stmt", _("IS-STMT")); + uiout->table_body (); - for (i = 0; i < linetable->nitems; ++i) + for (int i = 0; i < linetable->nitems; ++i) { struct linetable_entry *item; item = &linetable->item [i]; - printf_filtered (_("%-6d %6d %s\n"), i, item->line, - core_addr_to_string (item->pc)); + ui_out_emit_tuple tuple_emitter (uiout, nullptr); + uiout->field_signed ("index", i); + if (item->line > 0) + uiout->field_signed ("line", item->line); + else + uiout->field_string ("line", _("END")); + uiout->field_core_addr ("address", objfile->arch (), + item->pc); + uiout->field_string ("is-stmt", item->is_stmt ? "Y" : ""); + uiout->text ("\n"); } } @@ -1013,14 +1055,12 @@ static void maintenance_info_line_tables (const char *regexp, int from_tty) { - struct program_space *pspace; - dont_repeat (); if (regexp != NULL) re_comp (regexp); - ALL_PSPACES (pspace) + for (struct program_space *pspace : program_spaces) for (objfile *objfile : pspace->objfiles ()) { for (compunit_symtab *cust : objfile->compunits ()) @@ -1041,8 +1081,9 @@ /* Do early runtime initializations. */ +void _initialize_symmisc (); void -_initialize_symmisc (void) +_initialize_symmisc () { std_in = stdin; std_out = stdout; diff -Nru gdb-9.1/gdb/symtab.c gdb-10.2/gdb/symtab.c --- gdb-9.1/gdb/symtab.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/symtab.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Symbol table lookup for the GNU debugger, GDB. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -595,7 +595,7 @@ struct fn_field *method = &f[signature_id]; const char *field_name = TYPE_FN_FIELDLIST_NAME (type, method_id); const char *physname = TYPE_FN_FIELD_PHYSNAME (f, signature_id); - const char *newname = TYPE_NAME (type); + const char *newname = type->name (); /* Does the form of physname indicate that it is the full mangled name of a constructor (not just the args)? */ @@ -667,44 +667,27 @@ return (mangled_name); } -/* Set the demangled name of GSYMBOL to NAME. NAME must be already - correctly allocated. */ +/* See symtab.h. */ void -symbol_set_demangled_name (struct general_symbol_info *gsymbol, - const char *name, - struct obstack *obstack) +general_symbol_info::set_demangled_name (const char *name, + struct obstack *obstack) { - if (gsymbol->language == language_ada) + if (language () == language_ada) { if (name == NULL) { - gsymbol->ada_mangled = 0; - gsymbol->language_specific.obstack = obstack; + ada_mangled = 0; + language_specific.obstack = obstack; } else { - gsymbol->ada_mangled = 1; - gsymbol->language_specific.demangled_name = name; + ada_mangled = 1; + language_specific.demangled_name = name; } } else - gsymbol->language_specific.demangled_name = name; -} - -/* Return the demangled name of GSYMBOL. */ - -const char * -symbol_get_demangled_name (const struct general_symbol_info *gsymbol) -{ - if (gsymbol->language == language_ada) - { - if (!gsymbol->ada_mangled) - return NULL; - /* Fall through. */ - } - - return gsymbol->language_specific.demangled_name; + language_specific.demangled_name = name; } @@ -712,28 +695,26 @@ depending upon the language for the symbol. */ void -symbol_set_language (struct general_symbol_info *gsymbol, - enum language language, - struct obstack *obstack) -{ - gsymbol->language = language; - if (gsymbol->language == language_cplus - || gsymbol->language == language_d - || gsymbol->language == language_go - || gsymbol->language == language_objc - || gsymbol->language == language_fortran) +general_symbol_info::set_language (enum language language, + struct obstack *obstack) +{ + m_language = language; + if (language == language_cplus + || language == language_d + || language == language_go + || language == language_objc + || language == language_fortran) { - symbol_set_demangled_name (gsymbol, NULL, obstack); + set_demangled_name (NULL, obstack); } - else if (gsymbol->language == language_ada) + else if (language == language_ada) { - gdb_assert (gsymbol->ada_mangled == 0); - gsymbol->language_specific.obstack = obstack; + gdb_assert (ada_mangled == 0); + language_specific.obstack = obstack; } else { - memset (&gsymbol->language_specific, 0, - sizeof (gsymbol->language_specific)); + memset (&language_specific, 0, sizeof (language_specific)); } } @@ -819,14 +800,14 @@ char *demangled = NULL; int i; - if (gsymbol->language == language_unknown) - gsymbol->language = language_auto; + if (gsymbol->language () == language_unknown) + gsymbol->m_language = language_auto; - if (gsymbol->language != language_auto) + if (gsymbol->language () != language_auto) { - const struct language_defn *lang = language_def (gsymbol->language); + const struct language_defn *lang = language_def (gsymbol->language ()); - language_sniff_from_mangled_name (lang, mangled, &demangled); + lang->sniff_from_mangled_name (mangled, &demangled); return demangled; } @@ -835,9 +816,9 @@ enum language l = (enum language) i; const struct language_defn *lang = language_def (l); - if (language_sniff_from_mangled_name (lang, mangled, &demangled)) + if (lang->sniff_from_mangled_name (mangled, &demangled)) { - gsymbol->language = l; + gsymbol->m_language = l; return demangled; } } @@ -857,29 +838,24 @@ so the pointer can be discarded after calling this function. */ void -symbol_set_names (struct general_symbol_info *gsymbol, - gdb::string_view linkage_name, bool copy_name, - struct objfile_per_bfd_storage *per_bfd, - gdb::optional<hashval_t> hash) +general_symbol_info::compute_and_set_names (gdb::string_view linkage_name, + bool copy_name, + objfile_per_bfd_storage *per_bfd, + gdb::optional<hashval_t> hash) { struct demangled_name_entry **slot; - if (gsymbol->language == language_ada) + if (language () == language_ada) { /* In Ada, we do the symbol lookups using the mangled name, so we can save some space by not storing the demangled name. */ if (!copy_name) - gsymbol->name = linkage_name.data (); + m_name = linkage_name.data (); else - { - char *name = (char *) obstack_alloc (&per_bfd->storage_obstack, - linkage_name.length () + 1); - - memcpy (name, linkage_name.data (), linkage_name.length ()); - name[linkage_name.length ()] = '\0'; - gsymbol->name = name; - } - symbol_set_demangled_name (gsymbol, NULL, &per_bfd->storage_obstack); + m_name = obstack_strndup (&per_bfd->storage_obstack, + linkage_name.data (), + linkage_name.length ()); + set_demangled_name (NULL, &per_bfd->storage_obstack); return; } @@ -894,11 +870,21 @@ htab_find_slot_with_hash (per_bfd->demangled_names_hash.get (), &entry, *hash, INSERT)); + /* The const_cast is safe because the only reason it is already + initialized is if we purposefully set it from a background + thread to avoid doing the work here. However, it is still + allocated from the heap and needs to be freed by us, just + like if we called symbol_find_demangled_name here. If this is + nullptr, we call symbol_find_demangled_name below, but we put + this smart pointer here to be sure that we don't leak this name. */ + gdb::unique_xmalloc_ptr<char> demangled_name + (const_cast<char *> (language_specific.demangled_name)); + /* If this name is not in the hash table, add it. */ if (*slot == NULL /* A C version of the symbol may have already snuck into the table. This happens to, e.g., main.init (__go_init_main). Cope. */ - || (gsymbol->language == language_go && (*slot)->demangled == nullptr)) + || (language () == language_go && (*slot)->demangled == nullptr)) { /* A 0-terminated copy of the linkage name. Callers must set COPY_NAME to true if the string might not be nullterminated. We have to make @@ -916,15 +902,9 @@ else linkage_name_copy = linkage_name; - /* The const_cast is safe because the only reason it is already - initialized is if we purposefully set it from a background - thread to avoid doing the work here. However, it is still - allocated from the heap and needs to be freed by us, just - like if we called symbol_find_demangled_name here. */ - gdb::unique_xmalloc_ptr<char> demangled_name - (gsymbol->language_specific.demangled_name - ? const_cast<char *> (gsymbol->language_specific.demangled_name) - : symbol_find_demangled_name (gsymbol, linkage_name_copy.data ())); + if (demangled_name.get () == nullptr) + demangled_name.reset + (symbol_find_demangled_name (this, linkage_name_copy.data ())); /* Suppose we have demangled_name==NULL, copy_name==0, and linkage_name_copy==linkage_name. In this case, we already have the @@ -959,18 +939,13 @@ (gdb::string_view (mangled_ptr, linkage_name.length ())); } (*slot)->demangled = std::move (demangled_name); - (*slot)->language = gsymbol->language; + (*slot)->language = language (); } - else if (gsymbol->language == language_unknown - || gsymbol->language == language_auto) - gsymbol->language = (*slot)->language; - - gsymbol->name = (*slot)->mangled.data (); - if ((*slot)->demangled != nullptr) - symbol_set_demangled_name (gsymbol, (*slot)->demangled.get (), - &per_bfd->storage_obstack); - else - symbol_set_demangled_name (gsymbol, NULL, &per_bfd->storage_obstack); + else if (language () == language_unknown || language () == language_auto) + m_language = (*slot)->language; + + m_name = (*slot)->mangled.data (); + set_demangled_name ((*slot)->demangled.get (), &per_bfd->storage_obstack); } /* See symtab.h. */ @@ -978,22 +953,23 @@ const char * general_symbol_info::natural_name () const { - switch (language) + switch (language ()) { case language_cplus: case language_d: case language_go: case language_objc: case language_fortran: - if (symbol_get_demangled_name (this) != NULL) - return symbol_get_demangled_name (this); + case language_rust: + if (language_specific.demangled_name != nullptr) + return language_specific.demangled_name; break; case language_ada: return ada_decode_symbol (this); default: break; } - return name; + return linkage_name (); } /* See symtab.h. */ @@ -1003,14 +979,15 @@ { const char *dem_name = NULL; - switch (language) + switch (language ()) { case language_cplus: case language_d: case language_go: case language_objc: case language_fortran: - dem_name = symbol_get_demangled_name (this); + case language_rust: + dem_name = language_specific.demangled_name; break; case language_ada: dem_name = ada_decode_symbol (this); @@ -1026,8 +1003,8 @@ const char * general_symbol_info::search_name () const { - if (language == language_ada) - return name; + if (language () == language_ada) + return linkage_name (); else return natural_name (); } @@ -1039,7 +1016,7 @@ const lookup_name_info &name) { symbol_name_matcher_ftype *name_match - = get_symbol_name_matcher (language_def (gsymbol->language), name); + = language_def (gsymbol->language ())->get_symbol_name_matcher (name); return name_match (gsymbol->search_name (), name, NULL); } @@ -1219,8 +1196,7 @@ if (!SYMBOL_MATCHES_SEARCH_NAME (sym, lookup_name)) return 0; - if (!symbol_matches_domain (SYMBOL_LANGUAGE (sym), - slot_domain, domain)) + if (!symbol_matches_domain (sym->language (), slot_domain, domain)) return 0; } } @@ -1300,9 +1276,7 @@ static void set_symbol_cache_size (unsigned int new_size) { - struct program_space *pspace; - - ALL_PSPACES (pspace) + for (struct program_space *pspace : program_spaces) { struct symbol_cache *cache = symbol_cache_key.get (pspace); @@ -1550,9 +1524,7 @@ static void maintenance_print_symbol_cache (const char *args, int from_tty) { - struct program_space *pspace; - - ALL_PSPACES (pspace) + for (struct program_space *pspace : program_spaces) { struct symbol_cache *cache; @@ -1576,9 +1548,7 @@ static void maintenance_flush_symbol_cache (const char *args, int from_tty) { - struct program_space *pspace; - - ALL_PSPACES (pspace) + for (struct program_space *pspace : program_spaces) { symbol_cache_flush (pspace); } @@ -1621,9 +1591,7 @@ static void maintenance_print_symbol_cache_statistics (const char *args, int from_tty) { - struct program_space *pspace; - - ALL_PSPACES (pspace) + for (struct program_space *pspace : program_spaces) { struct symbol_cache *cache; @@ -1673,7 +1641,8 @@ e.g. on PowerPC64, where the minimal symbol for a function will point to the function descriptor, while the debug symbol will point to the actual function code. */ - msym = lookup_minimal_symbol_by_pc_name (addr, ginfo->name, objfile); + msym = lookup_minimal_symbol_by_pc_name (addr, ginfo->linkage_name (), + objfile); if (msym) ginfo->section = MSYMBOL_SECTION (msym); else @@ -1690,11 +1659,10 @@ So, instead, search the section table when lookup by name has failed. The ``addr'' and ``endaddr'' fields may have already - been relocated. If so, the relocation offset (i.e. the - ANOFFSET value) needs to be subtracted from these values when - performing the comparison. We unconditionally subtract it, - because, when no relocation has been performed, the ANOFFSET - value will simply be zero. + been relocated. If so, the relocation offset needs to be + subtracted from these values when performing the comparison. + We unconditionally subtract it, because, when no relocation + has been performed, the value will simply be zero. The address of the symbol whose section we're fixing up HAS NOT BEEN adjusted (relocated) yet. It can't have been since @@ -1720,7 +1688,7 @@ ALL_OBJFILE_OSECTIONS (objfile, s) { int idx = s - objfile->sections; - CORE_ADDR offset = ANOFFSET (objfile->section_offsets, idx); + CORE_ADDR offset = objfile->section_offsets[idx]; if (fallback == -1) fallback = idx; @@ -1798,7 +1766,7 @@ if (lookup_name.ignore_parameters () && lang == language_cplus) { gdb::unique_xmalloc_ptr<char> without_params - = cp_remove_params_if_any (lookup_name.name ().c_str (), + = cp_remove_params_if_any (lookup_name.c_str (), lookup_name.completion_mode ()); if (without_params != NULL) @@ -1811,9 +1779,9 @@ } if (lookup_name.match_type () == symbol_name_match_type::SEARCH_NAME) - m_demangled_name = lookup_name.name (); + m_demangled_name = lookup_name.c_str (); else - m_demangled_name = demangle_for_lookup (lookup_name.name ().c_str (), + m_demangled_name = demangle_for_lookup (lookup_name.c_str (), lang, storage); } @@ -1824,7 +1792,7 @@ { /* Lookup any symbol that "" would complete. I.e., this matches all symbol names. */ - static const lookup_name_info lookup_name ({}, symbol_name_match_type::FULL, + static const lookup_name_info lookup_name ("", symbol_name_match_type::FULL, true); return lookup_name; @@ -1862,9 +1830,9 @@ /* If we were given a non-mangled name, canonicalize it according to the language (so far only for C++). */ - std::string canon = cp_canonicalize_string (name); - if (!canon.empty ()) - return storage.swap_string (canon); + gdb::unique_xmalloc_ptr<char> canon = cp_canonicalize_string (name); + if (canon != nullptr) + return storage.set_malloc_ptr (std::move (canon)); } else if (lang == language_d) { @@ -1887,7 +1855,7 @@ unsigned int search_name_hash (enum language language, const char *search_name) { - return language_def (language)->la_search_name_hash (search_name); + return language_def (language)->search_name_hash (search_name); } /* See symtab.h. @@ -1949,7 +1917,7 @@ if (symbol_lookup_debug > 1) { - struct objfile *objfile = lookup_objfile_from_block (block); + struct objfile *objfile = block_objfile (block); fprintf_unfiltered (gdb_stdlog, "lookup_language_this (%s, %s (objfile %s))", @@ -1998,14 +1966,14 @@ /* The type may be a stub. */ type = check_typedef (type); - for (i = TYPE_NFIELDS (type) - 1; i >= TYPE_N_BASECLASSES (type); i--) + for (i = type->num_fields () - 1; i >= TYPE_N_BASECLASSES (type); i--) { const char *t_field_name = TYPE_FIELD_NAME (type, i); if (t_field_name && (strcmp_iw (t_field_name, name) == 0)) { is_a_field_of_this->type = type; - is_a_field_of_this->field = &TYPE_FIELD (type, i); + is_a_field_of_this->field = &type->field (i); return 1; } } @@ -2044,7 +2012,8 @@ if (symbol_lookup_debug) { - struct objfile *objfile = lookup_objfile_from_block (block); + struct objfile *objfile = (block == nullptr + ? nullptr : block_objfile (block)); fprintf_unfiltered (gdb_stdlog, "lookup_symbol_aux (%s, %s (objfile %s), %s, %s)\n", @@ -2094,11 +2063,11 @@ /* I'm not really sure that type of this can ever be typedefed; just be safe. */ t = check_typedef (t); - if (TYPE_CODE (t) == TYPE_CODE_PTR || TYPE_IS_REFERENCE (t)) + if (t->code () == TYPE_CODE_PTR || TYPE_IS_REFERENCE (t)) t = TYPE_TARGET_TYPE (t); - if (TYPE_CODE (t) != TYPE_CODE_STRUCT - && TYPE_CODE (t) != TYPE_CODE_UNION) + if (t->code () != TYPE_CODE_STRUCT + && t->code () != TYPE_CODE_UNION) error (_("Internal error: `%s' is not an aggregate"), langdef->la_name_of_this); @@ -2117,7 +2086,7 @@ /* Now do whatever is appropriate for LANGUAGE to look up static and global variables. */ - result = langdef->la_lookup_symbol_nonlocal (langdef, name, block, domain); + result = langdef->lookup_symbol_nonlocal (name, block, domain); if (result.symbol != NULL) { if (symbol_lookup_debug) @@ -2189,32 +2158,6 @@ /* See symtab.h. */ -struct objfile * -lookup_objfile_from_block (const struct block *block) -{ - if (block == NULL) - return NULL; - - block = block_global_block (block); - /* Look through all blockvectors. */ - for (objfile *obj : current_program_space->objfiles ()) - { - for (compunit_symtab *cust : obj->compunits ()) - if (block == BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (cust), - GLOBAL_BLOCK)) - { - if (obj->separate_debug_objfile_backlink) - obj = obj->separate_debug_objfile_backlink; - - return obj; - } - } - - return NULL; -} - -/* See symtab.h. */ - struct symbol * lookup_symbol_in_block (const char *name, symbol_name_match_type match_type, const struct block *block, @@ -2224,7 +2167,8 @@ if (symbol_lookup_debug > 1) { - struct objfile *objfile = lookup_objfile_from_block (block); + struct objfile *objfile = (block == nullptr + ? nullptr : block_objfile (block)); fprintf_unfiltered (gdb_stdlog, "lookup_symbol_in_block (%s, %s (objfile %s), %s)", @@ -2293,6 +2237,8 @@ name, domain_name (domain)); } + struct block_symbol other; + other.symbol = NULL; for (compunit_symtab *cust : objfile->compunits ()) { const struct blockvector *bv; @@ -2303,18 +2249,36 @@ block = BLOCKVECTOR_BLOCK (bv, block_index); result.symbol = block_lookup_symbol_primary (block, name, domain); result.block = block; - if (result.symbol != NULL) + if (result.symbol == NULL) + continue; + if (best_symbol (result.symbol, domain)) { - if (symbol_lookup_debug > 1) + other = result; + break; + } + if (symbol_matches_domain (result.symbol->language (), + SYMBOL_DOMAIN (result.symbol), domain)) + { + struct symbol *better + = better_symbol (other.symbol, result.symbol, domain); + if (better != other.symbol) { - fprintf_unfiltered (gdb_stdlog, " = %s (block %s)\n", - host_address_to_string (result.symbol), - host_address_to_string (block)); + other.symbol = better; + other.block = block; } - result.symbol = fixup_symbol_section (result.symbol, objfile); - return result; + } + } + if (other.symbol != NULL) + { + if (symbol_lookup_debug > 1) + { + fprintf_unfiltered (gdb_stdlog, " = %s (block %s)\n", + host_address_to_string (other.symbol), + host_address_to_string (other.block)); } + other.symbol = fixup_symbol_section (other.symbol, objfile); + return other; } if (symbol_lookup_debug > 1) @@ -2437,13 +2401,12 @@ return result; } -/* See symtab.h. */ +/* See language.h. */ struct block_symbol -basic_lookup_symbol_nonlocal (const struct language_defn *langdef, - const char *name, - const struct block *block, - const domain_enum domain) +language_defn::lookup_symbol_nonlocal (const char *name, + const struct block *block, + const domain_enum domain) const { struct block_symbol result; @@ -2469,7 +2432,7 @@ gdbarch = target_gdbarch (); else gdbarch = block_gdbarch (block); - result.symbol = language_lookup_primitive_type_as_symbol (langdef, + result.symbol = language_lookup_primitive_type_as_symbol (this, gdbarch, name); result.block = NULL; if (result.symbol != NULL) @@ -2494,7 +2457,8 @@ if (symbol_lookup_debug) { - struct objfile *objfile = lookup_objfile_from_block (static_block); + struct objfile *objfile = (block == nullptr + ? nullptr : block_objfile (block)); fprintf_unfiltered (gdb_stdlog, "lookup_symbol_in_static_block (%s, %s (objfile %s)," @@ -2568,6 +2532,33 @@ return result; } +/* Find the language for partial symbol with NAME. */ + +static enum language +find_quick_global_symbol_language (const char *name, const domain_enum domain) +{ + for (objfile *objfile : current_program_space->objfiles ()) + { + if (objfile->sf && objfile->sf->qf + && objfile->sf->qf->lookup_global_symbol_language) + continue; + return language_unknown; + } + + for (objfile *objfile : current_program_space->objfiles ()) + { + bool symbol_found_p; + enum language lang + = objfile->sf->qf->lookup_global_symbol_language (objfile, name, domain, + &symbol_found_p); + if (!symbol_found_p) + continue; + return lang; + } + + return language_unknown; +} + /* Private data to be used with lookup_symbol_global_iterator_cb. */ struct global_or_static_sym_lookup_data @@ -2647,7 +2638,7 @@ lookup_data.block_index = block_index; lookup_data.domain = domain; gdbarch_iterate_over_objfiles_in_search_order - (objfile != NULL ? get_objfile_arch (objfile) : target_gdbarch (), + (objfile != NULL ? objfile->arch () : target_gdbarch (), lookup_symbol_global_or_static_iterator_cb, &lookup_data, objfile); result = lookup_data.result; } @@ -2679,17 +2670,30 @@ global block first. This yields "more expected" behavior, and is needed to support 'FILENAME'::VARIABLE lookups. */ const struct block *global_block = block_global_block (block); + symbol *sym = NULL; if (global_block != nullptr) { - symbol *sym = lookup_symbol_in_block (name, - symbol_name_match_type::FULL, - global_block, domain); - if (sym != nullptr) + sym = lookup_symbol_in_block (name, + symbol_name_match_type::FULL, + global_block, domain); + if (sym != NULL && best_symbol (sym, domain)) return { sym, global_block }; } - struct objfile *objfile = lookup_objfile_from_block (block); - return lookup_global_or_static_symbol (name, GLOBAL_BLOCK, objfile, domain); + struct objfile *objfile = nullptr; + if (block != nullptr) + { + objfile = block_objfile (block); + if (objfile->separate_debug_objfile_backlink != nullptr) + objfile = objfile->separate_debug_objfile_backlink; + } + + block_symbol bs + = lookup_global_or_static_symbol (name, GLOBAL_BLOCK, objfile, domain); + if (better_symbol (sym, bs.symbol, domain) == sym) + return { sym, global_block }; + else + return bs; } bool @@ -2717,7 +2721,7 @@ struct type * lookup_transparent_type (const char *name) { - return current_language->la_lookup_transparent_type (name); + return current_language->lookup_transparent_type (name); } /* A helper for basic_lookup_transparent_type that interfaces with the @@ -2846,8 +2850,7 @@ ALL_BLOCK_SYMBOLS_WITH_NAME (block, name, iter, sym) { - if (symbol_matches_domain (SYMBOL_LANGUAGE (sym), - SYMBOL_DOMAIN (sym), domain)) + if (symbol_matches_domain (sym->language (), SYMBOL_DOMAIN (sym), domain)) { struct block_symbol block_sym = {sym, block}; @@ -3167,7 +3170,17 @@ ; /* fall through */ else - return find_pc_line (BMSYMBOL_VALUE_ADDRESS (mfunsym), 0); + { + /* Detect an obvious case of infinite recursion. If this + should occur, we'd like to know about it, so error out, + fatally. */ + if (BMSYMBOL_VALUE_ADDRESS (mfunsym) == pc) + internal_error (__FILE__, __LINE__, + _("Infinite recursion detected in find_pc_sect_line;" + "please file a bug report")); + + return find_pc_line (BMSYMBOL_VALUE_ADDRESS (mfunsym), 0); + } } symtab_and_line val; @@ -3240,6 +3253,23 @@ best = prev; best_symtab = iter_s; + /* If during the binary search we land on a non-statement entry, + scan backward through entries at the same address to see if + there is an entry marked as is-statement. In theory this + duplication should have been removed from the line table + during construction, this is just a double check. If the line + table has had the duplication removed then this should be + pretty cheap. */ + if (!best->is_stmt) + { + struct linetable_entry *tmp = best; + while (tmp > first && (tmp - 1)->pc == tmp->pc + && (tmp - 1)->line != 0 && !tmp->is_stmt) + --tmp; + if (tmp->is_stmt) + best = tmp; + } + /* Discard BEST_END if it's before the PC of the current BEST. */ if (best_end <= best->pc) best_end = 0; @@ -3270,6 +3300,7 @@ } else { + val.is_stmt = best->is_stmt; val.symtab = best_symtab; val.line = best->line; val.pc = best->pc; @@ -3438,7 +3469,8 @@ { struct linetable_entry *item = &SYMTAB_LINETABLE (symtab)->item[idx]; - if (*best_item == NULL || item->line < (*best_item)->line) + if (*best_item == NULL + || (item->line < (*best_item)->line && item->is_stmt)) *best_item = item; break; @@ -3549,6 +3581,10 @@ { struct linetable_entry *item = &(l->item[i]); + /* Ignore non-statements. */ + if (!item->is_stmt) + continue; + if (item->line == lineno) { /* Return the first (lowest address) entry which matches. */ @@ -3591,7 +3627,7 @@ && (COMPUNIT_LOCATIONS_VALID (SYMTAB_COMPUNIT (sal.symtab)) || SYMTAB_LANGUAGE (sal.symtab) == language_asm)) { - struct gdbarch *gdbarch = get_objfile_arch (SYMTAB_OBJFILE (sal.symtab)); + struct gdbarch *gdbarch = SYMTAB_OBJFILE (sal.symtab)->arch (); sal.pc = func_addr; if (gdbarch_skip_entrypoint_p (gdbarch)) @@ -3750,7 +3786,7 @@ name = msymbol.minsym->linkage_name (); } - gdbarch = get_objfile_arch (objfile); + gdbarch = objfile->arch (); /* Process the prologue in two passes. In the first pass try to skip the prologue (SKIP is true) and verify there is a real need for it (indicated @@ -4484,7 +4520,7 @@ { return file_matches (filename, filenames, basenames); }, - lookup_name_info::match_any (), + &lookup_name_info::match_any (), [&] (const char *symname) { return (!preg.has_value () @@ -4594,7 +4630,7 @@ members. We only want to skip enums here. */ && !(SYMBOL_CLASS (sym) == LOC_CONST - && (TYPE_CODE (SYMBOL_TYPE (sym)) + && (SYMBOL_TYPE (sym)->code () == TYPE_CODE_ENUM)) && (!treg.has_value () || treg_matches_sym_type_name (*treg, sym))) @@ -4800,7 +4836,7 @@ For the struct printing case below, things are worse, we force printing of the ";" in this function, which is going to be wrong for languages that don't require a ";" between statements. */ - if (TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_TYPEDEF) + if (SYMBOL_TYPE (sym)->code () == TYPE_CODE_TYPEDEF) typedef_print (SYMBOL_TYPE (sym), sym, &tmp_stream); else type_print (SYMBOL_TYPE (sym), "", &tmp_stream, -1); @@ -4872,7 +4908,7 @@ static void print_msymbol_info (struct bound_minimal_symbol msymbol) { - struct gdbarch *gdbarch = get_objfile_arch (msymbol.objfile); + struct gdbarch *gdbarch = msymbol.objfile->arch (); char *tmp; if (gdbarch_addr_bit (gdbarch) <= 32) @@ -4972,13 +5008,13 @@ and 'info functions' commands. These correspond to the -q, -t, and -n options. */ -struct info_print_options +struct info_vars_funcs_options { bool quiet = false; bool exclude_minsyms = false; char *type_regexp = nullptr; - ~info_print_options () + ~info_vars_funcs_options () { xfree (type_regexp); } @@ -4987,24 +5023,25 @@ /* The options used by the 'info variables' and 'info functions' commands. */ -static const gdb::option::option_def info_print_options_defs[] = { - gdb::option::boolean_option_def<info_print_options> { +static const gdb::option::option_def info_vars_funcs_options_defs[] = { + gdb::option::boolean_option_def<info_vars_funcs_options> { "q", - [] (info_print_options *opt) { return &opt->quiet; }, + [] (info_vars_funcs_options *opt) { return &opt->quiet; }, nullptr, /* show_cmd_cb */ nullptr /* set_doc */ }, - gdb::option::boolean_option_def<info_print_options> { + gdb::option::boolean_option_def<info_vars_funcs_options> { "n", - [] (info_print_options *opt) { return &opt->exclude_minsyms; }, + [] (info_vars_funcs_options *opt) { return &opt->exclude_minsyms; }, nullptr, /* show_cmd_cb */ nullptr /* set_doc */ }, - gdb::option::string_option_def<info_print_options> { + gdb::option::string_option_def<info_vars_funcs_options> { "t", - [] (info_print_options *opt) { return &opt->type_regexp; }, + [] (info_vars_funcs_options *opt) { return &opt->type_regexp; + }, nullptr, /* show_cmd_cb */ nullptr /* set_doc */ } @@ -5014,20 +5051,20 @@ functions'. */ static gdb::option::option_def_group -make_info_print_options_def_group (info_print_options *opts) +make_info_vars_funcs_options_def_group (info_vars_funcs_options *opts) { - return {{info_print_options_defs}, opts}; + return {{info_vars_funcs_options_defs}, opts}; } /* Command completer for 'info variables' and 'info functions'. */ static void -info_print_command_completer (struct cmd_list_element *ignore, - completion_tracker &tracker, - const char *text, const char * /* word */) +info_vars_funcs_command_completer (struct cmd_list_element *ignore, + completion_tracker &tracker, + const char *text, const char * /* word */) { const auto group - = make_info_print_options_def_group (nullptr); + = make_info_vars_funcs_options_def_group (nullptr); if (gdb::option::complete_options (tracker, &text, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_OPERAND, group)) return; @@ -5041,8 +5078,8 @@ static void info_variables_command (const char *args, int from_tty) { - info_print_options opts; - auto grp = make_info_print_options_def_group (&opts); + info_vars_funcs_options opts; + auto grp = make_info_vars_funcs_options_def_group (&opts); gdb::option::process_options (&args, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_OPERAND, grp); if (args != nullptr && *args == '\0') @@ -5057,8 +5094,9 @@ static void info_functions_command (const char *args, int from_tty) { - info_print_options opts; - auto grp = make_info_print_options_def_group (&opts); + info_vars_funcs_options opts; + + auto grp = make_info_vars_funcs_options_def_group (&opts); gdb::option::process_options (&args, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_OPERAND, grp); if (args != nullptr && *args == '\0') @@ -5152,6 +5190,11 @@ { const char *colon = strchr (regexp, ':'); + /* Ignore the colon if it is part of a Windows drive. */ + if (HAS_DRIVE_SPEC (regexp) + && (regexp[2] == '/' || regexp[2] == '\\')) + colon = strchr (STRIP_DRIVE_SPEC (regexp), ':'); + if (colon && *(colon + 1) != ':') { int colon_index; @@ -5209,14 +5252,14 @@ const language_defn *lang = language_def (symbol_language); symbol_name_matcher_ftype *name_match - = get_symbol_name_matcher (lang, lookup_name); + = lang->get_symbol_name_matcher (lookup_name); return name_match (symbol_name, lookup_name, &match_res); } /* See symtab.h. */ -void +bool completion_list_add_name (completion_tracker &tracker, language symbol_language, const char *symname, @@ -5228,7 +5271,7 @@ /* Clip symbols that cannot match. */ if (!compare_symbol_name (symname, symbol_language, lookup_name, match_res)) - return; + return false; /* Refresh SYMNAME from the match string. It's potentially different depending on language. (E.g., on Ada, the match may be @@ -5252,6 +5295,8 @@ tracker.add_completion (std::move (completion), &match_res.match_for_lcd, text, word); } + + return true; } /* completion_list_add_name wrapper for struct symbol. */ @@ -5262,9 +5307,31 @@ const lookup_name_info &lookup_name, const char *text, const char *word) { - completion_list_add_name (tracker, SYMBOL_LANGUAGE (sym), - sym->natural_name (), - lookup_name, text, word); + if (!completion_list_add_name (tracker, sym->language (), + sym->natural_name (), + lookup_name, text, word)) + return; + + /* C++ function symbols include the parameters within both the msymbol + name and the symbol name. The problem is that the msymbol name will + describe the parameters in the most basic way, with typedefs stripped + out, while the symbol name will represent the types as they appear in + the program. This means we will see duplicate entries in the + completion tracker. The following converts the symbol name back to + the msymbol name and removes the msymbol name from the completion + tracker. */ + if (sym->language () == language_cplus + && SYMBOL_DOMAIN (sym) == VAR_DOMAIN + && SYMBOL_CLASS (sym) == LOC_BLOCK) + { + /* The call to canonicalize returns the empty string if the input + string is already in canonical form, thanks to this we don't + remove the symbol we just added above. */ + gdb::unique_xmalloc_ptr<char> str + = cp_canonicalize_string_no_typedefs (sym->natural_name ()); + if (str != nullptr) + tracker.remove_completion (str.get ()); + } } /* completion_list_add_name wrapper for struct minimal_symbol. */ @@ -5275,7 +5342,7 @@ const lookup_name_info &lookup_name, const char *text, const char *word) { - completion_list_add_name (tracker, MSYMBOL_LANGUAGE (sym), + completion_list_add_name (tracker, sym->language (), sym->natural_name (), lookup_name, text, word); } @@ -5403,13 +5470,13 @@ if (SYMBOL_CLASS (sym) == LOC_TYPEDEF) { struct type *t = SYMBOL_TYPE (sym); - enum type_code c = TYPE_CODE (t); + enum type_code c = t->code (); int j; if (c == TYPE_CODE_UNION || c == TYPE_CODE_STRUCT) - for (j = TYPE_N_BASECLASSES (t); j < TYPE_NFIELDS (t); j++) + for (j = TYPE_N_BASECLASSES (t); j < t->num_fields (); j++) if (TYPE_FIELD_NAME (t, j)) - completion_list_add_name (tracker, SYMBOL_LANGUAGE (sym), + completion_list_add_name (tracker, sym->language (), TYPE_FIELD_NAME (t, j), lookup_name, text, word); } @@ -5420,7 +5487,7 @@ bool symbol_is_function_or_method (symbol *sym) { - switch (TYPE_CODE (SYMBOL_TYPE (sym))) + switch (SYMBOL_TYPE (sym)->code ()) { case TYPE_CODE_FUNC: case TYPE_CODE_METHOD: @@ -5471,7 +5538,7 @@ CORE_ADDR msym_addr = MSYMBOL_VALUE_ADDRESS (objfile, minsym); if (MSYMBOL_TYPE (minsym) == mst_data_gnu_ifunc) { - struct gdbarch *gdbarch = get_objfile_arch (objfile); + struct gdbarch *gdbarch = objfile->arch (); msym_addr = gdbarch_convert_from_func_ptr_addr (gdbarch, msym_addr, @@ -5520,7 +5587,7 @@ if (code == TYPE_CODE_UNDEF || (SYMBOL_DOMAIN (sym) == STRUCT_DOMAIN - && TYPE_CODE (SYMBOL_TYPE (sym)) == code)) + && SYMBOL_TYPE (sym)->code () == code)) completion_list_add_symbol (tracker, sym, lookup_name, text, word); @@ -5671,7 +5738,7 @@ sym_text, word); } else if (SYMBOL_DOMAIN (sym) == STRUCT_DOMAIN - && TYPE_CODE (SYMBOL_TYPE (sym)) == code) + && SYMBOL_TYPE (sym)->code () == code) completion_list_add_symbol (tracker, sym, lookup_name, sym_text, word); } @@ -5733,19 +5800,6 @@ } } -void -default_collect_symbol_completion_matches (completion_tracker &tracker, - complete_symbol_mode mode, - symbol_name_match_type name_match_type, - const char *text, const char *word, - enum type_code code) -{ - return default_collect_symbol_completion_matches_break_on (tracker, mode, - name_match_type, - text, word, "", - code); -} - /* Collect all symbols (regardless of class) which begin by matching TEXT. */ @@ -5755,10 +5809,10 @@ symbol_name_match_type name_match_type, const char *text, const char *word) { - current_language->la_collect_symbol_completion_matches (tracker, mode, - name_match_type, - text, word, - TYPE_CODE_UNDEF); + current_language->collect_symbol_completion_matches (tracker, mode, + name_match_type, + text, word, + TYPE_CODE_UNDEF); } /* Like collect_symbol_completion_matches, but only collect @@ -5775,9 +5829,9 @@ gdb_assert (code == TYPE_CODE_UNION || code == TYPE_CODE_STRUCT || code == TYPE_CODE_ENUM); - current_language->la_collect_symbol_completion_matches (tracker, mode, - name_match_type, - text, word, code); + current_language->collect_symbol_completion_matches (tracker, mode, + name_match_type, + text, word, code); } /* Like collect_symbol_completion_matches, but collects a list of @@ -6092,6 +6146,16 @@ /* The languages above didn't identify the name of the main procedure. Fallback to "main". */ + + /* Try to find language for main in psymtabs. */ + enum language lang + = find_quick_global_symbol_language ("main", VAR_DOMAIN); + if (lang != language_unknown) + { + set_main_name ("main", lang); + return; + } + set_main_name ("main", language_unknown); } @@ -6264,42 +6328,6 @@ -/* Initialize the symbol SYM, and mark it as being owned by an objfile. */ - -void -initialize_objfile_symbol (struct symbol *sym) -{ - SYMBOL_OBJFILE_OWNED (sym) = 1; - SYMBOL_SECTION (sym) = -1; -} - -/* Allocate and initialize a new 'struct symbol' on OBJFILE's - obstack. */ - -struct symbol * -allocate_symbol (struct objfile *objfile) -{ - struct symbol *result = new (&objfile->objfile_obstack) symbol (); - - initialize_objfile_symbol (result); - - return result; -} - -/* Allocate and initialize a new 'struct template_symbol' on OBJFILE's - obstack. */ - -struct template_symbol * -allocate_template_symbol (struct objfile *objfile) -{ - struct template_symbol *result; - - result = new (&objfile->objfile_obstack) template_symbol (); - initialize_objfile_symbol (result); - - return result; -} - /* See symtab.h. */ struct objfile * @@ -6316,7 +6344,7 @@ { if (!SYMBOL_OBJFILE_OWNED (symbol)) return symbol->owner.arch; - return get_objfile_arch (SYMTAB_OBJFILE (symbol->owner.symtab)); + return SYMTAB_OBJFILE (symbol->owner.symtab)->arch (); } /* See symtab.h. */ @@ -6349,6 +6377,9 @@ for (objfile *objfile : current_program_space->objfiles ()) { + if (objfile->separate_debug_objfile_backlink != nullptr) + continue; + bound_minimal_symbol minsym = lookup_minimal_symbol_linkage (linkage_name, objfile); if (minsym.minsym != nullptr) @@ -6369,7 +6400,8 @@ for (objfile *objfile : current_program_space->objfiles ()) { - if ((objfile->flags & OBJF_MAINLINE) != 0) + if (objfile->separate_debug_objfile_backlink == nullptr + && (objfile->flags & OBJF_MAINLINE) != 0) { bound_minimal_symbol found = lookup_minimal_symbol_linkage (linkage_name, objfile); @@ -6377,8 +6409,7 @@ return BMSYMBOL_VALUE_ADDRESS (found); } } - return (minsym->value.address - + ANOFFSET (objf->section_offsets, minsym->section)); + return minsym->value.address + objf->section_offsets[minsym->section]; } @@ -6387,15 +6418,6 @@ static struct cmd_list_element *info_module_cmdlist = NULL; -/* Implement the 'info module' command, just displays some help text for - the available sub-commands. */ - -static void -info_module_command (const char *args, int from_tty) -{ - help_list (info_module_cmdlist, "info module ", class_info, gdb_stdout); -} - /* See symtab.h. */ std::vector<module_symbol_search> @@ -6691,8 +6713,9 @@ +void _initialize_symtab (); void -_initialize_symtab (void) +_initialize_symtab () { cmd_list_element *c; @@ -6705,7 +6728,7 @@ Prints the global and static variables.\n"), _("global and static variables"), true)); - set_cmd_completer_handle_brkchars (c, info_print_command_completer); + set_cmd_completer_handle_brkchars (c, info_vars_funcs_command_completer); if (dbx_commands) { c = add_com ("whereis", class_info, info_variables_command, @@ -6715,7 +6738,7 @@ Prints the global and static variables.\n"), _("global and static variables"), true)); - set_cmd_completer_handle_brkchars (c, info_print_command_completer); + set_cmd_completer_handle_brkchars (c, info_vars_funcs_command_completer); } c = add_info ("functions", info_functions_command, @@ -6725,7 +6748,7 @@ Prints the functions.\n"), _("functions"), true)); - set_cmd_completer_handle_brkchars (c, info_print_command_completer); + set_cmd_completer_handle_brkchars (c, info_vars_funcs_command_completer); c = add_info ("types", info_types_command, _("\ All type names, or those matching REGEXP.\n\ @@ -6753,10 +6776,10 @@ _("All module names, or those matching REGEXP.")); set_cmd_completer_handle_brkchars (c, info_types_command_completer); - add_prefix_cmd ("module", class_info, info_module_command, _("\ + add_basic_prefix_cmd ("module", class_info, _("\ Print information about modules."), - &info_module_cmdlist, "info module ", - 0, &infolist); + &info_module_cmdlist, "info module ", + 0, &infolist); c = add_cmd ("functions", class_info, info_module_functions_command, _("\ Display functions arranged by modules.\n\ diff -Nru gdb-9.1/gdb/symtab.h gdb-10.2/gdb/symtab.h --- gdb-9.1/gdb/symtab.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/symtab.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Symbol table definitions for GDB. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -185,29 +185,58 @@ class lookup_name_info final { public: - /* Create a new object. */ - lookup_name_info (std::string name, + /* We delete this overload so that the callers are required to + explicitly handle the lifetime of the name. */ + lookup_name_info (std::string &&name, + symbol_name_match_type match_type, + bool completion_mode = false, + bool ignore_parameters = false) = delete; + + /* This overload requires that NAME have a lifetime at least as long + as the lifetime of this object. */ + lookup_name_info (const std::string &name, symbol_name_match_type match_type, bool completion_mode = false, bool ignore_parameters = false) : m_match_type (match_type), m_completion_mode (completion_mode), m_ignore_parameters (ignore_parameters), - m_name (std::move (name)) + m_name (name) + {} + + /* This overload requires that NAME have a lifetime at least as long + as the lifetime of this object. */ + lookup_name_info (const char *name, + symbol_name_match_type match_type, + bool completion_mode = false, + bool ignore_parameters = false) + : m_match_type (match_type), + m_completion_mode (completion_mode), + m_ignore_parameters (ignore_parameters), + m_name (name) {} /* Getters. See description of each corresponding field. */ symbol_name_match_type match_type () const { return m_match_type; } bool completion_mode () const { return m_completion_mode; } - const std::string &name () const { return m_name; } + gdb::string_view name () const { return m_name; } const bool ignore_parameters () const { return m_ignore_parameters; } + /* Like the "name" method but guarantees that the returned string is + \0-terminated. */ + const char *c_str () const + { + /* Actually this is always guaranteed due to how the class is + constructed. */ + return m_name.data (); + } + /* Return a version of this lookup name that is usable with comparisons against symbols have no parameter info, such as psymbols and GDB index symbols. */ lookup_name_info make_ignore_params () const { - return lookup_name_info (m_name, m_match_type, m_completion_mode, + return lookup_name_info (c_str (), m_match_type, m_completion_mode, true /* ignore params */); } @@ -218,27 +247,27 @@ if (!m_demangled_hashes_p[lang]) { m_demangled_hashes[lang] - = ::search_name_hash (lang, language_lookup_name (lang).c_str ()); + = ::search_name_hash (lang, language_lookup_name (lang)); m_demangled_hashes_p[lang] = true; } return m_demangled_hashes[lang]; } /* Get the search name for searches in language LANG. */ - const std::string &language_lookup_name (language lang) const + const char *language_lookup_name (language lang) const { switch (lang) { case language_ada: - return ada ().lookup_name (); + return ada ().lookup_name ().c_str (); case language_cplus: - return cplus ().lookup_name (); + return cplus ().lookup_name ().c_str (); case language_d: - return d ().lookup_name (); + return d ().lookup_name ().c_str (); case language_go: - return go ().lookup_name (); + return go ().lookup_name ().c_str (); default: - return m_name; + return m_name.data (); } } @@ -287,7 +316,7 @@ symbol_name_match_type m_match_type; bool m_completion_mode; bool m_ignore_parameters; - std::string m_name; + gdb::string_view m_name; /* Language-specific info. These fields are filled lazily the first time a lookup is done in the corresponding language. They're @@ -389,7 +418,7 @@ and linkage_name () are different. */ const char *linkage_name () const - { return name; } + { return m_name; } /* Return SYMBOL's "natural" name, i.e. the name that it was called in the original source code. In languages like C++ where symbols may @@ -419,11 +448,31 @@ /* Set just the linkage name of a symbol; do not try to demangle it. Used for constructs which do not have a mangled name, - e.g. struct tags. Unlike SYMBOL_SET_NAMES, linkage_name must + e.g. struct tags. Unlike compute_and_set_names, linkage_name must be terminated and either already on the objfile's obstack or permanently allocated. */ void set_linkage_name (const char *linkage_name) - { name = linkage_name; } + { m_name = linkage_name; } + + /* Set the demangled name of this symbol to NAME. NAME must be + already correctly allocated. If the symbol's language is Ada, + then the name is ignored and the obstack is set. */ + void set_demangled_name (const char *name, struct obstack *obstack); + + enum language language () const + { return m_language; } + + /* Initializes the language dependent portion of a symbol + depending upon the language for the symbol. */ + void set_language (enum language language, struct obstack *obstack); + + /* Set the linkage and natural names of a symbol, by demangling + the linkage name. If linkage_name may not be nullterminated, + copy_name must be set to true. */ + void compute_and_set_names (gdb::string_view linkage_name, bool copy_name, + struct objfile_per_bfd_storage *per_bfd, + gdb::optional<hashval_t> hash + = gdb::optional<hashval_t> ()); /* Name of the symbol. This is a required field. Storage for the name is allocated on the objfile_obstack for the associated @@ -431,7 +480,7 @@ the mangled name and demangled name, this is the mangled name. */ - const char *name; + const char *m_name; /* Value of the symbol. Which member of this union to use, and what it means, depends on what kind of symbol this is and its @@ -479,7 +528,7 @@ This is used to select one of the fields from the language specific union above. */ - ENUM_BITFIELD(language) language : LANGUAGE_BITS; + ENUM_BITFIELD(language) m_language : LANGUAGE_BITS; /* This is only used by Ada. If set, then the 'demangled_name' field of language_specific is valid. Otherwise, the 'obstack' field is @@ -493,13 +542,6 @@ short section; }; -extern void symbol_set_demangled_name (struct general_symbol_info *, - const char *, - struct obstack *); - -extern const char *symbol_get_demangled_name - (const struct general_symbol_info *); - extern CORE_ADDR symbol_overlayed_address (CORE_ADDR, struct obj_section *); /* Return the address of SYM. The MAYBE_COPIED flag must be set on @@ -522,21 +564,12 @@ #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 SYMBOL_LANGUAGE(symbol) (symbol)->language #define SYMBOL_SECTION(symbol) (symbol)->section #define SYMBOL_OBJ_SECTION(objfile, symbol) \ (((symbol)->section >= 0) \ ? (&(((objfile)->sections)[(symbol)->section])) \ : NULL) -/* Initializes the language dependent portion of a symbol - depending upon the language for the symbol. */ -#define SYMBOL_SET_LANGUAGE(symbol,language,obstack) \ - (symbol_set_language ((symbol), (language), (obstack))) -extern void symbol_set_language (struct general_symbol_info *symbol, - enum language language, - struct obstack *obstack); - /* Try to determine the demangled name for a symbol, based on the language of that symbol. If the language is set to language_auto, it will attempt to find any demangling algorithm that works and @@ -546,18 +579,6 @@ extern char *symbol_find_demangled_name (struct general_symbol_info *gsymbol, const char *mangled); -/* Set the linkage and natural names of a symbol, by demangling - the linkage name. If linkage_name may not be nullterminated, - copy_name must be set to true. */ -#define SYMBOL_SET_NAMES(symbol,linkage_name,copy_name,objfile) \ - symbol_set_names ((symbol), linkage_name, copy_name, \ - (objfile)->per_bfd) -extern void symbol_set_names (struct general_symbol_info *symbol, - gdb::string_view linkage_name, bool copy_name, - struct objfile_per_bfd_storage *per_bfd, - gdb::optional<hashval_t> hash - = gdb::optional<hashval_t> ()); - /* Return true if NAME matches the "search" name of SYMBOL, according to the symbol's language. */ #define SYMBOL_MATCHES_SEARCH_NAME(symbol, name) \ @@ -732,7 +753,7 @@ #define MSYMBOL_VALUE_ADDRESS(objfile, symbol) \ (((symbol)->maybe_copied) ? get_msymbol_address (objfile, symbol) \ : ((symbol)->value.address \ - + ANOFFSET ((objfile)->section_offsets, ((symbol)->section)))) + + (objfile)->section_offsets[(symbol)->section])) /* For a bound minsym, we can easily compute the address directly. */ #define BMSYMBOL_VALUE_ADDRESS(symbol) \ MSYMBOL_VALUE_ADDRESS ((symbol).objfile, (symbol).minsym) @@ -741,7 +762,6 @@ #define MSYMBOL_VALUE_BYTES(symbol) (symbol)->value.bytes #define MSYMBOL_BLOCK_VALUE(symbol) (symbol)->value.block #define MSYMBOL_VALUE_CHAIN(symbol) (symbol)->value.chain -#define MSYMBOL_LANGUAGE(symbol) (symbol)->language #define MSYMBOL_SECTION(symbol) (symbol)->section #define MSYMBOL_OBJ_SECTION(objfile, symbol) \ (((symbol)->section >= 0) \ @@ -1087,7 +1107,7 @@ /* Class-initialization of bitfields is only allowed in C++20. */ : domain (UNDEF_DOMAIN), aclass_index (0), - is_objfile_owned (0), + is_objfile_owned (1), is_argument (0), is_inlined (0), maybe_copied (0), @@ -1095,17 +1115,19 @@ { /* We can't use an initializer list for members of a base class, and general_symbol_info needs to stay a POD type. */ - name = nullptr; + m_name = nullptr; value.ivalue = 0; language_specific.obstack = nullptr; - language = language_unknown; + m_language = language_unknown; ada_mangled = 0; - section = 0; + section = -1; /* GCC 4.8.5 (on CentOS 7) does not correctly compile class- initialization of unions, so we initialize it manually here. */ owner.symtab = nullptr; } + symbol (const symbol &) = default; + /* Data type of value */ struct type *type = nullptr; @@ -1284,7 +1306,13 @@ struct linetable_entry { + /* The line number for this entry. */ int line; + + /* True if this PC is a good location to place a breakpoint for LINE. */ + unsigned is_stmt : 1; + + /* The address for this entry. */ CORE_ADDR pc; }; @@ -1316,30 +1344,11 @@ }; /* How to relocate the symbols from each section in a symbol file. - Each struct contains an array of offsets. The ordering and meaning of the offsets is file-type-dependent; typically it is indexed by section numbers or symbol types or - something like that. - - To give us flexibility in changing the internal representation - of these offsets, the ANOFFSET macro must be used to insert and - extract offset values in the struct. */ - -struct section_offsets -{ - CORE_ADDR offsets[1]; /* As many as needed. */ -}; + something like that. */ -#define ANOFFSET(secoff, whichone) \ - ((whichone == -1) \ - ? (internal_error (__FILE__, __LINE__, \ - _("Section index is uninitialized")), -1) \ - : secoff->offsets[whichone]) - -/* The size of a section_offsets table for N sections. */ -#define SIZEOF_N_SECTION_OFFSETS(n) \ - (sizeof (struct section_offsets) \ - + sizeof (((struct section_offsets *) 0)->offsets) * ((n)-1)) +typedef std::vector<CORE_ADDR> section_offsets; /* Each source file or header is represented by a struct symtab. The name "symtab" is historical, another name for it is "filetab". @@ -1533,6 +1542,13 @@ extern enum language compunit_language (const struct compunit_symtab *cust); +/* Return true if this symtab is the "main" symtab of its compunit_symtab. */ + +static inline bool +is_main_symtab_of_compunit_symtab (struct symtab *symtab) +{ + return symtab == COMPUNIT_FILETABS (SYMTAB_COMPUNIT (symtab)); +} /* The virtual function table is now an array of structures which have the @@ -1628,16 +1644,6 @@ const struct block *block, domain_enum domain); -/* A default version of lookup_symbol_nonlocal for use by languages - that can't think of anything better to do. - This implements the C lookup rules. */ - -extern struct block_symbol - basic_lookup_symbol_nonlocal (const struct language_defn *langdef, - const char *, - const struct block *, - const domain_enum); - /* Some helper functions for languages that need to write their own lookup_symbol_nonlocal functions. */ @@ -1763,6 +1769,14 @@ CORE_ADDR *address, CORE_ADDR *endaddr, const struct block **block = nullptr); +/* Like find_pc_partial_function, above, but returns the underlying + general_symbol_info (rather than the name) as an out parameter. */ + +extern bool find_pc_partial_function_sym + (CORE_ADDR pc, const general_symbol_info **sym, + CORE_ADDR *address, CORE_ADDR *endaddr, + const struct block **block = nullptr); + /* Like find_pc_partial_function, above, but *ADDRESS and *ENDADDR are set to start and end addresses of the range containing the entry pc. @@ -1879,6 +1893,10 @@ bool explicit_pc = false; bool explicit_line = false; + /* If the line number information is valid, then this indicates if this + line table entry had the is-stmt flag set or not. */ + bool is_stmt = false; + /* The probe associated with this symtab_and_line. */ probe *prob = NULL; /* If PROBE is not NULL, then this is the objfile in which the probe @@ -1932,13 +1950,6 @@ symbol_name_match_type name_match_type, const char *text, const char *word, const char *break_on, enum type_code code); -extern void default_collect_symbol_completion_matches - (completion_tracker &tracker, - complete_symbol_mode, - symbol_name_match_type name_match_type, - const char *, - const char *, - enum type_code); extern void collect_symbol_completion_matches (completion_tracker &tracker, complete_symbol_mode mode, @@ -2218,10 +2229,6 @@ void fixup_section (struct general_symbol_info *ginfo, CORE_ADDR addr, struct objfile *objfile); -/* Look up objfile containing BLOCK. */ - -struct objfile *lookup_objfile_from_block (const struct block *block); - extern unsigned int symtab_create_debug; extern unsigned int symbol_lookup_debug; @@ -2281,20 +2288,18 @@ /* Storage type used by demangle_for_lookup. demangle_for_lookup either returns a const char * pointer that points to either of the fields of this type, or a pointer to the input NAME. This is done - this way because the underlying functions that demangle_for_lookup - calls either return a std::string (e.g., cp_canonicalize_string) or - a malloc'ed buffer (libiberty's demangled), and we want to avoid - unnecessary reallocation/string copying. */ + this way to avoid depending on the precise details of the storage + for the string. */ class demangle_result_storage { public: - /* Swap the std::string storage with STR, and return a pointer to - the beginning of the new string. */ - const char *swap_string (std::string &str) + /* Swap the malloc storage to STR, and return a pointer to the + beginning of the new string. */ + const char *set_malloc_ptr (gdb::unique_xmalloc_ptr<char> &&str) { - std::swap (m_string, str); - return m_string.c_str (); + m_malloc = std::move (str); + return m_malloc.get (); } /* Set the malloc storage to now point at PTR. Any previous malloc @@ -2308,7 +2313,6 @@ private: /* The storage. */ - std::string m_string; gdb::unique_xmalloc_ptr<char> m_malloc; }; @@ -2316,17 +2320,12 @@ demangle_for_lookup (const char *name, enum language lang, demangle_result_storage &storage); -struct symbol *allocate_symbol (struct objfile *); - -void initialize_objfile_symbol (struct symbol *); - -struct template_symbol *allocate_template_symbol (struct objfile *); - /* Test to see if the symbol of language SYMBOL_LANGUAGE specified by SYMNAME (which is already demangled for C++ symbols) matches SYM_TEXT in the first SYM_TEXT_LEN characters. If so, add it to - the current completion list. */ -void completion_list_add_name (completion_tracker &tracker, + the current completion list and return true. Otherwise, return + false. */ +bool completion_list_add_name (completion_tracker &tracker, language symbol_language, const char *symname, const lookup_name_info &lookup_name, diff -Nru gdb-9.1/gdb/syscalls/aarch64-linux.xml gdb-10.2/gdb/syscalls/aarch64-linux.xml --- gdb-9.1/gdb/syscalls/aarch64-linux.xml 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/syscalls/aarch64-linux.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ <?xml version="1.0"?> <!DOCTYPE syscalls_info SYSTEM "gdb-syscalls.dtd"> -<!-- Copyright (C) 2015-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2015-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/syscalls/aarch64-linux.xml.in gdb-10.2/gdb/syscalls/aarch64-linux.xml.in --- gdb-9.1/gdb/syscalls/aarch64-linux.xml.in 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/syscalls/aarch64-linux.xml.in 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2015-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2015-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/syscalls/amd64-linux.xml gdb-10.2/gdb/syscalls/amd64-linux.xml --- gdb-9.1/gdb/syscalls/amd64-linux.xml 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/syscalls/amd64-linux.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ <?xml version="1.0"?> <!DOCTYPE syscalls_info SYSTEM "gdb-syscalls.dtd"> -<!-- Copyright (C) 2009-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2009-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/syscalls/amd64-linux.xml.in gdb-10.2/gdb/syscalls/amd64-linux.xml.in --- gdb-9.1/gdb/syscalls/amd64-linux.xml.in 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/syscalls/amd64-linux.xml.in 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2009-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2009-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/syscalls/apply-defaults.xsl gdb-10.2/gdb/syscalls/apply-defaults.xsl --- gdb-9.1/gdb/syscalls/apply-defaults.xsl 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/syscalls/apply-defaults.xsl 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <!-- Generate syscall XML files based on defaults template. - Copyright (C) 2016-2020 Free Software Foundation, Inc. + Copyright (C) 2016-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/syscalls/arm-linux.py gdb-10.2/gdb/syscalls/arm-linux.py --- gdb-9.1/gdb/syscalls/arm-linux.py 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/syscalls/arm-linux.py 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2013-2020 Free Software Foundation, Inc. +# Copyright (C) 2013-2021 Free Software Foundation, Inc. # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/syscalls/arm-linux.xml gdb-10.2/gdb/syscalls/arm-linux.xml --- gdb-9.1/gdb/syscalls/arm-linux.xml 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/syscalls/arm-linux.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ <?xml version="1.0"?> <!DOCTYPE syscalls_info SYSTEM "gdb-syscalls.dtd"> -<!-- Copyright (C) 2009-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2009-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/syscalls/arm-linux.xml.in gdb-10.2/gdb/syscalls/arm-linux.xml.in --- gdb-9.1/gdb/syscalls/arm-linux.xml.in 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/syscalls/arm-linux.xml.in 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2009-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2009-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/syscalls/bfin-linux.xml.in gdb-10.2/gdb/syscalls/bfin-linux.xml.in --- gdb-9.1/gdb/syscalls/bfin-linux.xml.in 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/syscalls/bfin-linux.xml.in 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2010-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2010-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/syscalls/freebsd.xml gdb-10.2/gdb/syscalls/freebsd.xml --- gdb-9.1/gdb/syscalls/freebsd.xml 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/syscalls/freebsd.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ <?xml version="1.0"?> <!-- THIS FILE IS GENERATED -*- buffer-read-only: t -*- --> <!-- vi:set ro: --> -<!-- Copyright (C) 2009-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2009-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright @@ -390,7 +390,7 @@ <syscall name="truncate" number="479"/> <syscall name="ftruncate" number="480"/> <syscall name="thr_kill2" number="481"/> - <syscall name="shm_open" number="482"/> + <syscall name="freebsd12_shm_open" number="482" alias="shm_open"/> <syscall name="shm_unlink" number="483"/> <syscall name="cpuset" number="484"/> <syscall name="cpuset_setid" number="485"/> @@ -417,7 +417,7 @@ <syscall name="jail_get" number="506"/> <syscall name="jail_set" number="507"/> <syscall name="jail_remove" number="508"/> - <syscall name="closefrom" number="509"/> + <syscall name="freebsd12_closefrom" number="509" alias="closefrom"/> <syscall name="__semctl" number="510"/> <syscall name="msgctl" number="511"/> <syscall name="shmctl" number="512"/> @@ -471,4 +471,17 @@ <syscall name="cpuset_getdomain" number="561"/> <syscall name="cpuset_setdomain" number="562"/> <syscall name="getrandom" number="563"/> + <syscall name="getfhat" number="564"/> + <syscall name="fhlink" number="565"/> + <syscall name="fhlinkat" number="566"/> + <syscall name="fhreadlink" number="567"/> + <syscall name="funlinkat" number="568"/> + <syscall name="copy_file_range" number="569"/> + <syscall name="__sysctlbyname" number="570"/> + <syscall name="shm_open2" number="571"/> + <syscall name="shm_rename" number="572"/> + <syscall name="sigfastblock" number="573"/> + <syscall name="__realpathat" number="574"/> + <syscall name="close_range" number="575"/> + <syscall name="rpctls_syscall" number="576"/> </syscalls_info> diff -Nru gdb-9.1/gdb/syscalls/gdb-syscalls.dtd gdb-10.2/gdb/syscalls/gdb-syscalls.dtd --- gdb-9.1/gdb/syscalls/gdb-syscalls.dtd 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/syscalls/gdb-syscalls.dtd 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -<!-- Copyright (C) 2009-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2009-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/syscalls/i386-linux.xml gdb-10.2/gdb/syscalls/i386-linux.xml --- gdb-9.1/gdb/syscalls/i386-linux.xml 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/syscalls/i386-linux.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ <?xml version="1.0"?> <!DOCTYPE syscalls_info SYSTEM "gdb-syscalls.dtd"> -<!-- Copyright (C) 2009-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2009-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/syscalls/i386-linux.xml.in gdb-10.2/gdb/syscalls/i386-linux.xml.in --- gdb-9.1/gdb/syscalls/i386-linux.xml.in 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/syscalls/i386-linux.xml.in 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2009-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2009-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/syscalls/linux-defaults.xml.in gdb-10.2/gdb/syscalls/linux-defaults.xml.in --- gdb-9.1/gdb/syscalls/linux-defaults.xml.in 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/syscalls/linux-defaults.xml.in 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2009-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2009-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/syscalls/mips-n32-linux.xml gdb-10.2/gdb/syscalls/mips-n32-linux.xml --- gdb-9.1/gdb/syscalls/mips-n32-linux.xml 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/syscalls/mips-n32-linux.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ <?xml version="1.0"?> <!DOCTYPE syscalls_info SYSTEM "gdb-syscalls.dtd"> -<!-- Copyright (C) 2011-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2011-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/syscalls/mips-n32-linux.xml.in gdb-10.2/gdb/syscalls/mips-n32-linux.xml.in --- gdb-9.1/gdb/syscalls/mips-n32-linux.xml.in 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/syscalls/mips-n32-linux.xml.in 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2011-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2011-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/syscalls/mips-n64-linux.xml gdb-10.2/gdb/syscalls/mips-n64-linux.xml --- gdb-9.1/gdb/syscalls/mips-n64-linux.xml 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/syscalls/mips-n64-linux.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ <?xml version="1.0"?> <!DOCTYPE syscalls_info SYSTEM "gdb-syscalls.dtd"> -<!-- Copyright (C) 2011-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2011-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/syscalls/mips-n64-linux.xml.in gdb-10.2/gdb/syscalls/mips-n64-linux.xml.in --- gdb-9.1/gdb/syscalls/mips-n64-linux.xml.in 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/syscalls/mips-n64-linux.xml.in 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2011-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2011-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/syscalls/mips-o32-linux.xml gdb-10.2/gdb/syscalls/mips-o32-linux.xml --- gdb-9.1/gdb/syscalls/mips-o32-linux.xml 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/syscalls/mips-o32-linux.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ <?xml version="1.0"?> <!DOCTYPE syscalls_info SYSTEM "gdb-syscalls.dtd"> -<!-- Copyright (C) 2011-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2011-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/syscalls/mips-o32-linux.xml.in gdb-10.2/gdb/syscalls/mips-o32-linux.xml.in --- gdb-9.1/gdb/syscalls/mips-o32-linux.xml.in 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/syscalls/mips-o32-linux.xml.in 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2011-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2011-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/syscalls/netbsd.xml gdb-10.2/gdb/syscalls/netbsd.xml --- gdb-9.1/gdb/syscalls/netbsd.xml 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/syscalls/netbsd.xml 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,461 @@ +<?xml version="1.0"?> <!-- THIS FILE IS GENERATED -*- buffer-read-only: t -*- --> +<!-- vi:set ro: --> +<!-- Copyright (C) 2020-2021 Free Software Foundation, Inc. + + Copying and distribution of this file, with or without modification, + are permitted in any medium without royalty provided the copyright + notice and this notice are preserved. --> + +<!DOCTYPE feature SYSTEM "gdb-syscalls.dtd"> + +<!-- This file was generated using the following file: + + /usr/src/sys/sys/syscall.h + + The file mentioned above belongs to the NetBSD Kernel. --> + +<syscalls_info> + <syscall name="exit" number="1"/> + <syscall name="fork" number="2"/> + <syscall name="read" number="3"/> + <syscall name="write" number="4"/> + <syscall name="open" number="5"/> + <syscall name="close" number="6"/> + <syscall name="compat_50_wait4" number="7"/> + <syscall name="compat_43_ocreat" number="8"/> + <syscall name="link" number="9"/> + <syscall name="unlink" number="10"/> + <syscall name="execv" number="11"/> + <syscall name="chdir" number="12"/> + <syscall name="fchdir" number="13"/> + <syscall name="compat_50_mknod" number="14"/> + <syscall name="chmod" number="15"/> + <syscall name="chown" number="16"/> + <syscall name="break" number="17"/> + <syscall name="compat_20_getfsstat" number="18"/> + <syscall name="compat_43_olseek" number="19"/> + <syscall name="getpid" number="20"/> + <syscall name="compat_40_mount" number="21"/> + <syscall name="unmount" number="22"/> + <syscall name="setuid" number="23"/> + <syscall name="getuid" number="24"/> + <syscall name="geteuid" number="25"/> + <syscall name="ptrace" number="26"/> + <syscall name="recvmsg" number="27"/> + <syscall name="sendmsg" number="28"/> + <syscall name="recvfrom" number="29"/> + <syscall name="accept" number="30"/> + <syscall name="getpeername" number="31"/> + <syscall name="getsockname" number="32"/> + <syscall name="access" number="33"/> + <syscall name="chflags" number="34"/> + <syscall name="fchflags" number="35"/> + <syscall name="sync" number="36"/> + <syscall name="kill" number="37"/> + <syscall name="compat_43_stat43" number="38"/> + <syscall name="getppid" number="39"/> + <syscall name="compat_43_lstat43" number="40"/> + <syscall name="dup" number="41"/> + <syscall name="pipe" number="42"/> + <syscall name="getegid" number="43"/> + <syscall name="profil" number="44"/> + <syscall name="ktrace" number="45"/> + <syscall name="compat_13_sigaction13" number="46"/> + <syscall name="getgid" number="47"/> + <syscall name="compat_13_sigprocmask13" number="48"/> + <syscall name="__getlogin" number="49"/> + <syscall name="__setlogin" number="50"/> + <syscall name="acct" number="51"/> + <syscall name="compat_13_sigpending13" number="52"/> + <syscall name="compat_13_sigaltstack13" number="53"/> + <syscall name="ioctl" number="54"/> + <syscall name="compat_12_oreboot" number="55"/> + <syscall name="revoke" number="56"/> + <syscall name="symlink" number="57"/> + <syscall name="readlink" number="58"/> + <syscall name="execve" number="59"/> + <syscall name="umask" number="60"/> + <syscall name="chroot" number="61"/> + <syscall name="compat_43_fstat43" number="62"/> + <syscall name="compat_43_ogetkerninfo" number="63"/> + <syscall name="compat_43_ogetpagesize" number="64"/> + <syscall name="compat_12_msync" number="65"/> + <syscall name="vfork" number="66"/> + <syscall name="vread" number="67"/> + <syscall name="vwrite" number="68"/> + <syscall name="sbrk" number="69"/> + <syscall name="sstk" number="70"/> + <syscall name="compat_43_ommap" number="71"/> + <syscall name="vadvise" number="72"/> + <syscall name="munmap" number="73"/> + <syscall name="mprotect" number="74"/> + <syscall name="madvise" number="75"/> + <syscall name="vhangup" number="76"/> + <syscall name="vlimit" number="77"/> + <syscall name="mincore" number="78"/> + <syscall name="getgroups" number="79"/> + <syscall name="setgroups" number="80"/> + <syscall name="getpgrp" number="81"/> + <syscall name="setpgid" number="82"/> + <syscall name="compat_50_setitimer" number="83"/> + <syscall name="compat_43_owait" number="84"/> + <syscall name="compat_12_oswapon" number="85"/> + <syscall name="compat_50_getitimer" number="86"/> + <syscall name="compat_43_ogethostname" number="87"/> + <syscall name="compat_43_osethostname" number="88"/> + <syscall name="compat_43_ogetdtablesize" number="89"/> + <syscall name="dup2" number="90"/> + <syscall name="fcntl" number="92"/> + <syscall name="compat_50_select" number="93"/> + <syscall name="fsync" number="95"/> + <syscall name="setpriority" number="96"/> + <syscall name="compat_30_socket" number="97"/> + <syscall name="connect" number="98"/> + <syscall name="compat_43_oaccept" number="99"/> + <syscall name="getpriority" number="100"/> + <syscall name="compat_43_osend" number="101"/> + <syscall name="compat_43_orecv" number="102"/> + <syscall name="compat_13_sigreturn13" number="103"/> + <syscall name="bind" number="104"/> + <syscall name="setsockopt" number="105"/> + <syscall name="listen" number="106"/> + <syscall name="vtimes" number="107"/> + <syscall name="compat_43_osigvec" number="108"/> + <syscall name="compat_43_osigblock" number="109"/> + <syscall name="compat_43_osigsetmask" number="110"/> + <syscall name="compat_13_sigsuspend13" number="111"/> + <syscall name="compat_43_osigstack" number="112"/> + <syscall name="compat_43_orecvmsg" number="113"/> + <syscall name="compat_43_osendmsg" number="114"/> + <syscall name="vtrace" number="115"/> + <syscall name="compat_50_gettimeofday" number="116"/> + <syscall name="compat_50_getrusage" number="117"/> + <syscall name="getsockopt" number="118"/> + <syscall name="resuba" number="119"/> + <syscall name="readv" number="120"/> + <syscall name="writev" number="121"/> + <syscall name="compat_50_settimeofday" number="122"/> + <syscall name="fchown" number="123"/> + <syscall name="fchmod" number="124"/> + <syscall name="compat_43_orecvfrom" number="125"/> + <syscall name="setreuid" number="126"/> + <syscall name="setregid" number="127"/> + <syscall name="rename" number="128"/> + <syscall name="compat_43_otruncate" number="129"/> + <syscall name="compat_43_oftruncate" number="130"/> + <syscall name="flock" number="131"/> + <syscall name="mkfifo" number="132"/> + <syscall name="sendto" number="133"/> + <syscall name="shutdown" number="134"/> + <syscall name="socketpair" number="135"/> + <syscall name="mkdir" number="136"/> + <syscall name="rmdir" number="137"/> + <syscall name="compat_50_utimes" number="138"/> + <syscall name="compat_50_adjtime" number="140"/> + <syscall name="compat_43_ogetpeername" number="141"/> + <syscall name="compat_43_ogethostid" number="142"/> + <syscall name="compat_43_osethostid" number="143"/> + <syscall name="compat_43_ogetrlimit" number="144"/> + <syscall name="compat_43_osetrlimit" number="145"/> + <syscall name="compat_43_okillpg" number="146"/> + <syscall name="setsid" number="147"/> + <syscall name="compat_50_quotactl" number="148"/> + <syscall name="compat_43_oquota" number="149"/> + <syscall name="compat_43_ogetsockname" number="150"/> + <syscall name="nfssvc" number="155"/> + <syscall name="compat_43_ogetdirentries" number="156"/> + <syscall name="compat_20_statfs" number="157"/> + <syscall name="compat_20_fstatfs" number="158"/> + <syscall name="compat_30_getfh" number="161"/> + <syscall name="compat_09_ogetdomainname" number="162"/> + <syscall name="compat_09_osetdomainname" number="163"/> + <syscall name="compat_09_ouname" number="164"/> + <syscall name="sysarch" number="165"/> + <syscall name="compat_10_osemsys" number="169"/> + <syscall name="compat_10_omsgsys" number="170"/> + <syscall name="compat_10_oshmsys" number="171"/> + <syscall name="pread" number="173"/> + <syscall name="pwrite" number="174"/> + <syscall name="compat_30_ntp_gettime" number="175"/> + <syscall name="ntp_adjtime" number="176"/> + <syscall name="setgid" number="181"/> + <syscall name="setegid" number="182"/> + <syscall name="seteuid" number="183"/> + <syscall name="lfs_bmapv" number="184"/> + <syscall name="lfs_markv" number="185"/> + <syscall name="lfs_segclean" number="186"/> + <syscall name="compat_50_lfs_segwait" number="187"/> + <syscall name="compat_12_stat12" number="188"/> + <syscall name="compat_12_fstat12" number="189"/> + <syscall name="compat_12_lstat12" number="190"/> + <syscall name="pathconf" number="191"/> + <syscall name="fpathconf" number="192"/> + <syscall name="getsockopt2" number="193"/> + <syscall name="getrlimit" number="194"/> + <syscall name="setrlimit" number="195"/> + <syscall name="compat_12_getdirentries" number="196"/> + <syscall name="mmap" number="197"/> + <syscall name="lseek" number="199"/> + <syscall name="truncate" number="200"/> + <syscall name="ftruncate" number="201"/> + <syscall name="__sysctl" number="202"/> + <syscall name="mlock" number="203"/> + <syscall name="munlock" number="204"/> + <syscall name="undelete" number="205"/> + <syscall name="compat_50_futimes" number="206"/> + <syscall name="getpgid" number="207"/> + <syscall name="reboot" number="208"/> + <syscall name="poll" number="209"/> + <syscall name="afssys" number="210"/> + <syscall name="compat_14___semctl" number="220"/> + <syscall name="semget" number="221"/> + <syscall name="semop" number="222"/> + <syscall name="semconfig" number="223"/> + <syscall name="compat_14_msgctl" number="224"/> + <syscall name="msgget" number="225"/> + <syscall name="msgsnd" number="226"/> + <syscall name="msgrcv" number="227"/> + <syscall name="shmat" number="228"/> + <syscall name="compat_14_shmctl" number="229"/> + <syscall name="shmdt" number="230"/> + <syscall name="shmget" number="231"/> + <syscall name="compat_50_clock_gettime" number="232"/> + <syscall name="compat_50_clock_settime" number="233"/> + <syscall name="compat_50_clock_getres" number="234"/> + <syscall name="timer_create" number="235"/> + <syscall name="timer_delete" number="236"/> + <syscall name="compat_50_timer_settime" number="237"/> + <syscall name="compat_50_timer_gettime" number="238"/> + <syscall name="timer_getoverrun" number="239"/> + <syscall name="compat_50_nanosleep" number="240"/> + <syscall name="fdatasync" number="241"/> + <syscall name="mlockall" number="242"/> + <syscall name="munlockall" number="243"/> + <syscall name="compat_50___sigtimedwait" number="244"/> + <syscall name="sigqueueinfo" number="245"/> + <syscall name="modctl" number="246"/> + <syscall name="_ksem_init" number="247"/> + <syscall name="_ksem_open" number="248"/> + <syscall name="_ksem_unlink" number="249"/> + <syscall name="_ksem_close" number="250"/> + <syscall name="_ksem_post" number="251"/> + <syscall name="_ksem_wait" number="252"/> + <syscall name="_ksem_trywait" number="253"/> + <syscall name="_ksem_getvalue" number="254"/> + <syscall name="_ksem_destroy" number="255"/> + <syscall name="_ksem_timedwait" number="256"/> + <syscall name="mq_open" number="257"/> + <syscall name="mq_close" number="258"/> + <syscall name="mq_unlink" number="259"/> + <syscall name="mq_getattr" number="260"/> + <syscall name="mq_setattr" number="261"/> + <syscall name="mq_notify" number="262"/> + <syscall name="mq_send" number="263"/> + <syscall name="mq_receive" number="264"/> + <syscall name="compat_50_mq_timedsend" number="265"/> + <syscall name="compat_50_mq_timedreceive" number="266"/> + <syscall name="__posix_rename" number="270"/> + <syscall name="swapctl" number="271"/> + <syscall name="compat_30_getdents" number="272"/> + <syscall name="minherit" number="273"/> + <syscall name="lchmod" number="274"/> + <syscall name="lchown" number="275"/> + <syscall name="compat_50_lutimes" number="276"/> + <syscall name="__msync13" number="277"/> + <syscall name="compat_30___stat13" number="278"/> + <syscall name="compat_30___fstat13" number="279"/> + <syscall name="compat_30___lstat13" number="280"/> + <syscall name="__sigaltstack14" number="281"/> + <syscall name="__vfork14" number="282"/> + <syscall name="__posix_chown" number="283"/> + <syscall name="__posix_fchown" number="284"/> + <syscall name="__posix_lchown" number="285"/> + <syscall name="getsid" number="286"/> + <syscall name="__clone" number="287"/> + <syscall name="fktrace" number="288"/> + <syscall name="preadv" number="289"/> + <syscall name="pwritev" number="290"/> + <syscall name="compat_16___sigaction14" number="291"/> + <syscall name="__sigpending14" number="292"/> + <syscall name="__sigprocmask14" number="293"/> + <syscall name="__sigsuspend14" number="294"/> + <syscall name="compat_16___sigreturn14" number="295"/> + <syscall name="__getcwd" number="296"/> + <syscall name="fchroot" number="297"/> + <syscall name="compat_30_fhopen" number="298"/> + <syscall name="compat_30_fhstat" number="299"/> + <syscall name="compat_20_fhstatfs" number="300"/> + <syscall name="compat_50_____semctl13" number="301"/> + <syscall name="compat_50___msgctl13" number="302"/> + <syscall name="compat_50___shmctl13" number="303"/> + <syscall name="lchflags" number="304"/> + <syscall name="issetugid" number="305"/> + <syscall name="utrace" number="306"/> + <syscall name="getcontext" number="307"/> + <syscall name="setcontext" number="308"/> + <syscall name="_lwp_create" number="309"/> + <syscall name="_lwp_exit" number="310"/> + <syscall name="_lwp_self" number="311"/> + <syscall name="_lwp_wait" number="312"/> + <syscall name="_lwp_suspend" number="313"/> + <syscall name="_lwp_continue" number="314"/> + <syscall name="_lwp_wakeup" number="315"/> + <syscall name="_lwp_getprivate" number="316"/> + <syscall name="_lwp_setprivate" number="317"/> + <syscall name="_lwp_kill" number="318"/> + <syscall name="_lwp_detach" number="319"/> + <syscall name="compat_50__lwp_park" number="320"/> + <syscall name="_lwp_unpark" number="321"/> + <syscall name="_lwp_unpark_all" number="322"/> + <syscall name="_lwp_setname" number="323"/> + <syscall name="_lwp_getname" number="324"/> + <syscall name="_lwp_ctl" number="325"/> + <syscall name="_lwp_gettid" number="326"/> + <syscall name="compat_60_sa_register" number="330"/> + <syscall name="compat_60_sa_stacks" number="331"/> + <syscall name="compat_60_sa_enable" number="332"/> + <syscall name="compat_60_sa_setconcurrency" number="333"/> + <syscall name="compat_60_sa_yield" number="334"/> + <syscall name="compat_60_sa_preempt" number="335"/> + <syscall name="sys_sa_unblockyield" number="336"/> + <syscall name="__sigaction_sigtramp" number="340"/> + <syscall name="sys_pmc_get_info" number="341"/> + <syscall name="sys_pmc_control" number="342"/> + <syscall name="rasctl" number="343"/> + <syscall name="kqueue" number="344"/> + <syscall name="compat_50_kevent" number="345"/> + <syscall name="_sched_setparam" number="346"/> + <syscall name="_sched_getparam" number="347"/> + <syscall name="_sched_setaffinity" number="348"/> + <syscall name="_sched_getaffinity" number="349"/> + <syscall name="sched_yield" number="350"/> + <syscall name="_sched_protect" number="351"/> + <syscall name="fsync_range" number="354"/> + <syscall name="uuidgen" number="355"/> + <syscall name="compat_90_getvfsstat" number="356"/> + <syscall name="compat_90_statvfs1" number="357"/> + <syscall name="compat_90_fstatvfs1" number="358"/> + <syscall name="compat_30_fhstatvfs1" number="359"/> + <syscall name="extattrctl" number="360"/> + <syscall name="extattr_set_file" number="361"/> + <syscall name="extattr_get_file" number="362"/> + <syscall name="extattr_delete_file" number="363"/> + <syscall name="extattr_set_fd" number="364"/> + <syscall name="extattr_get_fd" number="365"/> + <syscall name="extattr_delete_fd" number="366"/> + <syscall name="extattr_set_link" number="367"/> + <syscall name="extattr_get_link" number="368"/> + <syscall name="extattr_delete_link" number="369"/> + <syscall name="extattr_list_fd" number="370"/> + <syscall name="extattr_list_file" number="371"/> + <syscall name="extattr_list_link" number="372"/> + <syscall name="compat_50_pselect" number="373"/> + <syscall name="compat_50_pollts" number="374"/> + <syscall name="setxattr" number="375"/> + <syscall name="lsetxattr" number="376"/> + <syscall name="fsetxattr" number="377"/> + <syscall name="getxattr" number="378"/> + <syscall name="lgetxattr" number="379"/> + <syscall name="fgetxattr" number="380"/> + <syscall name="listxattr" number="381"/> + <syscall name="llistxattr" number="382"/> + <syscall name="flistxattr" number="383"/> + <syscall name="removexattr" number="384"/> + <syscall name="lremovexattr" number="385"/> + <syscall name="fremovexattr" number="386"/> + <syscall name="compat_50___stat30" number="387"/> + <syscall name="compat_50___fstat30" number="388"/> + <syscall name="compat_50___lstat30" number="389"/> + <syscall name="__getdents30" number="390"/> + <syscall name="compat_30___fhstat30" number="392"/> + <syscall name="compat_50___ntp_gettime30" number="393"/> + <syscall name="__socket30" number="394"/> + <syscall name="__getfh30" number="395"/> + <syscall name="__fhopen40" number="396"/> + <syscall name="compat_90_fhstatvfs1" number="397"/> + <syscall name="compat_50___fhstat40" number="398"/> + <syscall name="aio_cancel" number="399"/> + <syscall name="aio_error" number="400"/> + <syscall name="aio_fsync" number="401"/> + <syscall name="aio_read" number="402"/> + <syscall name="aio_return" number="403"/> + <syscall name="compat_50_aio_suspend" number="404"/> + <syscall name="aio_write" number="405"/> + <syscall name="lio_listio" number="406"/> + <syscall name="__mount50" number="410"/> + <syscall name="mremap" number="411"/> + <syscall name="pset_create" number="412"/> + <syscall name="pset_destroy" number="413"/> + <syscall name="pset_assign" number="414"/> + <syscall name="_pset_bind" number="415"/> + <syscall name="__posix_fadvise50" number="416"/> + <syscall name="__select50" number="417"/> + <syscall name="__gettimeofday50" number="418"/> + <syscall name="__settimeofday50" number="419"/> + <syscall name="__utimes50" number="420"/> + <syscall name="__adjtime50" number="421"/> + <syscall name="__lfs_segwait50" number="422"/> + <syscall name="__futimes50" number="423"/> + <syscall name="__lutimes50" number="424"/> + <syscall name="__setitimer50" number="425"/> + <syscall name="__getitimer50" number="426"/> + <syscall name="__clock_gettime50" number="427"/> + <syscall name="__clock_settime50" number="428"/> + <syscall name="__clock_getres50" number="429"/> + <syscall name="__nanosleep50" number="430"/> + <syscall name="____sigtimedwait50" number="431"/> + <syscall name="__mq_timedsend50" number="432"/> + <syscall name="__mq_timedreceive50" number="433"/> + <syscall name="compat_60__lwp_park" number="434"/> + <syscall name="__kevent50" number="435"/> + <syscall name="__pselect50" number="436"/> + <syscall name="__pollts50" number="437"/> + <syscall name="__aio_suspend50" number="438"/> + <syscall name="__stat50" number="439"/> + <syscall name="__fstat50" number="440"/> + <syscall name="__lstat50" number="441"/> + <syscall name="____semctl50" number="442"/> + <syscall name="__shmctl50" number="443"/> + <syscall name="__msgctl50" number="444"/> + <syscall name="__getrusage50" number="445"/> + <syscall name="__timer_settime50" number="446"/> + <syscall name="__timer_gettime50" number="447"/> + <syscall name="__ntp_gettime50" number="448"/> + <syscall name="__wait450" number="449"/> + <syscall name="__mknod50" number="450"/> + <syscall name="__fhstat50" number="451"/> + <syscall name="pipe2" number="453"/> + <syscall name="dup3" number="454"/> + <syscall name="kqueue1" number="455"/> + <syscall name="paccept" number="456"/> + <syscall name="linkat" number="457"/> + <syscall name="renameat" number="458"/> + <syscall name="mkfifoat" number="459"/> + <syscall name="mknodat" number="460"/> + <syscall name="mkdirat" number="461"/> + <syscall name="faccessat" number="462"/> + <syscall name="fchmodat" number="463"/> + <syscall name="fchownat" number="464"/> + <syscall name="fexecve" number="465"/> + <syscall name="fstatat" number="466"/> + <syscall name="utimensat" number="467"/> + <syscall name="openat" number="468"/> + <syscall name="readlinkat" number="469"/> + <syscall name="symlinkat" number="470"/> + <syscall name="unlinkat" number="471"/> + <syscall name="futimens" number="472"/> + <syscall name="__quotactl" number="473"/> + <syscall name="posix_spawn" number="474"/> + <syscall name="recvmmsg" number="475"/> + <syscall name="sendmmsg" number="476"/> + <syscall name="clock_nanosleep" number="477"/> + <syscall name="___lwp_park60" number="478"/> + <syscall name="posix_fallocate" number="479"/> + <syscall name="fdiscard" number="480"/> + <syscall name="wait6" number="481"/> + <syscall name="clock_getcpuclockid2" number="482"/> + <syscall name="__getvfsstat90" number="483"/> + <syscall name="__statvfs190" number="484"/> + <syscall name="__fstatvfs190" number="485"/> + <syscall name="__fhstatvfs190" number="486"/> +</syscalls_info> diff -Nru gdb-9.1/gdb/syscalls/ppc64-linux.xml gdb-10.2/gdb/syscalls/ppc64-linux.xml --- gdb-9.1/gdb/syscalls/ppc64-linux.xml 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/syscalls/ppc64-linux.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ <?xml version="1.0"?> <!DOCTYPE syscalls_info SYSTEM "gdb-syscalls.dtd"> -<!-- Copyright (C) 2009-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2009-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/syscalls/ppc64-linux.xml.in gdb-10.2/gdb/syscalls/ppc64-linux.xml.in --- gdb-9.1/gdb/syscalls/ppc64-linux.xml.in 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/syscalls/ppc64-linux.xml.in 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2009-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2009-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/syscalls/ppc-linux.xml gdb-10.2/gdb/syscalls/ppc-linux.xml --- gdb-9.1/gdb/syscalls/ppc-linux.xml 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/syscalls/ppc-linux.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ <?xml version="1.0"?> <!DOCTYPE syscalls_info SYSTEM "gdb-syscalls.dtd"> -<!-- Copyright (C) 2009-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2009-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/syscalls/ppc-linux.xml.in gdb-10.2/gdb/syscalls/ppc-linux.xml.in --- gdb-9.1/gdb/syscalls/ppc-linux.xml.in 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/syscalls/ppc-linux.xml.in 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2009-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2009-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/syscalls/s390-linux.xml gdb-10.2/gdb/syscalls/s390-linux.xml --- gdb-9.1/gdb/syscalls/s390-linux.xml 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/syscalls/s390-linux.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ <?xml version="1.0"?> <!DOCTYPE syscalls_info SYSTEM "gdb-syscalls.dtd"> -<!-- Copyright (C) 2009-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2009-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/syscalls/s390-linux.xml.in gdb-10.2/gdb/syscalls/s390-linux.xml.in --- gdb-9.1/gdb/syscalls/s390-linux.xml.in 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/syscalls/s390-linux.xml.in 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2009-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2009-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/syscalls/s390x-linux.xml gdb-10.2/gdb/syscalls/s390x-linux.xml --- gdb-9.1/gdb/syscalls/s390x-linux.xml 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/syscalls/s390x-linux.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ <?xml version="1.0"?> <!DOCTYPE syscalls_info SYSTEM "gdb-syscalls.dtd"> -<!-- Copyright (C) 2009-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2009-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/syscalls/s390x-linux.xml.in gdb-10.2/gdb/syscalls/s390x-linux.xml.in --- gdb-9.1/gdb/syscalls/s390x-linux.xml.in 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/syscalls/s390x-linux.xml.in 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2009-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2009-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/syscalls/sparc64-linux.xml gdb-10.2/gdb/syscalls/sparc64-linux.xml --- gdb-9.1/gdb/syscalls/sparc64-linux.xml 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/syscalls/sparc64-linux.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ <?xml version="1.0"?> <!DOCTYPE syscalls_info SYSTEM "gdb-syscalls.dtd"> -<!-- Copyright (C) 2010-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2010-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/syscalls/sparc64-linux.xml.in gdb-10.2/gdb/syscalls/sparc64-linux.xml.in --- gdb-9.1/gdb/syscalls/sparc64-linux.xml.in 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/syscalls/sparc64-linux.xml.in 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2010-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2010-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/syscalls/sparc-linux.xml gdb-10.2/gdb/syscalls/sparc-linux.xml --- gdb-9.1/gdb/syscalls/sparc-linux.xml 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/syscalls/sparc-linux.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ <?xml version="1.0"?> <!DOCTYPE syscalls_info SYSTEM "gdb-syscalls.dtd"> -<!-- Copyright (C) 2010-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2010-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/syscalls/sparc-linux.xml.in gdb-10.2/gdb/syscalls/sparc-linux.xml.in --- gdb-9.1/gdb/syscalls/sparc-linux.xml.in 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/syscalls/sparc-linux.xml.in 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2010-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2010-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/syscalls/update-freebsd.sh gdb-10.2/gdb/syscalls/update-freebsd.sh --- gdb-9.1/gdb/syscalls/update-freebsd.sh 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/syscalls/update-freebsd.sh 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ #! /bin/sh -# Copyright (C) 2018-2020 Free Software Foundation, Inc. +# Copyright (C) 2018-2021 Free Software Foundation, Inc. # # This file is part of GDB. # @@ -29,14 +29,14 @@ if [ $# -ne 1 ]; then echo "Error: Path to syscall.h missing. Aborting." - echo "Usage: update-gnulib.sh <path-to-syscall.h>" + echo "Usage: update-freebsd.sh <path-to-syscall.h>" exit 1 fi cat > freebsd.xml.tmp <<EOF <?xml version="1.0"?> <!-- THIS FILE IS GENERATED -*- buffer-read-only: t -*- --> <!-- vi:set ro: --> -<!-- Copyright (C) 2009-2018 Free Software Foundation, Inc. +<!-- Copyright (C) 2009-2020 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright @@ -69,7 +69,7 @@ } /\/\* [0-9]* is freebsd[0-9]* [a-z_]* \*\// { printf " <syscall name=\"%s_%s\" number=\"%s\" alias=\"%s\"/>\n", $4, $5, $2, $5 -}' $1 >> freebsd.xml.tmp +}' "$1" >> freebsd.xml.tmp cat >> freebsd.xml.tmp <<EOF </syscalls_info> diff -Nru gdb-9.1/gdb/syscalls/update-netbsd.sh gdb-10.2/gdb/syscalls/update-netbsd.sh --- gdb-9.1/gdb/syscalls/update-netbsd.sh 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/syscalls/update-netbsd.sh 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,78 @@ +#! /bin/sh + +# Copyright (C) 2020-2021 Free Software Foundation, Inc. +# +# This file is part of GDB. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Usage: update-netbsd.sh <path-to-syscall.h> +# Update the netbsd.xml file. +# +# NetBSD uses the same list of system calls on all architectures. +# The list is defined in the sys/kern/syscalls.master file in the +# NetBSD source tree. This file is used as an input to generate +# several files that are also stored in NetBSD's source tree. This +# script parses one of those generated files (sys/sys/syscall.h) +# rather than syscalls.master as syscall.h is easier to parse. + +if [ $# -ne 1 ]; then + echo "Error: Path to syscall.h missing. Aborting." + echo "Usage: update-gnulib.sh <path-to-syscall.h>" + exit 1 +fi + +cat > netbsd.xml.tmp <<EOF +<?xml version="1.0"?> <!-- THIS FILE IS GENERATED -*- buffer-read-only: t -*- --> +<!-- vi:set ro: --> +<!-- Copyright (C) 2020 Free Software Foundation, Inc. + + Copying and distribution of this file, with or without modification, + are permitted in any medium without royalty provided the copyright + notice and this notice are preserved. --> + +<!DOCTYPE feature SYSTEM "gdb-syscalls.dtd"> + +<!-- This file was generated using the following file: + + /usr/src/sys/sys/syscall.h + + The file mentioned above belongs to the NetBSD Kernel. --> + +<syscalls_info> +EOF + +awk ' +/MAXSYSCALL/ || /_SYS_SYSCALL_H_/ || /MAXSYSARGS/ || /syscall/ || /NSYSENT/ { + next +} +/^#define/ { + sub(/^SYS_/,"",$2); + printf " <syscall name=\"%s\" number=\"%s\"", $2, $3 + if (sub(/^netbsd[0-9]*_/,"",$2) != 0) + printf " alias=\"%s\"", $2 + printf "/>\n" +} +/\/\* [0-9]* is obsolete [a-z_]* \*\// { + printf " <syscall name=\"%s\" number=\"%s\"/>\n", $5, $2 +} +/\/\* [0-9]* is netbsd[0-9]* [a-z_]* \*\// { + printf " <syscall name=\"%s_%s\" number=\"%s\" alias=\"%s\"/>\n", $4, $5, $2, $5 +}' "$1" >> netbsd.xml.tmp + +cat >> netbsd.xml.tmp <<EOF +</syscalls_info> +EOF + +../../move-if-change netbsd.xml.tmp netbsd.xml diff -Nru gdb-9.1/gdb/system-gdbinit/elinos.py gdb-10.2/gdb/system-gdbinit/elinos.py --- gdb-9.1/gdb/system-gdbinit/elinos.py 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/system-gdbinit/elinos.py 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2011-2020 Free Software Foundation, Inc. +# Copyright (C) 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/system-gdbinit/wrs-linux.py gdb-10.2/gdb/system-gdbinit/wrs-linux.py --- gdb-9.1/gdb/system-gdbinit/wrs-linux.py 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/system-gdbinit/wrs-linux.py 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2011-2020 Free Software Foundation, Inc. +# Copyright (C) 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/target/resume.h gdb-10.2/gdb/target/resume.h --- gdb-9.1/gdb/target/resume.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/target/resume.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Target resumption definitions and prototypes. - Copyright (C) 1990-2020 Free Software Foundation, Inc. + Copyright (C) 1990-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/target/target.h gdb-10.2/gdb/target/target.h --- gdb-9.1/gdb/target/target.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/target/target.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Declarations for common target functions. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/target/wait.h gdb-10.2/gdb/target/wait.h --- gdb-9.1/gdb/target/wait.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/target/wait.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target wait definitions and prototypes. - Copyright (C) 1990-2020 Free Software Foundation, Inc. + Copyright (C) 1990-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/target/waitstatus.c gdb-10.2/gdb/target/waitstatus.c --- gdb-9.1/gdb/target/waitstatus.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/target/waitstatus.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Target waitstatus implementations. - Copyright (C) 1990-2020 Free Software Foundation, Inc. + Copyright (C) 1990-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/target/waitstatus.h gdb-10.2/gdb/target/waitstatus.h --- gdb-9.1/gdb/target/waitstatus.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/target/waitstatus.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Target waitstatus definitions and prototypes. - Copyright (C) 1990-2020 Free Software Foundation, Inc. + Copyright (C) 1990-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/target.c gdb-10.2/gdb/target.c --- gdb-9.1/gdb/target.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/target.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Select target systems and architectures at runtime for GDB. - Copyright (C) 1990-2020 Free Software Foundation, Inc. + Copyright (C) 1990-2021 Free Software Foundation, Inc. Contributed by Cygnus Support. @@ -49,6 +49,8 @@ #include "gdbsupport/byte-vector.h" #include "terminal.h" #include <unordered_map> +#include "target-connection.h" +#include "valprint.h" static void generic_tls_error (void) ATTRIBUTE_NORETURN; @@ -65,9 +67,6 @@ static ptid_t default_get_ada_task_ptid (struct target_ops *self, long lwp, long tid); -static int default_follow_fork (struct target_ops *self, int follow_child, - int detach_fork); - static void default_mourn_inferior (struct target_ops *self); static int default_search_memory (struct target_ops *ops, @@ -110,10 +109,6 @@ static struct target_ops *the_debug_target; -/* The target stack. */ - -static target_stack g_target_stack; - /* Top of target stack. */ /* The target structure we are currently using to talk to a process or file or whatever "inferior" we have. */ @@ -121,7 +116,7 @@ target_ops * current_top_target () { - return g_target_stack.top (); + return current_inferior ()->top_target (); } /* Command list for target. */ @@ -174,15 +169,6 @@ fprintf_filtered (file, _("Target debugging is %s.\n"), value); } -/* The user just typed 'target' without the name of a target. */ - -static void -target_command (const char *arg, int from_tty) -{ - fputs_filtered ("Argument required (target name). Try `help target'\n", - gdb_stdout); -} - int target_has_all_memory_1 (void) { @@ -223,20 +209,22 @@ return 0; } -int -target_has_execution_1 (ptid_t the_ptid) +bool +target_has_execution_1 (inferior *inf) { - for (target_ops *t = current_top_target (); t != NULL; t = t->beneath ()) - if (t->has_execution (the_ptid)) - return 1; + for (target_ops *t = inf->top_target (); + t != nullptr; + t = inf->find_target_beneath (t)) + if (t->has_execution (inf)) + return true; - return 0; + return false; } int target_has_execution_current (void) { - return target_has_execution_1 (inferior_ptid); + return target_has_execution_1 (current_inferior ()); } /* This is used to implement the various target commands. */ @@ -273,13 +261,13 @@ func_slot = func; if (targetlist == NULL) - add_prefix_cmd ("target", class_run, target_command, _("\ + add_basic_prefix_cmd ("target", class_run, _("\ Connect to a target machine or process.\n\ The first argument is the type or protocol of the target machine.\n\ Remaining arguments are interpreted by the target protocol. For more\n\ information on the arguments for a particular protocol, type\n\ `help target ' followed by the protocol name."), - &targetlist, "target ", 0, &cmdlist); + &targetlist, "target ", 0, &cmdlist); c = add_cmd (t.shortname, no_class, t.doc, &targetlist); set_cmd_context (c, (void *) &t); set_cmd_sfunc (c, open_target); @@ -501,13 +489,16 @@ bool target_supports_terminal_ours (void) { - /* This can be called before there is any target, so we must check - for nullptr here. */ - target_ops *top = current_top_target (); + /* The current top target is the target at the top of the target + stack of the current inferior. While normally there's always an + inferior, we must check for nullptr here because we can get here + very early during startup, before the initial inferior is first + created. */ + inferior *inf = current_inferior (); - if (top == nullptr) + if (inf == nullptr) return false; - return top->supports_terminal_ours (); + return inf->top_target ()->supports_terminal_ours (); } static void @@ -556,11 +547,31 @@ /* See target.h. */ void +decref_target (target_ops *t) +{ + t->decref (); + if (t->refcount () == 0) + { + if (t->stratum () == process_stratum) + connection_list_remove (as_process_stratum_target (t)); + target_close (t); + } +} + +/* See target.h. */ + +void target_stack::push (target_ops *t) { - /* If there's already a target at this stratum, remove it. */ + t->incref (); + strata stratum = t->stratum (); + if (stratum == process_stratum) + connection_list_add (as_process_stratum_target (t)); + + /* If there's already a target at this stratum, remove it. */ + if (m_stack[stratum] != NULL) unpush (m_stack[stratum]); @@ -576,15 +587,15 @@ void push_target (struct target_ops *t) { - g_target_stack.push (t); + current_inferior ()->push_target (t); } -/* See target.h */ +/* See target.h. */ void push_target (target_ops_up &&t) { - g_target_stack.push (t.get ()); + current_inferior ()->push_target (t.get ()); t.release (); } @@ -593,7 +604,7 @@ int unpush_target (struct target_ops *t) { - return g_target_stack.unpush (t); + return current_inferior ()->unpush_target (t); } /* See target.h. */ @@ -625,10 +636,13 @@ if (m_top == stratum) m_top = t->beneath ()->stratum (); - /* Finally close the target. Note we do this after unchaining, so - any target method calls from within the target_close - implementation don't end up in T anymore. */ - target_close (t); + /* Finally close the target, if there are no inferiors + referencing this target still. Note we do this after unchaining, + so any target method calls from within the target_close + implementation don't end up in T anymore. Do leave the target + open if we have are other inferiors referencing this target + still. */ + decref_target (t); return true; } @@ -670,12 +684,13 @@ pop_all_targets_above (dummy_stratum); } -/* Return 1 if T is now pushed in the target stack. Return 0 otherwise. */ +/* Return true if T is now pushed in the current inferior's target + stack. Return false otherwise. */ -int -target_is_pushed (struct target_ops *t) +bool +target_is_pushed (target_ops *t) { - return g_target_stack.is_pushed (t); + return current_inferior ()->target_is_pushed (t); } /* Default implementation of to_get_thread_local_address. */ @@ -789,81 +804,24 @@ }; -#undef MIN -#define MIN(A, B) (((A) <= (B)) ? (A) : (B)) - -/* target_read_string -- read a null terminated string, up to LEN bytes, - from MEMADDR in target. Set *ERRNOP to the errno code, or 0 if successful. - Set *STRING to a pointer to malloc'd memory containing the data; the caller - is responsible for freeing it. Return the number of bytes successfully - read. */ +/* See target.h. */ -int -target_read_string (CORE_ADDR memaddr, gdb::unique_xmalloc_ptr<char> *string, - int len, int *errnop) +gdb::unique_xmalloc_ptr<char> +target_read_string (CORE_ADDR memaddr, int len, int *bytes_read) { - int tlen, offset, i; - gdb_byte buf[4]; - int errcode = 0; - char *buffer; - int buffer_allocated; - char *bufptr; - unsigned int nbytes_read = 0; - - gdb_assert (string); - - /* Small for testing. */ - buffer_allocated = 4; - buffer = (char *) xmalloc (buffer_allocated); - bufptr = buffer; + gdb::unique_xmalloc_ptr<gdb_byte> buffer; - while (len > 0) - { - tlen = MIN (len, 4 - (memaddr & 3)); - offset = memaddr & 3; - - errcode = target_read_memory (memaddr & ~3, buf, sizeof buf); - if (errcode != 0) - { - /* The transfer request might have crossed the boundary to an - unallocated region of memory. Retry the transfer, requesting - a single byte. */ - tlen = 1; - offset = 0; - errcode = target_read_memory (memaddr, buf, 1); - if (errcode != 0) - goto done; - } - - if (bufptr - buffer + tlen > buffer_allocated) - { - unsigned int bytes; - - bytes = bufptr - buffer; - buffer_allocated *= 2; - buffer = (char *) xrealloc (buffer, buffer_allocated); - bufptr = buffer + bytes; - } - - for (i = 0; i < tlen; i++) - { - *bufptr++ = buf[i + offset]; - if (buf[i + offset] == '\000') - { - nbytes_read += i + 1; - goto done; - } - } + int ignore; + if (bytes_read == nullptr) + bytes_read = &ignore; + + /* Note that the endian-ness does not matter here. */ + int errcode = read_string (memaddr, -1, 1, len, BFD_ENDIAN_LITTLE, + &buffer, bytes_read); + if (errcode != 0) + return {}; - memaddr += tlen; - len -= tlen; - nbytes_read += tlen; - } -done: - string->reset (buffer); - if (errnop != NULL) - *errnop = errcode; - return nbytes_read; + return gdb::unique_xmalloc_ptr<char> ((char *) buffer.release ()); } struct target_section_table * @@ -967,8 +925,11 @@ if (res == TARGET_XFER_UNAVAILABLE) break; - /* We want to continue past core files to executables, but not - past a running target's memory. */ + /* Don't continue past targets which have all the memory. + At one time, this code was necessary to read data from + executables / shared libraries when data for the requested + addresses weren't available in the core file. But now the + core target handles this case itself. */ if (ops->has_all_memory ()) break; @@ -1022,11 +983,17 @@ const char *section_name = section->the_bfd_section->name; memaddr = overlay_mapped_address (memaddr, section); + + auto match_cb = [=] (const struct target_section *s) + { + return (strcmp (section_name, s->the_bfd_section->name) == 0); + }; + return section_table_xfer_memory_partial (readbuf, writebuf, memaddr, len, xfered_len, table->sections, table->sections_end, - section_name); + match_cb); } } @@ -1044,8 +1011,7 @@ return section_table_xfer_memory_partial (readbuf, writebuf, memaddr, len, xfered_len, table->sections, - table->sections_end, - NULL); + table->sections_end); } } @@ -1947,33 +1913,6 @@ agent_capability_invalidate (); } -/* Callback for iterate_over_inferiors. Gets rid of the given - inferior. */ - -static int -dispose_inferior (struct inferior *inf, void *args) -{ - /* Not all killed inferiors can, or will ever be, removed from the - inferior list. Killed inferiors clearly don't need to be killed - again, so, we're done. */ - if (inf->pid == 0) - return 0; - - thread_info *thread = any_thread_of_inferior (inf); - if (thread != NULL) - { - switch_to_thread (thread); - - /* Core inferiors actually should be detached, not killed. */ - if (target_has_execution) - target_kill (); - else - target_detach (inf, 0); - } - - return 0; -} - /* This is to be called by the open routine before it does anything. */ @@ -1982,12 +1921,19 @@ { dont_repeat (); - if (have_inferiors ()) + if (current_inferior ()->pid != 0) { if (!from_tty - || !have_live_inferiors () + || !target_has_execution || query (_("A program is being debugged already. Kill it? "))) - iterate_over_inferiors (dispose_inferior, NULL); + { + /* Core inferiors actually should be detached, not + killed. */ + if (target_has_execution) + target_kill (); + else + target_detach (current_inferior (), 0); + } else error (_("Program not killed.")); } @@ -2029,9 +1975,16 @@ prepare_for_detach (); + /* Hold a strong reference because detaching may unpush the + target. */ + auto proc_target_ref = target_ops_ref::new_reference (inf->process_target ()); + current_top_target ()->detach (inf, from_tty); - registers_changed_ptid (save_pid_ptid); + process_stratum_target *proc_target + = as_process_stratum_target (proc_target_ref.get ()); + + registers_changed_ptid (proc_target, save_pid_ptid); /* We have to ensure we have no frame cache left. Normally, registers_changed_ptid (save_pid_ptid) calls reinit_frame_cache when @@ -2056,7 +2009,12 @@ ptid_t target_wait (ptid_t ptid, struct target_waitstatus *status, int options) { - return current_top_target ()->wait (ptid, status, options); + target_ops *target = current_top_target (); + + if (!target->can_async_p ()) + gdb_assert ((options & TARGET_WNOHANG) == 0); + + return target->wait (ptid, status, options); } /* See target.h. */ @@ -2079,6 +2037,8 @@ const char * target_thread_name (struct thread_info *info) { + gdb_assert (info->inf == current_inferior ()); + return current_top_target ()->thread_name (info); } @@ -2102,16 +2062,18 @@ void target_resume (ptid_t ptid, int step, enum gdb_signal signal) { + process_stratum_target *curr_target = current_inferior ()->process_target (); + target_dcache_invalidate (); current_top_target ()->resume (ptid, step, signal); - registers_changed_ptid (ptid); + registers_changed_ptid (curr_target, ptid); /* We only set the internal executing state here. The user/frontend running state is set at a higher level. This also clears the thread's stop_pc as side effect. */ - set_executing (ptid, 1); - clear_inline_frame_state (ptid); + set_executing (curr_target, ptid, true); + clear_inline_frame_state (curr_target, ptid); } /* If true, target_commit_resume is a nop. */ @@ -2148,9 +2110,9 @@ current_top_target ()->program_signals (program_signals); } -static int -default_follow_fork (struct target_ops *self, int follow_child, - int detach_fork) +static bool +default_follow_fork (struct target_ops *self, bool follow_child, + bool detach_fork) { /* Some target returned a fork event, but did not know how to follow it. */ internal_error (__FILE__, __LINE__, @@ -2160,8 +2122,8 @@ /* Look through the list of possible targets for a target that can follow forks. */ -int -target_follow_fork (int follow_child, int detach_fork) +bool +target_follow_fork (bool follow_child, bool detach_fork) { return current_top_target ()->follow_fork (follow_child, detach_fork); } @@ -2184,7 +2146,7 @@ void target_mourn_inferior (ptid_t ptid) { - gdb_assert (ptid == inferior_ptid); + gdb_assert (ptid.pid () == inferior_ptid.pid ()); current_top_target ()->mourn_inferior (); /* We no longer need to keep handles on any of the object files. @@ -2536,7 +2498,6 @@ return target_read_stralloc (t, TARGET_OBJECT_OSDATA, type); } - /* Determine the current address space of thread PTID. */ struct address_space * @@ -2555,7 +2516,7 @@ target_ops * target_ops::beneath () const { - return g_target_stack.find_beneath (this); + return current_inferior ()->find_target_beneath (this); } void @@ -2771,13 +2732,11 @@ return {}; } -/* Helper for target_fileio_open and - target_fileio_open_warn_if_slow. */ +/* See target.h. */ -static int -target_fileio_open_1 (struct inferior *inf, const char *filename, - int flags, int mode, int warn_if_slow, - int *target_errno) +int +target_fileio_open (struct inferior *inf, const char *filename, + int flags, int mode, bool warn_if_slow, int *target_errno) { for (target_ops *t = default_fileio_target (); t != NULL; t = t->beneath ()) { @@ -2810,27 +2769,6 @@ /* See target.h. */ int -target_fileio_open (struct inferior *inf, const char *filename, - int flags, int mode, int *target_errno) -{ - return target_fileio_open_1 (inf, filename, flags, mode, 0, - target_errno); -} - -/* See target.h. */ - -int -target_fileio_open_warn_if_slow (struct inferior *inf, - const char *filename, - int flags, int mode, int *target_errno) -{ - return target_fileio_open_1 (inf, filename, flags, mode, 1, - target_errno); -} - -/* See target.h. */ - -int target_fileio_pwrite (int fd, const gdb_byte *write_buf, int len, ULONGEST offset, int *target_errno) { @@ -3032,7 +2970,7 @@ int target_errno; scoped_target_fd fd (target_fileio_open (inf, filename, FILEIO_O_RDONLY, - 0700, &target_errno)); + 0700, false, &target_errno)); if (fd.get () == -1) return -1; @@ -3151,7 +3089,7 @@ struct target_ops * find_target_at (enum strata stratum) { - return g_target_stack.at (stratum); + return current_inferior ()->target_at (stratum); } @@ -3183,7 +3121,7 @@ { inferior *inf = current_inferior (); - inferior_ptid = null_ptid; + switch_to_no_thread (); /* Mark breakpoints uninserted in case something tries to delete a breakpoint while we delete the inferior's threads (which would @@ -3247,6 +3185,14 @@ static dummy_target the_dummy_target; +/* See target.h. */ + +target_ops * +get_dummy_target () +{ + return &the_dummy_target; +} + static const target_info dummy_target_info = { "None", N_("None"), @@ -3333,7 +3279,33 @@ void target_pass_ctrlc (void) { - current_top_target ()->pass_ctrlc (); + /* Pass the Ctrl-C to the first target that has a thread + running. */ + for (inferior *inf : all_inferiors ()) + { + target_ops *proc_target = inf->process_target (); + if (proc_target == NULL) + continue; + + for (thread_info *thr : inf->non_exited_threads ()) + { + /* A thread can be THREAD_STOPPED and executing, while + running an infcall. */ + if (thr->state == THREAD_RUNNING || thr->executing) + { + /* We can get here quite deep in target layers. Avoid + switching thread context or anything that would + communicate with the target (e.g., to fetch + registers), or flushing e.g., the frame cache. We + just switch inferior in order to be able to call + through the target_stack. */ + scoped_restore_current_inferior restore_inferior; + set_current_inferior (inf); + current_top_target ()->pass_ctrlc (); + return; + } + } + } } /* See target.h. */ @@ -3884,6 +3856,26 @@ && target_always_non_stop_p ())); } +/* See target.h. */ + +bool +exists_non_stop_target () +{ + if (target_is_non_stop_p ()) + return true; + + scoped_restore_current_thread restore_thread; + + for (inferior *inf : all_inferiors ()) + { + switch_to_inferior_no_thread (inf); + if (target_is_non_stop_p ()) + return true; + } + + return false; +} + /* Controls if targets can report that they always run in non-stop mode. This is just for maintainers to use when debugging gdb. */ enum auto_boolean target_non_stop_enabled = AUTO_BOOLEAN_AUTO; @@ -3980,11 +3972,11 @@ update_observer_mode (); } +void _initialize_target (); + void -initialize_targets (void) +_initialize_target () { - push_target (&the_dummy_target); - the_debug_target = new debug_target (); add_info ("target", info_target_command, targ_desc); diff -Nru gdb-9.1/gdb/target-connection.c gdb-10.2/gdb/target-connection.c --- gdb-9.1/gdb/target-connection.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/target-connection.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,161 @@ +/* List of target connections for GDB. + + Copyright (C) 2017-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "defs.h" +#include "target-connection.h" + +#include <map> + +#include "inferior.h" +#include "target.h" + +/* A map between connection number and representative process_stratum + target. */ +static std::map<int, process_stratum_target *> process_targets; + +/* The highest connection number ever given to a target. */ +static int highest_target_connection_num; + +/* See target-connection.h. */ + +void +connection_list_add (process_stratum_target *t) +{ + if (t->connection_number == 0) + { + t->connection_number = ++highest_target_connection_num; + process_targets[t->connection_number] = t; + } +} + +/* See target-connection.h. */ + +void +connection_list_remove (process_stratum_target *t) +{ + process_targets.erase (t->connection_number); + t->connection_number = 0; +} + +/* See target-connection.h. */ + +std::string +make_target_connection_string (process_stratum_target *t) +{ + if (t->connection_string () != NULL) + return string_printf ("%s %s", t->shortname (), + t->connection_string ()); + else + return t->shortname (); +} + +/* Prints the list of target connections and their details on UIOUT. + + If REQUESTED_CONNECTIONS is not NULL, it's a list of GDB ids of the + target connections that should be printed. Otherwise, all target + connections are printed. */ + +static void +print_connection (struct ui_out *uiout, const char *requested_connections) +{ + int count = 0; + size_t what_len = 0; + + /* Compute number of lines we will print. */ + for (const auto &it : process_targets) + { + if (!number_is_in_list (requested_connections, it.first)) + continue; + + ++count; + + process_stratum_target *t = it.second; + + size_t l = strlen (t->shortname ()); + if (t->connection_string () != NULL) + l += 1 + strlen (t->connection_string ()); + + if (l > what_len) + what_len = l; + } + + if (count == 0) + { + uiout->message (_("No connections.\n")); + return; + } + + ui_out_emit_table table_emitter (uiout, 4, process_targets.size (), + "connections"); + + uiout->table_header (1, ui_left, "current", ""); + uiout->table_header (4, ui_left, "number", "Num"); + /* The text in the "what" column may include spaces. Add one extra + space to visually separate the What and Description columns a + little better. Compare: + "* 1 remote :9999 Remote serial target in gdb-specific protocol" + "* 1 remote :9999 Remote serial target in gdb-specific protocol" + */ + uiout->table_header (what_len + 1, ui_left, "what", "What"); + uiout->table_header (17, ui_left, "description", "Description"); + + uiout->table_body (); + + for (const auto &it : process_targets) + { + process_stratum_target *t = it.second; + + if (!number_is_in_list (requested_connections, t->connection_number)) + continue; + + ui_out_emit_tuple tuple_emitter (uiout, NULL); + + if (current_inferior ()->process_target () == t) + uiout->field_string ("current", "*"); + else + uiout->field_skip ("current"); + + uiout->field_signed ("number", t->connection_number); + + uiout->field_string ("what", make_target_connection_string (t).c_str ()); + + uiout->field_string ("description", t->longname ()); + + uiout->text ("\n"); + } +} + +/* The "info connections" command. */ + +static void +info_connections_command (const char *args, int from_tty) +{ + print_connection (current_uiout, args); +} + +void _initialize_target_connection (); + +void +_initialize_target_connection () +{ + add_info ("connections", info_connections_command, + _("\ +Target connections in use.\n\ +Shows the list of target connections currently in use.")); +} diff -Nru gdb-9.1/gdb/target-connection.h gdb-10.2/gdb/target-connection.h --- gdb-9.1/gdb/target-connection.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/target-connection.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,40 @@ +/* List of target connections for GDB. + + Copyright (C) 2017-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef TARGET_CONNECTION_H +#define TARGET_CONNECTION_H + +#include <string> + +struct process_stratum_target; + +/* Add a process target to the connection list, if not already + added. */ +void connection_list_add (process_stratum_target *t); + +/* Remove a process target from the connection list. */ +void connection_list_remove (process_stratum_target *t); + +/* Make a target connection string for T. This is usually T's + shortname, but it includes the result of + process_stratum_target::connection_string() too if T supports + it. */ +std::string make_target_connection_string (process_stratum_target *t); + +#endif /* TARGET_CONNECTION_H */ diff -Nru gdb-9.1/gdb/target-dcache.c gdb-10.2/gdb/target-dcache.c --- gdb-9.1/gdb/target-dcache.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/target-dcache.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 1992-2020 Free Software Foundation, Inc. +/* Copyright (C) 1992-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -152,8 +152,9 @@ return code_cache_enabled; } +void _initialize_target_dcache (); void -_initialize_target_dcache (void) +_initialize_target_dcache () { add_setshow_boolean_cmd ("stack-cache", class_support, &stack_cache_enabled_1, _("\ diff -Nru gdb-9.1/gdb/target-dcache.h gdb-10.2/gdb/target-dcache.h --- gdb-9.1/gdb/target-dcache.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/target-dcache.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 1992-2020 Free Software Foundation, Inc. +/* Copyright (C) 1992-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/target-debug.h gdb-10.2/gdb/target-debug.h --- gdb-9.1/gdb/target-debug.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/target-debug.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* GDB target debugging macros - Copyright (C) 2014-2020 Free Software Foundation, Inc. + Copyright (C) 2014-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/target-delegates.c gdb-10.2/gdb/target-delegates.c --- gdb-9.1/gdb/target-delegates.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/target-delegates.c 2021-04-25 04:06:26.000000000 +0000 @@ -56,7 +56,7 @@ int remove_fork_catchpoint (int arg0) override; int insert_vfork_catchpoint (int arg0) override; int remove_vfork_catchpoint (int arg0) override; - int follow_fork (int arg0, int arg1) override; + bool follow_fork (bool arg0, bool arg1) override; int insert_exec_catchpoint (int arg0) override; int remove_exec_catchpoint (int arg0) override; void follow_exec (struct inferior *arg0, const char *arg1) override; @@ -83,6 +83,7 @@ bool can_async_p () override; bool is_async_p () override; void async (int arg0) override; + int async_wait_fd () override; void thread_events (int arg0) override; bool supports_non_stop () override; bool always_non_stop_p () override; @@ -107,6 +108,8 @@ bool supports_disable_randomization () override; bool supports_string_tracing () override; bool supports_evaluation_of_breakpoint_conditions () override; + bool supports_dumpcore () override; + void dumpcore (const char *arg0) override; bool can_run_breakpoint_commands () override; struct gdbarch *thread_architecture (ptid_t arg0) override; struct address_space *thread_address_space (ptid_t arg0) override; @@ -224,7 +227,7 @@ int remove_fork_catchpoint (int arg0) override; int insert_vfork_catchpoint (int arg0) override; int remove_vfork_catchpoint (int arg0) override; - int follow_fork (int arg0, int arg1) override; + bool follow_fork (bool arg0, bool arg1) override; int insert_exec_catchpoint (int arg0) override; int remove_exec_catchpoint (int arg0) override; void follow_exec (struct inferior *arg0, const char *arg1) override; @@ -251,6 +254,7 @@ bool can_async_p () override; bool is_async_p () override; void async (int arg0) override; + int async_wait_fd () override; void thread_events (int arg0) override; bool supports_non_stop () override; bool always_non_stop_p () override; @@ -275,6 +279,8 @@ bool supports_disable_randomization () override; bool supports_string_tracing () override; bool supports_evaluation_of_breakpoint_conditions () override; + bool supports_dumpcore () override; + void dumpcore (const char *arg0) override; bool can_run_breakpoint_commands () override; struct gdbarch *thread_architecture (ptid_t arg0) override; struct address_space *thread_address_space (ptid_t arg0) override; @@ -1504,30 +1510,30 @@ return result; } -int -target_ops::follow_fork (int arg0, int arg1) +bool +target_ops::follow_fork (bool arg0, bool arg1) { return this->beneath ()->follow_fork (arg0, arg1); } -int -dummy_target::follow_fork (int arg0, int arg1) +bool +dummy_target::follow_fork (bool arg0, bool arg1) { return default_follow_fork (this, arg0, arg1); } -int -debug_target::follow_fork (int arg0, int arg1) +bool +debug_target::follow_fork (bool arg0, bool arg1) { - int result; + bool result; fprintf_unfiltered (gdb_stdlog, "-> %s->follow_fork (...)\n", this->beneath ()->shortname ()); result = this->beneath ()->follow_fork (arg0, arg1); fprintf_unfiltered (gdb_stdlog, "<- %s->follow_fork (", this->beneath ()->shortname ()); - target_debug_print_int (arg0); + target_debug_print_bool (arg0); fputs_unfiltered (", ", gdb_stdlog); - target_debug_print_int (arg1); + target_debug_print_bool (arg1); fputs_unfiltered (") = ", gdb_stdlog); - target_debug_print_int (result); + target_debug_print_bool (result); fputs_unfiltered ("\n", gdb_stdlog); return result; } @@ -2162,6 +2168,31 @@ fputs_unfiltered (")\n", gdb_stdlog); } +int +target_ops::async_wait_fd () +{ + return this->beneath ()->async_wait_fd (); +} + +int +dummy_target::async_wait_fd () +{ + noprocess (); +} + +int +debug_target::async_wait_fd () +{ + int result; + fprintf_unfiltered (gdb_stdlog, "-> %s->async_wait_fd (...)\n", this->beneath ()->shortname ()); + result = this->beneath ()->async_wait_fd (); + fprintf_unfiltered (gdb_stdlog, "<- %s->async_wait_fd (", this->beneath ()->shortname ()); + fputs_unfiltered (") = ", gdb_stdlog); + target_debug_print_int (result); + fputs_unfiltered ("\n", gdb_stdlog); + return result; +} + void target_ops::thread_events (int arg0) { @@ -2799,6 +2830,52 @@ } bool +target_ops::supports_dumpcore () +{ + return this->beneath ()->supports_dumpcore (); +} + +bool +dummy_target::supports_dumpcore () +{ + return false; +} + +bool +debug_target::supports_dumpcore () +{ + bool result; + fprintf_unfiltered (gdb_stdlog, "-> %s->supports_dumpcore (...)\n", this->beneath ()->shortname ()); + result = this->beneath ()->supports_dumpcore (); + fprintf_unfiltered (gdb_stdlog, "<- %s->supports_dumpcore (", this->beneath ()->shortname ()); + fputs_unfiltered (") = ", gdb_stdlog); + target_debug_print_bool (result); + fputs_unfiltered ("\n", gdb_stdlog); + return result; +} + +void +target_ops::dumpcore (const char *arg0) +{ + this->beneath ()->dumpcore (arg0); +} + +void +dummy_target::dumpcore (const char *arg0) +{ +} + +void +debug_target::dumpcore (const char *arg0) +{ + fprintf_unfiltered (gdb_stdlog, "-> %s->dumpcore (...)\n", this->beneath ()->shortname ()); + this->beneath ()->dumpcore (arg0); + fprintf_unfiltered (gdb_stdlog, "<- %s->dumpcore (", this->beneath ()->shortname ()); + target_debug_print_const_char_p (arg0); + fputs_unfiltered (")\n", gdb_stdlog); +} + +bool target_ops::can_run_breakpoint_commands () { return this->beneath ()->can_run_breakpoint_commands (); diff -Nru gdb-9.1/gdb/target-descriptions.c gdb-10.2/gdb/target-descriptions.c --- gdb-9.1/gdb/target-descriptions.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/target-descriptions.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target description support for GDB. - Copyright (C) 2006-2020 Free Software Foundation, Inc. + Copyright (C) 2006-2021 Free Software Foundation, Inc. Contributed by CodeSourcery. @@ -141,6 +141,11 @@ m_type = arch_float_type (m_gdbarch, -1, "builtin_type_i387_ext", floatformats_i387_ext); return; + + case TDESC_TYPE_BFLOAT16: + m_type = arch_float_type (m_gdbarch, -1, "builtin_type_bfloat16", + floatformats_bfloat16); + return; } internal_error (__FILE__, __LINE__, @@ -156,7 +161,7 @@ type *element_gdb_type = make_gdb_type (m_gdbarch, e->element_type); m_type = init_vector_type (element_gdb_type, e->count); - TYPE_NAME (m_type) = xstrdup (e->name.c_str ()); + m_type->set_name (xstrdup (e->name.c_str ())); return; } @@ -192,7 +197,7 @@ void make_gdb_type_struct (const tdesc_type_with_fields *e) { m_type = arch_composite_type (m_gdbarch, NULL, TYPE_CODE_STRUCT); - TYPE_NAME (m_type) = xstrdup (e->name.c_str ()); + m_type->set_name (xstrdup (e->name.c_str ())); for (const tdesc_type_field &f : e->fields) { @@ -247,7 +252,7 @@ void make_gdb_type_union (const tdesc_type_with_fields *e) { m_type = arch_composite_type (m_gdbarch, NULL, TYPE_CODE_UNION); - TYPE_NAME (m_type) = xstrdup (e->name.c_str ()); + m_type->set_name (xstrdup (e->name.c_str ())); for (const tdesc_type_field &f : e->fields) { @@ -308,6 +313,29 @@ return gdb_type.get_type (); } +/* Wrapper around bfd_arch_info_type. A class with this name is used in + the API that is shared between gdb and gdbserver code, but gdbserver + doesn't use compatibility information, so its version of this class is + empty. */ + +class tdesc_compatible_info +{ +public: + /* Constructor. */ + explicit tdesc_compatible_info (const bfd_arch_info_type *arch) + : m_arch (arch) + { /* Nothing. */ } + + /* Access the contained pointer. */ + const bfd_arch_info_type *arch () const + { return m_arch; } + +private: + /* Architecture information looked up from the <compatible> entity within + a target description. */ + const bfd_arch_info_type *m_arch; +}; + /* A target description. */ struct target_desc : tdesc_element @@ -328,7 +356,7 @@ enum gdb_osabi osabi = GDB_OSABI_UNKNOWN; /* The list of compatible architectures reported by the target. */ - std::vector<const bfd_arch_info *> compatible; + std::vector<tdesc_compatible_info_up> compatible; /* Any architecture-specific properties specified by the target. */ std::vector<property> properties; @@ -598,11 +626,11 @@ tdesc_compatible_p (const struct target_desc *target_desc, const struct bfd_arch_info *arch) { - for (const bfd_arch_info *compat : target_desc->compatible) + for (const tdesc_compatible_info_up &compat : target_desc->compatible) { - if (compat == arch - || arch->compatible (arch, compat) - || compat->compatible (compat, arch)) + if (compat->arch () == arch + || arch->compatible (arch, compat->arch ()) + || compat->arch ()->compatible (compat->arch (), arch)) return 1; } @@ -639,7 +667,25 @@ const char * tdesc_architecture_name (const struct target_desc *target_desc) { - return target_desc->arch->printable_name; + if (target_desc->arch != NULL) + return target_desc->arch->printable_name; + return NULL; +} + +/* See gdbsupport/tdesc.h. */ + +const std::vector<tdesc_compatible_info_up> & +tdesc_compatible_info_list (const target_desc *target_desc) +{ + return target_desc->compatible; +} + +/* See gdbsupport/tdesc.h. */ + +const char * +tdesc_compatible_info_arch_name (const tdesc_compatible_info_up &compatible) +{ + return compatible->arch ()->printable_name; } /* Return the OSABI associated with this target description, or @@ -1056,7 +1102,8 @@ void tdesc_use_registers (struct gdbarch *gdbarch, const struct target_desc *target_desc, - struct tdesc_arch_data *early_data) + struct tdesc_arch_data *early_data, + tdesc_unknown_register_ftype unk_reg_cb) { int num_regs = gdbarch_num_regs (gdbarch); struct tdesc_arch_data *data; @@ -1105,6 +1152,34 @@ while (data->arch_regs.size () < num_regs) data->arch_regs.emplace_back (nullptr, nullptr); + /* First we give the target a chance to number previously unknown + registers. This allows targets to record the numbers assigned based + on which feature the register was from. */ + if (unk_reg_cb != NULL) + { + for (const tdesc_feature_up &feature : target_desc->features) + for (const tdesc_reg_up ® : feature->registers) + if (htab_find (reg_hash, reg.get ()) != NULL) + { + int regno = unk_reg_cb (gdbarch, feature.get (), + reg->name.c_str (), num_regs); + gdb_assert (regno == -1 || regno >= num_regs); + if (regno != -1) + { + while (regno >= data->arch_regs.size ()) + data->arch_regs.emplace_back (nullptr, nullptr); + data->arch_regs[regno] = tdesc_arch_reg (reg.get (), NULL); + num_regs = regno + 1; + htab_remove_elt (reg_hash, reg.get ()); + } + } + } + + /* Ensure the array was sized correctly above. */ + gdb_assert (data->arch_regs.size () == num_regs); + + /* Now in a final pass we assign register numbers to any remaining + unnumbered registers. */ for (const tdesc_feature_up &feature : target_desc->features) for (const tdesc_reg_up ® : feature->registers) if (htab_find (reg_hash, reg.get ()) != NULL) @@ -1136,12 +1211,16 @@ return new_feature; } +/* See gdbsupport/tdesc.h. */ + struct target_desc * allocate_target_description (void) { return new target_desc (); } +/* See gdbsupport/tdesc.h. */ + void target_desc_deleter::operator() (struct target_desc *target_desc) const { @@ -1158,14 +1237,16 @@ if (compatible == NULL) return; - for (const bfd_arch_info *compat : target_desc->compatible) - if (compat == compatible) + for (const tdesc_compatible_info_up &compat : target_desc->compatible) + if (compat->arch () == compatible) internal_error (__FILE__, __LINE__, _("Attempted to add duplicate " "compatible architecture \"%s\""), compatible->printable_name); - target_desc->compatible.push_back (compatible); + target_desc->compatible.push_back + (std::unique_ptr<tdesc_compatible_info> + (new tdesc_compatible_info (compatible))); } void @@ -1218,24 +1299,6 @@ /* Helper functions for the CLI commands. */ static void -set_tdesc_cmd (const char *args, int from_tty) -{ - help_list (tdesc_set_cmdlist, "set tdesc ", all_commands, gdb_stdout); -} - -static void -show_tdesc_cmd (const char *args, int from_tty) -{ - cmd_show_list (tdesc_show_cmdlist, from_tty, ""); -} - -static void -unset_tdesc_cmd (const char *args, int from_tty) -{ - help_list (tdesc_unset_cmdlist, "unset tdesc ", all_commands, gdb_stdout); -} - -static void set_tdesc_filename_cmd (const char *args, int from_tty, struct cmd_list_element *c) { @@ -1288,6 +1351,8 @@ break; else if (*inp == '-') *outp++ = '_'; + else if (*inp == ' ') + *outp++ = '_'; else *outp++ = *inp; *outp = '\0'; @@ -1336,10 +1401,10 @@ printf_unfiltered ("\n"); } - for (const bfd_arch_info_type *compatible : e->compatible) + for (const tdesc_compatible_info_up &compatible : e->compatible) printf_unfiltered (" tdesc_add_compatible (result, bfd_scan_arch (\"%s\"));\n", - compatible->printable_name); + compatible->arch ()->printable_name); if (!e->compatible.empty ()) printf_unfiltered ("\n"); @@ -1698,7 +1763,7 @@ error (_("There is no target description to print.")); if (filename == NULL) - error (_("The current target description did not come from an XML file.")); + filename = "fetched from target"; std::string filename_after_features (filename); auto loc = filename_after_features.rfind ("/features/"); @@ -1715,7 +1780,8 @@ || startswith (filename_after_features.c_str (), "riscv/") || startswith (filename_after_features.c_str (), "tic6x-") || startswith (filename_after_features.c_str (), "aarch64") - || startswith (filename_after_features.c_str (), "arm/")) + || startswith (filename_after_features.c_str (), "arm/") + || startswith (filename_after_features.c_str (), "arc/")) { print_c_feature v (filename_after_features); @@ -1729,6 +1795,36 @@ } } +/* Implement the maintenance print xml-tdesc command. */ + +static void +maint_print_xml_tdesc_cmd (const char *args, int from_tty) +{ + const struct target_desc *tdesc; + + if (args == NULL) + { + /* Use the global target-supplied description, not the current + architecture's. This lets a GDB for one architecture generate XML + for another architecture's description, even though the gdbarch + initialization code will reject the new description. */ + tdesc = current_target_desc; + } + else + { + /* Use the target description from the XML file. */ + tdesc = file_read_description_xml (args); + } + + if (tdesc == NULL) + error (_("There is no target description to print.")); + + std::string buf; + print_xml_feature v (&buf); + tdesc->accept (v); + puts_unfiltered (buf.c_str ()); +} + namespace selftests { /* A reference target description, used for testing (see record_xml_tdesc). */ @@ -1824,23 +1920,26 @@ (long) selftests::xml_tdesc.size (), failed); } +void _initialize_target_descriptions (); void -_initialize_target_descriptions (void) +_initialize_target_descriptions () { + cmd_list_element *cmd; + tdesc_data = gdbarch_data_register_pre_init (tdesc_data_init); - add_prefix_cmd ("tdesc", class_maintenance, set_tdesc_cmd, _("\ + add_basic_prefix_cmd ("tdesc", class_maintenance, _("\ Set target description specific variables."), - &tdesc_set_cmdlist, "set tdesc ", - 0 /* allow-unknown */, &setlist); - add_prefix_cmd ("tdesc", class_maintenance, show_tdesc_cmd, _("\ + &tdesc_set_cmdlist, "set tdesc ", + 0 /* allow-unknown */, &setlist); + add_show_prefix_cmd ("tdesc", class_maintenance, _("\ Show target description specific variables."), - &tdesc_show_cmdlist, "show tdesc ", - 0 /* allow-unknown */, &showlist); - add_prefix_cmd ("tdesc", class_maintenance, unset_tdesc_cmd, _("\ + &tdesc_show_cmdlist, "show tdesc ", + 0 /* allow-unknown */, &showlist); + add_basic_prefix_cmd ("tdesc", class_maintenance, _("\ Unset target description specific variables."), - &tdesc_unset_cmdlist, "unset tdesc ", - 0 /* allow-unknown */, &unsetlist); + &tdesc_unset_cmdlist, "unset tdesc ", + 0 /* allow-unknown */, &unsetlist); add_setshow_filename_cmd ("filename", class_obscure, &tdesc_filename_cmd_string, @@ -1858,11 +1957,15 @@ When unset, GDB will read the description from the target."), &tdesc_unset_cmdlist); - add_cmd ("c-tdesc", class_maintenance, maint_print_c_tdesc_cmd, _("\ + cmd = add_cmd ("c-tdesc", class_maintenance, maint_print_c_tdesc_cmd, _("\ Print the current target description as a C source file."), &maintenanceprintlist); + set_cmd_completer (cmd, filename_completer); - cmd_list_element *cmd; + cmd = add_cmd ("xml-tdesc", class_maintenance, maint_print_xml_tdesc_cmd, _("\ +Print the current target description as an XML file."), + &maintenanceprintlist); + set_cmd_completer (cmd, filename_completer); cmd = add_cmd ("xml-descriptions", class_maintenance, maintenance_check_xml_descriptions, _("\ diff -Nru gdb-9.1/gdb/target-descriptions.h gdb-10.2/gdb/target-descriptions.h --- gdb-9.1/gdb/target-descriptions.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/target-descriptions.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target description support for GDB. - Copyright (C) 2006-2020 Free Software Foundation, Inc. + Copyright (C) 2006-2021 Free Software Foundation, Inc. Contributed by CodeSourcery. @@ -80,6 +80,30 @@ (struct gdbarch *gdbarch, gdbarch_register_reggroup_p_ftype *pseudo_reggroup_p); +/* Pointer to a function that should be called for each unknown register in + a target description, used by TDESC_USE_REGISTERS. + + GDBARCH is the architecture the target description is for, FEATURE is + the feature the unknown register is in, and REG_NAME is the name of the + register from the target description. The POSSIBLE_REGNUM is a proposed + (GDB internal) number for this register. + + The callback function can return, (-1) to indicate that the register + should not be assigned POSSIBLE_REGNUM now (though it might be later), + GDB will number the register automatically later on. Return + POSSIBLE_REGNUM (or greater) to have this register assigned that number. + Returning a value less that POSSIBLE_REGNUM is also acceptable, but take + care not to clash with a register number that has already been + assigned. + + The callback will always be called on the registers in the order they + appear in the target description. This means all unknown registers + within a single feature will be called one after another. */ + +typedef int (*tdesc_unknown_register_ftype) + (struct gdbarch *gdbarch, tdesc_feature *feature, + const char *reg_name, int possible_regnum); + /* Update GDBARCH to use the TARGET_DESC for registers. TARGET_DESC may be GDBARCH's target description or (if GDBARCH does not have one which describes registers) another target description @@ -95,7 +119,8 @@ void tdesc_use_registers (struct gdbarch *gdbarch, const struct target_desc *target_desc, - struct tdesc_arch_data *early_data); + struct tdesc_arch_data *early_data, + tdesc_unknown_register_ftype unk_reg_cb = NULL); /* Allocate initial data for validation of a target description during gdbarch initialization. */ @@ -200,18 +225,6 @@ int tdesc_register_in_reggroup_p (struct gdbarch *gdbarch, int regno, struct reggroup *reggroup); - -/* A deleter adapter for a target desc. */ - -struct target_desc_deleter -{ - void operator() (struct target_desc *desc) const; -}; - -/* A unique pointer specialization that holds a target_desc. */ - -typedef std::unique_ptr<target_desc, target_desc_deleter> target_desc_up; - /* Methods for constructing a target description. */ void set_tdesc_architecture (struct target_desc *, diff -Nru gdb-9.1/gdb/target-float.c gdb-10.2/gdb/target-float.c --- gdb-9.1/gdb/target-float.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/target-float.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Floating point routines for GDB, the GNU debugger. - Copyright (C) 2017-2020 Free Software Foundation, Inc. + Copyright (C) 2017-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -647,8 +647,8 @@ { double dto; - floatformat_to_double (fmt->split_half ? fmt->split_half : fmt, - from, &dto); + floatformat_to_double /* ARI: floatformat_to_double */ + (fmt->split_half ? fmt->split_half : fmt, from, &dto); *to = (T) dto; return; } @@ -1742,7 +1742,7 @@ static void match_endianness (const gdb_byte *from, const struct type *type, gdb_byte *to) { - gdb_assert (TYPE_CODE (type) == TYPE_CODE_DECFLOAT); + gdb_assert (type->code () == TYPE_CODE_DECFLOAT); int len = TYPE_LENGTH (type); int i; @@ -1768,7 +1768,7 @@ static void set_decnumber_context (decContext *ctx, const struct type *type) { - gdb_assert (TYPE_CODE (type) == TYPE_CODE_DECFLOAT); + gdb_assert (type->code () == TYPE_CODE_DECFLOAT); switch (TYPE_LENGTH (type)) { @@ -2142,7 +2142,7 @@ target_float_same_category_p (const struct type *type1, const struct type *type2) { - return TYPE_CODE (type1) == TYPE_CODE (type2); + return type1->code () == type2->code (); } /* Return whether TYPE1 and TYPE2 use the same floating-point format. */ @@ -2153,7 +2153,7 @@ if (!target_float_same_category_p (type1, type2)) return false; - switch (TYPE_CODE (type1)) + switch (type1->code ()) { case TYPE_CODE_FLT: return floatformat_from_type (type1) == floatformat_from_type (type2); @@ -2173,7 +2173,7 @@ static int target_float_format_length (const struct type *type) { - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_FLT: return floatformat_totalsize_bytes (floatformat_from_type (type)); @@ -2205,7 +2205,7 @@ static enum target_float_ops_kind get_target_float_ops_kind (const struct type *type) { - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_FLT: { @@ -2300,7 +2300,7 @@ static const target_float_ops * get_target_float_ops (const struct type *type1, const struct type *type2) { - gdb_assert (TYPE_CODE (type1) == TYPE_CODE (type2)); + gdb_assert (type1->code () == type2->code ()); enum target_float_ops_kind kind1 = get_target_float_ops_kind (type1); enum target_float_ops_kind kind2 = get_target_float_ops_kind (type2); @@ -2315,10 +2315,10 @@ bool target_float_is_valid (const gdb_byte *addr, const struct type *type) { - if (TYPE_CODE (type) == TYPE_CODE_FLT) + if (type->code () == TYPE_CODE_FLT) return floatformat_is_valid (floatformat_from_type (type), addr); - if (TYPE_CODE (type) == TYPE_CODE_DECFLOAT) + if (type->code () == TYPE_CODE_DECFLOAT) return true; gdb_assert_not_reached ("unexpected type code"); @@ -2329,11 +2329,11 @@ bool target_float_is_zero (const gdb_byte *addr, const struct type *type) { - if (TYPE_CODE (type) == TYPE_CODE_FLT) + if (type->code () == TYPE_CODE_FLT) return (floatformat_classify (floatformat_from_type (type), addr) == float_zero); - if (TYPE_CODE (type) == TYPE_CODE_DECFLOAT) + if (type->code () == TYPE_CODE_DECFLOAT) return decimal_is_zero (addr, type); gdb_assert_not_reached ("unexpected type code"); @@ -2347,7 +2347,7 @@ { /* Unless we need to adhere to a specific format, provide special output for special cases of binary floating-point numbers. */ - if (format == nullptr && TYPE_CODE (type) == TYPE_CODE_FLT) + if (format == nullptr && type->code () == TYPE_CODE_FLT) { const struct floatformat *fmt = floatformat_from_type (type); diff -Nru gdb-9.1/gdb/target-float.h gdb-10.2/gdb/target-float.h --- gdb-9.1/gdb/target-float.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/target-float.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Floating point definitions for GDB. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/target.h gdb-10.2/gdb/target.h --- gdb-9.1/gdb/target.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/target.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Interface between GDB and target environments, including files and processes - Copyright (C) 1990-2020 Free Software Foundation, Inc. + Copyright (C) 1990-2021 Free Software Foundation, Inc. Contributed by Cygnus Support. Written by John Gilmore. @@ -43,6 +43,7 @@ #include "infrun.h" /* For enum exec_direction_kind. */ #include "breakpoint.h" /* For enum bptype. */ #include "gdbsupport/scoped_restore.h" +#include "gdbsupport/refcounted-object.h" /* This include file defines the interface between the main part of the debugger, and the part which is target-specific, or @@ -427,6 +428,7 @@ }; struct target_ops + : public refcounted_object { /* Return this target's stratum. */ virtual strata stratum () const = 0; @@ -445,10 +447,10 @@ virtual const target_info &info () const = 0; /* Name this target type. */ - const char *shortname () + const char *shortname () const { return info ().shortname; } - const char *longname () + const char *longname () const { return info ().longname; } /* Close the target. This is where the target can handle @@ -478,6 +480,13 @@ TARGET_DEFAULT_NORETURN (noprocess ()); virtual void commit_resume () TARGET_DEFAULT_IGNORE (); + /* See target_wait's description. Note that implementations of + this method must not assume that inferior_ptid on entry is + pointing at the thread or inferior that ends up reporting an + event. The reported event could be for some other thread in + the current inferior or even for a different process of the + current target. inferior_ptid may also be null_ptid on + entry. */ virtual ptid_t wait (ptid_t, struct target_waitstatus *, int TARGET_DEBUG_PRINTER (target_debug_print_options)) TARGET_DEFAULT_FUNC (default_target_wait); @@ -613,7 +622,7 @@ TARGET_DEFAULT_RETURN (1); virtual int remove_vfork_catchpoint (int) TARGET_DEFAULT_RETURN (1); - virtual int follow_fork (int, int) + virtual bool follow_fork (bool, bool) TARGET_DEFAULT_FUNC (default_follow_fork); virtual int insert_exec_catchpoint (int) TARGET_DEFAULT_RETURN (1); @@ -679,7 +688,7 @@ virtual bool has_memory () { return false; } virtual bool has_stack () { return false; } virtual bool has_registers () { return false; } - virtual bool has_execution (ptid_t) { return false; } + virtual bool has_execution (inferior *inf) { return false; } /* Control thread execution. */ virtual thread_control_capabilities get_thread_control_capabilities () @@ -694,6 +703,8 @@ TARGET_DEFAULT_RETURN (false); virtual void async (int) TARGET_DEFAULT_NORETURN (tcomplain ()); + virtual int async_wait_fd () + TARGET_DEFAULT_NORETURN (noprocess ()); virtual void thread_events (int) TARGET_DEFAULT_IGNORE (); /* This method must be implemented in some situations. See the @@ -870,6 +881,14 @@ virtual bool supports_evaluation_of_breakpoint_conditions () TARGET_DEFAULT_RETURN (false); + /* Does this target support native dumpcore API? */ + virtual bool supports_dumpcore () + TARGET_DEFAULT_RETURN (false); + + /* Generate the core file with native target API. */ + virtual void dumpcore (const char *filename) + TARGET_DEFAULT_IGNORE (); + /* Does this target support evaluation of breakpoint commands on its end? */ virtual bool can_run_breakpoint_commands () @@ -878,11 +897,10 @@ /* Determine current architecture of thread PTID. The target is supposed to determine the architecture of the code where - the target is currently stopped at (on Cell, if a target is in spu_run, - to_thread_architecture would return SPU, otherwise PPC32 or PPC64). - This is architecture used to perform decr_pc_after_break adjustment, - and also determines the frame architecture of the innermost frame. - ptrace operations need to operate according to target_gdbarch (). */ + the target is currently stopped at. The architecture information is + used to perform decr_pc_after_break adjustment, and also to determine + the frame architecture of the innermost frame. ptrace operations need to + operate according to target_gdbarch (). */ virtual struct gdbarch *thread_architecture (ptid_t) TARGET_DEFAULT_RETURN (NULL); @@ -1258,6 +1276,27 @@ /* A unique pointer for target_ops. */ typedef std::unique_ptr<target_ops, target_ops_deleter> target_ops_up; +/* Decref a target and close if, if there are no references left. */ +extern void decref_target (target_ops *t); + +/* A policy class to interface gdb::ref_ptr with target_ops. */ + +struct target_ops_ref_policy +{ + static void incref (target_ops *t) + { + t->incref (); + } + + static void decref (target_ops *t) + { + decref_target (t); + } +}; + +/* A gdb::ref_ptr pointer to a target_ops. */ +typedef gdb::ref_ptr<target_ops, target_ops_ref_policy> target_ops_ref; + /* Native target backends call this once at initialization time to inform the core about which is the target that can respond to "run" or "attach". Note: native targets are always singletons. */ @@ -1312,6 +1351,9 @@ extern target_ops *current_top_target (); +/* Return the dummy target. */ +extern target_ops *get_dummy_target (); + /* Define easy words for doing these operations on our current target. */ #define target_shortname (current_top_target ()->shortname ()) @@ -1465,14 +1507,29 @@ #define target_supports_evaluation_of_breakpoint_conditions() \ (current_top_target ()->supports_evaluation_of_breakpoint_conditions) () +/* Does this target support dumpcore API? */ + +#define target_supports_dumpcore() \ + (current_top_target ()->supports_dumpcore) () + +/* Generate the core file with target API. */ + +#define target_dumpcore(x) \ + (current_top_target ()->dumpcore (x)) + /* Returns true if this target can handle breakpoint commands on its end. */ #define target_can_run_breakpoint_commands() \ (current_top_target ()->can_run_breakpoint_commands) () -extern int target_read_string (CORE_ADDR, gdb::unique_xmalloc_ptr<char> *, - int, int *); +/* Read a string from target memory at address MEMADDR. The string + will be at most LEN bytes long (note that excess bytes may be read + in some cases -- but these will not be returned). Returns nullptr + on error. */ + +extern gdb::unique_xmalloc_ptr<char> target_read_string + (CORE_ADDR memaddr, int len, int *bytes_read = nullptr); /* For target_read_memory see target/target.h. */ @@ -1626,10 +1683,10 @@ necessary to continue debugging either the parent or child, as requested, and releasing the other. Information about the fork or vfork event is available via get_last_target_status (). - This function returns 1 if the inferior should not be resumed + This function returns true if the inferior should not be resumed (i.e. there is another event pending). */ -int target_follow_fork (int follow_child, int detach_fork); +bool target_follow_fork (bool follow_child, bool detach_fork); /* Handle the target-specific bookkeeping required when the inferior makes an exec call. INF is the exec'd inferior. */ @@ -1784,9 +1841,10 @@ case this will become true after to_create_inferior or to_attach. */ -extern int target_has_execution_1 (ptid_t); +extern bool target_has_execution_1 (inferior *inf); -/* Like target_has_execution_1, but always passes inferior_ptid. */ +/* Like target_has_execution_1, but always passes + current_inferior(). */ extern int target_has_execution_current (void); @@ -1822,6 +1880,9 @@ non-stop" is on. */ extern int target_is_non_stop_p (void); +/* Return true if at least one inferior has a non-stop target. */ +extern bool exists_non_stop_target (); + #define target_execution_direction() \ (current_top_target ()->execution_direction ()) @@ -2097,21 +2158,15 @@ current_top_target ()->filesystem_is_local () /* Open FILENAME on the target, in the filesystem as seen by INF, - using FLAGS and MODE. If INF is NULL, use the filesystem seen - by the debugger (GDB or, for remote targets, the remote stub). - Return a target file descriptor, or -1 if an error occurs (and - set *TARGET_ERRNO). */ + using FLAGS and MODE. If INF is NULL, use the filesystem seen by + the debugger (GDB or, for remote targets, the remote stub). Return + a target file descriptor, or -1 if an error occurs (and set + *TARGET_ERRNO). If WARN_IF_SLOW is true, print a warning message + if the file is being accessed over a link that may be slow. */ extern int target_fileio_open (struct inferior *inf, const char *filename, int flags, - int mode, int *target_errno); - -/* Like target_fileio_open, but print a warning message if the - file is being accessed over a link that may be slow. */ -extern int target_fileio_open_warn_if_slow (struct inferior *inf, - const char *filename, - int flags, - int mode, - int *target_errno); + int mode, bool warn_if_slow, + int *target_errno); /* Write up to LEN bytes from WRITE_BUF to FD on the target. Return the number of bytes written, or -1 if an error occurs @@ -2344,6 +2399,20 @@ extern int unpush_target (struct target_ops *); +/* A unique_ptr helper to unpush a target. */ + +struct target_unpusher +{ + void operator() (struct target_ops *ops) const + { + unpush_target (ops); + } +}; + +/* A unique_ptr that unpushes a target on destruction. */ + +typedef std::unique_ptr<struct target_ops, target_unpusher> target_unpush_up; + extern void target_pre_inferior (int); extern void target_preopen (int); @@ -2359,7 +2428,7 @@ strictly above ABOVE_STRATUM. */ extern void pop_all_targets_above (enum strata above_stratum); -extern int target_is_pushed (struct target_ops *t); +extern bool target_is_pushed (target_ops *t); extern CORE_ADDR target_translate_tls_address (struct objfile *objfile, CORE_ADDR offset); diff -Nru gdb-9.1/gdb/target-memory.c gdb-10.2/gdb/target-memory.c --- gdb-9.1/gdb/target-memory.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/target-memory.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,7 +1,7 @@ /* Parts of target interface that deal with accessing memory and memory-like objects. - Copyright (C) 2006-2020 Free Software Foundation, Inc. + Copyright (C) 2006-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/terminal.h gdb-10.2/gdb/terminal.h --- gdb-9.1/gdb/terminal.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/terminal.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Terminal interface definitions for GDB, the GNU Debugger. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/aclocal.m4 gdb-10.2/gdb/testsuite/aclocal.m4 --- gdb-9.1/gdb/testsuite/aclocal.m4 2019-11-19 01:10:41.000000000 +0000 +++ gdb-10.2/gdb/testsuite/aclocal.m4 2020-09-13 02:33:41.000000000 +0000 @@ -1,5 +1,6 @@ m4_include(../../config/acx.m4) m4_include(../../config/override.m4) +m4_include(../../config/enable.m4) m4_include(../transform.m4) # AM_CONDITIONAL -*- Autoconf -*- diff -Nru gdb-9.1/gdb/testsuite/analyze-racy-logs.py gdb-10.2/gdb/testsuite/analyze-racy-logs.py --- gdb-9.1/gdb/testsuite/analyze-racy-logs.py 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/analyze-racy-logs.py 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ #!/usr/bin/env python -# Copyright (C) 2016-2020 Free Software Foundation, Inc. +# Copyright (C) 2016-2021 Free Software Foundation, Inc. # # This file is part of GDB. # diff -Nru gdb-9.1/gdb/testsuite/boards/cc-with-debug-names.exp gdb-10.2/gdb/testsuite/boards/cc-with-debug-names.exp --- gdb-9.1/gdb/testsuite/boards/cc-with-debug-names.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/boards/cc-with-debug-names.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/boards/cc-with-dwz.exp gdb-10.2/gdb/testsuite/boards/cc-with-dwz.exp --- gdb-9.1/gdb/testsuite/boards/cc-with-dwz.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/boards/cc-with-dwz.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/boards/cc-with-dwz-m.exp gdb-10.2/gdb/testsuite/boards/cc-with-dwz-m.exp --- gdb-9.1/gdb/testsuite/boards/cc-with-dwz-m.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/boards/cc-with-dwz-m.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/boards/cc-with-gdb-index.exp gdb-10.2/gdb/testsuite/boards/cc-with-gdb-index.exp --- gdb-9.1/gdb/testsuite/boards/cc-with-gdb-index.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/boards/cc-with-gdb-index.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/boards/cc-with-tweaks.exp gdb-10.2/gdb/testsuite/boards/cc-with-tweaks.exp --- gdb-9.1/gdb/testsuite/boards/cc-with-tweaks.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/boards/cc-with-tweaks.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -69,7 +69,5 @@ } set F77_FOR_TARGET "$contrib_dir/cc-with-tweaks.sh $CC_WITH_TWEAKS_FLAGS $F77_FOR_TARGET" -set pwd [exec pwd -P] -exec echo $GDB $INTERNAL_GDBFLAGS $GDBFLAGS \"\$@\" > $pwd/gdb.sh -exec chmod +x gdb.sh -set env(GDB) $pwd/gdb.sh +set env(GDB) \ + [cached_file gdb.sh "$GDB $INTERNAL_GDBFLAGS $GDBFLAGS \"\$@\"" 1] diff -Nru gdb-9.1/gdb/testsuite/boards/debug-types.exp gdb-10.2/gdb/testsuite/boards/debug-types.exp --- gdb-9.1/gdb/testsuite/boards/debug-types.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/boards/debug-types.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,41 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# This file is a dejagnu "board file" and is used to run the testsuite +# with -fdebug-types-section. +# +# Example usage: +# bash$ make check RUNTESTFLAGS='--target_board=debug-types' + +load_board_description "local-board" + +# This is based on baseboards/unix.exp. +# At the moment we only support systems that unix.exp supports. +load_generic_config "unix" +process_multilib_options "" +set found_gcc [find_gcc] +set found_gxx [find_g++] +set found_gnatmake [find_gnatmake] +set found_f90 [find_gfortran] +set found_f77 [find_g77] +set_board_info compiler "$found_gcc" + +# The -fdebug-types-section switch only has an effect with DWARF version 4. +# For now, we don't enforce DWARF-4. This lets test-cases that enforce a +# different version alone. And since DWARF-4 is the default for gcc-4.8 +# - gcc-10 anyway, we don't lose much test coverage that way. +#set_board_info debug_flags "-gdwarf-4 -fdebug-types-section" + +set_board_info debug_flags "-g -fdebug-types-section" diff -Nru gdb-9.1/gdb/testsuite/boards/dwarf4-gdb-index.exp gdb-10.2/gdb/testsuite/boards/dwarf4-gdb-index.exp --- gdb-9.1/gdb/testsuite/boards/dwarf4-gdb-index.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/boards/dwarf4-gdb-index.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/boards/fission-dwp.exp gdb-10.2/gdb/testsuite/boards/fission-dwp.exp --- gdb-9.1/gdb/testsuite/boards/fission-dwp.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/boards/fission-dwp.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/boards/fission.exp gdb-10.2/gdb/testsuite/boards/fission.exp --- gdb-9.1/gdb/testsuite/boards/fission.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/boards/fission.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/boards/gdbserver-base.exp gdb-10.2/gdb/testsuite/boards/gdbserver-base.exp --- gdb-9.1/gdb/testsuite/boards/gdbserver-base.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/boards/gdbserver-base.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -22,7 +22,7 @@ set_board_info compiler "[find_gcc]" # Test the copy of gdbserver in the build directory. -set_board_info gdb_server_prog "[pwd]/../gdbserver/gdbserver" +set_board_info gdb_server_prog "[pwd]/../../gdbserver/gdbserver" # gdbserver does not intercept target file operations and perform them # on the host. diff -Nru gdb-9.1/gdb/testsuite/boards/gold.exp gdb-10.2/gdb/testsuite/boards/gold.exp --- gdb-9.1/gdb/testsuite/boards/gold.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/boards/gold.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,32 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# This file is a dejagnu "board file" and is used to run the testsuite +# with the gold linker. +# +# Example usage: +# bash$ make check RUNTESTFLAGS='--target_board=gold' + +# This is copied from baseboards/unix.exp. +# At the moment this only supports things that unix.exp supports. +load_generic_config "unix" +process_multilib_options "" +set_board_info compiler "[find_gcc]" + +set_board_info debug_flags \ + [join { "-g" "-fuse-ld=gold" }] + +# This is needed otherwise dejagnu tries to rsh to host "gold". +load_board_description "local-board" diff -Nru gdb-9.1/gdb/testsuite/boards/gold-gdb-index.exp gdb-10.2/gdb/testsuite/boards/gold-gdb-index.exp --- gdb-9.1/gdb/testsuite/boards/gold-gdb-index.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/boards/gold-gdb-index.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,45 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# This file is a dejagnu "board file" and is used to run the testsuite +# with gold --gdb-index. +# +# Example usage: +# bash$ make check RUNTESTFLAGS='--target_board=gold-gdb-index' + +load_board_description "local-board" + +# This is based on baseboards/unix.exp. +# At the moment we only support systems that unix.exp supports. +load_generic_config "unix" +process_multilib_options "" +set found_gcc [find_gcc] +set found_gxx [find_g++] +set found_gnatmake [find_gnatmake] +set found_f90 [find_gfortran] +set found_f77 [find_g77] +set_board_info compiler "$found_gcc" + +set opts [list] +lappend opts \ + "-g" \ + "-Wl,--gdb-index" \ + "-fuse-ld=gold" + +# Note: Gold also produces an index when -ggnu-pubnames is not used. Comment +# out this line to exercise this scenario. +lappend opts -ggnu-pubnames + +set_board_info debug_flags [join $opts] diff -Nru gdb-9.1/gdb/testsuite/boards/local-board.exp gdb-10.2/gdb/testsuite/boards/local-board.exp --- gdb-9.1/gdb/testsuite/boards/local-board.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/boards/local-board.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/boards/local-remote-host.exp gdb-10.2/gdb/testsuite/boards/local-remote-host.exp --- gdb-9.1/gdb/testsuite/boards/local-remote-host.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/boards/local-remote-host.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/boards/local-remote-host-native.exp gdb-10.2/gdb/testsuite/boards/local-remote-host-native.exp --- gdb-9.1/gdb/testsuite/boards/local-remote-host-native.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/boards/local-remote-host-native.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/boards/local-remote-host-notty.exp gdb-10.2/gdb/testsuite/boards/local-remote-host-notty.exp --- gdb-9.1/gdb/testsuite/boards/local-remote-host-notty.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/boards/local-remote-host-notty.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/boards/native-extended-gdbserver.exp gdb-10.2/gdb/testsuite/boards/native-extended-gdbserver.exp --- gdb-9.1/gdb/testsuite/boards/native-extended-gdbserver.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/boards/native-extended-gdbserver.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -102,7 +102,7 @@ return [extended_gdbserver_load_last_file] } -proc gdb_reload { } { +proc gdb_reload { {inferior_args {}} } { return [extended_gdbserver_load_last_file] } diff -Nru gdb-9.1/gdb/testsuite/boards/native-gdbserver.exp gdb-10.2/gdb/testsuite/boards/native-gdbserver.exp --- gdb-9.1/gdb/testsuite/boards/native-gdbserver.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/boards/native-gdbserver.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -27,9 +27,6 @@ # This gdbserver can only run a process once per session. set_board_info gdb,do_reload_on_run 1 -# There's no support for argument-passing (yet). -set_board_info noargs 1 - set_board_info use_gdb_stub 1 set_board_info exit_is_reliable 1 diff -Nru gdb-9.1/gdb/testsuite/boards/native-stdio-gdbserver.exp gdb-10.2/gdb/testsuite/boards/native-stdio-gdbserver.exp --- gdb-9.1/gdb/testsuite/boards/native-stdio-gdbserver.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/boards/native-stdio-gdbserver.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/boards/readnow.exp gdb-10.2/gdb/testsuite/boards/readnow.exp --- gdb-9.1/gdb/testsuite/boards/readnow.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/boards/readnow.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/boards/remote-gdbserver-on-localhost.exp gdb-10.2/gdb/testsuite/boards/remote-gdbserver-on-localhost.exp --- gdb-9.1/gdb/testsuite/boards/remote-gdbserver-on-localhost.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/boards/remote-gdbserver-on-localhost.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/boards/remote-stdio-gdbserver.exp gdb-10.2/gdb/testsuite/boards/remote-stdio-gdbserver.exp --- gdb-9.1/gdb/testsuite/boards/remote-stdio-gdbserver.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/boards/remote-stdio-gdbserver.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/boards/simavr.exp gdb-10.2/gdb/testsuite/boards/simavr.exp --- gdb-9.1/gdb/testsuite/boards/simavr.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/boards/simavr.exp 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,124 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Let the user override the path to the simavr binary with the SIMAVR_PATH +# environment variable. + +if { [info exists ::env(SIMAVR_PATH)] } { + set simavr_path $::env(SIMAVR_PATH) +} else { + set simavr_path simavr +} + +# Let the user override the simulated AVR chip with the SIMAVR_PATH environment +# variable. +# +# The value passed here must be supported by avr-gcc (see the -mmcu flag in the +# `AVR Options` section of the gcc(1) man page) and by simavr (see output of +# `simavr --list-cores`). + +if { [info exists ::env(SIMAVR_MCU)] } { + set simavr_mcu $::env(SIMAVR_MCU) +} else { + set simavr_mcu atmega2560 +} + +set simavr_last_load_file "" +set simavr_spawn_id "" + +set_board_info compiler avr-gcc +set_board_info c++compiler avr-g++ + +set_board_info cflags "-mmcu=${simavr_mcu}" +set_board_info ldflags "-mmcu=${simavr_mcu}" + +set_board_info use_gdb_stub 1 +set_board_info gdb_protocol "remote" +set_board_info gdb,do_reload_on_run 1 +set_board_info noargs 1 +set_board_info gdb,noinferiorio 1 +set_board_info gdb,nofileio 1 +set_board_info gdb,noresults 1 +set_board_info gdb,nosignals 1 + +proc gdb_load { file } { + global simavr_last_load_file + global simavr_spawn_id + global simavr_mcu + global simavr_path + global gdb_prompt + + if { $file == "" } { + set file $simavr_last_load_file + } else { + set simavr_last_load_file $file + } + + gdb_file_cmd $file + + # Close any previous simavr instance. + if { $simavr_spawn_id != "" } { + verbose -log "simavr: closing previous spawn id $simavr_spawn_id" + if [catch { close -i $simavr_spawn_id } != 0] { + warning "simavr: failed to close connection to previous simavr instance" + } + + wait -i $simavr_spawn_id + set simavr_spawn_id "" + } + + # Run simavr. + set cmd "spawn -noecho ${simavr_path} --mcu ${simavr_mcu} -g $file" + verbose -log "Spawning simavr: $cmd" + eval $cmd + set simavr_spawn_id $spawn_id + + verbose -log "simavr: simavr spawned with spawn id $simavr_spawn_id, pid [exp_pid $simavr_spawn_id]" + + # Wait for "listening on port" message of simavr. + expect { + -i $simavr_spawn_id -re ".*avr_gdb_init listening on port 1234" {} + timeout { + verbose -log "simavr: timeout, closing simavr spawn id" + close -i $simavr_spawn_id + verbose -log "simavr: timeout, waiting for simavr process exit" + wait -i $simavr_spawn_id + set simavr_spawn_id "" + error "unable to start simavr: timeout" + } + eof { + verbose -log "simavr: eof, waiting for simavr process exit" + wait -i $simavr_spawn_id + set simavr_spawn_id "" + error "unable to start simavr: eof" + } + } + + # Connect to simavr. + send_gdb "target remote :1234\n" + gdb_expect { + -re ".*Remote debugging using :1234.*\[\r\n\]+$gdb_prompt $" {} + timeout { + verbose -log "simavr: unable to connect to simavr, closing simavr spawn id" + close -i $simavr_spawn_id + verbose -log "simavr: unable to connect to simavr, waiting for simavr process exit" + wait -i $simavr_spawn_id + set simavr_spawn_id "" + error "unable to connect to simavr stub" + } + } + + return 0 +} diff -Nru gdb-9.1/gdb/testsuite/boards/stabs.exp gdb-10.2/gdb/testsuite/boards/stabs.exp --- gdb-9.1/gdb/testsuite/boards/stabs.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/boards/stabs.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/boards/stdio-gdbserver-base.exp gdb-10.2/gdb/testsuite/boards/stdio-gdbserver-base.exp --- gdb-9.1/gdb/testsuite/boards/stdio-gdbserver-base.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/boards/stdio-gdbserver-base.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -45,7 +45,7 @@ return "| [get_target_remote_pipe_cmd]" } -proc gdb_reload { } { +proc gdb_reload { {inferior_args {}} } { return [gdb_target_cmd "remote" [make_gdbserver_stdio_port]] } diff -Nru gdb-9.1/gdb/testsuite/ChangeLog gdb-10.2/gdb/testsuite/ChangeLog --- gdb-9.1/gdb/testsuite/ChangeLog 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/testsuite/ChangeLog 2021-04-25 04:06:26.000000000 +0000 @@ -1,13 +1,3438 @@ +2021-04-22 Simon Marchi <simon.marchi@polymtl.ca> + + * gdb.python/flexible-array-member.exp: Add check for Python + support. + +2021-04-22 Simon Marchi <simon.marchi@polymtl.ca> + + PR gdb/27757 + * gdb.python/flexible-array-member.c: New test. + * gdb.python/flexible-array-member.exp: New test. + * gdb.guile/scm-type.exp (test_range): Add test for flexible + array member. + * gdb.guile/scm-type.c (struct flex_member): New. + (main): Use it. + +2021-04-22 Simon Marchi <simon.marchi@polymtl.ca> + + PR gdb/27757 + * gdb.python/flexible-array-member.c: New test. + * gdb.python/flexible-array-member.exp: New test. + * gdb.guile/scm-type.exp (test_range): Add test for flexible + array member. + * gdb.guile/scm-type.c (struct flex_member): New. + (main): Use it. + +2021-03-30 Simon Marchi <simon.marchi@polymtl.ca> + + PR gdb/27541 + * gdb.base/index-cache-load-twice.exp: Remove. + * gdb.base/index-cache-load-twice.c: Remove. + * gdb.dwarf2/per-bfd-sharing.exp: New. + * gdb.dwarf2/per-bfd-sharing.c: New. + +2021-03-07 Tom de Vries <tdevries@suse.de> + + PR symtab/27341 + * lib/gdb.exp (with_complaints): New proc, factored out of ... + (gdb_load_no_complaints): ... here. + * gdb.fortran/function-calls.exp: Add test-case. + +2021-02-02 Simon Marchi <simon.marchi@efficios.com> + + * lib/dwarf.exp (rnglists): Add -no-offset-array option to + table proc. + * gdb.dwarf2/rnglists-sec-offset.exp: Add test for + .debug_rnglists table without offset array. + * gdb.dwarf2/loclists-sec-offset.exp: Add test for + .debug_loclists table without offset array. + +2021-02-02 Simon Marchi <simon.marchi@efficios.com> + + PR gdb/26813 + * lib/dwarf.exp (_handle_DW_FORM): Handle DW_FORM_loclistx. + (loclists): New proc. + * gdb.dwarf2/loclists-multiple-cus.c: New. + * gdb.dwarf2/loclists-multiple-cus.exp: New. + * gdb.dwarf2/loclists-sec-offset.c: New. + * gdb.dwarf2/loclists-sec-offset.exp: New. + +2021-02-02 Simon Marchi <simon.marchi@efficios.com> + + * lib/dwarf.exp (_location): Add parameters. + (_handle_DW_FORM): Adjust. + +2021-02-02 Simon Marchi <simon.marchi@efficios.com> + + PR gdb/26813 + * lib/dwarf.exp (_handle_DW_FORM): Handle DW_FORM_rnglistx. + (cu): Generate header for DWARF 5. + (rnglists): New proc. + * gdb.dwarf2/rnglists-multiple-cus.exp: New. + * gdb.dwarf2/rnglists-sec-offset.exp: New. + +2020-12-09 Simon Marchi <simon.marchi@efficios.com> + + PR 26875, PR 26901 + * gdb.base/flexible-array-member.c: New test. + * gdb.base/flexible-array-member.exp: New test. + +2020-10-24 Joel Brobecker <brobecker@adacore.com> + + * gdb.base/default.exp: Change $_gdb_minor to 2. + +2020-10-22 Simon Marchi <simon.marchi@polymtl.ca> + + PR gdb/26693 + * gdb.dwarf2/template-specification-full-name.exp: New test. + +2020-10-13 Simon Marchi <simon.marchi@polymtl.ca> + + PR gdb/26642 + * gdb.base/maint-target-async-off.c: New test. + * gdb.base/maint-target-async-off.exp: New test. + +2020-09-28 Gareth Rees <grees@undo.io> (tiny change) + + PR python/26586 + * gdb.python/python.exp: add test cases for the from_tty + argument to gdb.execute. + +2020-09-25 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + * gdb.base/bp-cmds-sourced-script.c: New file. + * gdb.base/bp-cmds-sourced-script.exp: New test. + * gdb.base/bp-cmds-sourced-script.gdb: New file. + +2020-09-24 Tom Tromey <tromey@adacore.com> + + PR tui/26638: + * gdb.tui/list.exp: Check output of "focus next". + +2020-09-18 Victor Collod <vcollod@nvidia.com> + + PR gdb/26635 + * gdb.arch/amd64-prologue-skip-cf-protection.exp: Make the test + compatible with i386, and move it to... + * gdb.arch/i386-prologue-skip-cf-protection.exp: ... here. + * gdb.arch/amd64-prologue-skip-cf-protection.c: Move to... + * gdb.arch/i386-prologue-skip-cf-protection.c: ... here. + +2020-09-18 Pedro Alves <pedro@palves.net> + + PR gdb/26631 + * gdb.multi/multi-target-thread-find.exp: New file. + +2020-09-18 Pedro Alves <pedro@palves.net> + + * gdb.multi/multi-target-continue.exp: New file, factored out from + multi-target.exp. + * gdb.multi/multi-target-info-inferiors.exp: New file, factored out from + multi-target.exp. + * gdb.multi/multi-target-interrupt.exp: New file, factored out from + multi-target.exp. + * gdb.multi/multi-target-no-resumed.exp: New file, factored out from + multi-target.exp. + * gdb.multi/multi-target-ping-pong-next.exp: New file, factored out from + multi-target.exp. + * gdb.multi/multi-target.exp.tcl: New file, factored out from + multi-target.exp. + * gdb.multi/multi-target.exp: Delete. + +2020-09-16 Tom Tromey <tromey@adacore.com> + + PR gdb/26598: + * gdb.base/skipcxx.exp: New file. + * gdb.base/skipcxx.cc: New file. + +2020-09-15 Tom Tromey <tromey@adacore.com> + + PR rust/26197: + * lib/rust-support.exp (rust_llvm_version): New proc. + * gdb.rust/simple.exp: Check rust_llvm_version. + +2020-09-11 Moritz Riesterer <moritz.riesterer@intel.com> + Felix Willgerodt <Felix.Willgerodt@intel.com> + + * x86-avx512bf16.c: New file. + * x86-avx512bf16.exp: Likewise. + * lib/gdb.exp (skip_avx512bf16_tests): New function. + +2020-09-11 Tom de Vries <tdevries@suse.de> + + PR exp/26602 + * gdb.cp/ambiguous.exp: Add KFAILs for PR26602. + +2020-09-11 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + * gdb.base/bp-cmds-execution-x-script.exp: Remove a stale comment. + +2020-09-10 Alan Modra <amodra@gmail.com> + + PR 26597 + * gdb.dlang/demangle.exp: Update tests as per gcc commit 387d0773f3. + +2020-09-08 Tom de Vries <tdevries@suse.de> + + * gdb.dwarf2/frame-inlined-in-outer-frame.exp: Consume gdb prompt + after gdb_starti_cmd. + +2020-09-03 Alok Kumar Sharma <AlokKumar.Sharma@amd.com> + + * lib/fortran.exp (fortran_complex8): New proc. + (fortran_complex16): New proc. + * gdb.fortran/complex.exp: Use routines from fortran.exp + * gdb.fortran/pointer-to-pointer.exp: Likewise. + * gdb.fortran/vla-ptr-info.exp: Likewise. + +2020-09-03 Tom de Vries <tdevries@suse.de> + + PR breakpoint/26546 + * gdb.base/label-without-address.exp: Runto main first. + +2020-09-02 Tom Tromey <tromey@adacore.com> + + * gdb.ada/mi_var_access.exp: Test children of access variable. + * gdb.ada/mi_var_access/mi_access.adb: Add new stop markers. + * gdb.ada/mi_var_array.exp: Update. + +2020-08-31 Kevin Buettner <kevinb@redhat.com> + + * gdb.base/corefile.exp (warning-free): XFAIL test when running + on docker w/ AUFS storage driver. + +2020-08-31 Kevin Buettner <kevinb@redhat.com> + + * gdb.base/corefile2.exp (renamed binfile): New tests. + +2020-08-31 Simon Marchi <simon.marchi@efficios.com> + + * gdb.dwarf2/dw2-reg-undefined.exp: Remove spurious #. + +2020-08-31 Simon Marchi <simon.marchi@efficios.com> + + * gdb.dwarf2/frame-inlined-in-outer-frame.exp: New file. + * gdb.dwarf2/frame-inlined-in-outer-frame.S: New file. + +2020-08-31 Simon Marchi <simon.marchi@efficios.com> + + * gdb.dwarf2/dw2-reg-undefined.exp: Test "set debug frame 1" + output, printing a "not saved" value from history and printing a + convenience variable created from a "not saved" value. + +2020-08-31 Tom de Vries <tdevries@suse.de> + + * gdb.base/eh_return.exp: Use nopie. + +2020-08-28 Pedro Alves <pedro@palves.net> + + * gdb.base/advance-until-multiple-locations.exp + (advance_overload, until_overload): Adjust to match the + frame/function header instead of the source line text. + +2020-08-28 Tom de Vries <tdevries@suse.de> + + * gdb.base/label-without-address.c: New test. + * gdb.base/label-without-address.exp: New file. + +2020-08-27 Pedro Alves <pedro@palves.net> + + PR gdb/26523 + PR gdb/26524 + * gdb.base/advance-until-multiple-locations.cc: New. + * gdb.base/advance-until-multiple-locations.exp: New. + +2020-08-27 Simon Marchi <simon.marchi@polymtl.ca> + + * gdb.dwarf2/dw2-reg-undefined.exp: Use multi_line. + +2020-08-27 Andrew Burgess <andrew.burgess@embecosm.com> + + * gdb.arch/amd64-byte.exp: Make test names unique, use + gdb_breakpoint, and fix typo 'forth' -> 'fourth'. + * gdb.arch/amd64-dword.exp: Likewise. + * gdb.arch/amd64-pseudo.c: Fix typo 'forth' -> 'fourth'. + * gdb.arch/amd64-stap-special-operands.exp: Make test names + unique. + * gdb.arch/amd64-tailcall-ret.exp: Likewise. + * gdb.arch/amd64-word.exp: Make test names unique, use + gdb_breakpoint, and fix typo 'forth' -> 'fourth'. + * gdb.arch/i386-byte.exp: Make test names unique, use + gdb_breakpoint. + * gdb.arch/i386-word.exp: Likewise. + +2020-08-25 Shahab Vahedi <shahab@synopsys.com> + + * gdb.arch/arc-tdesc-cpu.xml: Use new feature names. + +2020-08-25 Simon Marchi <simon.marchi@polymtl.ca> + + PR gdb/26532 + * gdb.threads/stepi-random-signal.exp: Update pattern. + +2020-08-25 Simon Marchi <simon.marchi@efficios.com> + + PR gdb/26532 + * gdb.base/ui-redirect.exp: Update pattern. + +2020-08-25 Gary Benson <gbenson@redhat.com> + + * gdb.dwarf2/dw2-dir-file-name.exp: Use system assembler + when compiling with clang. + * gdb.dwarf2/dw2-restore.exp: Likewise. + +2020-08-25 Gary Benson <gbenson@redhat.com> + + * gdb.cp/ambiguous.exp: Enable test when compiling with GCC. + Add additional_flags=-Wno-inaccessible-base when compiling + with GCC >= 10.1 or clang. Add additional_flags=-w when + compiling with GCC < 10. + +2020-08-25 Gaius Mulley <gaiusmod2@gmail.com> + + PR m2/26372 + * gdb.modula2/multidim.c: New file. + * gdb.modula2/multidim.exp: New file. + +2020-08-24 Simon Marchi <simon.marchi@polymtl.ca> + + * lib/gdb.exp (runto): Always emit fail on internal error. + +2020-08-24 Simon Marchi <simon.marchi@efficios.com> + + * gdb.base/gdb-sigterm.exp (do_test): Update expected regexp. + * gdb.threads/signal-while-stepping-over-bp-other-thread.exp: + Likewise. + * gdb.threads/stepi-random-signal.exp: Likewise. + +2020-08-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + * gdb.base/print-file-var.exp: Fix typo "breapoint". + * gdb.trace/strace.exp: Ditto. + +2020-08-19 Alok Kumar Sharma <AlokKumar.Sharma@amd.com> + + * gdb.fortran/vla-type.exp: Skip commands not required for + the Flang compiled binaries after prologue fix. + +2020-08-17 Tom de Vries <tdevries@suse.de> + Tom Tromey <tromey@adacore.com> + + PR rust/26197: + * gdb.rust/simple.exp (xfail_pattern): Update for new failure. + +2020-08-17 Tom Tromey <tromey@adacore.com> + + * gdb.ada/mi_var_access.exp: New file. + * gdb.ada/mi_var_access/mi_access.adb: New file. + * gdb.ada/mi_var_access/pck.adb: New file. + * gdb.ada/mi_var_access/pck.ads: New file. + +2020-08-16 Tom de Vries <tdevries@suse.de> + + PR gdb/25350 + * gdb.base/eh_return.c: New test. + * gdb.base/eh_return.exp: New file. + +2020-08-15 Tom de Vries <tdevries@suse.de> + + * gdb.fortran/mixed-lang-stack.c (fortran_charlen_t): New type. + (mixed_func_1d_): Use fortran_charlen_t in decl. + +2020-08-15 Tom de Vries <tdevries@suse.de> + + PR backtrace/26390 + * gdb.fortran/mixed-lang-stack.exp: Call bt with -frame-arguments all. + Update expected pattern. + +2020-08-13 Pedro Alves <pedro@palves.net> + + * gdb.fortran/complex.exp: Check skip_fortran_tests. + * gdb.fortran/library-module.exp: Likewise. + * gdb.fortran/logical.exp: Likewise. + * gdb.fortran/module.exp: Likewise. + * gdb.fortran/print_type.exp: Likewise. + * gdb.fortran/vla-alloc-assoc.exp: Likewise. + * gdb.fortran/vla-datatypes.exp: Likewise. + * gdb.fortran/vla-history.exp: Likewise. + * gdb.fortran/vla-ptr-info.exp: Likewise. + * gdb.fortran/vla-ptype-sub.exp: Likewise. + * gdb.fortran/vla-ptype.exp: Likewise. + * gdb.fortran/vla-sizeof.exp: Likewise. + * gdb.fortran/vla-type.exp: Likewise. + * gdb.fortran/vla-value-sub-arbitrary.exp: Likewise. + * gdb.fortran/vla-value-sub-finish.exp: Likewise. + * gdb.fortran/vla-value-sub.exp: Likewise. + * gdb.fortran/vla-value.exp: Likewise. + +2020-08-13 Pedro Alves <pedro@palves.net> + + * gdb.ada/access_tagged_param.exp: Check skip_ada_tests. + * gdb.ada/access_to_packed_array.exp: Likewise. + * gdb.ada/access_to_unbounded_array.exp: Likewise. + * gdb.ada/addr_arith.exp: Likewise. + * gdb.ada/arr_acc_idx_w_gap.exp: Likewise. + * gdb.ada/arr_arr.exp: Likewise. + * gdb.ada/arr_enum_idx_w_gap.exp: Likewise. + * gdb.ada/array_bounds.exp: Likewise. + * gdb.ada/array_of_variable_length.exp: Likewise. + * gdb.ada/array_ptr_renaming.exp: Likewise. + * gdb.ada/array_subscript_addr.exp: Likewise. + * gdb.ada/arraydim.exp: Likewise. + * gdb.ada/arrayparam.exp: Likewise. + * gdb.ada/arrayptr.exp: Likewise. + * gdb.ada/assign_1.exp: Likewise. + * gdb.ada/assign_arr.exp: Likewise. + * gdb.ada/atomic_enum.exp: Likewise. + * gdb.ada/attr_ref_and_charlit.exp: Likewise. + * gdb.ada/bad-task-bp-keyword.exp: Likewise. + * gdb.ada/bias.exp: Likewise. + * gdb.ada/boolean_expr.exp: Likewise. + * gdb.ada/bp_c_mixed_case.exp: Likewise. + * gdb.ada/bp_enum_homonym.exp: Likewise. + * gdb.ada/bp_inlined_func.exp: Likewise. + * gdb.ada/bp_on_var.exp: Likewise. + * gdb.ada/bp_range_type.exp: Likewise. + * gdb.ada/bp_reset.exp: Likewise. + * gdb.ada/call_pn.exp: Likewise. + * gdb.ada/catch_assert_if.exp: Likewise. + * gdb.ada/catch_ex.exp: Likewise. + * gdb.ada/catch_ex_std.exp: Likewise. + * gdb.ada/char_enum.exp: Likewise. + * gdb.ada/char_param.exp: Likewise. + * gdb.ada/complete.exp: Likewise. + * gdb.ada/cond_lang.exp: Likewise. + * gdb.ada/convvar_comp.exp: Likewise. + * gdb.ada/dgopt.exp: Likewise. + * gdb.ada/disc_arr_bound.exp: Likewise. + * gdb.ada/display_nested.exp: Likewise. + * gdb.ada/dot_all.exp: Likewise. + * gdb.ada/dyn_loc.exp: Likewise. + * gdb.ada/dyn_stride.exp: Likewise. + * gdb.ada/excep_handle.exp: Likewise. + * gdb.ada/expr_delims.exp: Likewise. + * gdb.ada/expr_with_funcall.exp: Likewise. + * gdb.ada/exprs.exp: Likewise. + * gdb.ada/fin_fun_out.exp: Likewise. + * gdb.ada/fixed_cmp.exp: Likewise. + * gdb.ada/formatted_ref.exp: Likewise. + * gdb.ada/frame_arg_lang.exp: Likewise. + * gdb.ada/frame_args.exp: Likewise. + * gdb.ada/fullname_bp.exp: Likewise. + * gdb.ada/fun_addr.exp: Likewise. + * gdb.ada/fun_in_declare.exp: Likewise. + * gdb.ada/fun_overload_menu.exp: Likewise. + * gdb.ada/fun_renaming.exp: Likewise. + * gdb.ada/funcall_char.exp: Likewise. + * gdb.ada/funcall_param.exp: Likewise. + * gdb.ada/funcall_ptr.exp: Likewise. + * gdb.ada/funcall_ref.exp: Likewise. + * gdb.ada/homonym.exp: Likewise. + * gdb.ada/info_addr_mixed_case.exp: Likewise. + * gdb.ada/info_auto_lang.exp: Likewise. + * gdb.ada/info_exc.exp: Likewise. + * gdb.ada/info_types.exp: Likewise. + * gdb.ada/int_deref.exp: Likewise. + * gdb.ada/interface.exp: Likewise. + * gdb.ada/iwide.exp: Likewise. + * gdb.ada/lang_switch.exp: Likewise. + * gdb.ada/length_cond.exp: Likewise. + * gdb.ada/maint_with_ada.exp: Likewise. + * gdb.ada/mi_catch_assert.exp: Likewise. + * gdb.ada/mi_catch_ex.exp: Likewise. + * gdb.ada/mi_catch_ex_hand.exp: Likewise. + * gdb.ada/mi_dyn_arr.exp: Likewise. + * gdb.ada/mi_ex_cond.exp: Likewise. + * gdb.ada/mi_exc_info.exp: Likewise. + * gdb.ada/mi_interface.exp: Likewise. + * gdb.ada/mi_prot.exp: Likewise. + * gdb.ada/mi_ref_changeable.exp: Likewise. + * gdb.ada/mi_string_access.exp: Likewise. + * gdb.ada/mi_task_arg.exp: Likewise. + * gdb.ada/mi_task_info.exp: Likewise. + * gdb.ada/mi_var_array.exp: Likewise. + * gdb.ada/mi_var_union.exp: Likewise. + * gdb.ada/mi_variant.exp: Likewise. + * gdb.ada/minsyms.exp: Likewise. + * gdb.ada/mod_from_name.exp: Likewise. + * gdb.ada/nested.exp: Likewise. + * gdb.ada/null_array.exp: Likewise. + * gdb.ada/optim_drec.exp: Likewise. + * gdb.ada/out_of_line_in_inlined.exp: Likewise. + * gdb.ada/packed_array_assign.exp: Likewise. + * gdb.ada/packed_tagged.exp: Likewise. + * gdb.ada/pp-rec-component.exp: Likewise. + * gdb.ada/print_chars.exp: Likewise. + * gdb.ada/print_pc.exp: Likewise. + * gdb.ada/ptr_typedef.exp: Likewise. + * gdb.ada/ptype_arith_binop.exp: Likewise. + * gdb.ada/ptype_array.exp: Likewise. + * gdb.ada/ptype_field.exp: Likewise. + * gdb.ada/ptype_tagged_param.exp: Likewise. + * gdb.ada/ptype_union.exp: Likewise. + * gdb.ada/py_range.exp: Likewise. + * gdb.ada/py_taft.exp: Likewise. + * gdb.ada/rdv_wait.exp: Likewise. + * gdb.ada/rec_comp.exp: Likewise. + * gdb.ada/rec_return.exp: Likewise. + * gdb.ada/ref_param.exp: Likewise. + * gdb.ada/ref_tick_size.exp: Likewise. + * gdb.ada/rename_subscript_param.exp: Likewise. + * gdb.ada/repeat_dyn.exp: Likewise. + * gdb.ada/same_component_name.exp: Likewise. + * gdb.ada/same_enum.exp: Likewise. + * gdb.ada/scalar_storage.exp: Likewise. + * gdb.ada/set_wstr.exp: Likewise. + * gdb.ada/small_reg_param.exp: Likewise. + * gdb.ada/str_binop_equal.exp: Likewise. + * gdb.ada/str_ref_cmp.exp: Likewise. + * gdb.ada/str_uninit.exp: Likewise. + * gdb.ada/sub_variant.exp: Likewise. + * gdb.ada/sym_print_name.exp: Likewise. + * gdb.ada/taft_type.exp: Likewise. + * gdb.ada/tagged.exp: Likewise. + * gdb.ada/tagged_access.exp: Likewise. + * gdb.ada/task_bp.exp: Likewise. + * gdb.ada/task_switch_in_core.exp: Likewise. + * gdb.ada/tasks.exp: Likewise. + * gdb.ada/tick_last_segv.exp: Likewise. + * gdb.ada/tick_length_array_enum_idx.exp: Likewise. + * gdb.ada/type_coercion.exp: Likewise. + * gdb.ada/unc_arr_ptr_in_var_rec.exp: Likewise. + * gdb.ada/unchecked_union.exp: Likewise. + * gdb.ada/uninitialized_vars.exp: Likewise. + * gdb.ada/var_arr_attrs.exp: Likewise. + * gdb.ada/var_arr_typedef.exp: Likewise. + * gdb.ada/var_rec_arr.exp: Likewise. + * gdb.ada/variant-record.exp: Likewise. + * gdb.ada/variant.exp: Likewise. + * gdb.ada/variant_record_packed_array.exp: Likewise. + * gdb.ada/varsize_limit.exp: Likewise. + * gdb.ada/whatis_array_val.exp: Likewise. + * gdb.ada/widewide.exp: Likewise. + * gdb.ada/win_fu_syms.exp: Likewise. + +2020-08-12 Gary Benson <gbenson@redhat.com> + + * gdb.dwarf2/dw2-op-out-param.S (.Ltext5): Fix duplicate label. + +2020-08-04 Andrew Burgess <andrew.burgess@embecosm.com> + + * lib/check-test-names.exp (do_reset_vars): Use 'array unset' to + unset the array variable. + +2020-08-03 Tom de Vries <tdevries@suse.de> + + PR symtab/26333 + * lib/dwarf.exp (DW_LNE_user): New proc. + * gdb.dwarf2/dw2-vendor-extended-opcode.c: New test. + * gdb.dwarf2/dw2-vendor-extended-opcode.exp: New file. + +2020-07-31 Kevin Buettner <kevinb@redhat.com> + + * gdb.base/coremaker2.c: Change all uses of 'unsigned long long' + to 'uintptr_t' + (inttypes.h): Include. + +2020-07-31 Kevin Buettner <kevinb@redhat.com> + + * gdb.base/coremaker2.c (buf_rw): Increase size to 256 KiB. + (C5_24k): Delete. + (C5_8k, C5_64k, C5_256k): New macros. + (buf_ro): Allocate 256 KiB of initialized data. + +2020-07-30 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + * gdb.base/condbreak-bad.exp: Extend the test with scenarios + that attempt to overwrite an existing condition with a condition + that fails parsing and also with a condition that parses fine + but contains junk at the end. + +2020-07-30 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + * gdb.base/condbreak-bad.c: New test. + * gdb.base/condbreak-bad.exp: New file. + +2020-07-30 Tom de Vries <tdevries@suse.de> + + * lib/sym-info-cmds.exp (GDBInfoModuleSymbols::check_entry_1): Factor + out of ... + (GDBInfoModuleSymbols::check_entry): ... here. + (GDBInfoModuleSymbols::check_optional_entry): New proc. + * gdb.fortran/info-modules.exp: Use check_optional_entry for entries + related to __def_init_mod1_M1t1 / __vtype_mod1_M1t1 / __copy_mod1_M1t1. + +2020-07-30 Tom de Vries <tdevries@suse.de> + + * gdb.fortran/ptype-on-functions.exp: Make "_t" suffix on + "__class_some_module_Number_t" optional. + +2020-07-29 Tom de Vries <tdevries@suse.de> + + * lib/selftest-support.exp (selftest_setup): Allow breakpoint at + multiple locations. + +2020-07-29 Tom de Vries <tdevries@suse.de> + + * gdb.dwarf2/dw2-line-number-zero.exp: Set breakpoints on lines + rather than function name. + +2020-07-28 Andrew Burgess <andrew.burgess@embecosm.com> + + PR symtab/26270: + * gdb.cp/disasm-func-name.cc: New file. + * gdb.cp/disasm-func-name.exp: New file. + +2020-07-28 Tom Tromey <tromey@adacore.com> + + * gdb.dwarf2/varval.exp (setup_exec): Add 'or' instruction to + 'varval' location. + +2020-07-28 Andrew Burgess <andrew.burgess@embecosm.com> + + * gdb.python/py-unwind.py: Update to make use of a register + descriptor. + +2020-07-28 Andrew Burgess <andrew.burgess@embecosm.com> + + * gdb.python/py-arch-reg-names.exp: Add additional tests. + +2020-07-25 Andrew Burgess <andrew.burgess@embecosm.com> + + PR fortran/23051 + PR fortran/26139 + * gdb.fortran/class-allocatable-array.exp: New file. + * gdb.fortran/class-allocatable-array.f90: New file. + * gdb.fortran/pointer-to-pointer.exp: New file. + * gdb.fortran/pointer-to-pointer.f90: New file. + +2020-07-25 Tom de Vries <tdevries@suse.de> + + PR symtab/26243 + * gdb.dwarf2/dw2-line-number-zero.c: New test. + * gdb.dwarf2/dw2-line-number-zero.exp: New file. + +2020-07-24 Tom de Vries <tdevries@suse.de> + + PR testsuite/26293 + * gdb.ada/mi_prot.exp: Require gnatmake-8. + +2020-07-23 Pedro Alves <pedro@palves.net> + + * gdb.server/server-kill.exp (prepare): New, factored out from the + top level. + (kill_server): New. + (test_tstatus, test_unwind_nosyms, test_unwind_syms): New. + (top level) : Call test_tstatus, test_unwind_nosyms, test_unwind_syms. + +2020-07-23 Andrew Burgess <andrew.burgess@embecosm.com> + + * gdb.dwarf2/dw2-disasm-over-non-stmt.exp: New file. + +2020-07-22 Sandra Loosemore <sandra@codesourcery.com> + + * lib/gdb.exp (gdb_wrapper_file, gdb_wrapper_flags): + Initialize to empty string at top level. + (gdb_wrapper_init): Revert check for file existence on build. + Build the wrapper in its default place, not a build-specific + location. When host == build, make the pathname absolute. + (gdb_compile): Delete leftover declaration of + gdb_wrapper_initialized. Check gdb_wrapper_file being an empty + string instead of uninitialized. + +2020-07-22 Kevin Buettner <kevinb@redhat.com> + + * gdb.base/corefile2.exp: New file. + * gdb.base/coremaker2.exp: New file. + +2020-07-22 Kevin Buettner <kevinb@redhat.com> + + * gdb.base/coredump-filter.exp: Add second + non-Private-Shared-Anon-File test. + (test_disasm): Rename binfile for test which is expected + to fail. + +2020-07-22 Kevin Buettner <kevinb@redhat.com> + + * gdb.base/corefile.exp: Add test "accessing read-only mmapped + data in core file". + * gdb.base/coremaker.c (buf2ro): New global. + (mmapdata): Add a read-only mmap mapping. + +2020-07-22 Kevin Buettner <kevinb@redhat.com> + + PR corefiles/25631 + * gdb.base/corefile.exp (accessing anonymous, unwritten-to mmap data): + New test. + * gdb.base/coremaker.c (buf3): New global. + (mmapdata): Add mmap call which uses MAP_ANONYMOUS and MAP_PRIVATE + flags. + +2020-07-22 Kevin Buettner <kevinb@redhat.com> + + * gdb.base/coremaker.c (filler_ro): New global constant. + +2020-07-22 Tom Tromey <tromey@adacore.com> + + * gdb.ada/mi_prot.exp: New file. + * gdb.ada/mi_prot/pkg.adb: New file. + * gdb.ada/mi_prot/pkg.ads: New file. + * gdb.ada/mi_prot/prot.adb: New file. + +2020-07-22 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + * gdb.base/jit-reader-simple.exp: Add a scenario for a binary that + loads two JITers. + +2020-07-21 Andrew Burgess <andrew.burgess@embecosm.com> + + * gdb.python/py-arch-reg-groups.exp: Additional tests. + +2020-07-21 Andrew Burgess <andrew.burgess@embecosm.com> + + * gdb.python/py-arch-reg-names.exp: Additional tests. + +2020-07-21 Tom de Vries <tdevries@suse.de> + + * gdb.reverse/solib-precsave.exp: Handle additional "recommended + breakpoint locations". + * gdb.reverse/solib-reverse.exp: Same. + +2020-07-21 Tom de Vries <tdevries@suse.de> + + * gdb.reverse/step-reverse.c (callee): Merge statements. + +2020-07-21 Tom de Vries <tdevries@suse.de> + + * gdb.fortran/info-modules.exp (info module variables): Allow missing + line numbers for some variables. + +2020-07-21 Tom de Vries <tdevries@suse.de> + + * gdb.opt/inline-locals.c (init_array): New func. + (func1): Use init_array. + * gdb.opt/inline-locals.exp: Update pattern. + +2020-07-21 Tom de Vries <tdevries@suse.de> + + * gdb.debuginfod/fetch_src_and_symbols.exp: Use save_vars for env + vars. Fix PATH and DUPLICATE errors. Cleanup whitespace. + +2020-07-20 Ludovic Courtès <ludo@gnu.org> + + * gdb.guile/source2.scm: Add #f first argument to 'format'. + * gdb.guile/types-module.exp: Remove "ERROR:" from + regexps since Guile 3.0 no longer prints that. + +2020-07-20 Ludovic Courtès <ludo@gnu.org> + + * gdb.guile/scm-error.exp ("source $remote_guile_file_1"): Relax + error regexp to match on Guile 2.2. + +2020-07-20 Gary Benson <gbenson@redhat.com> + + * gdb.cp/align.exp: Fix "alignof (void)" tests when compiling + with clang. + +2020-07-20 Tom de Vries <tdevries@suse.de> + + * gdb.threads/omp-par-scope.c (lock, lock2): New variable. + (omp_set_lock_in_order): New function. + (single_scope, multi_scope, nested_func, nested_parallel): Use + omp_set_lock_in_order and omp_unset_lock. + (main): Init and destroy lock and lock2. + +2020-07-20 Tom de Vries <tdevries@suse.de> + + * gdb.base/valgrind-infcall-2.exp: Handle printf unknown return type. + +2020-07-20 Tom de Vries <tdevries@suse.de> + + * gdb.threads/attach-slow-waitpid.exp: Bail out if gdb_start fails. + +2020-07-17 Tom de Vries <tdevries@suse.de> + + * gdb.base/valgrind-infcall-2.c: New test. + * gdb.base/valgrind-infcall-2.exp: New file. + * lib/valgrind.exp (vgdb_start): Add and handle active_at_startup. + +2020-07-17 Tom de Vries <tdevries@suse.de> + + * gdb.dlang/circular.c (found): Use found_label as label name. + * gdb.dwarf2/arr-subrange.c (main): Use main_label as label name. + * gdb.dwarf2/comp-unit-lang.c (func): Use func_label as label name. + * gdb.dlang/circular.exp: Use MACRO_AT_func and MACRO_AT_range. + * gdb.dwarf2/ada-linkage-name.exp: Same. + * gdb.dwarf2/arr-subrange.exp: Same. + * gdb.dwarf2/atomic-type.exp: Same. + * gdb.dwarf2/comp-unit-lang.exp: Same. + * gdb.dwarf2/cpp-linkage-name.exp: Same. + * gdb.dwarf2/dw2-bad-mips-linkage-name.exp: Same. + * gdb.dwarf2/dw2-lexical-block-bare.exp: Same. + * gdb.dwarf2/dw2-regno-invalid.exp: Same. + * gdb.dwarf2/implptr-64bit.exp: Same. + * gdb.dwarf2/imported-unit-abstract-const-value.exp: Same. + * gdb.dwarf2/imported-unit-runto-main.exp: Same. + * gdb.dwarf2/imported-unit.exp: Same. + * gdb.dwarf2/main-subprogram.exp: Same. + * gdb.dwarf2/missing-type-name.exp: Same. + * gdb.dwarf2/nonvar-access.exp: Same. + * gdb.dwarf2/struct-with-sig.exp: Same. + * gdb.dwarf2/typedef-void-finish.exp: Same. + * gdb.dwarf2/void-type.exp: Same. + +2020-07-17 Tom de Vries <tdevries@suse.de> + + * lib/dwarf.exp (Dwarf::MACRO_AT_func, Dwarf::MACRO_AT_range): Drop + src parameter. + * gdb.dlang/watch-loc.exp: Update MACRO_AT_{func,range} calls. + * gdb.dwarf2/bitfield-parent-optimized-out.exp: Same. + * gdb.dwarf2/dw2-ifort-parameter.exp: Same. + * gdb.dwarf2/dw2-opt-structptr.exp: Same. + * gdb.dwarf2/dwz.exp: Same. + * gdb.dwarf2/implptr-optimized-out.exp: Same. + * gdb.dwarf2/implref-array.exp: Same. + * gdb.dwarf2/implref-const.exp: Same. + * gdb.dwarf2/implref-global.exp: Same. + * gdb.dwarf2/implref-struct.exp: Same. + * gdb.dwarf2/info-locals-optimized-out.exp: Same. + * gdb.dwarf2/opaque-type-lookup.exp: Same. + * gdb.dwarf2/var-access.exp: Same. + * gdb.dwarf2/varval.exp: Same. + * gdb.trace/entry-values.exp: Same. + +2020-07-17 Tom de Vries <tdevries@suse.de> + + * lib/dwarf.exp (Dwarf::extern): Remove. + * gdb.compile/compile-ops.exp: Remove use of Dwarf::extern. + * gdb.dlang/circular.exp: Same. + * gdb.dwarf2/comp-unit-lang.exp: Same. + * gdb.dwarf2/dw2-ifort-parameter.exp: Same. + * gdb.dwarf2/dw2-symtab-includes.exp: Same. + * gdb.dwarf2/dwz.exp: Same. + * gdb.dwarf2/imported-unit-abstract-const-value.exp: Same. + * gdb.dwarf2/imported-unit-runto-main.exp: Same. + * gdb.dwarf2/imported-unit.exp: Same. + * gdb.dwarf2/opaque-type-lookup.exp: Same. + +2020-07-16 Sandra Loosemore <sandra@codesourcery.com> + + * gdb.base/shell.exp: Skip pipe tests dependent on sh on Windows host. + Use double quotes instead of single quotes. + +2020-07-16 Caroline Tice <cmtice@google.com> + + * gdb.dwarf2/dw5-rnglist-test.cc: New file. + * gdb.dwarf2/dw5-rnglist-test.exp: New file. + +2020-07-16 Tom de Vries <tdevries@suse.de> + + * lib/dwarf.exp (program): Initialize _line. + (DW_LNE_end_sequence): Reinitialize _line. + (DW_LNS_advance_line): Update _line. + (line): New proc. + * gdb.dwarf2/dw2-inline-many-frames.exp: Use line. + * gdb.dwarf2/dw2-inline-small-func.exp: Same. + * gdb.dwarf2/dw2-inline-stepping.exp: Same. + * gdb.dwarf2/dw2-is-stmt-2.exp: Same. + * gdb.dwarf2/dw2-is-stmt.exp: Same. + * gdb.dwarf2/dw2-ranges-func.exp: Same. + +2020-07-15 Andrew Burgess <andrew.burgess@embecosm.com> + + * gdb.fortran/ptype-on-functions.exp: Make the result pattern more + generic. + +2020-07-15 Tom de Vries <tdevries@suse.de> + + * gdb.trace/entry-values.exp: Expect "call" instead of "callq" if + is_amd64_regs_target. + +2020-07-15 Andrew Burgess <andrew.burgess@embecosm.com> + + * gdb.fortran/ptype-on-functions.exp: Add more tests. + * gdb.fortran/ptype-on-functions.f90: Likewise. + +2020-07-14 Simon Marchi <simon.marchi@polymtl.ca> + + * lib/dwarf.exp (Dwarf::cu, Dwarf::tu, Dwarf::lines): Change valid + values in documentation for addr_size to 4 and 8. + +2020-07-14 Andrew Burgess <andrew.burgess@embecosm.com> + + * gdb.arch/amd64-osabi.exp: Update. + * gdb.arch/arm-disassembler-options.exp: Update. + * gdb.arch/powerpc-disassembler-options.exp: Update. + * gdb.arch/ppc64-symtab-cordic.exp: Update. + * gdb.arch/s390-disassembler-options.exp: Update. + * gdb.base/all-architectures.exp.tcl: Update. + * gdb.base/attach-pie-noexec.exp: Update. + * gdb.base/catch-syscall.exp: Update. + * gdb.xml/tdesc-arch.exp: Update. + +2020-07-14 Tom de Vries <tdevries@suse.de> + + * gdb.threads/clone-new-thread-event.c (gettid): Rename to ... + (local_gettid): ... this. + (fn): Update. + +2020-07-13 Sandra Loosemore <sandra@codesourcery.com> + + * gdb.base/info_sources.exp: Skip directory match tests on + remote hosts. + +2020-07-13 Gary Benson <gbenson@redhat.com> + + * gdb.base/savedregs.exp (caller): Use parentheses to + make expected expression evaluation ordering explicit. + +2020-07-13 Gary Benson <gbenson@redhat.com> + + * gdb.arch/i386-sse.c (have_sse) <edx>: Make unsigned. + +2020-07-13 Gary Benson <gbenson@redhat.com> + + * gdb.base/bigcore.c (main): Use a volatile pointer when + attempting to trigger a SIGSEGV. + * gdb.base/gcore-relro-pie.c (break_here): Likewise. + * gdb.base/gcore-tls-pie.c (break_here): Likewise. + * gdb.base/savedregs.c (thrower): Likewise. + * gdb.mi/mi-syn-frame.c (bar): Likewise. + +2020-07-13 Gary Benson <gbenson@redhat.com> + + * gdb.base/vla-datatypes.c (vla_factory): Factor out sections + defining and using VLA structure fields into... + * gdb.base/vla-struct-fields.c: New file. + * gdb.base/vla-datatypes.exp: Factor out VLA structure field + tests into... + * gdb.base/vla-struct-fields.exp: New file. + +2020-07-13 Tom de Vries <tdevries@suse.de> + + * lib/gdb.exp (have_fuse_ld_gold): New caching proc. + * gdb.base/gcore-tls-pie.exp: Use have_fuse_ld_gold. + * gdb.base/gold-gdb-index.exp: Same. + * gdb.base/morestack.exp: Same. + +2020-07-11 Daniel Xu <dxu@dxuuu.xyz> + + PR rust/26121 + * gdb.rust/modules.rs: Prevent linker from discarding test + symbol. + +2020-07-10 Pedro Alves <pedro@palves.net> + + PR gdb/26199 + * gdb.multi/multi-target.c (exit_thread): New. + (thread_start): Break loop if EXIT_THREAD. + * gdb.multi/multi-target.exp (test_no_unwaited_for): New proc. + (top level) Call test_no_resumed. + +2020-07-08 Tom Tromey <tromey@adacore.com> + + * gdb.ada/catch_ex/foo.adb: Pass string to raise. + * gdb.ada/catch_ex.exp: Examine catchpoint text. + +2020-07-06 Andrew Burgess <andrew.burgess@embecosm.com> + + PR python/22748 + * gdb.opt/inline-frame-tailcall.c: New file. + * gdb.opt/inline-frame-tailcall.exp: New file. + * gdb.python/py-unwind-inline.c: New file. + * gdb.python/py-unwind-inline.exp: New file. + * gdb.python/py-unwind-inline.py: New file. + +2020-07-06 Andrew Burgess <andrew.burgess@embecosm.com> + + * gdb.python/py-arch-reg-groups.exp: New file. + +2020-07-06 Andrew Burgess <andrew.burgess@embecosm.com> + + * gdb.python/py-arch-reg-names.exp: New file. + +2020-07-06 Andrew Burgess <andrew.burgess@embecosm.com> + + * gdb.python/py-unwind.py (TestUnwinder::__call__): Add test for + gdb.PendingFrame.architecture method. + +2020-07-06 Tom de Vries <tdevries@suse.de> + + * gdb.dwarf2/dw2-ranges-base.exp: Test line-table order. + +2020-07-03 Pedro Alves <palves@redhat.com> + + * gdb.base/structs2.c (main): Adjust second parem_reg call to + explicitly write negative numbers. + * gdb.base/structs2.exp: Adjust expected output. + +2020-07-03 Pedro Alves <palves@redhat.com> + + * gdb.base/charset.c (init_string): Change all char parameters to + unsigned char parameters. + +2020-07-03 Pedro Alves <palves@redhat.com> + + * gdb.base/call-sc.exp (start_scalars_test): Use + prepare_for_testing and don't try compiling with -DNO_PROTOTYPES. + * gdb.base/overlays.c: Remove references to PARAMS. + * gdb.base/ovlymgr.h (PARAMS): Delete, and remove all references. + * gdb.base/reread.exp: Don't set 'prototypes' global. + * gdb.base/structs.exp (start_structs_test): Use + prepare_for_testing and don't try compiling with -DNO_PROTOTYPES. + * gdb.base/structs2.exp: Don't set 'prototypes' global. Use + prepare_for_testing and don't try compiling with -DNO_PROTOTYPES. + Don't issue "set width 0". Remove gdb_stop_suppressing_tests + call. + * gdb.base/varargs.exp: Don't set 'prototypes' global. + +2020-07-03 Pedro Alves <palves@redhat.com> + + * gdb.base/m32rovly.c: Delete. + * gdb.base/ovlymgr.c: Remove all code guarded by __D10V__. + +2020-06-30 Philippe Waroquiers <philippe.waroquiers@skynet.be> + + * gdb.python/py-breakpoint.exp: use gdb_test_multiline instead + of gdb_py_test_multiple. + * gdb.python/py-cmd.exp: Likewise. + * gdb.python/py-events.exp: Likewise. + * gdb.python/py-function.exp: Likewise. + * gdb.python/py-inferior.exp: Likewise. + * gdb.python/py-infthread.exp: Likewise. + * gdb.python/py-linetable.exp: Likewise. + * gdb.python/py-parameter.exp: Likewise. + * gdb.python/py-value.exp: Likewise. + +2020-06-30 Tom de Vries <tdevries@suse.de> + + PR testsuite/26175 + * lib/future.exp (gdb_default_target_compile): Detect and handle + early_flags. + +2020-06-29 Simon Marchi <simon.marchi@efficios.com> + + * boards/simavr.exp (gdb_load): Catch errors when closing + previous connection. Close connection, wait for process and + unset simavr_spawn_id on failure. + +2020-06-29 Tom de Vries <tdevries@suse.de> + + * lib/gdb.exp (unknown): Make test-case unresolved. + +2020-06-29 Tom de Vries <tdevries@suse.de> + + PR gdb/25475 + * gdb.server/solib-list.exp: Verify that the symbol reload + confirmation question is asked. + +2020-06-26 Philippe Waroquiers <philippe.waroquiers@skynet.be> + + * lib/gdb.exp (gdb_test_multiline): New, moved from gdb-guile.exp, + have a input seq nr in each pass message. + * lib/gdb-guile.exp (gdb_test_multiline): Move to gdb.exp. + * lib/gdb-python.exp (gdb_py_test_multiple): Remove. + * gdb.python/python.exp: Make test names unique, + use gdb_test_multiline instead of gdb_py_test_multiple, + use $gdb_test_name. + * gdb.guile/guile.exp: Make test names unique, use $gdb_test_name + +2020-06-26 Nick Alcock <nick.alcock@oracle.com> + + * configure.ac: Add --enable-libctf. + * aclocal.m4: sinclude ../config/enable.m4. + * Makefile.in (site.exp): Add enable_libctf to site.exp. + * lib/gdb.exp (skip_ctf_tests): Use it. + * gdb.base/ctf-constvars.exp: Error message tweak. + * gdb.base/ctf-ptype.exp: Likewise. + * configure: Regenerate. + +2020-06-26 Gary Benson <gbenson@redhat.com> + + * gdb.cp/try_catch.cc: Include string.h. + (main): Replace comparison against string literal with + strcmp, avoiding build failure with -Wstring-compare. + Add "marker test-complete". + * gdb.cp/try_catch.exp: Run the test to the above marker, + then verify that the value of "test" is still true. + +2020-06-25 Andrew Burgess <andrew.burgess@embecosm.com> + + * gdb.arch/riscv-tdesc-regs.exp: New test cases. + +2020-06-25 Andrew Burgess <andrew.burgess@embecosm.com> + + * gdb.arch/riscv-tdesc-regs.exp: Extend test case. + +2020-06-25 Andrew Burgess <andrew.burgess@embecosm.com> + + * gdb.arch/riscv-tdesc-loading-01.xml: New file. + * gdb.arch/riscv-tdesc-loading-02.xml: New file. + * gdb.arch/riscv-tdesc-loading-03.xml: New file. + * gdb.arch/riscv-tdesc-loading-04.xml: New file. + * gdb.arch/riscv-tdesc-loading.exp: New file. + +2020-06-25 Andrew Burgess <andrew.burgess@embecosm.com> + + * gdb.arch/riscv-tdesc-regs.exp: Extend test case. + +2020-06-25 Andrew Burgess <andrew.burgess@embecosm.com> + + * gdb.arch/riscv-tdesc-regs-32.xml: New file. + * gdb.arch/riscv-tdesc-regs-64.xml: New file. + * gdb.arch/riscv-tdesc-regs.c: New file. + * gdb.arch/riscv-tdesc-regs.exp: New file. + +2020-06-24 Pedro Alves <palves@redhat.com> + + * gdb.arch/amd64-entry-value-paramref.exp: Use + prepare_for_testing_full and don't pass "c++" for the .S file + build spec. + * gdb.compile/compile-cplus.exp: Don't compile $srcfile3 with + $options, since it's an assembly file. Remove -Wno-deprecated. + * lib/gdb.exp (gdb_compile): Pass "-x c++" explicitly when + compiling C++ programs. + +2020-06-24 Pedro Alves <palves@redhat.com> + + * lib/gdb.exp (gdb_compile): Update intro comment. If C/C++ with + Clang, add "-Wno-unknown-warning-option" to the options. + +2020-06-23 Andrew Burgess <andrew.burgess@embecosm.com> + + * gdb.xml/tdesc-reload.c: New file. + * gdb.xml/tdesc-reload.exp: New file. + * gdb.xml/maint-xml-dump-01.xml: New file. + * gdb.xml/maint-xml-dump-02.xml: New file. + * gdb.xml/maint-xml-dump.exp: New file. + +2020-06-23 Sandra Loosemore <sandra@codesourcery.com> + + * lib/completion-support.exp (test_gdb_completion_offers_commands): + Adjust for omitted commands when TUI is disabled. + +2020-06-23 Gary Benson <gbenson@redhat.com> + Pedro Alves <palves@redhat.com> + + * gdb.cp/namespace.cc: Improve -Wunused-value fix. + * gdb.cp/nsimport.cc: Likewise. + * gdb.cp/nsnested.cc: Likewise. + * gdb.cp/nsnoimports.cc: Likewise. + * gdb.cp/nsusing.cc: Likewise. + * gdb.cp/smartp.cc: Likewise. + * gdb.python/py-pp-integral.c: Likewise. + * gdb.python/py-pp-re-notag.c: Likewise. + +2020-06-23 Gary Benson <gbenson@redhat.com> + + * gdb.cp/namespace.cc: Avoid build failure with -Wunused-value. + * gdb.cp/nsimport.cc: Likewise. + * gdb.cp/nsnested.cc: Likewise. + * gdb.cp/nsnoimports.cc: Likewise. + * gdb.cp/nsusing.cc: Likewise. + * gdb.cp/smartp.cc: Likewise. + * gdb.python/py-pp-integral.c: Likewise. + * gdb.python/py-pp-re-notag.c: Likewise. + +2020-06-22 Philippe Waroquiers <philippe.waroquiers@skynet.be> + + * gdb.base/default-args.exp: New test. + * gdb.base/default-args.c: New file. + * gdb.base/alias.exp: Update expected error msg for alias foo=bar. + * gdb.base/default.exp: Update to new help text. + * gdb.base/help.exp: Likewise. + * gdb.base/page.exp: Likewise. + * gdb.base/style.exp: Likewise. + * gdb.guile/guile.exp: Likewise. + * gdb.python/python.exp: Likewise. + +2020-06-22 Sandra Loosemore <sandra@codesourcery.com> + + * gdb.base/source-dir.exp (test_truncated_comp_dir): Skip on + remote host. Fix search path syntax on Windows host. + +2020-06-21 Philippe Waroquiers <philippe.waroquiers@skynet.be> + + * gdb.base/attach.exp: Test priority of 'exec-file' changed + over 'exec-file-mismatch'. + * gdb.base/attach.c: Mark should_exit volatile. + * gdb.base/attach2.c: Likewise. Add a comment explaining + why the sleep cannot be big. + * gdb.base/attach3.c: New file. + +2020-06-20 Sandra Loosemore <sandra@codesourcery.com> + + * gdb.mi/mi-sym-info.exp: Adjust filename patterns to make directory + prefix optional. + +2020-06-20 Sandra Loosemore <sandra@codesourcery.com> + + * gdb.base/list-missing-source.exp: Correct $srcfile manipulation + for remote host. + +2020-06-19 Sandra Loosemore <sandra@codesourcery.com> + Hafiz Abid Qadeer <abidh@codesourcery.com> + + * gdb.xml/tdesc-regs.exp (load_description): Correct pathname of + file sent to remote host. + (top level): Allow int32_t as type of 32-bit register. + +2020-06-19 Tom de Vries <tdevries@suse.de> + + * lib/gdb.exp (gdb_note): New proc. + * lib/future.exp (gdb_default_target_compile_1): Factor out of ... + (gdb_default_target_compile): ... here. Only call + gdb_default_target_compile_1 if use_gdb_compile(<lang>) is set. + (use_gdb_compile): Change to array. + (toplevel): Update sets of use_gdb_compile to specify language. + Warn about default_target_compile override. Store dejagnu's version + of default_target_compile in dejagnu_default_target_compile. + +2020-06-18 Tom de Vries <tdevries@suse.de> + + * lib/gdb.exp (gdb_init): Move all but call to default_gdb_init to ... + (default_gdb_init): ... here. + +2020-06-17 Sandra Loosemore <sandra@codesourcery.com> + + Fix TUI support checks in gdb.tui tests. + + * gdb.tui/basic.exp: Skip test when TUI is unsupported, don't + just say UNSUPPORTED. + * gdb.tui/corefile-run.exp: Likewise. + * gdb.tui/empty.exp: Likewise. + * gdb.tui/list-before.exp: Likewise. + * gdb.tui/list.exp: Likewise. + * gdb.tui/main.exp: Likewise. + * gdb.tui/regs.exp: Likewise. + * gdb.tui/resize.exp: Likewise. + * gdb.tui/tui-layout-asm-short-prog.exp: Likewise. + * gdb.tui/tui-layout-asm.exp: Likewise. + * gdb.tui/tui-missing-src.exp: Likewise. + * gdb.tui/winheight.exp: Likewise. + * gdb.tui/new-layout.exp: Likewise. Also move check earlier. + +2020-06-17 Sandra Loosemore <sandra@codesourcery.com> + + Fix TCL error in gdb.python/py-format-string.exp. + + * gdb.python/py-format-string.exp: Move test for python support + earlier, out of function body. + +2020-06-15 Simon Marchi <simon.marchi@efficios.com> + + * gdb.base/index-cache-load-twice.c: New. + * gdb.base/index-cache-load-twice.exp: New. + +2020-06-17 Keith Seitz <keiths@redhat.com> + + * gdb.debuginfod/fetch_src_and_symbols.exp: Pass INTERNAL_GDBFLAGS + when executing "gdb --configuration". + +2020-06-17 Tom de Vries <tdevries@suse.de> + + * lib/gdb.exp (gdb_tcl_unknown): New proc. + (gdb_init): Use gdb_tcl_unknown for ::unknown override. Make override + conditional on presence of gdb_tcl_unknown. + (gdb_finish): Make override undo conditional on presence of + gdb_tcl_unknown. + +2020-06-16 Tom Tromey <tom@tromey.com> + + * gdb.python/tui-window.py (failwin): New function. Register it + as a TUI window type. + * gdb.python/tui-window.exp: Create new "fail" layout. Test it. + +2020-06-16 Gary Benson <gbenson@redhat.com> + + * gdb.python/py-nested-maps.c (create_map): Add missing return + value. + (create_map_map): Likewise. + +2020-06-15 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + * gdb.base/jit-elf-so.exp: Refer to the global main_loader_basename + variable. + * gdb.base/jit-reader-simple.exp: Fix typo ("Built" -> "Build"), + and use the already-defined 'options' variable. + +2020-06-12 Andrew Burgess <andrew.burgess@embecosm.com> + Tom de Vries <tdevries@suse.de> + + * lib/gdb.exp (gdb_known_globals, gdb_persistent_globals): New global. + (gdb_persistent_global, gdb_persistent_global_no_decl): New proc. + (gdb_setup_known_globals): New proc. + (gdb_cleanup_globals): New proc. + * lib/gdb.exp (load_lib): New override proc. + (gdb_stdin_log_init): Set var in_file as persistent global. + * lib/pascal.exp (gdb_stdin_log_init): Set vars + pascal_compiler_is_gpc, pascal_compiler_is_fpc, gpc_compiler and + fpc_compiler as persistent global. + +2020-06-12 Tom de Vries <tdevries@suse.de> + + * lib/tuiterm.exp (spawn): Rename to ... + (tui_spawn): ... this. + (toplevel): Move rename of spawn ... + (gdb_init_tuiterm): ... here. New proc. + (gdb_finish_tuiterm): New proc. + * lib/gdb.exp (gdb_finish_hooks): New global var. + (gdb_finish): Handle gdb_finish_hooks. + (tuiterm_env): New proc. + * gdb.python/tui-window.exp: Replace load_lib tuiterm.exp with + tuiterm_env. + * gdb.tui/basic.exp: Same. + * gdb.tui/corefile-run.exp: Same. + * gdb.tui/empty.exp: Same. + * gdb.tui/list-before.exp: Same. + * gdb.tui/list.exp: Same. + * gdb.tui/main.exp: Same. + * gdb.tui/new-layout.exp: Same. + * gdb.tui/regs.exp: Same. + * gdb.tui/resize.exp: Same. + * gdb.tui/tui-layout-asm-short-prog.exp: Same. + * gdb.tui/tui-layout-asm.exp: Same. + * gdb.tui/tui-missing-src.exp: Same. + * gdb.tui/winheight.exp: Same. + +2020-06-12 Tom de Vries <tdevries@suse.de> + + PR testsuite/26110 + * lib/gdb.exp (gdb_init): Revert dejagnu's override of ::unknown. + (gdb_finish): Reinstall dejagnu's override of ::unknown. + +2020-06-11 Tom Tromey <tom@tromey.com> + + PR gdb/18318: + * gdb.base/printcmds.exp (test_float_accepted): Add more hex + floating point tests. + +2020-06-11 Keith Seitz <keiths@redhat.com> + + PR gdb/21356 + * gdb.base/vla-datatypes.c (vla_factory): Add typedef for struct + vla_struct. + Add new struct vla_typedef and union vla_typedef_union and + corresponding instantiation objects. + Initialize new objects. + * gdb.base/vla-datatypes.exp: Add tests for vla_typedef_struct_object + and vla_typedef_union_object. + Fixup type for vla_struct_object. + +2020-06-11 Tom de Vries <tdevries@suse.de> + + * lib/gdb.exp (with_override): New proc, factored out of ... + * gdb.base/dbx.exp: ... here. Use with_override and save_vars. + +2020-06-10 Tom de Vries <tdevries@suse.de> + + * gdb.ada/ptype_union.exp: Remove PR24713 workaround. + +2020-06-09 Simon Marchi <simon.marchi@polymtl.ca> + + * gdb.base/index-cache.exp (test_cache_disabled): Add test_prefix + parameter, update callers. + +2020-06-04 Simon Marchi <simon.marchi@efficios.com> + + * gdb.dwarf2/share-psymtabs-bt.exp: New file. + * gdb.dwarf2/share-psymtabs-bt.c: New file. + * gdb.dwarf2/share-psymtabs-bt-2.c: New file. + +2020-06-04 Tom de Vries <tdevries@suse.de> + + * lib/gdb.exp (gdb_file_cmd): Avoid path names in error messages. + +2020-06-04 Tom de Vries <tdevries@suse.de> + + * lib/gdb.exp (gdb_file_cmd): Replace incomplete gdb_expect by + exp_continue. + +2020-06-04 Tom de Vries <tdevries@suse.de> + + * lib/gdb.exp (gdb_file_cmd): Use perror instead of fail. + +2020-06-03 Tom de Vries <tdevries@suse.de> + + PR symtab/26046 + * gdb.cp/breakpoint-locs-2.cc: New test. + * gdb.cp/breakpoint-locs.cc: New test. + * gdb.cp/breakpoint-locs.exp: New file. + * gdb.cp/breakpoint-locs.h: New test. + +2020-06-03 Tom de Vries <tdevries@suse.de> + + PR testsuite/25609 + * gdb.base/jit-elf-so.exp: Don't modify testing behaviour based on + value of global verbose. + * gdb.base/jit-elf.exp: Same. + * gdb.base/jit-reader.exp: Same. + +2020-06-02 Tom de Vries <tdevries@suse.de> + + * gdb.dwarf2/multidictionary.exp: Don't use + gdb_spawn_with_cmdline_opts. + +2020-06-01 Andrew Burgess <andrew.burgess@embecosm.com> + + * gdb.cp/step-and-next-inline.exp (do_test): Skip all tests in the + use_header case. + * gdb.dwarf2/dw2-inline-header-1.exp: New file. + * gdb.dwarf2/dw2-inline-header-2.exp: New file. + * gdb.dwarf2/dw2-inline-header-3.exp: New file. + * gdb.dwarf2/dw2-inline-header-lbls.c: New file. + * gdb.dwarf2/dw2-inline-header.c: New file. + * gdb.dwarf2/dw2-inline-header.h: New file. + +2020-05-30 Pedro Alves <palves@redhat.com> + + * gdb.linespec/cp-replace-typedefs-ns-template.cc: New. + * gdb.linespec/cp-replace-typedefs-ns-template.exp: New. + +2020-05-29 Gary Benson <gbenson@redhat.com> + + * gdb.compile/compile-cplus.exp (additional_flags): Also + set when building with clang. + (additional_flags, srcfilesoptions): Pass -Wno-deprecated + when building with clang. + +2020-05-29 Gary Benson <gbenson@redhat.com> + + * gdb.arch/i386-avx.exp (additional_flags): Also set when + building with clang. + * gdb.arch/i386-sse.exp (additional_flags): Likewise. + +2020-05-29 Gary Benson <gbenson@redhat.com> + + * gdb.cp/koenig.exp (prepare_for_testing): Add + additional_flags=-Wno-unused-comparison. + * gdb.cp/operator.exp (prepare_for_testing): Likewise. + +2020-05-28 Gary Benson <gbenson@redhat.com> + + * gdb.base/sigaltstack.c (catcher): Add default case to switch + statement. + +2020-05-28 Gary Benson <gbenson@redhat.com> + + * gdb.cp/classes.exp (prepare_for_testing): Add + additional_flags=-Wno-deprecated-register. + * gdb.cp/inherit.exp (prepare_for_testing): Likewise. + * gdb.cp/misc.exp: Likewise. + +2020-05-28 Gary Benson <gbenson@redhat.com> + + * gdb.linespec/cpls-ops.cc (dummy): New static global. + (test_op_new::operator new): Add return statement. + (test_op_new_array::operator new[]): Likewise. + +2020-05-27 Pedro Alves <palves@redhat.com> + + * gdb.linespec/cp-completion-aliases.exp: Remove readline_is_used + check. Use test_gdb_complete_unique instead of + test_gdb_complete_tab_unique + test_gdb_complete_cmd_unique. Use + test_gdb_complete_multiple instead of + test_gdb_complete_tab_multiple + test_gdb_complete_cmd_multiple. + +2020-05-27 Luis Machado <luis.machado@linaro.org> + + * gdb.arch/aarch64-sighandler-regs.exp: Fix duplicated test names. + * gdb.arch/aarch64-tagged-pointer.exp: Likewise. + * gdb.arch/arm-disassembler-options.exp: Likewise. + * gdb.arch/arm-disp-step.exp: Likewise. + * gdb.arch/thumb-prologue.exp: Likewise. + * gdb.base/async.exp: Likewise. + * gdb.base/auxv.exp: Likewise. + * gdb.base/complex-parts.exp: Likewise. + * gdb.base/ena-dis-br.exp: Likewise. + * gdb.base/foll-exec.exp: Likewise. + * gdb.base/permissions.exp: Likewise. + * gdb.base/relocate.exp: Likewise. + * gdb.base/return2.exp: Likewise. + * gdb.base/sigbpt.exp: Likewise. + * gdb.base/siginfo-obj.exp: Likewise. + * gdb.cp/converts.exp: Likewise. + * gdb.cp/exceptprint.exp: Likewise. + * gdb.cp/inherit.exp: Likewise. + * gdb.cp/nsnoimports.exp: Likewise. + * gdb.cp/virtbase2.exp: Likewise. + * gdb.mi/mi-var-cmd.exp: Likewise. + * gdb.mi/var-cmd.c: Likewise. + +2020-05-26 Tom Tromey <tromey@adacore.com> + + * gdb.ada/arr_acc_idx_w_gap.exp: Add tests. + +2020-05-26 Tom Tromey <tromey@adacore.com> + + * gdb.ada/arr_acc_idx_w_gap.exp: Add enum subrange tests. + * gdb.ada/arr_acc_idx_w_gap/enum_with_gap.ads (Enum_Subrange): New + type. + * gdb.ada/arr_acc_idx_w_gap/enum_with_gap_main.adb (V): New + variable. + +2020-05-26 Christian Biesinger <cbiesinger@google.com> + + * Makefile.in: Use = instead of == for the test command + for portability. + +2020-05-26 Tom de Vries <tdevries@suse.de> + + * gdb.base/gold-gdb-index-2.c: New test. + * gdb.base/gold-gdb-index.c: New test. + * gdb.base/gold-gdb-index.exp: New file. + * gdb.base/gold-gdb-index.h: New test. + +2020-05-25 Tom de Vries <tdevries@suse.de> + + * boards/gold-gdb-index.exp: New file. + +2020-05-25 Simon Marchi <simon.marchi@efficios.com> + + * boards/simavr.exp: New file. + +2020-05-25 Simon Marchi <simon.marchi@efficios.com> + + * lib/gdb.exp (gdb_run_cmd): Return success or failure. + * gdb.base/inferior-args.exp: New file. + * gdb.base/inferior-args.c: New file. + +2020-05-25 Simon Marchi <simon.marchi@efficios.com> + + * lib/gdb.exp (gdb_run_cmd): Change argument from args to + inferior_args. Pass it to gdb_reload. + (gdb_start_cmd, gdb_starti_cmd): Change argument from args to + inferior_args. + (gdb_reload): Add inferior_args argument. + * config/gdbserver.exp (gdb_reload): Add inferior_args argument, + pass it to gdbserver_run. + * boards/native-gdbserver.exp: Do not set noargs. + * boards/native-extended-gdbserver.exp (gdb_reload): Add + inferior_args argument. + * boards/stdio-gdbserver-base.exp (gdb_reload): Likewise. + * gdb.base/a2-run.exp: Check for use_gdb_stub. + * gdb.base/args.exp: Likewise. + +2020-05-25 Tom de Vries <tdevries@suse.de> + + * lib/gdb.exp (exec_is_pie): Add comment. + +2020-05-25 Tom de Vries <tdevries@suse.de> + + * lib/jit-elf-helpers.exp (compile_and_download_n_jit_so): Use $f + instead of $binfile in the untested message. + +2020-05-25 Tom de Vries <tdevries@suse.de> + + PR testsuite/26031 + * lib/gdb.exp (exec_is_pie): Test readelf -h output. + +2020-05-25 Tom de Vries <tdevries@suse.de> + + * boards/gold.exp: New file. + +2020-05-23 Tom Tromey <tom@tromey.com> + + * gdb.base/style.exp: Remove completion styling test. + * lib/gdb-utils.exp (style): Remove completion styles. + +2020-05-23 Tom Tromey <tom@tromey.com> + + * gdb.base/style.exp: Add completion styling test. + * lib/gdb-utils.exp (style): Add completion styles. + +2020-05-22 Andrew Burgess <andrew.burgess@embecosm.com> + + * gdb.base/annota1.exp: Update expected results. + * gdb.cp/annota2.exp: Update expected results, remove duplicate + test name. + * gdb.cp/annota3.exp: Update expected results. + +2020-05-20 Simon Marchi <simon.marchi@efficios.com> + + PR gdb/26016 + * gdb.base/coredump-filter.c (do_mmap): Check mmap ret val + against MAP_FAILED. + * gdb.base/coremaker.c (mmapdata): Likewise. + * gdb.base/jit-reader-host.c (main): Likewise. + * gdb.base/sym-file-loader.c (load): Likewise. + (load_shlib): Likewise. + +2020-05-20 Tom Tromey <tromey@adacore.com> + + * gdb.ada/array_char_idx.exp: Recognize initialized array. + +2020-05-20 Tom de Vries <tdevries@suse.de> + + PR symtab/25833 + * gdb.base/with-mf-inc.c: New test. + * gdb.base/with-mf-main.c: New test. + * gdb.base/with-mf.exp: New file. + +2020-05-19 Tom Tromey <tromey@adacore.com> + + * gdb.rust/simple.exp: Restore missing test result. + +2020-05-19 Tom de Vries <tdevries@suse.de> + + * gdb.base/gdb-caching-proc.exp: Fix typo. + +2020-05-19 Tom Tromey <tromey@adacore.com> + + * gdb.rust/simple.exp: Add some test descriptions. + (test_one_slice): Use with_test_prefix. + +2020-05-18 Tom de Vries <tdevries@suse.de> + + * gdb.base/gdb-caching-proc.exp: Use with_test_prefix. + +2020-05-17 Pedro Alves <palves@redhat.com> + + PR gdb/25741 + * gdb.base/hw-sw-break-same-address.exp: New file. + +2020-05-16 Pedro Alves <palves@redhat.com> + + * gdb.multi/multi-re-run.exp (test_re_run): Switch + LAST_LOADED_FILE accordingly. + +2020-05-15 Philippe Waroquiers <philippe.waroquiers@skynet.be> + + * gdb.base/alias.exp: Verify 'help aliases' shows user defined aliases. + +2020-05-15 Philippe Waroquiers <philippe.waroquiers@skynet.be> + + * gdb.base/help.exp: Test apropos and help for commands + having aliases. Fixed comments not starting with an + upper-case letter or not finishing with a dot. + +2020-05-15 Philippe Waroquiers <philippe.waroquiers@skynet.be> + + * gdb.base/alias.exp: Update help output check. + +2020-05-15 Philippe Waroquiers <philippe.waroquiers@skynet.be> + + * gdb.base/default.exp: Update output following fixes. + +2020-05-15 Philippe Waroquiers <philippe.waroquiers@skynet.be> + + * gdb.base/alias.exp: Test aliases starting with a prefix of + another alias. + +2020-05-15 Gary Benson <gbenson@redhat.com> + + * gdb.base/info-os.c (main): Add return statement. + * gdb.base/info_minsym.c (minsym_fun): Likewise. + * gdb.base/large-frame-2.c (func): Likewise. + * gdb.base/pr10179-a.c (foo1, bar1): Likewise. + * gdb.base/pr10179-b.c (foo2): Likewise. + * gdb.base/valgrind-disp-step.c (foo): Likewise. + * gdb.base/watch-cond.c (func): Likewise. + * gdb.multi/goodbye.c (verylongfun): Likewise. + * gdb.multi/hello.c (commonfun): Likewise. + * gdb.python/py-finish-breakpoint.c (call_longjmp): Likewise. + * gdb.threads/fork-plus-threads.c (thread_func): Likewise. + * gdb.threads/forking-threads-plus-breakpoint.c (thread_forks): + Likewise. + * gdb.threads/hand-call-new-thread.c (foo): Likewise. + * gdb.threads/interrupt-while-step-over.c (child_function): + Likewise. + * gdb.trace/actions-changed.c (end): Likewise. + +2020-05-15 Gary Benson <gbenson@redhat.com> + + * gdb.opencl/callfuncs.exp: Report when test skipped. + * gdb.opencl/convs_casts.exp: Likewise. + * gdb.opencl/datatypes.exp: Likewise. + * gdb.opencl/operators.exp: Likewise. + * gdb.opencl/vec_comps.exp: Likewise. + +2020-05-15 Tom de Vries <tdevries@suse.de> + + * gdb.base/align.exp.in: Rename to ... + * gdb.base/align.exp.tcl: ... this. + * gdb.base/align-c++.exp: Update. + * gdb.base/align-c.exp: Update. + * gdb.base/all-architectures.exp.in: Rename to ... + * gdb.base/all-architectures.exp: ... this. + * gdb.base/all-architectures-0.exp: Update. + * gdb.base/all-architectures-1.exp: Update. + * gdb.base/all-architectures-2.exp: Update. + * gdb.base/all-architectures-3.exp: Update. + * gdb.base/all-architectures-4.exp: Update. + * gdb.base/all-architectures-5.exp: Update. + * gdb.base/all-architectures-6.exp: Update. + * gdb.base/all-architectures-7.exp: Update. + * gdb.base/infcall-nested-structs.exp.in: Rename to ... + * gdb.base/infcall-nested-structs.exp.tcl: ... this. + * gdb.base/infcall-nested-structs-c++.exp: Update. + * gdb.base/infcall-nested-structs-c.exp: Update. + * gdb.base/info-types.exp.in: Rename to ... + * gdb.base/info-types.exp.tcl: ... this. + * gdb.base/info-types-c++.exp: Update. + * gdb.base/info-types-c.exp: Update. + * gdb.base/max-depth.exp.in: Rename to ... + * gdb.base/max-depth.exp.tcl: ... this. + * gdb.base/max-depth-c++.exp: Update. + * gdb.base/max-depth-c.exp: Update. + * gdb.cp/cpexprs.exp.in: Rename to ... + * gdb.cp/cpexprs.exp.tcl: ... this. + * gdb.cp/cpexprs-debug-types.exp: Update. + * gdb.cp/cpexprs.exp: Update. + * gdb.cp/infcall-nodebug.exp.in: Rename to ... + * gdb.cp/infcall-nodebug.exp.tcl: ... this. + * gdb.cp/infcall-nodebug-c++-d0.exp: Update. + * gdb.cp/infcall-nodebug-c++-d1.exp: Update. + * gdb.cp/infcall-nodebug-c-d0.exp: Update. + * gdb.cp/infcall-nodebug-c-d1.exp: Update. + * gdb.dwarf2/clang-debug-names.exp.in: Rename to ... + * gdb.dwarf2/clang-debug-names.exp.tcl: ... this. + * gdb.dwarf2/clang-debug-names-2.exp: Update. + * gdb.dwarf2/clang-debug-names.exp: Update. + +2020-05-15 Andrew Burgess <andrew.burgess@embecosm.com> + + * lib/check-test-names.exp: Remove code that prevents this file + loading when tests are run in parallel. + +2020-05-15 Pedro Alves <palves@redhat.com> + + * gdb.multi/multi-kill.exp (start_inferior): Remove + 'testpid' parameter. Refer to namespace variable directly. + (testpid): Declare as namespace variable. + +2020-05-15 Pedro Alves <palves@redhat.com> + + * gdb.multi/multi-kill.exp: Wrap in namespace. + (start_inferior): Add TESTPID parameter. Use it instead of the + testpid global. + (top level): Define empty TESTPID array, and pass it down to + start_inferior. + +2020-05-14 Tom de Vries <tdevries@suse.de> + + * gdb.fortran/nested-funcs-2.exp: Use gdb_test_stdio to test inferior + output. + +2020-05-14 Tom de Vries <tdevries@suse.de> + + * gdb.base/align.exp: Split into ... + * gdb.base/align.exp.in: ... + * gdb.base/align-c++.exp: ... + * gdb.base/align-c.exp: ... these. + * gdb.base/infcall-nested-structs.exp: Split into ... + * gdb.base/infcall-nested-structs.exp.in: ... + * gdb.base/infcall-nested-structs-c++.exp: ... + * gdb.base/infcall-nested-structs-c.exp: ... these. + * gdb.base/info-types.exp: Split into ... + * gdb.base/info-types.exp.in: ... + * gdb.base/info-types-c++.exp: ... + * gdb.base/info-types-c.exp: ... these. + * gdb.base/max-depth.exp: Split into ... + * gdb.base/max-depth.exp.in: ... + * gdb.base/max-depth-c++.exp: ... + * gdb.base/max-depth-c.exp: ... these. + * gdb.cp/infcall-nodebug.exp: Split into ... + * gdb.cp/infcall-nodebug.exp.in: ... + * gdb.cp/infcall-nodebug-c++-d0.exp: ... + * gdb.cp/infcall-nodebug-c++-d1.exp: ... + * gdb.cp/infcall-nodebug-c-d0.exp: ... + * gdb.cp/infcall-nodebug-c-d1.exp: ... these. + +2020-05-14 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + Pedro Alves <palves@redhat.com> + + * gdb.multi/multi-exit.c: New file. + * gdb.multi/multi-exit.exp: New file. + * gdb.multi/multi-kill.c: New file. + * gdb.multi/multi-kill.exp: New file. + +2020-05-14 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + * gdb.base/annota1.exp: Update the expected output. + * gdb.cp/annota2.exp: Ditto. + +2020-05-12 Andrew Burgess <andrew.burgess@embecosm.com> + + * lib/check-test-names.exp: Disable when testing is being run in + parallel. + +2020-05-12 Tom de Vries <tdevries@suse.de> + + * gdb.base/jit-elf.exp: Fix string concat. + +2020-05-12 Tom de Vries <tdevries@suse.de> + + * lib/jit-elf-helpers.exp: Don't use undefined variables in untested + messages. + +2020-05-12 Tom de Vries <tdevries@suse.de> + + * gdb.multi/multi-term-settings.exp: Use with_test_prefix. + +2020-05-12 Tom de Vries <tdevries@suse.de> + + * gdb.ada/catch_ex.exp: Use with_test_prefix. + * gdb.ada/mi_catch_ex.exp: Same. + * gdb.ada/mi_catch_ex_hand.exp: Same. + +2020-05-12 Tom de Vries <tdevries@suse.de> + + * gdb.fortran/complex.exp: Use with_test_prefix. + +2020-05-12 Tom de Vries <tdevries@suse.de> + + * gdb.trace/passcount.exp: Fix test-names. + +2020-05-12 Tom de Vries <tdevries@suse.de> + + * gdb.pascal/gdb11492.exp: Use with_test_prefix. + +2020-05-12 Tom de Vries <tdevries@suse.de> + + * gdb.gdb/complaints.exp: Use with_test_prefix. + * gdb.xml/tdesc-regs.exp: Same. + * gdb.opt/inline-locals.exp: Fix test name. + +2020-05-12 Tom de Vries <tdevries@suse.de> + + * gdb.dwarf2/comp-unit-lang.exp: Use with_test_prefix. + * gdb.dwarf2/dw2-bad-parameter-type.exp: Same. + * gdb.dwarf2/implref-struct.exp: Same. + * gdb.dwarf2/varval.exp: Ensure get_sizeof is called once per type. + * gdb.dwarf2/data-loc.exp: Same. Remove duplicate test. + +2020-05-11 Simon Marchi <simon.marchi@polymtl.ca> + + * gdb.base/jit-so.exp (one_jit_test): Change test name. + +2020-05-11 Andrew Burgess <andrew.burgess@embecosm.com> + + * lib/check-test-names.exp (all_test_names): New module variable. + (counts): Add 'duplicates' field. + (_check_duplicates): New procedure. + (check): Also check for duplicates. + (do_log_summary): Print duplicates count. + (do_reset_vars): Reset counter for duplicate test names, and + discard all know test names. + +2020-05-11 Andrew Burgess <andrew.burgess@embecosm.com> + + * lib/gdb.exp: Include check-test-names.exp library. + * lib/check-test-names.exp: New file. + +2020-05-11 Tom de Vries <tdevries@suse.de> + + * gdb.ada/packed_tagged.exp: Change kfail into xfail. + +2020-05-11 Keith Seitz <keiths@redhat.com> + + * gdb.ada/attr_ref_and_charlit.exp: Fix typo. + +2020-05-11 Tom de Vries <tdevries@suse.de> + + * gdb.cp/cpexprs.exp: Move everything except flags setting ... + * gdb.cp/cpexprs.exp.in: .. here. + * gdb.cp/cpexprs-debug-types.exp: Include cpexprs.exp.in instead of + cpexprs.exp. + +2020-05-11 Keith Seitz <keiths@redhat.com> + + * gdb.ada/arrayparam.exp: Resolve duplicate and tail parentheses + test names. + * gdb.ada/arrayptr.exp: Likewise. + * gdb.ada/assign_arr.exp: Likewise. + * gdb.ada/attr_ref_and_charlit.exp: Likewise. + * gdb.ada/bp_on_var.exp: Likewise. + * gdb.ada/call_pn.exp: Likewise. + * gdb.ada/complete.exp: Likewise. + * gdb.ada/fun_overload_menu.exp: Likewise. + * gdb.ada/funcall_param.exp: Likewise. + * gdb.ada/funcall_ref.exp: Likewise. + * gdb.ada/packed_array_assign.exp: Likewise. + * gdb.ada/same_component_name.exp: Likewise. + * gdb.ada/type_coercion.exp: Likewise. + * gdb.ada/unc_arr_ptr_in_var_rec.exp: Likewise. + * gdb.ada/variant_record_packed_array.exp: Likewise. + +2020-05-11 Tom de Vries <tdevries@suse.de> + + PR symtab/25941 + * gdb.dwarf2/clang-debug-names.exp.in: New include exp file, factored + out of ... + * gdb.dwarf2/clang-debug-names.exp: ... here. + * gdb.dwarf2/clang-debug-names-2.exp: New file. Include + clang-debug-names.exp.in. + * gdb.dwarf2/clang-debug-names-2-foo.c: New test. + * gdb.dwarf2/clang-debug-names-2.c: New test. + +2020-05-10 Alok Kumar Sharma <alokkumar.sharma@amd.com> + + * lib/fortran.exp (fortran_main): New Proc, handle flang MAIN_, + (fortran_runto_main): New Proc, fortran version of runto_main. + * gdb.fortran/array-bounds-high.exp: Handle flang MAIN_ + * gdb.fortran/array-bounds.exp: Likewise. + * gdb.fortran/array-slices.exp: Likewise. + * gdb.fortran/block-data.exp: Likewise. + * gdb.fortran/charset.exp: Likewise. + * gdb.fortran/common-block.exp: Likewise. + * gdb.fortran/complex.exp: Likewise. + * gdb.fortran/derived-type-function.exp: Likewise. + * gdb.fortran/derived-type.exp: Likewise. + * gdb.fortran/info-modules.exp: Likewise. + * gdb.fortran/info-types.exp: Likewise. + * gdb.fortran/intrinsics.exp: Likewise. + * gdb.fortran/library-module.exp: Likewise. + * gdb.fortran/logical.exp: Likewise. + * gdb.fortran/max-depth.exp: Likewise. + * gdb.fortran/module.exp: Likewise. + * gdb.fortran/multi-dim.exp: Likewise. + * gdb.fortran/nested-funcs.exp: Likewise. + * gdb.fortran/print-formatted.exp: Likewise. + * gdb.fortran/print_type.exp: Likewise. + * gdb.fortran/printing-types.exp: Likewise. + * gdb.fortran/ptr-indentation.exp: Likewise. + * gdb.fortran/ptype-on-functions.exp: Likewise. + * gdb.fortran/subarray.exp: Likewise. + * gdb.fortran/vla-alloc-assoc.exp: Likewise. + * gdb.fortran/vla-datatypes.exp: Likewise. + * gdb.fortran/vla-history.exp: Likewise. + * gdb.fortran/vla-ptr-info.exp: Likewise. + * gdb.fortran/vla-ptype-sub.exp: Likewise. + * gdb.fortran/vla-ptype.exp: Likewise. + * gdb.fortran/vla-sizeof.exp: Likewise. + * gdb.fortran/vla-type.exp: Likewise. + * gdb.fortran/vla-value-sub-arbitrary.exp: Likewise. + * gdb.fortran/vla-value-sub-finish.exp: Likewise. + * gdb.fortran/vla-value-sub.exp: Likewise. + * gdb.fortran/vla-value.exp: Likewise. + * gdb.fortran/whatis_type.exp: Likewise. + * gdb.mi/mi-var-child-f.exp: Likewise. + +2020-05-09 Tom de Vries <tdevries@suse.de> + + * gdb.dwarf2/clang-debug-names.exp: Remove PR25952 kfail. + +2020-05-08 Tom de Vries <tdevries@suse.de> + + * gdb.dwarf2/clang-debug-names.c: New test. + * gdb.dwarf2/clang-debug-names.exp: New file. + +2020-05-06 Simon Marchi <simon.marchi@efficios.com> + + * gdb.arch/amd64-prologue-skip-cf-protection.exp: New file. + * gdb.arch/amd64-prologue-skip-cf-protection.c: New file. + +2020-05-06 Tom de Vries <tdevries@suse.de> + + * gdb.reverse/consecutive-precsave.exp: Handle if instruction after + breakpoint is at a "recommended breakpoint location". + * gdb.reverse/consecutive-reverse.exp: Same. + +2020-05-06 Tom de Vries <tdevries@suse.de> + + * gdb.base/watchpoint-reuse-slot.exp (stepi): Print $pc to get current + address. + +2020-05-06 Tom de Vries <tdevries@suse.de> + + * gdb.base/watchpoint-reuse-slot.exp: Fix incorrect assignment. + +2020-05-06 Tom de Vries <tdevries@suse.de> + + * gdb.base/store.exp (check_set, up_set): Allowing missing location + info for r. + +2020-05-06 Tom de Vries <tdevries@suse.de> + + * gdb.base/shlib-call.exp: Add extra step to reach shmain.c:42, if + necessary. + +2020-05-06 Tom de Vries <tdevries@suse.de> + + * lib/unbuffer_output.c (gdb_unbuffer_output): Change return type to + void. + +2020-05-06 Tom de Vries <tdevries@suse.de> + + * lib/gdb.exp (is_stmt_addresses, hex_in_list): New proc, factored out + of ... + * gdb.base/async.exp: ... here. + * gdb.base/consecutive.exp: Handle if 2nd breakpoint is at a + "recommended breakpoint location". + +2020-05-06 Tom de Vries <tdevries@suse.de> + + * gdb.compile/compile-ifunc.exp: Use -Wno-attribute-alias. + +2020-05-04 Tom de Vries <tdevries@suse.de> + + * gdb.base/async.exp: Check whether instruction addresses are a + "recommended breakpoint location". + +2020-05-03 Tom Tromey <tom@tromey.com> + + * gdb.base/sepdebug.exp: Remove "catch" test. + * gdb.base/break.exp: Remove "catch" test. + * gdb.base/default.exp: Update expected output. + +2020-05-02 Tom de Vries <tdevries@suse.de> + + * lib/gdb.exp (supports_mpx_check_pointer_bounds): New proc. + * gdb.arch/i386-mpx-call.exp: Use supports_mpx_check_pointer_bounds. + * gdb.arch/i386-mpx-map.exp: Same. + * gdb.arch/i386-mpx-sigsegv.exp: Same. + * gdb.arch/i386-mpx-simple_segv.exp: Same. + * gdb.arch/i386-mpx.exp: Same. + +2020-05-02 Tom de Vries <tdevries@suse.de> + + * gdb.base/psym-external-decl.c (main): Add use of variable aaa. + +2020-05-01 Tom de Vries <tdevries@suse.de> + + * gdb.ada/operator_bp.exp: Allow more than required amount of + breakpoint. + +2020-05-01 Tom de Vries <tdevries@suse.de> + + * gdb.reverse/until-reverse.c (main): Fix Wunused-result warning. + +2020-04-30 Hannes Domani <ssbssa@yahoo.de> + + PR gdb/18706 + * gdb.cp/stub-array-size.cc: New test. + * gdb.cp/stub-array-size.exp: New file. + * gdb.cp/stub-array-size.h: New test. + * gdb.cp/stub-array-size2.cc: New test. + +2020-04-30 Hannes Domani <ssbssa@yahoo.de> + + * gdb.python/py-format-string.exp: Adjust pretty_arrays expected + output to the new format. + +2020-04-29 Simon Marchi <simon.marchi@efficios.com> + + * gdb.base/break.exp: Use with_test_prefix. + +2020-04-29 Tom de Vries <tdevries@suse.de> + + * lib/gdb.exp (debug_types): New proc. + * gdb.guile/scm-symtab.exp: Add xfail for PR gcc/90232. + * gdb.python/py-symtab.exp: Same. + +2020-04-29 Hannes Domani <ssbssa@yahoo.de> + + PR gdb/17320 + * gdb.base/pretty-array.c: New test. + * gdb.base/pretty-array.exp: New file. + +2020-04-29 Tom de Vries <tdevries@suse.de> + + PR symtab/25889 + * gdb.cp/cpexprs.exp: Adapt for inclusion. + * gdb.cp/cpexprs-debug-types.exp: New file. Set -fdebug-types-section + and include cpexprs.exp. + +2020-04-28 Mark Williams <mark@myosotissp.com> + + PR gdb/24480 + * dw4-toplevel-types.exp: Test for top level types. + * dw4-toplevel-types.cc: Test for top level types. + +2020-04-28 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + * gdb.threads/stop-with-handle.exp: Fix typo in comment + (theads -> threads). + +2020-04-28 Tom de Vries <tdevries@suse.de> + + * gdb.opt/inline-cmds.exp: Set KFAIL PR. + +2020-04-28 Tom de Vries <tdevries@suse.de> + + * gdb.base/info-macros.exp: Remove KFAIL. Add missing trailing ".*". + +2020-04-28 Tom de Vries <tdevries@suse.de> + + * gdb.ada/array_ptr_renaming.exp: Add PR number in KFAIL. + +2020-04-28 Tom de Vries <tdevries@suse.de> + + * gdb.dwarf2/main-foo.c: New test. + * gdb.dwarf2/struct-with-sig.exp: New file. + +2020-04-25 Tom de Vries <tdevries@suse.de> + + * boards/debug-types.exp: New file. + +2020-04-25 Andrew Burgess <andrew.burgess@embecosm.com> + + * gdb.btrace/multi-inferior.exp: Avoid paths in test names. + +2020-04-24 Tom Tromey <tom@tromey.com> + + PR symtab/12707: + * gdb.python/py-symbol.exp: Update expected results for + linkage_name test. + * gdb.cp/print-demangle.exp: New file. + * gdb.base/c-linkage-name.exp: Fix test. + * gdb.guile/scm-symbol.exp: Update expected results for + linkage_name test. + +2020-04-24 Tom Tromey <tom@tromey.com> + + * gdb.dwarf2/dw2-namespaceless-anonymous.S: Remove. + * gdb.dwarf2/dw2-namespaceless-anonymous.c: New file. + * gdb.dwarf2/dw2-namespaceless-anonymous.exp: Use DWARF + assembler. + +2020-04-24 Tom de Vries <tdevries@suse.de> + + * gdb.dwarf2/dw2-bad-mips-linkage-name.exp: Set language of CU to + C++. + +2020-04-24 Tom Tromey <tromey@adacore.com> + + * gdb.ada/frame_arg_lang.exp: Run with multiple -fgnat-encodings + values. + * gdb.ada/funcall_ref.exp: Run with multiple -fgnat-encodings + values. Update test for minimal encodings. + * gdb.ada/lang_switch.exp: Update test for minimal encodings. + * gdb.ada/var_rec_arr.exp: Run with multiple -fgnat-encodings + values. Update test for minimal encodings. + +2020-04-24 Tom Tromey <tromey@adacore.com> + + PR python/23662: + * gdb.ada/variant.exp: Add Python checks. + * gdb.rust/simple.exp: Add dynamic type checks. + +2020-04-24 Tom Tromey <tromey@adacore.com> + + * gdb.ada/mi_var_array.exp: Try all -fgnat-encodings settings. + Make array type matching more lax. + * gdb.ada/mi_var_union.exp: Try all -fgnat-encodings settings. + * gdb.ada/mi_variant.exp: New file. + * gdb.ada/mi_variant/pck.ads: New file. + * gdb.ada/mi_variant/pkg.adb: New file. + * gdb.ada/packed_tagged.exp: Try all -fgnat-encodings settings. + * gdb.ada/unchecked_union.exp: Try all -fgnat-encodings settings. + +2020-04-24 Tom Tromey <tromey@adacore.com> + + * gdb.ada/variant.exp: Add dynamic field offset tests. + * gdb.ada/variant/pck.ads (Nested_And_Variable): New type. + * gdb.ada/variant/pkg.adb: Add new variables. + +2020-04-24 Tom Tromey <tromey@adacore.com> + + * gdb.ada/variant.exp: New file + * gdb.ada/variant/pkg.adb: New file + * gdb.ada/variant/pck.adb: New file + +2020-04-24 Tom de Vries <tdevries@suse.de> + + * lib/gdb.exp (clean_restart): Reset errcnt and warncnt. + +2020-04-24 Tom de Vries <tdevries@suse.de> + + * gdb.dwarf2/dwzbuildid.exp: Add quiet to dwzbuildid-mismatch compile + flags. + +2020-04-24 Tom de Vries <tdevries@suse.de> + + * gdb.dwarf2/dw2-error.exp: Add quiet to compile flags. + +2020-04-24 Tom de Vries <tdevries@suse.de> + + * lib/gdb.exp (default_gdb_start): Handle eof. + (clean_restart): Detect and handle gdb_start failure. Return -1 upon + failure. + * gdb.base/readnever.exp: Handle clean_restart failure. + +2020-04-23 Tom de Vries <tdevries@suse.de> + + * gdb.base/decl-before-def.exp: Run to main and print a again. + +2020-04-23 Tom de Vries <tdevries@suse.de> + + * gdb.base/decl-before-def-decl.c: New test. + * gdb.base/decl-before-def-def.c: New test. + * gdb.base/decl-before-def.exp: New file. + +2020-04-23 Tom de Vries <tdevries@suse.de> + + * gdb.base/readnever.exp: Skip if GDBFLAGS contain -readnow/--readnow. + +2020-04-22 Tom de Vries <tdevries@suse.de> + + * gdb.mi/dw2-ref-missing-frame-func.c (.debug_aranges): Fix + debug_info_offset. + * gdb.mi/dw2-ref-missing-frame.exp: Make sure $objfuncfile comes + before $objsfile in the line line. + +2020-04-22 Tom de Vries <tdevries@suse.de> + + * gdb.dlang/watch-loc.c (.debug_aranges): Fix _Dmain length. + +2020-02-18 Mihails Strasuns <mihails.strasuns@intel.com> + + * gdb.base/jit-attach-pie.c: Use jit-protocol.h. + * gdb.base/jit-elf-main.c: Use jit-protocol.h. + * gdb.base/jit-reader-host.c: Use jit-protocol.h. + * gdb.base/jit-reader-simple-jit.c: Use jit-protocol.h. + * gdb.base/jit-protocol.h: Update definitions to match all usage + contexts. + +2020-02-18 Mihails Strasuns <mihails.strasuns@intel.com> + + * gdb.base: Rename all jit related test and source files. + +2020-02-18 Mihails Strasuns <mihails.strasuns@intel.com> + + * gdb.base/jit-reader.exp: Relax register output check. + +2020-04-22 Tom de Vries <tdevries@suse.de> + + PR symtab/25764 + * gdb.base/psym-external-decl-2.c: New test. + * gdb.base/psym-external-decl.c: New test. + * gdb.base/psym-external-decl.exp: New file. + * gdb.threads/tls.exp: Add PR25807 kfail. + +2020-04-22 Tom de Vries <tdevries@suse.de> + + PR symtab/25801 + * gdb.dwarf2/imported-unit.exp: Test that we can get imported_unit.c + in "info source" output. + +2020-04-22 Tom de Vries <tdevries@suse.de> + + PR symtab/25700 + * gdb.dwarf2/imported-unit.exp: Verify that there's only one partial + symtab for imported_unit.c. + +2020-04-21 Gary Benson <gbenson@redhat.com> + + * gdb.base/advance.c (func): New argument, to match call site. + (func2, func3): Add return statements. + +2020-04-21 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + * gdb.multi/run-only-second-inf.c: New file. + * gdb.multi/run-only-second-inf.exp: New file. + +2020-04-21 Markus Metzger <markus.t.metzger@intel.com> + + * gdb.btrace/multi-inferior.c: New test. + * gdb.btrace/multi-inferior.exp: New file. + +2020-04-21 Markus Metzger <markus.t.metzger@intel.com> + + * gdb.btrace/enable-new-thread.c: New test. + * gdb.btrace/enable-new-thread.exp: New file. + +2020-04-21 Tom de Vries <tdevries@suse.de> + + PR gdb/25471 + * gdb.threads/killed-outside.c: New test. + * gdb.threads/killed-outside.exp: New file. + +2020-04-20 Gary Benson <gbenson@redhat.com> + + * gdb.base/nested-subp1.exp: Use support_nested_function_tests. + * gdb.base/nested-subp2.exp: Likewise. + * gdb.base/nested-subp3.exp: Likewise. + +2020-04-20 Gary Benson <gbenson@redhat.com> + + * gdb.base/nested-subp1.exp: Disable test when using clang. + * gdb.base/nested-subp2.exp: Likewise. + * gdb.base/nested-subp3.exp: Likewise. + +2020-04-20 Gary Benson <gbenson@redhat.com> + + * gdb.cp/exception.cc: Fix compilation error with clang. + +2020-04-20 Gary Benson <gbenson@redhat.com> + + * gdb.trace/tspeed.c: Fix compilation error with clang. + +2020-04-20 Gary Benson <gbenson@redhat.com> + + * gdb.base/jit-main.c: Fix compilation error with clang. + +2020-04-17 Kamil Rytarowski <n54@gmx.com> + + * gdb.base/attach-twice.c: Include "sys/types.h". + (PTRACE_ATTACH): Add fallback definition. + (main): Pass `0' to the 4th argument of `ptrace'. + +2020-04-17 Kamil Rytarowski <n54@gmx.com> + + * gdb.base/fork-running-state.c: Include "signal.h". + +2020-04-17 Tom Tromey <tromey@adacore.com> + + * gdb.cp/maint.exp (test_help): Simplify multiple_help_body. + Update tests. + * gdb.btrace/cpu.exp: Update tests. + * gdb.base/maint.exp: Update tests. + * gdb.base/default.exp: Update tests. + * gdb.base/completion.exp: Update tests. + +2020-04-16 Tom de Vries <tdevries@suse.de> + + PR symtab/25791 + * gdb.dwarf2/gdb-add-index.exp (add_gdb_index): Move ... + (ensure_gdb_index): and factor out and move ... + * lib/gdb.exp (add_gdb_index, ensure_gdb_index): ... here. + * gdb.dwarf2/imported-unit-runto-main.exp: New file. + +2020-04-16 Tom de Vries <tdevries@suse.de> + + * gdb.base/maint-expand-symbols-header-file.exp: Set language before + loading exec. + +2020-04-15 Andrew Burgess <andrew.burgess@embecosm.com> + + * gdb.base/many-completions.exp: New file. + +2020-04-14 Tom de Vries <tdevries@suse.de> + + PR symtab/25718 + * gdb.dwarf2/dw2-symtab-includes.exp: New file. + +2020-04-14 Tom de Vries <tdevries@suse.de> + + PR symtab/25720 + * gdb.base/maint-expand-symbols-header-file.c: New test. + * gdb.base/maint-expand-symbols-header-file.exp: New file. + * gdb.base/maint-expand-symbols-header-file.h: New test. + +2020-04-14 Andrew Burgess <andrew.burgess@embecosm.com> + + * gdb.dwarf2/dw2-inline-many-frames.exp (get_func_info): Delete. + * gdb.dwarf2/dw2-inline-small-func.exp: Pass options to + get_func_info. + (get_func_info): Delete. + * gdb.dwarf2/dw2-is-stmt-2.exp (get_func_info): Delete. + * gdb.dwarf2/dw2-is-stmt.exp (get_func_info): Delete. + * lib/dwarf.exp (get_func_info): New function. + +2020-04-13 Tom de Vries <tdevries@suse.de> + + * lib/ada.exp (find_ada_tool): Pass --GCC and -B to gnatlink, similar + to what find_gnatmake does. + +2020-04-10 Tom de Vries <tdevries@suse.de> + + * gdb.base/style.exp: Expect "Expanding full symbols" message for + -readnow. + +2020-04-10 Tom de Vries <tdevries@suse.de> + + PR cli/25808 + * gdb.base/style.c: Add leading newlines. + * gdb.base/style.exp: Use gdb_get_line_number to get specific lines. + Check listing of main's one-line body. + +2020-04-08 Tom de Vries <tdevries@suse.de> + + * lib/gdb.exp (psymtabs_p): New proc. + * gdb.dwarf2/imported-unit.exp: Mark "no static partial symbols in + importing unit" unsupported if there are no partial symbols. + +2020-04-08 Tom de Vries <tdevries@suse.de> + + PR testsuite/25760 + * gdb.ada/call_pn.exp: Call "maint expand-symtabs". Add xfails. + +2020-04-07 Tom de Vries <tdevries@suse.de> + + PR symtab/25796 + * gdb.dwarf2/imported-unit-abstract-const-value.exp: New file. + +2020-04-07 Tom de Vries <tdevries@suse.de> + + * gdb.base/check-psymtab.c: New test. + * gdb.base/check-psymtab.exp: New file. + +2020-04-06 Tom Tromey <tromey@adacore.com> + + * gdb.ada/variant-record/proc.adb: New file. + * gdb.ada/variant-record/value.adb: New file. + * gdb.ada/variant-record/value.s: New file. + * gdb.ada/variant-record.exp: New file. + +2020-04-03 Hannes Domani <ssbssa@yahoo.de> + + PR gdb/25325 + * gdb.cp/typed-enum.cc: New test. + * gdb.cp/typed-enum.exp: New file. + +2020-04-02 Andrew Burgess <andrew.burgess@embecosm.com> + + * gdb.dwarf2/dw2-inline-small-func-lbls.c: New file. + * gdb.dwarf2/dw2-inline-small-func.c: New file. + * gdb.dwarf2/dw2-inline-small-func.exp: New file. + * gdb.dwarf2/dw2-inline-small-func.h: New file. + * gdb.opt/inline-small-func.c: New file. + * gdb.opt/inline-small-func.exp: New file. + * gdb.opt/inline-small-func.h: New file. + +2020-04-02 Andrew Burgess <andrew.burgess@embecosm.com> + + * lib/dwarf.exp (Dwarf::lines::program::DW_LNS_set_file): New + function. + +2020-04-02 Andrew Burgess <andrew.burgess@embecosm.com> + + * lib/dwarf.exp (function_range): Allow compiler options to be + specified. + +2020-04-02 Tom de Vries <tdevries@suse.de> + + * gdb.dwarf2/break-inline-psymtab-2.c (bar): Add + __attribute__((always_inline)). + * gdb.dwarf2/break-inline-psymtab.exp: Don't use -O2. + +2020-04-02 Tom de Vries <tdevries@suse.de> + + * lib/gdbserver-support.exp (gdbserver_exit): Factor out of ... + (gdbserver_gdb_exit): ... here. Add timeout warning. + * gdb.multi/multi-target.exp (server_spawn_ids): New global var. + (connect_target_extended_remote): Append new server_spawn_id to + server_spawn_ids. + (cleanup): New proc. + (setup, <toplevel>): Call cleanup. + +2020-04-02 Tom de Vries <tdevries@suse.de> + + * gdb.base/main-psymtab.exp: New file. + +2020-04-02 Tom de Vries <tdevries@suse.de> + + * gdb.fortran/mixed-lang-stack.exp: Accept new complex printing style. + +2020-04-01 Tom Tromey <tom@tromey.com> + + * gdb.base/complex-parts.exp: Add type tests. + +2020-04-01 Tom Tromey <tom@tromey.com> + + * gdb.base/complex-parts.exp: Add arithmetic tests. + +2020-04-01 Tom Tromey <tom@tromey.com> + + * gdb.compile/compile.exp: Update. + * gdb.compile/compile-cplus.exp: Update. + * gdb.base/varargs.exp: Update. + * gdb.base/floatn.exp: Update. + * gdb.base/endianity.exp: Update. + * gdb.base/callfuncs.exp (do_function_calls): Update. + * gdb.base/funcargs.exp (complex_args, complex_integral_args) + (complex_float_integral_args): Update. + * gdb.base/complex.exp: Update. + * gdb.base/complex-parts.exp: Update. + +2020-04-01 Tom Tromey <tromey@adacore.com> + + * gdb.rust/union.rs: New file. + * gdb.rust/union.exp: New file. + * gdb.rust/simple.rs (Union, Union2): Move to union.rs. + (main): Update. + * gdb.rust/simple.exp: Move union tests to union.exp. + +2020-04-01 Tom Tromey <tromey@adacore.com> + + * gdb.rust/simple.rs (main): Remove "y0". + +2020-04-01 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + * gdb.multi/stop-all-on-exit.c: New test. + * gdb.multi/stop-all-on-exit.exp: New file. + +2020-04-01 Hannes Domani <ssbssa@yahoo.de> + + PR gdb/24789 + * gdb.cp/misc.cc: Add integer reference variable. + * gdb.cp/misc.exp: Add test. + +2020-04-01 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + * gdb.server/stop-reply-no-thread.exp: Enhance the test + scenario to cover execution until the end and also the case + +2020-03-31 Tom de Vries <tdevries@suse.de> + + * gdb.base/c-linkage-name.exp: Fix test-case comment. Set language to + c. Use "maint info symtabs" to check symtab expansion. + +2020-03-30 Tom de Vries <tdevries@suse.de> + + * gdb.base/c-linkage-name.exp: Use readnow call to mark a test + unsupported. + (verify_psymtab_expanded): Move ... + * lib/gdb.exp (verify_psymtab_expanded): ... here. Add unsupported + test. + (readnow): New proc. + +2020-03-23 Andrew Burgess <andrew.burgess@embecosm.com> + + * gdb.fortran/mixed-lang-stack.exp: Replace two hard coded address + with $hex. + +2020-03-20 Tom Tromey <tromey@adacore.com> + + * gdb.dwarf2/dw2-ranges-base.exp: Update regular expressions. + +2020-03-20 Tom Tromey <tromey@adacore.com> + + * gdb.ada/sub_variant/subv.adb: New file. + * gdb.ada/sub_variant.exp: New file. + +2020-03-20 Tom de Vries <tdevries@suse.de> + + * gdb.threads/step-over-lands-on-breakpoint.exp (do_test): Bail out if + first break fails. + * gdb.threads/step-over-trips-on-watchpoint.exp: (do_test): Same. + +2020-03-19 Andrew Burgess <andrew.burgess@embecosm.com> + + * gdb.server/exit-multiple-threads.c: New file. + * gdb.server/exit-multiple-threads.exp: New file. + +2020-03-19 Andrew Burgess <andrew.burgess@embecosm.com> + + * gdb.fortran/mixed-lang-stack.c: New file. + * gdb.fortran/mixed-lang-stack.cpp: New file. + * gdb.fortran/mixed-lang-stack.exp: New file. + * gdb.fortran/mixed-lang-stack.f90: New file. + +2020-03-19 Andrew Burgess <andrew.burgess@embecosm.com> + + * gdb.linespec/cp-completion-aliases.cc: New file. + * gdb.linespec/cp-completion-aliases.exp: New file. + +2020-03-19 Tom de Vries <tdevries@suse.de> + + * gdb.opt/inline-locals.exp: Add kfail PR number. Make kfail matching + more precise. + +2020-03-18 Tom de Vries <tdevries@suse.de> + + * gdb.dwarf2/break-inline-psymtab-2.c: New test. + * gdb.dwarf2/break-inline-psymtab.c: New test. + * gdb.dwarf2/break-inline-psymtab.exp: New file. + +2020-03-16 Tom de Vries <tdevries@suse.de> + + * lib/cache.exp (gdb_do_cache): Add and handle local variables + cache_verify and cache_verify_proc. + +2020-03-15 Tom de Vries <tdevries@suse.de> + + * gdb.server/solib-list.exp: Handle + 'Load new symbol table from "/lib64/ld-2.26.so"? (y or n)'. + +2020-03-15 Tom de Vries <tdevries@suse.de> + + * gdb.base/maint.exp: Use exp_continue in long lines for "maint print + objfiles". + +2020-03-14 Tom Tromey <tom@tromey.com> + + * gdb.base/cvexpr.exp: Add test for _Atomic and restrict. + +2020-03-14 Tom de Vries <tdevries@suse.de> + + * gdb.mi/mi-fortran-modules.exp: Use exp_continue. + +2020-03-14 Tom de Vries <tdevries@suse.de> + + * gdb.threads/attach-many-short-lived-threads.exp: Read "info threads" + result in line-by-line fashion. + +2020-03-14 Tom de Vries <tdevries@suse.de> + + * lib/gdb.exp (supports_statement_frontiers): New proc. + * gdb.cp/step-and-next-inline.exp: Use supports_statement_frontiers. + +2020-03-14 Tom de Vries <tdevries@suse.de> + + * gdb.base/printcmds.exp: Add missing quoting for "print + teststring2". + +2020-03-13 Tom Tromey <tom@tromey.com> + + * gdb.base/printcmds.exp (test_print_strings): Add regression + test. + * gdb.base/printcmds.c (charptr): New typedef. + (teststring2): New global. + +2020-03-13 Andrew Burgess <andrew.burgess@embecosm.com> + + * gdb.base/break-interp.exp: Use the tail of the filename, not the + full path in the test name. + (test_ld): Add some with_test_prefix blocks to make test names + unique. + +2020-03-13 Tom de Vries <tdevries@suse.de> + + * gdb.mi/mi-sym-info.exp: Fix buffer full errors, and timeouts. + +2020-03-13 Tom de Vries <tdevries@suse.de> + + * gdb.mi/mi-sym-info.exp: Make matching more precise. + +2020-03-13 Tom de Vries <tdevries@suse.de> + + PR symtab/25646 + * gdb.dwarf2/imported-unit.exp: Add test. + +2020-03-13 Tom de Vries <tdevries@suse.de> + + * gdb.mi/mi-sym-info-2.c (another_char_t, another_short_t): New typedef. + (var1, var2): New variable. + * gdb.mi/mi-sym-info.exp: Add --name to various commands to restrict + matching symbols. + +2020-03-13 Tom de Vries <tdevries@suse.de> + + * lib/tuiterm.exp (Term::command_no_prompt_prefix): New proc. + (Term::command): Use prompt prefix. + (Term::enter_tui): Use command_no_prompt_prefix instead of prefix. + * gdb.tui/tui-layout-asm-short-prog.exp: Use + command_no_prompt_prefix instead of prefix. + * gdb.tui/tui-layout-asm.exp: Same. + +2020-03-12 Simon Marchi <simon.marchi@efficios.com> + + * gdb.base/break-interp.exp: Use foreach_with_prefix. + +2020-03-12 Simon Marchi <simon.marchi@efficios.com> + + * gdb.arch/amd64-disp-step-avx.S: Add nops after _start. + * gdb.arch/amd64-disp-step-avx.exp: Enable "set debug displaced + on" while stepping over the test instruction, match printed + message. + +2020-03-12 Tom de Vries <tdevries@suse.de> + + * gdb.base/info-types.exp: Use exp_continue during matching of output + of "info types". + +2020-03-12 Tom de Vries <tdevries@suse.de> + + * gdb.threads/execl.exp: Delete breakpoint after hitting it. + +2020-03-12 Tom de Vries <tdevries@suse.de> + + * gdb.fortran/module.exp: Use exp_continue during matching of output + of "info variable -n". + +2020-03-12 Tom de Vries <tdevries@suse.de> + + * gdb.dwarf2/dw2-ranges-base.exp: Limit "maint info line-table" to + gdb.dwarf2/dw2-ranges-base.c. + +2020-03-12 Tom de Vries <tdevries@suse.de> + + * gdb.linespec/explicit.exp: Fix "complete non-unique file name" test + in presence of GLIBC debuginfo. + +2020-03-12 Tom de Vries <tdevries@suse.de> + + * lib/gdb.exp (gdb_core_cmd): Use string_to_regexp for regexp-matching + $core. + +2020-03-12 Tom de Vries <tdevries@suse.de> + + * lib/gdb.exp (gdb_core_cmd): Make "No such file or directory" regexp + more precise. + +2020-03-11 Simon Marchi <simon.marchi@efficios.com> + + * lib/gdb.exp (standard_output_file): Use `pwd -W` to convert + from Unix to Windows path. + +2020-03-11 Tom de Vries <tdevries@suse.de> + + * gdb.ada/minsyms.exp: Set language to ada. + +2020-03-11 Tom de Vries <tdevries@suse.de> + + * gdb.server/sysroot.exp: Allow GLIBC's printf alias __printf. + +2020-03-11 Tom de Vries <tdevries@suse.de> + + * gdb.btrace/reconnect.exp: Allow source line pattern after stepi. + +2020-03-11 Tom Tromey <tromey@adacore.com> + + * gdb.dwarf2/variant.exp: Mark discriminants as artificial. + +2020-03-11 Tom de Vries <tdevries@suse.de> + + * gdb.base/foll-fork.exp: Allow "Reading in symbols" messages. + +2020-03-11 Tom de Vries <tdevries@suse.de> + + * gdb.base/break-interp.exp: Limit verbose scope. + +2020-03-11 Tom de Vries <tdevries@suse.de> + + * gdb.fortran/logical.f90: Define variable with character type. + * gdb.fortran/logical.exp: Use character type instead of uint8_t. + +2020-03-11 Tom de Vries <tdevries@suse.de> + + * gdb.base/list-ambiguous.exp: Set EDITOR to true. + +2020-03-11 Tom de Vries <tdevries@suse.de> + + * gdb.ada/access_to_packed_array.exp: Test printing of expanded + symtabs. + +2020-03-10 Andrew Burgess <andrew.burgess@embecosm.com> + Bernd Edlinger <bernd.edlinger@hotmail.de> + + * gdb.cp/step-and-next-inline.cc: New file. + * gdb.cp/step-and-next-inline.exp: New file. + * gdb.cp/step-and-next-inline.h: New file. + * gdb.dwarf2/dw2-is-stmt.c: New file. + * gdb.dwarf2/dw2-is-stmt.exp: New file. + * gdb.dwarf2/dw2-is-stmt-2.c: New file. + * gdb.dwarf2/dw2-is-stmt-2.exp: New file. + * gdb.dwarf2/dw2-ranges-base.exp: Update line table pattern. + +2020-03-10 Andrew Burgess <andrew.burgess@embecosm.com> + + * lib/dwarf.exp (Dwarf::lines) Add support for modifying the + is-stmt flag in the line table. + +2020-03-09 Tom de Vries <tdevries@suse.de> + + * lib/gdb.exp (cached_file): Create cache dir. + +2020-03-07 Tom de Vries <tdevries@suse.de> + + * gdb.cp/ref-params.exp: Compare build_executable result with -1. + * gdb.cp/rvalue-ref-params.exp: Same. + +2020-03-06 Tom de Vries <tdevries@suse.de> + + * lib/gdb.exp (tentative_rename, cached_file): New proc. + * boards/cc-with-tweaks.exp: Use cached_file to create gdb.sh. + +2020-03-06 Tom de Vries <tdevries@suse.de> + + * README: Fix "the the". + * gdb.base/dprintf.exp: Same. + +2020-03-05 Tom de Vries <tdevries@suse.de> + + * gdb.base/maint.exp: Update "main print statistics" expected output. + +2020-03-04 Alok Kumar Sharma <AlokKumar.Sharma@amd.com> + + * lib/fortran.exp (fortran_int4): Handle flang kind printing. + (fortran_int8): Likewise. + (fortran_real4): Likewise. + (fortran_real8): Likewise. + (fortran_complex4): Likewise. + (fortran_logical4): Likewise. + (fortran_character1): Likewise. + +2020-03-03 Andrew Burgess <andrew.burgess@embecosm.com> + + * gdb.fortran/logical.exp: Add tests that any non-zero value is + printed as true. + +2020-03-03 Sergio Durigan Junior <sergiodj@redhat.com> + + * gdb.base/printcmds.exp: Add test to verify printf of a + variable holding an address. + +2020-03-03 Tom de Vries <tdevries@suse.de> + + * gdb.mi/gdb2549.exp: Fix "register values t" check-read1 timeout. + +2020-03-03 Tom de Vries <tdevries@suse.de> + + * gdb.mi/list-thread-groups-available.exp: Use -prompt syntax for + gdb_test_multiple call. + +2020-03-03 Tom de Vries <tdevries@suse.de> + + * gdb.mi/mi-sym-info.exp: Add missing -prompt "$mi_gdb_prompt$" to + gdb_test_multiple calls. + +2020-03-02 Andrew Burgess <andrew.burgess@embecosm.com> + + * gdb.base/default.exp: Remove test of 'set history filename'. + * gdb.base/gdbinit-history.exp: Add tests for setting the history + filename to the empty string. + * lib/gdb.exp (gdb_init): Unset environment variables GDBHISTFILE + and GDBHISTSIZE. + +2020-03-02 Andrew Burgess <andrew.burgess@embecosm.com> + + * gdb.server/stop-reply-no-thread.exp: Add test where T packet is + disabled. + +2020-03-02 Pedro Alves <palves@redhat.com> + Tom de Vries <tdevries@suse.de> + + * lib/gdb.exp (gdb_test_multiple): Handle prompt_regexp option using + -prompt prefix, before user_code argument. Add -lbl option likewise. + (skip_python_tests_prompt, skip_libstdcxx_probe_tests_prompt) + (gdb_is_target_1): Add -prompt prefix and move to before user_code + argument. + * gdb.base/corefile-buildid.exp: Use -lbl option. Rewrite regexps to + have "\r\n" at start-of-line, instead of at end-of-line. + +2020-02-28 Simon Marchi <simon.marchi@efficios.com> + + * lib/trace-support.exp (get_in_proc_agent): Adjust path to + libinproctrace.so. + +2020-02-28 Luis Machado <luis.machado@linaro.org> + + * gdb.arch/aarch64-fp.exp: Switch from "info registers" command + to "p/x". + +2020-02-28 Luis Machado <luis.machado@linaro.org> + + * gdb.arch/aarch64-dbreg-contents.c: Include stdlib.h, unistd.h, + asm/ptrace.h and error.h. + +2020-02-28 Tom de Vries <tdevries@suse.de> + + * gdb.base/c-linkage-name.c (main): Call do_something_other_cu. + (struct wrapper, do_something, mundane/symada__cS): Move ... + * gdb.base/c-linkage-name-2.c: ... here. New source file. + * gdb.base/c-linkage-name.exp: Add verification of psymtab expansion. + Update "print symada__cS before partial symtab expansion" regexp. + Update breakpoint location. Flush symbol cache after expansion. + +2020-02-28 Luis Machado <luis.machado@linaro.org> + + * gdb.arch/aarch64-pauth.exp: Recognize optional PAC output. + +2020-02-27 Tom de Vries <tdevries@suse.de> + + * config/sid.exp: Remove unused globals. + * gdb.base/attach.exp: Same. + * gdb.base/catch-load.exp: Same. + * gdb.base/dbx.exp: Same. + * lib/gdb.exp: Same. + * lib/mi-support.exp: Same. + * lib/prompt.exp: Same. + +2020-02-27 Tom de Vries <tdevries@suse.de> + + * lib/tuiterm.exp (spawn): Handle case that spawn_out(slave,name) is + not set. + +2020-02-26 Aaron Merey <amerey@redhat.com> + + * gdb.debuginfod: New directory for debuginfod tests. + * gdb.debuginfod/main.c: New test file. + * gdb.debuginfod/fetch_src_and_symbols.exp: New tests. + +2020-02-26 Tom de Vries <tdevries@suse.de> + + PR gdb/25603 + * gdb.base/persistent-lang.cc: New test. + * gdb.base/persistent-lang.exp: New file. + +2020-02-25 Andrew Burgess <andrew.burgess@embecosm.com> + + * gdb.fortran/derived-type-striding.exp: Add a new test. + * gdb.fortran/derived-type-striding.f90: Add pointer variable for + new test. + +2020-02-25 Andrew Burgess <andrew.burgess@embecosm.com> + + * gdb.base/cached-source-file.exp: Avoid source file paths in test + names. + +2020-02-25 Tom de Vries <tdevries@suse.de> + + PR go/18926 + * gdb.go/methods.exp: Remove gcc/93866 xfail. + +2020-02-24 Tom de Vries <tdevries@suse.de> + + PR gdb/25592 + * gdb.base/info-locals-unused-static-var.c: New test. + * gdb.base/info-locals-unused-static-var.exp: New file. + +2020-02-22 Tom Tromey <tom@tromey.com> + + * gdb.python/tui-window.exp: New file. + * gdb.python/tui-window.py: New file. + +2020-02-22 Tom Tromey <tom@tromey.com> + + PR tui/17850: + * gdb.tui/new-layout.exp: Add horizontal layout and winheight + tests. + +2020-02-22 Tom Tromey <tom@tromey.com> + + * gdb.tui/new-layout.exp: Add sub-layout tests. + +2020-02-22 Tom Tromey <tom@tromey.com> + + * gdb.tui/new-layout.exp: New file. + +2020-02-22 Tom Tromey <tom@tromey.com> + + * gdb.rust/rust-style.rs: New file. + * gdb.rust/rust-style.exp: New file. + * gdb.base/style.exp: Test structure printing. + * gdb.base/style.c (struct some_struct): New type. + (enum etype): New type. + (struct_value): New global. + +2020-02-21 Tom de Vries <tdevries@suse.de> + + PR go/18926 + * lib/gdb.exp (bp_location2/bp_location2_regexp): Fix. + Remove blanket xfails. Use message argument for gdb_breakpoint. + Make continuing to breakpoint test conditional on setting breakpoint. + Fix continuing to breakpoint regexp. Add xfails for gccgo-6/7 + DW_AT_name attribute. Add xfail for GCC PR93866. + +2020-02-21 Andrew Burgess <andrew.burgess@embecosm.com> + + * gdb.dwarf2/cpp-linkage-name.c: New file. + * gdb.dwarf2/cpp-linkage-name.exp: New file. + +2020-02-21 Shahab Vahedi <shahab@synopsys.com> + + * lib/gdb.exp (gdb_wrapper_init): Reset + "gdb_wrapper_initialized" to 0 if "wrapper_file" does + not exist. + +2020-02-20 Tom de Vries <tdevries@suse.de> + + PR go/17018 + * gdb.go/hello.exp: Copy ... + * gdb.go/global-local-var-shadow.exp: ... here. New file. Expect + print of st to print value of global definition. Add xfail for GCC + PR93844. + * gdb.go/hello.exp: Remove printing of st before definition. + * gdb.go/hello.go: Copy ... + * gdb.go/global-local-var-shadow.go: ... here. New test. Rename myst + to st. + * gdb.go/hello.go: Remove myst. Remove comment about shadowing. + +2020-02-20 Tom de Vries <tdevries@suse.de> + + * lib/gdb.exp (support_go_compile): New gdb_caching_proc. + (gdb_simple_compile): Handle compile_flags go by using .go extension + for source file. + * gdb.go/chan.exp: Use support_go_compile. + * gdb.go/handcall.exp: Same. + * gdb.go/hello.exp: Same. + * gdb.go/integers.exp: Same. + * gdb.go/max-depth.exp: Same. + * gdb.go/methods.exp: Same. + * gdb.go/package.exp: Same. + * gdb.go/strings.exp: Same. + * gdb.go/types.exp: Same. + * gdb.go/unsafe.exp: Same. + +2020-02-19 Tom de Vries <tdevries@suse.de> + + * gdb.python/lib-types.exp: Make xfail more strict. + +2020-02-19 Tom de Vries <tdevries@suse.de> + + * gdb.ada/funcall_ref.exp: Replace xfail setup by unsupported check. + +2020-02-19 Doug Evans <dje@google.com> + + PR rust/25535 + * gdb.rust/simple.exp: Add test. + * gdb.rust/simple.rs: Add test. + +2020-02-19 Tom de Vries <tdevries@suse.de> + + * gdb.base/corefile-buildid.exp (check_exec_file): Match info files + output line-by-line. + +2020-02-19 Tom de Vries <tdevries@suse.de> + + * gdb.cp/cpexprs.exp: Remove c++/14186 kfail. + +2020-02-19 Tom de Vries <tdevries@suse.de> + + * gdb.base/solib-overlap.exp: Use exec instead of system to execute + prelink. + +2020-02-19 Tom de Vries <tdevries@suse.de> + + * lib/cache.exp (ignore_pass, gdb_do_cache_wrap): New proc. + (gdb_do_cache): Use gdb_do_cache_wrap. + * gdb.base/gdb-caching-proc.exp (test_proc): Use gdb_do_cache_wrap. + +2020-02-19 Tom de Vries <tdevries@suse.de> + + * lib/dtrace.exp (dtrace_build_usdt_test_program): Use quiet as + gdb_compile option. + +2020-02-18 Simon Marchi <simon.marchi@efficios.com> + + * gdb.base/printcmds.exp (test_print_enums): Update expected + output. + +2020-02-18 Simon Marchi <simon.marchi@efficios.com> + + * gdb.base/printcmds.exp (test_print_enums): Expect hex values + for "unknown". + +2020-02-18 Simon Marchi <simon.marchi@efficios.com> + + * gdb.base/printcmds.c (enum flag_enum): Add FE_TWO_LEGACY + enumerator. + +2020-02-18 Simon Marchi <simon.marchi@efficios.com> + + * gdb.base/printcmds.c (enum flag_enum): Prefix enumerators with + FE_, add FE_NONE. + (three): Update. + (enum flag_enum_without_zero): New enum. + (flag_enum_without_zero): New variable. + (enum not_flag_enum): New enum. + (three_not_flag): New variable. + * gdb.base/printcmds.exp (test_artificial_arrays): Update. + (test_print_enums): Add more tests for printing flag enums. + +2020-02-18 Tom de Vries <tdevries@suse.de> + + * lib/ada.exp (gdb_compile_ada_1): Factor out of ... + (gdb_compile_ada): ... here. + (gnat_runtime_has_debug_info): Remove fail call for gdb_compile_ada + failure. Use gdb_compile_ada_1 instead of gdb_compile_ada. + +2020-02-14 Tom Tromey <tom@tromey.com> + + * lib/gdbserver-support.exp (find_gdbserver): Find gdbserver in + build directory. + * boards/gdbserver-base.exp: Update path to gdbserver. + +2020-02-13 Tom de Vries <tdevries@suse.de> + + * lib/ada.exp (gdb_compile_ada): Delete stale exec before compilation. + +2020-02-13 Tom de Vries <tdevries@suse.de> + + * gdb.ada/catch_ex_std.exp: Indicate unsupported if gnatbind/gnatlink + are missing. + +2020-02-13 Tom de Vries <tdevries@suse.de> + + * lib/ada.exp (gnatmake_version_at_least): Wrap exec call in a catch + call. + +2020-02-11 Sergio Durigan Junior <sergiodj@redhat.com> + + PR tui/25126 + https://bugzilla.redhat.com/show_bug.cgi?id=1784210 + * gdb.base/cached-source-file.c: New file. + * gdb.base/cached-source-file.exp: New file. + +2020-02-11 Tom de Vries <tdevries@suse.de> + + PR testsuite/25488 + * lib/gdb.exp (gdb_init): Unset $file_last_loaded. + +2020-02-10 Tom de Vries <tdevries@suse.de> + + * gdb.multi/multi-target.exp: Skip if skip_gdbserver_tests. + +2020-02-10 Maciej W. Rozycki <macro@wdc.com> + + * gdb.base/step-over-no-symbols.exp: Verify that $before_addr + and $after_addr are both integers before making a comparison. + +2020-02-09 Tom de Vries <tdevries@suse.de> + + * gdb.base/many-headers.exp: Echo gdb command to gdb.log. Capture gdb + command output and paste it into gdb.log. If any, paste catch message + to gdb.log. + 2020-02-07 Tom Tromey <tromey@adacore.com> PR breakpoints/24915: * gdb.base/annotate-symlink.exp: Use setup_xfail. +2020-02-06 Shahab Vahedi <shahab@synopsys.com> + + * gdb.tui/tui-missing-src.exp: Add the "missing source + file" test for the TUI. + +2020-02-06 Andrew Burgess <andrew.burgess@embecosm.com> + + * gdb.server/multi-ui-errors.exp: Give a test a real name to avoid + including a port number in the output. + +2020-02-04 Alok Kumar Sharma <alokkumar.sharma@amd.com> + + * lib/fortran.exp (fortran_int4): Handle clang. + (fortran_int8): Likewise. + (fortran_real4): Likewise. + (fortran_real8): Likewise. + (fortran_complex4): Likewise. + (fortran_logical4): Likewise. + (fortran_character1): Likewise. + +2020-02-04 Tom de Vries <tdevries@suse.de> + + * README (Race detection): Add note. + +2020-02-04 Tom de Vries <tdevries@suse.de> + + * lib/gdb.exp (inferior_exited_re): Use "\[^\n\r\]*" instead of ".*". + +2020-02-04 Tom de Vries <tdevries@suse.de> + + * lib/gdb.exp (inferior_exited_re): Use non-capturing parentheses. + +2020-02-03 Rogerio A. Cardoso <rcardoso@linux.ibm.com> + + * gdb.arch/powerpc-power8.exp: Delete trailing whitespace of + tbegin., tend. instructions. Replace bctar-, bctar+, bctarl-, + bctarl+ extended mnemonics when avaliable by bgttar, bnstarl, + blttar, bnetarl. + * gdb.arch/powerpc-power8.s: Fix comments. Fix instructions + binary for blttar, bnetarl. + * gdb.arch/powerpc-power9.exp: Delete trailing whitespace of + wait instruction. Delete ldmx test. + * gdb.arch/powerpc-power9.s: Delete ldmx instruction. + +2020-02-03 Alok Kumar Sharma <AlokKumar.Sharma@amd.com> + + * gdb.fortran/array-bounds-high.exp: New file. + * gdb.fortran/array-bounds-high.f90: New file. + +2020-02-03 Lukas Durfina <ldurfina@tachyum.com> (tiny change) + + * gdb.base/fileio.c: Remove #include of <sys/errno.h>. + Replace #include of <sys/fcntl.h> by <fcntl.h>. + +2020-02-01 Tom de Vries <tdevries@suse.de> + + * gdb.server/server-kill-python.exp: Fix $gdb_tst_name typo. + +2020-01-31 Andrew Burgess <andrew.burgess@embecosm.com> + + PR tui/9765 + * gdb.tui/tui-layout-asm-short-prog.S: New file. + * gdb.tui/tui-layout-asm-short-prog.exp: New file. + +2020-01-29 Luis Machado <luis.machado@linaro.org> + + * gdb.arch/aarch64-brk-patterns.c: New source file. + * gdb.arch/aarch64-brk-patterns.exp: New test. + +2020-01-29 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + * gdb.cp/pass-by-ref-2.exp: Mark some tests as XFAIL based on the + GCC/Clang version. + * gdb.cp/pass-by-ref.exp: Ditto. + +2020-01-29 Tom de Vries <tdevries@suse.de> + + * gdb.threads/watchpoint-fork-child.c: Guard prints with #if DEBUG. + * gdb.threads/watchpoint-fork-mt.c: Same. + * gdb.threads/watchpoint-fork-parent.c: Same. + * gdb.threads/watchpoint-fork-st.c: Same. + * gdb.threads/watchpoint-fork.exp: Compile with DEBUG=0. + +2020-01-27 Luis Machado <luis.machado@linaro.org> + + * gdb.base/step-over-syscall.exp (setup): Check if we're already + sitting at a syscall instruction when we hit the syscall function's + breakpoint. + Check PC against one obtained with the x command. + Validate syscall number. + (step_over_syscall): Don't continue to the syscall instruction if + we're already there. + +2020-01-25 Philippe Waroquiers <philippe.waroquiers@skynet.be> + + * gdb.base/attach.exp: Test 'set exec-file-mismatch'. + +2020-01-24 Andrew Burgess <andrew.burgess@embecosm.com> + + * gdb.dwarf2/dw2-inline-many-frames.c: New file. + * gdb.dwarf2/dw2-inline-many-frames.exp: New file. + +2020-01-24 Andrew Burgess <andrew.burgess@embecosm.com> + + * gdb.dwarf2/dw2-inline-stepping.c: New file. + * gdb.dwarf2/dw2-inline-stepping.exp: New file. + +2020-01-24 Andrew Burgess <andrew.burgess@embecosm.com> + + * gdb.base/maint.exp: Update line table parsing test. + * gdb.dwarf2/dw2-ranges-base.exp: Add new line table parsing test. + +2020-01-24 Pedro Alves <palves@redhat.com> + + PR gdb/25410 + * gdb.multi/multi-re-run-1.c: New. + * gdb.multi/multi-re-run-2.c: New. + * gdb.multi/multi-re-run.exp: New. + +2020-01-24 Andrew Burgess <andrew.burgess@embecosm.com> + + PR gdb/23718 + * gdb.server/server-kill-python.exp: New file. + +2020-01-24 Andrew Burgess <andrew.burgess@embecosm.com> + + * gdb.server/multi-ui-errors.c: New file. + * gdb.server/multi-ui-errors.exp: New file. + +2020-01-24 Andrew Burgess <andrew.burgess@embecosm.com> + + PR tui/9765 + * gdb.tui/tui-layout-asm.exp: Add scrolling test for asm window. + +2020-01-19 Tom Tromey <tom@tromey.com> + + * gdb.tui/main.exp: Add check for plain "file". + +2020-01-16 Christian Biesinger <cbiesinger@google.com> + + * lib/gdb.exp: Fix spelling error (seperatelly). + +2020-01-14 Tom Tromey <tom@tromey.com> + + PR symtab/12535: + * gdb.python/python.exp: Test decode_line with empty string + argument. + +2020-01-14 Bernd Edlinger <bernd.edlinger@hotmail.de> + + * gdb.base/skip-inline.exp: Extend test. + +2020-01-13 Andrew Burgess <andrew.burgess@embecosm.com> + + * gdb.dwarf2/dw2-bad-elf-other.S: New file. + * gdb.dwarf2/dw2-bad-elf.c: New file. + * gdb.dwarf2/dw2-bad-elf.exp: New file. + +2020-01-13 Andrew Burgess <andrew.burgess@embecosm.com> + + * lib/dwarf.exp (Dwarf::lines): Reset _line_saw_program and + _line_saw_file. + +2020-01-13 Andrew Burgess <andrew.burgess@embecosm.com> + + * lib/tuiterm.exp (Term::_check_box): Check some parts of the top + border. + +2020-01-10 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + * gdb.multi/multi-target.exp (setup): Factor out "info + connections" and "info inferiors" tests to ... + (test_info_inferiors): ... this new procedure. + (top level): Run new "info-inferiors" tests. + +2020-01-10 Pedro Alves <palves@redhat.com> + + * gdb.server/bkpt-other-inferior.exp: New file. + +2020-01-10 Pedro Alves <palves@redhat.com> + + * gdb.base/kill-detach-inferiors-cmd.exp: Adjust expected output + of "add-inferior". + * gdb.base/quit-live.exp: Likewise. + * gdb.base/remote-exec-file.exp: Likewise. + * gdb.guile/scm-progspace.exp: Likewise. + * gdb.linespec/linespec.exp: Likewise. + * gdb.mi/new-ui-mi-sync.exp: Likewise. + * gdb.mi/user-selected-context-sync.exp: Likewise. + * gdb.multi/multi-target.exp (setup): Add "info connection" and + "info inferiors" tests. + * gdb.multi/remove-inferiors.exp: Adjust expected output of + "add-inferior". + * gdb.multi/watchpoint-multi.exp: Likewise. + * gdb.python/py-inferior.exp: Likewise. + * gdb.server/extended-remote-restart.exp: Likewise. + * gdb.threads/fork-plus-threads.exp: Adjust expected output of + "info inferiors". + * gdb.threads/forking-threads-plus-breakpoint.exp: Likewise. + * gdb.trace/report.exp: Likewise. + +2020-01-10 Pedro Alves <palves@redhat.com> + + * gdb.multi/multi-target.c: New file. + * gdb.multi/multi-target.exp: New file. + * lib/gdbserver-support.exp (gdb_target_cmd): Handle "Non-stop + mode requested, but remote does not support non-stop". + +2020-01-10 Pedro Alves <palves@redhat.com> + + * gdb.server/extended-remote-restart.exp (test_reload): Explicitly + disconnect before reconnecting. + +2020-01-10 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + Pedro Alves <palves@redhat.com> + + * gdb.server/connect-without-multi-process.exp: Also test + continuing to end. + +2020-01-10 Pedro Alves <palves@redhat.com> + + * gdb.base/remote-exec-file.exp: New file. + +2020-01-10 Pedro Alves <palves@redhat.com> + + * gdb.base/fork-running-state.exp (do_test): Adjust expected + output. + * gdb.threads/async.c: New. + * gdb.threads/async.exp: New. + * gdb.multi/tids-gid-reset.c: New. + * gdb.multi/tids-gid-reset.exp: New. + +2020-01-10 George Barrett <bob@bob131.so> + + * gdb.base/stap-probe.c (relocation_marker): Add dummy variable + to help in finding the image relocation offset. + * gdb.base/stap-probe.exp (stap_test): Accept arbitrary compile + options in arguments. + (stap_test_no_debuginfo): Likewise. + (stap-probe-nosem-noopt-pie, stap-probe-nosem-noopt-nopie): Add + test variants. + (stap_test): Add null semaphore relocation test. + +2020-01-10 George Barrett <bob@bob131.so> + + * gdb.base/stap-probe.c: Rename USE_PROBES to USE_SEMAPHORES. + * gdb.base/stap-probe.exp: Likewise. + (stap_test): Pass argument as an additional flag. + (stap_test_no_debuginfo): Likewise. + (stap_test): Check `info probes stap' output for semaphore + addresses if the test binary is supposed to have them. + +2020-01-09 Andrew Burgess <andrew.burgess@embecosm.com> + + * gdb.tui/basic.exp: Add more scrolling tests. + +2020-01-09 Tom Tromey <tom@tromey.com> + + PR tui/18932: + * lib/tuiterm.exp (Term::wait_for): Rename from _accept. Return a + meangingful value. + (Term::command, Term::resize): Update. + * gdb.tui/basic.exp: Add scrolling test. + +2020-01-09 Andrew Burgess <andrew.burgess@embecosm.com> + + * gdb.tui/tui-layout-asm.exp: New file. + +2020-01-09 Andrew Burgess <andrew.burgess@embecosm.com> + + * lib/tuiterm.exp (Term::check_box_contents): New proc. + +2020-01-09 Andrew Burgess <andrew.burgess@embecosm.com> + + * lib/tuiterm.exp (Term::prepare_for_tui): New proc. + (Term::enter_tui): Use Term::prepare_for_tui. + +2020-01-09 Andrew Burgess <andrew.burgess@embecosm.com> + + * lib/tuiterm.exp (Term::dump_screen): Always dump the screen when + called. + +2020-01-09 Andrew Burgess <andrew.burgess@embecosm.com> + + * gdb.base/skip.exp: Fix race condition in test. + 2020-01-06 Andrew Burgess <andrew.burgess@embecosm.com> * gdb.base/backtrace.c: New file. * gdb.base/backtrace.exp: New file. +2020-01-05 Andrew Burgess <andrew.burgess@embecosm.com> + + * gdb.tui/list.exp: Test 'focus next' after 'list main'. + +2020-01-03 Philippe Waroquiers <philippe.waroquiers@skynet.be> + + * gdb.base/style.exp: Test that warnings are styled. + +2019-12-29 Bernd Edlinger <bernd.edlinger@hotmail.de> + + * gdb.base/line65535.exp: New file. + * gdb.base/line65535.c: New file. + +2019-12-27 Simon Marchi <simon.marchi@polymtl.ca> + + * lib/ada.exp (gnat_runtime_has_debug_info): New proc. + * lib/gnat_debug_info_test.adb: New file. + * gdb.ada/ptype_tagged_param.exp: Use + gnat_runtime_has_debug_info, expect a different output if + runtime does not have debug info. + +2019-12-20 Simon Marchi <simon.marchi@efficios.com> + + * lib/sym-info-cmds.exp (GDBInfoSymbols::check_no_entry): Add + (another) quote in test name. + +2019-12-20 Simon Marchi <simon.marchi@efficios.com> + + * lib/sym-info-cmds.exp (GDBInfoModuleSymbols::check_no_entry): + Add quote in test name. + +2019-12-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + * gdb.cp/pass-by-ref.cc: Delete. Generated in the output + directory instead. + * gdb.cp/pass-by-ref.exp: Extend with more cases. + * gdb.cp/pass-by-ref-2.cc: New file. + * gdb.cp/pass-by-ref-2.exp: New file. + +2019-12-20 Tom Tromey <tom@tromey.com> + + * gdb.tui/list-before.exp: New file. + +2019-12-20 Tom Tromey <tom@tromey.com> + + * gdb.tui/list.exp: Check for source on initial listing. + +2019-12-11 Tom Tromey <tromey@adacore.com> + + * gdb.xml/tdesc-arch.exp (set_arch): Add "trans_mode" parameter. + Add crlf test. + +2019-12-18 Simon Marchi <simon.marchi@efficios.com> + + * gdb.base/default.exp: Update value of $_gdb_major. + +2019-12-17 Bernd Edlinger <bernd.edlinger@hotmail.de> + + * gdb.base/skip.exp: Fix test failure observed with gcc-9.2.0. + +2019-12-17 Bernd Edlinger <bernd.edlinger@hotmail.de> + + * gdb.base/skip.exp: Whitespace fix. + +2019-12-16 Bernd Edlinger <bernd.edlinger@hotmail.de> + + * gdb.base/skip-inline.c: New file. + * gdb.base/skip-inline.exp: New file. + 2019-12-16 Simon Marchi <simon.marchi@polymtl.ca> * gdb.base/jit-reader.exp (jit_reader_test): Rename @@ -30,6 +3455,24 @@ function. (read_sp, unwind_frame, get_frame_id): Adjust to other changes. +2019-12-11 Tom Tromey <tom@tromey.com> + + * gdb.tui/resize.exp: Fix regexp. + * gdb.tui/regs.exp: Fix regexps. + * gdb.tui/main.exp: Fix regexp. + +2019-12-11 Tom Tromey <tom@tromey.com> + + * gdb.tui/resize.exp: Update. + * gdb.tui/empty.exp (layouts): Update. + +2019-12-11 Tom Tromey <tom@tromey.com> + + * gdb.tui/regs.exp: Update. + * gdb.tui/empty.exp (layouts): Update. + * gdb.tui/basic.exp: Update. + * lib/tuiterm.exp (_check_box): Don't check bottom border. + 2019-12-11 Philippe Waroquiers <philippe.waroquiers@skynet.be> * gdb.base/options.exp: Add -raw-values in the print completion list. @@ -763,7 +4206,7 @@ 2019-09-29 Tom de Vries <tdevries@suse.de> - * gdb.dwarf2/gdb-index.exp: Handle new location of .dwz file. + * gdb.dwarf2/gdb-index.exp: Handle new location of .dwz file. 2019-09-29 Tom de Vries <tdevries@suse.de> @@ -1258,7 +4701,7 @@ 2019-07-29 Tom de Vries <tdevries@suse.de> * gdb.base/maint.exp: Use "\r\n" instead of "\[\r\n\]+" in "maint - print registers" regexps. + print registers" regexps. 2019-07-29 Tom de Vries <tdevries@suse.de> @@ -2223,6 +5666,10 @@ * gdb.cp/meth-typedefs.exp: Add new tests for `test_incomplete' functions. +2019-04-25 Ali Tamur <tamur@google.com> + + * lib/dwarf.exp (_handle_DW_FORM): Add DW_FORM_strx. + 2019-04-25 Sergio Durigan Junior <sergiodj@redhat.com> PR corefiles/11608 @@ -4247,6 +7694,13 @@ PR gdb/23104 * gdb.base/info-shared.exp: Replace libs=-ldl with shlib_load. +2018-04-22 Rajendra SY <rajendra.sy@gmail.com> + + PR gdb/23095 + * gdb.base/break-probes.exp: Pass shlib_load to + prepare_for_testing. Set normal_bp to r_debug_state if target is + bsd. + 2018-04-19 Richard Bunt <richard.bunt@arm.com> * gdb.threads/multiple-successive-infcall.c: New test. @@ -17957,6 +21411,6 @@ ;; version-control: never ;; End: - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted provided the copyright notice and this notice are preserved. diff -Nru gdb-9.1/gdb/testsuite/ChangeLog-1993-2013 gdb-10.2/gdb/testsuite/ChangeLog-1993-2013 --- gdb-9.1/gdb/testsuite/ChangeLog-1993-2013 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/testsuite/ChangeLog-1993-2013 2021-04-25 04:04:35.000000000 +0000 @@ -24429,6 +24429,12 @@ * lib/mi-support.exp (mi_gdb_test): Add global declaration for expect_out so that callers can get at it. +2002-08-26 Joel Brobecker <brobecker@gnat.com> + + * gdb.base/commands.exp: New tests for commands + attached to a temporary breakpoint, and for commands that + delete the breakpoint they are attached to. + 2002-08-23 Daniel Jacobowitz <drow@mvista.com> * gdb.threads/print-threads.c: New file. @@ -26039,6 +26045,13 @@ generated by GDB when it doesn't understand how to debug threads on the target system. +2001-04-17 Michael Snyder <msnyder@redhat.com> + + * gdb.trace/deltrace.exp: Allow for 64-bit addresses. + * gdb.trace/infotrace.exp: Ditto. + * gdb.trace/passcount.exp: Ditto. + * gdb.trace/while-stepping.exp: Ditto. + 2001-03-19 Andrew Cagney <ac131313@redhat.com> * gdb.mi/mi-console.exp: Document ``Hello'' as a known bug. @@ -26625,7 +26638,12 @@ * gdb.base/funcargs.exp: Relax patterns matching pointers to char. -Thu Mar 30 13:26:19 2000 Philippe De Muyter <phdm@macqel.be> +2000-04-06 Michael Snyder <msnyder@cygnus.com> + + * gdb.threads/pthreads.exp (all_threads_running): Allow + for more than 15 thread increments. + +2000-03-30 Philippe De Muyter <phdm@macqel.be> * gdb.base/call-ar-st.c (init_small_structs, main): Use floating-point values that can be represented exactly. @@ -26763,6 +26781,11 @@ * gdb.base/display.exp: Some yacc parsers like to say "A syntax error" rather than "A parse error". Accept both. +2000-01-07 Michael Snyder <msnyder@cygnus.com> + + * gdb.threads/pthreads.exp: Try to link with -lthread if -lpthread + and -lpthreads fail. + 2000-01-06 Fernando Nasser <fnasser@totem.to.cygnus.com> * gdb.base/default.exp: Remove OS dependent string from "target @@ -26782,6 +26805,22 @@ * gdb.base/ptype.c (FALSE, TRUE): #undef these to avoid clash on AIX, which defines them in <sys/types.h>. +1999-12-20 Michael Snyder <msnyder@cleaver.cygnus.com> + + * gdb.base/callfuncs.exp: Make "next" test match the next source + line, in case the "next" runs away. + +1999-02-18 Jason Molenda (jsm@bugshack.cygnus.com) + + * testsuite/gdb.chill/tests1.ch, testsuite/gdb.chill/tests2.ch, + testsuite/gdb.chill/tests2.exp: Update FSF address in copyright + notices. + +1999-12-16 Michael Snyder <msnyder@cleaver.cygnus.com> + + * gdb.threads/linux-dp.exp: Make test for "New Thread" message + more forgiving. Ditto test for "info threads". + 1999-12-16 Stan Shebs <shebs@andros.cygnus.com> * gdb.base/default.exp: Match arm* etc instead of arm in "info @@ -30891,6 +30930,11 @@ * gdb.base/a1-selftest.exp (test_with_self): Remove comment which apparently went with a (very) old xfail. +Fri Mar 24 15:45:42 1995 Stu Grossman (grossman@cygnus.com) + + * gdb.base/break.exp: Lots of cleanups. Use gdb_test more + thoroughly. + Fri Mar 24 13:41:09 1995 Kung Hsu <kung@mexican.cygnus.com> * gdb.base/callfuncs.exp: call runto_main instead of runto main. @@ -33331,6 +33375,12 @@ * configure.in: switch subdirs assignment to configdirs. * gdb.t*/configure.in: new files. +Fri Apr 23 10:34:02 1993 Stu Grossman (grossman@cygnus.com) + + * gdb.t16/gdbme.c, testsuite/gdb.t17/gdbme.c: Add calls + to malloc() so that we can test GDB eval of dynamically created + arrays (like char strings in `print "foo"'). + Thu Apr 22 08:27:53 1993 Ian Lance Taylor (ian@cygnus.com) * gdb.t07/watchpoint.exp: Removed a29k expected failure which now @@ -33649,6 +33699,6 @@ ;; version-control: never ;; End: - Copyright 1993-2020 Free Software Foundation, Inc. + Copyright 1993-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted provided the copyright notice and this notice are preserved. diff -Nru gdb-9.1/gdb/testsuite/config/cfdbug.exp gdb-10.2/gdb/testsuite/config/cfdbug.exp --- gdb-9.1/gdb/testsuite/config/cfdbug.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/config/cfdbug.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1997-2020 Free Software Foundation, Inc. +# Copyright 1997-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/config/d10v.exp gdb-10.2/gdb/testsuite/config/d10v.exp --- gdb-9.1/gdb/testsuite/config/d10v.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/config/d10v.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/config/default.exp gdb-10.2/gdb/testsuite/config/default.exp --- gdb-9.1/gdb/testsuite/config/default.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/config/default.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2007-2020 Free Software Foundation, Inc. +# Copyright (C) 2007-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/config/dve.exp gdb-10.2/gdb/testsuite/config/dve.exp --- gdb-9.1/gdb/testsuite/config/dve.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/config/dve.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1998-2020 Free Software Foundation, Inc. +# Copyright 1998-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/config/extended-gdbserver.exp gdb-10.2/gdb/testsuite/config/extended-gdbserver.exp --- gdb-9.1/gdb/testsuite/config/extended-gdbserver.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/config/extended-gdbserver.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2000-2020 Free Software Foundation, Inc. +# Copyright 2000-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/config/gdbserver.exp gdb-10.2/gdb/testsuite/config/gdbserver.exp --- gdb-9.1/gdb/testsuite/config/gdbserver.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/config/gdbserver.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2000-2020 Free Software Foundation, Inc. +# Copyright 2000-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -36,12 +36,8 @@ # Unles you have a gdbserver that can handle multiple sessions. # # set_board_info noargs 1 -# At present there is no provision in the remote protocol -# for passing arguments. This test framework does not -# address the issue, so it's best to set this variable -# in your baseboard configuration file. -# FIXME: there's no reason why the test harness couldn't -# pass commandline args when it spawns gdbserver. +# Set this if the board does not support passing arguments to the +# inferior process. # # set_board_info gdb,noinferiorio 1 # Neither the traditional gdbserver nor the one in libremote @@ -77,8 +73,8 @@ return [gdbserver_spawn ""] } -proc gdb_reload { } { - return [gdbserver_run ""] +proc gdb_reload { {inferior_args {}} } { + return [gdbserver_run $inferior_args] } proc gdb_reconnect { } { diff -Nru gdb-9.1/gdb/testsuite/config/i960.exp gdb-10.2/gdb/testsuite/config/i960.exp --- gdb-9.1/gdb/testsuite/config/i960.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/config/i960.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1997-2020 Free Software Foundation, Inc. +# Copyright 1997-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/config/m32r.exp gdb-10.2/gdb/testsuite/config/m32r.exp --- gdb-9.1/gdb/testsuite/config/m32r.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/config/m32r.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1997-2020 Free Software Foundation, Inc. +# Copyright 1997-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/config/mips.exp gdb-10.2/gdb/testsuite/config/mips.exp --- gdb-9.1/gdb/testsuite/config/mips.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/config/mips.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 1993-2020 Free Software Foundation, Inc. +# Copyright (C) 1993-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/config/mips-idt.exp gdb-10.2/gdb/testsuite/config/mips-idt.exp --- gdb-9.1/gdb/testsuite/config/mips-idt.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/config/mips-idt.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 1993-2020 Free Software Foundation, Inc. +# Copyright (C) 1993-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/config/mn10300-eval.exp gdb-10.2/gdb/testsuite/config/mn10300-eval.exp --- gdb-9.1/gdb/testsuite/config/mn10300-eval.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/config/mn10300-eval.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1998-2020 Free Software Foundation, Inc. +# Copyright 1998-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/config/monitor.exp gdb-10.2/gdb/testsuite/config/monitor.exp --- gdb-9.1/gdb/testsuite/config/monitor.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/config/monitor.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ # Test Framework Driver for GDB driving a ROM monitor (via monitor.c). -# Copyright 1995-2020 Free Software Foundation, Inc. +# Copyright 1995-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/config/proelf.exp gdb-10.2/gdb/testsuite/config/proelf.exp --- gdb-9.1/gdb/testsuite/config/proelf.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/config/proelf.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1997-2020 Free Software Foundation, Inc. +# Copyright 1997-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/config/rom68k.exp gdb-10.2/gdb/testsuite/config/rom68k.exp --- gdb-9.1/gdb/testsuite/config/rom68k.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/config/rom68k.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1997-2020 Free Software Foundation, Inc. +# Copyright 1997-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/config/sh.exp gdb-10.2/gdb/testsuite/config/sh.exp --- gdb-9.1/gdb/testsuite/config/sh.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/config/sh.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1997-2020 Free Software Foundation, Inc. +# Copyright 1997-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/config/sid.exp gdb-10.2/gdb/testsuite/config/sid.exp --- gdb-9.1/gdb/testsuite/config/sid.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/config/sid.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ # Test Framework Driver for GDB driving an external simulator -# Copyright 1999-2020 Free Software Foundation, Inc. +# Copyright 1999-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,8 +15,6 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. proc sid_start {} { - global verbose - set port [lindex [split [target_info netport] ":"] 1] # Set a default endianness diff -Nru gdb-9.1/gdb/testsuite/config/sim.exp gdb-10.2/gdb/testsuite/config/sim.exp --- gdb-9.1/gdb/testsuite/config/sim.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/config/sim.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ # Test Framework Driver for GDB driving a builtin simulator -# Copyright 1994-2020 Free Software Foundation, Inc. +# Copyright 1994-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/config/slite.exp gdb-10.2/gdb/testsuite/config/slite.exp --- gdb-9.1/gdb/testsuite/config/slite.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/config/slite.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1993-2020 Free Software Foundation, Inc. +# Copyright 1993-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/config/unix.exp gdb-10.2/gdb/testsuite/config/unix.exp --- gdb-9.1/gdb/testsuite/config/unix.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/config/unix.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 1988-2020 Free Software Foundation, Inc. +# Copyright (C) 1988-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/config/vr4300.exp gdb-10.2/gdb/testsuite/config/vr4300.exp --- gdb-9.1/gdb/testsuite/config/vr4300.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/config/vr4300.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1997-2020 Free Software Foundation, Inc. +# Copyright 1997-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/config/vr5000.exp gdb-10.2/gdb/testsuite/config/vr5000.exp --- gdb-9.1/gdb/testsuite/config/vr5000.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/config/vr5000.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1997-2020 Free Software Foundation, Inc. +# Copyright 1997-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/configure gdb-10.2/gdb/testsuite/configure --- gdb-9.1/gdb/testsuite/configure 2018-06-26 21:37:28.000000000 +0000 +++ gdb-10.2/gdb/testsuite/configure 2021-04-25 04:06:26.000000000 +0000 @@ -638,6 +638,7 @@ CFLAGS CC RPATH_ENVVAR +enable_libctf subdirs target_noncanonical target_os @@ -694,6 +695,7 @@ ac_user_opts=' enable_option_checking enable_gdbtk +enable_libctf enable_shared ' ac_precious_vars='build_alias @@ -1323,6 +1325,7 @@ --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-gtk enable gdbtk graphical user interface (GUI) + --enable-libctf Handle .ctf type-info sections [default=yes] --enable-shared build shared libraries deault=yes Some influential environment variables: @@ -2189,6 +2192,21 @@ fi + # Check whether --enable-libctf was given. +if test "${enable_libctf+set}" = set; then : + enableval=$enable_libctf; + case "$enableval" in + yes|no) ;; + *) as_fn_error $? "Argument to enable/disable libctf must be yes or no" "$LINENO" 5 ;; + esac + +else + enable_libctf=yes +fi + + + + # Enable shared libraries. # Check whether --enable-shared was given. if test "${enable_shared+set}" = set; then : diff -Nru gdb-9.1/gdb/testsuite/configure.ac gdb-10.2/gdb/testsuite/configure.ac --- gdb-9.1/gdb/testsuite/configure.ac 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/configure.ac 2021-04-25 04:06:26.000000000 +0000 @@ -1,7 +1,7 @@ # -*- Autoconf -*- # Process this file with autoconf to produce a configure script. -# Copyright 2002-2020 Free Software Foundation, Inc. +# Copyright 2002-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -43,6 +43,9 @@ AC_CONFIG_SUBDIRS(gdb.gdbtk) fi +GCC_ENABLE([libctf], [yes], [], [Handle .ctf type-info sections]) +AC_SUBST(enable_libctf) + # Enable shared libraries. AC_ARG_ENABLE(shared, [ --enable-shared build shared libraries [deault=yes]],, diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/access_tagged_param/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/access_tagged_param/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/access_tagged_param/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/access_tagged_param/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2017-2020 Free Software Foundation, Inc. +-- Copyright 2017-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/access_tagged_param/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/access_tagged_param/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/access_tagged_param/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/access_tagged_param/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2017-2020 Free Software Foundation, Inc. +-- Copyright 2017-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/access_tagged_param/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/access_tagged_param/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/access_tagged_param/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/access_tagged_param/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2017-2020 Free Software Foundation, Inc. +-- Copyright 2017-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/access_tagged_param.exp gdb-10.2/gdb/testsuite/gdb.ada/access_tagged_param.exp --- gdb-9.1/gdb/testsuite/gdb.ada/access_tagged_param.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/access_tagged_param.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2017-2020 Free Software Foundation, Inc. +# Copyright 2017-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -18,6 +18,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/access_to_packed_array/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/access_to_packed_array/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/access_to_packed_array/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/access_to_packed_array/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2015-2020 Free Software Foundation, Inc. +-- Copyright 2015-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/access_to_packed_array/pack.adb gdb-10.2/gdb/testsuite/gdb.ada/access_to_packed_array/pack.adb --- gdb-9.1/gdb/testsuite/gdb.ada/access_to_packed_array/pack.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/access_to_packed_array/pack.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2015-2020 Free Software Foundation, Inc. +-- Copyright 2015-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/access_to_packed_array/pack.ads gdb-10.2/gdb/testsuite/gdb.ada/access_to_packed_array/pack.ads --- gdb-9.1/gdb/testsuite/gdb.ada/access_to_packed_array/pack.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/access_to_packed_array/pack.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2015-2020 Free Software Foundation, Inc. +-- Copyright 2015-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/access_to_packed_array.exp gdb-10.2/gdb/testsuite/gdb.ada/access_to_packed_array.exp --- gdb-9.1/gdb/testsuite/gdb.ada/access_to_packed_array.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/access_to_packed_array.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug]] != "" } { @@ -23,6 +25,16 @@ clean_restart ${testfile} +# Test that printing symbols does not cause segv. +gdb_test_no_output "maint expand-symtabs" +set file [standard_output_file gdb.txt] +gdb_test_no_output "set logging file $file" "set logging file" +gdb_test_no_output "set logging redirect on" +gdb_test "set logging on" +gdb_test_no_output "maint print symbols" +gdb_test "set logging off" +file delete $file + set bp_location [gdb_get_line_number "BREAK" ${testdir}/foo.adb] runto "foo.adb:$bp_location" diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/access_to_unbounded_array/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/access_to_unbounded_array/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/access_to_unbounded_array/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/access_to_unbounded_array/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2018-2020 Free Software Foundation, Inc. +-- Copyright 2018-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/access_to_unbounded_array/pack.adb gdb-10.2/gdb/testsuite/gdb.ada/access_to_unbounded_array/pack.adb --- gdb-9.1/gdb/testsuite/gdb.ada/access_to_unbounded_array/pack.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/access_to_unbounded_array/pack.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2018-2020 Free Software Foundation, Inc. +-- Copyright 2018-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/access_to_unbounded_array/pack.ads gdb-10.2/gdb/testsuite/gdb.ada/access_to_unbounded_array/pack.ads --- gdb-9.1/gdb/testsuite/gdb.ada/access_to_unbounded_array/pack.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/access_to_unbounded_array/pack.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2018-2020 Free Software Foundation, Inc. +-- Copyright 2018-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/access_to_unbounded_array.exp gdb-10.2/gdb/testsuite/gdb.ada/access_to_unbounded_array.exp --- gdb-9.1/gdb/testsuite/gdb.ada/access_to_unbounded_array.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/access_to_unbounded_array.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2018-2020 Free Software Foundation, Inc. +# Copyright 2018-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/addr_arith/foo_na07_019.adb gdb-10.2/gdb/testsuite/gdb.ada/addr_arith/foo_na07_019.adb --- gdb-9.1/gdb/testsuite/gdb.ada/addr_arith/foo_na07_019.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/addr_arith/foo_na07_019.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2014-2020 Free Software Foundation, Inc. +-- Copyright 2014-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/addr_arith/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/addr_arith/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/addr_arith/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/addr_arith/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2014-2020 Free Software Foundation, Inc. +-- Copyright 2014-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/addr_arith/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/addr_arith/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/addr_arith/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/addr_arith/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2014-2020 Free Software Foundation, Inc. +-- Copyright 2014-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/addr_arith.exp gdb-10.2/gdb/testsuite/gdb.ada/addr_arith.exp --- gdb-9.1/gdb/testsuite/gdb.ada/addr_arith.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/addr_arith.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo_na07_019 if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/aliased_array/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/aliased_array/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/aliased_array/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/aliased_array/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2012-2020 Free Software Foundation, Inc. +-- Copyright 2012-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/aliased_array/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/aliased_array/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/aliased_array/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/aliased_array/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2012-2020 Free Software Foundation, Inc. +-- Copyright 2012-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/aliased_array/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/aliased_array/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/aliased_array/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/aliased_array/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2012-2020 Free Software Foundation, Inc. +-- Copyright 2012-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/aliased_array.exp gdb-10.2/gdb/testsuite/gdb.ada/aliased_array.exp --- gdb-9.1/gdb/testsuite/gdb.ada/aliased_array.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/aliased_array.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/arr_acc_idx_w_gap/enum_with_gap.adb gdb-10.2/gdb/testsuite/gdb.ada/arr_acc_idx_w_gap/enum_with_gap.adb --- gdb-9.1/gdb/testsuite/gdb.ada/arr_acc_idx_w_gap/enum_with_gap.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/arr_acc_idx_w_gap/enum_with_gap.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2018-2020 Free Software Foundation, Inc. +-- Copyright 2018-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/arr_acc_idx_w_gap/enum_with_gap.ads gdb-10.2/gdb/testsuite/gdb.ada/arr_acc_idx_w_gap/enum_with_gap.ads --- gdb-9.1/gdb/testsuite/gdb.ada/arr_acc_idx_w_gap/enum_with_gap.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/arr_acc_idx_w_gap/enum_with_gap.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2018-2020 Free Software Foundation, Inc. +-- Copyright 2018-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by @@ -34,14 +34,16 @@ ); for Enum_With_Gaps'size use 16; + type Enum_Subrange is new Enum_With_Gaps range Lit1 .. Lit3; + type MyWord is range 0 .. 16#FFFF# ; for MyWord'Size use 16; type AR is array (Enum_With_Gaps range <>) of MyWord; type AR_Access is access AR; - + type String_Access is access String; - + procedure Do_Nothing (E : AR_Access); procedure Do_Nothing (E : String_Access); diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/arr_acc_idx_w_gap/enum_with_gap_main.adb gdb-10.2/gdb/testsuite/gdb.ada/arr_acc_idx_w_gap/enum_with_gap_main.adb --- gdb-9.1/gdb/testsuite/gdb.ada/arr_acc_idx_w_gap/enum_with_gap_main.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/arr_acc_idx_w_gap/enum_with_gap_main.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2018-2020 Free Software Foundation, Inc. +-- Copyright 2018-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by @@ -19,6 +19,7 @@ Indexed_By_Enum : AR_Access := new AR'(LIT1 => 1, LIT2 => 43, LIT3 => 42, LIT4 => 41); S : String_Access := new String'("Hello!"); + V : Enum_Subrange := LIT3; begin Do_Nothing (Indexed_By_Enum); -- BREAK Do_Nothing (S); diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/arr_acc_idx_w_gap.exp gdb-10.2/gdb/testsuite/gdb.ada/arr_acc_idx_w_gap.exp --- gdb-9.1/gdb/testsuite/gdb.ada/arr_acc_idx_w_gap.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/arr_acc_idx_w_gap.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2018-2020 Free Software Foundation, Inc. +# Copyright 2018-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile enum_with_gap_main if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } { @@ -53,3 +55,10 @@ " = \\(lit2 => 43, 42, 41\\)" gdb_test "print s(2..4)" \ " = \"ell\"" + +gdb_test "print v" " = lit3" +gdb_test "print enum_subrange'pos(v)" " = 3" +gdb_test "print enum_subrange'val(3)" " = lit3" + +gdb_test "print indexed_by_enum(lit2)" "43" +gdb_test "print s(2)" "101 'e'" diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/arr_arr/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/arr_arr/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/arr_arr/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/arr_arr/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2014-2020 Free Software Foundation, Inc. +-- Copyright 2014-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/arr_arr/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/arr_arr/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/arr_arr/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/arr_arr/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2014-2020 Free Software Foundation, Inc. +-- Copyright 2014-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/arr_arr/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/arr_arr/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/arr_arr/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/arr_arr/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2014-2020 Free Software Foundation, Inc. +-- Copyright 2014-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/arr_arr.exp gdb-10.2/gdb/testsuite/gdb.ada/arr_arr.exp --- gdb-9.1/gdb/testsuite/gdb.ada/arr_arr.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/arr_arr.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/array_bounds/bar.adb gdb-10.2/gdb/testsuite/gdb.ada/array_bounds/bar.adb --- gdb-9.1/gdb/testsuite/gdb.ada/array_bounds/bar.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/array_bounds/bar.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2008-2020 Free Software Foundation, Inc. +-- Copyright 2008-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/array_bounds.exp gdb-10.2/gdb/testsuite/gdb.ada/array_bounds.exp --- gdb-9.1/gdb/testsuite/gdb.ada/array_bounds.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/array_bounds.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile bar if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/array_char_idx/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/array_char_idx/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/array_char_idx/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/array_char_idx/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2012-2020 Free Software Foundation, Inc. +-- Copyright 2012-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/array_char_idx/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/array_char_idx/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/array_char_idx/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/array_char_idx/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2012-2020 Free Software Foundation, Inc. +-- Copyright 2012-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/array_char_idx/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/array_char_idx/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/array_char_idx/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/array_char_idx/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2012-2020 Free Software Foundation, Inc. +-- Copyright 2012-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/array_char_idx.exp gdb-10.2/gdb/testsuite/gdb.ada/array_char_idx.exp --- gdb-9.1/gdb/testsuite/gdb.ada/array_char_idx.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/array_char_idx.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -31,5 +31,7 @@ gdb_test "ptype global_char_table" \ "= array \\(character\\) of natural" -gdb_test "print my_table" "= \\(0 <repeats 256 times>\\)" \ +# Some more recent versions of gcc can statically initialize this +# array, so we allow either 0 or 4874. +gdb_test "print my_table" "= \\((0|4874) <repeats 256 times>\\)" \ "Display my_table" diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/arraydim/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/arraydim/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/arraydim/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/arraydim/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2013-2020 Free Software Foundation, Inc. +-- Copyright 2013-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/arraydim/inc.c gdb-10.2/gdb/testsuite/gdb.ada/arraydim/inc.c --- gdb-9.1/gdb/testsuite/gdb.ada/arraydim/inc.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/arraydim/inc.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2013-2020 Free Software Foundation, Inc. +/* Copyright 2013-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/arraydim/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/arraydim/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/arraydim/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/arraydim/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2013-2020 Free Software Foundation, Inc. +-- Copyright 2013-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/arraydim/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/arraydim/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/arraydim/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/arraydim/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2013-2020 Free Software Foundation, Inc. +-- Copyright 2013-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/arraydim.exp gdb-10.2/gdb/testsuite/gdb.ada/arraydim.exp --- gdb-9.1/gdb/testsuite/gdb.ada/arraydim.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/arraydim.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo set cfile "inc" diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/arrayidx/p.adb gdb-10.2/gdb/testsuite/gdb.ada/arrayidx/p.adb --- gdb-9.1/gdb/testsuite/gdb.ada/arrayidx/p.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/arrayidx/p.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2005-2020 Free Software Foundation, Inc. +-- Copyright 2005-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/arrayidx.exp gdb-10.2/gdb/testsuite/gdb.ada/arrayidx.exp --- gdb-9.1/gdb/testsuite/gdb.ada/arrayidx.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/arrayidx.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2005-2020 Free Software Foundation, Inc. +# Copyright 2005-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/array_of_variable_length/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/array_of_variable_length/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/array_of_variable_length/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/array_of_variable_length/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2015-2020 Free Software Foundation, Inc. +-- Copyright 2015-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/array_of_variable_length/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/array_of_variable_length/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/array_of_variable_length/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/array_of_variable_length/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2015-2020 Free Software Foundation, Inc. +-- Copyright 2015-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/array_of_variable_length/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/array_of_variable_length/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/array_of_variable_length/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/array_of_variable_length/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2015-2020 Free Software Foundation, Inc. +-- Copyright 2015-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/array_of_variable_length.exp gdb-10.2/gdb/testsuite/gdb.ada/array_of_variable_length.exp --- gdb-9.1/gdb/testsuite/gdb.ada/array_of_variable_length.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/array_of_variable_length.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/arrayparam/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/arrayparam/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/arrayparam/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/arrayparam/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2008-2020 Free Software Foundation, Inc. +-- Copyright 2008-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/arrayparam/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/arrayparam/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/arrayparam/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/arrayparam/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2008-2020 Free Software Foundation, Inc. +-- Copyright 2008-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/arrayparam/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/arrayparam/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/arrayparam/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/arrayparam/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2008-2020 Free Software Foundation, Inc. +-- Copyright 2008-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/arrayparam.exp gdb-10.2/gdb/testsuite/gdb.ada/arrayparam.exp --- gdb-9.1/gdb/testsuite/gdb.ada/arrayparam.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/arrayparam.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug]] != "" } { @@ -29,7 +31,7 @@ # Verify that a call to a function that takes an array as a parameter # works without problem. -gdb_test "print call_me (\"bonjour\")" \ +gdb_test "print call_me(\"bonjour\")" \ "= void" # Verify that the array was passed properly by checking the global diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/arrayptr/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/arrayptr/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/arrayptr/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/arrayptr/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2008-2020 Free Software Foundation, Inc. +-- Copyright 2008-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/arrayptr/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/arrayptr/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/arrayptr/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/arrayptr/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2008-2020 Free Software Foundation, Inc. +-- Copyright 2008-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/arrayptr/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/arrayptr/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/arrayptr/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/arrayptr/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2008-2020 Free Software Foundation, Inc. +-- Copyright 2008-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/arrayptr.exp gdb-10.2/gdb/testsuite/gdb.ada/arrayptr.exp --- gdb-9.1/gdb/testsuite/gdb.ada/arrayptr.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/arrayptr.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } { @@ -32,15 +34,15 @@ gdb_test "print string_p" \ "= \\(foo\\.string_access\\) 0x\[0-9a-zA-Z\]+" -gdb_test "print string_p (3..4)" "= \"ll\"" +gdb_test "print string_p(3..4)" "= \"ll\"" gdb_test "print null_string" "= \\(foo\\.string_access\\) 0x0" gdb_test "print arr_ptr" "= \\(access foo\\.little_array\\) 0x\[0-9a-zA-Z\]+" -gdb_test "print arr_ptr (2)" "= 22" +gdb_test "print arr_ptr(2)" "= 22" -gdb_test "print arr_ptr (3..4)" "= \\(3 => 23, 24\\)" +gdb_test "print arr_ptr(3..4)" "= \\(3 => 23, 24\\)" gdb_test "ptype string_access" "= access array \\(<>\\) of character" diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/array_ptr_renaming/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/array_ptr_renaming/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/array_ptr_renaming/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/array_ptr_renaming/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2015-2020 Free Software Foundation, Inc. +-- Copyright 2015-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/array_ptr_renaming/pack.ads gdb-10.2/gdb/testsuite/gdb.ada/array_ptr_renaming/pack.ads --- gdb-9.1/gdb/testsuite/gdb.ada/array_ptr_renaming/pack.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/array_ptr_renaming/pack.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2015-2020 Free Software Foundation, Inc. +-- Copyright 2015-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/array_ptr_renaming.exp gdb-10.2/gdb/testsuite/gdb.ada/array_ptr_renaming.exp --- gdb-9.1/gdb/testsuite/gdb.ada/array_ptr_renaming.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/array_ptr_renaming.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug]] != "" } { @@ -33,7 +35,7 @@ # representation with GNAT (fat pointers). In this case, GDB "forgets" that # it's dealing with an access and prints directly the array contents. This # should be fixed some day. -setup_kfail "gdb/NNNN" *-*-* +setup_kfail "gdb/25883" *-*-* gdb_test "print ntp" " = \\(access pack\\.table_type\\) $hex.*" gdb_test "print ntp.all" " = \\(3 => 30, 40\\)" gdb_test "print ntp(3)" " = 30" diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/array_return/p.adb gdb-10.2/gdb/testsuite/gdb.ada/array_return/p.adb --- gdb-9.1/gdb/testsuite/gdb.ada/array_return/p.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/array_return/p.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2006-2020 Free Software Foundation, Inc. +-- Copyright 2006-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/array_return/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/array_return/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/array_return/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/array_return/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2006-2020 Free Software Foundation, Inc. +-- Copyright 2006-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/array_return/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/array_return/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/array_return/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/array_return/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2006-2020 Free Software Foundation, Inc. +-- Copyright 2006-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/array_return.exp gdb-10.2/gdb/testsuite/gdb.ada/array_return.exp --- gdb-9.1/gdb/testsuite/gdb.ada/array_return.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/array_return.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2005-2020 Free Software Foundation, Inc. +# Copyright 2005-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/array_subscript_addr/p.adb gdb-10.2/gdb/testsuite/gdb.ada/array_subscript_addr/p.adb --- gdb-9.1/gdb/testsuite/gdb.ada/array_subscript_addr/p.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/array_subscript_addr/p.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2008-2020 Free Software Foundation, Inc. +-- Copyright 2008-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/array_subscript_addr.exp gdb-10.2/gdb/testsuite/gdb.ada/array_subscript_addr.exp --- gdb-9.1/gdb/testsuite/gdb.ada/array_subscript_addr.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/array_subscript_addr.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile p if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/arr_enum_idx_w_gap/foo_q418_043.adb gdb-10.2/gdb/testsuite/gdb.ada/arr_enum_idx_w_gap/foo_q418_043.adb --- gdb-9.1/gdb/testsuite/gdb.ada/arr_enum_idx_w_gap/foo_q418_043.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/arr_enum_idx_w_gap/foo_q418_043.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2018-2020 Free Software Foundation, Inc. +-- Copyright 2018-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/arr_enum_idx_w_gap.exp gdb-10.2/gdb/testsuite/gdb.ada/arr_enum_idx_w_gap.exp --- gdb-9.1/gdb/testsuite/gdb.ada/arr_enum_idx_w_gap.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/arr_enum_idx_w_gap.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2018-2020 Free Software Foundation, Inc. +# Copyright 2018-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo_q418_043 if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/assign_1.exp gdb-10.2/gdb/testsuite/gdb.ada/assign_1.exp --- gdb-9.1/gdb/testsuite/gdb.ada/assign_1.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/assign_1.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + gdb_exit gdb_start gdb_reinitialize_dir $srcdir/$subdir diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/assign_arr/main_p324_051.adb gdb-10.2/gdb/testsuite/gdb.ada/assign_arr/main_p324_051.adb --- gdb-9.1/gdb/testsuite/gdb.ada/assign_arr/main_p324_051.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/assign_arr/main_p324_051.adb 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2016-2020 Free Software Foundation, Inc. +-- Copyright 2016-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/assign_arr/target_wrapper.ads gdb-10.2/gdb/testsuite/gdb.ada/assign_arr/target_wrapper.ads --- gdb-9.1/gdb/testsuite/gdb.ada/assign_arr/target_wrapper.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/assign_arr/target_wrapper.ads 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2016-2020 Free Software Foundation, Inc. +-- Copyright 2016-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/assign_arr.exp gdb-10.2/gdb/testsuite/gdb.ada/assign_arr.exp --- gdb-9.1/gdb/testsuite/gdb.ada/assign_arr.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/assign_arr.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2016-2020 Free Software Foundation, Inc. +# Copyright 2016-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile main_p324_051 if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug]] != "" } { @@ -26,5 +28,5 @@ set bp_location [gdb_get_line_number "STOP" ${testdir}/main_p324_051.adb] runto "main_p324_051.adb:$bp_location" -gdb_test "print assign_arr_input.u2 := (0.25,0.5,0.75)" \ +gdb_test "print assign_arr_input.u2 :=(0.25,0.5,0.75)" \ " = \\(0\\.25, 0\\.5, 0\\.75\\)" diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/atomic_enum/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/atomic_enum/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/atomic_enum/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/atomic_enum/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2008-2020 Free Software Foundation, Inc. +-- Copyright 2008-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/atomic_enum/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/atomic_enum/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/atomic_enum/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/atomic_enum/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2008-2020 Free Software Foundation, Inc. +-- Copyright 2008-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/atomic_enum/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/atomic_enum/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/atomic_enum/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/atomic_enum/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2008-2020 Free Software Foundation, Inc. +-- Copyright 2008-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/atomic_enum.exp gdb-10.2/gdb/testsuite/gdb.ada/atomic_enum.exp --- gdb-9.1/gdb/testsuite/gdb.ada/atomic_enum.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/atomic_enum.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug additional_flags=-gnat05 ]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/attr_ref_and_charlit/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/attr_ref_and_charlit/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/attr_ref_and_charlit/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/attr_ref_and_charlit/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2015-2020 Free Software Foundation, Inc. +-- Copyright 2015-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/attr_ref_and_charlit.exp gdb-10.2/gdb/testsuite/gdb.ada/attr_ref_and_charlit.exp --- gdb-9.1/gdb/testsuite/gdb.ada/attr_ref_and_charlit.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/attr_ref_and_charlit.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile "foo" if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug]] != "" } { @@ -29,14 +31,19 @@ # work as expected. They used to yield syntax error. runto "foo.adb:$bp_location" -gdb_test "print s'first" " = 2" -gdb_test "print s'last" " = 3" -gdb_test "print s(s'first) = 'a'" " = true" -gdb_test "print s(s'last) /= 'b'" " = false" +with_test_prefix "run" { + gdb_test "print s'first" " = 2" + gdb_test "print s'last" " = 3" + gdb_test "print s(s'first) = 'a'" " = true" + gdb_test "print s(s'last) /= 'b'" " = false" +} gdb_test "continue" \ - ".*Breakpoint \[0-9\]+, foo\\.p \\(s=.*\\) at .*foo.adb:\[0-9\]+.*" \ -gdb_test "print s'first" " = 4" -gdb_test "print s'last" " = 5" -gdb_test "print s(s'first) = 'c'" " = true" -gdb_test "print s(s'last) /= 'd'" " = false" + ".*Breakpoint \[0-9\]+, foo\\.p \\(s=.*\\) at .*foo.adb:\[0-9\]+.*" + +with_test_prefix "cont" { + gdb_test "print s'first" " = 4" + gdb_test "print s'last" " = 5" + gdb_test "print s(s'first) = 'c'" " = true" + gdb_test "print s(s'last) /= 'd'" " = false" +} diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/bad-task-bp-keyword/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/bad-task-bp-keyword/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/bad-task-bp-keyword/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/bad-task-bp-keyword/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2009-2020 Free Software Foundation, Inc. +-- Copyright 2009-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/bad-task-bp-keyword.exp gdb-10.2/gdb/testsuite/gdb.ada/bad-task-bp-keyword.exp --- gdb-9.1/gdb/testsuite/gdb.ada/bad-task-bp-keyword.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/bad-task-bp-keyword.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/bias/bias.adb gdb-10.2/gdb/testsuite/gdb.ada/bias/bias.adb --- gdb-9.1/gdb/testsuite/gdb.ada/bias/bias.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/bias/bias.adb 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2019-2020 Free Software Foundation, Inc. +-- Copyright 2019-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/bias/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/bias/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/bias/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/bias/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2012-2020 Free Software Foundation, Inc. +-- Copyright 2012-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/bias/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/bias/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/bias/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/bias/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2012-2020 Free Software Foundation, Inc. +-- Copyright 2012-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/bias.exp gdb-10.2/gdb/testsuite/gdb.ada/bias.exp --- gdb-9.1/gdb/testsuite/gdb.ada/bias.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/bias.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile bias if {[gdb_compile_ada "${srcfile}" "${binfile}" executable \ diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/big_packed_array/foo_ra24_010.adb gdb-10.2/gdb/testsuite/gdb.ada/big_packed_array/foo_ra24_010.adb --- gdb-9.1/gdb/testsuite/gdb.ada/big_packed_array/foo_ra24_010.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/big_packed_array/foo_ra24_010.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2019-2020 Free Software Foundation, Inc. +-- Copyright 2019-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/big_packed_array/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/big_packed_array/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/big_packed_array/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/big_packed_array/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2019-2020 Free Software Foundation, Inc. +-- Copyright 2019-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/big_packed_array/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/big_packed_array/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/big_packed_array/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/big_packed_array/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2019-2020 Free Software Foundation, Inc. +-- Copyright 2019-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/big_packed_array.exp gdb-10.2/gdb/testsuite/gdb.ada/big_packed_array.exp --- gdb-9.1/gdb/testsuite/gdb.ada/big_packed_array.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/big_packed_array.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/boolean_expr.exp gdb-10.2/gdb/testsuite/gdb.ada/boolean_expr.exp --- gdb-9.1/gdb/testsuite/gdb.ada/boolean_expr.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/boolean_expr.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2007-2020 Free Software Foundation, Inc. +# Copyright 2007-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + gdb_exit gdb_start gdb_reinitialize_dir $srcdir/$subdir diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/bp_c_mixed_case/bar.c gdb-10.2/gdb/testsuite/gdb.ada/bp_c_mixed_case/bar.c --- gdb-9.1/gdb/testsuite/gdb.ada/bp_c_mixed_case/bar.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/bp_c_mixed_case/bar.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2018-2020 Free Software Foundation, Inc. +/* Copyright 2018-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/bp_c_mixed_case/foo_h731_021.adb gdb-10.2/gdb/testsuite/gdb.ada/bp_c_mixed_case/foo_h731_021.adb --- gdb-9.1/gdb/testsuite/gdb.ada/bp_c_mixed_case/foo_h731_021.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/bp_c_mixed_case/foo_h731_021.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2018-2020 Free Software Foundation, Inc. +-- Copyright 2018-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/bp_c_mixed_case/qux.c gdb-10.2/gdb/testsuite/gdb.ada/bp_c_mixed_case/qux.c --- gdb-9.1/gdb/testsuite/gdb.ada/bp_c_mixed_case/qux.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/bp_c_mixed_case/qux.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2018-2020 Free Software Foundation, Inc. +/* Copyright 2018-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/bp_c_mixed_case.exp gdb-10.2/gdb/testsuite/gdb.ada/bp_c_mixed_case.exp --- gdb-9.1/gdb/testsuite/gdb.ada/bp_c_mixed_case.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/bp_c_mixed_case.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2018-2020 Free Software Foundation, Inc. +# Copyright 2018-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -20,6 +20,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo_h731_021 set cfile "bar" diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/bp_enum_homonym/p.adb gdb-10.2/gdb/testsuite/gdb.ada/bp_enum_homonym/p.adb --- gdb-9.1/gdb/testsuite/gdb.ada/bp_enum_homonym/p.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/bp_enum_homonym/p.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2012-2020 Free Software Foundation, Inc. +-- Copyright 2012-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/bp_enum_homonym/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/bp_enum_homonym/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/bp_enum_homonym/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/bp_enum_homonym/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2012-2020 Free Software Foundation, Inc. +-- Copyright 2012-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/bp_enum_homonym/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/bp_enum_homonym/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/bp_enum_homonym/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/bp_enum_homonym/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2012-2020 Free Software Foundation, Inc. +-- Copyright 2012-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/bp_enum_homonym.exp gdb-10.2/gdb/testsuite/gdb.ada/bp_enum_homonym.exp --- gdb-9.1/gdb/testsuite/gdb.ada/bp_enum_homonym.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/bp_enum_homonym.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile p if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/bp_fun_addr/bp_fun_addr.adb gdb-10.2/gdb/testsuite/gdb.ada/bp_fun_addr/bp_fun_addr.adb --- gdb-9.1/gdb/testsuite/gdb.ada/bp_fun_addr/bp_fun_addr.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/bp_fun_addr/bp_fun_addr.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2016-2020 Free Software Foundation, Inc. +-- Copyright 2016-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/bp_fun_addr.exp gdb-10.2/gdb/testsuite/gdb.ada/bp_fun_addr.exp --- gdb-9.1/gdb/testsuite/gdb.ada/bp_fun_addr.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/bp_fun_addr.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2016-2020 Free Software Foundation, Inc. +# Copyright 2016-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/bp_inlined_func/b.adb gdb-10.2/gdb/testsuite/gdb.ada/bp_inlined_func/b.adb --- gdb-9.1/gdb/testsuite/gdb.ada/bp_inlined_func/b.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/bp_inlined_func/b.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2017-2020 Free Software Foundation, Inc. +-- Copyright 2017-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/bp_inlined_func/b.ads gdb-10.2/gdb/testsuite/gdb.ada/bp_inlined_func/b.ads --- gdb-9.1/gdb/testsuite/gdb.ada/bp_inlined_func/b.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/bp_inlined_func/b.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2017-2020 Free Software Foundation, Inc. +-- Copyright 2017-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/bp_inlined_func/c.adb gdb-10.2/gdb/testsuite/gdb.ada/bp_inlined_func/c.adb --- gdb-9.1/gdb/testsuite/gdb.ada/bp_inlined_func/c.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/bp_inlined_func/c.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2017-2020 Free Software Foundation, Inc. +-- Copyright 2017-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/bp_inlined_func/c.ads gdb-10.2/gdb/testsuite/gdb.ada/bp_inlined_func/c.ads --- gdb-9.1/gdb/testsuite/gdb.ada/bp_inlined_func/c.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/bp_inlined_func/c.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2017-2020 Free Software Foundation, Inc. +-- Copyright 2017-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/bp_inlined_func/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/bp_inlined_func/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/bp_inlined_func/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/bp_inlined_func/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2017-2020 Free Software Foundation, Inc. +-- Copyright 2017-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/bp_inlined_func.exp gdb-10.2/gdb/testsuite/gdb.ada/bp_inlined_func.exp --- gdb-9.1/gdb/testsuite/gdb.ada/bp_inlined_func.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/bp_inlined_func.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2017-2020 Free Software Foundation, Inc. +# Copyright 2017-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/bp_on_var/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/bp_on_var/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/bp_on_var/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/bp_on_var/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2012-2020 Free Software Foundation, Inc. +-- Copyright 2012-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/bp_on_var/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/bp_on_var/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/bp_on_var/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/bp_on_var/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2012-2020 Free Software Foundation, Inc. +-- Copyright 2012-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/bp_on_var/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/bp_on_var/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/bp_on_var/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/bp_on_var/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2012-2020 Free Software Foundation, Inc. +-- Copyright 2012-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/bp_on_var.exp gdb-10.2/gdb/testsuite/gdb.ada/bp_on_var.exp --- gdb-9.1/gdb/testsuite/gdb.ada/bp_on_var.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/bp_on_var.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } { @@ -28,7 +30,7 @@ # We are going to insert breakpoints using locations that are invalid. # Set "breakpoint pending" to "off" in order to avoid having to deal # with GDB asking whether to insert a pending breakpoint or not. -gdb_test_no_output "set breakpoint pending off" +gdb_test_no_output "set breakpoint pending off" "disable pending breakpoints" gdb_test "break pck.my_global_variable" \ "Function \"pck\\.my_global_variable\" not defined\\." @@ -38,7 +40,8 @@ clean_restart ${testfile} -gdb_test_no_output "set breakpoint pending off" +gdb_test_no_output "set breakpoint pending off" \ + "disable pending breakpoints after restart" gdb_test "break pck.my_hidden_variable" \ "Function \"pck\\.my_hidden_variable\" not defined\\." diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/bp_range_type/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/bp_range_type/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/bp_range_type/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/bp_range_type/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2012-2020 Free Software Foundation, Inc. +-- Copyright 2012-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/bp_range_type/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/bp_range_type/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/bp_range_type/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/bp_range_type/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2012-2020 Free Software Foundation, Inc. +-- Copyright 2012-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/bp_range_type/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/bp_range_type/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/bp_range_type/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/bp_range_type/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2012-2020 Free Software Foundation, Inc. +-- Copyright 2012-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/bp_range_type.exp gdb-10.2/gdb/testsuite/gdb.ada/bp_range_type.exp --- gdb-9.1/gdb/testsuite/gdb.ada/bp_range_type.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/bp_range_type.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/bp_reset/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/bp_reset/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/bp_reset/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/bp_reset/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2012-2020 Free Software Foundation, Inc. +-- Copyright 2012-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/bp_reset/io.adb gdb-10.2/gdb/testsuite/gdb.ada/bp_reset/io.adb --- gdb-9.1/gdb/testsuite/gdb.ada/bp_reset/io.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/bp_reset/io.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2012-2020 Free Software Foundation, Inc. +-- Copyright 2012-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/bp_reset/io.ads gdb-10.2/gdb/testsuite/gdb.ada/bp_reset/io.ads --- gdb-9.1/gdb/testsuite/gdb.ada/bp_reset/io.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/bp_reset/io.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2012-2020 Free Software Foundation, Inc. +-- Copyright 2012-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/bp_reset/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/bp_reset/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/bp_reset/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/bp_reset/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2012-2020 Free Software Foundation, Inc. +-- Copyright 2012-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/bp_reset/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/bp_reset/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/bp_reset/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/bp_reset/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2012-2020 Free Software Foundation, Inc. +-- Copyright 2012-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/bp_reset.exp gdb-10.2/gdb/testsuite/gdb.ada/bp_reset.exp --- gdb-9.1/gdb/testsuite/gdb.ada/bp_reset.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/bp_reset.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/byte_packed_arr/array_list_g.ads gdb-10.2/gdb/testsuite/gdb.ada/byte_packed_arr/array_list_g.ads --- gdb-9.1/gdb/testsuite/gdb.ada/byte_packed_arr/array_list_g.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/byte_packed_arr/array_list_g.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2015-2020 Free Software Foundation, Inc. +-- Copyright 2015-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/byte_packed_arr/reprod.adb gdb-10.2/gdb/testsuite/gdb.ada/byte_packed_arr/reprod.adb --- gdb-9.1/gdb/testsuite/gdb.ada/byte_packed_arr/reprod.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/byte_packed_arr/reprod.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2015-2020 Free Software Foundation, Inc. +-- Copyright 2015-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/byte_packed_arr/reprod.ads gdb-10.2/gdb/testsuite/gdb.ada/byte_packed_arr/reprod.ads --- gdb-9.1/gdb/testsuite/gdb.ada/byte_packed_arr/reprod.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/byte_packed_arr/reprod.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2015-2020 Free Software Foundation, Inc. +-- Copyright 2015-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/byte_packed_arr/reprod_main.adb gdb-10.2/gdb/testsuite/gdb.ada/byte_packed_arr/reprod_main.adb --- gdb-9.1/gdb/testsuite/gdb.ada/byte_packed_arr/reprod_main.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/byte_packed_arr/reprod_main.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2015-2020 Free Software Foundation, Inc. +-- Copyright 2015-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/byte_packed_arr.exp gdb-10.2/gdb/testsuite/gdb.ada/byte_packed_arr.exp --- gdb-9.1/gdb/testsuite/gdb.ada/byte_packed_arr.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/byte_packed_arr.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/call_pn/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/call_pn/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/call_pn/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/call_pn/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2010-2020 Free Software Foundation, Inc. +-- Copyright 2010-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/call_pn/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/call_pn/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/call_pn/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/call_pn/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2010-2020 Free Software Foundation, Inc. +-- Copyright 2010-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/call_pn/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/call_pn/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/call_pn/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/call_pn/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2010-2020 Free Software Foundation, Inc. +-- Copyright 2010-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/call_pn.exp gdb-10.2/gdb/testsuite/gdb.ada/call_pn.exp --- gdb-9.1/gdb/testsuite/gdb.ada/call_pn.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/call_pn.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } { @@ -29,14 +31,58 @@ return } +# The xfail mentioned below triggers for the "after" print, but may not +# trigger for the "before" print, though it will for -readnow. This is +# related to PR25764 - "LOC_UNRESOLVED symbol missing from partial symtab". +# Stabilize test results by ensuring that the xfail triggers for the "before" +# print. +gdb_test_no_output "maint expand-symtabs" + +# The xfail is for PR gcc/94469, which occurs with target board +# unix/-flto/-O0/-flto-partition=none/-ffat-lto-objects and gcc-8 and later. +# Note: We don't check for the filename in xfail_re because it might be +# wrong, filed as gdb PR25771. +set xfail_re \ + [multi_line \ + "Multiple matches for last_node_id" \ + "\\\[0\\\] cancel" \ + "\\\[1\\\] pck\.last_node_id at .*.adb:17" \ + "\\\[2\\\] pck\.last_node_id at .*.adb:17" \ + "> $"] + # Make sure that last_node_id is set to zero... -gdb_test "print last_node_id" "= 0" "print last_node_id before calling pn" +gdb_test_multiple "print last_node_id" "print last_node_id before calling pn" { + -re $xfail_re { + xfail $gdb_test_name + # One of the choices will print the correct value, the other one + # <optimized out>. Since we don't known which one to choose to get + # the correct value, cancel. + gdb_test_multiple "0" "cancel after xfail 1" { + -re -wrap "cancelled" { + } + } + } + -re -wrap "= 0" { + pass $gdb_test_name + } +} # Now, call procedure Pn, which should set Last_Node_Id to the value # of the parameter used in the function call. Verify that we can print # the returned value correctly, while we're at it. -gdb_test "print pn (4321)" "= 4321" +gdb_test "print pn(4321)" "= 4321" # Make sure that last_node_id now has the correct value... -gdb_test "print last_node_id" "= 4321" "print last_node_id after calling pn" - +gdb_test_multiple "print last_node_id" "print last_node_id after calling pn" { + -re $xfail_re { + xfail $gdb_test_name + # Cancel + gdb_test_multiple "0" "cancel after xfail 2" { + -re -wrap "cancelled" { + } + } + } + -re -wrap "= 4321" { + pass $gdb_test_name + } +} diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/catch_assert_if/bla.adb gdb-10.2/gdb/testsuite/gdb.ada/catch_assert_if/bla.adb --- gdb-9.1/gdb/testsuite/gdb.ada/catch_assert_if/bla.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/catch_assert_if/bla.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2018-2020 Free Software Foundation, Inc. +-- Copyright 2018-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/catch_assert_if/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/catch_assert_if/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/catch_assert_if/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/catch_assert_if/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2018-2020 Free Software Foundation, Inc. +-- Copyright 2018-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/catch_assert_if.exp gdb-10.2/gdb/testsuite/gdb.ada/catch_assert_if.exp --- gdb-9.1/gdb/testsuite/gdb.ada/catch_assert_if.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/catch_assert_if.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2018-2020 Free Software Foundation, Inc. +# Copyright 2018-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile bla if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug additional_flags=-gnata ]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/catch_ex/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/catch_ex/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/catch_ex/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/catch_ex/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2007-2020 Free Software Foundation, Inc. +-- Copyright 2007-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by @@ -17,7 +17,7 @@ begin begin - raise Constraint_Error; -- SPOT1 + raise Constraint_Error with "ignore C_E"; -- SPOT1 exception when others => null; diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/catch_ex.exp gdb-10.2/gdb/testsuite/gdb.ada/catch_ex.exp --- gdb-9.1/gdb/testsuite/gdb.ada/catch_ex.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/catch_ex.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2007-2020 Free Software Foundation, Inc. +# Copyright 2007-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug additional_flags=-gnata ]] != "" } { @@ -62,7 +64,7 @@ "info break, catch all Ada exceptions" set catchpoint_msg \ - "Catchpoint $any_nb, CONSTRAINT_ERROR (\\\(foo\\.adb:$decimal explicit raise\\\) )?at $any_addr in foo \\\(\\\).*at .*foo.adb:$any_nb" + "Catchpoint $any_nb, CONSTRAINT_ERROR (\\\(ignore C_E\\\) )?at $any_addr in foo \\\(\\\).*at .*foo.adb:$any_nb" gdb_test "continue" \ "Continuing\.$eol$catchpoint_msg$eol.*SPOT1" \ "continuing to first exception" @@ -162,9 +164,10 @@ "Continuing\.$eol$temp_catchpoint_msg$eol.*SPOT1" \ "continuing to temporary catchpoint" -gdb_test "continue" \ - "Continuing\..*$inferior_exited_re.*" \ - "continuing to program completion" - +with_test_prefix "temporary catchpoint" { + gdb_test "continue" \ + "Continuing\..*$inferior_exited_re.*" \ + "continuing to program completion" +} diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/catch_ex_std/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/catch_ex_std/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/catch_ex_std/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/catch_ex_std/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2019-2020 Free Software Foundation, Inc. +-- Copyright 2019-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/catch_ex_std/some_package.adb gdb-10.2/gdb/testsuite/gdb.ada/catch_ex_std/some_package.adb --- gdb-9.1/gdb/testsuite/gdb.ada/catch_ex_std/some_package.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/catch_ex_std/some_package.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2019-2020 Free Software Foundation, Inc. +-- Copyright 2019-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/catch_ex_std/some_package.ads gdb-10.2/gdb/testsuite/gdb.ada/catch_ex_std/some_package.ads --- gdb-9.1/gdb/testsuite/gdb.ada/catch_ex_std/some_package.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/catch_ex_std/some_package.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2019-2020 Free Software Foundation, Inc. +-- Copyright 2019-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/catch_ex_std.exp gdb-10.2/gdb/testsuite/gdb.ada/catch_ex_std.exp --- gdb-9.1/gdb/testsuite/gdb.ada/catch_ex_std.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/catch_ex_std.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -19,6 +19,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo set ofile ${binfile}.o @@ -59,6 +61,12 @@ set gnatlink [find_ada_tool gnatlink] with_cwd $outdir { + # Test if gnatbind is supported + set status [remote_exec host "$gnatbind --version"] + if {[lindex $status 0] == -1} { + unsupported "gnatbind foo" + return -1 + } # Bind. set status [remote_exec host "$gnatbind -shared foo"] if {[lindex $status 0] == 0} { @@ -68,6 +76,12 @@ return -1 } + # Test if gnatlink is supported + set status [remote_exec host "$gnatlink --version"] + if {[lindex $status 0] == -1} { + unsupported "gnatlink foo" + return -1 + } # Finally, link. if {[istarget "*-*-mingw*"] || [istarget *-*-cygwin*] diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/char_enum/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/char_enum/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/char_enum/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/char_enum/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2011-2020 Free Software Foundation, Inc. +-- Copyright 2011-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/char_enum/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/char_enum/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/char_enum/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/char_enum/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2011-2020 Free Software Foundation, Inc. +-- Copyright 2011-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/char_enum/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/char_enum/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/char_enum/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/char_enum/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2011-2020 Free Software Foundation, Inc. +-- Copyright 2011-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/char_enum.exp gdb-10.2/gdb/testsuite/gdb.ada/char_enum.exp --- gdb-9.1/gdb/testsuite/gdb.ada/char_enum.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/char_enum.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/char_param/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/char_param/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/char_param/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/char_param/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2007-2020 Free Software Foundation, Inc. +-- Copyright 2007-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/char_param/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/char_param/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/char_param/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/char_param/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2007-2020 Free Software Foundation, Inc. +-- Copyright 2007-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/char_param/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/char_param/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/char_param/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/char_param/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2007-2020 Free Software Foundation, Inc. +-- Copyright 2007-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/char_param.exp gdb-10.2/gdb/testsuite/gdb.ada/char_param.exp --- gdb-9.1/gdb/testsuite/gdb.ada/char_param.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/char_param.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2007-2020 Free Software Foundation, Inc. +# Copyright 2007-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/complete/aux_pck.adb gdb-10.2/gdb/testsuite/gdb.ada/complete/aux_pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/complete/aux_pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/complete/aux_pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2015-2020 Free Software Foundation, Inc. +-- Copyright 2015-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/complete/aux_pck.ads gdb-10.2/gdb/testsuite/gdb.ada/complete/aux_pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/complete/aux_pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/complete/aux_pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2015-2020 Free Software Foundation, Inc. +-- Copyright 2015-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/complete/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/complete/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/complete/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/complete/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2008-2020 Free Software Foundation, Inc. +-- Copyright 2008-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/complete/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/complete/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/complete/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/complete/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2008-2020 Free Software Foundation, Inc. +-- Copyright 2008-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/complete/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/complete/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/complete/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/complete/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2008-2020 Free Software Foundation, Inc. +-- Copyright 2008-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/complete.exp gdb-10.2/gdb/testsuite/gdb.ada/complete.exp --- gdb-9.1/gdb/testsuite/gdb.ada/complete.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/complete.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2005-2020 Free Software Foundation, Inc. +# Copyright 2005-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } { @@ -31,9 +33,13 @@ # A convenience function that verifies that the "complete EXPR" command # returns the EXPECTED_OUTPUT. -proc test_gdb_complete { expr expected_output } { +proc test_gdb_complete { expr expected_output {msg ""} } { + set cmd "complete p $expr" + if {$msg == ""} { + set msg $cmd + } gdb_test "complete p $expr" \ - "$expected_output" + "$expected_output" $msg } # A convenience function that verifies that the "complete EXPR" command @@ -60,7 +66,8 @@ # An incomplete nested package name, were lies a single symbol: test_gdb_complete "pck.inne" \ - "p pck.inner.inside_variable" + "p pck.inner.inside_variable" \ + "complete nested package name" # A fully qualified symbol name, mangled... test_gdb_complete "pck__inner__ins" \ @@ -118,7 +125,8 @@ # A fully qualified package name test_gdb_complete "pck.inne" \ - "p pck.inner.inside_variable" + "p pck.inner.inside_variable" \ + "complete fully qualified package name" # A fully qualified package name, with a dot at the end test_gdb_complete "pck.inner." \ diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/cond_lang/a.adb gdb-10.2/gdb/testsuite/gdb.ada/cond_lang/a.adb --- gdb-9.1/gdb/testsuite/gdb.ada/cond_lang/a.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/cond_lang/a.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2010-2020 Free Software Foundation, Inc. +-- Copyright 2010-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/cond_lang/foo.c gdb-10.2/gdb/testsuite/gdb.ada/cond_lang/foo.c --- gdb-9.1/gdb/testsuite/gdb.ada/cond_lang/foo.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/cond_lang/foo.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2010-2020 Free Software Foundation, Inc. +/* Copyright 2010-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/cond_lang/mixed.adb gdb-10.2/gdb/testsuite/gdb.ada/cond_lang/mixed.adb --- gdb-9.1/gdb/testsuite/gdb.ada/cond_lang/mixed.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/cond_lang/mixed.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2010-2020 Free Software Foundation, Inc. +-- Copyright 2010-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/cond_lang/mixed.ads gdb-10.2/gdb/testsuite/gdb.ada/cond_lang/mixed.ads --- gdb-9.1/gdb/testsuite/gdb.ada/cond_lang/mixed.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/cond_lang/mixed.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2010-2020 Free Software Foundation, Inc. +-- Copyright 2010-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/cond_lang/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/cond_lang/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/cond_lang/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/cond_lang/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2010-2020 Free Software Foundation, Inc. +-- Copyright 2010-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/cond_lang/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/cond_lang/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/cond_lang/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/cond_lang/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2010-2020 Free Software Foundation, Inc. +-- Copyright 2010-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/cond_lang.exp gdb-10.2/gdb/testsuite/gdb.ada/cond_lang.exp --- gdb-9.1/gdb/testsuite/gdb.ada/cond_lang.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/cond_lang.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile a set cfile "foo" diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/convvar_comp/pb16_063.adb gdb-10.2/gdb/testsuite/gdb.ada/convvar_comp/pb16_063.adb --- gdb-9.1/gdb/testsuite/gdb.ada/convvar_comp/pb16_063.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/convvar_comp/pb16_063.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2018-2020 Free Software Foundation, Inc. +-- Copyright 2018-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/convvar_comp/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/convvar_comp/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/convvar_comp/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/convvar_comp/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2018-2020 Free Software Foundation, Inc. +-- Copyright 2018-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/convvar_comp/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/convvar_comp/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/convvar_comp/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/convvar_comp/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2018-2020 Free Software Foundation, Inc. +-- Copyright 2018-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/convvar_comp.exp gdb-10.2/gdb/testsuite/gdb.ada/convvar_comp.exp --- gdb-9.1/gdb/testsuite/gdb.ada/convvar_comp.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/convvar_comp.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2018-2020 Free Software Foundation, Inc. +# Copyright 2018-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile pb16_063 if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/dgopt/x.adb gdb-10.2/gdb/testsuite/gdb.ada/dgopt/x.adb --- gdb-9.1/gdb/testsuite/gdb.ada/dgopt/x.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/dgopt/x.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2019-2020 Free Software Foundation, Inc. +-- Copyright 2019-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/dgopt.exp gdb-10.2/gdb/testsuite/gdb.ada/dgopt.exp --- gdb-9.1/gdb/testsuite/gdb.ada/dgopt.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/dgopt.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -17,6 +17,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile x if {[gdb_compile_ada "${srcfile}" "${binfile}" executable \ diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/disc_arr_bound/foo_n612_026.adb gdb-10.2/gdb/testsuite/gdb.ada/disc_arr_bound/foo_n612_026.adb --- gdb-9.1/gdb/testsuite/gdb.ada/disc_arr_bound/foo_n612_026.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/disc_arr_bound/foo_n612_026.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2015-2020 Free Software Foundation, Inc. +-- Copyright 2015-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/disc_arr_bound/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/disc_arr_bound/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/disc_arr_bound/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/disc_arr_bound/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2015-2020 Free Software Foundation, Inc. +-- Copyright 2015-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/disc_arr_bound/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/disc_arr_bound/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/disc_arr_bound/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/disc_arr_bound/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2015-2020 Free Software Foundation, Inc. +-- Copyright 2015-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/disc_arr_bound.exp gdb-10.2/gdb/testsuite/gdb.ada/disc_arr_bound.exp --- gdb-9.1/gdb/testsuite/gdb.ada/disc_arr_bound.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/disc_arr_bound.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo_n612_026 if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/display_nested/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/display_nested/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/display_nested/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/display_nested/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2019-2020 Free Software Foundation, Inc. +-- Copyright 2019-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/display_nested/pack.adb gdb-10.2/gdb/testsuite/gdb.ada/display_nested/pack.adb --- gdb-9.1/gdb/testsuite/gdb.ada/display_nested/pack.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/display_nested/pack.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2019-2020 Free Software Foundation, Inc. +-- Copyright 2019-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/display_nested/pack.ads gdb-10.2/gdb/testsuite/gdb.ada/display_nested/pack.ads --- gdb-9.1/gdb/testsuite/gdb.ada/display_nested/pack.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/display_nested/pack.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2019-2020 Free Software Foundation, Inc. +-- Copyright 2019-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/display_nested.exp gdb-10.2/gdb/testsuite/gdb.ada/display_nested.exp --- gdb-9.1/gdb/testsuite/gdb.ada/display_nested.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/display_nested.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo if {[gdb_compile_ada "${srcfile}" "${binfile}" executable debug] != ""} { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/dot_all/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/dot_all/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/dot_all/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/dot_all/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2013-2020 Free Software Foundation, Inc. +-- Copyright 2013-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/dot_all/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/dot_all/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/dot_all/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/dot_all/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2008-2020 Free Software Foundation, Inc. +-- Copyright 2008-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/dot_all/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/dot_all/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/dot_all/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/dot_all/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2008-2020 Free Software Foundation, Inc. +-- Copyright 2008-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/dot_all.exp gdb-10.2/gdb/testsuite/gdb.ada/dot_all.exp --- gdb-9.1/gdb/testsuite/gdb.ada/dot_all.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/dot_all.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/dyn_arrayidx/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/dyn_arrayidx/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/dyn_arrayidx/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/dyn_arrayidx/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2014-2020 Free Software Foundation, Inc. +-- Copyright 2014-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/dyn_arrayidx.exp gdb-10.2/gdb/testsuite/gdb.ada/dyn_arrayidx.exp --- gdb-9.1/gdb/testsuite/gdb.ada/dyn_arrayidx.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/dyn_arrayidx.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/dyn_loc/pack.adb gdb-10.2/gdb/testsuite/gdb.ada/dyn_loc/pack.adb --- gdb-9.1/gdb/testsuite/gdb.ada/dyn_loc/pack.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/dyn_loc/pack.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2010-2020 Free Software Foundation, Inc. +-- Copyright 2010-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/dyn_loc/pack.ads gdb-10.2/gdb/testsuite/gdb.ada/dyn_loc/pack.ads --- gdb-9.1/gdb/testsuite/gdb.ada/dyn_loc/pack.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/dyn_loc/pack.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2010-2020 Free Software Foundation, Inc. +-- Copyright 2010-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/dyn_loc/p.adb gdb-10.2/gdb/testsuite/gdb.ada/dyn_loc/p.adb --- gdb-9.1/gdb/testsuite/gdb.ada/dyn_loc/p.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/dyn_loc/p.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2010-2020 Free Software Foundation, Inc. +-- Copyright 2010-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/dyn_loc.exp gdb-10.2/gdb/testsuite/gdb.ada/dyn_loc.exp --- gdb-9.1/gdb/testsuite/gdb.ada/dyn_loc.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/dyn_loc.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile p if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/dyn_stride/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/dyn_stride/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/dyn_stride/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/dyn_stride/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2015-2020 Free Software Foundation, Inc. +-- Copyright 2015-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/dyn_stride.exp gdb-10.2/gdb/testsuite/gdb.ada/dyn_stride.exp --- gdb-9.1/gdb/testsuite/gdb.ada/dyn_stride.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/dyn_stride.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/enum_idx_packed/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/enum_idx_packed/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/enum_idx_packed/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/enum_idx_packed/foo.adb 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2012-2020 Free Software Foundation, Inc. +-- Copyright 2012-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/enum_idx_packed/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/enum_idx_packed/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/enum_idx_packed/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/enum_idx_packed/pck.adb 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2012-2020 Free Software Foundation, Inc. +-- Copyright 2012-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/enum_idx_packed/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/enum_idx_packed/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/enum_idx_packed/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/enum_idx_packed/pck.ads 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2012-2020 Free Software Foundation, Inc. +-- Copyright 2012-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/enum_idx_packed.exp gdb-10.2/gdb/testsuite/gdb.ada/enum_idx_packed.exp --- gdb-9.1/gdb/testsuite/gdb.ada/enum_idx_packed.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/enum_idx_packed.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/excep_handle/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/excep_handle/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/excep_handle/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/excep_handle/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2018-2020 Free Software Foundation, Inc. +-- Copyright 2018-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/excep_handle/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/excep_handle/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/excep_handle/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/excep_handle/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2018-2020 Free Software Foundation, Inc. +-- Copyright 2018-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/excep_handle.exp gdb-10.2/gdb/testsuite/gdb.ada/excep_handle.exp --- gdb-9.1/gdb/testsuite/gdb.ada/excep_handle.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/excep_handle.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2018-2020 Free Software Foundation, Inc. +# Copyright 2018-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug additional_flags=-gnata ]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/exec_changed/first.adb gdb-10.2/gdb/testsuite/gdb.ada/exec_changed/first.adb --- gdb-9.1/gdb/testsuite/gdb.ada/exec_changed/first.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/exec_changed/first.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2005-2020 Free Software Foundation, Inc. +-- Copyright 2005-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/exec_changed/second.adb gdb-10.2/gdb/testsuite/gdb.ada/exec_changed/second.adb --- gdb-9.1/gdb/testsuite/gdb.ada/exec_changed/second.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/exec_changed/second.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2005-2020 Free Software Foundation, Inc. +-- Copyright 2005-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/exec_changed.exp gdb-10.2/gdb/testsuite/gdb.ada/exec_changed.exp --- gdb-9.1/gdb/testsuite/gdb.ada/exec_changed.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/exec_changed.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2005-2020 Free Software Foundation, Inc. +# Copyright 2005-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/expr_delims/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/expr_delims/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/expr_delims/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/expr_delims/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2013-2020 Free Software Foundation, Inc. +-- Copyright 2013-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/expr_delims/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/expr_delims/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/expr_delims/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/expr_delims/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2013-2020 Free Software Foundation, Inc. +-- Copyright 2013-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/expr_delims/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/expr_delims/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/expr_delims/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/expr_delims/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2013-2020 Free Software Foundation, Inc. +-- Copyright 2013-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/expr_delims.exp gdb-10.2/gdb/testsuite/gdb.ada/expr_delims.exp --- gdb-9.1/gdb/testsuite/gdb.ada/expr_delims.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/expr_delims.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/exprs/p.adb gdb-10.2/gdb/testsuite/gdb.ada/exprs/p.adb --- gdb-9.1/gdb/testsuite/gdb.ada/exprs/p.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/exprs/p.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2008-2020 Free Software Foundation, Inc. +-- Copyright 2008-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/exprs.exp gdb-10.2/gdb/testsuite/gdb.ada/exprs.exp --- gdb-9.1/gdb/testsuite/gdb.ada/exprs.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/exprs.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2005-2020 Free Software Foundation, Inc. +# Copyright 2005-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile p if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/expr_with_funcall/expr_r821_013.adb gdb-10.2/gdb/testsuite/gdb.ada/expr_with_funcall/expr_r821_013.adb --- gdb-9.1/gdb/testsuite/gdb.ada/expr_with_funcall/expr_r821_013.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/expr_with_funcall/expr_r821_013.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2018-2020 Free Software Foundation, Inc. +-- Copyright 2018-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/expr_with_funcall/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/expr_with_funcall/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/expr_with_funcall/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/expr_with_funcall/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2018-2020 Free Software Foundation, Inc. +-- Copyright 2018-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/expr_with_funcall/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/expr_with_funcall/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/expr_with_funcall/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/expr_with_funcall/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2018-2020 Free Software Foundation, Inc. +-- Copyright 2018-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/expr_with_funcall.exp gdb-10.2/gdb/testsuite/gdb.ada/expr_with_funcall.exp --- gdb-9.1/gdb/testsuite/gdb.ada/expr_with_funcall.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/expr_with_funcall.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2018-2020 Free Software Foundation, Inc. +# Copyright 2018-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile expr_r821_013 if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/fin_fun_out/bar.adb gdb-10.2/gdb/testsuite/gdb.ada/fin_fun_out/bar.adb --- gdb-9.1/gdb/testsuite/gdb.ada/fin_fun_out/bar.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/fin_fun_out/bar.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2015-2020 Free Software Foundation, Inc. +-- Copyright 2015-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/fin_fun_out/bar.ads gdb-10.2/gdb/testsuite/gdb.ada/fin_fun_out/bar.ads --- gdb-9.1/gdb/testsuite/gdb.ada/fin_fun_out/bar.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/fin_fun_out/bar.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2015-2020 Free Software Foundation, Inc. +-- Copyright 2015-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/fin_fun_out/foo_o525_013.adb gdb-10.2/gdb/testsuite/gdb.ada/fin_fun_out/foo_o525_013.adb --- gdb-9.1/gdb/testsuite/gdb.ada/fin_fun_out/foo_o525_013.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/fin_fun_out/foo_o525_013.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2015-2020 Free Software Foundation, Inc. +-- Copyright 2015-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/fin_fun_out.exp gdb-10.2/gdb/testsuite/gdb.ada/fin_fun_out.exp --- gdb-9.1/gdb/testsuite/gdb.ada/fin_fun_out.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/fin_fun_out.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo_o525_013 if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/fixed_cmp/fixed.adb gdb-10.2/gdb/testsuite/gdb.ada/fixed_cmp/fixed.adb --- gdb-9.1/gdb/testsuite/gdb.ada/fixed_cmp/fixed.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/fixed_cmp/fixed.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2007-2020 Free Software Foundation, Inc. +-- Copyright 2007-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/fixed_cmp/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/fixed_cmp/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/fixed_cmp/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/fixed_cmp/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2007-2020 Free Software Foundation, Inc. +-- Copyright 2007-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/fixed_cmp/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/fixed_cmp/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/fixed_cmp/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/fixed_cmp/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2007-2020 Free Software Foundation, Inc. +-- Copyright 2007-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/fixed_cmp.exp gdb-10.2/gdb/testsuite/gdb.ada/fixed_cmp.exp --- gdb-9.1/gdb/testsuite/gdb.ada/fixed_cmp.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/fixed_cmp.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2007-2020 Free Software Foundation, Inc. +# Copyright 2007-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile fixed if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/fixed_points/fixed_points.adb gdb-10.2/gdb/testsuite/gdb.ada/fixed_points/fixed_points.adb --- gdb-9.1/gdb/testsuite/gdb.ada/fixed_points/fixed_points.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/fixed_points/fixed_points.adb 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2004-2020 Free Software Foundation, Inc. +-- Copyright 2004-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/fixed_points.exp gdb-10.2/gdb/testsuite/gdb.ada/fixed_points.exp --- gdb-9.1/gdb/testsuite/gdb.ada/fixed_points.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/fixed_points.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2004-2020 Free Software Foundation, Inc. +# Copyright 2004-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/float_param/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/float_param/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/float_param/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/float_param/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2013-2020 Free Software Foundation, Inc. +-- Copyright 2013-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/float_param/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/float_param/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/float_param/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/float_param/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2013-2020 Free Software Foundation, Inc. +-- Copyright 2013-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/float_param/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/float_param/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/float_param/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/float_param/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2013-2020 Free Software Foundation, Inc. +-- Copyright 2013-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/float_param.exp gdb-10.2/gdb/testsuite/gdb.ada/float_param.exp --- gdb-9.1/gdb/testsuite/gdb.ada/float_param.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/float_param.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/formatted_ref/defs.adb gdb-10.2/gdb/testsuite/gdb.ada/formatted_ref/defs.adb --- gdb-9.1/gdb/testsuite/gdb.ada/formatted_ref/defs.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/formatted_ref/defs.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2007-2020 Free Software Foundation, Inc. +-- Copyright 2007-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/formatted_ref/defs.ads gdb-10.2/gdb/testsuite/gdb.ada/formatted_ref/defs.ads --- gdb-9.1/gdb/testsuite/gdb.ada/formatted_ref/defs.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/formatted_ref/defs.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2007-2020 Free Software Foundation, Inc. +-- Copyright 2007-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/formatted_ref/formatted_ref.adb gdb-10.2/gdb/testsuite/gdb.ada/formatted_ref/formatted_ref.adb --- gdb-9.1/gdb/testsuite/gdb.ada/formatted_ref/formatted_ref.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/formatted_ref/formatted_ref.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2007-2020 Free Software Foundation, Inc. +-- Copyright 2007-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/formatted_ref.exp gdb-10.2/gdb/testsuite/gdb.ada/formatted_ref.exp --- gdb-9.1/gdb/testsuite/gdb.ada/formatted_ref.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/formatted_ref.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2007-2020 Free Software Foundation, Inc. +# Copyright 2007-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -26,6 +26,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile formatted_ref if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/frame_arg_lang/bla.adb gdb-10.2/gdb/testsuite/gdb.ada/frame_arg_lang/bla.adb --- gdb-9.1/gdb/testsuite/gdb.ada/frame_arg_lang/bla.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/frame_arg_lang/bla.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2018-2020 Free Software Foundation, Inc. +-- Copyright 2018-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/frame_arg_lang/foo.c gdb-10.2/gdb/testsuite/gdb.ada/frame_arg_lang/foo.c --- gdb-9.1/gdb/testsuite/gdb.ada/frame_arg_lang/foo.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/frame_arg_lang/foo.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2018-2020 Free Software Foundation, Inc. +/* Copyright 2018-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/frame_arg_lang/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/frame_arg_lang/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/frame_arg_lang/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/frame_arg_lang/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2018-2020 Free Software Foundation, Inc. +-- Copyright 2018-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/frame_arg_lang/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/frame_arg_lang/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/frame_arg_lang/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/frame_arg_lang/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2018-2020 Free Software Foundation, Inc. +-- Copyright 2018-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/frame_arg_lang.exp gdb-10.2/gdb/testsuite/gdb.ada/frame_arg_lang.exp --- gdb-9.1/gdb/testsuite/gdb.ada/frame_arg_lang.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/frame_arg_lang.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2018-2020 Free Software Foundation, Inc. +# Copyright 2018-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,59 +15,78 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile bla set cfile "foo" set csrcfile ${srcdir}/${subdir}/${testdir}/${cfile}.c set cobject [standard_output_file ${cfile}.o] gdb_compile "${csrcfile}" "${cobject}" object [list debug] -if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug additional_flags=-largs additional_flags=${cobject} additional_flags=-margs]] != "" } { - return -1 -} - -clean_restart ${testfile} -set bp_location [gdb_get_line_number "STOP" ${testdir}/foo.c] -runto "foo.c:$bp_location" - -gdb_test_no_output "set print frame-arguments all" - -# Here is the scenario: -# - Once stopped in a C function, with language_mode set to auto, print -# backtrace, we should see the Ada frame arguments printed using Ada -# syntax. -# - Set language to C, then check that printing backtrace shows the Ada -# frame arguments using C syntax. -# - Set language back to auto, check language mode value, then print -# backtrace, we should see Ada frame arguments printed using Ada C -# syntax. - -gdb_test "show lang" \ - "The current source language is \"auto; currently c\"." \ - "show language when set to 'auto; c'" - -gdb_test "bt" \ - "#1 $hex in pck\\.call_me \\(s=\"test\"\\).*" \ - "backtrace with auto: c" - -gdb_test_no_output "set language c" \ - "Set current source language to \"manual; currently c\"." - -gdb_test "show lang" \ - "The current source language is \"c\"." \ - "show language when set to 'c'" - -gdb_test "bt" \ - "#1 $hex in pck\\.call_me \\(s={P_ARRAY = $hex, P_BOUNDS = $hex}\\).*" \ - "backtrace with language forced to 'c'" - -gdb_test_no_output "set language auto" \ - "Set current source language to \"auto; currently c\"." - -gdb_test "show lang" \ - "The current source language is \"auto; currently c\"." \ - "show language when set back to 'auto; c'" - -gdb_test "bt" \ - "#1 $hex in pck\\.call_me \\(s=\"test\"\\).*" \ - "backtrace with language back to 'auto; c'" +# Note we don't test the "none" (no -fgnat-encodings option) scenario +# here, because "all" and "minimal" cover the cases, and this way we +# don't have to update the test when gnat changes its default. +foreach_with_prefix scenario {all minimal} { + set flags [list debug additional_flags=-largs \ + additional_flags=${cobject} \ + additional_flags=-margs \ + additional_flags=-fgnat-encodings=$scenario] + + if {[gdb_compile_ada "${srcfile}" "${binfile}" executable $flags] != ""} { + return -1 + } + + clean_restart ${testfile} + + set bp_location [gdb_get_line_number "STOP" ${testdir}/foo.c] + runto "foo.c:$bp_location" + + gdb_test_no_output "set print frame-arguments all" + + # Here is the scenario: + # - Once stopped in a C function, with language_mode set to auto, print + # backtrace, we should see the Ada frame arguments printed using Ada + # syntax. + # - Set language to C, then check that printing backtrace shows the Ada + # frame arguments using C syntax. + # - Set language back to auto, check language mode value, then print + # backtrace, we should see Ada frame arguments printed using Ada C + # syntax. + + gdb_test "show lang" \ + "The current source language is \"auto; currently c\"." \ + "show language when set to 'auto; c'" + + gdb_test "bt" \ + "#1 $hex in pck\\.call_me \\(s=\"test\"\\).*" \ + "backtrace with auto: c" + + gdb_test_no_output "set language c" \ + "Set current source language to \"manual; currently c\"." + + gdb_test "show lang" \ + "The current source language is \"c\"." \ + "show language when set to 'c'" + + # With -fgnat-encodings=minimal, this works properly in C as well. + if {$scenario == "minimal"} { + set expected "\"test\"" + } else { + set expected "{P_ARRAY = $hex, P_BOUNDS = $hex}" + } + gdb_test "bt" \ + "#1 $hex in pck\\.call_me \\(s=$expected\\).*" \ + "backtrace with language forced to 'c'" + + gdb_test_no_output "set language auto" \ + "Set current source language to \"auto; currently c\"." + + gdb_test "show lang" \ + "The current source language is \"auto; currently c\"." \ + "show language when set back to 'auto; c'" + + gdb_test "bt" \ + "#1 $hex in pck\\.call_me \\(s=\"test\"\\).*" \ + "backtrace with language back to 'auto; c'" +} diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/frame_args/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/frame_args/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/frame_args/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/frame_args/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2007-2020 Free Software Foundation, Inc. +-- Copyright 2007-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/frame_args/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/frame_args/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/frame_args/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/frame_args/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2007-2020 Free Software Foundation, Inc. +-- Copyright 2007-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/frame_args/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/frame_args/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/frame_args/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/frame_args/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2007-2020 Free Software Foundation, Inc. +-- Copyright 2007-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/frame_args.exp gdb-10.2/gdb/testsuite/gdb.ada/frame_args.exp --- gdb-9.1/gdb/testsuite/gdb.ada/frame_args.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/frame_args.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2007-2020 Free Software Foundation, Inc. +# Copyright 2007-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/fullname_bp/dn.adb gdb-10.2/gdb/testsuite/gdb.ada/fullname_bp/dn.adb --- gdb-9.1/gdb/testsuite/gdb.ada/fullname_bp/dn.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/fullname_bp/dn.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2011-2020 Free Software Foundation, Inc. +-- Copyright 2011-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/fullname_bp/dn.ads gdb-10.2/gdb/testsuite/gdb.ada/fullname_bp/dn.ads --- gdb-9.1/gdb/testsuite/gdb.ada/fullname_bp/dn.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/fullname_bp/dn.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2011-2020 Free Software Foundation, Inc. +-- Copyright 2011-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/fullname_bp/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/fullname_bp/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/fullname_bp/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/fullname_bp/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2011-2020 Free Software Foundation, Inc. +-- Copyright 2011-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/fullname_bp/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/fullname_bp/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/fullname_bp/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/fullname_bp/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2011-2020 Free Software Foundation, Inc. +-- Copyright 2011-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/fullname_bp/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/fullname_bp/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/fullname_bp/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/fullname_bp/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2011-2020 Free Software Foundation, Inc. +-- Copyright 2011-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/fullname_bp.exp gdb-10.2/gdb/testsuite/gdb.ada/fullname_bp.exp --- gdb-9.1/gdb/testsuite/gdb.ada/fullname_bp.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/fullname_bp.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/fun_addr/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/fun_addr/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/fun_addr/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/fun_addr/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2008-2020 Free Software Foundation, Inc. +-- Copyright 2008-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/fun_addr.exp gdb-10.2/gdb/testsuite/gdb.ada/fun_addr.exp --- gdb-9.1/gdb/testsuite/gdb.ada/fun_addr.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/fun_addr.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/funcall_char/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/funcall_char/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/funcall_char/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/funcall_char/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2015-2020 Free Software Foundation, Inc. +-- Copyright 2015-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/funcall_char.exp gdb-10.2/gdb/testsuite/gdb.ada/funcall_char.exp --- gdb-9.1/gdb/testsuite/gdb.ada/funcall_char.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/funcall_char.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/funcall_param/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/funcall_param/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/funcall_param/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/funcall_param/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2008-2020 Free Software Foundation, Inc. +-- Copyright 2008-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/funcall_param/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/funcall_param/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/funcall_param/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/funcall_param/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2008-2020 Free Software Foundation, Inc. +-- Copyright 2008-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/funcall_param/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/funcall_param/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/funcall_param/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/funcall_param/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2008-2020 Free Software Foundation, Inc. +-- Copyright 2008-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/funcall_param.exp gdb-10.2/gdb/testsuite/gdb.ada/funcall_param.exp --- gdb-9.1/gdb/testsuite/gdb.ada/funcall_param.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/funcall_param.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug]] != "" } { @@ -30,4 +32,4 @@ # class-wide. gdb_test "p ident (ident (my_parameter))" \ - "= \\(one => 1, two => 2, three => 3\\)" + "= \\(one => 1, two => 2, three => 3\\)" "value of ident" diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/funcall_ptr/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/funcall_ptr/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/funcall_ptr/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/funcall_ptr/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2017-2020 Free Software Foundation, Inc. +-- Copyright 2017-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/funcall_ptr/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/funcall_ptr/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/funcall_ptr/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/funcall_ptr/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2017-2020 Free Software Foundation, Inc. +-- Copyright 2017-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/funcall_ptr/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/funcall_ptr/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/funcall_ptr/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/funcall_ptr/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2017-2020 Free Software Foundation, Inc. +-- Copyright 2017-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/funcall_ptr.exp gdb-10.2/gdb/testsuite/gdb.ada/funcall_ptr.exp --- gdb-9.1/gdb/testsuite/gdb.ada/funcall_ptr.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/funcall_ptr.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2017-2020 Free Software Foundation, Inc. +# Copyright 2017-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo if {[gdb_compile_ada "$srcfile" "$binfile" executable [list debug]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/funcall_ref/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/funcall_ref/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/funcall_ref/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/funcall_ref/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2008-2020 Free Software Foundation, Inc. +-- Copyright 2008-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/funcall_ref.exp gdb-10.2/gdb/testsuite/gdb.ada/funcall_ref.exp --- gdb-9.1/gdb/testsuite/gdb.ada/funcall_ref.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/funcall_ref.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,30 +15,75 @@ load_lib "ada.exp" -standard_ada_testfile foo - -if {[gdb_compile_ada "${srcfile}" "${binfile}" executable \ - [list debug]] != "" } { - return -1 -} +if { [skip_ada_tests] } { return -1 } -clean_restart ${testfile} - -set bp_location [gdb_get_line_number "STOP" ${testdir}/foo.adb] -runto "foo.adb:$bp_location" +standard_ada_testfile foo -# Test printing and type-printing of a discriminated record that a function -# returns by reference. +# Note we don't test the "none" (no -fgnat-encodings option) scenario +# here, because "all" and "minimal" cover the cases, and this way we +# don't have to update the test when gnat changes its default. +foreach_with_prefix scenario {all minimal} { + set flags [list debug additional_flags=-fgnat-encodings=$scenario] + + if {[gdb_compile_ada "${srcfile}" "${binfile}" executable $flags] != ""} { + return -1 + } + + clean_restart ${testfile} + + set bp_location [gdb_get_line_number "STOP" ${testdir}/foo.adb] + runto "foo.adb:$bp_location" + + # Test printing and type-printing of a discriminated record that a function + # returns by reference. + + # Currently, GCC describes such functions as returning pointers (instead of + # references). + set pass_re [multi_line "type = <ref> record" \ + " n: natural;" \ + " s: access array \\(1 \\.\\. n\\) of character;" \ + "end record"] + # With DWARF we get debuginfo that could in theory show "1..n" for + # the range: + # <3><1230>: Abbrev Number: 15 (DW_TAG_member) + # <1231> DW_AT_name : n + # ... + # <4><1257>: Abbrev Number: 18 (DW_TAG_subrange_type) + # <1258> DW_AT_type : <0x126e> + # <125c> DW_AT_upper_bound : <0x1230> + # However, we don't currently record the needed information in the + # location batons. In the meantime, we accept and kfail the + # compromise output. + set dwarf_kfail_re [multi_line "type = <ref> record" \ + " n: natural;" \ + " s: array \\(<>\\) of character;" \ + "end record"] + set unsupported_re [multi_line "type = access record" \ + " n: natural;" \ + " s: access array \\(1 \\.\\. n\\) of character;" \ + "end record"] + set supported 1 + gdb_test_multiple "ptype get(\"Hello world!\")" "" { + -re -wrap $pass_re { + pass $gdb_test_name + } + -re -wrap $dwarf_kfail_re { + if {$scenario == "minimal"} { + setup_kfail "symbolic names in location batons" *-*-* + } + fail $gdb_test_name + set supported 0 + } + -re -wrap $unsupported_re { + unsupported $gdb_test_name + set supported 0 + } + } + + if { $supported == 0 } { + return 0 + } -# Currently, GCC describes such functions as returning pointers (instead of -# references). -setup_xfail *-*-* -gdb_test "p get (\"Hello world!\")" \ - "= \\(n => 12, s => \"Hello world!\"\\)" \ - -setup_xfail *-*-* -gdb_test "ptype get (\"Hello world!\")" \ - [multi_line "type = <ref> record" \ - " n: natural;" \ - " s: access array \\(1 \\.\\. n\\) of character;" \ - "end record"] \ + gdb_test "p get(\"Hello world!\")" \ + "= \\(n => 12, s => \"Hello world!\"\\)" +} diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/fun_in_declare/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/fun_in_declare/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/fun_in_declare/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/fun_in_declare/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2008-2020 Free Software Foundation, Inc. +-- Copyright 2008-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/fun_in_declare/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/fun_in_declare/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/fun_in_declare/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/fun_in_declare/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2008-2020 Free Software Foundation, Inc. +-- Copyright 2008-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/fun_in_declare/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/fun_in_declare/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/fun_in_declare/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/fun_in_declare/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2008-2020 Free Software Foundation, Inc. +-- Copyright 2008-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/fun_in_declare.exp gdb-10.2/gdb/testsuite/gdb.ada/fun_in_declare.exp --- gdb-9.1/gdb/testsuite/gdb.ada/fun_in_declare.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/fun_in_declare.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/fun_overload_menu/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/fun_overload_menu/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/fun_overload_menu/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/fun_overload_menu/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2015-2020 Free Software Foundation, Inc. +-- Copyright 2015-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/fun_overload_menu.exp gdb-10.2/gdb/testsuite/gdb.ada/fun_overload_menu.exp --- gdb-9.1/gdb/testsuite/gdb.ada/fun_overload_menu.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/fun_overload_menu.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo if {[gdb_compile_ada "$srcfile" "$binfile" executable [list debug]] != "" } { @@ -32,7 +34,7 @@ "\\\[0\\\] cancel" \ "$menu_entries" \ "> $"] - set test_name "multiple matches for $function ($expr)" + set test_name "multiple matches for $function {$expr}" gdb_test_multiple "print $expr" "$test_name" \ { -re "$menu" { @@ -49,23 +51,29 @@ # Check that function signatures in overload menus are displayed as expected. # 1. Test with overloaded functions -test_menu "f (1, null)" "f" \ - [multi_line \ - "\\\[1\\\] foo\.f \\(integer; foo\.integer_access\\) return boolean at .*foo.adb:.*" \ - "\\\[2\\\] foo\.f \\(foo\.new_integer; foo\.integer_access\\) return boolean at .*foo.adb:.*"] \ - "1" "= true" +with_test_prefix "func" { + test_menu "f (1, null)" "f" \ + [multi_line \ + "\\\[1\\\] foo\.f \\(integer; foo\.integer_access\\) return boolean at .*foo.adb:.*" \ + "\\\[2\\\] foo\.f \\(foo\.new_integer; foo\.integer_access\\) return boolean at .*foo.adb:.*"] \ + "1" "= true" +} # 2. Test with overloaded procedures -test_menu "p (1, null)" "p" \ - [multi_line \ - "\\\[1\\\] foo\.p \\(integer; foo\.integer_access\\) at .*foo.adb:.*" \ - "\\\[2\\\] foo\.p \\(foo\.new_integer; foo\.integer_access\\) at .*foo.adb:.*" ] \ - "1" "= (void)" +with_test_prefix "proc" { + test_menu "p (1, null)" "p" \ + [multi_line \ + "\\\[1\\\] foo\.p \\(integer; foo\.integer_access\\) at .*foo.adb:.*" \ + "\\\[2\\\] foo\.p \\(foo\.new_integer; foo\.integer_access\\) at .*foo.adb:.*" ] \ + "1" "= (void)" +} # 3. Test with signatures disabled gdb_test "set ada print-signatures off" "" -test_menu "f (1, null)" "f" \ - [multi_line \ - "\\\[1\\\] foo\.f at .*foo.adb:.*" \ - "\\\[2\\\] foo\.f at .*foo.adb:.*"] \ - "1" "= true" +with_test_prefix "signatures disabled" { + test_menu "f (1, null)" "f" \ + [multi_line \ + "\\\[1\\\] foo\.f at .*foo.adb:.*" \ + "\\\[2\\\] foo\.f at .*foo.adb:.*"] \ + "1" "= true" +} diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/fun_renaming/fun_renaming.adb gdb-10.2/gdb/testsuite/gdb.ada/fun_renaming/fun_renaming.adb --- gdb-9.1/gdb/testsuite/gdb.ada/fun_renaming/fun_renaming.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/fun_renaming/fun_renaming.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2015-2020 Free Software Foundation, Inc. +-- Copyright 2015-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/fun_renaming/pack.adb gdb-10.2/gdb/testsuite/gdb.ada/fun_renaming/pack.adb --- gdb-9.1/gdb/testsuite/gdb.ada/fun_renaming/pack.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/fun_renaming/pack.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2015-2020 Free Software Foundation, Inc. +-- Copyright 2015-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/fun_renaming/pack.ads gdb-10.2/gdb/testsuite/gdb.ada/fun_renaming/pack.ads --- gdb-9.1/gdb/testsuite/gdb.ada/fun_renaming/pack.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/fun_renaming/pack.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2015-2020 Free Software Foundation, Inc. +-- Copyright 2015-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/fun_renaming.exp gdb-10.2/gdb/testsuite/gdb.ada/fun_renaming.exp --- gdb-9.1/gdb/testsuite/gdb.ada/fun_renaming.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/fun_renaming.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile fun_renaming if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/homonym/homonym.adb gdb-10.2/gdb/testsuite/gdb.ada/homonym/homonym.adb --- gdb-9.1/gdb/testsuite/gdb.ada/homonym/homonym.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/homonym/homonym.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2008-2020 Free Software Foundation, Inc. +-- Copyright 2008-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/homonym/homonym.ads gdb-10.2/gdb/testsuite/gdb.ada/homonym/homonym.ads --- gdb-9.1/gdb/testsuite/gdb.ada/homonym/homonym.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/homonym/homonym.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2008-2020 Free Software Foundation, Inc. +-- Copyright 2008-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/homonym/homonym_main.adb gdb-10.2/gdb/testsuite/gdb.ada/homonym/homonym_main.adb --- gdb-9.1/gdb/testsuite/gdb.ada/homonym/homonym_main.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/homonym/homonym_main.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2008-2020 Free Software Foundation, Inc. +-- Copyright 2008-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/homonym/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/homonym/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/homonym/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/homonym/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2011-2020 Free Software Foundation, Inc. +-- Copyright 2011-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/homonym/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/homonym/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/homonym/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/homonym/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2011-2020 Free Software Foundation, Inc. +-- Copyright 2011-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/homonym.exp gdb-10.2/gdb/testsuite/gdb.ada/homonym.exp --- gdb-9.1/gdb/testsuite/gdb.ada/homonym.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/homonym.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile homonym_main if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/info_addr_mixed_case/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/info_addr_mixed_case/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/info_addr_mixed_case/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/info_addr_mixed_case/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2018-2020 Free Software Foundation, Inc. +-- Copyright 2018-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/info_addr_mixed_case/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/info_addr_mixed_case/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/info_addr_mixed_case/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/info_addr_mixed_case/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2018-2020 Free Software Foundation, Inc. +-- Copyright 2018-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/info_addr_mixed_case/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/info_addr_mixed_case/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/info_addr_mixed_case/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/info_addr_mixed_case/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2018-2020 Free Software Foundation, Inc. +-- Copyright 2018-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/info_addr_mixed_case.exp gdb-10.2/gdb/testsuite/gdb.ada/info_addr_mixed_case.exp --- gdb-9.1/gdb/testsuite/gdb.ada/info_addr_mixed_case.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/info_addr_mixed_case.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2018-2020 Free Software Foundation, Inc. +# Copyright 2018-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/info_auto_lang/global_pack.ads gdb-10.2/gdb/testsuite/gdb.ada/info_auto_lang/global_pack.ads --- gdb-9.1/gdb/testsuite/gdb.ada/info_auto_lang/global_pack.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/info_auto_lang/global_pack.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2018-2020 Free Software Foundation, Inc. +-- Copyright 2018-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/info_auto_lang/proc_in_ada.adb gdb-10.2/gdb/testsuite/gdb.ada/info_auto_lang/proc_in_ada.adb --- gdb-9.1/gdb/testsuite/gdb.ada/info_auto_lang/proc_in_ada.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/info_auto_lang/proc_in_ada.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2018-2020 Free Software Foundation, Inc. +-- Copyright 2018-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/info_auto_lang/some_c.c gdb-10.2/gdb/testsuite/gdb.ada/info_auto_lang/some_c.c --- gdb-9.1/gdb/testsuite/gdb.ada/info_auto_lang/some_c.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/info_auto_lang/some_c.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2018-2020 Free Software Foundation, Inc. + Copyright 2018-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/info_auto_lang.exp gdb-10.2/gdb/testsuite/gdb.ada/info_auto_lang.exp --- gdb-9.1/gdb/testsuite/gdb.ada/info_auto_lang.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/info_auto_lang.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2018-2020 Free Software Foundation, Inc. +# Copyright 2018-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + # This test verifies that the commands # info [functions|variables|types] # respect the 'set language auto|ada|c' setting, whatever the language diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/info_exc/const.ads gdb-10.2/gdb/testsuite/gdb.ada/info_exc/const.ads --- gdb-9.1/gdb/testsuite/gdb.ada/info_exc/const.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/info_exc/const.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2013-2020 Free Software Foundation, Inc. +-- Copyright 2013-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/info_exc/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/info_exc/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/info_exc/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/info_exc/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2013-2020 Free Software Foundation, Inc. +-- Copyright 2013-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/info_exc.exp gdb-10.2/gdb/testsuite/gdb.ada/info_exc.exp --- gdb-9.1/gdb/testsuite/gdb.ada/info_exc.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/info_exc.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/info_locals_renaming/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/info_locals_renaming/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/info_locals_renaming/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/info_locals_renaming/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2012-2020 Free Software Foundation, Inc. +-- Copyright 2012-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/info_locals_renaming/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/info_locals_renaming/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/info_locals_renaming/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/info_locals_renaming/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2012-2020 Free Software Foundation, Inc. +-- Copyright 2012-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/info_locals_renaming/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/info_locals_renaming/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/info_locals_renaming/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/info_locals_renaming/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2012-2020 Free Software Foundation, Inc. +-- Copyright 2012-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/info_locals_renaming.exp gdb-10.2/gdb/testsuite/gdb.ada/info_locals_renaming.exp --- gdb-9.1/gdb/testsuite/gdb.ada/info_locals_renaming.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/info_locals_renaming.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/info_types.c gdb-10.2/gdb/testsuite/gdb.ada/info_types.c --- gdb-9.1/gdb/testsuite/gdb.ada/info_types.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/info_types.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This test program is part of GDB, the GNU debugger. - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/info_types.exp gdb-10.2/gdb/testsuite/gdb.ada/info_types.exp --- gdb-9.1/gdb/testsuite/gdb.ada/info_types.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/info_types.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -13,6 +13,8 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. +if { [skip_ada_tests] } { return -1 } + standard_testfile .c if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile}] } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/int_deref/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/int_deref/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/int_deref/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/int_deref/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2008-2020 Free Software Foundation, Inc. +-- Copyright 2008-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/int_deref/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/int_deref/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/int_deref/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/int_deref/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2008-2020 Free Software Foundation, Inc. +-- Copyright 2008-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/int_deref.exp gdb-10.2/gdb/testsuite/gdb.ada/int_deref.exp --- gdb-9.1/gdb/testsuite/gdb.ada/int_deref.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/int_deref.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/interface/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/interface/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/interface/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/interface/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2008-2020 Free Software Foundation, Inc. +-- Copyright 2008-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/interface/types.adb gdb-10.2/gdb/testsuite/gdb.ada/interface/types.adb --- gdb-9.1/gdb/testsuite/gdb.ada/interface/types.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/interface/types.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2008-2020 Free Software Foundation, Inc. +-- Copyright 2008-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/interface/types.ads gdb-10.2/gdb/testsuite/gdb.ada/interface/types.ads --- gdb-9.1/gdb/testsuite/gdb.ada/interface/types.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/interface/types.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2008-2020 Free Software Foundation, Inc. +-- Copyright 2008-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/interface.exp gdb-10.2/gdb/testsuite/gdb.ada/interface.exp --- gdb-9.1/gdb/testsuite/gdb.ada/interface.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/interface.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug additional_flags=-gnat05 ]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/iwide/classes.adb gdb-10.2/gdb/testsuite/gdb.ada/iwide/classes.adb --- gdb-9.1/gdb/testsuite/gdb.ada/iwide/classes.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/iwide/classes.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2012-2020 Free Software Foundation, Inc. +-- Copyright 2012-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/iwide/classes.ads gdb-10.2/gdb/testsuite/gdb.ada/iwide/classes.ads --- gdb-9.1/gdb/testsuite/gdb.ada/iwide/classes.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/iwide/classes.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2012-2020 Free Software Foundation, Inc. +-- Copyright 2012-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/iwide/p.adb gdb-10.2/gdb/testsuite/gdb.ada/iwide/p.adb --- gdb-9.1/gdb/testsuite/gdb.ada/iwide/p.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/iwide/p.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2012-2020 Free Software Foundation, Inc. +-- Copyright 2012-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/iwide.exp gdb-10.2/gdb/testsuite/gdb.ada/iwide.exp --- gdb-9.1/gdb/testsuite/gdb.ada/iwide.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/iwide.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile p if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug additional_flags=-gnat05 ]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/lang_switch/foo.c gdb-10.2/gdb/testsuite/gdb.ada/lang_switch/foo.c --- gdb-9.1/gdb/testsuite/gdb.ada/lang_switch/foo.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/lang_switch/foo.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2008-2020 Free Software Foundation, Inc. +/* Copyright 2008-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/lang_switch/lang_switch.adb gdb-10.2/gdb/testsuite/gdb.ada/lang_switch/lang_switch.adb --- gdb-9.1/gdb/testsuite/gdb.ada/lang_switch/lang_switch.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/lang_switch/lang_switch.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2008-2020 Free Software Foundation, Inc. +-- Copyright 2008-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/lang_switch.exp gdb-10.2/gdb/testsuite/gdb.ada/lang_switch.exp --- gdb-9.1/gdb/testsuite/gdb.ada/lang_switch.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/lang_switch.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile lang_switch set cfile "foo" set csrcfile ${srcdir}/${subdir}/${testdir}/${cfile}.c @@ -41,6 +43,9 @@ # Now, make sure that the language doesn't get automatically switched # if the current language is not "auto". gdb_test "set lang c" +# This gives different output with -fgnat-encodings=minimal and +# -fgnat-encodings=all, but since we don't care so much about the +# precise details here, we just accept anything. gdb_test "bt" \ - ".*#1.*lang_switch\\.ada_procedure\\s*\\(msg=(@$hex: +)?{.*\\).*" \ + ".*#1.*lang_switch\\.ada_procedure\\s*\\(msg=(@$hex: +)?.*\\).*" \ "backtrace with lang set to C" diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/length_cond/length_cond.adb gdb-10.2/gdb/testsuite/gdb.ada/length_cond/length_cond.adb --- gdb-9.1/gdb/testsuite/gdb.ada/length_cond/length_cond.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/length_cond/length_cond.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2019-2020 Free Software Foundation, Inc. +-- Copyright 2019-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/length_cond/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/length_cond/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/length_cond/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/length_cond/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2019-2020 Free Software Foundation, Inc. +-- Copyright 2019-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/length_cond/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/length_cond/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/length_cond/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/length_cond/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2019-2020 Free Software Foundation, Inc. +-- Copyright 2019-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/length_cond.exp gdb-10.2/gdb/testsuite/gdb.ada/length_cond.exp --- gdb-9.1/gdb/testsuite/gdb.ada/length_cond.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/length_cond.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -18,6 +18,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile length_cond if {[gdb_compile_ada "${srcfile}" "${binfile}" executable debug] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/maint_with_ada/pack.adb gdb-10.2/gdb/testsuite/gdb.ada/maint_with_ada/pack.adb --- gdb-9.1/gdb/testsuite/gdb.ada/maint_with_ada/pack.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/maint_with_ada/pack.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2015-2020 Free Software Foundation, Inc. +-- Copyright 2015-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/maint_with_ada/pack.ads gdb-10.2/gdb/testsuite/gdb.ada/maint_with_ada/pack.ads --- gdb-9.1/gdb/testsuite/gdb.ada/maint_with_ada/pack.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/maint_with_ada/pack.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2015-2020 Free Software Foundation, Inc. +-- Copyright 2015-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/maint_with_ada/var_arr_typedef.adb gdb-10.2/gdb/testsuite/gdb.ada/maint_with_ada/var_arr_typedef.adb --- gdb-9.1/gdb/testsuite/gdb.ada/maint_with_ada/var_arr_typedef.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/maint_with_ada/var_arr_typedef.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2015-2020 Free Software Foundation, Inc. +-- Copyright 2015-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/maint_with_ada.exp gdb-10.2/gdb/testsuite/gdb.ada/maint_with_ada.exp --- gdb-9.1/gdb/testsuite/gdb.ada/maint_with_ada.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/maint_with_ada.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile var_arr_typedef if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/mi_catch_assert/bla.adb gdb-10.2/gdb/testsuite/gdb.ada/mi_catch_assert/bla.adb --- gdb-9.1/gdb/testsuite/gdb.ada/mi_catch_assert/bla.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/mi_catch_assert/bla.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2018-2020 Free Software Foundation, Inc. +-- Copyright 2018-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/mi_catch_assert/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/mi_catch_assert/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/mi_catch_assert/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/mi_catch_assert/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2018-2020 Free Software Foundation, Inc. +-- Copyright 2018-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/mi_catch_assert.exp gdb-10.2/gdb/testsuite/gdb.ada/mi_catch_assert.exp --- gdb-9.1/gdb/testsuite/gdb.ada/mi_catch_assert.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/mi_catch_assert.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile bla if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug additional_flags=-gnata ]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/mi_catch_ex/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/mi_catch_ex/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/mi_catch_ex/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/mi_catch_ex/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2007-2020 Free Software Foundation, Inc. +-- Copyright 2007-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/mi_catch_ex.exp gdb-10.2/gdb/testsuite/gdb.ada/mi_catch_ex.exp --- gdb-9.1/gdb/testsuite/gdb.ada/mi_catch_ex.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/mi_catch_ex.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug additional_flags=-gnata ]] != "" } { @@ -69,9 +71,11 @@ # 1. Try catching all exceptions. # #################################### -if ![mi_run_to_main] then { - fail "cannot run to main, testcase aborted" - return 0 +with_test_prefix "scenario 1" { + if ![mi_run_to_main] then { + fail "cannot run to main, testcase aborted" + return 0 + } } mi_gdb_test "-catch-exception" \ @@ -125,9 +129,11 @@ # - continue, we should see the unhandled Constrait_Error exception # - continue, the program exits. -if ![mi_run_to_main] then { - fail "cannot run to main, testcase aborted" - return 0 +with_test_prefix "scenario 2" { + if ![mi_run_to_main] then { + fail "cannot run to main, testcase aborted" + return 0 + } } mi_gdb_test "-catch-exception -e Program_Error" \ diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/mi_catch_ex_hand/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/mi_catch_ex_hand/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/mi_catch_ex_hand/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/mi_catch_ex_hand/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2007-2020 Free Software Foundation, Inc. +-- Copyright 2007-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/mi_catch_ex_hand.exp gdb-10.2/gdb/testsuite/gdb.ada/mi_catch_ex_hand.exp --- gdb-9.1/gdb/testsuite/gdb.ada/mi_catch_ex_hand.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/mi_catch_ex_hand.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug additional_flags=-gnata ]] != "" } { @@ -64,9 +66,11 @@ # 1. Try catching all exceptions handlers. # ############################################# -if ![mi_run_to_main] then { - fail "cannot run to main, testcase aborted" - return 0 +with_test_prefix "scenario 1" { + if ![mi_run_to_main] then { + fail "cannot run to main, testcase aborted" + return 0 + } } mi_gdb_test "-catch-handlers" \ @@ -114,9 +118,11 @@ # - continue, we should not stop at the Program_Error exception handler # but exit instead. -if ![mi_run_to_main] then { - fail "cannot run to main, testcase aborted" - return 0 +with_test_prefix "scenario 2" { + if ![mi_run_to_main] then { + fail "cannot run to main, testcase aborted" + return 0 + } } mi_gdb_test "-catch-handlers -e Constraint_Error" \ diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/mi_dyn_arr/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/mi_dyn_arr/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/mi_dyn_arr/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/mi_dyn_arr/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2014-2020 Free Software Foundation, Inc. +-- Copyright 2014-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/mi_dyn_arr/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/mi_dyn_arr/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/mi_dyn_arr/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/mi_dyn_arr/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2014-2020 Free Software Foundation, Inc. +-- Copyright 2014-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/mi_dyn_arr/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/mi_dyn_arr/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/mi_dyn_arr/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/mi_dyn_arr/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2014-2020 Free Software Foundation, Inc. +-- Copyright 2014-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/mi_dyn_arr.exp gdb-10.2/gdb/testsuite/gdb.ada/mi_dyn_arr.exp --- gdb-9.1/gdb/testsuite/gdb.ada/mi_dyn_arr.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/mi_dyn_arr.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/mi_exc_info/const.ads gdb-10.2/gdb/testsuite/gdb.ada/mi_exc_info/const.ads --- gdb-9.1/gdb/testsuite/gdb.ada/mi_exc_info/const.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/mi_exc_info/const.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2013-2020 Free Software Foundation, Inc. +-- Copyright 2013-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/mi_exc_info/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/mi_exc_info/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/mi_exc_info/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/mi_exc_info/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2013-2020 Free Software Foundation, Inc. +-- Copyright 2013-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/mi_exc_info.exp gdb-10.2/gdb/testsuite/gdb.ada/mi_exc_info.exp --- gdb-9.1/gdb/testsuite/gdb.ada/mi_exc_info.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/mi_exc_info.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/mi_ex_cond/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/mi_ex_cond/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/mi_ex_cond/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/mi_ex_cond/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2013-2020 Free Software Foundation, Inc. +-- Copyright 2013-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/mi_ex_cond/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/mi_ex_cond/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/mi_ex_cond/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/mi_ex_cond/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2013-2020 Free Software Foundation, Inc. +-- Copyright 2013-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/mi_ex_cond.exp gdb-10.2/gdb/testsuite/gdb.ada/mi_ex_cond.exp --- gdb-9.1/gdb/testsuite/gdb.ada/mi_ex_cond.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/mi_ex_cond.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug additional_flags=-bargs additional_flags=-static additional_flags=-margs ]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/mi_interface/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/mi_interface/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/mi_interface/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/mi_interface/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2014-2020 Free Software Foundation, Inc. +-- Copyright 2014-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/mi_interface/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/mi_interface/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/mi_interface/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/mi_interface/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2014-2020 Free Software Foundation, Inc. +-- Copyright 2014-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/mi_interface/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/mi_interface/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/mi_interface/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/mi_interface/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2014-2020 Free Software Foundation, Inc. +-- Copyright 2014-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/mi_interface.exp gdb-10.2/gdb/testsuite/gdb.ada/mi_interface.exp --- gdb-9.1/gdb/testsuite/gdb.ada/mi_interface.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/mi_interface.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug additional_flags=-gnat12 ]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/minsyms/foo_qb07_057.adb gdb-10.2/gdb/testsuite/gdb.ada/minsyms/foo_qb07_057.adb --- gdb-9.1/gdb/testsuite/gdb.ada/minsyms/foo_qb07_057.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/minsyms/foo_qb07_057.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2017-2020 Free Software Foundation, Inc. +-- Copyright 2017-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/minsyms/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/minsyms/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/minsyms/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/minsyms/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2017-2020 Free Software Foundation, Inc. +-- Copyright 2017-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/minsyms/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/minsyms/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/minsyms/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/minsyms/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2017-2020 Free Software Foundation, Inc. +-- Copyright 2017-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/minsyms.exp gdb-10.2/gdb/testsuite/gdb.ada/minsyms.exp --- gdb-9.1/gdb/testsuite/gdb.ada/minsyms.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/minsyms.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2017-2020 Free Software Foundation, Inc. +# Copyright 2017-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo_qb07_057 if {[gdb_compile_ada "${srcfile}" "${binfile}" executable ""] != "" } { @@ -28,6 +30,8 @@ return } +gdb_test_no_output "set language ada" + gdb_test "print some_minsym" \ "'some_minsym' has unknown type; cast it to its declared type" diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/mi_prot/pkg.adb gdb-10.2/gdb/testsuite/gdb.ada/mi_prot/pkg.adb --- gdb-9.1/gdb/testsuite/gdb.ada/mi_prot/pkg.adb 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/mi_prot/pkg.adb 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,21 @@ +-- Copyright 2020-2021 Free Software Foundation, Inc. +-- +-- This program is free software; you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation; either version 3 of the License, or +-- (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see <http://www.gnu.org/licenses/>. + +package body Pkg is + procedure Do_Nothing (A : System.Address) is + begin + null; + end Do_Nothing; +end Pkg; diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/mi_prot/pkg.ads gdb-10.2/gdb/testsuite/gdb.ada/mi_prot/pkg.ads --- gdb-9.1/gdb/testsuite/gdb.ada/mi_prot/pkg.ads 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/mi_prot/pkg.ads 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,19 @@ +-- Copyright 2020-2021 Free Software Foundation, Inc. +-- +-- This program is free software; you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation; either version 3 of the License, or +-- (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see <http://www.gnu.org/licenses/>. + +with System; +package Pkg is + procedure Do_Nothing (A : System.Address); +end Pkg; diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/mi_prot/prot.adb gdb-10.2/gdb/testsuite/gdb.ada/mi_prot/prot.adb --- gdb-9.1/gdb/testsuite/gdb.ada/mi_prot/prot.adb 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/mi_prot/prot.adb 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,47 @@ +-- Copyright 2020-2021 Free Software Foundation, Inc. +-- +-- This program is free software; you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation; either version 3 of the License, or +-- (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see <http://www.gnu.org/licenses/>. + +with Pkg; use Pkg; +with System; + +procedure Prot is + + protected type Obj_Type + (Ceiling_Priority: System.Priority := System.Priority'Last) + with Priority => Ceiling_Priority + is + procedure Set (V : Integer); + function Get return Integer; + private + Local : Integer := 0; + end Obj_Type; + + protected body Obj_Type is + procedure Set (V : Integer) is + begin + Local := V; -- STOP + end Set; + + function Get return Integer is + begin + return Local; + end Get; + end Obj_Type; + + Obj : Obj_Type; +begin + Obj.Set (5); + Pkg.Do_Nothing(Obj'Address); +end Prot; diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/mi_prot.exp gdb-10.2/gdb/testsuite/gdb.ada/mi_prot.exp --- gdb-9.1/gdb/testsuite/gdb.ada/mi_prot.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/mi_prot.exp 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,52 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +load_lib "ada.exp" + +if { [skip_ada_tests] } { return -1 } + +if { ![gnatmake_version_at_least 8] } { + return -1 +} +standard_ada_testfile prot + +if {[gdb_compile_ada "${srcfile}" "${binfile}" executable \ + {debug additional_flags=-gnata}] != ""} { + return -1 +} + +load_lib mi-support.exp +set MIFLAGS "-i=mi" + +gdb_exit +if {[mi_gdb_start]} { + continue +} + +if {![mi_run_to_main]} then { + fail "cannot run to main, testcase aborted" + return 0 +} + +mi_delete_breakpoints +mi_gdb_reinitialize_dir $srcdir/$subdir +mi_gdb_load ${binfile} + +set line [gdb_get_line_number "STOP" ${testdir}/prot.adb] +mi_continue_to_line $line "continue to protected method" + +# The bug was that this crashed. +mi_gdb_test "-stack-list-arguments --no-frame-filters 1" \ + "\\^done,stack=.*" diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/mi_ref_changeable/foo_rb20_056.adb gdb-10.2/gdb/testsuite/gdb.ada/mi_ref_changeable/foo_rb20_056.adb --- gdb-9.1/gdb/testsuite/gdb.ada/mi_ref_changeable/foo_rb20_056.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/mi_ref_changeable/foo_rb20_056.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2018-2020 Free Software Foundation, Inc. +-- Copyright 2018-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/mi_ref_changeable/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/mi_ref_changeable/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/mi_ref_changeable/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/mi_ref_changeable/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2018-2020 Free Software Foundation, Inc. +-- Copyright 2018-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/mi_ref_changeable/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/mi_ref_changeable/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/mi_ref_changeable/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/mi_ref_changeable/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2018-2020 Free Software Foundation, Inc. +-- Copyright 2018-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/mi_ref_changeable.exp gdb-10.2/gdb/testsuite/gdb.ada/mi_ref_changeable.exp --- gdb-9.1/gdb/testsuite/gdb.ada/mi_ref_changeable.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/mi_ref_changeable.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2018-2020 Free Software Foundation, Inc. +# Copyright 2018-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo_rb20_056 if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/mi_string_access/bar.adb gdb-10.2/gdb/testsuite/gdb.ada/mi_string_access/bar.adb --- gdb-9.1/gdb/testsuite/gdb.ada/mi_string_access/bar.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/mi_string_access/bar.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2018-2020 Free Software Foundation, Inc. +-- Copyright 2018-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/mi_string_access/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/mi_string_access/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/mi_string_access/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/mi_string_access/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2018-2020 Free Software Foundation, Inc. +-- Copyright 2018-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/mi_string_access/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/mi_string_access/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/mi_string_access/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/mi_string_access/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2018-2020 Free Software Foundation, Inc. +-- Copyright 2018-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/mi_string_access.exp gdb-10.2/gdb/testsuite/gdb.ada/mi_string_access.exp --- gdb-9.1/gdb/testsuite/gdb.ada/mi_string_access.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/mi_string_access.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2018-2020 Free Software Foundation, Inc. +# Copyright 2018-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile bar if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/mi_task_arg/task_switch.adb gdb-10.2/gdb/testsuite/gdb.ada/mi_task_arg/task_switch.adb --- gdb-9.1/gdb/testsuite/gdb.ada/mi_task_arg/task_switch.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/mi_task_arg/task_switch.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2011-2020 Free Software Foundation, Inc. +-- Copyright 2011-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/mi_task_arg.exp gdb-10.2/gdb/testsuite/gdb.ada/mi_task_arg.exp --- gdb-9.1/gdb/testsuite/gdb.ada/mi_task_arg.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/mi_task_arg.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile task_switch if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug additional_flags=-gnata ]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/mi_task_info/task_switch.adb gdb-10.2/gdb/testsuite/gdb.ada/mi_task_info/task_switch.adb --- gdb-9.1/gdb/testsuite/gdb.ada/mi_task_info/task_switch.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/mi_task_info/task_switch.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2011-2020 Free Software Foundation, Inc. +-- Copyright 2011-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/mi_task_info.exp gdb-10.2/gdb/testsuite/gdb.ada/mi_task_info.exp --- gdb-9.1/gdb/testsuite/gdb.ada/mi_task_info.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/mi_task_info.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile task_switch if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug additional_flags=-gnata ]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/mi_var_access/mi_access.adb gdb-10.2/gdb/testsuite/gdb.ada/mi_var_access/mi_access.adb --- gdb-9.1/gdb/testsuite/gdb.ada/mi_var_access/mi_access.adb 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/mi_var_access/mi_access.adb 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,37 @@ +-- Copyright 2020-2021 Free Software Foundation, Inc. +-- +-- This program is free software; you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation; either version 3 of the License, or +-- (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see <http://www.gnu.org/licenses/>. + +with Pck; use Pck; + +procedure Mi_Access is + A_String : String (3 .. 5) := "345"; -- STOP + A_String_Access : String_Access; + A_Pointer : Pointer; +begin + Do_Nothing (A_String'Address); + A_String (4) := '6'; + A_String_Access := Copy (A_String); + A_Pointer.P := A_String_Access; + Do_Nothing (A_String_Access'Address); -- STOP2 + A_String_Access (4) := 'a'; + Do_Nothing (A_Pointer'Address); + A_String_Access := Copy("Hi"); + A_Pointer.P := A_String_Access; + Do_Nothing (A_String_Access'Address); + A_String_Access := null; + A_Pointer.P := null; + Do_Nothing (A_Pointer'Address); -- STOP3 + Do_Nothing (A_String'Address); +end Mi_Access; diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/mi_var_access/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/mi_var_access/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/mi_var_access/pck.adb 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/mi_var_access/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,26 @@ +-- Copyright 2020-2021 Free Software Foundation, Inc. +-- +-- This program is free software; you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation; either version 3 of the License, or +-- (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see <http://www.gnu.org/licenses/>. + +package body Pck is + function Copy (S : String) return String_Access is + begin + return new String'(S); + end Copy; + + procedure Do_Nothing (A : System.Address) is + begin + null; + end Do_Nothing; +end Pck; diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/mi_var_access/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/mi_var_access/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/mi_var_access/pck.ads 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/mi_var_access/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,23 @@ +-- Copyright 2020-2021 Free Software Foundation, Inc. +-- +-- This program is free software; you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation; either version 3 of the License, or +-- (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see <http://www.gnu.org/licenses/>. + +with System; +package Pck is + type String_Access is access all String; + type Pointer is record P : String_Access; end record; + + function Copy (S : String) return String_Access; + procedure Do_Nothing (A : System.Address); +end Pck; diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/mi_var_access.exp gdb-10.2/gdb/testsuite/gdb.ada/mi_var_access.exp --- gdb-9.1/gdb/testsuite/gdb.ada/mi_var_access.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/mi_var_access.exp 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,74 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +load_lib "ada.exp" + +if {[skip_ada_tests]} { + return -1 +} + +standard_ada_testfile mi_access + +load_lib mi-support.exp +set MIFLAGS "-i=mi" + +if {[gdb_compile_ada "${srcfile}" "${binfile}" executable debug] != "" } { + return -1 +} + +if {[mi_gdb_start]} { + continue +} + +mi_delete_breakpoints +mi_gdb_reinitialize_dir $srcdir/$subdir +mi_gdb_load ${binfile} + +if ![mi_run_to_main] then { + fail "cannot run to main, testcase aborted" + return 0 +} + +set bp_location [gdb_get_line_number "STOP" ${testdir}/mi_access.adb] +mi_continue_to_line \ + "mi_access.adb:$bp_location" \ + "stop at start of mi_access" + +# The bug was that creating a varobj for A_String_Access would crash. +mi_gdb_test "-var-create A_String_Access * A_String_Access" \ + "\\^done,name=\"A_String_Access\",numchild=\"1\",.*" \ + "Create varobj" + +set bp_location [gdb_get_line_number "STOP2" ${testdir}/mi_access.adb] +mi_continue_to_line \ + "mi_access.adb:$bp_location" \ + "stop at stop 2" + +mi_gdb_test "-var-update A_String_Access" \ + [string_to_regexp {^done,changelist=[{name="A_String_Access",in_scope="true",type_changed="false",has_more="0"}]}] \ + "update at stop 2" + +mi_gdb_test "-var-list-children A_String_Access" \ + [string_to_regexp {^done,numchild="1",children=[child={name="A_String_Access.A_String_Access.all",exp="A_String_Access.all",numchild="3",type="array (3 .. 5) of character",thread-id="1"}],has_more="0"}] \ + "list children at stop 2" + +set bp_location [gdb_get_line_number "STOP3" ${testdir}/mi_access.adb] +mi_continue_to_line \ + "mi_access.adb:$bp_location" \ + "stop at stop 3" + +mi_gdb_test "-var-update A_String_Access" \ + [string_to_regexp {^done,changelist=[{name="A_String_Access",in_scope="true",type_changed="true",new_type="pck.string_access",new_num_children="0",has_more="0"}]}] \ + "update at stop 3" diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/mi_var_array/bar.adb gdb-10.2/gdb/testsuite/gdb.ada/mi_var_array/bar.adb --- gdb-9.1/gdb/testsuite/gdb.ada/mi_var_array/bar.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/mi_var_array/bar.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2015-2020 Free Software Foundation, Inc. +-- Copyright 2015-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/mi_var_array/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/mi_var_array/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/mi_var_array/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/mi_var_array/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2015-2020 Free Software Foundation, Inc. +-- Copyright 2015-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/mi_var_array/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/mi_var_array/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/mi_var_array/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/mi_var_array/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2015-2020 Free Software Foundation, Inc. +-- Copyright 2015-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/mi_var_array.exp gdb-10.2/gdb/testsuite/gdb.ada/mi_var_array.exp --- gdb-9.1/gdb/testsuite/gdb.ada/mi_var_array.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/mi_var_array.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,38 +15,43 @@ load_lib "ada.exp" -standard_ada_testfile bar +if { [skip_ada_tests] } { return -1 } -if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug]] != "" } { - return -1 -} +standard_ada_testfile bar load_lib mi-support.exp set MIFLAGS "-i=mi" -gdb_exit -if [mi_gdb_start] { - continue +foreach_with_prefix scenario {none all minimal} { + set flags {debug} + if {$scenario != "none"} { + lappend flags additional_flags=-fgnat-encodings=$scenario + } + + if {[gdb_compile_ada "${srcfile}" "${binfile}" executable $flags] != "" } { + return -1 + } + + gdb_exit + if [mi_gdb_start] { + continue + } + + mi_delete_breakpoints + mi_gdb_reinitialize_dir $srcdir/$subdir + mi_gdb_load ${binfile} + + if ![mi_run_to_main] then { + fail "cannot run to main, testcase aborted" + return 0 + } + + set bp_location [gdb_get_line_number "STOP" ${testdir}/bar.adb] + mi_continue_to_line \ + "bar.adb:$bp_location" \ + "stop at start of main Ada procedure" + + mi_gdb_test "-var-create vta * vta" \ + "\\^done,name=\"vta\",numchild=\"0\",.*" \ + "create bt varobj" } - -mi_delete_breakpoints -mi_gdb_reinitialize_dir $srcdir/$subdir -mi_gdb_load ${binfile} - -if ![mi_run_to_main] then { - fail "cannot run to main, testcase aborted" - return 0 -} - -set bp_location [gdb_get_line_number "STOP" ${testdir}/bar.adb] -mi_continue_to_line \ - "bar.adb:$bp_location" \ - "stop at start of main Ada procedure" - -mi_gdb_test "-var-create vta * vta" \ - "\\^done,name=\"vta\",numchild=\"2\",.*" \ - "create bt varobj" - -mi_gdb_test "-var-list-children vta" \ - "\\^done,numchild=\"2\",children=\\\[child={name=\"vta.n\",exp=\"n\",numchild=\"0\",type=\"bar\\.int\",thread-id=\"$decimal\"},child={name=\"vta.f\",exp=\"f\",numchild=\"0\",type=\"array \\(1 .. n\\) of character\",thread-id=\"$decimal\"}\\\],.*" \ - "list vta's children" diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/mi_variant/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/mi_variant/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/mi_variant/pck.ads 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/mi_variant/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,54 @@ +-- Copyright 2020-2021 Free Software Foundation, Inc. +-- +-- This program is free software; you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation; either version 3 of the License, or +-- (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see <http://www.gnu.org/licenses/>. + +package Pck is + + type Rec_Type (C : Character := 'd') is record + case C is + when Character'First => X_First : Integer; + when Character'Val (127) => X_127 : Integer; + when Character'Val (128) => X_128 : Integer; + when Character'Last => X_Last : Integer; + when others => null; + end case; + end record; + + type Second_Type (I : Integer) is record + One: Integer; + case I is + when -5 .. 5 => + X : Integer; + when others => + Y : Integer; + end case; + end record; + + type Nested_And_Variable (One, Two: Integer) is record + Str : String (1 .. One); + case One is + when 0 => + null; + when others => + OneValue : Integer; + Str2 : String (1 .. Two); + case Two is + when 0 => + null; + when others => + TwoValue : Integer; + end case; + end case; + end record; +end Pck; diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/mi_variant/pkg.adb gdb-10.2/gdb/testsuite/gdb.ada/mi_variant/pkg.adb --- gdb-9.1/gdb/testsuite/gdb.ada/mi_variant/pkg.adb 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/mi_variant/pkg.adb 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,28 @@ +-- Copyright 2020-2021 Free Software Foundation, Inc. +-- +-- This program is free software; you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation; either version 3 of the License, or +-- (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see <http://www.gnu.org/licenses/>. + +with Pck; use Pck; + +procedure Pkg is + + R : Rec_Type; + +begin + R := (C => 'd'); + null; -- STOP + + R := (C => Character'First, X_First => 27); + null; -- STOP2 +end Pkg; diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/mi_variant.exp gdb-10.2/gdb/testsuite/gdb.ada/mi_variant.exp --- gdb-9.1/gdb/testsuite/gdb.ada/mi_variant.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/mi_variant.exp 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,67 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +load_lib "ada.exp" +load_lib "gdb-python.exp" + +if { [skip_ada_tests] } { return -1 } + +standard_ada_testfile pkg + +load_lib mi-support.exp +set MIFLAGS "-i=mi" + +foreach_with_prefix scenario {none all minimal} { + set flags {debug} + if {$scenario != "none"} { + lappend flags additional_flags=-fgnat-encodings=$scenario + } + + if {[gdb_compile_ada "${srcfile}" "${binfile}" executable $flags] != ""} { + return -1 + } + + gdb_exit + if [mi_gdb_start] { + continue + } + + mi_delete_breakpoints + mi_gdb_reinitialize_dir $srcdir/$subdir + mi_gdb_load ${binfile} + + if ![mi_run_to_main] then { + fail "cannot run to main, testcase aborted" + return 0 + } + + set bp_location [gdb_get_line_number "STOP" ${testdir}/pkg.adb] + mi_continue_to_line \ + "pkg.adb:$bp_location" \ + "stop at start of main Ada procedure" + + mi_gdb_test "-var-create r * r" \ + "\\^done,name=\"r\",numchild=\"1\",.*" \ + "create r varobj" + + set bp_location [gdb_get_line_number "STOP2" ${testdir}/pkg.adb] + mi_continue_to_line \ + "pkg.adb:$bp_location" \ + "stop at second breakpoint" + + mi_gdb_test "-var-update 1 r" \ + "\\^done.*name=\"r\",.*new_num_children=\"2\",.*" \ + "update r varobj" +} diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/mi_var_union/bar.adb gdb-10.2/gdb/testsuite/gdb.ada/mi_var_union/bar.adb --- gdb-9.1/gdb/testsuite/gdb.ada/mi_var_union/bar.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/mi_var_union/bar.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2018-2020 Free Software Foundation, Inc. +-- Copyright 2018-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/mi_var_union/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/mi_var_union/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/mi_var_union/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/mi_var_union/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2018-2020 Free Software Foundation, Inc. +-- Copyright 2018-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/mi_var_union/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/mi_var_union/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/mi_var_union/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/mi_var_union/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2018-2020 Free Software Foundation, Inc. +-- Copyright 2018-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/mi_var_union.exp gdb-10.2/gdb/testsuite/gdb.ada/mi_var_union.exp --- gdb-9.1/gdb/testsuite/gdb.ada/mi_var_union.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/mi_var_union.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2018-2020 Free Software Foundation, Inc. +# Copyright 2018-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,40 +15,49 @@ load_lib "ada.exp" -standard_ada_testfile bar +if { [skip_ada_tests] } { return -1 } -if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug]] != "" } { - return -1 -} +standard_ada_testfile bar load_lib mi-support.exp set MIFLAGS "-i=mi" -gdb_exit -if [mi_gdb_start] { - continue -} - set float "\\-?((\[0-9\]+(\\.\[0-9\]+)?(e\[-+\]\[0-9\]+)?)|(nan\\($hex\\)))" -mi_delete_breakpoints -mi_gdb_reinitialize_dir $srcdir/$subdir -mi_gdb_load ${binfile} - -if ![mi_run_to_main] then { - fail "cannot run to main, testcase aborted" - return 0 +foreach_with_prefix scenario {none all minimal} { + set flags {debug} + if {$scenario != "none"} { + lappend flags additional_flags=-fgnat-encodings=$scenario + } + + if {[gdb_compile_ada "${srcfile}" "${binfile}" executable $flags] != "" } { + return -1 + } + + gdb_exit + if [mi_gdb_start] { + continue + } + + mi_delete_breakpoints + mi_gdb_reinitialize_dir $srcdir/$subdir + mi_gdb_load ${binfile} + + if ![mi_run_to_main] then { + fail "cannot run to main, testcase aborted" + return 0 + } + + set bp_location [gdb_get_line_number "STOP" ${testdir}/bar.adb] + mi_continue_to_line \ + "bar.adb:$bp_location" \ + "stop at start of main Ada procedure" + + mi_gdb_test "-var-create var1 * Ut" \ + "\\^done,name=\"var1\",numchild=\"2\",.*" \ + "Create var1 varobj" + + mi_gdb_test "-var-list-children 1 var1" \ + "\\^done,numchild=\"2\",children=\\\[child={name=\"var1.b\",exp=\"b\",numchild=\"0\",value=\"3\",type=\"integer\",thread-id=\"$decimal\"},child={name=\"var1.c\",exp=\"c\",numchild=\"0\",value=\"$float\",type=\"float\",thread-id=\"$decimal\"}\\\],has_more=\"0\"" \ + "list var1's children" } - -set bp_location [gdb_get_line_number "STOP" ${testdir}/bar.adb] -mi_continue_to_line \ - "bar.adb:$bp_location" \ - "stop at start of main Ada procedure" - -mi_gdb_test "-var-create var1 * Ut" \ - "\\^done,name=\"var1\",numchild=\"2\",.*" \ - "Create var1 varobj" - -mi_gdb_test "-var-list-children 1 var1" \ - "\\^done,numchild=\"2\",children=\\\[child={name=\"var1.b\",exp=\"b\",numchild=\"0\",value=\"3\",type=\"integer\",thread-id=\"$decimal\"},child={name=\"var1.c\",exp=\"c\",numchild=\"0\",value=\"$float\",type=\"float\",thread-id=\"$decimal\"}\\\],has_more=\"0\"" \ - "list var1's children" diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/mod_from_name/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/mod_from_name/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/mod_from_name/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/mod_from_name/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2009-2020 Free Software Foundation, Inc. +-- Copyright 2009-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/mod_from_name.exp gdb-10.2/gdb/testsuite/gdb.ada/mod_from_name.exp --- gdb-9.1/gdb/testsuite/gdb.ada/mod_from_name.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/mod_from_name.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2009-2020 Free Software Foundation, Inc. +# Copyright 2009-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/n_arr_bound/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/n_arr_bound/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/n_arr_bound/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/n_arr_bound/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2014-2020 Free Software Foundation, Inc. +-- Copyright 2014-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/n_arr_bound/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/n_arr_bound/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/n_arr_bound/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/n_arr_bound/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2014-2020 Free Software Foundation, Inc. +-- Copyright 2014-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/n_arr_bound/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/n_arr_bound/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/n_arr_bound/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/n_arr_bound/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2014-2020 Free Software Foundation, Inc. +-- Copyright 2014-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/n_arr_bound.exp gdb-10.2/gdb/testsuite/gdb.ada/n_arr_bound.exp --- gdb-9.1/gdb/testsuite/gdb.ada/n_arr_bound.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/n_arr_bound.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/nested/hello.adb gdb-10.2/gdb/testsuite/gdb.ada/nested/hello.adb --- gdb-9.1/gdb/testsuite/gdb.ada/nested/hello.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/nested/hello.adb 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2007-2020 Free Software Foundation, Inc. +-- Copyright 2007-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/nested.exp gdb-10.2/gdb/testsuite/gdb.ada/nested.exp --- gdb-9.1/gdb/testsuite/gdb.ada/nested.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/nested.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2007-2020 Free Software Foundation, Inc. +# Copyright 2007-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile hello if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/notcplusplus/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/notcplusplus/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/notcplusplus/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/notcplusplus/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2018-2020 Free Software Foundation, Inc. +-- Copyright 2018-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/notcplusplus/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/notcplusplus/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/notcplusplus/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/notcplusplus/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2018-2020 Free Software Foundation, Inc. +-- Copyright 2018-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/notcplusplus/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/notcplusplus/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/notcplusplus/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/notcplusplus/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2018-2020 Free Software Foundation, Inc. +-- Copyright 2018-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/notcplusplus/ver.ads gdb-10.2/gdb/testsuite/gdb.ada/notcplusplus/ver.ads --- gdb-9.1/gdb/testsuite/gdb.ada/notcplusplus/ver.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/notcplusplus/ver.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2018-2020 Free Software Foundation, Inc. +-- Copyright 2018-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/notcplusplus.exp gdb-10.2/gdb/testsuite/gdb.ada/notcplusplus.exp --- gdb-9.1/gdb/testsuite/gdb.ada/notcplusplus.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/notcplusplus.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2018-2020 Free Software Foundation, Inc. +# Copyright 2018-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/null_array/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/null_array/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/null_array/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/null_array/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2008-2020 Free Software Foundation, Inc. +-- Copyright 2008-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/null_array/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/null_array/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/null_array/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/null_array/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2008-2020 Free Software Foundation, Inc. +-- Copyright 2008-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/null_array/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/null_array/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/null_array/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/null_array/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2008-2020 Free Software Foundation, Inc. +-- Copyright 2008-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/null_array.exp gdb-10.2/gdb/testsuite/gdb.ada/null_array.exp --- gdb-9.1/gdb/testsuite/gdb.ada/null_array.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/null_array.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/null_record/bar.adb gdb-10.2/gdb/testsuite/gdb.ada/null_record/bar.adb --- gdb-9.1/gdb/testsuite/gdb.ada/null_record/bar.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/null_record/bar.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2004-2020 Free Software Foundation, Inc. +-- Copyright 2004-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/null_record/bar.ads gdb-10.2/gdb/testsuite/gdb.ada/null_record/bar.ads --- gdb-9.1/gdb/testsuite/gdb.ada/null_record/bar.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/null_record/bar.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2004-2020 Free Software Foundation, Inc. +-- Copyright 2004-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/null_record/null_record.adb gdb-10.2/gdb/testsuite/gdb.ada/null_record/null_record.adb --- gdb-9.1/gdb/testsuite/gdb.ada/null_record/null_record.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/null_record/null_record.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2004-2020 Free Software Foundation, Inc. +-- Copyright 2004-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/null_record.exp gdb-10.2/gdb/testsuite/gdb.ada/null_record.exp --- gdb-9.1/gdb/testsuite/gdb.ada/null_record.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/null_record.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2004-2020 Free Software Foundation, Inc. +# Copyright 2004-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/O2_float_param/callee.adb gdb-10.2/gdb/testsuite/gdb.ada/O2_float_param/callee.adb --- gdb-9.1/gdb/testsuite/gdb.ada/O2_float_param/callee.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/O2_float_param/callee.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2013-2020 Free Software Foundation, Inc. +-- Copyright 2013-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/O2_float_param/callee.ads gdb-10.2/gdb/testsuite/gdb.ada/O2_float_param/callee.ads --- gdb-9.1/gdb/testsuite/gdb.ada/O2_float_param/callee.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/O2_float_param/callee.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2013-2020 Free Software Foundation, Inc. +-- Copyright 2013-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/O2_float_param/caller.adb gdb-10.2/gdb/testsuite/gdb.ada/O2_float_param/caller.adb --- gdb-9.1/gdb/testsuite/gdb.ada/O2_float_param/caller.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/O2_float_param/caller.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2013-2020 Free Software Foundation, Inc. +-- Copyright 2013-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/O2_float_param/caller.ads gdb-10.2/gdb/testsuite/gdb.ada/O2_float_param/caller.ads --- gdb-9.1/gdb/testsuite/gdb.ada/O2_float_param/caller.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/O2_float_param/caller.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2013-2020 Free Software Foundation, Inc. +-- Copyright 2013-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/O2_float_param/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/O2_float_param/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/O2_float_param/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/O2_float_param/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2013-2020 Free Software Foundation, Inc. +-- Copyright 2013-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/O2_float_param/io.adb gdb-10.2/gdb/testsuite/gdb.ada/O2_float_param/io.adb --- gdb-9.1/gdb/testsuite/gdb.ada/O2_float_param/io.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/O2_float_param/io.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2013-2020 Free Software Foundation, Inc. +-- Copyright 2013-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/O2_float_param/io.ads gdb-10.2/gdb/testsuite/gdb.ada/O2_float_param/io.ads --- gdb-9.1/gdb/testsuite/gdb.ada/O2_float_param/io.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/O2_float_param/io.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2013-2020 Free Software Foundation, Inc. +-- Copyright 2013-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/O2_float_param.exp gdb-10.2/gdb/testsuite/gdb.ada/O2_float_param.exp --- gdb-9.1/gdb/testsuite/gdb.ada/O2_float_param.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/O2_float_param.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/operator_bp/ops.adb gdb-10.2/gdb/testsuite/gdb.ada/operator_bp/ops.adb --- gdb-9.1/gdb/testsuite/gdb.ada/operator_bp/ops.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/operator_bp/ops.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2012-2020 Free Software Foundation, Inc. +-- Copyright 2012-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/operator_bp/ops.ads gdb-10.2/gdb/testsuite/gdb.ada/operator_bp/ops.ads --- gdb-9.1/gdb/testsuite/gdb.ada/operator_bp/ops.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/operator_bp/ops.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2012-2020 Free Software Foundation, Inc. +-- Copyright 2012-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/operator_bp/ops_test.adb gdb-10.2/gdb/testsuite/gdb.ada/operator_bp/ops_test.adb --- gdb-9.1/gdb/testsuite/gdb.ada/operator_bp/ops_test.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/operator_bp/ops_test.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2012-2020 Free Software Foundation, Inc. +-- Copyright 2012-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/operator_bp.exp gdb-10.2/gdb/testsuite/gdb.ada/operator_bp.exp --- gdb-9.1/gdb/testsuite/gdb.ada/operator_bp.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/operator_bp.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -33,16 +33,22 @@ # Set breakpoints for all operators, using just the operator name in quotes. +set bp_re "Breakpoint $decimal at $hex" foreach op { "+" "-" } { set op_re [string_to_regexp $op] - gdb_test "break \"$op\"" \ - "Breakpoint $decimal at $hex: \"$op_re\"\. \\(2 locations\\)" + gdb_test "break \"$op\"" "$bp_re: \"$op_re\"\. \\($decimal locations\\).*" } foreach op { "*" "/" "mod" "rem" "**" "<" "<=" ">" ">=" "=" "and" "or" "xor" "&" "abs" "not"} { set op_re [string_to_regexp $op] - gdb_test "break \"$op\"" \ - "Breakpoint $decimal at $hex: file .*ops.adb, line $decimal." + gdb_test_multiple "break \"$op\"" "" { + -re -wrap "$bp_re: file .*ops.adb, line $decimal." { + pass $gdb_test_name + } + -re -wrap "$bp_re: \"$op_re\"\. \\($decimal locations\\).*" { + pass $gdb_test_name + } + } } # Make sure we stop correctly in each operator function. diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/optim_drec/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/optim_drec/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/optim_drec/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/optim_drec/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2012-2020 Free Software Foundation, Inc. +-- Copyright 2012-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/optim_drec.exp gdb-10.2/gdb/testsuite/gdb.ada/optim_drec.exp --- gdb-9.1/gdb/testsuite/gdb.ada/optim_drec.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/optim_drec.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/out_of_line_in_inlined/bar.adb gdb-10.2/gdb/testsuite/gdb.ada/out_of_line_in_inlined/bar.adb --- gdb-9.1/gdb/testsuite/gdb.ada/out_of_line_in_inlined/bar.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/out_of_line_in_inlined/bar.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2015-2020 Free Software Foundation, Inc. +-- Copyright 2015-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/out_of_line_in_inlined/bar.ads gdb-10.2/gdb/testsuite/gdb.ada/out_of_line_in_inlined/bar.ads --- gdb-9.1/gdb/testsuite/gdb.ada/out_of_line_in_inlined/bar.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/out_of_line_in_inlined/bar.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2015-2020 Free Software Foundation, Inc. +-- Copyright 2015-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/out_of_line_in_inlined/foo_o224_021.adb gdb-10.2/gdb/testsuite/gdb.ada/out_of_line_in_inlined/foo_o224_021.adb --- gdb-9.1/gdb/testsuite/gdb.ada/out_of_line_in_inlined/foo_o224_021.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/out_of_line_in_inlined/foo_o224_021.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2015-2020 Free Software Foundation, Inc. +-- Copyright 2015-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/out_of_line_in_inlined.exp gdb-10.2/gdb/testsuite/gdb.ada/out_of_line_in_inlined.exp --- gdb-9.1/gdb/testsuite/gdb.ada/out_of_line_in_inlined.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/out_of_line_in_inlined.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo_o224_021 if {[gdb_compile_ada "${srcfile}" "${binfile}" executable {debug optimize=-O2}] != ""} { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/packed_array/pa.adb gdb-10.2/gdb/testsuite/gdb.ada/packed_array/pa.adb --- gdb-9.1/gdb/testsuite/gdb.ada/packed_array/pa.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/packed_array/pa.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2005-2020 Free Software Foundation, Inc. +-- Copyright 2005-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/packed_array/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/packed_array/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/packed_array/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/packed_array/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright (C) 2011-2020 Free Software Foundation, Inc. +-- Copyright (C) 2011-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/packed_array/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/packed_array/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/packed_array/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/packed_array/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright (C) 2011-2020 Free Software Foundation, Inc. +-- Copyright (C) 2011-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/packed_array_assign/aggregates.adb gdb-10.2/gdb/testsuite/gdb.ada/packed_array_assign/aggregates.adb --- gdb-9.1/gdb/testsuite/gdb.ada/packed_array_assign/aggregates.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/packed_array_assign/aggregates.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2018-2020 Free Software Foundation, Inc. +-- Copyright 2018-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/packed_array_assign/aggregates.ads gdb-10.2/gdb/testsuite/gdb.ada/packed_array_assign/aggregates.ads --- gdb-9.1/gdb/testsuite/gdb.ada/packed_array_assign/aggregates.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/packed_array_assign/aggregates.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2018-2020 Free Software Foundation, Inc. +-- Copyright 2018-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/packed_array_assign/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/packed_array_assign/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/packed_array_assign/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/packed_array_assign/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2018-2020 Free Software Foundation, Inc. +-- Copyright 2018-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/packed_array_assign/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/packed_array_assign/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/packed_array_assign/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/packed_array_assign/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2018-2020 Free Software Foundation, Inc. +-- Copyright 2018-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/packed_array_assign/tester.adb gdb-10.2/gdb/testsuite/gdb.ada/packed_array_assign/tester.adb --- gdb-9.1/gdb/testsuite/gdb.ada/packed_array_assign/tester.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/packed_array_assign/tester.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2018-2020 Free Software Foundation, Inc. +-- Copyright 2018-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/packed_array_assign.exp gdb-10.2/gdb/testsuite/gdb.ada/packed_array_assign.exp --- gdb-9.1/gdb/testsuite/gdb.ada/packed_array_assign.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/packed_array_assign.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2018-2020 Free Software Foundation, Inc. +# Copyright 2018-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile tester if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug]] != "" } { @@ -27,7 +29,8 @@ gdb_test \ "print pra := ((packed_array_assign_x => 2, packed_array_assign_y => 0, packed_array_assign_w => 17), pr, (packed_array_assign_x => 7, packed_array_assign_y => 1, packed_array_assign_w => 23))" \ - " = \\(\\(packed_array_assign_w => 17, packed_array_assign_x => 2, packed_array_assign_y => 0\\), \\(packed_array_assign_w => 104, packed_array_assign_x => 2, packed_array_assign_y => 3\\), \\(packed_array_assign_w => 23, packed_array_assign_x => 7, packed_array_assign_y => 1\\)\\)" + " = \\(\\(packed_array_assign_w => 17, packed_array_assign_x => 2, packed_array_assign_y => 0\\), \\(packed_array_assign_w => 104, packed_array_assign_x => 2, packed_array_assign_y => 3\\), \\(packed_array_assign_w => 23, packed_array_assign_x => 7, packed_array_assign_y => 1\\)\\)" \ + "value of pra" gdb_test "print pra(1) := pr" \ " = \\(packed_array_assign_w => 104, packed_array_assign_x => 2, packed_array_assign_y => 3\\)" @@ -35,4 +38,5 @@ " = \\(packed_array_assign_w => 104, packed_array_assign_x => 2, packed_array_assign_y => 3\\)" gdb_test "print npr := (q000 => 3, r000 => (packed_array_assign_x => 6, packed_array_assign_y => 1, packed_array_assign_w => 117))" \ - " = \\(q000 => 3, r000 => \\(packed_array_assign_w => 117, packed_array_assign_x => 6, packed_array_assign_y => 1\\)\\)" + " = \\(q000 => 3, r000 => \\(packed_array_assign_w => 117, packed_array_assign_x => 6, packed_array_assign_y => 1\\)\\)" \ + "value of npr" diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/packed_array.exp gdb-10.2/gdb/testsuite/gdb.ada/packed_array.exp --- gdb-9.1/gdb/testsuite/gdb.ada/packed_array.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/packed_array.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2005-2020 Free Software Foundation, Inc. +# Copyright 2005-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/packed_tagged/comp_bug.adb gdb-10.2/gdb/testsuite/gdb.ada/packed_tagged/comp_bug.adb --- gdb-9.1/gdb/testsuite/gdb.ada/packed_tagged/comp_bug.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/packed_tagged/comp_bug.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2008-2020 Free Software Foundation, Inc. +-- Copyright 2008-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/packed_tagged.exp gdb-10.2/gdb/testsuite/gdb.ada/packed_tagged.exp --- gdb-9.1/gdb/testsuite/gdb.ada/packed_tagged.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/packed_tagged.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,26 +15,75 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile comp_bug -if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug]] != "" } { - return -1 +# Note we don't test the "none" (no -fgnat-encodings option) scenario +# here, because "all" and "minimal" cover the cases, and this way we +# don't have to update the test when gnat changes its default. +foreach_with_prefix scenario {all minimal} { + set flags {debug} + if {$scenario != "none"} { + lappend flags additional_flags=-fgnat-encodings=$scenario + } + + if {[gdb_compile_ada "${srcfile}" "${binfile}" executable $flags] != ""} { + return -1 + } + + clean_restart ${testfile} + + set bp_location [gdb_get_line_number "STOP" ${testdir}/comp_bug.adb] + runto "comp_bug.adb:$bp_location" + + set pass_re \ + "= \\(exists => true, value => 10\\)" + # There is a compiler bug that causes this output. + set kfail_re \ + "= \\(exists => true\\)" + + gdb_test_multiple "print x" "" { + -re -wrap $pass_re { + pass $gdb_test_name + } + -re -wrap $kfail_re { + if {$scenario == "minimal"} { + setup_xfail "gnat compiler bug" *-*-* + } + fail $gdb_test_name + } + } + + set pass_re \ + [multi_line "type = record" \ + " exists: (boolean|range false \\.\\. true);" \ + " case exists is" \ + " when true =>" \ + " value: range 0 \\.\\. 255;" \ + " when others => null;" \ + " end case;" \ + "end record" ] + # There is a compiler bug that causes this output. + set kfail_re \ + [multi_line "type = record" \ + " exists: (boolean|range false \\.\\. true);" \ + " case \\? is" \ + " when others =>" \ + " value: range 0 \\.\\. 255;" \ + " when others => null;" \ + " end case;" \ + "end record" ] + + gdb_test_multiple "ptype x" "" { + -re -wrap $pass_re { + pass $gdb_test_name + } + -re -wrap $kfail_re { + if {$scenario == "minimal"} { + setup_xfail "gnat compiler bug" *-*-* + } + fail $gdb_test_name + } + } } - -clean_restart ${testfile} - -set bp_location [gdb_get_line_number "STOP" ${testdir}/comp_bug.adb] -runto "comp_bug.adb:$bp_location" - -gdb_test "print x" \ - "= \\(exists => true, value => 10\\)" - -gdb_test "ptype x" \ - [multi_line "type = record" \ - " exists: (boolean|range false \\.\\. true);" \ - " case exists is" \ - " when true =>" \ - " value: range 0 \\.\\. 255;" \ - " when others => null;" \ - " end case;" \ - "end record" ] diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/pckd_arr_ren/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/pckd_arr_ren/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/pckd_arr_ren/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/pckd_arr_ren/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2014-2020 Free Software Foundation, Inc. +-- Copyright 2014-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/pckd_arr_ren/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/pckd_arr_ren/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/pckd_arr_ren/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/pckd_arr_ren/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2014-2020 Free Software Foundation, Inc. +-- Copyright 2014-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/pckd_arr_ren/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/pckd_arr_ren/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/pckd_arr_ren/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/pckd_arr_ren/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2014-2020 Free Software Foundation, Inc. +-- Copyright 2014-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/pckd_arr_ren.exp gdb-10.2/gdb/testsuite/gdb.ada/pckd_arr_ren.exp --- gdb-9.1/gdb/testsuite/gdb.ada/pckd_arr_ren.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/pckd_arr_ren.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/pckd_neg/foo_o508_021.adb gdb-10.2/gdb/testsuite/gdb.ada/pckd_neg/foo_o508_021.adb --- gdb-9.1/gdb/testsuite/gdb.ada/pckd_neg/foo_o508_021.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/pckd_neg/foo_o508_021.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright (C) 2015-2020 Free Software Foundation, Inc. +-- Copyright (C) 2015-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/pckd_neg/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/pckd_neg/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/pckd_neg/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/pckd_neg/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright (C) 2015-2020 Free Software Foundation, Inc. +-- Copyright (C) 2015-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/pckd_neg/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/pckd_neg/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/pckd_neg/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/pckd_neg/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright (C) 2015-2020 Free Software Foundation, Inc. +-- Copyright (C) 2015-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/pckd_neg.exp gdb-10.2/gdb/testsuite/gdb.ada/pckd_neg.exp --- gdb-9.1/gdb/testsuite/gdb.ada/pckd_neg.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/pckd_neg.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/pkd_arr_elem/failure.adb gdb-10.2/gdb/testsuite/gdb.ada/pkd_arr_elem/failure.adb --- gdb-9.1/gdb/testsuite/gdb.ada/pkd_arr_elem/failure.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/pkd_arr_elem/failure.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2014-2020 Free Software Foundation, Inc. +-- Copyright 2014-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/pkd_arr_elem/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/pkd_arr_elem/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/pkd_arr_elem/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/pkd_arr_elem/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2014-2020 Free Software Foundation, Inc. +-- Copyright 2014-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/pkd_arr_elem/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/pkd_arr_elem/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/pkd_arr_elem/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/pkd_arr_elem/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2014-2020 Free Software Foundation, Inc. +-- Copyright 2014-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/pkd_arr_elem.exp gdb-10.2/gdb/testsuite/gdb.ada/pkd_arr_elem.exp --- gdb-9.1/gdb/testsuite/gdb.ada/pkd_arr_elem.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/pkd_arr_elem.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/pp-rec-component/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/pp-rec-component/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/pp-rec-component/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/pp-rec-component/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2014-2020 Free Software Foundation, Inc. +-- Copyright 2014-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/pp-rec-component/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/pp-rec-component/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/pp-rec-component/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/pp-rec-component/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2014-2020 Free Software Foundation, Inc. +-- Copyright 2014-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/pp-rec-component/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/pp-rec-component/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/pp-rec-component/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/pp-rec-component/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2014-2020 Free Software Foundation, Inc. +-- Copyright 2014-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/pp-rec-component.exp gdb-10.2/gdb/testsuite/gdb.ada/pp-rec-component.exp --- gdb-9.1/gdb/testsuite/gdb.ada/pp-rec-component.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/pp-rec-component.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/pp-rec-component.py gdb-10.2/gdb/testsuite/gdb.ada/pp-rec-component.py --- gdb-9.1/gdb/testsuite/gdb.ada/pp-rec-component.py 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/pp-rec-component.py 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2014-2020 Free Software Foundation, Inc. +# Copyright (C) 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/print_chars/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/print_chars/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/print_chars/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/print_chars/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2007-2020 Free Software Foundation, Inc. +-- Copyright 2007-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/print_chars/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/print_chars/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/print_chars/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/print_chars/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2007-2020 Free Software Foundation, Inc. +-- Copyright 2007-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/print_chars/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/print_chars/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/print_chars/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/print_chars/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2007-2020 Free Software Foundation, Inc. +-- Copyright 2007-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/print_chars.exp gdb-10.2/gdb/testsuite/gdb.ada/print_chars.exp --- gdb-9.1/gdb/testsuite/gdb.ada/print_chars.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/print_chars.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2007-2020 Free Software Foundation, Inc. +# Copyright 2007-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug additional_flags=-gnat05 ]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/print_pc.exp gdb-10.2/gdb/testsuite/gdb.ada/print_pc.exp --- gdb-9.1/gdb/testsuite/gdb.ada/print_pc.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/print_pc.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile dummy start if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/ptr_typedef/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/ptr_typedef/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/ptr_typedef/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/ptr_typedef/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2011-2020 Free Software Foundation, Inc. +-- Copyright 2011-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/ptr_typedef/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/ptr_typedef/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/ptr_typedef/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/ptr_typedef/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2011-2020 Free Software Foundation, Inc. +-- Copyright 2011-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/ptr_typedef/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/ptr_typedef/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/ptr_typedef/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/ptr_typedef/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2011-2020 Free Software Foundation, Inc. +-- Copyright 2011-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/ptr_typedef.exp gdb-10.2/gdb/testsuite/gdb.ada/ptr_typedef.exp --- gdb-9.1/gdb/testsuite/gdb.ada/ptr_typedef.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/ptr_typedef.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/ptype_arith_binop.exp gdb-10.2/gdb/testsuite/gdb.ada/ptype_arith_binop.exp --- gdb-9.1/gdb/testsuite/gdb.ada/ptype_arith_binop.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/ptype_arith_binop.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2009-2020 Free Software Foundation, Inc. +# Copyright 2009-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -13,6 +13,8 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. +if { [skip_ada_tests] } { return -1 } + gdb_exit gdb_start gdb_reinitialize_dir $srcdir/$subdir diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/ptype_array/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/ptype_array/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/ptype_array/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/ptype_array/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2019-2020 Free Software Foundation, Inc. +-- Copyright 2019-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/ptype_array/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/ptype_array/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/ptype_array/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/ptype_array/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2019-2020 Free Software Foundation, Inc. +-- Copyright 2019-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/ptype_array/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/ptype_array/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/ptype_array/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/ptype_array/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2019-2020 Free Software Foundation, Inc. +-- Copyright 2019-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/ptype_array.exp gdb-10.2/gdb/testsuite/gdb.ada/ptype_array.exp --- gdb-9.1/gdb/testsuite/gdb.ada/ptype_array.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/ptype_array.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug additional_flags=-gnat05 ]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/ptype_field/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/ptype_field/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/ptype_field/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/ptype_field/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2008-2020 Free Software Foundation, Inc. +-- Copyright 2008-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/ptype_field/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/ptype_field/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/ptype_field/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/ptype_field/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2008-2020 Free Software Foundation, Inc. +-- Copyright 2008-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/ptype_field/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/ptype_field/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/ptype_field/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/ptype_field/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2008-2020 Free Software Foundation, Inc. +-- Copyright 2008-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/ptype_field.exp gdb-10.2/gdb/testsuite/gdb.ada/ptype_field.exp --- gdb-9.1/gdb/testsuite/gdb.ada/ptype_field.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/ptype_field.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug additional_flags=-gnat05 ]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/ptype_tagged_param/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/ptype_tagged_param/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/ptype_tagged_param/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/ptype_tagged_param/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2010-2020 Free Software Foundation, Inc. +-- Copyright 2010-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/ptype_tagged_param/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/ptype_tagged_param/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/ptype_tagged_param/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/ptype_tagged_param/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2010-2020 Free Software Foundation, Inc. +-- Copyright 2010-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/ptype_tagged_param/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/ptype_tagged_param/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/ptype_tagged_param/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/ptype_tagged_param/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2010-2020 Free Software Foundation, Inc. +-- Copyright 2010-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/ptype_tagged_param.exp gdb-10.2/gdb/testsuite/gdb.ada/ptype_tagged_param.exp --- gdb-9.1/gdb/testsuite/gdb.ada/ptype_tagged_param.exp 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/ptype_tagged_param.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,20 +15,39 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } { return -1 } +set has_runtime_debug_info [gnat_runtime_has_debug_info] + clean_restart ${testfile} if ![runto "position_x" ] then { return -1 } -set eol "\[\r\n\]+" -set sp "\[ \t\]*" +# Identifying the runtime type of S can only be done when we have the debug +# info for the GNAT runtime. + +if { $has_runtime_debug_info } { + gdb_test "ptype s" \ + [multi_line \ + "type = <ref> new pck.shape with record" \ + " r: integer;" \ + "end record"] \ + "ptype s, with debug info" +} else { + gdb_test "ptype s" \ + [multi_line \ + "type = <ref> tagged record" \ + " x: integer;" \ + " y: integer;" \ + "end record" ] \ + "ptype s, without debug info" +} -gdb_test "ptype s" \ - "type = <ref> new pck.shape with record${eol}${sp}r: integer;${eol}end record" diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/ptype_union.c gdb-10.2/gdb/testsuite/gdb.ada/ptype_union.c --- gdb-9.1/gdb/testsuite/gdb.ada/ptype_union.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/ptype_union.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This test program is part of GDB, the GNU debugger. - Copyright 2019-2020 Free Software Foundation, Inc. + Copyright 2019-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/ptype_union.exp gdb-10.2/gdb/testsuite/gdb.ada/ptype_union.exp --- gdb-9.1/gdb/testsuite/gdb.ada/ptype_union.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/ptype_union.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -13,17 +13,14 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. +if { [skip_ada_tests] } { return -1 } + standard_testfile .c if {[prepare_for_testing "failed to prepare" ${testfile} ${srcfile}]} { return -1 } -if {[exec_has_index_section $binfile]} { - unsupported "Ada is not currently supported by the index (PR 24713)" - return -1 -} - # The test case is written in C, because it was easy to make the # required type there; but the bug itself only happens in Ada. gdb_test "set lang ada" "" diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/py_range/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/py_range/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/py_range/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/py_range/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2013-2020 Free Software Foundation, Inc. +-- Copyright 2013-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/py_range/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/py_range/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/py_range/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/py_range/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2007-2020 Free Software Foundation, Inc. +-- Copyright 2007-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/py_range/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/py_range/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/py_range/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/py_range/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2007-2020 Free Software Foundation, Inc. +-- Copyright 2007-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/py_range.exp gdb-10.2/gdb/testsuite/gdb.ada/py_range.exp --- gdb-9.1/gdb/testsuite/gdb.ada/py_range.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/py_range.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -16,6 +16,8 @@ load_lib "ada.exp" load_lib gdb-python.exp +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/py_taft/main.adb gdb-10.2/gdb/testsuite/gdb.ada/py_taft/main.adb --- gdb-9.1/gdb/testsuite/gdb.ada/py_taft/main.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/py_taft/main.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2019-2020 Free Software Foundation, Inc. +-- Copyright 2019-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/py_taft/pkg.adb gdb-10.2/gdb/testsuite/gdb.ada/py_taft/pkg.adb --- gdb-9.1/gdb/testsuite/gdb.ada/py_taft/pkg.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/py_taft/pkg.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2019-2020 Free Software Foundation, Inc. +-- Copyright 2019-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/py_taft/pkg.ads gdb-10.2/gdb/testsuite/gdb.ada/py_taft/pkg.ads --- gdb-9.1/gdb/testsuite/gdb.ada/py_taft/pkg.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/py_taft/pkg.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2019-2020 Free Software Foundation, Inc. +-- Copyright 2019-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/py_taft.exp gdb-10.2/gdb/testsuite/gdb.ada/py_taft.exp --- gdb-9.1/gdb/testsuite/gdb.ada/py_taft.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/py_taft.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -16,6 +16,8 @@ load_lib "ada.exp" load_lib gdb-python.exp +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile main if {[gdb_compile_ada "${srcfile}" "${binfile}" executable debug] != ""} { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/rdv_wait/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/rdv_wait/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/rdv_wait/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/rdv_wait/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2012-2020 Free Software Foundation, Inc. +-- Copyright 2012-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/rdv_wait/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/rdv_wait/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/rdv_wait/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/rdv_wait/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2012-2020 Free Software Foundation, Inc. +-- Copyright 2012-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/rdv_wait/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/rdv_wait/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/rdv_wait/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/rdv_wait/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2012-2020 Free Software Foundation, Inc. +-- Copyright 2012-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/rdv_wait.exp gdb-10.2/gdb/testsuite/gdb.ada/rdv_wait.exp --- gdb-9.1/gdb/testsuite/gdb.ada/rdv_wait.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/rdv_wait.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/rec_comp/bar_o203_012.adb gdb-10.2/gdb/testsuite/gdb.ada/rec_comp/bar_o203_012.adb --- gdb-9.1/gdb/testsuite/gdb.ada/rec_comp/bar_o203_012.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/rec_comp/bar_o203_012.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2015-2020 Free Software Foundation, Inc. +-- Copyright 2015-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/rec_comp/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/rec_comp/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/rec_comp/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/rec_comp/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2011-2020 Free Software Foundation, Inc. +-- Copyright 2011-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/rec_comp/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/rec_comp/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/rec_comp/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/rec_comp/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2011-2020 Free Software Foundation, Inc. +-- Copyright 2011-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/rec_comp.exp gdb-10.2/gdb/testsuite/gdb.ada/rec_comp.exp --- gdb-9.1/gdb/testsuite/gdb.ada/rec_comp.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/rec_comp.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile bar_o203_012 if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/rec_return/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/rec_return/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/rec_return/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/rec_return/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2010-2020 Free Software Foundation, Inc. +-- Copyright 2010-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/rec_return/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/rec_return/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/rec_return/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/rec_return/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2010-2020 Free Software Foundation, Inc. +-- Copyright 2010-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/rec_return/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/rec_return/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/rec_return/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/rec_return/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2010-2020 Free Software Foundation, Inc. +-- Copyright 2010-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/rec_return.exp gdb-10.2/gdb/testsuite/gdb.ada/rec_return.exp --- gdb-9.1/gdb/testsuite/gdb.ada/rec_return.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/rec_return.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/ref_param/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/ref_param/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/ref_param/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/ref_param/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2008-2020 Free Software Foundation, Inc. +-- Copyright 2008-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/ref_param/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/ref_param/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/ref_param/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/ref_param/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2008-2020 Free Software Foundation, Inc. +-- Copyright 2008-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/ref_param/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/ref_param/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/ref_param/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/ref_param/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2008-2020 Free Software Foundation, Inc. +-- Copyright 2008-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/ref_param.exp gdb-10.2/gdb/testsuite/gdb.ada/ref_param.exp --- gdb-9.1/gdb/testsuite/gdb.ada/ref_param.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/ref_param.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/ref_tick_size/p.adb gdb-10.2/gdb/testsuite/gdb.ada/ref_tick_size/p.adb --- gdb-9.1/gdb/testsuite/gdb.ada/ref_tick_size/p.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/ref_tick_size/p.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2008-2020 Free Software Foundation, Inc. +-- Copyright 2008-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/ref_tick_size/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/ref_tick_size/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/ref_tick_size/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/ref_tick_size/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2008-2020 Free Software Foundation, Inc. +-- Copyright 2008-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/ref_tick_size/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/ref_tick_size/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/ref_tick_size/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/ref_tick_size/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2008-2020 Free Software Foundation, Inc. +-- Copyright 2008-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/ref_tick_size.exp gdb-10.2/gdb/testsuite/gdb.ada/ref_tick_size.exp --- gdb-9.1/gdb/testsuite/gdb.ada/ref_tick_size.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/ref_tick_size.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile p if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/rename_subscript_param/pb30_012.adb gdb-10.2/gdb/testsuite/gdb.ada/rename_subscript_param/pb30_012.adb --- gdb-9.1/gdb/testsuite/gdb.ada/rename_subscript_param/pb30_012.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/rename_subscript_param/pb30_012.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2016-2020 Free Software Foundation, Inc. +-- Copyright 2016-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/rename_subscript_param/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/rename_subscript_param/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/rename_subscript_param/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/rename_subscript_param/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2016-2020 Free Software Foundation, Inc. +-- Copyright 2016-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/rename_subscript_param/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/rename_subscript_param/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/rename_subscript_param/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/rename_subscript_param/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2016-2020 Free Software Foundation, Inc. +-- Copyright 2016-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/rename_subscript_param/pkg.adb gdb-10.2/gdb/testsuite/gdb.ada/rename_subscript_param/pkg.adb --- gdb-9.1/gdb/testsuite/gdb.ada/rename_subscript_param/pkg.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/rename_subscript_param/pkg.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2016-2020 Free Software Foundation, Inc. +-- Copyright 2016-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/rename_subscript_param/pkg.ads gdb-10.2/gdb/testsuite/gdb.ada/rename_subscript_param/pkg.ads --- gdb-9.1/gdb/testsuite/gdb.ada/rename_subscript_param/pkg.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/rename_subscript_param/pkg.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2016-2020 Free Software Foundation, Inc. +-- Copyright 2016-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/rename_subscript_param.exp gdb-10.2/gdb/testsuite/gdb.ada/rename_subscript_param.exp --- gdb-9.1/gdb/testsuite/gdb.ada/rename_subscript_param.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/rename_subscript_param.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2016-2020 Free Software Foundation, Inc. +# Copyright 2016-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + if { ![gnatmake_version_at_least 8] } { return -1 } diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/repeat_dyn/foo_oc22_002.adb gdb-10.2/gdb/testsuite/gdb.ada/repeat_dyn/foo_oc22_002.adb --- gdb-9.1/gdb/testsuite/gdb.ada/repeat_dyn/foo_oc22_002.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/repeat_dyn/foo_oc22_002.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2016-2020 Free Software Foundation, Inc. +-- Copyright 2016-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/repeat_dyn/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/repeat_dyn/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/repeat_dyn/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/repeat_dyn/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2016-2020 Free Software Foundation, Inc. +-- Copyright 2016-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/repeat_dyn/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/repeat_dyn/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/repeat_dyn/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/repeat_dyn/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2016-2020 Free Software Foundation, Inc. +-- Copyright 2016-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/repeat_dyn.exp gdb-10.2/gdb/testsuite/gdb.ada/repeat_dyn.exp --- gdb-9.1/gdb/testsuite/gdb.ada/repeat_dyn.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/repeat_dyn.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2016-2020 Free Software Foundation, Inc. +# Copyright 2016-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo_oc22_002 if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/same_component_name/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/same_component_name/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/same_component_name/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/same_component_name/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2017-2020 Free Software Foundation, Inc. +-- Copyright 2017-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/same_component_name/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/same_component_name/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/same_component_name/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/same_component_name/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2010-2020 Free Software Foundation, Inc. +-- Copyright 2010-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/same_component_name/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/same_component_name/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/same_component_name/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/same_component_name/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2017-2020 Free Software Foundation, Inc. +-- Copyright 2017-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/same_component_name.exp gdb-10.2/gdb/testsuite/gdb.ada/same_component_name.exp --- gdb-9.1/gdb/testsuite/gdb.ada/same_component_name.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/same_component_name.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2017-2020 Free Software Foundation, Inc. +# Copyright 2017-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } { @@ -56,7 +58,7 @@ gdb_test "continue" \ ".*Breakpoint $decimal, pck.assign \\(.*\\).*" \ - "continue to bottom assign breakpoint (2nd time)" + "continue to bottom assign breakpoint, 2nd time" gdb_test "print obj.x" " = 6" \ "Print field existing only in bottom component" diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/same_enum/a.adb gdb-10.2/gdb/testsuite/gdb.ada/same_enum/a.adb --- gdb-9.1/gdb/testsuite/gdb.ada/same_enum/a.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/same_enum/a.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2011-2020 Free Software Foundation, Inc. +-- Copyright 2011-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/same_enum/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/same_enum/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/same_enum/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/same_enum/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2011-2020 Free Software Foundation, Inc. +-- Copyright 2011-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/same_enum/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/same_enum/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/same_enum/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/same_enum/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2011-2020 Free Software Foundation, Inc. +-- Copyright 2011-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/same_enum.exp gdb-10.2/gdb/testsuite/gdb.ada/same_enum.exp --- gdb-9.1/gdb/testsuite/gdb.ada/same_enum.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/same_enum.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile a if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/scalar_storage/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/scalar_storage/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/scalar_storage/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/scalar_storage/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2019-2020 Free Software Foundation, Inc. +-- Copyright 2019-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/scalar_storage/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/scalar_storage/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/scalar_storage/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/scalar_storage/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2019-2020 Free Software Foundation, Inc. +-- Copyright 2019-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/scalar_storage/storage.adb gdb-10.2/gdb/testsuite/gdb.ada/scalar_storage/storage.adb --- gdb-9.1/gdb/testsuite/gdb.ada/scalar_storage/storage.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/scalar_storage/storage.adb 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2019-2020 Free Software Foundation, Inc. +-- Copyright 2019-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/scalar_storage.exp gdb-10.2/gdb/testsuite/gdb.ada/scalar_storage.exp --- gdb-9.1/gdb/testsuite/gdb.ada/scalar_storage.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/scalar_storage.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -18,6 +18,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile storage if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/scoped_watch/foo_p708_025.adb gdb-10.2/gdb/testsuite/gdb.ada/scoped_watch/foo_p708_025.adb --- gdb-9.1/gdb/testsuite/gdb.ada/scoped_watch/foo_p708_025.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/scoped_watch/foo_p708_025.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2017-2020 Free Software Foundation, Inc. +-- Copyright 2017-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/scoped_watch/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/scoped_watch/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/scoped_watch/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/scoped_watch/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2017-2020 Free Software Foundation, Inc. +-- Copyright 2017-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/scoped_watch/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/scoped_watch/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/scoped_watch/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/scoped_watch/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2017-2020 Free Software Foundation, Inc. +-- Copyright 2017-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/scoped_watch.exp gdb-10.2/gdb/testsuite/gdb.ada/scoped_watch.exp --- gdb-9.1/gdb/testsuite/gdb.ada/scoped_watch.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/scoped_watch.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2017-2020 Free Software Foundation, Inc. +# Copyright 2017-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/set_pckd_arr_elt/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/set_pckd_arr_elt/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/set_pckd_arr_elt/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/set_pckd_arr_elt/foo.adb 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2012-2020 Free Software Foundation, Inc. +-- Copyright 2012-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/set_pckd_arr_elt/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/set_pckd_arr_elt/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/set_pckd_arr_elt/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/set_pckd_arr_elt/pck.adb 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2012-2020 Free Software Foundation, Inc. +-- Copyright 2012-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/set_pckd_arr_elt/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/set_pckd_arr_elt/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/set_pckd_arr_elt/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/set_pckd_arr_elt/pck.ads 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2012-2020 Free Software Foundation, Inc. +-- Copyright 2012-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/set_pckd_arr_elt.exp gdb-10.2/gdb/testsuite/gdb.ada/set_pckd_arr_elt.exp --- gdb-9.1/gdb/testsuite/gdb.ada/set_pckd_arr_elt.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/set_pckd_arr_elt.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/set_wstr/a.adb gdb-10.2/gdb/testsuite/gdb.ada/set_wstr/a.adb --- gdb-9.1/gdb/testsuite/gdb.ada/set_wstr/a.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/set_wstr/a.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2012-2020 Free Software Foundation, Inc. +-- Copyright 2012-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/set_wstr/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/set_wstr/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/set_wstr/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/set_wstr/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2012-2020 Free Software Foundation, Inc. +-- Copyright 2012-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/set_wstr/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/set_wstr/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/set_wstr/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/set_wstr/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2012-2020 Free Software Foundation, Inc. +-- Copyright 2012-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/set_wstr.exp gdb-10.2/gdb/testsuite/gdb.ada/set_wstr.exp --- gdb-9.1/gdb/testsuite/gdb.ada/set_wstr.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/set_wstr.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile a if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/small_reg_param/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/small_reg_param/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/small_reg_param/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/small_reg_param/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2011-2020 Free Software Foundation, Inc. +-- Copyright 2011-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/small_reg_param/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/small_reg_param/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/small_reg_param/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/small_reg_param/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2011-2020 Free Software Foundation, Inc. +-- Copyright 2011-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/small_reg_param/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/small_reg_param/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/small_reg_param/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/small_reg_param/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2011-2020 Free Software Foundation, Inc. +-- Copyright 2011-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/small_reg_param.exp gdb-10.2/gdb/testsuite/gdb.ada/small_reg_param.exp --- gdb-9.1/gdb/testsuite/gdb.ada/small_reg_param.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/small_reg_param.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug optimize=-O1]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/start/dummy.adb gdb-10.2/gdb/testsuite/gdb.ada/start/dummy.adb --- gdb-9.1/gdb/testsuite/gdb.ada/start/dummy.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/start/dummy.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2005-2020 Free Software Foundation, Inc. +-- Copyright 2005-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/start.exp gdb-10.2/gdb/testsuite/gdb.ada/start.exp --- gdb-9.1/gdb/testsuite/gdb.ada/start.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/start.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2005-2020 Free Software Foundation, Inc. +# Copyright 2005-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/str_binop_equal/foo_p211_061.adb gdb-10.2/gdb/testsuite/gdb.ada/str_binop_equal/foo_p211_061.adb --- gdb-9.1/gdb/testsuite/gdb.ada/str_binop_equal/foo_p211_061.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/str_binop_equal/foo_p211_061.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2017-2020 Free Software Foundation, Inc. +-- Copyright 2017-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/str_binop_equal/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/str_binop_equal/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/str_binop_equal/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/str_binop_equal/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2017-2020 Free Software Foundation, Inc. +-- Copyright 2017-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/str_binop_equal/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/str_binop_equal/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/str_binop_equal/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/str_binop_equal/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2017-2020 Free Software Foundation, Inc. +-- Copyright 2017-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/str_binop_equal.exp gdb-10.2/gdb/testsuite/gdb.ada/str_binop_equal.exp --- gdb-9.1/gdb/testsuite/gdb.ada/str_binop_equal.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/str_binop_equal.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2017-2020 Free Software Foundation, Inc. +# Copyright 2017-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo_p211_061 if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/str_ref_cmp/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/str_ref_cmp/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/str_ref_cmp/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/str_ref_cmp/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2008-2020 Free Software Foundation, Inc. +-- Copyright 2008-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/str_ref_cmp/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/str_ref_cmp/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/str_ref_cmp/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/str_ref_cmp/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2008-2020 Free Software Foundation, Inc. +-- Copyright 2008-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/str_ref_cmp.exp gdb-10.2/gdb/testsuite/gdb.ada/str_ref_cmp.exp --- gdb-9.1/gdb/testsuite/gdb.ada/str_ref_cmp.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/str_ref_cmp.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/str_uninit/parse.adb gdb-10.2/gdb/testsuite/gdb.ada/str_uninit/parse.adb --- gdb-9.1/gdb/testsuite/gdb.ada/str_uninit/parse.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/str_uninit/parse.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2014-2020 Free Software Foundation, Inc. +-- Copyright 2014-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/str_uninit/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/str_uninit/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/str_uninit/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/str_uninit/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2011-2020 Free Software Foundation, Inc. +-- Copyright 2011-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/str_uninit/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/str_uninit/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/str_uninit/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/str_uninit/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2011-2020 Free Software Foundation, Inc. +-- Copyright 2011-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/str_uninit.exp gdb-10.2/gdb/testsuite/gdb.ada/str_uninit.exp --- gdb-9.1/gdb/testsuite/gdb.ada/str_uninit.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/str_uninit.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile parse if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/sub_variant/subv.adb gdb-10.2/gdb/testsuite/gdb.ada/sub_variant/subv.adb --- gdb-9.1/gdb/testsuite/gdb.ada/sub_variant/subv.adb 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/sub_variant/subv.adb 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,45 @@ +-- Copyright 2020-2021 Free Software Foundation, Inc. +-- +-- This program is free software; you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation; either version 3 of the License, or +-- (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see <http://www.gnu.org/licenses/>. + +procedure Subv is + type Indicator_T is (First, Last); + + type T1 (Indicator : Indicator_T := First) is + record + case Indicator is + when First => + Value : Natural; + when Last => + null; + end case; + end record; + + type T2 (Indicator : Indicator_T := First) is + record + Associated : T1; + case Indicator is + when First => + Value : Natural; + when Last => + null; + end case; + end record; + + Q : T2 := ( First, (First, 42), 51 ); + R : T2 := ( First, (Indicator => Last), 51 ); + S : T2 := ( Last, (First, 42)); +begin + null; -- STOP +end; diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/sub_variant.exp gdb-10.2/gdb/testsuite/gdb.ada/sub_variant.exp --- gdb-9.1/gdb/testsuite/gdb.ada/sub_variant.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/sub_variant.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,36 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +load_lib "ada.exp" + +if { [skip_ada_tests] } { return -1 } + +standard_ada_testfile subv + +if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } { + return -1 +} + +clean_restart ${testfile} + +set bp_location [gdb_get_line_number "STOP" ${testdir}/subv.adb] +runto "subv.adb:$bp_location" + +gdb_test "print q" \ + "\\(indicator => first, associated => \\(indicator => first, value => 42\\), value => 51\\)" +gdb_test "print r" \ + "\\(indicator => first, associated => \\(indicator => last\\), value => 51\\)" +gdb_test "print s" \ + "\\(indicator => last, associated => \\(indicator => first, value => 42\\)\\)" diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/sym_print_name/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/sym_print_name/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/sym_print_name/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/sym_print_name/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2008-2020 Free Software Foundation, Inc. +-- Copyright 2008-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/sym_print_name/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/sym_print_name/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/sym_print_name/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/sym_print_name/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2008-2020 Free Software Foundation, Inc. +-- Copyright 2008-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/sym_print_name/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/sym_print_name/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/sym_print_name/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/sym_print_name/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2008-2020 Free Software Foundation, Inc. +-- Copyright 2008-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/sym_print_name.exp gdb-10.2/gdb/testsuite/gdb.ada/sym_print_name.exp --- gdb-9.1/gdb/testsuite/gdb.ada/sym_print_name.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/sym_print_name.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/taft_type/p.adb gdb-10.2/gdb/testsuite/gdb.ada/taft_type/p.adb --- gdb-9.1/gdb/testsuite/gdb.ada/taft_type/p.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/taft_type/p.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2008-2020 Free Software Foundation, Inc. +-- Copyright 2008-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/taft_type/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/taft_type/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/taft_type/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/taft_type/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2008-2020 Free Software Foundation, Inc. +-- Copyright 2008-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/taft_type/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/taft_type/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/taft_type/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/taft_type/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2008-2020 Free Software Foundation, Inc. +-- Copyright 2008-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/taft_type.exp gdb-10.2/gdb/testsuite/gdb.ada/taft_type.exp --- gdb-9.1/gdb/testsuite/gdb.ada/taft_type.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/taft_type.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile p if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/tagged/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/tagged/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/tagged/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/tagged/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2008-2020 Free Software Foundation, Inc. +-- Copyright 2008-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/tagged/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/tagged/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/tagged/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/tagged/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2008-2020 Free Software Foundation, Inc. +-- Copyright 2008-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/tagged/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/tagged/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/tagged/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/tagged/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2008-2020 Free Software Foundation, Inc. +-- Copyright 2008-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/tagged_access/pack.adb gdb-10.2/gdb/testsuite/gdb.ada/tagged_access/pack.adb --- gdb-9.1/gdb/testsuite/gdb.ada/tagged_access/pack.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/tagged_access/pack.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2014-2020 Free Software Foundation, Inc. +-- Copyright 2014-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/tagged_access/pack.ads gdb-10.2/gdb/testsuite/gdb.ada/tagged_access/pack.ads --- gdb-9.1/gdb/testsuite/gdb.ada/tagged_access/pack.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/tagged_access/pack.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2014-2020 Free Software Foundation, Inc. +-- Copyright 2014-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/tagged_access/p.adb gdb-10.2/gdb/testsuite/gdb.ada/tagged_access/p.adb --- gdb-9.1/gdb/testsuite/gdb.ada/tagged_access/p.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/tagged_access/p.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2014-2020 Free Software Foundation, Inc. +-- Copyright 2014-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/tagged_access.exp gdb-10.2/gdb/testsuite/gdb.ada/tagged_access.exp --- gdb-9.1/gdb/testsuite/gdb.ada/tagged_access.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/tagged_access.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile p if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/tagged.exp gdb-10.2/gdb/testsuite/gdb.ada/tagged.exp --- gdb-9.1/gdb/testsuite/gdb.ada/tagged.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/tagged.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/tagged_not_init/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/tagged_not_init/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/tagged_not_init/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/tagged_not_init/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2012-2020 Free Software Foundation, Inc. +-- Copyright 2012-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/tagged_not_init/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/tagged_not_init/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/tagged_not_init/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/tagged_not_init/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2012-2020 Free Software Foundation, Inc. +-- Copyright 2012-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/tagged_not_init/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/tagged_not_init/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/tagged_not_init/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/tagged_not_init/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2012-2020 Free Software Foundation, Inc. +-- Copyright 2012-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/tagged_not_init.exp gdb-10.2/gdb/testsuite/gdb.ada/tagged_not_init.exp --- gdb-9.1/gdb/testsuite/gdb.ada/tagged_not_init.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/tagged_not_init.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/task_bp/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/task_bp/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/task_bp/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/task_bp/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2011-2020 Free Software Foundation, Inc. +-- Copyright 2011-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/task_bp/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/task_bp/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/task_bp/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/task_bp/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2011-2020 Free Software Foundation, Inc. +-- Copyright 2011-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/task_bp/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/task_bp/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/task_bp/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/task_bp/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2011-2020 Free Software Foundation, Inc. +-- Copyright 2011-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/task_bp.exp gdb-10.2/gdb/testsuite/gdb.ada/task_bp.exp --- gdb-9.1/gdb/testsuite/gdb.ada/task_bp.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/task_bp.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/tasks/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/tasks/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/tasks/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/tasks/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2009-2020 Free Software Foundation, Inc. +-- Copyright 2009-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/tasks.exp gdb-10.2/gdb/testsuite/gdb.ada/tasks.exp --- gdb-9.1/gdb/testsuite/gdb.ada/tasks.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/tasks.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2009-2020 Free Software Foundation, Inc. +# Copyright 2009-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/task_switch_in_core/crash.adb gdb-10.2/gdb/testsuite/gdb.ada/task_switch_in_core/crash.adb --- gdb-9.1/gdb/testsuite/gdb.ada/task_switch_in_core/crash.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/task_switch_in_core/crash.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2017-2020 Free Software Foundation, Inc. +-- Copyright 2017-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/task_switch_in_core.exp gdb-10.2/gdb/testsuite/gdb.ada/task_switch_in_core.exp --- gdb-9.1/gdb/testsuite/gdb.ada/task_switch_in_core.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/task_switch_in_core.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2017-2020 Free Software Foundation, Inc. +# Copyright 2017-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile crash if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/tick_last_segv/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/tick_last_segv/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/tick_last_segv/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/tick_last_segv/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2009-2020 Free Software Foundation, Inc. +-- Copyright 2009-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/tick_last_segv.exp gdb-10.2/gdb/testsuite/gdb.ada/tick_last_segv.exp --- gdb-9.1/gdb/testsuite/gdb.ada/tick_last_segv.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/tick_last_segv.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2009-2020 Free Software Foundation, Inc. +# Copyright 2009-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/tick_length_array_enum_idx/foo_n207_004.adb gdb-10.2/gdb/testsuite/gdb.ada/tick_length_array_enum_idx/foo_n207_004.adb --- gdb-9.1/gdb/testsuite/gdb.ada/tick_length_array_enum_idx/foo_n207_004.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/tick_length_array_enum_idx/foo_n207_004.adb 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2014-2020 Free Software Foundation, Inc. +-- Copyright 2014-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/tick_length_array_enum_idx/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/tick_length_array_enum_idx/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/tick_length_array_enum_idx/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/tick_length_array_enum_idx/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2014-2020 Free Software Foundation, Inc. +-- Copyright 2014-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/tick_length_array_enum_idx/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/tick_length_array_enum_idx/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/tick_length_array_enum_idx/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/tick_length_array_enum_idx/pck.ads 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2014-2020 Free Software Foundation, Inc. +-- Copyright 2014-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/tick_length_array_enum_idx.exp gdb-10.2/gdb/testsuite/gdb.ada/tick_length_array_enum_idx.exp --- gdb-9.1/gdb/testsuite/gdb.ada/tick_length_array_enum_idx.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/tick_length_array_enum_idx.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo_n207_004 if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/type_coercion/assign.adb gdb-10.2/gdb/testsuite/gdb.ada/type_coercion/assign.adb --- gdb-9.1/gdb/testsuite/gdb.ada/type_coercion/assign.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/type_coercion/assign.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2008-2020 Free Software Foundation, Inc. +-- Copyright 2008-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/type_coercion/ident.adb gdb-10.2/gdb/testsuite/gdb.ada/type_coercion/ident.adb --- gdb-9.1/gdb/testsuite/gdb.ada/type_coercion/ident.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/type_coercion/ident.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2008-2020 Free Software Foundation, Inc. +-- Copyright 2008-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/type_coercion.exp gdb-10.2/gdb/testsuite/gdb.ada/type_coercion.exp --- gdb-9.1/gdb/testsuite/gdb.ada/type_coercion.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/type_coercion.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile assign if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug]] != "" } { @@ -27,7 +29,7 @@ runto "assign.adb:$bp_location" gdb_test "p q" \ - "= \\(2, 3, 5, 7, 11\\)" + "= \\(2, 3, 5, 7, 11\\)" "initial value of q" gdb_test_no_output "set \$addr := q'address" \ "save q'address in convenience variable" @@ -42,4 +44,4 @@ "set {Integer} \$addr := 19" gdb_test "p q" \ - "= \\(19, 3, 5, 7, 11\\)" + "= \\(19, 3, 5, 7, 11\\)" "modified value of q" diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/unc_arr_ptr_in_var_rec/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/unc_arr_ptr_in_var_rec/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/unc_arr_ptr_in_var_rec/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/unc_arr_ptr_in_var_rec/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2012-2020 Free Software Foundation, Inc. +-- Copyright 2012-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/unc_arr_ptr_in_var_rec/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/unc_arr_ptr_in_var_rec/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/unc_arr_ptr_in_var_rec/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/unc_arr_ptr_in_var_rec/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2012-2020 Free Software Foundation, Inc. +-- Copyright 2012-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/unc_arr_ptr_in_var_rec/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/unc_arr_ptr_in_var_rec/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/unc_arr_ptr_in_var_rec/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/unc_arr_ptr_in_var_rec/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2012-2020 Free Software Foundation, Inc. +-- Copyright 2012-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/unc_arr_ptr_in_var_rec.exp gdb-10.2/gdb/testsuite/gdb.ada/unc_arr_ptr_in_var_rec.exp --- gdb-9.1/gdb/testsuite/gdb.ada/unc_arr_ptr_in_var_rec.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/unc_arr_ptr_in_var_rec.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug]] != "" } { @@ -64,7 +66,7 @@ gdb_test "print my_object.ptr" \ "\\(foo.table_access\\) $hex" \ - "print My_P_Object.Ptr when no longer null" + "print my_object.ptr when no longer null" gdb_test "print my_object.ptr.all" \ "= \\(13, 21, 34\\)" diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/unchecked_union/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/unchecked_union/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/unchecked_union/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/unchecked_union/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2019-2020 Free Software Foundation, Inc. +-- Copyright 2019-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/unchecked_union/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/unchecked_union/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/unchecked_union/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/unchecked_union/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2019-2020 Free Software Foundation, Inc. +-- Copyright 2019-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/unchecked_union/unchecked_union.adb gdb-10.2/gdb/testsuite/gdb.ada/unchecked_union/unchecked_union.adb --- gdb-9.1/gdb/testsuite/gdb.ada/unchecked_union/unchecked_union.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/unchecked_union/unchecked_union.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2019-2020 Free Software Foundation, Inc. +-- Copyright 2019-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/unchecked_union.exp gdb-10.2/gdb/testsuite/gdb.ada/unchecked_union.exp --- gdb-9.1/gdb/testsuite/gdb.ada/unchecked_union.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/unchecked_union.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -17,16 +17,9 @@ load_lib "ada.exp" -standard_ada_testfile unchecked_union - -if {[gdb_compile_ada "${srcfile}" "${binfile}" executable {debug}] != ""} { - return -1 -} +if { [skip_ada_tests] } { return -1 } -clean_restart ${testfile} - -set bp_location [gdb_get_line_number "BREAK" ${testdir}/unchecked_union.adb] -runto "unchecked_union.adb:$bp_location" +standard_ada_testfile unchecked_union proc multi_line_string {str} { set result {} @@ -54,5 +47,21 @@ } set pair_full "type = record\n${inner_string}${pair_string}end record" -gdb_test "ptype Pair" [multi_line_string $pair_full] -gdb_test "ptype Inner" [multi_line_string $inner_full] +foreach_with_prefix scenario {none all minimal} { + set flags {debug} + if {$scenario != "none"} { + lappend flags additional_flags=-fgnat-encodings=$scenario + } + + if {[gdb_compile_ada "${srcfile}" "${binfile}" executable $flags] != ""} { + return -1 + } + + clean_restart ${testfile} + + set bp_location [gdb_get_line_number "BREAK" ${testdir}/unchecked_union.adb] + runto "unchecked_union.adb:$bp_location" + + gdb_test "ptype Pair" [multi_line_string $pair_full] + gdb_test "ptype Inner" [multi_line_string $inner_full] +} diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/uninitialized_vars/parse.adb gdb-10.2/gdb/testsuite/gdb.ada/uninitialized_vars/parse.adb --- gdb-9.1/gdb/testsuite/gdb.ada/uninitialized_vars/parse.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/uninitialized_vars/parse.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2009-2020 Free Software Foundation, Inc. +-- Copyright 2009-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/uninitialized_vars/parse_controlled.ads gdb-10.2/gdb/testsuite/gdb.ada/uninitialized_vars/parse_controlled.ads --- gdb-9.1/gdb/testsuite/gdb.ada/uninitialized_vars/parse_controlled.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/uninitialized_vars/parse_controlled.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2009-2020 Free Software Foundation, Inc. +-- Copyright 2009-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/uninitialized_vars.exp gdb-10.2/gdb/testsuite/gdb.ada/uninitialized_vars.exp --- gdb-9.1/gdb/testsuite/gdb.ada/uninitialized_vars.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/uninitialized_vars.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2009-2020 Free Software Foundation, Inc. +# Copyright 2009-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -18,6 +18,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile parse if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/var_arr_attrs/foo_o115_002.adb gdb-10.2/gdb/testsuite/gdb.ada/var_arr_attrs/foo_o115_002.adb --- gdb-9.1/gdb/testsuite/gdb.ada/var_arr_attrs/foo_o115_002.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/var_arr_attrs/foo_o115_002.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2015-2020 Free Software Foundation, Inc. +-- Copyright 2015-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/var_arr_attrs/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/var_arr_attrs/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/var_arr_attrs/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/var_arr_attrs/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2015-2020 Free Software Foundation, Inc. +-- Copyright 2015-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/var_arr_attrs/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/var_arr_attrs/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/var_arr_attrs/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/var_arr_attrs/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2015-2020 Free Software Foundation, Inc. +-- Copyright 2015-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/var_arr_attrs.exp gdb-10.2/gdb/testsuite/gdb.ada/var_arr_attrs.exp --- gdb-9.1/gdb/testsuite/gdb.ada/var_arr_attrs.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/var_arr_attrs.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo_o115_002 if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/var_arr_typedef/pack.adb gdb-10.2/gdb/testsuite/gdb.ada/var_arr_typedef/pack.adb --- gdb-9.1/gdb/testsuite/gdb.ada/var_arr_typedef/pack.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/var_arr_typedef/pack.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2015-2020 Free Software Foundation, Inc. +-- Copyright 2015-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/var_arr_typedef/pack.ads gdb-10.2/gdb/testsuite/gdb.ada/var_arr_typedef/pack.ads --- gdb-9.1/gdb/testsuite/gdb.ada/var_arr_typedef/pack.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/var_arr_typedef/pack.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2015-2020 Free Software Foundation, Inc. +-- Copyright 2015-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/var_arr_typedef/var_arr_typedef.adb gdb-10.2/gdb/testsuite/gdb.ada/var_arr_typedef/var_arr_typedef.adb --- gdb-9.1/gdb/testsuite/gdb.ada/var_arr_typedef/var_arr_typedef.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/var_arr_typedef/var_arr_typedef.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2015-2020 Free Software Foundation, Inc. +-- Copyright 2015-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/var_arr_typedef.exp gdb-10.2/gdb/testsuite/gdb.ada/var_arr_typedef.exp --- gdb-9.1/gdb/testsuite/gdb.ada/var_arr_typedef.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/var_arr_typedef.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile var_arr_typedef if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/variant/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/variant/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/variant/pck.ads 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/variant/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,54 @@ +-- Copyright 2020-2021 Free Software Foundation, Inc. +-- +-- This program is free software; you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation; either version 3 of the License, or +-- (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see <http://www.gnu.org/licenses/>. + +package Pck is + + type Rec_Type (C : Character := 'd') is record + case C is + when Character'First => X_First : Integer; + when Character'Val (127) => X_127 : Integer; + when Character'Val (128) => X_128 : Integer; + when Character'Last => X_Last : Integer; + when others => null; + end case; + end record; + + type Second_Type (I : Integer) is record + One: Integer; + case I is + when -5 .. 5 => + X : Integer; + when others => + Y : Integer; + end case; + end record; + + type Nested_And_Variable (One, Two: Integer) is record + Str : String (1 .. One); + case One is + when 0 => + null; + when others => + OneValue : Integer; + Str2 : String (1 .. Two); + case Two is + when 0 => + null; + when others => + TwoValue : Integer; + end case; + end case; + end record; +end Pck; diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/variant/pkg.adb gdb-10.2/gdb/testsuite/gdb.ada/variant/pkg.adb --- gdb-9.1/gdb/testsuite/gdb.ada/variant/pkg.adb 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/variant/pkg.adb 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,41 @@ +-- Copyright 2020-2021 Free Software Foundation, Inc. +-- +-- This program is free software; you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation; either version 3 of the License, or +-- (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see <http://www.gnu.org/licenses/>. + +with Pck; use Pck; + +procedure Pkg is + + R, Q : Rec_Type; + + ST1 : constant Second_Type := (I => -4, One => 1, X => 2); + ST2 : constant Second_Type := (I => 99, One => 1, Y => 77); + + NAV1 : constant Nested_And_Variable := (One => 0, Two => 93, + Str => (others => 'z')); + NAV2 : constant Nested_And_Variable := (One => 3, OneValue => 33, + Str => (others => 'z'), + Str2 => (others => 'q'), + Two => 0); + NAV3 : constant Nested_And_Variable := (One => 3, OneValue => 33, + Str => (others => 'z'), + Str2 => (others => 'q'), + Two => 7, TwoValue => 88); + +begin + R := (C => 'd'); + Q := (C => Character'First, X_First => 27); + + null; -- STOP +end Pkg; diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/variant.exp gdb-10.2/gdb/testsuite/gdb.ada/variant.exp --- gdb-9.1/gdb/testsuite/gdb.ada/variant.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/variant.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,58 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +load_lib "ada.exp" +load_lib "gdb-python.exp" + +if { [skip_ada_tests] } { return -1 } + +standard_ada_testfile pkg + +foreach_with_prefix scenario {none all minimal} { + set flags {debug} + if {$scenario != "none"} { + lappend flags additional_flags=-fgnat-encodings=$scenario + } + + if {[gdb_compile_ada "${srcfile}" "${binfile}" executable $flags] != ""} { + return -1 + } + + clean_restart ${testfile} + + set bp_location [gdb_get_line_number "STOP" ${testdir}/pkg.adb] + runto "pkg.adb:$bp_location" + + gdb_test "print r" "= \\(c => 100 'd'\\)" + gdb_test "print q" " = \\(c => 0 '\\\[\"00\"\\\]', x_first => 27\\)" + + gdb_test "print st1" " = \\(i => -4, one => 1, x => 2\\)" + gdb_test "print st2" " = \\(i => 99, one => 1, y => 77\\)" + + gdb_test "print nav1" " = \\(one => 0, two => 93, str => \"\"\\)" + gdb_test "print nav2" \ + " = \\(one => 3, two => 0, str => \"zzz\", onevalue => 33, str2 => \"\"\\)" + gdb_test "print nav3" \ + " = \\(one => 3, two => 7, str => \"zzz\", onevalue => 33, str2 => \"qqqqqqq\", twovalue => 88\\)" + + # This is only supported for the DWARF encoding. + if {$scenario == "minimal" && ![skip_python_tests]} { + gdb_test_no_output \ + "python t = gdb.lookup_type('nested_and_variable')" \ + "fetch type for python" + gdb_test "python print(t.dynamic)" "True" + gdb_test "python print(t\['onevalue'\].bitpos)" "None" + } +} diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/variant-record/proc.adb gdb-10.2/gdb/testsuite/gdb.ada/variant-record/proc.adb --- gdb-9.1/gdb/testsuite/gdb.ada/variant-record/proc.adb 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/variant-record/proc.adb 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,21 @@ +-- Copyright 2020-2021 Free Software Foundation, Inc. +-- +-- This program is free software; you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation; either version 3 of the License, or +-- (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see <http://www.gnu.org/licenses/>. + +with Value; +procedure Proc is + My_Value : Value.T := Value.Create; +begin + null; -- STOP +end; diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/variant-record/value.adb gdb-10.2/gdb/testsuite/gdb.ada/variant-record/value.adb --- gdb-9.1/gdb/testsuite/gdb.ada/variant-record/value.adb 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/variant-record/value.adb 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,30 @@ +-- Copyright 2020-2021 Free Software Foundation, Inc. +-- +-- This program is free software; you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation; either version 3 of the License, or +-- (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see <http://www.gnu.org/licenses/>. + +package body Value is + function Create return T is + begin + return (One => (Well => Value_Name.No, + Unique_Name => (X1 => 1, X2 => 2)), + Two => (Well => Value_Name.Yes, + Name => "abcdefgh")); + end Create; + + function Name (Of_Value : T) return Value_Name.T is + begin + return Of_Value.Two; + end Name; + +end Value; diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/variant-record/value.ads gdb-10.2/gdb/testsuite/gdb.ada/variant-record/value.ads --- gdb-9.1/gdb/testsuite/gdb.ada/variant-record/value.ads 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/variant-record/value.ads 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,48 @@ +-- Copyright 2020-2021 Free Software Foundation, Inc. +-- +-- This program is free software; you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation; either version 3 of the License, or +-- (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see <http://www.gnu.org/licenses/>. + +package Value is + package Value_Name is + Length : constant Positive := 8; + subtype Name_T is String (1 .. Length); + + type A_Record_T is + record + X1 : Natural; + X2 : Natural; + end record; + + type Yes_No_T is (Yes, No); + type T (Well : Yes_No_T := Yes) is + record + case Well is + when Yes => + Name : Name_T; + when No => + Unique_Name : A_Record_T; + end case; + end record; + end; + + type T is private; + function Create return T; + function Name (Of_Value : T) return Value_Name.T; +private + type T is + record + One : Value_Name.T (Well => Value_Name.No); + Two : Value_Name.T (Well => Value_Name.Yes); + end record; +end; diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/variant-record.exp gdb-10.2/gdb/testsuite/gdb.ada/variant-record.exp --- gdb-9.1/gdb/testsuite/gdb.ada/variant-record.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/variant-record.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,32 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +load_lib "ada.exp" + +if { [skip_ada_tests] } { return -1 } + +standard_ada_testfile proc + +if {[gdb_compile_ada "${srcfile}" "${binfile}" executable debug] != ""} { + return -1 +} + +clean_restart ${testfile} + +set bp_location [gdb_get_line_number "STOP" ${testdir}/proc.adb] +runto "proc.adb:$bp_location" + +gdb_test "print Value.Name(My_Value)" \ + "= \\(well => yes, name => \"abcdefgh\"\\)" diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/variant_record_packed_array/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/variant_record_packed_array/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/variant_record_packed_array/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/variant_record_packed_array/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2009-2020 Free Software Foundation, Inc. +-- Copyright 2009-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/variant_record_packed_array/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/variant_record_packed_array/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/variant_record_packed_array/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/variant_record_packed_array/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2009-2020 Free Software Foundation, Inc. +-- Copyright 2009-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/variant_record_packed_array/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/variant_record_packed_array/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/variant_record_packed_array/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/variant_record_packed_array/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2009-2020 Free Software Foundation, Inc. +-- Copyright 2009-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/variant_record_packed_array.exp gdb-10.2/gdb/testsuite/gdb.ada/variant_record_packed_array.exp --- gdb-9.1/gdb/testsuite/gdb.ada/variant_record_packed_array.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/variant_record_packed_array.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2009-2020 Free Software Foundation, Inc. +# Copyright 2009-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } { @@ -40,7 +42,7 @@ "= \\(system\\.address\\) $hex" \ "print address" -set test "print {foo.octal_buffer} ($)" +set test "print {foo.octal_buffer}($)" gdb_test_multiple "$test" $test { -re "= \\(size => 8, buffer => \\(1, 2, 3, 4, 5, 6, 7, 0\\), length => 8\\)\[\r\n\]+$gdb_prompt $" { pass $test diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/var_rec_arr/foo_na09_042.adb gdb-10.2/gdb/testsuite/gdb.ada/var_rec_arr/foo_na09_042.adb --- gdb-9.1/gdb/testsuite/gdb.ada/var_rec_arr/foo_na09_042.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/var_rec_arr/foo_na09_042.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2015-2020 Free Software Foundation, Inc. +-- Copyright 2015-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/var_rec_arr/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/var_rec_arr/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/var_rec_arr/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/var_rec_arr/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2015-2020 Free Software Foundation, Inc. +-- Copyright 2015-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/var_rec_arr/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/var_rec_arr/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/var_rec_arr/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/var_rec_arr/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2015-2020 Free Software Foundation, Inc. +-- Copyright 2015-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/var_rec_arr.exp gdb-10.2/gdb/testsuite/gdb.ada/var_rec_arr.exp --- gdb-9.1/gdb/testsuite/gdb.ada/var_rec_arr.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/var_rec_arr.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,43 +15,64 @@ load_lib "ada.exp" -standard_ada_testfile foo_na09_042 - -if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug]] != "" } { - return -1 -} - -clean_restart ${testfile} - -set bp_location [gdb_get_line_number "STOP" ${testdir}/foo_na09_042.adb] -runto "foo_na09_042.adb:$bp_location" - -gdb_test "print a1" \ - " = \\(\\(i => 0, s => \"\"\\), \\(i => 1, s => \"A\"\\), \\(i => 2, s => \"AB\"\\)\\)" - -gdb_test "print a1(1)" \ - " = \\(i => 0, s => \"\"\\)" +if { [skip_ada_tests] } { return -1 } -gdb_test "print a1(2)" \ - " = \\(i => 1, s => \"A\"\\)" - -gdb_test "print a1(3)" \ - " = \\(i => 2, s => \"AB\"\\)" - -gdb_test "print a2" \ - " = \\(\\(i => 2, s => \"AB\"\\), \\(i => 1, s => \"A\"\\), \\(i => 0, s => \"\"\\)\\)" - -gdb_test "print a2(1)" \ - " = \\(i => 2, s => \"AB\"\\)" - -gdb_test "print a2(2)" \ - " = \\(i => 1, s => \"A\"\\)" +standard_ada_testfile foo_na09_042 -gdb_test "print a2(3)" \ - " = \\(i => 0, s => \"\"\\)" +# Note we don't test the "none" (no -fgnat-encodings option) scenario +# here, because "all" and "minimal" cover the cases, and this way we +# don't have to update the test when gnat changes its default. +foreach_with_prefix scenario {all minimal} { + set flags [list debug additional_flags=-fgnat-encodings=$scenario] + + if {[gdb_compile_ada "${srcfile}" "${binfile}" executable $flags] != ""} { + return -1 + } + + clean_restart ${testfile} + + set bp_location [gdb_get_line_number "STOP" ${testdir}/foo_na09_042.adb] + runto "foo_na09_042.adb:$bp_location" + + gdb_test "print a1" \ + " = \\(\\(i => 0, s => \"\"\\), \\(i => 1, s => \"A\"\\), \\(i => 2, s => \"AB\"\\)\\)" + + gdb_test "print a1(1)" \ + " = \\(i => 0, s => \"\"\\)" + + gdb_test "print a1(2)" \ + " = \\(i => 1, s => \"A\"\\)" + + gdb_test "print a1(3)" \ + " = \\(i => 2, s => \"AB\"\\)" + + gdb_test "print a2" \ + " = \\(\\(i => 2, s => \"AB\"\\), \\(i => 1, s => \"A\"\\), \\(i => 0, s => \"\"\\)\\)" + + gdb_test "print a2(1)" \ + " = \\(i => 2, s => \"AB\"\\)" + + gdb_test "print a2(2)" \ + " = \\(i => 1, s => \"A\"\\)" + + gdb_test "print a2(3)" \ + " = \\(i => 0, s => \"\"\\)" + + # Note that the "access" is only printed when the gnat encodings + # are used. This is due to how the encodings work -- the type + # doesn't actually have the "access", and so here the DWARF + # encoding is more correct. + if {$scenario == "all"} { + set ex [multi_line "type = record" \ + " i: pck\\.small_type;" \ + " s: access array \\((<>|1 \\.\\. i)\\) of character;" \ + "end record"] + } else { + set ex [multi_line "type = record" \ + " i: pck\\.small_type;" \ + " s: array \\((<>|1 \\.\\. i)\\) of character;" \ + "end record"] + } -gdb_test "ptype a1(1)" \ - [multi_line "type = record" \ - " i: pck\\.small_type;" \ - " s: access array \\((<>|1 \\.\\. i)\\) of character;" \ - "end record"] + gdb_test "ptype a1(1)" $ex +} diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/varsize_limit/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/varsize_limit/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/varsize_limit/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/varsize_limit/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2018-2020 Free Software Foundation, Inc. +-- Copyright 2018-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/varsize_limit/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/varsize_limit/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/varsize_limit/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/varsize_limit/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2018-2020 Free Software Foundation, Inc. +-- Copyright 2018-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/varsize_limit/vsizelim.adb gdb-10.2/gdb/testsuite/gdb.ada/varsize_limit/vsizelim.adb --- gdb-9.1/gdb/testsuite/gdb.ada/varsize_limit/vsizelim.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/varsize_limit/vsizelim.adb 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2018-2020 Free Software Foundation, Inc. +-- Copyright 2018-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/varsize_limit.exp gdb-10.2/gdb/testsuite/gdb.ada/varsize_limit.exp --- gdb-9.1/gdb/testsuite/gdb.ada/varsize_limit.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/varsize_limit.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2018-2020 Free Software Foundation, Inc. +# Copyright 2018-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile vsizelim if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/vla/vla.adb gdb-10.2/gdb/testsuite/gdb.ada/vla/vla.adb --- gdb-9.1/gdb/testsuite/gdb.ada/vla/vla.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/vla/vla.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2019-2020 Free Software Foundation, Inc. +-- Copyright 2019-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/vla.exp gdb-10.2/gdb/testsuite/gdb.ada/vla.exp --- gdb-9.1/gdb/testsuite/gdb.ada/vla.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/vla.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/watch_arg/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/watch_arg/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/watch_arg/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/watch_arg/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2011-2020 Free Software Foundation, Inc. +-- Copyright 2011-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/watch_arg/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/watch_arg/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/watch_arg/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/watch_arg/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2011-2020 Free Software Foundation, Inc. +-- Copyright 2011-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/watch_arg/watch.adb gdb-10.2/gdb/testsuite/gdb.ada/watch_arg/watch.adb --- gdb-9.1/gdb/testsuite/gdb.ada/watch_arg/watch.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/watch_arg/watch.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2006-2020 Free Software Foundation, Inc. +-- Copyright 2006-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/watch_arg.exp gdb-10.2/gdb/testsuite/gdb.ada/watch_arg.exp --- gdb-9.1/gdb/testsuite/gdb.ada/watch_arg.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/watch_arg.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2006-2020 Free Software Foundation, Inc. +# Copyright 2006-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/watch_minus_l/foo_ra10_006.adb gdb-10.2/gdb/testsuite/gdb.ada/watch_minus_l/foo_ra10_006.adb --- gdb-9.1/gdb/testsuite/gdb.ada/watch_minus_l/foo_ra10_006.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/watch_minus_l/foo_ra10_006.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2018-2020 Free Software Foundation, Inc. +-- Copyright 2018-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/watch_minus_l/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/watch_minus_l/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/watch_minus_l/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/watch_minus_l/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2018-2020 Free Software Foundation, Inc. +-- Copyright 2018-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/watch_minus_l/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/watch_minus_l/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/watch_minus_l/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/watch_minus_l/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2018-2020 Free Software Foundation, Inc. +-- Copyright 2018-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/watch_minus_l.exp gdb-10.2/gdb/testsuite/gdb.ada/watch_minus_l.exp --- gdb-9.1/gdb/testsuite/gdb.ada/watch_minus_l.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/watch_minus_l.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2018-2020 Free Software Foundation, Inc. +# Copyright 2018-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/whatis_array_val/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/whatis_array_val/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/whatis_array_val/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/whatis_array_val/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2012-2020 Free Software Foundation, Inc. +-- Copyright 2012-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/whatis_array_val/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/whatis_array_val/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/whatis_array_val/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/whatis_array_val/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2011-2020 Free Software Foundation, Inc. +-- Copyright 2011-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/whatis_array_val/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/whatis_array_val/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/whatis_array_val/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/whatis_array_val/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2011-2020 Free Software Foundation, Inc. +-- Copyright 2011-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/whatis_array_val.exp gdb-10.2/gdb/testsuite/gdb.ada/whatis_array_val.exp --- gdb-9.1/gdb/testsuite/gdb.ada/whatis_array_val.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/whatis_array_val.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/widewide/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/widewide/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/widewide/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/widewide/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2011-2020 Free Software Foundation, Inc. +-- Copyright 2011-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/widewide/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/widewide/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/widewide/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/widewide/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2011-2020 Free Software Foundation, Inc. +-- Copyright 2011-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/widewide/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/widewide/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/widewide/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/widewide/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2011-2020 Free Software Foundation, Inc. +-- Copyright 2011-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/widewide.exp gdb-10.2/gdb/testsuite/gdb.ada/widewide.exp --- gdb-9.1/gdb/testsuite/gdb.ada/widewide.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/widewide.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/win_fu_syms/foo.adb gdb-10.2/gdb/testsuite/gdb.ada/win_fu_syms/foo.adb --- gdb-9.1/gdb/testsuite/gdb.ada/win_fu_syms/foo.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/win_fu_syms/foo.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2013-2020 Free Software Foundation, Inc. +-- Copyright 2013-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/win_fu_syms/pck.adb gdb-10.2/gdb/testsuite/gdb.ada/win_fu_syms/pck.adb --- gdb-9.1/gdb/testsuite/gdb.ada/win_fu_syms/pck.adb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/win_fu_syms/pck.adb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2007-2020 Free Software Foundation, Inc. +-- Copyright 2007-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/win_fu_syms/pck.ads gdb-10.2/gdb/testsuite/gdb.ada/win_fu_syms/pck.ads --- gdb-9.1/gdb/testsuite/gdb.ada/win_fu_syms/pck.ads 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/win_fu_syms/pck.ads 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ --- Copyright 2007-2020 Free Software Foundation, Inc. +-- Copyright 2007-2021 Free Software Foundation, Inc. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.ada/win_fu_syms.exp gdb-10.2/gdb/testsuite/gdb.ada/win_fu_syms.exp --- gdb-9.1/gdb/testsuite/gdb.ada/win_fu_syms.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.ada/win_fu_syms.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "ada.exp" +if { [skip_ada_tests] } { return -1 } + standard_ada_testfile foo if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug additional_flags=-bargs additional_flags=-shared additional_flags=-margs]] != "" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/aarch64-atomic-inst.c gdb-10.2/gdb/testsuite/gdb.arch/aarch64-atomic-inst.c --- gdb-9.1/gdb/testsuite/gdb.arch/aarch64-atomic-inst.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/aarch64-atomic-inst.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This file is part of GDB, the GNU debugger. - Copyright 2008-2020 Free Software Foundation, Inc. + Copyright 2008-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/aarch64-atomic-inst.exp gdb-10.2/gdb/testsuite/gdb.arch/aarch64-atomic-inst.exp --- gdb-9.1/gdb/testsuite/gdb.arch/aarch64-atomic-inst.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/aarch64-atomic-inst.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/aarch64-brk-patterns.c gdb-10.2/gdb/testsuite/gdb.arch/aarch64-brk-patterns.c --- gdb-9.1/gdb/testsuite/gdb.arch/aarch64-brk-patterns.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/aarch64-brk-patterns.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,31 @@ +/* This file is part of GDB, the GNU debugger. + + Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +int +main (void) +{ + /* Dummy instruction just so GDB doesn't stop at the first breakpoint + instruction. */ + __asm __volatile ("nop\n\t"); + + /* Multiple BRK instruction patterns. */ + __asm __volatile ("brk %0\n\t" ::"n"(0x0)); + __asm __volatile ("brk %0\n\t" ::"n"(0x900 + 0xf)); + __asm __volatile ("brk %0\n\t" ::"n"(0xf000)); + + return 0; +} diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/aarch64-brk-patterns.exp gdb-10.2/gdb/testsuite/gdb.arch/aarch64-brk-patterns.exp --- gdb-9.1/gdb/testsuite/gdb.arch/aarch64-brk-patterns.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/aarch64-brk-patterns.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,69 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +# This file is part of the gdb testsuite. + +# Test if GDB stops at various BRK instruction patterns inserted into +# the code. + +if {![is_aarch64_target]} { + verbose "Skipping ${gdb_test_file_name}." + return +} + +standard_testfile +if {[prepare_for_testing "failed to prepare" ${testfile} ${srcfile}]} { + return -1 +} + +if {![runto_main]} { + untested "could not run to main" + return -1 +} + +# Number of expected SIGTRAP's to get. This needs to be kept in sync +# with the source file. +set expected_traps 3 +set keep_going 1 +set count 0 + +# Make sure we have a lower timeout in case GDB doesn't support a particular +# instruction. Such instruction will cause GDB to loop infinitely. +while {$keep_going} { + # Continue to next program breakpoint instruction. + gdb_test_multiple "continue" "brk instruction $count causes SIGTRAP" { + -re "Program received signal SIGTRAP, Trace/breakpoint trap.*$gdb_prompt $" { + pass $gdb_test_name + + # Insert a breakpoint at the program breakpoint instruction so + # GDB can step over it. + gdb_test "break" \ + "Breakpoint $decimal at $hex: file .*$srcfile, line $decimal.*" \ + "insert breakpoint at brk instruction $count" + incr count + } + # We've reached the end of the test. + -re "exited normally.*$gdb_prompt $" { + set keep_going 0 + } + timeout { + fail $gdb_test_name + set keep_going 0 + } + } +} + +# Verify we stopped at the expected number of SIGTRAP's. +gdb_assert {$count == $expected_traps} "all brk instructions triggered" diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/aarch64-dbreg-contents.c gdb-10.2/gdb/testsuite/gdb.arch/aarch64-dbreg-contents.c --- gdb-9.1/gdb/testsuite/gdb.arch/aarch64-dbreg-contents.c 2019-02-23 12:20:11.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/aarch64-dbreg-contents.c 2020-09-13 02:33:41.000000000 +0000 @@ -9,13 +9,17 @@ freely. */ #define _GNU_SOURCE 1 +#include <stdlib.h> +#include <unistd.h> #include <sys/ptrace.h> +#include <asm/ptrace.h> #include <assert.h> #include <sys/wait.h> #include <stddef.h> #include <errno.h> #include <sys/uio.h> #include <elf.h> +#include <error.h> static pid_t child; diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/aarch64-dbreg-contents.exp gdb-10.2/gdb/testsuite/gdb.arch/aarch64-dbreg-contents.exp --- gdb-9.1/gdb/testsuite/gdb.arch/aarch64-dbreg-contents.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/aarch64-dbreg-contents.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/aarch64-fp.c gdb-10.2/gdb/testsuite/gdb.arch/aarch64-fp.c --- gdb-9.1/gdb/testsuite/gdb.arch/aarch64-fp.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/aarch64-fp.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This file is part of GDB, the GNU debugger. - Copyright 2008-2020 Free Software Foundation, Inc. + Copyright 2008-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/aarch64-fp.exp gdb-10.2/gdb/testsuite/gdb.arch/aarch64-fp.exp --- gdb-9.1/gdb/testsuite/gdb.arch/aarch64-fp.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/aarch64-fp.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -51,27 +51,27 @@ set reg_value1 "0x202122232425262728292a2b2c2d2e2f" } -gdb_test "info registers q0" \ +gdb_test "p/x \$q0" \ "q0.*{u = $reg_value0, s = $reg_value0.*" \ "check register q0 value" -gdb_test "info registers q1" \ +gdb_test "p/x \$q1" \ "q1.*{u = $reg_value1, s = $reg_value1.*" \ "check register q1 value" -gdb_test "info registers v0" \ +gdb_test "p/x \$v0" \ "v0.*$reg_value0}}}" \ "check register v0 value" -gdb_test "info registers v1" \ +gdb_test "p/x \$v1" \ "v1.*$reg_value1}}}" \ "check register v1 value" -gdb_test "info registers fpsr" \ +gdb_test "p/x \$fpsr" \ "fpsr.*0x\[0-9a-fA-F\].*" \ "check register fpsr value" -gdb_test "info registers fpcr" \ +gdb_test "p/x \$fpcr" \ "fpcr.*0x\[0-9a-fA-F\].*" \ "check register fpcr value" diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/aarch64-pauth.c gdb-10.2/gdb/testsuite/gdb.arch/aarch64-pauth.c --- gdb-9.1/gdb/testsuite/gdb.arch/aarch64-pauth.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/aarch64-pauth.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This test program is part of GDB, the GNU debugger. - Copyright 2019-2020 Free Software Foundation, Inc. + Copyright 2019-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/aarch64-pauth.exp gdb-10.2/gdb/testsuite/gdb.arch/aarch64-pauth.exp --- gdb-9.1/gdb/testsuite/gdb.arch/aarch64-pauth.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/aarch64-pauth.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2019-2020 Free Software Foundation, Inc. +# Copyright (C) 2019-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -40,4 +40,9 @@ gdb_continue_to_breakpoint "break here" ".*break here.*" # Ensure we can get a full backtrace, despite the address signing. -gdb_test "bt" "^bt\r\n#0 +bar *\\(b=9\\) +at.*\r\n#1 +0x\[0-9a-f\]* +in +foo \\(a=5\\).*\r\n#2 +0x\[0-9a-f\]* +in +main \\(\\).*" "backtrace" +gdb_test "bt" \ + [multi_line \ + "#0\[ \t\]+bar \\(b=9\\) at \[^\r\n\]+" \ + "#1\[ \t\]+$hex (\\\[PAC\\\] )?in foo \\(a=5\\) at \[^\r\n\]+" \ + "#2\[ \t\]+$hex (\\\[PAC\\\] )?in main \\(\\) at \[^\r\n\]+" ] \ + "backtrace" diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/aarch64-prologue.c gdb-10.2/gdb/testsuite/gdb.arch/aarch64-prologue.c --- gdb-9.1/gdb/testsuite/gdb.arch/aarch64-prologue.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/aarch64-prologue.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2019-2020 Free Software Foundation, Inc. + Copyright 2019-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/aarch64-prologue.exp gdb-10.2/gdb/testsuite/gdb.arch/aarch64-prologue.exp --- gdb-9.1/gdb/testsuite/gdb.arch/aarch64-prologue.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/aarch64-prologue.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/aarch64-sighandler-regs.c gdb-10.2/gdb/testsuite/gdb.arch/aarch64-sighandler-regs.c --- gdb-9.1/gdb/testsuite/gdb.arch/aarch64-sighandler-regs.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/aarch64-sighandler-regs.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This file is part of GDB, the GNU debugger. - Copyright 2018-2020 Free Software Foundation, Inc. + Copyright 2018-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/aarch64-sighandler-regs.exp gdb-10.2/gdb/testsuite/gdb.arch/aarch64-sighandler-regs.exp --- gdb-9.1/gdb/testsuite/gdb.arch/aarch64-sighandler-regs.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/aarch64-sighandler-regs.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2018-2020 Free Software Foundation, Inc. +# Copyright 2018-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -100,16 +100,18 @@ # Check register values -check_regs x $xreg_nums $reg_handler_value_64 "" -check_regs v $vreg_nums $reg_handler_value_128 ".q.u" -check_regs q $vreg_nums $reg_handler_value_128 ".u" -check_regs d $vreg_nums $reg_handler_value_64 ".u" -check_regs s $vreg_nums $reg_handler_value_32 ".u" -check_regs h $vreg_nums $reg_handler_value_16 ".u" -check_regs b $vreg_nums $reg_handler_value_8 ".u" -if { $sve_hw } { - check_regs z $vreg_nums $zreg_handler_value ".d.u" - check_regs p $preg_nums $preg_handler_value "" +with_test_prefix "handler frame 1st" { + check_regs x $xreg_nums $reg_handler_value_64 "" + check_regs v $vreg_nums $reg_handler_value_128 ".q.u" + check_regs q $vreg_nums $reg_handler_value_128 ".u" + check_regs d $vreg_nums $reg_handler_value_64 ".u" + check_regs s $vreg_nums $reg_handler_value_32 ".u" + check_regs h $vreg_nums $reg_handler_value_16 ".u" + check_regs b $vreg_nums $reg_handler_value_8 ".u" + if { $sve_hw } { + check_regs z $vreg_nums $zreg_handler_value ".d.u" + check_regs p $preg_nums $preg_handler_value "" + } } # Switch to the frame for main(), and check register values @@ -118,16 +120,19 @@ "#$mainframe.*in main ().*" \ "set to main frame" -check_regs x $xreg_nums $reg_main_value_64 "" -check_regs v $vreg_nums $reg_main_value_128 ".q.u" -check_regs q $vreg_nums $reg_main_value_128 ".u" -check_regs d $vreg_nums $reg_main_value_64 ".u" -check_regs s $vreg_nums $reg_main_value_32 ".u" -check_regs h $vreg_nums $reg_main_value_16 ".u" -check_regs b $vreg_nums $reg_main_value_8 ".u" -if { $sve_hw } { - check_regs z $vreg_nums $zreg_main_value ".d.u" - check_regs p $preg_nums $preg_main_value "" + +with_test_prefix "main frame" { + check_regs x $xreg_nums $reg_main_value_64 "" + check_regs v $vreg_nums $reg_main_value_128 ".q.u" + check_regs q $vreg_nums $reg_main_value_128 ".u" + check_regs d $vreg_nums $reg_main_value_64 ".u" + check_regs s $vreg_nums $reg_main_value_32 ".u" + check_regs h $vreg_nums $reg_main_value_16 ".u" + check_regs b $vreg_nums $reg_main_value_8 ".u" + if { $sve_hw } { + check_regs z $vreg_nums $zreg_main_value ".d.u" + check_regs p $preg_nums $preg_main_value "" + } } # Switch back to the signal handler frame, and check register values @@ -136,14 +141,16 @@ "#$handlerframe.*handler \\\(sig=4\\\).*" \ "set to signal handler frame" -check_regs x $xreg_nums $reg_handler_value_64 "" -check_regs v $vreg_nums $reg_handler_value_128 ".q.u" -check_regs q $vreg_nums $reg_handler_value_128 ".u" -check_regs d $vreg_nums $reg_handler_value_64 ".u" -check_regs s $vreg_nums $reg_handler_value_32 ".u" -check_regs h $vreg_nums $reg_handler_value_16 ".u" -check_regs b $vreg_nums $reg_handler_value_8 ".u" -if { $sve_hw } { - check_regs z $vreg_nums $zreg_handler_value ".d.u" - check_regs p $preg_nums $preg_handler_value "" +with_test_prefix "handler frame 2nd" { + check_regs x $xreg_nums $reg_handler_value_64 "" + check_regs v $vreg_nums $reg_handler_value_128 ".q.u" + check_regs q $vreg_nums $reg_handler_value_128 ".u" + check_regs d $vreg_nums $reg_handler_value_64 ".u" + check_regs s $vreg_nums $reg_handler_value_32 ".u" + check_regs h $vreg_nums $reg_handler_value_16 ".u" + check_regs b $vreg_nums $reg_handler_value_8 ".u" + if { $sve_hw } { + check_regs z $vreg_nums $zreg_handler_value ".d.u" + check_regs p $preg_nums $preg_handler_value "" +} } diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/aarch64-tagged-pointer.c gdb-10.2/gdb/testsuite/gdb.arch/aarch64-tagged-pointer.c --- gdb-9.1/gdb/testsuite/gdb.arch/aarch64-tagged-pointer.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/aarch64-tagged-pointer.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This file is part of GDB, the GNU debugger. - Copyright 2017-2020 Free Software Foundation, Inc. + Copyright 2017-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/aarch64-tagged-pointer.exp gdb-10.2/gdb/testsuite/gdb.arch/aarch64-tagged-pointer.exp --- gdb-9.1/gdb/testsuite/gdb.arch/aarch64-tagged-pointer.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/aarch64-tagged-pointer.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2017-2020 Free Software Foundation, Inc. +# Copyright 2017-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -35,17 +35,17 @@ # Test that GDB manages caches correctly for tagged address. # Read from P2, -gdb_test "x p2" "$hex:\[\t \]+0x000004d2" +gdb_test "x p2" "$hex:\[\t \]+0x000004d2" "x p2" gdb_test_no_output "set variable i = 5678" # Test that *P2 is updated. -gdb_test "x p2" "$hex:\[\t \]+0x0000162e" +gdb_test "x p2" "$hex:\[\t \]+0x0000162e" "x p2, updated" # Read from SP1->i, -gdb_test "print sp1->i" " = 1234" +gdb_test "print sp1->i" " = 1234" "print SP1->i" # Write to SP2->i, gdb_test_no_output "set variable sp2->i = 5678" # Test that SP1->i is updated. -gdb_test "print sp1->i" " = 5678" +gdb_test "print sp1->i" " = 5678" "print SP1->i, updated" gdb_test "x/d &sp2->i" "$hex:\[\t \]+5678" gdb_test "x/d &sp1->i" "$hex:\[\t \]+5678" diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/aix-sighandle.c gdb-10.2/gdb/testsuite/gdb.arch/aix-sighandle.c --- gdb-9.1/gdb/testsuite/gdb.arch/aix-sighandle.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/aix-sighandle.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2018-2020 Free Software Foundation, Inc. +/* Copyright 2018-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/aix-sighandle.exp gdb-10.2/gdb/testsuite/gdb.arch/aix-sighandle.exp --- gdb-9.1/gdb/testsuite/gdb.arch/aix-sighandle.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/aix-sighandle.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2018-2020 Free Software Foundation, Inc. +# Copyright 2018-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/alpha-step.c gdb-10.2/gdb/testsuite/gdb.arch/alpha-step.c --- gdb-9.1/gdb/testsuite/gdb.arch/alpha-step.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/alpha-step.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2005-2020 Free Software Foundation, Inc. +/* Copyright 2005-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/alpha-step.exp gdb-10.2/gdb/testsuite/gdb.arch/alpha-step.exp --- gdb-9.1/gdb/testsuite/gdb.arch/alpha-step.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/alpha-step.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2005-2020 Free Software Foundation, Inc. +# Copyright 2005-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/altivec-abi.exp gdb-10.2/gdb/testsuite/gdb.arch/altivec-abi.exp --- gdb-9.1/gdb/testsuite/gdb.arch/altivec-abi.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/altivec-abi.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2020 Free Software Foundation, Inc. +# Copyright (C) 2002-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/altivec-regs.exp gdb-10.2/gdb/testsuite/gdb.arch/altivec-regs.exp --- gdb-9.1/gdb/testsuite/gdb.arch/altivec-regs.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/altivec-regs.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2020 Free Software Foundation, Inc. +# Copyright (C) 2002-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/amd64-break-on-asm-line.exp gdb-10.2/gdb/testsuite/gdb.arch/amd64-break-on-asm-line.exp --- gdb-9.1/gdb/testsuite/gdb.arch/amd64-break-on-asm-line.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/amd64-break-on-asm-line.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/amd64-break-on-asm-line.S gdb-10.2/gdb/testsuite/gdb.arch/amd64-break-on-asm-line.S --- gdb-9.1/gdb/testsuite/gdb.arch/amd64-break-on-asm-line.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/amd64-break-on-asm-line.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2019-2020 Free Software Foundation, Inc. +/* Copyright 2019-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/amd64-byte.exp gdb-10.2/gdb/testsuite/gdb.arch/amd64-byte.exp --- gdb-9.1/gdb/testsuite/gdb.arch/amd64-byte.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/amd64-byte.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -61,73 +61,73 @@ set byte_regs(17) ch set byte_regs(18) dh -gdb_test "break [gdb_get_line_number "first breakpoint here"]" \ - "Breakpoint .* at .*${srcfile}.*" \ - "set first breakpoint in main" +gdb_breakpoint [gdb_get_line_number "first breakpoint here"] gdb_continue_to_breakpoint "continue to first breakpoint in main" -for { set r 1 } { $r <= 6 } { incr r } { - gdb_test "print/x \$$byte_regs($r)" \ - ".. = 0x[format %x $r]1" \ - "check contents of %$byte_regs($r)" -} - -for { set r 1 } { $r <= 4 } { incr r } { - set h [expr $r + 14] - gdb_test "print/x \$$byte_regs($h)" \ - ".. = 0x[format %x $r]2" \ - "check contents of %$byte_regs($h)" -} - -gdb_test "break [gdb_get_line_number "second breakpoint here"]" \ - "Breakpoint .* at .*${srcfile}.*" \ - "set second breakpoint in main" -gdb_continue_to_breakpoint "continue to second breakpoint in main" - -for { set r 7 } { $r <= 14 } { incr r } { - gdb_test "print/x \$$byte_regs($r)" \ - ".. = 0x[format %x $r]1" \ - "check contents of %$byte_regs($r)" +with_test_prefix "at first bp" { + for { set r 1 } { $r <= 6 } { incr r } { + gdb_test "print/x \$$byte_regs($r)" \ + ".. = 0x[format %x $r]1" \ + "check contents of %$byte_regs($r)" + } + + for { set r 1 } { $r <= 4 } { incr r } { + set h [expr $r + 14] + gdb_test "print/x \$$byte_regs($h)" \ + ".. = 0x[format %x $r]2" \ + "check contents of %$byte_regs($h)" + } } -for { set r 1 } { $r <= 6 } { incr r } { - gdb_test "set var \$$byte_regs($r) = $r" "" "set %$byte_regs($r)" -} +gdb_breakpoint [gdb_get_line_number "second breakpoint here"] +gdb_continue_to_breakpoint "continue to second breakpoint in main" -for { set r 1 } { $r <= 4 } { incr r } { - set h [expr $r + 14] - gdb_test "set var \$$byte_regs($h) = $h" "" "set %$byte_regs($h)" +with_test_prefix "at second bp" { + for { set r 7 } { $r <= 14 } { incr r } { + gdb_test "print/x \$$byte_regs($r)" \ + ".. = 0x[format %x $r]1" \ + "check contents of %$byte_regs($r)" + } + + for { set r 1 } { $r <= 6 } { incr r } { + gdb_test "set var \$$byte_regs($r) = $r" "" "set %$byte_regs($r)" + } + + for { set r 1 } { $r <= 4 } { incr r } { + set h [expr $r + 14] + gdb_test "set var \$$byte_regs($h) = $h" "" "set %$byte_regs($h)" + } } -gdb_test "break [gdb_get_line_number "third breakpoint here"]" \ - "Breakpoint .* at .*${srcfile}.*" \ - "set third breakpoint in main" +gdb_breakpoint [gdb_get_line_number "third breakpoint here"] gdb_continue_to_breakpoint "continue to third breakpoint in main" -for { set r 1 } { $r <= 6 } { incr r } { - gdb_test "print \$$byte_regs($r)" \ - ".. = $r" \ - "check contents of %$byte_regs($r)" -} - -for { set r 1 } { $r <= 4 } { incr r } { - set h [expr $r + 14] - gdb_test "print \$$byte_regs($h)" \ - ".. = $h" \ - "check contents of %$byte_regs($h)" -} - -for { set r 7 } { $r <= 14 } { incr r } { - gdb_test "set var \$$byte_regs($r) = $r" "" "set %$byte_regs($r)" -} - -gdb_test "break [gdb_get_line_number "forth breakpoint here"]" \ - "Breakpoint .* at .*${srcfile}.*" \ - "set forth breakpoint in main" -gdb_continue_to_breakpoint "continue to forth breakpoint in main" - -for { set r 7 } { $r <= 14 } { incr r } { - gdb_test "print \$$byte_regs($r)" \ - ".. = $r" \ - "check contents of %$byte_regs($r)" +with_test_prefix "at third bp" { + for { set r 1 } { $r <= 6 } { incr r } { + gdb_test "print \$$byte_regs($r)" \ + ".. = $r" \ + "check contents of %$byte_regs($r)" + } + + for { set r 1 } { $r <= 4 } { incr r } { + set h [expr $r + 14] + gdb_test "print \$$byte_regs($h)" \ + ".. = $h" \ + "check contents of %$byte_regs($h)" + } + + for { set r 7 } { $r <= 14 } { incr r } { + gdb_test "set var \$$byte_regs($r) = $r" "" "set %$byte_regs($r)" + } +} + +gdb_breakpoint [gdb_get_line_number "fourth breakpoint here"] +gdb_continue_to_breakpoint "continue to fourth breakpoint in main" + +with_test_prefix "at fourth bp" { + for { set r 7 } { $r <= 14 } { incr r } { + gdb_test "print \$$byte_regs($r)" \ + ".. = $r" \ + "check contents of %$byte_regs($r)" + } } diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/amd64-disp-step-avx.exp gdb-10.2/gdb/testsuite/gdb.arch/amd64-disp-step-avx.exp --- gdb-9.1/gdb/testsuite/gdb.arch/amd64-disp-step-avx.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/amd64-disp-step-avx.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2009-2020 Free Software Foundation, Inc. +# Copyright 2009-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -92,10 +92,16 @@ set value "0xdeadbeefd3adb33f" set_regs $value + # Turn "debug displaced" on to make sure a displaced step is actually + # executed, not an inline step. + gdb_test_no_output "set debug displaced on" + gdb_test "continue" \ - "Continuing.*Breakpoint.*, ${test_end_label} ().*" \ + "Continuing.*displaced: displaced pc to.*Breakpoint.*, ${test_end_label} ().*" \ "continue to ${test_end_label}" + gdb_test_no_output "set debug displaced off" + verify_regs $value } diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/amd64-disp-step-avx.S gdb-10.2/gdb/testsuite/gdb.arch/amd64-disp-step-avx.S --- gdb-9.1/gdb/testsuite/gdb.arch/amd64-disp-step-avx.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/amd64-disp-step-avx.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2009-2020 Free Software Foundation, Inc. +/* Copyright 2009-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -22,7 +22,12 @@ .global _start,main _start: + # The area at _start is used as the displaced stepping buffer. Put + # more than enough nop instructions so that the instructions under test + # below don't conflict with it. + .rept 200 nop + .endr main: nop diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/amd64-disp-step.exp gdb-10.2/gdb/testsuite/gdb.arch/amd64-disp-step.exp --- gdb-9.1/gdb/testsuite/gdb.arch/amd64-disp-step.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/amd64-disp-step.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2009-2020 Free Software Foundation, Inc. +# Copyright 2009-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/amd64-disp-step.S gdb-10.2/gdb/testsuite/gdb.arch/amd64-disp-step.S --- gdb-9.1/gdb/testsuite/gdb.arch/amd64-disp-step.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/amd64-disp-step.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2009-2020 Free Software Foundation, Inc. +/* Copyright 2009-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/amd64-dword.exp gdb-10.2/gdb/testsuite/gdb.arch/amd64-dword.exp --- gdb-9.1/gdb/testsuite/gdb.arch/amd64-dword.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/amd64-dword.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -58,56 +58,56 @@ set dword_regs(13) r14d set dword_regs(14) r15d -gdb_test "break [gdb_get_line_number "first breakpoint here"]" \ - "Breakpoint .* at .*${srcfile}.*" \ - "set first breakpoint in main" +gdb_breakpoint [gdb_get_line_number "first breakpoint here"] gdb_continue_to_breakpoint "continue to first breakpoint in main" -for { set r 1 } { $r <= 6 } { incr r } { - set hexr [format %x $r] - gdb_test "print/x \$$dword_regs($r)" \ - ".. = 0x${hexr}4${hexr}3${hexr}2${hexr}1" \ - "check contents of %$dword_regs($r)" +with_test_prefix "at first bp" { + for { set r 1 } { $r <= 6 } { incr r } { + set hexr [format %x $r] + gdb_test "print/x \$$dword_regs($r)" \ + ".. = 0x${hexr}4${hexr}3${hexr}2${hexr}1" \ + "check contents of %$dword_regs($r)" + } } -gdb_test "break [gdb_get_line_number "second breakpoint here"]" \ - "Breakpoint .* at .*${srcfile}.*" \ - "set second breakpoint in main" +gdb_breakpoint [gdb_get_line_number "second breakpoint here"] gdb_continue_to_breakpoint "continue to second breakpoint in main" -for { set r 7 } { $r <= $nr_regs } { incr r } { - set hexr [format %x $r] - gdb_test "print/x \$$dword_regs($r)" \ - ".. = 0x${hexr}4${hexr}3${hexr}2${hexr}1" \ - "check contents of %$dword_regs($r)" +with_test_prefix "at second bp" { + for { set r 7 } { $r <= $nr_regs } { incr r } { + set hexr [format %x $r] + gdb_test "print/x \$$dword_regs($r)" \ + ".. = 0x${hexr}4${hexr}3${hexr}2${hexr}1" \ + "check contents of %$dword_regs($r)" + } + + for { set r 1 } { $r <= 6 } { incr r } { + gdb_test "set var \$$dword_regs($r) = $r" "" "set %$dword_regs($r)" + } } -for { set r 1 } { $r <= 6 } { incr r } { - gdb_test "set var \$$dword_regs($r) = $r" "" "set %$dword_regs($r)" -} - -gdb_test "break [gdb_get_line_number "third breakpoint here"]" \ - "Breakpoint .* at .*${srcfile}.*" \ - "set third breakpoint in main" +gdb_breakpoint [gdb_get_line_number "third breakpoint here"] gdb_continue_to_breakpoint "continue to third breakpoint in main" -for { set r 1 } { $r <= 6 } { incr r } { - gdb_test "print \$$dword_regs($r)" \ - ".. = $r" \ - "check contents of %$dword_regs($r)" -} - -for { set r 7 } { $r <= $nr_regs } { incr r } { - gdb_test "set var \$$dword_regs($r) = $r" "" "set %$dword_regs($r)" -} - -gdb_test "break [gdb_get_line_number "forth breakpoint here"]" \ - "Breakpoint .* at .*${srcfile}.*" \ - "set forth breakpoint in main" -gdb_continue_to_breakpoint "continue to forth breakpoint in main" - -for { set r 7 } { $r <= $nr_regs } { incr r } { - gdb_test "print \$$dword_regs($r)" \ - ".. = $r" \ - "check contents of %$dword_regs($r)" +with_test_prefix "at third bp" { + for { set r 1 } { $r <= 6 } { incr r } { + gdb_test "print \$$dword_regs($r)" \ + ".. = $r" \ + "check contents of %$dword_regs($r)" + } + + for { set r 7 } { $r <= $nr_regs } { incr r } { + gdb_test "set var \$$dword_regs($r) = $r" "" "set %$dword_regs($r)" + } +} + +gdb_breakpoint [gdb_get_line_number "fourth breakpoint here"] +gdb_continue_to_breakpoint "continue to fourth breakpoint in main" + +with_test_prefix "at fourth bp" { + for { set r 7 } { $r <= $nr_regs } { incr r } { + gdb_test "print \$$dword_regs($r)" \ + ".. = $r" \ + "check contents of %$dword_regs($r)" + } } diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/amd64-entry-value.cc gdb-10.2/gdb/testsuite/gdb.arch/amd64-entry-value.cc --- gdb-9.1/gdb/testsuite/gdb.arch/amd64-entry-value.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/amd64-entry-value.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/amd64-entry-value.exp gdb-10.2/gdb/testsuite/gdb.arch/amd64-entry-value.exp --- gdb-9.1/gdb/testsuite/gdb.arch/amd64-entry-value.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/amd64-entry-value.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2011-2020 Free Software Foundation, Inc. +# Copyright (C) 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/amd64-entry-value-inline.c gdb-10.2/gdb/testsuite/gdb.arch/amd64-entry-value-inline.c --- gdb-9.1/gdb/testsuite/gdb.arch/amd64-entry-value-inline.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/amd64-entry-value-inline.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/amd64-entry-value-inline.exp gdb-10.2/gdb/testsuite/gdb.arch/amd64-entry-value-inline.exp --- gdb-9.1/gdb/testsuite/gdb.arch/amd64-entry-value-inline.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/amd64-entry-value-inline.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2012-2020 Free Software Foundation, Inc. +# Copyright (C) 2012-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/amd64-entry-value-inline.S gdb-10.2/gdb/testsuite/gdb.arch/amd64-entry-value-inline.S --- gdb-9.1/gdb/testsuite/gdb.arch/amd64-entry-value-inline.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/amd64-entry-value-inline.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/amd64-entry-value-param.c gdb-10.2/gdb/testsuite/gdb.arch/amd64-entry-value-param.c --- gdb-9.1/gdb/testsuite/gdb.arch/amd64-entry-value-param.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/amd64-entry-value-param.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/amd64-entry-value-param-dwarf5.c gdb-10.2/gdb/testsuite/gdb.arch/amd64-entry-value-param-dwarf5.c --- gdb-9.1/gdb/testsuite/gdb.arch/amd64-entry-value-param-dwarf5.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/amd64-entry-value-param-dwarf5.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/amd64-entry-value-param-dwarf5.exp gdb-10.2/gdb/testsuite/gdb.arch/amd64-entry-value-param-dwarf5.exp --- gdb-9.1/gdb/testsuite/gdb.arch/amd64-entry-value-param-dwarf5.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/amd64-entry-value-param-dwarf5.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2012-2020 Free Software Foundation, Inc. +# Copyright (C) 2012-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/amd64-entry-value-param-dwarf5.S gdb-10.2/gdb/testsuite/gdb.arch/amd64-entry-value-param-dwarf5.S --- gdb-9.1/gdb/testsuite/gdb.arch/amd64-entry-value-param-dwarf5.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/amd64-entry-value-param-dwarf5.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/amd64-entry-value-param.exp gdb-10.2/gdb/testsuite/gdb.arch/amd64-entry-value-param.exp --- gdb-9.1/gdb/testsuite/gdb.arch/amd64-entry-value-param.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/amd64-entry-value-param.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2012-2020 Free Software Foundation, Inc. +# Copyright (C) 2012-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/amd64-entry-value-paramref.cc gdb-10.2/gdb/testsuite/gdb.arch/amd64-entry-value-paramref.cc --- gdb-9.1/gdb/testsuite/gdb.arch/amd64-entry-value-paramref.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/amd64-entry-value-paramref.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/amd64-entry-value-paramref.exp gdb-10.2/gdb/testsuite/gdb.arch/amd64-entry-value-paramref.exp --- gdb-9.1/gdb/testsuite/gdb.arch/amd64-entry-value-paramref.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/amd64-entry-value-paramref.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2014-2020 Free Software Foundation, Inc. +# Copyright (C) 2014-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -20,7 +20,8 @@ return } -if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile} "c++"] } { +if { [prepare_for_testing_full "failed to prepare" \ + [list $testfile "c++" $srcfile {}]] } { return -1 } diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/amd64-entry-value-paramref.S gdb-10.2/gdb/testsuite/gdb.arch/amd64-entry-value-paramref.S --- gdb-9.1/gdb/testsuite/gdb.arch/amd64-entry-value-paramref.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/amd64-entry-value-paramref.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/amd64-entry-value-param.S gdb-10.2/gdb/testsuite/gdb.arch/amd64-entry-value-param.S --- gdb-9.1/gdb/testsuite/gdb.arch/amd64-entry-value-param.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/amd64-entry-value-param.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/amd64-entry-value.s gdb-10.2/gdb/testsuite/gdb.arch/amd64-entry-value.s --- gdb-9.1/gdb/testsuite/gdb.arch/amd64-entry-value.s 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/amd64-entry-value.s 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/amd64-eval.cc gdb-10.2/gdb/testsuite/gdb.arch/amd64-eval.cc --- gdb-9.1/gdb/testsuite/gdb.arch/amd64-eval.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/amd64-eval.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2019-2020 Free Software Foundation, Inc. + Copyright 2019-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/amd64-eval.exp gdb-10.2/gdb/testsuite/gdb.arch/amd64-eval.exp --- gdb-9.1/gdb/testsuite/gdb.arch/amd64-eval.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/amd64-eval.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/amd64-gs_base.c gdb-10.2/gdb/testsuite/gdb.arch/amd64-gs_base.c --- gdb-9.1/gdb/testsuite/gdb.arch/amd64-gs_base.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/amd64-gs_base.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Test program for fs_base and gs_base. - Copyright 2017-2020 Free Software Foundation, Inc. + Copyright 2017-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/amd64-gs_base.exp gdb-10.2/gdb/testsuite/gdb.arch/amd64-gs_base.exp --- gdb-9.1/gdb/testsuite/gdb.arch/amd64-gs_base.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/amd64-gs_base.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2017-2020 Free Software Foundation, Inc. +# Copyright 2017-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/amd64-i386-address.exp gdb-10.2/gdb/testsuite/gdb.arch/amd64-i386-address.exp --- gdb-9.1/gdb/testsuite/gdb.arch/amd64-i386-address.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/amd64-i386-address.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2009-2020 Free Software Foundation, Inc. +# Copyright 2009-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/amd64-i386-address.S gdb-10.2/gdb/testsuite/gdb.arch/amd64-i386-address.S --- gdb-9.1/gdb/testsuite/gdb.arch/amd64-i386-address.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/amd64-i386-address.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2009-2020 Free Software Foundation, Inc. +/* Copyright 2009-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/amd64-init-x87-values.exp gdb-10.2/gdb/testsuite/gdb.arch/amd64-init-x87-values.exp --- gdb-9.1/gdb/testsuite/gdb.arch/amd64-init-x87-values.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/amd64-init-x87-values.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2018-2020 Free Software Foundation, Inc. +# Copyright 2018-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/amd64-init-x87-values.S gdb-10.2/gdb/testsuite/gdb.arch/amd64-init-x87-values.S --- gdb-9.1/gdb/testsuite/gdb.arch/amd64-init-x87-values.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/amd64-init-x87-values.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2018-2020 Free Software Foundation, Inc. +/* Copyright 2018-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/amd64-invalid-stack-middle.c gdb-10.2/gdb/testsuite/gdb.arch/amd64-invalid-stack-middle.c --- gdb-9.1/gdb/testsuite/gdb.arch/amd64-invalid-stack-middle.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/amd64-invalid-stack-middle.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/amd64-invalid-stack-middle.exp gdb-10.2/gdb/testsuite/gdb.arch/amd64-invalid-stack-middle.exp --- gdb-9.1/gdb/testsuite/gdb.arch/amd64-invalid-stack-middle.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/amd64-invalid-stack-middle.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2014-2020 Free Software Foundation, Inc. +# Copyright (C) 2014-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/amd64-invalid-stack-middle.S gdb-10.2/gdb/testsuite/gdb.arch/amd64-invalid-stack-middle.S --- gdb-9.1/gdb/testsuite/gdb.arch/amd64-invalid-stack-middle.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/amd64-invalid-stack-middle.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/amd64-invalid-stack-top.c gdb-10.2/gdb/testsuite/gdb.arch/amd64-invalid-stack-top.c --- gdb-9.1/gdb/testsuite/gdb.arch/amd64-invalid-stack-top.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/amd64-invalid-stack-top.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/amd64-invalid-stack-top.exp gdb-10.2/gdb/testsuite/gdb.arch/amd64-invalid-stack-top.exp --- gdb-9.1/gdb/testsuite/gdb.arch/amd64-invalid-stack-top.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/amd64-invalid-stack-top.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2014-2020 Free Software Foundation, Inc. +# Copyright (C) 2014-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/amd64-optimout-repeat.c gdb-10.2/gdb/testsuite/gdb.arch/amd64-optimout-repeat.c --- gdb-9.1/gdb/testsuite/gdb.arch/amd64-optimout-repeat.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/amd64-optimout-repeat.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/amd64-optimout-repeat.exp gdb-10.2/gdb/testsuite/gdb.arch/amd64-optimout-repeat.exp --- gdb-9.1/gdb/testsuite/gdb.arch/amd64-optimout-repeat.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/amd64-optimout-repeat.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2014-2020 Free Software Foundation, Inc. +# Copyright (C) 2014-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/amd64-optimout-repeat.S gdb-10.2/gdb/testsuite/gdb.arch/amd64-optimout-repeat.S --- gdb-9.1/gdb/testsuite/gdb.arch/amd64-optimout-repeat.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/amd64-optimout-repeat.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/amd64-osabi.exp gdb-10.2/gdb/testsuite/gdb.arch/amd64-osabi.exp --- gdb-9.1/gdb/testsuite/gdb.arch/amd64-osabi.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/amd64-osabi.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2018-2020 Free Software Foundation, Inc. +# Copyright 2018-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -24,7 +24,7 @@ proc test_osabi_none { arch void_ptr_size long_double_size } { clean_restart - gdb_test "set architecture i386:x86-64" "The target architecture is assumed to be i386:x86-64" + gdb_test "set architecture i386:x86-64" "The target architecture is set to \"i386:x86-64\"\\." gdb_test_no_output "set osabi none" "set osabi none" gdb_test "print sizeof (void*)" " = 8" gdb_test "print sizeof (long double)" " = 16" diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/amd64-prologue-skip.exp gdb-10.2/gdb/testsuite/gdb.arch/amd64-prologue-skip.exp --- gdb-9.1/gdb/testsuite/gdb.arch/amd64-prologue-skip.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/amd64-prologue-skip.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/amd64-prologue-skip.S gdb-10.2/gdb/testsuite/gdb.arch/amd64-prologue-skip.S --- gdb-9.1/gdb/testsuite/gdb.arch/amd64-prologue-skip.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/amd64-prologue-skip.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/amd64-prologue-xmm.c gdb-10.2/gdb/testsuite/gdb.arch/amd64-prologue-xmm.c --- gdb-9.1/gdb/testsuite/gdb.arch/amd64-prologue-xmm.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/amd64-prologue-xmm.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/amd64-prologue-xmm.exp gdb-10.2/gdb/testsuite/gdb.arch/amd64-prologue-xmm.exp --- gdb-9.1/gdb/testsuite/gdb.arch/amd64-prologue-xmm.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/amd64-prologue-xmm.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/amd64-prologue-xmm.s gdb-10.2/gdb/testsuite/gdb.arch/amd64-prologue-xmm.s --- gdb-9.1/gdb/testsuite/gdb.arch/amd64-prologue-xmm.s 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/amd64-prologue-xmm.s 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/amd64-pseudo.c gdb-10.2/gdb/testsuite/gdb.arch/amd64-pseudo.c --- gdb-9.1/gdb/testsuite/gdb.arch/amd64-pseudo.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/amd64-pseudo.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Test program for byte registers. - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -118,7 +118,7 @@ a temp to build %0. */ "r" (r8), "r" (r9), "r" (r10), "r" (r11), "r" (r12), "r" (r13), "r" (r14), "r" (r15)); - puts ("Bye!"); /* forth breakpoint here */ + puts ("Bye!"); /* fourth breakpoint here */ return 0; } diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/amd64-stap-optional-prefix.exp gdb-10.2/gdb/testsuite/gdb.arch/amd64-stap-optional-prefix.exp --- gdb-9.1/gdb/testsuite/gdb.arch/amd64-stap-optional-prefix.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/amd64-stap-optional-prefix.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/amd64-stap-optional-prefix.S gdb-10.2/gdb/testsuite/gdb.arch/amd64-stap-optional-prefix.S --- gdb-9.1/gdb/testsuite/gdb.arch/amd64-stap-optional-prefix.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/amd64-stap-optional-prefix.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2014-2020 Free Software Foundation, Inc. +/* Copyright (C) 2014-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/amd64-stap-special-operands.exp gdb-10.2/gdb/testsuite/gdb.arch/amd64-stap-special-operands.exp --- gdb-9.1/gdb/testsuite/gdb.arch/amd64-stap-special-operands.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/amd64-stap-special-operands.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -19,13 +19,15 @@ } proc test_probe { probe_name } { - if { ![runto "-pstap $probe_name"] } { - fail "run to probe $probe_name" - return - } + with_test_prefix "probe: ${probe_name}" { + if { ![runto "-pstap $probe_name"] } { + fail "run to probe $probe_name" + return + } - gdb_test "print \$_probe_argc" " = 1" - gdb_test "print \$_probe_arg0" " = 10" + gdb_test "print \$_probe_argc" " = 1" + gdb_test "print \$_probe_arg0" " = 10" + } } standard_testfile amd64-stap-triplet.S diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/amd64-stap-three-arg-disp.c gdb-10.2/gdb/testsuite/gdb.arch/amd64-stap-three-arg-disp.c --- gdb-9.1/gdb/testsuite/gdb.arch/amd64-stap-three-arg-disp.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/amd64-stap-three-arg-disp.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2013-2020 Free Software Foundation, Inc. +/* Copyright (C) 2013-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/amd64-stap-triplet.c gdb-10.2/gdb/testsuite/gdb.arch/amd64-stap-triplet.c --- gdb-9.1/gdb/testsuite/gdb.arch/amd64-stap-triplet.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/amd64-stap-triplet.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2013-2020 Free Software Foundation, Inc. +/* Copyright (C) 2013-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/amd64-stap-triplet.S gdb-10.2/gdb/testsuite/gdb.arch/amd64-stap-triplet.S --- gdb-9.1/gdb/testsuite/gdb.arch/amd64-stap-triplet.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/amd64-stap-triplet.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2013-2020 Free Software Foundation, Inc. +/* Copyright (C) 2013-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/amd64-stap-wrong-subexp.exp gdb-10.2/gdb/testsuite/gdb.arch/amd64-stap-wrong-subexp.exp --- gdb-9.1/gdb/testsuite/gdb.arch/amd64-stap-wrong-subexp.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/amd64-stap-wrong-subexp.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/amd64-stap-wrong-subexp.S gdb-10.2/gdb/testsuite/gdb.arch/amd64-stap-wrong-subexp.S --- gdb-9.1/gdb/testsuite/gdb.arch/amd64-stap-wrong-subexp.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/amd64-stap-wrong-subexp.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2014-2020 Free Software Foundation, Inc. +/* Copyright (C) 2014-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/amd64-tailcall-cxx1.cc gdb-10.2/gdb/testsuite/gdb.arch/amd64-tailcall-cxx1.cc --- gdb-9.1/gdb/testsuite/gdb.arch/amd64-tailcall-cxx1.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/amd64-tailcall-cxx1.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/amd64-tailcall-cxx1.S gdb-10.2/gdb/testsuite/gdb.arch/amd64-tailcall-cxx1.S --- gdb-9.1/gdb/testsuite/gdb.arch/amd64-tailcall-cxx1.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/amd64-tailcall-cxx1.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/amd64-tailcall-cxx2.cc gdb-10.2/gdb/testsuite/gdb.arch/amd64-tailcall-cxx2.cc --- gdb-9.1/gdb/testsuite/gdb.arch/amd64-tailcall-cxx2.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/amd64-tailcall-cxx2.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/amd64-tailcall-cxx2.S gdb-10.2/gdb/testsuite/gdb.arch/amd64-tailcall-cxx2.S --- gdb-9.1/gdb/testsuite/gdb.arch/amd64-tailcall-cxx2.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/amd64-tailcall-cxx2.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/amd64-tailcall-cxx.exp gdb-10.2/gdb/testsuite/gdb.arch/amd64-tailcall-cxx.exp --- gdb-9.1/gdb/testsuite/gdb.arch/amd64-tailcall-cxx.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/amd64-tailcall-cxx.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2012-2020 Free Software Foundation, Inc. +# Copyright (C) 2012-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/amd64-tailcall-noret.c gdb-10.2/gdb/testsuite/gdb.arch/amd64-tailcall-noret.c --- gdb-9.1/gdb/testsuite/gdb.arch/amd64-tailcall-noret.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/amd64-tailcall-noret.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/amd64-tailcall-noret.exp gdb-10.2/gdb/testsuite/gdb.arch/amd64-tailcall-noret.exp --- gdb-9.1/gdb/testsuite/gdb.arch/amd64-tailcall-noret.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/amd64-tailcall-noret.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2012-2020 Free Software Foundation, Inc. +# Copyright (C) 2012-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/amd64-tailcall-noret.S gdb-10.2/gdb/testsuite/gdb.arch/amd64-tailcall-noret.S --- gdb-9.1/gdb/testsuite/gdb.arch/amd64-tailcall-noret.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/amd64-tailcall-noret.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/amd64-tailcall-ret.c gdb-10.2/gdb/testsuite/gdb.arch/amd64-tailcall-ret.c --- gdb-9.1/gdb/testsuite/gdb.arch/amd64-tailcall-ret.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/amd64-tailcall-ret.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/amd64-tailcall-ret.exp gdb-10.2/gdb/testsuite/gdb.arch/amd64-tailcall-ret.exp --- gdb-9.1/gdb/testsuite/gdb.arch/amd64-tailcall-ret.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/amd64-tailcall-ret.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2012-2020 Free Software Foundation, Inc. +# Copyright (C) 2012-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -34,11 +34,11 @@ } gdb_breakpoint "g" -gdb_continue_to_breakpoint "g" ".* v = 2;" +gdb_continue_to_breakpoint "first time in g" ".* v = 2;" gdb_test "return" { f \(\); /\* second \*/} "return" \ {Make g return now\? \(y or n\) } "y" -gdb_continue_to_breakpoint "g" ".* v = 2;" +gdb_continue_to_breakpoint "second time in g" ".* v = 2;" gdb_test "finish" " v = 3;" diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/amd64-tailcall-ret.S gdb-10.2/gdb/testsuite/gdb.arch/amd64-tailcall-ret.S --- gdb-9.1/gdb/testsuite/gdb.arch/amd64-tailcall-ret.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/amd64-tailcall-ret.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/amd64-tailcall-self.c gdb-10.2/gdb/testsuite/gdb.arch/amd64-tailcall-self.c --- gdb-9.1/gdb/testsuite/gdb.arch/amd64-tailcall-self.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/amd64-tailcall-self.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/amd64-tailcall-self.exp gdb-10.2/gdb/testsuite/gdb.arch/amd64-tailcall-self.exp --- gdb-9.1/gdb/testsuite/gdb.arch/amd64-tailcall-self.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/amd64-tailcall-self.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020 Free Software Foundation, Inc. +# Copyright (C) 2015-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/amd64-tailcall-self.S gdb-10.2/gdb/testsuite/gdb.arch/amd64-tailcall-self.S --- gdb-9.1/gdb/testsuite/gdb.arch/amd64-tailcall-self.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/amd64-tailcall-self.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/amd64-word.exp gdb-10.2/gdb/testsuite/gdb.arch/amd64-word.exp --- gdb-9.1/gdb/testsuite/gdb.arch/amd64-word.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/amd64-word.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -58,56 +58,56 @@ set word_regs(13) r14w set word_regs(14) r15w -gdb_test "break [gdb_get_line_number "first breakpoint here"]" \ - "Breakpoint .* at .*${srcfile}.*" \ - "set first breakpoint in main" +gdb_breakpoint [gdb_get_line_number "first breakpoint here"] gdb_continue_to_breakpoint "continue to first breakpoint in main" -for { set r 1 } { $r <= 6 } { incr r } { - set hexr [format %x $r] - gdb_test "print/x \$$word_regs($r)" \ - ".. = 0x${hexr}2${hexr}1" \ - "check contents of %$word_regs($r)" +with_test_prefix "at first bp" { + for { set r 1 } { $r <= 6 } { incr r } { + set hexr [format %x $r] + gdb_test "print/x \$$word_regs($r)" \ + ".. = 0x${hexr}2${hexr}1" \ + "check contents of %$word_regs($r)" + } } -gdb_test "break [gdb_get_line_number "second breakpoint here"]" \ - "Breakpoint .* at .*${srcfile}.*" \ - "set second breakpoint in main" +gdb_breakpoint [gdb_get_line_number "second breakpoint here"] gdb_continue_to_breakpoint "continue to second breakpoint in main" -for { set r 7 } { $r <= $nr_regs } { incr r } { - set hexr [format %x $r] - gdb_test "print/x \$$word_regs($r)" \ - ".. = 0x${hexr}2${hexr}1" \ - "check contents of %$word_regs($r)" +with_test_prefix "at second bp" { + for { set r 7 } { $r <= $nr_regs } { incr r } { + set hexr [format %x $r] + gdb_test "print/x \$$word_regs($r)" \ + ".. = 0x${hexr}2${hexr}1" \ + "check contents of %$word_regs($r)" + } + + for { set r 1 } { $r <= 6 } { incr r } { + gdb_test "set var \$$word_regs($r) = $r" "" "set %$word_regs($r)" + } } -for { set r 1 } { $r <= 6 } { incr r } { - gdb_test "set var \$$word_regs($r) = $r" "" "set %$word_regs($r)" -} - -gdb_test "break [gdb_get_line_number "third breakpoint here"]" \ - "Breakpoint .* at .*${srcfile}.*" \ - "set third breakpoint in main" +gdb_breakpoint [gdb_get_line_number "third breakpoint here"] gdb_continue_to_breakpoint "continue to third breakpoint in main" -for { set r 1 } { $r <= 6 } { incr r } { - gdb_test "print \$$word_regs($r)" \ - ".. = $r" \ - "check contents of %$word_regs($r)" -} - -for { set r 7 } { $r <= $nr_regs } { incr r } { - gdb_test "set var \$$word_regs($r) = $r" "" "set %$word_regs($r)" -} - -gdb_test "break [gdb_get_line_number "forth breakpoint here"]" \ - "Breakpoint .* at .*${srcfile}.*" \ - "set forth breakpoint in main" -gdb_continue_to_breakpoint "continue to forth breakpoint in main" - -for { set r 7 } { $r <= $nr_regs } { incr r } { - gdb_test "print \$$word_regs($r)" \ - ".. = $r" \ - "check contents of %$word_regs($r)" +with_test_prefix "at third bp" { + for { set r 1 } { $r <= 6 } { incr r } { + gdb_test "print \$$word_regs($r)" \ + ".. = $r" \ + "check contents of %$word_regs($r)" + } + + for { set r 7 } { $r <= $nr_regs } { incr r } { + gdb_test "set var \$$word_regs($r) = $r" "" "set %$word_regs($r)" + } +} + +gdb_breakpoint [gdb_get_line_number "fourth breakpoint here"] +gdb_continue_to_breakpoint "continue to fourth breakpoint in main" + +with_test_prefix "at fourth bp" { + for { set r 7 } { $r <= $nr_regs } { incr r } { + gdb_test "print \$$word_regs($r)" \ + ".. = $r" \ + "check contents of %$word_regs($r)" + } } diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/arc-analyze-prologue.exp gdb-10.2/gdb/testsuite/gdb.arch/arc-analyze-prologue.exp --- gdb-9.1/gdb/testsuite/gdb.arch/arc-analyze-prologue.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/arc-analyze-prologue.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2017-2020 Free Software Foundation, Inc. +# Copyright 2017-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/arc-analyze-prologue.S gdb-10.2/gdb/testsuite/gdb.arch/arc-analyze-prologue.S --- gdb-9.1/gdb/testsuite/gdb.arch/arc-analyze-prologue.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/arc-analyze-prologue.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ ; This testcase is part of GDB, the GNU debugger. -; Copyright 2017-2020 Free Software Foundation, Inc. +; Copyright 2017-2021 Free Software Foundation, Inc. ; This program is free software; you can redistribute it and/or modify ; it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/arc-decode-insn.exp gdb-10.2/gdb/testsuite/gdb.arch/arc-decode-insn.exp --- gdb-9.1/gdb/testsuite/gdb.arch/arc-decode-insn.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/arc-decode-insn.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2017-2020 Free Software Foundation, Inc. +# Copyright 2017-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/arc-decode-insn.S gdb-10.2/gdb/testsuite/gdb.arch/arc-decode-insn.S --- gdb-9.1/gdb/testsuite/gdb.arch/arc-decode-insn.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/arc-decode-insn.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ ; This testcase is part of GDB, the GNU debugger. -; Copyright 2017-2020 Free Software Foundation, Inc. +; Copyright 2017-2021 Free Software Foundation, Inc. ; This program is free software; you can redistribute it and/or modify ; it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/arc-tdesc-cpu.exp gdb-10.2/gdb/testsuite/gdb.arch/arc-tdesc-cpu.exp --- gdb-9.1/gdb/testsuite/gdb.arch/arc-tdesc-cpu.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/arc-tdesc-cpu.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2017-2020 Free Software Foundation, Inc. +# Copyright 2017-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/arc-tdesc-cpu.xml gdb-10.2/gdb/testsuite/gdb.arch/arc-tdesc-cpu.xml --- gdb-9.1/gdb/testsuite/gdb.arch/arc-tdesc-cpu.xml 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/arc-tdesc-cpu.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2017-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2017-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright @@ -9,7 +9,7 @@ <target> <architecture>arc:HS</architecture> - <feature name="org.gnu.gdb.arc.core.v2"> + <feature name="org.gnu.gdb.arc.core"> <reg name="r0" bitsize="32"/> <reg name="r1" bitsize="32"/> <reg name="r2" bitsize="32"/> @@ -46,7 +46,7 @@ <reg name="pcl" bitsize="32"/> </feature> - <feature name="org.gnu.gdb.arc.aux-minimal"> + <feature name="org.gnu.gdb.arc.aux"> <reg name="pc" bitsize="32"/> <reg name="status32" bitsize="32"/> </feature> diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/arm-bl-branch-dest.c gdb-10.2/gdb/testsuite/gdb.arch/arm-bl-branch-dest.c --- gdb-9.1/gdb/testsuite/gdb.arch/arm-bl-branch-dest.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/arm-bl-branch-dest.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/arm-bl-branch-dest.exp gdb-10.2/gdb/testsuite/gdb.arch/arm-bl-branch-dest.exp --- gdb-9.1/gdb/testsuite/gdb.arch/arm-bl-branch-dest.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/arm-bl-branch-dest.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2013-2020 Free Software Foundation, Inc. +# Copyright (C) 2013-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/arm-cmse-sgstubs.c gdb-10.2/gdb/testsuite/gdb.arch/arm-cmse-sgstubs.c --- gdb-9.1/gdb/testsuite/gdb.arch/arm-cmse-sgstubs.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/arm-cmse-sgstubs.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2019-2020 Free Software Foundation, Inc. + Copyright 2019-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/arm-cmse-sgstubs.exp gdb-10.2/gdb/testsuite/gdb.arch/arm-cmse-sgstubs.exp --- gdb-9.1/gdb/testsuite/gdb.arch/arm-cmse-sgstubs.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/arm-cmse-sgstubs.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/arm-disassembler-options.exp gdb-10.2/gdb/testsuite/gdb.arch/arm-disassembler-options.exp --- gdb-9.1/gdb/testsuite/gdb.arch/arm-disassembler-options.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/arm-disassembler-options.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -31,7 +31,7 @@ set arch2 "armv5" gdb_test "set architecture $arch1" \ - "The target architecture is assumed to be $arch1" \ + "The target architecture is set to \"$arch1\"" \ "set architecture $arch1" gdb_test_no_output "set disassembler-options" @@ -47,10 +47,10 @@ # Change architectures and verify the disassembler options have been preserved. gdb_test "set architecture $arch2" \ - "The target architecture is assumed to be $arch2" \ + "The target architecture is set to \"$arch2\"" \ "set architecture $arch2" gdb_test "show disassembler-options" \ "The current disassembler options are '$option'.*" \ - "show disassembler-options $option" + "show disassembler-options $option, modified architecture" diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/arm-disp-step.exp gdb-10.2/gdb/testsuite/gdb.arch/arm-disp-step.exp --- gdb-9.1/gdb/testsuite/gdb.arch/arm-disp-step.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/arm-disp-step.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -37,12 +37,12 @@ # Try to set breakpoint on test_ldm_stm_pc. If symbol 'test_ldm_stm_pc' # can't be resolved, test case is compiled in Thumb mode, skip it. - gdb_test_multiple "break *test_ldm_stm_pc" "break test_ldm_stm_pc" { + gdb_test_multiple "break *test_ldm_stm_pc" "" { -re "Breakpoint.*at.* file .*$srcfile, line.*\r\n$gdb_prompt $" { - pass "break test_ldm_stm_pc" + pass $gdb_test_name } -re "No symbol.*\r\n$gdb_prompt $" { - pass "break test_ldm_stm_pc" + pass $gdb_test_name return 0 } } @@ -68,9 +68,9 @@ global srcfile global gdb_prompt - gdb_test_multiple "break *test_ldr_literal" "break test_ldr_literal" { + gdb_test_multiple "break *test_ldr_literal" "" { -re "Breakpoint.*at.* file .*$srcfile, line.*\r\n$gdb_prompt $" { - pass "break test_ldr_literal" + pass $gdb_test_name } -re "No symbol.*\r\n$gdb_prompt $" { return 0 @@ -101,9 +101,9 @@ global srcfile global gdb_prompt - gdb_test_multiple "break *test_ldr_literal_16" "break test_ldr_literal_16" { + gdb_test_multiple "break *test_ldr_literal_16" "" { -re "Breakpoint.*at.* file .*$srcfile, line.*\r\n$gdb_prompt $" { - pass "break test_ldr_literal" + pass $gdb_test_name } -re "No symbol.*\r\n$gdb_prompt $" { return 0 @@ -191,9 +191,9 @@ global srcfile global gdb_prompt - gdb_test_multiple "break *test_zero_cbnz" "break test_zero_cbnz" { + gdb_test_multiple "break *test_zero_cbnz" "" { -re "Breakpoint.*at.* file .*$srcfile, line.*\r\n$gdb_prompt $" { - pass "break test_ldr_literal" + pass $gdb_test_name } -re "No symbol.*\r\n$gdb_prompt $" { return 0 @@ -226,9 +226,9 @@ global srcfile global gdb_prompt - gdb_test_multiple "break *test_adr" "break test_adr" { + gdb_test_multiple "break *test_adr" "" { -re "Breakpoint.*at.* file .*$srcfile, line.*\r\n$gdb_prompt $" { - pass "break test_adr" + pass $gdb_test_name } -re "No symbol.*\r\n$gdb_prompt $" { return 0 @@ -249,9 +249,9 @@ global srcfile global gdb_prompt - gdb_test_multiple "break *test_adr_32bit" "break test_adr_32bit" { + gdb_test_multiple "break *test_adr_32bit" "" { -re "Breakpoint.*at.* file .*$srcfile, line.*\r\n$gdb_prompt $" { - pass "break test_adr" + pass $gdb_test_name } -re "No symbol.*\r\n$gdb_prompt $" { return 0 @@ -309,7 +309,7 @@ "break test_pop_pc_3_right" gdb_test "break *test_pop_pc_3_wrong" \ "Breakpoint.*at.* file .*$srcfile, line.*" \ - "break test_pop_pc_1_wrong" + "break test_pop_pc_3_wrong" gdb_continue_to_breakpoint "continue to test_pop_pc_1" \ ".*b.*\{r1\, pc\}.*" @@ -334,12 +334,12 @@ global srcfile global gdb_prompt - gdb_test_multiple "break *test_str_pc" "break test_str_pc" { + gdb_test_multiple "break *test_str_pc" "" { -re "Breakpoint.*at.* file .*$srcfile, line.*\r\n$gdb_prompt $" { - pass "break test_str_pc" + pass $gdb_test_name } -re "No symbol.*\r\n$gdb_prompt $" { - pass "break test_str_pc" + pass $gdb_test_name return } } @@ -371,10 +371,9 @@ proc test_add_rn_pc {} { global srcfile gdb_prompt - set test "break test_add_rn_pc" - gdb_test_multiple "break *test_add_rn_pc" $test { + gdb_test_multiple "break *test_add_rn_pc" "" { -re "Breakpoint.*at.* file .*$srcfile, line.*\r\n$gdb_prompt $" { - pass $test + pass $gdb_test_name } -re "No symbol.*\r\n$gdb_prompt $" { return diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/arm-disp-step.S gdb-10.2/gdb/testsuite/gdb.arch/arm-disp-step.S --- gdb-9.1/gdb/testsuite/gdb.arch/arm-disp-step.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/arm-disp-step.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2010-2020 Free Software Foundation, Inc. +/* Copyright 2010-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/arm-neon.c gdb-10.2/gdb/testsuite/gdb.arch/arm-neon.c --- gdb-9.1/gdb/testsuite/gdb.arch/arm-neon.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/arm-neon.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2015-2020 Free Software Foundation, Inc. +/* Copyright 2015-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/arm-neon.exp gdb-10.2/gdb/testsuite/gdb.arch/arm-neon.exp --- gdb-9.1/gdb/testsuite/gdb.arch/arm-neon.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/arm-neon.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/arm-single-step-kernel-helper.c gdb-10.2/gdb/testsuite/gdb.arch/arm-single-step-kernel-helper.c --- gdb-9.1/gdb/testsuite/gdb.arch/arm-single-step-kernel-helper.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/arm-single-step-kernel-helper.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2016-2020 Free Software Foundation, Inc. + Copyright 2016-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/arm-single-step-kernel-helper.exp gdb-10.2/gdb/testsuite/gdb.arch/arm-single-step-kernel-helper.exp --- gdb-9.1/gdb/testsuite/gdb.arch/arm-single-step-kernel-helper.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/arm-single-step-kernel-helper.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2016-2020 Free Software Foundation, Inc. +# Copyright (C) 2016-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/avr-flash-qualifier.c gdb-10.2/gdb/testsuite/gdb.arch/avr-flash-qualifier.c --- gdb-9.1/gdb/testsuite/gdb.arch/avr-flash-qualifier.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/avr-flash-qualifier.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/avr-flash-qualifier.exp gdb-10.2/gdb/testsuite/gdb.arch/avr-flash-qualifier.exp --- gdb-9.1/gdb/testsuite/gdb.arch/avr-flash-qualifier.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/avr-flash-qualifier.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/disp-step-insn-reloc.exp gdb-10.2/gdb/testsuite/gdb.arch/disp-step-insn-reloc.exp --- gdb-9.1/gdb/testsuite/gdb.arch/disp-step-insn-reloc.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/disp-step-insn-reloc.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/e500-abi.exp gdb-10.2/gdb/testsuite/gdb.arch/e500-abi.exp --- gdb-9.1/gdb/testsuite/gdb.arch/e500-abi.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/e500-abi.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2003-2020 Free Software Foundation, Inc. +# Copyright 2003-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/e500-prologue.c gdb-10.2/gdb/testsuite/gdb.arch/e500-prologue.c --- gdb-9.1/gdb/testsuite/gdb.arch/e500-prologue.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/e500-prologue.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2004-2020 Free Software Foundation, Inc. + Copyright 2004-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/e500-prologue.exp gdb-10.2/gdb/testsuite/gdb.arch/e500-prologue.exp --- gdb-9.1/gdb/testsuite/gdb.arch/e500-prologue.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/e500-prologue.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2004-2020 Free Software Foundation, Inc. +# Copyright 2004-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/e500-regs.exp gdb-10.2/gdb/testsuite/gdb.arch/e500-regs.exp --- gdb-9.1/gdb/testsuite/gdb.arch/e500-regs.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/e500-regs.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2003-2020 Free Software Foundation, Inc. +# Copyright 2003-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/ftrace-insn-reloc.exp gdb-10.2/gdb/testsuite/gdb.arch/ftrace-insn-reloc.exp --- gdb-9.1/gdb/testsuite/gdb.arch/ftrace-insn-reloc.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/ftrace-insn-reloc.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/gdb1291.exp gdb-10.2/gdb/testsuite/gdb.arch/gdb1291.exp --- gdb-9.1/gdb/testsuite/gdb.arch/gdb1291.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/gdb1291.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2003-2020 Free Software Foundation, Inc. +# Copyright 2003-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/gdb1291.s gdb-10.2/gdb/testsuite/gdb.arch/gdb1291.s --- gdb-9.1/gdb/testsuite/gdb.arch/gdb1291.s 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/gdb1291.s 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -! Copyright 2004-2020 Free Software Foundation, Inc. +! Copyright 2004-2021 Free Software Foundation, Inc. ! ! This program is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/gdb1431.exp gdb-10.2/gdb/testsuite/gdb.arch/gdb1431.exp --- gdb-9.1/gdb/testsuite/gdb.arch/gdb1431.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/gdb1431.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2003-2020 Free Software Foundation, Inc. +# Copyright 2003-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/gdb1431.s gdb-10.2/gdb/testsuite/gdb.arch/gdb1431.s --- gdb-9.1/gdb/testsuite/gdb.arch/gdb1431.s 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/gdb1431.s 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -! Copyright 2004-2020 Free Software Foundation, Inc. +! Copyright 2004-2021 Free Software Foundation, Inc. ! ! This program is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/gdb1558.c gdb-10.2/gdb/testsuite/gdb.arch/gdb1558.c --- gdb-9.1/gdb/testsuite/gdb.arch/gdb1558.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/gdb1558.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2004-2020 Free Software Foundation, Inc. +/* Copyright 2004-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/gdb1558.exp gdb-10.2/gdb/testsuite/gdb.arch/gdb1558.exp --- gdb-9.1/gdb/testsuite/gdb.arch/gdb1558.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/gdb1558.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2004-2020 Free Software Foundation, Inc. +# Copyright 2004-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/i386-avx512.c gdb-10.2/gdb/testsuite/gdb.arch/i386-avx512.c --- gdb-9.1/gdb/testsuite/gdb.arch/i386-avx512.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/i386-avx512.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Test program for AVX 512 registers. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/i386-avx512.exp gdb-10.2/gdb/testsuite/gdb.arch/i386-avx512.exp --- gdb-9.1/gdb/testsuite/gdb.arch/i386-avx512.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/i386-avx512.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/i386-avx.c gdb-10.2/gdb/testsuite/gdb.arch/i386-avx.c --- gdb-9.1/gdb/testsuite/gdb.arch/i386-avx.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/i386-avx.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Test program for AVX registers. - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/i386-avx.exp gdb-10.2/gdb/testsuite/gdb.arch/i386-avx.exp --- gdb-9.1/gdb/testsuite/gdb.arch/i386-avx.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/i386-avx.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -31,7 +31,7 @@ } set additional_flags "" -if [test_compiler_info gcc*] { +if { [test_compiler_info gcc*] || [test_compiler_info clang*] } { set additional_flags "additional_flags=-mavx -I${srcdir}/.." } diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/i386-biarch-core.exp gdb-10.2/gdb/testsuite/gdb.arch/i386-biarch-core.exp --- gdb-9.1/gdb/testsuite/gdb.arch/i386-biarch-core.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/i386-biarch-core.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/i386-bp_permanent.c gdb-10.2/gdb/testsuite/gdb.arch/i386-bp_permanent.c --- gdb-9.1/gdb/testsuite/gdb.arch/i386-bp_permanent.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/i386-bp_permanent.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2003-2020 Free Software Foundation, Inc. +/* Copyright (C) 2003-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/i386-bp_permanent.exp gdb-10.2/gdb/testsuite/gdb.arch/i386-bp_permanent.exp --- gdb-9.1/gdb/testsuite/gdb.arch/i386-bp_permanent.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/i386-bp_permanent.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2008-2020 Free Software Foundation, Inc. +# Copyright (C) 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/i386-byte.exp gdb-10.2/gdb/testsuite/gdb.arch/i386-byte.exp --- gdb-9.1/gdb/testsuite/gdb.arch/i386-byte.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/i386-byte.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -51,38 +51,38 @@ set byte_regs(7) ch set byte_regs(8) dh -gdb_test "break [gdb_get_line_number "first breakpoint here"]" \ - "Breakpoint .* at .*${srcfile}.*" \ - "set first breakpoint in main" +gdb_breakpoint [gdb_get_line_number "first breakpoint here"] gdb_continue_to_breakpoint "continue to first breakpoint in main" -for { set r 1 } { $r <= 4 } { incr r } { - gdb_test "print/x \$$byte_regs($r)" \ - ".. = 0x[format %x $r]1" \ - "check contents of %$byte_regs($r)" - set h [expr $r + 4] - gdb_test "print/x \$$byte_regs($h)" \ - ".. = 0x[format %x $r]2" \ - "check contents of %$byte_regs($h)" -} - -for { set r 1 } { $r <= 4 } { incr r } { - gdb_test "set var \$$byte_regs($r) = $r" "" "set %$byte_regs($r)" - set h [expr $r + 4] - gdb_test "set var \$$byte_regs($h) = $h" "" "set %$byte_regs($h)" -} - -gdb_test "break [gdb_get_line_number "second breakpoint here"]" \ - "Breakpoint .* at .*${srcfile}.*" \ - "set second breakpoint in main" +with_test_prefix "at first bp" { + for { set r 1 } { $r <= 4 } { incr r } { + gdb_test "print/x \$$byte_regs($r)" \ + ".. = 0x[format %x $r]1" \ + "check contents of %$byte_regs($r)" + set h [expr $r + 4] + gdb_test "print/x \$$byte_regs($h)" \ + ".. = 0x[format %x $r]2" \ + "check contents of %$byte_regs($h)" + } + + for { set r 1 } { $r <= 4 } { incr r } { + gdb_test "set var \$$byte_regs($r) = $r" "" "set %$byte_regs($r)" + set h [expr $r + 4] + gdb_test "set var \$$byte_regs($h) = $h" "" "set %$byte_regs($h)" + } +} + +gdb_breakpoint [gdb_get_line_number "second breakpoint here"] gdb_continue_to_breakpoint "continue to second breakpoint in main" -for { set r 1 } { $r <= 4 } { incr r } { - gdb_test "print \$$byte_regs($r)" \ - ".. = $r" \ - "check contents of %$byte_regs($r)" - set h [expr $r + 4] - gdb_test "print \$$byte_regs($h)" \ - ".. = $h" \ - "check contents of %$byte_regs($h)" +with_test_prefix "at second bp" { + for { set r 1 } { $r <= 4 } { incr r } { + gdb_test "print \$$byte_regs($r)" \ + ".. = $r" \ + "check contents of %$byte_regs($r)" + set h [expr $r + 4] + gdb_test "print \$$byte_regs($h)" \ + ".. = $h" \ + "check contents of %$byte_regs($h)" + } } diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/i386-cfi-notcurrent.exp gdb-10.2/gdb/testsuite/gdb.arch/i386-cfi-notcurrent.exp --- gdb-9.1/gdb/testsuite/gdb.arch/i386-cfi-notcurrent.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/i386-cfi-notcurrent.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/i386-cfi-notcurrent.S gdb-10.2/gdb/testsuite/gdb.arch/i386-cfi-notcurrent.S --- gdb-9.1/gdb/testsuite/gdb.arch/i386-cfi-notcurrent.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/i386-cfi-notcurrent.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2012-2020 Free Software Foundation, Inc. +/* Copyright 2012-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/i386-disp-step.exp gdb-10.2/gdb/testsuite/gdb.arch/i386-disp-step.exp --- gdb-9.1/gdb/testsuite/gdb.arch/i386-disp-step.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/i386-disp-step.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2009-2020 Free Software Foundation, Inc. +# Copyright 2009-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/i386-disp-step.S gdb-10.2/gdb/testsuite/gdb.arch/i386-disp-step.S --- gdb-9.1/gdb/testsuite/gdb.arch/i386-disp-step.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/i386-disp-step.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2009-2020 Free Software Foundation, Inc. +/* Copyright 2009-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/i386-dr3-watch.c gdb-10.2/gdb/testsuite/gdb.arch/i386-dr3-watch.c --- gdb-9.1/gdb/testsuite/gdb.arch/i386-dr3-watch.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/i386-dr3-watch.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2011-2020 Free Software Foundation, Inc. +/* Copyright 2011-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/i386-dr3-watch.exp gdb-10.2/gdb/testsuite/gdb.arch/i386-dr3-watch.exp --- gdb-9.1/gdb/testsuite/gdb.arch/i386-dr3-watch.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/i386-dr3-watch.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/i386-float.exp gdb-10.2/gdb/testsuite/gdb.arch/i386-float.exp --- gdb-9.1/gdb/testsuite/gdb.arch/i386-float.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/i386-float.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2009-2020 Free Software Foundation, Inc. +# Copyright (C) 2009-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/i386-float.S gdb-10.2/gdb/testsuite/gdb.arch/i386-float.S --- gdb-9.1/gdb/testsuite/gdb.arch/i386-float.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/i386-float.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2009-2020 Free Software Foundation, Inc. +/* Copyright 2009-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/i386-gnu-cfi-asm.S gdb-10.2/gdb/testsuite/gdb.arch/i386-gnu-cfi-asm.S --- gdb-9.1/gdb/testsuite/gdb.arch/i386-gnu-cfi-asm.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/i386-gnu-cfi-asm.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2007-2020 Free Software Foundation, Inc. +/* Copyright 2007-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/i386-gnu-cfi.c gdb-10.2/gdb/testsuite/gdb.arch/i386-gnu-cfi.c --- gdb-9.1/gdb/testsuite/gdb.arch/i386-gnu-cfi.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/i386-gnu-cfi.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Unwinding of DW_CFA_GNU_negative_offset_extended test program. - Copyright 2007-2020 Free Software Foundation, Inc. + Copyright 2007-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/i386-gnu-cfi.exp gdb-10.2/gdb/testsuite/gdb.arch/i386-gnu-cfi.exp --- gdb-9.1/gdb/testsuite/gdb.arch/i386-gnu-cfi.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/i386-gnu-cfi.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2007-2020 Free Software Foundation, Inc. +# Copyright 2007-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/i386-mpx.c gdb-10.2/gdb/testsuite/gdb.arch/i386-mpx.c --- gdb-9.1/gdb/testsuite/gdb.arch/i386-mpx.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/i386-mpx.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Test program for MPX registers. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/i386-mpx-call.c gdb-10.2/gdb/testsuite/gdb.arch/i386-mpx-call.c --- gdb-9.1/gdb/testsuite/gdb.arch/i386-mpx-call.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/i386-mpx-call.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Test for inferior function calls MPX context. - Copyright (C) 2017-2020 Free Software Foundation, Inc. + Copyright (C) 2017-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/i386-mpx-call.exp gdb-10.2/gdb/testsuite/gdb.arch/i386-mpx-call.exp --- gdb-9.1/gdb/testsuite/gdb.arch/i386-mpx-call.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/i386-mpx-call.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2017-2020 Free Software Foundation, Inc. +# Copyright (C) 2017-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -21,6 +21,10 @@ standard_testfile +if { ![supports_mpx_check_pointer_bounds] } { + return -1 +} + set comp_flags "-mmpx -fcheck-pointer-bounds -I${srcdir}/../nat" if {[prepare_for_testing "failed to prepare" ${testfile} ${srcfile} \ diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/i386-mpx.exp gdb-10.2/gdb/testsuite/gdb.arch/i386-mpx.exp --- gdb-9.1/gdb/testsuite/gdb.arch/i386-mpx.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/i386-mpx.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # # Contributed by Intel Corp. <walfred.tedeschi@intel.com> # @@ -27,6 +27,10 @@ return } +if { ![supports_mpx_check_pointer_bounds] } { + return -1 +} + set comp_flags "-mmpx -fcheck-pointer-bounds -I${srcdir}/../nat/" if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile} \ diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/i386-mpx-map.c gdb-10.2/gdb/testsuite/gdb.arch/i386-mpx-map.c --- gdb-9.1/gdb/testsuite/gdb.arch/i386-mpx-map.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/i386-mpx-map.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Test program for MPX map allocated bounds. - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. Contributed by Intel Corp. <walfred.tedeschi@intel.com> <mircea.gherzan@intel.com> diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/i386-mpx-map.exp gdb-10.2/gdb/testsuite/gdb.arch/i386-mpx-map.exp --- gdb-9.1/gdb/testsuite/gdb.arch/i386-mpx-map.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/i386-mpx-map.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # # Contributed by Intel Corp. <walfred.tedeschi@intel.com>, # <mircea.gherzan@intel.com> @@ -23,6 +23,10 @@ standard_testfile +if { ![supports_mpx_check_pointer_bounds] } { + return -1 +} + set comp_flags "-mmpx -fcheck-pointer-bounds -I${srcdir}/../nat/" if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile} \ diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/i386-mpx-sigsegv.c gdb-10.2/gdb/testsuite/gdb.arch/i386-mpx-sigsegv.c --- gdb-9.1/gdb/testsuite/gdb.arch/i386-mpx-sigsegv.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/i386-mpx-sigsegv.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2015-2020 Free Software Foundation, Inc. +/* Copyright (C) 2015-2021 Free Software Foundation, Inc. Contributed by Intel Corp. <walfred.tedeschi@intel.com> diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/i386-mpx-sigsegv.exp gdb-10.2/gdb/testsuite/gdb.arch/i386-mpx-sigsegv.exp --- gdb-9.1/gdb/testsuite/gdb.arch/i386-mpx-sigsegv.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/i386-mpx-sigsegv.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020 Free Software Foundation, Inc. +# Copyright (C) 2015-2021 Free Software Foundation, Inc. # # Contributed by Intel Corp. <walfred.tedeschi@intel.com> # @@ -23,6 +23,10 @@ standard_testfile +if { ![supports_mpx_check_pointer_bounds] } { + return -1 +} + set comp_flags "-mmpx -fcheck-pointer-bounds -I${srcdir}/../nat/" if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile} \ diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/i386-mpx-simple_segv.c gdb-10.2/gdb/testsuite/gdb.arch/i386-mpx-simple_segv.c --- gdb-9.1/gdb/testsuite/gdb.arch/i386-mpx-simple_segv.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/i386-mpx-simple_segv.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2015-2020 Free Software Foundation, Inc. +/* Copyright (C) 2015-2021 Free Software Foundation, Inc. Contributed by Intel Corp. <walfred.tedeschi@intel.com> diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/i386-mpx-simple_segv.exp gdb-10.2/gdb/testsuite/gdb.arch/i386-mpx-simple_segv.exp --- gdb-9.1/gdb/testsuite/gdb.arch/i386-mpx-simple_segv.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/i386-mpx-simple_segv.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020 Free Software Foundation, Inc. +# Copyright (C) 2015-2021 Free Software Foundation, Inc. # # Contributed by Intel Corp. <walfred.tedeschi@intel.com> # @@ -29,6 +29,10 @@ standard_testfile +if { ![supports_mpx_check_pointer_bounds] } { + return -1 +} + set comp_flags "-mmpx -fcheck-pointer-bounds -I${srcdir}/../nat/" if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile} \ diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/i386-permbkpt.exp gdb-10.2/gdb/testsuite/gdb.arch/i386-permbkpt.exp --- gdb-9.1/gdb/testsuite/gdb.arch/i386-permbkpt.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/i386-permbkpt.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2009-2020 Free Software Foundation, Inc. +# Copyright (C) 2009-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/i386-permbkpt.S gdb-10.2/gdb/testsuite/gdb.arch/i386-permbkpt.S --- gdb-9.1/gdb/testsuite/gdb.arch/i386-permbkpt.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/i386-permbkpt.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2009-2020 Free Software Foundation, Inc. +/* Copyright 2009-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/i386-pkru.c gdb-10.2/gdb/testsuite/gdb.arch/i386-pkru.c --- gdb-9.1/gdb/testsuite/gdb.arch/i386-pkru.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/i386-pkru.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Test program for PKEYS registers. - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/i386-pkru.exp gdb-10.2/gdb/testsuite/gdb.arch/i386-pkru.exp --- gdb-9.1/gdb/testsuite/gdb.arch/i386-pkru.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/i386-pkru.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/i386-prologue.c gdb-10.2/gdb/testsuite/gdb.arch/i386-prologue.c --- gdb-9.1/gdb/testsuite/gdb.arch/i386-prologue.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/i386-prologue.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Unwinder test program. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/i386-prologue.exp gdb-10.2/gdb/testsuite/gdb.arch/i386-prologue.exp --- gdb-9.1/gdb/testsuite/gdb.arch/i386-prologue.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/i386-prologue.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2003-2020 Free Software Foundation, Inc. +# Copyright (C) 2003-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/i386-prologue-skip-cf-protection.c gdb-10.2/gdb/testsuite/gdb.arch/i386-prologue-skip-cf-protection.c --- gdb-9.1/gdb/testsuite/gdb.arch/i386-prologue-skip-cf-protection.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/i386-prologue-skip-cf-protection.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,21 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +int main (void) +{ + return 0; +} diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/i386-prologue-skip-cf-protection.exp gdb-10.2/gdb/testsuite/gdb.arch/i386-prologue-skip-cf-protection.exp --- gdb-9.1/gdb/testsuite/gdb.arch/i386-prologue-skip-cf-protection.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/i386-prologue-skip-cf-protection.exp 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,65 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Test skipping a prologue that was generated with gcc's -fcf-protection=full +# (control flow protection) option. +# +# This option places an `endbr32`/`endbr64` instruction at the start of +# all functions, which can interfere with prologue analysis. + +standard_testfile .c +set binfile ${binfile} + +if { ![istarget x86_64-*-*] && ![istarget i?86-*-*] } { + verbose "Skipping ${testfile}." + return +} + +if { ![supports_fcf_protection] } { + untested "-fcf-protection not supported" + return +} + +set opts {debug additional_flags=-fcf-protection=full} + +if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable $opts] != "" } { + untested "failed to compile" + return +} + +clean_restart ${binfile} + +# Get start address of function main. +set main_addr [get_integer_valueof &main -1] +gdb_assert {$main_addr != -1} + +set bp_addr -1 + +# Put breakpoint on main, get the address where the breakpoint was installed. +gdb_test_multiple "break main" "break on main, get address" { + -re -wrap "Breakpoint $decimal at ($hex).*" { + set bp_addr $expect_out(1,string) + + # Convert to decimal. + set bp_addr [expr $bp_addr] + + pass $gdb_test_name + } +} + +if { $bp_addr != -1 } { + # Make sure some prologue was skipped. + gdb_assert {$bp_addr > $main_addr} +} diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/i386-pseudo.c gdb-10.2/gdb/testsuite/gdb.arch/i386-pseudo.c --- gdb-9.1/gdb/testsuite/gdb.arch/i386-pseudo.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/i386-pseudo.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Test program for byte registers. - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/i386-signal.c gdb-10.2/gdb/testsuite/gdb.arch/i386-signal.c --- gdb-9.1/gdb/testsuite/gdb.arch/i386-signal.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/i386-signal.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Unwinder test program for signal frames. - Copyright 2007-2020 Free Software Foundation, Inc. + Copyright 2007-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/i386-signal.exp gdb-10.2/gdb/testsuite/gdb.arch/i386-signal.exp --- gdb-9.1/gdb/testsuite/gdb.arch/i386-signal.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/i386-signal.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2007-2020 Free Software Foundation, Inc. +# Copyright 2007-2021 Free Software Foundation, Inc. # This file is part of the GDB testsuite. diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/i386-size.c gdb-10.2/gdb/testsuite/gdb.arch/i386-size.c --- gdb-9.1/gdb/testsuite/gdb.arch/i386-size.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/i386-size.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Symbol size test program. - Copyright 2006-2020 Free Software Foundation, Inc. + Copyright 2006-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/i386-size.exp gdb-10.2/gdb/testsuite/gdb.arch/i386-size.exp --- gdb-9.1/gdb/testsuite/gdb.arch/i386-size.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/i386-size.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2006-2020 Free Software Foundation, Inc. +# Copyright 2006-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/i386-size-overlap.c gdb-10.2/gdb/testsuite/gdb.arch/i386-size-overlap.c --- gdb-9.1/gdb/testsuite/gdb.arch/i386-size-overlap.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/i386-size-overlap.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Overlapping symbol sizes test program. - Copyright 2007-2020 Free Software Foundation, Inc. + Copyright 2007-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/i386-size-overlap.exp gdb-10.2/gdb/testsuite/gdb.arch/i386-size-overlap.exp --- gdb-9.1/gdb/testsuite/gdb.arch/i386-size-overlap.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/i386-size-overlap.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2007-2020 Free Software Foundation, Inc. +# Copyright 2007-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/i386-sse.c gdb-10.2/gdb/testsuite/gdb.arch/i386-sse.c --- gdb-9.1/gdb/testsuite/gdb.arch/i386-sse.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/i386-sse.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Test program for SSE registers. - Copyright 2004-2020 Free Software Foundation, Inc. + Copyright 2004-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -51,7 +51,7 @@ int have_sse (void) { - int edx; + unsigned int edx; if (!x86_cpuid (1, NULL, NULL, NULL, &edx)) return 0; diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/i386-sse.exp gdb-10.2/gdb/testsuite/gdb.arch/i386-sse.exp --- gdb-9.1/gdb/testsuite/gdb.arch/i386-sse.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/i386-sse.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2004-2020 Free Software Foundation, Inc. +# Copyright 2004-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -31,7 +31,7 @@ } set additional_flags "" -if [test_compiler_info gcc*] { +if { [test_compiler_info gcc*] || [test_compiler_info clang*] } { set additional_flags "additional_flags=-msse -I${srcdir}/.." } diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/i386-sse-stack-align.c gdb-10.2/gdb/testsuite/gdb.arch/i386-sse-stack-align.c --- gdb-9.1/gdb/testsuite/gdb.arch/i386-sse-stack-align.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/i386-sse-stack-align.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2012-2020 Free Software Foundation, Inc. +/* Copyright 2012-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/i386-sse-stack-align.exp gdb-10.2/gdb/testsuite/gdb.arch/i386-sse-stack-align.exp --- gdb-9.1/gdb/testsuite/gdb.arch/i386-sse-stack-align.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/i386-sse-stack-align.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/i386-sse-stack-align.S gdb-10.2/gdb/testsuite/gdb.arch/i386-sse-stack-align.S --- gdb-9.1/gdb/testsuite/gdb.arch/i386-sse-stack-align.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/i386-sse-stack-align.S 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2012-2020 Free Software Foundation, Inc. +/* Copyright 2012-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/i386-stap-eval-lang-ada.c gdb-10.2/gdb/testsuite/gdb.arch/i386-stap-eval-lang-ada.c --- gdb-9.1/gdb/testsuite/gdb.arch/i386-stap-eval-lang-ada.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/i386-stap-eval-lang-ada.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/i386-stap-eval-lang-ada.exp gdb-10.2/gdb/testsuite/gdb.arch/i386-stap-eval-lang-ada.exp --- gdb-9.1/gdb/testsuite/gdb.arch/i386-stap-eval-lang-ada.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/i386-stap-eval-lang-ada.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/i386-stap-eval-lang-ada.S gdb-10.2/gdb/testsuite/gdb.arch/i386-stap-eval-lang-ada.S --- gdb-9.1/gdb/testsuite/gdb.arch/i386-stap-eval-lang-ada.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/i386-stap-eval-lang-ada.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/i386-unwind.c gdb-10.2/gdb/testsuite/gdb.arch/i386-unwind.c --- gdb-9.1/gdb/testsuite/gdb.arch/i386-unwind.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/i386-unwind.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Unwinder test program. - Copyright 2003-2020 Free Software Foundation, Inc. + Copyright 2003-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/i386-unwind.exp gdb-10.2/gdb/testsuite/gdb.arch/i386-unwind.exp --- gdb-9.1/gdb/testsuite/gdb.arch/i386-unwind.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/i386-unwind.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2003-2020 Free Software Foundation, Inc. +# Copyright 2003-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/i386-word.exp gdb-10.2/gdb/testsuite/gdb.arch/i386-word.exp --- gdb-9.1/gdb/testsuite/gdb.arch/i386-word.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/i386-word.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -47,28 +47,28 @@ set word_regs(3) cx set word_regs(4) dx -gdb_test "break [gdb_get_line_number "first breakpoint here"]" \ - "Breakpoint .* at .*${srcfile}.*" \ - "set first breakpoint in main" +gdb_breakpoint [gdb_get_line_number "first breakpoint here"] gdb_continue_to_breakpoint "continue to first breakpoint in main" -for { set r 1 } { $r <= 4 } { incr r } { - gdb_test "print/x \$$word_regs($r)" \ - ".. = 0x[format %x $r]2[format %x $r]1" \ - "check contents of %$word_regs($r)" +with_test_prefix "at first bp" { + for { set r 1 } { $r <= 4 } { incr r } { + gdb_test "print/x \$$word_regs($r)" \ + ".. = 0x[format %x $r]2[format %x $r]1" \ + "check contents of %$word_regs($r)" + } + + for { set r 1 } { $r <= 4 } { incr r } { + gdb_test "set var \$$word_regs($r) = $r" "" "set %$word_regs($r)" + } } -for { set r 1 } { $r <= 4 } { incr r } { - gdb_test "set var \$$word_regs($r) = $r" "" "set %$word_regs($r)" -} - -gdb_test "break [gdb_get_line_number "second breakpoint here"]" \ - "Breakpoint .* at .*${srcfile}.*" \ - "set second breakpoint in main" +gdb_breakpoint [gdb_get_line_number "second breakpoint here"] gdb_continue_to_breakpoint "continue to second breakpoint in main" -for { set r 1 } { $r <= 4 } { incr r } { - gdb_test "print \$$word_regs($r)" \ - ".. = $r" \ - "check contents of %$word_regs($r)" +with_test_prefix "at second bp" { + for { set r 1 } { $r <= 4 } { incr r } { + gdb_test "print \$$word_regs($r)" \ + ".. = $r" \ + "check contents of %$word_regs($r)" + } } diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/ia64-breakpoint-shadow.exp gdb-10.2/gdb/testsuite/gdb.arch/ia64-breakpoint-shadow.exp --- gdb-9.1/gdb/testsuite/gdb.arch/ia64-breakpoint-shadow.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/ia64-breakpoint-shadow.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2009-2020 Free Software Foundation, Inc. +# Copyright 2009-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/ia64-breakpoint-shadow.S gdb-10.2/gdb/testsuite/gdb.arch/ia64-breakpoint-shadow.S --- gdb-9.1/gdb/testsuite/gdb.arch/ia64-breakpoint-shadow.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/ia64-breakpoint-shadow.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2009-2020 Free Software Foundation, Inc. +/* Copyright 2009-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/insn-reloc.c gdb-10.2/gdb/testsuite/gdb.arch/insn-reloc.c --- gdb-9.1/gdb/testsuite/gdb.arch/insn-reloc.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/insn-reloc.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/iwmmxt-regs.c gdb-10.2/gdb/testsuite/gdb.arch/iwmmxt-regs.c --- gdb-9.1/gdb/testsuite/gdb.arch/iwmmxt-regs.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/iwmmxt-regs.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Register test program. - Copyright 2007-2020 Free Software Foundation, Inc. + Copyright 2007-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/iwmmxt-regs.exp gdb-10.2/gdb/testsuite/gdb.arch/iwmmxt-regs.exp --- gdb-9.1/gdb/testsuite/gdb.arch/iwmmxt-regs.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/iwmmxt-regs.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2007-2020 Free Software Foundation, Inc. +# Copyright 2007-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/mips16-thunks.exp gdb-10.2/gdb/testsuite/gdb.arch/mips16-thunks.exp --- gdb-9.1/gdb/testsuite/gdb.arch/mips16-thunks.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/mips16-thunks.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/mips16-thunks-inmain.c gdb-10.2/gdb/testsuite/gdb.arch/mips16-thunks-inmain.c --- gdb-9.1/gdb/testsuite/gdb.arch/mips16-thunks-inmain.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/mips16-thunks-inmain.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/mips16-thunks-main.c gdb-10.2/gdb/testsuite/gdb.arch/mips16-thunks-main.c --- gdb-9.1/gdb/testsuite/gdb.arch/mips16-thunks-main.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/mips16-thunks-main.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/mips16-thunks-sin.c gdb-10.2/gdb/testsuite/gdb.arch/mips16-thunks-sin.c --- gdb-9.1/gdb/testsuite/gdb.arch/mips16-thunks-sin.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/mips16-thunks-sin.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/mips16-thunks-sinfrob16.c gdb-10.2/gdb/testsuite/gdb.arch/mips16-thunks-sinfrob16.c --- gdb-9.1/gdb/testsuite/gdb.arch/mips16-thunks-sinfrob16.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/mips16-thunks-sinfrob16.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/mips16-thunks-sinfrob.c gdb-10.2/gdb/testsuite/gdb.arch/mips16-thunks-sinfrob.c --- gdb-9.1/gdb/testsuite/gdb.arch/mips16-thunks-sinfrob.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/mips16-thunks-sinfrob.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/mips16-thunks-sinmain.c gdb-10.2/gdb/testsuite/gdb.arch/mips16-thunks-sinmain.c --- gdb-9.1/gdb/testsuite/gdb.arch/mips16-thunks-sinmain.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/mips16-thunks-sinmain.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/mips16-thunks-sinmips16.c gdb-10.2/gdb/testsuite/gdb.arch/mips16-thunks-sinmips16.c --- gdb-9.1/gdb/testsuite/gdb.arch/mips16-thunks-sinmips16.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/mips16-thunks-sinmips16.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/mips-disassembler-options.exp gdb-10.2/gdb/testsuite/gdb.arch/mips-disassembler-options.exp --- gdb-9.1/gdb/testsuite/gdb.arch/mips-disassembler-options.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/mips-disassembler-options.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2018-2020 Free Software Foundation, Inc. +# Copyright 2018-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/mips-disassembler-options.s gdb-10.2/gdb/testsuite/gdb.arch/mips-disassembler-options.s --- gdb-9.1/gdb/testsuite/gdb.arch/mips-disassembler-options.s 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/mips-disassembler-options.s 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This test is part of GDB, the GNU debugger. # -# Copyright 2018-2020 Free Software Foundation, Inc. +# Copyright 2018-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/mips-fcr.c gdb-10.2/gdb/testsuite/gdb.arch/mips-fcr.c --- gdb-9.1/gdb/testsuite/gdb.arch/mips-fcr.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/mips-fcr.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2016-2020 Free Software Foundation, Inc. + Copyright 2016-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/mips-fcr.exp gdb-10.2/gdb/testsuite/gdb.arch/mips-fcr.exp --- gdb-9.1/gdb/testsuite/gdb.arch/mips-fcr.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/mips-fcr.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2016-2020 Free Software Foundation, Inc. +# Copyright (C) 2016-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/mips-fpregset-core.c gdb-10.2/gdb/testsuite/gdb.arch/mips-fpregset-core.c --- gdb-9.1/gdb/testsuite/gdb.arch/mips-fpregset-core.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/mips-fpregset-core.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This test is part of GDB, the GNU debugger. - Copyright 2018-2020 Free Software Foundation, Inc. + Copyright 2018-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/mips-fpregset-core.exp gdb-10.2/gdb/testsuite/gdb.arch/mips-fpregset-core.exp --- gdb-9.1/gdb/testsuite/gdb.arch/mips-fpregset-core.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/mips-fpregset-core.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2018-2020 Free Software Foundation, Inc. +# Copyright 2018-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/mips-octeon-bbit.exp gdb-10.2/gdb/testsuite/gdb.arch/mips-octeon-bbit.exp --- gdb-9.1/gdb/testsuite/gdb.arch/mips-octeon-bbit.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/mips-octeon-bbit.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2012-2020 Free Software Foundation, Inc. +# Copyright (C) 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/pa-nullify.exp gdb-10.2/gdb/testsuite/gdb.arch/pa-nullify.exp --- gdb-9.1/gdb/testsuite/gdb.arch/pa-nullify.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/pa-nullify.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2004-2020 Free Software Foundation, Inc. +# Copyright 2004-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/powerpc-aix-prologue.c gdb-10.2/gdb/testsuite/gdb.arch/powerpc-aix-prologue.c --- gdb-9.1/gdb/testsuite/gdb.arch/powerpc-aix-prologue.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/powerpc-aix-prologue.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2004-2020 Free Software Foundation, Inc. + Copyright 2004-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/powerpc-aix-prologue.exp gdb-10.2/gdb/testsuite/gdb.arch/powerpc-aix-prologue.exp --- gdb-9.1/gdb/testsuite/gdb.arch/powerpc-aix-prologue.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/powerpc-aix-prologue.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2004-2020 Free Software Foundation, Inc. +# Copyright 2004-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/powerpc-altivec2.exp gdb-10.2/gdb/testsuite/gdb.arch/powerpc-altivec2.exp --- gdb-9.1/gdb/testsuite/gdb.arch/powerpc-altivec2.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/powerpc-altivec2.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/powerpc-altivec2.s gdb-10.2/gdb/testsuite/gdb.arch/powerpc-altivec2.s --- gdb-9.1/gdb/testsuite/gdb.arch/powerpc-altivec2.s 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/powerpc-altivec2.s 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/powerpc-altivec3.exp gdb-10.2/gdb/testsuite/gdb.arch/powerpc-altivec3.exp --- gdb-9.1/gdb/testsuite/gdb.arch/powerpc-altivec3.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/powerpc-altivec3.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/powerpc-altivec3.s gdb-10.2/gdb/testsuite/gdb.arch/powerpc-altivec3.s --- gdb-9.1/gdb/testsuite/gdb.arch/powerpc-altivec3.s 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/powerpc-altivec3.s 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/powerpc-altivec.exp gdb-10.2/gdb/testsuite/gdb.arch/powerpc-altivec.exp --- gdb-9.1/gdb/testsuite/gdb.arch/powerpc-altivec.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/powerpc-altivec.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/powerpc-altivec.s gdb-10.2/gdb/testsuite/gdb.arch/powerpc-altivec.s --- gdb-9.1/gdb/testsuite/gdb.arch/powerpc-altivec.s 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/powerpc-altivec.s 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/powerpc-d128-regs.c gdb-10.2/gdb/testsuite/gdb.arch/powerpc-d128-regs.c --- gdb-9.1/gdb/testsuite/gdb.arch/powerpc-d128-regs.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/powerpc-d128-regs.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This file is part of GDB, the GNU debugger. - Copyright 2008-2020 Free Software Foundation, Inc. + Copyright 2008-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/powerpc-d128-regs.exp gdb-10.2/gdb/testsuite/gdb.arch/powerpc-d128-regs.exp --- gdb-9.1/gdb/testsuite/gdb.arch/powerpc-d128-regs.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/powerpc-d128-regs.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/powerpc-disassembler-options.exp gdb-10.2/gdb/testsuite/gdb.arch/powerpc-disassembler-options.exp --- gdb-9.1/gdb/testsuite/gdb.arch/powerpc-disassembler-options.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/powerpc-disassembler-options.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -31,7 +31,7 @@ set arch2 "powerpc:common64" gdb_test "set architecture $arch1" \ - "The target architecture is assumed to be $arch1" \ + "The target architecture is set to \"$arch1\"" \ "set architecture $arch1" gdb_test_no_output "set disassembler-options" @@ -47,7 +47,7 @@ # Change architectures and verify the disassembler options have been preserved. gdb_test "set architecture $arch2" \ - "The target architecture is assumed to be $arch2" \ + "The target architecture is set to \"$arch2\"" \ "set architecture $arch2" gdb_test "show disassembler-options" \ diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/powerpc-fpscr-gcore.exp gdb-10.2/gdb/testsuite/gdb.arch/powerpc-fpscr-gcore.exp --- gdb-9.1/gdb/testsuite/gdb.arch/powerpc-fpscr-gcore.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/powerpc-fpscr-gcore.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2018-2020 Free Software Foundation, Inc. +# Copyright (C) 2018-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/powerpc-htm-regs.c gdb-10.2/gdb/testsuite/gdb.arch/powerpc-htm-regs.c --- gdb-9.1/gdb/testsuite/gdb.arch/powerpc-htm-regs.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/powerpc-htm-regs.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright (C) 2018-2020 Free Software Foundation, Inc. + Copyright (C) 2018-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/powerpc-htm-regs.exp gdb-10.2/gdb/testsuite/gdb.arch/powerpc-htm-regs.exp --- gdb-9.1/gdb/testsuite/gdb.arch/powerpc-htm-regs.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/powerpc-htm-regs.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2018-2020 Free Software Foundation, Inc. +# Copyright (C) 2018-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/powerpc-power7.exp gdb-10.2/gdb/testsuite/gdb.arch/powerpc-power7.exp --- gdb-9.1/gdb/testsuite/gdb.arch/powerpc-power7.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/powerpc-power7.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/powerpc-power7.s gdb-10.2/gdb/testsuite/gdb.arch/powerpc-power7.s --- gdb-9.1/gdb/testsuite/gdb.arch/powerpc-power7.s 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/powerpc-power7.s 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/powerpc-power8.exp gdb-10.2/gdb/testsuite/gdb.arch/powerpc-power8.exp --- gdb-9.1/gdb/testsuite/gdb.arch/powerpc-power8.exp 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/powerpc-power8.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -66,10 +66,10 @@ func_check "tabortdc. 20,r11,r10" func_check "tabortwci. 17,r10,-13" func_check "tabortdci. 29,r3,-5" -func_check "tbegin. " +func_check "tbegin." func_check "tcheck cr7" -func_check "tend. " -func_check "tend. " +func_check "tend." +func_check "tend." func_check "tendall." func_check "tendall." func_check "treclaim. r24" @@ -82,12 +82,12 @@ func_check "nop" func_check "ori r2,r2,0" func_check "rfebb 0" -func_check "rfebb " -func_check "rfebb " -func_check "bctar- 12,4*cr5+gt" -func_check "bctarl- 4,4*cr1+so" -func_check "bctar+ 12,4*cr3+lt" -func_check "bctarl+ 4,eq" +func_check "rfebb" +func_check "rfebb" +func_check "bgttar cr5" +func_check "bnstarl cr1" +func_check "blttar+ cr3" +func_check "bnetarl+" func_check "bctar 4,4*cr2+lt,1" func_check "bctarl 4,4*cr1+so,2" func_check "waitasec" diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/powerpc-power8.s gdb-10.2/gdb/testsuite/gdb.arch/powerpc-power8.s --- gdb-9.1/gdb/testsuite/gdb.arch/powerpc-power8.s 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/powerpc-power8.s 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -41,10 +41,10 @@ .long 0x4c000124 /* rfebb 0 */ .long 0x4c000924 /* rfebb */ .long 0x4c000924 /* rfebb */ - .long 0x4d950460 /* bctar- 12,4*cr5+gt */ - .long 0x4c870461 /* bctarl- 4,4*cr1+so */ - .long 0x4dac0460 /* bctar+ 12,4*cr3+lt */ - .long 0x4ca20461 /* bctarl+ 4,eq */ + .long 0x4d950460 /* bgttar cr5 */ + .long 0x4c870461 /* bnstarl cr1 */ + .long 0x4dec0460 /* blttar+ cr3 */ + .long 0x4ce20461 /* bnetarl+ */ .long 0x4c880c60 /* bctar 4,4*cr2+lt,1 */ .long 0x4c871461 /* bctarl 4,4*cr1+so,2 */ .long 0x7c00003c /* waitasec */ diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/powerpc-power9.exp gdb-10.2/gdb/testsuite/gdb.arch/powerpc-power9.exp --- gdb-9.1/gdb/testsuite/gdb.arch/powerpc-power9.exp 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/powerpc-power9.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -409,11 +409,9 @@ func_check "stwat r23,r13,28" func_check "urfid" func_check "rmieg r30" -func_check "ldmx r10,0,r15" -func_check "ldmx r10,r3,r15" func_check "stop" -func_check "wait " -func_check "wait " +func_check "wait" +func_check "wait" func_check "darn r3,0" func_check "darn r3,1" func_check "darn r3,2" diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/powerpc-power9.s gdb-10.2/gdb/testsuite/gdb.arch/powerpc-power9.s --- gdb-9.1/gdb/testsuite/gdb.arch/powerpc-power9.s 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/powerpc-power9.s 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -366,8 +366,6 @@ .long 0x7eede58c /* stwat r23,r13,28 */ .long 0x4c000264 /* urfid */ .long 0x7c00f6e4 /* rmieg r30 */ - .long 0x7d407a6a /* ldmx r10,0,r15 */ - .long 0x7d437a6a /* ldmx r10,r3,r15 */ .long 0x4c0002e4 /* stop */ .long 0x7c00003c /* wait */ .long 0x7c00003c /* wait */ diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/powerpc-ppr-dscr.c gdb-10.2/gdb/testsuite/gdb.arch/powerpc-ppr-dscr.c --- gdb-9.1/gdb/testsuite/gdb.arch/powerpc-ppr-dscr.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/powerpc-ppr-dscr.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright (C) 2018-2020 Free Software Foundation, Inc. + Copyright (C) 2018-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/powerpc-ppr-dscr.exp gdb-10.2/gdb/testsuite/gdb.arch/powerpc-ppr-dscr.exp --- gdb-9.1/gdb/testsuite/gdb.arch/powerpc-ppr-dscr.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/powerpc-ppr-dscr.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2018-2020 Free Software Foundation, Inc. +# Copyright (C) 2018-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/powerpc-prologue.c gdb-10.2/gdb/testsuite/gdb.arch/powerpc-prologue.c --- gdb-9.1/gdb/testsuite/gdb.arch/powerpc-prologue.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/powerpc-prologue.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Unwinder test program. - Copyright 2006-2020 Free Software Foundation, Inc. + Copyright 2006-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/powerpc-prologue.exp gdb-10.2/gdb/testsuite/gdb.arch/powerpc-prologue.exp --- gdb-9.1/gdb/testsuite/gdb.arch/powerpc-prologue.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/powerpc-prologue.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2006-2020 Free Software Foundation, Inc. +# Copyright 2006-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/powerpc-prologue-frame.c gdb-10.2/gdb/testsuite/gdb.arch/powerpc-prologue-frame.c --- gdb-9.1/gdb/testsuite/gdb.arch/powerpc-prologue-frame.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/powerpc-prologue-frame.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This test is part of GDB, the GNU debugger. - Copyright 2018-2020 Free Software Foundation, Inc. + Copyright 2018-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/powerpc-prologue-frame.exp gdb-10.2/gdb/testsuite/gdb.arch/powerpc-prologue-frame.exp --- gdb-9.1/gdb/testsuite/gdb.arch/powerpc-prologue-frame.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/powerpc-prologue-frame.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2018-2020 Free Software Foundation, Inc. +# Copyright 2018-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/powerpc-prologue-frame.S gdb-10.2/gdb/testsuite/gdb.arch/powerpc-prologue-frame.S --- gdb-9.1/gdb/testsuite/gdb.arch/powerpc-prologue-frame.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/powerpc-prologue-frame.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This test is part of GDB, the GNU debugger. - Copyright 2018-2020 Free Software Foundation, Inc. + Copyright 2018-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/powerpc-stackless.exp gdb-10.2/gdb/testsuite/gdb.arch/powerpc-stackless.exp --- gdb-9.1/gdb/testsuite/gdb.arch/powerpc-stackless.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/powerpc-stackless.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/powerpc-stackless.S gdb-10.2/gdb/testsuite/gdb.arch/powerpc-stackless.S --- gdb-9.1/gdb/testsuite/gdb.arch/powerpc-stackless.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/powerpc-stackless.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/powerpc-tar.c gdb-10.2/gdb/testsuite/gdb.arch/powerpc-tar.c --- gdb-9.1/gdb/testsuite/gdb.arch/powerpc-tar.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/powerpc-tar.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright (C) 2018-2020 Free Software Foundation, Inc. + Copyright (C) 2018-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/powerpc-tar.exp gdb-10.2/gdb/testsuite/gdb.arch/powerpc-tar.exp --- gdb-9.1/gdb/testsuite/gdb.arch/powerpc-tar.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/powerpc-tar.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2018-2020 Free Software Foundation, Inc. +# Copyright (C) 2018-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/powerpc-vector-regs.c gdb-10.2/gdb/testsuite/gdb.arch/powerpc-vector-regs.c --- gdb-9.1/gdb/testsuite/gdb.arch/powerpc-vector-regs.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/powerpc-vector-regs.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright (C) 2019-2020 Free Software Foundation, Inc. + Copyright (C) 2019-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/powerpc-vector-regs.exp gdb-10.2/gdb/testsuite/gdb.arch/powerpc-vector-regs.exp --- gdb-9.1/gdb/testsuite/gdb.arch/powerpc-vector-regs.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/powerpc-vector-regs.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2019-2020 Free Software Foundation, Inc. +# Copyright (C) 2019-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/powerpc-vsx2.exp gdb-10.2/gdb/testsuite/gdb.arch/powerpc-vsx2.exp --- gdb-9.1/gdb/testsuite/gdb.arch/powerpc-vsx2.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/powerpc-vsx2.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/powerpc-vsx2.s gdb-10.2/gdb/testsuite/gdb.arch/powerpc-vsx2.s --- gdb-9.1/gdb/testsuite/gdb.arch/powerpc-vsx2.s 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/powerpc-vsx2.s 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/powerpc-vsx3.exp gdb-10.2/gdb/testsuite/gdb.arch/powerpc-vsx3.exp --- gdb-9.1/gdb/testsuite/gdb.arch/powerpc-vsx3.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/powerpc-vsx3.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/powerpc-vsx3.s gdb-10.2/gdb/testsuite/gdb.arch/powerpc-vsx3.s --- gdb-9.1/gdb/testsuite/gdb.arch/powerpc-vsx3.s 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/powerpc-vsx3.s 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/powerpc-vsx.exp gdb-10.2/gdb/testsuite/gdb.arch/powerpc-vsx.exp --- gdb-9.1/gdb/testsuite/gdb.arch/powerpc-vsx.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/powerpc-vsx.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/powerpc-vsx-gcore.exp gdb-10.2/gdb/testsuite/gdb.arch/powerpc-vsx-gcore.exp --- gdb-9.1/gdb/testsuite/gdb.arch/powerpc-vsx-gcore.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/powerpc-vsx-gcore.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2018-2020 Free Software Foundation, Inc. +# Copyright (C) 2018-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/powerpc-vsx.s gdb-10.2/gdb/testsuite/gdb.arch/powerpc-vsx.s --- gdb-9.1/gdb/testsuite/gdb.arch/powerpc-vsx.s 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/powerpc-vsx.s 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/ppc64-atomic-inst.exp gdb-10.2/gdb/testsuite/gdb.arch/ppc64-atomic-inst.exp --- gdb-9.1/gdb/testsuite/gdb.arch/ppc64-atomic-inst.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/ppc64-atomic-inst.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/ppc64-atomic-inst.S gdb-10.2/gdb/testsuite/gdb.arch/ppc64-atomic-inst.S --- gdb-9.1/gdb/testsuite/gdb.arch/ppc64-atomic-inst.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/ppc64-atomic-inst.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This file is part of GDB, the GNU debugger. - Copyright 2008-2020 Free Software Foundation, Inc. + Copyright 2008-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/ppc64-isa207-atomic-inst.c gdb-10.2/gdb/testsuite/gdb.arch/ppc64-isa207-atomic-inst.c --- gdb-9.1/gdb/testsuite/gdb.arch/ppc64-isa207-atomic-inst.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/ppc64-isa207-atomic-inst.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2017-2020 Free Software Foundation, Inc. +/* Copyright 2017-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/ppc64-isa207-atomic-inst.exp gdb-10.2/gdb/testsuite/gdb.arch/ppc64-isa207-atomic-inst.exp --- gdb-9.1/gdb/testsuite/gdb.arch/ppc64-isa207-atomic-inst.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/ppc64-isa207-atomic-inst.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2017-2020 Free Software Foundation, Inc. +# Copyright 2017-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/ppc64-isa207-atomic-inst.S gdb-10.2/gdb/testsuite/gdb.arch/ppc64-isa207-atomic-inst.S --- gdb-9.1/gdb/testsuite/gdb.arch/ppc64-isa207-atomic-inst.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/ppc64-isa207-atomic-inst.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This file is part of GDB, the GNU debugger. - Copyright 2017-2020 Free Software Foundation, Inc. + Copyright 2017-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/ppc64-symtab-cordic.exp gdb-10.2/gdb/testsuite/gdb.arch/ppc64-symtab-cordic.exp --- gdb-9.1/gdb/testsuite/gdb.arch/ppc64-symtab-cordic.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/ppc64-symtab-cordic.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -47,10 +47,10 @@ set test "show architecture" gdb_test_multiple $test $test { - -re "\r\nThe target architecture is set automatically \\(currently powerpc:common64\\)\r\n$gdb_prompt $" { + -re "\r\nThe target architecture is set to \"auto\" \\(currently \"powerpc:common64\"\\)\r\n$gdb_prompt $" { pass $test } - -re "\r\nThe target architecture is set automatically \\(currently .*\\)\r\n$gdb_prompt $" { + -re "\r\nThe target architecture is set to \"auto\" \\(currently \".*\"\\)\r\n$gdb_prompt $" { untested "powerpc:common64 is not supported" } } diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/ppc-dfp.c gdb-10.2/gdb/testsuite/gdb.arch/ppc-dfp.c --- gdb-9.1/gdb/testsuite/gdb.arch/ppc-dfp.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/ppc-dfp.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2008-2020 Free Software Foundation, Inc. +/* Copyright 2008-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/ppc-dfp.exp gdb-10.2/gdb/testsuite/gdb.arch/ppc-dfp.exp --- gdb-9.1/gdb/testsuite/gdb.arch/ppc-dfp.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/ppc-dfp.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2008-2020 Free Software Foundation, Inc. +# Copyright (C) 2008-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/ppc-fp.c gdb-10.2/gdb/testsuite/gdb.arch/ppc-fp.c --- gdb-9.1/gdb/testsuite/gdb.arch/ppc-fp.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/ppc-fp.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2008-2020 Free Software Foundation, Inc. +/* Copyright 2008-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/ppc-fp.exp gdb-10.2/gdb/testsuite/gdb.arch/ppc-fp.exp --- gdb-9.1/gdb/testsuite/gdb.arch/ppc-fp.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/ppc-fp.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2008-2020 Free Software Foundation, Inc. +# Copyright (C) 2008-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/ppc-longdouble.c gdb-10.2/gdb/testsuite/gdb.arch/ppc-longdouble.c --- gdb-9.1/gdb/testsuite/gdb.arch/ppc-longdouble.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/ppc-longdouble.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2017-2020 Free Software Foundation, Inc. + Copyright 2017-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/ppc-longdouble.exp gdb-10.2/gdb/testsuite/gdb.arch/ppc-longdouble.exp --- gdb-9.1/gdb/testsuite/gdb.arch/ppc-longdouble.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/ppc-longdouble.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2016-2020 Free Software Foundation, Inc. +# Copyright 2016-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/pr25124.exp gdb-10.2/gdb/testsuite/gdb.arch/pr25124.exp --- gdb-9.1/gdb/testsuite/gdb.arch/pr25124.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/pr25124.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/pr25124.S gdb-10.2/gdb/testsuite/gdb.arch/pr25124.S --- gdb-9.1/gdb/testsuite/gdb.arch/pr25124.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/pr25124.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,7 +1,7 @@ /* Test proper disassembling of ARM thumb instructions when reloading a symbol file. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/riscv-bp-infcall.c gdb-10.2/gdb/testsuite/gdb.arch/riscv-bp-infcall.c --- gdb-9.1/gdb/testsuite/gdb.arch/riscv-bp-infcall.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/riscv-bp-infcall.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This file is part of GDB, the GNU debugger. - Copyright 2019-2020 Free Software Foundation, Inc. + Copyright 2019-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/riscv-bp-infcall.exp gdb-10.2/gdb/testsuite/gdb.arch/riscv-bp-infcall.exp --- gdb-9.1/gdb/testsuite/gdb.arch/riscv-bp-infcall.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/riscv-bp-infcall.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/riscv-reg-aliases.c gdb-10.2/gdb/testsuite/gdb.arch/riscv-reg-aliases.c --- gdb-9.1/gdb/testsuite/gdb.arch/riscv-reg-aliases.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/riscv-reg-aliases.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This file is part of GDB, the GNU debugger. - Copyright 2018-2020 Free Software Foundation, Inc. + Copyright 2018-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/riscv-reg-aliases.exp gdb-10.2/gdb/testsuite/gdb.arch/riscv-reg-aliases.exp --- gdb-9.1/gdb/testsuite/gdb.arch/riscv-reg-aliases.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/riscv-reg-aliases.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2018-2020 Free Software Foundation, Inc. +# Copyright 2018-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/riscv-tdesc-loading-01.xml gdb-10.2/gdb/testsuite/gdb.arch/riscv-tdesc-loading-01.xml --- gdb-9.1/gdb/testsuite/gdb.arch/riscv-tdesc-loading-01.xml 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/riscv-tdesc-loading-01.xml 2020-09-13 02:33:41.000000000 +0000 @@ -0,0 +1,83 @@ +<?xml version="1.0"?> +<!DOCTYPE target SYSTEM "gdb-target.dtd"> +<target> + <architecture>riscv</architecture> + <feature name="org.gnu.gdb.riscv.cpu"> + <reg name="zero" bitsize="64" type="int"/> + <reg name="ra" bitsize="64" type="code_ptr"/> + <reg name="sp" bitsize="64" type="data_ptr"/> + <reg name="gp" bitsize="64" type="data_ptr"/> + <reg name="tp" bitsize="64" type="data_ptr"/> + <reg name="t0" bitsize="64" type="int"/> + <reg name="t1" bitsize="64" type="int"/> + <reg name="t2" bitsize="64" type="int"/> + <reg name="fp" bitsize="64" type="data_ptr"/> + <reg name="s1" bitsize="64" type="int"/> + <reg name="a0" bitsize="64" type="int"/> + <reg name="a1" bitsize="64" type="int"/> + <reg name="a2" bitsize="64" type="int"/> + <reg name="a3" bitsize="64" type="int"/> + <reg name="a4" bitsize="64" type="int"/> + <reg name="a5" bitsize="64" type="int"/> + <reg name="a6" bitsize="64" type="int"/> + <reg name="a7" bitsize="64" type="int"/> + <reg name="s2" bitsize="64" type="int"/> + <reg name="s3" bitsize="64" type="int"/> + <reg name="s4" bitsize="64" type="int"/> + <reg name="s5" bitsize="64" type="int"/> + <reg name="s6" bitsize="64" type="int"/> + <reg name="s7" bitsize="64" type="int"/> + <reg name="s8" bitsize="64" type="int"/> + <reg name="s9" bitsize="64" type="int"/> + <reg name="s10" bitsize="64" type="int"/> + <reg name="s11" bitsize="64" type="int"/> + <reg name="t3" bitsize="64" type="int"/> + <reg name="t4" bitsize="64" type="int"/> + <reg name="t5" bitsize="64" type="int"/> + <reg name="t6" bitsize="64" type="int"/> + <reg name="pc" bitsize="64" type="code_ptr"/> + </feature> + <feature name="org.gnu.gdb.riscv.fpu"> + <union id="riscv_double"> + <field name="float" type="ieee_single"/> + <field name="double" type="ieee_double"/> + </union> + <reg name="ft0" bitsize="64" type="riscv_double"/> + <reg name="ft1" bitsize="64" type="riscv_double"/> + <reg name="ft2" bitsize="64" type="riscv_double"/> + <reg name="ft3" bitsize="64" type="riscv_double"/> + <reg name="ft4" bitsize="64" type="riscv_double"/> + <reg name="ft5" bitsize="64" type="riscv_double"/> + <reg name="ft6" bitsize="64" type="riscv_double"/> + <reg name="ft7" bitsize="64" type="riscv_double"/> + <reg name="fs0" bitsize="64" type="riscv_double"/> + <reg name="fs1" bitsize="64" type="riscv_double"/> + <reg name="fa0" bitsize="64" type="riscv_double"/> + <reg name="fa1" bitsize="64" type="riscv_double"/> + <reg name="fa2" bitsize="64" type="riscv_double"/> + <reg name="fa3" bitsize="64" type="riscv_double"/> + <reg name="fa4" bitsize="64" type="riscv_double"/> + <reg name="fa5" bitsize="64" type="riscv_double"/> + <reg name="fa6" bitsize="64" type="riscv_double"/> + <reg name="fa7" bitsize="64" type="riscv_double"/> + <reg name="fs2" bitsize="64" type="riscv_double"/> + <reg name="fs3" bitsize="64" type="riscv_double"/> + <reg name="fs4" bitsize="64" type="riscv_double"/> + <reg name="fs5" bitsize="64" type="riscv_double"/> + <reg name="fs6" bitsize="64" type="riscv_double"/> + <reg name="fs7" bitsize="64" type="riscv_double"/> + <reg name="fs8" bitsize="64" type="riscv_double"/> + <reg name="fs9" bitsize="64" type="riscv_double"/> + <reg name="fs10" bitsize="64" type="riscv_double"/> + <reg name="fs11" bitsize="64" type="riscv_double"/> + <reg name="ft8" bitsize="64" type="riscv_double"/> + <reg name="ft9" bitsize="64" type="riscv_double"/> + <reg name="ft10" bitsize="64" type="riscv_double"/> + <reg name="ft11" bitsize="64" type="riscv_double"/> + </feature> + <feature name="org.gnu.gdb.riscv.csr"> + <reg name="fflags" bitsize="32" type="int"/> + <reg name="frm" bitsize="32" type="int"/> + <reg name="fcsr" bitsize="32" type="int"/> + </feature> +</target> diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/riscv-tdesc-loading-02.xml gdb-10.2/gdb/testsuite/gdb.arch/riscv-tdesc-loading-02.xml --- gdb-9.1/gdb/testsuite/gdb.arch/riscv-tdesc-loading-02.xml 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/riscv-tdesc-loading-02.xml 2020-09-13 02:33:41.000000000 +0000 @@ -0,0 +1,81 @@ +<?xml version="1.0"?> +<!DOCTYPE target SYSTEM "gdb-target.dtd"> +<target> + <architecture>riscv</architecture> + <feature name="org.gnu.gdb.riscv.cpu"> + <reg name="zero" bitsize="64" type="int"/> + <reg name="ra" bitsize="64" type="code_ptr"/> + <reg name="sp" bitsize="64" type="data_ptr"/> + <reg name="gp" bitsize="64" type="data_ptr"/> + <reg name="tp" bitsize="64" type="data_ptr"/> + <reg name="t0" bitsize="64" type="int"/> + <reg name="t1" bitsize="64" type="int"/> + <reg name="t2" bitsize="64" type="int"/> + <reg name="fp" bitsize="64" type="data_ptr"/> + <reg name="s1" bitsize="64" type="int"/> + <reg name="a0" bitsize="64" type="int"/> + <reg name="a1" bitsize="64" type="int"/> + <reg name="a2" bitsize="64" type="int"/> + <reg name="a3" bitsize="64" type="int"/> + <reg name="a4" bitsize="64" type="int"/> + <reg name="a5" bitsize="64" type="int"/> + <reg name="a6" bitsize="64" type="int"/> + <reg name="a7" bitsize="64" type="int"/> + <reg name="s2" bitsize="64" type="int"/> + <reg name="s3" bitsize="64" type="int"/> + <reg name="s4" bitsize="64" type="int"/> + <reg name="s5" bitsize="64" type="int"/> + <reg name="s6" bitsize="64" type="int"/> + <reg name="s7" bitsize="64" type="int"/> + <reg name="s8" bitsize="64" type="int"/> + <reg name="s9" bitsize="64" type="int"/> + <reg name="s10" bitsize="64" type="int"/> + <reg name="s11" bitsize="64" type="int"/> + <reg name="t3" bitsize="64" type="int"/> + <reg name="t4" bitsize="64" type="int"/> + <reg name="t5" bitsize="64" type="int"/> + <reg name="t6" bitsize="64" type="int"/> + <reg name="pc" bitsize="64" type="code_ptr"/> + </feature> + <feature name="org.gnu.gdb.riscv.fpu"> + <union id="riscv_double"> + <field name="float" type="ieee_single"/> + <field name="double" type="ieee_double"/> + </union> + <reg name="ft0" bitsize="64" type="riscv_double"/> + <reg name="ft1" bitsize="64" type="riscv_double"/> + <reg name="ft2" bitsize="64" type="riscv_double"/> + <reg name="ft3" bitsize="64" type="riscv_double"/> + <reg name="ft4" bitsize="64" type="riscv_double"/> + <reg name="ft5" bitsize="64" type="riscv_double"/> + <reg name="ft6" bitsize="64" type="riscv_double"/> + <reg name="ft7" bitsize="64" type="riscv_double"/> + <reg name="fs0" bitsize="64" type="riscv_double"/> + <reg name="fs1" bitsize="64" type="riscv_double"/> + <reg name="fa0" bitsize="64" type="riscv_double"/> + <reg name="fa1" bitsize="64" type="riscv_double"/> + <reg name="fa2" bitsize="64" type="riscv_double"/> + <reg name="fa3" bitsize="64" type="riscv_double"/> + <reg name="fa4" bitsize="64" type="riscv_double"/> + <reg name="fa5" bitsize="64" type="riscv_double"/> + <reg name="fa6" bitsize="64" type="riscv_double"/> + <reg name="fa7" bitsize="64" type="riscv_double"/> + <reg name="fs2" bitsize="64" type="riscv_double"/> + <reg name="fs3" bitsize="64" type="riscv_double"/> + <reg name="fs4" bitsize="64" type="riscv_double"/> + <reg name="fs5" bitsize="64" type="riscv_double"/> + <reg name="fs6" bitsize="64" type="riscv_double"/> + <reg name="fs7" bitsize="64" type="riscv_double"/> + <reg name="fs8" bitsize="64" type="riscv_double"/> + <reg name="fs9" bitsize="64" type="riscv_double"/> + <reg name="fs10" bitsize="64" type="riscv_double"/> + <reg name="fs11" bitsize="64" type="riscv_double"/> + <reg name="ft8" bitsize="64" type="riscv_double"/> + <reg name="ft9" bitsize="64" type="riscv_double"/> + <reg name="ft10" bitsize="64" type="riscv_double"/> + <reg name="ft11" bitsize="64" type="riscv_double"/> + <reg name="fflags" bitsize="32" type="int"/> + <reg name="frm" bitsize="32" type="int"/> + <reg name="fcsr" bitsize="32" type="int"/> + </feature> +</target> diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/riscv-tdesc-loading-03.xml gdb-10.2/gdb/testsuite/gdb.arch/riscv-tdesc-loading-03.xml --- gdb-9.1/gdb/testsuite/gdb.arch/riscv-tdesc-loading-03.xml 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/riscv-tdesc-loading-03.xml 2020-09-13 02:33:41.000000000 +0000 @@ -0,0 +1,79 @@ +<?xml version="1.0"?> +<!DOCTYPE target SYSTEM "gdb-target.dtd"> +<target> + <architecture>riscv</architecture> + <feature name="org.gnu.gdb.riscv.cpu"> + <reg name="zero" bitsize="32" type="int"/> + <reg name="ra" bitsize="32" type="code_ptr"/> + <reg name="sp" bitsize="32" type="data_ptr"/> + <reg name="gp" bitsize="32" type="data_ptr"/> + <reg name="tp" bitsize="32" type="data_ptr"/> + <reg name="t0" bitsize="32" type="int"/> + <reg name="t1" bitsize="32" type="int"/> + <reg name="t2" bitsize="32" type="int"/> + <reg name="fp" bitsize="32" type="data_ptr"/> + <reg name="s1" bitsize="32" type="int"/> + <reg name="a0" bitsize="32" type="int"/> + <reg name="a1" bitsize="32" type="int"/> + <reg name="a2" bitsize="32" type="int"/> + <reg name="a3" bitsize="32" type="int"/> + <reg name="a4" bitsize="32" type="int"/> + <reg name="a5" bitsize="32" type="int"/> + <reg name="a6" bitsize="32" type="int"/> + <reg name="a7" bitsize="32" type="int"/> + <reg name="s2" bitsize="32" type="int"/> + <reg name="s3" bitsize="32" type="int"/> + <reg name="s4" bitsize="32" type="int"/> + <reg name="s5" bitsize="32" type="int"/> + <reg name="s6" bitsize="32" type="int"/> + <reg name="s7" bitsize="32" type="int"/> + <reg name="s8" bitsize="32" type="int"/> + <reg name="s9" bitsize="32" type="int"/> + <reg name="s10" bitsize="32" type="int"/> + <reg name="s11" bitsize="32" type="int"/> + <reg name="t3" bitsize="32" type="int"/> + <reg name="t4" bitsize="32" type="int"/> + <reg name="t5" bitsize="32" type="int"/> + <reg name="t6" bitsize="32" type="int"/> + <reg name="pc" bitsize="32" type="code_ptr"/> + </feature> + <feature name="org.gnu.gdb.riscv.fpu"> + <reg name="ft0" bitsize="32" type="float"/> + <reg name="ft1" bitsize="32" type="float"/> + <reg name="ft2" bitsize="32" type="float"/> + <reg name="ft3" bitsize="32" type="float"/> + <reg name="ft4" bitsize="32" type="float"/> + <reg name="ft5" bitsize="32" type="float"/> + <reg name="ft6" bitsize="32" type="float"/> + <reg name="ft7" bitsize="32" type="float"/> + <reg name="fs0" bitsize="32" type="float"/> + <reg name="fs1" bitsize="32" type="float"/> + <reg name="fa0" bitsize="32" type="float"/> + <reg name="fa1" bitsize="32" type="float"/> + <reg name="fa2" bitsize="32" type="float"/> + <reg name="fa3" bitsize="32" type="float"/> + <reg name="fa4" bitsize="32" type="float"/> + <reg name="fa5" bitsize="32" type="float"/> + <reg name="fa6" bitsize="32" type="float"/> + <reg name="fa7" bitsize="32" type="float"/> + <reg name="fs2" bitsize="32" type="float"/> + <reg name="fs3" bitsize="32" type="float"/> + <reg name="fs4" bitsize="32" type="float"/> + <reg name="fs5" bitsize="32" type="float"/> + <reg name="fs6" bitsize="32" type="float"/> + <reg name="fs7" bitsize="32" type="float"/> + <reg name="fs8" bitsize="32" type="float"/> + <reg name="fs9" bitsize="32" type="float"/> + <reg name="fs10" bitsize="32" type="float"/> + <reg name="fs11" bitsize="32" type="float"/> + <reg name="ft8" bitsize="32" type="float"/> + <reg name="ft9" bitsize="32" type="float"/> + <reg name="ft10" bitsize="32" type="float"/> + <reg name="ft11" bitsize="32" type="float"/> + </feature> + <feature name="org.gnu.gdb.riscv.csr"> + <reg name="fflags" bitsize="32" type="int"/> + <reg name="frm" bitsize="32" type="int"/> + <reg name="fcsr" bitsize="32" type="int"/> + </feature> +</target> diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/riscv-tdesc-loading-04.xml gdb-10.2/gdb/testsuite/gdb.arch/riscv-tdesc-loading-04.xml --- gdb-9.1/gdb/testsuite/gdb.arch/riscv-tdesc-loading-04.xml 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/riscv-tdesc-loading-04.xml 2020-09-13 02:33:41.000000000 +0000 @@ -0,0 +1,77 @@ +<?xml version="1.0"?> +<!DOCTYPE target SYSTEM "gdb-target.dtd"> +<target> + <architecture>riscv</architecture> + <feature name="org.gnu.gdb.riscv.cpu"> + <reg name="zero" bitsize="32" type="int"/> + <reg name="ra" bitsize="32" type="code_ptr"/> + <reg name="sp" bitsize="32" type="data_ptr"/> + <reg name="gp" bitsize="32" type="data_ptr"/> + <reg name="tp" bitsize="32" type="data_ptr"/> + <reg name="t0" bitsize="32" type="int"/> + <reg name="t1" bitsize="32" type="int"/> + <reg name="t2" bitsize="32" type="int"/> + <reg name="fp" bitsize="32" type="data_ptr"/> + <reg name="s1" bitsize="32" type="int"/> + <reg name="a0" bitsize="32" type="int"/> + <reg name="a1" bitsize="32" type="int"/> + <reg name="a2" bitsize="32" type="int"/> + <reg name="a3" bitsize="32" type="int"/> + <reg name="a4" bitsize="32" type="int"/> + <reg name="a5" bitsize="32" type="int"/> + <reg name="a6" bitsize="32" type="int"/> + <reg name="a7" bitsize="32" type="int"/> + <reg name="s2" bitsize="32" type="int"/> + <reg name="s3" bitsize="32" type="int"/> + <reg name="s4" bitsize="32" type="int"/> + <reg name="s5" bitsize="32" type="int"/> + <reg name="s6" bitsize="32" type="int"/> + <reg name="s7" bitsize="32" type="int"/> + <reg name="s8" bitsize="32" type="int"/> + <reg name="s9" bitsize="32" type="int"/> + <reg name="s10" bitsize="32" type="int"/> + <reg name="s11" bitsize="32" type="int"/> + <reg name="t3" bitsize="32" type="int"/> + <reg name="t4" bitsize="32" type="int"/> + <reg name="t5" bitsize="32" type="int"/> + <reg name="t6" bitsize="32" type="int"/> + <reg name="pc" bitsize="32" type="code_ptr"/> + </feature> + <feature name="org.gnu.gdb.riscv.fpu"> + <reg name="ft0" bitsize="32" type="float"/> + <reg name="ft1" bitsize="32" type="float"/> + <reg name="ft2" bitsize="32" type="float"/> + <reg name="ft3" bitsize="32" type="float"/> + <reg name="ft4" bitsize="32" type="float"/> + <reg name="ft5" bitsize="32" type="float"/> + <reg name="ft6" bitsize="32" type="float"/> + <reg name="ft7" bitsize="32" type="float"/> + <reg name="fs0" bitsize="32" type="float"/> + <reg name="fs1" bitsize="32" type="float"/> + <reg name="fa0" bitsize="32" type="float"/> + <reg name="fa1" bitsize="32" type="float"/> + <reg name="fa2" bitsize="32" type="float"/> + <reg name="fa3" bitsize="32" type="float"/> + <reg name="fa4" bitsize="32" type="float"/> + <reg name="fa5" bitsize="32" type="float"/> + <reg name="fa6" bitsize="32" type="float"/> + <reg name="fa7" bitsize="32" type="float"/> + <reg name="fs2" bitsize="32" type="float"/> + <reg name="fs3" bitsize="32" type="float"/> + <reg name="fs4" bitsize="32" type="float"/> + <reg name="fs5" bitsize="32" type="float"/> + <reg name="fs6" bitsize="32" type="float"/> + <reg name="fs7" bitsize="32" type="float"/> + <reg name="fs8" bitsize="32" type="float"/> + <reg name="fs9" bitsize="32" type="float"/> + <reg name="fs10" bitsize="32" type="float"/> + <reg name="fs11" bitsize="32" type="float"/> + <reg name="ft8" bitsize="32" type="float"/> + <reg name="ft9" bitsize="32" type="float"/> + <reg name="ft10" bitsize="32" type="float"/> + <reg name="ft11" bitsize="32" type="float"/> + <reg name="fflags" bitsize="32" type="int"/> + <reg name="frm" bitsize="32" type="int"/> + <reg name="fcsr" bitsize="32" type="int"/> + </feature> +</target> diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/riscv-tdesc-loading.exp gdb-10.2/gdb/testsuite/gdb.arch/riscv-tdesc-loading.exp --- gdb-9.1/gdb/testsuite/gdb.arch/riscv-tdesc-loading.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/riscv-tdesc-loading.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,39 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Check that we can load different RISC-V target descriptions. + +if {![istarget "riscv*-*-*"]} { + verbose "Skipping ${gdb_test_file_name}." + return +} + +clean_restart + +# Run over every test XML file and check the target description can be +# loaded. +foreach filename [lsort [glob $srcdir/$subdir/riscv-tdesc-loading-*.xml]] { + if {[is_remote host]} { + set test_path [remote_download host $filename] + } else { + set test_path $filename + } + + # Currently it is expected that all of the target descriptions in + # this test will load successfully, so we expect no additonal + # output from GDB. + gdb_test_no_output "set tdesc filename $test_path" \ + "check [file tail $filename]" +} diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/riscv-tdesc-regs-32.xml gdb-10.2/gdb/testsuite/gdb.arch/riscv-tdesc-regs-32.xml --- gdb-9.1/gdb/testsuite/gdb.arch/riscv-tdesc-regs-32.xml 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/riscv-tdesc-regs-32.xml 2020-09-13 02:33:41.000000000 +0000 @@ -0,0 +1,89 @@ +<?xml version="1.0"?> +<!DOCTYPE target SYSTEM "gdb-target.dtd"> +<target> + <architecture>riscv</architecture> + <feature name="org.gnu.gdb.riscv.cpu"> + <reg name="zero" bitsize="32" type="int"/> + <reg name="ra" bitsize="32" type="code_ptr"/> + <reg name="sp" bitsize="32" type="data_ptr"/> + <reg name="gp" bitsize="32" type="data_ptr"/> + <reg name="tp" bitsize="32" type="data_ptr"/> + <reg name="t0" bitsize="32" type="int"/> + <reg name="t1" bitsize="32" type="int"/> + <reg name="t2" bitsize="32" type="int"/> + <reg name="fp" bitsize="32" type="data_ptr"/> + <reg name="s1" bitsize="32" type="int"/> + <reg name="a0" bitsize="32" type="int"/> + <reg name="a1" bitsize="32" type="int"/> + <reg name="a2" bitsize="32" type="int"/> + <reg name="a3" bitsize="32" type="int"/> + <reg name="a4" bitsize="32" type="int"/> + <reg name="a5" bitsize="32" type="int"/> + <reg name="a6" bitsize="32" type="int"/> + <reg name="a7" bitsize="32" type="int"/> + <reg name="s2" bitsize="32" type="int"/> + <reg name="s3" bitsize="32" type="int"/> + <reg name="s4" bitsize="32" type="int"/> + <reg name="s5" bitsize="32" type="int"/> + <reg name="s6" bitsize="32" type="int"/> + <reg name="s7" bitsize="32" type="int"/> + <reg name="s8" bitsize="32" type="int"/> + <reg name="s9" bitsize="32" type="int"/> + <reg name="s10" bitsize="32" type="int"/> + <reg name="s11" bitsize="32" type="int"/> + <reg name="t3" bitsize="32" type="int"/> + <reg name="t4" bitsize="32" type="int"/> + <reg name="t5" bitsize="32" type="int"/> + <reg name="t6" bitsize="32" type="int"/> + <reg name="pc" bitsize="32" type="code_ptr"/> + </feature> + <feature name="org.gnu.gdb.riscv.fpu"> + <reg name="ft0" bitsize="32" type="float"/> + <reg name="ft1" bitsize="32" type="float"/> + <reg name="ft2" bitsize="32" type="float"/> + <reg name="ft3" bitsize="32" type="float"/> + <reg name="ft4" bitsize="32" type="float"/> + <reg name="ft5" bitsize="32" type="float"/> + <reg name="ft6" bitsize="32" type="float"/> + <reg name="ft7" bitsize="32" type="float"/> + <reg name="fs0" bitsize="32" type="float"/> + <reg name="fs1" bitsize="32" type="float"/> + <reg name="fa0" bitsize="32" type="float"/> + <reg name="fa1" bitsize="32" type="float"/> + <reg name="fa2" bitsize="32" type="float"/> + <reg name="fa3" bitsize="32" type="float"/> + <reg name="fa4" bitsize="32" type="float"/> + <reg name="fa5" bitsize="32" type="float"/> + <reg name="fa6" bitsize="32" type="float"/> + <reg name="fa7" bitsize="32" type="float"/> + <reg name="fs2" bitsize="32" type="float"/> + <reg name="fs3" bitsize="32" type="float"/> + <reg name="fs4" bitsize="32" type="float"/> + <reg name="fs5" bitsize="32" type="float"/> + <reg name="fs6" bitsize="32" type="float"/> + <reg name="fs7" bitsize="32" type="float"/> + <reg name="fs8" bitsize="32" type="float"/> + <reg name="fs9" bitsize="32" type="float"/> + <reg name="fs10" bitsize="32" type="float"/> + <reg name="fs11" bitsize="32" type="float"/> + <reg name="ft8" bitsize="32" type="float"/> + <reg name="ft9" bitsize="32" type="float"/> + <reg name="ft10" bitsize="32" type="float"/> + <reg name="ft11" bitsize="32" type="float"/> + <!-- The following 3 registers are duplicated. --> + <reg name="fflags" bitsize="32" type="int"/> + <reg name="frm" bitsize="32" type="int"/> + <reg name="fcsr" bitsize="32" type="int"/> + </feature> + <feature name="org.gnu.gdb.riscv.csr"> + <!-- The following 3 registers are duplicated. --> + <reg name="fflags" bitsize="32" type="int"/> + <reg name="frm" bitsize="32" type="int"/> + <reg name="fcsr" bitsize="32" type="int"/> + <!-- The following is a CSR unknown to GDB. --> + <reg name="unknown_csr" bitsize="32" type="int"/> + <!-- The following is now known as 'dscratch0' in the official + RISC-V spec, but GDB should NOT rename this register. --> + <reg name="dscratch" bitsize="32" type="int"/> + </feature> +</target> diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/riscv-tdesc-regs-64.xml gdb-10.2/gdb/testsuite/gdb.arch/riscv-tdesc-regs-64.xml --- gdb-9.1/gdb/testsuite/gdb.arch/riscv-tdesc-regs-64.xml 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/riscv-tdesc-regs-64.xml 2020-09-13 02:33:41.000000000 +0000 @@ -0,0 +1,93 @@ +<?xml version="1.0"?> +<!DOCTYPE target SYSTEM "gdb-target.dtd"> +<target> + <architecture>riscv</architecture> + <feature name="org.gnu.gdb.riscv.cpu"> + <reg name="zero" bitsize="64" type="int"/> + <reg name="ra" bitsize="64" type="code_ptr"/> + <reg name="sp" bitsize="64" type="data_ptr"/> + <reg name="gp" bitsize="64" type="data_ptr"/> + <reg name="tp" bitsize="64" type="data_ptr"/> + <reg name="t0" bitsize="64" type="int"/> + <reg name="t1" bitsize="64" type="int"/> + <reg name="t2" bitsize="64" type="int"/> + <reg name="fp" bitsize="64" type="data_ptr"/> + <reg name="s1" bitsize="64" type="int"/> + <reg name="a0" bitsize="64" type="int"/> + <reg name="a1" bitsize="64" type="int"/> + <reg name="a2" bitsize="64" type="int"/> + <reg name="a3" bitsize="64" type="int"/> + <reg name="a4" bitsize="64" type="int"/> + <reg name="a5" bitsize="64" type="int"/> + <reg name="a6" bitsize="64" type="int"/> + <reg name="a7" bitsize="64" type="int"/> + <reg name="s2" bitsize="64" type="int"/> + <reg name="s3" bitsize="64" type="int"/> + <reg name="s4" bitsize="64" type="int"/> + <reg name="s5" bitsize="64" type="int"/> + <reg name="s6" bitsize="64" type="int"/> + <reg name="s7" bitsize="64" type="int"/> + <reg name="s8" bitsize="64" type="int"/> + <reg name="s9" bitsize="64" type="int"/> + <reg name="s10" bitsize="64" type="int"/> + <reg name="s11" bitsize="64" type="int"/> + <reg name="t3" bitsize="64" type="int"/> + <reg name="t4" bitsize="64" type="int"/> + <reg name="t5" bitsize="64" type="int"/> + <reg name="t6" bitsize="64" type="int"/> + <reg name="pc" bitsize="64" type="code_ptr"/> + </feature> + <feature name="org.gnu.gdb.riscv.fpu"> + <union id="riscv_double"> + <field name="float" type="ieee_single"/> + <field name="double" type="ieee_double"/> + </union> + <reg name="ft0" bitsize="64" type="riscv_double"/> + <reg name="ft1" bitsize="64" type="riscv_double"/> + <reg name="ft2" bitsize="64" type="riscv_double"/> + <reg name="ft3" bitsize="64" type="riscv_double"/> + <reg name="ft4" bitsize="64" type="riscv_double"/> + <reg name="ft5" bitsize="64" type="riscv_double"/> + <reg name="ft6" bitsize="64" type="riscv_double"/> + <reg name="ft7" bitsize="64" type="riscv_double"/> + <reg name="fs0" bitsize="64" type="riscv_double"/> + <reg name="fs1" bitsize="64" type="riscv_double"/> + <reg name="fa0" bitsize="64" type="riscv_double"/> + <reg name="fa1" bitsize="64" type="riscv_double"/> + <reg name="fa2" bitsize="64" type="riscv_double"/> + <reg name="fa3" bitsize="64" type="riscv_double"/> + <reg name="fa4" bitsize="64" type="riscv_double"/> + <reg name="fa5" bitsize="64" type="riscv_double"/> + <reg name="fa6" bitsize="64" type="riscv_double"/> + <reg name="fa7" bitsize="64" type="riscv_double"/> + <reg name="fs2" bitsize="64" type="riscv_double"/> + <reg name="fs3" bitsize="64" type="riscv_double"/> + <reg name="fs4" bitsize="64" type="riscv_double"/> + <reg name="fs5" bitsize="64" type="riscv_double"/> + <reg name="fs6" bitsize="64" type="riscv_double"/> + <reg name="fs7" bitsize="64" type="riscv_double"/> + <reg name="fs8" bitsize="64" type="riscv_double"/> + <reg name="fs9" bitsize="64" type="riscv_double"/> + <reg name="fs10" bitsize="64" type="riscv_double"/> + <reg name="fs11" bitsize="64" type="riscv_double"/> + <reg name="ft8" bitsize="64" type="riscv_double"/> + <reg name="ft9" bitsize="64" type="riscv_double"/> + <reg name="ft10" bitsize="64" type="riscv_double"/> + <reg name="ft11" bitsize="64" type="riscv_double"/> + <!-- The following 3 registers are duplicated. --> + <reg name="fflags" bitsize="32" type="int"/> + <reg name="frm" bitsize="32" type="int"/> + <reg name="fcsr" bitsize="32" type="int"/> + </feature> + <feature name="org.gnu.gdb.riscv.csr"> + <!-- The following 3 registers are duplicated. --> + <reg name="fflags" bitsize="32" type="int"/> + <reg name="frm" bitsize="32" type="int"/> + <reg name="fcsr" bitsize="32" type="int"/> + <!-- The following is a CSR unknown to GDB. --> + <reg name="unknown_csr" bitsize="32" type="int"/> + <!-- The following is now known as 'dscratch0' in the official + RISC-V spec, but GDB should NOT rename this register. --> + <reg name="dscratch" bitsize="32" type="int"/> + </feature> +</target> diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/riscv-tdesc-regs.c gdb-10.2/gdb/testsuite/gdb.arch/riscv-tdesc-regs.c --- gdb-9.1/gdb/testsuite/gdb.arch/riscv-tdesc-regs.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/riscv-tdesc-regs.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,22 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +int +main () +{ + return 0; +} diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/riscv-tdesc-regs.exp gdb-10.2/gdb/testsuite/gdb.arch/riscv-tdesc-regs.exp --- gdb-9.1/gdb/testsuite/gdb.arch/riscv-tdesc-regs.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/riscv-tdesc-regs.exp 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,123 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Various tests to check which register names are available after +# loading a new target description file, and which registers show up +# in the output of the 'info registers' command. + +if {![istarget "riscv*-*-*"]} { + verbose "Skipping ${gdb_test_file_name}." + return +} + +standard_testfile + +if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile} \ + {debug quiet}] } { + unsupported "failed to compile" + return -1 +} + +if { ![runto_main] } { + untested "failed to runto main" + return -1 +} + +# First, figure out if we are 32-bit or 64-bit. +set xlen [get_valueof "/d" "sizeof (\$a0)" 0] +set flen [get_valueof "/d" "sizeof (\$fa0)" 0] + +gdb_assert { $xlen != 0 && $flen != 0 } "read xlen and flen" + +# We only handle 32-bit or 64-bit x-registers. +if { $xlen != 4 && $xlen != 8 } { + unsupported "unknown x-register size" + return -1 +} + +# If FLEN is 1 then the target doesn't have floating point support +# (the register $fa0 was not recognised). Otherwise, we can only +# proceed if FLEN equals XLEN, otherwise we'd need more test XML +# files. +if { $flen != 1 && $flen != $xlen } { + unsupport "unknown xlen/flen combination" + return -1 +} + +if { $xlen == 4 } { + set xml_tdesc "riscv-tdesc-regs-32.xml" +} else { + set xml_tdesc "riscv-tdesc-regs-64.xml" +} +set xml_tdesc "${srcdir}/${subdir}/${xml_tdesc}" + +# Maybe copy the target over if we're remote testing. +if {[is_remote host]} { + set remote_file [remote_download host $xml_tdesc] +} else { + set remote_file $xml_tdesc +} + +gdb_test_no_output "set tdesc filename $remote_file" \ + "load the new target description" + +# Check that an alias for an unknown CSR will give a suitable error. +gdb_test "info registers \$csr0" "Invalid register `csr0'" + +# Check we can access the dscratch register using either of its names. +gdb_test "info registers \$dscratch0" "dscratch0\[ \t\]+.*" +gdb_test "info registers \$dscratch" "dscratch\[ \t\]+.*" + +foreach rgroup {x_all all save restore} { + # Now use 'info registers all' to see how many times the floating + # point status registers show up in the output. + array set reg_counts {} + if {$rgroup == "x_all"} { + set test "info all-registers" + } else { + set test "info registers $rgroup" + } + gdb_test_multiple $test $test { + -re ".*info registers all\r\n" { + verbose -log "Skip to first register" + exp_continue + } + -re "^(\[^ \t\]+)\[ \t\]+\[^\r\n\]+\r\n" { + set reg $expect_out(1,string) + incr reg_counts($reg) + exp_continue + } + -re "^$gdb_prompt $" { + # Done. + } + } + + foreach reg {fflags frm fcsr unknown_csr dscratch} { + if { [info exists reg_counts($reg) ] } { + set count $reg_counts($reg) + } else { + set count 0 + } + if {($reg == "unknown_csr" || $reg == "dscratch") \ + && $rgroup != "all" && $rgroup != "x_all"} { + gdb_assert {$count == 0} \ + "register $reg not seen in reggroup $rgroup" + } else { + gdb_assert {$count == 1} \ + "register $reg seen once in reggroup $rgroup" + } + } + array unset reg_counts +} diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/riscv-unwind-long-insn-6.s gdb-10.2/gdb/testsuite/gdb.arch/riscv-unwind-long-insn-6.s --- gdb-9.1/gdb/testsuite/gdb.arch/riscv-unwind-long-insn-6.s 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/riscv-unwind-long-insn-6.s 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2019-2020 Free Software Foundation, Inc. +/* Copyright 2019-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/riscv-unwind-long-insn-8.s gdb-10.2/gdb/testsuite/gdb.arch/riscv-unwind-long-insn-8.s --- gdb-9.1/gdb/testsuite/gdb.arch/riscv-unwind-long-insn-8.s 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/riscv-unwind-long-insn-8.s 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2019-2020 Free Software Foundation, Inc. +/* Copyright 2019-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/riscv-unwind-long-insn.c gdb-10.2/gdb/testsuite/gdb.arch/riscv-unwind-long-insn.c --- gdb-9.1/gdb/testsuite/gdb.arch/riscv-unwind-long-insn.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/riscv-unwind-long-insn.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2019-2020 Free Software Foundation, Inc. +/* Copyright 2019-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/riscv-unwind-long-insn.exp gdb-10.2/gdb/testsuite/gdb.arch/riscv-unwind-long-insn.exp --- gdb-9.1/gdb/testsuite/gdb.arch/riscv-unwind-long-insn.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/riscv-unwind-long-insn.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/s390-disassembler-options.exp gdb-10.2/gdb/testsuite/gdb.arch/s390-disassembler-options.exp --- gdb-9.1/gdb/testsuite/gdb.arch/s390-disassembler-options.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/s390-disassembler-options.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -31,7 +31,7 @@ set arch2 "s390:31-bit" gdb_test "set architecture $arch1" \ - "The target architecture is assumed to be $arch1" \ + "The target architecture is set to \"$arch1\"" \ "set architecture $arch1" gdb_test_no_output "set disassembler-options" @@ -47,7 +47,7 @@ # Change architectures and verify the disassembler options have been preserved. gdb_test "set architecture $arch2" \ - "The target architecture is assumed to be $arch2" \ + "The target architecture is set to \"$arch2\"" \ "set architecture $arch2" gdb_test "show disassembler-options" \ diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/s390-multiarch.c gdb-10.2/gdb/testsuite/gdb.arch/s390-multiarch.c --- gdb-9.1/gdb/testsuite/gdb.arch/s390-multiarch.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/s390-multiarch.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2013-2020 Free Software Foundation, Inc. +/* Copyright 2013-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/s390-multiarch.exp gdb-10.2/gdb/testsuite/gdb.arch/s390-multiarch.exp --- gdb-9.1/gdb/testsuite/gdb.arch/s390-multiarch.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/s390-multiarch.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/s390-stackless.exp gdb-10.2/gdb/testsuite/gdb.arch/s390-stackless.exp --- gdb-9.1/gdb/testsuite/gdb.arch/s390-stackless.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/s390-stackless.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2016-2020 Free Software Foundation, Inc. +# Copyright 2016-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/s390-stackless.S gdb-10.2/gdb/testsuite/gdb.arch/s390-stackless.S --- gdb-9.1/gdb/testsuite/gdb.arch/s390-stackless.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/s390-stackless.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2015-2020 Free Software Foundation, Inc. +/* Copyright 2015-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/s390-tdbregs.c gdb-10.2/gdb/testsuite/gdb.arch/s390-tdbregs.c --- gdb-9.1/gdb/testsuite/gdb.arch/s390-tdbregs.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/s390-tdbregs.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2008-2020 Free Software Foundation, Inc. +/* Copyright 2008-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/s390-tdbregs.exp gdb-10.2/gdb/testsuite/gdb.arch/s390-tdbregs.exp --- gdb-9.1/gdb/testsuite/gdb.arch/s390-tdbregs.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/s390-tdbregs.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2004-2020 Free Software Foundation, Inc. +# Copyright 2004-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/s390-vregs.exp gdb-10.2/gdb/testsuite/gdb.arch/s390-vregs.exp --- gdb-9.1/gdb/testsuite/gdb.arch/s390-vregs.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/s390-vregs.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/s390-vregs.S gdb-10.2/gdb/testsuite/gdb.arch/s390-vregs.S --- gdb-9.1/gdb/testsuite/gdb.arch/s390-vregs.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/s390-vregs.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2015-2020 Free Software Foundation, Inc. +/* Copyright 2015-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/sparc64-adi.c gdb-10.2/gdb/testsuite/gdb.arch/sparc64-adi.c --- gdb-9.1/gdb/testsuite/gdb.arch/sparc64-adi.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/sparc64-adi.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Application Data Integrity (ADI) test in sparc64. - Copyright 2017-2020 Free Software Foundation, Inc. + Copyright 2017-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/sparc64-adi.exp gdb-10.2/gdb/testsuite/gdb.arch/sparc64-adi.exp --- gdb-9.1/gdb/testsuite/gdb.arch/sparc64-adi.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/sparc64-adi.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2017-2020 Free Software Foundation, Inc. +# Copyright 2017-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/sparc64-regs.exp gdb-10.2/gdb/testsuite/gdb.arch/sparc64-regs.exp --- gdb-9.1/gdb/testsuite/gdb.arch/sparc64-regs.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/sparc64-regs.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2017-2020 Free Software Foundation, Inc. +# Copyright 2017-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/sparc64-regs.S gdb-10.2/gdb/testsuite/gdb.arch/sparc64-regs.S --- gdb-9.1/gdb/testsuite/gdb.arch/sparc64-regs.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/sparc64-regs.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2017-2020 Free Software Foundation, Inc. +/* Copyright 2017-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/sparc-sysstep.c gdb-10.2/gdb/testsuite/gdb.arch/sparc-sysstep.c --- gdb-9.1/gdb/testsuite/gdb.arch/sparc-sysstep.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/sparc-sysstep.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Test single-stepping system call instructions in sparc. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/sparc-sysstep.exp gdb-10.2/gdb/testsuite/gdb.arch/sparc-sysstep.exp --- gdb-9.1/gdb/testsuite/gdb.arch/sparc-sysstep.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/sparc-sysstep.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/thumb2-it.exp gdb-10.2/gdb/testsuite/gdb.arch/thumb2-it.exp --- gdb-9.1/gdb/testsuite/gdb.arch/thumb2-it.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/thumb2-it.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/thumb2-it.S gdb-10.2/gdb/testsuite/gdb.arch/thumb2-it.S --- gdb-9.1/gdb/testsuite/gdb.arch/thumb2-it.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/thumb2-it.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Thumb-2 IT blocks test program. - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/thumb-bx-pc.exp gdb-10.2/gdb/testsuite/gdb.arch/thumb-bx-pc.exp --- gdb-9.1/gdb/testsuite/gdb.arch/thumb-bx-pc.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/thumb-bx-pc.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/thumb-bx-pc.S gdb-10.2/gdb/testsuite/gdb.arch/thumb-bx-pc.S --- gdb-9.1/gdb/testsuite/gdb.arch/thumb-bx-pc.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/thumb-bx-pc.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Test PC adjustment from Thumb-mode "bx pc" instruction. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/thumb-prologue.c gdb-10.2/gdb/testsuite/gdb.arch/thumb-prologue.c --- gdb-9.1/gdb/testsuite/gdb.arch/thumb-prologue.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/thumb-prologue.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Unwinder test program. - Copyright 2006-2020 Free Software Foundation, Inc. + Copyright 2006-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/thumb-prologue.exp gdb-10.2/gdb/testsuite/gdb.arch/thumb-prologue.exp --- gdb-9.1/gdb/testsuite/gdb.arch/thumb-prologue.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/thumb-prologue.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2006-2020 Free Software Foundation, Inc. +# Copyright 2006-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -83,4 +83,4 @@ gdb_test "backtrace 10" \ "#0\[ \t\]*$hex in write_sp .*\r\n#1\[ \t\]*$hex in switch_stack_to_other .*\r\n#2\[ \t\]*$hex in main.*" \ - "backtrace in write_sp" + "backtrace in write_sp, 2nd stop" diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/thumb-singlestep.exp gdb-10.2/gdb/testsuite/gdb.arch/thumb-singlestep.exp --- gdb-9.1/gdb/testsuite/gdb.arch/thumb-singlestep.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/thumb-singlestep.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/thumb-singlestep.S gdb-10.2/gdb/testsuite/gdb.arch/thumb-singlestep.S --- gdb-9.1/gdb/testsuite/gdb.arch/thumb-singlestep.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/thumb-singlestep.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Test program with deliberately incorrect execution mode transition - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/vsx-regs.exp gdb-10.2/gdb/testsuite/gdb.arch/vsx-regs.exp --- gdb-9.1/gdb/testsuite/gdb.arch/vsx-regs.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/vsx-regs.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2008-2020 Free Software Foundation, Inc. +# Copyright (C) 2008-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/x86-avx512bf16.c gdb-10.2/gdb/testsuite/gdb.arch/x86-avx512bf16.c --- gdb-9.1/gdb/testsuite/gdb.arch/x86-avx512bf16.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/x86-avx512bf16.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,164 @@ +/* Test program for bfloat16 of AVX 512 registers. + + Copyright 2020-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +typedef struct +{ + float f[4]; +} v4sd_t; + +typedef struct +{ + float f[8]; +} v8sd_t; + +typedef struct +{ + float f[16]; +} v16sd_t; + +v4sd_t xmm_data[] = +{ + { { 0.0, 0.125, 0.25, 0.375 } }, + { { 0.5, 0.625, 0.75, 0.875 } }, + { { 1.0, 1.125, 1.25, 1.375 } }, + { { 1.5, 1.625, 1.75, 1.875 } }, + { { 2.0, 2.125, 2.25, 2.375 } }, + { { 2.5, 2.625, 2.75, 2.875 } }, + { { 3.0, 3.125, 3.25, 3.375 } }, + { { 3.5, 3.625, 3.75, 3.875 } }, +}; + +v8sd_t ymm_data[] = +{ + { { 8.0, 8.25, 8.5, 8.75, 9.0, 9.25, 9.5, 9.75 } }, + { { 10.0, 10.25, 10.5, 10.75, 11.0, 11.25, 11.5, 11.75 } }, + { { 12.0, 12.25, 12.5, 12.75, 13.0, 13.25, 13.5, 13.75 } }, + { { 14.0, 14.25, 14.5, 14.75, 15.0, 15.25, 15.5, 15.75 } }, + { { 16.0, 16.25, 16.5, 16.75, 17.0, 17.25, 17.5, 17.75 } }, + { { 18.0, 18.25, 18.5, 18.75, 19.0, 19.25, 19.5, 19.75 } }, + { { 20.0, 20.25, 20.5, 20.75, 21.0, 21.25, 21.5, 21.75 } }, + { { 22.0, 22.25, 22.5, 22.75, 23.0, 23.25, 23.5, 23.75 } }, +}; + +v16sd_t zmm_data[] = +{ + { { 20.0, 20.5, 21.0, 21.5, 22.0, 22.5, 23.0, 23.5, 24.0, 24.5, + 25.0, 25.5, 26.0, 26.5, 27.0, 27.5 } }, + { { 28.0, 28.5, 29.0, 29.5, 30.0, 30.5, 31.0, 31.5, 32.0, 32.5, + 33.0, 33.5, 34.0, 34.5, 35.0, 35.5 } }, + { { 36.0, 36.5, 37.0, 37.5, 38.0, 38.5, 39.0, 39.5, 40.0, 40.5, + 41.0, 41.5, 42.0, 42.5, 43.0, 43.5 } }, + { { 44.0, 44.5, 45.0, 45.5, 46.0, 46.5, 47.0, 47.5, 48.0, 48.5, + 49.0, 49.5, 50.0, 50.5, 51.0, 51.5 } }, + { { 52.0, 52.5, 53.0, 53.5, 54.0, 54.5, 55.0, 55.5, 56.0, 56.5, + 57.0, 57.5, 58.0, 58.5, 59.0, 59.5 } }, + { { 60.0, 60.5, 61.0, 61.5, 62.0, 62.5, 63.0, 63.5, 64.0, 64.5, + 65.0, 65.5, 66.0, 66.5, 67.0, 67.5 } }, + { { 68.0, 68.5, 69.0, 69.5, 70.0, 70.5, 71.0, 71.5, 72.0, 72.5, + 73.0, 73.5, 74.0, 74.5, 75.0, 75.5 } }, + { { 76.0, 76.5, 77.0, 77.5, 78.0, 78.5, 79.0, 79.5, 80.0, 80.5, + 81.0, 81.5, 82.0, 82.5, 83.0, 83.5 } }, +}; + +void +move_data_to_xmm_reg (void) +{ + asm ("vmovups 0(%0), %%xmm0 \n\t" + "vmovups 16(%0), %%xmm1 \n\t" + "vmovups 32(%0), %%xmm2 \n\t" + "vmovups 48(%0), %%xmm3 \n\t" + "vmovups 64(%0), %%xmm4 \n\t" + "vmovups 80(%0), %%xmm5 \n\t" + "vmovups 96(%0), %%xmm6 \n\t" + "vmovups 112(%0), %%xmm7 \n\t" + : /* no output operands */ + : "r" (xmm_data)); +} + +void +move_data_to_ymm_reg (void) +{ + asm ("vmovups 0(%0), %%ymm0 \n\t" + "vmovups 32(%0), %%ymm1 \n\t" + "vmovups 64(%0), %%ymm2 \n\t" + "vmovups 96(%0), %%ymm3 \n\t" + "vmovups 128(%0), %%ymm4 \n\t" + "vmovups 160(%0), %%ymm5 \n\t" + "vmovups 192(%0), %%ymm6 \n\t" + "vmovups 224(%0), %%ymm7 \n\t" + : /* no output operands */ + : "r" (ymm_data)); +} + +void +move_data_to_zmm_reg (void) +{ + asm ("vmovups 0(%0), %%zmm0 \n\t" + "vmovups 64(%0), %%zmm1 \n\t" + "vmovups 128(%0), %%zmm2 \n\t" + "vmovups 192(%0), %%zmm3 \n\t" + "vmovups 256(%0), %%zmm4 \n\t" + "vmovups 320(%0), %%zmm5 \n\t" + "vmovups 384(%0), %%zmm6 \n\t" + "vmovups 448(%0), %%zmm7 \n\t" + : /* no output operands */ + : "r" (zmm_data)); +} + +void +convert_xmm_from_float_to_bfloat16 (void) +{ + asm("vcvtne2ps2bf16 %xmm0, %xmm1, %xmm0"); + asm("vcvtne2ps2bf16 %xmm6, %xmm7, %xmm6"); +} + +void +convert_ymm_from_float_to_bfloat16 (void) +{ + asm("vcvtne2ps2bf16 %ymm0, %ymm1, %ymm0"); + asm("vcvtne2ps2bf16 %ymm6, %ymm7, %ymm6"); +} + +void +convert_zmm_from_float_to_bfloat16 (void) +{ + asm("vcvtne2ps2bf16 %zmm0, %zmm1, %zmm0"); + asm("vcvtne2ps2bf16 %zmm6, %zmm7, %zmm6"); +} + +int +main (int argc, char **argv) +{ + /* Move initial values from array to registers and read from XMM regs. */ + move_data_to_xmm_reg (); + convert_xmm_from_float_to_bfloat16 (); + asm ("nop"); /* first breakpoint here */ + + /* Move initial values from array to registers and read from YMM regs. */ + move_data_to_ymm_reg (); + convert_ymm_from_float_to_bfloat16 (); + asm ("nop"); /* second breakpoint here */ + + /* Move initial values from array to registers and read from ZMM regs. */ + move_data_to_zmm_reg (); + convert_zmm_from_float_to_bfloat16 (); + asm ("nop"); /* third breakpoint here */ + + return 0; +} diff -Nru gdb-9.1/gdb/testsuite/gdb.arch/x86-avx512bf16.exp gdb-10.2/gdb/testsuite/gdb.arch/x86-avx512bf16.exp --- gdb-9.1/gdb/testsuite/gdb.arch/x86-avx512bf16.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.arch/x86-avx512bf16.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,74 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Please email any bugs, comments, and/or additions to this file to: +# bug-gdb@gnu.org + +# Test bfloat16 support in AVX512 registers + +if { [skip_avx512bf16_tests] } { + unsupported "target does not support AVX512BF16" + return -1 +} + +standard_testfile + +if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile}] } { + return -1 +} + +if { ![runto_main] } { + unsupported "could not run to main" + return -1 +} + +# Test xmm +set line1 [gdb_get_line_number "first breakpoint here"] +gdb_breakpoint $line1 +gdb_continue_to_breakpoint "line1" ".*$srcfile:$line1.*" + +gdb_test "print \$xmm0.v8_bfloat16" \ + "= \\{0, 0.125, 0.25, 0.375, 0.5, 0.625, 0.75, 0.875\\}" + +gdb_test "print \$xmm6.v8_bfloat16" \ + "= \\{3, 3.125, 3.25, 3.375, 3.5, 3.625, 3.75, 3.875\\}" + +# Test ymm +set line2 [gdb_get_line_number "second breakpoint here"] +gdb_breakpoint $line2 +gdb_continue_to_breakpoint "line2" ".*$srcfile:$line2.*" + +gdb_test "print \$ymm0.v16_bfloat16\[1\]" "= 8.25" +gdb_test "print \$ymm6.v16_bfloat16\[1\]" "= 20.25" + +# Test zmm +set line3 [gdb_get_line_number "third breakpoint here"] +gdb_breakpoint $line3 +gdb_continue_to_breakpoint "line3" ".*$srcfile:$line3.*" + +gdb_test "print \$zmm0.v32_bfloat16\[1\]" "= 20.5" +gdb_test "print \$zmm6.v32_bfloat16\[1\]" "= 68.5" + +# Test setting of bfloat values +gdb_test_no_output "set var \$xmm0.v8_bfloat16\[0\] = 32.25" \ + "set %xmm0.v8_bfloat16\[0\]" +gdb_test_no_output "set var \$ymm8.v16_bfloat16\[1\] = 33.5" \ + "set %ymm8.v16_bfloat16\[1\]" +gdb_test_no_output "set var \$zmm16.v32_bfloat16\[2\] = 22.75" \ + "set %zmm16.v32_bfloat16\[2\]" + +gdb_test "p \$xmm0.v8_bfloat16\[0\]" "= 32.25" +gdb_test "p \$ymm8.v16_bfloat16\[1\]" "= 33.5" +gdb_test "p \$zmm16.v32_bfloat16\[2\]" "= 22.75" diff -Nru gdb-9.1/gdb/testsuite/gdb.asm/asm-source.exp gdb-10.2/gdb/testsuite/gdb.asm/asm-source.exp --- gdb-9.1/gdb/testsuite/gdb.asm/asm-source.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.asm/asm-source.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1998-2020 Free Software Foundation, Inc. +# Copyright 1998-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/a2-run.exp gdb-10.2/gdb/testsuite/gdb.base/a2-run.exp --- gdb-9.1/gdb/testsuite/gdb.base/a2-run.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/a2-run.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1988-2020 Free Software Foundation, Inc. +# Copyright 1988-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -135,7 +135,7 @@ gdb_test_stdio "" "120" "" "run \"$testfile\" with arg" # Run again with same arguments. -gdb_run_cmd +gdb_run_cmd 5 setup_xfail "arm-*-coff" gdb_test_stdio "" "120" "" "run \"$testfile\" again with same args" @@ -147,6 +147,15 @@ gdb_test_stdio "" "usage: factorial <number>" "" "run after setting args to nil" +# The remaining tests pass inferior arguments through GDB, so doesn't +# work with stub targets, where GDB connects to debug an already started +# process. + +if [use_gdb_stub] { + verbose "Skipping rest of a2-run.exp because target is a stub." + return +} + # Use "set args" command to specify an argument and run again. gdb_test_no_output "set args 6" diff -Nru gdb-9.1/gdb/testsuite/gdb.base/advance.c gdb-10.2/gdb/testsuite/gdb.base/advance.c --- gdb-9.1/gdb/testsuite/gdb.base/advance.c 2019-02-23 12:20:11.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/advance.c 2020-09-13 02:33:41.000000000 +0000 @@ -16,9 +16,10 @@ int func2 () { x = 6; + return x; } -void func() +void func(int c) { x = x + 5; func2 (); @@ -27,6 +28,7 @@ int func3 () { x = 4; + return x; } void marker1 () diff -Nru gdb-9.1/gdb/testsuite/gdb.base/advance.exp gdb-10.2/gdb/testsuite/gdb.base/advance.exp --- gdb-9.1/gdb/testsuite/gdb.base/advance.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/advance.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2003-2020 Free Software Foundation, Inc. +# Copyright 2003-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/advance-until-multiple-locations.cc gdb-10.2/gdb/testsuite/gdb.base/advance-until-multiple-locations.cc --- gdb-9.1/gdb/testsuite/gdb.base/advance-until-multiple-locations.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/advance-until-multiple-locations.cc 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,61 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +static inline int __attribute__ ((always_inline)) +inline_func (int i) +{ + i++; /* multiple locations here */ + return i; +} + +int global = 0; + +void +ovld_func () +{ + global = 1; +} + +void +ovld_func (int) +{ + global = 2; +} + +/* This is a separate function so that we can test that "until" stops + at the caller. */ + +int +test () +{ + int i = 0; + + i = inline_func (i); + i = inline_func (i); + i = inline_func (i); + + ovld_func (); + ovld_func (0); + + return 0; +} + +int +main () +{ + return test (); +} diff -Nru gdb-9.1/gdb/testsuite/gdb.base/advance-until-multiple-locations.exp gdb-10.2/gdb/testsuite/gdb.base/advance-until-multiple-locations.exp --- gdb-9.1/gdb/testsuite/gdb.base/advance-until-multiple-locations.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/advance-until-multiple-locations.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,142 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +# Test 'advance/until LINESPEC' where LINESPEC expands to multiple +# locations. + +standard_testfile .cc + +if { [skip_cplus_tests] } { continue } + +if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile} \ + {debug c++}] } { + return -1 +} + +set lineno [gdb_get_line_number "multiple locations here"] + +# advance/until to an inlined line number, which has been inlined +# multiple times, when the program is stopped at the same inlined +# function. +proc_with_prefix until_advance_lineno_from_inlined {cmd} { + global lineno + + if ![runto test] { + fail "can't run to test" + return + } + + gdb_breakpoint $lineno + gdb_continue_to_breakpoint "break here" + + set lineno2 [expr $lineno + 1] + + gdb_test "$cmd $lineno2" \ + "inline_func .* at .*:$lineno2.*return i.*" \ + "$cmd line number" +} + +# advance/until to a line number, which has been inlined multiple +# times, when the program is stopped at a non-inlined function. + +proc_with_prefix until_advance_lineno_from_non_inlined {cmd} { + global lineno + + if ![runto test] { + fail "can't run to test" + return + } + + gdb_test "$cmd $lineno" \ + "inline_func .* at .*:$lineno.*multiple locations here.*" \ + "$cmd line number" +} + +# Test advancing to an inlined function, which has been inlined +# multiple times. + +proc_with_prefix until_advance_inline_func {cmd} { + global lineno + + if ![runto test] { + fail "can't run to test" + return + } + + gdb_test "$cmd inline_func" \ + "inline_func .* at .*:$lineno.*multiple locations here.*" +} + +# Test advancing to an overloaded function, which is another form of a +# linespec expanding to multiple locations. GDB will stop at the +# first overload called. + +proc_with_prefix advance_overload {} { + global lineno + + if ![runto test] { + fail "can't run to test" + return + } + + # Test that advance stops at the first overload called by the + # program. + + gdb_test "advance ovld_func" \ + "ovld_func .* at .*global = 1.*" \ + "first advance stops at ovld_func()" + + # Now test that advance also stops at the other overload called by + # the program. + + # Need to issue the advance twice, because advance also stops upon + # exit from the current stack frame. + gdb_test "advance ovld_func" \ + "test \\(\\) at .*" \ + "second advance stops at caller" + + gdb_test "advance ovld_func" \ + "ovld_func .* at .*global = 2.*" \ + "third advance stops at ovld_func(int)" +} + +# Test "until" to an overloaded function, which is another form of a +# linespec expanding to multiple locations. Unlike "advance", "until" +# only stops if still in the same frame. Since the overloaded +# function is a different frame, the program should stop at the caller +# frame instead. + +proc_with_prefix until_overload {} { + global lineno + + if ![runto test] { + fail "can't run to test" + return + } + + # ovld_func is a different frame, so it shouldn't cause a stop. + # Instead, the program should stop at the caller frame. + gdb_test "until ovld_func" \ + "main \\(\\) at .*" +} + +foreach_with_prefix cmd {"until" "advance"} { + until_advance_lineno_from_inlined $cmd + until_advance_lineno_from_non_inlined $cmd + until_advance_inline_func $cmd +} + +advance_overload +until_overload diff -Nru gdb-9.1/gdb/testsuite/gdb.base/alias.exp gdb-10.2/gdb/testsuite/gdb.base/alias.exp --- gdb-9.1/gdb/testsuite/gdb.base/alias.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/alias.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ # Test the alias command. -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -56,7 +56,7 @@ test_abbrev_alias -a "alias -a -- -a = set" 47 gdb_test "alias set2=set" "already exists: set2" -gdb_test "alias foo=bar" "Invalid command to alias to: bar" +gdb_test "alias foo=bar" "Undefined command: \"bar\". Try \"help\"." gdb_test_no_output "alias spe = set p elem" gdb_test_no_output "spe 50" @@ -65,7 +65,7 @@ gdb_test_no_output "alias set pr elms = set p elem" gdb_test_no_output "set pr elms 51" gdb_test "show print elements" "Limit .* is 51\[.\]" "verify set pr elms" -gdb_test "help set print" "set print elms .*" +gdb_test "help set print" "set print elements, set print elms, spe .*" # Verify alias command detects a non existing prefix. gdb_test "alias assigne imprime limite-elements = set print elements" \ @@ -116,3 +116,12 @@ gdb_test_no_output "set print max-elements 57" gdb_test "show print elements" "Limit .* is 57\[.\]" "verify 57" + +# Test aliases having a common prefix. +gdb_test_no_output "alias abcd = backtrace" +gdb_test_no_output "alias abcde = backtrace" +gdb_test_no_output "alias fghij = backtrace" +gdb_test_no_output "alias fghi = backtrace" + +# Verify help aliases shows the user defined aliases +gdb_test "help aliases" ".*abcd --.*.*abcde --.*" diff -Nru gdb-9.1/gdb/testsuite/gdb.base/align-c.exp gdb-10.2/gdb/testsuite/gdb.base/align-c.exp --- gdb-9.1/gdb/testsuite/gdb.base/align-c.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/align-c.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,23 @@ +# Copyright 2018-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# This file is part of the gdb testsuite + +# This tests that C11 _Alignof works in gdb, and that it agrees with the +# compiler. + +set lang c + +source $srcdir/$subdir/align.exp.tcl diff -Nru gdb-9.1/gdb/testsuite/gdb.base/align-c++.exp gdb-10.2/gdb/testsuite/gdb.base/align-c++.exp --- gdb-9.1/gdb/testsuite/gdb.base/align-c++.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/align-c++.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,27 @@ +# Copyright 2018-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# This file is part of the gdb testsuite + +# This tests that C++11 alignof works in gdb, and that it agrees with the +# compiler. + +# Only test C++ if we are able. +if { [skip_cplus_tests] || [get_compiler_info "c++"] } { + return -1 +} +set lang c++ + +source $srcdir/$subdir/align.exp.tcl diff -Nru gdb-9.1/gdb/testsuite/gdb.base/align.exp gdb-10.2/gdb/testsuite/gdb.base/align.exp --- gdb-9.1/gdb/testsuite/gdb.base/align.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/align.exp 1970-01-01 00:00:00.000000000 +0000 @@ -1,199 +0,0 @@ -# Copyright 2018-2020 Free Software Foundation, Inc. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. - -# This file is part of the gdb testsuite - -# This tests that C11 _Alignof and C++11 alignof works in gdb, and -# that it agrees with the compiler. - -# Only test C++ if we are able. Always use C. -if { [skip_cplus_tests] || [get_compiler_info "c++"] } { - set lang {c} -} else { - set lang {c c++} -} - -# The types we're going to test. - -set typelist { - char {unsigned char} - short {unsigned short} - int {unsigned int} - long {unsigned long} - {long long} {unsigned long long} - float - double {long double} -} - -if {[has_int128_c]} { - # Note we don't check "unsigned __int128" yet because at least gcc - # canonicalizes the name to "__int128 unsigned", and there isn't a - # c-exp.y production for this. - # https://sourceware.org/bugzilla/show_bug.cgi?id=20991 - lappend typelist __int128 -} - -# Build source file for testing alignment handling of language LANG. -# Returns the name of the newly created source file. -proc prepare_test_source_file { lang } { - global typelist - - # Create the test file. - - if { $lang == "c++" } { - set suffix "cpp" - set align_func "alignof" - } else { - set suffix "c" - set align_func "_Alignof" - } - - set filename [standard_output_file "$lang/align.$suffix"] - set outfile [open $filename w] - - # Prologue. - puts -nonewline $outfile "#define DEF(T,U) struct align_pair_ ## T ## _x_ ## U " - puts $outfile "{ T one; U two; }" - if { $lang == "c++" } { - puts -nonewline $outfile "#define DEF_WITH_1_STATIC(T,U) struct align_pair_static_ ## T ## _x_ ## U " - puts $outfile "{ static T one; U two; }" - puts -nonewline $outfile "#define DEF_WITH_2_STATIC(T,U) struct align_pair_static_ ## T ## _x_static_ ## U " - puts $outfile "{ static T one; static U two; }" - } - if { $lang == "c" } { - puts $outfile "unsigned a_void = ${align_func} (void);" - } - - # First emit single items. - foreach type $typelist { - set utype [join [split $type] _] - if {$type != $utype} { - puts $outfile "typedef $type $utype;" - } - puts $outfile "$type item_$utype;" - if { $lang == "c" } { - puts $outfile "unsigned a_$utype\n = ${align_func} ($type);" - } - set utype [join [split $type] _] - } - - # Now emit all pairs. - foreach type $typelist { - set utype [join [split $type] _] - foreach inner $typelist { - set uinner [join [split $inner] _] - puts $outfile "DEF ($utype, $uinner);" - set joined "${utype}_x_${uinner}" - puts $outfile "struct align_pair_$joined item_${joined};" - puts $outfile "unsigned a_${joined}" - puts $outfile " = ${align_func} (struct align_pair_${joined});" - - if { $lang == "c++" } { - puts $outfile "DEF_WITH_1_STATIC ($utype, $uinner);" - set joined "static_${utype}_x_${uinner}" - puts $outfile "struct align_pair_$joined item_${joined};" - puts $outfile "unsigned a_${joined}" - puts $outfile " = ${align_func} (struct align_pair_${joined});" - - puts $outfile "DEF_WITH_2_STATIC ($utype, $uinner);" - set joined "static_${utype}_x_static_${uinner}" - puts $outfile "struct align_pair_$joined item_${joined};" - puts $outfile "unsigned a_${joined}" - puts $outfile " = ${align_func} (struct align_pair_${joined});" - } - } - } - - # Epilogue. - puts $outfile { - int main() { - return 0; - } - } - - close $outfile - - return $filename -} - -# Run the alignment test for the language LANG. -proc run_alignment_test { lang } { - global testfile srcfile typelist - global subdir - - set filename [prepare_test_source_file $lang] - - set flags {debug} - if { "$lang" == "c++" } { - lappend flags "additional_flags=-std=c++11" - } - standard_testfile $filename - if {[prepare_for_testing "failed to prepare" "$lang/$testfile" $srcfile $flags]} { - return -1 - } - - if {![runto_main]} { - perror "test suppressed" - return - } - - if { $lang == "c++" } { - set align_func "alignof" - } else { - set align_func "_Alignof" - } - - foreach type $typelist { - set utype [join [split $type] _] - if { $lang == "c" } { - set expected [get_integer_valueof a_$utype 0] - gdb_test "print ${align_func}($type)" " = $expected" - } - - foreach inner $typelist { - set uinner [join [split $inner] _] - set expected [get_integer_valueof a_${utype}_x_${uinner} 0] - gdb_test "print ${align_func}(struct align_pair_${utype}_x_${uinner})" \ - " = $expected" - - if { $lang == "c++" } { - set expected [get_integer_valueof a_static_${utype}_x_${uinner} 0] - gdb_test "print ${align_func}(struct align_pair_static_${utype}_x_${uinner})" \ - " = $expected" - - set expected [get_integer_valueof a_static_${utype}_x_static_${uinner} 0] - gdb_test "print ${align_func}(struct align_pair_static_${utype}_x_static_${uinner})" \ - " = $expected" - } - } - } - - if { $lang == "c" } { - set expected [get_integer_valueof a_void 0] - gdb_test "print ${align_func}(void)" " = $expected" - } -} - -# Create nested 'c' and 'c++' directories within this tests directory. -foreach l $lang { - set dir "$l" - remote_exec host "rm -rf [standard_output_file ${dir}]" - remote_exec host "mkdir -p [standard_output_file ${dir}]" -} - -# Now run the test for each language. -foreach_with_prefix l $lang { - run_alignment_test $l -} diff -Nru gdb-9.1/gdb/testsuite/gdb.base/align.exp.tcl gdb-10.2/gdb/testsuite/gdb.base/align.exp.tcl --- gdb-9.1/gdb/testsuite/gdb.base/align.exp.tcl 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/align.exp.tcl 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,179 @@ +# Copyright 2018-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# This file is part of the gdb testsuite + +# The types we're going to test. + +set typelist { + char {unsigned char} + short {unsigned short} + int {unsigned int} + long {unsigned long} + {long long} {unsigned long long} + float + double {long double} +} + +if {[has_int128_c]} { + # Note we don't check "unsigned __int128" yet because at least gcc + # canonicalizes the name to "__int128 unsigned", and there isn't a + # c-exp.y production for this. + # https://sourceware.org/bugzilla/show_bug.cgi?id=20991 + lappend typelist __int128 +} + +# Build source file for testing alignment handling of language LANG. +# Returns the name of the newly created source file. +proc prepare_test_source_file { lang } { + global typelist + + # Create the test file. + + if { $lang == "c++" } { + set suffix "cpp" + set align_func "alignof" + } else { + set suffix "c" + set align_func "_Alignof" + } + + set filename [standard_output_file "align.$suffix"] + set outfile [open $filename w] + + # Prologue. + puts -nonewline $outfile "#define DEF(T,U) struct align_pair_ ## T ## _x_ ## U " + puts $outfile "{ T one; U two; }" + if { $lang == "c++" } { + puts -nonewline $outfile "#define DEF_WITH_1_STATIC(T,U) struct align_pair_static_ ## T ## _x_ ## U " + puts $outfile "{ static T one; U two; }" + puts -nonewline $outfile "#define DEF_WITH_2_STATIC(T,U) struct align_pair_static_ ## T ## _x_static_ ## U " + puts $outfile "{ static T one; static U two; }" + } + if { $lang == "c" } { + puts $outfile "unsigned a_void = ${align_func} (void);" + } + + # First emit single items. + foreach type $typelist { + set utype [join [split $type] _] + if {$type != $utype} { + puts $outfile "typedef $type $utype;" + } + puts $outfile "$type item_$utype;" + if { $lang == "c" } { + puts $outfile "unsigned a_$utype\n = ${align_func} ($type);" + } + set utype [join [split $type] _] + } + + # Now emit all pairs. + foreach type $typelist { + set utype [join [split $type] _] + foreach inner $typelist { + set uinner [join [split $inner] _] + puts $outfile "DEF ($utype, $uinner);" + set joined "${utype}_x_${uinner}" + puts $outfile "struct align_pair_$joined item_${joined};" + puts $outfile "unsigned a_${joined}" + puts $outfile " = ${align_func} (struct align_pair_${joined});" + + if { $lang == "c++" } { + puts $outfile "DEF_WITH_1_STATIC ($utype, $uinner);" + set joined "static_${utype}_x_${uinner}" + puts $outfile "struct align_pair_$joined item_${joined};" + puts $outfile "unsigned a_${joined}" + puts $outfile " = ${align_func} (struct align_pair_${joined});" + + puts $outfile "DEF_WITH_2_STATIC ($utype, $uinner);" + set joined "static_${utype}_x_static_${uinner}" + puts $outfile "struct align_pair_$joined item_${joined};" + puts $outfile "unsigned a_${joined}" + puts $outfile " = ${align_func} (struct align_pair_${joined});" + } + } + } + + # Epilogue. + puts $outfile { + int main() { + return 0; + } + } + + close $outfile + + return $filename +} + +# Run the alignment test for the language LANG. +proc run_alignment_test { lang } { + global testfile srcfile typelist + global subdir + + set filename [prepare_test_source_file $lang] + + set flags {debug} + if { "$lang" == "c++" } { + lappend flags "additional_flags=-std=c++11" + } + standard_testfile $filename + if {[prepare_for_testing "failed to prepare" "$testfile" $srcfile $flags]} { + return -1 + } + + if {![runto_main]} { + perror "test suppressed" + return + } + + if { $lang == "c++" } { + set align_func "alignof" + } else { + set align_func "_Alignof" + } + + foreach type $typelist { + set utype [join [split $type] _] + if { $lang == "c" } { + set expected [get_integer_valueof a_$utype 0] + gdb_test "print ${align_func}($type)" " = $expected" + } + + foreach inner $typelist { + set uinner [join [split $inner] _] + set expected [get_integer_valueof a_${utype}_x_${uinner} 0] + gdb_test "print ${align_func}(struct align_pair_${utype}_x_${uinner})" \ + " = $expected" + + if { $lang == "c++" } { + set expected [get_integer_valueof a_static_${utype}_x_${uinner} 0] + gdb_test "print ${align_func}(struct align_pair_static_${utype}_x_${uinner})" \ + " = $expected" + + set expected [get_integer_valueof a_static_${utype}_x_static_${uinner} 0] + gdb_test "print ${align_func}(struct align_pair_static_${utype}_x_static_${uinner})" \ + " = $expected" + } + } + } + + if { $lang == "c" } { + set expected [get_integer_valueof a_void 0] + gdb_test "print ${align_func}(void)" " = $expected" + } +} + +run_alignment_test $lang diff -Nru gdb-9.1/gdb/testsuite/gdb.base/all-architectures-0.exp gdb-10.2/gdb/testsuite/gdb.base/all-architectures-0.exp --- gdb-9.1/gdb/testsuite/gdb.base/all-architectures-0.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/all-architectures-0.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2016-2020 Free Software Foundation, Inc. +# Copyright 2016-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -14,4 +14,4 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. */ set test_slice 0 -source $srcdir/$subdir/all-architectures.exp.in +source $srcdir/$subdir/all-architectures.exp.tcl diff -Nru gdb-9.1/gdb/testsuite/gdb.base/all-architectures-1.exp gdb-10.2/gdb/testsuite/gdb.base/all-architectures-1.exp --- gdb-9.1/gdb/testsuite/gdb.base/all-architectures-1.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/all-architectures-1.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2016-2020 Free Software Foundation, Inc. +# Copyright 2016-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -14,4 +14,4 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. */ set test_slice 1 -source $srcdir/$subdir/all-architectures.exp.in +source $srcdir/$subdir/all-architectures.exp.tcl diff -Nru gdb-9.1/gdb/testsuite/gdb.base/all-architectures-2.exp gdb-10.2/gdb/testsuite/gdb.base/all-architectures-2.exp --- gdb-9.1/gdb/testsuite/gdb.base/all-architectures-2.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/all-architectures-2.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2016-2020 Free Software Foundation, Inc. +# Copyright 2016-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -14,4 +14,4 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. */ set test_slice 2 -source $srcdir/$subdir/all-architectures.exp.in +source $srcdir/$subdir/all-architectures.exp.tcl diff -Nru gdb-9.1/gdb/testsuite/gdb.base/all-architectures-3.exp gdb-10.2/gdb/testsuite/gdb.base/all-architectures-3.exp --- gdb-9.1/gdb/testsuite/gdb.base/all-architectures-3.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/all-architectures-3.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2016-2020 Free Software Foundation, Inc. +# Copyright 2016-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -14,4 +14,4 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. */ set test_slice 3 -source $srcdir/$subdir/all-architectures.exp.in +source $srcdir/$subdir/all-architectures.exp.tcl diff -Nru gdb-9.1/gdb/testsuite/gdb.base/all-architectures-4.exp gdb-10.2/gdb/testsuite/gdb.base/all-architectures-4.exp --- gdb-9.1/gdb/testsuite/gdb.base/all-architectures-4.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/all-architectures-4.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2016-2020 Free Software Foundation, Inc. +# Copyright 2016-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -14,4 +14,4 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. */ set test_slice 4 -source $srcdir/$subdir/all-architectures.exp.in +source $srcdir/$subdir/all-architectures.exp.tcl diff -Nru gdb-9.1/gdb/testsuite/gdb.base/all-architectures-5.exp gdb-10.2/gdb/testsuite/gdb.base/all-architectures-5.exp --- gdb-9.1/gdb/testsuite/gdb.base/all-architectures-5.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/all-architectures-5.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2016-2020 Free Software Foundation, Inc. +# Copyright 2016-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -14,4 +14,4 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. */ set test_slice 5 -source $srcdir/$subdir/all-architectures.exp.in +source $srcdir/$subdir/all-architectures.exp.tcl diff -Nru gdb-9.1/gdb/testsuite/gdb.base/all-architectures-6.exp gdb-10.2/gdb/testsuite/gdb.base/all-architectures-6.exp --- gdb-9.1/gdb/testsuite/gdb.base/all-architectures-6.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/all-architectures-6.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2016-2020 Free Software Foundation, Inc. +# Copyright 2016-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -14,4 +14,4 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. */ set test_slice 6 -source $srcdir/$subdir/all-architectures.exp.in +source $srcdir/$subdir/all-architectures.exp.tcl diff -Nru gdb-9.1/gdb/testsuite/gdb.base/all-architectures-7.exp gdb-10.2/gdb/testsuite/gdb.base/all-architectures-7.exp --- gdb-9.1/gdb/testsuite/gdb.base/all-architectures-7.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/all-architectures-7.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2016-2020 Free Software Foundation, Inc. +# Copyright 2016-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -14,4 +14,4 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. */ set test_slice 7 -source $srcdir/$subdir/all-architectures.exp.in +source $srcdir/$subdir/all-architectures.exp.tcl diff -Nru gdb-9.1/gdb/testsuite/gdb.base/all-architectures.exp.in gdb-10.2/gdb/testsuite/gdb.base/all-architectures.exp.in --- gdb-9.1/gdb/testsuite/gdb.base/all-architectures.exp.in 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/all-architectures.exp.in 1970-01-01 00:00:00.000000000 +0000 @@ -1,341 +0,0 @@ -# Copyright (C) 2016-2020 Free Software Foundation, Inc. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. - -# This file is part of the gdb testsuite. - -# Test manually setting _all_ combinations of all supported bfd -# architectures and OS ABIs. This ensures that gdbarch initialization -# routines handle unusual combinations gracefully, at least without -# crashing. - -# While at it, because the number of possible combinations is quite -# large, embed other checks that might be useful to do with all -# supported archs. - -# One such test is ensuring that printing float, double and long -# double types works in cross/bi-arch scenarios. Some of GDB's float -# format conversion routines used to fail to consider that even if -# host and target floating formats match, their sizes may still -# differ. E.g., on x86, long double is 80-bit extended precision on -# both 32-bit vs 64-bit, but it's stored as 96 bit on 32-bit, and 128 -# bit on 64-bit. This resulted in GDB accessing memory out of bounds. -# This test catches the issue when run against gdb linked with -# libmcheck, or run under Valgrind. - -# Note: this test is actually split in several driver .exp files, in -# order to be able to parallelize the work. Each driver .exp file -# exercises a different slice of the supported architectures. See -# all-architectures-*.exp and the TEST_SLICE variable. - -clean_restart - -# By default, preparation steps don't output a PASS message. This is -# because the testcase has several thousand such steps. -set want_tests_messages 0 - -# Call this when an "internal" preparation-like step test passed. -# Logs the pass in gdb.log, but not in gdb.sum. - -proc internal_pass {message} { - global want_tests_messages - - if {$want_tests_messages} { - pass $message - } else { - # Skip the sum file, but still log an internal pass in the log - # file. - global pf_prefix - - verbose -log "IPASS: $pf_prefix $message" - } -} - -# The number of times gdb_test_internal was called, and the number of -# time that resulted in an internal pass. If these don't match, then -# some test failed. -set test_count 0 -set internal_pass_count 0 - -# Like gdb_test, but calls internal_pass instead of pass, on success. - -proc gdb_test_internal {cmd pattern {message ""}} { - global test_count internal_pass_count - global gdb_prompt - - incr test_count - - if {$message == ""} { - set message $cmd - } - - gdb_test_multiple $cmd $message { - -re "$pattern\r\n$gdb_prompt $" { - internal_pass $message - incr internal_pass_count - } - } -} - -gdb_test_internal "set max-completions unlimited" \ - "^set max-completions unlimited" - -# Return a list of all the accepted values of "set WHAT". - -proc get_set_option_choices {what} { - global gdb_prompt - - set values {} - - set test "complete set $what" - gdb_test_multiple "complete set $what " "$test" { - -re "set $what (\[^\r\n\]+)\r\n" { - lappend values $expect_out(1,string) - exp_continue - } - -re "$gdb_prompt " { - internal_pass $test - } - } - return $values -} - -set supported_archs [get_set_option_choices "architecture"] -# There should be at least one more than "auto". -gdb_assert {[llength $supported_archs] > 1} "at least one architecture" - -set supported_osabis [get_set_option_choices "osabi"] -# There should be at least one more than "auto" and "default". -gdb_assert {[llength $supported_osabis] > 2} "at least one osabi" - -if {[lsearch $supported_archs "mips"] >= 0} { - set supported_mipsfpu [get_set_option_choices "mipsfpu"] - set supported_mips_abi [get_set_option_choices "mips abi"] - - gdb_assert {[llength $supported_mipsfpu] != 0} "at least one mipsfpu" - gdb_assert {[llength $supported_mips_abi] != 0} "at least one mips abi" -} - -if {[lsearch $supported_archs "arm"] >= 0} { - set supported_arm_fpu [get_set_option_choices "arm fpu"] - set supported_arm_abi [get_set_option_choices "arm abi"] - - gdb_assert {[llength $supported_arm_fpu] != 0} "at least one arm fpu" - gdb_assert {[llength $supported_arm_abi] != 0} "at least one arm abi" -} - -# Exercise printing float, double and long double. - -proc print_floats {} { - gdb_test_internal "ptype 1.0L" "type = long double" "ptype, long double" - gdb_test_internal "print 1.0L" " = 1" "print, long double" - - gdb_test_internal "ptype 1.0" "type = double" "ptype, double" - gdb_test_internal "print 1.0" " = 1" "print, double" - - gdb_test_internal "ptype 1.0f" "type = float" "ptype, float" - gdb_test_internal "print 1.0f" " = 1" "print, float" -} - -# Run tests on the current architecture. - -proc do_arch_tests {} { - print_floats - - # GDB can't access memory because there is no loaded executable - # nor live inferior. - gdb_test_internal "disassemble 0x0,+4" \ - "Cannot access memory at address 0x0" -} - -# Given we can't change arch, osabi, endianness, etc. atomically, we -# need to silently ignore the case of the current OS ABI (not the one -# we'll switch to) not having a handler for the arch. -set osabi_warning \ - [multi_line \ - "warning: A handler for the OS ABI .* is not built into this configuration" \ - "of GDB. Attempting to continue with the default .* settings." \ - "" \ - "" \ - ] - -set endian_warning "(Little|Big) endian target not supported by GDB\r\n" - -# Like gdb_test_no_output, but use internal_pass instead of pass, and -# ignore "no handler for OS ABI" warnings. - -proc gdb_test_no_output_osabi {cmd test} { - global osabi_warning - global gdb_prompt - - gdb_test_multiple "$cmd" $test { - -re "^${cmd}\r\n(${osabi_warning})?$gdb_prompt $" { - internal_pass $test - } - } -} - -# It'd be nicer/safer to restart GDB on each iteration, but, that -# increases the testcase's run time several times fold. At the time -# of writting, it'd jump from 20s to 4min on x86-64 GNU/Linux with -# --enable-targets=all. - -set num_slices 8 -set num_archs [llength $supported_archs] -set archs_per_slice [expr (($num_archs + $num_slices - 1) / $num_slices)] - -with_test_prefix "tests" { - foreach_with_prefix osabi $supported_osabis { - - gdb_test_no_output_osabi "set osabi $osabi" \ - "set osabi" - - set arch_count 0 - foreach_with_prefix arch $supported_archs { - - incr arch_count - - # Skip architectures outside our slice. - if {$arch_count < [expr $test_slice * $archs_per_slice]} { - continue - } - if {$arch_count >= [expr ($test_slice + 1) * $archs_per_slice]} { - continue - } - - if {$arch == "auto"} { - continue - } - set default_endian "" - foreach_with_prefix endian {"auto" "big" "little"} { - - set test "set endian" - if {$endian == $default_endian} { - continue - } elseif {$endian == "auto"} { - gdb_test_multiple "set endian $endian" $test { - -re "^set endian $endian\r\n(${osabi_warning})?The target endianness is set automatically \\(currently .* endian\\)\r\n$gdb_prompt $" { - internal_pass $test - } - } - } else { - gdb_test_multiple "set endian $endian" $test { - -re "^set endian $endian\r\n${endian_warning}.*\r\n$gdb_prompt $" { - internal_pass $test - continue - } - -re "^set endian $endian\r\n(${osabi_warning})?The target is assumed to be $endian endian\r\n$gdb_prompt $" { - internal_pass $test - } - } - } - - # Skip setting the same architecture again. - if {$endian == "auto"} { - set arch_re [string_to_regexp $arch] - set test "set architecture $arch" - gdb_test_multiple $test $test { - -re "^set architecture $arch_re\r\n(${osabi_warning})?The target architecture is assumed to be $arch_re\r\n$gdb_prompt $" { - internal_pass $test - } - -re "Architecture .* not recognized.*$gdb_prompt $" { - # GDB is missing support for a few - # machines that bfd supports. - if {$arch == "powerpc:EC603e" - || $arch == "powerpc:e500mc" - || $arch == "powerpc:e500mc64" - || $arch == "powerpc:vle" - || $arch == "powerpc:titan" - || $arch == "powerpc:e5500" - || $arch == "powerpc:e6500"} { - if {$want_tests_messages} { - kfail $test "gdb/19797" - } - } else { - fail "$test (arch not recognized)" - } - continue - } - } - - # Record what is the default endianess. As an - # optimization, we'll skip testing the manual "set - # endian DEFAULT" case. - set test "show endian" - gdb_test_multiple "show endian" $test { - -re "currently little endian.*$gdb_prompt $" { - set default_endian "little" - internal_pass $test - } - -re "currently big endian.*$gdb_prompt $" { - set default_endian "big" - internal_pass $test - } - } - } - - # Some architectures have extra settings that affect - # the ABI. Specify the extra testing axes in a - # declarative form. - # - # A list of {COMMAND, VAR, OPTIONS-LIST} elements. - set all_axes {} - - if {$arch == "mips"} { - lappend all_axes [list "set mips abi" mips_abi $supported_mips_abi] - lappend all_axes [list "set mipsfpu" mipsfpu $supported_mipsfpu] - } elseif {$arch == "arm"} { - lappend all_axes [list "set arm abi" arm_abi $supported_arm_abi] - lappend all_axes [list "set arm fpu" arm_fpu $supported_arm_fpu] - } - - # Run testing axis CUR_AXIS. This is a recursive - # procedure that tries all combinations of options of - # all the testing axes. - proc run_axis {all_axes cur_axis} { - if {$cur_axis == [llength $all_axes]} { - do_arch_tests - return - } - - # Unpack the axis. - set axis [lindex $all_axes $cur_axis] - set cmd [lindex $axis 0] - set var [lindex $axis 1] - set options [lindex $axis 2] - - foreach v $options { - with_test_prefix "$var=$v" { - gdb_test_no_output_osabi "$cmd $v" "$cmd" - run_axis $all_axes [expr $cur_axis + 1] - } - } - } - - run_axis $all_axes 0 - } - } - } -} - -# A test that: -# -# - ensures there's a PASS if all internal tests actually passed -# -# - ensures there's at least one test that is interpreted as a -# regression (a matching PASS->FAIL) if some of the internal tests -# failed, instead of looking like it could be a new FAIL that could -# be ignored. -# -gdb_assert {$internal_pass_count == $test_count} "all passed" diff -Nru gdb-9.1/gdb/testsuite/gdb.base/all-architectures.exp.tcl gdb-10.2/gdb/testsuite/gdb.base/all-architectures.exp.tcl --- gdb-9.1/gdb/testsuite/gdb.base/all-architectures.exp.tcl 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/all-architectures.exp.tcl 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,341 @@ +# Copyright (C) 2016-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# This file is part of the gdb testsuite. + +# Test manually setting _all_ combinations of all supported bfd +# architectures and OS ABIs. This ensures that gdbarch initialization +# routines handle unusual combinations gracefully, at least without +# crashing. + +# While at it, because the number of possible combinations is quite +# large, embed other checks that might be useful to do with all +# supported archs. + +# One such test is ensuring that printing float, double and long +# double types works in cross/bi-arch scenarios. Some of GDB's float +# format conversion routines used to fail to consider that even if +# host and target floating formats match, their sizes may still +# differ. E.g., on x86, long double is 80-bit extended precision on +# both 32-bit vs 64-bit, but it's stored as 96 bit on 32-bit, and 128 +# bit on 64-bit. This resulted in GDB accessing memory out of bounds. +# This test catches the issue when run against gdb linked with +# libmcheck, or run under Valgrind. + +# Note: this test is actually split in several driver .exp files, in +# order to be able to parallelize the work. Each driver .exp file +# exercises a different slice of the supported architectures. See +# all-architectures-*.exp and the TEST_SLICE variable. + +clean_restart + +# By default, preparation steps don't output a PASS message. This is +# because the testcase has several thousand such steps. +set want_tests_messages 0 + +# Call this when an "internal" preparation-like step test passed. +# Logs the pass in gdb.log, but not in gdb.sum. + +proc internal_pass {message} { + global want_tests_messages + + if {$want_tests_messages} { + pass $message + } else { + # Skip the sum file, but still log an internal pass in the log + # file. + global pf_prefix + + verbose -log "IPASS: $pf_prefix $message" + } +} + +# The number of times gdb_test_internal was called, and the number of +# time that resulted in an internal pass. If these don't match, then +# some test failed. +set test_count 0 +set internal_pass_count 0 + +# Like gdb_test, but calls internal_pass instead of pass, on success. + +proc gdb_test_internal {cmd pattern {message ""}} { + global test_count internal_pass_count + global gdb_prompt + + incr test_count + + if {$message == ""} { + set message $cmd + } + + gdb_test_multiple $cmd $message { + -re "$pattern\r\n$gdb_prompt $" { + internal_pass $message + incr internal_pass_count + } + } +} + +gdb_test_internal "set max-completions unlimited" \ + "^set max-completions unlimited" + +# Return a list of all the accepted values of "set WHAT". + +proc get_set_option_choices {what} { + global gdb_prompt + + set values {} + + set test "complete set $what" + gdb_test_multiple "complete set $what " "$test" { + -re "set $what (\[^\r\n\]+)\r\n" { + lappend values $expect_out(1,string) + exp_continue + } + -re "$gdb_prompt " { + internal_pass $test + } + } + return $values +} + +set supported_archs [get_set_option_choices "architecture"] +# There should be at least one more than "auto". +gdb_assert {[llength $supported_archs] > 1} "at least one architecture" + +set supported_osabis [get_set_option_choices "osabi"] +# There should be at least one more than "auto" and "default". +gdb_assert {[llength $supported_osabis] > 2} "at least one osabi" + +if {[lsearch $supported_archs "mips"] >= 0} { + set supported_mipsfpu [get_set_option_choices "mipsfpu"] + set supported_mips_abi [get_set_option_choices "mips abi"] + + gdb_assert {[llength $supported_mipsfpu] != 0} "at least one mipsfpu" + gdb_assert {[llength $supported_mips_abi] != 0} "at least one mips abi" +} + +if {[lsearch $supported_archs "arm"] >= 0} { + set supported_arm_fpu [get_set_option_choices "arm fpu"] + set supported_arm_abi [get_set_option_choices "arm abi"] + + gdb_assert {[llength $supported_arm_fpu] != 0} "at least one arm fpu" + gdb_assert {[llength $supported_arm_abi] != 0} "at least one arm abi" +} + +# Exercise printing float, double and long double. + +proc print_floats {} { + gdb_test_internal "ptype 1.0L" "type = long double" "ptype, long double" + gdb_test_internal "print 1.0L" " = 1" "print, long double" + + gdb_test_internal "ptype 1.0" "type = double" "ptype, double" + gdb_test_internal "print 1.0" " = 1" "print, double" + + gdb_test_internal "ptype 1.0f" "type = float" "ptype, float" + gdb_test_internal "print 1.0f" " = 1" "print, float" +} + +# Run tests on the current architecture. + +proc do_arch_tests {} { + print_floats + + # GDB can't access memory because there is no loaded executable + # nor live inferior. + gdb_test_internal "disassemble 0x0,+4" \ + "Cannot access memory at address 0x0" +} + +# Given we can't change arch, osabi, endianness, etc. atomically, we +# need to silently ignore the case of the current OS ABI (not the one +# we'll switch to) not having a handler for the arch. +set osabi_warning \ + [multi_line \ + "warning: A handler for the OS ABI .* is not built into this configuration" \ + "of GDB. Attempting to continue with the default .* settings." \ + "" \ + "" \ + ] + +set endian_warning "(Little|Big) endian target not supported by GDB\r\n" + +# Like gdb_test_no_output, but use internal_pass instead of pass, and +# ignore "no handler for OS ABI" warnings. + +proc gdb_test_no_output_osabi {cmd test} { + global osabi_warning + global gdb_prompt + + gdb_test_multiple "$cmd" $test { + -re "^${cmd}\r\n(${osabi_warning})?$gdb_prompt $" { + internal_pass $test + } + } +} + +# It'd be nicer/safer to restart GDB on each iteration, but, that +# increases the testcase's run time several times fold. At the time +# of writting, it'd jump from 20s to 4min on x86-64 GNU/Linux with +# --enable-targets=all. + +set num_slices 8 +set num_archs [llength $supported_archs] +set archs_per_slice [expr (($num_archs + $num_slices - 1) / $num_slices)] + +with_test_prefix "tests" { + foreach_with_prefix osabi $supported_osabis { + + gdb_test_no_output_osabi "set osabi $osabi" \ + "set osabi" + + set arch_count 0 + foreach_with_prefix arch $supported_archs { + + incr arch_count + + # Skip architectures outside our slice. + if {$arch_count < [expr $test_slice * $archs_per_slice]} { + continue + } + if {$arch_count >= [expr ($test_slice + 1) * $archs_per_slice]} { + continue + } + + if {$arch == "auto"} { + continue + } + set default_endian "" + foreach_with_prefix endian {"auto" "big" "little"} { + + set test "set endian" + if {$endian == $default_endian} { + continue + } elseif {$endian == "auto"} { + gdb_test_multiple "set endian $endian" $test { + -re "^set endian $endian\r\n(${osabi_warning})?The target endianness is set automatically \\(currently .* endian\\)\\.\r\n$gdb_prompt $" { + internal_pass $test + } + } + } else { + gdb_test_multiple "set endian $endian" $test { + -re "^set endian $endian\r\n${endian_warning}.*\r\n$gdb_prompt $" { + internal_pass $test + continue + } + -re "^set endian $endian\r\n(${osabi_warning})?The target is set to $endian endian\\.\r\n$gdb_prompt $" { + internal_pass $test + } + } + } + + # Skip setting the same architecture again. + if {$endian == "auto"} { + set arch_re [string_to_regexp $arch] + set test "set architecture $arch" + gdb_test_multiple $test $test { + -re "^set architecture $arch_re\r\n(${osabi_warning})?The target architecture is set to \"$arch_re\"\\.\r\n$gdb_prompt $" { + internal_pass $test + } + -re "Architecture .* not recognized.*$gdb_prompt $" { + # GDB is missing support for a few + # machines that bfd supports. + if {$arch == "powerpc:EC603e" + || $arch == "powerpc:e500mc" + || $arch == "powerpc:e500mc64" + || $arch == "powerpc:vle" + || $arch == "powerpc:titan" + || $arch == "powerpc:e5500" + || $arch == "powerpc:e6500"} { + if {$want_tests_messages} { + kfail $test "gdb/19797" + } + } else { + fail "$test (arch not recognized)" + } + continue + } + } + + # Record what is the default endianess. As an + # optimization, we'll skip testing the manual "set + # endian DEFAULT" case. + set test "show endian" + gdb_test_multiple "show endian" $test { + -re "currently little endian.*$gdb_prompt $" { + set default_endian "little" + internal_pass $test + } + -re "currently big endian.*$gdb_prompt $" { + set default_endian "big" + internal_pass $test + } + } + } + + # Some architectures have extra settings that affect + # the ABI. Specify the extra testing axes in a + # declarative form. + # + # A list of {COMMAND, VAR, OPTIONS-LIST} elements. + set all_axes {} + + if {$arch == "mips"} { + lappend all_axes [list "set mips abi" mips_abi $supported_mips_abi] + lappend all_axes [list "set mipsfpu" mipsfpu $supported_mipsfpu] + } elseif {$arch == "arm"} { + lappend all_axes [list "set arm abi" arm_abi $supported_arm_abi] + lappend all_axes [list "set arm fpu" arm_fpu $supported_arm_fpu] + } + + # Run testing axis CUR_AXIS. This is a recursive + # procedure that tries all combinations of options of + # all the testing axes. + proc run_axis {all_axes cur_axis} { + if {$cur_axis == [llength $all_axes]} { + do_arch_tests + return + } + + # Unpack the axis. + set axis [lindex $all_axes $cur_axis] + set cmd [lindex $axis 0] + set var [lindex $axis 1] + set options [lindex $axis 2] + + foreach v $options { + with_test_prefix "$var=$v" { + gdb_test_no_output_osabi "$cmd $v" "$cmd" + run_axis $all_axes [expr $cur_axis + 1] + } + } + } + + run_axis $all_axes 0 + } + } + } +} + +# A test that: +# +# - ensures there's a PASS if all internal tests actually passed +# +# - ensures there's at least one test that is interpreted as a +# regression (a matching PASS->FAIL) if some of the internal tests +# failed, instead of looking like it could be a new FAIL that could +# be ignored. +# +gdb_assert {$internal_pass_count == $test_count} "all passed" diff -Nru gdb-9.1/gdb/testsuite/gdb.base/all-bin.exp gdb-10.2/gdb/testsuite/gdb.base/all-bin.exp --- gdb-9.1/gdb/testsuite/gdb.base/all-bin.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/all-bin.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1998-2020 Free Software Foundation, Inc. +# Copyright 1998-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/annota1.exp gdb-10.2/gdb/testsuite/gdb.base/annota1.exp --- gdb-9.1/gdb/testsuite/gdb.base/annota1.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/annota1.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1999-2020 Free Software Foundation, Inc. +# Copyright 1999-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -223,7 +223,7 @@ # # get to printf # -set pat_begin "\r\n\032\032post-prompt\r\nContinuing.\r\n\r\n\032\032starting\r\n\r\n\032\032frames-invalid\r\n${breakpoints_invalid}" +set pat_begin "\r\n\032\032post-prompt\r\nContinuing.\r\n\r\n\032\032starting\r\n\r\n\032\032frames-invalid\r\n${breakpoints_invalid}\r\n\032\032frames-invalid\r\n" set pat_adjust "warning: Breakpoint 3 address previously adjusted from $hex to $hex.\r\n" set pat_end "\r\n\032\032breakpoint 3\r\n\r\nBreakpoint 3, \r\n\032\032frame-begin 0 $hex\r\n\r\n(\032\032frame-address\r\n$hex\r\n\032\032frame-address-end\r\n in \r\n)*.*\032\032frame-function-name\r\n.*printf(@.*)?\r\n\032\032frame-args\r\n.*\032\032frame-end\r\n\r\n\032\032stopped\r\n$gdb_prompt$" @@ -268,10 +268,10 @@ unsupported "backtrace @ signal handler" } else { gdb_test_multiple "signal SIGUSR1" "send SIGUSR1" { - -re "\r\n\032\032post-prompt\r\nContinuing with signal SIGUSR1.\r\n\r\n\032\032starting\(\(\r\n\r\n\032\032frames-invalid\)|\(\r\n\r\n\032\032breakpoints-invalid\)\)+\r\n\r\n\032\032breakpoint 2\r\n\r\nBreakpoint 2, \r\n\032\032frame-begin 0 $hex\r\n\r\n\032\032frame-function-name\r\nhandle_USR1\r\n\032\032frame-args\r\n \\(\r\n\032\032arg-begin\r\nsig\r\n\032\032arg-name-end\r\n=\r\n\032\032arg-value -\r\n$decimal\r\n\032\032arg-end\r\n\\)\r\n\032\032frame-source-begin\r\n at \r\n\032\032frame-source-file\r\n${escapedsrcfile}\r\n\032\032frame-source-file-end\r\n:\r\n\032\032frame-source-line\r\n.*\r\n\032\032frame-source-end\r\n\r\n\r\n\032\032source.*annota1.c:.*:.*:beg:$hex\r\n$decimal\[^\r\n\]+\r\n\r\n\032\032frame-end\r\n\r\n\032\032stopped\r\n$gdb_prompt$" { + -re "\r\n\032\032post-prompt\r\nContinuing with signal SIGUSR1.\r\n\r\n\032\032starting\(\(\r\n\r\n\032\032frames-invalid\)|\(\r\n\r\n\032\032breakpoints-invalid\)\)+\r\n\r\n\032\032breakpoint 2\r\n\r\nBreakpoint 2, \r\n\032\032frame-begin 0 $hex\r\n\r\n\032\032frame-function-name\r\nhandle_USR1\r\n\032\032frame-args\r\n \\(\r\n\032\032arg-begin\r\nsig\r\n\032\032arg-name-end\r\n=\r\n\032\032arg-value -\r\n$decimal\r\n\032\032arg-end\r\n\\)\r\n\032\032frame-source-begin\r\n at \r\n\032\032frame-source-file\r\n${escapedsrcfile}\r\n\032\032frame-source-file-end\r\n:\r\n\032\032frame-source-line\r\n.*\r\n\032\032frame-source-end\r\n\r\n\r\n\032\032source.*annota1.c:.*:.*:beg:$hex\r\n\r\n\032\032frame-end\r\n\r\n\032\032stopped\r\n$gdb_prompt$" { pass $gdb_test_name } - -re "\r\n\032\032post-prompt\r\nContinuing with signal SIGUSR1.\r\n\r\n\032\032starting\(\(\r\n\r\n\032\032frames-invalid\)|\(\r\n\r\n\032\032breakpoints-invalid\)\)+\r\n\r\n\032\032breakpoint 2\r\n\r\nBreakpoint 2, \r\n\032\032frame-begin 0 $hex\r\n\r\n\032\032frame-function-name\r\nhandle_USR1\r\n\032\032frame-args\r\n \\(\r\n\032\032arg-begin\r\nsig\r\n\032\032arg-name-end\r\n=\r\n\032\032arg-value -\r\n$decimal\r\n\032\032arg-end\r\n\\)\r\n\032\032frame-source-begin\r\n at \r\n\032\032frame-source-file\r\n.*${srcfile}\r\n\032\032frame-source-file-end\r\n:\r\n\032\032frame-source-line\r\n.*\r\n\032\032frame-source-end\r\n\r\n\r\n\032\032source.*annota1.c:.*:.*:beg:$hex\r\n$decimal\[^\r\n\]+\r\n\r\n\032\032frame-end\r\n\r\n\032\032stopped\r\n$gdb_prompt$" { + -re "\r\n\032\032post-prompt\r\nContinuing with signal SIGUSR1.\r\n\r\n\032\032starting\(\(\r\n\r\n\032\032frames-invalid\)|\(\r\n\r\n\032\032breakpoints-invalid\)\)+\r\n\r\n\032\032breakpoint 2\r\n\r\nBreakpoint 2, \r\n\032\032frame-begin 0 $hex\r\n\r\n\032\032frame-function-name\r\nhandle_USR1\r\n\032\032frame-args\r\n \\(\r\n\032\032arg-begin\r\nsig\r\n\032\032arg-name-end\r\n=\r\n\032\032arg-value -\r\n$decimal\r\n\032\032arg-end\r\n\\)\r\n\032\032frame-source-begin\r\n at \r\n\032\032frame-source-file\r\n.*${srcfile}\r\n\032\032frame-source-file-end\r\n:\r\n\032\032frame-source-line\r\n.*\r\n\032\032frame-source-end\r\n\r\n\r\n\032\032source.*annota1.c:.*:.*:beg:$hex\r\n\r\n\032\032frame-end\r\n\r\n\032\032stopped\r\n$gdb_prompt$" { setup_xfail "*-*-*" 1270 fail $gdb_test_name } diff -Nru gdb-9.1/gdb/testsuite/gdb.base/annota3.exp gdb-10.2/gdb/testsuite/gdb.base/annota3.exp --- gdb-9.1/gdb/testsuite/gdb.base/annota3.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/annota3.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2003-2020 Free Software Foundation, Inc. +# Copyright 2003-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/annota-input-while-running.c gdb-10.2/gdb/testsuite/gdb.base/annota-input-while-running.c --- gdb-9.1/gdb/testsuite/gdb.base/annota-input-while-running.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/annota-input-while-running.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/annota-input-while-running.exp gdb-10.2/gdb/testsuite/gdb.base/annota-input-while-running.exp --- gdb-9.1/gdb/testsuite/gdb.base/annota-input-while-running.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/annota-input-while-running.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1999-2020 Free Software Foundation, Inc. +# Copyright 1999-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/annotate-symlink.exp gdb-10.2/gdb/testsuite/gdb.base/annotate-symlink.exp --- gdb-9.1/gdb/testsuite/gdb.base/annotate-symlink.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/annotate-symlink.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2019-2020 Free Software Foundation, Inc. +# Copyright (C) 2019-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/anon.exp gdb-10.2/gdb/testsuite/gdb.base/anon.exp --- gdb-9.1/gdb/testsuite/gdb.base/anon.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/anon.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/args.exp gdb-10.2/gdb/testsuite/gdb.base/args.exp --- gdb-9.1/gdb/testsuite/gdb.base/args.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/args.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2003-2020 Free Software Foundation, Inc. +# Copyright 2003-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -23,6 +23,12 @@ return } +# This test requires starting new inferior processes, skip it if the target +# board is a stub. +if [use_gdb_stub] { + return +} + standard_testfile if {[build_executable $testfile.exp $testfile \ diff -Nru gdb-9.1/gdb/testsuite/gdb.base/argv0-symlink.c gdb-10.2/gdb/testsuite/gdb.base/argv0-symlink.c --- gdb-9.1/gdb/testsuite/gdb.base/argv0-symlink.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/argv0-symlink.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/argv0-symlink.exp gdb-10.2/gdb/testsuite/gdb.base/argv0-symlink.exp --- gdb-9.1/gdb/testsuite/gdb.base/argv0-symlink.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/argv0-symlink.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/arithmet.exp gdb-10.2/gdb/testsuite/gdb.base/arithmet.exp --- gdb-9.1/gdb/testsuite/gdb.base/arithmet.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/arithmet.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1998-2020 Free Software Foundation, Inc. +# Copyright 1998-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/arrayidx.c gdb-10.2/gdb/testsuite/gdb.base/arrayidx.c --- gdb-9.1/gdb/testsuite/gdb.base/arrayidx.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/arrayidx.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2005-2020 Free Software Foundation, Inc. + Copyright 2005-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/arrayidx.exp gdb-10.2/gdb/testsuite/gdb.base/arrayidx.exp --- gdb-9.1/gdb/testsuite/gdb.base/arrayidx.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/arrayidx.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2005-2020 Free Software Foundation, Inc. +# Copyright 2005-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/asmlabel.c gdb-10.2/gdb/testsuite/gdb.base/asmlabel.c --- gdb-9.1/gdb/testsuite/gdb.base/asmlabel.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/asmlabel.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/asmlabel.exp gdb-10.2/gdb/testsuite/gdb.base/asmlabel.exp --- gdb-9.1/gdb/testsuite/gdb.base/asmlabel.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/asmlabel.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020 Free Software Foundation, Inc. +# Copyright (C) 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/assign.exp gdb-10.2/gdb/testsuite/gdb.base/assign.exp --- gdb-9.1/gdb/testsuite/gdb.base/assign.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/assign.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1998-2020 Free Software Foundation, Inc. +# Copyright 1998-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/async.exp gdb-10.2/gdb/testsuite/gdb.base/async.exp --- gdb-9.1/gdb/testsuite/gdb.base/async.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/async.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1999-2020 Free Software Foundation, Inc. +# Copyright 1999-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -79,7 +79,7 @@ test_background "step&" "" " foo \\(\\) at .*async.c.*x = 5.*" "step& #2" -test_background "stepi&" "" ".*$hex.*x = 5.*" +set is_stmt [is_stmt_addresses $srcfile] # Get the next instruction address. set next_insn_addr "" @@ -87,16 +87,48 @@ gdb_test_multiple {x/2i $pc} "$test" { -re "=> $hex .* 0x(\[0-9a-f\]*) .*$gdb_prompt $" { set next_insn_addr $expect_out(1,string) - pass "$test" + pass $gdb_test_name } } +set next_insn_is_stmt [hex_in_list $next_insn_addr $is_stmt] -# We nexti into the same source line. The current PC is printed out. -test_background "nexti&" "" ".* 0x0*$next_insn_addr.* x = 5; .*" +if { $next_insn_is_stmt } { + set prefix "" +} else { + # The current PC is printed out. + set prefix "0x0*$next_insn_addr.*" +} +test_background "stepi&" "" ".*$prefix x = 5; .*" + +# Get the next instruction address. +set next_insn_addr "" +set test "get next insn, 2nd" +gdb_test_multiple {x/2i $pc} "$test" { + -re "=> $hex .* 0x(\[0-9a-f\]*) .*$gdb_prompt $" { + set next_insn_addr $expect_out(1,string) + pass $gdb_test_name + } +} +set next_insn_is_stmt \ + [expr [lsearch -regexp $is_stmt 0x0*$next_insn_addr] != -1] -# PC is in the middle of a source line, so the PC address is displayed. +if { $next_insn_is_stmt } { + set prefix "" +} else { + # The current PC is printed out. + set prefix "0x0*$next_insn_addr.*" +} +# We nexti into the same source line. +test_background "nexti&" "" ".*$prefix x = 5; .*" + +if { $next_insn_is_stmt } { + set prefix "" +} else { + # PC is in the middle of a source line, so the PC address is displayed. + set prefix "0x0*$next_insn_addr in " +} test_background "finish&" \ - "Run till exit from #0 $hex in foo \\(\\) at.*async.c.*\r\n" \ + "Run till exit from #0 ${prefix}foo \\(\\) at.*async.c.*\r\n" \ ".*$hex in main \\(\\) at.*async.c.*y = foo \\(\\).*Value returned is.*= 8.*" set jump_here [gdb_get_line_number "jump here"] diff -Nru gdb-9.1/gdb/testsuite/gdb.base/async-shell.c gdb-10.2/gdb/testsuite/gdb.base/async-shell.c --- gdb-9.1/gdb/testsuite/gdb.base/async-shell.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/async-shell.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/async-shell.exp gdb-10.2/gdb/testsuite/gdb.base/async-shell.exp --- gdb-9.1/gdb/testsuite/gdb.base/async-shell.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/async-shell.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2011-2020 Free Software Foundation, Inc. +# Copyright (C) 2011-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/attach2.c gdb-10.2/gdb/testsuite/gdb.base/attach2.c --- gdb-9.1/gdb/testsuite/gdb.base/attach2.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/attach2.c 2020-09-13 02:33:41.000000000 +0000 @@ -8,12 +8,15 @@ #include <stdlib.h> #include <unistd.h> -int should_exit = 0; +float bidule = 0.0; +volatile int should_exit = 0; int main () { int local_i = 0; + /* Cannot sleep a very long time, as attach.exp assumes the + process will exit before the standard GDB timeout. */ sleep( 10 ); /* System call causes register fetch to fail */ /* This is a known HPUX "feature" */ while (! should_exit) diff -Nru gdb-9.1/gdb/testsuite/gdb.base/attach3.c gdb-10.2/gdb/testsuite/gdb.base/attach3.c --- gdb-9.1/gdb/testsuite/gdb.base/attach3.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/attach3.c 2020-09-13 02:33:41.000000000 +0000 @@ -0,0 +1,25 @@ +/* This program is intended to be started outside of gdb, and then + attached to by gdb. Thus, it simply spins in a loop. The loop + is exited when & if the variable 'should_exit' is non-zero. (It + is initialized to zero in this program, so the loop will never + exit unless/until gdb sets the variable to non-zero.) + */ +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> + +double bidule = 0.0; +volatile int should_exit = 0; + +int main () +{ + int local_i = 0; + + sleep( 60 ); /* System call causes register fetch to fail */ + /* This is a known HPUX "feature" */ + while (! should_exit) + { + local_i++; + } + return (0); +} diff -Nru gdb-9.1/gdb/testsuite/gdb.base/attach.c gdb-10.2/gdb/testsuite/gdb.base/attach.c --- gdb-9.1/gdb/testsuite/gdb.base/attach.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/attach.c 2020-09-13 02:33:41.000000000 +0000 @@ -7,7 +7,8 @@ #include <stdio.h> #include <unistd.h> -int should_exit = 0; +int bidule = 0; +volatile int should_exit = 0; int main () { diff -Nru gdb-9.1/gdb/testsuite/gdb.base/attach.exp gdb-10.2/gdb/testsuite/gdb.base/attach.exp --- gdb-9.1/gdb/testsuite/gdb.base/attach.exp 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/attach.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1997-2020 Free Software Foundation, Inc. +# Copyright 1997-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -17,12 +17,13 @@ return 0 } -standard_testfile attach.c attach2.c +standard_testfile attach.c attach2.c attach3.c set binfile2 ${binfile}2 +set binfile3 ${binfile}3 set escapedbinfile [string_to_regexp $binfile] #execute_anywhere "rm -f ${binfile} ${binfile2}" -remote_exec build "rm -f ${binfile} ${binfile2}" +remote_exec build "rm -f ${binfile} ${binfile2} ${binfile3}" # For debugging this test # #log_user 1 @@ -41,6 +42,13 @@ return -1 } +# Build the third file, used to check attach when the exec-file has changed. + +if { [gdb_compile "${srcdir}/${subdir}/${srcfile3}" "${binfile3}" executable {debug}] != "" } { + untested "failed to compile attach exec-file changed test" + return -1 +} + if [get_compiler_info] { return -1 } @@ -53,10 +61,6 @@ global binfile global escapedbinfile global srcfile - global testfile - global subdir - global timeout - global decimal clean_restart $binfile @@ -205,8 +209,6 @@ global binfile global escapedbinfile global srcfile - global testfile - global subdir global timeout global decimal @@ -439,10 +441,6 @@ proc_with_prefix do_command_attach_tests {} { global gdb_prompt global binfile - global verbose - global GDB - global INTERNAL_GDBFLAGS - global GDBFLAGS if ![isnative] then { unsupported "command attach test" @@ -474,7 +472,12 @@ global gdb_prompt global binfile - if ![isnative] then { + # Skip test if we cannot attach on the command line and use the run command. + # ??? Unclear what condition to use to return here when using gdbserver. + # ??? None of the below works. + # ![isnative] || [target_is_gdbserver] + # ![isnative] || [use_gdb_stub] + if { ![isnative] || [is_remote target] } then { unsupported "commandline attach run test" return 0 } @@ -513,14 +516,133 @@ } } + +# This is a test of 'set exec-file-mismatch' handling. + +proc_with_prefix do_attach_exec_mismatch_handling_tests {} { + global gdb_prompt + global binfile + global binfile2 + global binfile3 + + clean_restart $binfile + + # Start two programs that can be attached to. + # The first program contains a 'int bidule' variable, the second a 'float bidule'. + + set test_spawn_id [spawn_wait_for_attach $binfile] + set testpid [spawn_id_get_pid $test_spawn_id] + set test_spawn_id2 [spawn_wait_for_attach $binfile2] + set testpid2 [spawn_id_get_pid $test_spawn_id2] + + + # Test with the default value of 'set exec-file-mismatch load". + set test "mismatch load" + gdb_test "attach $testpid" "Attaching to program.*" "$test attach1" + # Verify that we can "see" the variable "bidule" in the + # program, and that it is an integer. + gdb_test "ptype bidule" " = int" "$test after attach1, bidule is int" + # Detach the process. + gdb_test "detach" "Detaching from program: .* detached\\\]" "$test detach1" + gdb_test_multiple "attach $testpid2" "$test attach2" { + -re "Attaching to program.*exec-file-mismatch handling is currently \"ask\".*Load new symbol table from .*attach2\".*\(y or n\)" { + pass "$test attach2" + } + } + gdb_test "y" "Reading symbols from .*attach2.*" "$test load attach2" + # Verify that we can "see" the variable "bidule" in the + # program, and that it is a float. + gdb_test "ptype bidule" " = float" "$test after attach2 and load, bidule is float" + # Detach the process. + gdb_test "detach" "Detaching from program: .* detached\\\]" "$test detach attach2" + + + # Test with 'set exec-file-mismatch warn". + set test "mismatch warn" + gdb_test_no_output "set exec-file-mismatch warn" + gdb_test_multiple "attach $testpid" "$test attach" { + -re "Attaching to program.*exec-file-mismatch handling is currently \"warn\".*$gdb_prompt" { + pass "$test attach" + } + } + # Verify that we still (wrongly) "see" the variable "bidule" as a float, + # as we have not loaded the correct exec-file. + gdb_test "ptype bidule" " = float" "$test after attach and warn, bidule is float" + # Detach the process. + gdb_test "detach" "Detaching from program: .* detached\\\]" "$test detach attach" + + + # Same test but with 'set exec-file-mismatch off". + set test "mismatch off" + gdb_test_no_output "set exec-file-mismatch off" + gdb_test_multiple "attach $testpid" "$test attach" { + -re "Attaching to program.*$gdb_prompt" { + pass "$test attach" + } + } + # Verify that we still (wrongly) "see" the variable "bidule" as a float, + # as we have not warned the user and not loaded the correct exec-file + gdb_test "ptype bidule" " = float" "$test after attach and warn, bidule is float" + # Detach the process. + gdb_test "detach" "Detaching from program: .* detached\\\]" "$test detach attach" + + # Test that the 'exec-file' changed is checked before exec-file-mismatch. + set test "mismatch exec-file changed has priority" + gdb_test_no_output "set exec-file-mismatch ask" + gdb_test_multiple "attach $testpid" "$test attach1 again, initial exec-file" { + -re "Attaching to program.*exec-file-mismatch handling is currently \"ask\".*Load new symbol table from .*attach\".*\(y or n\)" { + gdb_test "y" "Reading symbols from .*attach.*" $gdb_test_name + } + } + + + gdb_test "detach" "Detaching from program: .* detached\\\]" "$test detach attach initial exec-file" + + # Change the exec-file and attach to a new process using the changed file. + remote_exec build "mv ${binfile} ${binfile}.initial" + remote_exec build "mv ${binfile3} ${binfile}" + # Ensure GDB detects ${binfile} has changed when checking timestamp. + sleep 1 + remote_exec build "touch ${binfile}" + set test_spawn_id3 [spawn_wait_for_attach $binfile] + set testpid3 [spawn_id_get_pid $test_spawn_id3] + + gdb_test "attach $testpid3" "Attaching to program.*attach' has changed; re-reading symbols.*" \ + "$test attach1 again, after changing exec-file" + gdb_test "detach" "Detaching from program: .* detached\\\]" "$test detach after attach changed exec-file" + + # Now, test the situation when current exec-file has changed + # and we attach to a pid using another file. + # Ensure GDB detects ${binfile} has changed when checking timestamp. + sleep 1 + remote_exec build "touch ${binfile}" + + gdb_test_multiple "attach $testpid2" "$test attach2" { + -re "Attaching to program.*exec-file-mismatch handling is currently \"ask\".*Load new symbol table from .*attach2\".*\(y or n\)" { + gdb_test "y" "Reading symbols from .*attach2.*" $gdb_test_name + } + } + + # Restore initial build situation. + remote_exec build "mv ${binfile} ${binfile3}" + remote_exec build "mv ${binfile}.initial ${binfile}" + + # Don't leave a process around + kill_wait_spawned_process $test_spawn_id + kill_wait_spawned_process $test_spawn_id2 + kill_wait_spawned_process $test_spawn_id3 +} + do_attach_tests do_attach_failure_tests do_call_attach_tests +do_attach_exec_mismatch_handling_tests # Test "gdb --pid" do_command_attach_tests + test_command_line_attach_run return 0 diff -Nru gdb-9.1/gdb/testsuite/gdb.base/attach-non-pgrp-leader.c gdb-10.2/gdb/testsuite/gdb.base/attach-non-pgrp-leader.c --- gdb-9.1/gdb/testsuite/gdb.base/attach-non-pgrp-leader.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/attach-non-pgrp-leader.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2017-2020 Free Software Foundation, Inc. + Copyright 2017-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/attach-non-pgrp-leader.exp gdb-10.2/gdb/testsuite/gdb.base/attach-non-pgrp-leader.exp --- gdb-9.1/gdb/testsuite/gdb.base/attach-non-pgrp-leader.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/attach-non-pgrp-leader.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2017-2020 Free Software Foundation, Inc. +# Copyright 2017-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/attach-pie-misread.c gdb-10.2/gdb/testsuite/gdb.base/attach-pie-misread.c --- gdb-9.1/gdb/testsuite/gdb.base/attach-pie-misread.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/attach-pie-misread.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/attach-pie-misread.exp gdb-10.2/gdb/testsuite/gdb.base/attach-pie-misread.exp --- gdb-9.1/gdb/testsuite/gdb.base/attach-pie-misread.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/attach-pie-misread.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/attach-pie-noexec.c gdb-10.2/gdb/testsuite/gdb.base/attach-pie-noexec.c --- gdb-9.1/gdb/testsuite/gdb.base/attach-pie-noexec.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/attach-pie-noexec.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/attach-pie-noexec.exp gdb-10.2/gdb/testsuite/gdb.base/attach-pie-noexec.exp --- gdb-9.1/gdb/testsuite/gdb.base/attach-pie-noexec.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/attach-pie-noexec.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2011-2020 Free Software Foundation, Inc. +# Copyright (C) 2011-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -28,7 +28,7 @@ set arch "" set test "show architecture" gdb_test_multiple $test $test { - -re "The target architecture is set automatically \\(currently (.*)\\)\r\n$gdb_prompt $" { + -re "The target architecture is set to \"auto\" \\(currently \"(.*)\"\\)\\.\r\n$gdb_prompt $" { set arch $expect_out(1,string) pass $test } @@ -61,7 +61,7 @@ gdb_start file delete -- $binfile gdb_test "attach $testpid" "Attaching to process $testpid\r\n.*" "attach" -gdb_test "set architecture $arch" "The target architecture is assumed to be $arch" +gdb_test "set architecture $arch" "The target architecture is set to \"$arch\"\\." gdb_test "info shared" "From\[ \t\]+To\[ \t\]+Syms Read\[ \t\]+Shared Object Library\r\n0x.*" kill_wait_spawned_process $test_spawn_id diff -Nru gdb-9.1/gdb/testsuite/gdb.base/attach-twice.c gdb-10.2/gdb/testsuite/gdb.base/attach-twice.c --- gdb-9.1/gdb/testsuite/gdb.base/attach-twice.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/attach-twice.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -18,9 +18,14 @@ #include <stdio.h> #include <stdlib.h> #include <unistd.h> +#include <sys/types.h> #include <sys/ptrace.h> #include <errno.h> +#ifndef PTRACE_ATTACH +#define PTRACE_ATTACH PT_ATTACH +#endif + int main (void) { @@ -33,7 +38,9 @@ exit (1); case 0: errno = 0; - ptrace (PTRACE_ATTACH, getppid (), NULL, NULL); + /* The 4th argument to ptrace () is 0 on purpose, as it is compatible + between kernels that accept void* (like Linux) and int (NetBSD). */ + ptrace (PTRACE_ATTACH, getppid (), NULL, 0); if (errno != 0) perror ("PTRACE_ATTACH"); break; diff -Nru gdb-9.1/gdb/testsuite/gdb.base/attach-twice.exp gdb-10.2/gdb/testsuite/gdb.base/attach-twice.exp --- gdb-9.1/gdb/testsuite/gdb.base/attach-twice.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/attach-twice.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2012-2020 Free Software Foundation, Inc. +# Copyright (C) 2012-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/attach-wait-input.c gdb-10.2/gdb/testsuite/gdb.base/attach-wait-input.c --- gdb-9.1/gdb/testsuite/gdb.base/attach-wait-input.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/attach-wait-input.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/attach-wait-input.exp gdb-10.2/gdb/testsuite/gdb.base/attach-wait-input.exp --- gdb-9.1/gdb/testsuite/gdb.base/attach-wait-input.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/attach-wait-input.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/auto-connect-native-target.c gdb-10.2/gdb/testsuite/gdb.base/auto-connect-native-target.c --- gdb-9.1/gdb/testsuite/gdb.base/auto-connect-native-target.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/auto-connect-native-target.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/auto-connect-native-target.exp gdb-10.2/gdb/testsuite/gdb.base/auto-connect-native-target.exp --- gdb-9.1/gdb/testsuite/gdb.base/auto-connect-native-target.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/auto-connect-native-target.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/auto-load.c gdb-10.2/gdb/testsuite/gdb.base/auto-load.c --- gdb-9.1/gdb/testsuite/gdb.base/auto-load.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/auto-load.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/auto-load.exp gdb-10.2/gdb/testsuite/gdb.base/auto-load.exp --- gdb-9.1/gdb/testsuite/gdb.base/auto-load.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/auto-load.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/auto-load-script gdb-10.2/gdb/testsuite/gdb.base/auto-load-script --- gdb-9.1/gdb/testsuite/gdb.base/auto-load-script 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/auto-load-script 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/auxv.c gdb-10.2/gdb/testsuite/gdb.base/auxv.c --- gdb-9.1/gdb/testsuite/gdb.base/auxv.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/auxv.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 1992-2020 Free Software Foundation, Inc. +/* Copyright 1992-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.base/auxv.exp gdb-10.2/gdb/testsuite/gdb.base/auxv.exp --- gdb-9.1/gdb/testsuite/gdb.base/auxv.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/auxv.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # Test `info auxv' and related functionality. -# Copyright (C) 1992-2020 Free Software Foundation, Inc. +# Copyright (C) 1992-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -126,8 +126,8 @@ set gcore_works [gdb_gcore_cmd "$gcorefile" "gcore"] # Let the program continue and die. -gdb_test continue ".*Program received signal.*" -gdb_test continue ".*Program terminated with signal.*" +gdb_test continue ".*Program received signal.*" "continue until signal" +gdb_test continue ".*Program terminated with signal.*" "continue and terminate" # Now collect the core dump it left. set test "generate native core dump" diff -Nru gdb-9.1/gdb/testsuite/gdb.base/backtrace.c gdb-10.2/gdb/testsuite/gdb.base/backtrace.c --- gdb-9.1/gdb/testsuite/gdb.base/backtrace.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/backtrace.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2019-2020 Free Software Foundation, Inc. + Copyright 2019-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/backtrace.exp gdb-10.2/gdb/testsuite/gdb.base/backtrace.exp --- gdb-9.1/gdb/testsuite/gdb.base/backtrace.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/backtrace.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/bad-file.exp gdb-10.2/gdb/testsuite/gdb.base/bad-file.exp --- gdb-9.1/gdb/testsuite/gdb.base/bad-file.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/bad-file.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2016-2020 Free Software Foundation, Inc. +# Copyright 2016-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/bang.exp gdb-10.2/gdb/testsuite/gdb.base/bang.exp --- gdb-9.1/gdb/testsuite/gdb.base/bang.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/bang.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2003-2020 Free Software Foundation, Inc. +# Copyright 2003-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/batch-exit-status.exp gdb-10.2/gdb/testsuite/gdb.base/batch-exit-status.exp --- gdb-9.1/gdb/testsuite/gdb.base/batch-exit-status.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/batch-exit-status.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2018-2020 Free Software Foundation, Inc. +# Copyright (C) 2018-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/batch-preserve-term-settings.c gdb-10.2/gdb/testsuite/gdb.base/batch-preserve-term-settings.c --- gdb-9.1/gdb/testsuite/gdb.base/batch-preserve-term-settings.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/batch-preserve-term-settings.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/batch-preserve-term-settings.exp gdb-10.2/gdb/testsuite/gdb.base/batch-preserve-term-settings.exp --- gdb-9.1/gdb/testsuite/gdb.base/batch-preserve-term-settings.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/batch-preserve-term-settings.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020 Free Software Foundation, Inc. +# Copyright (C) 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/bfp-test.c gdb-10.2/gdb/testsuite/gdb.base/bfp-test.c --- gdb-9.1/gdb/testsuite/gdb.base/bfp-test.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/bfp-test.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2005-2020 Free Software Foundation, Inc. + Copyright 2005-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/bfp-test.exp gdb-10.2/gdb/testsuite/gdb.base/bfp-test.exp --- gdb-9.1/gdb/testsuite/gdb.base/bfp-test.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/bfp-test.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2005-2020 Free Software Foundation, Inc. +# Copyright 2005-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/bg-execution-repeat.c gdb-10.2/gdb/testsuite/gdb.base/bg-execution-repeat.c --- gdb-9.1/gdb/testsuite/gdb.base/bg-execution-repeat.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/bg-execution-repeat.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/bg-execution-repeat.exp gdb-10.2/gdb/testsuite/gdb.base/bg-execution-repeat.exp --- gdb-9.1/gdb/testsuite/gdb.base/bg-execution-repeat.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/bg-execution-repeat.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2014-2020 Free Software Foundation, Inc. +# Copyright (C) 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/bigcore.c gdb-10.2/gdb/testsuite/gdb.base/bigcore.c --- gdb-9.1/gdb/testsuite/gdb.base/bigcore.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/bigcore.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2004-2020 Free Software Foundation, Inc. + Copyright 2004-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -267,5 +267,5 @@ /* Push everything out to disk. */ print_string ("Dump core ....\n"); - *(char*)0 = 0; + *(volatile char*)0 = 0; } diff -Nru gdb-9.1/gdb/testsuite/gdb.base/bigcore.exp gdb-10.2/gdb/testsuite/gdb.base/bigcore.exp --- gdb-9.1/gdb/testsuite/gdb.base/bigcore.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/bigcore.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1992-2020 Free Software Foundation, Inc. +# Copyright 1992-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/bitfields2.exp gdb-10.2/gdb/testsuite/gdb.base/bitfields2.exp --- gdb-9.1/gdb/testsuite/gdb.base/bitfields2.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/bitfields2.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1992-2020 Free Software Foundation, Inc. +# Copyright 1992-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/bitfields.exp gdb-10.2/gdb/testsuite/gdb.base/bitfields.exp --- gdb-9.1/gdb/testsuite/gdb.base/bitfields.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/bitfields.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1992-2020 Free Software Foundation, Inc. +# Copyright 1992-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/bitops.exp gdb-10.2/gdb/testsuite/gdb.base/bitops.exp --- gdb-9.1/gdb/testsuite/gdb.base/bitops.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/bitops.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1998-2020 Free Software Foundation, Inc. +# Copyright 1998-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/bp-cmds-continue-ctrl-c.c gdb-10.2/gdb/testsuite/gdb.base/bp-cmds-continue-ctrl-c.c --- gdb-9.1/gdb/testsuite/gdb.base/bp-cmds-continue-ctrl-c.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/bp-cmds-continue-ctrl-c.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2017-2020 Free Software Foundation, Inc. + Copyright 2017-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/bp-cmds-continue-ctrl-c.exp gdb-10.2/gdb/testsuite/gdb.base/bp-cmds-continue-ctrl-c.exp --- gdb-9.1/gdb/testsuite/gdb.base/bp-cmds-continue-ctrl-c.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/bp-cmds-continue-ctrl-c.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2017-2020 Free Software Foundation, Inc. +# Copyright 2017-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/bp-cmds-execution-x-script.c gdb-10.2/gdb/testsuite/gdb.base/bp-cmds-execution-x-script.c --- gdb-9.1/gdb/testsuite/gdb.base/bp-cmds-execution-x-script.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/bp-cmds-execution-x-script.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/bp-cmds-execution-x-script.exp gdb-10.2/gdb/testsuite/gdb.base/bp-cmds-execution-x-script.exp --- gdb-9.1/gdb/testsuite/gdb.base/bp-cmds-execution-x-script.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/bp-cmds-execution-x-script.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -13,11 +13,6 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. */ -# Test that GDB isn't silent if it fails to remove a breakpoint from -# the main program, independently of whether the program was loaded -# with "file PROGRAM" or directly from the command line with "gdb -# PROGRAM". - # Test that execution commands in a GDB script file run through -x # work as expected. Specifically, the scripts creates a breakpoint # that has "continue" in its command list, and then does "run". diff -Nru gdb-9.1/gdb/testsuite/gdb.base/bp-cmds-execution-x-script.gdb gdb-10.2/gdb/testsuite/gdb.base/bp-cmds-execution-x-script.gdb --- gdb-9.1/gdb/testsuite/gdb.base/bp-cmds-execution-x-script.gdb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/bp-cmds-execution-x-script.gdb 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/bp-cmds-sourced-script.c gdb-10.2/gdb/testsuite/gdb.base/bp-cmds-sourced-script.c --- gdb-9.1/gdb/testsuite/gdb.base/bp-cmds-sourced-script.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/bp-cmds-sourced-script.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,22 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +int +main () +{ + return 0; +} diff -Nru gdb-9.1/gdb/testsuite/gdb.base/bp-cmds-sourced-script.exp gdb-10.2/gdb/testsuite/gdb.base/bp-cmds-sourced-script.exp --- gdb-9.1/gdb/testsuite/gdb.base/bp-cmds-sourced-script.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/bp-cmds-sourced-script.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,39 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +# Test that breakpoint commands entered in a GDB script work as +# expected when the commands are defined for multiple breakpoints. + +standard_testfile + +if {[prepare_for_testing "failed to prepare" $testfile $srcfile]} { + return -1 +} + +set script_file ${srcdir}/${subdir}/$testfile.gdb + +gdb_test "source $script_file" \ + "Breakpoint 1\[^\r\n\]*\r\nBreakpoint 2\[^\r\n\]*" \ + "source the script" + +gdb_run_cmd + +gdb_test_multiple "" "commands executed twice" { + -re "\\$${decimal} = 100123\r\n\\$${decimal} = 100123\r\n$gdb_prompt $" { + pass $gdb_test_name + } +} + +gdb_continue_to_end diff -Nru gdb-9.1/gdb/testsuite/gdb.base/bp-cmds-sourced-script.gdb gdb-10.2/gdb/testsuite/gdb.base/bp-cmds-sourced-script.gdb --- gdb-9.1/gdb/testsuite/gdb.base/bp-cmds-sourced-script.gdb 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/bp-cmds-sourced-script.gdb 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,20 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +break main +break main +commands 1 2 + print 100123 +end diff -Nru gdb-9.1/gdb/testsuite/gdb.base/bp-permanent.c gdb-10.2/gdb/testsuite/gdb.base/bp-permanent.c --- gdb-9.1/gdb/testsuite/gdb.base/bp-permanent.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/bp-permanent.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2014-2020 Free Software Foundation, Inc. +/* Copyright (C) 2014-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.base/bp-permanent.exp gdb-10.2/gdb/testsuite/gdb.base/bp-permanent.exp --- gdb-9.1/gdb/testsuite/gdb.base/bp-permanent.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/bp-permanent.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2014-2020 Free Software Foundation, Inc. +# Copyright (C) 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/branch-to-self.c gdb-10.2/gdb/testsuite/gdb.base/branch-to-self.c --- gdb-9.1/gdb/testsuite/gdb.base/branch-to-self.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/branch-to-self.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2016-2020 Free Software Foundation, Inc. + Copyright 2016-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/branch-to-self.exp gdb-10.2/gdb/testsuite/gdb.base/branch-to-self.exp --- gdb-9.1/gdb/testsuite/gdb.base/branch-to-self.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/branch-to-self.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. # -# Copyright 2016-2020 Free Software Foundation, Inc. +# Copyright 2016-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/break1.c gdb-10.2/gdb/testsuite/gdb.base/break1.c --- gdb-9.1/gdb/testsuite/gdb.base/break1.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/break1.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 1992-2020 Free Software Foundation, Inc. + Copyright 1992-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/break-always.c gdb-10.2/gdb/testsuite/gdb.base/break-always.c --- gdb-9.1/gdb/testsuite/gdb.base/break-always.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/break-always.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2008-2020 Free Software Foundation, Inc. + Copyright 2008-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/break-always.exp gdb-10.2/gdb/testsuite/gdb.base/break-always.exp --- gdb-9.1/gdb/testsuite/gdb.base/break-always.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/break-always.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/break.c gdb-10.2/gdb/testsuite/gdb.base/break.c --- gdb-9.1/gdb/testsuite/gdb.base/break.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/break.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 1992-2020 Free Software Foundation, Inc. + Copyright 1992-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/break-caller-line.c gdb-10.2/gdb/testsuite/gdb.base/break-caller-line.c --- gdb-9.1/gdb/testsuite/gdb.base/break-caller-line.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/break-caller-line.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/break-caller-line.exp gdb-10.2/gdb/testsuite/gdb.base/break-caller-line.exp --- gdb-9.1/gdb/testsuite/gdb.base/break-caller-line.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/break-caller-line.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2012-2020 Free Software Foundation, Inc. +# Copyright (C) 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/break-entry.exp gdb-10.2/gdb/testsuite/gdb.base/break-entry.exp --- gdb-9.1/gdb/testsuite/gdb.base/break-entry.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/break-entry.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2010-2020 Free Software Foundation, Inc. +# Copyright (C) 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/break.exp gdb-10.2/gdb/testsuite/gdb.base/break.exp --- gdb-9.1/gdb/testsuite/gdb.base/break.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/break.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1988-2020 Free Software Foundation, Inc. +# Copyright 1988-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -469,10 +469,6 @@ # if ![runto_main] then { fail "break tests suppressed" } -gdb_test "catch" \ - "Catch requires an event name." \ - "catch requires an event name" - gdb_test "catch fork" "Catchpoint \[0-9\]+ \\(fork\\)" \ "set catch fork, never expected to trigger" @@ -583,22 +579,25 @@ # Verify that a breakpoint can be set via a convenience variable. # -gdb_test_no_output "set \$foo=$bp_location11" \ - "set convenience variable \$foo to bp_location11" -gdb_test "break \$foo" \ - "Breakpoint (\[0-9\]*) at .*, line $bp_location11.*" \ - "set breakpoint via convenience variable" - -# Verify that GDB responds gracefully to an attempt to set a -# breakpoint via a convenience variable whose type is not integer. -# -gdb_test_no_output "set \$foo=81.5" \ - "set convenience variable \$foo to 81.5" - -gdb_test "break \$foo" \ - "Convenience variables used in line specs must have integer values.*" \ - "set breakpoint via non-integer convenience variable disallowed" +with_test_prefix "set line breakpoint via convenience variable" { + gdb_test_no_output "set \$foo=$bp_location11" \ + "set convenience variable \$foo to bp_location11" + + gdb_test "break \$foo" \ + "Breakpoint (\[0-9\]*) at .*, line $bp_location11.*" + + # Verify that GDB responds gracefully to an attempt to set a + # breakpoint via a convenience variable whose type is not integer. + # + + gdb_test_no_output "set \$foo=81.5" \ + "set convenience variable \$foo to 81.5" + + gdb_test "break \$foo" \ + "Convenience variables used in line specs must have integer values.*" \ + "non-integer convenience variable disallowed" +} # Verify that we can set and trigger a breakpoint in a user-called function. # @@ -845,29 +844,31 @@ # # Test break via convenience variable with file name # -set line [gdb_get_line_number "set breakpoint 1 here"] -gdb_test_no_output "set \$l = $line" -set line_actual "-1" -set test "break ${srcfile}:\$l" -gdb_test_multiple "$test" $test { - -re "Breakpoint $decimal at $hex: file .*break\\.c, line ($decimal)\\.\r\n$gdb_prompt $" { - # Save the actual line number on which the breakpoint was - # actually set. On some systems (Eg: Ubuntu 16.04 with GCC - # version 5.4.0), that line gets completely inlined, including - # the call to printf, and so we end up inserting the breakpoint - # on one of the following lines instead. - set line_actual $expect_out(1,string) - pass $test +with_test_prefix "set line:file breakpoint via convenience variable" { + set line [gdb_get_line_number "set breakpoint 1 here"] + gdb_test_no_output "set \$l = $line" + + set line_actual "-1" + set test "break ${srcfile}:\$l" + gdb_test_multiple "$test" $test { + -re "Breakpoint $decimal at $hex: file .*break\\.c, line ($decimal)\\.\r\n$gdb_prompt $" { + # Save the actual line number on which the breakpoint was + # actually set. On some systems (Eg: Ubuntu 16.04 with GCC + # version 5.4.0), that line gets completely inlined, including + # the call to printf, and so we end up inserting the breakpoint + # on one of the following lines instead. + set line_actual $expect_out(1,string) + pass $test + } } -} - -gdb_test_no_output "set \$foo=81.5" \ - "set convenience variable \$foo to 81.5" -gdb_test "break $srcfile:\$foo" \ - "Convenience variables used in line specs must have integer values.*" \ - "set breakpoint via non-integer convenience variable disallowed" + gdb_test_no_output "set \$foo=81.5" \ + "set convenience variable \$foo to 81.5" + gdb_test "break $srcfile:\$foo" \ + "Convenience variables used in line specs must have integer values.*" \ + "non-integer convenience variable disallowed" +} # # Test that commands can be cleared without error. diff -Nru gdb-9.1/gdb/testsuite/gdb.base/break-fun-addr1.c gdb-10.2/gdb/testsuite/gdb.base/break-fun-addr1.c --- gdb-9.1/gdb/testsuite/gdb.base/break-fun-addr1.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/break-fun-addr1.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2016-2020 Free Software Foundation, Inc. + Copyright 2016-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/break-fun-addr2.c gdb-10.2/gdb/testsuite/gdb.base/break-fun-addr2.c --- gdb-9.1/gdb/testsuite/gdb.base/break-fun-addr2.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/break-fun-addr2.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2016-2020 Free Software Foundation, Inc. + Copyright 2016-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/break-fun-addr.exp gdb-10.2/gdb/testsuite/gdb.base/break-fun-addr.exp --- gdb-9.1/gdb/testsuite/gdb.base/break-fun-addr.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/break-fun-addr.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2016-2020 Free Software Foundation, Inc. +# Copyright 2016-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/break-idempotent.c gdb-10.2/gdb/testsuite/gdb.base/break-idempotent.c --- gdb-9.1/gdb/testsuite/gdb.base/break-idempotent.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/break-idempotent.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/break-idempotent.exp gdb-10.2/gdb/testsuite/gdb.base/break-idempotent.exp --- gdb-9.1/gdb/testsuite/gdb.base/break-idempotent.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/break-idempotent.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/break-include.c gdb-10.2/gdb/testsuite/gdb.base/break-include.c --- gdb-9.1/gdb/testsuite/gdb.base/break-include.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/break-include.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2016-2020 Free Software Foundation, Inc. + Copyright 2016-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/break-include.exp gdb-10.2/gdb/testsuite/gdb.base/break-include.exp --- gdb-9.1/gdb/testsuite/gdb.base/break-include.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/break-include.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2016-2020 Free Software Foundation, Inc. +# Copyright 2016-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/break-include.inc gdb-10.2/gdb/testsuite/gdb.base/break-include.inc --- gdb-9.1/gdb/testsuite/gdb.base/break-include.inc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/break-include.inc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2016-2020 Free Software Foundation, Inc. + Copyright 2016-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/break-inline.c gdb-10.2/gdb/testsuite/gdb.base/break-inline.c --- gdb-9.1/gdb/testsuite/gdb.base/break-inline.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/break-inline.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright (C) 2012-2020 Free Software Foundation, Inc. + Copyright (C) 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/break-inline.exp gdb-10.2/gdb/testsuite/gdb.base/break-inline.exp --- gdb-9.1/gdb/testsuite/gdb.base/break-inline.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/break-inline.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2012-2020 Free Software Foundation, Inc. +# Copyright (C) 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/break-interp.exp gdb-10.2/gdb/testsuite/gdb.base/break-interp.exp --- gdb-9.1/gdb/testsuite/gdb.base/break-interp.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/break-interp.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -251,6 +251,7 @@ if ![regexp {^(NONE|FOUND-.*)$} $displacement] { fail $test_displacement } + gdb_test_no_output "set verbose off" gdb_test "bt" "#\[0-9\]+ +\[^\r\n\]*\\mlibfunc\\M\[^\r\n\]*\r\n#\[0-9\]+ +\[^\r\n\]*\\mmain\\M.*" "core main bt" } @@ -301,6 +302,7 @@ if ![regexp {^(NONE|FOUND-.*)$} $displacement] { fail $test_displacement } + gdb_test_no_output "set verbose off" gdb_test "bt" "#\[0-9\]+ +\[^\r\n\]*\\mlibfunc\\M\[^\r\n\]*\r\n#\[0-9\]+ +\[^\r\n\]*\\mmain\\M.*" "attach main bt" gdb_exit @@ -409,19 +411,28 @@ reach $solib_bp "run" $displacement 1 - gdb_test "bt" "#0 +\[^\r\n\]*\\m(__GI_)?$solib_bp\\M.*" "dl bt" + with_test_prefix "first backtrace" { + gdb_test_no_output "set verbose off" + gdb_test "bt" "#0 +\[^\r\n\]*\\m(__GI_)?$solib_bp\\M.*" "dl bt" + gdb_test_no_output "set verbose on" + } if $ifmain { reach "main" continue "NONE" reach "libfunc" continue "NONE" - gdb_test "bt" "#0 +\[^\r\n\]*\\mlibfunc\\M\[^\r\n\]*\r\n#1 +\[^\r\n\]*\\mmain\\M.*" "main bt" + with_test_prefix "second backtrace" { + gdb_test_no_output "set verbose off" + gdb_test "bt" "#0 +\[^\r\n\]*\\mlibfunc\\M\[^\r\n\]*\r\n#1 +\[^\r\n\]*\\mmain\\M.*" "main bt" + gdb_test_no_output "set verbose on" + } } # Try re-run if the new PIE displacement takes effect. gdb_test "kill" "" "kill" {Kill the program being debugged\? \(y or n\) } "y" reach $solib_bp "run" $displacement 2 + gdb_test_no_output "set verbose off" if $ifmain { test_core $file $displacement @@ -524,14 +535,15 @@ fail $test_displacement } } + gdb_test_no_output "set verbose off" } } # Create separate binaries for each testcase - to make the possible reported # problem reproducible after the whole test run finishes. -foreach ldprelink {NO YES} { - foreach ldsepdebug {NO IN SEP} { +foreach_with_prefix ldprelink {NO YES} { + foreach_with_prefix ldsepdebug {NO IN SEP} { # Skip running the ldsepdebug test if we do not have system separate # debug info available. if {$interp_system_debug == "" && $ldsepdebug == "SEP"} { @@ -554,164 +566,160 @@ # possibly unprelinked ld.so to test all the combinations for GDB. set interp_saved ${interp}-saved - with_test_prefix "$ldname" { - if {$ldsepdebug == "NO"} { - file_copy $interp_system $interp - # Never call strip-debug before unprelink: - # prelink: ...: Section .note.gnu.build-id created after prelinking - if ![prelinkNO $interp] { - continue - } - strip_debug $interp - } elseif {$ldsepdebug == "IN" && $interp_system_debug == ""} { - file_copy $interp_system $interp - } elseif {$ldsepdebug == "IN" && $interp_system_debug != ""} { - file_copy $interp_system $interp - file_copy $interp_system_debug "${interp}.debug" - # eu-unstrip: DWARF data in '...' not adjusted for prelinking bias; consider prelink -u - if {![prelinkNO $interp] || ![prelinkNO "${interp}.debug"]} { - continue - } - set test "eu-unstrip unprelinked:[file tail $interp_system] + [file tail $interp_system_debug] to [file tail $interp]" - set command "exec eu-unstrip -o $interp $interp ${interp}.debug" - verbose -log "command is $command" - if [catch $command] { - setup_xfail *-*-* - fail $test - continue - } else { - pass $test - } - } elseif {$ldsepdebug == "SEP" && $interp_system_debug == ""} { - file_copy $interp_system $interp - # eu-unstrip: DWARF data in '...' not adjusted for prelinking bias; consider prelink -u - if ![prelinkNO $interp] { - continue - } - gdb_gnu_strip_debug $interp - } elseif {$ldsepdebug == "SEP" && $interp_system_debug != ""} { - file_copy $interp_system $interp - file_copy $interp_system_debug "${interp}.debug" - } - - if {$ldsepdebug == "SEP"} { - if ![prelinkNO "${interp}.debug"] { - continue - } - } else { - file delete "${interp}.debug" + if {$ldsepdebug == "NO"} { + file_copy $interp_system $interp + # Never call strip-debug before unprelink: + # prelink: ...: Section .note.gnu.build-id created after prelinking + if ![prelinkNO $interp] { + continue } - - if ![prelink$ldprelink $interp "$interp, second time"] { + strip_debug $interp + } elseif {$ldsepdebug == "IN" && $interp_system_debug == ""} { + file_copy $interp_system $interp + } elseif {$ldsepdebug == "IN" && $interp_system_debug != ""} { + file_copy $interp_system $interp + file_copy $interp_system_debug "${interp}.debug" + # eu-unstrip: DWARF data in '...' not adjusted for prelinking bias; consider prelink -u + if {![prelinkNO $interp] || ![prelinkNO "${interp}.debug"]} { continue } - - if {$ldprelink == "NO"} { - set displacement "NONZERO" + set test "eu-unstrip unprelinked:[file tail $interp_system] + [file tail $interp_system_debug] to [file tail $interp]" + set command "exec eu-unstrip -o $interp $interp ${interp}.debug" + verbose -log "command is $command" + if [catch $command] { + setup_xfail *-*-* + fail $test + continue } else { - # x86* kernel loads prelinked PIE binary at its - # prelinked address but ppc* kernel loads it at a - # random address. prelink normally skips PIE binaries - # during the system scan. - set displacement "PRESENT" + pass $test + } + } elseif {$ldsepdebug == "SEP" && $interp_system_debug == ""} { + file_copy $interp_system $interp + # eu-unstrip: DWARF data in '...' not adjusted for prelinking bias; consider prelink -u + if ![prelinkNO $interp] { + continue } - test_ld $interp 0 [expr {$ldsepdebug == "NO"}] $displacement + gdb_gnu_strip_debug $interp + } elseif {$ldsepdebug == "SEP" && $interp_system_debug != ""} { + file_copy $interp_system $interp + file_copy $interp_system_debug "${interp}.debug" + } - if ![file_copy $interp $interp_saved] { + if {$ldsepdebug == "SEP"} { + if ![prelinkNO "${interp}.debug"] { continue } + } else { + file delete "${interp}.debug" + } - foreach binprelink {NO YES} { - foreach binsepdebug {NO IN SEP} { - # "ATTACH" is like "YES" but it is modified during - # run. It cannot be used for problem - # reproducibility after the testcase ends. - foreach binpie {NO YES ATTACH} { - # This combination is not possible, non-PIE (fixed address) - # binary cannot be prelinked to any (other) address. - if {$binprelink == "YES" && $binpie == "NO"} { - continue - } + if ![prelink$ldprelink $interp "[file tail $interp], second time"] { + continue + } - set binname "BINprelink${binprelink}debug${binsepdebug}pie${binpie}" - set exec $binprefix-$binname + if {$ldprelink == "NO"} { + set displacement "NONZERO" + } else { + # x86* kernel loads prelinked PIE binary at its + # prelinked address but ppc* kernel loads it at a + # random address. prelink normally skips PIE binaries + # during the system scan. + set displacement "PRESENT" + } + test_ld $interp 0 [expr {$ldsepdebug == "NO"}] $displacement - with_test_prefix "$binname" { - set opts "ldflags=-Wl,$binfile_lib,-rpath,[file dirname $binfile_lib]" - if {$binsepdebug != "NO"} { - lappend opts {debug} - } - if {$binpie != "NO"} { - lappend opts {pie} - } else { - # Debian9/Ubuntu16.10 onwards default to PIE enabled. Ensure it is disabled. - lappend opts {nopie} - } + if ![file_copy $interp $interp_saved] { + continue + } - set dir ${exec}.d - set relink_args [build_executable_own_libs ${test}.exp [file tail $exec] $srcfile $opts $interp $dir] - if {$relink_args == ""} { - continue - } + foreach_with_prefix binprelink {NO YES} { + foreach_with_prefix binsepdebug {NO IN SEP} { + # "ATTACH" is like "YES" but it is modified during + # run. It cannot be used for problem + # reproducibility after the testcase ends. + foreach_with_prefix binpie {NO YES ATTACH} { + # This combination is not possible, non-PIE (fixed address) + # binary cannot be prelinked to any (other) address. + if {$binprelink == "YES" && $binpie == "NO"} { + continue + } - if {$binsepdebug == "SEP"} { - gdb_gnu_strip_debug $exec - } + set binname "BINprelink${binprelink}debug${binsepdebug}pie${binpie}" + set exec $binprefix-$binname - if {$binpie == "NO"} { - set displacement "NONE" - } elseif {$binprelink == "NO"} { - set displacement "NONZERO" + set opts "ldflags=-Wl,$binfile_lib,-rpath,[file dirname $binfile_lib]" + if {$binsepdebug != "NO"} { + lappend opts {debug} + } + if {$binpie != "NO"} { + lappend opts {pie} + } else { + # Debian9/Ubuntu16.10 onwards default to PIE enabled. Ensure it is disabled. + lappend opts {nopie} + } + + set dir ${exec}.d + set relink_args [build_executable_own_libs ${test}.exp [file tail $exec] $srcfile $opts $interp $dir] + if {$relink_args == ""} { + continue + } + + if {$binsepdebug == "SEP"} { + gdb_gnu_strip_debug $exec + } + + if {$binpie == "NO"} { + set displacement "NONE" + } elseif {$binprelink == "NO"} { + set displacement "NONZERO" + } else { + # x86* kernel loads prelinked PIE binary at its prelinked + # address but ppc* kernel loads it at a random address. + # prelink normally skips PIE binaries during the system scan. + set displacement "PRESENT" + } + + if {[prelink$binprelink $relink_args [file tail $exec]] + && [file_copy $interp_saved $interp]} { + # In order to make test names unique wrap the core of this if block + # with a test prefix. Some of the tests performed in the if + # condition are repeated within this body. + with_test_prefix "INNER" { + if {$binpie != "ATTACH"} { + test_ld $exec 1 [expr {$binsepdebug == "NO"}] $displacement } else { - # x86* kernel loads prelinked PIE binary at its prelinked - # address but ppc* kernel loads it at a random address. - # prelink normally skips PIE binaries during the system scan. - set displacement "PRESENT" - } + # If the file has been randomly prelinked it must be + # "NONZERO". We could see "ZERO" only if it was unprelinked + # and it is now running at the same address - which is 0 but + # executable can never run at address 0. + + set displacement "NONZERO" + test_attach $exec $displacement $relink_args - if {[prelink$binprelink $relink_args [file tail $exec]] - && [file_copy $interp_saved $interp]} { - # In order to make test names unique wrap the core of this if block - # with a test prefix. Some of the tests performed in the if - # condition are repeated within this body. - with_test_prefix "INNER" { - if {$binpie != "ATTACH"} { - test_ld $exec 1 [expr {$binsepdebug == "NO"}] $displacement - } else { - # If the file has been randomly prelinked it must be - # "NONZERO". We could see "ZERO" only if it was unprelinked - # and it is now running at the same address - which is 0 but - # executable can never run at address 0. - - set displacement "NONZERO" - test_attach $exec $displacement $relink_args - - # ATTACH means that executables and libraries have been - # modified after they have been run. They cannot be reused - # for problem reproducibility after the testcase ends in - # the ATTACH case. Therefore they are rather deleted not - # to confuse after the run finishes. - set exec_debug [system_debug_get $exec] - if {$exec_debug != ""} { - # `file delete [glob "${exec_debug}*"]' does not work. - foreach f [glob "${exec_debug}*"] { - file delete $f - } - } - file delete -force $dir - # `file delete [glob "${exec}*"]' does not work. - foreach f [glob "${exec}*"] { - file delete $f - } + # ATTACH means that executables and libraries have been + # modified after they have been run. They cannot be reused + # for problem reproducibility after the testcase ends in + # the ATTACH case. Therefore they are rather deleted not + # to confuse after the run finishes. + set exec_debug [system_debug_get $exec] + if {$exec_debug != ""} { + # `file delete [glob "${exec_debug}*"]' does not work. + foreach f [glob "${exec_debug}*"] { + file delete $f } } + file delete -force $dir + # `file delete [glob "${exec}*"]' does not work. + foreach f [glob "${exec}*"] { + file delete $f + } } } } } } - - file delete $interp_saved } + + file delete $interp_saved } } diff -Nru gdb-9.1/gdb/testsuite/gdb.base/break-interp-lib.c gdb-10.2/gdb/testsuite/gdb.base/break-interp-lib.c --- gdb-9.1/gdb/testsuite/gdb.base/break-interp-lib.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/break-interp-lib.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2009-2020 Free Software Foundation, Inc. + Copyright 2009-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/break-interp-main.c gdb-10.2/gdb/testsuite/gdb.base/break-interp-main.c --- gdb-9.1/gdb/testsuite/gdb.base/break-interp-main.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/break-interp-main.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2009-2020 Free Software Foundation, Inc. + Copyright 2009-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/break-main-file-remove-fail.c gdb-10.2/gdb/testsuite/gdb.base/break-main-file-remove-fail.c --- gdb-9.1/gdb/testsuite/gdb.base/break-main-file-remove-fail.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/break-main-file-remove-fail.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/break-main-file-remove-fail.exp gdb-10.2/gdb/testsuite/gdb.base/break-main-file-remove-fail.exp --- gdb-9.1/gdb/testsuite/gdb.base/break-main-file-remove-fail.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/break-main-file-remove-fail.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/break-on-linker-gcd-function.cc gdb-10.2/gdb/testsuite/gdb.base/break-on-linker-gcd-function.cc --- gdb-9.1/gdb/testsuite/gdb.base/break-on-linker-gcd-function.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/break-on-linker-gcd-function.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/break-on-linker-gcd-function.exp gdb-10.2/gdb/testsuite/gdb.base/break-on-linker-gcd-function.exp --- gdb-9.1/gdb/testsuite/gdb.base/break-on-linker-gcd-function.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/break-on-linker-gcd-function.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/breakpoint-in-ro-region.c gdb-10.2/gdb/testsuite/gdb.base/breakpoint-in-ro-region.c --- gdb-9.1/gdb/testsuite/gdb.base/breakpoint-in-ro-region.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/breakpoint-in-ro-region.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/breakpoint-in-ro-region.exp gdb-10.2/gdb/testsuite/gdb.base/breakpoint-in-ro-region.exp --- gdb-9.1/gdb/testsuite/gdb.base/breakpoint-in-ro-region.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/breakpoint-in-ro-region.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/breakpoint-shadow.c gdb-10.2/gdb/testsuite/gdb.base/breakpoint-shadow.c --- gdb-9.1/gdb/testsuite/gdb.base/breakpoint-shadow.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/breakpoint-shadow.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2008-2020 Free Software Foundation, Inc. + Copyright 2008-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/breakpoint-shadow.exp gdb-10.2/gdb/testsuite/gdb.base/breakpoint-shadow.exp --- gdb-9.1/gdb/testsuite/gdb.base/breakpoint-shadow.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/breakpoint-shadow.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/break-probes.c gdb-10.2/gdb/testsuite/gdb.base/break-probes.c --- gdb-9.1/gdb/testsuite/gdb.base/break-probes.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/break-probes.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2012-2020 Free Software Foundation, Inc. +/* Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/break-probes.exp gdb-10.2/gdb/testsuite/gdb.base/break-probes.exp --- gdb-9.1/gdb/testsuite/gdb.base/break-probes.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/break-probes.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/break-probes-solib.c gdb-10.2/gdb/testsuite/gdb.base/break-probes-solib.c --- gdb-9.1/gdb/testsuite/gdb.base/break-probes-solib.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/break-probes-solib.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2012-2020 Free Software Foundation, Inc. +/* Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/break-unload-file.c gdb-10.2/gdb/testsuite/gdb.base/break-unload-file.c --- gdb-9.1/gdb/testsuite/gdb.base/break-unload-file.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/break-unload-file.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/break-unload-file.exp gdb-10.2/gdb/testsuite/gdb.base/break-unload-file.exp --- gdb-9.1/gdb/testsuite/gdb.base/break-unload-file.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/break-unload-file.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/bt-selected-frame.c gdb-10.2/gdb/testsuite/gdb.base/bt-selected-frame.c --- gdb-9.1/gdb/testsuite/gdb.base/bt-selected-frame.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/bt-selected-frame.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2018-2020 Free Software Foundation, Inc. + Copyright 2018-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/bt-selected-frame.exp gdb-10.2/gdb/testsuite/gdb.base/bt-selected-frame.exp --- gdb-9.1/gdb/testsuite/gdb.base/bt-selected-frame.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/bt-selected-frame.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2018-2020 Free Software Foundation, Inc. +# Copyright 2018-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/cached-source-file.c gdb-10.2/gdb/testsuite/gdb.base/cached-source-file.c --- gdb-9.1/gdb/testsuite/gdb.base/cached-source-file.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/cached-source-file.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,43 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +/* Test for PR tui/25126. + + The bug is about a regression that makes GDB not reload its source + code cache when the inferior's symbols are reloaded, which leads to + wrong backtraces/listings. + + This bug is reproducible even without using the TUI. + + The .exp testcase depends on the line numbers and contents from + this file If you change this file, make sure to double-check the + testcase. */ + +#include <stdio.h> + +void +foo (void) +{ + printf ("hello\n"); /* break-here */ +} + +int +main () +{ + foo (); + return 0; +} diff -Nru gdb-9.1/gdb/testsuite/gdb.base/cached-source-file.exp gdb-10.2/gdb/testsuite/gdb.base/cached-source-file.exp --- gdb-9.1/gdb/testsuite/gdb.base/cached-source-file.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/cached-source-file.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,98 @@ +# Copyright (C) 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Test for PR tui/25126. +# +# The bug is about a regression that makes GDB not reload its source +# code cache when the inferior's symbols are reloaded, which leads to +# wrong backtraces/listings. +# +# This bug is reproducible even without using the TUI. + +standard_testfile + +# Only run on native boards. +if { [use_gdb_stub] || [target_info gdb_protocol] == "extended-remote" } { + return -1 +} + +# Because we need to modify the source file later, it's better if we +# just copy it to our output directory (instead of messing with the +# user's source directory). +set newsrc [standard_output_file $testfile].c +file copy -force -- $srcdir/$subdir/$srcfile $newsrc +set srcfile $newsrc + +if { [prepare_for_testing "failed to prepare" $testfile $srcfile] } { + return -1 +} + +# Get the line number for the line with the "break-here" marker. +set bp_line [gdb_get_line_number "break-here" $srcfile] + +gdb_assert { [runto "$srcfile:$bp_line"] } \ + "run to break-here marker" + +# Do a "list" and check that the printed line matches the line of the +# original source file. +gdb_test_no_output "set listsize 1" +gdb_test "list" "$bp_line\[ \t\]+printf \\(\"hello\\\\n\"\\); /\\* break-here \\*/" \ + "check the first version of the source file" + +# Modify the original source file, and add an extra line into it. +# This only works locally because of the TCL commands. +set bkpsrc [standard_output_file $testfile].c.bkp +set bkpsrcfd [open $bkpsrc w] +set srcfd [open $srcfile r] + +while { [gets $srcfd line] != -1 } { + if { [string first "break-here" $line] != -1 } { + # Put a "printf" line before the "break-here" line. + puts $bkpsrcfd " printf (\"foo\\n\"); /* new-marker */" + } + puts $bkpsrcfd $line +} + +close $bkpsrcfd +close $srcfd +file rename -force -- $bkpsrc $srcfile +# We have to wait 1 second because of the way GDB checks whether the +# binary has changed or not. GDB uses stat(2) and currently checks +# 'st_mtime', whose precision is measured in seconds. Since the copy, +# rename, and rebuild can take less than 1 second, GDB might mistakenly +# assume that the binary is unchanged. +sleep 1 + +# Recompile the modified source. We use "gdb_compile" here instead of +# "prepare_for_testing" because we don't want to call "clean_restart". +if { [gdb_compile "${srcfile}" "${binfile}" executable {debug}] != "" } { + return -1 +} + +# Rerun the program. This should not only force GDB to reload the +# source cache, but also to break at BP_LINE again, which now has +# different contents. +gdb_test_multiple "run" "rerun program" { + -re {The program being debugged has been started already\.\r\nStart it from the beginning\? \(y or n\) $} { + set binregex [string_to_regexp $binfile] + gdb_test "y" "\\`$binregex\\' has changed; re-reading symbols\.\r\nStarting program: ${binregex}.*" \ + "rerun program" + } +} + +# Again, perform the listing and check that the line indeed has +# changed for GDB. +gdb_test "list" "${bp_line}\[ \t\]+printf \\(\"foo\\\\n\"\\); /\\\* new-marker \\\*/.*" \ + "verify that the source code is properly reloaded" diff -Nru gdb-9.1/gdb/testsuite/gdb.base/call-ar-st.exp gdb-10.2/gdb/testsuite/gdb.base/call-ar-st.exp --- gdb-9.1/gdb/testsuite/gdb.base/call-ar-st.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/call-ar-st.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1998-2020 Free Software Foundation, Inc. +# Copyright 1998-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/callexit.c gdb-10.2/gdb/testsuite/gdb.base/callexit.c --- gdb-9.1/gdb/testsuite/gdb.base/callexit.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/callexit.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2008-2020 Free Software Foundation, Inc. + Copyright 2008-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/callexit.exp gdb-10.2/gdb/testsuite/gdb.base/callexit.exp --- gdb-9.1/gdb/testsuite/gdb.base/callexit.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/callexit.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/callfuncs.c gdb-10.2/gdb/testsuite/gdb.base/callfuncs.c --- gdb-9.1/gdb/testsuite/gdb.base/callfuncs.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/callfuncs.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 1993-2020 Free Software Foundation, Inc. + Copyright 1993-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/callfuncs.exp gdb-10.2/gdb/testsuite/gdb.base/callfuncs.exp --- gdb-9.1/gdb/testsuite/gdb.base/callfuncs.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/callfuncs.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1992-2020 Free Software Foundation, Inc. +# Copyright 1992-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -224,13 +224,13 @@ if [support_complex_tests] { - gdb_test "p t_structs_fc(struct_val1)" ".*= 3 \\+ 3 \\* I" \ + gdb_test "p t_structs_fc(struct_val1)" ".*= 3 \\+ 3i" \ "call inferior func with struct - returns float _Complex" - gdb_test "p t_structs_dc(struct_val1)" ".*= 4 \\+ 4 \\* I" \ + gdb_test "p t_structs_dc(struct_val1)" ".*= 4 \\+ 4i" \ "call inferior func with struct - returns double _Complex" - gdb_test "p t_structs_ldc(struct_val1)" "= 5 \\+ 5 \\* I" \ + gdb_test "p t_structs_ldc(struct_val1)" "= 5 \\+ 5i" \ "call inferior func with struct - returns long double _Complex" } diff -Nru gdb-9.1/gdb/testsuite/gdb.base/call-rt-st.exp gdb-10.2/gdb/testsuite/gdb.base/call-rt-st.exp --- gdb-9.1/gdb/testsuite/gdb.base/call-rt-st.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/call-rt-st.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1998-2020 Free Software Foundation, Inc. +# Copyright 1998-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/call-sc.c gdb-10.2/gdb/testsuite/gdb.base/call-sc.c --- gdb-9.1/gdb/testsuite/gdb.base/call-sc.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/call-sc.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2004-2020 Free Software Foundation, Inc. + Copyright 2004-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/call-sc.exp gdb-10.2/gdb/testsuite/gdb.base/call-sc.exp --- gdb-9.1/gdb/testsuite/gdb.base/call-sc.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/call-sc.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2004-2020 Free Software Foundation, Inc. +# Copyright 2004-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -55,21 +55,10 @@ set testfile "call-sc-${type}" set binfile [standard_output_file ${testfile}] - if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable "${flags}"] != "" } { - # built the second test case since we can't use prototypes - warning "Prototypes not supported, rebuilding with -DNO_PROTOTYPES" - if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable "${flags} additional_flags=-DNO_PROTOTYPES"] != "" } { - untested "failed to compile" - return -1 - } + if { [prepare_for_testing "failed to prepare" $binfile $srcfile $flags] } { + return -1 } - # Start with a fresh gdb. - gdb_exit - gdb_start - gdb_reinitialize_dir $srcdir/$subdir - gdb_load ${binfile} - # Make certain that the output is consistent with_test_prefix "testfile=$testfile" { gdb_test_no_output "set print sevenbit-strings" diff -Nru gdb-9.1/gdb/testsuite/gdb.base/call-signal-resume.exp gdb-10.2/gdb/testsuite/gdb.base/call-signal-resume.exp --- gdb-9.1/gdb/testsuite/gdb.base/call-signal-resume.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/call-signal-resume.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/call-signals.c gdb-10.2/gdb/testsuite/gdb.base/call-signals.c --- gdb-9.1/gdb/testsuite/gdb.base/call-signals.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/call-signals.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2008-2020 Free Software Foundation, Inc. + Copyright 2008-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/call-strs.exp gdb-10.2/gdb/testsuite/gdb.base/call-strs.exp --- gdb-9.1/gdb/testsuite/gdb.base/call-strs.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/call-strs.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1998-2020 Free Software Foundation, Inc. +# Copyright 1998-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/catch-follow-exec.c gdb-10.2/gdb/testsuite/gdb.base/catch-follow-exec.c --- gdb-9.1/gdb/testsuite/gdb.base/catch-follow-exec.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/catch-follow-exec.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2018-2020 Free Software Foundation, Inc. + Copyright 2018-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/catch-follow-exec.exp gdb-10.2/gdb/testsuite/gdb.base/catch-follow-exec.exp --- gdb-9.1/gdb/testsuite/gdb.base/catch-follow-exec.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/catch-follow-exec.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2018-2020 Free Software Foundation, Inc. +# Copyright 2018-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/catch-fork-kill.c gdb-10.2/gdb/testsuite/gdb.base/catch-fork-kill.c --- gdb-9.1/gdb/testsuite/gdb.base/catch-fork-kill.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/catch-fork-kill.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2016-2020 Free Software Foundation, Inc. + Copyright 2016-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/catch-fork-kill.exp gdb-10.2/gdb/testsuite/gdb.base/catch-fork-kill.exp --- gdb-9.1/gdb/testsuite/gdb.base/catch-fork-kill.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/catch-fork-kill.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2016-2020 Free Software Foundation, Inc. +# Copyright 2016-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/catch-fork-static.exp gdb-10.2/gdb/testsuite/gdb.base/catch-fork-static.exp --- gdb-9.1/gdb/testsuite/gdb.base/catch-fork-static.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/catch-fork-static.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020 Free Software Foundation, Inc. +# Copyright (C) 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/catch-gdb-caused-signals.c gdb-10.2/gdb/testsuite/gdb.base/catch-gdb-caused-signals.c --- gdb-9.1/gdb/testsuite/gdb.base/catch-gdb-caused-signals.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/catch-gdb-caused-signals.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/catch-gdb-caused-signals.exp gdb-10.2/gdb/testsuite/gdb.base/catch-gdb-caused-signals.exp --- gdb-9.1/gdb/testsuite/gdb.base/catch-gdb-caused-signals.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/catch-gdb-caused-signals.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/catch-load.c gdb-10.2/gdb/testsuite/gdb.base/catch-load.c --- gdb-9.1/gdb/testsuite/gdb.base/catch-load.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/catch-load.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/catch-load.exp gdb-10.2/gdb/testsuite/gdb.base/catch-load.exp --- gdb-9.1/gdb/testsuite/gdb.base/catch-load.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/catch-load.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or @@ -46,8 +46,7 @@ # MATCH is a boolean saying whether we expect the catchpoint to be hit. proc one_catch_load_test {scenario kind match sostop} { with_test_prefix "${scenario}" { - global verbose testfile testfile2 binfile2 binfile2_dlopen - global srcfile + global testfile testfile2 binfile2 binfile2_dlopen global decimal gdb_prompt clean_restart $testfile diff -Nru gdb-9.1/gdb/testsuite/gdb.base/catch-load-so.c gdb-10.2/gdb/testsuite/gdb.base/catch-load-so.c --- gdb-9.1/gdb/testsuite/gdb.base/catch-load-so.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/catch-load-so.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/catch-signal.c gdb-10.2/gdb/testsuite/gdb.base/catch-signal.c --- gdb-9.1/gdb/testsuite/gdb.base/catch-signal.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/catch-signal.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/catch-signal.exp gdb-10.2/gdb/testsuite/gdb.base/catch-signal.exp --- gdb-9.1/gdb/testsuite/gdb.base/catch-signal.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/catch-signal.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/catch-signal-fork.c gdb-10.2/gdb/testsuite/gdb.base/catch-signal-fork.c --- gdb-9.1/gdb/testsuite/gdb.base/catch-signal-fork.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/catch-signal-fork.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/catch-signal-fork.exp gdb-10.2/gdb/testsuite/gdb.base/catch-signal-fork.exp --- gdb-9.1/gdb/testsuite/gdb.base/catch-signal-fork.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/catch-signal-fork.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/catch-signal-siginfo-cond.c gdb-10.2/gdb/testsuite/gdb.base/catch-signal-siginfo-cond.c --- gdb-9.1/gdb/testsuite/gdb.base/catch-signal-siginfo-cond.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/catch-signal-siginfo-cond.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/catch-signal-siginfo-cond.exp gdb-10.2/gdb/testsuite/gdb.base/catch-signal-siginfo-cond.exp --- gdb-9.1/gdb/testsuite/gdb.base/catch-signal-siginfo-cond.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/catch-signal-siginfo-cond.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/catch-syscall.exp gdb-10.2/gdb/testsuite/gdb.base/catch-syscall.exp --- gdb-9.1/gdb/testsuite/gdb.base/catch-syscall.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/catch-syscall.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1997-2020 Free Software Foundation, Inc. +# Copyright 1997-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -593,14 +593,14 @@ gdb_start gdb_test "set architecture $arch1" \ - "The target architecture is assumed to be $arch1" + "The target architecture is set to \"$arch1\"\\." gdb_test "catch syscall $syscall_number" \ "Catchpoint $decimal \\(syscall .${syscall1_name}. \\\[${syscall_number}\\\]\\)" \ "insert catch syscall on syscall $syscall_number -- $syscall1_name on $arch1" gdb_test "set architecture $arch2" \ - "The target architecture is assumed to be $arch2" + "The target architecture is set to \"$arch2\"\\." gdb_test "catch syscall $syscall_number" \ "Catchpoint $decimal \\(syscall .${syscall2_name}. \\\[${syscall_number}\\\]\\)" \ diff -Nru gdb-9.1/gdb/testsuite/gdb.base/charset.c gdb-10.2/gdb/testsuite/gdb.base/charset.c --- gdb-9.1/gdb/testsuite/gdb.base/charset.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/charset.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2001-2020 Free Software Foundation, Inc. + Copyright 2001-2021 Free Software Foundation, Inc. Contributed by Red Hat, originally written by Jim Blandy. @@ -77,12 +77,21 @@ int int_array[3]; long long_array[3]; +/* These are unsigned char so we can pass down characters >127 without + explicit casts or warnings. */ + void init_string (char string[], - char x, - char alert, char backspace, char form_feed, - char line_feed, char carriage_return, char horizontal_tab, - char vertical_tab, char cent, char misc_ctrl) + unsigned char x, + unsigned char alert, + unsigned char backspace, + unsigned char form_feed, + unsigned char line_feed, + unsigned char carriage_return, + unsigned char horizontal_tab, + unsigned char vertical_tab, + unsigned char cent, + unsigned char misc_ctrl) { int i; diff -Nru gdb-9.1/gdb/testsuite/gdb.base/charset.exp gdb-10.2/gdb/testsuite/gdb.base/charset.exp --- gdb-9.1/gdb/testsuite/gdb.base/charset.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/charset.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2001-2020 Free Software Foundation, Inc. +# Copyright 2001-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/charset-malloc.c gdb-10.2/gdb/testsuite/gdb.base/charset-malloc.c --- gdb-9.1/gdb/testsuite/gdb.base/charset-malloc.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/charset-malloc.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. Contributed by Red Hat, originally written by Jim Blandy. diff -Nru gdb-9.1/gdb/testsuite/gdb.base/checkpoint.c gdb-10.2/gdb/testsuite/gdb.base/checkpoint.c --- gdb-9.1/gdb/testsuite/gdb.base/checkpoint.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/checkpoint.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2005-2020 Free Software Foundation, Inc. + Copyright 2005-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/checkpoint.exp gdb-10.2/gdb/testsuite/gdb.base/checkpoint.exp --- gdb-9.1/gdb/testsuite/gdb.base/checkpoint.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/checkpoint.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2005-2020 Free Software Foundation, Inc. +# Copyright 2005-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/checkpoint-ns.exp gdb-10.2/gdb/testsuite/gdb.base/checkpoint-ns.exp --- gdb-9.1/gdb/testsuite/gdb.base/checkpoint-ns.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/checkpoint-ns.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/check-psymtab.c gdb-10.2/gdb/testsuite/gdb.base/check-psymtab.c --- gdb-9.1/gdb/testsuite/gdb.base/check-psymtab.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/check-psymtab.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,28 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +static inline int __attribute__((__always_inline__)) +foo (void) +{ + return 0; +} + +int +main (void) +{ + return foo (); +} diff -Nru gdb-9.1/gdb/testsuite/gdb.base/check-psymtab.exp gdb-10.2/gdb/testsuite/gdb.base/check-psymtab.exp --- gdb-9.1/gdb/testsuite/gdb.base/check-psymtab.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/check-psymtab.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,26 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +standard_testfile + +if {[prepare_for_testing "failed to prepare" $testfile $srcfile]} { + return -1 +} + +gdb_test_no_output "maint expand-symtabs" + +# Check that we don't get: +# Static symbol `foo' only found in check-psymtab.c psymtab +gdb_test_no_output "maint check-psymtab" diff -Nru gdb-9.1/gdb/testsuite/gdb.base/chng-syms.exp gdb-10.2/gdb/testsuite/gdb.base/chng-syms.exp --- gdb-9.1/gdb/testsuite/gdb.base/chng-syms.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/chng-syms.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2004-2020 Free Software Foundation, Inc. +# Copyright 2004-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/c-linkage-name-2.c gdb-10.2/gdb/testsuite/gdb.base/c-linkage-name-2.c --- gdb-9.1/gdb/testsuite/gdb.base/c-linkage-name-2.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/c-linkage-name-2.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,45 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2018-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +struct wrapper +{ + int a; +}; + +/* Create a global variable whose name in the assembly code + (aka the "linkage name") is different from the name in + the source code. The goal is to create a symbol described + in DWARF using a DW_AT_linkage_name attribute, with a name + which follows the C++ mangling. + + In this particular case, we chose "symada__cS" which, if it were + demangled, would translate to "symada (char, signed)". */ +struct wrapper mundane asm ("symada__cS") = {0x060287af}; + +void +do_something (struct wrapper *w) +{ + w->a++; +} + +extern void do_something_other_cu (void); + +void +do_something_other_cu (void) +{ + do_something (&mundane); +} diff -Nru gdb-9.1/gdb/testsuite/gdb.base/c-linkage-name.c gdb-10.2/gdb/testsuite/gdb.base/c-linkage-name.c --- gdb-9.1/gdb/testsuite/gdb.base/c-linkage-name.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/c-linkage-name.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2018-2020 Free Software Foundation, Inc. + Copyright 2018-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -15,30 +15,11 @@ You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ -struct wrapper -{ - int a; -}; - -/* Create a global variable whose name in the assembly code - (aka the "linkage name") is different from the name in - the source code. The goal is to create a symbol described - in DWARF using a DW_AT_linkage_name attribute, with a name - which follows the C++ mangling. - - In this particular case, we chose "symada__cS" which, if it were - demangled, would translate to "symada (char, signed)". */ -struct wrapper mundane asm ("symada__cS") = {0x060287af}; - -void -do_something (struct wrapper *w) -{ - w->a++; -} +extern void do_something_other_cu (void); int main (void) { - do_something (&mundane); + do_something_other_cu (); return 0; } diff -Nru gdb-9.1/gdb/testsuite/gdb.base/c-linkage-name.exp gdb-10.2/gdb/testsuite/gdb.base/c-linkage-name.exp --- gdb-9.1/gdb/testsuite/gdb.base/c-linkage-name.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/c-linkage-name.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2018-2020 Free Software Foundation, Inc. +# Copyright 2018-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -14,30 +14,57 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. # This file is part of the gdb testsuite. It is intended to test that -# gdb can correctly print arrays with indexes for each element of the -# array. +# gdb can correctly print an ada symbol with linkage name before and after +# symtab expansion. -standard_testfile .c +standard_testfile c-linkage-name.c c-linkage-name-2.c -if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } { +set sources "${srcdir}/${subdir}/${srcfile} ${srcdir}/${subdir}/${srcfile2}" +if { [gdb_compile "${sources}" "${binfile}" executable {debug}] != "" } { untested "failed to compile" return -1 } -clean_restart ${binfile} +clean_restart +gdb_test_no_output "set language c" +gdb_load ${binfile} +set readnow [readnow] + +set test "verify no symtab expansion" +if { $readnow } { + unsupported $test +} else { + # Verify that symtab expansion has not taken place. -# Try to print MUNDANE, but using its linkage name. + gdb_test_no_output "maint info symtabs" $test +} -gdb_test "print symada__cS" \ - " = {a = 100829103}" \ - "print symada__cS before partial symtab expansion" +set test "print symada__cS before partial symtab expansion" +if { $readnow } { + unsupported $test +} else { + # Try to print MUNDANE, but using its linkage name. + + gdb_test "print symada__cS" \ + " = {a = 100829103}" \ + "print symada__cS before partial symtab expansion" +} # Force the symbols to be expanded for the unit that contains # our symada__cS symbol by, e.g. inserting a breakpoint on one # of the founction also provided by the same using. -gdb_test "break main" \ - "Breakpoint $decimal at $hex: file .*$srcfile, line $decimal\\." +gdb_test "break do_something_other_cu" \ + "Breakpoint $decimal at $hex: file .*$srcfile2, line $decimal\\." + +# Verify that partial symtab expansion has taken place for +# c-linkage-name-2.c. + +gdb_test "maint info symtabs" "\{ symtab \[^\r\n\]*c-linkage-name-2.c.*" + +# Flush the symbol cache to prevent the lookup to return the same as before. + +gdb_test "maint flush-symbol-cache" # Try to print MUNDANE using its linkage name again, after partial # symtab expansion. diff -Nru gdb-9.1/gdb/testsuite/gdb.base/code_elim1.c gdb-10.2/gdb/testsuite/gdb.base/code_elim1.c --- gdb-9.1/gdb/testsuite/gdb.base/code_elim1.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/code_elim1.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/code_elim2.c gdb-10.2/gdb/testsuite/gdb.base/code_elim2.c --- gdb-9.1/gdb/testsuite/gdb.base/code_elim2.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/code_elim2.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/code_elim.exp gdb-10.2/gdb/testsuite/gdb.base/code_elim.exp --- gdb-9.1/gdb/testsuite/gdb.base/code_elim.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/code_elim.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2002-2020 Free Software Foundation, Inc. +# Copyright 2002-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/code-expr.exp gdb-10.2/gdb/testsuite/gdb.base/code-expr.exp --- gdb-9.1/gdb/testsuite/gdb.base/code-expr.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/code-expr.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/command-line-input.exp gdb-10.2/gdb/testsuite/gdb.base/command-line-input.exp --- gdb-9.1/gdb/testsuite/gdb.base/command-line-input.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/command-line-input.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2016-2020 Free Software Foundation, Inc. +# Copyright (C) 2016-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/commands.exp gdb-10.2/gdb/testsuite/gdb.base/commands.exp --- gdb-9.1/gdb/testsuite/gdb.base/commands.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/commands.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1988-2020 Free Software Foundation, Inc. +# Copyright 1988-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/compare-sections.c gdb-10.2/gdb/testsuite/gdb.base/compare-sections.c --- gdb-9.1/gdb/testsuite/gdb.base/compare-sections.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/compare-sections.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/compare-sections.exp gdb-10.2/gdb/testsuite/gdb.base/compare-sections.exp --- gdb-9.1/gdb/testsuite/gdb.base/compare-sections.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/compare-sections.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/complete-empty.exp gdb-10.2/gdb/testsuite/gdb.base/complete-empty.exp --- gdb-9.1/gdb/testsuite/gdb.base/complete-empty.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/complete-empty.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2017-2020 Free Software Foundation, Inc. +# Copyright 2017-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/completion.exp gdb-10.2/gdb/testsuite/gdb.base/completion.exp --- gdb-9.1/gdb/testsuite/gdb.base/completion.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/completion.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1998-2020 Free Software Foundation, Inc. +# Copyright 1998-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -310,7 +310,7 @@ -re "^info $" { send_gdb "\n" gdb_test_multiple "" "$test" { - -re "\"info\" must be followed by the name of an info command\\.\r\nList of info subcommands.*$gdb_prompt $" { + -re "List of info subcommands.*$gdb_prompt $" { pass "$test" } } @@ -323,7 +323,7 @@ -re "^info \\\x07$" { send_gdb "\n" gdb_test_multiple "" "$test" { - -re "\"info\" must be followed by the name of an info command\\.\r\nList of info subcommands:\r\n\r\n.*$gdb_prompt $" { + -re "List of info subcommands:\r\n\r\n.*$gdb_prompt $" { pass "$test" } } @@ -339,7 +339,7 @@ -re "address.*types.*$gdb_prompt " { send_gdb "\n" gdb_test_multiple "" "$test" { - -re "\"info\".*unambiguous\\..*$gdb_prompt $" { + -re "allowed if unambiguous\\..*$gdb_prompt $" { pass "$test" } } diff -Nru gdb-9.1/gdb/testsuite/gdb.base/complex.c gdb-10.2/gdb/testsuite/gdb.base/complex.c --- gdb-9.1/gdb/testsuite/gdb.base/complex.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/complex.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2002-2020 Free Software Foundation, Inc. +/* Copyright 2002-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.base/complex.exp gdb-10.2/gdb/testsuite/gdb.base/complex.exp --- gdb-9.1/gdb/testsuite/gdb.base/complex.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/complex.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2003-2020 Free Software Foundation, Inc. +# Copyright 2003-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -29,12 +29,12 @@ if { [test_compiler_info gcc-2-*] && [test_debug_format "DWARF 2"] } then { setup_xfail "*-*-*" } - gdb_test "p *y" "\\\$\[0-9\]* = \{c = 42 '\\*', f = 1 \\+ 0 \\* I\}" \ + gdb_test "p *y" "\\\$\[0-9\]* = \{c = 42 '\\*', f = 1 \\+ 0i\}" \ "print complex packed value in C" } if [runto f4] then { - gdb_test "p *y" "\\\$\[0-9\]* = \{c = 42 '\\*', f = 1 \\+ 0 \\* I\}" \ + gdb_test "p *y" "\\\$\[0-9\]* = \{c = 42 '\\*', f = 1 \\+ 0i\}" \ "print complex value in C" } diff -Nru gdb-9.1/gdb/testsuite/gdb.base/complex-parts.c gdb-10.2/gdb/testsuite/gdb.base/complex-parts.c --- gdb-9.1/gdb/testsuite/gdb.base/complex-parts.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/complex-parts.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2019-2020 Free Software Foundation, Inc. +/* Copyright 2019-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.base/complex-parts.exp gdb-10.2/gdb/testsuite/gdb.base/complex-parts.exp --- gdb-9.1/gdb/testsuite/gdb.base/complex-parts.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/complex-parts.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -27,31 +27,43 @@ gdb_breakpoint [gdb_get_line_number "Break Here"] gdb_continue_to_breakpoint "breakpt" ".* Break Here\\. .*" -gdb_test "p z1" " = 1.5 \\+ 4.5 \\* I" -gdb_test "p z2" " = 2.5 \\+ -5.5 \\* I" -gdb_test "p z3" " = 3.5 \\+ 6.5 \\* I" +gdb_test "p z1" " = 1.5 \\+ 4.5i" +gdb_test "p z2" " = 2.5 \\+ -5.5i" +gdb_test "p z3" " = 3.5 \\+ 6.5i" gdb_test "ptype z1" " = complex double" gdb_test "ptype z2" " = complex float" gdb_test "ptype z3" " = complex long double" -gdb_test "p \$_cimag (z1)" " = 4.5" -gdb_test "ptype \$" " = double" +with_test_prefix "double imaginary" { + gdb_test "p \$_cimag (z1)" " = 4.5" + gdb_test "ptype \$" " = double" +} -gdb_test "p \$_cimag (z2)" " = -5.5" -gdb_test "ptype \$" " = float" +with_test_prefix "float imaginary" { + gdb_test "p \$_cimag (z2)" " = -5.5" + gdb_test "ptype \$" " = float" +} -gdb_test "p \$_cimag (z3)" " = 6.5" -gdb_test "ptype \$" " = long double" +with_test_prefix "long double imaginary" { + gdb_test "p \$_cimag (z3)" " = 6.5" + gdb_test "ptype \$" " = long double" +} -gdb_test "p \$_creal (z1)" " = 1.5" -gdb_test "ptype \$" " = double" +with_test_prefix "double real" { + gdb_test "p \$_creal (z1)" " = 1.5" + gdb_test "ptype \$" " = double" +} -gdb_test "p \$_creal (z2)" " = 2.5" -gdb_test "ptype \$" " = float" +with_test_prefix "float real" { + gdb_test "p \$_creal (z2)" " = 2.5" + gdb_test "ptype \$" " = float" +} -gdb_test "p \$_creal (z3)" " = 3.5" -gdb_test "ptype \$" " = long double" +with_test_prefix "long double real" { + gdb_test "p \$_creal (z3)" " = 3.5" + gdb_test "ptype \$" " = long double" +} gdb_test "p \$_cimag (d1)" "expected a complex number" gdb_test "p \$_cimag (f1)" "expected a complex number" @@ -60,3 +72,34 @@ gdb_test "p \$_creal (d1)" "expected a complex number" gdb_test "p \$_creal (f1)" "expected a complex number" gdb_test "p \$_creal (i1)" "expected a complex number" + +# +# General complex number tests. +# + +gdb_test "print 23 + 7i" " = 23 \\+ 7i" +gdb_test "print 23.125f + 7i" " = 23.125 \\+ 7i" +gdb_test "print 23 + 7.25fi" " = 23 \\+ 7.25i" +gdb_test "print (23 + 7i) + (17 + 10i)" " = 40 \\+ 17i" +gdb_test "print 23 + -7i" " = 23 \\+ -7i" +gdb_test "print 23 - 7i" " = 23 \\+ -7i" + +gdb_test "print -(23 + 7i)" " = -23 \\+ -7i" +gdb_test "print +(23 + 7i)" " = 23 \\+ 7i" +gdb_test "print ~(23 + 7i)" " = 23 \\+ -7i" + +gdb_test "print (5 + 5i) * (2 + 2i)" " = 0 \\+ 20i" + +gdb_test "print (5 + 7i) == (5 + 7i)" " = 1" +gdb_test "print (5 + 7i) == (8 + 7i)" " = 0" +gdb_test "print (5 + 7i) == (5 + 92i)" " = 0" +gdb_test "print (5 + 7i) != (5 + 7i)" " = 0" +gdb_test "print (5 + 7i) != (8 + 7i)" " = 1" +gdb_test "print (5 + 7i) != (5 + 92i)" " = 1" + +gdb_test "print (20 - 4i) / (3 + 2i)" " = 4 \\+ -4i" + +gdb_test "print (_Complex int) 4" " = 4 \\+ 0i" +gdb_test "print (_Complex float) 4.5" " = 4.5 \\+ 0i" +gdb_test "ptype __complex__ short" " = _Complex short" +gdb_test "print (_Complex int) (23.75 + 8.88i)" " = 23 \\+ 8i" diff -Nru gdb-9.1/gdb/testsuite/gdb.base/comprdebug.exp gdb-10.2/gdb/testsuite/gdb.base/comprdebug.exp --- gdb-9.1/gdb/testsuite/gdb.base/comprdebug.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/comprdebug.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/condbreak-bad.c gdb-10.2/gdb/testsuite/gdb.base/condbreak-bad.c --- gdb-9.1/gdb/testsuite/gdb.base/condbreak-bad.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/condbreak-bad.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,24 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +int +main () +{ + int a = 10; + a = a + 1; /* break-here */ + return 0; +} diff -Nru gdb-9.1/gdb/testsuite/gdb.base/condbreak-bad.exp gdb-10.2/gdb/testsuite/gdb.base/condbreak-bad.exp --- gdb-9.1/gdb/testsuite/gdb.base/condbreak-bad.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/condbreak-bad.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,128 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Test defining bad conditions for breakpoints. + +standard_testfile + +if {[prepare_for_testing "failed to prepare" ${binfile} ${srcfile}]} { + return +} + +set bp_location [gdb_get_line_number "break-here"] +gdb_breakpoint "$bp_location" +set bpnum [get_integer_valueof "\$bpnum" 0 "get bpnum"] + +# Define a 'bad' condition. The breakpoint should stay unconditional. +gdb_test "cond $bpnum gibberish" \ + "No symbol \"gibberish\" in current context." \ + "attempt a bad condition" + +set fill "\[^\r\n\]*" + +gdb_test "info break" \ + [multi_line \ + "Num${fill}What" \ + "${decimal}${fill}breakpoint${fill}keep y${fill}:${bp_location}"] \ + "breakpoint is unconditional" + +# Now define a valid condition. Attempt to override that with a 'bad' +# condition again. The condition should be preserved. +with_test_prefix "with run" { + gdb_test_no_output "cond $bpnum a == 10" + + gdb_test "cond $bpnum gibberish" \ + "No symbol \"gibberish\" in current context." \ + "attempt a bad condition" + + gdb_test "info break" \ + [multi_line \ + "Num${fill}What" \ + "${decimal}${fill}breakpoint${fill}keep y${fill}:${bp_location}" \ + "${fill}stop only if a == 10${fill}"] \ + "breakpoint condition is preserved" + + # Run the code. We should hit the breakpoint, because the + # condition evaluates to true. + + gdb_run_cmd + gdb_test "" ".*reakpoint .*, main .*${srcfile}.*" "run to the bp" +} + +# Restart. Repeat the test above after the program has started. +# This is needed to check a scenario where the breakpoints are no +# longer re-inserted due to solib events. Note that runto_main +# deletes the breakpoints. +with_test_prefix "with continue 1" { + if {![runto_main]} { + fail "could not run to main" + return -1 + } + + gdb_breakpoint "$bp_location" + set bpnum [get_integer_valueof "\$bpnum" 0 "get bpnum"] + + gdb_test_no_output "cond $bpnum a == 10" + + gdb_test "cond $bpnum gibberish" \ + "No symbol \"gibberish\" in current context." \ + "attempt a bad condition" + + # Resume. We should hit the breakpoint, because the + # condition evaluates to true. + gdb_continue_to_breakpoint "${srcfile}:${bp_location}" +} + +# Repeat with a condition that evaluates to false. +with_test_prefix "with continue 2" { + if {![runto_main]} { + fail "could not run to main" + return -1 + } + + gdb_breakpoint "$bp_location" + set bpnum [get_integer_valueof "\$bpnum" 0 "get bpnum"] + + gdb_test_no_output "cond $bpnum a == 999" + + gdb_test "cond $bpnum gibberish" \ + "No symbol \"gibberish\" in current context." \ + "attempt a bad condition" + + # Resume. We should *not* hit the breakpoint, because the + # condition evaluates to false. + gdb_continue_to_end +} + +# Repeat with a condition that contains junk at the end. +with_test_prefix "with junk" { + if {![runto_main]} { + fail "could not run to main" + return -1 + } + + gdb_breakpoint "$bp_location" + set bpnum [get_integer_valueof "\$bpnum" 0 "get bpnum"] + + gdb_test_no_output "cond $bpnum a == 999" + + gdb_test "cond $bpnum a == 10 if" \ + "Junk at end of expression" \ + "attempt a bad condition" + + # Resume. We should *not* hit the breakpoint, because the + # condition evaluates to false. + gdb_continue_to_end +} diff -Nru gdb-9.1/gdb/testsuite/gdb.base/condbreak-call-false.c gdb-10.2/gdb/testsuite/gdb.base/condbreak-call-false.c --- gdb-9.1/gdb/testsuite/gdb.base/condbreak-call-false.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/condbreak-call-false.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2013-2020 Free Software Foundation, Inc. +/* Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/condbreak-call-false.exp gdb-10.2/gdb/testsuite/gdb.base/condbreak-call-false.exp --- gdb-9.1/gdb/testsuite/gdb.base/condbreak-call-false.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/condbreak-call-false.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/condbreak.exp gdb-10.2/gdb/testsuite/gdb.base/condbreak.exp --- gdb-9.1/gdb/testsuite/gdb.base/condbreak.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/condbreak.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1997-2020 Free Software Foundation, Inc. +# Copyright 1997-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/cond-eval-mode.c gdb-10.2/gdb/testsuite/gdb.base/cond-eval-mode.c --- gdb-9.1/gdb/testsuite/gdb.base/cond-eval-mode.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/cond-eval-mode.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/cond-eval-mode.exp gdb-10.2/gdb/testsuite/gdb.base/cond-eval-mode.exp --- gdb-9.1/gdb/testsuite/gdb.base/cond-eval-mode.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/cond-eval-mode.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/cond-expr.exp gdb-10.2/gdb/testsuite/gdb.base/cond-expr.exp --- gdb-9.1/gdb/testsuite/gdb.base/cond-expr.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/cond-expr.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1998-2020 Free Software Foundation, Inc. +# Copyright 1998-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/consecutive.exp gdb-10.2/gdb/testsuite/gdb.base/consecutive.exp --- gdb-9.1/gdb/testsuite/gdb.base/consecutive.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/consecutive.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2001-2020 Free Software Foundation, Inc. +# Copyright 2001-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -35,6 +35,8 @@ continue } +set is_stmt [is_stmt_addresses $srcfile] + set nl "\[\r\n\]+" gdb_breakpoint foo @@ -55,12 +57,23 @@ "set bp, 2nd instr" gdb_test_multiple "step" "stopped at bp, 2nd instr" { - -re "Breakpoint $decimal, ($hex) in foo.*$gdb_prompt $" { + -re -wrap "Breakpoint $decimal, ($hex) in foo.*" { set stop_addr $expect_out(1,string) if [eval expr "$bp_addr == $stop_addr"] then { pass "stopped at bp, 2nd instr" } else { fail "stopped at bp, 2nd instr (wrong address)" + } + } + -re -wrap "Breakpoint $decimal, foo.*" { + set stop_addr [get_valueof "/x" "\$pc" "" "value of pc"] + set stop_addr_is_stmt [hex_in_list $stop_addr $is_stmt] + if { ! $stop_addr_is_stmt } { + fail "stopped at bp, 2nd instr (missing hex prefix)" + } elseif [eval expr "$bp_addr == $stop_addr"] then { + pass "stopped at bp, 2nd instr" + } else { + fail "stopped at bp, 2nd instr (wrong address)" } } } diff -Nru gdb-9.1/gdb/testsuite/gdb.base/consecutive-step-over.c gdb-10.2/gdb/testsuite/gdb.base/consecutive-step-over.c --- gdb-9.1/gdb/testsuite/gdb.base/consecutive-step-over.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/consecutive-step-over.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2014-2020 Free Software Foundation, Inc. +/* Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/consecutive-step-over.exp gdb-10.2/gdb/testsuite/gdb.base/consecutive-step-over.exp --- gdb-9.1/gdb/testsuite/gdb.base/consecutive-step-over.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/consecutive-step-over.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/constvars.exp gdb-10.2/gdb/testsuite/gdb.base/constvars.exp --- gdb-9.1/gdb/testsuite/gdb.base/constvars.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/constvars.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1997-2020 Free Software Foundation, Inc. +# Copyright 1997-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/continue-after-aborted-step-over.c gdb-10.2/gdb/testsuite/gdb.base/continue-after-aborted-step-over.c --- gdb-9.1/gdb/testsuite/gdb.base/continue-after-aborted-step-over.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/continue-after-aborted-step-over.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2018-2020 Free Software Foundation, Inc. + Copyright 2018-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/continue-after-aborted-step-over.exp gdb-10.2/gdb/testsuite/gdb.base/continue-after-aborted-step-over.exp --- gdb-9.1/gdb/testsuite/gdb.base/continue-after-aborted-step-over.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/continue-after-aborted-step-over.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2018-2020 Free Software Foundation, Inc. +# Copyright 2018-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/continue-all-already-running.c gdb-10.2/gdb/testsuite/gdb.base/continue-all-already-running.c --- gdb-9.1/gdb/testsuite/gdb.base/continue-all-already-running.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/continue-all-already-running.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/continue-all-already-running.exp gdb-10.2/gdb/testsuite/gdb.base/continue-all-already-running.exp --- gdb-9.1/gdb/testsuite/gdb.base/continue-all-already-running.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/continue-all-already-running.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2014-2020 Free Software Foundation, Inc. +# Copyright (C) 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/coredump-filter-build-id.exp gdb-10.2/gdb/testsuite/gdb.base/coredump-filter-build-id.exp --- gdb-9.1/gdb/testsuite/gdb.base/coredump-filter-build-id.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/coredump-filter-build-id.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/coredump-filter.c gdb-10.2/gdb/testsuite/gdb.base/coredump-filter.c --- gdb-9.1/gdb/testsuite/gdb.base/coredump-filter.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/coredump-filter.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2015-2020 Free Software Foundation, Inc. +/* Copyright 2015-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -29,7 +29,7 @@ { void *ret = mmap (addr, size, prot, flags, fd, offset); - assert (ret != NULL); + assert (ret != MAP_FAILED); return ret; } diff -Nru gdb-9.1/gdb/testsuite/gdb.base/coredump-filter.exp gdb-10.2/gdb/testsuite/gdb.base/coredump-filter.exp --- gdb-9.1/gdb/testsuite/gdb.base/coredump-filter.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/coredump-filter.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -80,15 +80,26 @@ # disassemble of a function (i.e., the binary's .text section). GDB # should fail in this case. However, it must succeed if the binary is # provided along with the corefile. This is what we test here. +# +# A further complication is that Linux NT_FILE notes are now read from +# the corefile. This note allows GDB to find the binary for file +# backed mappings even though the binary wasn't loaded by GDB in the +# conventional manner. In order to see the expected failure for this +# case, we rename the binary in order to perform this test. proc test_disasm { core address should_fail } { - global testfile hex + global testfile hex binfile # Restart GDB without loading the binary. with_test_prefix "no binary" { gdb_exit gdb_start + set hide_binfile [standard_output_file "${testfile}.hide"] + if { $should_fail == 1 } { + remote_exec host "mv -f $binfile $hide_binfile" + } + set core_loaded [gdb_core_cmd "$core" "load core"] if { $core_loaded == -1 } { fail "loading $core" @@ -96,6 +107,7 @@ } if { $should_fail == 1 } { + remote_exec host "mv -f $hide_binfile $binfile" gdb_test "x/i \$pc" "=> $hex:\tCannot access memory at address $hex" \ "disassemble function with corefile and without a binary" } else { @@ -225,5 +237,9 @@ } with_test_prefix "loading and testing corefile for non-Private-Shared-Anon-File" { + test_disasm $non_private_shared_anon_file_core $main_addr 0 +} + +with_test_prefix "loading and testing corefile for non-Private-Shared-Anon-File with renamed binary" { test_disasm $non_private_shared_anon_file_core $main_addr 1 } diff -Nru gdb-9.1/gdb/testsuite/gdb.base/corefile2.exp gdb-10.2/gdb/testsuite/gdb.base/corefile2.exp --- gdb-9.1/gdb/testsuite/gdb.base/corefile2.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/corefile2.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,212 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Tests of core file memory accesses when mmap() has been used to +# create a "hole" of zeroes over pre-existing memory regions. See +# coremaker2.c for details. + +# are we on a target board +if ![isnative] then { + return +} + +# Some of these tests will only work on GNU/Linux due to the +# fact that Linux core files includes a section describing +# memory address to file mappings. We'll use set_up_xfail for the +# affected tests. As other targets become supported, the condition +# can be changed accordingly. + +set xfail 0 +if { ![istarget *-linux*] } { + set xfail 1 +} + +standard_testfile coremaker2.c + +if {[build_executable $testfile.exp $testfile $srcfile debug] == -1} { + untested "failed to compile" + return -1 +} + +set corefile [core_find $binfile {}] +if {$corefile == ""} { + return 0 +} + +gdb_start +gdb_reinitialize_dir $srcdir/$subdir +gdb_load ${binfile} + +# Attempt to load the core file. + +gdb_test_multiple "core-file $corefile" "core-file command" { + -re ".* program is being debugged already.*y or n. $" { + # gdb_load may connect us to a gdbserver. + send_gdb "y\n" + exp_continue + } + -re "Core was generated by .*corefile.*\r\n\#0 .*\(\).*\r\n$gdb_prompt $" { + pass "core-file command" + } + -re "Core was generated by .*\r\n\#0 .*\(\).*\r\n$gdb_prompt $" { + pass "core-file command (with bad program name)" + } + -re ".*registers from core file: File in wrong format.* $" { + fail "core-file command (could not read registers from core file)" + } +} + +# Perform the "interesting" tests which check the contents of certain +# memory regions. + +proc do_tests { } { + global xfail + + # Check contents of beginning of buf_rw and buf_ro. + + gdb_test {print/x buf_rw[0]@4} {\{0x6b, 0x6b, 0x6b, 0x6b\}} + gdb_test {print/x buf_ro[0]@4} {\{0xc5, 0xc5, 0xc5, 0xc5\}} + + # Check for correct contents at beginning of mbuf_rw and mbuf_ro. + + gdb_test {print/x mbuf_rw[0]@4} {\{0x0, 0x0, 0x0, 0x0\}} + + if { $xfail } { setup_xfail "*-*-*" } + gdb_test {print/x mbuf_ro[0]@4} {\{0x0, 0x0, 0x0, 0x0\}} + + # Check contents of mbuf_rw and mbuf_ro at the end of these regions. + + gdb_test {print/x mbuf_rw[pagesize-4]@4} {\{0x0, 0x0, 0x0, 0x0\}} + + if { $xfail } { setup_xfail "*-*-*" } + gdb_test {print/x mbuf_ro[pagesize-4]@4} {\{0x0, 0x0, 0x0, 0x0\}} + + # Check contents of mbuf_rw and mbuf_ro, right before the hole, + # overlapping into the beginning of these mmap'd regions. + + gdb_test {print/x mbuf_rw[-3]@6} {\{0x6b, 0x6b, 0x6b, 0x0, 0x0, 0x0\}} + + if { $xfail } { setup_xfail "*-*-*" } + gdb_test {print/x mbuf_ro[-3]@6} {\{0xc5, 0xc5, 0xc5, 0x0, 0x0, 0x0\}} + + # Likewise, at the end of the mbuf_rw and mbuf_ro, with overlap. + + # If this test FAILs, it's probably a genuine bug unrelated to whether + # the core file includes a section describing memory address to file + # mappings or not. (So don't xfail it!) + gdb_test {print/x mbuf_rw[pagesize-3]@6} {\{0x0, 0x0, 0x0, 0x6b, 0x6b, 0x6b\}} + + if { $xfail } { setup_xfail "*-*-*" } + gdb_test {print/x mbuf_ro[pagesize-3]@6} {\{0x0, 0x0, 0x0, 0xc5, 0xc5, 0xc5\}} + + # Check contents of (what should be) buf_rw and buf_ro immediately after + # mbuf_rw and mbuf_ro holes. + + gdb_test {print/x mbuf_rw[pagesize]@4} {\{0x6b, 0x6b, 0x6b, 0x6b\}} + gdb_test {print/x mbuf_ro[pagesize]@4} {\{0xc5, 0xc5, 0xc5, 0xc5\}} + + # Check contents at ends of buf_rw and buf_rw. + + gdb_test {print/x buf_rw[sizeof(buf_rw)-4]@4} {\{0x6b, 0x6b, 0x6b, 0x6b\}} + gdb_test {print/x buf_ro[sizeof(buf_ro)-4]@4} {\{0xc5, 0xc5, 0xc5, 0xc5\}} +} + +# Run tests with kernel-produced core file. + +with_test_prefix "kernel core" { + do_tests +} + +# Verify that "maint print core-file-backed-mappings" exists and does +# not crash GDB. If it produces any output at all, make sure that +# that output at least mentions binfile. + +set test "maint print core-file-backed-mappings" +gdb_test_multiple $test "" { + -re ".*$binfile.*$gdb_prompt $" { + pass $test + } + -re "^$test\[\r\n\]*$gdb_prompt $" { + pass "$test (no output)" + } +} + +# Test again with executable renamed during loading of core file. + +with_test_prefix "renamed binfile" { + # Don't load $binfile in this call to clean_restart. (BFD will + # complain that $binfile has disappeared after the rename if it's + # loaded first.) + clean_restart + + # Rename $binfile so that it won't be found during loading of + # the core file. + set hide_binfile [standard_output_file "${testfile}.hide"] + remote_exec host "mv -f $binfile $hide_binfile" + + # Load core file - check that a warning is printed. + global xfail + if { $xfail } { setup_xfail "*-*-*" } + gdb_test "core-file $corefile" \ + "warning: Can't open file.*during.* note processing.*Core was generated by .*\#0 .*\(\)" \ + "load core file without having first loaded binfile" + + # Restore $binfile and then load it. + remote_exec host "mv -f $hide_binfile $binfile" + gdb_load ${binfile} + + do_tests +} + +# Restart and run to the abort call. + +clean_restart $binfile + +if ![runto_main] then { + fail "can't run to main" + return +} + +gdb_breakpoint [gdb_get_line_number "abort"] +gdb_continue_to_breakpoint "at abort" + +# Do not execute abort call; instead, invoke gcore command to make a +# gdb-produced core file. + +set corefile [standard_output_file gcore.test] +set core_supported [gdb_gcore_cmd "$corefile" "save a corefile"] +if {!$core_supported} { + return +} + +# maint print-core-file-backed-mappings shouldn't produce any output +# when not debugging a core file. + +gdb_test_no_output "maint print core-file-backed-mappings" \ + "maint print core-file-backed-mapping with no core file" + +clean_restart $binfile + +set core_loaded [gdb_core_cmd "$corefile" "re-load generated corefile"] +if { $core_loaded == -1 } { + # No use proceeding from here. + return +} + +# Run tests using gcore-produced core file. + +with_test_prefix "gcore core" { + do_tests +} diff -Nru gdb-9.1/gdb/testsuite/gdb.base/corefile-buildid.c gdb-10.2/gdb/testsuite/gdb.base/corefile-buildid.c --- gdb-9.1/gdb/testsuite/gdb.base/corefile-buildid.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/corefile-buildid.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2019-2020 Free Software Foundation, Inc. +/* Copyright (C) 2019-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/corefile-buildid.exp gdb-10.2/gdb/testsuite/gdb.base/corefile-buildid.exp --- gdb-9.1/gdb/testsuite/gdb.base/corefile-buildid.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/corefile-buildid.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -108,8 +108,40 @@ # FILE. proc check_exec_file {file} { + global gdb_prompt send_log "expecting exec file \"$file\"\n" - gdb_test "info files" "Local exec file:\[\r\n\t\ \]+`[string_to_regexp $file]'.*" + + # Get line with "Local exec file:". + set ok 0 + gdb_test_multiple "info files" "" -lbl { + -re "\r\nLocal exec file:" { + set test_name $gdb_test_name + set ok 1 + } + } + + if { $ok == 0 } { + return + } + + # Get subsequent line with $file. + set ok 0 + gdb_test_multiple "" $test_name -lbl { + -re "\r\n\[\t\ \]+`[string_to_regexp $file]'\[^\r\n\]*" { + set ok 1 + } + } + + if { $ok == 0 } { + return + } + + # Skip till prompt. + gdb_test_multiple "" $test_name -lbl { + -re "\r\n$gdb_prompt $" { + pass $gdb_test_name + } + } } # Test whether gdb can find an exec file from a core file's build-id. diff -Nru gdb-9.1/gdb/testsuite/gdb.base/corefile-buildid-shlib.c gdb-10.2/gdb/testsuite/gdb.base/corefile-buildid-shlib.c --- gdb-9.1/gdb/testsuite/gdb.base/corefile-buildid-shlib.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/corefile-buildid-shlib.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2007-2020 Free Software Foundation, Inc. +/* Copyright (C) 2007-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/corefile-buildid-shlib-shr.c gdb-10.2/gdb/testsuite/gdb.base/corefile-buildid-shlib-shr.c --- gdb-9.1/gdb/testsuite/gdb.base/corefile-buildid-shlib-shr.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/corefile-buildid-shlib-shr.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2019-2020 Free Software Foundation, Inc. + Copyright 2019-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/corefile.exp gdb-10.2/gdb/testsuite/gdb.base/corefile.exp --- gdb-9.1/gdb/testsuite/gdb.base/corefile.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/corefile.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1992-2020 Free Software Foundation, Inc. +# Copyright 1992-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -34,7 +34,10 @@ return -1 } -set corefile [core_find $binfile {coremmap.data}] +# Do not delete coremap.data when calling core_find. This file is +# required for GDB to find mmap'd data in the "accessing read-only +# mmapped data in core file" test. +set corefile [core_find $binfile {}] if {$corefile == ""} { return 0 } @@ -175,6 +178,28 @@ } } +set test "accessing read-only mmapped data in core file" +gdb_test_multiple "x/8bd buf2ro" "$test" { + -re ".*:.*0.*1.*2.*3.*4.*5.*6.*7.*$gdb_prompt $" { + pass "$test" + } + -re "0x\[f\]*:.*Cannot access memory at address 0x\[f\]*.*$gdb_prompt $" { + fail "$test (mapping failed at runtime)" + } + -re "0x.*:.*Cannot access memory at address 0x.*$gdb_prompt $" { + fail "$test (mapping address not found in core file)" + } +} + +# Test ability to read anonymous and, more importantly, unwritten-to +# mmap'd data. + +if { ![istarget *-linux*] } { + setup_xfail "*-*-*" +} +gdb_test "x/wx buf3" "$hex:\[ \t\]+0x00000000" \ + "accessing anonymous, unwritten-to mmap data" + # test reinit_frame_cache gdb_load ${binfile} @@ -299,11 +324,18 @@ # Test warning-free core file load. E.g., a Linux vDSO used to # trigger this warning: # warning: Can't read pathname for load map: Input/output error. +# +# When testing in a docker container using the AUFS storage driver, +# the kernel places host paths in the core file's NT_FILE note. XFAIL +# this case since these paths make no sense in the container. clean_restart ${testfile} set test "core-file warning-free" gdb_test_multiple "core-file $corefile" $test { + -re "warning: Can\'t open file.*\/docker\/aufs\/.*\r\n$gdb_prompt $" { + xfail $test + } -re "warning: .*\r\n.*\r\n$gdb_prompt $" { fail $test } diff -Nru gdb-9.1/gdb/testsuite/gdb.base/coremaker2.c gdb-10.2/gdb/testsuite/gdb.base/coremaker2.c --- gdb-9.1/gdb/testsuite/gdb.base/coremaker2.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/coremaker2.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,154 @@ +/* Copyright 1992-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +/* This test has two large memory areas buf_rw and buf_ro. + + buf_rw is written to by the program while buf_ro is initialized at + compile / load time. Thus, when a core file is created, buf_rw's + memory should reside in the core file, but buf_ro probably won't be. + Instead, the contents of buf_ro are available from the executable. + + Now, for the wrinkle: We create a one page read-only mapping over + both of these areas. This will create a one page "hole" of all + zeros in each area. + + Will GDB be able to correctly read memory from each of the four + (or six, if you count the regions on the other side of each hole) + memory regions? */ + +#include <stdio.h> +#include <sys/types.h> +#include <fcntl.h> +#include <sys/mman.h> +#include <signal.h> +#include <stdlib.h> +#include <unistd.h> +#include <string.h> +#include <errno.h> +#include <inttypes.h> + +/* These are globals so that we can find them easily when debugging + the core file. */ +long pagesize; +uintptr_t addr; +char *mbuf_ro; +char *mbuf_rw; + +/* 256 KiB buffer. */ +char buf_rw[256 * 1024]; + +#define C5_16 \ + 0xc5, 0xc5, 0xc5, 0xc5, \ + 0xc5, 0xc5, 0xc5, 0xc5, \ + 0xc5, 0xc5, 0xc5, 0xc5, \ + 0xc5, 0xc5, 0xc5, 0xc5 + +#define C5_256 \ + C5_16, C5_16, C5_16, C5_16, \ + C5_16, C5_16, C5_16, C5_16, \ + C5_16, C5_16, C5_16, C5_16, \ + C5_16, C5_16, C5_16, C5_16 + +#define C5_1k \ + C5_256, C5_256, C5_256, C5_256 + +#define C5_8k \ + C5_1k, C5_1k, C5_1k, C5_1k, \ + C5_1k, C5_1k, C5_1k, C5_1k + +#define C5_64k \ + C5_8k, C5_8k, C5_8k, C5_8k, \ + C5_8k, C5_8k, C5_8k, C5_8k + +#define C5_256k \ + C5_64k, C5_64k, C5_64k, C5_64k + +/* 256 KiB worth of data. For this test case, we can't allocate a + buffer and then fill it; we want GDB to have to read this data + from the executable; it should NOT find it in the core file. */ + +const char buf_ro[] = { C5_256k }; + +int +main (int argc, char **argv) +{ + int i, bitcount; + +#ifdef _SC_PAGESIZE + pagesize = sysconf (_SC_PAGESIZE); +#else + pagesize = 8192; +#endif + + /* Verify that pagesize is a power of 2. */ + bitcount = 0; + for (i = 0; i < 4 * sizeof (pagesize); i++) + if (pagesize & (1 << i)) + bitcount++; + + if (bitcount != 1) + { + fprintf (stderr, "pagesize is not a power of 2.\n"); + exit (1); + } + + /* Compute an address that should be within buf_ro. Complain if not. */ + addr = ((uintptr_t) buf_ro + pagesize) & ~(pagesize - 1); + + if (addr <= (uintptr_t) buf_ro + || addr >= (uintptr_t) buf_ro + sizeof (buf_ro)) + { + fprintf (stderr, "Unable to compute a suitable address within buf_ro.\n"); + exit (1); + } + + mbuf_ro = mmap ((void *) addr, pagesize, PROT_READ, + MAP_ANONYMOUS | MAP_PRIVATE | MAP_FIXED, -1, 0); + + if (mbuf_ro == MAP_FAILED) + { + fprintf (stderr, "mmap #1 failed: %s.\n", strerror (errno)); + exit (1); + } + + /* Write (and fill) the R/W region. */ + for (i = 0; i < sizeof (buf_rw); i++) + buf_rw[i] = 0x6b; + + /* Compute an mmap address within buf_rw. Complain if it's somewhere + else. */ + addr = ((uintptr_t) buf_rw + pagesize) & ~(pagesize - 1); + + if (addr <= (uintptr_t) buf_rw + || addr >= (uintptr_t) buf_rw + sizeof (buf_rw)) + { + fprintf (stderr, "Unable to compute a suitable address within buf_rw.\n"); + exit (1); + } + + mbuf_rw = mmap ((void *) addr, pagesize, PROT_READ, + MAP_ANONYMOUS | MAP_PRIVATE | MAP_FIXED, -1, 0); + + if (mbuf_rw == MAP_FAILED) + { + fprintf (stderr, "mmap #2 failed: %s.\n", strerror (errno)); + exit (1); + } + + /* With correct ulimit, etc. this should cause a core dump. */ + abort (); +} diff -Nru gdb-9.1/gdb/testsuite/gdb.base/coremaker.c gdb-10.2/gdb/testsuite/gdb.base/coremaker.c --- gdb-9.1/gdb/testsuite/gdb.base/coremaker.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/coremaker.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 1992-2020 Free Software Foundation, Inc. +/* Copyright 1992-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -38,10 +38,18 @@ char *buf1; char *buf2; +char *buf2ro; +char *buf3; int coremaker_data = 1; /* In Data section */ int coremaker_bss; /* In BSS section */ +/* Place a chunk of memory before coremaker_ro to improve the chances + that coremaker_ro will end up on it's own page. See: + + https://sourceware.org/pipermail/gdb-patches/2020-May/168168.html + https://sourceware.org/pipermail/gdb-patches/2020-May/168170.html */ +const unsigned char filler_ro[MAPSIZE] = {1, 2, 3, 4, 5, 6, 7, 8}; const int coremaker_ro = 201; /* In Read-Only Data section */ /* Note that if the mapping fails for any reason, we set buf2 @@ -77,7 +85,16 @@ /* Now map the file into our address space as buf2 */ buf2 = (char *) mmap (0, MAPSIZE, PROT_READ | PROT_WRITE, MAP_PRIVATE, fd, 0); - if (buf2 == (char *) -1) + if (buf2 == (char *) MAP_FAILED) + { + perror ("mmap failed"); + return; + } + + /* Map in another copy, read-only. We won't write to this copy so it + will likely not end up in the core file. */ + buf2ro = (char *) mmap (0, MAPSIZE, PROT_READ, MAP_PRIVATE, fd, 0); + if (buf2ro == (char *) -1) { perror ("mmap failed"); return; @@ -89,15 +106,24 @@ for (j = 0; j < MAPSIZE; ++j) { - if (buf1[j] != buf2[j]) + if (buf1[j] != buf2[j] || buf1[j] != buf2ro[j]) { fprintf (stderr, "mapped data is incorrect"); - buf2 = (char *) -1; + buf2 = buf2ro = (char *) -1; return; } } /* Touch buf2 so kernel writes it out into 'core'. */ buf2[0] = buf1[0]; + + /* Create yet another region which is allocated, but not written to. */ + buf3 = mmap (NULL, MAPSIZE, PROT_READ | PROT_WRITE, + MAP_ANONYMOUS | MAP_PRIVATE, -1, 0); + if (buf3 == (char *) -1) + { + perror ("mmap failed"); + return; + } } void diff -Nru gdb-9.1/gdb/testsuite/gdb.base/ctf-constvars.c gdb-10.2/gdb/testsuite/gdb.base/ctf-constvars.c --- gdb-9.1/gdb/testsuite/gdb.base/ctf-constvars.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/ctf-constvars.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This test program is part of GDB, the GNU debugger. - Copyright 2019-2020 Free Software Foundation, Inc. + Copyright 2019-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/ctf-constvars.exp gdb-10.2/gdb/testsuite/gdb.base/ctf-constvars.exp --- gdb-9.1/gdb/testsuite/gdb.base/ctf-constvars.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/ctf-constvars.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -25,7 +25,7 @@ # with mixed types. if [skip_ctf_tests] { - unsupported "no ctf debug format support" + unsupported "no CTF debug format support, or CTF disabled in GDB" return 0 } diff -Nru gdb-9.1/gdb/testsuite/gdb.base/ctf-ptype.c gdb-10.2/gdb/testsuite/gdb.base/ctf-ptype.c --- gdb-9.1/gdb/testsuite/gdb.base/ctf-ptype.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/ctf-ptype.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This test program is part of GDB, the GNU debugger. - Copyright 2019-2020 Free Software Foundation, Inc. + Copyright 2019-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/ctf-ptype.exp gdb-10.2/gdb/testsuite/gdb.base/ctf-ptype.exp --- gdb-9.1/gdb/testsuite/gdb.base/ctf-ptype.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/ctf-ptype.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -16,7 +16,7 @@ # This file is a subset of ptype.exp written by Rob Savoye. (rob@cygnus.com) if [skip_ctf_tests] { - unsupported "no ctf debug format support" + unsupported "no CTF debug format support, or CTF disabled in GDB" return 0 } @@ -24,6 +24,7 @@ # Using `-gt` generates full-fledged CTF debug information. set opts "additional_flags=-gt" + if { [prepare_for_testing "failed to prepare" ${testfile} \ [list $srcfile] [list $opts nowarnings]] } { return 0 diff -Nru gdb-9.1/gdb/testsuite/gdb.base/ctxobj.exp gdb-10.2/gdb/testsuite/gdb.base/ctxobj.exp --- gdb-9.1/gdb/testsuite/gdb.base/ctxobj.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/ctxobj.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/ctxobj-f.c gdb-10.2/gdb/testsuite/gdb.base/ctxobj-f.c --- gdb-9.1/gdb/testsuite/gdb.base/ctxobj-f.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/ctxobj-f.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/ctxobj-m.c gdb-10.2/gdb/testsuite/gdb.base/ctxobj-m.c --- gdb-9.1/gdb/testsuite/gdb.base/ctxobj-m.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/ctxobj-m.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/ctxobj-v.c gdb-10.2/gdb/testsuite/gdb.base/ctxobj-v.c --- gdb-9.1/gdb/testsuite/gdb.base/ctxobj-v.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/ctxobj-v.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/cursal.c gdb-10.2/gdb/testsuite/gdb.base/cursal.c --- gdb-9.1/gdb/testsuite/gdb.base/cursal.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/cursal.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2004-2020 Free Software Foundation, Inc. +/* Copyright 2004-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.base/cursal.exp gdb-10.2/gdb/testsuite/gdb.base/cursal.exp --- gdb-9.1/gdb/testsuite/gdb.base/cursal.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/cursal.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2004-2020 Free Software Foundation, Inc. +# Copyright 2004-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/cvexpr.c gdb-10.2/gdb/testsuite/gdb.base/cvexpr.c --- gdb-9.1/gdb/testsuite/gdb.base/cvexpr.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/cvexpr.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2001-2020 Free Software Foundation, Inc. +/* Copyright (C) 2001-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/cvexpr.exp gdb-10.2/gdb/testsuite/gdb.base/cvexpr.exp --- gdb-9.1/gdb/testsuite/gdb.base/cvexpr.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/cvexpr.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -509,3 +509,14 @@ do_test $prefix $opts } } + +# These tests don't rely on the debug format. +gdb_test "ptype _Atomic int" "type = _Atomic int" +gdb_test "ptype int * restrict" "type = int \\* restrict" + +# C++ does not have "restrict". +gdb_test_no_output "set lang c++" +gdb_test "ptype int * restrict" "A syntax error in expression.*" + +# There is a GCC extension for __restrict__, though. +gdb_test "ptype int * __restrict__" "type = int \\* __restrict__" diff -Nru gdb-9.1/gdb/testsuite/gdb.base/d10vovly.c gdb-10.2/gdb/testsuite/gdb.base/d10vovly.c --- gdb-9.1/gdb/testsuite/gdb.base/d10vovly.c 2019-02-23 12:20:11.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/d10vovly.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,225 +0,0 @@ - -/* - * Ovlymgr.c -- Runtime Overlay Manager for the GDB testsuite. - */ - -#include "ovlymgr.h" - -/* Local functions and data: */ - -extern unsigned long _ovly_table[][4]; -extern unsigned long _novlys __attribute__ ((section (".data"))); -enum ovly_index { VMA, SIZE, LMA, MAPPED}; - -static void ovly_copy (unsigned long dst, unsigned long src, long size); - -/* Flush the data and instruction caches at address START for SIZE bytes. - Support for each new port must be added here. */ -/* FIXME: Might be better to have a standard libgloss function that - ports provide that we can then use. Use libgloss instead of newlib - since libgloss is the one intended to handle low level system issues. - I would suggest something like _flush_cache to avoid the user's namespace - but not be completely obscure as other things may need this facility. */ - -static void -FlushCache (void) -{ -#ifdef __M32R__ - volatile char *mspr = (char *) 0xfffffff7; - *mspr = 1; -#endif -} - -/* OverlayLoad: - * Copy the overlay into its runtime region, - * and mark the overlay as "mapped". - */ - -bool -OverlayLoad (unsigned long ovlyno) -{ - unsigned long i; - - if (ovlyno < 0 || ovlyno >= _novlys) - exit (-1); /* fail, bad ovly number */ - - if (_ovly_table[ovlyno][MAPPED]) - return TRUE; /* this overlay already mapped -- nothing to do! */ - - for (i = 0; i < _novlys; i++) - if (i == ovlyno) - _ovly_table[i][MAPPED] = 1; /* this one now mapped */ - else if (_ovly_table[i][VMA] == _ovly_table[ovlyno][VMA]) - _ovly_table[i][MAPPED] = 0; /* this one now un-mapped */ - - ovly_copy (_ovly_table[ovlyno][VMA], - _ovly_table[ovlyno][LMA], - _ovly_table[ovlyno][SIZE]); - - FlushCache (); - - return TRUE; -} - -/* OverlayUnload: - * Copy the overlay back into its "load" region. - * Does NOT mark overlay as "unmapped", therefore may be called - * more than once for the same mapped overlay. - */ - -bool -OverlayUnload (unsigned long ovlyno) -{ - if (ovlyno < 0 || ovlyno >= _novlys) - exit (-1); /* fail, bad ovly number */ - - if (!_ovly_table[ovlyno][MAPPED]) - exit (-1); /* error, can't copy out a segment that's not "in" */ - - ovly_copy (_ovly_table[ovlyno][LMA], - _ovly_table[ovlyno][VMA], - _ovly_table[ovlyno][SIZE]); - - return TRUE; -} - -#ifdef __D10V__ -#define IMAP0 (*(short *)(0xff00)) -#define IMAP1 (*(short *)(0xff02)) -#define DMAP (*(short *)(0xff04)) - -static void -D10VTranslate (unsigned long logical, - short *dmap, - unsigned long **addr) -{ - unsigned long physical; - unsigned long seg; - unsigned long off; - - /* to access data, we use the following mapping - 0x00xxxxxx: Logical data address segment (DMAP translated memory) - 0x01xxxxxx: Logical instruction address segment (IMAP translated memory) - 0x10xxxxxx: Physical data memory segment (On-chip data memory) - 0x11xxxxxx: Physical instruction memory segment (On-chip insn memory) - 0x12xxxxxx: Phisical unified memory segment (Unified memory) - */ - - /* Addresses must be correctly aligned */ - if (logical & (sizeof (**addr) - 1)) - exit (-1); - - /* If the address is in one of the two logical address spaces, it is - first translated into a physical address */ - seg = (logical >> 24); - off = (logical & 0xffffffL); - switch (seg) - { - case 0x00: /* in logical data address segment */ - if (off <= 0x7fffL) - physical = (0x10L << 24) + off; - else - /* Logical address out side of on-chip segment, not - supported */ - exit (-1); - break; - case 0x01: /* in logical instruction address segment */ - { - short map; - if (off <= 0x1ffffL) - map = IMAP0; - else if (off <= 0x3ffffL) - map = IMAP1; - else - /* Logical address outside of IMAP[01] segment, not - supported */ - exit (-1); - if (map & 0x1000L) - { - /* Instruction memory */ - physical = (0x11L << 24) | off; - } - else - { - /* Unified memory */ - physical = ((map & 0x7fL) << 17) + (off & 0x1ffffL); - if (physical > 0xffffffL) - /* Address outside of unified address segment */ - exit (-1); - physical |= (0x12L << 24); - } - break; - } - case 0x10: - case 0x11: - case 0x12: - physical = logical; - break; - default: - exit (-1); /* error */ - } - - seg = (physical >> 24); - off = (physical & 0xffffffL); - switch (seg) - { - case 0x10: /* dst is a 15 bit offset into the on-chip memory */ - *dmap = 0; - *addr = (long *) (0x0000 + ((short)off & 0x7fff)); - break; - case 0x11: /* dst is an 18-bit offset into the on-chip - instruction memory */ - *dmap = 0x1000L | ((off & 0x3ffffL) >> 14); - *addr = (long *) (0x8000 + ((short)off & 0x3fff)); - break; - case 0x12: /* dst is a 24-bit offset into unified memory */ - *dmap = off >> 14; - *addr = (long *) (0x8000 + ((short)off & 0x3fff)); - break; - default: - exit (-1); /* error */ - } -} -#endif /* __D10V__ */ - -static void -ovly_copy (unsigned long dst, unsigned long src, long size) -{ -#ifdef __M32R__ - memcpy ((void *) dst, (void *) src, size); - return; -#endif /* M32R */ - -#ifdef __D10V__ - unsigned long *s, *d, tmp; - short dmap_src, dmap_dst; - short dmap_save; - - /* all section sizes should by multiples of 4 bytes */ - dmap_save = DMAP; - - D10VTranslate (src, &dmap_src, &s); - D10VTranslate (dst, &dmap_dst, &d); - - while (size > 0) - { - /* NB: Transfer 4 byte (long) quantites, problems occure - when only two bytes are transfered */ - DMAP = dmap_src; - tmp = *s; - DMAP = dmap_dst; - *d = tmp; - d++; - s++; - size -= sizeof (tmp); - src += sizeof (tmp); - dst += sizeof (tmp); - if ((src & 0x3fff) == 0) - D10VTranslate (src, &dmap_src, &s); - if ((dst & 0x3fff) == 0) - D10VTranslate (dst, &dmap_dst, &d); - } - DMAP = dmap_save; -#endif /* D10V */ -} - diff -Nru gdb-9.1/gdb/testsuite/gdb.base/dbx.exp gdb-10.2/gdb/testsuite/gdb.base/dbx.exp --- gdb-9.1/gdb/testsuite/gdb.base/dbx.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/dbx.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1998-2020 Free Software Foundation, Inc. +# Copyright 1998-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -26,7 +26,6 @@ # start gdb -- start gdb running, default procedure # proc dbx_gdb_start { } { - global verbose global GDB global INTERNAL_GDBFLAGS GDBFLAGS global prompt @@ -148,12 +147,8 @@ # right sequence of events, allowing gdb_load to do its normal thing? This way # remotes and simulators will work, too. # -# [drow 2002-03-30]: We can restore the old gdb_file_cmd afterwards, though. -set old_gdb_file_cmd_args [info args gdb_file_cmd] -set old_gdb_file_cmd_body [info body gdb_file_cmd] -proc gdb_file_cmd {arg} { - global verbose +proc local_gdb_file_cmd {arg} { global loadpath global loadfile global GDB @@ -288,24 +283,24 @@ # Start with a fresh gdb. gdb_exit -global GDBFLAGS -set saved_gdbflags $GDBFLAGS -set GDBFLAGS "$GDBFLAGS --dbx" -gdb_start -dbx_reinitialize_dir $srcdir/$subdir -gdb_load ${binfile} - -test_breakpoints -test_assign -test_whereis -gdb_test "file average.c:1" "1\[ \t\]+/. This is a sample program.*" -test_func +with_override gdb_file_cmd local_gdb_file_cmd { + save_vars GDBFLAGS { + set GDBFLAGS "$GDBFLAGS --dbx" + + gdb_start + dbx_reinitialize_dir $srcdir/$subdir + gdb_load ${binfile} + + test_breakpoints + test_assign + test_whereis + gdb_test "file average.c:1" "1\[ \t\]+/. This is a sample program.*" + test_func -#exit and cleanup -gdb_exit - -set GDBFLAGS $saved_gdbflags -eval proc gdb_file_cmd {$old_gdb_file_cmd_args} {$old_gdb_file_cmd_body} + #exit and cleanup + gdb_exit + } +} return 0 diff -Nru gdb-9.1/gdb/testsuite/gdb.base/dcache-line-read-error.c gdb-10.2/gdb/testsuite/gdb.base/dcache-line-read-error.c --- gdb-9.1/gdb/testsuite/gdb.base/dcache-line-read-error.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/dcache-line-read-error.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/dcache-line-read-error.exp gdb-10.2/gdb/testsuite/gdb.base/dcache-line-read-error.exp --- gdb-9.1/gdb/testsuite/gdb.base/dcache-line-read-error.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/dcache-line-read-error.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/debug-expr.exp gdb-10.2/gdb/testsuite/gdb.base/debug-expr.exp --- gdb-9.1/gdb/testsuite/gdb.base/debug-expr.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/debug-expr.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/decl-before-def-decl.c gdb-10.2/gdb/testsuite/gdb.base/decl-before-def-decl.c --- gdb-9.1/gdb/testsuite/gdb.base/decl-before-def-decl.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/decl-before-def-decl.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,25 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +extern int a[]; + +int +main (void) +{ + a[0] = 1; + return 0; +} diff -Nru gdb-9.1/gdb/testsuite/gdb.base/decl-before-def-def.c gdb-10.2/gdb/testsuite/gdb.base/decl-before-def-def.c --- gdb-9.1/gdb/testsuite/gdb.base/decl-before-def-def.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/decl-before-def-def.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,18 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +int a[2] = { 1, 2 }; diff -Nru gdb-9.1/gdb/testsuite/gdb.base/decl-before-def.exp gdb-10.2/gdb/testsuite/gdb.base/decl-before-def.exp --- gdb-9.1/gdb/testsuite/gdb.base/decl-before-def.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/decl-before-def.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,33 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +standard_testfile decl-before-def-decl.c decl-before-def-def.c +set sources [list $srcfile $srcfile2] + +if {[prepare_for_testing "failed to prepare" $testfile $sources]} { + return -1 +} + +# This is required due to PR25764. +gdb_test "maint expand-symtabs" + +gdb_test "p a" { = \{1, 2\}} + +if ![runto_main] then { + fail "can't run to main" + return 0 +} + +gdb_test "p a" { = \{1, 2\}} diff -Nru gdb-9.1/gdb/testsuite/gdb.base/default-args.c gdb-10.2/gdb/testsuite/gdb.base/default-args.c --- gdb-9.1/gdb/testsuite/gdb.base/default-args.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/default-args.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,39 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2019-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +struct S +{ + int a; + int b; + int c; +}; + +struct S g_s = {1, 2, 3}; + +static void +inc (void) +{ + g_s.a++;; +} + +int +main (void) +{ + inc (); + + return 0; +} diff -Nru gdb-9.1/gdb/testsuite/gdb.base/default-args.exp gdb-10.2/gdb/testsuite/gdb.base/default-args.exp --- gdb-9.1/gdb/testsuite/gdb.base/default-args.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/default-args.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,123 @@ +# This testcase is part of GDB, the GNU debugger. + +# Copyright 2019-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Test the "default-args" arguments and completion of alias command. + +load_lib completion-support.exp + +standard_testfile .c + +if {[build_executable "failed to prepare" $testfile $srcfile debug]} { + return -1 +} + +clean_restart $binfile + +# Basic/core tests using user-visible commands. +with_test_prefix "basics" { + # Define an alias to pretty print something. + gdb_test "print g_s" " = {a = 1, b = 2, c = 3}" "simple print" + gdb_test_no_output "alias PP = print -pretty --" "alias PP" + gdb_test "help PP" "print, PP, inspect, p\r\n alias PP = print -pretty --\r\n.*" + gdb_test "PP g_s" \ + [multi_line \ + " = {" \ + " a = 1," \ + " b = 2," \ + " c = 3" \ + "}"] + + # Define an alias of frame apply all with some default args. + gdb_test_no_output "alias frame apply tout = frame apply all -past-entry -past-main" \ + "alias frame apply tout" + gdb_test "help frame apply tout" \ + "frame apply all, frame apply tout\r\n alias frame apply tout = frame apply all -past-entry -past-main\r\n.*" + + # Show all aliases. + gdb_test "help aliases" \ + [multi_line \ + "User-defined aliases of other commands." \ + "" \ + "List of commands:" \ + "" \ + "PP -- Print value of expression EXP." \ + " alias PP = print -pretty --" \ + "frame apply tout -- Apply a command to all frames." \ + " alias frame apply tout = frame apply all -past-entry -past-main" \ + ".*" ] \ + "help aliases" +} + +# Check errors. +with_test_prefix "errors" { + # Try an unknown root setting. + gdb_test "alias wrong = xxxx yyyy -someoption" \ + "Undefined command: \"xxxx\". Try \"help\"\\." + + # Try ambiguous command. + gdb_test "alias wrong = a" \ + "Ambiguous command \"a\":.*" "ambiguous a" + gdb_test "alias wrong = frame a" \ + "Ambiguous frame command \"a\":.*" "ambiguous frame a" +} + + +# Check completion. +with_test_prefix "completion" { + test_gdb_complete_unique \ + "alias set pri" \ + "alias set print" + + test_gdb_complete_unique \ + "alias set print items = set pri" \ + "alias set print items = set print" + + test_gdb_complete_unique \ + "alias set print items = set print ele" \ + "alias set print items = set print elements" + + test_gdb_complete_unique \ + "alias btfu = backt" \ + "alias btfu = backtrace" + + test_gdb_complete_unique \ + "alias btfu = backtrace -fu" \ + "alias btfu = backtrace -full" + + test_gdb_complete_unique \ + "alias btfu = backtrace -full -past-e" \ + "alias btfu = backtrace -full -past-entry" + + gdb_test_no_output "alias btfu = backtrace -full -past-entry" \ + "alias btfu" + +} + +# Check alias of alias. +with_test_prefix "alias_of_alias" { + # Verify we can alias an alias that has no default args. + # We allow an alias of an alias, to be backward compatible with + # GDB 9.1 . + gdb_test_no_output "alias aaa = backtrace" + gdb_test_no_output "alias bbb = backtrace" + + # Verify that we cannot define an alias of an alias that has default args. + gdb_test_no_output "alias ccc = backtrace -full" + gdb_test "alias ddd = ccc" \ + "Cannot define an alias of an alias that has default args" + +} diff -Nru gdb-9.1/gdb/testsuite/gdb.base/default.exp gdb-10.2/gdb/testsuite/gdb.base/default.exp --- gdb-9.1/gdb/testsuite/gdb.base/default.exp 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/default.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1988-2020 Free Software Foundation, Inc. +# Copyright 1988-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -28,8 +28,8 @@ gdb_test "add-symbol-file" "add-symbol-file takes a file name and an address" # test append -gdb_test "append" "\"append\" must be followed by a subcommand\.\[\r\n\]+List of append subcommands:.*" -gdb_test "append binary" "\"append binary\" must be followed by a subcommand\.\[\r\n\]+List of append binary subcommands:.*" +gdb_test "append" "List of append subcommands:.*" +gdb_test "append binary" "List of append binary subcommands:.*" gdb_test "append memory" "Missing filename\." gdb_test "append value" "Missing filename\." gdb_test "append binary memory" "Missing filename\." @@ -78,7 +78,7 @@ #test catch -gdb_test "catch" "Catch requires an event name..*" +gdb_test "catch" "List of catch subcommands:(\[^\r\n\]*\[\r\n\])+Type \"help catch\" followed by catch subcommand name for full documentation.(\[^\r\n\]*\[\r\n\])+Command name abbreviations are allowed if unambiguous." #test cd gdb_test "cd" "Working directory \[^\r\n\]*\(\r\n \\(canonically \[^\r\n\]*\\)\)?\\." @@ -147,12 +147,12 @@ #test down-silently gdb_test "down-silently" "No stack." # test dump -gdb_test "dump" "\"dump\" must be followed by a subcommand\.\[\r\n\]+List of dump subcommands:.*" -gdb_test "dump binary" "\"dump binary\" must be followed by a subcommand\.\[\r\n\]+List of dump binary subcommands:.*" -gdb_test "dump ihex" "\"dump ihex\" must be followed by a subcommand\.\[\r\n\]+List of dump ihex subcommands:.*" +gdb_test "dump" "List of dump subcommands:.*" +gdb_test "dump binary" "List of dump binary subcommands:.*" +gdb_test "dump ihex" "List of dump ihex subcommands:.*" gdb_test "dump memory" "Missing filename\." -gdb_test "dump srec" "\"dump srec\" must be followed by a subcommand\.\[\r\n\]+List of dump srec subcommands:.*" -gdb_test "dump tekhex" "\"dump tekhex\" must be followed by a subcommand\.\[\r\n\]+List of dump tekhex subcommands:.*" +gdb_test "dump srec" "List of dump srec subcommands:.*" +gdb_test "dump tekhex" "List of dump tekhex subcommands:.*" gdb_test "dump value" "Missing filename\." gdb_test "dump binary memory" "Missing filename\." gdb_test "dump binary value" "Missing filename\." @@ -247,15 +247,15 @@ } #test help "h" abbreviation -gdb_test "h" "List of classes of commands:(\[^\r\n\]*\[\r\n\])+aliases -- Aliases of other commands(\[^\r\n\]*\[\r\n\])+breakpoints -- Making program stop at certain points(\[^\r\n\]*\[\r\n\])+data -- Examining data(\[^\r\n\]*\[\r\n\])+files -- Specifying and examining files(\[^\r\n\]*\[\r\n\])+obscure -- Obscure features(\[^\r\n\]*\[\r\n\])+running -- Running the program(\[^\r\n\]*\[\r\n\])+stack -- Examining the stack(\[^\r\n\]*\[\r\n\])+status -- Status inquiries(\[^\r\n\]*\[\r\n\])+support -- Support facilities(\[^\r\n\]*\[\r\n\])+user-defined -- User-defined commands(\[^\r\n\]*\[\r\n\])+Type \"help\" followed by a class name for a list of commands in that class.(\[^\r\n\]*\[\r\n\])+Type \"help\" followed by command name for full documentation.(\[^\r\n\]*\[\r\n\])+Command name abbreviations are allowed if unambiguous." "help \"h\" abbreviation" +gdb_test "h" "List of classes of commands:(\[^\r\n\]*\[\r\n\])+aliases -- User-defined aliases of other commands(\[^\r\n\]*\[\r\n\])+breakpoints -- Making program stop at certain points(\[^\r\n\]*\[\r\n\])+data -- Examining data(\[^\r\n\]*\[\r\n\])+files -- Specifying and examining files(\[^\r\n\]*\[\r\n\])+obscure -- Obscure features(\[^\r\n\]*\[\r\n\])+running -- Running the program(\[^\r\n\]*\[\r\n\])+stack -- Examining the stack(\[^\r\n\]*\[\r\n\])+status -- Status inquiries(\[^\r\n\]*\[\r\n\])+support -- Support facilities(\[^\r\n\]*\[\r\n\])+user-defined -- User-defined commands(\[^\r\n\]*\[\r\n\])+Type \"help\" followed by a class name for a list of commands in that class.(\[^\r\n\]*\[\r\n\])+Type \"help\" followed by command name for full documentation.(\[^\r\n\]*\[\r\n\])+Command name abbreviations are allowed if unambiguous." "help \"h\" abbreviation" #test help -gdb_test "help" "List of classes of commands:(\[^\r\n\]*\[\r\n\])+aliases -- Aliases of other commands(\[^\r\n\]*\[\r\n\])+breakpoints -- Making program stop at certain points(\[^\r\n\]*\[\r\n\])+data -- Examining data(\[^\r\n\]*\[\r\n\])+files -- Specifying and examining files(\[^\r\n\]*\[\r\n\])+obscure -- Obscure features(\[^\r\n\]*\[\r\n\])+running -- Running the program(\[^\r\n\]*\[\r\n\])+stack -- Examining the stack(\[^\r\n\]*\[\r\n\])+status -- Status inquiries(\[^\r\n\]*\[\r\n\])+support -- Support facilities(\[^\r\n\]*\[\r\n\])+user-defined -- User-defined commands(\[^\r\n\]*\[\r\n\])+Type \"help\" followed by a class name for a list of commands in that class.(\[^\r\n\]*\[\r\n\])+Type \"help\" followed by command name for full documentation.(\[^\r\n\]*\[\r\n\])+Command name abbreviations are allowed if unambiguous." +gdb_test "help" "List of classes of commands:(\[^\r\n\]*\[\r\n\])+aliases -- User-defined aliases of other commands(\[^\r\n\]*\[\r\n\])+breakpoints -- Making program stop at certain points(\[^\r\n\]*\[\r\n\])+data -- Examining data(\[^\r\n\]*\[\r\n\])+files -- Specifying and examining files(\[^\r\n\]*\[\r\n\])+obscure -- Obscure features(\[^\r\n\]*\[\r\n\])+running -- Running the program(\[^\r\n\]*\[\r\n\])+stack -- Examining the stack(\[^\r\n\]*\[\r\n\])+status -- Status inquiries(\[^\r\n\]*\[\r\n\])+support -- Support facilities(\[^\r\n\]*\[\r\n\])+user-defined -- User-defined commands(\[^\r\n\]*\[\r\n\])+Type \"help\" followed by a class name for a list of commands in that class.(\[^\r\n\]*\[\r\n\])+Type \"help\" followed by command name for full documentation.(\[^\r\n\]*\[\r\n\])+Command name abbreviations are allowed if unambiguous." #test handle gdb_test "handle" "Argument required .signal to handle.*" #test info "i" abbreviation -gdb_test "i" "\"info\" must be followed by the name of an info command.(\[^\r\n\]*\[\r\n\])+List of info subcommands:(\[^\r\n\]*\[\r\n\])+Type \"help info\" followed by info subcommand name for full documentation.(\[^\r\n\]*\[\r\n\])+Command name abbreviations are allowed if unambiguous." "info \"i\" abbreviation" +gdb_test "i" "List of info subcommands:(\[^\r\n\]*\[\r\n\])+Type \"help info\" followed by info subcommand name for full documentation.(\[^\r\n\]*\[\r\n\])+Command name abbreviations are allowed if unambiguous." "info \"i\" abbreviation" #test info -gdb_test "info" "\"info\" must be followed by the name of an info command.(\[^\r\n\]*\[\r\n\])+List of info subcommands:(\[^\r\n\]*\[\r\n\])+Type \"help info\" followed by info subcommand name for full documentation.(\[^\r\n\]*\[\r\n\])+Command name abbreviations are allowed if unambiguous." +gdb_test "info" "List of info subcommands:(\[^\r\n\]*\[\r\n\])+Type \"help info\" followed by info subcommand name for full documentation.(\[^\r\n\]*\[\r\n\])+Command name abbreviations are allowed if unambiguous." #test ignore gdb_test "ignore" "Argument required .a breakpoint number.*" #test info address @@ -378,7 +378,7 @@ gdb_test "output" "Argument required .expression to compute.*" #test overlay -gdb_test "overlay" "\"overlay\" must be followed by the name of .*" +gdb_test "overlay" "List of overlay subcommands:.*" #test a non-existant overlay subcommand gdb_test "overlay on" "Undefined overlay command.* Try \"help overlay\"." gdb_test_no_output "overlay manual" "overlay manual #1" @@ -475,7 +475,7 @@ # Test set check abbreviations foreach x {"c" "ch" "check"} { - gdb_test "set $x" "\"set check\" must be followed by the name of a check subcommand.(\[^\r\n\]*\[\r\n\])+List of set check subcommands:(\[^\r\n\]*\[\r\n\])+set check range -- Set range checking(\[^\r\n\]*\[\r\n\])+set check type -- Set strict type checking(\[^\r\n\]*\[\r\n\])+Type \"help set check\" followed by set check subcommand name for full documentation.(\[^\r\n\]*\[\r\n\])+Command name abbreviations are allowed if unambiguous." \ + gdb_test "set $x" "List of set check subcommands:(\[^\r\n\]*\[\r\n\])+set check range -- Set range checking(\[^\r\n\]*\[\r\n\])+set check type -- Set strict type checking(\[^\r\n\]*\[\r\n\])+Type \"help set check\" followed by set check subcommand name for full documentation.(\[^\r\n\]*\[\r\n\])+Command name abbreviations are allowed if unambiguous." \ "set check \"$x\" abbreviation" } @@ -497,8 +497,6 @@ gdb_test "set height" "Argument required .integer to set it to.*" #test set history expansion gdb_test_no_output "set history expansion" "set history expansion" -#test set history filename -gdb_test "set history filename" "Argument required .filename to set it to.*" # Make sure the history ends up in the right place. gdb_test_no_output "set history filename [standard_output_file .gdb_history]" \ "set the history filename" @@ -507,17 +505,17 @@ #test set history size gdb_test "set history size" "Argument required .integer to set it to.*" #test set history -gdb_test "set history" "\"set history\" must be followed by the name of a history subcommand.(\[^\r\n\]*\[\r\n\])+List of set history subcommands:(\[^\r\n\]*\[\r\n\])+set history expansion -- Set history expansion on command input(\[^\r\n\]*\[\r\n\])+set history filename -- Set the filename in which to record the command history(\[^\r\n\]*\[\r\n\])+set history save -- Set saving of the history record on exit(\[^\r\n\]*\[\r\n\])+set history size -- Set the size of the command history(\[^\r\n\]*\[\r\n\])+Type \"help set history\" followed by set history subcommand name for full documentation.(\[^\r\n\]*\[\r\n\])+Command name abbreviations are allowed if unambiguous." +gdb_test "set history" "List of set history subcommands:(\[^\r\n\]*\[\r\n\])+set history expansion -- Set history expansion on command input(\[^\r\n\]*\[\r\n\])+set history filename -- Set the filename in which to record the command history(\[^\r\n\]*\[\r\n\])+set history save -- Set saving of the history record on exit(\[^\r\n\]*\[\r\n\])+set history size -- Set the size of the command history(\[^\r\n\]*\[\r\n\])+Type \"help set history\" followed by set history subcommand name for full documentation.(\[^\r\n\]*\[\r\n\])+Command name abbreviations are allowed if unambiguous." #test set language gdb_test "set language" "Requires an argument. Valid arguments are auto, local, unknown, ada, asm, c, c.., d, fortran, go, minimal, modula-2, objective-c, opencl, pascal, rust." #test set listsize gdb_test "set listsize" "Argument required .integer to set it to.*" #test set print "p" abbreviation -gdb_test "set p" "\"set print\" must be followed by the name of a print subcommand.(\[^\r\n\]*\[\r\n\])+List of set print subcommands:(\[^\r\n\]*\[\r\n\])+Type \"help set print\" followed by set print subcommand name for full documentation.(\[^\r\n\]*\[\r\n\])+Command name abbreviations are allowed if unambiguous." "set print \"p\" abbreviation" +gdb_test "set p" "List of set print subcommands:(\[^\r\n\]*\[\r\n\])+Type \"help set print\" followed by set print subcommand name for full documentation.(\[^\r\n\]*\[\r\n\])+Command name abbreviations are allowed if unambiguous." "set print \"p\" abbreviation" #test set print "pr" abbreviation -gdb_test "set pr" "\"set print\" must be followed by the name of a print subcommand.(\[^\r\n\]*\[\r\n\])+List of set print subcommands:(\[^\r\n\]*\[\r\n\])+Type \"help set print\" followed by set print subcommand name for full documentation.(\[^\r\n\]*\[\r\n\])+Command name abbreviations are allowed if unambiguous." "set print \"pr\" abbreviation" +gdb_test "set pr" "List of set print subcommands:(\[^\r\n\]*\[\r\n\])+Type \"help set print\" followed by set print subcommand name for full documentation.(\[^\r\n\]*\[\r\n\])+Command name abbreviations are allowed if unambiguous." "set print \"pr\" abbreviation" #test set print -gdb_test "set print" "\"set print\" must be followed by the name of a print subcommand.(\[^\r\n\]*\[\r\n\])+List of set print subcommands:(\[^\r\n\]*\[\r\n\])+Type \"help set print\" followed by set print subcommand name for full documentation.(\[^\r\n\]*\[\r\n\])+Command name abbreviations are allowed if unambiguous." +gdb_test "set print" "List of set print subcommands:(\[^\r\n\]*\[\r\n\])+Type \"help set print\" followed by set print subcommand name for full documentation.(\[^\r\n\]*\[\r\n\])+Command name abbreviations are allowed if unambiguous." #test set print address gdb_test_no_output "set print address" "set print address" #test set print array @@ -561,7 +559,7 @@ # test show check abbreviations foreach x {"c" "ch" "check"} { - gdb_test "show $x" "range: *Range checking is \"auto; currently off\".(\[^\r\n\]*\[\r\n\])+type: *Strict type checking is on\..*" \ + gdb_test "show $x" "check range: *Range checking is \"auto; currently off\".(\[^\r\n\]*\[\r\n\])+check type: *Strict type checking is on\..*" \ "show check \"$x\" abbreviation" } @@ -608,8 +606,8 @@ {$_gdb_maint_setting = <internal function _gdb_maint_setting>} \ {$_gdb_setting_str = <internal function _gdb_setting_str>} \ {$_gdb_setting = <internal function _gdb_setting>} \ - {$_gdb_major = 9} \ - {$_gdb_minor = 1} \ + {$_gdb_major = 10} \ + {$_gdb_minor = 2} \ {$_shell_exitsignal = void} \ {$_shell_exitcode = 0} \ } @@ -647,7 +645,7 @@ #test show history size gdb_test "show history size" "The size of the command history is.*" #test show history -gdb_test "show history" "expansion: *History expansion on command input is o(\[^\r\n\]*\[\r\n\])+filename: *The filename in which to record the command history is.*.gdb_history(\[^\r\n\]*\[\r\n\])+save: *Saving of the history record on exit is o(\[^\r\n\]*\[\r\n\])+size: * The size of the command history is.*" +gdb_test "show history" "history expansion: *History expansion on command input is o(\[^\r\n\]*\[\r\n\])+history filename: *The filename in which to record the command history is.*.gdb_history(\[^\r\n\]*\[\r\n\])+history save: *Saving of the history record on exit is o(\[^\r\n\]*\[\r\n\])+history size: * The size of the command history is.*" #test show language gdb_test "show language" "The current source language is \"auto; currently c\"." #test show listsize @@ -796,7 +794,7 @@ } #test target -gdb_test "target" "Argument required .target name.*" +gdb_test "target" "List of target subcommands:(\[^\r\n\]*\[\r\n\])+Type \"help target\" followed by target subcommand name for full documentation.(\[^\r\n\]*\[\r\n\])+Command name abbreviations are allowed if unambiguous." #test tbreak gdb_test "tbreak" "No default breakpoint address now." #test thread @@ -829,7 +827,7 @@ "y" #test unset -gdb_test "unset" "\"unset\" must be followed by the name of an unset subcommand.(\[^\r\n\]*\[\r\n\])+List of unset subcommands:(\[^\r\n\]*\[\r\n\])+unset environment -- Cancel environment variable VAR for the program(\[^\r\n\]*\[\r\n\])+Type \"help unset\" followed by unset subcommand name for full documentation.(\[^\r\n\]*\[\r\n\])+Command name abbreviations are allowed if unambiguous." +gdb_test "unset" "List of unset subcommands:(\[^\r\n\]*\[\r\n\])+unset environment -- Cancel environment variable VAR for the program(\[^\r\n\]*\[\r\n\])+Type \"help unset\" followed by unset subcommand name for full documentation.(\[^\r\n\]*\[\r\n\])+Command name abbreviations are allowed if unambiguous." #test up #test up-silently gdb_test "up-silently" "No stack." diff -Nru gdb-9.1/gdb/testsuite/gdb.base/define.exp gdb-10.2/gdb/testsuite/gdb.base/define.exp --- gdb-9.1/gdb/testsuite/gdb.base/define.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/define.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1998-2020 Free Software Foundation, Inc. +# Copyright 1998-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/define-prefix.exp gdb-10.2/gdb/testsuite/gdb.base/define-prefix.exp --- gdb-9.1/gdb/testsuite/gdb.base/define-prefix.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/define-prefix.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/del.c gdb-10.2/gdb/testsuite/gdb.base/del.c --- gdb-9.1/gdb/testsuite/gdb.base/del.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/del.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2006-2020 Free Software Foundation, Inc. + Copyright 2006-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/del.exp gdb-10.2/gdb/testsuite/gdb.base/del.exp --- gdb-9.1/gdb/testsuite/gdb.base/del.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/del.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2006-2020 Free Software Foundation, Inc. +# Copyright 2006-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/detach.exp gdb-10.2/gdb/testsuite/gdb.base/detach.exp --- gdb-9.1/gdb/testsuite/gdb.base/detach.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/detach.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2003-2020 Free Software Foundation, Inc. +# Copyright 2003-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/dfp-exprs.exp gdb-10.2/gdb/testsuite/gdb.base/dfp-exprs.exp --- gdb-9.1/gdb/testsuite/gdb.base/dfp-exprs.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/dfp-exprs.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2007-2020 Free Software Foundation, Inc. +# Copyright (C) 2007-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/dfp-test.c gdb-10.2/gdb/testsuite/gdb.base/dfp-test.c --- gdb-9.1/gdb/testsuite/gdb.base/dfp-test.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/dfp-test.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2007-2020 Free Software Foundation, Inc. + Copyright 2007-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/dfp-test.exp gdb-10.2/gdb/testsuite/gdb.base/dfp-test.exp --- gdb-9.1/gdb/testsuite/gdb.base/dfp-test.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/dfp-test.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2007-2020 Free Software Foundation, Inc. +# Copyright (C) 2007-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/disabled-location.c gdb-10.2/gdb/testsuite/gdb.base/disabled-location.c --- gdb-9.1/gdb/testsuite/gdb.base/disabled-location.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/disabled-location.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright (C) 2012-2020 Free Software Foundation, Inc. + Copyright (C) 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/disabled-location.exp gdb-10.2/gdb/testsuite/gdb.base/disabled-location.exp --- gdb-9.1/gdb/testsuite/gdb.base/disabled-location.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/disabled-location.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2012-2020 Free Software Foundation, Inc. +# Copyright (C) 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/disasm-end-cu-1.c gdb-10.2/gdb/testsuite/gdb.base/disasm-end-cu-1.c --- gdb-9.1/gdb/testsuite/gdb.base/disasm-end-cu-1.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/disasm-end-cu-1.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/disasm-end-cu-2.c gdb-10.2/gdb/testsuite/gdb.base/disasm-end-cu-2.c --- gdb-9.1/gdb/testsuite/gdb.base/disasm-end-cu-2.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/disasm-end-cu-2.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/disasm-end-cu.exp gdb-10.2/gdb/testsuite/gdb.base/disasm-end-cu.exp --- gdb-9.1/gdb/testsuite/gdb.base/disasm-end-cu.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/disasm-end-cu.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2010-2020 Free Software Foundation, Inc. +# Copyright (C) 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/disasm-optim.c gdb-10.2/gdb/testsuite/gdb.base/disasm-optim.c --- gdb-9.1/gdb/testsuite/gdb.base/disasm-optim.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/disasm-optim.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright (C) 2015-2020 Free Software Foundation, Inc. + Copyright (C) 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/disasm-optim.exp gdb-10.2/gdb/testsuite/gdb.base/disasm-optim.exp --- gdb-9.1/gdb/testsuite/gdb.base/disasm-optim.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/disasm-optim.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020 Free Software Foundation, Inc. +# Copyright (C) 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/disasm-optim.h gdb-10.2/gdb/testsuite/gdb.base/disasm-optim.h --- gdb-9.1/gdb/testsuite/gdb.base/disasm-optim.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/disasm-optim.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright (C) 2015-2020 Free Software Foundation, Inc. + Copyright (C) 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/disasm-optim.S gdb-10.2/gdb/testsuite/gdb.base/disasm-optim.S --- gdb-9.1/gdb/testsuite/gdb.base/disasm-optim.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/disasm-optim.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright (C) 2015-2020 Free Software Foundation, Inc. + Copyright (C) 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/display.exp gdb-10.2/gdb/testsuite/gdb.base/display.exp --- gdb-9.1/gdb/testsuite/gdb.base/display.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/display.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1997-2020 Free Software Foundation, Inc. +# Copyright 1997-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/dmsym.c gdb-10.2/gdb/testsuite/gdb.base/dmsym.c --- gdb-9.1/gdb/testsuite/gdb.base/dmsym.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/dmsym.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/dmsym.exp gdb-10.2/gdb/testsuite/gdb.base/dmsym.exp --- gdb-9.1/gdb/testsuite/gdb.base/dmsym.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/dmsym.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2011-2020 Free Software Foundation, Inc. +# Copyright (C) 2011-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/dmsym_main.c gdb-10.2/gdb/testsuite/gdb.base/dmsym_main.c --- gdb-9.1/gdb/testsuite/gdb.base/dmsym_main.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/dmsym_main.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/double-prompt-target-event-error.c gdb-10.2/gdb/testsuite/gdb.base/double-prompt-target-event-error.c --- gdb-9.1/gdb/testsuite/gdb.base/double-prompt-target-event-error.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/double-prompt-target-event-error.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/double-prompt-target-event-error.exp gdb-10.2/gdb/testsuite/gdb.base/double-prompt-target-event-error.exp --- gdb-9.1/gdb/testsuite/gdb.base/double-prompt-target-event-error.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/double-prompt-target-event-error.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2014-2020 Free Software Foundation, Inc. +# Copyright (C) 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/dprintf-bp-same-addr.c gdb-10.2/gdb/testsuite/gdb.base/dprintf-bp-same-addr.c --- gdb-9.1/gdb/testsuite/gdb.base/dprintf-bp-same-addr.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/dprintf-bp-same-addr.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright (C) 2014-2020 Free Software Foundation, Inc. + Copyright (C) 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/dprintf-bp-same-addr.exp gdb-10.2/gdb/testsuite/gdb.base/dprintf-bp-same-addr.exp --- gdb-9.1/gdb/testsuite/gdb.base/dprintf-bp-same-addr.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/dprintf-bp-same-addr.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or diff -Nru gdb-9.1/gdb/testsuite/gdb.base/dprintf.c gdb-10.2/gdb/testsuite/gdb.base/dprintf.c --- gdb-9.1/gdb/testsuite/gdb.base/dprintf.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/dprintf.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright (C) 2012-2020 Free Software Foundation, Inc. + Copyright (C) 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/dprintf-detach.c gdb-10.2/gdb/testsuite/gdb.base/dprintf-detach.c --- gdb-9.1/gdb/testsuite/gdb.base/dprintf-detach.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/dprintf-detach.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/dprintf-detach.exp gdb-10.2/gdb/testsuite/gdb.base/dprintf-detach.exp --- gdb-9.1/gdb/testsuite/gdb.base/dprintf-detach.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/dprintf-detach.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/dprintf.exp gdb-10.2/gdb/testsuite/gdb.base/dprintf.exp --- gdb-9.1/gdb/testsuite/gdb.base/dprintf.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/dprintf.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2012-2020 Free Software Foundation, Inc. +# Copyright (C) 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -160,7 +160,7 @@ return } - # Even if the the target reports that it does support target side + # Even if the target reports that it does support target side # commands, we can only tell that it supports them in combination # with a particular breakpoint type (Z0, Z1, etc.) when we try to # insert the breakpoint. When "set breakpoint always-inserted is diff -Nru gdb-9.1/gdb/testsuite/gdb.base/dprintf-next.c gdb-10.2/gdb/testsuite/gdb.base/dprintf-next.c --- gdb-9.1/gdb/testsuite/gdb.base/dprintf-next.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/dprintf-next.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright (C) 2013-2020 Free Software Foundation, Inc. + Copyright (C) 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/dprintf-next.exp gdb-10.2/gdb/testsuite/gdb.base/dprintf-next.exp --- gdb-9.1/gdb/testsuite/gdb.base/dprintf-next.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/dprintf-next.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or diff -Nru gdb-9.1/gdb/testsuite/gdb.base/dprintf-non-stop.c gdb-10.2/gdb/testsuite/gdb.base/dprintf-non-stop.c --- gdb-9.1/gdb/testsuite/gdb.base/dprintf-non-stop.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/dprintf-non-stop.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright (C) 2013-2020 Free Software Foundation, Inc. + Copyright (C) 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/dprintf-non-stop.exp gdb-10.2/gdb/testsuite/gdb.base/dprintf-non-stop.exp --- gdb-9.1/gdb/testsuite/gdb.base/dprintf-non-stop.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/dprintf-non-stop.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2013-2020 Free Software Foundation, Inc. +# Copyright (C) 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/dprintf-pending.c gdb-10.2/gdb/testsuite/gdb.base/dprintf-pending.c --- gdb-9.1/gdb/testsuite/gdb.base/dprintf-pending.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/dprintf-pending.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/dprintf-pending.exp gdb-10.2/gdb/testsuite/gdb.base/dprintf-pending.exp --- gdb-9.1/gdb/testsuite/gdb.base/dprintf-pending.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/dprintf-pending.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/dprintf-pendshr.c gdb-10.2/gdb/testsuite/gdb.base/dprintf-pendshr.c --- gdb-9.1/gdb/testsuite/gdb.base/dprintf-pendshr.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/dprintf-pendshr.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/dso2dso.c gdb-10.2/gdb/testsuite/gdb.base/dso2dso.c --- gdb-9.1/gdb/testsuite/gdb.base/dso2dso.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/dso2dso.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2015-2020 Free Software Foundation, Inc. +/* Copyright 2015-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.base/dso2dso-dso1.c gdb-10.2/gdb/testsuite/gdb.base/dso2dso-dso1.c --- gdb-9.1/gdb/testsuite/gdb.base/dso2dso-dso1.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/dso2dso-dso1.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2015-2020 Free Software Foundation, Inc. +/* Copyright 2015-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.base/dso2dso-dso1.h gdb-10.2/gdb/testsuite/gdb.base/dso2dso-dso1.h --- gdb-9.1/gdb/testsuite/gdb.base/dso2dso-dso1.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/dso2dso-dso1.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2015-2020 Free Software Foundation, Inc. +/* Copyright 2015-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.base/dso2dso-dso2.c gdb-10.2/gdb/testsuite/gdb.base/dso2dso-dso2.c --- gdb-9.1/gdb/testsuite/gdb.base/dso2dso-dso2.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/dso2dso-dso2.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2015-2020 Free Software Foundation, Inc. +/* Copyright 2015-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.base/dso2dso-dso2.h gdb-10.2/gdb/testsuite/gdb.base/dso2dso-dso2.h --- gdb-9.1/gdb/testsuite/gdb.base/dso2dso-dso2.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/dso2dso-dso2.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2015-2020 Free Software Foundation, Inc. +/* Copyright 2015-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.base/dso2dso.exp gdb-10.2/gdb/testsuite/gdb.base/dso2dso.exp --- gdb-9.1/gdb/testsuite/gdb.base/dso2dso.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/dso2dso.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/dtrace-probe.c gdb-10.2/gdb/testsuite/gdb.base/dtrace-probe.c --- gdb-9.1/gdb/testsuite/gdb.base/dtrace-probe.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/dtrace-probe.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/dtrace-probe.d gdb-10.2/gdb/testsuite/gdb.base/dtrace-probe.d --- gdb-9.1/gdb/testsuite/gdb.base/dtrace-probe.d 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/dtrace-probe.d 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/dtrace-probe.exp gdb-10.2/gdb/testsuite/gdb.base/dtrace-probe.exp --- gdb-9.1/gdb/testsuite/gdb.base/dtrace-probe.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/dtrace-probe.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2014-2020 Free Software Foundation, Inc. +# Copyright (C) 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/dump.exp gdb-10.2/gdb/testsuite/gdb.base/dump.exp --- gdb-9.1/gdb/testsuite/gdb.base/dump.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/dump.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2002-2020 Free Software Foundation, Inc. +# Copyright 2002-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/duplicate-bp.c gdb-10.2/gdb/testsuite/gdb.base/duplicate-bp.c --- gdb-9.1/gdb/testsuite/gdb.base/duplicate-bp.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/duplicate-bp.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/duplicate-bp.exp gdb-10.2/gdb/testsuite/gdb.base/duplicate-bp.exp --- gdb-9.1/gdb/testsuite/gdb.base/duplicate-bp.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/duplicate-bp.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/dup-sect.exp gdb-10.2/gdb/testsuite/gdb.base/dup-sect.exp --- gdb-9.1/gdb/testsuite/gdb.base/dup-sect.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/dup-sect.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/dup-sect.S gdb-10.2/gdb/testsuite/gdb.base/dup-sect.S --- gdb-9.1/gdb/testsuite/gdb.base/dup-sect.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/dup-sect.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/echo.exp gdb-10.2/gdb/testsuite/gdb.base/echo.exp --- gdb-9.1/gdb/testsuite/gdb.base/echo.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/echo.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 1988-2020 Free Software Foundation, Inc. +# Copyright (C) 1988-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/eh_return.c gdb-10.2/gdb/testsuite/gdb.base/eh_return.c --- gdb-9.1/gdb/testsuite/gdb.base/eh_return.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/eh_return.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,98 @@ +/* This testcase is part of GDB, the GNU debugger. + + It was copied from gcc repo, gcc/testsuite/gcc.target/aarch64/eh_return.c. + + Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include <stdlib.h> +#include <stdio.h> + +int val, test, failed; + +int main (void); + +void +eh0 (void *p) +{ + val = (int)(long)p & 7; + if (val) + abort (); +} + +void +eh1 (void *p, int x) +{ + void *q = __builtin_alloca (x); + eh0 (q); + __builtin_eh_return (0, p); +} + +void +eh2a (int a,int b,int c,int d,int e,int f,int g,int h, void *p) +{ + val = a + b + c + d + e + f + g + h + (int)(long)p & 7; +} + +void +eh2 (void *p) +{ + eh2a (val, val, val, val, val, val, val, val, p); + __builtin_eh_return (0, p); +} + + +void +continuation (void) +{ + test++; + main (); +} + +void +fail (void) +{ + failed = 1; + printf ("failed\n"); + continuation (); +} + +void +do_test1 (void) +{ + if (!val) + eh1 (continuation, 100); + fail (); +} + +void +do_test2 (void) +{ + if (!val) + eh2 (continuation); + fail (); +} + +int +main (void) +{ + if (test == 0) + do_test1 (); + if (test == 1) + do_test2 (); + if (failed || test != 2) + exit (1); + exit (0); +} diff -Nru gdb-9.1/gdb/testsuite/gdb.base/eh_return.exp gdb-10.2/gdb/testsuite/gdb.base/eh_return.exp --- gdb-9.1/gdb/testsuite/gdb.base/eh_return.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/eh_return.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,48 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +# Check if executable generated from eh_return.c assert when setting a +# breakpoint at the last insn of eh, and running to it. + +standard_testfile + +if {[prepare_for_testing "failed to prepare" $testfile $srcfile \ + {debug nopie}]} { + return -1 +} + +set address -1 + +# Get the address of the last insn in function eh2. +gdb_test_multiple "disassemble eh2" "" { + -re -wrap "($hex)\[^\r\n\]*\r\nEnd of assembler dump." { + set address $expect_out(1,string) + pass $gdb_test_name + } +} + +if { $address == -1 } { + return 0 +} + +clean_restart ${binfile} + +gdb_breakpoint "*$address" message + +# The assert did not reproduce when running to main, and continuing to the +# breakpoint, so instead, run to the breakpoint. +gdb_run_cmd + +gdb_test "" "Breakpoint .*" "hit breakpoint" diff -Nru gdb-9.1/gdb/testsuite/gdb.base/empty_exe.exp gdb-10.2/gdb/testsuite/gdb.base/empty_exe.exp --- gdb-9.1/gdb/testsuite/gdb.base/empty_exe.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/empty_exe.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/ena-dis-br.exp gdb-10.2/gdb/testsuite/gdb.base/ena-dis-br.exp --- gdb-9.1/gdb/testsuite/gdb.base/ena-dis-br.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/ena-dis-br.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 1997-2020 Free Software Foundation, Inc. +# Copyright 1997-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -48,7 +48,7 @@ gdb_test_multiple "$test" "$test" { -re "Breakpoint (\[0-9\]*) at .*$where.*$gdb_prompt $" { set bp $expect_out(1,string) - pass "$test" + pass $gdb_test_name } } return $bp @@ -104,7 +104,12 @@ # Verify that we don't stop at a disabled breakpoint. gdb_continue_to_end "no stop" -rerun_to_main + +set count 1 +with_test_prefix "run $count" { + rerun_to_main + incr count +} gdb_continue_to_end "no stop at auto-disabled break marker2" # Verify that we can set a breakpoint to be self-deleting after the @@ -149,7 +154,9 @@ set bp [break_at $bp_location7 "line $bp_location7"] -set bp2 [break_at marker1 " line $bp_location15"] +with_test_prefix "enable count" { + set bp2 [break_at marker1 " line $bp_location15"] +} gdb_test "enable count" \ "Argument required \\(hit count\\)\\." \ @@ -181,7 +188,9 @@ fail "enable/disable break tests suppressed" } -set bp [break_at "marker1" " line $bp_location15.*"] +with_test_prefix "ignore count" { + set bp [break_at "marker1" " line $bp_location15.*"] +} # Verify that an ignore of a non-existent breakpoint is gracefully # handled. @@ -216,7 +225,11 @@ "info ignored break marker1" gdb_continue_to_end "no stop at ignored break marker1" -rerun_to_main + +with_test_prefix "run $count" { + rerun_to_main + incr count +} # See the comments in condbreak.exp for "run until breakpoint at marker1" # for an explanation of the xfail below. @@ -236,7 +249,9 @@ fail "enable/disable break tests suppressed" } -set bp [break_at marker1 " line $bp_location15.*"] +with_test_prefix "ignore count and auto-delete" { + set bp [break_at marker1 " line $bp_location15.*"] +} gdb_test "ignore $bp 1" \ "Will ignore next crossing of breakpoint \[0-9\]*.*" \ @@ -249,7 +264,11 @@ "info break marker1 after hitting breakpoint" gdb_continue_to_end "no stop at ignored & auto-deleted break marker1" -rerun_to_main + +with_test_prefix "run $count" { + rerun_to_main + incr count +} gdb_test "continue" \ ".*marker1 .*:$bp_location15.*" \ @@ -262,7 +281,9 @@ fail "enable/disable break tests suppressed" } -set bp [break_at marker1 " line $bp_location15"] +with_test_prefix "disabled breakpoint ignore count" { + set bp [break_at marker1 " line $bp_location15"] +} gdb_test "ignore $bp 10" \ "Will ignore next 10 crossings of breakpoint \[0-9\]*.*" \ @@ -271,7 +292,10 @@ gdb_test_no_output "disable $bp" "disable break marker1" gdb_continue_to_end "no stop at ignored & disabled break marker1" -rerun_to_main + +with_test_prefix "run $count" { + rerun_to_main +} gdb_test "info break $bp" \ "\[0-9\]*\[ \t\]+breakpoint\[ \t\]+keep\[ \t\]+n.*ignore next 10 hits.*" \ @@ -315,9 +339,18 @@ set b3 0 set b4 0 set b1 [break_at main ""] -set b2 [break_at main ""] -set b3 [break_at main ""] -set b4 [break_at main ""] + +with_test_prefix "2nd breakpoint" { + set b2 [break_at main ""] +} + +with_test_prefix "3rd breakpoint" { + set b3 [break_at main ""] +} + +with_test_prefix "4th breakpoint" { + set b4 [break_at main ""] +} # Perform tests for disable/enable commands on multiple # locations and breakpoints. diff -Nru gdb-9.1/gdb/testsuite/gdb.base/endian.c gdb-10.2/gdb/testsuite/gdb.base/endian.c --- gdb-9.1/gdb/testsuite/gdb.base/endian.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/endian.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright (C) 2018-2020 Free Software Foundation, Inc. + Copyright (C) 2018-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/endian.exp gdb-10.2/gdb/testsuite/gdb.base/endian.exp --- gdb-9.1/gdb/testsuite/gdb.base/endian.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/endian.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2018-2020 Free Software Foundation, Inc. +# Copyright (C) 2018-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -18,26 +18,26 @@ standard_testfile set en_auto "The target endianness is set automatically" -set en_set "The target is assumed to be" +set en_set "The target is set to" clean_restart # First check that the automatic endianness is updated # with the `set endian' command. gdb_test "set endian auto" \ - "$en_auto \\\(currently \(\?:big\|little\) endian\\\)" \ + "$en_auto \\\(currently \(\?:big\|little\) endian\\\)\\." \ "default target endianness" -gdb_test "set endian big" "$en_set big endian" \ +gdb_test "set endian big" "$en_set big endian\\." \ "set target endianness" -gdb_test "set endian auto" "$en_auto \\\(currently big endian\\\)" \ +gdb_test "set endian auto" "$en_auto \\\(currently big endian\\\)\\." \ "auto target endianness" -gdb_test "set endian little" "$en_set little endian" \ +gdb_test "set endian little" "$en_set little endian\\." \ "set target endianness little" -gdb_test "set endian auto" "$en_auto \\\(currently little endian\\\)" \ +gdb_test "set endian auto" "$en_auto \\\(currently little endian\\\)\\." \ "auto target endianness little" -gdb_test "set endian big" "$en_set big endian" \ +gdb_test "set endian big" "$en_set big endian\\." \ "set target endianness big" -gdb_test "set endian auto" "$en_auto \\\(currently big endian\\\)" \ +gdb_test "set endian auto" "$en_auto \\\(currently big endian\\\)\\." \ "auto target endianness big" if { [build_executable ${testfile}.exp $testfile] } { @@ -49,7 +49,7 @@ } set test "get target endianness" if { [gdb_test_multiple "show endian" "$test" { - -re "$en_auto \\\(currently \(big\|little\) endian\\\).*$gdb_prompt" { + -re "$en_auto \\\(currently \(big\|little\) endian\\\)\\..*$gdb_prompt" { set endian $expect_out(1,string) pass "$test" } @@ -64,31 +64,31 @@ if { [gdb_unload] } { gdb_suppress_entire_file "$pf_prefix cannot unselect executable" } -gdb_test "set endian big" "$en_set big endian" \ +gdb_test "set endian big" "$en_set big endian\\." \ "override target endianness big" -gdb_test "set endian auto" "$en_auto \\\(currently big endian\\\)" \ +gdb_test "set endian auto" "$en_auto \\\(currently big endian\\\)\\." \ "override auto target endianness big" if { [gdb_file_cmd $binfile] } { gdb_suppress_entire_file "$pf_prefix cannot select executable" } -gdb_test "show endian" "$en_auto \\\(currently $endian endian\\\)" \ +gdb_test "show endian" "$en_auto \\\(currently $endian endian\\\)\\." \ "previously big default executable endianness" if { [gdb_unload] } { gdb_suppress_entire_file "$pf_prefix cannot unselect executable" } -gdb_test "show endian" "$en_auto \\\(currently $endian endian\\\)" \ +gdb_test "show endian" "$en_auto \\\(currently $endian endian\\\)\\." \ "previously big default no executable endianness" -gdb_test "set endian little" "$en_set little endian" \ +gdb_test "set endian little" "$en_set little endian\\." \ "override target endianness little" -gdb_test "set endian auto" "$en_auto \\\(currently little endian\\\)" \ +gdb_test "set endian auto" "$en_auto \\\(currently little endian\\\)\\." \ "override auto target endianness little" if { [gdb_file_cmd $binfile] } { gdb_suppress_entire_file "$pf_prefix cannot select executable" } -gdb_test "show endian" "$en_auto \\\(currently $endian endian\\\)" \ +gdb_test "show endian" "$en_auto \\\(currently $endian endian\\\)\\." \ "previously little default executable endianness" if { [gdb_unload] } { gdb_suppress_entire_file "$pf_prefix cannot unselect executable" } -gdb_test "show endian" "$en_auto \\\(currently $endian endian\\\)" \ +gdb_test "show endian" "$en_auto \\\(currently $endian endian\\\)\\." \ "previously little default no executable endianness" diff -Nru gdb-9.1/gdb/testsuite/gdb.base/endianity.c gdb-10.2/gdb/testsuite/gdb.base/endianity.c --- gdb-9.1/gdb/testsuite/gdb.base/endianity.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/endianity.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2019-2020 Free Software Foundation, Inc. + Copyright 2019-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/endianity.exp gdb-10.2/gdb/testsuite/gdb.base/endianity.exp --- gdb-9.1/gdb/testsuite/gdb.base/endianity.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/endianity.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -25,7 +25,7 @@ return -1 } -gdb_test "print o" "= {v = 3, w = 2, x = 7, f = 23.5, cplx = 1.25 \\+ 7.25 \\* I, d = 75}" \ +gdb_test "print o" "= {v = 3, w = 2, x = 7, f = 23.5, cplx = 1.25 \\+ 7.25i, d = 75}" \ "print o before assignment" gdb_test "print o.v = 4" "= 4" @@ -41,5 +41,5 @@ gdb_test "x/x &o.v" "0x04000000" gdb_test "x/xh &o.w" "0x0300" -gdb_test "print o" "= {v = 4, w = 3, x = 2, f = 1.5, cplx = 1.25 \\+ 7.25 \\* I, d = -23.125}" \ +gdb_test "print o" "= {v = 4, w = 3, x = 2, f = 1.5, cplx = 1.25 \\+ 7.25i, d = -23.125}" \ "print o after assignment" diff -Nru gdb-9.1/gdb/testsuite/gdb.base/ending-run.exp gdb-10.2/gdb/testsuite/gdb.base/ending-run.exp --- gdb-9.1/gdb/testsuite/gdb.base/ending-run.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/ending-run.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 1997-2020 Free Software Foundation, Inc. +# Copyright 1997-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/enum_cond.c gdb-10.2/gdb/testsuite/gdb.base/enum_cond.c --- gdb-9.1/gdb/testsuite/gdb.base/enum_cond.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/enum_cond.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/enum_cond.exp gdb-10.2/gdb/testsuite/gdb.base/enum_cond.exp --- gdb-9.1/gdb/testsuite/gdb.base/enum_cond.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/enum_cond.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/enumval.c gdb-10.2/gdb/testsuite/gdb.base/enumval.c --- gdb-9.1/gdb/testsuite/gdb.base/enumval.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/enumval.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/enumval.exp gdb-10.2/gdb/testsuite/gdb.base/enumval.exp --- gdb-9.1/gdb/testsuite/gdb.base/enumval.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/enumval.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/environ.exp gdb-10.2/gdb/testsuite/gdb.base/environ.exp --- gdb-9.1/gdb/testsuite/gdb.base/environ.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/environ.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1997-2020 Free Software Foundation, Inc. +# Copyright 1997-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/eu-strip-infcall.c gdb-10.2/gdb/testsuite/gdb.base/eu-strip-infcall.c --- gdb-9.1/gdb/testsuite/gdb.base/eu-strip-infcall.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/eu-strip-infcall.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2011-2020 Free Software Foundation, Inc. +/* Copyright 2011-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.base/eu-strip-infcall.exp gdb-10.2/gdb/testsuite/gdb.base/eu-strip-infcall.exp --- gdb-9.1/gdb/testsuite/gdb.base/eu-strip-infcall.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/eu-strip-infcall.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2011-2020 Free Software Foundation, Inc. +# Copyright (C) 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/eval-avoid-side-effects.exp gdb-10.2/gdb/testsuite/gdb.base/eval-avoid-side-effects.exp --- gdb-9.1/gdb/testsuite/gdb.base/eval-avoid-side-effects.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/eval-avoid-side-effects.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/eval.exp gdb-10.2/gdb/testsuite/gdb.base/eval.exp --- gdb-9.1/gdb/testsuite/gdb.base/eval.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/eval.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/eval-skip.exp gdb-10.2/gdb/testsuite/gdb.base/eval-skip.exp --- gdb-9.1/gdb/testsuite/gdb.base/eval-skip.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/eval-skip.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1998-2020 Free Software Foundation, Inc. +# Copyright 1998-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/examine-backward.c gdb-10.2/gdb/testsuite/gdb.base/examine-backward.c --- gdb-9.1/gdb/testsuite/gdb.base/examine-backward.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/examine-backward.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/examine-backward.exp gdb-10.2/gdb/testsuite/gdb.base/examine-backward.exp --- gdb-9.1/gdb/testsuite/gdb.base/examine-backward.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/examine-backward.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/exec-invalid-sysroot.exp gdb-10.2/gdb/testsuite/gdb.base/exec-invalid-sysroot.exp --- gdb-9.1/gdb/testsuite/gdb.base/exec-invalid-sysroot.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/exec-invalid-sysroot.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1997-2020 Free Software Foundation, Inc. +# Copyright 1997-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/execl-update-breakpoints.c gdb-10.2/gdb/testsuite/gdb.base/execl-update-breakpoints.c --- gdb-9.1/gdb/testsuite/gdb.base/execl-update-breakpoints.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/execl-update-breakpoints.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/execl-update-breakpoints.exp gdb-10.2/gdb/testsuite/gdb.base/execl-update-breakpoints.exp --- gdb-9.1/gdb/testsuite/gdb.base/execl-update-breakpoints.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/execl-update-breakpoints.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/execution-termios.c gdb-10.2/gdb/testsuite/gdb.base/execution-termios.c --- gdb-9.1/gdb/testsuite/gdb.base/execution-termios.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/execution-termios.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/execution-termios.exp gdb-10.2/gdb/testsuite/gdb.base/execution-termios.exp --- gdb-9.1/gdb/testsuite/gdb.base/execution-termios.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/execution-termios.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/exe-lock.exp gdb-10.2/gdb/testsuite/gdb.base/exe-lock.exp --- gdb-9.1/gdb/testsuite/gdb.base/exe-lock.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/exe-lock.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2009-2020 Free Software Foundation, Inc. +# Copyright 2009-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/exitsignal.exp gdb-10.2/gdb/testsuite/gdb.base/exitsignal.exp --- gdb-9.1/gdb/testsuite/gdb.base/exitsignal.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/exitsignal.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/expand-psymtabs.c gdb-10.2/gdb/testsuite/gdb.base/expand-psymtabs.c --- gdb-9.1/gdb/testsuite/gdb.base/expand-psymtabs.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/expand-psymtabs.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2007-2020 Free Software Foundation, Inc. + Copyright 2007-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/expand-psymtabs.exp gdb-10.2/gdb/testsuite/gdb.base/expand-psymtabs.exp --- gdb-9.1/gdb/testsuite/gdb.base/expand-psymtabs.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/expand-psymtabs.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2007-2020 Free Software Foundation, Inc. +# Copyright 2007-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/exprs.exp gdb-10.2/gdb/testsuite/gdb.base/exprs.exp --- gdb-9.1/gdb/testsuite/gdb.base/exprs.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/exprs.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1988-2020 Free Software Foundation, Inc. +# Copyright 1988-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/fileio.c gdb-10.2/gdb/testsuite/gdb.base/fileio.c --- gdb-9.1/gdb/testsuite/gdb.base/fileio.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/fileio.c 2020-09-13 02:33:41.000000000 +0000 @@ -1,13 +1,12 @@ #include <stdio.h> #include <stdlib.h> #include <string.h> -#include <sys/errno.h> #include <sys/types.h> -#include <sys/fcntl.h> #include <sys/stat.h> #include <sys/time.h> #include <errno.h> #include <sys/wait.h> +#include <fcntl.h> #include <unistd.h> #include <time.h> /* TESTS : diff -Nru gdb-9.1/gdb/testsuite/gdb.base/fileio.exp gdb-10.2/gdb/testsuite/gdb.base/fileio.exp --- gdb-9.1/gdb/testsuite/gdb.base/fileio.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/fileio.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2002-2020 Free Software Foundation, Inc. +# Copyright 2002-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/filesym.c gdb-10.2/gdb/testsuite/gdb.base/filesym.c --- gdb-9.1/gdb/testsuite/gdb.base/filesym.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/filesym.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/filesym.exp gdb-10.2/gdb/testsuite/gdb.base/filesym.exp --- gdb-9.1/gdb/testsuite/gdb.base/filesym.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/filesym.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/find.c gdb-10.2/gdb/testsuite/gdb.base/find.c --- gdb-9.1/gdb/testsuite/gdb.base/find.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/find.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,7 +1,7 @@ /* Testcase for the find command. This testcase is part of GDB, the GNU debugger. - Copyright 2008-2020 Free Software Foundation, Inc. + Copyright 2008-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/find.exp gdb-10.2/gdb/testsuite/gdb.base/find.exp --- gdb-9.1/gdb/testsuite/gdb.base/find.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/find.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/find-unmapped.c gdb-10.2/gdb/testsuite/gdb.base/find-unmapped.c --- gdb-9.1/gdb/testsuite/gdb.base/find-unmapped.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/find-unmapped.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/find-unmapped.exp gdb-10.2/gdb/testsuite/gdb.base/find-unmapped.exp --- gdb-9.1/gdb/testsuite/gdb.base/find-unmapped.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/find-unmapped.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/finish.exp gdb-10.2/gdb/testsuite/gdb.base/finish.exp --- gdb-9.1/gdb/testsuite/gdb.base/finish.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/finish.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2000-2020 Free Software Foundation, Inc. +# Copyright 2000-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/finish-pretty.c gdb-10.2/gdb/testsuite/gdb.base/finish-pretty.c --- gdb-9.1/gdb/testsuite/gdb.base/finish-pretty.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/finish-pretty.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2018-2020 Free Software Foundation, Inc. + Copyright 2018-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/finish-pretty.exp gdb-10.2/gdb/testsuite/gdb.base/finish-pretty.exp --- gdb-9.1/gdb/testsuite/gdb.base/finish-pretty.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/finish-pretty.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2018-2020 Free Software Foundation, Inc. +# Copyright 2018-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/fixsection.c gdb-10.2/gdb/testsuite/gdb.base/fixsection.c --- gdb-9.1/gdb/testsuite/gdb.base/fixsection.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/fixsection.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2008-2020 Free Software Foundation, Inc. +/* Copyright (C) 2008-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/fixsection.exp gdb-10.2/gdb/testsuite/gdb.base/fixsection.exp --- gdb-9.1/gdb/testsuite/gdb.base/fixsection.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/fixsection.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2008-2020 Free Software Foundation, Inc. +# Copyright (C) 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/flexible-array-member.c gdb-10.2/gdb/testsuite/gdb.base/flexible-array-member.c --- gdb-9.1/gdb/testsuite/gdb.base/flexible-array-member.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/flexible-array-member.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,70 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include <stdlib.h> + +struct no_size +{ + int n; + int items[]; +}; + +struct zero_size +{ + int n; + int items[0]; +}; + +struct zero_size_only +{ + int items[0]; +}; + +struct no_size *ns; +struct zero_size *zs; +struct zero_size_only *zso; + +static void +break_here (void) +{ +} + +int +main (void) +{ + ns = (struct no_size *) malloc (sizeof (*ns) + 3 * sizeof (int)); + zs = (struct zero_size *) malloc (sizeof (*zs) + 3 * sizeof (int)); + zso = (struct zero_size_only *) malloc (sizeof (*zso) + 3 * sizeof (int)); + + ns->n = 3; + ns->items[0] = 101; + ns->items[1] = 102; + ns->items[2] = 103; + + zs->n = 3; + zs->items[0] = 201; + zs->items[1] = 202; + zs->items[2] = 203; + + zso->items[0] = 301; + zso->items[1] = 302; + zso->items[2] = 303; + + break_here (); + + return 0; +} diff -Nru gdb-9.1/gdb/testsuite/gdb.base/flexible-array-member.exp gdb-10.2/gdb/testsuite/gdb.base/flexible-array-member.exp --- gdb-9.1/gdb/testsuite/gdb.base/flexible-array-member.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/flexible-array-member.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,66 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Test printing and subscripting flexible array members. + +standard_testfile + +if { [prepare_for_testing "failed to prepare" \ + ${testfile} ${srcfile}] } { + return +} + +if { ![runto break_here] } { + untested "could not run to break_here" + return +} + +# The various cases are: +# +# - ns: flexible array member with no size +# - zs: flexible array member with size 0 (GNU C extension that predates the +# standardization of the feature, but widely supported) +# - zso: zero-size only, a corner case where the array is the sole member of +# the structure + +# Print the whole structure. + +gdb_test "print *ns" " = {n = 3, items = $hex}" +gdb_test "print *zs" " = {n = 3, items = $hex}" +gdb_test "print *zso" " = {items = $hex}" + +# Print all items. + +gdb_test "print ns->items\[0\]" " = 101" +gdb_test "print ns->items\[1\]" " = 102" +gdb_test "print ns->items\[2\]" " = 103" + +gdb_test "print zs->items\[0\]" " = 201" +gdb_test "print zs->items\[1\]" " = 202" +gdb_test "print zs->items\[2\]" " = 203" + +gdb_test "print zso->items\[0\]" " = 301" +gdb_test "print zso->items\[1\]" " = 302" +gdb_test "print zso->items\[2\]" " = 303" + +# Check taking the address of array elements (how PR 28675 was originally +# reported). + +gdb_test "print ns->items == &ns->items\[0\]" " = 1" +gdb_test "print ns->items + 1 == &ns->items\[1\]" " = 1" +gdb_test "print zs->items == &zs->items\[0\]" " = 1" +gdb_test "print zs->items + 1 == &zs->items\[1\]" " = 1" +gdb_test "print zso->items == &zso->items\[0\]" " = 1" +gdb_test "print zso->items + 1 == &zso->items\[1\]" " = 1" diff -Nru gdb-9.1/gdb/testsuite/gdb.base/float128.c gdb-10.2/gdb/testsuite/gdb.base/float128.c --- gdb-9.1/gdb/testsuite/gdb.base/float128.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/float128.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2016-2020 Free Software Foundation, Inc. + Copyright 2016-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/float128.exp gdb-10.2/gdb/testsuite/gdb.base/float128.exp --- gdb-9.1/gdb/testsuite/gdb.base/float128.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/float128.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2016-2020 Free Software Foundation, Inc. +# Copyright 2016-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/float.c gdb-10.2/gdb/testsuite/gdb.base/float.c --- gdb-9.1/gdb/testsuite/gdb.base/float.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/float.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This test program is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/float.exp gdb-10.2/gdb/testsuite/gdb.base/float.exp --- gdb-9.1/gdb/testsuite/gdb.base/float.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/float.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2003-2020 Free Software Foundation, Inc. +# Copyright 2003-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/floatn.c gdb-10.2/gdb/testsuite/gdb.base/floatn.c --- gdb-9.1/gdb/testsuite/gdb.base/floatn.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/floatn.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2016-2020 Free Software Foundation, Inc. + Copyright 2016-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/floatn.exp gdb-10.2/gdb/testsuite/gdb.base/floatn.exp --- gdb-9.1/gdb/testsuite/gdb.base/floatn.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/floatn.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2016-2020 Free Software Foundation, Inc. +# Copyright 2016-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -114,11 +114,8 @@ gdb_test "print f64x" ".* = 200\\.25.*" "the value of f64x is changed to 200.25" # Print the original values of c32, c64, c128, c32x, c64x. -gdb_test "print c32" ".* = 1\\.5 \\+ 1 \\* I.*" "the original value of c32 is 1.5 + 1 * I" -gdb_test "print c64" ".* = 2\\.25 \\+ 1 \\* I.*" "the original value of c64 is 2.25 + 1 * I" -gdb_test "print c128" ".* = 3\\.375 \\+ 1 \\* I.*" "the original value of c128 is 3.375 + 1 * I" -gdb_test "print c32x" ".* = 10\\.5 \\+ 1 \\* I.*" "the original value of c32x is 10.5 + 1 * I" -gdb_test "print c64x" ".* = 20\\.25 \\+ 1 \\* I.*" "the original value of c64x is 20.25 + 1 * I" - -# FIXME: GDB cannot parse non-trivial complex constants yet. - +gdb_test "print c32" ".* = 1\\.5 \\+ 1i.*" "the original value of c32 is 1.5 + 1i" +gdb_test "print c64" ".* = 2\\.25 \\+ 1i.*" "the original value of c64 is 2.25 + 1i" +gdb_test "print c128" ".* = 3\\.375 \\+ 1i.*" "the original value of c128 is 3.375 + 1i" +gdb_test "print c32x" ".* = 10\\.5 \\+ 1i.*" "the original value of c32x is 10.5 + 1i" +gdb_test "print c64x" ".* = 20\\.25 \\+ 1i.*" "the original value of c64x is 20.25 + 1i" diff -Nru gdb-9.1/gdb/testsuite/gdb.base/foll-exec.c gdb-10.2/gdb/testsuite/gdb.base/foll-exec.c --- gdb-9.1/gdb/testsuite/gdb.base/foll-exec.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/foll-exec.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This test program is part of GDB, the GNU debugger. - Copyright 1997-2020 Free Software Foundation, Inc. + Copyright 1997-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/foll-exec.exp gdb-10.2/gdb/testsuite/gdb.base/foll-exec.exp --- gdb-9.1/gdb/testsuite/gdb.base/foll-exec.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/foll-exec.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1997-2020 Free Software Foundation, Inc. +# Copyright 1997-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -78,10 +78,13 @@ fail "couldn't run ${testfile}" return } - # Execute the code setting up variable PROG. - set tbreak_line [gdb_get_line_number " tbreak-execlp " $srcfile] - gdb_test "tbreak ${tbreak_line}" - gdb_continue_to_breakpoint "line tbreak-execlp" ".*execlp \\(.*" + + with_test_prefix "1st run" { + # Execute the code setting up variable PROG. + set tbreak_line [gdb_get_line_number " tbreak-execlp " $srcfile] + gdb_test "tbreak ${tbreak_line}" "" "insert breakpoint" + gdb_continue_to_breakpoint "line tbreak-execlp" ".*execlp \\(.*" + } # Verify that we can see various global and local variables # in this program, and that they have expected values. Some @@ -234,10 +237,13 @@ fail "couldn't run ${testfile} (3rd try)" return } - # Execute the code setting up variable PROG. - set tbreak_line [gdb_get_line_number " tbreak-execlp " $srcfile] - gdb_test "tbreak ${tbreak_line}" - gdb_continue_to_breakpoint "line tbreak-execlp" ".*execlp \\(.*" + + with_test_prefix "2nd run" { + # Execute the code setting up variable PROG. + set tbreak_line [gdb_get_line_number " tbreak-execlp " $srcfile] + gdb_test "tbreak ${tbreak_line}" "" "insert breakpoint" + gdb_continue_to_breakpoint "line tbreak-execlp" ".*execlp \\(.*" + } # Verify that we can follow through follow an execl() # call. (We must jump around earlier exec* calls.) @@ -299,10 +305,13 @@ fail "couldn't run ${testfile} (4th try)" return } - # Execute the code setting up variable PROG. - set tbreak_line [gdb_get_line_number " tbreak-execlp " $srcfile] - gdb_test "tbreak ${tbreak_line}" - gdb_continue_to_breakpoint "line tbreak-execlp" ".*execlp \\(.*" + + with_test_prefix "3rd run" { + # Execute the code setting up variable PROG. + set tbreak_line [gdb_get_line_number " tbreak-execlp " $srcfile] + gdb_test "tbreak ${tbreak_line}" "" "insert breakpoint" + gdb_continue_to_breakpoint "line tbreak-execlp" ".*execlp \\(.*" + } # Verify that we can follow through follow an execv() # call. (We must jump around earlier exec* calls.) diff -Nru gdb-9.1/gdb/testsuite/gdb.base/foll-exec-mode.c gdb-10.2/gdb/testsuite/gdb.base/foll-exec-mode.c --- gdb-9.1/gdb/testsuite/gdb.base/foll-exec-mode.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/foll-exec-mode.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This test program is part of GDB, the GNU debugger. - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/foll-exec-mode.exp gdb-10.2/gdb/testsuite/gdb.base/foll-exec-mode.exp --- gdb-9.1/gdb/testsuite/gdb.base/foll-exec-mode.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/foll-exec-mode.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1997-2020 Free Software Foundation, Inc. +# Copyright 1997-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/foll-fork.exp gdb-10.2/gdb/testsuite/gdb.base/foll-fork.exp --- gdb-9.1/gdb/testsuite/gdb.base/foll-fork.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/foll-fork.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1997-2020 Free Software Foundation, Inc. +# Copyright 1997-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -179,13 +179,17 @@ } } +set reading_in_symbols_re {(?:\r\nReading in symbols for [^\r\n]*)?} + proc catch_fork_child_follow {} { global gdb_prompt global srcfile + global reading_in_symbols_re set bp_after_fork [gdb_get_line_number "set breakpoint here"] - gdb_test "catch fork" "Catchpoint \[0-9\]* \\(fork\\)" \ + gdb_test "catch fork" \ + "Catchpoint \[0-9\]* \\(fork\\)$reading_in_symbols_re" \ "explicit child follow, set catch fork" # Verify that the catchpoint is mentioned in an "info breakpoints", @@ -285,10 +289,12 @@ proc tcatch_fork_parent_follow {} { global gdb_prompt global srcfile + global reading_in_symbols_re set bp_after_fork [gdb_get_line_number "set breakpoint here"] - gdb_test "catch fork" "Catchpoint \[0-9\]* \\(fork\\)" \ + gdb_test "catch fork" \ + "Catchpoint \[0-9\]* \\(fork\\)$reading_in_symbols_re" \ "explicit parent follow, set tcatch fork" # ??rehrauer: I don't yet know how to get the id of the tcatch diff -Nru gdb-9.1/gdb/testsuite/gdb.base/foll-vfork.c gdb-10.2/gdb/testsuite/gdb.base/foll-vfork.c --- gdb-9.1/gdb/testsuite/gdb.base/foll-vfork.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/foll-vfork.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 1997-2020 Free Software Foundation, Inc. + Copyright 1997-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/foll-vfork-exit.c gdb-10.2/gdb/testsuite/gdb.base/foll-vfork-exit.c --- gdb-9.1/gdb/testsuite/gdb.base/foll-vfork-exit.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/foll-vfork-exit.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 1997-2020 Free Software Foundation, Inc. + Copyright 1997-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/foll-vfork.exp gdb-10.2/gdb/testsuite/gdb.base/foll-vfork.exp --- gdb-9.1/gdb/testsuite/gdb.base/foll-vfork.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/foll-vfork.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1997-2020 Free Software Foundation, Inc. +# Copyright 1997-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/fork-print-inferior-events.c gdb-10.2/gdb/testsuite/gdb.base/fork-print-inferior-events.c --- gdb-9.1/gdb/testsuite/gdb.base/fork-print-inferior-events.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/fork-print-inferior-events.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2007-2020 Free Software Foundation, Inc. + Copyright 2007-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/fork-print-inferior-events.exp gdb-10.2/gdb/testsuite/gdb.base/fork-print-inferior-events.exp --- gdb-9.1/gdb/testsuite/gdb.base/fork-print-inferior-events.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/fork-print-inferior-events.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2007-2020 Free Software Foundation, Inc. +# Copyright 2007-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/fork-running-state.c gdb-10.2/gdb/testsuite/gdb.base/fork-running-state.c --- gdb-9.1/gdb/testsuite/gdb.base/fork-running-state.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/fork-running-state.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -20,6 +20,7 @@ #include <sys/types.h> #include <sys/wait.h> #include <errno.h> +#include <signal.h> int save_parent; diff -Nru gdb-9.1/gdb/testsuite/gdb.base/fork-running-state.exp gdb-10.2/gdb/testsuite/gdb.base/fork-running-state.exp --- gdb-9.1/gdb/testsuite/gdb.base/fork-running-state.exp 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/fork-running-state.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2016-2020 Free Software Foundation, Inc. +# Copyright (C) 2016-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -98,30 +98,19 @@ set not_nl "\[^\r\n\]*" - if {$detach_on_fork == "on" && $non_stop == "on" && $follow_fork == "child"} { + if {$detach_on_fork == "on" && $follow_fork == "child"} { gdb_test "info threads" \ " 2.1 ${not_nl}\\\(running\\\).*No selected thread.*" - } elseif {$detach_on_fork == "on" && $follow_fork == "child"} { - gdb_test "info threads" \ - "\\\* 2.1 ${not_nl}\\\(running\\\)" } elseif {$detach_on_fork == "on"} { gdb_test "info threads" \ "\\\* 1 ${not_nl}\\\(running\\\)" - } elseif {$non_stop == "on" - || ($schedule_multiple == "on" && $follow_fork == "parent")} { + } elseif {$non_stop == "on" || $schedule_multiple == "on"} { # Both parent and child should be marked running, and the # parent should be selected. gdb_test "info threads" \ [multi_line \ "\\\* 1.1 ${not_nl} \\\(running\\\)${not_nl}" \ " 2.1 ${not_nl} \\\(running\\\)"] - } elseif {$schedule_multiple == "on" && $follow_fork == "child"} { - # Both parent and child should be marked running, and the - # child should be selected. - gdb_test "info threads" \ - [multi_line \ - " 1.1 ${not_nl} \\\(running\\\)${not_nl}" \ - "\\\* 2.1 ${not_nl} \\\(running\\\)"] } else { set test "only $follow_fork marked running" gdb_test_multiple "info threads" $test { @@ -131,7 +120,7 @@ -re "\\\* 1.1 ${not_nl}\\\(running\\\)\r\n 2.1 ${not_nl}\r\n$gdb_prompt $" { gdb_assert [string eq $follow_fork "parent"] $test } - -re "1.1 ${not_nl}\r\n\\\* 2.1 ${not_nl}\\\(running\\\)\r\n$gdb_prompt $" { + -re "\\\* 1.1 ${not_nl}\r\n 2.1 ${not_nl}\\\(running\\\)\r\n$gdb_prompt $" { gdb_assert [string eq $follow_fork "child"] $test } } diff -Nru gdb-9.1/gdb/testsuite/gdb.base/fortran-sym-case.c gdb-10.2/gdb/testsuite/gdb.base/fortran-sym-case.c --- gdb-9.1/gdb/testsuite/gdb.base/fortran-sym-case.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/fortran-sym-case.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/fortran-sym-case.exp gdb-10.2/gdb/testsuite/gdb.base/fortran-sym-case.exp --- gdb-9.1/gdb/testsuite/gdb.base/fortran-sym-case.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/fortran-sym-case.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2011-2020 Free Software Foundation, Inc. +# Copyright (C) 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/frameapply.c gdb-10.2/gdb/testsuite/gdb.base/frameapply.c --- gdb-9.1/gdb/testsuite/gdb.base/frameapply.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/frameapply.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2018-2020 Free Software Foundation, Inc. + Copyright 2018-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/frameapply.exp gdb-10.2/gdb/testsuite/gdb.base/frameapply.exp --- gdb-9.1/gdb/testsuite/gdb.base/frameapply.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/frameapply.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2018-2020 Free Software Foundation, Inc. +# Copyright 2018-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/frame-args.c gdb-10.2/gdb/testsuite/gdb.base/frame-args.c --- gdb-9.1/gdb/testsuite/gdb.base/frame-args.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/frame-args.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2007-2020 Free Software Foundation, Inc. + Copyright 2007-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/frame-args.exp gdb-10.2/gdb/testsuite/gdb.base/frame-args.exp --- gdb-9.1/gdb/testsuite/gdb.base/frame-args.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/frame-args.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2007-2020 Free Software Foundation, Inc. +# Copyright 2007-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/frame-selection.c gdb-10.2/gdb/testsuite/gdb.base/frame-selection.c --- gdb-9.1/gdb/testsuite/gdb.base/frame-selection.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/frame-selection.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2018-2020 Free Software Foundation, Inc. +/* Copyright 2018-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.base/frame-selection.exp gdb-10.2/gdb/testsuite/gdb.base/frame-selection.exp --- gdb-9.1/gdb/testsuite/gdb.base/frame-selection.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/frame-selection.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2018-2020 Free Software Foundation, Inc. +# Copyright 2018-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/freebpcmd.c gdb-10.2/gdb/testsuite/gdb.base/freebpcmd.c --- gdb-9.1/gdb/testsuite/gdb.base/freebpcmd.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/freebpcmd.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Test program for GDB crashes while doing bp commands that continue inferior. - Copyright 2003-2020 Free Software Foundation, Inc. + Copyright 2003-2021 Free Software Foundation, Inc. This file is part of the gdb testsuite. diff -Nru gdb-9.1/gdb/testsuite/gdb.base/freebpcmd.exp gdb-10.2/gdb/testsuite/gdb.base/freebpcmd.exp --- gdb-9.1/gdb/testsuite/gdb.base/freebpcmd.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/freebpcmd.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2003-2020 Free Software Foundation, Inc. +# Copyright 2003-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/fullname.c gdb-10.2/gdb/testsuite/gdb.base/fullname.c --- gdb-9.1/gdb/testsuite/gdb.base/fullname.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/fullname.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2008-2020 Free Software Foundation, Inc. + Copyright 2008-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/fullname.exp gdb-10.2/gdb/testsuite/gdb.base/fullname.exp --- gdb-9.1/gdb/testsuite/gdb.base/fullname.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/fullname.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/fullpath-expand.c gdb-10.2/gdb/testsuite/gdb.base/fullpath-expand.c --- gdb-9.1/gdb/testsuite/gdb.base/fullpath-expand.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/fullpath-expand.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/fullpath-expand.exp gdb-10.2/gdb/testsuite/gdb.base/fullpath-expand.exp --- gdb-9.1/gdb/testsuite/gdb.base/fullpath-expand.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/fullpath-expand.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2013-2020 Free Software Foundation, Inc. +# Copyright (C) 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/fullpath-expand-func.c gdb-10.2/gdb/testsuite/gdb.base/fullpath-expand-func.c --- gdb-9.1/gdb/testsuite/gdb.base/fullpath-expand-func.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/fullpath-expand-func.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/funcargs.exp gdb-10.2/gdb/testsuite/gdb.base/funcargs.exp --- gdb-9.1/gdb/testsuite/gdb.base/funcargs.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/funcargs.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1992-2020 Free Software Foundation, Inc. +# Copyright 1992-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -248,13 +248,13 @@ # Run; should stop at call1a and print actual arguments. gdb_run_cmd - gdb_test "" " callca \\(f1=1 \\+ 2 \\* I, f2=1 \\+ 2 \\* I, f3=1 \\+ 2 \\* I\\) .*" "run to call2a" + gdb_test "" " callca \\(f1=1 \\+ 2i, f2=1 \\+ 2i, f3=1 \\+ 2i\\) .*" "run to call2a" - gdb_test "cont" ".* callcb \\(d1=3 \\+ 4 \\* I, d2=3 \\+ 4 \\* I, d3=3 \\+ 4 \\* I\\) .*" "continue to callcb" - gdb_test "cont" ".* callcc \\(ld1=5 \\+ 6 \\* I, ld2=5 \\+ 6 \\* I, ld3=5 \\+ 6 \\* I\\) .*" "continue to callcc" - gdb_test "cont" ".* callcd \\(fc1=1 \\+ 2 \\* I, dc1=3 \\+ 4 \\* I, ldc1=5 \\+ 6 \\* I\\) .*" "continue to callcd" - gdb_test "cont" ".* callce \\(dc1=3 \\+ 4 \\* I, ldc1=5 \\+ 6 \\* I, fc1=1 \\+ 2 \\* I\\) .*" "continue to callce" - gdb_test "cont" ".* callcf \\(ldc1=5 \\+ 6 \\* I, fc1=1 \\+ 2 \\* I, dc1=3 \\+ 4 \\* I\\) .*" "continue to callcf" + gdb_test "cont" ".* callcb \\(d1=3 \\+ 4i, d2=3 \\+ 4i, d3=3 \\+ 4i\\) .*" "continue to callcb" + gdb_test "cont" ".* callcc \\(ld1=5 \\+ 6i, ld2=5 \\+ 6i, ld3=5 \\+ 6i\\) .*" "continue to callcc" + gdb_test "cont" ".* callcd \\(fc1=1 \\+ 2i, dc1=3 \\+ 4i, ldc1=5 \\+ 6i\\) .*" "continue to callcd" + gdb_test "cont" ".* callce \\(dc1=3 \\+ 4i, ldc1=5 \\+ 6i, fc1=1 \\+ 2i\\) .*" "continue to callce" + gdb_test "cont" ".* callcf \\(ldc1=5 \\+ 6i, fc1=1 \\+ 2i, dc1=3 \\+ 4i\\) .*" "continue to callcf" } @@ -271,9 +271,9 @@ # Run; should stop at call1a and print actual arguments. gdb_run_cmd - gdb_test "" " callc1a \\(c=97 'a', s=1, i=2, ui=7, l=3, fc1=1 \\+ 2 \\* I, dc1=3 \\+ 4 \\* I, ldc1=5 \\+ 6 \\* I\\) .*" "run to callc1a" + gdb_test "" " callc1a \\(c=97 'a', s=1, i=2, ui=7, l=3, fc1=1 \\+ 2i, dc1=3 \\+ 4i, ldc1=5 \\+ 6i\\) .*" "run to callc1a" - gdb_test "cont" ".* callc1b \\(ldc1=5 \\+ 6 \\* I\\, c=97 'a', s=1, i=2, fc1=1 \\+ 2 \\* I, ui=7, l=3, dc1=3 \\+ 4 \\* I\\) .*" "continue to callc1b" + gdb_test "cont" ".* callc1b \\(ldc1=5 \\+ 6i\\, c=97 'a', s=1, i=2, fc1=1 \\+ 2i, ui=7, l=3, dc1=3 \\+ 4i\\) .*" "continue to callc1b" } # @@ -289,9 +289,9 @@ # Run; should stop at call1a and print actual arguments. gdb_run_cmd - gdb_test "" " callc2a \\(c=97 'a', s=1, i=2, ui=7, l=3, f=4, d=5, fc1=1 \\+ 2 \\* I, dc1=3 \\+ 4 \\* I, ldc1=5 \\+ 6 \\* I\\) .*" "run to callc2a" + gdb_test "" " callc2a \\(c=97 'a', s=1, i=2, ui=7, l=3, f=4, d=5, fc1=1 \\+ 2i, dc1=3 \\+ 4i, ldc1=5 \\+ 6i\\) .*" "run to callc2a" - gdb_test "cont" ".* callc2b \\(fc1=1 \\+ 2 \\* I, c=97 'a', s=1, i=2, ui=7, ldc1=5 \\+ 6 \\* I\\, l=3, f=4, d=5, dc1=3 \\+ 4 \\* I\\) .*" "continue to callc2b" + gdb_test "cont" ".* callc2b \\(fc1=1 \\+ 2i, c=97 'a', s=1, i=2, ui=7, ldc1=5 \\+ 6i\\, l=3, f=4, d=5, dc1=3 \\+ 4i\\) .*" "continue to callc2b" } # diff -Nru gdb-9.1/gdb/testsuite/gdb.base/func-ptr.c gdb-10.2/gdb/testsuite/gdb.base/func-ptr.c --- gdb-9.1/gdb/testsuite/gdb.base/func-ptr.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/func-ptr.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/func-ptr.exp gdb-10.2/gdb/testsuite/gdb.base/func-ptr.exp --- gdb-9.1/gdb/testsuite/gdb.base/func-ptr.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/func-ptr.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/func-ptrs.c gdb-10.2/gdb/testsuite/gdb.base/func-ptrs.c --- gdb-9.1/gdb/testsuite/gdb.base/func-ptrs.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/func-ptrs.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/func-ptrs.exp gdb-10.2/gdb/testsuite/gdb.base/func-ptrs.exp --- gdb-9.1/gdb/testsuite/gdb.base/func-ptrs.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/func-ptrs.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/gcore-buffer-overflow.c gdb-10.2/gdb/testsuite/gdb.base/gcore-buffer-overflow.c --- gdb-9.1/gdb/testsuite/gdb.base/gcore-buffer-overflow.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/gcore-buffer-overflow.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2007-2020 Free Software Foundation, Inc. +/* Copyright 2007-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.base/gcore-buffer-overflow.exp gdb-10.2/gdb/testsuite/gdb.base/gcore-buffer-overflow.exp --- gdb-9.1/gdb/testsuite/gdb.base/gcore-buffer-overflow.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/gcore-buffer-overflow.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2007-2020 Free Software Foundation, Inc. +# Copyright 2007-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/gcore.c gdb-10.2/gdb/testsuite/gdb.base/gcore.c --- gdb-9.1/gdb/testsuite/gdb.base/gcore.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/gcore.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2002-2020 Free Software Foundation, Inc. +/* Copyright 2002-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.base/gcore.exp gdb-10.2/gdb/testsuite/gdb.base/gcore.exp --- gdb-9.1/gdb/testsuite/gdb.base/gcore.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/gcore.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2002-2020 Free Software Foundation, Inc. +# Copyright 2002-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/gcore-relro.exp gdb-10.2/gdb/testsuite/gdb.base/gcore-relro.exp --- gdb-9.1/gdb/testsuite/gdb.base/gcore-relro.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/gcore-relro.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/gcore-relro-lib.c gdb-10.2/gdb/testsuite/gdb.base/gcore-relro-lib.c --- gdb-9.1/gdb/testsuite/gdb.base/gcore-relro-lib.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/gcore-relro-lib.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2010-2020 Free Software Foundation, Inc. +/* Copyright 2010-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.base/gcore-relro-main.c gdb-10.2/gdb/testsuite/gdb.base/gcore-relro-main.c --- gdb-9.1/gdb/testsuite/gdb.base/gcore-relro-main.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/gcore-relro-main.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2010-2020 Free Software Foundation, Inc. +/* Copyright 2010-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.base/gcore-relro-pie.c gdb-10.2/gdb/testsuite/gdb.base/gcore-relro-pie.c --- gdb-9.1/gdb/testsuite/gdb.base/gcore-relro-pie.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/gcore-relro-pie.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2013-2020 Free Software Foundation, Inc. +/* Copyright 2013-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -18,7 +18,7 @@ void break_here (void) { - *(int *) 0 = 0; + *(volatile int *) 0 = 0; } void diff -Nru gdb-9.1/gdb/testsuite/gdb.base/gcore-relro-pie.exp gdb-10.2/gdb/testsuite/gdb.base/gcore-relro-pie.exp --- gdb-9.1/gdb/testsuite/gdb.base/gcore-relro-pie.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/gcore-relro-pie.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/gcore-tls-pie.c gdb-10.2/gdb/testsuite/gdb.base/gcore-tls-pie.c --- gdb-9.1/gdb/testsuite/gdb.base/gcore-tls-pie.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/gcore-tls-pie.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2013-2020 Free Software Foundation, Inc. +/* Copyright 2013-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -25,7 +25,7 @@ void break_here (void) { - *(int *) 0 = 0; + *(volatile int *) 0 = 0; } void diff -Nru gdb-9.1/gdb/testsuite/gdb.base/gcore-tls-pie.exp gdb-10.2/gdb/testsuite/gdb.base/gcore-tls-pie.exp --- gdb-9.1/gdb/testsuite/gdb.base/gcore-tls-pie.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/gcore-tls-pie.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -19,6 +19,10 @@ standard_testfile +if { [have_fuse_ld_gold] == 0} { + return -1 +} + if {[prepare_for_testing "failed to prepare" $testfile $srcfile {debug additional_flags=-fpie "ldflags=-pie -fuse-ld=gold"}]} { return -1 } diff -Nru gdb-9.1/gdb/testsuite/gdb.base/gdb1056.exp gdb-10.2/gdb/testsuite/gdb.base/gdb1056.exp --- gdb-9.1/gdb/testsuite/gdb.base/gdb1056.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/gdb1056.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2003-2020 Free Software Foundation, Inc. +# Copyright 2003-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/gdb1090.c gdb-10.2/gdb/testsuite/gdb.base/gdb1090.c --- gdb-9.1/gdb/testsuite/gdb.base/gdb1090.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/gdb1090.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Test program for multi-register variable. - Copyright 2003-2020 Free Software Foundation, Inc. + Copyright 2003-2021 Free Software Foundation, Inc. This file is part of the gdb testsuite. diff -Nru gdb-9.1/gdb/testsuite/gdb.base/gdb1090.exp gdb-10.2/gdb/testsuite/gdb.base/gdb1090.exp --- gdb-9.1/gdb/testsuite/gdb.base/gdb1090.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/gdb1090.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2003-2020 Free Software Foundation, Inc. +# Copyright 2003-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/gdb11530.c gdb-10.2/gdb/testsuite/gdb.base/gdb11530.c --- gdb-9.1/gdb/testsuite/gdb.base/gdb11530.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/gdb11530.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. Contributed by Pierre Muller. diff -Nru gdb-9.1/gdb/testsuite/gdb.base/gdb11530.exp gdb-10.2/gdb/testsuite/gdb.base/gdb11530.exp --- gdb-9.1/gdb/testsuite/gdb.base/gdb11530.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/gdb11530.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/gdb11531.c gdb-10.2/gdb/testsuite/gdb.base/gdb11531.c --- gdb-9.1/gdb/testsuite/gdb.base/gdb11531.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/gdb11531.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. Contributed by Pierre Muller. diff -Nru gdb-9.1/gdb/testsuite/gdb.base/gdb11531.exp gdb-10.2/gdb/testsuite/gdb.base/gdb11531.exp --- gdb-9.1/gdb/testsuite/gdb.base/gdb11531.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/gdb11531.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/gdb1250.c gdb-10.2/gdb/testsuite/gdb.base/gdb1250.c --- gdb-9.1/gdb/testsuite/gdb.base/gdb1250.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/gdb1250.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Test program for stack trace through noreturn function. - Copyright 2003-2020 Free Software Foundation, Inc. + Copyright 2003-2021 Free Software Foundation, Inc. This file is part of the gdb testsuite. diff -Nru gdb-9.1/gdb/testsuite/gdb.base/gdb1250.exp gdb-10.2/gdb/testsuite/gdb.base/gdb1250.exp --- gdb-9.1/gdb/testsuite/gdb.base/gdb1250.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/gdb1250.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2003-2020 Free Software Foundation, Inc. +# Copyright 2003-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/gdb1555.c gdb-10.2/gdb/testsuite/gdb.base/gdb1555.c --- gdb-9.1/gdb/testsuite/gdb.base/gdb1555.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/gdb1555.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Test step/next in a shared library - Copyright 2004-2020 Free Software Foundation, Inc. + Copyright 2004-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.base/gdb1555.exp gdb-10.2/gdb/testsuite/gdb.base/gdb1555.exp --- gdb-9.1/gdb/testsuite/gdb.base/gdb1555.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/gdb1555.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2004-2020 Free Software Foundation, Inc. +# Copyright 2004-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/gdb1555-main.c gdb-10.2/gdb/testsuite/gdb.base/gdb1555-main.c --- gdb-9.1/gdb/testsuite/gdb.base/gdb1555-main.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/gdb1555-main.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Test step/next in a shared library - Copyright 2004-2020 Free Software Foundation, Inc. + Copyright 2004-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.base/gdb1821.c gdb-10.2/gdb/testsuite/gdb.base/gdb1821.c --- gdb-9.1/gdb/testsuite/gdb.base/gdb1821.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/gdb1821.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Test printing of structure member names in gdb. PR exp/1821 - Copyright 2005-2020 Free Software Foundation, Inc. + Copyright 2005-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.base/gdb1821.exp gdb-10.2/gdb/testsuite/gdb.base/gdb1821.exp --- gdb-9.1/gdb/testsuite/gdb.base/gdb1821.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/gdb1821.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2005-2020 Free Software Foundation, Inc. +# Copyright 2005-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/gdb-caching-proc.exp gdb-10.2/gdb/testsuite/gdb.base/gdb-caching-proc.exp --- gdb-9.1/gdb/testsuite/gdb.base/gdb-caching-proc.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/gdb-caching-proc.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2018-2020 Free Software Foundation, Inc. +# Copyright 2018-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -28,7 +28,9 @@ set resultlist [list] - set first [$real_name] + with_test_prefix initial { + set first [gdb_do_cache_wrap $real_name] + } lappend resultlist $first # Ten repetitions was enough to trigger target_supports_scheduler_locking, @@ -37,7 +39,9 @@ set racy 0 for {set i 0} {$i < $repeat} {incr i} { - set rerun [$real_name] + with_test_prefix $i { + set rerun [gdb_do_cache_wrap $real_name] + } lappend resultlist $rerun if { $rerun != $first } { set racy 1 @@ -45,9 +49,9 @@ } if { $racy == 0 } { - pass "$name consistency" + pass "consistency" } else { - fail "$name consistency" + fail "consistency" verbose -log "$name: $resultlist" } } @@ -77,20 +81,22 @@ } foreach procname $procnames { - switch $procname { - "is_address_zero_readable" { set setup_gdb 1 } - "target_is_gdbserver" { set setup_gdb 1 } - default {set setup_gdb 0 } - } - - if { $setup_gdb } { - clean_restart $obj - } - - test_proc $procname - - if { $setup_gdb } { - gdb_exit + with_test_prefix $procname { + switch $procname { + "is_address_zero_readable" { set setup_gdb 1 } + "target_is_gdbserver" { set setup_gdb 1 } + default {set setup_gdb 0 } + } + + if { $setup_gdb } { + clean_restart $obj + } + + test_proc $procname + + if { $setup_gdb } { + gdb_exit + } } } } diff -Nru gdb-9.1/gdb/testsuite/gdb.base/gdbhistsize-history.exp gdb-10.2/gdb/testsuite/gdb.base/gdbhistsize-history.exp --- gdb-9.1/gdb/testsuite/gdb.base/gdbhistsize-history.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/gdbhistsize-history.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/gdbindex-stabs.c gdb-10.2/gdb/testsuite/gdb.base/gdbindex-stabs.c --- gdb-9.1/gdb/testsuite/gdb.base/gdbindex-stabs.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/gdbindex-stabs.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/gdbindex-stabs-dwarf.c gdb-10.2/gdb/testsuite/gdb.base/gdbindex-stabs-dwarf.c --- gdb-9.1/gdb/testsuite/gdb.base/gdbindex-stabs-dwarf.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/gdbindex-stabs-dwarf.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/gdbindex-stabs.exp gdb-10.2/gdb/testsuite/gdb.base/gdbindex-stabs.exp --- gdb-9.1/gdb/testsuite/gdb.base/gdbindex-stabs.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/gdbindex-stabs.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2011-2020 Free Software Foundation, Inc. +# Copyright (C) 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/gdbinit-history.exp gdb-10.2/gdb/testsuite/gdb.base/gdbinit-history.exp --- gdb-9.1/gdb/testsuite/gdb.base/gdbinit-history.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/gdbinit-history.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -128,6 +128,154 @@ } } +# Check that the current command history matches HIST, which is a list +# of commands, oldest fist. +proc check_history { hist } { + + # The show commands we issue here always appears last in the + # commands list. + lappend hist "show commands" + + # Number all of the entries in the HIST list and convert the list + # into a pattern to match against GDB. + set hist_lines [list] + set idx 1 + foreach h $hist { + lappend hist_lines " $idx $h" + incr idx + } + set pattern [eval multi_line $hist_lines] + + # Check the history. + gdb_test "show commands" "$pattern.*" +} + +# Run 'show history filename' and check the output contains the +# filename matching PATTERN, unless, PATTERN is the empty string, in +# which case match a different output that GDB will give if the +# history filename is the empty string. +# +# TESTNAME is the name for the test, which defaults to the command run +# in the test. +proc check_history_filename { pattern {testname ""} } { + + set cmd "show history filename" + if { $testname == "" } { + set testname $cmd + } + + if { $pattern == "" } { + gdb_test $cmd \ + "There is no filename currently set for recording the command history in." \ + $testname + } else { + gdb_test $cmd \ + "The filename in which to record the command history is \"$pattern\"\." \ + $testname + } +} + +# Tests for how GDB handles setting the history filename to the empty +# string. +proc test_empty_history_filename { } { + global env + global gdb_prompt + + set common_history [list "set height 0" "set width 0"] + + set test_dir [standard_output_file history_test] + remote_exec host "mkdir -p $test_dir" + foreach entry { { ".gdb_history" "xxxxx" } \ + { "_gdb_history" "xxxxx" } \ + { "alt_history" "yyyyy" } } { + set fn [lindex $entry 0] + set content [lindex $entry 1] + set fd [open [standard_output_file "$test_dir/$fn"] w] + puts $fd "$content" + close $fd + } + + with_cwd "$test_dir" { + with_test_prefix "load default history file" { + # Start GDB and see that the history file was loaded + # correctly. + gdb_exit + gdb_start + check_history [concat "xxxxx" $common_history] + check_history_filename ".*/.gdb_history" + } + + with_test_prefix "load GDBHISTFILE history file" { + # Now restart GDB with GDBHISTFILE set to see that the + # "other" history file is loaded. + save_vars { env(GDBHISTFILE) } { + setenv GDBHISTFILE \ + "$test_dir/alt_history" + gdb_exit + gdb_start + check_history [concat "yyyyy" $common_history] + check_history_filename ".*/alt_history" + } + } + + with_test_prefix "GDBHISTFILE is empty" { + # Now restart GDB with GDBHISTFILE set to indicate don't + # load any history file, check none was loaded. + save_vars { env(GDBHISTFILE) } { + setenv GDBHISTFILE "" + gdb_exit + gdb_start + check_history $common_history + check_history_filename "" + } + + # Check that 'show history save' does the right thing when + # the history filename is the empty string. + gdb_test_no_output "set history save off" \ + "ensure history save is off initially" + gdb_test "show history save" \ + "Saving of the history record on exit is off." \ + "Check history save is off" + gdb_test_no_output "set history save on" + gdb_test "show history save" \ + "Saving of the history is disabled due to the value of 'history filename'." \ + "Check history save is off due to filename" + gdb_test_no_output \ + "set history filename $test_dir/alt_history" \ + "set history filename at the command line" + check_history_filename ".*/alt_history" \ + "check filename after setting at the command line" + gdb_test "show history save" \ + "Saving of the history record on exit is on." \ + "Check history save is on" + gdb_test_no_output "set history filename" + gdb_test "show history save" \ + "Saving of the history is disabled due to the value of 'history filename'." \ + "Check history save is off due to filename again" + gdb_test_no_output "set history save off" + } + + with_test_prefix "Use -ex to clear history file" { + # Now restart GDB with the command line '-ex' to indicate + # no history file should be loaded. + gdb_exit + if {[gdb_spawn_with_cmdline_opts \ + "-ex \"set history filename\""] != 0} { + fail "spawn" + return + } + set test "initial prompt" + gdb_test_multiple "" $test { + -re ".*$gdb_prompt $" { + pass "$test" + } + } + check_history [list] + check_history_filename "" + } + } +} + test_gdbinit_history_setting "gdbinit-history/unlimited" "unlimited" test_gdbinit_history_setting "gdbinit-history/zero" "0" @@ -138,3 +286,6 @@ # .gdbinit file. test_gdbinit_history_setting "gdbinit-history/unlimited" "1000" "1000" test_gdbinit_history_setting "gdbinit-history/unlimited" "unlimited" "foo" + +# Check handling of empty history filename. +test_empty_history_filename diff -Nru gdb-9.1/gdb/testsuite/gdb.base/gdb-sigterm-2.exp gdb-10.2/gdb/testsuite/gdb.base/gdb-sigterm-2.exp --- gdb-9.1/gdb/testsuite/gdb.base/gdb-sigterm-2.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/gdb-sigterm-2.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. # -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/gdb-sigterm.c gdb-10.2/gdb/testsuite/gdb.base/gdb-sigterm.c --- gdb-9.1/gdb/testsuite/gdb.base/gdb-sigterm.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/gdb-sigterm.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/gdb-sigterm.exp gdb-10.2/gdb/testsuite/gdb.base/gdb-sigterm.exp --- gdb-9.1/gdb/testsuite/gdb.base/gdb-sigterm.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/gdb-sigterm.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. # -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -53,7 +53,7 @@ set test "run a bit #$pass" set abort 1 gdb_test_multiple "step" $test { - -re "infrun: stepping inside range" { + -re {\[infrun\] process_event_stop_test: stepping inside range} { # Suppress pass $test verbose -log "$pf_prefix $test: ran" set abort 0 @@ -78,7 +78,7 @@ verbose -log "$pf_prefix $test: got eof" set abort 0 } - -re "infrun: stepping inside range" { + -re "infrun: process_event_stop_test: stepping inside range" { incr stepping exp_continue } diff -Nru gdb-9.1/gdb/testsuite/gdb.base/gdbvars.exp gdb-10.2/gdb/testsuite/gdb.base/gdbvars.exp --- gdb-9.1/gdb/testsuite/gdb.base/gdbvars.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/gdbvars.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 1992-2020 Free Software Foundation, Inc. +# Copyright (C) 1992-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/global-var-nested-by-dso.c gdb-10.2/gdb/testsuite/gdb.base/global-var-nested-by-dso.c --- gdb-9.1/gdb/testsuite/gdb.base/global-var-nested-by-dso.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/global-var-nested-by-dso.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2014-2020 Free Software Foundation, Inc. +/* Copyright 2014-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.base/global-var-nested-by-dso.exp gdb-10.2/gdb/testsuite/gdb.base/global-var-nested-by-dso.exp --- gdb-9.1/gdb/testsuite/gdb.base/global-var-nested-by-dso.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/global-var-nested-by-dso.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/global-var-nested-by-dso-solib1.c gdb-10.2/gdb/testsuite/gdb.base/global-var-nested-by-dso-solib1.c --- gdb-9.1/gdb/testsuite/gdb.base/global-var-nested-by-dso-solib1.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/global-var-nested-by-dso-solib1.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2014-2020 Free Software Foundation, Inc. +/* Copyright 2014-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.base/global-var-nested-by-dso-solib2.c gdb-10.2/gdb/testsuite/gdb.base/global-var-nested-by-dso-solib2.c --- gdb-9.1/gdb/testsuite/gdb.base/global-var-nested-by-dso-solib2.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/global-var-nested-by-dso-solib2.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2014-2020 Free Software Foundation, Inc. +/* Copyright 2014-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.base/gnu-debugdata.c gdb-10.2/gdb/testsuite/gdb.base/gnu-debugdata.c --- gdb-9.1/gdb/testsuite/gdb.base/gnu-debugdata.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/gnu-debugdata.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/gnu-debugdata.exp gdb-10.2/gdb/testsuite/gdb.base/gnu-debugdata.exp --- gdb-9.1/gdb/testsuite/gdb.base/gnu-debugdata.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/gnu-debugdata.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/gnu-ifunc.c gdb-10.2/gdb/testsuite/gdb.base/gnu-ifunc.c --- gdb-9.1/gdb/testsuite/gdb.base/gnu-ifunc.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/gnu-ifunc.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2009-2020 Free Software Foundation, Inc. + Copyright 2009-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/gnu-ifunc.exp gdb-10.2/gdb/testsuite/gdb.base/gnu-ifunc.exp --- gdb-9.1/gdb/testsuite/gdb.base/gnu-ifunc.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/gnu-ifunc.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2009-2020 Free Software Foundation, Inc. +# Copyright (C) 2009-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/gnu-ifunc-final.c gdb-10.2/gdb/testsuite/gdb.base/gnu-ifunc-final.c --- gdb-9.1/gdb/testsuite/gdb.base/gnu-ifunc-final.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/gnu-ifunc-final.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2009-2020 Free Software Foundation, Inc. + Copyright 2009-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/gnu-ifunc-lib.c gdb-10.2/gdb/testsuite/gdb.base/gnu-ifunc-lib.c --- gdb-9.1/gdb/testsuite/gdb.base/gnu-ifunc-lib.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/gnu-ifunc-lib.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2009-2020 Free Software Foundation, Inc. + Copyright 2009-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/gnu_vector.c gdb-10.2/gdb/testsuite/gdb.base/gnu_vector.c --- gdb-9.1/gdb/testsuite/gdb.base/gnu_vector.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/gnu_vector.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/gnu_vector.exp gdb-10.2/gdb/testsuite/gdb.base/gnu_vector.exp --- gdb-9.1/gdb/testsuite/gdb.base/gnu_vector.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/gnu_vector.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/gold-gdb-index-2.c gdb-10.2/gdb/testsuite/gdb.base/gold-gdb-index-2.c --- gdb-9.1/gdb/testsuite/gdb.base/gold-gdb-index-2.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/gold-gdb-index-2.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,23 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "gold-gdb-index.h" + +namespace N1 +{ + void bar () { C1::baz (); } +} diff -Nru gdb-9.1/gdb/testsuite/gdb.base/gold-gdb-index.c gdb-10.2/gdb/testsuite/gdb.base/gold-gdb-index.c --- gdb-9.1/gdb/testsuite/gdb.base/gold-gdb-index.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/gold-gdb-index.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,29 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "gold-gdb-index.h" + +namespace N1 +{ + void foo () { C1::baz (); } +} + +int +main () +{ + return 0; +} diff -Nru gdb-9.1/gdb/testsuite/gdb.base/gold-gdb-index.exp gdb-10.2/gdb/testsuite/gdb.base/gold-gdb-index.exp --- gdb-9.1/gdb/testsuite/gdb.base/gold-gdb-index.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/gold-gdb-index.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,52 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +# This tests the gdb workaround for PR binutils/15646. + +standard_testfile .c gold-gdb-index-2.c + +if { [have_fuse_ld_gold] == 0} { + return -1 +} + +if {[prepare_for_testing "failed to prepare" $testfile "$srcfile $srcfile2" \ + {debug c++ additional_flags=-fuse-ld=gold \ + additional_flags=-Wl,--gdb-index \ + additional_flags=-ggnu-pubnames}]} { + return -1 +} + +if { [readnow] } { + return -1 +} + +gdb_test_no_output "set auto-solib-add off" + +if ![runto_main] then { + fail "can't run to main" + return 0 +} + +gdb_test_no_output "set breakpoint pending off" +gdb_test "break N1::misspelled" "Function \"N1::misspelled\" not defined\." + +gdb_test_multiple "maint info symtabs" "" { + -re -wrap "\{ symtab \[^\r\n\]*gold-gdb-index-2.c.*" { + fail $gdb_test_name + } + -re -wrap "" { + pass $gdb_test_name + } +} diff -Nru gdb-9.1/gdb/testsuite/gdb.base/gold-gdb-index.h gdb-10.2/gdb/testsuite/gdb.base/gold-gdb-index.h --- gdb-9.1/gdb/testsuite/gdb.base/gold-gdb-index.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/gold-gdb-index.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,25 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +namespace N1 +{ + class C1 + { + public: + static void baz () {} + }; +} diff -Nru gdb-9.1/gdb/testsuite/gdb.base/hashline1.exp gdb-10.2/gdb/testsuite/gdb.base/hashline1.exp --- gdb-9.1/gdb/testsuite/gdb.base/hashline1.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/hashline1.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/hashline2.exp gdb-10.2/gdb/testsuite/gdb.base/hashline2.exp --- gdb-9.1/gdb/testsuite/gdb.base/hashline2.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/hashline2.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/hashline3.exp gdb-10.2/gdb/testsuite/gdb.base/hashline3.exp --- gdb-9.1/gdb/testsuite/gdb.base/hashline3.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/hashline3.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/hbreak2.exp gdb-10.2/gdb/testsuite/gdb.base/hbreak2.exp --- gdb-9.1/gdb/testsuite/gdb.base/hbreak2.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/hbreak2.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1988-2020 Free Software Foundation, Inc. +# Copyright 1988-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/hbreak.c gdb-10.2/gdb/testsuite/gdb.base/hbreak.c --- gdb-9.1/gdb/testsuite/gdb.base/hbreak.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/hbreak.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2009-2020 Free Software Foundation, Inc. + Copyright 2009-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/hbreak.exp gdb-10.2/gdb/testsuite/gdb.base/hbreak.exp --- gdb-9.1/gdb/testsuite/gdb.base/hbreak.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/hbreak.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2009-2020 Free Software Foundation, Inc. +# Copyright 2009-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/hbreak-in-shr-unsupported.c gdb-10.2/gdb/testsuite/gdb.base/hbreak-in-shr-unsupported.c --- gdb-9.1/gdb/testsuite/gdb.base/hbreak-in-shr-unsupported.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/hbreak-in-shr-unsupported.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2004-2020 Free Software Foundation, Inc. + Copyright 2004-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/hbreak-in-shr-unsupported.exp gdb-10.2/gdb/testsuite/gdb.base/hbreak-in-shr-unsupported.exp --- gdb-9.1/gdb/testsuite/gdb.base/hbreak-in-shr-unsupported.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/hbreak-in-shr-unsupported.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/hbreak-in-shr-unsupported-shr.c gdb-10.2/gdb/testsuite/gdb.base/hbreak-in-shr-unsupported-shr.c --- gdb-9.1/gdb/testsuite/gdb.base/hbreak-in-shr-unsupported-shr.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/hbreak-in-shr-unsupported-shr.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2004-2020 Free Software Foundation, Inc. + Copyright 2004-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/hbreak-unmapped.c gdb-10.2/gdb/testsuite/gdb.base/hbreak-unmapped.c --- gdb-9.1/gdb/testsuite/gdb.base/hbreak-unmapped.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/hbreak-unmapped.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/hbreak-unmapped.exp gdb-10.2/gdb/testsuite/gdb.base/hbreak-unmapped.exp --- gdb-9.1/gdb/testsuite/gdb.base/hbreak-unmapped.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/hbreak-unmapped.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/help.exp gdb-10.2/gdb/testsuite/gdb.base/help.exp --- gdb-9.1/gdb/testsuite/gdb.base/help.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/help.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1988-2020 Free Software Foundation, Inc. +# Copyright 1988-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -21,11 +21,11 @@ gdb_start -# disable pagination +# Disable pagination. gdb_test_no_output "set height 0" "disable pagination" # Test all the help classes. -test_class_help "aliases" {"Aliases of other commands\.\[\r\n\]+"} +test_class_help "aliases" {"User-defined aliases of other commands\.\[\r\n\]+"} test_class_help "breakpoints" { "Making program stop at certain points\.\[\r\n\]+" } @@ -61,30 +61,30 @@ # Test help of an abbreviated command. "break" is picked at random. set help_breakpoint_text "Set breakpoint at specified location\..*" - # test help breakpoint "b" abbreviation + # Test help breakpoint "b" abbreviation. gdb_test "help b" $help_breakpoint_text "help breakpoint \"b\" abbreviation" - # test help breakpoint "br" abbreviation + # Test help breakpoint "br" abbreviation. gdb_test "help br" $help_breakpoint_text "help breakpoint \"br\" abbreviation" - # test help breakpoint "bre" abbreviation + # Test help breakpoint "bre" abbreviation; gdb_test "help bre" $help_breakpoint_text "help breakpoint \"bre\" abbreviation" - # test help breakpoint "brea" abbreviation + # Test help breakpoint "brea" abbreviation. } gdb_test "help brea" $help_breakpoint_text "help breakpoint \"brea\" abbreviation" -# test help breakpoint "break" abbreviation +# Test help breakpoint "break" abbreviation. gdb_test "help break" $help_breakpoint_text "help breakpoint \"break\" abbreviation" # Test help of an aliased command. "bt" is picked at random. set help_backtrace_text "Print backtrace of all stack frames, or innermost COUNT frames\..*" -# test help backtrace "bt" abbreviation +# Test help backtrace "bt" abbreviation. gdb_test "help bt" $help_backtrace_text "help backtrace \"bt\" abbreviation" -# test help backtrace +# Test help backtrace. gdb_test "help backtrace" $help_backtrace_text -# test help commands +# Test help commands. gdb_test "help commands" "Set commands to be executed when the given breakpoints are hit\.\[\r\n\]+Give a space-separated breakpoint list as argument after \"commands\"\.\[\r\n\]+A list element can be a breakpoint number \\(e.g. `5'\\) or a range of numbers\[\r\n\]+\\(e.g. `5-7'\\)\.\[\r\n\]+With no argument, the targeted breakpoint is the last one set\.\[\r\n\]+The commands themselves follow starting on the next line\.\[\r\n\]+Type a line containing \"end\" to indicate the end of them\.\[\r\n\]+Give \"silent\" as the first line to make the breakpoint silent;\[\r\n\]+then no output is printed when it is hit, except what the commands print\." # Test a prefix command. "delete" is picked at random. -# test help delete "d" abbreviation +# Test help delete "d" abbreviation. set expected_help_delete { "Delete all or some breakpoints\.\[\r\n\]+" "Usage: delete \\\[BREAKPOINTNUM\\\]...\[\r\n\]+" @@ -93,36 +93,43 @@ "Also a prefix command for deletion of other GDB objects\.\[\r\n\]+" } test_prefix_command_help {"d" "delete"} $expected_help_delete "help delete \"d\" abbreviation" -# test help delete +# Test help delete. test_prefix_command_help "delete" $expected_help_delete # Make sure help for help itself is present. -# test help help "h" abbreviation +# Test help help "h" abbreviation. gdb_test "help h" "Print list of commands\." "help help \"h\" abbreviation" -# test help help +# Test help help. gdb_test "help help" "Print list of commands\." # The startup banner refers to "show copying" and "show warranty", # might as well test for them. -# test help info copying +# Test help info copying. gdb_test "help show copying" "Conditions for redistributing copies of GDB\." -# test help info warranty +# Test help info warranty. gdb_test "help show warranty" "Various kinds of warranty you do not have\." # Test a few other random "help show" commands. -# test help show commands +# Test help show commands. gdb_test "help show commands" "Show the history of commands you typed\.\[\r\n\]+You can supply a command number to start with, or a `\[+\]' to start after\[\r\n\]+the previous command number shown\." -# test help show confirm +# Test help show confirm. gdb_test "help show confirm" "Show whether to confirm potentially dangerous operations\." -# test help info bogus-gdb-command +# Test help info bogus-gdb-command. gdb_test "help info bogus-gdb-command" "Undefined info command: \"bogus-gdb-command\"\. Try \"help info\"\." -# test help gotcha +# Test help gotcha. gdb_test "help gotcha" "Undefined command: \"gotcha\"\. Try \"help\"\." -# test apropos regex +# Test apropos regex. gdb_test "apropos \\\(print\[\^\[ bsiedf\\\".-\]\\\)" "handle -- Specify how to handle signals\." -# test apropos >1 word string +# Test apropos >1 word string. gdb_test "apropos handle signal" "handle -- Specify how to handle signals\." -# test apropos apropos +# Test apropos apropos. gdb_test "apropos apropos" "apropos -- Search for commands matching a REGEXP.*" + +# Test apropos for commands having aliases. +gdb_test "apropos Print backtrace of all stack frames, or innermost COUNT frames\." \ + "backtrace, where, bt -- Print backtrace of all stack frames, or innermost COUNT frames\." + +# Test help for commands having aliases. +gdb_test "help bt" "backtrace, where, bt\[\r\n\]+Print backtrace of all stack frames, or innermost COUNT frames\..*" diff -Nru gdb-9.1/gdb/testsuite/gdb.base/history-duplicates.exp gdb-10.2/gdb/testsuite/gdb.base/history-duplicates.exp --- gdb-9.1/gdb/testsuite/gdb.base/history-duplicates.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/history-duplicates.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/hook-stop.c gdb-10.2/gdb/testsuite/gdb.base/hook-stop.c --- gdb-9.1/gdb/testsuite/gdb.base/hook-stop.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/hook-stop.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2009-2020 Free Software Foundation, Inc. + Copyright 2009-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/hook-stop.exp gdb-10.2/gdb/testsuite/gdb.base/hook-stop.exp --- gdb-9.1/gdb/testsuite/gdb.base/hook-stop.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/hook-stop.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2009-2020 Free Software Foundation, Inc. +# Copyright 2009-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/huge.exp gdb-10.2/gdb/testsuite/gdb.base/huge.exp --- gdb-9.1/gdb/testsuite/gdb.base/huge.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/huge.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2001-2020 Free Software Foundation, Inc. +# Copyright 2001-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/hw-sw-break-same-address.exp gdb-10.2/gdb/testsuite/gdb.base/hw-sw-break-same-address.exp --- gdb-9.1/gdb/testsuite/gdb.base/hw-sw-break-same-address.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/hw-sw-break-same-address.exp 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,73 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Test that inserting a hardware and a software breakpoint at the same +# address behaves as expected. GDB used to consider hw and sw +# breakpoint locations as duplicate locations, which would lead to bad +# behavior. See PR gdb/25741. + +if {[skip_hw_breakpoint_tests]} { + return 0 +} + +set test hbreak +set srcfile ${test}.c +if { [prepare_for_testing "failed to prepare" ${test} ${srcfile}] } { + return -1 +} + +if ![runto_main] { + fail "can't run to main" + return -1 +} + +delete_breakpoints + +gdb_test_no_output "set breakpoint always-inserted on" +gdb_test_no_output "set breakpoint condition-evaluation host" +gdb_test_no_output "set confirm off" + +# Test inserting a hw breakpoint first, then a sw breakpoint at the +# same address. +with_test_prefix "hw-sw" { + gdb_test "hbreak main" \ + "Hardware assisted breakpoint .* at .*" \ + "hbreak" + + gdb_test "break main" \ + "Note: breakpoint .* also set at .*\r\nBreakpoint .* at .*" \ + "break" + + # A bad GDB debugging against GDBserver would output a warning + # here: + # delete breakpoints + # warning: Error removing breakpoint 3 + # (gdb) FAIL: gdb.base/hw-sw-break-same-address.exp: hw-sw: delete breakpoints + gdb_test_no_output "delete breakpoints" +} + +# Now the opposite: test inserting a sw breakpoint first, then a hw +# breakpoint at the same address. +with_test_prefix "sw-hw" { + gdb_test "break main" \ + "Breakpoint .* at .*" \ + "break" + + gdb_test "hbreak main" \ + "Note: breakpoint .* also set at .*\r\nHardware assisted breakpoint .* at .*" \ + "hbreak" + + gdb_test_no_output "delete breakpoints" +} diff -Nru gdb-9.1/gdb/testsuite/gdb.base/ifelse.exp gdb-10.2/gdb/testsuite/gdb.base/ifelse.exp --- gdb-9.1/gdb/testsuite/gdb.base/ifelse.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/ifelse.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2006-2020 Free Software Foundation, Inc. +# Copyright 2006-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/included.c gdb-10.2/gdb/testsuite/gdb.base/included.c --- gdb-9.1/gdb/testsuite/gdb.base/included.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/included.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2007-2020 Free Software Foundation, Inc. + Copyright 2007-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/included.exp gdb-10.2/gdb/testsuite/gdb.base/included.exp --- gdb-9.1/gdb/testsuite/gdb.base/included.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/included.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2007-2020 Free Software Foundation, Inc. +# Copyright 2007-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/included.h gdb-10.2/gdb/testsuite/gdb.base/included.h --- gdb-9.1/gdb/testsuite/gdb.base/included.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/included.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2007-2020 Free Software Foundation, Inc. + Copyright 2007-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/index-cache.c gdb-10.2/gdb/testsuite/gdb.base/index-cache.c --- gdb-9.1/gdb/testsuite/gdb.base/index-cache.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/index-cache.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2018-2020 Free Software Foundation, Inc. + Copyright 2018-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/index-cache.exp gdb-10.2/gdb/testsuite/gdb.base/index-cache.exp --- gdb-9.1/gdb/testsuite/gdb.base/index-cache.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/index-cache.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2018-2020 Free Software Foundation, Inc. +# Copyright 2018-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -119,16 +119,18 @@ # Test loading a binary with the cache disabled. No file should be created. -proc_with_prefix test_cache_disabled { cache_dir } { - lassign [ls_host $cache_dir] ret files_before +proc_with_prefix test_cache_disabled { cache_dir test_prefix } { + with_test_prefix $test_prefix { + lassign [ls_host $cache_dir] ret files_before - run_test_with_flags $cache_dir off { - lassign [ls_host $cache_dir] ret files_after + run_test_with_flags $cache_dir off { + lassign [ls_host $cache_dir] ret files_after - set nfiles_created [expr [llength $files_after] - [llength $files_before]] - gdb_assert "$nfiles_created == 0" "no files were created" + set nfiles_created [expr [llength $files_after] - [llength $files_before]] + gdb_assert "$nfiles_created == 0" "no files were created" - check_cache_stats 0 0 + check_cache_stats 0 0 + } } } @@ -217,10 +219,10 @@ # The ouput of mktemp contains an end of line, remove it. set cache_dir [string trimright $cache_dir \r\n] -test_cache_disabled $cache_dir +test_cache_disabled $cache_dir "before populate" test_cache_enabled_miss $cache_dir test_cache_enabled_hit $cache_dir # Test again with the cache disabled, now that it is populated. -test_cache_disabled $cache_dir +test_cache_disabled $cache_dir "after populate" diff -Nru gdb-9.1/gdb/testsuite/gdb.base/infcall-exec2.c gdb-10.2/gdb/testsuite/gdb.base/infcall-exec2.c --- gdb-9.1/gdb/testsuite/gdb.base/infcall-exec2.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/infcall-exec2.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This test program is part of GDB, the GNU debugger. - Copyright 2016-2020 Free Software Foundation, Inc. + Copyright 2016-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/infcall-exec.c gdb-10.2/gdb/testsuite/gdb.base/infcall-exec.c --- gdb-9.1/gdb/testsuite/gdb.base/infcall-exec.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/infcall-exec.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This test program is part of GDB, the GNU debugger. - Copyright 2016-2020 Free Software Foundation, Inc. + Copyright 2016-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/infcall-exec.exp gdb-10.2/gdb/testsuite/gdb.base/infcall-exec.exp --- gdb-9.1/gdb/testsuite/gdb.base/infcall-exec.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/infcall-exec.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2016-2020 Free Software Foundation, Inc. +# Copyright 2016-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/infcall-input.c gdb-10.2/gdb/testsuite/gdb.base/infcall-input.c --- gdb-9.1/gdb/testsuite/gdb.base/infcall-input.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/infcall-input.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2016-2020 Free Software Foundation, Inc. + Copyright 2016-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/infcall-input.exp gdb-10.2/gdb/testsuite/gdb.base/infcall-input.exp --- gdb-9.1/gdb/testsuite/gdb.base/infcall-input.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/infcall-input.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2016-2020 Free Software Foundation, Inc. +# Copyright 2016-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/infcall-nested-structs.c gdb-10.2/gdb/testsuite/gdb.base/infcall-nested-structs.c --- gdb-9.1/gdb/testsuite/gdb.base/infcall-nested-structs.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/infcall-nested-structs.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2018-2020 Free Software Foundation, Inc. + Copyright 2018-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/infcall-nested-structs-c.exp gdb-10.2/gdb/testsuite/gdb.base/infcall-nested-structs-c.exp --- gdb-9.1/gdb/testsuite/gdb.base/infcall-nested-structs-c.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/infcall-nested-structs-c.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,20 @@ +# This testcase is part of GDB, the GNU debugger. + +# Copyright 2018-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +set lang {c} + +source $srcdir/$subdir/infcall-nested-structs.exp.tcl diff -Nru gdb-9.1/gdb/testsuite/gdb.base/infcall-nested-structs-c++.exp gdb-10.2/gdb/testsuite/gdb.base/infcall-nested-structs-c++.exp --- gdb-9.1/gdb/testsuite/gdb.base/infcall-nested-structs-c++.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/infcall-nested-structs-c++.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,24 @@ +# This testcase is part of GDB, the GNU debugger. + +# Copyright 2018-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Only test C++ if we are able. +if { [skip_cplus_tests] || [get_compiler_info "c++"] } { + return -1 +} +set lang c++ + +source $srcdir/$subdir/infcall-nested-structs.exp.tcl diff -Nru gdb-9.1/gdb/testsuite/gdb.base/infcall-nested-structs.exp gdb-10.2/gdb/testsuite/gdb.base/infcall-nested-structs.exp --- gdb-9.1/gdb/testsuite/gdb.base/infcall-nested-structs.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/infcall-nested-structs.exp 1970-01-01 00:00:00.000000000 +0000 @@ -1,203 +0,0 @@ -# This testcase is part of GDB, the GNU debugger. - -# Copyright 2018-2020 Free Software Foundation, Inc. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. - - -# Some targets can't call functions, so don't even bother with this -# test. - -if [target_info exists gdb,cannot_call_functions] { - unsupported "this target can not call functions" - continue -} - -# Only test C++ if we are able. Always use C. -if { [skip_cplus_tests] || [get_compiler_info "c++"] } { - set lang {c} -} else { - set lang {c c++} -} - -foreach l $lang { - set dir "$l" - remote_exec host "rm -rf [standard_output_file ${dir}]" - remote_exec host "mkdir -p [standard_output_file ${dir}]" -} - - -set int_types { tc ts ti tl tll } -set float_types { tf td tld } -set complex_types { tfc tdc tldc } - -set compile_flags {debug} -if [support_complex_tests] { - lappend compile_flags "additional_flags=-DTEST_COMPLEX" - lappend compile_flags "additional_flags=-Wno-psabi" -} - -# Given N (0..25), return the corresponding alphabetic letter in upper -# case. - -proc I2A { n } { - return [string range "ABCDEFGHIJKLMNOPQRSTUVWXYZ" $n $n] -} - -# Compile a variant of nested-structs.c using TYPES to specify the -# types of the struct fields within the source. Run up to main. -# Also updates the global "testfile" to reflect the most recent build. - -proc start_nested_structs_test { lang types } { - global testfile - global srcfile - global binfile - global subdir - global srcdir - global compile_flags - - standard_testfile .c - set dir "$lang" - - # Create the additional flags - set flags $compile_flags - lappend flags $lang - lappend flags "additional_flags=-O2" - - for {set n 0} {$n<[llength ${types}]} {incr n} { - set m [I2A ${n}] - set t [lindex ${types} $n] - lappend flags "additional_flags=-Dt${m}=${t}" - append testfile "-" "$t" - } - - set binfile [standard_output_file ${dir}/${testfile}] - if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable "${flags}"] != "" } { - unresolved "failed to compile" - return 0 - } - - # Start with a fresh gdb. - clean_restart ${binfile} - - # Make certain that the output is consistent - gdb_test_no_output "set print sevenbit-strings" - gdb_test_no_output "set print address off" - gdb_test_no_output "set print pretty off" - gdb_test_no_output "set width 0" - gdb_test_no_output "set print elements 300" - - # Advance to main - if { ![runto_main] } then { - fail "can't run to main" - return 0 - } - - # Now continue forward to a suitable location to run the tests. - # Some targets only enable the FPU on first use, so ensure that we - # have used the FPU before we make calls from GDB to code that - # could use the FPU. - gdb_breakpoint [gdb_get_line_number "Break Here"] temporary - gdb_continue_to_breakpoint "breakpt" ".* Break Here\\. .*" - - return 1 -} - -# Assuming GDB is stopped at main within a test binary, run some tests -# passing structures, and reading return value structures. - -proc run_tests { lang types } { - global gdb_prompt - - foreach {name} {struct_01_01 struct_01_02 struct_01_03 struct_01_04 - struct_02_01 struct_02_02 struct_02_03 struct_02_04 - struct_04_01 struct_04_02 struct_04_03 struct_04_04 - struct_05_01 struct_05_02 struct_05_03 struct_05_04 - struct_static_02_01 struct_static_02_02 struct_static_02_03 struct_static_02_04 - struct_static_04_01 struct_static_04_02 struct_static_04_03 struct_static_04_04 - struct_static_06_01 struct_static_06_02 struct_static_06_03 struct_static_06_04} { - - # Only run static member tests on C++ - if { $lang == "c" && [regexp "static" $name match] } { - continue - } - - gdb_test "p/d check_arg_${name} (ref_val_${name})" "= 1" - - set refval [ get_valueof "" "ref_val_${name}" "" ] - verbose -log "Refval: ${refval}" - - set test "check return value ${name}" - if { ${refval} != "" } { - - set answer [ get_valueof "" "rtn_str_${name} ()" "XXXX"] - verbose -log "Answer: ${answer}" - - gdb_assert [string eq ${answer} ${refval}] ${test} - } else { - unresolved $test - } - } -} - -# Set up a test prefix, compile the test binary, run to main, and then -# run some tests. - -proc start_gdb_and_run_tests { lang types } { - set prefix "types" - - foreach t $types { - append prefix "-" "${t}" - } - - foreach_with_prefix l $lang { - with_test_prefix $prefix { - if { [start_nested_structs_test $l $types] } { - run_tests $l $prefix - } - } - } -} - -foreach ta $int_types { - start_gdb_and_run_tests $lang $ta -} - -if [support_complex_tests] { - foreach ta $complex_types { - start_gdb_and_run_tests $lang $ta - } -} - -if ![gdb_skip_float_test] { - foreach ta $float_types { - start_gdb_and_run_tests $lang $ta - } - - foreach ta $int_types { - foreach tb $float_types { - start_gdb_and_run_tests $lang [list $ta $tb] - } - } - - foreach ta $float_types { - foreach tb $int_types { - start_gdb_and_run_tests $lang [list $ta $tb] - } - - foreach tb $float_types { - start_gdb_and_run_tests $lang [list $ta $tb] - } - } -} diff -Nru gdb-9.1/gdb/testsuite/gdb.base/infcall-nested-structs.exp.tcl gdb-10.2/gdb/testsuite/gdb.base/infcall-nested-structs.exp.tcl --- gdb-9.1/gdb/testsuite/gdb.base/infcall-nested-structs.exp.tcl 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/infcall-nested-structs.exp.tcl 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,184 @@ +# This testcase is part of GDB, the GNU debugger. + +# Copyright 2018-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Some targets can't call functions, so don't even bother with this +# test. + +if [target_info exists gdb,cannot_call_functions] { + unsupported "this target can not call functions" + continue +} + +set int_types { tc ts ti tl tll } +set float_types { tf td tld } +set complex_types { tfc tdc tldc } + +set compile_flags {debug} +if [support_complex_tests] { + lappend compile_flags "additional_flags=-DTEST_COMPLEX" + lappend compile_flags "additional_flags=-Wno-psabi" +} + +# Given N (0..25), return the corresponding alphabetic letter in upper +# case. + +proc I2A { n } { + return [string range "ABCDEFGHIJKLMNOPQRSTUVWXYZ" $n $n] +} + +# Compile a variant of nested-structs.c using TYPES to specify the +# types of the struct fields within the source. Run up to main. +# Also updates the global "testfile" to reflect the most recent build. + +proc start_nested_structs_test { lang types } { + global testfile + global srcfile + global binfile + global subdir + global srcdir + global compile_flags + + standard_testfile infcall-nested-structs.c + + # Create the additional flags + set flags $compile_flags + lappend flags $lang + lappend flags "additional_flags=-O2" + + for {set n 0} {$n<[llength ${types}]} {incr n} { + set m [I2A ${n}] + set t [lindex ${types} $n] + lappend flags "additional_flags=-Dt${m}=${t}" + append testfile "-" "$t" + } + + if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable "${flags}"] != "" } { + unresolved "failed to compile" + return 0 + } + + # Start with a fresh gdb. + clean_restart ${binfile} + + # Make certain that the output is consistent + gdb_test_no_output "set print sevenbit-strings" + gdb_test_no_output "set print address off" + gdb_test_no_output "set print pretty off" + gdb_test_no_output "set width 0" + gdb_test_no_output "set print elements 300" + + # Advance to main + if { ![runto_main] } then { + fail "can't run to main" + return 0 + } + + # Now continue forward to a suitable location to run the tests. + # Some targets only enable the FPU on first use, so ensure that we + # have used the FPU before we make calls from GDB to code that + # could use the FPU. + gdb_breakpoint [gdb_get_line_number "Break Here"] temporary + gdb_continue_to_breakpoint "breakpt" ".* Break Here\\. .*" + + return 1 +} + +# Assuming GDB is stopped at main within a test binary, run some tests +# passing structures, and reading return value structures. + +proc run_tests { lang types } { + global gdb_prompt + + foreach {name} {struct_01_01 struct_01_02 struct_01_03 struct_01_04 + struct_02_01 struct_02_02 struct_02_03 struct_02_04 + struct_04_01 struct_04_02 struct_04_03 struct_04_04 + struct_05_01 struct_05_02 struct_05_03 struct_05_04 + struct_static_02_01 struct_static_02_02 struct_static_02_03 struct_static_02_04 + struct_static_04_01 struct_static_04_02 struct_static_04_03 struct_static_04_04 + struct_static_06_01 struct_static_06_02 struct_static_06_03 struct_static_06_04} { + + # Only run static member tests on C++ + if { $lang == "c" && [regexp "static" $name match] } { + continue + } + + gdb_test "p/d check_arg_${name} (ref_val_${name})" "= 1" + + set refval [ get_valueof "" "ref_val_${name}" "" ] + verbose -log "Refval: ${refval}" + + set test "check return value ${name}" + if { ${refval} != "" } { + + set answer [ get_valueof "" "rtn_str_${name} ()" "XXXX"] + verbose -log "Answer: ${answer}" + + gdb_assert [string eq ${answer} ${refval}] ${test} + } else { + unresolved $test + } + } +} + +# Set up a test prefix, compile the test binary, run to main, and then +# run some tests. + +proc start_gdb_and_run_tests { lang types } { + set prefix "types" + + foreach t $types { + append prefix "-" "${t}" + } + + with_test_prefix $prefix { + if { [start_nested_structs_test $lang $types] } { + run_tests $lang $prefix + } + } +} + +foreach ta $int_types { + start_gdb_and_run_tests $lang $ta +} + +if [support_complex_tests] { + foreach ta $complex_types { + start_gdb_and_run_tests $lang $ta + } +} + +if ![gdb_skip_float_test] { + foreach ta $float_types { + start_gdb_and_run_tests $lang $ta + } + + foreach ta $int_types { + foreach tb $float_types { + start_gdb_and_run_tests $lang [list $ta $tb] + } + } + + foreach ta $float_types { + foreach tb $int_types { + start_gdb_and_run_tests $lang [list $ta $tb] + } + + foreach tb $float_types { + start_gdb_and_run_tests $lang [list $ta $tb] + } + } +} diff -Nru gdb-9.1/gdb/testsuite/gdb.base/inferior-args.c gdb-10.2/gdb/testsuite/gdb.base/inferior-args.c --- gdb-9.1/gdb/testsuite/gdb.base/inferior-args.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/inferior-args.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,26 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include <stdio.h> + +int main (int argc, char **argv) +{ + for (int i = 0; i < argc; i++) + printf ("[%d] %s\n", i, argv[i]); + + return 0; +} diff -Nru gdb-9.1/gdb/testsuite/gdb.base/inferior-args.exp gdb-10.2/gdb/testsuite/gdb.base/inferior-args.exp --- gdb-9.1/gdb/testsuite/gdb.base/inferior-args.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/inferior-args.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,124 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Test running an inferior with arguments. + +# This does not work on boards that don't support inferior arguments. +if [target_info exists noargs] then { + verbose "skipping gdb.base/inferior-args.exp because of noargs" + return +} + +standard_testfile .c + +if {[build_executable "failed to prepare" $testfile $srcfile debug] == -1} { + return +} + +proc do_test { method } { + global binfile hex + + # The second arg is an empty string on purpose. + set inferior_args { "first arg" "" "third-arg" } + + clean_restart $binfile + + if { $method == "start" } { + # The start command does not make sense for a stub. + if { [use_gdb_stub] } { + return; + } + + if { [gdb_start_cmd $inferior_args] < 0 } { + fail "could not issue start command" + return -1 + } + + # Consume up to the GDB prompt after the stop. + gdb_test "" ".*main.*" "stop at main" + + } elseif { $method == "starti" } { + # The starti command does not make sense for a stub. + if { [use_gdb_stub] } { + return; + } + + if { [gdb_starti_cmd $inferior_args] < 0 } { + fail "could not issue start command" + return -1 + } + + # Consume up to the GDB prompt after the stop. + gdb_test "" "" "stop at first instruction" + + # Put a breakpoint and continue until main. + if { ![gdb_breakpoint "main" message] } { + fail "could not set breakpoint on main" + return -1 + } + + if { [gdb_continue "main"] != 0 } { + fail "could not continue to main" + return -1 + } + + } elseif { $method == "run" } { + if { ![gdb_breakpoint "main" message] } { + fail "could not set breakpoint on main" + return -1 + } + + # The run command does not make sense for a stub, but GDB_RUN_CMD + # does the right thing when the target is a stub (start the stub, + # connect to it, and "continue"). + # + # This allows us to test arguments passed on the gdbserver command + # line. + if { [gdb_run_cmd $inferior_args] < 0 } { + fail "could not run" + return -1 + } + + # Consume up to the GDB prompt after the stop. + gdb_test "" ".*main.*" "stop at main" + + } elseif { $method == "set args" } { + # Using "set args" does not make sense with a stub. + if { [use_gdb_stub] } { + return; + } + + gdb_test_no_output "set args $inferior_args" + + if { ![runto_main] } { + fail "could not run to main" + return -1 + } + + } else { + error "invalid method $method" + } + + # Now that we are stopped at main, inspect argc/argv. + gdb_test "print argc" " = 4" + gdb_test "print argv\[0\]" " = $hex \".*\"" + gdb_test "print argv\[1\]" " = $hex \"first arg\"" + gdb_test "print argv\[2\]" " = $hex \"\"" + gdb_test "print argv\[3\]" " = $hex \"third-arg\"" +} + +foreach_with_prefix method { "start" "starti" "run" "set args" } { + do_test $method +} diff -Nru gdb-9.1/gdb/testsuite/gdb.base/inferior-died.c gdb-10.2/gdb/testsuite/gdb.base/inferior-died.c --- gdb-9.1/gdb/testsuite/gdb.base/inferior-died.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/inferior-died.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Test for fork-related gdb bug - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/inferior-died.exp gdb-10.2/gdb/testsuite/gdb.base/inferior-died.exp --- gdb-9.1/gdb/testsuite/gdb.base/inferior-died.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/inferior-died.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/infnan.c gdb-10.2/gdb/testsuite/gdb.base/infnan.c --- gdb-9.1/gdb/testsuite/gdb.base/infnan.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/infnan.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This test file is part of GDB, the GNU debugger. - Copyright 2007-2020 Free Software Foundation, Inc. + Copyright 2007-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/infnan.exp gdb-10.2/gdb/testsuite/gdb.base/infnan.exp --- gdb-9.1/gdb/testsuite/gdb.base/infnan.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/infnan.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2007-2020 Free Software Foundation, Inc. +# Copyright 2007-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/info-fun.c gdb-10.2/gdb/testsuite/gdb.base/info-fun.c --- gdb-9.1/gdb/testsuite/gdb.base/info-fun.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/info-fun.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2012-2020 Free Software Foundation, Inc. +/* Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/info-fun.exp gdb-10.2/gdb/testsuite/gdb.base/info-fun.exp --- gdb-9.1/gdb/testsuite/gdb.base/info-fun.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/info-fun.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or diff -Nru gdb-9.1/gdb/testsuite/gdb.base/info-fun-solib.c gdb-10.2/gdb/testsuite/gdb.base/info-fun-solib.c --- gdb-9.1/gdb/testsuite/gdb.base/info-fun-solib.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/info-fun-solib.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2012-2020 Free Software Foundation, Inc. +/* Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/infoline.c gdb-10.2/gdb/testsuite/gdb.base/infoline.c --- gdb-9.1/gdb/testsuite/gdb.base/infoline.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/infoline.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2011-2020 Free Software Foundation, Inc. +/* Copyright 2011-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.base/infoline.exp gdb-10.2/gdb/testsuite/gdb.base/infoline.exp --- gdb-9.1/gdb/testsuite/gdb.base/infoline.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/infoline.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2011-2020 Free Software Foundation, Inc. +# Copyright (C) 2011-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/infoline-reloc-main-from-zero.c gdb-10.2/gdb/testsuite/gdb.base/infoline-reloc-main-from-zero.c --- gdb-9.1/gdb/testsuite/gdb.base/infoline-reloc-main-from-zero.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/infoline-reloc-main-from-zero.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2018-2020 Free Software Foundation, Inc. + Copyright 2018-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/infoline-reloc-main-from-zero.exp gdb-10.2/gdb/testsuite/gdb.base/infoline-reloc-main-from-zero.exp --- gdb-9.1/gdb/testsuite/gdb.base/infoline-reloc-main-from-zero.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/infoline-reloc-main-from-zero.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2018-2020 Free Software Foundation, Inc. +# Copyright 2018-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/info-locals-unused-static-var.c gdb-10.2/gdb/testsuite/gdb.base/info-locals-unused-static-var.c --- gdb-9.1/gdb/testsuite/gdb.base/info-locals-unused-static-var.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/info-locals-unused-static-var.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,24 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +int +main (void) +{ + static int b = 2; + + return 0; +} diff -Nru gdb-9.1/gdb/testsuite/gdb.base/info-locals-unused-static-var.exp gdb-10.2/gdb/testsuite/gdb.base/info-locals-unused-static-var.exp --- gdb-9.1/gdb/testsuite/gdb.base/info-locals-unused-static-var.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/info-locals-unused-static-var.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,40 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +# Test if an unused static local var is listed with info locals. +# +# Note: with gcc 4.8.5, we have: +# ... +# (gdb) info addr b +# Symbol "b" is static storage at address $hex +# ... +# but with gcc 7.5.0, we have instead: +# ... +# (gdb) info addr b +# Symbol "b" is constant. +# ... + +standard_testfile + +if {[prepare_for_testing "failed to prepare" $testfile $srcfile debug]} { + return -1 +} + +if ![runto_main] then { + fail "can't run to main" + return 0 +} + +gdb_test "info locals" "\r\nb = .*" diff -Nru gdb-9.1/gdb/testsuite/gdb.base/info-macros.exp gdb-10.2/gdb/testsuite/gdb.base/info-macros.exp --- gdb-9.1/gdb/testsuite/gdb.base/info-macros.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/info-macros.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -273,7 +273,4 @@ set r1 ".*define DEF_MACROS" set r2 ".*define ONE" -# info macros on the line where the #define or #include is -# fails to find the macro defined (though it works on the next line.) -setup_kfail "gdb/NNNN" *-*-* -gdb_test "$test" "$r1$r2" +gdb_test "$test" "$r1$r2.*" diff -Nru gdb-9.1/gdb/testsuite/gdb.base/info_minsym.c gdb-10.2/gdb/testsuite/gdb.base/info_minsym.c --- gdb-9.1/gdb/testsuite/gdb.base/info_minsym.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/info_minsym.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2018-2020 Free Software Foundation, Inc. + Copyright 2018-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -20,6 +20,7 @@ static int minsym_fun (void) { minsym_var++; + return 0; } int diff -Nru gdb-9.1/gdb/testsuite/gdb.base/info_minsym.exp gdb-10.2/gdb/testsuite/gdb.base/info_minsym.exp --- gdb-9.1/gdb/testsuite/gdb.base/info_minsym.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/info_minsym.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2018-2020 Free Software Foundation, Inc. +# Copyright (C) 2018-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/info-os.c gdb-10.2/gdb/testsuite/gdb.base/info-os.c --- gdb-9.1/gdb/testsuite/gdb.base/info-os.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/info-os.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -48,6 +48,8 @@ { pthread_mutex_lock (&mutex); pthread_mutex_unlock (&mutex); + + return NULL; } int diff -Nru gdb-9.1/gdb/testsuite/gdb.base/info-os.exp gdb-10.2/gdb/testsuite/gdb.base/info-os.exp --- gdb-9.1/gdb/testsuite/gdb.base/info-os.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/info-os.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/info-proc.exp gdb-10.2/gdb/testsuite/gdb.base/info-proc.exp --- gdb-9.1/gdb/testsuite/gdb.base/info-proc.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/info-proc.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2002-2020 Free Software Foundation, Inc. +# Copyright 2002-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/info-program.exp gdb-10.2/gdb/testsuite/gdb.base/info-program.exp --- gdb-9.1/gdb/testsuite/gdb.base/info-program.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/info-program.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1997-2020 Free Software Foundation, Inc. +# Copyright 1997-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/info_qt.c gdb-10.2/gdb/testsuite/gdb.base/info_qt.c --- gdb-9.1/gdb/testsuite/gdb.base/info_qt.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/info_qt.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2018-2020 Free Software Foundation, Inc. + Copyright 2018-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/info_qt.exp gdb-10.2/gdb/testsuite/gdb.base/info_qt.exp --- gdb-9.1/gdb/testsuite/gdb.base/info_qt.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/info_qt.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2018-2020 Free Software Foundation, Inc. +# Copyright 2018-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/info-shared.c gdb-10.2/gdb/testsuite/gdb.base/info-shared.c --- gdb-9.1/gdb/testsuite/gdb.base/info-shared.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/info-shared.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2012-2020 Free Software Foundation, Inc. +/* Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/info-shared.exp gdb-10.2/gdb/testsuite/gdb.base/info-shared.exp --- gdb-9.1/gdb/testsuite/gdb.base/info-shared.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/info-shared.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/info-shared-solib1.c gdb-10.2/gdb/testsuite/gdb.base/info-shared-solib1.c --- gdb-9.1/gdb/testsuite/gdb.base/info-shared-solib1.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/info-shared-solib1.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2012-2020 Free Software Foundation, Inc. +/* Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/info-shared-solib2.c gdb-10.2/gdb/testsuite/gdb.base/info-shared-solib2.c --- gdb-9.1/gdb/testsuite/gdb.base/info-shared-solib2.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/info-shared-solib2.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2012-2020 Free Software Foundation, Inc. +/* Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/info_sources_base.c gdb-10.2/gdb/testsuite/gdb.base/info_sources_base.c --- gdb-9.1/gdb/testsuite/gdb.base/info_sources_base.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/info_sources_base.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2019-2020 Free Software Foundation, Inc. + Copyright 2019-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/info_sources.c gdb-10.2/gdb/testsuite/gdb.base/info_sources.c --- gdb-9.1/gdb/testsuite/gdb.base/info_sources.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/info_sources.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2019-2020 Free Software Foundation, Inc. + Copyright 2019-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/info_sources.exp gdb-10.2/gdb/testsuite/gdb.base/info_sources.exp --- gdb-9.1/gdb/testsuite/gdb.base/info_sources.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/info_sources.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -71,7 +71,9 @@ # List both files with regexp matching anywhere in the filenames: test_info_sources "info_sources" 1 1 -test_info_sources "gdb.base" 1 1 +if { ! [is_remote host] } { + test_info_sources "gdb.base" 1 1 +} # List both files with regexp matching the filename basenames, # using various parts of the -basename option: @@ -88,8 +90,10 @@ # List the files with dirname matching regexp, # using various part of the -dirname option: -test_info_sources "-d base" 1 1 -test_info_sources "-dirname base" 1 1 +if { ! [is_remote host] } { + test_info_sources "-d base" 1 1 + test_info_sources "-dirname base" 1 1 +} # Test non matching regexp, with option terminator: test_info_sources "-b -- -d" 0 0 diff -Nru gdb-9.1/gdb/testsuite/gdb.base/info-target.exp gdb-10.2/gdb/testsuite/gdb.base/info-target.exp --- gdb-9.1/gdb/testsuite/gdb.base/info-target.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/info-target.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/info-types.c gdb-10.2/gdb/testsuite/gdb.base/info-types.c --- gdb-9.1/gdb/testsuite/gdb.base/info-types.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/info-types.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2019-2020 Free Software Foundation, Inc. +/* Copyright 2019-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/info-types-c.exp gdb-10.2/gdb/testsuite/gdb.base/info-types-c.exp --- gdb-9.1/gdb/testsuite/gdb.base/info-types-c.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/info-types-c.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,18 @@ +# Copyright 2019-2021 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +set lang {c} + +source $srcdir/$subdir/info-types.exp.tcl diff -Nru gdb-9.1/gdb/testsuite/gdb.base/info-types-c++.exp gdb-10.2/gdb/testsuite/gdb.base/info-types-c++.exp --- gdb-9.1/gdb/testsuite/gdb.base/info-types-c++.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/info-types-c++.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,22 @@ +# Copyright 2019-2021 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Only test C++ if we are able. +if { [skip_cplus_tests] || [get_compiler_info "c++"] } { + return -1 +} +set lang c++ + +source $srcdir/$subdir/info-types.exp.tcl diff -Nru gdb-9.1/gdb/testsuite/gdb.base/info-types.exp gdb-10.2/gdb/testsuite/gdb.base/info-types.exp --- gdb-9.1/gdb/testsuite/gdb.base/info-types.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/info-types.exp 1970-01-01 00:00:00.000000000 +0000 @@ -1,131 +0,0 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. - -# Check that 'info types' produces the expected output for an inferior -# containing a number of different types. - -# Only test C++ if we are able. Always use C. -if { [skip_cplus_tests] || [get_compiler_info "c++"] } { - set lang {c} -} else { - set lang {c c++} -} - -foreach l $lang { - set dir "$l" - remote_exec host "rm -rf [standard_output_file ${dir}]" - remote_exec host "mkdir -p [standard_output_file ${dir}]" -} - -# Run 'info types' test, compiling the test file for language LANG, -# which should be either 'c' or 'c++'. -proc run_test { lang } { - global testfile - global srcfile - global binfile - global subdir - global srcdir - global compile_flags - - standard_testfile .c - - if {[prepare_for_testing "failed to prepare" \ - "${lang}/${testfile}" $srcfile "debug $lang"]} { - return -1 - } - - if ![runto_main] then { - fail "can't run to main" - return 0 - } - - if { $lang == "c++" } { - set output_re \ - [multi_line \ - "All defined types:" \ - "" \ - "File .*:" \ - "98:\[\t \]+CL;" \ - "42:\[\t \]+anon_struct_t;" \ - "65:\[\t \]+anon_union_t;" \ - "21:\[\t \]+baz_t;" \ - "33:\[\t \]+enum_t;" \ - "56:\[\t \]+union_t;" \ - "52:\[\t \]+typedef enum {\\.\\.\\.} anon_enum_t;" \ - "45:\[\t \]+typedef anon_struct_t anon_struct_t;" \ - "68:\[\t \]+typedef anon_union_t anon_union_t;" \ - "28:\[\t \]+typedef baz_t baz;" \ - "31:\[\t \]+typedef baz_t \\* baz_ptr;" \ - "27:\[\t \]+typedef baz_t baz_t;" \ - "\[\t \]+double" \ - "\[\t \]+float" \ - "\[\t \]+int" \ - "103:\[\t \]+typedef CL my_cl;" \ - "38:\[\t \]+typedef enum_t my_enum_t;" \ - "17:\[\t \]+typedef float my_float_t;" \ - "16:\[\t \]+typedef int my_int_t;" \ - "104:\[\t \]+typedef CL \\* my_ptr;" \ - "54:\[\t \]+typedef enum {\\.\\.\\.} nested_anon_enum_t;" \ - "47:\[\t \]+typedef anon_struct_t nested_anon_struct_t;" \ - "70:\[\t \]+typedef anon_union_t nested_anon_union_t;" \ - "30:\[\t \]+typedef baz_t nested_baz;" \ - "29:\[\t \]+typedef baz_t nested_baz_t;" \ - "39:\[\t \]+typedef enum_t nested_enum_t;" \ - "19:\[\t \]+typedef float nested_float_t;" \ - "18:\[\t \]+typedef int nested_int_t;" \ - "62:\[\t \]+typedef union_t nested_union_t;(" \ - "\[\t \]+unsigned int)?(" \ - "" \ - "File .*:.*)?" ] - } else { - set output_re \ - [multi_line \ - "All defined types:" \ - "" \ - "File .*:" \ - "52:\[\t \]+typedef enum {\\.\\.\\.} anon_enum_t;" \ - "45:\[\t \]+typedef struct {\\.\\.\\.} anon_struct_t;" \ - "68:\[\t \]+typedef union {\\.\\.\\.} anon_union_t;" \ - "28:\[\t \]+typedef struct baz_t baz;" \ - "31:\[\t \]+typedef struct baz_t \\* baz_ptr;" \ - "21:\[\t \]+struct baz_t;" \ - "\[\t \]+double" \ - "33:\[\t \]+enum enum_t;" \ - "\[\t \]+float" \ - "\[\t \]+int" \ - "38:\[\t \]+typedef enum enum_t my_enum_t;" \ - "17:\[\t \]+typedef float my_float_t;" \ - "16:\[\t \]+typedef int my_int_t;" \ - "54:\[\t \]+typedef enum {\\.\\.\\.} nested_anon_enum_t;" \ - "47:\[\t \]+typedef struct {\\.\\.\\.} nested_anon_struct_t;" \ - "70:\[\t \]+typedef union {\\.\\.\\.} nested_anon_union_t;" \ - "30:\[\t \]+typedef struct baz_t nested_baz;" \ - "29:\[\t \]+typedef struct baz_t nested_baz_t;" \ - "39:\[\t \]+typedef enum enum_t nested_enum_t;" \ - "19:\[\t \]+typedef float nested_float_t;" \ - "18:\[\t \]+typedef int nested_int_t;" \ - "62:\[\t \]+typedef union union_t nested_union_t;" \ - "56:\[\t \]+union union_t;(" \ - "\[\t \]+unsigned int)?(" \ - "" \ - "File .*:.*)?" ] - } - - gdb_test "info types" $output_re -} - -foreach_with_prefix l $lang { - run_test $l -} diff -Nru gdb-9.1/gdb/testsuite/gdb.base/info-types.exp.tcl gdb-10.2/gdb/testsuite/gdb.base/info-types.exp.tcl --- gdb-9.1/gdb/testsuite/gdb.base/info-types.exp.tcl 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/info-types.exp.tcl 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,130 @@ +# Copyright 2019-2021 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Check that 'info types' produces the expected output for an inferior +# containing a number of different types. + +# Run 'info types' test, compiling the test file for language LANG, +# which should be either 'c' or 'c++'. +proc run_test { lang } { + global testfile + global srcfile + global binfile + global subdir + global srcdir + global compile_flags + + standard_testfile info-types.c + + if {[prepare_for_testing "failed to prepare" \ + "${testfile}" $srcfile "debug $lang"]} { + return -1 + } + + if ![runto_main] then { + fail "can't run to main" + return 0 + } + + if { $lang == "c++" } { + set output_re \ + [multi_line \ + "98:\[\t \]+CL;" \ + "42:\[\t \]+anon_struct_t;" \ + "65:\[\t \]+anon_union_t;" \ + "21:\[\t \]+baz_t;" \ + "33:\[\t \]+enum_t;" \ + "56:\[\t \]+union_t;" \ + "52:\[\t \]+typedef enum {\\.\\.\\.} anon_enum_t;" \ + "45:\[\t \]+typedef anon_struct_t anon_struct_t;" \ + "68:\[\t \]+typedef anon_union_t anon_union_t;" \ + "28:\[\t \]+typedef baz_t baz;" \ + "31:\[\t \]+typedef baz_t \\* baz_ptr;" \ + "27:\[\t \]+typedef baz_t baz_t;" \ + "\[\t \]+double" \ + "\[\t \]+float" \ + "\[\t \]+int" \ + "103:\[\t \]+typedef CL my_cl;" \ + "38:\[\t \]+typedef enum_t my_enum_t;" \ + "17:\[\t \]+typedef float my_float_t;" \ + "16:\[\t \]+typedef int my_int_t;" \ + "104:\[\t \]+typedef CL \\* my_ptr;" \ + "54:\[\t \]+typedef enum {\\.\\.\\.} nested_anon_enum_t;" \ + "47:\[\t \]+typedef anon_struct_t nested_anon_struct_t;" \ + "70:\[\t \]+typedef anon_union_t nested_anon_union_t;" \ + "30:\[\t \]+typedef baz_t nested_baz;" \ + "29:\[\t \]+typedef baz_t nested_baz_t;" \ + "39:\[\t \]+typedef enum_t nested_enum_t;" \ + "19:\[\t \]+typedef float nested_float_t;" \ + "18:\[\t \]+typedef int nested_int_t;" \ + "62:\[\t \]+typedef union_t nested_union_t;(" \ + "\[\t \]+unsigned int)?"] + } else { + set output_re \ + [multi_line \ + "52:\[\t \]+typedef enum {\\.\\.\\.} anon_enum_t;" \ + "45:\[\t \]+typedef struct {\\.\\.\\.} anon_struct_t;" \ + "68:\[\t \]+typedef union {\\.\\.\\.} anon_union_t;" \ + "28:\[\t \]+typedef struct baz_t baz;" \ + "31:\[\t \]+typedef struct baz_t \\* baz_ptr;" \ + "21:\[\t \]+struct baz_t;" \ + "\[\t \]+double" \ + "33:\[\t \]+enum enum_t;" \ + "\[\t \]+float" \ + "\[\t \]+int" \ + "38:\[\t \]+typedef enum enum_t my_enum_t;" \ + "17:\[\t \]+typedef float my_float_t;" \ + "16:\[\t \]+typedef int my_int_t;" \ + "54:\[\t \]+typedef enum {\\.\\.\\.} nested_anon_enum_t;" \ + "47:\[\t \]+typedef struct {\\.\\.\\.} nested_anon_struct_t;" \ + "70:\[\t \]+typedef union {\\.\\.\\.} nested_anon_union_t;" \ + "30:\[\t \]+typedef struct baz_t nested_baz;" \ + "29:\[\t \]+typedef struct baz_t nested_baz_t;" \ + "39:\[\t \]+typedef enum enum_t nested_enum_t;" \ + "19:\[\t \]+typedef float nested_float_t;" \ + "18:\[\t \]+typedef int nested_int_t;" \ + "62:\[\t \]+typedef union union_t nested_union_t;" \ + "56:\[\t \]+union union_t;(" \ + "\[\t \]+unsigned int)?"] + } + + set state 0 + gdb_test_multiple "info types" "" { + -re "\r\nAll defined types:" { + if { $state == 0 } { set state 1 } + exp_continue + } + -re "\r\n\r\nFile .*[string_to_regexp $srcfile]:" { + if { $state == 1 } { set state 2 } + exp_continue + } + -re $output_re { + if { $state == 2 } { set state 3 } + exp_continue + } + -re "\r\n\r\nFile \[^\r\n\]*:" { + exp_continue + } + -re -wrap "" { + if { $state == 3} { + pass $gdb_test_name + } else { + fail $gdb_test_name + } + } + } +} + +run_test $lang diff -Nru gdb-9.1/gdb/testsuite/gdb.base/info-var.exp gdb-10.2/gdb/testsuite/gdb.base/info-var.exp --- gdb-9.1/gdb/testsuite/gdb.base/info-var.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/info-var.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/info-var-f1.c gdb-10.2/gdb/testsuite/gdb.base/info-var-f1.c --- gdb-9.1/gdb/testsuite/gdb.base/info-var-f1.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/info-var-f1.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2019-2020 Free Software Foundation, Inc. +/* Copyright 2019-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/info-var-f2.c gdb-10.2/gdb/testsuite/gdb.base/info-var-f2.c --- gdb-9.1/gdb/testsuite/gdb.base/info-var-f2.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/info-var-f2.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2019-2020 Free Software Foundation, Inc. +/* Copyright 2019-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/info-var.h gdb-10.2/gdb/testsuite/gdb.base/info-var.h --- gdb-9.1/gdb/testsuite/gdb.base/info-var.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/info-var.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2019-2020 Free Software Foundation, Inc. +/* Copyright 2019-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/interact.exp gdb-10.2/gdb/testsuite/gdb.base/interact.exp --- gdb-9.1/gdb/testsuite/gdb.base/interact.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/interact.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/interp.c gdb-10.2/gdb/testsuite/gdb.base/interp.c --- gdb-9.1/gdb/testsuite/gdb.base/interp.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/interp.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This test program is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/interp.exp gdb-10.2/gdb/testsuite/gdb.base/interp.exp --- gdb-9.1/gdb/testsuite/gdb.base/interp.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/interp.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2004-2020 Free Software Foundation, Inc. +# Copyright 2004-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/interrupt-daemon-attach.c gdb-10.2/gdb/testsuite/gdb.base/interrupt-daemon-attach.c --- gdb-9.1/gdb/testsuite/gdb.base/interrupt-daemon-attach.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/interrupt-daemon-attach.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2017-2020 Free Software Foundation, Inc. + Copyright 2017-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/interrupt-daemon-attach.exp gdb-10.2/gdb/testsuite/gdb.base/interrupt-daemon-attach.exp --- gdb-9.1/gdb/testsuite/gdb.base/interrupt-daemon-attach.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/interrupt-daemon-attach.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/interrupt-daemon.c gdb-10.2/gdb/testsuite/gdb.base/interrupt-daemon.c --- gdb-9.1/gdb/testsuite/gdb.base/interrupt-daemon.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/interrupt-daemon.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2017-2020 Free Software Foundation, Inc. + Copyright 2017-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/interrupt-daemon.exp gdb-10.2/gdb/testsuite/gdb.base/interrupt-daemon.exp --- gdb-9.1/gdb/testsuite/gdb.base/interrupt-daemon.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/interrupt-daemon.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2017-2020 Free Software Foundation, Inc. +# Copyright 2017-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/interrupt.exp gdb-10.2/gdb/testsuite/gdb.base/interrupt.exp --- gdb-9.1/gdb/testsuite/gdb.base/interrupt.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/interrupt.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1994-2020 Free Software Foundation, Inc. +# Copyright 1994-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/interrupt-noterm.c gdb-10.2/gdb/testsuite/gdb.base/interrupt-noterm.c --- gdb-9.1/gdb/testsuite/gdb.base/interrupt-noterm.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/interrupt-noterm.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright (C) 2013-2020 Free Software Foundation, Inc. + Copyright (C) 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/interrupt-noterm.exp gdb-10.2/gdb/testsuite/gdb.base/interrupt-noterm.exp --- gdb-9.1/gdb/testsuite/gdb.base/interrupt-noterm.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/interrupt-noterm.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2013-2020 Free Software Foundation, Inc. +# Copyright (C) 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/jit-attach-pie.c gdb-10.2/gdb/testsuite/gdb.base/jit-attach-pie.c --- gdb-9.1/gdb/testsuite/gdb.base/jit-attach-pie.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/jit-attach-pie.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2016-2020 Free Software Foundation, Inc. + Copyright 2016-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -19,29 +19,7 @@ #include <stdint.h> #include <pthread.h> -struct jit_code_entry -{ - struct jit_code_entry *next_entry; - struct jit_code_entry *prev_entry; - const char *symfile_addr; - uint64_t symfile_size; -}; - -struct jit_descriptor -{ - uint32_t version; - /* This type should be jit_actions_t, but we use uint32_t - to be explicit about the bitwidth. */ - uint32_t action_flag; - struct jit_code_entry *relevant_entry; - struct jit_code_entry *first_entry; -}; - -struct jit_descriptor __jit_debug_descriptor = { 1, 0, 0, 0 }; - -void __jit_debug_register_code() -{ -} +#include "jit-protocol.h" static void * thread_proc (void *arg) diff -Nru gdb-9.1/gdb/testsuite/gdb.base/jit-attach-pie.exp gdb-10.2/gdb/testsuite/gdb.base/jit-attach-pie.exp --- gdb-9.1/gdb/testsuite/gdb.base/jit-attach-pie.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/jit-attach-pie.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2016-2020 Free Software Foundation, Inc. +# Copyright (C) 2016-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/jit-dlmain.c gdb-10.2/gdb/testsuite/gdb.base/jit-dlmain.c --- gdb-9.1/gdb/testsuite/gdb.base/jit-dlmain.c 2019-02-23 12:20:11.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/jit-dlmain.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,20 +0,0 @@ -#include <dlfcn.h> -#include <stdio.h> - -int main (int argc, char *argv[]) -{ - /* jit_libname is updated by jit-so.exp */ - const char *jit_libname = "jit-dlmain-so.so"; - void *h; - int (*p_main) (int, char **); - - h = NULL; /* break here before-dlopen */ - h = dlopen (jit_libname, RTLD_LAZY); - if (h == NULL) return 1; - - p_main = dlsym (h, "jit_dl_main"); - if (p_main == NULL) return 2; - - h = h; /* break here after-dlopen */ - return (*p_main) (argc, argv); -} diff -Nru gdb-9.1/gdb/testsuite/gdb.base/jit-elf-dlmain.c gdb-10.2/gdb/testsuite/gdb.base/jit-elf-dlmain.c --- gdb-9.1/gdb/testsuite/gdb.base/jit-elf-dlmain.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/jit-elf-dlmain.c 2020-09-13 02:33:41.000000000 +0000 @@ -0,0 +1,20 @@ +#include <dlfcn.h> +#include <stdio.h> + +int main (int argc, char *argv[]) +{ + /* jit_libname is updated by jit-so.exp */ + const char *jit_libname = "jit-dlmain-so.so"; + void *h; + int (*p_main) (int, char **); + + h = NULL; /* break here before-dlopen */ + h = dlopen (jit_libname, RTLD_LAZY); + if (h == NULL) return 1; + + p_main = dlsym (h, "jit_dl_main"); + if (p_main == NULL) return 2; + + h = h; /* break here after-dlopen */ + return (*p_main) (argc, argv); +} diff -Nru gdb-9.1/gdb/testsuite/gdb.base/jit-elf.exp gdb-10.2/gdb/testsuite/gdb.base/jit-elf.exp --- gdb-9.1/gdb/testsuite/gdb.base/jit-elf.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/jit-elf.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,166 @@ +# Copyright 2011-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +if {[skip_shlib_tests]} { + untested "skipping shared library tests" + return -1 +} + +if {[get_compiler_info]} { + untested "could not get compiler info" + return 1 +} + +load_lib jit-elf-helpers.exp + +# Increase this to see more detail. +set test_verbose 0 + +# The main code that loads and registers JIT objects. +set main_basename "jit-elf-main" +set main_srcfile ${srcdir}/${subdir}/${main_basename}.c +set main_binfile [standard_output_file ${main_basename}] + +# The shared library that gets loaded as JIT objects. +set jit_solib_basename jit-elf-solib +set jit_solib_srcfile ${srcdir}/${subdir}/${jit_solib_basename}.c + +# Detach, restart GDB, and re-attach to the program. +proc clean_reattach {} { + global decimal gdb_prompt + global main_binfile main_srcfile + + # Get PID of test program. + set testpid -1 + set test "get inferior process ID" + gdb_test_multiple "p mypid" $test { + -re ".* = ($decimal).*$gdb_prompt $" { + set testpid $expect_out(1,string) + pass $test + } + } + + gdb_test_no_output "set var wait_for_gdb = 1" + gdb_test "detach" "Detaching from .*" + + clean_restart ${main_binfile} + + set test "attach" + gdb_test_multiple "attach $testpid" "$test" { + -re "Attaching to program.*.*main.*at .*$main_srcfile:.*$gdb_prompt $" { + pass "$test" + } + } + + gdb_test_no_output "set var wait_for_gdb = 0" +} + +# Continue to LOCATION in the program. If REATTACH, detach and +# re-attach to the program from scratch. +proc continue_to_test_location {location reattach} { + global main_srcfile + + gdb_breakpoint [gdb_get_line_number $location $main_srcfile] + gdb_continue_to_breakpoint $location + if {$reattach} { + with_test_prefix "$location" { + clean_reattach + } + } +} + +proc one_jit_test {jit_solibs_target match_str reattach} { + set count [llength $jit_solibs_target] + + with_test_prefix "one_jit_test-$count" { + global test_verbose + global main_binfile main_srcfile + + clean_restart ${main_binfile} + + # This is just to help debugging when things fail + if {$test_verbose > 0} { + gdb_test "set debug jit 1" + } + + if { ![runto_main] } { + fail "can't run to main" + return + } + + # Poke desired values directly into inferior instead of using "set args" + # because "set args" does not work under gdbserver. + incr count + gdb_test_no_output "set var argc=$count" "forging argc" + gdb_test_no_output "set var argv=fake_argv" "forging argv" + for {set i 1} {$i < $count} {incr i} { + set jit_solib_target [lindex $jit_solibs_target [expr $i-1]] + gdb_test_no_output "set var argv\[$i\]=\"${jit_solib_target}\"" \ + "forging argv\[$i\]" + } + + gdb_breakpoint [gdb_get_line_number "break here 0" $main_srcfile] + gdb_continue_to_breakpoint "break here 0" + + + continue_to_test_location "break here 1" $reattach + + gdb_test "info function ^jit_function" "$match_str" + + # This is just to help debugging when things fail + if {$test_verbose > 0} { + gdb_test "maintenance print objfiles" + gdb_test "maintenance info break" + } + + continue_to_test_location "break here 2" $reattach + + # All jit librares must have been unregistered + gdb_test "info function jit_function" \ + "All functions matching regular expression \"jit_function\":" + } +} + +# Compile two shared libraries to use as JIT objects. +set jit_solibs_target [compile_and_download_n_jit_so \ + $jit_solib_basename $jit_solib_srcfile 2] +if { $jit_solibs_target == -1 } { + return +} + +# Compile the main code (which loads the JIT objects). +if { [compile_jit_main ${main_srcfile} ${main_binfile} {}] == 0 } { + one_jit_test [lindex $jit_solibs_target 0] "${hex} jit_function_0001" 0 + one_jit_test $jit_solibs_target "${hex} jit_function_0001\[\r\n\]+${hex} jit_function_0002" 0 +} + +# Test attaching to an inferior with some JIT libraries already +# registered. We reuse the normal test, and detach/reattach at +# specific interesting points. +if {[can_spawn_for_attach]} { + if { [compile_jit_main ${main_srcfile} "${main_binfile}-attach" \ + {additional_flags=-DATTACH=1}] == 0 } { + with_test_prefix attach { + one_jit_test $jit_solibs_target "${hex} jit_function_0001\[\r\n\]+${hex} jit_function_0002" 1 + } + } +} + +if { [compile_jit_main ${main_srcfile} "${main_binfile}-pie" \ + {additional_flags=-fPIE ldflags=-pie}] == 0 } { + with_test_prefix PIE { + one_jit_test [lindex $jit_solibs_target 0] "${hex} jit_function_0001" 0 + } +} diff -Nru gdb-9.1/gdb/testsuite/gdb.base/jit-elf-main.c gdb-10.2/gdb/testsuite/gdb.base/jit-elf-main.c --- gdb-9.1/gdb/testsuite/gdb.base/jit-elf-main.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/jit-elf-main.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,144 @@ +/* This test program is part of GDB, the GNU debugger. + + Copyright 2011-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +/* Simulate loading of JIT code. */ + +#include <elf.h> +#include <link.h> +#include <errno.h> +#include <fcntl.h> +#include <stdint.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <sys/mman.h> +#include <sys/stat.h> +#include <unistd.h> + +#include "jit-protocol.h" +#include "jit-elf-util.h" + +static void +usage (void) +{ + fprintf (stderr, "Usage: jit-elf-main libraries...\n"); + exit (1); +} + +/* Defined by the .exp file if testing attach. */ +#ifndef ATTACH +#define ATTACH 0 +#endif + +#ifndef MAIN +#define MAIN main +#endif + +/* Must be defined by .exp file when compiling to know + what address to map the ELF binary to. */ +#ifndef LOAD_ADDRESS +#error "Must define LOAD_ADDRESS" +#endif +#ifndef LOAD_INCREMENT +#error "Must define LOAD_INCREMENT" +#endif + +/* Used to spin waiting for GDB. */ +volatile int wait_for_gdb = ATTACH; +#define WAIT_FOR_GDB do {} while (wait_for_gdb) + +/* The current process's PID. GDB retrieves this. */ +int mypid; + +int +MAIN (int argc, char *argv[]) +{ + int i; + alarm (300); + /* Used as backing storage for GDB to populate argv. */ + char *fake_argv[10]; + + mypid = getpid (); + /* gdb break here 0 */ + + if (argc < 2) + { + usage (); + exit (1); + } + + for (i = 1; i < argc; ++i) + { + size_t obj_size; + void *load_addr = (void *) (size_t) (LOAD_ADDRESS + (i - 1) * LOAD_INCREMENT); + printf ("Loading %s as JIT at %p\n", argv[i], load_addr); + void *addr = load_elf (argv[i], &obj_size, load_addr); + + char name[32]; + sprintf (name, "jit_function_%04d", i); + int (*jit_function) (void) = (int (*) (void)) load_symbol (addr, name); + + /* Link entry at the end of the list. */ + struct jit_code_entry *const entry = calloc (1, sizeof (*entry)); + entry->symfile_addr = (const char *)addr; + entry->symfile_size = obj_size; + entry->prev_entry = __jit_debug_descriptor.relevant_entry; + __jit_debug_descriptor.relevant_entry = entry; + + if (entry->prev_entry != NULL) + entry->prev_entry->next_entry = entry; + else + __jit_debug_descriptor.first_entry = entry; + + /* Notify GDB. */ + __jit_debug_descriptor.action_flag = JIT_REGISTER; + __jit_debug_register_code (); + + if (jit_function () != 42) + { + fprintf (stderr, "unexpected return value\n"); + exit (1); + } + } + + WAIT_FOR_GDB; i = 0; /* gdb break here 1 */ + + /* Now unregister them all in reverse order. */ + while (__jit_debug_descriptor.relevant_entry != NULL) + { + struct jit_code_entry *const entry = + __jit_debug_descriptor.relevant_entry; + struct jit_code_entry *const prev_entry = entry->prev_entry; + + if (prev_entry != NULL) + { + prev_entry->next_entry = NULL; + entry->prev_entry = NULL; + } + else + __jit_debug_descriptor.first_entry = NULL; + + /* Notify GDB. */ + __jit_debug_descriptor.action_flag = JIT_UNREGISTER; + __jit_debug_register_code (); + + __jit_debug_descriptor.relevant_entry = prev_entry; + free (entry); + } + + WAIT_FOR_GDB; return 0; /* gdb break here 2 */ +} diff -Nru gdb-9.1/gdb/testsuite/gdb.base/jit-elf-so.exp gdb-10.2/gdb/testsuite/gdb.base/jit-elf-so.exp --- gdb-9.1/gdb/testsuite/gdb.base/jit-elf-so.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/jit-elf-so.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,172 @@ +# Copyright 2011-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# The same tests as in jit.exp, but loading JITer itself from a shared +# library. + +if {[skip_shlib_tests]} { + untested "skipping shared library tests" + return -1 +} + +if {[get_compiler_info]} { + untested "could not get compiler info" + return 1 +} + +load_lib jit-elf-helpers.exp + +# Increase this to see more detail. +set test_verbose 0 + +# The "real" main of this test, which loads jit-elf-main +# as a shared library. +set main_loader_basename jit-elf-dlmain +set main_loader_srcfile ${srcdir}/${subdir}/${main_loader_basename}.c +set main_loader_binfile [standard_output_file ${main_loader_basename}] + +# The main code that loads and registers JIT objects. +set main_solib_basename jit-elf-main +set main_solib_srcfile ${srcdir}/${subdir}/${main_solib_basename}.c +set main_solib_binfile [standard_output_file ${main_solib_basename}.so] + +# The shared library that gets loaded as JIT objects. +set jit_solib_basename jit-elf-solib +set jit_solib_srcfile ${srcdir}/${subdir}/${jit_solib_basename}.c + +# Compile the testcase shared library loader. +# +# OPTIONS is passed to gdb_compile when compiling the binary. +# +# On success, return 0. +# On failure, return -1. +proc compile_jit_dlmain {options} { + global main_loader_srcfile main_loader_binfile main_loader_basename + set options [concat $options debug] + + if { [gdb_compile ${main_loader_srcfile} ${main_loader_binfile} \ + executable $options] != "" } { + untested "failed to compile ${main_loader_basename}.c as an executable" + return -1 + } + + return 0 +} + +# Run $main_loader_binfile and load $main_solib_binfile in +# GDB. Check jit-related debug output and matches `info function` +# output for a jit loaded function using MATCH_STR. +# +# SOLIB_BINFILES_TARGETS is a list of shared libraries to pass +# as arguments when running $main_loader_binfile. +# MATCH_STR is a regular expression that output of `info function` +# must match. +proc one_jit_test {solib_binfiles_target match_str} { + set count [llength $solib_binfiles_target] + with_test_prefix "one_jit_test-$count" { + global test_verbose + global main_loader_binfile main_loader_srcfile + global main_solib_binfile main_solib_srcfile + + clean_restart $main_loader_binfile + gdb_load_shlib $main_solib_binfile + + # This is just to help debugging when things fail + if {$test_verbose > 0} { + gdb_test "set debug jit 1" + } + + if { ![runto_main] } { + fail "can't run to main" + return + } + + gdb_breakpoint [gdb_get_line_number "break here before-dlopen" \ + $main_loader_srcfile] + gdb_continue_to_breakpoint "break here before-dlopen" + gdb_test_no_output "set var jit_libname = \"$main_solib_binfile\"" \ + "setting library name" + + gdb_breakpoint [gdb_get_line_number "break here after-dlopen" \ + $main_loader_srcfile] + gdb_continue_to_breakpoint "break here after-dlopen" + + set line [gdb_get_line_number {break here 0} $main_solib_srcfile] + gdb_breakpoint "$main_solib_srcfile:$line" + gdb_continue_to_breakpoint "break here 0" + + # Poke desired values directly into inferior instead of using "set args" + # because "set args" does not work under gdbserver. + gdb_test_no_output "set var argc=[expr $count + 1]" "forging argc" + gdb_test_no_output "set var argv=fake_argv" "forging argv" + for {set i 1} {$i <= $count} {incr i} { + set binfile_target [lindex $solib_binfiles_target [expr $i-1]] + gdb_test_no_output "set var argv\[$i\]=\"${binfile_target}\"" \ + "forging argv\[$i\]" + } + + set line [gdb_get_line_number {break here 1} $main_solib_srcfile] + gdb_breakpoint "$main_solib_srcfile:$line" + gdb_continue_to_breakpoint "break here 1" + + gdb_test "info function jit_function" "$match_str" + + # This is just to help debugging when things fail + if {$test_verbose > 0} { + gdb_test "maintenance print objfiles" + gdb_test "maintenance info break" + } + + set line [gdb_get_line_number {break here 2} $main_solib_srcfile] + gdb_breakpoint "$main_solib_srcfile:$line" + gdb_continue_to_breakpoint "break here 2" + + # All jit librares must have been unregistered + gdb_test "info function jit_function" \ + "All functions matching regular expression \"jit_function\":" \ + "info function jit_function after unregistration" + } +} + +# Compile the main code (which loads the JIT objects) as a shared library. +if { [compile_jit_elf_main_as_so $main_solib_srcfile $main_solib_binfile \ + {additional_flags="-DMAIN=jit_dl_main"}] < 0 } { + return +} + +# Compile the "real" main for this test. +if { [compile_jit_dlmain {shlib_load}] < 0 } { + return +} + +# Compile two shared libraries to use as JIT objects. +set jit_solibs_target [compile_and_download_n_jit_so \ + $jit_solib_basename $jit_solib_srcfile 2] +if { $jit_solibs_target == -1 } { + return +} + +one_jit_test [lindex $jit_solibs_target 0] "${hex} jit_function_0001" +one_jit_test $jit_solibs_target "${hex} jit_function_0001\[\r\n\]+${hex} jit_function_0002" + +foreach solib $jit_solibs_target { + # We don't intend to load the .so as a JIT debuginfo reader, but we + # need some handy file name for a completion test. + set input [string range $solib 0 [expr { [string length $solib] - 2 }]] + gdb_test \ + "complete jit-reader-load [standard_output_file $input]" \ + "jit-reader-load $solib" \ + "test jit-reader-load filename completion [file tail $solib]" +} diff -Nru gdb-9.1/gdb/testsuite/gdb.base/jit-elf-solib.c gdb-10.2/gdb/testsuite/gdb.base/jit-elf-solib.c --- gdb-9.1/gdb/testsuite/gdb.base/jit-elf-solib.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/jit-elf-solib.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,25 @@ +/* This test program is part of GDB, the GNU debugger. + + Copyright 2011-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +/* This simulates a JIT library. The function name is supplied during + compilation as a macro. */ + +#ifndef FUNCTION_NAME +#error "Must define the FUNCTION_NAME macro to set a jited function name" +#endif + +int FUNCTION_NAME() { return 42; } diff -Nru gdb-9.1/gdb/testsuite/gdb.base/jit-elf-util.h gdb-10.2/gdb/testsuite/gdb.base/jit-elf-util.h --- gdb-9.1/gdb/testsuite/gdb.base/jit-elf-util.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/jit-elf-util.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,118 @@ +/* This test program is part of GDB, the GNU debugger. + + Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +/* Simulates loading of JIT code by memory mapping a compiled + shared library binary and doing minimal post-processing. */ + +#include <elf.h> +#include <errno.h> +#include <fcntl.h> +#include <link.h> +#include <stdint.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <sys/mman.h> +#include <sys/stat.h> +#include <unistd.h> + +/* ElfW is coming from linux. On other platforms it does not exist. + Let us define it here. */ +#ifndef ElfW +#if (defined(_LP64) || defined(__LP64__)) +#define WORDSIZE 64 +#else +#define WORDSIZE 32 +#endif /* _LP64 || __LP64__ */ +#define ElfW(type) _ElfW (Elf, WORDSIZE, type) +#define _ElfW(e, w, t) _ElfW_1 (e, w, _##t) +#define _ElfW_1(e, w, t) e##w##t +#endif /* !ElfW */ + +/* Find symbol with the name `sym_name`. */ +static void * +load_symbol (void *addr, const char *sym_name) +{ + const ElfW (Ehdr) *const ehdr = (ElfW (Ehdr) *) addr; + ElfW (Shdr) *const shdr = (ElfW (Shdr) *) ((char *) addr + ehdr->e_shoff); + + ElfW (Addr) sym_old_addr = 0; + ElfW (Addr) sym_new_addr = 0; + + /* Find `func_name` in symbol_table and return its address. */ + + for (int i = 0; i < ehdr->e_shnum; ++i) + { + if (shdr[i].sh_type == SHT_SYMTAB) + { + ElfW (Sym) *symtab = (ElfW (Sym) *) (addr + shdr[i].sh_offset); + ElfW (Sym) *symtab_end + = (ElfW (Sym) *) (addr + shdr[i].sh_offset + shdr[i].sh_size); + char *const strtab + = (char *) (addr + shdr[shdr[i].sh_link].sh_offset); + + for (ElfW (Sym) *p = symtab; p < symtab_end; ++p) + { + const char *s = strtab + p->st_name; + if (strcmp (s, sym_name) == 0) + return (void *) p->st_value; + } + } + } + + fprintf (stderr, "symbol '%s' not found\n", sym_name); + exit (1); + return 0; +} + +/* Open an elf binary file and memory map it with execution flag enabled. */ +static void * +load_elf (const char *libname, size_t *size, void *load_addr) +{ + int fd; + struct stat st; + + if ((fd = open (libname, O_RDONLY)) == -1) + { + fprintf (stderr, "open (\"%s\", O_RDONLY): %s\n", libname, + strerror (errno)); + exit (1); + } + + if (fstat (fd, &st) != 0) + { + fprintf (stderr, "fstat (\"%d\"): %s\n", fd, strerror (errno)); + exit (1); + } + + void *addr = mmap (load_addr, st.st_size, + PROT_READ | PROT_WRITE | PROT_EXEC, + load_addr != NULL ? MAP_PRIVATE | MAP_FIXED : MAP_PRIVATE, + fd, 0); + close (fd); + + if (addr == MAP_FAILED) + { + fprintf (stderr, "mmap: %s\n", strerror (errno)); + exit (1); + } + + if (size != NULL) + *size = st.st_size; + + return addr; +} diff -Nru gdb-9.1/gdb/testsuite/gdb.base/jit-exec.c gdb-10.2/gdb/testsuite/gdb.base/jit-exec.c --- gdb-9.1/gdb/testsuite/gdb.base/jit-exec.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/jit-exec.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,28 +0,0 @@ -/* This testcase is part of GDB, the GNU debugger. - - Copyright 2018-2020 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -/* Simple standalone program using the JIT API. */ - -#include "jit-simple-jit.c" -#include <unistd.h> - -int -main (int argc, char **argv) -{ - execl (PROGRAM, PROGRAM, (char *) 0); - return 99; -} diff -Nru gdb-9.1/gdb/testsuite/gdb.base/jit-execd.c gdb-10.2/gdb/testsuite/gdb.base/jit-execd.c --- gdb-9.1/gdb/testsuite/gdb.base/jit-execd.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/jit-execd.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,22 +0,0 @@ -/* This testcase is part of GDB, the GNU debugger. - - Copyright 2018-2020 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -int -main (int argc, char **argv) -{ - return 0; -} diff -Nru gdb-9.1/gdb/testsuite/gdb.base/jit-exec.exp gdb-10.2/gdb/testsuite/gdb.base/jit-exec.exp --- gdb-9.1/gdb/testsuite/gdb.base/jit-exec.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/jit-exec.exp 1970-01-01 00:00:00.000000000 +0000 @@ -1,52 +0,0 @@ -# Copyright 2018-2020 Free Software Foundation, Inc. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. - -# Regression test for a jit.c bug. Previously it would crash if an -# inferior that used the JIT API then exec'd a program that did not -# use it. - -if { ![istarget "*-linux*"] } then { - return -} - -standard_testfile jit-exec.c - -set testfile2 "jit-execd" -set srcfile2 ${testfile2}.c -set binfile2 [standard_output_file ${testfile2}] - -set compile_options [list debug additional_flags=-DPROGRAM=\"$binfile2\"] - -if {[gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" \ - executable $compile_options] != ""} { - untested "failed to compile" - return -1 -} - -if {[gdb_compile "${srcdir}/${subdir}/${srcfile2}" "${binfile2}" \ - executable $compile_options] != ""} { - untested "failed to compile" - return -1 -} - -clean_restart $binfile - -if {![runto_main]} { - fail "can't run to main" - return -} - -delete_breakpoints -gdb_test "continue" "Inferior .* exited normally.*" diff -Nru gdb-9.1/gdb/testsuite/gdb.base/jit.exp gdb-10.2/gdb/testsuite/gdb.base/jit.exp --- gdb-9.1/gdb/testsuite/gdb.base/jit.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/jit.exp 1970-01-01 00:00:00.000000000 +0000 @@ -1,176 +0,0 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. - -if {[skip_shlib_tests]} { - untested "skipping shared library tests" - return -1 -} - -if {[get_compiler_info]} { - untested "could not get compiler info" - return 1 -} - -# Compile the testcase program and library. BINSUFFIX is the suffix -# to append to the program and library filenames, to make them unique -# between invocations. OPTIONS is passed to gdb_compile when -# compiling the program. - -proc compile_jit_test {testname binsuffix options} { - global testfile srcfile binfile srcdir subdir - global solib_testfile solib_srcfile solib_binfile solib_binfile_test_msg - global solib_binfile_target - - set testfile jit-main - set srcfile ${testfile}.c - set binfile [standard_output_file $testfile$binsuffix] - if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" \ - executable [concat debug $options]] != "" } { - untested $testname - return -1 - } - - set solib_testfile "jit-solib" - set solib_srcfile "${srcdir}/${subdir}/${solib_testfile}.c" - set solib_binfile [standard_output_file ${solib_testfile}$binsuffix.so] - set solib_binfile_test_msg "SHLIBDIR/${solib_testfile}$binsuffix.so" - - # Note: compiling without debug info: the library goes through - # symbol renaming by munging on its symbol table, and that - # wouldn't work for .debug sections. Also, output for "info - # function" changes when debug info is present. - if { [gdb_compile_shlib ${solib_srcfile} ${solib_binfile} {-fPIC}] != "" } { - untested $testname - return -1 - } - - set solib_binfile_target [gdb_remote_download target ${solib_binfile}] - - return 0 -} - -# Detach, restart GDB, and re-attach to the program. - -proc clean_reattach {} { - global decimal gdb_prompt srcfile testfile - - # Get PID of test program. - set testpid -1 - set test "get inferior process ID" - gdb_test_multiple "p mypid" $test { - -re ".* = ($decimal).*$gdb_prompt $" { - set testpid $expect_out(1,string) - pass $test - } - } - - gdb_test_no_output "set var wait_for_gdb = 1" - gdb_test "detach" "Detaching from .*" - - clean_restart $testfile - - set test "attach" - gdb_test_multiple "attach $testpid" "$test" { - -re "Attaching to program.*.*main.*at .*$srcfile:.*$gdb_prompt $" { - pass "$test" - } - } - - gdb_test_no_output "set var wait_for_gdb = 0" -} - -# Continue to LOCATION in the program. If REATTACH, detach and -# re-attach to the program from scratch. -proc continue_to_test_location {location reattach} { - gdb_breakpoint [gdb_get_line_number $location] - gdb_continue_to_breakpoint $location - if {$reattach} { - with_test_prefix "$location" { - clean_reattach - } - } -} - -proc one_jit_test {count match_str reattach} { - with_test_prefix "one_jit_test-$count" { - global verbose testfile solib_binfile_target solib_binfile_test_msg - - clean_restart $testfile - - # This is just to help debugging when things fail - if {$verbose > 0} { - gdb_test "set debug jit 1" - } - - if { ![runto_main] } { - fail "can't run to main" - return - } - - gdb_breakpoint [gdb_get_line_number "break here 0"] - gdb_continue_to_breakpoint "break here 0" - - # Poke desired values directly into inferior instead of using "set args" - # because "set args" does not work under gdbserver. - gdb_test_no_output "set var argc = 2" - gdb_test_no_output "set var libname = \"$solib_binfile_target\"" "set var libname = \"$solib_binfile_test_msg\"" - gdb_test_no_output "set var count = $count" - - continue_to_test_location "break here 1" $reattach - - gdb_test "info function ^jit_function" "$match_str" - - # This is just to help debugging when things fail - if {$verbose > 0} { - gdb_test "maintenance print objfiles" - gdb_test "maintenance info break" - } - - continue_to_test_location "break here 2" $reattach - - # All jit librares must have been unregistered - gdb_test "info function jit_function" \ - "All functions matching regular expression \"jit_function\":" - } -} - -if {[compile_jit_test jit.exp "" {}] < 0} { - return -} -one_jit_test 1 "${hex} jit_function_0000" 0 -one_jit_test 2 "${hex} jit_function_0000\[\r\n\]+${hex} jit_function_0001" 0 - -# Test attaching to an inferior with some JIT libraries already -# registered. We reuse the normal test, and detach/reattach at -# specific interesting points. -if {[can_spawn_for_attach]} { - if {[compile_jit_test "jit.exp attach tests" \ - "-attach" {additional_flags=-DATTACH=1}] < 0} { - return - } - - with_test_prefix attach { - one_jit_test 2 "${hex} jit_function_0000\[\r\n\]+${hex} jit_function_0001" 1 - } -} - -with_test_prefix PIE { - if {[compile_jit_test "jit.exp PIE tests" \ - "-pie" {additional_flags=-fPIE ldflags=-pie}] < 0} { - return - } - - one_jit_test 1 "${hex} jit_function_0000" 0 -} diff -Nru gdb-9.1/gdb/testsuite/gdb.base/jithost.c gdb-10.2/gdb/testsuite/gdb.base/jithost.c --- gdb-9.1/gdb/testsuite/gdb.base/jithost.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/jithost.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,98 +0,0 @@ -/* Copyright (C) 2009-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <unistd.h> - -#include <sys/mman.h> - -#include JIT_READER_H /* Please see jit-reader.exp for an explanation. */ -#include "jithost.h" -#include "jit-protocol.h" - -void __attribute__((noinline)) __jit_debug_register_code () { } - -struct jit_descriptor __jit_debug_descriptor = { 1, 0, 0, 0 }; -struct jit_code_entry only_entry; - -typedef void (jit_function_stack_mangle_t) (void); -typedef long (jit_function_add_t) (long a, long b); - -/* The code of the jit_function_00 function that is copied into an - mmapped buffer in the inferior at run time. - - The second instruction mangles the stack pointer, meaning that when - stopped at the third instruction, GDB needs assistance from the JIT - unwinder in order to be able to unwind successfully. */ -static const unsigned char jit_function_stack_mangle_code[] = { - 0xcc, /* int3 */ - 0x48, 0x83, 0xf4, 0xff, /* xor $0xffffffffffffffff, %rsp */ - 0x48, 0x83, 0xf4, 0xff, /* xor $0xffffffffffffffff, %rsp */ - 0xc3 /* ret */ -}; - -/* And another "JIT-ed" function, with the prototype `jit_function_add_t`. */ -static const unsigned char jit_function_add_code[] = { - 0x48, 0x01, 0xfe, /* add %rdi,%rsi */ - 0x48, 0x89, 0xf0, /* mov %rsi,%rax */ - 0xc3, /* retq */ -}; - -int -main (int argc, char **argv) -{ - struct jithost_abi *symfile = malloc (sizeof (struct jithost_abi)); - char *code = mmap (NULL, getpagesize (), PROT_WRITE | PROT_EXEC, - MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); - char *code_end = code; - - /* "JIT" function_stack_mangle. */ - memcpy (code_end, jit_function_stack_mangle_code, - sizeof (jit_function_stack_mangle_code)); - jit_function_stack_mangle_t *function_stack_mangle - = (jit_function_stack_mangle_t *) code_end; - symfile->function_stack_mangle.begin = code_end; - code_end += sizeof (jit_function_stack_mangle_code); - symfile->function_stack_mangle.end = code_end; - - /* "JIT" function_add. */ - memcpy (code_end, jit_function_add_code, sizeof (jit_function_add_code)); - jit_function_add_t *function_add = (jit_function_add_t *) code_end; - symfile->function_add.begin = code_end; - code_end += sizeof (jit_function_add_code); - symfile->function_add.end = code_end; - - /* Bounds of the whole object. */ - symfile->object.begin = code; - symfile->object.end = code_end; - - only_entry.symfile_addr = symfile; - only_entry.symfile_size = sizeof (struct jithost_abi); - - __jit_debug_descriptor.first_entry = &only_entry; - __jit_debug_descriptor.relevant_entry = &only_entry; - __jit_debug_descriptor.action_flag = JIT_REGISTER; - __jit_debug_descriptor.version = 1; - __jit_debug_register_code (); - - function_stack_mangle (); - function_add (5, 6); - - return 0; -} diff -Nru gdb-9.1/gdb/testsuite/gdb.base/jithost.h gdb-10.2/gdb/testsuite/gdb.base/jithost.h --- gdb-9.1/gdb/testsuite/gdb.base/jithost.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/jithost.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,38 +0,0 @@ -/* Copyright (C) 2009-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef JITHOST_H -#define JITHOST_H - -struct jithost_abi_bounds -{ - const char *begin, *end; -}; - -struct jithost_abi -{ - /* Beginning and past-the-end for the whole object. */ - struct jithost_abi_bounds object; - - /* Beginning and past-the-end for function_stack_mangle. */ - struct jithost_abi_bounds function_stack_mangle; - - /* Beginning and past-the-end for function_add. */ - struct jithost_abi_bounds function_add; -}; - -#endif /* JITHOST_H */ diff -Nru gdb-9.1/gdb/testsuite/gdb.base/jit-main.c gdb-10.2/gdb/testsuite/gdb.base/jit-main.c --- gdb-9.1/gdb/testsuite/gdb.base/jit-main.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/jit-main.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,236 +0,0 @@ -/* This test program is part of GDB, the GNU debugger. - - Copyright 2011-2020 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -/* Simulate loading of JIT code. */ - -#include <elf.h> -#include <link.h> -#include <errno.h> -#include <fcntl.h> -#include <stdint.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <sys/mman.h> -#include <sys/stat.h> -#include <unistd.h> - -/* ElfW is coming from linux. On other platforms it does not exist. - Let us define it here. */ -#ifndef ElfW -# if (defined (_LP64) || defined (__LP64__)) -# define WORDSIZE 64 -# else -# define WORDSIZE 32 -# endif /* _LP64 || __LP64__ */ -#define ElfW(type) _ElfW (Elf, WORDSIZE, type) -#define _ElfW(e,w,t) _ElfW_1 (e, w, _##t) -#define _ElfW_1(e,w,t) e##w##t -#endif /* !ElfW */ - -typedef enum -{ - JIT_NOACTION = 0, - JIT_REGISTER_FN, - JIT_UNREGISTER_FN -} jit_actions_t; - -struct jit_code_entry -{ - struct jit_code_entry *next_entry; - struct jit_code_entry *prev_entry; - const char *symfile_addr; - uint64_t symfile_size; -}; - -struct jit_descriptor -{ - uint32_t version; - /* This type should be jit_actions_t, but we use uint32_t - to be explicit about the bitwidth. */ - uint32_t action_flag; - struct jit_code_entry *relevant_entry; - struct jit_code_entry *first_entry; -}; - -/* GDB puts a breakpoint in this function. */ -void __attribute__((noinline)) __jit_debug_register_code () { } - -/* Make sure to specify the version statically, because the - debugger may check the version before we can set it. */ -struct jit_descriptor __jit_debug_descriptor = { 1, 0, 0, 0 }; - -static void -usage (const char *const argv0) -{ - fprintf (stderr, "Usage: %s library [count]\n", argv0); - exit (1); -} - -/* Update .p_vaddr and .sh_addr as if the code was JITted to ADDR. */ - -static void -update_locations (const void *const addr, int idx) -{ - const ElfW (Ehdr) *const ehdr = (ElfW (Ehdr) *)addr; - ElfW (Shdr) *const shdr = (ElfW (Shdr) *)((char *)addr + ehdr->e_shoff); - ElfW (Phdr) *const phdr = (ElfW (Phdr) *)((char *)addr + ehdr->e_phoff); - int i; - - for (i = 0; i < ehdr->e_phnum; ++i) - if (phdr[i].p_type == PT_LOAD) - phdr[i].p_vaddr += (ElfW (Addr))addr; - - for (i = 0; i < ehdr->e_shnum; ++i) - { - if (shdr[i].sh_type == SHT_STRTAB) - { - /* Note: we update both .strtab and .dynstr. The latter would - not be correct if this were a regular shared library (.hash - would be wrong), but this is a simulation -- the library is - never exposed to the dynamic loader, so it all ends up ok. */ - char *const strtab = (char *)((ElfW (Addr))addr + shdr[i].sh_offset); - char *const strtab_end = strtab + shdr[i].sh_size; - char *p; - - for (p = strtab; p < strtab_end; p += strlen (p) + 1) - if (strcmp (p, "jit_function_XXXX") == 0) - sprintf (p, "jit_function_%04d", idx); - } - - if (shdr[i].sh_flags & SHF_ALLOC) - shdr[i].sh_addr += (ElfW (Addr))addr; - } -} - -/* Defined by the .exp file if testing attach. */ -#ifndef ATTACH -#define ATTACH 0 -#endif - -#ifndef MAIN -#define MAIN main -#endif - -/* Used to spin waiting for GDB. */ -volatile int wait_for_gdb = ATTACH; -#define WAIT_FOR_GDB while (wait_for_gdb) - -/* The current process's PID. GDB retrieves this. */ -int mypid; - -int -MAIN (int argc, char *argv[]) -{ - /* These variables are here so they can easily be set from jit.exp. */ - const char *libname = NULL; - int count = 0, i, fd; - struct stat st; - - alarm (300); - - mypid = getpid (); - - count = count; /* gdb break here 0 */ - - if (argc < 2) - { - usage (argv[0]); - exit (1); - } - - if (libname == NULL) - /* Only set if not already set from GDB. */ - libname = argv[1]; - - if (argc > 2 && count == 0) - /* Only set if not already set from GDB. */ - count = atoi (argv[2]); - - printf ("%s:%d: libname = %s, count = %d\n", __FILE__, __LINE__, - libname, count); - - if ((fd = open (libname, O_RDONLY)) == -1) - { - fprintf (stderr, "open (\"%s\", O_RDONLY): %s\n", libname, - strerror (errno)); - exit (1); - } - - if (fstat (fd, &st) != 0) - { - fprintf (stderr, "fstat (\"%d\"): %s\n", fd, strerror (errno)); - exit (1); - } - - for (i = 0; i < count; ++i) - { - const void *const addr = mmap (0, st.st_size, PROT_READ|PROT_WRITE, - MAP_PRIVATE, fd, 0); - struct jit_code_entry *const entry = calloc (1, sizeof (*entry)); - - if (addr == MAP_FAILED) - { - fprintf (stderr, "mmap: %s\n", strerror (errno)); - exit (1); - } - - update_locations (addr, i); - - /* Link entry at the end of the list. */ - entry->symfile_addr = (const char *)addr; - entry->symfile_size = st.st_size; - entry->prev_entry = __jit_debug_descriptor.relevant_entry; - __jit_debug_descriptor.relevant_entry = entry; - - if (entry->prev_entry != NULL) - entry->prev_entry->next_entry = entry; - else - __jit_debug_descriptor.first_entry = entry; - - /* Notify GDB. */ - __jit_debug_descriptor.action_flag = JIT_REGISTER_FN; - __jit_debug_register_code (); - } - - WAIT_FOR_GDB; i = 0; /* gdb break here 1 */ - - /* Now unregister them all in reverse order. */ - while (__jit_debug_descriptor.relevant_entry != NULL) - { - struct jit_code_entry *const entry = - __jit_debug_descriptor.relevant_entry; - struct jit_code_entry *const prev_entry = entry->prev_entry; - - if (prev_entry != NULL) - { - prev_entry->next_entry = NULL; - entry->prev_entry = NULL; - } - else - __jit_debug_descriptor.first_entry = NULL; - - /* Notify GDB. */ - __jit_debug_descriptor.action_flag = JIT_UNREGISTER_FN; - __jit_debug_register_code (); - - __jit_debug_descriptor.relevant_entry = prev_entry; - free (entry); - } - - WAIT_FOR_GDB; return 0; /* gdb break here 2 */ -} diff -Nru gdb-9.1/gdb/testsuite/gdb.base/jit-protocol.h gdb-10.2/gdb/testsuite/gdb.base/jit-protocol.h --- gdb-9.1/gdb/testsuite/gdb.base/jit-protocol.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/jit-protocol.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2009-2020 Free Software Foundation, Inc. +/* Copyright (C) 2009-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -38,7 +38,7 @@ { struct jit_code_entry *next_entry; struct jit_code_entry *prev_entry; - void *symfile_addr; + const void *symfile_addr; uint64_t symfile_size; }; @@ -51,4 +51,10 @@ struct jit_code_entry *first_entry; }; +struct jit_descriptor __jit_debug_descriptor = { 1, 0, 0, 0 }; + +void __attribute__((noinline)) __jit_debug_register_code() +{ +} + #endif /* JIT_PROTOCOL_H */ diff -Nru gdb-9.1/gdb/testsuite/gdb.base/jit-reader.c gdb-10.2/gdb/testsuite/gdb.base/jit-reader.c --- gdb-9.1/gdb/testsuite/gdb.base/jit-reader.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/jit-reader.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,211 @@ +/* Copyright (C) 2009-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include <stdint.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#include JIT_READER_H /* Please see jit-reader.exp for an explanation. */ +#include "jit-reader-host.h" + +GDB_DECLARE_GPL_COMPATIBLE_READER; + +enum register_mapping +{ + AMD64_RA = 16, + AMD64_RBP = 6, + AMD64_RSP = 7, +}; + +struct reader_state +{ + struct { + uintptr_t begin; + uintptr_t end; + } func_stack_mangle; +}; + +static enum gdb_status +read_debug_info (struct gdb_reader_funcs *self, + struct gdb_symbol_callbacks *cbs, + void *memory, long memory_sz) +{ + struct jithost_abi *symfile = memory; + struct gdb_object *object = cbs->object_open (cbs); + struct gdb_symtab *symtab = cbs->symtab_open (cbs, object, ""); + + struct reader_state *state = (struct reader_state *) self->priv_data; + + /* Record the stack mangle function's range, for the unwinder. */ + state->func_stack_mangle.begin + = (uintptr_t) symfile->function_stack_mangle.begin; + state->func_stack_mangle.end + = (uintptr_t) symfile->function_stack_mangle.end; + + cbs->block_open (cbs, symtab, NULL, + (GDB_CORE_ADDR) symfile->function_stack_mangle.begin, + (GDB_CORE_ADDR) symfile->function_stack_mangle.end, + "jit_function_stack_mangle"); + + cbs->block_open (cbs, symtab, NULL, + (GDB_CORE_ADDR) symfile->function_add.begin, + (GDB_CORE_ADDR) symfile->function_add.end, + "jit_function_add"); + + cbs->symtab_close (cbs, symtab); + cbs->object_close (cbs, object); + return GDB_SUCCESS; +} + +static void +free_reg_value (struct gdb_reg_value *value) +{ + free (value); +} + +static void +write_register (struct gdb_unwind_callbacks *callbacks, int dw_reg, + uintptr_t value) +{ + const int size = sizeof (uintptr_t); + struct gdb_reg_value *reg_val = + malloc (sizeof (struct gdb_reg_value) + size - 1); + reg_val->defined = 1; + reg_val->free = free_reg_value; + + memcpy (reg_val->value, &value, size); + callbacks->reg_set (callbacks, dw_reg, reg_val); +} + +static int +read_register (struct gdb_unwind_callbacks *callbacks, int dw_reg, + uintptr_t *value) +{ + const int size = sizeof (uintptr_t); + struct gdb_reg_value *reg_val = callbacks->reg_get (callbacks, dw_reg); + if (reg_val->size != size || !reg_val->defined) + { + reg_val->free (reg_val); + return 0; + } + memcpy (value, reg_val->value, size); + reg_val->free (reg_val); + return 1; +} + +/* Read the stack pointer into *VALUE. IP is the address the inferior + is currently stopped at. Takes care of demangling the stack + pointer if necessary. */ + +static int +read_sp (struct gdb_reader_funcs *self, struct gdb_unwind_callbacks *cbs, + uintptr_t ip, uintptr_t *value) +{ + struct reader_state *state = (struct reader_state *) self->priv_data; + uintptr_t sp; + + if (!read_register (cbs, AMD64_RSP, &sp)) + return GDB_FAIL; + + /* If stopped at the instruction after the "xor $-1, %rsp", demangle + the stack pointer back. */ + if (ip == state->func_stack_mangle.begin + 5) + sp ^= (uintptr_t) -1; + + *value = sp; + return GDB_SUCCESS; +} + +static enum gdb_status +unwind_frame (struct gdb_reader_funcs *self, struct gdb_unwind_callbacks *cbs) +{ + const int word_size = sizeof (uintptr_t); + uintptr_t prev_sp, this_sp; + uintptr_t prev_ip, this_ip; + uintptr_t prev_bp, this_bp; + struct reader_state *state = (struct reader_state *) self->priv_data; + + if (!read_register (cbs, AMD64_RA, &this_ip)) + return GDB_FAIL; + + if (this_ip >= state->func_stack_mangle.end + || this_ip < state->func_stack_mangle.begin) + return GDB_FAIL; + + /* Unwind RBP in order to make the unwinder that tries to unwind + from the just-unwound frame happy. */ + if (!read_register (cbs, AMD64_RBP, &this_bp)) + return GDB_FAIL; + /* RBP is unmodified. */ + prev_bp = this_bp; + + /* Fetch the demangled stack pointer. */ + if (!read_sp (self, cbs, this_ip, &this_sp)) + return GDB_FAIL; + + /* The return address is saved on the stack. */ + if (cbs->target_read (this_sp, &prev_ip, word_size) == GDB_FAIL) + return GDB_FAIL; + prev_sp = this_sp + word_size; + + write_register (cbs, AMD64_RA, prev_ip); + write_register (cbs, AMD64_RSP, prev_sp); + write_register (cbs, AMD64_RBP, prev_bp); + return GDB_SUCCESS; +} + +static struct gdb_frame_id +get_frame_id (struct gdb_reader_funcs *self, struct gdb_unwind_callbacks *cbs) +{ + struct reader_state *state = (struct reader_state *) self->priv_data; + struct gdb_frame_id frame_id; + uintptr_t ip; + uintptr_t sp; + + read_register (cbs, AMD64_RA, &ip); + read_sp (self, cbs, ip, &sp); + + frame_id.code_address = (GDB_CORE_ADDR) state->func_stack_mangle.begin; + frame_id.stack_address = (GDB_CORE_ADDR) sp; + + return frame_id; +} + +static void +destroy_reader (struct gdb_reader_funcs *self) +{ + free (self->priv_data); + free (self); +} + +struct gdb_reader_funcs * +gdb_init_reader (void) +{ + struct reader_state *state = calloc (1, sizeof (struct reader_state)); + struct gdb_reader_funcs *reader_funcs = + malloc (sizeof (struct gdb_reader_funcs)); + + reader_funcs->reader_version = GDB_READER_INTERFACE_VERSION; + reader_funcs->priv_data = state; + reader_funcs->read = read_debug_info; + reader_funcs->unwind = unwind_frame; + reader_funcs->get_frame_id = get_frame_id; + reader_funcs->destroy = destroy_reader; + + return reader_funcs; +} diff -Nru gdb-9.1/gdb/testsuite/gdb.base/jitreader.c gdb-10.2/gdb/testsuite/gdb.base/jitreader.c --- gdb-9.1/gdb/testsuite/gdb.base/jitreader.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/jitreader.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,211 +0,0 @@ -/* Copyright (C) 2009-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include <stdint.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> - -#include JIT_READER_H /* Please see jit-reader.exp for an explanation. */ -#include "jithost.h" - -GDB_DECLARE_GPL_COMPATIBLE_READER; - -enum register_mapping -{ - AMD64_RA = 16, - AMD64_RBP = 6, - AMD64_RSP = 7, -}; - -struct reader_state -{ - struct { - uintptr_t begin; - uintptr_t end; - } func_stack_mangle; -}; - -static enum gdb_status -read_debug_info (struct gdb_reader_funcs *self, - struct gdb_symbol_callbacks *cbs, - void *memory, long memory_sz) -{ - struct jithost_abi *symfile = memory; - struct gdb_object *object = cbs->object_open (cbs); - struct gdb_symtab *symtab = cbs->symtab_open (cbs, object, ""); - - struct reader_state *state = (struct reader_state *) self->priv_data; - - /* Record the stack mangle function's range, for the unwinder. */ - state->func_stack_mangle.begin - = (uintptr_t) symfile->function_stack_mangle.begin; - state->func_stack_mangle.end - = (uintptr_t) symfile->function_stack_mangle.end; - - cbs->block_open (cbs, symtab, NULL, - (GDB_CORE_ADDR) symfile->function_stack_mangle.begin, - (GDB_CORE_ADDR) symfile->function_stack_mangle.end, - "jit_function_stack_mangle"); - - cbs->block_open (cbs, symtab, NULL, - (GDB_CORE_ADDR) symfile->function_add.begin, - (GDB_CORE_ADDR) symfile->function_add.end, - "jit_function_add"); - - cbs->symtab_close (cbs, symtab); - cbs->object_close (cbs, object); - return GDB_SUCCESS; -} - -static void -free_reg_value (struct gdb_reg_value *value) -{ - free (value); -} - -static void -write_register (struct gdb_unwind_callbacks *callbacks, int dw_reg, - uintptr_t value) -{ - const int size = sizeof (uintptr_t); - struct gdb_reg_value *reg_val = - malloc (sizeof (struct gdb_reg_value) + size - 1); - reg_val->defined = 1; - reg_val->free = free_reg_value; - - memcpy (reg_val->value, &value, size); - callbacks->reg_set (callbacks, dw_reg, reg_val); -} - -static int -read_register (struct gdb_unwind_callbacks *callbacks, int dw_reg, - uintptr_t *value) -{ - const int size = sizeof (uintptr_t); - struct gdb_reg_value *reg_val = callbacks->reg_get (callbacks, dw_reg); - if (reg_val->size != size || !reg_val->defined) - { - reg_val->free (reg_val); - return 0; - } - memcpy (value, reg_val->value, size); - reg_val->free (reg_val); - return 1; -} - -/* Read the stack pointer into *VALUE. IP is the address the inferior - is currently stopped at. Takes care of demangling the stack - pointer if necessary. */ - -static int -read_sp (struct gdb_reader_funcs *self, struct gdb_unwind_callbacks *cbs, - uintptr_t ip, uintptr_t *value) -{ - struct reader_state *state = (struct reader_state *) self->priv_data; - uintptr_t sp; - - if (!read_register (cbs, AMD64_RSP, &sp)) - return GDB_FAIL; - - /* If stopped at the instruction after the "xor $-1, %rsp", demangle - the stack pointer back. */ - if (ip == state->func_stack_mangle.begin + 5) - sp ^= (uintptr_t) -1; - - *value = sp; - return GDB_SUCCESS; -} - -static enum gdb_status -unwind_frame (struct gdb_reader_funcs *self, struct gdb_unwind_callbacks *cbs) -{ - const int word_size = sizeof (uintptr_t); - uintptr_t prev_sp, this_sp; - uintptr_t prev_ip, this_ip; - uintptr_t prev_bp, this_bp; - struct reader_state *state = (struct reader_state *) self->priv_data; - - if (!read_register (cbs, AMD64_RA, &this_ip)) - return GDB_FAIL; - - if (this_ip >= state->func_stack_mangle.end - || this_ip < state->func_stack_mangle.begin) - return GDB_FAIL; - - /* Unwind RBP in order to make the unwinder that tries to unwind - from the just-unwound frame happy. */ - if (!read_register (cbs, AMD64_RBP, &this_bp)) - return GDB_FAIL; - /* RBP is unmodified. */ - prev_bp = this_bp; - - /* Fetch the demangled stack pointer. */ - if (!read_sp (self, cbs, this_ip, &this_sp)) - return GDB_FAIL; - - /* The return address is saved on the stack. */ - if (cbs->target_read (this_sp, &prev_ip, word_size) == GDB_FAIL) - return GDB_FAIL; - prev_sp = this_sp + word_size; - - write_register (cbs, AMD64_RA, prev_ip); - write_register (cbs, AMD64_RSP, prev_sp); - write_register (cbs, AMD64_RBP, prev_bp); - return GDB_SUCCESS; -} - -static struct gdb_frame_id -get_frame_id (struct gdb_reader_funcs *self, struct gdb_unwind_callbacks *cbs) -{ - struct reader_state *state = (struct reader_state *) self->priv_data; - struct gdb_frame_id frame_id; - uintptr_t ip; - uintptr_t sp; - - read_register (cbs, AMD64_RA, &ip); - read_sp (self, cbs, ip, &sp); - - frame_id.code_address = (GDB_CORE_ADDR) state->func_stack_mangle.begin; - frame_id.stack_address = (GDB_CORE_ADDR) sp; - - return frame_id; -} - -static void -destroy_reader (struct gdb_reader_funcs *self) -{ - free (self->priv_data); - free (self); -} - -struct gdb_reader_funcs * -gdb_init_reader (void) -{ - struct reader_state *state = calloc (1, sizeof (struct reader_state)); - struct gdb_reader_funcs *reader_funcs = - malloc (sizeof (struct gdb_reader_funcs)); - - reader_funcs->reader_version = GDB_READER_INTERFACE_VERSION; - reader_funcs->priv_data = state; - reader_funcs->read = read_debug_info; - reader_funcs->unwind = unwind_frame; - reader_funcs->get_frame_id = get_frame_id; - reader_funcs->destroy = destroy_reader; - - return reader_funcs; -} diff -Nru gdb-9.1/gdb/testsuite/gdb.base/jit-reader-exec.c gdb-10.2/gdb/testsuite/gdb.base/jit-reader-exec.c --- gdb-9.1/gdb/testsuite/gdb.base/jit-reader-exec.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/jit-reader-exec.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,28 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2018-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +/* Simple standalone program using the JIT API. */ + +#include "jit-reader-simple-jit.c" +#include <unistd.h> + +int +main (int argc, char **argv) +{ + execl (PROGRAM, PROGRAM, (char *) 0); + return 99; +} diff -Nru gdb-9.1/gdb/testsuite/gdb.base/jit-reader-execd.c gdb-10.2/gdb/testsuite/gdb.base/jit-reader-execd.c --- gdb-9.1/gdb/testsuite/gdb.base/jit-reader-execd.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/jit-reader-execd.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,22 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2018-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +int +main (int argc, char **argv) +{ + return 0; +} diff -Nru gdb-9.1/gdb/testsuite/gdb.base/jit-reader-exec.exp gdb-10.2/gdb/testsuite/gdb.base/jit-reader-exec.exp --- gdb-9.1/gdb/testsuite/gdb.base/jit-reader-exec.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/jit-reader-exec.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,52 @@ +# Copyright 2018-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Regression test for a jit.c bug. Previously it would crash if an +# inferior that used the JIT API then exec'd a program that did not +# use it. + +if { ![istarget "*-linux*"] } then { + return +} + +standard_testfile jit-reader-exec.c + +set testfile2 "jit-reader-execd" +set srcfile2 ${testfile2}.c +set binfile2 [standard_output_file ${testfile2}] + +set compile_options [list debug additional_flags=-DPROGRAM=\"$binfile2\"] + +if {[gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" \ + executable $compile_options] != ""} { + untested "failed to compile" + return -1 +} + +if {[gdb_compile "${srcdir}/${subdir}/${srcfile2}" "${binfile2}" \ + executable $compile_options] != ""} { + untested "failed to compile" + return -1 +} + +clean_restart $binfile + +if {![runto_main]} { + fail "can't run to main" + return +} + +delete_breakpoints +gdb_test "continue" "Inferior .* exited normally.*" diff -Nru gdb-9.1/gdb/testsuite/gdb.base/jit-reader.exp gdb-10.2/gdb/testsuite/gdb.base/jit-reader.exp --- gdb-9.1/gdb/testsuite/gdb.base/jit-reader.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/jit-reader.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -13,7 +13,7 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. -standard_testfile jithost.c +standard_testfile jit-reader-host.c if { (![istarget x86_64-*-*] && ![istarget i?86-*-*]) || ![is_lp64_target] } { return -1; @@ -32,6 +32,10 @@ return 1 } + +# Increase this to see more detail. +set test_verbose 0 + set jit_host_src $srcfile set jit_host_bin $binfile @@ -47,7 +51,7 @@ return -1 } -set jit_reader jitreader +set jit_reader jit-reader set jit_reader_src ${jit_reader}.c set jit_reader_bin [standard_output_file ${jit_reader}.so] @@ -66,7 +70,8 @@ set any "\[^\r\n\]*" set neg_decimal "-?$decimal" - gdb_test "info registers" \ + + set expected \ [multi_line \ "rax $hex +$neg_decimal" \ "rbx $hex +$neg_decimal" \ @@ -93,12 +98,17 @@ "fs $hex +$neg_decimal" \ "gs $hex +$neg_decimal" \ ] + + # There may be more registers. + append expected ".*" + + gdb_test "info registers" $expected } proc jit_reader_test {} { global jit_host_bin global jit_reader_bin - global verbose + global test_verbose global hex decimal set any "\[^\r\n\]*" @@ -106,7 +116,7 @@ clean_restart $jit_host_bin gdb_load_shlib $jit_reader_bin - if {$verbose > 0} { + if {$test_verbose > 0} { gdb_test_no_output "set debug jit 1" } @@ -170,7 +180,8 @@ # Since the JIT unwinder only provides RIP/RSP/RBP, # all other registers should show as "<not saved>". - gdb_test "info registers" \ + + set expected \ [multi_line \ "rax <not saved>" \ "rbx <not saved>" \ @@ -198,6 +209,11 @@ "gs <not saved>" \ ] + # There may be more registers. + append expected ".*" + + gdb_test "info registers" $expected + # Make sure that "info frame" doesn't crash. gdb_test "info frame" "Stack level 1, .*in main.*" diff -Nru gdb-9.1/gdb/testsuite/gdb.base/jit-reader-host.c gdb-10.2/gdb/testsuite/gdb.base/jit-reader-host.c --- gdb-9.1/gdb/testsuite/gdb.base/jit-reader-host.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/jit-reader-host.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,98 @@ +/* Copyright (C) 2009-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include <assert.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> + +#include <sys/mman.h> + +#include JIT_READER_H /* Please see jit-reader.exp for an explanation. */ +#include "jit-reader-host.h" +#include "jit-protocol.h" + +struct jit_code_entry only_entry; + +typedef void (jit_function_stack_mangle_t) (void); +typedef long (jit_function_add_t) (long a, long b); + +/* The code of the jit_function_00 function that is copied into an + mmapped buffer in the inferior at run time. + + The second instruction mangles the stack pointer, meaning that when + stopped at the third instruction, GDB needs assistance from the JIT + unwinder in order to be able to unwind successfully. */ +static const unsigned char jit_function_stack_mangle_code[] = { + 0xcc, /* int3 */ + 0x48, 0x83, 0xf4, 0xff, /* xor $0xffffffffffffffff, %rsp */ + 0x48, 0x83, 0xf4, 0xff, /* xor $0xffffffffffffffff, %rsp */ + 0xc3 /* ret */ +}; + +/* And another "JIT-ed" function, with the prototype `jit_function_add_t`. */ +static const unsigned char jit_function_add_code[] = { + 0x48, 0x01, 0xfe, /* add %rdi,%rsi */ + 0x48, 0x89, 0xf0, /* mov %rsi,%rax */ + 0xc3, /* retq */ +}; + +int +main (int argc, char **argv) +{ + struct jithost_abi *symfile = malloc (sizeof (struct jithost_abi)); + char *code = mmap (NULL, getpagesize (), PROT_WRITE | PROT_EXEC, + MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); + char *code_end = code; + + assert (code != MAP_FAILED); + + /* "JIT" function_stack_mangle. */ + memcpy (code_end, jit_function_stack_mangle_code, + sizeof (jit_function_stack_mangle_code)); + jit_function_stack_mangle_t *function_stack_mangle + = (jit_function_stack_mangle_t *) code_end; + symfile->function_stack_mangle.begin = code_end; + code_end += sizeof (jit_function_stack_mangle_code); + symfile->function_stack_mangle.end = code_end; + + /* "JIT" function_add. */ + memcpy (code_end, jit_function_add_code, sizeof (jit_function_add_code)); + jit_function_add_t *function_add = (jit_function_add_t *) code_end; + symfile->function_add.begin = code_end; + code_end += sizeof (jit_function_add_code); + symfile->function_add.end = code_end; + + /* Bounds of the whole object. */ + symfile->object.begin = code; + symfile->object.end = code_end; + + only_entry.symfile_addr = symfile; + only_entry.symfile_size = sizeof (struct jithost_abi); + + __jit_debug_descriptor.first_entry = &only_entry; + __jit_debug_descriptor.relevant_entry = &only_entry; + __jit_debug_descriptor.action_flag = JIT_REGISTER; + __jit_debug_descriptor.version = 1; + __jit_debug_register_code (); + + function_stack_mangle (); + function_add (5, 6); + + return 0; +} diff -Nru gdb-9.1/gdb/testsuite/gdb.base/jit-reader-host.h gdb-10.2/gdb/testsuite/gdb.base/jit-reader-host.h --- gdb-9.1/gdb/testsuite/gdb.base/jit-reader-host.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/jit-reader-host.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,38 @@ +/* Copyright (C) 2009-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef JITHOST_H +#define JITHOST_H + +struct jithost_abi_bounds +{ + const char *begin, *end; +}; + +struct jithost_abi +{ + /* Beginning and past-the-end for the whole object. */ + struct jithost_abi_bounds object; + + /* Beginning and past-the-end for function_stack_mangle. */ + struct jithost_abi_bounds function_stack_mangle; + + /* Beginning and past-the-end for function_add. */ + struct jithost_abi_bounds function_add; +}; + +#endif /* JITHOST_H */ diff -Nru gdb-9.1/gdb/testsuite/gdb.base/jit-reader-simple.c gdb-10.2/gdb/testsuite/gdb.base/jit-reader-simple.c --- gdb-9.1/gdb/testsuite/gdb.base/jit-reader-simple.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/jit-reader-simple.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,26 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2016-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +/* Simple standalone program using the JIT API. */ + +#include "jit-reader-simple-jit.c" + +int +main (void) +{ + return 0; +} diff -Nru gdb-9.1/gdb/testsuite/gdb.base/jit-reader-simple-dl.c gdb-10.2/gdb/testsuite/gdb.base/jit-reader-simple-dl.c --- gdb-9.1/gdb/testsuite/gdb.base/jit-reader-simple-dl.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/jit-reader-simple-dl.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,25 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2016-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +/* A stub program that links with a simple library that uses the JIT + API. */ + +int +main (void) +{ + return 0; +} diff -Nru gdb-9.1/gdb/testsuite/gdb.base/jit-reader-simple.exp gdb-10.2/gdb/testsuite/gdb.base/jit-reader-simple.exp --- gdb-9.1/gdb/testsuite/gdb.base/jit-reader-simple.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/jit-reader-simple.exp 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,203 @@ +# Copyright 2012-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Test re-running an inferior with a JIT descriptor, where the JIT +# descriptor changes address between runs. +# http://sourceware.org/bugzilla/show_bug.cgi?id=13431 + +# Test both the case of the JIT reader being included in the main +# program directly, and the case of the JIT reader being split out to +# a shared library. + +# For completeness, also test when the JIT descriptor does not change +# address between runs. + +if {[skip_shlib_tests]} { + untested "skipping shared library tests" + return -1 +} + +standard_testfile + +set libname $testfile-jit +set srcfile_lib $srcdir/$subdir/$libname.c +set binfile_lib [standard_output_file $libname.so] +set binfile_lib2 [standard_output_file ${libname}2.so] + +# Build a standalone JIT binary. + +proc build_standalone_jit {{options ""}} { + global testfile srcfile binfile + + lappend options "debug" + + if {[build_executable $testfile.exp $testfile $srcfile $options] == -1} { + return -1 + } + + return 0 +} + +# Build the shared library JIT. + +proc build_shared_jit {{options ""}} { + global testfile + global srcfile_lib binfile_lib binfile_lib2 + + lappend options "debug additional_flags=-fPIC" + if { [gdb_compile_shlib $srcfile_lib $binfile_lib $options] != "" } { + return -1 + } + if { [gdb_compile_shlib $srcfile_lib $binfile_lib2 $options] != "" } { + return -1 + } + + return 0 +} + +if {[build_standalone_jit] == -1} { + untested "failed to compile standalone testcase" + return +} + +if {[build_shared_jit] == -1} { + untested "failed to compile shared library testcase" + return +} + +# Build the program that loads the JIT library. +set srcfile_dl $testfile-dl.c +set binfile_dl $binfile-dl +set options [list debug shlib=${binfile_lib}] +if {[gdb_compile ${srcdir}/${subdir}/${srcfile_dl} $binfile_dl executable \ + $options] == -1 } { + untested "failed to compile" + return -1 +} + +# Build the program that loads *two* JIT libraries. +set binfile_dl2 $binfile-dl2 +set options [list debug shlib=${binfile_lib} shlib=${binfile_lib2}] +if {[gdb_compile ${srcdir}/${subdir}/${srcfile_dl} $binfile_dl2 executable \ + $options] == -1 } { + untested "failed to compile two-jitter binary" + return -1 +} + +# STANDALONE is true when the JIT reader is included directly in the +# main program. False when the JIT reader is in a separate shared +# library. If CHANGE_ADDR is true, force changing the JIT descriptor +# changes address between runs. +proc jit_test_reread {standalone change_addr} { + global testfile binfile subdir srcfile srcdir binfile_lib binfile_dl + global hex + + with_test_prefix "initial run" { + if {$standalone} { + clean_restart $binfile + } else { + clean_restart $binfile_dl + } + + runto_main + + set addr_before [get_hexadecimal_valueof "&__jit_debug_descriptor" 0 \ + "get address of __jit_debug_descriptor"] + + gdb_test "maint info breakpoints" \ + "jit events keep y $hex <__jit_debug_register_code>.*" \ + "maint info breakpoints shows jit breakpoint" + } + + with_test_prefix "second run" { + # Ensure that the new executable is at least one second newer + # than the old. If the recompilation happens in the same + # second, gdb might not reload the executable automatically. + sleep 1 + + if ${change_addr} { + set options "additional_flags=-DSPACER" + if {$standalone} { + gdb_rename_execfile $binfile ${binfile}x + set res [build_standalone_jit $options] + } else { + gdb_rename_execfile $binfile_lib ${binfile_lib}x + set res [build_shared_jit $options] + } + if { $res == -1 } { + fail "recompile" + return + } else { + pass "recompile" + } + } + + runto_main + + set addr_after [get_hexadecimal_valueof "&__jit_debug_descriptor" 0 \ + "get address of __jit_debug_descriptor"] + + # This used to crash in the JIT-in-shared-library case: + # https://sourceware.org/bugzilla/show_bug.cgi?id=11094 + gdb_test "maint info breakpoints" \ + "jit events keep y $hex <__jit_debug_register_code>.*" \ + "maint info breakpoints shows jit breakpoint" + } + + if ${change_addr} { + gdb_assert {$addr_before != $addr_after} "address changed" + } else { + gdb_assert {$addr_before == $addr_after} "address didn't change" + } +} + +foreach standalone {1 0} { + with_test_prefix [expr ($standalone)?"standalone":"shared"] { + with_test_prefix "change addr" { + jit_test_reread $standalone 1 + } + with_test_prefix "same addr" { + jit_test_reread $standalone 0 + } + } +} + +# Now start the program that loads two JITer libraries and expect to +# see JIT breakpoints defined for both. + +with_test_prefix "two JITers" { + clean_restart $binfile_dl2 + + if {![runto_main]} { + untested "could not run to main" + return -1 + } + + set num_bps 0 + set ws "\[ \t\]+" + gdb_test_multiple "maint info breakpoints" "have two jit breakpoints" { + -re "jit events${ws}keep y${ws}$hex <__jit_debug_register_code> inf 1\r\n" { + incr num_bps + exp_continue + } + -re "$gdb_prompt $" { + if {$num_bps == 2} { + pass $gdb_test_name + } else { + fail $gdb_test_name + } + } + } +} diff -Nru gdb-9.1/gdb/testsuite/gdb.base/jit-reader-simple-jit.c gdb-10.2/gdb/testsuite/gdb.base/jit-reader-simple-jit.c --- gdb-9.1/gdb/testsuite/gdb.base/jit-reader-simple-jit.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/jit-reader-simple-jit.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,27 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2012-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +/* Simple library using the JIT API. */ + +#include <stdint.h> + +#ifdef SPACER +/* This exists to change the address of __jit_debug_descriptor. */ +int spacer = 4; +#endif + +#include "jit-protocol.h" \ No newline at end of file diff -Nru gdb-9.1/gdb/testsuite/gdb.base/jit-simple.c gdb-10.2/gdb/testsuite/gdb.base/jit-simple.c --- gdb-9.1/gdb/testsuite/gdb.base/jit-simple.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/jit-simple.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,26 +0,0 @@ -/* This testcase is part of GDB, the GNU debugger. - - Copyright 2016-2020 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -/* Simple standalone program using the JIT API. */ - -#include "jit-simple-jit.c" - -int -main (void) -{ - return 0; -} diff -Nru gdb-9.1/gdb/testsuite/gdb.base/jit-simple-dl.c gdb-10.2/gdb/testsuite/gdb.base/jit-simple-dl.c --- gdb-9.1/gdb/testsuite/gdb.base/jit-simple-dl.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/jit-simple-dl.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,25 +0,0 @@ -/* This testcase is part of GDB, the GNU debugger. - - Copyright 2016-2020 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -/* A stub program that links with a simple library that uses the JIT - API. */ - -int -main (void) -{ - return 0; -} diff -Nru gdb-9.1/gdb/testsuite/gdb.base/jit-simple.exp gdb-10.2/gdb/testsuite/gdb.base/jit-simple.exp --- gdb-9.1/gdb/testsuite/gdb.base/jit-simple.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/jit-simple.exp 1970-01-01 00:00:00.000000000 +0000 @@ -1,162 +0,0 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. - -# Test re-running an inferior with a JIT descriptor, where the JIT -# descriptor changes address between runs. -# http://sourceware.org/bugzilla/show_bug.cgi?id=13431 - -# Test both the case of the JIT reader being included in the main -# program directly, and the case of the JIT reader being split out to -# a shared library. - -# For completeness, also test when the JIT descriptor does not change -# address between runs. - -if {[skip_shlib_tests]} { - untested "skipping shared library tests" - return -1 -} - -standard_testfile - -set libname $testfile-jit -set srcfile_lib $srcdir/$subdir/$libname.c -set binfile_lib [standard_output_file $libname.so] - -# Build a standalone JIT binary. - -proc build_standalone_jit {{options ""}} { - global testfile srcfile binfile - - lappend options "debug" - - if {[build_executable $testfile.exp $testfile $srcfile $options] == -1} { - return -1 - } - - return 0 -} - -# Build the shared library JIT. - -proc build_shared_jit {{options ""}} { - global testfile - global srcfile_lib binfile_lib - - lappend options "debug additional_flags=-fPIC" - if { [gdb_compile_shlib $srcfile_lib $binfile_lib $options] != "" } { - return -1 - } - - return 0 -} - -if {[build_standalone_jit] == -1} { - untested "failed to compile standalone testcase" - return -} - -if {[build_shared_jit] == -1} { - untested "failed to compile shared library testcase" - return -} - -# Built the program that loads the JIT library. -set srcfile_dl $testfile-dl.c -set binfile_dl $binfile-dl -set options [list debug shlib=${binfile_lib}] -if {[gdb_compile ${srcdir}/${subdir}/${srcfile_dl} $binfile_dl executable \ - [list debug shlib=$binfile_lib]] == -1 } { - untested "failed to compile" - return -1 -} - -# STANDALONE is true when the JIT reader is included directly in the -# main program. False when the JIT reader is in a separate shared -# library. If CHANGE_ADDR is true, force changing the JIT descriptor -# changes address between runs. -proc jit_test_reread {standalone change_addr} { - global testfile binfile subdir srcfile srcdir binfile_lib binfile_dl - global hex - - with_test_prefix "initial run" { - if {$standalone} { - clean_restart $binfile - } else { - clean_restart $binfile_dl - } - - runto_main - - set addr_before [get_hexadecimal_valueof "&__jit_debug_descriptor" 0 \ - "get address of __jit_debug_descriptor"] - - gdb_test "maint info breakpoints" \ - "jit events keep y $hex <__jit_debug_register_code>.*" \ - "maint info breakpoints shows jit breakpoint" - } - - with_test_prefix "second run" { - # Ensure that the new executable is at least one second newer - # than the old. If the recompilation happens in the same - # second, gdb might not reload the executable automatically. - sleep 1 - - if ${change_addr} { - set options "additional_flags=-DSPACER" - if {$standalone} { - gdb_rename_execfile $binfile ${binfile}x - set res [build_standalone_jit $options] - } else { - gdb_rename_execfile $binfile_lib ${binfile_lib}x - set res [build_shared_jit $options] - } - if { $res == -1 } { - fail "recompile" - return - } else { - pass "recompile" - } - } - - runto_main - - set addr_after [get_hexadecimal_valueof "&__jit_debug_descriptor" 0 \ - "get address of __jit_debug_descriptor"] - - # This used to crash in the JIT-in-shared-library case: - # https://sourceware.org/bugzilla/show_bug.cgi?id=11094 - gdb_test "maint info breakpoints" \ - "jit events keep y $hex <__jit_debug_register_code>.*" \ - "maint info breakpoints shows jit breakpoint" - } - - if ${change_addr} { - gdb_assert {$addr_before != $addr_after} "address changed" - } else { - gdb_assert {$addr_before == $addr_after} "address didn't change" - } -} - -foreach standalone {1 0} { - with_test_prefix [expr ($standalone)?"standalone":"shared"] { - with_test_prefix "change addr" { - jit_test_reread $standalone 1 - } - with_test_prefix "same addr" { - jit_test_reread $standalone 0 - } - } -} diff -Nru gdb-9.1/gdb/testsuite/gdb.base/jit-simple-jit.c gdb-10.2/gdb/testsuite/gdb.base/jit-simple-jit.c --- gdb-9.1/gdb/testsuite/gdb.base/jit-simple-jit.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/jit-simple-jit.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,50 +0,0 @@ -/* This testcase is part of GDB, the GNU debugger. - - Copyright 2012-2020 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -/* Simple library using the JIT API. */ - -#include <stdint.h> - -struct jit_code_entry -{ - struct jit_code_entry *next_entry; - struct jit_code_entry *prev_entry; - const char *symfile_addr; - uint64_t symfile_size; -}; - -struct jit_descriptor -{ - uint32_t version; - /* This type should be jit_actions_t, but we use uint32_t - to be explicit about the bitwidth. */ - uint32_t action_flag; - struct jit_code_entry *relevant_entry; - struct jit_code_entry *first_entry; -}; - -#ifdef SPACER -/* This exists to change the address of __jit_debug_descriptor. */ -int spacer = 4; -#endif - -struct jit_descriptor __jit_debug_descriptor = { 1, 0, 0, 0 }; - -void -__jit_debug_register_code (void) -{ -} diff -Nru gdb-9.1/gdb/testsuite/gdb.base/jit-so.exp gdb-10.2/gdb/testsuite/gdb.base/jit-so.exp --- gdb-9.1/gdb/testsuite/gdb.base/jit-so.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/jit-so.exp 1970-01-01 00:00:00.000000000 +0000 @@ -1,125 +0,0 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. - -# The same tests as in jit.exp, but loading JITer itself from a shared -# library. - -if {[skip_shlib_tests]} { - untested "skipping shared library tests" - return -1 -} - -if {[get_compiler_info]} { - untested "could not get compiler info" - return 1 -} - -# -# test running programs -# - -set testfile jit-dlmain -set srcfile ${testfile}.c -set binfile [standard_output_file ${testfile}] -if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug shlib_load}] != "" } { - untested "failed to compile" - return -1 -} - -set testfile2 jit-main -set srcfile2 ${testfile2}.c -set binfile2 [standard_output_file ${testfile2}.so] -set binfile2_dlopen [shlib_target_file ${testfile2}.so] -if { [gdb_compile_shlib "${srcdir}/${subdir}/${srcfile2}" ${binfile2} {debug additional_flags="-DMAIN=jit_dl_main"}] != "" } { - untested "failed to compile main shared library" - return -1 -} - -set solib_testfile "jit-solib" -set solib_srcfile "${srcdir}/${subdir}/${solib_testfile}.c" -set solib_binfile [standard_output_file ${solib_testfile}.so] -set solib_binfile_test_msg "SHLIBDIR/${solib_testfile}.so" - -# Note: compiling without debug info: the library goes through symbol -# renaming by munging on its symbol table, and that wouldn't work for .debug -# sections. Also, output for "info function" changes when debug info is resent. -if { [gdb_compile_shlib ${solib_srcfile} ${solib_binfile} {}] != "" } { - untested "failed to compile jit shared library" - return -1 -} - -set solib_binfile_target [gdb_remote_download target ${solib_binfile}] - -proc one_jit_test {count match_str} { - with_test_prefix "one_jit_test-$count" { - global verbose testfile srcfile2 binfile2 binfile2_dlopen solib_binfile_target solib_binfile_test_msg - - clean_restart $testfile - gdb_load_shlib $binfile2 - - # This is just to help debugging when things fail - if {$verbose > 0} { - gdb_test "set debug jit 1" - } - - if { ![runto_main] } { - fail "can't run to main" - return - } - - gdb_breakpoint [gdb_get_line_number "break here before-dlopen" ] - gdb_continue_to_breakpoint "break here before-dlopen" - # Poke desired values directly into inferior instead of using "set args" - # because "set args" does not work under gdbserver. - gdb_test_no_output "set var jit_libname = \"$binfile2_dlopen\"" - - gdb_breakpoint [gdb_get_line_number "break here after-dlopen" ] - gdb_continue_to_breakpoint "break here after-dlopen" - - gdb_breakpoint "$srcfile2:[gdb_get_line_number {break here 0} $srcfile2]" - gdb_continue_to_breakpoint "break here 0" - - gdb_test_no_output "set var argc = 2" - gdb_test_no_output "set var libname = \"$solib_binfile_target\"" "set var libname = \"$solib_binfile_test_msg\"" - gdb_test_no_output "set var count = $count" - - gdb_breakpoint "$srcfile2:[gdb_get_line_number {break here 1} $srcfile2]" - gdb_continue_to_breakpoint "break here 1" - - gdb_test "info function jit_function" "$match_str" - - # This is just to help debugging when things fail - if {$verbose > 0} { - gdb_test "maintenance print objfiles" - gdb_test "maintenance info break" - } - - gdb_breakpoint "$srcfile2:[gdb_get_line_number {break here 2} $srcfile2]" - gdb_continue_to_breakpoint "break here 2" - # All jit librares must have been unregistered - gdb_test "info function jit_function" \ - "All functions matching regular expression \"jit_function\":" - } -} - -one_jit_test 1 "${hex} jit_function_0000" -one_jit_test 2 "${hex} jit_function_0000\[\r\n\]+${hex} jit_function_0001" - -# We don't intend to load the .so as a JIT debuginfo reader, but we -# need some handy file name for a completion test. -gdb_test \ - "complete jit-reader-load [standard_output_file ${solib_testfile}.s]" \ - "jit-reader-load $solib_binfile" \ - "test jit-reader-load filename completion" diff -Nru gdb-9.1/gdb/testsuite/gdb.base/jit-solib.c gdb-10.2/gdb/testsuite/gdb.base/jit-solib.c --- gdb-9.1/gdb/testsuite/gdb.base/jit-solib.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/jit-solib.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,21 +0,0 @@ -/* This test program is part of GDB, the GNU debugger. - - Copyright 2011-2020 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -/* This simulates a JIT library. The function is "renamed" after being - loaded into memory. */ - -int jit_function_XXXX() { return 42; } diff -Nru gdb-9.1/gdb/testsuite/gdb.base/jump.exp gdb-10.2/gdb/testsuite/gdb.base/jump.exp --- gdb-9.1/gdb/testsuite/gdb.base/jump.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/jump.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1998-2020 Free Software Foundation, Inc. +# Copyright 1998-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/kill-after-signal.c gdb-10.2/gdb/testsuite/gdb.base/kill-after-signal.c --- gdb-9.1/gdb/testsuite/gdb.base/kill-after-signal.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/kill-after-signal.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/kill-after-signal.exp gdb-10.2/gdb/testsuite/gdb.base/kill-after-signal.exp --- gdb-9.1/gdb/testsuite/gdb.base/kill-after-signal.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/kill-after-signal.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2011-2020 Free Software Foundation, Inc. +# Copyright (C) 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/kill-detach-inferiors-cmd.c gdb-10.2/gdb/testsuite/gdb.base/kill-detach-inferiors-cmd.c --- gdb-9.1/gdb/testsuite/gdb.base/kill-detach-inferiors-cmd.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/kill-detach-inferiors-cmd.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/kill-detach-inferiors-cmd.exp gdb-10.2/gdb/testsuite/gdb.base/kill-detach-inferiors-cmd.exp --- gdb-9.1/gdb/testsuite/gdb.base/kill-detach-inferiors-cmd.exp 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/kill-detach-inferiors-cmd.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. # -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -32,7 +32,7 @@ runto_main # Add another forked inferior process. -gdb_test "add-inferior" "Added inferior 2" "add inferior 2" +gdb_test "add-inferior" "Added inferior 2 on connection .*" "add inferior 2" gdb_test "inferior 2" "Switching to inferior 2.*" gdb_test "file $binfile" "Reading symbols from .*" "load binary" gdb_test "start" "Temporary breakpoint.*Starting program.*" @@ -40,7 +40,7 @@ # Add an attached inferior process. set test_spawn_id [spawn_wait_for_attach $binfile] set test_pid [spawn_id_get_pid $test_spawn_id] -gdb_test "add-inferior" "Added inferior 3" "add inferior 3" +gdb_test "add-inferior" "Added inferior 3 on connection .*" "add inferior 3" gdb_test "inferior 3" "Switching to inferior 3.*" gdb_test "attach $test_pid" "Attaching to process.*" "attach to pid" diff -Nru gdb-9.1/gdb/testsuite/gdb.base/killed-outside.c gdb-10.2/gdb/testsuite/gdb.base/killed-outside.c --- gdb-9.1/gdb/testsuite/gdb.base/killed-outside.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/killed-outside.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/killed-outside.exp gdb-10.2/gdb/testsuite/gdb.base/killed-outside.exp --- gdb-9.1/gdb/testsuite/gdb.base/killed-outside.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/killed-outside.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/label.exp gdb-10.2/gdb/testsuite/gdb.base/label.exp --- gdb-9.1/gdb/testsuite/gdb.base/label.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/label.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/label-without-address.c gdb-10.2/gdb/testsuite/gdb.base/label-without-address.c --- gdb-9.1/gdb/testsuite/gdb.base/label-without-address.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/label-without-address.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,24 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +int +main (void) +{ + return 0; + L1: + (void)0; +} diff -Nru gdb-9.1/gdb/testsuite/gdb.base/label-without-address.exp gdb-10.2/gdb/testsuite/gdb.base/label-without-address.exp --- gdb-9.1/gdb/testsuite/gdb.base/label-without-address.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/label-without-address.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,42 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +standard_testfile + +if {[prepare_for_testing "failed to prepare" $testfile $srcfile debug]} { + return -1 +} + +if ![runto_main] then { + fail "can't run to main" + return 0 +} + +set supported 0 +gdb_test_multiple "l main:L1" "" { + -wrap -re "No label \"L1\" defined in function \"main\"\." { + unsupported $gdb_test_name + } + -wrap -re "L1:\r\n.*" { + pass $gdb_test_name + set supported 1 + } +} + +if { ! $supported } { + return -1 +} + +gdb_test "break main:L1" "Location main:L1 not available" diff -Nru gdb-9.1/gdb/testsuite/gdb.base/langs1.f gdb-10.2/gdb/testsuite/gdb.base/langs1.f --- gdb-9.1/gdb/testsuite/gdb.base/langs1.f 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/langs1.f 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -c Copyright (C) 1999-2020 Free Software Foundation, Inc. +c Copyright (C) 1999-2021 Free Software Foundation, Inc. c This program is free software; you can redistribute it and/or modify c it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/langs.exp gdb-10.2/gdb/testsuite/gdb.base/langs.exp --- gdb-9.1/gdb/testsuite/gdb.base/langs.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/langs.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/large-frame-1.c gdb-10.2/gdb/testsuite/gdb.base/large-frame-1.c --- gdb-9.1/gdb/testsuite/gdb.base/large-frame-1.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/large-frame-1.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This file is part of GDB, the GNU debugger. - Copyright 2018-2020 Free Software Foundation, Inc. + Copyright 2018-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/large-frame-2.c gdb-10.2/gdb/testsuite/gdb.base/large-frame-2.c --- gdb-9.1/gdb/testsuite/gdb.base/large-frame-2.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/large-frame-2.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This file is part of GDB, the GNU debugger. - Copyright 2018-2020 Free Software Foundation, Inc. + Copyright 2018-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -22,4 +22,5 @@ { int a[4096]; blah (a); + return 0; } diff -Nru gdb-9.1/gdb/testsuite/gdb.base/large-frame.exp gdb-10.2/gdb/testsuite/gdb.base/large-frame.exp --- gdb-9.1/gdb/testsuite/gdb.base/large-frame.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/large-frame.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2018-2020 Free Software Foundation, Inc. +# Copyright 2018-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/large-frame.h gdb-10.2/gdb/testsuite/gdb.base/large-frame.h --- gdb-9.1/gdb/testsuite/gdb.base/large-frame.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/large-frame.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This file is part of GDB, the GNU debugger. - Copyright 2018-2020 Free Software Foundation, Inc. + Copyright 2018-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/ldbl_e308.c gdb-10.2/gdb/testsuite/gdb.base/ldbl_e308.c --- gdb-9.1/gdb/testsuite/gdb.base/ldbl_e308.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/ldbl_e308.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2012-2020 Free Software Foundation, Inc. +/* Copyright (C) 2012-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.base/ldbl_e308.exp gdb-10.2/gdb/testsuite/gdb.base/ldbl_e308.exp --- gdb-9.1/gdb/testsuite/gdb.base/ldbl_e308.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/ldbl_e308.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2012-2020 Free Software Foundation, Inc. +# Copyright (C) 2012-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/libsegfault.exp gdb-10.2/gdb/testsuite/gdb.base/libsegfault.exp --- gdb-9.1/gdb/testsuite/gdb.base/libsegfault.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/libsegfault.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2017-2020 Free Software Foundation, Inc. +# Copyright 2017-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/line65535.c gdb-10.2/gdb/testsuite/gdb.base/line65535.c --- gdb-9.1/gdb/testsuite/gdb.base/line65535.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/line65535.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,19 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2019-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#line 65535 "line65535.c" +int main() { return 0; } diff -Nru gdb-9.1/gdb/testsuite/gdb.base/line65535.exp gdb-10.2/gdb/testsuite/gdb.base/line65535.exp --- gdb-9.1/gdb/testsuite/gdb.base/line65535.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/line65535.exp 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,28 @@ +# Copyright 2019-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# This test tries to place a breakpoint on line 65535. +# For the purpose of this test we are satisfied if the break +# command succeeds, we will not try to actually run to that line. + +standard_testfile + +if {[prepare_for_testing "failed to prepare" $testfile $srcfile debug]} { + return -1 +} + +gdb_test "break $srcfile:65535" \ + ".*Breakpoint 1 at .*: file $srcfile, line 65535\\..*" \ + "break at line 65535" diff -Nru gdb-9.1/gdb/testsuite/gdb.base/lineinc.exp gdb-10.2/gdb/testsuite/gdb.base/lineinc.exp --- gdb-9.1/gdb/testsuite/gdb.base/lineinc.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/lineinc.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ # Test macro handling of #included files. -# Copyright 2003-2020 Free Software Foundation, Inc. +# Copyright 2003-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/linespecs.exp gdb-10.2/gdb/testsuite/gdb.base/linespecs.exp --- gdb-9.1/gdb/testsuite/gdb.base/linespecs.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/linespecs.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/line-symtabs.c gdb-10.2/gdb/testsuite/gdb.base/line-symtabs.c --- gdb-9.1/gdb/testsuite/gdb.base/line-symtabs.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/line-symtabs.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/line-symtabs.exp gdb-10.2/gdb/testsuite/gdb.base/line-symtabs.exp --- gdb-9.1/gdb/testsuite/gdb.base/line-symtabs.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/line-symtabs.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ # Test handling of line symbol tables (non-primary symtabs). -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/line-symtabs.h gdb-10.2/gdb/testsuite/gdb.base/line-symtabs.h --- gdb-9.1/gdb/testsuite/gdb.base/line-symtabs.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/line-symtabs.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/list-ambiguous0.c gdb-10.2/gdb/testsuite/gdb.base/list-ambiguous0.c --- gdb-9.1/gdb/testsuite/gdb.base/list-ambiguous0.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/list-ambiguous0.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2017-2020 Free Software Foundation, Inc. + Copyright 2017-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/list-ambiguous1.c gdb-10.2/gdb/testsuite/gdb.base/list-ambiguous1.c --- gdb-9.1/gdb/testsuite/gdb.base/list-ambiguous1.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/list-ambiguous1.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2017-2020 Free Software Foundation, Inc. + Copyright 2017-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/list-ambiguous.exp gdb-10.2/gdb/testsuite/gdb.base/list-ambiguous.exp --- gdb-9.1/gdb/testsuite/gdb.base/list-ambiguous.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/list-ambiguous.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2017-2020 Free Software Foundation, Inc. +# Copyright 2017-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -18,6 +18,10 @@ standard_testfile list-ambiguous0.c list-ambiguous1.c +# Set EDITOR to true to prevent that GDB's edit command starts an actual +# editor. +setenv EDITOR true + if {[prepare_for_testing "failed to prepare" $testfile [list $srcfile $srcfile2] \ {debug}]} { return -1 diff -Nru gdb-9.1/gdb/testsuite/gdb.base/list.exp gdb-10.2/gdb/testsuite/gdb.base/list.exp --- gdb-9.1/gdb/testsuite/gdb.base/list.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/list.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1992-2020 Free Software Foundation, Inc. +# Copyright 1992-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/list-missing-source.exp gdb-10.2/gdb/testsuite/gdb.base/list-missing-source.exp --- gdb-9.1/gdb/testsuite/gdb.base/list-missing-source.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/list-missing-source.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -29,6 +29,7 @@ } } close $fd +set srcfile [remote_download host $srcfile] # Compile the source file. set options "debug" @@ -39,7 +40,7 @@ } # Now delete the source file. -file delete $srcfile +remote_file host delete $srcfile # Now start GDB, run to main and try to list the source. clean_restart ${binfile} diff -Nru gdb-9.1/gdb/testsuite/gdb.base/load-command.c gdb-10.2/gdb/testsuite/gdb.base/load-command.c --- gdb-9.1/gdb/testsuite/gdb.base/load-command.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/load-command.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This test program is part of GDB, the GNU debugger. - Copyright 2018-2020 Free Software Foundation, Inc. + Copyright 2018-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/load-command.exp gdb-10.2/gdb/testsuite/gdb.base/load-command.exp --- gdb-9.1/gdb/testsuite/gdb.base/load-command.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/load-command.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2018-2020 Free Software Foundation, Inc. +# Copyright 2018-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/logical.exp gdb-10.2/gdb/testsuite/gdb.base/logical.exp --- gdb-9.1/gdb/testsuite/gdb.base/logical.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/logical.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 1998-2020 Free Software Foundation, Inc. +# Copyright 1998-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/longest-types.c gdb-10.2/gdb/testsuite/gdb.base/longest-types.c --- gdb-9.1/gdb/testsuite/gdb.base/longest-types.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/longest-types.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/longest-types.exp gdb-10.2/gdb/testsuite/gdb.base/longest-types.exp --- gdb-9.1/gdb/testsuite/gdb.base/longest-types.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/longest-types.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/long-inferior-output.c gdb-10.2/gdb/testsuite/gdb.base/long-inferior-output.c --- gdb-9.1/gdb/testsuite/gdb.base/long-inferior-output.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/long-inferior-output.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2017-2020 Free Software Foundation, Inc. + Copyright 2017-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/long-inferior-output.exp gdb-10.2/gdb/testsuite/gdb.base/long-inferior-output.exp --- gdb-9.1/gdb/testsuite/gdb.base/long-inferior-output.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/long-inferior-output.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2017-2020 Free Software Foundation, Inc. +# Copyright 2017-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/longjmp.c gdb-10.2/gdb/testsuite/gdb.base/longjmp.c --- gdb-9.1/gdb/testsuite/gdb.base/longjmp.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/longjmp.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2008-2020 Free Software Foundation, Inc. + Copyright 2008-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/longjmp.exp gdb-10.2/gdb/testsuite/gdb.base/longjmp.exp --- gdb-9.1/gdb/testsuite/gdb.base/longjmp.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/longjmp.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/long_long.c gdb-10.2/gdb/testsuite/gdb.base/long_long.c --- gdb-9.1/gdb/testsuite/gdb.base/long_long.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/long_long.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This test script is part of GDB, the GNU debugger. - Copyright 1999-2020 Free Software Foundation, Inc. + Copyright 1999-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/long_long.exp gdb-10.2/gdb/testsuite/gdb.base/long_long.exp --- gdb-9.1/gdb/testsuite/gdb.base/long_long.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/long_long.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 1997-2020 Free Software Foundation, Inc. +# Copyright 1997-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/m32rovly.c gdb-10.2/gdb/testsuite/gdb.base/m32rovly.c --- gdb-9.1/gdb/testsuite/gdb.base/m32rovly.c 2019-02-23 12:20:11.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/m32rovly.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,225 +0,0 @@ - -/* - * Ovlymgr.c -- Runtime Overlay Manager for the GDB testsuite. - */ - -#include "ovlymgr.h" - -/* Local functions and data: */ - -extern unsigned long _ovly_table[][4]; -extern unsigned long _novlys __attribute__ ((section (".data"))); -enum ovly_index { VMA, SIZE, LMA, MAPPED}; - -static void ovly_copy (unsigned long dst, unsigned long src, long size); - -/* Flush the data and instruction caches at address START for SIZE bytes. - Support for each new port must be added here. */ -/* FIXME: Might be better to have a standard libgloss function that - ports provide that we can then use. Use libgloss instead of newlib - since libgloss is the one intended to handle low level system issues. - I would suggest something like _flush_cache to avoid the user's namespace - but not be completely obscure as other things may need this facility. */ - -static void -FlushCache (void) -{ -#ifdef __M32R__ - volatile char *mspr = (char *) 0xfffffff7; - *mspr = 1; -#endif -} - -/* OverlayLoad: - * Copy the overlay into its runtime region, - * and mark the overlay as "mapped". - */ - -bool -OverlayLoad (unsigned long ovlyno) -{ - unsigned long i; - - if (ovlyno < 0 || ovlyno >= _novlys) - exit (-1); /* fail, bad ovly number */ - - if (_ovly_table[ovlyno][MAPPED]) - return TRUE; /* this overlay already mapped -- nothing to do! */ - - for (i = 0; i < _novlys; i++) - if (i == ovlyno) - _ovly_table[i][MAPPED] = 1; /* this one now mapped */ - else if (_ovly_table[i][VMA] == _ovly_table[ovlyno][VMA]) - _ovly_table[i][MAPPED] = 0; /* this one now un-mapped */ - - ovly_copy (_ovly_table[ovlyno][VMA], - _ovly_table[ovlyno][LMA], - _ovly_table[ovlyno][SIZE]); - - FlushCache (); - - return TRUE; -} - -/* OverlayUnload: - * Copy the overlay back into its "load" region. - * Does NOT mark overlay as "unmapped", therefore may be called - * more than once for the same mapped overlay. - */ - -bool -OverlayUnload (unsigned long ovlyno) -{ - if (ovlyno < 0 || ovlyno >= _novlys) - exit (-1); /* fail, bad ovly number */ - - if (!_ovly_table[ovlyno][MAPPED]) - exit (-1); /* error, can't copy out a segment that's not "in" */ - - ovly_copy (_ovly_table[ovlyno][LMA], - _ovly_table[ovlyno][VMA], - _ovly_table[ovlyno][SIZE]); - - return TRUE; -} - -#ifdef __D10V__ -#define IMAP0 (*(short *)(0xff00)) -#define IMAP1 (*(short *)(0xff02)) -#define DMAP (*(short *)(0xff04)) - -static void -D10VTranslate (unsigned long logical, - short *dmap, - unsigned long **addr) -{ - unsigned long physical; - unsigned long seg; - unsigned long off; - - /* to access data, we use the following mapping - 0x00xxxxxx: Logical data address segment (DMAP translated memory) - 0x01xxxxxx: Logical instruction address segment (IMAP translated memory) - 0x10xxxxxx: Physical data memory segment (On-chip data memory) - 0x11xxxxxx: Physical instruction memory segment (On-chip insn memory) - 0x12xxxxxx: Phisical unified memory segment (Unified memory) - */ - - /* Addresses must be correctly aligned */ - if (logical & (sizeof (**addr) - 1)) - exit (-1); - - /* If the address is in one of the two logical address spaces, it is - first translated into a physical address */ - seg = (logical >> 24); - off = (logical & 0xffffffL); - switch (seg) - { - case 0x00: /* in logical data address segment */ - if (off <= 0x7fffL) - physical = (0x10L << 24) + off; - else - /* Logical address out side of on-chip segment, not - supported */ - exit (-1); - break; - case 0x01: /* in logical instruction address segment */ - { - short map; - if (off <= 0x1ffffL) - map = IMAP0; - else if (off <= 0x3ffffL) - map = IMAP1; - else - /* Logical address outside of IMAP[01] segment, not - supported */ - exit (-1); - if (map & 0x1000L) - { - /* Instruction memory */ - physical = (0x11L << 24) | off; - } - else - { - /* Unified memory */ - physical = ((map & 0x7fL) << 17) + (off & 0x1ffffL); - if (physical > 0xffffffL) - /* Address outside of unified address segment */ - exit (-1); - physical |= (0x12L << 24); - } - break; - } - case 0x10: - case 0x11: - case 0x12: - physical = logical; - break; - default: - exit (-1); /* error */ - } - - seg = (physical >> 24); - off = (physical & 0xffffffL); - switch (seg) - { - case 0x10: /* dst is a 15 bit offset into the on-chip memory */ - *dmap = 0; - *addr = (long *) (0x0000 + ((short)off & 0x7fff)); - break; - case 0x11: /* dst is an 18-bit offset into the on-chip - instruction memory */ - *dmap = 0x1000L | ((off & 0x3ffffL) >> 14); - *addr = (long *) (0x8000 + ((short)off & 0x3fff)); - break; - case 0x12: /* dst is a 24-bit offset into unified memory */ - *dmap = off >> 14; - *addr = (long *) (0x8000 + ((short)off & 0x3fff)); - break; - default: - exit (-1); /* error */ - } -} -#endif /* __D10V__ */ - -static void -ovly_copy (unsigned long dst, unsigned long src, long size) -{ -#ifdef __M32R__ - memcpy ((void *) dst, (void *) src, size); - return; -#endif /* M32R */ - -#ifdef __D10V__ - unsigned long *s, *d, tmp; - short dmap_src, dmap_dst; - short dmap_save; - - /* all section sizes should by multiples of 4 bytes */ - dmap_save = DMAP; - - D10VTranslate (src, &dmap_src, &s); - D10VTranslate (dst, &dmap_dst, &d); - - while (size > 0) - { - /* NB: Transfer 4 byte (long) quantites, problems occure - when only two bytes are transfered */ - DMAP = dmap_src; - tmp = *s; - DMAP = dmap_dst; - *d = tmp; - d++; - s++; - size -= sizeof (tmp); - src += sizeof (tmp); - dst += sizeof (tmp); - if ((src & 0x3fff) == 0) - D10VTranslate (src, &dmap_src, &s); - if ((dst & 0x3fff) == 0) - D10VTranslate (dst, &dmap_dst, &d); - } - DMAP = dmap_save; -#endif /* D10V */ -} - diff -Nru gdb-9.1/gdb/testsuite/gdb.base/macscp.exp gdb-10.2/gdb/testsuite/gdb.base/macscp.exp --- gdb-9.1/gdb/testsuite/gdb.base/macscp.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/macscp.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ # Test macro scoping. -# Copyright 2002-2020 Free Software Foundation, Inc. +# Copyright 2002-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/main-psymtab.exp gdb-10.2/gdb/testsuite/gdb.base/main-psymtab.exp --- gdb-9.1/gdb/testsuite/gdb.base/main-psymtab.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/main-psymtab.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,34 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +standard_testfile persistent-lang.cc + +if {[build_executable "failed to prepare" $testfile $srcfile debug]} { + return -1 +} + +clean_restart + +set auto_cpp \ + {The current source language is "auto; currently c\+\+"\.} + +gdb_load ${binfile} +gdb_test "show language" $auto_cpp \ + "language auto/c++ after load" + +# Verify that partial symtab expansion has not taken place for +# persistent-lang.cc + +verify_psymtab_expanded persistent-lang.cc no diff -Nru gdb-9.1/gdb/testsuite/gdb.base/maint.exp gdb-10.2/gdb/testsuite/gdb.base/maint.exp --- gdb-9.1/gdb/testsuite/gdb.base/maint.exp 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/maint.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1998-2020 Free Software Foundation, Inc. +# Copyright 1998-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -200,7 +200,7 @@ send_gdb "maint print statistics\n" gdb_expect { - -re "Statistics for\[^\n\r\]*maint\[^\n\r\]*:\r\n Number of \"minimal\" symbols read: $decimal\r\n( Number of \"partial\" symbols read: $decimal\r\n)? Number of \"full\" symbols read: $decimal\r\n Number of \"types\" defined: $decimal\r\n( Number of psym tables \\(not yet expanded\\): $decimal\r\n)?( Number of read CUs: $decimal\r\n Number of unread CUs: $decimal\r\n)? Number of symbol tables: $decimal\r\n Number of symbol tables with line tables: $decimal\r\n Number of symbol tables with blockvectors: $decimal\r\n Total memory used for objfile obstack: $decimal\r\n Total memory used for BFD obstack: $decimal\r\n Total memory used for psymbol cache: $decimal\r\n Total memory used for macro cache: $decimal\r\n Total memory used for file name cache: $decimal\r\n" { + -re "Statistics for\[^\n\r\]*maint\[^\n\r\]*:\r\n Number of \"minimal\" symbols read: $decimal\r\n( Number of \"partial\" symbols read: $decimal\r\n)? Number of \"full\" symbols read: $decimal\r\n Number of \"types\" defined: $decimal\r\n( Number of psym tables \\(not yet expanded\\): $decimal\r\n)?( Number of read CUs: $decimal\r\n Number of unread CUs: $decimal\r\n)? Number of symbol tables: $decimal\r\n Number of symbol tables with line tables: $decimal\r\n Number of symbol tables with blockvectors: $decimal\r\n Total memory used for objfile obstack: $decimal\r\n Total memory used for BFD obstack: $decimal\r\n Total memory used for psymbol cache: $decimal\r\n Total memory used for string cache: $decimal\r\n" { gdb_expect { -re "$gdb_prompt $" { pass "maint print statistics" @@ -215,7 +215,7 @@ # There aren't any ... gdb_test_no_output "maint print dummy-frames" -send_gdb "maint print objfiles\n" + # To avoid timeouts, we avoid expects with many .* patterns that match # many lines. Instead, we keep track of which milestones we've seen @@ -224,31 +224,24 @@ set header 0 set psymtabs 0 set symtabs 0 -set keep_looking 1 - -while {$keep_looking} { - gdb_expect { - - -re "\r\n" { - set output $expect_out(buffer) - if {[regexp ".*Object file.*maint($EXEEXT)?: Objfile at ${hex}" $output]} { - set header 1 - } - if {[regexp ".*Psymtabs:\[\r\t \]+\n" $output]} { - set psymtabs 1 - } - if {[regexp ".*Symtabs:\[\r\t \]+\n" $output]} { - set symtabs 1 - } - } - - -re ".*$gdb_prompt $" { - set keep_looking 0 - } - timeout { - fail "(timeout) maint print objfiles" - set keep_looking 0 - } +gdb_test_multiple "maint print objfiles" "" -lbl { + -re "\r\nObject file.*maint($EXEEXT)?: Objfile at ${hex}" { + set header 1 + exp_continue + } + -re "\r\nPsymtabs:\[\r\t \]+" { + set psymtabs 1 + exp_continue + } + -re "\r\nSymtabs:\[\r\t \]+\n" { + set symtabs 1 + exp_continue + } + -re " at $hex," { + exp_continue + } + -re -wrap "" { + pass $gdb_test_name } } @@ -494,22 +487,22 @@ } gdb_test "maint print" \ - "\"maintenance print\" must be followed by the name of a print command\\.\r\nList.*unambiguous\\..*" \ + "List.*unambiguous\\..*" \ "maint print w/o args" gdb_test "maint info" \ - "\"maintenance info\" must be followed by the name of an info command\\.\r\nList.*unambiguous\\..*" \ + "List.*unambiguous\\..*" \ "maint info w/o args" gdb_test "maint" \ - "\"maintenance\" must be followed by the name of a maintenance command\\.\r\nList.*unambiguous\\..*" \ + "List.*unambiguous\\..*" \ "maint w/o args" # Test that "main info line-table" w/o a file name shows the symtab for # $srcfile. set saw_srcfile 0 -set test "maint info line-table w/o a file name" -gdb_test_multiple "maint info line-table" $test { +gdb_test_multiple "maint info line-table" \ + "maint info line-table w/o a file name" { -re "symtab: \[^\n\r\]+${srcfile} \\(\\(struct symtab \\*\\) $hex\\)\r\nlinetable: \\(\\(struct linetable \\*\\) $hex\\):\r\nINDEX\[ \t\]+LINE\[ \t\]+ADDRESS" { set saw_srcfile 1 exp_continue @@ -518,7 +511,11 @@ # Match each symtab to avoid overflowing expect's buffer. exp_continue } - -re "$decimal\[ \t\]+$decimal\[ \t\]+$hex\r\n" { + -re "symtab: \[^\n\r\]+ \\(\\(struct symtab \\*\\) $hex\\)\r\nlinetable: \\(\\(struct linetable \\*\\) 0x0\\):\r\nNo line table.\r\n" { + # For symtabs with no linetable. + exp_continue + } + -re "^$decimal\[ \t\]+$decimal\[ \t\]+$hex\r\n" { # Line table entries can be long too: # # INDEX LINE ADDRESS @@ -531,13 +528,17 @@ # 6 45 0x0000000000400740 # (...) # 454 129 0x00007ffff7df1d28 - # 455 0 0x00007ffff7df1d3f + # 455 END 0x00007ffff7df1d3f # # Match each line to avoid overflowing expect's buffer. exp_continue } - -re "$gdb_prompt $" { - gdb_assert $saw_srcfile $test + -re "^$decimal\[ \t\]+END\[ \t\]+$hex\r\n" { + # Matches an end marker in the above. + exp_continue + } + -re "^$gdb_prompt $" { + gdb_assert $saw_srcfile $gdb_test_name } } diff -Nru gdb-9.1/gdb/testsuite/gdb.base/maint-expand-symbols-header-file.c gdb-10.2/gdb/testsuite/gdb.base/maint-expand-symbols-header-file.c --- gdb-9.1/gdb/testsuite/gdb.base/maint-expand-symbols-header-file.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/maint-expand-symbols-header-file.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,26 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include <stdio.h> +#include "maint-expand-symbols-header-file.h" + +int +main (void) +{ + printf ("hello: %s\n", foo ()); + return 0; +} diff -Nru gdb-9.1/gdb/testsuite/gdb.base/maint-expand-symbols-header-file.exp gdb-10.2/gdb/testsuite/gdb.base/maint-expand-symbols-header-file.exp --- gdb-9.1/gdb/testsuite/gdb.base/maint-expand-symbols-header-file.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/maint-expand-symbols-header-file.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,52 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +# Test-case to verify that symbol-less symtabs are expanded by +# "maint expand-symtabs". + +standard_testfile .c + +if {[build_executable "failed to prepare" $testfile \ + $srcfile {debug nowarnings}]} { + return -1 +} +clean_restart + +# Make sure that no symtabs are expanded, by setting language before +# loading exec. +gdb_test_no_output "set language c" +gdb_load ${binfile} + +set test "verify no symtabs are expanded" +if { [readnow] } { + unsupported $test + return -1 +} +gdb_test_no_output "maint info symtabs" $test + +# Expand the header file symtab. +gdb_test_no_output "maint expand-symtabs maint-expand-symbols-header-file.h" + +# Check that the include symtab was in fact expanded. +set file_re "\[^\r\n\]*/maint-expand-symbols-header-file.h" +gdb_test "maint info symtabs" \ + "\r\n\t{ symtab $file_re \\(\\(struct symtab \\*\\) $hex\\)\r\n.*" \ + "check header file psymtab expansion" + +# Check that the symtab the include symtab was referring to was expanded. +set file_re "\[^\r\n\]*/maint-expand-symbols-header-file.c" +gdb_test "maint info symtabs" \ + "\r\n\t{ symtab $file_re \\(\\(struct symtab \\*\\) $hex\\)\r\n.*" \ + "check source file psymtab expansion" diff -Nru gdb-9.1/gdb/testsuite/gdb.base/maint-expand-symbols-header-file.h gdb-10.2/gdb/testsuite/gdb.base/maint-expand-symbols-header-file.h --- gdb-9.1/gdb/testsuite/gdb.base/maint-expand-symbols-header-file.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/maint-expand-symbols-header-file.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,22 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +inline static const char* +foo (void) +{ + return "foo"; +} diff -Nru gdb-9.1/gdb/testsuite/gdb.base/maint-target-async-off.c gdb-10.2/gdb/testsuite/gdb.base/maint-target-async-off.c --- gdb-9.1/gdb/testsuite/gdb.base/maint-target-async-off.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/maint-target-async-off.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,22 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +int +main (void) +{ + return 0; +} diff -Nru gdb-9.1/gdb/testsuite/gdb.base/maint-target-async-off.exp gdb-10.2/gdb/testsuite/gdb.base/maint-target-async-off.exp --- gdb-9.1/gdb/testsuite/gdb.base/maint-target-async-off.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/maint-target-async-off.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,41 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Verify that debugging with "maintenance target-async off" works somewhat. At +# least running to main and to the end of the program. + +standard_testfile + +save_vars { GDBFLAGS } { + # Enable target-async off this way, because with board + # native-extended-gdbserver, the remote target is already open when + # returning from prepare_for_testing, and that would be too late to toggle + # it. + append GDBFLAGS { -ex "maintenance set target-async off" } + + if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile}] } { + return + } +} + +# Make sure our command-line flag worked. +gdb_test "maintenance show target-async" "Controlling the inferior in asynchronous mode is off\\." + +if { ![runto_main] } { + fail "can't run to main" + return +} + +gdb_continue_to_end diff -Nru gdb-9.1/gdb/testsuite/gdb.base/many-completions.exp gdb-10.2/gdb/testsuite/gdb.base/many-completions.exp --- gdb-9.1/gdb/testsuite/gdb.base/many-completions.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/many-completions.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,92 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Test the case where we have so many completions that we require the +# completions hash table within GDB to grow. Make sure that afte the +# hash table has grown we try to add duplicate entries into the +# hash. This checks that GDB doesn't corrupt the hash table when +# resizing it. +# +# In this case we create a test with more functions than the default +# number of entires in the completion hash table (which is 200), then +# complete on all function names. +# +# GDB will add all the function names from the DWARF, and then from +# the ELF symbol table, this ensures that we should have duplicates +# added after resizing the table. + +# Create a test source file and return the name of the file. COUNT is +# the number of dummy functions to create, this should be more than +# the default number of entries in the completion hash table within +# GDB (see gdb/completer.c). +proc prepare_test_source_file { count } { + global gdb_test_file_name + + set filename [standard_output_file "$gdb_test_file_name.c"] + set outfile [open $filename w] + + puts $outfile " +#define MAKE_FUNC(NUM) \\ + void \\ + func_ ## NUM (void) \\ + { /* Nothing. */ } + +#define CALL_FUNC(NUM) \\ + func_ ## NUM () +" + + for { set i 0 } { $i < $count } { incr i } { + puts $outfile "MAKE_FUNC ([format {%03d} $i])" + } + + puts $outfile "\nint\nmain ()\n{" + for { set i 0 } { $i < $count } { incr i } { + puts $outfile " CALL_FUNC ([format {%03d} $i]);" + } + + puts $outfile " return 0;\n}" + close $outfile + + return $filename +} + +# Build a source file and compile it. +set filename [prepare_test_source_file 250] +standard_testfile $filename +if {[prepare_for_testing "failed to prepare" "$testfile" $srcfile \ + { debug }]} { + return -1 +} + +# Start the test. +if {![runto_main]} { + fail "couldn't run to main" + return +} + +# We don't want to stop gathering completions too early. +gdb_test_no_output "set max-completions unlimited" + +# Collect all possible completions, and check for duplictes. +set completions [capture_command_output "complete break func_" ""] +set duplicates 0 +foreach {-> name} [regexp -all -inline -line {^break (\w+\S*)} $completions] { + incr all_funcs($name) + if { $all_funcs($name) > 1 } { + incr duplicates + verbose -log "Duplicate entry for '$name' found" + } +} +gdb_assert { $duplicates == 0 } "duplicate check" diff -Nru gdb-9.1/gdb/testsuite/gdb.base/many-headers.c gdb-10.2/gdb/testsuite/gdb.base/many-headers.c --- gdb-9.1/gdb/testsuite/gdb.base/many-headers.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/many-headers.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2018-2020 Free Software Foundation, Inc. + Copyright 2018-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/many-headers.exp gdb-10.2/gdb/testsuite/gdb.base/many-headers.exp --- gdb-9.1/gdb/testsuite/gdb.base/many-headers.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/many-headers.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2018-2020 Free Software Foundation, Inc. +# Copyright 2018-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -51,17 +51,26 @@ return -1 } +set cmd \ + [concat \ + "(" \ + "ulimit -s $stack_limit;" \ + "$GDB $INTERNAL_GDBFLAGS $GDBFLAGS -batch -core=$corefile" \ + ")"] +verbose -log $cmd + # Run gdb with stack limit +set output [standard_output_file OUTPUT] catch { - system [concat \ - "(" \ - "ulimit -s $stack_limit;" \ - "$GDB $INTERNAL_GDBFLAGS $GDBFLAGS -batch -core=$corefile" \ - ")"] + system "$cmd > $output 2>&1" } msg +verbose -log [exec cat $output] +file delete $output + set test "read core file" if { "$msg" == "" } { pass "$test" } else { + verbose -log $msg fail "$test" } diff -Nru gdb-9.1/gdb/testsuite/gdb.base/max-depth.c gdb-10.2/gdb/testsuite/gdb.base/max-depth.c --- gdb-9.1/gdb/testsuite/gdb.base/max-depth.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/max-depth.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2019-2020 Free Software Foundation, Inc. + Copyright 2019-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/max-depth-c.exp gdb-10.2/gdb/testsuite/gdb.base/max-depth-c.exp --- gdb-9.1/gdb/testsuite/gdb.base/max-depth-c.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/max-depth-c.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,18 @@ +# Copyright 2019-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +set lang {c} + +source $srcdir/$subdir/max-depth.exp.tcl diff -Nru gdb-9.1/gdb/testsuite/gdb.base/max-depth-c++.exp gdb-10.2/gdb/testsuite/gdb.base/max-depth-c++.exp --- gdb-9.1/gdb/testsuite/gdb.base/max-depth-c++.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/max-depth-c++.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,22 @@ +# Copyright 2019-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Only test C++ if we are able. +if { [skip_cplus_tests] || [get_compiler_info "c++"] } { + return -1 +} +set lang c++ + +source $srcdir/$subdir/max-depth.exp.tcl diff -Nru gdb-9.1/gdb/testsuite/gdb.base/max-depth.exp gdb-10.2/gdb/testsuite/gdb.base/max-depth.exp --- gdb-9.1/gdb/testsuite/gdb.base/max-depth.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/max-depth.exp 1970-01-01 00:00:00.000000000 +0000 @@ -1,168 +0,0 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. - -# Tests GDB's handling of 'set print max-depth'. - -# Only test C++ if we are able. Always use C. -if { [skip_cplus_tests] || [get_compiler_info "c++"] } { - set lang {c} -} else { - set lang {c c++} -} - -foreach l $lang { - set dir "$l" - remote_exec host "rm -rf [standard_output_file ${dir}]" - remote_exec host "mkdir -p [standard_output_file ${dir}]" -} - -proc compile_and_run_tests { lang } { - global testfile - global srcfile - global binfile - global hex - - standard_testfile .c - - # Create the additional flags. - set flags "debug" - lappend flags $lang - if { "$lang" == "c++" } { - lappend flags "additional_flags=-std=c++11" - } - - set dir "$lang" - set binfile [standard_output_file ${dir}/${testfile}] - if { [prepare_for_testing "failed to prepare" "${binfile}" "${srcfile}" "${flags}"] } { - return 0 - } - - # Advance to main. - if { ![runto_main] } then { - fail "can't run to main" - return 0 - } - - # The max-depth setting has no effect as the anonymous scopes are - # ignored and the members are aggregated into the parent scope. - gdb_print_expr_at_depths "s1" {"{...}" \ - "{x = 0, y = 0}"\ - "{x = 0, y = 0}"} - - gdb_print_expr_at_depths "s2" {"{...}" \ - "{x = 0, y = 0, {z = 0, a = 0}}" \ - "{x = 0, y = 0, {z = 0, a = 0}}"} - - gdb_print_expr_at_depths "s3" {"{...}" \ - "{x = 0, y = 0, {z = 0, a = 0, {b = 0, c = 0}}}" \ - "{x = 0, y = 0, {z = 0, a = 0, {b = 0, c = 0}}}" \ - "{x = 0, y = 0, {z = 0, a = 0, {b = 0, c = 0}}}"} - - # Increasing max-depth unfurls more of the object. - gdb_print_expr_at_depths "s4" {"{...}" \ - "{x = 0, y = 0, l1 = {...}}" \ - "{x = 0, y = 0, l1 = {x = 0, y = 0, l2 = {...}}}" \ - "{x = 0, y = 0, l1 = {x = 0, y = 0, l2 = {x = 0, y = 0}}}"} - - # Check handling of unions, in this case 'raw' is printed instead of - # just {...} as this is not useful. - gdb_print_expr_at_depths "s5" {"{...}" \ - "{{raw = {...}, {x = 0, y = 0, z = 0}}}" \ - "{{raw = \\{0, 0, 0\\}, {x = 0, y = 0, z = 0}}}"} - - # Check handling of typedefs. - gdb_print_expr_at_depths "s6" {"{...}" \ - "{{raw = {...}, {x = 0, y = 0, z = 0}}}" \ - "{{raw = \\{0, 0, 0\\}, {x = 0, y = 0, z = 0}}}"} - - # Multiple anonymous structures in parallel. - gdb_print_expr_at_depths "s7" {"{...}" \ - "{{x = 0, y = 0}, {z = 0, a = 0}, {b = 0, c = 0}}" \ - "{{x = 0, y = 0}, {z = 0, a = 0}, {b = 0, c = 0}}"} - - # Flip flop between named and anonymous. Expected to unfurl to the - # first non-anonymous type. - gdb_print_expr_at_depths "s8" {"{...}" \ - "{x = 0, y = 0, d1 = {...}}" \ - "{x = 0, y = 0, d1 = {z = 0, a = 0, {b = 0, c = 0}}}"} - - # Imbalanced tree, this will unfurl one size more than the other as - # one side has more anonymous levels. - gdb_print_expr_at_depths "s9" {"{...}" \ - "{x = 0, y = 0, {k = 0, j = 0, d1 = {...}}, d2 = {...}}" \ - "{x = 0, y = 0, {k = 0, j = 0, d1 = {z = 0, a = 0, {b = 0, c = 0}}}, d2 = {z = 0, a = 0, {b = 0, c = 0}}}"} - - # Arrays are treated as an extra level, while scalars are not. - gdb_print_expr_at_depths "s10" {"{...}" \ - "{x = {...}, y = 0, {k = {...}, j = 0, d1 = {...}}, d2 = {...}}" \ - "{x = \\{0, 0, 0, 0, 0, 0, 0, 0, 0, 0\\}, y = 0, {k = \\{0, 0, 0, 0, 0, 0, 0, 0, 0, 0\\}, j = 0, d1 = {z = 0, a = 0, {b = {...}, c = 0}}}, d2 = {z = 0, a = 0, {b = {...}, c = 0}}}" \ - "{x = \\{0, 0, 0, 0, 0, 0, 0, 0, 0, 0\\}, y = 0, {k = \\{0, 0, 0, 0, 0, 0, 0, 0, 0, 0\\}, j = 0, d1 = {z = 0, a = 0, {b = \\{0, 0, 0, 0, 0, 0, 0, 0, 0, 0\\}, c = 0}}}, d2 = {z = 0, a = 0, {b = \\{0, 0, 0, 0, 0, 0, 0, 0, 0, 0\\}, c = 0}}}"} - - # Strings are treated as scalars. - gdb_print_expr_at_depths "s11" {"{...}" \ - "{x = 0, s = \"\\\\000\\\\000\\\\000\\\\000\\\\000\\\\000\\\\000\\\\000\\\\000\", {z = 0, a = 0}}"} - - - if { $lang == "c++" } { - gdb_print_expr_at_depths "c1" {"{...}" \ - "{c1 = 1}" } - gdb_print_expr_at_depths "c2" { "{...}" "{c2 = 2}" } - gdb_print_expr_at_depths "c3" { "{...}" \ - "{<C2> = {...}, c3 = 3}" \ - "{<C2> = {c2 = 2}, c3 = 3}" } - gdb_print_expr_at_depths "c4" { "{...}" "{c4 = 4}" } - gdb_print_expr_at_depths "c5" { "{...}" \ - "{<C4> = {...}, c5 = 5}" \ - "{<C4> = {c4 = 4}, c5 = 5}" } - gdb_print_expr_at_depths "c6" { "{...}" \ - "{<C5> = {...}, c6 = 6}" \ - "{<C5> = {<C4> = {...}, c5 = 5}, c6 = 6}" \ - "{<C5> = {<C4> = {c4 = 4}, c5 = 5}, c6 = 6}" } - gdb_print_expr_at_depths "c7" { "{...}" \ - "{<C1> = {...}, <C3> = {...}, <C6> = {...}, c7 = 7}" \ - "{<C1> = {c1 = 1}, <C3> = {<C2> = {...}, c3 = 3}, <C6> = {<C5> = {...}, c6 = 6}, c7 = 7}" \ - "{<C1> = {c1 = 1}, <C3> = {<C2> = {c2 = 2}, c3 = 3}, <C6> = {<C5> = {<C4> = {...}, c5 = 5}, c6 = 6}, c7 = 7}" \ - "{<C1> = {c1 = 1}, <C3> = {<C2> = {c2 = 2}, c3 = 3}, <C6> = {<C5> = {<C4> = {c4 = 4}, c5 = 5}, c6 = 6}, c7 = 7}" } - - gdb_print_expr_at_depths "v1" [list "{...}" "{v1 = 1}" ] - gdb_print_expr_at_depths "v2" [list "{...}" \ - "{<V1> = {...}, _vptr.V2 = $hex <VTT for V2>, v2 = 2}" \ - "{<V1> = {v1 = 1}, _vptr.V2 = $hex <VTT for V2>, v2 = 2}" ] - gdb_print_expr_at_depths "v3" [list "{...}" \ - "{<V1> = {...}, _vptr.V3 = $hex <VTT for V3>, v3 = 3}" \ - "{<V1> = {v1 = 1}, _vptr.V3 = $hex <VTT for V3>, v3 = 3}" ] - gdb_print_expr_at_depths "v4" [list "{...}" \ - "{<V2> = {...}, _vptr.V4 = $hex <vtable for V4\[^>\]+>, v4 = 4}" \ - "{<V2> = {<V1> = {...}, _vptr.V2 = $hex <VTT for V4>, v2 = 2}, _vptr.V4 = $hex <vtable for V4\[^>\]+>, v4 = 4}" \ - "{<V2> = {<V1> = {v1 = 1}, _vptr.V2 = $hex <VTT for V4>, v2 = 2}, _vptr.V4 = $hex <vtable for V4\[^>\]+>, v4 = 4}" ] - gdb_print_expr_at_depths "v5" [list "{...}" \ - "{<V2> = {...}, _vptr.V5 = $hex <vtable for V5\[^>\]+>, v5 = 1}" \ - "{<V2> = {<V1> = {...}, _vptr.V2 = $hex <VTT for V5>, v2 = 2}, _vptr.V5 = $hex <vtable for V5\[^>\]+>, v5 = 1}" \ - "{<V2> = {<V1> = {v1 = 1}, _vptr.V2 = $hex <VTT for V5>, v2 = 2}, _vptr.V5 = $hex <vtable for V5\[^>\]+>, v5 = 1}" ] - gdb_print_expr_at_depths "v6" [list "{...}" \ - "{<V2> = {...}, <V3> = {...}, _vptr.V6 = $hex <vtable for V6\[^>\]+>, v6 = 1}" \ - "{<V2> = {<V1> = {...}, _vptr.V2 = $hex <vtable for V6\[^>\]+>, v2 = 2}, <V3> = {_vptr.V3 = $hex <VTT for V6>, v3 = 3}, _vptr.V6 = $hex <vtable for V6\[^>\]+>, v6 = 1}" \ - "{<V2> = {<V1> = {v1 = 1}, _vptr.V2 = $hex <vtable for V6\[^>\]+>, v2 = 2}, <V3> = {_vptr.V3 = $hex <VTT for V6>, v3 = 3}, _vptr.V6 = $hex <vtable for V6\[^>\]+>, v6 = 1}" ] - gdb_print_expr_at_depths "v7" [list "{...}" \ - "{<V4> = {...}, <V5> = {...}, <V6> = {...}, _vptr.V7 = $hex <vtable for V7\[^>\]+>, v7 = 1}" \ - "{<V4> = {<V2> = {...}, _vptr.V4 = $hex <vtable for V7\[^>\]+>, v4 = 4}, <V5> = {_vptr.V5 = $hex <vtable for V7\[^>\]+>, v5 = 1}, <V6> = {<V3> = {...}, _vptr.V6 = $hex <vtable for V7\[^>\]+>, v6 = 1}, _vptr.V7 = $hex <vtable for V7\[^>\]+>, v7 = 1}" \ - "{<V4> = {<V2> = {<V1> = {...}, _vptr.V2 = $hex <vtable for V7\[^>\]+>, v2 = 2}, _vptr.V4 = $hex <vtable for V7\[^>\]+>, v4 = 4}, <V5> = {_vptr.V5 = $hex <vtable for V7\[^>\]+>, v5 = 1}, <V6> = {<V3> = {_vptr.V3 = $hex <VTT for V7>, v3 = 3}, _vptr.V6 = $hex <vtable for V7\[^>\]+>, v6 = 1}, _vptr.V7 = $hex <vtable for V7\[^>\]+>, v7 = 1}" \ - "{<V4> = {<V2> = {<V1> = {v1 = 1}, _vptr.V2 = $hex <vtable for V7\[^>\]+>, v2 = 2}, _vptr.V4 = $hex <vtable for V7\[^>\]+>, v4 = 4}, <V5> = {_vptr.V5 = $hex <vtable for V7\[^>\]+>, v5 = 1}, <V6> = {<V3> = {_vptr.V3 = $hex <VTT for V7>, v3 = 3}, _vptr.V6 = $hex <vtable for V7\[^>\]+>, v6 = 1}, _vptr.V7 = $hex <vtable for V7\[^>\]+>, v7 = 1}" ] - } -} - -foreach_with_prefix l $lang { - compile_and_run_tests $l -} diff -Nru gdb-9.1/gdb/testsuite/gdb.base/max-depth.exp.tcl gdb-10.2/gdb/testsuite/gdb.base/max-depth.exp.tcl --- gdb-9.1/gdb/testsuite/gdb.base/max-depth.exp.tcl 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/max-depth.exp.tcl 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,151 @@ +# Copyright 2019-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Tests GDB's handling of 'set print max-depth'. + +proc compile_and_run_tests { lang } { + global testfile + global srcfile + global binfile + global hex + + standard_testfile max-depth.c + + # Create the additional flags. + set flags "debug" + lappend flags $lang + if { "$lang" == "c++" } { + lappend flags "additional_flags=-std=c++11" + } + + if { [prepare_for_testing "failed to prepare" "${binfile}" "${srcfile}" "${flags}"] } { + return 0 + } + + # Advance to main. + if { ![runto_main] } then { + fail "can't run to main" + return 0 + } + + # The max-depth setting has no effect as the anonymous scopes are + # ignored and the members are aggregated into the parent scope. + gdb_print_expr_at_depths "s1" {"{...}" \ + "{x = 0, y = 0}"\ + "{x = 0, y = 0}"} + + gdb_print_expr_at_depths "s2" {"{...}" \ + "{x = 0, y = 0, {z = 0, a = 0}}" \ + "{x = 0, y = 0, {z = 0, a = 0}}"} + + gdb_print_expr_at_depths "s3" {"{...}" \ + "{x = 0, y = 0, {z = 0, a = 0, {b = 0, c = 0}}}" \ + "{x = 0, y = 0, {z = 0, a = 0, {b = 0, c = 0}}}" \ + "{x = 0, y = 0, {z = 0, a = 0, {b = 0, c = 0}}}"} + + # Increasing max-depth unfurls more of the object. + gdb_print_expr_at_depths "s4" {"{...}" \ + "{x = 0, y = 0, l1 = {...}}" \ + "{x = 0, y = 0, l1 = {x = 0, y = 0, l2 = {...}}}" \ + "{x = 0, y = 0, l1 = {x = 0, y = 0, l2 = {x = 0, y = 0}}}"} + + # Check handling of unions, in this case 'raw' is printed instead of + # just {...} as this is not useful. + gdb_print_expr_at_depths "s5" {"{...}" \ + "{{raw = {...}, {x = 0, y = 0, z = 0}}}" \ + "{{raw = \\{0, 0, 0\\}, {x = 0, y = 0, z = 0}}}"} + + # Check handling of typedefs. + gdb_print_expr_at_depths "s6" {"{...}" \ + "{{raw = {...}, {x = 0, y = 0, z = 0}}}" \ + "{{raw = \\{0, 0, 0\\}, {x = 0, y = 0, z = 0}}}"} + + # Multiple anonymous structures in parallel. + gdb_print_expr_at_depths "s7" {"{...}" \ + "{{x = 0, y = 0}, {z = 0, a = 0}, {b = 0, c = 0}}" \ + "{{x = 0, y = 0}, {z = 0, a = 0}, {b = 0, c = 0}}"} + + # Flip flop between named and anonymous. Expected to unfurl to the + # first non-anonymous type. + gdb_print_expr_at_depths "s8" {"{...}" \ + "{x = 0, y = 0, d1 = {...}}" \ + "{x = 0, y = 0, d1 = {z = 0, a = 0, {b = 0, c = 0}}}"} + + # Imbalanced tree, this will unfurl one size more than the other as + # one side has more anonymous levels. + gdb_print_expr_at_depths "s9" {"{...}" \ + "{x = 0, y = 0, {k = 0, j = 0, d1 = {...}}, d2 = {...}}" \ + "{x = 0, y = 0, {k = 0, j = 0, d1 = {z = 0, a = 0, {b = 0, c = 0}}}, d2 = {z = 0, a = 0, {b = 0, c = 0}}}"} + + # Arrays are treated as an extra level, while scalars are not. + gdb_print_expr_at_depths "s10" {"{...}" \ + "{x = {...}, y = 0, {k = {...}, j = 0, d1 = {...}}, d2 = {...}}" \ + "{x = \\{0, 0, 0, 0, 0, 0, 0, 0, 0, 0\\}, y = 0, {k = \\{0, 0, 0, 0, 0, 0, 0, 0, 0, 0\\}, j = 0, d1 = {z = 0, a = 0, {b = {...}, c = 0}}}, d2 = {z = 0, a = 0, {b = {...}, c = 0}}}" \ + "{x = \\{0, 0, 0, 0, 0, 0, 0, 0, 0, 0\\}, y = 0, {k = \\{0, 0, 0, 0, 0, 0, 0, 0, 0, 0\\}, j = 0, d1 = {z = 0, a = 0, {b = \\{0, 0, 0, 0, 0, 0, 0, 0, 0, 0\\}, c = 0}}}, d2 = {z = 0, a = 0, {b = \\{0, 0, 0, 0, 0, 0, 0, 0, 0, 0\\}, c = 0}}}"} + + # Strings are treated as scalars. + gdb_print_expr_at_depths "s11" {"{...}" \ + "{x = 0, s = \"\\\\000\\\\000\\\\000\\\\000\\\\000\\\\000\\\\000\\\\000\\\\000\", {z = 0, a = 0}}"} + + + if { $lang == "c++" } { + gdb_print_expr_at_depths "c1" {"{...}" \ + "{c1 = 1}" } + gdb_print_expr_at_depths "c2" { "{...}" "{c2 = 2}" } + gdb_print_expr_at_depths "c3" { "{...}" \ + "{<C2> = {...}, c3 = 3}" \ + "{<C2> = {c2 = 2}, c3 = 3}" } + gdb_print_expr_at_depths "c4" { "{...}" "{c4 = 4}" } + gdb_print_expr_at_depths "c5" { "{...}" \ + "{<C4> = {...}, c5 = 5}" \ + "{<C4> = {c4 = 4}, c5 = 5}" } + gdb_print_expr_at_depths "c6" { "{...}" \ + "{<C5> = {...}, c6 = 6}" \ + "{<C5> = {<C4> = {...}, c5 = 5}, c6 = 6}" \ + "{<C5> = {<C4> = {c4 = 4}, c5 = 5}, c6 = 6}" } + gdb_print_expr_at_depths "c7" { "{...}" \ + "{<C1> = {...}, <C3> = {...}, <C6> = {...}, c7 = 7}" \ + "{<C1> = {c1 = 1}, <C3> = {<C2> = {...}, c3 = 3}, <C6> = {<C5> = {...}, c6 = 6}, c7 = 7}" \ + "{<C1> = {c1 = 1}, <C3> = {<C2> = {c2 = 2}, c3 = 3}, <C6> = {<C5> = {<C4> = {...}, c5 = 5}, c6 = 6}, c7 = 7}" \ + "{<C1> = {c1 = 1}, <C3> = {<C2> = {c2 = 2}, c3 = 3}, <C6> = {<C5> = {<C4> = {c4 = 4}, c5 = 5}, c6 = 6}, c7 = 7}" } + + gdb_print_expr_at_depths "v1" [list "{...}" "{v1 = 1}" ] + gdb_print_expr_at_depths "v2" [list "{...}" \ + "{<V1> = {...}, _vptr.V2 = $hex <VTT for V2>, v2 = 2}" \ + "{<V1> = {v1 = 1}, _vptr.V2 = $hex <VTT for V2>, v2 = 2}" ] + gdb_print_expr_at_depths "v3" [list "{...}" \ + "{<V1> = {...}, _vptr.V3 = $hex <VTT for V3>, v3 = 3}" \ + "{<V1> = {v1 = 1}, _vptr.V3 = $hex <VTT for V3>, v3 = 3}" ] + gdb_print_expr_at_depths "v4" [list "{...}" \ + "{<V2> = {...}, _vptr.V4 = $hex <vtable for V4\[^>\]+>, v4 = 4}" \ + "{<V2> = {<V1> = {...}, _vptr.V2 = $hex <VTT for V4>, v2 = 2}, _vptr.V4 = $hex <vtable for V4\[^>\]+>, v4 = 4}" \ + "{<V2> = {<V1> = {v1 = 1}, _vptr.V2 = $hex <VTT for V4>, v2 = 2}, _vptr.V4 = $hex <vtable for V4\[^>\]+>, v4 = 4}" ] + gdb_print_expr_at_depths "v5" [list "{...}" \ + "{<V2> = {...}, _vptr.V5 = $hex <vtable for V5\[^>\]+>, v5 = 1}" \ + "{<V2> = {<V1> = {...}, _vptr.V2 = $hex <VTT for V5>, v2 = 2}, _vptr.V5 = $hex <vtable for V5\[^>\]+>, v5 = 1}" \ + "{<V2> = {<V1> = {v1 = 1}, _vptr.V2 = $hex <VTT for V5>, v2 = 2}, _vptr.V5 = $hex <vtable for V5\[^>\]+>, v5 = 1}" ] + gdb_print_expr_at_depths "v6" [list "{...}" \ + "{<V2> = {...}, <V3> = {...}, _vptr.V6 = $hex <vtable for V6\[^>\]+>, v6 = 1}" \ + "{<V2> = {<V1> = {...}, _vptr.V2 = $hex <vtable for V6\[^>\]+>, v2 = 2}, <V3> = {_vptr.V3 = $hex <VTT for V6>, v3 = 3}, _vptr.V6 = $hex <vtable for V6\[^>\]+>, v6 = 1}" \ + "{<V2> = {<V1> = {v1 = 1}, _vptr.V2 = $hex <vtable for V6\[^>\]+>, v2 = 2}, <V3> = {_vptr.V3 = $hex <VTT for V6>, v3 = 3}, _vptr.V6 = $hex <vtable for V6\[^>\]+>, v6 = 1}" ] + gdb_print_expr_at_depths "v7" [list "{...}" \ + "{<V4> = {...}, <V5> = {...}, <V6> = {...}, _vptr.V7 = $hex <vtable for V7\[^>\]+>, v7 = 1}" \ + "{<V4> = {<V2> = {...}, _vptr.V4 = $hex <vtable for V7\[^>\]+>, v4 = 4}, <V5> = {_vptr.V5 = $hex <vtable for V7\[^>\]+>, v5 = 1}, <V6> = {<V3> = {...}, _vptr.V6 = $hex <vtable for V7\[^>\]+>, v6 = 1}, _vptr.V7 = $hex <vtable for V7\[^>\]+>, v7 = 1}" \ + "{<V4> = {<V2> = {<V1> = {...}, _vptr.V2 = $hex <vtable for V7\[^>\]+>, v2 = 2}, _vptr.V4 = $hex <vtable for V7\[^>\]+>, v4 = 4}, <V5> = {_vptr.V5 = $hex <vtable for V7\[^>\]+>, v5 = 1}, <V6> = {<V3> = {_vptr.V3 = $hex <VTT for V7>, v3 = 3}, _vptr.V6 = $hex <vtable for V7\[^>\]+>, v6 = 1}, _vptr.V7 = $hex <vtable for V7\[^>\]+>, v7 = 1}" \ + "{<V4> = {<V2> = {<V1> = {v1 = 1}, _vptr.V2 = $hex <vtable for V7\[^>\]+>, v2 = 2}, _vptr.V4 = $hex <vtable for V7\[^>\]+>, v4 = 4}, <V5> = {_vptr.V5 = $hex <vtable for V7\[^>\]+>, v5 = 1}, <V6> = {<V3> = {_vptr.V3 = $hex <VTT for V7>, v3 = 3}, _vptr.V6 = $hex <vtable for V7\[^>\]+>, v6 = 1}, _vptr.V7 = $hex <vtable for V7\[^>\]+>, v7 = 1}" ] + } +} + +compile_and_run_tests $lang diff -Nru gdb-9.1/gdb/testsuite/gdb.base/max-value-size.c gdb-10.2/gdb/testsuite/gdb.base/max-value-size.c --- gdb-9.1/gdb/testsuite/gdb.base/max-value-size.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/max-value-size.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright (C) 2016-2020 Free Software Foundation, Inc. + Copyright (C) 2016-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/max-value-size.exp gdb-10.2/gdb/testsuite/gdb.base/max-value-size.exp --- gdb-9.1/gdb/testsuite/gdb.base/max-value-size.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/max-value-size.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2016-2020 Free Software Foundation, Inc. +# Copyright (C) 2016-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/memattr.c gdb-10.2/gdb/testsuite/gdb.base/memattr.c --- gdb-9.1/gdb/testsuite/gdb.base/memattr.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/memattr.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/memattr.exp gdb-10.2/gdb/testsuite/gdb.base/memattr.exp --- gdb-9.1/gdb/testsuite/gdb.base/memattr.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/memattr.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/mips_pro.exp gdb-10.2/gdb/testsuite/gdb.base/mips_pro.exp --- gdb-9.1/gdb/testsuite/gdb.base/mips_pro.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/mips_pro.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1997-2020 Free Software Foundation, Inc. +# Copyright 1997-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/miscexprs.exp gdb-10.2/gdb/testsuite/gdb.base/miscexprs.exp --- gdb-9.1/gdb/testsuite/gdb.base/miscexprs.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/miscexprs.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1998-2020 Free Software Foundation, Inc. +# Copyright 1998-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/morestack.c gdb-10.2/gdb/testsuite/gdb.base/morestack.c --- gdb-9.1/gdb/testsuite/gdb.base/morestack.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/morestack.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/morestack.exp gdb-10.2/gdb/testsuite/gdb.base/morestack.exp --- gdb-9.1/gdb/testsuite/gdb.base/morestack.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/morestack.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2011-2020 Free Software Foundation, Inc. +# Copyright (C) 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -21,13 +21,17 @@ return -1 } +if { [have_fuse_ld_gold] == 0} { + return -1 +} + standard_testfile # -fuse-ld=gold is used for calling printf code built without -fsplit-stack # which could crash otherwise. See GCC documentation of -fsplit-stack. set opts "additional_flags=-fsplit-stack" -if { [prepare_for_testing "failed to prepare" ${testfile} $srcfile [list $opts additional_flags=-fuse-ld=gold]] \ - && [prepare_for_testing "failed to prepare" ${testfile} $srcfile $opts] } { +if { [prepare_for_testing "failed to prepare" ${testfile} $srcfile \ + [list $opts additional_flags=-fuse-ld=gold]] } { return -1 } diff -Nru gdb-9.1/gdb/testsuite/gdb.base/moribund-step.exp gdb-10.2/gdb/testsuite/gdb.base/moribund-step.exp --- gdb-9.1/gdb/testsuite/gdb.base/moribund-step.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/moribund-step.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2010-2020 Free Software Foundation, Inc. +# Copyright (C) 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/msym-lang.c gdb-10.2/gdb/testsuite/gdb.base/msym-lang.c --- gdb-9.1/gdb/testsuite/gdb.base/msym-lang.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/msym-lang.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2018-2020 Free Software Foundation, Inc. + Copyright 2018-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/msym-lang.exp gdb-10.2/gdb/testsuite/gdb.base/msym-lang.exp --- gdb-9.1/gdb/testsuite/gdb.base/msym-lang.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/msym-lang.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2018-2020 Free Software Foundation, Inc. +# Copyright (C) 2018-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/msym-lang-main.c gdb-10.2/gdb/testsuite/gdb.base/msym-lang-main.c --- gdb-9.1/gdb/testsuite/gdb.base/msym-lang-main.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/msym-lang-main.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2018-2020 Free Software Foundation, Inc. + Copyright 2018-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/multi-forks.c gdb-10.2/gdb/testsuite/gdb.base/multi-forks.c --- gdb-9.1/gdb/testsuite/gdb.base/multi-forks.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/multi-forks.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2005-2020 Free Software Foundation, Inc. + Copyright 2005-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/multi-forks.exp gdb-10.2/gdb/testsuite/gdb.base/multi-forks.exp --- gdb-9.1/gdb/testsuite/gdb.base/multi-forks.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/multi-forks.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2005-2020 Free Software Foundation, Inc. +# Copyright 2005-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/multi-line-starts-subshell.exp gdb-10.2/gdb/testsuite/gdb.base/multi-line-starts-subshell.exp --- gdb-9.1/gdb/testsuite/gdb.base/multi-line-starts-subshell.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/multi-line-starts-subshell.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2014-2020 Free Software Foundation, Inc. +# Copyright (C) 2014-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/nested-addr.c gdb-10.2/gdb/testsuite/gdb.base/nested-addr.c --- gdb-9.1/gdb/testsuite/gdb.base/nested-addr.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/nested-addr.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/nested-addr.exp gdb-10.2/gdb/testsuite/gdb.base/nested-addr.exp --- gdb-9.1/gdb/testsuite/gdb.base/nested-addr.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/nested-addr.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/nested-subp1.c gdb-10.2/gdb/testsuite/gdb.base/nested-subp1.c --- gdb-9.1/gdb/testsuite/gdb.base/nested-subp1.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/nested-subp1.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This test program is part of GDB, the GNU debugger. - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/nested-subp1.exp gdb-10.2/gdb/testsuite/gdb.base/nested-subp1.exp --- gdb-9.1/gdb/testsuite/gdb.base/nested-subp1.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/nested-subp1.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -24,6 +24,11 @@ set testcase "nested-subp1" +if ![support_nested_function_tests] { + untested "compiler does not support nested functions" + return -1 +} + if { [gdb_compile "${srcdir}/${subdir}/${testcase}.c" \ [standard_output_file "${testcase}"] \ executable \ diff -Nru gdb-9.1/gdb/testsuite/gdb.base/nested-subp2.c gdb-10.2/gdb/testsuite/gdb.base/nested-subp2.c --- gdb-9.1/gdb/testsuite/gdb.base/nested-subp2.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/nested-subp2.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This test program is part of GDB, the GNU debugger. - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/nested-subp2.exp gdb-10.2/gdb/testsuite/gdb.base/nested-subp2.exp --- gdb-9.1/gdb/testsuite/gdb.base/nested-subp2.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/nested-subp2.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -24,6 +24,11 @@ set testcase "nested-subp2" +if ![support_nested_function_tests] { + untested "compiler does not support nested functions" + return -1 +} + if { [gdb_compile "${srcdir}/${subdir}/${testcase}.c" \ [standard_output_file "${testcase}"] \ executable \ diff -Nru gdb-9.1/gdb/testsuite/gdb.base/nested-subp3.c gdb-10.2/gdb/testsuite/gdb.base/nested-subp3.c --- gdb-9.1/gdb/testsuite/gdb.base/nested-subp3.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/nested-subp3.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This test program is part of GDB, the GNU debugger. - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/nested-subp3.exp gdb-10.2/gdb/testsuite/gdb.base/nested-subp3.exp --- gdb-9.1/gdb/testsuite/gdb.base/nested-subp3.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/nested-subp3.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -24,6 +24,11 @@ set testcase "nested-subp3" +if ![support_nested_function_tests] { + untested "compiler does not support nested functions" + return -1 +} + if { [gdb_compile "${srcdir}/${subdir}/${testcase}.c" \ [standard_output_file "${testcase}"] \ executable \ diff -Nru gdb-9.1/gdb/testsuite/gdb.base/new-ui.c gdb-10.2/gdb/testsuite/gdb.base/new-ui.c --- gdb-9.1/gdb/testsuite/gdb.base/new-ui.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/new-ui.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2016-2020 Free Software Foundation, Inc. + Copyright 2016-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/new-ui-echo.c gdb-10.2/gdb/testsuite/gdb.base/new-ui-echo.c --- gdb-9.1/gdb/testsuite/gdb.base/new-ui-echo.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/new-ui-echo.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2016-2020 Free Software Foundation, Inc. + Copyright 2016-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/new-ui-echo.exp gdb-10.2/gdb/testsuite/gdb.base/new-ui-echo.exp --- gdb-9.1/gdb/testsuite/gdb.base/new-ui-echo.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/new-ui-echo.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2016-2020 Free Software Foundation, Inc. +# Copyright 2016-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/new-ui.exp gdb-10.2/gdb/testsuite/gdb.base/new-ui.exp --- gdb-9.1/gdb/testsuite/gdb.base/new-ui.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/new-ui.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2016-2020 Free Software Foundation, Inc. +# Copyright 2016-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/new-ui-pending-input.c gdb-10.2/gdb/testsuite/gdb.base/new-ui-pending-input.c --- gdb-9.1/gdb/testsuite/gdb.base/new-ui-pending-input.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/new-ui-pending-input.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2016-2020 Free Software Foundation, Inc. + Copyright 2016-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/new-ui-pending-input.exp gdb-10.2/gdb/testsuite/gdb.base/new-ui-pending-input.exp --- gdb-9.1/gdb/testsuite/gdb.base/new-ui-pending-input.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/new-ui-pending-input.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2016-2020 Free Software Foundation, Inc. +# Copyright 2016-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/nextoverexit.c gdb-10.2/gdb/testsuite/gdb.base/nextoverexit.c --- gdb-9.1/gdb/testsuite/gdb.base/nextoverexit.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/nextoverexit.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2012-2020 Free Software Foundation, Inc. +/* Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/nextoverexit.exp gdb-10.2/gdb/testsuite/gdb.base/nextoverexit.exp --- gdb-9.1/gdb/testsuite/gdb.base/nextoverexit.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/nextoverexit.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or diff -Nru gdb-9.1/gdb/testsuite/gdb.base/nodebug.exp gdb-10.2/gdb/testsuite/gdb.base/nodebug.exp --- gdb-9.1/gdb/testsuite/gdb.base/nodebug.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/nodebug.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1997-2020 Free Software Foundation, Inc. +# Copyright 1997-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/nofield.c gdb-10.2/gdb/testsuite/gdb.base/nofield.c --- gdb-9.1/gdb/testsuite/gdb.base/nofield.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/nofield.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2007-2020 Free Software Foundation, Inc. + Copyright 2007-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/nofield.exp gdb-10.2/gdb/testsuite/gdb.base/nofield.exp --- gdb-9.1/gdb/testsuite/gdb.base/nofield.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/nofield.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2007-2020 Free Software Foundation, Inc. +# Copyright 2007-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/noreturn-finish.c gdb-10.2/gdb/testsuite/gdb.base/noreturn-finish.c --- gdb-9.1/gdb/testsuite/gdb.base/noreturn-finish.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/noreturn-finish.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/noreturn-finish.exp gdb-10.2/gdb/testsuite/gdb.base/noreturn-finish.exp --- gdb-9.1/gdb/testsuite/gdb.base/noreturn-finish.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/noreturn-finish.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/noreturn-return.c gdb-10.2/gdb/testsuite/gdb.base/noreturn-return.c --- gdb-9.1/gdb/testsuite/gdb.base/noreturn-return.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/noreturn-return.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/noreturn-return.exp gdb-10.2/gdb/testsuite/gdb.base/noreturn-return.exp --- gdb-9.1/gdb/testsuite/gdb.base/noreturn-return.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/noreturn-return.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/normal.c gdb-10.2/gdb/testsuite/gdb.base/normal.c --- gdb-9.1/gdb/testsuite/gdb.base/normal.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/normal.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/nostdlib.c gdb-10.2/gdb/testsuite/gdb.base/nostdlib.c --- gdb-9.1/gdb/testsuite/gdb.base/nostdlib.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/nostdlib.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/nostdlib.exp gdb-10.2/gdb/testsuite/gdb.base/nostdlib.exp --- gdb-9.1/gdb/testsuite/gdb.base/nostdlib.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/nostdlib.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/offsets.c gdb-10.2/gdb/testsuite/gdb.base/offsets.c --- gdb-9.1/gdb/testsuite/gdb.base/offsets.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/offsets.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/offsets.exp gdb-10.2/gdb/testsuite/gdb.base/offsets.exp --- gdb-9.1/gdb/testsuite/gdb.base/offsets.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/offsets.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # Test big offsets -# Copyright (c) 2014-2020 Free Software Foundation, Inc. +# Copyright (c) 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/opaque.exp gdb-10.2/gdb/testsuite/gdb.base/opaque.exp --- gdb-9.1/gdb/testsuite/gdb.base/opaque.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/opaque.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1992-2020 Free Software Foundation, Inc. +# Copyright 1992-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/options.c gdb-10.2/gdb/testsuite/gdb.base/options.c --- gdb-9.1/gdb/testsuite/gdb.base/options.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/options.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2019-2020 Free Software Foundation, Inc. + Copyright 2019-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/options.exp gdb-10.2/gdb/testsuite/gdb.base/options.exp --- gdb-9.1/gdb/testsuite/gdb.base/options.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/options.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/osabi.exp gdb-10.2/gdb/testsuite/gdb.base/osabi.exp --- gdb-9.1/gdb/testsuite/gdb.base/osabi.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/osabi.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2018-2020 Free Software Foundation, Inc. +# Copyright (C) 2018-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/overlays.c gdb-10.2/gdb/testsuite/gdb.base/overlays.c --- gdb-9.1/gdb/testsuite/gdb.base/overlays.c 2019-02-23 12:20:11.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/overlays.c 2020-09-13 02:33:41.000000000 +0000 @@ -3,10 +3,10 @@ #include "ovlymgr.h" -extern int foo PARAMS((int)); -extern int bar PARAMS((int)); -extern int baz PARAMS((int)); -extern int grbx PARAMS((int)); +extern int foo (int); +extern int bar (int); +extern int baz (int); +extern int grbx (int); int main () { diff -Nru gdb-9.1/gdb/testsuite/gdb.base/overlays.exp gdb-10.2/gdb/testsuite/gdb.base/overlays.exp --- gdb-9.1/gdb/testsuite/gdb.base/overlays.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/overlays.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1997-2020 Free Software Foundation, Inc. +# Copyright 1997-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/ovlymgr.c gdb-10.2/gdb/testsuite/gdb.base/ovlymgr.c --- gdb-9.1/gdb/testsuite/gdb.base/ovlymgr.c 2019-09-20 21:58:17.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/ovlymgr.c 2021-04-25 04:06:26.000000000 +0000 @@ -93,141 +93,8 @@ return TRUE; } -#ifdef __D10V__ -#define IMAP0 (*(short *)(0xff00)) -#define IMAP1 (*(short *)(0xff02)) -#define DMAP (*(short *)(0xff04)) - -static void -D10VTranslate (unsigned long logical, - short *dmap, - unsigned long **addr) -{ - unsigned long physical; - unsigned long seg; - unsigned long off; - - /* to access data, we use the following mapping - 0x00xxxxxx: Logical data address segment (DMAP translated memory) - 0x01xxxxxx: Logical instruction address segment (IMAP translated memory) - 0x10xxxxxx: Physical data memory segment (On-chip data memory) - 0x11xxxxxx: Physical instruction memory segment (On-chip insn memory) - 0x12xxxxxx: Phisical unified memory segment (Unified memory) - */ - - /* Addresses must be correctly aligned */ - if (logical & (sizeof (**addr) - 1)) - exit (-1); - - /* If the address is in one of the two logical address spaces, it is - first translated into a physical address */ - seg = (logical >> 24); - off = (logical & 0xffffffL); - switch (seg) - { - case 0x00: /* in logical data address segment */ - if (off <= 0x7fffL) - physical = (0x10L << 24) + off; - else - /* Logical address out side of on-chip segment, not - supported */ - exit (-1); - break; - case 0x01: /* in logical instruction address segment */ - { - short map; - if (off <= 0x1ffffL) - map = IMAP0; - else if (off <= 0x3ffffL) - map = IMAP1; - else - /* Logical address outside of IMAP[01] segment, not - supported */ - exit (-1); - if (map & 0x1000L) - { - /* Instruction memory */ - physical = (0x11L << 24) | off; - } - else - { - /* Unified memory */ - physical = ((map & 0x7fL) << 17) + (off & 0x1ffffL); - if (physical > 0xffffffL) - /* Address outside of unified address segment */ - exit (-1); - physical |= (0x12L << 24); - } - break; - } - case 0x10: - case 0x11: - case 0x12: - physical = logical; - break; - default: - exit (-1); /* error */ - } - - seg = (physical >> 24); - off = (physical & 0xffffffL); - switch (seg) - { - case 0x10: /* dst is a 15 bit offset into the on-chip memory */ - *dmap = 0; - *addr = (long *) (0x0000 + ((short)off & 0x7fff)); - break; - case 0x11: /* dst is an 18-bit offset into the on-chip - instruction memory */ - *dmap = 0x1000L | ((off & 0x3ffffL) >> 14); - *addr = (long *) (0x8000 + ((short)off & 0x3fff)); - break; - case 0x12: /* dst is a 24-bit offset into unified memory */ - *dmap = off >> 14; - *addr = (long *) (0x8000 + ((short)off & 0x3fff)); - break; - default: - exit (-1); /* error */ - } -} -#endif /* __D10V__ */ - static void ovly_copy (unsigned long dst, unsigned long src, long size) { -#ifdef __D10V__ - unsigned long *s, *d, tmp; - short dmap_src, dmap_dst; - short dmap_save; - - /* all section sizes should by multiples of 4 bytes */ - dmap_save = DMAP; - - D10VTranslate (src, &dmap_src, &s); - D10VTranslate (dst, &dmap_dst, &d); - - while (size > 0) - { - /* NB: Transfer 4 byte (long) quantites, problems occure - when only two bytes are transfered */ - DMAP = dmap_src; - tmp = *s; - DMAP = dmap_dst; - *d = tmp; - d++; - s++; - size -= sizeof (tmp); - src += sizeof (tmp); - dst += sizeof (tmp); - if ((src & 0x3fff) == 0) - D10VTranslate (src, &dmap_src, &s); - if ((dst & 0x3fff) == 0) - D10VTranslate (dst, &dmap_dst, &d); - } - DMAP = dmap_save; -#else memcpy ((void *) dst, (void *) src, size); -#endif /* D10V */ - return; } - diff -Nru gdb-9.1/gdb/testsuite/gdb.base/ovlymgr.h gdb-10.2/gdb/testsuite/gdb.base/ovlymgr.h --- gdb-9.1/gdb/testsuite/gdb.base/ovlymgr.h 2019-02-23 12:20:11.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/ovlymgr.h 2020-09-13 02:33:41.000000000 +0000 @@ -2,16 +2,9 @@ * Sample runtime overlay manager. */ -#ifdef NO_PROTOTYPES -#define PARAMS(paramlist) () -#else -#define PARAMS(paramlist) paramlist -#endif - typedef enum { FALSE, TRUE } bool; /* Entry Points: */ -bool OverlayLoad PARAMS((unsigned long ovlyno)); -bool OverlayUnload PARAMS((unsigned long ovlyno)); - +bool OverlayLoad (unsigned long ovlyno); +bool OverlayUnload (unsigned long ovlyno); diff -Nru gdb-9.1/gdb/testsuite/gdb.base/page.exp gdb-10.2/gdb/testsuite/gdb.base/page.exp --- gdb-9.1/gdb/testsuite/gdb.base/page.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/page.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1992-2020 Free Software Foundation, Inc. +# Copyright 1992-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -23,7 +23,7 @@ gdb_test_sequence "help" "unpaged help" { "List of classes of commands:" "" - "aliases -- Aliases of other commands" + "aliases -- User-defined aliases of other commands" "breakpoints -- Making program stop at certain points" "data -- Examining data" "files -- Specifying and examining files" @@ -50,7 +50,7 @@ ".*$pagination_prompt" { "List of classes of commands:" "" - "aliases -- Aliases of other commands" + "aliases -- User-defined aliases of other commands" "breakpoints -- Making program stop at certain points" "data -- Examining data" "files -- Specifying and examining files" diff -Nru gdb-9.1/gdb/testsuite/gdb.base/paginate-after-ctrl-c-running.c gdb-10.2/gdb/testsuite/gdb.base/paginate-after-ctrl-c-running.c --- gdb-9.1/gdb/testsuite/gdb.base/paginate-after-ctrl-c-running.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/paginate-after-ctrl-c-running.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/paginate-after-ctrl-c-running.exp gdb-10.2/gdb/testsuite/gdb.base/paginate-after-ctrl-c-running.exp --- gdb-9.1/gdb/testsuite/gdb.base/paginate-after-ctrl-c-running.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/paginate-after-ctrl-c-running.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2014-2020 Free Software Foundation, Inc. +# Copyright (C) 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/paginate-bg-execution.c gdb-10.2/gdb/testsuite/gdb.base/paginate-bg-execution.c --- gdb-9.1/gdb/testsuite/gdb.base/paginate-bg-execution.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/paginate-bg-execution.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/paginate-bg-execution.exp gdb-10.2/gdb/testsuite/gdb.base/paginate-bg-execution.exp --- gdb-9.1/gdb/testsuite/gdb.base/paginate-bg-execution.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/paginate-bg-execution.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2014-2020 Free Software Foundation, Inc. +# Copyright (C) 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/paginate-execution-startup.c gdb-10.2/gdb/testsuite/gdb.base/paginate-execution-startup.c --- gdb-9.1/gdb/testsuite/gdb.base/paginate-execution-startup.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/paginate-execution-startup.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/paginate-execution-startup.exp gdb-10.2/gdb/testsuite/gdb.base/paginate-execution-startup.exp --- gdb-9.1/gdb/testsuite/gdb.base/paginate-execution-startup.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/paginate-execution-startup.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2014-2020 Free Software Foundation, Inc. +# Copyright (C) 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/paginate-inferior-exit.c gdb-10.2/gdb/testsuite/gdb.base/paginate-inferior-exit.c --- gdb-9.1/gdb/testsuite/gdb.base/paginate-inferior-exit.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/paginate-inferior-exit.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/paginate-inferior-exit.exp gdb-10.2/gdb/testsuite/gdb.base/paginate-inferior-exit.exp --- gdb-9.1/gdb/testsuite/gdb.base/paginate-inferior-exit.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/paginate-inferior-exit.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2014-2020 Free Software Foundation, Inc. +# Copyright (C) 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/pc-fp.exp gdb-10.2/gdb/testsuite/gdb.base/pc-fp.exp --- gdb-9.1/gdb/testsuite/gdb.base/pc-fp.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/pc-fp.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2002-2020 Free Software Foundation, Inc. +# Copyright 2002-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/pending.c gdb-10.2/gdb/testsuite/gdb.base/pending.c --- gdb-9.1/gdb/testsuite/gdb.base/pending.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/pending.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2004-2020 Free Software Foundation, Inc. + Copyright 2004-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/pending.exp gdb-10.2/gdb/testsuite/gdb.base/pending.exp --- gdb-9.1/gdb/testsuite/gdb.base/pending.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/pending.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2003-2020 Free Software Foundation, Inc. +# Copyright 2003-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/pendshr.c gdb-10.2/gdb/testsuite/gdb.base/pendshr.c --- gdb-9.1/gdb/testsuite/gdb.base/pendshr.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/pendshr.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2004-2020 Free Software Foundation, Inc. + Copyright 2004-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/permissions.exp gdb-10.2/gdb/testsuite/gdb.base/permissions.exp --- gdb-9.1/gdb/testsuite/gdb.base/permissions.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/permissions.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -34,43 +34,48 @@ gdb_start gdb_reinitialize_dir $srcdir/$subdir -gdb_test "show may-write-registers" \ - "Permission to write into registers is on." +with_test_prefix "observer mode off" { -gdb_test "show may-write-memory" \ - "Permission to write into target memory is on." + gdb_test "show may-write-registers" \ + "Permission to write into registers is on." -gdb_test "show may-insert-breakpoints" \ - "Permission to insert breakpoints in the target is on." + gdb_test "show may-write-memory" \ + "Permission to write into target memory is on." -gdb_test "show may-insert-tracepoints" \ - "Permission to insert tracepoints in the target is on." + gdb_test "show may-insert-breakpoints" \ + "Permission to insert breakpoints in the target is on." -gdb_test "show may-insert-fast-tracepoints" \ - "Permission to insert fast tracepoints in the target is on." + gdb_test "show may-insert-tracepoints" \ + "Permission to insert tracepoints in the target is on." -gdb_test "show may-interrupt" \ - "Permission to interrupt or signal the target is on." + gdb_test "show may-insert-fast-tracepoints" \ + "Permission to insert fast tracepoints in the target is on." + + gdb_test "show may-interrupt" \ + "Permission to interrupt or signal the target is on." +} gdb_test "set observer on" "Observer mode is now on." "enable observer mode" -gdb_test "show may-write-memory" \ - "Permission to write into target memory is off." +with_test_prefix "observer mode on" { + gdb_test "show may-write-memory" \ + "Permission to write into target memory is off." -gdb_test "show may-write-registers" \ - "Permission to write into registers is off." + gdb_test "show may-write-registers" \ + "Permission to write into registers is off." -gdb_test "show may-insert-breakpoints" \ - "Permission to insert breakpoints in the target is off." + gdb_test "show may-insert-breakpoints" \ + "Permission to insert breakpoints in the target is off." -gdb_test "show may-insert-tracepoints" \ - "Permission to insert tracepoints in the target is off." + gdb_test "show may-insert-tracepoints" \ + "Permission to insert tracepoints in the target is off." -gdb_test "show may-insert-fast-tracepoints" \ - "Permission to insert fast tracepoints in the target is on." + gdb_test "show may-insert-fast-tracepoints" \ + "Permission to insert fast tracepoints in the target is on." -gdb_test "show may-interrupt" \ - "Permission to interrupt or signal the target is off." + gdb_test "show may-interrupt" \ + "Permission to interrupt or signal the target is off." +} gdb_test "set observer off" "Observer mode is now off." "disable observer mode" @@ -87,14 +92,14 @@ gdb_test "print x = 45" "$decimal = 45" "set a global" -gdb_test "print x" "$decimal = 45" +gdb_test "print x" "$decimal = 45" "validate setting a global" gdb_test "set may-write-memory off" gdb_test "print x = 92" "Writing to memory is not allowed.*" \ - "try to set a global" + "set a global, 2nd time" -gdb_test "print x" "$decimal = 45" +gdb_test "print x" "$decimal = 45" "validate setting a global, 2nd time" # FIXME Add tests for other flags when a testsuite-able target becomes # available. diff -Nru gdb-9.1/gdb/testsuite/gdb.base/persistent-lang.cc gdb-10.2/gdb/testsuite/gdb.base/persistent-lang.cc --- gdb-9.1/gdb/testsuite/gdb.base/persistent-lang.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/persistent-lang.cc 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,22 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +int +main () +{ + return 0; +} diff -Nru gdb-9.1/gdb/testsuite/gdb.base/persistent-lang.exp gdb-10.2/gdb/testsuite/gdb.base/persistent-lang.exp --- gdb-9.1/gdb/testsuite/gdb.base/persistent-lang.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/persistent-lang.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,39 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +standard_testfile .cc + +if {[build_executable "failed to prepare" $testfile $srcfile debug]} { + return -1 +} + +clean_restart + +set auto_c \ + "The current source language is \"auto; currently c\"\." +set manual_c \ + "The current source language is \"c\"\." + +gdb_test "show language" $auto_c \ + "initial language is auto/c" + +gdb_test_no_output "set language c" +gdb_test "show language" $manual_c \ + "language updated to manual/c after set" + +set binfile [standard_output_file ${testfile}] +gdb_load ${binfile} +gdb_test "show language" $manual_c \ + "language still manual/c after load" diff -Nru gdb-9.1/gdb/testsuite/gdb.base/pie-execl.c gdb-10.2/gdb/testsuite/gdb.base/pie-execl.c --- gdb-9.1/gdb/testsuite/gdb.base/pie-execl.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/pie-execl.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/pie-execl.exp gdb-10.2/gdb/testsuite/gdb.base/pie-execl.exp --- gdb-9.1/gdb/testsuite/gdb.base/pie-execl.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/pie-execl.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/pie-fork.c gdb-10.2/gdb/testsuite/gdb.base/pie-fork.c --- gdb-9.1/gdb/testsuite/gdb.base/pie-fork.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/pie-fork.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2018-2020 Free Software Foundation, Inc. + Copyright 2018-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/pie-fork.exp gdb-10.2/gdb/testsuite/gdb.base/pie-fork.exp --- gdb-9.1/gdb/testsuite/gdb.base/pie-fork.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/pie-fork.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2018-2020 Free Software Foundation, Inc. +# Copyright 2018-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/pointers.exp gdb-10.2/gdb/testsuite/gdb.base/pointers.exp --- gdb-9.1/gdb/testsuite/gdb.base/pointers.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/pointers.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1998-2020 Free Software Foundation, Inc. +# Copyright 1998-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/pr10179-a.c gdb-10.2/gdb/testsuite/gdb.base/pr10179-a.c --- gdb-9.1/gdb/testsuite/gdb.base/pr10179-a.c 2019-02-23 12:20:11.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/pr10179-a.c 2021-04-25 04:06:26.000000000 +0000 @@ -5,11 +5,13 @@ int foo1() { + return 0; } int bar1() { + return 0; } int diff -Nru gdb-9.1/gdb/testsuite/gdb.base/pr10179-b.c gdb-10.2/gdb/testsuite/gdb.base/pr10179-b.c --- gdb-9.1/gdb/testsuite/gdb.base/pr10179-b.c 2019-02-23 12:20:11.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/pr10179-b.c 2020-09-13 02:33:41.000000000 +0000 @@ -3,4 +3,5 @@ int foo2() { + return 0; } diff -Nru gdb-9.1/gdb/testsuite/gdb.base/pr10179.exp gdb-10.2/gdb/testsuite/gdb.base/pr10179.exp --- gdb-9.1/gdb/testsuite/gdb.base/pr10179.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/pr10179.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/pr11022.c gdb-10.2/gdb/testsuite/gdb.base/pr11022.c --- gdb-9.1/gdb/testsuite/gdb.base/pr11022.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/pr11022.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This test is part of GDB, the GNU debugger. - Copyright 2009-2020 Free Software Foundation, Inc. + Copyright 2009-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/pr11022.exp gdb-10.2/gdb/testsuite/gdb.base/pr11022.exp --- gdb-9.1/gdb/testsuite/gdb.base/pr11022.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/pr11022.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2009-2020 Free Software Foundation, Inc. +# Copyright 2009-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/prelink.c gdb-10.2/gdb/testsuite/gdb.base/prelink.c --- gdb-9.1/gdb/testsuite/gdb.base/prelink.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/prelink.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2006-2020 Free Software Foundation, Inc. + Copyright 2006-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/prelink.exp gdb-10.2/gdb/testsuite/gdb.base/prelink.exp --- gdb-9.1/gdb/testsuite/gdb.base/prelink.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/prelink.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2006-2020 Free Software Foundation, Inc. +# Copyright 2006-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/prelink-lib.c gdb-10.2/gdb/testsuite/gdb.base/prelink-lib.c --- gdb-9.1/gdb/testsuite/gdb.base/prelink-lib.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/prelink-lib.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2006-2020 Free Software Foundation, Inc. + Copyright 2006-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/pretty-array.c gdb-10.2/gdb/testsuite/gdb.base/pretty-array.c --- gdb-9.1/gdb/testsuite/gdb.base/pretty-array.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/pretty-array.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,24 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +int nums[2][3] = {{11, 12, 13}, {21, 22, 23}}; + +int +main () +{ + return 0; +} diff -Nru gdb-9.1/gdb/testsuite/gdb.base/pretty-array.exp gdb-10.2/gdb/testsuite/gdb.base/pretty-array.exp --- gdb-9.1/gdb/testsuite/gdb.base/pretty-array.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/pretty-array.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,65 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Test pretty printing of arrays. + +standard_testfile + +if {[prepare_for_testing $testfile.exp $testfile $srcfile debug]} { + untested $testfile.exp + return -1 +} + +if ![runto_main] { + untested $testfile.exp + return -1 +} + +gdb_test "print nums" \ + "= \\{\\{11, 12, 13\\}, \\{21, 22, 23\\}\\}" + +gdb_test_no_output "set print array on" + +gdb_test "print nums" \ + [multi_line \ + " = {" \ + " {" \ + " 11," \ + " 12," \ + " 13" \ + " }," \ + " {" \ + " 21," \ + " 22," \ + " 23" \ + " }" \ + "}" ] + +gdb_test_no_output "set print array-indexes on" + +gdb_test "print nums" \ + [multi_line \ + " = {" \ + " \\\[0\\\] = {" \ + " \\\[0\\\] = 11," \ + " \\\[1\\\] = 12," \ + " \\\[2\\\] = 13" \ + " }," \ + " \\\[1\\\] = {" \ + " \\\[0\\\] = 21," \ + " \\\[1\\\] = 22," \ + " \\\[2\\\] = 23" \ + " }" \ + "}" ] diff -Nru gdb-9.1/gdb/testsuite/gdb.base/pretty-print.c gdb-10.2/gdb/testsuite/gdb.base/pretty-print.c --- gdb-9.1/gdb/testsuite/gdb.base/pretty-print.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/pretty-print.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2019-2020 Free Software Foundation, Inc. + Copyright 2019-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/pretty-print.exp gdb-10.2/gdb/testsuite/gdb.base/pretty-print.exp --- gdb-9.1/gdb/testsuite/gdb.base/pretty-print.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/pretty-print.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/printcmds.c gdb-10.2/gdb/testsuite/gdb.base/printcmds.c --- gdb-9.1/gdb/testsuite/gdb.base/printcmds.c 2019-02-23 12:20:11.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/printcmds.c 2021-04-25 04:06:26.000000000 +0000 @@ -72,6 +72,9 @@ char *teststring = (char*)"teststring contents"; +typedef char *charptr; +charptr teststring2 = "more contents"; + /* Test printing of a struct containing character arrays. */ struct some_arrays { @@ -96,9 +99,36 @@ name. See PR11827. */ volatile enum some_volatile_enum some_volatile_enum = enumvolval1; -enum flag_enum { ONE = 1, TWO = 2 }; +/* An enum considered as a "flag enum". */ +enum flag_enum +{ + FE_NONE = 0x00, + FE_ONE = 0x01, + FE_TWO = 0x02, + FE_TWO_LEGACY = 0x02, +}; + +enum flag_enum three = FE_ONE | FE_TWO; + +/* Another enum considered as a "flag enum", but with no enumerator with value + 0. */ +enum flag_enum_without_zero +{ + FEWZ_ONE = 0x01, + FEWZ_TWO = 0x02, +}; + +enum flag_enum_without_zero flag_enum_without_zero = 0; + +/* Not a flag enum, an enumerator value has multiple bits sets. */ +enum not_flag_enum +{ + NFE_ONE = 0x01, + NFE_TWO = 0x02, + NFE_F0 = 0xf0, +}; -enum flag_enum three = ONE | TWO; +enum not_flag_enum three_not_flag = NFE_ONE | NFE_TWO; /* A structure with an embedded array at an offset > 0. The array has all elements with the same repeating value, which must not be the diff -Nru gdb-9.1/gdb/testsuite/gdb.base/printcmds.exp gdb-10.2/gdb/testsuite/gdb.base/printcmds.exp --- gdb-9.1/gdb/testsuite/gdb.base/printcmds.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/printcmds.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 1992-2020 Free Software Foundation, Inc. +# Copyright 1992-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -127,15 +127,15 @@ gdb_test "p 1.5l" " = 1.5" # Test hexadecimal floating point. - set test "p 0x1.1" - gdb_test_multiple $test $test { - -re " = 1\\.0625\r\n$gdb_prompt $" { - pass $test - } - -re "Invalid number \"0x1\\.1\"\\.\r\n$gdb_prompt $" { - # Older glibc does not support hex float, newer does. - xfail $test - } + foreach {num result} { + 0x1.1 1.0625 + 0x1.8480000000000p+6 97.125 + 0x1.8480000000000p6 97.125 + 0x00.1p0 0.0625 + 0x00.1p1 0.125 + 0x00.1p-1 0.03125 + } { + gdb_test "p $num" " = [string_to_regexp $result]" } } @@ -519,6 +519,9 @@ gdb_test "p teststring" \ " = (.unsigned char .. )?\"teststring contents\"" "p teststring with elements set to 20" + gdb_test "print teststring2" \ + " = \\(charptr\\) \"more contents\"" + gdb_test_no_output "set print elements 8" # Set the target-charset to ASCII, because the output varies from @@ -653,9 +656,9 @@ gdb_test_escape_braces "p int1dim\[0\]${ctrlv}@2${ctrlv}@3" \ "({{0, 1}, {2, 3}, {4, 5}}|\[Cc\]annot.*)" \ {p int1dim[0]@2@3} - gdb_test_escape_braces "p int1dim\[0\]${ctrlv}@TWO" " = {0, 1}" \ + gdb_test_escape_braces "p int1dim\[0\]${ctrlv}@FE_TWO" " = {0, 1}" \ {p int1dim[0]@TWO} - gdb_test_escape_braces "p int1dim\[0\]${ctrlv}@TWO${ctrlv}@three" \ + gdb_test_escape_braces "p int1dim\[0\]${ctrlv}@FE_TWO${ctrlv}@three" \ "({{0, 1}, {2, 3}, {4, 5}}|\[Cc\]annot.*)" \ {p int1dim[0]@TWO@three} gdb_test_escape_braces {p/x (short [])0x12345678} \ @@ -736,7 +739,21 @@ # Regression test for PR11827. gdb_test "print some_volatile_enum" "enumvolval1" - gdb_test "print three" " = \\\(ONE \\| TWO\\\)" + # Print a flag enum. + gdb_test "print three" [string_to_regexp " = (FE_ONE | FE_TWO)"] + + # Print a flag enum with value 0, where an enumerator has value 0. + gdb_test "print (enum flag_enum) 0x0" [string_to_regexp " = FE_NONE"] + + # Print a flag enum with value 0, where no enumerator has value 0. + gdb_test "print flag_enum_without_zero" [string_to_regexp " = 0"] + + # Print a flag enum with unknown bits set. + gdb_test "print (enum flag_enum) 0xf1" [string_to_regexp " = (FE_ONE | unknown: 0xf0)"] + + # Test printing an enum not considered a "flag enum" (because one of its + # enumerators has multiple bits set). + gdb_test "print three_not_flag" [string_to_regexp " = 3"] } proc test_printf {} { @@ -1025,6 +1042,14 @@ test_printf_convenience_var "with target, may-call-functions off" gdb_test_no_output "set may-call-functions on" +# Test printf of a variable that holds the address to a substring in +# the inferior. This test will not work without a target. +gdb_test_no_output "set var \$test_substr = \(char \*\) \(&teststring\[0\] + 4\)" \ + "set \$test_substr var" +gdb_test "printf \"test_substr val = %s\\n\", \$test_substr" \ + "test_substr val = string contents" \ + "print \$test_substr" + test_integer_literals_accepted test_integer_literals_rejected test_float_accepted diff -Nru gdb-9.1/gdb/testsuite/gdb.base/print-file-var.exp gdb-10.2/gdb/testsuite/gdb.base/print-file-var.exp --- gdb-9.1/gdb/testsuite/gdb.base/print-file-var.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/print-file-var.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -106,7 +106,7 @@ [gdb_get_line_number "STOP" "${main}.c"] gdb_test "break $main.c:$bp_location" \ "Breakpoint \[0-9\]+ at 0x\[0-9a-fA-F\]+: .*" \ - "breapoint at STOP marker" + "breakpoint at STOP marker" gdb_test "continue" \ "Breakpoint \[0-9\]+, main \\(\\) at.*STOP.*" \ diff -Nru gdb-9.1/gdb/testsuite/gdb.base/print-file-var.h gdb-10.2/gdb/testsuite/gdb.base/print-file-var.h --- gdb-9.1/gdb/testsuite/gdb.base/print-file-var.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/print-file-var.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2019-2020 Free Software Foundation, Inc. + Copyright 2019-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/print-file-var-lib1.c gdb-10.2/gdb/testsuite/gdb.base/print-file-var-lib1.c --- gdb-9.1/gdb/testsuite/gdb.base/print-file-var-lib1.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/print-file-var-lib1.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/print-file-var-lib2.c gdb-10.2/gdb/testsuite/gdb.base/print-file-var-lib2.c --- gdb-9.1/gdb/testsuite/gdb.base/print-file-var-lib2.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/print-file-var-lib2.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/print-file-var-main.c gdb-10.2/gdb/testsuite/gdb.base/print-file-var-main.c --- gdb-9.1/gdb/testsuite/gdb.base/print-file-var-main.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/print-file-var-main.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/print-symbol-loading.exp gdb-10.2/gdb/testsuite/gdb.base/print-symbol-loading.exp --- gdb-9.1/gdb/testsuite/gdb.base/print-symbol-loading.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/print-symbol-loading.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/print-symbol-loading-lib.c gdb-10.2/gdb/testsuite/gdb.base/print-symbol-loading-lib.c --- gdb-9.1/gdb/testsuite/gdb.base/print-symbol-loading-lib.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/print-symbol-loading-lib.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2010-2020 Free Software Foundation, Inc. +/* Copyright 2010-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.base/print-symbol-loading-main.c gdb-10.2/gdb/testsuite/gdb.base/print-symbol-loading-main.c --- gdb-9.1/gdb/testsuite/gdb.base/print-symbol-loading-main.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/print-symbol-loading-main.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2010-2020 Free Software Foundation, Inc. +/* Copyright 2010-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.base/prologue.c gdb-10.2/gdb/testsuite/gdb.base/prologue.c --- gdb-9.1/gdb/testsuite/gdb.base/prologue.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/prologue.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This test is part of GDB, the GNU debugger. - Copyright 2007-2020 Free Software Foundation, Inc. + Copyright 2007-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/prologue.exp gdb-10.2/gdb/testsuite/gdb.base/prologue.exp --- gdb-9.1/gdb/testsuite/gdb.base/prologue.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/prologue.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ # Test for prologue skipping in minimal symbols with line info. -# Copyright 2007-2020 Free Software Foundation, Inc. +# Copyright 2007-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/prologue-include.c gdb-10.2/gdb/testsuite/gdb.base/prologue-include.c --- gdb-9.1/gdb/testsuite/gdb.base/prologue-include.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/prologue-include.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/prologue-include.exp gdb-10.2/gdb/testsuite/gdb.base/prologue-include.exp --- gdb-9.1/gdb/testsuite/gdb.base/prologue-include.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/prologue-include.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2013-2020 Free Software Foundation, Inc. +# Copyright (C) 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/prologue-include.h gdb-10.2/gdb/testsuite/gdb.base/prologue-include.h --- gdb-9.1/gdb/testsuite/gdb.base/prologue-include.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/prologue-include.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/psym-external-decl-2.c gdb-10.2/gdb/testsuite/gdb.base/psym-external-decl-2.c --- gdb-9.1/gdb/testsuite/gdb.base/psym-external-decl-2.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/psym-external-decl-2.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,18 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +int aaa = 33; diff -Nru gdb-9.1/gdb/testsuite/gdb.base/psym-external-decl.c gdb-10.2/gdb/testsuite/gdb.base/psym-external-decl.c --- gdb-9.1/gdb/testsuite/gdb.base/psym-external-decl.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/psym-external-decl.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,25 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +extern int aaa; + +int +main (void) +{ + return aaa; +} + diff -Nru gdb-9.1/gdb/testsuite/gdb.base/psym-external-decl.exp gdb-10.2/gdb/testsuite/gdb.base/psym-external-decl.exp --- gdb-9.1/gdb/testsuite/gdb.base/psym-external-decl.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/psym-external-decl.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,35 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +standard_testfile .c psym-external-decl-2.c + +get_compiler_info +if { [test_compiler_info "clang-*"] } { + return -1 +} + +set srcfiles [list $srcfile $srcfile2] + +if { [build_executable_from_specs \ + "failed to prepare" \ + $testfile [list] \ + $srcfile [list debug] \ + $srcfile2 [list]] == -1 } { + return -1 +} + +clean_restart $testfile + +gdb_test "print aaa" " = 33" diff -Nru gdb-9.1/gdb/testsuite/gdb.base/psymtab.exp gdb-10.2/gdb/testsuite/gdb.base/psymtab.exp --- gdb-9.1/gdb/testsuite/gdb.base/psymtab.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/psymtab.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2003-2020 Free Software Foundation, Inc. +# Copyright 2003-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/ptr-typedef.c gdb-10.2/gdb/testsuite/gdb.base/ptr-typedef.c --- gdb-9.1/gdb/testsuite/gdb.base/ptr-typedef.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/ptr-typedef.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2005-2020 Free Software Foundation, Inc. + Copyright 2005-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/ptr-typedef.exp gdb-10.2/gdb/testsuite/gdb.base/ptr-typedef.exp --- gdb-9.1/gdb/testsuite/gdb.base/ptr-typedef.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/ptr-typedef.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2005-2020 Free Software Foundation, Inc. +# Copyright 2005-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/ptype.exp gdb-10.2/gdb/testsuite/gdb.base/ptype.exp --- gdb-9.1/gdb/testsuite/gdb.base/ptype.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/ptype.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1988-2020 Free Software Foundation, Inc. +# Copyright 1988-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/ptype-offsets.cc gdb-10.2/gdb/testsuite/gdb.base/ptype-offsets.cc --- gdb-9.1/gdb/testsuite/gdb.base/ptype-offsets.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/ptype-offsets.cc 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2017-2020 Free Software Foundation, Inc. + Copyright 2017-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/ptype-offsets.exp gdb-10.2/gdb/testsuite/gdb.base/ptype-offsets.exp --- gdb-9.1/gdb/testsuite/gdb.base/ptype-offsets.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/ptype-offsets.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2017-2020 Free Software Foundation, Inc. +# Copyright 2017-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/quit.exp gdb-10.2/gdb/testsuite/gdb.base/quit.exp --- gdb-9.1/gdb/testsuite/gdb.base/quit.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/quit.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2016-2020 Free Software Foundation, Inc. +# Copyright (C) 2016-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/quit-live.c gdb-10.2/gdb/testsuite/gdb.base/quit-live.c --- gdb-9.1/gdb/testsuite/gdb.base/quit-live.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/quit-live.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2017-2020 Free Software Foundation, Inc. + Copyright 2017-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/quit-live.exp gdb-10.2/gdb/testsuite/gdb.base/quit-live.exp --- gdb-9.1/gdb/testsuite/gdb.base/quit-live.exp 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/quit-live.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2017-2020 Free Software Foundation, Inc. +# Copyright (C) 2017-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -120,7 +120,7 @@ } if {$extra_inferior} { - gdb_test "add-inferior" "Added inferior 2*" \ + gdb_test "add-inferior" "Added inferior 2 on connection .*" \ "add empty inferior 2" gdb_test "inferior 2" "Switching to inferior 2.*" \ "switch to inferior 2" diff -Nru gdb-9.1/gdb/testsuite/gdb.base/radix.exp gdb-10.2/gdb/testsuite/gdb.base/radix.exp --- gdb-9.1/gdb/testsuite/gdb.base/radix.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/radix.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 1993-2020 Free Software Foundation, Inc. +# Copyright 1993-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/randomize.c gdb-10.2/gdb/testsuite/gdb.base/randomize.c --- gdb-9.1/gdb/testsuite/gdb.base/randomize.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/randomize.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2008-2020 Free Software Foundation, Inc. + Copyright 2008-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/randomize.exp gdb-10.2/gdb/testsuite/gdb.base/randomize.exp --- gdb-9.1/gdb/testsuite/gdb.base/randomize.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/randomize.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/random-signal.c gdb-10.2/gdb/testsuite/gdb.base/random-signal.c --- gdb-9.1/gdb/testsuite/gdb.base/random-signal.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/random-signal.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/random-signal.exp gdb-10.2/gdb/testsuite/gdb.base/random-signal.exp --- gdb-9.1/gdb/testsuite/gdb.base/random-signal.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/random-signal.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/range-stepping.c gdb-10.2/gdb/testsuite/gdb.base/range-stepping.c --- gdb-9.1/gdb/testsuite/gdb.base/range-stepping.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/range-stepping.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/range-stepping.exp gdb-10.2/gdb/testsuite/gdb.base/range-stepping.exp --- gdb-9.1/gdb/testsuite/gdb.base/range-stepping.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/range-stepping.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/readline-ask.c gdb-10.2/gdb/testsuite/gdb.base/readline-ask.c --- gdb-9.1/gdb/testsuite/gdb.base/readline-ask.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/readline-ask.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/readline-ask.exp gdb-10.2/gdb/testsuite/gdb.base/readline-ask.exp --- gdb-9.1/gdb/testsuite/gdb.base/readline-ask.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/readline-ask.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2011-2020 Free Software Foundation, Inc. +# Copyright (C) 2011-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/readline-ask.inputrc gdb-10.2/gdb/testsuite/gdb.base/readline-ask.inputrc --- gdb-9.1/gdb/testsuite/gdb.base/readline-ask.inputrc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/readline-ask.inputrc 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2011-2020 Free Software Foundation, Inc. +# Copyright (C) 2011-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/readline.exp gdb-10.2/gdb/testsuite/gdb.base/readline.exp --- gdb-9.1/gdb/testsuite/gdb.base/readline.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/readline.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2002-2020 Free Software Foundation, Inc. +# Copyright 2002-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/readnever.c gdb-10.2/gdb/testsuite/gdb.base/readnever.c --- gdb-9.1/gdb/testsuite/gdb.base/readnever.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/readnever.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2016-2020 Free Software Foundation, Inc. +/* Copyright 2016-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/readnever.exp gdb-10.2/gdb/testsuite/gdb.base/readnever.exp --- gdb-9.1/gdb/testsuite/gdb.base/readnever.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/readnever.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2016-2020 Free Software Foundation, Inc. +# Copyright 2016-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -20,9 +20,18 @@ return -1 } +# See if we have target board readnow.exp or similar. +if { [lsearch -exact $GDBFLAGS -readnow] != -1 \ + || [lsearch -exact $GDBFLAGS --readnow] != -1 } { + untested "--readnever not allowed in combination with --readnow" + return -1 +} + save_vars { GDBFLAGS } { append GDBFLAGS " --readnever" - clean_restart ${binfile} + if { [clean_restart ${binfile}] == -1 } { + return -1 + } } if ![runto_main] then { diff -Nru gdb-9.1/gdb/testsuite/gdb.base/realname-expand.c gdb-10.2/gdb/testsuite/gdb.base/realname-expand.c --- gdb-9.1/gdb/testsuite/gdb.base/realname-expand.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/realname-expand.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/realname-expand.exp gdb-10.2/gdb/testsuite/gdb.base/realname-expand.exp --- gdb-9.1/gdb/testsuite/gdb.base/realname-expand.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/realname-expand.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2013-2020 Free Software Foundation, Inc. +# Copyright (C) 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/realname-expand-real.c gdb-10.2/gdb/testsuite/gdb.base/realname-expand-real.c --- gdb-9.1/gdb/testsuite/gdb.base/realname-expand-real.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/realname-expand-real.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/recpar.c gdb-10.2/gdb/testsuite/gdb.base/recpar.c --- gdb-9.1/gdb/testsuite/gdb.base/recpar.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/recpar.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/recpar.exp gdb-10.2/gdb/testsuite/gdb.base/recpar.exp --- gdb-9.1/gdb/testsuite/gdb.base/recpar.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/recpar.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2012-2020 Free Software Foundation, Inc. +# Copyright (C) 2012-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/recurse.exp gdb-10.2/gdb/testsuite/gdb.base/recurse.exp --- gdb-9.1/gdb/testsuite/gdb.base/recurse.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/recurse.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1992-2020 Free Software Foundation, Inc. +# Copyright 1992-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/reggroups.c gdb-10.2/gdb/testsuite/gdb.base/reggroups.c --- gdb-9.1/gdb/testsuite/gdb.base/reggroups.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/reggroups.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/reggroups.exp gdb-10.2/gdb/testsuite/gdb.base/reggroups.exp --- gdb-9.1/gdb/testsuite/gdb.base/reggroups.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/reggroups.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2017-2020 Free Software Foundation, Inc. +# Copyright 2017-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/relational.exp gdb-10.2/gdb/testsuite/gdb.base/relational.exp --- gdb-9.1/gdb/testsuite/gdb.base/relational.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/relational.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1998-2020 Free Software Foundation, Inc. +# Copyright 1998-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/relativedebug.c gdb-10.2/gdb/testsuite/gdb.base/relativedebug.c --- gdb-9.1/gdb/testsuite/gdb.base/relativedebug.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/relativedebug.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2007-2020 Free Software Foundation, Inc. + Copyright 2007-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/relativedebug.exp gdb-10.2/gdb/testsuite/gdb.base/relativedebug.exp --- gdb-9.1/gdb/testsuite/gdb.base/relativedebug.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/relativedebug.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2007-2020 Free Software Foundation, Inc. +# Copyright 2007-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/relocate.c gdb-10.2/gdb/testsuite/gdb.base/relocate.c --- gdb-9.1/gdb/testsuite/gdb.base/relocate.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/relocate.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/relocate.exp gdb-10.2/gdb/testsuite/gdb.base/relocate.exp --- gdb-9.1/gdb/testsuite/gdb.base/relocate.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/relocate.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2002-2020 Free Software Foundation, Inc. +# Copyright 2002-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -152,9 +152,11 @@ "add symbol table from file \".*${testfile}\\.o\" at\[ \t\r\n\]+\.text_addr = 0x0\[\r\n\]+\\(y or n\\) " \ "y" -# Print the addresses of static variables. -set static_foo_addr [get_var_address static_foo] -set static_bar_addr [get_var_address static_bar] +with_test_prefix "print addresses, static vars" { + # Print the addresses of static variables. + set static_foo_addr [get_var_address static_foo] + set static_bar_addr [get_var_address static_bar] +} # Make sure they have different addresses. if { "${static_foo_addr}" == "${static_bar_addr}" } { @@ -163,9 +165,11 @@ pass "static variables have different addresses" } -# Print the addresses of global variables. -set global_foo_addr [get_var_address global_foo] -set global_bar_addr [get_var_address global_bar] +with_test_prefix "print addresses, global vars" { + # Print the addresses of global variables. + set global_foo_addr [get_var_address global_foo] + set global_bar_addr [get_var_address global_bar] +} # Make sure they have different addresses. if { "${global_foo_addr}" == "${global_bar_addr}" } { @@ -174,9 +178,11 @@ pass "global variables have different addresses" } -# Print the addresses of functions. -set function_foo_addr [get_var_address function_foo] -set function_bar_addr [get_var_address function_bar] +with_test_prefix "print addresses, functions" { + # Print the addresses of functions. + set function_foo_addr [get_var_address function_foo] + set function_bar_addr [get_var_address function_bar] +} # Make sure they have different addresses. if { "${function_foo_addr}" == "${function_bar_addr}" } { @@ -220,20 +226,26 @@ "Reading symbols from ${binfile}\.\.\." \ "symbol-file with offset" -# Make sure the address of a static variable is moved by offset. -set new_static_foo_addr [get_var_address static_foo] -gdb_assert {${new_static_foo_addr} == ${static_foo_addr} + $offset} \ - "static variable foo is moved by offset" - -# Make sure the address of a global variable is moved by offset. -set new_global_foo_addr [get_var_address global_foo] -gdb_assert {${new_global_foo_addr} == ${global_foo_addr} + $offset} \ - "global variable foo is moved by offset" - -# Make sure the address of a function is moved by offset. -set new_function_foo_addr [get_var_address function_foo] -gdb_assert {${new_function_foo_addr} == ${function_foo_addr} + $offset} \ - "function foo is moved by offset" +with_test_prefix "static vars" { + # Make sure the address of a static variable is moved by offset. + set new_static_foo_addr [get_var_address static_foo] + gdb_assert {${new_static_foo_addr} == ${static_foo_addr} + $offset} \ + "static variable foo is moved by offset" +} + +with_test_prefix "global vars" { + # Make sure the address of a global variable is moved by offset. + set new_global_foo_addr [get_var_address global_foo] + gdb_assert {${new_global_foo_addr} == ${global_foo_addr} + $offset} \ + "global variable foo is moved by offset" +} + +with_test_prefix "functions" { + # Make sure the address of a function is moved by offset. + set new_function_foo_addr [get_var_address function_foo] + gdb_assert {${new_function_foo_addr} == ${function_foo_addr} + $offset} \ + "function foo is moved by offset" +} # Load the object using add-symbol-file with an offset and check that # all addresses are moved by that offset. @@ -246,20 +258,26 @@ "add symbol table from file \".*${testfile}\\.o\" with all sections offset by $offset\[\r\n\]+\\(y or n\\) " \ "y" -# Make sure the address of a static variable is moved by offset. -set new_static_foo_addr [get_var_address static_foo] -gdb_assert { ${new_static_foo_addr} == ${static_foo_addr} + $offset } \ - "static variable foo is moved by offset" - -# Make sure the address of a global variable is moved by offset. -set new_global_foo_addr [get_var_address global_foo] -gdb_assert { ${new_global_foo_addr} == ${global_foo_addr} + $offset } \ - "global variable foo is moved by offset" - -# Make sure the address of a function is moved by offset. -set new_function_foo_addr [get_var_address function_foo] -gdb_assert { ${new_function_foo_addr} == ${function_foo_addr} + $offset } \ - "function foo is moved by offset" +with_test_prefix "static scope, 2nd" { + # Make sure the address of a static variable is moved by offset. + set new_static_foo_addr [get_var_address static_foo] + gdb_assert { ${new_static_foo_addr} == ${static_foo_addr} + $offset } \ + "static variable foo is moved by offset" +} + +with_test_prefix "global vars, 2nd" { + # Make sure the address of a global variable is moved by offset. + set new_global_foo_addr [get_var_address global_foo] + gdb_assert { ${new_global_foo_addr} == ${global_foo_addr} + $offset } \ + "global variable foo is moved by offset" +} + +with_test_prefix "functions, 2nd" { + # Make sure the address of a function is moved by offset. + set new_function_foo_addr [get_var_address function_foo] + gdb_assert { ${new_function_foo_addr} == ${function_foo_addr} + $offset } \ + "function foo is moved by offset" +} # Re-load the object giving an explicit address for .text @@ -271,10 +289,12 @@ "add symbol table from file \".*${testfile}\\.o\" at\[ \t\r\n\]+\.text_addr = ${text}\[\r\n\]+with other sections offset by ${offset}\[\r\n\]+\\(y or n\\) " \ "y" -# Make sure function has a different addresses now. -set function_foo_addr [get_var_address function_foo] -gdb_assert { ${function_foo_addr} != ${new_function_foo_addr} } \ - "function foo has a different address" +with_test_prefix "functions, 3rd" { + # Make sure function has a different addresses now. + set function_foo_addr [get_var_address function_foo] + gdb_assert { ${function_foo_addr} != ${new_function_foo_addr} } \ + "function foo has a different address" +} # Re-load the object giving an explicit address for .data @@ -286,10 +306,12 @@ "add symbol table from file \".*${testfile}\\.o\" at\[ \t\r\n\]+\.data_addr = ${data}\[\r\n\]+with other sections offset by ${offset}\[\r\n\]+\\(y or n\\) " \ "y" -# Make sure variable has a different addresses now. -set global_foo_addr [get_var_address global_foo] -gdb_assert { ${global_foo_addr} != ${new_global_foo_addr} } \ - "global variable foo has a different address" +with_test_prefix "global vars, 3rd" { + # Make sure variable has a different addresses now. + set global_foo_addr [get_var_address global_foo] + gdb_assert { ${global_foo_addr} != ${new_global_foo_addr} } \ + "global variable foo has a different address" +} # Now try loading the object as an exec-file; we should be able to print # the values of variables after we do this. diff -Nru gdb-9.1/gdb/testsuite/gdb.base/remote-exec-file.exp gdb-10.2/gdb/testsuite/gdb.base/remote-exec-file.exp --- gdb-9.1/gdb/testsuite/gdb.base/remote-exec-file.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/remote-exec-file.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,46 @@ +# Copyright 2019-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Check that "show remote exec-file" displays each inferior's +# exec-file. Regression test for a bug where "show remote exec-file" +# would show the last exec-file set, irrespective of the current +# inferior. + +clean_restart + +# Set remote exec-file in inferior 1. +with_test_prefix "set inf 1" { + gdb_test_no_output "set remote exec-file prog1" +} + +# Set remote exec-file in inferior 2. +with_test_prefix "set inf 2" { + gdb_test "add-inferior" "Added inferior 2.*" "add inferior 2" + gdb_test "inferior 2" "Switching to inferior 2.*" + gdb_test_no_output "set remote exec-file prog2" +} + +# Check that "show remote exec-file" diplays each inferior's +# exec-file. + +with_test_prefix "show inf 1" { + gdb_test "inferior 1" "Switching to inferior 1.*" + gdb_test "show remote exec-file" "prog1" +} + +with_test_prefix "show inf 2" { + gdb_test "inferior 2" "Switching to inferior 2.*" + gdb_test "show remote exec-file" "prog2" +} diff -Nru gdb-9.1/gdb/testsuite/gdb.base/remote.exp gdb-10.2/gdb/testsuite/gdb.base/remote.exp --- gdb-9.1/gdb/testsuite/gdb.base/remote.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/remote.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1999-2020 Free Software Foundation, Inc. +# Copyright 1999-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/remotetimeout.exp gdb-10.2/gdb/testsuite/gdb.base/remotetimeout.exp --- gdb-9.1/gdb/testsuite/gdb.base/remotetimeout.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/remotetimeout.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2004-2020 Free Software Foundation, Inc. +# Copyright 2004-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/reread.exp gdb-10.2/gdb/testsuite/gdb.base/reread.exp --- gdb-9.1/gdb/testsuite/gdb.base/reread.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/reread.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1998-2020 Free Software Foundation, Inc. +# Copyright 1998-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -13,8 +13,6 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. -set prototypes 1 - # Build programs in PIE mode, to reproduce PR 21555. foreach_with_prefix opts { { "" "" } diff -Nru gdb-9.1/gdb/testsuite/gdb.base/reread-readsym.c gdb-10.2/gdb/testsuite/gdb.base/reread-readsym.c --- gdb-9.1/gdb/testsuite/gdb.base/reread-readsym.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/reread-readsym.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2017-2020 Free Software Foundation, Inc. + Copyright 2017-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/reread-readsym.exp gdb-10.2/gdb/testsuite/gdb.base/reread-readsym.exp --- gdb-9.1/gdb/testsuite/gdb.base/reread-readsym.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/reread-readsym.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2017-2020 Free Software Foundation, Inc. +# Copyright 2017-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/restore.c gdb-10.2/gdb/testsuite/gdb.base/restore.c --- gdb-9.1/gdb/testsuite/gdb.base/restore.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/restore.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 1998-2020 Free Software Foundation, Inc. + Copyright 1998-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/restore.exp gdb-10.2/gdb/testsuite/gdb.base/restore.exp --- gdb-9.1/gdb/testsuite/gdb.base/restore.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/restore.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 1998-2020 Free Software Foundation, Inc. +# Copyright 1998-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/return2.exp gdb-10.2/gdb/testsuite/gdb.base/return2.exp --- gdb-9.1/gdb/testsuite/gdb.base/return2.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/return2.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2000-2020 Free Software Foundation, Inc. +# Copyright 2000-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -50,7 +50,7 @@ gdb_test "print ${type}_resultval == testval.${type}_testval" ".* = 1" \ "${type} value returned successfully" gdb_test "print ${type}_resultval != ${type}_returnval" ".* = 1" \ - "validate result value not equal to program return value" + "validate result value not equal to program return value, ${type}" } proc return_void { } { diff -Nru gdb-9.1/gdb/testsuite/gdb.base/return.c gdb-10.2/gdb/testsuite/gdb.base/return.c --- gdb-9.1/gdb/testsuite/gdb.base/return.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/return.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 1992-2020 Free Software Foundation, Inc. + Copyright 1992-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/return.exp gdb-10.2/gdb/testsuite/gdb.base/return.exp --- gdb-9.1/gdb/testsuite/gdb.base/return.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/return.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 1992-2020 Free Software Foundation, Inc. +# Copyright (C) 1992-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/return-nodebug1.c gdb-10.2/gdb/testsuite/gdb.base/return-nodebug1.c --- gdb-9.1/gdb/testsuite/gdb.base/return-nodebug1.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/return-nodebug1.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2009-2020 Free Software Foundation, Inc. + Copyright 2009-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/return-nodebug.c gdb-10.2/gdb/testsuite/gdb.base/return-nodebug.c --- gdb-9.1/gdb/testsuite/gdb.base/return-nodebug.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/return-nodebug.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2009-2020 Free Software Foundation, Inc. + Copyright 2009-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/return-nodebug.exp gdb-10.2/gdb/testsuite/gdb.base/return-nodebug.exp --- gdb-9.1/gdb/testsuite/gdb.base/return-nodebug.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/return-nodebug.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2009-2020 Free Software Foundation, Inc. +# Copyright (C) 2009-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/run-after-attach.c gdb-10.2/gdb/testsuite/gdb.base/run-after-attach.c --- gdb-9.1/gdb/testsuite/gdb.base/run-after-attach.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/run-after-attach.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/run-after-attach.exp gdb-10.2/gdb/testsuite/gdb.base/run-after-attach.exp --- gdb-9.1/gdb/testsuite/gdb.base/run-after-attach.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/run-after-attach.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020 Free Software Foundation, Inc. +# Copyright (C) 2015-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/save-bp.c gdb-10.2/gdb/testsuite/gdb.base/save-bp.c --- gdb-9.1/gdb/testsuite/gdb.base/save-bp.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/save-bp.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2011-2020 Free Software Foundation, Inc. +/* Copyright 2011-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.base/save-bp.exp gdb-10.2/gdb/testsuite/gdb.base/save-bp.exp --- gdb-9.1/gdb/testsuite/gdb.base/save-bp.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/save-bp.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2011-2020 Free Software Foundation, Inc. +# Copyright (C) 2011-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/savedregs.c gdb-10.2/gdb/testsuite/gdb.base/savedregs.c --- gdb-9.1/gdb/testsuite/gdb.base/savedregs.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/savedregs.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2004-2020 Free Software Foundation, Inc. + Copyright 2004-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -33,7 +33,7 @@ extern int caller (int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8) { - return callee (a1 << a2 * a3 / a4 + a6 & a6 % a7 - a8) + done; + return callee ((a1 << a2 * a3 / a4) + a6 & a6 % a7 - a8) + done; } static void @@ -46,7 +46,7 @@ thrower (void) { /* Trigger a SIGSEGV. */ - *(char *)0 = 0; + *(volatile char *)0 = 0; /* On MMU-less system, previous memory access to address zero doesn't trigger a SIGSEGV. Trigger a SIGILL. Each arch should define its diff -Nru gdb-9.1/gdb/testsuite/gdb.base/savedregs.exp gdb-10.2/gdb/testsuite/gdb.base/savedregs.exp --- gdb-9.1/gdb/testsuite/gdb.base/savedregs.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/savedregs.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2004-2020 Free Software Foundation, Inc. +# Copyright 2004-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/scope.exp gdb-10.2/gdb/testsuite/gdb.base/scope.exp --- gdb-9.1/gdb/testsuite/gdb.base/scope.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/scope.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1992-2020 Free Software Foundation, Inc. +# Copyright 1992-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/sect-cmd.exp gdb-10.2/gdb/testsuite/gdb.base/sect-cmd.exp --- gdb-9.1/gdb/testsuite/gdb.base/sect-cmd.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/sect-cmd.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1997-2020 Free Software Foundation, Inc. +# Copyright 1997-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/segv.c gdb-10.2/gdb/testsuite/gdb.base/segv.c --- gdb-9.1/gdb/testsuite/gdb.base/segv.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/segv.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/sep.c gdb-10.2/gdb/testsuite/gdb.base/sep.c --- gdb-9.1/gdb/testsuite/gdb.base/sep.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/sep.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This file is part of GDB, the GNU debugger. - Copyright 2004-2020 Free Software Foundation, Inc. + Copyright 2004-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/sepdebug2.c gdb-10.2/gdb/testsuite/gdb.base/sepdebug2.c --- gdb-9.1/gdb/testsuite/gdb.base/sepdebug2.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/sepdebug2.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2009-2020 Free Software Foundation, Inc. + Copyright 2009-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/sepdebug.c gdb-10.2/gdb/testsuite/gdb.base/sepdebug.c --- gdb-9.1/gdb/testsuite/gdb.base/sepdebug.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/sepdebug.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 1994-2020 Free Software Foundation, Inc. +/* Copyright 1994-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/sepdebug.exp gdb-10.2/gdb/testsuite/gdb.base/sepdebug.exp --- gdb-9.1/gdb/testsuite/gdb.base/sepdebug.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/sepdebug.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1988-2020 Free Software Foundation, Inc. +# Copyright 1988-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -280,9 +280,6 @@ # if ![runto_main] then { fail "sepdebug tests suppressed" } -gdb_test "catch" "Catch requires an event name.*" \ - "catch requires an event name" - gdb_test "catch fork" "Catchpoint \[0-9\]+ \\(fork\\)" \ "set catch fork, never expected to trigger" diff -Nru gdb-9.1/gdb/testsuite/gdb.base/sep.exp gdb-10.2/gdb/testsuite/gdb.base/sep.exp --- gdb-9.1/gdb/testsuite/gdb.base/sep.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/sep.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2004-2020 Free Software Foundation, Inc. +# Copyright 2004-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/sep-proc.c gdb-10.2/gdb/testsuite/gdb.base/sep-proc.c --- gdb-9.1/gdb/testsuite/gdb.base/sep-proc.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/sep-proc.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This file is part of GDB, the GNU debugger. - Copyright 2004-2020 Free Software Foundation, Inc. + Copyright 2004-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/sepsymtab.c gdb-10.2/gdb/testsuite/gdb.base/sepsymtab.c --- gdb-9.1/gdb/testsuite/gdb.base/sepsymtab.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/sepsymtab.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2006-2020 Free Software Foundation, Inc. +/* Copyright 2006-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/sepsymtab.exp gdb-10.2/gdb/testsuite/gdb.base/sepsymtab.exp --- gdb-9.1/gdb/testsuite/gdb.base/sepsymtab.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/sepsymtab.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2006-2020 Free Software Foundation, Inc. +# Copyright 2006-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/server-del-break.c gdb-10.2/gdb/testsuite/gdb.base/server-del-break.c --- gdb-9.1/gdb/testsuite/gdb.base/server-del-break.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/server-del-break.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2017-2020 Free Software Foundation, Inc. + Copyright 2017-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/server-del-break.exp gdb-10.2/gdb/testsuite/gdb.base/server-del-break.exp --- gdb-9.1/gdb/testsuite/gdb.base/server-del-break.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/server-del-break.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2017-2020 Free Software Foundation, Inc. +# Copyright 2017-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/set-cwd.c gdb-10.2/gdb/testsuite/gdb.base/set-cwd.c --- gdb-9.1/gdb/testsuite/gdb.base/set-cwd.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/set-cwd.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2017-2020 Free Software Foundation, Inc. + Copyright 2017-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/set-cwd.exp gdb-10.2/gdb/testsuite/gdb.base/set-cwd.exp --- gdb-9.1/gdb/testsuite/gdb.base/set-cwd.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/set-cwd.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2017-2020 Free Software Foundation, Inc. +# Copyright 2017-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/set-inferior-tty.c gdb-10.2/gdb/testsuite/gdb.base/set-inferior-tty.c --- gdb-9.1/gdb/testsuite/gdb.base/set-inferior-tty.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/set-inferior-tty.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2016-2020 Free Software Foundation, Inc. + Copyright 2016-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/set-inferior-tty.exp gdb-10.2/gdb/testsuite/gdb.base/set-inferior-tty.exp --- gdb-9.1/gdb/testsuite/gdb.base/set-inferior-tty.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/set-inferior-tty.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2016-2020 Free Software Foundation, Inc. +# Copyright 2016-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/set-lang-auto.exp gdb-10.2/gdb/testsuite/gdb.base/set-lang-auto.exp --- gdb-9.1/gdb/testsuite/gdb.base/set-lang-auto.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/set-lang-auto.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/set-noassign.exp gdb-10.2/gdb/testsuite/gdb.base/set-noassign.exp --- gdb-9.1/gdb/testsuite/gdb.base/set-noassign.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/set-noassign.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/setshow.exp gdb-10.2/gdb/testsuite/gdb.base/setshow.exp --- gdb-9.1/gdb/testsuite/gdb.base/setshow.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/setshow.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1992-2020 Free Software Foundation, Inc. +# Copyright 1992-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/settings.c gdb-10.2/gdb/testsuite/gdb.base/settings.c --- gdb-9.1/gdb/testsuite/gdb.base/settings.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/settings.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2019-2020 Free Software Foundation, Inc. + Copyright 2019-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/settings.exp gdb-10.2/gdb/testsuite/gdb.base/settings.exp --- gdb-9.1/gdb/testsuite/gdb.base/settings.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/settings.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/setvar.exp gdb-10.2/gdb/testsuite/gdb.base/setvar.exp --- gdb-9.1/gdb/testsuite/gdb.base/setvar.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/setvar.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 1988-2020 Free Software Foundation, Inc. +# Copyright 1988-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/share-env-with-gdbserver.c gdb-10.2/gdb/testsuite/gdb.base/share-env-with-gdbserver.c --- gdb-9.1/gdb/testsuite/gdb.base/share-env-with-gdbserver.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/share-env-with-gdbserver.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2017-2020 Free Software Foundation, Inc. + Copyright 2017-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/share-env-with-gdbserver.exp gdb-10.2/gdb/testsuite/gdb.base/share-env-with-gdbserver.exp --- gdb-9.1/gdb/testsuite/gdb.base/share-env-with-gdbserver.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/share-env-with-gdbserver.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2017-2020 Free Software Foundation, Inc. +# Copyright 2017-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/share-psymtabs-bt-2.c gdb-10.2/gdb/testsuite/gdb.base/share-psymtabs-bt-2.c --- gdb-9.1/gdb/testsuite/gdb.base/share-psymtabs-bt-2.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/share-psymtabs-bt-2.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,24 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +void bar (int x); + +void +foo (int x) +{ + bar (x); +} diff -Nru gdb-9.1/gdb/testsuite/gdb.base/share-psymtabs-bt.c gdb-10.2/gdb/testsuite/gdb.base/share-psymtabs-bt.c --- gdb-9.1/gdb/testsuite/gdb.base/share-psymtabs-bt.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/share-psymtabs-bt.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,29 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +void +bar (int x) +{} + +void foo (int x); + +int +main (void) +{ + foo (12345); + return 0; +} diff -Nru gdb-9.1/gdb/testsuite/gdb.base/share-psymtabs-bt.exp gdb-10.2/gdb/testsuite/gdb.base/share-psymtabs-bt.exp --- gdb-9.1/gdb/testsuite/gdb.base/share-psymtabs-bt.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/share-psymtabs-bt.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,51 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Test that a backtrace is shown correctly for an objfile that uses partial +# symtabs created by another objfile sharing the same BFD. +# +# It mimics how a bug with psymtab sharing was initially found: +# +# 1. Load the test file twice, such that the second objfile re-uses the +# per_bfd object created for the first objfile. +# 2. Run to some point where in the backtrace there is a frame for a +# function that's in a CU that's not yet read in. +# 3. Check that this frame's information is complete in the "backtrace" +# output. + +standard_testfile .c share-psymtabs-bt-2.c + +if { [prepare_for_testing "failed to prepare" $testfile "$srcfile $srcfile2" \ + {debug}] } { + untested "failed to compile" + return -1 +} + +# Load $binfile a second time. The second created objfile will re-use the +# partial symtabs created by the first one. +if { [gdb_file_cmd $binfile] != 0 } { + fail "file command failed" + return -1 +} + +gdb_breakpoint "bar" +if { ![runto "bar"] } { + fail "failed to run to bar" + return -1 +} + +# A buggy GDB would fail to find the full symbol associated to this frame's +# address, so would just show "foo ()" (from the minimal symbol). +gdb_test "bt" "foo \\(x=12345\\).*" diff -Nru gdb-9.1/gdb/testsuite/gdb.base/shell.exp gdb-10.2/gdb/testsuite/gdb.base/shell.exp --- gdb-9.1/gdb/testsuite/gdb.base/shell.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/shell.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -34,9 +34,12 @@ gdb_test "p \$_shell_exitcode" " = 1" "shell fail exitcode" gdb_test "p \$_shell_exitsignal" " = void" "shell fail exitsignal" -gdb_test_no_output "! kill -2 $$" -gdb_test "p \$_shell_exitcode" " = void" "shell interrupt exitcode" -gdb_test "p \$_shell_exitsignal" " = 2" "shell interrupt exitsignal" +# This test will not work when the shell is CMD.EXE. +if { ! [ishost *-*-mingw*] } { + gdb_test_no_output "! kill -2 $$" + gdb_test "p \$_shell_exitcode" " = void" "shell interrupt exitcode" + gdb_test "p \$_shell_exitsignal" " = 2" "shell interrupt exitsignal" +} # Define the user command "foo", used to test "pipe" command. gdb_test_multiple "define foo" "define foo" { @@ -67,16 +70,16 @@ gdb_test "echo coucou\\n" "coucou" "echo coucou" gdb_test "||wc -l" "1" "repeat previous command" -gdb_test "| -d ! echo this contains a | character\\n ! sed -e 's/|/PIPE/'" \ +gdb_test "| -d ! echo this contains a | character\\n ! sed -e \"s/|/PIPE/\"" \ "this contains a PIPE character" "alternate 1char delim" -gdb_test "|-d ! echo this contains a | character\\n!sed -e 's/|/PIPE/'" \ +gdb_test "|-d ! echo this contains a | character\\n!sed -e \"s/|/PIPE/\"" \ "this contains a PIPE character" "alternate 1char delim, no space" -gdb_test "| -d !!! echo this contains a | character\\n !!! sed -e 's/|/PIPE/'" \ +gdb_test "| -d !!! echo this contains a | character\\n !!! sed -e \"s/|/PIPE/\"" \ "this contains a PIPE character" "alternate 3char delim" -gdb_test "|-d !!! echo this contains a | character\\n!!!sed -e 's/|/PIPE/'" \ +gdb_test "|-d !!! echo this contains a | character\\n!!!sed -e \"s/|/PIPE/\"" \ "this contains a PIPE character" "alternate 3char delim, no space" # Convenience variables with pipe command. @@ -88,9 +91,12 @@ gdb_test "p \$_shell_exitcode" " = 1" "pipe fail exitcode" gdb_test "p \$_shell_exitsignal" " = void" "pipe fail exitsignal" -gdb_test "|p 123| kill -2 $$" "" -gdb_test "p \$_shell_exitcode" " = void" "pipe interrupt exitcode" -gdb_test "p \$_shell_exitsignal" " = 2" "pipe interrupt exitsignal" +# This test will not work when the shell is CMD.EXE. +if { ! [ishost *-*-mingw*] } { + gdb_test "|p 123| kill -2 $$" "" + gdb_test "p \$_shell_exitcode" " = void" "pipe interrupt exitcode" + gdb_test "p \$_shell_exitsignal" " = 2" "pipe interrupt exitsignal" +} # Error handling verifications. gdb_test "|" "Missing COMMAND" "all missing" diff -Nru gdb-9.1/gdb/testsuite/gdb.base/shlib-call.exp gdb-10.2/gdb/testsuite/gdb.base/shlib-call.exp --- gdb-9.1/gdb/testsuite/gdb.base/shlib-call.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/shlib-call.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1997-2020 Free Software Foundation, Inc. +# Copyright 1997-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -142,9 +142,14 @@ } -re ".*\\\}.*$gdb_prompt $" { pass "step out of shr2 to main (stopped in shr2 epilogue)" - gdb_test "step" \ - "main \\(\\) at.*g = mainshr1\\(g\\);" \ - "step out of shr2 epilogue to main" + gdb_test_multiple "step" "step out of shr2 epilogue to main" { + -re -wrap "main \\(\\) at.*g = mainshr1\\(g\\);" { + pass $gdb_test_name + } + -re -wrap "main \\(\\) at.*g = shr2\\(g\\);" { + gdb_test "step" "g = mainshr1\\(g\\);" $gdb_test_name + } + } } } diff -Nru gdb-9.1/gdb/testsuite/gdb.base/shreloc.exp gdb-10.2/gdb/testsuite/gdb.base/shreloc.exp --- gdb-9.1/gdb/testsuite/gdb.base/shreloc.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/shreloc.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2003-2020 Free Software Foundation, Inc. +# Copyright (C) 2003-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/sigall.exp gdb-10.2/gdb/testsuite/gdb.base/sigall.exp --- gdb-9.1/gdb/testsuite/gdb.base/sigall.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/sigall.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1995-2020 Free Software Foundation, Inc. +# Copyright 1995-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/sigaltstack.c gdb-10.2/gdb/testsuite/gdb.base/sigaltstack.c --- gdb-9.1/gdb/testsuite/gdb.base/sigaltstack.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/sigaltstack.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2004-2020 Free Software Foundation, Inc. + Copyright 2004-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -68,6 +68,8 @@ case INNER: level = LEAF; return; + default: + abort (); } } diff -Nru gdb-9.1/gdb/testsuite/gdb.base/sigaltstack.exp gdb-10.2/gdb/testsuite/gdb.base/sigaltstack.exp --- gdb-9.1/gdb/testsuite/gdb.base/sigaltstack.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/sigaltstack.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2004-2020 Free Software Foundation, Inc. +# Copyright 2004-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/sigbpt.c gdb-10.2/gdb/testsuite/gdb.base/sigbpt.c --- gdb-9.1/gdb/testsuite/gdb.base/sigbpt.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/sigbpt.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2004-2020 Free Software Foundation, Inc. + Copyright 2004-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/sigbpt.exp gdb-10.2/gdb/testsuite/gdb.base/sigbpt.exp --- gdb-9.1/gdb/testsuite/gdb.base/sigbpt.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/sigbpt.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2004-2020 Free Software Foundation, Inc. +# Copyright 2004-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -138,7 +138,9 @@ # disable SIGSEGV, ensuring that further signals stop the # inferior. Stops a SIGSEGV infinite loop when a broke system # keeps re-executing the faulting instruction. - rerun_to_main + with_test_prefix $name { + rerun_to_main + } gdb_test "handle ${signame} nostop print pass" ".*" "${name}; pass ${signame}" gdb_test "continue" "keeper.*" "${name}; continue to keeper" gdb_test "handle ${signame} stop print nopass" ".*" "${name}; nopass ${signame}" @@ -212,7 +214,9 @@ # disable SIGSEGV, ensuring that further signals stop the # inferior. Stops a SIGSEGV infinite loop when a broke system # keeps re-executing the faulting instruction. - rerun_to_main + with_test_prefix $name { + rerun_to_main + } gdb_test "handle ${signame} nostop print pass" ".*" "${name}; pass ${signame}" gdb_test "continue" "keeper.*" "${name}; continue to keeper" gdb_test "handle ${signame} stop print nopass" ".*" "${name}; nopass ${signame}" diff -Nru gdb-9.1/gdb/testsuite/gdb.base/sigchld.c gdb-10.2/gdb/testsuite/gdb.base/sigchld.c --- gdb-9.1/gdb/testsuite/gdb.base/sigchld.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/sigchld.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2008-2020 Free Software Foundation, Inc. + Copyright 2008-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/sigchld.exp gdb-10.2/gdb/testsuite/gdb.base/sigchld.exp --- gdb-9.1/gdb/testsuite/gdb.base/sigchld.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/sigchld.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2008-2020 Free Software Foundation, Inc. +# Copyright (C) 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/siginfo-addr.c gdb-10.2/gdb/testsuite/gdb.base/siginfo-addr.c --- gdb-9.1/gdb/testsuite/gdb.base/siginfo-addr.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/siginfo-addr.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2004-2020 Free Software Foundation, Inc. + Copyright 2004-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/siginfo-addr.exp gdb-10.2/gdb/testsuite/gdb.base/siginfo-addr.exp --- gdb-9.1/gdb/testsuite/gdb.base/siginfo-addr.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/siginfo-addr.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2004-2020 Free Software Foundation, Inc. +# Copyright 2004-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/siginfo.c gdb-10.2/gdb/testsuite/gdb.base/siginfo.c --- gdb-9.1/gdb/testsuite/gdb.base/siginfo.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/siginfo.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2004-2020 Free Software Foundation, Inc. + Copyright 2004-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/siginfo.exp gdb-10.2/gdb/testsuite/gdb.base/siginfo.exp --- gdb-9.1/gdb/testsuite/gdb.base/siginfo.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/siginfo.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2004-2020 Free Software Foundation, Inc. +# Copyright 2004-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/siginfo-infcall.c gdb-10.2/gdb/testsuite/gdb.base/siginfo-infcall.c --- gdb-9.1/gdb/testsuite/gdb.base/siginfo-infcall.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/siginfo-infcall.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/siginfo-infcall.exp gdb-10.2/gdb/testsuite/gdb.base/siginfo-infcall.exp --- gdb-9.1/gdb/testsuite/gdb.base/siginfo-infcall.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/siginfo-infcall.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/siginfo-obj.c gdb-10.2/gdb/testsuite/gdb.base/siginfo-obj.c --- gdb-9.1/gdb/testsuite/gdb.base/siginfo-obj.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/siginfo-obj.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2004-2020 Free Software Foundation, Inc. + Copyright 2004-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/siginfo-obj.exp gdb-10.2/gdb/testsuite/gdb.base/siginfo-obj.exp --- gdb-9.1/gdb/testsuite/gdb.base/siginfo-obj.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/siginfo-obj.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2004-2020 Free Software Foundation, Inc. +# Copyright 2004-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -45,7 +45,8 @@ } # Run to the signal. -gdb_test "continue" ".*Program received signal SIGSEGV.*" "continue to signal" +gdb_test "continue" ".*Program received signal SIGSEGV.*" \ + "continue to signal, 1st" # Try to generate a core file, for a later test. set gcorefile [standard_output_file $testfile.gcore] @@ -86,13 +87,14 @@ set bp_location [gdb_get_line_number "set breakpoint here"] -gdb_test "break $bp_location" -gdb_test "continue" ".* handler .*" "continue to handler" - -gdb_test "p ssi_addr" " = \\(void \\*\\) $ssi_addr" -gdb_test "p ssi_errno" " = $ssi_errno" -gdb_test "p ssi_code" " = $ssi_code" -gdb_test "p ssi_signo" " = $ssi_signo" +with_test_prefix "validate siginfo fields" { + gdb_test "break $bp_location" + gdb_test "continue" ".* handler .*" "continue to handler" + gdb_test "p ssi_addr" " = \\(void \\*\\) $ssi_addr" + gdb_test "p ssi_errno" " = $ssi_errno" + gdb_test "p ssi_code" " = $ssi_code" + gdb_test "p ssi_signo" " = $ssi_signo" +} # Again, but this time, patch si_addr and check that the inferior sees # the changed value. @@ -104,7 +106,8 @@ } # Run to the signal. -gdb_test "continue" ".*Program received signal SIGSEGV.*" "continue to signal" +gdb_test "continue" ".*Program received signal SIGSEGV.*" \ + "continue to signal, 2nd" set test "set si_addr" gdb_test "p \$_siginfo._sifields._sigfault.si_addr = 0x666" " = \\(void \\*\\) 0x666" @@ -112,13 +115,14 @@ gdb_test "p \$_siginfo.si_code = 999" " = 999" gdb_test "p \$_siginfo.si_signo = 11" " = 11" -gdb_test "break $bp_location" -gdb_test "continue" ".* handler .*" "continue to handler" - -gdb_test "p ssi_addr" " = \\(void \\*\\) 0x666" -gdb_test "p ssi_errno" " = 666" -gdb_test "p ssi_code" " = 999" -gdb_test "p ssi_signo" " = 11" +with_test_prefix "validate modified siginfo fields" { + gdb_test "break $bp_location" + gdb_test "continue" ".* handler .*" "continue to handler" + gdb_test "p ssi_addr" " = \\(void \\*\\) 0x666" + gdb_test "p ssi_errno" " = 666" + gdb_test "p ssi_code" " = 999" + gdb_test "p ssi_signo" " = 11" +} # Test siginfo preservation in core files. if {$gcore_created} { diff -Nru gdb-9.1/gdb/testsuite/gdb.base/siginfo-thread.c gdb-10.2/gdb/testsuite/gdb.base/siginfo-thread.c --- gdb-9.1/gdb/testsuite/gdb.base/siginfo-thread.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/siginfo-thread.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2004-2020 Free Software Foundation, Inc. + Copyright 2004-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/siginfo-thread.exp gdb-10.2/gdb/testsuite/gdb.base/siginfo-thread.exp --- gdb-9.1/gdb/testsuite/gdb.base/siginfo-thread.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/siginfo-thread.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2004-2020 Free Software Foundation, Inc. +# Copyright 2004-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/signals.exp gdb-10.2/gdb/testsuite/gdb.base/signals.exp --- gdb-9.1/gdb/testsuite/gdb.base/signals.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/signals.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1997-2020 Free Software Foundation, Inc. +# Copyright 1997-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/signals-state-child.c gdb-10.2/gdb/testsuite/gdb.base/signals-state-child.c --- gdb-9.1/gdb/testsuite/gdb.base/signals-state-child.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/signals-state-child.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2016-2020 Free Software Foundation, Inc. +/* Copyright 2016-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.base/signals-state-child.exp gdb-10.2/gdb/testsuite/gdb.base/signals-state-child.exp --- gdb-9.1/gdb/testsuite/gdb.base/signals-state-child.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/signals-state-child.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2016-2020 Free Software Foundation, Inc. +# Copyright 2016-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/signest.c gdb-10.2/gdb/testsuite/gdb.base/signest.c --- gdb-9.1/gdb/testsuite/gdb.base/signest.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/signest.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/signest.exp gdb-10.2/gdb/testsuite/gdb.base/signest.exp --- gdb-9.1/gdb/testsuite/gdb.base/signest.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/signest.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/signull.c gdb-10.2/gdb/testsuite/gdb.base/signull.c --- gdb-9.1/gdb/testsuite/gdb.base/signull.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/signull.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 1996-2020 Free Software Foundation, Inc. + Copyright 1996-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/signull.exp gdb-10.2/gdb/testsuite/gdb.base/signull.exp --- gdb-9.1/gdb/testsuite/gdb.base/signull.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/signull.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2004-2020 Free Software Foundation, Inc. +# Copyright 2004-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/sigrepeat.c gdb-10.2/gdb/testsuite/gdb.base/sigrepeat.c --- gdb-9.1/gdb/testsuite/gdb.base/sigrepeat.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/sigrepeat.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2004-2020 Free Software Foundation, Inc. + Copyright 2004-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/sigrepeat.exp gdb-10.2/gdb/testsuite/gdb.base/sigrepeat.exp --- gdb-9.1/gdb/testsuite/gdb.base/sigrepeat.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/sigrepeat.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2004-2020 Free Software Foundation, Inc. +# Copyright 2004-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/sigstep.c gdb-10.2/gdb/testsuite/gdb.base/sigstep.c --- gdb-9.1/gdb/testsuite/gdb.base/sigstep.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/sigstep.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2004-2020 Free Software Foundation, Inc. + Copyright 2004-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/sigstep.exp gdb-10.2/gdb/testsuite/gdb.base/sigstep.exp --- gdb-9.1/gdb/testsuite/gdb.base/sigstep.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/sigstep.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2004-2020 Free Software Foundation, Inc. +# Copyright 2004-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/sizeof.exp gdb-10.2/gdb/testsuite/gdb.base/sizeof.exp --- gdb-9.1/gdb/testsuite/gdb.base/sizeof.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/sizeof.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2000-2020 Free Software Foundation, Inc. +# Copyright 2000-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/skip1.c gdb-10.2/gdb/testsuite/gdb.base/skip1.c --- gdb-9.1/gdb/testsuite/gdb.base/skip1.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/skip1.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/skip.c gdb-10.2/gdb/testsuite/gdb.base/skip.c --- gdb-9.1/gdb/testsuite/gdb.base/skip.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/skip.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/skipcxx.cc gdb-10.2/gdb/testsuite/gdb.base/skipcxx.cc --- gdb-9.1/gdb/testsuite/gdb.base/skipcxx.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/skipcxx.cc 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,32 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +namespace somename +{ +int func() +{ + return 23; +} +} + +int +main () +{ + int x = somename::func (); + + return 0; +} diff -Nru gdb-9.1/gdb/testsuite/gdb.base/skipcxx.exp gdb-10.2/gdb/testsuite/gdb.base/skipcxx.exp --- gdb-9.1/gdb/testsuite/gdb.base/skipcxx.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/skipcxx.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,29 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +standard_testfile .cc + +if {[prepare_for_testing "failed to prepare" $testfile $srcfile debug]} { + return -1 +} + +if ![runto_main] { + fail "can't run to main" + return +} + +gdb_test "skip -rfu ^somename::" \ + [string_to_regexp "Function(s) ^somename:: will be skipped when stepping."] +gdb_test "step" ".* return 0;" diff -Nru gdb-9.1/gdb/testsuite/gdb.base/skip.exp gdb-10.2/gdb/testsuite/gdb.base/skip.exp --- gdb-9.1/gdb/testsuite/gdb.base/skip.exp 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/skip.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -21,8 +21,8 @@ standard_testfile if { [prepare_for_testing "failed to prepare" "skip" \ - {skip.c skip1.c } \ - {debug nowarnings}] } { + {skip.c skip1.c } \ + {debug nowarnings}] } { return -1 } @@ -141,9 +141,12 @@ } gdb_test "step" "bar \\(\\) at.*" "step 1" - gdb_test "step" ".*" "step 2"; # Return from foo() - gdb_test "step" "foo \\(\\) at.*" "step 3" - gdb_test "step" ".*" "step 4"; # Return from bar() + gdb_test "step" ".*" "step 2"; # Return from bar() + # 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" + gdb_test "step" ".*" "step 4"; # Return from foo() gdb_test "step" "main \\(\\) at.*" "step 5" } @@ -261,7 +264,10 @@ gdb_test_no_output "skip enable 7" gdb_test "step" "bar \\(\\) at.*" "step 1" gdb_test "step" ".*" "step 2"; # Return from bar() - gdb_test "step" "foo \\(\\) at.*" "step 3" + # 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" gdb_test "step" ".*" "step 4"; # Return from foo() gdb_test "step" "main \\(\\) at.*" "step 5" } @@ -276,7 +282,10 @@ gdb_test_no_output "skip enable 8" gdb_test "step" "bar \\(\\) at.*" "step 1" gdb_test "step" ".*" "step 2"; # Return from bar() - gdb_test "step" "foo \\(\\) at.*" "step 3" + # 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" gdb_test "step" ".*" "step 4"; # Return from foo() gdb_test "step" "main \\(\\) at.*" "step 5" } diff -Nru gdb-9.1/gdb/testsuite/gdb.base/skip-inline.c gdb-10.2/gdb/testsuite/gdb.base/skip-inline.c --- gdb-9.1/gdb/testsuite/gdb.base/skip-inline.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/skip-inline.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,64 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2019-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include <stdlib.h> + +int bar (void); +int baz (int); +void skip1_test_skip_file_and_function (void); +void test_skip_file_and_function (void); + +__attribute__((__always_inline__)) static inline int +foo (void) +{ + return bar (); +} + +int +main () +{ + volatile int x; + + /* step immediately into the inlined code */ + baz (foo ()); + + /* step first over non-inline code, this involves a different code path */ + x = 0; x = baz (foo ()); + + test_skip_file_and_function (); + + return 0; +} + +static void +test_skip (void) +{ +} + +static void +end_test_skip_file_and_function (void) +{ + abort (); +} + +void +test_skip_file_and_function (void) +{ + test_skip (); + skip1_test_skip_file_and_function (); + end_test_skip_file_and_function (); +} diff -Nru gdb-9.1/gdb/testsuite/gdb.base/skip-inline.exp gdb-10.2/gdb/testsuite/gdb.base/skip-inline.exp --- gdb-9.1/gdb/testsuite/gdb.base/skip-inline.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/skip-inline.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,92 @@ +# Copyright 2019-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +standard_testfile + +if { [prepare_for_testing "failed to prepare" "skip-inline" \ + {skip-inline.c skip1.c } \ + {debug nowarnings}] } { + return -1 +} + +set srcfile skip-inline.c +set srcfile1 skip1.c + +if ![runto_main] { + fail "can't run to main" + return +} + +# Create a skiplist entry for a specified file and function. + +gdb_test "skip function foo" "Function foo will be skipped when stepping\." + +gdb_test "bt" "\\s*\\#0\\s+main.*" "in the main" +gdb_test "step" ".*" "step into baz, since foo will be skipped" +gdb_test "bt" "\\s*\\#0\\s+baz.*" "in the baz, since foo was skipped" +gdb_test "step" ".*" "step in the baz" +gdb_test "bt" "\\s*\\#0\\s+baz.*" "still in the baz" +gdb_test "step" ".*" "step back to main" +gdb_test "bt" "\\s*\\#0\\s+main.*" "again in the main" +gdb_test "step" ".*" "step again into baz, since foo will be skipped" +gdb_test "bt" "\\s*\\#0\\s+baz.*" "again in the baz" +gdb_test "step" ".*" "step in the baz, again" +gdb_test "bt" "\\s*\\#0\\s+baz.*" "still in the baz, again" +gdb_test "step" ".*" "step back to main, again" +gdb_test "bt" "\\s*\\#0\\s+main.*" "again back to main" + +if ![runto_main] { + fail "can't run to main" + return +} + +with_test_prefix "double step" { + gdb_test "bt" "\\s*\\#0\\s+main.*" "in the main" + gdb_test "step 2" ".*" "step into baz, since foo will be skipped" + gdb_test "bt" "\\s*\\#0\\s+baz.*" "still in the baz" + gdb_test "step" ".*" "step back to main" + gdb_test "bt" "\\s*\\#0\\s+main.*" "again in the main" + gdb_test "step 2" ".*" "step again into baz, since foo will be skipped" + gdb_test "bt" "\\s*\\#0\\s+baz.*" "again in the baz" + gdb_test "step" ".*" "step back to main, again" + gdb_test "bt" "\\s*\\#0\\s+main.*" "again back to main" +} + +if ![runto_main] { + fail "can't run to main" + return +} + +with_test_prefix "triple step" { + gdb_test "bt" "\\s*\\#0\\s+main.*" "in the main" + gdb_test "step 3" ".*" "step over baz" + gdb_test "bt" "\\s*\\#0\\s+main.*" "again in the main" + gdb_test "step 3" ".*" "step over baz, again" + gdb_test "bt" "\\s*\\#0\\s+main.*" "again back to main" +} + +if ![runto_main] { + fail "can't run to main" + return +} + +gdb_test "skip delete" ".*" "skip delete" + +with_test_prefix "skip current frame" { + gdb_test "bt" "\\s*\\#0\\s+main.*" "in the main" + gdb_test "step" ".*" "step into foo" + gdb_test "bt" "\\s*\\#0\\s+foo.*" "in the foo" + gdb_test "skip" "Function foo will be skipped when stepping\." "skip" +} diff -Nru gdb-9.1/gdb/testsuite/gdb.base/skip-solib.exp gdb-10.2/gdb/testsuite/gdb.base/skip-solib.exp --- gdb-9.1/gdb/testsuite/gdb.base/skip-solib.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/skip-solib.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/so-disc-shr.c gdb-10.2/gdb/testsuite/gdb.base/so-disc-shr.c --- gdb-9.1/gdb/testsuite/gdb.base/so-disc-shr.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/so-disc-shr.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2007-2020 Free Software Foundation, Inc. + Copyright 2007-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/so-impl-ld.exp gdb-10.2/gdb/testsuite/gdb.base/so-impl-ld.exp --- gdb-9.1/gdb/testsuite/gdb.base/so-impl-ld.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/so-impl-ld.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1997-2020 Free Software Foundation, Inc. +# Copyright 1997-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/solib-corrupted.exp gdb-10.2/gdb/testsuite/gdb.base/solib-corrupted.exp --- gdb-9.1/gdb/testsuite/gdb.base/solib-corrupted.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/solib-corrupted.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/solib-disc.c gdb-10.2/gdb/testsuite/gdb.base/solib-disc.c --- gdb-9.1/gdb/testsuite/gdb.base/solib-disc.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/solib-disc.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2007-2020 Free Software Foundation, Inc. + Copyright 2007-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/solib-disc.exp gdb-10.2/gdb/testsuite/gdb.base/solib-disc.exp --- gdb-9.1/gdb/testsuite/gdb.base/solib-disc.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/solib-disc.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2007-2020 Free Software Foundation, Inc. +# Copyright 2007-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/solib-display.exp gdb-10.2/gdb/testsuite/gdb.base/solib-display.exp --- gdb-9.1/gdb/testsuite/gdb.base/solib-display.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/solib-display.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2009-2020 Free Software Foundation, Inc. +# Copyright 2009-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or diff -Nru gdb-9.1/gdb/testsuite/gdb.base/solib-display-lib.c gdb-10.2/gdb/testsuite/gdb.base/solib-display-lib.c --- gdb-9.1/gdb/testsuite/gdb.base/solib-display-lib.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/solib-display-lib.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2009-2020 Free Software Foundation, Inc. + Copyright 2009-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/solib-display-main.c gdb-10.2/gdb/testsuite/gdb.base/solib-display-main.c --- gdb-9.1/gdb/testsuite/gdb.base/solib-display-main.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/solib-display-main.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2009-2020 Free Software Foundation, Inc. + Copyright 2009-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/solib-nodir.exp gdb-10.2/gdb/testsuite/gdb.base/solib-nodir.exp --- gdb-9.1/gdb/testsuite/gdb.base/solib-nodir.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/solib-nodir.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/solib-overlap.exp gdb-10.2/gdb/testsuite/gdb.base/solib-overlap.exp --- gdb-9.1/gdb/testsuite/gdb.base/solib-overlap.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/solib-overlap.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2009-2020 Free Software Foundation, Inc. +# Copyright 2009-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or @@ -74,9 +74,10 @@ return -1 } - if {[catch "system \"prelink -N -r ${prelink_lib1} ${binfile_lib1}\""] != 0 - || [catch "system \"prelink -N -r ${prelink_lib2} ${binfile_lib2}\""] != 0} { + if {[catch "exec prelink -N -r ${prelink_lib1} ${binfile_lib1}" output] != 0 + || [catch "exec prelink -N -r ${prelink_lib2} ${binfile_lib2}" output] != 0} { # Maybe we don't have prelink. + verbose -log "prelink failed: $output" untested "could not prelink ${binfile_lib1_test_msg} or ${binfile_lib2_test_msg}." return -1 } diff -Nru gdb-9.1/gdb/testsuite/gdb.base/solib-overlap-lib.c gdb-10.2/gdb/testsuite/gdb.base/solib-overlap-lib.c --- gdb-9.1/gdb/testsuite/gdb.base/solib-overlap-lib.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/solib-overlap-lib.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2009-2020 Free Software Foundation, Inc. +/* Copyright 2009-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or diff -Nru gdb-9.1/gdb/testsuite/gdb.base/solib-overlap-main.c gdb-10.2/gdb/testsuite/gdb.base/solib-overlap-main.c --- gdb-9.1/gdb/testsuite/gdb.base/solib-overlap-main.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/solib-overlap-main.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2009-2020 Free Software Foundation, Inc. +/* Copyright 2009-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or diff -Nru gdb-9.1/gdb/testsuite/gdb.base/solib-probes-nosharedlibrary.c gdb-10.2/gdb/testsuite/gdb.base/solib-probes-nosharedlibrary.c --- gdb-9.1/gdb/testsuite/gdb.base/solib-probes-nosharedlibrary.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/solib-probes-nosharedlibrary.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2019-2020 Free Software Foundation, Inc. + Copyright 2019-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/solib-probes-nosharedlibrary.exp gdb-10.2/gdb/testsuite/gdb.base/solib-probes-nosharedlibrary.exp --- gdb-9.1/gdb/testsuite/gdb.base/solib-probes-nosharedlibrary.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/solib-probes-nosharedlibrary.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2005-2020 Free Software Foundation, Inc. +# Copyright 2005-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/solib-search.c gdb-10.2/gdb/testsuite/gdb.base/solib-search.c --- gdb-9.1/gdb/testsuite/gdb.base/solib-search.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/solib-search.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This test program is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/solib-search.exp gdb-10.2/gdb/testsuite/gdb.base/solib-search.exp --- gdb-9.1/gdb/testsuite/gdb.base/solib-search.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/solib-search.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/solib-search.h gdb-10.2/gdb/testsuite/gdb.base/solib-search.h --- gdb-9.1/gdb/testsuite/gdb.base/solib-search.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/solib-search.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This test program is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/solib-search-lib1.c gdb-10.2/gdb/testsuite/gdb.base/solib-search-lib1.c --- gdb-9.1/gdb/testsuite/gdb.base/solib-search-lib1.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/solib-search-lib1.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This test program is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/solib-search-lib2.c gdb-10.2/gdb/testsuite/gdb.base/solib-search-lib2.c --- gdb-9.1/gdb/testsuite/gdb.base/solib-search-lib2.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/solib-search-lib2.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This test program is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/solib-symbol.exp gdb-10.2/gdb/testsuite/gdb.base/solib-symbol.exp --- gdb-9.1/gdb/testsuite/gdb.base/solib-symbol.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/solib-symbol.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2007-2020 Free Software Foundation, Inc. +# Copyright 2007-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or diff -Nru gdb-9.1/gdb/testsuite/gdb.base/solib-symbol-lib.c gdb-10.2/gdb/testsuite/gdb.base/solib-symbol-lib.c --- gdb-9.1/gdb/testsuite/gdb.base/solib-symbol-lib.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/solib-symbol-lib.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2007-2020 Free Software Foundation, Inc. +/* Copyright 2007-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or diff -Nru gdb-9.1/gdb/testsuite/gdb.base/solib-symbol-main.c gdb-10.2/gdb/testsuite/gdb.base/solib-symbol-main.c --- gdb-9.1/gdb/testsuite/gdb.base/solib-symbol-main.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/solib-symbol-main.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2007-2020 Free Software Foundation, Inc. +/* Copyright 2007-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or diff -Nru gdb-9.1/gdb/testsuite/gdb.base/solib-vanish.exp gdb-10.2/gdb/testsuite/gdb.base/solib-vanish.exp --- gdb-9.1/gdb/testsuite/gdb.base/solib-vanish.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/solib-vanish.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2017-2020 Free Software Foundation, Inc. +# Copyright 2017-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/solib-vanish-lib1.c gdb-10.2/gdb/testsuite/gdb.base/solib-vanish-lib1.c --- gdb-9.1/gdb/testsuite/gdb.base/solib-vanish-lib1.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/solib-vanish-lib1.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2017-2020 Free Software Foundation, Inc. + Copyright 2017-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/solib-vanish-lib2.c gdb-10.2/gdb/testsuite/gdb.base/solib-vanish-lib2.c --- gdb-9.1/gdb/testsuite/gdb.base/solib-vanish-lib2.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/solib-vanish-lib2.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2017-2020 Free Software Foundation, Inc. + Copyright 2017-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/solib-vanish-main.c gdb-10.2/gdb/testsuite/gdb.base/solib-vanish-main.c --- gdb-9.1/gdb/testsuite/gdb.base/solib-vanish-main.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/solib-vanish-main.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2017-2020 Free Software Foundation, Inc. + Copyright 2017-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/solib-weak.c gdb-10.2/gdb/testsuite/gdb.base/solib-weak.c --- gdb-9.1/gdb/testsuite/gdb.base/solib-weak.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/solib-weak.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2006-2020 Free Software Foundation, Inc. + Copyright 2006-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/solib-weak.exp gdb-10.2/gdb/testsuite/gdb.base/solib-weak.exp --- gdb-9.1/gdb/testsuite/gdb.base/solib-weak.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/solib-weak.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2006-2020 Free Software Foundation, Inc. +# Copyright 2006-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/source-dir.c gdb-10.2/gdb/testsuite/gdb.base/source-dir.c --- gdb-9.1/gdb/testsuite/gdb.base/source-dir.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/source-dir.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2019-2020 Free Software Foundation, Inc. + Copyright 2019-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/source-dir.exp gdb-10.2/gdb/testsuite/gdb.base/source-dir.exp --- gdb-9.1/gdb/testsuite/gdb.base/source-dir.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/source-dir.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -81,6 +81,12 @@ # find the source file no matter what we added to the directory # search path, this should now be fixed. + # All of these pathname and directory manipulations assume + # host == build, so do not attempt this set of tests on remote host. + if [is_remote host] { + return + } + set original_dir [pwd] set working_dir [standard_output_file ""] cd ${working_dir} @@ -108,7 +114,11 @@ clean_restart ${binfile} - gdb_test_no_output "set directories \$cdir:\$cwd" + if { [ishost *-*-mingw*] } { + gdb_test_no_output "set directories \$cdir;\$cwd" + } else { + gdb_test_no_output "set directories \$cdir:\$cwd" + } gdb_test "show directories" \ "\r\nSource directories searched: \\\$cdir\[:;\]\\\$cwd" diff -Nru gdb-9.1/gdb/testsuite/gdb.base/source-error-1.gdb gdb-10.2/gdb/testsuite/gdb.base/source-error-1.gdb --- gdb-9.1/gdb/testsuite/gdb.base/source-error-1.gdb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/source-error-1.gdb 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2005-2020 Free Software Foundation, Inc. +# Copyright 2005-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/source-error.gdb gdb-10.2/gdb/testsuite/gdb.base/source-error.gdb --- gdb-9.1/gdb/testsuite/gdb.base/source-error.gdb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/source-error.gdb 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/source-execution.c gdb-10.2/gdb/testsuite/gdb.base/source-execution.c --- gdb-9.1/gdb/testsuite/gdb.base/source-execution.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/source-execution.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/source-execution.exp gdb-10.2/gdb/testsuite/gdb.base/source-execution.exp --- gdb-9.1/gdb/testsuite/gdb.base/source-execution.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/source-execution.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/source-execution.gdb gdb-10.2/gdb/testsuite/gdb.base/source-execution.gdb --- gdb-9.1/gdb/testsuite/gdb.base/source-execution.gdb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/source-execution.gdb 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. # -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/source.exp gdb-10.2/gdb/testsuite/gdb.base/source.exp --- gdb-9.1/gdb/testsuite/gdb.base/source.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/source.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2005-2020 Free Software Foundation, Inc. +# Copyright 2005-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/source-nofile.gdb gdb-10.2/gdb/testsuite/gdb.base/source-nofile.gdb --- gdb-9.1/gdb/testsuite/gdb.base/source-nofile.gdb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/source-nofile.gdb 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. # -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/source-test.gdb gdb-10.2/gdb/testsuite/gdb.base/source-test.gdb --- gdb-9.1/gdb/testsuite/gdb.base/source-test.gdb 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/source-test.gdb 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/sss-bp-on-user-bp-2.c gdb-10.2/gdb/testsuite/gdb.base/sss-bp-on-user-bp-2.c --- gdb-9.1/gdb/testsuite/gdb.base/sss-bp-on-user-bp-2.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/sss-bp-on-user-bp-2.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/sss-bp-on-user-bp-2.exp gdb-10.2/gdb/testsuite/gdb.base/sss-bp-on-user-bp-2.exp --- gdb-9.1/gdb/testsuite/gdb.base/sss-bp-on-user-bp-2.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/sss-bp-on-user-bp-2.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2014-2020 Free Software Foundation, Inc. +# Copyright (C) 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/sss-bp-on-user-bp.c gdb-10.2/gdb/testsuite/gdb.base/sss-bp-on-user-bp.c --- gdb-9.1/gdb/testsuite/gdb.base/sss-bp-on-user-bp.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/sss-bp-on-user-bp.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/sss-bp-on-user-bp.exp gdb-10.2/gdb/testsuite/gdb.base/sss-bp-on-user-bp.exp --- gdb-9.1/gdb/testsuite/gdb.base/sss-bp-on-user-bp.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/sss-bp-on-user-bp.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/stack-checking.c gdb-10.2/gdb/testsuite/gdb.base/stack-checking.c --- gdb-9.1/gdb/testsuite/gdb.base/stack-checking.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/stack-checking.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2008-2020 Free Software Foundation, Inc. + Copyright 2008-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/stack-checking.exp gdb-10.2/gdb/testsuite/gdb.base/stack-checking.exp --- gdb-9.1/gdb/testsuite/gdb.base/stack-checking.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/stack-checking.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/stack-protector.c gdb-10.2/gdb/testsuite/gdb.base/stack-protector.c --- gdb-9.1/gdb/testsuite/gdb.base/stack-protector.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/stack-protector.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This test program is part of GDB, the GNU debugger. - Copyright 2019-2020 Free Software Foundation, Inc. + Copyright 2019-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/stack-protector.exp gdb-10.2/gdb/testsuite/gdb.base/stack-protector.exp --- gdb-9.1/gdb/testsuite/gdb.base/stack-protector.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/stack-protector.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2019-2020 Free Software Foundation, Inc. +# Copyright (C) 2019-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/stale-infcall.c gdb-10.2/gdb/testsuite/gdb.base/stale-infcall.c --- gdb-9.1/gdb/testsuite/gdb.base/stale-infcall.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/stale-infcall.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/stale-infcall.exp gdb-10.2/gdb/testsuite/gdb.base/stale-infcall.exp --- gdb-9.1/gdb/testsuite/gdb.base/stale-infcall.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/stale-infcall.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2012-2020 Free Software Foundation, Inc. +# Copyright (C) 2012-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/stap-probe.c gdb-10.2/gdb/testsuite/gdb.base/stap-probe.c --- gdb-9.1/gdb/testsuite/gdb.base/stap-probe.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/stap-probe.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -15,7 +15,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ -#if USE_PROBES +#if USE_SEMAPHORES #define _SDT_HAS_SEMAPHORES __extension__ unsigned short test_user_semaphore __attribute__ ((unused)) __attribute__ ((section (".probes"))); @@ -31,6 +31,8 @@ __extension__ unsigned short test_ps_semaphore __attribute__ ((unused)) __attribute__ ((section (".probes"))); #else +int relocation_marker __attribute__ ((unused)); + #define TEST 1 #define TEST2 1 diff -Nru gdb-9.1/gdb/testsuite/gdb.base/stap-probe.exp gdb-10.2/gdb/testsuite/gdb.base/stap-probe.exp --- gdb-9.1/gdb/testsuite/gdb.base/stap-probe.exp 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/stap-probe.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2012-2020 Free Software Foundation, Inc. +# Copyright (C) 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -18,14 +18,20 @@ # Run the tests. We run the tests two different ways: once with a # plain probe, and once with a probe that has an associated semaphore. # This returns -1 on failure to compile or start, 0 otherwise. -proc stap_test {exec_name {arg ""}} { +proc stap_test {exec_name {args ""}} { global testfile hex srcfile if {[prepare_for_testing "failed to prepare" ${exec_name} $srcfile \ - [concat $arg debug]]} { + [concat $args debug]]} { return -1 } + set semaphore_addr_var "" + if {[string first "-DUSE_SEMAPHORES" $args] == -1} { + gdb_test_no_output "set breakpoint always-inserted on" + set semaphore_addr_var [get_hexadecimal_valueof "&relocation_marker" "0"] + } + if ![runto_main] { return -1 } @@ -33,15 +39,34 @@ gdb_test "print \$_probe_argc" "No probe at PC $hex" \ "check argument not at probe point" - gdb_test "info probes stap" \ - "test *user *$hex .*" - + if {[string first "-DUSE_SEMAPHORES" $args] != -1} { + gdb_test "info probes stap" \ + "test *user *$hex *$hex .*" + } else { + gdb_test "info probes stap" \ + "test *user *$hex .*" + } + if {[runto "-pstap test:user"]} { pass "run to -pstap test:user" } else { fail "run to -pstap test:user" } + if {[string first "-DUSE_SEMAPHORES" $args] == -1} { + set relocation_base \ + [expr [get_hexadecimal_valueof "&relocation_marker" "0"] - $semaphore_addr_var] + if {$relocation_base != 0} { + # Checks that GDB doesn't mistakenly relocate and write to null + # semaphore addresses. If it were to relocate a zero-valued + # semaphore address and increment the value at that address, we + # would expect to see "\200ELF" here instead. + gdb_test "p (*(char*) $relocation_base)@4" \ + " = \"\\\\177ELF\"" \ + "null semaphore relocation" + } + } + # Test probe arguments. gdb_test "print \$_probe_argc" " = 1" \ "print \$_probe_argc for probe user" @@ -92,11 +117,11 @@ return 0 } -proc stap_test_no_debuginfo {exec_name {arg ""}} { +proc stap_test_no_debuginfo {exec_name {args ""}} { global testfile hex if {[prepare_for_testing "failed to prepare" ${exec_name} ${testfile}.c \ - {$arg nodebug optimize=-O2}]} { + [concat $args nodebug optimize=-O2]]} { return -1 } @@ -163,10 +188,14 @@ untested "stap probe test failed" return -1 } + + foreach_with_prefix pie { "nopie" "pie" } { + stap_test "stap-probe-nosem-noopt-$pie" $pie + } } with_test_prefix "with semaphore, not optimized" { - stap_test "stap-probe-sem-noopt" "-DUSE_PROBES" + stap_test "stap-probe-sem-noopt" additional_flags=-DUSE_SEMAPHORES } with_test_prefix "without semaphore, optimized" { @@ -174,5 +203,5 @@ } with_test_prefix "with semaphore, optimized" { - stap_test_no_debuginfo "stap-probe-sem-opt" "-DUSE_PROBES" + stap_test_no_debuginfo "stap-probe-sem-opt" additional_flags=-DUSE_SEMAPHORES } diff -Nru gdb-9.1/gdb/testsuite/gdb.base/start.c gdb-10.2/gdb/testsuite/gdb.base/start.c --- gdb-9.1/gdb/testsuite/gdb.base/start.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/start.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2005-2020 Free Software Foundation, Inc. + Copyright 2005-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/start-cpp.cc gdb-10.2/gdb/testsuite/gdb.base/start-cpp.cc --- gdb-9.1/gdb/testsuite/gdb.base/start-cpp.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/start-cpp.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2019-2020 Free Software Foundation, Inc. + Copyright 2019-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/start-cpp.exp gdb-10.2/gdb/testsuite/gdb.base/start-cpp.exp --- gdb-9.1/gdb/testsuite/gdb.base/start-cpp.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/start-cpp.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2005-2020 Free Software Foundation, Inc. +# Copyright 2005-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/start.exp gdb-10.2/gdb/testsuite/gdb.base/start.exp --- gdb-9.1/gdb/testsuite/gdb.base/start.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/start.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2005-2020 Free Software Foundation, Inc. +# Copyright 2005-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/starti.c gdb-10.2/gdb/testsuite/gdb.base/starti.c --- gdb-9.1/gdb/testsuite/gdb.base/starti.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/starti.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2017-2020 Free Software Foundation, Inc. + Copyright 2017-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/starti.exp gdb-10.2/gdb/testsuite/gdb.base/starti.exp --- gdb-9.1/gdb/testsuite/gdb.base/starti.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/starti.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2017-2020 Free Software Foundation, Inc. +# Copyright 2017-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/startup-with-shell.c gdb-10.2/gdb/testsuite/gdb.base/startup-with-shell.c --- gdb-9.1/gdb/testsuite/gdb.base/startup-with-shell.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/startup-with-shell.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2017-2020 Free Software Foundation, Inc. + Copyright 2017-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/startup-with-shell.exp gdb-10.2/gdb/testsuite/gdb.base/startup-with-shell.exp --- gdb-9.1/gdb/testsuite/gdb.base/startup-with-shell.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/startup-with-shell.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2017-2020 Free Software Foundation, Inc. +# Copyright 2017-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/statistics.exp gdb-10.2/gdb/testsuite/gdb.base/statistics.exp --- gdb-9.1/gdb/testsuite/gdb.base/statistics.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/statistics.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/step-break.c gdb-10.2/gdb/testsuite/gdb.base/step-break.c --- gdb-9.1/gdb/testsuite/gdb.base/step-break.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/step-break.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2008-2020 Free Software Foundation, Inc. + Copyright 2008-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/step-break.exp gdb-10.2/gdb/testsuite/gdb.base/step-break.exp --- gdb-9.1/gdb/testsuite/gdb.base/step-break.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/step-break.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/step-bt.c gdb-10.2/gdb/testsuite/gdb.base/step-bt.c --- gdb-9.1/gdb/testsuite/gdb.base/step-bt.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/step-bt.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2006-2020 Free Software Foundation, Inc. + Copyright 2006-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/step-bt.exp gdb-10.2/gdb/testsuite/gdb.base/step-bt.exp --- gdb-9.1/gdb/testsuite/gdb.base/step-bt.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/step-bt.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2006-2020 Free Software Foundation, Inc. +# Copyright 2006-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/step-indirect-call-thunk.c gdb-10.2/gdb/testsuite/gdb.base/step-indirect-call-thunk.c --- gdb-9.1/gdb/testsuite/gdb.base/step-indirect-call-thunk.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/step-indirect-call-thunk.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2018-2020 Free Software Foundation, Inc. + Copyright 2018-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/step-indirect-call-thunk.exp gdb-10.2/gdb/testsuite/gdb.base/step-indirect-call-thunk.exp --- gdb-9.1/gdb/testsuite/gdb.base/step-indirect-call-thunk.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/step-indirect-call-thunk.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2018-2020 Free Software Foundation, Inc. +# Copyright 2018-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/step-line.c gdb-10.2/gdb/testsuite/gdb.base/step-line.c --- gdb-9.1/gdb/testsuite/gdb.base/step-line.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/step-line.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Test step/next in presence of #line directives. - Copyright (C) 2001-2020 Free Software Foundation, Inc. + Copyright (C) 2001-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.base/step-line.exp gdb-10.2/gdb/testsuite/gdb.base/step-line.exp --- gdb-9.1/gdb/testsuite/gdb.base/step-line.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/step-line.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2001-2020 Free Software Foundation, Inc. +# Copyright 2001-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/step-line.inp gdb-10.2/gdb/testsuite/gdb.base/step-line.inp --- gdb-9.1/gdb/testsuite/gdb.base/step-line.inp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/step-line.inp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # Test step/next in presence of #line directives -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/step-over-clone.c gdb-10.2/gdb/testsuite/gdb.base/step-over-clone.c --- gdb-9.1/gdb/testsuite/gdb.base/step-over-clone.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/step-over-clone.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2016-2020 Free Software Foundation, Inc. + Copyright 2016-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/step-over-exit.c gdb-10.2/gdb/testsuite/gdb.base/step-over-exit.c --- gdb-9.1/gdb/testsuite/gdb.base/step-over-exit.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/step-over-exit.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2016-2020 Free Software Foundation, Inc. + Copyright 2016-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/step-over-exit.exp gdb-10.2/gdb/testsuite/gdb.base/step-over-exit.exp --- gdb-9.1/gdb/testsuite/gdb.base/step-over-exit.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/step-over-exit.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2016-2020 Free Software Foundation, Inc. +# Copyright 2016-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/step-over-fork.c gdb-10.2/gdb/testsuite/gdb.base/step-over-fork.c --- gdb-9.1/gdb/testsuite/gdb.base/step-over-fork.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/step-over-fork.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/step-over-no-symbols.exp gdb-10.2/gdb/testsuite/gdb.base/step-over-no-symbols.exp --- gdb-9.1/gdb/testsuite/gdb.base/step-over-no-symbols.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/step-over-no-symbols.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020 Free Software Foundation, Inc. +# Copyright (C) 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -78,7 +78,9 @@ set after_addr [get_pc "get after PC"] - gdb_assert {$before_addr != $after_addr} "advanced" + gdb_assert {{[string is integer -strict $before_addr] \ + && [string is integer -strict $after_addr] \ + && $before_addr != $after_addr}} "advanced" } foreach displaced { "off" "on" "auto" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.base/step-over-syscall.exp gdb-10.2/gdb/testsuite/gdb.base/step-over-syscall.exp --- gdb-9.1/gdb/testsuite/gdb.base/step-over-syscall.exp 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/step-over-syscall.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -16,13 +16,27 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. set syscall_insn "" +set syscall_register "" +array set syscall_number {} -# Define the syscall instruction for each target. +# Define the syscall instructions, registers and numbers for each target. if { [istarget "i\[34567\]86-*-linux*"] || [istarget "x86_64-*-linux*"] } { set syscall_insn "\[ \t\](int|syscall|sysenter)\[ \t\]" + set syscall_register "eax" + array set syscall_number {fork "(56|120)" vfork "(58|190)" \ + clone "(56|120)"} } elseif { [istarget "aarch64*-*-linux*"] || [istarget "arm*-*-linux*"] } { set syscall_insn "\[ \t\](swi|svc)\[ \t\]" + + if { [istarget "aarch64*-*-linux*"] } { + set syscall_register "x8" + } else { + set syscall_register "r7" + } + + array set syscall_number {fork "(120|220)" vfork "(190|220)" \ + clone "(120|220)"} } else { return -1 } @@ -30,13 +44,22 @@ proc_with_prefix check_pc_after_cross_syscall { syscall syscall_insn_next_addr } { set syscall_insn_next_addr_found [get_hexadecimal_valueof "\$pc" "0"] - set test "single step over $syscall final pc" - if {$syscall_insn_next_addr != 0 - && $syscall_insn_next_addr == $syscall_insn_next_addr_found} { - pass $test - } else { - fail $test - } + gdb_assert {$syscall_insn_next_addr != 0 \ + && $syscall_insn_next_addr == $syscall_insn_next_addr_found} \ + "single step over $syscall final pc" +} + +# Verify the syscall number is the correct one. + +proc syscall_number_matches { syscall } { + global syscall_register syscall_number + + if {[gdb_test "p \$$syscall_register" ".*= $syscall_number($syscall)" \ + "syscall number matches"] != 0} { + return 0 + } + + return 1 } # Restart GDB and set up the test. Return a list in which the first one @@ -47,6 +70,8 @@ proc setup { syscall } { global gdb_prompt syscall_insn + global hex + set next_insn_addr -1 set testfile "step-over-$syscall" clean_restart $testfile @@ -62,7 +87,7 @@ gdb_test_no_output "set displaced-stepping off" \ "set displaced-stepping off during test setup" - gdb_test "break $syscall" "Breakpoint \[0-9\]* at .*" + gdb_test "break \*$syscall" "Breakpoint \[0-9\]* at .*" gdb_test "continue" "Continuing\\..*Breakpoint \[0-9\]+, (.* in |__libc_|)$syscall \\(\\).*" \ "continue to $syscall (1st time)" @@ -75,39 +100,77 @@ # Hit the breakpoint on $syscall for the second time. In this time, # the address of syscall insn and next insn of syscall are recorded. - gdb_test "display/i \$pc" ".*" - - # Single step until we see a syscall insn or we reach the - # upper bound of loop iterations. - set msg "find syscall insn in $syscall" - set steps 0 - set max_steps 1000 - gdb_test_multiple "stepi" $msg { - -re ".*$syscall_insn.*$gdb_prompt $" { - pass $msg + # Check if the first instruction we stopped at is the syscall one. + set syscall_insn_addr -1 + gdb_test_multiple "display/i \$pc" "fetch first stop pc" { + -re "display/i .*: x/i .*=> ($hex) .*:.*$syscall_insn.*$gdb_prompt $" { + set insn_addr $expect_out(1,string) + + # Is the syscall number the correct one? + if {[syscall_number_matches $syscall]} { + set syscall_insn_addr $insn_addr + } + pass $gdb_test_name + } + -re ".*$gdb_prompt $" { + pass $gdb_test_name } - -re "x/i .*=>.*\r\n$gdb_prompt $" { - incr steps - if {$steps == $max_steps} { - fail $msg - } else { - send_gdb "stepi\n" - exp_continue + } + + # If we are not at the syscall instruction yet, keep looking for it with + # stepi commands. + if {$syscall_insn_addr == -1} { + # Single step until we see a syscall insn or we reach the + # upper bound of loop iterations. + set steps 0 + set max_steps 1000 + gdb_test_multiple "stepi" "find syscall insn in $syscall" { + -re ".*$syscall_insn.*$gdb_prompt $" { + # Is the syscall number the correct one? + if {[syscall_number_matches $syscall]} { + pass $gdb_test_name + } else { + exp_continue + } } + -re "x/i .*=>.*\r\n$gdb_prompt $" { + incr steps + if {$steps == $max_steps} { + fail $gdb_test_name + } else { + send_gdb "stepi\n" + exp_continue + } + } + } + + if {$steps == $max_steps} { + return { -1, -1 } } } - if {$steps == $max_steps} { - return { -1, -1 } + # We have found the syscall instruction. Now record the next instruction. + # Use the X command instead of stepi since we can't guarantee + # stepi is working properly. + gdb_test_multiple "x/2i \$pc" "pc before/after syscall instruction" { + -re "x/2i .*=> ($hex) .*:.*$syscall_insn.* ($hex) .*:.*$gdb_prompt $" { + set syscall_insn_addr $expect_out(1,string) + set next_insn_addr $expect_out(3,string) + pass $gdb_test_name + } } - set syscall_insn_addr [get_hexadecimal_valueof "\$pc" "0" \ - "pc before stepi"] if {[gdb_test "stepi" "x/i .*=>.*" "stepi $syscall insn"] != 0} { return { -1, -1 } } - return [list $syscall_insn_addr [get_hexadecimal_valueof "\$pc" \ - "0" "pc after stepi"]] + + set pc_after_stepi [get_hexadecimal_valueof "\$pc" "0" \ + "pc after stepi"] + + gdb_assert {$next_insn_addr == $pc_after_stepi} \ + "pc after stepi matches insn addr after syscall" + + return [list $syscall_insn_addr $pc_after_stepi] } proc step_over_syscall { syscall } { @@ -156,8 +219,13 @@ } } - gdb_test "continue" "Continuing\\..*Breakpoint \[0-9\]+, .*" \ - "continue to syscall insn $syscall" + # Check if the syscall breakpoint is at the syscall instruction + # address. If so, no need to continue, otherwise we will run the + # inferior to completion. + if {$syscall_insn_addr != [get_hexadecimal_valueof "\$pc" "0"]} { + gdb_test "continue" "Continuing\\..*Breakpoint \[0-9\]+, .*" \ + "continue to syscall insn $syscall" + } gdb_test_no_output "set displaced-stepping $displaced" diff -Nru gdb-9.1/gdb/testsuite/gdb.base/step-over-vfork.c gdb-10.2/gdb/testsuite/gdb.base/step-over-vfork.c --- gdb-9.1/gdb/testsuite/gdb.base/step-over-vfork.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/step-over-vfork.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/step-resume-infcall.c gdb-10.2/gdb/testsuite/gdb.base/step-resume-infcall.c --- gdb-9.1/gdb/testsuite/gdb.base/step-resume-infcall.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/step-resume-infcall.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2005-2020 Free Software Foundation, Inc. + Copyright 2005-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/step-resume-infcall.exp gdb-10.2/gdb/testsuite/gdb.base/step-resume-infcall.exp --- gdb-9.1/gdb/testsuite/gdb.base/step-resume-infcall.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/step-resume-infcall.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2010-2020 Free Software Foundation, Inc. +# Copyright (C) 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/step-sw-breakpoint-adjust-pc.c gdb-10.2/gdb/testsuite/gdb.base/step-sw-breakpoint-adjust-pc.c --- gdb-9.1/gdb/testsuite/gdb.base/step-sw-breakpoint-adjust-pc.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/step-sw-breakpoint-adjust-pc.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/step-sw-breakpoint-adjust-pc.exp gdb-10.2/gdb/testsuite/gdb.base/step-sw-breakpoint-adjust-pc.exp --- gdb-9.1/gdb/testsuite/gdb.base/step-sw-breakpoint-adjust-pc.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/step-sw-breakpoint-adjust-pc.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/step-symless.c gdb-10.2/gdb/testsuite/gdb.base/step-symless.c --- gdb-9.1/gdb/testsuite/gdb.base/step-symless.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/step-symless.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/step-symless.exp gdb-10.2/gdb/testsuite/gdb.base/step-symless.exp --- gdb-9.1/gdb/testsuite/gdb.base/step-symless.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/step-symless.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2012-2020 Free Software Foundation, Inc. +# Copyright (C) 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/step-test.exp gdb-10.2/gdb/testsuite/gdb.base/step-test.exp --- gdb-9.1/gdb/testsuite/gdb.base/step-test.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/step-test.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 1997-2020 Free Software Foundation, Inc. +# Copyright 1997-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/store.exp gdb-10.2/gdb/testsuite/gdb.base/store.exp --- gdb-9.1/gdb/testsuite/gdb.base/store.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/store.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2002-2020 Free Software Foundation, Inc. +# Copyright 2002-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -55,26 +55,37 @@ } } - set supported 1 + set supported_l 1 set test "${prefix}; print old l, expecting ${l}" gdb_test_multiple "print l" "$test" { - -re " = <optimized out>\r\n$gdb_prompt $" { + -re -wrap " = <optimized out>" { unsupported $test - set supported 0 + set supported_l 0 } - -re " = ${l}\r\n$gdb_prompt $" { + -re -wrap " = ${l}" { pass $test } } - if { $supported } { - gdb_test "print r" " = ${r}" \ - "${prefix}; print old r, expecting ${r}" + + set test "${prefix}; print old r, expecting ${r}" + gdb_test_multiple "print r" "$test" { + -re -wrap " = <optimized out>" { + unsupported $test + } + -re -wrap " = ${r}" { + pass $test + } + } + + if { $supported_l } { gdb_test_no_output "set variable l = 4" \ "${prefix}; setting l to 4" gdb_test "print l" " = ${new}" \ "${prefix}; print new l, expecting ${new}" - gdb_test "next" "return l \\+ r;" \ - "${prefix}; next over add call" + } + gdb_test "next" "return l \\+ r;" \ + "${prefix}; next over add call" + if { $supported_l } { gdb_test "print l" " = ${add}" \ "${prefix}; print incremented l, expecting ${add}" } @@ -101,20 +112,29 @@ gdb_test "up" "l = add_${t} .l, r.;" \ "${prefix}; up" - set supported 1 + set supported_l 1 set test "${prefix}; print old l, expecting ${l}" gdb_test_multiple "print l" "$test" { - -re " = <optimized out>\r\n$gdb_prompt $" { + -re -wrap " = <optimized out>" { unsupported $test - set supported 0 + set supported_l 0 } - -re " = ${l}\r\n$gdb_prompt $" { + -re -wrap " = ${l}" { pass $test } } - if { $supported } { - gdb_test "print r" " = ${r}" \ - "${prefix}; print old r, expecting ${r}" + + set test "${prefix}; print old r, expecting ${r}" + gdb_test_multiple "print r" "$test" { + -re -wrap " = <optimized out>" { + unsupported $test + } + -re -wrap " = ${r}" { + pass $test + } + } + + if { $supported_l } { gdb_test_no_output "set variable l = 4" \ "${prefix}; set l to 4" gdb_test "print l" " = ${new}" \ diff -Nru gdb-9.1/gdb/testsuite/gdb.base/structs2.c gdb-10.2/gdb/testsuite/gdb.base/structs2.c --- gdb-9.1/gdb/testsuite/gdb.base/structs2.c 2019-02-23 12:20:11.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/structs2.c 2020-09-13 02:33:41.000000000 +0000 @@ -13,7 +13,7 @@ bkpt = 0; param_reg (120, 130, 32000, 33000); - param_reg (130, 120, 33000, 32000); + param_reg (-120, 130, -32000, 33000); return 0; } diff -Nru gdb-9.1/gdb/testsuite/gdb.base/structs2.exp gdb-10.2/gdb/testsuite/gdb.base/structs2.exp --- gdb-9.1/gdb/testsuite/gdb.base/structs2.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/structs2.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1998-2020 Free Software Foundation, Inc. +# Copyright 1998-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -13,7 +13,6 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. -set prototypes 1 standard_testfile .c # Create and source the file that provides information about the compiler @@ -22,30 +21,15 @@ return -1 } -# build the first test case -if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } { - # built the second test case since we can't use prototypes - warning "Prototypes not supported, rebuilding with -DNO_PROTOTYPES" - if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-DNO_PROTOTYPES}] != "" } { - untested "failed to compile" - return -1 - } - set prototypes 0 +if { [prepare_for_testing "failed to prepare" $binfile $srcfile {debug}] } { + return -1 } -# Start with a fresh gdb. - -clean_restart ${binfile} - -gdb_test_no_output "set width 0" - if ![runto_main] then { fail "can't run to main" return 0 } -# Ok, we're finally ready to actually do our tests. - gdb_test "f" \ ".*bkpt = 0.*" \ "structs2 sanity check" @@ -65,11 +49,5 @@ setup_xfail hppa*-* gcc/15860 } gdb_test "continue" \ - ".*pr_char=-126.*pr_uchar=120.*pr_short=-32536.*pr_ushort=32000.*bkpt = 1.*" \ + ".*pr_char=-120.*pr_uchar=130.*pr_short=-32000.*pr_ushort=33000.*bkpt = 1.*" \ "structs2 continue2" - -# End of tests. - -gdb_stop_suppressing_tests - -return 0 diff -Nru gdb-9.1/gdb/testsuite/gdb.base/structs3.c gdb-10.2/gdb/testsuite/gdb.base/structs3.c --- gdb-9.1/gdb/testsuite/gdb.base/structs3.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/structs3.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2008-2020 Free Software Foundation, Inc. + Copyright 2008-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/structs3.exp gdb-10.2/gdb/testsuite/gdb.base/structs3.exp --- gdb-9.1/gdb/testsuite/gdb.base/structs3.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/structs3.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/structs.c gdb-10.2/gdb/testsuite/gdb.base/structs.c --- gdb-9.1/gdb/testsuite/gdb.base/structs.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/structs.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 1996-2020 Free Software Foundation, Inc. + Copyright 1996-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/structs.exp gdb-10.2/gdb/testsuite/gdb.base/structs.exp --- gdb-9.1/gdb/testsuite/gdb.base/structs.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/structs.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 1996-2020 Free Software Foundation, Inc. +# Copyright 1996-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -66,21 +66,10 @@ } set binfile [standard_output_file ${testfile}] - if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable "${flags}"] != "" } { - # built the second test case since we can't use prototypes - warning "Prototypes not supported, rebuilding with -DNO_PROTOTYPES" - if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable "${flags} additional_flags=-DNO_PROTOTYPES"] != "" } { - untested "failed to compile" - return -1 - } + if { [prepare_for_testing "failed to prepare" $binfile $srcfile $flags] } { + return -1 } - # Start with a fresh gdb. - gdb_exit - gdb_start - gdb_reinitialize_dir $srcdir/$subdir - gdb_load ${binfile} - # Make certain that the output is consistent with_test_prefix "types=$types" { gdb_test_no_output "set print sevenbit-strings" diff -Nru gdb-9.1/gdb/testsuite/gdb.base/style.c gdb-10.2/gdb/testsuite/gdb.base/style.c --- gdb-9.1/gdb/testsuite/gdb.base/style.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/style.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,8 @@ -/* Copyright 2018-2020 Free Software Foundation, Inc. + + +/* The leading newlines here are intentional, do not remove. They are used to + test that the source highlighter doesn't strip them. */ +/* Copyright 2018-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -15,6 +19,21 @@ #define SOME_MACRO 23 +enum etype +{ + VALUE_ONE = 1, + VALUE_TWO = 2 +}; + +struct some_struct +{ + int int_field; + char *string_field; + enum etype e_field; +}; + +struct some_struct struct_value = { 23, "skidoo", VALUE_TWO }; + int some_called_function (void) { return 0; diff -Nru gdb-9.1/gdb/testsuite/gdb.base/style.exp gdb-10.2/gdb/testsuite/gdb.base/style.exp --- gdb-9.1/gdb/testsuite/gdb.base/style.exp 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/style.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2018-2020 Free Software Foundation, Inc. +# Copyright 2018-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -34,11 +34,18 @@ return -1 } + set readnow [readnow] + if {![runto_main]} { fail "style tests failed" return } + # Check that the source highlighter has not stripped away the leading + # newlines. + set main_line [gdb_get_line_number "break here"] + gdb_test "list $main_line,$main_line" "return.*some_called_function.*" + gdb_test_no_output "set style enabled on" set main_expr [style main function] @@ -79,14 +86,22 @@ } if {$test_macros} { + set macro_line [gdb_get_line_number "\#define SOME_MACRO"] gdb_test "info macro SOME_MACRO" \ - "Defined at $base_file_expr:16\r\n#define SOME_MACRO 23" + "Defined at $base_file_expr:$macro_line\r\n#define SOME_MACRO 23" } set func [style some_called_function function] # Somewhere should see the call to the function. gdb_test "disassemble main" "[style $hex address].*$func.*" + set ifield [style int_field variable] + set sfield [style string_field variable] + set efield [style e_field variable] + set evalue [style VALUE_TWO variable] + gdb_test "print struct_value" \ + "\{$ifield = 23,.*$sfield = .*,.*$efield = $evalue.*" + gdb_exit gdb_spawn @@ -105,7 +120,7 @@ [multi_line \ "List of classes of commands:" \ "" \ - "${aliases_expr} -- Aliases of other commands\." \ + "${aliases_expr} -- User-defined aliases of other commands\." \ "${breakpoints_expr} -- Making program stop at certain points\." \ ".*" \ ] \ @@ -117,18 +132,27 @@ gdb_test "apropos -v cut for 'thre" \ [multi_line \ "" \ - "${taas_expr} --.*" \ + "${taas_expr}" \ + "Apply a command to all .*" \ "Usage:.*" \ "short${cut_for_thre_expr}ad apply.*" \ "" \ - "${tfaas_expr} --.*" \ + "${tfaas_expr}" \ + "Apply a command to all .*" \ "Usage:.*" \ "short${cut_for_thre_expr}ad apply.*" \ ] set quoted [string_to_regexp $binfile] + set pass_re "Reading symbols from [style $quoted file]\.\.\." + if { $readnow } { + set pass_re \ + [multi_line \ + $pass_re \ + "Expanding full symbols from [style $quoted file]\.\.\."] + } gdb_test "file $binfile" \ - "Reading symbols from [style $quoted file]..." \ + $pass_re \ "filename is styled when loading symbol file" gdb_test "pwd" "Working directory [style .*? file].*" @@ -139,4 +163,10 @@ gdb_test "show logging file" \ "The current logfile is \"[style .*? file]\"\\..*" + + # Check warnings are styled by setting a rubbish data directory. + gdb_test "set data-directory Makefile" \ + "warning: [style .*? file] is not a directory\\..*" + gdb_test "show data-directory" \ + "GDB's data directory is \"[style .*? file]\"\\..*" } diff -Nru gdb-9.1/gdb/testsuite/gdb.base/style-logging.exp gdb-10.2/gdb/testsuite/gdb.base/style-logging.exp --- gdb-9.1/gdb/testsuite/gdb.base/style-logging.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/style-logging.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/subst.exp gdb-10.2/gdb/testsuite/gdb.base/subst.exp --- gdb-9.1/gdb/testsuite/gdb.base/subst.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/subst.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2006-2020 Free Software Foundation, Inc. +# Copyright 2006-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/symbol-alias2.c gdb-10.2/gdb/testsuite/gdb.base/symbol-alias2.c --- gdb-9.1/gdb/testsuite/gdb.base/symbol-alias2.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/symbol-alias2.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This test is part of GDB, the GNU debugger. - Copyright 2017-2020 Free Software Foundation, Inc. + Copyright 2017-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/symbol-alias.c gdb-10.2/gdb/testsuite/gdb.base/symbol-alias.c --- gdb-9.1/gdb/testsuite/gdb.base/symbol-alias.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/symbol-alias.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This test is part of GDB, the GNU debugger. - Copyright 2017-2020 Free Software Foundation, Inc. + Copyright 2017-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/symbol-alias.exp gdb-10.2/gdb/testsuite/gdb.base/symbol-alias.exp --- gdb-9.1/gdb/testsuite/gdb.base/symbol-alias.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/symbol-alias.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ # Test for printing alias symbols. -# Copyright 2017-2020 Free Software Foundation, Inc. +# Copyright 2017-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/symbol-without-target_section.c gdb-10.2/gdb/testsuite/gdb.base/symbol-without-target_section.c --- gdb-9.1/gdb/testsuite/gdb.base/symbol-without-target_section.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/symbol-without-target_section.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/symbol-without-target_section.exp gdb-10.2/gdb/testsuite/gdb.base/symbol-without-target_section.exp --- gdb-9.1/gdb/testsuite/gdb.base/symbol-without-target_section.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/symbol-without-target_section.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/sym-file.exp gdb-10.2/gdb/testsuite/gdb.base/sym-file.exp --- gdb-9.1/gdb/testsuite/gdb.base/sym-file.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/sym-file.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/sym-file-lib.c gdb-10.2/gdb/testsuite/gdb.base/sym-file-lib.c --- gdb-9.1/gdb/testsuite/gdb.base/sym-file-lib.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/sym-file-lib.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2013-2020 Free Software Foundation, Inc. +/* Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or diff -Nru gdb-9.1/gdb/testsuite/gdb.base/sym-file-loader.c gdb-10.2/gdb/testsuite/gdb.base/sym-file-loader.c --- gdb-9.1/gdb/testsuite/gdb.base/sym-file-loader.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/sym-file-loader.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2013-2020 Free Software Foundation, Inc. +/* Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or @@ -20,6 +20,7 @@ #include <stdlib.h> #include <string.h> #include <sys/mman.h> +#include <assert.h> #include "sym-file-loader.h" @@ -112,6 +113,8 @@ mapped_addr = (uint8_t *) mmap ((void *) GETADDR (phdr, p_vaddr), GET (phdr, p_memsz), perm, MAP_ANONYMOUS | MAP_PRIVATE, -1, 0); + assert (mapped_addr != MAP_FAILED); + mapped_size = GET (phdr, p_memsz); from = (void *) (addr + GET (phdr, p_offset)); @@ -255,7 +258,7 @@ } addr = (uint8_t *) mmap (NULL, fsize, PROT_READ, MAP_PRIVATE, fd, 0); - if (addr == (uint8_t *) -1) + if (addr == MAP_FAILED) { perror ("mmap failed."); return NULL; diff -Nru gdb-9.1/gdb/testsuite/gdb.base/sym-file-loader.h gdb-10.2/gdb/testsuite/gdb.base/sym-file-loader.h --- gdb-9.1/gdb/testsuite/gdb.base/sym-file-loader.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/sym-file-loader.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2013-2020 Free Software Foundation, Inc. +/* Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or diff -Nru gdb-9.1/gdb/testsuite/gdb.base/sym-file-main.c gdb-10.2/gdb/testsuite/gdb.base/sym-file-main.c --- gdb-9.1/gdb/testsuite/gdb.base/sym-file-main.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/sym-file-main.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2013-2020 Free Software Foundation, Inc. +/* Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or diff -Nru gdb-9.1/gdb/testsuite/gdb.base/symfile-warn.c gdb-10.2/gdb/testsuite/gdb.base/symfile-warn.c --- gdb-9.1/gdb/testsuite/gdb.base/symfile-warn.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/symfile-warn.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2019-2020 Free Software Foundation, Inc. + Copyright 2019-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/symfile-warn.exp gdb-10.2/gdb/testsuite/gdb.base/symfile-warn.exp --- gdb-9.1/gdb/testsuite/gdb.base/symfile-warn.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/symfile-warn.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/symlink-sourcefile.c gdb-10.2/gdb/testsuite/gdb.base/symlink-sourcefile.c --- gdb-9.1/gdb/testsuite/gdb.base/symlink-sourcefile.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/symlink-sourcefile.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2019-2020 Free Software Foundation, Inc. +/* Copyright 2019-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/symlink-sourcefile.exp gdb-10.2/gdb/testsuite/gdb.base/symlink-sourcefile.exp --- gdb-9.1/gdb/testsuite/gdb.base/symlink-sourcefile.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/symlink-sourcefile.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/symtab-search-order-1.c gdb-10.2/gdb/testsuite/gdb.base/symtab-search-order-1.c --- gdb-9.1/gdb/testsuite/gdb.base/symtab-search-order-1.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/symtab-search-order-1.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/symtab-search-order.c gdb-10.2/gdb/testsuite/gdb.base/symtab-search-order.c --- gdb-9.1/gdb/testsuite/gdb.base/symtab-search-order.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/symtab-search-order.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/symtab-search-order.exp gdb-10.2/gdb/testsuite/gdb.base/symtab-search-order.exp --- gdb-9.1/gdb/testsuite/gdb.base/symtab-search-order.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/symtab-search-order.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/symtab-search-order-shlib-1.c gdb-10.2/gdb/testsuite/gdb.base/symtab-search-order-shlib-1.c --- gdb-9.1/gdb/testsuite/gdb.base/symtab-search-order-shlib-1.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/symtab-search-order-shlib-1.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/term.c gdb-10.2/gdb/testsuite/gdb.base/term.c --- gdb-9.1/gdb/testsuite/gdb.base/term.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/term.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/term.exp gdb-10.2/gdb/testsuite/gdb.base/term.exp --- gdb-9.1/gdb/testsuite/gdb.base/term.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/term.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1988-2020 Free Software Foundation, Inc. +# Copyright 1988-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/testenv.c gdb-10.2/gdb/testsuite/gdb.base/testenv.c --- gdb-9.1/gdb/testsuite/gdb.base/testenv.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/testenv.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/testenv.exp gdb-10.2/gdb/testsuite/gdb.base/testenv.exp --- gdb-9.1/gdb/testsuite/gdb.base/testenv.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/testenv.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/trace-commands.exp gdb-10.2/gdb/testsuite/gdb.base/trace-commands.exp --- gdb-9.1/gdb/testsuite/gdb.base/trace-commands.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/trace-commands.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2006-2020 Free Software Foundation, Inc. +# Copyright 2006-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/twice.exp gdb-10.2/gdb/testsuite/gdb.base/twice.exp --- gdb-9.1/gdb/testsuite/gdb.base/twice.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/twice.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1997-2020 Free Software Foundation, Inc. +# Copyright 1997-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/type-opaque.exp gdb-10.2/gdb/testsuite/gdb.base/type-opaque.exp --- gdb-9.1/gdb/testsuite/gdb.base/type-opaque.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/type-opaque.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2004-2020 Free Software Foundation, Inc. +# Copyright 2004-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/type-opaque-lib.c gdb-10.2/gdb/testsuite/gdb.base/type-opaque-lib.c --- gdb-9.1/gdb/testsuite/gdb.base/type-opaque-lib.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/type-opaque-lib.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Test resolving of an opaque type from the loaded shared library. - Copyright 2007-2020 Free Software Foundation, Inc. + Copyright 2007-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.base/type-opaque-main.c gdb-10.2/gdb/testsuite/gdb.base/type-opaque-main.c --- gdb-9.1/gdb/testsuite/gdb.base/type-opaque-main.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/type-opaque-main.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Test resolving of an opaque type from the loaded shared library. - Copyright 2007-2020 Free Software Foundation, Inc. + Copyright 2007-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.base/ui-redirect.exp gdb-10.2/gdb/testsuite/gdb.base/ui-redirect.exp --- gdb-9.1/gdb/testsuite/gdb.base/ui-redirect.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/ui-redirect.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2010-2020 Free Software Foundation, Inc. +# Copyright (C) 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -117,7 +117,7 @@ gdb_test "set debug infrun 1" gdb_test "set logging on" \ "Copying output to /dev/null.*Copying debug output to /dev/null\\." - gdb_test "continue" "Continuing.*infrun:.*infrun:.*Breakpoint \[0-9\]+, foo.*" + gdb_test "continue" {Continuing.*\[infrun\] .*\[infrun\] .*Breakpoint [0-9]+, foo.*} gdb_test "set debug infrun 0" gdb_test "set logging off" "Done logging to /dev/null\\." gdb_test "help" "List of classes of commands:.*" diff -Nru gdb-9.1/gdb/testsuite/gdb.base/unload.c gdb-10.2/gdb/testsuite/gdb.base/unload.c --- gdb-9.1/gdb/testsuite/gdb.base/unload.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/unload.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2004-2020 Free Software Foundation, Inc. + Copyright 2004-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/unload.exp gdb-10.2/gdb/testsuite/gdb.base/unload.exp --- gdb-9.1/gdb/testsuite/gdb.base/unload.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/unload.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2003-2020 Free Software Foundation, Inc. +# Copyright 2003-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/unloadshr2.c gdb-10.2/gdb/testsuite/gdb.base/unloadshr2.c --- gdb-9.1/gdb/testsuite/gdb.base/unloadshr2.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/unloadshr2.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2009-2020 Free Software Foundation, Inc. + Copyright 2009-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/unloadshr.c gdb-10.2/gdb/testsuite/gdb.base/unloadshr.c --- gdb-9.1/gdb/testsuite/gdb.base/unloadshr.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/unloadshr.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2004-2020 Free Software Foundation, Inc. + Copyright 2004-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/until.exp gdb-10.2/gdb/testsuite/gdb.base/until.exp --- gdb-9.1/gdb/testsuite/gdb.base/until.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/until.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2003-2020 Free Software Foundation, Inc. +# Copyright 2003-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/until-nodebug.exp gdb-10.2/gdb/testsuite/gdb.base/until-nodebug.exp --- gdb-9.1/gdb/testsuite/gdb.base/until-nodebug.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/until-nodebug.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/unwindonsignal.c gdb-10.2/gdb/testsuite/gdb.base/unwindonsignal.c --- gdb-9.1/gdb/testsuite/gdb.base/unwindonsignal.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/unwindonsignal.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2008-2020 Free Software Foundation, Inc. + Copyright 2008-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/unwindonsignal.exp gdb-10.2/gdb/testsuite/gdb.base/unwindonsignal.exp --- gdb-9.1/gdb/testsuite/gdb.base/unwindonsignal.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/unwindonsignal.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/utf8-identifiers.c gdb-10.2/gdb/testsuite/gdb.base/utf8-identifiers.c --- gdb-9.1/gdb/testsuite/gdb.base/utf8-identifiers.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/utf8-identifiers.c 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2017-2020 Free Software Foundation, Inc. + Copyright 2017-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/utf8-identifiers.exp gdb-10.2/gdb/testsuite/gdb.base/utf8-identifiers.exp --- gdb-9.1/gdb/testsuite/gdb.base/utf8-identifiers.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/utf8-identifiers.exp 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2017-2020 Free Software Foundation, Inc. +# Copyright 2017-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/valgrind-bt.c gdb-10.2/gdb/testsuite/gdb.base/valgrind-bt.c --- gdb-9.1/gdb/testsuite/gdb.base/valgrind-bt.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/valgrind-bt.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2009-2020 Free Software Foundation, Inc. + Copyright 2009-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/valgrind-bt.exp gdb-10.2/gdb/testsuite/gdb.base/valgrind-bt.exp --- gdb-9.1/gdb/testsuite/gdb.base/valgrind-bt.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/valgrind-bt.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2009-2020 Free Software Foundation, Inc. +# Copyright 2009-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/valgrind-disp-step.c gdb-10.2/gdb/testsuite/gdb.base/valgrind-disp-step.c --- gdb-9.1/gdb/testsuite/gdb.base/valgrind-disp-step.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/valgrind-disp-step.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -18,6 +18,7 @@ static int foo (void) { + return 0; } int diff -Nru gdb-9.1/gdb/testsuite/gdb.base/valgrind-disp-step.exp gdb-10.2/gdb/testsuite/gdb.base/valgrind-disp-step.exp --- gdb-9.1/gdb/testsuite/gdb.base/valgrind-disp-step.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/valgrind-disp-step.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/valgrind-infcall-2.c gdb-10.2/gdb/testsuite/gdb.base/valgrind-infcall-2.c --- gdb-9.1/gdb/testsuite/gdb.base/valgrind-infcall-2.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/valgrind-infcall-2.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,25 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include <unistd.h> + +int +main (void) +{ + sleep (60); + return 0; +} diff -Nru gdb-9.1/gdb/testsuite/gdb.base/valgrind-infcall-2.exp gdb-10.2/gdb/testsuite/gdb.base/valgrind-infcall-2.exp --- gdb-9.1/gdb/testsuite/gdb.base/valgrind-infcall-2.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/valgrind-infcall-2.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,75 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# This test-case tests the scenario for the crash fixed by commit ee3c5f8968 +# "Fix GDB crash when registers cannot be modified": +# $ valgrind /usr/bin/sleep 10000 +# ==31595== Memcheck, a memory error detector +# ==31595== Command: /usr/bin/sleep 10000 +# ==31595== +# $ gdb /usr/bin/sleep +# (gdb) target remote | vgdb --pid=31595 +# Remote debugging using | vgdb --pid=31595 +# ... +# $hex in __GI___nanosleep () at nanosleep.c:27 +# 27 return SYSCALL_CANCEL (nanosleep, requested_time, remaining); +# (gdb) p printf ("bla") +# terminate called after throwing an instance of 'gdb_exception_error' +# Aborted (core dumped) + +load_lib valgrind.exp + +if [is_remote target] { + # The test always runs locally. + return 0 +} + +standard_testfile .c +if {[build_executable $testfile.exp $testfile $srcfile {debug}] == -1} { + return -1 +} + +set active_at_startup 0 +if { [vgdb_start $active_at_startup] == -1 } { + return -1 +} + +# Determine whether we're at nanosleep. +gdb_test_multiple "bt 1" "do printf" { + -re -wrap "nanosleep.*" { + # If gdb doesn't crash, we get something like: + # (gdb) p printf ("bla") + # Could not write register "rdi"; remote failure reply 'E. + # ERROR changing register rdi regno 5 + # gdb commands changing registers (pc, sp, ...) (e.g. 'jump', + # set pc, calling from gdb a function in the debugged process, ...) + # can only be accepted if the thread is VgTs_Runnable or VgTs_Yielding + # state + # Thread status is VgTs_WaitSys + # ' + # (gdb) + gdb_test "p (int)printf (\"bla\")" \ + "can only be accepted if the thread is .*" \ + $gdb_test_name + } + -re -wrap "" { + # For some reason the error condition does not trigger if we're not + # at nanosleep at the point that we're connecting to vgdb. See also + # comment at "exec sleep 1" in vgdb_start. + unsupported $gdb_test_name + } +} + +vgdb_stop diff -Nru gdb-9.1/gdb/testsuite/gdb.base/valgrind-infcall.c gdb-10.2/gdb/testsuite/gdb.base/valgrind-infcall.c --- gdb-9.1/gdb/testsuite/gdb.base/valgrind-infcall.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/valgrind-infcall.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/valgrind-infcall.exp gdb-10.2/gdb/testsuite/gdb.base/valgrind-infcall.exp --- gdb-9.1/gdb/testsuite/gdb.base/valgrind-infcall.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/valgrind-infcall.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/value-double-free.c gdb-10.2/gdb/testsuite/gdb.base/value-double-free.c --- gdb-9.1/gdb/testsuite/gdb.base/value-double-free.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/value-double-free.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2008-2020 Free Software Foundation, Inc. + Copyright 2008-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/value-double-free.exp gdb-10.2/gdb/testsuite/gdb.base/value-double-free.exp --- gdb-9.1/gdb/testsuite/gdb.base/value-double-free.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/value-double-free.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/varargs.exp gdb-10.2/gdb/testsuite/gdb.base/varargs.exp --- gdb-9.1/gdb/testsuite/gdb.base/varargs.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/varargs.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1997-2020 Free Software Foundation, Inc. +# Copyright 1997-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -29,8 +29,6 @@ -set prototypes 0 - standard_testfile .c if [get_compiler_info] { @@ -101,12 +99,12 @@ global gdb_prompt set test "print find_max_float_real(4, fc1, fc2, fc3, fc4)" - gdb_test $test ".*= 4 \\+ 4 \\* I" + gdb_test $test ".*= 4 \\+ 4i" set test "print find_max_double_real(4, dc1, dc2, dc3, dc4)" - gdb_test $test ".*= 4 \\+ 4 \\* I" + gdb_test $test ".*= 4 \\+ 4i" set test "print find_max_long_double_real(4, ldc1, ldc2, ldc3, ldc4)" - gdb_test $test ".*= 4 \\+ 4 \\* I" + gdb_test $test ".*= 4 \\+ 4i" } diff -Nru gdb-9.1/gdb/testsuite/gdb.base/vdso-warning.c gdb-10.2/gdb/testsuite/gdb.base/vdso-warning.c --- gdb-9.1/gdb/testsuite/gdb.base/vdso-warning.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/vdso-warning.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/vdso-warning.exp gdb-10.2/gdb/testsuite/gdb.base/vdso-warning.exp --- gdb-9.1/gdb/testsuite/gdb.base/vdso-warning.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/vdso-warning.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/vforked-prog.c gdb-10.2/gdb/testsuite/gdb.base/vforked-prog.c --- gdb-9.1/gdb/testsuite/gdb.base/vforked-prog.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/vforked-prog.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 1997-2020 Free Software Foundation, Inc. + Copyright 1997-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/vla-datatypes.c gdb-10.2/gdb/testsuite/gdb.base/vla-datatypes.c --- gdb-9.1/gdb/testsuite/gdb.base/vla-datatypes.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/vla-datatypes.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -46,27 +46,6 @@ BAR bar_vla[n]; int i; - struct vla_struct - { - int something; - int vla_field[n]; - } vla_struct_object; - - struct inner_vla_struct - { - int something; - int vla_field[n]; - int after; - } inner_vla_struct_object; - - union vla_union - { - int vla_field[n]; - } vla_union_object; - - vla_struct_object.something = n; - inner_vla_struct_object.something = n; - inner_vla_struct_object.after = n; for (i = 0; i < n; i++) { int_vla[i] = i*2; @@ -82,9 +61,6 @@ foo_vla[i].a = i*2; bar_vla[i].x = i*2; bar_vla[i].y.a = i*2; - vla_struct_object.vla_field[i] = i*2; - vla_union_object.vla_field[i] = i*2; - inner_vla_struct_object.vla_field[i] = i*2; } size_t int_size = sizeof(int_vla); /* vlas_filled */ @@ -98,9 +74,6 @@ size_t uchar_size = sizeof(unsigned_char_vla); size_t foo_size = sizeof(foo_vla); size_t bar_size = sizeof(bar_vla); - size_t vla_struct_object_size = sizeof(vla_struct_object); - size_t vla_union_object_size = sizeof(vla_union_object); - size_t inner_vla_struct_object_size = sizeof(inner_vla_struct_object); return; /* break_end_of_vla_factory */ } diff -Nru gdb-9.1/gdb/testsuite/gdb.base/vla-datatypes.exp gdb-10.2/gdb/testsuite/gdb.base/vla-datatypes.exp --- gdb-9.1/gdb/testsuite/gdb.base/vla-datatypes.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/vla-datatypes.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -41,10 +41,6 @@ "\\\{\\\{a = 0\\\}, \\\{a = 2\\\}, \\\{a = 4\\\}, \\\{a = 6\\\}, \\\{a = 8\\\}\\\}" gdb_test "print bar_vla" \ "\\\{\\\{x = 0, y = \\\{a = 0\\\}\\\}, \\\{x = 2, y = \\\{a = 2\\\}\\\}, \\\{x = 4, y = \\\{a = 4\\\}\\\}, \\\{x = 6, y = \\\{a = 6\\\}\\\}, \\\{x = 8, y = \\\{a = 8\\\}\\\}\\\}" -gdb_test "print vla_struct_object" \ - "\\\{something = 5, vla_field = \\\{0, 2, 4, 6, 8\\\}\\\}" -gdb_test "print vla_union_object" \ - "\\\{vla_field = \\\{0, 2, 4, 6, 8\\\}\\\}" # Check whatis of VLA's. gdb_test "whatis int_vla" "type = int \\\[5\\\]" @@ -61,8 +57,6 @@ gdb_test "whatis unsigned_char_vla" "type = unsigned char \\\[5\\\]" gdb_test "whatis foo_vla" "type = struct foo \\\[5\\\]" gdb_test "whatis bar_vla" "type = BAR \\\[5\\\]" -gdb_test "whatis vla_struct_object" "type = struct vla_struct" -gdb_test "whatis vla_union_object" "type = union vla_union" # Check ptype of VLA's. gdb_test "ptype int_vla" "type = int \\\[5\\\]" @@ -78,10 +72,6 @@ gdb_test "ptype foo_vla" "type = struct foo {\r\n\\s+int a;\r\n} \\\[5\\\]" gdb_test "ptype bar_vla" \ "type = struct bar {\r\n\\s+int x;\r\n\\s+struct foo y;\r\n} \\\[5\\\]" -gdb_test "ptype vla_struct_object" \ - "type = struct vla_struct {\r\n\\s+int something;\r\n\\s+int vla_field\\\[5\\\];\r\n}" -gdb_test "ptype vla_union_object" \ - "type = union vla_union {\r\n\\s+int vla_field\\\[5\\\];\r\n}" # Check the size of the VLA's. gdb_breakpoint [gdb_get_line_number "break_end_of_vla_factory"] @@ -105,10 +95,6 @@ "size of unsigned_char_vla" gdb_test "print foo_size == sizeof(foo_vla)" " = 1" "size of foo_vla" gdb_test "print bar_size == sizeof(bar_vla)" " = 1" "size of bar_vla" -gdb_test "print vla_struct_object_size == sizeof(vla_struct_object)" \ - " = 1" "size of vla_struct_object" -gdb_test "print vla_union_object_size == sizeof(vla_union_object)" \ - " = 1" "size of vla_union_object" # Check side effects for sizeof argument. set sizeof_int [get_sizeof "int" 4] @@ -126,9 +112,3 @@ gdb_test "whatis ++int_vla\[0\]" "type = int" gdb_test "print int_vla\[0\]" " = 42" \ "print int_vla\[0\] - whatis no side effects" - -# Fails due to incorrect debugging information generated by GCC. -setup_xfail "*-*-*" -gdb_test \ - "print inner_vla_struct_object_size == sizeof(inner_vla_struct_object)" \ - " = 1" "size of inner_vla_struct_object" diff -Nru gdb-9.1/gdb/testsuite/gdb.base/vla-optimized-out.c gdb-10.2/gdb/testsuite/gdb.base/vla-optimized-out.c --- gdb-9.1/gdb/testsuite/gdb.base/vla-optimized-out.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/vla-optimized-out.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2018-2020 Free Software Foundation, Inc. + Copyright 2018-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/vla-optimized-out.exp gdb-10.2/gdb/testsuite/gdb.base/vla-optimized-out.exp --- gdb-9.1/gdb/testsuite/gdb.base/vla-optimized-out.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/vla-optimized-out.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2018-2020 Free Software Foundation, Inc. +# Copyright 2018-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/vla-ptr.c gdb-10.2/gdb/testsuite/gdb.base/vla-ptr.c --- gdb-9.1/gdb/testsuite/gdb.base/vla-ptr.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/vla-ptr.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/vla-ptr.exp gdb-10.2/gdb/testsuite/gdb.base/vla-ptr.exp --- gdb-9.1/gdb/testsuite/gdb.base/vla-ptr.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/vla-ptr.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/vla-sideeffect.c gdb-10.2/gdb/testsuite/gdb.base/vla-sideeffect.c --- gdb-9.1/gdb/testsuite/gdb.base/vla-sideeffect.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/vla-sideeffect.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/vla-sideeffect.exp gdb-10.2/gdb/testsuite/gdb.base/vla-sideeffect.exp --- gdb-9.1/gdb/testsuite/gdb.base/vla-sideeffect.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/vla-sideeffect.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/vla-struct-fields.c gdb-10.2/gdb/testsuite/gdb.base/vla-struct-fields.c --- gdb-9.1/gdb/testsuite/gdb.base/vla-struct-fields.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/vla-struct-fields.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,104 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2014-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include <stddef.h> +#define SIZE 5 + +struct foo +{ + int a; +}; + +typedef struct bar +{ + int x; + struct foo y; +} BAR; + +void +vla_factory (int n) +{ + struct vla_struct + { + int something; + int vla_field[n]; + }; + /* Define a typedef for a VLA structure. */ + typedef struct vla_struct vla_struct_typedef; + vla_struct_typedef vla_struct_object; + + struct inner_vla_struct + { + int something; + int vla_field[n]; + int after; + } inner_vla_struct_object; + + /* Define a structure which uses a typedef for the VLA field + to make sure that GDB creates the proper type for this field, + preventing a possible assertion failure (see gdb/21356). */ + struct vla_struct_typedef_struct_member + { + int something; + vla_struct_typedef vla_object; + } vla_struct_typedef_struct_member_object; + + union vla_union + { + int vla_field[n]; + } vla_union_object; + + /* Like vla_struct_typedef_struct_member but a union type. */ + union vla_struct_typedef_union_member + { + int something; + vla_struct_typedef vla_object; + } vla_struct_typedef_union_member_object; + int i; + + vla_struct_object.something = n; + inner_vla_struct_object.something = n; + inner_vla_struct_object.after = n; + vla_struct_typedef_struct_member_object.something = n * 2; + vla_struct_typedef_struct_member_object.vla_object.something = n * 3; + vla_struct_typedef_union_member_object.vla_object.something = n + 1; + + for (i = 0; i < n; i++) + { + vla_struct_object.vla_field[i] = i*2; + vla_union_object.vla_field[i] = i*2; + inner_vla_struct_object.vla_field[i] = i*2; + vla_struct_typedef_struct_member_object.vla_object.vla_field[i] + = i * 3; + vla_struct_typedef_union_member_object.vla_object.vla_field[i] + = i * 3 - 1; + } + + size_t vla_struct_object_size + = sizeof(vla_struct_object); /* vlas_filled */ + size_t vla_union_object_size = sizeof(vla_union_object); + size_t inner_vla_struct_object_size = sizeof(inner_vla_struct_object); + + return; /* break_end_of_vla_factory */ +} + +int +main (void) +{ + vla_factory(SIZE); + return 0; +} diff -Nru gdb-9.1/gdb/testsuite/gdb.base/vla-struct-fields.exp gdb-10.2/gdb/testsuite/gdb.base/vla-struct-fields.exp --- gdb-9.1/gdb/testsuite/gdb.base/vla-struct-fields.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/vla-struct-fields.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,67 @@ +# Copyright 2014-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +standard_testfile + +# Clang says it will never support variable length arrays in structures. +if {[test_compiler_info clang*]} { + unsupported "compiler does not support variable length arrays in structure" + return +} + +if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile}] } { + return -1 +} + +if ![runto_main] { + return -1 +} + +gdb_breakpoint [gdb_get_line_number "vlas_filled"] +gdb_continue_to_breakpoint "vlas_filled" + +# Check the values of VLA's. +gdb_test "print vla_struct_object" \ + "\\\{something = 5, vla_field = \\\{0, 2, 4, 6, 8\\\}\\\}" +gdb_test "print vla_union_object" \ + "\\\{vla_field = \\\{0, 2, 4, 6, 8\\\}\\\}" +gdb_test "print vla_struct_typedef_struct_member_object" \ + "\\\{something = 10, vla_object = \\\{something = 15, vla_field = \\\{0, 3, 6, 9, 12\\\}\\\}\\\}" +gdb_test "print vla_struct_typedef_union_member_object" \ + "\\\{something = 6, vla_object = \\\{something = 6, vla_field = \\\{-1, 2, 5, 8, 11\\\}\\\}\\\}" + +# Check whatis of VLA's. +gdb_test "whatis vla_struct_object" "type = vla_struct_typedef" +gdb_test "whatis vla_union_object" "type = union vla_union" + +# Check ptype of VLA's. +gdb_test "ptype vla_struct_object" \ + "type = struct vla_struct {\r\n\\s+int something;\r\n\\s+int vla_field\\\[5\\\];\r\n}" +gdb_test "ptype vla_union_object" \ + "type = union vla_union {\r\n\\s+int vla_field\\\[5\\\];\r\n}" + +# Check the size of the VLA's. +gdb_breakpoint [gdb_get_line_number "break_end_of_vla_factory"] +gdb_continue_to_breakpoint "break_end_of_vla_factory" +gdb_test "print vla_struct_object_size == sizeof(vla_struct_object)" \ + " = 1" "size of vla_struct_object" +gdb_test "print vla_union_object_size == sizeof(vla_union_object)" \ + " = 1" "size of vla_union_object" + +# Fails due to incorrect debugging information generated by GCC. +setup_xfail "*-*-*" +gdb_test \ + "print inner_vla_struct_object_size == sizeof(inner_vla_struct_object)" \ + " = 1" "size of inner_vla_struct_object" diff -Nru gdb-9.1/gdb/testsuite/gdb.base/vla-stub.c gdb-10.2/gdb/testsuite/gdb.base/vla-stub.c --- gdb-9.1/gdb/testsuite/gdb.base/vla-stub.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/vla-stub.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/vla-stub-define.c gdb-10.2/gdb/testsuite/gdb.base/vla-stub-define.c --- gdb-9.1/gdb/testsuite/gdb.base/vla-stub-define.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/vla-stub-define.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/vla-stub.exp gdb-10.2/gdb/testsuite/gdb.base/vla-stub.exp --- gdb-9.1/gdb/testsuite/gdb.base/vla-stub.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/vla-stub.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/volatile.exp gdb-10.2/gdb/testsuite/gdb.base/volatile.exp --- gdb-9.1/gdb/testsuite/gdb.base/volatile.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/volatile.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1997-2020 Free Software Foundation, Inc. +# Copyright 1997-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/warning.exp gdb-10.2/gdb/testsuite/gdb.base/warning.exp --- gdb-9.1/gdb/testsuite/gdb.base/warning.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/warning.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2018-2020 Free Software Foundation, Inc. +# Copyright 2018-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/watch-bitfields.c gdb-10.2/gdb/testsuite/gdb.base/watch-bitfields.c --- gdb-9.1/gdb/testsuite/gdb.base/watch-bitfields.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/watch-bitfields.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/watch-bitfields.exp gdb-10.2/gdb/testsuite/gdb.base/watch-bitfields.exp --- gdb-9.1/gdb/testsuite/gdb.base/watch-bitfields.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/watch-bitfields.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/watch-cond.c gdb-10.2/gdb/testsuite/gdb.base/watch-cond.c --- gdb-9.1/gdb/testsuite/gdb.base/watch-cond.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/watch-cond.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -23,6 +23,7 @@ (*foo)++; global++; global2++; + return 0; } void func2(int *foo) diff -Nru gdb-9.1/gdb/testsuite/gdb.base/watch-cond.exp gdb-10.2/gdb/testsuite/gdb.base/watch-cond.exp --- gdb-9.1/gdb/testsuite/gdb.base/watch-cond.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/watch-cond.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/watch-cond-infcall.c gdb-10.2/gdb/testsuite/gdb.base/watch-cond-infcall.c --- gdb-9.1/gdb/testsuite/gdb.base/watch-cond-infcall.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/watch-cond-infcall.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/watch-cond-infcall.exp gdb-10.2/gdb/testsuite/gdb.base/watch-cond-infcall.exp --- gdb-9.1/gdb/testsuite/gdb.base/watch-cond-infcall.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/watch-cond-infcall.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/watch-non-mem.c gdb-10.2/gdb/testsuite/gdb.base/watch-non-mem.c --- gdb-9.1/gdb/testsuite/gdb.base/watch-non-mem.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/watch-non-mem.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/watch-non-mem.exp gdb-10.2/gdb/testsuite/gdb.base/watch-non-mem.exp --- gdb-9.1/gdb/testsuite/gdb.base/watch-non-mem.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/watch-non-mem.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/watchpoint-cond-gone.c gdb-10.2/gdb/testsuite/gdb.base/watchpoint-cond-gone.c --- gdb-9.1/gdb/testsuite/gdb.base/watchpoint-cond-gone.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/watchpoint-cond-gone.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/watchpoint-cond-gone.exp gdb-10.2/gdb/testsuite/gdb.base/watchpoint-cond-gone.exp --- gdb-9.1/gdb/testsuite/gdb.base/watchpoint-cond-gone.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/watchpoint-cond-gone.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/watchpoint-cond-gone-stripped.c gdb-10.2/gdb/testsuite/gdb.base/watchpoint-cond-gone-stripped.c --- gdb-9.1/gdb/testsuite/gdb.base/watchpoint-cond-gone-stripped.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/watchpoint-cond-gone-stripped.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/watchpoint-delete.c gdb-10.2/gdb/testsuite/gdb.base/watchpoint-delete.c --- gdb-9.1/gdb/testsuite/gdb.base/watchpoint-delete.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/watchpoint-delete.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/watchpoint-delete.exp gdb-10.2/gdb/testsuite/gdb.base/watchpoint-delete.exp --- gdb-9.1/gdb/testsuite/gdb.base/watchpoint-delete.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/watchpoint-delete.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/watchpoint.exp gdb-10.2/gdb/testsuite/gdb.base/watchpoint.exp --- gdb-9.1/gdb/testsuite/gdb.base/watchpoint.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/watchpoint.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1992-2020 Free Software Foundation, Inc. +# Copyright 1992-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/watchpoint-hw-attach.c gdb-10.2/gdb/testsuite/gdb.base/watchpoint-hw-attach.c --- gdb-9.1/gdb/testsuite/gdb.base/watchpoint-hw-attach.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/watchpoint-hw-attach.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2018-2020 Free Software Foundation, Inc. + Copyright 2018-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/watchpoint-hw-attach.exp gdb-10.2/gdb/testsuite/gdb.base/watchpoint-hw-attach.exp --- gdb-9.1/gdb/testsuite/gdb.base/watchpoint-hw-attach.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/watchpoint-hw-attach.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2018-2020 Free Software Foundation, Inc. +# Copyright 2018-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/watchpoint-hw.c gdb-10.2/gdb/testsuite/gdb.base/watchpoint-hw.c --- gdb-9.1/gdb/testsuite/gdb.base/watchpoint-hw.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/watchpoint-hw.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2008-2020 Free Software Foundation, Inc. + Copyright 2008-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/watchpoint-hw.exp gdb-10.2/gdb/testsuite/gdb.base/watchpoint-hw.exp --- gdb-9.1/gdb/testsuite/gdb.base/watchpoint-hw.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/watchpoint-hw.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/watchpoint-hw-hit-once.c gdb-10.2/gdb/testsuite/gdb.base/watchpoint-hw-hit-once.c --- gdb-9.1/gdb/testsuite/gdb.base/watchpoint-hw-hit-once.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/watchpoint-hw-hit-once.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2009-2020 Free Software Foundation, Inc. + Copyright 2009-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/watchpoint-hw-hit-once.exp gdb-10.2/gdb/testsuite/gdb.base/watchpoint-hw-hit-once.exp --- gdb-9.1/gdb/testsuite/gdb.base/watchpoint-hw-hit-once.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/watchpoint-hw-hit-once.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2009-2020 Free Software Foundation, Inc. +# Copyright 2009-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/watchpoint-reuse-slot.c gdb-10.2/gdb/testsuite/gdb.base/watchpoint-reuse-slot.c --- gdb-9.1/gdb/testsuite/gdb.base/watchpoint-reuse-slot.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/watchpoint-reuse-slot.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/watchpoint-reuse-slot.exp gdb-10.2/gdb/testsuite/gdb.base/watchpoint-reuse-slot.exp --- gdb-9.1/gdb/testsuite/gdb.base/watchpoint-reuse-slot.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/watchpoint-reuse-slot.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -66,14 +66,14 @@ set srcline " for (i = 0; i < 100000; i++); /* stepi line */" set test "stepi advanced" gdb_test_multiple "stepi" $test { - -re "($hex).*[string_to_regexp $srcline]\r\n$gdb_prompt $" { - set addr $expect_out(1,string) + -re -wrap "[string_to_regexp $srcline]" { + set addr [get_valueof "/x" "\$pc" "0"] if {$addr != $cur_addr} { pass $test } else { fail $test } - set cur_addr addr + set cur_addr $addr } } } diff -Nru gdb-9.1/gdb/testsuite/gdb.base/watchpoints.c gdb-10.2/gdb/testsuite/gdb.base/watchpoints.c --- gdb-9.1/gdb/testsuite/gdb.base/watchpoints.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/watchpoints.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2009-2020 Free Software Foundation, Inc. + Copyright 2009-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/watchpoints.exp gdb-10.2/gdb/testsuite/gdb.base/watchpoints.exp --- gdb-9.1/gdb/testsuite/gdb.base/watchpoints.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/watchpoints.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2009-2020 Free Software Foundation, Inc. +# Copyright 2009-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/watchpoint-solib.c gdb-10.2/gdb/testsuite/gdb.base/watchpoint-solib.c --- gdb-9.1/gdb/testsuite/gdb.base/watchpoint-solib.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/watchpoint-solib.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2004-2020 Free Software Foundation, Inc. + Copyright 2004-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/watchpoint-solib.exp gdb-10.2/gdb/testsuite/gdb.base/watchpoint-solib.exp --- gdb-9.1/gdb/testsuite/gdb.base/watchpoint-solib.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/watchpoint-solib.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2007-2020 Free Software Foundation, Inc. +# Copyright 2007-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/watchpoint-solib-shr.c gdb-10.2/gdb/testsuite/gdb.base/watchpoint-solib-shr.c --- gdb-9.1/gdb/testsuite/gdb.base/watchpoint-solib-shr.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/watchpoint-solib-shr.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2004-2020 Free Software Foundation, Inc. + Copyright 2004-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/watchpoint-stops-at-right-insn.c gdb-10.2/gdb/testsuite/gdb.base/watchpoint-stops-at-right-insn.c --- gdb-9.1/gdb/testsuite/gdb.base/watchpoint-stops-at-right-insn.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/watchpoint-stops-at-right-insn.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/watchpoint-stops-at-right-insn.exp gdb-10.2/gdb/testsuite/gdb.base/watchpoint-stops-at-right-insn.exp --- gdb-9.1/gdb/testsuite/gdb.base/watchpoint-stops-at-right-insn.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/watchpoint-stops-at-right-insn.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/watchpoint-unaligned.c gdb-10.2/gdb/testsuite/gdb.base/watchpoint-unaligned.c --- gdb-9.1/gdb/testsuite/gdb.base/watchpoint-unaligned.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/watchpoint-unaligned.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2017-2020 Free Software Foundation, Inc. + Copyright 2017-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/watchpoint-unaligned.exp gdb-10.2/gdb/testsuite/gdb.base/watchpoint-unaligned.exp --- gdb-9.1/gdb/testsuite/gdb.base/watchpoint-unaligned.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/watchpoint-unaligned.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2017-2020 Free Software Foundation, Inc. +# Copyright 2017-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/watch-read.c gdb-10.2/gdb/testsuite/gdb.base/watch-read.c --- gdb-9.1/gdb/testsuite/gdb.base/watch-read.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/watch-read.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2009-2020 Free Software Foundation, Inc. + Copyright 2009-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/watch-read.exp gdb-10.2/gdb/testsuite/gdb.base/watch-read.exp --- gdb-9.1/gdb/testsuite/gdb.base/watch-read.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/watch-read.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/watch_thread_num.c gdb-10.2/gdb/testsuite/gdb.base/watch_thread_num.c --- gdb-9.1/gdb/testsuite/gdb.base/watch_thread_num.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/watch_thread_num.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. Copyright 1992, 1993, 1994, 1995, 1999, 2002, 2003, 2007, 2008, 2009 Free Software Foundation, Inc. diff -Nru gdb-9.1/gdb/testsuite/gdb.base/watch_thread_num.exp gdb-10.2/gdb/testsuite/gdb.base/watch_thread_num.exp --- gdb-9.1/gdb/testsuite/gdb.base/watch_thread_num.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/watch_thread_num.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2007-2020 Free Software Foundation, Inc. +# Copyright 2007-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/watch-vfork.c gdb-10.2/gdb/testsuite/gdb.base/watch-vfork.c --- gdb-9.1/gdb/testsuite/gdb.base/watch-vfork.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/watch-vfork.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2009-2020 Free Software Foundation, Inc. + Copyright 2009-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/watch-vfork.exp gdb-10.2/gdb/testsuite/gdb.base/watch-vfork.exp --- gdb-9.1/gdb/testsuite/gdb.base/watch-vfork.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/watch-vfork.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2009-2020 Free Software Foundation, Inc. +# Copyright 2009-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/wchar.c gdb-10.2/gdb/testsuite/gdb.base/wchar.c --- gdb-9.1/gdb/testsuite/gdb.base/wchar.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/wchar.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/wchar.exp gdb-10.2/gdb/testsuite/gdb.base/wchar.exp --- gdb-9.1/gdb/testsuite/gdb.base/wchar.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/wchar.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/weaklib1.c gdb-10.2/gdb/testsuite/gdb.base/weaklib1.c --- gdb-9.1/gdb/testsuite/gdb.base/weaklib1.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/weaklib1.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2006-2020 Free Software Foundation, Inc. + Copyright 2006-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/weaklib2.c gdb-10.2/gdb/testsuite/gdb.base/weaklib2.c --- gdb-9.1/gdb/testsuite/gdb.base/weaklib2.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/weaklib2.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2006-2020 Free Software Foundation, Inc. + Copyright 2006-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/whatis.c gdb-10.2/gdb/testsuite/gdb.base/whatis.c --- gdb-9.1/gdb/testsuite/gdb.base/whatis.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/whatis.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This test program is part of GDB, the GNU debugger. - Copyright 1992-2020 Free Software Foundation, Inc. + Copyright 1992-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/whatis.exp gdb-10.2/gdb/testsuite/gdb.base/whatis.exp --- gdb-9.1/gdb/testsuite/gdb.base/whatis.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/whatis.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1988-2020 Free Software Foundation, Inc. +# Copyright 1988-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/whatis-exp.exp gdb-10.2/gdb/testsuite/gdb.base/whatis-exp.exp --- gdb-9.1/gdb/testsuite/gdb.base/whatis-exp.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/whatis-exp.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1998-2020 Free Software Foundation, Inc. +# Copyright 1998-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/whatis-ptype-typedefs.c gdb-10.2/gdb/testsuite/gdb.base/whatis-ptype-typedefs.c --- gdb-9.1/gdb/testsuite/gdb.base/whatis-ptype-typedefs.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/whatis-ptype-typedefs.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This test program is part of GDB, the GNU debugger. - Copyright 2017-2020 Free Software Foundation, Inc. + Copyright 2017-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/whatis-ptype-typedefs.exp gdb-10.2/gdb/testsuite/gdb.base/whatis-ptype-typedefs.exp --- gdb-9.1/gdb/testsuite/gdb.base/whatis-ptype-typedefs.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/whatis-ptype-typedefs.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2017-2020 Free Software Foundation, Inc. +# Copyright 2017-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/with.c gdb-10.2/gdb/testsuite/gdb.base/with.c --- gdb-9.1/gdb/testsuite/gdb.base/with.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/with.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2019-2020 Free Software Foundation, Inc. + Copyright 2019-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/with.exp gdb-10.2/gdb/testsuite/gdb.base/with.exp --- gdb-9.1/gdb/testsuite/gdb.base/with.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/with.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/with-mf.exp gdb-10.2/gdb/testsuite/gdb.base/with-mf.exp --- gdb-9.1/gdb/testsuite/gdb.base/with-mf.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/with-mf.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,34 @@ +# This testcase is part of GDB, the GNU debugger. + +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Test .gdb_index in ada language mode. + +standard_testfile with-mf-main.c with-mf-inc.c + +if {[prepare_for_testing "failed to prepare" $testfile "$srcfile $srcfile2" \ + debug]} { + return -1 +} + +if { [ensure_gdb_index $binfile] == -1 } { + return -1 +} + +clean_restart $binfile + +gdb_test "with language ada -- print g_s" \ + " = \\(a => 1, b => 2, c => 3\\)" diff -Nru gdb-9.1/gdb/testsuite/gdb.base/with-mf-inc.c gdb-10.2/gdb/testsuite/gdb.base/with-mf-inc.c --- gdb-9.1/gdb/testsuite/gdb.base/with-mf-inc.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/with-mf-inc.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,35 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +/* Non-main part of with.c. */ + +int xxx1 = 123; + +struct S +{ + int a; + int b; + int c; +}; + +struct S g_s = {1, 2, 3}; + +void +inc () +{ + g_s.a++;; +} diff -Nru gdb-9.1/gdb/testsuite/gdb.base/with-mf-main.c gdb-10.2/gdb/testsuite/gdb.base/with-mf-main.c --- gdb-9.1/gdb/testsuite/gdb.base/with-mf-main.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/with-mf-main.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,28 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +/* Main part of with.c. */ + +extern void inc (void); + +int +main () +{ + inc (); + + return 0; +} diff -Nru gdb-9.1/gdb/testsuite/gdb.base/write_mem.c gdb-10.2/gdb/testsuite/gdb.base/write_mem.c --- gdb-9.1/gdb/testsuite/gdb.base/write_mem.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/write_mem.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2018-2020 Free Software Foundation, Inc. +/* Copyright (C) 2018-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/write_mem.exp gdb-10.2/gdb/testsuite/gdb.base/write_mem.exp --- gdb-9.1/gdb/testsuite/gdb.base/write_mem.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/write_mem.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2018-2020 Free Software Foundation, Inc. +# Copyright (C) 2018-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/wrong_frame_bt_full.exp gdb-10.2/gdb/testsuite/gdb.base/wrong_frame_bt_full.exp --- gdb-9.1/gdb/testsuite/gdb.base/wrong_frame_bt_full.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/wrong_frame_bt_full.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020 Free Software Foundation, Inc. +# Copyright (C) 2015-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.base/wrong_frame_bt_full-main.c gdb-10.2/gdb/testsuite/gdb.base/wrong_frame_bt_full-main.c --- gdb-9.1/gdb/testsuite/gdb.base/wrong_frame_bt_full-main.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/wrong_frame_bt_full-main.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2015-2020 Free Software Foundation, Inc. +/* Copyright (C) 2015-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.base/wrong_frame_bt_full-opaque.c gdb-10.2/gdb/testsuite/gdb.base/wrong_frame_bt_full-opaque.c --- gdb-9.1/gdb/testsuite/gdb.base/wrong_frame_bt_full-opaque.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.base/wrong_frame_bt_full-opaque.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2015-2020 Free Software Foundation, Inc. +/* Copyright (C) 2015-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.btrace/buffer-size.exp gdb-10.2/gdb/testsuite/gdb.btrace/buffer-size.exp --- gdb-9.1/gdb/testsuite/gdb.btrace/buffer-size.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.btrace/buffer-size.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. # -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # # Contributed by Intel Corp. <markus.t.metzger@intel.com> # diff -Nru gdb-9.1/gdb/testsuite/gdb.btrace/cpu.exp gdb-10.2/gdb/testsuite/gdb.btrace/cpu.exp --- gdb-9.1/gdb/testsuite/gdb.btrace/cpu.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.btrace/cpu.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. # -# Copyright 2018-2020 Free Software Foundation, Inc. +# Copyright 2018-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -42,9 +42,9 @@ gdb_test "show record btrace cpu" "btrace cpu is 'auto'\." "default cpu" gdb_test "set record" \ - "\"set record\" must be followed by an appropriate subcommand.*" + "List of set record subcommands.*" gdb_test "set record btrace" \ - "\"set record btrace\" must be followed by an appropriate subcommand.*" + "List of set record btrace subcommands.*" test_bad "" "auto" test_good "intel: 0/0" diff -Nru gdb-9.1/gdb/testsuite/gdb.btrace/data.c gdb-10.2/gdb/testsuite/gdb.btrace/data.c --- gdb-9.1/gdb/testsuite/gdb.btrace/data.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.btrace/data.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. Contributed by Intel Corp. <markus.t.metzger@intel.com> diff -Nru gdb-9.1/gdb/testsuite/gdb.btrace/data.exp gdb-10.2/gdb/testsuite/gdb.btrace/data.exp --- gdb-9.1/gdb/testsuite/gdb.btrace/data.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.btrace/data.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. # -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # # Contributed by Intel Corp. <markus.t.metzger@intel.com> # diff -Nru gdb-9.1/gdb/testsuite/gdb.btrace/delta.exp gdb-10.2/gdb/testsuite/gdb.btrace/delta.exp --- gdb-9.1/gdb/testsuite/gdb.btrace/delta.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.btrace/delta.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. # -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # # Contributed by Intel Corp. <markus.t.metzger@intel.com> # diff -Nru gdb-9.1/gdb/testsuite/gdb.btrace/dlopen.c gdb-10.2/gdb/testsuite/gdb.btrace/dlopen.c --- gdb-9.1/gdb/testsuite/gdb.btrace/dlopen.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.btrace/dlopen.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.btrace/dlopen-dso.c gdb-10.2/gdb/testsuite/gdb.btrace/dlopen-dso.c --- gdb-9.1/gdb/testsuite/gdb.btrace/dlopen-dso.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.btrace/dlopen-dso.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.btrace/dlopen.exp gdb-10.2/gdb/testsuite/gdb.btrace/dlopen.exp --- gdb-9.1/gdb/testsuite/gdb.btrace/dlopen.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.btrace/dlopen.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. # -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.btrace/enable.c gdb-10.2/gdb/testsuite/gdb.btrace/enable.c --- gdb-9.1/gdb/testsuite/gdb.btrace/enable.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.btrace/enable.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. Contributed by Intel Corp. <christian.himpel@intel.com> diff -Nru gdb-9.1/gdb/testsuite/gdb.btrace/enable.exp gdb-10.2/gdb/testsuite/gdb.btrace/enable.exp --- gdb-9.1/gdb/testsuite/gdb.btrace/enable.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.btrace/enable.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. # -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # # Contributed by Intel Corp. <christian.himpel@intel.com> # diff -Nru gdb-9.1/gdb/testsuite/gdb.btrace/enable-new-thread.c gdb-10.2/gdb/testsuite/gdb.btrace/enable-new-thread.c --- gdb-9.1/gdb/testsuite/gdb.btrace/enable-new-thread.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.btrace/enable-new-thread.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,36 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include <pthread.h> +#include <unistd.h> + +static void * +test (void *arg) +{ + return arg; /* bp.1 */ +} + +int +main (void) +{ + pthread_t th; + + pthread_create (&th, NULL, test, NULL); + pthread_join (th, NULL); + + return 0; +} diff -Nru gdb-9.1/gdb/testsuite/gdb.btrace/enable-new-thread.exp gdb-10.2/gdb/testsuite/gdb.btrace/enable-new-thread.exp --- gdb-9.1/gdb/testsuite/gdb.btrace/enable-new-thread.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.btrace/enable-new-thread.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,57 @@ +# This testcase is part of GDB, the GNU debugger. +# +# Copyright 2020-2021 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Test that new threads of recorded inferiors also get recorded. + +if { [skip_btrace_tests] } { + unsupported "target does not support record-btrace" + return -1 +} + +standard_testfile +if [prepare_for_testing "failed to prepare" $testfile $srcfile {debug pthreads}] { + return -1 +} + +if ![runto_main] { + untested "failed to run to main" + return -1 +} + +# Record the main thread. Recording will automatically be enabled for the +# other thread. +gdb_test "record btrace" + +gdb_breakpoint [gdb_get_line_number "bp.1" $srcfile] +gdb_continue_to_breakpoint "cont to bp.1" ".*/\\* bp\.1 \\*/.*" + +proc check_thread_recorded { num } { + global decimal + + with_test_prefix "thread $num" { + gdb_test "thread $num" "Switching to thread $num.*" + + gdb_test "info record" [multi_line \ + "Active record target: record-btrace" \ + ".*" \ + "Recorded $decimal instructions in $decimal functions \[^\\\r\\\n\]*" \ + ] + } +} + +check_thread_recorded 1 +check_thread_recorded 2 diff -Nru gdb-9.1/gdb/testsuite/gdb.btrace/enable-running.c gdb-10.2/gdb/testsuite/gdb.btrace/enable-running.c --- gdb-9.1/gdb/testsuite/gdb.btrace/enable-running.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.btrace/enable-running.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2017-2020 Free Software Foundation, Inc. + Copyright 2017-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.btrace/enable-running.exp gdb-10.2/gdb/testsuite/gdb.btrace/enable-running.exp --- gdb-9.1/gdb/testsuite/gdb.btrace/enable-running.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.btrace/enable-running.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. # -# Copyright 2017-2020 Free Software Foundation, Inc. +# Copyright 2017-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.btrace/exception.cc gdb-10.2/gdb/testsuite/gdb.btrace/exception.cc --- gdb-9.1/gdb/testsuite/gdb.btrace/exception.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.btrace/exception.cc 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. Contributed by Intel Corp. <markus.t.metzger@intel.com> diff -Nru gdb-9.1/gdb/testsuite/gdb.btrace/exception.exp gdb-10.2/gdb/testsuite/gdb.btrace/exception.exp --- gdb-9.1/gdb/testsuite/gdb.btrace/exception.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.btrace/exception.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. # -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # # Contributed by Intel Corp. <markus.t.metzger@intel.com> # diff -Nru gdb-9.1/gdb/testsuite/gdb.btrace/function_call_history.c gdb-10.2/gdb/testsuite/gdb.btrace/function_call_history.c --- gdb-9.1/gdb/testsuite/gdb.btrace/function_call_history.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.btrace/function_call_history.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. Contributed by Intel Corp. <christian.himpel@intel.com> diff -Nru gdb-9.1/gdb/testsuite/gdb.btrace/function_call_history.exp gdb-10.2/gdb/testsuite/gdb.btrace/function_call_history.exp --- gdb-9.1/gdb/testsuite/gdb.btrace/function_call_history.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.btrace/function_call_history.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. # -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # # Contributed by Intel Corp. <christian.himpel@intel.com> # diff -Nru gdb-9.1/gdb/testsuite/gdb.btrace/gcore.exp gdb-10.2/gdb/testsuite/gdb.btrace/gcore.exp --- gdb-9.1/gdb/testsuite/gdb.btrace/gcore.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.btrace/gcore.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. # -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # # Contributed by Intel Corp. <markus.t.metzger@intel.com> # diff -Nru gdb-9.1/gdb/testsuite/gdb.btrace/i686-record_goto.S gdb-10.2/gdb/testsuite/gdb.btrace/i686-record_goto.S --- gdb-9.1/gdb/testsuite/gdb.btrace/i686-record_goto.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.btrace/i686-record_goto.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. Contributed by Intel Corp. <markus.t.metzger@intel.com> diff -Nru gdb-9.1/gdb/testsuite/gdb.btrace/i686-tailcall-only.S gdb-10.2/gdb/testsuite/gdb.btrace/i686-tailcall-only.S --- gdb-9.1/gdb/testsuite/gdb.btrace/i686-tailcall-only.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.btrace/i686-tailcall-only.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2016-2020 Free Software Foundation, Inc. + Copyright 2016-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.btrace/i686-tailcall.S gdb-10.2/gdb/testsuite/gdb.btrace/i686-tailcall.S --- gdb-9.1/gdb/testsuite/gdb.btrace/i686-tailcall.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.btrace/i686-tailcall.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. Contributed by Intel Corp. <markus.t.metzger@intel.com> diff -Nru gdb-9.1/gdb/testsuite/gdb.btrace/instruction_history.c gdb-10.2/gdb/testsuite/gdb.btrace/instruction_history.c --- gdb-9.1/gdb/testsuite/gdb.btrace/instruction_history.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.btrace/instruction_history.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. Contributed by Intel Corp. <christian.himpel@intel.com> diff -Nru gdb-9.1/gdb/testsuite/gdb.btrace/instruction_history.exp gdb-10.2/gdb/testsuite/gdb.btrace/instruction_history.exp --- gdb-9.1/gdb/testsuite/gdb.btrace/instruction_history.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.btrace/instruction_history.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. # -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # # Contributed by Intel Corp. <christian.himpel@intel.com> # diff -Nru gdb-9.1/gdb/testsuite/gdb.btrace/instruction_history.S gdb-10.2/gdb/testsuite/gdb.btrace/instruction_history.S --- gdb-9.1/gdb/testsuite/gdb.btrace/instruction_history.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.btrace/instruction_history.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. Contributed by Intel Corp. <christian.himpel@intel.com> diff -Nru gdb-9.1/gdb/testsuite/gdb.btrace/multi-inferior.c gdb-10.2/gdb/testsuite/gdb.btrace/multi-inferior.c --- gdb-9.1/gdb/testsuite/gdb.btrace/multi-inferior.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.btrace/multi-inferior.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,22 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +int +main (void) +{ + return 0; +} diff -Nru gdb-9.1/gdb/testsuite/gdb.btrace/multi-inferior.exp gdb-10.2/gdb/testsuite/gdb.btrace/multi-inferior.exp --- gdb-9.1/gdb/testsuite/gdb.btrace/multi-inferior.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.btrace/multi-inferior.exp 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,74 @@ +# This testcase is part of GDB, the GNU debugger. +# +# Copyright 2020-2021 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Test that recording is per-inferior. +# +# When recording an inferior, threads from other inferiors, both existing +# and newly created, are not automatically recorded. +# +# Each inferior can be recorded separately. + +if { [skip_btrace_tests] } { + unsupported "target does not support record-btrace" + return -1 +} + +standard_testfile +if [prepare_for_testing "failed to prepare" $testfile {} {debug}] { + return -1 +} + +with_test_prefix "inferior 1" { + if ![runto_main] { + untested "failed to run to main" + return -1 + } +} + +with_test_prefix "inferior 2" { + gdb_test "add-inferior -exec ${binfile}" "Added inferior 2.*" \ + "add second inferior" + gdb_test "inferior 2" "Switching to inferior 2.*" + + if ![runto_main] { + untested "inferior 2: failed to run to main" + return -1 + } + + gdb_test_no_output "record btrace" "record btrace" +} + +with_test_prefix "inferior 1" { + gdb_test "inferior 1" "Switching to inferior 1.*" + + gdb_test "info record" "No record target is currently active\\." + gdb_test_no_output "record btrace" "record btrace" +} + +with_test_prefix "inferior 3" { + gdb_test "add-inferior -exec ${binfile}" "Added inferior 3.*" \ + "add third inferior" + gdb_test "inferior 3" "Switching to inferior 3.*" + + if ![runto_main] { + untested "inferior 3: failed to run to main" + return -1 + } + + gdb_test "info record" "No record target is currently active\\." + gdb_test_no_output "record btrace" "record btrace" +} diff -Nru gdb-9.1/gdb/testsuite/gdb.btrace/multi-thread-step.c gdb-10.2/gdb/testsuite/gdb.btrace/multi-thread-step.c --- gdb-9.1/gdb/testsuite/gdb.btrace/multi-thread-step.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.btrace/multi-thread-step.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. Contributed by Intel Corp. <markus.t.metzger@intel.com> diff -Nru gdb-9.1/gdb/testsuite/gdb.btrace/multi-thread-step.exp gdb-10.2/gdb/testsuite/gdb.btrace/multi-thread-step.exp --- gdb-9.1/gdb/testsuite/gdb.btrace/multi-thread-step.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.btrace/multi-thread-step.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. # -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # # Contributed by Intel Corp. <markus.t.metzger@intel.com> # diff -Nru gdb-9.1/gdb/testsuite/gdb.btrace/nohist.exp gdb-10.2/gdb/testsuite/gdb.btrace/nohist.exp --- gdb-9.1/gdb/testsuite/gdb.btrace/nohist.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.btrace/nohist.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. # -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # # Contributed by Intel Corp. <markus.t.metzger@intel.com> # diff -Nru gdb-9.1/gdb/testsuite/gdb.btrace/non-stop.c gdb-10.2/gdb/testsuite/gdb.btrace/non-stop.c --- gdb-9.1/gdb/testsuite/gdb.btrace/non-stop.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.btrace/non-stop.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.btrace/non-stop.exp gdb-10.2/gdb/testsuite/gdb.btrace/non-stop.exp --- gdb-9.1/gdb/testsuite/gdb.btrace/non-stop.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.btrace/non-stop.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. # -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.btrace/reconnect.c gdb-10.2/gdb/testsuite/gdb.btrace/reconnect.c --- gdb-9.1/gdb/testsuite/gdb.btrace/reconnect.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.btrace/reconnect.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2016-2020 Free Software Foundation, Inc. + Copyright 2016-2021 Free Software Foundation, Inc. Contributed by Intel Corp. <tim.wiederhake@intel.com> diff -Nru gdb-9.1/gdb/testsuite/gdb.btrace/reconnect.exp gdb-10.2/gdb/testsuite/gdb.btrace/reconnect.exp --- gdb-9.1/gdb/testsuite/gdb.btrace/reconnect.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.btrace/reconnect.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. # -# Copyright 2016-2020 Free Software Foundation, Inc. +# Copyright 2016-2021 Free Software Foundation, Inc. # # Contributed by Intel Corp. <tim.wiederhake@intel.com> # @@ -51,7 +51,7 @@ # Create a record, check, reconnect with_test_prefix "first" { gdb_test_no_output "record btrace" "record btrace enable" - gdb_test "stepi 19" "0x.* in .* from .*" + gdb_test "stepi 19" "($hex in .* from .*|$hex\t$decimal.*)" gdb_test "info record" [multi_line \ "Active record target: .*" \ diff -Nru gdb-9.1/gdb/testsuite/gdb.btrace/record_goto.c gdb-10.2/gdb/testsuite/gdb.btrace/record_goto.c --- gdb-9.1/gdb/testsuite/gdb.btrace/record_goto.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.btrace/record_goto.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. Contributed by Intel Corp. <markus.t.metzger@intel.com> diff -Nru gdb-9.1/gdb/testsuite/gdb.btrace/record_goto.exp gdb-10.2/gdb/testsuite/gdb.btrace/record_goto.exp --- gdb-9.1/gdb/testsuite/gdb.btrace/record_goto.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.btrace/record_goto.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. # -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # # Contributed by Intel Corp. <markus.t.metzger@intel.com> # diff -Nru gdb-9.1/gdb/testsuite/gdb.btrace/record_goto-step.exp gdb-10.2/gdb/testsuite/gdb.btrace/record_goto-step.exp --- gdb-9.1/gdb/testsuite/gdb.btrace/record_goto-step.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.btrace/record_goto-step.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. # -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # # Contributed by Intel Corp. <markus.t.metzger@intel.com> # diff -Nru gdb-9.1/gdb/testsuite/gdb.btrace/rn-dl-bind.c gdb-10.2/gdb/testsuite/gdb.btrace/rn-dl-bind.c --- gdb-9.1/gdb/testsuite/gdb.btrace/rn-dl-bind.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.btrace/rn-dl-bind.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. Contributed by Intel Corp. <markus.t.metzger@intel.com> diff -Nru gdb-9.1/gdb/testsuite/gdb.btrace/rn-dl-bind.exp gdb-10.2/gdb/testsuite/gdb.btrace/rn-dl-bind.exp --- gdb-9.1/gdb/testsuite/gdb.btrace/rn-dl-bind.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.btrace/rn-dl-bind.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. # -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # # Contributed by Intel Corp. <markus.t.metzger@intel.com> # diff -Nru gdb-9.1/gdb/testsuite/gdb.btrace/segv.c gdb-10.2/gdb/testsuite/gdb.btrace/segv.c --- gdb-9.1/gdb/testsuite/gdb.btrace/segv.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.btrace/segv.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. Contributed by Intel Corp. <markus.t.metzger@intel.com> diff -Nru gdb-9.1/gdb/testsuite/gdb.btrace/segv.exp gdb-10.2/gdb/testsuite/gdb.btrace/segv.exp --- gdb-9.1/gdb/testsuite/gdb.btrace/segv.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.btrace/segv.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. # -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # # Contributed by Intel Corp. <markus.t.metzger@intel.com> # diff -Nru gdb-9.1/gdb/testsuite/gdb.btrace/step.exp gdb-10.2/gdb/testsuite/gdb.btrace/step.exp --- gdb-9.1/gdb/testsuite/gdb.btrace/step.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.btrace/step.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. # -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # # Contributed by Intel Corp. <markus.t.metzger@intel.com> # diff -Nru gdb-9.1/gdb/testsuite/gdb.btrace/stepi.exp gdb-10.2/gdb/testsuite/gdb.btrace/stepi.exp --- gdb-9.1/gdb/testsuite/gdb.btrace/stepi.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.btrace/stepi.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. # -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # # Contributed by Intel Corp. <markus.t.metzger@intel.com> # diff -Nru gdb-9.1/gdb/testsuite/gdb.btrace/tailcall.c gdb-10.2/gdb/testsuite/gdb.btrace/tailcall.c --- gdb-9.1/gdb/testsuite/gdb.btrace/tailcall.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.btrace/tailcall.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. Contributed by Intel Corp. <markus.t.metzger@intel.com> diff -Nru gdb-9.1/gdb/testsuite/gdb.btrace/tailcall.exp gdb-10.2/gdb/testsuite/gdb.btrace/tailcall.exp --- gdb-9.1/gdb/testsuite/gdb.btrace/tailcall.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.btrace/tailcall.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. # -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # # Contributed by Intel Corp. <markus.t.metzger@intel.com> # diff -Nru gdb-9.1/gdb/testsuite/gdb.btrace/tailcall-only.c gdb-10.2/gdb/testsuite/gdb.btrace/tailcall-only.c --- gdb-9.1/gdb/testsuite/gdb.btrace/tailcall-only.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.btrace/tailcall-only.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2016-2020 Free Software Foundation, Inc. + Copyright 2016-2021 Free Software Foundation, Inc. Contributed by Intel Corp. <markus.t.metzger@intel.com> diff -Nru gdb-9.1/gdb/testsuite/gdb.btrace/tailcall-only.exp gdb-10.2/gdb/testsuite/gdb.btrace/tailcall-only.exp --- gdb-9.1/gdb/testsuite/gdb.btrace/tailcall-only.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.btrace/tailcall-only.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. # -# Copyright 2016-2020 Free Software Foundation, Inc. +# Copyright 2016-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.btrace/tsx.c gdb-10.2/gdb/testsuite/gdb.btrace/tsx.c --- gdb-9.1/gdb/testsuite/gdb.btrace/tsx.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.btrace/tsx.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.btrace/tsx.exp gdb-10.2/gdb/testsuite/gdb.btrace/tsx.exp --- gdb-9.1/gdb/testsuite/gdb.btrace/tsx.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.btrace/tsx.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. # -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.btrace/unknown_functions.c gdb-10.2/gdb/testsuite/gdb.btrace/unknown_functions.c --- gdb-9.1/gdb/testsuite/gdb.btrace/unknown_functions.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.btrace/unknown_functions.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. Contributed by Intel Corp. <markus.t.metzger@intel.com> diff -Nru gdb-9.1/gdb/testsuite/gdb.btrace/unknown_functions.exp gdb-10.2/gdb/testsuite/gdb.btrace/unknown_functions.exp --- gdb-9.1/gdb/testsuite/gdb.btrace/unknown_functions.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.btrace/unknown_functions.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. # -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # # Contributed by Intel Corp. <markus.t.metzger@intel.com> # diff -Nru gdb-9.1/gdb/testsuite/gdb.btrace/vdso.c gdb-10.2/gdb/testsuite/gdb.btrace/vdso.c --- gdb-9.1/gdb/testsuite/gdb.btrace/vdso.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.btrace/vdso.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. Contributed by Intel Corp. <markus.t.metzger@intel.com> diff -Nru gdb-9.1/gdb/testsuite/gdb.btrace/vdso.exp gdb-10.2/gdb/testsuite/gdb.btrace/vdso.exp --- gdb-9.1/gdb/testsuite/gdb.btrace/vdso.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.btrace/vdso.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. # -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # # Contributed by Intel Corp. <markus.t.metzger@intel.com> # diff -Nru gdb-9.1/gdb/testsuite/gdb.btrace/x86_64-record_goto.S gdb-10.2/gdb/testsuite/gdb.btrace/x86_64-record_goto.S --- gdb-9.1/gdb/testsuite/gdb.btrace/x86_64-record_goto.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.btrace/x86_64-record_goto.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. Contributed by Intel Corp. <markus.t.metzger@intel.com> diff -Nru gdb-9.1/gdb/testsuite/gdb.btrace/x86_64-tailcall-only.S gdb-10.2/gdb/testsuite/gdb.btrace/x86_64-tailcall-only.S --- gdb-9.1/gdb/testsuite/gdb.btrace/x86_64-tailcall-only.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.btrace/x86_64-tailcall-only.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2016-2020 Free Software Foundation, Inc. + Copyright 2016-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.btrace/x86_64-tailcall.S gdb-10.2/gdb/testsuite/gdb.btrace/x86_64-tailcall.S --- gdb-9.1/gdb/testsuite/gdb.btrace/x86_64-tailcall.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.btrace/x86_64-tailcall.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. Contributed by Intel Corp. <markus.t.metzger@intel.com> diff -Nru gdb-9.1/gdb/testsuite/gdb.btrace/x86-tsx.S gdb-10.2/gdb/testsuite/gdb.btrace/x86-tsx.S --- gdb-9.1/gdb/testsuite/gdb.btrace/x86-tsx.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.btrace/x86-tsx.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.compile/compile.c gdb-10.2/gdb/testsuite/gdb.compile/compile.c --- gdb-9.1/gdb/testsuite/gdb.compile/compile.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.compile/compile.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.compile/compile-constvar.c gdb-10.2/gdb/testsuite/gdb.compile/compile-constvar.c --- gdb-9.1/gdb/testsuite/gdb.compile/compile-constvar.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.compile/compile-constvar.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.compile/compile-constvar.S gdb-10.2/gdb/testsuite/gdb.compile/compile-constvar.S --- gdb-9.1/gdb/testsuite/gdb.compile/compile-constvar.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.compile/compile-constvar.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.compile/compile-cplus-anonymous.cc gdb-10.2/gdb/testsuite/gdb.compile/compile-cplus-anonymous.cc --- gdb-9.1/gdb/testsuite/gdb.compile/compile-cplus-anonymous.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.compile/compile-cplus-anonymous.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2015-2020 Free Software Foundation, Inc. +/* Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.compile/compile-cplus-anonymous.exp gdb-10.2/gdb/testsuite/gdb.compile/compile-cplus-anonymous.exp --- gdb-9.1/gdb/testsuite/gdb.compile/compile-cplus-anonymous.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.compile/compile-cplus-anonymous.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.compile/compile-cplus-array-decay.cc gdb-10.2/gdb/testsuite/gdb.compile/compile-cplus-array-decay.cc --- gdb-9.1/gdb/testsuite/gdb.compile/compile-cplus-array-decay.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.compile/compile-cplus-array-decay.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2017-2020 Free Software Foundation, Inc. +/* Copyright 2017-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.compile/compile-cplus-array-decay.exp gdb-10.2/gdb/testsuite/gdb.compile/compile-cplus-array-decay.exp --- gdb-9.1/gdb/testsuite/gdb.compile/compile-cplus-array-decay.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.compile/compile-cplus-array-decay.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2017-2020 Free Software Foundation, Inc. +# Copyright 2017-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.compile/compile-cplus.c gdb-10.2/gdb/testsuite/gdb.compile/compile-cplus.c --- gdb-9.1/gdb/testsuite/gdb.compile/compile-cplus.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.compile/compile-cplus.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.compile/compile-cplus.exp gdb-10.2/gdb/testsuite/gdb.compile/compile-cplus.exp --- gdb-9.1/gdb/testsuite/gdb.compile/compile-cplus.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.compile/compile-cplus.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -19,7 +19,7 @@ get_compiler_info set options {} -if [test_compiler_info gcc*] { +if { [test_compiler_info gcc*] || [test_compiler_info clang*] } { lappend options additional_flags=-g3 lappend options additional_flags=-std=gnu++11 lappend options c++ @@ -32,9 +32,10 @@ set srcfilesoptions [list ${srcfile} ${options}] if { $srcfile3 != "" } { - lappend srcfilesoptions $srcfile3 ${options} + lappend srcfilesoptions $srcfile3 {} } -lappend srcfilesoptions $srcfile4 "nodebug c++" +set srcfile4options "nodebug c++" +lappend srcfilesoptions $srcfile4 $srcfile4options if { [eval build_executable_from_specs ${testfile}.exp $testfile {$options} ${srcfilesoptions}] } { return -1 } @@ -219,7 +220,7 @@ " = \\{0, 0, 7, 0, 0\\}" gdb_test_no_output "compile code struct_object.complexfield = 7 + 5i" -gdb_test "print struct_object.complexfield" " = 7 \\+ 5 \\* I" +gdb_test "print struct_object.complexfield" " = 7 \\+ 5i" gdb_test_no_output "compile code struct_object.boolfield = 1" gdb_test "print struct_object.boolfield" " = true" diff -Nru gdb-9.1/gdb/testsuite/gdb.compile/compile-cplus-inherit.cc gdb-10.2/gdb/testsuite/gdb.compile/compile-cplus-inherit.cc --- gdb-9.1/gdb/testsuite/gdb.compile/compile-cplus-inherit.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.compile/compile-cplus-inherit.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2015-2020 Free Software Foundation, Inc. +/* Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.compile/compile-cplus-inherit.exp gdb-10.2/gdb/testsuite/gdb.compile/compile-cplus-inherit.exp --- gdb-9.1/gdb/testsuite/gdb.compile/compile-cplus-inherit.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.compile/compile-cplus-inherit.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.compile/compile-cplus-member.cc gdb-10.2/gdb/testsuite/gdb.compile/compile-cplus-member.cc --- gdb-9.1/gdb/testsuite/gdb.compile/compile-cplus-member.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.compile/compile-cplus-member.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2015-2020 Free Software Foundation, Inc. +/* Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.compile/compile-cplus-member.exp gdb-10.2/gdb/testsuite/gdb.compile/compile-cplus-member.exp --- gdb-9.1/gdb/testsuite/gdb.compile/compile-cplus-member.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.compile/compile-cplus-member.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.compile/compile-cplus-method.cc gdb-10.2/gdb/testsuite/gdb.compile/compile-cplus-method.cc --- gdb-9.1/gdb/testsuite/gdb.compile/compile-cplus-method.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.compile/compile-cplus-method.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2015-2020 Free Software Foundation, Inc. +/* Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.compile/compile-cplus-method.exp gdb-10.2/gdb/testsuite/gdb.compile/compile-cplus-method.exp --- gdb-9.1/gdb/testsuite/gdb.compile/compile-cplus-method.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.compile/compile-cplus-method.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.compile/compile-cplus-mod.c gdb-10.2/gdb/testsuite/gdb.compile/compile-cplus-mod.c --- gdb-9.1/gdb/testsuite/gdb.compile/compile-cplus-mod.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.compile/compile-cplus-mod.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.compile/compile-cplus-namespace.cc gdb-10.2/gdb/testsuite/gdb.compile/compile-cplus-namespace.cc --- gdb-9.1/gdb/testsuite/gdb.compile/compile-cplus-namespace.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.compile/compile-cplus-namespace.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2015-2020 Free Software Foundation, Inc. +/* Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.compile/compile-cplus-namespace.exp gdb-10.2/gdb/testsuite/gdb.compile/compile-cplus-namespace.exp --- gdb-9.1/gdb/testsuite/gdb.compile/compile-cplus-namespace.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.compile/compile-cplus-namespace.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.compile/compile-cplus-nested.cc gdb-10.2/gdb/testsuite/gdb.compile/compile-cplus-nested.cc --- gdb-9.1/gdb/testsuite/gdb.compile/compile-cplus-nested.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.compile/compile-cplus-nested.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2015-2020 Free Software Foundation, Inc. +/* Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.compile/compile-cplus-nested.exp gdb-10.2/gdb/testsuite/gdb.compile/compile-cplus-nested.exp --- gdb-9.1/gdb/testsuite/gdb.compile/compile-cplus-nested.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.compile/compile-cplus-nested.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.compile/compile-cplus-print.c gdb-10.2/gdb/testsuite/gdb.compile/compile-cplus-print.c --- gdb-9.1/gdb/testsuite/gdb.compile/compile-cplus-print.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.compile/compile-cplus-print.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.compile/compile-cplus-print.exp gdb-10.2/gdb/testsuite/gdb.compile/compile-cplus-print.exp --- gdb-9.1/gdb/testsuite/gdb.compile/compile-cplus-print.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.compile/compile-cplus-print.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.compile/compile-cplus-virtual.cc gdb-10.2/gdb/testsuite/gdb.compile/compile-cplus-virtual.cc --- gdb-9.1/gdb/testsuite/gdb.compile/compile-cplus-virtual.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.compile/compile-cplus-virtual.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2015-2020 Free Software Foundation, Inc. +/* Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.compile/compile-cplus-virtual.exp gdb-10.2/gdb/testsuite/gdb.compile/compile-cplus-virtual.exp --- gdb-9.1/gdb/testsuite/gdb.compile/compile-cplus-virtual.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.compile/compile-cplus-virtual.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.compile/compile.exp gdb-10.2/gdb/testsuite/gdb.compile/compile.exp --- gdb-9.1/gdb/testsuite/gdb.compile/compile.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.compile/compile.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -237,7 +237,7 @@ " = \\{0, 0, 7, 0, 0\\}" gdb_test_no_output "compile code struct_object.complexfield = 7 + 5i" - gdb_test "print struct_object.complexfield" " = 7 \\+ 5 \\* I" + gdb_test "print struct_object.complexfield" " = 7 \\+ 5i" gdb_test_no_output "compile code struct_object.boolfield = 1" gdb_test "print struct_object.boolfield" " = true" diff -Nru gdb-9.1/gdb/testsuite/gdb.compile/compile-ifunc.c gdb-10.2/gdb/testsuite/gdb.compile/compile-ifunc.c --- gdb-9.1/gdb/testsuite/gdb.compile/compile-ifunc.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.compile/compile-ifunc.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.compile/compile-ifunc.exp gdb-10.2/gdb/testsuite/gdb.compile/compile-ifunc.exp --- gdb-9.1/gdb/testsuite/gdb.compile/compile-ifunc.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.compile/compile-ifunc.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -19,9 +19,16 @@ standard_testfile +get_compiler_info +set flags "" +if [test_compiler_info gcc*] { + set flags additional_flags=-Wno-attribute-alias +} + with_test_prefix "nodebug" { - if { [prepare_for_testing "failed to prepare" "$testfile-nodebug" $srcfile {}] } { + if { [prepare_for_testing "failed to prepare" "$testfile-nodebug" \ + $srcfile $flags] } { return -1 } @@ -51,7 +58,8 @@ with_test_prefix "debug" { - if { [prepare_for_testing "failed to prepare" "$testfile-debug" $srcfile] } { + if { [prepare_for_testing "failed to prepare" "$testfile-debug" \ + $srcfile "debug $flags"] } { return -1 } diff -Nru gdb-9.1/gdb/testsuite/gdb.compile/compile-mod.c gdb-10.2/gdb/testsuite/gdb.compile/compile-mod.c --- gdb-9.1/gdb/testsuite/gdb.compile/compile-mod.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.compile/compile-mod.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.compile/compile-nodebug.c gdb-10.2/gdb/testsuite/gdb.compile/compile-nodebug.c --- gdb-9.1/gdb/testsuite/gdb.compile/compile-nodebug.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.compile/compile-nodebug.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.compile/compile-ops.c gdb-10.2/gdb/testsuite/gdb.compile/compile-ops.c --- gdb-9.1/gdb/testsuite/gdb.compile/compile-ops.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.compile/compile-ops.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.compile/compile-ops.exp gdb-10.2/gdb/testsuite/gdb.compile/compile-ops.exp --- gdb-9.1/gdb/testsuite/gdb.compile/compile-ops.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.compile/compile-ops.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -362,7 +362,6 @@ cu { addr_size 4 } { declare_labels int_label - extern func_start func_end ptr compile_unit { {name file1.txt} diff -Nru gdb-9.1/gdb/testsuite/gdb.compile/compile-print.c gdb-10.2/gdb/testsuite/gdb.compile/compile-print.c --- gdb-9.1/gdb/testsuite/gdb.compile/compile-print.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.compile/compile-print.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.compile/compile-print.exp gdb-10.2/gdb/testsuite/gdb.compile/compile-print.exp --- gdb-9.1/gdb/testsuite/gdb.compile/compile-print.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.compile/compile-print.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.compile/compile-setjmp.c gdb-10.2/gdb/testsuite/gdb.compile/compile-setjmp.c --- gdb-9.1/gdb/testsuite/gdb.compile/compile-setjmp.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.compile/compile-setjmp.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.compile/compile-setjmp.exp gdb-10.2/gdb/testsuite/gdb.compile/compile-setjmp.exp --- gdb-9.1/gdb/testsuite/gdb.compile/compile-setjmp.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.compile/compile-setjmp.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.compile/compile-setjmp-mod.c gdb-10.2/gdb/testsuite/gdb.compile/compile-setjmp-mod.c --- gdb-9.1/gdb/testsuite/gdb.compile/compile-setjmp-mod.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.compile/compile-setjmp-mod.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.compile/compile-shlib.c gdb-10.2/gdb/testsuite/gdb.compile/compile-shlib.c --- gdb-9.1/gdb/testsuite/gdb.compile/compile-shlib.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.compile/compile-shlib.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.compile/compile-tls.c gdb-10.2/gdb/testsuite/gdb.compile/compile-tls.c --- gdb-9.1/gdb/testsuite/gdb.compile/compile-tls.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.compile/compile-tls.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.compile/compile-tls.exp gdb-10.2/gdb/testsuite/gdb.compile/compile-tls.exp --- gdb-9.1/gdb/testsuite/gdb.compile/compile-tls.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.compile/compile-tls.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/abstract-origin.cc gdb-10.2/gdb/testsuite/gdb.cp/abstract-origin.cc --- gdb-9.1/gdb/testsuite/gdb.cp/abstract-origin.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/abstract-origin.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2009-2020 Free Software Foundation, Inc. + Copyright 2009-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/abstract-origin.exp gdb-10.2/gdb/testsuite/gdb.cp/abstract-origin.exp --- gdb-9.1/gdb/testsuite/gdb.cp/abstract-origin.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/abstract-origin.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2009-2020 Free Software Foundation, Inc. +# Copyright 2009-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/align.exp gdb-10.2/gdb/testsuite/gdb.cp/align.exp --- gdb-9.1/gdb/testsuite/gdb.cp/align.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/align.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2018-2020 Free Software Foundation, Inc. +# Copyright 2018-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -80,7 +80,9 @@ unsigned a_int3 = alignof (int[3]); +#if !defined (__clang__) unsigned a_void = alignof (void); +#endif struct base { char c; }; struct derived : public virtual base { int i; }; @@ -170,5 +172,14 @@ set expected [get_integer_valueof a_int3 0] gdb_test "print alignof(int\[3\])" " = $expected" -set expected [get_integer_valueof a_void 0] + +# As an extension, GCC allows void pointer arithmetic, with +# sizeof(void) and alignof(void) both 1. This test checks +# GDB's support of GCC's extension. +if [test_compiler_info clang*] { + # Clang doesn't support GCC's extension. + set expected 1 +} else { + set expected [get_integer_valueof a_void 0] +} gdb_test "print alignof(void)" " = $expected" diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/ambiguous.exp gdb-10.2/gdb/testsuite/gdb.cp/ambiguous.exp --- gdb-9.1/gdb/testsuite/gdb.cp/ambiguous.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/ambiguous.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1998-2020 Free Software Foundation, Inc. +# Copyright 1998-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -30,12 +30,20 @@ standard_testfile .cc if [get_compiler_info "c++"] { + unsupported "couldn't find a valid c++ compiler" return -1 } -if { [test_compiler_info gcc-*] } then { continue } +set additional_flags "" +if {[test_compiler_info {gcc-[0-9]-*}]} { + # GCCs prior to 10.1 do not support -Wno-inaccessible-base. + set additional_flags "additional_flags=-w" +} elseif {[test_compiler_info gcc*] || [test_compiler_info clang*]} { + set additional_flags "additional_flags=-Wno-inaccessible-base" +} -if {[prepare_for_testing "failed to prepare" $testfile $srcfile {debug c++}]} { +if {[prepare_for_testing "failed to prepare" $testfile $srcfile \ + [list debug c++ $additional_flags]]} { return -1 } @@ -66,6 +74,7 @@ # right times. # X is derived from A1 and A2; both A1 and A2 have a member 'x' +setup_kfail gdb/26602 *-*-* send_gdb "print x.x\n" gdb_expect { -re "warning: x ambiguous; using X::A2::x. Use a cast to disambiguate.\r\n\\$\[0-9\]* = \[-\]*\[0-9\]*\r\n$gdb_prompt $" { @@ -81,6 +90,7 @@ # N is derived from A1 and A2, but not immediately -- two steps # up in the hierarchy. Both A1 and A2 have a member 'x'. +setup_kfail gdb/26602 *-*-* send_gdb "print n.x\n" gdb_expect { -re "warning: x ambiguous; using N::M::A2::x. Use a cast to disambiguate.\r\n\\$\[0-9\]* = \[-\]*\[0-9\]*\r\n$gdb_prompt $" { @@ -94,6 +104,7 @@ } # J is derived from A1 twice. A1 has a member x. +setup_kfail gdb/26602 *-*-* send_gdb "print j.x\n" gdb_expect { -re "warning: x ambiguous; using J::L::A1::x. Use a cast to disambiguate.\r\n\\$\[0-9\]* = \[-\]*\[0-9\]*\r\n$gdb_prompt $" { @@ -121,6 +132,7 @@ # JVA1 is derived from A1; A1 occurs as a virtual base in two # ancestors, and as a non-virtual immediate base. Ambiguity must # be reported. +setup_kfail gdb/26602 *-*-* send_gdb "print jva1.x\n" gdb_expect { -re "warning: x ambiguous; using JVA1::A1::x. Use a cast to disambiguate.\r\n\\$\[0-9\]* = \[-\]*\[0-9\]*\r\n$gdb_prompt $" { @@ -136,6 +148,7 @@ # JVA2 is derived from A1 & A2; A1 occurs as a virtual base in two # ancestors, and A2 is a non-virtual immediate base. Ambiguity must # be reported as A1 and A2 both have a member 'x'. +setup_kfail gdb/26602 *-*-* send_gdb "print jva2.x\n" gdb_expect { -re "warning: x ambiguous; using JVA2::A2::x. Use a cast to disambiguate.\r\n\\$\[0-9\]* = \[-\]*\[0-9\]*\r\n$gdb_prompt $" { @@ -165,6 +178,7 @@ # J is derived from A1 twice; report ambiguity if a J is # cast to an A1. +setup_kfail gdb/26602 *-*-* send_gdb "print (A1)j\n" gdb_expect { -re "warning: A1 ambiguous; using J::L::A1. Use a cast to disambiguate.\r\n\\$\[0-9\]* = \{x = \[-\]*\[0-9\]*, y = \[-\]*\[0-9\]*\}\r\n$gdb_prompt $" { @@ -191,6 +205,7 @@ # JVA1 is derived from A1; A1 is a virtual base and also a # non-virtual base. Must report ambiguity if a JVA1 is cast to an A1. +setup_kfail gdb/26602 *-*-* send_gdb "print (A1)jva1\n" gdb_expect { -re "warning: A1 ambiguous; using JVA1::A1. Use a cast to disambiguate.\r\n\\$\[0-9\]* = \{x = \[-\]*\[0-9\]*, y = \[-\]*\[0-9\]*\}\r\n$gdb_prompt $" { diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/annota2.exp gdb-10.2/gdb/testsuite/gdb.cp/annota2.exp --- gdb-9.1/gdb/testsuite/gdb.cp/annota2.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/annota2.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1999-2020 Free Software Foundation, Inc. +# Copyright 1999-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -73,9 +73,9 @@ timeout { fail "annotation set at level 2 (timeout)" } } -gdb_test_multiple "run" "run until main breakpoint" { +gdb_test_multiple "run" "run until main breakpoint, first time" { -re "$main_line.*$gdb_prompt$" { - pass "run until main breakpoint" + pass $gdb_test_name } } @@ -189,9 +189,9 @@ # run program up to breakpoint. # -gdb_test_multiple "run" "run until main breakpoint" { +gdb_test_multiple "run" "run until main breakpoint, second time" { -re "$main_line.*$gdb_prompt$" { - pass "run until main breakpoint" + pass $gdb_test_name } } @@ -218,7 +218,7 @@ "\032\032post-prompt" \ "" \ "\032\032starting" \ - "\(${frames_invalid}\)*${breakpoints_invalid}" \ + "\(${frames_invalid}\)*${breakpoints_invalid}\(${frames_invalid}\)*" \ "\032\032watchpoint 3" \ ".*atchpoint 3: a.x" \ "" \ @@ -243,7 +243,6 @@ "" \ "" \ "\032\032source .*$srcfile.*beg:$hex" \ - "$decimal\[^\r\n\]+" \ "" \ "\032\032frame-end" \ "" \ diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/annota3.exp gdb-10.2/gdb/testsuite/gdb.cp/annota3.exp --- gdb-9.1/gdb/testsuite/gdb.cp/annota3.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/annota3.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2003-2020 Free Software Foundation, Inc. +# Copyright 2003-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -164,7 +164,7 @@ # annotate-watchpoint # gdb_test_multiple "next" "watch triggered on a.x" { - -re "\r\n\032\032post-prompt\r\n\r\n\032\032starting\r\n\r\n\032\032watchpoint 3\r\n.*atchpoint 3: a.x\r\n\r\nOld value = 0\r\nNew value = 1\r\n\r\n(\032\032frame-begin 0 0x\[0-9a-z\]+\r\n|)main \\(\\) at .*$srcfile:$decimal\r\n\r\n\032\032source .*$srcfile.*beg:$hex\r\n$decimal\[^\r\n\]+\r\n\r\n\032\032stopped\r\n.*$gdb_prompt$" { + -re "\r\n\032\032post-prompt\r\n\r\n\032\032starting\r\n\r\n\032\032watchpoint 3\r\n.*atchpoint 3: a.x\r\n\r\nOld value = 0\r\nNew value = 1\r\n\r\n(\032\032frame-begin 0 0x\[0-9a-z\]+\r\n|)main \\(\\) at .*$srcfile:$decimal\r\n\r\n\032\032source .*$srcfile.*beg:$hex\r\n\r\n\032\032stopped\r\n.*$gdb_prompt$" { pass "watch triggered on a.x" } } diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/anon-ns2.cc gdb-10.2/gdb/testsuite/gdb.cp/anon-ns2.cc --- gdb-9.1/gdb/testsuite/gdb.cp/anon-ns2.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/anon-ns2.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/anon-ns.cc gdb-10.2/gdb/testsuite/gdb.cp/anon-ns.cc --- gdb-9.1/gdb/testsuite/gdb.cp/anon-ns.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/anon-ns.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/anon-ns.exp gdb-10.2/gdb/testsuite/gdb.cp/anon-ns.exp --- gdb-9.1/gdb/testsuite/gdb.cp/anon-ns.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/anon-ns.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # # Contributed by Red Hat, originally written by Keith Seitz. # diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/anon-struct.cc gdb-10.2/gdb/testsuite/gdb.cp/anon-struct.cc --- gdb-9.1/gdb/testsuite/gdb.cp/anon-struct.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/anon-struct.cc 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/anon-struct.exp gdb-10.2/gdb/testsuite/gdb.cp/anon-struct.exp --- gdb-9.1/gdb/testsuite/gdb.cp/anon-struct.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/anon-struct.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ # Tests for anonymous union support. -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/anon-union.exp gdb-10.2/gdb/testsuite/gdb.cp/anon-union.exp --- gdb-9.1/gdb/testsuite/gdb.cp/anon-union.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/anon-union.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ # Tests for anonymous union support. -# Copyright 1998-2020 Free Software Foundation, Inc. +# Copyright 1998-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/arg-reference.cc gdb-10.2/gdb/testsuite/gdb.cp/arg-reference.cc --- gdb-9.1/gdb/testsuite/gdb.cp/arg-reference.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/arg-reference.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright (C) 2007-2020 Free Software Foundation, Inc. + Copyright (C) 2007-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/arg-reference.exp gdb-10.2/gdb/testsuite/gdb.cp/arg-reference.exp --- gdb-9.1/gdb/testsuite/gdb.cp/arg-reference.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/arg-reference.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2007-2020 Free Software Foundation, Inc. +# Copyright (C) 2007-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/baseenum.cc gdb-10.2/gdb/testsuite/gdb.cp/baseenum.cc --- gdb-9.1/gdb/testsuite/gdb.cp/baseenum.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/baseenum.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2003-2020 Free Software Foundation, Inc. + Copyright 2003-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/baseenum.exp gdb-10.2/gdb/testsuite/gdb.cp/baseenum.exp --- gdb-9.1/gdb/testsuite/gdb.cp/baseenum.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/baseenum.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/bool.cc gdb-10.2/gdb/testsuite/gdb.cp/bool.cc --- gdb-9.1/gdb/testsuite/gdb.cp/bool.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/bool.cc 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright (C) 2006-2020 Free Software Foundation, Inc. + Copyright (C) 2006-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/bool.exp gdb-10.2/gdb/testsuite/gdb.cp/bool.exp --- gdb-9.1/gdb/testsuite/gdb.cp/bool.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/bool.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2006-2020 Free Software Foundation, Inc. +# Copyright (C) 2006-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/breakpoint.cc gdb-10.2/gdb/testsuite/gdb.cp/breakpoint.cc --- gdb-9.1/gdb/testsuite/gdb.cp/breakpoint.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/breakpoint.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Code to go along with tests in breakpoint.exp. - Copyright 2004-2020 Free Software Foundation, Inc. + Copyright 2004-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/breakpoint.exp gdb-10.2/gdb/testsuite/gdb.cp/breakpoint.exp --- gdb-9.1/gdb/testsuite/gdb.cp/breakpoint.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/breakpoint.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2004-2020 Free Software Foundation, Inc. +# Copyright 2004-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/breakpoint-locs-2.cc gdb-10.2/gdb/testsuite/gdb.cp/breakpoint-locs-2.cc --- gdb-9.1/gdb/testsuite/gdb.cp/breakpoint-locs-2.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/breakpoint-locs-2.cc 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,29 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "breakpoint-locs.h" + +namespace N1 +{ + void bar () { C1::baz (); } +} + +void +N1_bar (void) +{ + N1::bar (); +} diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/breakpoint-locs.cc gdb-10.2/gdb/testsuite/gdb.cp/breakpoint-locs.cc --- gdb-9.1/gdb/testsuite/gdb.cp/breakpoint-locs.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/breakpoint-locs.cc 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,33 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "breakpoint-locs.h" + +namespace N1 +{ + void foo () { C1::baz (); } +} + +extern void N1_bar (void); + +int +main () +{ + N1::foo (); + N1_bar (); + return 0; +} diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/breakpoint-locs.exp gdb-10.2/gdb/testsuite/gdb.cp/breakpoint-locs.exp --- gdb-9.1/gdb/testsuite/gdb.cp/breakpoint-locs.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/breakpoint-locs.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,27 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# This file is part of the gdb testsuite + +if {[skip_cplus_tests]} { continue } + +standard_testfile .cc breakpoint-locs-2.cc + +if { [prepare_for_testing "failed to prepare" $testfile "$srcfile $srcfile2"\ + {debug c++}] } { + return -1 +} + +gdb_test "break N1::C1::baz" "\\(2 locations\\)" diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/breakpoint-locs.h gdb-10.2/gdb/testsuite/gdb.cp/breakpoint-locs.h --- gdb-9.1/gdb/testsuite/gdb.cp/breakpoint-locs.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/breakpoint-locs.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,25 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +namespace N1 +{ + class C1 + { + public: + static void __attribute__((always_inline)) baz () { volatile unsigned i; i++; } + }; +} diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/bs15503.cc gdb-10.2/gdb/testsuite/gdb.cp/bs15503.cc --- gdb-9.1/gdb/testsuite/gdb.cp/bs15503.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/bs15503.cc 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 1992-2020 Free Software Foundation, Inc. + Copyright 1992-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/bs15503.exp gdb-10.2/gdb/testsuite/gdb.cp/bs15503.exp --- gdb-9.1/gdb/testsuite/gdb.cp/bs15503.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/bs15503.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1992-2020 Free Software Foundation, Inc. +# Copyright 1992-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/call-c-1.c gdb-10.2/gdb/testsuite/gdb.cp/call-c-1.c --- gdb-9.1/gdb/testsuite/gdb.cp/call-c-1.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/call-c-1.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This test script is part of GDB, the GNU debugger. - Copyright 2006-2020 Free Software Foundation, Inc. + Copyright 2006-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/call-c.cc gdb-10.2/gdb/testsuite/gdb.cp/call-c.cc --- gdb-9.1/gdb/testsuite/gdb.cp/call-c.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/call-c.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This test script is part of GDB, the GNU debugger. - Copyright 2006-2020 Free Software Foundation, Inc. + Copyright 2006-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/call-c.exp gdb-10.2/gdb/testsuite/gdb.cp/call-c.exp --- gdb-9.1/gdb/testsuite/gdb.cp/call-c.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/call-c.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2006-2020 Free Software Foundation, Inc. +# Copyright 2006-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/casts03.cc gdb-10.2/gdb/testsuite/gdb.cp/casts03.cc --- gdb-9.1/gdb/testsuite/gdb.cp/casts03.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/casts03.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2016-2020 Free Software Foundation, Inc. + Copyright 2016-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/casts.exp gdb-10.2/gdb/testsuite/gdb.cp/casts.exp --- gdb-9.1/gdb/testsuite/gdb.cp/casts.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/casts.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2002-2020 Free Software Foundation, Inc. +# Copyright 2002-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/chained-calls.cc gdb-10.2/gdb/testsuite/gdb.cp/chained-calls.cc --- gdb-9.1/gdb/testsuite/gdb.cp/chained-calls.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/chained-calls.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/chained-calls.exp gdb-10.2/gdb/testsuite/gdb.cp/chained-calls.exp --- gdb-9.1/gdb/testsuite/gdb.cp/chained-calls.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/chained-calls.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/class2.cc gdb-10.2/gdb/testsuite/gdb.cp/class2.cc --- gdb-9.1/gdb/testsuite/gdb.cp/class2.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/class2.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2003-2020 Free Software Foundation, Inc. + Copyright 2003-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/class2.exp gdb-10.2/gdb/testsuite/gdb.cp/class2.exp --- gdb-9.1/gdb/testsuite/gdb.cp/class2.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/class2.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2003-2020 Free Software Foundation, Inc. +# Copyright 2003-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/classes.cc gdb-10.2/gdb/testsuite/gdb.cp/classes.cc --- gdb-9.1/gdb/testsuite/gdb.cp/classes.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/classes.cc 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 1993-2020 Free Software Foundation, Inc. + Copyright 1993-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/classes.exp gdb-10.2/gdb/testsuite/gdb.cp/classes.exp --- gdb-9.1/gdb/testsuite/gdb.cp/classes.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/classes.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1992-2020 Free Software Foundation, Inc. +# Copyright 1992-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -24,7 +24,8 @@ standard_testfile .cc -if {[prepare_for_testing "failed to prepare" $testfile $srcfile {debug c++}]} { +if {[prepare_for_testing "failed to prepare" $testfile $srcfile \ + {debug c++ additional_flags=-Wno-deprecated-register}]} { return -1 } diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/cmpd-minsyms.cc gdb-10.2/gdb/testsuite/gdb.cp/cmpd-minsyms.cc --- gdb-9.1/gdb/testsuite/gdb.cp/cmpd-minsyms.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/cmpd-minsyms.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This test case is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/cmpd-minsyms.exp gdb-10.2/gdb/testsuite/gdb.cp/cmpd-minsyms.exp --- gdb-9.1/gdb/testsuite/gdb.cp/cmpd-minsyms.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/cmpd-minsyms.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # # Contributed by Red Hat, originally written by Keith Seitz. # diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/constexpr-field.cc gdb-10.2/gdb/testsuite/gdb.cp/constexpr-field.cc --- gdb-9.1/gdb/testsuite/gdb.cp/constexpr-field.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/constexpr-field.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2019-2020 Free Software Foundation, Inc. + Copyright 2019-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/constexpr-field.exp gdb-10.2/gdb/testsuite/gdb.cp/constexpr-field.exp --- gdb-9.1/gdb/testsuite/gdb.cp/constexpr-field.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/constexpr-field.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/converts.exp gdb-10.2/gdb/testsuite/gdb.cp/converts.exp --- gdb-9.1/gdb/testsuite/gdb.cp/converts.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/converts.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -36,8 +36,10 @@ gdb_test "p foo1_1 (a)" "= 11" "pointer to pointer" gdb_test "p foo1_2 (a)" "= 12" "pointer to array" -gdb_test "p foo1_3 (a)" "Cannot resolve.*" "pointer to pointer of wrong type" -gdb_test "p foo1_3 (bp)" "Cannot resolve.*" "pointer to pointer of wrong type" +gdb_test "p foo1_3 (a)" "Cannot resolve.*" \ + "pointer to pointer of wrong type, a" +gdb_test "p foo1_3 (bp)" "Cannot resolve.*" \ + "pointer to pointer of wrong type, bp" gdb_test "p foo1_4 (bp)" "= 14" "pointer to ancestor pointer" gdb_test "p foo1_5 (bp)" "= 15" "pointer to void pointer" gdb_test "p foo1_6 (bp)" "Cannot resolve.*" "pointer to void pointer pointer" @@ -94,28 +96,36 @@ # Test for strict type checking set error_str "Cannot resolve function %s to any overloaded instance" -gdb_test "show check type" "Strict type checking is on\." -gdb_test "p foo1_type_check (123)" [format $error_str "foo1_type_check"] -gdb_test "p foo2_type_check (0, 1)" [format $error_str "foo2_type_check"] -gdb_test "p foo2_type_check (1, 0)" [format $error_str "foo2_type_check"] -gdb_test "p foo2_type_check (1, 1)" [format $error_str "foo2_type_check"] -gdb_test "p foo3_type_check (0, 0, 1)" [format $error_str "foo3_type_check"] -gdb_test "p foo3_type_check (0, 1, 0)" [format $error_str "foo3_type_check"] -gdb_test "p foo3_type_check (1, 0, 0)" [format $error_str "foo3_type_check"] -gdb_test "p foo3_type_check (0, 1, 1)" [format $error_str "foo3_type_check"] -gdb_test "p foo3_type_check (1, 1, 0)" [format $error_str "foo3_type_check"] -gdb_test "p foo3_type_check (1, 1, 1)" [format $error_str "foo3_type_check"] +gdb_test "show check type" "Strict type checking is on\." \ + "confirm check type on" + +with_test_prefix "strict type checking on" { + gdb_test "p foo1_type_check (123)" [format $error_str "foo1_type_check"] + gdb_test "p foo2_type_check (0, 1)" [format $error_str "foo2_type_check"] + gdb_test "p foo2_type_check (1, 0)" [format $error_str "foo2_type_check"] + gdb_test "p foo2_type_check (1, 1)" [format $error_str "foo2_type_check"] + gdb_test "p foo3_type_check (0, 0, 1)" [format $error_str "foo3_type_check"] + gdb_test "p foo3_type_check (0, 1, 0)" [format $error_str "foo3_type_check"] + gdb_test "p foo3_type_check (1, 0, 0)" [format $error_str "foo3_type_check"] + gdb_test "p foo3_type_check (0, 1, 1)" [format $error_str "foo3_type_check"] + gdb_test "p foo3_type_check (1, 1, 0)" [format $error_str "foo3_type_check"] + gdb_test "p foo3_type_check (1, 1, 1)" [format $error_str "foo3_type_check"] +} gdb_test_no_output "set check type off" -gdb_test "show check type" "Strict type checking is off\." -gdb_test "p foo1_type_check (123)" " = 1000" -gdb_test "p foo2_type_check (0, 1)" " = 1001" -gdb_test "p foo2_type_check (1, 0)" " = 1001" -gdb_test "p foo2_type_check (1, 1)" " = 1001" -gdb_test "p foo3_type_check (0, 0, 1)" " = 1002" -gdb_test "p foo3_type_check (0, 1, 0)" " = 1002" -gdb_test "p foo3_type_check (1, 0, 0)" " = 1002" -gdb_test "p foo3_type_check (0, 1, 1)" " = 1002" -gdb_test "p foo3_type_check (1, 1, 0)" " = 1002" -gdb_test "p foo3_type_check (1, 1, 1)" " = 1002" -gdb_test "p foo3_2 (1,1)" " = 32" +gdb_test "show check type" "Strict type checking is off\." \ + "confirm check type off" + +with_test_prefix "strict type checking off" { + gdb_test "p foo1_type_check (123)" " = 1000" + gdb_test "p foo2_type_check (0, 1)" " = 1001" + gdb_test "p foo2_type_check (1, 0)" " = 1001" + gdb_test "p foo2_type_check (1, 1)" " = 1001" + gdb_test "p foo3_type_check (0, 0, 1)" " = 1002" + gdb_test "p foo3_type_check (0, 1, 0)" " = 1002" + gdb_test "p foo3_type_check (1, 0, 0)" " = 1002" + gdb_test "p foo3_type_check (0, 1, 1)" " = 1002" + gdb_test "p foo3_type_check (1, 1, 0)" " = 1002" + gdb_test "p foo3_type_check (1, 1, 1)" " = 1002" + gdb_test "p foo3_2 (1,1)" " = 32" +} diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/cpcompletion.exp gdb-10.2/gdb/testsuite/gdb.cp/cpcompletion.exp --- gdb-9.1/gdb/testsuite/gdb.cp/cpcompletion.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/cpcompletion.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2009-2020 Free Software Foundation, Inc. +# Copyright 2009-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/cpexprs.cc gdb-10.2/gdb/testsuite/gdb.cp/cpexprs.cc --- gdb-9.1/gdb/testsuite/gdb.cp/cpexprs.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/cpexprs.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2008-2020 Free Software Foundation, Inc. + Copyright 2008-2021 Free Software Foundation, Inc. Contributed by Red Hat, originally written by Keith Seitz. diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/cpexprs-debug-types.exp gdb-10.2/gdb/testsuite/gdb.cp/cpexprs-debug-types.exp --- gdb-9.1/gdb/testsuite/gdb.cp/cpexprs-debug-types.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/cpexprs-debug-types.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,20 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# This file is part of the gdb testsuite. + +# Run cpexprs.exp with -fdebug-types-section. +set flags {additional_flags=-fdebug-types-section} +source $srcdir/$subdir/cpexprs.exp.tcl diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/cpexprs.exp gdb-10.2/gdb/testsuite/gdb.cp/cpexprs.exp --- gdb-9.1/gdb/testsuite/gdb.cp/cpexprs.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/cpexprs.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # cpexprs.exp - C++ expressions tests # -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # # Contributed by Red Hat, originally written by Keith Seitz. # @@ -19,743 +19,6 @@ # This file is part of the gdb testsuite. -# A helper proc which sets a breakpoint at FUNC and attempts to -# run to the breakpoint. -proc test_breakpoint {func} { - global DEC - - # Return to the top of the test function every time. - delete_breakpoints - if { ! [gdb_breakpoint test_function] } { - fail "set test_function breakpoint for $func" - } elseif { [gdb_test "continue" \ - "Continuing.\r\n\r\nBreakpoint $DEC+,.*test_function.*" \ - ""] != 0 } { - fail "continue to test_function for $func" - } else { - gdb_breakpoint "$func" - set i [expr {[string last : $func] + 1}] - set efunc [string_to_regexp [string range $func $i end]] - gdb_test "continue" \ - "Continuing.\r\n\r\nBreakpoint $DEC+,.*$efunc.*" \ - "continue to $func" - } -} - -# Add a function to the list of tested functions -# FUNC is the name of the function (which will be passed to gdb commands) -# TYPE is the type of the function, as expected from the "print" command -# PRINT is the name of the function, as expected result of the print command -# *OR* "-", indicating that FUNC should be used (needed for virtual/inherited -# funcs) -# LST is either the expected result of the list command (the comment from -# the source code) *OR* "-", in which case FUNC will be used -# -# Usage: -# add NAME TYPE PRINT LST -# add NAME TYPE PRINT - -proc add_type_regexp {func type print lst} { - global all_functions CONVAR ADDR - - set all_functions($func,type) $type - if {$print == "-"} { - set print $func - } - - # An exception: since gdb canonicalizes C++ output, - # "(void)" must be mutated to "()". - regsub {\(void\)} $print {()} print - - set all_functions($func,print) \ - "$CONVAR = {$type} $ADDR <[string_to_regexp $print].*>" - if {$lst == "-"} { - set lst "$func" - } - set all_functions($func,list) ".*// [string_to_regexp $lst]" -} - -proc add {func type print lst} { - add_type_regexp $func [string_to_regexp $type] $print $lst -} - -proc get {func cmd} { - global all_functions - return $all_functions($func,$cmd) -} - -# Returns a list of function names for a given command -proc get_functions {cmd} { - global all_functions - set result {} - foreach i [array names all_functions *,$cmd] { - if {$all_functions($i) != ""} { - set idx [string last , $i] - if {$idx != -1} { - lappend result [string range $i 0 [expr {$idx - 1}]] - } - } - } - - return [lsort $result] -} - -# Some convenience variables for this test -set DEC {[0-9]}; # a decimal number -set HEX {[0-9a-fA-F]}; # a hexidecimal number -set CONVAR "\\\$$DEC+"; # convenience variable regexp -set ADDR "0x$HEX+"; # address - -# An array of functions/methods that we are testing... -# Each element consists is indexed by NAME,COMMAND, where -# NAME is the function name and COMMAND is the gdb command that -# we are testing. The value of the array for any index pair is -# the expected result of running COMMAND with the NAME as argument. - -# The array holding all functions/methods to test. Valid subindexes -# are (none need character escaping -- "add" will take care of that): - -# add name type print_name list -# NAME,type: value is type of function -# NAME,print: value is print name of function (careful w/inherited/virtual!) -# NAME,list: value is comment in source code on first line of function -# (without the leading "//") -array set all_functions {} - -# "Normal" functions/methods -add {test_function} \ - {int (int, char **)} \ - - \ - - -add {derived::a_function} \ - {void (const derived * const)} \ - - \ - - -add {base1::a_function} \ - {void (const base1 * const)} \ - - \ - - -add {base2::a_function} \ - {void (const base2 * const)} \ - - \ - - - -# Constructors - -# On targets using the ARM EABI, the constructor is expected to return -# "this". -proc ctor_ret { type } { - if { [istarget arm*-*eabi*] || [is_aarch32_target] } { - return "$type *" - } else { - return "void " - } -} - -proc ctor_prefix { type } { - set ret [ctor_ret $type] - return "${ret}($type * const" -} - -proc ctor { type arglist } { - if { $arglist != "" } { - set arglist ", $arglist" - } - return "[ctor_prefix $type]$arglist)" -} - -add {derived::derived} \ - [ctor derived ""] \ - - \ - - -add_type_regexp {base1::base1(void)} \ - "[string_to_regexp [ctor_prefix base1]], (const )?void \\*\\*( const)?\\)" \ - - \ - - -add {base1::base1(int)} \ - [ctor base1 "int"] \ - - \ - - -add_type_regexp {base2::base2} \ - "[string_to_regexp [ctor_prefix base2]], (const )?void \\*\\*( const)?\\)" \ - - \ - - -add {base::base(void)} \ - [ctor base ""] \ - - \ - - -add {base::base(int)} \ - [ctor base "int"] \ - - \ - - - -# Destructors - -# On targets using the ARM EABI, some destructors are expected -# to return "this". Others are void. For internal reasons, -# GCC returns void * instead of $type *; RealView appears to do -# the same. -proc dtor { type } { - if { [istarget arm*-*eabi*] || [is_aarch32_target] } { - set ret "void *" - } else { - set ret "void " - } - return "${ret}($type * const)" -} - -add {base::~base} \ - [dtor base] \ - - \ - - - -# Overloaded methods (all are const) -add {base::overload(void) const} \ - {int (const base * const)} \ - - \ - {base::overload(void) const} -add {base::overload(int) const} \ - {int (const base * const, int)} \ - - \ - - -add {base::overload(short) const} \ - {int (const base * const, short)} \ - - \ - - -add {base::overload(long) const} \ - {int (const base * const, long)} \ - - \ - - -add {base::overload(char*) const} \ - {int (const base * const, char *)} \ - - \ - - -add {base::overload(base&) const} \ - {int (const base * const, base &)} \ - - \ - - - -# Operators -add {base::operator+} \ - {int (const base * const, const base &)} \ - - \ - - -add {base::operator++} \ - {base (base * const)} \ - - \ - - -add {base::operator+=} \ - {base (base * const, const base &)} \ - - \ - - -add {base::operator-} \ - {int (const base * const, const base &)} \ - - \ - - -add {base::operator--} \ - {base (base * const)} \ - - \ - - -add {base::operator-=} \ - {base (base * const, const base &)} \ - - \ - - -add {base::operator*} \ - {int (const base * const, const base &)} \ - - \ - - -add {base::operator*=} \ - {base (base * const, const base &)} \ - - \ - - -add {base::operator/} \ - {int (const base * const, const base &)} \ - - \ - - -add {base::operator/=} \ - {base (base * const, const base &)} \ - - \ - - -add {base::operator%} \ - {int (const base * const, const base &)} \ - - \ - - -add {base::operator%=} \ - {base (base * const, const base &)} \ - - \ - - -add {base::operator<} \ - {bool (const base * const, const base &)} \ - - \ - - -add {base::operator<=} \ - {bool (const base * const, const base &)} \ - - \ - - -add {base::operator>} \ - {bool (const base * const, const base &)} \ - - \ - - -add {base::operator>=} \ - {bool (const base * const, const base &)} \ - - \ - - -add {base::operator!=} \ - {bool (const base * const, const base &)} \ - - \ - - -add {base::operator==} \ - {bool (const base * const, const base &)} \ - - \ - - -add {base::operator!} \ - {bool (const base * const)} \ - - \ - - -add {base::operator&&} \ - {bool (const base * const, const base &)} \ - - \ - - -add {base::operator||} \ - {bool (const base * const, const base &)} \ - - \ - - -add {base::operator<<} \ - {int (const base * const, int)} \ - - \ - - -add {base::operator<<=} \ - {base (base * const, int)} \ - - \ - - -add {base::operator>>} \ - {int (const base * const, int)} \ - - \ - - -add {base::operator>>=} \ - {base (base * const, int)} \ - - \ - - -add {base::operator~} \ - {int (const base * const)} \ - - \ - - -add {base::operator&} \ - {int (const base * const, const base &)} \ - - \ - - -add {base::operator&=} \ - {base (base * const, const base &)} \ - - \ - - -add {base::operator|} \ - {int (const base * const, const base &)} \ - - \ - - -add {base::operator|=} \ - {base (base * const, const base &)} \ - - \ - - -add {base::operator^} \ - {int (const base * const, const base &)} \ - - \ - - -add {base::operator^=} \ - {base (base * const, const base &)} \ - - \ - - -add {base::operator=} \ - {base (base * const, const base &)} \ - - \ - - -add {base::operator()} \ - {void (const base * const)} \ - - \ - - -add {base::operator[]} \ - {int (const base * const, int)} \ - - \ - - -add {base::operator new} \ - {void *(size_t)} \ - - \ - - -add {base::operator delete} \ - {void (void *)} \ - - \ - - -add {base::operator new[]} \ - {void *(size_t)} \ - - \ - - -add {base::operator delete[]} \ - {void (void *)} \ - - \ - - -add {base::operator char*} \ - {char *(const base * const)} \ - - \ - - -add {base::operator fluff*} \ - {fluff *(const base * const)} \ - - \ - - -add {base::operator fluff**} \ - {fluff **(const base * const)} \ - - \ - - -add {base::operator int} \ - {int (const base * const)} \ - - \ - - -add {base::operator fluff const* const*} \ - {const fluff * const *(const base * const)} \ - - \ - - - -# Templates -add {tclass<char>::do_something} \ - {void (tclass<char> * const)} \ - - \ - - -add {tclass<int>::do_something} \ - {void (tclass<int> * const)} \ - - \ - - -add {tclass<long>::do_something} \ - {void (tclass<long> * const)} \ - - \ - - -add {tclass<short>::do_something} \ - {void (tclass<short> * const)} \ - - \ - - -add {tclass<base>::do_something} \ - {void (tclass<base> * const)} \ - - \ - - -add {flubber<int, int, int, int, int>} \ - {void (void)} \ - - \ - flubber -add {flubber<int, int, int, int, short>} \ - {void (void)} \ - - \ - flubber -add {flubber<int, int, int, int, long>} \ - {void (void)} \ - - \ - flubber -add {flubber<int, int, int, int, char>} \ - {void (void)} \ - - \ - flubber -add {flubber<int, int, int, short, int>} \ - {void (void)} \ - - \ - flubber -add {flubber<int, int, int, short, short>} \ - {void (void)} \ - - \ - flubber -add {flubber<int, int, int, short, long>} \ - {void (void)} \ - - \ - flubber -add {flubber<int, int, int, short, char>} \ - {void (void)} \ - - \ - flubber -add {flubber<int, int, int, long, int>} \ - {void (void)} \ - - \ - flubber -add {flubber<int, int, int, long, short>} \ - {void (void)} \ - - \ - flubber -add {flubber<int, int, int, long, long>} \ - {void (void)} \ - - \ - flubber -add {flubber<int, int, int, long, char>} \ - {void (void)} \ - - \ - flubber -add {flubber<int, int, int, char, int>} \ - {void (void)} \ - - \ - flubber -add {flubber<int, int, int, char, short>} \ - {void (void)} \ - - \ - flubber -add {flubber<int, int, int, char, long>} \ - {void (void)} \ - - \ - flubber -add {flubber<int, int, int, char, char>} \ - {void (void)} \ - - \ - flubber -add {flubber<int, int, short, int, int>} \ - {void (void)} \ - - \ - flubber -add {flubber<int, int, short, int, short>} \ - {void (void)} \ - - \ - flubber -add {flubber<int, int, short, int, long>} \ - {void (void)} \ - - \ - flubber -add {flubber<int, int, short, int, char>} \ - {void (void)} \ - - \ - flubber -add {flubber<int, int, short, short, int>} \ - {void (void)} \ - - \ - flubber -add {flubber<short, int, short, int, short>} \ - {void (void)} \ - - \ - flubber -add {flubber<long, short, long, short, long>} \ - {void (void)} \ - - \ - flubber -add {tclass<base>::do_something} \ - {void (tclass<base> * const)} \ - - \ - {tclass<T>::do_something} -add {policy1::policy} \ - [ctor "policy<int, operation_1<void*> >" "int"] \ - {policy<int, operation_1<void*> >::policy} \ - {policy<T, Policy>::policy} -add {policy2::policy} \ - [ctor "policy<int, operation_2<void*> >" int] \ - {policy<int, operation_2<void*> >::policy} \ - {policy<T, Policy>::policy} -add {policy3::policy} \ - [ctor "policy<int, operation_3<void*> >" "int"] \ - {policy<int, operation_3<void*> >::policy} \ - {policy<T, Policy>::policy} -add {policy4::policy} \ - [ctor "policy<int, operation_4<void*> >" "int"] \ - {policy<int, operation_4<void*> >::policy} \ - {policy<T, Policy>::policy} -add {policy1::function} \ - {void (void)} \ - {operation_1<void*>::function} \ - {operation_1<T>::function} -add {policy2::function} \ - {void (void)} \ - {operation_2<void*>::function} \ - {operation_2<T>::function} -add {policy3::function} \ - {void (void)} \ - {operation_3<void*>::function} \ - {operation_3<T>::function} -add {policy4::function} \ - {void (void)} \ - {operation_4<void*>::function} \ - {operation_4<T>::function} -add {policyd<int, operation_1<int> >::policyd} \ - [ctor "policyd<int, operation_1<int> >" "int"] \ - - \ - {policyd<T, Policy>::policyd} -add {policyd1::policyd} \ - [ctor "policyd<int, operation_1<int> >" "int"] \ - {policyd<int, operation_1<int> >::policyd} \ - {policyd<T, Policy>::policyd} -add {policyd<int, operation_1<int> >::~policyd} \ - [dtor "policyd<int, operation_1<int> >"] \ - - \ - {policyd<T, Policy>::~policyd} -add {policyd1::~policyd} \ - [dtor "policyd<int, operation_1<int> >"] \ - {policyd<int, operation_1<int> >::~policyd} \ - {policyd<T, Policy>::~policyd} -add {policyd<long, operation_1<long> >::policyd} \ - [ctor "policyd<long, operation_1<long> >" "long"] \ - - \ - {policyd<T, Policy>::policyd} -add {policyd2::policyd} \ - [ctor "policyd<long, operation_1<long> >" "long"] \ - {policyd<long, operation_1<long> >::policyd} \ - {policyd<T, Policy>::policyd} -add {policyd<long, operation_1<long> >::~policyd} \ - [dtor "policyd<long, operation_1<long> >"] \ - - \ - {policyd<T, Policy>::~policyd} -add {policyd2::~policyd} \ - [dtor "policyd<long, operation_1<long> >"] \ - {policyd<long, operation_1<long> >::~policyd} \ - {policyd<T, Policy>::~policyd} -add {policyd<char, operation_1<char> >::policyd} \ - [ctor "policyd<char, operation_1<char> >" "char"] \ - - \ - {policyd<T, Policy>::policyd} -add {policyd3::policyd} \ - [ctor "policyd<char, operation_1<char> >" "char"] \ - {policyd<char, operation_1<char> >::policyd} \ - {policyd<T, Policy>::policyd} -add {policyd<char, operation_1<char> >::~policyd} \ - [dtor "policyd<char, operation_1<char> >"] \ - - \ - {policyd<T, Policy>::~policyd} -add {policyd3::~policyd} \ - [dtor "policyd<char, operation_1<char> >"] \ - {policyd<char, operation_1<char> >::~policyd} \ - {policyd<T, Policy>::~policyd} -add {policyd<base, operation_1<base> >::policyd} \ - [ctor "policyd<base, operation_1<base> >" "base"] \ - - \ - {policyd<T, Policy>::policyd} -add {policyd4::policyd} \ - [ctor "policyd<base, operation_1<base> >" "base"] \ - {policyd<base, operation_1<base> >::policyd} \ - {policyd<T, Policy>::policyd} -add {policyd<base, operation_1<base> >::~policyd} \ - [dtor "policyd<base, operation_1<base> >"] \ - - \ - {policyd<T, Policy>::~policyd} -add {policyd4::~policyd} \ - [dtor "policyd<base, operation_1<base> >"] \ - {policyd<base, operation_1<base> >::~policyd} \ - {policyd<T, Policy>::~policyd} -add {policyd<tclass<int>, operation_1<tclass<int> > >::policyd} \ - [ctor "policyd<tclass<int>, operation_1<tclass<int> > >" "tclass<int>"] \ - - \ - {policyd<T, Policy>::policyd} -add {policyd5::policyd} \ - [ctor "policyd<tclass<int>, operation_1<tclass<int> > >" "tclass<int>"] \ - {policyd<tclass<int>, operation_1<tclass<int> > >::policyd} \ - {policyd<T, Policy>::policyd} -add {policyd<tclass<int>, operation_1<tclass<int> > >::~policyd} \ - [dtor "policyd<tclass<int>, operation_1<tclass<int> > >"] \ - - \ - {policyd<T, Policy>::~policyd} -add {policyd5::~policyd} \ - [dtor "policyd<tclass<int>, operation_1<tclass<int> > >"] \ - {policyd<tclass<int>, operation_1<tclass<int> > >::~policyd} \ - {policyd<T, Policy>::~policyd} -add {policyd<int, operation_1<int> >::function} \ - {void (void)} \ - {operation_1<int>::function}\ - {operation_1<T>::function} -add {policyd1::function} \ - {void (void)} \ - {operation_1<int>::function} \ - {operation_1<T>::function} -add {policyd2::function} \ - {void (void)} \ - {operation_1<long>::function} \ - {operation_1<T>::function} -add {policyd<char, operation_1<char> >::function} \ - {void (void)} \ - {operation_1<char>::function} \ - {operation_1<T>::function} -add {policyd3::function} \ - {void (void)} \ - {operation_1<char>::function} \ - {operation_1<T>::function} -add {policyd<base, operation_1<base> >::function} \ - {void (void)} \ - {operation_1<base>::function} \ - {operation_1<T>::function} -add {policyd4::function} \ - {void (void)} \ - {operation_1<base>::function} \ - {operation_1<T>::function} -add {policyd<tclass<int>, operation_1<tclass<int> > >::function} \ - {void (void)} \ - {operation_1<tclass<int> >::function} \ - {operation_1<T>::function} -add {policyd5::function} \ - {void (void)} \ - {operation_1<tclass<int> >::function} \ - {operation_1<T>::function} - -# Start the test -if {[skip_cplus_tests]} { continue } - -# -# test running programs -# - -standard_testfile .cc - -if {[get_compiler_info "c++"]} { - return -1 -} - -if {[prepare_for_testing "failed to prepare" $testfile $srcfile {debug c++}]} { - return -1 -} - -if {![runto_main]} { - perror "couldn't run to breakpoint" - continue -} - -# Set the listsize to one. This will help with testing "list". -gdb_test "set listsize 1" - -# "print METHOD" -foreach name [get_functions print] { - gdb_test "print $name" [get $name print] -} - -# "list METHOD" -foreach name [get_functions list] { - gdb_test "list $name" [get $name list] -} - -# Running to breakpoint -- use any function we can "list" -foreach name [get_functions list] { - # Skip "test_function", since test_breakpoint uses it - if {[string compare $name "test_function"] != 0} { - test_breakpoint $name - } -} - -# Test c/v gets recognized even without quoting. -foreach cv {{} { const} { volatile} { const volatile}} { - set test "p 'CV::m(int)$cv'" - gdb_test_multiple $test $test { - -re "( = {.*} 0x\[0-9a-f\]+ <CV::m.*>)\r\n$gdb_prompt $" { - # = {void (CV * const, CV::t)} 0x400944 <CV::m(int)> - set correct $expect_out(1,string) - pass $test - } - } - if {"$cv" != ""} { - setup_kfail c++/14186 *-*-* - } - gdb_test "p CV::m(int)$cv" [string_to_regexp $correct] -} - -# Test TYPENAME:: gets recognized even in parentheses. -gdb_test "p CV_f(int)" { = {int \(int\)} 0x[0-9a-f]+ <CV_f\(int\)>} -gdb_test "p CV_f(CV::t)" { = {int \(int\)} 0x[0-9a-f]+ <CV_f\(int\)>} -gdb_test "p CV_f(CV::i)" " = 43" - -gdb_test "p CV_f('cpexprs.cc'::CV::t)" \ - { = {int \(int\)} 0x[0-9a-f]+ <CV_f\(int\)>} - -# Make sure conversion operator names are canonicalized and properly -# "spelled." -gdb_test "p base::operator const fluff * const *" \ - [get "base::operator fluff const* const*" print] \ - "canonicalized conversion operator name 1" -gdb_test "p base::operator const fluff* const*" \ - [get "base::operator fluff const* const*" print] \ - "canonicalized conversion operator name 2" -gdb_test "p base::operator derived*" \ - "There is no field named operator derived\\*" \ - "undefined conversion operator" - -gdb_exit -return 0 +# Run cpexprs.exp. +set flags {} +source $srcdir/$subdir/cpexprs.exp.tcl diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/cpexprs.exp.tcl gdb-10.2/gdb/testsuite/gdb.cp/cpexprs.exp.tcl --- gdb-9.1/gdb/testsuite/gdb.cp/cpexprs.exp.tcl 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/cpexprs.exp.tcl 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,761 @@ +# cpexprs.exp - C++ expressions tests +# +# Copyright 2008-2021 Free Software Foundation, Inc. +# +# Contributed by Red Hat, originally written by Keith Seitz. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# This file is part of the gdb testsuite. + +# A helper proc which sets a breakpoint at FUNC and attempts to +# run to the breakpoint. +proc test_breakpoint {func} { + global DEC + + # Return to the top of the test function every time. + delete_breakpoints + if { ! [gdb_breakpoint test_function] } { + fail "set test_function breakpoint for $func" + } elseif { [gdb_test "continue" \ + "Continuing.\r\n\r\nBreakpoint $DEC+,.*test_function.*" \ + ""] != 0 } { + fail "continue to test_function for $func" + } else { + gdb_breakpoint "$func" + set i [expr {[string last : $func] + 1}] + set efunc [string_to_regexp [string range $func $i end]] + gdb_test "continue" \ + "Continuing.\r\n\r\nBreakpoint $DEC+,.*$efunc.*" \ + "continue to $func" + } +} + +# Add a function to the list of tested functions +# FUNC is the name of the function (which will be passed to gdb commands) +# TYPE is the type of the function, as expected from the "print" command +# PRINT is the name of the function, as expected result of the print command +# *OR* "-", indicating that FUNC should be used (needed for virtual/inherited +# funcs) +# LST is either the expected result of the list command (the comment from +# the source code) *OR* "-", in which case FUNC will be used +# +# Usage: +# add NAME TYPE PRINT LST +# add NAME TYPE PRINT - +proc add_type_regexp {func type print lst} { + global all_functions CONVAR ADDR + + set all_functions($func,type) $type + if {$print == "-"} { + set print $func + } + + # An exception: since gdb canonicalizes C++ output, + # "(void)" must be mutated to "()". + regsub {\(void\)} $print {()} print + + set all_functions($func,print) \ + "$CONVAR = {$type} $ADDR <[string_to_regexp $print].*>" + if {$lst == "-"} { + set lst "$func" + } + set all_functions($func,list) ".*// [string_to_regexp $lst]" +} + +proc add {func type print lst} { + add_type_regexp $func [string_to_regexp $type] $print $lst +} + +proc get {func cmd} { + global all_functions + return $all_functions($func,$cmd) +} + +# Returns a list of function names for a given command +proc get_functions {cmd} { + global all_functions + set result {} + foreach i [array names all_functions *,$cmd] { + if {$all_functions($i) != ""} { + set idx [string last , $i] + if {$idx != -1} { + lappend result [string range $i 0 [expr {$idx - 1}]] + } + } + } + + return [lsort $result] +} + +# Some convenience variables for this test +set DEC {[0-9]}; # a decimal number +set HEX {[0-9a-fA-F]}; # a hexidecimal number +set CONVAR "\\\$$DEC+"; # convenience variable regexp +set ADDR "0x$HEX+"; # address + +# An array of functions/methods that we are testing... +# Each element consists is indexed by NAME,COMMAND, where +# NAME is the function name and COMMAND is the gdb command that +# we are testing. The value of the array for any index pair is +# the expected result of running COMMAND with the NAME as argument. + +# The array holding all functions/methods to test. Valid subindexes +# are (none need character escaping -- "add" will take care of that): + +# add name type print_name list +# NAME,type: value is type of function +# NAME,print: value is print name of function (careful w/inherited/virtual!) +# NAME,list: value is comment in source code on first line of function +# (without the leading "//") +array set all_functions {} + +# "Normal" functions/methods +add {test_function} \ + {int (int, char **)} \ + - \ + - +add {derived::a_function} \ + {void (const derived * const)} \ + - \ + - +add {base1::a_function} \ + {void (const base1 * const)} \ + - \ + - +add {base2::a_function} \ + {void (const base2 * const)} \ + - \ + - + +# Constructors + +# On targets using the ARM EABI, the constructor is expected to return +# "this". +proc ctor_ret { type } { + if { [istarget arm*-*eabi*] || [is_aarch32_target] } { + return "$type *" + } else { + return "void " + } +} + +proc ctor_prefix { type } { + set ret [ctor_ret $type] + return "${ret}($type * const" +} + +proc ctor { type arglist } { + if { $arglist != "" } { + set arglist ", $arglist" + } + return "[ctor_prefix $type]$arglist)" +} + +add {derived::derived} \ + [ctor derived ""] \ + - \ + - +add_type_regexp {base1::base1(void)} \ + "[string_to_regexp [ctor_prefix base1]], (const )?void \\*\\*( const)?\\)" \ + - \ + - +add {base1::base1(int)} \ + [ctor base1 "int"] \ + - \ + - +add_type_regexp {base2::base2} \ + "[string_to_regexp [ctor_prefix base2]], (const )?void \\*\\*( const)?\\)" \ + - \ + - +add {base::base(void)} \ + [ctor base ""] \ + - \ + - +add {base::base(int)} \ + [ctor base "int"] \ + - \ + - + +# Destructors + +# On targets using the ARM EABI, some destructors are expected +# to return "this". Others are void. For internal reasons, +# GCC returns void * instead of $type *; RealView appears to do +# the same. +proc dtor { type } { + if { [istarget arm*-*eabi*] || [is_aarch32_target] } { + set ret "void *" + } else { + set ret "void " + } + return "${ret}($type * const)" +} + +add {base::~base} \ + [dtor base] \ + - \ + - + +# Overloaded methods (all are const) +add {base::overload(void) const} \ + {int (const base * const)} \ + - \ + {base::overload(void) const} +add {base::overload(int) const} \ + {int (const base * const, int)} \ + - \ + - +add {base::overload(short) const} \ + {int (const base * const, short)} \ + - \ + - +add {base::overload(long) const} \ + {int (const base * const, long)} \ + - \ + - +add {base::overload(char*) const} \ + {int (const base * const, char *)} \ + - \ + - +add {base::overload(base&) const} \ + {int (const base * const, base &)} \ + - \ + - + +# Operators +add {base::operator+} \ + {int (const base * const, const base &)} \ + - \ + - +add {base::operator++} \ + {base (base * const)} \ + - \ + - +add {base::operator+=} \ + {base (base * const, const base &)} \ + - \ + - +add {base::operator-} \ + {int (const base * const, const base &)} \ + - \ + - +add {base::operator--} \ + {base (base * const)} \ + - \ + - +add {base::operator-=} \ + {base (base * const, const base &)} \ + - \ + - +add {base::operator*} \ + {int (const base * const, const base &)} \ + - \ + - +add {base::operator*=} \ + {base (base * const, const base &)} \ + - \ + - +add {base::operator/} \ + {int (const base * const, const base &)} \ + - \ + - +add {base::operator/=} \ + {base (base * const, const base &)} \ + - \ + - +add {base::operator%} \ + {int (const base * const, const base &)} \ + - \ + - +add {base::operator%=} \ + {base (base * const, const base &)} \ + - \ + - +add {base::operator<} \ + {bool (const base * const, const base &)} \ + - \ + - +add {base::operator<=} \ + {bool (const base * const, const base &)} \ + - \ + - +add {base::operator>} \ + {bool (const base * const, const base &)} \ + - \ + - +add {base::operator>=} \ + {bool (const base * const, const base &)} \ + - \ + - +add {base::operator!=} \ + {bool (const base * const, const base &)} \ + - \ + - +add {base::operator==} \ + {bool (const base * const, const base &)} \ + - \ + - +add {base::operator!} \ + {bool (const base * const)} \ + - \ + - +add {base::operator&&} \ + {bool (const base * const, const base &)} \ + - \ + - +add {base::operator||} \ + {bool (const base * const, const base &)} \ + - \ + - +add {base::operator<<} \ + {int (const base * const, int)} \ + - \ + - +add {base::operator<<=} \ + {base (base * const, int)} \ + - \ + - +add {base::operator>>} \ + {int (const base * const, int)} \ + - \ + - +add {base::operator>>=} \ + {base (base * const, int)} \ + - \ + - +add {base::operator~} \ + {int (const base * const)} \ + - \ + - +add {base::operator&} \ + {int (const base * const, const base &)} \ + - \ + - +add {base::operator&=} \ + {base (base * const, const base &)} \ + - \ + - +add {base::operator|} \ + {int (const base * const, const base &)} \ + - \ + - +add {base::operator|=} \ + {base (base * const, const base &)} \ + - \ + - +add {base::operator^} \ + {int (const base * const, const base &)} \ + - \ + - +add {base::operator^=} \ + {base (base * const, const base &)} \ + - \ + - +add {base::operator=} \ + {base (base * const, const base &)} \ + - \ + - +add {base::operator()} \ + {void (const base * const)} \ + - \ + - +add {base::operator[]} \ + {int (const base * const, int)} \ + - \ + - +add {base::operator new} \ + {void *(size_t)} \ + - \ + - +add {base::operator delete} \ + {void (void *)} \ + - \ + - +add {base::operator new[]} \ + {void *(size_t)} \ + - \ + - +add {base::operator delete[]} \ + {void (void *)} \ + - \ + - +add {base::operator char*} \ + {char *(const base * const)} \ + - \ + - +add {base::operator fluff*} \ + {fluff *(const base * const)} \ + - \ + - +add {base::operator fluff**} \ + {fluff **(const base * const)} \ + - \ + - +add {base::operator int} \ + {int (const base * const)} \ + - \ + - +add {base::operator fluff const* const*} \ + {const fluff * const *(const base * const)} \ + - \ + - + +# Templates +add {tclass<char>::do_something} \ + {void (tclass<char> * const)} \ + - \ + - +add {tclass<int>::do_something} \ + {void (tclass<int> * const)} \ + - \ + - +add {tclass<long>::do_something} \ + {void (tclass<long> * const)} \ + - \ + - +add {tclass<short>::do_something} \ + {void (tclass<short> * const)} \ + - \ + - +add {tclass<base>::do_something} \ + {void (tclass<base> * const)} \ + - \ + - +add {flubber<int, int, int, int, int>} \ + {void (void)} \ + - \ + flubber +add {flubber<int, int, int, int, short>} \ + {void (void)} \ + - \ + flubber +add {flubber<int, int, int, int, long>} \ + {void (void)} \ + - \ + flubber +add {flubber<int, int, int, int, char>} \ + {void (void)} \ + - \ + flubber +add {flubber<int, int, int, short, int>} \ + {void (void)} \ + - \ + flubber +add {flubber<int, int, int, short, short>} \ + {void (void)} \ + - \ + flubber +add {flubber<int, int, int, short, long>} \ + {void (void)} \ + - \ + flubber +add {flubber<int, int, int, short, char>} \ + {void (void)} \ + - \ + flubber +add {flubber<int, int, int, long, int>} \ + {void (void)} \ + - \ + flubber +add {flubber<int, int, int, long, short>} \ + {void (void)} \ + - \ + flubber +add {flubber<int, int, int, long, long>} \ + {void (void)} \ + - \ + flubber +add {flubber<int, int, int, long, char>} \ + {void (void)} \ + - \ + flubber +add {flubber<int, int, int, char, int>} \ + {void (void)} \ + - \ + flubber +add {flubber<int, int, int, char, short>} \ + {void (void)} \ + - \ + flubber +add {flubber<int, int, int, char, long>} \ + {void (void)} \ + - \ + flubber +add {flubber<int, int, int, char, char>} \ + {void (void)} \ + - \ + flubber +add {flubber<int, int, short, int, int>} \ + {void (void)} \ + - \ + flubber +add {flubber<int, int, short, int, short>} \ + {void (void)} \ + - \ + flubber +add {flubber<int, int, short, int, long>} \ + {void (void)} \ + - \ + flubber +add {flubber<int, int, short, int, char>} \ + {void (void)} \ + - \ + flubber +add {flubber<int, int, short, short, int>} \ + {void (void)} \ + - \ + flubber +add {flubber<short, int, short, int, short>} \ + {void (void)} \ + - \ + flubber +add {flubber<long, short, long, short, long>} \ + {void (void)} \ + - \ + flubber +add {tclass<base>::do_something} \ + {void (tclass<base> * const)} \ + - \ + {tclass<T>::do_something} +add {policy1::policy} \ + [ctor "policy<int, operation_1<void*> >" "int"] \ + {policy<int, operation_1<void*> >::policy} \ + {policy<T, Policy>::policy} +add {policy2::policy} \ + [ctor "policy<int, operation_2<void*> >" int] \ + {policy<int, operation_2<void*> >::policy} \ + {policy<T, Policy>::policy} +add {policy3::policy} \ + [ctor "policy<int, operation_3<void*> >" "int"] \ + {policy<int, operation_3<void*> >::policy} \ + {policy<T, Policy>::policy} +add {policy4::policy} \ + [ctor "policy<int, operation_4<void*> >" "int"] \ + {policy<int, operation_4<void*> >::policy} \ + {policy<T, Policy>::policy} +add {policy1::function} \ + {void (void)} \ + {operation_1<void*>::function} \ + {operation_1<T>::function} +add {policy2::function} \ + {void (void)} \ + {operation_2<void*>::function} \ + {operation_2<T>::function} +add {policy3::function} \ + {void (void)} \ + {operation_3<void*>::function} \ + {operation_3<T>::function} +add {policy4::function} \ + {void (void)} \ + {operation_4<void*>::function} \ + {operation_4<T>::function} +add {policyd<int, operation_1<int> >::policyd} \ + [ctor "policyd<int, operation_1<int> >" "int"] \ + - \ + {policyd<T, Policy>::policyd} +add {policyd1::policyd} \ + [ctor "policyd<int, operation_1<int> >" "int"] \ + {policyd<int, operation_1<int> >::policyd} \ + {policyd<T, Policy>::policyd} +add {policyd<int, operation_1<int> >::~policyd} \ + [dtor "policyd<int, operation_1<int> >"] \ + - \ + {policyd<T, Policy>::~policyd} +add {policyd1::~policyd} \ + [dtor "policyd<int, operation_1<int> >"] \ + {policyd<int, operation_1<int> >::~policyd} \ + {policyd<T, Policy>::~policyd} +add {policyd<long, operation_1<long> >::policyd} \ + [ctor "policyd<long, operation_1<long> >" "long"] \ + - \ + {policyd<T, Policy>::policyd} +add {policyd2::policyd} \ + [ctor "policyd<long, operation_1<long> >" "long"] \ + {policyd<long, operation_1<long> >::policyd} \ + {policyd<T, Policy>::policyd} +add {policyd<long, operation_1<long> >::~policyd} \ + [dtor "policyd<long, operation_1<long> >"] \ + - \ + {policyd<T, Policy>::~policyd} +add {policyd2::~policyd} \ + [dtor "policyd<long, operation_1<long> >"] \ + {policyd<long, operation_1<long> >::~policyd} \ + {policyd<T, Policy>::~policyd} +add {policyd<char, operation_1<char> >::policyd} \ + [ctor "policyd<char, operation_1<char> >" "char"] \ + - \ + {policyd<T, Policy>::policyd} +add {policyd3::policyd} \ + [ctor "policyd<char, operation_1<char> >" "char"] \ + {policyd<char, operation_1<char> >::policyd} \ + {policyd<T, Policy>::policyd} +add {policyd<char, operation_1<char> >::~policyd} \ + [dtor "policyd<char, operation_1<char> >"] \ + - \ + {policyd<T, Policy>::~policyd} +add {policyd3::~policyd} \ + [dtor "policyd<char, operation_1<char> >"] \ + {policyd<char, operation_1<char> >::~policyd} \ + {policyd<T, Policy>::~policyd} +add {policyd<base, operation_1<base> >::policyd} \ + [ctor "policyd<base, operation_1<base> >" "base"] \ + - \ + {policyd<T, Policy>::policyd} +add {policyd4::policyd} \ + [ctor "policyd<base, operation_1<base> >" "base"] \ + {policyd<base, operation_1<base> >::policyd} \ + {policyd<T, Policy>::policyd} +add {policyd<base, operation_1<base> >::~policyd} \ + [dtor "policyd<base, operation_1<base> >"] \ + - \ + {policyd<T, Policy>::~policyd} +add {policyd4::~policyd} \ + [dtor "policyd<base, operation_1<base> >"] \ + {policyd<base, operation_1<base> >::~policyd} \ + {policyd<T, Policy>::~policyd} +add {policyd<tclass<int>, operation_1<tclass<int> > >::policyd} \ + [ctor "policyd<tclass<int>, operation_1<tclass<int> > >" "tclass<int>"] \ + - \ + {policyd<T, Policy>::policyd} +add {policyd5::policyd} \ + [ctor "policyd<tclass<int>, operation_1<tclass<int> > >" "tclass<int>"] \ + {policyd<tclass<int>, operation_1<tclass<int> > >::policyd} \ + {policyd<T, Policy>::policyd} +add {policyd<tclass<int>, operation_1<tclass<int> > >::~policyd} \ + [dtor "policyd<tclass<int>, operation_1<tclass<int> > >"] \ + - \ + {policyd<T, Policy>::~policyd} +add {policyd5::~policyd} \ + [dtor "policyd<tclass<int>, operation_1<tclass<int> > >"] \ + {policyd<tclass<int>, operation_1<tclass<int> > >::~policyd} \ + {policyd<T, Policy>::~policyd} +add {policyd<int, operation_1<int> >::function} \ + {void (void)} \ + {operation_1<int>::function}\ + {operation_1<T>::function} +add {policyd1::function} \ + {void (void)} \ + {operation_1<int>::function} \ + {operation_1<T>::function} +add {policyd2::function} \ + {void (void)} \ + {operation_1<long>::function} \ + {operation_1<T>::function} +add {policyd<char, operation_1<char> >::function} \ + {void (void)} \ + {operation_1<char>::function} \ + {operation_1<T>::function} +add {policyd3::function} \ + {void (void)} \ + {operation_1<char>::function} \ + {operation_1<T>::function} +add {policyd<base, operation_1<base> >::function} \ + {void (void)} \ + {operation_1<base>::function} \ + {operation_1<T>::function} +add {policyd4::function} \ + {void (void)} \ + {operation_1<base>::function} \ + {operation_1<T>::function} +add {policyd<tclass<int>, operation_1<tclass<int> > >::function} \ + {void (void)} \ + {operation_1<tclass<int> >::function} \ + {operation_1<T>::function} +add {policyd5::function} \ + {void (void)} \ + {operation_1<tclass<int> >::function} \ + {operation_1<T>::function} + +# Start the test +if {[skip_cplus_tests]} { continue } + +# +# test running programs +# + +standard_testfile cpexprs.cc + +if {[get_compiler_info "c++"]} { + return -1 +} + +# Include required flags. +set flags "$flags debug c++" + +if {[prepare_for_testing "failed to prepare" $testfile $srcfile "$flags"]} { + return -1 +} + +if {![runto_main]} { + perror "couldn't run to breakpoint" + continue +} + +# Set the listsize to one. This will help with testing "list". +gdb_test "set listsize 1" + +# "print METHOD" +foreach name [get_functions print] { + gdb_test "print $name" [get $name print] +} + +# "list METHOD" +foreach name [get_functions list] { + gdb_test "list $name" [get $name list] +} + +# Running to breakpoint -- use any function we can "list" +foreach name [get_functions list] { + # Skip "test_function", since test_breakpoint uses it + if {[string compare $name "test_function"] != 0} { + test_breakpoint $name + } +} + +# Test c/v gets recognized even without quoting. +foreach cv {{} { const} { volatile} { const volatile}} { + set test "p 'CV::m(int)$cv'" + gdb_test_multiple $test $test { + -re "( = {.*} 0x\[0-9a-f\]+ <CV::m.*>)\r\n$gdb_prompt $" { + # = {void (CV * const, CV::t)} 0x400944 <CV::m(int)> + set correct $expect_out(1,string) + pass $test + } + } + gdb_test "p CV::m(int)$cv" [string_to_regexp $correct] +} + +# Test TYPENAME:: gets recognized even in parentheses. +gdb_test "p CV_f(int)" { = {int \(int\)} 0x[0-9a-f]+ <CV_f\(int\)>} +gdb_test "p CV_f(CV::t)" { = {int \(int\)} 0x[0-9a-f]+ <CV_f\(int\)>} +gdb_test "p CV_f(CV::i)" " = 43" + +gdb_test "p CV_f('cpexprs.cc'::CV::t)" \ + { = {int \(int\)} 0x[0-9a-f]+ <CV_f\(int\)>} + +# Make sure conversion operator names are canonicalized and properly +# "spelled." +gdb_test "p base::operator const fluff * const *" \ + [get "base::operator fluff const* const*" print] \ + "canonicalized conversion operator name 1" +gdb_test "p base::operator const fluff* const*" \ + [get "base::operator fluff const* const*" print] \ + "canonicalized conversion operator name 2" +gdb_test "p base::operator derived*" \ + "There is no field named operator derived\\*" \ + "undefined conversion operator" + +gdb_exit +return 0 diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/cplabel.cc gdb-10.2/gdb/testsuite/gdb.cp/cplabel.cc --- gdb-9.1/gdb/testsuite/gdb.cp/cplabel.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/cplabel.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/cplabel.exp gdb-10.2/gdb/testsuite/gdb.cp/cplabel.exp --- gdb-9.1/gdb/testsuite/gdb.cp/cplabel.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/cplabel.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/cplusfuncs.exp gdb-10.2/gdb/testsuite/gdb.cp/cplusfuncs.exp --- gdb-9.1/gdb/testsuite/gdb.cp/cplusfuncs.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/cplusfuncs.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1992-2020 Free Software Foundation, Inc. +# Copyright 1992-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/cp-relocate.cc gdb-10.2/gdb/testsuite/gdb.cp/cp-relocate.cc --- gdb-9.1/gdb/testsuite/gdb.cp/cp-relocate.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/cp-relocate.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This test file is part of GDB, the GNU debugger. - Copyright 2007-2020 Free Software Foundation, Inc. + Copyright 2007-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/cp-relocate.exp gdb-10.2/gdb/testsuite/gdb.cp/cp-relocate.exp --- gdb-9.1/gdb/testsuite/gdb.cp/cp-relocate.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/cp-relocate.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2007-2020 Free Software Foundation, Inc. +# Copyright 2007-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/cpsizeof.cc gdb-10.2/gdb/testsuite/gdb.cp/cpsizeof.cc --- gdb-9.1/gdb/testsuite/gdb.cp/cpsizeof.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/cpsizeof.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/cpsizeof.exp gdb-10.2/gdb/testsuite/gdb.cp/cpsizeof.exp --- gdb-9.1/gdb/testsuite/gdb.cp/cpsizeof.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/cpsizeof.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ # sizeof() tests [c++/16675] -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/cttiadd1.cc gdb-10.2/gdb/testsuite/gdb.cp/cttiadd1.cc --- gdb-9.1/gdb/testsuite/gdb.cp/cttiadd1.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/cttiadd1.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 1998-2020 Free Software Foundation, Inc. + Copyright 1998-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/cttiadd2.cc gdb-10.2/gdb/testsuite/gdb.cp/cttiadd2.cc --- gdb-9.1/gdb/testsuite/gdb.cp/cttiadd2.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/cttiadd2.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 1998-2020 Free Software Foundation, Inc. + Copyright 1998-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/cttiadd3.cc gdb-10.2/gdb/testsuite/gdb.cp/cttiadd3.cc --- gdb-9.1/gdb/testsuite/gdb.cp/cttiadd3.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/cttiadd3.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 1998-2020 Free Software Foundation, Inc. + Copyright 1998-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/cttiadd.cc gdb-10.2/gdb/testsuite/gdb.cp/cttiadd.cc --- gdb-9.1/gdb/testsuite/gdb.cp/cttiadd.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/cttiadd.cc 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 1998-2020 Free Software Foundation, Inc. + Copyright 1998-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/ctti.exp gdb-10.2/gdb/testsuite/gdb.cp/ctti.exp --- gdb-9.1/gdb/testsuite/gdb.cp/ctti.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/ctti.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1998-2020 Free Software Foundation, Inc. +# Copyright 1998-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/debug-expr.exp gdb-10.2/gdb/testsuite/gdb.cp/debug-expr.exp --- gdb-9.1/gdb/testsuite/gdb.cp/debug-expr.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/debug-expr.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/demangle.exp gdb-10.2/gdb/testsuite/gdb.cp/demangle.exp --- gdb-9.1/gdb/testsuite/gdb.cp/demangle.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/demangle.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 1992-2020 Free Software Foundation, Inc. +# Copyright (C) 1992-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/derivation2.cc gdb-10.2/gdb/testsuite/gdb.cp/derivation2.cc --- gdb-9.1/gdb/testsuite/gdb.cp/derivation2.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/derivation2.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/derivation.cc gdb-10.2/gdb/testsuite/gdb.cp/derivation.cc --- gdb-9.1/gdb/testsuite/gdb.cp/derivation.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/derivation.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2003-2020 Free Software Foundation, Inc. + Copyright 2003-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/derivation.exp gdb-10.2/gdb/testsuite/gdb.cp/derivation.exp --- gdb-9.1/gdb/testsuite/gdb.cp/derivation.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/derivation.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1998-2020 Free Software Foundation, Inc. +# Copyright 1998-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/destrprint.exp gdb-10.2/gdb/testsuite/gdb.cp/destrprint.exp --- gdb-9.1/gdb/testsuite/gdb.cp/destrprint.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/destrprint.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/disasm-func-name.cc gdb-10.2/gdb/testsuite/gdb.cp/disasm-func-name.cc --- gdb-9.1/gdb/testsuite/gdb.cp/disasm-func-name.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/disasm-func-name.cc 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,48 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +class A +{ +private: + int m_i; + +public: + A(int i); + + int get_i () const + { return m_i; } + + void set_i (int i) + { m_i = i; } +}; + +A::A(int i) + : m_i (i) +{ /* Nothing. */ } + +void process (A *obj, int num) +{ + obj->set_i (obj->get_i () + num); +} + +int +main (void) +{ + A a(42); + process (&a, 2); + return a.get_i (); +} diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/disasm-func-name.exp gdb-10.2/gdb/testsuite/gdb.cp/disasm-func-name.exp --- gdb-9.1/gdb/testsuite/gdb.cp/disasm-func-name.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/disasm-func-name.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,50 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# This file is part of the gdb testsuite + +# Test that the disassembler correctly demangles C++ function names in +# it's header line. + +if {[skip_cplus_tests]} { continue } + +standard_testfile .cc + +if [get_compiler_info "c++"] { + return -1 +} + +if {[prepare_for_testing "failed to prepare" $testfile \ + $srcfile {debug c++}]} { + return -1 +} + +if ![runto_main] then { + perror "couldn't run to breakpoint" + continue +} + +proc check_disassembly_header { request expected } { + gdb_test "disassemble ${request}" \ + "Dump of assembler code for function ${expected}:\r\n.*" +} + +gdb_test_no_output "set print asm-demangle on" + +check_disassembly_header "main" "main\\(\\)" +check_disassembly_header "process" "process\\(A\\*, int\\)" +check_disassembly_header "A::A" "A::A\\(int\\)" +check_disassembly_header "A::get_i" "A::get_i\\(\\) const" +check_disassembly_header "A::set_i" "A::set_i\\(int\\)" diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/dispcxx.cc gdb-10.2/gdb/testsuite/gdb.cp/dispcxx.cc --- gdb-9.1/gdb/testsuite/gdb.cp/dispcxx.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/dispcxx.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Test for displays in C++. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/dispcxx.exp gdb-10.2/gdb/testsuite/gdb.cp/dispcxx.exp --- gdb-9.1/gdb/testsuite/gdb.cp/dispcxx.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/dispcxx.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/ena-dis-br-range.cc gdb-10.2/gdb/testsuite/gdb.cp/ena-dis-br-range.cc --- gdb-9.1/gdb/testsuite/gdb.cp/ena-dis-br-range.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/ena-dis-br-range.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2017-2020 Free Software Foundation, Inc. + Copyright 2017-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/ena-dis-br-range.exp gdb-10.2/gdb/testsuite/gdb.cp/ena-dis-br-range.exp --- gdb-9.1/gdb/testsuite/gdb.cp/ena-dis-br-range.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/ena-dis-br-range.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2017-2020 Free Software Foundation, Inc. +# Copyright 2017-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/enum-class.cc gdb-10.2/gdb/testsuite/gdb.cp/enum-class.cc --- gdb-9.1/gdb/testsuite/gdb.cp/enum-class.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/enum-class.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/enum-class.exp gdb-10.2/gdb/testsuite/gdb.cp/enum-class.exp --- gdb-9.1/gdb/testsuite/gdb.cp/enum-class.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/enum-class.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/exception.cc gdb-10.2/gdb/testsuite/gdb.cp/exception.cc --- gdb-9.1/gdb/testsuite/gdb.cp/exception.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/exception.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 1997-2020 Free Software Foundation, Inc. + Copyright 1997-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -17,8 +17,6 @@ // Test file for exception handling support. -using namespace std; - int foo (int i) { if (i < 32) diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/exception.exp gdb-10.2/gdb/testsuite/gdb.cp/exception.exp --- gdb-9.1/gdb/testsuite/gdb.cp/exception.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/exception.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1997-2020 Free Software Foundation, Inc. +# Copyright 1997-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/except-multi-location.exp gdb-10.2/gdb/testsuite/gdb.cp/except-multi-location.exp --- gdb-9.1/gdb/testsuite/gdb.cp/except-multi-location.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/except-multi-location.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/except-multi-location-lib.cc gdb-10.2/gdb/testsuite/gdb.cp/except-multi-location-lib.cc --- gdb-9.1/gdb/testsuite/gdb.cp/except-multi-location-lib.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/except-multi-location-lib.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2019-2020 Free Software Foundation, Inc. +/* Copyright 2019-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/except-multi-location-main.cc gdb-10.2/gdb/testsuite/gdb.cp/except-multi-location-main.cc --- gdb-9.1/gdb/testsuite/gdb.cp/except-multi-location-main.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/except-multi-location-main.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2019-2020 Free Software Foundation, Inc. +/* Copyright 2019-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/exceptprint.cc gdb-10.2/gdb/testsuite/gdb.cp/exceptprint.cc --- gdb-9.1/gdb/testsuite/gdb.cp/exceptprint.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/exceptprint.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/exceptprint.exp gdb-10.2/gdb/testsuite/gdb.cp/exceptprint.exp --- gdb-9.1/gdb/testsuite/gdb.cp/exceptprint.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/exceptprint.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -76,16 +76,20 @@ return -1 } -gdb_test "catch catch int if \$_exception == 23" \ - "Catchpoint \[0-9\]+ \\(catch\\)" \ - "catch catch" -gdb_test "catch throw int if \$_exception == 23" \ - "Catchpoint \[0-9\]+ \\(throw\\)" \ - "catch throw" -gdb_test "catch rethrow int if \$_exception == 23" \ - "Catchpoint \[0-9\]+ \\(rethrow\\)" \ - "catch rethrow" +with_test_prefix "2nd run" { + gdb_test "catch catch int if \$_exception == 23" \ + "Catchpoint \[0-9\]+ \\(catch\\)" \ + "catch catch" + gdb_test "catch throw int if \$_exception == 23" \ + "Catchpoint \[0-9\]+ \\(throw\\)" \ + "catch throw" + gdb_test "catch rethrow int if \$_exception == 23" \ + "Catchpoint \[0-9\]+ \\(rethrow\\)" \ + "catch rethrow" +} # This tests both the case where the regular expression does not # match, and the case where it does. -do_exceptprint_tests int 23 +with_test_prefix "2nd run" { + do_exceptprint_tests int 23 +} diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/expand-psymtabs-cxx.cc gdb-10.2/gdb/testsuite/gdb.cp/expand-psymtabs-cxx.cc --- gdb-9.1/gdb/testsuite/gdb.cp/expand-psymtabs-cxx.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/expand-psymtabs-cxx.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/expand-psymtabs-cxx.exp gdb-10.2/gdb/testsuite/gdb.cp/expand-psymtabs-cxx.exp --- gdb-9.1/gdb/testsuite/gdb.cp/expand-psymtabs-cxx.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/expand-psymtabs-cxx.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/expand-sals.cc gdb-10.2/gdb/testsuite/gdb.cp/expand-sals.cc --- gdb-9.1/gdb/testsuite/gdb.cp/expand-sals.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/expand-sals.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright (C) 2009-2020 Free Software Foundation, Inc. + Copyright (C) 2009-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/expand-sals.exp gdb-10.2/gdb/testsuite/gdb.cp/expand-sals.exp --- gdb-9.1/gdb/testsuite/gdb.cp/expand-sals.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/expand-sals.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2009-2020 Free Software Foundation, Inc. +# Copyright 2009-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/extern-c.cc gdb-10.2/gdb/testsuite/gdb.cp/extern-c.cc --- gdb-9.1/gdb/testsuite/gdb.cp/extern-c.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/extern-c.cc 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2009-2020 Free Software Foundation, Inc. + Copyright 2009-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/extern-c.exp gdb-10.2/gdb/testsuite/gdb.cp/extern-c.exp --- gdb-9.1/gdb/testsuite/gdb.cp/extern-c.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/extern-c.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2009-2020 Free Software Foundation, Inc. +# Copyright 2009-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/filename.cc gdb-10.2/gdb/testsuite/gdb.cp/filename.cc --- gdb-9.1/gdb/testsuite/gdb.cp/filename.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/filename.cc 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/filename.exp gdb-10.2/gdb/testsuite/gdb.cp/filename.exp --- gdb-9.1/gdb/testsuite/gdb.cp/filename.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/filename.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/formatted-ref.cc gdb-10.2/gdb/testsuite/gdb.cp/formatted-ref.cc --- gdb-9.1/gdb/testsuite/gdb.cp/formatted-ref.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/formatted-ref.cc 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2007-2020 Free Software Foundation, Inc. +/* Copyright 2007-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/formatted-ref.exp gdb-10.2/gdb/testsuite/gdb.cp/formatted-ref.exp --- gdb-9.1/gdb/testsuite/gdb.cp/formatted-ref.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/formatted-ref.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2007-2020 Free Software Foundation, Inc. +# Copyright 2007-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/fpointer.exp gdb-10.2/gdb/testsuite/gdb.cp/fpointer.exp --- gdb-9.1/gdb/testsuite/gdb.cp/fpointer.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/fpointer.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/gdb1355.exp gdb-10.2/gdb/testsuite/gdb.cp/gdb1355.exp --- gdb-9.1/gdb/testsuite/gdb.cp/gdb1355.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/gdb1355.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2003-2020 Free Software Foundation, Inc. +# Copyright 2003-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/gdb2384-base.cc gdb-10.2/gdb/testsuite/gdb.cp/gdb2384-base.cc --- gdb-9.1/gdb/testsuite/gdb.cp/gdb2384-base.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/gdb2384-base.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2008-2020 Free Software Foundation, Inc. + Copyright 2008-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/gdb2384-base.h gdb-10.2/gdb/testsuite/gdb.cp/gdb2384-base.h --- gdb-9.1/gdb/testsuite/gdb.cp/gdb2384-base.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/gdb2384-base.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2008-2020 Free Software Foundation, Inc. + Copyright 2008-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/gdb2384.cc gdb-10.2/gdb/testsuite/gdb.cp/gdb2384.cc --- gdb-9.1/gdb/testsuite/gdb.cp/gdb2384.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/gdb2384.cc 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2008-2020 Free Software Foundation, Inc. + Copyright 2008-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/gdb2384.exp gdb-10.2/gdb/testsuite/gdb.cp/gdb2384.exp --- gdb-9.1/gdb/testsuite/gdb.cp/gdb2384.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/gdb2384.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2007-2020 Free Software Foundation, Inc. +# Copyright 2007-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/gdb2495.cc gdb-10.2/gdb/testsuite/gdb.cp/gdb2495.cc --- gdb-9.1/gdb/testsuite/gdb.cp/gdb2495.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/gdb2495.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2009-2020 Free Software Foundation, Inc. + Copyright 2009-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/gdb2495.exp gdb-10.2/gdb/testsuite/gdb.cp/gdb2495.exp --- gdb-9.1/gdb/testsuite/gdb.cp/gdb2495.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/gdb2495.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2009-2020 Free Software Foundation, Inc. +# Copyright 2009-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/hang.exp gdb-10.2/gdb/testsuite/gdb.cp/hang.exp --- gdb-9.1/gdb/testsuite/gdb.cp/hang.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/hang.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2002-2020 Free Software Foundation, Inc. +# Copyright 2002-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/impl-this.cc gdb-10.2/gdb/testsuite/gdb.cp/impl-this.cc --- gdb-9.1/gdb/testsuite/gdb.cp/impl-this.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/impl-this.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/impl-this.exp gdb-10.2/gdb/testsuite/gdb.cp/impl-this.exp --- gdb-9.1/gdb/testsuite/gdb.cp/impl-this.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/impl-this.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/includefile gdb-10.2/gdb/testsuite/gdb.cp/includefile --- gdb-9.1/gdb/testsuite/gdb.cp/includefile 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/includefile 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/infcall-dlopen.cc gdb-10.2/gdb/testsuite/gdb.cp/infcall-dlopen.cc --- gdb-9.1/gdb/testsuite/gdb.cp/infcall-dlopen.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/infcall-dlopen.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/infcall-dlopen.exp gdb-10.2/gdb/testsuite/gdb.cp/infcall-dlopen.exp --- gdb-9.1/gdb/testsuite/gdb.cp/infcall-dlopen.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/infcall-dlopen.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/infcall-dlopen-lib.cc gdb-10.2/gdb/testsuite/gdb.cp/infcall-dlopen-lib.cc --- gdb-9.1/gdb/testsuite/gdb.cp/infcall-dlopen-lib.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/infcall-dlopen-lib.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/infcall-nodebug-c-d0.exp gdb-10.2/gdb/testsuite/gdb.cp/infcall-nodebug-c-d0.exp --- gdb-9.1/gdb/testsuite/gdb.cp/infcall-nodebug-c-d0.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/infcall-nodebug-c-d0.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,21 @@ +# This testcase is part of GDB, the GNU debugger. +# Copyright 2018-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +set lang {c} + +set debug nodebug + +source $srcdir/$subdir/infcall-nodebug.exp.tcl diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/infcall-nodebug-c++-d0.exp gdb-10.2/gdb/testsuite/gdb.cp/infcall-nodebug-c++-d0.exp --- gdb-9.1/gdb/testsuite/gdb.cp/infcall-nodebug-c++-d0.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/infcall-nodebug-c++-d0.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,25 @@ +# This testcase is part of GDB, the GNU debugger. +# Copyright 2018-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Only test C++ if we are able. Always use C. +if { [skip_cplus_tests] || [get_compiler_info "c++"] } { + return -1 +} +set lang {c++} + +set debug nodebug + +source $srcdir/$subdir/infcall-nodebug.exp.tcl diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/infcall-nodebug-c-d1.exp gdb-10.2/gdb/testsuite/gdb.cp/infcall-nodebug-c-d1.exp --- gdb-9.1/gdb/testsuite/gdb.cp/infcall-nodebug-c-d1.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/infcall-nodebug-c-d1.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,21 @@ +# This testcase is part of GDB, the GNU debugger. +# Copyright 2018-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +set lang {c} + +set debug debug + +source $srcdir/$subdir/infcall-nodebug.exp.tcl diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/infcall-nodebug-c++-d1.exp gdb-10.2/gdb/testsuite/gdb.cp/infcall-nodebug-c++-d1.exp --- gdb-9.1/gdb/testsuite/gdb.cp/infcall-nodebug-c++-d1.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/infcall-nodebug-c++-d1.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,25 @@ +# This testcase is part of GDB, the GNU debugger. +# Copyright 2018-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Only test C++ if we are able. Always use C. +if { [skip_cplus_tests] || [get_compiler_info "c++"] } { + return -1 +} +set lang {c++} + +set debug debug + +source $srcdir/$subdir/infcall-nodebug.exp.tcl diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/infcall-nodebug.exp gdb-10.2/gdb/testsuite/gdb.cp/infcall-nodebug.exp --- gdb-9.1/gdb/testsuite/gdb.cp/infcall-nodebug.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/infcall-nodebug.exp 1970-01-01 00:00:00.000000000 +0000 @@ -1,119 +0,0 @@ -# This testcase is part of GDB, the GNU debugger. -# Copyright 2018-2020 Free Software Foundation, Inc. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. - -# Test function calls on C++ functions that have no debug information. -# See gdb/22736. Put the called function in a different object to ensure -# the rest of the test can be complied with debug information. Whilst we -# are at it, also test functions with debug information and C functions too. - -if [target_info exists gdb,cannot_call_functions] { - unsupported "this target can not call functions" - continue -} - -# Only test C++ if we are able. Always use C. -if { [skip_cplus_tests] || [get_compiler_info "c++"] } { - set lang {c} -} else { - set lang {c c++} -} - -set main_basename infcall-nodebug-main -set lib_basename infcall-nodebug-lib -standard_testfile ${main_basename}.c ${lib_basename}.c - -set mainsrc "${srcdir}/${subdir}/${srcfile}" -set libsrc "${srcdir}/${subdir}/${srcfile2}" - -# Build both source files to objects using language LANG. Use SYMBOLS to build -# with either debug symbols or without - but always build the main file with -# debug. Then make function calls across the files. - -proc build_and_run_test { lang symbols } { - - global main_basename lib_basename mainsrc libsrc binfile testfile - global gdb_prompt - - if { $symbols == "debug" } { - set debug_flags "debug" - } else { - set debug_flags "" - } - - # Setup directory. - - set dir "$lang-$symbols" - remote_exec build "rm -rf [standard_output_file ${dir}]" - remote_exec build "mkdir -p [standard_output_file ${dir}]" - - # Compile both files to objects, then link together. - - set main_flags "$lang debug" - set lib_flags "$lang $debug_flags" - set main_o [standard_output_file ${dir}/${main_basename}.o] - set lib_o [standard_output_file ${dir}/${lib_basename}.o] - set binfile [standard_output_file ${dir}/${testfile}] - - if { [gdb_compile $mainsrc $main_o object ${main_flags}] != "" } { - untested "failed to compile main file to object" - return -1 - } - - if { [gdb_compile $libsrc $lib_o object ${lib_flags}] != "" } { - untested "failed to compile secondary file to object" - return -1 - } - - if { [gdb_compile "$main_o $lib_o" ${binfile} executable ""] != "" } { - untested "failed to compile" - return -1 - } - - # Startup and run to main. - - clean_restart $binfile - - if ![runto_main] then { - fail "can't run to main" - return - } - - # Function call with cast. - - gdb_test "p (int)foo()" " = 1" - - # Function call without cast. Will error if there are no debug symbols. - - set test "p foo()" - gdb_test_multiple $test $test { - -re " = 1\r\n$gdb_prompt " { - gdb_assert [ string equal $symbols "debug" ] - pass $test - } - -re "has unknown return type; cast the call to its declared return type\r\n$gdb_prompt " { - gdb_assert ![ string equal $symbols "debug" ] - pass $test - } - } - -} - -foreach_with_prefix l $lang { - foreach_with_prefix s {debug nodebug} { - build_and_run_test $l $s - } -} - diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/infcall-nodebug.exp.tcl gdb-10.2/gdb/testsuite/gdb.cp/infcall-nodebug.exp.tcl --- gdb-9.1/gdb/testsuite/gdb.cp/infcall-nodebug.exp.tcl 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/infcall-nodebug.exp.tcl 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,101 @@ +# This testcase is part of GDB, the GNU debugger. +# Copyright 2018-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Test function calls on C++ functions that have no debug information. +# See gdb/22736. Put the called function in a different object to ensure +# the rest of the test can be complied with debug information. Whilst we +# are at it, also test functions with debug information and C functions too. + +if [target_info exists gdb,cannot_call_functions] { + unsupported "this target can not call functions" + continue +} + +set main_basename infcall-nodebug-main +set lib_basename infcall-nodebug-lib +standard_testfile ${main_basename}.c ${lib_basename}.c + +set mainsrc "${srcdir}/${subdir}/${srcfile}" +set libsrc "${srcdir}/${subdir}/${srcfile2}" + +# Build both source files to objects using language LANG. Use SYMBOLS to build +# with either debug symbols or without - but always build the main file with +# debug. Then make function calls across the files. + +proc build_and_run_test { lang symbols } { + + global main_basename lib_basename mainsrc libsrc binfile testfile + global gdb_prompt + + if { $symbols == "debug" } { + set debug_flags "debug" + } else { + set debug_flags "" + } + + # Compile both files to objects, then link together. + + set main_flags "$lang debug" + set lib_flags "$lang $debug_flags" + set main_o [standard_output_file ${main_basename}.o] + set lib_o [standard_output_file ${lib_basename}.o] + set binfile [standard_output_file ${testfile}] + + if { [gdb_compile $mainsrc $main_o object ${main_flags}] != "" } { + untested "failed to compile main file to object" + return -1 + } + + if { [gdb_compile $libsrc $lib_o object ${lib_flags}] != "" } { + untested "failed to compile secondary file to object" + return -1 + } + + if { [gdb_compile "$main_o $lib_o" ${binfile} executable ""] != "" } { + untested "failed to compile" + return -1 + } + + # Startup and run to main. + + clean_restart $binfile + + if ![runto_main] then { + fail "can't run to main" + return + } + + # Function call with cast. + + gdb_test "p (int)foo()" " = 1" + + # Function call without cast. Will error if there are no debug symbols. + + set test "p foo()" + gdb_test_multiple $test $test { + -re " = 1\r\n$gdb_prompt " { + gdb_assert [ string equal $symbols "debug" ] + pass $test + } + -re "has unknown return type; cast the call to its declared return type\r\n$gdb_prompt " { + gdb_assert ![ string equal $symbols "debug" ] + pass $test + } + } + +} + +build_and_run_test $lang $debug diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/infcall-nodebug-lib.c gdb-10.2/gdb/testsuite/gdb.cp/infcall-nodebug-lib.c --- gdb-9.1/gdb/testsuite/gdb.cp/infcall-nodebug-lib.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/infcall-nodebug-lib.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2018-2020 Free Software Foundation, Inc. + Copyright 2018-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/infcall-nodebug-main.c gdb-10.2/gdb/testsuite/gdb.cp/infcall-nodebug-main.c --- gdb-9.1/gdb/testsuite/gdb.cp/infcall-nodebug-main.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/infcall-nodebug-main.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2018-2020 Free Software Foundation, Inc. + Copyright 2018-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/inherit.exp gdb-10.2/gdb/testsuite/gdb.cp/inherit.exp --- gdb-9.1/gdb/testsuite/gdb.cp/inherit.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/inherit.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1992-2020 Free Software Foundation, Inc. +# Copyright 1992-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -26,7 +26,8 @@ standard_testfile misc.cc -if {[prepare_for_testing "failed to prepare" $testfile $srcfile {debug c++}]} { +if {[prepare_for_testing "failed to prepare" $testfile $srcfile \ + {debug c++ additional_flags=-Wno-deprecated-register}]} { return -1 } @@ -693,9 +694,16 @@ return } - test_print_si_members + with_test_prefix "single inheritance" { + test_print_si_members + } + test_print_si_classes - test_print_mi_members + + with_test_prefix "multiple inheritance" { + test_print_mi_members + } + test_print_mi_member_types test_print_mi_classes test_print_anon_union diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/iostream.cc gdb-10.2/gdb/testsuite/gdb.cp/iostream.cc --- gdb-9.1/gdb/testsuite/gdb.cp/iostream.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/iostream.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Code to go along with tests in rtti.exp. - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/iostream.exp gdb-10.2/gdb/testsuite/gdb.cp/iostream.exp --- gdb-9.1/gdb/testsuite/gdb.cp/iostream.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/iostream.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/koenig.exp gdb-10.2/gdb/testsuite/gdb.cp/koenig.exp --- gdb-9.1/gdb/testsuite/gdb.cp/koenig.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/koenig.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,7 +15,8 @@ standard_testfile .cc -if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile} {debug c++}] } { +if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile} \ + {debug c++ additional_flags=-Wno-unused-comparison}] } { return -1 } diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/local.exp gdb-10.2/gdb/testsuite/gdb.cp/local.exp --- gdb-9.1/gdb/testsuite/gdb.cp/local.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/local.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1998-2020 Free Software Foundation, Inc. +# Copyright 1998-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/local-static.c gdb-10.2/gdb/testsuite/gdb.cp/local-static.c --- gdb-9.1/gdb/testsuite/gdb.cp/local-static.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/local-static.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/local-static.exp gdb-10.2/gdb/testsuite/gdb.cp/local-static.exp --- gdb-9.1/gdb/testsuite/gdb.cp/local-static.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/local-static.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2017-2020 Free Software Foundation, Inc. +# Copyright 2017-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/maint.exp gdb-10.2/gdb/testsuite/gdb.cp/maint.exp --- gdb-9.1/gdb/testsuite/gdb.cp/maint.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/maint.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2003-2020 Free Software Foundation, Inc. +# Copyright 2003-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -32,9 +32,9 @@ "C\\+\\+ maintenance commands.\r\n\r\n" } - set multiple_help_body "List of maintenance cplus subcommands:\r\n\r\nmaintenance cplus first_component -- ${first_component_help}\r\nmaintenance cplus namespace -- ${namespace_help}\r\n\r\nType \"help maintenance cplus\" followed by maintenance cplus subcommand name for full documentation.\r\nCommand name abbreviations are allowed if unambiguous." + set multiple_help_body "List of maintenance cplus subcommands:.*Command name abbreviations are allowed if unambiguous." - gdb_test "maint cp" "\"maintenance cplus\" must be followed by the name of a command.\r\n.*" + gdb_test "maint cp" $multiple_help_body gdb_test "help maint cp first_component" "${first_component_help}." gdb_test "help maint cp namespace" "${namespace_help}." diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/many-args.cc gdb-10.2/gdb/testsuite/gdb.cp/many-args.cc --- gdb-9.1/gdb/testsuite/gdb.cp/many-args.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/many-args.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2019-2020 Free Software Foundation, Inc. +/* Copyright 2019-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/many-args.exp gdb-10.2/gdb/testsuite/gdb.cp/many-args.exp --- gdb-9.1/gdb/testsuite/gdb.cp/many-args.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/many-args.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/mb-ctor.exp gdb-10.2/gdb/testsuite/gdb.cp/mb-ctor.exp --- gdb-9.1/gdb/testsuite/gdb.cp/mb-ctor.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/mb-ctor.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2007-2020 Free Software Foundation, Inc. +# Copyright 2007-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/mb-inline1.cc gdb-10.2/gdb/testsuite/gdb.cp/mb-inline1.cc --- gdb-9.1/gdb/testsuite/gdb.cp/mb-inline1.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/mb-inline1.cc 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ This testcase is part of GDB, the GNU debugger. - Copyright 2008-2020 Free Software Foundation, Inc. + Copyright 2008-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/mb-inline2.cc gdb-10.2/gdb/testsuite/gdb.cp/mb-inline2.cc --- gdb-9.1/gdb/testsuite/gdb.cp/mb-inline2.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/mb-inline2.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2008-2020 Free Software Foundation, Inc. + Copyright 2008-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/mb-inline.exp gdb-10.2/gdb/testsuite/gdb.cp/mb-inline.exp --- gdb-9.1/gdb/testsuite/gdb.cp/mb-inline.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/mb-inline.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/mb-inline.h gdb-10.2/gdb/testsuite/gdb.cp/mb-inline.h --- gdb-9.1/gdb/testsuite/gdb.cp/mb-inline.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/mb-inline.h 2021-04-25 04:04:35.000000000 +0000 @@ -4,7 +4,7 @@ This testcase is part of GDB, the GNU debugger. - Copyright 2008-2020 Free Software Foundation, Inc. + Copyright 2008-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/mb-templates.exp gdb-10.2/gdb/testsuite/gdb.cp/mb-templates.exp --- gdb-9.1/gdb/testsuite/gdb.cp/mb-templates.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/mb-templates.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2007-2020 Free Software Foundation, Inc. +# Copyright 2007-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/m-data.exp gdb-10.2/gdb/testsuite/gdb.cp/m-data.exp --- gdb-9.1/gdb/testsuite/gdb.cp/m-data.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/m-data.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2002-2020 Free Software Foundation, Inc. +# Copyright 2002-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/member-name.cc gdb-10.2/gdb/testsuite/gdb.cp/member-name.cc --- gdb-9.1/gdb/testsuite/gdb.cp/member-name.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/member-name.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2003-2020 Free Software Foundation, Inc. + Copyright 2003-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/member-name.exp gdb-10.2/gdb/testsuite/gdb.cp/member-name.exp --- gdb-9.1/gdb/testsuite/gdb.cp/member-name.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/member-name.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/member-ptr.cc gdb-10.2/gdb/testsuite/gdb.cp/member-ptr.cc --- gdb-9.1/gdb/testsuite/gdb.cp/member-ptr.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/member-ptr.cc 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 1998-2020 Free Software Foundation, Inc. + Copyright 1998-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/member-ptr.exp gdb-10.2/gdb/testsuite/gdb.cp/member-ptr.exp --- gdb-9.1/gdb/testsuite/gdb.cp/member-ptr.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/member-ptr.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1998-2020 Free Software Foundation, Inc. +# Copyright 1998-2021 Free Software Foundation, Inc. # This file is part of the gdb testsuite diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/method2.exp gdb-10.2/gdb/testsuite/gdb.cp/method2.exp --- gdb-9.1/gdb/testsuite/gdb.cp/method2.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/method2.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2007-2020 Free Software Foundation, Inc. +# Copyright 2007-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/method.exp gdb-10.2/gdb/testsuite/gdb.cp/method.exp --- gdb-9.1/gdb/testsuite/gdb.cp/method.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/method.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1998-2020 Free Software Foundation, Inc. +# Copyright 1998-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/meth-typedefs.cc gdb-10.2/gdb/testsuite/gdb.cp/meth-typedefs.cc --- gdb-9.1/gdb/testsuite/gdb.cp/meth-typedefs.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/meth-typedefs.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/meth-typedefs.exp gdb-10.2/gdb/testsuite/gdb.cp/meth-typedefs.exp --- gdb-9.1/gdb/testsuite/gdb.cp/meth-typedefs.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/meth-typedefs.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # # Contributed by Red Hat, originally written by Keith Seitz. # diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/minsym-fallback.cc gdb-10.2/gdb/testsuite/gdb.cp/minsym-fallback.cc --- gdb-9.1/gdb/testsuite/gdb.cp/minsym-fallback.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/minsym-fallback.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/minsym-fallback.exp gdb-10.2/gdb/testsuite/gdb.cp/minsym-fallback.exp --- gdb-9.1/gdb/testsuite/gdb.cp/minsym-fallback.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/minsym-fallback.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2011-2020 Free Software Foundation, Inc. +# Copyright (C) 2011-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/minsym-fallback.h gdb-10.2/gdb/testsuite/gdb.cp/minsym-fallback.h --- gdb-9.1/gdb/testsuite/gdb.cp/minsym-fallback.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/minsym-fallback.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/minsym-fallback-main.cc gdb-10.2/gdb/testsuite/gdb.cp/minsym-fallback-main.cc --- gdb-9.1/gdb/testsuite/gdb.cp/minsym-fallback-main.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/minsym-fallback-main.cc 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/misc.cc gdb-10.2/gdb/testsuite/gdb.cp/misc.cc --- gdb-9.1/gdb/testsuite/gdb.cp/misc.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/misc.cc 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 1993-2020 Free Software Foundation, Inc. + Copyright 1993-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -24,6 +24,9 @@ typedef struct fleep fleep; struct fleep { int a; } s; +int number; +int &number_ref = number; + // ====================== simple class structures ======================= struct default_public_struct { diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/misc.exp gdb-10.2/gdb/testsuite/gdb.cp/misc.exp --- gdb-9.1/gdb/testsuite/gdb.cp/misc.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/misc.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1992-2020 Free Software Foundation, Inc. +# Copyright 1992-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -19,7 +19,8 @@ standard_testfile .cc -if {[prepare_for_testing "failed to prepare" $testfile $srcfile {debug c++}]} { +if {[prepare_for_testing "failed to prepare" $testfile $srcfile \ + {debug c++ additional_flags=-Wno-deprecated-register}]} { return -1 } @@ -110,3 +111,11 @@ gdb_test "print 'misc.cc'::v_bool" " = true" \ "expression using block qualifier" + +# pointer arithmetic +gdb_test "print *(v_bool_array + number_ref)" "\\$\[0-9\]* = false" \ + "pointer addition with integer reference" +gdb_test "print *(number_ref + v_bool_array)" "\\$\[0-9\]* = false" \ + "pointer addition with integer reference" +gdb_test "print *(v_bool_array - number_ref)" "\\$\[0-9\]* = false" \ + "pointer subtraction with integer reference" diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/m-static.exp gdb-10.2/gdb/testsuite/gdb.cp/m-static.exp --- gdb-9.1/gdb/testsuite/gdb.cp/m-static.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/m-static.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2002-2020 Free Software Foundation, Inc. +# Copyright 2002-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/namelessclass.cc gdb-10.2/gdb/testsuite/gdb.cp/namelessclass.cc --- gdb-9.1/gdb/testsuite/gdb.cp/namelessclass.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/namelessclass.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/namelessclass.exp gdb-10.2/gdb/testsuite/gdb.cp/namelessclass.exp --- gdb-9.1/gdb/testsuite/gdb.cp/namelessclass.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/namelessclass.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/namelessclass.S gdb-10.2/gdb/testsuite/gdb.cp/namelessclass.S --- gdb-9.1/gdb/testsuite/gdb.cp/namelessclass.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/namelessclass.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/namespace1.cc gdb-10.2/gdb/testsuite/gdb.cp/namespace1.cc --- gdb-9.1/gdb/testsuite/gdb.cp/namespace1.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/namespace1.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2003-2020 Free Software Foundation, Inc. +/* Copyright 2003-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/namespace.cc gdb-10.2/gdb/testsuite/gdb.cp/namespace.cc --- gdb-9.1/gdb/testsuite/gdb.cp/namespace.cc 2019-02-23 12:20:11.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/namespace.cc 2020-09-13 02:33:41.000000000 +0000 @@ -150,22 +150,22 @@ // plan to have GDB try to print out, just to make sure that the // compiler and I agree which ones should be legal! It's easy // to screw up when testing the boundaries of namespace stuff. - c; + (void) c; //cc; - C::cc; - cd; + (void) C::cc; + (void) cd; //C::D::cd; - E::cde; - shadow; + (void) E::cde; + (void) shadow; //E::ce; - cX; - F::cXf; - F::cXfX; - X; - G::Xg; + (void) cX; + (void) F::cXf; + (void) F::cXfX; + (void) X; + (void) G::Xg; //cXOtherFile; //XOtherFile; - G::XgX; + (void) G::XgX; return; } diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/namespace-enum.exp gdb-10.2/gdb/testsuite/gdb.cp/namespace-enum.exp --- gdb-9.1/gdb/testsuite/gdb.cp/namespace-enum.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/namespace-enum.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/namespace.exp gdb-10.2/gdb/testsuite/gdb.cp/namespace.exp --- gdb-9.1/gdb/testsuite/gdb.cp/namespace.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/namespace.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1997-2020 Free Software Foundation, Inc. +# Copyright 1997-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/namespace-nested-import.exp gdb-10.2/gdb/testsuite/gdb.cp/namespace-nested-import.exp --- gdb-9.1/gdb/testsuite/gdb.cp/namespace-nested-import.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/namespace-nested-import.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/nested-types.cc gdb-10.2/gdb/testsuite/gdb.cp/nested-types.cc --- gdb-9.1/gdb/testsuite/gdb.cp/nested-types.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/nested-types.cc 2021-04-25 04:04:35.000000000 +0000 @@ -3,7 +3,7 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2017-2020 Free Software Foundation, Inc. + Copyright 2017-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/nested-types.exp gdb-10.2/gdb/testsuite/gdb.cp/nested-types.exp --- gdb-9.1/gdb/testsuite/gdb.cp/nested-types.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/nested-types.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2017-2020 Free Software Foundation, Inc. +# Copyright 2017-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/nextoverthrow.cc gdb-10.2/gdb/testsuite/gdb.cp/nextoverthrow.cc --- gdb-9.1/gdb/testsuite/gdb.cp/nextoverthrow.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/nextoverthrow.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2008-2020 Free Software Foundation, Inc. + Copyright 2008-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/nextoverthrow.exp gdb-10.2/gdb/testsuite/gdb.cp/nextoverthrow.exp --- gdb-9.1/gdb/testsuite/gdb.cp/nextoverthrow.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/nextoverthrow.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/no-dmgl-verbose.cc gdb-10.2/gdb/testsuite/gdb.cp/no-dmgl-verbose.cc --- gdb-9.1/gdb/testsuite/gdb.cp/no-dmgl-verbose.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/no-dmgl-verbose.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This test file is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/no-dmgl-verbose.exp gdb-10.2/gdb/testsuite/gdb.cp/no-dmgl-verbose.exp --- gdb-9.1/gdb/testsuite/gdb.cp/no-dmgl-verbose.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/no-dmgl-verbose.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/no-libstdcxx-probe.exp gdb-10.2/gdb/testsuite/gdb.cp/no-libstdcxx-probe.exp --- gdb-9.1/gdb/testsuite/gdb.cp/no-libstdcxx-probe.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/no-libstdcxx-probe.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/non-trivial-retval.cc gdb-10.2/gdb/testsuite/gdb.cp/non-trivial-retval.cc --- gdb-9.1/gdb/testsuite/gdb.cp/non-trivial-retval.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/non-trivial-retval.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/non-trivial-retval.exp gdb-10.2/gdb/testsuite/gdb.cp/non-trivial-retval.exp --- gdb-9.1/gdb/testsuite/gdb.cp/non-trivial-retval.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/non-trivial-retval.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/noparam.cc gdb-10.2/gdb/testsuite/gdb.cp/noparam.cc --- gdb-9.1/gdb/testsuite/gdb.cp/noparam.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/noparam.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/noparam.exp gdb-10.2/gdb/testsuite/gdb.cp/noparam.exp --- gdb-9.1/gdb/testsuite/gdb.cp/noparam.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/noparam.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/nsalias.cc gdb-10.2/gdb/testsuite/gdb.cp/nsalias.cc --- gdb-9.1/gdb/testsuite/gdb.cp/nsalias.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/nsalias.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/nsalias.exp gdb-10.2/gdb/testsuite/gdb.cp/nsalias.exp --- gdb-9.1/gdb/testsuite/gdb.cp/nsalias.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/nsalias.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/nsdecl.exp gdb-10.2/gdb/testsuite/gdb.cp/nsdecl.exp --- gdb-9.1/gdb/testsuite/gdb.cp/nsdecl.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/nsdecl.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/nsimport.cc gdb-10.2/gdb/testsuite/gdb.cp/nsimport.cc --- gdb-9.1/gdb/testsuite/gdb.cp/nsimport.cc 2019-02-23 12:20:11.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/nsimport.cc 2020-09-13 02:33:41.000000000 +0000 @@ -13,8 +13,8 @@ int main() { - x; - xx; - xxx; + (void) x; + (void) xx; + (void) xxx; return 0; } diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/nsimport.exp gdb-10.2/gdb/testsuite/gdb.cp/nsimport.exp --- gdb-9.1/gdb/testsuite/gdb.cp/nsimport.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/nsimport.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/nsnested.cc gdb-10.2/gdb/testsuite/gdb.cp/nsnested.cc --- gdb-9.1/gdb/testsuite/gdb.cp/nsnested.cc 2019-02-23 12:20:11.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/nsnested.cc 2020-09-13 02:33:41.000000000 +0000 @@ -15,7 +15,7 @@ int second() { - ab; + (void) ab; return 0; } } diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/nsnested.exp gdb-10.2/gdb/testsuite/gdb.cp/nsnested.exp --- gdb-9.1/gdb/testsuite/gdb.cp/nsnested.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/nsnested.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/nsnoimports.cc gdb-10.2/gdb/testsuite/gdb.cp/nsnoimports.cc --- gdb-9.1/gdb/testsuite/gdb.cp/nsnoimports.cc 2019-02-23 12:20:11.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/nsnoimports.cc 2020-09-13 02:33:41.000000000 +0000 @@ -18,9 +18,9 @@ } int first(){ - _a; - ab; - C::abc; + (void) _a; + (void) ab; + (void) C::abc; return C::second(); } } @@ -30,8 +30,8 @@ int main() { - A::_a; - A::B::ab; - A::B::C::abc; + (void) A::_a; + (void) A::B::ab; + (void) A::B::C::abc; return A::B::first(); } diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/nsnoimports.exp gdb-10.2/gdb/testsuite/gdb.cp/nsnoimports.exp --- gdb-9.1/gdb/testsuite/gdb.cp/nsnoimports.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/nsnoimports.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -25,37 +25,43 @@ continue } -gdb_test "print A::_a" "= 11" -gdb_test "print A::B::ab" "= 22" -gdb_test "print A::B::C::abc" "= 33" - -gdb_test "print _a" "No symbol .* in current context." -gdb_test "print ab" "No symbol .* in current context." -gdb_test "print abc" "No symbol .* in current context." +with_test_prefix "main scope" { + gdb_test "print A::_a" "= 11" + gdb_test "print A::B::ab" "= 22" + gdb_test "print A::B::C::abc" "= 33" + + gdb_test "print _a" "No symbol .* in current context." + gdb_test "print ab" "No symbol .* in current context." + gdb_test "print abc" "No symbol .* in current context." +} ############################################ gdb_breakpoint A::B::first gdb_continue_to_breakpoint "A::B::first" -gdb_test "print A::_a" "= 11" -gdb_test "print A::B::ab" "= 22" -gdb_test "print A::B::C::abc" "= 33" - -gdb_test "print _a" "= 11" -gdb_test "print ab" "= 22" -gdb_test "print C::abc" "= 33" +with_test_prefix "A::B::first scope" { + gdb_test "print A::_a" "= 11" + gdb_test "print A::B::ab" "= 22" + gdb_test "print A::B::C::abc" "= 33" + + gdb_test "print _a" "= 11" + gdb_test "print ab" "= 22" + gdb_test "print C::abc" "= 33" -gdb_test "print abc" "No symbol .* in current context." + gdb_test "print abc" "No symbol .* in current context." +} ############################################ gdb_breakpoint A::B::C::second gdb_continue_to_breakpoint "A::B::C::second" -gdb_test "print A::_a" "= 11" -gdb_test "print A::B::ab" "= 22" -gdb_test "print A::B::C::abc" "= 33" - -gdb_test "print _a" "= 11" -gdb_test "print ab" "= 22" -gdb_test "print abc" "= 33" +with_test_prefix "A::B::C::second scope" { + gdb_test "print A::_a" "= 11" + gdb_test "print A::B::ab" "= 22" + gdb_test "print A::B::C::abc" "= 33" + + gdb_test "print _a" "= 11" + gdb_test "print ab" "= 22" + gdb_test "print abc" "= 33" +} diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/nsrecurs.exp gdb-10.2/gdb/testsuite/gdb.cp/nsrecurs.exp --- gdb-9.1/gdb/testsuite/gdb.cp/nsrecurs.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/nsrecurs.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/nsstress.exp gdb-10.2/gdb/testsuite/gdb.cp/nsstress.exp --- gdb-9.1/gdb/testsuite/gdb.cp/nsstress.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/nsstress.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/nsusing.cc gdb-10.2/gdb/testsuite/gdb.cp/nsusing.cc --- gdb-9.1/gdb/testsuite/gdb.cp/nsusing.cc 2019-02-23 12:20:11.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/nsusing.cc 2020-09-13 02:33:41.000000000 +0000 @@ -35,7 +35,7 @@ using namespace J; int marker8 () { - jx; + (void) jx; return K::marker9 (); } } @@ -53,7 +53,7 @@ int marker7 () { using namespace G::H; - ghx; + (void) ghx; return L::marker8 (); } } @@ -69,7 +69,7 @@ using namespace E::F; int marker6 () { - efx; + (void) efx; return I::marker7 (); } @@ -92,7 +92,7 @@ using namespace C; int marker5 () { - cc; + (void) cc; return marker6 (); } @@ -110,7 +110,7 @@ int marker2 () { namespace B = A; - B::_a; + (void) B::_a; return marker3 (); } @@ -134,6 +134,6 @@ int main () { using namespace A; - _a; + (void) _a; return marker1 (); } diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/nsusing.exp gdb-10.2/gdb/testsuite/gdb.cp/nsusing.exp --- gdb-9.1/gdb/testsuite/gdb.cp/nsusing.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/nsusing.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/operator.exp gdb-10.2/gdb/testsuite/gdb.cp/operator.exp --- gdb-9.1/gdb/testsuite/gdb.cp/operator.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/operator.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,7 +15,8 @@ standard_testfile .cc -if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile} {debug c++}] } { +if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile} \ + {debug c++ additional_flags=-Wno-unused-comparison}] } { return -1 } diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/oranking.exp gdb-10.2/gdb/testsuite/gdb.cp/oranking.exp --- gdb-9.1/gdb/testsuite/gdb.cp/oranking.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/oranking.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/overload-const.cc gdb-10.2/gdb/testsuite/gdb.cp/overload-const.cc --- gdb-9.1/gdb/testsuite/gdb.cp/overload-const.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/overload-const.cc 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This test case is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/overload-const.exp gdb-10.2/gdb/testsuite/gdb.cp/overload-const.exp --- gdb-9.1/gdb/testsuite/gdb.cp/overload-const.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/overload-const.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/overload.exp gdb-10.2/gdb/testsuite/gdb.cp/overload.exp --- gdb-9.1/gdb/testsuite/gdb.cp/overload.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/overload.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1998-2020 Free Software Foundation, Inc. +# Copyright 1998-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/ovldbreak.exp gdb-10.2/gdb/testsuite/gdb.cp/ovldbreak.exp --- gdb-9.1/gdb/testsuite/gdb.cp/ovldbreak.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/ovldbreak.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 1998-2020 Free Software Foundation, Inc. +# Copyright (C) 1998-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/ovsrch1.cc gdb-10.2/gdb/testsuite/gdb.cp/ovsrch1.cc --- gdb-9.1/gdb/testsuite/gdb.cp/ovsrch1.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/ovsrch1.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/ovsrch2.cc gdb-10.2/gdb/testsuite/gdb.cp/ovsrch2.cc --- gdb-9.1/gdb/testsuite/gdb.cp/ovsrch2.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/ovsrch2.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/ovsrch3.cc gdb-10.2/gdb/testsuite/gdb.cp/ovsrch3.cc --- gdb-9.1/gdb/testsuite/gdb.cp/ovsrch3.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/ovsrch3.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/ovsrch4.cc gdb-10.2/gdb/testsuite/gdb.cp/ovsrch4.cc --- gdb-9.1/gdb/testsuite/gdb.cp/ovsrch4.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/ovsrch4.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/ovsrch.exp gdb-10.2/gdb/testsuite/gdb.cp/ovsrch.exp --- gdb-9.1/gdb/testsuite/gdb.cp/ovsrch.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/ovsrch.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # # Contributed by Red Hat, originally written by Keith Seitz. # diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/ovsrch.h gdb-10.2/gdb/testsuite/gdb.cp/ovsrch.h --- gdb-9.1/gdb/testsuite/gdb.cp/ovsrch.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/ovsrch.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/paren-type.cc gdb-10.2/gdb/testsuite/gdb.cp/paren-type.cc --- gdb-9.1/gdb/testsuite/gdb.cp/paren-type.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/paren-type.cc 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/paren-type.exp gdb-10.2/gdb/testsuite/gdb.cp/paren-type.exp --- gdb-9.1/gdb/testsuite/gdb.cp/paren-type.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/paren-type.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2011-2020 Free Software Foundation, Inc. +# Copyright (C) 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/parse-lang.cc gdb-10.2/gdb/testsuite/gdb.cp/parse-lang.cc --- gdb-9.1/gdb/testsuite/gdb.cp/parse-lang.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/parse-lang.cc 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2013-2020 Free Software Foundation, Inc. +/* Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/parse-lang.exp gdb-10.2/gdb/testsuite/gdb.cp/parse-lang.exp --- gdb-9.1/gdb/testsuite/gdb.cp/parse-lang.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/parse-lang.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/pass-by-ref-2.cc gdb-10.2/gdb/testsuite/gdb.cp/pass-by-ref-2.cc --- gdb-9.1/gdb/testsuite/gdb.cp/pass-by-ref-2.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/pass-by-ref-2.cc 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,295 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2019-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +class ByVal { +public: + ByVal (void); + + int x; +}; + +ByVal::ByVal (void) +{ + x = 2; +} + +class ByRef { +public: + ByRef (void); + + ByRef (const ByRef &rhs); + + int x; +}; + +ByRef::ByRef (void) +{ + x = 2; +} + +ByRef::ByRef (const ByRef &rhs) +{ + x = 3; /* ByRef-cctor */ +} + +class ArrayContainerByVal { +public: + ByVal items[2]; +}; + +int +cbvArrayContainerByVal (ArrayContainerByVal arg) +{ + arg.items[0].x += 4; // intentionally modify + return arg.items[0].x; +} + +class ArrayContainerByRef { +public: + ByRef items[2]; +}; + +int +cbvArrayContainerByRef (ArrayContainerByRef arg) +{ + arg.items[0].x += 4; // intentionally modify + return arg.items[0].x; +} + +class DynamicBase { +public: + DynamicBase (void); + + virtual int get (void); + + int x; +}; + +DynamicBase::DynamicBase (void) +{ + x = 2; +} + +int +DynamicBase::get (void) +{ + return 42; +} + +class Dynamic : public DynamicBase { +public: + virtual int get (void); +}; + +int +Dynamic::get (void) +{ + return 9999; +} + +int +cbvDynamic (DynamicBase arg) +{ + arg.x += 4; // intentionally modify + return arg.x + arg.get (); +} + +class Inlined { +public: + Inlined (void); + + __attribute__((always_inline)) + Inlined (const Inlined &rhs) + { + x = 3; + } + + int x; +}; + +Inlined::Inlined (void) +{ + x = 2; +} + +int +cbvInlined (Inlined arg) +{ + arg.x += 4; // intentionally modify + return arg.x; +} + +class DtorDel { +public: + DtorDel (void); + + ~DtorDel (void) = delete; + + int x; +}; + +DtorDel::DtorDel (void) +{ + x = 2; +} + +int +cbvDtorDel (DtorDel arg) +{ + // Calling this method should be rejected + return arg.x; +} + +class FourCCtor { +public: + FourCCtor (void); + + FourCCtor (FourCCtor &rhs); + FourCCtor (const FourCCtor &rhs); + FourCCtor (volatile FourCCtor &rhs); + FourCCtor (const volatile FourCCtor &rhs); + + int x; +}; + +FourCCtor::FourCCtor (void) +{ + x = 2; +} + +FourCCtor::FourCCtor (FourCCtor &rhs) +{ + x = 3; +} + +FourCCtor::FourCCtor (const FourCCtor &rhs) +{ + x = 4; +} + +FourCCtor::FourCCtor (volatile FourCCtor &rhs) +{ + x = 5; +} + +FourCCtor::FourCCtor (const volatile FourCCtor &rhs) +{ + x = 6; +} + +int +cbvFourCCtor (FourCCtor arg) +{ + arg.x += 10; // intentionally modify + return arg.x; +} + +class TwoMCtor { +public: + TwoMCtor (void); + + /* Even though one move ctor is defaulted, the other + is explicit. */ + TwoMCtor (const TwoMCtor &&rhs); + TwoMCtor (TwoMCtor &&rhs) = default; + + int x; +}; + +TwoMCtor::TwoMCtor (void) +{ + x = 2; +} + +TwoMCtor::TwoMCtor (const TwoMCtor &&rhs) +{ + x = 3; +} + +int +cbvTwoMCtor (TwoMCtor arg) +{ + arg.x += 10; // intentionally modify + return arg.x; +} + +class TwoMCtorAndCCtor { +public: + TwoMCtorAndCCtor (void); + + TwoMCtorAndCCtor (const TwoMCtorAndCCtor &rhs) = default; + + /* Even though one move ctor is defaulted, the other + is explicit. This makes the type pass-by-ref. */ + TwoMCtorAndCCtor (const TwoMCtorAndCCtor &&rhs); + TwoMCtorAndCCtor (TwoMCtorAndCCtor &&rhs) = default; + + int x; +}; + +TwoMCtorAndCCtor::TwoMCtorAndCCtor (void) +{ + x = 2; +} + +TwoMCtorAndCCtor::TwoMCtorAndCCtor (const TwoMCtorAndCCtor &&rhs) +{ + x = 4; +} + +int +cbvTwoMCtorAndCCtor (TwoMCtorAndCCtor arg) +{ + arg.x += 10; // intentionally modify + return arg.x; +} + +ArrayContainerByVal arrayContainerByVal; +ArrayContainerByRef arrayContainerByRef; +Dynamic dynamic; +Inlined inlined; +// Cannot stack-allocate DtorDel +DtorDel *dtorDel; +FourCCtor fourCctor_c0v0; +const FourCCtor fourCctor_c1v0; +volatile FourCCtor fourCctor_c0v1; +const volatile FourCCtor fourCctor_c1v1; +TwoMCtor twoMctor; +TwoMCtorAndCCtor twoMctorAndCctor; + +int +main (void) +{ + int v; + dtorDel = new DtorDel; + /* Explicitly call the cbv function to make sure the compiler + will not omit any code in the binary. */ + v = cbvArrayContainerByVal (arrayContainerByVal); + v = cbvArrayContainerByRef (arrayContainerByRef); + v = cbvDynamic (dynamic); + v = cbvInlined (inlined); + v = cbvFourCCtor (fourCctor_c0v0); + v = cbvFourCCtor (fourCctor_c1v0); + v = cbvFourCCtor (fourCctor_c0v1); + v = cbvFourCCtor (fourCctor_c1v1); + /* v = cbvTwoMCtor (twoMctor); */ // This is illegal, cctor is deleted + v = cbvTwoMCtorAndCCtor (twoMctorAndCctor); + + /* stop here */ + + return 0; +} diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/pass-by-ref-2.exp gdb-10.2/gdb/testsuite/gdb.cp/pass-by-ref-2.exp --- gdb-9.1/gdb/testsuite/gdb.cp/pass-by-ref-2.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/pass-by-ref-2.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,120 @@ +# Copyright 2019-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Check that GDB can call C++ functions whose parameters have +# object type, and are either passed by value or implicitly by reference. +# +# This is a companion test to pass-by-ref.exp. In this test, the input +# is manually-written. In pass-by-ref.exp, the test input is generated. +# +# We include tests for classes that +# - contain arrays as fields, +# - are dynamic (i.e. have virtual methods) +# - have inlined copy ctor +# - have deleted destructor + +if {[skip_cplus_tests]} { + untested "c++ test skipped" + continue +} + +standard_testfile .cc + +set options {debug c++ additional_flags=-std=c++11} +if {[prepare_for_testing "failed to prepare" $testfile $srcfile $options]} { + return -1 +} + +if {![runto_main]} { + untested "failed to run to main" + return -1 +} + +# GCC version <= 6 and Clang do not emit DW_AT_defaulted and DW_AT_deleted. +set is_gcc_6_or_older [test_compiler_info {gcc-[0-6]-*}] +set is_clang [test_compiler_info {clang-*}] + +set bp_location [gdb_get_line_number "stop here"] +gdb_breakpoint $bp_location +gdb_continue_to_breakpoint "end of main" ".*return .*;" + +gdb_test "print cbvArrayContainerByVal (arrayContainerByVal)" "6" \ + "call cbvArrayContainerByVal" +gdb_test "print arrayContainerByVal.items\[0\].x" "2" \ + "cbv argument 'arrayContainerByVal' should not change" + +gdb_test "print cbvArrayContainerByRef (arrayContainerByRef)" "7" \ + "call cbvArrayContainerByRef" +gdb_test "print arrayContainerByRef.items\[0\].x" "2" \ + "cbv argument 'arrayContainerByRef' should not change" + +gdb_test "print cbvDynamic (dynamic)" "48" \ + "call cbvDynamic" +gdb_test "print dynamic.x" "2" \ + "cbv argument 'dynamic' should not change" + +set sig "\"Inlined\:\:Inlined\\(.*Inlined const\&\\)\"" +gdb_test "print cbvInlined (inlined)" \ + "expression cannot be evaluated .* \\(maybe inlined\\?\\)" + +if {$is_gcc_6_or_older || $is_clang} {setup_xfail "*-*-*"} +gdb_test "print cbvDtorDel (*dtorDel)" \ + ".* cannot be evaluated .* 'DtorDel' is not destructible" \ + "type not destructible" + +# Test that GDB calls the correct copy ctor +gdb_test "print cbvFourCCtor (fourCctor_c0v0)" "13" \ + "call cbvFourCCtor (c0v0)" +gdb_test "print fourCctor_c0v0.x" "2" \ + "cbv argument 'twoCctor_c0v0' should not change" + +gdb_test "print cbvFourCCtor (fourCctor_c1v0)" "14" \ + "call cbvFourCCtor (c1v0)" +gdb_test "print fourCctor_c1v0.x" "2" \ + "cbv argument 'twoCctor_c1v0' should not change" + +gdb_test "print cbvFourCCtor (fourCctor_c0v1)" "15" \ + "call cbvFourCCtor (c0v1)" +gdb_test "print fourCctor_c0v1.x" "2" \ + "cbv argument 'twoCctor_c0v1' should not change" + +gdb_test "print cbvFourCCtor (fourCctor_c1v1)" "16" \ + "call cbvFourCCtor (c1v1)" +gdb_test "print fourCctor_c1v1.x" "2" \ + "cbv argument 'twoCctor_c1v1' should not change" + +gdb_test "print cbvTwoMCtor (twoMctor)" \ + ".* cannot be evaluated .* 'TwoMCtor' is not copy constructible" \ + "copy ctor is implicitly deleted" + +if {$is_gcc_6_or_older || $is_clang} {setup_xfail "*-*-*"} +gdb_test "print cbvTwoMCtorAndCCtor (twoMctorAndCctor)" "12" \ + "call cbvTwoMCtorAndCCtor" +gdb_test "print twoMctorAndCctor.x" "2" \ + "cbv argument 'twoMctorAndCtor' should not change" + +# Test that we get a breakpoint from the cctor during infcall and +# we can examine arguments. This is a test that the dummy frame +# of the copy constructor is set up correctly by the infcall mechanism. +set bp_location [gdb_get_line_number "ByRef-cctor"] +gdb_breakpoint $bp_location +gdb_test "print cbvArrayContainerByRef (arrayContainerByRef)" \ + ".*The program being debugged stopped.*" \ + "call cbvArrayContainerByRef with BP" +gdb_test "backtrace" [multi_line \ + "#0 ByRef\:\:ByRef .* at .*$srcfile:$bp_location" \ + "#1 .* ArrayContainerByRef::ArrayContainerByRef .*" \ + "#2 <function called from gdb>" \ + "#3 main.*"] diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/pass-by-ref.cc gdb-10.2/gdb/testsuite/gdb.cp/pass-by-ref.cc --- gdb-9.1/gdb/testsuite/gdb.cp/pass-by-ref.cc 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/pass-by-ref.cc 1970-01-01 00:00:00.000000000 +0000 @@ -1,79 +0,0 @@ -/* This testcase is part of GDB, the GNU debugger. - - Copyright 2007-2020 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -class Obj { -public: - Obj (); - Obj (const Obj &); - ~Obj (); - int var[2]; -}; - -int foo (Obj arg) -{ - return arg.var[0] + arg.var[1]; -} - -Obj::Obj () -{ - var[0] = 1; - var[1] = 2; -} - -Obj::Obj (const Obj &obj) -{ - var[0] = obj.var[0]; - var[1] = obj.var[1]; -} - -Obj::~Obj () -{ - -} - -struct Derived : public Obj -{ - int other; -}; - -int blap (Derived arg) -{ - return foo (arg); -} - -struct Container -{ - Obj obj; -}; - -int blip (Container arg) -{ - return foo (arg.obj); -} - -Obj global_obj; -Derived global_derived; -Container global_container; - -int -main () -{ - int bar = foo (global_obj); - blap (global_derived); - blip (global_container); - return bar; -} diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/pass-by-ref.exp gdb-10.2/gdb/testsuite/gdb.cp/pass-by-ref.exp --- gdb-9.1/gdb/testsuite/gdb.cp/pass-by-ref.exp 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/pass-by-ref.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2007-2020 Free Software Foundation, Inc. +# Copyright 2007-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -14,20 +14,421 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. # Check that GDB can call C++ functions whose parameters have -# object type, but are passed by reference. +# object type, and are either passed by value or implicitly by reference. +# +# Suppose F is a function that has a call-by-value parameter whose +# type is class C. When calling F with an argument A, a copy of A should +# be created and passed to F. If C is a trivially-copyable type, A can +# be copied by a straightforward memory copy. However, roughly speaking, +# if C has a user-defined copy constructor and/or a user-defined +# destructor, the copy ctor should be used to initialize the copy of A +# before calling F, and a reference to that copy is passed to F. After +# the function returns, the destructor should be called to destruct the +# copy. In this case, C is said to be a 'pass-by-reference' type. +# Determining whether C is pass-by-ref depends on +# how the copy ctor, destructor, and the move ctor of C are defined. +# First of all, C is not copy constructible if its copy constructor is +# explicitly or implicitly deleted. In this case, it would be illegal +# to pass values of type C to a function. C is pass-by-value, if all of +# its copy ctor, dtor, and move ctor are trivially defined. +# Otherwise, it is pass-by-ref. +# +# To cover the many possible combinations, this test generates classes +# that contain three special functions: +# (1) a copy constructor, +# (2) a destructor, and +# (3) a move constructor. +# A special function is in one of the following states: +# * explicit: The function is explicitly defined by the user. +# * defaultedIn: The function is defaulted inside the class decl, +# using the 'default' keyword. +# * defaultedOut: The function is declared inside the class decl, +# and defaulted outside using the 'default' keyword. +# * deleted: The function is explicitly deleted by the user, +# using the 'delete' keyword. +# * absent: The function is not declared by the user (i.e. it does not +# exist in the source. The compiler generates (or deletes) the +# definition in this case. +# +# The C++ ABI decides if a class is pass-by-value or pass-by-ref +# (i.e. trivially copyable or not) first at the language level, based +# on the state of the special functions. Then, at the target level, a +# class may be determined to be pass-by-ref because of its size +# (e.g. if it is too large to fit on registers). For this reason, this +# test generates both a small and a large version for the same +# combination of special function states. +# +# A class is not trivially-copyable if a base class or a field is not +# trivially-copyable, even though the class definition itself seems +# trivial. To test these cases, we also generate derived classes and +# container classes. +# +# The generated code is placed in the test output directory. +# +# The companion test file pass-by-ref-2.exp also contains +# manually-written cases. -if { [skip_cplus_tests] } { continue } +if {[skip_cplus_tests]} { + untested "c++ test skipped" + continue +} +# The program source is generated in the output directory. +# We use standard_testfile here to set convenience variables. standard_testfile .cc -if {[prepare_for_testing "failed to prepare" $testfile $srcfile {debug c++}]} { +# Some constant values used when generating the source + +set SMALL 2 +set LARGE 150 +set ORIGINAL 2 +set CUSTOM 3 +set ADDED 4 +set TRACE 5 + + +# Return 1 if the class whose special function states are STATES +# is copyable. Otherwise return 0. + +proc is_copy_constructible { states } { + set cctor [lindex $states 0] + set dtor [lindex $states 1] + set mctor [lindex $states 2] + + if {$cctor == "deleted" || ($cctor == "absent" && $mctor != "absent")} { + return 0 + } + return 1 +} + +# Generate a declaration and an out-of-class definition for a function +# with the provided signature. The STATE should be one of the following: +# - explicit, defaultedIn, defaultedOut, deleted, absent + +proc generate_member_function { classname signature length state } { + set declaration "" + set definition "" + + global CUSTOM + global TRACE + + switch $state { + explicit { + set declaration "$signature;\n" + set definition "$classname\:\:$signature + { + data\[0\] = $CUSTOM; + data\[[expr $length - 1]\] = $CUSTOM; + tracer = $TRACE; + }\n" + } + defaultedIn { + set declaration "$signature = default;\n" + } + defaultedOut { + set declaration "$signature;\n" + set definition "$classname\:\:$signature = default;\n" + } + deleted { + set declaration "$signature = delete;\n" + } + default { + # function is not user-defined in this case + } + } + + return [list $declaration $definition] +} + +# Generate a C++ class with the given CLASSNAME and LENGTH-many +# integer elements. The STATES is an array of 3 items +# containing the desired state of the special functions +# in this order: +# copy constructor, destructor, move constructor + +proc generate_class { classname length states } { + set declarations "" + set definitions "" + set classname "${classname}_[join $states _]" + + for {set i 0} {$i < [llength $states]} {incr i} { + set sig "" + switch $i { + 0 {set sig "$classname (const $classname \&rhs)"} + 1 {set sig "\~$classname (void)"} + 2 {set sig "$classname ($classname \&\&rhs)"} + } + + set state [lindex $states $i] + set code [generate_member_function $classname $sig $length $state] + append declarations [lindex $code 0] + append definitions [lindex $code 1] + } + + global ORIGINAL + + return " + /*** C++ class $classname ***/ + class ${classname} { + public: + $classname (void); + $declarations + + int data\[$length\]; + }; + + $classname\:\:$classname (void) + { + data\[0\] = $ORIGINAL; + data\[[expr $length - 1]\] = $ORIGINAL; + } + + $definitions + + $classname ${classname}_var; /* global var */ + + template int cbv<$classname> ($classname arg);" +} + +# Generate a small C++ class + +proc generate_small_class { states } { + global SMALL + return [generate_class Small $SMALL $states]; +} + +# Generate a large C++ class + +proc generate_large_class { states } { + global LARGE + return [generate_class Large $LARGE $states]; +} + +# Generate a class that derives from a small class + +proc generate_derived_class { states } { + set base "Small_[join $states _]" + set classname "Derived_[join $states _]" + + return " + /*** Class derived from $base ***/ + class $classname : public $base { + public: + }; + + $classname ${classname}_var; /* global var */ + + template int cbv<$classname> ($classname arg);" +} + +# Generate a class that contains a small class item + +proc generate_container_class { states } { + set contained "Small_[join $states _]" + set classname "Container_[join $states _]" + + return " + /*** Class that contains $contained ***/ + class $classname { + public: + $contained item; + }; + + $classname ${classname}_var; /* global var */ + + template int cbv_container<$classname> ($classname arg);" +} + +# Generate useful statements that use a class in the debugee program + +proc generate_stmts { classprefix states {cbvfun "cbv"}} { + set classname "${classprefix}_[join $states _]" + + # Having an explicit call to the cbv function in the debugee program + # ensures that the compiler will emit necessary function in the binary. + if {[is_copy_constructible $states]} { + set cbvcall "$cbvfun<$classname> (${classname}_var);\n" + } else { + set cbvcall "" + } + + return "$cbvcall" +} + +# Generate the complete debugee program + +proc generate_program { classes stmts } { + global ADDED + + return " + /*** THIS FILE IS GENERATED BY THE TEST. ***/ + + static int tracer = 0; + + /* The call-by-value function. */ + template <class T> + int + cbv (T arg) + { + arg.data\[0\] += $ADDED; // intentionally modify the arg + return arg.data\[0\]; + } + + template <class T> + int + cbv_container (T arg) + { + arg.item.data\[0\] += $ADDED; // intentionally modify + return arg.item.data\[0\]; + } + + $classes + + int + main (void) + { + $stmts + + /* stop here */ + + return 0; + }" +} + +# Compute all the combinations of special function states. +# We do not contain the 'deleted' state for the destructor, +# because it is illegal to have stack-allocated objects +# whose destructor have been deleted. This case is covered +# in pass-by-ref-2 via heap-allocated objects. + +set options_nodelete [list absent explicit defaultedIn defaultedOut] +set options [concat $options_nodelete {deleted}] +set all_combinations {} + +foreach cctor $options { + foreach dtor $options_nodelete { + foreach mctor $options { + lappend all_combinations [list $cctor $dtor $mctor] + } + } +} + +# Generate the classes. + +set classes "" +set stmts "" + +foreach state $all_combinations { + append classes [generate_small_class $state] + append stmts [generate_stmts "Small" $state] + + append classes [generate_large_class $state] + append stmts [generate_stmts "Large" $state] + + append classes [generate_derived_class $state] + append stmts [generate_stmts "Derived" $state] + + append classes [generate_container_class $state] + append stmts [generate_stmts "Container" $state "cbv_container"] +} + +# Generate the program code and compile +set program [generate_program $classes $stmts] +set srcfile [standard_output_file ${srcfile}] +gdb_produce_source $srcfile $program + +set options {debug c++ additional_flags=-std=c++11} +if {[prepare_for_testing "failed to prepare" $testfile $srcfile $options]} { return -1 } -if ![runto_main] then { +if {![runto_main]} { + untested "failed to run to main" return -1 } -gdb_test "print foo (global_obj)" " = 3" "call function in obj" -gdb_test "print blap (global_derived)" " = 3" "call function in derived" -gdb_test "print blip (global_container)" " = 3" "call function in container" +set bp_location [gdb_get_line_number "stop here"] +gdb_breakpoint $bp_location +gdb_continue_to_breakpoint "end of main" ".*return .*;" + +# Do the checks for a given class whose name is prefixed with PREFIX, +# and whose special functions have the states given in STATES. +# The name of the call-by-value function and the expression to access +# the data field can be specified explicitly if the default values +# do not work. + +proc test_for_class { prefix states cbvfun data_field length} { + set name "${prefix}_[join $states _]" + + set cctor [lindex $states 0] + set dtor [lindex $states 1] + set mctor [lindex $states 2] + + global ORIGINAL + global CUSTOM + global ADDED + global TRACE + + # GCC version <= 6 and Clang do not emit DW_AT_defaulted and DW_AT_deleted. + set is_gcc_6_or_older [test_compiler_info {gcc-[0-6]-*}] + set is_clang [test_compiler_info {clang-*}] + # But Clang version >= 7 emits DW_AT_calling_convention for types. + set is_clang_6_or_older [test_compiler_info {clang-[0-6]-*}] + + with_test_prefix $name { + if {[is_copy_constructible $states]} { + set expected [expr {$ORIGINAL + $ADDED}] + if {$cctor == "explicit"} { + set expected [expr {$CUSTOM + $ADDED}] + } + if {$dtor == "explicit"} { + gdb_test "print tracer = 0" " = 0" "reset the tracer" + } + + if {$cctor == "defaultedIn" || $dtor == "defaultedIn"} { + if {$is_gcc_6_or_older || $is_clang_6_or_older} { + setup_xfail "*-*-*" + } elseif {$is_clang} { + # If this is a pass-by-value case, Clang >= 7's + # DW_AT_calling_convention leads to the right decision. + # Otherwise, it is expected to fail. + if {"defaultedOut" in $states || "explicit" in $states} { + setup_xfail "*-*-*" + } + } + } + gdb_test "print ${cbvfun}<$name> (${name}_var)" " = $expected" \ + "call '$cbvfun'" + gdb_test "print ${name}_var.${data_field}\[0\]" " = $ORIGINAL" \ + "cbv argument should not change (item 0)" + if {$length > 1} { + set last_index [expr $length - 1] + gdb_test "print ${name}_var.${data_field}\[$last_index\]" \ + " = $ORIGINAL" \ + "cbv argument should not change (item $last_index)" + } + if {$dtor == "explicit"} { + if {$cctor == "defaultedIn" + && ($is_gcc_6_or_older || $is_clang)} { + setup_xfail "*-*-*" + } + gdb_test "print tracer" " = $TRACE" \ + "destructor should be called" + } + } else { + if {$cctor == "deleted" && ($is_gcc_6_or_older || $is_clang)} { + setup_xfail "*-*-*" + } + gdb_test "print ${cbvfun}<$name> (${name}_var)" \ + ".* cannot be evaluated .* '${name}' is not copy constructible" \ + "calling '$cbvfun' should be refused" + } + } +} + +foreach state $all_combinations { + test_for_class "Small" $state "cbv" "data" $SMALL + test_for_class "Large" $state "cbv" "data" $LARGE + test_for_class "Derived" $state "cbv" "data" 1 + test_for_class "Container" $state "cbv_container" "item.data" 1 +} diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/pr-1023.exp gdb-10.2/gdb/testsuite/gdb.cp/pr-1023.exp --- gdb-9.1/gdb/testsuite/gdb.cp/pr-1023.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/pr-1023.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2003-2020 Free Software Foundation, Inc. +# Copyright 2003-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/pr10687.exp gdb-10.2/gdb/testsuite/gdb.cp/pr10687.exp --- gdb-9.1/gdb/testsuite/gdb.cp/pr10687.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/pr10687.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -#Copyright 2010-2020 Free Software Foundation, Inc. +#Copyright 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/pr10728.exp gdb-10.2/gdb/testsuite/gdb.cp/pr10728.exp --- gdb-9.1/gdb/testsuite/gdb.cp/pr10728.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/pr10728.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/pr12028.exp gdb-10.2/gdb/testsuite/gdb.cp/pr12028.exp --- gdb-9.1/gdb/testsuite/gdb.cp/pr12028.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/pr12028.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/pr-1210.exp gdb-10.2/gdb/testsuite/gdb.cp/pr-1210.exp --- gdb-9.1/gdb/testsuite/gdb.cp/pr-1210.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/pr-1210.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2003-2020 Free Software Foundation, Inc. +# Copyright 2003-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/pr17132.cc gdb-10.2/gdb/testsuite/gdb.cp/pr17132.cc --- gdb-9.1/gdb/testsuite/gdb.cp/pr17132.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/pr17132.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/pr17132.exp gdb-10.2/gdb/testsuite/gdb.cp/pr17132.exp --- gdb-9.1/gdb/testsuite/gdb.cp/pr17132.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/pr17132.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/pr17494.cc gdb-10.2/gdb/testsuite/gdb.cp/pr17494.cc --- gdb-9.1/gdb/testsuite/gdb.cp/pr17494.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/pr17494.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/pr17494.exp gdb-10.2/gdb/testsuite/gdb.cp/pr17494.exp --- gdb-9.1/gdb/testsuite/gdb.cp/pr17494.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/pr17494.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/pr-574.cc gdb-10.2/gdb/testsuite/gdb.cp/pr-574.cc --- gdb-9.1/gdb/testsuite/gdb.cp/pr-574.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/pr-574.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This test script is part of GDB, the GNU debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/pr-574.exp gdb-10.2/gdb/testsuite/gdb.cp/pr-574.exp --- gdb-9.1/gdb/testsuite/gdb.cp/pr-574.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/pr-574.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2002-2020 Free Software Foundation, Inc. +# Copyright 2002-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/pr9067.exp gdb-10.2/gdb/testsuite/gdb.cp/pr9067.exp --- gdb-9.1/gdb/testsuite/gdb.cp/pr9067.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/pr9067.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2009-2020 Free Software Foundation, Inc. +# Copyright 2009-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/pr9167.exp gdb-10.2/gdb/testsuite/gdb.cp/pr9167.exp --- gdb-9.1/gdb/testsuite/gdb.cp/pr9167.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/pr9167.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -#Copyright 2010-2020 Free Software Foundation, Inc. +#Copyright 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/pr9631.cc gdb-10.2/gdb/testsuite/gdb.cp/pr9631.cc --- gdb-9.1/gdb/testsuite/gdb.cp/pr9631.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/pr9631.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This test script is part of GDB, the GNU debugger. - Copyright 2009-2020 Free Software Foundation, Inc. + Copyright 2009-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/pr9631.exp gdb-10.2/gdb/testsuite/gdb.cp/pr9631.exp --- gdb-9.1/gdb/testsuite/gdb.cp/pr9631.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/pr9631.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2009-2020 Free Software Foundation, Inc. +# Copyright 2009-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/print-demangle.exp gdb-10.2/gdb/testsuite/gdb.cp/print-demangle.exp --- gdb-9.1/gdb/testsuite/gdb.cp/print-demangle.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/print-demangle.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,32 @@ +# Copyright (C) 2013-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +if { [skip_cplus_tests] } { continue } + +standard_testfile bool.cc + +if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}]} { + return -1 +} + +runto_main + +gdb_breakpoint "return_true" + +gdb_continue_to_breakpoint "return_true" + +gdb_test_no_output "set print demangle off" + +gdb_test "frame" " _Z11return_truev .*" diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/printmethod.cc gdb-10.2/gdb/testsuite/gdb.cp/printmethod.cc --- gdb-9.1/gdb/testsuite/gdb.cp/printmethod.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/printmethod.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This test script is part of GDB, the GNU debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/printmethod.exp gdb-10.2/gdb/testsuite/gdb.cp/printmethod.exp --- gdb-9.1/gdb/testsuite/gdb.cp/printmethod.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/printmethod.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2002-2020 Free Software Foundation, Inc. +# Copyright 2002-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/psmang1.cc gdb-10.2/gdb/testsuite/gdb.cp/psmang1.cc --- gdb-9.1/gdb/testsuite/gdb.cp/psmang1.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/psmang1.cc 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This test script is part of GDB, the GNU debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/psmang2.cc gdb-10.2/gdb/testsuite/gdb.cp/psmang2.cc --- gdb-9.1/gdb/testsuite/gdb.cp/psmang2.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/psmang2.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This test script is part of GDB, the GNU debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/psmang.exp gdb-10.2/gdb/testsuite/gdb.cp/psmang.exp --- gdb-9.1/gdb/testsuite/gdb.cp/psmang.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/psmang.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2002-2020 Free Software Foundation, Inc. +# Copyright 2002-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/psymtab-parameter.cc gdb-10.2/gdb/testsuite/gdb.cp/psymtab-parameter.cc --- gdb-9.1/gdb/testsuite/gdb.cp/psymtab-parameter.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/psymtab-parameter.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2009-2020 Free Software Foundation, Inc. + Copyright 2009-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/psymtab-parameter.exp gdb-10.2/gdb/testsuite/gdb.cp/psymtab-parameter.exp --- gdb-9.1/gdb/testsuite/gdb.cp/psymtab-parameter.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/psymtab-parameter.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/ptype-cv-cp.cc gdb-10.2/gdb/testsuite/gdb.cp/ptype-cv-cp.cc --- gdb-9.1/gdb/testsuite/gdb.cp/ptype-cv-cp.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/ptype-cv-cp.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/ptype-cv-cp.exp gdb-10.2/gdb/testsuite/gdb.cp/ptype-cv-cp.exp --- gdb-9.1/gdb/testsuite/gdb.cp/ptype-cv-cp.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/ptype-cv-cp.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/ptype-flags.cc gdb-10.2/gdb/testsuite/gdb.cp/ptype-flags.cc --- gdb-9.1/gdb/testsuite/gdb.cp/ptype-flags.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/ptype-flags.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2012-2020 Free Software Foundation, Inc. +/* Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/ptype-flags.exp gdb-10.2/gdb/testsuite/gdb.cp/ptype-flags.exp --- gdb-9.1/gdb/testsuite/gdb.cp/ptype-flags.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/ptype-flags.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/punctuator.exp gdb-10.2/gdb/testsuite/gdb.cp/punctuator.exp --- gdb-9.1/gdb/testsuite/gdb.cp/punctuator.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/punctuator.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/readnow-language.cc gdb-10.2/gdb/testsuite/gdb.cp/readnow-language.cc --- gdb-9.1/gdb/testsuite/gdb.cp/readnow-language.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/readnow-language.cc 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/readnow-language.exp gdb-10.2/gdb/testsuite/gdb.cp/readnow-language.exp --- gdb-9.1/gdb/testsuite/gdb.cp/readnow-language.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/readnow-language.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/ref-params.cc gdb-10.2/gdb/testsuite/gdb.cp/ref-params.cc --- gdb-9.1/gdb/testsuite/gdb.cp/ref-params.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/ref-params.cc 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This test script is part of GDB, the GNU debugger. - Copyright 2006-2020 Free Software Foundation, Inc. + Copyright 2006-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/ref-params.exp gdb-10.2/gdb/testsuite/gdb.cp/ref-params.exp --- gdb-9.1/gdb/testsuite/gdb.cp/ref-params.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/ref-params.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ # Tests for reference parameters of types and their subtypes in GDB. -# Copyright 2006-2020 Free Software Foundation, Inc. +# Copyright 2006-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -24,7 +24,7 @@ standard_testfile .cc -if {[build_executable $testfile.exp $testfile $srcfile {debug c++}] == 1} { +if {[build_executable $testfile.exp $testfile $srcfile {debug c++}] == -1} { return -1 } diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/ref-types.cc gdb-10.2/gdb/testsuite/gdb.cp/ref-types.cc --- gdb-9.1/gdb/testsuite/gdb.cp/ref-types.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/ref-types.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This test script is part of GDB, the GNU debugger. - Copyright 1999-2020 Free Software Foundation, Inc. + Copyright 1999-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/ref-types.exp gdb-10.2/gdb/testsuite/gdb.cp/ref-types.exp --- gdb-9.1/gdb/testsuite/gdb.cp/ref-types.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/ref-types.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ # Tests for reference types with short type variables in GDB. -# Copyright 1998-2020 Free Software Foundation, Inc. +# Copyright 1998-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/re-set-overloaded.cc gdb-10.2/gdb/testsuite/gdb.cp/re-set-overloaded.cc --- gdb-9.1/gdb/testsuite/gdb.cp/re-set-overloaded.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/re-set-overloaded.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/re-set-overloaded.exp gdb-10.2/gdb/testsuite/gdb.cp/re-set-overloaded.exp --- gdb-9.1/gdb/testsuite/gdb.cp/re-set-overloaded.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/re-set-overloaded.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/rtti1.cc gdb-10.2/gdb/testsuite/gdb.cp/rtti1.cc --- gdb-9.1/gdb/testsuite/gdb.cp/rtti1.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/rtti1.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Code to go along with tests in rtti.exp. - Copyright 2003-2020 Free Software Foundation, Inc. + Copyright 2003-2021 Free Software Foundation, Inc. Contributed by David Carlton <carlton@bactrian.org> and by Kealia, Inc. diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/rtti2.cc gdb-10.2/gdb/testsuite/gdb.cp/rtti2.cc --- gdb-9.1/gdb/testsuite/gdb.cp/rtti2.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/rtti2.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Code to go along with tests in rtti.exp. - Copyright 2003-2020 Free Software Foundation, Inc. + Copyright 2003-2021 Free Software Foundation, Inc. Contributed by David Carlton <carlton@bactrian.org> and by Kealia, Inc. diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/rtti.exp gdb-10.2/gdb/testsuite/gdb.cp/rtti.exp --- gdb-9.1/gdb/testsuite/gdb.cp/rtti.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/rtti.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2003-2020 Free Software Foundation, Inc. +# Copyright 2003-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/rtti.h gdb-10.2/gdb/testsuite/gdb.cp/rtti.h --- gdb-9.1/gdb/testsuite/gdb.cp/rtti.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/rtti.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Code to go along with tests in rtti.exp. - Copyright 2003-2020 Free Software Foundation, Inc. + Copyright 2003-2021 Free Software Foundation, Inc. Contributed by David Carlton <carlton@bactrian.org> and by Kealia, Inc. diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/rvalue-ref-casts.cc gdb-10.2/gdb/testsuite/gdb.cp/rvalue-ref-casts.cc --- gdb-9.1/gdb/testsuite/gdb.cp/rvalue-ref-casts.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/rvalue-ref-casts.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/rvalue-ref-casts.exp gdb-10.2/gdb/testsuite/gdb.cp/rvalue-ref-casts.exp --- gdb-9.1/gdb/testsuite/gdb.cp/rvalue-ref-casts.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/rvalue-ref-casts.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2002-2020 Free Software Foundation, Inc. +# Copyright 2002-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/rvalue-ref-overload.cc gdb-10.2/gdb/testsuite/gdb.cp/rvalue-ref-overload.cc --- gdb-9.1/gdb/testsuite/gdb.cp/rvalue-ref-overload.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/rvalue-ref-overload.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 1998-2020 Free Software Foundation, Inc. + Copyright 1998-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/rvalue-ref-overload.exp gdb-10.2/gdb/testsuite/gdb.cp/rvalue-ref-overload.exp --- gdb-9.1/gdb/testsuite/gdb.cp/rvalue-ref-overload.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/rvalue-ref-overload.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1998-2020 Free Software Foundation, Inc. +# Copyright 1998-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/rvalue-ref-params.cc gdb-10.2/gdb/testsuite/gdb.cp/rvalue-ref-params.cc --- gdb-9.1/gdb/testsuite/gdb.cp/rvalue-ref-params.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/rvalue-ref-params.cc 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This test script is part of GDB, the GNU debugger. - Copyright 2006-2020 Free Software Foundation, Inc. + Copyright 2006-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/rvalue-ref-params.exp gdb-10.2/gdb/testsuite/gdb.cp/rvalue-ref-params.exp --- gdb-9.1/gdb/testsuite/gdb.cp/rvalue-ref-params.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/rvalue-ref-params.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2006-2020 Free Software Foundation, Inc. +# Copyright 2006-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -21,7 +21,7 @@ standard_testfile .cc if {[prepare_for_testing $testfile.exp $testfile $srcfile \ - {debug c++ additional_flags="-std=gnu++11"}] == 1} { + {debug c++ additional_flags="-std=gnu++11"}] == -1} { return -1 } diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/rvalue-ref-sizeof.cc gdb-10.2/gdb/testsuite/gdb.cp/rvalue-ref-sizeof.cc --- gdb-9.1/gdb/testsuite/gdb.cp/rvalue-ref-sizeof.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/rvalue-ref-sizeof.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/rvalue-ref-sizeof.exp gdb-10.2/gdb/testsuite/gdb.cp/rvalue-ref-sizeof.exp --- gdb-9.1/gdb/testsuite/gdb.cp/rvalue-ref-sizeof.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/rvalue-ref-sizeof.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/rvalue-ref-types.cc gdb-10.2/gdb/testsuite/gdb.cp/rvalue-ref-types.cc --- gdb-9.1/gdb/testsuite/gdb.cp/rvalue-ref-types.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/rvalue-ref-types.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This test script is part of GDB, the GNU debugger. - Copyright 1999-2020 Free Software Foundation, Inc. + Copyright 1999-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/rvalue-ref-types.exp gdb-10.2/gdb/testsuite/gdb.cp/rvalue-ref-types.exp --- gdb-9.1/gdb/testsuite/gdb.cp/rvalue-ref-types.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/rvalue-ref-types.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1999-2020 Free Software Foundation, Inc. +# Copyright 1999-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/save-bp-qualified.cc gdb-10.2/gdb/testsuite/gdb.cp/save-bp-qualified.cc --- gdb-9.1/gdb/testsuite/gdb.cp/save-bp-qualified.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/save-bp-qualified.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2017-2020 Free Software Foundation, Inc. +/* Copyright 2017-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/save-bp-qualified.exp gdb-10.2/gdb/testsuite/gdb.cp/save-bp-qualified.exp --- gdb-9.1/gdb/testsuite/gdb.cp/save-bp-qualified.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/save-bp-qualified.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2011-2020 Free Software Foundation, Inc. +# Copyright (C) 2011-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/scope-err.cc gdb-10.2/gdb/testsuite/gdb.cp/scope-err.cc --- gdb-9.1/gdb/testsuite/gdb.cp/scope-err.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/scope-err.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2016-2020 Free Software Foundation, Inc. + Copyright 2016-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/scope-err.exp gdb-10.2/gdb/testsuite/gdb.cp/scope-err.exp --- gdb-9.1/gdb/testsuite/gdb.cp/scope-err.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/scope-err.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/shadow.exp gdb-10.2/gdb/testsuite/gdb.cp/shadow.exp --- gdb-9.1/gdb/testsuite/gdb.cp/shadow.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/shadow.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/smartp.cc gdb-10.2/gdb/testsuite/gdb.cp/smartp.cc --- gdb-9.1/gdb/testsuite/gdb.cp/smartp.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/smartp.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This test script is part of GDB, the GNU debugger. - Copyright 1999-2020 Free Software Foundation, Inc. + Copyright 1999-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -131,12 +131,12 @@ sp3->foo(1); sp3->foo('a'); - sp4->a; - sp4->b; + (void) sp4->a; + (void) sp4->b; Type4 *mt4p = &mt4; - mt4p->a; - mt4p->b; + (void) mt4p->a; + (void) mt4p->b; A a; B b; diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/smartp.exp gdb-10.2/gdb/testsuite/gdb.cp/smartp.exp --- gdb-9.1/gdb/testsuite/gdb.cp/smartp.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/smartp.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/static-method.cc gdb-10.2/gdb/testsuite/gdb.cp/static-method.cc --- gdb-9.1/gdb/testsuite/gdb.cp/static-method.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/static-method.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/static-method.exp gdb-10.2/gdb/testsuite/gdb.cp/static-method.exp --- gdb-9.1/gdb/testsuite/gdb.cp/static-method.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/static-method.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # # Contributed by Red Hat, originally written by Keith Seitz. # diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/static-print-quit.cc gdb-10.2/gdb/testsuite/gdb.cp/static-print-quit.cc --- gdb-9.1/gdb/testsuite/gdb.cp/static-print-quit.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/static-print-quit.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/static-print-quit.exp gdb-10.2/gdb/testsuite/gdb.cp/static-print-quit.exp --- gdb-9.1/gdb/testsuite/gdb.cp/static-print-quit.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/static-print-quit.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/static-typedef-print.cc gdb-10.2/gdb/testsuite/gdb.cp/static-typedef-print.cc --- gdb-9.1/gdb/testsuite/gdb.cp/static-typedef-print.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/static-typedef-print.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2018-2020 Free Software Foundation, Inc. + Copyright 2018-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/static-typedef-print.exp gdb-10.2/gdb/testsuite/gdb.cp/static-typedef-print.exp --- gdb-9.1/gdb/testsuite/gdb.cp/static-typedef-print.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/static-typedef-print.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2018-2020 Free Software Foundation, Inc. +# Copyright 2018-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/step-and-next-inline.cc gdb-10.2/gdb/testsuite/gdb.cp/step-and-next-inline.cc --- gdb-9.1/gdb/testsuite/gdb.cp/step-and-next-inline.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/step-and-next-inline.cc 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,66 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2019-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifdef USE_NEXT_INLINE_H + +#include "step-and-next-inline.h" + +#else /* USE_NEXT_INLINE_H */ + +/* The code below must remain identical to the code in + step-and-next-inline.h. */ + +#include <stdlib.h> + +struct tree +{ + volatile int x; + volatile int z; +}; + +#define TREE_TYPE(NODE) (*tree_check (NODE, 0)) + +inline tree * +tree_check (tree *t, int i) +{ + if (t->x != i) + abort(); + tree *x = t; + return x; +} + +#endif /* USE_NEXT_INLINE_H */ + +int __attribute__((noinline, noclone)) +get_alias_set (tree *t) +{ + if (t != NULL + && TREE_TYPE (t).z != 1 + && TREE_TYPE (t).z != 2 + && TREE_TYPE (t).z != 3) + return 0; + return 1; +} + +tree xx; + +int +main() +{ + get_alias_set (&xx); + return 0; +} diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/step-and-next-inline.exp gdb-10.2/gdb/testsuite/gdb.cp/step-and-next-inline.exp --- gdb-9.1/gdb/testsuite/gdb.cp/step-and-next-inline.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/step-and-next-inline.exp 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,130 @@ +# Copyright 2019-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +standard_testfile .cc + +if { ![supports_statement_frontiers] } { + return -1 +} + +# Compile the test source with USE_NEXT_INLINE_H defined (when +# use_header is true), or not defined. +proc do_test { use_header } { + global srcfile testfile + + if { $use_header } { + # This test will not pass due to poor debug information + # generated by GCC (at least upto 10.x). See + # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94474 + return + } + + set options {c++ debug nowarnings optimize=-O2\ -gstatement-frontiers} + if { $use_header } { + lappend options additional_flags=-DUSE_NEXT_INLINE_H + set executable "$testfile-with-header" + set hdrfile "step-and-next-inline.h" + set prefix "use_header" + } else { + set executable "$testfile-no-header" + set hdrfile "$srcfile" + set prefix "no_header" + } + + if { [prepare_for_testing "failed to prepare" $executable \ + $srcfile $options] } { + return -1 + } + + with_test_prefix $prefix { + + if ![runto_main] { + fail "can't run to main" + return + } + + gdb_test "bt" "\\s*\\#0\\s+main.*" "in main" + gdb_test "step" ".*" "step into get_alias_set" + gdb_test "bt" "\\s*\\#0\\s+get_alias_set\[^\r\]*${srcfile}:.*" \ + "not in inline 1" + # It's possible that this first failure (when not using a header + # file) is GCC's fault, though the remaining failures would best + # be fixed by adding location views support (though it could be + # that some easier heuristic could be figured out). Still, it is + # not certain that the first failure wouldn't also be fixed by + # having location view support, so for now it is tagged as such. + if {!$use_header} { setup_kfail "*-*-*" symtab/25507 } + gdb_test "next" ".*TREE_TYPE.*" "next step 1" + gdb_test "bt" "\\s*\\#0\\s+get_alias_set\[^\r\]*${srcfile}:.*" \ + "not in inline 2" + gdb_test "next" ".*TREE_TYPE.*" "next step 2" + gdb_test "bt" "\\s*\\#0\\s+get_alias_set\[^\r\]*${srcfile}:.*" \ + "not in inline 3" + if {!$use_header} { setup_kfail "*-*-*" symtab/25507 } + gdb_test "next" ".*TREE_TYPE.*" "next step 3" + gdb_test "bt" "\\s*\\#0\\s+get_alias_set\[^\r\]*${srcfile}:.*" \ + "not in inline 4" + if {!$use_header} { setup_kfail "*-*-*" symtab/25507 } + gdb_test "next" "return 0.*" "next step 4" + gdb_test "bt" \ + "\\s*\\#0\\s+(main|get_alias_set)\[^\r\]*${srcfile}:.*" \ + "not in inline 5" + + if {!$use_header} { + # With the debug from GCC 10.x (and earlier) GDB is currently + # unable to successfully complete the following tests when we + # are not using a header file. + kfail symtab/25507 "stepping tests" + return + } + + clean_restart ${executable} + + if ![runto_main] { + fail "can't run to main pass 2" + return + } + + gdb_test "bt" "\\s*\\#0\\s+main.*" "in main pass 2" + gdb_test "step" ".*" "step into get_alias_set pass 2" + gdb_test "bt" "\\s*\\#0\\s+get_alias_set\[^\r\]*${srcfile}:.*" \ + "in get_alias_set pass 2" + gdb_test "step" ".*TREE_TYPE.*" "step 1" + gdb_test "bt" "\\s*\\#0\\s+get_alias_set\[^\r\]*${srcfile}:.*" \ + "not in inline 1 pass 2" + gdb_test "step" ".*if \\(t->x != i\\).*" "step 2" + gdb_test "bt" "\\s*\\#0\\s+\[^\r\]*tree_check\[^\r\]*${hdrfile}:.*" \ + "in inline 1 pass 2" + gdb_test "step" ".*TREE_TYPE.*" "step 3" + gdb_test "bt" "\\s*\\#0\\s+get_alias_set\[^\r\]*${srcfile}:.*" \ + "not in inline 2 pass 2" + gdb_test "step" ".*if \\(t->x != i\\).*" "step 4" + gdb_test "bt" "\\s*\\#0\\s+\[^\r\]*tree_check\[^\r\]*${hdrfile}:.*" \ + "in inline 2 pass 2" + gdb_test "step" ".*TREE_TYPE.*" "step 5" + gdb_test "bt" "\\s*\\#0\\s+get_alias_set\[^\r\]*${srcfile}:.*" \ + "not in inline 3 pass 2" + gdb_test "step" ".*if \\(t->x != i\\).*" "step 6" + gdb_test "bt" "\\s*\\#0\\s+\[^\r\]*tree_check\[^\r\]*${hdrfile}:.*" \ + "in inline 3 pass 2" + gdb_test "step" "return 0.*" "step 7" + gdb_test "bt" \ + "\\s*\\#0\\s+(main|get_alias_set)\[^\r\]*${srcfile}:.*" \ + "not in inline 4 pass 2" + } +} + +do_test 0 +do_test 1 diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/step-and-next-inline.h gdb-10.2/gdb/testsuite/gdb.cp/step-and-next-inline.h --- gdb-9.1/gdb/testsuite/gdb.cp/step-and-next-inline.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/step-and-next-inline.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,38 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2019-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +/* The code below must remain identical to the block of code in + step-and-next-inline.cc. */ + +#include <stdlib.h> + +struct tree +{ + volatile int x; + volatile int z; +}; + +#define TREE_TYPE(NODE) (*tree_check (NODE, 0)) + +inline tree * +tree_check (tree *t, int i) +{ + if (t->x != i) + abort(); + tree *x = t; + return x; +} diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/stub-array-size2.cc gdb-10.2/gdb/testsuite/gdb.cp/stub-array-size2.cc --- gdb-9.1/gdb/testsuite/gdb.cp/stub-array-size2.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/stub-array-size2.cc 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,22 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "stub-array-size.h" + +A::~A() +{ +} diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/stub-array-size.cc gdb-10.2/gdb/testsuite/gdb.cp/stub-array-size.cc --- gdb-9.1/gdb/testsuite/gdb.cp/stub-array-size.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/stub-array-size.cc 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,25 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "stub-array-size.h" + +A a[10]; + +int main() +{ + return 0; +}; diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/stub-array-size.exp gdb-10.2/gdb/testsuite/gdb.cp/stub-array-size.exp --- gdb-9.1/gdb/testsuite/gdb.cp/stub-array-size.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/stub-array-size.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,30 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# This file is part of the gdb testsuite. + +# Test size of arrays of stubbed types (structures where the full definition +# is not immediately available). + +if {[skip_cplus_tests]} { continue } + +standard_testfile .cc stub-array-size2.cc + +if {[prepare_for_testing "failed to prepare" $testfile "$srcfile $srcfile2" \ + {c++ debug}]} { + return -1 +} + +gdb_test "print sizeof(a)/sizeof(a\[0\])" "10" diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/stub-array-size.h gdb-10.2/gdb/testsuite/gdb.cp/stub-array-size.h --- gdb-9.1/gdb/testsuite/gdb.cp/stub-array-size.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/stub-array-size.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,21 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +struct A +{ + virtual ~A(); +}; diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/subtypes-2.cc gdb-10.2/gdb/testsuite/gdb.cp/subtypes-2.cc --- gdb-9.1/gdb/testsuite/gdb.cp/subtypes-2.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/subtypes-2.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2018-2020 Free Software Foundation, Inc. + Copyright 2018-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/subtypes.cc gdb-10.2/gdb/testsuite/gdb.cp/subtypes.cc --- gdb-9.1/gdb/testsuite/gdb.cp/subtypes.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/subtypes.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2018-2020 Free Software Foundation, Inc. + Copyright 2018-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/subtypes.exp gdb-10.2/gdb/testsuite/gdb.cp/subtypes.exp --- gdb-9.1/gdb/testsuite/gdb.cp/subtypes.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/subtypes.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2018-2020 Free Software Foundation, Inc. +# Copyright 2018-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/subtypes.h gdb-10.2/gdb/testsuite/gdb.cp/subtypes.h --- gdb-9.1/gdb/testsuite/gdb.cp/subtypes.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/subtypes.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2018-2020 Free Software Foundation, Inc. + Copyright 2018-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/temargs.cc gdb-10.2/gdb/testsuite/gdb.cp/temargs.cc --- gdb-9.1/gdb/testsuite/gdb.cp/temargs.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/temargs.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Template argument tests. - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/temargs.exp gdb-10.2/gdb/testsuite/gdb.cp/temargs.exp --- gdb-9.1/gdb/testsuite/gdb.cp/temargs.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/temargs.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ # temargs.exp - Template argument tests # -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/templates.exp gdb-10.2/gdb/testsuite/gdb.cp/templates.exp --- gdb-9.1/gdb/testsuite/gdb.cp/templates.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/templates.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1992-2020 Free Software Foundation, Inc. +# Copyright 1992-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/try_catch.cc gdb-10.2/gdb/testsuite/gdb.cp/try_catch.cc --- gdb-9.1/gdb/testsuite/gdb.cp/try_catch.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/try_catch.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This test script is part of GDB, the GNU debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -18,6 +18,7 @@ #include <exception> #include <stdexcept> #include <string> +#include <string.h> enum region { oriental, egyptian, greek, etruscan, roman }; @@ -129,8 +130,8 @@ } catch (exception& obj) { - if (obj.what() != "gdb.1") // marker 3-catch + if (strcmp (obj.what(), "gdb.1") != 0) // marker 3-catch test &= false; } - return 0; + return 0; // marker test-complete } diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/try_catch.exp gdb-10.2/gdb/testsuite/gdb.cp/try_catch.exp --- gdb-9.1/gdb/testsuite/gdb.cp/try_catch.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/try_catch.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2002-2020 Free Software Foundation, Inc. +# Copyright 2002-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -63,5 +63,9 @@ gdb_breakpoint [gdb_get_line_number "marker 3-catch"] gdb_continue_to_breakpoint "marker 3-catch" +gdb_breakpoint [gdb_get_line_number "marker test-complete"] +gdb_continue_to_breakpoint "marker test-complete" +gdb_test "p test" "= true" + gdb_exit return 0 diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/typedef-base.cc gdb-10.2/gdb/testsuite/gdb.cp/typedef-base.cc --- gdb-9.1/gdb/testsuite/gdb.cp/typedef-base.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/typedef-base.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2018-2020 Free Software Foundation, Inc. + Copyright 2018-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/typedef-base.exp gdb-10.2/gdb/testsuite/gdb.cp/typedef-base.exp --- gdb-9.1/gdb/testsuite/gdb.cp/typedef-base.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/typedef-base.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2018-2020 Free Software Foundation, Inc. +# Copyright 2018-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/typedef-operator.cc gdb-10.2/gdb/testsuite/gdb.cp/typedef-operator.cc --- gdb-9.1/gdb/testsuite/gdb.cp/typedef-operator.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/typedef-operator.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This test case is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/typedef-operator.exp gdb-10.2/gdb/testsuite/gdb.cp/typedef-operator.exp --- gdb-9.1/gdb/testsuite/gdb.cp/typedef-operator.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/typedef-operator.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/typed-enum.cc gdb-10.2/gdb/testsuite/gdb.cp/typed-enum.cc --- gdb-9.1/gdb/testsuite/gdb.cp/typed-enum.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/typed-enum.cc 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,35 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +typedef unsigned char byte; + +enum byte_enum : byte +{ + byte_val = 128 +}; + +enum uchar_enum : unsigned char +{ + uchar_val = 128 +}; + +int main() +{ + int v1 = byte_val; + int v2 = uchar_val; + return v1 == v2; +} diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/typed-enum.exp gdb-10.2/gdb/testsuite/gdb.cp/typed-enum.exp --- gdb-9.1/gdb/testsuite/gdb.cp/typed-enum.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/typed-enum.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,31 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +# Check if unsigned typedef are handled correctly with typed enums. + +if { [skip_cplus_tests] } { continue } + +standard_testfile .cc + +if [get_compiler_info "c++"] { + return -1 +} + +if {[prepare_for_testing "failed to prepare" $testfile $srcfile {debug c++}]} { + return -1 +} + +gdb_test "print (int)byte_val" "= 128" +gdb_test "print (int)uchar_val" "= 128" diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/typeid.cc gdb-10.2/gdb/testsuite/gdb.cp/typeid.cc --- gdb-9.1/gdb/testsuite/gdb.cp/typeid.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/typeid.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/typeid.exp gdb-10.2/gdb/testsuite/gdb.cp/typeid.exp --- gdb-9.1/gdb/testsuite/gdb.cp/typeid.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/typeid.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/userdef.cc gdb-10.2/gdb/testsuite/gdb.cp/userdef.cc --- gdb-9.1/gdb/testsuite/gdb.cp/userdef.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/userdef.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This test script is part of GDB, the GNU debugger. - Copyright 1999-2020 Free Software Foundation, Inc. + Copyright 1999-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/userdef.exp gdb-10.2/gdb/testsuite/gdb.cp/userdef.exp --- gdb-9.1/gdb/testsuite/gdb.cp/userdef.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/userdef.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ # Tests of overloaded operators resolution. -# Copyright 1998-2020 Free Software Foundation, Inc. +# Copyright 1998-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/using-crash.cc gdb-10.2/gdb/testsuite/gdb.cp/using-crash.cc --- gdb-9.1/gdb/testsuite/gdb.cp/using-crash.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/using-crash.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2012-2020 Free Software Foundation, Inc. +/* Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/using-crash.exp gdb-10.2/gdb/testsuite/gdb.cp/using-crash.exp --- gdb-9.1/gdb/testsuite/gdb.cp/using-crash.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/using-crash.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/var-tag-2.cc gdb-10.2/gdb/testsuite/gdb.cp/var-tag-2.cc --- gdb-9.1/gdb/testsuite/gdb.cp/var-tag-2.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/var-tag-2.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/var-tag-3.cc gdb-10.2/gdb/testsuite/gdb.cp/var-tag-3.cc --- gdb-9.1/gdb/testsuite/gdb.cp/var-tag-3.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/var-tag-3.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/var-tag-4.cc gdb-10.2/gdb/testsuite/gdb.cp/var-tag-4.cc --- gdb-9.1/gdb/testsuite/gdb.cp/var-tag-4.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/var-tag-4.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/var-tag.cc gdb-10.2/gdb/testsuite/gdb.cp/var-tag.cc --- gdb-9.1/gdb/testsuite/gdb.cp/var-tag.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/var-tag.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/var-tag.exp gdb-10.2/gdb/testsuite/gdb.cp/var-tag.exp --- gdb-9.1/gdb/testsuite/gdb.cp/var-tag.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/var-tag.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/virtbase2.cc gdb-10.2/gdb/testsuite/gdb.cp/virtbase2.cc --- gdb-9.1/gdb/testsuite/gdb.cp/virtbase2.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/virtbase2.cc 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2018-2020 Free Software Foundation, Inc. + Copyright 2018-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/virtbase2.exp gdb-10.2/gdb/testsuite/gdb.cp/virtbase2.exp --- gdb-9.1/gdb/testsuite/gdb.cp/virtbase2.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/virtbase2.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2018-2020 Free Software Foundation, Inc. +# Copyright 2018-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -63,23 +63,29 @@ } proc test_variables_in_base { scopes } { - foreach scope [make_scope_list $scopes] { - gdb_test "print ${scope}i" " = 55" - gdb_test "print ${scope}d" " = 6.25" - gdb_test "print ${scope}x" " = 22" - } + with_test_prefix "$scopes" { + foreach scope [make_scope_list $scopes] { + gdb_test "print ${scope}i" " = 55" + gdb_test "print ${scope}d" " = 6.25" + gdb_test "print ${scope}x" " = 22" + } + } } proc test_variables_in_superbase { scopes } { - foreach scope [make_scope_list $scopes] { - gdb_test "print ${scope}x" " = 22" - } + with_test_prefix "$scopes" { + foreach scope [make_scope_list $scopes] { + gdb_test "print ${scope}x" " = 22" + } + } } proc test_variables_in_super { scopes } { - foreach scope [make_scope_list $scopes] { - gdb_test "print ${scope}w" " = 17" - } + with_test_prefix "$scopes" { + foreach scope [make_scope_list $scopes] { + gdb_test "print ${scope}w" " = 17" + } + } } with_test_prefix "derived::func_d" { diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/virtbase.exp gdb-10.2/gdb/testsuite/gdb.cp/virtbase.exp --- gdb-9.1/gdb/testsuite/gdb.cp/virtbase.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/virtbase.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/virtfunc2.cc gdb-10.2/gdb/testsuite/gdb.cp/virtfunc2.cc --- gdb-9.1/gdb/testsuite/gdb.cp/virtfunc2.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/virtfunc2.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This test script is part of GDB, the GNU debugger. - Copyright 2009-2020 Free Software Foundation, Inc. + Copyright 2009-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/virtfunc2.exp gdb-10.2/gdb/testsuite/gdb.cp/virtfunc2.exp --- gdb-9.1/gdb/testsuite/gdb.cp/virtfunc2.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/virtfunc2.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2009-2020 Free Software Foundation, Inc. +# Copyright 2009-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/virtfunc.cc gdb-10.2/gdb/testsuite/gdb.cp/virtfunc.cc --- gdb-9.1/gdb/testsuite/gdb.cp/virtfunc.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/virtfunc.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This test script is part of GDB, the GNU debugger. - Copyright 1993-2020 Free Software Foundation, Inc. + Copyright 1993-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/virtfunc.exp gdb-10.2/gdb/testsuite/gdb.cp/virtfunc.exp --- gdb-9.1/gdb/testsuite/gdb.cp/virtfunc.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/virtfunc.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1992-2020 Free Software Foundation, Inc. +# Copyright 1992-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/vla-cxx.cc gdb-10.2/gdb/testsuite/gdb.cp/vla-cxx.cc --- gdb-9.1/gdb/testsuite/gdb.cp/vla-cxx.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/vla-cxx.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/vla-cxx.exp gdb-10.2/gdb/testsuite/gdb.cp/vla-cxx.exp --- gdb-9.1/gdb/testsuite/gdb.cp/vla-cxx.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/vla-cxx.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/watch-cp.cc gdb-10.2/gdb/testsuite/gdb.cp/watch-cp.cc --- gdb-9.1/gdb/testsuite/gdb.cp/watch-cp.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/watch-cp.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2018-2020 Free Software Foundation, Inc. +/* Copyright 2018-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/watch-cp.exp gdb-10.2/gdb/testsuite/gdb.cp/watch-cp.exp --- gdb-9.1/gdb/testsuite/gdb.cp/watch-cp.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/watch-cp.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2018-2020 Free Software Foundation, Inc. +# Copyright 2018-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/wide_char_types.c gdb-10.2/gdb/testsuite/gdb.cp/wide_char_types.c --- gdb-9.1/gdb/testsuite/gdb.cp/wide_char_types.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/wide_char_types.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2017-2020 Free Software Foundation, Inc. + Copyright 2017-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.cp/wide_char_types.exp gdb-10.2/gdb/testsuite/gdb.cp/wide_char_types.exp --- gdb-9.1/gdb/testsuite/gdb.cp/wide_char_types.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.cp/wide_char_types.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2017-2020 Free Software Foundation, Inc. +# Copyright 2017-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.debuginfod/fetch_src_and_symbols.exp gdb-10.2/gdb/testsuite/gdb.debuginfod/fetch_src_and_symbols.exp --- gdb-9.1/gdb/testsuite/gdb.debuginfod/fetch_src_and_symbols.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.debuginfod/fetch_src_and_symbols.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,246 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Test debuginfod functionality + +standard_testfile main.c + +load_lib dwarf.exp + +if { [which debuginfod] == 0 } { + untested "cannot find debuginfod" + return -1 +} + +if { [which curl] == 0 } { + untested "cannot find curl" + return -1 +} + +# Skip testing if gdb was not configured with debuginfod +if { [string first "with-debuginfod" \ + [eval exec $GDB $INTERNAL_GDBFLAGS --configuration]] == -1 } { + untested "gdb not configured with debuginfod" + return -1 +} + +set cache [standard_output_file ".client_cache"] +set db [standard_output_file ".debuginfod.db"] + +# Delete any preexisting test files +file delete -force $cache +file delete -force $db + +set sourcetmp [standard_output_file tmp-${srcfile}] +set outputdir [standard_output_file {}] + +# Make a copy source file that we can move around +if { [catch {file copy -force ${srcdir}/${subdir}/${srcfile} \ + [standard_output_file ${sourcetmp}]}] != 0 } { + error "create temporary file" + return -1 +} + +if { [gdb_compile "$sourcetmp" "$binfile" executable {debug}] != "" } { + fail "compile" + return -1 +} + +# Write some assembly that just has a .gnu_debugaltlink section. +# Copied from testsuite/gdb.dwarf2/dwzbuildid.exp. +proc write_just_debugaltlink {filename dwzname buildid} { + set asm_file [standard_output_file $filename] + + Dwarf::assemble $asm_file { + upvar dwzname dwzname + upvar buildid buildid + + gnu_debugaltlink $dwzname $buildid + + # Only the DWARF reader checks .gnu_debugaltlink, so make sure + # there is a bit of DWARF in here. + cu {} { + compile_unit {{language @DW_LANG_C}} { + } + } + } +} + +# Write some DWARF that also sets the buildid. +# Copied from testsuite/gdb.dwarf2/dwzbuildid.exp. +proc write_dwarf_file {filename buildid {value 99}} { + set asm_file [standard_output_file $filename] + + Dwarf::assemble $asm_file { + declare_labels int_label int_label2 + + upvar buildid buildid + upvar value value + + build_id $buildid + + cu {} { + compile_unit {{language @DW_LANG_C}} { + int_label2: base_type { + {name int} + {byte_size 4 sdata} + {encoding @DW_ATE_signed} + } + + constant { + {name the_int} + {type :$int_label2} + {const_value $value data1} + } + } + } + } +} + +proc no_url { } { + global binfile outputdir debugdir + + setenv DEBUGINFOD_URLS "" + + # Test that gdb cannot find source without debuginfod + clean_restart $binfile + gdb_test_no_output "set substitute-path $outputdir /dev/null" \ + "set substitute-path" + gdb_test "list" ".*No such file or directory.*" + + # Strip symbols into separate file and move it so gdb cannot find it \ + without debuginfod + if { [gdb_gnu_strip_debug $binfile ""] != 0 } { + fail "strip debuginfo" + return -1 + } + + set debugdir [standard_output_file "debug"] + set debuginfo [standard_output_file "fetch_src_and_symbols.debug"] + + file mkdir $debugdir + file rename -force $debuginfo $debugdir + + # Test that gdb cannot find symbols without debuginfod + clean_restart $binfile + gdb_test "file" ".*No symbol file.*" + + set buildid "01234567890abcdef0123456" + + write_just_debugaltlink ${binfile}_has_altlink.S ${binfile}_dwz.o \ + $buildid + write_dwarf_file ${binfile}_dwz.S $buildid + + if {[gdb_compile ${binfile}_has_altlink.S ${binfile}_alt.o object \ + nodebug] != ""} { + fail "compile main with altlink" + return -1 + } + + if {[gdb_compile ${binfile}_dwz.S ${binfile}_dwz.o object \ + nodebug] != ""} { + fail "compile altlink" + return -1 + } + + file rename -force ${binfile}_dwz.o $debugdir + + # Test that gdb cannot find dwz without debuginfod. + clean_restart + gdb_test "file ${binfile}_alt.o" \ + ".*could not find '.gnu_debugaltlink'.*" \ + "file [file tail ${binfile}_alt.o]" +} + +proc local_url { } { + global binfile outputdir db debugdir + + # Find an unused port + set port 7999 + set found 0 + while { ! $found } { + incr port + if { $port == 65536 } { + fail "no available ports" + return -1 + } + + spawn debuginfod -vvvv -d $db -p $port -F $debugdir + expect { + "started http server on IPv4 IPv6 port=$port" { set found 1 } + "failed to bind to port" { kill_wait_spawned_process $spawn_id } + timeout { + fail "find port timeout" + return -1 + } + } + } + + set metrics [list "ready 1" \ + "thread_work_total{role=\"traverse\"} 1" \ + "thread_work_pending{role=\"scan\"} 0" \ + "thread_busy{role=\"scan\"} 0"] + + # Check server metrics to confirm init has completed. + foreach m $metrics { + set timelim 20 + while { $timelim != 0 } { + sleep 0.5 + catch {exec curl -s http://127.0.0.1:$port/metrics} got + + if { [regexp $m $got] } { + break + } + + incr timelim -1 + } + + if { $timelim == 0 } { + fail "server init timeout" + return -1 + } + } + + # Point the client to the server + setenv DEBUGINFOD_URLS http://127.0.0.1:$port + + # gdb should now find the symbol and source files + clean_restart $binfile + gdb_test_no_output "set substitute-path $outputdir /dev/null" \ + "set substitute-path" + gdb_test "br main" "Breakpoint 1 at.*file.*" + gdb_test "l" ".*This program is distributed in the hope.*" + + # gdb should now find the debugaltlink file + clean_restart + gdb_test "file ${binfile}_alt.o" \ + ".*Reading symbols from ${binfile}_alt.o\.\.\.*" \ + "file [file tail ${binfile}_alt.o]" +} + +set envlist \ + [list \ + env(DEBUGINFOD_URLS) \ + env(DEBUGINFOD_TIMEOUT) \ + env(DEBUGINFOD_CACHE_PATH)] + +save_vars $envlist { + setenv DEBUGINFOD_TIMEOUT 30 + setenv DEBUGINFOD_CACHE_PATH $cache + + with_test_prefix no_url no_url + + with_test_prefix local_url local_url +} diff -Nru gdb-9.1/gdb/testsuite/gdb.debuginfod/main.c gdb-10.2/gdb/testsuite/gdb.debuginfod/main.c --- gdb-9.1/gdb/testsuite/gdb.debuginfod/main.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.debuginfod/main.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,25 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +/* Dummy main function. */ + +int +main() +{ + asm ("main_label: .globl main_label"); + return 0; +} diff -Nru gdb-9.1/gdb/testsuite/gdb.disasm/am33.exp gdb-10.2/gdb/testsuite/gdb.disasm/am33.exp --- gdb-9.1/gdb/testsuite/gdb.disasm/am33.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.disasm/am33.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ -# Copyright 1997-2020 Free Software Foundation, Inc. +# Copyright 1997-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.disasm/disassembler-options.exp gdb-10.2/gdb/testsuite/gdb.disasm/disassembler-options.exp --- gdb-9.1/gdb/testsuite/gdb.disasm/disassembler-options.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.disasm/disassembler-options.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2017-2020 Free Software Foundation, Inc. +# Copyright (C) 2017-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.disasm/h8300s.exp gdb-10.2/gdb/testsuite/gdb.disasm/h8300s.exp --- gdb-9.1/gdb/testsuite/gdb.disasm/h8300s.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.disasm/h8300s.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2000-2020 Free Software Foundation, Inc. +# Copyright (C) 2000-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.disasm/hppa.exp gdb-10.2/gdb/testsuite/gdb.disasm/hppa.exp --- gdb-9.1/gdb/testsuite/gdb.disasm/hppa.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.disasm/hppa.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ -# Copyright 1992-2020 Free Software Foundation, Inc. +# Copyright 1992-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.disasm/mn10300.exp gdb-10.2/gdb/testsuite/gdb.disasm/mn10300.exp --- gdb-9.1/gdb/testsuite/gdb.disasm/mn10300.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.disasm/mn10300.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ -# Copyright 1997-2020 Free Software Foundation, Inc. +# Copyright 1997-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.disasm/sh3.exp gdb-10.2/gdb/testsuite/gdb.disasm/sh3.exp --- gdb-9.1/gdb/testsuite/gdb.disasm/sh3.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.disasm/sh3.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 1992-2020 Free Software Foundation, Inc. +# Copyright (C) 1992-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.disasm/t01_mov.exp gdb-10.2/gdb/testsuite/gdb.disasm/t01_mov.exp --- gdb-9.1/gdb/testsuite/gdb.disasm/t01_mov.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.disasm/t01_mov.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2003-2020 Free Software Foundation, Inc. +# Copyright (C) 2003-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.disasm/t02_mova.exp gdb-10.2/gdb/testsuite/gdb.disasm/t02_mova.exp --- gdb-9.1/gdb/testsuite/gdb.disasm/t02_mova.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.disasm/t02_mova.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2003-2020 Free Software Foundation, Inc. +# Copyright (C) 2003-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.disasm/t03_add.exp gdb-10.2/gdb/testsuite/gdb.disasm/t03_add.exp --- gdb-9.1/gdb/testsuite/gdb.disasm/t03_add.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.disasm/t03_add.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2003-2020 Free Software Foundation, Inc. +# Copyright (C) 2003-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.disasm/t04_sub.exp gdb-10.2/gdb/testsuite/gdb.disasm/t04_sub.exp --- gdb-9.1/gdb/testsuite/gdb.disasm/t04_sub.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.disasm/t04_sub.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2003-2020 Free Software Foundation, Inc. +# Copyright (C) 2003-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.disasm/t05_cmp.exp gdb-10.2/gdb/testsuite/gdb.disasm/t05_cmp.exp --- gdb-9.1/gdb/testsuite/gdb.disasm/t05_cmp.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.disasm/t05_cmp.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2003-2020 Free Software Foundation, Inc. +# Copyright (C) 2003-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.disasm/t06_ari2.exp gdb-10.2/gdb/testsuite/gdb.disasm/t06_ari2.exp --- gdb-9.1/gdb/testsuite/gdb.disasm/t06_ari2.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.disasm/t06_ari2.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2003-2020 Free Software Foundation, Inc. +# Copyright (C) 2003-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.disasm/t07_ari3.exp gdb-10.2/gdb/testsuite/gdb.disasm/t07_ari3.exp --- gdb-9.1/gdb/testsuite/gdb.disasm/t07_ari3.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.disasm/t07_ari3.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2003-2020 Free Software Foundation, Inc. +# Copyright (C) 2003-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.disasm/t08_or.exp gdb-10.2/gdb/testsuite/gdb.disasm/t08_or.exp --- gdb-9.1/gdb/testsuite/gdb.disasm/t08_or.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.disasm/t08_or.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2003-2020 Free Software Foundation, Inc. +# Copyright (C) 2003-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.disasm/t09_xor.exp gdb-10.2/gdb/testsuite/gdb.disasm/t09_xor.exp --- gdb-9.1/gdb/testsuite/gdb.disasm/t09_xor.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.disasm/t09_xor.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2003-2020 Free Software Foundation, Inc. +# Copyright (C) 2003-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.disasm/t10_and.exp gdb-10.2/gdb/testsuite/gdb.disasm/t10_and.exp --- gdb-9.1/gdb/testsuite/gdb.disasm/t10_and.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.disasm/t10_and.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2003-2020 Free Software Foundation, Inc. +# Copyright (C) 2003-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.disasm/t11_logs.exp gdb-10.2/gdb/testsuite/gdb.disasm/t11_logs.exp --- gdb-9.1/gdb/testsuite/gdb.disasm/t11_logs.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.disasm/t11_logs.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2003-2020 Free Software Foundation, Inc. +# Copyright (C) 2003-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.disasm/t12_bit.exp gdb-10.2/gdb/testsuite/gdb.disasm/t12_bit.exp --- gdb-9.1/gdb/testsuite/gdb.disasm/t12_bit.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.disasm/t12_bit.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2003-2020 Free Software Foundation, Inc. +# Copyright (C) 2003-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.disasm/t13_otr.exp gdb-10.2/gdb/testsuite/gdb.disasm/t13_otr.exp --- gdb-9.1/gdb/testsuite/gdb.disasm/t13_otr.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.disasm/t13_otr.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2003-2020 Free Software Foundation, Inc. +# Copyright (C) 2003-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dlang/circular.c gdb-10.2/gdb/testsuite/gdb.dlang/circular.c --- gdb-9.1/gdb/testsuite/gdb.dlang/circular.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dlang/circular.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2016-2020 Free Software Foundation, Inc. +/* Copyright 2016-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -13,17 +13,14 @@ You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ -asm ("circular1_found_start: .globl circular1_found_start"); - /* DWARF will describe this function as being inside a D module. */ void found (void) { + asm ("found_label: .globl found_label"); } -asm ("circular1_found_end: .globl circular1_found_end"); - int main (void) { diff -Nru gdb-9.1/gdb/testsuite/gdb.dlang/circular.exp gdb-10.2/gdb/testsuite/gdb.dlang/circular.exp --- gdb-9.1/gdb/testsuite/gdb.dlang/circular.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dlang/circular.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2016-2020 Free Software Foundation, Inc. +# Copyright (C) 2016-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -37,8 +37,6 @@ declare_labels circular1_label circular2_label circular3_label declare_labels circular4_label circular5_label - extern circular1_found_start circular1_found_end - circular1_label: module { {name circular1} } { @@ -56,10 +54,8 @@ } subprogram { - {name found} {external 1 flag_present} - {low_pc circular1_found_start addr} - {high_pc circular1_found_end addr} + {MACRO_AT_func {found}} } } diff -Nru gdb-9.1/gdb/testsuite/gdb.dlang/debug-expr.exp gdb-10.2/gdb/testsuite/gdb.dlang/debug-expr.exp --- gdb-9.1/gdb/testsuite/gdb.dlang/debug-expr.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dlang/debug-expr.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2017-2020 Free Software Foundation, Inc. +# Copyright 2017-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dlang/demangle.exp gdb-10.2/gdb/testsuite/gdb.dlang/demangle.exp --- gdb-9.1/gdb/testsuite/gdb.dlang/demangle.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dlang/demangle.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2014-2020 Free Software Foundation, Inc. +# Copyright (C) 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -93,8 +93,6 @@ test_demangling "_D8demangle4testFNhG2dZv" "demangle.test(__vector(double\[2\]))" test_demangling "_D8demangle4testFNhG4dZv" "demangle.test(__vector(double\[4\]))" - test_demangling "_D8demangle4testFI5identZv" "demangle.test(ident)" - test_demangling "_D8demangle4testFI5ident4testZv" "demangle.test(ident.test)" test_demangling "_D8demangle4testFC5classZv" "demangle.test(class)" test_demangling "_D8demangle4testFC5class4testZv" "demangle.test(class.test)" test_demangling "_D8demangle4testFS6structZv" "demangle.test(struct)" @@ -104,6 +102,8 @@ test_demangling "_D8demangle4testFT7typedefZv" "demangle.test(typedef)" test_demangling "_D8demangle4testFT7typedef4testZv" "demangle.test(typedef.test)" + test_demangling "_D8demangle4testFIaZv" "demangle.test(in char)" + test_demangling "_D8demangle4testFIKaZv" "demangle.test(in ref char)" test_demangling "_D8demangle4testFJaZv" "demangle.test(out char)" test_demangling "_D8demangle4testFKaZv" "demangle.test(ref char)" test_demangling "_D8demangle4testFLaZv" "demangle.test(lazy char)" diff -Nru gdb-9.1/gdb/testsuite/gdb.dlang/expression.exp gdb-10.2/gdb/testsuite/gdb.dlang/expression.exp --- gdb-9.1/gdb/testsuite/gdb.dlang/expression.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dlang/expression.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2014-2020 Free Software Foundation, Inc. +# Copyright (C) 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dlang/primitive-types.exp gdb-10.2/gdb/testsuite/gdb.dlang/primitive-types.exp --- gdb-9.1/gdb/testsuite/gdb.dlang/primitive-types.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dlang/primitive-types.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2014-2020 Free Software Foundation, Inc. +# Copyright (C) 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dlang/properties.exp gdb-10.2/gdb/testsuite/gdb.dlang/properties.exp --- gdb-9.1/gdb/testsuite/gdb.dlang/properties.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dlang/properties.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020 Free Software Foundation, Inc. +# Copyright (C) 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dlang/watch-loc.c gdb-10.2/gdb/testsuite/gdb.dlang/watch-loc.c --- gdb-9.1/gdb/testsuite/gdb.dlang/watch-loc.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dlang/watch-loc.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2017-2020 Free Software Foundation, Inc. +/* Copyright 2017-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -28,6 +28,8 @@ return 0; } +asm ("_Dmain_end: .globl _Dmain_end"); + int main (void) { @@ -51,7 +53,7 @@ " .2byte 0 \n" // Pad to 16 byte boundary " .2byte 0 \n" " .4byte _Dmain \n" // Address -" .4byte 0x1000 \n" // Length +" .4byte _Dmain_end - _Dmain \n" // Length " .4byte 0 \n" " .4byte 0 \n" ".Laranges_end: \n" diff -Nru gdb-9.1/gdb/testsuite/gdb.dlang/watch-loc.exp gdb-10.2/gdb/testsuite/gdb.dlang/watch-loc.exp --- gdb-9.1/gdb/testsuite/gdb.dlang/watch-loc.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dlang/watch-loc.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2017-2020 Free Software Foundation, Inc. +# Copyright (C) 2017-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -30,8 +30,6 @@ # Make some DWARF for the test. set asm_file [standard_output_file $srcfile2] Dwarf::assemble $asm_file { - global srcdir subdir srcfile - cu {} { compile_unit { {language @DW_LANG_D} @@ -56,7 +54,7 @@ } subprogram { - {MACRO_AT_func { "_Dmain" "${srcdir}/${subdir}/${srcfile}" }} + {MACRO_AT_func { "_Dmain" }} {external 1 flag_present} } } diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/ada-linkage-name.c gdb-10.2/gdb/testsuite/gdb.dwarf2/ada-linkage-name.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/ada-linkage-name.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/ada-linkage-name.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2019-2020 Free Software Foundation, Inc. + Copyright 2019-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/ada-linkage-name.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/ada-linkage-name.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/ada-linkage-name.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/ada-linkage-name.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -31,12 +31,6 @@ Dwarf::assemble $asm_file { global srcdir subdir srcfile - lassign [function_range first ${srcdir}/${subdir}/${srcfile}] \ - first_start first_length - - lassign [function_range second ${srcdir}/${subdir}/${srcfile}] \ - second_start second_length - cu {} { DW_TAG_compile_unit { {DW_AT_language @DW_LANG_Ada95} @@ -55,16 +49,14 @@ DW_TAG_subprogram { {name system__namefirst} {linkage_name __gnat_namefirst} - {low_pc $first_start addr} - {high_pc "$first_start + $first_length" addr} + {MACRO_AT_range {first}} {type :$b_l} } # Here the linkage name comes first and the name second. DW_TAG_subprogram { {linkage_name __gnat_namesecond} {name system__namesecond} - {low_pc $second_start addr} - {high_pc "$second_start + $second_length" addr} + {MACRO_AT_range {second}} {type :$b_l} } } diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/ada-valprint-error.c gdb-10.2/gdb/testsuite/gdb.dwarf2/ada-valprint-error.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/ada-valprint-error.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/ada-valprint-error.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2017-2020 Free Software Foundation, Inc. +/* Copyright 2017-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/ada-valprint-error.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/ada-valprint-error.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/ada-valprint-error.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/ada-valprint-error.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2017-2020 Free Software Foundation, Inc. +# Copyright 2017-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/arr-stride.c gdb-10.2/gdb/testsuite/gdb.dwarf2/arr-stride.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/arr-stride.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/arr-stride.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2014-2020 Free Software Foundation, Inc. +/* Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/arr-stride.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/arr-stride.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/arr-stride.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/arr-stride.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/arr-subrange.c gdb-10.2/gdb/testsuite/gdb.dwarf2/arr-subrange.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/arr-subrange.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/arr-subrange.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2014-2020 Free Software Foundation, Inc. +/* Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -16,5 +16,6 @@ int main (void) { + asm ("main_label: .globl main_label"); return 0; } diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/arr-subrange.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/arr-subrange.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/arr-subrange.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/arr-subrange.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -29,8 +29,7 @@ {DW_AT_language @DW_LANG_Ada95} {DW_AT_name foo.adb} {DW_AT_comp_dir /tmp} - {DW_AT_low_pc 0x1000 addr} - {DW_AT_high_pc 0x2000 addr} + {MACRO_AT_range {main}} } { declare_labels boolean_label typedef_label array_label enum_label diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/atomic.c gdb-10.2/gdb/testsuite/gdb.dwarf2/atomic.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/atomic.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/atomic.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2004-2020 Free Software Foundation, Inc. + Copyright 2004-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/atomic-type.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/atomic-type.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/atomic-type.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/atomic-type.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -25,12 +25,6 @@ set asm_file [standard_output_file $srcfile2] Dwarf::assemble $asm_file { - global srcdir subdir srcfile - - set f_result [function_range f ${srcdir}/${subdir}/${srcfile}] - set f_start [lindex $f_result 0] - set f_length [lindex $f_result 1] - cu {} { DW_TAG_compile_unit { {DW_AT_language @DW_LANG_C11} @@ -73,9 +67,7 @@ } DW_TAG_subprogram { - {name f} - {low_pc $f_start addr} - {high_pc "$f_start + $f_length" addr} + {MACRO_AT_func {f}} {type :$i_l} } { DW_TAG_formal_parameter { diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/bad-regnum.c gdb-10.2/gdb/testsuite/gdb.dwarf2/bad-regnum.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/bad-regnum.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/bad-regnum.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2015-2020 Free Software Foundation, Inc. +/* Copyright 2015-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/bad-regnum.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/bad-regnum.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/bad-regnum.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/bad-regnum.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/bitfield-parent-optimized-out.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/bitfield-parent-optimized-out.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/bitfield-parent-optimized-out.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/bitfield-parent-optimized-out.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2016-2020 Free Software Foundation, Inc. +# Copyright 2016-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -29,8 +29,6 @@ # Make some DWARF for the test. set asm_file [standard_output_file $srcfile2] Dwarf::assemble $asm_file { - global srcdir subdir srcfile - cu { version 3 addr_size 4 } { compile_unit {} { declare_labels struct_label var_label int_label @@ -59,7 +57,7 @@ } subprogram { - {MACRO_AT_func { main ${srcdir}/${subdir}/${srcfile} }} + {MACRO_AT_func { main }} {type :$int_label} {external 1 flag} } { diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/break-inline-psymtab-2.c gdb-10.2/gdb/testsuite/gdb.dwarf2/break-inline-psymtab-2.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/break-inline-psymtab-2.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/break-inline-psymtab-2.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,33 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +extern int foo (void); + +int a; + +static inline int __attribute__((always_inline)) +bar (void) +{ + a = 2; + return 0; +} + +int +foo (void) +{ + return bar (); +} diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/break-inline-psymtab.c gdb-10.2/gdb/testsuite/gdb.dwarf2/break-inline-psymtab.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/break-inline-psymtab.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/break-inline-psymtab.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,24 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +extern int foo (void); + +int +main (void) +{ + return foo (); +} diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/break-inline-psymtab.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/break-inline-psymtab.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/break-inline-psymtab.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/break-inline-psymtab.exp 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,35 @@ +# Copyright 2019-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +standard_testfile break-inline-psymtab.c break-inline-psymtab-2.c + +set sources [list $srcfile $srcfile2] +if { [prepare_for_testing "failed to prepare" ${testfile} $sources] } { + return -1 +} + +if ![runto_main] { + return -1 +} + +get_compiler_info +get_debug_format +if { [skip_inline_frame_tests] } { + return -1 +} + +# Set a break-point in inline function bar, in a CU for which the partial +# symtab has not been expanded. +gdb_breakpoint "bar" message diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/callframecfa.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/callframecfa.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/callframecfa.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/callframecfa.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2009-2020 Free Software Foundation, Inc. +# Copyright 2009-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/callframecfa.S gdb-10.2/gdb/testsuite/gdb.dwarf2/callframecfa.S --- gdb-9.1/gdb/testsuite/gdb.dwarf2/callframecfa.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/callframecfa.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* - Copyright 2009-2020 Free Software Foundation, Inc. + Copyright 2009-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/clang-debug-names-2.c gdb-10.2/gdb/testsuite/gdb.dwarf2/clang-debug-names-2.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/clang-debug-names-2.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/clang-debug-names-2.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,27 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +extern int foo (void); + +int +main (void) +{ + asm ("main_label: .globl main_label"); + int sum, a, b; + sum = a + b + foo (); + return sum; +} diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/clang-debug-names-2.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/clang-debug-names-2.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/clang-debug-names-2.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/clang-debug-names-2.exp 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,45 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +load_lib dwarf.exp + +# This test can only be run on targets which support DWARF-2 and use gas. +if {![dwarf2_support]} { + return 0 +} + +standard_testfile clang-debug-names-2.c clang-debug-names-debug-2.S \ + clang-debug-names-2-foo.c + +lassign \ + [function_range main \ + "${srcdir}/${subdir}/${srcfile} ${srcdir}/${subdir}/${srcfile3}"] \ + main_start main_length + +set asm_file [standard_output_file $srcfile2] +source $srcdir/$subdir/clang-debug-names.exp.tcl + +if { [build_executable_from_specs "failed to prepare" ${testfile} "" \ + $srcfile "nodebug" $asm_file "nodebug" $srcfile3 "debug"] } { + return -1 +} +clean_restart $binfile + +set cmd "ptype main" +set pass_re \ + [multi_line \ + $cmd \ + "type = int \\(\\)"] +gdb_test $cmd $pass_re diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/clang-debug-names-2-foo.c gdb-10.2/gdb/testsuite/gdb.dwarf2/clang-debug-names-2-foo.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/clang-debug-names-2-foo.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/clang-debug-names-2-foo.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,22 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +int +foo (void) +{ + return 3; +} diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/clang-debug-names.c gdb-10.2/gdb/testsuite/gdb.dwarf2/clang-debug-names.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/clang-debug-names.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/clang-debug-names.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,25 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +int +main (void) +{ + asm ("main_label: .globl main_label"); + int sum, a, b; + sum = a + b; + return sum; +} diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/clang-debug-names.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/clang-debug-names.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/clang-debug-names.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/clang-debug-names.exp 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,41 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +load_lib dwarf.exp + +# This test can only be run on targets which support DWARF-2 and use gas. +if {![dwarf2_support]} { + return 0 +} + +standard_testfile clang-debug-names.c clang-debug-names-debug.S + +lassign [function_range main ${srcdir}/${subdir}/${srcfile}] \ + main_start main_length + +set asm_file [standard_output_file $srcfile2] +source $srcdir/$subdir/clang-debug-names.exp.tcl + +if { [prepare_for_testing "failed to prepare" ${testfile} \ + [list $srcfile $asm_file] {nodebug}] } { + return -1 +} + +set cmd "ptype main" +set pass_re \ + [multi_line \ + $cmd \ + "type = int \\(\\)"] +gdb_test $cmd $pass_re diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/clang-debug-names.exp.tcl gdb-10.2/gdb/testsuite/gdb.dwarf2/clang-debug-names.exp.tcl --- gdb-9.1/gdb/testsuite/gdb.dwarf2/clang-debug-names.exp.tcl 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/clang-debug-names.exp.tcl 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,121 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Set up the DWARF for the test. + +set main_str_label [Dwarf::_compute_label info_string3] +set int_str_label [Dwarf::_compute_label info_string4] +set main_die_label [Dwarf::_compute_label main_die_label] +set int_die_label [Dwarf::_compute_label int_die_label] + +set debug_str \ + [list \ + "$main_str_label:" \ + " .asciz \"main\"" \ + "$int_str_label:" \ + " .asciz \"int\""] + +set debug_names \ + [list \ + " .4byte .Ldebug_names_end - .Ldebug_names_start" \ + ".Ldebug_names_start:" \ + " .short 5 # Header: version" \ + " .short 0 # Header: padding" \ + " .long 1 # Header: compilation unit count" \ + " .long 0 # Header: local type unit count" \ + " .long 0 # Header: foreign type unit count" \ + " .long 2 # Header: bucket count" \ + " .long 2 # Header: name count" \ + " .long .Lnames_abbrev_end0-.Lnames_abbrev_start0 " \ + " # Header: abbreviation table size" \ + " .long 8 # Header: augmentation string size" \ + " .ascii \"LLVM0700\" # Header: augmentation string" \ + " .long .Lcu1_begin # Compilation unit 0" \ + " .long 1 # Bucket 0" \ + " .long 0 # Bucket 1" \ + " .long 193495088 # Hash in Bucket 0" \ + " .long 2090499946 # Hash in Bucket 0" \ + " .long $int_str_label # String in Bucket 0: int" \ + " .long $main_str_label # String in Bucket 0: main" \ + " .long .Lnames1-.Lnames_entries0 # Offset in Bucket 0" \ + " .long .Lnames0-.Lnames_entries0 # Offset in Bucket 0" \ + ".Lnames_abbrev_start0:" \ + " .byte 46 # Abbrev code" \ + " .byte 46 # DW_TAG_subprogram" \ + " .byte 3 # DW_IDX_die_offset" \ + " .byte 19 # DW_FORM_ref4" \ + " .byte 0 # End of abbrev" \ + " .byte 0 # End of abbrev" \ + " .byte 36 # Abbrev code" \ + " .byte 36 # DW_TAG_base_type" \ + " .byte 3 # DW_IDX_die_offset" \ + " .byte 19 # DW_FORM_ref4" \ + " .byte 0 # End of abbrev" \ + " .byte 0 # End of abbrev" \ + " .byte 0 # End of abbrev list" \ + ".Lnames_abbrev_end0:" \ + ".Lnames_entries0:" \ + ".Lnames1:" \ + " .byte 36 # Abbreviation code" \ + " .long $int_die_label - .Lcu1_begin # DW_IDX_die_offset" \ + " .long 0 # End of list: int" \ + ".Lnames0:" \ + " .byte 46 # Abbreviation code" \ + " .long $main_die_label - .Lcu1_begin # DW_IDX_die_offset" \ + " .long 0 # End of list: main" \ + " .p2align 2" \ + ".Ldebug_names_end:"] + +Dwarf::assemble $asm_file { + global srcdir subdir srcfile + global main_start main_length + + cu {} { + DW_TAG_compile_unit { + {DW_AT_language @DW_LANG_C} + {DW_AT_name clang-debug-names.c} + {DW_AT_comp_dir /tmp} + + } { + global int_die_label + global main_die_label + + define_label $int_die_label + base_type { + {name "int"} + {encoding @DW_ATE_signed} + {byte_size 4 DW_FORM_sdata} + } + + define_label $main_die_label + subprogram { + {name main} + {type :$int_die_label} + {low_pc $main_start addr} + {high_pc "$main_start + $main_length" addr} + } + } + } + + _defer_output .debug_str { + global debug_str + _emit [join $debug_str "\n"] + } + + _defer_output .debug_names { + global debug_names + _emit [join $debug_names "\n"] + } +} diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/clztest.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/clztest.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/clztest.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/clztest.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -28,7 +28,8 @@ return 0 } -if { [prepare_for_testing "failed to prepare" "${test}" ${test}.S {nodebug additional_flags=-nostdlib}] } { +if { [prepare_for_testing "failed to prepare" "${test}" ${test}.S \ + {nodebug nopie additional_flags=-nostdlib}] } { return -1 } diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/clztest.S gdb-10.2/gdb/testsuite/gdb.dwarf2/clztest.S --- gdb-9.1/gdb/testsuite/gdb.dwarf2/clztest.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/clztest.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/comp-unit-lang.c gdb-10.2/gdb/testsuite/gdb.dwarf2/comp-unit-lang.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/comp-unit-lang.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/comp-unit-lang.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -17,15 +17,13 @@ asm (".section \".text\""); asm (".balign 8"); -asm ("func_start: .globl func_start"); static void func (void) { + asm ("func_label: .globl func_label"); } -asm ("func_end: .globl func_end"); - int main (void) { diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/comp-unit-lang.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/comp-unit-lang.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/comp-unit-lang.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/comp-unit-lang.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -42,19 +42,14 @@ # Creating a CU with 4-byte addresses lets this test link on # both 32- and 64-bit machines. cu { addr_size 4 } { - extern func_start func_end - compile_unit { {name file1.txt} {language @$cu_lang} - {low_pc func_start addr} - {high_pc func_end addr} + {MACRO_AT_range {func}} } { subprogram { {external 1 flag} - {name func} - {low_pc func_start addr} - {high_pc func_end addr} + {MACRO_AT_func {func}} } { } } @@ -73,8 +68,14 @@ gdb_test "show language" "\"auto; currently $gdb_lang\".*" } +proc do_test_with_prefix {cu_lang gdb_lang} { + with_test_prefix $gdb_lang { + do_test $cu_lang $gdb_lang + } +} + # Some paths in the debugger fall back to C. Check C++ as well to # make sure the test doesn't happen to work because of such a # fallback. -do_test DW_LANG_C "c" -do_test DW_LANG_C_plus_plus "c\\+\\+" +do_test_with_prefix DW_LANG_C "c" +do_test_with_prefix DW_LANG_C_plus_plus "c\\+\\+" diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/corrupt.c gdb-10.2/gdb/testsuite/gdb.dwarf2/corrupt.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/corrupt.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/corrupt.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/corrupt.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/corrupt.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/corrupt.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/corrupt.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/count.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/count.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/count.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/count.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/cpp-linkage-name.c gdb-10.2/gdb/testsuite/gdb.dwarf2/cpp-linkage-name.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/cpp-linkage-name.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/cpp-linkage-name.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,29 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +volatile struct +{ + int x; + int y; +} global_var; + +int +main (void) +{ + asm ("main_label: .globl main_label"); + return global_var.x + global_var.y; +} diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/cpp-linkage-name.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/cpp-linkage-name.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/cpp-linkage-name.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/cpp-linkage-name.exp 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,89 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Some compilers give anonymous structures a linkage name, and that +# linkage name doesn't demangle (within GDB calling gdb_demangle +# return NULL). At one point this caused GDB to crash due to +# dereferencing a NULL pointer. + +load_lib dwarf.exp + +# This test can only be run on targets which support DWARF-2 and use gas. +if {![dwarf2_support]} { + return 0 +} + +standard_testfile cpp-linkage-name.c cpp-linkage-name-debug.S + +# Set up the DWARF for the test. +set asm_file [standard_output_file $srcfile2] +Dwarf::assemble $asm_file { + cu {} { + DW_TAG_compile_unit { + {DW_AT_language @DW_LANG_C_plus_plus} + {DW_AT_name ada-linkage-name.c} + {DW_AT_comp_dir /tmp} + + } { + declare_labels a_l b_l + + a_l: DW_TAG_base_type { + {DW_AT_byte_size 4 DW_FORM_sdata} + {DW_AT_encoding @DW_ATE_signed} + {DW_AT_name int} + } + + # To expose the bug that existed at one point this + # structure must have a linkage name, but no name, and the + # linkage name is something that doesn't demangle. + b_l: DW_TAG_structure_type { + {DW_AT_byte_size 8 DW_FORM_sdata} + {DW_AT_encoding @DW_ATE_signed} + {DW_AT_linkage_name <anon>} + } { + member { + {name x} + {type :$a_l} + {data_member_location 0 data1} + } + member { + {name y} + {type :$a_l} + {data_member_location 0 data1} + } + } + DW_TAG_subprogram { + {MACRO_AT_func {main}} + {type :$a_l} + } + DW_TAG_variable { + {type :$b_l} + {external 1 flag} + {DW_AT_name global_var} + {DW_AT_location { + DW_OP_addr [gdb_target_symbol global_var] + } SPECIAL_expr} + } + } + } +} + +if { [prepare_for_testing "failed to prepare" ${testfile} \ + [list $srcfile $asm_file] {nodebug}] } { + return -1 +} + +gdb_assert [runto_main] "run to main" +gdb_test "p global_var" " = {x = 0, y = 0}" diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/data-loc.c gdb-10.2/gdb/testsuite/gdb.dwarf2/data-loc.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/data-loc.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/data-loc.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2014-2020 Free Software Foundation, Inc. +/* Copyright 2014-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/data-loc.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/data-loc.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/data-loc.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/data-loc.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -43,6 +43,7 @@ } { declare_labels integer_label array_label array_ptr_label set int_size [get_sizeof "int" 4] + set voidp_size [get_sizeof "void *" 96] integer_label: DW_TAG_base_type { {DW_AT_byte_size $int_size DW_FORM_sdata} @@ -63,16 +64,16 @@ {DW_AT_type :$integer_label} {DW_AT_lower_bound { DW_OP_push_object_address - DW_OP_plus_uconst [get_sizeof "void *" 96] + DW_OP_plus_uconst $voidp_size DW_OP_deref - DW_OP_deref_size [get_sizeof "int" 4] + DW_OP_deref_size $int_size } SPECIAL_expr} {DW_AT_upper_bound { DW_OP_push_object_address - DW_OP_plus_uconst [get_sizeof "void *" 96] + DW_OP_plus_uconst $voidp_size DW_OP_deref - DW_OP_plus_uconst [get_sizeof "int" 4] - DW_OP_deref_size [get_sizeof "int" 4] + DW_OP_plus_uconst $int_size + DW_OP_deref_size $int_size } SPECIAL_expr} } } @@ -226,9 +227,6 @@ gdb_test "ptype foo.five_tdef" \ "type = array \\(2 .. 6\\) of integer" -gdb_test "ptype foo.array_type" \ - "type = array \\(<>\\) of integer" - gdb_test "print foo.five_tdef(2)" \ " = 5" diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dup-psym.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dup-psym.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dup-psym.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dup-psym.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2005-2020 Free Software Foundation, Inc. +# Copyright 2005-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dup-psym.S gdb-10.2/gdb/testsuite/gdb.dwarf2/dup-psym.S --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dup-psym.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dup-psym.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2005-2020 Free Software Foundation, Inc. + Copyright 2005-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-abs-hi-pc.c gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-abs-hi-pc.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-abs-hi-pc.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-abs-hi-pc.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2014-2020 Free Software Foundation, Inc. +/* Copyright 2014-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-abs-hi-pc.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-abs-hi-pc.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-abs-hi-pc.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-abs-hi-pc.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-abs-hi-pc-hello.c gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-abs-hi-pc-hello.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-abs-hi-pc-hello.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-abs-hi-pc-hello.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2014-2020 Free Software Foundation, Inc. +/* Copyright 2014-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-abs-hi-pc-hello-dbg.S gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-abs-hi-pc-hello-dbg.S --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-abs-hi-pc-hello-dbg.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-abs-hi-pc-hello-dbg.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2014-2020 Free Software Foundation, Inc. +/* Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-abs-hi-pc-world.c gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-abs-hi-pc-world.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-abs-hi-pc-world.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-abs-hi-pc-world.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2014-2020 Free Software Foundation, Inc. +/* Copyright 2014-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-abs-hi-pc-world-dbg.S gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-abs-hi-pc-world-dbg.S --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-abs-hi-pc-world-dbg.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-abs-hi-pc-world-dbg.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2014-2020 Free Software Foundation, Inc. +/* Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-ada-ffffffff.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-ada-ffffffff.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-ada-ffffffff.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-ada-ffffffff.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-ada-ffffffff.S gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-ada-ffffffff.S --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-ada-ffffffff.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-ada-ffffffff.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2010-2020 Free Software Foundation, Inc. +/* Copyright 2010-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-align.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-align.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-align.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-align.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2018-2020 Free Software Foundation, Inc. +# Copyright 2018-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-anon-mptr.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-anon-mptr.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-anon-mptr.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-anon-mptr.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-anon-mptr.S gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-anon-mptr.S --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-anon-mptr.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-anon-mptr.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-anonymous-func.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-anonymous-func.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-anonymous-func.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-anonymous-func.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2004-2020 Free Software Foundation, Inc. +# Copyright 2004-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-anonymous-func.S gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-anonymous-func.S --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-anonymous-func.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-anonymous-func.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2004-2020 Free Software Foundation, Inc. + Copyright 2004-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-bad-elf.c gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-bad-elf.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-bad-elf.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-bad-elf.c 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,21 @@ +/* Copyright 2019-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +int +main () +{ + asm ("main_label: .globl main_label"); + return 0; +} diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-bad-elf.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-bad-elf.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-bad-elf.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-bad-elf.exp 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,183 @@ +# Copyright 2019-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Checks for a bug where a baddly formed ELF would cause GDB to crash. +# A section containing executable code, for which there was DWARF is +# accidentally marked as non-alloctable, GDB becomes unhappy. +# +# This test creates some fake DWARF pointing at some symbols in a +# non-allocatable section that is still marked as executable. We then +# start GDB and try to place a breakpoint on the symbol in the +# non-allocatable section. +# +# It is not expected that the final debug experience really makes +# sense, the symbol is in a non-allocatable section after all, but GDB +# absolutely shouldn't crash. All we try to do after placing the +# breakpoint is check that GDB is still alive. + +load_lib dwarf.exp + +# This test can only be run on targets which support DWARF-2 and use gas. +if {![dwarf2_support]} { + return 0 +} + +standard_testfile dw2-bad-elf.c dw2-bad-elf-other.S dw2-bad-elf-dwarf.S + +# Make some DWARF for the test. +set asm_file [standard_output_file $srcfile3] +Dwarf::assemble $asm_file { + global srcdir subdir srcfile + + declare_labels ranges_label_1 ranges_label_2 L1 L2 + + set main_result [function_range main ${srcdir}/${subdir}/${srcfile}] + set main_start [lindex $main_result 0] + set main_length [lindex $main_result 1] + + set int_size [get_sizeof "int" 4] + + cu {} { + DW_TAG_compile_unit { + {DW_AT_language @DW_LANG_C} + {DW_AT_name dw2-bad-elf.c} + {DW_AT_comp_dir ${srcdir}/${subdir}} + {stmt_list $L1 DW_FORM_sec_offset} + {ranges ${ranges_label_1} DW_FORM_sec_offset} + {DW_AT_low_pc 0 addr} + } { + declare_labels integer_label + + DW_TAG_subprogram { + {name main} + {low_pc $main_start addr} + {high_pc $main_length data8} + {DW_AT_type :$integer_label} + {DW_AT_decl_file 1 data1} + {DW_AT_decl_line 10 data1} + } + + integer_label: DW_TAG_base_type { + {DW_AT_byte_size $int_size DW_FORM_sdata} + {DW_AT_encoding @DW_ATE_signed} + {DW_AT_name integer} + } + } + } + + cu {} { + DW_TAG_compile_unit { + {DW_AT_language @DW_LANG_C} + {DW_AT_name dw2-bad-elf-other.c} + {DW_AT_comp_dir ${srcdir}/${subdir}} + {stmt_list $L2 DW_FORM_sec_offset} + {ranges ${ranges_label_2} DW_FORM_sec_offset} + {DW_AT_low_pc 0 addr} + } { + declare_labels integer_label + + DW_TAG_subprogram { + {name some_func} + {low_pc some_func addr} + {high_pc some_func_end addr} + {DW_AT_type :$integer_label} + {DW_AT_decl_file 2 data1} + {DW_AT_decl_line 5 data1} + } + + integer_label: DW_TAG_base_type { + {DW_AT_byte_size $int_size DW_FORM_sdata} + {DW_AT_encoding @DW_ATE_signed} + {DW_AT_name integer} + } + } + } + + ranges {is_64 [is_64_target]} { + ranges_label_1: sequence { + {base [lindex $main_result 0]} + {range 0 [lindex $main_result 1]} + } + ranges_label_2: sequence { + {base some_func} + {range 0 64} + } + } + + lines {version 2} L1 { + include_dir "${srcdir}/${subdir}" + file_name "$srcfile" 1 + + # Line data doens't need to be correct, just present. + program { + {DW_LNE_set_address [lindex $main_result 0]} + {DW_LNS_advance_line 10} + {DW_LNS_copy} + {DW_LNS_advance_pc [lindex $main_result 1]} + {DW_LNS_advance_line 19} + {DW_LNS_copy} + {DW_LNE_end_sequence} + } + } + + lines {version 2} L2 { + include_dir "${srcdir}/${subdir}" + file_name "dw2-bad-elf-other.c" 1 + + # Line data doens't need to be correct, just present. + program { + {DW_LNE_set_address some_func} + {DW_LNS_advance_line 5} + {DW_LNS_copy} + {DW_LNS_advance_pc 64} + {DW_LNS_advance_line 8} + {DW_LNS_copy} + {DW_LNE_end_sequence} + } + } +} + +if { [build_executable ${testfile}.exp ${testfile} \ + [list $srcfile $srcfile2 $asm_file] {nodebug}] } { + return -1 +} + +# Attempt to place a breakpoint on 'some_func', then check GDB is +# still alive. This test can optionally set a breakpoint on 'main' +# first (based on GOTO_MAIN), the original bug behaved differently +# when there was already a breakpoint set. +proc run_test { goto_main } { + global binfile decimal hex + + clean_restart ${binfile} + + if { $goto_main } { + if ![runto_main] { + return -1 + } + } + + # Place a breakpoint. + gdb_test "break some_func" \ + "Breakpoint $decimal at $hex: file .*dw2-bad-elf-other\\.c, line 6\\." + + # Check GDB is still alive. + gdb_test "echo hello\\n" "hello" +} + +# Run the tests. +foreach_with_prefix goto_main { 0 1 } { + run_test $goto_main +} diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-bad-elf-other.S gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-bad-elf-other.S --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-bad-elf-other.S 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-bad-elf-other.S 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,29 @@ +/* Copyright 2019-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + + .section ".other", "x" + .global some_func, some_func_end + .type some_func, @function + nop + nop + nop + nop +some_func: + .rept 64 + .byte 0 + .endr + .size some_func,.-some_func +some_func_end: + nop diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-bad-mips-linkage-name.c gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-bad-mips-linkage-name.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-bad-mips-linkage-name.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-bad-mips-linkage-name.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-bad-mips-linkage-name.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-bad-mips-linkage-name.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-bad-mips-linkage-name.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-bad-mips-linkage-name.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -26,19 +26,9 @@ set asm_file [standard_output_file $srcfile2] Dwarf::assemble $asm_file { - global srcdir subdir srcfile - - set f_result [function_range f ${srcdir}/${subdir}/${srcfile}] - set f_start [lindex $f_result 0] - set f_length [lindex $f_result 1] - - set g_result [function_range g ${srcdir}/${subdir}/${srcfile}] - set g_start [lindex $g_result 0] - set g_length [lindex $g_result 1] - cu {} { DW_TAG_compile_unit { - {DW_AT_language @DW_LANG_C} + {DW_AT_language @DW_LANG_C_plus_plus} {DW_AT_name dw2-bad-mips-linkage-name.c} {DW_AT_comp_dir /tmp} @@ -51,16 +41,12 @@ {DW_AT_name bool} } DW_TAG_subprogram { - {name f} - {low_pc $f_start addr} - {high_pc "$f_start + $f_length" addr} + {MACRO_AT_func {f}} {type :$b_l} {DW_AT_MIPS_linkage_name _Z1fv} } DW_TAG_subprogram { - {name g} - {low_pc $g_start addr} - {high_pc "$g_start + $g_length" addr} + {MACRO_AT_func {g}} {type :$b_l} {DW_AT_MIPS_linkage_name 42 DW_FORM_data1} } @@ -78,5 +64,5 @@ # much matter what we test here, so long as we do something to make # sure that the DWARF is read. -gdb_test "ptype f" " = bool \\(\\)" -gdb_test "ptype g" " = bool \\(\\)" +gdb_test "ptype f" " = bool \\(void\\)" +gdb_test "ptype g" " = bool \\(void\\)" diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-bad-parameter-type.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-bad-parameter-type.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-bad-parameter-type.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-bad-parameter-type.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -31,7 +31,10 @@ # The first access (as we do not use -readnow) prints some: # Dwarf Error: Cannot find DIE at 0x0 referenced from DIE at 0x29 [in module ...] -gdb_test "ptype f" - -gdb_test "ptype f" +with_test_prefix "first" { + gdb_test "ptype f" +} +with_test_prefix "second" { + gdb_test "ptype f" +} gdb_test "p 5" " = 5" "is alive" diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-bad-parameter-type.S gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-bad-parameter-type.S --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-bad-parameter-type.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-bad-parameter-type.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2010-2020 Free Software Foundation, Inc. +/* Copyright 2010-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-bad-unresolved.c gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-bad-unresolved.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-bad-unresolved.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-bad-unresolved.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-bad-unresolved.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-bad-unresolved.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-bad-unresolved.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-bad-unresolved.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-basic.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-basic.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-basic.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-basic.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2004-2020 Free Software Foundation, Inc. +# Copyright 2004-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-basic.S gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-basic.S --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-basic.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-basic.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2004-2020 Free Software Foundation, Inc. + Copyright 2004-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-canonicalize-type.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-canonicalize-type.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-canonicalize-type.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-canonicalize-type.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-canonicalize-type.S gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-canonicalize-type.S --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-canonicalize-type.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-canonicalize-type.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2012-2020 Free Software Foundation, Inc. +/* Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-case-insensitive.c gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-case-insensitive.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-case-insensitive.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-case-insensitive.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-case-insensitive-debug.S gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-case-insensitive-debug.S --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-case-insensitive-debug.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-case-insensitive-debug.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-case-insensitive.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-case-insensitive.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-case-insensitive.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-case-insensitive.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-common-block.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-common-block.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-common-block.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-common-block.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -33,7 +33,7 @@ standard_testfile .S if { [prepare_for_testing "failed to prepare" "${testfile}" $srcfile \ - {nodebug f90}] } { + {nodebug nopie f90}] } { return -1 } diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-common-block.S gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-common-block.S --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-common-block.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-common-block.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-compdir-oldgcc.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-compdir-oldgcc.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-compdir-oldgcc.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-compdir-oldgcc.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-compdir-oldgcc.S gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-compdir-oldgcc.S --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-compdir-oldgcc.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-compdir-oldgcc.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-compressed.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-compressed.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-compressed.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-compressed.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-compressed.S gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-compressed.S --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-compressed.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-compressed.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2008-2020 Free Software Foundation, Inc. + Copyright 2008-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-const.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-const.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-const.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-const.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-const.S gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-const.S --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-const.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-const.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-cp-infcall-ref-static.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-cp-infcall-ref-static.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-cp-infcall-ref-static.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-cp-infcall-ref-static.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-cp-infcall-ref-static-main.c gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-cp-infcall-ref-static-main.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-cp-infcall-ref-static-main.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-cp-infcall-ref-static-main.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-cp-infcall-ref-static.S gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-cp-infcall-ref-static.S --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-cp-infcall-ref-static.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-cp-infcall-ref-static.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-cu-size.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-cu-size.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-cu-size.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-cu-size.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2004-2020 Free Software Foundation, Inc. +# Copyright 2004-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-cu-size.S gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-cu-size.S --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-cu-size.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-cu-size.S 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2008-2020 Free Software Foundation, Inc. + Copyright 2008-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-dir-file-name.c gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-dir-file-name.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-dir-file-name.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-dir-file-name.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-dir-file-name.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-dir-file-name.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-dir-file-name.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-dir-file-name.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -333,6 +333,12 @@ # CU's DW_AT_name and .debug_line's filename. lappend opts "additional_flags=-DFILE=\"${srctmpfile}\"" +# Clang's integrated assembler doesn't support .ascii directives +# with multiple string literals. +if { [test_compiler_info clang*] } { + lappend opts "additional_flags=-fno-integrated-as" +} + if { [gdb_compile "${asmsrcfile} ${srcdir}/${subdir}/$srcfile" "${binfile}" executable $opts] != "" } { untested "failed to compile" return -1 diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-disasm-over-non-stmt.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-disasm-over-non-stmt.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-disasm-over-non-stmt.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-disasm-over-non-stmt.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,206 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Create an example function that contains both addresses marked as +# statements and addresses marked as non-statements, and then +# disassemble the function. +# +# Of particular interest is how 'disassemble /m' handles the +# non-statement addresses, we want to ensure that these addresses are +# included in the disassembly output. For completeness we test both +# 'disassemble /m' and 'disassemble /s'. + +load_lib dwarf.exp + +# This test can only be run on targets which support DWARF-2 and use gas. +if {![dwarf2_support]} { + return 0 +} + +# The .c files use __attribute__. +if [get_compiler_info] { + return -1 +} +if !$gcc_compiled { + return 0 +} + +# Reuse many of the test source files from dw2-inline-header-1.exp. +standard_testfile dw2-inline-header-lbls.c dw2-inline-header.S \ + dw2-inline-header.c + +set asm_file [standard_output_file $srcfile2] +Dwarf::assemble $asm_file { + global srcdir subdir srcfile srcfile3 + declare_labels lines_label + + get_func_info main + + cu {} { + compile_unit { + {producer "gcc" } + {language @DW_LANG_C} + {name ${srcfile3}} + {low_pc 0 addr} + {stmt_list ${lines_label} DW_FORM_sec_offset} + } { + subprogram { + {external 1 flag} + {MACRO_AT_func {main}} + } + } + } + + lines {version 2 default_is_stmt 1} lines_label { + include_dir "${srcdir}/${subdir}" + file_name "$srcfile3" 1 + + program { + {DW_LNE_set_address $main_start} + {DW_LNS_advance_line 15} + {DW_LNS_copy} + + {DW_LNE_set_address line_label_2} + {DW_LNS_negate_stmt} + {DW_LNS_copy} + + {DW_LNE_set_address line_label_3} + {DW_LNS_advance_line 1} + {DW_LNS_copy} + + {DW_LNE_set_address line_label_4} + {DW_LNS_negate_stmt} + {DW_LNS_copy} + + {DW_LNE_set_address line_label_5} + {DW_LNS_negate_stmt} + {DW_LNS_copy} + + {DW_LNE_set_address line_label_6} + {DW_LNS_advance_line 1} + {DW_LNS_negate_stmt} + {DW_LNS_copy} + + {DW_LNE_set_address $main_end} + {DW_LNS_copy} + {DW_LNE_end_sequence} + } + } +} + +if { [prepare_for_testing "failed to prepare" ${testfile} \ + [list $srcfile $asm_file] {nodebug} ] } { + return -1 +} + +if ![runto_main] { + return -1 +} + +# Global lines array, maps lines numbers to the list of addresses +# associated with that line in the debug output. +array set lines {} + +# Look in the global LINES array and check that the disassembly for +# line LINENUM includes the address of LABEL. +proc check_disassembly_results { linenum label } { + global lines + + set address [get_hexadecimal_valueof "&${label}" "__unknown__"] + set testname "check_disassembly_results $linenum $label" + if {![info exists lines($linenum)]} { + fail "$testname (no disassembly for $linenum)" + return + } + + # Use a loop to compare the addresses as the addresses extracted + # from the disassembly output can be padded with zeros, while the + # address of the label will not be padded. + set addrs $lines($linenum) + foreach a $addrs { + if { $a == $address } { + pass $testname + return + } + } + fail $testname +} + +foreach_with_prefix opt { m s } { + # Disassemble 'main' and split up the disassembly output. We + # build an associative array, for each line number store the list + # of addresses that were part of its disassembly output. + # + # LINENUM is the line we are currently collecting the disassembly + # addresses for, and ADDRS is the list of addresses collected for + # this line. + set linenum -1 + set addrs {} + + # Clear the global associative array used to hold the results. + unset lines + array set lines {} + + gdb_test_multiple "disassemble /${opt} main" "" { + -re "Dump of assembler code for function main:\r\n" { + exp_continue + } + + -re "^\[^\r\n\]+${srcfile3}:" { + exp_continue + } + + -re "^(\\d+)\\s+\[^\r\n\]+\r\n" { + if { $linenum != -1 } { + set lines($linenum) $addrs + set addrs {} + } + set linenum $expect_out(1,string) + exp_continue + } + + -re "^(?:=>)?\\s*($hex)\\s*\[^\r\n\]+\r\n" { + set address $expect_out(1,string) + lappend addrs $address + exp_continue + } + + -re "^\\s*\r\n" { + exp_continue + } + + -re "^End of assembler dump\\.\r\n" { + if { $linenum != -1 } { + set lines($linenum) $addrs + set linenum -1 + set addrs {} + } + exp_continue + } + + -re "^$gdb_prompt $" { + # All done. + } + } + + # Now check that each label we expect to be associated with each line + # shows up in the disassembly output. + check_disassembly_results 16 "line_label_1" + check_disassembly_results 16 "line_label_2" + check_disassembly_results 17 "line_label_3" + check_disassembly_results 17 "line_label_4" + check_disassembly_results 17 "line_label_5" + check_disassembly_results 18 "line_label_6" +} diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-dos-drive.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-dos-drive.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-dos-drive.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-dos-drive.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-dos-drive.S gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-dos-drive.S --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-dos-drive.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-dos-drive.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2013-2020 Free Software Foundation, Inc. +/* Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-double-set-die-type.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-double-set-die-type.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-double-set-die-type.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-double-set-die-type.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-double-set-die-type.S gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-double-set-die-type.S --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-double-set-die-type.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-double-set-die-type.S 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-dummy-cu.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-dummy-cu.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-dummy-cu.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-dummy-cu.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-dummy-cu.S gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-dummy-cu.S --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-dummy-cu.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-dummy-cu.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2015-2020 Free Software Foundation, Inc. +/* Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-dup-frame.c gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-dup-frame.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-dup-frame.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-dup-frame.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-dup-frame.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-dup-frame.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-dup-frame.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-dup-frame.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -26,7 +26,7 @@ standard_testfile .S -if { [prepare_for_testing "failed to prepare" $testfile $srcfile {nodebug}] } { +if { [prepare_for_testing "failed to prepare" $testfile $srcfile {nodebug nopie}] } { return -1 } diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-dup-frame.S gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-dup-frame.S --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-dup-frame.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-dup-frame.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-empty-namespace.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-empty-namespace.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-empty-namespace.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-empty-namespace.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2009-2020 Free Software Foundation, Inc. +# Copyright 2009-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-empty-namespace.S gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-empty-namespace.S --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-empty-namespace.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-empty-namespace.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2009-2020 Free Software Foundation, Inc. + Copyright 2009-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-empty-pc-range.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-empty-pc-range.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-empty-pc-range.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-empty-pc-range.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-empty-pc-range.S gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-empty-pc-range.S --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-empty-pc-range.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-empty-pc-range.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2011-2020 Free Software Foundation, Inc. +/* Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-entry-value.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-entry-value.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-entry-value.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-entry-value.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-entry-value-main.c gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-entry-value-main.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-entry-value-main.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-entry-value-main.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-entry-value.S gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-entry-value.S --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-entry-value.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-entry-value.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2011-2020 Free Software Foundation, Inc. +/* Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-error.c gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-error.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-error.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-error.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-error.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-error.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-error.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-error.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -29,7 +29,7 @@ # We can't use prepare_for_testing here because we need to check the # 'file' command's output. -if {[build_executable $testfile.exp $testfile $srcfile {nodebug}]} { +if {[build_executable $testfile.exp $testfile $srcfile {nodebug quiet}]} { return -1 } diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-error.S gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-error.S --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-error.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-error.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2012-2020 Free Software Foundation, Inc. +/* Copyright (C) 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-filename.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-filename.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-filename.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-filename.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2004-2020 Free Software Foundation, Inc. +# Copyright 2004-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-filename.S gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-filename.S --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-filename.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-filename.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2004-2020 Free Software Foundation, Inc. + Copyright 2004-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-icc-opaque.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-icc-opaque.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-icc-opaque.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-icc-opaque.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2011-2020 Free Software Foundation, Inc. +# Copyright (C) 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-icc-opaque.S gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-icc-opaque.S --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-icc-opaque.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-icc-opaque.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2011-2020 Free Software Foundation, Inc. +/* Copyright (C) 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-icycle.c gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-icycle.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-icycle.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-icycle.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2004-2020 Free Software Foundation, Inc. + Copyright 2004-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-icycle.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-icycle.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-icycle.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-icycle.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-icycle.S gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-icycle.S --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-icycle.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-icycle.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-ifort-parameter.c gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-ifort-parameter.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-ifort-parameter.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-ifort-parameter.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-ifort-parameter.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-ifort-parameter.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-ifort-parameter.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-ifort-parameter.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -29,14 +29,11 @@ Dwarf::assemble $asm_file { declare_labels int_label - extern func_start func_end ptr - global srcdir subdir srcfile - cu {} { compile_unit { {name file1.txt} {language @DW_LANG_C} - {MACRO_AT_range { func ${srcdir}/${subdir}/${srcfile} }} + {MACRO_AT_range { func }} } { int_label: base_type { {name int} @@ -46,7 +43,7 @@ subprogram { {external 1 flag} - {MACRO_AT_func { func ${srcdir}/${subdir}/${srcfile} }} + {MACRO_AT_func { func }} } { formal_parameter { {name param} diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-inheritance.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-inheritance.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-inheritance.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-inheritance.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2009-2020 Free Software Foundation, Inc. +# Copyright 2009-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-inheritance.S gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-inheritance.S --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-inheritance.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-inheritance.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2009-2020 Free Software Foundation, Inc. + Copyright 2009-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-inline-break.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-inline-break.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-inline-break.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-inline-break.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-inline-break.S gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-inline-break.S --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-inline-break.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-inline-break.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-inline-header-1.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-inline-header-1.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-inline-header-1.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-inline-header-1.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,186 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Setup a line table where: +# +# | | | | | Inline | Inline | +# | Addr | File | Line | Stmt | Rng A | Rng B | +# |------|------|------|------|--------|--------| +# | 1 | 1 | 16 | Y | | | +# | 2 | 1 | 17 | Y | | | +# | 3 | 2 | 21 | Y | X | | +# | 4 | 2 | 22 | Y | X | | +# | 4 | 1 | 18 | N | X | | +# | 5 | 2 | 23 | N | X | X | +# | 6 | 1 | 24 | Y | | | +# | 7 | 1 | END | Y | | | +# |------|------|------|------|--------|--------| +# +# Places a brekpoint at file 2, line 22. Previously GDB would discard +# the line table entry for this line due to switching files for the +# file 1, line 18 non-statement line. After patching however, GDB now +# discards the file 1, line 18 entry instead, and the breakpoint at +# line 22 should succeed. +# +# The two inlined subroutine ranges 'A' and 'B' represent two possible +# ways that a compiler might represent this siuatio in the DWARF. +# +# Range 'B' is something that has been seen in the wild using GCC 8.2. +# In this case the compilers range information is clearly wrong, but +# this shouldn't impact the main point of the test. +# +# Range 'A' is a hypothetical case of how the compiler might choose to +# represent this range, this has never been seen in the wild, but is +# an improved debug experiece over range 'B'. However, if we ever run +# in to the situation where GDB can support the range 'A' test, or +# support some real DWARF seen in the wild, then the range 'A' case +# should be dropped in favour of supporting real world cases. This is +# included here as it "just worked" once the range 'B' case was +# working. + +load_lib dwarf.exp + +# This test can only be run on targets which support DWARF-2 and use gas. +if {![dwarf2_support]} { + return 0 +} + +# The .c files use __attribute__. +if [get_compiler_info] { + return -1 +} +if !$gcc_compiled { + return 0 +} + +# Prepare and run the test. +proc do_test { start_label func_name tag } { + global srcfile srcfile2 srcfile3 srcfile4 testfile + + standard_testfile dw2-inline-header-lbls.c dw2-inline-header-${tag}.S \ + dw2-inline-header.c dw2-inline-header.h + + set build_options {nodebug optimize=-O1} + + set asm_file [standard_output_file $srcfile2] + Dwarf::assemble $asm_file { + global srcdir subdir srcfile srcfile3 srcfile4 testfile + upvar build_options build_options + upvar start_label start_label + declare_labels lines_label callee_subprog_label + + get_func_info main $build_options + + cu {} { + compile_unit { + {producer "gcc" } + {language @DW_LANG_C} + {name ${srcfile3}} + {low_pc 0 addr} + {stmt_list ${lines_label} DW_FORM_sec_offset} + } { + callee_subprog_label: subprogram { + {external 1 flag} + {name callee} + {inline 3 data1} + } + subprogram { + {external 1 flag} + {name main} + {low_pc $main_start addr} + {high_pc "$main_start + $main_len" addr} + } { + inlined_subroutine { + {abstract_origin %$callee_subprog_label} + {low_pc $start_label addr} + {high_pc line_label_6 addr} + {call_file 1 data1} + {call_line 18 data1} + } + } + } + } + + lines {version 2 default_is_stmt 1} lines_label { + include_dir "${srcdir}/${subdir}" + file_name "$srcfile3" 1 + file_name "$srcfile4" 1 + + program { + {DW_LNE_set_address line_label_1} + {DW_LNS_advance_line 15} + {DW_LNS_copy} + + {DW_LNE_set_address line_label_2} + {DW_LNS_advance_line 1} + {DW_LNS_copy} + + {DW_LNS_set_file 2} + {DW_LNE_set_address line_label_3} + {DW_LNS_advance_line 4} + {DW_LNS_copy} + + {DW_LNE_set_address line_label_4} + {DW_LNS_advance_line 1} + {DW_LNS_copy} + + {DW_LNS_advance_line -4} + {DW_LNS_set_file 1} + {DW_LNS_negate_stmt} + {DW_LNS_copy} + + {DW_LNS_set_file 2} + {DW_LNE_set_address line_label_5} + {DW_LNS_advance_line 5} + {DW_LNS_copy} + + {DW_LNS_negate_stmt} + {DW_LNS_set_file 1} + {DW_LNE_set_address line_label_6} + {DW_LNS_advance_line 1} + {DW_LNS_copy} + + {DW_LNE_set_address line_label_7} + {DW_LNE_end_sequence} + } + } + } + + if { [prepare_for_testing "failed to prepare" ${testfile}-${tag} \ + [list $srcfile $asm_file] $build_options] } { + return -1 + } + + if ![runto_main] { + return -1 + } + + # Delete all breakpoints so that the output of "info breakpoints" + # below will only contain a single breakpoint. + delete_breakpoints + + # Place a breakpoint within the function in the header file. + gdb_breakpoint "${srcfile4}:22" + + # Check that the breakpoint was placed where we expected. It should + # appear at the requested line. When the bug in GDB was present the + # breakpoint would be placed on one of the following lines instead. + gdb_test "info breakpoints" \ + ".* in $func_name at \[^\r\n\]+${srcfile4}:22\\y.*" \ + "info breakpoints, $tag" +} + +do_test line_label_3 "callee" "range-a" +do_test line_label_5 "main" "range-b" diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-inline-header-2.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-inline-header-2.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-inline-header-2.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-inline-header-2.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,189 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Setup a line table where: +# +# | Addr | File | Line | Stmt | Inline | +# |------|------|------|------|--------| +# | 1 | 1 | 16 | Y | | +# | 2 | 1 | 17 | Y | | +# | 3 | 2 | 21 | Y | X | +# | 4 | 2 | 22 | Y | X | +# | 4 | 1 | 18 | N | X | +# | 5 | 1 | 19 | Y | | +# | 6 | 1 | 20 | Y | | +# | 7 | 1 | END | Y | | +# |------|------|------|------|--------| +# +# +# Place the first brekpoint at file 2, line 22 and a second breakpoint +# at file 1, line 19. A third breakpoint is placed at file 1, line +# 18, but as this line table entry will have been discarded[1] the +# third breakpoint will actually be placed at the same location as the +# second breakpoint. +# +# This test is designed to test GDB's internal behaviour with respect +# to discarding particular line table entries. GCC and DWARF are +# starting to introduce the idea of line table views. As the views +# information becomes better supported within GDB it is likely that +# this will become out of date. This is fine, the test will have +# served its purpose by that point and can be deleted. +# +# [1] The entry for file 1, line 18 is discarded because it is at the +# same address as the previous entry, but the previous entry is-stmt, +# while line 18 is a non-stmt. + +load_lib dwarf.exp + +# This test can only be run on targets which support DWARF-2 and use gas. +if {![dwarf2_support]} { + return 0 +} + +# The .c files use __attribute__. +if [get_compiler_info] { + return -1 +} +if !$gcc_compiled { + return 0 +} + +standard_testfile dw2-inline-header-lbls.c dw2-inline-header.S \ + dw2-inline-header.c dw2-inline-header.h + +set build_options {nodebug optimize=-O1} + +set asm_file [standard_output_file $srcfile2] +Dwarf::assemble $asm_file { + global srcdir subdir srcfile srcfile3 srcfile4 + global build_options + declare_labels lines_label callee_subprog_label + + get_func_info main $build_options + + cu {} { + compile_unit { + {producer "gcc" } + {language @DW_LANG_C} + {name ${srcfile3}} + {low_pc 0 addr} + {stmt_list ${lines_label} DW_FORM_sec_offset} + } { + callee_subprog_label: subprogram { + {external 1 flag} + {name callee} + {inline 3 data1} + } + subprogram { + {external 1 flag} + {name main} + {low_pc $main_start addr} + {high_pc "$main_start + $main_len" addr} + } { + inlined_subroutine { + {abstract_origin %$callee_subprog_label} + {low_pc line_label_3 addr} + {high_pc line_label_5 addr} + {call_file 1 data1} + {call_line 18 data1} + } + } + } + } + + lines {version 2 default_is_stmt 1} lines_label { + include_dir "${srcdir}/${subdir}" + file_name "$srcfile3" 1 + file_name "$srcfile4" 1 + + program { + {DW_LNE_set_address line_label_1} + {DW_LNS_advance_line 15} + {DW_LNS_copy} + + {DW_LNE_set_address line_label_2} + {DW_LNS_advance_line 1} + {DW_LNS_copy} + + {DW_LNS_set_file 2} + {DW_LNE_set_address line_label_3} + {DW_LNS_advance_line 4} + {DW_LNS_copy} + + {DW_LNE_set_address line_label_4} + {DW_LNS_advance_line 1} + {DW_LNS_copy} + + {DW_LNS_advance_line -4} + {DW_LNS_set_file 1} + {DW_LNS_negate_stmt} + {DW_LNS_copy} + + {DW_LNE_set_address line_label_5} + {DW_LNS_advance_line 1} + {DW_LNS_negate_stmt} + {DW_LNS_copy} + + {DW_LNE_set_address line_label_6} + {DW_LNS_advance_line 1} + {DW_LNS_copy} + + {DW_LNE_set_address line_label_7} + {DW_LNE_end_sequence} + } + } +} + +if { [prepare_for_testing "failed to prepare" ${testfile} \ + [list $srcfile $asm_file] $build_options] } { + return -1 +} + +if ![runto_main] { + return -1 +} + +# Delete all breakpoints so that the output of "info breakpoints" +# below will only contain a single breakpoint. +delete_breakpoints + +# Place a breakpoint within the function in the header file. +gdb_breakpoint "${srcfile4}:22" + +# Check that the breakpoint was placed where we expected. It should +# appear at the requested line. When the bug in GDB was present the +# breakpoint would be placed on one of the following lines instead. +gdb_test "info breakpoints" \ + ".* in callee at \[^\r\n\]+${srcfile4}:22\\y.*" \ + "check for breakpoint at ${srcfile4}" + +# Delete all breakpoints so that the output of "info breakpoints" +# below will only contain a single breakpoint. +delete_breakpoints + +# Place a breakpoint within the function in the header file. +gdb_breakpoint "${srcfile3}:19" + +# Check that the breakpoint was placed where we expected. It should +# appear at the requested line. When the bug in GDB was present the +# breakpoint would be placed on one of the following lines instead. +gdb_test "info breakpoints" \ + ".* in main at \[^\r\n\]+${srcfile3}:19\\y.*" \ + "check for breakpoint at ${srcfile3}" + +# Line table entry for line 18 will have been discarded, so this +# brekpoint will be at the same location as line 19. +gdb_test "break ${srcfile3}:18" \ + "Note: breakpoint $decimal also set at pc $hex.*" diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-inline-header-3.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-inline-header-3.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-inline-header-3.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-inline-header-3.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,193 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Setup a line table where: +# +# | Addr | File | Line | Stmt | Inline | +# |------|------|------|------|--------| +# | 1 | 1 | 16 | Y | | +# | 2 | 1 | 17 | Y | | +# | 3 | 2 | 21 | Y | X | +# | 4 | 2 | 22 | Y | X | +# | 4 | 1 | 18 | N | | +# | 5 | 1 | 19 | N | | +# | 6 | 1 | 20 | Y | | +# | 7 | 1 | END | Y | | +# |------|------|------|------|--------| +# +# Break at file 2, line 22, then single instruction step forward. We +# should pass through line 19 and then encounter line 20. +# +# Currently we don't expect GDB to see file 1, line 18, as this is a +# non-stmt line in a different file at the same address as the +# previous is-stmt line. + +load_lib dwarf.exp + +# This test can only be run on targets which support DWARF-2 and use gas. +if {![dwarf2_support]} { + return 0 +} + +# The .c files use __attribute__. +if [get_compiler_info] { + return -1 +} +if !$gcc_compiled { + return 0 +} + +standard_testfile dw2-inline-header-lbls.c dw2-inline-header.S \ + dw2-inline-header.c dw2-inline-header.h + +set build_options {nodebug optimize=-O1} + +set asm_file [standard_output_file $srcfile2] +Dwarf::assemble $asm_file { + global srcdir subdir srcfile srcfile3 srcfile4 + global build_options + declare_labels lines_label callee_subprog_label + + get_func_info main $build_options + + cu {} { + compile_unit { + {producer "gcc" } + {language @DW_LANG_C} + {name ${srcfile3}} + {low_pc 0 addr} + {stmt_list ${lines_label} DW_FORM_sec_offset} + } { + callee_subprog_label: subprogram { + {external 1 flag} + {name callee} + {inline 3 data1} + } + subprogram { + {external 1 flag} + {name main} + {low_pc $main_start addr} + {high_pc "$main_start + $main_len" addr} + } { + inlined_subroutine { + {abstract_origin %$callee_subprog_label} + {low_pc line_label_3 addr} + {high_pc line_label_5 addr} + {call_file 1 data1} + {call_line 18 data1} + } + } + } + } + + lines {version 2 default_is_stmt 1} lines_label { + include_dir "${srcdir}/${subdir}" + file_name "$srcfile3" 1 + file_name "$srcfile4" 1 + + program { + {DW_LNE_set_address line_label_1} + {DW_LNS_advance_line 15} + {DW_LNS_copy} + + {DW_LNE_set_address line_label_2} + {DW_LNS_advance_line 1} + {DW_LNS_copy} + + {DW_LNS_set_file 2} + {DW_LNE_set_address line_label_3} + {DW_LNS_advance_line 4} + {DW_LNS_copy} + + {DW_LNE_set_address line_label_4} + {DW_LNS_advance_line 1} + {DW_LNS_copy} + + {DW_LNS_advance_line -4} + {DW_LNS_set_file 1} + {DW_LNS_negate_stmt} + {DW_LNS_copy} + + {DW_LNE_set_address line_label_5} + {DW_LNS_advance_line 1} + {DW_LNS_copy} + + {DW_LNE_set_address line_label_6} + {DW_LNS_advance_line 1} + {DW_LNS_negate_stmt} + {DW_LNS_copy} + + {DW_LNE_set_address line_label_7} + {DW_LNE_end_sequence} + } + } +} + +if { [prepare_for_testing "failed to prepare" ${testfile} \ + [list $srcfile $asm_file] $build_options] } { + return -1 +} + +if ![runto_main] { + return -1 +} + +# Delete all breakpoints so that the output of "info breakpoints" +# below will only contain a single breakpoint. +delete_breakpoints + +# Place a breakpoint within the function in the header file. +gdb_breakpoint "${srcfile4}:22" + +# Check that the breakpoint was placed where we expected. It should +# appear at the requested line. When the bug in GDB was present the +# breakpoint would be placed on one of the following lines instead. +gdb_test "info breakpoints" \ + ".* in callee at \[^\r\n\]+${srcfile4}:22\\y.*" + +gdb_continue_to_breakpoint "${srcfile4}:22" \ + ".* ${srcfile4} : 22 .*" + +# Now single instruction step forward. Eventually we should hit +# ${srcfile3}:20, but before we do we should hit the non-statement +# line ${srcfile3}:19. +# +# We don't know how many instructions we'll need to step, but 100 +# should be enough for everyone (surely), and this stops us looping +# forever if something goes wrong. +set found_line_19 0 +set found_line_20 0 +set keep_going 1 +for { set i 0 } { $i < 100 && $keep_going } { incr i } { + set keep_going 0 + gdb_test_multiple "stepi" "stepi ${i}" { + -re "${srcfile3} : 19 .*${gdb_prompt} " { + set found_line_19 1 + set keep_going 1 + } + + -re "${srcfile3} : 20 .*${gdb_prompt} " { + set found_line_20 1 + } + + -re "${srcfile4} : 22 .*${gdb_prompt} " { + # Not left line 22 yet. + set keep_going 1 + } + } +} + +gdb_assert { $found_line_19 && $found_line_20 } \ + "found line 19 and 20" diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-inline-header.c gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-inline-header.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-inline-header.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-inline-header.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,24 @@ +/* Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +/* dw2-inline-header.c : 16 */ +/* dw2-inline-header.c : 17 */ +/* dw2-inline-header.c : 18 */ +/* dw2-inline-header.c : 19 */ +/* dw2-inline-header.c : 20 */ +/* dw2-inline-header.c : 21 */ +/* dw2-inline-header.c : 22 */ +/* dw2-inline-header.c : 23 */ +/* dw2-inline-header.c : 24 */ diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-inline-header.h gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-inline-header.h --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-inline-header.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-inline-header.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,24 @@ +/* Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +/* dw2-inline-header.h : 16 */ +/* dw2-inline-header.h : 17 */ +/* dw2-inline-header.h : 18 */ +/* dw2-inline-header.h : 19 */ +/* dw2-inline-header.h : 20 */ +/* dw2-inline-header.h : 21 */ +/* dw2-inline-header.h : 22 */ +/* dw2-inline-header.h : 23 */ +/* dw2-inline-header.h : 24 */ diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-inline-header-lbls.c gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-inline-header-lbls.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-inline-header-lbls.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-inline-header-lbls.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,46 @@ +/* Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +/* Used to insert labels with which we can build a fake line table. */ +#define LL(N) asm ("line_label_" #N ": .globl line_label_" #N) + +volatile int var; +volatile int bar; + +/* Generate some code to take up some space. */ +#define FILLER do { \ + var = 99; \ +} while (0) + +int +main () +{ /* main prologue */ + asm ("main_label: .globl main_label"); + LL (1); // F1, Ln 16 + FILLER; + LL (2); // F1, Ln 17 + FILLER; + LL (3); // F2, Ln 21 + FILLER; + LL (4); // F2, Ln 22 // F1, Ln 18, !S + FILLER; + LL (5); // F1, Ln 19 !S + FILLER; + LL (6); // F1, Ln 20 + FILLER; + LL (7); + FILLER; + return 0; /* main end */ +} diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-inline-many-frames.c gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-inline-many-frames.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-inline-many-frames.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-inline-many-frames.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,158 @@ +/* Copyright 2019-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +/* This test sets up a call stack that looks like this: + + #11 #10 #9 #8 #7 #6 #5 #4 #3 #2 #1 #0 + main -> aaa -> bbb -> ccc -> ddd -> eee -> fff -> ggg -> hhh -> iii -> jjj -> kkk + \_______________________/ \________/ \______________________/ \________/ + Inline sequence #1 Normal Inline sequence #2 Normal + + We use the 'start' command to move into main, after that we 'step' + through each function until we are in kkk. We then use the 'up' command + to look back at each from to main. + + The test checks that we can handle and step through sequences of more + than one inline frame (so 'main .... ccc', and 'fff .... iii'), and also + that we can move around in a stack that contains more than one disjoint + sequence of inline frames. + + The order of the functions in this file is deliberately mixed up so that + the line numbers are not "all ascending" or "all descending" in the line + table. */ + +#define INLINE_FUNCTION __attribute__ ((always_inline)) static inline +#define NON_INLINE_FUNCTION __attribute__ ((noinline)) + +volatile int global_var = 0; + +INLINE_FUNCTION int aaa (); +INLINE_FUNCTION int bbb (); +INLINE_FUNCTION int ccc (); + +NON_INLINE_FUNCTION int ddd (); +NON_INLINE_FUNCTION int eee (); +NON_INLINE_FUNCTION int fff (); + +INLINE_FUNCTION int ggg (); +INLINE_FUNCTION int hhh (); +INLINE_FUNCTION int iii (); + +NON_INLINE_FUNCTION int jjj (); +NON_INLINE_FUNCTION int kkk (); + +INLINE_FUNCTION int +aaa () +{ /* aaa prologue */ + asm ("aaa_label: .globl aaa_label"); + return bbb () + 1; /* aaa return */ +} /* aaa end */ + +NON_INLINE_FUNCTION int +jjj () +{ /* jjj prologue */ + int ans; + asm ("jjj_label: .globl jjj_label"); + ans = kkk () + 1; /* jjj return */ + asm ("jjj_label2: .globl jjj_label2"); + return ans; +} /* jjj end */ + +INLINE_FUNCTION int +ggg () +{ /* ggg prologue */ + asm ("ggg_label: .globl ggg_label"); + return hhh () + 1; /* ggg return */ +} /* ggg end */ + +INLINE_FUNCTION int +ccc () +{ /* ccc prologue */ + asm ("ccc_label: .globl ccc_label"); + return ddd () + 1; /* ccc return */ +} /* ccc end */ + +NON_INLINE_FUNCTION int +fff () +{ /* fff prologue */ + int ans; + asm ("fff_label: .globl fff_label"); + ans = ggg () + 1; /* fff return */ + asm ("fff_label2: .globl fff_label2"); + return ans; +} /* fff end */ + +NON_INLINE_FUNCTION int +kkk () +{ /* kkk prologue */ + asm ("kkk_label: .globl kkk_label"); + return global_var; /* kkk return */ +} /* kkk end */ + +INLINE_FUNCTION int +bbb () +{ /* bbb prologue */ + asm ("bbb_label: .globl bbb_label"); + return ccc () + 1; /* bbb return */ +} /* bbb end */ + +INLINE_FUNCTION int +hhh () +{ /* hhh prologue */ + asm ("hh_label: .globl hhh_label"); + return iii () + 1; /* hhh return */ +} /* hhh end */ + +int +main () +{ /* main prologue */ + int ans; + asm ("main_label: .globl main_label"); + global_var = 0; /* main set global_var */ + asm ("main_label2: .globl main_label2"); + ans = aaa () + 1; /* main call aaa */ + asm ("main_label3: .globl main_label3"); + return ans; +} /* main end */ + +NON_INLINE_FUNCTION int +ddd () +{ /* ddd prologue */ + int ans; + asm ("ddd_label: .globl ddd_label"); + ans = eee () + 1; /* ddd return */ + asm ("ddd_label2: .globl ddd_label2"); + return ans; +} /* ddd end */ + +INLINE_FUNCTION int +iii () +{ /* iii prologue */ + int ans; + asm ("iii_label: .globl iii_label"); + ans = jjj () + 1; /* iii return */ + asm ("iii_label2: .globl iii_label2"); + return ans; +} /* iii end */ + +NON_INLINE_FUNCTION int +eee () +{ /* eee prologue */ + int ans; + asm ("eee_label: .globl eee_label"); + ans = fff () + 1; /* eee return */ + asm ("eee_label2: .globl eee_label2"); + return ans; +} /* eee end */ diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-inline-many-frames.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-inline-many-frames.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-inline-many-frames.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-inline-many-frames.exp 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,365 @@ +# Copyright 2019-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# This test shows the importance of not corrupting the order of line +# table information. When multiple lines are given for the same +# address the compiler usually lists these in the order in which we +# would expect to encounter them. When stepping through nested inline +# frames the last line given for an address is assumed by GDB to be +# the most inner frame, and this is what GDB displays. +# +# If we corrupt the order of the line table entries then GDB will +# display the wrong line as being the inner most frame. + +load_lib dwarf.exp + +# This test can only be run on targets which support DWARF-2 and use gas. +if {![dwarf2_support]} { + return 0 +} + +# The .c files use __attribute__. +if [get_compiler_info] { + return -1 +} +if !$gcc_compiled { + return 0 +} + +standard_testfile dw2-inline-many-frames.c dw2-inline-many-frames.S + +set asm_file [standard_output_file $srcfile2] +Dwarf::assemble $asm_file { + global srcdir subdir srcfile srcfile2 + declare_labels ranges_label lines_label + declare_labels aaa_label bbb_label ccc_label + declare_labels ggg_label hhh_label iii_label + + get_func_info main + get_func_info ddd + get_func_info eee + get_func_info fff + get_func_info jjj + get_func_info kkk + + set call_in_main [gdb_get_line_number "main call aaa"] + set call_in_aaa [gdb_get_line_number "aaa return"] + set call_in_bbb [gdb_get_line_number "bbb return"] + set call_in_ccc [gdb_get_line_number "ccc return"] + set call_in_fff [gdb_get_line_number "fff return"] + set call_in_ggg [gdb_get_line_number "ggg return"] + set call_in_hhh [gdb_get_line_number "hhh return"] + set call_in_iii [gdb_get_line_number "iii return"] + + cu {} { + compile_unit { + {language @DW_LANG_C} + {name dw2-inline-stepping.c} + {low_pc 0 addr} + {stmt_list ${lines_label} DW_FORM_sec_offset} + {ranges ${ranges_label} DW_FORM_sec_offset} + } { + subprogram { + {external 1 flag} + {name ddd} + {low_pc $ddd_start addr} + {high_pc "$ddd_start + $ddd_len" addr} + } + subprogram { + {external 1 flag} + {name eee} + {low_pc $eee_start addr} + {high_pc "$eee_start + $eee_len" addr} + } + subprogram { + {external 1 flag} + {name jjj} + {low_pc $jjj_start addr} + {high_pc "$jjj_start + $jjj_len" addr} + } + subprogram { + {external 1 flag} + {name kkk} + {low_pc $kkk_start addr} + {high_pc "$kkk_start + $kkk_len" addr} + } + aaa_label: subprogram { + {name aaa} + {inline 3 data1} + } + bbb_label: subprogram { + {name bbb} + {inline 3 data1} + } + ccc_label: subprogram { + {name ccc} + {inline 3 data1} + } + ggg_label: subprogram { + {name ggg} + {inline 3 data1} + } + hhh_label: subprogram { + {name hhh} + {inline 3 data1} + } + iii_label: subprogram { + {name iii} + {inline 3 data1} + } + subprogram { + {external 1 flag} + {name main} + {low_pc $main_start addr} + {high_pc "$main_start + $main_len" addr} + } { + inlined_subroutine { + {abstract_origin %$aaa_label} + {low_pc main_label2 addr} + {high_pc main_label3 addr} + {call_file 1 data1} + {call_line $call_in_main data1} + } { + inlined_subroutine { + {abstract_origin %$bbb_label} + {low_pc main_label2 addr} + {high_pc main_label3 addr} + {call_file 1 data1} + {call_line $call_in_aaa data1} + } { + inlined_subroutine { + {abstract_origin %$ccc_label} + {low_pc main_label2 addr} + {high_pc main_label3 addr} + {call_file 1 data1} + {call_line $call_in_bbb data1} + } + } + } + } + subprogram { + {external 1 flag} + {name fff} + {low_pc $fff_start addr} + {high_pc "$fff_start + $fff_len" addr} + } { + inlined_subroutine { + {abstract_origin %$ggg_label} + {low_pc fff_label addr} + {high_pc main_label2 addr} + {call_file 1 data1} + {call_line $call_in_fff data1} + } { + inlined_subroutine { + {abstract_origin %$hhh_label} + {low_pc fff_label addr} + {high_pc fff_label2 addr} + {call_file 1 data1} + {call_line $call_in_ggg data1} + } { + inlined_subroutine { + {abstract_origin %$iii_label} + {low_pc fff_label addr} + {high_pc fff_label2 addr} + {call_file 1 data1} + {call_line $call_in_hhh data1} + } + } + } + } + } + } + + lines {version 2} lines_label { + include_dir "${srcdir}/${subdir}" + file_name "$srcfile" 1 + + program { + {DW_LNE_set_address $main_start} + {line [gdb_get_line_number "main prologue"]} + {DW_LNS_copy} + {DW_LNE_set_address main_label} + {line [gdb_get_line_number "main set global_var"]} + {DW_LNS_copy} + {DW_LNE_set_address main_label2} + {line [gdb_get_line_number "main call aaa"]} + {DW_LNS_copy} + {DW_LNE_set_address main_label2} + {line [gdb_get_line_number "aaa return"]} + {DW_LNS_copy} + {DW_LNE_set_address main_label2} + {line [gdb_get_line_number "bbb return"]} + {DW_LNS_copy} + {DW_LNE_set_address main_label2} + {line [gdb_get_line_number "ccc return"]} + {DW_LNS_copy} + {DW_LNE_set_address main_label3} + {line [gdb_get_line_number "main end"]} + {DW_LNS_copy} + {DW_LNE_set_address $main_end} + {DW_LNE_end_sequence} + + {DW_LNE_set_address $ddd_start} + {line [gdb_get_line_number "ddd prologue"]} + {DW_LNS_copy} + {DW_LNE_set_address ddd_label} + {line [gdb_get_line_number "ddd return"]} + {DW_LNS_copy} + {DW_LNE_set_address ddd_label2} + {line [gdb_get_line_number "ddd end"]} + {DW_LNS_copy} + {DW_LNE_set_address $ddd_end} + {DW_LNE_end_sequence} + + {DW_LNE_set_address $eee_start} + {line [gdb_get_line_number "eee prologue"]} + {DW_LNS_copy} + {DW_LNE_set_address eee_label} + {line [gdb_get_line_number "eee return"]} + {DW_LNS_copy} + {DW_LNE_set_address eee_label2} + {line [gdb_get_line_number "eee end"]} + {DW_LNS_copy} + {DW_LNE_set_address $eee_end} + {DW_LNE_end_sequence} + + {DW_LNE_set_address $fff_start} + {line [gdb_get_line_number "fff prologue"]} + {DW_LNS_copy} + {DW_LNE_set_address fff_label} + {line [gdb_get_line_number "fff return"]} + {DW_LNS_copy} + {DW_LNE_set_address fff_label} + {line [gdb_get_line_number "ggg return"]} + {DW_LNS_copy} + {DW_LNE_set_address fff_label} + {line [gdb_get_line_number "hhh return"]} + {DW_LNS_copy} + {DW_LNE_set_address fff_label} + {line [gdb_get_line_number "iii return"]} + {DW_LNS_copy} + {DW_LNE_set_address fff_label2} + {line [gdb_get_line_number "fff end"]} + {DW_LNS_copy} + {DW_LNE_set_address $fff_end} + {DW_LNE_end_sequence} + + {DW_LNE_set_address $jjj_start} + {line [gdb_get_line_number "jjj prologue"]} + {DW_LNS_copy} + {DW_LNE_set_address jjj_label} + {line [gdb_get_line_number "jjj return"]} + {DW_LNS_copy} + {DW_LNE_set_address jjj_label2} + {line [gdb_get_line_number "jjj end"]} + {DW_LNS_copy} + {DW_LNE_set_address $jjj_end} + {DW_LNE_end_sequence} + + {DW_LNE_set_address $kkk_start} + {line [gdb_get_line_number "kkk prologue"]} + {DW_LNS_copy} + {DW_LNE_set_address kkk_label} + {line [gdb_get_line_number "kkk return"]} + {DW_LNS_copy} + {DW_LNE_set_address $kkk_end} + {DW_LNE_end_sequence} + } + } + + ranges {is_64 [is_64_target]} { + ranges_label: sequence { + {range {${main_start}} ${main_end}} + {range {${ddd_start}} ${ddd_end}} + {range {${eee_start}} ${eee_end}} + {range {${fff_start}} ${fff_end}} + {range {${jjj_start}} ${jjj_end}} + {range {${kkk_start}} ${kkk_end}} + } + } +} + +if { [prepare_for_testing "failed to prepare" ${testfile} \ + [list $srcfile $asm_file] {nodebug}] } { + return -1 +} + +if ![runto_main] { + return -1 +} + +# First we step through all of the functions until we get the 'kkk'. +set patterns [list "main call aaa" \ + "aaa return" \ + "bbb return" \ + "ccc return" \ + "ddd return" \ + "eee return" \ + "fff return" \ + "ggg return" \ + "hhh return" \ + "iii return" \ + "jjj return" \ + "kkk return" ] +foreach p $patterns { + gdb_test "step" "/\\* $p \\*/" \ + "step to '$p'" +} + +# Now check the backtrace. +set line_in_main [gdb_get_line_number "main call aaa"] +set line_in_aaa [gdb_get_line_number "aaa return"] +set line_in_bbb [gdb_get_line_number "bbb return"] +set line_in_ccc [gdb_get_line_number "ccc return"] +set line_in_ddd [gdb_get_line_number "ddd return"] +set line_in_eee [gdb_get_line_number "eee return"] +set line_in_fff [gdb_get_line_number "fff return"] +set line_in_ggg [gdb_get_line_number "ggg return"] +set line_in_hhh [gdb_get_line_number "hhh return"] +set line_in_iii [gdb_get_line_number "iii return"] +set line_in_jjj [gdb_get_line_number "jjj return"] +set line_in_kkk [gdb_get_line_number "kkk return"] + +gdb_test "bt" [multi_line \ + "#0 kkk \\(\\) at \[^\r\n\]+${srcfile}:${line_in_kkk}" \ + "#1 $hex in jjj \\(\\) at \[^\r\n\]+${srcfile}:${line_in_jjj}" \ + "#2 $hex in iii \\(\\) at \[^\r\n\]+${srcfile}:${line_in_iii}" \ + "#3 hhh \\(\\) at \[^\r\n\]+${srcfile}:${line_in_hhh}" \ + "#4 ggg \\(\\) at \[^\r\n\]+${srcfile}:${line_in_ggg}" \ + "#5 fff \\(\\) at \[^\r\n\]+${srcfile}:${line_in_fff}" \ + "#6 $hex in eee \\(\\) at \[^\r\n\]+${srcfile}:${line_in_eee}" \ + "#7 $hex in ddd \\(\\) at \[^\r\n\]+${srcfile}:${line_in_ddd}" \ + "#8 $hex in ccc \\(\\) at \[^\r\n\]+${srcfile}:${line_in_ccc}" \ + "#9 bbb \\(\\) at \[^\r\n\]+${srcfile}:${line_in_bbb}" \ + "#10 aaa \\(\\) at \[^\r\n\]+${srcfile}:${line_in_aaa}" \ + "#11 main \\(\\) at \[^\r\n\]+${srcfile}:${line_in_main}" ] + +# Now check we can use 'up' to inspect each frame correctly. +set patterns [list \ + "jjj return" \ + "iii return" \ + "hhh return" \ + "ggg return" \ + "fff return" \ + "eee return" \ + "ddd return" \ + "ccc return" \ + "bbb return" \ + "aaa return" \ + "main call aaa" ] +foreach p $patterns { + gdb_test "up" "/\\* $p \\*/" \ + "up to '$p'" +} diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-inline-param.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-inline-param.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-inline-param.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-inline-param.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-inline-param-main.c gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-inline-param-main.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-inline-param-main.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-inline-param-main.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-inline-param.S gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-inline-param.S --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-inline-param.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-inline-param.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-inline-small-func.c gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-inline-small-func.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-inline-small-func.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-inline-small-func.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,22 @@ +/* Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "dw2-inline-small-func.h" + +int +main () +{ /* caller: before call. */ + callee (); /* caller: the call. */ +} /* caller: after call. */ diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-inline-small-func.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-inline-small-func.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-inline-small-func.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-inline-small-func.exp 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,144 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Check for an issue in GDB where buildsym_compunit::record_line was +# removing duplicate line table entries, but skip_prologue_using_sal +# depends on these duplicates to spot the end of the prologue. +# +# When the de-duplication was added this regression was not spotted as +# it requires a particular combination of a (very) small function +# being inlined into an also very small outer function. +# +# This test recreates the exact combination of line table entries that +# were seen in the original test using the Dejagnu DWARF compiler. + +load_lib dwarf.exp + +# This test can only be run on targets which support DWARF-2 and use gas. +if {![dwarf2_support]} { + return 0 +} + +# The .c files use __attribute__. +if [get_compiler_info] { + return -1 +} +if !$gcc_compiled { + return 0 +} + +standard_testfile dw2-inline-small-func-lbls.c dw2-inline-small-func.S \ + dw2-inline-small-func.c dw2-inline-small-func.h + +set asm_file [standard_output_file $srcfile2] +Dwarf::assemble $asm_file { + global srcdir subdir srcfile srcfile3 srcfile4 + declare_labels lines_label callee_subprog_label + + get_func_info main {debug optimize=-O1} + + cu {} { + # It is important that the producer here be 'clang' as, at the + # time of writing this, GCC for x86-64 doesn't make use of + # skip_prologue_using_sal, while clang does. + compile_unit { + {producer "clang xxxx" } + {language @DW_LANG_C} + {name ${srcfile3}} + {low_pc 0 addr} + {stmt_list ${lines_label} DW_FORM_sec_offset} + } { + callee_subprog_label: subprogram { + {external 1 flag} + {name callee} + {inline 3 data1} + } + subprogram { + {external 1 flag} + {name main} + {low_pc $main_start addr} + {high_pc "$main_start + $main_len" addr} + } { + inlined_subroutine { + {abstract_origin %$callee_subprog_label} + {low_pc line_label_1 addr} + {high_pc line_label_2 addr} + {call_file 1 data1} + {call_line 21 data1} + } + } + } + } + + lines {version 2 default_is_stmt 1} lines_label { + include_dir "${srcdir}/${subdir}" + file_name "$srcfile3" 1 + file_name "$srcfile4" 1 + + set f1_l1 [gdb_get_line_number "caller: before call" $srcfile3] + set f1_l2 [gdb_get_line_number "caller: the call" $srcfile3] + set f1_l3 [gdb_get_line_number "caller: after call" $srcfile3] + + set f2_l1 [gdb_get_line_number "callee: body" $srcfile4] + + program { + {DW_LNE_set_address line_label_1} + {line $f1_l1} + {DW_LNS_copy} + + {line ${f1_l2}} + {DW_LNS_copy} + + {DW_LNS_set_file 2} + {line ${f2_l1}} + {DW_LNS_copy} + + {DW_LNS_negate_stmt} + {DW_LNS_copy} + + {DW_LNS_set_file 1} + {DW_LNE_set_address line_label_2} + {line ${f1_l3}} + {DW_LNS_copy} + + {DW_LNE_set_address line_label_3} + {DW_LNS_copy} + {DW_LNE_end_sequence} + } + } +} + +if { [prepare_for_testing "failed to prepare" ${testfile} \ + [list $srcfile $asm_file] {nodebug optimize=-O1}] } { + return -1 +} + +if ![runto_main] { + return -1 +} + +# Delete all breakpoints so that the output of "info breakpoints" +# below will only contain a single breakpoint. +delete_breakpoints + +# Place a breakpoint within the function in the header file. +set linenum [gdb_get_line_number "callee: body" $srcfile4] +gdb_breakpoint "${srcfile4}:${linenum}" + +# Check that the breakpoint was placed where we expected. It should +# appear at the requested line. When the bug in GDB was present the +# breakpoint would be placed on one of the following lines instead. +gdb_test "info breakpoints" \ + ".* in callee at \[^\r\n\]+${srcfile4}:${linenum}\\y.*" diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-inline-small-func.h gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-inline-small-func.h --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-inline-small-func.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-inline-small-func.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,21 @@ +/* Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +int counter = 42; + +inline void +callee () { + counter = 0; /* callee: body. */ +} diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-inline-small-func-lbls.c gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-inline-small-func-lbls.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-inline-small-func-lbls.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-inline-small-func-lbls.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,37 @@ +/* Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +/* Used to insert labels with which we can build a fake line table. */ +#define LL(N) asm ("line_label_" #N ": .globl line_label_" #N) + +volatile int var; +volatile int bar; + +/* Generate some code to take up some space. */ +#define FILLER do { \ + var = 99; \ +} while (0) + +int +main () +{ /* main prologue */ + asm ("main_label: .globl main_label"); + LL (1); + FILLER; + LL (2); + FILLER; + LL (3); + return 0; /* main end */ +} diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-inline-stepping.c gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-inline-stepping.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-inline-stepping.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-inline-stepping.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,45 @@ +/* Copyright 2019-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +/* This test relies on foo being inlined into main and bar not being + inlined. The test is checking GDB's behaviour as we single step from + main through foo and into bar. */ + +volatile int global_var; + +int __attribute__ ((noinline)) +bar () +{ /* bar prologue */ + asm ("bar_label: .globl bar_label"); + return global_var; /* bar return global_var */ +} /* bar end */ + +static inline int __attribute__ ((always_inline)) +foo () +{ /* foo prologue */ + return bar (); /* foo call bar */ +} /* foo end */ + +int +main () +{ /* main prologue */ + int ans; + asm ("main_label: .globl main_label"); + global_var = 0; /* main set global_var */ + asm ("main_label2: .globl main_label2"); + ans = foo (); /* main call foo */ + asm ("main_label3: .globl main_label3"); + return ans; +} /* main end */ diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-inline-stepping.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-inline-stepping.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-inline-stepping.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-inline-stepping.exp 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,146 @@ +# Copyright 2019-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# This test shows the importance of not corrupting the order of line +# table information. When multiple lines are given for the same +# address the compiler usually lists these in the order in which we +# would expect to encounter them. When stepping through nested inline +# frames the last line given for an address is assumed by GDB to be +# the most inner frame, and this is what GDB displays. +# +# If we corrupt the order of the line table entries then GDB will +# display the wrong line as being the inner most frame. + +load_lib dwarf.exp + +# This test can only be run on targets which support DWARF-2 and use gas. +if {![dwarf2_support]} { + return 0 +} + +# The .c files use __attribute__. +if [get_compiler_info] { + return -1 +} +if !$gcc_compiled { + return 0 +} + +standard_testfile dw2-inline-stepping.c dw2-inline-stepping.S + +set asm_file [standard_output_file $srcfile2] +Dwarf::assemble $asm_file { + global srcdir subdir srcfile srcfile2 + declare_labels ranges_label lines_label foo_prog + + lassign [function_range main [list ${srcdir}/${subdir}/$srcfile]] \ + main_start main_len + set main_end "$main_start + $main_len" + lassign [function_range bar [list ${srcdir}/${subdir}/$srcfile]] \ + bar_start bar_len + set bar_end "$bar_start + $bar_len" + + set call_line [gdb_get_line_number "main call foo"] + + cu {} { + compile_unit { + {language @DW_LANG_C} + {name dw2-inline-stepping.c} + {low_pc 0 addr} + {stmt_list ${lines_label} DW_FORM_sec_offset} + {ranges ${ranges_label} DW_FORM_sec_offset} + } { + subprogram { + {external 1 flag} + {name bar} + {low_pc $bar_start addr} + {high_pc "$bar_start + $bar_len" addr} + } + foo_prog: subprogram { + {name foo} + {inline 3 data1} + } + subprogram { + {external 1 flag} + {name main} + {low_pc $main_start addr} + {high_pc "$main_start + $main_len" addr} + } { + inlined_subroutine { + {abstract_origin %$foo_prog} + {low_pc main_label2 addr} + {high_pc main_label3 addr} + {call_file 1 data1} + {call_line $call_line data1} + } + } + } + } + + lines {version 2} lines_label { + include_dir "${srcdir}/${subdir}" + file_name "$srcfile" 1 + + program { + {DW_LNE_set_address $main_start} + {line [gdb_get_line_number "main prologue"]} + {DW_LNS_copy} + {DW_LNE_set_address main_label} + {line [gdb_get_line_number "main set global_var"]} + {DW_LNS_copy} + {DW_LNE_set_address main_label2} + {line [gdb_get_line_number "main call foo"]} + {DW_LNS_copy} + {DW_LNE_set_address main_label2} + {line [gdb_get_line_number "foo call bar"]} + {DW_LNS_copy} + {DW_LNE_set_address $main_end} + {DW_LNE_end_sequence} + + {DW_LNE_set_address $bar_start} + {line [gdb_get_line_number "bar prologue"]} + {DW_LNS_copy} + {DW_LNE_set_address bar_label} + {line [gdb_get_line_number "bar return global_var"]} + {DW_LNS_copy} + {DW_LNE_set_address $bar_end} + {DW_LNE_end_sequence} + } + } + + ranges {is_64 [is_64_target]} { + ranges_label: sequence { + {range {${main_start}} ${main_end}} + {range {${bar_start}} ${bar_end}} + } + } +} + +if { [prepare_for_testing "failed to prepare" ${testfile} \ + [list $srcfile $asm_file] {nodebug}] } { + return -1 +} + +if ![runto_main] { + return -1 +} + +set patterns [list "main call foo" \ + "foo call bar" \ + "bar return global_var"] +foreach p $patterns { + gdb_test "step" "/\\* $p \\*/" \ + "step to '$p'" +} diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-intercu.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-intercu.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-intercu.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-intercu.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2004-2020 Free Software Foundation, Inc. +# Copyright 2004-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-intercu.S gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-intercu.S --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-intercu.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-intercu.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2004-2020 Free Software Foundation, Inc. + Copyright 2004-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-intermix.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-intermix.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-intermix.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-intermix.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2005-2020 Free Software Foundation, Inc. +# Copyright 2005-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-intermix.S gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-intermix.S --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-intermix.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-intermix.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2005-2020 Free Software Foundation, Inc. + Copyright 2005-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-is-stmt-2.c gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-is-stmt-2.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-is-stmt-2.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-is-stmt-2.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,99 @@ +/* Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +/* This tests GDB's handling of the DWARF is-stmt field in the line table. + + This field is used when many addresses all represent the same source + line. The address(es) at which it is suitable to place a breakpoint for + a line are marked with is-stmt true, while address(es) that are not good + places to place a breakpoint are marked as is-stmt false. + + In order to build a reproducible test and exercise GDB's is-stmt + support, we will be generating our own DWARF. The test will contain a + series of C source lines, ensuring that we get a series of assembler + instructions. Each C source line will be given an assembler label, + which we use to generate a fake line table. + + In this fake line table each assembler block is claimed to represent a + single C source line, however, we will toggle the is-stmt flag. We can + then debug this with GDB and test the handling of is-stmt. */ + +/* Used to insert labels with which we can build a fake line table. */ +#define LL(N) \ + do \ + { \ + asm ("line_label_" #N ": .globl line_label_" #N); \ + var = (N); \ + bar = ((N) + 1); \ + } \ + while (0) + +volatile int var; +volatile int bar; + +int +main () +{ /* main prologue */ + asm ("main_label: .globl main_label"); + + /* main start */ + + /* Line 1. */ + /* Line 2. */ + /* Line 3. */ + /* Line 4. */ + /* Line 5. */ + + LL (0); + LL (1); + LL (2); + LL (3); + LL (4); + LL (5); + LL (6); + LL (7); + LL (8); + LL (9); + LL (10); + LL (11); + LL (12); + LL (13); + LL (14); + LL (15); + LL (16); + return 0; /* main end */ +} + +#if 0 + +PROLOGUE* +1: L1 +2: L1* +3: L2 +4: L1 +L3 +L4 +L4* +L2* +L2 +L3 +L5 +L5* +L3 +L4 +L5 +RETURN + +#endif diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-is-stmt-2.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-is-stmt-2.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-is-stmt-2.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-is-stmt-2.exp 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,224 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# This test shows the importance of not corrupting the order of line +# table information. When multiple lines are given for the same +# address the compiler usually lists these in the order in which we +# would expect to encounter them. When stepping through nested inline +# frames the last line given for an address is assumed by GDB to be +# the most inner frame, and this is what GDB displays. +# +# If we corrupt the order of the line table entries then GDB will +# display the wrong line as being the inner most frame. + +load_lib dwarf.exp + +# This test can only be run on targets which support DWARF-2 and use gas. +if {![dwarf2_support]} { + return 0 +} + +# The .c files use __attribute__. +if [get_compiler_info] { + return -1 +} +if !$gcc_compiled { + return 0 +} + +standard_testfile dw2-is-stmt-2.c dw2-is-stmt-2.S + +set asm_file [standard_output_file $srcfile2] +Dwarf::assemble $asm_file { + global srcdir subdir srcfile + declare_labels lines_label + + get_func_info main + + cu {} { + compile_unit { + {language @DW_LANG_C} + {name dw2-is-stmt.c} + {low_pc 0 addr} + {stmt_list ${lines_label} DW_FORM_sec_offset} + } { + subprogram { + {external 1 flag} + {name main} + {low_pc $main_start addr} + {high_pc "$main_start + $main_len" addr} + } {} + } + } + + lines {version 2 default_is_stmt 1} lines_label { + include_dir "${srcdir}/${subdir}" + file_name "$srcfile" 1 + + program { + {DW_LNE_set_address main} + {line [gdb_get_line_number "main prologue"]} + {DW_LNS_copy} + + {DW_LNE_set_address line_label_0} + {line [gdb_get_line_number "main start"]} + {DW_LNS_copy} + + {DW_LNE_set_address line_label_1} + {line [gdb_get_line_number "Line 1"]} + {DW_LNS_negate_stmt} + {DW_LNS_copy} + + {DW_LNE_set_address line_label_2} + {DW_LNS_negate_stmt} + {DW_LNS_copy} + + {DW_LNE_set_address line_label_3} + {line [gdb_get_line_number "Line 2"]} + {DW_LNS_negate_stmt} + {DW_LNS_copy} + + {DW_LNE_set_address line_label_4} + {line [gdb_get_line_number "Line 1"]} + {DW_LNS_copy} + + {DW_LNE_set_address line_label_5} + {line [gdb_get_line_number "Line 3"]} + {DW_LNS_copy} + + {DW_LNE_set_address line_label_6} + {line [gdb_get_line_number "Line 4"]} + {DW_LNS_copy} + + {DW_LNE_set_address line_label_7} + {DW_LNS_negate_stmt} + {DW_LNS_copy} + + {DW_LNE_set_address line_label_8} + {line [gdb_get_line_number "Line 2"]} + {DW_LNS_copy} + + {DW_LNE_set_address line_label_9} + {DW_LNS_negate_stmt} + {DW_LNS_copy} + + {DW_LNE_set_address line_label_10} + {line [gdb_get_line_number "Line 3"]} + {DW_LNS_copy} + + {DW_LNE_set_address line_label_11} + {line [gdb_get_line_number "Line 5"]} + {DW_LNS_copy} + + {DW_LNE_set_address line_label_12} + {DW_LNS_negate_stmt} + {DW_LNS_copy} + + {DW_LNE_set_address line_label_13} + {line [gdb_get_line_number "Line 3"]} + {DW_LNS_copy} + + {DW_LNE_set_address line_label_14} + {line [gdb_get_line_number "Line 4"]} + {DW_LNS_negate_stmt} + {DW_LNS_copy} + + {DW_LNE_set_address line_label_15} + {line [gdb_get_line_number "Line 5"]} + {DW_LNS_copy} + + {DW_LNE_set_address line_label_16} + {line [gdb_get_line_number "main end"]} + {DW_LNS_negate_stmt} + {DW_LNS_copy} + + {DW_LNE_set_address ${main_end}} + {DW_LNE_end_sequence} + } + } +} + +if { [prepare_for_testing "failed to prepare" ${testfile} \ + [list $srcfile $asm_file] {nodebug}] } { + return -1 +} + +if ![runto_main] { + return -1 +} + +# Check stepping through the out of order lines gives the experience +# we expect; lines in the correct order, and stop at the correct +# labels.Q +set locs { { "Line 1." "line_label_2" } \ + { "Line 4." "line_label_7" } \ + { "Line 2." "line_label_8" } \ + { "Line 5." "line_label_12" } \ + { "Line 3." "line_label_13" } } +foreach entry $locs { + set pattern [lindex $entry 0] + set label [lindex $entry 1] + + set linum [gdb_get_line_number "$pattern"] + gdb_test "step" "\r\n$linum\[ \t\]+/\\* $pattern \\*/" \ + "step to $pattern" + + set pc [get_hexadecimal_valueof "\$pc" "NO-PC" \ + "read \$pc at $pattern"] + set val [get_hexadecimal_valueof "&${label}" "INVALID"] + gdb_assert { $pc == $val } \ + "check pc at $pattern" +} + +# Now restart the test, and this time, single instruction step +# through. This is checking that the is-stmt marked lines are +# displayed differently (without addresses) to addresses that are +# mid-way through a line, or not marked as is-stmt. +clean_restart $binfile +runto_main + +foreach entry $locs { + set pattern [lindex $entry 0] + set label [lindex $entry 1] + + with_test_prefix "stepi to $label" { + # If can take many instruction steps to get to the next label. + set i 0 + set pc [get_hexadecimal_valueof "\$pc" "NO-PC" ] + set val [get_hexadecimal_valueof "&${label}" "INVALID"] + while { $pc < $val } { + incr i + set line_changed -1 + gdb_test_multiple "stepi" "stepi $i" { + -re "\r\n$hex\[ \t\]+$decimal\[^\r\n\]+\r\n$gdb_prompt" { + set line_changed 0 + } + -re "\r\n$decimal\[ \t\]+/\\* $pattern \\*/\r\n$gdb_prompt" { + set line_changed 1 + } + } + gdb_assert { $line_changed != -1 } \ + "ensure we saw a valid pattern, $i" + set pc [get_hexadecimal_valueof "\$pc" "NO-PC" \ + "get pc inside stepi loop, $i"] + if { $pc == $val } { + gdb_assert { $line_changed } \ + "line must change at $label" + } else { + gdb_assert { !$line_changed } "same line $i" + } + } + } +} diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-is-stmt.c gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-is-stmt.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-is-stmt.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-is-stmt.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,61 @@ +/* Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +/* This tests GDB's handling of the DWARF is-stmt field in the line table. + + This field is used when many addresses all represent the same source + line. The address(es) at which it is suitable to place a breakpoint for + a line are marked with is-stmt true, while address(es) that are not good + places to place a breakpoint are marked as is-stmt false. + + In order to build a reproducible test and exercise GDB's is-stmt + support, we will be generating our own DWARF. The test will contain a + series of C source lines, ensuring that we get a series of assembler + instructions. Each C source line will be given an assembler label, + which we use to generate a fake line table. + + In this fake line table each assembler block is claimed to represent a + single C source line, however, we will toggle the is-stmt flag. We can + then debug this with GDB and test the handling of is-stmt. */ + +/* Used to insert labels with which we can build a fake line table. */ +#define LL(N) asm ("line_label_" #N ": .globl line_label_" #N) + +volatile int var; +volatile int bar; + +int +main () +{ /* main prologue */ + asm ("main_label: .globl main_label"); + LL (1); + var = 99; /* main, set var to 99 */ + bar = 99; + + LL (2); + var = 0; /* main, set var to 0 */ + bar = 0; + + LL (3); + var = 1; /* main, set var to 1 */ + bar = 1; + + LL (4); + var = 2; /* main, set var to 2 */ + bar = 2; + + LL (5); + return 0; /* main end */ +} diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-is-stmt.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-is-stmt.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-is-stmt.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-is-stmt.exp 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,246 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# This test shows the importance of not corrupting the order of line +# table information. When multiple lines are given for the same +# address the compiler usually lists these in the order in which we +# would expect to encounter them. When stepping through nested inline +# frames the last line given for an address is assumed by GDB to be +# the most inner frame, and this is what GDB displays. +# +# If we corrupt the order of the line table entries then GDB will +# display the wrong line as being the inner most frame. + +load_lib dwarf.exp + +# This test can only be run on targets which support DWARF-2 and use gas. +if {![dwarf2_support]} { + return 0 +} + +# The .c files use __attribute__. +if [get_compiler_info] { + return -1 +} +if !$gcc_compiled { + return 0 +} + +standard_testfile dw2-is-stmt.c dw2-is-stmt.S + +set asm_file [standard_output_file $srcfile2] +Dwarf::assemble $asm_file { + global srcdir subdir srcfile + declare_labels lines_label + + get_func_info main + + cu {} { + compile_unit { + {language @DW_LANG_C} + {name dw2-is-stmt.c} + {low_pc 0 addr} + {stmt_list ${lines_label} DW_FORM_sec_offset} + } { + subprogram { + {external 1 flag} + {name main} + {low_pc $main_start addr} + {high_pc "$main_start + $main_len" addr} + } {} + } + } + + lines {version 2 default_is_stmt 0} lines_label { + include_dir "${srcdir}/${subdir}" + file_name "$srcfile" 1 + + program { + {DW_LNE_set_address main} + {line [gdb_get_line_number "main prologue"]} + {DW_LNS_negate_stmt} + {DW_LNS_copy} + + {DW_LNE_set_address line_label_1} + {line [gdb_get_line_number "main, set var to 99"]} + {DW_LNS_copy} + + {DW_LNE_set_address line_label_2} + {line [gdb_get_line_number "main, set var to 0"]} + {DW_LNS_negate_stmt} + {DW_LNS_copy} + + {DW_LNE_set_address line_label_3} + {DW_LNS_negate_stmt} + {DW_LNS_copy} + + {DW_LNE_set_address line_label_4} + {DW_LNS_negate_stmt} + {DW_LNS_copy} + + {DW_LNE_set_address line_label_5} + {line [gdb_get_line_number "main end"]} + {DW_LNS_negate_stmt} + {DW_LNS_copy} + + {DW_LNE_set_address ${main_end}} + {DW_LNE_end_sequence} + } + } +} + +if { [prepare_for_testing "failed to prepare" ${testfile} \ + [list $srcfile $asm_file] {nodebug}] } { + return -1 +} + +if ![runto_main] { + return -1 +} + +# First, break by address at a location we know is marked as not a +# statement. GDB should still correctly report the file and line +# number. +gdb_breakpoint "*line_label_2" +gdb_continue_to_breakpoint "*line_label_2" + +# Now step by instruction. We should skip over the is-stmt location +# for this line, and land on the next source line. +gdb_test "step" "/\\* main end \\*/" \ + "step to end from line_label_2" + +# Restart the test. This time, stop at a location we know is marked +# as a statement. +clean_restart ${binfile} +runto_main + +gdb_breakpoint "*line_label_3" +gdb_continue_to_breakpoint "*line_label_3" + +# Now step by instruction. As you would expect we should leave this +# line and stop at the next source line. +gdb_test "step" "/\\* main end \\*/" \ + "step to end from line_label_3" + +# Restart the test, this time, step through line by line, ensure we +# only stop at the places where is-stmt is true. +clean_restart ${binfile} +runto_main + +# Get the values of the labels where we expect to stop. +set ll1 [get_hexadecimal_valueof "&line_label_1" "INVALID"] +set ll2 [get_hexadecimal_valueof "&line_label_2" "INVALID"] +set ll3 [get_hexadecimal_valueof "&line_label_3" "INVALID"] +set ll5 [get_hexadecimal_valueof "&line_label_5" "INVALID"] + +# The first stop should be at line_label_1 +with_test_prefix "check we're at line_label_1" { + set pc [get_hexadecimal_valueof "\$pc" "NO-PC"] + gdb_assert { $ll1 == $pc } "check initial \$pc is line_label_1" +} + +# Now step, this should take us to line_label_3 which is the next +# location marked as is-stmt. +with_test_prefix "step to line_label_3" { + gdb_test "step" "/\\* main, set var to 0 \\*/" + set pc [get_hexadecimal_valueof "\$pc" "NO-PC"] + gdb_assert { $ll3 == $pc } "check initial \$pc is line_label_3" +} + +# A final step should take us to line_label_5. +with_test_prefix "step to line_label_5" { + gdb_test "step" "/\\* main end \\*/" + set pc [get_hexadecimal_valueof "\$pc" "NO-PC"] + gdb_assert { $ll5 == $pc } "check initial \$pc" +} + +# Now restart the test, and place a breakpoint by line number. GDB +# should select the location that is marked as is-stmt. +clean_restart ${binfile} +runto_main +set linum [gdb_get_line_number "main, set var to 0"] +gdb_breakpoint "$srcfile:$linum" +gdb_continue_to_breakpoint "Breakpoint on line, set var to 0" +set pc [get_hexadecimal_valueof "\$pc" "NO-PC"] +gdb_assert { $ll3 == $pc } "check initial \$pc" + +# Restart the test again, this time we will test stepping by +# instruction. +clean_restart ${binfile} +runto_main + +# We will be at line_label_1 at this point - we already tested this +# above. Now single instruction step forward until we get to +# line_label_2. Every instruction before line_label_2 should be +# attributed to the 'var = 99' line. For most targets there will only +# be a single instruction between line_label_1 and line_label_2, but +# we allow for up to 25 (just a random number). + +set $i 0 +set pc [get_hexadecimal_valueof "\$pc" "NO-PC" \ + "get pc before stepi loop at line_label_1"] +while { $pc < $ll2 } { + incr i + set line_changed -1 + gdb_test_multiple "stepi" "stepi until line_label_2, $i" { + -re "main, set var to 99.*$gdb_prompt" { + set line_changed 0 + } + -re "main, set var to 0.*$gdb_prompt " { + set line_changed 1 + } + } + gdb_assert { $line_changed != -1 } \ + "ensure we saw a valid line pattern, $i" + set pc [get_hexadecimal_valueof "\$pc" "NO-PC" \ + "get pc inside stepi loop from line_label_1, $i"] + if { $ll2 == $pc } { + gdb_assert { $line_changed } \ + "line must change at line_label_2" + } else { + gdb_assert { !$line_changed } \ + "line should not change until line_label_2, $i" + } +} + +# Now single instruction step forward until GDB reports a new source +# line, at which point we should be at line_label_5. + +set $i 0 +set pc [get_hexadecimal_valueof "\$pc" "NO-PC" \ + "get pc before stepi loop at line_label_2"] +while { $pc < $ll5 } { + incr i + set line_changed -1 + gdb_test_multiple "stepi" "stepi until line_label_5, $i" { + -re "main, set var to 0.*$gdb_prompt" { + set line_changed 0 + } + -re "main end.*$gdb_prompt " { + set line_changed 1 + } + } + gdb_assert { $line_changed != -1 } \ + "ensure we saw a valid line pattern, $i" + set pc [get_hexadecimal_valueof "\$pc" "NO-PC" \ + "get pc inside stepi loop from line_label_2, $i"] + if { $ll5 == $pc } { + gdb_assert { $line_changed } \ + "line must change at line_label_5" + } else { + gdb_assert { !$line_changed } \ + "line should not change until line_label_5, $i" + } +} diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-lexical-block-bare.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-lexical-block-bare.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-lexical-block-bare.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-lexical-block-bare.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2016-2020 Free Software Foundation, Inc. +# Copyright 2016-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -19,21 +19,14 @@ return 0 } -standard_testfile .S main.c +standard_testfile main.c .S # Make some DWARF for the test. -set asm_file [standard_output_file $srcfile] +set asm_file [standard_output_file $srcfile2] Dwarf::assemble $asm_file { - global srcdir subdir srcfile2 - - set main_result [function_range main ${srcdir}/${subdir}/${srcfile2}] - set main_start [lindex $main_result 0] - set main_length [lindex $main_result 1] - cu {} { compile_unit { - {low_pc $main_start addr} - {high_pc "$main_start + $main_length" addr} + {MACRO_AT_range {main}} } { declare_labels integer_label @@ -44,10 +37,8 @@ } DW_TAG_subprogram { - {name main} + {MACRO_AT_func {main}} {DW_AT_external 1 flag} - {low_pc $main_start addr} - {high_pc "$main_start + $main_length" addr} } { DW_TAG_lexical_block { } { @@ -66,7 +57,7 @@ } if { [prepare_for_testing "failed to prepare" ${testfile} \ - [list $srcfile2 $asm_file] {nodebug}] } { + [list $srcfile $asm_file] {nodebug}] } { return -1 } diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-line-number-zero.c gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-line-number-zero.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-line-number-zero.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-line-number-zero.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,62 @@ +/* + Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +void +foo (int x) +{ + +} + +void +bar1 (void) +{ + asm ("bar1_label: .globl bar1_label"); + foo (1); + asm ("bar1_label_2: .globl bar1_label_2"); + foo (2); + asm ("bar1_label_3: .globl bar1_label_3"); + foo (3); + asm ("bar1_label_4: .globl bar1_label_4"); + foo (4); + asm ("bar1_label_5: .globl bar1_label_5"); +} + +void +bar2 (void) +{ + asm ("bar2_label: .globl bar2_label"); + foo (1); + asm ("bar2_label_2: .globl bar2_label_2"); + foo (2); + asm ("bar2_label_3: .globl bar2_label_3"); + foo (3); + asm ("bar2_label_4: .globl bar2_label_4"); + foo (4); + asm ("bar2_label_5: .globl bar2_label_5"); +} + +int +main (void) +{ + asm ("main_label: .globl main_label"); + + bar1 (); + + bar2 (); + + return 0; +} + diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-line-number-zero.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-line-number-zero.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-line-number-zero.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-line-number-zero.exp 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,140 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +load_lib dwarf.exp + +# This test can only be run on targets which support DWARF-2 and use gas. +if {![dwarf2_support]} { + verbose "Skipping dw2-line-number-zero test." + return 0 +} + +# The .c files use __attribute__. +if [get_compiler_info] { + return -1 +} +if !$gcc_compiled { + verbose "Skipping dw2-line-number-zero test." + return 0 +} + +standard_testfile .c dw2-line-number-zero-dw.S + +set asm_file [standard_output_file $srcfile2] +Dwarf::assemble $asm_file { + declare_labels Llines + global srcdir subdir srcfile + + cu {} { + compile_unit { + {language @DW_LANG_C} + {name dw2-line-number-zero.c} + {stmt_list $Llines DW_FORM_sec_offset} + } { + subprogram { + {external 1 flag} + {MACRO_AT_func {main}} + } + subprogram { + {external 1 flag} + {MACRO_AT_func {bar1}} + } + subprogram { + {external 1 flag} + {MACRO_AT_func {bar2}} + } + } + } + + lines {version 2} Llines { + include_dir "${srcdir}/${subdir}" + file_name "$srcfile" 1 + + program { + {DW_LNE_set_address bar1_label} + {line 27} + {DW_LNS_copy} + + {DW_LNE_set_address bar1_label_2} + {line 29} + {DW_LNS_copy} + + {DW_LNE_set_address bar1_label_3} + {line 0} + {DW_LNS_copy} + + {DW_LNE_set_address bar1_label_4} + {line 33} + {DW_LNS_copy} + + {DW_LNE_set_address bar1_label_5} + {DW_LNE_end_sequence} + + + {DW_LNE_set_address bar2_label} + {line 41} + {DW_LNS_copy} + + {DW_LNE_set_address bar2_label_2} + {line 43} + {DW_LNS_copy} + + {DW_LNE_set_address bar2_label_3} + {line 0} + {DW_LNS_negate_stmt} + {DW_LNS_copy} + {DW_LNS_negate_stmt} + + {DW_LNE_set_address bar2_label_4} + {line 47} + {DW_LNS_copy} + + {DW_LNE_set_address bar2_label_5} + {DW_LNE_end_sequence} + } + } +} + +if { [prepare_for_testing "failed to prepare" ${testfile} \ + [list $srcfile $asm_file] {nodebug}] } { + return -1 +} + +if ![runto_main] { + return -1 +} + +gdb_breakpoint "$srcfile:27" +gdb_continue_to_breakpoint "bar1" "\[^\r\n\]*:27\r\n.*" + +gdb_test "n" "foo \\(2\\);" "bar1, 1st next" +gdb_test "n" "foo \\(4\\);" "bar1, 2nd next" + +gdb_breakpoint "$srcfile:41" +gdb_continue_to_breakpoint "bar2" "\[^\r\n\]*:41\r\n.*" + +gdb_test "n" "foo \\(2\\);" "bar2, 1st next" +gdb_test "n" "foo \\(4\\);" "bar2, 2nd next" + +if ![runto_main] { + return -1 +} + +gdb_breakpoint "bar1_label_3" +setup_kfail "gdb/nnnnn" *-*-* +gdb_continue_to_breakpoint "bar1_label_3" "bar1 \\(\\)" + +gdb_breakpoint "bar2_label_3" +setup_kfail "gdb/nnnnn" *-*-* +gdb_continue_to_breakpoint "bar2_label_3" "bar2 \\(\\)" diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-linkage-name-trust.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-linkage-name-trust.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-linkage-name-trust.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-linkage-name-trust.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-linkage-name-trust-main.cc gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-linkage-name-trust-main.cc --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-linkage-name-trust-main.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-linkage-name-trust-main.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-linkage-name-trust.S gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-linkage-name-trust.S --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-linkage-name-trust.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-linkage-name-trust.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-minsym-in-cu.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-minsym-in-cu.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-minsym-in-cu.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-minsym-in-cu.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2004-2020 Free Software Foundation, Inc. +# Copyright 2004-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-minsym-in-cu.S gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-minsym-in-cu.S --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-minsym-in-cu.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-minsym-in-cu.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2004-2020 Free Software Foundation, Inc. + Copyright 2004-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-modula2-self-type.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-modula2-self-type.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-modula2-self-type.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-modula2-self-type.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-modula2-self-type.S gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-modula2-self-type.S --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-modula2-self-type.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-modula2-self-type.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2010-2020 Free Software Foundation, Inc. +/* Copyright 2010-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-namespaceless-anonymous.c gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-namespaceless-anonymous.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-namespaceless-anonymous.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-namespaceless-anonymous.c 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,22 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +char _ZN12_GLOBAL__N_11vE = 1; + +int main () +{ +} diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-namespaceless-anonymous.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-namespaceless-anonymous.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-namespaceless-anonymous.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-namespaceless-anonymous.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -14,19 +14,51 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. load_lib dwarf.exp +load_lib dwarf.exp + # This test can only be run on targets which support DWARF-2 and use gas. if {![dwarf2_support]} { return 0 } -standard_testfile .S +standard_testfile dw2-namespaceless-anonymous.c dw2-namespaceless-anonymous.S -if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" $binfile \ - object {nodebug}] != "" } { - return -1 +set asm_file [standard_output_file $srcfile2] +Dwarf::assemble $asm_file { + global srcdir subdir srcfile + + cu {} { + DW_TAG_compile_unit { + {DW_AT_language @DW_LANG_C_plus_plus} + {DW_AT_name dw2-namespaceless-anonymous.c} + {DW_AT_comp_dir /tmp} + } { + declare_labels myint + + myint: DW_TAG_base_type { + {DW_AT_byte_size 1 DW_FORM_sdata} + {DW_AT_encoding @DW_ATE_signed} + {DW_AT_name myint} + } + + DW_TAG_namespace {} { + DW_TAG_variable { + {DW_AT_name v} + {DW_AT_linkage_name _ZN12_GLOBAL__N_11vE} + {DW_AT_location { + DW_OP_addr [gdb_target_symbol _ZN12_GLOBAL__N_11vE] + } SPECIAL_expr} + {DW_AT_type :$myint} + } + } + } + } } -clean_restart $testfile +if {[prepare_for_testing ${testfile}.exp ${testfile} \ + [list $srcfile $asm_file] {nodebug}] } { + return -1 +} gdb_test "ptype '(anonymous namespace)::v'" "type = myint" -gdb_test "p '(anonymous namespace)::v'" " = 1" +gdb_test "p/d '(anonymous namespace)::v'" " = 1" diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-namespaceless-anonymous.S gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-namespaceless-anonymous.S --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-namespaceless-anonymous.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-namespaceless-anonymous.S 1970-01-01 00:00:00.000000000 +0000 @@ -1,93 +0,0 @@ -/* This testcase is part of GDB, the GNU debugger. - - Copyright 2012-2020 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - - .data -var: .4byte 1 - - .section .debug_info -.Lcu1_begin: - /* CU header */ - .4byte .Lcu1_end - .Lcu1_start /* Length of Compilation Unit */ -.Lcu1_start: - .2byte 2 /* DWARF Version */ - .4byte .Labbrev1_begin /* Offset into abbrev section */ - .byte 4 /* Pointer size */ - - /* CU die */ - .uleb128 1 /* Abbrev: DW_TAG_compile_unit */ - .ascii "file1.txt\0" /* DW_AT_name */ - .ascii "GNU C 3.3.3\0" /* DW_AT_producer */ - .byte 4 /* DW_LANG_C_plus_plus (C++) */ - -.Ltype_myint: - .uleb128 2 /* Abbrev: DW_TAG_base_type */ - .ascii "myint\0" /* DW_AT_name */ - .byte 4 /* DW_AT_byte_size */ - .byte 5 /* DW_AT_encoding */ - - .uleb128 7 /* Abbrev: DW_TAG_variable (location) */ - .ascii "_ZN12_GLOBAL__N_11vE\0" /* DW_AT_name = "(anonymous namespace)::v" */ - .byte 2f - 1f /* DW_AT_location */ -1: .byte 3 /* DW_OP_addr */ - .4byte var /* <addr> */ -2: .4byte .Ltype_myint-.Lcu1_begin /* DW_AT_type */ - - .byte 0 /* End of children of CU */ - -.Lcu1_end: - -/* Abbrev table */ - .section .debug_abbrev -.Labbrev1_begin: - .uleb128 1 /* Abbrev code */ - .uleb128 0x11 /* DW_TAG_compile_unit */ - .byte 1 /* has_children */ - .uleb128 0x3 /* DW_AT_name */ - .uleb128 0x8 /* DW_FORM_string */ - .uleb128 0x25 /* DW_AT_producer */ - .uleb128 0x8 /* DW_FORM_string */ - .uleb128 0x13 /* DW_AT_language */ - .uleb128 0xb /* DW_FORM_data1 */ - .byte 0x0 /* Terminator */ - .byte 0x0 /* Terminator */ - - .uleb128 2 /* Abbrev code */ - .uleb128 0x24 /* DW_TAG_base_type */ - .byte 0 /* has_children */ - .uleb128 0x3 /* DW_AT_name */ - .uleb128 0x8 /* DW_FORM_string */ - .uleb128 0xb /* DW_AT_byte_size */ - .uleb128 0xb /* DW_FORM_data1 */ - .uleb128 0x3e /* DW_AT_encoding */ - .uleb128 0xb /* DW_FORM_data1 */ - .byte 0x0 /* Terminator */ - .byte 0x0 /* Terminator */ - - .uleb128 7 /* Abbrev code (location) */ - .uleb128 0x34 /* DW_TAG_variable */ - .byte 0 /* has_children */ - .uleb128 0x3 /* DW_AT_name */ - .uleb128 0x8 /* DW_FORM_string */ - .uleb128 0x2 /* DW_AT_location */ - .uleb128 0xa /* DW_FORM_block1 */ - .uleb128 0x49 /* DW_AT_type */ - .uleb128 0x13 /* DW_FORM_ref4 */ - .byte 0x0 /* Terminator */ - .byte 0x0 /* Terminator */ - - .byte 0x0 /* Terminator */ - .byte 0x0 /* Terminator */ diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-noloc.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-noloc.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-noloc.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-noloc.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2007-2020 Free Software Foundation, Inc. +# Copyright 2007-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-noloc-main.c gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-noloc-main.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-noloc-main.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-noloc-main.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2009-2020 Free Software Foundation, Inc. + Copyright 2009-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-noloc.S gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-noloc.S --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-noloc.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-noloc.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2007-2020 Free Software Foundation, Inc. + Copyright 2007-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-objfile-overlap.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-objfile-overlap.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-objfile-overlap.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-objfile-overlap.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-objfile-overlap-inner.S gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-objfile-overlap-inner.S --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-objfile-overlap-inner.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-objfile-overlap-inner.S 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-objfile-overlap-outer.S gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-objfile-overlap-outer.S --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-objfile-overlap-outer.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-objfile-overlap-outer.S 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-op-call.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-op-call.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-op-call.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-op-call.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2009-2020 Free Software Foundation, Inc. +# Copyright 2009-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-op-call.S gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-op-call.S --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-op-call.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-op-call.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2009-2020 Free Software Foundation, Inc. + Copyright 2009-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-op-out-param.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-op-out-param.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-op-out-param.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-op-out-param.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-op-out-param.S gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-op-out-param.S --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-op-out-param.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-op-out-param.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -153,14 +153,14 @@ sub $0x8,%rsp add $0x8, %rsp retq -.Ltext5: +.Ltext5a: .size breakpt, .-breakpt /* int_param_single_reg_loc */ .globl int_param_single_reg_loc .type int_param_single_reg_loc, @function int_param_single_reg_loc: -.Ltext5: +.Ltext5b: sub $0x8,%rsp .Ltext6: nop @@ -248,7 +248,7 @@ .LASFDE0: .long .Lframe0 /* CIE reference */ .quad .Ltext4 /* start */ - .quad .Ltext5-.Ltext4 /* length */ + .quad .Ltext5a-.Ltext4 /* length */ /* Instructions */ .byte 0x7 /* DW_CFA_undefined */ .uleb128 0x2 /* reg# */ @@ -264,11 +264,11 @@ .long .LEFDE2-.LASFDE2 /* length */ .LASFDE2: .long .Lframe0 /* CIE reference */ - .quad .Ltext5 /* start */ - .quad .Ltext7-.Ltext5 /* length */ + .quad .Ltext5b /* start */ + .quad .Ltext7-.Ltext5b /* length */ /* Instructions */ .byte 0x4 - .long .Ltext6-.Ltext5 + .long .Ltext6-.Ltext5b .byte 0xe .uleb128 0x10 .align 8 @@ -357,7 +357,7 @@ .string "breakpt" /* DW_AT_name */ .byte 0x1 /* DW_AT_prototyped */ .quad .Ltext4 /* DW_AT_low_pc */ - .quad .Ltext5 /* DW_AT_high_pc */ + .quad .Ltext5a /* DW_AT_high_pc */ .LDI2: .uleb128 0x5 /* DW_TAG_base_type */ @@ -401,7 +401,7 @@ .byte 0x1 /* DW_AT_external */ .string "int_param_single_reg_loc" /* DW_AT_name */ .byte 0x1 /* DW_AT_prototyped */ - .quad .Ltext5 /* DW_AT_low_pc */ + .quad .Ltext5b /* DW_AT_low_pc */ .quad .Ltext7 /* DW_AT_high_pc */ .long .LDI11 - .Ldebug_info0 /* DW_AT_sibling */ diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-op-stack-value.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-op-stack-value.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-op-stack-value.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-op-stack-value.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-op-stack-value.S gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-op-stack-value.S --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-op-stack-value.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-op-stack-value.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-opt-structptr.c gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-opt-structptr.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-opt-structptr.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-opt-structptr.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2016-2020 Free Software Foundation, Inc. +/* Copyright 2016-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-opt-structptr.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-opt-structptr.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-opt-structptr.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-opt-structptr.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2016-2020 Free Software Foundation, Inc. +# Copyright 2016-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -41,7 +41,6 @@ # Make some DWARF for the test. set asm_file [standard_output_file $srcfile2] Dwarf::assemble $asm_file { - global srcdir subdir srcfile # Creating a CU with 4-byte addresses lets this test link on # both 32- and 64-bit machines. @@ -102,7 +101,7 @@ {DW_AT_name func01} {DW_AT_type :$int_label} {external 1 flag} - {MACRO_AT_func {func01 ${srcdir}/${subdir}/${srcfile}}} + {MACRO_AT_func {func01}} } { DW_TAG_variable { {DW_AT_name ptr} @@ -115,7 +114,7 @@ {DW_AT_name main} {DW_AT_type :$int_label} {external 1 flag} - {MACRO_AT_func {main ${srcdir}/${subdir}/${srcfile}}} + {MACRO_AT_func {main}} } { } } diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-param-error.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-param-error.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-param-error.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-param-error.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-param-error-main.c gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-param-error-main.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-param-error-main.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-param-error-main.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-param-error.S gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-param-error.S --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-param-error.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-param-error.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2011-2020 Free Software Foundation, Inc. +/* Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-producer.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-producer.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-producer.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-producer.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2007-2020 Free Software Foundation, Inc. +# Copyright 2007-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-producer.S gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-producer.S --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-producer.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-producer.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2004-2020 Free Software Foundation, Inc. + Copyright 2004-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-ranges2.c gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-ranges2.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-ranges2.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-ranges2.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* - Copyright 2007-2020 Free Software Foundation, Inc. + Copyright 2007-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-ranges3.c gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-ranges3.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-ranges3.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-ranges3.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* - Copyright 2007-2020 Free Software Foundation, Inc. + Copyright 2007-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-ranges-base.c gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-ranges-base.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-ranges-base.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-ranges-base.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-ranges-base.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-ranges-base.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-ranges-base.exp 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-ranges-base.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -141,3 +141,39 @@ "Line 21 of .* starts at address .* and ends at .*" gdb_test "info line frame3" \ "Line 31 of .* starts at address .* and ends at .*" + +# Ensure that the line table correctly tracks the end of sequence markers. +set end_seq_count 0 +set prev -1 +set seq_count 0 +gdb_test_multiple "maint info line-table gdb.dwarf2/dw2-ranges-base.c" \ + "count END markers in line table" { + -re "^$decimal\[ \t\]+$decimal\[ \t\]+$hex\(\[ \t\]+Y\)? *\r\n" { + if { $prev != -1 } { + gdb_assert "$prev == 1" \ + "prev of normal entry at $seq_count is end marker" + } + set prev 0 + incr seq_count + exp_continue + } + -re "^$decimal\[ \t\]+END\[ \t\]+$hex\(\[ \t\]+Y\)? *\r\n" { + if { $prev != -1 } { + gdb_assert "$prev == 0" \ + "prev of end marker at $seq_count is normal entry" + } + set prev 1 + incr seq_count + incr end_seq_count + exp_continue + } + -re "^$gdb_prompt $" { + gdb_assert [expr $end_seq_count == 3] $gdb_test_name + } + -re ".*linetable: \\(\\(struct linetable \\*\\) 0x0\\):\r\nNo line table.\r\n" { + exp_continue + } + -re ".*linetable: \\(\\(struct linetable \\*\\) $hex\\):\r\nINDEX\[ \t\]+LINE\[ \t\]+ADDRESS\[ \t\]+IS-STMT *\r\n" { + exp_continue + } + } diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-ranges.c gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-ranges.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-ranges.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-ranges.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* - Copyright 2007-2020 Free Software Foundation, Inc. + Copyright 2007-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-ranges.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-ranges.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-ranges.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-ranges.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2007-2020 Free Software Foundation, Inc. +# Copyright 2007-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-ranges-func.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-ranges-func.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-ranges-func.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-ranges-func.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2018-2020 Free Software Foundation, Inc. +# Copyright 2018-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -134,30 +134,30 @@ # reasonably accurate as it made debugging the test case easier. program { {DW_LNE_set_address $main_start} - {DW_LNS_advance_line [expr [gdb_get_line_number "main prologue"] - 1]} + {line [gdb_get_line_number "main prologue"]} {DW_LNS_copy} {DW_LNE_set_address main_label} - {DW_LNS_advance_line [expr [gdb_get_line_number "main foo call"] - [gdb_get_line_number "main prologue"]]} + {line [gdb_get_line_number "main foo call"]} {DW_LNS_copy} {DW_LNE_set_address main_label2} - {DW_LNS_advance_line [expr [gdb_get_line_number "main return"] - [gdb_get_line_number "main foo call"]]} + {line [gdb_get_line_number "main return"]} {DW_LNS_copy} {DW_LNE_set_address $main_end} - {DW_LNS_advance_line [expr [gdb_get_line_number "main end"] - [gdb_get_line_number "main return"] + 1]} + {line [expr [gdb_get_line_number "main end"] + 1]} {DW_LNS_copy} {DW_LNE_end_sequence} {DW_LNE_set_address $foo_start} - {DW_LNS_advance_line [expr [gdb_get_line_number "foo prologue"] - 1] } + {line [gdb_get_line_number "foo prologue"]} {DW_LNS_copy} {DW_LNE_set_address foo_label} - {DW_LNS_advance_line [expr [gdb_get_line_number "foo bar call"] - [gdb_get_line_number "foo prologue"]]} + {line [gdb_get_line_number "foo bar call"]} {DW_LNS_copy} {DW_LNE_set_address foo_label2} - {DW_LNS_advance_line [expr [gdb_get_line_number "foo foo_cold call"] - [gdb_get_line_number "foo bar call"]]} + {line [gdb_get_line_number "foo foo_cold call"]} {DW_LNS_copy} {DW_LNE_set_address foo_label3} - {DW_LNS_advance_line [expr [gdb_get_line_number "foo end"] - [gdb_get_line_number "foo foo_cold call"]]} + {line [gdb_get_line_number "foo end"]} {DW_LNS_copy} {DW_LNE_set_address $foo_end} {DW_LNS_advance_line 1} @@ -165,7 +165,7 @@ {DW_LNE_end_sequence} {DW_LNE_set_address $bar_start} - {DW_LNS_advance_line [expr [gdb_get_line_number "bar end"] - 1]} + {line [gdb_get_line_number "bar end"]} {DW_LNS_copy} {DW_LNS_advance_pc $bar_len} {DW_LNS_advance_line 1} @@ -173,7 +173,7 @@ {DW_LNE_end_sequence} {DW_LNE_set_address $baz_start} - {DW_LNS_advance_line [expr [gdb_get_line_number "baz end"] - 1]} + {line [gdb_get_line_number "baz end"]} {DW_LNS_copy} {DW_LNS_advance_pc $baz_len} {DW_LNS_advance_line 1} @@ -181,13 +181,13 @@ {DW_LNE_end_sequence} {DW_LNE_set_address $foo_cold_start} - {DW_LNS_advance_line [expr [gdb_get_line_number "foo_cold prologue"] - 1]} + {line [gdb_get_line_number "foo_cold prologue"]} {DW_LNS_copy} {DW_LNE_set_address foo_cold_label} - {DW_LNS_advance_line [expr [gdb_get_line_number "foo_cold baz call"] - [gdb_get_line_number "foo_cold prologue"]]} + {line [gdb_get_line_number "foo_cold baz call"]} {DW_LNS_copy} {DW_LNE_set_address foo_cold_label2} - {DW_LNS_advance_line [expr [gdb_get_line_number "foo_cold end"] - [gdb_get_line_number "foo_cold baz call"]]} + {line [gdb_get_line_number "foo_cold end"]} {DW_LNS_copy} {DW_LNE_set_address $foo_cold_end} {DW_LNS_advance_line 1} diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-ranges-func-hi-cold.c gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-ranges-func-hi-cold.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-ranges-func-hi-cold.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-ranges-func-hi-cold.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2018-2020 Free Software Foundation, Inc. +/* Copyright 2018-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-ranges-func-lo-cold.c gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-ranges-func-lo-cold.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-ranges-func-lo-cold.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-ranges-func-lo-cold.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2018-2020 Free Software Foundation, Inc. +/* Copyright 2018-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-ranges-main.c gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-ranges-main.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-ranges-main.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-ranges-main.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2019-2020 Free Software Foundation, Inc. +/* Copyright 2019-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-ranges-psym.c gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-ranges-psym.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-ranges-psym.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-ranges-psym.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2018-2020 Free Software Foundation, Inc. +/* Copyright 2018-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-ranges-psym.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-ranges-psym.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-ranges-psym.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-ranges-psym.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2018-2020 Free Software Foundation, Inc. +# Copyright 2018-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-ref-missing-frame.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-ref-missing-frame.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-ref-missing-frame.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-ref-missing-frame.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-ref-missing-frame-func.c gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-ref-missing-frame-func.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-ref-missing-frame-func.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-ref-missing-frame-func.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-ref-missing-frame-main.c gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-ref-missing-frame-main.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-ref-missing-frame-main.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-ref-missing-frame-main.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2009-2020 Free Software Foundation, Inc. + Copyright 2009-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-ref-missing-frame.S gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-ref-missing-frame.S --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-ref-missing-frame.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-ref-missing-frame.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2007-2020 Free Software Foundation, Inc. + Copyright 2007-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-regno-invalid.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-regno-invalid.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-regno-invalid.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-regno-invalid.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -22,15 +22,14 @@ return 0 } -standard_testfile .S main.c +standard_testfile main.c .S # Make some DWARF for the test. -set asm_file [standard_output_file $srcfile] +set asm_file [standard_output_file $srcfile2] Dwarf::assemble $asm_file { cu {} { compile_unit { - {low_pc [gdb_target_symbol main] DW_FORM_addr} - {high_pc [gdb_target_symbol main]+0x10000 DW_FORM_addr} + {MACRO_AT_range {main}} } { declare_labels integer_label @@ -41,10 +40,8 @@ } DW_TAG_subprogram { - {name main} {DW_AT_external 1 flag} - {low_pc [gdb_target_symbol main] DW_FORM_addr} - {high_pc [gdb_target_symbol main]+0x10000 DW_FORM_addr} + {MACRO_AT_func {main}} } { DW_TAG_variable { {DW_AT_name bregx} @@ -60,7 +57,7 @@ } if { [prepare_for_testing "failed to prepare" ${testfile} \ - [list $srcfile2 $asm_file] {nodebug}] } { + [list $srcfile $asm_file] {nodebug}] } { return -1 } diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-reg-undefined.c gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-reg-undefined.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-reg-undefined.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-reg-undefined.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-reg-undefined.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-reg-undefined.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-reg-undefined.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-reg-undefined.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -26,7 +26,7 @@ standard_testfile .S -if { [prepare_for_testing "failed to prepare" $testfile $srcfile {nodebug}] } { +if { [prepare_for_testing "failed to prepare" $testfile $srcfile {nodebug nopie}] } { return -1 } @@ -66,6 +66,23 @@ # Display register values. - gdb_test "info registers rax rbx rcx r8 r9" "rax\\s+${pattern_rax_rbx_rcx_info}\\s*\r\nrbx\\s+${pattern_rax_rbx_rcx_info}\\s*\r\nrcx\\s+${pattern_rax_rbx_rcx_info}\\s*\r\nr8\\s+${pattern_r8_r9_info}\\s*\r\nr9\\s+${pattern_r8_r9_info}\\s*" \ + gdb_test "info registers rax rbx rcx r8 r9" \ + [multi_line "rax\\s+${pattern_rax_rbx_rcx_info}\\s*" \ + "rbx\\s+${pattern_rax_rbx_rcx_info}\\s*" \ + "rcx\\s+${pattern_rax_rbx_rcx_info}\\s*" \ + "r8\\s+${pattern_r8_r9_info}\\s*" \ + "r9\\s+${pattern_r8_r9_info}\\s*"] \ "Check values of rax, rbx, rcx, r8, r9 in frame ${f}" } + +# Test that the debug log statement in frame_unwind_register_value produces +# "not saved" and not "optimized out". +gdb_test "set debug frame 1" +gdb_test {print $rax} {frame_unwind_register_value[^\r\n]+rax[^\r\n]+not saved.*} +gdb_test "set debug frame 0" + +# Test that history values show "not saved" and not "optimized out". +gdb_test "print" " = <not saved>" + +# Test that convenience variables _don't_ show "not saved". +gdb_test {print $foo = $rax} " = <optimized out>" diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-reg-undefined.S gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-reg-undefined.S --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-reg-undefined.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-reg-undefined.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-restore.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-restore.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-restore.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-restore.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2009-2020 Free Software Foundation, Inc. +# Copyright 2009-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -21,8 +21,15 @@ } standard_testfile .S +set opts [list {additional_flags=-nostdlib}] + +# Clang's integrated assembler doesn't support .func or .endfunc. +if { [test_compiler_info clang*] } { + lappend opts [list {additional_flags=-fno-integrated-as}] +} + if {[prepare_for_testing "failed to prepare" $testfile [list $srcfile] \ - [list {additional_flags=-nostdlib}]]} { + $opts]} { return -1 } diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-restore.S gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-restore.S --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-restore.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-restore.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* - Copyright 2009-2020 Free Software Foundation, Inc. + Copyright 2009-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-restrict.c gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-restrict.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-restrict.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-restrict.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-restrict.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-restrict.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-restrict.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-restrict.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-restrict.S gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-restrict.S --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-restrict.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-restrict.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2012-2020 Free Software Foundation, Inc. +/* Copyright (C) 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-simple-locdesc.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-simple-locdesc.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-simple-locdesc.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-simple-locdesc.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-simple-locdesc.S gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-simple-locdesc.S --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-simple-locdesc.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-simple-locdesc.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-single-line-discriminators.c gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-single-line-discriminators.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-single-line-discriminators.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-single-line-discriminators.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-single-line-discriminators.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-single-line-discriminators.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-single-line-discriminators.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-single-line-discriminators.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -31,7 +31,7 @@ standard_testfile .S set csrcfile ${testfile}.c -if { [prepare_for_testing "failed to prepare" "${testfile}" $srcfile {nodebug}] } { +if { [prepare_for_testing "failed to prepare" "${testfile}" $srcfile {nodebug nopie}] } { return -1 } diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-single-line-discriminators.S gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-single-line-discriminators.S --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-single-line-discriminators.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-single-line-discriminators.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-skip-prologue.c gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-skip-prologue.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-skip-prologue.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-skip-prologue.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-skip-prologue.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-skip-prologue.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-skip-prologue.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-skip-prologue.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-skip-prologue.S gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-skip-prologue.S --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-skip-prologue.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-skip-prologue.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-stack-boundary.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-stack-boundary.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-stack-boundary.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-stack-boundary.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-stack-boundary.S gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-stack-boundary.S --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-stack-boundary.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-stack-boundary.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2010-2020 Free Software Foundation, Inc. +/* Copyright 2010-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-strp.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-strp.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-strp.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-strp.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-strp.S gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-strp.S --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-strp.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-strp.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2008-2020 Free Software Foundation, Inc. + Copyright 2008-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-symtab-includes.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-symtab-includes.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-symtab-includes.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-symtab-includes.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,78 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Check that symtab user and includes are present after symtab expansion +# triggered by an include file. + +load_lib dwarf.exp + +# This test can only be run on targets which support DWARF-2 and use gas. +if {![dwarf2_support]} { + return 0 +} + +standard_testfile main.c .S + +# Create the DWARF. +set asm_file [standard_output_file $srcfile2] +Dwarf::assemble $asm_file { + declare_labels partial_label lines_label + global srcdir subdir srcfile + + cu {} { + partial_label: partial_unit {} { + } + } + + cu {} { + compile_unit { + {language @DW_LANG_C} + {stmt_list ${lines_label} DW_FORM_sec_offset} + } { + imported_unit { + {import $partial_label ref_addr} + } + } + } + + lines {version 2} lines_label { + include_dir "${srcdir}/${subdir}" + file_name "dw2-symtab-includes.h" 1 + program { + {DW_LNS_advance_line 1} + } + } +} + +if { [prepare_for_testing "failed to prepare" $testfile \ + "${asm_file} ${srcfile}" {}] } { + return -1 +} + +# Check that no symtabs are expanded. +set test "no symtabs expanded" +if { [readnow] } { + unsupported $test + return -1 +} +gdb_test_no_output "maint info symtabs" $test + +# Expand dw2-symtab-includes.h symtab +gdb_test "maint expand-symtab dw2-symtab-includes.h" + +# Check that there are includes. +gdb_test "maint info symtabs" \ + "\r\n \\( includes\r\n.*" \ + "check symtab includes" diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-undefined-ret-addr.c gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-undefined-ret-addr.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-undefined-ret-addr.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-undefined-ret-addr.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-undefined-ret-addr.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-undefined-ret-addr.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-undefined-ret-addr.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-undefined-ret-addr.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -26,7 +26,7 @@ return 0 } -if {[prepare_for_testing "failed to prepare" "$testfile" $srcfile {nodebug}]} { +if {[prepare_for_testing "failed to prepare" "$testfile" $srcfile {nodebug nopie}]} { return -1 } diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-undefined-ret-addr.S gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-undefined-ret-addr.S --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-undefined-ret-addr.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-undefined-ret-addr.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-unresolved.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-unresolved.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-unresolved.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-unresolved.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2009-2020 Free Software Foundation, Inc. +# Copyright 2009-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-unresolved-main.c gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-unresolved-main.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-unresolved-main.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-unresolved-main.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2009-2020 Free Software Foundation, Inc. + Copyright 2009-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-unresolved.S gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-unresolved.S --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-unresolved.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-unresolved.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2007-2020 Free Software Foundation, Inc. + Copyright 2007-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-unusual-field-names.c gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-unusual-field-names.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-unusual-field-names.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-unusual-field-names.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2018-2020 Free Software Foundation, Inc. + Copyright 2018-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-unusual-field-names.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-unusual-field-names.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-unusual-field-names.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-unusual-field-names.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2018-2020 Free Software Foundation, Inc. +# Copyright 2018-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-var-zero-addr.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-var-zero-addr.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-var-zero-addr.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-var-zero-addr.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-var-zero-addr.S gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-var-zero-addr.S --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-var-zero-addr.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-var-zero-addr.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-vendor-extended-opcode.c gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-vendor-extended-opcode.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-vendor-extended-opcode.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-vendor-extended-opcode.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,32 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +void +foo (void) +{ + +} + +int +main() +{ + asm ("main_label: .globl main_label"); + foo (); + + asm ("main_label_2: .globl main_label_2"); + return 0; +} diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-vendor-extended-opcode.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-vendor-extended-opcode.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw2-vendor-extended-opcode.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw2-vendor-extended-opcode.exp 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,81 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +load_lib dwarf.exp + +# This test can only be run on targets which support DWARF-2 and use gas. +if {![dwarf2_support]} { + verbose "Skipping dw2-vendor-extended-opcode test." + return 0 +} + +# The .c files use __attribute__. +if [get_compiler_info] { + return -1 +} +if !$gcc_compiled { + verbose "Skipping dw2-vendor-extended-opcode test." + return 0 +} + +standard_testfile dw2-vendor-extended-opcode.c dw2-vendor-extended-opcode-dw.S + +set asm_file [standard_output_file $srcfile2] +Dwarf::assemble $asm_file { + declare_labels Llines + global srcdir subdir srcfile + + set DW_LNE_lo_usr 0x80 + set DW_LNE_hi_usr 0xff + + cu {} { + compile_unit { + {language @DW_LANG_C} + {name dw2-vendor-extended-opcode.c} + {stmt_list $Llines DW_FORM_sec_offset} + } { + subprogram { + {external 1 flag} + {MACRO_AT_func {main}} + } + } + } + + lines {version 2} Llines { + include_dir "${srcdir}/${subdir}" + file_name "$srcfile" 1 + + program { + {DW_LNE_set_address main_label} + {line 27} + {DW_LNE_user 1 $DW_LNE_lo_usr} + {DW_LNE_user 2 $DW_LNE_hi_usr} + {DW_LNS_copy} + + {DW_LNE_set_address main_label_2} + {DW_LNE_end_sequence} + } + } +} + +if { [prepare_for_testing "failed to prepare" ${testfile} \ + [list $srcfile $asm_file] {nodebug}] } { + return -1 +} + +if ![runto_main] { + return -1 +} + +gdb_breakpoint "$srcfile:27" message diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw4-sig-types.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw4-sig-types.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw4-sig-types.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw4-sig-types.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw4-sig-type-unused.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw4-sig-type-unused.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw4-sig-type-unused.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw4-sig-type-unused.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw4-sig-type-unused.S gdb-10.2/gdb/testsuite/gdb.dwarf2/dw4-sig-type-unused.S --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw4-sig-type-unused.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw4-sig-type-unused.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2011-2020 Free Software Foundation, Inc. +/* Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw4-toplevel-types.cc gdb-10.2/gdb/testsuite/gdb.dwarf2/dw4-toplevel-types.cc --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw4-toplevel-types.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw4-toplevel-types.cc 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,21 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +struct X {} x; +struct Y {} y; +struct Z {} z; +int main() {} diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw4-toplevel-types.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw4-toplevel-types.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw4-toplevel-types.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw4-toplevel-types.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,36 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Test dwarf4 signatured types (DW_TAG_type_unit). + +standard_testfile .cc + +# This test is intended for targets which support DWARF-4. +# Since we pass an explicit -gdwarf-4 -fdebug-types-section to the compiler, +# we let that be the test of whether the target supports it. + +if { [prepare_for_testing "failed to prepare" "${testfile}" \ + $srcfile {debug c++ additional_flags=-gdwarf-4 \ + additional_flags=-fdebug-types-section}] } { + return -1 +} + +if ![runto_main] { + return -1 +} + +gdb_test "ptype X" "type = struct X {.*" +gdb_test "ptype Y" "type = struct Y {.*" +gdb_test "ptype Z" "type = struct Z {.*" diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw5-rnglist-test.cc gdb-10.2/gdb/testsuite/gdb.dwarf2/dw5-rnglist-test.cc --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw5-rnglist-test.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw5-rnglist-test.cc 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,97 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include <iostream> +#include <vector> + +struct node { + int id; + node *left; + node *right; + bool visited; +}; + +node node_array[50]; +unsigned int CUR_IDX = 0; + +node * +make_node (int val) +{ + node *new_node = &(node_array[CUR_IDX++]); + new_node->left = NULL; + new_node->right = NULL; + new_node->id = val; + new_node->visited = false; + + return new_node; +} + +void +tree_insert (node *root, int val) +{ + if (val < root->id) + { + if (root->left) + tree_insert (root->left, val); + else + root->left = make_node(val); + } + else if (val > root->id) + { + if (root->right) + tree_insert (root->right, val); + else + root->right = make_node(val); + } +} + +void +inorder (node *root) +{ + std::vector<node *> todo; + todo.push_back (root); + while (!todo.empty()) + { + node *curr = todo.back(); + todo.pop_back(); /* break-here */ + if (curr->visited) + std::cout << curr->id << " "; + else + { + curr->visited = true; + if (curr->right) + todo.push_back (curr->right); + todo.push_back (curr); + if (curr->left) + todo.push_back (curr->left); + } + } +} + +int +main (int argc, char **argv) +{ + node *root = make_node (35); + + tree_insert (root, 28); + tree_insert (root, 20); + tree_insert (root, 60); + + inorder (root); + + return 0; +} diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dw5-rnglist-test.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dw5-rnglist-test.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dw5-rnglist-test.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dw5-rnglist-test.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,40 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Check that GDB can find the variables in a lexical block with a +# DW_FORM_rnglistx DW_AT_ranges field. This test is intended for DWARF-5, +# compiled with clang++. + +standard_testfile .cc + +# This test is intended for targets which support DWARF-5. +# Since we pass an explicit -gdwarf-5 to the compiler, +# we let that be the test of whether the target supports it. + +if { [prepare_for_testing "failed to prepare" "${testfile}" \ + $srcfile {debug c++ additional_flags=-gdwarf-5 \ + additional_flags=-O0}] } { + return -1 +} + +if ![runto_main] { + return -1 +} + +gdb_breakpoint [gdb_get_line_number "break-here"] +gdb_continue_to_breakpoint "break-here" ".* break-here .*" + +gdb_test "print curr" "\\\(node \\\*\\\) $hex <node_array>" +gdb_test "print *curr" "= {id = 35, left = $hex <node_array\\+$decimal>, right = $hex <node_array\\+$decimal>, visited = false}" diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dwp-sepdebug.c gdb-10.2/gdb/testsuite/gdb.dwarf2/dwp-sepdebug.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dwp-sepdebug.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dwp-sepdebug.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2016-2020 Free Software Foundation, Inc. + Copyright 2016-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dwp-sepdebug.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dwp-sepdebug.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dwp-sepdebug.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dwp-sepdebug.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2016-2020 Free Software Foundation, Inc. +# Copyright 2016-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dwp-symlink.c gdb-10.2/gdb/testsuite/gdb.dwarf2/dwp-symlink.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dwp-symlink.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dwp-symlink.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dwp-symlink.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dwp-symlink.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dwp-symlink.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dwp-symlink.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dwzbuildid.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dwzbuildid.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dwzbuildid.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dwzbuildid.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -138,7 +138,7 @@ } if {[gdb_compile [list ${binfile}1.o ${binfile}4.o] ${binfile}-mismatch \ - executable {}] != ""} { + executable {quiet}] != ""} { return -1 } diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dwz.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dwz.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dwz.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dwz.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -26,14 +26,11 @@ set asm_file [standard_output_file $srcfile2] Dwarf::assemble $asm_file { declare_labels partial_label int_label int_label2 - global srcdir subdir srcfile - - extern main cu {} { partial_label: partial_unit {} { subprogram { - {MACRO_AT_func { main ${srcdir}/${subdir}/${srcfile} }} + {MACRO_AT_func { main }} } } } diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dynarr-ptr.c gdb-10.2/gdb/testsuite/gdb.dwarf2/dynarr-ptr.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dynarr-ptr.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dynarr-ptr.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2014-2020 Free Software Foundation, Inc. +/* Copyright 2014-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/dynarr-ptr.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/dynarr-ptr.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/dynarr-ptr.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/dynarr-ptr.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/enum-type.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/enum-type.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/enum-type.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/enum-type.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/fission-base.c gdb-10.2/gdb/testsuite/gdb.dwarf2/fission-base.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/fission-base.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/fission-base.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/fission-base.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/fission-base.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/fission-base.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/fission-base.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/fission-base.S gdb-10.2/gdb/testsuite/gdb.dwarf2/fission-base.S --- gdb-9.1/gdb/testsuite/gdb.dwarf2/fission-base.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/fission-base.S 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/fission-loclists.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/fission-loclists.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/fission-loclists.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/fission-loclists.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/fission-loclists-pie.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/fission-loclists-pie.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/fission-loclists-pie.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/fission-loclists-pie.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2016-2020 Free Software Foundation, Inc. +# Copyright 2016-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/fission-loclists-pie.S gdb-10.2/gdb/testsuite/gdb.dwarf2/fission-loclists-pie.S --- gdb-9.1/gdb/testsuite/gdb.dwarf2/fission-loclists-pie.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/fission-loclists-pie.S 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/fission-loclists.S gdb-10.2/gdb/testsuite/gdb.dwarf2/fission-loclists.S --- gdb-9.1/gdb/testsuite/gdb.dwarf2/fission-loclists.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/fission-loclists.S 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/fission-mix2.c gdb-10.2/gdb/testsuite/gdb.dwarf2/fission-mix2.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/fission-mix2.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/fission-mix2.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/fission-mix.c gdb-10.2/gdb/testsuite/gdb.dwarf2/fission-mix.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/fission-mix.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/fission-mix.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/fission-mix.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/fission-mix.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/fission-mix.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/fission-mix.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/fission-mix.h gdb-10.2/gdb/testsuite/gdb.dwarf2/fission-mix.h --- gdb-9.1/gdb/testsuite/gdb.dwarf2/fission-mix.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/fission-mix.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/fission-multi-cu1.c gdb-10.2/gdb/testsuite/gdb.dwarf2/fission-multi-cu1.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/fission-multi-cu1.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/fission-multi-cu1.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/fission-multi-cu2.c gdb-10.2/gdb/testsuite/gdb.dwarf2/fission-multi-cu2.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/fission-multi-cu2.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/fission-multi-cu2.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/fission-multi-cu.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/fission-multi-cu.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/fission-multi-cu.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/fission-multi-cu.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/fission-multi-cu.S gdb-10.2/gdb/testsuite/gdb.dwarf2/fission-multi-cu.S --- gdb-9.1/gdb/testsuite/gdb.dwarf2/fission-multi-cu.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/fission-multi-cu.S 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/fission-reread.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/fission-reread.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/fission-reread.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/fission-reread.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/fission-reread.S gdb-10.2/gdb/testsuite/gdb.dwarf2/fission-reread.S --- gdb-9.1/gdb/testsuite/gdb.dwarf2/fission-reread.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/fission-reread.S 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2012-2020 Free Software Foundation, Inc. +/* Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/formdata16.c gdb-10.2/gdb/testsuite/gdb.dwarf2/formdata16.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/formdata16.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/formdata16.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2017-2020 Free Software Foundation, Inc. + Copyright 2017-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/formdata16.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/formdata16.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/formdata16.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/formdata16.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2017-2020 Free Software Foundation, Inc. +# Copyright 2017-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/frame-inlined-in-outer-frame.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/frame-inlined-in-outer-frame.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/frame-inlined-in-outer-frame.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/frame-inlined-in-outer-frame.exp 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,115 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Test unwinding when we have a frame inlined in the outer frame (in the sense +# of frame.c:outer_frame_id). +# +# The conditions required to reproduce the original issue are: +# +# 1. Have an outer frame whose DWARF CFI explicitly says that the frame return +# address is undefined. +# 2. A frame inlined in this other frame. +# +# Because of (1), the test has to be written in assembly with explicit CFI +# directives. + +load_lib dwarf.exp + +if {![dwarf2_support]} { + return 0 +} + +standard_testfile .S + +set dwarf_asm [standard_output_file dwarf-asm.S] +Dwarf::assemble $dwarf_asm { + declare_labels foo_subprogram bar_subprogram + declare_labels stmt_list + + # See the comment in the .S file for the equivalent C program this is meant + # to represent. + + cu { addr_size 4 } { + DW_TAG_compile_unit { + {DW_AT_name file1.txt} + {DW_AT_stmt_list $stmt_list DW_FORM_sec_offset} + {DW_AT_language @DW_LANG_C99} + {DW_AT_low_pc __cu_low_pc DW_FORM_addr} + {DW_AT_high_pc __cu_high_pc DW_FORM_addr} + } { + DW_TAG_subprogram { + {DW_AT_name "_start"} + {DW_AT_low_pc __start_low_pc DW_FORM_addr} + {DW_AT_high_pc __start_high_pc DW_FORM_addr} + } { + DW_TAG_inlined_subroutine { + {DW_AT_abstract_origin :$foo_subprogram} + {DW_AT_low_pc __foo_low_pc DW_FORM_addr} + {DW_AT_high_pc __foo_high_pc DW_FORM_addr} + {DW_AT_call_file 1 DW_FORM_data1} + {DW_AT_call_line 13 DW_FORM_data1} + } { + DW_TAG_inlined_subroutine { + {DW_AT_abstract_origin :$bar_subprogram} + {DW_AT_low_pc __bar_low_pc DW_FORM_addr} + {DW_AT_high_pc __bar_high_pc DW_FORM_addr} + {DW_AT_call_file 1 DW_FORM_data1} + {DW_AT_call_line 7 DW_FORM_data1} + } + } + } + + foo_subprogram: DW_TAG_subprogram { + {DW_AT_name "foo"} + {DW_AT_prototyped 1 DW_FORM_flag_present} + {DW_AT_inline 0x1 DW_FORM_data1} + } + + bar_subprogram: DW_TAG_subprogram { + {DW_AT_name "bar"} + {DW_AT_prototyped 1 DW_FORM_flag_present} + {DW_AT_inline 0x1 DW_FORM_data1} + } + } + } + + lines { } stmt_list { + global srcdir subdir srcfile + + include_dir "/some/directory" + file_name "/some/directory/file.c" 0 + } +} + +if { [build_executable ${testfile}.exp ${testfile} "$srcfile $dwarf_asm" \ + {additional_flags=-nostdlib additional_flags=-static}] != 0 } { + untested "failed to compile" + return +} + +clean_restart $binfile + +if { [gdb_starti_cmd] != 0 } { + fail "failed to run to first instruction" + return +} +gdb_test "" "Program stopped.*" "starti prompt" + +gdb_test "frame" "in _start .*" + +gdb_test "stepi" "in foo .*" "step into foo" +gdb_test "stepi" "in bar .*" "step into bar" +gdb_test "stepi" "in foo .*" "step back into foo" +gdb_test "stepi" "in _start .*" "step back into _start" diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/frame-inlined-in-outer-frame.S gdb-10.2/gdb/testsuite/gdb.dwarf2/frame-inlined-in-outer-frame.S --- gdb-9.1/gdb/testsuite/gdb.dwarf2/frame-inlined-in-outer-frame.S 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/frame-inlined-in-outer-frame.S 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,137 @@ +/* Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include <asm/unistd.h> + +/* Define these for each architecture: + + 1) RETURN_ADDRESS_REGNO: The register number representing the return + address in the DWARF CFI. It can be easily be looked up using + `readelf --debug-dump=frames-interp` on an existing binary of that + architecture, where it says `ra=X`. + + 2) exit_0: a sequence of instruction to execute the exit syscall with + argument 0. */ + +#if defined(__x86_64__) + +# define RETURN_ADDRESS_REGNO 16 + +.macro exit_0 + mov $__NR_exit, %rax + mov $0, %rdi + syscall +.endm + +#elif defined(__i386__) + +# define RETURN_ADDRESS_REGNO 8 + +.macro exit_0 + mov $__NR_exit, %eax + mov $0, %ebx + int $0x80 +.endm + +#elif defined(__aarch64__) + +# define RETURN_ADDRESS_REGNO 30 + +.macro exit_0 + mov x0, #0 + mov x8, #__NR_exit + svc #0 +.endm + +#elif defined(__arm__) + +# define RETURN_ADDRESS_REGNO 14 + +.macro exit_0 + ldr r7, =__NR_exit + ldr r0, =0 + swi 0x0 +.endm + +#else +# error "Unsupported architecture" +#endif + +/* The following assembly program mimics this pseudo C program, where + everything has been inlined: + + 1 void bar(void) { + 2 nop; + 3 } + 4 + 5 void foo(void) { + 6 nop; + 7 bar(); + 8 nop; + 9 } + 10 + 11 void _start(void) { + 12 nop; + 13 foo(); + 14 nop; + 15 exit(0); + 16 } +*/ + +.global _start +_start: +.cfi_startproc + +/* State that the return address for this frame is undefined. */ +.cfi_undefined RETURN_ADDRESS_REGNO + +.global __cu_low_pc +__cu_low_pc: + +.global __start_low_pc +__start_low_pc: + /* Line 12 */ + nop + +.global __foo_low_pc +__foo_low_pc: + /* Line 6 */ + nop + +.global __bar_low_pc +__bar_low_pc: + /* Line 2 */ + nop + +.global __bar_high_pc +__bar_high_pc: + /* Line 8 */ + nop + +.global __foo_high_pc +__foo_high_pc: + /* Line 14 */ + nop + + /* Line 15 */ + exit_0 + +.cfi_endproc + +.global __start_high_pc +__start_high_pc: + +.global __cu_high_pc +__cu_high_pc: diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/gdb-add-index.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/gdb-add-index.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/gdb-add-index.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/gdb-add-index.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -27,48 +27,14 @@ return -1 } -# Add a .gdb_index section to PROGRAM. -# PROGRAM is assumed to be the output of standard_output_file. -# Returns the 0 if there is a failure, otherwise 1. - -proc add_gdb_index { program } { - global srcdir GDB env BUILD_DATA_DIRECTORY - set contrib_dir "$srcdir/../contrib" - set env(GDB) "$GDB --data-directory=$BUILD_DATA_DIRECTORY" - set result [catch "exec $contrib_dir/gdb-add-index.sh $program" output] - if { $result != 0 } { - verbose -log "result is $result" - verbose -log "output is $output" - return 0 - } - - return 1 -} - -# Build a copy of the program with an index (.gdb_index/.debug_names). -# But only if the toolchain didn't already create one: gdb doesn't support -# building an index from a program already using one. - -set test "check if index present" -gdb_test_multiple "mt print objfiles ${testfile}" $test { - -re "gdb_index.*${gdb_prompt} $" { - set binfile_with_index $binfile - } - -re "debug_names.*${gdb_prompt} $" { - set binfile_with_index $binfile - } - -re "Psymtabs.*${gdb_prompt} $" { - if { [add_gdb_index $binfile] != "1" } { - return -1 - } - set binfile_with_index $binfile - } +if { [ensure_gdb_index $binfile] == -1 } { + return -1 } # Ok, we have a copy of $binfile with an index. # Restart gdb and verify the index was used. -clean_restart ${binfile_with_index} +clean_restart ${binfile} gdb_test "mt print objfiles ${testfile}" \ "(gdb_index|debug_names).*" \ "index used" diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/gdb-index.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/gdb-index.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/gdb-index.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/gdb-index.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/implptr-64bit.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/implptr-64bit.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/implptr-64bit.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/implptr-64bit.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -81,9 +81,7 @@ if { !$two_cu } { subprogram { - { name main } - { low_pc main addr } - { high_pc "main+0x100" addr } + {MACRO_AT_func {main}} { type :$int_label } { external 1 flag } } { @@ -111,9 +109,7 @@ { name 1.c } } { subprogram { - { name main } - { low_pc main addr } - { high_pc "main+0x100" addr } + { MACRO_AT_func {main} } { type %$int_label } { external 1 flag } } { diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/implptr.c gdb-10.2/gdb/testsuite/gdb.dwarf2/implptr.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/implptr.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/implptr.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2010-2020 Free Software Foundation, Inc. +/* Copyright (C) 2010-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/implptrconst.c gdb-10.2/gdb/testsuite/gdb.dwarf2/implptrconst.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/implptrconst.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/implptrconst.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/implptrconst.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/implptrconst.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/implptrconst.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/implptrconst.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/implptr.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/implptr.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/implptr.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/implptr.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/implptr-optimized-out.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/implptr-optimized-out.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/implptr-optimized-out.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/implptr-optimized-out.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -25,8 +25,6 @@ # Create the DWARF. set asm_file [standard_output_file $srcfile2] Dwarf::assemble $asm_file { - global srcdir subdir srcfile - cu { version 3 addr_size 4 } { compile_unit { {producer "GNU C 4.4.3"} @@ -53,7 +51,7 @@ } subprogram { - {MACRO_AT_func { main ${srcdir}/${subdir}/${srcfile} }} + {MACRO_AT_func { main }} {type :$int_label} {external 1 flag} } { diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/implptrpiece.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/implptrpiece.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/implptrpiece.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/implptrpiece.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/implref-array.c gdb-10.2/gdb/testsuite/gdb.dwarf2/implref-array.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/implref-array.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/implref-array.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2016-2020 Free Software Foundation, Inc. +/* Copyright (C) 2016-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/implref-array.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/implref-array.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/implref-array.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/implref-array.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2016-2020 Free Software Foundation, Inc. +# Copyright 2016-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -51,7 +51,7 @@ # The variable must be global so that its name is an exported symbol that we # can reference from the DWARF using gdb_target_symbol. Dwarf::assemble ${asm_file} { - global srcdir subdir srcfile array_length + global array_length cu {} { DW_TAG_compile_unit { @@ -99,7 +99,7 @@ } DW_TAG_subprogram { - {MACRO_AT_func { "main" "${srcdir}/${subdir}/${srcfile}" }} + {MACRO_AT_func { "main" }} {DW_AT_type :${int_label}} {DW_AT_external 1 DW_FORM_flag} } { diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/implref-const.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/implref-const.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/implref-const.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/implref-const.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2016-2020 Free Software Foundation, Inc. +# Copyright 2016-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -47,8 +47,6 @@ # Create the DWARF. We need a regular variable and a reference to it that'll # be marked with DW_OP_GNU_implicit_pointer. Dwarf::assemble ${asm_file} { - global srcdir subdir srcfile - cu {} { DW_TAG_compile_unit { {DW_AT_language @DW_LANG_C_plus_plus} @@ -76,7 +74,7 @@ } DW_TAG_subprogram { - {MACRO_AT_func { "main" "${srcdir}/${subdir}/${srcfile}" }} + {MACRO_AT_func { "main" }} {DW_AT_type :${int_label}} {DW_AT_external 1 DW_FORM_flag} } { diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/implref-global.c gdb-10.2/gdb/testsuite/gdb.dwarf2/implref-global.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/implref-global.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/implref-global.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2016-2020 Free Software Foundation, Inc. +/* Copyright (C) 2016-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/implref-global.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/implref-global.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/implref-global.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/implref-global.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2016-2020 Free Software Foundation, Inc. +# Copyright 2016-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -49,8 +49,6 @@ # that its name is an exported symbol that we can reference from the DWARF # using gdb_target_symbol. Dwarf::assemble ${asm_file} { - global srcdir subdir srcfile - cu {} { DW_TAG_compile_unit { {DW_AT_language @DW_LANG_C_plus_plus} @@ -80,7 +78,7 @@ } DW_TAG_subprogram { - {MACRO_AT_func { "main" "${srcdir}/${subdir}/${srcfile}" }} + {MACRO_AT_func { "main" }} {DW_AT_type :${int_label}} {DW_AT_external 1 DW_FORM_flag} } { diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/implref-struct.c gdb-10.2/gdb/testsuite/gdb.dwarf2/implref-struct.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/implref-struct.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/implref-struct.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2016-2020 Free Software Foundation, Inc. +/* Copyright (C) 2016-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/implref-struct.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/implref-struct.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/implref-struct.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/implref-struct.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2016-2020 Free Software Foundation, Inc. +# Copyright 2016-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -49,8 +49,6 @@ # global so that its name is an exported symbol that can we can reference from # the DWARF using gdb_target_symbol. Dwarf::assemble ${asm_file} { - global srcdir subdir srcfile - cu {} { DW_TAG_compile_unit { {DW_AT_language @DW_LANG_C_plus_plus} @@ -115,7 +113,7 @@ } DW_TAG_subprogram { - {MACRO_AT_func { "main" "${srcdir}/${subdir}/${srcfile}" }} + {MACRO_AT_func { "main" }} {DW_AT_type :${int_label}} {DW_AT_external 1 DW_FORM_flag} } { @@ -177,9 +175,11 @@ # Test assignment through the synthetic reference. gdb_test_no_output "set (ref = s2)" -foreach_with_prefix print-object {"off" "on"} { - gdb_test_no_output "set print object ${print-object}" +with_test_prefix "after assignment" { + foreach_with_prefix print-object {"off" "on"} { + gdb_test_no_output "set print object ${print-object}" - gdb_test "print ref" " = \\(S &\\) @${address}: \\{${s2_members}\\}" "print ref after assignment" - gdb_test "print s1" " = \\{${s2_members}\\}" "print s1 after assignment" + gdb_test "print ref" " = \\(S &\\) @${address}: \\{${s2_members}\\}" "print ref" + gdb_test "print s1" " = \\{${s2_members}\\}" "print s1" + } } diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/imported-unit-abstract-const-value.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/imported-unit-abstract-const-value.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/imported-unit-abstract-const-value.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/imported-unit-abstract-const-value.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,89 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Test that a concrete var importing an abstract var using +# DW_AT_abstract_origin inherits the DW_AT_const_value attribute. + +load_lib dwarf.exp + +# This test can only be run on targets which support DWARF-2 and use gas. +if {![dwarf2_support]} { + return 0 +}; + +standard_testfile main.c .S + +set executable ${testfile} +set asm_file [standard_output_file ${srcfile2}] + +# We need to know the size of integer type in order +# to write some of the debugging info we'd like to generate. +if [prepare_for_testing "failed to prepare" ${testfile} ${srcfile}] { + return -1 +} + +# Create the DWARF. +Dwarf::assemble $asm_file { + declare_labels cu_label main_label int_label + declare_labels aaa_label + set int_size [get_sizeof "int" 4] + + cu {} { + cu_label: partial_unit { + {language @DW_LANG_C} + {name "imported_unit.c"} + } { + int_label: base_type { + {byte_size $int_size sdata} + {encoding @DW_ATE_signed} + {name int} + } + + aaa_label: DW_TAG_variable { + {name aaa} + {type :$int_label} + {const_value 1 DW_FORM_sdata} + } + + main_label: subprogram { + {name main} + {type :$int_label} + {external 1 flag} + } + } + } + + cu {} { + compile_unit { + {language @DW_LANG_C} + {name "<artificial>"} + } { + DW_TAG_variable { + {abstract_origin %$aaa_label} + } + subprogram { + {abstract_origin %$main_label} + {MACRO_AT_range {main}} + } + } + } +} + +if { [prepare_for_testing "failed to prepare" ${testfile} \ + [list $srcfile $asm_file] {nodebug}] } { + return -1 +} + +gdb_test "p aaa" "= 1" diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/imported-unit.c gdb-10.2/gdb/testsuite/gdb.dwarf2/imported-unit.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/imported-unit.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/imported-unit.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2019-2020 Free Software Foundation, Inc. + Copyright 2019-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/imported-unit.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/imported-unit.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/imported-unit.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/imported-unit.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -54,19 +54,6 @@ set int_size [get_sizeof "int" 4] set addr_size [get_sizeof "void *" 8] - global srcdir subdir srcfile - - extern main - extern doit - - set main_range [function_range main ${srcdir}/${subdir}/${srcfile}] - set main_start [lindex $main_range 0] - set main_length [lindex $main_range 1] - - set doit_range [function_range doit ${srcdir}/${subdir}/${srcfile}] - set doit_start [lindex $doit_range 0] - set doit_length [lindex $doit_range 1] - cu {} { compile_unit { {language @DW_LANG_C_plus_plus} @@ -77,13 +64,11 @@ } subprogram { {abstract_origin %$main_label} - {low_pc $main_start addr} - {high_pc "$main_start + $main_length" addr} + {MACRO_AT_range {main}} } { subprogram { {abstract_origin %$doit_label} - {low_pc $doit_start addr} - {high_pc "$doit_start + $doit_length" addr} + {MACRO_AT_range {doit}} } { formal_parameter { {abstract_origin %$doit_self_label} @@ -149,6 +134,49 @@ gdb_test_no_output "set language c++" +set psymtabs_p [psymtabs_p] + +# Verify that the partial symtab for the unit importing the partial unit does +# not contain the static partial symbol int, which is defined in the partial +# unit. Test-case for PR25646. +set test "no static partial symbols in importing unit" +if { $psymtabs_p } { + gdb_test "main print psymbols" \ + [multi_line \ + " Depends on 1 other partial symtabs\." \ + "\[^\r\n\]*" \ + " Global partial symbols:" \ + " `main', function, $hex" \ + "" \ + ".*"] \ + $test +} else { + unsupported $test +} + +# Verify that there's only one partial symtab for imported_unit.c. Test-case +# for PR25700. +set test "no duplicate psymtab for imported_unit.c" +if { $psymtabs_p } { + set line "Partial symtab for source file imported_unit.c" + gdb_test_multiple "maint print psymbols" $test { + -re -wrap "$line.*$line.*" { + fail $gdb_test_name + } + -re -wrap "$line.*" { + pass $gdb_test_name + } + } +} else { + unsupported $test +} + +gdb_test "l imported_unit.c:1" \ + "1\timported_unit.c: No such file or directory\." + +gdb_test "info source" "\r\nCurrent source file is imported_unit.c\r\n.*" \ + "info source for imported_unit.c" + # Sanity check gdb_test "ptype main" "= int \\(void\\)" diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/imported-unit-runto-main.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/imported-unit-runto-main.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/imported-unit-runto-main.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/imported-unit-runto-main.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,83 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +load_lib dwarf.exp + +# This test can only be run on targets which support DWARF-2 and use gas. +if {![dwarf2_support]} { + return 0 +}; + +standard_testfile main.c .S + +set executable ${testfile} +set asm_file [standard_output_file ${srcfile2}] + +# We need to know the size of integer types in order to write some of the +# debugging info we'd like to generate. +if [prepare_for_testing "failed to prepare" ${testfile} ${srcfile}] { + return -1 +} + +# Create the DWARF. +Dwarf::assemble $asm_file { + declare_labels cu_label main_label int_label + declare_labels aaa_label + set int_size [get_sizeof "int" 4] + + cu {} { + cu_label: partial_unit { + {language @DW_LANG_C} + {name "imported_unit.c"} + } { + int_label: base_type { + {byte_size $int_size sdata} + {encoding @DW_ATE_signed} + {name int} + } + + main_label: subprogram { + {name main} + {type :$int_label} + {external 1 flag} + } + } + } + + cu {} { + compile_unit { + {language @DW_LANG_C} + {name "<artificial>"} + } { + subprogram { + {abstract_origin %$main_label} + {MACRO_AT_range {main}} + } + } + } +} + +if { [prepare_for_testing "failed to prepare" ${testfile} \ + [list $srcfile $asm_file] {nodebug}] } { + return -1 +} + +if { [ensure_gdb_index $binfile] == -1 } { + return -1 +} + +clean_restart ${binfile} + +runto main message diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/info-locals-optimized-out.c gdb-10.2/gdb/testsuite/gdb.dwarf2/info-locals-optimized-out.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/info-locals-optimized-out.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/info-locals-optimized-out.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2017-2020 Free Software Foundation, Inc. + Copyright 2017-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/info-locals-optimized-out.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/info-locals-optimized-out.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/info-locals-optimized-out.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/info-locals-optimized-out.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2017-2020 Free Software Foundation, Inc. +# Copyright 2017-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -28,7 +28,6 @@ set asm_file [standard_output_file $srcfile2] Dwarf::assemble $asm_file { - global srcdir subdir srcfile global dwarf_regnum regname set buf_var [gdb_target_symbol buf] @@ -48,7 +47,7 @@ } DW_TAG_subprogram { - {MACRO_AT_func { main ${srcdir}/${subdir}/${srcfile} }} + {MACRO_AT_func { main }} {DW_AT_external 1 flag} } { # A variable completely optimized out. diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/inlined_subroutine-inheritance.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/inlined_subroutine-inheritance.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/inlined_subroutine-inheritance.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/inlined_subroutine-inheritance.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2018-2020 Free Software Foundation, Inc. +# Copyright 2018-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/loclists-multiple-cus.c gdb-10.2/gdb/testsuite/gdb.dwarf2/loclists-multiple-cus.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/loclists-multiple-cus.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/loclists-multiple-cus.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,37 @@ +/* Copyright (C) 2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +static int +func1 (void) +{ + asm ("func1_label: .global func1_label\n"); + return 1; +} + +static int +func2 (void) +{ + asm ("func2_label: .global func2_label\n"); + return 2; +} + +int +main (void) +{ + func1 (); + func2 (); +} diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/loclists-multiple-cus.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/loclists-multiple-cus.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/loclists-multiple-cus.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/loclists-multiple-cus.exp 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,146 @@ +# Copyright 2020 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Test to reproduce the crash described in PR 26813. +# +# When reading a list in any table in the .debug_loclists section, GDB would +# read the header at offset 0 in the section (the header of the first table). +# When the index of the list we read was greater than the number of lists of +# the first table, GDB would erroneously report that the index is invalid. +# +# So this test creates a .debug_loclists section with two tables. The second +# table has more lists than the first one and we try to read a high index in +# the second table. + +load_lib dwarf.exp + +if {![dwarf2_support]} { + return 0 +} + +# Test with 32-bit and 64-bit DWARF. +foreach_with_prefix is_64 {false true} { + if { $is_64 } { + standard_testfile .c -dw64.S + set testfile ${testfile}-dw64 + } else { + standard_testfile .c -dw32.S + set testfile ${testfile}-dw32 + } + + # Get the addresses / lengths of func1 and func2. + lassign [function_range func1 $srcdir/$subdir/$srcfile] func1_addr func1_len + lassign [function_range func2 $srcdir/$subdir/$srcfile] func2_addr func2_len + + set asm_file [standard_output_file $srcfile2] + Dwarf::assemble $asm_file { + global func1_addr func1_len + global func2_addr func2_len + global is_64 + + # The CU uses the DW_FORM_loclistx form to refer to the .debug_loclists + # section. + cu { + version 5 + is_64 $is_64 + } { + declare_labels int_type + + DW_TAG_compile_unit { + {DW_AT_loclists_base cu_table DW_FORM_sec_offset} + } { + int_type: DW_TAG_base_type { + {DW_AT_byte_size 4 DW_FORM_data1} + {DW_AT_encoding @DW_ATE_signed} + {DW_AT_name "int"} + } + + DW_TAG_variable { + {DW_AT_name "foo"} + {DW_AT_location 1 DW_FORM_loclistx} + {DW_AT_type :$int_type} + } + + DW_TAG_subprogram { + {DW_AT_name "func1"} + {DW_AT_low_pc $func1_addr DW_FORM_addr} + {DW_AT_high_pc $func1_len DW_FORM_udata} + } + + DW_TAG_subprogram { + {DW_AT_name "func2"} + {DW_AT_low_pc $func2_addr DW_FORM_addr} + {DW_AT_high_pc $func2_len DW_FORM_udata} + } + } + } + + loclists -is-64 $is_64 { + # This table is unused, but exists so that the used table is not at + # the beginning of the section. + table { + list_ { + start_length 0x1000 0x1000 { DW_OP_addr 0x100000 } + } + } + + # The lists in this table are accessed by index (DW_FORM_rnglistx). + table -post-header-label cu_table { + # This list is unused, but exists to offset the next ones. + list_ { + start_length 0x1000 0x1000 { DW_OP_addr 0x100000 } + } + + # For variable foo. + list_ { + # When in func1. + start_length $func1_addr $func1_len { + DW_OP_constu 0x123456 + DW_OP_stack_value + } + + # When in func2. + start_length $func2_addr $func2_len { + DW_OP_constu 0x234567 + DW_OP_stack_value + } + } + } + } + } + + if { [prepare_for_testing "failed to prepare" ${testfile} \ + [list $srcfile $asm_file] {nodebug}] } { + return -1 + } + + if { ![runto_main] } { + fail "can't run to main" + return + } + + gdb_breakpoint "func1" + gdb_breakpoint "func2" + + gdb_continue_to_breakpoint "func1" + with_test_prefix "at func1" { + gdb_test "print /x foo" " = 0x123456" + } + + gdb_continue_to_breakpoint "func2" + with_test_prefix "at func2" { + gdb_test "print /x foo" " = 0x234567" + } +} diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/loclists-sec-offset.c gdb-10.2/gdb/testsuite/gdb.dwarf2/loclists-sec-offset.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/loclists-sec-offset.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/loclists-sec-offset.c 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,53 @@ +/* Copyright (C) 2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +static int +func1 (void) +{ + asm ("func1_label: .global func1_label\n"); + return 1; +} + +static int +func2 (void) +{ + asm ("func2_label: .global func2_label\n"); + return 2; +} + +static int +func5 (void) +{ + asm ("func5_label: .global func5_label\n"); + return 5; +} + +static int +func6 (void) +{ + asm ("func6_label: .global func6_label\n"); + return 6; +} + +int +main (void) +{ + func1 (); + func2 (); + func5 (); + func6 (); +} diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/loclists-sec-offset.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/loclists-sec-offset.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/loclists-sec-offset.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/loclists-sec-offset.exp 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,192 @@ +# Copyright 2020 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Test DW_AT_location attributes referencing the .debug_loclists section using +# the DW_FORM_sec_offset form. + +load_lib dwarf.exp + +if {![dwarf2_support]} { + return 0 +} + +# Test with 32-bit and 64-bit DWARF. +foreach_with_prefix is_64 {false true} { + if { $is_64 } { + standard_testfile .c -dw64.S + set testfile ${testfile}-dw64 + } else { + standard_testfile .c -dw32.S + set testfile ${testfile}-dw32 + } + + # Get the addresses / lengths of func1 and func2. + lassign [function_range func1 $srcdir/$subdir/$srcfile] func1_addr func1_len + lassign [function_range func2 $srcdir/$subdir/$srcfile] func2_addr func2_len + lassign [function_range func5 $srcdir/$subdir/$srcfile] func5_addr func5_len + lassign [function_range func6 $srcdir/$subdir/$srcfile] func6_addr func6_len + + set asm_file [standard_output_file $srcfile2] + Dwarf::assemble $asm_file { + global func1_addr func1_len + global func2_addr func2_len + global func5_addr func5_len + global func6_addr func6_len + global is_64 + + declare_labels cu_range_list foo_range_list + + # This CU uses the DW_FORM_sec_offset form to refer to the .debug_rnglists + # section. + cu { + version 5 + is_64 $is_64 + } { + declare_labels int_type1 + declare_labels int_type3 + declare_labels foo_location_list + declare_labels baz_location_list + + DW_TAG_compile_unit { + } { + int_type1: DW_TAG_base_type { + {DW_AT_byte_size 4 DW_FORM_data1} + {DW_AT_encoding @DW_ATE_signed} + {DW_AT_name "int"} + } + + DW_TAG_variable { + {DW_AT_name "foo"} + {DW_AT_location $foo_location_list DW_FORM_sec_offset} + {DW_AT_type :$int_type1} + } + + DW_TAG_subprogram { + {DW_AT_name "func1"} + {DW_AT_low_pc $func1_addr DW_FORM_addr} + {DW_AT_high_pc $func1_len DW_FORM_udata} + } + + DW_TAG_subprogram { + {DW_AT_name "func2"} + {DW_AT_low_pc $func2_addr DW_FORM_addr} + {DW_AT_high_pc $func2_len DW_FORM_udata} + } + } + } + + # This CU uses the DW_FORM_sec_offset form to refer to the + # .debug_loclists section. The corresponding contribution in the + # .debug_loclists section has no offset array. + cu { + version 5 + is_64 $is_64 + } { + DW_TAG_compile_unit { + } { + int_type3: DW_TAG_base_type { + {DW_AT_byte_size 4 DW_FORM_data1} + {DW_AT_encoding @DW_ATE_signed} + {DW_AT_name "int"} + } + + DW_TAG_variable { + {DW_AT_name "baz"} + {DW_AT_location $baz_location_list DW_FORM_sec_offset} + {DW_AT_type :$int_type3} + } + + DW_TAG_subprogram { + {DW_AT_name "func5"} + {DW_AT_low_pc $func5_addr DW_FORM_addr} + {DW_AT_high_pc $func5_len DW_FORM_udata} + } + + DW_TAG_subprogram { + {DW_AT_name "func6"} + {DW_AT_low_pc $func6_addr DW_FORM_addr} + {DW_AT_high_pc $func6_len DW_FORM_udata} + } + } + } + + loclists -is-64 $is_64 { + # The lists in this table are accessed by direct offset + # (DW_FORM_sec_offset). + table { + foo_location_list: list_ { + start_length $func1_addr $func1_len { + DW_OP_constu 0x123456 + DW_OP_stack_value + } + + start_length $func2_addr $func2_len { + DW_OP_constu 0x234567 + DW_OP_stack_value + } + } + } + + table -with-offset-array false { + baz_location_list: list_ { + start_length $func5_addr $func5_len { + DW_OP_constu 0x567890 + DW_OP_stack_value + } + + start_length $func6_addr $func6_len { + DW_OP_constu 0x678901 + DW_OP_stack_value + } + } + } + } + } + + if { [prepare_for_testing "failed to prepare" ${testfile} \ + [list $srcfile $asm_file] {nodebug}] } { + return -1 + } + + if { ![runto_main] } { + fail "can't run to main" + return + } + + gdb_breakpoint "func1" + gdb_breakpoint "func2" + gdb_breakpoint "func5" + gdb_breakpoint "func6" + + gdb_continue_to_breakpoint "func1" + with_test_prefix "at func1" { + gdb_test "print /x foo" " = 0x123456" + } + + gdb_continue_to_breakpoint "func2" + with_test_prefix "at func2" { + gdb_test "print /x foo" " = 0x234567" + } + + gdb_continue_to_breakpoint "func5" + with_test_prefix "at func5" { + gdb_test "print /x baz" " = 0x567890" + } + + gdb_continue_to_breakpoint "func6" + with_test_prefix "at func6" { + gdb_test "print /x baz" " = 0x678901" + } +} diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/mac-fileno.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/mac-fileno.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/mac-fileno.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/mac-fileno.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2005-2020 Free Software Foundation, Inc. +# Copyright 2005-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/mac-fileno.S gdb-10.2/gdb/testsuite/gdb.dwarf2/mac-fileno.S --- gdb-9.1/gdb/testsuite/gdb.dwarf2/mac-fileno.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/mac-fileno.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2005-2020 Free Software Foundation, Inc. + Copyright 2005-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/main.c gdb-10.2/gdb/testsuite/gdb.dwarf2/main.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/main.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/main.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2004-2020 Free Software Foundation, Inc. + Copyright 2004-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/main-foo.c gdb-10.2/gdb/testsuite/gdb.dwarf2/main-foo.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/main-foo.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/main-foo.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,34 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +/* Dummy foo function. */ + +void +foo (void) +{ + asm ("foo_label: .globl foo_label"); +} + +/* Dummy main function. */ + +int +main() +{ + asm ("main_label: .globl main_label"); + foo (); + return 0; +} diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/main-subprogram.c gdb-10.2/gdb/testsuite/gdb.dwarf2/main-subprogram.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/main-subprogram.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/main-subprogram.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2016-2020 Free Software Foundation, Inc. + Copyright 2016-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/main-subprogram.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/main-subprogram.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/main-subprogram.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/main-subprogram.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2016-2020 Free Software Foundation, Inc. +# Copyright 2016-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -24,12 +24,6 @@ # Make some DWARF for the test. set asm_file [standard_output_file $srcfile2] Dwarf::assemble $asm_file { - global srcdir subdir srcfile - - set range [function_range mymain ${srcdir}/${subdir}/${srcfile}] - set mymain_start [lindex $range 0] - set mymain_length [lindex $range 1] - cu {} { DW_TAG_compile_unit { {DW_AT_language @DW_LANG_C} @@ -45,9 +39,7 @@ } DW_TAG_subprogram { - {name mymain} - {low_pc $mymain_start addr} - {high_pc "$mymain_start + $mymain_length" addr} + {MACRO_AT_func {mymain}} {type :$type} {DW_AT_main_subprogram 1 flag} } { diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/member-ptr-forwardref.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/member-ptr-forwardref.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/member-ptr-forwardref.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/member-ptr-forwardref.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/member-ptr-forwardref.S gdb-10.2/gdb/testsuite/gdb.dwarf2/member-ptr-forwardref.S --- gdb-9.1/gdb/testsuite/gdb.dwarf2/member-ptr-forwardref.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/member-ptr-forwardref.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/method-ptr.cc gdb-10.2/gdb/testsuite/gdb.dwarf2/method-ptr.cc --- gdb-9.1/gdb/testsuite/gdb.dwarf2/method-ptr.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/method-ptr.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/method-ptr.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/method-ptr.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/method-ptr.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/method-ptr.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/missing-sig-type.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/missing-sig-type.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/missing-sig-type.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/missing-sig-type.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/missing-type-name.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/missing-type-name.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/missing-type-name.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/missing-type-name.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2018-2020 Free Software Foundation, Inc. +# Copyright 2018-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -42,16 +42,6 @@ # Make some DWARF for the test. set asm_file [standard_output_file $srcfile2] Dwarf::assemble $asm_file { - global srcdir subdir srcfile - - set func_result [function_range func ${srcdir}/${subdir}/${srcfile}] - set func_start [lindex $func_result 0] - set func_length [lindex $func_result 1] - - set main_result [function_range main ${srcdir}/${subdir}/${srcfile}] - set main_start [lindex $main_result 0] - set main_length [lindex $main_result 1] - cu {} { DW_TAG_compile_unit { {DW_AT_producer "GNU C 8.1"} @@ -76,15 +66,11 @@ } DW_TAG_subprogram { - {name func} - {low_pc $func_start addr} - {high_pc "$func_start + $func_length" addr} + {MACRO_AT_func func} {type :$int_type} } DW_TAG_subprogram { - {name main} - {low_pc $main_start addr} - {high_pc "$main_start + $main_length" addr} + {MACRO_AT_func main} {type :$main_type} } diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/multidictionary.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/multidictionary.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/multidictionary.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/multidictionary.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -147,12 +147,9 @@ } # We force the DIEs above to be read in via "-readnow". -gdb_spawn_with_cmdline_opts "-readnow" -set test "initial prompt" -gdb_test_multiple "" $test { - -re ".*$gdb_prompt $" { - pass "$test" - } +save_vars { GDBFLAGS } { + set GDBFLAGS "$GDBFLAGS -readnow" + clean_restart } gdb_load $binfile diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/nonvar-access.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/nonvar-access.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/nonvar-access.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/nonvar-access.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2016-2020 Free Software Foundation, Inc. +# Copyright 2016-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -27,12 +27,6 @@ set asm_file [standard_output_file $srcfile2] Dwarf::assemble $asm_file { - global srcdir subdir srcfile - - set range [function_range main ${srcdir}/${subdir}/${srcfile}] - set main_start [lindex $range 0] - set main_length [lindex $range 1] - cu {} { compile_unit { {DW_AT_name main.c} @@ -101,10 +95,8 @@ } DW_TAG_subprogram { - {name main} + {MACRO_AT_func {main}} {DW_AT_external 1 flag} - {low_pc [gdb_target_symbol main] DW_FORM_addr} - {high_pc "$main_start + $main_length" DW_FORM_addr} } { # Simple variable without location. DW_TAG_variable { diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/nostaticblock.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/nostaticblock.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/nostaticblock.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/nostaticblock.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/opaque-type-lookup-2.c gdb-10.2/gdb/testsuite/gdb.dwarf2/opaque-type-lookup-2.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/opaque-type-lookup-2.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/opaque-type-lookup-2.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/opaque-type-lookup.c gdb-10.2/gdb/testsuite/gdb.dwarf2/opaque-type-lookup.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/opaque-type-lookup.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/opaque-type-lookup.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/opaque-type-lookup.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/opaque-type-lookup.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/opaque-type-lookup.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/opaque-type-lookup.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -32,9 +32,6 @@ declare_labels struct_a_label struct_b_label declare_labels opaque_struct_a_label opaque_struct_b_label declare_labels char_type1_label char_type2_label - global srcdir subdir srcfile - - extern main # The partial units are laid out so we're not dependent on the order that # they appear in compunit_symtab.includes. We need the one with the @@ -182,7 +179,7 @@ {name main} } { subprogram { - {MACRO_AT_func { main ${srcdir}/${subdir}/${srcfile} }} + {MACRO_AT_func { main }} } } } diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/per-bfd-sharing.c gdb-10.2/gdb/testsuite/gdb.dwarf2/per-bfd-sharing.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/per-bfd-sharing.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/per-bfd-sharing.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,28 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +static +int foo (int a, int b) +{ + return a + b; +} + +int +main (void) +{ + return foo (2, 3); +} diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/per-bfd-sharing.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/per-bfd-sharing.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/per-bfd-sharing.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/per-bfd-sharing.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,93 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# This test checks that loading a file with different methods (partial symtabs, +# index, readnow) does not crash. + +standard_testfile + +lassign [remote_exec host mktemp -d] ret cache_dir + +# The output of mktemp contains an end of line, remove it. +set cache_dir [string trimright $cache_dir \r\n] + +if { $ret != 0 } { + fail "couldn't create temporary cache dir" + return +} + +verbose -log "Index cache dir: $cache_dir" + +if { [build_executable "failed to prepare" $testfile $srcfile \ + {debug additional_flags=-Wl,--build-id}] == -1 } { + return +} + +# Populate the index-cache. +with_test_prefix "populate index cache" { + clean_restart + + gdb_test_no_output "set index-cache directory $cache_dir" \ + "set index-cache directory" + gdb_test_no_output "set index-cache on" + gdb_test "file $binfile" "Reading symbols from .*" "file" +} + +proc load_binary { method } { + global binfile + global hex + + if { $method == "standard" } { + gdb_test "file $binfile" "Reading symbols from .*" "file" + } elseif { $method == "index" } { + gdb_test_no_output "set index-cache on" + gdb_test "file $binfile" "Reading symbols from .*" "file index" + gdb_test_no_output "set index-cache off" + } elseif { $method == "readnow" } { + gdb_test "file -readnow $binfile" \ + "Reading symbols from .*Expanding full symbols from .*" \ + "file readnow" + } else { + error "unknown method" + } + + # Print a static function: seeing it and its signature confirms GDB + # sees some symbols. + gdb_test "print foo" " = {int \\(int, int\\)} $hex <foo>" +} + +set methods {standard index readnow} + +foreach_with_prefix first $methods { + foreach_with_prefix second $methods { + foreach_with_prefix third $methods { + # Start with a clean GDB. + clean_restart + + # Set the index cache dir, but don't enable the index-cache, it will + # be enabled only when needed, when loading a file with the "index" + # method. + gdb_test_no_output "set index-cache directory $cache_dir" \ + "set index-cache directory" + + # Avoid GDB asking whether we really want to load a new binary. + gdb_test_no_output "set confirm off" + + with_test_prefix "load first" { load_binary $first } + with_test_prefix "load second" { load_binary $second } + with_test_prefix "load third" { load_binary $third } + } + } +} diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/pieces.c gdb-10.2/gdb/testsuite/gdb.dwarf2/pieces.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/pieces.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/pieces.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2010-2020 Free Software Foundation, Inc. +/* Copyright (C) 2010-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/pieces.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/pieces.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/pieces.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/pieces.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/pieces-optimized-out.c gdb-10.2/gdb/testsuite/gdb.dwarf2/pieces-optimized-out.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/pieces-optimized-out.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/pieces-optimized-out.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2013-2020 Free Software Foundation, Inc. +/* Copyright (C) 2013-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/pieces-optimized-out.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/pieces-optimized-out.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/pieces-optimized-out.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/pieces-optimized-out.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/pieces-optimized-out.S gdb-10.2/gdb/testsuite/gdb.dwarf2/pieces-optimized-out.S --- gdb-9.1/gdb/testsuite/gdb.dwarf2/pieces-optimized-out.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/pieces-optimized-out.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/pieces.S gdb-10.2/gdb/testsuite/gdb.dwarf2/pieces.S --- gdb-9.1/gdb/testsuite/gdb.dwarf2/pieces.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/pieces.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/pr10770.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/pr10770.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/pr10770.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/pr10770.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/pr11465.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/pr11465.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/pr11465.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/pr11465.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/pr11465.S gdb-10.2/gdb/testsuite/gdb.dwarf2/pr11465.S --- gdb-9.1/gdb/testsuite/gdb.dwarf2/pr11465.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/pr11465.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2010-2020 Free Software Foundation, Inc. +/* Copyright 2010-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/pr13961.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/pr13961.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/pr13961.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/pr13961.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/pr13961.S gdb-10.2/gdb/testsuite/gdb.dwarf2/pr13961.S --- gdb-9.1/gdb/testsuite/gdb.dwarf2/pr13961.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/pr13961.S 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2012-2020 Free Software Foundation, Inc. +/* Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/rnglists-multiple-cus.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/rnglists-multiple-cus.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/rnglists-multiple-cus.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/rnglists-multiple-cus.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,102 @@ +# Copyright 2020 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Test to reproduce the crash described in PR 26813. +# +# When reading a list in any table in the .debug_rnglists section, GDB would +# read the header at offset 0 in the section (the header of the first table). +# When the index of the list we read was greater than the number of lists of +# the first table, GDB would erroneously report that the index is invalid. +# +# So this test creates a .debug_rnglists section with two tables. The second +# table has more lists than the first one and we try to read a high index in +# the second table. + +load_lib dwarf.exp + +if {![dwarf2_support]} { + return 0 +} + +# Test with 32-bit and 64-bit DWARF. +foreach_with_prefix is_64 {false true} { + if { $is_64 } { + standard_testfile main.c -dw64.S + set testfile ${testfile}-dw64 + } else { + standard_testfile main.c -dw32.S + set testfile ${testfile}-dw32 + } + + set asm_file [standard_output_file $srcfile2] + Dwarf::assemble $asm_file { + global is_64 + + # The CU uses the DW_FORM_rnglistx form to refer to the .debug_rnglists + # section. + cu { + version 5 + is_64 $is_64 + } { + DW_TAG_compile_unit { + {DW_AT_ranges 1 DW_FORM_rnglistx} + {DW_AT_rnglists_base cu_table DW_FORM_sec_offset} + } { + # This tests a DW_AT_ranges attribute of form DW_FORM_rnglistx on a + # function, which was buggy at some point. + DW_TAG_subprogram { + {DW_AT_name "foo"} + {DW_AT_ranges 2 DW_FORM_rnglistx} + } + } + } + + rnglists -is-64 $is_64 { + # This table is unused, but exists so that the used table is not at + # the beginning of the section. + table { + list_ { + start_end 0x1000 0x2000 + } + } + + # The lists in this table are accessed by index (DW_FORM_rnglistx). + table -post-header-label cu_table { + # This list is unused, but exists to offset the next ones. + list_ { + start_end 0x2000 0x3000 + } + + # For the CU. + list_ { + start_end 0x3000 0x4000 + } + + # For function foo. + list_ { + start_end 0x3000 0x3010 + } + } + } + } + + if { [prepare_for_testing "failed to prepare" ${testfile} \ + [list $srcfile $asm_file] {nodebug}] } { + return -1 + } + + # Sanity checks to make sure GDB slurped the symbols correctly. + gdb_test "p/x &foo" " = 0x3000" +} diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/rnglists-sec-offset.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/rnglists-sec-offset.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/rnglists-sec-offset.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/rnglists-sec-offset.exp 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,111 @@ +# Copyright 2020 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Test DW_AT_ranges attributes referencing the .debug_rnglists section using the +# DW_FORM_sec_offset form. + +load_lib dwarf.exp + +if {![dwarf2_support]} { + return 0 +} + +foreach_with_prefix is_64 {false true} { + if { $is_64 } { + standard_testfile main.c -dw64.S + set testfile ${testfile}-dw64 + } else { + standard_testfile main.c -dw32.S + set testfile ${testfile}-dw32 + } + + set asm_file [standard_output_file $srcfile2] + Dwarf::assemble $asm_file { + global is_64 + + declare_labels cu1_range_list cu3_range_list + declare_labels foo_range_list baz_range_list + + # This CU uses the DW_FORM_sec_offset form to refer to the .debug_rnglists + # section. + cu { + version 5 + is_64 $is_64 + } { + DW_TAG_compile_unit { + {DW_AT_ranges $cu1_range_list DW_FORM_sec_offset} + } { + DW_TAG_subprogram { + {DW_AT_name "foo"} + {DW_AT_ranges $foo_range_list DW_FORM_sec_offset} + } + } + } + + # This CU uses the DW_FORM_sec_offset form to refer to the .debug_rnglists + # section. The corresponding contribution in the .debug_rnglists has no + # offset array. + cu { + version 5 + is_64 $is_64 + } { + DW_TAG_compile_unit { + {DW_AT_ranges $cu3_range_list DW_FORM_sec_offset} + } { + DW_TAG_subprogram { + {DW_AT_name "baz"} + {DW_AT_ranges $baz_range_list DW_FORM_sec_offset} + } + } + } + + rnglists -is-64 $is_64 { + # The lists in this table are accessed by direct offset + # (DW_FORM_sec_offset). + table { + # For the CU. + cu1_range_list: list_ { + start_end 0x4000 0x5000 + } + + # For function foo. + foo_range_list: list_ { + start_end 0x4000 0x4010 + } + } + + table -with-offset-array false { + # For the third CU. + cu3_range_list: list_ { + start_end 0x6000 0x7000 + } + + # For the baz function. + baz_range_list: list_ { + start_end 0x6000 0x6010 + } + } + } + } + + if { [prepare_for_testing "failed to prepare" ${testfile} \ + [list $srcfile $asm_file] {nodebug}] } { + return -1 + } + + # Sanity checks to make sure GDB slurped the symbols correctly. + gdb_test "p/x &foo" " = 0x4000" + gdb_test "p/x &baz" " = 0x6000" +} diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/shortpiece.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/shortpiece.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/shortpiece.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/shortpiece.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2017-2020 Free Software Foundation, Inc. +# Copyright 2017-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/staticvirtual.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/staticvirtual.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/staticvirtual.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/staticvirtual.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/struct-with-sig.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/struct-with-sig.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/struct-with-sig.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/struct-with-sig.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,129 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +load_lib dwarf.exp + +# This test can only be run on targets which support DWARF-2 and use gas. +if {![dwarf2_support]} { + return 0 +} + +standard_testfile main-foo.c .S + +# Make some DWARF for the test. +set asm_file [standard_output_file $srcfile2] +Dwarf::assemble $asm_file { + cu {} { + compile_unit { + {DW_AT_language @DW_LANG_C} + {DW_AT_name main.c} + } { + structure_type { + {name s} + {signature 0x0000000000000001 ref_sig8} + {declaration 1 flag} + } + DW_TAG_subprogram { + {MACRO_AT_func {main}} + } + } + } + + cu {} { + compile_unit { + {DW_AT_language @DW_LANG_C} + {DW_AT_name foo.c} + } { + structure_type { + {name s} + {signature 0x0000000000000002 ref_sig8} + {declaration 1 flag} + } + DW_TAG_subprogram { + {MACRO_AT_func {foo}} + } + } + } + + tu {} 0x0000000000000001 the_type_i { + type_unit {} { + declare_labels int_type + + the_type_i: structure_type { + {name s} + {byte_size 4 sdata} + } { + member { + {name i} + {type :$int_type} + } + } + int_type: base_type { + {name int} + {encoding @DW_ATE_signed} + {byte_size 4 sdata} + } + } + } + + tu {} 0x0000000000000002 the_type_j { + type_unit {} { + declare_labels int_type + + the_type_j: structure_type { + {name s} + {byte_size 4 sdata} + } { + member { + {name j} + {type :$int_type} + } + } + int_type: base_type { + {name int} + {encoding @DW_ATE_signed} + {byte_size 4 sdata} + } + } + } +} + +if { [prepare_for_testing "failed to prepare" ${testfile} \ + [list $srcfile $asm_file] {nodebug}] } { + return -1 +} + +set struct_s_i_re \ + [multi_line \ + "type = struct s {" \ + " int i;" \ + "}"] +set struct_s_j_re \ + [multi_line \ + "type = struct s {" \ + " int j;" \ + "}"] + +if ![runto_main] { + return -1 +} + +gdb_test "ptype struct s" $struct_s_i_re \ + "struct s with int i" + +gdb_breakpoint "foo" +gdb_continue_to_breakpoint "foo" + +gdb_test "ptype struct s" $struct_s_j_re \ + "struct s with int j" diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/subrange.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/subrange.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/subrange.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/subrange.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/symtab-producer.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/symtab-producer.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/symtab-producer.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/symtab-producer.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/template-specification-full-name.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/template-specification-full-name.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/template-specification-full-name.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/template-specification-full-name.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,77 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Test to reproduce the crash described in PR 26693. The following DWARF was +# crashing GDB while loading partial symbols: a DW_TAG_subprogram with a +# DW_AT_specification (pointing to another subprogram), without a DW_AT_name +# and with a template parameter (DW_TAG_template_type_parameter). More +# precisely, the crash was happening when trying to compute the full name of the +# subprogram. + +load_lib dwarf.exp + +if {![dwarf2_support]} { + return 0 +} + +standard_testfile main.c .S + +set asm_file [standard_output_file $srcfile2] +Dwarf::assemble $asm_file { + cu {} { + DW_TAG_compile_unit { + {DW_AT_language @DW_LANG_C_plus_plus} + } { + declare_labels templated_subprogram int + + int: DW_TAG_base_type { + {DW_AT_name "int"} + {DW_AT_byte_size 4 DW_FORM_data1} + {DW_AT_encoding @DW_ATE_signed} + } + + # The templated subprogram. + templated_subprogram: DW_TAG_subprogram { + {DW_AT_name "apply"} + } + + # The template specialization. + # + # The low and high PC are phony: we just need an address range that + # is valid in the program, so we use the main function's range. + DW_TAG_subprogram { + {DW_AT_specification :$templated_subprogram} + {MACRO_AT_range main} + } { + DW_TAG_template_type_param { + {DW_AT_name "T"} + {DW_AT_type :$int DW_FORM_ref4} + } + } + } + } +} + +if { [prepare_for_testing "failed to prepare" ${testfile} \ + [list $srcfile $asm_file] {nodebug}] } { + return -1 +} + +if ![runto_main] { + return -1 +} + +# Just a sanity check to make sure GDB slurped the symbols correctly. +gdb_test "print apply<int>" " = {void \\(void\\)} $hex <apply<int>\\(\\)>" diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/trace-crash.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/trace-crash.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/trace-crash.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/trace-crash.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/typeddwarf-amd64.S gdb-10.2/gdb/testsuite/gdb.dwarf2/typeddwarf-amd64.S --- gdb-9.1/gdb/testsuite/gdb.dwarf2/typeddwarf-amd64.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/typeddwarf-amd64.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/typeddwarf.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/typeddwarf.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/typeddwarf.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/typeddwarf.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/typeddwarf.S gdb-10.2/gdb/testsuite/gdb.dwarf2/typeddwarf.S --- gdb-9.1/gdb/testsuite/gdb.dwarf2/typeddwarf.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/typeddwarf.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/typedef-void-finish.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/typedef-void-finish.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/typedef-void-finish.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/typedef-void-finish.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -29,16 +29,6 @@ # Make some DWARF for the test. set asm_file [standard_output_file $srcfile2] Dwarf::assemble $asm_file { - global srcdir subdir srcfile - - set func_result [function_range func ${srcdir}/${subdir}/${srcfile}] - set func_start [lindex $func_result 0] - set func_length [lindex $func_result 1] - - set main_result [function_range main ${srcdir}/${subdir}/${srcfile}] - set main_start [lindex $main_result 0] - set main_length [lindex $main_result 1] - cu {} { DW_TAG_compile_unit { {DW_AT_producer "GNU C 8.1"} @@ -58,15 +48,11 @@ } DW_TAG_subprogram { - {name func} - {low_pc $func_start addr} - {high_pc "$func_start + $func_length" addr} + {MACRO_AT_func {func}} {type :$void_typedef} } DW_TAG_subprogram { - {name main} - {low_pc $main_start addr} - {high_pc "$main_start + $main_length" addr} + {MACRO_AT_func {main}} {type :$main_type} } } diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/valop.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/valop.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/valop.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/valop.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2009-2020 Free Software Foundation, Inc. +# Copyright 2009-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/valop.S gdb-10.2/gdb/testsuite/gdb.dwarf2/valop.S --- gdb-9.1/gdb/testsuite/gdb.dwarf2/valop.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/valop.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* - Copyright 2009-2020 Free Software Foundation, Inc. + Copyright 2009-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/var-access.c gdb-10.2/gdb/testsuite/gdb.dwarf2/var-access.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/var-access.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/var-access.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2017-2020 Free Software Foundation, Inc. + Copyright 2017-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/var-access.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/var-access.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/var-access.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/var-access.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2017-2020 Free Software Foundation, Inc. +# Copyright 2017-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -50,7 +50,6 @@ set asm_file [standard_output_file $srcfile2] Dwarf::assemble $asm_file { - global srcdir subdir srcfile global dwarf_regnum regname set buf_var [gdb_target_symbol buf] @@ -162,7 +161,7 @@ } DW_TAG_subprogram { - {MACRO_AT_func { main ${srcdir}/${subdir}/${srcfile} }} + {MACRO_AT_func { main }} {DW_AT_external 1 flag} } { # Simple memory location. diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/variant.c gdb-10.2/gdb/testsuite/gdb.dwarf2/variant.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/variant.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/variant.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2018-2020 Free Software Foundation, Inc. +/* Copyright 2018-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/variant.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/variant.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/variant.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/variant.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2018-2020 Free Software Foundation, Inc. +# Copyright 2018-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -91,6 +91,7 @@ discr_1_label: member { {type :$uinteger_label} {data_member_location 0 data1} + {artificial 1 DW_FORM_flag_present} } variant { @@ -123,6 +124,7 @@ discr_2_label: member { {type :$uinteger_label} {data_member_location 0 data1} + {artificial 1 DW_FORM_flag_present} } variant { @@ -172,6 +174,7 @@ discr_3_label: member { {type :$int8_label} {data_member_location 0 data1} + {artificial 1 DW_FORM_flag_present} } variant { diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/varval.c gdb-10.2/gdb/testsuite/gdb.dwarf2/varval.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/varval.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/varval.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2018-2020 Free Software Foundation, Inc. +/* Copyright (C) 2018-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/varval.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/varval.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/varval.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/varval.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2018-2020 Free Software Foundation, Inc. +# Copyright 2018-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -38,6 +38,9 @@ if [prepare_for_testing "failed to prepare" ${testfile} ${srcfile}] { return -1 } +set int_size [get_sizeof "int" -1] +# gdb always assumes references are implemented as pointers. +set addr_size [get_sizeof "void *" -1] proc setup_exec { arg_bad } { global asm_file executable srcfile bad @@ -45,7 +48,7 @@ # Create the DWARF. Dwarf::assemble ${asm_file} { - global srcdir subdir srcfile bad + global bad int_size addr_size cu {} { DW_TAG_compile_unit { @@ -58,10 +61,6 @@ varval2_label varval3_def_label varval3_decl_label \ int_array_label int_array_of_1_label - set int_size [get_sizeof "int" -1] - - # gdb always assumes references are implemented as pointers. - set addr_size [get_sizeof "void *" -1] int_label: DW_TAG_base_type { {DW_AT_byte_size ${int_size} DW_FORM_udata} @@ -199,7 +198,7 @@ } DW_TAG_subprogram { - {MACRO_AT_func { "main" "${srcdir}/${subdir}/${srcfile}" }} + {MACRO_AT_func { "main" }} {DW_AT_type :${int_label}} {DW_AT_external 1 DW_FORM_flag} } { @@ -208,6 +207,8 @@ {DW_AT_type :${int_label}} {DW_AT_location { DW_OP_GNU_variable_value ${var_a_label} + DW_OP_const1s 0 + DW_OP_or DW_OP_stack_value } SPECIAL_expr} } diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/void-type.c gdb-10.2/gdb/testsuite/gdb.dwarf2/void-type.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/void-type.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/void-type.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2018-2020 Free Software Foundation, Inc. +/* Copyright (C) 2018-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/void-type.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/void-type.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/void-type.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/void-type.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2018-2020 Free Software Foundation, Inc. +# Copyright 2018-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -36,16 +36,6 @@ # Make some DWARF for the test. set asm_file [standard_output_file $srcfile2] Dwarf::assemble $asm_file { - global srcdir subdir srcfile - - set func_result [function_range func ${srcdir}/${subdir}/${srcfile}] - set func_start [lindex $func_result 0] - set func_length [lindex $func_result 1] - - set main_result [function_range main ${srcdir}/${subdir}/${srcfile}] - set main_start [lindex $main_result 0] - set main_length [lindex $main_result 1] - cu {} { DW_TAG_compile_unit { {DW_AT_producer "Intel(R) C Intel(R) 64 Compiler XE for applications running on Intel(R) 64, Version 14.0.5.212 Build 20150212"} @@ -72,15 +62,11 @@ } DW_TAG_subprogram { - {name func} - {low_pc $func_start addr} - {high_pc "$func_start + $func_length" addr} + {MACRO_AT_func {func}} {type :$void_type} } DW_TAG_subprogram { - {name main} - {low_pc $main_start addr} - {high_pc "$main_start + $main_length" addr} + {MACRO_AT_func {main}} {type :$int_type} } diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/watch-notconst2.c gdb-10.2/gdb/testsuite/gdb.dwarf2/watch-notconst2.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/watch-notconst2.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/watch-notconst2.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/watch-notconst2.S gdb-10.2/gdb/testsuite/gdb.dwarf2/watch-notconst2.S --- gdb-9.1/gdb/testsuite/gdb.dwarf2/watch-notconst2.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/watch-notconst2.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/watch-notconst.c gdb-10.2/gdb/testsuite/gdb.dwarf2/watch-notconst.c --- gdb-9.1/gdb/testsuite/gdb.dwarf2/watch-notconst.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/watch-notconst.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.dwarf2/watch-notconst.exp gdb-10.2/gdb/testsuite/gdb.dwarf2/watch-notconst.exp --- gdb-9.1/gdb/testsuite/gdb.dwarf2/watch-notconst.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.dwarf2/watch-notconst.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/array-bounds.exp gdb-10.2/gdb/testsuite/gdb.fortran/array-bounds.exp --- gdb-9.1/gdb/testsuite/gdb.fortran/array-bounds.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/array-bounds.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -20,13 +20,14 @@ set testfile "array-bounds" standard_testfile .f90 +load_lib fortran.exp if {[prepare_for_testing $testfile.exp $testfile $srcfile {f90 debug}]} { return -1 } -if {![runto MAIN__]} { - perror "Could not run to breakpoint `MAIN__'." +if {![fortran_runto_main]} { + perror "Could not run to main." continue } diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/array-bounds.f90 gdb-10.2/gdb/testsuite/gdb.fortran/array-bounds.f90 --- gdb-9.1/gdb/testsuite/gdb.fortran/array-bounds.f90 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/array-bounds.f90 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -! Copyright 2012-2020 Free Software Foundation, Inc. +! Copyright 2012-2021 Free Software Foundation, Inc. ! This program is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/array-bounds-high.exp gdb-10.2/gdb/testsuite/gdb.fortran/array-bounds-high.exp --- gdb-9.1/gdb/testsuite/gdb.fortran/array-bounds-high.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/array-bounds-high.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,40 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# This file is part of the gdb testsuite. It contains test to ensure that +# array bounds accept LONGEST. + +if { [skip_fortran_tests] } { return -1 } + +set testfile "array-bounds-high" +standard_testfile .f90 +load_lib fortran.exp + +if {[prepare_for_testing $testfile.exp $testfile $srcfile {f90 debug}]} { + return -1 +} + +if {![fortran_runto_main]} { + perror "Could not run to main." + continue +} + +gdb_test "until 21" {21.*print.*} + +# Lets check whether too high (with - sign) indexed array are printed correctly +gdb_test "print arr1" {.*\(11, 11\).*} + +# Lets check whether too high (with + sign) indexed array are printed correctly +gdb_test "print arr2" {.*\(22, 22\).*} diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/array-bounds-high.f90 gdb-10.2/gdb/testsuite/gdb.fortran/array-bounds-high.f90 --- gdb-9.1/gdb/testsuite/gdb.fortran/array-bounds-high.f90 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/array-bounds-high.f90 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,23 @@ +! Copyright 2020-2021 Free Software Foundation, Inc. + +! This program is free software; you can redistribute it and/or modify +! it under the terms of the GNU General Public License as published by +! the Free Software Foundation; either version 3 of the License, or +! (at your option) any later version. +! +! This program is distributed in the hope that it will be useful, +! but WITHOUT ANY WARRANTY; without even the implied warranty of +! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +! GNU General Public License for more details. +! +! You should have received a copy of the GNU General Public License +! along with this program. If not, see <http://www.gnu.org/licenses/>. + +program main + integer(4) :: arr1(-4294967297_8:-4294967296_8) + integer(4) :: arr2(4294967296_8:4294967297_8) + arr1 = 11 + arr2 = 22 + print *, 'arr1 = ', arr1 + print *, 'arr2 = ', arr2 +end diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/array-element.exp gdb-10.2/gdb/testsuite/gdb.fortran/array-element.exp --- gdb-9.1/gdb/testsuite/gdb.fortran/array-element.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/array-element.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2005-2020 Free Software Foundation, Inc. +# Copyright 2005-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/array-element.f gdb-10.2/gdb/testsuite/gdb.fortran/array-element.f --- gdb-9.1/gdb/testsuite/gdb.fortran/array-element.f 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/array-element.f 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -c Copyright 2005-2020 Free Software Foundation, Inc. +c Copyright 2005-2021 Free Software Foundation, Inc. c This program is free software; you can redistribute it and/or modify c it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/array-slices.exp gdb-10.2/gdb/testsuite/gdb.fortran/array-slices.exp --- gdb-9.1/gdb/testsuite/gdb.fortran/array-slices.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/array-slices.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -21,13 +21,14 @@ if {[skip_fortran_tests]} { return -1 } standard_testfile ".f90" +load_lib fortran.exp if {[prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} \ {debug f90}]} { return -1 } -if ![runto_main] { +if ![fortran_runto_main] { untested "could not run to main" return -1 } diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/array-slices.f90 gdb-10.2/gdb/testsuite/gdb.fortran/array-slices.f90 --- gdb-9.1/gdb/testsuite/gdb.fortran/array-slices.f90 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/array-slices.f90 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -! Copyright 2019-2020 Free Software Foundation, Inc. +! Copyright 2019-2021 Free Software Foundation, Inc. ! ! This program is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/block-data.exp gdb-10.2/gdb/testsuite/gdb.fortran/block-data.exp --- gdb-9.1/gdb/testsuite/gdb.fortran/block-data.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/block-data.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2016-2020 Free Software Foundation, Inc. +# Copyright 2016-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -30,8 +30,8 @@ return -1 } -if ![runto MAIN__] then { - untested "couldn't run to breakpoint MAIN__" +if ![fortran_runto_main] then { + untested "couldn't run to main" return -1 } diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/block-data.f gdb-10.2/gdb/testsuite/gdb.fortran/block-data.f --- gdb-9.1/gdb/testsuite/gdb.fortran/block-data.f 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/block-data.f 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -! Copyright 2016-2020 Free Software Foundation, Inc. +! Copyright 2016-2021 Free Software Foundation, Inc. ! ! This program is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/charset.exp gdb-10.2/gdb/testsuite/gdb.fortran/charset.exp --- gdb-9.1/gdb/testsuite/gdb.fortran/charset.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/charset.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -19,12 +19,14 @@ if { [skip_fortran_tests] } { return -1 } standard_testfile .f90 +load_lib fortran.exp + if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile} {debug additional_flags=-fbackslash f90}] } { return -1 } -if ![runto MAIN__] { - perror "Couldn't run to MAIN__" +if ![fortran_runto_main] { + perror "Couldn't run to main" continue } diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/class-allocatable-array.exp gdb-10.2/gdb/testsuite/gdb.fortran/class-allocatable-array.exp --- gdb-9.1/gdb/testsuite/gdb.fortran/class-allocatable-array.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/class-allocatable-array.exp 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,43 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/> . + +# Test that GDB can print an allocatable array that is a data field +# within a class like type. + +if {[skip_fortran_tests]} { return -1 } + +standard_testfile ".f90" +load_lib fortran.exp + +if {[prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} \ + {debug f90}]} { + return -1 +} + +if ![fortran_runto_main] { + untested "could not run to main" + return -1 +} + +gdb_breakpoint [gdb_get_line_number "Break Here"] +gdb_continue_to_breakpoint "Break Here" + +# If this first test fails then the Fortran compiler being used uses +# different names, or maybe a completely different approach, for +# representing class like structures. The following tests are +# cetainly going to fail. +gdb_test "print this" " = \\( _data = \[^\r\n\]+, _vptr = \[^\r\n\]+\\)" +gdb_test "print this%_data" " = \\(PTR TO -> \\( Type test_type \\)\\) \[^\r\n\]+" +gdb_test "print this%_data%b" " = \\(\\( 1, 2, 3\\) \\( 4, 5, 6\\) \\)" diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/class-allocatable-array.f90 gdb-10.2/gdb/testsuite/gdb.fortran/class-allocatable-array.f90 --- gdb-9.1/gdb/testsuite/gdb.fortran/class-allocatable-array.f90 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/class-allocatable-array.f90 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,54 @@ +! Copyright 2020-2021 Free Software Foundation, Inc. +! +! This program is free software; you can redistribute it and/or modify +! it under the terms of the GNU General Public License as published by +! the Free Software Foundation; either version 3 of the License, or +! (at your option) any later version. +! +! This program is distributed in the hope that it will be useful, +! but WITHOUT ANY WARRANTY; without even the implied warranty of +! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +! GNU General Public License for more details. +! +! You should have received a copy of the GNU General Public License +! along with this program. If not, see <http://www.gnu.org/licenses/>. + +module test_module + type test_type + integer a + real, allocatable :: b (:, :) + contains + procedure :: test_proc + end type test_type + +contains + + subroutine test_proc (this) + class(test_type), intent (inout) :: this + allocate (this%b (3, 2)) + call fill_array_2d (this%b) + print *, "" ! Break Here + contains + ! Helper subroutine to fill 2-dimensional array with unique + ! values. + subroutine fill_array_2d (array) + real, dimension (:,:) :: array + real :: counter + + counter = 1.0 + do i=LBOUND (array, 2), UBOUND (array, 2), 1 + do j=LBOUND (array, 1), UBOUND (array, 1), 1 + array (j,i) = counter + counter = counter + 1 + end do + end do + end subroutine fill_array_2d + end subroutine test_proc +end module + +program test + use test_module + implicit none + type(test_type) :: t + call t%test_proc () +end program test diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/common-block.exp gdb-10.2/gdb/testsuite/gdb.fortran/common-block.exp --- gdb-9.1/gdb/testsuite/gdb.fortran/common-block.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/common-block.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -27,8 +27,8 @@ return -1 } -if ![runto MAIN__] then { - perror "couldn't run to breakpoint MAIN__" +if ![fortran_runto_main] then { + perror "couldn't run to main" continue } diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/common-block.f90 gdb-10.2/gdb/testsuite/gdb.fortran/common-block.f90 --- gdb-9.1/gdb/testsuite/gdb.fortran/common-block.f90 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/common-block.f90 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -! Copyright 2008-2020 Free Software Foundation, Inc. +! Copyright 2008-2021 Free Software Foundation, Inc. ! ! This program is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/complex.exp gdb-10.2/gdb/testsuite/gdb.fortran/complex.exp --- gdb-9.1/gdb/testsuite/gdb.fortran/complex.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/complex.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2007-2020 Free Software Foundation, Inc. +# Copyright 2007-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -14,16 +14,23 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. standard_testfile .f90 +load_lib fortran.exp + +if {[skip_fortran_tests]} { return -1 } if {[prepare_for_testing "failed to prepare" $testfile $srcfile {debug f90 quiet}]} { return -1 } -if ![runto MAIN__] then { - perror "Couldn't run to MAIN__" +if ![fortran_runto_main] then { + perror "Couldn't run to main" continue } +# Depending on the compiler being used, the type names can be printed differently. +set complex4 [fortran_complex4] +set complex8 [fortran_complex8] +set complex16 [fortran_complex16] gdb_breakpoint [gdb_get_line_number "stop"] gdb_continue_to_breakpoint "continue" @@ -35,23 +42,31 @@ gdb_test "print c16" " = \\(-874,19\\)" -gdb_test "whatis c" "type = complex\\(kind=4\\)" +gdb_test "whatis c" "type = $complex4" gdb_test "print \$_creal (c)" " = 1000" -gdb_test "whatis \$" " = real" +with_test_prefix "c" { + gdb_test "whatis \$" " = real" +} -gdb_test "whatis c4" "type = complex\\(kind=4\\)" +gdb_test "whatis c4" "type = $complex4" gdb_test "print \$_creal (c4)" " = 1000" -gdb_test "whatis \$" " = real" - -gdb_test "whatis c8" "type = complex\\(kind=8\\)" +with_test_prefix "c4" { + gdb_test "whatis \$" " = real" +} +gdb_test "whatis c8" "type = $complex8" gdb_test "print \$_creal (c8)" " = 321" -gdb_test "whatis \$" " = real\\*8" - -gdb_test "whatis dc" "type = complex\\(kind=8\\)" +with_test_prefix "c8" { + gdb_test "whatis \$" " = real\\*8" +} +gdb_test "whatis dc" "type = $complex8" gdb_test "print \$_creal (dc)" " = 321" -gdb_test "whatis \$" " = real\\*8" +with_test_prefix "dc" { + gdb_test "whatis \$" " = real\\*8" +} -gdb_test "whatis c16" "type = complex\\(kind=16\\)" +gdb_test "whatis c16" "type = $complex16" gdb_test "print \$_creal (c16)" " = -874" -gdb_test "whatis \$" " = real\\*16" +with_test_prefix "c16" { + gdb_test "whatis \$" " = real\\*16" +} diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/complex.f90 gdb-10.2/gdb/testsuite/gdb.fortran/complex.f90 --- gdb-9.1/gdb/testsuite/gdb.fortran/complex.f90 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/complex.f90 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -! Copyright 2007-2020 Free Software Foundation, Inc. +! Copyright 2007-2021 Free Software Foundation, Inc. ! ! This program is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/derived-type.exp gdb-10.2/gdb/testsuite/gdb.fortran/derived-type.exp --- gdb-9.1/gdb/testsuite/gdb.fortran/derived-type.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/derived-type.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2005-2020 Free Software Foundation, Inc. +# Copyright 2005-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -27,8 +27,8 @@ return -1 } -if ![runto MAIN__] then { - perror "couldn't run to breakpoint MAIN__" +if ![fortran_runto_main] then { + perror "couldn't run to main" continue } diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/derived-type.f90 gdb-10.2/gdb/testsuite/gdb.fortran/derived-type.f90 --- gdb-9.1/gdb/testsuite/gdb.fortran/derived-type.f90 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/derived-type.f90 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -! Copyright 2006-2020 Free Software Foundation, Inc. +! Copyright 2006-2021 Free Software Foundation, Inc. ! ! This program is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/derived-type-function.exp gdb-10.2/gdb/testsuite/gdb.fortran/derived-type-function.exp --- gdb-9.1/gdb/testsuite/gdb.fortran/derived-type-function.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/derived-type-function.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2016-2020 Free Software Foundation, Inc. +# Copyright 2016-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -21,13 +21,14 @@ if { [skip_fortran_tests] } { return -1 } standard_testfile .f90 +load_lib fortran.exp if {[prepare_for_testing "failed to prepare" $testfile $srcfile {debug f90}]} { return -1 } -if ![runto MAIN__] then { - perror "couldn't run to breakpoint MAIN__" +if ![fortran_runto_main] then { + perror "couldn't run to main" continue } diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/derived-type-function.f90 gdb-10.2/gdb/testsuite/gdb.fortran/derived-type-function.f90 --- gdb-9.1/gdb/testsuite/gdb.fortran/derived-type-function.f90 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/derived-type-function.f90 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -! Copyright 2016-2020 Free Software Foundation, Inc. +! Copyright 2016-2021 Free Software Foundation, Inc. ! ! This program is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/derived-type-striding.exp gdb-10.2/gdb/testsuite/gdb.fortran/derived-type-striding.exp --- gdb-9.1/gdb/testsuite/gdb.fortran/derived-type-striding.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/derived-type-striding.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -41,3 +41,5 @@ # Test mixed type derived type. if { $gcc_with_broken_stride } { setup_kfail *-*-* gcc/92775 } gdb_test "p point_mixed_dimension" "= \\\(3, 3, 3, 3\\\)" + +gdb_test "p cloud_slice" " = \\\(\\\( x = 1, y = 2, z = 3 \\\)\\\)" diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/derived-type-striding.f90 gdb-10.2/gdb/testsuite/gdb.fortran/derived-type-striding.f90 --- gdb-9.1/gdb/testsuite/gdb.fortran/derived-type-striding.f90 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/derived-type-striding.f90 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -! Copyright 2019-2020 Free Software Foundation, Inc. +! Copyright 2019-2021 Free Software Foundation, Inc. ! ! This program is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by @@ -28,9 +28,11 @@ type(mixed_cartesian), dimension(10), target :: mixed_cloud integer(kind=8), dimension(:), pointer :: point_dimension => null() integer(kind=8), dimension(:), pointer :: point_mixed_dimension => null() + type(cartesian), dimension(:), pointer :: cloud_slice => null() cloud(:)%x = 1 cloud(:)%y = 2 cloud(:)%z = 3 + cloud_slice => cloud(3:2:-2) point_dimension => cloud(1:9)%y mixed_cloud(:)%x = 1 mixed_cloud(:)%y = 2 diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/dot-ops.exp gdb-10.2/gdb/testsuite/gdb.fortran/dot-ops.exp --- gdb-9.1/gdb/testsuite/gdb.fortran/dot-ops.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/dot-ops.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/exprs.exp gdb-10.2/gdb/testsuite/gdb.fortran/exprs.exp --- gdb-9.1/gdb/testsuite/gdb.fortran/exprs.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/exprs.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/function-calls.exp gdb-10.2/gdb/testsuite/gdb.fortran/function-calls.exp --- gdb-9.1/gdb/testsuite/gdb.fortran/function-calls.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/function-calls.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -24,6 +24,21 @@ return -1 } +with_complaints 5 { + set cmd "maint expand-symtabs $srcfile" + set cmd_regexp [string_to_regexp $cmd] + set re_kfail [concat "During symbol reading:" \ + " unable to find array range"] + gdb_test_multiple $cmd "no complaints in srcfile" { + -re -wrap "$re_kfail.*" { + kfail symtab/27388 $gdb_test_name + } + -re "^$cmd_regexp\r\n$gdb_prompt $" { + pass $gdb_test_name + } + } +} + if {![runto [gdb_get_line_number "post_init"]]} then { perror "couldn't run to breakpoint post_init" continue diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/function-calls.f90 gdb-10.2/gdb/testsuite/gdb.fortran/function-calls.f90 --- gdb-9.1/gdb/testsuite/gdb.fortran/function-calls.f90 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/function-calls.f90 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -! Copyright 2019-2020 Free Software Foundation, Inc. +! Copyright 2019-2021 Free Software Foundation, Inc. ! ! This program is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/info-modules.exp gdb-10.2/gdb/testsuite/gdb.fortran/info-modules.exp --- gdb-9.1/gdb/testsuite/gdb.fortran/info-modules.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/info-modules.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -28,8 +28,8 @@ return -1 } -if { ![runto MAIN__] } { - perror "Could not run to breakpoint `MAIN__'." +if { ![fortran_runto_main] } { + perror "Could not run to main." continue } @@ -76,7 +76,7 @@ "void mod2::sub_m2_a\\(${integer4}, ${logical4}\\);" GDBInfoModuleSymbols::check_entry "${srcfile2}" "mod2" "30" \ "${logical4} mod2::sub_m2_b\\(${real4}\\);" -GDBInfoModuleSymbols::check_entry "${srcfile}" "mod1" "35" \ +GDBInfoModuleSymbols::check_optional_entry "${srcfile}" "mod1" "35" \ "void mod1::__copy_mod1_M1t1\\(Type m1t1, Type m1t1\\);" GDBInfoModuleSymbols::check_entry "${srcfile}" "mod1" "25" \ "void mod1::sub_m1_a\\(${integer4}\\);" @@ -88,7 +88,7 @@ GDBInfoModuleSymbols::run_command "info module functions -m mod1" GDBInfoModuleSymbols::check_header \ "All functions in all modules matching regular expression \"mod1\":" -GDBInfoModuleSymbols::check_entry "${srcfile}" "mod1" "35" \ +GDBInfoModuleSymbols::check_optional_entry "${srcfile}" "mod1" "35" \ "void mod1::__copy_mod1_M1t1\\(Type m1t1, Type m1t1\\);" GDBInfoModuleSymbols::check_entry "${srcfile}" "mod1" "25" \ "void mod1::sub_m1_a\\(${integer4}\\);" @@ -117,9 +117,9 @@ "${integer4} mod2::mod2_var_1;" GDBInfoModuleSymbols::check_entry "${srcfile2}" "mod2" "20" \ "${real4} mod2::mod2_var_2;" -GDBInfoModuleSymbols::check_entry "${srcfile}" "mod1" "35" \ +GDBInfoModuleSymbols::check_optional_entry "${srcfile}" "mod1" "(35)?" \ "Type m1t1 mod1::__def_init_mod1_M1t1;" -GDBInfoModuleSymbols::check_entry "${srcfile}" "mod1" "35" \ +GDBInfoModuleSymbols::check_optional_entry "${srcfile}" "mod1" "(35)?" \ "Type __vtype_mod1_M1t1 mod1::__vtab_mod1_M1t1;" GDBInfoModuleSymbols::check_entry "${srcfile}" "mod1" "21" \ "${real4} mod1::mod1_var_1;" diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/info-types-2.f90 gdb-10.2/gdb/testsuite/gdb.fortran/info-types-2.f90 --- gdb-9.1/gdb/testsuite/gdb.fortran/info-types-2.f90 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/info-types-2.f90 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -! Copyright 2019-2020 Free Software Foundation, Inc. +! Copyright 2019-2021 Free Software Foundation, Inc. ! ! This program is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/info-types.exp gdb-10.2/gdb/testsuite/gdb.fortran/info-types.exp --- gdb-9.1/gdb/testsuite/gdb.fortran/info-types.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/info-types.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -27,8 +27,8 @@ return -1 } -if { ![runto MAIN__] } { - perror "Could not run to breakpoint `MAIN__'." +if { ![fortran_runto_main] } { + perror "Could not run to main." continue } diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/info-types.f90 gdb-10.2/gdb/testsuite/gdb.fortran/info-types.f90 --- gdb-9.1/gdb/testsuite/gdb.fortran/info-types.f90 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/info-types.f90 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -! Copyright 2019-2020 Free Software Foundation, Inc. +! Copyright 2019-2021 Free Software Foundation, Inc. ! ! This program is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/intrinsics.exp gdb-10.2/gdb/testsuite/gdb.fortran/intrinsics.exp --- gdb-9.1/gdb/testsuite/gdb.fortran/intrinsics.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/intrinsics.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -25,8 +25,8 @@ return -1 } -if { ![runto MAIN__] } { - perror "Could not run to breakpoint `MAIN__'." +if { ![fortran_runto_main] } { + perror "Could not run to main." continue } diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/intrinsics.f90 gdb-10.2/gdb/testsuite/gdb.fortran/intrinsics.f90 --- gdb-9.1/gdb/testsuite/gdb.fortran/intrinsics.f90 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/intrinsics.f90 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -! Copyright 2019-2020 Free Software Foundation, Inc. +! Copyright 2019-2021 Free Software Foundation, Inc. ! ! This program is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/library-module.exp gdb-10.2/gdb/testsuite/gdb.fortran/library-module.exp --- gdb-9.1/gdb/testsuite/gdb.fortran/library-module.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/library-module.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -13,6 +13,10 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. +load_lib fortran.exp + +if {[skip_fortran_tests]} { return -1 } + standard_testfile library-module-main.f90 set srclibfile ${testfile}-lib.f90 set libfile [standard_output_file ${testfile}-lib.so] @@ -41,8 +45,8 @@ gdb_load_shlib $libfile -if ![runto MAIN__] then { - perror "couldn't run to breakpoint MAIN__" +if ![fortran_runto_main] then { + perror "couldn't run to main" continue } diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/library-module-lib.f90 gdb-10.2/gdb/testsuite/gdb.fortran/library-module-lib.f90 --- gdb-9.1/gdb/testsuite/gdb.fortran/library-module-lib.f90 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/library-module-lib.f90 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -! Copyright 2010-2020 Free Software Foundation, Inc. +! Copyright 2010-2021 Free Software Foundation, Inc. ! ! This program is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/library-module-main.f90 gdb-10.2/gdb/testsuite/gdb.fortran/library-module-main.f90 --- gdb-9.1/gdb/testsuite/gdb.fortran/library-module-main.f90 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/library-module-main.f90 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -! Copyright 2010-2020 Free Software Foundation, Inc. +! Copyright 2010-2021 Free Software Foundation, Inc. ! ! This program is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/logical.exp gdb-10.2/gdb/testsuite/gdb.fortran/logical.exp --- gdb-9.1/gdb/testsuite/gdb.fortran/logical.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/logical.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -16,13 +16,16 @@ # This file was written by Jan Kratochvil <jan.kratochvil@redhat.com>. standard_testfile .f90 +load_lib fortran.exp + +if {[skip_fortran_tests]} { return -1 } if {[prepare_for_testing "failed to prepare" $testfile $srcfile {debug f90 quiet}]} { return -1 } -if { ![runto MAIN__] } { - perror "Could not run to breakpoint `MAIN__'." +if { ![fortran_runto_main] } { + perror "Could not run to main." continue } @@ -33,3 +36,21 @@ gdb_test "p l2" " = \\.TRUE\\." gdb_test "p l4" " = \\.TRUE\\." gdb_test "p l8" " = \\.TRUE\\." + +# Different Fortran compilers use different values for logical true. +# Check how GDB handles this by modifying the underlying value for our +# logical variables and check they still print as true. +foreach_with_prefix var { l l1 l2 l4 l8 } { + set len [get_integer_valueof "sizeof (${var})" "get sizeof ${var}"] + set addr [get_hexadecimal_valueof "&l" "get address of ${var}"] + + for { set i 0 } { $i < $len } { incr i } { + with_test_prefix "byte $i" { + gdb_test_no_output "set *((character *) ${addr}) = 0xff" \ + "set contents of byte at offset $i" + gdb_test "p l" " = \\.TRUE\\." + incr addr + set addr [format "0x%x" $addr] + } + } +} diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/logical.f90 gdb-10.2/gdb/testsuite/gdb.fortran/logical.f90 --- gdb-9.1/gdb/testsuite/gdb.fortran/logical.f90 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/logical.f90 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -! Copyright 2010-2020 Free Software Foundation, Inc. +! Copyright 2010-2021 Free Software Foundation, Inc. ! ! This program is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by @@ -21,10 +21,12 @@ logical (kind=2) :: l2 logical (kind=4) :: l4 logical (kind=8) :: l8 + character :: c l = .TRUE. l1 = .TRUE. l2 = .TRUE. l4 = .TRUE. l8 = .TRUE. l = .FALSE. ! stop-here + c = 'a' end diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/max-depth.exp gdb-10.2/gdb/testsuite/gdb.fortran/max-depth.exp --- gdb-9.1/gdb/testsuite/gdb.fortran/max-depth.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/max-depth.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -26,8 +26,8 @@ return -1 } -if { ![runto MAIN__] } { - perror "Could not run to breakpoint `MAIN__'." +if { ![fortran_runto_main] } { + perror "Could not run to main." continue } diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/max-depth.f90 gdb-10.2/gdb/testsuite/gdb.fortran/max-depth.f90 --- gdb-9.1/gdb/testsuite/gdb.fortran/max-depth.f90 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/max-depth.f90 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -! Copyright 2019-2020 Free Software Foundation, Inc. +! Copyright 2019-2021 Free Software Foundation, Inc. ! ! This program is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/mixed-lang-stack.c gdb-10.2/gdb/testsuite/gdb.fortran/mixed-lang-stack.c --- gdb-9.1/gdb/testsuite/gdb.fortran/mixed-lang-stack.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/mixed-lang-stack.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,45 @@ +/* Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include <stdio.h> +#include <complex.h> +#include <string.h> + +struct some_struct +{ + float a, b; +}; + +/* See https://gcc.gnu.org/onlinedocs/gfortran/\ + Argument-passing-conventions.html. */ +#if !defined (__GNUC__) || __GNUC__ > 7 +typedef size_t fortran_charlen_t; +#else +typedef int fortran_charlen_t; +#endif + +extern void mixed_func_1d_ (int *, float *, double *, complex float *, + char *, fortran_charlen_t); + +void +mixed_func_1c (int a, float b, double c, complex float d, char *f, + struct some_struct *g) +{ + printf ("a = %d, b = %f, c = %e, d = (%f + %fi)\n", a, b, c, + creal(d), cimag(d)); + + char *string = "this is a string from C"; + mixed_func_1d_ (&a, &b, &c, &d, string, strlen (string)); +} diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/mixed-lang-stack.cpp gdb-10.2/gdb/testsuite/gdb.fortran/mixed-lang-stack.cpp --- gdb-9.1/gdb/testsuite/gdb.fortran/mixed-lang-stack.cpp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/mixed-lang-stack.cpp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,85 @@ +/* Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include <cstring> +#include <cstdlib> + +class base_one +{ + int num1 = 1; + int num2 = 2; + int num3 = 3; +}; + +class base_two +{ +public: + base_two () + { + string = strdup ("Something in C++"); + } + + ~base_two () + { + free (string); + } + + char *string = nullptr; + float val = 3.5; +}; + +class derived_type : public base_one, base_two +{ +public: + derived_type () + : base_one (), + base_two () + { + /* Nothing. */ + } + +private: + int xxx = 9; + float yyy = 10.5; +}; + +static void mixed_func_1f (); +static void mixed_func_1g (); + +extern "C" +{ + /* Entry point to be called from Fortran. */ + void + mixed_func_1e () + { + mixed_func_1f (); + } + + /* The entry point back into Fortran. */ + extern void mixed_func_1h_ (); +} + +static void +mixed_func_1g (derived_type obj) +{ + mixed_func_1h_ (); +} + +static void +mixed_func_1f () { + derived_type obj; + + mixed_func_1g (obj); +} diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/mixed-lang-stack.exp gdb-10.2/gdb/testsuite/gdb.fortran/mixed-lang-stack.exp --- gdb-9.1/gdb/testsuite/gdb.fortran/mixed-lang-stack.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/mixed-lang-stack.exp 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,167 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/> . + +# This test covers some basic functionality for debugging mixed +# Fortran, C, and C++ applications. Features tested include examining +# the backtrace, and printing frame arguments in frames of different +# languages. +# +# One important aspect of this test is that we set the language in +# turn to auto, fortran, c, and c++, and carry out the full test in +# each case to ensure that trying to print objects or types from one +# language, while GDB's language is set to another, doesn't crash GDB. + +if {[skip_fortran_tests]} { return -1 } + +standard_testfile mixed-lang-stack.c mixed-lang-stack.cpp mixed-lang-stack.f90 + +if {[prepare_for_testing_full "failed to prepare" \ + [list ${binfile} {debug f90 additional_flags=-lstdc++} \ + $srcfile {debug} \ + $srcfile2 {debug c++} \ + $srcfile3 {debug f90}]]} { + return -1 +} + +# Runs the test program and examins the stack. LANG is a string, the +# value to pass to GDB's 'set language ...' command. +proc run_tests { lang } { + with_test_prefix "lang=${lang}" { + global binfile hex + + clean_restart ${binfile} + + if ![runto_main] { + untested "could not run to main" + return -1 + } + + gdb_breakpoint "breakpt" + gdb_continue_to_breakpoint "breakpt" + + if { $lang == "c" || $lang == "c++" } { + gdb_test "set language c" \ + "Warning: the current language does not match this frame." + } else { + gdb_test_no_output "set language $lang" + } + + # Check the backtrace. + set e_arg "\['\"\]abcdef\['\"\]" + set 1b_args "\[^\r\n\]+$e_arg\[^\r\n\]+" + set 1g_args "obj=\[^\r\n\]+" + set bt_stack \ + [multi_line \ + "#0\\s+breakpt \\(\\) at \[^\r\n\]+" \ + "#1\\s+$hex in mixed_func_1h \\(\\) at \[^\r\n\]+" \ + "#2\\s+$hex in mixed_func_1g \\($1g_args\\) at \[^\r\n\]+" \ + "#3\\s+$hex in mixed_func_1f \\(\\) at \[^\r\n\]+" \ + "#4\\s+$hex in mixed_func_1e \\(\\) at \[^\r\n\]+" \ + "#5\\s+$hex in mixed_func_1d \\(\[^\r\n\]+\\) at \[^\r\n\]+" \ + "#6\\s+$hex in mixed_func_1c \\(\[^\r\n\]+\\) at \[^\r\n\]+" \ + "#7\\s+$hex in mixed_func_1b \\($1b_args\\) at \[^\r\n\]+" \ + "#8\\s+$hex in mixed_func_1a \\(\\) at \[^\r\n\]+" \ + "#9\\s+$hex in mixed_stack_main \\(\\) at \[^\r\n\]+" \ + "#10\\s+$hex in main \\(\[^\r\n\]+\\) at .*" ] + gdb_test "bt -frame-arguments all" $bt_stack + + # Check the language for frame #0. + gdb_test "info frame" "source language fortran\..*" \ + "info frame in frame #0" + + # Move up to the C++ frames and check the frame state, print a + # C++ object. + gdb_test "frame 2" "#2\\s+$hex in mixed_func_1g .*" \ + "select frame #2" + gdb_test "info frame" "source language c\\+\\+\..*" \ + "info frame in frame #2" + if { $lang == "fortran" } { + set obj_pattern " = \\( base_one = \\( num1 = 1, num2 = 2, num3 = 3 \\), base_two = \\( string = $hex 'Something in C\\+\\+\\\\000', val = 3.5 \\), xxx = 9, yyy = 10.5 \\)" + } else { + set obj_pattern " = \\{<base_one> = \\{num1 = 1, num2 = 2, num3 = 3\\}, <base_two> = \\{string = $hex \"Something in C\\+\\+\", val = 3.5\\}, xxx = 9, yyy = 10.5\\}" + } + gdb_test "print obj" "${obj_pattern}" + + # Move up the stack a way, and check frame and the frame + # arguments. + gdb_test "frame 5" "#5\\s+$hex in mixed_func_1d .*" \ + "select frame #5" + gdb_test "info frame" "source language fortran\..*" \ + "info frame in frame #5" + + gdb_test "up" "#6\\s+$hex in mixed_func_1c .*" \ + "up to frame #6" + gdb_test "info frame" "source language c\..*" \ + "info frame in frame #6" + + if { $lang == "fortran" } { + set d_pattern "\\(4,5\\)" + set f_pattern "$hex 'abcdef\\\\000'" + } else { + set d_pattern "4 \\+ 5i" + set f_pattern "$hex \"abcdef\"" + } + + set args_pattern [multi_line \ + "a = 1" \ + "b = 2" \ + "c = 3" \ + "d = ${d_pattern}" \ + "f = ${f_pattern}" \ + "g = $hex" ] + + gdb_test "info args" $args_pattern \ + "info args in frame #6" + if { $lang == "fortran" } { + set g_pattern " = \\( a = 1\\.5, b = 2\\.5 \\)" + } else { + set g_pattern " = \\{a = 1\\.5, b = 2\\.5\\}" + } + gdb_test "print *g" "${g_pattern}" \ + "print object pointed to by g" + + gdb_test "up" "#7\\s+$hex in mixed_func_1b .*" \ + "up to frame #7" + gdb_test "info frame" "source language fortran\..*" \ + "info frame in frame #7" + + if { $lang == "c" || $lang == "c++" } { + set d_pattern "4 \\+ 5i" + set e_pattern "\"abcdef\"" + set g_pattern "\{a = 1.5, b = 2.5\}" + } else { + set d_pattern "\\(4,5\\)" + set e_pattern "'abcdef'" + set g_pattern "\\( a = 1.5, b = 2.5 \\)" + } + + set args_pattern [multi_line \ + "a = 1" \ + "b = 2" \ + "c = 3" \ + "d = ${d_pattern}" \ + "e = ${e_pattern}" \ + "g = ${g_pattern}" \ + "_e = 6" ] + + gdb_test "info args" $args_pattern \ + "info args in frame #7" + } +} + +run_tests "auto" +run_tests "fortran" +run_tests "c" +run_tests "c++" diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/mixed-lang-stack.f90 gdb-10.2/gdb/testsuite/gdb.fortran/mixed-lang-stack.f90 --- gdb-9.1/gdb/testsuite/gdb.fortran/mixed-lang-stack.f90 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/mixed-lang-stack.f90 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,116 @@ +! Copyright 2020-2021 Free Software Foundation, Inc. +! +! This program is free software; you can redistribute it and/or modify +! it under the terms of the GNU General Public License as published by +! the Free Software Foundation; either version 2 of the License, or +! (at your option) any later version. +! +! This program is distributed in the hope that it will be useful, +! but WITHOUT ANY WARRANTY; without even the implied warranty of +! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +! GNU General Public License for more details. +! +! You should have received a copy of the GNU General Public License +! along with this program. If not, see <http://www.gnu.org/licenses/>. + +module type_module + use, intrinsic :: iso_c_binding, only: c_int, c_float, c_double + type, bind(C) :: MyType + real(c_float) :: a + real(c_float) :: b + end type MyType +end module type_module + +program mixed_stack_main + implicit none + + ! Set up some locals. + + ! Call a Fortran function. + call mixed_func_1a + + write(*,*) "All done" +end program mixed_stack_main + +subroutine breakpt () + implicit none + write(*,*) "Hello World" ! Break here. +end subroutine breakpt + +subroutine mixed_func_1a() + use type_module + implicit none + + TYPE(MyType) :: obj + complex(kind=4) :: d + + obj%a = 1.5 + obj%b = 2.5 + d = cmplx (4.0, 5.0) + + ! Call a C function. + call mixed_func_1b (1, 2.0, 3D0, d, "abcdef", obj) +end subroutine mixed_func_1a + +! This subroutine is called from the Fortran code. +subroutine mixed_func_1b(a, b, c, d, e, g) + use type_module + implicit none + + integer :: a + real(kind=4) :: b + real(kind=8) :: c + complex(kind=4) :: d + character(len=*) :: e + character(len=:), allocatable :: f + TYPE(MyType) :: g + + interface + subroutine mixed_func_1c (a, b, c, d, f, g) bind(C) + use, intrinsic :: iso_c_binding, only: c_int, c_float, c_double + use, intrinsic :: iso_c_binding, only: c_float_complex, c_char + use type_module + implicit none + integer(c_int), value, intent(in) :: a + real(c_float), value, intent(in) :: b + real(c_double), value, intent(in) :: c + complex(c_float_complex), value, intent(in) :: d + character(c_char), intent(in) :: f(*) + TYPE(MyType) :: g + end subroutine mixed_func_1c + end interface + + ! Create a copy of the string with a NULL terminator on the end. + f = e//char(0) + + ! Call a C function. + call mixed_func_1c (a, b, c, d, f, g) +end subroutine mixed_func_1b + +! This subroutine is called from the C code. +subroutine mixed_func_1d(a, b, c, d, str) + use, intrinsic :: iso_c_binding, only: c_int, c_float, c_double + use, intrinsic :: iso_c_binding, only: c_float_complex + implicit none + integer(c_int) :: a + real(c_float) :: b + real(c_double) :: c + complex(c_float_complex) :: d + character(len=*) :: str + + interface + subroutine mixed_func_1e () bind(C) + implicit none + end subroutine mixed_func_1e + end interface + + write(*,*) a, b, c, d, str + + ! Call a C++ function (via an extern "C" wrapper). + call mixed_func_1e +end subroutine mixed_func_1d + +! This is called from C++ code. +subroutine mixed_func_1h () + call breakpt +end subroutine mixed_func_1h diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/module.exp gdb-10.2/gdb/testsuite/gdb.fortran/module.exp --- gdb-9.1/gdb/testsuite/gdb.fortran/module.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/module.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2009-2020 Free Software Foundation, Inc. +# Copyright 2009-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ load_lib "fortran.exp" +if {[skip_fortran_tests]} { return -1 } + standard_testfile .f90 if { [prepare_for_testing "failed to prepare" $testfile $srcfile {debug f90}] } { @@ -29,19 +31,16 @@ gdb_test "print mod1::var_const" " = 20" "fully qualified name of DW_TAG_constant" -if ![runto MAIN__] then { - perror "couldn't run to breakpoint MAIN__" +if ![fortran_runto_main] then { + perror "couldn't run to main" continue } set int_type [fortran_int4] # Test 'info variables' can find module variables. -gdb_test "info variables -n" \ +set mod_re \ [multi_line \ - "All defined variables:" \ - "" \ - "File .*$srcfile:" \ "18:\[ \t\]+${int_type} mod1::var_const;" \ "17:\[ \t\]+${int_type} mod1::var_i;" \ "23:\[ \t\]+${int_type} mod2::var_i;" \ @@ -53,11 +52,33 @@ "33:\[ \t\]+${int_type} modmany::var_c;" \ "33:\[ \t\]+${int_type} modmany::var_i;" \ "37:\[ \t\]+${int_type} moduse::var_x;" \ - "37:\[ \t\]+${int_type} moduse::var_y;(" \ - "" \ - "File .*:(" \ - "$decimal:.*)+)*"] + "37:\[ \t\]+${int_type} moduse::var_y;"] +set state 0 +gdb_test_multiple "info variables -n" "" { + -re "\r\nAll defined variables:" { + if { $state == 0 } { set state 1 } + exp_continue + } + -re "\r\n\r\nFile .*[string_to_regexp $srcfile]:" { + if { $state == 1 } { set state 2 } + exp_continue + } + -re $mod_re { + if { $state == 2 } { set state 3 } + exp_continue + } + -re "\r\n\r\nFile \[^\r\n\]*:" { + exp_continue + } + -re -wrap "" { + if { $state == 3} { + pass $gdb_test_name + } else { + fail $gdb_test_name + } + } +} # Do not use simple single-letter names as GDB would pick up for expectedly # nonexisting symbols some static variables from system libraries debuginfos. @@ -104,7 +125,7 @@ # Breakpoint would work in language "c". gdb_test "show language" {The current source language is "(auto; currently )?fortran".} -# gcc-4.4.2: The main program is always MAIN__ in .symtab so "runto" above +# gcc-4.4.2: The main program is always $fmain in .symtab so "runto" above # works. But DWARF DW_TAG_subprogram contains the name specified by # the "program" Fortran statement. if [gdb_breakpoint "module"] { diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/module.f90 gdb-10.2/gdb/testsuite/gdb.fortran/module.f90 --- gdb-9.1/gdb/testsuite/gdb.fortran/module.f90 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/module.f90 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -! Copyright 2009-2020 Free Software Foundation, Inc. +! Copyright 2009-2021 Free Software Foundation, Inc. ! ! This program is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/multi-dim.exp gdb-10.2/gdb/testsuite/gdb.fortran/multi-dim.exp --- gdb-9.1/gdb/testsuite/gdb.fortran/multi-dim.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/multi-dim.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -25,8 +25,8 @@ return -1 } -if ![runto MAIN__] { - perror "Couldn't run to MAIN__" +if ![fortran_runto_main] { + perror "Couldn't run to main" continue } diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/multi-dim.f90 gdb-10.2/gdb/testsuite/gdb.fortran/multi-dim.f90 --- gdb-9.1/gdb/testsuite/gdb.fortran/multi-dim.f90 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/multi-dim.f90 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -! Copyright 2011-2020 Free Software Foundation, Inc. +! Copyright 2011-2021 Free Software Foundation, Inc. ! ! This program is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/nested-funcs-2.exp gdb-10.2/gdb/testsuite/gdb.fortran/nested-funcs-2.exp --- gdb-9.1/gdb/testsuite/gdb.fortran/nested-funcs-2.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/nested-funcs-2.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -89,7 +89,7 @@ # Call a contained function. if { ${with_nest_prefix_p} } { - gdb_test "call ${nest_prefix}subroutine_to_call()" " called" + gdb_test_stdio "call ${nest_prefix}subroutine_to_call()" " called" "" } # Break on another contained function and run to it. diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/nested-funcs-2.f90 gdb-10.2/gdb/testsuite/gdb.fortran/nested-funcs-2.f90 --- gdb-9.1/gdb/testsuite/gdb.fortran/nested-funcs-2.f90 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/nested-funcs-2.f90 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -! Copyright 2019-2020 Free Software Foundation, Inc. +! Copyright 2019-2021 Free Software Foundation, Inc. ! ! This program is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/nested-funcs.exp gdb-10.2/gdb/testsuite/gdb.fortran/nested-funcs.exp --- gdb-9.1/gdb/testsuite/gdb.fortran/nested-funcs.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/nested-funcs.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2016-2020 Free Software Foundation, Inc. +# Copyright 2016-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -25,8 +25,8 @@ return -1 } -if ![runto MAIN__] then { - perror "couldn't run to breakpoint MAIN__" +if ![fortran_runto_main] then { + perror "couldn't run to main" continue } diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/nested-funcs.f90 gdb-10.2/gdb/testsuite/gdb.fortran/nested-funcs.f90 --- gdb-9.1/gdb/testsuite/gdb.fortran/nested-funcs.f90 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/nested-funcs.f90 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -! Copyright 2016-2020 Free Software Foundation, Inc. +! Copyright 2016-2021 Free Software Foundation, Inc. ! ! This program is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/pointers.f90 gdb-10.2/gdb/testsuite/gdb.fortran/pointers.f90 --- gdb-9.1/gdb/testsuite/gdb.fortran/pointers.f90 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/pointers.f90 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -! Copyright 2019-2020 Free Software Foundation, Inc. +! Copyright 2019-2021 Free Software Foundation, Inc. ! ! This program is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/pointer-to-pointer.exp gdb-10.2/gdb/testsuite/gdb.fortran/pointer-to-pointer.exp --- gdb-9.1/gdb/testsuite/gdb.fortran/pointer-to-pointer.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/pointer-to-pointer.exp 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,49 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/> . + +# Test for GDB printing a pointer to a type containing a buffer. + +if {[skip_fortran_tests]} { return -1 } + +standard_testfile ".f90" +load_lib fortran.exp + +if {[prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} \ + {debug f90}]} { + return -1 +} + +if ![fortran_runto_main] { + untested "could not run to main" + return -1 +} + +# Depending on the compiler being used, the type names can be printed differently. +set real4 [fortran_real4] + +gdb_breakpoint [gdb_get_line_number "Break Here"] +gdb_continue_to_breakpoint "Break Here" + +gdb_test "print *buffer" \ + " = \\( alpha = \\(1\\.5, 2\\.5, 3\\.5, 4\\.5, 5\\.5\\) \\)" + +set l_buffer_type [multi_line \ + "Type l_buffer" \ + " $real4 :: alpha\\(:\\)" \ + "End Type l_buffer" ] + +gdb_test "ptype buffer" "type = PTR TO -> \\( ${l_buffer_type} \\)" +gdb_test "ptype *buffer" "type = ${l_buffer_type}" +gdb_test "ptype buffer%alpha" "type = $real4 \\(5\\)" diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/pointer-to-pointer.f90 gdb-10.2/gdb/testsuite/gdb.fortran/pointer-to-pointer.f90 --- gdb-9.1/gdb/testsuite/gdb.fortran/pointer-to-pointer.f90 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/pointer-to-pointer.f90 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,34 @@ +! Copyright 2020-2021 Free Software Foundation, Inc. +! +! This program is free software; you can redistribute it and/or modify +! it under the terms of the GNU General Public License as published by +! the Free Software Foundation; either version 3 of the License, or +! (at your option) any later version. +! +! This program is distributed in the hope that it will be useful, +! but WITHOUT ANY WARRANTY; without even the implied warranty of +! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +! GNU General Public License for more details. +! +! You should have received a copy of the GNU General Public License +! along with this program. If not, see <http://www.gnu.org/licenses/>. + +program allocate_array + + type l_buffer + real, dimension(:), pointer :: alpha + end type l_buffer + type(l_buffer), pointer :: buffer + + allocate (buffer) + allocate (buffer%alpha (5)) + + buffer%alpha (1) = 1.5 + buffer%alpha (2) = 2.5 + buffer%alpha (3) = 3.5 + buffer%alpha (4) = 4.5 + buffer%alpha (5) = 5.5 + + print *, buffer%alpha ! Break Here. + +end program allocate_array diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/print-formatted.exp gdb-10.2/gdb/testsuite/gdb.fortran/print-formatted.exp --- gdb-9.1/gdb/testsuite/gdb.fortran/print-formatted.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/print-formatted.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2014-2020 Free Software Foundation, Inc. +# Copyright (C) 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -25,8 +25,8 @@ return -1 } -if { ![runto MAIN__] } { - fail "runto MAIN__" +if { ![fortran_runto_main] } { + fail "could not run to main" return -1 } diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/print-formatted.f90 gdb-10.2/gdb/testsuite/gdb.fortran/print-formatted.f90 --- gdb-9.1/gdb/testsuite/gdb.fortran/print-formatted.f90 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/print-formatted.f90 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -! Copyright 2014-2020 Free Software Foundation, Inc. +! Copyright 2014-2021 Free Software Foundation, Inc. ! ! This program is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/printing-types.exp gdb-10.2/gdb/testsuite/gdb.fortran/printing-types.exp --- gdb-9.1/gdb/testsuite/gdb.fortran/printing-types.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/printing-types.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2017-2020 Free Software Foundation, Inc. +# Copyright 2017-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -16,13 +16,14 @@ if {[skip_fortran_tests]} { return -1 } standard_testfile .f90 +load_lib fortran.exp if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug f90}]} { return -1 } -if {![runto MAIN__]} then { - untested "could not run to breakpoint MAIN__" +if {![fortran_runto_main]} then { + untested "could not run to main" return -1 } diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/printing-types.f90 gdb-10.2/gdb/testsuite/gdb.fortran/printing-types.f90 --- gdb-9.1/gdb/testsuite/gdb.fortran/printing-types.f90 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/printing-types.f90 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -! Copyright 2017-2020 Free Software Foundation, Inc. +! Copyright 2017-2021 Free Software Foundation, Inc. ! ! This program is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/print_type.exp gdb-10.2/gdb/testsuite/gdb.fortran/print_type.exp --- gdb-9.1/gdb/testsuite/gdb.fortran/print_type.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/print_type.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -19,12 +19,14 @@ standard_testfile "pointers.f90" load_lib fortran.exp +if {[skip_fortran_tests]} { return -1 } + if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} \ {debug f90 quiet}] } { return -1 } -if ![runto_main] { +if ![fortran_runto_main] { untested "could not run to main" return -1 } diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/ptr-indentation.exp gdb-10.2/gdb/testsuite/gdb.fortran/ptr-indentation.exp --- gdb-9.1/gdb/testsuite/gdb.fortran/ptr-indentation.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/ptr-indentation.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2017-2020 Free Software Foundation, Inc. +# Copyright 2017-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -22,8 +22,8 @@ return -1 } -if {![runto MAIN__]} then { - untested "couldn't run to breakpoint MAIN__" +if {![fortran_runto_main]} then { + untested "couldn't run to main" return -1 } diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/ptr-indentation.f90 gdb-10.2/gdb/testsuite/gdb.fortran/ptr-indentation.f90 --- gdb-9.1/gdb/testsuite/gdb.fortran/ptr-indentation.f90 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/ptr-indentation.f90 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -! Copyright 2017-2020 Free Software Foundation, Inc. +! Copyright 2017-2021 Free Software Foundation, Inc. ! ! This program is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/ptype-on-functions.exp gdb-10.2/gdb/testsuite/gdb.fortran/ptype-on-functions.exp --- gdb-9.1/gdb/testsuite/gdb.fortran/ptype-on-functions.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/ptype-on-functions.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -24,16 +24,16 @@ return -1 } -if ![runto MAIN__] then { - perror "couldn't run to breakpoint MAIN__" +if ![fortran_runto_main] then { + perror "couldn't run to main" continue } gdb_test "ptype some_module::get_number" \ - "type = integer\\(kind=4\\) \\(Type __class_some_module_Number_t\\)" + "type = integer\\(kind=4\\) \\(Type __class_some_module_Number(_t)?\\)" gdb_test "ptype some_module::set_number" \ - "type = void \\(Type __class_some_module_Number_t, integer\\(kind=4\\)\\)" + "type = void \\(Type __class_some_module_Number(_t)?, integer\\(kind=4\\)\\)" gdb_test "ptype is_bigger" \ "type = logical\\(kind=4\\) \\(integer\\(kind=4\\), integer\\(kind=4\\)\\)" @@ -43,3 +43,9 @@ gdb_test "ptype fun_ptr" \ "type = PTR TO -> \\( integer\\(kind=4\\) \\(\\) \\(REF TO -> \\( integer\\(kind=4\\) \\)\\) \\)" + +gdb_test "ptype say_string" \ + "type = void \\(character\\*\\(\\*\\), integer\\(kind=\\d+\\)\\)" + +gdb_test "ptype say_array" \ + "type = void \\(integer\\(kind=4\\) \\(:,:\\)\\)" diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/ptype-on-functions.f90 gdb-10.2/gdb/testsuite/gdb.fortran/ptype-on-functions.f90 --- gdb-9.1/gdb/testsuite/gdb.fortran/ptype-on-functions.f90 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/ptype-on-functions.f90 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -! Copyright 2019-2020 Free Software Foundation, Inc. +! Copyright 2019-2021 Free Software Foundation, Inc. ! ! This program is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by @@ -63,6 +63,10 @@ integer function fun2 (x) integer :: x end function fun2 + + subroutine say_array (arr) + integer, dimension (:,:) :: arr + end subroutine say_array end interface type (Number) :: n1 @@ -70,7 +74,12 @@ procedure(fun1), pointer:: fun_ptr => NULL() + integer, dimension (5,5) :: array + array = 0 + call say_numbers (1,2,3) ! stop here + call say_string ('hello world') + call say_array (array (2:3, 2:4)) print *, fun_ptr (3) end program test @@ -87,3 +96,17 @@ fun2 = x + 2 end function fun2 +subroutine say_string (str) + character(len=*) :: str + print *, str +end subroutine say_string + +subroutine say_array (arr) + integer, dimension (:,:) :: arr + do i=LBOUND (arr, 2), UBOUND (arr, 2), 1 + do j=LBOUND (arr, 1), UBOUND (arr, 1), 1 + write(*, fmt="(i4)", advance="no") arr (j, i) + end do + print *, "" + end do +end subroutine say_array diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/short-circuit-argument-list.exp gdb-10.2/gdb/testsuite/gdb.fortran/short-circuit-argument-list.exp --- gdb-9.1/gdb/testsuite/gdb.fortran/short-circuit-argument-list.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/short-circuit-argument-list.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2018-2020 Free Software Foundation, Inc. +# Copyright 2018-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/short-circuit-argument-list.f90 gdb-10.2/gdb/testsuite/gdb.fortran/short-circuit-argument-list.f90 --- gdb-9.1/gdb/testsuite/gdb.fortran/short-circuit-argument-list.f90 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/short-circuit-argument-list.f90 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -! Copyright 2018-2020 Free Software Foundation, Inc. +! Copyright 2018-2021 Free Software Foundation, Inc. ! ! This program is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/subarray.exp gdb-10.2/gdb/testsuite/gdb.fortran/subarray.exp --- gdb-9.1/gdb/testsuite/gdb.fortran/subarray.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/subarray.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2005-2020 Free Software Foundation, Inc. +# Copyright 2005-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -21,6 +21,7 @@ if { [skip_fortran_tests] } { return -1 } standard_testfile .f +load_lib fortran.exp if {[prepare_for_testing "failed to prepare" $testfile $srcfile {debug f90}]} { return -1 @@ -31,8 +32,8 @@ gdb_reinitialize_dir $srcdir/$subdir gdb_load ${binfile} -if ![runto MAIN__] then { - perror "couldn't run to breakpoint MAIN__" +if ![fortran_runto_main] then { + perror "couldn't run to main" continue } diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/subarray.f gdb-10.2/gdb/testsuite/gdb.fortran/subarray.f --- gdb-9.1/gdb/testsuite/gdb.fortran/subarray.f 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/subarray.f 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -c Copyright 2005-2020 Free Software Foundation, Inc. +c Copyright 2005-2021 Free Software Foundation, Inc. c This program is free software; you can redistribute it and/or modify c it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/type.f90 gdb-10.2/gdb/testsuite/gdb.fortran/type.f90 --- gdb-9.1/gdb/testsuite/gdb.fortran/type.f90 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/type.f90 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -! Copyright 2013-2020 Free Software Foundation, Inc. +! Copyright 2013-2021 Free Software Foundation, Inc. ! ! This program is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/type-kinds.exp gdb-10.2/gdb/testsuite/gdb.fortran/type-kinds.exp --- gdb-9.1/gdb/testsuite/gdb.fortran/type-kinds.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/type-kinds.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/types.exp gdb-10.2/gdb/testsuite/gdb.fortran/types.exp --- gdb-9.1/gdb/testsuite/gdb.fortran/types.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/types.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1994-2020 Free Software Foundation, Inc. +# Copyright 1994-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/vla-alloc-assoc.exp gdb-10.2/gdb/testsuite/gdb.fortran/vla-alloc-assoc.exp --- gdb-9.1/gdb/testsuite/gdb.fortran/vla-alloc-assoc.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/vla-alloc-assoc.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -14,13 +14,16 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. standard_testfile "vla.f90" +load_lib fortran.exp + +if {[skip_fortran_tests]} { return -1 } if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile} \ {debug f90 quiet}] } { return -1 } -if ![runto_main] { +if ![fortran_runto_main] { untested "could not run to main" return -1 } diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/vla-datatypes.exp gdb-10.2/gdb/testsuite/gdb.fortran/vla-datatypes.exp --- gdb-9.1/gdb/testsuite/gdb.fortran/vla-datatypes.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/vla-datatypes.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -16,6 +16,8 @@ standard_testfile ".f90" load_lib "fortran.exp" +if {[skip_fortran_tests]} { return -1 } + if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile} \ {debug f90 quiet}] } { return -1 @@ -24,7 +26,7 @@ # check that all fortran standard datatypes will be # handled correctly when using as VLA's -if ![runto_main] { +if ![fortran_runto_main] { untested "could not run to main" return -1 } diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/vla-datatypes.f90 gdb-10.2/gdb/testsuite/gdb.fortran/vla-datatypes.f90 --- gdb-9.1/gdb/testsuite/gdb.fortran/vla-datatypes.f90 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/vla-datatypes.f90 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -! Copyright 2015-2020 Free Software Foundation, Inc. +! Copyright 2015-2021 Free Software Foundation, Inc. ! ! This program is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/vla.f90 gdb-10.2/gdb/testsuite/gdb.fortran/vla.f90 --- gdb-9.1/gdb/testsuite/gdb.fortran/vla.f90 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/vla.f90 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -! Copyright 2015-2020 Free Software Foundation, Inc. +! Copyright 2015-2021 Free Software Foundation, Inc. ! ! This program is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/vla-history.exp gdb-10.2/gdb/testsuite/gdb.fortran/vla-history.exp --- gdb-9.1/gdb/testsuite/gdb.fortran/vla-history.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/vla-history.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -14,13 +14,16 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. standard_testfile "vla.f90" +load_lib fortran.exp + +if {[skip_fortran_tests]} { return -1 } if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile} \ {debug f90 quiet}] } { return -1 } -if ![runto_main] { +if ![fortran_runto_main] { untested "could not run to main" return -1 } diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/vla-ptr-info.exp gdb-10.2/gdb/testsuite/gdb.fortran/vla-ptr-info.exp --- gdb-9.1/gdb/testsuite/gdb.fortran/vla-ptr-info.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/vla-ptr-info.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -14,19 +14,24 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. standard_testfile "vla.f90" +load_lib fortran.exp + +if {[skip_fortran_tests]} { return -1 } if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile} \ {debug f90 quiet}] } { return -1 } -if ![runto_main] { +if ![fortran_runto_main] { untested "could not run to main" return -1 } +set real4 [fortran_real4] + # Check the status of a pointer to a dynamic array. gdb_breakpoint [gdb_get_line_number "pvla-associated"] gdb_continue_to_breakpoint "pvla-associated" -gdb_test "print &pvla" " = \\(PTR TO -> \\( real\\(kind=4\\) \\(10,10,10\\) \\)\\) ${hex}" \ +gdb_test "print &pvla" " = \\(PTR TO -> \\( $real4 \\(10,10,10\\) \\)\\) ${hex}" \ "print pvla pointer information" diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/vla-ptype.exp gdb-10.2/gdb/testsuite/gdb.fortran/vla-ptype.exp --- gdb-9.1/gdb/testsuite/gdb.fortran/vla-ptype.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/vla-ptype.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -16,12 +16,14 @@ standard_testfile "vla.f90" load_lib "fortran.exp" +if {[skip_fortran_tests]} { return -1 } + if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile} \ {debug f90 quiet}] } { return -1 } -if ![runto_main] { +if ![fortran_runto_main] { untested "could not run to main" return -1 } diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/vla-ptype-sub.exp gdb-10.2/gdb/testsuite/gdb.fortran/vla-ptype-sub.exp --- gdb-9.1/gdb/testsuite/gdb.fortran/vla-ptype-sub.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/vla-ptype-sub.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -16,12 +16,14 @@ standard_testfile "vla-sub.f90" load_lib "fortran.exp" +if {[skip_fortran_tests]} { return -1 } + if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile} \ {debug f90 quiet}] } { return -1 } -if ![runto_main] { +if ![fortran_runto_main] { untested "could not run to main" return -1 } diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/vla-sizeof.exp gdb-10.2/gdb/testsuite/gdb.fortran/vla-sizeof.exp --- gdb-9.1/gdb/testsuite/gdb.fortran/vla-sizeof.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/vla-sizeof.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -14,13 +14,16 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. standard_testfile "vla.f90" +load_lib fortran.exp + +if {[skip_fortran_tests]} { return -1 } if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile} \ {debug f90 quiet}] } { return -1 } -if ![runto_main] { +if ![fortran_runto_main] { untested "could not run to main" return -1 } diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/vla-sub.f90 gdb-10.2/gdb/testsuite/gdb.fortran/vla-sub.f90 --- gdb-9.1/gdb/testsuite/gdb.fortran/vla-sub.f90 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/vla-sub.f90 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -! Copyright 2015-2020 Free Software Foundation, Inc. +! Copyright 2015-2021 Free Software Foundation, Inc. ! ! This program is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/vla-type.exp gdb-10.2/gdb/testsuite/gdb.fortran/vla-type.exp --- gdb-9.1/gdb/testsuite/gdb.fortran/vla-type.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/vla-type.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2016-2020 Free Software Foundation, Inc. +# Copyright 2016-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -16,12 +16,14 @@ standard_testfile ".f90" load_lib "fortran.exp" +if {[skip_fortran_tests]} { return -1 } + if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile} \ {debug f90 quiet}] } { return -1 } -if ![runto_main] { +if ![fortran_runto_main] { untested "could not run to main" return -1 } @@ -31,8 +33,12 @@ # Check if not allocated VLA in type does not break # the debugger when accessing it. -gdb_breakpoint [gdb_get_line_number "before-allocated"] -gdb_continue_to_breakpoint "before-allocated" +# break main for Flang compiler already breaks here +if ![test_compiler_info "clang-*"] { + gdb_breakpoint [gdb_get_line_number "before-allocated"] + gdb_continue_to_breakpoint "before-allocated" +} + gdb_test "print twov" " = \\\( ivla1 = <not allocated>, ivla2 = <not allocated> \\\)" \ "print twov before allocated" gdb_test "print twov%ivla1" " = <not allocated>" \ diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/vla-type.f90 gdb-10.2/gdb/testsuite/gdb.fortran/vla-type.f90 --- gdb-9.1/gdb/testsuite/gdb.fortran/vla-type.f90 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/vla-type.f90 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -! Copyright 2016-2020 Free Software Foundation, Inc. +! Copyright 2016-2021 Free Software Foundation, Inc. ! This program is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/vla-value.exp gdb-10.2/gdb/testsuite/gdb.fortran/vla-value.exp --- gdb-9.1/gdb/testsuite/gdb.fortran/vla-value.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/vla-value.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -16,12 +16,14 @@ standard_testfile "vla.f90" load_lib "fortran.exp" +if {[skip_fortran_tests]} { return -1 } + if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile} \ {debug f90 quiet}] } { return -1 } -if ![runto_main] { +if ![fortran_runto_main] { untested "could not run to main" return -1 } @@ -129,8 +131,8 @@ # Try to assign VLA to user variable clean_restart ${testfile} -if ![runto MAIN__] then { - perror "couldn't run to breakpoint MAIN__" +if ![fortran_runto_main] then { + perror "couldn't run to main" continue } gdb_breakpoint [gdb_get_line_number "vla2-allocated"] diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/vla-value-sub-arbitrary.exp gdb-10.2/gdb/testsuite/gdb.fortran/vla-value-sub-arbitrary.exp --- gdb-9.1/gdb/testsuite/gdb.fortran/vla-value-sub-arbitrary.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/vla-value-sub-arbitrary.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -14,13 +14,16 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. standard_testfile "vla-sub.f90" +load_lib fortran.exp + +if {[skip_fortran_tests]} { return -1 } if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile} \ {debug f90 quiet}] } { return -1 } -if ![runto_main] { +if ![fortran_runto_main] { untested "could not run to main" return -1 } diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/vla-value-sub.exp gdb-10.2/gdb/testsuite/gdb.fortran/vla-value-sub.exp --- gdb-9.1/gdb/testsuite/gdb.fortran/vla-value-sub.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/vla-value-sub.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -14,13 +14,16 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. standard_testfile "vla-sub.f90" +load_lib fortran.exp + +if {[skip_fortran_tests]} { return -1 } if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile} \ {debug f90 quiet}] } { return -1 } -if ![runto_main] { +if ![fortran_runto_main] { untested "could not run to main" return -1 } diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/vla-value-sub-finish.exp gdb-10.2/gdb/testsuite/gdb.fortran/vla-value-sub-finish.exp --- gdb-9.1/gdb/testsuite/gdb.fortran/vla-value-sub-finish.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/vla-value-sub-finish.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -14,13 +14,16 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. standard_testfile "vla-sub.f90" +load_lib fortran.exp + +if {[skip_fortran_tests]} { return -1 } if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile} \ {debug f90 quiet}] } { return -1 } -if ![runto_main] { +if ![fortran_runto_main] { untested "could not run to main" return -1 } diff -Nru gdb-9.1/gdb/testsuite/gdb.fortran/whatis_type.exp gdb-10.2/gdb/testsuite/gdb.fortran/whatis_type.exp --- gdb-9.1/gdb/testsuite/gdb.fortran/whatis_type.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.fortran/whatis_type.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -23,8 +23,8 @@ return -1 } -if ![runto MAIN__] { - fail "run to MAIN__" +if ![fortran_runto_main] { + fail "run to main" return } diff -Nru gdb-9.1/gdb/testsuite/gdb.gdb/complaints.exp gdb-10.2/gdb/testsuite/gdb.gdb/complaints.exp --- gdb-9.1/gdb/testsuite/gdb.gdb/complaints.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.gdb/complaints.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2002-2020 Free Software Foundation, Inc. +# Copyright 2002-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -65,9 +65,11 @@ "During symbol reading: Register a complaint" # Re-issue the first message #1 - gdb_test_stdio \ - "call complaint_internal (\$cstr)" \ - "During symbol reading: Register a complaint" + with_test_prefix "re-issue" { + gdb_test_stdio \ + "call complaint_internal (\$cstr)" \ + "During symbol reading: Register a complaint" + } # Add a second complaint, expect it gdb_test_stdio \ diff -Nru gdb-9.1/gdb/testsuite/gdb.gdb/python-interrupts.exp gdb-10.2/gdb/testsuite/gdb.gdb/python-interrupts.exp --- gdb-9.1/gdb/testsuite/gdb.gdb/python-interrupts.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.gdb/python-interrupts.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.gdb/python-selftest.exp gdb-10.2/gdb/testsuite/gdb.gdb/python-selftest.exp --- gdb-9.1/gdb/testsuite/gdb.gdb/python-selftest.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.gdb/python-selftest.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.gdb/selftest.exp gdb-10.2/gdb/testsuite/gdb.gdb/selftest.exp --- gdb-9.1/gdb/testsuite/gdb.gdb/selftest.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.gdb/selftest.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1988-2020 Free Software Foundation, Inc. +# Copyright 1988-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.gdb/unittest.exp gdb-10.2/gdb/testsuite/gdb.gdb/unittest.exp --- gdb-9.1/gdb/testsuite/gdb.gdb/unittest.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.gdb/unittest.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2016-2020 Free Software Foundation, Inc. +# Copyright 2016-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.go/basic-types.exp gdb-10.2/gdb/testsuite/gdb.go/basic-types.exp --- gdb-9.1/gdb/testsuite/gdb.go/basic-types.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.go/basic-types.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.go/chan.exp gdb-10.2/gdb/testsuite/gdb.go/chan.exp --- gdb-9.1/gdb/testsuite/gdb.go/chan.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.go/chan.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -21,6 +21,7 @@ load_lib "go.exp" if { [skip_go_tests] } { continue } +if { [support_go_compile] == 0 } { continue } standard_testfile .go diff -Nru gdb-9.1/gdb/testsuite/gdb.go/global-local-var-shadow.exp gdb-10.2/gdb/testsuite/gdb.go/global-local-var-shadow.exp --- gdb-9.1/gdb/testsuite/gdb.go/global-local-var-shadow.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.go/global-local-var-shadow.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,58 @@ +# This testcase is part of GDB, the GNU debugger. + +# Copyright 2012-2021 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Basic tests. + +load_lib "go.exp" + +if { [skip_go_tests] } { continue } +if { [support_go_compile] == 0 } { continue } + +standard_testfile .go + +if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile} {debug go}] } { + return -1 +} + +set bp_location1 [gdb_get_line_number "set breakpoint 1 here"] + +if { [go_runto_main] < 0 } { + untested "could not run to main" + return -1 +} + +gdb_test_multiple "print st" "print global var st" { + -re -wrap " = $hex \"We shall\"" { + pass $gdb_test_name + } + -re -wrap " = $hex .*" { + # GCC PR 93844 (Same problem with google go compiler go1.11.13). + # Due to the PR, gdb prints an uninitialized value, which can manifest + # as '$3 = 0x0 ""', but also as printing a wild pointer. + xfail $gdb_test_name + } +} + +if { [gdb_breakpoint ${srcfile}:${bp_location1}] } { + pass "setting breakpoint 1" +} + +gdb_test "cont" "Breakpoint .*:${bp_location1}.*" "going to first breakpoint" + +gdb_test "print st" \ + ".* = $hex \"Hello, world!\"" \ + "string after assignment check" diff -Nru gdb-9.1/gdb/testsuite/gdb.go/global-local-var-shadow.go gdb-10.2/gdb/testsuite/gdb.go/global-local-var-shadow.go --- gdb-9.1/gdb/testsuite/gdb.go/global-local-var-shadow.go 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.go/global-local-var-shadow.go 2020-09-13 02:33:41.000000000 +0000 @@ -0,0 +1,11 @@ +package main + +import "fmt" + +var st = "We shall" + +func main () { + fmt.Println ("Before assignment") + st := "Hello, world!" // this intentionally shadows the global "st" + fmt.Println (st) // set breakpoint 1 here +} diff -Nru gdb-9.1/gdb/testsuite/gdb.go/handcall.exp gdb-10.2/gdb/testsuite/gdb.go/handcall.exp --- gdb-9.1/gdb/testsuite/gdb.go/handcall.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.go/handcall.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -20,6 +20,7 @@ load_lib "go.exp" if { [skip_go_tests] } { continue } +if { [support_go_compile] == 0 } { continue } standard_testfile .go diff -Nru gdb-9.1/gdb/testsuite/gdb.go/hello.exp gdb-10.2/gdb/testsuite/gdb.go/hello.exp --- gdb-9.1/gdb/testsuite/gdb.go/hello.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.go/hello.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -20,6 +20,7 @@ load_lib "go.exp" if { [skip_go_tests] } { continue } +if { [support_go_compile] == 0 } { continue } standard_testfile .go @@ -34,13 +35,6 @@ return -1 } -# This used to print "", i.e., the local "st" initialized as "". -setup_xfail "*-*-*" - -gdb_test "print st" \ - ".* = $hex \"\"" \ - "starting string check" - if { [gdb_breakpoint ${srcfile}:${bp_location1}] } { pass "setting breakpoint 1" } diff -Nru gdb-9.1/gdb/testsuite/gdb.go/hello.go gdb-10.2/gdb/testsuite/gdb.go/hello.go --- gdb-9.1/gdb/testsuite/gdb.go/hello.go 2019-02-23 12:20:11.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.go/hello.go 2020-09-13 02:33:41.000000000 +0000 @@ -2,11 +2,8 @@ import "fmt" -var myst = "Shall we?" - func main () { fmt.Println ("Before assignment") - st := "Hello, world!" // this intentionally shadows the global "st" + st := "Hello, world!" fmt.Println (st) // set breakpoint 1 here - fmt.Println (myst) } diff -Nru gdb-9.1/gdb/testsuite/gdb.go/integers.exp gdb-10.2/gdb/testsuite/gdb.go/integers.exp --- gdb-9.1/gdb/testsuite/gdb.go/integers.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.go/integers.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -20,6 +20,7 @@ load_lib "go.exp" if { [skip_go_tests] } { continue } +if { [support_go_compile] == 0 } { continue } standard_testfile .go diff -Nru gdb-9.1/gdb/testsuite/gdb.go/max-depth.exp gdb-10.2/gdb/testsuite/gdb.go/max-depth.exp --- gdb-9.1/gdb/testsuite/gdb.go/max-depth.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.go/max-depth.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -20,6 +20,7 @@ load_lib "go.exp" if { [skip_go_tests] } { continue } +if { [support_go_compile] == 0 } { continue } standard_testfile .go diff -Nru gdb-9.1/gdb/testsuite/gdb.go/max-depth.go gdb-10.2/gdb/testsuite/gdb.go/max-depth.go --- gdb-9.1/gdb/testsuite/gdb.go/max-depth.go 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.go/max-depth.go 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright 2019-2020 Free Software Foundation, Inc. +// Copyright 2019-2021 Free Software Foundation, Inc. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.go/methods.exp gdb-10.2/gdb/testsuite/gdb.go/methods.exp --- gdb-9.1/gdb/testsuite/gdb.go/methods.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.go/methods.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -20,6 +20,7 @@ load_lib "go.exp" if { [skip_go_tests] } { continue } +if { [support_go_compile] == 0 } { continue } standard_testfile .go @@ -28,22 +29,76 @@ } set bp_location1 {main.T.Foo} -set bp_location2 {(*main.T).Bar} -set bp_location2_regexp {\(*main.T\).Bar} +set bp_location2 {main.T.Bar} if { [go_runto_main] < 0 } { untested "could not run to main" return -1 } -if { [gdb_breakpoint ${bp_location1}] } { - pass "setting breakpoint 1" +set found_wrong_foo 0 +set found_wrong_bar 0 +gdb_test_multiple "maintenance print symbols" "" { + -re "^\r\n void main.Foo.N6_main.T\[^\r\n\]*(?=\r\n)" { + set found_wrong_foo 1 + exp_continue + } + -re "^\r\n void main.Bar.pN6_main.T\[^\r\n\]*(?=\r\n)" { + set found_wrong_bar 1 + exp_continue + } + -re "^\r\n void main.T.Bar\[^\r\n\]*(?=\r\n)" { + exp_continue + } + -re "\r\n$gdb_prompt $" { + pass $gdb_test_name + } + -re "\r\n\[^\r\n\]*(?=\r\n)" { + exp_continue + } } -setup_xfail "*-*-*" ;# mangling issues IIRC -gdb_test "cont" "Breakpoint .*:${bp_location1}.*" "going to first breakpoint" -if { [gdb_breakpoint ${bp_location2}] } { - pass "setting breakpoint 2" +if { $found_wrong_foo } { + # We have with gccgo-6/7: + # <1><553>: Abbrev Number: 21 (DW_TAG_subprogram) + # <554> DW_AT_name : main.Foo.N6_main.T + setup_xfail "*-*-*" +} else { + # We have with gccgo-8/9/10: + # <1><1e24>: Abbrev Number: 40 (DW_TAG_subprogram) + # <1e25> DW_AT_name : main.Foo.main.T + # <1e2c> DW_AT_linkage_name: main.T.Foo + + # For reference: with go1.11.13: + # <1><6c46b>: Abbrev Number: 2 (DW_TAG_subprogram) + # <6c46c> DW_AT_name : main.T.Foo +} + +if { [gdb_breakpoint ${bp_location1} message]} { + gdb_test "cont" "Breakpoint .*, ${bp_location1}.*" \ + "going to first breakpoint" +} + +if { $found_wrong_bar == 1 } { + # We have with gccgo-6/7: + # <1><528>: Abbrev Number: 19 (DW_TAG_subprogram) + # <529> DW_AT_name : main.Bar.pN6_main.T + setup_xfail "*-*-*" +} else { + # We have with gccgo-8/9/10: + # <1><6e4>: Abbrev Number: 24 (DW_TAG_subprogram) + # <6e5> DW_AT_name : main.Bar..1main.T + # <6ec> DW_AT_linkage_name: main.T.Bar + + # For reference: with go1.11.13: + # <1><6c49a>: Abbrev Number: 2 (DW_TAG_subprogram) + # <6c49b> DW_AT_name : main.(*T).Bar + + # It has been clarified in PR gcc/93866 that it's ok that symbols names + # diverge between gc and gccgo. So, we accept the main.T.Bar as valid. +} + +if { [gdb_breakpoint ${bp_location2} message] } { + gdb_test "cont" "Breakpoint .*, ${bp_location2}.*" \ + "going to second breakpoint" } -setup_xfail "*-*-*" ;# mangling issues IIRC -gdb_test "cont" "Breakpoint .*:${bp_location2_regexp}.*" "going to second breakpoint" diff -Nru gdb-9.1/gdb/testsuite/gdb.go/package.exp gdb-10.2/gdb/testsuite/gdb.go/package.exp --- gdb-9.1/gdb/testsuite/gdb.go/package.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.go/package.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -20,6 +20,7 @@ load_lib "go.exp" if { [skip_go_tests] } { continue } +if { [support_go_compile] == 0 } { continue } standard_testfile package1.go package2.go diff -Nru gdb-9.1/gdb/testsuite/gdb.go/print.exp gdb-10.2/gdb/testsuite/gdb.go/print.exp --- gdb-9.1/gdb/testsuite/gdb.go/print.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.go/print.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.go/strings.exp gdb-10.2/gdb/testsuite/gdb.go/strings.exp --- gdb-9.1/gdb/testsuite/gdb.go/strings.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.go/strings.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -18,6 +18,7 @@ load_lib "go.exp" if { [skip_go_tests] } { continue } +if { [support_go_compile] == 0 } { continue } standard_testfile .go diff -Nru gdb-9.1/gdb/testsuite/gdb.go/types.exp gdb-10.2/gdb/testsuite/gdb.go/types.exp --- gdb-9.1/gdb/testsuite/gdb.go/types.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.go/types.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -20,6 +20,7 @@ load_lib "go.exp" if { [skip_go_tests] } { continue } +if { [support_go_compile] == 0 } { continue } standard_testfile .go diff -Nru gdb-9.1/gdb/testsuite/gdb.go/unsafe.exp gdb-10.2/gdb/testsuite/gdb.go/unsafe.exp --- gdb-9.1/gdb/testsuite/gdb.go/unsafe.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.go/unsafe.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -20,6 +20,7 @@ load_lib "go.exp" if { [skip_go_tests] } { continue } +if { [support_go_compile] == 0 } { continue } standard_testfile .go diff -Nru gdb-9.1/gdb/testsuite/gdb.guile/guile.exp gdb-10.2/gdb/testsuite/gdb.guile/guile.exp --- gdb-9.1/gdb/testsuite/gdb.guile/guile.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.guile/guile.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2008-2020 Free Software Foundation, Inc. +# Copyright (C) 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -80,5 +80,5 @@ gdb_test_no_output "guile (define a (execute \"help\" #:to-string #t))" \ "collect help from uiout" -gdb_test "guile (print a)" "= .*aliases -- Aliases of other commands.*" \ +gdb_test "guile (print a)" "= .*aliases -- User-defined aliases of other commands.*" \ "verify help to uiout" diff -Nru gdb-9.1/gdb/testsuite/gdb.guile/scm-arch.c gdb-10.2/gdb/testsuite/gdb.guile/scm-arch.c --- gdb-9.1/gdb/testsuite/gdb.guile/scm-arch.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.guile/scm-arch.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.guile/scm-arch.exp gdb-10.2/gdb/testsuite/gdb.guile/scm-arch.exp --- gdb-9.1/gdb/testsuite/gdb.guile/scm-arch.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.guile/scm-arch.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.guile/scm-block.c gdb-10.2/gdb/testsuite/gdb.guile/scm-block.c --- gdb-9.1/gdb/testsuite/gdb.guile/scm-block.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.guile/scm-block.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.guile/scm-block.exp gdb-10.2/gdb/testsuite/gdb.guile/scm-block.exp --- gdb-9.1/gdb/testsuite/gdb.guile/scm-block.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.guile/scm-block.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2010-2020 Free Software Foundation, Inc. +# Copyright (C) 2010-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.guile/scm-breakpoint.c gdb-10.2/gdb/testsuite/gdb.guile/scm-breakpoint.c --- gdb-9.1/gdb/testsuite/gdb.guile/scm-breakpoint.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.guile/scm-breakpoint.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.guile/scm-breakpoint.exp gdb-10.2/gdb/testsuite/gdb.guile/scm-breakpoint.exp --- gdb-9.1/gdb/testsuite/gdb.guile/scm-breakpoint.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.guile/scm-breakpoint.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2010-2020 Free Software Foundation, Inc. +# Copyright (C) 2010-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.guile/scm-cmd.c gdb-10.2/gdb/testsuite/gdb.guile/scm-cmd.c --- gdb-9.1/gdb/testsuite/gdb.guile/scm-cmd.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.guile/scm-cmd.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.guile/scm-cmd.exp gdb-10.2/gdb/testsuite/gdb.guile/scm-cmd.exp --- gdb-9.1/gdb/testsuite/gdb.guile/scm-cmd.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.guile/scm-cmd.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2009-2020 Free Software Foundation, Inc. +# Copyright (C) 2009-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.guile/scm-disasm.c gdb-10.2/gdb/testsuite/gdb.guile/scm-disasm.c --- gdb-9.1/gdb/testsuite/gdb.guile/scm-disasm.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.guile/scm-disasm.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.guile/scm-disasm.exp gdb-10.2/gdb/testsuite/gdb.guile/scm-disasm.exp --- gdb-9.1/gdb/testsuite/gdb.guile/scm-disasm.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.guile/scm-disasm.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.guile/scm-equal.c gdb-10.2/gdb/testsuite/gdb.guile/scm-equal.c --- gdb-9.1/gdb/testsuite/gdb.guile/scm-equal.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.guile/scm-equal.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.guile/scm-equal.exp gdb-10.2/gdb/testsuite/gdb.guile/scm-equal.exp --- gdb-9.1/gdb/testsuite/gdb.guile/scm-equal.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.guile/scm-equal.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.guile/scm-error-1.scm gdb-10.2/gdb/testsuite/gdb.guile/scm-error-1.scm --- gdb-9.1/gdb/testsuite/gdb.guile/scm-error-1.scm 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.guile/scm-error-1.scm 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -;; Copyright (C) 2014-2020 Free Software Foundation, Inc. +;; Copyright (C) 2014-2021 Free Software Foundation, Inc. ;; ;; This program is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.guile/scm-error-2.scm gdb-10.2/gdb/testsuite/gdb.guile/scm-error-2.scm --- gdb-9.1/gdb/testsuite/gdb.guile/scm-error-2.scm 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.guile/scm-error-2.scm 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -;; Copyright (C) 2014-2020 Free Software Foundation, Inc. +;; Copyright (C) 2014-2021 Free Software Foundation, Inc. ;; ;; This program is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.guile/scm-error.exp gdb-10.2/gdb/testsuite/gdb.guile/scm-error.exp --- gdb-9.1/gdb/testsuite/gdb.guile/scm-error.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.guile/scm-error.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2010-2020 Free Software Foundation, Inc. +# Copyright (C) 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -34,7 +34,7 @@ ${srcdir}/${subdir}/${testfile}-2.scm] gdb_test "source $remote_guile_file_1" \ - "(ERROR: )?In procedure \[+\]: Wrong type: #f.*" \ + "(ERROR: )?In procedure \[+\]: Wrong type.*: #f.*" \ "error loading scm file caught" gdb_test "p 1" " = 1" "no delayed error" diff -Nru gdb-9.1/gdb/testsuite/gdb.guile/scm-frame-args.c gdb-10.2/gdb/testsuite/gdb.guile/scm-frame-args.c --- gdb-9.1/gdb/testsuite/gdb.guile/scm-frame-args.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.guile/scm-frame-args.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.guile/scm-frame-args.exp gdb-10.2/gdb/testsuite/gdb.guile/scm-frame-args.exp --- gdb-9.1/gdb/testsuite/gdb.guile/scm-frame-args.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.guile/scm-frame-args.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2014-2020 Free Software Foundation, Inc. +# Copyright (C) 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.guile/scm-frame-args.scm gdb-10.2/gdb/testsuite/gdb.guile/scm-frame-args.scm --- gdb-9.1/gdb/testsuite/gdb.guile/scm-frame-args.scm 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.guile/scm-frame-args.scm 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -;; Copyright (C) 2014-2020 Free Software Foundation, Inc. +;; Copyright (C) 2014-2021 Free Software Foundation, Inc. ;; ;; This program is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.guile/scm-frame.exp gdb-10.2/gdb/testsuite/gdb.guile/scm-frame.exp --- gdb-9.1/gdb/testsuite/gdb.guile/scm-frame.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.guile/scm-frame.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2009-2020 Free Software Foundation, Inc. +# Copyright (C) 2009-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.guile/scm-frame-inline.c gdb-10.2/gdb/testsuite/gdb.guile/scm-frame-inline.c --- gdb-9.1/gdb/testsuite/gdb.guile/scm-frame-inline.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.guile/scm-frame-inline.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This test is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.guile/scm-frame-inline.exp gdb-10.2/gdb/testsuite/gdb.guile/scm-frame-inline.exp --- gdb-9.1/gdb/testsuite/gdb.guile/scm-frame-inline.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.guile/scm-frame-inline.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2011-2020 Free Software Foundation, Inc. +# Copyright (C) 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.guile/scm-gsmob.exp gdb-10.2/gdb/testsuite/gdb.guile/scm-gsmob.exp --- gdb-9.1/gdb/testsuite/gdb.guile/scm-gsmob.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.guile/scm-gsmob.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2014-2020 Free Software Foundation, Inc. +# Copyright (C) 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.guile/scm-iterator.c gdb-10.2/gdb/testsuite/gdb.guile/scm-iterator.c --- gdb-9.1/gdb/testsuite/gdb.guile/scm-iterator.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.guile/scm-iterator.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.guile/scm-iterator.exp gdb-10.2/gdb/testsuite/gdb.guile/scm-iterator.exp --- gdb-9.1/gdb/testsuite/gdb.guile/scm-iterator.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.guile/scm-iterator.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2014-2020 Free Software Foundation, Inc. +# Copyright (C) 2014-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.guile/scm-lazy-string.c gdb-10.2/gdb/testsuite/gdb.guile/scm-lazy-string.c --- gdb-9.1/gdb/testsuite/gdb.guile/scm-lazy-string.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.guile/scm-lazy-string.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.guile/scm-lazy-string.exp gdb-10.2/gdb/testsuite/gdb.guile/scm-lazy-string.exp --- gdb-9.1/gdb/testsuite/gdb.guile/scm-lazy-string.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.guile/scm-lazy-string.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2008-2020 Free Software Foundation, Inc. +# Copyright (C) 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.guile/scm-math.c gdb-10.2/gdb/testsuite/gdb.guile/scm-math.c --- gdb-9.1/gdb/testsuite/gdb.guile/scm-math.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.guile/scm-math.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.guile/scm-math.exp gdb-10.2/gdb/testsuite/gdb.guile/scm-math.exp --- gdb-9.1/gdb/testsuite/gdb.guile/scm-math.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.guile/scm-math.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2008-2020 Free Software Foundation, Inc. +# Copyright (C) 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.guile/scm-objfile.c gdb-10.2/gdb/testsuite/gdb.guile/scm-objfile.c --- gdb-9.1/gdb/testsuite/gdb.guile/scm-objfile.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.guile/scm-objfile.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.guile/scm-objfile.exp gdb-10.2/gdb/testsuite/gdb.guile/scm-objfile.exp --- gdb-9.1/gdb/testsuite/gdb.guile/scm-objfile.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.guile/scm-objfile.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2011-2020 Free Software Foundation, Inc. +# Copyright (C) 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.guile/scm-objfile-script.c gdb-10.2/gdb/testsuite/gdb.guile/scm-objfile-script.c --- gdb-9.1/gdb/testsuite/gdb.guile/scm-objfile-script.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.guile/scm-objfile-script.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.guile/scm-objfile-script.exp gdb-10.2/gdb/testsuite/gdb.guile/scm-objfile-script.exp --- gdb-9.1/gdb/testsuite/gdb.guile/scm-objfile-script.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.guile/scm-objfile-script.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2011-2020 Free Software Foundation, Inc. +# Copyright (C) 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.guile/scm-objfile-script-gdb.in gdb-10.2/gdb/testsuite/gdb.guile/scm-objfile-script-gdb.in --- gdb-9.1/gdb/testsuite/gdb.guile/scm-objfile-script-gdb.in 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.guile/scm-objfile-script-gdb.in 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -;; Copyright (C) 2011-2020 Free Software Foundation, Inc. +;; Copyright (C) 2011-2021 Free Software Foundation, Inc. ;; ;; This program is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.guile/scm-parameter.exp gdb-10.2/gdb/testsuite/gdb.guile/scm-parameter.exp --- gdb-9.1/gdb/testsuite/gdb.guile/scm-parameter.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.guile/scm-parameter.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2010-2020 Free Software Foundation, Inc. +# Copyright (C) 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.guile/scm-ports.c gdb-10.2/gdb/testsuite/gdb.guile/scm-ports.c --- gdb-9.1/gdb/testsuite/gdb.guile/scm-ports.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.guile/scm-ports.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.guile/scm-ports.exp gdb-10.2/gdb/testsuite/gdb.guile/scm-ports.exp --- gdb-9.1/gdb/testsuite/gdb.guile/scm-ports.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.guile/scm-ports.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2014-2020 Free Software Foundation, Inc. +# Copyright (C) 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.guile/scm-pretty-print.c gdb-10.2/gdb/testsuite/gdb.guile/scm-pretty-print.c --- gdb-9.1/gdb/testsuite/gdb.guile/scm-pretty-print.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.guile/scm-pretty-print.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2008-2020 Free Software Foundation, Inc. + Copyright 2008-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.guile/scm-pretty-print.exp gdb-10.2/gdb/testsuite/gdb.guile/scm-pretty-print.exp --- gdb-9.1/gdb/testsuite/gdb.guile/scm-pretty-print.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.guile/scm-pretty-print.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2008-2020 Free Software Foundation, Inc. +# Copyright (C) 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.guile/scm-pretty-print.scm gdb-10.2/gdb/testsuite/gdb.guile/scm-pretty-print.scm --- gdb-9.1/gdb/testsuite/gdb.guile/scm-pretty-print.scm 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.guile/scm-pretty-print.scm 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -;; Copyright (C) 2008-2020 Free Software Foundation, Inc. +;; Copyright (C) 2008-2021 Free Software Foundation, Inc. ;; ;; This program is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.guile/scm-progspace.c gdb-10.2/gdb/testsuite/gdb.guile/scm-progspace.c --- gdb-9.1/gdb/testsuite/gdb.guile/scm-progspace.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.guile/scm-progspace.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.guile/scm-progspace.exp gdb-10.2/gdb/testsuite/gdb.guile/scm-progspace.exp --- gdb-9.1/gdb/testsuite/gdb.guile/scm-progspace.exp 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.guile/scm-progspace.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2010-2020 Free Software Foundation, Inc. +# Copyright (C) 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -73,7 +73,7 @@ # deleted. We need to, for example, delete an inferior to get the progspace # to go away. -gdb_test "add-inferior" "Added inferior 2" "create new inferior" +gdb_test "add-inferior" "Added inferior 2.*" "create new inferior" gdb_test "inferior 2" ".*" "switch to new inferior" gdb_test_no_output "remove-inferiors 1" "remove first inferior" diff -Nru gdb-9.1/gdb/testsuite/gdb.guile/scm-section-script.c gdb-10.2/gdb/testsuite/gdb.guile/scm-section-script.c --- gdb-9.1/gdb/testsuite/gdb.guile/scm-section-script.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.guile/scm-section-script.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.guile/scm-section-script.exp gdb-10.2/gdb/testsuite/gdb.guile/scm-section-script.exp --- gdb-9.1/gdb/testsuite/gdb.guile/scm-section-script.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.guile/scm-section-script.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2010-2020 Free Software Foundation, Inc. +# Copyright (C) 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.guile/scm-section-script.scm gdb-10.2/gdb/testsuite/gdb.guile/scm-section-script.scm --- gdb-9.1/gdb/testsuite/gdb.guile/scm-section-script.scm 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.guile/scm-section-script.scm 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -;; Copyright (C) 2010-2020 Free Software Foundation, Inc. +;; Copyright (C) 2010-2021 Free Software Foundation, Inc. ;; ;; This program is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.guile/scm-symbol.c gdb-10.2/gdb/testsuite/gdb.guile/scm-symbol.c --- gdb-9.1/gdb/testsuite/gdb.guile/scm-symbol.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.guile/scm-symbol.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.guile/scm-symbol.exp gdb-10.2/gdb/testsuite/gdb.guile/scm-symbol.exp --- gdb-9.1/gdb/testsuite/gdb.guile/scm-symbol.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.guile/scm-symbol.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2010-2020 Free Software Foundation, Inc. +# Copyright (C) 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -169,10 +169,8 @@ "= SimpleClass::valueofi().*" "test method.name" gdb_test "guile (print (symbol-print-name cplusfunc))" \ "= SimpleClass::valueofi().*" "test method.print_name" -# FIXME: GDB is broken here and we're verifying broken behaviour. -# (linkage-name should be the mangled name) gdb_test "guile (print (symbol-linkage-name cplusfunc))" \ - "SimpleClass::valueofi().*" "test method.linkage_name" + "_ZN11SimpleClass8valueofiEv.*" "test method.linkage_name" gdb_test "guile (print (= (symbol-addr-class cplusfunc) SYMBOL_LOC_BLOCK))" "= #t" # Test is_valid when the objfile is unloaded. This must be the last diff -Nru gdb-9.1/gdb/testsuite/gdb.guile/scm-symtab-2.c gdb-10.2/gdb/testsuite/gdb.guile/scm-symtab-2.c --- gdb-9.1/gdb/testsuite/gdb.guile/scm-symtab-2.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.guile/scm-symtab-2.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.guile/scm-symtab.c gdb-10.2/gdb/testsuite/gdb.guile/scm-symtab.c --- gdb-9.1/gdb/testsuite/gdb.guile/scm-symtab.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.guile/scm-symtab.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.guile/scm-symtab.exp gdb-10.2/gdb/testsuite/gdb.guile/scm-symtab.exp --- gdb-9.1/gdb/testsuite/gdb.guile/scm-symtab.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.guile/scm-symtab.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2010-2020 Free Software Foundation, Inc. +# Copyright (C) 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -32,6 +32,8 @@ return } +set debug_types [debug_types] + # Setup and get the symbol table. set line_no [gdb_get_line_number "Block break here."] gdb_breakpoint $line_no @@ -101,8 +103,21 @@ "#t" "test int in static symbols" gdb_test "guile (print (->bool (member \"char\" static-symbols)))" \ "#t" "test char in static symbols" -gdb_test "guile (print (->bool (member \"simple_struct\" static-symbols)))" \ - "#t" "test simple_struct in static symbols" +gdb_test_multiple \ + "guile (print (->bool (member \"simple_struct\" static-symbols)))" \ + "test simple_struct in static symbols" { + -re -wrap "#t" { + pass $gdb_test_name + } + -re -wrap "#f" { + if { $debug_types } { + # Xfail for PR gcc/90232. + xfail $gdb_test_name + } else { + fail $gdb_test_name + } + } + } # Test is_valid when the objfile is unloaded. This must be the last # test as it unloads the object file in GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.guile/scm-type.c gdb-10.2/gdb/testsuite/gdb.guile/scm-type.c --- gdb-9.1/gdb/testsuite/gdb.guile/scm-type.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.guile/scm-type.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2009-2020 Free Software Foundation, Inc. + Copyright 2009-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ +#include <stdlib.h> + struct s { int a; @@ -53,6 +55,12 @@ struct s vec_data_1 = {1, 1}; struct s vec_data_2 = {1, 2}; +struct flex_member +{ + int n; + int items[]; +}; + int main () { @@ -72,6 +80,10 @@ st.b = 5; e = v2; + + struct flex_member *f = (struct flex_member *) malloc (100); + f->items[0] = 111; + f->items[1] = 222; return 0; /* break to inspect struct and array. */ } diff -Nru gdb-9.1/gdb/testsuite/gdb.guile/scm-type.exp gdb-10.2/gdb/testsuite/gdb.guile/scm-type.exp --- gdb-9.1/gdb/testsuite/gdb.guile/scm-type.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.guile/scm-type.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2009-2020 Free Software Foundation, Inc. +# Copyright (C) 2009-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -261,6 +261,18 @@ "ERROR: .*: Wrong type argument in position 1 \\(expecting ranged type\\): .*" \ "check range for non ranged type" } + + with_test_prefix "on flexible array member" { + gdb_scm_test_silent_cmd "print f" "print value (f)" + gdb_scm_test_silent_cmd "guile (define f (history-ref 0))" \ + "get value (f) from history" + gdb_test "guile (print (type-range (field-type (type-field (value-type (value-dereference f)) \"items\"))))" \ + "= \\(0 0\\)" + gdb_test "guile (print (value-subscript (value-field (value-dereference f) \"items\") 0))" \ + "= 111" + gdb_test "guile (print (value-subscript (value-field (value-dereference f) \"items\") 1))" \ + "= 222" + } } } diff -Nru gdb-9.1/gdb/testsuite/gdb.guile/scm-value.c gdb-10.2/gdb/testsuite/gdb.guile/scm-value.c --- gdb-9.1/gdb/testsuite/gdb.guile/scm-value.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.guile/scm-value.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2008-2020 Free Software Foundation, Inc. + Copyright 2008-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.guile/scm-value-cc.cc gdb-10.2/gdb/testsuite/gdb.guile/scm-value-cc.cc --- gdb-9.1/gdb/testsuite/gdb.guile/scm-value-cc.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.guile/scm-value-cc.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.guile/scm-value-cc.exp gdb-10.2/gdb/testsuite/gdb.guile/scm-value-cc.exp --- gdb-9.1/gdb/testsuite/gdb.guile/scm-value-cc.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.guile/scm-value-cc.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2012-2020 Free Software Foundation, Inc. +# Copyright (C) 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.guile/scm-value.exp gdb-10.2/gdb/testsuite/gdb.guile/scm-value.exp --- gdb-9.1/gdb/testsuite/gdb.guile/scm-value.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.guile/scm-value.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2008-2020 Free Software Foundation, Inc. +# Copyright (C) 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.guile/source2.scm gdb-10.2/gdb/testsuite/gdb.guile/source2.scm --- gdb-9.1/gdb/testsuite/gdb.guile/source2.scm 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.guile/source2.scm 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ ;; This testcase is part of GDB, the GNU debugger. ;; -;; Copyright 2008-2020 Free Software Foundation, Inc. +;; Copyright 2008-2021 Free Software Foundation, Inc. ;; ;; This program is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by @@ -15,5 +15,5 @@ ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see <http://www.gnu.org/licenses/>. -(display (format "y~As" "e")) +(display (format #f "y~As" "e")) (newline) diff -Nru gdb-9.1/gdb/testsuite/gdb.guile/types-module.cc gdb-10.2/gdb/testsuite/gdb.guile/types-module.cc --- gdb-9.1/gdb/testsuite/gdb.guile/types-module.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.guile/types-module.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.guile/types-module.exp gdb-10.2/gdb/testsuite/gdb.guile/types-module.exp --- gdb-9.1/gdb/testsuite/gdb.guile/types-module.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.guile/types-module.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2014-2020 Free Software Foundation, Inc. +# Copyright (C) 2014-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -44,7 +44,7 @@ "= #t" "type-has-field-deep? member in baseclass" gdb_test "guile (print (type-has-field-deep? (lookup-type \"int\") \"base_member\"))" \ - "ERROR: .*Wrong type argument in position 1 \\(expecting struct or union\\): #<gdb:type int>.*" \ + "Wrong type argument in position 1 \\(expecting struct or union\\): #<gdb:type int>.*" \ "type-has-field-deep? from int" gdb_scm_test_silent_cmd "guile (define enum-htab (make-enum-hashtable (lookup-type \"enum_type\")))" \ @@ -54,9 +54,9 @@ "= 1" "verify make-enum-hashtable" gdb_test "guile (define bad-enum-htab (make-enum-hashtable #f))" \ - "ERROR: .*Wrong type argument in position 1 \\(expecting gdb:type\\): #f.*" \ + "Wrong type argument in position 1 \\(expecting gdb:type\\): #f.*" \ "make-enum-hashtable from #f" gdb_test "guile (define bad-enum-htab (make-enum-hashtable (lookup-type \"int\")))" \ - "ERROR: .*Wrong type argument in position 1 \\(expecting enum\\): #<gdb:type int>.*" \ + "Wrong type argument in position 1 \\(expecting enum\\): #<gdb:type int>.*" \ "make-enum-hashtable from int" diff -Nru gdb-9.1/gdb/testsuite/gdb.linespec/3explicit.c gdb-10.2/gdb/testsuite/gdb.linespec/3explicit.c --- gdb-9.1/gdb/testsuite/gdb.linespec/3explicit.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.linespec/3explicit.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.linespec/base/one/header.h gdb-10.2/gdb/testsuite/gdb.linespec/base/one/header.h --- gdb-9.1/gdb/testsuite/gdb.linespec/base/one/header.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.linespec/base/one/header.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.linespec/base/two/header.h gdb-10.2/gdb/testsuite/gdb.linespec/base/two/header.h --- gdb-9.1/gdb/testsuite/gdb.linespec/base/two/header.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.linespec/base/two/header.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.linespec/break-ask.exp gdb-10.2/gdb/testsuite/gdb.linespec/break-ask.exp --- gdb-9.1/gdb/testsuite/gdb.linespec/break-ask.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.linespec/break-ask.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.linespec/break-asm-file0.s gdb-10.2/gdb/testsuite/gdb.linespec/break-asm-file0.s --- gdb-9.1/gdb/testsuite/gdb.linespec/break-asm-file0.s 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.linespec/break-asm-file0.s 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2004-2020 Free Software Foundation, Inc. + Copyright 2004-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.linespec/break-asm-file1.s gdb-10.2/gdb/testsuite/gdb.linespec/break-asm-file1.s --- gdb-9.1/gdb/testsuite/gdb.linespec/break-asm-file1.s 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.linespec/break-asm-file1.s 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2004-2020 Free Software Foundation, Inc. + Copyright 2004-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.linespec/break-asm-file.c gdb-10.2/gdb/testsuite/gdb.linespec/break-asm-file.c --- gdb-9.1/gdb/testsuite/gdb.linespec/break-asm-file.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.linespec/break-asm-file.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2004-2020 Free Software Foundation, Inc. + Copyright 2004-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.linespec/break-asm-file.exp gdb-10.2/gdb/testsuite/gdb.linespec/break-asm-file.exp --- gdb-9.1/gdb/testsuite/gdb.linespec/break-asm-file.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.linespec/break-asm-file.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.linespec/cp-completion-aliases.cc gdb-10.2/gdb/testsuite/gdb.linespec/cp-completion-aliases.cc --- gdb-9.1/gdb/testsuite/gdb.linespec/cp-completion-aliases.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.linespec/cp-completion-aliases.cc 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,73 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2019-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include <cstring> + +template<typename T> +struct magic +{ + T x; +}; + +struct object +{ + int a; +}; + +typedef magic<int> int_magic_t; + +typedef object *object_p; + +typedef const char *my_string_t; + +static int +get_value (object_p obj) +{ + return obj->a; +} + +static int +get_something (object_p obj) +{ + return obj->a; +} + +static int +get_something (my_string_t msg) +{ + return strlen (msg); +} + +static int +grab_it (int_magic_t *var) +{ + return var->x; +} + +int +main () +{ + magic<int> m; + m.x = 4; + + object obj; + obj.a = 0; + + int val = (get_value (&obj) + get_something (&obj) + + get_something ("abc") + grab_it (&m)); + return val; +} diff -Nru gdb-9.1/gdb/testsuite/gdb.linespec/cp-completion-aliases.exp gdb-10.2/gdb/testsuite/gdb.linespec/cp-completion-aliases.exp --- gdb-9.1/gdb/testsuite/gdb.linespec/cp-completion-aliases.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.linespec/cp-completion-aliases.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,41 @@ +# Copyright 2019-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# This file tests GDB's ability to remove symbol aliases from the +# completion list in C++. + +load_lib completion-support.exp + +standard_testfile .cc + +if {[prepare_for_testing "failed to prepare" $testfile $srcfile {debug}]} { + return -1 +} + +# Disable the completion limit for the whole testcase. +gdb_test_no_output "set max-completions unlimited" + +test_gdb_complete_unique \ + "break get_v" \ + "break get_value(object_p)" + +test_gdb_complete_unique \ + "break gr" \ + "break grab_it(int_magic_t*)" + +test_gdb_complete_multiple "break " "get_som" "ething(" { + "get_something(my_string_t)" + "get_something(object_p)" +} diff -Nru gdb-9.1/gdb/testsuite/gdb.linespec/cpcompletion.exp gdb-10.2/gdb/testsuite/gdb.linespec/cpcompletion.exp --- gdb-9.1/gdb/testsuite/gdb.linespec/cpcompletion.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.linespec/cpcompletion.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2017-2020 Free Software Foundation, Inc. +# Copyright 2017-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.linespec/cpexplicit.cc gdb-10.2/gdb/testsuite/gdb.linespec/cpexplicit.cc --- gdb-9.1/gdb/testsuite/gdb.linespec/cpexplicit.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.linespec/cpexplicit.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.linespec/cpexplicit.exp gdb-10.2/gdb/testsuite/gdb.linespec/cpexplicit.exp --- gdb-9.1/gdb/testsuite/gdb.linespec/cpexplicit.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.linespec/cpexplicit.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.linespec/cpls2.cc gdb-10.2/gdb/testsuite/gdb.linespec/cpls2.cc --- gdb-9.1/gdb/testsuite/gdb.linespec/cpls2.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.linespec/cpls2.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2017-2020 Free Software Foundation, Inc. + Copyright 2017-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.linespec/cpls-abi-tag.cc gdb-10.2/gdb/testsuite/gdb.linespec/cpls-abi-tag.cc --- gdb-9.1/gdb/testsuite/gdb.linespec/cpls-abi-tag.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.linespec/cpls-abi-tag.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2017-2020 Free Software Foundation, Inc. + Copyright 2017-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.linespec/cpls-abi-tag.exp gdb-10.2/gdb/testsuite/gdb.linespec/cpls-abi-tag.exp --- gdb-9.1/gdb/testsuite/gdb.linespec/cpls-abi-tag.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.linespec/cpls-abi-tag.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2017-2020 Free Software Foundation, Inc. +# Copyright 2017-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.linespec/cpls.cc gdb-10.2/gdb/testsuite/gdb.linespec/cpls.cc --- gdb-9.1/gdb/testsuite/gdb.linespec/cpls.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.linespec/cpls.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2017-2020 Free Software Foundation, Inc. + Copyright 2017-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.linespec/cpls-hyphen.cc gdb-10.2/gdb/testsuite/gdb.linespec/cpls-hyphen.cc --- gdb-9.1/gdb/testsuite/gdb.linespec/cpls-hyphen.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.linespec/cpls-hyphen.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2017-2020 Free Software Foundation, Inc. + Copyright 2017-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.linespec/cpls-ops.cc gdb-10.2/gdb/testsuite/gdb.linespec/cpls-ops.cc --- gdb-9.1/gdb/testsuite/gdb.linespec/cpls-ops.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.linespec/cpls-ops.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2017-2020 Free Software Foundation, Inc. + Copyright 2017-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -91,6 +91,8 @@ /* Code for operator new tests. */ +static int dummy; + struct test_op_new { void *operator new (size_t); @@ -99,7 +101,7 @@ void * test_op_new::operator new (size_t) { - return NULL; + return &dummy; } /* Code for operator delete tests. */ @@ -124,7 +126,7 @@ void * test_op_new_array::operator new[] (size_t) { - return NULL; + return &dummy; } /* Code for operator delete[] tests. */ diff -Nru gdb-9.1/gdb/testsuite/gdb.linespec/cpls-ops.exp gdb-10.2/gdb/testsuite/gdb.linespec/cpls-ops.exp --- gdb-9.1/gdb/testsuite/gdb.linespec/cpls-ops.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.linespec/cpls-ops.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2017-2020 Free Software Foundation, Inc. +# Copyright 2017-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.linespec/cp-replace-typedefs-ns-template.cc gdb-10.2/gdb/testsuite/gdb.linespec/cp-replace-typedefs-ns-template.cc --- gdb-9.1/gdb/testsuite/gdb.linespec/cp-replace-typedefs-ns-template.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.linespec/cp-replace-typedefs-ns-template.cc 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,101 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2019-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +namespace NS1 { + +namespace NS2 { + +struct object +{ + object () + { + } +}; + +typedef object *object_p; + +template<typename T> +struct Templ1 +{ + explicit Templ1 (object_p) + { + } + + template<typename I> + static void + static_method (object_p) + { + } +}; + +template<typename T, typename U> +struct Templ2 +{ + explicit Templ2 (object_p) + { + } + + template<typename I> + static void + static_method (object_p) + { + } +}; + +template<typename T> using AliasTempl = Templ2<int, T>; + +typedef Templ1<int> int_Templ1_t; + +void +object_p_func (object_p) +{ +} + +void +int_Templ1_t_func (int_Templ1_t *) +{ +} + +} // namespace NS2 + +} // namespace NS1 + +/* These typedefs have the same name as some of the components within + NS1 that they alias to, on purpose, to try to confuse GDB and cause + recursion. */ +using NS2 = int; +using object = NS1::NS2::object; +using Templ1 = NS1::NS2::Templ1<unsigned>; +using Templ2 = NS1::NS2::Templ2<long, long>; +using AliasTempl = NS1::NS2::AliasTempl<int>; + +NS2 ns2_int = 0; +object obj; +Templ1 templ1 (0); +NS1::NS2::int_Templ1_t int_templ1 (0); +AliasTempl alias (0); + +int +main () +{ + NS1::NS2::Templ1<int>::static_method<int> (0); + NS1::NS2::AliasTempl<int>::static_method<int> (0); + NS1::NS2::object_p_func (0); + NS1::NS2::int_Templ1_t_func (0); + + return 0; +} diff -Nru gdb-9.1/gdb/testsuite/gdb.linespec/cp-replace-typedefs-ns-template.exp gdb-10.2/gdb/testsuite/gdb.linespec/cp-replace-typedefs-ns-template.exp --- gdb-9.1/gdb/testsuite/gdb.linespec/cp-replace-typedefs-ns-template.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.linespec/cp-replace-typedefs-ns-template.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,121 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# This file tests GDB's ability to replace typedefs in C++ symbols +# when setting breakpoints, particularly around templates in +# namespaces. + +load_lib completion-support.exp + +standard_testfile .cc + +if {[prepare_for_testing "failed to prepare" $testfile $srcfile \ + {debug c++ additional_flags=-std=c++11}]} { + return -1 +} + +# Disable the completion limit for the whole testcase. +gdb_test_no_output "set max-completions unlimited" + +# Confirm that the important global namespace typedefs were indeed +# emited in the debug info. +gdb_test "ptype NS2" "type = int" +gdb_test "ptype object" "type = struct NS1::NS2::object {.*" +gdb_test "ptype Templ1" "type = struct NS1::NS2::Templ1<unsigned int> .*" +gdb_test "ptype AliasTempl" "type = struct NS1::NS2::Templ2<int, int> .*" + +# Wrapper around check_bp_locations_match_list that expect a single +# location in the set breakpoint, instead of a list of locations. If +# the set location isn't specified, then it is assumed to be the exact +# same as the input location. +proc check_bp {location_in {location_out ""}} { + if {$location_out == ""} { + set location_out $location_in + } + check_bp_locations_match_list "b $location_in" [list $location_out] +} + +# These used to crash GDB with infinite recursion because GDB would +# confuse the "Templ1" typedef in the global namespace with the "Templ1" +# template in within NS1::NS2. +test_gdb_complete_unique \ + "break NS1::NS2::Templ1<int>::Tem" \ + "break NS1::NS2::Templ1<int>::Templ1(NS1::NS2::object*)" +check_bp "NS1::NS2::Templ1<int>::Templ1(NS1::NS2::object*)" + +# Similar test, but without a template. This would not crash. +test_gdb_complete_unique \ + "break NS1::NS2::object::obj" \ + "break NS1::NS2::object::object()" +check_bp "NS1::NS2::object::object()" + +# Test some non-template typedef replacing within a namespace. +test_gdb_complete_unique \ + "break NS1::NS2::object_p_f" \ + "break NS1::NS2::object_p_func(NS1::NS2::object*)" +check_bp \ + "NS1::NS2::object_p_func(NS1::NS2::object_p)" \ + "NS1::NS2::object_p_func(NS1::NS2::object*)" + +# Make sure the "NS2" in the template argument list is resolved as +# being a global typedef for int. +foreach loc { + "NS1::NS2::Templ1<int>::static_method<int>(NS1::NS2::object*)" + "NS1::NS2::Templ1<int>::static_method<NS2>(NS1::NS2::object*)" + "NS1::NS2::Templ1<NS2>::static_method<int>(NS1::NS2::object*)" + "NS1::NS2::Templ1<NS2>::static_method<NS2>(NS1::NS2::object*)" +} { + check_bp $loc "NS1::NS2::Templ1<int>::static_method<int>(NS1::NS2::object*)" +} + +foreach loc { + "NS1::NS2::Templ2<int, int>::static_method<int>(NS1::NS2::object*)" + "NS1::NS2::Templ2<int, int>::static_method<int>(NS1::NS2::object_p)" +} { + check_bp $loc "NS1::NS2::Templ2<int, int>::static_method<int>(NS1::NS2::object*)" +} + +# Check that GDB expands the "NS1::NS2::AliasTempl<int>" as +# "NS1::NS2::Templ2<int, int>". +foreach loc { + "NS1::NS2::AliasTempl<int>::static_method<int>(NS1::NS2::object*)" + "NS1::NS2::AliasTempl<int>::static_method<int>(NS1::NS2::object_p)" +} { + if [test_compiler_info gcc*] { + # While Clang emits "AliasTempl<int>" (etc.) typedefs, GCC + # emits "AliasTempl" typedefs with no template parameter info. + setup_xfail gcc/95437 *-*-* + } + check_bp $loc "NS1::NS2::Templ2<int, int>::static_method<int>(NS1::NS2::object*)" + + # Check that setting the breakpoint with GCC really failed, + # instead of succeeding with e.g., "AliasTempl<int>" preserved in + # the location text. If that ever happens, we'll need to update + # these tests. + if [test_compiler_info gcc*] { + check_setting_bp_fails "b $loc" + } +} + +# Check typedef substitution in a template in a qualified name in a +# function parameter list. These used to crash GDB with recursion +# around "Templ1", because there's a "Templ1" typedef in the global +# namespace. +foreach loc { + "NS1::NS2::int_Templ1_t_func(NS1::NS2::int_Templ1_t*)" + "NS1::NS2::int_Templ1_t_func(NS1::NS2::Templ1<int>*)" +} { + check_bp $loc "NS1::NS2::int_Templ1_t_func(NS1::NS2::Templ1<int>*)" +} diff -Nru gdb-9.1/gdb/testsuite/gdb.linespec/explicit2.c gdb-10.2/gdb/testsuite/gdb.linespec/explicit2.c --- gdb-9.1/gdb/testsuite/gdb.linespec/explicit2.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.linespec/explicit2.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.linespec/explicit.c gdb-10.2/gdb/testsuite/gdb.linespec/explicit.c --- gdb-9.1/gdb/testsuite/gdb.linespec/explicit.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.linespec/explicit.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.linespec/explicit.exp gdb-10.2/gdb/testsuite/gdb.linespec/explicit.exp --- gdb-9.1/gdb/testsuite/gdb.linespec/explicit.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.linespec/explicit.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -239,8 +239,26 @@ set tst "complete non-unique file name" send_gdb "break -source exp\t" + # We're matching two cases here: + # - without GLIBC debuginfo + # (gdb) break -source exp^Glicit^G^M + # explicit.c explicit2.c ^M + # (gdb) break -source explicit^M + # Source filename requires function, label, or line offset.^M + # (gdb) PASS: gdb.linespec/explicit.exp: complete non-unique file name + # - with GLIBC debuginfo: + # (gdb) break -source exp^Gl^G^M + # explicit.c explicit2.c explicit_bzero.c explicit_bzero_chk.c \ + # explodename.c ^M + # (gdb) break -source expl^M + # Source filename requires function, label, or line offset.^M + # (gdb) PASS: gdb.linespec/explicit.exp: complete non-unique file name gdb_test_multiple "" $tst { - -re "break -source exp\\\x07licit" { + -re "break -source exp\\\x07l" { + # At this point, either output is done (first case), or a + # further "icit" is emitted (second case). We have no reliable + # way to decide one way or another, so just send the tabs, even + # though that may be a little early in the second case. send_gdb "\t\t" gdb_test_multiple "" $tst { -re "\\\x07\r\nexplicit.c\[ \t\]+explicit2.c\[ \t\]+\(expl.*\)?\r\n$gdb_prompt" { diff -Nru gdb-9.1/gdb/testsuite/gdb.linespec/keywords.c gdb-10.2/gdb/testsuite/gdb.linespec/keywords.c --- gdb-9.1/gdb/testsuite/gdb.linespec/keywords.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.linespec/keywords.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.linespec/keywords.exp gdb-10.2/gdb/testsuite/gdb.linespec/keywords.exp --- gdb-9.1/gdb/testsuite/gdb.linespec/keywords.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.linespec/keywords.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.linespec/linespec.exp gdb-10.2/gdb/testsuite/gdb.linespec/linespec.exp --- gdb-9.1/gdb/testsuite/gdb.linespec/linespec.exp 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.linespec/linespec.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -201,7 +201,7 @@ # Multi-inferior tests. # -gdb_test "add-inferior" "Added inferior 2" \ +gdb_test "add-inferior" "Added inferior 2.*" \ "add inferior for linespec tests" gdb_test "inferior 2" "Switching to inferior 2 .*" \ diff -Nru gdb-9.1/gdb/testsuite/gdb.linespec/ls-dollar.cc gdb-10.2/gdb/testsuite/gdb.linespec/ls-dollar.cc --- gdb-9.1/gdb/testsuite/gdb.linespec/ls-dollar.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.linespec/ls-dollar.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.linespec/ls-dollar.exp gdb-10.2/gdb/testsuite/gdb.linespec/ls-dollar.exp --- gdb-9.1/gdb/testsuite/gdb.linespec/ls-dollar.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.linespec/ls-dollar.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.linespec/ls-errs.c gdb-10.2/gdb/testsuite/gdb.linespec/ls-errs.c --- gdb-9.1/gdb/testsuite/gdb.linespec/ls-errs.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.linespec/ls-errs.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.linespec/ls-errs.exp gdb-10.2/gdb/testsuite/gdb.linespec/ls-errs.exp --- gdb-9.1/gdb/testsuite/gdb.linespec/ls-errs.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.linespec/ls-errs.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.linespec/macro-relative.c gdb-10.2/gdb/testsuite/gdb.linespec/macro-relative.c --- gdb-9.1/gdb/testsuite/gdb.linespec/macro-relative.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.linespec/macro-relative.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.linespec/macro-relative.exp gdb-10.2/gdb/testsuite/gdb.linespec/macro-relative.exp --- gdb-9.1/gdb/testsuite/gdb.linespec/macro-relative.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.linespec/macro-relative.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.linespec/skip-two.exp gdb-10.2/gdb/testsuite/gdb.linespec/skip-two.exp --- gdb-9.1/gdb/testsuite/gdb.linespec/skip-two.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.linespec/skip-two.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.linespec/thread.c gdb-10.2/gdb/testsuite/gdb.linespec/thread.c --- gdb-9.1/gdb/testsuite/gdb.linespec/thread.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.linespec/thread.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.linespec/thread.exp gdb-10.2/gdb/testsuite/gdb.linespec/thread.exp --- gdb-9.1/gdb/testsuite/gdb.linespec/thread.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.linespec/thread.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/array.f gdb-10.2/gdb/testsuite/gdb.mi/array.f --- gdb-9.1/gdb/testsuite/gdb.mi/array.f 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/array.f 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -c Copyright 2006-2020 Free Software Foundation, Inc. +c Copyright 2006-2021 Free Software Foundation, Inc. c This program is free software; you can redistribute it and/or modify c it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/basics.c gdb-10.2/gdb/testsuite/gdb.mi/basics.c --- gdb-9.1/gdb/testsuite/gdb.mi/basics.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/basics.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 1999-2020 Free Software Foundation, Inc. +/* Copyright 1999-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/dw2-ref-missing-frame.exp gdb-10.2/gdb/testsuite/gdb.mi/dw2-ref-missing-frame.exp --- gdb-9.1/gdb/testsuite/gdb.mi/dw2-ref-missing-frame.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/dw2-ref-missing-frame.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -30,7 +30,7 @@ if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" $objsfile object {}] != "" || [gdb_compile "${srcdir}/${subdir}/${srcfile2}" $objfuncfile object {}] != "" || [gdb_compile "${srcdir}/${subdir}/${srcfile3}" $objmainfile object {debug}] != "" - || [gdb_compile "$objsfile $objfuncfile $objmainfile" $binfile executable {}] != "" } { + || [gdb_compile "$objfuncfile $objsfile $objmainfile" $binfile executable {}] != "" } { return -1 } diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/dw2-ref-missing-frame-func.c gdb-10.2/gdb/testsuite/gdb.mi/dw2-ref-missing-frame-func.c --- gdb-9.1/gdb/testsuite/gdb.mi/dw2-ref-missing-frame-func.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/dw2-ref-missing-frame-func.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -57,11 +57,14 @@ generated by GCC. (.gdb_index includes a gdb-generated map instead.) */ asm ( +" .pushsection .debug_info,\"\",%progbits \n" +".Lcu1_begin: \n" +" .popsection \n" " .pushsection .debug_aranges,\"\",%progbits \n" " .4byte .Laranges_end - .Laranges_start \n" // Length of Address Ranges Info ".Laranges_start: \n" " .2byte 0x2 \n" // DWARF Version -" .4byte 0 \n" // .Ldebug_info0 - Offset of Compilation Unit Info +" .4byte .Lcu1_begin\n" // .Ldebug_info0 - Offset of Compilation Unit Info " .byte 4 \n" // Size of Address " .byte 0 \n" // Size of Segment Descriptor " .2byte 0 \n" // Pad to 16 byte boundary diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/dw2-ref-missing-frame-main.c gdb-10.2/gdb/testsuite/gdb.mi/dw2-ref-missing-frame-main.c --- gdb-9.1/gdb/testsuite/gdb.mi/dw2-ref-missing-frame-main.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/dw2-ref-missing-frame-main.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2009-2020 Free Software Foundation, Inc. + Copyright 2009-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/dw2-ref-missing-frame.S gdb-10.2/gdb/testsuite/gdb.mi/dw2-ref-missing-frame.S --- gdb-9.1/gdb/testsuite/gdb.mi/dw2-ref-missing-frame.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/dw2-ref-missing-frame.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2007-2020 Free Software Foundation, Inc. + Copyright 2007-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/gdb2549.exp gdb-10.2/gdb/testsuite/gdb.mi/gdb2549.exp --- gdb-9.1/gdb/testsuite/gdb.mi/gdb2549.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/gdb2549.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -51,6 +51,7 @@ proc register_tests { } { global hex global decimal + global mi_gdb_prompt set octal "\[0-7\]+" set binary "\[0-1\]+" set float "\\-?((\[0-9\]+(\\.\[0-9\]+)?(e\[-+\]\[0-9\]+)?)|(nan\\($hex\\)))" @@ -71,9 +72,35 @@ "555\\^done,register-values=\\\[\{number=\"$decimal\",value=\"$octal\"\}.*\\\]" \ "register values o" - mi_gdb_test "666-data-list-register-values t" \ - "666\\^done,register-values=\\\[\{number=\"$decimal\",value=\"$binary\"\}.*\\\]" \ - "register values t" + set cmd "666-data-list-register-values t" + set test "register values t" + set state 0 + gdb_test_multiple $cmd $test -prompt "$mi_gdb_prompt$" { + -re "666\\^done,register-values=\\\[" { + if { $state == 0 } { + set state 1 + exp_continue + } + fail $gdb_test_name + } + -re "\{number=\"$decimal\",value=\"$binary\"\}" { + if { $state != 0 } { + set state 2 + exp_continue + } + fail $gdb_test_name + } + -re "\{number=\"$decimal\",value=\"\[^\"\]*\"\}" { + exp_continue + } + -re "\]\r\n$mi_gdb_prompt$" { + if { $state == 2 } { + pass $gdb_test_name + } else { + fail $gdb_test_name + } + } + } } register_tests_no_exec diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/gdb669.exp gdb-10.2/gdb/testsuite/gdb.mi/gdb669.exp --- gdb-9.1/gdb/testsuite/gdb.mi/gdb669.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/gdb669.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2002-2020 Free Software Foundation, Inc. +# Copyright 2002-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/gdb680.exp gdb-10.2/gdb/testsuite/gdb.mi/gdb680.exp --- gdb-9.1/gdb/testsuite/gdb.mi/gdb680.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/gdb680.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2002-2020 Free Software Foundation, Inc. +# Copyright 2002-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/gdb701.exp gdb-10.2/gdb/testsuite/gdb.mi/gdb701.exp --- gdb-9.1/gdb/testsuite/gdb.mi/gdb701.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/gdb701.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2002-2020 Free Software Foundation, Inc. +# Copyright 2002-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/gdb792.exp gdb-10.2/gdb/testsuite/gdb.mi/gdb792.exp --- gdb-9.1/gdb/testsuite/gdb.mi/gdb792.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/gdb792.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2002-2020 Free Software Foundation, Inc. +# Copyright 2002-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/list-thread-groups-available.c gdb-10.2/gdb/testsuite/gdb.mi/list-thread-groups-available.c --- gdb-9.1/gdb/testsuite/gdb.mi/list-thread-groups-available.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/list-thread-groups-available.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2017-2020 Free Software Foundation, Inc. +/* Copyright 2017-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/list-thread-groups-available.exp gdb-10.2/gdb/testsuite/gdb.mi/list-thread-groups-available.exp --- gdb-9.1/gdb/testsuite/gdb.mi/list-thread-groups-available.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/list-thread-groups-available.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2017-2020 Free Software Foundation, Inc. +# Copyright 2017-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -56,7 +56,9 @@ # The list can be long, so read entries one by one to avoid hitting the # timeout (especially when running with check-read1). -gdb_test_multiple "-list-thread-groups --available" "list available thread groups" { +set cmd "-list-thread-groups --available" +set test "list available thread groups" +gdb_test_multiple $cmd $test -prompt "$mi_gdb_prompt" { -re "\\^done,groups=\\\[" { # The beginning of the response. exp_continue @@ -71,7 +73,7 @@ # The last entry. pass $gdb_test_name } -} $mi_gdb_prompt +} # List specific processes, make sure there are two entries. set spawn_id_1 [remote_spawn target $binfile] diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/list-thread-groups-no-inferior.exp gdb-10.2/gdb/testsuite/gdb.mi/list-thread-groups-no-inferior.exp --- gdb-9.1/gdb/testsuite/gdb.mi/list-thread-groups-no-inferior.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/list-thread-groups-no-inferior.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2018-2020 Free Software Foundation, Inc. +# Copyright 2018-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi2-amd64-entry-value.c gdb-10.2/gdb/testsuite/gdb.mi/mi2-amd64-entry-value.c --- gdb-9.1/gdb/testsuite/gdb.mi/mi2-amd64-entry-value.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi2-amd64-entry-value.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi2-amd64-entry-value.exp gdb-10.2/gdb/testsuite/gdb.mi/mi2-amd64-entry-value.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi2-amd64-entry-value.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi2-amd64-entry-value.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2011-2020 Free Software Foundation, Inc. +# Copyright (C) 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi2-amd64-entry-value.s gdb-10.2/gdb/testsuite/gdb.mi/mi2-amd64-entry-value.s --- gdb-9.1/gdb/testsuite/gdb.mi/mi2-amd64-entry-value.s 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi2-amd64-entry-value.s 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi2-cli-display.c gdb-10.2/gdb/testsuite/gdb.mi/mi2-cli-display.c --- gdb-9.1/gdb/testsuite/gdb.mi/mi2-cli-display.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi2-cli-display.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2019-2020 Free Software Foundation, Inc. +/* Copyright 2019-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi2-cli-display.exp gdb-10.2/gdb/testsuite/gdb.mi/mi2-cli-display.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi2-cli-display.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi2-cli-display.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi2-prompt.exp gdb-10.2/gdb/testsuite/gdb.mi/mi2-prompt.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi2-prompt.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi2-prompt.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi2-var-child.exp gdb-10.2/gdb/testsuite/gdb.mi/mi2-var-child.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi2-var-child.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi2-var-child.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1999-2020 Free Software Foundation, Inc. +# Copyright 1999-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-async.exp gdb-10.2/gdb/testsuite/gdb.mi/mi-async.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi-async.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-async.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-async-run.c gdb-10.2/gdb/testsuite/gdb.mi/mi-async-run.c --- gdb-9.1/gdb/testsuite/gdb.mi/mi-async-run.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-async-run.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2016-2020 Free Software Foundation, Inc. +/* Copyright 2016-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-async-run.exp gdb-10.2/gdb/testsuite/gdb.mi/mi-async-run.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi-async-run.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-async-run.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2016-2020 Free Software Foundation, Inc. +# Copyright 2016-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-basics.exp gdb-10.2/gdb/testsuite/gdb.mi/mi-basics.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi-basics.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-basics.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1999-2020 Free Software Foundation, Inc. +# Copyright 1999-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-break.exp gdb-10.2/gdb/testsuite/gdb.mi/mi-break.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi-break.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-break.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1999-2020 Free Software Foundation, Inc. +# Copyright 1999-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-breakpoint-changed.exp gdb-10.2/gdb/testsuite/gdb.mi/mi-breakpoint-changed.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi-breakpoint-changed.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-breakpoint-changed.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-breakpoint-multiple-locations.cc gdb-10.2/gdb/testsuite/gdb.mi/mi-breakpoint-multiple-locations.cc --- gdb-9.1/gdb/testsuite/gdb.mi/mi-breakpoint-multiple-locations.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-breakpoint-multiple-locations.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2018-2020 Free Software Foundation, Inc. + Copyright 2018-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-breakpoint-multiple-locations.exp gdb-10.2/gdb/testsuite/gdb.mi/mi-breakpoint-multiple-locations.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi-breakpoint-multiple-locations.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-breakpoint-multiple-locations.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2018-2020 Free Software Foundation, Inc. +# Copyright 2018-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-catch-cpp-exceptions.cc gdb-10.2/gdb/testsuite/gdb.mi/mi-catch-cpp-exceptions.cc --- gdb-9.1/gdb/testsuite/gdb.mi/mi-catch-cpp-exceptions.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-catch-cpp-exceptions.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2019-2020 Free Software Foundation, Inc. +/* Copyright 2019-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-catch-cpp-exceptions.exp gdb-10.2/gdb/testsuite/gdb.mi/mi-catch-cpp-exceptions.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi-catch-cpp-exceptions.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-catch-cpp-exceptions.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-catch-load.c gdb-10.2/gdb/testsuite/gdb.mi/mi-catch-load.c --- gdb-9.1/gdb/testsuite/gdb.mi/mi-catch-load.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-catch-load.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-catch-load.exp gdb-10.2/gdb/testsuite/gdb.mi/mi-catch-load.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi-catch-load.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-catch-load.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-catch-load-so.c gdb-10.2/gdb/testsuite/gdb.mi/mi-catch-load-so.c --- gdb-9.1/gdb/testsuite/gdb.mi/mi-catch-load-so.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-catch-load-so.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-cli.exp gdb-10.2/gdb/testsuite/gdb.mi/mi-cli.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi-cli.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-cli.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2002-2020 Free Software Foundation, Inc. +# Copyright 2002-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-cmd-error.exp gdb-10.2/gdb/testsuite/gdb.mi/mi-cmd-error.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi-cmd-error.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-cmd-error.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2016-2020 Free Software Foundation, Inc. +# Copyright 2016-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-cmd-param-changed.exp gdb-10.2/gdb/testsuite/gdb.mi/mi-cmd-param-changed.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi-cmd-param-changed.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-cmd-param-changed.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-complete.cc gdb-10.2/gdb/testsuite/gdb.mi/mi-complete.cc --- gdb-9.1/gdb/testsuite/gdb.mi/mi-complete.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-complete.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2018-2020 Free Software Foundation, Inc. +/* Copyright 2018-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-complete.exp gdb-10.2/gdb/testsuite/gdb.mi/mi-complete.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi-complete.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-complete.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2018-2020 Free Software Foundation, Inc. +# Copyright 2018-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-condbreak-call-thr-state.c gdb-10.2/gdb/testsuite/gdb.mi/mi-condbreak-call-thr-state.c --- gdb-9.1/gdb/testsuite/gdb.mi/mi-condbreak-call-thr-state.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-condbreak-call-thr-state.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright (C) 2013-2020 Free Software Foundation, Inc. + Copyright (C) 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-condbreak-call-thr-state.exp gdb-10.2/gdb/testsuite/gdb.mi/mi-condbreak-call-thr-state.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi-condbreak-call-thr-state.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-condbreak-call-thr-state.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2013-2020 Free Software Foundation, Inc. +# Copyright (C) 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-condbreak-call-thr-state-mt.c gdb-10.2/gdb/testsuite/gdb.mi/mi-condbreak-call-thr-state-mt.c --- gdb-9.1/gdb/testsuite/gdb.mi/mi-condbreak-call-thr-state-mt.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-condbreak-call-thr-state-mt.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright (C) 2014-2020 Free Software Foundation, Inc. + Copyright (C) 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-condbreak-call-thr-state-st.c gdb-10.2/gdb/testsuite/gdb.mi/mi-condbreak-call-thr-state-st.c --- gdb-9.1/gdb/testsuite/gdb.mi/mi-condbreak-call-thr-state-st.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-condbreak-call-thr-state-st.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright (C) 2014-2020 Free Software Foundation, Inc. + Copyright (C) 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-console.exp gdb-10.2/gdb/testsuite/gdb.mi/mi-console.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi-console.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-console.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1999-2020 Free Software Foundation, Inc. +# Copyright 1999-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-detach.exp gdb-10.2/gdb/testsuite/gdb.mi/mi-detach.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi-detach.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-detach.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-disassemble.exp gdb-10.2/gdb/testsuite/gdb.mi/mi-disassemble.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi-disassemble.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-disassemble.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1999-2020 Free Software Foundation, Inc. +# Copyright 1999-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-dprintf.c gdb-10.2/gdb/testsuite/gdb.mi/mi-dprintf.c --- gdb-9.1/gdb/testsuite/gdb.mi/mi-dprintf.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-dprintf.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright (C) 2013-2020 Free Software Foundation, Inc. + Copyright (C) 2013-2021 Free Software Foundation, Inc. Contributed by Hui Zhu <hui@codesourcery.com> This program is free software; you can redistribute it and/or modify diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-dprintf.exp gdb-10.2/gdb/testsuite/gdb.mi/mi-dprintf.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi-dprintf.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-dprintf.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2013-2020 Free Software Foundation, Inc. +# Copyright (C) 2013-2021 Free Software Foundation, Inc. # Contributed by Hui Zhu <hui@codesourcery.com> # This program is free software; you can redistribute it and/or modify diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-dprintf-pending.c gdb-10.2/gdb/testsuite/gdb.mi/mi-dprintf-pending.c --- gdb-9.1/gdb/testsuite/gdb.mi/mi-dprintf-pending.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-dprintf-pending.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-dprintf-pending.exp gdb-10.2/gdb/testsuite/gdb.mi/mi-dprintf-pending.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi-dprintf-pending.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-dprintf-pending.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-dprintf-pendshr.c gdb-10.2/gdb/testsuite/gdb.mi/mi-dprintf-pendshr.c --- gdb-9.1/gdb/testsuite/gdb.mi/mi-dprintf-pendshr.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-dprintf-pendshr.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-editing.exp gdb-10.2/gdb/testsuite/gdb.mi/mi-editing.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi-editing.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-editing.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2016-2020 Free Software Foundation, Inc. +# Copyright 2016-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-eval.exp gdb-10.2/gdb/testsuite/gdb.mi/mi-eval.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi-eval.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-eval.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1999-2020 Free Software Foundation, Inc. +# Copyright 1999-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-exec-run.exp gdb-10.2/gdb/testsuite/gdb.mi/mi-exec-run.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi-exec-run.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-exec-run.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2016-2020 Free Software Foundation, Inc. +# Copyright 2016-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-exit-code.c gdb-10.2/gdb/testsuite/gdb.mi/mi-exit-code.c --- gdb-9.1/gdb/testsuite/gdb.mi/mi-exit-code.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-exit-code.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 1999-2020 Free Software Foundation, Inc. +/* Copyright 1999-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-exit-code.exp gdb-10.2/gdb/testsuite/gdb.mi/mi-exit-code.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi-exit-code.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-exit-code.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1999-2020 Free Software Foundation, Inc. +# Copyright 1999-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-file.exp gdb-10.2/gdb/testsuite/gdb.mi/mi-file.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi-file.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-file.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1999-2020 Free Software Foundation, Inc. +# Copyright 1999-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-file-transfer.exp gdb-10.2/gdb/testsuite/gdb.mi/mi-file-transfer.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi-file-transfer.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-file-transfer.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2007-2020 Free Software Foundation, Inc. +# Copyright 2007-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-fill-memory.exp gdb-10.2/gdb/testsuite/gdb.mi/mi-fill-memory.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi-fill-memory.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-fill-memory.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2012-2020 Free Software Foundation, Inc. +# Copyright (C) 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-fortran-modules-2.f90 gdb-10.2/gdb/testsuite/gdb.mi/mi-fortran-modules-2.f90 --- gdb-9.1/gdb/testsuite/gdb.mi/mi-fortran-modules-2.f90 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-fortran-modules-2.f90 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -! Copyright 2009-2020 Free Software Foundation, Inc. +! Copyright 2009-2021 Free Software Foundation, Inc. ! ! This program is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-fortran-modules.exp gdb-10.2/gdb/testsuite/gdb.mi/mi-fortran-modules.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi-fortran-modules.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-fortran-modules.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -52,12 +52,55 @@ "103\\^done,symbols=\{debug=\\\[\{filename=\"\[^\"\]+$srcfile\",fullname=\"\[^\"\]+$srcfile\",symbols=\\\[\{line=\"41\",name=\"moduse\"\}\\\]\}\\\]\}" \ "-symbol-info-modules --name moduse" -mi_gdb_test "104-symbol-info-module-functions" \ - [join \ - [list \ - "104\\^done,symbols=\\\[(${system_module_symbols_pattern})*\{module=\"mod1\",files=\\\[\{filename=\"\[^\"\]+$srcfile2\",fullname=\"\[^\"\]+$srcfile2\",symbols=\\\[\{line=\"21\",name=\"mod1::check_all\",type=\"void \\(void\\)\",description=\"void mod1::check_all\\(void\\);\"\}\\\]\}\\\]\},\{module=\"mod2\",files=\\\[\{filename=\"\[^\"\]+$srcfile2\",fullname=\"\[^\"\]+$srcfile2\",symbols=\\\[\{line=\"30\",name=\"mod2::check_var_i\",type=\"void \\(void\\)\",description=\"void mod2::check_var_i\\(void\\);\"\}\\\]\}\\\]\},\{module=\"mod3\",files=\\\[\{filename=\"\[^\"\]+$srcfile\",fullname=\"\[^\"\]+$srcfile\",symbols=\\\[\{line=\"21\",name=\"mod3::check_all\",type=\"void \\(void\\)\",description=\"void mod3::check_all\\(void\\);\"\},\{line=\"27\",name=\"mod3::check_mod2\",type=\"void \\(void\\)\",description=\"void mod3::check_mod2\\(void\\);\"\}\\\]\}\\\]\}," \ - "\{module=\"modmany\",files=\\\[\{filename=\"\[^\"\]+$srcfile\",fullname=\"\[^\"\]+$srcfile\",symbols=\\\[\{line=\"35\",name=\"modmany::check_some\",type=\"void \\(void\\)\",description=\"void modmany::check_some\\(void\\);\"\}\\\]\}\\\]\},\{module=\"moduse\",files=\\\[\{filename=\"\[^\"\]+$srcfile\",fullname=\"\[^\"\]+$srcfile\",symbols=\\\[\{line=\"44\",name=\"moduse::check_all\",type=\"void \\(void\\)\",description=\"void moduse::check_all\\(void\\);\"\},\{line=\"49\",name=\"moduse::check_var_x\",type=\"void \\(void\\)\",description=\"void moduse::check_var_x\\(void\\);\"\}\\\]\}\\\]\}\\\]" ] "" ] \ - "-symbol-info-module-functions" +set test "-symbol-info-module-functions" +set cmd "104-symbol-info-module-functions" +set mod1_re \ + "\{module=\"mod1\",files=\\\[\{filename=\"\[^\"\]+$srcfile2\",fullname=\"\[^\"\]+$srcfile2\",symbols=\\\[\{line=\"21\",name=\"mod1::check_all\",type=\"void \\(void\\)\",description=\"void mod1::check_all\\(void\\);\"\}\\\]\}\\\]\}" +set mod2_re \ + "\{module=\"mod2\",files=\\\[\{filename=\"\[^\"\]+$srcfile2\",fullname=\"\[^\"\]+$srcfile2\",symbols=\\\[\{line=\"30\",name=\"mod2::check_var_i\",type=\"void \\(void\\)\",description=\"void mod2::check_var_i\\(void\\);\"\}\\\]\}\\\]\}" +set mod3_re \ + "\{module=\"mod3\",files=\\\[\{filename=\"\[^\"\]+$srcfile\",fullname=\"\[^\"\]+$srcfile\",symbols=\\\[\{line=\"21\",name=\"mod3::check_all\",type=\"void \\(void\\)\",description=\"void mod3::check_all\\(void\\);\"\},\{line=\"27\",name=\"mod3::check_mod2\",type=\"void \\(void\\)\",description=\"void mod3::check_mod2\\(void\\);\"\}\\\]\}\\\]\}" +set modmany_re \ + "\{module=\"modmany\",files=\\\[\{filename=\"\[^\"\]+$srcfile\",fullname=\"\[^\"\]+$srcfile\",symbols=\\\[\{line=\"35\",name=\"modmany::check_some\",type=\"void \\(void\\)\",description=\"void modmany::check_some\\(void\\);\"\}\\\]\}\\\]\}" +set moduse_re \ + "\{module=\"moduse\",files=\\\[\{filename=\"\[^\"\]+$srcfile\",fullname=\"\[^\"\]+$srcfile\",symbols=\\\[\{line=\"44\",name=\"moduse::check_all\",type=\"void \\(void\\)\",description=\"void moduse::check_all\\(void\\);\"\},\{line=\"49\",name=\"moduse::check_var_x\",type=\"void \\(void\\)\",description=\"void moduse::check_var_x\\(void\\);\"\}\\\]\}\\\]\}" +set state 0 +gdb_test_multiple $cmd $test -prompt $mi_gdb_prompt$ { + -re "104\\^done,symbols=\\\[" { + if { $state == 0 } { set state 1 } + exp_continue + } + -re "$mod1_re" { + if { $state == 1 } { incr state } + exp_continue + } + -re "$mod2_re" { + if { $state == 2 } { incr state } + exp_continue + } + -re "$mod3_re" { + if { $state == 3 } { incr state } + exp_continue + } + -re "$modmany_re" { + if { $state == 4 } { incr state } + exp_continue + } + -re "$moduse_re" { + if { $state == 5 } { incr state } + exp_continue + } + -re ${system_module_symbols_pattern} { + exp_continue + } + -re "\\\]\r\n$mi_gdb_prompt$" { + if { $state == 6 } { + pass $gdb_test_name + } else { + fail $gdb_test_name + } + } +} mi_gdb_test "105-symbol-info-module-functions --name _all" \ "105\\^done,symbols=\\\[\{module=\"mod1\",files=\\\[\{filename=\"\[^\"\]+$srcfile2\",fullname=\"\[^\"\]+$srcfile2\",symbols=\\\[\{line=\"21\",name=\"mod1::check_all\",type=\"void \\(void\\)\",description=\"void mod1::check_all\\(void\\);\"\}\\\]\}\\\]\},\{module=\"mod3\",files=\\\[\{filename=\"\[^\"\]+$srcfile\",fullname=\"\[^\"\]+$srcfile\",symbols=\\\[\{line=\"21\",name=\"mod3::check_all\",type=\"void \\(void\\)\",description=\"void mod3::check_all\\(void\\);\"\}\\\]\}\\\]\},\{module=\"moduse\",files=\\\[\{filename=\"\[^\"\]+$srcfile\",fullname=\"\[^\"\]+$srcfile\",symbols=\\\[\{line=\"44\",name=\"moduse::check_all\",type=\"void \\(void\\)\",description=\"void moduse::check_all\\(void\\);\"\}\\\]\}\\\]\}\\\]" \ @@ -69,14 +112,53 @@ set int4 [fortran_int4] -mi_gdb_test "107-symbol-info-module-variables" \ - [join \ - [list \ - "107\\^done,symbols=\\\[(${system_module_symbols_pattern})*\{module=\"mod1\",files=\\\[\{filename=\"\[^\"\]+$srcfile2\",fullname=\"\[^\"\]+$srcfile2\",symbols=\\\[\{line=\"18\",name=\"mod1::var_const\",type=\"$int4\",description=\"$int4 mod1::var_const;\"\},\{line=\"17\",name=\"mod1::var_i\",type=\"$int4\",description=\"$int4 mod1::var_i;\"\}\\\]\}\\\]\},\{module=\"mod2\",files=\\\[\{filename=\"\[^\"\]+$srcfile2\",fullname=\"\[^\"\]+$srcfile2\",symbols=\\\[\{line=\"28\",name=\"mod2::var_i\",type=\"$int4\",description=\"$int4 mod2::var_i;\"\}\\\]\}\\\]\}," \ - "\{module=\"mod3\",files=\\\[\{filename=\"\[^\"\]+$srcfile\",fullname=\"\[^\"\]+$srcfile\",symbols=\\\[\{line=\"18\",name=\"mod3::mod1\",type=\"$int4\",description=\"$int4 mod3::mod1;\"\},\{line=\"17\",name=\"mod3::mod2\",type=\"$int4\",description=\"$int4 mod3::mod2;\"\},\{line=\"19\",name=\"mod3::var_i\",type=\"$int4\",description=\"$int4 mod3::var_i;\"\}\\\]\}\\\]\},\{module=\"modmany\",files=\\\[\{filename=\"\[^\"\]+$srcfile\",fullname=\"\[^\"\]+$srcfile\",symbols=\\\[\{line=\"33\",name=\"modmany::var_a\",type=\"$int4\",description=\"$int4 modmany::var_a;\"\}," \ - "\{line=\"33\",name=\"modmany::var_b\",type=\"$int4\",description=\"$int4 modmany::var_b;\"\},\{line=\"33\",name=\"modmany::var_c\",type=\"$int4\",description=\"$int4 modmany::var_c;\"\},\{line=\"33\",name=\"modmany::var_i\",type=\"$int4\",description=\"$int4 modmany::var_i;\"\}\\\]\}\\\]\},\{module=\"moduse\",files=\\\[\{filename=\"\[^\"\]+$srcfile\",fullname=\"\[^\"\]+$srcfile\",symbols=\\\[\{line=\"42\",name=\"moduse::var_x\",type=\"$int4\",description=\"$int4 moduse::var_x;\"\},\{line=\"42\",name=\"moduse::var_y\",type=\"$int4\",description=\"$int4 moduse::var_y;\"\}\\\]\}\\\]\}\\\]" ] "" ] \ - "-symbol-info-module-variables" - - - - +set mod1_re \ + "\{module=\"mod1\",files=\\\[\{filename=\"\[^\"\]+$srcfile2\",fullname=\"\[^\"\]+$srcfile2\",symbols=\\\[\{line=\"18\",name=\"mod1::var_const\",type=\"$int4\",description=\"$int4 mod1::var_const;\"\},\{line=\"17\",name=\"mod1::var_i\",type=\"$int4\",description=\"$int4 mod1::var_i;\"\}\\\]\}\\\]\}" +set mod2_re \ + "\{module=\"mod2\",files=\\\[\{filename=\"\[^\"\]+$srcfile2\",fullname=\"\[^\"\]+$srcfile2\",symbols=\\\[\{line=\"28\",name=\"mod2::var_i\",type=\"$int4\",description=\"$int4 mod2::var_i;\"\}\\\]\}\\\]\}" +set mod3_re \ + "\{module=\"mod3\",files=\\\[\{filename=\"\[^\"\]+$srcfile\",fullname=\"\[^\"\]+$srcfile\",symbols=\\\[\{line=\"18\",name=\"mod3::mod1\",type=\"$int4\",description=\"$int4 mod3::mod1;\"\},\{line=\"17\",name=\"mod3::mod2\",type=\"$int4\",description=\"$int4 mod3::mod2;\"\},\{line=\"19\",name=\"mod3::var_i\",type=\"$int4\",description=\"$int4 mod3::var_i;\"\}\\\]\}\\\]\}" +set modmany_re \ + "\{module=\"modmany\",files=\\\[\{filename=\"\[^\"\]+$srcfile\",fullname=\"\[^\"\]+$srcfile\",symbols=\\\[\{line=\"33\",name=\"modmany::var_a\",type=\"$int4\",description=\"$int4 modmany::var_a;\"\},\{line=\"33\",name=\"modmany::var_b\",type=\"$int4\",description=\"$int4 modmany::var_b;\"\},\{line=\"33\",name=\"modmany::var_c\",type=\"$int4\",description=\"$int4 modmany::var_c;\"\},\{line=\"33\",name=\"modmany::var_i\",type=\"$int4\",description=\"$int4 modmany::var_i;\"\}\\\]\}\\\]\}" +set moduse_re \ + ",\{module=\"moduse\",files=\\\[\{filename=\"\[^\"\]+$srcfile\",fullname=\"\[^\"\]+$srcfile\",symbols=\\\[\{line=\"42\",name=\"moduse::var_x\",type=\"$int4\",description=\"$int4 moduse::var_x;\"\},\{line=\"42\",name=\"moduse::var_y\",type=\"$int4\",description=\"$int4 moduse::var_y;\"\}\\\]\}\\\]\}" + +set cmd "107-symbol-info-module-variables" +set test "-symbol-info-module-variables" +set state 0 +gdb_test_multiple $cmd $test -prompt $mi_gdb_prompt$ { + -re "107\\^done,symbols=\\\[" { + if { $state == 0 } { set state 1 } + exp_continue + } + -re "$mod1_re" { + if { $state == 1 } { incr state } + exp_continue + } + -re "$mod2_re" { + if { $state == 2 } { incr state } + exp_continue + } + -re "$mod3_re" { + if { $state == 3 } { incr state } + exp_continue + } + -re "$modmany_re" { + if { $state == 4 } { incr state } + exp_continue + } + -re "$moduse_re" { + if { $state == 5 } { incr state } + exp_continue + } + -re ${system_module_symbols_pattern} { + exp_continue + } + -re "\\\]\r\n$mi_gdb_prompt$" { + if { $state == 6 } { + pass $gdb_test_name + } else { + fail $gdb_test_name + } + } +} diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-fortran-modules.f90 gdb-10.2/gdb/testsuite/gdb.mi/mi-fortran-modules.f90 --- gdb-9.1/gdb/testsuite/gdb.mi/mi-fortran-modules.f90 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-fortran-modules.f90 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -! Copyright 2009-2020 Free Software Foundation, Inc. +! Copyright 2009-2021 Free Software Foundation, Inc. ! ! This program is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-frame-regs.exp gdb-10.2/gdb/testsuite/gdb.mi/mi-frame-regs.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi-frame-regs.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-frame-regs.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2018-2020 Free Software Foundation, Inc. +# Copyright 2018-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-fullname-deleted.exp gdb-10.2/gdb/testsuite/gdb.mi/mi-fullname-deleted.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi-fullname-deleted.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-fullname-deleted.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-hack-cli.exp gdb-10.2/gdb/testsuite/gdb.mi/mi-hack-cli.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi-hack-cli.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-hack-cli.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1999-2020 Free Software Foundation, Inc. +# Copyright 1999-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-i-cmd.exp gdb-10.2/gdb/testsuite/gdb.mi/mi-i-cmd.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi-i-cmd.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-i-cmd.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-info-os.exp gdb-10.2/gdb/testsuite/gdb.mi/mi-info-os.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi-info-os.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-info-os.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-inheritance-syntax-error.exp gdb-10.2/gdb/testsuite/gdb.mi/mi-inheritance-syntax-error.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi-inheritance-syntax-error.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-inheritance-syntax-error.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-language.exp gdb-10.2/gdb/testsuite/gdb.mi/mi-language.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi-language.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-language.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-linespec-err-cp.cc gdb-10.2/gdb/testsuite/gdb.mi/mi-linespec-err-cp.cc --- gdb-9.1/gdb/testsuite/gdb.mi/mi-linespec-err-cp.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-linespec-err-cp.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2016-2020 Free Software Foundation, Inc. + Copyright 2016-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-linespec-err-cp.exp gdb-10.2/gdb/testsuite/gdb.mi/mi-linespec-err-cp.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi-linespec-err-cp.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-linespec-err-cp.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2016-2020 Free Software Foundation, Inc. +# Copyright 2016-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-logging.exp gdb-10.2/gdb/testsuite/gdb.mi/mi-logging.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi-logging.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-logging.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-memory-changed.exp gdb-10.2/gdb/testsuite/gdb.mi/mi-memory-changed.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi-memory-changed.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-memory-changed.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-nonstop-exit.exp gdb-10.2/gdb/testsuite/gdb.mi/mi-nonstop-exit.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi-nonstop-exit.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-nonstop-exit.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2009-2020 Free Software Foundation, Inc. +# Copyright 2009-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-nonstop.exp gdb-10.2/gdb/testsuite/gdb.mi/mi-nonstop.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi-nonstop.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-nonstop.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2002-2020 Free Software Foundation, Inc. +# Copyright 2002-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-nsintrall.exp gdb-10.2/gdb/testsuite/gdb.mi/mi-nsintrall.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi-nsintrall.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-nsintrall.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-nsmoribund.exp gdb-10.2/gdb/testsuite/gdb.mi/mi-nsmoribund.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi-nsmoribund.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-nsmoribund.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-ns-stale-regcache.exp gdb-10.2/gdb/testsuite/gdb.mi/mi-ns-stale-regcache.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi-ns-stale-regcache.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-ns-stale-regcache.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2002-2020 Free Software Foundation, Inc. +# Copyright 2002-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-nsthrexec.exp gdb-10.2/gdb/testsuite/gdb.mi/mi-nsthrexec.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi-nsthrexec.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-nsthrexec.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2009-2020 Free Software Foundation, Inc. +# Copyright 2009-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-pending.c gdb-10.2/gdb/testsuite/gdb.mi/mi-pending.c --- gdb-9.1/gdb/testsuite/gdb.mi/mi-pending.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-pending.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2007-2020 Free Software Foundation, Inc. + Copyright 2007-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-pending.exp gdb-10.2/gdb/testsuite/gdb.mi/mi-pending.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi-pending.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-pending.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2007-2020 Free Software Foundation, Inc. +# Copyright 2007-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-pendshr2.c gdb-10.2/gdb/testsuite/gdb.mi/mi-pendshr2.c --- gdb-9.1/gdb/testsuite/gdb.mi/mi-pendshr2.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-pendshr2.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-pendshr.c gdb-10.2/gdb/testsuite/gdb.mi/mi-pendshr.c --- gdb-9.1/gdb/testsuite/gdb.mi/mi-pendshr.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-pendshr.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2007-2020 Free Software Foundation, Inc. + Copyright 2007-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-pthreads.exp gdb-10.2/gdb/testsuite/gdb.mi/mi-pthreads.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi-pthreads.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-pthreads.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2002-2020 Free Software Foundation, Inc. +# Copyright 2002-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-read-memory.exp gdb-10.2/gdb/testsuite/gdb.mi/mi-read-memory.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi-read-memory.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-read-memory.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1999-2020 Free Software Foundation, Inc. +# Copyright 1999-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-record-changed.exp gdb-10.2/gdb/testsuite/gdb.mi/mi-record-changed.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi-record-changed.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-record-changed.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-regs.exp gdb-10.2/gdb/testsuite/gdb.mi/mi-regs.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi-regs.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-regs.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1999-2020 Free Software Foundation, Inc. +# Copyright 1999-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-reg-undefined.c gdb-10.2/gdb/testsuite/gdb.mi/mi-reg-undefined.c --- gdb-9.1/gdb/testsuite/gdb.mi/mi-reg-undefined.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-reg-undefined.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2013-2020 Free Software Foundation, Inc. +/* Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-reg-undefined.exp gdb-10.2/gdb/testsuite/gdb.mi/mi-reg-undefined.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi-reg-undefined.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-reg-undefined.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-reg-undefined.S gdb-10.2/gdb/testsuite/gdb.mi/mi-reg-undefined.S --- gdb-9.1/gdb/testsuite/gdb.mi/mi-reg-undefined.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-reg-undefined.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2013-2020 Free Software Foundation, Inc. +/* Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-return.exp gdb-10.2/gdb/testsuite/gdb.mi/mi-return.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi-return.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-return.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1999-2020 Free Software Foundation, Inc. +# Copyright 1999-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-reverse.exp gdb-10.2/gdb/testsuite/gdb.mi/mi-reverse.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi-reverse.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-reverse.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2009-2020 Free Software Foundation, Inc. +# Copyright 2009-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-simplerun.exp gdb-10.2/gdb/testsuite/gdb.mi/mi-simplerun.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi-simplerun.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-simplerun.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1999-2020 Free Software Foundation, Inc. +# Copyright 1999-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-solib.exp gdb-10.2/gdb/testsuite/gdb.mi/mi-solib.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi-solib.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-solib.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-stack.c gdb-10.2/gdb/testsuite/gdb.mi/mi-stack.c --- gdb-9.1/gdb/testsuite/gdb.mi/mi-stack.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-stack.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 1999-2020 Free Software Foundation, Inc. +/* Copyright 1999-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-stack.exp gdb-10.2/gdb/testsuite/gdb.mi/mi-stack.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi-stack.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-stack.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2000-2020 Free Software Foundation, Inc. +# Copyright 2000-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-start.c gdb-10.2/gdb/testsuite/gdb.mi/mi-start.c --- gdb-9.1/gdb/testsuite/gdb.mi/mi-start.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-start.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2013-2020 Free Software Foundation, Inc. +/* Copyright 2013-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-start.exp gdb-10.2/gdb/testsuite/gdb.mi/mi-start.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi-start.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-start.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-stepi.exp gdb-10.2/gdb/testsuite/gdb.mi/mi-stepi.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi-stepi.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-stepi.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1999-2020 Free Software Foundation, Inc. +# Copyright 1999-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-stepn.c gdb-10.2/gdb/testsuite/gdb.mi/mi-stepn.c --- gdb-9.1/gdb/testsuite/gdb.mi/mi-stepn.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-stepn.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-stepn.exp gdb-10.2/gdb/testsuite/gdb.mi/mi-stepn.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi-stepn.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-stepn.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-sym-info-1.c gdb-10.2/gdb/testsuite/gdb.mi/mi-sym-info-1.c --- gdb-9.1/gdb/testsuite/gdb.mi/mi-sym-info-1.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-sym-info-1.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2019-2020 Free Software Foundation, Inc. +/* Copyright 2019-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-sym-info-2.c gdb-10.2/gdb/testsuite/gdb.mi/mi-sym-info-2.c --- gdb-9.1/gdb/testsuite/gdb.mi/mi-sym-info-2.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-sym-info-2.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2019-2020 Free Software Foundation, Inc. +/* Copyright 2019-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -41,3 +41,8 @@ return arg + 2; } +typedef char another_char_t; +typedef short another_short_t; + +static another_char_t var1; +static another_short_t var2; diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-sym-info.exp gdb-10.2/gdb/testsuite/gdb.mi/mi-sym-info.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi-sym-info.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-sym-info.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,13 @@ # Test -symbol-info-functions, -symbol-info-variables, and # -symbol-info-types. +# +# These tests can generate large amounts of output, which can cause gdb to be +# slow in two different ways: +# - it takes long before the command starts producing output +# - it takes long to print all the output +# We can prevent timeouts due to the latter using exp_continue, but for +# the former that doesn't work. There we use with_timeout_factor instead. load_lib mi-support.exp set MIFLAGS "-i=mi" @@ -51,81 +58,195 @@ # Fetch all functions, variables and types without any non-debug # symbols. -mi_gdb_test "111-symbol-info-functions" \ - "111\\^done,${debug_only_syms}" \ - "List all functions from debug information only" - -mi_gdb_test "112-symbol-info-variables" \ - "112\\^done,${debug_only_syms}" \ - "List all variables from debug information only" - -mi_gdb_test "113-symbol-info-types" \ - "113\\^done,${type_syms}" \ - "List all types" +set testname "List all functions from debug information only" +set cmd "111-symbol-info-functions" +set state 0 +gdb_test_multiple $cmd $testname -prompt "${mi_gdb_prompt}$" { + -re "111\\^done,symbols=\{debug=\\\[${symtab_re}" { + if { $state == 0 } { incr state } + exp_continue + } + -re ",${symtab_re}" { + exp_continue + } + -re "\\\]\}\r\n${mi_gdb_prompt}$" { + if { $state == 1 } { + pass $gdb_test_name + } else { + fail $gdb_test_name + } + } +} + +set testname "List all variables from debug information only" +set cmd "112-symbol-info-variables" +set state 0 +gdb_test_multiple $cmd $testname -prompt "${mi_gdb_prompt}$" { + -re "112\\^done,symbols=\{debug=\\\[${symtab_re}" { + if { $state == 0 } { incr state } + exp_continue + } + -re ",${symtab_re}" { + exp_continue + } + -re "\\\]\}\r\n${mi_gdb_prompt}$" { + if { $state == 1 } { + pass $gdb_test_name + } else { + fail $gdb_test_name + } + } +} + +set testname "List all types" +set cmd "113-symbol-info-types" +set state 0 +gdb_test_multiple $cmd $testname -prompt "${mi_gdb_prompt}$" { + -re "113\\^done,symbols=\{debug=\\\[${symtab_type_re}" { + if { $state == 0 } { incr state } + exp_continue + } + -re ",${symtab_type_re}" { + exp_continue + } + -re "\\\]\}\r\n${mi_gdb_prompt}$" { + if { $state == 1 } { + pass $gdb_test_name + } else { + fail $gdb_test_name + } + } +} # Fetch functions and variables but also grab the non-debug symbols # (from the symbol table). There's often so much output output from # this command that we overflow expect's buffers, avoid this by # fetching the output piece by piece. set testname "List all functions" -gdb_test_multiple "114-symbol-info-functions --include-nondebug" ${testname} { - -re "114\\^done,symbols=\{debug=\\\[${symtab_re}(?:,${symtab_re})*\\\],nondebug=\\\[" { +set cmd "114-symbol-info-functions --include-nondebug" +set state 0 +gdb_test_multiple $cmd ${testname} -prompt "${mi_gdb_prompt}$" { + -re "114\\^done,symbols=\{" { + if { $state == 0 } { set state 1 } exp_continue } - - -re "\{address=${qstr},name=${qstr}\}," { + -re "debug=\\\[${symtab_re}" { + if { $state == 1 } { set state 2 } exp_continue } - - -re "\{address=${qstr},name=${qstr}\}\\\]\}\r\n${mi_gdb_prompt}$" { - pass ${testname} + -re ",${symtab_re}" { + exp_continue } -} - -set testname "List all variables" -gdb_test_multiple "115-symbol-info-variables --include-nondebug" ${testname} { - -re "115\\^done,symbols=\{debug=\\\[${symtab_re}(?:,${symtab_re})*\\\],nondebug=\\\[" { - verbose -log "Got the first part of the input" + -re "\\\],nondebug=\\\[" { + if { $state == 2 } { set state 3 } exp_continue } - -re "\{address=${qstr},name=${qstr}\}," { exp_continue } - -re "\{address=${qstr},name=${qstr}\}\\\]\}\r\n${mi_gdb_prompt}$" { - pass ${testname} + if { $state == 3 } { + pass $gdb_test_name + } else { + fail $gdb_test_name + } + } +} + +with_timeout_factor 2 { + set testname "List all variables" + set cmd "115-symbol-info-variables --include-nondebug" + set state 0 + gdb_test_multiple $cmd ${testname} -prompt "${mi_gdb_prompt}$" { + -re "115\\^done,symbols=\{" { + if { $state == 0 } { set state 1 } + exp_continue + } + -re "debug=\\\[${symtab_re}" { + if { $state == 1 } { set state 2 } + exp_continue + } + -re ",${symtab_re}" { + exp_continue + } + -re "\\\],nondebug=\\\[" { + if { $state == 2 } { set state 3 } + exp_continue + } + -re "\{address=${qstr},name=${qstr}\}," { + exp_continue + } + -re "\{address=${qstr},name=${qstr}\}\\\]\}\r\n${mi_gdb_prompt}$" { + if { $state == 3 } { + pass $gdb_test_name + } else { + fail $gdb_test_name + } + } + } +} + +with_timeout_factor 2 { + set testname "List all variables" + set cmd "115-symbol-info-variables --include-nondebug" + set state 0 + gdb_test_multiple $cmd ${testname} -prompt "${mi_gdb_prompt}$" { + -re "115\\^done,symbols=\{" { + if { $state == 0 } { incr state } + exp_continue + } + -re "debug=\\\[${symtab_re}" { + if { $state == 1 } { incr state } + exp_continue + } + -re ",${symtab_re}" { + exp_continue + } + -re "\\\],nondebug=\\\[" { + if { $state == 2 } { incr state } + exp_continue + } + -re "\{address=${qstr},name=${qstr}\}," { + exp_continue + } + -re "\{address=${qstr},name=${qstr}\}\\\]\}\r\n${mi_gdb_prompt}$" { + if { $state == 3 } { + pass $gdb_test_name + } else { + fail $gdb_test_name + } + } } } # Filter functions by name and type. set lineno [gdb_get_line_number "f3 (another_int_t arg)" ${srcfile2}] -mi_gdb_test "116-symbol-info-functions --name f3" \ - "116\\^done,symbols=\{debug=\\\[\{filename=\"\[^\"\]+$srcfile2\",fullname=\"\[^\"\]+$srcfile2\",symbols=\\\[\{line=\"39\",name=\"f3\",type=\"int \\(another_int_t\\)\",description=\"int f3\\(another_int_t\\);\"\}\\\]\}\\\]\}" \ +mi_gdb_test "116-symbol-info-functions --name ^f3$" \ + "116\\^done,symbols=\{debug=\\\[\{filename=\"\[^\"\]*$srcfile2\",fullname=\"\[^\"\]+$srcfile2\",symbols=\\\[\{line=\"39\",name=\"f3\",type=\"int \\(another_int_t\\)\",description=\"int f3\\(another_int_t\\);\"\}\\\]\}\\\]\}" \ "List all functions matching pattern f3" set lineno [gdb_get_line_number "f4 (int *arg)" ${srcfile}] -mi_gdb_test "117-symbol-info-functions --type void" \ - "117\\^done,symbols=\{debug=\\\[\{filename=\"\[^\"\]+$srcfile\",fullname=\"\[^\"\]+$srcfile\",symbols=\\\[\{line=\"36\",name=\"f4\",type=\"void \\(int \\*\\)\",description=\"void f4\\(int \\*\\);\"\}\\\]\}\\\]\}" \ +mi_gdb_test "117-symbol-info-functions --type void --name ^f4$" \ + "117\\^done,symbols=\{debug=\\\[\{filename=\"\[^\"\]*$srcfile\",fullname=\"\[^\"\]+$srcfile\",symbols=\\\[\{line=\"36\",name=\"f4\",type=\"void \\(int \\*\\)\",description=\"void f4\\(int \\*\\);\"\}\\\]\}\\\]\}" \ "List all functions matching type void" # Filter variables by name and type. set lineno [gdb_get_line_number "int global_f2;" ${srcfile2}] mi_gdb_test "118-symbol-info-variables --name global_f2" \ - "118\\^done,symbols=\{debug=\\\[\{filename=\"\[^\"\]+$srcfile2\",fullname=\"\[^\"\]+$srcfile2\",symbols=\\\[\{line=\"21\",name=\"global_f2\",type=\"int\",description=\"int global_f2;\"\}\\\]\}\\\]\}" \ + "118\\^done,symbols=\{debug=\\\[\{filename=\"\[^\"\]*$srcfile2\",fullname=\"\[^\"\]+$srcfile2\",symbols=\\\[\{line=\"21\",name=\"global_f2\",type=\"int\",description=\"int global_f2;\"\}\\\]\}\\\]\}" \ "List all variables matching pattern global_f2" set lineno1 [gdb_get_line_number "static float global_f1;" ${srcfile}] set lineno2 [gdb_get_line_number "static float global_f1;" ${srcfile2}] -mi_gdb_test "119-symbol-info-variables --type float" \ - "119\\^done,symbols=\{debug=\\\[\{filename=\"\[^\"\]+$srcfile\",fullname=\"\[^\"\]+$srcfile\",symbols=\\\[\{line=\"25\",name=\"global_f1\",type=\"float\",description=\"static float global_f1;\"\}\\\]\},\{filename=\"\[^\"\]+$srcfile2\",fullname=\"\[^\"\]+$srcfile2\",symbols=\\\[\{line=\"19\",name=\"global_f1\",type=\"float\",description=\"static float global_f1;\"\}\\\]\}\\\]\}" \ +mi_gdb_test "119-symbol-info-variables --type float --name ^global_" \ + "119\\^done,symbols=\{debug=\\\[\{filename=\"\[^\"\]*$srcfile\",fullname=\"\[^\"\]+$srcfile\",symbols=\\\[\{line=\"25\",name=\"global_f1\",type=\"float\",description=\"static float global_f1;\"\}\\\]\},\{filename=\"\[^\"\]*$srcfile2\",fullname=\"\[^\"\]+$srcfile2\",symbols=\\\[\{line=\"19\",name=\"global_f1\",type=\"float\",description=\"static float global_f1;\"\}\\\]\}\\\]\}" \ "List all variables matching type float" # Fetch types, filtering by name. set lineno1 [gdb_get_line_number "typedef int my_int_t;" ${srcfile}] set lineno2 [gdb_get_line_number "typedef int another_int_t;" ${srcfile2}] mi_gdb_test "120-symbol-info-types --name _int_" \ - "120\\^done,symbols=\{debug=\\\[\{filename=\"\[^\"\]+$srcfile\",fullname=\"\[^\"\]+$srcfile\",symbols=\\\[\{line=\"27\",name=\"my_int_t\"\}\\\]\},\{filename=\"\[^\"\]+$srcfile2\",fullname=\"\[^\"\]+$srcfile2\",symbols=\\\[\{line=\"23\",name=\"another_int_t\"\}\\\]\}\\\]\}" \ + "120\\^done,symbols=\{debug=\\\[\{filename=\"\[^\"\]*$srcfile\",fullname=\"\[^\"\]+$srcfile\",symbols=\\\[\{line=\"27\",name=\"my_int_t\"\}\\\]\},\{filename=\"\[^\"\]*$srcfile2\",fullname=\"\[^\"\]+$srcfile2\",symbols=\\\[\{line=\"23\",name=\"another_int_t\"\}\\\]\}\\\]\}" \ "List all types matching _int_" # Test the --max-results parameter. @@ -133,18 +254,21 @@ "121\\^done,symbols=\{\}" \ "-symbol-info-functions --max-results 0" -mi_gdb_test "122-symbol-info-functions --max-results 1" \ - "122\\^done,symbols=\{debug=\\\[\{filename=\"\[^\"\]+$srcfile2\",fullname=\"\[^\"\]+$srcfile2\",symbols=\\\[\{line=\"39\",name=\"f3\",type=\"int \\(another_int_t\\)\",description=\"int f3\\(another_int_t\\);\"\}\\\]\}\\\]\}" \ +mi_gdb_test "122-symbol-info-functions --max-results 1 --name ^\[^_\]" \ + "122\\^done,symbols=\{debug=\\\[\{filename=\"\[^\"\]*$srcfile2\",fullname=\"\[^\"\]+$srcfile2\",symbols=\\\[\{line=\"39\",name=\"f3\",type=\"int \\(another_int_t\\)\",description=\"int f3\\(another_int_t\\);\"\}\\\]\}\\\]\}" \ "-symbol-info-functions --max-results 1" -mi_gdb_test "123-symbol-info-functions --max-results 2" \ - "123\\^done,symbols=\{debug=\\\[\{filename=\"\[^\"\]+$srcfile2\",fullname=\"\[^\"\]+$srcfile2\",symbols=\\\[\{line=\"33\",name=\"f2\",type=\"float \\(another_float_t\\)\",description=\"float f2\\(another_float_t\\);\"\},\{line=\"39\",name=\"f3\",type=\"int \\(another_int_t\\)\",description=\"int f3\\(another_int_t\\);\"\}\\\]\}\\\]\}" \ +mi_gdb_test "123-symbol-info-functions --max-results 2 --name ^\[^_\]" \ + "123\\^done,symbols=\{debug=\\\[\{filename=\"\[^\"\]*$srcfile2\",fullname=\"\[^\"\]+$srcfile2\",symbols=\\\[\{line=\"33\",name=\"f2\",type=\"float \\(another_float_t\\)\",description=\"float f2\\(another_float_t\\);\"\},\{line=\"39\",name=\"f3\",type=\"int \\(another_int_t\\)\",description=\"int f3\\(another_int_t\\);\"\}\\\]\}\\\]\}" \ "-symbol-info-functions --max-results 2" -mi_gdb_test "124-symbol-info-variables --max-results 3" \ - "124\\^done,symbols=\{debug=\\\[\{filename=\"\[^\"\]+$srcfile2\",fullname=\"\[^\"\]+$srcfile2\",symbols=\\\[\{line=\"21\",name=\"global_f2\",type=\"int\",description=\"int global_f2;\"\},\{line=\"20\",name=\"global_i2\",type=\"int\",description=\"int global_i2;\"\},\{line=\"19\",name=\"global_f1\",type=\"float\",description=\"static float global_f1;\"\}\\\]\}\\\]\}" \ - "-symbol-info-variables --max-results 3" +mi_gdb_test "124-symbol-info-variables --max-results 3 --name ^\[^_\]" \ + "124\\^done,symbols=\{debug=\\\[\{filename=\"\[^\"\]*$srcfile2\",fullname=\"\[^\"\]+$srcfile2\",symbols=\\\[\{line=\"21\",name=\"global_f2\",type=\"int\",description=\"int global_f2;\"\},\{line=\"20\",name=\"global_i2\",type=\"int\",description=\"int global_i2;\"\},\{line=\"19\",name=\"global_f1\",type=\"float\",description=\"static float global_f1;\"\}\\\]\}\\\]\}" \ -mi_gdb_test "125-symbol-info-types --max-results 4" \ - "125\\^done,symbols=\{debug=\\\[\{filename=\"\[^\"\]+$srcfile2\",fullname=\"\[^\"\]+$srcfile2\",symbols=\\\[\{line=\"24\",name=\"another_float_t\"\},\{line=\"23\",name=\"another_int_t\"\},\{name=\"float\"\},\{name=\"int\"\}\\\]\}\\\]\}" \ +set s1 "\{line=\"44\",name=\"another_char_t\"\}" +set s2 "\{line=\"24\",name=\"another_float_t\"\}" +set s3 "\{line=\"23\",name=\"another_int_t\"\}" +set s4 "\{line=\"45\",name=\"another_short_t\"\}" +mi_gdb_test "125-symbol-info-types --max-results 4 --name another_" \ + "125\\^done,symbols=\{debug=\\\[\{filename=\"\[^\"\]*$srcfile2\",fullname=\"\[^\"\]+$srcfile2\",symbols=\\\[$s1,$s2,$s3,$s4\\\]\}\\\]\}" \ "-symbol-info-types --max-results 4" diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-syn-frame.c gdb-10.2/gdb/testsuite/gdb.mi/mi-syn-frame.c --- gdb-9.1/gdb/testsuite/gdb.mi/mi-syn-frame.c 2019-02-23 12:20:11.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-syn-frame.c 2020-09-13 02:33:41.000000000 +0000 @@ -27,7 +27,7 @@ void bar (void) { - *(char *)0 = 0; /* try to cause a segfault */ + *(volatile char *)0 = 0; /* try to cause a segfault */ /* On MMU-less system, previous memory access to address zero doesn't trigger a SIGSEGV. Trigger a SIGILL. Each arch should define its diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-syn-frame.exp gdb-10.2/gdb/testsuite/gdb.mi/mi-syn-frame.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi-syn-frame.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-syn-frame.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2002-2020 Free Software Foundation, Inc. +# Copyright 2002-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-threads-interrupt.c gdb-10.2/gdb/testsuite/gdb.mi/mi-threads-interrupt.c --- gdb-9.1/gdb/testsuite/gdb.mi/mi-threads-interrupt.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-threads-interrupt.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2016-2020 Free Software Foundation, Inc. + Copyright 2016-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-threads-interrupt.exp gdb-10.2/gdb/testsuite/gdb.mi/mi-threads-interrupt.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi-threads-interrupt.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-threads-interrupt.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2016-2020 Free Software Foundation, Inc. +# Copyright 2016-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-undefined-cmd.exp gdb-10.2/gdb/testsuite/gdb.mi/mi-undefined-cmd.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi-undefined-cmd.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-undefined-cmd.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-until.exp gdb-10.2/gdb/testsuite/gdb.mi/mi-until.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi-until.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-until.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1999-2020 Free Software Foundation, Inc. +# Copyright 1999-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-var-block.exp gdb-10.2/gdb/testsuite/gdb.mi/mi-var-block.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi-var-block.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-var-block.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1999-2020 Free Software Foundation, Inc. +# Copyright 1999-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-var-child.c gdb-10.2/gdb/testsuite/gdb.mi/mi-var-child.c --- gdb-9.1/gdb/testsuite/gdb.mi/mi-var-child.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-var-child.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 1999-2020 Free Software Foundation, Inc. +/* Copyright 1999-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-var-child.exp gdb-10.2/gdb/testsuite/gdb.mi/mi-var-child.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi-var-child.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-var-child.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1999-2020 Free Software Foundation, Inc. +# Copyright 1999-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-var-child-f.exp gdb-10.2/gdb/testsuite/gdb.mi/mi-var-child-f.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi-var-child-f.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-var-child-f.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2006-2020 Free Software Foundation, Inc. +# Copyright 2006-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -36,7 +36,7 @@ mi_gdb_reinitialize_dir $srcdir/$subdir mi_gdb_load ${binfile} -mi_runto MAIN__ +mi_runto [fortran_main] mi_create_varobj "array" "array" "create local variable array" diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-var-cmd.exp gdb-10.2/gdb/testsuite/gdb.mi/mi-var-cmd.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi-var-cmd.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-var-cmd.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1999-2020 Free Software Foundation, Inc. +# Copyright 1999-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -70,7 +70,9 @@ "113\\^error,msg=\"-var-create: unable to create variable object\"" \ "create out of scope variable" -mi_runto do_locals_tests +with_test_prefix "first run" { + mi_runto do_locals_tests +} set line_dlt_first_real [gdb_get_line_number "linteger = 1234;"] @@ -253,7 +255,7 @@ mi_gdb_test "-var-assign linteger 3333" \ "\\^done,value=\"3333\"" \ - "assign to linteger" + "assign to linteger, 1st" # Allow lpcharacter to update, optionally. Because it points to a # char variable instead of a zero-terminated string, if linteger is @@ -278,7 +280,7 @@ mi_gdb_test "-var-assign lpinteger \"&linteger + 3\"" \ "\\^done,value=\"$hex\"" \ - "assign to lpinteger" + "assign to lpinteger, 1st" mi_gdb_test "-var-update *" \ "\\^done,changelist=\\\[\{name=\"lpinteger\",in_scope=\"true\",type_changed=\"false\",has_more=\"0\"\}\\\]" \ @@ -296,11 +298,11 @@ mi_gdb_test "-var-assign linteger 4321" \ "\\^done,value=\"4321\"" \ - "assign to linteger" + "assign to linteger, 2nd" mi_gdb_test "-var-assign lpinteger &linteger" \ "\\^done,value=\"$hex\"" \ - "assign to lpinteger" + "assign to lpinteger, 2nd" mi_gdb_test "-var-assign lcharacter 'z'" \ "\\^done,value=\"122 'z'\"" \ @@ -312,33 +314,33 @@ mi_gdb_test "-var-assign llong 1313L" \ "\\^done,value=\"1313\"" \ - "assign to llong" + "assign to llong, 1st" mi_gdb_test "-var-evaluate-expression llong" \ "\\^done,value=\"1313\"" \ "eval llong" mi_gdb_test "-var-assign llong 1212L" \ "\\^done,value=\"1212\"" \ - "assign to llong" + "assign to llong, 2nd" mi_gdb_test "-var-assign lplong &llong+4" \ "\\^done,value=\"$hex\"" \ - "assign to lplong" + "assign to lplong, 1st" mi_gdb_test "-var-evaluate-expression lplong" \ "\\^done,value=\"$hex\"" \ "eval lplong" mi_gdb_test "-var-assign lplong &llong" \ "\\^done,value=\"$hex\"" \ - "assign to lplong" + "assign to lplong, 2nd" mi_gdb_test "-var-assign lfloat 3.4567" \ "\\^done,value=\"3.45.*\"" \ - "assign to lfloat" + "assign to lfloat, 1st" mi_gdb_test "-var-evaluate-expression lfloat" \ "\\^done,value=\"3.45.*\"" \ "eval lfloat" mi_gdb_test "-var-assign lfloat 1.2345" \ "\\^done,value=\"1.23.*\"" \ - "assign to lfloat" + "assign to lfloat, 2nd" mi_gdb_test "-var-assign lpfloat &lfloat+4" \ "\\^done,value=\"$hex\"" \ @@ -648,7 +650,9 @@ mi_delete_breakpoints -mi_runto do_locals_tests +with_test_prefix "second run" { + mi_runto do_locals_tests +} mi_create_varobj "L" "lsimple" "in-and-out-of-scope: create varobj" mi_check_varobj_value "L" "{...}" "in-and-out-of-scope: check initial value" diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-var-cp.cc gdb-10.2/gdb/testsuite/gdb.mi/mi-var-cp.cc --- gdb-9.1/gdb/testsuite/gdb.mi/mi-var-cp.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-var-cp.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2006-2020 Free Software Foundation, Inc. +/* Copyright 2006-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-var-cp.exp gdb-10.2/gdb/testsuite/gdb.mi/mi-var-cp.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi-var-cp.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-var-cp.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2006-2020 Free Software Foundation, Inc. +# Copyright 2006-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-var-create-rtti.c gdb-10.2/gdb/testsuite/gdb.mi/mi-var-create-rtti.c --- gdb-9.1/gdb/testsuite/gdb.mi/mi-var-create-rtti.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-var-create-rtti.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-var-create-rtti.exp gdb-10.2/gdb/testsuite/gdb.mi/mi-var-create-rtti.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi-var-create-rtti.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-var-create-rtti.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-var-display.exp gdb-10.2/gdb/testsuite/gdb.mi/mi-var-display.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi-var-display.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-var-display.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1999-2020 Free Software Foundation, Inc. +# Copyright 1999-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-var-invalidate.exp gdb-10.2/gdb/testsuite/gdb.mi/mi-var-invalidate.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi-var-invalidate.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-var-invalidate.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2007-2020 Free Software Foundation, Inc. +# Copyright 2007-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-var-list-children-invalid-grandchild.c gdb-10.2/gdb/testsuite/gdb.mi/mi-var-list-children-invalid-grandchild.c --- gdb-9.1/gdb/testsuite/gdb.mi/mi-var-list-children-invalid-grandchild.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-var-list-children-invalid-grandchild.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-var-list-children-invalid-grandchild.exp gdb-10.2/gdb/testsuite/gdb.mi/mi-var-list-children-invalid-grandchild.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi-var-list-children-invalid-grandchild.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-var-list-children-invalid-grandchild.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-var-rtti.cc gdb-10.2/gdb/testsuite/gdb.mi/mi-var-rtti.cc --- gdb-9.1/gdb/testsuite/gdb.mi/mi-var-rtti.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-var-rtti.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2012-2020 Free Software Foundation, Inc. +/* Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-var-rtti.exp gdb-10.2/gdb/testsuite/gdb.mi/mi-var-rtti.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi-var-rtti.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-var-rtti.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-vla-c99.exp gdb-10.2/gdb/testsuite/gdb.mi/mi-vla-c99.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi-vla-c99.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-vla-c99.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # Contributed by Intel Corp. <keven.boell@intel.com> # diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-vla-fortran.exp gdb-10.2/gdb/testsuite/gdb.mi/mi-vla-fortran.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi-vla-fortran.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-vla-fortran.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-watch.exp gdb-10.2/gdb/testsuite/gdb.mi/mi-watch.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi-watch.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-watch.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1999-2020 Free Software Foundation, Inc. +# Copyright 1999-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/mi-watch-nonstop.exp gdb-10.2/gdb/testsuite/gdb.mi/mi-watch-nonstop.exp --- gdb-9.1/gdb/testsuite/gdb.mi/mi-watch-nonstop.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/mi-watch-nonstop.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/new-ui-mi-sync.c gdb-10.2/gdb/testsuite/gdb.mi/new-ui-mi-sync.c --- gdb-9.1/gdb/testsuite/gdb.mi/new-ui-mi-sync.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/new-ui-mi-sync.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2016-2020 Free Software Foundation, Inc. + Copyright 2016-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/new-ui-mi-sync.exp gdb-10.2/gdb/testsuite/gdb.mi/new-ui-mi-sync.exp --- gdb-9.1/gdb/testsuite/gdb.mi/new-ui-mi-sync.exp 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/new-ui-mi-sync.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2016-2020 Free Software Foundation, Inc. +# Copyright 2016-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -83,7 +83,7 @@ # in the separate MI UI. Note the "run" variant usually triggers # =thread-group-started/=thread-created/=library-loaded as well. with_spawn_id $gdb_main_spawn_id { - gdb_test "add-inferior" "Added inferior 2" + gdb_test "add-inferior" "Added inferior 2 on connection .*" } # Interrupt the program. diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/non-stop.c gdb-10.2/gdb/testsuite/gdb.mi/non-stop.c --- gdb-9.1/gdb/testsuite/gdb.mi/non-stop.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/non-stop.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Test program for non-stop debugging. - Copyright 1996-2020 Free Software Foundation, Inc. + Copyright 1996-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/non-stop-exit.c gdb-10.2/gdb/testsuite/gdb.mi/non-stop-exit.c --- gdb-9.1/gdb/testsuite/gdb.mi/non-stop-exit.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/non-stop-exit.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Test program exit in non-stop mode. - Copyright 2009-2020 Free Software Foundation, Inc. + Copyright 2009-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/nsintrall.c gdb-10.2/gdb/testsuite/gdb.mi/nsintrall.c --- gdb-9.1/gdb/testsuite/gdb.mi/nsintrall.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/nsintrall.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/nsmoribund.c gdb-10.2/gdb/testsuite/gdb.mi/nsmoribund.c --- gdb-9.1/gdb/testsuite/gdb.mi/nsmoribund.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/nsmoribund.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/ns-stale-regcache.c gdb-10.2/gdb/testsuite/gdb.mi/ns-stale-regcache.c --- gdb-9.1/gdb/testsuite/gdb.mi/ns-stale-regcache.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/ns-stale-regcache.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/nsthrexec.c gdb-10.2/gdb/testsuite/gdb.mi/nsthrexec.c --- gdb-9.1/gdb/testsuite/gdb.mi/nsthrexec.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/nsthrexec.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2009-2020 Free Software Foundation, Inc. + Copyright 2009-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/pending.c gdb-10.2/gdb/testsuite/gdb.mi/pending.c --- gdb-9.1/gdb/testsuite/gdb.mi/pending.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/pending.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/pendshr1.c gdb-10.2/gdb/testsuite/gdb.mi/pendshr1.c --- gdb-9.1/gdb/testsuite/gdb.mi/pendshr1.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/pendshr1.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/pendshr2.c gdb-10.2/gdb/testsuite/gdb.mi/pendshr2.c --- gdb-9.1/gdb/testsuite/gdb.mi/pendshr2.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/pendshr2.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/pr11022.c gdb-10.2/gdb/testsuite/gdb.mi/pr11022.c --- gdb-9.1/gdb/testsuite/gdb.mi/pr11022.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/pr11022.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This test is part of GDB, the GNU debugger. - Copyright 2009-2020 Free Software Foundation, Inc. + Copyright 2009-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/pr11022.exp gdb-10.2/gdb/testsuite/gdb.mi/pr11022.exp --- gdb-9.1/gdb/testsuite/gdb.mi/pr11022.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/pr11022.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2009-2020 Free Software Foundation, Inc. +# Copyright 2009-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/pthreads.c gdb-10.2/gdb/testsuite/gdb.mi/pthreads.c --- gdb-9.1/gdb/testsuite/gdb.mi/pthreads.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/pthreads.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Pthreads test program. - Copyright 1996-2020 Free Software Foundation, Inc. + Copyright 1996-2021 Free Software Foundation, Inc. Written by Keith Seitz of Red Hat. Copied from gdb.threads/pthreads.c. diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/solib-lib.c gdb-10.2/gdb/testsuite/gdb.mi/solib-lib.c --- gdb-9.1/gdb/testsuite/gdb.mi/solib-lib.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/solib-lib.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2011-2020 Free Software Foundation, Inc. +/* Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/solib-main.c gdb-10.2/gdb/testsuite/gdb.mi/solib-main.c --- gdb-9.1/gdb/testsuite/gdb.mi/solib-main.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/solib-main.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2011-2020 Free Software Foundation, Inc. +/* Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/user-selected-context-sync.c gdb-10.2/gdb/testsuite/gdb.mi/user-selected-context-sync.c --- gdb-9.1/gdb/testsuite/gdb.mi/user-selected-context-sync.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/user-selected-context-sync.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2016-2020 Free Software Foundation, Inc. + Copyright 2016-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/user-selected-context-sync.exp gdb-10.2/gdb/testsuite/gdb.mi/user-selected-context-sync.exp --- gdb-9.1/gdb/testsuite/gdb.mi/user-selected-context-sync.exp 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/user-selected-context-sync.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2016-2020 Free Software Foundation, Inc. +# Copyright 2016-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -415,7 +415,7 @@ # Add the second inferior now. While this is not mandatory, it allows # us to assume that per-inferior thread numbering will be used, # simplifying test_continue_to_start a bit (Thread 1.2 and not Thread 2). - gdb_test "add-inferior" "Added inferior 2" "add inferior 2" + gdb_test "add-inferior" "Added inferior 2 on connection .*" "add inferior 2" # Prepare the first inferior for the test. test_continue_to_start $mode 1 diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/var-cmd.c gdb-10.2/gdb/testsuite/gdb.mi/var-cmd.c --- gdb-9.1/gdb/testsuite/gdb.mi/var-cmd.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/var-cmd.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 1999-2020 Free Software Foundation, Inc. +/* Copyright 1999-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -366,23 +366,25 @@ int v2 = 4; /*: - mi_create_varobj V1 v1 "create varobj for v1" - mi_create_varobj V2 v2 "create varobj for v2" - - mi_list_varobj_children "V1" { - {"V1.i" "i" "0" "int"} - {"V1.nested" "nested" "2" "struct {...}"} - } "list children of v1" - - mi_list_varobj_children "V1.nested" { - {"V1.nested.j" "j" "0" "int"} - {"V1.nested.k" "k" "0" "int"} - } "list children of v1.nested" - - mi_check_varobj_value V1.i 1 "check V1.i: 1" - mi_check_varobj_value V1.nested.j 2 "check V1.nested.j: 2" - mi_check_varobj_value V1.nested.k 3 "check V1.nested.k: 3" - mi_check_varobj_value V2 4 "check V2: 4" + with_test_prefix "create varobj V1 and V2" { + mi_create_varobj V1 v1 "create varobj for v1" + mi_create_varobj V2 v2 "create varobj for v2" + + mi_list_varobj_children "V1" { + {"V1.i" "i" "0" "int"} + {"V1.nested" "nested" "2" "struct {...}"} + } "list children of v1" + + mi_list_varobj_children "V1.nested" { + {"V1.nested.j" "j" "0" "int"} + {"V1.nested.k" "k" "0" "int"} + } "list children of v1.nested" + + mi_check_varobj_value V1.i 1 "check V1.i: 1" + mi_check_varobj_value V1.nested.j 2 "check V1.nested.j: 2" + mi_check_varobj_value V1.nested.k 3 "check V1.nested.k: 3" + mi_check_varobj_value V2 4 "check V2: 4" + } :*/ v2 = 5; /*: @@ -400,40 +402,50 @@ v1.nested.j = 8; v1.nested.k = 9; /*: - set_frozen V1 1 - mi_varobj_update * {} "update varobjs: nothing changed" - mi_check_varobj_value V1.i 1 "check V1.i: 1" - mi_check_varobj_value V1.nested.j 2 "check V1.nested.j: 2" - mi_check_varobj_value V1.nested.k 3 "check V1.nested.k: 3" + with_test_prefix "frozen V1" { + set_frozen V1 1 + mi_varobj_update * {} "update varobjs: nothing changed" + mi_check_varobj_value V1.i 1 "check V1.i: 1" + mi_check_varobj_value V1.nested.j 2 "check V1.nested.j: 2" + mi_check_varobj_value V1.nested.k 3 "check V1.nested.k: 3" + } # Check that explicit update for elements of structures # works. - # Update v1.j - mi_varobj_update V1.nested.j {V1.nested.j} "update V1.nested.j" - mi_check_varobj_value V1.i 1 "check V1.i: 1" - mi_check_varobj_value V1.nested.j 8 "check V1.nested.j: 8" - mi_check_varobj_value V1.nested.k 3 "check V1.nested.k: 3" - # Update v1.nested, check that children is updated. - mi_varobj_update V1.nested {V1.nested.k} "update V1.nested" - mi_check_varobj_value V1.i 1 "check V1.i: 1" - mi_check_varobj_value V1.nested.j 8 "check V1.nested.j: 8" - mi_check_varobj_value V1.nested.k 9 "check V1.nested.k: 9" - # Update v1.i - mi_varobj_update V1.i {V1.i} "update V1.i" - mi_check_varobj_value V1.i 7 "check V1.i: 7" + with_test_prefix "update v1.j" { + # Update v1.j + mi_varobj_update V1.nested.j {V1.nested.j} "update V1.nested.j" + mi_check_varobj_value V1.i 1 "check V1.i: 1" + mi_check_varobj_value V1.nested.j 8 "check V1.nested.j: 8" + mi_check_varobj_value V1.nested.k 3 "check V1.nested.k: 3" + } + with_test_prefix "update v1.nested" { + # Update v1.nested, check that children is updated. + mi_varobj_update V1.nested {V1.nested.k} "update V1.nested" + mi_check_varobj_value V1.i 1 "check V1.i: 1" + mi_check_varobj_value V1.nested.j 8 "check V1.nested.j: 8" + mi_check_varobj_value V1.nested.k 9 "check V1.nested.k: 9" + } + with_test_prefix "update v1.i" { + # Update v1.i + mi_varobj_update V1.i {V1.i} "update V1.i" + mi_check_varobj_value V1.i 7 "check V1.i: 7" + } :*/ v1.i = 10; v1.nested.j = 11; v1.nested.k = 12; /*: # Check that unfreeze itself does not updates the values. - set_frozen V1 0 - mi_check_varobj_value V1.i 7 "check V1.i: 7" - mi_check_varobj_value V1.nested.j 8 "check V1.nested.j: 8" - mi_check_varobj_value V1.nested.k 9 "check V1.nested.k: 9" - mi_varobj_update V1 {V1.i V1.nested.j V1.nested.k} "update V1" - mi_check_varobj_value V1.i 10 "check V1.i: 10" - mi_check_varobj_value V1.nested.j 11 "check V1.nested.j: 11" - mi_check_varobj_value V1.nested.k 12 "check V1.nested.k: 12" + with_test_prefix "unfrozen V1" { + set_frozen V1 0 + mi_check_varobj_value V1.i 7 "check V1.i: 7" + mi_check_varobj_value V1.nested.j 8 "check V1.nested.j: 8" + mi_check_varobj_value V1.nested.k 9 "check V1.nested.k: 9" + mi_varobj_update V1 {V1.i V1.nested.j V1.nested.k} "update V1" + mi_check_varobj_value V1.i 10 "check V1.i: 10" + mi_check_varobj_value V1.nested.j 11 "check V1.nested.j: 11" + mi_check_varobj_value V1.nested.k 12 "check V1.nested.k: 12" + } :*/ /*: END: frozen :*/ diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/vla.c gdb-10.2/gdb/testsuite/gdb.mi/vla.c --- gdb-9.1/gdb/testsuite/gdb.mi/vla.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/vla.c 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ Contributed by Intel Corp. <keven.boell@intel.com> - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/vla.f90 gdb-10.2/gdb/testsuite/gdb.mi/vla.f90 --- gdb-9.1/gdb/testsuite/gdb.mi/vla.f90 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/vla.f90 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -! Copyright 2015-2020 Free Software Foundation, Inc. +! Copyright 2015-2021 Free Software Foundation, Inc. ! ! This program is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.mi/watch-nonstop.c gdb-10.2/gdb/testsuite/gdb.mi/watch-nonstop.c --- gdb-9.1/gdb/testsuite/gdb.mi/watch-nonstop.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.mi/watch-nonstop.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.modula2/max-depth.c gdb-10.2/gdb/testsuite/gdb.modula2/max-depth.c --- gdb-9.1/gdb/testsuite/gdb.modula2/max-depth.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.modula2/max-depth.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2019-2020 Free Software Foundation, Inc. +/* Copyright 2019-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.modula2/max-depth.exp gdb-10.2/gdb/testsuite/gdb.modula2/max-depth.exp --- gdb-9.1/gdb/testsuite/gdb.modula2/max-depth.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.modula2/max-depth.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.modula2/multidim.c gdb-10.2/gdb/testsuite/gdb.modula2/multidim.c --- gdb-9.1/gdb/testsuite/gdb.modula2/multidim.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.modula2/multidim.c 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,39 @@ +/* This test script is part of GDB, the GNU debugger. + + Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + + +static int a[10][20]; + +static void +here (void) +{ +} + +int +main () +{ + int i, j; + int count = 0; + + for (i = 0; i < 10; i++) + for (j = 0; j < 20; j++) + { + a[i][j] = count; + count += 1; + } + here (); +} diff -Nru gdb-9.1/gdb/testsuite/gdb.modula2/multidim.exp gdb-10.2/gdb/testsuite/gdb.modula2/multidim.exp --- gdb-9.1/gdb/testsuite/gdb.modula2/multidim.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.modula2/multidim.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,37 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# This file is part of the gdb testsuite. It contains tests for printing +# the elements of an unbounded array using the Modula-2 language mode of +# gdb. + +standard_testfile multidim.c + +if {[prepare_for_testing "failed to prepare" $testfile $srcfile \ + {debug quiet}]} { + return -1 +} + +if ![runto here] then { + perror "couldn't run to breakpoint 'here'" + continue +} + +gdb_test "set lang modula-2" ".*does not match.*" "switch to modula-2" + +gdb_test "print a\[1,2\]" ".*= 22.*" "second row third column" +gdb_test "print a\[2,1\]" ".*= 41.*" "fifth row second column" +gdb_test "print a\[a\[0,1\],a\[0,2\]\]" ".*= 22.*" \ + "second row third column again" diff -Nru gdb-9.1/gdb/testsuite/gdb.modula2/unbounded1.c gdb-10.2/gdb/testsuite/gdb.modula2/unbounded1.c --- gdb-9.1/gdb/testsuite/gdb.modula2/unbounded1.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.modula2/unbounded1.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This test script is part of GDB, the GNU debugger. - Copyright 2007-2020 Free Software Foundation, Inc. + Copyright 2007-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.modula2/unbounded-array.exp gdb-10.2/gdb/testsuite/gdb.modula2/unbounded-array.exp --- gdb-9.1/gdb/testsuite/gdb.modula2/unbounded-array.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.modula2/unbounded-array.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2007-2020 Free Software Foundation, Inc. +# Copyright 2007-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.multi/base.exp gdb-10.2/gdb/testsuite/gdb.multi/base.exp --- gdb-9.1/gdb/testsuite/gdb.multi/base.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.multi/base.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2009-2020 Free Software Foundation, Inc. +# Copyright 2009-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.multi/bkpt-multi-exec.exp gdb-10.2/gdb/testsuite/gdb.multi/bkpt-multi-exec.exp --- gdb-9.1/gdb/testsuite/gdb.multi/bkpt-multi-exec.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.multi/bkpt-multi-exec.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2009-2020 Free Software Foundation, Inc. +# Copyright 2009-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.multi/dummy-frame-restore.c gdb-10.2/gdb/testsuite/gdb.multi/dummy-frame-restore.c --- gdb-9.1/gdb/testsuite/gdb.multi/dummy-frame-restore.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.multi/dummy-frame-restore.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.multi/dummy-frame-restore.exp gdb-10.2/gdb/testsuite/gdb.multi/dummy-frame-restore.exp --- gdb-9.1/gdb/testsuite/gdb.multi/dummy-frame-restore.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.multi/dummy-frame-restore.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.multi/goodbye.c gdb-10.2/gdb/testsuite/gdb.multi/goodbye.c --- gdb-9.1/gdb/testsuite/gdb.multi/goodbye.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.multi/goodbye.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2009-2020 Free Software Foundation, Inc. + Copyright 2009-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -37,6 +37,7 @@ glob *= 8; glob += 9; glob *= 9; + return 0; } void diff -Nru gdb-9.1/gdb/testsuite/gdb.multi/hangout.c gdb-10.2/gdb/testsuite/gdb.multi/hangout.c --- gdb-9.1/gdb/testsuite/gdb.multi/hangout.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.multi/hangout.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2009-2020 Free Software Foundation, Inc. + Copyright 2009-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.multi/hello.c gdb-10.2/gdb/testsuite/gdb.multi/hello.c --- gdb-9.1/gdb/testsuite/gdb.multi/hello.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.multi/hello.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2009-2020 Free Software Foundation, Inc. + Copyright 2009-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -29,7 +29,7 @@ exit(1); } -int commonfun() { bar(); } /* from hello */ +int commonfun() { bar(); return 0; } /* from hello */ int hello(int x) diff -Nru gdb-9.1/gdb/testsuite/gdb.multi/info-threads.exp gdb-10.2/gdb/testsuite/gdb.multi/info-threads.exp --- gdb-9.1/gdb/testsuite/gdb.multi/info-threads.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.multi/info-threads.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2009-2020 Free Software Foundation, Inc. +# Copyright 2009-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.multi/multi-arch-exec.c gdb-10.2/gdb/testsuite/gdb.multi/multi-arch-exec.c --- gdb-9.1/gdb/testsuite/gdb.multi/multi-arch-exec.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.multi/multi-arch-exec.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.multi/multi-arch-exec.exp gdb-10.2/gdb/testsuite/gdb.multi/multi-arch-exec.exp --- gdb-9.1/gdb/testsuite/gdb.multi/multi-arch-exec.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.multi/multi-arch-exec.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2009-2020 Free Software Foundation, Inc. +# Copyright 2009-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.multi/multi-arch.exp gdb-10.2/gdb/testsuite/gdb.multi/multi-arch.exp --- gdb-9.1/gdb/testsuite/gdb.multi/multi-arch.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.multi/multi-arch.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2009-2020 Free Software Foundation, Inc. +# Copyright 2009-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.multi/multi-attach.c gdb-10.2/gdb/testsuite/gdb.multi/multi-attach.c --- gdb-9.1/gdb/testsuite/gdb.multi/multi-attach.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.multi/multi-attach.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2007-2020 Free Software Foundation, Inc. + Copyright 2007-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.multi/multi-attach.exp gdb-10.2/gdb/testsuite/gdb.multi/multi-attach.exp --- gdb-9.1/gdb/testsuite/gdb.multi/multi-attach.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.multi/multi-attach.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2007-2020 Free Software Foundation, Inc. +# Copyright 2007-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.multi/multi-exit.c gdb-10.2/gdb/testsuite/gdb.multi/multi-exit.c --- gdb-9.1/gdb/testsuite/gdb.multi/multi-exit.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.multi/multi-exit.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,22 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +int +main () +{ + return 0; +} diff -Nru gdb-9.1/gdb/testsuite/gdb.multi/multi-exit.exp gdb-10.2/gdb/testsuite/gdb.multi/multi-exit.exp --- gdb-9.1/gdb/testsuite/gdb.multi/multi-exit.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.multi/multi-exit.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,134 @@ +# This testcase is part of GDB, the GNU debugger. + +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Test receiving TARGET_WAITKIND_EXITED events from multiple +# inferiors. In all stop-mode, upon receiving the exit event from one +# of the inferiors, GDB will try to stop the other inferior, too. So, +# a stop request will be sent. Receiving a TARGET_WAITKIND_EXITED +# status kind as a response to that stop request instead of a +# TARGET_WAITKIND_STOPPED should be handled by GDB without problems. + +standard_testfile + +if {[use_gdb_stub]} { + return 0 +} + +if {[build_executable "failed to prepare" $testfile $srcfile]} { + return -1 +} + +# We are testing GDB's ability to stop all threads. +# Hence, go with the all-stop-on-top-of-non-stop mode. +save_vars { GDBFLAGS } { + append GDBFLAGS " -ex \"maint set target-non-stop on\"" + clean_restart ${binfile} +} + +# Start inferior NUM. + +proc start_inferior {num} { + with_test_prefix "start_inferior $num" { + global srcfile binfile + + if {$num != 1} { + gdb_test "add-inferior" "Added inferior $num.*" \ + "add empty inferior" + gdb_test "inferior $num" "Switching to inferior $num.*" \ + "switch to inferior" + } + + gdb_load $binfile + + if {[gdb_start_cmd] < 0} { + fail "could not start" + return -1 + } + gdb_test "" ".*reakpoint .*, main .*${srcfile}.*" "start" + } + + return 0 +} + +# Sufficient inferiors to make sure that at least some other inferior +# exits while we're handling a process exit event. +set NUM_INFS 10 + +for {set i 1} {$i <= $NUM_INFS} {incr i} { + if {[start_inferior $i] < 0} { + return -1 + } +} + +# We want to continue all processes. +gdb_test_no_output "set schedule-multiple on" + +# Check that "continue" continues to the end of an inferior, as many +# times as we have inferiors. + +for {set i 1} {$i <= $NUM_INFS} {incr i} { + with_test_prefix "inf $i" { + set live_inferior "" + + # Pick any live inferior. + gdb_test_multiple "info inferiors" "" { + -re "($decimal) *process.*$gdb_prompt $" { + set live_inferior $expect_out(1,string) + } + } + + if {$live_inferior == ""} { + return -1 + } + + gdb_test "inferior $live_inferior" \ + ".*Switching to inferior $live_inferior.*" \ + "switch to another inferior" + + set exited_inferior "" + + # We want GDB to complete the command and return the prompt + # instead of going into an infinite loop. + gdb_test_multiple "continue" "continue" { + -re "Inferior ($decimal) \[^\n\r\]+ exited normally.*$gdb_prompt $" { + set exited_inferior $expect_out(1,string) + pass $gdb_test_name + } + } + + if {$exited_inferior == ""} { + return -1 + } + } +} + +# Finally, check that we can re-run all inferiors. Note that if any +# inferior was still alive this would catch it, as "run" would query +# "Start it from the beginning?". + +delete_breakpoints + +for {set i 1} {$i <= $NUM_INFS} {incr i} { + with_test_prefix "inf $i" { + gdb_test "inferior $i" \ + ".*Switching to inferior $i.*" \ + "switch to inferior for re-run" + + gdb_test "run" "$inferior_exited_re normally\]" \ + "re-run inferior" + } +} diff -Nru gdb-9.1/gdb/testsuite/gdb.multi/multi-kill.c gdb-10.2/gdb/testsuite/gdb.multi/multi-kill.c --- gdb-9.1/gdb/testsuite/gdb.multi/multi-kill.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.multi/multi-kill.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,42 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include <sys/types.h> +#include <unistd.h> + +static pid_t pid; + +static void +initialized () +{ +} + +int +main () +{ + pid = getpid (); + initialized (); + + /* Don't run forever in case GDB crashes and DejaGNU fails to kill + this program. */ + alarm (10); + + while (1) + ; + + return 0; +} diff -Nru gdb-9.1/gdb/testsuite/gdb.multi/multi-kill.exp gdb-10.2/gdb/testsuite/gdb.multi/multi-kill.exp --- gdb-9.1/gdb/testsuite/gdb.multi/multi-kill.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.multi/multi-kill.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,137 @@ +# This testcase is part of GDB, the GNU debugger. + +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Test receiving TARGET_WAITKIND_SIGNALLED events from multiple +# inferiors. In all stop-mode, upon receiving the exit event from one +# of the inferiors, GDB will try to stop the other inferior, too. So, +# a stop request will be sent. Receiving a TARGET_WAITKIND_SIGNALLED +# status kind as a response to that stop request instead of a +# TARGET_WAITKIND_STOPPED should be handled by GDB without problems. + +standard_testfile + +if {[use_gdb_stub]} { + return 0 +} + +if {[build_executable "failed to prepare" $testfile $srcfile {debug}]} { + return -1 +} + +# We are testing GDB's ability to stop all threads. +# Hence, go with the all-stop-on-top-of-non-stop mode. +save_vars { GDBFLAGS } { + append GDBFLAGS " -ex \"maint set target-non-stop on\"" + clean_restart ${binfile} +} + +# Wrap the entire test in a namespace to avoid contaminating other tests. +namespace eval $testfile { + +# Start inferior NUM and record its PID in the TESTPID array. + +proc start_inferior {num} { + with_test_prefix "start_inferior $num" { + variable testpid + global binfile srcfile + + if {$num != 1} { + gdb_test "add-inferior" "Added inferior .*" \ + "add empty inferior" + gdb_test "inferior $num" "Switching to inferior .*" \ + "switch to inferior" + } + + gdb_load $binfile + + gdb_breakpoint "initialized" {temporary} + gdb_run_cmd + gdb_test "" ".*reakpoint .*, initialized .*${srcfile}.*" "run" + + set testpid($num) [get_integer_valueof "pid" -1] + if {$testpid($num) == -1} { + return -1 + } + + return 0 + } +} + +# Sufficient inferiors to make sure that at least some other inferior +# is killed while we're handling a killed event. +set NUM_INFS 10 + +# The array holding each inferior's PID, indexed by inferior number. +variable testpid +array set testpid {} + +for {set i 1} {$i <= $NUM_INFS} {incr i} { + if {[start_inferior $i] < 0} { + return -1 + } +} + +# We want to continue all processes. +gdb_test_no_output "set schedule-multiple on" + +# Resume, but then kill all from outside. +gdb_test_multiple "continue" "continue processes" { + -re "Continuing.\[\r\n\]+" { + # Kill all processes at once. + + set kill_cmd "kill -9" + for {set i 1} {$i <= $NUM_INFS} {incr i} { + append kill_cmd " $testpid($i)" + } + + remote_exec target $kill_cmd + exp_continue + } + -re "Program terminated with signal.*$gdb_prompt $" { + pass $gdb_test_name + } +} + +# Check that "continue" collects the process kill event, as many times +# as we have inferiors left. + +for {set i 2} {$i <= $NUM_INFS} {incr i} { + with_test_prefix "inf $i" { + set live_inferior "" + + # Pick any live inferior. + gdb_test_multiple "info inferiors" "" { + -re "($decimal) *process.*$gdb_prompt $" { + set live_inferior $expect_out(1,string) + } + } + + if {$live_inferior == ""} { + return -1 + } + + gdb_test "inferior $live_inferior" \ + ".*Switching to inferior $live_inferior.*" \ + "switch to inferior" + + gdb_test "continue" \ + "Program terminated with signal SIGKILL, .*" \ + "continue to SIGKILL" + } +} + +} diff -Nru gdb-9.1/gdb/testsuite/gdb.multi/multi-re-run-1.c gdb-10.2/gdb/testsuite/gdb.multi/multi-re-run-1.c --- gdb-9.1/gdb/testsuite/gdb.multi/multi-re-run-1.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.multi/multi-re-run-1.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,61 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include <stdlib.h> +#include <stdio.h> +#include <unistd.h> +#include <limits.h> +#include <string.h> +#include <pthread.h> + +int re_run_var_1 = 1; + +#define NUM_THREADS 1 + +__thread int tls_var = 1; + +static pthread_barrier_t barrier; + +static void * +thread_start (void *arg) +{ + pthread_barrier_wait (&barrier); + + while (1) + sleep (1); + return NULL; +} + +static void +all_started (void) +{ +} + +int +main (int argc, char ** argv) +{ + pthread_t thread; + int len; + + pthread_barrier_init (&barrier, NULL, NUM_THREADS + 1); + pthread_create (&thread, NULL, thread_start, NULL); + + pthread_barrier_wait (&barrier); + all_started (); + + return 0; +} diff -Nru gdb-9.1/gdb/testsuite/gdb.multi/multi-re-run-2.c gdb-10.2/gdb/testsuite/gdb.multi/multi-re-run-2.c --- gdb-9.1/gdb/testsuite/gdb.multi/multi-re-run-2.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.multi/multi-re-run-2.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,61 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include <stdlib.h> +#include <stdio.h> +#include <unistd.h> +#include <limits.h> +#include <string.h> +#include <pthread.h> + +int re_run_var_2 = 2; + +#define NUM_THREADS 1 + +__thread int tls_var = 1; + +static pthread_barrier_t barrier; + +static void * +thread_start (void *arg) +{ + pthread_barrier_wait (&barrier); + + while (1) + sleep (1); + return NULL; +} + +static void +all_started (void) +{ +} + +int +main (int argc, char ** argv) +{ + pthread_t thread; + int len; + + pthread_barrier_init (&barrier, NULL, NUM_THREADS + 1); + pthread_create (&thread, NULL, thread_start, NULL); + + pthread_barrier_wait (&barrier); + all_started (); + + return 0; +} diff -Nru gdb-9.1/gdb/testsuite/gdb.multi/multi-re-run.exp gdb-10.2/gdb/testsuite/gdb.multi/multi-re-run.exp --- gdb-9.1/gdb/testsuite/gdb.multi/multi-re-run.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.multi/multi-re-run.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,122 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Test loading two inferiors into GDB, and running one of them twice +# in a row. GDB used to have a bug that made it so that after an +# inferior exit, the current program space was left pointing to the +# wrong inferior's pspace, causing subsequent symbol lookups to +# misbehave, including failing to load libthread_db.so. See PR +# gdb/25410. + +# Build two executables, with different symbols. + +set exec1 "multi-re-run-1" +set srcfile1 multi-re-run-1.c +set binfile1 [standard_output_file ${exec1}] + +set exec2 "multi-re-run-2" +set srcfile2 multi-re-run-2.c +set binfile2 [standard_output_file ${exec2}] + +with_test_prefix "exec1" { + if { [prepare_for_testing "failed to prepare" ${exec1} "${srcfile1}" \ + [list pthreads debug]] } { + return -1 + } +} + +with_test_prefix "exec2" { + if { [prepare_for_testing "failed to prepare" ${exec2} "${srcfile2}" \ + [list pthreads debug]] } { + return -1 + } +} + +# Start two inferiors, leave one stopped, and run the other a couple +# times. RE_RUN_INF is the inferior that is re-run. + +proc test_re_run {re_run_inf} { + global binfile1 binfile2 + global inferior_exited_re + global gdb_prompt + global last_loaded_file + + clean_restart ${binfile1} + + delete_breakpoints + + # Start another inferior. + gdb_test "add-inferior" "Added inferior 2.*" \ + "add empty inferior 2" + gdb_test "inferior 2" "Switching to inferior 2.*" \ + "switch to inferior 2" + gdb_load ${binfile2} + + if {$re_run_inf == 1} { + set steady_inf 2 + set steady_binfile $binfile2 + set re_run_binfile $binfile1 + } else { + set steady_inf 1 + set steady_binfile $binfile1 + set re_run_binfile $binfile2 + } + + gdb_test "inferior $steady_inf" "Switching to inferior $steady_inf.*" \ + "switch to steady inferior" + set last_loaded_file $steady_binfile + + # Run the steady inferior to a breakpoint, and let it stay stopped + # there. + if ![runto all_started message] then { + untested "setup failed" + return 0 + } + + gdb_test "inferior $re_run_inf" "Switching to inferior $re_run_inf.*" \ + "switch to re-run inferior" + set last_loaded_file $re_run_binfile + + # Now run the RE_RUN_INF inferior a couple times. GDB used to + # have a bug that caused the second run to fail to load + # libthread_db.so. + foreach_with_prefix iter {1 2} { + delete_breakpoints + + if ![runto all_started message] { + return 0 + } + + # If a thread_stratum target fails to load, then TLS debugging + # fails too. + gdb_test "print tls_var" " = 1" + + gdb_continue_to_end "" continue 1 + + # In the original bug, after an inferior exit, GDB would leave + # the current program space pointing to the wrong inferior's + # pspace, and thus the wrong symbols were visible. + if {$re_run_inf == 1} { + gdb_test "print re_run_var_1" " = 1" + } else { + gdb_test "print re_run_var_2" " = 2" + } + } +} + +# For completeness, test re-running either inferior 1 or inferior 2. +foreach_with_prefix re_run_inf {1 2} { + test_re_run $re_run_inf +} diff -Nru gdb-9.1/gdb/testsuite/gdb.multi/multi-target.c gdb-10.2/gdb/testsuite/gdb.multi/multi-target.c --- gdb-9.1/gdb/testsuite/gdb.multi/multi-target.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.multi/multi-target.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,102 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2017-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include <stdlib.h> +#include <stdio.h> +#include <unistd.h> +#include <limits.h> +#include <string.h> +#include <pthread.h> + +#define NUM_THREADS 1 + +static pthread_barrier_t barrier; + +volatile int exit_thread; + +static void * +thread_start (void *arg) +{ + pthread_barrier_wait (&barrier); + + while (!exit_thread) + sleep (1); + return NULL; +} + +static void +all_started (void) +{ +} + +int wait_for_gdb; + +static void +function1 (void) +{ + while (wait_for_gdb) + sleep (1); +} + +static void +function2 (void) +{ + while (wait_for_gdb) + sleep (1); +} + +static void +function3 (void) +{ +} + +static void +function4 (void) +{ +} + +static void +function5 (void) +{ +} + +int +main (int argc, char ** argv) +{ + pthread_t thread; + int len; + + alarm (360); + + pthread_barrier_init (&barrier, NULL, NUM_THREADS + 1); + pthread_create (&thread, NULL, thread_start, NULL); + + pthread_barrier_wait (&barrier); + all_started (); + + while (1) + { + function1 (); /* set break 1 here */ + function2 (); /* set break 2 here */ + function3 (); + function4 (); + function5 (); + sleep (1); + } + + return 0; +} diff -Nru gdb-9.1/gdb/testsuite/gdb.multi/multi-target-continue.exp gdb-10.2/gdb/testsuite/gdb.multi/multi-target-continue.exp --- gdb-9.1/gdb/testsuite/gdb.multi/multi-target-continue.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.multi/multi-target-continue.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,105 @@ +# Copyright 2017-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Test "continue" to breakpoints in different targets. In non-stop +# mode, also tests "interrupt -a". + +source $srcdir/$subdir/multi-target.exp.tcl + +if {![multi_target_prepare]} { + return +} + +proc test_continue {non-stop} { + if {![setup ${non-stop}]} { + untested "setup failed" + return + } + + proc set_break {inf} { + gdb_test "break function${inf} thread ${inf}.1" \ + "Breakpoint .* function${inf}\\..*" + } + + # Select inferior INF, and then run to a breakpoint on inferior + # INF+1. + proc test_continue_inf {inf} { + upvar 1 non-stop non-stop + + global gdb_prompt + delete_breakpoints + + set next_inf [next_live_inferior $inf] + + gdb_test "inferior $inf" "Switching to inferior $inf.*" + set_break $next_inf + + if {${non-stop} == "off"} { + gdb_test "continue" "hit Breakpoint .* function${next_inf}.*" + } else { + set msg "continue" + gdb_test_multiple "continue -a&" $msg { + -re "Continuing.*$gdb_prompt " { + pass $msg + } + } + + set msg "hit bp" + gdb_test_multiple "" $msg { + -re "hit Breakpoint .* function${next_inf}" { + pass $msg + } + } + + set msg "stop all threads" + gdb_test_multiple "interrupt -a" $msg { + -re "$gdb_prompt " { + for {set i 0} {$i < 7} {incr i} { + set ok 0 + gdb_test_multiple "" $msg { + -re "Thread\[^\r\n\]*stopped\\." { + set ok 1 + } + } + if {!$ok} { + break + } + } + gdb_assert $ok $msg + } + } + } + } + + for {set i 1} {$i <= 5} {incr i} { + if {$i == 3} { + # This is a core inferior. + continue + } + + with_test_prefix "inf$i" { + test_continue_inf $i + } + } +} + +# Some basic "continue" + breakpoints tests. +with_test_prefix "continue" { + foreach_with_prefix non-stop {"off" "on"} { + test_continue ${non-stop} + } +} + +multi_target_cleanup diff -Nru gdb-9.1/gdb/testsuite/gdb.multi/multi-target.exp.tcl gdb-10.2/gdb/testsuite/gdb.multi/multi-target.exp.tcl --- gdb-9.1/gdb/testsuite/gdb.multi/multi-target.exp.tcl 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.multi/multi-target.exp.tcl 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,185 @@ +# Copyright 2017-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Common routines for testing multi-target features. + +load_lib gdbserver-support.exp + +standard_testfile multi-target.c + +# Keep a list of (inferior ID, spawn ID). +set server_spawn_ids [list] + +proc connect_target_extended_remote {binfile num} { + set res [gdbserver_start "--multi" ""] + global server_spawn_ids server_spawn_id + lappend server_spawn_ids $num $server_spawn_id + set gdbserver_gdbport [lindex $res 1] + return [gdb_target_cmd "extended-remote" $gdbserver_gdbport] +} + +# Add and start inferior number NUM. Returns true on success, false +# otherwise. +proc add_inferior {num target binfile {gcorefile ""}} { + # Start another inferior. + gdb_test "add-inferior -no-connection" "Added inferior $num" \ + "add empty inferior $num" + gdb_test "inferior $num" "Switching to inferior $num.*" \ + "switch to inferior $num" + gdb_test "file ${binfile}" ".*" "load file in inferior $num" + gdb_test_no_output "set remote exec-file ${binfile}" \ + "set remote-exec file in inferior $num" + + if {$target == "core"} { + gdb_test "core $gcorefile" "Core was generated by.*" \ + "core [file tail $gcorefile], inf $num" + return 1 + } + + if {$target == "extended-remote"} { + if {[connect_target_extended_remote $binfile $num]} { + return 0 + } + } + if ![runto "all_started"] then { + return 0 + } + delete_breakpoints + + return 1 +} + +proc prepare_core {} { + global gcorefile gcore_created + global binfile + + clean_restart ${binfile} + + if ![runto all_started] then { + return -1 + } + + global testfile + set gcorefile [standard_output_file $testfile.gcore] + set gcore_created [gdb_gcore_cmd $gcorefile "save a core file"] +} + +proc next_live_inferior {inf} { + incr inf + if {$inf == 3} { + # 3 is a core. + return 4 + } + if {$inf > 5} { + # 6 is a core. + return 1 + } + + return $inf +} + +# Clean up the server_spawn_ids. +proc cleanup_gdbservers { } { + global server_spawn_id + global server_spawn_ids + foreach { inferior_id spawn_id } $server_spawn_ids { + set server_spawn_id $spawn_id + gdb_test "inferior $inferior_id" + gdbserver_exit 0 + } + set server_spawn_ids [list] +} + +# Return true on success, false otherwise. + +proc setup {non-stop} { + global gcorefile gcore_created + global binfile + + cleanup_gdbservers + clean_restart ${binfile} + + # multi-target depends on target running in non-stop mode. Force + # it on for remote targets, until this is the default. + gdb_test_no_output "maint set target-non-stop on" + + gdb_test_no_output "set non-stop ${non-stop}" + + if ![runto all_started] then { + return 0 + } + + delete_breakpoints + + # inferior 1 -> native + # inferior 2 -> extended-remote + # inferior 3 -> core + # inferior 4 -> native + # inferior 5 -> extended-remote + # inferior 6 -> core + if {![add_inferior 2 "extended-remote" $binfile]} { + return 0 + } + if {![add_inferior 3 "core" $binfile $gcorefile]} { + return 0 + } + if {![add_inferior 4 "native" $binfile]} { + return 0 + } + if {![add_inferior 5 "extended-remote" $binfile]} { + return 0 + } + if {![add_inferior 6 "core" $binfile $gcorefile]} { + return 0 + } + + # For debugging. + gdb_test "info threads" ".*" + + # Make "continue" resume all inferiors. + if {${non-stop} == "off"} { + gdb_test_no_output "set schedule-multiple on" + } + + return 1 +} + +proc multi_target_prepare {} { + global binfile srcfile + + if { [skip_gdbserver_tests] } { + return 0 + } + + # The plain remote target can't do multiple inferiors. + if {[target_info gdb_protocol] != ""} { + return 0 + } + + if { [prepare_for_testing "failed to prepare" ${binfile} "${srcfile}" \ + {debug pthreads}] } { + return 0 + } + + # Make a core file with two threads upfront. Several tests load + # the same core file. + prepare_core + + return 1 +} + +proc multi_target_cleanup {} { + cleanup_gdbservers +} diff -Nru gdb-9.1/gdb/testsuite/gdb.multi/multi-target-info-inferiors.exp gdb-10.2/gdb/testsuite/gdb.multi/multi-target-info-inferiors.exp --- gdb-9.1/gdb/testsuite/gdb.multi/multi-target-info-inferiors.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.multi/multi-target-info-inferiors.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,110 @@ +# Copyright 2017-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Test "info inferiors" and "info connections" with multiple targets. + +source $srcdir/$subdir/multi-target.exp.tcl + +if {![multi_target_prepare]} { + return +} + +# Test "info inferiors" and "info connections". MULTI_PROCESS +# indicates whether the multi-process feature of remote targets is +# turned off or on. +proc test_info_inferiors {multi_process} { + setup "off" + + gdb_test_no_output \ + "set remote multiprocess-feature-packet $multi_process" + + # Get the description for inferior INF for when the current + # inferior id is CURRENT. + proc inf_desc {inf current} { + set ws "\[ \t\]+" + global decimal + upvar multi_process multi_process + + if {($multi_process == "off") && ($inf == 2 || $inf == 5)} { + set desc "Remote target" + } else { + set desc "process ${decimal}" + } + + set desc "${inf}${ws}${desc}${ws}" + if {$inf == $current} { + return "\\* $desc" + } else { + return " $desc" + } + } + + # Get the "Num" column for CONNECTION for when the current + # inferior id is CURRENT_INF. + proc connection_num {connection current_inf} { + switch $current_inf { + "4" { set current_connection "1"} + "5" { set current_connection "4"} + "6" { set current_connection "5"} + default { set current_connection $current_inf} + } + if {$connection == $current_connection} { + return "\\* $connection" + } else { + return " $connection" + } + } + + set ws "\[ \t\]+" + global decimal binfile + + # Test "info connections" and "info inferior" by switching to each + # inferior one by one. + for {set inf 1} {$inf <= 6} {incr inf} { + with_test_prefix "inferior $inf" { + gdb_test "inferior $inf" "Switching to inferior $inf.*" + + gdb_test "info connections" \ + [multi_line \ + "Num${ws}What${ws}Description${ws}" \ + "[connection_num 1 $inf]${ws}native${ws}Native process${ws}" \ + "[connection_num 2 $inf]${ws}extended-remote localhost:$decimal${ws}Extended remote serial target in gdb-specific protocol${ws}" \ + "[connection_num 3 $inf]${ws}core${ws}Local core dump file${ws}" \ + "[connection_num 4 $inf]${ws}extended-remote localhost:$decimal${ws}Extended remote serial target in gdb-specific protocol${ws}" \ + "[connection_num 5 $inf]${ws}core${ws}Local core dump file${ws}" \ + ] + + gdb_test "info inferiors" \ + [multi_line \ + "Num${ws}Description${ws}Connection${ws}Executable${ws}" \ + "[inf_desc 1 $inf]1 \\(native\\)${ws}${binfile}${ws}" \ + "[inf_desc 2 $inf]2 \\(extended-remote localhost:$decimal\\)${ws}${binfile}${ws}" \ + "[inf_desc 3 $inf]3 \\(core\\)${ws}${binfile}${ws}" \ + "[inf_desc 4 $inf]1 \\(native\\)${ws}${binfile}${ws}" \ + "[inf_desc 5 $inf]4 \\(extended-remote localhost:$decimal\\)${ws}${binfile}${ws}" \ + "[inf_desc 6 $inf]5 \\(core\\)${ws}${binfile}${ws}" \ + ] + } + } +} + +# Test "info inferiors" and "info connections" commands. +with_test_prefix "info-inferiors" { + foreach_with_prefix multi_process {"on" "off"} { + test_info_inferiors $multi_process + } +} + +multi_target_cleanup diff -Nru gdb-9.1/gdb/testsuite/gdb.multi/multi-target-interrupt.exp gdb-10.2/gdb/testsuite/gdb.multi/multi-target-interrupt.exp --- gdb-9.1/gdb/testsuite/gdb.multi/multi-target-interrupt.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.multi/multi-target-interrupt.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,79 @@ +# Copyright 2017-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Test interrupting multiple targets with Ctrl-C. + +source $srcdir/$subdir/multi-target.exp.tcl + +if {![multi_target_prepare]} { + return +} + +proc test_ctrlc {} { + if {![setup "off"]} { + untested "setup failed" + return + } + + delete_breakpoints + + # Select inferior INF, continue all inferiors, and then Ctrl-C. + proc test_ctrlc_inf {inf} { + global gdb_prompt + + gdb_test "inferior $inf" "Switching to inferior $inf.*" + + set msg "continue" + gdb_test_multiple "continue" $msg { + -re "Continuing" { + pass $msg + } + } + + after 200 { send_gdb "\003" } + + set msg "send_gdb control C" + gdb_test_multiple "" $msg { + -re "received signal SIGINT.*$gdb_prompt $" { + pass $msg + } + } + + set msg "all threads stopped" + gdb_test_multiple "info threads" "$msg" { + -re "\\\(running\\\).*$gdb_prompt $" { + fail $msg + } + -re "$gdb_prompt $" { + pass $msg + } + } + } + + for {set i 1} {$i <= 5} {incr i} { + if {$i == 3} { + # This is a core inferior. + continue + } + + with_test_prefix "inf$i" { + test_ctrlc_inf $i + } + } +} + +test_ctrlc + +multi_target_cleanup diff -Nru gdb-9.1/gdb/testsuite/gdb.multi/multi-target-no-resumed.exp gdb-10.2/gdb/testsuite/gdb.multi/multi-target-no-resumed.exp --- gdb-9.1/gdb/testsuite/gdb.multi/multi-target-no-resumed.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.multi/multi-target-no-resumed.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,90 @@ +# Copyright 2017-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Test that when there's a foreground execution command in progress, a +# TARGET_WAITKIND_NO_RESUMED for a particular target is ignored when +# other targets are still resumed. + +source $srcdir/$subdir/multi-target.exp.tcl + +if {![multi_target_prepare]} { + return +} + +proc test_no_resumed_infs {inf_A inf_B} { + global gdb_prompt + + if {![setup "off"]} { + untested "setup failed" + return + } + + gdb_test "thread $inf_A.2" "Switching to thread $inf_A\.2 .*" \ + "select thread of target A" + + gdb_test_no_output "set scheduler-locking on" + + gdb_test_multiple "continue &" "" { + -re "Continuing.*$gdb_prompt " { + pass $gdb_test_name + } + } + + gdb_test "thread $inf_B.2" "Switching to thread $inf_B\.2 .*" \ + "select thread of target B" + gdb_test "p exit_thread = 1" " = 1" \ + "set the thread to exit on resumption" + + # Wait 3 seconds. If we see any response from GDB, such as + # "No unwaited-for children left." it's a bug. + gdb_test_multiple "continue" "continue" { + -timeout 3 + timeout { + pass $gdb_test_name + } + } + + # Now stop the program (all targets). + send_gdb "\003" + gdb_test_multiple "" "send_gdb control C" { + -re "received signal SIGINT.*$gdb_prompt $" { + pass $gdb_test_name + } + } + + gdb_test_multiple "info threads" "all threads stopped" { + -re "\\\(running\\\).*$gdb_prompt $" { + fail $gdb_test_name + } + -re "$gdb_prompt $" { + pass $gdb_test_name + } + } +} + +# inferior 1 -> native +# inferior 2 -> extended-remote 1 +# inferior 5 -> extended-remote 2 +set inferiors {1 2 5} +foreach_with_prefix inf_A $inferiors { + foreach_with_prefix inf_B $inferiors { + if {$inf_A == $inf_B} { + continue + } + test_no_resumed_infs $inf_A $inf_B + } +} + +multi_target_cleanup diff -Nru gdb-9.1/gdb/testsuite/gdb.multi/multi-target-ping-pong-next.exp gdb-10.2/gdb/testsuite/gdb.multi/multi-target-ping-pong-next.exp --- gdb-9.1/gdb/testsuite/gdb.multi/multi-target-ping-pong-next.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.multi/multi-target-ping-pong-next.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,85 @@ +# Copyright 2017-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Test "next" bouncing between two breakpoints in two threads running +# in different targets. + +source $srcdir/$subdir/multi-target.exp.tcl + +if {![multi_target_prepare]} { + return +} + +proc test_ping_pong_next {} { + global srcfile + + if {![setup "off"]} { + untested "setup failed" + return + } + + # Block/unblock inferiors 1 and 2 according to INF1 and INF2. + proc block {inf1 inf2} { + gdb_test "thread apply 1.1 p wait_for_gdb = $inf1" " = $inf1" + gdb_test "thread apply 2.1 p wait_for_gdb = $inf2" " = $inf2" + } + + # We'll use inferiors 1 and 2. Make sure they're really connected + # to different targets. + gdb_test "thread apply 1.1 maint print target-stack" \ + "- native.*" + gdb_test "thread apply 2.1 maint print target-stack" \ + "- extended-remote.*" + + # Set two breakpoints, one for each of inferior 1 and 2. Inferior + # 1 is running on the native target, and inferior 2 is running on + # extended-gdbserver. Run to breakpoint 1 to gets things started. + set line1 [gdb_get_line_number "set break 1 here"] + set line2 [gdb_get_line_number "set break 2 here"] + + gdb_test "thread 1.1" "Switching to thread 1.1 .*" + + gdb_test "break $srcfile:$line1 thread 1.1" \ + "Breakpoint .*$srcfile:$line1\\..*" + + gdb_test "continue" "hit Breakpoint .*" + + gdb_test "break $srcfile:$line2 thread 2.1" \ + "Breakpoint .*$srcfile:$line2\\..*" + + # Now block inferior 1 and issue "next". We should stop at the + # breakpoint for inferior 2, given schedlock off. + with_test_prefix "next inf 1" { + block 1 0 + gdb_test "next" "Thread 2.1 .*hit Breakpoint .*$srcfile:$line2.*" + } + + # Now unblock inferior 2 and block inferior 1. "next" should run + # into the breakpoint in inferior 1. + with_test_prefix "next inf 2" { + block 0 1 + gdb_test "next" "Thread 1.1 .*hit Breakpoint .*$srcfile:$line1.*" + } + + # Try nexting inferior 1 again. + with_test_prefix "next inf 1 again" { + block 1 0 + gdb_test "next" "Thread 2.1 .*hit Breakpoint .*$srcfile:$line2.*" + } +} + +test_ping_pong_next + +multi_target_cleanup diff -Nru gdb-9.1/gdb/testsuite/gdb.multi/multi-target-thread-find.exp gdb-10.2/gdb/testsuite/gdb.multi/multi-target-thread-find.exp --- gdb-9.1/gdb/testsuite/gdb.multi/multi-target-thread-find.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.multi/multi-target-thread-find.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,106 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Test "thread find" with multiple inferiors/targets. Regression test +# for PR gdb/26631. + +source $srcdir/$subdir/multi-target.exp.tcl + +if {![multi_target_prepare]} { + return +} + +proc test_thread_find {} { + global decimal gdb_prompt + + set NUM_INFS 6 + + if {![setup "off"]} { + untested "setup failed" + return + } + + # This makes sure we don't crash. See PR gdb/26631. + gdb_test "thread find xxxyyyzzz" \ + "No threads match 'xxxyyyzzz'" + + # Create thread names. + for {set i 1} {$i <= $NUM_INFS} {incr i} { + gdb_test "thread apply $i.1 thread name threadname_$i" \ + "Thread $i.1 .*" \ + "name thread $i" + } + + # Collect target ids. + + for {set i 1} {$i <= $NUM_INFS} {incr i} { + set target_id($i) "" + } + set any "\[^\r\n\]*" + gdb_test_multiple "info threads" "collect thread id" { + -re ". ($decimal).$decimal (Thread ${any}) \"threadname_\[0-9\]+\" $any" { + set thr_num $expect_out(1,string) + set target_id($thr_num) $expect_out(2,string) + exp_continue + } + -re ".*$gdb_prompt $" { + pass "collect target id" + } + } + + # Find the threads by name. Note we repeat the search with each + # inferior selected, so that we're sure that GDB doesn't get + # confused with which target stack to consult. + + with_test_prefix "find by name" { + for {set sel_inf 1} {$sel_inf <= $NUM_INFS} {incr sel_inf} { + with_test_prefix "inf $sel_inf" { + + gdb_test "inferior $sel_inf" \ + "Switching to inferior $sel_inf .*" + + for {set find_inf 1} {$find_inf <= $NUM_INFS} {incr find_inf} { + gdb_test "thread find threadname_$find_inf" \ + "Thread $find_inf.1 has name 'threadname_$find_inf'" \ + "find thread name $find_inf" + } + } + } + } + + # Find the threads by target id. Likewise we repeat the search + # with each inferior selected. + + with_test_prefix "find by target id" { + for {set sel_inf 1} {$sel_inf <= $NUM_INFS} {incr sel_inf} { + with_test_prefix "inf $sel_inf" { + + gdb_test "inferior $sel_inf" \ + "Switching to inferior $sel_inf .*" + + for {set find_inf 1} {$find_inf <= $NUM_INFS} {incr find_inf} { + set target_id_re [string_to_regexp $target_id($find_inf)] + gdb_test "thread find $target_id($find_inf)" \ + "Thread $find_inf.1 has target id '$target_id_re'.*" \ + "find thread target id $find_inf" + } + } + } + } +} + +test_thread_find + +multi_target_cleanup diff -Nru gdb-9.1/gdb/testsuite/gdb.multi/multi-term-settings.c gdb-10.2/gdb/testsuite/gdb.multi/multi-term-settings.c --- gdb-9.1/gdb/testsuite/gdb.multi/multi-term-settings.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.multi/multi-term-settings.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2017-2020 Free Software Foundation, Inc. + Copyright 2017-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.multi/multi-term-settings.exp gdb-10.2/gdb/testsuite/gdb.multi/multi-term-settings.exp --- gdb-9.1/gdb/testsuite/gdb.multi/multi-term-settings.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.multi/multi-term-settings.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2017-2020 Free Software Foundation, Inc. +# Copyright 2017-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -125,7 +125,9 @@ clean_restart $binfile - set inf1_spawn_id [create_inferior 1 $inf1_how] + with_test_prefix "inf1" { + set inf1_spawn_id [create_inferior 1 $inf1_how] + } set num 2 gdb_test "add-inferior" "Added inferior $num.*" \ @@ -134,7 +136,9 @@ "switch to inferior $num" gdb_file_cmd ${binfile} - set inf2_spawn_id [create_inferior 2 $inf2_how] + with_test_prefix "inf2" { + set inf2_spawn_id [create_inferior 2 $inf2_how] + } gdb_test_no_output "set schedule-multiple on" @@ -218,8 +222,10 @@ } # Useful for debugging in case the Ctrl-C above fails. - gdb_test "info inferiors" - gdb_test "info threads" + with_test_prefix "final" { + gdb_test "info inferiors" + gdb_test "info threads" + } } set how_modes {"run" "attach" "tty"} diff -Nru gdb-9.1/gdb/testsuite/gdb.multi/remove-inferiors.c gdb-10.2/gdb/testsuite/gdb.multi/remove-inferiors.c --- gdb-9.1/gdb/testsuite/gdb.multi/remove-inferiors.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.multi/remove-inferiors.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2016-2020 Free Software Foundation, Inc. + Copyright 2016-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.multi/remove-inferiors.exp gdb-10.2/gdb/testsuite/gdb.multi/remove-inferiors.exp --- gdb-9.1/gdb/testsuite/gdb.multi/remove-inferiors.exp 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.multi/remove-inferiors.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2016-2020 Free Software Foundation, Inc. +# Copyright 2016-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -26,7 +26,7 @@ } proc add_inferior { expected_num message } { - gdb_test "add-inferior" "Added inferior ${expected_num}" "${message}" + gdb_test "add-inferior" "Added inferior ${expected_num}( on connection .*)?" "${message}" } proc test_remove_inferiors { } { diff -Nru gdb-9.1/gdb/testsuite/gdb.multi/run-only-second-inf.c gdb-10.2/gdb/testsuite/gdb.multi/run-only-second-inf.c --- gdb-9.1/gdb/testsuite/gdb.multi/run-only-second-inf.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.multi/run-only-second-inf.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,22 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +int +main () +{ + return 0; +} diff -Nru gdb-9.1/gdb/testsuite/gdb.multi/run-only-second-inf.exp gdb-10.2/gdb/testsuite/gdb.multi/run-only-second-inf.exp --- gdb-9.1/gdb/testsuite/gdb.multi/run-only-second-inf.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.multi/run-only-second-inf.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,50 @@ +# This testcase is part of GDB, the GNU debugger. + +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Create two inferiors that are not running. Then run only the second +# one. Expect it to start normally. + +standard_testfile + +if {[use_gdb_stub]} { + return 0 +} + +if {[prepare_for_testing "failed to prepare" $testfile $srcfile {debug}]} { + return -1 +} + +# Setting the target to non-stop mode revealed a bug where the context +# was not being switched before making ptid-dependent memory access. +# So, start GDB with this setting. +save_vars { GDBFLAGS } { + append GDBFLAGS " -ex \"maint set target-non-stop on\"" + clean_restart ${binfile} +} + +# Add and start the second inferior. +gdb_test "add-inferior" "Added inferior 2.*" \ + "add empty inferior 2" +gdb_test "inferior 2" "Switching to inferior 2.*" \ + "switch to inferior 2" +gdb_load $binfile + +if {[gdb_start_cmd] < 0} { + fail "start the second inf" +} else { + gdb_test "" ".*reakpoint ., main .*${srcfile}.*" "start the second inf" +} diff -Nru gdb-9.1/gdb/testsuite/gdb.multi/stop-all-on-exit.c gdb-10.2/gdb/testsuite/gdb.multi/stop-all-on-exit.c --- gdb-9.1/gdb/testsuite/gdb.multi/stop-all-on-exit.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.multi/stop-all-on-exit.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,27 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include <unistd.h> + +static unsigned int duration = 1; + +int +main () +{ + sleep (duration); + return 0; +} diff -Nru gdb-9.1/gdb/testsuite/gdb.multi/stop-all-on-exit.exp gdb-10.2/gdb/testsuite/gdb.multi/stop-all-on-exit.exp --- gdb-9.1/gdb/testsuite/gdb.multi/stop-all-on-exit.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.multi/stop-all-on-exit.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,64 @@ +# This testcase is part of GDB, the GNU debugger. + +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Test that in all-stop mode with multiple inferiors, GDB stops all +# threads upon receiving an exit event from one of the inferiors. + +standard_testfile + +if {[prepare_for_testing "failed to prepare" $testfile $srcfile]} { + return -1 +} + +if {![runto_main]} { + fail "starting inferior 1" + return -1 +} + +# This is a test specific for a native target, where we use the +# "-exec" argument to "add-inferior" and we explicitly don't do +# "maint set target-non-stop on". +if {![gdb_is_target_native]} { + untested "the test is aimed at a native target" + return 0 +} + +# Add a second inferior that will sleep longer. +gdb_test "add-inferior -exec $binfile" "Added inferior 2.*" \ + "add the second inferior" +gdb_test "inferior 2" ".*Switching to inferior 2.*" +if {![runto_main]} { + fail "starting inferior 2" + return -1 +} +gdb_test "print duration=10" "= 10" + +# Now continue both processes. We should get the exit event from the +# first inferior. +gdb_test_no_output "set schedule-multiple on" +gdb_continue_to_end + +# GDB is expected to have stopped the other inferior. Switch to the +# slow inferior's thread. It should not be running. +gdb_test_multiple "thread 2.1" "check thread 2.1 is not running" { + -re "\\(running\\)\[\r\n\]+$gdb_prompt" { + fail $gdb_test_name + } + -re "$gdb_prompt" { + pass $gdb_test_name + } +} diff -Nru gdb-9.1/gdb/testsuite/gdb.multi/tids.c gdb-10.2/gdb/testsuite/gdb.multi/tids.c --- gdb-9.1/gdb/testsuite/gdb.multi/tids.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.multi/tids.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.multi/tids.exp gdb-10.2/gdb/testsuite/gdb.multi/tids.exp --- gdb-9.1/gdb/testsuite/gdb.multi/tids.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.multi/tids.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.multi/tids-gid-reset.c gdb-10.2/gdb/testsuite/gdb.multi/tids-gid-reset.c --- gdb-9.1/gdb/testsuite/gdb.multi/tids-gid-reset.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.multi/tids-gid-reset.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,22 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2019-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +int +main (void) +{ + return 0; +} diff -Nru gdb-9.1/gdb/testsuite/gdb.multi/tids-gid-reset.exp gdb-10.2/gdb/testsuite/gdb.multi/tids-gid-reset.exp --- gdb-9.1/gdb/testsuite/gdb.multi/tids-gid-reset.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.multi/tids-gid-reset.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,96 @@ +# Copyright 2015-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Check that letting the inferior exit and restarting it again resets +# the global TID counter, and thus the new thread 1.1 should end up +# with global TID == 1. +# +# Also, check the same but with another inferior still running, in +# which case the new thread 1.1 should end up with global TID == 3. + +standard_testfile + +if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile} {pthreads debug}] } { + return -1 +} + +with_test_prefix "single-inferior" { + with_test_prefix "before restart" { + clean_restart ${testfile} + + if { ![runto_main] } then { + return -1 + } + + gdb_test "info threads -gid" "\\* 1 +1 +.*" + } + + with_test_prefix "restart" { + gdb_continue_to_end + if { ![runto_main] } then { + return -1 + } + } + + with_test_prefix "after restart" { + gdb_test "info threads -gid" "\\* 1 +1 +.*" + } +} + +# For the following tests, multiple inferiors are needed, therefore +# non-extended gdbserver is not supported. +if [use_gdb_stub] { + untested "using gdb stub" + return +} + +# Test with multiple inferiors. This time, since we restart inferior +# 1 while inferior 2 still has threads, then the new thread 1.1 should +# end up with GID == 3, since we won't be able to reset the global +# thread ID counter. +with_test_prefix "multi-inferior" { + gdb_test "add-inferior" "Added inferior 2.*" "add empty inferior 2" + gdb_test "inferior 2" "Switching to inferior 2 .*" "switch to inferior 2" + gdb_load ${binfile} + + if ![runto_main] then { + fail "starting inferior 2" + return + } + + gdb_test "inferior 1" "Switching to inferior 1 .*" \ + "switch back to inferior 1" + + with_test_prefix "before restart" { + gdb_test "info threads -gid" \ + [multi_line \ + "\\* 1\.1 +1 +.*" \ + " 2\.1 +2 +.*"] + } + + with_test_prefix "restart" { + gdb_continue_to_end + if { ![runto_main] } then { + return -1 + } + } + + with_test_prefix "after restart" { + gdb_test "info threads -gid" \ + [multi_line \ + "\\* 1\.1 +3 +.*" \ + " 2\.1 +2 +.*"] + } +} diff -Nru gdb-9.1/gdb/testsuite/gdb.multi/watchpoint-multi.c gdb-10.2/gdb/testsuite/gdb.multi/watchpoint-multi.c --- gdb-9.1/gdb/testsuite/gdb.multi/watchpoint-multi.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.multi/watchpoint-multi.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.multi/watchpoint-multi-exit.c gdb-10.2/gdb/testsuite/gdb.multi/watchpoint-multi-exit.c --- gdb-9.1/gdb/testsuite/gdb.multi/watchpoint-multi-exit.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.multi/watchpoint-multi-exit.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2016-2020 Free Software Foundation, Inc. + Copyright 2016-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.multi/watchpoint-multi-exit.exp gdb-10.2/gdb/testsuite/gdb.multi/watchpoint-multi-exit.exp --- gdb-9.1/gdb/testsuite/gdb.multi/watchpoint-multi-exit.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.multi/watchpoint-multi-exit.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2016-2020 Free Software Foundation, Inc. +# Copyright 2016-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.multi/watchpoint-multi.exp gdb-10.2/gdb/testsuite/gdb.multi/watchpoint-multi.exp --- gdb-9.1/gdb/testsuite/gdb.multi/watchpoint-multi.exp 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.multi/watchpoint-multi.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -53,7 +53,7 @@ gdb_breakpoint main {temporary} gdb_test "run" "Temporary breakpoint.* main .*" "start to main inferior 1" -gdb_test "add-inferior" "Added inferior 2" "add inferior 2" +gdb_test "add-inferior" "Added inferior 2 on connection .*" "add inferior 2" gdb_test "inferior 2" "witching to inferior 2 .*" "switch to inferior 2, first time" gdb_load $binfile diff -Nru gdb-9.1/gdb/testsuite/gdb.objc/basicclass.exp gdb-10.2/gdb/testsuite/gdb.objc/basicclass.exp --- gdb-9.1/gdb/testsuite/gdb.objc/basicclass.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.objc/basicclass.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2003-2020 Free Software Foundation, Inc. +# Copyright 2003-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.objc/nondebug.exp gdb-10.2/gdb/testsuite/gdb.objc/nondebug.exp --- gdb-9.1/gdb/testsuite/gdb.objc/nondebug.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.objc/nondebug.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2003-2020 Free Software Foundation, Inc. +# Copyright 2003-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.objc/objcdecode.exp gdb-10.2/gdb/testsuite/gdb.objc/objcdecode.exp --- gdb-9.1/gdb/testsuite/gdb.objc/objcdecode.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.objc/objcdecode.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2003-2020 Free Software Foundation, Inc. +# Copyright 2003-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.objc/print.exp gdb-10.2/gdb/testsuite/gdb.objc/print.exp --- gdb-9.1/gdb/testsuite/gdb.objc/print.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.objc/print.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.opencl/callfuncs.cl gdb-10.2/gdb/testsuite/gdb.opencl/callfuncs.cl --- gdb-9.1/gdb/testsuite/gdb.opencl/callfuncs.cl 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.opencl/callfuncs.cl 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.opencl/callfuncs.exp gdb-10.2/gdb/testsuite/gdb.opencl/callfuncs.exp --- gdb-9.1/gdb/testsuite/gdb.opencl/callfuncs.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.opencl/callfuncs.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -20,6 +20,7 @@ load_lib opencl.exp if { [skip_opencl_tests] } { + unsupported "OpenCL support not detected" return 0 } diff -Nru gdb-9.1/gdb/testsuite/gdb.opencl/convs_casts.cl gdb-10.2/gdb/testsuite/gdb.opencl/convs_casts.cl --- gdb-9.1/gdb/testsuite/gdb.opencl/convs_casts.cl 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.opencl/convs_casts.cl 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.opencl/convs_casts.exp gdb-10.2/gdb/testsuite/gdb.opencl/convs_casts.exp --- gdb-9.1/gdb/testsuite/gdb.opencl/convs_casts.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.opencl/convs_casts.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -20,6 +20,7 @@ load_lib opencl.exp if { [skip_opencl_tests] } { + unsupported "OpenCL support not detected" return 0 } diff -Nru gdb-9.1/gdb/testsuite/gdb.opencl/datatypes.cl gdb-10.2/gdb/testsuite/gdb.opencl/datatypes.cl --- gdb-9.1/gdb/testsuite/gdb.opencl/datatypes.cl 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.opencl/datatypes.cl 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.opencl/datatypes.exp gdb-10.2/gdb/testsuite/gdb.opencl/datatypes.exp --- gdb-9.1/gdb/testsuite/gdb.opencl/datatypes.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.opencl/datatypes.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -20,6 +20,7 @@ load_lib opencl.exp if { [skip_opencl_tests] } { + unsupported "OpenCL support not detected" return 0 } diff -Nru gdb-9.1/gdb/testsuite/gdb.opencl/operators.cl gdb-10.2/gdb/testsuite/gdb.opencl/operators.cl --- gdb-9.1/gdb/testsuite/gdb.opencl/operators.cl 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.opencl/operators.cl 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.opencl/operators.exp gdb-10.2/gdb/testsuite/gdb.opencl/operators.exp --- gdb-9.1/gdb/testsuite/gdb.opencl/operators.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.opencl/operators.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -20,6 +20,7 @@ load_lib opencl.exp if { [skip_opencl_tests] } { + unsupported "OpenCL support not detected" return 0 } diff -Nru gdb-9.1/gdb/testsuite/gdb.opencl/vec_comps.cl gdb-10.2/gdb/testsuite/gdb.opencl/vec_comps.cl --- gdb-9.1/gdb/testsuite/gdb.opencl/vec_comps.cl 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.opencl/vec_comps.cl 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.opencl/vec_comps.exp gdb-10.2/gdb/testsuite/gdb.opencl/vec_comps.exp --- gdb-9.1/gdb/testsuite/gdb.opencl/vec_comps.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.opencl/vec_comps.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -20,6 +20,7 @@ load_lib opencl.exp if { [skip_opencl_tests] } { + unsupported "OpenCL support not detected" return 0 } diff -Nru gdb-9.1/gdb/testsuite/gdb.opt/clobbered-registers-O2.c gdb-10.2/gdb/testsuite/gdb.opt/clobbered-registers-O2.c --- gdb-9.1/gdb/testsuite/gdb.opt/clobbered-registers-O2.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.opt/clobbered-registers-O2.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This file is part of GDB, the GNU debugger. - Copyright 2007-2020 Free Software Foundation, Inc. + Copyright 2007-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.opt/clobbered-registers-O2.exp gdb-10.2/gdb/testsuite/gdb.opt/clobbered-registers-O2.exp --- gdb-9.1/gdb/testsuite/gdb.opt/clobbered-registers-O2.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.opt/clobbered-registers-O2.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2007-2020 Free Software Foundation, Inc. +# Copyright 2007-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.opt/inline-break.c gdb-10.2/gdb/testsuite/gdb.opt/inline-break.c --- gdb-9.1/gdb/testsuite/gdb.opt/inline-break.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.opt/inline-break.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright (C) 2012-2020 Free Software Foundation, Inc. + Copyright (C) 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.opt/inline-break.exp gdb-10.2/gdb/testsuite/gdb.opt/inline-break.exp --- gdb-9.1/gdb/testsuite/gdb.opt/inline-break.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.opt/inline-break.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.opt/inline-bt.c gdb-10.2/gdb/testsuite/gdb.opt/inline-bt.c --- gdb-9.1/gdb/testsuite/gdb.opt/inline-bt.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.opt/inline-bt.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2008-2020 Free Software Foundation, Inc. +/* Copyright (C) 2008-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.opt/inline-bt.exp gdb-10.2/gdb/testsuite/gdb.opt/inline-bt.exp --- gdb-9.1/gdb/testsuite/gdb.opt/inline-bt.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.opt/inline-bt.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.opt/inline-cmds.c gdb-10.2/gdb/testsuite/gdb.opt/inline-cmds.c --- gdb-9.1/gdb/testsuite/gdb.opt/inline-cmds.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.opt/inline-cmds.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2008-2020 Free Software Foundation, Inc. +/* Copyright (C) 2008-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.opt/inline-cmds.exp gdb-10.2/gdb/testsuite/gdb.opt/inline-cmds.exp --- gdb-9.1/gdb/testsuite/gdb.opt/inline-cmds.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.opt/inline-cmds.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -235,7 +235,7 @@ # containing block and/or function into account when # deciding how far to step. The single line table entry # is actually two consecutive instances of the same line. - kfail gdb/NNNN $msg + kfail gdb/25884 $msg } } diff -Nru gdb-9.1/gdb/testsuite/gdb.opt/inline-locals.c gdb-10.2/gdb/testsuite/gdb.opt/inline-locals.c --- gdb-9.1/gdb/testsuite/gdb.opt/inline-locals.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.opt/inline-locals.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2008-2020 Free Software Foundation, Inc. +/* Copyright (C) 2008-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -29,9 +29,18 @@ void bar(void); +void +init_array (int *array, int n) +{ + int i; + for (i = 0; i < n; ++i) + array[i] = 0; +} + inline ATTR int func1(int arg1) { int array[64]; + init_array (array, 64); array_p = array; array[0] = result; array[1] = arg1; diff -Nru gdb-9.1/gdb/testsuite/gdb.opt/inline-locals.exp gdb-10.2/gdb/testsuite/gdb.opt/inline-locals.exp --- gdb-9.1/gdb/testsuite/gdb.opt/inline-locals.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.opt/inline-locals.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -43,8 +43,17 @@ "backtrace from bar 2" gdb_test "up" "#1 .*func1 .* at .*" "up from bar 2" gdb_test "info frame" ".*inlined into frame.*" "func1 inlined 2" - setup_kfail "gdb/xyz" *-*-* - gdb_test "info locals" "array = {.*}" "info locals above bar 2" + set pass_re "array = \\{0 <repeats 64 times>\\}" + set kfail_re [multi_line $pass_re \ + "array = {<optimized out> <repeats 64 times>}"] + gdb_test_multiple "info locals" "info locals above bar 2" { + -re -wrap $pass_re { + pass $gdb_test_name + } + -re -wrap $kfail_re { + kfail gdb/25695 $gdb_test_name + } + } set msg "info args above bar 2" gdb_test_multiple "info args" $msg { @@ -83,8 +92,17 @@ "backtrace from bar 3" gdb_test "up" "#1 .*func1 .* at .*" "up from bar 3" gdb_test "info frame" ".*inlined into frame.*" "func1 inlined 3" - setup_kfail "gdb/xyz" *-*-* - gdb_test "info locals" "array = {.*}" "info locals above bar 3" + set pass_re "array = {$decimal, \[^\r\n\]*}" + set kfail_re [multi_line $pass_re \ + "array = {<optimized out> <repeats 64 times>}"] + gdb_test_multiple "info locals" "info locals above bar 3" { + -re -wrap $pass_re { + pass $gdb_test_name + } + -re -wrap $kfail_re { + kfail gdb/25695 $gdb_test_name + } + } set msg "info args above bar 3" gdb_test_multiple "info args" $msg { diff -Nru gdb-9.1/gdb/testsuite/gdb.opt/inline-markers.c gdb-10.2/gdb/testsuite/gdb.opt/inline-markers.c --- gdb-9.1/gdb/testsuite/gdb.opt/inline-markers.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.opt/inline-markers.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2008-2020 Free Software Foundation, Inc. +/* Copyright (C) 2008-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.opt/inline-small-func.c gdb-10.2/gdb/testsuite/gdb.opt/inline-small-func.c --- gdb-9.1/gdb/testsuite/gdb.opt/inline-small-func.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.opt/inline-small-func.c 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,22 @@ +/* Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "inline-small-func.h" + +int +main () +{ /* caller: before call. */ + callee (); /* caller: the call. */ +} /* caller: after call. */ diff -Nru gdb-9.1/gdb/testsuite/gdb.opt/inline-small-func.exp gdb-10.2/gdb/testsuite/gdb.opt/inline-small-func.exp --- gdb-9.1/gdb/testsuite/gdb.opt/inline-small-func.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.opt/inline-small-func.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,60 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Check for an issue in GDB where buildsym_compunit::record_line was +# removing duplicate line table entries, but skip_prologue_using_sal +# depends on these duplicates to spot the end of the prologue. +# +# When the de-duplication was added this regression was not spotted as +# it requires a particular combination of a (very) small function +# being inlined into an also very small outer function. +# +# See also gdb.dwarf/dw2-inline-small-func.exp for a version of this +# test that makes use of the Dejagnu DWARF compiler. +# +# This test simply compiles with optimization and checks that GDB can +# do something suitable with the compiled binary. Problems with this +# test are most likely to occur when GDB asks the target specific code +# to skip the prologue (gdbarch_skip_prologue). Some targets make use +# of skip_prologue_using_sal, which should be fine, however, some +# targets make a poor attempt to duplicate parts of +# skip_prologue_using_sal, these targets could easily fail this test. +# This is not (necessarily) a problem with this test, but could +# indicate a weakness with the target in question. + +standard_testfile inline-small-func.c inline-small-func.h + +if { [prepare_for_testing "failed to prepare" ${testfile} \ + [list $srcfile] {debug optimize=-O1}] } { + return -1 +} + +if ![runto_main] { + return -1 +} + +# Delete all breakpoints so that the output of "info breakpoints" +# below will only contain a single breakpoint. +delete_breakpoints + +# Place a breakpoint within the function in the header file. +set linenum [gdb_get_line_number "callee: body" $srcfile2] +gdb_breakpoint "${srcfile2}:${linenum}" + +# Check that the breakpoint was placed where we expected. It should +# appear at the requested line. When the bug in GDB was present the +# breakpoint would be placed on one of the following lines instead. +gdb_test "info breakpoints" \ + ".* in callee at \[^\r\n\]+${srcfile2}:${linenum}\\y.*" diff -Nru gdb-9.1/gdb/testsuite/gdb.opt/inline-small-func.h gdb-10.2/gdb/testsuite/gdb.opt/inline-small-func.h --- gdb-9.1/gdb/testsuite/gdb.opt/inline-small-func.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.opt/inline-small-func.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,21 @@ +/* Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +int counter = 42; + +inline void +callee () { + counter = 0; /* callee: body. */ +} diff -Nru gdb-9.1/gdb/testsuite/gdb.opt/solib-intra-step.exp gdb-10.2/gdb/testsuite/gdb.opt/solib-intra-step.exp --- gdb-9.1/gdb/testsuite/gdb.opt/solib-intra-step.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.opt/solib-intra-step.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.opt/solib-intra-step-lib.c gdb-10.2/gdb/testsuite/gdb.opt/solib-intra-step-lib.c --- gdb-9.1/gdb/testsuite/gdb.opt/solib-intra-step-lib.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.opt/solib-intra-step-lib.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.opt/solib-intra-step-main.c gdb-10.2/gdb/testsuite/gdb.opt/solib-intra-step-main.c --- gdb-9.1/gdb/testsuite/gdb.opt/solib-intra-step-main.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.opt/solib-intra-step-main.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.pascal/case-insensitive-symbols.exp gdb-10.2/gdb/testsuite/gdb.pascal/case-insensitive-symbols.exp --- gdb-9.1/gdb/testsuite/gdb.pascal/case-insensitive-symbols.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.pascal/case-insensitive-symbols.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.pascal/case-insensitive-symbols.pas gdb-10.2/gdb/testsuite/gdb.pascal/case-insensitive-symbols.pas --- gdb-9.1/gdb/testsuite/gdb.pascal/case-insensitive-symbols.pas 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.pascal/case-insensitive-symbols.pas 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ { - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.pascal/floats.exp gdb-10.2/gdb/testsuite/gdb.pascal/floats.exp --- gdb-9.1/gdb/testsuite/gdb.pascal/floats.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.pascal/floats.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2007-2020 Free Software Foundation, Inc. +# Copyright 2007-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.pascal/floats.pas gdb-10.2/gdb/testsuite/gdb.pascal/floats.pas --- gdb-9.1/gdb/testsuite/gdb.pascal/floats.pas 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.pascal/floats.pas 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ { - Copyright 2008-2020 Free Software Foundation, Inc. + Copyright 2008-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.pascal/gdb11492.exp gdb-10.2/gdb/testsuite/gdb.pascal/gdb11492.exp --- gdb-9.1/gdb/testsuite/gdb.pascal/gdb11492.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.pascal/gdb11492.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -46,7 +46,11 @@ gdb_test "print /x char_array" { = \{0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39\}} # Use next two times to avoid GPC line numbering problem gdb_test "next" "" -gdb_test "next" "" -gdb_test "print char_array" " = '2345X789'" +with_test_prefix "second" { + gdb_test "next" "" +} +with_test_prefix "after assignment" { + gdb_test "print char_array" " = '2345X789'" +} gdb_exit diff -Nru gdb-9.1/gdb/testsuite/gdb.pascal/gdb11492.pas gdb-10.2/gdb/testsuite/gdb.pascal/gdb11492.pas --- gdb-9.1/gdb/testsuite/gdb.pascal/gdb11492.pas 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.pascal/gdb11492.pas 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ { - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.pascal/hello.exp gdb-10.2/gdb/testsuite/gdb.pascal/hello.exp --- gdb-9.1/gdb/testsuite/gdb.pascal/hello.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.pascal/hello.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2007-2020 Free Software Foundation, Inc. +# Copyright 2007-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.pascal/integers.exp gdb-10.2/gdb/testsuite/gdb.pascal/integers.exp --- gdb-9.1/gdb/testsuite/gdb.pascal/integers.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.pascal/integers.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.pascal/integers.pas gdb-10.2/gdb/testsuite/gdb.pascal/integers.pas --- gdb-9.1/gdb/testsuite/gdb.pascal/integers.pas 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.pascal/integers.pas 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ { - Copyright 2008-2020 Free Software Foundation, Inc. + Copyright 2008-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.pascal/print.exp gdb-10.2/gdb/testsuite/gdb.pascal/print.exp --- gdb-9.1/gdb/testsuite/gdb.pascal/print.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.pascal/print.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.pascal/stub-method.exp gdb-10.2/gdb/testsuite/gdb.pascal/stub-method.exp --- gdb-9.1/gdb/testsuite/gdb.pascal/stub-method.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.pascal/stub-method.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2007-2020 Free Software Foundation, Inc. +# Copyright 2007-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.pascal/stub-method.pas gdb-10.2/gdb/testsuite/gdb.pascal/stub-method.pas --- gdb-9.1/gdb/testsuite/gdb.pascal/stub-method.pas 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.pascal/stub-method.pas 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ { - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.pascal/types.exp gdb-10.2/gdb/testsuite/gdb.pascal/types.exp --- gdb-9.1/gdb/testsuite/gdb.pascal/types.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.pascal/types.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1994-2020 Free Software Foundation, Inc. +# Copyright 1994-2021 Free Software Foundation, Inc. # Copyright 2007 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify diff -Nru gdb-9.1/gdb/testsuite/gdb.perf/backtrace.c gdb-10.2/gdb/testsuite/gdb.perf/backtrace.c --- gdb-9.1/gdb/testsuite/gdb.perf/backtrace.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.perf/backtrace.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright (C) 2013-2020 Free Software Foundation, Inc. + Copyright (C) 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.perf/backtrace.exp gdb-10.2/gdb/testsuite/gdb.perf/backtrace.exp --- gdb-9.1/gdb/testsuite/gdb.perf/backtrace.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.perf/backtrace.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2013-2020 Free Software Foundation, Inc. +# Copyright (C) 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.perf/backtrace.py gdb-10.2/gdb/testsuite/gdb.perf/backtrace.py --- gdb-9.1/gdb/testsuite/gdb.perf/backtrace.py 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.perf/backtrace.py 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2013-2020 Free Software Foundation, Inc. +# Copyright (C) 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.perf/disassemble.exp gdb-10.2/gdb/testsuite/gdb.perf/disassemble.exp --- gdb-9.1/gdb/testsuite/gdb.perf/disassemble.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.perf/disassemble.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2013-2020 Free Software Foundation, Inc. +# Copyright (C) 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.perf/disassemble.py gdb-10.2/gdb/testsuite/gdb.perf/disassemble.py --- gdb-9.1/gdb/testsuite/gdb.perf/disassemble.py 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.perf/disassemble.py 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2013-2020 Free Software Foundation, Inc. +# Copyright (C) 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.perf/gm-hello.cc gdb-10.2/gdb/testsuite/gdb.perf/gm-hello.cc --- gdb-9.1/gdb/testsuite/gdb.perf/gm-hello.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.perf/gm-hello.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2015-2020 Free Software Foundation, Inc. +/* Copyright (C) 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.perf/gmonster1.cc gdb-10.2/gdb/testsuite/gdb.perf/gmonster1.cc --- gdb-9.1/gdb/testsuite/gdb.perf/gmonster1.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.perf/gmonster1.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2015-2020 Free Software Foundation, Inc. +/* Copyright (C) 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.perf/gmonster1.exp gdb-10.2/gdb/testsuite/gdb.perf/gmonster1.exp --- gdb-9.1/gdb/testsuite/gdb.perf/gmonster1.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.perf/gmonster1.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020 Free Software Foundation, Inc. +# Copyright (C) 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.perf/gmonster1-null-lookup.exp gdb-10.2/gdb/testsuite/gdb.perf/gmonster1-null-lookup.exp --- gdb-9.1/gdb/testsuite/gdb.perf/gmonster1-null-lookup.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.perf/gmonster1-null-lookup.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020 Free Software Foundation, Inc. +# Copyright (C) 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.perf/gmonster1-pervasive-typedef.exp gdb-10.2/gdb/testsuite/gdb.perf/gmonster1-pervasive-typedef.exp --- gdb-9.1/gdb/testsuite/gdb.perf/gmonster1-pervasive-typedef.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.perf/gmonster1-pervasive-typedef.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020 Free Software Foundation, Inc. +# Copyright (C) 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.perf/gmonster1-print-cerr.exp gdb-10.2/gdb/testsuite/gdb.perf/gmonster1-print-cerr.exp --- gdb-9.1/gdb/testsuite/gdb.perf/gmonster1-print-cerr.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.perf/gmonster1-print-cerr.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020 Free Software Foundation, Inc. +# Copyright (C) 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.perf/gmonster1-ptype-string.exp gdb-10.2/gdb/testsuite/gdb.perf/gmonster1-ptype-string.exp --- gdb-9.1/gdb/testsuite/gdb.perf/gmonster1-ptype-string.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.perf/gmonster1-ptype-string.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020 Free Software Foundation, Inc. +# Copyright (C) 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.perf/gmonster1-runto-main.exp gdb-10.2/gdb/testsuite/gdb.perf/gmonster1-runto-main.exp --- gdb-9.1/gdb/testsuite/gdb.perf/gmonster1-runto-main.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.perf/gmonster1-runto-main.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020 Free Software Foundation, Inc. +# Copyright (C) 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.perf/gmonster1-select-file.exp gdb-10.2/gdb/testsuite/gdb.perf/gmonster1-select-file.exp --- gdb-9.1/gdb/testsuite/gdb.perf/gmonster1-select-file.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.perf/gmonster1-select-file.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020 Free Software Foundation, Inc. +# Copyright (C) 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.perf/gmonster2.cc gdb-10.2/gdb/testsuite/gdb.perf/gmonster2.cc --- gdb-9.1/gdb/testsuite/gdb.perf/gmonster2.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.perf/gmonster2.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2015-2020 Free Software Foundation, Inc. +/* Copyright (C) 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.perf/gmonster2.exp gdb-10.2/gdb/testsuite/gdb.perf/gmonster2.exp --- gdb-9.1/gdb/testsuite/gdb.perf/gmonster2.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.perf/gmonster2.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020 Free Software Foundation, Inc. +# Copyright (C) 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.perf/gmonster2-null-lookup.exp gdb-10.2/gdb/testsuite/gdb.perf/gmonster2-null-lookup.exp --- gdb-9.1/gdb/testsuite/gdb.perf/gmonster2-null-lookup.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.perf/gmonster2-null-lookup.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020 Free Software Foundation, Inc. +# Copyright (C) 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.perf/gmonster2-pervasive-typedef.exp gdb-10.2/gdb/testsuite/gdb.perf/gmonster2-pervasive-typedef.exp --- gdb-9.1/gdb/testsuite/gdb.perf/gmonster2-pervasive-typedef.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.perf/gmonster2-pervasive-typedef.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020 Free Software Foundation, Inc. +# Copyright (C) 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.perf/gmonster2-print-cerr.exp gdb-10.2/gdb/testsuite/gdb.perf/gmonster2-print-cerr.exp --- gdb-9.1/gdb/testsuite/gdb.perf/gmonster2-print-cerr.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.perf/gmonster2-print-cerr.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020 Free Software Foundation, Inc. +# Copyright (C) 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.perf/gmonster2-ptype-string.exp gdb-10.2/gdb/testsuite/gdb.perf/gmonster2-ptype-string.exp --- gdb-9.1/gdb/testsuite/gdb.perf/gmonster2-ptype-string.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.perf/gmonster2-ptype-string.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020 Free Software Foundation, Inc. +# Copyright (C) 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.perf/gmonster2-runto-main.exp gdb-10.2/gdb/testsuite/gdb.perf/gmonster2-runto-main.exp --- gdb-9.1/gdb/testsuite/gdb.perf/gmonster2-runto-main.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.perf/gmonster2-runto-main.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020 Free Software Foundation, Inc. +# Copyright (C) 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.perf/gmonster2-select-file.exp gdb-10.2/gdb/testsuite/gdb.perf/gmonster2-select-file.exp --- gdb-9.1/gdb/testsuite/gdb.perf/gmonster2-select-file.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.perf/gmonster2-select-file.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020 Free Software Foundation, Inc. +# Copyright (C) 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.perf/gmonster-null-lookup.py gdb-10.2/gdb/testsuite/gdb.perf/gmonster-null-lookup.py --- gdb-9.1/gdb/testsuite/gdb.perf/gmonster-null-lookup.py 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.perf/gmonster-null-lookup.py 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020 Free Software Foundation, Inc. +# Copyright (C) 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.perf/gmonster-pervasive-typedef.py gdb-10.2/gdb/testsuite/gdb.perf/gmonster-pervasive-typedef.py --- gdb-9.1/gdb/testsuite/gdb.perf/gmonster-pervasive-typedef.py 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.perf/gmonster-pervasive-typedef.py 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020 Free Software Foundation, Inc. +# Copyright (C) 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.perf/gmonster-print-cerr.py gdb-10.2/gdb/testsuite/gdb.perf/gmonster-print-cerr.py --- gdb-9.1/gdb/testsuite/gdb.perf/gmonster-print-cerr.py 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.perf/gmonster-print-cerr.py 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020 Free Software Foundation, Inc. +# Copyright (C) 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.perf/gmonster-ptype-string.py gdb-10.2/gdb/testsuite/gdb.perf/gmonster-ptype-string.py --- gdb-9.1/gdb/testsuite/gdb.perf/gmonster-ptype-string.py 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.perf/gmonster-ptype-string.py 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020 Free Software Foundation, Inc. +# Copyright (C) 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.perf/gmonster-runto-main.py gdb-10.2/gdb/testsuite/gdb.perf/gmonster-runto-main.py --- gdb-9.1/gdb/testsuite/gdb.perf/gmonster-runto-main.py 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.perf/gmonster-runto-main.py 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020 Free Software Foundation, Inc. +# Copyright (C) 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.perf/gmonster-select-file.py gdb-10.2/gdb/testsuite/gdb.perf/gmonster-select-file.py --- gdb-9.1/gdb/testsuite/gdb.perf/gmonster-select-file.py 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.perf/gmonster-select-file.py 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020 Free Software Foundation, Inc. +# Copyright (C) 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.perf/gm-pervasive-typedef.cc gdb-10.2/gdb/testsuite/gdb.perf/gm-pervasive-typedef.cc --- gdb-9.1/gdb/testsuite/gdb.perf/gm-pervasive-typedef.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.perf/gm-pervasive-typedef.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2015-2020 Free Software Foundation, Inc. +/* Copyright (C) 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.perf/gm-pervasive-typedef.h gdb-10.2/gdb/testsuite/gdb.perf/gm-pervasive-typedef.h --- gdb-9.1/gdb/testsuite/gdb.perf/gm-pervasive-typedef.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.perf/gm-pervasive-typedef.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2015-2020 Free Software Foundation, Inc. +/* Copyright (C) 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.perf/gm-std.cc gdb-10.2/gdb/testsuite/gdb.perf/gm-std.cc --- gdb-9.1/gdb/testsuite/gdb.perf/gm-std.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.perf/gm-std.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2015-2020 Free Software Foundation, Inc. +/* Copyright (C) 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.perf/gm-std.h gdb-10.2/gdb/testsuite/gdb.perf/gm-std.h --- gdb-9.1/gdb/testsuite/gdb.perf/gm-std.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.perf/gm-std.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2015-2020 Free Software Foundation, Inc. +/* Copyright (C) 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.perf/gm-use-cerr.cc gdb-10.2/gdb/testsuite/gdb.perf/gm-use-cerr.cc --- gdb-9.1/gdb/testsuite/gdb.perf/gm-use-cerr.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.perf/gm-use-cerr.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2015-2020 Free Software Foundation, Inc. +/* Copyright (C) 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.perf/gm-utils.h gdb-10.2/gdb/testsuite/gdb.perf/gm-utils.h --- gdb-9.1/gdb/testsuite/gdb.perf/gm-utils.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.perf/gm-utils.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2015-2020 Free Software Foundation, Inc. +/* Copyright (C) 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.perf/lib/perftest/__init__.py gdb-10.2/gdb/testsuite/gdb.perf/lib/perftest/__init__.py --- gdb-9.1/gdb/testsuite/gdb.perf/lib/perftest/__init__.py 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.perf/lib/perftest/__init__.py 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2013-2020 Free Software Foundation, Inc. +# Copyright (C) 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.perf/lib/perftest/measure.py gdb-10.2/gdb/testsuite/gdb.perf/lib/perftest/measure.py --- gdb-9.1/gdb/testsuite/gdb.perf/lib/perftest/measure.py 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.perf/lib/perftest/measure.py 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2013-2020 Free Software Foundation, Inc. +# Copyright (C) 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.perf/lib/perftest/perftest.py gdb-10.2/gdb/testsuite/gdb.perf/lib/perftest/perftest.py --- gdb-9.1/gdb/testsuite/gdb.perf/lib/perftest/perftest.py 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.perf/lib/perftest/perftest.py 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2013-2020 Free Software Foundation, Inc. +# Copyright (C) 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.perf/lib/perftest/reporter.py gdb-10.2/gdb/testsuite/gdb.perf/lib/perftest/reporter.py --- gdb-9.1/gdb/testsuite/gdb.perf/lib/perftest/reporter.py 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.perf/lib/perftest/reporter.py 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2013-2020 Free Software Foundation, Inc. +# Copyright (C) 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.perf/lib/perftest/testresult.py gdb-10.2/gdb/testsuite/gdb.perf/lib/perftest/testresult.py --- gdb-9.1/gdb/testsuite/gdb.perf/lib/perftest/testresult.py 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.perf/lib/perftest/testresult.py 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2013-2020 Free Software Foundation, Inc. +# Copyright (C) 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.perf/lib/perftest/utils.py gdb-10.2/gdb/testsuite/gdb.perf/lib/perftest/utils.py --- gdb-9.1/gdb/testsuite/gdb.perf/lib/perftest/utils.py 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.perf/lib/perftest/utils.py 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020 Free Software Foundation, Inc. +# Copyright (C) 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.perf/single-step.c gdb-10.2/gdb/testsuite/gdb.perf/single-step.c --- gdb-9.1/gdb/testsuite/gdb.perf/single-step.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.perf/single-step.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright (C) 2013-2020 Free Software Foundation, Inc. + Copyright (C) 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.perf/single-step.exp gdb-10.2/gdb/testsuite/gdb.perf/single-step.exp --- gdb-9.1/gdb/testsuite/gdb.perf/single-step.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.perf/single-step.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2013-2020 Free Software Foundation, Inc. +# Copyright (C) 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.perf/single-step.py gdb-10.2/gdb/testsuite/gdb.perf/single-step.py --- gdb-9.1/gdb/testsuite/gdb.perf/single-step.py 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.perf/single-step.py 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2013-2020 Free Software Foundation, Inc. +# Copyright (C) 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.perf/skip-command.cc gdb-10.2/gdb/testsuite/gdb.perf/skip-command.cc --- gdb-9.1/gdb/testsuite/gdb.perf/skip-command.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.perf/skip-command.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright (C) 2016-2020 Free Software Foundation, Inc. + Copyright (C) 2016-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.perf/skip-command.exp gdb-10.2/gdb/testsuite/gdb.perf/skip-command.exp --- gdb-9.1/gdb/testsuite/gdb.perf/skip-command.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.perf/skip-command.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2016-2020 Free Software Foundation, Inc. +# Copyright (C) 2016-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.perf/skip-command.py gdb-10.2/gdb/testsuite/gdb.perf/skip-command.py --- gdb-9.1/gdb/testsuite/gdb.perf/skip-command.py 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.perf/skip-command.py 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2016-2020 Free Software Foundation, Inc. +# Copyright (C) 2016-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.perf/skip-prologue.c gdb-10.2/gdb/testsuite/gdb.perf/skip-prologue.c --- gdb-9.1/gdb/testsuite/gdb.perf/skip-prologue.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.perf/skip-prologue.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright (C) 2013-2020 Free Software Foundation, Inc. + Copyright (C) 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.perf/skip-prologue.exp gdb-10.2/gdb/testsuite/gdb.perf/skip-prologue.exp --- gdb-9.1/gdb/testsuite/gdb.perf/skip-prologue.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.perf/skip-prologue.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2013-2020 Free Software Foundation, Inc. +# Copyright (C) 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.perf/skip-prologue.py gdb-10.2/gdb/testsuite/gdb.perf/skip-prologue.py --- gdb-9.1/gdb/testsuite/gdb.perf/skip-prologue.py 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.perf/skip-prologue.py 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2013-2020 Free Software Foundation, Inc. +# Copyright (C) 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.perf/solib.c gdb-10.2/gdb/testsuite/gdb.perf/solib.c --- gdb-9.1/gdb/testsuite/gdb.perf/solib.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.perf/solib.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright (C) 2013-2020 Free Software Foundation, Inc. + Copyright (C) 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.perf/solib.exp gdb-10.2/gdb/testsuite/gdb.perf/solib.exp --- gdb-9.1/gdb/testsuite/gdb.perf/solib.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.perf/solib.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2013-2020 Free Software Foundation, Inc. +# Copyright (C) 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.perf/solib.py gdb-10.2/gdb/testsuite/gdb.perf/solib.py --- gdb-9.1/gdb/testsuite/gdb.perf/solib.py 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.perf/solib.py 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2013-2020 Free Software Foundation, Inc. +# Copyright (C) 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.perf/template-breakpoints.cc gdb-10.2/gdb/testsuite/gdb.perf/template-breakpoints.cc --- gdb-9.1/gdb/testsuite/gdb.perf/template-breakpoints.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.perf/template-breakpoints.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright (C) 2018-2020 Free Software Foundation, Inc. + Copyright (C) 2018-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.perf/template-breakpoints.exp gdb-10.2/gdb/testsuite/gdb.perf/template-breakpoints.exp --- gdb-9.1/gdb/testsuite/gdb.perf/template-breakpoints.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.perf/template-breakpoints.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2018-2020 Free Software Foundation, Inc. +# Copyright (C) 2018-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.perf/template-breakpoints.py gdb-10.2/gdb/testsuite/gdb.perf/template-breakpoints.py --- gdb-9.1/gdb/testsuite/gdb.perf/template-breakpoints.py 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.perf/template-breakpoints.py 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2018-2020 Free Software Foundation, Inc. +# Copyright (C) 2018-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/amd64-py-framefilter-invalidarg.S gdb-10.2/gdb/testsuite/gdb.python/amd64-py-framefilter-invalidarg.S --- gdb-9.1/gdb/testsuite/gdb.python/amd64-py-framefilter-invalidarg.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/amd64-py-framefilter-invalidarg.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/flexible-array-member.c gdb-10.2/gdb/testsuite/gdb.python/flexible-array-member.c --- gdb-9.1/gdb/testsuite/gdb.python/flexible-array-member.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/flexible-array-member.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,70 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include <stdlib.h> + +struct no_size +{ + int n; + int items[]; +}; + +struct zero_size +{ + int n; + int items[0]; +}; + +struct zero_size_only +{ + int items[0]; +}; + +struct no_size *ns; +struct zero_size *zs; +struct zero_size_only *zso; + +static void +break_here (void) +{ +} + +int +main (void) +{ + ns = (struct no_size *) malloc (sizeof (*ns) + 3 * sizeof (int)); + zs = (struct zero_size *) malloc (sizeof (*zs) + 3 * sizeof (int)); + zso = (struct zero_size_only *) malloc (sizeof (*zso) + 3 * sizeof (int)); + + ns->n = 3; + ns->items[0] = 101; + ns->items[1] = 102; + ns->items[2] = 103; + + zs->n = 3; + zs->items[0] = 201; + zs->items[1] = 202; + zs->items[2] = 203; + + zso->items[0] = 301; + zso->items[1] = 302; + zso->items[2] = 303; + + break_here (); + + return 0; +} diff -Nru gdb-9.1/gdb/testsuite/gdb.python/flexible-array-member.exp gdb-10.2/gdb/testsuite/gdb.python/flexible-array-member.exp --- gdb-9.1/gdb/testsuite/gdb.python/flexible-array-member.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/flexible-array-member.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,84 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Test getting the range of flexible array members in Python. + +standard_testfile + +if { [prepare_for_testing "failed to prepare" \ + ${testfile} ${srcfile}] } { + return +} + +# Skip all tests if Python scripting is not enabled. +if { [skip_python_tests] } { continue } + +if { ![runto break_here] } { + untested "could not run to break_here" + return +} + +# The various cases are: +# +# - ns: flexible array member with no size +# - zs: flexible array member with size 0 (GNU C extension that predates the +# standardization of the feature, but widely supported) +# - zso: zero-size only, a corner case where the array is the sole member of +# the structure + +gdb_test "python ns = gdb.parse_and_eval('ns').dereference()" +gdb_test "python zs = gdb.parse_and_eval('zs').dereference()" +gdb_test "python zso = gdb.parse_and_eval('zso').dereference()" + +# Print the whole structure. + +gdb_test "python print(ns)" "{n = 3, items = $hex}" +gdb_test "python print(zs)" "{n = 3, items = $hex}" +gdb_test "python print(zso)" "{items = $hex}" + +# Print all items. + +gdb_test "python print(ns\['items'\])" "$hex" +gdb_test "python print(ns\['items'\]\[0\])" "101" +gdb_test "python print(ns\['items'\]\[1\])" "102" +gdb_test "python print(ns\['items'\]\[2\])" "103" + +gdb_test "python print(zs\['items'\])" "$hex" +gdb_test "python print(zs\['items'\]\[0\])" "201" +gdb_test "python print(zs\['items'\]\[1\])" "202" +gdb_test "python print(zs\['items'\]\[2\])" "203" + +gdb_test "python print(zso\['items'\])" "$hex" +gdb_test "python print(zso\['items'\]\[0\])" "301" +gdb_test "python print(zso\['items'\]\[1\])" "302" +gdb_test "python print(zso\['items'\]\[2\])" "303" + +# Check taking the address of array elements (how PR 28675 was originally +# reported). + +gdb_test "python print(ns\['items'\] == ns\['items'\]\[0\].address)" "True" +gdb_test "python print(ns\['items'\]\[0\].address + 1 == ns\['items'\]\[1\].address)" "True" +gdb_test "python print(zs\['items'\] == zs\['items'\]\[0\].address)" "True" +gdb_test "python print(zs\['items'\]\[0\].address + 1 == zs\['items'\]\[1\].address)" "True" +gdb_test "python print(zso\['items'\] == zso\['items'\]\[0\].address)" "True" +gdb_test "python print(zso\['items'\]\[0\].address + 1 == zso\['items'\]\[1\].address)" "True" + +# Verify the range attribute. It looks a bit inconsistent that the high bound +# is sometimes 0, sometimes -1, but that's what GDB produces today, so that's +# what we test. + +gdb_test "python print(ns\['items'\].type.range())" "\\(0, 0\\)" +gdb_test "python print(zs\['items'\].type.range())" "\\(0, -1\\)" +gdb_test "python print(zso\['items'\].type.range())" "\\(0, -1\\)" diff -Nru gdb-9.1/gdb/testsuite/gdb.python/lib-types.cc gdb-10.2/gdb/testsuite/gdb.python/lib-types.cc --- gdb-9.1/gdb/testsuite/gdb.python/lib-types.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/lib-types.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/lib-types.exp gdb-10.2/gdb/testsuite/gdb.python/lib-types.exp --- gdb-9.1/gdb/testsuite/gdb.python/lib-types.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/lib-types.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2010-2020 Free Software Foundation, Inc. +# Copyright (C) 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -103,8 +103,15 @@ # test nested typedef/reference stripping gdb_test_no_output "python typedef_const_typedef_class1_ref_obj = gdb.parse_and_eval ('typedef_const_typedef_class1_ref_obj')" gdb_test_no_output "python basic_type_typedef_const_typedef_class1_ref_obj = gdb.types.get_basic_type (typedef_const_typedef_class1_ref_obj.type)" -if {[test_compiler_info {gcc-*-*}]} { setup_xfail gcc/55641 *-*-* } -gdb_test "python print (str (typedef_const_typedef_class1_ref_obj.type))" "\[\r\n\]+typedef_const_typedef_class1_ref" +gdb_test_multiple "python print (str (typedef_const_typedef_class1_ref_obj.type))" "" { + -re -wrap "\[\r\n\]+const typedef_const_typedef_class1_ref" { + # Compiler with PR gcc/55641. + xfail $gdb_test_name + } + -re -wrap "\[\r\n\]+typedef_const_typedef_class1_ref" { + pass $gdb_test_name + } +} set test "nested typedef/ref stripping" gdb_test_multiple "python print (str (basic_type_typedef_const_typedef_class1_ref_obj))" $test { -re "\[\r\n\]+class1\[\r\n\]+$gdb_prompt $" { diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-arch.c gdb-10.2/gdb/testsuite/gdb.python/py-arch.c --- gdb-9.1/gdb/testsuite/gdb.python/py-arch.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-arch.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-arch.exp gdb-10.2/gdb/testsuite/gdb.python/py-arch.exp --- gdb-9.1/gdb/testsuite/gdb.python/py-arch.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-arch.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-arch-reg-groups.exp gdb-10.2/gdb/testsuite/gdb.python/py-arch-reg-groups.exp --- gdb-9.1/gdb/testsuite/gdb.python/py-arch-reg-groups.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-arch-reg-groups.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,106 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Check the gdb.Architecture.register_groups functionality. + +load_lib gdb-python.exp +standard_testfile py-arch.c + +if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile}] } { + return -1 +} + +# Skip all tests if Python scripting is not enabled. +if { [skip_python_tests] } { continue } + +if ![runto_main] { + return -1 +} + +# First, use 'maint print reggroups' to get a list of all register +# groups. +set groups {} +set test "maint print reggroups" +gdb_test_multiple $test $test { + -re ".*Group\[ \t\]+Type\[ \t\]+\r\n" { + exp_continue + } + -re "^ (\[^ \t\]+)\[ \t\]+\[^\r\n\]+\r\n" { + lappend groups $expect_out(1,string) + exp_continue + } + -re "^$gdb_prompt " { + } +} +gdb_assert {[llength $groups] > 0} \ + "Found at least one register group" + +# Now get the same register names using Python API. +gdb_py_test_silent_cmd \ + "python frame = gdb.selected_frame()" "get frame" 0 +gdb_py_test_silent_cmd \ + "python arch = frame.architecture()" "get arch" 0 +gdb_py_test_silent_cmd \ + "python groups = list (arch.register_groups ())" \ + "get register groups" 0 +gdb_py_test_silent_cmd \ + "python groups = map (lambda obj: obj.name, groups)" \ + "convert groups to names" 0 + +set py_groups {} +gdb_test_multiple "python print (\"\\n\".join (groups))" \ + "register groups from python" { + -re "^python print \[^\r\n\]+\r\n" { + exp_continue + } + -re "^(\[^\r\n\]+)\r\n" { + lappend py_groups $expect_out(1,string) + exp_continue + } + -re "^$gdb_prompt " { + } + } + +gdb_assert {[llength $py_groups] > 0} \ + "Found at least one register group from python" +gdb_assert {[llength $py_groups] == [llength $groups]} \ + "Same numnber of registers groups found" + +set found_non_match 0 +for { set i 0 } { $i < [llength $groups] } { incr i } { + if {[lindex $groups $i] != [lindex $py_groups $i]} { + set found_non_match 1 + } +} +gdb_assert { $found_non_match == 0 } "all register groups match" + +# Check that we get the same register group descriptors from two +# different iterators. +gdb_py_test_silent_cmd \ + "python iter1 = arch.register_groups ()" \ + "get first all register group iterator" 0 +gdb_py_test_silent_cmd \ + "python iter2 = arch.register_groups ()" \ + "get second all register group iterator" 0 +gdb_py_test_silent_cmd \ + [multi_line_input \ + "python" \ + "for r1, r2 in zip(iter1, iter2):" \ + " if (r1.name != r2.name):"\ + " raise gdb.GdbError (\"miss-matched names\")" \ + " if (r1 != r2):" \ + " raise gdb.GdbError (\"miss-matched objects\")" \ + "\004" ] \ + "check names and objects match" 1 diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-arch-reg-names.exp gdb-10.2/gdb/testsuite/gdb.python/py-arch-reg-names.exp --- gdb-9.1/gdb/testsuite/gdb.python/py-arch-reg-names.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-arch-reg-names.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,121 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Check the gdb.Architecture.registers functionality. + +load_lib gdb-python.exp +standard_testfile py-arch.c + +if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile}] } { + return -1 +} + +# Skip all tests if Python scripting is not enabled. +if { [skip_python_tests] } { continue } + +if ![runto_main] { + return -1 +} + +# First, use 'info registers' to get a list of register names. +set regs {} +gdb_test_multiple "info registers general" "info registers general" { + -re "^info registers general\r\n" { + exp_continue + } + -re "^(\[^ \t\]+)\[ \t\]+\[^\r\n\]+\r\n" { + set reg $expect_out(1,string) + lappend regs $reg + exp_continue + } + -re "^$gdb_prompt " { + } +} +gdb_assert {[llength $regs] > 0} \ + "Found at least one register" + +# Now get the same register names using Python API. +gdb_py_test_silent_cmd \ + "python frame = gdb.selected_frame()" "get frame" 0 +gdb_py_test_silent_cmd \ + "python arch = frame.architecture()" "get arch" 0 +gdb_py_test_silent_cmd \ + "python regs = list (arch.registers (\"general\"))" \ + "get general registers" 0 +gdb_py_test_silent_cmd \ + "python regs = map (lambda r : r.name, regs)" \ + "get names of general registers" 0 + +set py_regs {} +gdb_test_multiple "python print (\"\\n\".join (regs))" \ + "general register from python" { + -re "^python print \[^\r\n\]+\r\n" { + exp_continue + } + -re "^(\[^\r\n\]+)\r\n" { + set reg $expect_out(1,string) + lappend py_regs $reg + exp_continue + } + -re "^$gdb_prompt " { + } + } + +gdb_assert {[llength $py_regs] > 0} \ + "Found at least one register from python" +gdb_assert {[llength $py_regs] == [llength $regs]} \ + "Same numnber of registers found" + +set found_non_match 0 +for { set i 0 } { $i < [llength $regs] } { incr i } { + if {[lindex $regs $i] != [lindex $py_regs $i]} { + set found_non_match 1 + } +} +gdb_assert { $found_non_match == 0 } "all registers match" + +# Check that we get the same register descriptors from two different +# iterators. +gdb_py_test_silent_cmd \ + "python iter1 = arch.registers ()" \ + "get first all register iterator" 0 +gdb_py_test_silent_cmd \ + "python iter2 = arch.registers ()" \ + "get second all register iterator" 0 +gdb_py_test_silent_cmd \ + [multi_line_input \ + "python" \ + "for r1, r2 in zip(iter1, iter2):" \ + " if (r1.name != r2.name):"\ + " raise gdb.GdbError (\"miss-matched names\")" \ + " if (r1 != r2):" \ + " raise gdb.GdbError (\"miss-matched objects\")" \ + "\004" ] \ + "check names and objects match" 1 + +# Ensure that the '.find' method on the iterator returns the same +# Python object as we got from the iterator's list of descriptors. +gdb_py_test_silent_cmd \ + [multi_line \ + "python" \ + "def check_regs (arch, regs):" \ + " for r in (regs):" \ + " if (arch.registers ().find (r.name) != r):" \ + " raise gdb.GdbError (\"object miss-match\")" \ + "end" ] \ + "build check_obj function" 0 +gdb_py_test_silent_cmd \ + "python check_regs (arch, arch.registers (\"general\"))" \ + "ensure find gets expected descriptors" 1 diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-as-string.c gdb-10.2/gdb/testsuite/gdb.python/py-as-string.c --- gdb-9.1/gdb/testsuite/gdb.python/py-as-string.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-as-string.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2016-2020 Free Software Foundation, Inc. + Copyright 2016-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-as-string.exp gdb-10.2/gdb/testsuite/gdb.python/py-as-string.exp --- gdb-9.1/gdb/testsuite/gdb.python/py-as-string.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-as-string.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2016-2020 Free Software Foundation, Inc. +# Copyright (C) 2016-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-bad-printers.c gdb-10.2/gdb/testsuite/gdb.python/py-bad-printers.c --- gdb-9.1/gdb/testsuite/gdb.python/py-bad-printers.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-bad-printers.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2008-2020 Free Software Foundation, Inc. + Copyright 2008-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-bad-printers.exp gdb-10.2/gdb/testsuite/gdb.python/py-bad-printers.exp --- gdb-9.1/gdb/testsuite/gdb.python/py-bad-printers.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-bad-printers.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2008-2020 Free Software Foundation, Inc. +# Copyright (C) 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-bad-printers.py gdb-10.2/gdb/testsuite/gdb.python/py-bad-printers.py --- gdb-9.1/gdb/testsuite/gdb.python/py-bad-printers.py 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-bad-printers.py 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2008-2020 Free Software Foundation, Inc. +# Copyright (C) 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-block.c gdb-10.2/gdb/testsuite/gdb.python/py-block.c --- gdb-9.1/gdb/testsuite/gdb.python/py-block.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-block.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-block.exp gdb-10.2/gdb/testsuite/gdb.python/py-block.exp --- gdb-9.1/gdb/testsuite/gdb.python/py-block.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-block.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2010-2020 Free Software Foundation, Inc. +# Copyright (C) 2010-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-breakpoint.c gdb-10.2/gdb/testsuite/gdb.python/py-breakpoint.c --- gdb-9.1/gdb/testsuite/gdb.python/py-breakpoint.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-breakpoint.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-breakpoint-create-fail.c gdb-10.2/gdb/testsuite/gdb.python/py-breakpoint-create-fail.c --- gdb-9.1/gdb/testsuite/gdb.python/py-breakpoint-create-fail.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-breakpoint-create-fail.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2016-2020 Free Software Foundation, Inc. + Copyright 2016-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-breakpoint-create-fail.exp gdb-10.2/gdb/testsuite/gdb.python/py-breakpoint-create-fail.exp --- gdb-9.1/gdb/testsuite/gdb.python/py-breakpoint-create-fail.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-breakpoint-create-fail.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2016-2020 Free Software Foundation, Inc. +# Copyright (C) 2016-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-breakpoint-create-fail.py gdb-10.2/gdb/testsuite/gdb.python/py-breakpoint-create-fail.py --- gdb-9.1/gdb/testsuite/gdb.python/py-breakpoint-create-fail.py 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-breakpoint-create-fail.py 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2016-2020 Free Software Foundation, Inc. +# Copyright (C) 2016-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-breakpoint.exp gdb-10.2/gdb/testsuite/gdb.python/py-breakpoint.exp --- gdb-9.1/gdb/testsuite/gdb.python/py-breakpoint.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-breakpoint.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2010-2020 Free Software Foundation, Inc. +# Copyright (C) 2010-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -320,7 +320,7 @@ } delete_breakpoints - gdb_py_test_multiple "Sub-class a breakpoint" \ + gdb_test_multiline "Sub-class a breakpoint" \ "python" "" \ "class bp_eval (gdb.Breakpoint):" "" \ " inf_i = 0" "" \ @@ -333,7 +333,7 @@ " return False" "" \ "end" "" - gdb_py_test_multiple "Sub-class a second breakpoint" \ + gdb_test_multiline "Sub-class a second breakpoint" \ "python" "" \ "class bp_also_eval (gdb.Breakpoint):" "" \ " count = 0" "" \ @@ -344,7 +344,7 @@ " return False" "" \ "end" "" - gdb_py_test_multiple "Sub-class a third breakpoint" \ + gdb_test_multiline "Sub-class a third breakpoint" \ "python" "" \ "class basic (gdb.Breakpoint):" "" \ " count = 0" "" \ @@ -381,7 +381,7 @@ "Set breakpoint" 0 gdb_py_test_silent_cmd "python eval_bp2.condition = \"1==1\"" \ "Set a condition" 0 - gdb_py_test_multiple "Construct an eval function" \ + gdb_test_multiline "Construct an eval function" \ "python" "" \ "def stop_func ():" "" \ " return True" "" \ @@ -402,7 +402,7 @@ gdb_test "python print (check_eval.count)" "1" \ "Test that evaluate function is run when location also has normal bp" - gdb_py_test_multiple "Sub-class a watchpoint" \ + gdb_test_multiline "Sub-class a watchpoint" \ "python" "" \ "class wp_eval (gdb.Breakpoint):" "" \ " def stop (self):" "" \ @@ -434,7 +434,7 @@ } delete_breakpoints - gdb_py_test_multiple "Sub-class and check temporary breakpoint" \ + gdb_test_multiline "Sub-class and check temporary breakpoint" \ "python" "" \ "class temp_bp (gdb.Breakpoint):" "" \ " count = 0" "" \ @@ -521,7 +521,7 @@ clean_restart ${testfile} - gdb_py_test_multiple "Create event handler" \ + gdb_test_multiline "Create event handler" \ "python" "" \ "def note_event(arg):" "" \ " global last_bp_event" "" \ diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-caller-is.c gdb-10.2/gdb/testsuite/gdb.python/py-caller-is.c --- gdb-9.1/gdb/testsuite/gdb.python/py-caller-is.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-caller-is.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-caller-is.exp gdb-10.2/gdb/testsuite/gdb.python/py-caller-is.exp --- gdb-9.1/gdb/testsuite/gdb.python/py-caller-is.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-caller-is.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2012-2020 Free Software Foundation, Inc. +# Copyright (C) 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-cmd.c gdb-10.2/gdb/testsuite/gdb.python/py-cmd.c --- gdb-9.1/gdb/testsuite/gdb.python/py-cmd.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-cmd.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-cmd.exp gdb-10.2/gdb/testsuite/gdb.python/py-cmd.exp --- gdb-9.1/gdb/testsuite/gdb.python/py-cmd.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-cmd.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2009-2020 Free Software Foundation, Inc. +# Copyright (C) 2009-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -34,7 +34,7 @@ # Test a simple command. -gdb_py_test_multiple "input simple command" \ +gdb_test_multiline "input simple command" \ "python" "" \ "class test_cmd (gdb.Command):" "" \ " def __init__ (self):" "" \ @@ -48,7 +48,7 @@ # Test a prefix command, and a subcommand within it. -gdb_py_test_multiple "input prefix command" \ +gdb_test_multiline "input prefix command" \ "python" "" \ "class prefix_cmd (gdb.Command):" "" \ " def __init__ (self):" "" \ @@ -60,7 +60,7 @@ gdb_test "prefix_cmd ugh" "prefix_cmd output, arg = ugh" "call prefix command" -gdb_py_test_multiple "input subcommand" \ +gdb_test_multiline "input subcommand" \ "python" "" \ "class subcmd (gdb.Command):" "" \ " def __init__ (self):" "" \ @@ -74,7 +74,7 @@ # Test prefix command using keyword arguments. -gdb_py_test_multiple "input prefix command, keyword arguments" \ +gdb_test_multiline "input prefix command, keyword arguments" \ "python" "" \ "class prefix_cmd2 (gdb.Command):" "" \ " def __init__ (self):" "" \ @@ -86,7 +86,7 @@ gdb_test "prefix_cmd2 argh" "prefix_cmd2 output, arg = argh" "call prefix command, keyword arguments" -gdb_py_test_multiple "input subcommand under prefix_cmd2" \ +gdb_test_multiline "input subcommand under prefix_cmd2" \ "python" "" \ "class subcmd (gdb.Command):" "" \ " def __init__ (self):" "" \ @@ -100,7 +100,7 @@ # Test a subcommand in an existing GDB prefix. -gdb_py_test_multiple "input new subcommand" \ +gdb_test_multiline "input new subcommand" \ "python" "" \ "class newsubcmd (gdb.Command):" "" \ " def __init__ (self):" "" \ @@ -114,7 +114,7 @@ # Test a command that throws gdb.GdbError. -gdb_py_test_multiple "input command to throw error" \ +gdb_test_multiline "input command to throw error" \ "python" "" \ "class test_error_cmd (gdb.Command):" "" \ " def __init__ (self):" "" \ @@ -145,7 +145,7 @@ "string_to_argv ('1\\ 2 3')" # Test user-defined python commands. -gdb_py_test_multiple "input simple user-defined command" \ +gdb_test_multiline "input simple user-defined command" \ "python" "" \ "class test_help (gdb.Command):" "" \ " \"\"\"Docstring\"\"\"" "" \ @@ -166,7 +166,7 @@ "don't show user-defined python command in `show user command`" # Test expression completion on fields -gdb_py_test_multiple "expression completion command" \ +gdb_test_multiline "expression completion command" \ "python" "" \ "class expr_test (gdb.Command):" "" \ " def __init__ (self):" "" \ @@ -266,7 +266,7 @@ # Test that interrupting pagination throws a gdb quit. gdb_test_no_output "set height 10" -gdb_py_test_multiple "input multi-line-output command" \ +gdb_test_multiline "input multi-line-output command" \ "python" "" \ "class test_mline (gdb.Command):" "" \ " \"\"\"Docstring\"\"\"" "" \ diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-completion.exp gdb-10.2/gdb/testsuite/gdb.python/py-completion.exp --- gdb-9.1/gdb/testsuite/gdb.python/py-completion.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-completion.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2014-2020 Free Software Foundation, Inc. +# Copyright (C) 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-completion.py gdb-10.2/gdb/testsuite/gdb.python/py-completion.py --- gdb-9.1/gdb/testsuite/gdb.python/py-completion.py 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-completion.py 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2014-2020 Free Software Foundation, Inc. +# Copyright (C) 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-error.exp gdb-10.2/gdb/testsuite/gdb.python/py-error.exp --- gdb-9.1/gdb/testsuite/gdb.python/py-error.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-error.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2010-2020 Free Software Foundation, Inc. +# Copyright (C) 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-error.py gdb-10.2/gdb/testsuite/gdb.python/py-error.py --- gdb-9.1/gdb/testsuite/gdb.python/py-error.py 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-error.py 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2010-2020 Free Software Foundation, Inc. +# Copyright (C) 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-events.c gdb-10.2/gdb/testsuite/gdb.python/py-events.c --- gdb-9.1/gdb/testsuite/gdb.python/py-events.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-events.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-events.exp gdb-10.2/gdb/testsuite/gdb.python/py-events.exp --- gdb-9.1/gdb/testsuite/gdb.python/py-events.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-events.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2010-2020 Free Software Foundation, Inc. +# Copyright (C) 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -213,13 +213,13 @@ # Test before_prompt event. -gdb_py_test_multiple "define new user command" \ +gdb_test_multiline "define new user command" \ "define xxz" "End with a line saying just .end.." \ "set variable \$x = 72" "" \ "set variable \$y = 93" "" \ "end" "" -gdb_py_test_multiple "add before_prompt listener" \ +gdb_test_multiline "add before_prompt listener" \ "python" "" \ "count = 0" "" \ "def listener():" "" \ diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-events.py gdb-10.2/gdb/testsuite/gdb.python/py-events.py --- gdb-9.1/gdb/testsuite/gdb.python/py-events.py 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-events.py 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2010-2020 Free Software Foundation, Inc. +# Copyright (C) 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-events-shlib.c gdb-10.2/gdb/testsuite/gdb.python/py-events-shlib.c --- gdb-9.1/gdb/testsuite/gdb.python/py-events-shlib.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-events-shlib.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-evsignal.exp gdb-10.2/gdb/testsuite/gdb.python/py-evsignal.exp --- gdb-9.1/gdb/testsuite/gdb.python/py-evsignal.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-evsignal.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2010-2020 Free Software Foundation, Inc. +# Copyright (C) 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-evthreads.c gdb-10.2/gdb/testsuite/gdb.python/py-evthreads.c --- gdb-9.1/gdb/testsuite/gdb.python/py-evthreads.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-evthreads.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-evthreads.exp gdb-10.2/gdb/testsuite/gdb.python/py-evthreads.exp --- gdb-9.1/gdb/testsuite/gdb.python/py-evthreads.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-evthreads.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2010-2020 Free Software Foundation, Inc. +# Copyright (C) 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-explore.c gdb-10.2/gdb/testsuite/gdb.python/py-explore.c --- gdb-9.1/gdb/testsuite/gdb.python/py-explore.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-explore.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-explore.cc gdb-10.2/gdb/testsuite/gdb.python/py-explore.cc --- gdb-9.1/gdb/testsuite/gdb.python/py-explore.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-explore.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-explore-cc.exp gdb-10.2/gdb/testsuite/gdb.python/py-explore-cc.exp --- gdb-9.1/gdb/testsuite/gdb.python/py-explore-cc.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-explore-cc.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2012-2020 Free Software Foundation, Inc. +# Copyright (C) 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-explore.exp gdb-10.2/gdb/testsuite/gdb.python/py-explore.exp --- gdb-9.1/gdb/testsuite/gdb.python/py-explore.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-explore.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-finish-breakpoint2.cc gdb-10.2/gdb/testsuite/gdb.python/py-finish-breakpoint2.cc --- gdb-9.1/gdb/testsuite/gdb.python/py-finish-breakpoint2.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-finish-breakpoint2.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-finish-breakpoint2.exp gdb-10.2/gdb/testsuite/gdb.python/py-finish-breakpoint2.exp --- gdb-9.1/gdb/testsuite/gdb.python/py-finish-breakpoint2.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-finish-breakpoint2.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2011-2020 Free Software Foundation, Inc. +# Copyright (C) 2011-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-finish-breakpoint2.py gdb-10.2/gdb/testsuite/gdb.python/py-finish-breakpoint2.py --- gdb-9.1/gdb/testsuite/gdb.python/py-finish-breakpoint2.py 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-finish-breakpoint2.py 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2011-2020 Free Software Foundation, Inc. +# Copyright (C) 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-finish-breakpoint.c gdb-10.2/gdb/testsuite/gdb.python/py-finish-breakpoint.c --- gdb-9.1/gdb/testsuite/gdb.python/py-finish-breakpoint.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-finish-breakpoint.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -56,6 +56,7 @@ call_longjmp (jmp_buf *buf) { call_longjmp_1 (buf); + return 0; } void diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-finish-breakpoint.exp gdb-10.2/gdb/testsuite/gdb.python/py-finish-breakpoint.exp --- gdb-9.1/gdb/testsuite/gdb.python/py-finish-breakpoint.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-finish-breakpoint.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2011-2020 Free Software Foundation, Inc. +# Copyright (C) 2011-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-finish-breakpoint.py gdb-10.2/gdb/testsuite/gdb.python/py-finish-breakpoint.py --- gdb-9.1/gdb/testsuite/gdb.python/py-finish-breakpoint.py 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-finish-breakpoint.py 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2011-2020 Free Software Foundation, Inc. +# Copyright (C) 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-format-string.c gdb-10.2/gdb/testsuite/gdb.python/py-format-string.c --- gdb-9.1/gdb/testsuite/gdb.python/py-format-string.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-format-string.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2019-2020 Free Software Foundation, Inc. + Copyright 2019-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-format-string.exp gdb-10.2/gdb/testsuite/gdb.python/py-format-string.exp --- gdb-9.1/gdb/testsuite/gdb.python/py-format-string.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-format-string.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2009-2020 Free Software Foundation, Inc. +# Copyright (C) 2009-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -24,6 +24,11 @@ return -1 } +# Skip all tests if Python scripting is not enabled. +gdb_exit +gdb_start +if { [skip_python_tests] } { continue } + # Build inferior to language specification. proc build_inferior {exefile lang} { global srcdir subdir srcfile testfile hex @@ -45,9 +50,6 @@ gdb_reinitialize_dir $srcdir/$subdir gdb_load ${exefile} - # Skip all tests if Python scripting is not enabled. - if { [skip_python_tests] } { continue } - if ![runto_main] then { perror "couldn't run to breakpoint" return @@ -291,9 +293,9 @@ proc test_pretty_arrays {} { global current_lang - set an_array_pretty " \\{2,\[\r\n\]+ 3,\[\r\n\]+ 5\\}" + set an_array_pretty "\\{\[\r\n\]+ 2,\[\r\n\]+ 3,\[\r\n\]+ 5\[\r\n\]+\\}" set an_array_with_repetition_pretty \ - " \\{1,\[\r\n\]+ 3 <repeats 12 times>,\[\r\n\]+ 5,\[\r\n\]+ 5,\[\r\n\]+ 5\\}" + "\\{\[\r\n\]+ 1,\[\r\n\]+ 3 <repeats 12 times>,\[\r\n\]+ 5,\[\r\n\]+ 5,\[\r\n\]+ 5\[\r\n\]+\\}" check_var_with_bool_opt "pretty_arrays" "a_point_t" check_var_with_bool_opt "pretty_arrays" "a_point_t_pointer" @@ -886,7 +888,7 @@ check_format_string "an_array" \ "array_indexes=True, pretty_arrays=True" \ - " \\{\\\[0\\\] = 2,\[\r\n\]+ \\\[1\\\] = 3,\[\r\n\]+ \\\[2\\\] = 5\\}" + "\\{\[\r\n\]+ \\\[0\\\] = 2,\[\r\n\]+ \\\[1\\\] = 3,\[\r\n\]+ \\\[2\\\] = 5\[\r\n\]+\\}" check_format_string "a_struct_with_union" \ "pretty_structs=True, unions=False" \ diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-format-string.py gdb-10.2/gdb/testsuite/gdb.python/py-format-string.py --- gdb-9.1/gdb/testsuite/gdb.python/py-format-string.py 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-format-string.py 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2008-2020 Free Software Foundation, Inc. +# Copyright (C) 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-frame-args.c gdb-10.2/gdb/testsuite/gdb.python/py-frame-args.c --- gdb-9.1/gdb/testsuite/gdb.python/py-frame-args.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-frame-args.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-frame-args.exp gdb-10.2/gdb/testsuite/gdb.python/py-frame-args.exp --- gdb-9.1/gdb/testsuite/gdb.python/py-frame-args.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-frame-args.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2013-2020 Free Software Foundation, Inc. +# Copyright (C) 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-frame-args.py gdb-10.2/gdb/testsuite/gdb.python/py-frame-args.py --- gdb-9.1/gdb/testsuite/gdb.python/py-frame-args.py 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-frame-args.py 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2013-2020 Free Software Foundation, Inc. +# Copyright (C) 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-frame.exp gdb-10.2/gdb/testsuite/gdb.python/py-frame.exp --- gdb-9.1/gdb/testsuite/gdb.python/py-frame.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-frame.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2009-2020 Free Software Foundation, Inc. +# Copyright (C) 2009-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-framefilter.c gdb-10.2/gdb/testsuite/gdb.python/py-framefilter.c --- gdb-9.1/gdb/testsuite/gdb.python/py-framefilter.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-framefilter.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-framefilter.exp gdb-10.2/gdb/testsuite/gdb.python/py-framefilter.exp --- gdb-9.1/gdb/testsuite/gdb.python/py-framefilter.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-framefilter.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2013-2020 Free Software Foundation, Inc. +# Copyright (C) 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-framefilter-gdb.py.in gdb-10.2/gdb/testsuite/gdb.python/py-framefilter-gdb.py.in --- gdb-9.1/gdb/testsuite/gdb.python/py-framefilter-gdb.py.in 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-framefilter-gdb.py.in 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2013-2020 Free Software Foundation, Inc. +# Copyright (C) 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-framefilter-invalidarg.exp gdb-10.2/gdb/testsuite/gdb.python/py-framefilter-invalidarg.exp --- gdb-9.1/gdb/testsuite/gdb.python/py-framefilter-invalidarg.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-framefilter-invalidarg.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2014-2020 Free Software Foundation, Inc. +# Copyright (C) 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-framefilter-invalidarg-gdb.py.in gdb-10.2/gdb/testsuite/gdb.python/py-framefilter-invalidarg-gdb.py.in --- gdb-9.1/gdb/testsuite/gdb.python/py-framefilter-invalidarg-gdb.py.in 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-framefilter-invalidarg-gdb.py.in 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2014-2020 Free Software Foundation, Inc. +# Copyright (C) 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-framefilter-invalidarg.py gdb-10.2/gdb/testsuite/gdb.python/py-framefilter-invalidarg.py --- gdb-9.1/gdb/testsuite/gdb.python/py-framefilter-invalidarg.py 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-framefilter-invalidarg.py 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2014-2020 Free Software Foundation, Inc. +# Copyright (C) 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-framefilter-mi.c gdb-10.2/gdb/testsuite/gdb.python/py-framefilter-mi.c --- gdb-9.1/gdb/testsuite/gdb.python/py-framefilter-mi.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-framefilter-mi.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-framefilter-mi.exp gdb-10.2/gdb/testsuite/gdb.python/py-framefilter-mi.exp --- gdb-9.1/gdb/testsuite/gdb.python/py-framefilter-mi.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-framefilter-mi.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2013-2020 Free Software Foundation, Inc. +# Copyright (C) 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-framefilter.py gdb-10.2/gdb/testsuite/gdb.python/py-framefilter.py --- gdb-9.1/gdb/testsuite/gdb.python/py-framefilter.py 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-framefilter.py 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2013-2020 Free Software Foundation, Inc. +# Copyright (C) 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-frame-inline.c gdb-10.2/gdb/testsuite/gdb.python/py-frame-inline.c --- gdb-9.1/gdb/testsuite/gdb.python/py-frame-inline.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-frame-inline.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This test is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-frame-inline.exp gdb-10.2/gdb/testsuite/gdb.python/py-frame-inline.exp --- gdb-9.1/gdb/testsuite/gdb.python/py-frame-inline.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-frame-inline.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2011-2020 Free Software Foundation, Inc. +# Copyright (C) 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-function.exp gdb-10.2/gdb/testsuite/gdb.python/py-function.exp --- gdb-9.1/gdb/testsuite/gdb.python/py-function.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-function.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2009-2020 Free Software Foundation, Inc. +# Copyright (C) 2009-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -27,7 +27,7 @@ # Skip all tests if Python scripting is not enabled. if { [skip_python_tests] } { continue } -gdb_py_test_multiple "input convenience function" \ +gdb_test_multiline "input convenience function" \ "python" "" \ "class test_func (gdb.Function):" "" \ " def __init__ (self):" "" \ @@ -41,7 +41,7 @@ # Test returning a gdb.Value from the function. This segfaulted GDB at one point. -gdb_py_test_multiple "input value-returning convenience function" \ +gdb_test_multiline "input value-returning convenience function" \ "python" "" \ "class Double (gdb.Function):" "" \ " def __init__ (self):" "" \ @@ -59,7 +59,7 @@ gdb_test "print \$double (1)" "= 2" "call value-returning function, language = $lang" } -gdb_py_test_multiple "input int-returning function" \ +gdb_test_multiline "input int-returning function" \ "python" "" \ "class Yes(gdb.Function):" "" \ " def __init__(self):" "" \ @@ -72,7 +72,7 @@ gdb_test "print \$yes() && \$yes()" " = 1" "call yes with &&" gdb_test "print \$yes() || \$yes()" " = 1" "call yes with ||" -gdb_py_test_multiple "Test GDBError" \ +gdb_test_multiline "Test GDBError" \ "python" "" \ "class GDBError(gdb.Function):" "" \ " def __init__(self):" "" \ @@ -85,7 +85,7 @@ gdb_test "print \$gdberror()" "This is a GdbError.*" \ "Test GdbError. There should not be a stack trace" -gdb_py_test_multiple "Test Normal Error" \ +gdb_test_multiline "Test Normal Error" \ "python" "" \ "class NormalError(gdb.Function):" "" \ " def __init__(self):" "" \ @@ -99,7 +99,7 @@ gdb_test "print \$normalerror()" "Traceback.*File.*line 5.*in invoke.*RuntimeError.*This is a Normal Error.*" \ "Test a Runtime error. There should be a stack trace." -gdb_py_test_multiple "input command-calling function" \ +gdb_test_multiline "input command-calling function" \ "python" "" \ "class CallCommand(gdb.Function):" "" \ " def __init__(self):" "" \ diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-inferior.exp gdb-10.2/gdb/testsuite/gdb.python/py-inferior.exp --- gdb-9.1/gdb/testsuite/gdb.python/py-inferior.exp 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-inferior.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2009-2020 Free Software Foundation, Inc. +# Copyright (C) 2009-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -218,7 +218,7 @@ gdb_test "python print (inf_list\[0\].is_valid())" "True" \ "check inferior validity 1" - gdb_py_test_multiple "install new inferior event handler" \ + gdb_test_multiline "install new inferior event handler" \ "python" "" \ "my_inferior_count = 1" "" \ "def new_inf_handler(evt):" "" \ @@ -227,7 +227,7 @@ " my_inferior_count = my_inferior_count + 1" "" \ "gdb.events.new_inferior.connect(new_inf_handler)" "" \ "end" "" - gdb_py_test_multiple "install inferior deleted event handler" \ + gdb_test_multiline "install inferior deleted event handler" \ "python" "" \ "def del_inf_handler(evt):" "" \ " global my_inferior_count" "" \ @@ -279,7 +279,7 @@ gdb_test "inferior 1" ".*" "switch to first inferior" gdb_test "py print (gdb.selected_inferior().num)" "1" "first inferior selected" - gdb_test "add-inferior" "Added inferior 3" "create new inferior" + gdb_test "add-inferior" "Added inferior 3 on connection .*" "create new inferior" gdb_test "inferior 3" ".*" "switch to third inferior" gdb_test "py print (gdb.selected_inferior().num)" "3" "third inferior selected" gdb_test "inferior 1" ".*" "switch back to first inferior" @@ -288,7 +288,7 @@ # Test repr()/str() with_test_prefix "__repr__" { - gdb_test "add-inferior" "Added inferior 4" "add inferior 4" + gdb_test "add-inferior" "Added inferior 4 on connection .*" "add inferior 4" gdb_py_test_silent_cmd "python infs = gdb.inferiors()" "get inferior list" 1 gdb_test "python print (infs\[0\])" "<gdb.Inferior num=1, pid=$decimal>" gdb_test "python print (infs)" \ diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-infthread.exp gdb-10.2/gdb/testsuite/gdb.python/py-infthread.exp --- gdb-9.1/gdb/testsuite/gdb.python/py-infthread.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-infthread.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2009-2020 Free Software Foundation, Inc. +# Copyright (C) 2009-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -30,7 +30,7 @@ # Skip all tests if Python scripting is not enabled. if { [skip_python_tests] } { continue } -gdb_py_test_multiple "install new_thread event handler" \ +gdb_test_multiline "install new_thread event handler" \ "python" "" \ "seen_a_thread = False" "" \ "def thread_handler(evt):" "" \ diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-lazy-string.c gdb-10.2/gdb/testsuite/gdb.python/py-lazy-string.c --- gdb-9.1/gdb/testsuite/gdb.python/py-lazy-string.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-lazy-string.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-lazy-string.exp gdb-10.2/gdb/testsuite/gdb.python/py-lazy-string.exp --- gdb-9.1/gdb/testsuite/gdb.python/py-lazy-string.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-lazy-string.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020 Free Software Foundation, Inc. +# Copyright (C) 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-linetable.c gdb-10.2/gdb/testsuite/gdb.python/py-linetable.c --- gdb-9.1/gdb/testsuite/gdb.python/py-linetable.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-linetable.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-linetable.exp gdb-10.2/gdb/testsuite/gdb.python/py-linetable.exp --- gdb-9.1/gdb/testsuite/gdb.python/py-linetable.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-linetable.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -40,7 +40,7 @@ gdb_py_test_silent_cmd "python lt = gdb.selected_frame().find_sal().symtab.linetable()" \ "get instruction" 0 -gdb_py_test_multiple "input simple command" \ +gdb_test_multiline "input simple command" \ "python" "" \ "def list_lines():" "" \ " for l in lt:" "" \ diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-linetable.S gdb-10.2/gdb/testsuite/gdb.python/py-linetable.S --- gdb-9.1/gdb/testsuite/gdb.python/py-linetable.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-linetable.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2013-2020 Free Software Foundation, Inc. +/* Copyright (C) 2013-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-lookup-type.exp gdb-10.2/gdb/testsuite/gdb.python/py-lookup-type.exp --- gdb-9.1/gdb/testsuite/gdb.python/py-lookup-type.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-lookup-type.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020 Free Software Foundation, Inc. +# Copyright (C) 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-mi-events.c gdb-10.2/gdb/testsuite/gdb.python/py-mi-events.c --- gdb-9.1/gdb/testsuite/gdb.python/py-mi-events.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-mi-events.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2016-2020 Free Software Foundation, Inc. + Copyright 2016-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-mi-events.exp gdb-10.2/gdb/testsuite/gdb.python/py-mi-events.exp --- gdb-9.1/gdb/testsuite/gdb.python/py-mi-events.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-mi-events.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2008-2020 Free Software Foundation, Inc. +# Copyright (C) 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-mi-events-gdb.py gdb-10.2/gdb/testsuite/gdb.python/py-mi-events-gdb.py --- gdb-9.1/gdb/testsuite/gdb.python/py-mi-events-gdb.py 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-mi-events-gdb.py 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2016-2020 Free Software Foundation, Inc. +# Copyright (C) 2016-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-mi.exp gdb-10.2/gdb/testsuite/gdb.python/py-mi.exp --- gdb-9.1/gdb/testsuite/gdb.python/py-mi.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-mi.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2008-2020 Free Software Foundation, Inc. +# Copyright (C) 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-mi-objfile.c gdb-10.2/gdb/testsuite/gdb.python/py-mi-objfile.c --- gdb-9.1/gdb/testsuite/gdb.python/py-mi-objfile.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-mi-objfile.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-mi-objfile.exp gdb-10.2/gdb/testsuite/gdb.python/py-mi-objfile.exp --- gdb-9.1/gdb/testsuite/gdb.python/py-mi-objfile.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-mi-objfile.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2008-2020 Free Software Foundation, Inc. +# Copyright (C) 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-mi-objfile-gdb.py gdb-10.2/gdb/testsuite/gdb.python/py-mi-objfile-gdb.py --- gdb-9.1/gdb/testsuite/gdb.python/py-mi-objfile-gdb.py 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-mi-objfile-gdb.py 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020 Free Software Foundation, Inc. +# Copyright (C) 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-mi-var-info-path-expression.c gdb-10.2/gdb/testsuite/gdb.python/py-mi-var-info-path-expression.c --- gdb-9.1/gdb/testsuite/gdb.python/py-mi-var-info-path-expression.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-mi-var-info-path-expression.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright (C) 2018-2020 Free Software Foundation, Inc. + Copyright (C) 2018-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-mi-var-info-path-expression.exp gdb-10.2/gdb/testsuite/gdb.python/py-mi-var-info-path-expression.exp --- gdb-9.1/gdb/testsuite/gdb.python/py-mi-var-info-path-expression.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-mi-var-info-path-expression.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2018-2020 Free Software Foundation, Inc. +# Copyright (C) 2018-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-mi-var-info-path-expression.py gdb-10.2/gdb/testsuite/gdb.python/py-mi-var-info-path-expression.py --- gdb-9.1/gdb/testsuite/gdb.python/py-mi-var-info-path-expression.py 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-mi-var-info-path-expression.py 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2018-2020 Free Software Foundation, Inc. +# Copyright (C) 2018-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-nested-maps.c gdb-10.2/gdb/testsuite/gdb.python/py-nested-maps.c --- gdb-9.1/gdb/testsuite/gdb.python/py-nested-maps.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-nested-maps.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2019-2020 Free Software Foundation, Inc. + Copyright 2019-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -62,6 +62,7 @@ m->keys = NULL; m->values = NULL; m->show_header = 0; + return m; } void @@ -85,6 +86,7 @@ mm->length = 0; mm->values = NULL; mm->show_header = 0; + return mm; } void diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-nested-maps.exp gdb-10.2/gdb/testsuite/gdb.python/py-nested-maps.exp --- gdb-9.1/gdb/testsuite/gdb.python/py-nested-maps.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-nested-maps.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2019-2020 Free Software Foundation, Inc. +# Copyright (C) 2019-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-nested-maps.py gdb-10.2/gdb/testsuite/gdb.python/py-nested-maps.py --- gdb-9.1/gdb/testsuite/gdb.python/py-nested-maps.py 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-nested-maps.py 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2019-2020 Free Software Foundation, Inc. +# Copyright (C) 2019-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-objfile.c gdb-10.2/gdb/testsuite/gdb.python/py-objfile.c --- gdb-9.1/gdb/testsuite/gdb.python/py-objfile.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-objfile.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-objfile.exp gdb-10.2/gdb/testsuite/gdb.python/py-objfile.exp --- gdb-9.1/gdb/testsuite/gdb.python/py-objfile.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-objfile.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2011-2020 Free Software Foundation, Inc. +# Copyright (C) 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-objfile-script.c gdb-10.2/gdb/testsuite/gdb.python/py-objfile-script.c --- gdb-9.1/gdb/testsuite/gdb.python/py-objfile-script.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-objfile-script.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-objfile-script.exp gdb-10.2/gdb/testsuite/gdb.python/py-objfile-script.exp --- gdb-9.1/gdb/testsuite/gdb.python/py-objfile-script.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-objfile-script.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2011-2020 Free Software Foundation, Inc. +# Copyright (C) 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-objfile-script-gdb.py gdb-10.2/gdb/testsuite/gdb.python/py-objfile-script-gdb.py --- gdb-9.1/gdb/testsuite/gdb.python/py-objfile-script-gdb.py 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-objfile-script-gdb.py 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2011-2020 Free Software Foundation, Inc. +# Copyright (C) 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-parameter.exp gdb-10.2/gdb/testsuite/gdb.python/py-parameter.exp --- gdb-9.1/gdb/testsuite/gdb.python/py-parameter.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-parameter.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2010-2020 Free Software Foundation, Inc. +# Copyright (C) 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -39,7 +39,7 @@ # Test a simple boolean parameter. with_test_prefix "boolean parameter" { - gdb_py_test_multiple "Simple gdb booleanparameter" \ + gdb_test_multiline "Simple gdb booleanparameter" \ "python" "" \ "class TestParam (gdb.Parameter):" "" \ " \"\"\"When enabled, test param does something useful. When disabled, does nothing.\"\"\"" "" \ @@ -79,7 +79,7 @@ # Test an enum parameter. with_test_prefix "enum parameter" { - gdb_py_test_multiple "enum gdb parameter" \ + gdb_test_multiline "enum gdb parameter" \ "python" "" \ "class TestEnumParam (gdb.Parameter):" "" \ " \"\"\"When set, test param does something useful. When disabled, does nothing.\"\"\"" "" \ @@ -112,7 +112,7 @@ # Test a file parameter. with_test_prefix "file parameter" { - gdb_py_test_multiple "file gdb parameter" \ + gdb_test_multiline "file gdb parameter" \ "python" "" \ "class TestFileParam (gdb.Parameter):" "" \ " \"\"\"When set, test param does something useful. When disabled, does nothing.\"\"\"" "" \ @@ -144,7 +144,7 @@ # Test a parameter that is not documented. with_test_prefix "undocumented parameter" { - gdb_py_test_multiple "Simple gdb booleanparameter" \ + gdb_test_multiline "Simple gdb booleanparameter" \ "python" "" \ "class TestUndocParam (gdb.Parameter):" "" \ " def get_show_string (self, pvalue):" ""\ @@ -179,7 +179,7 @@ # Test a parameter that is not documented in any way.. with_test_prefix "really undocumented parameter" { - gdb_py_test_multiple "Simple gdb booleanparameter" \ + gdb_test_multiline "Simple gdb booleanparameter" \ "python" "" \ "class TestNodocParam (gdb.Parameter):" "" \ " def __init__ (self, name):" "" \ @@ -207,7 +207,7 @@ # Test deprecated API. Do not use in your own implementations. with_test_prefix "deprecated API parameter" { - gdb_py_test_multiple "Simple gdb booleanparameter" \ + gdb_test_multiline "Simple gdb booleanparameter" \ "python" "" \ "class TestParam (gdb.Parameter):" "" \ " \"\"\"When enabled, test param does something useful. When disabled, does nothing.\"\"\"" "" \ @@ -238,7 +238,7 @@ } foreach kind {PARAM_ZUINTEGER PARAM_ZUINTEGER_UNLIMITED} { - gdb_py_test_multiple "Simple gdb $kind" \ + gdb_test_multiline "Simple gdb $kind" \ "python" "" \ "class TestNodocParam (gdb.Parameter):" "" \ " def __init__ (self, name):" "" \ @@ -261,7 +261,7 @@ } } -gdb_py_test_multiple "Throwing gdb parameter" \ +gdb_test_multiline "Throwing gdb parameter" \ "python" "" \ "class TestThrowParam (gdb.Parameter):" "" \ " def __init__ (self, name):" "" \ diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-pp-integral.c gdb-10.2/gdb/testsuite/gdb.python/py-pp-integral.c --- gdb-9.1/gdb/testsuite/gdb.python/py-pp-integral.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-pp-integral.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -20,7 +20,7 @@ static void tick_tock (time_t *t) { - *t++; + (void) *t++; } int diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-pp-integral.exp gdb-10.2/gdb/testsuite/gdb.python/py-pp-integral.exp --- gdb-9.1/gdb/testsuite/gdb.python/py-pp-integral.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-pp-integral.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2013-2020 Free Software Foundation, Inc. +# Copyright (C) 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-pp-integral.py gdb-10.2/gdb/testsuite/gdb.python/py-pp-integral.py --- gdb-9.1/gdb/testsuite/gdb.python/py-pp-integral.py 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-pp-integral.py 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2013-2020 Free Software Foundation, Inc. +# Copyright (C) 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-pp-maint.c gdb-10.2/gdb/testsuite/gdb.python/py-pp-maint.c --- gdb-9.1/gdb/testsuite/gdb.python/py-pp-maint.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-pp-maint.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-pp-maint.exp gdb-10.2/gdb/testsuite/gdb.python/py-pp-maint.exp --- gdb-9.1/gdb/testsuite/gdb.python/py-pp-maint.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-pp-maint.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2010-2020 Free Software Foundation, Inc. +# Copyright (C) 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-pp-maint.py gdb-10.2/gdb/testsuite/gdb.python/py-pp-maint.py --- gdb-9.1/gdb/testsuite/gdb.python/py-pp-maint.py 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-pp-maint.py 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2010-2020 Free Software Foundation, Inc. +# Copyright (C) 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-pp-registration.c gdb-10.2/gdb/testsuite/gdb.python/py-pp-registration.c --- gdb-9.1/gdb/testsuite/gdb.python/py-pp-registration.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-pp-registration.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-pp-registration.exp gdb-10.2/gdb/testsuite/gdb.python/py-pp-registration.exp --- gdb-9.1/gdb/testsuite/gdb.python/py-pp-registration.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-pp-registration.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2010-2020 Free Software Foundation, Inc. +# Copyright (C) 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-pp-registration.py gdb-10.2/gdb/testsuite/gdb.python/py-pp-registration.py --- gdb-9.1/gdb/testsuite/gdb.python/py-pp-registration.py 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-pp-registration.py 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2010-2020 Free Software Foundation, Inc. +# Copyright (C) 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-pp-re-notag.c gdb-10.2/gdb/testsuite/gdb.python/py-pp-re-notag.c --- gdb-9.1/gdb/testsuite/gdb.python/py-pp-re-notag.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-pp-re-notag.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -20,7 +20,7 @@ static void tick_tock (time_t *t) { - *t++; + (void) *t++; } int diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-pp-re-notag.exp gdb-10.2/gdb/testsuite/gdb.python/py-pp-re-notag.exp --- gdb-9.1/gdb/testsuite/gdb.python/py-pp-re-notag.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-pp-re-notag.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2013-2020 Free Software Foundation, Inc. +# Copyright (C) 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-pp-re-notag.py gdb-10.2/gdb/testsuite/gdb.python/py-pp-re-notag.py --- gdb-9.1/gdb/testsuite/gdb.python/py-pp-re-notag.py 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-pp-re-notag.py 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2013-2020 Free Software Foundation, Inc. +# Copyright (C) 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-prettyprint.c gdb-10.2/gdb/testsuite/gdb.python/py-prettyprint.c --- gdb-9.1/gdb/testsuite/gdb.python/py-prettyprint.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-prettyprint.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2008-2020 Free Software Foundation, Inc. + Copyright 2008-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-prettyprint.exp gdb-10.2/gdb/testsuite/gdb.python/py-prettyprint.exp --- gdb-9.1/gdb/testsuite/gdb.python/py-prettyprint.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-prettyprint.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2008-2020 Free Software Foundation, Inc. +# Copyright (C) 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-prettyprint.py gdb-10.2/gdb/testsuite/gdb.python/py-prettyprint.py --- gdb-9.1/gdb/testsuite/gdb.python/py-prettyprint.py 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-prettyprint.py 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2008-2020 Free Software Foundation, Inc. +# Copyright (C) 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-progspace.c gdb-10.2/gdb/testsuite/gdb.python/py-progspace.c --- gdb-9.1/gdb/testsuite/gdb.python/py-progspace.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-progspace.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-progspace.exp gdb-10.2/gdb/testsuite/gdb.python/py-progspace.exp --- gdb-9.1/gdb/testsuite/gdb.python/py-progspace.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-progspace.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2010-2020 Free Software Foundation, Inc. +# Copyright (C) 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-prompt.c gdb-10.2/gdb/testsuite/gdb.python/py-prompt.c --- gdb-9.1/gdb/testsuite/gdb.python/py-prompt.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-prompt.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2007-2020 Free Software Foundation, Inc. + Copyright 2007-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-prompt.exp gdb-10.2/gdb/testsuite/gdb.python/py-prompt.exp --- gdb-9.1/gdb/testsuite/gdb.python/py-prompt.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-prompt.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2011-2020 Free Software Foundation, Inc. +# Copyright (C) 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-rbreak.c gdb-10.2/gdb/testsuite/gdb.python/py-rbreak.c --- gdb-9.1/gdb/testsuite/gdb.python/py-rbreak.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-rbreak.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-rbreak.exp gdb-10.2/gdb/testsuite/gdb.python/py-rbreak.exp --- gdb-9.1/gdb/testsuite/gdb.python/py-rbreak.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-rbreak.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2017-2020 Free Software Foundation, Inc. +# Copyright (C) 2017-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-rbreak-func2.c gdb-10.2/gdb/testsuite/gdb.python/py-rbreak-func2.c --- gdb-9.1/gdb/testsuite/gdb.python/py-rbreak-func2.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-rbreak-func2.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2017-2020 Free Software Foundation, Inc. + Copyright 2017-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-record-btrace.c gdb-10.2/gdb/testsuite/gdb.python/py-record-btrace.c --- gdb-9.1/gdb/testsuite/gdb.python/py-record-btrace.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-record-btrace.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2016-2020 Free Software Foundation, Inc. + Copyright 2016-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-record-btrace.exp gdb-10.2/gdb/testsuite/gdb.python/py-record-btrace.exp --- gdb-9.1/gdb/testsuite/gdb.python/py-record-btrace.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-record-btrace.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. # -# Copyright 2016-2020 Free Software Foundation, Inc. +# Copyright 2016-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-record-btrace-threads.c gdb-10.2/gdb/testsuite/gdb.python/py-record-btrace-threads.c --- gdb-9.1/gdb/testsuite/gdb.python/py-record-btrace-threads.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-record-btrace-threads.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2017-2020 Free Software Foundation, Inc. + Copyright 2017-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-record-btrace-threads.exp gdb-10.2/gdb/testsuite/gdb.python/py-record-btrace-threads.exp --- gdb-9.1/gdb/testsuite/gdb.python/py-record-btrace-threads.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-record-btrace-threads.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. # -# Copyright 2017-2020 Free Software Foundation, Inc. +# Copyright 2017-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-record-full.c gdb-10.2/gdb/testsuite/gdb.python/py-record-full.c --- gdb-9.1/gdb/testsuite/gdb.python/py-record-full.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-record-full.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2016-2020 Free Software Foundation, Inc. + Copyright 2016-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-record-full.exp gdb-10.2/gdb/testsuite/gdb.python/py-record-full.exp --- gdb-9.1/gdb/testsuite/gdb.python/py-record-full.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-record-full.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. # -# Copyright 2016-2020 Free Software Foundation, Inc. +# Copyright 2016-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-recurse-unwind.c gdb-10.2/gdb/testsuite/gdb.python/py-recurse-unwind.c --- gdb-9.1/gdb/testsuite/gdb.python/py-recurse-unwind.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-recurse-unwind.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This test program is part of GDB, the GNU debugger. - Copyright 2016-2020 Free Software Foundation, Inc. + Copyright 2016-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-recurse-unwind.exp gdb-10.2/gdb/testsuite/gdb.python/py-recurse-unwind.exp --- gdb-9.1/gdb/testsuite/gdb.python/py-recurse-unwind.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-recurse-unwind.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2016-2020 Free Software Foundation, Inc. +# Copyright (C) 2016-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-recurse-unwind.py gdb-10.2/gdb/testsuite/gdb.python/py-recurse-unwind.py --- gdb-9.1/gdb/testsuite/gdb.python/py-recurse-unwind.py 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-recurse-unwind.py 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2016-2020 Free Software Foundation, Inc. +# Copyright (C) 2016-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-rvalue-ref-value-cc.cc gdb-10.2/gdb/testsuite/gdb.python/py-rvalue-ref-value-cc.cc --- gdb-9.1/gdb/testsuite/gdb.python/py-rvalue-ref-value-cc.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-rvalue-ref-value-cc.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-rvalue-ref-value-cc.exp gdb-10.2/gdb/testsuite/gdb.python/py-rvalue-ref-value-cc.exp --- gdb-9.1/gdb/testsuite/gdb.python/py-rvalue-ref-value-cc.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-rvalue-ref-value-cc.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2012-2020 Free Software Foundation, Inc. +# Copyright (C) 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-section-script.c gdb-10.2/gdb/testsuite/gdb.python/py-section-script.c --- gdb-9.1/gdb/testsuite/gdb.python/py-section-script.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-section-script.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-section-script.exp gdb-10.2/gdb/testsuite/gdb.python/py-section-script.exp --- gdb-9.1/gdb/testsuite/gdb.python/py-section-script.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-section-script.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2010-2020 Free Software Foundation, Inc. +# Copyright (C) 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-section-script.py gdb-10.2/gdb/testsuite/gdb.python/py-section-script.py --- gdb-9.1/gdb/testsuite/gdb.python/py-section-script.py 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-section-script.py 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2010-2020 Free Software Foundation, Inc. +# Copyright (C) 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-shared.c gdb-10.2/gdb/testsuite/gdb.python/py-shared.c --- gdb-9.1/gdb/testsuite/gdb.python/py-shared.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-shared.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-shared.exp gdb-10.2/gdb/testsuite/gdb.python/py-shared.exp --- gdb-9.1/gdb/testsuite/gdb.python/py-shared.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-shared.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2008-2020 Free Software Foundation, Inc. +# Copyright (C) 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-shared-sl.c gdb-10.2/gdb/testsuite/gdb.python/py-shared-sl.c --- gdb-9.1/gdb/testsuite/gdb.python/py-shared-sl.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-shared-sl.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-strfns.c gdb-10.2/gdb/testsuite/gdb.python/py-strfns.c --- gdb-9.1/gdb/testsuite/gdb.python/py-strfns.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-strfns.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-strfns.exp gdb-10.2/gdb/testsuite/gdb.python/py-strfns.exp --- gdb-9.1/gdb/testsuite/gdb.python/py-strfns.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-strfns.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2012-2020 Free Software Foundation, Inc. +# Copyright (C) 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-symbol-2.c gdb-10.2/gdb/testsuite/gdb.python/py-symbol-2.c --- gdb-9.1/gdb/testsuite/gdb.python/py-symbol-2.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-symbol-2.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2019-2020 Free Software Foundation, Inc. + Copyright 2019-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-symbol.c gdb-10.2/gdb/testsuite/gdb.python/py-symbol.c --- gdb-9.1/gdb/testsuite/gdb.python/py-symbol.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-symbol.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-symbol.exp gdb-10.2/gdb/testsuite/gdb.python/py-symbol.exp --- gdb-9.1/gdb/testsuite/gdb.python/py-symbol.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-symbol.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2010-2020 Free Software Foundation, Inc. +# Copyright (C) 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -211,7 +211,7 @@ gdb_test "python print (cplusfunc.name)" "SimpleClass::valueofi().*" "test method.name" gdb_test "python print (cplusfunc.print_name)" "SimpleClass::valueofi().*" "test method.print_name" -gdb_test "python print (cplusfunc.linkage_name)" "SimpleClass::valueofi().*" "test method.linkage_name" +gdb_test "python print (cplusfunc.linkage_name)" "_ZN11SimpleClass8valueofiEv.*" "test method.linkage_name" gdb_test "python print (cplusfunc.addr_class == gdb.SYMBOL_LOC_BLOCK)" "True" "test method.addr_class" # Test is_valid when the objfile is unloaded. This must be the last diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-symtab.exp gdb-10.2/gdb/testsuite/gdb.python/py-symtab.exp --- gdb-9.1/gdb/testsuite/gdb.python/py-symtab.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-symtab.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2010-2020 Free Software Foundation, Inc. +# Copyright (C) 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -32,6 +32,8 @@ return 0 } +set debug_types [debug_types] + global hex decimal # Setup and get the symbol table. @@ -75,7 +77,20 @@ gdb_test "python print (\"main\" in global_symbols)" "True" "test main in global symbols" gdb_test "python print (\"int\" in static_symbols)" "True" "test int in static symbols" gdb_test "python print (\"char\" in static_symbols)" "True" "test char in static symbols" -gdb_test "python print (\"simple_struct\" in static_symbols)" "True" "test simple_struct in static symbols" +gdb_test_multiple "python print (\"simple_struct\" in static_symbols)" \ + "test simple_struct in static symbols" { + -re -wrap "True" { + pass $gdb_test_name + } + -re -wrap "False" { + if { $debug_types } { + # Xfail for PR gcc/90232. + xfail $gdb_test_name + } else { + fail $gdb_test_name + } + } + } # Test is_valid when the objfile is unloaded. This must be the last # test as it unloads the object file in GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-sync-interp.c gdb-10.2/gdb/testsuite/gdb.python/py-sync-interp.c --- gdb-9.1/gdb/testsuite/gdb.python/py-sync-interp.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-sync-interp.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-sync-interp.exp gdb-10.2/gdb/testsuite/gdb.python/py-sync-interp.exp --- gdb-9.1/gdb/testsuite/gdb.python/py-sync-interp.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-sync-interp.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2013-2020 Free Software Foundation, Inc. +# Copyright (C) 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-template.cc gdb-10.2/gdb/testsuite/gdb.python/py-template.cc --- gdb-9.1/gdb/testsuite/gdb.python/py-template.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-template.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2008-2020 Free Software Foundation, Inc. + Copyright 2008-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-template.exp gdb-10.2/gdb/testsuite/gdb.python/py-template.exp --- gdb-9.1/gdb/testsuite/gdb.python/py-template.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-template.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2008-2020 Free Software Foundation, Inc. +# Copyright (C) 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/python-1.c gdb-10.2/gdb/testsuite/gdb.python/python-1.c --- gdb-9.1/gdb/testsuite/gdb.python/python-1.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/python-1.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/python.c gdb-10.2/gdb/testsuite/gdb.python/python.c --- gdb-9.1/gdb/testsuite/gdb.python/python.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/python.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/python.exp gdb-10.2/gdb/testsuite/gdb.python/python.exp --- gdb-9.1/gdb/testsuite/gdb.python/python.exp 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/python.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2008-2020 Free Software Foundation, Inc. +# Copyright (C) 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -46,7 +46,7 @@ "source source2.py when python disabled" # Verify multi-line python commands cause an error. - gdb_py_test_multiple "multi-line python command" \ + gdb_test_multiline "multi-line python command" \ "python" "" \ "print (23)" "" \ "end" "not supported.*" @@ -56,7 +56,7 @@ -re "$gdb_prompt $" {} } -gdb_py_test_multiple "multi-line python command" \ +gdb_test_multiline "multi-line python command" \ "python" "" \ "print (23)" "" \ "end" "23" @@ -77,7 +77,7 @@ } } -gdb_py_test_multiple "show python command" \ +gdb_test_multiline "show python command" \ "define zzq" "Type commands for definition of .* just \"end\"\\.*" \ "python" "" \ "print (23)" "" \ @@ -85,7 +85,7 @@ "end" "" \ "show user zzq" "User command \"zzq\":.* python.*print \\(23\\).* end" -gdb_py_test_multiple "indented multi-line python command" \ +gdb_test_multiline "indented multi-line python command" \ "python" "" \ "def foo ():" "" \ " print ('hello, world!')" "" \ @@ -124,7 +124,7 @@ gdb_test " " "23" "gdb.execute does not affect repeat history" # Test post_event. -gdb_py_test_multiple "post event insertion" \ +gdb_test_multiline "post event insertion" \ "python" "" \ "someVal = 0" "" \ "class Foo(object):" "" \ @@ -187,14 +187,14 @@ gdb_test_no_output "python a = gdb.execute('help', to_string=True)" "collect help from uiout" -gdb_test "python print (a)" ".*aliases -- Aliases of other commands.*" "verify help to uiout" +gdb_test "python print (a)" ".*aliases -- User-defined aliases of other commands.*" "verify help to uiout" # Test PR 12212, using InfThread.selected_thread() when no inferior is # loaded. gdb_py_test_silent_cmd "python nothread = gdb.selected_thread()" "Attempt to aquire thread with no inferior" 1 gdb_test "python print (nothread == None)" "True" "ensure that no threads are returned" -gdb_py_test_multiple "register atexit function" \ +gdb_test_multiline "register atexit function" \ "python" "" \ "import atexit" "" \ "def printit(arg):" "" \ @@ -229,31 +229,39 @@ gdb_test "python gdb.decode_line(\"main.c:43\")" \ "gdb.error: No source file named main.c.*" "test decode_line no source named main" -gdb_py_test_silent_cmd "python symtab = gdb.decode_line()" "test decode_line current location" 1 -gdb_test "python print (len(symtab))" "2" "test decode_line current location" -gdb_test "python print (symtab\[0\])" "None" "test decode_line expression parse" -gdb_test "python print (len(symtab\[1\]))" "1" "test decode_line current location" +with_test_prefix "test decode_line current location" { + gdb_py_test_silent_cmd "python symtab = gdb.decode_line()" "decode current line" 1 + gdb_test "python print (len(symtab))" "2" "length of result" + gdb_test "python print (symtab\[0\])" "None" "no unparsed text" + gdb_test "python print (len(symtab\[1\]))" "1" "length of result locations" +} + +# Test that decode_line with an empty string argument does not crash. +gdb_py_test_silent_cmd "python symtab2 = gdb.decode_line('')" \ + "test decode_line with empty string" 1 if { [is_remote host] } { set python_c [string_to_regexp "python.c"] } else { set python_c [string_to_regexp "gdb.python/python.c"] } -gdb_test "python print (symtab\[1\]\[0\].symtab)" ".*${python_c}" "test decode_line current location filename" -gdb_test "python print (symtab\[1\]\[0\].line)" "$lineno" "test decode_line current location line number" - -gdb_py_test_silent_cmd "python symtab = gdb.decode_line(\"python.c:26 if foo\")" "test decode_line python.c:26" 1 -gdb_test "python print (len(symtab))" "2" "test decode_line python.c:26 length" -gdb_test "python print (symtab\[0\])" "if foo" "test decode_line expression parse" -gdb_test "python print (len(symtab\[1\]))" "1" "test decode_line python.c:26 length" -gdb_test "python print (symtab\[1\]\[0\].symtab)" ".*${python_c}" "test decode_line python.c:26 filename" -gdb_test "python print (symtab\[1\]\[0\].line)" "26" "test decode_line python.c:26 line number" - -gdb_test "python gdb.decode_line(\"randomfunc\")" \ - "gdb.error: Function \"randomfunc\" not defined.*" "test decode_line randomfunc" -gdb_py_test_silent_cmd "python symtab = gdb.decode_line(\"func1\")" "test decode_line func1()" 1 -gdb_test "python print (len(symtab))" "2" "test decode_line func1 length" -gdb_test "python print (len(symtab\[1\]))" "1" "test decode_line func1 length" +with_test_prefix "test decode_line" { + gdb_test "python print (symtab\[1\]\[0\].symtab)" ".*${python_c}" "current location filename" + gdb_test "python print (symtab\[1\]\[0\].line)" "$lineno" "current location line number" + + gdb_py_test_silent_cmd "python symtab = gdb.decode_line(\"python.c:26 if foo\")" "python.c:26 decode" 1 + gdb_test "python print (len(symtab))" "2" "python.c:26 length 2" + gdb_test "python print (symtab\[0\])" "if foo" "expression parse" + gdb_test "python print (len(symtab\[1\]))" "1" "python.c:26 length 1" + gdb_test "python print (symtab\[1\]\[0\].symtab)" ".*${python_c}" "python.c:26 filename" + gdb_test "python print (symtab\[1\]\[0\].line)" "26" "python.c:26 line number" + + gdb_test "python gdb.decode_line(\"randomfunc\")" \ + "gdb.error: Function \"randomfunc\" not defined.*" "randomfunc" + gdb_py_test_silent_cmd "python symtab = gdb.decode_line(\"func1\")" "func1()" 1 + gdb_test "python print (len(symtab))" "2" "func1 length 2" + gdb_test "python print (len(symtab\[1\]))" "1" "func1 length 1" +} if { [is_remote host] } { set python_1_c [string_to_regexp "python-1.c"] @@ -280,12 +288,14 @@ "test decode_line func1,func2" 1 gdb_test {python print (symtab[0])} ",func2" "stop at comma in linespec" -gdb_py_test_silent_cmd "python symtab = gdb.decode_line(\"*0\")" "Test decode_line *0" 1 -gdb_test "python print (len(symtab))" "2" "test decode_line *0 result length" -gdb_test "python print (symtab\[0\])" "None" "test decode_line *0 unparsed" -gdb_test "python print (len(symtab\[1\]))" "1" "test decode_line *0 locations length" -gdb_test "python print (symtab\[1\]\[0\].symtab)" "None" "test decode_line *0 filename" -gdb_test "python print (symtab\[1\]\[0\].pc)" "0" "test decode_line *0 pc" +with_test_prefix "test decode_line" { + gdb_py_test_silent_cmd "python symtab = gdb.decode_line(\"*0\")" "*0" 1 + gdb_test "python print (len(symtab))" "2" "*0 result length" + gdb_test "python print (symtab\[0\])" "None" "*0 unparsed" + gdb_test "python print (len(symtab\[1\]))" "1" "*0 locations length" + gdb_test "python print (symtab\[1\]\[0\].symtab)" "None" "*0 filename" + gdb_test "python print (symtab\[1\]\[0\].pc)" "0" "*0 pc" +} # gdb.write gdb_test "python print (sys.stderr)" ".*gdb._GdbOutputErrorFile (instance|object) at.*" "test stderr location" @@ -304,7 +314,7 @@ # Test prompt substituion -gdb_py_test_multiple "prompt substitution" \ +gdb_test_multiline "prompt substitution" \ "python" "" \ "someCounter = 0" "" \ "def prompt(current):" "" \ @@ -315,7 +325,7 @@ " return \"py prompt \" + str (someCounter) + \" \"" "" \ "end" "" -gdb_py_test_multiple "prompt substitution readline" \ +gdb_test_multiline "prompt substitution readline" \ "python" "" \ "pCounter = 0" "" \ "def program_prompt(current):" "" \ @@ -330,39 +340,39 @@ set newprompt2 "py prompt 2" set testfake "testfake" -gdb_test_multiple "python gdb.prompt_hook = prompt" "set the hook" { +gdb_test_multiple "python gdb.prompt_hook = prompt" "set the hook = prompt" { -re "\[\r\n\]$newprompt $" { - pass "set hook" + pass $gdb_test_name } } gdb_test_multiple "set prompt testfake " "set testfake prompt in GDB" { -re "\[\r\n\]$testfake $" { - pass "set prompt testfake" + pass $gdb_test_name } } gdb_test_multiple "show prompt" "show testfake prompt" { -re "Gdb's prompt is \"$testfake \"..* $" { - pass "show prompt shows guarded prompt" + pass $gdb_test_name } } gdb_test_multiple "set prompt blah " "set blah in GDB" { -re "\[\r\n\]$newprompt2 $" { - pass "set prompt blah overriden" + pass $gdb_test_name } } gdb_test_multiple "python gdb.prompt_hook = None" "delete hook" { -re "\[\r\n\]$newprompt2 $" { - pass "delete old hook" + pass $gdb_test_name } } gdb_test_multiple "set prompt $gdb_prompt " "set default prompt" { -re "\[\r\n\]$gdb_prompt $" { - pass "set default prompt" + pass $gdb_test_name } } @@ -373,25 +383,25 @@ } } -gdb_test_multiple "python gdb.prompt_hook = program_prompt" "set the hook" { +gdb_test_multiple "python gdb.prompt_hook = program_prompt" "set the programming hook" { -re "\[\r\n\]$gdb_prompt $" { - pass "set programming hook" + pass $gdb_test_name } } -gdb_test_multiple "python" "test we ignore substituion for seconday prompts" { +gdb_test_multiple "python" "test we ignore substitution for seconday prompts" { -re "\r\n>$" { - pass "readline secondary are not substituted" + pass $gdb_test_name } } gdb_test_multiple "end" "end programming" { -re "\[\r\n\]$gdb_prompt $" { - pass "end programming" + pass $gdb_test_name } } -gdb_py_test_multiple "prompt substitution readline" \ +gdb_test_multiline "prompt substitution readline import" \ "python" "" \ "import gdb.command.prompt" "" \ "end" "" @@ -399,21 +409,21 @@ gdb_test_multiple "set extended-prompt one two three " \ "set basic extended prompt" { -re "\[\r\n\]one two three $" { - pass "set basic extended prompt" + pass $gdb_test_name } } gdb_test_multiple "set extended-prompt \\w " \ "set extended prompt working directory" { -re "\[\r\n\][string_to_regexp $working_dir] $" { - pass "set extended prompt working directory" + pass $gdb_test_name } } gdb_test_multiple "set extended-prompt some param \\p{python print-stack} " \ "set extended prompt parameter" { -re "\[\r\n\]some param full $" { - pass "set extended prompt parameter" + pass $gdb_test_name } } @@ -445,33 +455,33 @@ gdb_py_test_silent_cmd "set python print-stack message" \ "Test print-stack set setting to message" 1 -gdb_py_test_multiple "prompt substitution readline" \ +gdb_test_multiline "prompt substitution readline error_prompt" \ "python" "" \ "pCounter = 0" "" \ "def error_prompt(current):" "" \ " raise RuntimeError(\"Python exception called\")" "" \ "end" "" -gdb_test_multiple "python gdb.prompt_hook = error_prompt" "set the hook" { +gdb_test_multiple "python gdb.prompt_hook = error_prompt" "set the hook error_prompt" { -re "Python Exception (exceptions.RuntimeError|<(type 'exceptions.|class ')RuntimeError'>) Python exception called.*$gdb_prompt $" { - pass "set hook" + pass $gdb_test_name } } gdb_py_test_silent_cmd "python gdb.prompt_hook = None" \ - "set the hook to default" 1 + "set the hook to default 1" 1 gdb_py_test_silent_cmd "set python print-stack full" \ "set print-stack full for prompt error test" 1 -gdb_test_multiple "python gdb.prompt_hook = error_prompt" "set the hook" { +gdb_test_multiple "python gdb.prompt_hook = error_prompt" "set the hook error_prompt traceback" { -re "Traceback.*File.*line.*RuntimeError.*Python exception called.*$gdb_prompt $" { - pass "set hook" + pass $gdb_test_name } } gdb_py_test_silent_cmd "python gdb.prompt_hook = None" \ - "set the hook to default" 1 + "set the hook to default 2" 1 # Start with a fresh gdb. clean_restart ${testfile} @@ -516,3 +526,16 @@ # Test PR 23669, the following would invoke the "commands" command instead of # "show commands". gdb_test "python gdb.execute(\"show commands\")" "$decimal print \\\$cvar3.*" + +# Test that the from_tty argument to gdb.execute is effective. If +# False, the user is not prompted for decisions such as restarting the +# program, and "yes" is assumed. If True, the user is prompted. +gdb_test "python gdb.execute('starti', from_tty=False)" \ + "Program stopped.*" \ + "starti via gdb.execute, not from tty" +gdb_test_multiple "python gdb.execute('starti', from_tty=True)" \ + "starti via gdb.execute, from tty" { + -re {The program being debugged has been started already\.\r\nStart it from the beginning\? \(y or n\) $} { + gdb_test "y" "Starting program:.*" "starti via interactive input" + } +} diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-thrhandle.c gdb-10.2/gdb/testsuite/gdb.python/py-thrhandle.c --- gdb-9.1/gdb/testsuite/gdb.python/py-thrhandle.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-thrhandle.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2017-2020 Free Software Foundation, Inc. + Copyright 2017-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-thrhandle.exp gdb-10.2/gdb/testsuite/gdb.python/py-thrhandle.exp --- gdb-9.1/gdb/testsuite/gdb.python/py-thrhandle.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-thrhandle.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2017-2020 Free Software Foundation, Inc. +# Copyright (C) 2017-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-type.c gdb-10.2/gdb/testsuite/gdb.python/py-type.c --- gdb-9.1/gdb/testsuite/gdb.python/py-type.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-type.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2009-2020 Free Software Foundation, Inc. + Copyright 2009-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-type.exp gdb-10.2/gdb/testsuite/gdb.python/py-type.exp --- gdb-9.1/gdb/testsuite/gdb.python/py-type.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-type.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2009-2020 Free Software Foundation, Inc. +# Copyright (C) 2009-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-typeprint.cc gdb-10.2/gdb/testsuite/gdb.python/py-typeprint.cc --- gdb-9.1/gdb/testsuite/gdb.python/py-typeprint.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-typeprint.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2008-2020 Free Software Foundation, Inc. + Copyright 2008-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-typeprint.exp gdb-10.2/gdb/testsuite/gdb.python/py-typeprint.exp --- gdb-9.1/gdb/testsuite/gdb.python/py-typeprint.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-typeprint.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2012-2020 Free Software Foundation, Inc. +# Copyright (C) 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-typeprint.py gdb-10.2/gdb/testsuite/gdb.python/py-typeprint.py --- gdb-9.1/gdb/testsuite/gdb.python/py-typeprint.py 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-typeprint.py 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2012-2020 Free Software Foundation, Inc. +# Copyright (C) 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-unwind.c gdb-10.2/gdb/testsuite/gdb.python/py-unwind.c --- gdb-9.1/gdb/testsuite/gdb.python/py-unwind.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-unwind.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This test program is part of GDB, the GNU debugger. - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-unwind.exp gdb-10.2/gdb/testsuite/gdb.python/py-unwind.exp --- gdb-9.1/gdb/testsuite/gdb.python/py-unwind.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-unwind.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020 Free Software Foundation, Inc. +# Copyright (C) 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-unwind-inline.c gdb-10.2/gdb/testsuite/gdb.python/py-unwind-inline.c --- gdb-9.1/gdb/testsuite/gdb.python/py-unwind-inline.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-unwind-inline.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,37 @@ +/* Copyright 2019-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +volatile int global_var; + +int __attribute__ ((noinline)) +bar () +{ + return global_var; +} + +static inline int __attribute__ ((always_inline)) +foo () +{ + return bar (); +} + +int +main () +{ + int ans; + global_var = 0; + ans = foo (); + return ans; +} diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-unwind-inline.exp gdb-10.2/gdb/testsuite/gdb.python/py-unwind-inline.exp --- gdb-9.1/gdb/testsuite/gdb.python/py-unwind-inline.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-unwind-inline.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,49 @@ +# Copyright (C) 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# This script tests GDB's handling of using a Python unwinder in the +# presence of inlined frames. + +load_lib gdb-python.exp + +standard_testfile + +if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile} \ + debug] } { + return -1 +} + +# Skip all tests if Python scripting is not enabled. +if { [skip_python_tests] } { continue } + +# The following tests require execution. +if ![runto_main] then { + fail "can't run to main" + return 0 +} + +set pyfile [gdb_remote_download host ${srcdir}/${subdir}/${testfile}.py] + +gdb_breakpoint "foo" + +gdb_test "source ${pyfile}" "Python script imported" \ + "import python scripts" + +gdb_continue_to_breakpoint "foo" + +gdb_test_sequence "backtrace" "backtrace with dummy unwinder" { + "\\r\\n#0 foo \\(\\)" + "\\r\\n#1 main \\(\\)" +} diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-unwind-inline.py gdb-10.2/gdb/testsuite/gdb.python/py-unwind-inline.py --- gdb-9.1/gdb/testsuite/gdb.python/py-unwind-inline.py 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-unwind-inline.py 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,71 @@ +# Copyright (C) 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# A dummy stack unwinder used for testing the Python unwinders when we +# have inline frames. This unwinder will never claim any frames, +# instead, all it does it try to read all registers possible target +# registers as part of the frame sniffing process.. + +import gdb +from gdb.unwinder import Unwinder + +apb_global = None + +class dummy_unwinder (Unwinder): + """ A dummy unwinder that looks at a bunch of registers as part of + the unwinding process.""" + + class frame_id (object): + """ Basic frame id.""" + + def __init__ (self, sp, pc): + """ Create the frame id.""" + self.sp = sp + self.pc = pc + + def __init__ (self): + """Create the unwinder.""" + Unwinder.__init__ (self, "dummy stack unwinder") + self.void_ptr_t = gdb.lookup_type("void").pointer() + self.regs = None + + def get_regs (self, pending_frame): + """Return a list of register names that should be read. Only + gathers the list once, then caches the result.""" + if (self.regs != None): + return self.regs + + # Collect the names of all registers to read. + self.regs = list (pending_frame.architecture () + .register_names ()) + + return self.regs + + def __call__ (self, pending_frame): + """Actually performs the unwind, or at least sniffs this frame + to see if the unwinder should claim it, which is never does.""" + try: + for r in (self.get_regs (pending_frame)): + v = pending_frame.read_register (r).cast (self.void_ptr_t) + except: + print ("Dummy unwinder, exception") + raise + + return None + +# Register the ComRV stack unwinder. +gdb.unwinder.register_unwinder (None, dummy_unwinder (), True) + +print ("Python script imported") diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-unwind-maint.c gdb-10.2/gdb/testsuite/gdb.python/py-unwind-maint.c --- gdb-9.1/gdb/testsuite/gdb.python/py-unwind-maint.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-unwind-maint.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-unwind-maint.exp gdb-10.2/gdb/testsuite/gdb.python/py-unwind-maint.exp --- gdb-9.1/gdb/testsuite/gdb.python/py-unwind-maint.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-unwind-maint.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020 Free Software Foundation, Inc. +# Copyright (C) 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-unwind-maint.py gdb-10.2/gdb/testsuite/gdb.python/py-unwind-maint.py --- gdb-9.1/gdb/testsuite/gdb.python/py-unwind-maint.py 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-unwind-maint.py 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020 Free Software Foundation, Inc. +# Copyright (C) 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-unwind.py gdb-10.2/gdb/testsuite/gdb.python/py-unwind.py --- gdb-9.1/gdb/testsuite/gdb.python/py-unwind.py 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-unwind.py 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020 Free Software Foundation, Inc. +# Copyright (C) 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -30,16 +30,22 @@ def pc(self): return self._pc - class TestUnwinder(Unwinder): AMD64_RBP = 6 AMD64_RSP = 7 - AMD64_RIP = 16 + AMD64_RIP = None def __init__(self): Unwinder.__init__(self, "test unwinder") self.char_ptr_t = gdb.lookup_type("unsigned char").pointer() self.char_ptr_ptr_t = self.char_ptr_t.pointer() + self._last_arch = None + + # Update the register descriptor AMD64_RIP based on ARCH. + def _update_register_descriptors (self, arch): + if (self._last_arch != arch): + TestUnwinder.AMD64_RIP = arch.registers ().find ("rip") + self._last_arch = arch def _read_word(self, address): return address.cast(self.char_ptr_ptr_t).dereference() @@ -69,6 +75,17 @@ This unwinder recognizes the corrupt frames by checking that *RBP == RBP, and restores previous RBP from the word above it. """ + + # Check that we can access the architecture of the pending + # frame, and that this is the same architecture as for the + # currently selected inferior. + inf_arch = gdb.selected_inferior ().architecture () + frame_arch = pending_frame.architecture () + if (inf_arch != frame_arch): + raise gdb.GdbError ("architecture mismatch") + + self._update_register_descriptors (frame_arch) + try: # NOTE: the registers in Unwinder API can be referenced # either by name or by number. The code below uses both diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-value.c gdb-10.2/gdb/testsuite/gdb.python/py-value.c --- gdb-9.1/gdb/testsuite/gdb.python/py-value.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-value.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2008-2020 Free Software Foundation, Inc. + Copyright 2008-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-value-cc.cc gdb-10.2/gdb/testsuite/gdb.python/py-value-cc.cc --- gdb-9.1/gdb/testsuite/gdb.python/py-value-cc.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-value-cc.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-value-cc.exp gdb-10.2/gdb/testsuite/gdb.python/py-value-cc.exp --- gdb-9.1/gdb/testsuite/gdb.python/py-value-cc.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-value-cc.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2012-2020 Free Software Foundation, Inc. +# Copyright (C) 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-value.exp gdb-10.2/gdb/testsuite/gdb.python/py-value.exp --- gdb-9.1/gdb/testsuite/gdb.python/py-value.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-value.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2008-2020 Free Software Foundation, Inc. +# Copyright (C) 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -172,7 +172,7 @@ proc test_value_boolean {} { # First, define a useful function to test booleans. - gdb_py_test_multiple "define function to test booleans" \ + gdb_test_multiline "define function to test booleans" \ "python" "" \ "def test_bool (val):" "" \ " if val:" "" \ @@ -506,7 +506,7 @@ # Test that values are hashable. proc test_value_hash {} { - gdb_py_test_multiple "Simple Python value dictionary" \ + gdb_test_multiline "Simple Python value dictionary" \ "python" "" \ "one = gdb.Value(1)" "" \ "two = gdb.Value(2)" "" \ diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-xmethods.cc gdb-10.2/gdb/testsuite/gdb.python/py-xmethods.cc --- gdb-9.1/gdb/testsuite/gdb.python/py-xmethods.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-xmethods.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-xmethods.exp gdb-10.2/gdb/testsuite/gdb.python/py-xmethods.exp --- gdb-9.1/gdb/testsuite/gdb.python/py-xmethods.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-xmethods.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/py-xmethods.py gdb-10.2/gdb/testsuite/gdb.python/py-xmethods.py --- gdb-9.1/gdb/testsuite/gdb.python/py-xmethods.py 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/py-xmethods.py 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/source1 gdb-10.2/gdb/testsuite/gdb.python/source1 --- gdb-9.1/gdb/testsuite/gdb.python/source1 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/source1 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/source2.py gdb-10.2/gdb/testsuite/gdb.python/source2.py --- gdb-9.1/gdb/testsuite/gdb.python/source2.py 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/source2.py 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.python/tui-window.exp gdb-10.2/gdb/testsuite/gdb.python/tui-window.exp --- gdb-9.1/gdb/testsuite/gdb.python/tui-window.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/tui-window.exp 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,54 @@ +# Copyright (C) 2020-2021 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Test a TUI window implemented in Python. + +load_lib gdb-python.exp +tuiterm_env + +# This test doesn't care about the inferior. +standard_testfile py-arch.c + +if {[build_executable "failed to prepare" ${testfile} ${srcfile}] == -1} { + return -1 +} + +Term::clean_restart 24 80 $testfile + +# Skip all tests if Python scripting is not enabled. +if { [skip_python_tests] } { continue } + +set remote_python_file [gdb_remote_download host \ + ${srcdir}/${subdir}/${testfile}.py] +gdb_test_no_output "source ${remote_python_file}" \ + "source ${testfile}.py" + +gdb_test_no_output "tui new-layout test test 1 status 0 cmd 1" +gdb_test_no_output "tui new-layout fail fail 1 status 0 cmd 1" + +if {![Term::enter_tui]} { + unsupported "TUI not supported" +} + +Term::command "layout test" +Term::check_contents "test title" \ + "This Is The Title" +Term::check_contents "Window display" "Test: 0" + +Term::resize 51 51 +# Remember that a resize request actually does two resizes... +Term::check_contents "Window was updated" "Test: 2" + +Term::command "layout fail" diff -Nru gdb-9.1/gdb/testsuite/gdb.python/tui-window.py gdb-10.2/gdb/testsuite/gdb.python/tui-window.py --- gdb-9.1/gdb/testsuite/gdb.python/tui-window.py 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.python/tui-window.py 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,43 @@ +# Copyright (C) 2020-2021 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# A TUI window implemented in Python. + +import gdb + +the_window = None + +class TestWindow: + def __init__(self, win): + global the_window + the_window = win + self.count = 0 + self.win = win + win.title = "This Is The Title" + + def render(self): + self.win.erase() + w = self.win.width + h = self.win.height + self.win.write("Test: " + str(self.count) + " " + str(w) + "x" + str(h)) + self.count = self.count + 1 + +gdb.register_window_type("test", TestWindow) + +# A TUI window "constructor" that always fails. +def failwin(win): + raise RuntimeError("Whoops") + +gdb.register_window_type("fail", failwin) diff -Nru gdb-9.1/gdb/testsuite/gdb.reverse/amd64-tailcall-reverse.c gdb-10.2/gdb/testsuite/gdb.reverse/amd64-tailcall-reverse.c --- gdb-9.1/gdb/testsuite/gdb.reverse/amd64-tailcall-reverse.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.reverse/amd64-tailcall-reverse.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.reverse/amd64-tailcall-reverse.exp gdb-10.2/gdb/testsuite/gdb.reverse/amd64-tailcall-reverse.exp --- gdb-9.1/gdb/testsuite/gdb.reverse/amd64-tailcall-reverse.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.reverse/amd64-tailcall-reverse.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2012-2020 Free Software Foundation, Inc. +# Copyright (C) 2012-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.reverse/amd64-tailcall-reverse.S gdb-10.2/gdb/testsuite/gdb.reverse/amd64-tailcall-reverse.S --- gdb-9.1/gdb/testsuite/gdb.reverse/amd64-tailcall-reverse.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.reverse/amd64-tailcall-reverse.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.reverse/break-precsave.exp gdb-10.2/gdb/testsuite/gdb.reverse/break-precsave.exp --- gdb-9.1/gdb/testsuite/gdb.reverse/break-precsave.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.reverse/break-precsave.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.reverse/break-reverse.c gdb-10.2/gdb/testsuite/gdb.reverse/break-reverse.c --- gdb-9.1/gdb/testsuite/gdb.reverse/break-reverse.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.reverse/break-reverse.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2008-2020 Free Software Foundation, Inc. + Copyright 2008-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.reverse/break-reverse.exp gdb-10.2/gdb/testsuite/gdb.reverse/break-reverse.exp --- gdb-9.1/gdb/testsuite/gdb.reverse/break-reverse.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.reverse/break-reverse.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.reverse/consecutive-precsave.exp gdb-10.2/gdb/testsuite/gdb.reverse/consecutive-precsave.exp --- gdb-9.1/gdb/testsuite/gdb.reverse/consecutive-precsave.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.reverse/consecutive-precsave.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -35,6 +35,8 @@ gdb_test_no_output "record" "turn on process record" } +set is_stmt [is_stmt_addresses $srcfile] + set end_location [gdb_get_line_number "end of main" ] gdb_test "break $end_location" \ "Breakpoint $decimal at .*$srcfile, line $end_location\." \ @@ -79,7 +81,7 @@ set testmsg "stopped at bp, 2nd instr" gdb_test_multiple "step" $testmsg { - -re "Breakpoint $decimal, ($hex) in foo.*$gdb_prompt $" { + -re -wrap "Breakpoint $decimal, ($hex) in foo.*" { set stop_addr $expect_out(1,string) if [eval expr "$foo2_addr == $stop_addr"] then { pass "stopped at bp, 2nd instr" @@ -87,6 +89,17 @@ fail "stopped at bp, 2nd instr (wrong address)" } } + -re -wrap "Breakpoint $decimal, foo.*" { + set stop_addr [get_valueof "/x" "\$pc" "" "value of pc"] + set stop_addr_is_stmt [hex_in_list $stop_addr $is_stmt] + if { ! $stop_addr_is_stmt } { + fail "stopped at bp, 2nd instr (missing hex prefix)" + } elseif [eval expr "$foo2_addr == $stop_addr"] then { + pass "stopped at bp, 2nd instr" + } else { + fail "stopped at bp, 2nd instr (wrong address)" + } + } } ### diff -Nru gdb-9.1/gdb/testsuite/gdb.reverse/consecutive-reverse.c gdb-10.2/gdb/testsuite/gdb.reverse/consecutive-reverse.c --- gdb-9.1/gdb/testsuite/gdb.reverse/consecutive-reverse.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.reverse/consecutive-reverse.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2008-2020 Free Software Foundation, Inc. + Copyright 2008-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.reverse/consecutive-reverse.exp gdb-10.2/gdb/testsuite/gdb.reverse/consecutive-reverse.exp --- gdb-9.1/gdb/testsuite/gdb.reverse/consecutive-reverse.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.reverse/consecutive-reverse.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -33,6 +33,8 @@ gdb_test_no_output "record" "turn on process record" } +set is_stmt [is_stmt_addresses $srcfile] + gdb_breakpoint foo gdb_test "continue" "Breakpoint $decimal, foo .*" \ "continue to breakpoint in foo" @@ -59,7 +61,7 @@ set testmsg "stopped at bp, 2nd instr" gdb_test_multiple "step" $testmsg { - -re "Breakpoint $decimal, ($hex) in foo.*$gdb_prompt $" { + -re -wrap "Breakpoint $decimal, ($hex) in foo.*" { set stop_addr $expect_out(1,string) if [eval expr "$foo2_addr == $stop_addr"] then { pass "stopped at bp, 2nd instr" @@ -67,6 +69,17 @@ fail "stopped at bp, 2nd instr (wrong address)" } } + -re -wrap "Breakpoint $decimal, foo.*" { + set stop_addr [get_valueof "/x" "\$pc" "" "value of pc"] + set stop_addr_is_stmt [hex_in_list $stop_addr $is_stmt] + if { ! $stop_addr_is_stmt } { + fail "stopped at bp, 2nd instr (missing hex prefix)" + } elseif [eval expr "$foo2_addr == $stop_addr"] then { + pass "stopped at bp, 2nd instr" + } else { + fail "stopped at bp, 2nd instr (wrong address)" + } + } } ### diff -Nru gdb-9.1/gdb/testsuite/gdb.reverse/finish-precsave.exp gdb-10.2/gdb/testsuite/gdb.reverse/finish-precsave.exp --- gdb-9.1/gdb/testsuite/gdb.reverse/finish-precsave.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.reverse/finish-precsave.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.reverse/finish-reverse-bkpt.exp gdb-10.2/gdb/testsuite/gdb.reverse/finish-reverse-bkpt.exp --- gdb-9.1/gdb/testsuite/gdb.reverse/finish-reverse-bkpt.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.reverse/finish-reverse-bkpt.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.reverse/finish-reverse.c gdb-10.2/gdb/testsuite/gdb.reverse/finish-reverse.c --- gdb-9.1/gdb/testsuite/gdb.reverse/finish-reverse.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.reverse/finish-reverse.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2008-2020 Free Software Foundation, Inc. + Copyright 2008-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.reverse/finish-reverse.exp gdb-10.2/gdb/testsuite/gdb.reverse/finish-reverse.exp --- gdb-9.1/gdb/testsuite/gdb.reverse/finish-reverse.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.reverse/finish-reverse.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.reverse/fstatat-reverse.c gdb-10.2/gdb/testsuite/gdb.reverse/fstatat-reverse.c --- gdb-9.1/gdb/testsuite/gdb.reverse/fstatat-reverse.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.reverse/fstatat-reverse.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2008-2020 Free Software Foundation, Inc. + Copyright 2008-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.reverse/fstatat-reverse.exp gdb-10.2/gdb/testsuite/gdb.reverse/fstatat-reverse.exp --- gdb-9.1/gdb/testsuite/gdb.reverse/fstatat-reverse.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.reverse/fstatat-reverse.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.reverse/getresuid-reverse.c gdb-10.2/gdb/testsuite/gdb.reverse/getresuid-reverse.c --- gdb-9.1/gdb/testsuite/gdb.reverse/getresuid-reverse.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.reverse/getresuid-reverse.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2008-2020 Free Software Foundation, Inc. + Copyright 2008-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.reverse/getresuid-reverse.exp gdb-10.2/gdb/testsuite/gdb.reverse/getresuid-reverse.exp --- gdb-9.1/gdb/testsuite/gdb.reverse/getresuid-reverse.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.reverse/getresuid-reverse.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.reverse/i386-precsave.exp gdb-10.2/gdb/testsuite/gdb.reverse/i386-precsave.exp --- gdb-9.1/gdb/testsuite/gdb.reverse/i386-precsave.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.reverse/i386-precsave.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2009-2020 Free Software Foundation, Inc. +# Copyright 2009-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.reverse/i386-reverse.c gdb-10.2/gdb/testsuite/gdb.reverse/i386-reverse.c --- gdb-9.1/gdb/testsuite/gdb.reverse/i386-reverse.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.reverse/i386-reverse.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2009-2020 Free Software Foundation, Inc. + Copyright 2009-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.reverse/i386-reverse.exp gdb-10.2/gdb/testsuite/gdb.reverse/i386-reverse.exp --- gdb-9.1/gdb/testsuite/gdb.reverse/i386-reverse.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.reverse/i386-reverse.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2009-2020 Free Software Foundation, Inc. +# Copyright 2009-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.reverse/i386-sse-reverse.c gdb-10.2/gdb/testsuite/gdb.reverse/i386-sse-reverse.c --- gdb-9.1/gdb/testsuite/gdb.reverse/i386-sse-reverse.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.reverse/i386-sse-reverse.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2009-2020 Free Software Foundation, Inc. + Copyright 2009-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.reverse/i386-sse-reverse.exp gdb-10.2/gdb/testsuite/gdb.reverse/i386-sse-reverse.exp --- gdb-9.1/gdb/testsuite/gdb.reverse/i386-sse-reverse.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.reverse/i386-sse-reverse.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2009-2020 Free Software Foundation, Inc. +# Copyright 2009-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.reverse/i387-env-reverse.exp gdb-10.2/gdb/testsuite/gdb.reverse/i387-env-reverse.exp --- gdb-9.1/gdb/testsuite/gdb.reverse/i387-env-reverse.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.reverse/i387-env-reverse.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2009-2020 Free Software Foundation, Inc. +# Copyright 2009-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.reverse/i387-stack-reverse.exp gdb-10.2/gdb/testsuite/gdb.reverse/i387-stack-reverse.exp --- gdb-9.1/gdb/testsuite/gdb.reverse/i387-stack-reverse.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.reverse/i387-stack-reverse.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2009-2020 Free Software Foundation, Inc. +# Copyright 2009-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.reverse/insn-reverse-aarch64.c gdb-10.2/gdb/testsuite/gdb.reverse/insn-reverse-aarch64.c --- gdb-9.1/gdb/testsuite/gdb.reverse/insn-reverse-aarch64.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.reverse/insn-reverse-aarch64.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.reverse/insn-reverse-arm.c gdb-10.2/gdb/testsuite/gdb.reverse/insn-reverse-arm.c --- gdb-9.1/gdb/testsuite/gdb.reverse/insn-reverse-arm.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.reverse/insn-reverse-arm.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.reverse/insn-reverse.c gdb-10.2/gdb/testsuite/gdb.reverse/insn-reverse.c --- gdb-9.1/gdb/testsuite/gdb.reverse/insn-reverse.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.reverse/insn-reverse.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.reverse/insn-reverse.exp gdb-10.2/gdb/testsuite/gdb.reverse/insn-reverse.exp --- gdb-9.1/gdb/testsuite/gdb.reverse/insn-reverse.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.reverse/insn-reverse.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020 Free Software Foundation, Inc. +# Copyright (C) 2015-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.reverse/insn-reverse-x86.c gdb-10.2/gdb/testsuite/gdb.reverse/insn-reverse-x86.c --- gdb-9.1/gdb/testsuite/gdb.reverse/insn-reverse-x86.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.reverse/insn-reverse-x86.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2017-2020 Free Software Foundation, Inc. + Copyright 2017-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.reverse/machinestate.c gdb-10.2/gdb/testsuite/gdb.reverse/machinestate.c --- gdb-9.1/gdb/testsuite/gdb.reverse/machinestate.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.reverse/machinestate.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2008-2020 Free Software Foundation, Inc. + Copyright 2008-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.reverse/machinestate.exp gdb-10.2/gdb/testsuite/gdb.reverse/machinestate.exp --- gdb-9.1/gdb/testsuite/gdb.reverse/machinestate.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.reverse/machinestate.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.reverse/machinestate-precsave.exp gdb-10.2/gdb/testsuite/gdb.reverse/machinestate-precsave.exp --- gdb-9.1/gdb/testsuite/gdb.reverse/machinestate-precsave.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.reverse/machinestate-precsave.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.reverse/ms1.c gdb-10.2/gdb/testsuite/gdb.reverse/ms1.c --- gdb-9.1/gdb/testsuite/gdb.reverse/ms1.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.reverse/ms1.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2008-2020 Free Software Foundation, Inc. + Copyright 2008-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.reverse/next-reverse-bkpt-over-sr.exp gdb-10.2/gdb/testsuite/gdb.reverse/next-reverse-bkpt-over-sr.exp --- gdb-9.1/gdb/testsuite/gdb.reverse/next-reverse-bkpt-over-sr.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.reverse/next-reverse-bkpt-over-sr.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.reverse/pipe-reverse.c gdb-10.2/gdb/testsuite/gdb.reverse/pipe-reverse.c --- gdb-9.1/gdb/testsuite/gdb.reverse/pipe-reverse.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.reverse/pipe-reverse.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2008-2020 Free Software Foundation, Inc. + Copyright 2008-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.reverse/pipe-reverse.exp gdb-10.2/gdb/testsuite/gdb.reverse/pipe-reverse.exp --- gdb-9.1/gdb/testsuite/gdb.reverse/pipe-reverse.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.reverse/pipe-reverse.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.reverse/readv-reverse.c gdb-10.2/gdb/testsuite/gdb.reverse/readv-reverse.c --- gdb-9.1/gdb/testsuite/gdb.reverse/readv-reverse.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.reverse/readv-reverse.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2008-2020 Free Software Foundation, Inc. + Copyright 2008-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.reverse/readv-reverse.exp gdb-10.2/gdb/testsuite/gdb.reverse/readv-reverse.exp --- gdb-9.1/gdb/testsuite/gdb.reverse/readv-reverse.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.reverse/readv-reverse.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.reverse/recvmsg-reverse.c gdb-10.2/gdb/testsuite/gdb.reverse/recvmsg-reverse.c --- gdb-9.1/gdb/testsuite/gdb.reverse/recvmsg-reverse.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.reverse/recvmsg-reverse.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2008-2020 Free Software Foundation, Inc. + Copyright 2008-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.reverse/recvmsg-reverse.exp gdb-10.2/gdb/testsuite/gdb.reverse/recvmsg-reverse.exp --- gdb-9.1/gdb/testsuite/gdb.reverse/recvmsg-reverse.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.reverse/recvmsg-reverse.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.reverse/rerun-prec.c gdb-10.2/gdb/testsuite/gdb.reverse/rerun-prec.c --- gdb-9.1/gdb/testsuite/gdb.reverse/rerun-prec.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.reverse/rerun-prec.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.reverse/rerun-prec.exp gdb-10.2/gdb/testsuite/gdb.reverse/rerun-prec.exp --- gdb-9.1/gdb/testsuite/gdb.reverse/rerun-prec.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.reverse/rerun-prec.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.reverse/s390-mvcle.c gdb-10.2/gdb/testsuite/gdb.reverse/s390-mvcle.c --- gdb-9.1/gdb/testsuite/gdb.reverse/s390-mvcle.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.reverse/s390-mvcle.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.reverse/s390-mvcle.exp gdb-10.2/gdb/testsuite/gdb.reverse/s390-mvcle.exp --- gdb-9.1/gdb/testsuite/gdb.reverse/s390-mvcle.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.reverse/s390-mvcle.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020 Free Software Foundation, Inc. +# Copyright (C) 2015-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.reverse/shr1.c gdb-10.2/gdb/testsuite/gdb.reverse/shr1.c --- gdb-9.1/gdb/testsuite/gdb.reverse/shr1.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.reverse/shr1.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.reverse/shr2.c gdb-10.2/gdb/testsuite/gdb.reverse/shr2.c --- gdb-9.1/gdb/testsuite/gdb.reverse/shr2.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.reverse/shr2.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2009-2020 Free Software Foundation, Inc. + Copyright 2009-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.reverse/shr.h gdb-10.2/gdb/testsuite/gdb.reverse/shr.h --- gdb-9.1/gdb/testsuite/gdb.reverse/shr.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.reverse/shr.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.reverse/sigall-precsave.exp gdb-10.2/gdb/testsuite/gdb.reverse/sigall-precsave.exp --- gdb-9.1/gdb/testsuite/gdb.reverse/sigall-precsave.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.reverse/sigall-precsave.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2009-2020 Free Software Foundation, Inc. +# Copyright 2009-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.reverse/sigall-reverse.c gdb-10.2/gdb/testsuite/gdb.reverse/sigall-reverse.c --- gdb-9.1/gdb/testsuite/gdb.reverse/sigall-reverse.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.reverse/sigall-reverse.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2009-2020 Free Software Foundation, Inc. + Copyright 2009-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.reverse/sigall-reverse.exp gdb-10.2/gdb/testsuite/gdb.reverse/sigall-reverse.exp --- gdb-9.1/gdb/testsuite/gdb.reverse/sigall-reverse.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.reverse/sigall-reverse.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2009-2020 Free Software Foundation, Inc. +# Copyright 2009-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.reverse/singlejmp-reverse.c gdb-10.2/gdb/testsuite/gdb.reverse/singlejmp-reverse.c --- gdb-9.1/gdb/testsuite/gdb.reverse/singlejmp-reverse.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.reverse/singlejmp-reverse.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.reverse/singlejmp-reverse.exp gdb-10.2/gdb/testsuite/gdb.reverse/singlejmp-reverse.exp --- gdb-9.1/gdb/testsuite/gdb.reverse/singlejmp-reverse.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.reverse/singlejmp-reverse.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2012-2020 Free Software Foundation, Inc. +# Copyright (C) 2012-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.reverse/singlejmp-reverse-nodebug.c gdb-10.2/gdb/testsuite/gdb.reverse/singlejmp-reverse-nodebug.c --- gdb-9.1/gdb/testsuite/gdb.reverse/singlejmp-reverse-nodebug.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.reverse/singlejmp-reverse-nodebug.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.reverse/singlejmp-reverse-nodebug.S gdb-10.2/gdb/testsuite/gdb.reverse/singlejmp-reverse-nodebug.S --- gdb-9.1/gdb/testsuite/gdb.reverse/singlejmp-reverse-nodebug.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.reverse/singlejmp-reverse-nodebug.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.reverse/singlejmp-reverse.S gdb-10.2/gdb/testsuite/gdb.reverse/singlejmp-reverse.S --- gdb-9.1/gdb/testsuite/gdb.reverse/singlejmp-reverse.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.reverse/singlejmp-reverse.S 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.reverse/solib-precsave.exp gdb-10.2/gdb/testsuite/gdb.reverse/solib-precsave.exp --- gdb-9.1/gdb/testsuite/gdb.reverse/solib-precsave.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.reverse/solib-precsave.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2009-2020 Free Software Foundation, Inc. +# Copyright 2009-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -148,11 +148,27 @@ # Test reverse-step into debuggable solib function # -gdb_test "reverse-step" "${lib2src}.*" "reverse-step into solib function one" +gdb_test_multiple "reverse-step" "reverse-step into solib function one" { + -re -wrap "middle part two.*" { + send_gdb "reverse-step\n" + exp_continue + } + -re -wrap "${lib2src}.*" { + pass $gdb_test_name + } +} gdb_test "reverse-step" "return 2.x.*" "reverse-step within solib function one" gdb_test "reverse-step" " middle part two.*" "reverse-step back to main one" -gdb_test "reverse-step" "${lib2src}.*" "reverse-step into solib function two" +gdb_test_multiple "reverse-step" "reverse-step into solib function two" { + -re -wrap "begin part two.*" { + send_gdb "reverse-step\n" + exp_continue + } + -re -wrap "${lib2src}.*" { + pass $gdb_test_name + } +} gdb_test "reverse-step" "return 2.x.*" "reverse-step within solib function two" gdb_test "reverse-step" " begin part two.*" "reverse-step back to main two" @@ -163,4 +179,12 @@ gdb_test "until $end_part_two" " end part two.*" "run until end part two" gdb_test "reverse-next" " middle part two.*" "reverse-next over solib function one" -gdb_test "reverse-next" " begin part two.*" "reverse-next over solib function two" +gdb_test_multiple "reverse-next" "reverse-next over solib function two" { + -re -wrap "middle part two.*" { + send_gdb "reverse-next\n" + exp_continue + } + -re -wrap " begin part two.*" { + pass $gdb_test_name + } +} diff -Nru gdb-9.1/gdb/testsuite/gdb.reverse/solib-reverse.c gdb-10.2/gdb/testsuite/gdb.reverse/solib-reverse.c --- gdb-9.1/gdb/testsuite/gdb.reverse/solib-reverse.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.reverse/solib-reverse.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2009-2020 Free Software Foundation, Inc. + Copyright 2009-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.reverse/solib-reverse.exp gdb-10.2/gdb/testsuite/gdb.reverse/solib-reverse.exp --- gdb-9.1/gdb/testsuite/gdb.reverse/solib-reverse.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.reverse/solib-reverse.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2009-2020 Free Software Foundation, Inc. +# Copyright 2009-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -122,11 +122,27 @@ # Test reverse-step into debuggable solib function # -gdb_test "reverse-step" "${lib2src}.*" "reverse-step into solib function one" +gdb_test_multiple "reverse-step" "reverse-step into solib function one" { + -re -wrap "middle part two.*" { + send_gdb "reverse-step\n" + exp_continue + } + -re -wrap "${lib2src}.*" { + pass $gdb_test_name + } +} gdb_test "reverse-step" "return 2.x.*" "reverse-step within solib function one" gdb_test "reverse-step" " middle part two.*" "reverse-step back to main one" -gdb_test "reverse-step" "${lib2src}.*" "reverse-step into solib function two" +gdb_test_multiple "reverse-step" "reverse-step into solib function two" { + -re -wrap "begin part two.*" { + send_gdb "reverse-step\n" + exp_continue + } + -re -wrap "${lib2src}.*" { + pass $gdb_test_name + } +} gdb_test "reverse-step" "return 2.x.*" "reverse-step within solib function two" gdb_test "reverse-step" " begin part two.*" "reverse-step back to main two" @@ -137,4 +153,12 @@ gdb_test "until $end_part_two" " end part two.*" "run until end part two" gdb_test "reverse-next" " middle part two.*" "reverse-next over solib function one" -gdb_test "reverse-next" " begin part two.*" "reverse-next over solib function two" +gdb_test_multiple "reverse-next" "reverse-next over solib function two" { + -re -wrap "middle part two.*" { + send_gdb "reverse-next\n" + exp_continue + } + -re -wrap " begin part two.*" { + pass $gdb_test_name + } +} diff -Nru gdb-9.1/gdb/testsuite/gdb.reverse/step-indirect-call-thunk.c gdb-10.2/gdb/testsuite/gdb.reverse/step-indirect-call-thunk.c --- gdb-9.1/gdb/testsuite/gdb.reverse/step-indirect-call-thunk.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.reverse/step-indirect-call-thunk.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2018-2020 Free Software Foundation, Inc. + Copyright 2018-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.reverse/step-indirect-call-thunk.exp gdb-10.2/gdb/testsuite/gdb.reverse/step-indirect-call-thunk.exp --- gdb-9.1/gdb/testsuite/gdb.reverse/step-indirect-call-thunk.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.reverse/step-indirect-call-thunk.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2018-2020 Free Software Foundation, Inc. +# Copyright 2018-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.reverse/step-precsave.exp gdb-10.2/gdb/testsuite/gdb.reverse/step-precsave.exp --- gdb-9.1/gdb/testsuite/gdb.reverse/step-precsave.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.reverse/step-precsave.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.reverse/step-reverse.c gdb-10.2/gdb/testsuite/gdb.reverse/step-reverse.c --- gdb-9.1/gdb/testsuite/gdb.reverse/step-reverse.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.reverse/step-reverse.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2008-2020 Free Software Foundation, Inc. + Copyright 2008-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -23,7 +23,7 @@ int myglob = 0; int callee() { /* ENTER CALLEE */ - myglob++; return 0; /* ARRIVED IN CALLEE */ + return myglob++; /* ARRIVED IN CALLEE */ } /* RETURN FROM CALLEE */ /* A structure which, we hope, will need to be passed using memcpy. */ diff -Nru gdb-9.1/gdb/testsuite/gdb.reverse/step-reverse.exp gdb-10.2/gdb/testsuite/gdb.reverse/step-reverse.exp --- gdb-9.1/gdb/testsuite/gdb.reverse/step-reverse.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.reverse/step-reverse.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.reverse/time-reverse.c gdb-10.2/gdb/testsuite/gdb.reverse/time-reverse.c --- gdb-9.1/gdb/testsuite/gdb.reverse/time-reverse.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.reverse/time-reverse.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2008-2020 Free Software Foundation, Inc. + Copyright 2008-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.reverse/time-reverse.exp gdb-10.2/gdb/testsuite/gdb.reverse/time-reverse.exp --- gdb-9.1/gdb/testsuite/gdb.reverse/time-reverse.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.reverse/time-reverse.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.reverse/until-precsave.exp gdb-10.2/gdb/testsuite/gdb.reverse/until-precsave.exp --- gdb-9.1/gdb/testsuite/gdb.reverse/until-precsave.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.reverse/until-precsave.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.reverse/until-reverse.c gdb-10.2/gdb/testsuite/gdb.reverse/until-reverse.c --- gdb-9.1/gdb/testsuite/gdb.reverse/until-reverse.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.reverse/until-reverse.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2008-2020 Free Software Foundation, Inc. + Copyright 2008-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -37,7 +37,8 @@ { /* We're used by a test that requires malloc, so make sure it is in the executable. */ - (void) malloc (1); + void *p = malloc (1); + free (p); return 1; } diff -Nru gdb-9.1/gdb/testsuite/gdb.reverse/until-reverse.exp gdb-10.2/gdb/testsuite/gdb.reverse/until-reverse.exp --- gdb-9.1/gdb/testsuite/gdb.reverse/until-reverse.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.reverse/until-reverse.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.reverse/ur1.c gdb-10.2/gdb/testsuite/gdb.reverse/ur1.c --- gdb-9.1/gdb/testsuite/gdb.reverse/ur1.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.reverse/ur1.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 1992-2020 Free Software Foundation, Inc. + Copyright 1992-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.reverse/waitpid-reverse.c gdb-10.2/gdb/testsuite/gdb.reverse/waitpid-reverse.c --- gdb-9.1/gdb/testsuite/gdb.reverse/waitpid-reverse.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.reverse/waitpid-reverse.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2008-2020 Free Software Foundation, Inc. + Copyright 2008-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.reverse/waitpid-reverse.exp gdb-10.2/gdb/testsuite/gdb.reverse/waitpid-reverse.exp --- gdb-9.1/gdb/testsuite/gdb.reverse/waitpid-reverse.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.reverse/waitpid-reverse.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.reverse/watch-precsave.exp gdb-10.2/gdb/testsuite/gdb.reverse/watch-precsave.exp --- gdb-9.1/gdb/testsuite/gdb.reverse/watch-precsave.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.reverse/watch-precsave.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2009-2020 Free Software Foundation, Inc. +# Copyright 2009-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.reverse/watch-reverse.c gdb-10.2/gdb/testsuite/gdb.reverse/watch-reverse.c --- gdb-9.1/gdb/testsuite/gdb.reverse/watch-reverse.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.reverse/watch-reverse.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2008-2020 Free Software Foundation, Inc. + Copyright 2008-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.reverse/watch-reverse.exp gdb-10.2/gdb/testsuite/gdb.reverse/watch-reverse.exp --- gdb-9.1/gdb/testsuite/gdb.reverse/watch-reverse.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.reverse/watch-reverse.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.rust/expr.exp gdb-10.2/gdb/testsuite/gdb.rust/expr.exp --- gdb-9.1/gdb/testsuite/gdb.rust/expr.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.rust/expr.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2016-2020 Free Software Foundation, Inc. +# Copyright (C) 2016-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.rust/generics.exp gdb-10.2/gdb/testsuite/gdb.rust/generics.exp --- gdb-9.1/gdb/testsuite/gdb.rust/generics.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.rust/generics.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2016-2020 Free Software Foundation, Inc. +# Copyright (C) 2016-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.rust/generics.rs gdb-10.2/gdb/testsuite/gdb.rust/generics.rs --- gdb-9.1/gdb/testsuite/gdb.rust/generics.rs 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.rust/generics.rs 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2016-2020 Free Software Foundation, Inc. +// Copyright (C) 2016-2021 Free Software Foundation, Inc. // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.rust/methods.exp gdb-10.2/gdb/testsuite/gdb.rust/methods.exp --- gdb-9.1/gdb/testsuite/gdb.rust/methods.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.rust/methods.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2016-2020 Free Software Foundation, Inc. +# Copyright (C) 2016-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.rust/methods.rs gdb-10.2/gdb/testsuite/gdb.rust/methods.rs --- gdb-9.1/gdb/testsuite/gdb.rust/methods.rs 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.rust/methods.rs 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2016-2020 Free Software Foundation, Inc. +// Copyright (C) 2016-2021 Free Software Foundation, Inc. // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.rust/modules.exp gdb-10.2/gdb/testsuite/gdb.rust/modules.exp --- gdb-9.1/gdb/testsuite/gdb.rust/modules.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.rust/modules.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2016-2020 Free Software Foundation, Inc. +# Copyright (C) 2016-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.rust/modules.rs gdb-10.2/gdb/testsuite/gdb.rust/modules.rs --- gdb-9.1/gdb/testsuite/gdb.rust/modules.rs 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.rust/modules.rs 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2016-2020 Free Software Foundation, Inc. +// Copyright (C) 2016-2021 Free Software Foundation, Inc. // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -60,7 +60,8 @@ let f2 = || println!("lambda f2"); - let copy = ::TWENTY_THREE; + // Prevent linker from discarding symbol + let ptr: *const u16 = &::TWENTY_THREE; f2(); // set breakpoint here f3(); diff -Nru gdb-9.1/gdb/testsuite/gdb.rust/rust-style.exp gdb-10.2/gdb/testsuite/gdb.rust/rust-style.exp --- gdb-9.1/gdb/testsuite/gdb.rust/rust-style.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.rust/rust-style.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,44 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Test CLI output styling for Rust. + +load_lib rust-support.exp +if {[skip_rust_tests]} { + continue +} + +save_vars { env(TERM) } { + # We need an ANSI-capable terminal to get the output. + setenv TERM ansi + + standard_testfile .rs + if {[prepare_for_testing "failed to prepare" $testfile $srcfile \ + {debug rust}]} { + return -1 + } + + set line [gdb_get_line_number "breakpoint"] + if {![runto ${srcfile}:$line]} { + untested "could not run to breakpoint" + return -1 + } + + set vfield [style value variable] + set v2field [style value2 variable] + gdb_test "print v" \ + "Two\{$vfield: 23, $v2field: 97\}" + +} diff -Nru gdb-9.1/gdb/testsuite/gdb.rust/rust-style.rs gdb-10.2/gdb/testsuite/gdb.rust/rust-style.rs --- gdb-9.1/gdb/testsuite/gdb.rust/rust-style.rs 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.rust/rust-style.rs 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,29 @@ +// Copyright (C) 2020-2021 Free Software Foundation, Inc. + +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see <http://www.gnu.org/licenses/>. + +#![allow(dead_code)] +#![allow(unused_variables)] +#![allow(unused_assignments)] + +enum EnumType { + One(i32), + Two{value: i32, value2: i32}, +} + +fn main() { + let v = EnumType::Two{ value: 23, value2: 97 }; + + println!(""); // breakpoint +} diff -Nru gdb-9.1/gdb/testsuite/gdb.rust/simple.exp gdb-10.2/gdb/testsuite/gdb.rust/simple.exp --- gdb-9.1/gdb/testsuite/gdb.rust/simple.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.rust/simple.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2016-2020 Free Software Foundation, Inc. +# Copyright (C) 2016-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -45,11 +45,11 @@ gdb_test "print sizeof(c)" " = 4" gdb_test "print c = 87" " = \\(\\)" -gdb_test "print c" " = 87" +gdb_test "print c" " = 87" "print after assignment" gdb_test "print c += 3" " = \\(\\)" -gdb_test "print c" " = 90" +gdb_test "print c" " = 90" "print after plus assignment" gdb_test "print c -= 90" " = \\(\\)" -gdb_test "print c" " = 0" +gdb_test "print c" " = 0" "print after minus assignment" gdb_test "print *&c" " = 0" gdb_test "print *(&c as &i32)" " = 0" gdb_test "print *(&c as *const i32)" " = 0" @@ -239,7 +239,8 @@ set pass_pattern \ " = core::option::Option<\[a-z\]+::string::String>::Some\\(\[a-z\]+::string::String .*" -set xfail_pattern " = <error reading variable>" +set xfail_pattern \ + "( = <error reading variable>|That operation is not available on .*)" gdb_test_multiple "print str_some" "" { -re "\[\r\n\]*(?:$pass_pattern)\[\r\n\]+$gdb_prompt $" { pass $gdb_test_name @@ -289,12 +290,14 @@ " = simple::StringAtOffset {field1: \"hello\", field2: 1, field3: \"world\"}" proc test_one_slice {svar length base range} { - global hex + with_test_prefix $range { + global hex - set result " = &\\\[.*\\\] \\{data_ptr: $hex, length: $length\\}" + set result " = &\\\[.*\\\] \\{data_ptr: $hex, length: $length\\}" - gdb_test "print $svar" $result - gdb_test "print &${base}\[${range}\]" $result + gdb_test "print $svar" $result + gdb_test "print &${base}\[${range}\]" $result + } } test_one_slice slice 1 w 2..3 @@ -335,17 +338,6 @@ gdb_test "print parametrized" \ " = simple::ParametrizedStruct<i32> \\{next: simple::ParametrizedEnum<\[a-z:\]*Box<simple::ParametrizedStruct<i32>>>::Val\\{val: $hex\\}, value: 0\\}" -gdb_test "print u" " = simple::Union {f1: -1, f2: 255}" - -gdb_test_sequence "ptype/o Union" "" { - "/\\* offset | size \\*/ type = union simple::Union {" - "/\\* 1 \\*/ f1: i8," - "/\\* 1 \\*/ f2: u8," - "" - " /\\* total size \\(bytes\\): 1 \\*/" - " }" -} - gdb_test_sequence "ptype/o SimpleLayout" "" { "/\\* offset | size \\*/ type = struct simple::SimpleLayout {" "/\\* 0 | 2 \\*/ f1: u16," @@ -355,7 +347,7 @@ " }" } -gdb_test "print u2" " = simple::Union2 {name: \\\[1\\\]}" +gdb_test "print nonzero_offset" " = simple::EnumWithNonzeroOffset {a: core::option::Option<u8>::Some\\(1\\), b: core::option::Option<u8>::None}" # PR rust/23626 - this used to crash. Note that the results are # fairly lax because most existing versions of Rust (those before the @@ -375,3 +367,22 @@ } gdb_test "python print(gdb.lookup_type('simple::HiBob'))" "simple::HiBob" + +gdb_test_no_output "python e = gdb.parse_and_eval('e')" \ + "get value of e for python" +gdb_test "python print(len(e.type.fields()))" "2" +gdb_test "python print(e.type.fields()\[0\].artificial)" "True" +gdb_test "python print(e.type.fields()\[1\].name)" "Two" + +gdb_test "python print(e.type.dynamic)" "False" + +# Before LLVM 8, the rust compiler would emit two types named +# "simple::MoreComplicated" -- the C-like "underlying" enum type and +# the Rust enum. lookup_type seems to get the former, which isn't +# very useful. With later versions of LLVM, this test works +# correctly. +set v [split [rust_llvm_version] .] +if {[lindex $v 0] >= 8} { + gdb_test "python print(gdb.lookup_type('simple::MoreComplicated').dynamic)" \ + "True" +} diff -Nru gdb-9.1/gdb/testsuite/gdb.rust/simple.rs gdb-10.2/gdb/testsuite/gdb.rust/simple.rs --- gdb-9.1/gdb/testsuite/gdb.rust/simple.rs 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.rust/simple.rs 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2016-2020 Free Software Foundation, Inc. +// Copyright (C) 2016-2021 Free Software Foundation, Inc. // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -80,15 +80,6 @@ value: T } -union Union { - f1: i8, - f2: u8, -} - -pub union Union2 { - pub name: [u8; 1], -} - struct StringAtOffset { pub field1: &'static str, pub field2: i32, @@ -104,6 +95,12 @@ enum EmptyEnum {} +#[derive(Debug)] +struct EnumWithNonzeroOffset { + a: Option<u8>, + b: Option<u8>, +} + fn main () { let a = (); let b : [i32; 0] = []; @@ -138,7 +135,6 @@ let field1 = 77; let field2 = 88; - let y0 = HiBob { field1, field2 }; let univariant = Univariant::Foo {a : 1}; let univariant_anon = UnivariantAnon::Foo(1); @@ -179,12 +175,11 @@ value: 0, }; - let u = Union { f2: 255 }; let simplelayout = SimpleLayout { f1: 8, f2: 9 }; let empty_enum_value: EmptyEnum; - let u2 = Union2 { name: [1] }; + let nonzero_offset = EnumWithNonzeroOffset { a: Some(1), b: None }; println!("{}, {}", x.0, x.1); // set breakpoint here println!("{}", diff2(92, 45)); diff -Nru gdb-9.1/gdb/testsuite/gdb.rust/traits.exp gdb-10.2/gdb/testsuite/gdb.rust/traits.exp --- gdb-9.1/gdb/testsuite/gdb.rust/traits.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.rust/traits.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2017-2020 Free Software Foundation, Inc. +# Copyright (C) 2017-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.rust/traits.rs gdb-10.2/gdb/testsuite/gdb.rust/traits.rs --- gdb-9.1/gdb/testsuite/gdb.rust/traits.rs 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.rust/traits.rs 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2017-2020 Free Software Foundation, Inc. +// Copyright (C) 2017-2021 Free Software Foundation, Inc. // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.rust/union.exp gdb-10.2/gdb/testsuite/gdb.rust/union.exp --- gdb-9.1/gdb/testsuite/gdb.rust/union.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.rust/union.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,45 @@ +# Copyright (C) 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Test of "union" for Rust. + +load_lib rust-support.exp +if {[skip_rust_tests]} { + continue +} + +standard_testfile .rs +if {[prepare_for_testing "failed to prepare" $testfile $srcfile {debug rust}]} { + return -1 +} + +set line [gdb_get_line_number "set breakpoint here"] +if {![runto ${srcfile}:$line]} { + untested "could not run to breakpoint" + return -1 +} + +gdb_test "print u" " = union::Union {f1: -1, f2: 255}" + +gdb_test_sequence "ptype/o Union" "" { + "/\\* offset | size \\*/ type = union union::Union {" + "/\\* 1 \\*/ f1: i8," + "/\\* 1 \\*/ f2: u8," + "" + " /\\* total size \\(bytes\\): 1 \\*/" + " }" +} + +gdb_test "print u2" " = union::Union2 {name: \\\[1\\\]}" diff -Nru gdb-9.1/gdb/testsuite/gdb.rust/union.rs gdb-10.2/gdb/testsuite/gdb.rust/union.rs --- gdb-9.1/gdb/testsuite/gdb.rust/union.rs 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.rust/union.rs 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,35 @@ +// Copyright (C) 2020-2021 Free Software Foundation, Inc. + +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see <http://www.gnu.org/licenses/>. + +#![allow(dead_code)] +#![allow(unused_variables)] +#![allow(unused_assignments)] + + +union Union { + f1: i8, + f2: u8, +} + +pub union Union2 { + pub name: [u8; 1], +} + +fn main() { + let u = Union { f2: 255 }; + let u2 = Union2 { name: [1] }; + + println!("Hi"); // set breakpoint here +} diff -Nru gdb-9.1/gdb/testsuite/gdb.rust/unsized.exp gdb-10.2/gdb/testsuite/gdb.rust/unsized.exp --- gdb-9.1/gdb/testsuite/gdb.rust/unsized.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.rust/unsized.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2017-2020 Free Software Foundation, Inc. +# Copyright (C) 2017-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.rust/unsized.rs gdb-10.2/gdb/testsuite/gdb.rust/unsized.rs --- gdb-9.1/gdb/testsuite/gdb.rust/unsized.rs 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.rust/unsized.rs 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2017-2020 Free Software Foundation, Inc. +// Copyright (C) 2017-2021 Free Software Foundation, Inc. // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.rust/watch.exp gdb-10.2/gdb/testsuite/gdb.rust/watch.exp --- gdb-9.1/gdb/testsuite/gdb.rust/watch.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.rust/watch.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2017-2020 Free Software Foundation, Inc. +# Copyright (C) 2017-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.rust/watch.rs gdb-10.2/gdb/testsuite/gdb.rust/watch.rs --- gdb-9.1/gdb/testsuite/gdb.rust/watch.rs 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.rust/watch.rs 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2017-2020 Free Software Foundation, Inc. +// Copyright (C) 2017-2021 Free Software Foundation, Inc. // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.server/abspath.exp gdb-10.2/gdb/testsuite/gdb.server/abspath.exp --- gdb-9.1/gdb/testsuite/gdb.server/abspath.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.server/abspath.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2018-2020 Free Software Foundation, Inc. +# Copyright 2018-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.server/bkpt-other-inferior.exp gdb-10.2/gdb/testsuite/gdb.server/bkpt-other-inferior.exp --- gdb-9.1/gdb/testsuite/gdb.server/bkpt-other-inferior.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.server/bkpt-other-inferior.exp 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,93 @@ +# Copyright 2019-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Test that GDB does not access the remote target's memory when +# setting a breakpoint on a function that only exists in an inferior +# that is not bound to the remote target. + +load_lib gdbserver-support.exp + +standard_testfile server.c + +if { [skip_gdbserver_tests] } { + return 0 +} + +if { [prepare_for_testing "failed to prepare" ${binfile} "${srcfile}" \ + {debug pthreads}] } { + return +} + +# Make sure we're disconnected, in case we're testing with an +# extended-remote board, therefore already connected. +gdb_test "disconnect" ".*" + +# Leave inferior 1 with the exec target, not connected. Add another +# inferior, and connect it to gdbserver. + +gdb_test "add-inferior" "Added inferior 2" \ + "add inferior 2" +gdb_test "inferior 2" "Switching to inferior 2.*" \ + "switch to inferior 2" +gdb_test "file ${binfile}" ".*" "load file in inferior 2" + +set target_exec [gdbserver_download_current_prog] + +# Start GDBserver. +set res [gdbserver_start "" $target_exec] + +# Connect to GDBserver. +set gdbserver_protocol [lindex $res 0] +set gdbserver_gdbport [lindex $res 1] +gdb_target_cmd $gdbserver_protocol $gdbserver_gdbport + +# Discard any symbol files that we have opened. +set test "discard symbol table" +gdb_test_multiple "file" $test { + -re "A program is being debugged already..*Are you sure you want to change the file.*y or n. $" { + gdb_test "y" ".*" $test \ + {Discard symbol table from `.*'\? \(y or n\) } "y" + } +} + +# At this point: +# +# - inferior 1 has symbols, and is not connected to any target. +# - inferior 2 has no symbols, and is connected to gdbserver. + +# Setting a breakpoint at some function by name should set a +# breakpoint on inferior 1, since it has symbols, and should not +# result in any access to inferior 2's remote target. + +gdb_test_no_output "set debug remote 1" + +foreach inf_sel {1 2} { + with_test_prefix "inf $inf_sel" { + gdb_test "inferior $inf_sel" "Switching to inferior $inf_sel.*" \ + "switch to inferior" + + set test "set breakpoint" + gdb_test_multiple "break main" $test { + -re "Sending packet.*$gdb_prompt $" { + fail $test + } + -re "^break main\r\nBreakpoint .* at .*$gdb_prompt $" { + pass $test + } + } + + delete_breakpoints + } +} diff -Nru gdb-9.1/gdb/testsuite/gdb.server/connect-stopped-target.c gdb-10.2/gdb/testsuite/gdb.server/connect-stopped-target.c --- gdb-9.1/gdb/testsuite/gdb.server/connect-stopped-target.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.server/connect-stopped-target.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.server/connect-stopped-target.exp gdb-10.2/gdb/testsuite/gdb.server/connect-stopped-target.exp --- gdb-9.1/gdb/testsuite/gdb.server/connect-stopped-target.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.server/connect-stopped-target.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.server/connect-with-no-symbol-file.c gdb-10.2/gdb/testsuite/gdb.server/connect-with-no-symbol-file.c --- gdb-9.1/gdb/testsuite/gdb.server/connect-with-no-symbol-file.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.server/connect-with-no-symbol-file.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2016-2020 Free Software Foundation, Inc. + Copyright 2016-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.server/connect-with-no-symbol-file.exp gdb-10.2/gdb/testsuite/gdb.server/connect-with-no-symbol-file.exp --- gdb-9.1/gdb/testsuite/gdb.server/connect-with-no-symbol-file.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.server/connect-with-no-symbol-file.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2016-2020 Free Software Foundation, Inc. +# Copyright 2016-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.server/connect-without-multi-process.c gdb-10.2/gdb/testsuite/gdb.server/connect-without-multi-process.c --- gdb-9.1/gdb/testsuite/gdb.server/connect-without-multi-process.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.server/connect-without-multi-process.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.server/connect-without-multi-process.exp gdb-10.2/gdb/testsuite/gdb.server/connect-without-multi-process.exp --- gdb-9.1/gdb/testsuite/gdb.server/connect-without-multi-process.exp 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.server/connect-without-multi-process.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -14,7 +14,7 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. */ # Check that we can connect to GDBserver with the multiprocess -# extensions disabled, and run to main. +# extensions disabled, run to main, and finish the process. load_lib gdbserver-support.exp @@ -52,6 +52,11 @@ "target $gdbserver_protocol" gdb_test "continue" "main .*" "continue to main" + + # The W/X packets do not include the PID of the exiting process + # without the multi-process extensions. Check that we handle + # process exit correctly in that case. + gdb_continue_to_end } foreach multiprocess { "off" "auto" } { diff -Nru gdb-9.1/gdb/testsuite/gdb.server/exit-multiple-threads.c gdb-10.2/gdb/testsuite/gdb.server/exit-multiple-threads.c --- gdb-9.1/gdb/testsuite/gdb.server/exit-multiple-threads.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.server/exit-multiple-threads.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,202 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include <pthread.h> +#include <sys/types.h> +#include <stdio.h> +#include <unistd.h> +#include <stdlib.h> +#include <pthread.h> + +/* The number of threads to create. */ +int thread_count = 3; + +/* Counter accessed from threads to ensure that all threads have been + started. Is initialised to THREAD_COUNT and each thread decrements it + upon startup. */ +volatile int counter; + +/* Lock guarding COUNTER. */ +pthread_mutex_t counter_mutex = PTHREAD_MUTEX_INITIALIZER; + +/* Is initialised with our pid, GDB will read this. */ +pid_t global_pid; + +/* Just somewhere to put a breakpoint. */ +static void +breakpt () +{ + /* Nothing. */ +} + +/* Thread safe decrement of the COUNTER global. */ +static void +decrement_counter () +{ + if (pthread_mutex_lock (&counter_mutex) != 0) + abort (); + --counter; + if (pthread_mutex_unlock (&counter_mutex) != 0) + abort (); +} + +/* Thread safe read of the COUNTER global. */ +static int +read_counter () +{ + int val; + + if (pthread_mutex_lock (&counter_mutex) != 0) + abort (); + val = counter; + if (pthread_mutex_unlock (&counter_mutex) != 0) + abort (); + + return val; +} + +#if defined DO_EXIT_TEST + +/* Thread entry point. ARG is a pointer to a single integer, the ID for + this thread numbered 1 to THREAD_COUNT (a global). */ +static void * +thread_worker_exiting (void *arg) +{ + int id; + + id = *((int *) arg); + + decrement_counter (); + + if (id != thread_count) + { + int i; + + /* All threads except the last one will wait here while the test is + carried out. Don't wait forever though, just in case the test + goes wrong. */ + for (i = 0; i < 60; ++i) + sleep (1); + } + else + { + /* The last thread waits here until all other threads have been + created. */ + while (read_counter () > 0) + sleep (1); + + /* Hit the breakpoint so GDB can stop. */ + breakpt (); + + /* And exit all threads. */ + exit (0); + } + + return NULL; +} + +#define thread_worker thread_worker_exiting + +#elif defined DO_SIGNAL_TEST + +/* Thread entry point. ARG is a pointer to a single integer, the ID for + this thread numbered 1 to THREAD_COUNT (a global). */ +static void * +thread_worker_signalling (void *arg) +{ + int i, id; + + id = *((int *) arg); + + decrement_counter (); + + if (id == thread_count) + { + /* The last thread waits here until all other threads have been + created. */ + while (read_counter () > 0) + sleep (1); + + /* Hit the breakpoint so GDB can stop. */ + breakpt (); + } + + /* All threads wait here while the testsuite sends us a signal. Don't + block forever though, just in case the test goes wrong. */ + for (i = 0; i < 60; ++i) + sleep (1); + + return NULL; +} + +#define thread_worker thread_worker_signalling + +#else + +#error "Compile with DO_EXIT_TEST or DO_SIGNAL_TEST defined" + +#endif + +struct thread_info +{ + pthread_t thread; + int id; +}; + +int +main () +{ + int i, max = thread_count; + + /* Put the pid somewhere easy for GDB to read. */ + global_pid = getpid (); + + /* Space to hold all of the thread_info objects. */ + struct thread_info *info = malloc (sizeof (struct thread_info) * max); + if (info == NULL) + abort (); + + /* Initialise the counter. Don't do this under lock as we only have the + main thread at this point. */ + counter = thread_count; + + /* Create all of the threads. */ + for (i = 0; i < max; ++i) + { + struct thread_info *thr = &info[i]; + thr->id = i + 1; + if (pthread_create (&thr->thread, NULL, thread_worker, &thr->id) != 0) + abort (); + } + + /* Gather in all of the threads. This never completes, as the + final thread created will exit the process, and all of the other + threads block forever. Still, it gives the main thread something to + do. */ + for (i = 0; i < max; ++i) + { + struct thread_info *thr = &info[i]; + if (pthread_join (thr->thread, NULL) != 0) + abort (); + } + + free (info); + + /* Return non-zero. We should never get here, but if we do make sure we + indicate something has gone wrong. */ + return 1; +} diff -Nru gdb-9.1/gdb/testsuite/gdb.server/exit-multiple-threads.exp gdb-10.2/gdb/testsuite/gdb.server/exit-multiple-threads.exp --- gdb-9.1/gdb/testsuite/gdb.server/exit-multiple-threads.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.server/exit-multiple-threads.exp 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,136 @@ +# This testcase is part of GDB, the GNU debugger. +# +# Copyright 2020-2021 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Test that GDB can handle receiving the W and X packets for a target +# with multiple threads, but only a single inferior. +# +# Specifically, check GDB handles this case where multi-process +# extensions are turned off. At one point this was causing GDB to +# give a warning when the exit arrived that the remote needed to +# include a thread-id, which was not correct. + +load_lib gdbserver-support.exp + +if { [skip_gdbserver_tests] } { + verbose "skipping gdbserver tests" + return -1 +} + +standard_testfile + +# Start up GDB and GDBserver debugging EXECUTABLE. When +# DISABLE_MULTI_PROCESS is true then disable GDB's remote +# multi-process support, otherwise, leave it enabled. +# +# Places a breakpoint in function 'breakpt' and then continues to the +# breakpoint, at which point it runs 'info threads'. +proc prepare_for_test { executable disable_multi_process } { + clean_restart ${executable} + + # Make sure we're disconnected, in case we're testing with an + # extended-remote board, therefore already connected. + gdb_test "disconnect" ".*" + + # Disable XML-based thread listing, and possible the multi-process + # extensions. + gdb_test_no_output "set remote threads-packet off" + if { $disable_multi_process } { + gdb_test_no_output "set remote multiprocess-feature-packet off" + } + + # Start gdbserver and connect. + set res [gdbserver_start "" $executable] + set gdbserver_protocol [lindex $res 0] + set gdbserver_gdbport [lindex $res 1] + set res [gdb_target_cmd $gdbserver_protocol $gdbserver_gdbport] + if ![gdb_assert {$res == 0} "connect"] { + return + } + + # Run until we hit the breakpt function, then list all threads. + gdb_breakpoint "breakpt" + gdb_continue_to_breakpoint "breakpt" + gdb_test "info threads" ".*" +} + +# Run the tests where the inferior exits normally (the W packet) while +# we have multiple-threads. EXECUTABLE is the binary under test, and +# DISABLE_MULTI_PROCESS indicates if we should disable GDB's remote +# multi-process support. +proc run_exit_test { executable disable_multi_process } { + global decimal + + prepare_for_test ${executable} ${disable_multi_process} + + # Finally, continue until the process exits, ensure we don't see + # any warnings between "Continuing." and the final process has + # exited message. + if { $disable_multi_process } { + set process_pattern "Remote target" + } else { + set process_pattern "process $decimal" + } + gdb_test "continue" \ + [multi_line \ + "Continuing\\." \ + "\\\[Inferior $decimal \\\(${process_pattern}\\\) exited normally\\\]" ] \ + "continue until process exits" +} + +# Run the tests where the inferior exits with a signal (the X packet) +# while we have multiple-threads. EXECUTABLE is the binary under +# test, and DISABLE_MULTI_PROCESS indicates if we should disable GDB's +# remote multi-process support. +proc run_signal_test { executable disable_multi_process } { + global decimal gdb_prompt + + prepare_for_test ${executable} ${disable_multi_process} + + set inf_pid [get_valueof "/d" "global_pid" "unknown"] + gdb_assert ![string eq ${inf_pid} "unknown"] "read the pid" + + # This sets the inferior running again, with all threads going + # into a long delay loop. + send_gdb "continue\n" + + # Send the inferior a signal to kill it. + sleep 1 + remote_exec target "kill -9 ${inf_pid}" + + # Process the output from GDB. + gdb_test_multiple "" "inferior exited with signal" { + -re "Continuing\\.\r\n\r\nProgram terminated with signal SIGKILL, Killed.\r\nThe program no longer exists.\r\n$gdb_prompt $" { + pass $gdb_test_name + } + } +} + +# Run all of the tests. +foreach_with_prefix test { exit signal } { + set def "DO_[string toupper $test]_TEST" + set func "run_${test}_test" + + set executable "$binfile-${test}" + if [prepare_for_testing "failed to prepare" $executable $srcfile \ + [list debug pthreads additional_flags=-D${def}]] { + return -1 + } + + foreach_with_prefix multi_process { 0 1 } { + $func ${executable} ${multi_process} + } +} diff -Nru gdb-9.1/gdb/testsuite/gdb.server/ext-attach.c gdb-10.2/gdb/testsuite/gdb.server/ext-attach.c --- gdb-9.1/gdb/testsuite/gdb.server/ext-attach.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.server/ext-attach.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2007-2020 Free Software Foundation, Inc. + Copyright 2007-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.server/ext-attach.exp gdb-10.2/gdb/testsuite/gdb.server/ext-attach.exp --- gdb-9.1/gdb/testsuite/gdb.server/ext-attach.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.server/ext-attach.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2007-2020 Free Software Foundation, Inc. +# Copyright 2007-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.server/extended-remote-restart.c gdb-10.2/gdb/testsuite/gdb.server/extended-remote-restart.c --- gdb-9.1/gdb/testsuite/gdb.server/extended-remote-restart.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.server/extended-remote-restart.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2018-2020 Free Software Foundation, Inc. + Copyright 2018-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.server/extended-remote-restart.exp gdb-10.2/gdb/testsuite/gdb.server/extended-remote-restart.exp --- gdb-9.1/gdb/testsuite/gdb.server/extended-remote-restart.exp 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.server/extended-remote-restart.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2018-2020 Free Software Foundation, Inc. +# Copyright 2018-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -88,12 +88,16 @@ gdb_breakpoint "breakpt" gdb_continue_to_breakpoint "breakpt" - # Check we have the expected inferiors. + set ws "\[ \t\]+" + set any_re "\[^\r\n\]+" + set connection_re $any_re + set executable_re $any_re + gdb_test "info inferiors" \ [multi_line \ - " Num Description Executable.*" \ - "${parent_prefix} 1 +${live_inf_ptn} \[^\r\n\]+" \ - "${child_prefix} 2 +${live_inf_ptn} \[^\r\n\]+" ] \ + " Num${ws}Description${ws}Connection${ws}Executable${ws}" \ + "${parent_prefix} 1${ws}${live_inf_ptn}${ws}${connection_re}${executable_re}" \ + "${child_prefix} 2${ws}${live_inf_ptn}${ws}${connection_re}${executable_re}" ] \ "Check inferiors at breakpoint" if { $do_kill_p } { @@ -107,13 +111,15 @@ # Check the first inferior really did die. gdb_test "info inferiors" \ [multi_line \ - " Num Description Executable.*" \ - "${parent_prefix} 1 +${parent_inf_after_kill_ptn} \[^\r\n\]+" \ - "${child_prefix} 2 +${child_inf_after_kill_ptn} \[^\r\n\]+" ] \ + " Num${ws}Description${ws}Connection${ws}Executable${ws}" \ + "${parent_prefix} 1${ws}${parent_inf_after_kill_ptn}${ws}${connection_re}${executable_re}" \ + "${child_prefix} 2${ws}${child_inf_after_kill_ptn}${ws}${connection_re}${executable_re}" ] \ "Check inferior was killed" } - # Reconnect to the target. + # Disconnect, and reconnect to the target. + gdb_test "disconnect" ".*" + if { [gdb_reconnect] == 0 } { pass "reconnect after fork" } else { diff -Nru gdb-9.1/gdb/testsuite/gdb.server/ext-restart.exp gdb-10.2/gdb/testsuite/gdb.server/ext-restart.exp --- gdb-9.1/gdb/testsuite/gdb.server/ext-restart.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.server/ext-restart.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.server/ext-run.exp gdb-10.2/gdb/testsuite/gdb.server/ext-run.exp --- gdb-9.1/gdb/testsuite/gdb.server/ext-run.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.server/ext-run.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2007-2020 Free Software Foundation, Inc. +# Copyright 2007-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.server/ext-wrapper.exp gdb-10.2/gdb/testsuite/gdb.server/ext-wrapper.exp --- gdb-9.1/gdb/testsuite/gdb.server/ext-wrapper.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.server/ext-wrapper.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.server/file-transfer.exp gdb-10.2/gdb/testsuite/gdb.server/file-transfer.exp --- gdb-9.1/gdb/testsuite/gdb.server/file-transfer.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.server/file-transfer.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2007-2020 Free Software Foundation, Inc. +# Copyright 2007-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.server/multi-ui-errors.c gdb-10.2/gdb/testsuite/gdb.server/multi-ui-errors.c --- gdb-9.1/gdb/testsuite/gdb.server/multi-ui-errors.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.server/multi-ui-errors.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,32 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2019-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include <stdio.h> +#include <unistd.h> + +int +main (void) +{ + int i; + + printf ("@@XX@@ Inferior Starting @@XX@@\n"); + + for (i = 0; i < 120; ++i) + sleep (1); + + return 0; +} diff -Nru gdb-9.1/gdb/testsuite/gdb.server/multi-ui-errors.exp gdb-10.2/gdb/testsuite/gdb.server/multi-ui-errors.exp --- gdb-9.1/gdb/testsuite/gdb.server/multi-ui-errors.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.server/multi-ui-errors.exp 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,108 @@ +# This testcase is part of GDB, the GNU debugger. +# +# Copyright 2019-2021 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Test what happens if we have multiple UIs in use, and an error +# occurs while running a GDB command. Specifically, do both UIs +# return to an interactive state, or does one (or both) of them get +# stuck in a non-interactive state. + +load_lib gdbserver-support.exp + +standard_testfile + +if {[skip_gdbserver_tests]} { + return 0 +} + +if {[prepare_for_testing "failed to prepare" ${testfile} ${srcfile}]} { + return -1 +} + +# Make sure we're disconnected, in case we're testing with an +# extended-remote board, therefore already connected. +gdb_test "disconnect" ".*" + +# Start gdbserver. +set res [gdbserver_spawn "${binfile}"] +set gdbserver_protocol [lindex $res 0] +set gdbserver_gdbport [lindex $res 1] +set gdbserver_pid [exp_pid -i $server_spawn_id] + +# Save the main UI's spawn ID. +set gdb_main_spawn_id $gdb_spawn_id + +# Create the new PTY for the secondary console UI, issue the 'new-ui' +# command, and wait for a prompt on the second UI. +spawn -pty +set extra_spawn_id $spawn_id +set extra_tty_name $spawn_out(slave,name) +gdb_test_multiple "new-ui console $extra_tty_name" "new-ui" { + -re "New UI allocated\r\n$gdb_prompt $" { + pass $gdb_test_name + } +} +with_spawn_id $extra_spawn_id { + gdb_test_multiple "" "initial prompt on extra console" { + -re "$gdb_prompt $" { + pass $gdb_test_name + } + } +} + +# Connect to the remote and continue its execution from the other UI. +with_spawn_id $extra_spawn_id { + gdb_test "target $gdbserver_protocol $gdbserver_gdbport" ".*" \ + "connect to gdbserver" + send_gdb "continue\n" +} + +# We're going to kill the gdbserver, but before we do, lets make sure +# that the inferior has started executing. +with_spawn_id $server_spawn_id { + gdb_test_multiple "" "ensure inferior is running" { + -re "@@XX@@ Inferior Starting @@XX@@" { + pass $gdb_test_name + } + timeout { + fail $gdb_test_name + } + } +} + +# Interact with the main UI. +with_spawn_id $gdb_main_spawn_id { + gdb_test "echo hello\\n" "hello" "interact with GDB's main UI" +} + +# Now kill the gdbserver. +remote_exec target "kill -9 $gdbserver_pid" + +# We expect to land back at a GDB prompt in both UIs, however there is +# currently an issue that in the original UI GDB doesn't reprint its +# prompt. That said, getting a prompt isn't the point of this test. +# The point is that we should be able to interact with GDB from either +# interpreter now. + +with_spawn_id $gdb_main_spawn_id { + gdb_test "echo" "" \ + "main UI, prompt after gdbserver dies" +} + +with_spawn_id $extra_spawn_id { + gdb_test "echo" "" \ + "extra UI, prompt after gdbserver dies" +} diff -Nru gdb-9.1/gdb/testsuite/gdb.server/non-existing-program.exp gdb-10.2/gdb/testsuite/gdb.server/non-existing-program.exp --- gdb-9.1/gdb/testsuite/gdb.server/non-existing-program.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.server/non-existing-program.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.server/normal.c gdb-10.2/gdb/testsuite/gdb.server/normal.c --- gdb-9.1/gdb/testsuite/gdb.server/normal.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.server/normal.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.server/no-thread-db.c gdb-10.2/gdb/testsuite/gdb.server/no-thread-db.c --- gdb-9.1/gdb/testsuite/gdb.server/no-thread-db.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.server/no-thread-db.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. Contributed by Intel Corporation. diff -Nru gdb-9.1/gdb/testsuite/gdb.server/no-thread-db.exp gdb-10.2/gdb/testsuite/gdb.server/no-thread-db.exp --- gdb-9.1/gdb/testsuite/gdb.server/no-thread-db.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.server/no-thread-db.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. # -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # # Contributed by Intel Corporation. # diff -Nru gdb-9.1/gdb/testsuite/gdb.server/reconnect-ctrl-c.c gdb-10.2/gdb/testsuite/gdb.server/reconnect-ctrl-c.c --- gdb-9.1/gdb/testsuite/gdb.server/reconnect-ctrl-c.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.server/reconnect-ctrl-c.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2017-2020 Free Software Foundation, Inc. + Copyright 2017-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.server/reconnect-ctrl-c.exp gdb-10.2/gdb/testsuite/gdb.server/reconnect-ctrl-c.exp --- gdb-9.1/gdb/testsuite/gdb.server/reconnect-ctrl-c.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.server/reconnect-ctrl-c.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. # -# Copyright 2017-2020 Free Software Foundation, Inc. +# Copyright 2017-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.server/run-without-local-binary.exp gdb-10.2/gdb/testsuite/gdb.server/run-without-local-binary.exp --- gdb-9.1/gdb/testsuite/gdb.server/run-without-local-binary.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.server/run-without-local-binary.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2017-2020 Free Software Foundation, Inc. +# Copyright 2017-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.server/server.c gdb-10.2/gdb/testsuite/gdb.server/server.c --- gdb-9.1/gdb/testsuite/gdb.server/server.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.server/server.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2005-2020 Free Software Foundation, Inc. + Copyright 2005-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.server/server-connect.exp gdb-10.2/gdb/testsuite/gdb.server/server-connect.exp --- gdb-9.1/gdb/testsuite/gdb.server/server-connect.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.server/server-connect.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. # -# Copyright 2018-2020 Free Software Foundation, Inc. +# Copyright 2018-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.server/server-exec-info.exp gdb-10.2/gdb/testsuite/gdb.server/server-exec-info.exp --- gdb-9.1/gdb/testsuite/gdb.server/server-exec-info.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.server/server-exec-info.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2012-2020 Free Software Foundation, Inc. +# Copyright (C) 2012-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.server/server-kill.c gdb-10.2/gdb/testsuite/gdb.server/server-kill.c --- gdb-9.1/gdb/testsuite/gdb.server/server-kill.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.server/server-kill.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.server/server-kill.exp gdb-10.2/gdb/testsuite/gdb.server/server-kill.exp --- gdb-9.1/gdb/testsuite/gdb.server/server-kill.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.server/server-kill.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. # -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,9 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. +# Check that GDB handles GDBserver disconnecting abruptly, in several +# scenarios. + load_lib gdbserver-support.exp standard_testfile @@ -23,40 +26,103 @@ return 0 } -if { [prepare_for_testing "failed to prepare" ${testfile}] } { +if { [build_executable "failed to prepare" ${testfile}] } { return -1 } -# Make sure we're disconnected, in case we're testing with an -# extended-remote board, therefore already connected. -gdb_test "disconnect" ".*" - -gdbserver_run "" - -# Continue past server_pid assignment. -gdb_breakpoint ${srcfile}:[gdb_get_line_number "i = 0;"] -gdb_continue_to_breakpoint "after server_pid assignment" - -# Get the pid of GDBServer. -set test "p server_pid" -gdb_test_multiple $test $test { - -re " = ($decimal)\r\n$gdb_prompt $" { - set server_pid $expect_out(1,string) - pass $test +# Spawn GDBserver, run to main, extract GDBserver's PID and save it in +# the SERVER_PID global. + +proc prepare {} { + global binfile gdb_prompt srcfile decimal + global server_pid + + clean_restart $binfile + + # Make sure we're disconnected, in case we're testing with an + # extended-remote board, therefore already connected. + gdb_test "disconnect" ".*" + + gdbserver_run "" + + # Continue past server_pid assignment. + gdb_breakpoint ${srcfile}:[gdb_get_line_number "i = 0;"] + gdb_continue_to_breakpoint "after server_pid assignment" + + # Get the pid of GDBServer. + set test "p server_pid" + set server_pid 0 + gdb_test_multiple $test $test { + -re " = ($decimal)\r\n$gdb_prompt $" { + set server_pid $expect_out(1,string) + pass $test + } + } + + if {$server_pid == 0} { + return 0 } + + return 1 } -if ![info exists server_pid] { - return -1 +# Kill GDBserver using the PID saved by prepare. + +proc kill_server {} { + global server_pid + + remote_exec target "kill -9 $server_pid" +} + +# Test issuing "tstatus" right after the connection is dropped. + +proc_with_prefix test_tstatus {} { + if ![prepare] { + return + } + + kill_server + + # Enable trace status packet which is disabled after the + # connection if the remote target doesn't support tracepoint at + # all. Otherwise, no RSP packet is sent out. + gdb_test_no_output "set remote trace-status-packet on" + + # Force GDB to talk with GDBserver, so that we can get the + # "connection closed" error. + gdb_test "tstatus" {Remote connection closed|Remote communication error\. Target disconnected\.: Connection reset by peer\.} } -remote_exec target "kill -9 $server_pid" +# Test unwinding with no debug/unwind info, right after the connection +# is dropped. + +proc_with_prefix test_unwind_nosyms {} { + if ![prepare] { + return + } + + # Remove symbols, so that we try to unwind with one of the + # heuristic unwinders, and read memory from within its sniffer. + gdb_unload + + kill_server + + gdb_test "bt" "(Target disconnected|Remote connection closed|Remote communication error).*" +} + +# Test unwinding with debug/unwind info, right after the connection is +# dropped. + +proc_with_prefix test_unwind_syms {} { + if ![prepare] { + return + } + + kill_server + + gdb_test "bt" "(Target disconnected|Remote connection closed|Remote communication error).*" +} -# Enable trace status packet which is disabled after the connection -# if the remote target doesn't support tracepoint at all. Otherwise, -# no RSP packet is sent out. -gdb_test_no_output "set remote trace-status-packet on" - -# Force GDB to talk with GDBserver, so that we can get the -# "connection closed" error. -gdb_test "tstatus" {Remote connection closed|Remote communication error\. Target disconnected\.: Connection reset by peer\.} +test_tstatus +test_unwind_nosyms +test_unwind_syms diff -Nru gdb-9.1/gdb/testsuite/gdb.server/server-kill-python.exp gdb-10.2/gdb/testsuite/gdb.server/server-kill-python.exp --- gdb-9.1/gdb/testsuite/gdb.server/server-kill-python.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.server/server-kill-python.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,88 @@ +# This testcase is part of GDB, the GNU debugger. +# +# Copyright 2019-2021 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# This test script exposes a bug where, if gdbserver dies while GDB is +# sourcing a python command like 'gdb.execute ("continue")', then GDB +# will deadlock. + +load_lib gdbserver-support.exp + +standard_testfile multi-ui-errors.c + +if {[skip_gdbserver_tests]} { + return 0 +} + +if {[build_executable "failed to prepare" ${testfile} \ + ${srcfile}] == -1} { + return -1 +} + +# Start gdbserver. +set res [gdbserver_spawn "${binfile}"] +set gdbserver_protocol [lindex $res 0] +set gdbserver_gdbport [lindex $res 1] +set gdbserver_pid [exp_pid -i $server_spawn_id] + +# Generate a python script we will later source. +set file1 [standard_output_file file1.py] +set fd [open "$file1" w] +puts $fd \ +"import gdb + +def do_gdb_stuff (): + gdb.execute ('target $gdbserver_protocol $gdbserver_gdbport') + gdb.execute ('continue') + +do_gdb_stuff()" +close $fd + +# Now start GDB, sourcing the python command file we generated above. +# Set the height and width so we don't end up at a paging prompt. +if {[gdb_spawn_with_cmdline_opts \ + "-quiet -iex \"set height 0\" -iex \"set width 0\" -ex \"source $file1\""] != 0} { + fail "spawn" + return +} + +# Wait for the inferior to start up. +with_spawn_id $server_spawn_id { + gdb_test_multiple "" "ensure inferior is running" { + -re "@@XX@@ Inferior Starting @@XX@@" { + pass $gdb_test_name + } + timeout { + fail $gdb_test_name + } + } +} + +# Now kill the gdbserver. +remote_exec target "kill -9 $gdbserver_pid" + +# Wait for GDB to return to a prompt. +gdb_test_multiple "" "landed at prompt after gdbserver dies" { + -re "$gdb_prompt $" { + pass $gdb_test_name + } + timeout { + fail "$gdb_test_name (timeout)" + } +} + +# Run a simple command to ensure we can interact with GDB. +gdb_test "echo hello\\n" "hello" "can we interact with gdb" diff -Nru gdb-9.1/gdb/testsuite/gdb.server/server-mon.exp gdb-10.2/gdb/testsuite/gdb.server/server-mon.exp --- gdb-9.1/gdb/testsuite/gdb.server/server-mon.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.server/server-mon.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2007-2020 Free Software Foundation, Inc. +# Copyright 2007-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.server/server-run.exp gdb-10.2/gdb/testsuite/gdb.server/server-run.exp --- gdb-9.1/gdb/testsuite/gdb.server/server-run.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.server/server-run.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2005-2020 Free Software Foundation, Inc. +# Copyright 2005-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.server/solib-list.exp gdb-10.2/gdb/testsuite/gdb.server/solib-list.exp --- gdb-9.1/gdb/testsuite/gdb.server/solib-list.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.server/solib-list.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -92,12 +92,28 @@ {(Are you sure you want to change the file|Load new symbol table from ".*")\? \(y or n\) } "y" set test "target $gdbserver_protocol" + set ok 0 + set new_symbol_table 0 gdb_test_multiple "target $gdbserver_protocol $gdbserver_gdbport" $test { - -re "Remote debugging using .*\r\n$gdb_prompt " { + -re "Remote debugging using" { + set ok 1 + exp_continue + } + -re {.*Load new symbol table from ".*"\? \(y or n\) } { + set new_symbol_table 1 + send_gdb "y\n" answer + exp_continue + } + -re ".*\r\n$gdb_prompt " { # Do not anchor end, there may be more output in non-stop mode. - pass $test + if ($ok) { + pass $test + } else { + fail $test + } } } + gdb_assert {$new_symbol_table == 1} gdb_test "continue" "Program received signal SIGUSR1, .*" gdb_test "sharedlibrary" ".*" diff -Nru gdb-9.1/gdb/testsuite/gdb.server/solib-list-lib.c gdb-10.2/gdb/testsuite/gdb.server/solib-list-lib.c --- gdb-9.1/gdb/testsuite/gdb.server/solib-list-lib.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.server/solib-list-lib.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.server/solib-list-main.c gdb-10.2/gdb/testsuite/gdb.server/solib-list-main.c --- gdb-9.1/gdb/testsuite/gdb.server/solib-list-main.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.server/solib-list-main.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.server/stop-reply-no-thread.c gdb-10.2/gdb/testsuite/gdb.server/stop-reply-no-thread.c --- gdb-9.1/gdb/testsuite/gdb.server/stop-reply-no-thread.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.server/stop-reply-no-thread.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2018-2020 Free Software Foundation, Inc. + Copyright 2018-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.server/stop-reply-no-thread.exp gdb-10.2/gdb/testsuite/gdb.server/stop-reply-no-thread.exp --- gdb-9.1/gdb/testsuite/gdb.server/stop-reply-no-thread.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.server/stop-reply-no-thread.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. # -# Copyright 2018-2020 Free Software Foundation, Inc. +# Copyright 2018-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -32,43 +32,75 @@ return -1 } -# Make sure we're disconnected, in case we're testing with an -# extended-remote board, therefore already connected. -gdb_test "disconnect" ".*" - -# Start GDBserver, with ";thread:NNN" in T stop replies disabled, -# emulating old gdbservers when debugging single-threaded programs. -set res [gdbserver_start "--disable-packet=Tthread" $binfile] -set gdbserver_protocol [lindex $res 0] -set gdbserver_gdbport [lindex $res 1] - -# Disable XML-based thread listing, and multi-process extensions. -gdb_test_no_output "set remote threads-packet off" -gdb_test_no_output "set remote multiprocess-feature-packet off" - -set res [gdb_target_cmd $gdbserver_protocol $gdbserver_gdbport] -if ![gdb_assert {$res == 0} "connect"] { - return -} - -# There should be only one thread listed. -set test "info threads" -gdb_test_multiple $test $test { - -re "2 Thread.*$gdb_prompt $" { - fail $test +# Run the tests with different features of GDBserver disabled. +proc run_test { disable_feature target_nonstop } { + global binfile gdb_prompt decimal + + clean_restart ${binfile} + + # Make sure we're disconnected, in case we're testing with an + # extended-remote board, therefore already connected. + gdb_test "disconnect" ".*" + + set packet_arg "" + if { $disable_feature != "" } { + set packet_arg "--disable-packet=${disable_feature}" } - -re "has terminated.*$gdb_prompt $" { - fail $test + set res [gdbserver_start $packet_arg $binfile] + set gdbserver_protocol [lindex $res 0] + set gdbserver_gdbport [lindex $res 1] + + # Disable XML-based thread listing, and multi-process extensions. + gdb_test_no_output "set remote threads-packet off" + gdb_test_no_output "set remote multiprocess-feature-packet off" + + # Set target-nonstop mode. + gdb_test_no_output "maint set target-non-stop ${target_nonstop}" + + set res [gdb_target_cmd $gdbserver_protocol $gdbserver_gdbport] + if ![gdb_assert {$res == 0} "connect"] { + return } - -re "\\\* 1\[\t \]*Thread\[^\r\n\]*\r\n$gdb_prompt $" { - pass $test + + # There should be only one thread listed. + set test "info threads" + gdb_test_multiple $test $test { + -re "2 Thread.*$gdb_prompt $" { + fail $test + } + -re "has terminated.*$gdb_prompt $" { + fail $test + } + -re "\\\* 1\[\t \]*Thread\[^\r\n\]*\r\n$gdb_prompt $" { + pass $test + } } -} -gdb_breakpoint "main" + gdb_breakpoint "main" + + # Bad GDB behaved like this: + # (gdb) c + # Cannot execute this command without a live selected thread. + # (gdb) + gdb_test "c" "Breakpoint $decimal, main.*" "continue to main" + + # Continue until exit. The server sends a 'W' with no PID. + # Bad GDB gave an error like below when target is nonstop: + # (gdb) c + # Continuing. + # No process or thread specified in stop reply: W00 + gdb_continue_to_end "" continue 1 +} -# Bad GDB behaved like this: -# (gdb) c -# Cannot execute this command without a live selected thread. -# (gdb) -gdb_test "c" "Breakpoint $decimal, main.*" "continue to main" +# Disable different features within gdbserver: +# +# Tthread: Start GDBserver, with ";thread:NNN" in T stop replies disabled, +# emulating old gdbservers when debugging single-threaded programs. +# +# T: Start GDBserver with the entire 'T' stop reply packet disabled, +# GDBserver will instead send the 'S' stop reply. +foreach_with_prefix to_disable { "" Tthread T } { + foreach_with_prefix t_nonstop { off on } { + run_test $to_disable $t_nonstop + } +} diff -Nru gdb-9.1/gdb/testsuite/gdb.server/sysroot.c gdb-10.2/gdb/testsuite/gdb.server/sysroot.c --- gdb-9.1/gdb/testsuite/gdb.server/sysroot.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.server/sysroot.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2019-2020 Free Software Foundation, Inc. + Copyright 2019-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.server/sysroot.exp gdb-10.2/gdb/testsuite/gdb.server/sysroot.exp --- gdb-9.1/gdb/testsuite/gdb.server/sysroot.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.server/sysroot.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. # -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -73,5 +73,6 @@ # Test that we can stop inside a library. gdb_breakpoint printf - gdb_test "continue" "Breakpoint $decimal.* printf .*" "continue to printf" + gdb_test "continue" "Breakpoint $decimal.* (__)?printf .*" \ + "continue to printf" } diff -Nru gdb-9.1/gdb/testsuite/gdb.server/unittest.exp gdb-10.2/gdb/testsuite/gdb.server/unittest.exp --- gdb-9.1/gdb/testsuite/gdb.server/unittest.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.server/unittest.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2017-2020 Free Software Foundation, Inc. +# Copyright 2017-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.server/wrapper.c gdb-10.2/gdb/testsuite/gdb.server/wrapper.c --- gdb-9.1/gdb/testsuite/gdb.server/wrapper.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.server/wrapper.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.server/wrapper.exp gdb-10.2/gdb/testsuite/gdb.server/wrapper.exp --- gdb-9.1/gdb/testsuite/gdb.server/wrapper.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.server/wrapper.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.stabs/exclfwd1.c gdb-10.2/gdb/testsuite/gdb.stabs/exclfwd1.c --- gdb-9.1/gdb/testsuite/gdb.stabs/exclfwd1.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.stabs/exclfwd1.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2004-2020 Free Software Foundation, Inc. + Copyright 2004-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.stabs/exclfwd2.c gdb-10.2/gdb/testsuite/gdb.stabs/exclfwd2.c --- gdb-9.1/gdb/testsuite/gdb.stabs/exclfwd2.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.stabs/exclfwd2.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2004-2020 Free Software Foundation, Inc. + Copyright 2004-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.stabs/exclfwd.exp gdb-10.2/gdb/testsuite/gdb.stabs/exclfwd.exp --- gdb-9.1/gdb/testsuite/gdb.stabs/exclfwd.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.stabs/exclfwd.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2004-2020 Free Software Foundation, Inc. +# Copyright 2004-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.stabs/exclfwd.h gdb-10.2/gdb/testsuite/gdb.stabs/exclfwd.h --- gdb-9.1/gdb/testsuite/gdb.stabs/exclfwd.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.stabs/exclfwd.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2004-2020 Free Software Foundation, Inc. + Copyright 2004-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.stabs/gdb11479.c gdb-10.2/gdb/testsuite/gdb.stabs/gdb11479.c --- gdb-9.1/gdb/testsuite/gdb.stabs/gdb11479.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.stabs/gdb11479.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. Contributed by Pierre Muller. diff -Nru gdb-9.1/gdb/testsuite/gdb.stabs/gdb11479.exp gdb-10.2/gdb/testsuite/gdb.stabs/gdb11479.exp --- gdb-9.1/gdb/testsuite/gdb.stabs/gdb11479.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.stabs/gdb11479.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.stabs/weird.exp gdb-10.2/gdb/testsuite/gdb.stabs/weird.exp --- gdb-9.1/gdb/testsuite/gdb.stabs/weird.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.stabs/weird.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1997-2020 Free Software Foundation, Inc. +# Copyright 1997-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.testsuite/foreach_with_prefix.exp gdb-10.2/gdb/testsuite/gdb.testsuite/foreach_with_prefix.exp --- gdb-9.1/gdb/testsuite/gdb.testsuite/foreach_with_prefix.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.testsuite/foreach_with_prefix.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/async.c gdb-10.2/gdb/testsuite/gdb.threads/async.c --- gdb-9.1/gdb/testsuite/gdb.threads/async.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/async.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,70 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2019-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include <stdio.h> +#include <unistd.h> +#include <stdlib.h> +#include <pthread.h> + +#define NUM 2 + +static pthread_barrier_t threads_started_barrier; + +static void * +thread_function (void *arg) +{ + pthread_barrier_wait (&threads_started_barrier); + + while (1) + { + /* Sleep a bit to give the other threads a chance to run. */ + usleep (1); /* set breakpoint here */ + } + + pthread_exit (NULL); +} + +static void +all_started (void) +{ +} + +int +main () +{ + pthread_t threads[NUM]; + long i; + + pthread_barrier_init (&threads_started_barrier, NULL, NUM + 1); + + for (i = 1; i <= NUM; i++) + { + int res; + + res = pthread_create (&threads[i - 1], + NULL, + thread_function, NULL); + } + + pthread_barrier_wait (&threads_started_barrier); + + all_started (); + + sleep (180); + + exit (EXIT_SUCCESS); +} diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/async.exp gdb-10.2/gdb/testsuite/gdb.threads/async.exp --- gdb-9.1/gdb/testsuite/gdb.threads/async.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/async.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,98 @@ +# Copyright (C) 2019-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +standard_testfile + +if {[build_executable "failed to prepare" $testfile $srcfile {debug pthreads}] == -1} { + return -1 +} + +# At this point GDB will be busy handling the breakpoint hits and +# re-resuming the program. Even if GDB internally switches thread +# context, the user should not notice it. The following part of the +# testcase ensures that. + +# Switch to thread EXPECTED_THR, and then confirm that the thread +# stays selected. + +proc test_current_thread {expected_thr} { + global decimal + global gdb_prompt + global binfile + + clean_restart $binfile + + if {![runto "all_started"]} { + fail "could not run to all_started" + return + } + + # Set a breakpoint that continuously fires but doeesn't cause a stop. + gdb_breakpoint [concat [gdb_get_line_number "set breakpoint here"] " if 0"] + + gdb_test "thread $expected_thr" "Switching to thread $expected_thr .*" \ + "switch to thread $expected_thr" + + # Continue the program in the background. + set test "continue&" + gdb_test_multiple "continue&" $test { + -re "Continuing\\.\r\n$gdb_prompt " { + pass $test + } + } + + set test "current thread is $expected_thr" + set fails 0 + for {set i 0} {$i < 10} {incr i} { + after 200 + + set cur_thread 0 + gdb_test_multiple "thread" $test { + -re "Current thread is ($decimal) .*$gdb_prompt " { + set cur_thread $expect_out(1,string) + } + } + + if {$cur_thread != $expected_thr} { + incr fails + } + } + + gdb_assert {$fails == 0} $test + + # Explicitly interrupt the target, because in all-stop/remote, + # that's all we can do when the target is running. If we don't do + # this, we'd time out trying to kill the target, while bringing + # down gdb & gdbserver. + set test "interrupt" + gdb_test_multiple $test $test { + -re "^interrupt\r\n$gdb_prompt " { + gdb_test_multiple "" $test { + -re "Thread .* received signal SIGINT, Interrupt\\." { + pass $test + } + } + } + } +} + +# Try once with each thread as current, to avoid missing a bug just +# because some part of GDB manages to switch to the right thread by +# chance. +for {set thr 1} {$thr <= 3} {incr thr} { + with_test_prefix "thread $thr" { + test_current_thread $thr + } +} diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/attach-into-signal.c gdb-10.2/gdb/testsuite/gdb.threads/attach-into-signal.c --- gdb-9.1/gdb/testsuite/gdb.threads/attach-into-signal.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/attach-into-signal.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2008-2020 Free Software Foundation, Inc. + Copyright 2008-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/attach-into-signal.exp gdb-10.2/gdb/testsuite/gdb.threads/attach-into-signal.exp --- gdb-9.1/gdb/testsuite/gdb.threads/attach-into-signal.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/attach-into-signal.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/attach-many-short-lived-threads.c gdb-10.2/gdb/testsuite/gdb.threads/attach-many-short-lived-threads.c --- gdb-9.1/gdb/testsuite/gdb.threads/attach-many-short-lived-threads.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/attach-many-short-lived-threads.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/attach-many-short-lived-threads.exp gdb-10.2/gdb/testsuite/gdb.threads/attach-many-short-lived-threads.exp --- gdb-9.1/gdb/testsuite/gdb.threads/attach-many-short-lived-threads.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/attach-many-short-lived-threads.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -108,12 +108,18 @@ sleep 1 set test "no new threads" - gdb_test_multiple "info threads" $test { - -re "New .*$gdb_prompt $" { - fail $test + set status 1 + gdb_test_multiple "info threads" $test -lbl { + -re "\r\n\[^\r\n\]*New " { + set status 0 + exp_continue } - -re "$gdb_prompt $" { - pass $test + -re -wrap "" { + if { $status == 1 } { + pass $gdb_test_name + } else { + fail $gdb_test_name + } } } diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/attach-slow-waitpid.c gdb-10.2/gdb/testsuite/gdb.threads/attach-slow-waitpid.c --- gdb-9.1/gdb/testsuite/gdb.threads/attach-slow-waitpid.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/attach-slow-waitpid.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2018-2020 Free Software Foundation, Inc. + Copyright 2018-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/attach-slow-waitpid.exp gdb-10.2/gdb/testsuite/gdb.threads/attach-slow-waitpid.exp --- gdb-9.1/gdb/testsuite/gdb.threads/attach-slow-waitpid.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/attach-slow-waitpid.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2018-2020 Free Software Foundation, Inc. +# Copyright 2018-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -88,7 +88,12 @@ set testpid [spawn_id_get_pid $test_spawn_id] # Start GDB with preload library in place. -gdb_spawn_with_ld_preload $libobj +if { [gdb_spawn_with_ld_preload $libobj] == -1 } { + # Make sure we get UNTESTED rather than UNRESOLVED. + set errcnt 0 + untested "Couldn't start GDB with preloaded lib" + return -1 +} # Load binary, and attach to running program. gdb_load ${binfile} diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/attach-stopped.c gdb-10.2/gdb/testsuite/gdb.threads/attach-stopped.c --- gdb-9.1/gdb/testsuite/gdb.threads/attach-stopped.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/attach-stopped.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2008-2020 Free Software Foundation, Inc. + Copyright 2008-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/attach-stopped.exp gdb-10.2/gdb/testsuite/gdb.threads/attach-stopped.exp --- gdb-9.1/gdb/testsuite/gdb.threads/attach-stopped.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/attach-stopped.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2008-2020 Free Software Foundation, Inc. +# Copyright 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/bp_in_thread.c gdb-10.2/gdb/testsuite/gdb.threads/bp_in_thread.c --- gdb-9.1/gdb/testsuite/gdb.threads/bp_in_thread.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/bp_in_thread.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* A small multi-threaded test case. - Copyright 2004-2020 Free Software Foundation, Inc. + Copyright 2004-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/bp_in_thread.exp gdb-10.2/gdb/testsuite/gdb.threads/bp_in_thread.exp --- gdb-9.1/gdb/testsuite/gdb.threads/bp_in_thread.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/bp_in_thread.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2004-2020 Free Software Foundation, Inc. +# Copyright (C) 2004-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/break-while-running.c gdb-10.2/gdb/testsuite/gdb.threads/break-while-running.c --- gdb-9.1/gdb/testsuite/gdb.threads/break-while-running.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/break-while-running.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/break-while-running.exp gdb-10.2/gdb/testsuite/gdb.threads/break-while-running.exp --- gdb-9.1/gdb/testsuite/gdb.threads/break-while-running.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/break-while-running.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2014-2020 Free Software Foundation, Inc. +# Copyright (C) 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/check-libthread-db.c gdb-10.2/gdb/testsuite/gdb.threads/check-libthread-db.c --- gdb-9.1/gdb/testsuite/gdb.threads/check-libthread-db.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/check-libthread-db.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2017-2020 Free Software Foundation, Inc. + Copyright 2017-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/check-libthread-db.exp gdb-10.2/gdb/testsuite/gdb.threads/check-libthread-db.exp --- gdb-9.1/gdb/testsuite/gdb.threads/check-libthread-db.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/check-libthread-db.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2017-2020 Free Software Foundation, Inc. +# Copyright 2017-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/clone-attach-detach.c gdb-10.2/gdb/testsuite/gdb.threads/clone-attach-detach.c --- gdb-9.1/gdb/testsuite/gdb.threads/clone-attach-detach.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/clone-attach-detach.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2016-2020 Free Software Foundation, Inc. + Copyright 2016-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/clone-attach-detach.exp gdb-10.2/gdb/testsuite/gdb.threads/clone-attach-detach.exp --- gdb-9.1/gdb/testsuite/gdb.threads/clone-attach-detach.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/clone-attach-detach.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2016-2020 Free Software Foundation, Inc. +# Copyright 2016-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/clone-new-thread-event.c gdb-10.2/gdb/testsuite/gdb.threads/clone-new-thread-event.c --- gdb-9.1/gdb/testsuite/gdb.threads/clone-new-thread-event.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/clone-new-thread-event.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2009-2020 Free Software Foundation, Inc. + Copyright 2009-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -43,7 +43,7 @@ } static pid_t -gettid (void) +local_gettid (void) { return syscall (__NR_gettid); } @@ -51,7 +51,7 @@ static int fn (void *unused) { - tkill (gettid (), SIGUSR1); + tkill (local_gettid (), SIGUSR1); return 0; } diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/clone-new-thread-event.exp gdb-10.2/gdb/testsuite/gdb.threads/clone-new-thread-event.exp --- gdb-9.1/gdb/testsuite/gdb.threads/clone-new-thread-event.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/clone-new-thread-event.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/clone-thread_db.c gdb-10.2/gdb/testsuite/gdb.threads/clone-thread_db.c --- gdb-9.1/gdb/testsuite/gdb.threads/clone-thread_db.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/clone-thread_db.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/clone-thread_db.exp gdb-10.2/gdb/testsuite/gdb.threads/clone-thread_db.exp --- gdb-9.1/gdb/testsuite/gdb.threads/clone-thread_db.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/clone-thread_db.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/continue-pending-after-query.c gdb-10.2/gdb/testsuite/gdb.threads/continue-pending-after-query.c --- gdb-9.1/gdb/testsuite/gdb.threads/continue-pending-after-query.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/continue-pending-after-query.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/continue-pending-after-query.exp gdb-10.2/gdb/testsuite/gdb.threads/continue-pending-after-query.exp --- gdb-9.1/gdb/testsuite/gdb.threads/continue-pending-after-query.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/continue-pending-after-query.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. # -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/continue-pending-status.c gdb-10.2/gdb/testsuite/gdb.threads/continue-pending-status.c --- gdb-9.1/gdb/testsuite/gdb.threads/continue-pending-status.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/continue-pending-status.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/continue-pending-status.exp gdb-10.2/gdb/testsuite/gdb.threads/continue-pending-status.exp --- gdb-9.1/gdb/testsuite/gdb.threads/continue-pending-status.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/continue-pending-status.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020 Free Software Foundation, Inc. +# Copyright (C) 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/corethreads.c gdb-10.2/gdb/testsuite/gdb.threads/corethreads.c --- gdb-9.1/gdb/testsuite/gdb.threads/corethreads.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/corethreads.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2011-2020 Free Software Foundation, Inc. +/* Copyright 2011-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/corethreads.exp gdb-10.2/gdb/testsuite/gdb.threads/corethreads.exp --- gdb-9.1/gdb/testsuite/gdb.threads/corethreads.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/corethreads.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/create-fail.c gdb-10.2/gdb/testsuite/gdb.threads/create-fail.c --- gdb-9.1/gdb/testsuite/gdb.threads/create-fail.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/create-fail.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/create-fail.exp gdb-10.2/gdb/testsuite/gdb.threads/create-fail.exp --- gdb-9.1/gdb/testsuite/gdb.threads/create-fail.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/create-fail.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2012-2020 Free Software Foundation, Inc. +# Copyright (C) 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/current-lwp-dead.c gdb-10.2/gdb/testsuite/gdb.threads/current-lwp-dead.c --- gdb-9.1/gdb/testsuite/gdb.threads/current-lwp-dead.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/current-lwp-dead.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2009-2020 Free Software Foundation, Inc. + Copyright 2009-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/current-lwp-dead.exp gdb-10.2/gdb/testsuite/gdb.threads/current-lwp-dead.exp --- gdb-9.1/gdb/testsuite/gdb.threads/current-lwp-dead.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/current-lwp-dead.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2009-2020 Free Software Foundation, Inc. +# Copyright 2009-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/dlopen-libpthread.c gdb-10.2/gdb/testsuite/gdb.threads/dlopen-libpthread.c --- gdb-9.1/gdb/testsuite/gdb.threads/dlopen-libpthread.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/dlopen-libpthread.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/dlopen-libpthread.exp gdb-10.2/gdb/testsuite/gdb.threads/dlopen-libpthread.exp --- gdb-9.1/gdb/testsuite/gdb.threads/dlopen-libpthread.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/dlopen-libpthread.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/dlopen-libpthread-lib.c gdb-10.2/gdb/testsuite/gdb.threads/dlopen-libpthread-lib.c --- gdb-9.1/gdb/testsuite/gdb.threads/dlopen-libpthread-lib.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/dlopen-libpthread-lib.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/execl1.c gdb-10.2/gdb/testsuite/gdb.threads/execl1.c --- gdb-9.1/gdb/testsuite/gdb.threads/execl1.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/execl1.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2008-2020 Free Software Foundation, Inc. + Copyright 2008-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/execl.c gdb-10.2/gdb/testsuite/gdb.threads/execl.c --- gdb-9.1/gdb/testsuite/gdb.threads/execl.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/execl.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2008-2020 Free Software Foundation, Inc. + Copyright 2008-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/execl.exp gdb-10.2/gdb/testsuite/gdb.threads/execl.exp --- gdb-9.1/gdb/testsuite/gdb.threads/execl.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/execl.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2008-2020 Free Software Foundation, Inc. +# Copyright (C) 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -42,6 +42,13 @@ gdb_test "info threads" "1 *Thread.*2 *Thread.*3 *Thread.*" "info threads before exec" +# Work around PR25656, where the breakpoint above sets 2 breakpoint locations: +# - one on gdb.threads/execl.c:$linenumber, and +# - one in GLIBC's execl.c:$linenumber, in __GI_execl +# Delete the breakpoint to make sure we hit main upon continue, rather than +# __GI_execl. +gdb_test_no_output "delete 2" + # When continuing from this point we'll hit the breakpoint in main() # again, this time in the exec'd process. gdb_test "continue" ".*Breakpoint 1, main.*" \ diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/fork-child-threads.c gdb-10.2/gdb/testsuite/gdb.threads/fork-child-threads.c --- gdb-9.1/gdb/testsuite/gdb.threads/fork-child-threads.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/fork-child-threads.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2008-2020 Free Software Foundation, Inc. + Copyright 2008-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/fork-child-threads.exp gdb-10.2/gdb/testsuite/gdb.threads/fork-child-threads.exp --- gdb-9.1/gdb/testsuite/gdb.threads/fork-child-threads.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/fork-child-threads.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2008-2020 Free Software Foundation, Inc. +# Copyright (C) 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/forking-threads-plus-breakpoint.c gdb-10.2/gdb/testsuite/gdb.threads/forking-threads-plus-breakpoint.c --- gdb-9.1/gdb/testsuite/gdb.threads/forking-threads-plus-breakpoint.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/forking-threads-plus-breakpoint.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -90,6 +90,8 @@ exit (1); } } + + return NULL; } /* Set this to tell the thread_breakpoint thread to exit. */ diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/forking-threads-plus-breakpoint.exp gdb-10.2/gdb/testsuite/gdb.threads/forking-threads-plus-breakpoint.exp --- gdb-9.1/gdb/testsuite/gdb.threads/forking-threads-plus-breakpoint.exp 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/forking-threads-plus-breakpoint.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020 Free Software Foundation, Inc. +# Copyright (C) 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -142,7 +142,7 @@ "no threads left" gdb_test "info inferiors" \ - "Num\[ \t\]+Description\[ \t\]+Executable\[ \t\]+\r\n\\* 1 \[^\r\n\]+" \ + "Num\[ \t\]+Description\[ \t\]+Connection\[ \t\]+Executable\[ \t\]+\r\n\\* 1 \[^\r\n\]+" \ "only inferior 1 left" } diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/fork-plus-threads.c gdb-10.2/gdb/testsuite/gdb.threads/fork-plus-threads.c --- gdb-9.1/gdb/testsuite/gdb.threads/fork-plus-threads.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/fork-plus-threads.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -33,6 +33,7 @@ thread_func (void *arg) { /* Empty. */ + return NULL; } static void diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/fork-plus-threads.exp gdb-10.2/gdb/testsuite/gdb.threads/fork-plus-threads.exp --- gdb-9.1/gdb/testsuite/gdb.threads/fork-plus-threads.exp 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/fork-plus-threads.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020 Free Software Foundation, Inc. +# Copyright (C) 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -109,7 +109,7 @@ "no threads left" gdb_test "info inferiors" \ - "Num\[ \t\]+Description\[ \t\]+Executable\[ \t\]+\r\n\\* 1 \[^\r\n\]+" \ + "Num\[ \t\]+Description\[ \t\]+Connection\[ \t\]+Executable\[ \t\]+\r\n\\* 1 \[^\r\n\]+" \ "only inferior 1 left" } diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/fork-thread-pending.c gdb-10.2/gdb/testsuite/gdb.threads/fork-thread-pending.c --- gdb-9.1/gdb/testsuite/gdb.threads/fork-thread-pending.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/fork-thread-pending.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2008-2020 Free Software Foundation, Inc. + Copyright 2008-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/fork-thread-pending.exp gdb-10.2/gdb/testsuite/gdb.threads/fork-thread-pending.exp --- gdb-9.1/gdb/testsuite/gdb.threads/fork-thread-pending.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/fork-thread-pending.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2009-2020 Free Software Foundation, Inc. +# Copyright (C) 2009-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/gcore-stale-thread.c gdb-10.2/gdb/testsuite/gdb.threads/gcore-stale-thread.c --- gdb-9.1/gdb/testsuite/gdb.threads/gcore-stale-thread.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/gcore-stale-thread.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/gcore-stale-thread.exp gdb-10.2/gdb/testsuite/gdb.threads/gcore-stale-thread.exp --- gdb-9.1/gdb/testsuite/gdb.threads/gcore-stale-thread.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/gcore-stale-thread.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/gcore-thread.exp gdb-10.2/gdb/testsuite/gdb.threads/gcore-thread.exp --- gdb-9.1/gdb/testsuite/gdb.threads/gcore-thread.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/gcore-thread.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2002-2020 Free Software Foundation, Inc. +# Copyright 2002-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/hand-call-in-threads.c gdb-10.2/gdb/testsuite/gdb.threads/hand-call-in-threads.c --- gdb-9.1/gdb/testsuite/gdb.threads/hand-call-in-threads.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/hand-call-in-threads.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Test case for hand function calls in multi-threaded program. - Copyright 2008-2020 Free Software Foundation, Inc. + Copyright 2008-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/hand-call-in-threads.exp gdb-10.2/gdb/testsuite/gdb.threads/hand-call-in-threads.exp --- gdb-9.1/gdb/testsuite/gdb.threads/hand-call-in-threads.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/hand-call-in-threads.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2004-2020 Free Software Foundation, Inc. +# Copyright (C) 2004-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/hand-call-new-thread.c gdb-10.2/gdb/testsuite/gdb.threads/hand-call-new-thread.c --- gdb-9.1/gdb/testsuite/gdb.threads/hand-call-new-thread.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/hand-call-new-thread.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -24,6 +24,7 @@ foo (void) { usleep (1); + return 0; } static void * diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/hand-call-new-thread.exp gdb-10.2/gdb/testsuite/gdb.threads/hand-call-new-thread.exp --- gdb-9.1/gdb/testsuite/gdb.threads/hand-call-new-thread.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/hand-call-new-thread.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020 Free Software Foundation, Inc. +# Copyright (C) 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/ia64-sigill.c gdb-10.2/gdb/testsuite/gdb.threads/ia64-sigill.c --- gdb-9.1/gdb/testsuite/gdb.threads/ia64-sigill.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/ia64-sigill.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/ia64-sigill.exp gdb-10.2/gdb/testsuite/gdb.threads/ia64-sigill.exp --- gdb-9.1/gdb/testsuite/gdb.threads/ia64-sigill.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/ia64-sigill.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/info-threads-cur-sal-2.c gdb-10.2/gdb/testsuite/gdb.threads/info-threads-cur-sal-2.c --- gdb-9.1/gdb/testsuite/gdb.threads/info-threads-cur-sal-2.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/info-threads-cur-sal-2.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2013-2020 Free Software Foundation, Inc. +/* Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/info-threads-cur-sal.c gdb-10.2/gdb/testsuite/gdb.threads/info-threads-cur-sal.c --- gdb-9.1/gdb/testsuite/gdb.threads/info-threads-cur-sal.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/info-threads-cur-sal.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2007-2020 Free Software Foundation, Inc. +/* Copyright 2007-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/info-threads-cur-sal.exp gdb-10.2/gdb/testsuite/gdb.threads/info-threads-cur-sal.exp --- gdb-9.1/gdb/testsuite/gdb.threads/info-threads-cur-sal.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/info-threads-cur-sal.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2013-2020 Free Software Foundation, Inc. +# Copyright (C) 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/interrupted-hand-call.c gdb-10.2/gdb/testsuite/gdb.threads/interrupted-hand-call.c --- gdb-9.1/gdb/testsuite/gdb.threads/interrupted-hand-call.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/interrupted-hand-call.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Test case for hand function calls interrupted by a signal in another thread. - Copyright 2008-2020 Free Software Foundation, Inc. + Copyright 2008-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/interrupted-hand-call.exp gdb-10.2/gdb/testsuite/gdb.threads/interrupted-hand-call.exp --- gdb-9.1/gdb/testsuite/gdb.threads/interrupted-hand-call.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/interrupted-hand-call.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2004-2020 Free Software Foundation, Inc. +# Copyright (C) 2004-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/interrupt-while-step-over.c gdb-10.2/gdb/testsuite/gdb.threads/interrupt-while-step-over.c --- gdb-9.1/gdb/testsuite/gdb.threads/interrupt-while-step-over.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/interrupt-while-step-over.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2016-2020 Free Software Foundation, Inc. + Copyright 2016-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -44,6 +44,8 @@ pthread_barrier_wait (&threads_started_barrier); infinite_loop (); + + return NULL; } void diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/interrupt-while-step-over.exp gdb-10.2/gdb/testsuite/gdb.threads/interrupt-while-step-over.exp --- gdb-9.1/gdb/testsuite/gdb.threads/interrupt-while-step-over.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/interrupt-while-step-over.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2016-2020 Free Software Foundation, Inc. +# Copyright (C) 2016-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/kill.c gdb-10.2/gdb/testsuite/gdb.threads/kill.c --- gdb-9.1/gdb/testsuite/gdb.threads/kill.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/kill.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/killed.c gdb-10.2/gdb/testsuite/gdb.threads/killed.c --- gdb-9.1/gdb/testsuite/gdb.threads/killed.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/killed.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/killed.exp gdb-10.2/gdb/testsuite/gdb.threads/killed.exp --- gdb-9.1/gdb/testsuite/gdb.threads/killed.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/killed.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2002-2020 Free Software Foundation, Inc. +# Copyright 2002-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/killed-outside.c gdb-10.2/gdb/testsuite/gdb.threads/killed-outside.c --- gdb-9.1/gdb/testsuite/gdb.threads/killed-outside.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/killed-outside.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,64 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include <pthread.h> +#include <unistd.h> +#include <stdlib.h> + +pid_t pid; + +static pthread_barrier_t threads_started_barrier; + +static void +all_started (void) +{ +} + +static void * +fun (void *dummy) +{ + int i; + + pthread_barrier_wait (&threads_started_barrier); + + for (i = 0; i < 180; i++) + sleep (1); + + pthread_exit (NULL); +} + +int +main (void) +{ + int i; + pthread_t thread; + + pid = getpid (); + + pthread_barrier_init (&threads_started_barrier, NULL, 2); + + pthread_create (&thread, NULL, fun, NULL); + + pthread_barrier_wait (&threads_started_barrier); + + all_started (); + + for (i = 0; i < 180; i++) + sleep (1); + + exit (EXIT_SUCCESS); +} diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/killed-outside.exp gdb-10.2/gdb/testsuite/gdb.threads/killed-outside.exp --- gdb-9.1/gdb/testsuite/gdb.threads/killed-outside.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/killed-outside.exp 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,57 @@ +# Copyright (C) 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# This test-case tests that continuing an inferior that has been killed +# using an external sigkill does not make gdb misbehave. + +standard_testfile + +if {[prepare_for_testing "failed to prepare" $testfile $srcfile \ + {pthreads debug}] == -1} { + return -1 +} + +if { ![runto "all_started"] } { + return -1 +} +delete_breakpoints + +set testpid [get_valueof "" "pid" -1 "get pid of inferior"] +if { $testpid == -1 } { + return -1 +} +remote_exec target "kill -9 ${testpid}" + +# Give it some time to die. +sleep 2 + +set no_such_process_msg "Couldn't get registers: No such process\." +set killed_msg "Program terminated with signal SIGKILL, Killed\." +set no_longer_exists_msg "The program no longer exists\." +set not_being_run_msg "The program is not being run\." + +gdb_test_multiple "continue" "prompt after first continue" { + -re "Continuing\.\r\n$no_such_process_msg\r\n$no_such_process_msg\r\n$gdb_prompt " { + pass $gdb_test_name + # Two times $no_such_process_msg. The bug condition was triggered, go + # check for it. + gdb_test_multiple "" "messages" { + -re ".*$killed_msg.*$no_longer_exists_msg\r\n" { + pass $gdb_test_name + gdb_test "continue" $not_being_run_msg "second continue" + } + } + } +} diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/kill.exp gdb-10.2/gdb/testsuite/gdb.threads/kill.exp --- gdb-9.1/gdb/testsuite/gdb.threads/kill.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/kill.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/leader-exit.c gdb-10.2/gdb/testsuite/gdb.threads/leader-exit.c --- gdb-9.1/gdb/testsuite/gdb.threads/leader-exit.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/leader-exit.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Clean exit of the thread group leader should not break GDB. - Copyright 2007-2020 Free Software Foundation, Inc. + Copyright 2007-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/leader-exit.exp gdb-10.2/gdb/testsuite/gdb.threads/leader-exit.exp --- gdb-9.1/gdb/testsuite/gdb.threads/leader-exit.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/leader-exit.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2007-2020 Free Software Foundation, Inc. +# Copyright (C) 2007-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/linux-dp.exp gdb-10.2/gdb/testsuite/gdb.threads/linux-dp.exp --- gdb-9.1/gdb/testsuite/gdb.threads/linux-dp.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/linux-dp.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1999-2020 Free Software Foundation, Inc. +# Copyright 1999-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/local-watch-wrong-thread.c gdb-10.2/gdb/testsuite/gdb.threads/local-watch-wrong-thread.c --- gdb-9.1/gdb/testsuite/gdb.threads/local-watch-wrong-thread.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/local-watch-wrong-thread.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/local-watch-wrong-thread.exp gdb-10.2/gdb/testsuite/gdb.threads/local-watch-wrong-thread.exp --- gdb-9.1/gdb/testsuite/gdb.threads/local-watch-wrong-thread.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/local-watch-wrong-thread.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2009-2020 Free Software Foundation, Inc. +# Copyright 2009-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/manythreads.c gdb-10.2/gdb/testsuite/gdb.threads/manythreads.c --- gdb-9.1/gdb/testsuite/gdb.threads/manythreads.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/manythreads.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Manythreads test program. - Copyright 2004-2020 Free Software Foundation, Inc. + Copyright 2004-2021 Free Software Foundation, Inc. Written by Jeff Johnston <jjohnstn@redhat.com> Contributed by Red Hat diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/manythreads.exp gdb-10.2/gdb/testsuite/gdb.threads/manythreads.exp --- gdb-9.1/gdb/testsuite/gdb.threads/manythreads.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/manythreads.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ # manythreads.exp -- Expect script to test stopping many threads -# Copyright (C) 2004-2020 Free Software Foundation, Inc. +# Copyright (C) 2004-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/multi-create.c gdb-10.2/gdb/testsuite/gdb.threads/multi-create.c --- gdb-9.1/gdb/testsuite/gdb.threads/multi-create.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/multi-create.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Create threads from multiple threads in parallel. - Copyright 2007-2020 Free Software Foundation, Inc. + Copyright 2007-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/multi-create.exp gdb-10.2/gdb/testsuite/gdb.threads/multi-create.exp --- gdb-9.1/gdb/testsuite/gdb.threads/multi-create.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/multi-create.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ # multi-create.exp -- Test creating many threads in parallel -# Copyright (C) 2007-2020 Free Software Foundation, Inc. +# Copyright (C) 2007-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/multi-create-ns-info-thr.exp gdb-10.2/gdb/testsuite/gdb.threads/multi-create-ns-info-thr.exp --- gdb-9.1/gdb/testsuite/gdb.threads/multi-create-ns-info-thr.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/multi-create-ns-info-thr.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2007-2020 Free Software Foundation, Inc. +# Copyright (C) 2007-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/multiple-step-overs.c gdb-10.2/gdb/testsuite/gdb.threads/multiple-step-overs.c --- gdb-9.1/gdb/testsuite/gdb.threads/multiple-step-overs.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/multiple-step-overs.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2009-2020 Free Software Foundation, Inc. + Copyright 2009-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/multiple-step-overs.exp gdb-10.2/gdb/testsuite/gdb.threads/multiple-step-overs.exp --- gdb-9.1/gdb/testsuite/gdb.threads/multiple-step-overs.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/multiple-step-overs.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2011-2020 Free Software Foundation, Inc. +# Copyright (C) 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/multiple-successive-infcall.c gdb-10.2/gdb/testsuite/gdb.threads/multiple-successive-infcall.c --- gdb-9.1/gdb/testsuite/gdb.threads/multiple-successive-infcall.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/multiple-successive-infcall.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2018-2020 Free Software Foundation, Inc. + Copyright 2018-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/multiple-successive-infcall.exp gdb-10.2/gdb/testsuite/gdb.threads/multiple-successive-infcall.exp --- gdb-9.1/gdb/testsuite/gdb.threads/multiple-successive-infcall.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/multiple-successive-infcall.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2018-2020 Free Software Foundation, Inc. +# Copyright (C) 2018-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/names.c gdb-10.2/gdb/testsuite/gdb.threads/names.c --- gdb-9.1/gdb/testsuite/gdb.threads/names.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/names.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/names.exp gdb-10.2/gdb/testsuite/gdb.threads/names.exp --- gdb-9.1/gdb/testsuite/gdb.threads/names.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/names.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020 Free Software Foundation, Inc. +# Copyright (C) 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/next-bp-other-thread.c gdb-10.2/gdb/testsuite/gdb.threads/next-bp-other-thread.c --- gdb-9.1/gdb/testsuite/gdb.threads/next-bp-other-thread.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/next-bp-other-thread.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/next-bp-other-thread.exp gdb-10.2/gdb/testsuite/gdb.threads/next-bp-other-thread.exp --- gdb-9.1/gdb/testsuite/gdb.threads/next-bp-other-thread.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/next-bp-other-thread.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2014-2020 Free Software Foundation, Inc. +# Copyright (C) 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/next-while-other-thread-longjmps.c gdb-10.2/gdb/testsuite/gdb.threads/next-while-other-thread-longjmps.c --- gdb-9.1/gdb/testsuite/gdb.threads/next-while-other-thread-longjmps.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/next-while-other-thread-longjmps.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/next-while-other-thread-longjmps.exp gdb-10.2/gdb/testsuite/gdb.threads/next-while-other-thread-longjmps.exp --- gdb-9.1/gdb/testsuite/gdb.threads/next-while-other-thread-longjmps.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/next-while-other-thread-longjmps.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020 Free Software Foundation, Inc. +# Copyright (C) 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/non-ldr-exc-1.c gdb-10.2/gdb/testsuite/gdb.threads/non-ldr-exc-1.c --- gdb-9.1/gdb/testsuite/gdb.threads/non-ldr-exc-1.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/non-ldr-exc-1.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2009-2020 Free Software Foundation, Inc. + Copyright 2009-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/non-ldr-exc-1.exp gdb-10.2/gdb/testsuite/gdb.threads/non-ldr-exc-1.exp --- gdb-9.1/gdb/testsuite/gdb.threads/non-ldr-exc-1.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/non-ldr-exc-1.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2009-2020 Free Software Foundation, Inc. +# Copyright 2009-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/non-ldr-exc-2.c gdb-10.2/gdb/testsuite/gdb.threads/non-ldr-exc-2.c --- gdb-9.1/gdb/testsuite/gdb.threads/non-ldr-exc-2.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/non-ldr-exc-2.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2009-2020 Free Software Foundation, Inc. + Copyright 2009-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/non-ldr-exc-2.exp gdb-10.2/gdb/testsuite/gdb.threads/non-ldr-exc-2.exp --- gdb-9.1/gdb/testsuite/gdb.threads/non-ldr-exc-2.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/non-ldr-exc-2.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2009-2020 Free Software Foundation, Inc. +# Copyright 2009-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/non-ldr-exc-3.c gdb-10.2/gdb/testsuite/gdb.threads/non-ldr-exc-3.c --- gdb-9.1/gdb/testsuite/gdb.threads/non-ldr-exc-3.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/non-ldr-exc-3.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2009-2020 Free Software Foundation, Inc. + Copyright 2009-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/non-ldr-exc-3.exp gdb-10.2/gdb/testsuite/gdb.threads/non-ldr-exc-3.exp --- gdb-9.1/gdb/testsuite/gdb.threads/non-ldr-exc-3.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/non-ldr-exc-3.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2009-2020 Free Software Foundation, Inc. +# Copyright 2009-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/non-ldr-exc-4.c gdb-10.2/gdb/testsuite/gdb.threads/non-ldr-exc-4.c --- gdb-9.1/gdb/testsuite/gdb.threads/non-ldr-exc-4.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/non-ldr-exc-4.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2009-2020 Free Software Foundation, Inc. + Copyright 2009-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/non-ldr-exc-4.exp gdb-10.2/gdb/testsuite/gdb.threads/non-ldr-exc-4.exp --- gdb-9.1/gdb/testsuite/gdb.threads/non-ldr-exc-4.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/non-ldr-exc-4.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2009-2020 Free Software Foundation, Inc. +# Copyright 2009-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/non-ldr-exit.c gdb-10.2/gdb/testsuite/gdb.threads/non-ldr-exit.c --- gdb-9.1/gdb/testsuite/gdb.threads/non-ldr-exit.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/non-ldr-exit.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Clean exit of the thread group leader should not break GDB. - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/non-ldr-exit.exp gdb-10.2/gdb/testsuite/gdb.threads/non-ldr-exit.exp --- gdb-9.1/gdb/testsuite/gdb.threads/non-ldr-exit.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/non-ldr-exit.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020 Free Software Foundation, Inc. +# Copyright (C) 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/non-stop-fair-events.c gdb-10.2/gdb/testsuite/gdb.threads/non-stop-fair-events.c --- gdb-9.1/gdb/testsuite/gdb.threads/non-stop-fair-events.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/non-stop-fair-events.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/non-stop-fair-events.exp gdb-10.2/gdb/testsuite/gdb.threads/non-stop-fair-events.exp --- gdb-9.1/gdb/testsuite/gdb.threads/non-stop-fair-events.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/non-stop-fair-events.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2014-2020 Free Software Foundation, Inc. +# Copyright (C) 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/no-unwaited-for-left.c gdb-10.2/gdb/testsuite/gdb.threads/no-unwaited-for-left.c --- gdb-9.1/gdb/testsuite/gdb.threads/no-unwaited-for-left.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/no-unwaited-for-left.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2007-2020 Free Software Foundation, Inc. +/* Copyright 2007-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/no-unwaited-for-left.exp gdb-10.2/gdb/testsuite/gdb.threads/no-unwaited-for-left.exp --- gdb-9.1/gdb/testsuite/gdb.threads/no-unwaited-for-left.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/no-unwaited-for-left.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2007-2020 Free Software Foundation, Inc. +# Copyright (C) 2007-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/omp-par-scope.c gdb-10.2/gdb/testsuite/gdb.threads/omp-par-scope.c --- gdb-9.1/gdb/testsuite/gdb.threads/omp-par-scope.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/omp-par-scope.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2017-2020 Free Software Foundation, Inc. + Copyright 2017-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -18,6 +18,28 @@ #include <stdio.h> #include <omp.h> +omp_lock_t lock; +omp_lock_t lock2; + +/* Enforce execution order between two threads using a lock. */ + +static void +omp_set_lock_in_order (int num, omp_lock_t *lock) +{ + /* Ensure that thread num 0 first sets the lock. */ + if (num == 0) + omp_set_lock (lock); + #pragma omp barrier + + /* Block thread num 1 until it can set the lock. */ + if (num == 1) + omp_set_lock (lock); + + /* This bit here is guaranteed to be executed first by thread num 0, and + once thread num 0 unsets the lock, to be executed by thread num 1. */ + ; +} + /* Testcase for checking access to variables in a single / outer scope. Make sure that variables not referred to in the parallel section are accessible from the debugger. */ @@ -31,6 +53,7 @@ #pragma omp parallel num_threads (2) shared (s1, i1) private (s2, i2) { int thread_num = omp_get_thread_num (); + omp_set_lock_in_order (thread_num, &lock); s2 = 100 * (thread_num + 1) + 2; i2 = s2 + 10; @@ -38,6 +61,8 @@ #pragma omp critical printf ("single_scope: thread_num=%d, s1=%d, i1=%d, s2=%d, i2=%d\n", thread_num, s1, i1, s2, i2); + + omp_unset_lock (&lock); } printf ("single_scope: s1=%d, s2=%d, s3=%d, i1=%d, i2=%d, i3=%d\n", @@ -67,11 +92,15 @@ private (i21) { int thread_num = omp_get_thread_num (); + omp_set_lock_in_order (thread_num, &lock); + i21 = 100 * (thread_num + 1) + 21; #pragma omp critical printf ("multi_scope: thread_num=%d, i01=%d, i11=%d, i21=%d\n", thread_num, i01, i11, i21); + + omp_unset_lock (&lock); } printf ("multi_scope: i01=%d, i02=%d, i11=%d, " @@ -105,6 +134,7 @@ #pragma omp parallel num_threads (2) shared (i, p, x) private (j, q, y) { int tn = omp_get_thread_num (); + omp_set_lock_in_order (tn, &lock); j = 1000 * (tn + 1); q = j + 1; @@ -112,6 +142,8 @@ #pragma omp critical printf ("nested_func: tn=%d: i=%d, p=%d, x=%d, j=%d, q=%d, y=%d\n", tn, i, p, x, j, q, y); + + omp_unset_lock (&lock); } } } @@ -137,6 +169,8 @@ #pragma omp parallel num_threads (2) private (l) { int num = omp_get_thread_num (); + omp_set_lock_in_order (num, &lock); + int nthr = omp_get_num_threads (); int off = num * nthr; int k = off + 101; @@ -144,23 +178,36 @@ #pragma omp parallel num_threads (2) shared (num) { int inner_num = omp_get_thread_num (); + omp_set_lock_in_order (inner_num, &lock2); + #pragma omp critical printf ("nested_parallel (inner threads): outer thread num = %d, thread num = %d\n", num, inner_num); + + omp_unset_lock (&lock2); } #pragma omp critical printf ("nested_parallel (outer threads) %d: k = %d, l = %d\n", num, k, l); + + omp_unset_lock (&lock); } } int main (int argc, char **argv) { + omp_init_lock (&lock); + omp_init_lock (&lock2); + single_scope (); multi_scope (); #if HAVE_NESTED_FUNCTION_SUPPORT nested_func (); #endif nested_parallel (); + + omp_destroy_lock (&lock); + omp_destroy_lock (&lock2); + return 0; } diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/omp-par-scope.exp gdb-10.2/gdb/testsuite/gdb.threads/omp-par-scope.exp --- gdb-9.1/gdb/testsuite/gdb.threads/omp-par-scope.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/omp-par-scope.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2017-2020 Free Software Foundation, Inc. +# Copyright 2017-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -273,7 +273,9 @@ gdb_continue_to_breakpoint "at printf" if {$have_older_gcc} { setup_xfail "*-*-*" } - set thread_num [get_valueof "" "num" "unknown"] + # Use get_local_valueof instead of get_valueof to avoid picking up + # some random 'num' in a shared library. + set thread_num [get_local_valueof "num" "unknown"] gdb_test "print file_scope_var" "= 9876" if {$have_older_gcc} { setup_xfail "*-*-*" } diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/pending-step.c gdb-10.2/gdb/testsuite/gdb.threads/pending-step.c --- gdb-9.1/gdb/testsuite/gdb.threads/pending-step.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/pending-step.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/pending-step.exp gdb-10.2/gdb/testsuite/gdb.threads/pending-step.exp --- gdb-9.1/gdb/testsuite/gdb.threads/pending-step.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/pending-step.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2009-2020 Free Software Foundation, Inc. +# Copyright (C) 2009-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/print-threads.exp gdb-10.2/gdb/testsuite/gdb.threads/print-threads.exp --- gdb-9.1/gdb/testsuite/gdb.threads/print-threads.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/print-threads.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/process-dies-while-detaching.c gdb-10.2/gdb/testsuite/gdb.threads/process-dies-while-detaching.c --- gdb-9.1/gdb/testsuite/gdb.threads/process-dies-while-detaching.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/process-dies-while-detaching.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2016-2020 Free Software Foundation, Inc. + Copyright 2016-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/process-dies-while-detaching.exp gdb-10.2/gdb/testsuite/gdb.threads/process-dies-while-detaching.exp --- gdb-9.1/gdb/testsuite/gdb.threads/process-dies-while-detaching.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/process-dies-while-detaching.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2016-2020 Free Software Foundation, Inc. +# Copyright 2016-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/process-dies-while-handling-bp.c gdb-10.2/gdb/testsuite/gdb.threads/process-dies-while-handling-bp.c --- gdb-9.1/gdb/testsuite/gdb.threads/process-dies-while-handling-bp.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/process-dies-while-handling-bp.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/process-dies-while-handling-bp.exp gdb-10.2/gdb/testsuite/gdb.threads/process-dies-while-handling-bp.exp --- gdb-9.1/gdb/testsuite/gdb.threads/process-dies-while-handling-bp.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/process-dies-while-handling-bp.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020 Free Software Foundation, Inc. +# Copyright (C) 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/pthread_cond_wait.c gdb-10.2/gdb/testsuite/gdb.threads/pthread_cond_wait.c --- gdb-9.1/gdb/testsuite/gdb.threads/pthread_cond_wait.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/pthread_cond_wait.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* A small multi-threaded test case. - Copyright 2004-2020 Free Software Foundation, Inc. + Copyright 2004-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/pthread_cond_wait.exp gdb-10.2/gdb/testsuite/gdb.threads/pthread_cond_wait.exp --- gdb-9.1/gdb/testsuite/gdb.threads/pthread_cond_wait.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/pthread_cond_wait.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2004-2020 Free Software Foundation, Inc. +# Copyright (C) 2004-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/pthreads.c gdb-10.2/gdb/testsuite/gdb.threads/pthreads.c --- gdb-9.1/gdb/testsuite/gdb.threads/pthreads.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/pthreads.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Pthreads test program. - Copyright 1996-2020 Free Software Foundation, Inc. + Copyright 1996-2021 Free Software Foundation, Inc. Written by Fred Fish of Cygnus Support Contributed by Cygnus Support diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/pthreads.exp gdb-10.2/gdb/testsuite/gdb.threads/pthreads.exp --- gdb-9.1/gdb/testsuite/gdb.threads/pthreads.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/pthreads.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/queue-signal.c gdb-10.2/gdb/testsuite/gdb.threads/queue-signal.c --- gdb-9.1/gdb/testsuite/gdb.threads/queue-signal.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/queue-signal.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/queue-signal.exp gdb-10.2/gdb/testsuite/gdb.threads/queue-signal.exp --- gdb-9.1/gdb/testsuite/gdb.threads/queue-signal.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/queue-signal.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2014-2020 Free Software Foundation, Inc. +# Copyright (C) 2014-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/reconnect-signal.c gdb-10.2/gdb/testsuite/gdb.threads/reconnect-signal.c --- gdb-9.1/gdb/testsuite/gdb.threads/reconnect-signal.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/reconnect-signal.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/reconnect-signal.exp gdb-10.2/gdb/testsuite/gdb.threads/reconnect-signal.exp --- gdb-9.1/gdb/testsuite/gdb.threads/reconnect-signal.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/reconnect-signal.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/schedlock.c gdb-10.2/gdb/testsuite/gdb.threads/schedlock.c --- gdb-9.1/gdb/testsuite/gdb.threads/schedlock.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/schedlock.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/schedlock.exp gdb-10.2/gdb/testsuite/gdb.threads/schedlock.exp --- gdb-9.1/gdb/testsuite/gdb.threads/schedlock.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/schedlock.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/siginfo-threads.c gdb-10.2/gdb/testsuite/gdb.threads/siginfo-threads.c --- gdb-9.1/gdb/testsuite/gdb.threads/siginfo-threads.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/siginfo-threads.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/siginfo-threads.exp gdb-10.2/gdb/testsuite/gdb.threads/siginfo-threads.exp --- gdb-9.1/gdb/testsuite/gdb.threads/siginfo-threads.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/siginfo-threads.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/signal-command-handle-nopass.c gdb-10.2/gdb/testsuite/gdb.threads/signal-command-handle-nopass.c --- gdb-9.1/gdb/testsuite/gdb.threads/signal-command-handle-nopass.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/signal-command-handle-nopass.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/signal-command-handle-nopass.exp gdb-10.2/gdb/testsuite/gdb.threads/signal-command-handle-nopass.exp --- gdb-9.1/gdb/testsuite/gdb.threads/signal-command-handle-nopass.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/signal-command-handle-nopass.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2014-2020 Free Software Foundation, Inc. +# Copyright (C) 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/signal-command-multiple-signals-pending.c gdb-10.2/gdb/testsuite/gdb.threads/signal-command-multiple-signals-pending.c --- gdb-9.1/gdb/testsuite/gdb.threads/signal-command-multiple-signals-pending.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/signal-command-multiple-signals-pending.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/signal-command-multiple-signals-pending.exp gdb-10.2/gdb/testsuite/gdb.threads/signal-command-multiple-signals-pending.exp --- gdb-9.1/gdb/testsuite/gdb.threads/signal-command-multiple-signals-pending.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/signal-command-multiple-signals-pending.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2014-2020 Free Software Foundation, Inc. +# Copyright (C) 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/signal-delivered-right-thread.c gdb-10.2/gdb/testsuite/gdb.threads/signal-delivered-right-thread.c --- gdb-9.1/gdb/testsuite/gdb.threads/signal-delivered-right-thread.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/signal-delivered-right-thread.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/signal-delivered-right-thread.exp gdb-10.2/gdb/testsuite/gdb.threads/signal-delivered-right-thread.exp --- gdb-9.1/gdb/testsuite/gdb.threads/signal-delivered-right-thread.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/signal-delivered-right-thread.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2014-2020 Free Software Foundation, Inc. +# Copyright (C) 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/signal-sigtrap.c gdb-10.2/gdb/testsuite/gdb.threads/signal-sigtrap.c --- gdb-9.1/gdb/testsuite/gdb.threads/signal-sigtrap.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/signal-sigtrap.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/signal-sigtrap.exp gdb-10.2/gdb/testsuite/gdb.threads/signal-sigtrap.exp --- gdb-9.1/gdb/testsuite/gdb.threads/signal-sigtrap.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/signal-sigtrap.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2014-2020 Free Software Foundation, Inc. +# Copyright (C) 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/signal-while-stepping-over-bp-other-thread.c gdb-10.2/gdb/testsuite/gdb.threads/signal-while-stepping-over-bp-other-thread.c --- gdb-9.1/gdb/testsuite/gdb.threads/signal-while-stepping-over-bp-other-thread.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/signal-while-stepping-over-bp-other-thread.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2009-2020 Free Software Foundation, Inc. + Copyright 2009-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/signal-while-stepping-over-bp-other-thread.exp gdb-10.2/gdb/testsuite/gdb.threads/signal-while-stepping-over-bp-other-thread.exp --- gdb-9.1/gdb/testsuite/gdb.threads/signal-while-stepping-over-bp-other-thread.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/signal-while-stepping-over-bp-other-thread.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2011-2020 Free Software Foundation, Inc. +# Copyright (C) 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -104,7 +104,7 @@ set test "step" gdb_test_sequence $test $test { "need to step-over" - "resume \\(step=1" + "resume_1: step=1," "signal arrived while stepping over breakpoint" "stepped to a different line" "callme" diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/sigstep-threads.c gdb-10.2/gdb/testsuite/gdb.threads/sigstep-threads.c --- gdb-9.1/gdb/testsuite/gdb.threads/sigstep-threads.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/sigstep-threads.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/sigstep-threads.exp gdb-10.2/gdb/testsuite/gdb.threads/sigstep-threads.exp --- gdb-9.1/gdb/testsuite/gdb.threads/sigstep-threads.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/sigstep-threads.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/sigthread.exp gdb-10.2/gdb/testsuite/gdb.threads/sigthread.exp --- gdb-9.1/gdb/testsuite/gdb.threads/sigthread.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/sigthread.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ # sigthread.exp -- Expect script to test thread and signal interaction -# Copyright (C) 2007-2020 Free Software Foundation, Inc. +# Copyright (C) 2007-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/slow-waitpid.c gdb-10.2/gdb/testsuite/gdb.threads/slow-waitpid.c --- gdb-9.1/gdb/testsuite/gdb.threads/slow-waitpid.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/slow-waitpid.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2018-2020 Free Software Foundation, Inc. + Copyright 2018-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/staticthreads.c gdb-10.2/gdb/testsuite/gdb.threads/staticthreads.c --- gdb-9.1/gdb/testsuite/gdb.threads/staticthreads.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/staticthreads.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This test program is part of GDB, The GNU debugger. - Copyright 2004-2020 Free Software Foundation, Inc. + Copyright 2004-2021 Free Software Foundation, Inc. Originally written by Jeff Johnston <jjohnstn@redhat.com>, contributed by Red Hat diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/staticthreads.exp gdb-10.2/gdb/testsuite/gdb.threads/staticthreads.exp --- gdb-9.1/gdb/testsuite/gdb.threads/staticthreads.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/staticthreads.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # static.exp -- test script, for GDB, the GNU debugger. -# Copyright 2004-2020 Free Software Foundation, Inc. +# Copyright 2004-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/step-bg-decr-pc-switch-thread.c gdb-10.2/gdb/testsuite/gdb.threads/step-bg-decr-pc-switch-thread.c --- gdb-9.1/gdb/testsuite/gdb.threads/step-bg-decr-pc-switch-thread.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/step-bg-decr-pc-switch-thread.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/step-bg-decr-pc-switch-thread.exp gdb-10.2/gdb/testsuite/gdb.threads/step-bg-decr-pc-switch-thread.exp --- gdb-9.1/gdb/testsuite/gdb.threads/step-bg-decr-pc-switch-thread.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/step-bg-decr-pc-switch-thread.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2014-2020 Free Software Foundation, Inc. +# Copyright (C) 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/stepi-random-signal.c gdb-10.2/gdb/testsuite/gdb.threads/stepi-random-signal.c --- gdb-9.1/gdb/testsuite/gdb.threads/stepi-random-signal.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/stepi-random-signal.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/stepi-random-signal.exp gdb-10.2/gdb/testsuite/gdb.threads/stepi-random-signal.exp --- gdb-9.1/gdb/testsuite/gdb.threads/stepi-random-signal.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/stepi-random-signal.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -87,7 +87,7 @@ set test "stepi" if {[gdb_test_multiple "stepi" "$test" { - -re "infrun: random signal" { + -re {\[infrun\] handle_signal_stop: random signal} { set seen 1 exp_continue } diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/step-over-lands-on-breakpoint.c gdb-10.2/gdb/testsuite/gdb.threads/step-over-lands-on-breakpoint.c --- gdb-9.1/gdb/testsuite/gdb.threads/step-over-lands-on-breakpoint.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/step-over-lands-on-breakpoint.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/step-over-lands-on-breakpoint.exp gdb-10.2/gdb/testsuite/gdb.threads/step-over-lands-on-breakpoint.exp --- gdb-9.1/gdb/testsuite/gdb.threads/step-over-lands-on-breakpoint.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/step-over-lands-on-breakpoint.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2014-2020 Free Software Foundation, Inc. +# Copyright (C) 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -38,7 +38,10 @@ gdb_test_no_output "set displaced-stepping $displaced" - gdb_breakpoint [gdb_get_line_number "set wait-thread breakpoint here"] + set line [gdb_get_line_number "set wait-thread breakpoint here"] + if { ![gdb_breakpoint $line] } { + return + } gdb_continue_to_breakpoint "run to wait-thread breakpoint" gdb_test "info threads" "\\\* 1 .* 2 .*" "info threads shows all threads" diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/step-over-trips-on-watchpoint.c gdb-10.2/gdb/testsuite/gdb.threads/step-over-trips-on-watchpoint.c --- gdb-9.1/gdb/testsuite/gdb.threads/step-over-trips-on-watchpoint.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/step-over-trips-on-watchpoint.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2014-2020 Free Software Foundation, Inc. + Copyright 2014-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/step-over-trips-on-watchpoint.exp gdb-10.2/gdb/testsuite/gdb.threads/step-over-trips-on-watchpoint.exp --- gdb-9.1/gdb/testsuite/gdb.threads/step-over-trips-on-watchpoint.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/step-over-trips-on-watchpoint.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2014-2020 Free Software Foundation, Inc. +# Copyright (C) 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -57,7 +57,10 @@ gdb_test_no_output "set displaced-stepping $displaced" - gdb_breakpoint [gdb_get_line_number "set wait-thread breakpoint here"] + set line [gdb_get_line_number "set wait-thread breakpoint here"] + if { ![gdb_breakpoint $line] } { + return + } gdb_continue_to_breakpoint "run to wait-thread breakpoint" gdb_test "info threads" "\\\* 1 .* 2 .*" "info threads shows all threads" diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/stop-with-handle.c gdb-10.2/gdb/testsuite/gdb.threads/stop-with-handle.c --- gdb-9.1/gdb/testsuite/gdb.threads/stop-with-handle.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/stop-with-handle.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2019-2020 Free Software Foundation, Inc. + Copyright 2019-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/stop-with-handle.exp gdb-10.2/gdb/testsuite/gdb.threads/stop-with-handle.exp --- gdb-9.1/gdb/testsuite/gdb.threads/stop-with-handle.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/stop-with-handle.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,7 +15,7 @@ # This test covers a case where SIGSTOP has been configured to be # passed to the target with GDB's 'handle' command, and then a -# multi-threaded inferior encounters an event that causes all theads +# multi-threaded inferior encounters an event that causes all threads # to be stopped. # # The problem that (used) to exist was that GDB would see the SIGSTOP, diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/switch-threads.c gdb-10.2/gdb/testsuite/gdb.threads/switch-threads.c --- gdb-9.1/gdb/testsuite/gdb.threads/switch-threads.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/switch-threads.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* A minimal multi-threaded test case. - Copyright 2003-2020 Free Software Foundation, Inc. + Copyright 2003-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/switch-threads.exp gdb-10.2/gdb/testsuite/gdb.threads/switch-threads.exp --- gdb-9.1/gdb/testsuite/gdb.threads/switch-threads.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/switch-threads.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2003-2020 Free Software Foundation, Inc. +# Copyright (C) 2003-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/threadapply.c gdb-10.2/gdb/testsuite/gdb.threads/threadapply.c --- gdb-9.1/gdb/testsuite/gdb.threads/threadapply.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/threadapply.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/threadapply.exp gdb-10.2/gdb/testsuite/gdb.threads/threadapply.exp --- gdb-9.1/gdb/testsuite/gdb.threads/threadapply.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/threadapply.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2004-2020 Free Software Foundation, Inc. +# Copyright 2004-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/thread_check.c gdb-10.2/gdb/testsuite/gdb.threads/thread_check.c --- gdb-9.1/gdb/testsuite/gdb.threads/thread_check.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/thread_check.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2004-2020 Free Software Foundation, Inc. +/* Copyright (C) 2004-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/thread_check.exp gdb-10.2/gdb/testsuite/gdb.threads/thread_check.exp --- gdb-9.1/gdb/testsuite/gdb.threads/thread_check.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/thread_check.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2004-2020 Free Software Foundation, Inc. +# Copyright (C) 2004-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/thread_events.c gdb-10.2/gdb/testsuite/gdb.threads/thread_events.c --- gdb-9.1/gdb/testsuite/gdb.threads/thread_events.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/thread_events.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2007-2020 Free Software Foundation, Inc. +/* Copyright (C) 2007-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/thread_events.exp gdb-10.2/gdb/testsuite/gdb.threads/thread_events.exp --- gdb-9.1/gdb/testsuite/gdb.threads/thread_events.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/thread_events.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2007-2020 Free Software Foundation, Inc. +# Copyright (C) 2007-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/thread-execl.c gdb-10.2/gdb/testsuite/gdb.threads/thread-execl.c --- gdb-9.1/gdb/testsuite/gdb.threads/thread-execl.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/thread-execl.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2009-2020 Free Software Foundation, Inc. + Copyright 2009-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/thread-execl.exp gdb-10.2/gdb/testsuite/gdb.threads/thread-execl.exp --- gdb-9.1/gdb/testsuite/gdb.threads/thread-execl.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/thread-execl.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2009-2020 Free Software Foundation, Inc. +# Copyright (C) 2009-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/thread-find.exp gdb-10.2/gdb/testsuite/gdb.threads/thread-find.exp --- gdb-9.1/gdb/testsuite/gdb.threads/thread-find.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/thread-find.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/thread-specific-bp.c gdb-10.2/gdb/testsuite/gdb.threads/thread-specific-bp.c --- gdb-9.1/gdb/testsuite/gdb.threads/thread-specific-bp.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/thread-specific-bp.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/thread-specific-bp.exp gdb-10.2/gdb/testsuite/gdb.threads/thread-specific-bp.exp --- gdb-9.1/gdb/testsuite/gdb.threads/thread-specific-bp.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/thread-specific-bp.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2013-2020 Free Software Foundation, Inc. +# Copyright (C) 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/thread-specific.c gdb-10.2/gdb/testsuite/gdb.threads/thread-specific.c --- gdb-9.1/gdb/testsuite/gdb.threads/thread-specific.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/thread-specific.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2004-2020 Free Software Foundation, Inc. + Copyright 2004-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/thread-specific.exp gdb-10.2/gdb/testsuite/gdb.threads/thread-specific.exp --- gdb-9.1/gdb/testsuite/gdb.threads/thread-specific.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/thread-specific.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2004-2020 Free Software Foundation, Inc. +# Copyright 2004-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/thread-unwindonsignal.exp gdb-10.2/gdb/testsuite/gdb.threads/thread-unwindonsignal.exp --- gdb-9.1/gdb/testsuite/gdb.threads/thread-unwindonsignal.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/thread-unwindonsignal.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2008-2020 Free Software Foundation, Inc. +# Copyright (C) 2008-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/threxit-hop-specific.c gdb-10.2/gdb/testsuite/gdb.threads/threxit-hop-specific.c --- gdb-9.1/gdb/testsuite/gdb.threads/threxit-hop-specific.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/threxit-hop-specific.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2009-2020 Free Software Foundation, Inc. + Copyright 2009-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/threxit-hop-specific.exp gdb-10.2/gdb/testsuite/gdb.threads/threxit-hop-specific.exp --- gdb-9.1/gdb/testsuite/gdb.threads/threxit-hop-specific.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/threxit-hop-specific.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2009-2020 Free Software Foundation, Inc. +# Copyright (C) 2009-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/tid-reuse.c gdb-10.2/gdb/testsuite/gdb.threads/tid-reuse.c --- gdb-9.1/gdb/testsuite/gdb.threads/tid-reuse.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/tid-reuse.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/tid-reuse.exp gdb-10.2/gdb/testsuite/gdb.threads/tid-reuse.exp --- gdb-9.1/gdb/testsuite/gdb.threads/tid-reuse.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/tid-reuse.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/tls2.c gdb-10.2/gdb/testsuite/gdb.threads/tls2.c --- gdb-9.1/gdb/testsuite/gdb.threads/tls2.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/tls2.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2008-2020 Free Software Foundation, Inc. + Copyright 2008-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/tls-core.c gdb-10.2/gdb/testsuite/gdb.threads/tls-core.c --- gdb-9.1/gdb/testsuite/gdb.threads/tls-core.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/tls-core.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This test is part of GDB, the GNU debugger. - Copyright 2017-2020 Free Software Foundation, Inc. + Copyright 2017-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/tls-core.exp gdb-10.2/gdb/testsuite/gdb.threads/tls-core.exp --- gdb-9.1/gdb/testsuite/gdb.threads/tls-core.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/tls-core.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2017-2020 Free Software Foundation, Inc. +# Copyright 2017-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/tls.exp gdb-10.2/gdb/testsuite/gdb.threads/tls.exp --- gdb-9.1/gdb/testsuite/gdb.threads/tls.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/tls.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ # tls.exp -- Expect script to test thread-local storage -# Copyright (C) 1992-2020 Free Software Foundation, Inc. +# Copyright (C) 1992-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -153,8 +153,14 @@ clean_restart ${binfile} -gdb_test "print a_thread_local" \ - "Cannot read .a_thread_local. without registers" +gdb_test_multiple "print a_thread_local" "" { + -re -wrap "Cannot find thread-local variables on this target" { + kfail "gdb/25807" $gdb_test_name + } + -re -wrap "Cannot read .a_thread_local. without registers" { + pass $gdb_test_name + } +} if ![runto_main] then { fail "can't run to main" diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/tls-nodebug.exp gdb-10.2/gdb/testsuite/gdb.threads/tls-nodebug.exp --- gdb-9.1/gdb/testsuite/gdb.threads/tls-nodebug.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/tls-nodebug.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ # tls.exp -- Expect script to test thread-local storage without debuginfo -# Copyright (C) 2006-2020 Free Software Foundation, Inc. +# Copyright (C) 2006-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/tls-nodebug-pie.c gdb-10.2/gdb/testsuite/gdb.threads/tls-nodebug-pie.c --- gdb-9.1/gdb/testsuite/gdb.threads/tls-nodebug-pie.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/tls-nodebug-pie.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2016-2020 Free Software Foundation, Inc. + Copyright 2016-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/tls-nodebug-pie.exp gdb-10.2/gdb/testsuite/gdb.threads/tls-nodebug-pie.exp --- gdb-9.1/gdb/testsuite/gdb.threads/tls-nodebug-pie.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/tls-nodebug-pie.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2016-2020 Free Software Foundation, Inc. +# Copyright 2016-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/tls-shared.exp gdb-10.2/gdb/testsuite/gdb.threads/tls-shared.exp --- gdb-9.1/gdb/testsuite/gdb.threads/tls-shared.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/tls-shared.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2003-2020 Free Software Foundation, Inc. +# Copyright 2003-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/tls-so_extern.c gdb-10.2/gdb/testsuite/gdb.threads/tls-so_extern.c --- gdb-9.1/gdb/testsuite/gdb.threads/tls-so_extern.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/tls-so_extern.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/tls-so_extern.exp gdb-10.2/gdb/testsuite/gdb.threads/tls-so_extern.exp --- gdb-9.1/gdb/testsuite/gdb.threads/tls-so_extern.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/tls-so_extern.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2003-2020 Free Software Foundation, Inc. +# Copyright 2003-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/tls-so_extern_main.c gdb-10.2/gdb/testsuite/gdb.threads/tls-so_extern_main.c --- gdb-9.1/gdb/testsuite/gdb.threads/tls-so_extern_main.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/tls-so_extern_main.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/tls-var.c gdb-10.2/gdb/testsuite/gdb.threads/tls-var.c --- gdb-9.1/gdb/testsuite/gdb.threads/tls-var.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/tls-var.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/tls-var.exp gdb-10.2/gdb/testsuite/gdb.threads/tls-var.exp --- gdb-9.1/gdb/testsuite/gdb.threads/tls-var.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/tls-var.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/tls-var-main.c gdb-10.2/gdb/testsuite/gdb.threads/tls-var-main.c --- gdb-9.1/gdb/testsuite/gdb.threads/tls-var-main.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/tls-var-main.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/vfork-follow-child-exec.c gdb-10.2/gdb/testsuite/gdb.threads/vfork-follow-child-exec.c --- gdb-9.1/gdb/testsuite/gdb.threads/vfork-follow-child-exec.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/vfork-follow-child-exec.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2019-2020 Free Software Foundation, Inc. + Copyright 2019-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/vfork-follow-child-exec.exp gdb-10.2/gdb/testsuite/gdb.threads/vfork-follow-child-exec.exp --- gdb-9.1/gdb/testsuite/gdb.threads/vfork-follow-child-exec.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/vfork-follow-child-exec.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2019-2020 Free Software Foundation, Inc. +# Copyright (C) 2019-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/vfork-follow-child-exit.c gdb-10.2/gdb/testsuite/gdb.threads/vfork-follow-child-exit.c --- gdb-9.1/gdb/testsuite/gdb.threads/vfork-follow-child-exit.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/vfork-follow-child-exit.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2019-2020 Free Software Foundation, Inc. + Copyright 2019-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/vfork-follow-child-exit.exp gdb-10.2/gdb/testsuite/gdb.threads/vfork-follow-child-exit.exp --- gdb-9.1/gdb/testsuite/gdb.threads/vfork-follow-child-exit.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/vfork-follow-child-exit.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2019-2020 Free Software Foundation, Inc. +# Copyright (C) 2019-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/watchpoint-fork-child.c gdb-10.2/gdb/testsuite/gdb.threads/watchpoint-fork-child.c --- gdb-9.1/gdb/testsuite/gdb.threads/watchpoint-fork-child.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/watchpoint-fork-child.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Test case for forgotten hw-watchpoints after fork()-off of a process. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -59,7 +59,9 @@ case -1: assert (0); default: +#if DEBUG printf ("parent%d: %d\n", nr, (int) child); +#endif /* Sleep for a while to possibly get incorrectly ATTACH_THREADed by GDB tracing the child fork with no longer valid thread/lwp entries of the @@ -95,7 +97,9 @@ _exit (0); case 0: +#if DEBUG printf ("child%d: %d\n", nr, (int) getpid ()); +#endif /* Let the parent signal us about its success. Be careful of races. */ diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/watchpoint-fork.exp gdb-10.2/gdb/testsuite/gdb.threads/watchpoint-fork.exp --- gdb-9.1/gdb/testsuite/gdb.threads/watchpoint-fork.exp 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/watchpoint-fork.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -17,7 +17,11 @@ set testfile watchpoint-fork +# Set DEBUG to 0 or 1 in sources +set debug 0 + proc test {type symbol} { + global debug with_test_prefix "$type" { global testfile subdir srcdir gdb_prompt @@ -30,7 +34,8 @@ set srcfile_main ${testfile}-st.c if {[build_executable $testfile.exp $executable \ [list $srcfile_main ${testfile}-${type}.c] \ - [list debug additional_flags=-D$symbol]] == -1} { + [list debug additional_flags=-D$symbol \ + additional_flags=-DDEBUG=$debug]] == -1} { return -1 } @@ -96,7 +101,11 @@ with_test_prefix "multithreaded" { set executable ${testfile}-${type}-mt set srcfile_main ${srcdir}/${subdir}/${testfile}-mt.c - if { [gdb_compile_pthreads "${srcfile_main} ${srcfile_type}" [standard_output_file ${executable}] executable [list debug "additional_flags=-D$symbol -DTHREAD"]] != "" } { + if { [gdb_compile_pthreads "${srcfile_main} ${srcfile_type}" \ + [standard_output_file ${executable}] executable \ + [list debug "additional_flags=-D$symbol" \ + "additional_flags=-DDEBUG=$debug" \ + "-DTHREAD"]] != "" } { untested "failed to compile" return } diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/watchpoint-fork.h gdb-10.2/gdb/testsuite/gdb.threads/watchpoint-fork.h --- gdb-9.1/gdb/testsuite/gdb.threads/watchpoint-fork.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/watchpoint-fork.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Test case for forgotten hw-watchpoints after fork()-off of a process. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/watchpoint-fork-mt.c gdb-10.2/gdb/testsuite/gdb.threads/watchpoint-fork-mt.c --- gdb-9.1/gdb/testsuite/gdb.threads/watchpoint-fork-mt.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/watchpoint-fork-mt.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Test case for forgotten hw-watchpoints after fork()-off of a process. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -114,8 +114,10 @@ int i; void *thread_result; +#if DEBUG setbuf (stdout, NULL); printf ("main: %d\n", (int) gettid ()); +#endif /* General hardware breakpoints and watchpoints validity. */ marker (); diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/watchpoint-fork-parent.c gdb-10.2/gdb/testsuite/gdb.threads/watchpoint-fork-parent.c --- gdb-9.1/gdb/testsuite/gdb.threads/watchpoint-fork-parent.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/watchpoint-fork-parent.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Test case for forgotten hw-watchpoints after fork()-off of a process. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -40,6 +40,7 @@ case -1: assert (0); case 0: +#if DEBUG printf ("child%d: %d\n", nr, (int) getpid ()); /* Delay to get both the "child%d" and "parent%d" message printed without a race breaking expect by its endless wait on `$gdb_prompt$': @@ -48,6 +49,7 @@ (gdb) parent2: 14223 */ i = sleep (1); assert (i == 0); +#endif /* We must not get caught here (against a forgotten breakpoint). */ var++; @@ -55,11 +57,13 @@ _exit (exit_code); default: +#if DEBUG printf ("parent%d: %d\n", nr, (int) child); /* Delay to get both the "child%d" and "parent%d" message printed, see above. */ i = sleep (1); assert (i == 0); +#endif pid_got = wait (&status); assert (pid_got == child); diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/watchpoint-fork-st.c gdb-10.2/gdb/testsuite/gdb.threads/watchpoint-fork-st.c --- gdb-9.1/gdb/testsuite/gdb.threads/watchpoint-fork-st.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/watchpoint-fork-st.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Test case for forgotten hw-watchpoints after fork()-off of a process. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -40,8 +40,10 @@ int main (void) { +#if DEBUG setbuf (stdout, NULL); printf ("main: %d\n", (int) getpid ()); +#endif /* General hardware breakpoints and watchpoints validity. */ marker (); diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/watchthreads2.c gdb-10.2/gdb/testsuite/gdb.threads/watchthreads2.c --- gdb-9.1/gdb/testsuite/gdb.threads/watchthreads2.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/watchthreads2.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2009-2020 Free Software Foundation, Inc. + Copyright 2009-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/watchthreads2.exp gdb-10.2/gdb/testsuite/gdb.threads/watchthreads2.exp --- gdb-9.1/gdb/testsuite/gdb.threads/watchthreads2.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/watchthreads2.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2009-2020 Free Software Foundation, Inc. +# Copyright 2009-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/watchthreads.c gdb-10.2/gdb/testsuite/gdb.threads/watchthreads.c --- gdb-9.1/gdb/testsuite/gdb.threads/watchthreads.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/watchthreads.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/watchthreads.exp gdb-10.2/gdb/testsuite/gdb.threads/watchthreads.exp --- gdb-9.1/gdb/testsuite/gdb.threads/watchthreads.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/watchthreads.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2004-2020 Free Software Foundation, Inc. +# Copyright 2004-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/watchthreads-reorder.c gdb-10.2/gdb/testsuite/gdb.threads/watchthreads-reorder.c --- gdb-9.1/gdb/testsuite/gdb.threads/watchthreads-reorder.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/watchthreads-reorder.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2009-2020 Free Software Foundation, Inc. + Copyright 2009-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/watchthreads-reorder.exp gdb-10.2/gdb/testsuite/gdb.threads/watchthreads-reorder.exp --- gdb-9.1/gdb/testsuite/gdb.threads/watchthreads-reorder.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/watchthreads-reorder.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2009-2020 Free Software Foundation, Inc. +# Copyright 2009-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/wp-replication.c gdb-10.2/gdb/testsuite/gdb.threads/wp-replication.c --- gdb-9.1/gdb/testsuite/gdb.threads/wp-replication.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/wp-replication.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2009-2020 Free Software Foundation, Inc. + Copyright 2009-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.threads/wp-replication.exp gdb-10.2/gdb/testsuite/gdb.threads/wp-replication.exp --- gdb-9.1/gdb/testsuite/gdb.threads/wp-replication.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.threads/wp-replication.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2009-2020 Free Software Foundation, Inc. +# Copyright 2009-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/actions.c gdb-10.2/gdb/testsuite/gdb.trace/actions.c --- gdb-9.1/gdb/testsuite/gdb.trace/actions.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/actions.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 1998-2020 Free Software Foundation, Inc. + Copyright 1998-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/actions-changed.c gdb-10.2/gdb/testsuite/gdb.trace/actions-changed.c --- gdb-9.1/gdb/testsuite/gdb.trace/actions-changed.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/actions-changed.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -18,6 +18,7 @@ int end (int i) { + return 0; } int diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/actions-changed.exp gdb-10.2/gdb/testsuite/gdb.trace/actions-changed.exp --- gdb-9.1/gdb/testsuite/gdb.trace/actions-changed.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/actions-changed.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/actions.exp gdb-10.2/gdb/testsuite/gdb.trace/actions.exp --- gdb-9.1/gdb/testsuite/gdb.trace/actions.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/actions.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1998-2020 Free Software Foundation, Inc. +# Copyright 1998-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/ax.exp gdb-10.2/gdb/testsuite/gdb.trace/ax.exp --- gdb-9.1/gdb/testsuite/gdb.trace/ax.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/ax.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/backtrace.exp gdb-10.2/gdb/testsuite/gdb.trace/backtrace.exp --- gdb-9.1/gdb/testsuite/gdb.trace/backtrace.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/backtrace.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1998-2020 Free Software Foundation, Inc. +# Copyright 1998-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/change-loc-1.c gdb-10.2/gdb/testsuite/gdb.trace/change-loc-1.c --- gdb-9.1/gdb/testsuite/gdb.trace/change-loc-1.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/change-loc-1.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/change-loc-2.c gdb-10.2/gdb/testsuite/gdb.trace/change-loc-2.c --- gdb-9.1/gdb/testsuite/gdb.trace/change-loc-2.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/change-loc-2.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/change-loc.c gdb-10.2/gdb/testsuite/gdb.trace/change-loc.c --- gdb-9.1/gdb/testsuite/gdb.trace/change-loc.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/change-loc.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/change-loc.exp gdb-10.2/gdb/testsuite/gdb.trace/change-loc.exp --- gdb-9.1/gdb/testsuite/gdb.trace/change-loc.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/change-loc.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/change-loc.h gdb-10.2/gdb/testsuite/gdb.trace/change-loc.h --- gdb-9.1/gdb/testsuite/gdb.trace/change-loc.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/change-loc.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/circ.c gdb-10.2/gdb/testsuite/gdb.trace/circ.c --- gdb-9.1/gdb/testsuite/gdb.trace/circ.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/circ.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 1998-2020 Free Software Foundation, Inc. + Copyright 1998-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/circ.exp gdb-10.2/gdb/testsuite/gdb.trace/circ.exp --- gdb-9.1/gdb/testsuite/gdb.trace/circ.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/circ.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1998-2020 Free Software Foundation, Inc. +# Copyright 1998-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/collection.c gdb-10.2/gdb/testsuite/gdb.trace/collection.c --- gdb-9.1/gdb/testsuite/gdb.trace/collection.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/collection.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 1998-2020 Free Software Foundation, Inc. + Copyright 1998-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/collection.exp gdb-10.2/gdb/testsuite/gdb.trace/collection.exp --- gdb-9.1/gdb/testsuite/gdb.trace/collection.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/collection.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1998-2020 Free Software Foundation, Inc. +# Copyright 1998-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/deltrace.exp gdb-10.2/gdb/testsuite/gdb.trace/deltrace.exp --- gdb-9.1/gdb/testsuite/gdb.trace/deltrace.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/deltrace.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1998-2020 Free Software Foundation, Inc. +# Copyright 1998-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/disconnected-tracing.c gdb-10.2/gdb/testsuite/gdb.trace/disconnected-tracing.c --- gdb-9.1/gdb/testsuite/gdb.trace/disconnected-tracing.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/disconnected-tracing.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/disconnected-tracing.exp gdb-10.2/gdb/testsuite/gdb.trace/disconnected-tracing.exp --- gdb-9.1/gdb/testsuite/gdb.trace/disconnected-tracing.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/disconnected-tracing.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/entry-values.c gdb-10.2/gdb/testsuite/gdb.trace/entry-values.c --- gdb-9.1/gdb/testsuite/gdb.trace/entry-values.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/entry-values.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/entry-values.exp gdb-10.2/gdb/testsuite/gdb.trace/entry-values.exp --- gdb-9.1/gdb/testsuite/gdb.trace/entry-values.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/entry-values.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -62,8 +62,6 @@ # returns. The only exception is JALRC, in which case execution # resumes from `insn1' instead. set call_insn {jalrc|[jb]al[sxr]*[ \t][^\r\n]+\r\n} -} elseif [is_amd64_regs_target] { - set call_insn "callq" } else { set call_insn "call" } @@ -110,7 +108,7 @@ foo_label: subprogram { {decl_file 0 udata} - {MACRO_AT_func { foo ${srcdir}/${subdir}/${srcfile} }} + {MACRO_AT_func { foo }} } { formal_parameter { {type :$int_label} diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/ftrace.c gdb-10.2/gdb/testsuite/gdb.trace/ftrace.c --- gdb-9.1/gdb/testsuite/gdb.trace/ftrace.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/ftrace.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/ftrace.exp gdb-10.2/gdb/testsuite/gdb.trace/ftrace.exp --- gdb-9.1/gdb/testsuite/gdb.trace/ftrace.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/ftrace.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/ftrace-lock.c gdb-10.2/gdb/testsuite/gdb.trace/ftrace-lock.c --- gdb-9.1/gdb/testsuite/gdb.trace/ftrace-lock.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/ftrace-lock.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/ftrace-lock.exp gdb-10.2/gdb/testsuite/gdb.trace/ftrace-lock.exp --- gdb-9.1/gdb/testsuite/gdb.trace/ftrace-lock.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/ftrace-lock.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/infotrace.exp gdb-10.2/gdb/testsuite/gdb.trace/infotrace.exp --- gdb-9.1/gdb/testsuite/gdb.trace/infotrace.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/infotrace.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1998-2020 Free Software Foundation, Inc. +# Copyright 1998-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/mi-traceframe-changed.exp gdb-10.2/gdb/testsuite/gdb.trace/mi-traceframe-changed.exp --- gdb-9.1/gdb/testsuite/gdb.trace/mi-traceframe-changed.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/mi-traceframe-changed.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/mi-trace-frame-collected.exp gdb-10.2/gdb/testsuite/gdb.trace/mi-trace-frame-collected.exp --- gdb-9.1/gdb/testsuite/gdb.trace/mi-trace-frame-collected.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/mi-trace-frame-collected.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/mi-tracepoint-changed.exp gdb-10.2/gdb/testsuite/gdb.trace/mi-tracepoint-changed.exp --- gdb-9.1/gdb/testsuite/gdb.trace/mi-tracepoint-changed.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/mi-tracepoint-changed.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/mi-trace-save.exp gdb-10.2/gdb/testsuite/gdb.trace/mi-trace-save.exp --- gdb-9.1/gdb/testsuite/gdb.trace/mi-trace-save.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/mi-trace-save.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2016-2020 Free Software Foundation, Inc. +# Copyright 2016-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/mi-trace-unavailable.exp gdb-10.2/gdb/testsuite/gdb.trace/mi-trace-unavailable.exp --- gdb-9.1/gdb/testsuite/gdb.trace/mi-trace-unavailable.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/mi-trace-unavailable.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/mi-tsv-changed.exp gdb-10.2/gdb/testsuite/gdb.trace/mi-tsv-changed.exp --- gdb-9.1/gdb/testsuite/gdb.trace/mi-tsv-changed.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/mi-tsv-changed.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/no-attach-trace.c gdb-10.2/gdb/testsuite/gdb.trace/no-attach-trace.c --- gdb-9.1/gdb/testsuite/gdb.trace/no-attach-trace.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/no-attach-trace.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2015-2020 Free Software Foundation, Inc. + Copyright 2015-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/no-attach-trace.exp gdb-10.2/gdb/testsuite/gdb.trace/no-attach-trace.exp --- gdb-9.1/gdb/testsuite/gdb.trace/no-attach-trace.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/no-attach-trace.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/packetlen.exp gdb-10.2/gdb/testsuite/gdb.trace/packetlen.exp --- gdb-9.1/gdb/testsuite/gdb.trace/packetlen.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/packetlen.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1998-2020 Free Software Foundation, Inc. +# Copyright 1998-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/passc-dyn.exp gdb-10.2/gdb/testsuite/gdb.trace/passc-dyn.exp --- gdb-9.1/gdb/testsuite/gdb.trace/passc-dyn.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/passc-dyn.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1998-2020 Free Software Foundation, Inc. +# Copyright 1998-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/passcount.exp gdb-10.2/gdb/testsuite/gdb.trace/passcount.exp --- gdb-9.1/gdb/testsuite/gdb.trace/passcount.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/passcount.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1998-2020 Free Software Foundation, Inc. +# Copyright 1998-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -166,7 +166,7 @@ \[\t \]+pass count 3 .* \[0-9\]+\[\t \]+tracepoint keep y.* in gdb_recursion_test at .*$srcfile:\[0-9\]+. \[\t \]+pass count 3 .*" \ - "4.20a: set all three passcounts to three" + "4.20a: verify all three passcounts to three" gdb_test "passcount 4 all" \ ".*$trcpt1.s pass.* 4.*$trcpt2.s pass.* 4.*$trcpt3.s pass.* 4" \ @@ -201,7 +201,7 @@ \[0-9\]+\[\t \]+tracepoint keep y.* in gdb_recursion_test at .*$srcfile:\[0-9\]+. \[\t \]+pass count 4 . \[\t \]+not installed on target." \ - "4.6: set passcount to zero" + "4.6: verify passcount to zero" # 4.7 (test a very large passcount) @@ -217,7 +217,7 @@ \[\t \]+pass count 4 .* \[0-9\]+\[\t \]+tracepoint keep y.* in gdb_recursion_test at .*$srcfile:\[0-9\]+. \[\t \]+pass count 4 .*" \ - "4.7: set passcount to large number (32767)" + "4.7: verify passcount to large number (32767)" # 4.8 set passcount for invalid tracepoint diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/pending.c gdb-10.2/gdb/testsuite/gdb.trace/pending.c --- gdb-9.1/gdb/testsuite/gdb.trace/pending.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/pending.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/pending.exp gdb-10.2/gdb/testsuite/gdb.trace/pending.exp --- gdb-9.1/gdb/testsuite/gdb.trace/pending.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/pending.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/pendshr1.c gdb-10.2/gdb/testsuite/gdb.trace/pendshr1.c --- gdb-9.1/gdb/testsuite/gdb.trace/pendshr1.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/pendshr1.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/pendshr2.c gdb-10.2/gdb/testsuite/gdb.trace/pendshr2.c --- gdb-9.1/gdb/testsuite/gdb.trace/pendshr2.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/pendshr2.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/pr16508.exp gdb-10.2/gdb/testsuite/gdb.trace/pr16508.exp --- gdb-9.1/gdb/testsuite/gdb.trace/pr16508.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/pr16508.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/qtro.c gdb-10.2/gdb/testsuite/gdb.trace/qtro.c --- gdb-9.1/gdb/testsuite/gdb.trace/qtro.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/qtro.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/qtro.exp gdb-10.2/gdb/testsuite/gdb.trace/qtro.exp --- gdb-9.1/gdb/testsuite/gdb.trace/qtro.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/qtro.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1998-2020 Free Software Foundation, Inc. +# Copyright 1998-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/range-stepping.c gdb-10.2/gdb/testsuite/gdb.trace/range-stepping.c --- gdb-9.1/gdb/testsuite/gdb.trace/range-stepping.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/range-stepping.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/range-stepping.exp gdb-10.2/gdb/testsuite/gdb.trace/range-stepping.exp --- gdb-9.1/gdb/testsuite/gdb.trace/range-stepping.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/range-stepping.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/read-memory.c gdb-10.2/gdb/testsuite/gdb.trace/read-memory.c --- gdb-9.1/gdb/testsuite/gdb.trace/read-memory.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/read-memory.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/read-memory.exp gdb-10.2/gdb/testsuite/gdb.trace/read-memory.exp --- gdb-9.1/gdb/testsuite/gdb.trace/read-memory.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/read-memory.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/report.exp gdb-10.2/gdb/testsuite/gdb.trace/report.exp --- gdb-9.1/gdb/testsuite/gdb.trace/report.exp 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/report.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1998-2020 Free Software Foundation, Inc. +# Copyright 1998-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -391,7 +391,7 @@ # There is always a thread of an inferior, either a live one or # a faked one. gdb_test "info threads" "\\* ${decimal} (process|Thread) \[0-9\.\]+\[ \t\].*" - gdb_test "info inferiors" "\\* 1 process ${decimal} \[ \t\]+${binfile}.*" + gdb_test "info inferiors" "\\* 1 process ${decimal} \[ \t\]+\[^\r\n\]*\[ \t\]+${binfile}.*" } } diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/save-trace.exp gdb-10.2/gdb/testsuite/gdb.trace/save-trace.exp --- gdb-9.1/gdb/testsuite/gdb.trace/save-trace.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/save-trace.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1998-2020 Free Software Foundation, Inc. +# Copyright 1998-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/signal.c gdb-10.2/gdb/testsuite/gdb.trace/signal.c --- gdb-9.1/gdb/testsuite/gdb.trace/signal.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/signal.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2016-2020 Free Software Foundation, Inc. + Copyright 2016-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/signal.exp gdb-10.2/gdb/testsuite/gdb.trace/signal.exp --- gdb-9.1/gdb/testsuite/gdb.trace/signal.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/signal.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2016-2020 Free Software Foundation, Inc. +# Copyright 2016-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/stap-trace.c gdb-10.2/gdb/testsuite/gdb.trace/stap-trace.c --- gdb-9.1/gdb/testsuite/gdb.trace/stap-trace.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/stap-trace.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/stap-trace.exp gdb-10.2/gdb/testsuite/gdb.trace/stap-trace.exp --- gdb-9.1/gdb/testsuite/gdb.trace/stap-trace.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/stap-trace.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/status-stop.c gdb-10.2/gdb/testsuite/gdb.trace/status-stop.c --- gdb-9.1/gdb/testsuite/gdb.trace/status-stop.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/status-stop.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/status-stop.exp gdb-10.2/gdb/testsuite/gdb.trace/status-stop.exp --- gdb-9.1/gdb/testsuite/gdb.trace/status-stop.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/status-stop.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/strace.c gdb-10.2/gdb/testsuite/gdb.trace/strace.c --- gdb-9.1/gdb/testsuite/gdb.trace/strace.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/strace.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/strace.exp gdb-10.2/gdb/testsuite/gdb.trace/strace.exp --- gdb-9.1/gdb/testsuite/gdb.trace/strace.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/strace.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or @@ -242,7 +242,7 @@ "ust/bar\[\t \]+y\[\t \]+$hex .*ust/bar2\[\t \]+y\[\t \]+$hex.*" \ "info static-tracepoint-markers 2" - # Set breapoints or tracepoints. + # Set breakpoints or tracepoints. set test "${type} on marker bar" gdb_test_multiple "${type} *${marker_bar_addr}" $test { -re "\(Fast trace|Trace|Break\)point \[0-9\]+ at ${hex}: file.*\r\n$gdb_prompt $" { diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/tfile.c gdb-10.2/gdb/testsuite/gdb.trace/tfile.c --- gdb-9.1/gdb/testsuite/gdb.trace/tfile.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/tfile.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/tfile.exp gdb-10.2/gdb/testsuite/gdb.trace/tfile.exp --- gdb-9.1/gdb/testsuite/gdb.trace/tfile.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/tfile.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/tfind.exp gdb-10.2/gdb/testsuite/gdb.trace/tfind.exp --- gdb-9.1/gdb/testsuite/gdb.trace/tfind.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/tfind.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1998-2020 Free Software Foundation, Inc. +# Copyright 1998-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/trace-break.c gdb-10.2/gdb/testsuite/gdb.trace/trace-break.c --- gdb-9.1/gdb/testsuite/gdb.trace/trace-break.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/trace-break.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/trace-break.exp gdb-10.2/gdb/testsuite/gdb.trace/trace-break.exp --- gdb-9.1/gdb/testsuite/gdb.trace/trace-break.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/trace-break.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/trace-buffer-size.c gdb-10.2/gdb/testsuite/gdb.trace/trace-buffer-size.c --- gdb-9.1/gdb/testsuite/gdb.trace/trace-buffer-size.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/trace-buffer-size.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/trace-buffer-size.exp gdb-10.2/gdb/testsuite/gdb.trace/trace-buffer-size.exp --- gdb-9.1/gdb/testsuite/gdb.trace/trace-buffer-size.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/trace-buffer-size.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1998-2020 Free Software Foundation, Inc. +# Copyright 1998-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/tracecmd.exp gdb-10.2/gdb/testsuite/gdb.trace/tracecmd.exp --- gdb-9.1/gdb/testsuite/gdb.trace/tracecmd.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/tracecmd.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1998-2020 Free Software Foundation, Inc. +# Copyright 1998-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/trace-common.h gdb-10.2/gdb/testsuite/gdb.trace/trace-common.h --- gdb-9.1/gdb/testsuite/gdb.trace/trace-common.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/trace-common.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/trace-condition.c gdb-10.2/gdb/testsuite/gdb.trace/trace-condition.c --- gdb-9.1/gdb/testsuite/gdb.trace/trace-condition.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/trace-condition.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/trace-condition.exp gdb-10.2/gdb/testsuite/gdb.trace/trace-condition.exp --- gdb-9.1/gdb/testsuite/gdb.trace/trace-condition.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/trace-condition.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/trace-enable-disable.c gdb-10.2/gdb/testsuite/gdb.trace/trace-enable-disable.c --- gdb-9.1/gdb/testsuite/gdb.trace/trace-enable-disable.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/trace-enable-disable.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2016-2020 Free Software Foundation, Inc. + Copyright 2016-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/trace-enable-disable.exp gdb-10.2/gdb/testsuite/gdb.trace/trace-enable-disable.exp --- gdb-9.1/gdb/testsuite/gdb.trace/trace-enable-disable.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/trace-enable-disable.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/tracefile-pseudo-reg.c gdb-10.2/gdb/testsuite/gdb.trace/tracefile-pseudo-reg.c --- gdb-9.1/gdb/testsuite/gdb.trace/tracefile-pseudo-reg.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/tracefile-pseudo-reg.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2016-2020 Free Software Foundation, Inc. + Copyright 2016-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/tracefile-pseudo-reg.exp gdb-10.2/gdb/testsuite/gdb.trace/tracefile-pseudo-reg.exp --- gdb-9.1/gdb/testsuite/gdb.trace/tracefile-pseudo-reg.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/tracefile-pseudo-reg.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2016-2020 Free Software Foundation, Inc. +# Copyright 2016-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/trace-mt.c gdb-10.2/gdb/testsuite/gdb.trace/trace-mt.c --- gdb-9.1/gdb/testsuite/gdb.trace/trace-mt.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/trace-mt.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2012-2020 Free Software Foundation, Inc. + Copyright 2012-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/trace-mt.exp gdb-10.2/gdb/testsuite/gdb.trace/trace-mt.exp --- gdb-9.1/gdb/testsuite/gdb.trace/trace-mt.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/trace-mt.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/trace-unavailable.c gdb-10.2/gdb/testsuite/gdb.trace/trace-unavailable.c --- gdb-9.1/gdb/testsuite/gdb.trace/trace-unavailable.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/trace-unavailable.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/tspeed.c gdb-10.2/gdb/testsuite/gdb.trace/tspeed.c --- gdb-9.1/gdb/testsuite/gdb.trace/tspeed.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/tspeed.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -75,7 +75,7 @@ /* Keep trying the speed test, with more iterations, until we get to a reasonable number. */ - while (problem = trace_speed_test()) + while ((problem = trace_speed_test())) { /* If iteration isn't working, give up. */ if (iters > max_iters) diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/tspeed.exp gdb-10.2/gdb/testsuite/gdb.trace/tspeed.exp --- gdb-9.1/gdb/testsuite/gdb.trace/tspeed.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/tspeed.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/tstatus.exp gdb-10.2/gdb/testsuite/gdb.trace/tstatus.exp --- gdb-9.1/gdb/testsuite/gdb.trace/tstatus.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/tstatus.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2011-2020 Free Software Foundation, Inc. +# Copyright 2011-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/tsv.exp gdb-10.2/gdb/testsuite/gdb.trace/tsv.exp --- gdb-9.1/gdb/testsuite/gdb.trace/tsv.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/tsv.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2009-2020 Free Software Foundation, Inc. +# Copyright 2009-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/unavailable.cc gdb-10.2/gdb/testsuite/gdb.trace/unavailable.cc --- gdb-9.1/gdb/testsuite/gdb.trace/unavailable.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/unavailable.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/unavailable-dwarf-piece.c gdb-10.2/gdb/testsuite/gdb.trace/unavailable-dwarf-piece.c --- gdb-9.1/gdb/testsuite/gdb.trace/unavailable-dwarf-piece.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/unavailable-dwarf-piece.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2013-2020 Free Software Foundation, Inc. + Copyright 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/unavailable-dwarf-piece.exp gdb-10.2/gdb/testsuite/gdb.trace/unavailable-dwarf-piece.exp --- gdb-9.1/gdb/testsuite/gdb.trace/unavailable-dwarf-piece.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/unavailable-dwarf-piece.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2013-2020 Free Software Foundation, Inc. +# Copyright (C) 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/unavailable.exp gdb-10.2/gdb/testsuite/gdb.trace/unavailable.exp --- gdb-9.1/gdb/testsuite/gdb.trace/unavailable.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/unavailable.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1998-2020 Free Software Foundation, Inc. +# Copyright 1998-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/while-dyn.exp gdb-10.2/gdb/testsuite/gdb.trace/while-dyn.exp --- gdb-9.1/gdb/testsuite/gdb.trace/while-dyn.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/while-dyn.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1998-2020 Free Software Foundation, Inc. +# Copyright 1998-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.trace/while-stepping.exp gdb-10.2/gdb/testsuite/gdb.trace/while-stepping.exp --- gdb-9.1/gdb/testsuite/gdb.trace/while-stepping.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.trace/while-stepping.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1998-2020 Free Software Foundation, Inc. +# Copyright 1998-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.tui/basic.exp gdb-10.2/gdb/testsuite/gdb.tui/basic.exp --- gdb-9.1/gdb/testsuite/gdb.tui/basic.exp 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.tui/basic.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,7 +15,7 @@ # Basic TUI tests. -load_lib "tuiterm.exp" +tuiterm_env standard_testfile tui-layout.c @@ -26,6 +26,7 @@ Term::clean_restart 24 80 $testfile if {![Term::enter_tui]} { unsupported "TUI not supported" + return } set text [Term::get_all_lines] @@ -35,6 +36,46 @@ Term::command "list main" Term::check_contents "list main" "21 *return 0" +# Get the first source line. +set line [Term::get_line 1] +# Send an up arrow. +send_gdb "\033\[A" +# Wait for a redraw and check that the first line changed. +if {[Term::wait_for [string_to_regexp $line]] \ + && [Term::get_line 1] != $line\ + && [Term::get_line 2] == $line} { + pass "scroll up" +} else { + fail "scroll up" +} + +# Check the horizontal scrolling. First confirm that 'main ()' is +# where we expect it to be. This relies on the current way we +# position source code on the screen, which might change in the +# future. The important part of this test is detecting the left/right +# scrolling, not which line main is actually on. +set line_num 6 +set line [Term::get_line $line_num] +gdb_assert {[regexp -- "19\[\\t \]+main \\(\\)" $line]} \ + "check main is where we expect on the screen" +set regexp "19\[\\t \]+ain \\(\\)" +# Send a right arrow. +send_gdb "\033\[C" +if {[Term::wait_for $regexp]} { + pass "scroll right" +} else { + fail "scroll right" +} +set line [Term::get_line $line_num] +# Send a down arrow. +send_gdb "\033\[B" +if {[Term::wait_for $regexp] \ + && [Term::get_line [expr {$line_num - 1}]] == $line} { + pass "scroll down" +} else { + fail "scroll down" +} + Term::check_box "source box" 0 0 80 15 Term::command "layout asm" @@ -45,5 +86,5 @@ Term::command "layout split" Term::check_contents "split layout contents" "21 *return 0.*$hex <main>" -Term::check_box "source box in split layout" 0 0 80 8 -Term::check_box "asm box in split layout" 0 7 80 8 +Term::check_box "source box in split layout" 0 0 80 7 +Term::check_box "asm box in split layout" 0 6 80 9 diff -Nru gdb-9.1/gdb/testsuite/gdb.tui/completion.exp gdb-10.2/gdb/testsuite/gdb.tui/completion.exp --- gdb-9.1/gdb/testsuite/gdb.tui/completion.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.tui/completion.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.tui/corefile-run.exp gdb-10.2/gdb/testsuite/gdb.tui/corefile-run.exp --- gdb-9.1/gdb/testsuite/gdb.tui/corefile-run.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.tui/corefile-run.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -18,7 +18,7 @@ # # Ref.: https://bugzilla.redhat.com/show_bug.cgi?id=1765117 -load_lib "tuiterm.exp" +tuiterm_env standard_testfile tui-layout.c @@ -47,6 +47,7 @@ Term::clean_restart 24 80 $testfile if {![Term::enter_tui]} { unsupported "TUI not supported" + return } set text [Term::get_all_lines] diff -Nru gdb-9.1/gdb/testsuite/gdb.tui/empty.exp gdb-10.2/gdb/testsuite/gdb.tui/empty.exp --- gdb-9.1/gdb/testsuite/gdb.tui/empty.exp 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.tui/empty.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,7 +15,7 @@ # Test TUI resizing with empty windows. -load_lib "tuiterm.exp" +tuiterm_env standard_testfile @@ -23,6 +23,7 @@ if {![Term::enter_tui]} { unsupported "TUI not supported" + return } # Each entry describes a layout. It has these items: @@ -32,28 +33,28 @@ # 4. List of boxes in 90x40 mode # 5. List of test name and text for the empty window set layouts { - {src src {{0 0 80 15}} {{0 0 90 23}} + {src src {{0 0 80 15}} {{0 0 90 26}} {{"no source" "No Source Available"}}} - {regs src-regs {{0 0 80 8} {0 7 80 8}} {{0 0 90 13} {0 12 90 13}} + {regs src-regs {{0 0 80 7} {0 6 80 9}} {{0 0 90 13} {0 12 90 13}} { {"no source" "No Source Available"} {"no regs" "Register Values Unavailable"} }} - {asm asm {{0 0 80 15}} {{0 0 90 23}} + {asm asm {{0 0 80 13}} {{0 0 90 26}} { {"no asm" "No Assembly Available"} }} - {regs asm-regs {{0 0 80 8} {0 7 80 8}} {{0 0 90 13} {0 12 90 13}} + {regs asm-regs {{0 0 80 7} {0 6 80 9}} {{0 0 90 13} {0 12 90 13}} { {"no asm" "No Assembly Available"} {"no regs" "Register Values Unavailable"} }} - {split split {{0 0 80 8} {0 7 80 8}} {{0 0 90 13} {0 12 90 13}} + {split split {{0 0 80 6} {0 5 80 8}} {{0 0 90 13} {0 12 90 13}} { {"no source" "No Source Available"} {"no asm" "No Assembly Available"} }} - {regs split-regs {{0 0 80 8} {0 7 80 8}} {{0 0 90 13} {0 12 90 13}} + {regs split-regs {{0 0 80 6} {0 5 80 8}} {{0 0 90 13} {0 12 90 13}} { {"no asm" "No Assembly Available"} {"no regs" "Register Values Unavailable"} diff -Nru gdb-9.1/gdb/testsuite/gdb.tui/list-before.exp gdb-10.2/gdb/testsuite/gdb.tui/list-before.exp --- gdb-9.1/gdb/testsuite/gdb.tui/list-before.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.tui/list-before.exp 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,35 @@ +# Copyright 2019-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Ensure that "list" before starting the TUI will affect the view. + +tuiterm_env + +standard_testfile tui-layout.c + +if {[build_executable "failed to prepare" ${testfile} ${srcfile}] == -1} { + return -1 +} + +Term::clean_restart 24 80 $testfile + +gdb_test "list main" + +if {![Term::enter_tui]} { + unsupported "TUI not supported" + return +} + +Term::check_contents "initial source listing" "21 *return 0" diff -Nru gdb-9.1/gdb/testsuite/gdb.tui/list.exp gdb-10.2/gdb/testsuite/gdb.tui/list.exp --- gdb-9.1/gdb/testsuite/gdb.tui/list.exp 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.tui/list.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,7 +15,7 @@ # Ensure that "list" will switch to the source view. -load_lib "tuiterm.exp" +tuiterm_env standard_testfile tui-layout.c @@ -26,12 +26,17 @@ Term::clean_restart 24 80 $testfile if {![Term::enter_tui]} { unsupported "TUI not supported" + return } -Term::check_contents "initial source listing" "No Source Available" +Term::check_contents "initial source listing" "21 *return 0" Term::command "layout asm" Term::check_contents "asm window shows main" "$hex <main>" Term::command "list main" Term::check_contents "list main" "21 *return 0" +# The following 'focus next' must be immediately after 'list main' to +# ensure that GDB has a valid idea of what is currently focused. +Term::command "focus next" +Term::check_contents "focus next" "Focus set to cmd window" diff -Nru gdb-9.1/gdb/testsuite/gdb.tui/main.exp gdb-10.2/gdb/testsuite/gdb.tui/main.exp --- gdb-9.1/gdb/testsuite/gdb.tui/main.exp 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.tui/main.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,7 +15,7 @@ # Test that "file" shows "main". -load_lib "tuiterm.exp" +tuiterm_env standard_testfile tui-layout.c @@ -26,9 +26,17 @@ # Note: don't pass the executable here Term::clean_restart 24 80 +# Later on we'd like to avoid having to answer a question. +gdb_test_no_output "set interactive-mode off" + if {![Term::enter_tui]} { unsupported "TUI not supported" + return } Term::command "file [standard_output_file $testfile]" -Term::check_contents "show main after file" ">|21 *return 0" +Term::check_contents "show main after file" "\\|.*21 *return 0" + +# Ensure that "file" clears the source window. +Term::command "file" +Term::check_contents "file clears window" "No Source Available" diff -Nru gdb-9.1/gdb/testsuite/gdb.tui/new-layout.exp gdb-10.2/gdb/testsuite/gdb.tui/new-layout.exp --- gdb-9.1/gdb/testsuite/gdb.tui/new-layout.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.tui/new-layout.exp 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,92 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Test "tui new-layout". + +tuiterm_env + +standard_testfile tui-layout.c + +if {[build_executable "failed to prepare" ${testfile} ${srcfile}] == -1} { + return -1 +} + +# Make sure TUI is supported before continuing. +Term::clean_restart 24 80 $testfile +if {![Term::enter_tui]} { + unsupported "TUI not supported" + return +} + +Term::clean_restart 24 80 $testfile + +gdb_test "tui new-layout" \ + "No layout name specified" +gdb_test "tui new-layout example" \ + "New layout does not contain any windows" +gdb_test "tui new-layout example zzq" \ + "Unknown window \"zzq\"" +gdb_test "tui new-layout example src 1 src 1" \ + "Window \"src\" seen twice in layout" +gdb_test "tui new-layout example src 1" \ + "New layout does not contain the \"cmd\" window" +gdb_test "tui new-layout example src 1}" \ + "Extra '}' in layout specification" +gdb_test "tui new-layout example {src 1} 1}" \ + "Extra '}' in layout specification" +gdb_test "tui new-layout example {src 1" \ + "Missing '}' in layout specification" + +gdb_test_no_output "tui new-layout example asm 1 status 0 cmd 1" + +gdb_test "help layout example" \ + "Apply the \"example\" layout.*tui new-layout example asm 1 status 0 cmd 1" + +gdb_test_no_output "tui new-layout example2 {asm 1 status 0} 1 cmd 1" + +gdb_test "help layout example2" \ + "Apply the \"example2\" layout.*tui new-layout example2 {asm 1 status 0} 1 cmd 1" + +gdb_test_no_output "tui new-layout h {-horizontal asm 1 src 1} 1 status 0 cmd 1" + +gdb_test "help layout h" \ + "Apply the \"h\" layout.*tui new-layout h {-horizontal asm 1 src 1} 1 status 0 cmd 1" + +if {![Term::enter_tui]} { + unsupported "TUI not supported" + return +} + +set text [Term::get_all_lines] +gdb_assert {![string match "No Source Available" $text]} \ + "initial source listing" + +Term::command "layout example" +Term::check_contents "example layout shows assembly" \ + "$hex <main>" + +Term::command "layout h" +Term::check_box "left window box" 0 0 40 15 +Term::check_box "right window box" 39 0 41 15 +Term::check_contents "horizontal display" \ + "$hex <main>.*21.*return 0" + +Term::command "winheight src - 5" +Term::check_box "left window box after shrink" 0 0 40 10 +Term::check_box "right window box after shrink" 39 0 41 10 + +Term::command "winheight src + 5" +Term::check_box "left window box after grow" 0 0 40 15 +Term::check_box "right window box after grow" 39 0 41 15 diff -Nru gdb-9.1/gdb/testsuite/gdb.tui/regs.exp gdb-10.2/gdb/testsuite/gdb.tui/regs.exp --- gdb-9.1/gdb/testsuite/gdb.tui/regs.exp 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.tui/regs.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,7 +15,7 @@ # Simple test of TUI register window. -load_lib "tuiterm.exp" +tuiterm_env standard_testfile tui-layout.c @@ -32,14 +32,15 @@ if {![Term::enter_tui]} { unsupported "TUI not supported" + return } -Term::check_contents "source at startup" ">|21 *return 0" +Term::check_contents "source at startup" "\\|.*21 *return 0" Term::command "layout regs" -Term::check_box "register box" 0 0 80 8 -Term::check_box "source box in regs layout" 0 7 80 8 +Term::check_box "register box" 0 0 80 7 +Term::check_box "source box in regs layout" 0 6 80 9 set text [Term::get_line 1] # Just check for any register window content at all. -Term::check_contents "any register contents" "^|.*\[^ \].*|$" +Term::check_contents "any register contents" "\\|.*\[^ \].*\\|" diff -Nru gdb-9.1/gdb/testsuite/gdb.tui/resize.exp gdb-10.2/gdb/testsuite/gdb.tui/resize.exp --- gdb-9.1/gdb/testsuite/gdb.tui/resize.exp 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.tui/resize.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,7 +15,7 @@ # Test TUI resizing. -load_lib "tuiterm.exp" +tuiterm_env standard_testfile tui-layout.c @@ -32,9 +32,10 @@ if {![Term::enter_tui]} { unsupported "TUI not supported" + return } -Term::check_contents "source at startup" ">|21 *return 0" +Term::check_contents "source at startup" "\\|.*21 *return 0" Term::resize 40 90 -Term::check_box "source box after resize" 0 0 90 23 +Term::check_box "source box after resize" 0 0 90 26 diff -Nru gdb-9.1/gdb/testsuite/gdb.tui/tui-disasm-long-lines.c gdb-10.2/gdb/testsuite/gdb.tui/tui-disasm-long-lines.c --- gdb-9.1/gdb/testsuite/gdb.tui/tui-disasm-long-lines.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.tui/tui-disasm-long-lines.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2016-2020 Free Software Foundation, Inc. + Copyright 2016-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.tui/tui-disasm-long-lines.exp gdb-10.2/gdb/testsuite/gdb.tui/tui-disasm-long-lines.exp --- gdb-9.1/gdb/testsuite/gdb.tui/tui-disasm-long-lines.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.tui/tui-disasm-long-lines.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.tui/tui-layout-asm.exp gdb-10.2/gdb/testsuite/gdb.tui/tui-layout-asm.exp --- gdb-9.1/gdb/testsuite/gdb.tui/tui-layout-asm.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.tui/tui-layout-asm.exp 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,77 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Ensure that 'layout asm' before starting the inferior puts us in the +# asm layout and displays the disassembly for main. + +tuiterm_env + +standard_testfile tui-layout.c + +if {[build_executable "failed to prepare" ${testfile} ${srcfile}] == -1} { + return -1 +} + +Term::clean_restart 24 80 $testfile +if {![Term::prepare_for_tui]} { + unsupported "TUI not supported" + return +} + +# This puts us into TUI mode, and should display the ASM window. +Term::command_no_prompt_prefix "layout asm" +Term::check_box_contents "check asm box contents" 0 0 80 15 "<main>" + +# Scroll the ASM window down using the down arrow key. In an ideal +# world we'd like to use PageDown here, but currently our terminal +# library doesn't support such advanced things. +set testname "scroll to end of assembler" +set down_count 0 +while (1) { + # Grab the second line, this is about to become the first line. + set line [Term::get_line 2] + + # Except, if the second line is blank then we are at the end of + # the available asm output. Pressing down again _shouldn't_ + # change the output, however, if GDB is working, and we press down + # then the screen won't change, so the call to Term::wait_for + # below will just timeout. So for now we avoid testing the edge + # case. + if {[regexp -- "^\\| +\\|$" $line]} { + # Second line is blank, we're at the end of the assembler. + pass $testname + break + } + + # Send the down key to GDB. + send_gdb "\033\[B" + incr down_count + if {[Term::wait_for [string_to_regexp $line]] \ + && [Term::get_line 1] == $line} { + # We scrolled successfully. + } else { + fail "$testname (scroll failed)" + Term::dump_screen + break + } + + if { $down_count > 250 } { + # Maybe we should accept this as a pass in case a target + # really does have loads of assembler to scroll through. + fail "$testname (too much assembler)" + Term::dump_screen + break + } +} diff -Nru gdb-9.1/gdb/testsuite/gdb.tui/tui-layout-asm-short-prog.exp gdb-10.2/gdb/testsuite/gdb.tui/tui-layout-asm-short-prog.exp --- gdb-9.1/gdb/testsuite/gdb.tui/tui-layout-asm-short-prog.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.tui/tui-layout-asm-short-prog.exp 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,52 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Ensure that 'layout asm' can scroll away from the last line of a +# very short program using a page up sized scroll. + +tuiterm_env + +standard_testfile tui-layout-asm-short-prog.S + +if {[build_executable "failed to prepare" ${testfile} ${srcfile} \ + {debug additional_flags=-nostdlib \ + additional_flags=-nostartfiles}] == -1} { + return -1 +} + +Term::clean_restart 24 80 $testfile +if {![Term::prepare_for_tui]} { + unsupported "TUI not supported" + return +} + +# This puts us into TUI mode, and should display the ASM window. +Term::command_no_prompt_prefix "layout asm" +Term::check_box_contents "check asm box contents" 0 0 80 15 "<_start>" + +# Record the first line of output, we'll need this later. +set first_line [Term::get_line 1] + +# Scroll forward a large amount, this should take us to the last +# instruction in the program. +Term::command "+ 13" +Term::check_box_contents "check asm box contents again" 0 0 80 15 \ + "^ *$hex\[^\n\]+\n +\n" + +# Now scroll backward again, we should return to the start of the +# program. +Term::command "- 13" +gdb_assert {[string eq "$first_line" [Term::get_line 1]]} \ + "check first line is back" diff -Nru gdb-9.1/gdb/testsuite/gdb.tui/tui-layout-asm-short-prog.S gdb-10.2/gdb/testsuite/gdb.tui/tui-layout-asm-short-prog.S --- gdb-9.1/gdb/testsuite/gdb.tui/tui-layout-asm-short-prog.S 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.tui/tui-layout-asm-short-prog.S 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,22 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + + .global _start +_start: + .rept 5 + nop + .endr diff -Nru gdb-9.1/gdb/testsuite/gdb.tui/tui-layout.c gdb-10.2/gdb/testsuite/gdb.tui/tui-layout.c --- gdb-9.1/gdb/testsuite/gdb.tui/tui-layout.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.tui/tui-layout.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2017-2020 Free Software Foundation, Inc. + Copyright 2017-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.tui/tui-layout.exp gdb-10.2/gdb/testsuite/gdb.tui/tui-layout.exp --- gdb-9.1/gdb/testsuite/gdb.tui/tui-layout.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.tui/tui-layout.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2017-2020 Free Software Foundation, Inc. +# Copyright 2017-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.tui/tui-missing-src.exp gdb-10.2/gdb/testsuite/gdb.tui/tui-missing-src.exp --- gdb-9.1/gdb/testsuite/gdb.tui/tui-missing-src.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.tui/tui-missing-src.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,98 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# This test checks if gdb can handle missing source files gracefully. +# Testing steps are: +# 1. Have a main() in main.c that calls an external function f2(). +# 2. Have f2() implemented in f2.c. +# 3. Build the two files into one executable. +# 4. Remove main.c. +# 5. Open the executable inside gdb while having gdb in source layout. +# No source is found for the moment. +# 6. After a little bit of playing, we enter f2() and now the source +# layout must show the contents of f2.c. +# 7. Going back to main() shall result in no contents again. + +tuiterm_env + +standard_testfile + +set mainfile [standard_output_file main.c] +set f2file [standard_output_file f2.c] +set srcfiles [list $mainfile $f2file] + +# Step 1: Write the main.c file into the output directory. +# This file will be removed after compilation. +set fd [open "$mainfile" w] +puts $fd { +extern int f2(int); +int +main () +{ + int a = 4; + a = f2(a); + return a - a; +} +} +close $fd + +# Step 2: Write the f2.c file into the output directory. +set fd [open "$f2file" w] +puts $fd { +int +f2 (int x) +{ + x <<= 1; + return x+5; +} +} +close $fd + +# Step 3: Compile the source files. +if { [gdb_compile "${srcfiles}" "${binfile}" \ + executable {debug additional_flags=-O0}] != "" } { + untested "failed to compile" + return -1 +} + +# Step 4: Remove the main.c file. +file delete $mainfile + +# Step 5: Load the executable into GDB. +# There shall be no source content. +Term::clean_restart 24 80 $testfile +if {![Term::enter_tui]} { + unsupported "TUI not supported" + return +} +# There must exist a source layout with the size 80x15 and +# there should be nothing in it. +Term::check_box_contents "check source box is empty" \ + 0 0 80 15 "No Source Available" + +# Step 6: Go to main and after one next, enter f2(). +Term::command "set pagination off" +Term::command "start" +Term::command "next" +Term::command "step" +Term::check_contents "checking if inside f2 ()" "f2 \\(x=4\\)" +Term::check_box_contents "f2.c must be displayed in source window" \ + 0 0 80 15 "return x\\+5" + +# Step 7: Back in main +Term::command "finish" +Term::check_box_contents "check source box is empty after return" \ + 0 0 80 15 "No Source Available" +Term::check_contents "Back in main" "Value returned is .* 13" diff -Nru gdb-9.1/gdb/testsuite/gdb.tui/tui-nl-filtered-output.exp gdb-10.2/gdb/testsuite/gdb.tui/tui-nl-filtered-output.exp --- gdb-9.1/gdb/testsuite/gdb.tui/tui-nl-filtered-output.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.tui/tui-nl-filtered-output.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2017-2020 Free Software Foundation, Inc. +# Copyright 2017-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.tui/winheight.exp gdb-10.2/gdb/testsuite/gdb.tui/winheight.exp --- gdb-9.1/gdb/testsuite/gdb.tui/winheight.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.tui/winheight.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,7 +15,7 @@ # Test the "winheight" command. -load_lib "tuiterm.exp" +tuiterm_env standard_testfile tui-layout.c @@ -26,6 +26,7 @@ Term::clean_restart 24 80 $testfile if {![Term::enter_tui]} { unsupported "TUI not supported" + return } Term::check_box "source box" 0 0 80 15 diff -Nru gdb-9.1/gdb/testsuite/gdb.xml/maint_print_struct.exp gdb-10.2/gdb/testsuite/gdb.xml/maint_print_struct.exp --- gdb-9.1/gdb/testsuite/gdb.xml/maint_print_struct.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.xml/maint_print_struct.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This testcase is part of GDB, the GNU debugger. # -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # # Contributed by Intel Corp. <walfred.tedeschi@intel.com> # diff -Nru gdb-9.1/gdb/testsuite/gdb.xml/maint_print_struct.xml gdb-10.2/gdb/testsuite/gdb.xml/maint_print_struct.xml --- gdb-9.1/gdb/testsuite/gdb.xml/maint_print_struct.xml 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.xml/maint_print_struct.xml 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<!-- Copyright (C) 2010-2020 Free Software Foundation, Inc. +<!-- Copyright (C) 2010-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/gdb/testsuite/gdb.xml/maint-xml-dump-01.xml gdb-10.2/gdb/testsuite/gdb.xml/maint-xml-dump-01.xml --- gdb-9.1/gdb/testsuite/gdb.xml/maint-xml-dump-01.xml 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.xml/maint-xml-dump-01.xml 2020-09-13 02:33:41.000000000 +0000 @@ -0,0 +1,10 @@ +<?xml version="1.0"?> +<!-- This is a comment before DOCTYPE --> +<!DOCTYPE target SYSTEM "gdb-target.dtd"> +<!-- This is a comment after DOCTYPE --> +<target> + <feature name="abc"> + <!-- The following is a register. --> + <reg name="r1" bitsize="32"/> <!-- <reg name="r1" bitsize="32" type="int" regnum="0"/> --> + </feature> +</target> diff -Nru gdb-9.1/gdb/testsuite/gdb.xml/maint-xml-dump-02.xml gdb-10.2/gdb/testsuite/gdb.xml/maint-xml-dump-02.xml --- gdb-9.1/gdb/testsuite/gdb.xml/maint-xml-dump-02.xml 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.xml/maint-xml-dump-02.xml 2020-09-13 02:33:41.000000000 +0000 @@ -0,0 +1,27 @@ +<target> + <osabi>Solaris</osabi> + <feature name="abc"> + <vector id="foo" type="int32" count="4"/> + <reg name="foo" bitsize="16" /> <!-- <reg name="foo" bitsize="16" type="int" regnum="0"/> --> + </feature> + <feature name="def.xyz"> + <struct id="my_struct"> + <field name="field1" type="int8"/> + <field name="field2" type="int16"/> + <field name="field3" type="int8"/> + </struct> + <struct id="bit_field" size="8"> + <field name="bits1" start="0" end="3" type="int8"/> + <field name="bits2" start="4" end="6" type="int8"/> + <field name="bits3" start="7" end="7"/> <!-- <field name="bits3" start="7" end="7" type="bool"/> --> + </struct> + <flags id="my_flags" size="8"> + <field name="flg1" start="0" end="0"/> <!-- <field name="flg1" start="0" end="0" type="bool"/> --> + <field name="flg2" start="1" end="1"/> <!-- <field name="flg2" start="1" end="1" type="bool"/> --> + <field name="flg3" start="2" end="6"/> <!-- <field name="flg3" start="2" end="6" type="uint64"/> --> + <field name="flg4" start="7" end="7"/> <!-- <field name="flg4" start="7" end="7" type="bool"/> --> + </flags> + <reg name="r1" bitsize="8" type="my_flags"/> <!-- <reg name="r1" bitsize="8" type="my_flags" regnum="1"/> --> + <reg name="r2" bitsize="8" type="bit_field"/> <!-- <reg name="r2" bitsize="8" type="bit_field" regnum="2"/> --> + </feature> +</target> diff -Nru gdb-9.1/gdb/testsuite/gdb.xml/maint-xml-dump.exp gdb-10.2/gdb/testsuite/gdb.xml/maint-xml-dump.exp --- gdb-9.1/gdb/testsuite/gdb.xml/maint-xml-dump.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.xml/maint-xml-dump.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,124 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Test the 'maint print xml-tdesc' command. This file picks up every +# XML file matching the pattern maint-xml-dump-*.xml (in the same +# directory as this script) and passes each in turn to the command +# 'maint print xml-tdesc'. +# +# The expected output is generated by parsing the input XML file. The +# rules for changing an XML file into the expected output are: +# +# 1. Blank lines, and lines starting with a comment are stripped from +# the expected output. +# +# 2. The <?xml ... ?> and <!DOCTYPE ...> entities are optional, +# suitable defaults will be added if these lines are missing from +# the input file. +# +# 3. A trailing comment on a line will replace the expected output for +# that line but with the indentation of the line preserved. So +# this (The '|' marks the start of the line): +# | <reg name="r1" bitsize="32"/> <!-- <reg name="r1" bitsize="32" type="int" regnum="0"/> --> +# Will actually look for the following output: +# | <reg name="r1" bitsize="32" type="int" regnum="0"/> +# +# 4. Indentation of lines will be preserved so your input file needs +# to follow the expected indentation. +if {[gdb_skip_xml_test]} { + unsupported "xml tests not being run" + return -1 +} + +gdb_start + +# Read the XML file FILENAME and produce an output pattern that should +# match what GDB produces with the 'maint print xml-desc' command. +proc build_pattern { filename } { + set pattern {} + + set xml_version_line {<?xml version="1.0"?>} + set doc_type_line {<!DOCTYPE target SYSTEM "gdb-target.dtd">} + + set linenum 0 + set ifd [open "$filename" r] + while {[gets $ifd line] >= 0} { + incr linenum + + # The <?xml .... ?> tag can only appear as the first line in + # the file. If it is not present then add one to the expected + # output now. + if {$linenum == 1} { + if {![regexp {^<\?xml} $line]} { + set pattern [string_to_regexp $xml_version_line] + set xml_version_line "" + } + } + + # If we have not yet seen a DOCTYPE line, then maybe we should + # be adding one? If we find <target> then add a default + # DOCTYPE line, otherwise, if the XML file includes a DOCTYPE + # line, use that. + if {$doc_type_line != "" } { + if {[regexp {^[ \t]*<target>} $line]} { + set pattern [multi_line $pattern \ + [string_to_regexp $doc_type_line]] + set doc_type_line "" + } elseif {[regexp {^[ \t]*<!DOCTYPE } $line]} { + set doc_type_line "" + } + } + + if {[regexp {^[ \t]*<!--} $line]} { + # Comment line, ignore it. + } elseif {[regexp {^[ \t]+$} $line]} { + # Blank line, ignore it. + } elseif {[regexp {^([ \t]*).*<!-- (.*) -->$} $line \ + matches grp1 grp2]} { + set pattern [multi_line \ + $pattern \ + [string_to_regexp "$grp1$grp2"]] + } else { + set pattern [multi_line \ + $pattern \ + [string_to_regexp $line]] + } + } + close $ifd + + # Due to handling the <?xml ...?> tags we can end up with a stray + # '\r\n' at the start of the output pattern. Remove it here. + if {[string range $pattern 0 1] == "\r\n"} { + set pattern [string range $pattern 2 end] + } + + return $pattern +} + +# Run over every test XML file and check the output. +foreach filename [lsort [glob $srcdir/$subdir/maint-xml-dump-*.xml]] { + set pattern [build_pattern $filename] + + if {[is_remote host]} { + set test_path [remote_download host $filename] + } else { + set test_path $filename + } + + verbose -log "Looking for:\n$pattern" + + gdb_test "maint print xml-tdesc $test_path" \ + "$pattern" "check [file tail $filename]" +} diff -Nru gdb-9.1/gdb/testsuite/gdb.xml/tdesc-arch.exp gdb-10.2/gdb/testsuite/gdb.xml/tdesc-arch.exp --- gdb-9.1/gdb/testsuite/gdb.xml/tdesc-arch.exp 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.xml/tdesc-arch.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2007-2020 Free Software Foundation, Inc. +# Copyright 2007-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -41,7 +41,7 @@ set default_arch "" set msg "read default architecture" gdb_test_multiple "show architecture" $msg { - -re "The target architecture is set automatically \\(currently (\[^ \]*)\\)\r\n$gdb_prompt $" { + -re "The target architecture is set to \"auto\" \\(currently \"(\[^ \]*)\"\\)\\.\r\n$gdb_prompt $" { set default_arch $expect_out(1,string) pass $msg } @@ -55,13 +55,16 @@ # Run these tests twice, once for $arch1 and once for $arch2, to # make sure that the tdesc file overrides the global default. +# TRANS_MODE indicates how newlines should be represented; it should +# be one of the values supported by "fconfigure -translation". -proc set_arch { arch which } { +proc set_arch { arch which trans_mode } { global gdb_prompt global subdir set filename [standard_output_file tdesc-arch.xml] set fd [open $filename w] + fconfigure $fd -translation $trans_mode puts $fd \ "<target> <architecture>$arch</architecture> @@ -86,14 +89,19 @@ set cmd "show architecture" gdb_test $cmd \ - "The target architecture is set automatically \\(currently $arch\\)" \ + "The target architecture is set to \"auto\" \\(currently \"$arch\"\\)\\." \ "$cmd ($which architecture)" remote_file host delete $filename } -set_arch $arch1 first -set_arch $arch2 second +set_arch $arch1 first lf +set_arch $arch2 second lf + +with_test_prefix crlf { + set_arch $arch1 first crlf + set_arch $arch2 second crlf +} # Check an invalid architecture setting. set filename [standard_output_file tdesc-arch.xml] @@ -114,7 +122,7 @@ set cmd "show architecture" gdb_test $cmd \ - "The target architecture is set automatically \\(currently $default_arch\\)" \ + "The target architecture is set to \"auto\" \\(currently \"$default_arch\"\\)\\." \ "$cmd (invalid architecture)" remote_file host delete $filename diff -Nru gdb-9.1/gdb/testsuite/gdb.xml/tdesc-errors.exp gdb-10.2/gdb/testsuite/gdb.xml/tdesc-errors.exp --- gdb-9.1/gdb/testsuite/gdb.xml/tdesc-errors.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.xml/tdesc-errors.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2007-2020 Free Software Foundation, Inc. +# Copyright 2007-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/gdb.xml/tdesc-regs.exp gdb-10.2/gdb/testsuite/gdb.xml/tdesc-regs.exp --- gdb-9.1/gdb/testsuite/gdb.xml/tdesc-regs.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.xml/tdesc-regs.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2007-2020 Free Software Foundation, Inc. +# Copyright 2007-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -145,7 +145,7 @@ close $ofd if {[is_remote host]} { - set regs_file [remote_download host "$subdir/$xml_file" $xml_file] + set regs_file [remote_download host "$regs_file" $xml_file] } # Anchor the test output, so that error messages are detected. @@ -165,7 +165,7 @@ } load_description "extra-regs.xml" "" "test-extra-regs.xml" -gdb_test "ptype \$extrareg" "type = (int|long|long long)" +gdb_test "ptype \$extrareg" "type = (int32_t|int|long|long long)" gdb_test "ptype \$uintreg" "type = uint32_t" gdb_test "ptype \$vecreg" "type = int8_t __attribute__ \\(\\(vector_size\\(4\\)\\)\\)" gdb_test "ptype \$unionreg" \ @@ -184,6 +184,8 @@ gdb_test "maintenance print reggroups" \ " Group\[ \t\]+Type\[ \t\]+\r\n.* general\[ \t\]+user\[ \t\]+\r\n.* foo\[ \t\]+user\[ \t\]+" -load_description "core-only.xml" "" "test-regs.xml" -# The extra register from the previous description should be gone. -gdb_test "ptype \$extrareg" "type = void" +with_test_prefix "core-only.xml" { + load_description "core-only.xml" "" "test-regs.xml" + # The extra register from the previous description should be gone. + gdb_test "ptype \$extrareg" "type = void" +} diff -Nru gdb-9.1/gdb/testsuite/gdb.xml/tdesc-reload.c gdb-10.2/gdb/testsuite/gdb.xml/tdesc-reload.c --- gdb-9.1/gdb/testsuite/gdb.xml/tdesc-reload.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.xml/tdesc-reload.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,22 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2020-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +int +main () +{ + return 0; +} diff -Nru gdb-9.1/gdb/testsuite/gdb.xml/tdesc-reload.exp gdb-10.2/gdb/testsuite/gdb.xml/tdesc-reload.exp --- gdb-9.1/gdb/testsuite/gdb.xml/tdesc-reload.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.xml/tdesc-reload.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,83 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Testing for 'maint print xml-tdesc'. Check we can print out the +# current target description and load it back in again. + +if {[gdb_skip_xml_test]} { + unsupported "xml tests not being run" + return -1 +} + +standard_testfile + +if {[prepare_for_testing "failed to prepare" $testfile $srcfile debug]} { + return -1 +} + +if ![runto_main] then { + fail "can't run to main" + return 0 +} + +# Three files we're going to write out to. +set xml_file_1 [standard_output_file outfile1.xml] +set xml_file_2 [standard_output_file outfile2.xml] +set xml_file_3 [standard_output_file outfile3.xml] + +# Write the current target description to a file. +gdb_test_no_output "pipe maint print xml-tdesc | cat > $xml_file_1" \ + "write current target description to file" + +# Read the target description back in to GDB, and the write it back +# out to a file. +gdb_test_no_output \ + "pipe maint print xml-tdesc $xml_file_1 | cat > $xml_file_2" \ + "read previous xml description, and write it out to a second file" + +# Check the two produced files are identical. +gdb_test "shell diff -s $xml_file_1 $xml_file_2" \ + "Files \[^\r\n\]* are identical" \ + "first two produced xml files are identical" + +# Restart GDB. +clean_restart + +# Change to use one of the target descriptions we wrote out earlier. +gdb_test_no_output "set tdesc filename $xml_file_1" \ + "set target description to use" + +# Load the executable. +gdb_load ${binfile} + +# Run to `main' where we begin our tests. +if ![runto_main] then { + untested "could not run to main" + return -1 +} + +# Run info registers just to check this appears to run fine with the +# new target description. +gdb_test "info all-registers" ".*" \ + "Run info registers" + +# Write out the current target description. +gdb_test_no_output "pipe maint print xml-tdesc | cat > $xml_file_3" \ + "write third target description to file" + +# And check that it matches the original file we loaded. +gdb_test "shell diff -s $xml_file_1 $xml_file_3" \ + "Files \[^\r\n\]* are identical" \ + "first and third produced xml files are identical" diff -Nru gdb-9.1/gdb/testsuite/gdb.xml/tdesc-xinclude.exp gdb-10.2/gdb/testsuite/gdb.xml/tdesc-xinclude.exp --- gdb-9.1/gdb/testsuite/gdb.xml/tdesc-xinclude.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/gdb.xml/tdesc-xinclude.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2007-2020 Free Software Foundation, Inc. +# Copyright 2007-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/lib/ada.exp gdb-10.2/gdb/testsuite/lib/ada.exp --- gdb-9.1/gdb/testsuite/lib/ada.exp 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/testsuite/lib/ada.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2004-2020 Free Software Foundation, Inc. +# Copyright 2004-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -52,14 +52,16 @@ return -options $options $result } -# Compile some Ada code. +# Compile some Ada code. Return "" if the compile was successful. -proc gdb_compile_ada {source dest type options} { +proc gdb_compile_ada_1 {source dest type options} { set srcdir [file dirname $source] set gprdir [file dirname $srcdir] set objdir [file dirname $dest] + file delete $dest + # Although strictly not necessary, we force the recompilation # of all units (additional_flags=-f). This is what is done # when using GCC to build programs in the other languages, @@ -78,6 +80,15 @@ # We therefore simply check whether the dest file has been created # or not. Unless not present, the build has succeeded. if [file exists $dest] { set result "" } + return $result +} + +# Compile some Ada code. Generate "PASS: foo.exp: compilation SOURCE" if the +# compile was successful. + +proc gdb_compile_ada {source dest type options} { + set result [gdb_compile_ada_1 $source $dest $type $options] + gdb_compile_test $source $result return $result } @@ -122,6 +133,9 @@ if {![is_remote host]} { set result [lookfor_file $root $tool] + if { $result != "" && $tool == "gnatlink" } { + set result "$result --GCC=$root/xgcc -B$root" + } } if {$result == ""} { @@ -136,7 +150,9 @@ proc gnatmake_version_at_least { major } { set gnatmake [gdb_find_gnatmake] set gnatmake [lindex [split $gnatmake] 0] - set output [exec $gnatmake --version] + if {[catch {exec $gnatmake --version} output]} { + return 0 + } if { [regexp {GNATMAKE ([^ .]+).([^ .]+).([^ .]+)} $output \ match gnatmake_major gnatmake_minor gnatmake_micro] } { if { $gnatmake_major >= $major } { @@ -149,3 +165,38 @@ # Unknown, return 1 return 1 } + +# Return 1 if the GNAT runtime appears to have debug info. + +gdb_caching_proc gnat_runtime_has_debug_info { + global srcdir + + set src "$srcdir/lib/gnat_debug_info_test.adb" + set dst [standard_output_file "gnat_debug_info_test"] + + if { [gdb_compile_ada_1 $src $dst executable {debug}] != "" } { + return 0 + } + + clean_restart $dst + + if { ! [runto "GNAT_Debug_Info_Test"] } { + fail "failed to run to GNAT_Debug_Info_Test" + return 0 + } + + set has_debug_info 0 + + gdb_test_multiple "whatis __gnat_debug_raise_exception" "" { + -re "type = <text variable, no debug info>" { } + -re "type = void" { + set has_debug_info 1 + } + default { + # Some other unexpected output... + fail $gdb_test_name + } + } + + return $has_debug_info +} diff -Nru gdb-9.1/gdb/testsuite/lib/append_gdb_boards_dir.exp gdb-10.2/gdb/testsuite/lib/append_gdb_boards_dir.exp --- gdb-9.1/gdb/testsuite/lib/append_gdb_boards_dir.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/lib/append_gdb_boards_dir.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/lib/build-piece.exp gdb-10.2/gdb/testsuite/lib/build-piece.exp --- gdb-9.1/gdb/testsuite/lib/build-piece.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/lib/build-piece.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2014-2020 Free Software Foundation, Inc. +# Copyright (C) 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/lib/cache.exp gdb-10.2/gdb/testsuite/lib/cache.exp --- gdb-9.1/gdb/testsuite/lib/cache.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/lib/cache.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -17,36 +17,92 @@ # The in-memory cache. array set gdb_data_cache {} +# Print pass message msg into gdb.log +proc ignore_pass { msg } { + verbose -log "gdb_do_cache_wrap ignoring pass: $msg" +} + +# Call proc real_name and return the result, while ignoring calls to pass. +proc gdb_do_cache_wrap {real_name} { + if { [info procs save_pass] != "" } { + return [uplevel 2 $real_name] + } + + rename pass save_pass + rename ignore_pass pass + + set code [catch {uplevel 2 $real_name} result] + + rename pass ignore_pass + rename save_pass pass + + if {$code == 1} { + global errorInfo errorCode + return -code error -errorinfo $errorInfo -errorcode $errorCode $result + } elseif {$code > 1} { + return -code $code $result + } + + return $result +} + # A helper for gdb_caching_proc that handles the caching. proc gdb_do_cache {name} { global gdb_data_cache objdir global GDB_PARALLEL + # Normally, if we have a cached value, we skip computation and return + # the cached value. If set to 1, instead don't skip computation and + # verify against the cached value. + set cache_verify 0 + + # Alternatively, set this to do cache_verify only for one proc. + set cache_verify_proc "" + if { $name == $cache_verify_proc } { + set cache_verify 1 + } + # See if some other process wrote the cache file. Cache value per # "board" to handle runs with multiple options # (e.g. unix/{-m32,-64}) correctly. We use "file join" here # because we later use this in a real filename. set cache_name [file join [target_info name] $name] + set is_cached 0 if {[info exists gdb_data_cache($cache_name)]} { - verbose "$name: returning '$gdb_data_cache($cache_name)' from cache" 2 - return $gdb_data_cache($cache_name) + set cached $gdb_data_cache($cache_name) + verbose "$name: returning '$cached' from cache" 2 + if { $cache_verify == 0 } { + return $cached + } + set is_cached 1 } - if {[info exists GDB_PARALLEL]} { + if { $is_cached == 0 && [info exists GDB_PARALLEL] } { set cache_filename [make_gdb_parallel_path cache $cache_name] if {[file exists $cache_filename]} { set fd [open $cache_filename] set gdb_data_cache($cache_name) [read -nonewline $fd] close $fd - verbose "$name: returning '$gdb_data_cache($cache_name)' from file cache" 2 - return $gdb_data_cache($cache_name) + set cached $gdb_data_cache($cache_name) + verbose "$name: returning '$cached' from file cache" 2 + if { $cache_verify == 0 } { + return $cached + } + set is_cached 1 } } set real_name gdb_real__$name - set gdb_data_cache($cache_name) [uplevel 1 $real_name] + set gdb_data_cache($cache_name) [gdb_do_cache_wrap $real_name] + if { $cache_verify == 1 && $is_cached == 1 } { + set computed $gdb_data_cache($cache_name) + if { $cached != $computed } { + error [join [list "Inconsistent results for $cache_name:" + "cached: $cached vs. computed: $computed"]] + } + } if {[info exists GDB_PARALLEL]} { verbose "$name: returning '$gdb_data_cache($cache_name)' and writing file" 2 diff -Nru gdb-9.1/gdb/testsuite/lib/check-test-names.exp gdb-10.2/gdb/testsuite/lib/check-test-names.exp --- gdb-9.1/gdb/testsuite/lib/check-test-names.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/lib/check-test-names.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,174 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# This library provides some protection against the introduction of +# tests that include either the source of build paths in the test +# name. When a test includes the path in its test name it is harder +# to compare results between two runs of GDB from different trees. + +namespace eval ::CheckTestNames { + # An associative array of all test names to the number of times each + # name is seen. Used to detect duplicate test names. + variable all_test_names + array set all_test_names {} + + # An associative array of counts of tests that either include a path in + # their test name, or have a duplicate test name. There are two counts + # for each issue, 'count', which counts occurrences within a single + # variant run, and 'total', which counts across all variants. + variable counts + array set counts {} + foreach nm {paths duplicates} { + set counts($nm,count) 0 + set counts($nm,total) 0 + } + + # Increment the count, and total count for TYPE. + proc inc_count { type } { + variable counts + + incr counts($type,count) + incr counts($type,total) + } + + # Check if MESSAGE contains a build or source path, if it does increment + # the relevant counter and return true, otherwise, return false. + proc _check_paths { message } { + global srcdir objdir + + foreach path [list $srcdir $objdir] { + if { [ string first $path $message ] >= 0 } { + # Count each test just once. + inc_count paths + return true + } + } + + return false + } + + # Check if MESSAGE is a duplicate, if it is then increment the + # duplicates counter and return true, otherwise, return false. + proc _check_duplicates { message } { + variable all_test_names + + # Initialise a count, or increment the count for this test name. + if {![info exists all_test_names($message)]} { + set all_test_names($message) 0 + } else { + if {$all_test_names($message) == 0} { + inc_count duplicates + } + incr all_test_names($message) + return true + } + + return false + } + + # Remove the leading Dejagnu status marker from MESSAGE, and + # return the remainder of MESSAGE. A status marker is something + # like 'PASS: '. It is assumed that MESSAGE does contain such a + # marker. If it doesn't then MESSAGE is returned unmodified. + proc _strip_status { message } { + # Find the position of the first ': ' string. + set pos [string first ": " $message] + if { $pos > -1 } { + # The '+ 2' is so we skip the ': ' we found above. + return [string range $message [expr $pos + 2] end] + } + + return $message + } + + # Check if MESSAGE contains either the source path or the build path. + # This will result in test names that can't easily be compared between + # different runs of GDB. + # + # Any offending test names cause the corresponding count to be + # incremented, and an extra message to be printed into the log + # file. + proc check { message } { + set message [ _strip_status $message ] + + if [ _check_paths $message ] { + clone_output "PATH: $message" + } + + if [ _check_duplicates $message ] { + clone_output "DUPLICATE: $message" + } + } + + # If COUNT is greater than zero, disply PREFIX followed by COUNT. + proc maybe_show_count { prefix count } { + if { $count > 0 } { + clone_output "$prefix$count" + } + } + + # Rename Dejagnu's log_summary procedure, and create do_log_summary to + # replace it. We arrange to have do_log_summary called later. + rename ::log_summary log_summary + proc do_log_summary { args } { + variable counts + + # If ARGS is the empty list then we don't want to pass a single + # empty string as a parameter here. + eval "CheckTestNames::log_summary $args" + + if { [llength $args] == 0 } { + set which "count" + } else { + set which [lindex $args 0] + } + + maybe_show_count "# of paths in test names\t" \ + $counts(paths,$which) + maybe_show_count "# of duplicate test names\t" \ + $counts(duplicates,$which) + } + + # Rename Dejagnu's reset_vars procedure, and create do_reset_vars to + # replace it. We arrange to have do_reset_vars called later. + rename ::reset_vars reset_vars + proc do_reset_vars {} { + variable all_test_names + variable counts + + CheckTestNames::reset_vars + + array unset all_test_names + foreach nm {paths duplicates} { + set counts($nm,count) 0 + } + } +} + +# Arrange for Dejagnu to call CheckTestNames::check for each test result. +foreach nm {pass fail xfail kfail xpass kpass unresolved untested \ + unsupported} { + set local_record_procs($nm) "CheckTestNames::check" +} + +# Create new global log_summary to replace Dejagnu's. +proc log_summary { args } { + eval "CheckTestNames::do_log_summary $args" +} + +# Create new global reset_vars to replace Dejagnu's. +proc reset_vars {} { + eval "CheckTestNames::do_reset_vars" +} diff -Nru gdb-9.1/gdb/testsuite/lib/cl_util.c gdb-10.2/gdb/testsuite/lib/cl_util.c --- gdb-9.1/gdb/testsuite/lib/cl_util.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/lib/cl_util.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/lib/cl_util.h gdb-10.2/gdb/testsuite/lib/cl_util.h --- gdb-9.1/gdb/testsuite/lib/cl_util.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/lib/cl_util.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/lib/compiler.c gdb-10.2/gdb/testsuite/lib/compiler.c --- gdb-9.1/gdb/testsuite/lib/compiler.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/lib/compiler.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This test file is part of GDB, the GNU debugger. - Copyright 1995-2020 Free Software Foundation, Inc. + Copyright 1995-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/lib/compiler.cc gdb-10.2/gdb/testsuite/lib/compiler.cc --- gdb-9.1/gdb/testsuite/lib/compiler.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/lib/compiler.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This test file is part of GDB, the GNU debugger. - Copyright 1995-2020 Free Software Foundation, Inc. + Copyright 1995-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/lib/compile-support.exp gdb-10.2/gdb/testsuite/lib/compile-support.exp --- gdb-9.1/gdb/testsuite/lib/compile-support.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/lib/compile-support.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/lib/completion-support.exp gdb-10.2/gdb/testsuite/lib/completion-support.exp --- gdb-9.1/gdb/testsuite/lib/completion-support.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/lib/completion-support.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2017-2020 Free Software Foundation, Inc. +# Copyright 2017-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -108,13 +108,19 @@ set test "tab complete \"$input_line\"" send_gdb "$input_line\t" + set res 1 gdb_test_multiple "" "$test" { -re "^$complete_line_re$append_char_re$" { pass "$test" } + timeout { + fail "$test (timeout)" + set res -1 + } } clear_input_line $test + return $res } # Test that completing INPUT_LINE with TAB completes to "INPUT_LINE + @@ -242,7 +248,10 @@ proc test_gdb_complete_unique_re { input_line complete_line_re {append_char " "} {max_completions 0}} { set append_char_re [string_to_regexp $append_char] if { [readline_is_used] } { - test_gdb_complete_tab_unique $input_line $complete_line_re $append_char_re + if { [test_gdb_complete_tab_unique $input_line $complete_line_re \ + $append_char_re] == -1 } { + return -1 + } } # Trim INPUT_LINE and COMPLETE LINE, for the case we're completing @@ -266,6 +275,7 @@ } test_gdb_complete_cmd_unique $input_line $expected_output_re + return 1 } # Like TEST_GDB_COMPLETE_UNIQUE_RE, but COMPLETE_LINE is a string, not @@ -301,9 +311,22 @@ set end [string length $input] } + set timeouts 0 + set max_timeouts 3 for {set i $start} {$i < $end} {incr i} { set line [string range $input 0 $i] - test_gdb_complete_unique_re "$line" $completion_re + set res [test_gdb_complete_unique_re "$line" $completion_re] + if { $res == -1 } { + incr timeouts + } else { + if { $timeouts > 0 } { + set timeouts 0 + } + } + if { $timeouts == $max_timeouts } { + verbose -log "Consecutive timeouts in test_complete_prefix_range_re, giving up" + break + } } } @@ -532,10 +555,19 @@ # Force showing two commands. gdb_test_no_output "set max-completions 2" "" - test_gdb_complete_multiple $input_line "" "" { - "!" - "+" - } "" "" 1 + # TUI adds additional commands to the possible completions, so we + # need different patterns depending on whether or not it is enabled. + if { [skip_tui_tests] } { + test_gdb_complete_multiple $input_line "" "" { + "!" + "actions" + } "" "" 1 + } else { + test_gdb_complete_multiple $input_line "" "" { + "!" + "+" + } "" "" 1 + } # Restore. gdb_test_no_output "set max-completions $max_completions" "" diff -Nru gdb-9.1/gdb/testsuite/lib/cp-support.exp gdb-10.2/gdb/testsuite/lib/cp-support.exp --- gdb-9.1/gdb/testsuite/lib/cp-support.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/lib/cp-support.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This test code is part of GDB, the GNU debugger. -# Copyright 2003-2020 Free Software Foundation, Inc. +# Copyright 2003-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/lib/data-structures.exp gdb-10.2/gdb/testsuite/lib/data-structures.exp --- gdb-9.1/gdb/testsuite/lib/data-structures.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/lib/data-structures.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2017-2020 Free Software Foundation, Inc. +# Copyright 2017-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/lib/d-support.exp gdb-10.2/gdb/testsuite/lib/d-support.exp --- gdb-9.1/gdb/testsuite/lib/d-support.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/lib/d-support.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/lib/dtrace.exp gdb-10.2/gdb/testsuite/lib/dtrace.exp --- gdb-9.1/gdb/testsuite/lib/dtrace.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/lib/dtrace.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -52,7 +52,8 @@ } # 2. Compile testprogram.c. - set options [list debug additional_flags=-I[file dirname $out_header_file]] + set options [list debug quiet \ + additional_flags=-I[file dirname $out_header_file]] if {[gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}.o" object ${options}] != ""} { return -1 } @@ -65,7 +66,8 @@ } # 4. Link everything together to get the test program. - if {[gdb_compile "${binfile}.o ${binfile}-p.o" ${binfile} executable {debug}] != ""} { + if {[gdb_compile "${binfile}.o ${binfile}-p.o" ${binfile} executable \ + {debug quiet}] != ""} { return -1 } } diff -Nru gdb-9.1/gdb/testsuite/lib/dwarf.exp gdb-10.2/gdb/testsuite/lib/dwarf.exp --- gdb-9.1/gdb/testsuite/lib/dwarf.exp 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/testsuite/lib/dwarf.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -114,12 +114,12 @@ # static void func (void) {} # -proc function_range { func src } { +proc function_range { func src {options {debug}} } { global decimal gdb_prompt set exe [standard_temp_file func_addr[pid].x] - gdb_compile $src $exe executable {debug} + gdb_compile $src $exe executable $options gdb_exit gdb_start @@ -164,6 +164,22 @@ return [list "${func}_label - $func_label_offset" $func_length] } +# Extract the start, length, and end for function called NAME and +# create suitable variables in the callers scope. +proc get_func_info { name {options {debug}} } { + global srcdir subdir srcfile + + upvar 1 "${name}_start" func_start + upvar 1 "${name}_len" func_len + upvar 1 "${name}_end" func_end + + lassign [function_range ${name} \ + [list ${srcdir}/${subdir}/$srcfile] \ + ${options}] \ + func_start func_len + set func_end "$func_start + $func_len" +} + # A DWARF assembler. # # All the variables in this namespace are private to the @@ -203,11 +219,11 @@ # which will be substituted by one or more standard or macro attributes. # supported macro attributes are: # -# - MACRO_AT_range { FUNC FILE } +# - MACRO_AT_range { FUNC } # It is substituted by DW_AT_low_pc and DW_AT_high_pc with the start and -# end address of function FUNC in file FILE. +# end address of function FUNC in file $srcdir/$subdir/$srcfile. # -# - MACRO_AT_func { FUNC FILE } +# - MACRO_AT_func { FUNC } # It is substituted by DW_AT_name with FUNC and MACRO_AT_range. # # If FORM is given, it should name a DW_FORM_ constant. @@ -460,7 +476,9 @@ } DW_FORM_ref_udata - - DW_FORM_udata { + DW_FORM_udata - + DW_FORM_loclistx - + DW_FORM_rnglistx { _op .uleb128 $value } @@ -501,11 +519,15 @@ } SPECIAL_expr { + variable _cu_version + variable _cu_addr_size + variable _cu_offset_size + set l1 [new_label "expr_start"] set l2 [new_label "expr_end"] _op .uleb128 "$l2 - $l1" "expression" define_label $l1 - _location $value + _location $value $_cu_version $_cu_addr_size $_cu_offset_size define_label $l2 } @@ -605,12 +627,13 @@ # Handle macro attribute MACRO_AT_range. proc _handle_macro_at_range { attr_value } { - if {[llength $attr_value] != 2} { - error "usage: MACRO_AT_range { func file }" + if {[llength $attr_value] != 1} { + error "usage: MACRO_AT_range { func }" } set func [lindex $attr_value 0] - set src [lindex $attr_value 1] + global srcdir subdir srcfile + set src ${srcdir}/${subdir}/${srcfile} set result [function_range $func $src] _handle_attribute DW_AT_low_pc [lindex $result 0] \ @@ -622,7 +645,7 @@ # Handle macro attribute MACRO_AT_func. proc _handle_macro_at_func { attr_value } { - if {[llength $attr_value] != 2} { + if {[llength $attr_value] != 1} { error "usage: MACRO_AT_func { func file }" } _handle_attribute DW_AT_name [lindex $attr_value 0] DW_FORM_string @@ -806,15 +829,6 @@ _emit "${name}:" } - # Declare a global label. This is typically used to refer to - # labels defined in other files, for example a function defined in - # a .c file. - proc extern {args} { - foreach name $args { - _op .global $name - } - } - # A higher-level interface to label handling. # # ARGS is a list of label descriptors. Each one is either a @@ -855,18 +869,28 @@ # This is a miniature assembler for location expressions. It is # suitable for use in the attributes to a DIE. Its output is # prefixed with "=" to make it automatically use DW_FORM_block. + # # BODY is split by lines, and each line is taken to be a list. + # + # DWARF_VERSION is the DWARF version for the section where the location + # description is found. + # + # ADDR_SIZE is the length in bytes (4 or 8) of an address on the target + # machine (typically found in the header of the section where the location + # description is found). + # + # OFFSET_SIZE is the length in bytes (4 or 8) of an offset into a DWARF + # section. This typically depends on whether 32-bit or 64-bit DWARF is + # used, as indicated in the header of the section where the location + # description is found. + # # (FIXME should use 'info complete' here.) # Each list's first element is the opcode, either short or long # forms are accepted. # FIXME argument handling # FIXME move docs - proc _location {body} { + proc _location { body dwarf_version addr_size offset_size } { variable _constants - variable _cu_label - variable _cu_version - variable _cu_addr_size - variable _cu_offset_size foreach line [split $body \n] { # Ignore blank lines, and allow embedded comments. @@ -878,7 +902,7 @@ switch -exact -- $opcode { DW_OP_addr { - _op .${_cu_addr_size}byte [lindex $line 1] + _op .${addr_size}byte [lindex $line 1] } DW_OP_regx { @@ -958,10 +982,10 @@ # Here label is a section offset. set label [lindex $line 1] - if { $_cu_version == 2 } { - _op .${_cu_addr_size}byte $label + if { $dwarf_version == 2 } { + _op .${addr_size}byte $label } else { - _op .${_cu_offset_size}byte $label + _op .${offset_size}byte $label } _op .sleb128 [lindex $line 2] } @@ -973,10 +997,10 @@ # Here label is a section offset. set label [lindex $line 1] - if { $_cu_version == 2 } { - _op .${_cu_addr_size}byte $label + if { $dwarf_version == 2 } { + _op .${addr_size}byte $label } else { - _op .${_cu_offset_size}byte $label + _op .${offset_size}byte $label } } @@ -1010,7 +1034,7 @@ # default = 0 (32-bit) # version n - DWARF version number to emit # default = 4 - # addr_size n - the size of addresses, 32, 64, or default + # addr_size n - the size of addresses in bytes: 4, 8, or default # default = default # fission 0|1 - boolean indicating if generating Fission debug info # default = 0 @@ -1075,8 +1099,16 @@ } define_label $start_label _op .2byte $_cu_version Version - _op .${_cu_offset_size}byte $my_abbrevs Abbrevs - _op .byte $_cu_addr_size "Pointer size" + + # The CU header for DWARF 4 and 5 are slightly different. + if { $_cu_version == 5 } { + _op .byte 0x1 "DW_UT_compile" + _op .byte $_cu_addr_size "Pointer size" + _op .${_cu_offset_size}byte $my_abbrevs Abbrevs + } else { + _op .${_cu_offset_size}byte $my_abbrevs Abbrevs + _op .byte $_cu_addr_size "Pointer size" + } _defer_output $_abbrev_section { define_label $my_abbrevs @@ -1101,7 +1133,7 @@ # default = 0 (32-bit) # version n - DWARF version number to emit # default = 4 - # addr_size n - the size of addresses, 32, 64, or default + # addr_size n - the size of addresses in bytes: 4, 8, or default # default = default # fission 0|1 - boolean indicating if generating Fission debug info # default = 0 @@ -1273,6 +1305,401 @@ uplevel $body } + # Emit a DWARF .debug_rnglists section. + # + # The target address size is based on the current target's address size. + # + # There is one mandatory positional argument, BODY, which must be Tcl code + # that emits the content of the section. It is evaluated in the caller's + # context. + # + # The following option can be used: + # + # - -is-64 true|false: Whether to use 64-bit DWARF instead of 32-bit DWARF. + # The default is 32-bit. + + proc rnglists { args } { + variable _debug_rnglists_addr_size + variable _debug_rnglists_offset_size + variable _debug_rnglists_is_64_dwarf + + parse_args {{"is-64" "false"}} + + if { [llength $args] != 1 } { + error "rnglists proc expects one positional argument (body)" + } + + lassign $args body + + if [is_64_target] { + set _debug_rnglists_addr_size 8 + } else { + set _debug_rnglists_addr_size 4 + } + + if { ${is-64} } { + set _debug_rnglists_offset_size 8 + set _debug_rnglists_is_64_dwarf true + } else { + set _debug_rnglists_offset_size 4 + set _debug_rnglists_is_64_dwarf false + } + + _section ".debug_rnglists" + + # Count of tables in the section. + variable _debug_rnglists_table_count 0 + + # Compute the label name for list at index LIST_IDX, for the current + # table. + + proc _compute_list_label { list_idx } { + variable _debug_rnglists_table_count + + return ".Lrnglists_table_${_debug_rnglists_table_count}_list_${list_idx}" + } + + # Generate one table (header + offset array + range lists). + # + # Accepts one positional argument, BODY. BODY may call the LIST_ + # procedure to generate rnglists. + # + # The -post-header-label option can be used to define a label just after + # the header of the table. This is the label that a DW_AT_rnglists_base + # attribute will usually refer to. + # + # The `-with-offset-array true|false` option can be used to control + # whether the headers of the location list tables have an array of + # offset. The default is true. + + proc table { args } { + variable _debug_rnglists_table_count + variable _debug_rnglists_addr_size + variable _debug_rnglists_offset_size + variable _debug_rnglists_is_64_dwarf + + parse_args { + {post-header-label ""} + {with-offset-array true} + } + + if { [llength $args] != 1 } { + error "table proc expects one positional argument (body)" + } + + lassign $args body + + # Generate one range list. + # + # BODY may call the various procs defined below to generate list entries. + # They correspond to the range list entry kinds described in section 2.17.3 + # of the DWARF 5 spec. + # + # To define a label pointing to the beginning of the list, use + # the conventional way of declaring and defining labels: + # + # declare_labels the_list + # + # the_list: list_ { + # ... + # } + + proc list_ { body } { + variable _debug_rnglists_list_count + + # Define a label for this list. It is used to build the offset + # array later. + set list_label [_compute_list_label $_debug_rnglists_list_count] + define_label $list_label + + # Emit a DW_RLE_start_end entry. + + proc start_end { start end } { + variable _debug_rnglists_addr_size + + _op .byte 0x06 "DW_RLE_start_end" + _op .${_debug_rnglists_addr_size}byte $start "start" + _op .${_debug_rnglists_addr_size}byte $end "end" + } + + uplevel $body + + # Emit end of list. + _op .byte 0x00 "DW_RLE_end_of_list" + + incr _debug_rnglists_list_count + } + + # Count of lists in the table. + variable _debug_rnglists_list_count 0 + + # Generate the lists ops first, because we need to know how many + # lists there are to generate the header and offset table. + set lists_ops [_defer_to_string { + uplevel $body + }] + + set post_unit_len_label \ + [_compute_label "rnglists_table_${_debug_rnglists_table_count}_post_unit_len"] + set post_header_label \ + [_compute_label "rnglists_table_${_debug_rnglists_table_count}_post_header"] + set table_end_label \ + [_compute_label "rnglists_table_${_debug_rnglists_table_count}_end"] + + # Emit the table header. + if { $_debug_rnglists_is_64_dwarf } { + _op .4byte 0xffffffff "unit length 1/2" + _op .8byte "$table_end_label - $post_unit_len_label" "unit length 2/2" + } else { + _op .4byte "$table_end_label - $post_unit_len_label" "unit length" + } + + define_label $post_unit_len_label + + _op .2byte 5 "dwarf version" + _op .byte $_debug_rnglists_addr_size "address size" + _op .byte 0 "segment selector size" + + if { ${with-offset-array} } { + _op .4byte "$_debug_rnglists_list_count" "offset entry count" + } else { + _op .4byte 0 "offset entry count" + } + + define_label $post_header_label + + # Define the user post-header label, if provided. + if { ${post-header-label} != "" } { + define_label ${post-header-label} + } + + # Emit the offset array. + if { ${with-offset-array} } { + for {set list_idx 0} {$list_idx < $_debug_rnglists_list_count} {incr list_idx} { + set list_label [_compute_list_label $list_idx] + _op .${_debug_rnglists_offset_size}byte "$list_label - $post_header_label" "offset of list $list_idx" + } + } + + # Emit the actual list data. + _emit "$lists_ops" + + define_label $table_end_label + + incr _debug_rnglists_table_count + } + + uplevel $body + } + + # Emit a DWARF .debug_loclists section. + # + # The target address size is based on the current target's address size. + # + # There is one mandatory positional argument, BODY, which must be Tcl code + # that emits the content of the section. It is evaluated in the caller's + # context. + # + # The following option can be used: + # + # - -is-64 true|false: Whether to use 64-bit DWARF instead of 32-bit DWARF. + # The default is 32-bit. + + proc loclists { args } { + variable _debug_loclists_addr_size + variable _debug_loclists_offset_size + variable _debug_loclists_is_64_dwarf + + parse_args {{"is-64" "false"}} + + if { [llength $args] != 1 } { + error "loclists proc expects one positional argument (body)" + } + + lassign $args body + + if [is_64_target] { + set _debug_loclists_addr_size 8 + } else { + set _debug_loclists_addr_size 4 + } + + if { ${is-64} } { + set _debug_loclists_offset_size 8 + set _debug_loclists_is_64_dwarf true + } else { + set _debug_loclists_offset_size 4 + set _debug_loclists_is_64_dwarf false + } + + _section ".debug_loclists" + + # Count of tables in the section. + variable _debug_loclists_table_count 0 + + # Compute the label name for list at index LIST_IDX, for the current + # table. + + proc _compute_list_label { list_idx } { + variable _debug_loclists_table_count + + return ".Lloclists_table_${_debug_loclists_table_count}_list_${list_idx}" + } + + # Generate one table (header + offset array + location lists). + # + # Accepts one position argument, BODY. BODY may call the LIST_ + # procedure to generate loclists. + # + # The -post-header-label option can be used to define a label just after the + # header of the table. This is the label that a DW_AT_loclists_base + # attribute will usually refer to. + # + # The `-with-offset-array true|false` option can be used to control + # whether the headers of the location list tables have an array of + # offset. The default is true. + + proc table { args } { + variable _debug_loclists_table_count + variable _debug_loclists_addr_size + variable _debug_loclists_offset_size + variable _debug_loclists_is_64_dwarf + + parse_args { + {post-header-label ""} + {with-offset-array true} + } + + if { [llength $args] != 1 } { + error "table proc expects one positional argument (body)" + } + + lassign $args body + + # Generate one location list. + # + # BODY may call the various procs defined below to generate list + # entries. They correspond to the location list entry kinds + # described in section 2.6.2 of the DWARF 5 spec. + # + # To define a label pointing to the beginning of the list, use + # the conventional way of declaring and defining labels: + # + # declare_labels the_list + # + # the_list: list_ { + # ... + # } + + proc list_ { body } { + variable _debug_loclists_list_count + + # Count the location descriptions in this list. + variable _debug_loclists_locdesc_count 0 + + # Define a label for this list. It is used to build the offset + # array later. + set list_label [_compute_list_label $_debug_loclists_list_count] + define_label $list_label + + # Emit a DW_LLE_start_length entry. + + proc start_length { start length locdesc } { + variable _debug_loclists_is_64_dwarf + variable _debug_loclists_addr_size + variable _debug_loclists_offset_size + variable _debug_loclists_table_count + variable _debug_loclists_list_count + variable _debug_loclists_locdesc_count + + _op .byte 0x08 "DW_LLE_start_length" + + # Start and end of the address range. + _op .${_debug_loclists_addr_size}byte $start "start" + _op .uleb128 $length "length" + + # Length of location description. + set locdesc_start_label ".Lloclists_table_${_debug_loclists_table_count}_list_${_debug_loclists_list_count}_locdesc_${_debug_loclists_locdesc_count}_start" + set locdesc_end_label ".Lloclists_table_${_debug_loclists_table_count}_list_${_debug_loclists_list_count}_locdesc_${_debug_loclists_locdesc_count}_end" + _op .uleb128 "$locdesc_end_label - $locdesc_start_label" "locdesc length" + + define_label $locdesc_start_label + set dwarf_version 5 + _location $locdesc $dwarf_version $_debug_loclists_addr_size $_debug_loclists_offset_size + define_label $locdesc_end_label + + incr _debug_loclists_locdesc_count + } + + uplevel $body + + # Emit end of list. + _op .byte 0x00 "DW_LLE_end_of_list" + + incr _debug_loclists_list_count + } + + # Count of lists in the table. + variable _debug_loclists_list_count 0 + + # Generate the lists ops first, because we need to know how many + # lists there are to generate the header and offset table. + set lists_ops [_defer_to_string { + uplevel $body + }] + + set post_unit_len_label \ + [_compute_label "loclists_table_${_debug_loclists_table_count}_post_unit_len"] + set post_header_label \ + [_compute_label "loclists_table_${_debug_loclists_table_count}_post_header"] + set table_end_label \ + [_compute_label "loclists_table_${_debug_loclists_table_count}_end"] + + # Emit the table header. + if { $_debug_loclists_is_64_dwarf } { + _op .4byte 0xffffffff "unit length 1/2" + _op .8byte "$table_end_label - $post_unit_len_label" "unit length 2/2" + } else { + _op .4byte "$table_end_label - $post_unit_len_label" "unit length" + } + + define_label $post_unit_len_label + + _op .2byte 5 "DWARF version" + _op .byte $_debug_loclists_addr_size "address size" + _op .byte 0 "segment selector size" + + if { ${with-offset-array} } { + _op .4byte "$_debug_loclists_list_count" "offset entry count" + } else { + _op .4byte 0 "offset entry count" + } + + define_label $post_header_label + + # Define the user post-header label, if provided. + if { ${post-header-label} != "" } { + define_label ${post-header-label} + } + + # Emit the offset array. + if { ${with-offset-array} } { + for {set list_idx 0} {$list_idx < $_debug_loclists_list_count} {incr list_idx} { + set list_label [_compute_list_label $list_idx] + _op .${_debug_loclists_offset_size}byte "$list_label - $post_header_label" "offset of list $list_idx" + } + } + + # Emit the actual list data. + _emit "$lists_ops" + + define_label $table_end_label + + incr _debug_loclists_table_count + } + + uplevel $body + } # Emit a DWARF .debug_line unit. # OPTIONS is a list with an even number of elements containing @@ -1282,7 +1709,7 @@ # default = 0 (32-bit) # version n - DWARF version number to emit # default = 4 - # addr_size n - the size of addresses, 32, 64, or default + # addr_size n - the size of addresses in bytes: 4, 8, or default # default = default # # LABEL is the label of the current unit (which is probably @@ -1309,12 +1736,16 @@ set is_64 0 set _unit_version 4 set _unit_addr_size default + set _line_saw_program 0 + set _line_saw_file 0 + set _default_is_stmt 1 foreach { name value } $options { switch -exact -- $name { is_64 { set is_64 $value } version { set _unit_version $value } addr_size { set _unit_addr_size $value } + default_is_stmt { set _default_is_stmt $value } default { error "unknown option $name" } } } @@ -1361,7 +1792,7 @@ define_label $header_len_label _op .byte 1 "minimum_instruction_length" - _op .byte 1 "default_is_stmt" + _op .byte $_default_is_stmt "default_is_stmt" _op .byte 1 "line_base" _op .byte 1 "line_range" _op .byte 10 "opcode_base" @@ -1403,6 +1834,9 @@ proc program {statements} { variable _line_saw_program variable _line_header_end_label + variable _line + + set _line 1 if "! $_line_saw_program" { # Terminate the file list. @@ -1427,23 +1861,67 @@ } proc DW_LNE_end_sequence {} { + variable _line _op .byte 0 _op .uleb128 1 _op .byte 1 + set _line 1 + } + + proc DW_LNE_user { len opcode } { + set DW_LNE_lo_usr 0x80 + set DW_LNE_hi_usr 0xff + if { $DW_LNE_lo_usr <= $opcode + && $opcode <= $DW_LNE_hi_usr } { + _op .byte 0 + _op .uleb128 $len + _op .byte $opcode + for {set i 1} {$i < $len} {incr i} { + _op .byte 0 + } + } else { + error "unknown vendor specific extended opcode: $opcode" + } } proc DW_LNS_copy {} { _op .byte 1 } + proc DW_LNS_negate_stmt {} { + _op .byte 6 + } + proc DW_LNS_advance_pc {offset} { _op .byte 2 _op .uleb128 ${offset} } proc DW_LNS_advance_line {offset} { + variable _line _op .byte 3 _op .sleb128 ${offset} + set _line [expr $_line + $offset] + } + + # A pseudo line number program instruction, that can be used instead + # of DW_LNS_advance_line. Rather than writing: + # {DW_LNS_advance_line [expr $line1 - 1]} + # {DW_LNS_advance_line [expr $line2 - $line1]} + # {DW_LNS_advance_line [expr $line3 - $line2]} + # we can just write: + # {line $line1} + # {line $line2} + # {line $line3} + proc line {line} { + variable _line + set offset [expr $line - $_line] + DW_LNS_advance_line $offset + } + + proc DW_LNS_set_file {num} { + _op .byte 4 + _op .sleb128 ${num} } foreach statement $statements { diff -Nru gdb-9.1/gdb/testsuite/lib/fortran.exp gdb-10.2/gdb/testsuite/lib/fortran.exp --- gdb-9.1/gdb/testsuite/lib/fortran.exp 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/testsuite/lib/fortran.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This test code is part of GDB, the GNU debugger. -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -34,6 +34,8 @@ return "int4" } elseif {[test_compiler_info {gcc-*}]} { return "integer\\(kind=4\\)" + } elseif {[test_compiler_info {clang-*}]} { + return "integer" } elseif {[test_compiler_info {icc-*}]} { return "INTEGER\\(4\\)" } else { @@ -46,6 +48,8 @@ return "int8" } elseif {[test_compiler_info {gcc-*}]} { return "integer\\(kind=8\\)" + } elseif {[test_compiler_info {clang-*}]} { + return "integer*8" } elseif {[test_compiler_info {icc-*}]} { return "INTEGER\\(8\\)" } else { @@ -58,6 +62,8 @@ return "real4" } elseif {[test_compiler_info {gcc-*}]} { return "real\\(kind=4\\)" + } elseif {[test_compiler_info {clang-*}]} { + return "real" } elseif {[test_compiler_info {icc-*}]} { return "REAL\\(4\\)" } else { @@ -70,6 +76,8 @@ return "real8" } elseif {[test_compiler_info {gcc-*}]} { return "real\\(kind=8\\)" + } elseif {[test_compiler_info {clang-*}]} { + return "double precision" } elseif {[test_compiler_info {icc-*}]} { return "REAL\\(8\\)" } else { @@ -82,6 +90,8 @@ return "complex4" } elseif {[test_compiler_info {gcc-*}]} { return "complex\\(kind=4\\)" + } elseif {[test_compiler_info {clang-*}]} { + return "complex" } elseif {[test_compiler_info {icc-*}]} { return "COMPLEX\\(4\\)" } else { @@ -89,11 +99,41 @@ } } +proc fortran_complex8 {} { + if {[test_compiler_info {gcc-4-[012]-*}]} { + return "complex8" + } elseif {[test_compiler_info {gcc-*}]} { + return "complex\\(kind=8\\)" + } elseif {[test_compiler_info {clang-*}]} { + return "double complex" + } elseif {[test_compiler_info {icc-*}]} { + return "COMPLEX\\(8\\)" + } else { + return "unknown" + } +} + +proc fortran_complex16 {} { + if {[test_compiler_info {gcc-4-[012]-*}]} { + return "complex16" + } elseif {[test_compiler_info {gcc-*}]} { + return "complex\\(kind=16\\)" + } elseif {[test_compiler_info {clang-*}]} { + return "quad complex" + } elseif {[test_compiler_info {icc-*}]} { + return "COMPLEX\\(16\\)" + } else { + return "unknown" + } +} + proc fortran_logical4 {} { if {[test_compiler_info {gcc-4-[012]-*}]} { return "logical4" } elseif {[test_compiler_info {gcc-*}]} { return "logical\\(kind=4\\)" + } elseif {[test_compiler_info {clang-*}]} { + return "logical" } elseif {[test_compiler_info {icc-*}]} { return "LOGICAL\\(4\\)" } else { @@ -106,9 +146,31 @@ return "character1" } elseif {[test_compiler_info {gcc-*}]} { return "character\\(kind=1\\)" + } elseif {[test_compiler_info {clang-*}]} { + return "character" } elseif {[test_compiler_info {icc-*}]} { return "CHARACTER\\(1\\)" } else { return "unknown" } } + +# Return name of the main procedure based on the compiler version. + +proc fortran_main {} { + if {[test_compiler_info {gcc-4-[012]-*}] + || [test_compiler_info {gcc-*}] + || [test_compiler_info {icc-*}]} { + return "MAIN__" + } elseif {[test_compiler_info {clang-*}]} { + return "MAIN_" + } else { + return "unknown" + } +} + +# Fortran version of runto_main. + +proc fortran_runto_main { } { + return [runto [fortran_main]] +} diff -Nru gdb-9.1/gdb/testsuite/lib/future.exp gdb-10.2/gdb/testsuite/lib/future.exp --- gdb-9.1/gdb/testsuite/lib/future.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/lib/future.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2004-2020 Free Software Foundation, Inc. +# Copyright 2004-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -172,7 +172,9 @@ return $eu_unstrip } -proc gdb_default_target_compile {source destfile type options} { +# Local version of default_target_compile, to be used for languages that +# dejagnu's default_target_compile doesn't support. +proc gdb_default_target_compile_1 {source destfile type options} { global target_triplet global tool_root_dir global CFLAGS_FOR_TARGET @@ -627,40 +629,83 @@ return ${comp_output} } -# See if the version of dejaGNU being used to run the testsuite is -# recent enough to contain support for building Ada programs or not. -# If not, then use the functions above in place of the ones provided -# by dejaGNU. This is only temporary (brobecker/2004-03-31). +# If dejagnu's default_target_compile supports the language specified in +# OPTIONS, use it. Otherwise, use gdb_default_target_compile_1. +proc gdb_default_target_compile {source destfile type options} { + global use_gdb_compile + + set need_local_lang 0 + set need_local_early_flags 0 + foreach i $options { + + if { $i == "ada" || $i == "d" || $i == "go" || $i == "rust" } { + set need_local_lang [info exists use_gdb_compile($i)] + } + + if { $i == "c++" } { + set need_local_lang 0 + } + + if { $i == "f77" || $i == "f90" } { + set need_local_lang [info exists use_gdb_compile(fortran)] + } + + if { [regexp "^early_flags=" $i] } { + set need_local_early_flags 1 + } + } + + if { $need_local_lang || $need_local_early_flags } { + return [gdb_default_target_compile_1 $source $destfile $type $options] + } + + return [dejagnu_default_target_compile $source $destfile $type $options] +} + +# Array of languages for which dejagnu's default_target_compile is missing +# support. +array set use_gdb_compile [list] + +# Note missing support in dejagnu's default_target_compile. This +# needs to be fixed by porting the missing support to Dejagnu. +set note_prefix "Dejagnu's default_target_compile is missing support for " +set note_suffix ", using local override" -set use_gdb_compile 0 if {[info procs find_gnatmake] == ""} { rename gdb_find_gnatmake find_gnatmake - set use_gdb_compile 1 + set use_gdb_compile(ada) 1 + gdb_note [join [list $note_prefix "Ada" $note_suffix] ""] } if {[info procs find_gfortran] == ""} { rename gdb_find_gfortran find_gfortran - set use_gdb_compile 1 + set use_gdb_compile(fortran) 1 + gdb_note [join [list $note_prefix "Fortran" $note_suffix] ""] } if {[info procs find_go_linker] == ""} { rename gdb_find_go find_go rename gdb_find_go_linker find_go_linker - set use_gdb_compile 1 + set use_gdb_compile(go) 1 + gdb_note [join [list $note_prefix "Go" $note_suffix] ""] } if {[info procs find_gdc] == ""} { rename gdb_find_gdc find_gdc - set use_gdb_compile 1 + set use_gdb_compile(d) 1 + gdb_note [join [list $note_prefix "D" $note_suffix] ""] } if {[info procs find_rustc] == ""} { rename gdb_find_rustc find_rustc - set use_gdb_compile 1 + set use_gdb_compile(rust) 1 + gdb_note [join [list $note_prefix "Rust" $note_suffix] ""] } -if {$use_gdb_compile} { - catch {rename default_target_compile {}} +# If dejagnu's default_target_compile is missing support for any language, +# override it. +if { [array size use_gdb_compile] != 0 } { + catch {rename default_target_compile dejagnu_default_target_compile} rename gdb_default_target_compile default_target_compile } diff -Nru gdb-9.1/gdb/testsuite/lib/gdb.exp gdb-10.2/gdb/testsuite/lib/gdb.exp --- gdb-9.1/gdb/testsuite/lib/gdb.exp 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/testsuite/lib/gdb.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1992-2020 Free Software Foundation, Inc. +# Copyright 1992-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -25,10 +25,65 @@ exit 2 } +# List of procs to run in gdb_finish. +set gdb_finish_hooks [list] + +# Variable in which we keep track of globals that are allowed to be live +# across test-cases. +array set gdb_persistent_globals {} + +# Mark variable names in ARG as a persistent global, and declare them as +# global in the calling context. Can be used to rewrite "global var_a var_b" +# into "gdb_persistent_global var_a var_b". +proc gdb_persistent_global { args } { + global gdb_persistent_globals + foreach varname $args { + uplevel 1 global $varname + set gdb_persistent_globals($varname) 1 + } +} + +# Mark variable names in ARG as a persistent global. +proc gdb_persistent_global_no_decl { args } { + global gdb_persistent_globals + foreach varname $args { + set gdb_persistent_globals($varname) 1 + } +} + +# Override proc load_lib. +rename load_lib saved_load_lib +# Run the runtest version of load_lib, and mark all variables that were +# created by this call as persistent. +proc load_lib { file } { + array set known_global {} + foreach varname [info globals] { + set known_globals($varname) 1 + } + + set code [catch "saved_load_lib $file" result] + + foreach varname [info globals] { + if { ![info exists known_globals($varname)] } { + gdb_persistent_global_no_decl $varname + } + } + + if {$code == 1} { + global errorInfo errorCode + return -code error -errorinfo $errorInfo -errorcode $errorCode $result + } elseif {$code > 1} { + return -code $code $result + } + + return $result +} + load_lib libgloss.exp load_lib cache.exp load_lib gdb-utils.exp load_lib memory.exp +load_lib check-test-names.exp global GDB @@ -117,7 +172,7 @@ set octal "\[0-7\]+" -set inferior_exited_re "(\\\[Inferior \[0-9\]+ \\(.*\\) exited)" +set inferior_exited_re "(?:\\\[Inferior \[0-9\]+ \\(\[^\n\r\]*\\) exited)" # A regular expression that matches a value history number. # E.g., $1, $2, etc. @@ -159,7 +214,6 @@ # proc gdb_unload {} { - global verbose global GDB global gdb_prompt send_gdb "file\n" @@ -242,14 +296,19 @@ # Generic run command. # +# Return 0 if we could start the program, -1 if we could not. +# # The second pattern below matches up to the first newline *only*. # Using ``.*$'' could swallow up output that we attempt to match # elsewhere. # +# INFERIOR_ARGS is passed as arguments to the start command, so may contain +# inferior arguments. +# # N.B. This function does not wait for gdb to return to the prompt, # that is the caller's responsibility. -proc gdb_run_cmd {args} { +proc gdb_run_cmd { {inferior_args {}} } { global gdb_prompt use_gdb_stub foreach command [gdb_init_commands] { @@ -265,15 +324,15 @@ if $use_gdb_stub { if [target_info exists gdb,do_reload_on_run] { - if { [gdb_reload] != 0 } { - return + if { [gdb_reload $inferior_args] != 0 } { + return -1 } send_gdb "continue\n" gdb_expect 60 { -re "Continu\[^\r\n\]*\[\r\n\]" {} default {} } - return + return 0 } if [target_info exists gdb,start_symbol] { @@ -289,7 +348,7 @@ # clever and not send a command when it has failed. if [expr $start_attempt > 3] { perror "Jump to start() failed (retry count exceeded)" - return + return -1 } set start_attempt [expr $start_attempt + 1] gdb_expect 30 { @@ -298,7 +357,7 @@ } -re "No symbol \"_start\" in current.*$gdb_prompt $" { perror "Can't find start symbol to run in gdb_run" - return + return -1 } -re "No symbol \"start\" in current.*$gdb_prompt $" { send_gdb "jump *_start\n" @@ -310,26 +369,27 @@ send_gdb "y\n" answer } -re "The program is not being run.*$gdb_prompt $" { - if { [gdb_reload] != 0 } { - return + if { [gdb_reload $inferior_args] != 0 } { + return -1 } send_gdb "jump *$start\n" } timeout { perror "Jump to start() failed (timeout)" - return + return -1 } } } - return + + return 0 } if [target_info exists gdb,do_reload_on_run] { - if { [gdb_reload] != 0 } { - return + if { [gdb_reload $inferior_args] != 0 } { + return -1 } } - send_gdb "run $args\n" + send_gdb "run $inferior_args\n" # This doesn't work quite right yet. # Use -notransfer here so that test cases (like chng-sym.exp) # may test for additional start-up messages. @@ -343,15 +403,20 @@ # There is no more input expected. } } + + return 0 } # Generic start command. Return 0 if we could start the program, -1 # if we could not. # +# INFERIOR_ARGS is passed as arguments to the start command, so may contain +# inferior arguments. +# # N.B. This function does not wait for gdb to return to the prompt, # that is the caller's responsibility. -proc gdb_start_cmd {args} { +proc gdb_start_cmd { {inferior_args {}} } { global gdb_prompt use_gdb_stub foreach command [gdb_init_commands] { @@ -369,7 +434,7 @@ return -1 } - send_gdb "start $args\n" + send_gdb "start $inferior_args\n" # Use -notransfer here so that test cases (like chng-sym.exp) # may test for additional start-up messages. gdb_expect 60 { @@ -387,10 +452,13 @@ # Generic starti command. Return 0 if we could start the program, -1 # if we could not. # +# INFERIOR_ARGS is passed as arguments to the starti command, so may contain +# inferior arguments. +# # N.B. This function does not wait for gdb to return to the prompt, # that is the caller's responsibility. -proc gdb_starti_cmd {args} { +proc gdb_starti_cmd { {inferior_args {}} } { global gdb_prompt use_gdb_stub foreach command [gdb_init_commands] { @@ -408,7 +476,7 @@ return -1 } - send_gdb "starti $args\n" + send_gdb "starti $inferior_args\n" gdb_expect 60 { -re "The program .* has been started already.*y or n. $" { send_gdb "y\n" answer @@ -584,9 +652,9 @@ return 0 } -re ".*A problem internal to GDB has been detected" { - if { $print_fail } { - fail "$test_name (GDB internal error)" - } + # Always emit a FAIL if we encounter an internal error: internal + # errors are never expected. + fail "$test_name (GDB internal error)" gdb_internal_error_resync return 0 } @@ -699,20 +767,22 @@ } -# gdb_test_multiple COMMAND MESSAGE EXPECT_ARGUMENTS PROMPT_REGEXP +# gdb_test_multiple COMMAND MESSAGE [ -promp PROMPT_REGEXP] [ -lbl ] +# EXPECT_ARGUMENTS # Send a command to gdb; test the result. # # COMMAND is the command to execute, send to GDB with send_gdb. If # this is the null string no command is sent. # MESSAGE is a message to be printed with the built-in failure patterns # if one of them matches. If MESSAGE is empty COMMAND will be used. +# -prompt PROMPT_REGEXP specifies a regexp matching the expected prompt +# after the command output. If empty, defaults to "$gdb_prompt $". +# -lbl specifies that line-by-line matching will be used. # EXPECT_ARGUMENTS will be fed to expect in addition to the standard # patterns. Pattern elements will be evaluated in the caller's # context; action elements will be executed in the caller's context. # Unlike patterns for gdb_test, these patterns should generally include # the final newline and prompt. -# PROMPT_REGEXP is a regexp matching the expected prompt after the command -# output. If empty, defaults to "$gdb_prompt $" # # Returns: # 1 if the test failed, according to a built-in failure pattern @@ -792,7 +862,7 @@ # } # } # -proc gdb_test_multiple { command message user_code { prompt_regexp "" } } { +proc gdb_test_multiple { command message args } { global verbose use_gdb_stub global gdb_prompt pagination_prompt global GDB @@ -802,6 +872,26 @@ upvar expect_out expect_out global any_spawn_id + set line_by_line 0 + set prompt_regexp "" + for {set i 0} {$i < [llength $args]} {incr i} { + set arg [lindex $args $i] + if { $arg == "-prompt" } { + incr i + set prompt_regexp [lindex $args $i] + } elseif { $arg == "-lbl" } { + set line_by_line 1 + } else { + set user_code $arg + break + } + } + if { [expr $i + 1] < [llength $args] } { + error "Too many arguments to gdb_test_multiple" + } elseif { ![info exists user_code] } { + error "Too few arguments to gdb_test_multiple" + } + if { "$prompt_regexp" == "" } { set prompt_regexp "$gdb_prompt $" } @@ -1070,6 +1160,14 @@ } } + if {$line_by_line} { + append code { + -re "\r\n\[^\r\n\]*(?=\r\n)" { + exp_continue + } + } + } + # Now patterns that apply to any spawn id specified. append code { -i $any_spawn_id @@ -1138,6 +1236,28 @@ return $result } +# Usage: gdb_test_multiline NAME INPUT RESULT {INPUT RESULT} ... +# Run a test named NAME, consisting of multiple lines of input. +# After each input line INPUT, search for result line RESULT. +# Succeed if all results are seen; fail otherwise. + +proc gdb_test_multiline { name args } { + global gdb_prompt + set inputnr 0 + foreach {input result} $args { + incr inputnr + if {[gdb_test_multiple $input "$name: input $inputnr: $input" { + -re "\[\r\n\]*($result)\[\r\n\]+($gdb_prompt | *>)$" { + pass $gdb_test_name + } + }]} { + return 1 + } + } + return 0 +} + + # gdb_test COMMAND PATTERN MESSAGE QUESTION RESPONSE # Send a command to gdb; test the result. # @@ -1617,7 +1737,6 @@ proc default_gdb_exit {} { global GDB global INTERNAL_GDBFLAGS GDBFLAGS - global verbose global gdb_spawn_id inferior_spawn_id global inotify_log_file @@ -1683,7 +1802,6 @@ proc gdb_file_cmd { arg } { global gdb_prompt - global verbose global GDB global last_loaded_file @@ -1719,6 +1837,8 @@ } send_gdb "file $arg\n" + set new_symbol_table 0 + set basename [file tail $arg] gdb_expect 120 { -re "Reading symbols from.*LZMA support was disabled.*$gdb_prompt $" { verbose "\t\tLoaded $arg into $GDB; .gnu_debugdata found but no LZMA available" @@ -1736,45 +1856,40 @@ return 0 } -re "Load new symbol table from \".*\".*y or n. $" { + if { $new_symbol_table > 0 } { + perror [join [list "Couldn't load $basename," + "interactive prompt loop detected."]] + return -1 + } send_gdb "y\n" answer - gdb_expect 120 { - -re "Reading symbols from.*$gdb_prompt $" { - verbose "\t\tLoaded $arg with new symbol table into $GDB" - set gdb_file_cmd_debug_info "debug" - return 0 - } - timeout { - perror "Couldn't load $arg, other program already loaded (timeout)." - return -1 - } - eof { - perror "Couldn't load $arg, other program already loaded (eof)." - return -1 - } - } + incr new_symbol_table + set suffix "-- with new symbol table" + set arg "$arg $suffix" + set basename "$basename $suffix" + exp_continue } -re "No such file or directory.*$gdb_prompt $" { - perror "($arg) No such file or directory" + perror "($basename) No such file or directory" return -1 } -re "A problem internal to GDB has been detected" { - fail "($arg) (GDB internal error)" + perror "Couldn't load $basename into GDB (GDB internal error)." gdb_internal_error_resync return -1 } -re "$gdb_prompt $" { - perror "Couldn't load $arg into $GDB." + perror "Couldn't load $basename into GDB." return -1 } timeout { - perror "Couldn't load $arg into $GDB (timeout)." + perror "Couldn't load $basename into GDB (timeout)." return -1 } eof { # This is an attempt to detect a core dump, but seems not to # work. Perhaps we need to match .* followed by eof, in which # gdb_expect does not seem to have a way to do that. - perror "Couldn't load $arg into $GDB (eof)." + perror "Couldn't load $basename into GDB (eof)." return -1 } } @@ -1867,6 +1982,11 @@ unset gdb_spawn_id return -1 } + eof { + perror "(eof) GDB never initialized." + unset gdb_spawn_id + return -1 + } } # force the height to "unlimited", so no pagers get used @@ -1999,22 +2119,24 @@ proc skip_python_tests_prompt { prompt_regexp } { global gdb_py_is_py3k - gdb_test_multiple "python print ('test')" "verify python support" { - -re "not supported.*$prompt_regexp" { - unsupported "Python support is disabled." - return 1 + gdb_test_multiple "python print ('test')" "verify python support" \ + -prompt "$prompt_regexp" { + -re "not supported.*$prompt_regexp" { + unsupported "Python support is disabled." + return 1 + } + -re "$prompt_regexp" {} } - -re "$prompt_regexp" {} - } "$prompt_regexp" - gdb_test_multiple "python print (sys.version_info\[0\])" "check if python 3" { - -re "3.*$prompt_regexp" { - set gdb_py_is_py3k 1 - } - -re ".*$prompt_regexp" { - set gdb_py_is_py3k 0 - } - } "$prompt_regexp" + gdb_test_multiple "python print (sys.version_info\[0\])" "check if python 3" \ + -prompt "$prompt_regexp" { + -re "3.*$prompt_regexp" { + set gdb_py_is_py3k 1 + } + -re ".*$prompt_regexp" { + set gdb_py_is_py3k 0 + } + } return 0 } @@ -2490,6 +2612,18 @@ } executable] } +# Return 1 if compiling go is supported. +gdb_caching_proc support_go_compile { + + return [gdb_can_simple_compile go-hello { + package main + import "fmt" + func main() { + fmt.Println("hello world") + } + } executable go] +} + # Return 1 if GDB can get a type for siginfo from the target, otherwise # return 0. @@ -2927,6 +3061,57 @@ return $skip_tsx_tests } +# Run a test on the target to see if it supports avx512bf16. Return 0 if so, +# 1 if it does not. Based on 'check_vmx_hw_available' from the GCC testsuite. + +gdb_caching_proc skip_avx512bf16_tests { + global srcdir subdir gdb_prompt inferior_exited_re + + set me "skip_avx512bf16_tests" + if { ![istarget "i?86-*-*"] && ![istarget "x86_64-*-*"] } { + verbose "$me: target does not support avx512bf16, returning 1" 2 + return 1 + } + + # Compile a test program. + set src { + int main() { + asm volatile ("vcvtne2ps2bf16 %xmm0, %xmm1, %xmm0"); + return 0; + } + } + if {![gdb_simple_compile $me $src executable]} { + return 1 + } + + # No error message, compilation succeeded so now run it via gdb. + + gdb_exit + gdb_start + gdb_reinitialize_dir $srcdir/$subdir + gdb_load "$obj" + gdb_run_cmd + gdb_expect { + -re ".*Illegal instruction.*${gdb_prompt} $" { + verbose -log "$me: avx512bf16 hardware not detected." + set skip_avx512bf16_tests 1 + } + -re ".*$inferior_exited_re normally.*${gdb_prompt} $" { + verbose -log "$me: avx512bf16 hardware detected." + set skip_avx512bf16_tests 0 + } + default { + warning "\n$me: default case taken." + set skip_avx512bf16_tests 1 + } + } + gdb_exit + remote_file build delete $obj + + verbose "$me: returning $skip_avx512bf16_tests" 2 + return $skip_avx512bf16_tests +} + # Run a test on the target to see if it supports btrace hardware. Return 0 if so, # 1 if it does not. Based on 'check_vmx_hw_available' from the GCC testsuite. @@ -3256,13 +3441,14 @@ proc skip_libstdcxx_probe_tests_prompt { prompt_regexp } { set supported 0 - gdb_test_multiple "info probe" "check for stap probe in libstdc++" { - -re ".*libstdcxx.*catch.*\r\n$prompt_regexp" { - set supported 1 - } - -re "\r\n$prompt_regexp" { + gdb_test_multiple "info probe" "check for stap probe in libstdc++" \ + -prompt "$prompt_regexp" { + -re ".*libstdcxx.*catch.*\r\n$prompt_regexp" { + set supported 1 + } + -re "\r\n$prompt_regexp" { + } } - } "$prompt_regexp" set skip [expr !$supported] return $skip } @@ -3302,15 +3488,16 @@ proc gdb_is_target_1 { target_name target_stack_regexp prompt_regexp } { set test "probe for target ${target_name}" - gdb_test_multiple "maint print target-stack" $test { - -re "${target_stack_regexp}${prompt_regexp}" { - pass $test - return 1 - } - -re "$prompt_regexp" { - pass $test + gdb_test_multiple "maint print target-stack" $test \ + -prompt "$prompt_regexp" { + -re "${target_stack_regexp}${prompt_regexp}" { + pass $test + return 1 + } + -re "$prompt_regexp" { + pass $test + } } - } "$prompt_regexp" return 0 } @@ -3558,6 +3745,8 @@ set gdb_wrapper_initialized 0 set gdb_wrapper_target "" +set gdb_wrapper_file "" +set gdb_wrapper_flags "" proc gdb_wrapper_init { args } { global gdb_wrapper_initialized @@ -3572,11 +3761,18 @@ set result [build_wrapper "testglue.o"] if { $result != "" } { set gdb_wrapper_file [lindex $result 0] + if ![is_remote host] { + set gdb_wrapper_file [file join [pwd] $gdb_wrapper_file] + } set gdb_wrapper_flags [lindex $result 1] } else { warning "Status wrapper failed to build." } + } else { + set gdb_wrapper_file "" + set gdb_wrapper_flags "" } + verbose "set gdb_wrapper_file = $gdb_wrapper_file" set gdb_wrapper_initialized 1 set gdb_wrapper_target [current_target_name] } @@ -3631,7 +3827,14 @@ set postfix "s" } } - set src [standard_temp_file $name-[pid].c] + set ext "c" + foreach flag $compile_flags { + if { "$flag" == "go" } { + set ext "go" + break + } + } + set src [standard_temp_file $name-[pid].$ext] set obj [standard_temp_file $name-[pid].$postfix] set compile_flags [concat $compile_flags {debug nowarnings quiet}] @@ -3696,7 +3899,8 @@ # - ldflags=flag: Add FLAG to the linker flags. # - incdir=path: Add PATH to the searched include directories. # - libdir=path: Add PATH to the linker searched directories. -# - ada, c++, f77: Compile the file as Ada, C++ or Fortran. +# - ada, c++, f77, f90, go, rust: Compile the file as Ada, C++, +# Fortran 77, Fortran 90, Go or Rust. # - debug: Build with debug information. # - optimize: Build with optimization. @@ -3704,7 +3908,6 @@ global GDB_TESTCASE_OPTIONS global gdb_wrapper_file global gdb_wrapper_flags - global gdb_wrapper_initialized global srcdir global objdir global gdb_saved_set_unbuffered_mode_obj @@ -3720,6 +3923,31 @@ set new_options [universal_compile_options] } + # 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. + if {[lsearch -exact $options getting_compiler_info] == -1 + && [lsearch -exact $options rust] == -1 + && [lsearch -exact $options ada] == -1 + && [lsearch -exact $options f77] == -1 + && [lsearch -exact $options f90] == -1 + && [lsearch -exact $options go] == -1 + && [test_compiler_info "clang-*"]} { + lappend new_options "additional_flags=-Wno-unknown-warning-option" + } + + # Treating .c input files as C++ is deprecated in Clang, so + # explicitly force C++ language. + if { [lsearch -exact $options getting_compiler_info] == -1 + && [lsearch -exact $options c++] != -1 + && [test_compiler_info "clang-*"]} { + lappend new_options additional_flags=-x\ c++ + } + # Place (and look for) Fortran `.mod` files in the output # directory for this specific test. if {[lsearch -exact $options f77] != -1 \ @@ -3812,11 +4040,11 @@ verbose "options are $options" verbose "source is $source $dest $type $options" - if { $gdb_wrapper_initialized == 0 } { gdb_wrapper_init } + gdb_wrapper_init if {[target_info exists needs_status_wrapper] && \ [target_info needs_status_wrapper] != "0" && \ - [info exists gdb_wrapper_file]} { + $gdb_wrapper_file != "" } { lappend options "libs=${gdb_wrapper_file}" lappend options "ldflags=${gdb_wrapper_flags}" } @@ -3877,7 +4105,7 @@ # Force output to unbuffered mode, by linking in an object file # with a global contructor that calls setvbuf. # - # Compile the special object seperatelly for two reasons: + # Compile the special object separately for two reasons: # 1) Insulate it from $options. # 2) Avoid compiling it for every gdb_compile invocation, # which is time consuming, especially if we're remote @@ -4589,7 +4817,7 @@ fail "$test (bad file format)" return -1 } - -re ": No such file or directory.*\r\n$gdb_prompt $" { + -re -wrap "[string_to_regexp $core]: No such file or directory.*" { fail "$test (file not found)" return -1 } @@ -4749,12 +4977,73 @@ return 0 } +# +# with_complaints -- Execute BODY and set complaints temporary to N for the +# duration. +# +proc with_complaints { n body } { + global decimal + + # Save current setting of complaints. + set save "" + set show_complaints_re \ + "Max number of complaints about incorrect symbols is ($decimal)\\." + gdb_test_multiple "show complaints" "" { + -re -wrap $show_complaints_re { + set save $expect_out(1,string) + } + } + + if { $save == "" } { + perror "Did not manage to set complaints" + } else { + # Set complaints. + gdb_test_no_output "set complaints $n" "" + } + + set code [catch {uplevel 1 $body} result] + + # Restore saved setting of complaints. + if { $save != "" } { + gdb_test_no_output "set complaints $save" "" + } + + if {$code == 1} { + global errorInfo errorCode + return -code $code -errorinfo $errorInfo -errorcode $errorCode $result + } else { + return -code $code $result + } +} + +# +# gdb_load_no_complaints -- As gdb_load, but in addition verifies that +# loading caused no symbol reading complaints. +# +proc gdb_load_no_complaints { arg } { + global gdb_prompt gdb_file_cmd_msg decimal + + # Temporarily set complaint to a small non-zero number. + with_complaints 5 { + gdb_load $arg + } + + # Verify that there were no complaints. + set re "^Reading symbols from \[^\r\n\]*\r\n$gdb_prompt $" + gdb_assert {[regexp $re $gdb_file_cmd_msg]} "No complaints" +} + # gdb_reload -- load a file into the target. Called before "running", # either the first time or after already starting the program once, # for remote targets. Most files that override gdb_load should now # override this instead. +# +# INFERIOR_ARGS contains the arguments to pass to the inferiors, as a +# single string to get interpreted by a shell. If the target board +# overriding gdb_reload is a "stub", then it should arrange things such +# these arguments make their way to the inferior process. -proc gdb_reload { } { +proc gdb_reload { {inferior_args {}} } { # For the benefit of existing configurations, default to gdb_load. # Specifying no file defaults to the executable currently being # debugged. @@ -4767,6 +5056,7 @@ return [gdb_test "continue" ".*Breakpoint $decimal, $function .*" "continue to $function"] } +# Default implementation of gdb_init. proc default_gdb_init { test_file_name } { global gdb_wrapper_initialized global gdb_wrapper_target @@ -4774,73 +5064,190 @@ global cleanfiles global pf_prefix - set cleanfiles {} - - gdb_clear_suppressed - - set gdb_test_file_name [file rootname [file tail $test_file_name]] + # Reset the timeout value to the default. This way, any testcase + # that changes the timeout value without resetting it cannot affect + # the timeout used in subsequent testcases. + global gdb_test_timeout + global timeout + set timeout $gdb_test_timeout - # Make sure that the wrapper is rebuilt - # with the appropriate multilib option. - if { $gdb_wrapper_target != [current_target_name] } { - set gdb_wrapper_initialized 0 + if { [regexp ".*gdb\.reverse\/.*" $test_file_name] + && [target_info exists gdb_reverse_timeout] } { + set timeout [target_info gdb_reverse_timeout] } - - # Unlike most tests, we have a small number of tests that generate - # a very large amount of output. We therefore increase the expect - # buffer size to be able to contain the entire test output. This - # is especially needed by gdb.base/info-macros.exp. - match_max -d 65536 - # Also set this value for the currently running GDB. - match_max [match_max -d] - - # We want to add the name of the TCL testcase to the PASS/FAIL messages. - set pf_prefix "[file tail [file dirname $test_file_name]]/[file tail $test_file_name]:" - global gdb_prompt - if [target_info exists gdb_prompt] { - set gdb_prompt [target_info gdb_prompt] - } else { - set gdb_prompt "\\(gdb\\)" - } - global use_gdb_stub - if [info exists use_gdb_stub] { - unset use_gdb_stub - } -} + # If GDB_INOTIFY is given, check for writes to '.'. This is a + # debugging tool to help confirm that the test suite is + # parallel-safe. You need "inotifywait" from the + # inotify-tools package to use this. + global GDB_INOTIFY inotify_pid + if {[info exists GDB_INOTIFY] && ![info exists inotify_pid]} { + global outdir tool inotify_log_file -# Return a path using GDB_PARALLEL. -# ARGS is a list of path elements to append to "$objdir/$GDB_PARALLEL". -# GDB_PARALLEL must be defined, the caller must check. -# -# The default value for GDB_PARALLEL is, canonically, ".". -# The catch is that tests don't expect an additional "./" in file paths so -# omit any directory for the default case. -# GDB_PARALLEL is written as "yes" for the default case in Makefile.in to mark -# its special handling. + set exclusions {outputs temp gdb[.](log|sum) cache} + set exclusion_re ([join $exclusions |]) -proc make_gdb_parallel_path { args } { - global GDB_PARALLEL objdir - set joiner [list "file" "join" $objdir] - if { [info exists GDB_PARALLEL] && $GDB_PARALLEL != "yes" } { - lappend joiner $GDB_PARALLEL - } - set joiner [concat $joiner $args] - return [eval $joiner] -} + set inotify_log_file [standard_temp_file inotify.out] + set inotify_pid [exec inotifywait -r -m -e move,create,delete . \ + --exclude $exclusion_re \ + |& tee -a $outdir/$tool.log $inotify_log_file &] -# Turn BASENAME into a full file name in the standard output -# directory. It is ok if BASENAME is the empty string; in this case -# the directory is returned. + # Wait for the watches; hopefully this is long enough. + sleep 2 -proc standard_output_file {basename} { - global objdir subdir gdb_test_file_name + # Clear the log so that we don't emit a warning the first time + # we check it. + set fd [open $inotify_log_file w] + close $fd + } - set dir [make_gdb_parallel_path outputs $subdir $gdb_test_file_name] + # Block writes to all banned variables, and invocation of all + # banned procedures... + global banned_variables + global banned_procedures + global banned_traced + if (!$banned_traced) { + foreach banned_var $banned_variables { + global "$banned_var" + trace add variable "$banned_var" write error + } + foreach banned_proc $banned_procedures { + global "$banned_proc" + trace add execution "$banned_proc" enter error + } + set banned_traced 1 + } + + # We set LC_ALL, LC_CTYPE, and LANG to C so that we get the same + # messages as expected. + setenv LC_ALL C + setenv LC_CTYPE C + setenv LANG C + + # Don't let a .inputrc file or an existing setting of INPUTRC mess up + # the test results. Even if /dev/null doesn't exist on the particular + # platform, the readline library will use the default setting just by + # failing to open the file. OTOH, opening /dev/null successfully will + # also result in the default settings being used since nothing will be + # read from this file. + setenv INPUTRC "/dev/null" + + # This disables style output, which would interfere with many + # tests. + setenv TERM "dumb" + + # Ensure that GDBHISTFILE and GDBHISTSIZE are removed from the + # environment, we don't want these modifications to the history + # settings. + unset -nocomplain ::env(GDBHISTFILE) + unset -nocomplain ::env(GDBHISTSIZE) + + # Initialize GDB's pty with a fixed size, to make sure we avoid pagination + # during startup. See "man expect" for details about stty_init. + global stty_init + set stty_init "rows 25 cols 80" + + # Some tests (for example gdb.base/maint.exp) shell out from gdb to use + # grep. Clear GREP_OPTIONS to make the behavior predictable, + # especially having color output turned on can cause tests to fail. + setenv GREP_OPTIONS "" + + # Clear $gdbserver_reconnect_p. + global gdbserver_reconnect_p + set gdbserver_reconnect_p 1 + unset gdbserver_reconnect_p + + # Clear $last_loaded_file + global last_loaded_file + unset -nocomplain last_loaded_file + + # Reset GDB number of instances + global gdb_instances + set gdb_instances 0 + + set cleanfiles {} + + gdb_clear_suppressed + + set gdb_test_file_name [file rootname [file tail $test_file_name]] + + # Make sure that the wrapper is rebuilt + # with the appropriate multilib option. + if { $gdb_wrapper_target != [current_target_name] } { + set gdb_wrapper_initialized 0 + } + + # Unlike most tests, we have a small number of tests that generate + # a very large amount of output. We therefore increase the expect + # buffer size to be able to contain the entire test output. This + # is especially needed by gdb.base/info-macros.exp. + match_max -d 65536 + # Also set this value for the currently running GDB. + match_max [match_max -d] + + # We want to add the name of the TCL testcase to the PASS/FAIL messages. + set pf_prefix "[file tail [file dirname $test_file_name]]/[file tail $test_file_name]:" + + global gdb_prompt + if [target_info exists gdb_prompt] { + set gdb_prompt [target_info gdb_prompt] + } else { + set gdb_prompt "\\(gdb\\)" + } + global use_gdb_stub + if [info exists use_gdb_stub] { + unset use_gdb_stub + } + + gdb_setup_known_globals + + if { [info procs ::gdb_tcl_unknown] != "" } { + # Dejagnu overrides proc unknown. The dejagnu version may trigger in a + # test-case but abort the entire test run. To fix this, we install a + # local version here, which reverts dejagnu's override, and restore + # dejagnu's version in gdb_finish. + rename ::unknown ::dejagnu_unknown + proc unknown { args } { + # Use tcl's unknown. + set cmd [lindex $args 0] + unresolved "testcase aborted due to invalid command name: $cmd" + return [uplevel 1 ::gdb_tcl_unknown $args] + } + } +} + +# Return a path using GDB_PARALLEL. +# ARGS is a list of path elements to append to "$objdir/$GDB_PARALLEL". +# GDB_PARALLEL must be defined, the caller must check. +# +# The default value for GDB_PARALLEL is, canonically, ".". +# The catch is that tests don't expect an additional "./" in file paths so +# omit any directory for the default case. +# GDB_PARALLEL is written as "yes" for the default case in Makefile.in to mark +# its special handling. + +proc make_gdb_parallel_path { args } { + global GDB_PARALLEL objdir + set joiner [list "file" "join" $objdir] + if { [info exists GDB_PARALLEL] && $GDB_PARALLEL != "yes" } { + lappend joiner $GDB_PARALLEL + } + set joiner [concat $joiner $args] + return [eval $joiner] +} + +# Turn BASENAME into a full file name in the standard output +# directory. It is ok if BASENAME is the empty string; in this case +# the directory is returned. + +proc standard_output_file {basename} { + global objdir subdir gdb_test_file_name + + set dir [make_gdb_parallel_path outputs $subdir $gdb_test_file_name] file mkdir $dir # If running on MinGW, replace /c/foo with c:/foo if { [ishost *-*-mingw*] } { - set dir [regsub {^/([a-z])/} $dir {\1:/}] + set dir [exec sh -c "cd ${dir} && pwd -W"] } return [file join $dir $basename] } @@ -4870,6 +5277,51 @@ return [file join $dir $basename] } +# Rename file A to file B, if B does not already exists. Otherwise, leave B +# as is and delete A. Return 1 if rename happened. + +proc tentative_rename { a b } { + global errorInfo errorCode + set code [catch {file rename -- $a $b} result] + if { $code == 1 && [lindex $errorCode 0] == "POSIX" \ + && [lindex $errorCode 1] == "EEXIST" } { + file delete $a + return 0 + } + if {$code == 1} { + return -code error -errorinfo $errorInfo -errorcode $errorCode $result + } elseif {$code > 1} { + return -code $code $result + } + return 1 +} + +# Create a file with name FILENAME and contents TXT in the cache directory. +# If EXECUTABLE, mark the new file for execution. + +proc cached_file { filename txt {executable 0}} { + set filename [make_gdb_parallel_path cache $filename] + + if { [file exists $filename] } { + return $filename + } + + set dir [file dirname $filename] + file mkdir $dir + + set tmp_filename $filename.[pid] + set fd [open $tmp_filename w] + puts $fd $txt + close $fd + + if { $executable } { + exec chmod +x $tmp_filename + } + tentative_rename $tmp_filename $filename + + return $filename +} + # Set 'testfile', 'srcfile', and 'binfile'. # # ARGS is a list of source file specifications. @@ -4965,105 +5417,73 @@ # if the banned variables and procedures are already traced. set banned_traced 0 -proc gdb_init { test_file_name } { - # Reset the timeout value to the default. This way, any testcase - # that changes the timeout value without resetting it cannot affect - # the timeout used in subsequent testcases. - global gdb_test_timeout - global timeout - set timeout $gdb_test_timeout - - if { [regexp ".*gdb\.reverse\/.*" $test_file_name] - && [target_info exists gdb_reverse_timeout] } { - set timeout [target_info gdb_reverse_timeout] - } - - # If GDB_INOTIFY is given, check for writes to '.'. This is a - # debugging tool to help confirm that the test suite is - # parallel-safe. You need "inotifywait" from the - # inotify-tools package to use this. - global GDB_INOTIFY inotify_pid - if {[info exists GDB_INOTIFY] && ![info exists inotify_pid]} { - global outdir tool inotify_log_file +# Global array that holds the name of all global variables at the time +# a test script is started. After the test script has completed any +# global not in this list is deleted. +array set gdb_known_globals {} - set exclusions {outputs temp gdb[.](log|sum) cache} - set exclusion_re ([join $exclusions |]) +# Setup the GDB_KNOWN_GLOBALS array with the names of all current +# global variables. +proc gdb_setup_known_globals {} { + global gdb_known_globals - set inotify_log_file [standard_temp_file inotify.out] - set inotify_pid [exec inotifywait -r -m -e move,create,delete . \ - --exclude $exclusion_re \ - |& tee -a $outdir/$tool.log $inotify_log_file &] - - # Wait for the watches; hopefully this is long enough. - sleep 2 - - # Clear the log so that we don't emit a warning the first time - # we check it. - set fd [open $inotify_log_file w] - close $fd + array set gdb_known_globals {} + foreach varname [info globals] { + set gdb_known_globals($varname) 1 } +} - # Block writes to all banned variables, and invocation of all - # banned procedures... - global banned_variables - global banned_procedures - global banned_traced - if (!$banned_traced) { - foreach banned_var $banned_variables { - global "$banned_var" - trace add variable "$banned_var" write error - } - foreach banned_proc $banned_procedures { - global "$banned_proc" - trace add execution "$banned_proc" enter error +# Cleanup the global namespace. Any global not in the +# GDB_KNOWN_GLOBALS array is unset, this ensures we don't "leak" +# globals from one test script to another. +proc gdb_cleanup_globals {} { + global gdb_known_globals gdb_persistent_globals + + foreach varname [info globals] { + if {![info exists gdb_known_globals($varname)]} { + if { [info exists gdb_persistent_globals($varname)] } { + continue + } + uplevel #0 unset $varname } - set banned_traced 1 } +} - # We set LC_ALL, LC_CTYPE, and LANG to C so that we get the same - # messages as expected. - setenv LC_ALL C - setenv LC_CTYPE C - setenv LANG C - - # Don't let a .inputrc file or an existing setting of INPUTRC mess up - # the test results. Even if /dev/null doesn't exist on the particular - # platform, the readline library will use the default setting just by - # failing to open the file. OTOH, opening /dev/null successfully will - # also result in the default settings being used since nothing will be - # read from this file. - setenv INPUTRC "/dev/null" - - # This disables style output, which would interfere with many - # tests. - setenv TERM "dumb" - - # Initialize GDB's pty with a fixed size, to make sure we avoid pagination - # during startup. See "man expect" for details about stty_init. - global stty_init - set stty_init "rows 25 cols 80" - - # Some tests (for example gdb.base/maint.exp) shell out from gdb to use - # grep. Clear GREP_OPTIONS to make the behavior predictable, - # especially having color output turned on can cause tests to fail. - setenv GREP_OPTIONS "" - - # Clear $gdbserver_reconnect_p. - global gdbserver_reconnect_p - set gdbserver_reconnect_p 1 - unset gdbserver_reconnect_p - - # Reset GDB number of instances - global gdb_instances - set gdb_instances 0 +# Create gdb_tcl_unknown, a copy tcl's ::unknown, provided it's present as a +# proc. +set temp [interp create] +if { [interp eval $temp "info procs ::unknown"] != "" } { + set old_args [interp eval $temp "info args ::unknown"] + set old_body [interp eval $temp "info body ::unknown"] + eval proc gdb_tcl_unknown {$old_args} {$old_body} +} +interp delete $temp +unset temp - return [default_gdb_init $test_file_name] +# GDB implementation of ${tool}_init. Called right before executing the +# test-case. +# Overridable function -- you can override this function in your +# baseboard file. +proc gdb_init { args } { + # A baseboard file overriding this proc and calling the default version + # should behave the same as this proc. So, don't add code here, but to + # the default version instead. + return [default_gdb_init {*}$args] } +# GDB implementation of ${tool}_finish. Called right after executing the +# test-case. proc gdb_finish { } { global gdbserver_reconnect_p global gdb_prompt global cleanfiles + global known_globals + + if { [info procs ::gdb_tcl_unknown] != "" } { + # Restore dejagnu's version of proc unknown. + rename ::unknown "" + rename ::dejagnu_unknown ::unknown + } # Exit first, so that the files are no longer in use. gdb_exit @@ -5089,6 +5509,14 @@ } set banned_traced 0 } + + global gdb_finish_hooks + foreach gdb_finish_hook $gdb_finish_hooks { + $gdb_finish_hook + } + set gdb_finish_hooks [list] + + gdb_cleanup_globals } global debug_format @@ -5099,7 +5527,6 @@ proc get_debug_format { } { global gdb_prompt - global verbose global expect_out global debug_format @@ -5390,11 +5817,15 @@ return -1 } set readelf_program [gdb_find_readelf] - set res [catch {exec $readelf_program -d $executable} output] + # We're not testing readelf -d | grep "FLAGS_1.*Flags:.*PIE" + # because the PIE flag is not set by all versions of gold, see PR + # binutils/26039. + set res [catch {exec $readelf_program -h $executable} output] if { $res != 0 } { return -1 } - set res [regexp -line {\(FLAGS_1\).*Flags:.* PIE($| )} $output] + set res [regexp -line {^[ \t]*Type:[ \t]*DYN \(Shared object file\)$} \ + $output] if { $res == 1 } { return 1 } @@ -5984,24 +6415,44 @@ # Starts fresh GDB binary and loads an optional executable into GDB. # Usage: clean_restart [executable] # EXECUTABLE is the basename of the binary. +# Return -1 if starting gdb or loading the executable failed. proc clean_restart { args } { global srcdir global subdir + global errcnt + global warncnt if { [llength $args] > 1 } { error "bad number of args: [llength $args]" } gdb_exit + + # This is a clean restart, so reset error and warning count. + set errcnt 0 + set warncnt 0 + + # We'd like to do: + # if { [gdb_start] == -1 } { + # return -1 + # } + # but gdb_start is a ${tool}_start proc, which doesn't have a defined + # return value. So instead, we test for errcnt. gdb_start + if { $errcnt > 0 } { + return -1 + } + gdb_reinitialize_dir $srcdir/$subdir if { [llength $args] >= 1 } { set executable [lindex $args 0] set binfile [standard_output_file ${executable}] - gdb_load ${binfile} + return [gdb_load ${binfile}] } + + return 0 } # Prepares for testing by calling build_executable_full, then @@ -6060,6 +6511,30 @@ return ${val} } +# Retrieve the value of local var EXP in the inferior. DEFAULT is used as +# fallback if print fails. TEST is the test message to use. It can be +# omitted, in which case a test message is built from EXP. + +proc get_local_valueof { exp default {test ""} } { + global gdb_prompt + + if {$test == "" } { + set test "get local valueof \"${exp}\"" + } + + set val ${default} + gdb_test_multiple "info locals ${exp}" "$test" { + -re "$exp = (\[^\r\n\]*)\[\r\n\]*$gdb_prompt $" { + set val $expect_out(1,string) + pass "$test" + } + timeout { + fail "$test (timeout)" + } + } + return ${val} +} + # Retrieve the value of EXP in the inferior, as a signed decimal value # (using "print /d"). DEFAULT is used as fallback if print fails. # TEST is the test message to use. It can be omitted, in which case @@ -6749,7 +7224,7 @@ # Open the file for logging gdb input proc gdb_stdin_log_init { } { - global in_file + gdb_persistent_global in_file if {[info exists in_file]} { # Close existing file. @@ -6824,9 +7299,16 @@ } # Does the compiler support CTF debug output using '-gt' compiler -# flag? If not then we should skip these tests. +# flag? If not then we should skip these tests. We should also +# skip them if libctf was explicitly disabled. gdb_caching_proc skip_ctf_tests { + global enable_libctf + + if {$enable_libctf eq "no"} { + return 1 + } + return ![gdb_can_simple_compile ctfdebug { int main () { return 0; @@ -6834,5 +7316,259 @@ } executable "additional_flags=-gt"] } +# Return 1 if compiler supports -gstatement-frontiers. Otherwise, +# return 0. + +gdb_caching_proc supports_statement_frontiers { + return [gdb_can_simple_compile supports_statement_frontiers { + int main () { + return 0; + } + } executable "additional_flags=-gstatement-frontiers"] +} + +# Return 1 if compiler supports -mmpx -fcheck-pointer-bounds. Otherwise, +# return 0. + +gdb_caching_proc supports_mpx_check_pointer_bounds { + set flags "additional_flags=-mmpx additional_flags=-fcheck-pointer-bounds" + return [gdb_can_simple_compile supports_mpx_check_pointer_bounds { + int main () { + return 0; + } + } executable $flags] +} + +# Return 1 if compiler supports -fcf-protection=. Otherwise, +# return 0. + +gdb_caching_proc supports_fcf_protection { + return [gdb_can_simple_compile supports_fcf_protection { + int main () { + return 0; + } + } executable "additional_flags=-fcf-protection=full"] +} + +# Return 1 if symbols were read in using -readnow. Otherwise, return 0. + +proc readnow { } { + set cmd "maint print objfiles" + gdb_test_multiple $cmd "" { + -re -wrap "\r\n.gdb_index: faked for \"readnow\"\r\n.*" { + return 1 + } + -re -wrap "" { + return 0 + } + } + + return 0 +} + +# Return 1 if partial symbols are available. Otherwise, return 0. + +proc psymtabs_p { } { + global gdb_prompt + + set cmd "maint info psymtab" + gdb_test_multiple $cmd "" { + -re "$cmd\r\n$gdb_prompt $" { + return 0 + } + -re -wrap "" { + return 1 + } + } + + return 0 +} + +# Verify that partial symtab expansion for $filename has state $readin. + +proc verify_psymtab_expanded { filename readin } { + global gdb_prompt + + set cmd "maint info psymtab" + set test "$cmd: $filename: $readin" + set re [multi_line \ + " \{ psymtab \[^\r\n\]*$filename\[^\r\n\]*" \ + " readin $readin" \ + ".*"] + + gdb_test_multiple $cmd $test { + -re "$cmd\r\n$gdb_prompt $" { + unsupported $gdb_test_name + } + -re -wrap $re { + pass $gdb_test_name + } + } +} + +# Add a .gdb_index section to PROGRAM. +# PROGRAM is assumed to be the output of standard_output_file. +# Returns the 0 if there is a failure, otherwise 1. + +proc add_gdb_index { program } { + global srcdir GDB env BUILD_DATA_DIRECTORY + set contrib_dir "$srcdir/../contrib" + set env(GDB) "$GDB --data-directory=$BUILD_DATA_DIRECTORY" + set result [catch "exec $contrib_dir/gdb-add-index.sh $program" output] + if { $result != 0 } { + verbose -log "result is $result" + verbose -log "output is $output" + return 0 + } + + return 1 +} + +# Add a .gdb_index section to PROGRAM, unless it alread has an index +# (.gdb_index/.debug_names). Gdb doesn't support building an index from a +# program already using one. Return 1 if a .gdb_index was added, return 0 +# if it already contained an index, and -1 if an error occurred. + +proc ensure_gdb_index { binfile } { + set testfile [file tail $binfile] + set test "check if index present" + gdb_test_multiple "mt print objfiles ${testfile}" $test { + -re -wrap "gdb_index.*" { + return 0 + } + -re -wrap "debug_names.*" { + return 0 + } + -re -wrap "Psymtabs.*" { + if { [add_gdb_index $binfile] != "1" } { + return -1 + } + return 1 + } + } + return -1 +} + +# Return 1 if executable contains .debug_types section. Otherwise, return 0. + +proc debug_types { } { + global hex + + set cmd "maint info sections" + gdb_test_multiple $cmd "" { + -re -wrap "at $hex: .debug_types.*" { + return 1 + } + -re -wrap "" { + return 0 + } + } + + return 0 +} + +# Return the addresses in the line table for FILE for which is_stmt is true. + +proc is_stmt_addresses { file } { + global decimal + global hex + + set is_stmt [list] + + gdb_test_multiple "maint info line-table $file" "" { + -re "\r\n$decimal\[ \t\]+$decimal\[ \t\]+($hex)\[ \t\]+Y\[^\r\n\]*" { + lappend is_stmt $expect_out(1,string) + exp_continue + } + -re -wrap "" { + } + } + + return $is_stmt +} + +# Return 1 if hex number VAL is an element of HEXLIST. + +proc hex_in_list { val hexlist } { + # Normalize val by removing 0x prefix, and leading zeros. + set val [regsub ^0x $val ""] + set val [regsub ^0+ $val "0"] + + set re 0x0*$val + set index [lsearch -regexp $hexlist $re] + return [expr $index != -1] +} + +# Override proc NAME to proc OVERRIDE for the duration of the execution of +# BODY. + +proc with_override { name override body } { + # Implementation note: It's possible to implement the override using + # rename, like this: + # rename $name save_$name + # rename $override $name + # set code [catch {uplevel 1 $body} result] + # rename $name $override + # rename save_$name $name + # but there are two issues here: + # - the save_$name might clash with an existing proc + # - the override is no longer available under its original name during + # the override + # So, we use this more elaborate but cleaner mechanism. + + # Save the old proc. + set old_args [info args $name] + set old_body [info body $name] + + # Install the override. + set new_args [info args $override] + set new_body [info body $override] + eval proc $name {$new_args} {$new_body} + + # Execute body. + set code [catch {uplevel 1 $body} result] + + # Restore old proc. + eval proc $name {$old_args} {$old_body} + + # Return as appropriate. + if { $code == 1 } { + global errorInfo errorCode + return -code error -errorinfo $errorInfo -errorcode $errorCode $result + } elseif { $code > 1 } { + return -code $code $result + } + + return $result +} + +# Setup tuiterm.exp environment. To be used in test-cases instead of +# "load_lib tuiterm.exp". Calls initialization function and schedules +# finalization function. +proc tuiterm_env { } { + load_lib tuiterm.exp + + # Do initialization. + tuiterm_env_init + + # Schedule finalization. + global gdb_finish_hooks + lappend gdb_finish_hooks tuiterm_env_finish +} + +# Dejagnu has a version of note, but usage is not allowed outside of dejagnu. +# Define a local version. +proc gdb_note { message } { + verbose -- "NOTE: $message" 0 +} + +# Return 1 if compiler supports -fuse-ld=gold, otherwise return 0. +gdb_caching_proc have_fuse_ld_gold { + set me "have_fuse_ld_gold" + set flags "additional_flags=-fuse-ld=gold" + set src { int main() { return 0; } } + return [gdb_simple_compile $me $src executable $flags] +} + # Always load compatibility stuff. load_lib future.exp diff -Nru gdb-9.1/gdb/testsuite/lib/gdb-guile.exp gdb-10.2/gdb/testsuite/lib/gdb-guile.exp --- gdb-9.1/gdb/testsuite/lib/gdb-guile.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/lib/gdb-guile.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -54,26 +54,6 @@ } } -# Usage: gdb_test_multiline NAME INPUT RESULT {INPUT RESULT} ... -# Run a test named NAME, consisting of multiple lines of input. -# After each input line INPUT, search for result line RESULT. -# Succeed if all results are seen; fail otherwise. -# FIXME: Move to gdb.exp and remove Python's gdb_py_test_multiple. - -proc gdb_test_multiline { name args } { - global gdb_prompt - foreach {input result} $args { - if {[gdb_test_multiple $input "$name - $input" { - -re "\[\r\n\]*($result)\[\r\n\]+($gdb_prompt | *>)$" { - pass "$name - $input" - } - }]} { - return 1 - } - } - return 0 -} - # Load Scheme file FILE_NAME. # TEST_NAME can be used to specify the name of the test, # otherwise a standard test name is provided. diff -Nru gdb-9.1/gdb/testsuite/lib/gdb-python.exp gdb-10.2/gdb/testsuite/lib/gdb-python.exp --- gdb-9.1/gdb/testsuite/lib/gdb-python.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/lib/gdb-python.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -27,25 +27,6 @@ } } -# Usage: gdb_py_test_multiple NAME INPUT RESULT {INPUT RESULT}... -# Run a test named NAME, consisting of multiple lines of input. -# After each input line INPUT, search for result line RESULT. -# Succeed if all results are seen; fail otherwise. - -proc gdb_py_test_multiple { name args } { - global gdb_prompt - foreach {input result} $args { - if {[gdb_test_multiple $input "$name - $input" { - -re "\[\r\n\]*($result)\[\r\n\]+($gdb_prompt | *>)$" { - pass "$name - $input" - } - }]} { - return 1 - } - } - return 0 -} - # Return the result of python expression EXPR. DEFAULT is returned if # there's an error. TEST is the test message to use. It can be # omitted, in which case a test message is built from EXP. This is diff -Nru gdb-9.1/gdb/testsuite/lib/gdbserver-support.exp gdb-10.2/gdb/testsuite/lib/gdbserver-support.exp --- gdb-9.1/gdb/testsuite/lib/gdbserver-support.exp 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/testsuite/lib/gdbserver-support.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2000-2020 Free Software Foundation, Inc. +# Copyright 2000-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -64,6 +64,10 @@ -re "Couldn't establish connection to remote.*$gdb_prompt $" { verbose "Connection failed" } + -re "Non-stop mode requested, but remote does not support non-stop.*$gdb_prompt $" { + verbose "remote does not support non-stop" + return 1 + } -re "Remote MIPS debugging.*$additional_text.*$gdb_prompt" { verbose "Set target to $targetname" return 0 @@ -134,13 +138,15 @@ return [target_info gdb_server_prog] } - set gdbserver "${GDB}server" - if { [file isdirectory $gdbserver] } { - append gdbserver "/gdbserver" - } - - if { [file executable $gdbserver] } { - return $gdbserver + set toplevel [file join [file dirname $GDB] .. gdbserver] + foreach gdbserver [list "${GDB}server" $toplevel] { + if { [file isdirectory $gdbserver] } { + append gdbserver "/gdbserver" + } + + if { [file executable $gdbserver] } { + return $gdbserver + } } return "" @@ -425,21 +431,11 @@ rename mi_gdb_exit gdbserver_orig_mi_gdb_exit } -proc gdbserver_gdb_exit { is_mi } { +# Cleanup gdbserver $server_spawn_id + +proc gdbserver_exit { is_mi } { global gdb_spawn_id server_spawn_id global gdb_prompt - global gdbserver_reconnect_p - - # Leave GDBserver running if we're exiting GDB in order to - # reconnect to the same instance of GDBserver again. - if {[info exists gdbserver_reconnect_p] && $gdbserver_reconnect_p} { - if { $is_mi } { - gdbserver_orig_mi_gdb_exit - } else { - gdbserver_orig_gdb_exit - } - return - } if {[info exists gdb_spawn_id] && [info exists server_spawn_id]} { # GDB may be terminated in an expected way or an unexpected way, @@ -463,10 +459,34 @@ wait -i $expect_out(spawn_id) unset server_spawn_id } + timeout { + warning "Timed out waiting for EOF in server after $monitor_exit" + } } } } close_gdbserver +} + +# Local version of gdb_exit that also cleans up gdbserver $server_spawn_id. + +proc gdbserver_gdb_exit { is_mi } { + global gdb_spawn_id server_spawn_id + global gdb_prompt + global gdbserver_reconnect_p + + # Leave GDBserver running if we're exiting GDB in order to + # reconnect to the same instance of GDBserver again. + if {[info exists gdbserver_reconnect_p] && $gdbserver_reconnect_p} { + if { $is_mi } { + gdbserver_orig_mi_gdb_exit + } else { + gdbserver_orig_gdb_exit + } + return + } + + gdbserver_exit $is_mi if { $is_mi } { gdbserver_orig_mi_gdb_exit diff -Nru gdb-9.1/gdb/testsuite/lib/gdb-utils.exp gdb-10.2/gdb/testsuite/lib/gdb-utils.exp --- gdb-9.1/gdb/testsuite/lib/gdb-utils.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/lib/gdb-utils.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/lib/gen-perf-test.exp gdb-10.2/gdb/testsuite/lib/gen-perf-test.exp --- gdb-9.1/gdb/testsuite/lib/gen-perf-test.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/lib/gen-perf-test.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2013-2020 Free Software Foundation, Inc. +# Copyright (C) 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/lib/gnat_debug_info_test.adb gdb-10.2/gdb/testsuite/lib/gnat_debug_info_test.adb --- gdb-9.1/gdb/testsuite/lib/gnat_debug_info_test.adb 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/lib/gnat_debug_info_test.adb 2020-09-13 02:33:41.000000000 +0000 @@ -0,0 +1,6 @@ +with Ada.Text_IO; + +procedure GNAT_Debug_Info_Test is +begin + Ada.Text_IO.Put_Line("Hello, world!"); +end GNAT_Debug_Info_Test; diff -Nru gdb-9.1/gdb/testsuite/lib/go.exp gdb-10.2/gdb/testsuite/lib/go.exp --- gdb-9.1/gdb/testsuite/lib/go.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/lib/go.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/lib/jit-elf-helpers.exp gdb-10.2/gdb/testsuite/lib/jit-elf-helpers.exp --- gdb-9.1/gdb/testsuite/lib/jit-elf-helpers.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/testsuite/lib/jit-elf-helpers.exp 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,111 @@ +# Copyright 2020-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Magic constants used to calculate a starting address when linking +# "jit" shared libraries. When loaded, will be mapped by jit-elf-main +# to the same address. + +set jit_load_address 0x7000000 +set jit_load_increment 0x1000000 + +# Compile jit-elf-main.c as an executable. +# +# BINSUFFIX is appended to the binary name. +# OPTIONS is passed to gdb_compile when compiling the program. +# +# On success, return 0. +# On failure, return -1. +proc compile_jit_main {main_srcfile main_binfile options} { + global jit_load_address jit_load_increment + + set options [concat \ + $options \ + additional_flags=-DLOAD_ADDRESS=$jit_load_address \ + additional_flags=-DLOAD_INCREMENT=$jit_load_increment \ + debug] + + if { [gdb_compile ${main_srcfile} ${main_binfile} \ + executable $options] != "" } { + set f [file tail $main_binfile] + untested "failed to compile $f" + return -1 + } + + return 0 +} + +# Compile jit-elf-main.c as a shared library. +# +# OPTIONS is passed to gdb_compile when compiling the program. +# +# On success, return 0. +# On failure, return -1. +proc compile_jit_elf_main_as_so {main_solib_srcfile main_solib_binfile options} { + 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] + + if { [gdb_compile_shlib ${main_solib_srcfile} ${main_solib_binfile} \ + $options] != "" } { + set f [file tail $main_solib_binfile] + untested "failed to compile shared library $f" + return -1 + } + + return 0 +} + +# Compile jit-elf-solib.c as a shared library in multiple copies and +# upload them to the target. +# +# On success, return a list of target path to the shared libraries. +# On failure, return -1. +proc compile_and_download_n_jit_so {jit_solib_basename jit_solib_srcfile count} { + global jit_load_address jit_load_increment + set binfiles_target {} + + for {set i 1} {$i <= $count} {incr i} { + set binfile [standard_output_file ${jit_solib_basename}.$i.so] + + # Note: compiling without debug info by default: some test + # do symbol renaming by munging on ELF symbol table, and that + # wouldn't work for .debug sections. Also, output for "info + # function" changes when debug info is present. + set addr [format 0x%x [expr $jit_load_address + $jit_load_increment * [expr $i-1]]] + # Using -Ttext-segment flag to ask linked to relocate everything + # in the compiled shared library against a fixed base address. Combined + # with mapping the resulting binary to the same fixed base it allows + # to dynamically execute functions from it without any further adjustments. + set options [list \ + additional_flags=-DFUNCTION_NAME=[format "jit_function_%04d" $i] \ + additional_flags=-Xlinker \ + additional_flags=-Ttext-segment=$addr] + if { [gdb_compile_shlib ${jit_solib_srcfile} ${binfile} \ + $options] != "" } { + set f [file tail $binfile] + untested "failed to compile shared library $f" + return -1 + } + + set path [gdb_remote_download target ${binfile}] + lappend binfiles_target $path + } + + return $binfiles_target +} diff -Nru gdb-9.1/gdb/testsuite/lib/memory.exp gdb-10.2/gdb/testsuite/lib/memory.exp --- gdb-9.1/gdb/testsuite/lib/memory.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/lib/memory.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/lib/mi-support.exp gdb-10.2/gdb/testsuite/lib/mi-support.exp --- gdb-9.1/gdb/testsuite/lib/mi-support.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/lib/mi-support.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1999-2020 Free Software Foundation, Inc. +# Copyright 1999-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -55,7 +55,6 @@ proc mi_uncatched_gdb_exit {} { global GDB global INTERNAL_GDBFLAGS GDBFLAGS - global verbose global gdb_spawn_id gdb_main_spawn_id global mi_spawn_id inferior_spawn_id global gdb_prompt @@ -185,7 +184,7 @@ # get really slow. Give gdb at least 3 minutes to start up. # proc default_mi_gdb_start { args } { - global verbose use_gdb_stub + global use_gdb_stub global GDB global INTERNAL_GDBFLAGS GDBFLAGS global gdb_prompt @@ -482,7 +481,6 @@ # return a -1 if anything goes wrong. # proc mi_gdb_file_cmd { arg } { - global verbose global loadpath global loadfile global GDB @@ -553,7 +551,6 @@ # return a -1 if anything goes wrong. # proc mi_gdb_target_load { } { - global verbose global loadpath global loadfile global GDB diff -Nru gdb-9.1/gdb/testsuite/lib/objc.exp gdb-10.2/gdb/testsuite/lib/objc.exp --- gdb-9.1/gdb/testsuite/lib/objc.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/lib/objc.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # This test code is part of GDB, the GNU debugger. -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/lib/opencl.exp gdb-10.2/gdb/testsuite/lib/opencl.exp --- gdb-9.1/gdb/testsuite/lib/opencl.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/lib/opencl.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2010-2020 Free Software Foundation, Inc. +# Copyright 2010-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/lib/opencl_hostapp.c gdb-10.2/gdb/testsuite/lib/opencl_hostapp.c --- gdb-9.1/gdb/testsuite/lib/opencl_hostapp.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/lib/opencl_hostapp.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 2010-2020 Free Software Foundation, Inc. + Copyright 2010-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/lib/pascal.exp gdb-10.2/gdb/testsuite/lib/pascal.exp --- gdb-9.1/gdb/testsuite/lib/pascal.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/lib/pascal.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2007-2020 Free Software Foundation, Inc. +# Copyright 2007-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -33,10 +33,10 @@ proc pascal_init {} { global pascal_init_done - global pascal_compiler_is_gpc - global pascal_compiler_is_fpc - global gpc_compiler - global fpc_compiler + gdb_persistent_global pascal_compiler_is_gpc + gdb_persistent_global pascal_compiler_is_fpc + gdb_persistent_global gpc_compiler + gdb_persistent_global fpc_compiler global env if { $pascal_init_done == 1 } { diff -Nru gdb-9.1/gdb/testsuite/lib/pdtrace gdb-10.2/gdb/testsuite/lib/pdtrace --- gdb-9.1/gdb/testsuite/lib/pdtrace 2020-02-08 12:54:04.000000000 +0000 +++ gdb-10.2/gdb/testsuite/lib/pdtrace 2021-04-25 04:10:29.000000000 +0000 @@ -2,7 +2,7 @@ # A Poor(but Free)'s Man dtrace # -# Copyright (C) 2014-2020 Free Software Foundation, Inc. +# Copyright (C) 2014-2021 Free Software Foundation, Inc. # # Contributed by Oracle, Inc. # diff -Nru gdb-9.1/gdb/testsuite/lib/pdtrace.in gdb-10.2/gdb/testsuite/lib/pdtrace.in --- gdb-9.1/gdb/testsuite/lib/pdtrace.in 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/lib/pdtrace.in 2021-04-25 04:06:26.000000000 +0000 @@ -2,7 +2,7 @@ # A Poor(but Free)'s Man dtrace # -# Copyright (C) 2014-2020 Free Software Foundation, Inc. +# Copyright (C) 2014-2021 Free Software Foundation, Inc. # # Contributed by Oracle, Inc. # diff -Nru gdb-9.1/gdb/testsuite/lib/perftest.exp gdb-10.2/gdb/testsuite/lib/perftest.exp --- gdb-9.1/gdb/testsuite/lib/perftest.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/lib/perftest.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2013-2020 Free Software Foundation, Inc. +# Copyright (C) 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/lib/prelink-support.exp gdb-10.2/gdb/testsuite/lib/prelink-support.exp --- gdb-9.1/gdb/testsuite/lib/prelink-support.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/lib/prelink-support.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2010-2020 Free Software Foundation, Inc. +# Copyright (C) 2010-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/lib/prompt.exp gdb-10.2/gdb/testsuite/lib/prompt.exp --- gdb-9.1/gdb/testsuite/lib/prompt.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/lib/prompt.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2011-2020 Free Software Foundation, Inc. +# Copyright (C) 2011-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -24,7 +24,6 @@ # uses pass if it sees $gdb_prompt, and fail if it sees $gdb_prompt_fail. # proc default_prompt_gdb_start { } { - global verbose global GDB global INTERNAL_GDBFLAGS GDBFLAGS global gdb_prompt diff -Nru gdb-9.1/gdb/testsuite/lib/range-stepping-support.exp gdb-10.2/gdb/testsuite/lib/range-stepping-support.exp --- gdb-9.1/gdb/testsuite/lib/range-stepping-support.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/lib/range-stepping-support.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/lib/read1.c gdb-10.2/gdb/testsuite/lib/read1.c --- gdb-9.1/gdb/testsuite/lib/read1.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/lib/read1.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This is part of GDB, the GNU debugger. - Copyright 2011-2020 Free Software Foundation, Inc. + Copyright 2011-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/testsuite/lib/rust-support.exp gdb-10.2/gdb/testsuite/lib/rust-support.exp --- gdb-9.1/gdb/testsuite/lib/rust-support.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/lib/rust-support.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2016-2020 Free Software Foundation, Inc. +# Copyright 2016-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -35,3 +35,22 @@ } return "" } + +# Return the version of LLVM used by the Rust compiler. Note that +# older versions of rustc don't print this -- in this case the +# returned version is "0.0". +gdb_caching_proc rust_llvm_version { + set rustc [find_rustc] + if {$rustc == ""} { + verbose "could not find rustc" + } else { + set output [lindex [remote_exec host "$rustc --version --verbose"] 1] + foreach line [split $output \n] { + if {[regexp "LLVM version: (.+)\$" $output ignore version]} { + return $version + } + } + verbose "could not match rustc version output: $output" + } + return 0.0 +} diff -Nru gdb-9.1/gdb/testsuite/lib/selftest-support.exp gdb-10.2/gdb/testsuite/lib/selftest-support.exp --- gdb-9.1/gdb/testsuite/lib/selftest-support.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/lib/selftest-support.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2003-2020 Free Software Foundation, Inc. +# Copyright 2003-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -76,9 +76,10 @@ return -1 } - # Set a breakpoint at main + # Set a breakpoint at main. Allow more than one location, as + # workaround for PR26096 - "gdb sets breakpoint at cold clone". gdb_test "break $function" \ - "Breakpoint.*at.* file.*, line.*" \ + "Breakpoint.*at.* (file.*, line|locations).*" \ "breakpoint in $function" # run yourself diff -Nru gdb-9.1/gdb/testsuite/lib/set_unbuffered_mode.c gdb-10.2/gdb/testsuite/lib/set_unbuffered_mode.c --- gdb-9.1/gdb/testsuite/lib/set_unbuffered_mode.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/lib/set_unbuffered_mode.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2008-2020 Free Software Foundation, Inc. +/* Copyright (C) 2008-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/testsuite/lib/sym-info-cmds.exp gdb-10.2/gdb/testsuite/lib/sym-info-cmds.exp --- gdb-9.1/gdb/testsuite/lib/sym-info-cmds.exp 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/testsuite/lib/sym-info-cmds.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -233,7 +233,7 @@ if { $testname == "" } { set testname \ - "$_last_command: check no matches for '$filename', $lineno', and '$text'" + "$_last_command: check no matches for '$filename', '$lineno', and '$text'" } if { $lineno == "" } { @@ -421,7 +421,10 @@ # If a matching entry is found then it is removed from the # _entries list, this allows us to check for duplicates using the # check_no_entry call. - proc check_entry { filename module lineno text { testname "" } } { + # + # If OPTIONAL, don't generate a FAIL for a mismatch, but use UNSUPPORTED + # instead. + proc check_entry_1 { filename module lineno text optional testname } { variable _entries variable _last_command @@ -458,7 +461,21 @@ } set _entries $new_entries - gdb_assert { $found_match } $testname + if { $optional && ! $found_match } { + unsupported $testname + } else { + gdb_assert { $found_match } $testname + } + } + + # Call check_entry_1 with OPTIONAL == 0. + proc check_entry { filename module lineno text { testname "" } } { + check_entry_1 $filename $module $lineno $text 0 $testname + } + + # Call check_entry_1 with OPTIONAL == 1. + proc check_optional_entry { filename module lineno text { testname "" } } { + check_entry_1 $filename $module $lineno $text 1 $testname } # Check that there is no entry in the _entries list matching @@ -482,7 +499,7 @@ if { $testname == "" } { set testname \ - "$_last_command: check no matches for '$filename', $lineno', and '$text'" + "$_last_command: check no matches for '$filename', '$lineno', and '$text'" } if { $lineno == "" } { diff -Nru gdb-9.1/gdb/testsuite/lib/trace-support.exp gdb-10.2/gdb/testsuite/lib/trace-support.exp --- gdb-9.1/gdb/testsuite/lib/trace-support.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/lib/trace-support.exp 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 1998-2020 Free Software Foundation, Inc. +# Copyright (C) 1998-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -374,7 +374,7 @@ if [target_info exists in_proc_agent] { return [target_info in_proc_agent] } else { - return $objdir/../gdbserver/libinproctrace.so + return $objdir/../../gdbserver/libinproctrace.so } } diff -Nru gdb-9.1/gdb/testsuite/lib/tuiterm.exp gdb-10.2/gdb/testsuite/lib/tuiterm.exp --- gdb-9.1/gdb/testsuite/lib/tuiterm.exp 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/testsuite/lib/tuiterm.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -19,15 +19,32 @@ # array; but dejagnu doesn't export this globally. So, we have to # wrap spawn with our own function, so that we can capture this value. # The value is later used in calls to stty. -rename spawn builtin_spawn -proc spawn {args} { +proc tuiterm_spawn { args } { set result [uplevel builtin_spawn $args] global gdb_spawn_name upvar spawn_out spawn_out - set gdb_spawn_name $spawn_out(slave,name) + if { [info exists spawn_out] } { + set gdb_spawn_name $spawn_out(slave,name) + } else { + unset gdb_spawn_name + } return $result } +# Initialize tuiterm.exp environment. +proc tuiterm_env_init { } { + # Override spawn with tui_spawn. + rename spawn builtin_spawn + rename tuiterm_spawn spawn +} + +# Finalize tuiterm.exp environment. +proc tuiterm_env_finish { } { + # Restore spawn. + rename spawn tuiterm_spawn + rename builtin_spawn spawn +} + namespace eval Term { variable _rows variable _cols @@ -388,8 +405,10 @@ _clear_lines 0 $_rows } - # Accept some output from gdb and update the screen. - proc _accept {wait_for} { + # 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} { global expect_out global gdb_prompt variable _cur_x @@ -424,7 +443,7 @@ timeout { # Assume a timeout means we somehow missed the # expected result, and carry on. - return + return 0 } } @@ -443,6 +462,8 @@ set wait_for $prompt_wait_for } } + + return 1 } # Like ::clean_restart, but ensures that gdb starts in an @@ -462,16 +483,26 @@ } } - # Start the TUI. Returns 1 on success, 0 if TUI tests should be - # skipped. - proc enter_tui {} { + # Setup ready for starting the tui, but don't actually start it. + # Returns 1 on success, 0 if TUI tests should be skipped. + proc prepare_for_tui {} { if {[skip_tui_tests]} { return 0 } gdb_test_no_output "set tui border-kind ascii" gdb_test_no_output "maint set tui-resize-message on" - command "tui enable" + return 1 + } + + # Start the TUI. Returns 1 on success, 0 if TUI tests should be + # skipped. + proc enter_tui {} { + if {![prepare_for_tui]} { + return 0 + } + + command_no_prompt_prefix "tui enable" return 1 } @@ -479,8 +510,19 @@ # seen in the TUI. CMD should not end with a newline -- that will # be supplied by this function. proc command {cmd} { + global gdb_prompt + send_gdb "$cmd\n" + set str [string_to_regexp $cmd] + set str "^$gdb_prompt $str" + wait_for $str + } + + # As proc command, but don't wait for a initial prompt. This is used for + # inital terminal commands, where there's no prompt yet. + proc command_no_prompt_prefix {cmd} { send_gdb "$cmd\n" - _accept [string_to_regexp $cmd] + set str [string_to_regexp $cmd] + wait_for "^$str" } # Return the text of screen line N, without attributes. Lines are @@ -555,13 +597,20 @@ return "lr corner" } - for {set i [expr {$x + 1}]} {$i < $x2 - 1} {incr i} { - # Note we do not check the top border of the box, because - # it will contain a title. - if {[get_char $i $y2] != "-"} { - return "bottom border $i" - } + # Note we do not check the full horizonal borders of the box. + # The top will contain a title, and the bottom may as well, if + # it is overlapped by some other border. However, at most a + # title should appear as '+-VERY LONG TITLE-+', so we can + # check for the '+-' on the left, and '-+' on the right. + if {[get_char [expr {$x + 1}] $y] != "-"} { + return "ul title padding" } + + if {[get_char [expr {$x2 - 1}] $y] != "-"} { + return "ul title padding" + } + + # Now check the vertical borders. for {set i [expr {$y + 1}]} {$i < $y2 - 1} {incr i} { if {[get_char $x $i] != "|"} { return "left side $i" @@ -594,15 +643,46 @@ } } + # Check the contents of a box on the screen. This is a little + # like check_contents, but doens't check the whole screen + # contents, only the contents of a single box. This procedure + # includes (effectively) a call to check_box to ensure there is a + # box where expected, if there is then the contents of the box are + # matched against REGEXP. + proc check_box_contents {test_name x y width height regexp} { + variable _chars + + set why [_check_box $x $y $width $height] + if {$why != ""} { + dump_screen + fail "$test_name (box check: $why)" + return + } + + # Now grab the contents of the box, join each line together + # with a newline character and match against REGEXP. + set result "" + for {set yy [expr {$y + 1}]} {$yy < [expr {$y + $height - 1}]} {incr yy} { + for {set xx [expr {$x + 1}]} {$xx < [expr {$x + $width - 1}]} {incr xx} { + append result [lindex $_chars($xx,$yy) 0] + } + append result "\n" + } + + if {![gdb_assert {[regexp -- $regexp $result]} $test_name]} { + dump_screen + } + } + # A debugging function to dump the current screen, with line # numbers. proc dump_screen {} { variable _rows variable _cols - verbose "Screen Dump ($_cols x $_rows):" + verbose -log "Screen Dump ($_cols x $_rows):" for {set y 0} {$y < $_rows} {incr y} { set fmt [format %5d $y] - verbose "$fmt [get_line $y]" + verbose -log "$fmt [get_line $y]" } } @@ -645,14 +725,14 @@ # Due to the strange column resizing behavior, and because we # don't care about this intermediate resize, we don't check # the size here. - _accept "@@ resize done $_resize_count" + wait_for "@@ resize done $_resize_count" incr _resize_count # Somehow the number of columns transmitted to gdb is one less # than what we request from expect. We hide this weird # details from the caller. _do_resize $_rows $cols stty columns [expr {$_cols + 1}] < $gdb_spawn_name - _accept "@@ resize done $_resize_count, size = ${_cols}x${rows}" + wait_for "@@ resize done $_resize_count, size = ${_cols}x${rows}" incr _resize_count } } diff -Nru gdb-9.1/gdb/testsuite/lib/unbuffer_output.c gdb-10.2/gdb/testsuite/lib/unbuffer_output.c --- gdb-9.1/gdb/testsuite/lib/unbuffer_output.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/lib/unbuffer_output.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2008-2020 Free Software Foundation, Inc. +/* Copyright (C) 2008-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -22,7 +22,7 @@ #include <unistd.h> #endif -static int +static void gdb_unbuffer_output (void) { /* Always force this for Windows testing. To a native Windows diff -Nru gdb-9.1/gdb/testsuite/lib/valgrind.exp gdb-10.2/gdb/testsuite/lib/valgrind.exp --- gdb-9.1/gdb/testsuite/lib/valgrind.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/lib/valgrind.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2009-2020 Free Software Foundation, Inc. +# Copyright 2009-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -19,12 +19,19 @@ # Start a vgdb server, and connect gdb to it. Return 0 on success, and -1 on # error. # -proc vgdb_start { } { +proc vgdb_start { {active_at_startup 1} } { global binfile use_gdb_stub board testfile global valgrind_spawn_id gdb_spawn_id + global decimal set test "spawn valgrind" - set cmd "valgrind --vgdb-error=0 $binfile" + set cmd_list [list] + lappend cmd_list "valgrind" + if { $active_at_startup } { + lappend cmd_list "--vgdb-error=0" + } + lappend cmd_list $binfile + set cmd [join $cmd_list] set res [remote_spawn host $cmd] if { $res < 0 || $res == "" } { verbose -log "Spawning $cmd failed." @@ -42,7 +49,8 @@ set test "valgrind started" # The trailing '.' differs for different memcheck versions. gdb_test_multiple "" $test { - -re "Memcheck, a memory error detector\\.?\r\n" { + -re "==($decimal)== Memcheck, a memory error detector\\.?\r\n" { + set vgdbpid $expect_out(1,string) pass $test } -re "valgrind: failed to start tool 'memcheck' for platform '.*': No such file or directory" { @@ -66,14 +74,6 @@ } } - set test "vgdb prompt" - gdb_test_multiple "" $test { - -re " (target remote | \[^\r\n\]*/vgdb \[^\r\n\]*)\r\n" { - set vgdbcmd $expect_out(1,string) - pass $test - } - } - # Do not kill valgrind. set valgrind_spawn_id [board_info host fileid] unset gdb_spawn_id @@ -87,10 +87,22 @@ # gdbserver and connect to it. gdb_test "disconnect" ".*" - gdb_test "$vgdbcmd" " in \\.?_start .*" "target remote for vgdb" + set vgdbcmd "target remote | vgdb --pid=$vgdbpid" + if { $active_at_startup } { + gdb_test "$vgdbcmd" " in \\.?_start .*" "target remote for vgdb" + } else { + # Let $binfile run a bit before attaching. This is a bit of a hack, + # in that it lets test-case valgrind-infcall-2.exp run to the point of + # nanosleep, which seems to be required to trigger the error condition. + # So, without this, we hit + # "UNSUPPORTED: gdb.base/valgrind-infcall-2.exp: do printf". + exec sleep 1 - gdb_test "monitor v.set gdb_output" "valgrind output will go to gdb.*" + # Connect to vgdb. Don't expect to be anywhere in particular. + gdb_test "$vgdbcmd" "" "target remote for vgdb" + } + gdb_test "monitor v.set gdb_output" "valgrind output will go to gdb.*" return 0 } diff -Nru gdb-9.1/gdb/testsuite/Makefile.in gdb-10.2/gdb/testsuite/Makefile.in --- gdb-9.1/gdb/testsuite/Makefile.in 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/Makefile.in 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ # Makefile for regression testing the GNU debugger. -# Copyright 1992-2020 Free Software Foundation, Inc. +# Copyright 1992-2021 Free Software Foundation, Inc. # This file is part of GDB. @@ -28,6 +28,7 @@ build_canonical = @build@ host_canonical = @host@ target_canonical = @target@ +enable_libctf = @enable_libctf@ SHELL = @SHELL@ EXEEXT = @EXEEXT@ @@ -131,6 +132,7 @@ @echo "set build_triplet ${build_canonical}" >> ./tmp0 @echo "set srcdir ${abs_srcdir}" >> ./tmp0 @echo "set tool gdb" >> ./tmp0 + @echo "set enable_libctf ${enable_libctf}" >> ./tmp0 @echo 'source $${srcdir}/lib/append_gdb_boards_dir.exp' >> ./tmp0 @echo "## All variables above are generated by configure. Do Not Edit ##" >> ./tmp0 @cat ./tmp0 > site.exp @@ -209,7 +211,7 @@ -rm -rf cache racy_outputs temp mkdir -p racy_outputs; \ racyiter="$(RACY_ITER)"; \ - test "x$$racyiter" == "x" && \ + test "x$$racyiter" = "x" && \ racyiter=$(DEFAULT_RACY_ITER); \ if test $$racyiter -lt 2 ; then \ echo "RACY_ITER must be at least 2."; \ @@ -239,7 +241,7 @@ check-parallel-racy: -rm -rf cache racy_outputs temp racyiter="$(RACY_ITER)"; \ - test "x$$racyiter" == "x" && \ + test "x$$racyiter" = "x" && \ racyiter=$(DEFAULT_RACY_ITER); \ if test $$racyiter -lt 2 ; then \ echo "RACY_ITER must be at least 2."; \ diff -Nru gdb-9.1/gdb/testsuite/print-ts.py gdb-10.2/gdb/testsuite/print-ts.py --- gdb-9.1/gdb/testsuite/print-ts.py 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/testsuite/print-ts.py 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ #!/usr/bin/env python -# Copyright (C) 2018-2020 Free Software Foundation, Inc. +# Copyright (C) 2018-2021 Free Software Foundation, Inc. # # This file is part of GDB. # diff -Nru gdb-9.1/gdb/testsuite/README gdb-10.2/gdb/testsuite/README --- gdb-9.1/gdb/testsuite/README 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/testsuite/README 2021-04-25 04:06:26.000000000 +0000 @@ -197,7 +197,7 @@ GDB_PARALLEL -To use parallel testing mode without using the the Makefile, set +To use parallel testing mode without using the Makefile, set GDB_PARALLEL on the runtest command line to "yes". Before starting the tests, you must ensure that the directories cache, outputs, and temp in the test suite build directory are either empty or have been @@ -352,6 +352,13 @@ make -j10 check-read1 TESTS="*/paginate-*.exp" make -j10 check READ1="1" +Note: While the intention is to detect races and make otherwise passing tests +fail, it can also have the effect of making otherwise failing tests pass. +This happens f.i. if the test is trying to match a gdb prompt using an end of +input marker "${gdb_prompt} $" and there is output after the gdb prompt. This +may either pass or fail in normal operation, but using check-read1 will ensure +that it passes. + Testsuite Configuration *********************** diff -Nru gdb-9.1/gdb/test-target.c gdb-10.2/gdb/test-target.c --- gdb-9.1/gdb/test-target.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/test-target.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* A mock process_stratum target_ops - Copyright (C) 2017-2020 Free Software Foundation, Inc. + Copyright (C) 2017-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/test-target.h gdb-10.2/gdb/test-target.h --- gdb-9.1/gdb/test-target.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/test-target.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* A mock process_stratum target_ops - Copyright (C) 2017-2020 Free Software Foundation, Inc. + Copyright (C) 2017-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/thread.c gdb-10.2/gdb/thread.c --- gdb-9.1/gdb/thread.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/thread.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Multi-process/thread control for GDB, the GNU debugger. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. Contributed by Lynx Real-Time Systems, Inc. Los Gatos, CA. @@ -55,14 +55,8 @@ static int highest_thread_num; -/* True if any thread is, or may be executing. We need to track this - separately because until we fully sync the thread list, we won't - know whether the target is fully stopped, even if we see stop - events for all known threads, because any of those threads may have - spawned new threads we haven't heard of yet. */ -static int threads_executing; - -static int thread_alive (struct thread_info *); +/* The current/selected thread. */ +static thread_info *current_thread_; /* RAII type used to increase / decrease the refcount of each thread in a given list of threads. */ @@ -87,13 +81,19 @@ const std::vector<thread_info *> &m_thrds; }; +/* Returns true if THR is the current thread. */ + +static bool +is_current_thread (const thread_info *thr) +{ + return thr == current_thread_; +} struct thread_info* inferior_thread (void) { - struct thread_info *tp = find_thread_ptid (inferior_ptid); - gdb_assert (tp); - return tp; + gdb_assert (current_thread_ != nullptr); + return current_thread_; } /* Delete the breakpoint pointed at by BP_P, if there's one. */ @@ -197,13 +197,13 @@ thread_cancel_execution_command (tp); - clear_inline_frame_state (tp->ptid); + clear_inline_frame_state (tp); } /* Set the TP's state as exited. */ static void -set_thread_exited (thread_info *tp, int silent) +set_thread_exited (thread_info *tp, bool silent) { /* Dead threads don't need to step-over. Remove from queue. */ if (tp->step_over_next != NULL) @@ -254,7 +254,12 @@ struct thread_info *last; for (last = inf->thread_list; last->next != NULL; last = last->next) - ; + gdb_assert (ptid != last->ptid + || last->state == THREAD_EXITED); + + gdb_assert (ptid != last->ptid + || last->state == THREAD_EXITED); + last->next = tp; } @@ -262,50 +267,17 @@ } struct thread_info * -add_thread_silent (ptid_t ptid) +add_thread_silent (process_stratum_target *targ, ptid_t ptid) { - struct inferior *inf = find_inferior_ptid (ptid); - gdb_assert (inf != NULL); + inferior *inf = find_inferior_ptid (targ, ptid); + /* We may have an old thread with the same id in the thread list. + If we do, it must be dead, otherwise we wouldn't be adding a new + thread with the same id. The OS is reusing this id --- delete + the old thread, and create a new one. */ thread_info *tp = find_thread_ptid (inf, ptid); - if (tp) - /* Found an old thread with the same id. It has to be dead, - otherwise we wouldn't be adding a new thread with the same id. - The OS is reusing this id --- delete it, and recreate a new - one. */ - { - /* In addition to deleting the thread, if this is the current - thread, then we need to take care that delete_thread doesn't - really delete the thread if it is inferior_ptid. Create a - new template thread in the list with an invalid ptid, switch - to it, delete the original thread, reset the new thread's - ptid, and switch to it. */ - - if (inferior_ptid == ptid) - { - thread_info *new_thr = new_thread (inf, null_ptid); - - /* Make switch_to_thread not read from the thread. */ - new_thr->state = THREAD_EXITED; - switch_to_no_thread (); - - /* Now we can delete it. */ - delete_thread (tp); - - /* Now reset its ptid, and reswitch inferior_ptid to it. */ - new_thr->ptid = ptid; - new_thr->state = THREAD_STOPPED; - switch_to_thread (new_thr); - - gdb::observers::new_thread.notify (new_thr); - - /* All done. */ - return new_thr; - } - else - /* Just go ahead and delete it. */ - delete_thread (tp); - } + if (tp != nullptr) + delete_thread (tp); tp = new_thread (inf, ptid); gdb::observers::new_thread.notify (tp); @@ -314,9 +286,10 @@ } struct thread_info * -add_thread_with_info (ptid_t ptid, private_thread_info *priv) +add_thread_with_info (process_stratum_target *targ, ptid_t ptid, + private_thread_info *priv) { - struct thread_info *result = add_thread_silent (ptid); + thread_info *result = add_thread_silent (targ, ptid); result->priv.reset (priv); @@ -328,9 +301,9 @@ } struct thread_info * -add_thread (ptid_t ptid) +add_thread (process_stratum_target *targ, ptid_t ptid) { - return add_thread_with_info (ptid, NULL); + return add_thread_with_info (targ, ptid, NULL); } private_thread_info::~private_thread_info () = default; @@ -361,7 +334,7 @@ { /* If this is the current thread, or there's code out there that relies on it existing (refcount > 0) we can't delete yet. */ - return refcount () == 0 && ptid != inferior_ptid; + return refcount () == 0 && !is_current_thread (this); } /* Add TP to the end of the step-over chain LIST_P. */ @@ -479,10 +452,7 @@ delete tp; } -/* Delete thread THREAD and notify of thread exit. If this is the - current thread, don't actually delete it, but tag it as exited and - do the notification. If this is the user selected thread, clear - it. */ +/* See gdbthread.h. */ void delete_thread (thread_info *thread) @@ -516,12 +486,12 @@ return NULL; } -/* Find a thread_info by matching PTID. */ +/* See gdbthread.h. */ struct thread_info * -find_thread_ptid (ptid_t ptid) +find_thread_ptid (process_stratum_target *targ, ptid_t ptid) { - inferior *inf = find_inferior_ptid (ptid); + inferior *inf = find_inferior_ptid (targ, ptid); if (inf == NULL) return NULL; return find_thread_ptid (inf, ptid); @@ -532,7 +502,7 @@ struct thread_info * find_thread_ptid (inferior *inf, ptid_t ptid) { - for (thread_info *tp : inf->threads ()) + for (thread_info *tp : inf->non_exited_threads ()) if (tp->ptid == ptid) return tp; @@ -586,9 +556,9 @@ } int -thread_count (void) +thread_count (process_stratum_target *proc_target) { - auto rng = all_threads (); + auto rng = all_threads (proc_target); return std::distance (rng.begin (), rng.end ()); } @@ -611,10 +581,10 @@ return 0; } -int -in_thread_list (ptid_t ptid) +bool +in_thread_list (process_stratum_target *targ, ptid_t ptid) { - return find_thread_ptid (ptid) != nullptr; + return find_thread_ptid (targ, ptid) != nullptr; } /* Finds the first thread of the inferior. */ @@ -679,14 +649,38 @@ } /* Return true if TP is an active thread. */ -static int -thread_alive (struct thread_info *tp) +static bool +thread_alive (thread_info *tp) { if (tp->state == THREAD_EXITED) - return 0; - if (!target_thread_alive (tp->ptid)) - return 0; - return 1; + return false; + + /* Ensure we're looking at the right target stack. */ + gdb_assert (tp->inf == current_inferior ()); + + return target_thread_alive (tp->ptid); +} + +/* Switch to thread TP if it is alive. Returns true if successfully + switched, false otherwise. */ + +static bool +switch_to_thread_if_alive (thread_info *thr) +{ + scoped_restore_current_thread restore_thread; + + /* Switch inferior first, so that we're looking at the right target + stack. */ + switch_to_inferior_no_thread (thr->inf); + + if (thread_alive (thr)) + { + switch_to_thread (thr); + restore_thread.dont_restore (); + return true; + } + + return false; } /* See gdbthreads.h. */ @@ -694,9 +688,15 @@ void prune_threads (void) { + scoped_restore_current_thread restore_thread; + for (thread_info *tp : all_threads_safe ()) - if (!thread_alive (tp)) - delete_thread (tp); + { + switch_to_inferior_no_thread (tp->inf); + + if (!thread_alive (tp)) + delete_thread (tp); + } } /* See gdbthreads.h. */ @@ -760,7 +760,8 @@ } void -thread_change_ptid (ptid_t old_ptid, ptid_t new_ptid) +thread_change_ptid (process_stratum_target *targ, + ptid_t old_ptid, ptid_t new_ptid) { struct inferior *inf; struct thread_info *tp; @@ -768,34 +769,34 @@ /* It can happen that what we knew as the target inferior id changes. E.g, target remote may only discover the remote process pid after adding the inferior to GDB's list. */ - inf = find_inferior_ptid (old_ptid); + inf = find_inferior_ptid (targ, old_ptid); inf->pid = new_ptid.pid (); tp = find_thread_ptid (inf, old_ptid); tp->ptid = new_ptid; - gdb::observers::thread_ptid_changed.notify (old_ptid, new_ptid); + gdb::observers::thread_ptid_changed.notify (targ, old_ptid, new_ptid); } /* See gdbthread.h. */ void -set_resumed (ptid_t ptid, int resumed) +set_resumed (process_stratum_target *targ, ptid_t ptid, bool resumed) { - for (thread_info *tp : all_non_exited_threads (ptid)) + for (thread_info *tp : all_non_exited_threads (targ, ptid)) tp->resumed = resumed; } /* Helper for set_running, that marks one thread either running or stopped. */ -static int -set_running_thread (struct thread_info *tp, int running) +static bool +set_running_thread (struct thread_info *tp, bool running) { - int started = 0; + bool started = false; if (running && tp->state == THREAD_STOPPED) - started = 1; + started = true; tp->state = running ? THREAD_RUNNING : THREAD_STOPPED; if (!running) @@ -820,7 +821,7 @@ } void -set_running (ptid_t ptid, int running) +set_running (process_stratum_target *targ, ptid_t ptid, bool running) { /* We try not to notify the observer if no thread has actually changed the running state -- merely to reduce the number of @@ -828,7 +829,7 @@ multiple *running notifications just fine. */ bool any_started = false; - for (thread_info *tp : all_non_exited_threads (ptid)) + for (thread_info *tp : all_non_exited_threads (targ, ptid)) if (set_running_thread (tp, running)) any_started = true; @@ -850,32 +851,32 @@ } void -set_executing (ptid_t ptid, int executing) +set_executing (process_stratum_target *targ, ptid_t ptid, bool executing) { - for (thread_info *tp : all_non_exited_threads (ptid)) + for (thread_info *tp : all_non_exited_threads (targ, ptid)) set_executing_thread (tp, executing); /* It only takes one running thread to spawn more threads. */ if (executing) - threads_executing = 1; + targ->threads_executing = true; /* Only clear the flag if the caller is telling us everything is stopped. */ else if (minus_one_ptid == ptid) - threads_executing = 0; + targ->threads_executing = false; } /* See gdbthread.h. */ -int -threads_are_executing (void) +bool +threads_are_executing (process_stratum_target *target) { - return threads_executing; + return target->threads_executing; } void -set_stop_requested (ptid_t ptid, int stop) +set_stop_requested (process_stratum_target *targ, ptid_t ptid, bool stop) { - for (thread_info *tp : all_non_exited_threads (ptid)) + for (thread_info *tp : all_non_exited_threads (targ, ptid)) tp->stop_requested = stop; /* Call the stop requested observer so other components of GDB can @@ -885,11 +886,11 @@ } void -finish_thread_state (ptid_t ptid) +finish_thread_state (process_stratum_target *targ, ptid_t ptid) { bool any_started = false; - for (thread_info *tp : all_non_exited_threads (ptid)) + for (thread_info *tp : all_non_exited_threads (targ, ptid)) if (set_running_thread (tp, tp->executing)) any_started = true; @@ -1037,6 +1038,9 @@ gdb::optional<ui_out_emit_list> list_emitter; gdb::optional<ui_out_emit_table> table_emitter; + /* We'll be switching threads temporarily below. */ + scoped_restore_current_thread restore_thread; + if (uiout->is_mi_like_p ()) list_emitter.emplace (uiout, "threads"); else @@ -1054,6 +1058,10 @@ if (!uiout->is_mi_like_p ()) { + /* Switch inferiors so we're looking at the right + target stack. */ + switch_to_inferior_no_thread (tp->inf); + target_id_col_width = std::max (target_id_col_width, thread_target_id_str (tp).size ()); @@ -1085,90 +1093,89 @@ uiout->table_body (); } - /* We'll be switching threads temporarily. */ - scoped_restore_current_thread restore_thread; - for (inferior *inf : all_inferiors ()) for (thread_info *tp : inf->threads ()) - { - int core; + { + int core; - any_thread = true; - if (tp == current_thread && tp->state == THREAD_EXITED) - current_exited = true; + any_thread = true; + if (tp == current_thread && tp->state == THREAD_EXITED) + current_exited = true; - if (!should_print_thread (requested_threads, default_inf_num, - global_ids, pid, tp)) - continue; + if (!should_print_thread (requested_threads, default_inf_num, + global_ids, pid, tp)) + continue; - ui_out_emit_tuple tuple_emitter (uiout, NULL); + ui_out_emit_tuple tuple_emitter (uiout, NULL); - if (!uiout->is_mi_like_p ()) - { - if (tp == current_thread) - uiout->field_string ("current", "*"); - else - uiout->field_skip ("current"); + if (!uiout->is_mi_like_p ()) + { + if (tp == current_thread) + uiout->field_string ("current", "*"); + else + uiout->field_skip ("current"); - uiout->field_string ("id-in-tg", print_thread_id (tp)); - } + uiout->field_string ("id-in-tg", print_thread_id (tp)); + } - if (show_global_ids || uiout->is_mi_like_p ()) - uiout->field_signed ("id", tp->global_num); + if (show_global_ids || uiout->is_mi_like_p ()) + uiout->field_signed ("id", tp->global_num); - /* For the CLI, we stuff everything into the target-id field. - This is a gross hack to make the output come out looking - correct. The underlying problem here is that ui-out has no - way to specify that a field's space allocation should be - shared by several fields. For MI, we do the right thing - instead. */ + /* Switch to the thread (and inferior / target). */ + switch_to_thread (tp); - if (uiout->is_mi_like_p ()) - { - uiout->field_string ("target-id", target_pid_to_str (tp->ptid)); + /* For the CLI, we stuff everything into the target-id field. + This is a gross hack to make the output come out looking + correct. The underlying problem here is that ui-out has no + way to specify that a field's space allocation should be + shared by several fields. For MI, we do the right thing + instead. */ - const char *extra_info = target_extra_thread_info (tp); - if (extra_info != nullptr) - uiout->field_string ("details", extra_info); - - const char *name = (tp->name != nullptr - ? tp->name - : target_thread_name (tp)); - if (name != NULL) - uiout->field_string ("name", name); - } - else - { - uiout->field_string ("target-id", - thread_target_id_str (tp).c_str ()); - } + if (uiout->is_mi_like_p ()) + { + uiout->field_string ("target-id", target_pid_to_str (tp->ptid)); - if (tp->state == THREAD_RUNNING) - uiout->text ("(running)\n"); - else - { - /* The switch below puts us at the top of the stack (leaf - frame). */ - switch_to_thread (tp); - print_stack_frame (get_selected_frame (NULL), - /* For MI output, print frame level. */ - uiout->is_mi_like_p (), - LOCATION, 0); - } + const char *extra_info = target_extra_thread_info (tp); + if (extra_info != nullptr) + uiout->field_string ("details", extra_info); + + const char *name = (tp->name != nullptr + ? tp->name + : target_thread_name (tp)); + if (name != NULL) + uiout->field_string ("name", name); + } + else + { + uiout->field_string ("target-id", + thread_target_id_str (tp).c_str ()); + } - if (uiout->is_mi_like_p ()) - { - const char *state = "stopped"; + if (tp->state == THREAD_RUNNING) + uiout->text ("(running)\n"); + else + { + /* The switch above put us at the top of the stack (leaf + frame). */ + print_stack_frame (get_selected_frame (NULL), + /* For MI output, print frame level. */ + uiout->is_mi_like_p (), + LOCATION, 0); + } - if (tp->state == THREAD_RUNNING) - state = "running"; - uiout->field_string ("state", state); - } + if (uiout->is_mi_like_p ()) + { + const char *state = "stopped"; - core = target_core_of_thread (tp->ptid); - if (uiout->is_mi_like_p () && core != -1) - uiout->field_signed ("core", core); - } + if (tp->state == THREAD_RUNNING) + state = "running"; + uiout->field_string ("state", state); + } + + core = target_core_of_thread (tp->ptid); + if (uiout->is_mi_like_p () && core != -1) + uiout->field_signed ("core", core); + } /* This end scope restores the current thread and the frame selected before the "info threads" command, and it finishes the @@ -1277,7 +1284,8 @@ set_current_program_space (inf->pspace); set_current_inferior (inf); - inferior_ptid = thread->ptid; + current_thread_ = thread; + inferior_ptid = current_thread_->ptid; } /* See gdbthread.h. */ @@ -1285,9 +1293,10 @@ void switch_to_no_thread () { - if (inferior_ptid == null_ptid) + if (current_thread_ == nullptr) return; + current_thread_ = nullptr; inferior_ptid = null_ptid; reinit_frame_cache (); } @@ -1299,7 +1308,7 @@ { gdb_assert (thr != NULL); - if (inferior_ptid == thr->ptid) + if (is_current_thread (thr)) return; switch_to_thread_no_regs (thr); @@ -1310,9 +1319,9 @@ /* See gdbsupport/common-gdbthread.h. */ void -switch_to_thread (ptid_t ptid) +switch_to_thread (process_stratum_target *proc_target, ptid_t ptid) { - thread_info *thr = find_thread_ptid (ptid); + thread_info *thr = find_thread_ptid (proc_target, ptid); switch_to_thread (thr); } @@ -1375,7 +1384,8 @@ } } -scoped_restore_current_thread::~scoped_restore_current_thread () +void +scoped_restore_current_thread::restore () { /* If an entry of thread_info was previously selected, it won't be deleted because we've increased its refcount. The thread represented @@ -1386,12 +1396,9 @@ in the mean time exited (or killed, detached, etc.), then don't revert back to it, but instead simply drop back to no thread selected. */ && m_inf->pid != 0) - switch_to_thread (m_thread); + switch_to_thread (m_thread.get ()); else - { - switch_to_no_thread (); - set_current_inferior (m_inf); - } + switch_to_inferior_no_thread (m_inf.get ()); /* The running state of the originally selected thread may have changed, so we have to recheck it here. */ @@ -1402,23 +1409,35 @@ && target_has_stack && target_has_memory) restore_selected_frame (m_selected_frame_id, m_selected_frame_level); +} - if (m_thread != NULL) - m_thread->decref (); - m_inf->decref (); +scoped_restore_current_thread::~scoped_restore_current_thread () +{ + if (!m_dont_restore) + { + try + { + restore (); + } + catch (const gdb_exception &ex) + { + /* We're in a dtor, there's really nothing else we can do + but swallow the exception. */ + } + } } scoped_restore_current_thread::scoped_restore_current_thread () { - m_thread = NULL; - m_inf = current_inferior (); + m_inf = inferior_ref::new_reference (current_inferior ()); if (inferior_ptid != null_ptid) { - thread_info *tp = inferior_thread (); + m_thread = thread_info_ref::new_reference (inferior_thread ()); + struct frame_info *frame; - m_was_stopped = tp->state == THREAD_STOPPED; + m_was_stopped = m_thread->state == THREAD_STOPPED; if (m_was_stopped && target_has_registers && target_has_stack @@ -1434,14 +1453,21 @@ else frame = NULL; - m_selected_frame_id = get_frame_id (frame); - m_selected_frame_level = frame_relative_level (frame); + try + { + m_selected_frame_id = get_frame_id (frame); + m_selected_frame_level = frame_relative_level (frame); + } + catch (const gdb_exception_error &ex) + { + m_selected_frame_id = null_frame_id; + m_selected_frame_level = -1; - tp->incref (); - m_thread = tp; + /* Better let this propagate. */ + if (ex.error == TARGET_CLOSE_ERROR) + throw; + } } - - m_inf->incref (); } /* See gdbthread.h. */ @@ -1509,6 +1535,14 @@ const qcs_flags &flags) { switch_to_thread (thr); + + /* The thread header is computed before running the command since + the command can change the inferior, which is not permitted + by thread_target_id_str. */ + std::string thr_header = + string_printf (_("\nThread %s (%s):\n"), print_thread_id (thr), + thread_target_id_str (thr).c_str ()); + try { std::string cmd_result = execute_command_to_string @@ -1516,9 +1550,7 @@ if (!flags.silent || cmd_result.length () > 0) { if (!flags.quiet) - printf_filtered (_("\nThread %s (%s):\n"), - print_thread_id (thr), - target_pid_to_str (inferior_ptid).c_str ()); + printf_filtered ("%s", thr_header.c_str ()); printf_filtered ("%s", cmd_result.c_str ()); } } @@ -1527,9 +1559,7 @@ if (!flags.silent) { if (!flags.quiet) - printf_filtered (_("\nThread %s (%s):\n"), - print_thread_id (thr), - target_pid_to_str (inferior_ptid).c_str ()); + printf_filtered ("%s", thr_header.c_str ()); if (flags.cont) printf_filtered ("%s\n", ex.what ()); else @@ -1645,7 +1675,7 @@ scoped_restore_current_thread restore_thread; for (thread_info *thr : thr_list_cpy) - if (thread_alive (thr)) + if (switch_to_thread_if_alive (thr)) thr_try_catch_cmd (thr, cmd, from_tty, flags); } } @@ -1802,7 +1832,7 @@ continue; } - if (!thread_alive (tp)) + if (!switch_to_thread_if_alive (tp)) { warning (_("Thread %s has terminated."), print_thread_id (tp)); continue; @@ -1916,9 +1946,15 @@ if (tmp != 0) error (_("Invalid regexp (%s): %s"), tmp, arg); + /* We're going to be switching threads. */ + scoped_restore_current_thread restore_thread; + update_thread_list (); + for (thread_info *tp : all_threads ()) { + switch_to_inferior_no_thread (tp->inf); + if (tp->name != NULL && re_exec (tp->name)) { printf_filtered (_("Thread %s has name '%s'\n"), @@ -1970,16 +2006,14 @@ void thread_select (const char *tidstr, thread_info *tp) { - if (!thread_alive (tp)) + if (!switch_to_thread_if_alive (tp)) error (_("Thread ID %s has terminated."), tidstr); - switch_to_thread (tp); - annotate_thread_changed (); /* Since the current thread may have changed, see if there is any exited thread we can now delete. */ - prune_threads (); + delete_exited_threads (); } /* Print thread and frame switch command response. */ @@ -2024,18 +2058,39 @@ } /* Update the 'threads_executing' global based on the threads we know - about right now. */ + about right now. This is used by infrun to tell whether we should + pull events out of the current target. */ static void update_threads_executing (void) { - threads_executing = 0; - for (thread_info *tp : all_non_exited_threads ()) + process_stratum_target *targ = current_inferior ()->process_target (); + + if (targ == NULL) + return; + + targ->threads_executing = false; + + for (inferior *inf : all_non_exited_inferiors (targ)) { - if (tp->executing) + if (!inf->has_execution ()) + continue; + + /* If the process has no threads, then it must be we have a + process-exit event pending. */ + if (inf->thread_list == NULL) + { + targ->threads_executing = true; + return; + } + + for (thread_info *tp : inf->non_exited_threads ()) { - threads_executing = 1; - break; + if (tp->executing) + { + targ->threads_executing = true; + return; + } } } } @@ -2113,8 +2168,9 @@ NULL }; +void _initialize_thread (); void -_initialize_thread (void) +_initialize_thread () { static struct cmd_list_element *thread_apply_list = NULL; cmd_list_element *c; diff -Nru gdb-9.1/gdb/thread-fsm.h gdb-10.2/gdb/thread-fsm.h --- gdb-9.1/gdb/thread-fsm.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/thread-fsm.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Thread command's finish-state machine, for GDB, the GNU debugger. - Copyright (C) 2015-2020 Free Software Foundation, Inc. + Copyright (C) 2015-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/thread-iter.c gdb-10.2/gdb/thread-iter.c --- gdb-9.1/gdb/thread-iter.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/thread-iter.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Thread iterators and ranges for GDB, the GNU debugger. - Copyright (C) 2018-2020 Free Software Foundation, Inc. + Copyright (C) 2018-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -58,16 +58,22 @@ bool all_matching_threads_iterator::m_inf_matches () { - return (m_filter_ptid == minus_one_ptid - || m_filter_ptid.pid () == m_inf->pid); + return ((m_filter_target == nullptr + || m_filter_target == m_inf->process_target ()) + && (m_filter_ptid == minus_one_ptid + || m_filter_ptid.pid () == m_inf->pid)); } /* See thread-iter.h. */ all_matching_threads_iterator::all_matching_threads_iterator - (ptid_t filter_ptid) - : m_filter_ptid (filter_ptid) + (process_stratum_target *filter_target, ptid_t filter_ptid) + : m_filter_target (filter_target), + m_filter_ptid (filter_ptid) { + gdb_assert ((filter_target == nullptr && filter_ptid == minus_one_ptid) + || filter_target->stratum () == process_stratum); + m_thr = nullptr; for (m_inf = inferior_list; m_inf != NULL; m_inf = m_inf->next) if (m_inf_matches ()) diff -Nru gdb-9.1/gdb/thread-iter.h gdb-10.2/gdb/thread-iter.h --- gdb-9.1/gdb/thread-iter.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/thread-iter.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Thread iterators and ranges for GDB, the GNU debugger. - Copyright (C) 2018-2020 Free Software Foundation, Inc. + Copyright (C) 2018-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -92,12 +92,14 @@ /* Creates an iterator that iterates over all threads that match FILTER_PTID. */ - explicit all_matching_threads_iterator (ptid_t filter_ptid); + all_matching_threads_iterator (process_stratum_target *filter_target, + ptid_t filter_ptid); /* Create a one-past-end iterator. */ all_matching_threads_iterator () : m_inf (nullptr), m_thr (nullptr), + m_filter_target (nullptr), m_filter_ptid (minus_one_ptid) {} @@ -131,6 +133,7 @@ thread_info *m_thr; /* The filter. */ + process_stratum_target *m_filter_target; ptid_t m_filter_ptid; }; @@ -211,20 +214,22 @@ struct all_matching_threads_range { public: - explicit all_matching_threads_range (ptid_t filter_ptid) - : m_filter_ptid (filter_ptid) + all_matching_threads_range (process_stratum_target *filter_target, + ptid_t filter_ptid) + : m_filter_target (filter_target), m_filter_ptid (filter_ptid) {} all_matching_threads_range () - : m_filter_ptid (minus_one_ptid) + : m_filter_target (nullptr), m_filter_ptid (minus_one_ptid) {} all_matching_threads_iterator begin () const - { return all_matching_threads_iterator (m_filter_ptid); } + { return all_matching_threads_iterator (m_filter_target, m_filter_ptid); } all_matching_threads_iterator end () const { return all_matching_threads_iterator (); } private: /* The filter. */ + process_stratum_target *m_filter_target; ptid_t m_filter_ptid; }; @@ -236,20 +241,22 @@ class all_non_exited_threads_range { public: - explicit all_non_exited_threads_range (ptid_t filter_ptid) - : m_filter_ptid (filter_ptid) + all_non_exited_threads_range (process_stratum_target *filter_target, + ptid_t filter_ptid) + : m_filter_target (filter_target), m_filter_ptid (filter_ptid) {} all_non_exited_threads_range () - : m_filter_ptid (minus_one_ptid) + : m_filter_target (nullptr), m_filter_ptid (minus_one_ptid) {} all_non_exited_threads_iterator begin () const - { return all_non_exited_threads_iterator (m_filter_ptid); } + { return all_non_exited_threads_iterator (m_filter_target, m_filter_ptid); } all_non_exited_threads_iterator end () const { return all_non_exited_threads_iterator (); } private: + process_stratum_target *m_filter_target; ptid_t m_filter_ptid; }; diff -Nru gdb-9.1/gdb/tic6x-linux-tdep.c gdb-10.2/gdb/tic6x-linux-tdep.c --- gdb-9.1/gdb/tic6x-linux-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/tic6x-linux-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* GNU/Linux on TI C6x target support. - Copyright (C) 2011-2020 Free Software Foundation, Inc. + Copyright (C) 2011-2021 Free Software Foundation, Inc. Contributed by Yao Qi <yao@codesourcery.com> This file is part of GDB. @@ -204,8 +204,9 @@ &tic6x_linux_rt_sigreturn_tramp_frame); } +void _initialize_tic6x_linux_tdep (); void -_initialize_tic6x_linux_tdep (void) +_initialize_tic6x_linux_tdep () { gdbarch_register_osabi (bfd_arch_tic6x, 0, GDB_OSABI_LINUX, tic6x_uclinux_init_abi); diff -Nru gdb-9.1/gdb/tic6x-tdep.c gdb-10.2/gdb/tic6x-tdep.c --- gdb-9.1/gdb/tic6x-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/tic6x-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target dependent code for GDB on TI C6x systems. - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. Contributed by Andrew Jenner <andrew@codesourcery.com> Contributed by Yao Qi <yao@codesourcery.com> @@ -24,7 +24,7 @@ #include "frame-unwind.h" #include "frame-base.h" #include "trad-frame.h" -#include "dwarf2-frame.h" +#include "dwarf2/frame.h" #include "symtab.h" #include "inferior.h" #include "gdbtypes.h" @@ -784,7 +784,7 @@ if (type != NULL) { type = check_typedef (type); - if (language_pass_by_reference (type)) + if (!(language_pass_by_reference (type).trivially_copyable)) return RETURN_VALUE_STRUCT_CONVENTION; } } @@ -808,7 +808,7 @@ tic6x_arg_type_alignment (struct type *type) { int len = TYPE_LENGTH (check_typedef (type)); - enum type_code typecode = TYPE_CODE (check_typedef (type)); + enum type_code typecode = check_typedef (type)->code (); if (typecode == TYPE_CODE_STRUCT || typecode == TYPE_CODE_UNION) { @@ -881,16 +881,16 @@ /* Determine the type of this function. */ func_type = check_typedef (func_type); - if (TYPE_CODE (func_type) == TYPE_CODE_PTR) + if (func_type->code () == TYPE_CODE_PTR) func_type = check_typedef (TYPE_TARGET_TYPE (func_type)); - gdb_assert (TYPE_CODE (func_type) == TYPE_CODE_FUNC - || TYPE_CODE (func_type) == TYPE_CODE_METHOD); + gdb_assert (func_type->code () == TYPE_CODE_FUNC + || func_type->code () == TYPE_CODE_METHOD); /* For a variadic C function, the last explicitly declared argument and all remaining arguments are passed on the stack. */ if (TYPE_VARARGS (func_type)) - first_arg_on_stack = TYPE_NFIELDS (func_type) - 1; + first_arg_on_stack = func_type->num_fields () - 1; /* Now make space on the stack for the args. */ for (argnum = 0; argnum < nargs; argnum++) @@ -915,7 +915,7 @@ struct value *arg = args[argnum]; struct type *arg_type = check_typedef (value_type (arg)); int len = TYPE_LENGTH (arg_type); - enum type_code typecode = TYPE_CODE (arg_type); + enum type_code typecode = arg_type->code (); val = value_contents (arg); @@ -1301,8 +1301,9 @@ return gdbarch; } +void _initialize_tic6x_tdep (); void -_initialize_tic6x_tdep (void) +_initialize_tic6x_tdep () { register_gdbarch_init (bfd_arch_tic6x, tic6x_gdbarch_init); } diff -Nru gdb-9.1/gdb/tic6x-tdep.h gdb-10.2/gdb/tic6x-tdep.h --- gdb-9.1/gdb/tic6x-tdep.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/tic6x-tdep.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* GNU/Linux on TI C6x target support. - Copyright (C) 2011-2020 Free Software Foundation, Inc. + Copyright (C) 2011-2021 Free Software Foundation, Inc. Contributed by Yao Qi <yao@codesourcery.com> This file is part of GDB. diff -Nru gdb-9.1/gdb/tid-parse.c gdb-10.2/gdb/tid-parse.c --- gdb-9.1/gdb/tid-parse.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/tid-parse.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* TID parsing for GDB, the GNU debugger. - Copyright (C) 2015-2020 Free Software Foundation, Inc. + Copyright (C) 2015-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/tid-parse.h gdb-10.2/gdb/tid-parse.h --- gdb-9.1/gdb/tid-parse.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/tid-parse.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* TID parsing for GDB, the GNU debugger. - Copyright (C) 2015-2020 Free Software Foundation, Inc. + Copyright (C) 2015-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/tilegx-linux-nat.c gdb-10.2/gdb/tilegx-linux-nat.c --- gdb-9.1/gdb/tilegx-linux-nat.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/tilegx-linux-nat.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Native-dependent code for GNU/Linux TILE-Gx. - Copyright (C) 2012-2020 Free Software Foundation, Inc. + Copyright (C) 2012-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -164,8 +164,9 @@ perror_with_name (_("Couldn't write registers")); } +void _initialize_tile_linux_nat (); void -_initialize_tile_linux_nat (void) +_initialize_tile_linux_nat () { linux_target = &the_tilegx_linux_nat_target; add_inf_child_target (&the_tilegx_linux_nat_target); diff -Nru gdb-9.1/gdb/tilegx-linux-tdep.c gdb-10.2/gdb/tilegx-linux-tdep.c --- gdb-9.1/gdb/tilegx-linux-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/tilegx-linux-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for GNU/Linux on Tilera TILE-Gx processors. - Copyright (C) 2012-2020 Free Software Foundation, Inc. + Copyright (C) 2012-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -135,8 +135,9 @@ set_gdbarch_skip_solib_resolver (gdbarch, glibc_skip_solib_resolver); } +void _initialize_tilegx_linux_tdep (); void -_initialize_tilegx_linux_tdep (void) +_initialize_tilegx_linux_tdep () { gdbarch_register_osabi (bfd_arch_tilegx, bfd_mach_tilegx, GDB_OSABI_LINUX, tilegx_linux_init_abi); diff -Nru gdb-9.1/gdb/tilegx-tdep.c gdb-10.2/gdb/tilegx-tdep.c --- gdb-9.1/gdb/tilegx-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/tilegx-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for the Tilera TILE-Gx processor. - Copyright (C) 2012-2020 Free Software Foundation, Inc. + Copyright (C) 2012-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -21,7 +21,7 @@ #include "frame.h" #include "frame-base.h" #include "frame-unwind.h" -#include "dwarf2-frame.h" +#include "dwarf2/frame.h" #include "trad-frame.h" #include "symtab.h" #include "gdbtypes.h" @@ -188,9 +188,9 @@ static int tilegx_type_is_scalar (struct type *t) { - return (TYPE_CODE(t) != TYPE_CODE_STRUCT - && TYPE_CODE(t) != TYPE_CODE_UNION - && TYPE_CODE(t) != TYPE_CODE_ARRAY); + return (t->code () != TYPE_CODE_STRUCT + && t->code () != TYPE_CODE_UNION + && t->code () != TYPE_CODE_ARRAY); } /* Returns non-zero if the given struct type will be returned using @@ -1032,8 +1032,9 @@ return gdbarch; } +void _initialize_tilegx_tdep (); void -_initialize_tilegx_tdep (void) +_initialize_tilegx_tdep () { register_gdbarch_init (bfd_arch_tilegx, tilegx_gdbarch_init); } diff -Nru gdb-9.1/gdb/tilegx-tdep.h gdb-10.2/gdb/tilegx-tdep.h --- gdb-9.1/gdb/tilegx-tdep.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/tilegx-tdep.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for the Tilera TILE-Gx processor. - Copyright (C) 2012-2020 Free Software Foundation, Inc. + Copyright (C) 2012-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/top.c gdb-10.2/gdb/top.c --- gdb-9.1/gdb/top.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/top.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Top level stuff for GDB, the GNU debugger. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -42,7 +42,7 @@ #include "gdbsupport/version.h" #include "serial.h" #include "main.h" -#include "event-loop.h" +#include "gdbsupport/event-loop.h" #include "gdbthread.h" #include "extension.h" #include "interps.h" @@ -51,9 +51,11 @@ #include "filenames.h" #include "frame.h" #include "gdbsupport/buffer.h" -#include "gdb_select.h" +#include "gdbsupport/gdb_select.h" #include "gdbsupport/scope-exit.h" #include "gdbarch.h" +#include "gdbsupport/pathstuff.h" +#include "cli/cli-style.h" /* readline include files. */ #include "readline/readline.h" @@ -82,6 +84,8 @@ extern void initialize_all_files (void); +static bool history_filename_empty (void); + #define PROMPT(X) the_prompts.prompt_stack[the_prompts.top + X].prompt #define PREFIX(X) the_prompts.prompt_stack[the_prompts.top + X].prefix #define SUFFIX(X) the_prompts.prompt_stack[the_prompts.top + X].suffix @@ -170,7 +174,7 @@ whatever) can issue its own commands and also send along commands from the user, and have the user not notice that the user interface is issuing commands too. */ -int server_command; +bool server_command; /* Timeout limit for response from target. */ @@ -575,6 +579,8 @@ { const char *cmd = p; const char *arg; + std::string default_args; + std::string default_args_and_arg; int was_sync = current_ui->prompt_state == PROMPT_BLOCKED; line = p; @@ -582,15 +588,26 @@ /* If trace-commands is set then this will print this command. */ print_command_trace ("%s", p); - c = lookup_cmd (&cmd, cmdlist, "", 0, 1); + c = lookup_cmd (&cmd, cmdlist, "", &default_args, 0, 1); p = cmd; scoped_restore save_repeat_args = make_scoped_restore (&repeat_arguments, nullptr); const char *args_pointer = p; - /* Pass null arg rather than an empty one. */ - arg = *p ? p : 0; + if (!default_args.empty ()) + { + if (*p != '\0') + default_args_and_arg = default_args + ' ' + p; + else + default_args_and_arg = default_args; + arg = default_args_and_arg.c_str (); + } + else + { + /* Pass null arg rather than an empty one. */ + arg = *p == '\0' ? nullptr : p; + } /* FIXME: cagney/2002-02-02: The c->type test is pretty dodgy while the is_complete_command(cfunc) test is just plain @@ -882,13 +899,22 @@ /* static */ bool history_expansion_p; +/* Should we write out the command history on exit? In order to write out + the history both this flag must be true, and the history_filename + variable must be set to something sensible. */ static bool write_history_p; + +/* Implement 'show history save'. */ static void show_write_history_p (struct ui_file *file, int from_tty, struct cmd_list_element *c, const char *value) { - fprintf_filtered (file, _("Saving of the history record on exit is %s.\n"), - value); + if (!write_history_p || !history_filename_empty ()) + fprintf_filtered (file, _("Saving of the history record on exit is %s.\n"), + value); + else + fprintf_filtered (file, _("Saving of the history is disabled due to " + "the value of 'history filename'.\n")); } /* The variable associated with the "set/show history size" @@ -917,14 +943,30 @@ value); } +/* The name of the file in which GDB history will be written. If this is + set to NULL, of the empty string then history will not be written. */ static char *history_filename; + +/* Return true if the history_filename is either NULL or the empty string, + indicating that we should not try to read, nor write out the history. */ +static bool +history_filename_empty (void) +{ + return (history_filename == nullptr || *history_filename == '\0'); +} + +/* Implement 'show history filename'. */ static void show_history_filename (struct ui_file *file, int from_tty, struct cmd_list_element *c, const char *value) { - fprintf_filtered (file, _("The filename in which to record " - "the command history is \"%s\".\n"), - value); + if (!history_filename_empty ()) + fprintf_filtered (file, _("The filename in which to record " + "the command history is \"%ps\".\n"), + styled_string (file_name_style.style (), value)); + else + fprintf_filtered (file, _("There is no filename currently set for " + "recording the command history in.\n")); } /* This is like readline(), but it has some gdb-specific behavior. @@ -1191,8 +1233,10 @@ saved_errno = errno; if (ret < 0 && saved_errno != ENOENT) { - warning (_("Could not rename %s to %s: %s"), - history_filename, local_history_filename.c_str (), + warning (_("Could not rename %ps to %ps: %s"), + styled_string (file_name_style.style (), history_filename), + styled_string (file_name_style.style (), + local_history_filename.c_str ()), safe_strerror (saved_errno)); } else @@ -1365,7 +1409,7 @@ /* Second line is a copyright notice. */ fprintf_filtered (stream, - "Copyright (C) 2020 Free Software Foundation, Inc.\n"); + "Copyright (C) 2021 Free Software Foundation, Inc.\n"); /* Following the copyright is a brief statement that the program is free software, that users are free to copy and change it on @@ -1424,10 +1468,12 @@ This GDB was configured as follows:\n\ configure --host=%s --target=%s\n\ "), host_name, target_name); + fprintf_filtered (stream, _("\ --with-auto-load-dir=%s\n\ --with-auto-load-safe-path=%s\n\ "), AUTO_LOAD_DIR, AUTO_LOAD_SAFE_PATH); + #if HAVE_LIBEXPAT fprintf_filtered (stream, _("\ --with-expat\n\ @@ -1437,19 +1483,23 @@ --without-expat\n\ ")); #endif + if (GDB_DATADIR[0]) fprintf_filtered (stream, _("\ --with-gdb-datadir=%s%s\n\ "), GDB_DATADIR, GDB_DATADIR_RELOCATABLE ? " (relocatable)" : ""); + #ifdef ICONV_BIN fprintf_filtered (stream, _("\ --with-iconv-bin=%s%s\n\ "), ICONV_BIN, ICONV_BIN_RELOCATABLE ? " (relocatable)" : ""); #endif + if (JIT_READER_DIR[0]) fprintf_filtered (stream, _("\ --with-jit-reader-dir=%s%s\n\ "), JIT_READER_DIR, JIT_READER_DIR_RELOCATABLE ? " (relocatable)" : ""); + #if HAVE_LIBUNWIND_IA64_H fprintf_filtered (stream, _("\ --with-libunwind-ia64\n\ @@ -1459,6 +1509,7 @@ --without-libunwind-ia64\n\ ")); #endif + #if HAVE_LIBLZMA fprintf_filtered (stream, _("\ --with-lzma\n\ @@ -1468,39 +1519,42 @@ --without-lzma\n\ ")); #endif + #if HAVE_LIBBABELTRACE - fprintf_filtered (stream, _("\ + fprintf_filtered (stream, _("\ --with-babeltrace\n\ ")); #else - fprintf_filtered (stream, _("\ - --without-babeltrace\n \ + fprintf_filtered (stream, _("\ + --without-babeltrace\n\ ")); #endif + #if HAVE_LIBIPT - fprintf_filtered (stream, _("\ + fprintf_filtered (stream, _("\ --with-intel-pt\n\ ")); #else - fprintf_filtered (stream, _("\ + fprintf_filtered (stream, _("\ --without-intel-pt\n\ ")); #endif + #if HAVE_LIBMPFR - fprintf_filtered (stream, _("\ + fprintf_filtered (stream, _("\ --with-mpfr\n\ ")); #else - fprintf_filtered (stream, _("\ + fprintf_filtered (stream, _("\ --without-mpfr\n\ ")); #endif #if HAVE_LIBXXHASH - fprintf_filtered (stream, _("\ + fprintf_filtered (stream, _("\ --with-xxhash\n\ ")); #else - fprintf_filtered (stream, _("\ + fprintf_filtered (stream, _("\ --without-xxhash\n\ ")); #endif @@ -1513,6 +1567,26 @@ --without-python\n\ ")); #endif +#ifdef WITH_PYTHON_LIBDIR + fprintf_filtered (stream, _("\ + --with-python-libdir=%s%s\n\ +"), WITH_PYTHON_LIBDIR, PYTHON_LIBDIR_RELOCATABLE ? " (relocatable)" : ""); +#else + fprintf_filtered (stream, _("\ + --without-python-libdir\n\ +")); +#endif + +#if HAVE_LIBDEBUGINFOD + fprintf_filtered (stream, _("\ + --with-debuginfod\n\ +")); +#else + fprintf_filtered (stream, _("\ + --without-debuginfod\n\ +")); +#endif + #if HAVE_GUILE fprintf_filtered (stream, _("\ --with-guile\n\ @@ -1522,6 +1596,7 @@ --without-guile\n\ ")); #endif + #if HAVE_SOURCE_HIGHLIGHT fprintf_filtered (stream, _("\ --enable-source-highlight\n\ @@ -1531,30 +1606,36 @@ --disable-source-highlight\n\ ")); #endif + #ifdef RELOC_SRCDIR fprintf_filtered (stream, _("\ --with-relocated-sources=%s\n\ "), RELOC_SRCDIR); #endif + if (DEBUGDIR[0]) fprintf_filtered (stream, _("\ --with-separate-debug-dir=%s%s\n\ "), DEBUGDIR, DEBUGDIR_RELOCATABLE ? " (relocatable)" : ""); + if (TARGET_SYSTEM_ROOT[0]) fprintf_filtered (stream, _("\ --with-sysroot=%s%s\n\ "), TARGET_SYSTEM_ROOT, TARGET_SYSTEM_ROOT_RELOCATABLE ? " (relocatable)" : ""); + if (SYSTEM_GDBINIT[0]) fprintf_filtered (stream, _("\ --with-system-gdbinit=%s%s\n\ "), SYSTEM_GDBINIT, SYSTEM_GDBINIT_RELOCATABLE ? " (relocatable)" : ""); + if (SYSTEM_GDBINIT_DIR[0]) fprintf_filtered (stream, _("\ --with-system-gdbinit-dir=%s%s\n\ "), SYSTEM_GDBINIT_DIR, SYSTEM_GDBINIT_DIR_RELOCATABLE ? " (relocatable)" : ""); - /* We assume "relocatable" will be printed at least once, thus we always - print this text. It's a reasonably safe assumption for now. */ - fprintf_filtered (stream, _("\n\ + + /* We assume "relocatable" will be printed at least once, thus we always + print this text. It's a reasonably safe assumption for now. */ + fprintf_filtered (stream, _("\n\ (\"Relocatable\" means the directory can be moved with the GDB installation\n\ tree, and GDB will still find it.)\n\ ")); @@ -1585,21 +1666,14 @@ } -struct qt_args -{ - int from_tty; -}; - -/* Callback for iterate_over_inferiors. Kills or detaches the given - inferior, depending on how we originally gained control of it. */ +/* Kills or detaches the given inferior, depending on how we originally + gained control of it. */ -static int -kill_or_detach (struct inferior *inf, void *args) +static void +kill_or_detach (inferior *inf, int from_tty) { - struct qt_args *qt = (struct qt_args *) args; - if (inf->pid == 0) - return 0; + return; thread_info *thread = any_thread_of_inferior (inf); if (thread != NULL) @@ -1610,37 +1684,30 @@ if (target_has_execution) { if (inf->attach_flag) - target_detach (inf, qt->from_tty); + target_detach (inf, from_tty); else target_kill (); } } - - return 0; } -/* Callback for iterate_over_inferiors. Prints info about what GDB - will do to each inferior on a "quit". ARG points to a struct - ui_out where output is to be collected. */ +/* Prints info about what GDB will do to inferior INF on a "quit". OUT is + where to collect the output. */ -static int -print_inferior_quit_action (struct inferior *inf, void *arg) +static void +print_inferior_quit_action (inferior *inf, ui_file *out) { - struct ui_file *stb = (struct ui_file *) arg; - if (inf->pid == 0) - return 0; + return; if (inf->attach_flag) - fprintf_filtered (stb, + fprintf_filtered (out, _("\tInferior %d [%s] will be detached.\n"), inf->num, target_pid_to_str (ptid_t (inf->pid)).c_str ()); else - fprintf_filtered (stb, + fprintf_filtered (out, _("\tInferior %d [%s] will be killed.\n"), inf->num, target_pid_to_str (ptid_t (inf->pid)).c_str ()); - - return 0; } /* If necessary, make the user confirm that we should quit. Return @@ -1657,7 +1724,10 @@ string_file stb; stb.puts (_("A debugging session is active.\n\n")); - iterate_over_inferiors (print_inferior_quit_action, &stb); + + for (inferior *inf : all_inferiors ()) + print_inferior_quit_action (inf, &stb); + stb.puts (_("\nQuit anyway? ")); return query ("%s", stb.c_str ()); @@ -1690,7 +1760,6 @@ quit_force (int *exit_arg, int from_tty) { int exit_code = 0; - struct qt_args qt; undo_terminal_modifications_before_exit (); @@ -1701,15 +1770,14 @@ else if (return_child_result) exit_code = return_child_result_value; - qt.from_tty = from_tty; - /* We want to handle any quit errors and exit regardless. */ /* Get out of tfind mode, and kill or detach all inferiors. */ try { disconnect_tracing (); - iterate_over_inferiors (kill_or_detach, &qt); + for (inferior *inf : all_inferiors ()) + kill_or_detach (inf, from_tty); } catch (const gdb_exception &ex) { @@ -1718,13 +1786,17 @@ /* Give all pushed targets a chance to do minimal cleanup, and pop them all out. */ - try + for (inferior *inf : all_inferiors ()) { - pop_all_targets (); - } - catch (const gdb_exception &ex) - { - exception_print (gdb_stderr, ex); + switch_to_inferior_no_thread (inf); + try + { + pop_all_targets (); + } + catch (const gdb_exception &ex) + { + exception_print (gdb_stderr, ex); + } } /* Save the history information if it is appropriate to do so. */ @@ -1732,12 +1804,11 @@ { if (write_history_p && history_filename) { - struct ui *ui; int save = 0; /* History is currently shared between all UIs. If there's any UI with a terminal, save history. */ - ALL_UIS (ui) + for (ui *ui : all_uis ()) { if (input_interactive_p (ui)) { @@ -1899,20 +1970,6 @@ set_readline_history_size (history_size_setshow_var); } -void -set_history (const char *args, int from_tty) -{ - printf_unfiltered (_("\"set history\" must be followed " - "by the name of a history subcommand.\n")); - help_list (sethistlist, "set history ", all_commands, gdb_stdout); -} - -void -show_history (const char *args, int from_tty) -{ - cmd_show_list (showhistlist, from_tty, ""); -} - bool info_verbose = false; /* Default verbose msgs off. */ /* Called by do_set_command. An elaborate joke. */ @@ -1922,7 +1979,7 @@ const char *cmdname = "verbose"; struct cmd_list_element *showcmd; - showcmd = lookup_cmd_1 (&cmdname, showlist, NULL, 1); + showcmd = lookup_cmd_1 (&cmdname, showlist, NULL, NULL, 1); gdb_assert (showcmd != NULL && showcmd != CMD_LIST_AMBIGUOUS); if (c->doc && c->doc_allocated) @@ -1994,23 +2051,26 @@ set_readline_history_size (history_size_setshow_var); tmpenv = getenv ("GDBHISTFILE"); - if (tmpenv) + if (tmpenv != nullptr) history_filename = xstrdup (tmpenv); - else if (!history_filename) + else if (history_filename == nullptr) { /* We include the current directory so that if the user changes directories the file written will be the same as the one that was read. */ #ifdef __MSDOS__ /* No leading dots in file names are allowed on MSDOS. */ - history_filename = concat (current_directory, "/_gdb_history", - (char *)NULL); + const char *fname = "_gdb_history"; #else - history_filename = concat (current_directory, "/.gdb_history", - (char *)NULL); + const char *fname = ".gdb_history"; #endif + + gdb::unique_xmalloc_ptr<char> temp (gdb_abspath (fname)); + history_filename = temp.release (); } - read_history (history_filename); + + if (!history_filename_empty ()) + read_history (history_filename); } static void @@ -2074,10 +2134,13 @@ show_gdb_datadir (struct ui_file *file, int from_tty, struct cmd_list_element *c, const char *value) { - fprintf_filtered (file, _("GDB's data directory is \"%s\".\n"), - gdb_datadir.c_str ()); + fprintf_filtered (file, _("GDB's data directory is \"%ps\".\n"), + styled_string (file_name_style.style (), + gdb_datadir.c_str ())); } +/* Implement 'set history filename'. */ + static void set_history_filename (const char *args, int from_tty, struct cmd_list_element *c) @@ -2085,9 +2148,13 @@ /* We include the current directory so that if the user changes directories the file written will be the same as the one that was read. */ - if (!IS_ABSOLUTE_PATH (history_filename)) - history_filename = reconcat (history_filename, current_directory, "/", - history_filename, (char *) NULL); + if (!history_filename_empty () && !IS_ABSOLUTE_PATH (history_filename)) + { + gdb::unique_xmalloc_ptr<char> temp (gdb_abspath (history_filename)); + + xfree (history_filename); + history_filename = temp.release (); + } } static void @@ -2188,7 +2255,7 @@ show_history_remove_duplicates, &sethistlist, &showhistlist); - add_setshow_filename_cmd ("filename", no_class, &history_filename, _("\ + add_setshow_optional_filename_cmd ("filename", no_class, &history_filename, _("\ Set the filename in which to record the command history."), _("\ Show the filename in which to record the command history."), _("\ (the list of previous commands of which a record is kept)."), @@ -2270,7 +2337,6 @@ #endif init_cmd_lists (); /* This needs to be done first. */ - initialize_targets (); /* Setup target_terminal macros for utils.c. */ init_page_info (); diff -Nru gdb-9.1/gdb/top.h gdb-10.2/gdb/top.h --- gdb-9.1/gdb/top.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/top.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Top level stuff for GDB, the GNU debugger. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -21,7 +21,8 @@ #define TOP_H #include "gdbsupport/buffer.h" -#include "event-loop.h" +#include "gdbsupport/event-loop.h" +#include "gdbsupport/next-iterator.h" #include "value.h" struct tl_interp_info; @@ -206,9 +207,12 @@ #define SWITCH_THRU_ALL_UIS() \ for (switch_thru_all_uis stau_state; !stau_state.done (); stau_state.next ()) -/* Traverse over all UIs. */ -#define ALL_UIS(UI) \ - for (UI = ui_list; UI; UI = UI->next) \ +/* An adapter that can be used to traverse over all UIs. */ +static inline +next_adapter<ui> all_uis () +{ + return next_adapter<ui> (ui_list); +} /* Register the UI's input file descriptor in the event loop. */ extern void ui_register_input_event_handler (struct ui *ui); @@ -281,17 +285,13 @@ extern int source_line_number; extern std::string source_file_name; extern bool history_expansion_p; -extern int server_command; +extern bool server_command; extern char *lim_at_start; extern void gdb_add_history (const char *); extern void show_commands (const char *args, int from_tty); -extern void set_history (const char *, int); - -extern void show_history (const char *, int); - extern void set_verbose (const char *, int, struct cmd_list_element *); extern char *handle_line_of_input (struct buffer *cmd_line_buffer, diff -Nru gdb-9.1/gdb/tracectf.c gdb-10.2/gdb/tracectf.c --- gdb-9.1/gdb/tracectf.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/tracectf.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* CTF format support. - Copyright (C) 2012-2020 Free Software Foundation, Inc. + Copyright (C) 2012-2021 Free Software Foundation, Inc. Contributed by Hui Zhu <hui_zhu@mentor.com> Contributed by Yao Qi <yao@codesourcery.com> @@ -1168,8 +1168,9 @@ push_target (&ctf_ops); inferior_appeared (current_inferior (), CTF_PID); - inferior_ptid = ptid_t (CTF_PID); - add_thread_silent (inferior_ptid); + + thread_info *thr = add_thread_silent (&ctf_ops, ptid_t (CTF_PID)); + switch_to_thread (thr); merge_uploaded_trace_state_variables (&uploaded_tsvs); merge_uploaded_tracepoints (&uploaded_tps); @@ -1187,7 +1188,7 @@ xfree (trace_dirname); trace_dirname = NULL; - inferior_ptid = null_ptid; /* Avoid confusion from thread stuff. */ + switch_to_no_thread (); /* Avoid confusion from thread stuff. */ exit_inferior_silent (current_inferior ()); trace_reset_local_state (); @@ -1721,8 +1722,9 @@ /* module initialization */ +void _initialize_ctf (); void -_initialize_ctf (void) +_initialize_ctf () { #if HAVE_LIBBABELTRACE add_target (ctf_target_info, ctf_target_open, filename_completer); diff -Nru gdb-9.1/gdb/tracectf.h gdb-10.2/gdb/tracectf.h --- gdb-9.1/gdb/tracectf.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/tracectf.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* CTF format support. - Copyright (C) 2012-2020 Free Software Foundation, Inc. + Copyright (C) 2012-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/tracefile.c gdb-10.2/gdb/tracefile.c --- gdb-9.1/gdb/tracefile.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/tracefile.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Trace file support in GDB. - Copyright (C) 1997-2020 Free Software Foundation, Inc. + Copyright (C) 1997-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -471,8 +471,9 @@ return -1; } +void _initialize_tracefile (); void -_initialize_tracefile (void) +_initialize_tracefile () { add_com ("tsave", class_trace, tsave_command, _("\ Save the trace data to a file.\n\ diff -Nru gdb-9.1/gdb/tracefile.h gdb-10.2/gdb/tracefile.h --- gdb-9.1/gdb/tracefile.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/tracefile.h 2020-09-13 02:33:41.000000000 +0000 @@ -127,7 +127,7 @@ bool has_memory () override; bool has_stack () override; bool has_registers () override; - bool has_execution (ptid_t) override { return false; } + bool has_execution (inferior *inf) override { return false; } bool thread_alive (ptid_t ptid) override; }; diff -Nru gdb-9.1/gdb/tracefile-tfile.c gdb-10.2/gdb/tracefile-tfile.c --- gdb-9.1/gdb/tracefile-tfile.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/tracefile-tfile.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Trace file TFILE format support in GDB. - Copyright (C) 1997-2020 Free Software Foundation, Inc. + Copyright (C) 1997-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -32,6 +32,7 @@ #include "xml-tdesc.h" #include "target-descriptions.h" #include "gdbsupport/buffer.h" +#include "gdbsupport/pathstuff.h" #include <algorithm> #ifndef O_LARGEFILE @@ -470,8 +471,7 @@ gdb::unique_xmalloc_ptr<char> filename (tilde_expand (arg)); if (!IS_ABSOLUTE_PATH (filename.get ())) - filename.reset (concat (current_directory, "/", filename.get (), - (char *) NULL)); + filename = gdb_abspath (filename.get ()); flags = O_BINARY | O_LARGEFILE; flags |= O_RDONLY; @@ -556,8 +556,9 @@ } inferior_appeared (current_inferior (), TFILE_PID); - inferior_ptid = ptid_t (TFILE_PID); - add_thread_silent (inferior_ptid); + + thread_info *thr = add_thread_silent (&tfile_ops, ptid_t (TFILE_PID)); + switch_to_thread (thr); if (ts->traceframe_count <= 0) warning (_("No traceframes present in this file.")); @@ -616,10 +617,9 @@ void tfile_target::close () { - if (trace_fd < 0) - return; + gdb_assert (trace_fd != -1); - inferior_ptid = null_ptid; /* Avoid confusion from thread stuff. */ + switch_to_no_thread (); /* Avoid confusion from thread stuff. */ exit_inferior_silent (current_inferior ()); ::close (trace_fd); @@ -1132,8 +1132,9 @@ buffer_grow_str (&trace_tdesc, "\n"); } +void _initialize_tracefile_tfile (); void -_initialize_tracefile_tfile (void) +_initialize_tracefile_tfile () { add_target (tfile_target_info, tfile_target_open, filename_completer); } diff -Nru gdb-9.1/gdb/tracepoint.c gdb-10.2/gdb/tracepoint.c --- gdb-9.1/gdb/tracepoint.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/tracepoint.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Tracing functionality for remote targets in custom GDB protocol - Copyright (C) 1997-2020 Free Software Foundation, Inc. + Copyright (C) 1997-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -651,7 +651,7 @@ if (*p == '#') /* comment line */ return; - c = lookup_cmd (&p, cmdlist, "", -1, 1); + c = lookup_cmd (&p, cmdlist, "", NULL, -1, 1); if (c == 0) error (_("`%s' is not a tracepoint action, or is ambiguous."), p); @@ -942,7 +942,7 @@ } /* A struct may be a C++ class with static fields, go to general expression handling. */ - if (TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_STRUCT) + if (SYMBOL_TYPE (sym)->code () == TYPE_CODE_STRUCT) treat_as_expr = 1; else add_memrange (gdbarch, memrange_absolute, offset, len, scope); @@ -954,7 +954,7 @@ add_local_register (gdbarch, reg, scope); /* Check for doubles stored in two registers. */ /* FIXME: how about larger types stored in 3 or more regs? */ - if (TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_FLT && + if (SYMBOL_TYPE (sym)->code () == TYPE_CODE_FLT && len > register_size (gdbarch, reg)) add_local_register (gdbarch, reg + 1, scope); break; @@ -1303,7 +1303,7 @@ action_exp = action->line; action_exp = skip_spaces (action_exp); - cmd = lookup_cmd (&action_exp, cmdlist, "", -1, 1); + cmd = lookup_cmd (&action_exp, cmdlist, "", NULL, -1, 1); if (cmd == 0) error (_("Bad action list item: %s"), action_exp); @@ -2673,7 +2673,7 @@ if (*action_exp == '#') /* comment line */ continue; - cmd = lookup_cmd (&action_exp, cmdlist, "", -1, 1); + cmd = lookup_cmd (&action_exp, cmdlist, "", NULL, -1, 1); if (cmd == 0) error (_("Bad action list item: %s"), action_exp); @@ -3980,8 +3980,9 @@ cmd_list_element *while_stepping_cmd_element = nullptr; /* module initialization */ +void _initialize_tracepoint (); void -_initialize_tracepoint (void) +_initialize_tracepoint () { struct cmd_list_element *c; @@ -4097,8 +4098,8 @@ while single-stepping.\n\n\ Note: this command can only be used in a tracepoint \"actions\" list.")); - add_com_alias ("ws", "while-stepping", class_alias, 0); - add_com_alias ("stepping", "while-stepping", class_alias, 0); + add_com_alias ("ws", "while-stepping", class_trace, 0); + add_com_alias ("stepping", "while-stepping", class_trace, 0); add_com ("collect", class_trace, collect_pseudocommand, _("\ Specify one or more data items to be collected at a tracepoint.\n\ diff -Nru gdb-9.1/gdb/tracepoint.h gdb-10.2/gdb/tracepoint.h --- gdb-9.1/gdb/tracepoint.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/tracepoint.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Data structures associated with tracepoints in GDB. - Copyright (C) 1997-2020 Free Software Foundation, Inc. + Copyright (C) 1997-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/trad-frame.c gdb-10.2/gdb/trad-frame.c --- gdb-9.1/gdb/trad-frame.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/trad-frame.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Traditional frame unwind support, for GDB the GNU Debugger. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/trad-frame.h gdb-10.2/gdb/trad-frame.h --- gdb-9.1/gdb/trad-frame.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/trad-frame.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Traditional frame unwind support, for GDB the GNU Debugger. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/tramp-frame.c gdb-10.2/gdb/tramp-frame.c --- gdb-9.1/gdb/tramp-frame.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/tramp-frame.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Signal trampoline unwinder, for GDB the GNU Debugger. - Copyright (C) 2004-2020 Free Software Foundation, Inc. + Copyright (C) 2004-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/tramp-frame.h gdb-10.2/gdb/tramp-frame.h --- gdb-9.1/gdb/tramp-frame.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/tramp-frame.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Signal trampoline unwinder. - Copyright (C) 2004-2020 Free Software Foundation, Inc. + Copyright (C) 2004-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/transform.m4 gdb-10.2/gdb/transform.m4 --- gdb-9.1/gdb/transform.m4 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/transform.m4 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020 Free Software Foundation, Inc. +# Copyright (C) 2015-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without diff -Nru gdb-9.1/gdb/tui/tui.c gdb-10.2/gdb/tui/tui.c --- gdb-9.1/gdb/tui/tui.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/tui/tui.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* General functions for the WDB TUI. - Copyright (C) 1998-2020 Free Software Foundation, Inc. + Copyright (C) 1998-2021 Free Software Foundation, Inc. Contributed by Hewlett-Packard Company. @@ -30,6 +30,7 @@ #include "tui/tui-regs.h" #include "tui/tui-stack.h" #include "tui/tui-win.h" +#include "tui/tui-wingeneral.h" #include "tui/tui-winsource.h" #include "tui/tui-source.h" #include "target.h" @@ -44,9 +45,6 @@ #include <ctype.h> #include <signal.h> #include <fcntl.h> -#if 0 -#include <termio.h> -#endif #include <setjmp.h> #include "gdb_curses.h" @@ -58,8 +56,8 @@ #include "readline/readline.h" /* Tells whether the TUI is active or not. */ -int tui_active = 0; -static int tui_finish_init = 1; +bool tui_active = false; +static bool tui_finish_init = true; enum tui_key_mode tui_current_key_mode = TUI_COMMAND_MODE; @@ -142,8 +140,7 @@ /* TUI readline command. Change the TUI layout to show a next layout. This function is bound to CTRL-X 2. It is intended to provide - a functionality close to the Emacs split-window command. We - always show two windows (src+asm), (src+regs) or (asm+regs). */ + a functionality close to the Emacs split-window command. */ static int tui_rl_change_windows (int notused1, int notused2) { @@ -151,41 +148,8 @@ tui_rl_switch_mode (0 /* notused */, 0 /* notused */); if (tui_active) - { - enum tui_layout_type new_layout; - - new_layout = tui_current_layout (); + tui_next_layout (); - /* Select a new layout to have a rolling layout behavior with - always two windows (except when undefined). */ - switch (new_layout) - { - case SRC_COMMAND: - new_layout = SRC_DISASSEM_COMMAND; - break; - - case DISASSEM_COMMAND: - new_layout = SRC_DISASSEM_COMMAND; - break; - - case SRC_DATA_COMMAND: - new_layout = SRC_DISASSEM_COMMAND; - break; - - case SRC_DISASSEM_COMMAND: - new_layout = DISASSEM_DATA_COMMAND; - break; - - case DISASSEM_DATA_COMMAND: - new_layout = SRC_DATA_COMMAND; - break; - - default: - new_layout = SRC_COMMAND; - break; - } - tui_set_layout (new_layout); - } return 0; } @@ -198,28 +162,8 @@ tui_rl_switch_mode (0 /* notused */, 0 /* notused */); if (tui_active) - { - enum tui_layout_type new_layout; - - new_layout = tui_current_layout (); + tui_remove_some_windows (); - /* Kill one window. */ - switch (new_layout) - { - case SRC_COMMAND: - case SRC_DATA_COMMAND: - case SRC_DISASSEM_COMMAND: - default: - new_layout = SRC_COMMAND; - break; - - case DISASSEM_COMMAND: - case DISASSEM_DATA_COMMAND: - new_layout = DISASSEM_COMMAND; - break; - } - tui_set_layout (new_layout); - } return 0; } @@ -324,8 +268,14 @@ /* Initialize readline and configure the keymap for the switching key shortcut. */ void -tui_initialize_readline (void) +tui_ensure_readline_initialized () { + static bool initialized; + + if (initialized) + return; + initialized = true; + int i; Keymap tui_ctlx_keymap; @@ -381,6 +331,9 @@ rl_bind_key_in_map ('q', tui_rl_next_keymap, tui_keymap); rl_bind_key_in_map ('s', tui_rl_next_keymap, emacs_ctlx_keymap); rl_bind_key_in_map ('s', tui_rl_next_keymap, tui_ctlx_keymap); + + /* Initialize readline after the above. */ + rl_initialize (); } /* Return the TERM variable from the environment, or "<unset>" @@ -427,7 +380,7 @@ /* Don't try to setup curses (and print funny control characters) if we're not outputting to a terminal. */ - if (!ui_file_isatty (gdb_stdout)) + if (!gdb_stderr->isatty ()) error (_("Cannot enable the TUI when output is not a terminal")); s = newterm (NULL, stdout, stdin); @@ -478,11 +431,11 @@ def_prog_mode (); tui_show_frame_info (0); - tui_set_layout (SRC_COMMAND); + tui_set_initial_layout (); tui_set_win_focus_to (TUI_SRC_WIN); keypad (TUI_CMD_WIN->handle.get (), TRUE); wrefresh (TUI_CMD_WIN->handle.get ()); - tui_finish_init = 0; + tui_finish_init = false; } else { @@ -492,16 +445,12 @@ clearok (stdscr, TRUE); } - /* Install the TUI specific hooks. */ - tui_install_hooks (); - rl_startup_hook = tui_rl_startup_hook; - if (tui_update_variables ()) tui_rehighlight_all (); tui_setup_io (1); - tui_active = 1; + tui_active = true; /* Resize windows before anything might display/refresh a window. */ @@ -513,6 +462,14 @@ if (deprecated_safe_get_selected_frame ()) tui_show_frame_info (deprecated_safe_get_selected_frame ()); + else + tui_display_main (); + + /* Install the TUI specific hooks. This must be done after the call to + tui_display_main so that we don't detect the symtab changed event it + can cause. */ + tui_install_hooks (); + rl_startup_hook = tui_rl_startup_hook; /* Restore TUI keymap. */ tui_set_key_mode (tui_current_key_mode); @@ -553,7 +510,7 @@ /* Update gdb's knowledge of its terminal. */ gdb_save_tty_state (); - tui_active = 0; + tui_active = false; tui_update_gdb_sizes (); } @@ -573,74 +530,10 @@ tui_disable (); } -#if 0 -/* Solaris <sys/termios.h> defines CTRL. */ -#ifndef CTRL -#define CTRL(x) (x & ~0140) -#endif - -#define FILEDES 2 -#define CHK(val, dft) (val<=0 ? dft : val) - -static void -tui_reset (void) -{ - struct termio mode; - - /* Reset the teletype mode bits to a sensible state. - Copied tset.c. */ -#if defined (TIOCGETC) - struct tchars tbuf; -#endif /* TIOCGETC */ -#ifdef UCB_NTTY - struct ltchars ltc; - - if (ldisc == NTTYDISC) - { - ioctl (FILEDES, TIOCGLTC, <c); - ltc.t_suspc = CHK (ltc.t_suspc, CTRL ('Z')); - ltc.t_dsuspc = CHK (ltc.t_dsuspc, CTRL ('Y')); - ltc.t_rprntc = CHK (ltc.t_rprntc, CTRL ('R')); - ltc.t_flushc = CHK (ltc.t_flushc, CTRL ('O')); - ltc.t_werasc = CHK (ltc.t_werasc, CTRL ('W')); - ltc.t_lnextc = CHK (ltc.t_lnextc, CTRL ('V')); - ioctl (FILEDES, TIOCSLTC, <c); - } -#endif /* UCB_NTTY */ -#ifdef TIOCGETC - ioctl (FILEDES, TIOCGETC, &tbuf); - tbuf.t_intrc = CHK (tbuf.t_intrc, CTRL ('?')); - tbuf.t_quitc = CHK (tbuf.t_quitc, CTRL ('\\')); - tbuf.t_startc = CHK (tbuf.t_startc, CTRL ('Q')); - tbuf.t_stopc = CHK (tbuf.t_stopc, CTRL ('S')); - tbuf.t_eofc = CHK (tbuf.t_eofc, CTRL ('D')); - /* brkc is left alone. */ - ioctl (FILEDES, TIOCSETC, &tbuf); -#endif /* TIOCGETC */ - mode.sg_flags &= ~(RAW -#ifdef CBREAK - | CBREAK -#endif /* CBREAK */ - | VTDELAY | ALLDELAY); - mode.sg_flags |= XTABS | ECHO | CRMOD | ANYP; -} -#endif - -void -tui_show_source (const char *fullname, int line) -{ - struct symtab_and_line cursal = get_current_source_symtab_and_line (); - - /* Make sure that the source window is displayed. */ - tui_add_win_to_layout (SRC_WIN); - - tui_update_source_windows_with_line (cursal.symtab, line); - tui_update_locator_fullname (fullname); -} - void tui_show_assembly (struct gdbarch *gdbarch, CORE_ADDR addr) { + tui_suppress_output suppress; tui_add_win_to_layout (DISASSEM_WIN); tui_update_source_windows_with_addr (gdbarch, addr); } @@ -648,7 +541,7 @@ bool tui_is_window_visible (enum tui_win_type type) { - if (tui_active == 0) + if (!tui_active) return false; if (tui_win_list[type] == 0) @@ -657,31 +550,32 @@ return tui_win_list[type]->is_visible (); } -int +bool tui_get_command_dimension (unsigned int *width, unsigned int *height) { if (!tui_active || (TUI_CMD_WIN == NULL)) - { - return 0; - } + return false; *width = TUI_CMD_WIN->width; *height = TUI_CMD_WIN->height; - return 1; + return true; } +void _initialize_tui (); void -_initialize_tui (void) +_initialize_tui () { struct cmd_list_element **tuicmd; tuicmd = tui_get_cmd_list (); add_cmd ("enable", class_tui, tui_enable_command, - _("Enable TUI display mode."), + _("Enable TUI display mode.\n\ +Usage: tui enable"), tuicmd); add_cmd ("disable", class_tui, tui_disable_command, - _("Disable TUI display mode."), + _("Disable TUI display mode.\n\ +Usage: tui disable"), tuicmd); } diff -Nru gdb-9.1/gdb/tui/tui-command.c gdb-10.2/gdb/tui/tui-command.c --- gdb-9.1/gdb/tui/tui-command.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/tui/tui-command.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Specific command window processing. - Copyright (C) 1998-2020 Free Software Foundation, Inc. + Copyright (C) 1998-2021 Free Software Foundation, Inc. Contributed by Hewlett-Packard Company. @@ -42,16 +42,8 @@ { width = width_; height = height_; - if (height > 1) - { - /* Note this differs from the base class implementation, because - this window can't be boxed. */ - viewport_height = height - 1; - } - else - viewport_height = 1; - origin.x = origin_x; - origin.y = origin_y; + x = origin_x; + y = origin_y; if (handle == nullptr) make_window (); @@ -66,7 +58,7 @@ #ifdef HAVE_WRESIZE wresize (handle.get (), height, width); #endif - mvwin (handle.get (), origin.y, origin.x); + mvwin (handle.get (), y, x); wmove (handle.get (), 0, 0); } } @@ -78,7 +70,7 @@ { WINDOW *w = TUI_CMD_WIN->handle.get (); - wrefresh (w); + tui_wrefresh (w); /* FIXME: It's not clear why this is here. It was present in the original tui_puts code and is kept in order to diff -Nru gdb-9.1/gdb/tui/tui-command.h gdb-10.2/gdb/tui/tui-command.h --- gdb-9.1/gdb/tui/tui-command.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/tui/tui-command.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Specific command window processing. - Copyright (C) 1998-2020 Free Software Foundation, Inc. + Copyright (C) 1998-2021 Free Software Foundation, Inc. Contributed by Hewlett-Packard Company. @@ -27,10 +27,7 @@ /* The TUI command window. */ struct tui_cmd_window : public tui_win_info { - tui_cmd_window () - : tui_win_info (CMD_WIN) - { - } + tui_cmd_window () = default; DISABLE_COPY_AND_ASSIGN (tui_cmd_window); diff -Nru gdb-9.1/gdb/tui/tui-data.c gdb-10.2/gdb/tui/tui-data.c --- gdb-9.1/gdb/tui/tui-data.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/tui/tui-data.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* TUI data manipulation routines. - Copyright (C) 1998-2020 Free Software Foundation, Inc. + Copyright (C) 1998-2021 Free Software Foundation, Inc. Contributed by Hewlett-Packard Company. @@ -23,9 +23,11 @@ #include "symtab.h" #include "tui/tui.h" #include "tui/tui-data.h" +#include "tui/tui-win.h" #include "tui/tui-wingeneral.h" #include "tui/tui-winsource.h" #include "gdb_curses.h" +#include <algorithm> struct tui_win_info *tui_win_list[MAX_MAJOR_WINDOWS]; @@ -58,11 +60,16 @@ } -/* Set the window that has the logical focus. */ +/* Set the logical focus to win_info. */ void -tui_set_win_with_focus (struct tui_win_info *win_info) +tui_set_win_focus_to (struct tui_win_info *win_info) { - win_with_focus = win_info; + if (win_info != NULL) + { + tui_unhighlight_win (win_with_focus); + win_with_focus = win_info; + tui_highlight_win (win_info); + } } @@ -103,28 +110,22 @@ struct tui_win_info * tui_next_win (struct tui_win_info *cur_win) { - int type = cur_win->type; - struct tui_win_info *next_win = NULL; + auto iter = std::find (tui_windows.begin (), tui_windows.end (), cur_win); + gdb_assert (iter != tui_windows.end ()); - if (cur_win->type == CMD_WIN) - type = SRC_WIN; - else - type = cur_win->type + 1; - while (type != cur_win->type && (next_win == NULL)) + gdb_assert (cur_win->can_focus ()); + /* This won't loop forever since we can't have just an un-focusable + window. */ + while (true) { - if (tui_win_list[type] - && tui_win_list[type]->is_visible ()) - next_win = tui_win_list[type]; - else - { - if (type == CMD_WIN) - type = SRC_WIN; - else - type++; - } + ++iter; + if (iter == tui_windows.end ()) + iter = tui_windows.begin (); + if ((*iter)->can_focus ()) + break; } - return next_win; + return *iter; } @@ -133,58 +134,24 @@ struct tui_win_info * tui_prev_win (struct tui_win_info *cur_win) { - int type = cur_win->type; - struct tui_win_info *prev = NULL; + auto iter = std::find (tui_windows.rbegin (), tui_windows.rend (), cur_win); + gdb_assert (iter != tui_windows.rend ()); - if (cur_win->type == SRC_WIN) - type = CMD_WIN; - else - type = cur_win->type - 1; - while (type != cur_win->type && (prev == NULL)) + gdb_assert (cur_win->can_focus ()); + /* This won't loop forever since we can't have just an un-focusable + window. */ + while (true) { - if (tui_win_list[type] - && tui_win_list[type]->is_visible ()) - prev = tui_win_list[type]; - else - { - if (type == SRC_WIN) - type = CMD_WIN; - else - type--; - } + ++iter; + if (iter == tui_windows.rend ()) + iter = tui_windows.rbegin (); + if ((*iter)->can_focus ()) + break; } - return prev; -} - - -/* See tui-data.h. */ - -void -tui_delete_invisible_windows () -{ - for (int win_type = SRC_WIN; (win_type < MAX_MAJOR_WINDOWS); win_type++) - { - if (tui_win_list[win_type] != NULL - && !tui_win_list[win_type]->is_visible ()) - { - /* This should always be made visible before a call to this - function. */ - gdb_assert (win_type != CMD_WIN); - - if (win_with_focus == tui_win_list[win_type]) - win_with_focus = nullptr; - - delete tui_win_list[win_type]; - tui_win_list[win_type] = NULL; - } - } + return *iter; } -tui_win_info::tui_win_info (enum tui_win_type type) - : tui_gen_win_info (type) -{ -} void tui_win_info::rerender () diff -Nru gdb-9.1/gdb/tui/tui-data.h gdb-10.2/gdb/tui/tui-data.h --- gdb-9.1/gdb/tui/tui-data.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/tui/tui-data.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* TUI data manipulation routines. - Copyright (C) 1998-2020 Free Software Foundation, Inc. + Copyright (C) 1998-2021 Free Software Foundation, Inc. Contributed by Hewlett-Packard Company. @@ -22,20 +22,10 @@ #ifndef TUI_TUI_DATA_H #define TUI_TUI_DATA_H -#include "tui/tui.h" /* For enum tui_win_type. */ +#include "tui/tui.h" #include "gdb_curses.h" /* For WINDOW. */ #include "observable.h" -struct tui_cmd_window; -struct tui_source_window_base; -struct tui_source_window; - -/* This is a point definition. */ -struct tui_point -{ - int x, y; -}; - /* A deleter that calls delwin. */ struct curses_deleter { @@ -45,30 +35,25 @@ } }; +#define MIN_WIN_HEIGHT 3 + /* Generic window information. */ -struct tui_gen_win_info +struct tui_win_info { protected: - explicit tui_gen_win_info (enum tui_win_type t) - : type (t) - { - } + tui_win_info () = default; + DISABLE_COPY_AND_ASSIGN (tui_win_info); /* This is called after the window is resized, and should update the window's contents. */ - virtual void rerender () - { - } + virtual void rerender (); virtual void make_window (); public: - tui_gen_win_info (tui_gen_win_info &&) = default; - - virtual ~tui_gen_win_info () - { - } + tui_win_info (tui_win_info &&) = default; + virtual ~tui_win_info () = default; /* Call to refresh this window. */ virtual void refresh_window (); @@ -77,9 +62,30 @@ virtual void make_visible (bool visible); /* Return the name of this type of window. */ - virtual const char *name () const + virtual const char *name () const = 0; + + /* Compute the maximum height of this window. */ + virtual int max_height () const; + + /* Compute the minimum height of this window. */ + virtual int min_height () const { - return ""; + return MIN_WIN_HEIGHT; + } + + /* Compute the maximum width of this window. */ + int max_width () const; + + /* Compute the minimum width of this window. */ + int min_width () const + { + return 3; + } + + /* Return true if this window can be boxed. */ + virtual bool can_box () const + { + return true; } /* Resize this window. The parameters are used to set the window's @@ -93,88 +99,18 @@ return handle != nullptr; } - /* Window handle. */ - std::unique_ptr<WINDOW, curses_deleter> handle; - /* Type of window. */ - enum tui_win_type type; - /* Window width. */ - int width = 0; - /* Window height. */ - int height = 0; - /* Origin of window. */ - struct tui_point origin = {0, 0}; - /* Viewport height. */ - int viewport_height = 0; -}; - -/* Constant definitions. */ -#define DEFAULT_TAB_LEN 8 -#define SRC_NAME "src" -#define CMD_NAME "cmd" -#define DATA_NAME "regs" -#define DISASSEM_NAME "asm" -#define MIN_WIN_HEIGHT 3 -#define MIN_CMD_WIN_HEIGHT 3 - -/* Strings to display in the TUI status line. */ -#define SINGLE_KEY "(SingleKey)" - -/* The kinds of layouts available. */ -enum tui_layout_type -{ - SRC_COMMAND, - DISASSEM_COMMAND, - SRC_DISASSEM_COMMAND, - SRC_DATA_COMMAND, - DISASSEM_DATA_COMMAND, - UNDEFINED_LAYOUT -}; - -enum tui_line_or_address_kind -{ - LOA_LINE, - LOA_ADDRESS -}; - -/* Structure describing source line or line address. */ -struct tui_line_or_address -{ - enum tui_line_or_address_kind loa; - union - { - int line_no; - CORE_ADDR addr; - } u; -}; - -/* This defines information about each logical window. */ -struct tui_win_info : public tui_gen_win_info -{ -protected: - - explicit tui_win_info (enum tui_win_type type); - DISABLE_COPY_AND_ASSIGN (tui_win_info); - - /* Scroll the contents vertically. This is only called via - forward_scroll and backward_scroll. */ - virtual void do_scroll_vertical (int num_to_scroll) = 0; - - /* Scroll the contents horizontally. This is only called via - left_scroll and right_scroll. */ - virtual void do_scroll_horizontal (int num_to_scroll) = 0; - - void rerender () override; - - void make_window () override; - -public: - - ~tui_win_info () override + /* Return true if this window can accept the focus. */ + virtual bool can_focus () const { + return true; } - /* Compute the maximum height of this window. */ - virtual int max_height () const; + /* Disable output until the next call to doupdate. */ + void no_refresh () + { + if (handle != nullptr) + wnoutrefresh (handle.get ()); + } /* Called after the tab width has been changed. */ virtual void update_tab_width () @@ -201,118 +137,74 @@ return true; } - virtual bool can_box () const - { - return true; - } - void check_and_display_highlight_if_needed (); + /* Window handle. */ + std::unique_ptr<WINDOW, curses_deleter> handle; + /* Window width. */ + int width = 0; + /* Window height. */ + int height = 0; + /* Origin of window. */ + int x = 0; + int y = 0; + /* Window title to display. */ std::string title; /* Is this window highlighted? */ bool is_highlighted = false; + +protected: + + /* Scroll the contents vertically. This is only called via + forward_scroll and backward_scroll. */ + virtual void do_scroll_vertical (int num_to_scroll) = 0; + + /* Scroll the contents horizontally. This is only called via + left_scroll and right_scroll. */ + virtual void do_scroll_horizontal (int num_to_scroll) = 0; }; +/* Constant definitions. */ +#define SRC_NAME "src" +#define CMD_NAME "cmd" +#define DATA_NAME "regs" +#define DISASSEM_NAME "asm" +#define STATUS_NAME "status" /* Global Data. */ extern struct tui_win_info *tui_win_list[MAX_MAJOR_WINDOWS]; #define TUI_SRC_WIN ((tui_source_window *) tui_win_list[SRC_WIN]) -#define TUI_DISASM_WIN ((tui_source_window_base *) tui_win_list[DISASSEM_WIN]) +#define TUI_DISASM_WIN ((tui_disasm_window *) tui_win_list[DISASSEM_WIN]) #define TUI_DATA_WIN ((tui_data_window *) tui_win_list[DATA_WIN]) #define TUI_CMD_WIN ((tui_cmd_window *) tui_win_list[CMD_WIN]) -/* An iterator that iterates over all windows. */ - -class tui_window_iterator +/* All the windows that are currently instantiated, in layout + order. */ +extern std::vector<tui_win_info *> tui_windows; + +/* Return a range adapter for iterating over TUI windows. */ +static inline std::vector<tui_win_info *> & +all_tui_windows () { -public: - - typedef tui_window_iterator self_type; - typedef struct tui_win_info *value_type; - typedef struct tui_win_info *&reference; - typedef struct tui_win_info **pointer; - typedef std::forward_iterator_tag iterator_category; - typedef int difference_type; - - explicit tui_window_iterator (enum tui_win_type type) - : m_type (type) - { - advance (); - } - - tui_window_iterator () - : m_type (MAX_MAJOR_WINDOWS) - { - } - - bool operator!= (const self_type &other) const - { - return m_type != other.m_type; - } - - value_type operator* () const - { - gdb_assert (m_type < MAX_MAJOR_WINDOWS); - return tui_win_list[m_type]; - } - - self_type &operator++ () - { - ++m_type; - advance (); - return *this; - } - -private: - - void advance () - { - while (m_type < MAX_MAJOR_WINDOWS && tui_win_list[m_type] == nullptr) - ++m_type; - } - - int m_type; -}; - -/* A range adapter for iterating over TUI windows. */ - -struct all_tui_windows -{ - tui_window_iterator begin () const - { - return tui_window_iterator (SRC_WIN); - } - - tui_window_iterator end () const - { - return tui_window_iterator (); - } -}; - + return tui_windows; +} /* Data Manipulation Functions. */ -extern enum tui_layout_type tui_current_layout (void); extern int tui_term_height (void); extern void tui_set_term_height_to (int); extern int tui_term_width (void); extern void tui_set_term_width_to (int); extern struct tui_locator_window *tui_locator_win_info_ptr (void); extern struct tui_win_info *tui_win_with_focus (void); -extern void tui_set_win_with_focus (struct tui_win_info *); extern bool tui_win_resized (); extern void tui_set_win_resized_to (bool); extern struct tui_win_info *tui_next_win (struct tui_win_info *); extern struct tui_win_info *tui_prev_win (struct tui_win_info *); -/* Delete all the invisible windows. Note that it is an error to call - this when the command window is invisible -- we don't allow the - command window to be removed from the layout. */ -extern void tui_delete_invisible_windows (); - extern unsigned int tui_tab_width; #endif /* TUI_TUI_DATA_H */ diff -Nru gdb-9.1/gdb/tui/tui-disasm.c gdb-10.2/gdb/tui/tui-disasm.c --- gdb-9.1/gdb/tui/tui-disasm.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/tui/tui-disasm.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Disassembly display. - Copyright (C) 1998-2020 Free Software Foundation, Inc. + Copyright (C) 1998-2021 Free Software Foundation, Inc. Contributed by Hewlett-Packard Company. @@ -43,7 +43,7 @@ #include "gdb_curses.h" -struct tui_asm_line +struct tui_asm_line { CORE_ADDR addr; std::string addr_string; @@ -81,25 +81,58 @@ return len; } -/* Function to set the disassembly window's content. - Disassemble count lines starting at pc. - Return address of the count'th instruction after pc. */ +/* Function to disassemble up to COUNT instructions starting from address + PC into the ASM_LINES vector (which will be emptied of any previous + contents). Return the address of the COUNT'th instruction after pc. + When ADDR_SIZE is non-null then place the maximum size of an address and + label into the value pointed to by ADDR_SIZE, and set the addr_size + field on each item in ASM_LINES, otherwise the addr_size fields within + ASM_LINES are undefined. + + It is worth noting that ASM_LINES might not have COUNT entries when this + function returns. If the disassembly is truncated for some other + reason, for example, we hit invalid memory, then ASM_LINES can have + fewer entries than requested. */ static CORE_ADDR tui_disassemble (struct gdbarch *gdbarch, std::vector<tui_asm_line> &asm_lines, - CORE_ADDR pc, int pos, int count, + CORE_ADDR pc, int count, size_t *addr_size = nullptr) { bool term_out = source_styling && gdb_stdout->can_emit_style_escape (); string_file gdb_dis_out (term_out); + /* Must start with an empty list. */ + asm_lines.clear (); + /* Now construct each line. */ for (int i = 0; i < count; ++i) { - print_address (gdbarch, pc, &gdb_dis_out); - asm_lines[pos + i].addr = pc; - asm_lines[pos + i].addr_string = std::move (gdb_dis_out.string ()); + tui_asm_line tal; + CORE_ADDR orig_pc = pc; + try + { + pc = pc + gdb_print_insn (gdbarch, pc, &gdb_dis_out, NULL); + } + catch (const gdb_exception_error &except) + { + /* If PC points to an invalid address then we'll catch a + MEMORY_ERROR here, this should stop the disassembly, but + otherwise is fine. */ + if (except.error != MEMORY_ERROR) + throw; + return pc; + } + + /* Capture the disassembled instruction. */ + tal.insn = std::move (gdb_dis_out.string ()); + gdb_dis_out.clear (); + + /* And capture the address the instruction is at. */ + tal.addr = orig_pc; + print_address (gdbarch, orig_pc, &gdb_dis_out); + tal.addr_string = std::move (gdb_dis_out.string ()); gdb_dis_out.clear (); if (addr_size != nullptr) @@ -107,23 +140,45 @@ size_t new_size; if (term_out) - new_size = len_without_escapes (asm_lines[pos + i].addr_string); + new_size = len_without_escapes (tal.addr_string); else - new_size = asm_lines[pos + i].addr_string.size (); + new_size = tal.addr_string.size (); *addr_size = std::max (*addr_size, new_size); - asm_lines[pos + i].addr_size = new_size; + tal.addr_size = new_size; } - pc = pc + gdb_print_insn (gdbarch, pc, &gdb_dis_out, NULL); - - asm_lines[pos + i].insn = std::move (gdb_dis_out.string ()); - - /* Reset the buffer to empty. */ - gdb_dis_out.clear (); + asm_lines.push_back (std::move (tal)); } return pc; } +/* Look backward from ADDR for an address from which we can start + disassembling, this needs to be something we can be reasonably + confident will fall on an instruction boundary. We use msymbol + addresses, or the start of a section. */ + +static CORE_ADDR +tui_find_backward_disassembly_start_address (CORE_ADDR addr) +{ + struct bound_minimal_symbol msym, msym_prev; + + msym = lookup_minimal_symbol_by_pc_section (addr - 1, nullptr, + lookup_msym_prefer::TEXT, + &msym_prev); + if (msym.minsym != nullptr) + return BMSYMBOL_VALUE_ADDRESS (msym); + else if (msym_prev.minsym != nullptr) + return BMSYMBOL_VALUE_ADDRESS (msym_prev); + + /* Find the section that ADDR is in, and look for the start of the + section. */ + struct obj_section *section = find_pc_section (addr); + if (section != NULL) + return obj_section_addr (section); + + return addr; +} + /* Find the disassembly address that corresponds to FROM lines above or below the PC. Variable sized instructions are taken into account by the algorithm. */ @@ -134,91 +189,149 @@ int max_lines; max_lines = (from > 0) ? from : - from; - if (max_lines <= 1) + if (max_lines == 0) return pc; - std::vector<tui_asm_line> asm_lines (max_lines); + std::vector<tui_asm_line> asm_lines; new_low = pc; if (from > 0) { - tui_disassemble (gdbarch, asm_lines, pc, 0, max_lines); - new_low = asm_lines[max_lines - 1].addr; + /* Always disassemble 1 extra instruction here, then if the last + instruction fails to disassemble we will take the address of the + previous instruction that did disassemble as the result. */ + tui_disassemble (gdbarch, asm_lines, pc, max_lines + 1); + new_low = asm_lines.back ().addr; } else { + /* In order to disassemble backwards we need to find a suitable + address to start disassembling from and then work forward until we + re-find the address we're currently at. We can then figure out + which address will be at the top of the TUI window after our + backward scroll. During our backward disassemble we need to be + able to distinguish between the case where the last address we + _can_ disassemble is ADDR, and the case where the disassembly + just happens to stop at ADDR, for this reason we increase + MAX_LINES by one. */ + max_lines++; + + /* When we disassemble a series of instructions this will hold the + address of the last instruction disassembled. */ CORE_ADDR last_addr; - int pos; - struct bound_minimal_symbol msymbol; - - /* Find backward an address which is a symbol and for which - disassembling from that address will fill completely the - window. */ - pos = max_lines - 1; - do { - new_low -= 1 * max_lines; - msymbol = lookup_minimal_symbol_by_pc_section (new_low, 0); - - if (msymbol.minsym) - new_low = BMSYMBOL_VALUE_ADDRESS (msymbol); - else - new_low += 1 * max_lines; - - tui_disassemble (gdbarch, asm_lines, new_low, 0, max_lines); - last_addr = asm_lines[pos].addr; - } while (last_addr > pc && msymbol.minsym); + + /* And this will hold the address of the next instruction that would + have been disassembled. */ + CORE_ADDR next_addr; + + /* As we search backward if we find an address that looks like a + promising starting point then we record it in this structure. If + the next address we try is not a suitable starting point then we + will fall back to the address held here. */ + gdb::optional<CORE_ADDR> possible_new_low; + + /* The previous value of NEW_LOW so we know if the new value is + different or not. */ + CORE_ADDR prev_low; + + do + { + /* Find an address from which we can start disassembling. */ + prev_low = new_low; + new_low = tui_find_backward_disassembly_start_address (new_low); + + /* Disassemble forward. */ + next_addr = tui_disassemble (gdbarch, asm_lines, new_low, max_lines); + last_addr = asm_lines.back ().addr; + + /* If disassembling from the current value of NEW_LOW reached PC + (or went past it) then this would do as a starting point if we + can't find anything better, so remember it. */ + if (last_addr >= pc && new_low != prev_low + && asm_lines.size () >= max_lines) + possible_new_low.emplace (new_low); + + /* Continue searching until we find a value of NEW_LOW from which + disassembling MAX_LINES instructions doesn't reach PC. We + know this means we can find the required number of previous + instructions then. */ + } + while ((last_addr > pc + || (last_addr == pc && asm_lines.size () < max_lines)) + && new_low != prev_low); + + /* If we failed to disassemble the required number of lines then the + following walk forward is not going to work, it assumes that + ASM_LINES contains exactly MAX_LINES entries. Instead we should + consider falling back to a previous possible start address in + POSSIBLE_NEW_LOW. */ + if (asm_lines.size () < max_lines) + { + if (!possible_new_low.has_value ()) + return new_low; + + /* Take the best possible match we have. */ + new_low = *possible_new_low; + next_addr = tui_disassemble (gdbarch, asm_lines, new_low, max_lines); + last_addr = asm_lines.back ().addr; + gdb_assert (asm_lines.size () >= max_lines); + } /* Scan forward disassembling one instruction at a time until the last visible instruction of the window matches the pc. We keep the disassembled instructions in the 'lines' window and shift it downward (increasing its addresses). */ + int pos = max_lines - 1; if (last_addr < pc) do { - CORE_ADDR next_addr; - pos++; if (pos >= max_lines) pos = 0; - next_addr = tui_disassemble (gdbarch, asm_lines, - last_addr, pos, 1); - + CORE_ADDR old_next_addr = next_addr; + std::vector<tui_asm_line> single_asm_line; + next_addr = tui_disassemble (gdbarch, single_asm_line, + next_addr, 1); /* If there are some problems while disassembling exit. */ - if (next_addr <= last_addr) - break; - last_addr = next_addr; - } while (last_addr <= pc); + if (next_addr <= old_next_addr) + return pc; + gdb_assert (single_asm_line.size () == 1); + asm_lines[pos] = single_asm_line[0]; + } while (next_addr <= pc); pos++; if (pos >= max_lines) pos = 0; new_low = asm_lines[pos].addr; + + /* When scrolling backward the addresses should move backward, or at + the very least stay the same if we are at the first address that + can be disassembled. */ + gdb_assert (new_low <= pc); } return new_low; } /* Function to set the disassembly window's content. */ -enum tui_status +bool tui_disasm_window::set_contents (struct gdbarch *arch, - struct symtab *s, - struct tui_line_or_address line_or_addr) + const struct symtab_and_line &sal) { int i; - int offset = horizontal_offset; + int offset = m_horizontal_offset; int max_lines, line_width; CORE_ADDR cur_pc; struct tui_locator_window *locator = tui_locator_win_info_ptr (); int tab_len = tui_tab_width; int insn_pos; - gdb_assert (line_or_addr.loa == LOA_ADDRESS); - CORE_ADDR pc = line_or_addr.u.addr; + CORE_ADDR pc = sal.pc; if (pc == 0) - return TUI_FAILURE; + return false; - gdbarch = arch; - start_line_or_addr.loa = LOA_ADDRESS; - start_line_or_addr.u.addr = pc; + m_gdbarch = arch; + m_start_line_or_addr.loa = LOA_ADDRESS; + m_start_line_or_addr.u.addr = pc; cur_pc = locator->addr; /* Window size, excluding highlight box. */ @@ -226,110 +339,74 @@ line_width = width - TUI_EXECINFO_SIZE - 2; /* Get temporary table that will hold all strings (addr & insn). */ - std::vector<tui_asm_line> asm_lines (max_lines); + std::vector<tui_asm_line> asm_lines; size_t addr_size = 0; - tui_disassemble (gdbarch, asm_lines, pc, 0, max_lines, &addr_size); + tui_disassemble (m_gdbarch, asm_lines, pc, max_lines, &addr_size); /* Align instructions to the same column. */ insn_pos = (1 + (addr_size / tab_len)) * tab_len; /* Now construct each line. */ - content.resize (max_lines); + m_content.resize (max_lines); for (i = 0; i < max_lines; i++) { - tui_source_element *src = &content[i]; + tui_source_element *src = &m_content[i]; + + std::string line; + CORE_ADDR addr; - std::string line - = (asm_lines[i].addr_string - + n_spaces (insn_pos - asm_lines[i].addr_size) - + asm_lines[i].insn); + if (i < asm_lines.size ()) + { + line + = (asm_lines[i].addr_string + + n_spaces (insn_pos - asm_lines[i].addr_size) + + asm_lines[i].insn); + addr = asm_lines[i].addr; + } + else + { + line = ""; + addr = 0; + } const char *ptr = line.c_str (); src->line = tui_copy_source_line (&ptr, -1, offset, line_width, 0); src->line_or_addr.loa = LOA_ADDRESS; - src->line_or_addr.u.addr = asm_lines[i].addr; - src->is_exec_point = asm_lines[i].addr == cur_pc; + src->line_or_addr.u.addr = addr; + src->is_exec_point = (addr == cur_pc && line.size () > 0); } - return TUI_SUCCESS; -} - - -/* Function to display the disassembly window with disassembled code. */ -void -tui_show_disassem (struct gdbarch *gdbarch, CORE_ADDR start_addr) -{ - struct symtab *s = find_pc_line_symtab (start_addr); - struct tui_win_info *win_with_focus = tui_win_with_focus (); - struct tui_line_or_address val; - - gdb_assert (TUI_DISASM_WIN != nullptr && TUI_DISASM_WIN->is_visible ()); - - val.loa = LOA_ADDRESS; - val.u.addr = start_addr; - TUI_DISASM_WIN->update_source_window (gdbarch, s, val); - - /* If the focus was in the src win, put it in the asm win, if the - source view isn't split. */ - if (tui_current_layout () != SRC_DISASSEM_COMMAND - && win_with_focus == TUI_SRC_WIN) - tui_set_win_focus_to (TUI_DISASM_WIN); + return true; } -/* Function to display the disassembly window. */ -void -tui_show_disassem_and_update_source (struct gdbarch *gdbarch, - CORE_ADDR start_addr) -{ - struct symtab_and_line sal; - - tui_show_disassem (gdbarch, start_addr); - if (tui_current_layout () == SRC_DISASSEM_COMMAND) - { - struct tui_line_or_address val; - - /* Update what is in the source window if it is displayed too, - note that it follows what is in the disassembly window and - visa-versa. */ - sal = find_pc_line (start_addr, 0); - val.loa = LOA_LINE; - val.u.line_no = sal.line; - TUI_SRC_WIN->update_source_window (gdbarch, sal.symtab, val); - if (sal.symtab) - { - set_current_source_symtab_and_line (sal); - tui_update_locator_fullname (symtab_to_fullname (sal.symtab)); - } - else - tui_update_locator_fullname ("?"); - } -} - void tui_get_begin_asm_address (struct gdbarch **gdbarch_p, CORE_ADDR *addr_p) { struct tui_locator_window *locator; struct gdbarch *gdbarch = get_current_arch (); - CORE_ADDR addr; + CORE_ADDR addr = 0; locator = tui_locator_win_info_ptr (); if (locator->addr == 0) { - struct bound_minimal_symbol main_symbol; + if (have_full_symbols () || have_partial_symbols ()) + { + set_default_source_symtab_and_line (); + struct symtab_and_line sal = get_current_source_symtab_and_line (); - /* Find address of the start of program. - Note: this should be language specific. */ - main_symbol = lookup_minimal_symbol ("main", NULL, NULL); - if (main_symbol.minsym == 0) - main_symbol = lookup_minimal_symbol ("MAIN", NULL, NULL); - if (main_symbol.minsym == 0) - main_symbol = lookup_minimal_symbol ("_start", NULL, NULL); - if (main_symbol.minsym) - addr = BMSYMBOL_VALUE_ADDRESS (main_symbol); - else - addr = 0; + if (sal.symtab != nullptr) + find_line_pc (sal.symtab, sal.line, &addr); + } + + if (addr == 0) + { + struct bound_minimal_symbol main_symbol + = lookup_minimal_symbol (main_name (), nullptr, nullptr); + if (main_symbol.minsym != nullptr) + addr = BMSYMBOL_VALUE_ADDRESS (main_symbol); + } } else /* The target is executing. */ { @@ -352,8 +429,8 @@ /* Determine where to start the disassembly so that the pc is about in the middle of the viewport. */ - if (tui_win_list[DISASSEM_WIN] != NULL) - pos = tui_win_list[DISASSEM_WIN]->height; + if (TUI_DISASM_WIN != NULL) + pos = TUI_DISASM_WIN->height; else if (TUI_CMD_WIN == NULL) pos = tui_term_height () / 2 - 2; else @@ -371,74 +448,78 @@ void tui_disasm_window::do_scroll_vertical (int num_to_scroll) { - if (!content.empty ()) + if (!m_content.empty ()) { CORE_ADDR pc; - struct tui_line_or_address val; - pc = content[0].line_or_addr.u.addr; - if (num_to_scroll >= 0) - num_to_scroll++; - else - --num_to_scroll; + pc = m_start_line_or_addr.u.addr; - val.loa = LOA_ADDRESS; - val.u.addr = tui_find_disassembly_address (gdbarch, pc, num_to_scroll); - update_source_window_as_is (gdbarch, NULL, val); + symtab_and_line sal {}; + sal.pspace = current_program_space; + sal.pc = tui_find_disassembly_address (m_gdbarch, pc, num_to_scroll); + update_source_window_as_is (m_gdbarch, sal); } } bool tui_disasm_window::location_matches_p (struct bp_location *loc, int line_no) { - return (content[line_no].line_or_addr.loa == LOA_ADDRESS - && content[line_no].line_or_addr.u.addr == loc->address); + return (m_content[line_no].line_or_addr.loa == LOA_ADDRESS + && m_content[line_no].line_or_addr.u.addr == loc->address); } bool tui_disasm_window::addr_is_displayed (CORE_ADDR addr) const { - bool is_displayed = false; - int threshold = SCROLL_THRESHOLD; + if (m_content.size () < SCROLL_THRESHOLD) + return false; - int i = 0; - while (i < content.size () - threshold && !is_displayed) + for (size_t i = 0; i < m_content.size () - SCROLL_THRESHOLD; ++i) { - is_displayed - = (content[i].line_or_addr.loa == LOA_ADDRESS - && content[i].line_or_addr.u.addr == addr); - i++; + if (m_content[i].line_or_addr.loa == LOA_ADDRESS + && m_content[i].line_or_addr.u.addr == addr) + return true; } - return is_displayed; + return false; } void -tui_disasm_window::maybe_update (struct frame_info *fi, symtab_and_line sal, - int line_no, CORE_ADDR addr) +tui_disasm_window::maybe_update (struct frame_info *fi, symtab_and_line sal) { CORE_ADDR low; - if (find_pc_partial_function (get_frame_pc (fi), - NULL, &low, NULL) == 0) + struct gdbarch *frame_arch = get_frame_arch (fi); + + if (find_pc_partial_function (sal.pc, NULL, &low, NULL) == 0) { /* There is no symbol available for current PC. There is no safe way how to "disassemble backwards". */ - low = get_frame_pc (fi); + low = sal.pc; } else - low = tui_get_low_disassembly_address (get_frame_arch (fi), - low, get_frame_pc (fi)); + low = tui_get_low_disassembly_address (frame_arch, low, sal.pc); struct tui_line_or_address a; a.loa = LOA_ADDRESS; a.u.addr = low; - if (!addr_is_displayed (addr)) - update_source_window (get_frame_arch (fi), sal.symtab, a); + if (!addr_is_displayed (sal.pc)) + { + sal.pc = low; + update_source_window (frame_arch, sal); + } else { - a.u.addr = addr; + a.u.addr = sal.pc; set_is_exec_point_at (a); } } + +void +tui_disasm_window::display_start_addr (struct gdbarch **gdbarch_p, + CORE_ADDR *addr_p) +{ + *gdbarch_p = m_gdbarch; + *addr_p = m_start_line_or_addr.u.addr; +} diff -Nru gdb-9.1/gdb/tui/tui-disasm.h gdb-10.2/gdb/tui/tui-disasm.h --- gdb-9.1/gdb/tui/tui-disasm.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/tui/tui-disasm.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Disassembly display. - Copyright (C) 1998-2020 Free Software Foundation, Inc. + Copyright (C) 1998-2021 Free Software Foundation, Inc. Contributed by Hewlett-Packard Company. @@ -30,10 +30,7 @@ struct tui_disasm_window : public tui_source_window_base { - tui_disasm_window () - : tui_source_window_base (DISASSEM_WIN) - { - } + tui_disasm_window () = default; DISABLE_COPY_AND_ASSIGN (tui_disasm_window); @@ -44,23 +41,22 @@ bool location_matches_p (struct bp_location *loc, int line_no) override; - void maybe_update (struct frame_info *fi, symtab_and_line sal, - int line_no, CORE_ADDR addr) - override; + void maybe_update (struct frame_info *fi, symtab_and_line sal) override; void erase_source_content () override { do_erase_source_content (_("[ No Assembly Available ]")); } + void display_start_addr (struct gdbarch **gdbarch_p, + CORE_ADDR *addr_p) override; + protected: void do_scroll_vertical (int num_to_scroll) override; - enum tui_status set_contents - (struct gdbarch *gdbarch, - struct symtab *s, - struct tui_line_or_address line_or_addr) override; + bool set_contents (struct gdbarch *gdbarch, + const struct symtab_and_line &sal) override; private: /* Answer whether a particular line number or address is displayed @@ -68,8 +64,6 @@ bool addr_is_displayed (CORE_ADDR addr) const; }; -extern void tui_show_disassem (struct gdbarch *, CORE_ADDR); -extern void tui_show_disassem_and_update_source (struct gdbarch *, CORE_ADDR); extern void tui_get_begin_asm_address (struct gdbarch **, CORE_ADDR *); #endif /* TUI_TUI_DISASM_H */ diff -Nru gdb-9.1/gdb/tui/tui-file.c gdb-10.2/gdb/tui/tui-file.c --- gdb-9.1/gdb/tui/tui-file.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/tui/tui-file.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* UI_FILE - a generic STDIO like output stream. - Copyright (C) 1999-2020 Free Software Foundation, Inc. + Copyright (C) 1999-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/tui/tui-file.h gdb-10.2/gdb/tui/tui-file.h --- gdb-9.1/gdb/tui/tui-file.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/tui/tui-file.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* TUI_FILE - a STDIO-like output stream for the TUI. - Copyright (C) 1999-2020 Free Software Foundation, Inc. + Copyright (C) 1999-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/tui/tui.h gdb-10.2/gdb/tui/tui.h --- gdb-9.1/gdb/tui/tui.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/tui/tui.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* External/Public TUI Header File. - Copyright (C) 1998-2020 Free Software Foundation, Inc. + Copyright (C) 1998-2021 Free Software Foundation, Inc. Contributed by Hewlett-Packard Company. @@ -40,21 +40,18 @@ CMD_WIN, /* This must ALWAYS be AFTER the major windows last. */ MAX_MAJOR_WINDOWS, - /* Auxiliary windows. */ - LOCATOR_WIN, - DATA_ITEM_WIN }; extern CORE_ADDR tui_get_low_disassembly_address (struct gdbarch *, CORE_ADDR, CORE_ADDR); extern void tui_show_assembly (struct gdbarch *gdbarch, CORE_ADDR addr); extern bool tui_is_window_visible (enum tui_win_type type); -extern int tui_get_command_dimension (unsigned int *width, - unsigned int *height); +extern bool tui_get_command_dimension (unsigned int *width, + unsigned int *height); -/* Initialize readline and configure the keymap for the switching - key shortcut. */ -extern void tui_initialize_readline (void); +/* Initialize readline and configure the keymap for the switching key + shortcut. May be called more than once without issue. */ +extern void tui_ensure_readline_initialized (); /* Enter in the tui mode (curses). */ extern void tui_enable (void); @@ -81,8 +78,6 @@ keymap. */ extern void tui_set_key_mode (enum tui_key_mode mode); -extern int tui_active; - -extern void tui_show_source (const char *fullname, int line); +extern bool tui_active; #endif /* TUI_TUI_H */ diff -Nru gdb-9.1/gdb/tui/tui-hooks.c gdb-10.2/gdb/tui/tui-hooks.c --- gdb-9.1/gdb/tui/tui-hooks.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/tui/tui-hooks.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* GDB hooks for TUI. - Copyright (C) 2001-2020 Free Software Foundation, Inc. + Copyright (C) 2001-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -26,7 +26,7 @@ #include "objfiles.h" #include "target.h" #include "gdbcore.h" -#include "event-loop.h" +#include "gdbsupport/event-loop.h" #include "event-top.h" #include "frame.h" #include "breakpoint.h" @@ -57,7 +57,7 @@ } /* Prevent recursion of deprecated_register_changed_hook(). */ -static int tui_refreshing_registers = 0; +static bool tui_refreshing_registers = false; /* Observer for the register_changed notification. */ @@ -75,11 +75,11 @@ up in the other. So we always use the selected frame here, and ignore FRAME. */ fi = get_selected_frame (NULL); - if (tui_refreshing_registers == 0) + if (!tui_refreshing_registers) { - tui_refreshing_registers = 1; + tui_refreshing_registers = true; TUI_DATA_WIN->check_register_values (fi); - tui_refreshing_registers = 0; + tui_refreshing_registers = false; } } @@ -105,53 +105,52 @@ tui_update_all_breakpoint_info (nullptr); } -/* Refresh TUI's frame and register information. This is a hook intended to be - used to update the screen after potential frame and register changes. +/* This is set to true if the next window refresh should come from the + current stack frame. */ + +static bool from_stack; + +/* This is set to true if the next window refresh should come from the + current source symtab. */ - REGISTERS_TOO_P controls whether to refresh our register information even - if frame information hasn't changed. */ +static bool from_source_symtab; + +/* Refresh TUI's frame and register information. This is a hook intended to be + used to update the screen after potential frame and register changes. */ static void -tui_refresh_frame_and_register_information (int registers_too_p) +tui_refresh_frame_and_register_information () { - struct frame_info *fi; - CORE_ADDR pc; - int frame_info_changed_p; - - if (!has_stack_frames ()) + if (!from_stack && !from_source_symtab) return; target_terminal::scoped_restore_terminal_state term_state; target_terminal::ours_for_output (); - fi = get_selected_frame (NULL); - /* Ensure that symbols for this frame are read in. Also, determine - the source language of this frame, and switch to it if - desired. */ - if (get_frame_pc_if_available (fi, &pc)) + if (from_stack && has_stack_frames ()) { - struct symtab *s; + struct frame_info *fi = get_selected_frame (NULL); - s = find_pc_line_symtab (pc); - /* elz: This if here fixes the problem with the pc not being - displayed in the tui asm layout, with no debug symbols. The - value of s would be 0 here, and select_source_symtab would - abort the command by calling the 'error' function. */ - if (s) - select_source_symtab (s); + /* Display the frame position (even if there is no symbols or + the PC is not known). */ + bool frame_info_changed_p = tui_show_frame_info (fi); + + /* Refresh the register window if it's visible. */ + if (tui_is_window_visible (DATA_WIN) + && (frame_info_changed_p || from_stack)) + { + tui_refreshing_registers = true; + TUI_DATA_WIN->check_register_values (fi); + tui_refreshing_registers = false; + } } - - /* Display the frame position (even if there is no symbols or the PC - is not known). */ - frame_info_changed_p = tui_show_frame_info (fi); - - /* Refresh the register window if it's visible. */ - if (tui_is_window_visible (DATA_WIN) - && (frame_info_changed_p || registers_too_p)) + else if (!from_stack) { - tui_refreshing_registers = 1; - TUI_DATA_WIN->check_register_values (fi); - tui_refreshing_registers = 0; + /* Make sure that the source window is displayed. */ + tui_add_win_to_layout (SRC_WIN); + + struct symtab_and_line sal = get_current_source_symtab_and_line (); + tui_update_source_windows_with_line (sal); } } @@ -183,12 +182,9 @@ static void tui_before_prompt (const char *current_gdb_prompt) { - /* This refresh is intended to catch changes to the selected frame following - a call to "up", "down" or "frame". As such we don't necessarily want to - refresh registers here unless the frame actually changed by one of these - commands. Registers will otherwise be refreshed after a normal stop or by - our tui_register_changed_hook. */ - tui_refresh_frame_and_register_information (/*registers_too_p=*/0); + tui_refresh_frame_and_register_information (); + from_stack = false; + from_source_symtab = false; } /* Observer for the normal_stop notification. */ @@ -196,9 +192,23 @@ static void tui_normal_stop (struct bpstats *bs, int print_frame) { - /* This refresh is intended to catch changes to the selected frame and to - registers following a normal stop. */ - tui_refresh_frame_and_register_information (/*registers_too_p=*/1); + from_stack = true; +} + +/* Observer for user_selected_context_changed. */ + +static void +tui_context_changed (user_selected_what ignore) +{ + from_stack = true; +} + +/* Observer for current_source_symtab_and_line_changed. */ + +static void +tui_symtab_changed () +{ + from_source_symtab = true; } /* Token associated with observers registered while TUI hooks are @@ -236,6 +246,10 @@ tui_normal_stop, attach); attach_or_detach (gdb::observers::register_changed, tui_register_changed, attach); + attach_or_detach (gdb::observers::user_selected_context_changed, + tui_context_changed, attach); + attach_or_detach (gdb::observers::current_source_symtab_and_line_changed, + tui_symtab_changed, attach); } /* Install the TUI specific hooks. */ @@ -263,8 +277,9 @@ tui_attach_detach_observers (false); } +void _initialize_tui_hooks (); void -_initialize_tui_hooks (void) +_initialize_tui_hooks () { /* Install the permanent hooks. */ gdb::observers::new_objfile.attach (tui_new_objfile_hook); diff -Nru gdb-9.1/gdb/tui/tui-hooks.h gdb-10.2/gdb/tui/tui-hooks.h --- gdb-9.1/gdb/tui/tui-hooks.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/tui/tui-hooks.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* External/Public TUI hools header file, for GDB the GNU debugger. - Copyright (C) 2004-2020 Free Software Foundation, Inc. + Copyright (C) 2004-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/tui/tui-interp.c gdb-10.2/gdb/tui/tui-interp.c --- gdb-9.1/gdb/tui/tui-interp.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/tui/tui-interp.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* TUI Interpreter definitions for GDB, the GNU debugger. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -22,7 +22,7 @@ #include "interps.h" #include "top.h" #include "event-top.h" -#include "event-loop.h" +#include "gdbsupport/event-loop.h" #include "ui-out.h" #include "cli-out.h" #include "tui/tui-data.h" @@ -35,9 +35,9 @@ #include "inferior.h" #include "main.h" -/* Set to 1 when the TUI mode must be activated when we first start +/* Set to true when the TUI mode must be activated when we first start gdb. */ -static int tui_start_enabled = 0; +static bool tui_start_enabled = false; class tui_interp final : public cli_interp_base { @@ -243,8 +243,8 @@ tui_initialize_io (); tui_initialize_win (); - if (ui_file_isatty (gdb_stdout)) - tui_initialize_readline (); + if (gdb_stdout->isatty ()) + tui_ensure_readline_initialized (); } void @@ -306,13 +306,14 @@ return new tui_interp (name); } +void _initialize_tui_interp (); void -_initialize_tui_interp (void) +_initialize_tui_interp () { interp_factory_register (INTERP_TUI, tui_interp_factory); if (interpreter_p && strcmp (interpreter_p, INTERP_TUI) == 0) - tui_start_enabled = 1; + tui_start_enabled = true; if (interpreter_p && strcmp (interpreter_p, INTERP_CONSOLE) == 0) { diff -Nru gdb-9.1/gdb/tui/tui-io.c gdb-10.2/gdb/tui/tui-io.c --- gdb-9.1/gdb/tui/tui-io.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/tui/tui-io.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* TUI support I/O functions. - Copyright (C) 1998-2020 Free Software Foundation, Inc. + Copyright (C) 1998-2021 Free Software Foundation, Inc. Contributed by Hewlett-Packard Company. @@ -21,7 +21,7 @@ #include "defs.h" #include "target.h" -#include "event-loop.h" +#include "gdbsupport/event-loop.h" #include "event-top.h" #include "command.h" #include "top.h" @@ -131,10 +131,6 @@ static int tui_readline_pipe[2]; #endif -/* The last gdb prompt that was registered in readline. - This may be the main gdb prompt or a secondary prompt. */ -static char *tui_rl_saved_prompt; - /* Print a character in the curses command window. The output is buffered. It is up to the caller to refresh the screen if necessary. */ @@ -142,35 +138,21 @@ static void do_tui_putc (WINDOW *w, char c) { - static int tui_skip_line = -1; - - /* Catch annotation and discard them. We need two \032 and discard - until a \n is seen. */ - if (c == '\032') + /* Expand TABs, since ncurses on MS-Windows doesn't. */ + if (c == '\t') { - tui_skip_line++; - } - else if (tui_skip_line != 1) - { - tui_skip_line = -1; - /* Expand TABs, since ncurses on MS-Windows doesn't. */ - if (c == '\t') - { - int col; + int col; - col = getcurx (w); - do - { - waddch (w, ' '); - col++; - } - while ((col % 8) != 0); + col = getcurx (w); + do + { + waddch (w, ' '); + col++; } - else - waddch (w, c); + while ((col % 8) != 0); } - else if (c == '\n') - tui_skip_line = -1; + else + waddch (w, c); } /* Update the cached value of the command window's start line based on @@ -538,7 +520,7 @@ if (tui_current_key_mode == TUI_SINGLE_KEY_MODE) prompt = ""; else - prompt = tui_rl_saved_prompt; + prompt = rl_display_prompt; c_pos = -1; c_line = -1; @@ -606,11 +588,6 @@ static void tui_prep_terminal (int notused1) { - /* Save the prompt registered in readline to correctly display it. - (we can't use gdb_prompt() due to secondary prompts and can't use - rl_prompt because it points to an alloca buffer). */ - xfree (tui_rl_saved_prompt); - tui_rl_saved_prompt = rl_prompt != NULL ? xstrdup (rl_prompt) : NULL; } /* Readline callback to restore the terminal. It is called once each @@ -769,6 +746,10 @@ if (mode) { + /* Ensure that readline has been initialized before saving any + of its variables. */ + tui_ensure_readline_initialized (); + /* Redirect readline to TUI. */ tui_old_rl_redisplay_function = rl_redisplay_function; tui_old_rl_deprep_terminal = rl_deprep_term_function; @@ -959,10 +940,12 @@ return 0; } -/* Get a character from the command window. This is called from the - readline package. */ +/* Main worker for tui_getc. Get a character from the command window. + This is called from the readline package, but wrapped in a + try/catch by tui_getc. */ + static int -tui_getc (FILE *fp) +tui_getc_1 (FILE *fp) { int ch; WINDOW *w; @@ -1045,54 +1028,25 @@ return ch; } -/* See tui-io.h. */ +/* Get a character from the command window. This is called from the + readline package. */ -gdb::unique_xmalloc_ptr<char> -tui_expand_tabs (const char *string) +static int +tui_getc (FILE *fp) { - int n_adjust, ncol; - const char *s; - char *ret, *q; - - /* 1. How many additional characters do we need? */ - for (ncol = 0, n_adjust = 0, s = string; s; ) + try { - s = strpbrk (s, "\t"); - if (s) - { - ncol += (s - string) + n_adjust; - /* Adjustment for the next tab stop, minus one for the TAB - we replace with spaces. */ - n_adjust += 8 - (ncol % 8) - 1; - s++; - } + return tui_getc_1 (fp); } - - /* Allocate the copy. */ - ret = q = (char *) xmalloc (strlen (string) + n_adjust + 1); - - /* 2. Copy the original string while replacing TABs with spaces. */ - for (ncol = 0, s = string; s; ) + catch (const gdb_exception &ex) { - const char *s1 = strpbrk (s, "\t"); - if (s1) - { - if (s1 > s) - { - strncpy (q, s, s1 - s); - q += s1 - s; - ncol += s1 - s; - } - do { - *q++ = ' '; - ncol++; - } while ((ncol % 8) != 0); - s1++; - } - else - strcpy (q, s); - s = s1; + /* Just in case, don't ever let an exception escape to readline. + This shouldn't ever happen, but if it does, print the + exception instead of just crashing GDB. */ + exception_print (gdb_stderr, ex); + + /* If we threw an exception, it's because we recognized the + character. */ + return 0; } - - return gdb::unique_xmalloc_ptr<char> (ret); } diff -Nru gdb-9.1/gdb/tui/tui-io.h gdb-10.2/gdb/tui/tui-io.h --- gdb-9.1/gdb/tui/tui-io.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/tui/tui-io.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* TUI support I/O functions. - Copyright (C) 1998-2020 Free Software Foundation, Inc. + Copyright (C) 1998-2021 Free Software Foundation, Inc. Contributed by Hewlett-Packard Company. @@ -45,9 +45,6 @@ changed the edited text. */ extern void tui_redisplay_readline (void); -/* Expand TABs into spaces. */ -extern gdb::unique_xmalloc_ptr<char> tui_expand_tabs (const char *); - /* Enter/leave reverse video mode. */ extern void tui_set_reverse_mode (WINDOW *w, bool reverse); diff -Nru gdb-9.1/gdb/tui/tui-layout.c gdb-10.2/gdb/tui/tui-layout.c --- gdb-9.1/gdb/tui/tui-layout.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/tui/tui-layout.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* TUI layout window management. - Copyright (C) 1998-2020 Free Software Foundation, Inc. + Copyright (C) 1998-2021 Free Software Foundation, Inc. Contributed by Hewlett-Packard Company. @@ -25,7 +25,12 @@ #include "symtab.h" #include "frame.h" #include "source.h" +#include "cli/cli-cmds.h" +#include "cli/cli-decode.h" +#include "cli/cli-utils.h" #include <ctype.h> +#include <unordered_map> +#include <unordered_set> #include "tui/tui.h" #include "tui/tui-command.h" @@ -40,452 +45,266 @@ #include "tui/tui-source.h" #include "gdb_curses.h" -static void show_layout (enum tui_layout_type); -static void show_source_or_disasm_and_command (enum tui_layout_type); -static void show_source_command (void); -static void show_disasm_command (void); -static void show_source_disasm_command (void); -static void show_data (enum tui_layout_type); -static enum tui_layout_type next_layout (void); -static enum tui_layout_type prev_layout (void); -static void tui_layout_command (const char *, int); static void extract_display_start_addr (struct gdbarch **, CORE_ADDR *); +/* The layouts. */ +static std::vector<std::unique_ptr<tui_layout_split>> layouts; -static enum tui_layout_type current_layout = UNDEFINED_LAYOUT; +/* The layout that is currently applied. */ +static std::unique_ptr<tui_layout_base> applied_layout; -/* Accessor for the current layout. */ -enum tui_layout_type -tui_current_layout (void) -{ - return current_layout; -} +/* The "skeleton" version of the layout that is currently applied. */ +static tui_layout_split *applied_skeleton; +/* The two special "regs" layouts. Note that these aren't registered + as commands and so can never be deleted. */ +static tui_layout_split *src_regs_layout; +static tui_layout_split *asm_regs_layout; -/* Show the screen layout defined. */ -static void -show_layout (enum tui_layout_type layout) -{ - enum tui_layout_type cur_layout = tui_current_layout (); +/* See tui-data.h. */ +std::vector<tui_win_info *> tui_windows; - if (layout != cur_layout) - { - tui_make_all_invisible (); - switch (layout) - { - case SRC_DATA_COMMAND: - case DISASSEM_DATA_COMMAND: - show_data (layout); - break; - /* Now show the new layout. */ - case SRC_COMMAND: - show_source_command (); - break; - case DISASSEM_COMMAND: - show_disasm_command (); - break; - case SRC_DISASSEM_COMMAND: - show_source_disasm_command (); - break; - default: - break; - } +/* When applying a layout, this is the list of all windows that were + in the previous layout. This is used to re-use windows when + changing a layout. */ +static std::vector<tui_win_info *> saved_tui_windows; - current_layout = layout; - tui_delete_invisible_windows (); - } -} +/* See tui-layout.h. */ - -/* Function to set the layout to SRC_COMMAND, DISASSEM_COMMAND, - SRC_DISASSEM_COMMAND, SRC_DATA_COMMAND, or DISASSEM_DATA_COMMAND. */ void -tui_set_layout (enum tui_layout_type layout_type) +tui_apply_current_layout () { - gdb_assert (layout_type != UNDEFINED_LAYOUT); - - enum tui_layout_type cur_layout = tui_current_layout (); struct gdbarch *gdbarch; CORE_ADDR addr; - struct tui_win_info *win_with_focus = tui_win_with_focus (); extract_display_start_addr (&gdbarch, &addr); - enum tui_layout_type new_layout = layout_type; + saved_tui_windows = std::move (tui_windows); + tui_windows.clear (); - if (new_layout != cur_layout) - { - show_layout (new_layout); + for (tui_win_info *win_info : saved_tui_windows) + win_info->make_visible (false); - /* Now determine where focus should be. */ - if (win_with_focus != TUI_CMD_WIN) - { - switch (new_layout) - { - case SRC_COMMAND: - tui_set_win_focus_to (TUI_SRC_WIN); - break; - case DISASSEM_COMMAND: - /* The previous layout was not showing code. - This can happen if there is no source - available: - - 1. if the source file is in another dir OR - 2. if target was compiled without -g - We still want to show the assembly though! */ - - tui_get_begin_asm_address (&gdbarch, &addr); - tui_set_win_focus_to (TUI_DISASM_WIN); - break; - case SRC_DISASSEM_COMMAND: - /* The previous layout was not showing code. - This can happen if there is no source - available: - - 1. if the source file is in another dir OR - 2. if target was compiled without -g - We still want to show the assembly though! */ - - tui_get_begin_asm_address (&gdbarch, &addr); - if (win_with_focus == TUI_SRC_WIN) - tui_set_win_focus_to (TUI_SRC_WIN); - else - tui_set_win_focus_to (TUI_DISASM_WIN); - break; - case SRC_DATA_COMMAND: - if (win_with_focus != TUI_DATA_WIN) - tui_set_win_focus_to (TUI_SRC_WIN); - else - tui_set_win_focus_to (TUI_DATA_WIN); - break; - case DISASSEM_DATA_COMMAND: - /* The previous layout was not showing code. - This can happen if there is no source - available: - - 1. if the source file is in another dir OR - 2. if target was compiled without -g - We still want to show the assembly though! */ - - tui_get_begin_asm_address (&gdbarch, &addr); - if (win_with_focus != TUI_DATA_WIN) - tui_set_win_focus_to (TUI_DISASM_WIN); - else - tui_set_win_focus_to (TUI_DATA_WIN); - break; - default: - break; - } - } - /* - * Now update the window content. - */ - tui_update_source_windows_with_addr (gdbarch, addr); - if (new_layout == SRC_DATA_COMMAND - || new_layout == DISASSEM_DATA_COMMAND) - TUI_DATA_WIN->show_registers (TUI_DATA_WIN->get_current_group ()); - } -} - -/* Add the specified window to the layout in a logical way. This - means setting up the most logical layout given the window to be - added. */ -void -tui_add_win_to_layout (enum tui_win_type type) -{ - enum tui_layout_type cur_layout = tui_current_layout (); + applied_layout->apply (0, 0, tui_term_width (), tui_term_height ()); - switch (type) + /* Keep the list of internal windows up-to-date. */ + for (int win_type = SRC_WIN; (win_type < MAX_MAJOR_WINDOWS); win_type++) + if (tui_win_list[win_type] != nullptr + && !tui_win_list[win_type]->is_visible ()) + tui_win_list[win_type] = nullptr; + + /* This should always be made visible by a layout. */ + gdb_assert (TUI_CMD_WIN->is_visible ()); + + /* Now delete any window that was not re-applied. */ + tui_win_info *focus = tui_win_with_focus (); + tui_win_info *locator = tui_locator_win_info_ptr (); + for (tui_win_info *win_info : saved_tui_windows) { - case SRC_WIN: - if (cur_layout != SRC_COMMAND - && cur_layout != SRC_DISASSEM_COMMAND - && cur_layout != SRC_DATA_COMMAND) + if (!win_info->is_visible ()) { - if (cur_layout == DISASSEM_DATA_COMMAND) - show_layout (SRC_DATA_COMMAND); - else - show_layout (SRC_COMMAND); + if (focus == win_info) + tui_set_win_focus_to (tui_windows[0]); + if (win_info != locator) + delete win_info; } - break; - case DISASSEM_WIN: - if (cur_layout != DISASSEM_COMMAND - && cur_layout != SRC_DISASSEM_COMMAND - && cur_layout != DISASSEM_DATA_COMMAND) - { - if (cur_layout == SRC_DATA_COMMAND) - show_layout (DISASSEM_DATA_COMMAND); - else - show_layout (DISASSEM_COMMAND); - } - break; - case DATA_WIN: - if (cur_layout != SRC_DATA_COMMAND - && cur_layout != DISASSEM_DATA_COMMAND) - { - if (cur_layout == DISASSEM_COMMAND) - show_layout (DISASSEM_DATA_COMMAND); - else - show_layout (SRC_DATA_COMMAND); - } - break; - default: - break; } + + if (gdbarch == nullptr && TUI_DISASM_WIN != nullptr) + tui_get_begin_asm_address (&gdbarch, &addr); + tui_update_source_windows_with_addr (gdbarch, addr); + + saved_tui_windows.clear (); } -/* Complete possible layout names. TEXT is the complete text entered so - far, WORD is the word currently being completed. */ +/* See tui-layout. */ -static void -layout_completer (struct cmd_list_element *ignore, - completion_tracker &tracker, - const char *text, const char *word) +void +tui_adjust_window_height (struct tui_win_info *win, int new_height) { - static const char *layout_names [] = - { "src", "asm", "split", "regs", "next", "prev", NULL }; - - complete_on_enum (tracker, layout_names, text, word); + applied_layout->adjust_size (win->name (), new_height); } -/* Function to set the layout to SRC, ASM, SPLIT, NEXT, PREV, DATA, or - REGS. */ +/* Set the current layout to LAYOUT. */ + static void -tui_layout_command (const char *layout_name, int from_tty) +tui_set_layout (tui_layout_split *layout) { - enum tui_layout_type new_layout = UNDEFINED_LAYOUT; - enum tui_layout_type cur_layout = tui_current_layout (); - - if (layout_name == NULL || *layout_name == '\0') - error (_("Usage: layout prev | next | LAYOUT-NAME")); - - /* First check for ambiguous input. */ - if (strcmp (layout_name, "s") == 0) - error (_("Ambiguous command input.")); - - if (subset_compare (layout_name, "src")) - new_layout = SRC_COMMAND; - else if (subset_compare (layout_name, "asm")) - new_layout = DISASSEM_COMMAND; - else if (subset_compare (layout_name, "split")) - new_layout = SRC_DISASSEM_COMMAND; - else if (subset_compare (layout_name, "regs")) - { - if (cur_layout == SRC_COMMAND - || cur_layout == SRC_DATA_COMMAND) - new_layout = SRC_DATA_COMMAND; - else - new_layout = DISASSEM_DATA_COMMAND; - } - else if (subset_compare (layout_name, "next")) - new_layout = next_layout (); - else if (subset_compare (layout_name, "prev")) - new_layout = prev_layout (); - else - error (_("Unrecognized layout: %s"), layout_name); - - /* Make sure the curses mode is enabled. */ - tui_enable (); - tui_set_layout (new_layout); + applied_skeleton = layout; + applied_layout = layout->clone (); + tui_apply_current_layout (); } +/* See tui-layout.h. */ -static void -extract_display_start_addr (struct gdbarch **gdbarch_p, CORE_ADDR *addr_p) +void +tui_add_win_to_layout (enum tui_win_type type) { - enum tui_layout_type cur_layout = tui_current_layout (); - struct gdbarch *gdbarch = get_current_arch (); - CORE_ADDR addr; - CORE_ADDR pc; - struct symtab_and_line cursal = get_current_source_symtab_and_line (); + gdb_assert (type == SRC_WIN || type == DISASSEM_WIN); - switch (cur_layout) - { - case SRC_COMMAND: - case SRC_DATA_COMMAND: - gdbarch = TUI_SRC_WIN->gdbarch; - find_line_pc (cursal.symtab, - TUI_SRC_WIN->start_line_or_addr.u.line_no, - &pc); - addr = pc; - break; - case DISASSEM_COMMAND: - case SRC_DISASSEM_COMMAND: - case DISASSEM_DATA_COMMAND: - gdbarch = TUI_DISASM_WIN->gdbarch; - addr = TUI_DISASM_WIN->start_line_or_addr.u.addr; - break; - default: - addr = 0; - break; - } - - *gdbarch_p = gdbarch; - *addr_p = addr; + /* If the window already exists, no need to add it. */ + if (tui_win_list[type] != nullptr) + return; + + /* If the window we are trying to replace doesn't exist, we're + done. */ + enum tui_win_type other = type == SRC_WIN ? DISASSEM_WIN : SRC_WIN; + if (tui_win_list[other] == nullptr) + return; + + const char *name = type == SRC_WIN ? SRC_NAME : DISASSEM_NAME; + applied_layout->replace_window (tui_win_list[other]->name (), name); + tui_apply_current_layout (); } +/* Find LAYOUT in the "layouts" global and return its index. */ -/* Answer the previous layout to cycle to. */ -static enum tui_layout_type -next_layout (void) -{ - int new_layout; - - new_layout = tui_current_layout (); - if (new_layout == UNDEFINED_LAYOUT) - new_layout = SRC_COMMAND; - else +static size_t +find_layout (tui_layout_split *layout) +{ + for (size_t i = 0; i < layouts.size (); ++i) { - new_layout++; - if (new_layout == UNDEFINED_LAYOUT) - new_layout = SRC_COMMAND; + if (layout == layouts[i].get ()) + return i; } - - return (enum tui_layout_type) new_layout; + gdb_assert_not_reached (_("layout not found!?")); } +/* Function to set the layout. */ -/* Answer the next layout to cycle to. */ -static enum tui_layout_type -prev_layout (void) +static void +tui_apply_layout (struct cmd_list_element *command, + const char *args, int from_tty) { - int new_layout; + tui_layout_split *layout + = (tui_layout_split *) get_cmd_context (command); - new_layout = tui_current_layout (); - if (new_layout == SRC_COMMAND) - new_layout = DISASSEM_DATA_COMMAND; - else - { - new_layout--; - if (new_layout == UNDEFINED_LAYOUT) - new_layout = DISASSEM_DATA_COMMAND; - } + /* Make sure the curses mode is enabled. */ + tui_enable (); + tui_set_layout (layout); +} - return (enum tui_layout_type) new_layout; +/* See tui-layout.h. */ + +void +tui_next_layout () +{ + size_t index = find_layout (applied_skeleton); + ++index; + if (index == layouts.size ()) + index = 0; + tui_set_layout (layouts[index].get ()); } -/* Show the Source/Command layout. */ +/* Implement the "layout next" command. */ + static void -show_source_command (void) +tui_next_layout_command (const char *arg, int from_tty) { - show_source_or_disasm_and_command (SRC_COMMAND); + tui_enable (); + tui_next_layout (); } +/* See tui-layout.h. */ -/* Show the Dissassem/Command layout. */ -static void -show_disasm_command (void) +void +tui_set_initial_layout () { - show_source_or_disasm_and_command (DISASSEM_COMMAND); + tui_set_layout (layouts[0].get ()); } +/* Implement the "layout prev" command. */ -/* Show the Source/Disassem/Command layout. */ static void -show_source_disasm_command (void) +tui_prev_layout_command (const char *arg, int from_tty) { - int cmd_height, src_height, asm_height; + tui_enable (); + size_t index = find_layout (applied_skeleton); + if (index == 0) + index = layouts.size (); + --index; + tui_set_layout (layouts[index].get ()); +} - if (TUI_CMD_WIN != NULL) - cmd_height = TUI_CMD_WIN->height; - else - cmd_height = tui_term_height () / 3; - src_height = (tui_term_height () - cmd_height) / 2; - asm_height = tui_term_height () - (src_height + cmd_height); +/* See tui-layout.h. */ + +void +tui_regs_layout () +{ + /* If there's already a register window, we're done. */ + if (TUI_DATA_WIN != nullptr) + return; - if (TUI_SRC_WIN == NULL) - tui_win_list[SRC_WIN] = new tui_source_window (); - TUI_SRC_WIN->resize (src_height, - tui_term_width (), - 0, - 0); - - struct tui_locator_window *locator = tui_locator_win_info_ptr (); - gdb_assert (locator != nullptr); - - if (TUI_DISASM_WIN == NULL) - tui_win_list[DISASSEM_WIN] = new tui_disasm_window (); - TUI_DISASM_WIN->resize (asm_height, - tui_term_width (), - 0, - src_height - 1); - locator->resize (1, tui_term_width (), - 0, (src_height + asm_height) - 1); - - if (TUI_CMD_WIN == NULL) - tui_win_list[CMD_WIN] = new tui_cmd_window (); - TUI_CMD_WIN->resize (cmd_height, - tui_term_width (), - 0, - tui_term_height () - cmd_height); + tui_set_layout (TUI_DISASM_WIN != nullptr + ? asm_regs_layout + : src_regs_layout); } +/* Implement the "layout regs" command. */ -/* Show the Source/Data/Command or the Dissassembly/Data/Command - layout. */ static void -show_data (enum tui_layout_type new_layout) +tui_regs_layout_command (const char *arg, int from_tty) { - int total_height = (tui_term_height () - TUI_CMD_WIN->height); - int src_height, data_height; - enum tui_win_type win_type; - - struct tui_locator_window *locator = tui_locator_win_info_ptr (); - gdb_assert (locator != nullptr); - - data_height = total_height / 2; - src_height = total_height - data_height; - if (tui_win_list[DATA_WIN] == nullptr) - tui_win_list[DATA_WIN] = new tui_data_window (); - tui_win_list[DATA_WIN]->resize (data_height, tui_term_width (), 0, 0); + tui_enable (); + tui_regs_layout (); +} - if (new_layout == SRC_DATA_COMMAND) - win_type = SRC_WIN; - else - win_type = DISASSEM_WIN; +/* See tui-layout.h. */ - if (tui_win_list[win_type] == NULL) +void +tui_remove_some_windows () +{ + tui_win_info *focus = tui_win_with_focus (); + + if (strcmp (focus->name (), CMD_NAME) == 0) { - if (win_type == SRC_WIN) - tui_win_list[win_type] = new tui_source_window (); - else - tui_win_list[win_type] = new tui_disasm_window (); + /* Try leaving the source or disassembly window. If neither + exists, just do nothing. */ + focus = TUI_SRC_WIN; + if (focus == nullptr) + focus = TUI_DISASM_WIN; + if (focus == nullptr) + return; } - tui_win_list[win_type]->resize (src_height, - tui_term_width (), - 0, - data_height - 1); - locator->resize (1, tui_term_width (), - 0, total_height - 1); - TUI_CMD_WIN->resize (TUI_CMD_WIN->height, tui_term_width (), - 0, total_height); + applied_layout->remove_windows (focus->name ()); + tui_apply_current_layout (); +} + +static void +extract_display_start_addr (struct gdbarch **gdbarch_p, CORE_ADDR *addr_p) +{ + if (TUI_SRC_WIN != nullptr) + TUI_SRC_WIN->display_start_addr (gdbarch_p, addr_p); + else if (TUI_DISASM_WIN != nullptr) + TUI_DISASM_WIN->display_start_addr (gdbarch_p, addr_p); + else + { + *gdbarch_p = nullptr; + *addr_p = 0; + } } void -tui_gen_win_info::resize (int height_, int width_, - int origin_x_, int origin_y_) +tui_win_info::resize (int height_, int width_, + int origin_x_, int origin_y_) { if (width == width_ && height == height_ - && origin.x == origin_x_ && origin.y == origin_y_ + && x == origin_x_ && y == origin_y_ && handle != nullptr) return; width = width_; height = height_; - if (height > 1) - viewport_height = height - 2; - else - viewport_height = 1; - origin.x = origin_x_; - origin.y = origin_y_; + x = origin_x_; + y = origin_y_; if (handle != nullptr) { #ifdef HAVE_WRESIZE wresize (handle.get (), height, width); - mvwin (handle.get (), origin.y, origin.x); + mvwin (handle.get (), y, x); wmove (handle.get (), 0, 0); #else handle.reset (nullptr); @@ -498,71 +317,748 @@ rerender (); } -/* Show the Source/Command or the Disassem layout. */ + + +/* Helper function to create one of the built-in (non-locator) + windows. */ + +template<enum tui_win_type V, class T> +static tui_win_info * +make_standard_window (const char *) +{ + if (tui_win_list[V] == nullptr) + tui_win_list[V] = new T (); + return tui_win_list[V]; +} + +/* Helper function to wrap tui_locator_win_info_ptr for + tui_get_window_by_name. */ + +static tui_win_info * +get_locator_window (const char *) +{ + return tui_locator_win_info_ptr (); +} + +/* A map holding all the known window types, keyed by name. Note that + this is heap-allocated and "leaked" at gdb exit. This avoids + ordering issues with destroying elements in the map at shutdown. + In particular, destroying this map can occur after Python has been + shut down, causing crashes if any window destruction requires + running Python code. */ + +static std::unordered_map<std::string, window_factory> *known_window_types; + +/* Helper function that returns a TUI window, given its name. */ + +static tui_win_info * +tui_get_window_by_name (const std::string &name) +{ + for (tui_win_info *window : saved_tui_windows) + if (name == window->name ()) + return window; + + auto iter = known_window_types->find (name); + if (iter == known_window_types->end ()) + error (_("Unknown window type \"%s\""), name.c_str ()); + + tui_win_info *result = iter->second (name.c_str ()); + if (result == nullptr) + error (_("Could not create window \"%s\""), name.c_str ()); + return result; +} + +/* Initialize the known window types. */ + static void -show_source_or_disasm_and_command (enum tui_layout_type layout_type) +initialize_known_windows () +{ + known_window_types = new std::unordered_map<std::string, window_factory>; + + known_window_types->emplace (SRC_NAME, + make_standard_window<SRC_WIN, + tui_source_window>); + known_window_types->emplace (CMD_NAME, + make_standard_window<CMD_WIN, tui_cmd_window>); + known_window_types->emplace (DATA_NAME, + make_standard_window<DATA_WIN, + tui_data_window>); + known_window_types->emplace (DISASSEM_NAME, + make_standard_window<DISASSEM_WIN, + tui_disasm_window>); + known_window_types->emplace (STATUS_NAME, get_locator_window); +} + +/* See tui-layout.h. */ + +void +tui_register_window (const char *name, window_factory &&factory) { - struct tui_source_window_base *win_info; - int src_height, cmd_height; - struct tui_locator_window *locator = tui_locator_win_info_ptr (); - gdb_assert (locator != nullptr); + std::string name_copy = name; - if (TUI_CMD_WIN != NULL) - cmd_height = TUI_CMD_WIN->height; + if (name_copy == SRC_NAME || name_copy == CMD_NAME || name_copy == DATA_NAME + || name_copy == DISASSEM_NAME || name_copy == STATUS_NAME) + error (_("Window type \"%s\" is built-in"), name); + + known_window_types->emplace (std::move (name_copy), + std::move (factory)); +} + +/* See tui-layout.h. */ + +std::unique_ptr<tui_layout_base> +tui_layout_window::clone () const +{ + tui_layout_window *result = new tui_layout_window (m_contents.c_str ()); + return std::unique_ptr<tui_layout_base> (result); +} + +/* See tui-layout.h. */ + +void +tui_layout_window::apply (int x_, int y_, int width_, int height_) +{ + x = x_; + y = y_; + width = width_; + height = height_; + gdb_assert (m_window != nullptr); + m_window->resize (height, width, x, y); + tui_windows.push_back (m_window); +} + +/* See tui-layout.h. */ + +void +tui_layout_window::get_sizes (bool height, int *min_value, int *max_value) +{ + if (m_window == nullptr) + m_window = tui_get_window_by_name (m_contents); + if (height) + { + *min_value = m_window->min_height (); + *max_value = m_window->max_height (); + } else - cmd_height = tui_term_height () / 3; - src_height = tui_term_height () - cmd_height; + { + *min_value = m_window->min_width (); + *max_value = m_window->max_width (); + } +} + +/* See tui-layout.h. */ + +bool +tui_layout_window::top_boxed_p () const +{ + gdb_assert (m_window != nullptr); + return m_window->can_box (); +} + +/* See tui-layout.h. */ + +bool +tui_layout_window::bottom_boxed_p () const +{ + gdb_assert (m_window != nullptr); + return m_window->can_box (); +} - if (layout_type == SRC_COMMAND) +/* See tui-layout.h. */ + +void +tui_layout_window::replace_window (const char *name, const char *new_window) +{ + if (m_contents == name) { - if (tui_win_list[SRC_WIN] == nullptr) - tui_win_list[SRC_WIN] = new tui_source_window (); - win_info = TUI_SRC_WIN; + m_contents = new_window; + if (m_window != nullptr) + { + m_window->make_visible (false); + m_window = tui_get_window_by_name (m_contents); + } + } +} + +/* See tui-layout.h. */ + +void +tui_layout_window::specification (ui_file *output, int depth) +{ + fputs_unfiltered (get_name (), output); +} + +/* See tui-layout.h. */ + +void +tui_layout_split::add_split (std::unique_ptr<tui_layout_split> &&layout, + int weight) +{ + split s = {weight, std::move (layout)}; + m_splits.push_back (std::move (s)); +} + +/* See tui-layout.h. */ + +void +tui_layout_split::add_window (const char *name, int weight) +{ + tui_layout_window *result = new tui_layout_window (name); + split s = {weight, std::unique_ptr<tui_layout_base> (result)}; + m_splits.push_back (std::move (s)); +} + +/* See tui-layout.h. */ + +std::unique_ptr<tui_layout_base> +tui_layout_split::clone () const +{ + tui_layout_split *result = new tui_layout_split (m_vertical); + for (const split &item : m_splits) + { + std::unique_ptr<tui_layout_base> next = item.layout->clone (); + split s = {item.weight, std::move (next)}; + result->m_splits.push_back (std::move (s)); + } + return std::unique_ptr<tui_layout_base> (result); +} + +/* See tui-layout.h. */ + +void +tui_layout_split::get_sizes (bool height, int *min_value, int *max_value) +{ + *min_value = 0; + *max_value = 0; + bool first_time = true; + for (const split &item : m_splits) + { + int new_min, new_max; + item.layout->get_sizes (height, &new_min, &new_max); + /* For the mismatch case, the first time through we want to set + the min and max to the computed values -- the "first_time" + check here is just a funny way of doing that. */ + if (height == m_vertical || first_time) + { + *min_value += new_min; + *max_value += new_max; + } + else + { + *min_value = std::max (*min_value, new_min); + *max_value = std::min (*max_value, new_max); + } + first_time = false; + } +} + +/* See tui-layout.h. */ + +bool +tui_layout_split::top_boxed_p () const +{ + if (m_splits.empty ()) + return false; + return m_splits[0].layout->top_boxed_p (); +} + +/* See tui-layout.h. */ + +bool +tui_layout_split::bottom_boxed_p () const +{ + if (m_splits.empty ()) + return false; + return m_splits.back ().layout->top_boxed_p (); +} + +/* See tui-layout.h. */ + +void +tui_layout_split::set_weights_from_heights () +{ + for (int i = 0; i < m_splits.size (); ++i) + m_splits[i].weight = m_splits[i].layout->height; +} + +/* See tui-layout.h. */ + +tui_adjust_result +tui_layout_split::adjust_size (const char *name, int new_height) +{ + /* Look through the children. If one is a layout holding the named + window, we're done; or if one actually is the named window, + update it. */ + int found_index = -1; + for (int i = 0; i < m_splits.size (); ++i) + { + tui_adjust_result adjusted + = m_splits[i].layout->adjust_size (name, new_height); + if (adjusted == HANDLED) + return HANDLED; + if (adjusted == FOUND) + { + if (!m_vertical) + return FOUND; + found_index = i; + break; + } + } + + if (found_index == -1) + return NOT_FOUND; + if (m_splits[found_index].layout->height == new_height) + return HANDLED; + + set_weights_from_heights (); + int delta = m_splits[found_index].weight - new_height; + m_splits[found_index].weight = new_height; + + /* Distribute the "delta" over the next window; but if the next + window cannot hold it all, keep going until we either find a + window that does, or until we loop all the way around. */ + for (int i = 0; delta != 0 && i < m_splits.size () - 1; ++i) + { + int index = (found_index + 1 + i) % m_splits.size (); + + int new_min, new_max; + m_splits[index].layout->get_sizes (m_vertical, &new_min, &new_max); + + if (delta < 0) + { + /* The primary window grew, so we are trying to shrink other + windows. */ + int available = m_splits[index].weight - new_min; + int shrink_by = std::min (available, -delta); + m_splits[index].weight -= shrink_by; + delta += shrink_by; + } + else + { + /* The primary window shrank, so we are trying to grow other + windows. */ + int available = new_max - m_splits[index].weight; + int grow_by = std::min (available, delta); + m_splits[index].weight += grow_by; + delta -= grow_by; + } + } + + if (delta != 0) + { + warning (_("Invalid window height specified")); + /* Effectively undo any modifications made here. */ + set_weights_from_heights (); } else { - if (tui_win_list[DISASSEM_WIN] == nullptr) - tui_win_list[DISASSEM_WIN] = new tui_disasm_window (); - win_info = TUI_DISASM_WIN; - } - - locator->resize (1, tui_term_width (), - 0, src_height - 1); - win_info->resize (src_height - 1, - tui_term_width (), - 0, - 0); - - if (TUI_CMD_WIN == NULL) - tui_win_list[CMD_WIN] = new tui_cmd_window (); - TUI_CMD_WIN->resize (cmd_height, - tui_term_width (), - 0, - src_height); + /* Simply re-apply the updated layout. */ + apply (x, y, width, height); + } + + return HANDLED; +} + +/* See tui-layout.h. */ + +void +tui_layout_split::apply (int x_, int y_, int width_, int height_) +{ + x = x_; + y = y_; + width = width_; + height = height_; + + struct size_info + { + int size; + int min_size; + int max_size; + /* True if this window will share a box border with the previous + window in the list. */ + bool share_box; + }; + + std::vector<size_info> info (m_splits.size ()); + + /* Step 1: Find the min and max size of each sub-layout. + Fixed-sized layouts are given their desired size, and then the + remaining space is distributed among the remaining windows + according to the weights given. */ + int available_size = m_vertical ? height : width; + int last_index = -1; + int total_weight = 0; + for (int i = 0; i < m_splits.size (); ++i) + { + bool cmd_win_already_exists = TUI_CMD_WIN != nullptr; + + /* Always call get_sizes, to ensure that the window is + instantiated. This is a bit gross but less gross than adding + special cases for this in other places. */ + m_splits[i].layout->get_sizes (m_vertical, &info[i].min_size, + &info[i].max_size); + + if (!m_applied + && cmd_win_already_exists + && m_splits[i].layout->get_name () != nullptr + && strcmp (m_splits[i].layout->get_name (), "cmd") == 0) + { + /* If this layout has never been applied, then it means the + user just changed the layout. In this situation, it's + desirable to keep the size of the command window the + same. Setting the min and max sizes this way ensures + that the resizing step, below, does the right thing with + this window. */ + info[i].min_size = (m_vertical + ? TUI_CMD_WIN->height + : TUI_CMD_WIN->width); + info[i].max_size = info[i].min_size; + } + + if (info[i].min_size == info[i].max_size) + available_size -= info[i].min_size; + else + { + last_index = i; + total_weight += m_splits[i].weight; + } + + /* 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 ()) + info[i].share_box = true; + } + + /* Step 2: Compute the size of each sub-layout. Fixed-sized items + are given their fixed size, while others are resized according to + their weight. */ + int used_size = 0; + for (int i = 0; i < m_splits.size (); ++i) + { + /* Compute the height and clamp to the allowable range. */ + info[i].size = available_size * m_splits[i].weight / total_weight; + if (info[i].size > info[i].max_size) + info[i].size = info[i].max_size; + if (info[i].size < info[i].min_size) + info[i].size = info[i].min_size; + /* If there is any leftover size, just redistribute it to the + last resizeable window, by dropping it from the allocated + size. We could try to be fancier here perhaps, by + redistributing this size among all windows, not just the + last window. */ + if (info[i].min_size != info[i].max_size) + { + used_size += info[i].size; + if (info[i].share_box) + --used_size; + } + } + + /* Allocate any leftover size. */ + if (available_size >= used_size && last_index != -1) + info[last_index].size += available_size - used_size; + + /* Step 3: Resize. */ + int size_accum = 0; + const int maximum = m_vertical ? height : width; + for (int i = 0; i < m_splits.size (); ++i) + { + /* If we fall off the bottom, just make allocations overlap. + GIGO. */ + if (size_accum + info[i].size > maximum) + size_accum = maximum - info[i].size; + else if (info[i].share_box) + --size_accum; + if (m_vertical) + m_splits[i].layout->apply (x, y + size_accum, width, info[i].size); + else + m_splits[i].layout->apply (x + size_accum, y, info[i].size, height); + size_accum += info[i].size; + } + + m_applied = true; +} + +/* See tui-layout.h. */ + +void +tui_layout_split::remove_windows (const char *name) +{ + for (int i = 0; i < m_splits.size (); ++i) + { + const char *this_name = m_splits[i].layout->get_name (); + if (this_name == nullptr) + m_splits[i].layout->remove_windows (name); + else if (strcmp (this_name, name) == 0 + || strcmp (this_name, CMD_NAME) == 0 + || strcmp (this_name, STATUS_NAME) == 0) + { + /* Keep. */ + } + else + { + m_splits.erase (m_splits.begin () + i); + --i; + } + } +} + +/* See tui-layout.h. */ + +void +tui_layout_split::replace_window (const char *name, const char *new_window) +{ + for (auto &item : m_splits) + item.layout->replace_window (name, new_window); +} + +/* See tui-layout.h. */ + +void +tui_layout_split::specification (ui_file *output, int depth) +{ + if (depth > 0) + fputs_unfiltered ("{", output); + + if (!m_vertical) + fputs_unfiltered ("-horizontal ", output); + + bool first = true; + for (auto &item : m_splits) + { + if (!first) + fputs_unfiltered (" ", output); + first = false; + item.layout->specification (output, depth + 1); + fprintf_unfiltered (output, " %d", item.weight); + } + + if (depth > 0) + fputs_unfiltered ("}", output); +} + +/* Destroy the layout associated with SELF. */ + +static void +destroy_layout (struct cmd_list_element *self, void *context) +{ + tui_layout_split *layout = (tui_layout_split *) context; + size_t index = find_layout (layout); + layouts.erase (layouts.begin () + index); +} + +/* List holding the sub-commands of "layout". */ + +static struct cmd_list_element *layout_list; + +/* Add a "layout" command with name NAME that switches to LAYOUT. */ + +static struct cmd_list_element * +add_layout_command (const char *name, tui_layout_split *layout) +{ + struct cmd_list_element *cmd; + + string_file spec; + layout->specification (&spec, 0); + + gdb::unique_xmalloc_ptr<char> doc + (xstrprintf (_("Apply the \"%s\" layout.\n\ +This layout was created using:\n\ + tui new-layout %s %s"), + name, name, spec.c_str ())); + + cmd = add_cmd (name, class_tui, nullptr, doc.get (), &layout_list); + set_cmd_context (cmd, layout); + /* There is no API to set this. */ + cmd->func = tui_apply_layout; + cmd->destroyer = destroy_layout; + cmd->doc_allocated = 1; + doc.release (); + layouts.emplace_back (layout); + + return cmd; +} + +/* Initialize the standard layouts. */ + +static void +initialize_layouts () +{ + tui_layout_split *layout; + + layout = new tui_layout_split (); + layout->add_window (SRC_NAME, 2); + layout->add_window (STATUS_NAME, 0); + layout->add_window (CMD_NAME, 1); + add_layout_command (SRC_NAME, layout); + + layout = new tui_layout_split (); + layout->add_window (DISASSEM_NAME, 2); + layout->add_window (STATUS_NAME, 0); + layout->add_window (CMD_NAME, 1); + add_layout_command (DISASSEM_NAME, layout); + + layout = new tui_layout_split (); + layout->add_window (SRC_NAME, 1); + layout->add_window (DISASSEM_NAME, 1); + layout->add_window (STATUS_NAME, 0); + layout->add_window (CMD_NAME, 1); + add_layout_command ("split", layout); + + layout = new tui_layout_split (); + layout->add_window (DATA_NAME, 1); + layout->add_window (SRC_NAME, 1); + layout->add_window (STATUS_NAME, 0); + layout->add_window (CMD_NAME, 1); + layouts.emplace_back (layout); + src_regs_layout = layout; + + layout = new tui_layout_split (); + layout->add_window (DATA_NAME, 1); + layout->add_window (DISASSEM_NAME, 1); + layout->add_window (STATUS_NAME, 0); + layout->add_window (CMD_NAME, 1); + layouts.emplace_back (layout); + asm_regs_layout = layout; } +/* A helper function that returns true if NAME is the name of an + available window. */ + +static bool +validate_window_name (const std::string &name) +{ + auto iter = known_window_types->find (name); + return iter != known_window_types->end (); +} + +/* Implementation of the "tui new-layout" command. */ + +static void +tui_new_layout_command (const char *spec, int from_tty) +{ + std::string new_name = extract_arg (&spec); + if (new_name.empty ()) + error (_("No layout name specified")); + if (new_name[0] == '-') + error (_("Layout name cannot start with '-'")); + + bool is_vertical = true; + spec = skip_spaces (spec); + if (check_for_argument (&spec, "-horizontal")) + is_vertical = false; + + std::vector<std::unique_ptr<tui_layout_split>> splits; + splits.emplace_back (new tui_layout_split (is_vertical)); + std::unordered_set<std::string> seen_windows; + while (true) + { + spec = skip_spaces (spec); + if (spec[0] == '\0') + break; + + if (spec[0] == '{') + { + is_vertical = true; + spec = skip_spaces (spec + 1); + if (check_for_argument (&spec, "-horizontal")) + is_vertical = false; + splits.emplace_back (new tui_layout_split (is_vertical)); + continue; + } + + bool is_close = false; + std::string name; + if (spec[0] == '}') + { + is_close = true; + ++spec; + if (splits.size () == 1) + error (_("Extra '}' in layout specification")); + } + else + { + name = extract_arg (&spec); + if (name.empty ()) + break; + if (!validate_window_name (name)) + error (_("Unknown window \"%s\""), name.c_str ()); + if (seen_windows.find (name) != seen_windows.end ()) + error (_("Window \"%s\" seen twice in layout"), name.c_str ()); + } + + ULONGEST weight = get_ulongest (&spec, '}'); + if ((int) weight != weight) + error (_("Weight out of range: %s"), pulongest (weight)); + if (is_close) + { + std::unique_ptr<tui_layout_split> last_split + = std::move (splits.back ()); + splits.pop_back (); + splits.back ()->add_split (std::move (last_split), weight); + } + else + { + splits.back ()->add_window (name.c_str (), weight); + seen_windows.insert (name); + } + } + if (splits.size () > 1) + error (_("Missing '}' in layout specification")); + if (seen_windows.empty ()) + error (_("New layout does not contain any windows")); + if (seen_windows.find (CMD_NAME) == seen_windows.end ()) + error (_("New layout does not contain the \"" CMD_NAME "\" window")); + + gdb::unique_xmalloc_ptr<char> cmd_name + = make_unique_xstrdup (new_name.c_str ()); + std::unique_ptr<tui_layout_split> new_layout = std::move (splits.back ()); + struct cmd_list_element *cmd + = add_layout_command (cmd_name.get (), new_layout.get ()); + cmd->name_allocated = 1; + cmd_name.release (); + new_layout.release (); +} + /* Function to initialize gdb commands, for tui window layout manipulation. */ +void _initialize_tui_layout (); void -_initialize_tui_layout (void) +_initialize_tui_layout () { - struct cmd_list_element *cmd; - - cmd = add_com ("layout", class_tui, tui_layout_command, _("\ + add_basic_prefix_cmd ("layout", class_tui, _("\ Change the layout of windows.\n\ -Usage: layout prev | next | LAYOUT-NAME\n\ -Layout names are:\n\ - src : Displays source and command windows.\n\ - asm : Displays disassembly and command windows.\n\ - split : Displays source, disassembly and command windows.\n\ - regs : Displays register window. If existing layout\n\ - is source/command or assembly/command, the \n\ - register window is displayed. If the\n\ - source/assembly/command (split) is displayed, \n\ - the register window is displayed with \n\ - the window that has current logical focus.")); - set_cmd_completer (cmd, layout_completer); +Usage: layout prev | next | LAYOUT-NAME"), + &layout_list, "layout ", 0, &cmdlist); + + add_cmd ("next", class_tui, tui_next_layout_command, + _("Apply the next TUI layout."), + &layout_list); + add_cmd ("prev", class_tui, tui_prev_layout_command, + _("Apply the previous TUI layout."), + &layout_list); + add_cmd ("regs", class_tui, tui_regs_layout_command, + _("Apply the TUI register layout."), + &layout_list); + + add_cmd ("new-layout", class_tui, tui_new_layout_command, + _("Create a new TUI layout.\n\ +Usage: tui new-layout [-horizontal] NAME WINDOW WEIGHT [WINDOW WEIGHT]...\n\ +Create a new TUI layout. The new layout will be named NAME,\n\ +and can be accessed using \"layout NAME\".\n\ +The windows will be displayed in the specified order.\n\ +A WINDOW can also be of the form:\n\ + { [-horizontal] NAME WEIGHT [NAME WEIGHT]... }\n\ +This form indicates a sub-frame.\n\ +Each WEIGHT is an integer, which holds the relative size\n\ +to be allocated to the window."), + tui_get_cmd_list ()); + + initialize_layouts (); + initialize_known_windows (); } diff -Nru gdb-9.1/gdb/tui/tui-layout.h gdb-10.2/gdb/tui/tui-layout.h --- gdb-9.1/gdb/tui/tui-layout.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/tui/tui-layout.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* TUI layout window management. - Copyright (C) 1998-2020 Free Software Foundation, Inc. + Copyright (C) 1998-2021 Free Software Foundation, Inc. Contributed by Hewlett-Packard Company. @@ -22,10 +22,241 @@ #ifndef TUI_TUI_LAYOUT_H #define TUI_TUI_LAYOUT_H +#include "ui-file.h" + #include "tui/tui.h" #include "tui/tui-data.h" +/* Values that can be returned when handling a request to adjust a + window's size. */ +enum tui_adjust_result +{ + /* Requested window was not found here. */ + NOT_FOUND, + /* Window was found but not handled. */ + FOUND, + /* Window was found and handled. */ + HANDLED +}; + +/* The basic object in a TUI layout. This represents a single piece + of screen real estate. Subclasses determine the exact + behavior. */ +class tui_layout_base +{ +public: + + DISABLE_COPY_AND_ASSIGN (tui_layout_base); + + virtual ~tui_layout_base () = default; + + /* Clone this object. Ordinarily a layout is cloned before it is + used, so that any necessary modifications do not affect the + "skeleton" layout. */ + virtual std::unique_ptr<tui_layout_base> clone () const = 0; + + /* Change the size and location of this layout. */ + virtual void apply (int x, int y, int width, int height) = 0; + + /* Return the minimum and maximum height or width of this layout. + HEIGHT is true to fetch height, false to fetch width. */ + virtual void get_sizes (bool height, int *min_value, int *max_value) = 0; + + /* True if the topmost item in this layout is boxed. */ + virtual bool top_boxed_p () const = 0; + + /* True if the bottommost item in this layout is boxed. */ + virtual bool bottom_boxed_p () const = 0; + + /* Return the name of this layout's window, or nullptr if this + layout does not represent a single window. */ + virtual const char *get_name () const + { + return nullptr; + } + + /* Adjust the size of the window named NAME to NEW_HEIGHT, updating + the sizes of the other windows around it. */ + virtual tui_adjust_result adjust_size (const char *name, int new_height) = 0; + + /* Remove some windows from the layout, leaving the command window + and the window being passed in here. */ + virtual void remove_windows (const char *name) = 0; + + /* Replace the window named NAME in the layout with the window named + NEW_WINDOW. */ + virtual void replace_window (const char *name, const char *new_window) = 0; + + /* Append the specification to this window to OUTPUT. DEPTH is the + depth of this layout in the hierarchy (zero-based). */ + virtual void specification (ui_file *output, int depth) = 0; + + /* The most recent space allocation. */ + int x = 0; + int y = 0; + int width = 0; + int height = 0; + +protected: + + tui_layout_base () = default; +}; + +/* A TUI layout object that displays a single window. The window is + given by name. */ +class tui_layout_window : public tui_layout_base +{ +public: + + explicit tui_layout_window (const char *name) + : m_contents (name) + { + } + + DISABLE_COPY_AND_ASSIGN (tui_layout_window); + + std::unique_ptr<tui_layout_base> clone () const override; + + void apply (int x, int y, int width, int height) override; + + const char *get_name () const override + { + return m_contents.c_str (); + } + + tui_adjust_result adjust_size (const char *name, int new_height) override + { + return m_contents == name ? FOUND : NOT_FOUND; + } + + bool top_boxed_p () const override; + + bool bottom_boxed_p () const override; + + void remove_windows (const char *name) override + { + } + + void replace_window (const char *name, const char *new_window) override; + + void specification (ui_file *output, int depth) override; + +protected: + + void get_sizes (bool height, int *min_value, int *max_value) override; + +private: + + /* Type of content to display. */ + std::string m_contents; + + /* When a layout is applied, this is updated to point to the window + object. */ + tui_win_info *m_window = nullptr; +}; + +/* A TUI layout that holds other layouts. */ +class tui_layout_split : public tui_layout_base +{ +public: + + /* Create a new layout. If VERTICAL is true, then windows in this + layout will be arranged vertically. */ + explicit tui_layout_split (bool vertical = true) + : m_vertical (vertical) + { + } + + DISABLE_COPY_AND_ASSIGN (tui_layout_split); + + /* Add a new split layout to this layout. WEIGHT is the desired + size, which is relative to the other weights given in this + layout. */ + void add_split (std::unique_ptr<tui_layout_split> &&layout, int weight); + + /* Add a new window to this layout. NAME is the name of the window + to add. WEIGHT is the desired size, which is relative to the + other weights given in this layout. */ + void add_window (const char *name, int weight); + + std::unique_ptr<tui_layout_base> clone () const override; + + void apply (int x, int y, int width, int height) override; + + tui_adjust_result adjust_size (const char *name, int new_height) override; + + bool top_boxed_p () const override; + + bool bottom_boxed_p () const override; + + void remove_windows (const char *name) override; + + void replace_window (const char *name, const char *new_window) override; + + void specification (ui_file *output, int depth) override; + +protected: + + void get_sizes (bool height, int *min_value, int *max_value) override; + +private: + + /* Set the weights from the current heights. */ + void set_weights_from_heights (); + + struct split + { + /* The requested weight. */ + int weight; + /* The layout. */ + std::unique_ptr<tui_layout_base> layout; + }; + + /* The splits. */ + std::vector<split> m_splits; + + /* True if the windows in this split are arranged vertically. */ + bool m_vertical; + + /* True if this layout has already been applied at least once. */ + bool m_applied = false; +}; + +/* Add the specified window to the layout in a logical way. This + means setting up the most logical layout given the window to be + added. Only the source or disassembly window can be added this + way. */ extern void tui_add_win_to_layout (enum tui_win_type); -extern void tui_set_layout (enum tui_layout_type); + +/* Set the initial layout. */ +extern void tui_set_initial_layout (); + +/* Switch to the next layout. */ +extern void tui_next_layout (); + +/* Show the register window. Like "layout regs". */ +extern void tui_regs_layout (); + +/* Remove some windows from the layout, leaving only the focused + window and the command window; if no window has the focus, then + some other window is chosen to remain. */ +extern void tui_remove_some_windows (); + +/* Apply the current layout. */ +extern void tui_apply_current_layout (); + +/* Adjust the window height of WIN to NEW_HEIGHT. */ +extern void tui_adjust_window_height (struct tui_win_info *win, + int new_height); + +/* The type of a function that is used to create a TUI window. */ + +typedef std::function<tui_win_info * (const char *name)> window_factory; + +/* Register a new TUI window type. NAME is the name of the window + type. FACTORY is a function that can be called to instantiate the + window. */ + +extern void tui_register_window (const char *name, window_factory &&factory); #endif /* TUI_TUI_LAYOUT_H */ diff -Nru gdb-9.1/gdb/tui/tui-out.c gdb-10.2/gdb/tui/tui-out.c --- gdb-9.1/gdb/tui/tui-out.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/tui/tui-out.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Output generating routines for GDB CLI. - Copyright (C) 1999-2020 Free Software Foundation, Inc. + Copyright (C) 1999-2021 Free Software Foundation, Inc. Contributed by Cygnus Solutions. Written by Fernando Nasser for Cygnus. @@ -60,10 +60,7 @@ m_start_of_line++; if (fldname && m_line > 0 && strcmp (fldname, "fullname") == 0) - { - tui_show_source (string, m_line); - return; - } + return; cli_ui_out::do_field_string (fldno, width, align, fldname, string, style); } diff -Nru gdb-9.1/gdb/tui/tui-out.h gdb-10.2/gdb/tui/tui-out.h --- gdb-9.1/gdb/tui/tui-out.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/tui/tui-out.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2016-2020 Free Software Foundation, Inc. +/* Copyright (C) 2016-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/tui/tui-regs.c gdb-10.2/gdb/tui/tui-regs.c --- gdb-9.1/gdb/tui/tui-regs.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/tui/tui-regs.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* TUI display registers in window. - Copyright (C) 1998-2020 Free Software Foundation, Inc. + Copyright (C) 1998-2021 Free Software Foundation, Inc. Contributed by Hewlett-Packard Company. @@ -42,15 +42,55 @@ #include "gdb_curses.h" +/* A subclass of string_file that expands tab characters. */ +class tab_expansion_file : public string_file +{ +public: + + tab_expansion_file () = default; + + void write (const char *buf, long length_buf) override; + +private: + + int m_column = 0; +}; + +void +tab_expansion_file::write (const char *buf, long length_buf) +{ + for (long i = 0; i < length_buf; ++i) + { + if (buf[i] == '\t') + { + do + { + string_file::write (" ", 1); + ++m_column; + } + while ((m_column % 8) != 0); + } + else + { + string_file::write (&buf[i], 1); + if (buf[i] == '\n') + m_column = 0; + else + ++m_column; + } + } +} + /* Get the register from the frame and return a printable representation of it. */ -static gdb::unique_xmalloc_ptr<char> +static std::string tui_register_format (struct frame_info *frame, int regnum) { struct gdbarch *gdbarch = get_frame_arch (frame); - string_file stream; + /* Expand tabs into spaces, since ncurses on MS-Windows doesn't. */ + tab_expansion_file stream; scoped_restore save_pagination = make_scoped_restore (&pagination_enabled, 0); @@ -64,8 +104,7 @@ if (!str.empty () && str.back () == '\n') str.resize (str.size () - 1); - /* Expand tabs into spaces, since ncurses on MS-Windows doesn't. */ - return tui_expand_tabs (str.c_str ()); + return str; } /* Get the register value from the given frame and format it for the @@ -80,11 +119,9 @@ *changedp = false; if (target_has_registers) { - gdb::unique_xmalloc_ptr<char> new_content - = tui_register_format (frame, regnum); + std::string new_content = tui_register_format (frame, regnum); - if (changedp != NULL - && strcmp (data->content.get (), new_content.get ()) != 0) + if (changedp != NULL && data->content != new_content) *changedp = true; data->content = std::move (new_content); @@ -220,16 +257,12 @@ continue; data_item_win = &m_regs_content[pos]; - if (data_item_win) + if (!refresh_values_only) { - if (!refresh_values_only) - { - data_item_win->item_no = regnum; - data_item_win->name = name; - data_item_win->highlight = false; - } - tui_get_register (frame, data_item_win, regnum, 0); + data_item_win->regno = regnum; + data_item_win->highlight = false; } + tui_get_register (frame, data_item_win, regnum, 0); pos++; } } @@ -239,43 +272,36 @@ void tui_data_window::display_registers_from (int start_element_no) { - int j, item_win_width, cur_y; - int max_len = 0; for (auto &&data_item_win : m_regs_content) { - const char *p; - int len; - - len = 0; - p = data_item_win.content.get (); - if (p != 0) - len = strlen (p); + int len = data_item_win.content.size (); if (len > max_len) max_len = len; } - item_win_width = max_len + 1; + m_item_width = max_len + 1; int i = start_element_no; - m_regs_column_count = (width - 2) / item_win_width; + m_regs_column_count = (width - 2) / m_item_width; if (m_regs_column_count == 0) m_regs_column_count = 1; - item_win_width = (width - 2) / m_regs_column_count; + m_item_width = (width - 2) / m_regs_column_count; /* Now create each data "sub" window, and write the display into it. */ - cur_y = 1; - while (i < m_regs_content.size () - && cur_y <= viewport_height) + int cur_y = 1; + while (i < m_regs_content.size () && cur_y <= height - 2) { - for (j = 0; + for (int j = 0; j < m_regs_column_count && i < m_regs_content.size (); j++) { /* Create the window if necessary. */ - m_regs_content[i].resize (1, item_win_width, - (item_win_width * j) + 1, cur_y); + m_regs_content[i].x = (m_item_width * j) + 1; + m_regs_content[i].y = cur_y; + m_regs_content[i].visible = true; + m_regs_content[i].rerender (handle.get (), m_item_width); i++; /* Next register. */ } cur_y++; /* Next row. */ @@ -346,10 +372,7 @@ { for (int i = 0; i < m_regs_content.size (); i++) { - struct tui_gen_win_info *data_item_win; - - data_item_win = &m_regs_content[i]; - if (data_item_win->is_visible ()) + if (m_regs_content[i].visible) return i; } @@ -361,8 +384,8 @@ void tui_data_window::delete_data_content_windows () { - for (auto &&win : m_regs_content) - win.handle.reset (nullptr); + for (auto &win : m_regs_content) + win.visible = false; } @@ -382,7 +405,7 @@ x_pos = half_width - strlen (prompt); mvwaddstr (handle.get (), (height / 2), x_pos, (char *) prompt); } - wrefresh (handle.get ()); + tui_wrefresh (handle.get ()); } /* See tui-regs.h. */ @@ -425,16 +448,6 @@ } } -/* See tui-regs.h. */ - -void -tui_data_window::refresh_window () -{ - tui_gen_win_info::refresh_window (); - for (auto &&win : m_regs_content) - win.refresh_window (); -} - /* This function check all displayed registers for changes in values, given a particular frame. If the values have changed, they are updated with the new value and highlighted. */ @@ -452,37 +465,32 @@ was_hilighted = data_item_win.highlight; tui_get_register (frame, &data_item_win, - data_item_win.item_no, + data_item_win.regno, &data_item_win.highlight); if (data_item_win.highlight || was_hilighted) - data_item_win.rerender (); + data_item_win.rerender (handle.get (), m_item_width); } } + + tui_wrefresh (handle.get ()); } /* Display a register in a window. If hilite is TRUE, then the value will be displayed in reverse video. */ void -tui_data_item_window::rerender () +tui_data_item_window::rerender (WINDOW *handle, int field_width) { - int i; - - scrollok (handle.get (), FALSE); if (highlight) /* We ignore the return value, casting it to void in order to avoid a compiler warning. The warning itself was introduced by a patch to ncurses 5.7 dated 2009-08-29, changing this macro to expand to code that causes the compiler to generate an unused-value warning. */ - (void) wstandout (handle.get ()); + (void) wstandout (handle); - wmove (handle.get (), 0, 0); - for (i = 1; i < width; i++) - waddch (handle.get (), ' '); - wmove (handle.get (), 0, 0); - if (content) - waddstr (handle.get (), content.get ()); + mvwaddnstr (handle, y, x, content.c_str (), field_width - 1); + waddstr (handle, n_spaces (field_width - content.size ())); if (highlight) /* We ignore the return value, casting it to void in order to avoid @@ -490,21 +498,7 @@ to ncurses 5.7 dated 2009-08-29, changing this macro to expand to code that causes the compiler to generate an unused-value warning. */ - (void) wstandend (handle.get ()); - refresh_window (); -} - -void -tui_data_item_window::refresh_window () -{ - if (handle != nullptr) - { - /* This seems to be needed because the data items are nested - windows, which according to the ncurses man pages aren't well - supported. */ - touchwin (handle.get ()); - wrefresh (handle.get ()); - } + (void) wstandend (handle); } /* Helper for "tui reg next", wraps a call to REGGROUP_NEXT, but adds wrap @@ -543,21 +537,6 @@ return group; } -/* A helper function to display the register window in the appropriate - way. */ - -static void -tui_reg_layout () -{ - enum tui_layout_type cur_layout = tui_current_layout (); - enum tui_layout_type new_layout; - if (cur_layout == SRC_COMMAND || cur_layout == SRC_DATA_COMMAND) - new_layout = SRC_DATA_COMMAND; - else - new_layout = DISASSEM_DATA_COMMAND; - tui_set_layout (new_layout); -} - /* Implement the 'tui reg' command. Changes the register group displayed in the tui register window. Displays the tui register window if it is not already on display. */ @@ -575,11 +554,13 @@ /* Make sure the curses mode is enabled. */ tui_enable (); + tui_suppress_output suppress; + /* Make sure the register window is visible. If not, select an appropriate layout. We need to do this before trying to run the 'next' or 'prev' commands. */ if (TUI_DATA_WIN == NULL || !TUI_DATA_WIN->is_visible ()) - tui_reg_layout (); + tui_regs_layout (); struct reggroup *current_group = TUI_DATA_WIN->get_current_group (); if (strncmp (args, "next", len) == 0) @@ -637,28 +618,24 @@ completion_tracker &tracker, const char *text, const char *word) { - static const char *extra[] = { "next", "prev", NULL }; - size_t len = strlen (word); - const char **tmp; + static const char * const extra[] = { "next", "prev", NULL }; reggroup_completer (ignore, tracker, text, word); - /* XXXX use complete_on_enum instead? */ - for (tmp = extra; *tmp != NULL; ++tmp) - { - if (strncmp (word, *tmp, len) == 0) - tracker.add_completion (make_unique_xstrdup (*tmp)); - } + complete_on_enum (tracker, extra, text, word); } +void _initialize_tui_regs (); void -_initialize_tui_regs (void) +_initialize_tui_regs () { struct cmd_list_element **tuicmd, *cmd; tuicmd = tui_get_cmd_list (); cmd = add_cmd ("reg", class_tui, tui_reg_command, _("\ -TUI command to control the register window."), tuicmd); +TUI command to control the register window.\n\ +Usage: tui reg NAME\n\ +NAME is the name of the register group to display"), tuicmd); set_cmd_completer (cmd, tui_reggroup_completer); } diff -Nru gdb-9.1/gdb/tui/tui-regs.h gdb-10.2/gdb/tui/tui-regs.h --- gdb-9.1/gdb/tui/tui-regs.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/tui/tui-regs.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* TUI display registers in window. - Copyright (C) 1998-2020 Free Software Foundation, Inc. + Copyright (C) 1998-2021 Free Software Foundation, Inc. Contributed by Hewlett-Packard Company. @@ -26,40 +26,33 @@ /* A data item window. */ -struct tui_data_item_window : public tui_gen_win_info +struct tui_data_item_window { - tui_data_item_window () - : tui_gen_win_info (DATA_ITEM_WIN) - { - } + tui_data_item_window () = default; DISABLE_COPY_AND_ASSIGN (tui_data_item_window); tui_data_item_window (tui_data_item_window &&) = default; - void rerender () override; - - void refresh_window () override; + void rerender (WINDOW *handle, int field_width); - const char *name = nullptr; - /* The register number, or data display number. */ - int item_no = -1; + /* Location. */ + int x = 0; + int y = 0; + /* The register number. */ + int regno = -1; bool highlight = false; - gdb::unique_xmalloc_ptr<char> content; + bool visible = false; + std::string content; }; /* The TUI registers window. */ struct tui_data_window : public tui_win_info { - tui_data_window () - : tui_win_info (DATA_WIN) - { - } + tui_data_window () = default; DISABLE_COPY_AND_ASSIGN (tui_data_window); - void refresh_window () override; - const char *name () const override { return DATA_NAME; @@ -133,6 +126,9 @@ std::vector<tui_data_item_window> m_regs_content; int m_regs_column_count = 0; struct reggroup *m_current_group = nullptr; + + /* Width of each register's display area. */ + int m_item_width = 0; }; #endif /* TUI_TUI_REGS_H */ diff -Nru gdb-9.1/gdb/tui/tui-source.c gdb-10.2/gdb/tui/tui-source.c --- gdb-9.1/gdb/tui/tui-source.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/tui/tui-source.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* TUI display source window. - Copyright (C) 1998-2020 Free Software Foundation, Inc. + Copyright (C) 1998-2021 Free Software Foundation, Inc. Contributed by Hewlett-Packard Company. @@ -40,98 +40,81 @@ #include "gdb_curses.h" /* Function to display source in the source window. */ -enum tui_status +bool tui_source_window::set_contents (struct gdbarch *arch, - struct symtab *s, - struct tui_line_or_address line_or_addr) + const struct symtab_and_line &sal) { - gdb_assert (line_or_addr.loa == LOA_LINE); - int line_no = line_or_addr.u.line_no; + struct symtab *s = sal.symtab; + int line_no = sal.line; - enum tui_status ret = TUI_FAILURE; + if (s == NULL) + return false; - if (s != NULL) - { - int line_width, nlines; + int line_width, nlines; - ret = TUI_SUCCESS; - line_width = width - TUI_EXECINFO_SIZE - 1; - /* Take hilite (window border) into account, when - calculating the number of lines. */ - nlines = (line_no + (height - 2)) - line_no; + line_width = width - TUI_EXECINFO_SIZE - 1; + /* Take hilite (window border) into account, when + calculating the number of lines. */ + nlines = height - 2; - std::string srclines; - const std::vector<off_t> *offsets; - if (!g_source_cache.get_source_lines (s, line_no, line_no + nlines, - &srclines) - || !g_source_cache.get_line_charpos (s, &offsets)) - ret = TUI_FAILURE; - else - { - int cur_line_no, cur_line; - struct tui_locator_window *locator - = tui_locator_win_info_ptr (); - const char *s_filename = symtab_to_filename_for_display (s); - - title = s_filename; - - m_fullname = make_unique_xstrdup (symtab_to_fullname (s)); - - cur_line = 0; - gdbarch = get_objfile_arch (SYMTAB_OBJFILE (s)); - start_line_or_addr.loa = LOA_LINE; - cur_line_no = start_line_or_addr.u.line_no = line_no; - - int digits = 0; - if (compact_source) - { - double l = log10 (offsets->size ()); - digits = 1 + (int) l; - } - - const char *iter = srclines.c_str (); - content.resize (nlines); - while (cur_line < nlines) - { - struct tui_source_element *element - = &content[cur_line]; - - std::string text; - if (*iter != '\0') - text = tui_copy_source_line (&iter, cur_line_no, - horizontal_offset, - line_width, digits); - - /* Set whether element is the execution point - and whether there is a break point on it. */ - element->line_or_addr.loa = LOA_LINE; - element->line_or_addr.u.line_no = cur_line_no; - element->is_exec_point - = (filename_cmp (locator->full_name.c_str (), - symtab_to_fullname (s)) == 0 - && cur_line_no == locator->line_no); - - content[cur_line].line = std::move (text); - - cur_line++; - cur_line_no++; - } - ret = TUI_SUCCESS; - } + std::string srclines; + const std::vector<off_t> *offsets; + if (!g_source_cache.get_source_lines (s, line_no, line_no + nlines, + &srclines) + || !g_source_cache.get_line_charpos (s, &offsets)) + return false; + + int cur_line_no, cur_line; + struct tui_locator_window *locator + = tui_locator_win_info_ptr (); + const char *s_filename = symtab_to_filename_for_display (s); + + title = s_filename; + + m_fullname = make_unique_xstrdup (symtab_to_fullname (s)); + + cur_line = 0; + m_gdbarch = SYMTAB_OBJFILE (s)->arch (); + m_start_line_or_addr.loa = LOA_LINE; + cur_line_no = m_start_line_or_addr.u.line_no = line_no; + + int digits = 0; + if (compact_source) + { + /* Solaris 11+gcc 5.5 has ambiguous overloads of log10, so we + cast to double to get the right one. */ + double l = log10 ((double) offsets->size ()); + digits = 1 + (int) l; } - return ret; -} + const char *iter = srclines.c_str (); + m_content.resize (nlines); + while (cur_line < nlines) + { + struct tui_source_element *element = &m_content[cur_line]; -/* Function to display source in the source window. This function - initializes the horizontal scroll to 0. */ -void -tui_source_window::show_symtab_source (struct gdbarch *gdbarch, - struct symtab *s, - struct tui_line_or_address line) -{ - horizontal_offset = 0; - update_source_window_as_is (gdbarch, s, line); + std::string text; + if (*iter != '\0') + text = tui_copy_source_line (&iter, cur_line_no, + m_horizontal_offset, + line_width, digits); + + /* Set whether element is the execution point + and whether there is a break point on it. */ + element->line_or_addr.loa = LOA_LINE; + element->line_or_addr.u.line_no = cur_line_no; + element->is_exec_point + = (filename_cmp (locator->full_name.c_str (), + symtab_to_fullname (s)) == 0 + && cur_line_no == locator->line_no); + + m_content[cur_line].line = std::move (text); + + cur_line++; + cur_line_no++; + } + + return true; } @@ -140,7 +123,7 @@ bool tui_source_window::showing_source_p (const char *fullname) const { - return (!content.empty () + return (!m_content.empty () && (filename_cmp (tui_locator_win_info_ptr ()->full_name.c_str (), fullname) == 0)); } @@ -150,38 +133,41 @@ void tui_source_window::do_scroll_vertical (int num_to_scroll) { - if (!content.empty ()) + if (!m_content.empty ()) { - struct tui_line_or_address l; struct symtab *s; struct symtab_and_line cursal = get_current_source_symtab_and_line (); + struct gdbarch *arch = m_gdbarch; if (cursal.symtab == NULL) - s = find_pc_line_symtab (get_frame_pc (get_selected_frame (NULL))); + { + struct frame_info *fi = get_selected_frame (NULL); + s = find_pc_line_symtab (get_frame_pc (fi)); + arch = get_frame_arch (fi); + } else s = cursal.symtab; - l.loa = LOA_LINE; - l.u.line_no = content[0].line_or_addr.u.line_no - + num_to_scroll; + int line_no = m_start_line_or_addr.u.line_no + num_to_scroll; const std::vector<off_t> *offsets; if (g_source_cache.get_line_charpos (s, &offsets) - && l.u.line_no > offsets->size ()) - /* line = s->nlines - win_info->content_size + 1; */ - /* elz: fix for dts 23398. */ - l.u.line_no = content[0].line_or_addr.u.line_no; - if (l.u.line_no <= 0) - l.u.line_no = 1; - - print_source_lines (s, l.u.line_no, l.u.line_no + 1, 0); + && line_no > offsets->size ()) + line_no = m_start_line_or_addr.u.line_no; + if (line_no <= 0) + line_no = 1; + + cursal.line = line_no; + find_line_pc (cursal.symtab, cursal.line, &cursal.pc); + for (struct tui_source_window_base *win_info : tui_source_windows ()) + win_info->update_source_window_as_is (arch, cursal); } } bool tui_source_window::location_matches_p (struct bp_location *loc, int line_no) { - return (content[line_no].line_or_addr.loa == LOA_LINE - && content[line_no].line_or_addr.u.line_no == loc->line_number + return (m_content[line_no].line_or_addr.loa == LOA_LINE + && m_content[line_no].line_or_addr.u.line_no == loc->line_number && loc->symtab != NULL && filename_cmp (m_fullname.get (), symtab_to_fullname (loc->symtab)) == 0); @@ -192,41 +178,50 @@ bool tui_source_window::line_is_displayed (int line) const { - bool is_displayed = false; - int threshold = SCROLL_THRESHOLD; - int i = 0; - while (i < content.size () - threshold && !is_displayed) - { - is_displayed - = (content[i].line_or_addr.loa == LOA_LINE - && content[i].line_or_addr.u.line_no == line); - i++; + if (m_content.size () < SCROLL_THRESHOLD) + return false; + + for (size_t i = 0; i < m_content.size () - SCROLL_THRESHOLD; ++i) + { + if (m_content[i].line_or_addr.loa == LOA_LINE + && m_content[i].line_or_addr.u.line_no == line) + return true; } - return is_displayed; + return false; } void -tui_source_window::maybe_update (struct frame_info *fi, symtab_and_line sal, - int line_no, CORE_ADDR addr) +tui_source_window::maybe_update (struct frame_info *fi, symtab_and_line sal) { - int start_line = (line_no - (viewport_height / 2)) + 1; + int start_line = (sal.line - ((height - 2) / 2)) + 1; if (start_line <= 0) start_line = 1; bool source_already_displayed = (sal.symtab != 0 && showing_source_p (m_fullname.get ())); - struct tui_line_or_address l; - - l.loa = LOA_LINE; - l.u.line_no = start_line; - if (!(source_already_displayed - && line_is_displayed (line_no))) - update_source_window (get_frame_arch (fi), sal.symtab, l); + if (!(source_already_displayed && line_is_displayed (sal.line))) + { + sal.line = start_line; + update_source_window (get_frame_arch (fi), sal); + } else { - l.u.line_no = line_no; + struct tui_line_or_address l; + + l.loa = LOA_LINE; + l.u.line_no = sal.line; set_is_exec_point_at (l); } } + +void +tui_source_window::display_start_addr (struct gdbarch **gdbarch_p, + CORE_ADDR *addr_p) +{ + struct symtab_and_line cursal = get_current_source_symtab_and_line (); + + *gdbarch_p = m_gdbarch; + find_line_pc (cursal.symtab, m_start_line_or_addr.u.line_no, addr_p); +} diff -Nru gdb-9.1/gdb/tui/tui-source.h gdb-10.2/gdb/tui/tui-source.h --- gdb-9.1/gdb/tui/tui-source.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/tui/tui-source.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* TUI display source window. - Copyright (C) 1998-2020 Free Software Foundation, Inc. + Copyright (C) 1998-2021 Free Software Foundation, Inc. Contributed by Hewlett-Packard Company. @@ -31,10 +31,7 @@ struct tui_source_window : public tui_source_window_base { - tui_source_window () - : tui_source_window_base (SRC_WIN) - { - } + tui_source_window () = default; DISABLE_COPY_AND_ASSIGN (tui_source_window); @@ -49,26 +46,22 @@ bool showing_source_p (const char *filename) const; - void maybe_update (struct frame_info *fi, symtab_and_line sal, - int line_no, CORE_ADDR addr) - override; + void maybe_update (struct frame_info *fi, symtab_and_line sal) override; void erase_source_content () override { do_erase_source_content (_("[ No Source Available ]")); } - void show_symtab_source (struct gdbarch *, struct symtab *, - struct tui_line_or_address); + void display_start_addr (struct gdbarch **gdbarch_p, + CORE_ADDR *addr_p) override; protected: void do_scroll_vertical (int num_to_scroll) override; - enum tui_status set_contents - (struct gdbarch *gdbarch, - struct symtab *s, - struct tui_line_or_address line_or_addr) override; + bool set_contents (struct gdbarch *gdbarch, + const struct symtab_and_line &sal) override; private: diff -Nru gdb-9.1/gdb/tui/tui-stack.c gdb-10.2/gdb/tui/tui-stack.c --- gdb-9.1/gdb/tui/tui-stack.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/tui/tui-stack.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* TUI display locator. - Copyright (C) 1998-2020 Free Software Foundation, Inc. + Copyright (C) 1998-2021 Free Software Foundation, Inc. Contributed by Hewlett-Packard Company. @@ -43,6 +43,9 @@ #define LINE_PREFIX "L" #define PC_PREFIX "PC: " +/* Strings to display in the TUI status line. */ +#define SINGLE_KEY "(SingleKey)" + /* Minimum/Maximum length of some fields displayed in the TUI status line. */ #define MIN_LINE_WIDTH 4 /* Use at least 4 digits for line @@ -258,28 +261,26 @@ bool tui_locator_window::set_locator_info (struct gdbarch *gdbarch_in, - const char *fullname, - const char *procname, - int lineno, - CORE_ADDR addr_in) + const struct symtab_and_line &sal, + const char *procname) { bool locator_changed_p = false; - if (procname == NULL) - procname = ""; + gdb_assert (procname != NULL); - if (fullname == NULL) - fullname = ""; + const char *fullname = (sal.symtab == nullptr + ? "??" + : symtab_to_fullname (sal.symtab)); locator_changed_p |= proc_name != procname; - locator_changed_p |= lineno != line_no; - locator_changed_p |= addr_in != addr; + locator_changed_p |= sal.line != line_no; + locator_changed_p |= sal.pc != addr; locator_changed_p |= gdbarch_in != gdbarch; locator_changed_p |= full_name != fullname; proc_name = procname; - line_no = lineno; - addr = addr_in; + line_no = sal.line; + addr = sal.pc; gdbarch = gdbarch_in; set_locator_fullname (fullname); @@ -288,20 +289,25 @@ /* Update only the full_name portion of the locator. */ void -tui_update_locator_fullname (const char *fullname) +tui_update_locator_fullname (struct symtab *symtab) { struct tui_locator_window *locator = tui_locator_win_info_ptr (); + const char *fullname; + if (symtab != nullptr) + fullname = symtab_to_fullname (symtab); + else + fullname = "??"; locator->set_locator_fullname (fullname); } /* Function to print the frame information for the TUI. The windows are refreshed only if frame information has changed since the last refresh. - Return 1 if frame information has changed (and windows subsequently - refreshed), 0 otherwise. */ + Return true if frame information has changed (and windows + subsequently refreshed), false otherwise. */ -int +bool tui_show_frame_info (struct frame_info *fi) { bool locator_changed_p; @@ -309,57 +315,45 @@ if (fi) { - CORE_ADDR pc; - symtab_and_line sal = find_frame_sal (fi); - const char *fullname = nullptr; - if (sal.symtab != nullptr) - fullname = symtab_to_fullname (sal.symtab); - - if (get_frame_pc_if_available (fi, &pc)) - locator_changed_p - = locator->set_locator_info (get_frame_arch (fi), - (sal.symtab == 0 - ? "??" : fullname), - tui_get_function_from_frame (fi), - sal.line, - pc); + const char *func_name; + /* find_frame_sal does not always set PC, but we want to ensure + that it is available in the SAL. */ + if (get_frame_pc_if_available (fi, &sal.pc)) + func_name = tui_get_function_from_frame (fi); else - locator_changed_p - = locator->set_locator_info (get_frame_arch (fi), - "??", _("<unavailable>"), sal.line, 0); + func_name = _("<unavailable>"); + + locator_changed_p = locator->set_locator_info (get_frame_arch (fi), + sal, func_name); /* If the locator information has not changed, then frame information has not changed. If frame information has not changed, then the windows' contents will not change. So don't bother refreshing the windows. */ if (!locator_changed_p) - return 0; + return false; for (struct tui_source_window_base *win_info : tui_source_windows ()) { - win_info->maybe_update (fi, sal, locator->line_no, locator->addr); + win_info->maybe_update (fi, sal); win_info->update_exec_info (); } - - return 1; } else { - locator_changed_p - = locator->set_locator_info (NULL, NULL, NULL, 0, (CORE_ADDR) 0); + symtab_and_line sal {}; + + locator_changed_p = locator->set_locator_info (NULL, sal, ""); if (!locator_changed_p) - return 0; + return false; for (struct tui_source_window_base *win_info : tui_source_windows ()) - { - win_info->erase_source_content (); - win_info->update_exec_info (); - } - - return 1; + win_info->erase_source_content (); } + + return true; } void @@ -379,10 +373,12 @@ /* Function to initialize gdb commands, for tui window stack manipulation. */ +void _initialize_tui_stack (); void -_initialize_tui_stack (void) +_initialize_tui_stack () { add_com ("update", class_tui, tui_update_command, _("Update the source window and locator to " - "display the current execution point.")); + "display the current execution point.\n\ +Usage: update")); } diff -Nru gdb-9.1/gdb/tui/tui-stack.h gdb-10.2/gdb/tui/tui-stack.h --- gdb-9.1/gdb/tui/tui-stack.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/tui/tui-stack.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* TUI display locator. - Copyright (C) 1998-2020 Free Software Foundation, Inc. + Copyright (C) 1998-2021 Free Software Foundation, Inc. Contributed by Hewlett-Packard Company. @@ -28,13 +28,33 @@ /* Locator window class. */ -struct tui_locator_window : public tui_gen_win_info +struct tui_locator_window : public tui_win_info { - tui_locator_window () - : tui_gen_win_info (LOCATOR_WIN) + tui_locator_window () = default; + + const char *name () const override + { + return STATUS_NAME; + } + + int max_height () const override + { + return 1; + } + + int min_height () const override + { + return 1; + } + + bool can_box () const override { - full_name[0] = 0; - proc_name[0] = 0; + return false; + } + + bool can_focus () const override + { + return false; } void rerender () override; @@ -44,9 +64,8 @@ Returns true if any of the locator's fields were actually changed, and false otherwise. */ bool set_locator_info (struct gdbarch *gdbarch, - const char *fullname, - const char *procname, - int lineno, CORE_ADDR addr); + const struct symtab_and_line &sal, + const char *procname); /* Set the full_name portion of the locator. */ void set_locator_fullname (const char *fullname); @@ -58,6 +77,16 @@ /* Architecture associated with code at this location. */ struct gdbarch *gdbarch = nullptr; +protected: + + void do_scroll_vertical (int n) override + { + } + + void do_scroll_horizontal (int n) override + { + } + private: /* Create the status line to display as much information as we can @@ -67,8 +96,8 @@ std::string make_status_line () const; }; -extern void tui_update_locator_fullname (const char *); +extern void tui_update_locator_fullname (struct symtab *symtab); extern void tui_show_locator_content (void); -extern int tui_show_frame_info (struct frame_info *); +extern bool tui_show_frame_info (struct frame_info *); #endif /* TUI_TUI_STACK_H */ diff -Nru gdb-9.1/gdb/tui/tui-win.c gdb-10.2/gdb/tui/tui-win.c --- gdb-9.1/gdb/tui/tui-win.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/tui/tui-win.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* TUI window generic functions. - Copyright (C) 1998-2020 Free Software Foundation, Inc. + Copyright (C) 1998-2021 Free Software Foundation, Inc. Contributed by Hewlett-Packard Company. @@ -33,8 +33,9 @@ #include "cli/cli-style.h" #include "top.h" #include "source.h" -#include "event-loop.h" +#include "gdbsupport/event-loop.h" #include "gdbcmd.h" +#include "async-event.h" #include "tui/tui.h" #include "tui/tui-io.h" @@ -56,9 +57,6 @@ #include <signal.h> -static enum tui_status tui_adjust_win_heights (struct tui_win_info *, - int); -static int new_height_ok (struct tui_win_info *, int); static void tui_set_tab_width_command (const char *, int); static void tui_refresh_all_command (const char *, int); static void tui_all_windows_info (const char *, int); @@ -71,9 +69,6 @@ int *); -#define WIN_HEIGHT_USAGE "Usage: winheight WINDOW-NAME [+ | -] NUM-LINES\n" -#define FOCUS_USAGE "Usage: focus [WINDOW-NAME | next | prev]\n" - #ifndef ACS_LRCORNER # define ACS_LRCORNER '+' #endif @@ -122,7 +117,7 @@ /* Translation table for border-mode variables. The list of values must be terminated by a NULL. After the NULL value, an entry defines the default. */ -struct tui_translate tui_border_mode_translate[] = { +static struct tui_translate tui_border_mode_translate[] = { { "normal", A_NORMAL }, { "standout", A_STANDOUT }, { "reverse", A_REVERSE }, @@ -138,7 +133,7 @@ character (see wborder, border curses operations). -1 is used to indicate the ACS because ACS characters are determined at run time by curses (depends on terminal). */ -struct tui_translate tui_border_kind_translate_vline[] = { +static struct tui_translate tui_border_kind_translate_vline[] = { { "space", ' ' }, { "ascii", '|' }, { "acs", -1 }, @@ -146,7 +141,7 @@ { "ascii", '|' } }; -struct tui_translate tui_border_kind_translate_hline[] = { +static struct tui_translate tui_border_kind_translate_hline[] = { { "space", ' ' }, { "ascii", '-' }, { "acs", -1 }, @@ -154,7 +149,7 @@ { "ascii", '-' } }; -struct tui_translate tui_border_kind_translate_ulcorner[] = { +static struct tui_translate tui_border_kind_translate_ulcorner[] = { { "space", ' ' }, { "ascii", '+' }, { "acs", -1 }, @@ -162,7 +157,7 @@ { "ascii", '+' } }; -struct tui_translate tui_border_kind_translate_urcorner[] = { +static struct tui_translate tui_border_kind_translate_urcorner[] = { { "space", ' ' }, { "ascii", '+' }, { "acs", -1 }, @@ -170,7 +165,7 @@ { "ascii", '+' } }; -struct tui_translate tui_border_kind_translate_llcorner[] = { +static struct tui_translate tui_border_kind_translate_llcorner[] = { { "space", ' ' }, { "ascii", '+' }, { "acs", -1 }, @@ -178,7 +173,7 @@ { "ascii", '+' } }; -struct tui_translate tui_border_kind_translate_lrcorner[] = { +static struct tui_translate tui_border_kind_translate_lrcorner[] = { { "space", ' ' }, { "ascii", '+' }, { "acs", -1 }, @@ -188,7 +183,7 @@ /* Tui configuration variables controlled with set/show command. */ -const char *tui_active_border_mode = "bold-standout"; +static const char *tui_active_border_mode = "bold-standout"; static void show_tui_active_border_mode (struct ui_file *file, int from_tty, @@ -200,7 +195,7 @@ value); } -const char *tui_border_mode = "normal"; +static const char *tui_border_mode = "normal"; static void show_tui_border_mode (struct ui_file *file, int from_tty, @@ -212,7 +207,7 @@ value); } -const char *tui_border_kind = "acs"; +static const char *tui_border_kind = "acs"; static void show_tui_border_kind (struct ui_file *file, int from_tty, @@ -257,23 +252,23 @@ /* Update the tui internal configuration according to gdb settings. Returns 1 if the configuration has changed and the screen should be redrawn. */ -int -tui_update_variables (void) +bool +tui_update_variables () { - int need_redraw = 0; + bool need_redraw = false; struct tui_translate *entry; entry = translate (tui_border_mode, tui_border_mode_translate); if (tui_border_attrs != entry->value) { tui_border_attrs = entry->value; - need_redraw = 1; + need_redraw = true; } entry = translate (tui_active_border_mode, tui_border_mode_translate); if (tui_active_border_attrs != entry->value) { tui_active_border_attrs = entry->value; - need_redraw = 1; + need_redraw = true; } /* If one corner changes, all characters are changed. @@ -283,7 +278,7 @@ if (tui_border_lrcorner != (chtype) entry->value) { tui_border_lrcorner = (entry->value < 0) ? ACS_LRCORNER : entry->value; - need_redraw = 1; + need_redraw = true; } entry = translate (tui_border_kind, tui_border_kind_translate_llcorner); tui_border_llcorner = (entry->value < 0) ? ACS_LLCORNER : entry->value; @@ -303,33 +298,15 @@ return need_redraw; } -static void -set_tui_cmd (const char *args, int from_tty) -{ -} - -static void -show_tui_cmd (const char *args, int from_tty) -{ -} - static struct cmd_list_element *tuilist; -static void -tui_command (const char *args, int from_tty) -{ - printf_unfiltered (_("\"tui\" must be followed by the name of a " - "tui command.\n")); - help_list (tuilist, "tui ", all_commands, gdb_stdout); -} - struct cmd_list_element ** tui_get_cmd_list (void) { if (tuilist == 0) - add_prefix_cmd ("tui", class_tui, tui_command, - _("Text User Interface commands."), - &tuilist, "tui ", 0, &cmdlist); + add_basic_prefix_cmd ("tui", class_tui, + _("Text User Interface commands."), + &tuilist, "tui ", 0, &cmdlist); return &tuilist; } @@ -388,7 +365,7 @@ /* If no windows are considered visible then the TUI has not yet been initialized. But still "focus src" and "focus cmd" will work because invoking the focus command will entail initializing the TUI which sets the - default layout to SRC_COMMAND. */ + default layout to "src". */ if (completion_name_vec.empty ()) { completion_name_vec.push_back (SRC_NAME); @@ -455,21 +432,6 @@ } -/* Set the logical focus to win_info. */ -void -tui_set_win_focus_to (struct tui_win_info *win_info) -{ - if (win_info != NULL) - { - struct tui_win_info *win_with_focus = tui_win_with_focus (); - - tui_unhighlight_win (win_with_focus); - tui_set_win_with_focus (win_info); - tui_highlight_win (win_info); - } -} - - void tui_win_info::forward_scroll (int num_to_scroll) { @@ -536,13 +498,7 @@ height_diff = screenheight - tui_term_height (); if (height_diff || width_diff) { - enum tui_layout_type cur_layout = tui_current_layout (); struct tui_win_info *win_with_focus = tui_win_with_focus (); - struct tui_win_info *first_win; - struct tui_win_info *second_win; - tui_source_window_base *src_win; - struct tui_locator_window *locator = tui_locator_win_info_ptr (); - int new_height, split_diff, cmd_split_diff, num_wins_displayed = 2; #ifdef HAVE_RESIZE_TERM resize_term (screenheight, screenwidth); @@ -553,109 +509,12 @@ tui_update_gdb_sizes (); tui_set_term_height_to (screenheight); tui_set_term_width_to (screenwidth); - if (cur_layout == SRC_DISASSEM_COMMAND - || cur_layout == SRC_DATA_COMMAND - || cur_layout == DISASSEM_DATA_COMMAND) - num_wins_displayed++; - split_diff = height_diff / num_wins_displayed; - cmd_split_diff = split_diff; - if (height_diff % num_wins_displayed) - { - if (height_diff < 0) - cmd_split_diff--; - else - cmd_split_diff++; - } - /* Now adjust each window. */ + /* erase + clearok are used instead of a straightforward clear as AIX 5.3 does not define clear. */ erase (); clearok (curscr, TRUE); - switch (cur_layout) - { - case SRC_COMMAND: - case DISASSEM_COMMAND: - src_win = *(tui_source_windows ().begin ()); - /* Check for invalid heights. */ - if (height_diff == 0) - new_height = src_win->height; - else if ((src_win->height + split_diff) >= - (screenheight - MIN_CMD_WIN_HEIGHT - 1)) - new_height = screenheight - MIN_CMD_WIN_HEIGHT - 1; - else if ((src_win->height + split_diff) <= 0) - new_height = MIN_WIN_HEIGHT; - else - new_height = src_win->height + split_diff; - - src_win->resize (new_height, screenwidth, 0, 0); - - locator->resize (1, screenwidth, 0, new_height); - - new_height = screenheight - (new_height + 1); - TUI_CMD_WIN->resize (new_height, screenwidth, - 0, locator->origin.y + 1); - break; - default: - if (cur_layout == SRC_DISASSEM_COMMAND) - { - src_win = TUI_SRC_WIN; - first_win = src_win; - second_win = TUI_DISASM_WIN; - } - else - { - first_win = TUI_DATA_WIN; - src_win = *(tui_source_windows ().begin ()); - second_win = src_win; - } - /* Change the first window's height/width. */ - /* Check for invalid heights. */ - if (height_diff == 0) - new_height = first_win->height; - else if ((first_win->height + - second_win->height + (split_diff * 2)) >= - (screenheight - MIN_CMD_WIN_HEIGHT - 1)) - new_height = (screenheight - MIN_CMD_WIN_HEIGHT - 1) / 2; - else if ((first_win->height + split_diff) <= 0) - new_height = MIN_WIN_HEIGHT; - else - new_height = first_win->height + split_diff; - - first_win->resize (new_height, screenwidth, 0, 0); - - /* Change the second window's height/width. */ - /* Check for invalid heights. */ - if (height_diff == 0) - new_height = second_win->height; - else if ((first_win->height + - second_win->height + (split_diff * 2)) >= - (screenheight - MIN_CMD_WIN_HEIGHT - 1)) - { - new_height = screenheight - MIN_CMD_WIN_HEIGHT - 1; - if (new_height % 2) - new_height = (new_height / 2) + 1; - else - new_height /= 2; - } - else if ((second_win->height + split_diff) <= 0) - new_height = MIN_WIN_HEIGHT; - else - new_height = second_win->height + split_diff; - - second_win->resize (new_height, screenwidth, - 0, first_win->height - 1); - - locator->resize (1, screenwidth, - 0, second_win->origin.y + new_height); - - /* Change the command window's height/width. */ - new_height = screenheight - (locator->origin.y + 1); - TUI_CMD_WIN->resize (new_height, screenwidth, - 0, locator->origin.y + 1); - break; - } - - tui_delete_invisible_windows (); + tui_apply_current_layout (); /* Turn keypad back on, unless focus is in the command window. */ if (win_with_focus != TUI_CMD_WIN) @@ -799,18 +658,24 @@ static struct tui_win_info * tui_partial_win_by_name (gdb::string_view name) { - if (name != NULL) + struct tui_win_info *best = nullptr; + + for (tui_win_info *item : all_tui_windows ()) { - for (tui_win_info *item : all_tui_windows ()) - { - const char *cur_name = item->name (); + const char *cur_name = item->name (); - if (startswith (cur_name, name)) - return item; + if (name == cur_name) + return item; + if (startswith (cur_name, name)) + { + if (best != nullptr) + error (_("Window name \"%*s\" is ambiguous"), + (int) name.size (), name.data ()); + best = item; } } - return NULL; + return best; } /* Set focus to the window named by 'arg'. */ @@ -819,29 +684,27 @@ { tui_enable (); - if (arg != NULL) - { - struct tui_win_info *win_info = NULL; - - if (subset_compare (arg, "next")) - win_info = tui_next_win (tui_win_with_focus ()); - else if (subset_compare (arg, "prev")) - win_info = tui_prev_win (tui_win_with_focus ()); - else - win_info = tui_partial_win_by_name (arg); + if (arg == NULL) + error_no_arg (_("name of window to focus")); - if (win_info == NULL) - error (_("Unrecognized window name \"%s\""), arg); - if (!win_info->is_visible ()) - error (_("Window \"%s\" is not visible"), arg); + struct tui_win_info *win_info = NULL; - tui_set_win_focus_to (win_info); - keypad (TUI_CMD_WIN->handle.get (), win_info != TUI_CMD_WIN); - printf_filtered (_("Focus set to %s window.\n"), - tui_win_with_focus ()->name ()); - } + if (subset_compare (arg, "next")) + win_info = tui_next_win (tui_win_with_focus ()); + else if (subset_compare (arg, "prev")) + win_info = tui_prev_win (tui_win_with_focus ()); else - error (_("Incorrect Number of Arguments.\n%s"), FOCUS_USAGE); + win_info = tui_partial_win_by_name (arg); + + if (win_info == NULL) + error (_("Unrecognized window name \"%s\""), arg); + if (!win_info->is_visible ()) + error (_("Window \"%s\" is not visible"), arg); + + tui_set_win_focus_to (win_info); + keypad (TUI_CMD_WIN->handle.get (), win_info != TUI_CMD_WIN); + printf_filtered (_("Focus set to %s window.\n"), + tui_win_with_focus ()->name ()); } static void @@ -887,6 +750,8 @@ tui_refresh_all_win (); } +#define DEFAULT_TAB_LEN 8 + /* The tab width that should be used by the TUI. */ unsigned int tui_tab_width = DEFAULT_TAB_LEN; @@ -987,234 +852,59 @@ { /* Make sure the curses mode is enabled. */ tui_enable (); - if (arg != NULL) - { - const char *buf = arg; - const char *buf_ptr = buf; - int new_height; - struct tui_win_info *win_info; + if (arg == NULL) + error_no_arg (_("name of window")); - buf_ptr = strchr (buf_ptr, ' '); - if (buf_ptr != NULL) - { - /* Validate the window name. */ - gdb::string_view wname (buf, buf_ptr - buf); - win_info = tui_partial_win_by_name (wname); - - if (win_info == NULL) - error (_("Unrecognized window name \"%s\""), arg); - if (!win_info->is_visible ()) - error (_("Window \"%s\" is not visible"), arg); + const char *buf = arg; + const char *buf_ptr = buf; + int new_height; + struct tui_win_info *win_info; - /* Process the size. */ - buf_ptr = skip_spaces (buf_ptr); + buf_ptr = skip_to_space (buf_ptr); - if (*buf_ptr != '\0') - { - bool negate = false; - bool fixed_size = true; - int input_no;; - - if (*buf_ptr == '+' || *buf_ptr == '-') - { - if (*buf_ptr == '-') - negate = true; - fixed_size = false; - buf_ptr++; - } - input_no = atoi (buf_ptr); - if (input_no > 0) - { - if (negate) - input_no *= (-1); - if (fixed_size) - new_height = input_no; - else - new_height = win_info->height + input_no; - - /* Now change the window's height, and adjust - all other windows around it. */ - if (tui_adjust_win_heights (win_info, - new_height) == TUI_FAILURE) - warning (_("Invalid window height specified.\n%s"), - WIN_HEIGHT_USAGE); - else - tui_update_gdb_sizes (); - } - else - warning (_("Invalid window height specified.\n%s"), - WIN_HEIGHT_USAGE); - } - } - else - printf_filtered (WIN_HEIGHT_USAGE); - } - else - printf_filtered (WIN_HEIGHT_USAGE); -} + /* Validate the window name. */ + gdb::string_view wname (buf, buf_ptr - buf); + win_info = tui_partial_win_by_name (wname); -/* Function to adjust all window heights around the primary. */ -static enum tui_status -tui_adjust_win_heights (struct tui_win_info *primary_win_info, - int new_height) -{ - enum tui_status status = TUI_FAILURE; + if (win_info == NULL) + error (_("Unrecognized window name \"%s\""), arg); + if (!win_info->is_visible ()) + error (_("Window \"%s\" is not visible"), arg); - if (new_height_ok (primary_win_info, new_height)) + /* Process the size. */ + buf_ptr = skip_spaces (buf_ptr); + + if (*buf_ptr != '\0') { - status = TUI_SUCCESS; - if (new_height != primary_win_info->height) - { - int diff; - struct tui_win_info *win_info; - struct tui_locator_window *locator = tui_locator_win_info_ptr (); - enum tui_layout_type cur_layout = tui_current_layout (); - int width = tui_term_width (); - - diff = (new_height - primary_win_info->height) * (-1); - if (cur_layout == SRC_COMMAND - || cur_layout == DISASSEM_COMMAND) - { - struct tui_win_info *src_win_info; + bool negate = false; + bool fixed_size = true; + int input_no;; - primary_win_info->resize (new_height, width, - 0, primary_win_info->origin.y); - if (primary_win_info->type == CMD_WIN) - { - win_info = *(tui_source_windows ().begin ()); - src_win_info = win_info; - } - else - { - win_info = tui_win_list[CMD_WIN]; - src_win_info = primary_win_info; - } - win_info->resize (win_info->height + diff, width, - 0, win_info->origin.y); - TUI_CMD_WIN->origin.y = locator->origin.y + 1; - if ((src_win_info->type == SRC_WIN - || src_win_info->type == DISASSEM_WIN)) - { - tui_source_window_base *src_base - = (tui_source_window_base *) src_win_info; - if (src_base->content.empty ()) - src_base->erase_source_content (); - } - } + if (*buf_ptr == '+' || *buf_ptr == '-') + { + if (*buf_ptr == '-') + negate = true; + fixed_size = false; + buf_ptr++; + } + input_no = atoi (buf_ptr); + if (input_no > 0) + { + if (negate) + input_no *= (-1); + if (fixed_size) + new_height = input_no; else - { - struct tui_win_info *first_win; - struct tui_source_window_base *second_win; - tui_source_window_base *src1; - - if (cur_layout == SRC_DISASSEM_COMMAND) - { - src1 = TUI_SRC_WIN; - first_win = src1; - second_win = TUI_DISASM_WIN; - } - else - { - src1 = nullptr; - first_win = TUI_DATA_WIN; - second_win = *(tui_source_windows ().begin ()); - } - if (primary_win_info == TUI_CMD_WIN) - { /* Split the change in height across the 1st & 2nd - windows, adjusting them as well. */ - /* Subtract the locator. */ - int first_split_diff = diff / 2; - int second_split_diff = first_split_diff; - - if (diff % 2) - { - if (first_win->height > - second_win->height) - if (diff < 0) - first_split_diff--; - else - first_split_diff++; - else - { - if (diff < 0) - second_split_diff--; - else - second_split_diff++; - } - } - /* Make sure that the minimum heights are - honored. */ - while ((first_win->height + first_split_diff) < 3) - { - first_split_diff++; - second_split_diff--; - } - while ((second_win->height + second_split_diff) < 3) - { - second_split_diff++; - first_split_diff--; - } - first_win->resize (first_win->height + first_split_diff, - width, - 0, first_win->origin.y); - second_win->resize (second_win->height + second_split_diff, - width, - 0, first_win->height - 1); - locator->resize (1, width, - 0, (second_win->origin.y - + second_win->height + 1)); - - TUI_CMD_WIN->resize (new_height, width, - 0, locator->origin.y + 1); - } - else - { - if ((TUI_CMD_WIN->height + diff) < 1) - { /* If there is no way to increase the command - window take real estate from the 1st or 2nd - window. */ - if ((TUI_CMD_WIN->height + diff) < 1) - { - int i; - - for (i = TUI_CMD_WIN->height + diff; - (i < 1); i++) - if (primary_win_info == first_win) - second_win->height--; - else - first_win->height--; - } - } - if (primary_win_info == first_win) - first_win->resize (new_height, width, 0, 0); - else - first_win->resize (first_win->height, width, 0, 0); - second_win->origin.y = first_win->height - 1; - if (primary_win_info == second_win) - second_win->resize (new_height, width, - 0, first_win->height - 1); - else - second_win->resize (second_win->height, width, - 0, first_win->height - 1); - locator->resize (1, width, - 0, (second_win->origin.y - + second_win->height + 1)); - TUI_CMD_WIN->origin.y = locator->origin.y + 1; - if ((TUI_CMD_WIN->height + diff) < 1) - TUI_CMD_WIN->resize (1, width, 0, locator->origin.y + 1); - else - TUI_CMD_WIN->resize (TUI_CMD_WIN->height + diff, width, - 0, locator->origin.y + 1); - } - if (src1 != nullptr && src1->content.empty ()) - src1->erase_source_content (); - if (second_win->content.empty ()) - second_win->erase_source_content (); - } + new_height = win_info->height + input_no; + + /* Now change the window's height, and adjust + all other windows around it. */ + tui_adjust_window_height (win_info, new_height); + tui_update_gdb_sizes (); } + else + error (_("Invalid window height specified")); } - - return status; } /* See tui-data.h. */ @@ -1225,112 +915,14 @@ return tui_term_height () - 2; } -static int -new_height_ok (struct tui_win_info *primary_win_info, - int new_height) -{ - int ok = (new_height < tui_term_height ()); - - if (ok) - { - int diff; - enum tui_layout_type cur_layout = tui_current_layout (); - - diff = (new_height - primary_win_info->height) * (-1); - if (cur_layout == SRC_COMMAND || cur_layout == DISASSEM_COMMAND) - { - ok = (new_height <= primary_win_info->max_height () - && new_height >= MIN_CMD_WIN_HEIGHT); - if (ok) - { /* Check the total height. */ - struct tui_win_info *win_info; - - if (primary_win_info == TUI_CMD_WIN) - win_info = *(tui_source_windows ().begin ()); - else - win_info = TUI_CMD_WIN; - ok = ((new_height + - (win_info->height + diff)) <= tui_term_height ()); - } - } - else - { - int cur_total_height, total_height, min_height = 0; - struct tui_win_info *first_win; - struct tui_win_info *second_win; - - if (cur_layout == SRC_DISASSEM_COMMAND) - { - first_win = TUI_SRC_WIN; - second_win = TUI_DISASM_WIN; - } - else - { - first_win = TUI_DATA_WIN; - second_win = *(tui_source_windows ().begin ()); - } - /* We could simply add all the heights to obtain the same - result but below is more explicit since we subtract 1 for - the line that the first and second windows share, and add - one for the locator. */ - total_height = cur_total_height = - (first_win->height + second_win->height - 1) - + TUI_CMD_WIN->height + 1; /* Locator. */ - if (primary_win_info == TUI_CMD_WIN) - { - /* Locator included since first & second win share a line. */ - ok = ((first_win->height + - second_win->height + diff) >= - (MIN_WIN_HEIGHT * 2) - && new_height >= MIN_CMD_WIN_HEIGHT); - if (ok) - { - total_height = new_height + - (first_win->height + - second_win->height + diff); - min_height = MIN_CMD_WIN_HEIGHT; - } - } - else - { - min_height = MIN_WIN_HEIGHT; - - /* First see if we can increase/decrease the command - window. And make sure that the command window is at - least 1 line. */ - ok = ((TUI_CMD_WIN->height + diff) > 0); - if (!ok) - { /* Looks like we have to increase/decrease one of - the other windows. */ - if (primary_win_info == first_win) - ok = (second_win->height + diff) >= min_height; - else - ok = (first_win->height + diff) >= min_height; - } - if (ok) - { - if (primary_win_info == first_win) - total_height = new_height + - second_win->height + - TUI_CMD_WIN->height + diff; - else - total_height = new_height + - first_win->height + - TUI_CMD_WIN->height + diff; - } - } - /* Now make sure that the proposed total height doesn't - exceed the old total height. */ - if (ok) - ok = (new_height >= min_height - && total_height <= cur_total_height); - } - } +/* See tui-data.h. */ - return ok; +int +tui_win_info::max_width () const +{ + return tui_term_width () - 2; } - static void parse_scrolling_args (const char *arg, struct tui_win_info **win_to_scroll, @@ -1391,8 +983,9 @@ /* Function to initialize gdb commands, for tui window manipulation. */ +void _initialize_tui_win (); void -_initialize_tui_win (void) +_initialize_tui_win () { static struct cmd_list_element *tui_setlist; static struct cmd_list_element *tui_showlist; @@ -1400,14 +993,14 @@ /* Define the classes of commands. They will appear in the help list in the reverse of this order. */ - add_prefix_cmd ("tui", class_tui, set_tui_cmd, - _("TUI configuration variables."), - &tui_setlist, "set tui ", - 0 /* allow-unknown */, &setlist); - add_prefix_cmd ("tui", class_tui, show_tui_cmd, - _("TUI configuration variables."), - &tui_showlist, "show tui ", - 0 /* allow-unknown */, &showlist); + add_basic_prefix_cmd ("tui", class_tui, + _("TUI configuration variables."), + &tui_setlist, "set tui ", + 0 /* allow-unknown */, &setlist); + add_show_prefix_cmd ("tui", class_tui, + _("TUI configuration variables."), + &tui_showlist, "show tui ", + 0 /* allow-unknown */, &showlist); add_com ("refresh", class_tui, tui_refresh_all_command, _("Refresh the terminal display.")); @@ -1418,39 +1011,40 @@ deprecate_cmd (cmd, "set tui tab-width"); cmd = add_com ("winheight", class_tui, tui_set_win_height_command, _("\ -Set or modify the height of a specified window.\n" -WIN_HEIGHT_USAGE -"Window names are:\n\ - src : the source window\n\ - cmd : the command window\n\ - asm : the disassembly window\n\ - regs : the register display")); +Set or modify the height of a specified window.\n\ +Usage: winheight WINDOW-NAME [+ | -] NUM-LINES\n\ +Use \"info win\" to see the names of the windows currently being displayed.")); add_com_alias ("wh", "winheight", class_tui, 0); set_cmd_completer (cmd, winheight_completer); add_info ("win", tui_all_windows_info, - _("List of all displayed windows.")); + _("List of all displayed windows.\n\ +Usage: info win")); cmd = add_com ("focus", class_tui, tui_set_focus_command, _("\ -Set focus to named window or next/prev window.\n" -FOCUS_USAGE -"Valid Window names are:\n\ - src : the source window\n\ - asm : the disassembly window\n\ - regs : the register display\n\ - cmd : the command window")); +Set focus to named window or next/prev window.\n\ +Usage: focus [WINDOW-NAME | next | prev]\n\ +Use \"info win\" to see the names of the windows currently being displayed.")); add_com_alias ("fs", "focus", class_tui, 0); set_cmd_completer (cmd, focus_completer); add_com ("+", class_tui, tui_scroll_forward_command, _("\ Scroll window forward.\n\ -Usage: + [WIN] [N]")); +Usage: + [N] [WIN]\n\ +Scroll window WIN N lines forwards. Both WIN and N are optional, N\n\ +defaults to 1, and WIN defaults to the currently focused window.")); add_com ("-", class_tui, tui_scroll_backward_command, _("\ Scroll window backward.\n\ -Usage: - [WIN] [N]")); +Usage: - [N] [WIN]\n\ +Scroll window WIN N lines backwards. Both WIN and N are optional, N\n\ +defaults to 1, and WIN defaults to the currently focused window.")); add_com ("<", class_tui, tui_scroll_left_command, _("\ Scroll window text to the left.\n\ -Usage: < [WIN] [N]")); +Usage: < [N] [WIN]\n\ +Scroll window WIN N characters left. Both WIN and N are optional, N\n\ +defaults to 1, and WIN defaults to the currently focused window.")); add_com (">", class_tui, tui_scroll_right_command, _("\ Scroll window text to the right.\n\ -Usage: > [WIN] [N]")); +Usage: > [N] [WIN]\n\ +Scroll window WIN N characters right. Both WIN and N are optional, N\n\ +defaults to 1, and WIN defaults to the currently focused window.")); /* Define the tui control variables. */ add_setshow_enum_cmd ("border-kind", no_class, tui_border_kind_enums, diff -Nru gdb-9.1/gdb/tui/tui-wingeneral.c gdb-10.2/gdb/tui/tui-wingeneral.c --- gdb-9.1/gdb/tui/tui-wingeneral.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/tui/tui-wingeneral.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* General window behavior. - Copyright (C) 1998-2020 Free Software Foundation, Inc. + Copyright (C) 1998-2021 Free Software Foundation, Inc. Contributed by Hewlett-Packard Company. @@ -30,13 +30,51 @@ #include "gdb_curses.h" +/* This is true if we're currently suppressing output, via + wnoutrefresh. This is needed in case we create a new window while + in this mode. */ + +static bool suppress_output; + +/* See tui-data.h. */ + +tui_suppress_output::tui_suppress_output () + : m_saved_suppress (suppress_output) +{ + suppress_output = true; + + for (const auto &win : all_tui_windows ()) + win->no_refresh (); +} + +/* See tui-data.h. */ + +tui_suppress_output::~tui_suppress_output () +{ + suppress_output = m_saved_suppress; + if (!suppress_output) + doupdate (); + + for (const auto &win : all_tui_windows ()) + win->refresh_window (); +} + +/* See tui-data.h. */ + +void +tui_wrefresh (WINDOW *win) +{ + if (!suppress_output) + wrefresh (win); +} + /* See tui-data.h. */ void -tui_gen_win_info::refresh_window () +tui_win_info::refresh_window () { if (handle != NULL) - wrefresh (handle.get ()); + tui_wrefresh (handle.get ()); } /* Draw a border arround the window. */ @@ -55,9 +93,10 @@ /* tui_apply_style resets the style entirely, so be sure to call it before applying ATTRS. */ - tui_apply_style (win, (highlight_flag - ? tui_active_border_style.style () - : tui_border_style.style ())); + if (cli_styling) + tui_apply_style (win, (highlight_flag + ? tui_active_border_style.style () + : tui_border_style.style ())); wattron (win, attrs); #ifdef HAVE_WBORDER wborder (win, tui_border_vline, tui_border_vline, @@ -74,13 +113,13 @@ int max_len = win_info->width - 2 - 2; if (win_info->title.size () <= max_len) - mvwaddstr (win, 0, 3, win_info->title.c_str ()); + mvwaddstr (win, 0, 2, win_info->title.c_str ()); else { std::string truncated = "..." + win_info->title.substr (win_info->title.size () - max_len + 3); - mvwaddstr (win, 0, 3, truncated.c_str ()); + mvwaddstr (win, 0, 2, truncated.c_str ()); } } wattroff (win, attrs); @@ -127,28 +166,25 @@ } } - -void -tui_gen_win_info::make_window () -{ - handle.reset (newwin (height, width, origin.y, origin.x)); - if (handle != NULL) - scrollok (handle.get (), TRUE); -} - void tui_win_info::make_window () { - tui_gen_win_info::make_window (); - if (handle != NULL && can_box ()) - box_win (this, false); + handle.reset (newwin (height, width, y, x)); + if (handle != NULL) + { + if (suppress_output) + wnoutrefresh (handle.get ()); + scrollok (handle.get (), TRUE); + if (can_box ()) + box_win (this, false); + } } /* We can't really make windows visible, or invisible. So we have to delete the entire window when making it visible, and create it again when making it visible. */ void -tui_gen_win_info::make_visible (bool visible) +tui_win_info::make_visible (bool visible) { if (is_visible () == visible) return; @@ -159,15 +195,6 @@ handle.reset (nullptr); } -/* See tui-wingeneral.h. */ - -void -tui_make_all_invisible (void) -{ - for (tui_win_info *win_info : all_tui_windows ()) - win_info->make_visible (false); -} - /* Function to refresh all the windows currently displayed. */ void diff -Nru gdb-9.1/gdb/tui/tui-wingeneral.h gdb-10.2/gdb/tui/tui-wingeneral.h --- gdb-9.1/gdb/tui/tui-wingeneral.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/tui/tui-wingeneral.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* General window behavior. - Copyright (C) 1998-2020 Free Software Foundation, Inc. + Copyright (C) 1998-2021 Free Software Foundation, Inc. Contributed by Hewlett-Packard Company. @@ -26,11 +26,31 @@ struct tui_win_info; -/* Makes all windows invisible. */ -extern void tui_make_all_invisible (void); - extern void tui_unhighlight_win (struct tui_win_info *); extern void tui_highlight_win (struct tui_win_info *); extern void tui_refresh_all (); +/* An RAII class that suppresses output on construction (calling + wnoutrefresh on the existing windows), and then flushes the output + (via doupdate) when destroyed. */ + +class tui_suppress_output +{ +public: + + tui_suppress_output (); + ~tui_suppress_output (); + + DISABLE_COPY_AND_ASSIGN (tui_suppress_output); + +private: + + /* Save the state of the suppression global. */ + bool m_saved_suppress; +}; + +/* Call wrefresh on the given window. However, if output is being + suppressed via tui_suppress_output, do not call wrefresh. */ +extern void tui_wrefresh (WINDOW *win); + #endif /* TUI_TUI_WINGENERAL_H */ diff -Nru gdb-9.1/gdb/tui/tui-win.h gdb-10.2/gdb/tui/tui-win.h --- gdb-9.1/gdb/tui/tui-win.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/tui/tui-win.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* TUI window generic functions. - Copyright (C) 1998-2020 Free Software Foundation, Inc. + Copyright (C) 1998-2021 Free Software Foundation, Inc. Contributed by Hewlett-Packard Company. @@ -24,12 +24,6 @@ #include "tui/tui-data.h" -struct tui_win_info; - -extern void tui_scroll_forward (struct tui_win_info *, int); -extern void tui_scroll_backward (struct tui_win_info *, int); -extern void tui_scroll_left (struct tui_win_info *, int); -extern void tui_scroll_right (struct tui_win_info *, int); extern void tui_set_win_focus_to (struct tui_win_info *); extern void tui_resize_all (void); extern void tui_refresh_all_win (void); @@ -44,7 +38,7 @@ extern int tui_border_attrs; extern int tui_active_border_attrs; -extern int tui_update_variables (void); +extern bool tui_update_variables (); extern void tui_initialize_win (void); diff -Nru gdb-9.1/gdb/tui/tui-winsource.c gdb-10.2/gdb/tui/tui-winsource.c --- gdb-9.1/gdb/tui/tui-winsource.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/tui/tui-winsource.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* TUI display source/assembly window. - Copyright (C) 1998-2020 Free Software Foundation, Inc. + Copyright (C) 1998-2021 Free Software Foundation, Inc. Contributed by Hewlett-Packard Company. @@ -57,10 +57,7 @@ tui_update_source_windows_with_addr (gdbarch, addr); s = find_pc_line_symtab (addr); - if (s != NULL) - tui_update_locator_fullname (symtab_to_fullname (s)); - else - tui_update_locator_fullname ("??"); + tui_update_locator_fullname (s); } } } @@ -170,11 +167,10 @@ void tui_source_window_base::update_source_window (struct gdbarch *gdbarch, - struct symtab *s, - struct tui_line_or_address line_or_addr) + const struct symtab_and_line &sal) { - horizontal_offset = 0; - update_source_window_as_is (gdbarch, s, line_or_addr); + m_horizontal_offset = 0; + update_source_window_as_is (gdbarch, sal); } @@ -183,33 +179,17 @@ void tui_source_window_base::update_source_window_as_is (struct gdbarch *gdbarch, - struct symtab *s, - struct tui_line_or_address line_or_addr) + const struct symtab_and_line &sal) { - enum tui_status ret - = set_contents (gdbarch, s, line_or_addr); + bool ret = set_contents (gdbarch, sal); - if (ret == TUI_FAILURE) + if (!ret) erase_source_content (); else { update_breakpoint_info (nullptr, false); show_source_content (); update_exec_info (); - if (type == SRC_WIN) - { - symtab_and_line sal; - - sal.line = line_or_addr.u.line_no + (content.size () - 2); - sal.symtab = s; - sal.pspace = SYMTAB_PSPACE (s); - set_current_source_symtab_and_line (sal); - /* If the focus was in the asm win, put it in the src win if - we don't have a split layout. */ - if (tui_win_with_focus () == TUI_DISASM_WIN - && tui_current_layout () != SRC_DISASSEM_COMMAND) - tui_set_win_focus_to (this); - } } } @@ -219,67 +199,28 @@ void tui_update_source_windows_with_addr (struct gdbarch *gdbarch, CORE_ADDR addr) { + struct symtab_and_line sal {}; if (addr != 0) - { - struct symtab_and_line sal; - struct tui_line_or_address l; - - switch (tui_current_layout ()) - { - case DISASSEM_COMMAND: - case DISASSEM_DATA_COMMAND: - tui_show_disassem (gdbarch, addr); - break; - case SRC_DISASSEM_COMMAND: - tui_show_disassem_and_update_source (gdbarch, addr); - break; - default: - sal = find_pc_line (addr, 0); - l.loa = LOA_LINE; - l.u.line_no = sal.line; - TUI_SRC_WIN->show_symtab_source (gdbarch, sal.symtab, l); - break; - } - } - else - { - for (struct tui_source_window_base *win_info : tui_source_windows ()) - win_info->erase_source_content (); - } + sal = find_pc_line (addr, 0); + + for (struct tui_source_window_base *win_info : tui_source_windows ()) + win_info->update_source_window (gdbarch, sal); } -/* Function to ensure that the source and/or disassemly windows - reflect the input address. */ +/* Function to ensure that the source and/or disassembly windows + reflect the symtab and line. */ void -tui_update_source_windows_with_line (struct symtab *s, int line) +tui_update_source_windows_with_line (struct symtab_and_line sal) { - struct gdbarch *gdbarch; - CORE_ADDR pc; - struct tui_line_or_address l; - - if (!s) - return; - - gdbarch = get_objfile_arch (SYMTAB_OBJFILE (s)); - - switch (tui_current_layout ()) - { - case DISASSEM_COMMAND: - case DISASSEM_DATA_COMMAND: - find_line_pc (s, line, &pc); - tui_update_source_windows_with_addr (gdbarch, pc); - break; - default: - l.loa = LOA_LINE; - l.u.line_no = line; - TUI_SRC_WIN->show_symtab_source (gdbarch, s, l); - if (tui_current_layout () == SRC_DISASSEM_COMMAND) - { - find_line_pc (s, line, &pc); - tui_show_disassem (gdbarch, pc); - } - break; + struct gdbarch *gdbarch = nullptr; + if (sal.symtab != nullptr) + { + find_line_pc (sal.symtab, sal.line, &sal.pc); + gdbarch = SYMTAB_OBJFILE (sal.symtab)->arch (); } + + for (struct tui_source_window_base *win_info : tui_source_windows ()) + win_info->update_source_window (gdbarch, sal); } void @@ -288,7 +229,7 @@ int x_pos; int half_width = (width - 2) / 2; - content.clear (); + m_content.clear (); if (handle != NULL) { werase (handle.get ()); @@ -309,48 +250,46 @@ /* Redraw the complete line of a source or disassembly window. */ -static void -tui_show_source_line (struct tui_source_window_base *win_info, int lineno) +void +tui_source_window_base::show_source_line (int lineno) { struct tui_source_element *line; int x; - line = &win_info->content[lineno - 1]; + line = &m_content[lineno - 1]; if (line->is_exec_point) - tui_set_reverse_mode (win_info->handle.get (), true); + tui_set_reverse_mode (handle.get (), true); - wmove (win_info->handle.get (), lineno, TUI_EXECINFO_SIZE); - tui_puts (line->line.c_str (), win_info->handle.get ()); + wmove (handle.get (), lineno, TUI_EXECINFO_SIZE); + tui_puts (line->line.c_str (), handle.get ()); if (line->is_exec_point) - tui_set_reverse_mode (win_info->handle.get (), false); + tui_set_reverse_mode (handle.get (), false); /* Clear to end of line but stop before the border. */ - x = getcurx (win_info->handle.get ()); - while (x + 1 < win_info->width) + x = getcurx (handle.get ()); + while (x + 1 < width) { - waddch (win_info->handle.get (), ' '); - x = getcurx (win_info->handle.get ()); + waddch (handle.get (), ' '); + x = getcurx (handle.get ()); } } void tui_source_window_base::show_source_content () { - gdb_assert (!content.empty ()); + gdb_assert (!m_content.empty ()); - for (int lineno = 1; lineno <= content.size (); lineno++) - tui_show_source_line (this, lineno); + for (int lineno = 1; lineno <= m_content.size (); lineno++) + show_source_line (lineno); check_and_display_highlight_if_needed (); refresh_window (); } -tui_source_window_base::tui_source_window_base (enum tui_win_type type) - : tui_win_info (type) +tui_source_window_base::tui_source_window_base () { - gdb_assert (type == SRC_WIN || type == DISASSEM_WIN); - start_line_or_addr.loa = LOA_ADDRESS; - start_line_or_addr.u.addr = 0; + m_start_line_or_addr.loa = LOA_ADDRESS; + m_start_line_or_addr.u.addr = 0; gdb::observers::source_styling_changed.attach (std::bind (&tui_source_window::style_changed, this), @@ -374,35 +313,28 @@ void tui_source_window_base::rerender () { - if (!content.empty ()) + if (!m_content.empty ()) { - struct tui_line_or_address line_or_addr; struct symtab_and_line cursal = get_current_source_symtab_and_line (); - line_or_addr = start_line_or_addr; - update_source_window (gdbarch, cursal.symtab, line_or_addr); + if (m_start_line_or_addr.loa == LOA_LINE) + cursal.line = m_start_line_or_addr.u.line_no; + else + cursal.pc = m_start_line_or_addr.u.addr; + update_source_window (m_gdbarch, cursal); } else if (deprecated_safe_get_selected_frame () != NULL) { - struct tui_line_or_address line; struct symtab_and_line cursal = get_current_source_symtab_and_line (); struct frame_info *frame = deprecated_safe_get_selected_frame (); struct gdbarch *gdbarch = get_frame_arch (frame); struct symtab *s = find_pc_line_symtab (get_frame_pc (frame)); - if (type == SRC_WIN) - { - line.loa = LOA_LINE; - line.u.line_no = cursal.line; - } - else - { - line.loa = LOA_ADDRESS; - find_line_pc (s, cursal.line, &line.u.addr); - } - update_source_window (gdbarch, s, line); + if (this != TUI_SRC_WIN) + find_line_pc (s, cursal.line, &cursal.pc); + update_source_window (gdbarch, cursal); } else erase_source_content (); @@ -413,17 +345,28 @@ void tui_source_window_base::refill () { - symtab *s = nullptr; + symtab_and_line sal {}; - if (type == SRC_WIN) + if (this == TUI_SRC_WIN) { - symtab_and_line cursal = get_current_source_symtab_and_line (); - s = (cursal.symtab == NULL - ? find_pc_line_symtab (get_frame_pc (get_selected_frame (NULL))) - : cursal.symtab); + sal = get_current_source_symtab_and_line (); + if (sal.symtab == NULL) + { + struct frame_info *fi = deprecated_safe_get_selected_frame (); + if (fi != nullptr) + sal = find_pc_line (get_frame_pc (fi), 0); + } } - update_source_window_as_is (gdbarch, s, content[0].line_or_addr); + if (sal.pspace == nullptr) + sal.pspace = current_program_space; + + if (m_start_line_or_addr.loa == LOA_LINE) + sal.line = m_start_line_or_addr.u.line_no; + else + sal.pc = m_start_line_or_addr.u.addr; + + update_source_window_as_is (m_gdbarch, sal); } /* Scroll the source forward or backward horizontally. */ @@ -431,12 +374,12 @@ void tui_source_window_base::do_scroll_horizontal (int num_to_scroll) { - if (!content.empty ()) + if (!m_content.empty ()) { - int offset = horizontal_offset + num_to_scroll; + int offset = m_horizontal_offset + num_to_scroll; if (offset < 0) offset = 0; - horizontal_offset = offset; + m_horizontal_offset = offset; refill (); } } @@ -452,26 +395,23 @@ int i; i = 0; - while (i < content.size ()) + while (i < m_content.size ()) { bool new_state; struct tui_line_or_address content_loa = - content[i].line_or_addr; + m_content[i].line_or_addr; - gdb_assert (l.loa == LOA_ADDRESS || l.loa == LOA_LINE); - gdb_assert (content_loa.loa == LOA_LINE - || content_loa.loa == LOA_ADDRESS); if (content_loa.loa == l.loa && ((l.loa == LOA_LINE && content_loa.u.line_no == l.u.line_no) || (l.loa == LOA_ADDRESS && content_loa.u.addr == l.u.addr))) new_state = true; else new_state = false; - if (new_state != content[i].is_exec_point) + if (new_state != m_content[i].is_exec_point) { changed = true; - content[i].is_exec_point = new_state; - tui_show_source_line (this, i + 1); + m_content[i].is_exec_point = new_state; + show_source_line (i + 1); } i++; } @@ -505,11 +445,11 @@ int i; bool need_refresh = false; - for (i = 0; i < content.size (); i++) + for (i = 0; i < m_content.size (); i++) { struct tui_source_element *line; - line = &content[i]; + line = &m_content[i]; if (current_only && !line->is_exec_point) continue; @@ -521,9 +461,6 @@ { struct bp_location *loc; - gdb_assert (line->line_or_addr.loa == LOA_LINE - || line->line_or_addr.loa == LOA_ADDRESS); - if (bp == being_deleted) return false; @@ -561,9 +498,9 @@ tui_source_window_base::update_exec_info () { update_breakpoint_info (nullptr, true); - for (int i = 0; i < content.size (); i++) + for (int i = 0; i < m_content.size (); i++) { - struct tui_source_element *src_element = &content[i]; + struct tui_source_element *src_element = &m_content[i]; char element[TUI_EXECINFO_SIZE] = " "; /* Now update the exec info content based upon the state diff -Nru gdb-9.1/gdb/tui/tui-winsource.h gdb-10.2/gdb/tui/tui-winsource.h --- gdb-9.1/gdb/tui/tui-winsource.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/tui/tui-winsource.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* TUI display source/assembly window. - Copyright (C) 1998-2020 Free Software Foundation, Inc. + Copyright (C) 1998-2021 Free Software Foundation, Inc. Contributed by Hewlett-Packard Company. @@ -25,6 +25,23 @@ #include "tui/tui-data.h" #include "symtab.h" +enum tui_line_or_address_kind +{ + LOA_LINE, + LOA_ADDRESS +}; + +/* Structure describing source line or line address. */ +struct tui_line_or_address +{ + enum tui_line_or_address_kind loa; + union + { + int line_no; + CORE_ADDR addr; + } u; +}; + /* Flags to tell what kind of breakpoint is at current line. */ enum tui_bp_flag { @@ -75,7 +92,7 @@ struct tui_source_window_base : public tui_win_info { protected: - explicit tui_source_window_base (enum tui_win_type type); + tui_source_window_base (); ~tui_source_window_base (); DISABLE_COPY_AND_ASSIGN (tui_source_window_base); @@ -87,10 +104,20 @@ void rerender () override; - virtual enum tui_status set_contents - (struct gdbarch *gdbarch, - struct symtab *s, - struct tui_line_or_address line_or_addr) = 0; + virtual bool set_contents (struct gdbarch *gdbarch, + const struct symtab_and_line &sal) = 0; + + /* Redraw the complete line of a source or disassembly window. */ + void show_source_line (int lineno); + + /* Used for horizontal scroll. */ + int m_horizontal_offset = 0; + struct tui_line_or_address m_start_line_or_addr; + + /* Architecture associated with code at this location. */ + struct gdbarch *m_gdbarch = nullptr; + + std::vector<tui_source_element> m_content; public: @@ -109,15 +136,12 @@ /* Update the window to display the given location. Does nothing if the location is already displayed. */ - virtual void maybe_update (struct frame_info *fi, symtab_and_line sal, - int line_no, CORE_ADDR addr) = 0; + virtual void maybe_update (struct frame_info *fi, symtab_and_line sal) = 0; void update_source_window_as_is (struct gdbarch *gdbarch, - struct symtab *s, - struct tui_line_or_address line_or_addr); + const struct symtab_and_line &sal); void update_source_window (struct gdbarch *gdbarch, - struct symtab *s, - struct tui_line_or_address line_or_addr); + const struct symtab_and_line &sal); /* Scan the source window and the breakpoints to update the break_mode information for each line. Returns true if something @@ -130,14 +154,9 @@ /* Erase the source content. */ virtual void erase_source_content () = 0; - /* Used for horizontal scroll. */ - int horizontal_offset = 0; - struct tui_line_or_address start_line_or_addr; - - /* Architecture associated with code at this location. */ - struct gdbarch *gdbarch = nullptr; - - std::vector<tui_source_element> content; + /* Return the start address and gdbarch. */ + virtual void display_start_addr (struct gdbarch **gdbarch_p, + CORE_ADDR *addr_p) = 0; private: @@ -158,6 +177,8 @@ { public: + typedef std::vector<tui_win_info *>::iterator inner_iterator; + typedef tui_source_window_iterator self_type; typedef struct tui_source_window_base *value_type; typedef struct tui_source_window_base *&reference; @@ -165,14 +186,16 @@ typedef std::forward_iterator_tag iterator_category; typedef int difference_type; - explicit tui_source_window_iterator (bool dummy) - : m_iter (SRC_WIN) + explicit tui_source_window_iterator (const inner_iterator &it, + const inner_iterator &end) + : m_iter (it), + m_end (end) { advance (); } - tui_source_window_iterator () - : m_iter (tui_win_type (DISASSEM_WIN + 1)) + explicit tui_source_window_iterator (const inner_iterator &it) + : m_iter (it) { } @@ -183,7 +206,7 @@ value_type operator* () const { - return (value_type) *m_iter; + return dynamic_cast<tui_source_window_base *> (*m_iter); } self_type &operator++ () @@ -197,26 +220,33 @@ void advance () { - tui_window_iterator end; - while (m_iter != end && *m_iter == nullptr) + while (m_iter != m_end + && dynamic_cast<tui_source_window_base *> (*m_iter) == nullptr) ++m_iter; } - tui_window_iterator m_iter; + inner_iterator m_iter; + inner_iterator m_end; }; /* A range adapter for source windows. */ struct tui_source_windows { + /* Work around Wmaybe-uninitalized warning with g++ 11.0.0, see also + PR gcc/96295. Note that "tui_source_windows () = default" doesn't work + around the warning. */ + tui_source_windows () {} + tui_source_window_iterator begin () const { - return tui_source_window_iterator (true); + return tui_source_window_iterator (tui_windows.begin (), + tui_windows.end ()); } tui_source_window_iterator end () const { - return tui_source_window_iterator (); + return tui_source_window_iterator (tui_windows.end ()); } }; @@ -232,8 +262,7 @@ /* Function to display the "main" routine. */ extern void tui_display_main (void); extern void tui_update_source_windows_with_addr (struct gdbarch *, CORE_ADDR); -extern void tui_update_source_windows_with_line (struct symtab *, - int); +extern void tui_update_source_windows_with_line (struct symtab_and_line sal); /* Extract some source text from PTR. LINE_NO is the line number. If it is positive, it is printed at the start of the line. FIRST_COL diff -Nru gdb-9.1/gdb/typeprint.c gdb-10.2/gdb/typeprint.c --- gdb-9.1/gdb/typeprint.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/typeprint.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Language independent support for printing types for GDB, the GNU debugger. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -110,14 +110,14 @@ print_offset_data::update (struct type *type, unsigned int field_idx, struct ui_file *stream) { - if (field_is_static (&TYPE_FIELD (type, field_idx))) + if (field_is_static (&type->field (field_idx))) { print_spaces_filtered (indentation, stream); return; } - struct type *ftype = check_typedef (TYPE_FIELD_TYPE (type, field_idx)); - if (TYPE_CODE (type) == TYPE_CODE_UNION) + struct type *ftype = check_typedef (type->field (field_idx).type ()); + if (type->code () == TYPE_CODE_UNION) { /* Since union fields don't have the concept of offsets, we just print their sizes. */ @@ -368,15 +368,6 @@ LA_PRINT_TYPEDEF (type, newobj, stream); } -/* The default way to print a typedef. */ - -void -default_print_typedef (struct type *type, struct symbol *new_symbol, - struct ui_file *stream) -{ - error (_("Language not supported.")); -} - /* Print a description of a type TYPE in the form of a declaration of a variable named VARSTRING. (VARSTRING is demangled if necessary.) Output goes to STREAM (via stdio). @@ -515,7 +506,7 @@ Use check_typedef to resolve stubs, but ignore its result because we do not want to dig past all typedefs. */ check_typedef (type); - if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF) + if (type->code () == TYPE_CODE_TYPEDEF) type = TYPE_TARGET_TYPE (type); /* If the expression is actually a type, then there's no @@ -540,16 +531,16 @@ get_user_print_options (&opts); if (val != NULL && opts.objectprint) { - if (((TYPE_CODE (type) == TYPE_CODE_PTR) || TYPE_IS_REFERENCE (type)) - && (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_STRUCT)) + if (((type->code () == TYPE_CODE_PTR) || TYPE_IS_REFERENCE (type)) + && (TYPE_TARGET_TYPE (type)->code () == TYPE_CODE_STRUCT)) real_type = value_rtti_indirect_type (val, &full, &top, &using_enc); - else if (TYPE_CODE (type) == TYPE_CODE_STRUCT) + else if (type->code () == TYPE_CODE_STRUCT) real_type = value_rtti_type (val, &full, &top, &using_enc); } if (flags.print_offsets - && (TYPE_CODE (type) == TYPE_CODE_STRUCT - || TYPE_CODE (type) == TYPE_CODE_UNION)) + && (type->code () == TYPE_CODE_STRUCT + || type->code () == TYPE_CODE_UNION)) fprintf_filtered (gdb_stdout, "/* offset | size */ "); printf_filtered ("type = "); @@ -615,11 +606,11 @@ type = check_typedef (type); - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_ENUM: - len = TYPE_NFIELDS (type); + len = type->num_fields (); for (i = 0; i < len; i++) { if (TYPE_FIELD_ENUMVAL (type, i) == val) @@ -715,20 +706,6 @@ struct cmd_list_element *showprinttypelist; -static void -set_print_type (const char *arg, int from_tty) -{ - printf_unfiltered ( - "\"set print type\" must be followed by the name of a subcommand.\n"); - help_list (setprintlist, "set print type ", all_commands, gdb_stdout); -} - -static void -show_print_type (const char *args, int from_tty) -{ - cmd_show_list (showprinttypelist, from_tty, ""); -} - static bool print_methods = true; static void @@ -798,8 +775,9 @@ } } +void _initialize_typeprint (); void -_initialize_typeprint (void) +_initialize_typeprint () { struct cmd_list_element *c; @@ -826,12 +804,14 @@ Only one level of typedefs is unrolled. See also \"ptype\".")); set_cmd_completer (c, expression_completer); - add_prefix_cmd ("type", no_class, show_print_type, - _("Generic command for showing type-printing settings."), - &showprinttypelist, "show print type ", 0, &showprintlist); - add_prefix_cmd ("type", no_class, set_print_type, - _("Generic command for setting how types print."), - &setprinttypelist, "set print type ", 0, &setprintlist); + add_show_prefix_cmd ("type", no_class, + _("Generic command for showing type-printing settings."), + &showprinttypelist, "show print type ", 0, + &showprintlist); + add_basic_prefix_cmd ("type", no_class, + _("Generic command for setting how types print."), + &setprinttypelist, "set print type ", 0, + &setprintlist); add_setshow_boolean_cmd ("methods", no_class, &print_methods, _("\ diff -Nru gdb-9.1/gdb/typeprint.h gdb-10.2/gdb/typeprint.h --- gdb-9.1/gdb/typeprint.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/typeprint.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Language independent support for printing types for GDB, the GNU debugger. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/type-stack.c gdb-10.2/gdb/type-stack.c --- gdb-9.1/gdb/type-stack.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/type-stack.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Type stack for GDB parser. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -33,12 +33,14 @@ gdb_assert (tp == tp_pointer || tp == tp_reference || tp == tp_rvalue_reference || tp == tp_const - || tp == tp_volatile); + || tp == tp_volatile || tp == tp_restrict + || tp == tp_atomic); /* If there is anything on the stack (we know it will be a tp_pointer), insert the qualifier above it. Otherwise, simply push this on the top of the stack. */ - if (!m_elements.empty () && (tp == tp_const || tp == tp_volatile)) + if (!m_elements.empty () && (tp == tp_const || tp == tp_volatile + || tp == tp_restrict)) slot = 1; else slot = 0; @@ -88,6 +90,12 @@ case tp_volatile: flags |= TYPE_INSTANCE_FLAG_VOLATILE; break; + case tp_atomic: + flags |= TYPE_INSTANCE_FLAG_ATOMIC; + break; + case tp_restrict: + flags |= TYPE_INSTANCE_FLAG_RESTRICT; + break; default: gdb_assert_not_reached ("unrecognized tp_ value in follow_types"); } @@ -102,6 +110,8 @@ int make_const = 0; int make_volatile = 0; int make_addr_space = 0; + bool make_restrict = false; + bool make_atomic = false; int array_size; while (!done) @@ -109,19 +119,7 @@ { case tp_end: done = 1; - if (make_const) - follow_type = make_cv_type (make_const, - TYPE_VOLATILE (follow_type), - follow_type, 0); - if (make_volatile) - follow_type = make_cv_type (TYPE_CONST (follow_type), - make_volatile, - follow_type, 0); - if (make_addr_space) - follow_type = make_type_with_address_space (follow_type, - make_addr_space); - make_const = make_volatile = 0; - make_addr_space = 0; + goto process_qualifiers; break; case tp_const: make_const = 1; @@ -132,41 +130,39 @@ case tp_space_identifier: make_addr_space = pop_int (); break; + case tp_atomic: + make_atomic = true; + break; + case tp_restrict: + make_restrict = true; + break; case tp_pointer: follow_type = lookup_pointer_type (follow_type); + goto process_qualifiers; + case tp_reference: + follow_type = lookup_lvalue_reference_type (follow_type); + goto process_qualifiers; + case tp_rvalue_reference: + follow_type = lookup_rvalue_reference_type (follow_type); + process_qualifiers: if (make_const) - follow_type = make_cv_type (make_const, - TYPE_VOLATILE (follow_type), + follow_type = make_cv_type (make_const, + TYPE_VOLATILE (follow_type), follow_type, 0); if (make_volatile) - follow_type = make_cv_type (TYPE_CONST (follow_type), - make_volatile, + follow_type = make_cv_type (TYPE_CONST (follow_type), + make_volatile, follow_type, 0); if (make_addr_space) - follow_type = make_type_with_address_space (follow_type, + follow_type = make_type_with_address_space (follow_type, make_addr_space); + if (make_restrict) + follow_type = make_restrict_type (follow_type); + if (make_atomic) + follow_type = make_atomic_type (follow_type); make_const = make_volatile = 0; make_addr_space = 0; - break; - case tp_reference: - follow_type = lookup_lvalue_reference_type (follow_type); - goto process_reference; - case tp_rvalue_reference: - follow_type = lookup_rvalue_reference_type (follow_type); - process_reference: - if (make_const) - follow_type = make_cv_type (make_const, - TYPE_VOLATILE (follow_type), - follow_type, 0); - if (make_volatile) - follow_type = make_cv_type (TYPE_CONST (follow_type), - make_volatile, - follow_type, 0); - if (make_addr_space) - follow_type = make_type_with_address_space (follow_type, - make_addr_space); - make_const = make_volatile = 0; - make_addr_space = 0; + make_restrict = make_atomic = false; break; case tp_array: array_size = pop_int (); @@ -176,8 +172,7 @@ lookup_array_range_type (follow_type, 0, array_size >= 0 ? array_size - 1 : 0); if (array_size < 0) - TYPE_HIGH_BOUND_KIND (TYPE_INDEX_TYPE (follow_type)) - = PROP_UNDEFINED; + follow_type->bounds ()->high.set_undefined (); break; case tp_function: /* FIXME-type-allocation: need a way to free this type when we are diff -Nru gdb-9.1/gdb/type-stack.h gdb-10.2/gdb/type-stack.h --- gdb-9.1/gdb/type-stack.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/type-stack.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Type stack for GDB parser. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -40,6 +40,8 @@ tp_const, tp_volatile, tp_space_identifier, + tp_atomic, + tp_restrict, tp_type_stack, tp_kind }; diff -Nru gdb-9.1/gdb/ui-file.c gdb-10.2/gdb/ui-file.c --- gdb-9.1/gdb/ui-file.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/ui-file.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* UI_FILE - a generic STDIO like output stream. - Copyright (C) 1999-2020 Free Software Foundation, Inc. + Copyright (C) 1999-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -22,7 +22,7 @@ #include "defs.h" #include "ui-file.h" #include "gdb_obstack.h" -#include "gdb_select.h" +#include "gdbsupport/gdb_select.h" #include "gdbsupport/filestuff.h" #include "cli/cli-style.h" @@ -90,18 +90,6 @@ -void -ui_file_flush (struct ui_file *file) -{ - file->flush (); -} - -int -ui_file_isatty (struct ui_file *file) -{ - return file->isatty (); -} - /* true if the gdb terminal supports styling, and styling is enabled. */ static bool @@ -126,35 +114,6 @@ return true; } - -void -ui_file_write (struct ui_file *file, - const char *buf, - long length_buf) -{ - file->write (buf, length_buf); -} - -void -ui_file_write_async_safe (struct ui_file *file, - const char *buf, - long length_buf) -{ - file->write_async_safe (buf, length_buf); -} - -long -ui_file_read (struct ui_file *file, char *buf, long length_buf) -{ - return file->read (buf, length_buf); -} - -void -ui_file_puts (struct ui_file *file, const char *buf) -{ - file->puts (buf); -} - string_file::~string_file () @@ -302,7 +261,7 @@ bool stdio_file::can_emit_style_escape () { - return (this == gdb_stdout + return ((this == gdb_stdout || this == gdb_stderr) && this->isatty () && term_cli_styling ()); } @@ -315,7 +274,7 @@ void stderr_file::write (const char *buf, long length_buf) { - ui_file_flush (gdb_stdout); + gdb_stdout->flush (); stdio_file::write (buf, length_buf); } @@ -325,7 +284,7 @@ void stderr_file::puts (const char *linebuffer) { - ui_file_flush (gdb_stdout); + gdb_stdout->flush (); stdio_file::puts (linebuffer); } @@ -391,7 +350,7 @@ bool tee_file::can_emit_style_escape () { - return (this == gdb_stdout + return ((this == gdb_stdout || this == gdb_stderr) && m_one->term_out () && term_cli_styling ()); } diff -Nru gdb-9.1/gdb/ui-file.h gdb-10.2/gdb/ui-file.h --- gdb-9.1/gdb/ui-file.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/ui-file.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* UI_FILE - a generic STDIO like output stream. - Copyright (C) 1999-2020 Free Software Foundation, Inc. + Copyright (C) 1999-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -100,20 +100,6 @@ /* A preallocated null_file stream. */ extern null_file null_stream; -extern void ui_file_flush (ui_file *); - -extern int ui_file_isatty (struct ui_file *); - -extern void ui_file_write (struct ui_file *file, const char *buf, - long length_buf); - -extern void ui_file_write_async_safe (struct ui_file *file, const char *buf, - long length_buf); - -extern long ui_file_read (struct ui_file *file, char *buf, long length_buf); - -extern void ui_file_puts (struct ui_file *file, const char *buf); - extern int gdb_console_fputs (const char *, FILE *); /* A std::string-based ui_file. Can be used as a scratch buffer for diff -Nru gdb-9.1/gdb/ui-out.c gdb-10.2/gdb/ui-out.c --- gdb-9.1/gdb/ui-out.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/ui-out.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Output generating routines for GDB. - Copyright (C) 1999-2020 Free Software Foundation, Inc. + Copyright (C) 1999-2021 Free Software Foundation, Inc. Contributed by Cygnus Solutions. Written by Fernando Nasser for Cygnus. diff -Nru gdb-9.1/gdb/ui-out.h gdb-10.2/gdb/ui-out.h --- gdb-9.1/gdb/ui-out.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/ui-out.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Output generating routines for GDB. - Copyright (C) 1999-2020 Free Software Foundation, Inc. + Copyright (C) 1999-2021 Free Software Foundation, Inc. Contributed by Cygnus Solutions. Written by Fernando Nasser for Cygnus. @@ -77,9 +77,9 @@ /* The possible kinds of fields. */ enum class field_kind { - /* "FIELD_STRING" needs has a funny name to avoid clashes with - tokens named "STRING". See PR build/25250. FIELD_SIGNED is - given a similar name for consistency. */ + /* "FIELD_STRING" needs a funny name to avoid clashes with tokens + named "STRING". See PR build/25250. FIELD_SIGNED is given a + similar name for consistency. */ FIELD_SIGNED, FIELD_STRING, }; diff -Nru gdb-9.1/gdb/ui-style.c gdb-10.2/gdb/ui-style.c --- gdb-9.1/gdb/ui-style.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/ui-style.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Styling for ui_file - Copyright (C) 2018-2020 Free Software Foundation, Inc. + Copyright (C) 2018-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -404,6 +404,7 @@ return true; } +void _initialize_ui_style (); void _initialize_ui_style () { diff -Nru gdb-9.1/gdb/ui-style.h gdb-10.2/gdb/ui-style.h --- gdb-9.1/gdb/ui-style.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/ui-style.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Styling for ui_file - Copyright (C) 2018-2020 Free Software Foundation, Inc. + Copyright (C) 2018-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -126,8 +126,14 @@ private: bool m_simple; - int m_value; - uint8_t m_red, m_green, m_blue; + union + { + int m_value; + struct + { + uint8_t m_red, m_green, m_blue; + }; + }; }; /* Intensity settings that are available. */ diff -Nru gdb-9.1/gdb/unittests/array-view-selftests.c gdb-10.2/gdb/unittests/array-view-selftests.c --- gdb-9.1/gdb/unittests/array-view-selftests.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/unittests/array-view-selftests.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Self tests for array_view for GDB, the GNU debugger. - Copyright (C) 2017-2020 Free Software Foundation, Inc. + Copyright (C) 2017-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -523,6 +523,7 @@ } /* namespace array_view_tests */ } /* namespace selftests */ +void _initialize_array_view_selftests (); void _initialize_array_view_selftests () { diff -Nru gdb-9.1/gdb/unittests/basic_string_view/capacity/1.cc gdb-10.2/gdb/unittests/basic_string_view/capacity/1.cc --- gdb-9.1/gdb/unittests/basic_string_view/capacity/1.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/basic_string_view/capacity/1.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ // { dg-options "-std=gnu++17" } -// Copyright (C) 2013-2020 Free Software Foundation, Inc. +// Copyright (C) 2013-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/basic_string_view/capacity/empty_neg.cc gdb-10.2/gdb/unittests/basic_string_view/capacity/empty_neg.cc --- gdb-9.1/gdb/unittests/basic_string_view/capacity/empty_neg.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/basic_string_view/capacity/empty_neg.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2017-2020 Free Software Foundation, Inc. +// Copyright (C) 2017-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/basic_string_view/cons/char/1.cc gdb-10.2/gdb/unittests/basic_string_view/cons/char/1.cc --- gdb-9.1/gdb/unittests/basic_string_view/cons/char/1.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/basic_string_view/cons/char/1.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ // { dg-options "-std=gnu++17" } -// Copyright (C) 2013-2020 Free Software Foundation, Inc. +// Copyright (C) 2013-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/basic_string_view/cons/char/2.cc gdb-10.2/gdb/unittests/basic_string_view/cons/char/2.cc --- gdb-9.1/gdb/unittests/basic_string_view/cons/char/2.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/basic_string_view/cons/char/2.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ // { dg-options "-std=gnu++17" } -// Copyright (C) 2013-2020 Free Software Foundation, Inc. +// Copyright (C) 2013-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/basic_string_view/cons/char/3.cc gdb-10.2/gdb/unittests/basic_string_view/cons/char/3.cc --- gdb-9.1/gdb/unittests/basic_string_view/cons/char/3.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/basic_string_view/cons/char/3.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ // { dg-options "-std=gnu++17" } -// Copyright (C) 2013-2020 Free Software Foundation, Inc. +// Copyright (C) 2013-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/basic_string_view/cons/wchar_t/1.cc gdb-10.2/gdb/unittests/basic_string_view/cons/wchar_t/1.cc --- gdb-9.1/gdb/unittests/basic_string_view/cons/wchar_t/1.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/basic_string_view/cons/wchar_t/1.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ // { dg-options "-std=gnu++17" } -// Copyright (C) 2013-2020 Free Software Foundation, Inc. +// Copyright (C) 2013-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/basic_string_view/cons/wchar_t/2.cc gdb-10.2/gdb/unittests/basic_string_view/cons/wchar_t/2.cc --- gdb-9.1/gdb/unittests/basic_string_view/cons/wchar_t/2.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/basic_string_view/cons/wchar_t/2.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ // { dg-options "-std=gnu++17" } -// Copyright (C) 2013-2020 Free Software Foundation, Inc. +// Copyright (C) 2013-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/basic_string_view/cons/wchar_t/3.cc gdb-10.2/gdb/unittests/basic_string_view/cons/wchar_t/3.cc --- gdb-9.1/gdb/unittests/basic_string_view/cons/wchar_t/3.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/basic_string_view/cons/wchar_t/3.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ // { dg-options "-std=gnu++17" } -// Copyright (C) 2013-2020 Free Software Foundation, Inc. +// Copyright (C) 2013-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/basic_string_view/element_access/char/1.cc gdb-10.2/gdb/unittests/basic_string_view/element_access/char/1.cc --- gdb-9.1/gdb/unittests/basic_string_view/element_access/char/1.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/basic_string_view/element_access/char/1.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ // { dg-options "-std=gnu++17" } -// Copyright (C) 2013-2020 Free Software Foundation, Inc. +// Copyright (C) 2013-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/basic_string_view/element_access/char/2.cc gdb-10.2/gdb/unittests/basic_string_view/element_access/char/2.cc --- gdb-9.1/gdb/unittests/basic_string_view/element_access/char/2.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/basic_string_view/element_access/char/2.cc 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ // { dg-options "-std=gnu++17 -O0" } // { dg-require-debug-mode "" } -// Copyright (C) 2013-2020 Free Software Foundation, Inc. +// Copyright (C) 2013-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/basic_string_view/element_access/char/empty.cc gdb-10.2/gdb/unittests/basic_string_view/element_access/char/empty.cc --- gdb-9.1/gdb/unittests/basic_string_view/element_access/char/empty.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/basic_string_view/element_access/char/empty.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ // { dg-options "-std=gnu++17" } -// Copyright (C) 2013-2020 Free Software Foundation, Inc. +// Copyright (C) 2013-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/basic_string_view/element_access/char/front_back.cc gdb-10.2/gdb/unittests/basic_string_view/element_access/char/front_back.cc --- gdb-9.1/gdb/unittests/basic_string_view/element_access/char/front_back.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/basic_string_view/element_access/char/front_back.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,7 +1,7 @@ // { dg-options "-std=gnu++17" } // { dg-require-string-conversions "" } -// Copyright (C) 2013-2020 Free Software Foundation, Inc. +// Copyright (C) 2013-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/basic_string_view/element_access/wchar_t/1.cc gdb-10.2/gdb/unittests/basic_string_view/element_access/wchar_t/1.cc --- gdb-9.1/gdb/unittests/basic_string_view/element_access/wchar_t/1.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/basic_string_view/element_access/wchar_t/1.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ // { dg-options "-std=gnu++17" } -// Copyright (C) 2013-2020 Free Software Foundation, Inc. +// Copyright (C) 2013-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/basic_string_view/element_access/wchar_t/2.cc gdb-10.2/gdb/unittests/basic_string_view/element_access/wchar_t/2.cc --- gdb-9.1/gdb/unittests/basic_string_view/element_access/wchar_t/2.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/basic_string_view/element_access/wchar_t/2.cc 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ // { dg-options "-std=gnu++17 -O0" } // { dg-require-debug-mode "" } -// Copyright (C) 2013-2020 Free Software Foundation, Inc. +// Copyright (C) 2013-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/basic_string_view/element_access/wchar_t/empty.cc gdb-10.2/gdb/unittests/basic_string_view/element_access/wchar_t/empty.cc --- gdb-9.1/gdb/unittests/basic_string_view/element_access/wchar_t/empty.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/basic_string_view/element_access/wchar_t/empty.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ // { dg-options "-std=gnu++17" } -// Copyright (C) 2013-2020 Free Software Foundation, Inc. +// Copyright (C) 2013-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/basic_string_view/element_access/wchar_t/front_back.cc gdb-10.2/gdb/unittests/basic_string_view/element_access/wchar_t/front_back.cc --- gdb-9.1/gdb/unittests/basic_string_view/element_access/wchar_t/front_back.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/basic_string_view/element_access/wchar_t/front_back.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,7 +1,7 @@ // { dg-options "-std=gnu++17" } // { dg-require-string-conversions "" } -// Copyright (C) 2013-2020 Free Software Foundation, Inc. +// Copyright (C) 2013-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/basic_string_view/include.cc gdb-10.2/gdb/unittests/basic_string_view/include.cc --- gdb-9.1/gdb/unittests/basic_string_view/include.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/basic_string_view/include.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ // -*- C++ -*- -// Copyright (C) 2013-2020 Free Software Foundation, Inc. +// Copyright (C) 2013-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/basic_string_view/inserters/char/1.cc gdb-10.2/gdb/unittests/basic_string_view/inserters/char/1.cc --- gdb-9.1/gdb/unittests/basic_string_view/inserters/char/1.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/basic_string_view/inserters/char/1.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ // { dg-options "-std=gnu++17" } -// Copyright (C) 2013-2020 Free Software Foundation, Inc. +// Copyright (C) 2013-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/basic_string_view/inserters/char/2.cc gdb-10.2/gdb/unittests/basic_string_view/inserters/char/2.cc --- gdb-9.1/gdb/unittests/basic_string_view/inserters/char/2.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/basic_string_view/inserters/char/2.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ -// Copyright (C) 2013-2020 Free Software Foundation, Inc. +// Copyright (C) 2013-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/basic_string_view/inserters/char/3.cc gdb-10.2/gdb/unittests/basic_string_view/inserters/char/3.cc --- gdb-9.1/gdb/unittests/basic_string_view/inserters/char/3.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/basic_string_view/inserters/char/3.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ // { dg-options "-std=gnu++17" } -// Copyright (C) 2013-2020 Free Software Foundation, Inc. +// Copyright (C) 2013-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/basic_string_view/inserters/pod/10081-out.cc gdb-10.2/gdb/unittests/basic_string_view/inserters/pod/10081-out.cc --- gdb-9.1/gdb/unittests/basic_string_view/inserters/pod/10081-out.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/basic_string_view/inserters/pod/10081-out.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ // { dg-options "-std=gnu++17" } -// Copyright (C) 2013-2020 Free Software Foundation, Inc. +// Copyright (C) 2013-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/basic_string_view/inserters/wchar_t/1.cc gdb-10.2/gdb/unittests/basic_string_view/inserters/wchar_t/1.cc --- gdb-9.1/gdb/unittests/basic_string_view/inserters/wchar_t/1.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/basic_string_view/inserters/wchar_t/1.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ // { dg-options "-std=gnu++17" } -// Copyright (C) 2013-2020 Free Software Foundation, Inc. +// Copyright (C) 2013-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/basic_string_view/inserters/wchar_t/2.cc gdb-10.2/gdb/unittests/basic_string_view/inserters/wchar_t/2.cc --- gdb-9.1/gdb/unittests/basic_string_view/inserters/wchar_t/2.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/basic_string_view/inserters/wchar_t/2.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ // { dg-options "-std=gnu++17" } -// Copyright (C) 2013-2020 Free Software Foundation, Inc. +// Copyright (C) 2013-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/basic_string_view/inserters/wchar_t/3.cc gdb-10.2/gdb/unittests/basic_string_view/inserters/wchar_t/3.cc --- gdb-9.1/gdb/unittests/basic_string_view/inserters/wchar_t/3.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/basic_string_view/inserters/wchar_t/3.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ // { dg-options "-std=gnu++17" } -// Copyright (C) 2013-2020 Free Software Foundation, Inc. +// Copyright (C) 2013-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/basic_string_view/literals/types.cc gdb-10.2/gdb/unittests/basic_string_view/literals/types.cc --- gdb-9.1/gdb/unittests/basic_string_view/literals/types.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/basic_string_view/literals/types.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,7 +1,7 @@ // { dg-options "-std=gnu++17" } // { dg-do compile } -// Copyright (C) 2013-2020 Free Software Foundation, Inc. +// Copyright (C) 2013-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/basic_string_view/literals/values.cc gdb-10.2/gdb/unittests/basic_string_view/literals/values.cc --- gdb-9.1/gdb/unittests/basic_string_view/literals/values.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/basic_string_view/literals/values.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ // { dg-options "-std=gnu++17" } -// Copyright (C) 2013-2020 Free Software Foundation, Inc. +// Copyright (C) 2013-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/basic_string_view/modifiers/remove_prefix/char/1.cc gdb-10.2/gdb/unittests/basic_string_view/modifiers/remove_prefix/char/1.cc --- gdb-9.1/gdb/unittests/basic_string_view/modifiers/remove_prefix/char/1.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/basic_string_view/modifiers/remove_prefix/char/1.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ // { dg-options "-std=gnu++17" } -// Copyright (C) 2013-2020 Free Software Foundation, Inc. +// Copyright (C) 2013-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/basic_string_view/modifiers/remove_prefix/wchar_t/1.cc gdb-10.2/gdb/unittests/basic_string_view/modifiers/remove_prefix/wchar_t/1.cc --- gdb-9.1/gdb/unittests/basic_string_view/modifiers/remove_prefix/wchar_t/1.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/basic_string_view/modifiers/remove_prefix/wchar_t/1.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ // { dg-options "-std=gnu++17" } -// Copyright (C) 2013-2020 Free Software Foundation, Inc. +// Copyright (C) 2013-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/basic_string_view/modifiers/remove_suffix/char/1.cc gdb-10.2/gdb/unittests/basic_string_view/modifiers/remove_suffix/char/1.cc --- gdb-9.1/gdb/unittests/basic_string_view/modifiers/remove_suffix/char/1.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/basic_string_view/modifiers/remove_suffix/char/1.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ // { dg-options "-std=gnu++17" } -// Copyright (C) 2013-2020 Free Software Foundation, Inc. +// Copyright (C) 2013-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/basic_string_view/modifiers/remove_suffix/wchar_t/1.cc gdb-10.2/gdb/unittests/basic_string_view/modifiers/remove_suffix/wchar_t/1.cc --- gdb-9.1/gdb/unittests/basic_string_view/modifiers/remove_suffix/wchar_t/1.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/basic_string_view/modifiers/remove_suffix/wchar_t/1.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ // { dg-options "-std=gnu++17" } -// Copyright (C) 2013-2020 Free Software Foundation, Inc. +// Copyright (C) 2013-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/basic_string_view/modifiers/swap/char/1.cc gdb-10.2/gdb/unittests/basic_string_view/modifiers/swap/char/1.cc --- gdb-9.1/gdb/unittests/basic_string_view/modifiers/swap/char/1.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/basic_string_view/modifiers/swap/char/1.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2017-2020 Free Software Foundation, Inc. +// Copyright (C) 2017-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/basic_string_view/modifiers/swap/wchar_t/1.cc gdb-10.2/gdb/unittests/basic_string_view/modifiers/swap/wchar_t/1.cc --- gdb-9.1/gdb/unittests/basic_string_view/modifiers/swap/wchar_t/1.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/basic_string_view/modifiers/swap/wchar_t/1.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2017-2020 Free Software Foundation, Inc. +// Copyright (C) 2017-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/basic_string_view/operations/compare/char/13650.cc gdb-10.2/gdb/unittests/basic_string_view/operations/compare/char/13650.cc --- gdb-9.1/gdb/unittests/basic_string_view/operations/compare/char/13650.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/basic_string_view/operations/compare/char/13650.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ // { dg-options "-std=gnu++17" } -// Copyright (C) 2013-2020 Free Software Foundation, Inc. +// Copyright (C) 2013-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/basic_string_view/operations/compare/char/1.cc gdb-10.2/gdb/unittests/basic_string_view/operations/compare/char/1.cc --- gdb-9.1/gdb/unittests/basic_string_view/operations/compare/char/1.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/basic_string_view/operations/compare/char/1.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ // { dg-options "-std=gnu++17" } -// Copyright (C) 2013-2020 Free Software Foundation, Inc. +// Copyright (C) 2013-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/basic_string_view/operations/compare/char/2.cc gdb-10.2/gdb/unittests/basic_string_view/operations/compare/char/2.cc --- gdb-9.1/gdb/unittests/basic_string_view/operations/compare/char/2.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/basic_string_view/operations/compare/char/2.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2017-2020 Free Software Foundation, Inc. +// Copyright (C) 2017-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/basic_string_view/operations/compare/char/70483.cc gdb-10.2/gdb/unittests/basic_string_view/operations/compare/char/70483.cc --- gdb-9.1/gdb/unittests/basic_string_view/operations/compare/char/70483.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/basic_string_view/operations/compare/char/70483.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2017-2020 Free Software Foundation, Inc. +// Copyright (C) 2017-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/basic_string_view/operations/compare/wchar_t/13650.cc gdb-10.2/gdb/unittests/basic_string_view/operations/compare/wchar_t/13650.cc --- gdb-9.1/gdb/unittests/basic_string_view/operations/compare/wchar_t/13650.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/basic_string_view/operations/compare/wchar_t/13650.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ // { dg-options "-std=gnu++17" } -// Copyright (C) 2013-2020 Free Software Foundation, Inc. +// Copyright (C) 2013-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/basic_string_view/operations/compare/wchar_t/1.cc gdb-10.2/gdb/unittests/basic_string_view/operations/compare/wchar_t/1.cc --- gdb-9.1/gdb/unittests/basic_string_view/operations/compare/wchar_t/1.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/basic_string_view/operations/compare/wchar_t/1.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ // { dg-options "-std=gnu++17" } -// Copyright (C) 2013-2020 Free Software Foundation, Inc. +// Copyright (C) 2013-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/basic_string_view/operations/compare/wchar_t/2.cc gdb-10.2/gdb/unittests/basic_string_view/operations/compare/wchar_t/2.cc --- gdb-9.1/gdb/unittests/basic_string_view/operations/compare/wchar_t/2.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/basic_string_view/operations/compare/wchar_t/2.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2017-2020 Free Software Foundation, Inc. +// Copyright (C) 2017-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/basic_string_view/operations/copy/char/1.cc gdb-10.2/gdb/unittests/basic_string_view/operations/copy/char/1.cc --- gdb-9.1/gdb/unittests/basic_string_view/operations/copy/char/1.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/basic_string_view/operations/copy/char/1.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ // { dg-options "-std=gnu++17" } -// Copyright (C) 2013-2020 Free Software Foundation, Inc. +// Copyright (C) 2013-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/basic_string_view/operations/copy/wchar_t/1.cc gdb-10.2/gdb/unittests/basic_string_view/operations/copy/wchar_t/1.cc --- gdb-9.1/gdb/unittests/basic_string_view/operations/copy/wchar_t/1.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/basic_string_view/operations/copy/wchar_t/1.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ // { dg-options "-std=gnu++17" } -// Copyright (C) 2013-2020 Free Software Foundation, Inc. +// Copyright (C) 2013-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/basic_string_view/operations/data/char/1.cc gdb-10.2/gdb/unittests/basic_string_view/operations/data/char/1.cc --- gdb-9.1/gdb/unittests/basic_string_view/operations/data/char/1.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/basic_string_view/operations/data/char/1.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ // { dg-options "-std=gnu++17" } -// Copyright (C) 2013-2020 Free Software Foundation, Inc. +// Copyright (C) 2013-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/basic_string_view/operations/data/wchar_t/1.cc gdb-10.2/gdb/unittests/basic_string_view/operations/data/wchar_t/1.cc --- gdb-9.1/gdb/unittests/basic_string_view/operations/data/wchar_t/1.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/basic_string_view/operations/data/wchar_t/1.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ // { dg-options "-std=gnu++17" } -// Copyright (C) 2013-2020 Free Software Foundation, Inc. +// Copyright (C) 2013-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/basic_string_view/operations/find/char/1.cc gdb-10.2/gdb/unittests/basic_string_view/operations/find/char/1.cc --- gdb-9.1/gdb/unittests/basic_string_view/operations/find/char/1.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/basic_string_view/operations/find/char/1.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ // { dg-options "-std=gnu++17" } -// Copyright (C) 2013-2020 Free Software Foundation, Inc. +// Copyright (C) 2013-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/basic_string_view/operations/find/char/2.cc gdb-10.2/gdb/unittests/basic_string_view/operations/find/char/2.cc --- gdb-9.1/gdb/unittests/basic_string_view/operations/find/char/2.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/basic_string_view/operations/find/char/2.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ // { dg-options "-std=gnu++17" } -// Copyright (C) 2013-2020 Free Software Foundation, Inc. +// Copyright (C) 2013-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/basic_string_view/operations/find/char/3.cc gdb-10.2/gdb/unittests/basic_string_view/operations/find/char/3.cc --- gdb-9.1/gdb/unittests/basic_string_view/operations/find/char/3.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/basic_string_view/operations/find/char/3.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ // { dg-options "-std=gnu++17" } -// Copyright (C) 2013-2020 Free Software Foundation, Inc. +// Copyright (C) 2013-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/basic_string_view/operations/find/char/4.cc gdb-10.2/gdb/unittests/basic_string_view/operations/find/char/4.cc --- gdb-9.1/gdb/unittests/basic_string_view/operations/find/char/4.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/basic_string_view/operations/find/char/4.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ // { dg-options "-std=gnu++17" } -// Copyright (C) 2013-2020 Free Software Foundation, Inc. +// Copyright (C) 2013-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/basic_string_view/operations/find/wchar_t/1.cc gdb-10.2/gdb/unittests/basic_string_view/operations/find/wchar_t/1.cc --- gdb-9.1/gdb/unittests/basic_string_view/operations/find/wchar_t/1.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/basic_string_view/operations/find/wchar_t/1.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ // { dg-options "-std=gnu++17" } -// Copyright (C) 2013-2020 Free Software Foundation, Inc. +// Copyright (C) 2013-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/basic_string_view/operations/find/wchar_t/2.cc gdb-10.2/gdb/unittests/basic_string_view/operations/find/wchar_t/2.cc --- gdb-9.1/gdb/unittests/basic_string_view/operations/find/wchar_t/2.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/basic_string_view/operations/find/wchar_t/2.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ // { dg-options "-std=gnu++17" } -// Copyright (C) 2013-2020 Free Software Foundation, Inc. +// Copyright (C) 2013-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/basic_string_view/operations/find/wchar_t/3.cc gdb-10.2/gdb/unittests/basic_string_view/operations/find/wchar_t/3.cc --- gdb-9.1/gdb/unittests/basic_string_view/operations/find/wchar_t/3.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/basic_string_view/operations/find/wchar_t/3.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ // { dg-options "-std=gnu++17" } -// Copyright (C) 2013-2020 Free Software Foundation, Inc. +// Copyright (C) 2013-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/basic_string_view/operations/find/wchar_t/4.cc gdb-10.2/gdb/unittests/basic_string_view/operations/find/wchar_t/4.cc --- gdb-9.1/gdb/unittests/basic_string_view/operations/find/wchar_t/4.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/basic_string_view/operations/find/wchar_t/4.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ // { dg-options "-std=gnu++17" } -// Copyright (C) 2013-2020 Free Software Foundation, Inc. +// Copyright (C) 2013-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/basic_string_view/operations/rfind/char/1.cc gdb-10.2/gdb/unittests/basic_string_view/operations/rfind/char/1.cc --- gdb-9.1/gdb/unittests/basic_string_view/operations/rfind/char/1.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/basic_string_view/operations/rfind/char/1.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ // { dg-options "-std=gnu++17" } -// Copyright (C) 2013-2020 Free Software Foundation, Inc. +// Copyright (C) 2013-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/basic_string_view/operations/rfind/char/2.cc gdb-10.2/gdb/unittests/basic_string_view/operations/rfind/char/2.cc --- gdb-9.1/gdb/unittests/basic_string_view/operations/rfind/char/2.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/basic_string_view/operations/rfind/char/2.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ // { dg-options "-std=gnu++17" } -// Copyright (C) 2013-2020 Free Software Foundation, Inc. +// Copyright (C) 2013-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/basic_string_view/operations/rfind/char/3.cc gdb-10.2/gdb/unittests/basic_string_view/operations/rfind/char/3.cc --- gdb-9.1/gdb/unittests/basic_string_view/operations/rfind/char/3.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/basic_string_view/operations/rfind/char/3.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ // { dg-options "-std=gnu++17" } -// Copyright (C) 2013-2020 Free Software Foundation, Inc. +// Copyright (C) 2013-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/basic_string_view/operations/rfind/wchar_t/1.cc gdb-10.2/gdb/unittests/basic_string_view/operations/rfind/wchar_t/1.cc --- gdb-9.1/gdb/unittests/basic_string_view/operations/rfind/wchar_t/1.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/basic_string_view/operations/rfind/wchar_t/1.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ // { dg-options "-std=gnu++17" } -// Copyright (C) 2013-2020 Free Software Foundation, Inc. +// Copyright (C) 2013-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/basic_string_view/operations/rfind/wchar_t/2.cc gdb-10.2/gdb/unittests/basic_string_view/operations/rfind/wchar_t/2.cc --- gdb-9.1/gdb/unittests/basic_string_view/operations/rfind/wchar_t/2.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/basic_string_view/operations/rfind/wchar_t/2.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ // { dg-options "-std=gnu++17" } -// Copyright (C) 2013-2020 Free Software Foundation, Inc. +// Copyright (C) 2013-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/basic_string_view/operations/rfind/wchar_t/3.cc gdb-10.2/gdb/unittests/basic_string_view/operations/rfind/wchar_t/3.cc --- gdb-9.1/gdb/unittests/basic_string_view/operations/rfind/wchar_t/3.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/basic_string_view/operations/rfind/wchar_t/3.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ // { dg-options "-std=gnu++17" } -// Copyright (C) 2013-2020 Free Software Foundation, Inc. +// Copyright (C) 2013-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/basic_string_view/operations/string_conversion/1.cc gdb-10.2/gdb/unittests/basic_string_view/operations/string_conversion/1.cc --- gdb-9.1/gdb/unittests/basic_string_view/operations/string_conversion/1.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/basic_string_view/operations/string_conversion/1.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ // { dg-options "-std=gnu++17" } -// Copyright (C) 2014-2020 Free Software Foundation, Inc. +// Copyright (C) 2014-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/basic_string_view/operations/substr/char/1.cc gdb-10.2/gdb/unittests/basic_string_view/operations/substr/char/1.cc --- gdb-9.1/gdb/unittests/basic_string_view/operations/substr/char/1.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/basic_string_view/operations/substr/char/1.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ // { dg-options "-std=gnu++17" } -// Copyright (C) 2013-2020 Free Software Foundation, Inc. +// Copyright (C) 2013-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/basic_string_view/operations/substr/wchar_t/1.cc gdb-10.2/gdb/unittests/basic_string_view/operations/substr/wchar_t/1.cc --- gdb-9.1/gdb/unittests/basic_string_view/operations/substr/wchar_t/1.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/basic_string_view/operations/substr/wchar_t/1.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ // { dg-options "-std=gnu++17" } -// Copyright (C) 2013-2020 Free Software Foundation, Inc. +// Copyright (C) 2013-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/basic_string_view/operators/char/2.cc gdb-10.2/gdb/unittests/basic_string_view/operators/char/2.cc --- gdb-9.1/gdb/unittests/basic_string_view/operators/char/2.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/basic_string_view/operators/char/2.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ // { dg-options "-std=gnu++17" } -// Copyright (C) 2013-2020 Free Software Foundation, Inc. +// Copyright (C) 2013-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/basic_string_view/operators/wchar_t/2.cc gdb-10.2/gdb/unittests/basic_string_view/operators/wchar_t/2.cc --- gdb-9.1/gdb/unittests/basic_string_view/operators/wchar_t/2.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/basic_string_view/operators/wchar_t/2.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ // { dg-options "-std=gnu++17" } -// Copyright (C) 2013-2020 Free Software Foundation, Inc. +// Copyright (C) 2013-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/basic_string_view/range_access/char/1.cc gdb-10.2/gdb/unittests/basic_string_view/range_access/char/1.cc --- gdb-9.1/gdb/unittests/basic_string_view/range_access/char/1.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/basic_string_view/range_access/char/1.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,7 +1,7 @@ // { dg-do compile } // { dg-options "-std=gnu++17" } -// Copyright (C) 2013-2020 Free Software Foundation, Inc. +// Copyright (C) 2013-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/basic_string_view/range_access/wchar_t/1.cc gdb-10.2/gdb/unittests/basic_string_view/range_access/wchar_t/1.cc --- gdb-9.1/gdb/unittests/basic_string_view/range_access/wchar_t/1.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/basic_string_view/range_access/wchar_t/1.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,7 +1,7 @@ // { dg-do compile } // { dg-options "-std=gnu++17" } -// Copyright (C) 2013-2020 Free Software Foundation, Inc. +// Copyright (C) 2013-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/basic_string_view/requirements/explicit_instantiation/1.cc gdb-10.2/gdb/unittests/basic_string_view/requirements/explicit_instantiation/1.cc --- gdb-9.1/gdb/unittests/basic_string_view/requirements/explicit_instantiation/1.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/basic_string_view/requirements/explicit_instantiation/1.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2013-2020 Free Software Foundation, Inc. +// Copyright (C) 2013-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/basic_string_view/requirements/explicit_instantiation/char/1.cc gdb-10.2/gdb/unittests/basic_string_view/requirements/explicit_instantiation/char/1.cc --- gdb-9.1/gdb/unittests/basic_string_view/requirements/explicit_instantiation/char/1.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/basic_string_view/requirements/explicit_instantiation/char/1.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,7 +1,7 @@ // { dg-do compile } // { dg-options "-std=gnu++17" } -// Copyright (C) 2013-2020 Free Software Foundation, Inc. +// Copyright (C) 2013-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/basic_string_view/requirements/explicit_instantiation/char16_t/1.cc gdb-10.2/gdb/unittests/basic_string_view/requirements/explicit_instantiation/char16_t/1.cc --- gdb-9.1/gdb/unittests/basic_string_view/requirements/explicit_instantiation/char16_t/1.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/basic_string_view/requirements/explicit_instantiation/char16_t/1.cc 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ // { dg-options "-std=gnu++17" } // { dg-require-cstdint "" } -// Copyright (C) 2013-2020 Free Software Foundation, Inc. +// Copyright (C) 2013-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/basic_string_view/requirements/explicit_instantiation/char32_t/1.cc gdb-10.2/gdb/unittests/basic_string_view/requirements/explicit_instantiation/char32_t/1.cc --- gdb-9.1/gdb/unittests/basic_string_view/requirements/explicit_instantiation/char32_t/1.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/basic_string_view/requirements/explicit_instantiation/char32_t/1.cc 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ // { dg-options "-std=gnu++17" } // { dg-require-cstdint "" } -// Copyright (C) 2013-2020 Free Software Foundation, Inc. +// Copyright (C) 2013-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/basic_string_view/requirements/explicit_instantiation/wchar_t/1.cc gdb-10.2/gdb/unittests/basic_string_view/requirements/explicit_instantiation/wchar_t/1.cc --- gdb-9.1/gdb/unittests/basic_string_view/requirements/explicit_instantiation/wchar_t/1.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/basic_string_view/requirements/explicit_instantiation/wchar_t/1.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,7 +1,7 @@ // { dg-do compile } // { dg-options "-std=gnu++17" } -// Copyright (C) 2013-2020 Free Software Foundation, Inc. +// Copyright (C) 2013-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/basic_string_view/requirements/typedefs.cc gdb-10.2/gdb/unittests/basic_string_view/requirements/typedefs.cc --- gdb-9.1/gdb/unittests/basic_string_view/requirements/typedefs.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/basic_string_view/requirements/typedefs.cc 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ // { dg-options "-std=gnu++17" } // { dg-do compile } -// Copyright (C) 2013-2020 Free Software Foundation, Inc. +// Copyright (C) 2013-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/basic_string_view/typedefs.cc gdb-10.2/gdb/unittests/basic_string_view/typedefs.cc --- gdb-9.1/gdb/unittests/basic_string_view/typedefs.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/basic_string_view/typedefs.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,7 +1,7 @@ // { dg-options "-std=gnu++17" } // { dg-do compile } -// Copyright (C) 2014-2020 Free Software Foundation, Inc. +// Copyright (C) 2014-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/basic_string_view/types/1.cc gdb-10.2/gdb/unittests/basic_string_view/types/1.cc --- gdb-9.1/gdb/unittests/basic_string_view/types/1.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/basic_string_view/types/1.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ // -// Copyright (C) 2013-2020 Free Software Foundation, Inc. +// Copyright (C) 2013-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/child-path-selftests.c gdb-10.2/gdb/unittests/child-path-selftests.c --- gdb-9.1/gdb/unittests/child-path-selftests.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/unittests/child-path-selftests.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Self tests for child_path for GDB, the GNU debugger. - Copyright (C) 2019-2020 Free Software Foundation, Inc. + Copyright (C) 2019-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -59,6 +59,7 @@ } } +void _initialize_child_path_selftests (); void _initialize_child_path_selftests () { diff -Nru gdb-9.1/gdb/unittests/cli-utils-selftests.c gdb-10.2/gdb/unittests/cli-utils-selftests.c --- gdb-9.1/gdb/unittests/cli-utils-selftests.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/unittests/cli-utils-selftests.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Unit tests for the cli-utils.c file. - Copyright (C) 2018-2020 Free Software Foundation, Inc. + Copyright (C) 2018-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -110,6 +110,7 @@ } } +void _initialize_cli_utils_selftests (); void _initialize_cli_utils_selftests () { diff -Nru gdb-9.1/gdb/unittests/command-def-selftests.c gdb-10.2/gdb/unittests/command-def-selftests.c --- gdb-9.1/gdb/unittests/command-def-selftests.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdb/unittests/command-def-selftests.c 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,216 @@ +/* Self tests for GDB command definitions for GDB, the GNU debugger. + + Copyright (C) 2019-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "defs.h" +#include "cli/cli-cmds.h" +#include "cli/cli-decode.h" +#include "gdbsupport/selftest.h" + +#include <map> + +namespace selftests { + +/* Verify some invariants of GDB commands documentation. */ + +namespace help_doc_tests { + +static unsigned int nr_failed_invariants; + +/* Report a broken invariant and increments nr_failed_invariants. */ + +static void +broken_doc_invariant (const char *prefix, const char *name, const char *msg) +{ + fprintf_filtered (gdb_stdout, + "help doc broken invariant: command '%s%s' help doc %s\n", + prefix, name, msg); + nr_failed_invariants++; +} + +/* Recursively walk the commandlist structures, and check doc invariants: + - The first line of the doc must end with a '.'. + - the doc must not end with a new line. + If an invariant is not respected, produce a message and increment + nr_failed_invariants. + Note that we do not call SELF_CHECK in this function, as we want + all commands to be checked before making the test fail. */ + +static void +check_doc (struct cmd_list_element *commandlist, const char *prefix) +{ + struct cmd_list_element *c; + + /* Walk through the commands. */ + for (c = commandlist; c; c = c->next) + { + /* Checks the doc has a first line terminated with a '.'. */ + const char *p = c->doc; + + /* Position p on the first LF, or on terminating null byte. */ + while (*p && *p != '\n') + p++; + if (p == c->doc) + broken_doc_invariant + (prefix, c->name, + "is missing the first line terminated with a '.' character"); + else if (*(p-1) != '.') + broken_doc_invariant + (prefix, c->name, + "first line is not terminated with a '.' character"); + + /* Checks the doc is not terminated with a new line. */ + if (c->doc[strlen (c->doc) - 1] == '\n') + broken_doc_invariant + (prefix, c->name, + "has a superfluous trailing end of line"); + + /* Check if this command has subcommands and is not an + abbreviation. We skip checking subcommands of abbreviations + in order to avoid duplicates in the output. */ + if (c->prefixlist != NULL && !c->abbrev_flag) + { + /* Recursively call ourselves on the subcommand list, + passing the right prefix in. */ + check_doc (*c->prefixlist, c->prefixname); + } + } +} + +static void +help_doc_invariants_tests () +{ + nr_failed_invariants = 0; + check_doc (cmdlist, ""); + SELF_CHECK (nr_failed_invariants == 0); +} + +} /* namespace help_doc_tests */ + +/* Verify some invariants of GDB command structure. */ + +namespace command_structure_tests { + +/* Nr of commands in which a duplicated list is found. */ +unsigned int nr_duplicates = 0; +/* Nr of commands in a list having no valid prefix cmd. */ +unsigned int nr_invalid_prefixcmd = 0; + +/* A map associating a list with the prefix leading to it. */ + +std::map<cmd_list_element **, const char *> lists; + +/* Store each command list in lists, associated with the prefix to reach it. A + list must only be found once. + + Verifies that all elements of the list have the same non-null prefix + command. */ + +static void +traverse_command_structure (struct cmd_list_element **list, + const char *prefix) +{ + struct cmd_list_element *c, *prefixcmd; + + auto dupl = lists.find (list); + if (dupl != lists.end ()) + { + fprintf_filtered (gdb_stdout, + "list %p duplicated," + " reachable via prefix '%s' and '%s'." + " Duplicated list first command is '%s'\n", + list, + prefix, dupl->second, + (*list)->name); + nr_duplicates++; + return; + } + + lists.insert ({list, prefix}); + + /* All commands of *list must have a prefix command equal to PREFIXCMD, + the prefix command of the first command. */ + if (*list == nullptr) + prefixcmd = nullptr; /* A prefix command with an empty subcommand list. */ + else + prefixcmd = (*list)->prefix; + + /* Walk through the commands. */ + for (c = *list; c; c = c->next) + { + /* If this command has subcommands and is not an alias, + traverse the subcommands. */ + if (c->prefixlist != NULL && c->cmd_pointer == nullptr) + { + /* Recursively call ourselves on the subcommand list, + passing the right prefix in. */ + traverse_command_structure (c->prefixlist, c->prefixname); + } + if (prefixcmd != c->prefix + || (prefixcmd == nullptr && *list != cmdlist)) + { + if (c->prefix == nullptr) + fprintf_filtered (gdb_stdout, + "list %p reachable via prefix '%s'." + " command '%s' has null prefixcmd\n", + list, + prefix, c->name); + else + fprintf_filtered (gdb_stdout, + "list %p reachable via prefix '%s'." + " command '%s' has a different prefixcmd\n", + list, + prefix, c->name); + nr_invalid_prefixcmd++; + } + } +} + +/* Verify that a list of commands is present in the tree only once. */ + +static void +command_structure_invariants_tests () +{ + nr_duplicates = 0; + nr_invalid_prefixcmd = 0; + + traverse_command_structure (&cmdlist, ""); + + /* Release memory, be ready to be re-run. */ + lists.clear (); + + SELF_CHECK (nr_duplicates == 0); + SELF_CHECK (nr_invalid_prefixcmd == 0); +} + +} + +} /* namespace selftests */ + +void _initialize_command_def_selftests (); +void +_initialize_command_def_selftests () +{ + selftests::register_test + ("help_doc_invariants", + selftests::help_doc_tests::help_doc_invariants_tests); + + selftests::register_test + ("command_structure_invariants", + selftests::command_structure_tests::command_structure_invariants_tests); +} diff -Nru gdb-9.1/gdb/unittests/common-utils-selftests.c gdb-10.2/gdb/unittests/common-utils-selftests.c --- gdb-9.1/gdb/unittests/common-utils-selftests.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/unittests/common-utils-selftests.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Self tests for general utility routines for GDB, the GNU debugger. - Copyright (C) 2016-2020 Free Software Foundation, Inc. + Copyright (C) 2016-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -125,6 +125,7 @@ } /* namespace selftests */ +void _initialize_common_utils_selftests (); void _initialize_common_utils_selftests () { diff -Nru gdb-9.1/gdb/unittests/copy_bitwise-selftests.c gdb-10.2/gdb/unittests/copy_bitwise-selftests.c --- gdb-9.1/gdb/unittests/copy_bitwise-selftests.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/unittests/copy_bitwise-selftests.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Self tests of the copy_bitwise routine for GDB, the GNU debugger. - Copyright (C) 2018-2020 Free Software Foundation, Inc. + Copyright (C) 2018-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -152,6 +152,7 @@ } /* namespace selftests */ +void _initialize_copy_bitwise_utils_selftests (); void _initialize_copy_bitwise_utils_selftests () { diff -Nru gdb-9.1/gdb/unittests/environ-selftests.c gdb-10.2/gdb/unittests/environ-selftests.c --- gdb-9.1/gdb/unittests/environ-selftests.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/unittests/environ-selftests.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Self tests for gdb_environ for GDB, the GNU debugger. - Copyright (C) 2017-2020 Free Software Foundation, Inc. + Copyright (C) 2017-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -298,6 +298,7 @@ } /* namespace gdb_environ */ } /* namespace selftests */ +void _initialize_environ_selftests (); void _initialize_environ_selftests () { diff -Nru gdb-9.1/gdb/unittests/filtered_iterator-selftests.c gdb-10.2/gdb/unittests/filtered_iterator-selftests.c --- gdb-9.1/gdb/unittests/filtered_iterator-selftests.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/unittests/filtered_iterator-selftests.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Self tests for the filtered_iterator class. - Copyright (C) 2019-2020 Free Software Foundation, Inc. + Copyright (C) 2019-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -155,6 +155,7 @@ } /* namespace selftests */ +void _initialize_filtered_iterator_selftests (); void _initialize_filtered_iterator_selftests () { diff -Nru gdb-9.1/gdb/unittests/format_pieces-selftests.c gdb-10.2/gdb/unittests/format_pieces-selftests.c --- gdb-9.1/gdb/unittests/format_pieces-selftests.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/unittests/format_pieces-selftests.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Self tests for format_pieces for GDB, the GNU debugger. - Copyright (C) 2018-2020 Free Software Foundation, Inc. + Copyright (C) 2018-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -142,6 +142,7 @@ } /* namespace format_pieces */ } /* namespace selftests */ +void _initialize_format_pieces_selftests (); void _initialize_format_pieces_selftests () { diff -Nru gdb-9.1/gdb/unittests/function-view-selftests.c gdb-10.2/gdb/unittests/function-view-selftests.c --- gdb-9.1/gdb/unittests/function-view-selftests.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/unittests/function-view-selftests.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Self tests for function_view for GDB, the GNU debugger. - Copyright (C) 2017-2020 Free Software Foundation, Inc. + Copyright (C) 2017-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -171,6 +171,7 @@ } /* namespace function_view */ } /* namespace selftests */ +void _initialize_function_view_selftests (); void _initialize_function_view_selftests () { diff -Nru gdb-9.1/gdb/unittests/help-doc-selftests.c gdb-10.2/gdb/unittests/help-doc-selftests.c --- gdb-9.1/gdb/unittests/help-doc-selftests.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/unittests/help-doc-selftests.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,107 +0,0 @@ -/* Self tests for help doc for GDB, the GNU debugger. - - Copyright (C) 2019-2020 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include "defs.h" -#include "cli/cli-cmds.h" -#include "cli/cli-decode.h" -#include "gdbsupport/selftest.h" - -namespace selftests { -namespace help_doc_tests { - -static unsigned int nr_failed_invariants; - -/* Report a broken invariant and increments nr_failed_invariants. */ - -static void -broken_doc_invariant (const char *prefix, const char *name, const char *msg) -{ - fprintf_filtered (gdb_stdout, - "help doc broken invariant: command '%s%s' help doc %s\n", - prefix, name, msg); - nr_failed_invariants++; -} - -/* Recursively walk the commandlist structures, and check doc invariants: - - The first line of the doc must end with a '.'. - - the doc must not end with a new line. - If an invariant is not respected, produce a message and increment - nr_failed_invariants. - Note that we do not call SELF_CHECK in this function, as we want - all commands to be checked before making the test fail. */ - -static void -check_doc (struct cmd_list_element *commandlist, const char *prefix) -{ - struct cmd_list_element *c; - - /* Walk through the commands. */ - for (c = commandlist; c; c = c->next) - { - /* Checks the doc has a first line terminated with a '.'. */ - const char *p = c->doc; - - /* Position p on the first LF, or on terminating null byte. */ - while (*p && *p != '\n') - p++; - if (p == c->doc) - broken_doc_invariant - (prefix, c->name, - "is missing the first line terminated with a '.' character"); - else if (*(p-1) != '.') - broken_doc_invariant - (prefix, c->name, - "first line is not terminated with a '.' character"); - - /* Checks the doc is not terminated with a new line. */ - if (c->doc[strlen (c->doc) - 1] == '\n') - broken_doc_invariant - (prefix, c->name, - "has a superfluous trailing end of line"); - - /* Check if this command has subcommands and is not an - abbreviation. We skip checking subcommands of abbreviations - in order to avoid duplicates in the output. */ - if (c->prefixlist != NULL && !c->abbrev_flag) - { - /* Recursively call ourselves on the subcommand list, - passing the right prefix in. */ - check_doc (*c->prefixlist, c->prefixname); - } - } -} - -static void -help_doc_invariants_tests () -{ - nr_failed_invariants = 0; - check_doc (cmdlist, ""); - SELF_CHECK (nr_failed_invariants == 0); -} - -} /* namespace help_doc_tests */ -} /* namespace selftests */ - -void -_initialize_help_doc_selftests () -{ - selftests::register_test - ("help_doc_invariants", - selftests::help_doc_tests::help_doc_invariants_tests); -} diff -Nru gdb-9.1/gdb/unittests/lookup_name_info-selftests.c gdb-10.2/gdb/unittests/lookup_name_info-selftests.c --- gdb-9.1/gdb/unittests/lookup_name_info-selftests.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/unittests/lookup_name_info-selftests.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Self tests for lookup_name_info for GDB, the GNU debugger. - Copyright (C) 2017-2020 Free Software Foundation, Inc. + Copyright (C) 2017-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -37,14 +37,14 @@ { lookup_name_info lookup_name (name, symbol_name_match_type::FULL, completion_mode, true /* ignore_parameters */); - const std::string &result = lookup_name.language_lookup_name (lang); + const char *result = lookup_name.language_lookup_name (lang); - if (result != expected) + if (strcmp (result, expected) != 0) { error (_("%s:%d: make-paramless self-test failed: (completion=%d, lang=%d) " "\"%s\" -> \"%s\", expected \"%s\""), file, line, completion_mode, lang, name, - result.c_str (), expected); + result, expected); } } @@ -103,6 +103,7 @@ }} // namespace selftests::lookup_name +void _initialize_lookup_name_info_selftests (); void _initialize_lookup_name_info_selftests () { diff -Nru gdb-9.1/gdb/unittests/main-thread-selftests.c gdb-10.2/gdb/unittests/main-thread-selftests.c --- gdb-9.1/gdb/unittests/main-thread-selftests.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/unittests/main-thread-selftests.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Self tests for run_on_main_thread - Copyright (C) 2019-2020 Free Software Foundation, Inc. + Copyright (C) 2019-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -21,7 +21,7 @@ #include "gdbsupport/selftest.h" #include "gdbsupport/block-signals.h" #include "run-on-main-thread.h" -#include "event-loop.h" +#include "gdbsupport/event-loop.h" #if CXX_STD_THREAD #include <thread> #endif @@ -70,6 +70,7 @@ } } +void _initialize_main_thread_selftests (); void _initialize_main_thread_selftests () { diff -Nru gdb-9.1/gdb/unittests/memory-map-selftests.c gdb-10.2/gdb/unittests/memory-map-selftests.c --- gdb-9.1/gdb/unittests/memory-map-selftests.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/unittests/memory-map-selftests.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Self tests for memory-map for GDB, the GNU debugger. - Copyright (C) 2017-2020 Free Software Foundation, Inc. + Copyright (C) 2017-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -76,6 +76,7 @@ #endif /* HAVE_LIBEXPAT */ +void _initialize_memory_map_selftests (); void _initialize_memory_map_selftests () { diff -Nru gdb-9.1/gdb/unittests/memrange-selftests.c gdb-10.2/gdb/unittests/memrange-selftests.c --- gdb-9.1/gdb/unittests/memrange-selftests.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/unittests/memrange-selftests.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Self tests for mem ranges for GDB, the GNU debugger. - Copyright (C) 2017-2020 Free Software Foundation, Inc. + Copyright (C) 2017-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -106,6 +106,7 @@ } /* namespace memrange_tests */ } /* namespace selftests */ +void _initialize_memrange_selftests (); void _initialize_memrange_selftests () { diff -Nru gdb-9.1/gdb/unittests/mkdir-recursive-selftests.c gdb-10.2/gdb/unittests/mkdir-recursive-selftests.c --- gdb-9.1/gdb/unittests/mkdir-recursive-selftests.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/unittests/mkdir-recursive-selftests.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Self tests for scoped_fd for GDB, the GNU debugger. - Copyright (C) 2018-2020 Free Software Foundation, Inc. + Copyright (C) 2018-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -81,6 +81,7 @@ } } +void _initialize_mkdir_recursive_selftests (); void _initialize_mkdir_recursive_selftests () { diff -Nru gdb-9.1/gdb/unittests/observable-selftests.c gdb-10.2/gdb/unittests/observable-selftests.c --- gdb-9.1/gdb/unittests/observable-selftests.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/unittests/observable-selftests.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Self tests for gdb::observers, GDB notifications to observers. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -127,6 +127,7 @@ } /* namespace observers */ } /* namespace selftests */ +void _initialize_observer_selftest (); void _initialize_observer_selftest () { diff -Nru gdb-9.1/gdb/unittests/offset-type-selftests.c gdb-10.2/gdb/unittests/offset-type-selftests.c --- gdb-9.1/gdb/unittests/offset-type-selftests.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/unittests/offset-type-selftests.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Self tests for offset types for GDB, the GNU debugger. - Copyright (C) 2017-2020 Free Software Foundation, Inc. + Copyright (C) 2017-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -171,6 +171,7 @@ } /* namespace offset_type */ } /* namespace selftests */ +void _initialize_offset_type_selftests (); void _initialize_offset_type_selftests () { diff -Nru gdb-9.1/gdb/unittests/optional/assignment/1.cc gdb-10.2/gdb/unittests/optional/assignment/1.cc --- gdb-9.1/gdb/unittests/optional/assignment/1.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/optional/assignment/1.cc 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2013-2020 Free Software Foundation, Inc. +// Copyright (C) 2013-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/optional/assignment/2.cc gdb-10.2/gdb/unittests/optional/assignment/2.cc --- gdb-9.1/gdb/unittests/optional/assignment/2.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/optional/assignment/2.cc 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2013-2020 Free Software Foundation, Inc. +// Copyright (C) 2013-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/optional/assignment/3.cc gdb-10.2/gdb/unittests/optional/assignment/3.cc --- gdb-9.1/gdb/unittests/optional/assignment/3.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/optional/assignment/3.cc 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2013-2020 Free Software Foundation, Inc. +// Copyright (C) 2013-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/optional/assignment/4.cc gdb-10.2/gdb/unittests/optional/assignment/4.cc --- gdb-9.1/gdb/unittests/optional/assignment/4.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/optional/assignment/4.cc 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2013-2020 Free Software Foundation, Inc. +// Copyright (C) 2013-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/optional/assignment/5.cc gdb-10.2/gdb/unittests/optional/assignment/5.cc --- gdb-9.1/gdb/unittests/optional/assignment/5.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/optional/assignment/5.cc 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2013-2020 Free Software Foundation, Inc. +// Copyright (C) 2013-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/optional/assignment/6.cc gdb-10.2/gdb/unittests/optional/assignment/6.cc --- gdb-9.1/gdb/unittests/optional/assignment/6.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/optional/assignment/6.cc 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2013-2020 Free Software Foundation, Inc. +// Copyright (C) 2013-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/optional/assignment/7.cc gdb-10.2/gdb/unittests/optional/assignment/7.cc --- gdb-9.1/gdb/unittests/optional/assignment/7.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/optional/assignment/7.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2016-2020 Free Software Foundation, Inc. +// Copyright (C) 2016-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/optional/cons/copy.cc gdb-10.2/gdb/unittests/optional/cons/copy.cc --- gdb-9.1/gdb/unittests/optional/cons/copy.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/optional/cons/copy.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2013-2020 Free Software Foundation, Inc. +// Copyright (C) 2013-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/optional/cons/default.cc gdb-10.2/gdb/unittests/optional/cons/default.cc --- gdb-9.1/gdb/unittests/optional/cons/default.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/optional/cons/default.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2013-2020 Free Software Foundation, Inc. +// Copyright (C) 2013-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/optional/cons/move.cc gdb-10.2/gdb/unittests/optional/cons/move.cc --- gdb-9.1/gdb/unittests/optional/cons/move.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/optional/cons/move.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2013-2020 Free Software Foundation, Inc. +// Copyright (C) 2013-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/optional/cons/value.cc gdb-10.2/gdb/unittests/optional/cons/value.cc --- gdb-9.1/gdb/unittests/optional/cons/value.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/optional/cons/value.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2013-2020 Free Software Foundation, Inc. +// Copyright (C) 2013-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/optional/in_place.cc gdb-10.2/gdb/unittests/optional/in_place.cc --- gdb-9.1/gdb/unittests/optional/in_place.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/optional/in_place.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2013-2020 Free Software Foundation, Inc. +// Copyright (C) 2013-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/optional/observers/1.cc gdb-10.2/gdb/unittests/optional/observers/1.cc --- gdb-9.1/gdb/unittests/optional/observers/1.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/optional/observers/1.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2013-2020 Free Software Foundation, Inc. +// Copyright (C) 2013-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/optional/observers/2.cc gdb-10.2/gdb/unittests/optional/observers/2.cc --- gdb-9.1/gdb/unittests/optional/observers/2.cc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/optional/observers/2.cc 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2013-2020 Free Software Foundation, Inc. +// Copyright (C) 2013-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/gdb/unittests/optional-selftests.c gdb-10.2/gdb/unittests/optional-selftests.c --- gdb-9.1/gdb/unittests/optional-selftests.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/unittests/optional-selftests.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Self tests for optional for GDB, the GNU debugger. - Copyright (C) 2017-2020 Free Software Foundation, Inc. + Copyright (C) 2017-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -87,6 +87,7 @@ } /* namespace optional */ } /* namespace selftests */ +void _initialize_optional_selftests (); void _initialize_optional_selftests () { diff -Nru gdb-9.1/gdb/unittests/parse-connection-spec-selftests.c gdb-10.2/gdb/unittests/parse-connection-spec-selftests.c --- gdb-9.1/gdb/unittests/parse-connection-spec-selftests.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/unittests/parse-connection-spec-selftests.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Self tests for parsing connection specs for GDB, the GNU debugger. - Copyright (C) 2018-2020 Free Software Foundation, Inc. + Copyright (C) 2018-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -239,6 +239,7 @@ } /* namespace parse_connection_spec_tests */ } /* namespace selftests */ +void _initialize_parse_connection_spec_selftests (); void _initialize_parse_connection_spec_selftests () { diff -Nru gdb-9.1/gdb/unittests/ptid-selftests.c gdb-10.2/gdb/unittests/ptid-selftests.c --- gdb-9.1/gdb/unittests/ptid-selftests.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unittests/ptid-selftests.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Self tests for ptid_t for GDB, the GNU debugger. - Copyright (C) 2017-2020 Free Software Foundation, Inc. + Copyright (C) 2017-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/unittests/rsp-low-selftests.c gdb-10.2/gdb/unittests/rsp-low-selftests.c --- gdb-9.1/gdb/unittests/rsp-low-selftests.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/unittests/rsp-low-selftests.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Unit tests for the rsp-low.c file. - Copyright (C) 2017-2020 Free Software Foundation, Inc. + Copyright (C) 2017-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -61,6 +61,7 @@ } /* namespace rsp_low */ } /* namespace selftests */ +void _initialize_rsp_low_selftests (); void _initialize_rsp_low_selftests () { diff -Nru gdb-9.1/gdb/unittests/scoped_fd-selftests.c gdb-10.2/gdb/unittests/scoped_fd-selftests.c --- gdb-9.1/gdb/unittests/scoped_fd-selftests.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/unittests/scoped_fd-selftests.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Self tests for scoped_fd for GDB, the GNU debugger. - Copyright (C) 2018-2020 Free Software Foundation, Inc. + Copyright (C) 2018-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -93,6 +93,7 @@ } /* namespace scoped_fd */ } /* namespace selftests */ +void _initialize_scoped_fd_selftests (); void _initialize_scoped_fd_selftests () { diff -Nru gdb-9.1/gdb/unittests/scoped_mmap-selftests.c gdb-10.2/gdb/unittests/scoped_mmap-selftests.c --- gdb-9.1/gdb/unittests/scoped_mmap-selftests.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/unittests/scoped_mmap-selftests.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Self tests for scoped_mmap for GDB, the GNU debugger. - Copyright (C) 2018-2020 Free Software Foundation, Inc. + Copyright (C) 2018-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -135,6 +135,7 @@ #endif /* !defined(HAVE_SYS_MMAN_H) */ +void _initialize_scoped_mmap_selftests (); void _initialize_scoped_mmap_selftests () { diff -Nru gdb-9.1/gdb/unittests/scoped_restore-selftests.c gdb-10.2/gdb/unittests/scoped_restore-selftests.c --- gdb-9.1/gdb/unittests/scoped_restore-selftests.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/unittests/scoped_restore-selftests.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Self tests for scoped_restore for GDB, the GNU debugger. - Copyright (C) 2017-2020 Free Software Foundation, Inc. + Copyright (C) 2017-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -103,6 +103,7 @@ } /* namespace scoped_restore_tests */ } /* namespace selftests */ +void _initialize_scoped_restore_selftests (); void _initialize_scoped_restore_selftests () { diff -Nru gdb-9.1/gdb/unittests/string_view-selftests.c gdb-10.2/gdb/unittests/string_view-selftests.c --- gdb-9.1/gdb/unittests/string_view-selftests.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/unittests/string_view-selftests.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Self tests for string_view for GDB, the GNU debugger. - Copyright (C) 2018-2020 Free Software Foundation, Inc. + Copyright (C) 2018-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -172,6 +172,7 @@ #endif /* __cplusplus < 201703L */ +void _initialize_string_view_selftests (); void _initialize_string_view_selftests () { diff -Nru gdb-9.1/gdb/unittests/style-selftests.c gdb-10.2/gdb/unittests/style-selftests.c --- gdb-9.1/gdb/unittests/style-selftests.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/unittests/style-selftests.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Self tests for ui_file_style - Copyright (C) 2018-2020 Free Software Foundation, Inc. + Copyright (C) 2018-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -101,6 +101,7 @@ } /* namespace style */ } /* namespace selftests */ +void _initialize_style_selftest (); void _initialize_style_selftest () { diff -Nru gdb-9.1/gdb/unittests/tracepoint-selftests.c gdb-10.2/gdb/unittests/tracepoint-selftests.c --- gdb-9.1/gdb/unittests/tracepoint-selftests.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/unittests/tracepoint-selftests.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Self tests for tracepoint-related code for GDB, the GNU debugger. - Copyright (C) 2018-2020 Free Software Foundation, Inc. + Copyright (C) 2018-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -61,6 +61,7 @@ } /* namespace tracepoint_tests */ } /* namespace selftests */ +void _initialize_tracepoint_selftests (); void _initialize_tracepoint_selftests () { diff -Nru gdb-9.1/gdb/unittests/tui-selftests.c gdb-10.2/gdb/unittests/tui-selftests.c --- gdb-9.1/gdb/unittests/tui-selftests.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/unittests/tui-selftests.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Self tests for the TUI - Copyright (C) 2019-2020 Free Software Foundation, Inc. + Copyright (C) 2019-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -46,6 +46,7 @@ #endif /* TUI */ +void _initialize_tui_selftest (); void _initialize_tui_selftest () { diff -Nru gdb-9.1/gdb/unittests/unpack-selftests.c gdb-10.2/gdb/unittests/unpack-selftests.c --- gdb-9.1/gdb/unittests/unpack-selftests.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/unittests/unpack-selftests.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Self tests for unpack_field_as_long - Copyright (C) 2018-2020 Free Software Foundation, Inc. + Copyright (C) 2018-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -53,6 +53,7 @@ } } +void _initialize_unpack_selftests (); void _initialize_unpack_selftests () { diff -Nru gdb-9.1/gdb/unittests/utils-selftests.c gdb-10.2/gdb/unittests/utils-selftests.c --- gdb-9.1/gdb/unittests/utils-selftests.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/unittests/utils-selftests.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Unit tests for the utils.c file. - Copyright (C) 2018-2020 Free Software Foundation, Inc. + Copyright (C) 2018-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -51,6 +51,7 @@ } } +void _initialize_utils_selftests (); void _initialize_utils_selftests () { diff -Nru gdb-9.1/gdb/unittests/vec-utils-selftests.c gdb-10.2/gdb/unittests/vec-utils-selftests.c --- gdb-9.1/gdb/unittests/vec-utils-selftests.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/unittests/vec-utils-selftests.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Self tests for vector utility routines for GDB, the GNU debugger. - Copyright (C) 2019-2020 Free Software Foundation, Inc. + Copyright (C) 2019-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -66,6 +66,7 @@ } /* namespace vector_utils_tests */ } /* amespace selftests */ +void _initialize_vec_utils_selftests (); void _initialize_vec_utils_selftests () { diff -Nru gdb-9.1/gdb/unittests/xml-utils-selftests.c gdb-10.2/gdb/unittests/xml-utils-selftests.c --- gdb-9.1/gdb/unittests/xml-utils-selftests.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/unittests/xml-utils-selftests.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Unit tests for the xml-utils.c file. - Copyright (C) 2017-2020 Free Software Foundation, Inc. + Copyright (C) 2017-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -48,6 +48,7 @@ } } +void _initialize_xml_utils (); void _initialize_xml_utils () { diff -Nru gdb-9.1/gdb/unwind_stop_reasons.def gdb-10.2/gdb/unwind_stop_reasons.def --- gdb-9.1/gdb/unwind_stop_reasons.def 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/unwind_stop_reasons.def 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2011-2020 Free Software Foundation, Inc. +/* Copyright (C) 2011-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/user-regs.c gdb-10.2/gdb/user-regs.c --- gdb-9.1/gdb/user-regs.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/user-regs.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* User visible, per-frame registers, for GDB, the GNU debugger. - Copyright (C) 2002-2020 Free Software Foundation, Inc. + Copyright (C) 2002-2021 Free Software Foundation, Inc. Contributed by Red Hat. @@ -41,7 +41,10 @@ struct user_reg { const char *name; - struct value *(*read) (struct frame_info * frame, const void *baton); + /* Avoid the "read" symbol name as it conflicts with a preprocessor symbol + in the NetBSD header for Stack Smashing Protection, that wraps the read(2) + syscall. */ + struct value *(*xread) (struct frame_info * frame, const void *baton); const void *baton; struct user_reg *next; }; @@ -60,7 +63,7 @@ static void append_user_reg (struct gdb_user_regs *regs, const char *name, - user_reg_read_ftype *read, const void *baton, + user_reg_read_ftype *xread, const void *baton, struct user_reg *reg) { /* The caller is responsible for allocating memory needed to store @@ -68,7 +71,7 @@ register list stored in the common heap or a specific obstack. */ gdb_assert (reg != NULL); reg->name = name; - reg->read = read; + reg->xread = xread; reg->baton = baton; reg->next = NULL; (*regs->last) = reg; @@ -82,10 +85,10 @@ }; void -user_reg_add_builtin (const char *name, user_reg_read_ftype *read, +user_reg_add_builtin (const char *name, user_reg_read_ftype *xread, const void *baton) { - append_user_reg (&builtin_user_regs, name, read, baton, + append_user_reg (&builtin_user_regs, name, xread, baton, XNEW (struct user_reg)); } @@ -95,34 +98,26 @@ static struct gdbarch_data *user_regs_data; static void * -user_regs_init (struct gdbarch *gdbarch) +user_regs_init (struct obstack *obstack) { struct user_reg *reg; - struct gdb_user_regs *regs - = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct gdb_user_regs); + struct gdb_user_regs *regs = OBSTACK_ZALLOC (obstack, struct gdb_user_regs); regs->last = ®s->first; for (reg = builtin_user_regs.first; reg != NULL; reg = reg->next) - append_user_reg (regs, reg->name, reg->read, reg->baton, - GDBARCH_OBSTACK_ZALLOC (gdbarch, struct user_reg)); + append_user_reg (regs, reg->name, reg->xread, reg->baton, + OBSTACK_ZALLOC (obstack, struct user_reg)); return regs; } void user_reg_add (struct gdbarch *gdbarch, const char *name, - user_reg_read_ftype *read, const void *baton) + user_reg_read_ftype *xread, const void *baton) { struct gdb_user_regs *regs = (struct gdb_user_regs *) gdbarch_data (gdbarch, user_regs_data); - - if (regs == NULL) - { - /* ULGH, called during architecture initialization. Patch - things up. */ - regs = (struct gdb_user_regs *) user_regs_init (gdbarch); - deprecated_set_gdbarch_data (gdbarch, user_regs_data, regs); - } - append_user_reg (regs, name, read, baton, + gdb_assert (regs != NULL); + append_user_reg (regs, name, xread, baton, GDBARCH_OBSTACK_ZALLOC (gdbarch, struct user_reg)); } @@ -214,7 +209,7 @@ struct user_reg *reg = usernum_to_user_reg (gdbarch, regnum - maxregs); gdb_assert (reg != NULL); - return reg->read (frame, reg->baton); + return reg->xread (frame, reg->baton); } static void @@ -233,10 +228,11 @@ fprintf_unfiltered (gdb_stdout, " %-11s %3d\n", reg->name, regnum); } +void _initialize_user_regs (); void -_initialize_user_regs (void) +_initialize_user_regs () { - user_regs_data = gdbarch_data_register_post_init (user_regs_init); + user_regs_data = gdbarch_data_register_pre_init (user_regs_init); add_cmd ("user-registers", class_maintenance, maintenance_print_user_registers, diff -Nru gdb-9.1/gdb/user-regs.h gdb-10.2/gdb/user-regs.h --- gdb-9.1/gdb/user-regs.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/user-regs.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Per-frame user registers, for GDB, the GNU debugger. - Copyright (C) 2002-2020 Free Software Foundation, Inc. + Copyright (C) 2002-2021 Free Software Foundation, Inc. Contributed by Red Hat. diff -Nru gdb-9.1/gdb/utils.c gdb-10.2/gdb/utils.c --- gdb-9.1/gdb/utils.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/utils.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* General utility routines for GDB, the GNU debugger. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -74,6 +74,7 @@ #include "gdbsupport/scope-exit.h" #include "gdbarch.h" #include "cli-out.h" +#include "gdbsupport/gdb-safe-ctype.h" void (*deprecated_error_begin_hook) (void); @@ -186,7 +187,7 @@ else fputs_unfiltered (msg, gdb_stderr); - abort (); /* NOTE: GDB has only three calls to abort(). */ + abort (); /* ARI: abort */ } /* Dump core trying to increase the core soft limit to hard limit first. */ @@ -200,7 +201,7 @@ setrlimit (RLIMIT_CORE, &rlim); #endif /* HAVE_SETRLIMIT */ - abort (); /* NOTE: GDB has only three calls to abort(). */ + abort (); /* ARI: abort */ } /* Check whether GDB will be able to dump core using the dump_core @@ -320,7 +321,7 @@ does not fix this problem. This is the solution suggested at http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25509. */ if (write (STDERR_FILENO, msg, sizeof (msg)) != sizeof (msg)) - abort (); /* NOTE: GDB has only three calls to abort(). */ + abort (); /* ARI: abort */ exit (1); } } @@ -469,18 +470,6 @@ va_end (ap); } -/* Dummy functions to keep add_prefix_cmd happy. */ - -static void -set_internal_problem_cmd (const char *args, int from_tty) -{ -} - -static void -show_internal_problem_cmd (const char *args, int from_tty) -{ -} - /* When GDB reports an internal problem (error or warning) it gives the user the opportunity to quit GDB and/or create a core file of the current debug session. This function registers a few commands @@ -515,19 +504,17 @@ show_doc = xstrprintf (_("Show what GDB does when %s is detected."), problem->name); - add_prefix_cmd (problem->name, - class_maintenance, set_internal_problem_cmd, set_doc, - set_cmd_list, - concat ("maintenance set ", problem->name, " ", - (char *) NULL), - 0/*allow-unknown*/, &maintenance_set_cmdlist); - - add_prefix_cmd (problem->name, - class_maintenance, show_internal_problem_cmd, show_doc, - show_cmd_list, - concat ("maintenance show ", problem->name, " ", - (char *) NULL), - 0/*allow-unknown*/, &maintenance_show_cmdlist); + add_basic_prefix_cmd (problem->name, class_maintenance, set_doc, + set_cmd_list, + concat ("maintenance set ", problem->name, " ", + (char *) NULL), + 0/*allow-unknown*/, &maintenance_set_cmdlist); + + add_show_prefix_cmd (problem->name, class_maintenance, show_doc, + show_cmd_list, + concat ("maintenance show ", problem->name, " ", + (char *) NULL), + 0/*allow-unknown*/, &maintenance_show_cmdlist); if (problem->user_settable_should_quit) { @@ -691,6 +678,15 @@ } } +/* See common/errors.h. */ + +void +flush_streams () +{ + gdb_stdout->flush (); + gdb_stderr->flush (); +} + /* My replacement for the read system call. Used like `read' but keeps going if `read' returns too soon. */ @@ -1030,7 +1026,7 @@ while (++count < 3) { c = (**string_ptr); - if (isdigit (c) && c != '8' && c != '9') + if (ISDIGIT (c) && c != '8' && c != '9') { (*string_ptr)++; i *= 8; @@ -1277,7 +1273,7 @@ } /* If the output is not a terminal, don't paginate it. */ - if (!ui_file_isatty (gdb_stdout)) + if (!gdb_stdout->isatty ()) lines_per_page = UINT_MAX; #endif } @@ -1405,7 +1401,7 @@ if (stream == nullptr) wrap_buffer.append (style.to_ansi ()); else - ui_file_puts (stream, style.to_ansi ().c_str ()); + stream->puts (style.to_ansi ().c_str ()); } /* Set the current output style. This will affect future uses of the @@ -1539,7 +1535,7 @@ { if (stream == gdb_stdout && !wrap_buffer.empty ()) { - ui_file_puts (stream, wrap_buffer.c_str ()); + stream->puts (wrap_buffer.c_str ()); wrap_buffer.clear (); } } @@ -1550,7 +1546,7 @@ gdb_flush (struct ui_file *stream) { flush_wrap_buffer (stream); - ui_file_flush (stream); + stream->flush (); } /* Indicate that if the next sequence of characters overflows the line, @@ -1578,9 +1574,7 @@ wrap_here (const char *indent) { /* This should have been allocated, but be paranoid anyway. */ - if (!filter_initialized) - internal_error (__FILE__, __LINE__, - _("failed internal consistency check")); + gdb_assert (filter_initialized); flush_wrap_buffer (gdb_stdout); if (chars_per_line == UINT_MAX) /* No line overflow checking. */ @@ -1697,7 +1691,7 @@ || top_level_interpreter ()->interp_ui_out ()->is_mi_like_p ()) { flush_wrap_buffer (stream); - ui_file_puts (stream, linebuffer); + stream->puts (linebuffer); return; } @@ -1776,7 +1770,12 @@ newline -- if chars_per_line is right, we probably just overflowed anyway; if it's wrong, let us keep going. */ - fputc_unfiltered ('\n', stream); + /* XXX: The ideal thing would be to call + 'stream->putc' here, but we can't because it + currently calls 'fputc_unfiltered', which ends up + calling us, which generates an infinite + recursion. */ + stream->puts ("\n"); } else { @@ -1797,7 +1796,7 @@ /* Now output indentation and wrapped string. */ if (wrap_column) { - ui_file_puts (stream, wrap_indent); + stream->puts (wrap_indent); if (stream->can_emit_style_escape ()) emit_style_escape (save_style, stream); /* FIXME, this strlen is what prevents wrap_indent from @@ -1821,7 +1820,12 @@ wrap_here ((char *) 0); /* Spit out chars, cancel further wraps. */ lines_printed++; - fputc_unfiltered ('\n', stream); + /* XXX: The ideal thing would be to call + 'stream->putc' here, but we can't because it + currently calls 'fputc_unfiltered', which ends up + calling us, which generates an infinite + recursion. */ + stream->puts ("\n"); lineptr++; } } @@ -1916,10 +1920,7 @@ int putchar_unfiltered (int c) { - char buf = c; - - ui_file_write (gdb_stdout, &buf, 1); - return c; + return fputc_unfiltered (c, gdb_stdout); } /* Write character C to gdb_stdout using GDB's paging mechanism and return C. @@ -1934,9 +1935,11 @@ int fputc_unfiltered (int c, struct ui_file *stream) { - char buf = c; + char buf[2]; - ui_file_write (stream, &buf, 1); + buf[0] = c; + buf[1] = 0; + fputs_unfiltered (buf, stream); return c; } @@ -1993,7 +1996,7 @@ switch (ch) { default: - if (isprint (ch)) + if (gdb_isprint (ch)) fputc_unfiltered (ch, gdb_stdlog); else @@ -2258,8 +2261,7 @@ if (n > max_spaces) { - if (spaces) - xfree (spaces); + xfree (spaces); spaces = (char *) xmalloc (n + 1); for (t = spaces + n; t != spaces;) *--t = ' '; @@ -2315,7 +2317,7 @@ static bool valid_identifier_name_char (int ch) { - return (isalnum (ch) || ch == '_'); + return (ISALNUM (ch) || ch == '_'); } /* Skip to end of token, or to END, whatever comes first. Input is @@ -2325,7 +2327,7 @@ cp_skip_operator_token (const char *token, const char *end) { const char *p = token; - while (p != end && !isspace (*p) && *p != '(') + while (p != end && !ISSPACE (*p) && *p != '(') { if (valid_identifier_name_char (*p)) { @@ -2379,9 +2381,9 @@ static void skip_ws (const char *&string1, const char *&string2, const char *end_str2) { - while (isspace (*string1)) + while (ISSPACE (*string1)) string1++; - while (string2 < end_str2 && isspace (*string2)) + while (string2 < end_str2 && ISSPACE (*string2)) string2++; } @@ -2443,8 +2445,8 @@ while (1) { if (skip_spaces - || ((isspace (*string1) && !valid_identifier_name_char (*string2)) - || (isspace (*string2) && !valid_identifier_name_char (*string1)))) + || ((ISSPACE (*string1) && !valid_identifier_name_char (*string2)) + || (ISSPACE (*string2) && !valid_identifier_name_char (*string1)))) { skip_ws (string1, string2, end_str2); skip_spaces = false; @@ -2477,7 +2479,7 @@ if (match_for_lcd != NULL && abi_start != string1) match_for_lcd->mark_ignored_range (abi_start, string1); - while (isspace (*string1)) + while (ISSPACE (*string1)) string1++; } @@ -2502,9 +2504,9 @@ string1++; string2++; - while (isspace (*string1)) + while (ISSPACE (*string1)) string1++; - while (string2 < end_str2 && isspace (*string2)) + while (string2 < end_str2 && ISSPACE (*string2)) string2++; continue; } @@ -2598,14 +2600,14 @@ if (case_sensitivity == case_sensitive_on && *string1 != *string2) break; if (case_sensitivity == case_sensitive_off - && (tolower ((unsigned char) *string1) - != tolower ((unsigned char) *string2))) + && (TOLOWER ((unsigned char) *string1) + != TOLOWER ((unsigned char) *string2))) break; /* If we see any non-whitespace, non-identifier-name character (any of "()<>*&" etc.), then skip spaces the next time around. */ - if (!isspace (*string1) && !valid_identifier_name_char (*string1)) + if (!ISSPACE (*string1) && !valid_identifier_name_char (*string1)) skip_spaces = true; string1++; @@ -2726,16 +2728,16 @@ while (*string1 != '\0' && *string2 != '\0') { - while (isspace (*string1)) + while (ISSPACE (*string1)) string1++; - while (isspace (*string2)) + while (ISSPACE (*string2)) string2++; switch (case_pass) { case case_sensitive_off: - c1 = tolower ((unsigned char) *string1); - c2 = tolower ((unsigned char) *string2); + c1 = TOLOWER ((unsigned char) *string1); + c2 = TOLOWER ((unsigned char) *string2); break; case case_sensitive_on: c1 = *string1; @@ -2923,17 +2925,17 @@ { CORE_ADDR addr = 0; - if (my_string[0] == '0' && tolower (my_string[1]) == 'x') + if (my_string[0] == '0' && TOLOWER (my_string[1]) == 'x') { /* Assume that it is in hex. */ int i; for (i = 2; my_string[i] != '\0'; i++) { - if (isdigit (my_string[i])) + if (ISDIGIT (my_string[i])) addr = (my_string[i] - '0') + (addr * 16); - else if (isxdigit (my_string[i])) - addr = (tolower (my_string[i]) - 'a' + 0xa) + (addr * 16); + else if (ISXDIGIT (my_string[i])) + addr = (TOLOWER (my_string[i]) - 'a' + 0xa) + (addr * 16); else error (_("invalid hex \"%s\""), my_string); } @@ -2945,7 +2947,7 @@ for (i = 0; my_string[i] != '\0'; i++) { - if (isdigit (my_string[i])) + if (ISDIGIT (my_string[i])) addr = (my_string[i] - '0') + (addr * 10); else error (_("invalid decimal \"%s\""), my_string); @@ -2989,6 +2991,31 @@ gdb_realpath_check_trailer ("", ""); } +/* Test the gdb_argv::as_array_view method. */ + +static void +gdb_argv_as_array_view_test () +{ + { + gdb_argv argv; + + gdb::array_view<char *> view = argv.as_array_view (); + + SELF_CHECK (view.data () == nullptr); + SELF_CHECK (view.size () == 0); + } + { + gdb_argv argv ("une bonne 50"); + + gdb::array_view<char *> view = argv.as_array_view (); + + SELF_CHECK (view.size () == 3); + SELF_CHECK (strcmp (view[0], "une") == 0); + SELF_CHECK (strcmp (view[1], "bonne") == 0); + SELF_CHECK (strcmp (view[2], "50") == 0); + } +} + #endif /* GDB_SELF_TEST */ /* Allocation function for the libiberty hash table which uses an @@ -3048,9 +3075,6 @@ { char **argv = buildargv (s); - if (s != NULL && argv == NULL) - malloc_failure (0); - freeargv (m_argv); m_argv = argv; } @@ -3429,12 +3453,13 @@ buf |= *source << avail; buf &= (1 << nbits) - 1; - *dest = (*dest & (~0 << nbits)) | buf; + *dest = (*dest & (~0U << nbits)) | buf; } } +void _initialize_utils (); void -_initialize_utils (void) +_initialize_utils () { add_setshow_uinteger_cmd ("width", class_support, &chars_per_line, _("\ Set number of characters where GDB should wrap lines of its output."), _("\ @@ -3489,5 +3514,6 @@ #if GDB_SELF_TEST selftests::register_test ("gdb_realpath", gdb_realpath_tests); + selftests::register_test ("gdb_argv_array_view", gdb_argv_as_array_view_test); #endif } diff -Nru gdb-9.1/gdb/utils.h gdb-10.2/gdb/utils.h --- gdb-9.1/gdb/utils.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/utils.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,7 +1,7 @@ /* *INDENT-OFF* */ /* ATTRIBUTE_PRINTF confuses indent, avoid running it for now. */ /* I/O, string, cleanup, and other random utilities for GDB. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -22,6 +22,7 @@ #define UTILS_H #include "exceptions.h" +#include "gdbsupport/array-view.h" #include "gdbsupport/scoped_restore.h" #include <chrono> @@ -146,10 +147,7 @@ } /* A constructor that calls buildargv on STR. STR may be NULL, in - which case this object is initialized with a NULL array. If - buildargv fails due to out-of-memory, call malloc_failure. - Therefore, the value is guaranteed to be non-NULL, unless the - parameter itself is NULL. */ + which case this object is initialized with a NULL array. */ explicit gdb_argv (const char *str) : m_argv (NULL) @@ -213,6 +211,13 @@ return m_argv[arg]; } + /* Return the arguments array as an array view. */ + + gdb::array_view<char *> as_array_view () + { + return gdb::array_view<char *> (this->get (), this->count ()); + } + /* The iterator type. */ typedef char **iterator; diff -Nru gdb-9.1/gdb/v850-tdep.c gdb-10.2/gdb/v850-tdep.c --- gdb-9.1/gdb/v850-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/v850-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for the NEC V850 for GDB, the GNU debugger. - Copyright (C) 1996-2020 Free Software Foundation, Inc. + Copyright (C) 1996-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -22,7 +22,7 @@ #include "frame-base.h" #include "trad-frame.h" #include "frame-unwind.h" -#include "dwarf2-frame.h" +#include "dwarf2/frame.h" #include "gdbtypes.h" #include "inferior.h" #include "gdbcore.h" @@ -498,9 +498,9 @@ static int v850_type_is_scalar (struct type *t) { - return (TYPE_CODE (t) != TYPE_CODE_STRUCT - && TYPE_CODE (t) != TYPE_CODE_UNION - && TYPE_CODE (t) != TYPE_CODE_ARRAY); + return (t->code () != TYPE_CODE_STRUCT + && t->code () != TYPE_CODE_UNION + && t->code () != TYPE_CODE_ARRAY); } /* Should call_function allocate stack space for a struct return? */ @@ -530,15 +530,15 @@ /* The value is a structure or union with a single element and that element is either a single basic type or an array of a single basic type whose size is greater than or equal to 4 -> returned in register. */ - if ((TYPE_CODE (type) == TYPE_CODE_STRUCT - || TYPE_CODE (type) == TYPE_CODE_UNION) - && TYPE_NFIELDS (type) == 1) + if ((type->code () == TYPE_CODE_STRUCT + || type->code () == TYPE_CODE_UNION) + && type->num_fields () == 1) { - fld_type = TYPE_FIELD_TYPE (type, 0); + fld_type = type->field (0).type (); if (v850_type_is_scalar (fld_type) && TYPE_LENGTH (fld_type) >= 4) return 0; - if (TYPE_CODE (fld_type) == TYPE_CODE_ARRAY) + if (fld_type->code () == TYPE_CODE_ARRAY) { tgt_type = TYPE_TARGET_TYPE (fld_type); if (v850_type_is_scalar (tgt_type) && TYPE_LENGTH (tgt_type) >= 4) @@ -549,14 +549,14 @@ /* The value is a structure whose first element is an integer or a float, and which contains no arrays of more than two elements -> returned in register. */ - if (TYPE_CODE (type) == TYPE_CODE_STRUCT - && v850_type_is_scalar (TYPE_FIELD_TYPE (type, 0)) - && TYPE_LENGTH (TYPE_FIELD_TYPE (type, 0)) == 4) + if (type->code () == TYPE_CODE_STRUCT + && v850_type_is_scalar (type->field (0).type ()) + && TYPE_LENGTH (type->field (0).type ()) == 4) { - for (i = 1; i < TYPE_NFIELDS (type); ++i) + for (i = 1; i < type->num_fields (); ++i) { - fld_type = TYPE_FIELD_TYPE (type, 0); - if (TYPE_CODE (fld_type) == TYPE_CODE_ARRAY) + fld_type = type->field (0).type (); + if (fld_type->code () == TYPE_CODE_ARRAY) { tgt_type = TYPE_TARGET_TYPE (fld_type); if (TYPE_LENGTH (tgt_type) > 0 @@ -570,11 +570,11 @@ /* The value is a union which contains at least one field which would be returned in registers according to these rules -> returned in register. */ - if (TYPE_CODE (type) == TYPE_CODE_UNION) + if (type->code () == TYPE_CODE_UNION) { - for (i = 0; i < TYPE_NFIELDS (type); ++i) + for (i = 0; i < type->num_fields (); ++i) { - fld_type = TYPE_FIELD_TYPE (type, 0); + fld_type = type->field (0).type (); if (!v850_use_struct_convention (gdbarch, fld_type)) return 0; } @@ -981,9 +981,9 @@ { int i; - for (i = 0; i < TYPE_NFIELDS (type); i++) + for (i = 0; i < type->num_fields (); i++) { - if (v850_eight_byte_align_p (TYPE_FIELD_TYPE (type, i))) + if (v850_eight_byte_align_p (type->field (i).type ())) return 1; } } @@ -1453,8 +1453,9 @@ return gdbarch; } +void _initialize_v850_tdep (); void -_initialize_v850_tdep (void) +_initialize_v850_tdep () { register_gdbarch_init (bfd_arch_v850, v850_gdbarch_init); register_gdbarch_init (bfd_arch_v850_rh850, v850_gdbarch_init); diff -Nru gdb-9.1/gdb/valarith.c gdb-10.2/gdb/valarith.c --- gdb-9.1/gdb/valarith.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/valarith.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Perform arithmetic and other operations on values, for GDB. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -48,19 +48,19 @@ LONGEST sz = -1; struct type *ptr_target; - gdb_assert (TYPE_CODE (ptr_type) == TYPE_CODE_PTR); + gdb_assert (ptr_type->code () == TYPE_CODE_PTR); ptr_target = check_typedef (TYPE_TARGET_TYPE (ptr_type)); sz = type_length_units (ptr_target); if (sz == 0) { - if (TYPE_CODE (ptr_type) == TYPE_CODE_VOID) + if (ptr_type->code () == TYPE_CODE_VOID) sz = 1; else { const char *name; - name = TYPE_NAME (ptr_target); + name = ptr_target->name (); if (name == NULL) error (_("Cannot perform pointer math on incomplete types, " "try casting to a known type, or void *.")); @@ -107,8 +107,8 @@ type1 = check_typedef (value_type (arg1)); type2 = check_typedef (value_type (arg2)); - gdb_assert (TYPE_CODE (type1) == TYPE_CODE_PTR); - gdb_assert (TYPE_CODE (type2) == TYPE_CODE_PTR); + gdb_assert (type1->code () == TYPE_CODE_PTR); + gdb_assert (type2->code () == TYPE_CODE_PTR); if (TYPE_LENGTH (check_typedef (TYPE_TARGET_TYPE (type1))) != TYPE_LENGTH (check_typedef (TYPE_TARGET_TYPE (type2)))) @@ -146,29 +146,37 @@ array = coerce_ref (array); tarray = check_typedef (value_type (array)); - if (TYPE_CODE (tarray) == TYPE_CODE_ARRAY - || TYPE_CODE (tarray) == TYPE_CODE_STRING) + if (tarray->code () == TYPE_CODE_ARRAY + || tarray->code () == TYPE_CODE_STRING) { - struct type *range_type = TYPE_INDEX_TYPE (tarray); - LONGEST lowerbound, upperbound; + struct type *range_type = tarray->index_type (); + gdb::optional<LONGEST> lowerbound = get_discrete_low_bound (range_type); + if (!lowerbound.has_value ()) + lowerbound = 0; - get_discrete_bounds (range_type, &lowerbound, &upperbound); if (VALUE_LVAL (array) != lval_memory) - return value_subscripted_rvalue (array, index, lowerbound); + return value_subscripted_rvalue (array, index, *lowerbound); if (c_style == 0) { - if (index >= lowerbound && index <= upperbound) - return value_subscripted_rvalue (array, index, lowerbound); + gdb::optional<LONGEST> upperbound + = get_discrete_high_bound (range_type); + + if (!upperbound.has_value ()) + upperbound = 0; + + if (index >= *lowerbound && index <= *upperbound) + return value_subscripted_rvalue (array, index, *lowerbound); + /* Emit warning unless we have an array of unknown size. An array of unknown size has lowerbound 0 and upperbound -1. */ - if (upperbound > -1) + if (*upperbound > -1) warning (_("array or string index out of range")); /* fall doing C stuff */ c_style = 1; } - index -= lowerbound; + index -= *lowerbound; array = value_coerce_array (array); } @@ -187,11 +195,11 @@ { struct type *array_type = check_typedef (value_type (array)); struct type *elt_type = check_typedef (TYPE_TARGET_TYPE (array_type)); - ULONGEST elt_size = type_length_units (elt_type); + LONGEST elt_size = type_length_units (elt_type); /* Fetch the bit stride and convert it to a byte stride, assuming 8 bits in a byte. */ - LONGEST stride = TYPE_ARRAY_BIT_STRIDE (array_type); + LONGEST stride = array_type->bit_stride (); if (stride != 0) { struct gdbarch *arch = get_type_arch (elt_type); @@ -199,13 +207,14 @@ elt_size = stride / (unit_size * 8); } - ULONGEST elt_offs = elt_size * (index - lowerbound); + LONGEST elt_offs = elt_size * (index - lowerbound); + bool array_upper_bound_undefined + = array_type->bounds ()->high.kind () == PROP_UNDEFINED; if (index < lowerbound - || (!TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED (array_type) - && elt_offs >= type_length_units (array_type)) - || (VALUE_LVAL (array) != lval_memory - && TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED (array_type))) + || (!array_upper_bound_undefined + && elt_offs >= type_length_units (array_type)) + || (VALUE_LVAL (array) != lval_memory && array_upper_bound_undefined)) { if (type_not_associated (array_type)) error (_("no such vector element (vector not associated)")); @@ -220,7 +229,7 @@ CORE_ADDR address; address = value_address (array) + elt_offs; - elt_type = resolve_dynamic_type (elt_type, NULL, address); + elt_type = resolve_dynamic_type (elt_type, {}, address); } return value_from_component (array, elt_type, elt_offs); @@ -248,8 +257,8 @@ if (TYPE_IS_REFERENCE (type2)) type2 = check_typedef (TYPE_TARGET_TYPE (type2)); - return (TYPE_CODE (type1) == TYPE_CODE_STRUCT - || TYPE_CODE (type2) == TYPE_CODE_STRUCT); + return (type1->code () == TYPE_CODE_STRUCT + || type2->code () == TYPE_CODE_STRUCT); } /* Check to see if either argument is a structure, or a reference to @@ -281,7 +290,7 @@ type1 = check_typedef (value_type (arg1)); if (TYPE_IS_REFERENCE (type1)) type1 = check_typedef (TYPE_TARGET_TYPE (type1)); - return TYPE_CODE (type1) == TYPE_CODE_STRUCT; + return type1->code () == TYPE_CODE_STRUCT; } /* Try to find an operator named OPERATOR which takes NARGS arguments @@ -364,7 +373,7 @@ /* now we know that what we have to do is construct our arg vector and find the right function to call it with. */ - if (TYPE_CODE (check_typedef (value_type (arg1))) != TYPE_CODE_STRUCT) + if (check_typedef (value_type (arg1))->code () != TYPE_CODE_STRUCT) error (_("Can't do that binary op on that type")); /* FIXME be explicit */ value *argvec_storage[3]; @@ -491,7 +500,7 @@ argvec[1] = argvec[0]; argvec = argvec.slice (1); } - if (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_XMETHOD) + if (value_type (argvec[0])->code () == TYPE_CODE_XMETHOD) { /* Static xmethods are not supported yet. */ gdb_assert (static_memfuncp == 0); @@ -540,7 +549,7 @@ /* now we know that what we have to do is construct our arg vector and find the right function to call it with. */ - if (TYPE_CODE (check_typedef (value_type (arg1))) != TYPE_CODE_STRUCT) + if (check_typedef (value_type (arg1))->code () != TYPE_CODE_STRUCT) error (_("Can't do that unary op on that type")); /* FIXME be explicit */ value *argvec_storage[3]; @@ -605,7 +614,7 @@ argvec[1] = argvec[0]; argvec = argvec.slice (1); } - if (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_XMETHOD) + if (value_type (argvec[0])->code () == TYPE_CODE_XMETHOD) { /* Static xmethods are not supported yet. */ gdb_assert (static_memfuncp == 0); @@ -675,7 +684,7 @@ to the second of the two concatenated values or the value to be repeated. */ - if (TYPE_CODE (type2) == TYPE_CODE_INT) + if (type2->code () == TYPE_CODE_INT) { struct type *tmp = type1; @@ -692,17 +701,17 @@ /* Now process the input values. */ - if (TYPE_CODE (type1) == TYPE_CODE_INT) + if (type1->code () == TYPE_CODE_INT) { /* We have a repeat count. Validate the second value and then construct a value repeated that many times. */ - if (TYPE_CODE (type2) == TYPE_CODE_STRING - || TYPE_CODE (type2) == TYPE_CODE_CHAR) + if (type2->code () == TYPE_CODE_STRING + || type2->code () == TYPE_CODE_CHAR) { count = longest_to_int (value_as_long (inval1)); inval2len = TYPE_LENGTH (type2); std::vector<char> ptr (count * inval2len); - if (TYPE_CODE (type2) == TYPE_CODE_CHAR) + if (type2->code () == TYPE_CODE_CHAR) { char_type = type2; @@ -725,7 +734,7 @@ } outval = value_string (ptr.data (), count * inval2len, char_type); } - else if (TYPE_CODE (type2) == TYPE_CODE_BOOL) + else if (type2->code () == TYPE_CODE_BOOL) { error (_("unimplemented support for boolean repeats")); } @@ -734,19 +743,19 @@ error (_("can't repeat values of that type")); } } - else if (TYPE_CODE (type1) == TYPE_CODE_STRING - || TYPE_CODE (type1) == TYPE_CODE_CHAR) + else if (type1->code () == TYPE_CODE_STRING + || type1->code () == TYPE_CODE_CHAR) { /* We have two character strings to concatenate. */ - if (TYPE_CODE (type2) != TYPE_CODE_STRING - && TYPE_CODE (type2) != TYPE_CODE_CHAR) + if (type2->code () != TYPE_CODE_STRING + && type2->code () != TYPE_CODE_CHAR) { error (_("Strings can only be concatenated with other strings.")); } inval1len = TYPE_LENGTH (type1); inval2len = TYPE_LENGTH (type2); std::vector<char> ptr (inval1len + inval2len); - if (TYPE_CODE (type1) == TYPE_CODE_CHAR) + if (type1->code () == TYPE_CODE_CHAR) { char_type = type1; @@ -758,7 +767,7 @@ memcpy (ptr.data (), value_contents (inval1), inval1len); } - if (TYPE_CODE (type2) == TYPE_CODE_CHAR) + if (type2->code () == TYPE_CODE_CHAR) { ptr[inval1len] = (char) unpack_long (type2, value_contents (inval2)); @@ -769,10 +778,10 @@ } outval = value_string (ptr.data (), inval1len + inval2len, char_type); } - else if (TYPE_CODE (type1) == TYPE_CODE_BOOL) + else if (type1->code () == TYPE_CODE_BOOL) { /* We have two bitstrings to concatenate. */ - if (TYPE_CODE (type2) != TYPE_CODE_BOOL) + if (type2->code () != TYPE_CODE_BOOL) { error (_("Booleans can only be concatenated " "with other bitstrings or booleans.")); @@ -865,7 +874,7 @@ gdb_assert (is_floating_type (type1) || is_floating_type (type2)); if (is_floating_type (type1) && is_floating_type (type2) - && TYPE_CODE (type1) != TYPE_CODE (type2)) + && type1->code () != type2->code ()) /* The DFP extension to the C language does not allow mixing of * decimal float types with other float types in expressions * (see WDTR 24732, page 12). */ @@ -888,8 +897,8 @@ target_float_from_longest (x, *eff_type_x, value_as_long (arg1)); } else - error (_("Don't know how to convert from %s to %s."), TYPE_NAME (type1), - TYPE_NAME (type2)); + error (_("Don't know how to convert from %s to %s."), type1->name (), + type2->name ()); /* Obtain value of arg2, converting from other types if necessary. */ @@ -907,8 +916,159 @@ target_float_from_longest (y, *eff_type_y, value_as_long (arg2)); } else - error (_("Don't know how to convert from %s to %s."), TYPE_NAME (type1), - TYPE_NAME (type2)); + error (_("Don't know how to convert from %s to %s."), type1->name (), + type2->name ()); +} + +/* A helper function that finds the type to use for a binary operation + involving TYPE1 and TYPE2. */ + +static struct type * +promotion_type (struct type *type1, struct type *type2) +{ + struct type *result_type; + + if (is_floating_type (type1) || is_floating_type (type2)) + { + /* If only one type is floating-point, use its type. + Otherwise use the bigger type. */ + if (!is_floating_type (type1)) + result_type = type2; + else if (!is_floating_type (type2)) + result_type = type1; + else if (TYPE_LENGTH (type2) > TYPE_LENGTH (type1)) + result_type = type2; + else + result_type = type1; + } + else + { + /* Integer types. */ + if (TYPE_LENGTH (type1) > TYPE_LENGTH (type2)) + result_type = type1; + else if (TYPE_LENGTH (type2) > TYPE_LENGTH (type1)) + result_type = type2; + else if (TYPE_UNSIGNED (type1)) + result_type = type1; + else if (TYPE_UNSIGNED (type2)) + result_type = type2; + else + result_type = type1; + } + + return result_type; +} + +static struct value *scalar_binop (struct value *arg1, struct value *arg2, + enum exp_opcode op); + +/* Perform a binary operation on complex operands. */ + +static struct value * +complex_binop (struct value *arg1, struct value *arg2, enum exp_opcode op) +{ + struct type *arg1_type = check_typedef (value_type (arg1)); + struct type *arg2_type = check_typedef (value_type (arg2)); + + struct value *arg1_real, *arg1_imag, *arg2_real, *arg2_imag; + if (arg1_type->code () == TYPE_CODE_COMPLEX) + { + arg1_real = value_real_part (arg1); + arg1_imag = value_imaginary_part (arg1); + } + else + { + arg1_real = arg1; + arg1_imag = value_zero (arg1_type, not_lval); + } + if (arg2_type->code () == TYPE_CODE_COMPLEX) + { + arg2_real = value_real_part (arg2); + arg2_imag = value_imaginary_part (arg2); + } + else + { + arg2_real = arg2; + arg2_imag = value_zero (arg2_type, not_lval); + } + + struct type *comp_type = promotion_type (value_type (arg1_real), + value_type (arg2_real)); + arg1_real = value_cast (comp_type, arg1_real); + arg1_imag = value_cast (comp_type, arg1_imag); + arg2_real = value_cast (comp_type, arg2_real); + arg2_imag = value_cast (comp_type, arg2_imag); + + struct type *result_type = init_complex_type (nullptr, comp_type); + + struct value *result_real, *result_imag; + switch (op) + { + case BINOP_ADD: + case BINOP_SUB: + result_real = scalar_binop (arg1_real, arg2_real, op); + result_imag = scalar_binop (arg1_imag, arg2_imag, op); + break; + + case BINOP_MUL: + { + struct value *x1 = scalar_binop (arg1_real, arg2_real, op); + struct value *x2 = scalar_binop (arg1_imag, arg2_imag, op); + result_real = scalar_binop (x1, x2, BINOP_SUB); + + x1 = scalar_binop (arg1_real, arg2_imag, op); + x2 = scalar_binop (arg1_imag, arg2_real, op); + result_imag = scalar_binop (x1, x2, BINOP_ADD); + } + break; + + case BINOP_DIV: + { + if (arg2_type->code () == TYPE_CODE_COMPLEX) + { + struct value *conjugate = value_complement (arg2); + /* We have to reconstruct ARG1, in case the type was + promoted. */ + arg1 = value_literal_complex (arg1_real, arg1_imag, result_type); + + struct value *numerator = scalar_binop (arg1, conjugate, + BINOP_MUL); + arg1_real = value_real_part (numerator); + arg1_imag = value_imaginary_part (numerator); + + struct value *x1 = scalar_binop (arg2_real, arg2_real, BINOP_MUL); + struct value *x2 = scalar_binop (arg2_imag, arg2_imag, BINOP_MUL); + arg2_real = scalar_binop (x1, x2, BINOP_ADD); + } + + result_real = scalar_binop (arg1_real, arg2_real, op); + result_imag = scalar_binop (arg1_imag, arg2_real, op); + } + break; + + case BINOP_EQUAL: + case BINOP_NOTEQUAL: + { + struct value *x1 = scalar_binop (arg1_real, arg2_real, op); + struct value *x2 = scalar_binop (arg1_imag, arg2_imag, op); + + LONGEST v1 = value_as_long (x1); + LONGEST v2 = value_as_long (x2); + + if (op == BINOP_EQUAL) + v1 = v1 && v2; + else + v1 = v1 || v2; + + return value_from_longest (value_type (x1), v1); + } + break; + + default: + error (_("Invalid binary operation on numbers.")); + } + + return value_literal_complex (result_real, result_imag, result_type); } /* Perform a binary operation on two operands which have reasonable @@ -929,23 +1089,17 @@ type1 = check_typedef (value_type (arg1)); type2 = check_typedef (value_type (arg2)); + if (type1->code () == TYPE_CODE_COMPLEX + || type2->code () == TYPE_CODE_COMPLEX) + return complex_binop (arg1, arg2, op); + if ((!is_floating_value (arg1) && !is_integral_type (type1)) || (!is_floating_value (arg2) && !is_integral_type (type2))) error (_("Argument to arithmetic operation not a number or boolean.")); if (is_floating_type (type1) || is_floating_type (type2)) { - /* If only one type is floating-point, use its type. - Otherwise use the bigger type. */ - if (!is_floating_type (type1)) - result_type = type2; - else if (!is_floating_type (type2)) - result_type = type1; - else if (TYPE_LENGTH (type2) > TYPE_LENGTH (type1)) - result_type = type2; - else - result_type = type1; - + result_type = promotion_type (type1, type2); val = allocate_value (result_type); struct type *eff_type_v1, *eff_type_v2; @@ -960,8 +1114,8 @@ v2.data (), eff_type_v2, value_contents_raw (val), result_type); } - else if (TYPE_CODE (type1) == TYPE_CODE_BOOL - || TYPE_CODE (type2) == TYPE_CODE_BOOL) + else if (type1->code () == TYPE_CODE_BOOL + || type2->code () == TYPE_CODE_BOOL) { LONGEST v1, v2, v = 0; @@ -1013,16 +1167,8 @@ if one of the operands is unsigned. */ if (op == BINOP_RSH || op == BINOP_LSH || op == BINOP_EXP) result_type = type1; - else if (TYPE_LENGTH (type1) > TYPE_LENGTH (type2)) - result_type = type1; - else if (TYPE_LENGTH (type2) > TYPE_LENGTH (type1)) - result_type = type2; - else if (TYPE_UNSIGNED (type1)) - result_type = type1; - else if (TYPE_UNSIGNED (type2)) - result_type = type2; else - result_type = type1; + result_type = promotion_type (type1, type2); if (TYPE_UNSIGNED (result_type)) { @@ -1301,7 +1447,7 @@ vector_type = check_typedef (vector_type); - gdb_assert (TYPE_CODE (vector_type) == TYPE_CODE_ARRAY + gdb_assert (vector_type->code () == TYPE_CODE_ARRAY && TYPE_VECTOR (vector_type)); if (!get_array_bounds (vector_type, &low_bound, &high_bound)) @@ -1341,9 +1487,9 @@ type1 = check_typedef (value_type (val1)); type2 = check_typedef (value_type (val2)); - t1_is_vec = (TYPE_CODE (type1) == TYPE_CODE_ARRAY + t1_is_vec = (type1->code () == TYPE_CODE_ARRAY && TYPE_VECTOR (type1)) ? 1 : 0; - t2_is_vec = (TYPE_CODE (type2) == TYPE_CODE_ARRAY + t2_is_vec = (type2->code () == TYPE_CODE_ARRAY && TYPE_VECTOR (type2)) ? 1 : 0; if (!t1_is_vec || !t2_is_vec) @@ -1357,7 +1503,7 @@ eltype2 = check_typedef (TYPE_TARGET_TYPE (type2)); elsize = TYPE_LENGTH (eltype1); - if (TYPE_CODE (eltype1) != TYPE_CODE (eltype2) + if (eltype1->code () != eltype2->code () || elsize != TYPE_LENGTH (eltype2) || TYPE_UNSIGNED (eltype1) != TYPE_UNSIGNED (eltype2) || low_bound1 != low_bound2 || high_bound1 != high_bound2) @@ -1386,9 +1532,9 @@ struct value *val; struct type *type1 = check_typedef (value_type (arg1)); struct type *type2 = check_typedef (value_type (arg2)); - int t1_is_vec = (TYPE_CODE (type1) == TYPE_CODE_ARRAY + int t1_is_vec = (type1->code () == TYPE_CODE_ARRAY && TYPE_VECTOR (type1)); - int t2_is_vec = (TYPE_CODE (type2) == TYPE_CODE_ARRAY + int t2_is_vec = (type2->code () == TYPE_CODE_ARRAY && TYPE_VECTOR (type2)); if (!t1_is_vec && !t2_is_vec) @@ -1401,8 +1547,8 @@ struct value **v = t1_is_vec ? &arg2 : &arg1; struct type *t = t1_is_vec ? type2 : type1; - if (TYPE_CODE (t) != TYPE_CODE_FLT - && TYPE_CODE (t) != TYPE_CODE_DECFLOAT + if (t->code () != TYPE_CODE_FLT + && t->code () != TYPE_CODE_DECFLOAT && !is_integral_type (t)) error (_("Argument to operation not a number or boolean.")); @@ -1491,8 +1637,8 @@ type1 = check_typedef (value_type (arg1)); type2 = check_typedef (value_type (arg2)); - code1 = TYPE_CODE (type1); - code2 = TYPE_CODE (type2); + code1 = type1->code (); + code2 = type2->code (); is_int1 = is_integral_type (type1); is_int2 = is_integral_type (type2); @@ -1555,7 +1701,7 @@ type1 = check_typedef (value_type (arg1)); type2 = check_typedef (value_type (arg2)); - return (TYPE_CODE (type1) == TYPE_CODE (type2) + return (type1->code () == type2->code () && TYPE_LENGTH (type1) == TYPE_LENGTH (type2) && memcmp (value_contents (arg1), value_contents (arg2), TYPE_LENGTH (type1)) == 0); @@ -1577,8 +1723,8 @@ type1 = check_typedef (value_type (arg1)); type2 = check_typedef (value_type (arg2)); - code1 = TYPE_CODE (type1); - code2 = TYPE_CODE (type2); + code1 = type1->code (); + code2 = type2->code (); is_int1 = is_integral_type (type1); is_int2 = is_integral_type (type2); @@ -1629,7 +1775,8 @@ type = check_typedef (value_type (arg1)); if (is_integral_type (type) || is_floating_value (arg1) - || (TYPE_CODE (type) == TYPE_CODE_ARRAY && TYPE_VECTOR (type))) + || (type->code () == TYPE_CODE_ARRAY && TYPE_VECTOR (type)) + || type->code () == TYPE_CODE_COMPLEX) return value_from_contents (type, value_contents (arg1)); else error (_("Argument to positive operation not a number.")); @@ -1645,7 +1792,7 @@ if (is_integral_type (type) || is_floating_type (type)) return value_binop (value_from_longest (type, 0), arg1, BINOP_SUB); - else if (TYPE_CODE (type) == TYPE_CODE_ARRAY && TYPE_VECTOR (type)) + else if (type->code () == TYPE_CODE_ARRAY && TYPE_VECTOR (type)) { struct value *tmp, *val = allocate_value (type); struct type *eltype = check_typedef (TYPE_TARGET_TYPE (type)); @@ -1663,6 +1810,15 @@ } return val; } + else if (type->code () == TYPE_CODE_COMPLEX) + { + struct value *real = value_real_part (arg1); + struct value *imag = value_imaginary_part (arg1); + + real = value_neg (real); + imag = value_neg (imag); + return value_literal_complex (real, imag, type); + } else error (_("Argument to negate operation not a number.")); } @@ -1678,7 +1834,7 @@ if (is_integral_type (type)) val = value_from_longest (type, ~value_as_long (arg1)); - else if (TYPE_CODE (type) == TYPE_CODE_ARRAY && TYPE_VECTOR (type)) + else if (type->code () == TYPE_CODE_ARRAY && TYPE_VECTOR (type)) { struct value *tmp; struct type *eltype = check_typedef (TYPE_TARGET_TYPE (type)); @@ -1696,6 +1852,16 @@ value_contents_all (tmp), TYPE_LENGTH (eltype)); } } + else if (type->code () == TYPE_CODE_COMPLEX) + { + /* GCC has an extension that treats ~complex as the complex + conjugate. */ + struct value *real = value_real_part (arg1); + struct value *imag = value_imaginary_part (arg1); + + imag = value_neg (imag); + return value_literal_complex (real, imag, type); + } else error (_("Argument to complement operation not an integer, boolean.")); @@ -1713,9 +1879,9 @@ LONGEST low_bound, high_bound; LONGEST word; unsigned rel_index; - struct type *range = TYPE_INDEX_TYPE (type); + struct type *range = type->index_type (); - if (get_discrete_bounds (range, &low_bound, &high_bound) < 0) + if (!get_discrete_bounds (range, &low_bound, &high_bound)) return -2; if (index < low_bound || index > high_bound) return -1; @@ -1735,14 +1901,14 @@ struct type *settype = check_typedef (value_type (set)); struct type *eltype = check_typedef (value_type (element)); - if (TYPE_CODE (eltype) == TYPE_CODE_RANGE) + if (eltype->code () == TYPE_CODE_RANGE) eltype = TYPE_TARGET_TYPE (eltype); - if (TYPE_CODE (settype) != TYPE_CODE_SET) + if (settype->code () != TYPE_CODE_SET) error (_("Second argument of 'IN' has wrong type")); - if (TYPE_CODE (eltype) != TYPE_CODE_INT - && TYPE_CODE (eltype) != TYPE_CODE_CHAR - && TYPE_CODE (eltype) != TYPE_CODE_ENUM - && TYPE_CODE (eltype) != TYPE_CODE_BOOL) + if (eltype->code () != TYPE_CODE_INT + && eltype->code () != TYPE_CODE_CHAR + && eltype->code () != TYPE_CODE_ENUM + && eltype->code () != TYPE_CODE_BOOL) error (_("First argument of 'IN' has wrong type")); member = value_bit_index (settype, value_contents (set), value_as_long (element)); diff -Nru gdb-9.1/gdb/valops.c gdb-10.2/gdb/valops.c --- gdb-9.1/gdb/valops.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/valops.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Perform non-arithmetic operations on values, for GDB. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -139,7 +139,7 @@ if (msymbol.minsym != NULL) { struct objfile *objfile = msymbol.objfile; - struct gdbarch *gdbarch = get_objfile_arch (objfile); + struct gdbarch *gdbarch = objfile->arch (); struct type *type; CORE_ADDR maddr; @@ -175,7 +175,7 @@ { struct objfile *objf; struct value *val = find_function_in_inferior ("malloc", &objf); - struct gdbarch *gdbarch = get_objfile_arch (objf); + struct gdbarch *gdbarch = objf->arch (); struct value *blocklen; blocklen = value_from_longest (builtin_type (gdbarch)->builtin_int, len); @@ -215,24 +215,24 @@ t2 = check_typedef (value_type (v2)); /* Check preconditions. */ - gdb_assert ((TYPE_CODE (t1) == TYPE_CODE_STRUCT - || TYPE_CODE (t1) == TYPE_CODE_UNION) + gdb_assert ((t1->code () == TYPE_CODE_STRUCT + || t1->code () == TYPE_CODE_UNION) && !!"Precondition is that type is of STRUCT or UNION kind."); - gdb_assert ((TYPE_CODE (t2) == TYPE_CODE_STRUCT - || TYPE_CODE (t2) == TYPE_CODE_UNION) + gdb_assert ((t2->code () == TYPE_CODE_STRUCT + || t2->code () == TYPE_CODE_UNION) && !!"Precondition is that value is of STRUCT or UNION kind"); - if (TYPE_NAME (t1) != NULL - && TYPE_NAME (t2) != NULL - && !strcmp (TYPE_NAME (t1), TYPE_NAME (t2))) + if (t1->name () != NULL + && t2->name () != NULL + && !strcmp (t1->name (), t2->name ())) return NULL; /* Upcasting: look in the type of the source to see if it contains the type of the target as a superclass. If so, we'll need to offset the pointer rather than just change its type. */ - if (TYPE_NAME (t1) != NULL) + if (t1->name () != NULL) { - v = search_struct_field (TYPE_NAME (t1), + v = search_struct_field (t1->name (), v2, t2, 1); if (v) return v; @@ -241,7 +241,7 @@ /* Downcasting: look in the type of the target to see if it contains the type of the source as a superclass. If so, we'll need to offset the pointer rather than just change its type. */ - if (TYPE_NAME (t2) != NULL) + if (t2->name () != NULL) { /* Try downcasting using the run-time type of the value. */ int full, using_enc; @@ -257,11 +257,11 @@ /* We might be trying to cast to the outermost enclosing type, in which case search_struct_field won't work. */ - if (TYPE_NAME (real_type) != NULL - && !strcmp (TYPE_NAME (real_type), TYPE_NAME (t1))) + if (real_type->name () != NULL + && !strcmp (real_type->name (), t1->name ())) return v; - v = search_struct_field (TYPE_NAME (t2), v, real_type, 1); + v = search_struct_field (t2->name (), v, real_type, 1); if (v) return v; } @@ -269,7 +269,7 @@ /* Try downcasting using information from the destination type T2. This wouldn't work properly for classes with virtual bases, but those were handled above. */ - v = search_struct_field (TYPE_NAME (t2), + v = search_struct_field (t2->name (), value_zero (t1, not_lval), t1, 1); if (v) { @@ -300,8 +300,8 @@ struct type *t1 = check_typedef (TYPE_TARGET_TYPE (type1)); struct type *t2 = check_typedef (TYPE_TARGET_TYPE (type2)); - if (TYPE_CODE (t1) == TYPE_CODE_STRUCT - && TYPE_CODE (t2) == TYPE_CODE_STRUCT + if (t1->code () == TYPE_CODE_STRUCT + && t2->code () == TYPE_CODE_STRUCT && (subclass_check || !value_logical_not (arg2))) { struct value *v2; @@ -310,7 +310,7 @@ v2 = coerce_ref (arg2); else v2 = value_ind (arg2); - gdb_assert (TYPE_CODE (check_typedef (value_type (v2))) + gdb_assert (check_typedef (value_type (v2))->code () == TYPE_CODE_STRUCT && !!"Why did coercion fail?"); v2 = value_cast_structs (t1, v2); /* At this point we have what we can have, un-dereference if needed. */ @@ -359,7 +359,7 @@ struct type *dereftype = check_typedef (TYPE_TARGET_TYPE (t1)); struct value *val = value_cast (dereftype, arg2); - return value_ref (val, TYPE_CODE (t1)); + return value_ref (val, t1->code ()); } if (TYPE_IS_REFERENCE (check_typedef (value_type (arg2)))) @@ -372,7 +372,7 @@ struct type *to_type = type; type = check_typedef (type); - code1 = TYPE_CODE (type); + code1 = type->code (); arg2 = coerce_ref (arg2); type2 = check_typedef (value_type (arg2)); @@ -388,13 +388,13 @@ struct type *element_type = TYPE_TARGET_TYPE (type); unsigned element_length = TYPE_LENGTH (check_typedef (element_type)); - if (element_length > 0 && TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED (type)) + if (element_length > 0 && type->bounds ()->high.kind () == PROP_UNDEFINED) { - struct type *range_type = TYPE_INDEX_TYPE (type); + struct type *range_type = type->index_type (); int val_length = TYPE_LENGTH (type2); LONGEST low_bound, high_bound, new_length; - if (get_discrete_bounds (range_type, &low_bound, &high_bound) < 0) + if (!get_discrete_bounds (range_type, &low_bound, &high_bound)) low_bound = 0, high_bound = 0; new_length = val_length / element_length; if (val_length % element_length != 0) @@ -415,15 +415,15 @@ } if (current_language->c_style_arrays - && TYPE_CODE (type2) == TYPE_CODE_ARRAY + && type2->code () == TYPE_CODE_ARRAY && !TYPE_VECTOR (type2)) arg2 = value_coerce_array (arg2); - if (TYPE_CODE (type2) == TYPE_CODE_FUNC) + if (type2->code () == TYPE_CODE_FUNC) arg2 = value_coerce_function (arg2); type2 = check_typedef (value_type (arg2)); - code2 = TYPE_CODE (type2); + code2 = type2->code (); if (code1 == TYPE_CODE_COMPLEX) return cast_into_complex (to_type, arg2); @@ -443,7 +443,7 @@ if ((code1 == TYPE_CODE_STRUCT || code1 == TYPE_CODE_UNION) && (code2 == TYPE_CODE_STRUCT || code2 == TYPE_CODE_UNION) - && TYPE_NAME (type) != 0) + && type->name () != 0) { struct value *v = value_cast_structs (to_type, arg2); @@ -590,8 +590,8 @@ arg_type = value_type (arg); - dest_code = TYPE_CODE (real_type); - arg_code = TYPE_CODE (arg_type); + dest_code = real_type->code (); + arg_code = arg_type->code (); /* We can convert pointer types, or any pointer type to int, or int type to pointer. */ @@ -611,7 +611,7 @@ if (is_ref) result = value_cast (type, value_ref (value_ind (result), - TYPE_CODE (type))); + type->code ())); return result; } @@ -722,24 +722,24 @@ CORE_ADDR addr; int is_ref = TYPE_IS_REFERENCE (resolved_type); - if (TYPE_CODE (resolved_type) != TYPE_CODE_PTR + if (resolved_type->code () != TYPE_CODE_PTR && !TYPE_IS_REFERENCE (resolved_type)) error (_("Argument to dynamic_cast must be a pointer or reference type")); - if (TYPE_CODE (TYPE_TARGET_TYPE (resolved_type)) != TYPE_CODE_VOID - && TYPE_CODE (TYPE_TARGET_TYPE (resolved_type)) != TYPE_CODE_STRUCT) + if (TYPE_TARGET_TYPE (resolved_type)->code () != TYPE_CODE_VOID + && TYPE_TARGET_TYPE (resolved_type)->code () != TYPE_CODE_STRUCT) error (_("Argument to dynamic_cast must be pointer to class or `void *'")); class_type = check_typedef (TYPE_TARGET_TYPE (resolved_type)); - if (TYPE_CODE (resolved_type) == TYPE_CODE_PTR) + if (resolved_type->code () == TYPE_CODE_PTR) { - if (TYPE_CODE (arg_type) != TYPE_CODE_PTR - && ! (TYPE_CODE (arg_type) == TYPE_CODE_INT + if (arg_type->code () != TYPE_CODE_PTR + && ! (arg_type->code () == TYPE_CODE_INT && value_as_long (arg) == 0)) error (_("Argument to dynamic_cast does not have pointer type")); - if (TYPE_CODE (arg_type) == TYPE_CODE_PTR) + if (arg_type->code () == TYPE_CODE_PTR) { arg_type = check_typedef (TYPE_TARGET_TYPE (arg_type)); - if (TYPE_CODE (arg_type) != TYPE_CODE_STRUCT) + if (arg_type->code () != TYPE_CODE_STRUCT) error (_("Argument to dynamic_cast does " "not have pointer to class type")); } @@ -752,7 +752,7 @@ } else { - if (TYPE_CODE (arg_type) != TYPE_CODE_STRUCT) + if (arg_type->code () != TYPE_CODE_STRUCT) error (_("Argument to dynamic_cast does not have class type")); } @@ -786,8 +786,8 @@ /* dynamic_cast<void *> means to return a pointer to the most-derived object. */ - if (TYPE_CODE (resolved_type) == TYPE_CODE_PTR - && TYPE_CODE (TYPE_TARGET_TYPE (resolved_type)) == TYPE_CODE_VOID) + if (resolved_type->code () == TYPE_CODE_PTR + && TYPE_TARGET_TYPE (resolved_type)->code () == TYPE_CODE_VOID) return value_at_lazy (type, addr); tem = value_at (type, addr); @@ -808,7 +808,7 @@ &result) == 1) return value_cast (type, is_ref - ? value_ref (result, TYPE_CODE (resolved_type)) + ? value_ref (result, resolved_type->code ()) : value_addr (result)); } @@ -822,10 +822,10 @@ rtti_type, &result) == 1) return value_cast (type, is_ref - ? value_ref (result, TYPE_CODE (resolved_type)) + ? value_ref (result, resolved_type->code ()) : value_addr (result)); - if (TYPE_CODE (resolved_type) == TYPE_CODE_PTR) + if (resolved_type->code () == TYPE_CODE_PTR) return value_zero (type, not_lval); error (_("dynamic_cast failed")); @@ -854,7 +854,7 @@ { val = value_from_longest (type, (LONGEST) 1); } - else if (TYPE_CODE (type1) == TYPE_CODE_ARRAY && TYPE_VECTOR (type1)) + else if (type1->code () == TYPE_CODE_ARRAY && TYPE_VECTOR (type1)) { struct type *eltype = check_typedef (TYPE_TARGET_TYPE (type1)); int i; @@ -893,7 +893,7 @@ { struct value *val; - if (TYPE_CODE (check_typedef (type)) == TYPE_CODE_VOID) + if (check_typedef (type)->code () == TYPE_CODE_VOID) error (_("Attempt to dereference a generic pointer.")); val = value_from_contents_and_address (type, NULL, addr); @@ -1249,7 +1249,7 @@ in the case of pointer types. For object types, the enclosing type and embedded offset must *not* be copied: the target object refered to by TOVAL retains its original dynamic type after assignment. */ - if (TYPE_CODE (type) == TYPE_CODE_PTR) + if (type->code () == TYPE_CODE_PTR) { set_value_enclosing_type (val, value_enclosing_type (fromval)); set_value_pointed_to_offset (val, value_pointed_to_offset (fromval)); @@ -1306,7 +1306,7 @@ type = value_type (val); if ((VALUE_LVAL (val) == lval_memory && value_lazy (val)) - || TYPE_CODE (type) == TYPE_CODE_FUNC) + || type->code () == TYPE_CODE_FUNC) { CORE_ADDR addr = value_address (val); @@ -1358,7 +1358,7 @@ valtype = check_typedef (value_type (val)); - switch (TYPE_CODE (valtype)) + switch (valtype->code ()) { case TYPE_CODE_ARRAY: return TYPE_VECTOR (valtype) ? 0 : 1; @@ -1478,7 +1478,7 @@ return arg2; } } - if (TYPE_CODE (type) == TYPE_CODE_FUNC) + if (type->code () == TYPE_CODE_FUNC) return value_coerce_function (arg1); /* If this is an array that has not yet been pushed to the target, @@ -1514,9 +1514,9 @@ gdb_assert (refcode == TYPE_CODE_REF || refcode == TYPE_CODE_RVALUE_REF); - if ((TYPE_CODE (type) == TYPE_CODE_REF - || TYPE_CODE (type) == TYPE_CODE_RVALUE_REF) - && TYPE_CODE (type) == refcode) + if ((type->code () == TYPE_CODE_REF + || type->code () == TYPE_CODE_RVALUE_REF) + && type->code () == refcode) return arg1; arg2 = value_addr (arg1); @@ -1550,7 +1550,7 @@ } } - if (TYPE_CODE (base_type) == TYPE_CODE_PTR) + if (base_type->code () == TYPE_CODE_PTR) { struct type *enc_type; @@ -1559,20 +1559,24 @@ enc_type = check_typedef (value_enclosing_type (arg1)); enc_type = TYPE_TARGET_TYPE (enc_type); - if (TYPE_CODE (check_typedef (enc_type)) == TYPE_CODE_FUNC - || TYPE_CODE (check_typedef (enc_type)) == TYPE_CODE_METHOD) - /* For functions, go through find_function_addr, which knows - how to handle function descriptors. */ - arg2 = value_at_lazy (enc_type, - find_function_addr (arg1, NULL)); - else - /* Retrieve the enclosing object pointed to. */ - arg2 = value_at_lazy (enc_type, - (value_as_address (arg1) - - value_pointed_to_offset (arg1))); - + CORE_ADDR base_addr; + if (check_typedef (enc_type)->code () == TYPE_CODE_FUNC + || check_typedef (enc_type)->code () == TYPE_CODE_METHOD) + { + /* For functions, go through find_function_addr, which knows + how to handle function descriptors. */ + base_addr = find_function_addr (arg1, NULL); + } + else + { + /* Retrieve the enclosing object pointed to. */ + base_addr = (value_as_address (arg1) + - value_pointed_to_offset (arg1)); + } + arg2 = value_at_lazy (enc_type, base_addr); enc_type = value_type (arg2); - return readjust_indirect_value_type (arg2, enc_type, base_type, arg1); + return readjust_indirect_value_type (arg2, enc_type, base_type, + arg1, base_addr); } error (_("Attempt to take contents of a non-pointer value.")); @@ -1707,7 +1711,7 @@ t2 ++; for (i = 0; - (i < nargs) && TYPE_CODE (t1[i].type) != TYPE_CODE_VOID; + (i < nargs) && t1[i].type ()->code () != TYPE_CODE_VOID; i++) { struct type *tt1, *tt2; @@ -1715,18 +1719,18 @@ if (!t2[i]) return i + 1; - tt1 = check_typedef (t1[i].type); + tt1 = check_typedef (t1[i].type ()); tt2 = check_typedef (value_type (t2[i])); if (TYPE_IS_REFERENCE (tt1) /* We should be doing hairy argument matching, as below. */ - && (TYPE_CODE (check_typedef (TYPE_TARGET_TYPE (tt1))) - == TYPE_CODE (tt2))) + && (check_typedef (TYPE_TARGET_TYPE (tt1))->code () + == tt2->code ())) { - if (TYPE_CODE (tt2) == TYPE_CODE_ARRAY) + if (tt2->code () == TYPE_CODE_ARRAY) t2[i] = value_coerce_array (t2[i]); else - t2[i] = value_ref (t2[i], TYPE_CODE (tt1)); + t2[i] = value_ref (t2[i], tt1->code ()); continue; } @@ -1736,17 +1740,17 @@ char *>, and properly access map["hello"], because the argument to [] will be a reference to a pointer to a char, and the argument will be a pointer to a char. */ - while (TYPE_IS_REFERENCE (tt1) || TYPE_CODE (tt1) == TYPE_CODE_PTR) + while (TYPE_IS_REFERENCE (tt1) || tt1->code () == TYPE_CODE_PTR) { - tt1 = check_typedef( TYPE_TARGET_TYPE(tt1) ); + tt1 = check_typedef ( TYPE_TARGET_TYPE (tt1) ); } - while (TYPE_CODE(tt2) == TYPE_CODE_ARRAY - || TYPE_CODE(tt2) == TYPE_CODE_PTR + while (tt2->code () == TYPE_CODE_ARRAY + || tt2->code () == TYPE_CODE_PTR || TYPE_IS_REFERENCE (tt2)) { - tt2 = check_typedef (TYPE_TARGET_TYPE(tt2)); + tt2 = check_typedef (TYPE_TARGET_TYPE (tt2)); } - if (TYPE_CODE (tt1) == TYPE_CODE (tt2)) + if (tt1->code () == tt2->code ()) continue; /* Array to pointer is a `trivial conversion' according to the ARM. */ @@ -1754,7 +1758,7 @@ /* We should be doing much hairier argument matching (see section 13.2 of the ARM), but as a quick kludge, just check for the same type code. */ - if (TYPE_CODE (t1[i].type) != TYPE_CODE (value_type (t2[i]))) + if (t1[i].type ()->code () != value_type (t2[i])->code ()) return i + 1; } if (varargs || t2[i] == NULL) @@ -1805,7 +1809,7 @@ nbases = TYPE_N_BASECLASSES (type); if (!looking_for_baseclass) - for (i = TYPE_NFIELDS (type) - 1; i >= nbases; i--) + for (i = type->num_fields () - 1; i >= nbases; i--) { const char *t_field_name = TYPE_FIELD_NAME (type, i); @@ -1813,7 +1817,7 @@ { struct value *v; - if (field_is_static (&TYPE_FIELD (type, i))) + if (field_is_static (&type->field (i))) v = value_static_field (type, i); else v = value_primitive_field (arg1, offset, i, type); @@ -1824,10 +1828,10 @@ if (t_field_name && t_field_name[0] == '\0') { - struct type *field_type = TYPE_FIELD_TYPE (type, i); + struct type *field_type = type->field (i).type (); - if (TYPE_CODE (field_type) == TYPE_CODE_UNION - || TYPE_CODE (field_type) == TYPE_CODE_STRUCT) + if (field_type->code () == TYPE_CODE_UNION + || field_type->code () == TYPE_CODE_STRUCT) { /* Look for a match through the fields of an anonymous union, or anonymous struct. C++ provides anonymous @@ -1850,8 +1854,8 @@ from GDB) implementation of variant records, the bitpos is zero in an anonymous union field, so we have to add the offset of the union here. */ - if (TYPE_CODE (field_type) == TYPE_CODE_STRUCT - || (TYPE_NFIELDS (field_type) > 0 + if (field_type->code () == TYPE_CODE_STRUCT + || (field_type->num_fields () > 0 && TYPE_FIELD_BITPOS (field_type, 0) == 0)) new_offset += TYPE_FIELD_BITPOS (type, i) / 8; @@ -2007,7 +2011,7 @@ { if (!typecmp (TYPE_FN_FIELD_STATIC_P (f, j), TYPE_VARARGS (TYPE_FN_FIELD_TYPE (f, j)), - TYPE_NFIELDS (TYPE_FN_FIELD_TYPE (f, j)), + TYPE_FN_FIELD_TYPE (f, j)->num_fields (), TYPE_FN_FIELD_ARGS (f, j), args)) { if (TYPE_FN_FIELD_VIRTUAL_P (f, j)) @@ -2119,17 +2123,17 @@ /* Follow pointers until we get to a non-pointer. */ - while (TYPE_CODE (t) == TYPE_CODE_PTR || TYPE_IS_REFERENCE (t)) + while (t->code () == TYPE_CODE_PTR || TYPE_IS_REFERENCE (t)) { *argp = value_ind (*argp); /* Don't coerce fn pointer to fn and then back again! */ - if (TYPE_CODE (check_typedef (value_type (*argp))) != TYPE_CODE_FUNC) + if (check_typedef (value_type (*argp))->code () != TYPE_CODE_FUNC) *argp = coerce_array (*argp); t = check_typedef (value_type (*argp)); } - if (TYPE_CODE (t) != TYPE_CODE_STRUCT - && TYPE_CODE (t) != TYPE_CODE_UNION) + if (t->code () != TYPE_CODE_STRUCT + && t->code () != TYPE_CODE_UNION) error (_("Attempt to extract a component of a value that is not a %s."), err); @@ -2206,24 +2210,24 @@ t = check_typedef (value_type (*argp)); - while (TYPE_CODE (t) == TYPE_CODE_PTR || TYPE_IS_REFERENCE (t)) + while (t->code () == TYPE_CODE_PTR || TYPE_IS_REFERENCE (t)) { *argp = value_ind (*argp); - if (TYPE_CODE (check_typedef (value_type (*argp))) != TYPE_CODE_FUNC) + if (check_typedef (value_type (*argp))->code () != TYPE_CODE_FUNC) *argp = coerce_array (*argp); t = check_typedef (value_type (*argp)); } - if (TYPE_CODE (t) != TYPE_CODE_STRUCT - && TYPE_CODE (t) != TYPE_CODE_UNION) + if (t->code () != TYPE_CODE_STRUCT + && t->code () != TYPE_CODE_UNION) error (_("Attempt to extract a component of a value that is not a %s."), err); - for (i = TYPE_N_BASECLASSES (t); i < TYPE_NFIELDS (t); i++) + for (i = TYPE_N_BASECLASSES (t); i < t->num_fields (); i++) { - if (!field_is_static (&TYPE_FIELD (t, i)) + if (!field_is_static (&t->field (i)) && bitpos == TYPE_FIELD_BITPOS (t, i) - && types_equal (ftype, TYPE_FIELD_TYPE (t, i))) + && types_equal (ftype, t->field (i).type ())) return value_primitive_field (*argp, 0, i, t); } @@ -2233,50 +2237,6 @@ return NULL; } -/* See value.h. */ - -int -value_union_variant (struct type *union_type, const gdb_byte *contents) -{ - gdb_assert (TYPE_CODE (union_type) == TYPE_CODE_UNION - && TYPE_FLAG_DISCRIMINATED_UNION (union_type)); - - struct dynamic_prop *discriminant_prop - = get_dyn_prop (DYN_PROP_DISCRIMINATED, union_type); - gdb_assert (discriminant_prop != nullptr); - - struct discriminant_info *info - = (struct discriminant_info *) discriminant_prop->data.baton; - gdb_assert (info != nullptr); - - /* If this is a univariant union, just return the sole field. */ - if (TYPE_NFIELDS (union_type) == 1) - return 0; - /* This should only happen for univariants, which we already dealt - with. */ - gdb_assert (info->discriminant_index != -1); - - /* Compute the discriminant. Note that unpack_field_as_long handles - sign extension when necessary, as does the DWARF reader -- so - signed discriminants will be handled correctly despite the use of - an unsigned type here. */ - ULONGEST discriminant = unpack_field_as_long (union_type, contents, - info->discriminant_index); - - for (int i = 0; i < TYPE_NFIELDS (union_type); ++i) - { - if (i != info->default_index - && i != info->discriminant_index - && discriminant == info->discriminants[i]) - return i; - } - - if (info->default_index == -1) - error (_("Could not find variant corresponding to discriminant %s"), - pulongest (discriminant)); - return info->default_index; -} - /* Search through the methods of an object (and its bases) to find a specified method. Return a reference to the fn_field list METHODS of overloaded instances defined in the source language. If available @@ -2403,17 +2363,17 @@ t = check_typedef (value_type (*argp)); /* Code snarfed from value_struct_elt. */ - while (TYPE_CODE (t) == TYPE_CODE_PTR || TYPE_IS_REFERENCE (t)) + while (t->code () == TYPE_CODE_PTR || TYPE_IS_REFERENCE (t)) { *argp = value_ind (*argp); /* Don't coerce fn pointer to fn and then back again! */ - if (TYPE_CODE (check_typedef (value_type (*argp))) != TYPE_CODE_FUNC) + if (check_typedef (value_type (*argp))->code () != TYPE_CODE_FUNC) *argp = coerce_array (*argp); t = check_typedef (value_type (*argp)); } - if (TYPE_CODE (t) != TYPE_CODE_STRUCT - && TYPE_CODE (t) != TYPE_CODE_UNION) + if (t->code () != TYPE_CODE_STRUCT + && t->code () != TYPE_CODE_UNION) error (_("Attempt to extract a component of a " "value that is not a struct or union")); @@ -2521,13 +2481,13 @@ /* OBJ may be a pointer value rather than the object itself. */ obj = coerce_ref (obj); - while (TYPE_CODE (check_typedef (value_type (obj))) == TYPE_CODE_PTR) + while (check_typedef (value_type (obj))->code () == TYPE_CODE_PTR) obj = coerce_ref (value_ind (obj)); - obj_type_name = TYPE_NAME (value_type (obj)); + obj_type_name = value_type (obj)->name (); /* First check whether this is a data member, e.g. a pointer to a function. */ - if (TYPE_CODE (check_typedef (value_type (obj))) == TYPE_CODE_STRUCT) + if (check_typedef (value_type (obj))->code () == TYPE_CODE_STRUCT) { *valp = search_struct_field (name, obj, check_typedef (value_type (obj)), 0); @@ -2650,8 +2610,8 @@ the function part. Do not try this for non-functions (e.g. function pointers). */ if (qualified_name - && TYPE_CODE (check_typedef (SYMBOL_TYPE (fsym))) - == TYPE_CODE_FUNC) + && (check_typedef (SYMBOL_TYPE (fsym))->code () + == TYPE_CODE_FUNC)) { temp_func = cp_func_name (qualified_name); @@ -2796,8 +2756,8 @@ struct type *temp_type = check_typedef (value_type (temp)); struct type *objtype = check_typedef (obj_type); - if (TYPE_CODE (temp_type) != TYPE_CODE_PTR - && (TYPE_CODE (objtype) == TYPE_CODE_PTR + if (temp_type->code () != TYPE_CODE_PTR + && (objtype->code () == TYPE_CODE_PTR || TYPE_IS_REFERENCE (objtype))) { temp = value_addr (temp); @@ -3001,19 +2961,18 @@ if (methods != NULL) { - nparms = TYPE_NFIELDS (TYPE_FN_FIELD_TYPE (methods, ix)); + nparms = TYPE_FN_FIELD_TYPE (methods, ix)->num_fields (); static_offset = oload_method_static_p (methods, ix); } else - nparms = TYPE_NFIELDS (SYMBOL_TYPE (functions[ix])); + nparms = SYMBOL_TYPE (functions[ix])->num_fields (); parm_types.reserve (nparms); for (jj = 0; jj < nparms; jj++) { type *t = (methods != NULL - ? (TYPE_FN_FIELD_ARGS (methods, ix)[jj].type) - : TYPE_FIELD_TYPE (SYMBOL_TYPE (functions[ix]), - jj)); + ? (TYPE_FN_FIELD_ARGS (methods, ix)[jj].type ()) + : SYMBOL_TYPE (functions[ix])->field (jj).type ()); parm_types.push_back (t); } } @@ -3162,10 +3121,10 @@ int i; int name_len = strlen (name); - gdb_assert (TYPE_CODE (type) == TYPE_CODE_ENUM + gdb_assert (type->code () == TYPE_CODE_ENUM && TYPE_DECLARED_CLASS (type)); - for (i = TYPE_N_BASECLASSES (type); i < TYPE_NFIELDS (type); ++i) + for (i = TYPE_N_BASECLASSES (type); i < type->num_fields (); ++i) { const char *fname = TYPE_FIELD_NAME (type, i); int len; @@ -3185,7 +3144,7 @@ } error (_("no constant named \"%s\" in enum \"%s\""), - name, TYPE_NAME (type)); + name, type->name ()); } /* C++: Given an aggregate type CURTYPE, and a member name NAME, @@ -3199,7 +3158,7 @@ struct type *expect_type, int want_address, enum noside noside) { - switch (TYPE_CODE (curtype)) + switch (curtype->code ()) { case TYPE_CODE_STRUCT: case TYPE_CODE_UNION: @@ -3233,14 +3192,14 @@ { int start = 0; - if (TYPE_NFIELDS (t1) > 0 && TYPE_FIELD_ARTIFICIAL (t1, 0)) + if (t1->num_fields () > 0 && TYPE_FIELD_ARTIFICIAL (t1, 0)) ++start; /* If skipping artificial fields, find the first real field in T1. */ if (skip_artificial) { - while (start < TYPE_NFIELDS (t1) + while (start < t1->num_fields () && TYPE_FIELD_ARTIFICIAL (t1, start)) ++start; } @@ -3249,18 +3208,18 @@ /* Special case: a method taking void. T1 will contain no non-artificial fields, and T2 will contain TYPE_CODE_VOID. */ - if ((TYPE_NFIELDS (t1) - start) == 0 && TYPE_NFIELDS (t2) == 1 - && TYPE_CODE (TYPE_FIELD_TYPE (t2, 0)) == TYPE_CODE_VOID) + if ((t1->num_fields () - start) == 0 && t2->num_fields () == 1 + && t2->field (0).type ()->code () == TYPE_CODE_VOID) return 1; - if ((TYPE_NFIELDS (t1) - start) == TYPE_NFIELDS (t2)) + if ((t1->num_fields () - start) == t2->num_fields ()) { int i; - for (i = 0; i < TYPE_NFIELDS (t2); ++i) + for (i = 0; i < t2->num_fields (); ++i) { - if (compare_ranks (rank_one_type (TYPE_FIELD_TYPE (t1, start + i), - TYPE_FIELD_TYPE (t2, i), NULL), + if (compare_ranks (rank_one_type (t1->field (start + i).type (), + t2->field (i).type (), NULL), EXACT_MATCH_BADNESS) != 0) return 0; } @@ -3284,7 +3243,7 @@ { for (int i = 0; i < TYPE_N_BASECLASSES (vt); i++) { - struct type *t = TYPE_FIELD_TYPE (vt, i); + struct type *t = vt->field (i).type (); if (types_equal (t, cls)) { if (BASETYPE_VIA_VIRTUAL (vt, i)) @@ -3332,18 +3291,18 @@ int i; struct value *result; - if (TYPE_CODE (t) != TYPE_CODE_STRUCT - && TYPE_CODE (t) != TYPE_CODE_UNION) + if (t->code () != TYPE_CODE_STRUCT + && t->code () != TYPE_CODE_UNION) error (_("Internal error: non-aggregate type " "to value_struct_elt_for_reference")); - for (i = TYPE_NFIELDS (t) - 1; i >= TYPE_N_BASECLASSES (t); i--) + for (i = t->num_fields () - 1; i >= TYPE_N_BASECLASSES (t); i--) { const char *t_field_name = TYPE_FIELD_NAME (t, i); if (t_field_name && strcmp (t_field_name, name) == 0) { - if (field_is_static (&TYPE_FIELD (t, i))) + if (field_is_static (&t->field (i))) { struct value *v = value_static_field (t, i); if (want_address) @@ -3355,10 +3314,10 @@ if (want_address) return value_from_longest - (lookup_memberptr_type (TYPE_FIELD_TYPE (t, i), domain), + (lookup_memberptr_type (t->field (i).type (), domain), offset + (LONGEST) (TYPE_FIELD_BITPOS (t, i) >> 3)); else if (noside != EVAL_NORMAL) - return allocate_value (TYPE_FIELD_TYPE (t, i)); + return allocate_value (t->field (i).type ()); else { /* Try to evaluate NAME as a qualified name with implicit @@ -3374,7 +3333,7 @@ ptr = value_aggregate_elt (domain, name, NULL, 1, noside); type = check_typedef (value_type (ptr)); gdb_assert (type != NULL - && TYPE_CODE (type) == TYPE_CODE_MEMBERPTR); + && type->code () == TYPE_CODE_MEMBERPTR); tmp = lookup_pointer_type (TYPE_SELF_TYPE (type)); v = value_cast_pointers (tmp, v, 1); mem_offset = value_as_long (ptr); @@ -3411,7 +3370,7 @@ as a pointer to a method. */ /* Perform all necessary dereferencing. */ - while (intype && TYPE_CODE (intype) == TYPE_CODE_PTR) + while (intype && intype->code () == TYPE_CODE_PTR) intype = TYPE_TARGET_TYPE (intype); for (i = TYPE_NFN_FIELDS (t) - 1; i >= 0; --i) @@ -3572,7 +3531,7 @@ if (retval == NULL) error (_("No symbol \"%s\" in namespace \"%s\"."), - name, TYPE_NAME (curtype)); + name, curtype->name ()); return retval; } @@ -3588,7 +3547,7 @@ const char *name, int want_address, enum noside noside) { - const char *namespace_name = TYPE_NAME (curtype); + const char *namespace_name = curtype->name (); struct block_symbol sym; struct value *result; @@ -3625,7 +3584,7 @@ type = check_typedef (type); if (TYPE_IS_REFERENCE (type)) target = coerce_ref (v); - else if (TYPE_CODE (type) == TYPE_CODE_PTR) + else if (type->code () == TYPE_CODE_PTR) { try @@ -3656,8 +3615,8 @@ real_type = make_cv_type (TYPE_CONST (target_type), TYPE_VOLATILE (target_type), real_type, NULL); if (TYPE_IS_REFERENCE (type)) - real_type = lookup_reference_type (real_type, TYPE_CODE (type)); - else if (TYPE_CODE (type) == TYPE_CODE_PTR) + real_type = lookup_reference_type (real_type, type->code ()); + else if (type->code () == TYPE_CODE_PTR) real_type = lookup_pointer_type (real_type); else internal_error (__FILE__, __LINE__, _("Unexpected value type.")); @@ -3728,7 +3687,7 @@ { warning (_("Couldn't retrieve complete object of RTTI " "type %s; object may be in register(s)."), - TYPE_NAME (real_type)); + real_type->name ()); return argp; } @@ -3804,8 +3763,8 @@ struct type *array_type; array_type = check_typedef (value_type (array)); - if (TYPE_CODE (array_type) != TYPE_CODE_ARRAY - && TYPE_CODE (array_type) != TYPE_CODE_STRING) + if (array_type->code () != TYPE_CODE_ARRAY + && array_type->code () != TYPE_CODE_STRING) error (_("cannot take slice of non-array")); if (type_not_allocated (array_type)) @@ -3813,8 +3772,8 @@ if (type_not_associated (array_type)) error (_("array not associated")); - range_type = TYPE_INDEX_TYPE (array_type); - if (get_discrete_bounds (range_type, &lowerbound, &upperbound) < 0) + range_type = array_type->index_type (); + if (!get_discrete_bounds (range_type, &lowerbound, &upperbound)) error (_("slice from bad array or bitstring")); if (lowbound < lowerbound || length < 0 @@ -3836,7 +3795,7 @@ slice_type = create_array_type (NULL, element_type, slice_range_type); - TYPE_CODE (slice_type) = TYPE_CODE (array_type); + slice_type->set_code (array_type->code ()); if (VALUE_LVAL (array) == lval_memory && value_lazy (array)) slice = allocate_value_lazy (slice_type); @@ -3854,14 +3813,10 @@ return slice; } -/* Create a value for a FORTRAN complex number. Currently most of the - time values are coerced to COMPLEX*16 (i.e. a complex number - composed of 2 doubles. This really should be a smarter routine - that figures out precision intelligently as opposed to assuming - doubles. FIXME: fmb */ +/* See value.h. */ struct value * -value_literal_complex (struct value *arg1, +value_literal_complex (struct value *arg1, struct value *arg2, struct type *type) { @@ -3879,6 +3834,31 @@ return val; } +/* See value.h. */ + +struct value * +value_real_part (struct value *value) +{ + struct type *type = check_typedef (value_type (value)); + struct type *ttype = TYPE_TARGET_TYPE (type); + + gdb_assert (type->code () == TYPE_CODE_COMPLEX); + return value_from_component (value, ttype, 0); +} + +/* See value.h. */ + +struct value * +value_imaginary_part (struct value *value) +{ + struct type *type = check_typedef (value_type (value)); + struct type *ttype = TYPE_TARGET_TYPE (type); + + gdb_assert (type->code () == TYPE_CODE_COMPLEX); + return value_from_component (value, ttype, + TYPE_LENGTH (check_typedef (ttype))); +} + /* Cast a value into the appropriate complex data type. */ static struct value * @@ -3886,7 +3866,7 @@ { struct type *real_type = TYPE_TARGET_TYPE (type); - if (TYPE_CODE (value_type (val)) == TYPE_CODE_COMPLEX) + if (value_type (val)->code () == TYPE_CODE_COMPLEX) { struct type *val_real_type = TYPE_TARGET_TYPE (value_type (val)); struct value *re_val = allocate_value (val_real_type); @@ -3900,8 +3880,8 @@ return value_literal_complex (re_val, im_val, type); } - else if (TYPE_CODE (value_type (val)) == TYPE_CODE_FLT - || TYPE_CODE (value_type (val)) == TYPE_CODE_INT) + else if (value_type (val)->code () == TYPE_CODE_FLT + || value_type (val)->code () == TYPE_CODE_INT) return value_literal_complex (val, value_zero (real_type, not_lval), type); @@ -3909,8 +3889,9 @@ error (_("cannot cast non-number to complex")); } +void _initialize_valops (); void -_initialize_valops (void) +_initialize_valops () { add_setshow_boolean_cmd ("overload-resolution", class_support, &overload_resolution, _("\ diff -Nru gdb-9.1/gdb/valprint.c gdb-10.2/gdb/valprint.c --- gdb-9.1/gdb/valprint.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/valprint.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Print values for GDB, the GNU debugger. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -39,6 +39,7 @@ #include "cli/cli-option.h" #include "gdbarch.h" #include "cli/cli-style.h" +#include "count-one-bits.h" /* Maximum number of wchars returned from wchar_iterate. */ #define MAX_WCHARS 4 @@ -87,7 +88,8 @@ static void set_output_radix_1 (int, unsigned); static void val_print_type_code_flags (struct type *type, - const gdb_byte *valaddr, + struct value *original_value, + int embedded_offset, struct ui_file *stream); #define PRINT_MAX_DEFAULT 200 /* Start print_max off at this value. */ @@ -274,7 +276,7 @@ type = TYPE_TARGET_TYPE (type); type = check_typedef (type); } - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_ARRAY: case TYPE_CODE_STRUCT: @@ -296,10 +298,10 @@ const struct language_defn *language) { return (val_print_scalar_type_p (type) - || language->la_is_string_type_p (type)); + || language->is_string_type_p (type)); } -/* See its definition in value.h. */ +/* See valprint.h. */ int valprint_check_validity (struct ui_file *stream, @@ -321,9 +323,9 @@ return 0; } - if (TYPE_CODE (type) != TYPE_CODE_UNION - && TYPE_CODE (type) != TYPE_CODE_STRUCT - && TYPE_CODE (type) != TYPE_CODE_ARRAY) + if (type->code () != TYPE_CODE_UNION + && type->code () != TYPE_CODE_STRUCT + && type->code () != TYPE_CODE_ARRAY) { if (value_bits_any_optimized_out (val, TARGET_CHAR_BIT * embedded_offset, @@ -336,7 +338,7 @@ if (value_bits_synthetic_pointer (val, TARGET_CHAR_BIT * embedded_offset, TARGET_CHAR_BIT * TYPE_LENGTH (type))) { - const int is_ref = TYPE_CODE (type) == TYPE_CODE_REF; + const int is_ref = type->code () == TYPE_CODE_REF; int ref_is_addressable = 0; if (is_ref) @@ -406,7 +408,7 @@ { struct gdbarch *gdbarch = get_type_arch (type); - if (TYPE_CODE (elttype) == TYPE_CODE_FUNC) + if (elttype->code () == TYPE_CODE_FUNC) { /* Try to print what function it points to. */ print_function_pointer_address (options, gdbarch, address, stream); @@ -422,14 +424,13 @@ /* generic_val_print helper for TYPE_CODE_ARRAY. */ static void -generic_val_print_array (struct type *type, - int embedded_offset, CORE_ADDR address, +generic_val_print_array (struct value *val, struct ui_file *stream, int recurse, - struct value *original_value, const struct value_print_options *options, const struct generic_val_print_decorations *decorations) { + struct type *type = check_typedef (value_type (val)); struct type *unresolved_elttype = TYPE_TARGET_TYPE (type); struct type *elttype = check_typedef (unresolved_elttype); @@ -440,67 +441,40 @@ if (!get_array_bounds (type, &low_bound, &high_bound)) error (_("Could not determine the array high bound")); - if (options->prettyformat_arrays) - { - print_spaces_filtered (2 + 2 * recurse, stream); - } - fputs_filtered (decorations->array_start, stream); - val_print_array_elements (type, embedded_offset, - address, stream, - recurse, original_value, options, 0); + value_print_array_elements (val, stream, recurse, options, 0); fputs_filtered (decorations->array_end, stream); } else { /* Array of unspecified length: treat like pointer to first elt. */ - print_unpacked_pointer (type, elttype, address + embedded_offset, stream, - options); + print_unpacked_pointer (type, elttype, value_address (val), + stream, options); } } -/* generic_val_print helper for TYPE_CODE_PTR. */ +/* generic_value_print helper for TYPE_CODE_PTR. */ static void -generic_val_print_ptr (struct type *type, - int embedded_offset, struct ui_file *stream, - struct value *original_value, - const struct value_print_options *options) +generic_value_print_ptr (struct value *val, struct ui_file *stream, + const struct value_print_options *options) { - struct gdbarch *gdbarch = get_type_arch (type); - int unit_size = gdbarch_addressable_memory_unit_size (gdbarch); if (options->format && options->format != 's') - { - val_print_scalar_formatted (type, embedded_offset, - original_value, options, 0, stream); - } + value_print_scalar_formatted (val, options, 0, stream); else { - struct type *unresolved_elttype = TYPE_TARGET_TYPE(type); - struct type *elttype = check_typedef (unresolved_elttype); - const gdb_byte *valaddr = value_contents_for_printing (original_value); - CORE_ADDR addr = unpack_pointer (type, - valaddr + embedded_offset * unit_size); + struct type *type = check_typedef (value_type (val)); + struct type *elttype = check_typedef (TYPE_TARGET_TYPE (type)); + const gdb_byte *valaddr = value_contents_for_printing (val); + CORE_ADDR addr = unpack_pointer (type, valaddr); print_unpacked_pointer (type, elttype, addr, stream, options); } } -/* generic_val_print helper for TYPE_CODE_MEMBERPTR. */ - -static void -generic_val_print_memberptr (struct type *type, - int embedded_offset, struct ui_file *stream, - struct value *original_value, - const struct value_print_options *options) -{ - val_print_scalar_formatted (type, embedded_offset, - original_value, options, 0, stream); -} - /* Print '@' followed by the address contained in ADDRESS_BUFFER. */ static void @@ -553,7 +527,7 @@ TARGET_CHAR_BIT * TYPE_LENGTH (type)); const int must_coerce_ref = ((options->addressprint && value_is_synthetic) || options->deref_ref); - const int type_is_defined = TYPE_CODE (elttype) != TYPE_CODE_UNDEF; + const int type_is_defined = elttype->code () != TYPE_CODE_UNDEF; const gdb_byte *valaddr = value_contents_for_printing (original_value); if (must_coerce_ref && type_is_defined) @@ -613,7 +587,7 @@ unsigned int i; unsigned int len; - len = TYPE_NFIELDS (type); + len = type->num_fields (); for (i = 0; i < len; i++) { QUIT; @@ -624,40 +598,65 @@ } if (i < len) { - fputs_filtered (TYPE_FIELD_NAME (type, i), stream); + fputs_styled (TYPE_FIELD_NAME (type, i), variable_name_style.style (), + stream); } else if (TYPE_FLAG_ENUM (type)) { int first = 1; - /* We have a "flag" enum, so we try to decompose it into - pieces as appropriate. A flag enum has disjoint - constants by definition. */ - fputs_filtered ("(", stream); + /* We have a "flag" enum, so we try to decompose it into pieces as + appropriate. The enum may have multiple enumerators representing + the same bit, in which case we choose to only print the first one + we find. */ for (i = 0; i < len; ++i) { QUIT; - if ((val & TYPE_FIELD_ENUMVAL (type, i)) != 0) + ULONGEST enumval = TYPE_FIELD_ENUMVAL (type, i); + int nbits = count_one_bits_ll (enumval); + + gdb_assert (nbits == 0 || nbits == 1); + + if ((val & enumval) != 0) { - if (!first) + if (first) + { + fputs_filtered ("(", stream); + first = 0; + } + else fputs_filtered (" | ", stream); - first = 0; val &= ~TYPE_FIELD_ENUMVAL (type, i); - fputs_filtered (TYPE_FIELD_NAME (type, i), stream); + fputs_styled (TYPE_FIELD_NAME (type, i), + variable_name_style.style (), stream); } } - if (first || val != 0) + if (val != 0) { - if (!first) + /* There are leftover bits, print them. */ + if (first) + fputs_filtered ("(", stream); + else fputs_filtered (" | ", stream); - fputs_filtered ("unknown: ", stream); - print_longest (stream, 'd', 0, val); - } - fputs_filtered (")", stream); + fputs_filtered ("unknown: 0x", stream); + print_longest (stream, 'x', 0, val); + fputs_filtered (")", stream); + } + else if (first) + { + /* Nothing has been printed and the value is 0, the enum value must + have been 0. */ + fputs_filtered ("0", stream); + } + else + { + /* Something has been printed, close the parenthesis. */ + fputs_filtered (")", stream); + } } else print_longest (stream, 'd', 0, val); @@ -675,39 +674,13 @@ struct gdbarch *gdbarch = get_type_arch (type); int unit_size = gdbarch_addressable_memory_unit_size (gdbarch); - if (options->format) - { - val_print_scalar_formatted (type, embedded_offset, - original_value, options, 0, stream); - } - else - { - const gdb_byte *valaddr = value_contents_for_printing (original_value); - - val = unpack_long (type, valaddr + embedded_offset * unit_size); - - generic_val_print_enum_1 (type, val, stream); - } -} - -/* generic_val_print helper for TYPE_CODE_FLAGS. */ + gdb_assert (!options->format); -static void -generic_val_print_flags (struct type *type, - int embedded_offset, struct ui_file *stream, - struct value *original_value, - const struct value_print_options *options) + const gdb_byte *valaddr = value_contents_for_printing (original_value); -{ - if (options->format) - val_print_scalar_formatted (type, embedded_offset, original_value, - options, 0, stream); - else - { - const gdb_byte *valaddr = value_contents_for_printing (original_value); + val = unpack_long (type, valaddr + embedded_offset * unit_size); - val_print_type_code_flags (type, valaddr + embedded_offset, stream); - } + generic_val_print_enum_1 (type, val, stream); } /* generic_val_print helper for TYPE_CODE_FUNC and TYPE_CODE_METHOD. */ @@ -721,50 +694,38 @@ { struct gdbarch *gdbarch = get_type_arch (type); - if (options->format) - { - val_print_scalar_formatted (type, embedded_offset, - original_value, options, 0, stream); - } - else - { - /* FIXME, we should consider, at least for ANSI C language, - eliminating the distinction made between FUNCs and POINTERs - to FUNCs. */ - fprintf_filtered (stream, "{"); - type_print (type, "", stream, -1); - fprintf_filtered (stream, "} "); - /* Try to print what function it points to, and its address. */ - print_address_demangle (options, gdbarch, address, stream, demangle); - } + gdb_assert (!options->format); + + /* FIXME, we should consider, at least for ANSI C language, + eliminating the distinction made between FUNCs and POINTERs to + FUNCs. */ + fprintf_filtered (stream, "{"); + type_print (type, "", stream, -1); + fprintf_filtered (stream, "} "); + /* Try to print what function it points to, and its address. */ + print_address_demangle (options, gdbarch, address, stream, demangle); } -/* generic_val_print helper for TYPE_CODE_BOOL. */ +/* generic_value_print helper for TYPE_CODE_BOOL. */ static void -generic_val_print_bool (struct type *type, - int embedded_offset, struct ui_file *stream, - struct value *original_value, - const struct value_print_options *options, - const struct generic_val_print_decorations *decorations) +generic_value_print_bool + (struct value *value, struct ui_file *stream, + const struct value_print_options *options, + const struct generic_val_print_decorations *decorations) { - LONGEST val; - struct gdbarch *gdbarch = get_type_arch (type); - int unit_size = gdbarch_addressable_memory_unit_size (gdbarch); - if (options->format || options->output_format) { struct value_print_options opts = *options; opts.format = (options->format ? options->format : options->output_format); - val_print_scalar_formatted (type, embedded_offset, - original_value, &opts, 0, stream); + value_print_scalar_formatted (value, &opts, 0, stream); } else { - const gdb_byte *valaddr = value_contents_for_printing (original_value); - - val = unpack_long (type, valaddr + embedded_offset * unit_size); + const gdb_byte *valaddr = value_contents_for_printing (value); + struct type *type = check_typedef (value_type (value)); + LONGEST val = unpack_long (type, valaddr); if (val == 0) fputs_filtered (decorations->false_name, stream); else if (val == 1) @@ -774,49 +735,40 @@ } } -/* generic_val_print helper for TYPE_CODE_INT. */ +/* generic_value_print helper for TYPE_CODE_INT. */ static void -generic_val_print_int (struct type *type, - int embedded_offset, struct ui_file *stream, - struct value *original_value, - const struct value_print_options *options) +generic_value_print_int (struct value *val, struct ui_file *stream, + const struct value_print_options *options) { struct value_print_options opts = *options; opts.format = (options->format ? options->format : options->output_format); - val_print_scalar_formatted (type, embedded_offset, - original_value, &opts, 0, stream); + value_print_scalar_formatted (val, &opts, 0, stream); } -/* generic_val_print helper for TYPE_CODE_CHAR. */ +/* generic_value_print helper for TYPE_CODE_CHAR. */ static void -generic_val_print_char (struct type *type, struct type *unresolved_type, - int embedded_offset, - struct ui_file *stream, - struct value *original_value, - const struct value_print_options *options) +generic_value_print_char (struct value *value, struct ui_file *stream, + const struct value_print_options *options) { - LONGEST val; - struct gdbarch *gdbarch = get_type_arch (type); - int unit_size = gdbarch_addressable_memory_unit_size (gdbarch); - if (options->format || options->output_format) { struct value_print_options opts = *options; opts.format = (options->format ? options->format : options->output_format); - val_print_scalar_formatted (type, embedded_offset, - original_value, &opts, 0, stream); + value_print_scalar_formatted (value, &opts, 0, stream); } else { - const gdb_byte *valaddr = value_contents_for_printing (original_value); + struct type *unresolved_type = value_type (value); + struct type *type = check_typedef (unresolved_type); + const gdb_byte *valaddr = value_contents_for_printing (value); - val = unpack_long (type, valaddr + embedded_offset * unit_size); + LONGEST val = unpack_long (type, valaddr); if (TYPE_UNSIGNED (type)) fprintf_filtered (stream, "%u", (unsigned int) val); else @@ -829,126 +781,91 @@ /* generic_val_print helper for TYPE_CODE_FLT and TYPE_CODE_DECFLOAT. */ static void -generic_val_print_float (struct type *type, - int embedded_offset, struct ui_file *stream, +generic_val_print_float (struct type *type, struct ui_file *stream, struct value *original_value, const struct value_print_options *options) { - struct gdbarch *gdbarch = get_type_arch (type); - int unit_size = gdbarch_addressable_memory_unit_size (gdbarch); + gdb_assert (!options->format); - if (options->format) - { - val_print_scalar_formatted (type, embedded_offset, - original_value, options, 0, stream); - } - else - { - const gdb_byte *valaddr = value_contents_for_printing (original_value); + const gdb_byte *valaddr = value_contents_for_printing (original_value); - print_floating (valaddr + embedded_offset * unit_size, type, stream); - } + print_floating (valaddr, type, stream); } -/* generic_val_print helper for TYPE_CODE_COMPLEX. */ +/* generic_value_print helper for TYPE_CODE_COMPLEX. */ static void -generic_val_print_complex (struct type *type, - int embedded_offset, struct ui_file *stream, - struct value *original_value, - const struct value_print_options *options, - const struct generic_val_print_decorations - *decorations) +generic_value_print_complex (struct value *val, struct ui_file *stream, + const struct value_print_options *options, + const struct generic_val_print_decorations + *decorations) { - struct gdbarch *gdbarch = get_type_arch (type); - int unit_size = gdbarch_addressable_memory_unit_size (gdbarch); - const gdb_byte *valaddr = value_contents_for_printing (original_value); - fprintf_filtered (stream, "%s", decorations->complex_prefix); - if (options->format) - val_print_scalar_formatted (TYPE_TARGET_TYPE (type), - embedded_offset, original_value, options, 0, - stream); - else - print_floating (valaddr + embedded_offset * unit_size, - TYPE_TARGET_TYPE (type), stream); + + struct value *real_part = value_real_part (val); + value_print_scalar_formatted (real_part, options, 0, stream); fprintf_filtered (stream, "%s", decorations->complex_infix); - if (options->format) - val_print_scalar_formatted (TYPE_TARGET_TYPE (type), - embedded_offset - + type_length_units (TYPE_TARGET_TYPE (type)), - original_value, options, 0, stream); - else - print_floating (valaddr + embedded_offset * unit_size - + TYPE_LENGTH (TYPE_TARGET_TYPE (type)), - TYPE_TARGET_TYPE (type), stream); + + struct value *imag_part = value_imaginary_part (val); + value_print_scalar_formatted (imag_part, options, 0, stream); fprintf_filtered (stream, "%s", decorations->complex_suffix); } -/* A generic val_print that is suitable for use by language - implementations of the la_val_print method. This function can - handle most type codes, though not all, notably exception - TYPE_CODE_UNION and TYPE_CODE_STRUCT, which must be implemented by - the caller. - - Most arguments are as to val_print. - - The additional DECORATIONS argument can be used to customize the - output in some small, language-specific ways. */ +/* See valprint.h. */ void -generic_val_print (struct type *type, - int embedded_offset, CORE_ADDR address, - struct ui_file *stream, int recurse, - struct value *original_value, - const struct value_print_options *options, - const struct generic_val_print_decorations *decorations) +generic_value_print (struct value *val, struct ui_file *stream, int recurse, + const struct value_print_options *options, + const struct generic_val_print_decorations *decorations) { - struct type *unresolved_type = type; + struct type *type = value_type (val); type = check_typedef (type); - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_ARRAY: - generic_val_print_array (type, embedded_offset, address, stream, - recurse, original_value, options, decorations); + generic_val_print_array (val, stream, recurse, options, decorations); break; case TYPE_CODE_MEMBERPTR: - generic_val_print_memberptr (type, embedded_offset, stream, - original_value, options); + value_print_scalar_formatted (val, options, 0, stream); break; case TYPE_CODE_PTR: - generic_val_print_ptr (type, embedded_offset, stream, - original_value, options); + generic_value_print_ptr (val, stream, options); break; case TYPE_CODE_REF: case TYPE_CODE_RVALUE_REF: - generic_val_print_ref (type, embedded_offset, stream, recurse, - original_value, options); + generic_val_print_ref (type, 0, stream, recurse, + val, options); break; case TYPE_CODE_ENUM: - generic_val_print_enum (type, embedded_offset, stream, - original_value, options); + if (options->format) + value_print_scalar_formatted (val, options, 0, stream); + else + generic_val_print_enum (type, 0, stream, val, options); break; case TYPE_CODE_FLAGS: - generic_val_print_flags (type, embedded_offset, stream, - original_value, options); + if (options->format) + value_print_scalar_formatted (val, options, 0, stream); + else + val_print_type_code_flags (type, val, 0, stream); break; case TYPE_CODE_FUNC: case TYPE_CODE_METHOD: - generic_val_print_func (type, embedded_offset, address, stream, - original_value, options); + if (options->format) + value_print_scalar_formatted (val, options, 0, stream); + else + generic_val_print_func (type, 0, value_address (val), stream, + val, options); break; case TYPE_CODE_BOOL: - generic_val_print_bool (type, embedded_offset, stream, - original_value, options, decorations); + generic_value_print_bool (val, stream, options, decorations); break; case TYPE_CODE_RANGE: @@ -963,19 +880,19 @@ /* FALLTHROUGH */ case TYPE_CODE_INT: - generic_val_print_int (type, embedded_offset, stream, - original_value, options); + generic_value_print_int (val, stream, options); break; case TYPE_CODE_CHAR: - generic_val_print_char (type, unresolved_type, embedded_offset, - stream, original_value, options); + generic_value_print_char (val, stream, options); break; case TYPE_CODE_FLT: case TYPE_CODE_DECFLOAT: - generic_val_print_float (type, embedded_offset, stream, - original_value, options); + if (options->format) + value_print_scalar_formatted (val, options, 0, stream); + else + generic_val_print_float (type, stream, val, options); break; case TYPE_CODE_VOID: @@ -994,8 +911,7 @@ break; case TYPE_CODE_COMPLEX: - generic_val_print_complex (type, embedded_offset, stream, - original_value, options, decorations); + generic_value_print_complex (val, stream, options, decorations); break; case TYPE_CODE_UNION: @@ -1003,38 +919,22 @@ case TYPE_CODE_METHODPTR: default: error (_("Unhandled type code %d in symbol table."), - TYPE_CODE (type)); + type->code ()); } } -/* Print using the given LANGUAGE the data of type TYPE located at - VAL's contents buffer + EMBEDDED_OFFSET (within GDB), which came - from the inferior at address ADDRESS + EMBEDDED_OFFSET, onto - stdio stream STREAM according to OPTIONS. VAL is the whole object - that came from ADDRESS. - - The language printers will pass down an adjusted EMBEDDED_OFFSET to - further helper subroutines as subfields of TYPE are printed. In - such cases, VAL is passed down unadjusted, so - that VAL can be queried for metadata about the contents data being - printed, using EMBEDDED_OFFSET as an offset into VAL's contents - buffer. For example: "has this field been optimized out", or "I'm - printing an object while inspecting a traceframe; has this - particular piece of data been collected?". - - RECURSE indicates the amount of indentation to supply before - continuation lines; this amount is roughly twice the value of - RECURSE. */ - -void -val_print (struct type *type, LONGEST embedded_offset, - CORE_ADDR address, struct ui_file *stream, int recurse, - struct value *val, - const struct value_print_options *options, - const struct language_defn *language) +/* Helper function for val_print and common_val_print that does the + work. Arguments are as to val_print, but FULL_VALUE, if given, is + the value to be printed. */ + +static void +do_val_print (struct value *value, struct ui_file *stream, int recurse, + const struct value_print_options *options, + const struct language_defn *language) { int ret = 0; struct value_print_options local_opts = *options; + struct type *type = value_type (value); struct type *real_type = check_typedef (type); if (local_opts.prettyformat == Val_prettyformat_default) @@ -1053,14 +953,13 @@ return; } - if (!valprint_check_validity (stream, real_type, embedded_offset, val)) + if (!valprint_check_validity (stream, real_type, 0, value)) return; if (!options->raw) { - ret = apply_ext_lang_val_pretty_printer (type, embedded_offset, - address, stream, recurse, - val, options, language); + ret = apply_ext_lang_val_pretty_printer (value, stream, recurse, options, + language); if (ret) return; } @@ -1080,9 +979,7 @@ try { - language->la_val_print (type, embedded_offset, address, - stream, recurse, val, - &local_opts); + language->value_print_inner (value, stream, recurse, &local_opts); } catch (const gdb_exception_error &except) { @@ -1141,7 +1038,7 @@ return 0; } - if (TYPE_CODE (value_type (val)) == TYPE_CODE_INTERNAL_FUNCTION) + if (value_type (val)->code () == TYPE_CODE_INTERNAL_FUNCTION) { fprintf_styled (stream, metadata_style.style (), _("<internal function %s>"), @@ -1175,9 +1072,6 @@ const struct value_print_options *options, const struct language_defn *language) { - if (!value_check_printable (val, stream, options)) - return; - if (language->la_language == language_ada) /* The value might have a dynamic type, which would cause trouble below when trying to extract the value contents (since the value @@ -1188,10 +1082,20 @@ if (value_lazy (val)) value_fetch_lazy (val); - val_print (value_type (val), - value_embedded_offset (val), value_address (val), - stream, recurse, - val, options, language); + do_val_print (val, stream, recurse, options, language); +} + +/* See valprint.h. */ + +void +common_val_print_checked (struct value *val, struct ui_file *stream, + int recurse, + const struct value_print_options *options, + const struct language_defn *language) +{ + if (!value_check_printable (val, stream, options)) + return; + common_val_print (val, stream, recurse, options, language); } /* Print on stream STREAM the value VAL according to OPTIONS. The value @@ -1201,17 +1105,16 @@ value_print (struct value *val, struct ui_file *stream, const struct value_print_options *options) { + scoped_value_mark free_values; + if (!value_check_printable (val, stream, options)) return; if (!options->raw) { int r - = apply_ext_lang_val_pretty_printer (value_type (val), - value_embedded_offset (val), - value_address (val), - stream, 0, - val, options, current_language); + = apply_ext_lang_val_pretty_printer (val, stream, 0, options, + current_language); if (r) return; @@ -1221,11 +1124,13 @@ } static void -val_print_type_code_flags (struct type *type, const gdb_byte *valaddr, - struct ui_file *stream) +val_print_type_code_flags (struct type *type, struct value *original_value, + int embedded_offset, struct ui_file *stream) { + const gdb_byte *valaddr = (value_contents_for_printing (original_value) + + embedded_offset); ULONGEST val = unpack_long (type, valaddr); - int field, nfields = TYPE_NFIELDS (type); + int field, nfields = type->num_fields (); struct gdbarch *gdbarch = get_type_arch (type); struct type *bool_type = builtin_type (gdbarch)->builtin_bool; @@ -1234,7 +1139,7 @@ { if (TYPE_FIELD_NAME (type, field)[0] != '\0') { - struct type *field_type = TYPE_FIELD_TYPE (type, field); + struct type *field_type = type->field (field).type (); if (field_type == bool_type /* We require boolean types here to be one bit wide. This is a @@ -1244,8 +1149,10 @@ && TYPE_FIELD_BITSIZE (type, field) == 1) { if (val & ((ULONGEST)1 << TYPE_FIELD_BITPOS (type, field))) - fprintf_filtered (stream, " %s", - TYPE_FIELD_NAME (type, field)); + fprintf_filtered + (stream, " %ps", + styled_string (variable_name_style.style (), + TYPE_FIELD_NAME (type, field))); } else { @@ -1255,9 +1162,10 @@ if (field_len < sizeof (ULONGEST) * TARGET_CHAR_BIT) field_val &= ((ULONGEST) 1 << field_len) - 1; - fprintf_filtered (stream, " %s=", - TYPE_FIELD_NAME (type, field)); - if (TYPE_CODE (field_type) == TYPE_CODE_ENUM) + fprintf_filtered (stream, " %ps=", + styled_string (variable_name_style.style (), + TYPE_FIELD_NAME (type, field))); + if (field_type->code () == TYPE_CODE_ENUM) generic_val_print_enum_1 (field_type, field_val, stream); else print_longest (stream, 'd', 0, field_val); @@ -1267,23 +1175,15 @@ fputs_filtered (" ]", stream); } -/* Print a scalar of data of type TYPE, pointed to in GDB by VALADDR, - according to OPTIONS and SIZE on STREAM. Format i is not supported - at this level. - - This is how the elements of an array or structure are printed - with a format. */ +/* See valprint.h. */ void -val_print_scalar_formatted (struct type *type, - LONGEST embedded_offset, - struct value *val, - const struct value_print_options *options, - int size, - struct ui_file *stream) +value_print_scalar_formatted (struct value *val, + const struct value_print_options *options, + int size, + struct ui_file *stream) { - struct gdbarch *arch = get_type_arch (type); - int unit_size = gdbarch_addressable_memory_unit_size (arch); + struct type *type = check_typedef (value_type (val)); gdb_assert (val != NULL); @@ -1295,8 +1195,7 @@ struct value_print_options opts = *options; opts.format = 0; opts.deref_ref = 0; - val_print (type, embedded_offset, 0, stream, 0, val, &opts, - current_language); + common_val_print (val, stream, 0, &opts, current_language); return; } @@ -1307,15 +1206,13 @@ /* A scalar object that does not have all bits available can't be printed, because all bits contribute to its representation. */ - if (value_bits_any_optimized_out (val, - TARGET_CHAR_BIT * embedded_offset, + if (value_bits_any_optimized_out (val, 0, TARGET_CHAR_BIT * TYPE_LENGTH (type))) val_print_optimized_out (val, stream); - else if (!value_bytes_available (val, embedded_offset, TYPE_LENGTH (type))) + else if (!value_bytes_available (val, 0, TYPE_LENGTH (type))) val_print_unavailable (stream); else - print_scalar_formatted (valaddr + embedded_offset * unit_size, type, - options, size, stream); + print_scalar_formatted (valaddr, type, options, size, stream); } /* Print a number according to FORMAT which is one of d,u,x,o,b,h,w,g. @@ -1949,36 +1846,23 @@ struct ui_file *stream, const struct value_print_options *options) { - struct value *index_value; - if (!options->print_array_indexes) return; - index_value = value_from_longest (index_type, index); - - LA_PRINT_ARRAY_INDEX (index_value, stream, options); + LA_PRINT_ARRAY_INDEX (index_type, index, stream, options); } -/* Called by various <lang>_val_print routines to print elements of an - array in the form "<elem1>, <elem2>, <elem3>, ...". - - (FIXME?) Assumes array element separator is a comma, which is correct - for all languages currently handled. - (FIXME?) Some languages have a notation for repeated array elements, - perhaps we should try to use that notation when appropriate. */ +/* See valprint.h. */ void -val_print_array_elements (struct type *type, - LONGEST embedded_offset, - CORE_ADDR address, struct ui_file *stream, - int recurse, - struct value *val, - const struct value_print_options *options, - unsigned int i) +value_print_array_elements (struct value *val, struct ui_file *stream, + int recurse, + const struct value_print_options *options, + unsigned int i) { unsigned int things_printed = 0; unsigned len; - struct type *elttype, *index_type, *base_index_type; + struct type *elttype, *index_type; unsigned eltlen; /* Position of the array element we are examining to see whether it is repeated. */ @@ -1986,41 +1870,26 @@ /* Number of repetitions we have detected so far. */ unsigned int reps; LONGEST low_bound, high_bound; - LONGEST low_pos, high_pos; + + struct type *type = check_typedef (value_type (val)); elttype = TYPE_TARGET_TYPE (type); eltlen = type_length_units (check_typedef (elttype)); - index_type = TYPE_INDEX_TYPE (type); + index_type = type->index_type (); + if (index_type->code () == TYPE_CODE_RANGE) + index_type = TYPE_TARGET_TYPE (index_type); if (get_array_bounds (type, &low_bound, &high_bound)) { - if (TYPE_CODE (index_type) == TYPE_CODE_RANGE) - base_index_type = TYPE_TARGET_TYPE (index_type); - else - base_index_type = index_type; - - /* Non-contiguous enumerations types can by used as index types - in some languages (e.g. Ada). In this case, the array length - shall be computed from the positions of the first and last - literal in the enumeration type, and not from the values - of these literals. */ - if (!discrete_position (base_index_type, low_bound, &low_pos) - || !discrete_position (base_index_type, high_bound, &high_pos)) - { - warning (_("unable to get positions in array, use bounds instead")); - low_pos = low_bound; - high_pos = high_bound; - } - - /* The array length should normally be HIGH_POS - LOW_POS + 1. - But we have to be a little extra careful, because some languages - such as Ada allow LOW_POS to be greater than HIGH_POS for - empty arrays. In that situation, the array length is just zero, - not negative! */ - if (low_pos > high_pos) + /* The array length should normally be HIGH_BOUND - LOW_BOUND + + 1. But we have to be a little extra careful, because some + languages such as Ada allow LOW_BOUND to be greater than + HIGH_BOUND for empty arrays. In that situation, the array + length is just zero, not negative! */ + if (low_bound > high_bound) len = 0; else - len = high_pos - low_pos + 1; + len = high_bound - low_bound + 1; } else { @@ -2033,6 +1902,8 @@ for (; i < len && things_printed < options->print_max; i++) { + scoped_value_mark free_values; + if (i != 0) { if (options->prettyformat_arrays) @@ -2041,9 +1912,12 @@ print_spaces_filtered (2 + 2 * recurse, stream); } else - { - fprintf_filtered (stream, ", "); - } + fprintf_filtered (stream, ", "); + } + else if (options->prettyformat_arrays) + { + fprintf_filtered (stream, "\n"); + print_spaces_filtered (2 + 2 * recurse, stream); } wrap_here (n_spaces (2 + 2 * recurse)); maybe_print_array_index (index_type, i + low_bound, @@ -2056,11 +1930,8 @@ if (options->repeat_count_threshold < UINT_MAX) { while (rep1 < len - && value_contents_eq (val, - embedded_offset + i * eltlen, - val, - (embedded_offset - + rep1 * eltlen), + && value_contents_eq (val, i * eltlen, + val, rep1 * eltlen, eltlen)) { ++reps; @@ -2068,11 +1939,12 @@ } } + struct value *element = value_from_component (val, elttype, eltlen * i); + common_val_print (element, stream, recurse + 1, options, + current_language); + if (reps > options->repeat_count_threshold) { - val_print (elttype, embedded_offset + i * eltlen, - address, stream, recurse + 1, val, options, - current_language); annotate_elt_rep (reps); fprintf_filtered (stream, " %p[<repeats %u times>%p]", metadata_style.style ().ptr (), reps, nullptr); @@ -2083,17 +1955,17 @@ } else { - val_print (elttype, embedded_offset + i * eltlen, - address, - stream, recurse + 1, val, options, current_language); annotate_elt (); things_printed++; } } annotate_array_section_end (); if (i < len) + fprintf_filtered (stream, "..."); + if (options->prettyformat_arrays) { - fprintf_filtered (stream, "..."); + fprintf_filtered (stream, "\n"); + print_spaces_filtered (2 * recurse, stream); } } @@ -2155,13 +2027,7 @@ Unless an exception is thrown, BUFFER will always be allocated, even on failure. In this case, some characters might have been read before the - failure happened. Check BYTES_READ to recognize this situation. - - Note: There was a FIXME asking to make this code use target_read_string, - but this function is more general (can read past null characters, up to - given LEN). Besides, it is used much more often than target_read_string - so it is more tested. Perhaps callers of target_read_string should use - this function instead? */ + failure happened. Check BYTES_READ to recognize this situation. */ int read_string (CORE_ADDR addr, int len, int width, unsigned int fetchlimit, @@ -3049,34 +2915,6 @@ } -static void -set_print (const char *arg, int from_tty) -{ - printf_unfiltered ( - "\"set print\" must be followed by the name of a print subcommand.\n"); - help_list (setprintlist, "set print ", all_commands, gdb_stdout); -} - -static void -show_print (const char *args, int from_tty) -{ - cmd_show_list (showprintlist, from_tty, ""); -} - -static void -set_print_raw (const char *arg, int from_tty) -{ - printf_unfiltered ( - "\"set print raw\" must be followed by the name of a \"print raw\" subcommand.\n"); - help_list (setprintrawlist, "set print raw ", all_commands, gdb_stdout); -} - -static void -show_print_raw (const char *args, int from_tty) -{ - cmd_show_list (showprintrawlist, from_tty, ""); -} - /* Controls printing of vtbl's. */ static void show_vtblprint (struct ui_file *file, int from_tty, @@ -3262,35 +3100,36 @@ return {{value_print_option_defs}, opts}; } +void _initialize_valprint (); void -_initialize_valprint (void) +_initialize_valprint () { cmd_list_element *cmd; - add_prefix_cmd ("print", no_class, set_print, - _("Generic command for setting how things print."), - &setprintlist, "set print ", 0, &setlist); + add_basic_prefix_cmd ("print", no_class, + _("Generic command for setting how things print."), + &setprintlist, "set print ", 0, &setlist); add_alias_cmd ("p", "print", no_class, 1, &setlist); /* Prefer set print to set prompt. */ add_alias_cmd ("pr", "print", no_class, 1, &setlist); - add_prefix_cmd ("print", no_class, show_print, - _("Generic command for showing print settings."), - &showprintlist, "show print ", 0, &showlist); + add_show_prefix_cmd ("print", no_class, + _("Generic command for showing print settings."), + &showprintlist, "show print ", 0, &showlist); add_alias_cmd ("p", "print", no_class, 1, &showlist); add_alias_cmd ("pr", "print", no_class, 1, &showlist); - cmd = add_prefix_cmd ("raw", no_class, set_print_raw, - _("\ + cmd = add_basic_prefix_cmd ("raw", no_class, + _("\ Generic command for setting what things to print in \"raw\" mode."), - &setprintrawlist, "set print raw ", 0, - &setprintlist); + &setprintrawlist, "set print raw ", 0, + &setprintlist); deprecate_cmd (cmd, nullptr); - cmd = add_prefix_cmd ("raw", no_class, show_print_raw, - _("Generic command for showing \"print raw\" settings."), - &showprintrawlist, "show print raw ", 0, - &showprintlist); + cmd = add_show_prefix_cmd ("raw", no_class, + _("Generic command for showing \"print raw\" settings."), + &showprintrawlist, "show print raw ", 0, + &showprintlist); deprecate_cmd (cmd, nullptr); gdb::option::add_setshow_cmds_for_options diff -Nru gdb-9.1/gdb/valprint.h gdb-10.2/gdb/valprint.h --- gdb-9.1/gdb/valprint.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/valprint.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Declarations for value printing routines for GDB, the GNU debugger. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -128,18 +128,22 @@ struct ui_file *stream, const struct value_print_options *); -extern void val_print_array_elements (struct type *, LONGEST, - CORE_ADDR, struct ui_file *, int, - struct value *, - const struct value_print_options *, - unsigned int); - -extern void val_print_scalar_formatted (struct type *, - LONGEST, - struct value *, + +/* Print elements of an array. */ + +extern void value_print_array_elements (struct value *, struct ui_file *, int, const struct value_print_options *, - int, - struct ui_file *); + unsigned int); + +/* Print a scalar according to OPTIONS and SIZE on STREAM. Format 'i' + is not supported at this level. + + This is how the elements of an array or structure are printed + with a format. */ + +extern void value_print_scalar_formatted + (struct value *val, const struct value_print_options *options, + int size, struct ui_file *stream); extern void print_binary_chars (struct ui_file *, const gdb_byte *, unsigned int, enum bfd_endian, bool); @@ -167,6 +171,20 @@ gdb::unique_xmalloc_ptr<gdb_byte> *buffer, int *bytes_read); +/* Helper function to check the validity of some bits of a value. + + If TYPE represents some aggregate type (e.g., a structure), return 1. + + Otherwise, any of the bytes starting at OFFSET and extending for + TYPE_LENGTH(TYPE) bytes are invalid, print a message to STREAM and + return 0. The checking is done using FUNCS. + + Otherwise, return 1. */ + +extern int valprint_check_validity (struct ui_file *stream, struct type *type, + LONGEST embedded_offset, + const struct value *val); + extern void val_print_optimized_out (const struct value *val, struct ui_file *stream); @@ -204,12 +222,16 @@ }; -extern void generic_val_print (struct type *type, - int embedded_offset, CORE_ADDR address, - struct ui_file *stream, int recurse, - struct value *original_value, - const struct value_print_options *options, - const struct generic_val_print_decorations *); +/* Print a value in a generic way. VAL is the value, STREAM is where + to print it, RECURSE is the recursion depth, OPTIONS describe how + the printing should be done, and D is the language-specific + decorations object. Note that structs and unions cannot be printed + by this function. */ + +extern void generic_value_print (struct value *val, struct ui_file *stream, + int recurse, + const struct value_print_options *options, + const struct generic_val_print_decorations *d); extern void generic_emit_char (int c, struct type *type, struct ui_file *stream, int quoter, const char *encoding); @@ -282,4 +304,12 @@ const struct value_print_options *opts, const struct language_defn *language); +/* Like common_val_print, but call value_check_printable first. */ + +extern void common_val_print_checked + (struct value *val, + struct ui_file *stream, int recurse, + const struct value_print_options *options, + const struct language_defn *language); + #endif diff -Nru gdb-9.1/gdb/value.c gdb-10.2/gdb/value.c --- gdb-9.1/gdb/value.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/value.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Low level packing and unpacking of values for GDB, the GNU Debugger. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -997,16 +997,16 @@ static void check_type_length_before_alloc (const struct type *type) { - unsigned int length = TYPE_LENGTH (type); + ULONGEST length = TYPE_LENGTH (type); if (max_value_size > -1 && length > max_value_size) { - if (TYPE_NAME (type) != NULL) - error (_("value of type `%s' requires %u bytes, which is more " - "than max-value-size"), TYPE_NAME (type), length); + if (type->name () != NULL) + error (_("value of type `%s' requires %s bytes, which is more " + "than max-value-size"), type->name (), pulongest (length)); else - error (_("value requires %u bytes, which is more than " - "max-value-size"), length); + error (_("value requires %s bytes, which is more than " + "max-value-size"), pulongest (length)); } } @@ -1177,9 +1177,9 @@ { /* If result's target type is TYPE_CODE_STRUCT, proceed to fetch its rtti type. */ - if ((TYPE_CODE (result) == TYPE_CODE_PTR || TYPE_IS_REFERENCE (result)) - && TYPE_CODE (check_typedef (TYPE_TARGET_TYPE (result))) - == TYPE_CODE_STRUCT + if ((result->code () == TYPE_CODE_PTR || TYPE_IS_REFERENCE (result)) + && (check_typedef (TYPE_TARGET_TYPE (result))->code () + == TYPE_CODE_STRUCT) && !value_optimized_out (value)) { struct type *real_type; @@ -1412,7 +1412,18 @@ } catch (const gdb_exception_error &ex) { - /* Fall back to checking value->optimized_out. */ + switch (ex.error) + { + case MEMORY_ERROR: + case OPTIMIZED_OUT_ERROR: + case NOT_AVAILABLE_ERROR: + /* These can normally happen when we try to access an + optimized out or unavailable register, either in a + physical register or spilled to memory. */ + break; + default: + throw; + } } } @@ -2189,7 +2200,7 @@ { struct type *type = check_typedef (value_type (var->u.value)); - if (TYPE_CODE (type) == TYPE_CODE_INT) + if (type->code () == TYPE_CODE_INT) { *result = value_as_long (var->u.value); return 1; @@ -2254,7 +2265,7 @@ error (_("Cannot overwrite convenience function %s"), var->name); /* Prepare new contents. */ - switch (TYPE_CODE (check_typedef (value_type (val)))) + switch (check_typedef (value_type (val))->code ()) { case TYPE_CODE_VOID: new_kind = INTERNALVAR_VOID; @@ -2291,7 +2302,7 @@ when accessing the value. If we keep it, we would still refer to the origin value. Remove the location property in case it exist. */ - remove_dyn_prop (DYN_PROP_DATA_LOCATION, value_type (new_data.value)); + value_type (new_data.value)->remove_dyn_prop (DYN_PROP_DATA_LOCATION); break; } @@ -2591,7 +2602,7 @@ struct type * result_type_of_xmethod (struct value *method, gdb::array_view<value *> argv) { - gdb_assert (TYPE_CODE (value_type (method)) == TYPE_CODE_XMETHOD + gdb_assert (value_type (method)->code () == TYPE_CODE_XMETHOD && method->lval == lval_xcallable && !argv.empty ()); return method->location.xm_worker->get_result_type (argv[0], argv.slice (1)); @@ -2602,7 +2613,7 @@ struct value * call_xmethod (struct value *method, gdb::array_view<value *> argv) { - gdb_assert (TYPE_CODE (value_type (method)) == TYPE_CODE_XMETHOD + gdb_assert (value_type (method)->code () == TYPE_CODE_XMETHOD && method->lval == lval_xcallable && !argv.empty ()); return method->location.xm_worker->invoke (argv[0], argv.slice (1)); @@ -2677,8 +2688,8 @@ The following shortcut avoids this whole mess. If VAL is a function, just return its address directly. */ - if (TYPE_CODE (value_type (val)) == TYPE_CODE_FUNC - || TYPE_CODE (value_type (val)) == TYPE_CODE_METHOD) + if (value_type (val)->code () == TYPE_CODE_FUNC + || value_type (val)->code () == TYPE_CODE_METHOD) return value_address (val); val = coerce_array (val); @@ -2720,7 +2731,7 @@ converted to pointers; usually, the ABI doesn't either, but ABI-specific code is a more reasonable place to handle it. */ - if (TYPE_CODE (value_type (val)) != TYPE_CODE_PTR + if (value_type (val)->code () != TYPE_CODE_PTR && !TYPE_IS_REFERENCE (value_type (val)) && gdbarch_integer_to_address_p (gdbarch)) return gdbarch_integer_to_address (gdbarch, value_type (val), @@ -2748,7 +2759,7 @@ unpack_long (struct type *type, const gdb_byte *valaddr) { enum bfd_endian byte_order = type_byte_order (type); - enum type_code code = TYPE_CODE (type); + enum type_code code = type->code (); int len = TYPE_LENGTH (type); int nosign = TYPE_UNSIGNED (type); @@ -2770,7 +2781,7 @@ else result = extract_signed_integer (valaddr, len, byte_order); if (code == TYPE_CODE_RANGE) - result += TYPE_RANGE_DATA (type)->bias; + result += type->bounds ()->bias; return result; } @@ -2838,7 +2849,7 @@ switch (TYPE_FIELD_LOC_KIND (type, fieldno)) { case FIELD_LOC_KIND_PHYSADDR: - retval = value_at_lazy (TYPE_FIELD_TYPE (type, fieldno), + retval = value_at_lazy (type->field (fieldno).type (), TYPE_FIELD_STATIC_PHYSADDR (type, fieldno)); break; case FIELD_LOC_KIND_PHYSNAME: @@ -2853,7 +2864,7 @@ reported as non-debuggable symbols. */ struct bound_minimal_symbol msym = lookup_minimal_symbol (phys_name, NULL, NULL); - struct type *field_type = TYPE_FIELD_TYPE (type, fieldno); + struct type *field_type = type->field (fieldno).type (); if (!msym.minsym) retval = allocate_optimized_out_value (field_type); @@ -2906,7 +2917,7 @@ int unit_size = gdbarch_addressable_memory_unit_size (arch); arg_type = check_typedef (arg_type); - type = TYPE_FIELD_TYPE (arg_type, fieldno); + type = arg_type->field (fieldno).type (); /* Call check_typedef on our type to make sure that, if TYPE is a TYPE_CODE_TYPEDEF, its length is set to the length @@ -3068,7 +3079,7 @@ /* The minimal symbol might point to a function descriptor; resolve it to the actual code address instead. */ struct objfile *objfile = msym.objfile; - struct gdbarch *gdbarch = get_objfile_arch (objfile); + struct gdbarch *gdbarch = objfile->arch (); set_value_address (v, gdbarch_convert_from_func_ptr_addr @@ -3090,23 +3101,9 @@ -/* Unpack a bitfield of the specified FIELD_TYPE, from the object at - VALADDR, and store the result in *RESULT. - The bitfield starts at BITPOS bits and contains BITSIZE bits; if - BITSIZE is zero, then the length is taken from FIELD_TYPE. - - Extracting bits depends on endianness of the machine. Compute the - number of least significant bits to discard. For big endian machines, - we compute the total number of bits in the anonymous object, subtract - off the bit count from the MSB of the object to the MSB of the - bitfield, then the size of the bitfield, which leaves the LSB discard - count. For little endian machines, the discard count is simply the - number of bits from the LSB of the anonymous object to the LSB of the - bitfield. - - If the field is signed, we also do sign extension. */ +/* See value.h. */ -static LONGEST +LONGEST unpack_bits_as_long (struct type *field_type, const gdb_byte *valaddr, LONGEST bitpos, LONGEST bitsize) { @@ -3172,7 +3169,7 @@ { int bitpos = TYPE_FIELD_BITPOS (type, fieldno); int bitsize = TYPE_FIELD_BITSIZE (type, fieldno); - struct type *field_type = TYPE_FIELD_TYPE (type, fieldno); + struct type *field_type = type->field (fieldno).type (); int bit_offset; gdb_assert (val != NULL); @@ -3195,7 +3192,7 @@ { int bitpos = TYPE_FIELD_BITPOS (type, fieldno); int bitsize = TYPE_FIELD_BITSIZE (type, fieldno); - struct type *field_type = TYPE_FIELD_TYPE (type, fieldno); + struct type *field_type = type->field (fieldno).type (); return unpack_bits_as_long (field_type, valaddr, bitpos, bitsize); } @@ -3260,7 +3257,7 @@ { int bitpos = TYPE_FIELD_BITPOS (type, fieldno); int bitsize = TYPE_FIELD_BITSIZE (type, fieldno); - struct value *res_val = allocate_value (TYPE_FIELD_TYPE (type, fieldno)); + struct value *res_val = allocate_value (type->field (fieldno).type ()); unpack_value_bitfield (res_val, bitpos, bitsize, valaddr, embedded_offset, val); @@ -3331,10 +3328,10 @@ type = check_typedef (type); len = TYPE_LENGTH (type); - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_RANGE: - num -= TYPE_RANGE_DATA (type)->bias; + num -= type->bounds ()->bias; /* Fall through. */ case TYPE_CODE_INT: case TYPE_CODE_CHAR: @@ -3358,7 +3355,7 @@ default: error (_("Unexpected type (%d) encountered for integer constant."), - TYPE_CODE (type)); + type->code ()); } } @@ -3375,7 +3372,7 @@ len = TYPE_LENGTH (type); byte_order = type_byte_order (type); - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_INT: case TYPE_CODE_CHAR: @@ -3401,7 +3398,7 @@ default: error (_("Unexpected type (%d) encountered " "for unsigned integer constant."), - TYPE_CODE (type)); + type->code ()); } } @@ -3452,7 +3449,7 @@ value_from_host_double (struct type *type, double d) { struct value *value = allocate_value (type); - gdb_assert (TYPE_CODE (type) == TYPE_CODE_FLT); + gdb_assert (type->code () == TYPE_CODE_FLT); target_float_from_host_double (value_contents_raw (value), value_type (value), d); return value; @@ -3491,7 +3488,10 @@ const gdb_byte *valaddr, CORE_ADDR address) { - struct type *resolved_type = resolve_dynamic_type (type, valaddr, address); + gdb::array_view<const gdb_byte> view; + if (valaddr != nullptr) + view = gdb::make_array_view (valaddr, TYPE_LENGTH (type)); + struct type *resolved_type = resolve_dynamic_type (type, view, address); struct type *resolved_type_no_typedef = check_typedef (resolved_type); struct value *v; @@ -3629,10 +3629,20 @@ struct value * readjust_indirect_value_type (struct value *value, struct type *enc_type, const struct type *original_type, - const struct value *original_value) + struct value *original_value, + CORE_ADDR original_value_address) { + gdb_assert (original_type->code () == TYPE_CODE_PTR + || TYPE_IS_REFERENCE (original_type)); + + struct type *original_target_type = TYPE_TARGET_TYPE (original_type); + gdb::array_view<const gdb_byte> view; + struct type *resolved_original_target_type + = resolve_dynamic_type (original_target_type, view, + original_value_address); + /* Re-adjust type. */ - deprecated_set_value_type (value, TYPE_TARGET_TYPE (original_type)); + deprecated_set_value_type (value, resolved_original_target_type); /* Add embedding info. */ set_value_enclosing_type (value, enc_type); @@ -3659,12 +3669,11 @@ enc_type = check_typedef (value_enclosing_type (arg)); enc_type = TYPE_TARGET_TYPE (enc_type); - retval = value_at_lazy (enc_type, - unpack_pointer (value_type (arg), - value_contents (arg))); + CORE_ADDR addr = unpack_pointer (value_type (arg), value_contents (arg)); + retval = value_at_lazy (enc_type, addr); enc_type = value_type (retval); - return readjust_indirect_value_type (retval, enc_type, - value_type_arg_tmp, arg); + return readjust_indirect_value_type (retval, enc_type, value_type_arg_tmp, + arg, addr); } struct value * @@ -3675,7 +3684,7 @@ arg = coerce_ref (arg); type = check_typedef (value_type (arg)); - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_ARRAY: if (!TYPE_VECTOR (type) && current_language->c_style_arrays) @@ -3696,7 +3705,7 @@ struct_return_convention (struct gdbarch *gdbarch, struct value *function, struct type *value_type) { - enum type_code code = TYPE_CODE (value_type); + enum type_code code = value_type->code (); if (code == TYPE_CODE_ERROR) error (_("Function return type unknown.")); @@ -3714,7 +3723,7 @@ using_struct_return (struct gdbarch *gdbarch, struct value *function, struct type *value_type) { - if (TYPE_CODE (value_type) == TYPE_CODE_VOID) + if (value_type->code () == TYPE_CODE_VOID) /* A void return value is never in memory. See also corresponding code in "print_return_value". */ return 0; @@ -3942,7 +3951,7 @@ if (argc != 1) error (_("You must provide one argument for $_isvoid.")); - ret = TYPE_CODE (value_type (argv[0])) == TYPE_CODE_VOID; + ret = value_type (argv[0])->code () == TYPE_CODE_VOID; return value_from_longest (builtin_type (gdbarch)->builtin_int, ret); } @@ -3960,9 +3969,9 @@ value *cval = argv[0]; type *ctype = check_typedef (value_type (cval)); - if (TYPE_CODE (ctype) != TYPE_CODE_COMPLEX) + if (ctype->code () != TYPE_CODE_COMPLEX) error (_("expected a complex number")); - return value_from_component (cval, TYPE_TARGET_TYPE (ctype), 0); + return value_real_part (cval); } /* Implementation of the convenience function $_cimag. Extracts the @@ -3979,10 +3988,9 @@ value *cval = argv[0]; type *ctype = check_typedef (value_type (cval)); - if (TYPE_CODE (ctype) != TYPE_CODE_COMPLEX) + if (ctype->code () != TYPE_CODE_COMPLEX) error (_("expected a complex number")); - return value_from_component (cval, TYPE_TARGET_TYPE (ctype), - TYPE_LENGTH (TYPE_TARGET_TYPE (ctype))); + return value_imaginary_part (cval); } #if GDB_SELF_TEST @@ -4127,8 +4135,9 @@ } /* namespace selftests */ #endif /* GDB_SELF_TEST */ +void _initialize_values (); void -_initialize_values (void) +_initialize_values () { add_cmd ("convenience", no_class, show_convenience, _("\ Debugger convenience (\"$foo\") variables and functions.\n\ diff -Nru gdb-9.1/gdb/value.h gdb-10.2/gdb/value.h --- gdb-9.1/gdb/value.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/value.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Definitions for values of C expressions, for GDB. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -302,20 +302,6 @@ const struct lval_funcs *funcs, void *closure); -/* Helper function to check the validity of some bits of a value. - - If TYPE represents some aggregate type (e.g., a structure), return 1. - - Otherwise, any of the bytes starting at OFFSET and extending for - TYPE_LENGTH(TYPE) bytes are invalid, print a message to STREAM and - return 0. The checking is done using FUNCS. - - Otherwise, return 1. */ - -extern int valprint_check_validity (struct ui_file *stream, struct type *type, - LONGEST embedded_offset, - const struct value *val); - extern struct value *allocate_optimized_out_value (struct type *type); /* If VALUE is lval_computed, return its lval_funcs structure. */ @@ -488,7 +474,9 @@ /* Setup a new value type and enclosing value type for dereferenced value VALUE. ENC_TYPE is the new enclosing type that should be set. ORIGINAL_TYPE and - ORIGINAL_VAL are the type and value of the original reference or pointer. + ORIGINAL_VAL are the type and value of the original reference or + pointer. ORIGINAL_VALUE_ADDRESS is the address within VALUE, that is + the address that was dereferenced. Note, that VALUE is modified by this function. @@ -497,7 +485,8 @@ extern struct value * readjust_indirect_value_type (struct value *value, struct type *enc_type, const struct type *original_type, - const struct value *original_val); + struct value *original_val, + CORE_ADDR original_value_address); /* Convert a REF to the object referenced. */ @@ -651,6 +640,27 @@ extern LONGEST unpack_field_as_long (struct type *type, const gdb_byte *valaddr, int fieldno); + +/* Unpack a bitfield of the specified FIELD_TYPE, from the object at + VALADDR, and store the result in *RESULT. + The bitfield starts at BITPOS bits and contains BITSIZE bits; if + BITSIZE is zero, then the length is taken from FIELD_TYPE. + + Extracting bits depends on endianness of the machine. Compute the + number of least significant bits to discard. For big endian machines, + we compute the total number of bits in the anonymous object, subtract + off the bit count from the MSB of the object to the MSB of the + bitfield, then the size of the bitfield, which leaves the LSB discard + count. For little endian machines, the discard count is simply the + number of bits from the LSB of the anonymous object to the LSB of the + bitfield. + + If the field is signed, we also do sign extension. */ + +extern LONGEST unpack_bits_as_long (struct type *field_type, + const gdb_byte *valaddr, + LONGEST bitpos, LONGEST bitsize); + extern int unpack_value_field_as_long (struct type *type, const gdb_byte *valaddr, LONGEST embedded_offset, int fieldno, const struct value *val, LONGEST *result); @@ -723,10 +733,6 @@ const struct block *var_block, struct frame_info *frame); -extern struct value *default_read_var_value (struct symbol *var, - const struct block *var_block, - struct frame_info *frame); - extern struct value *allocate_value (struct type *type); extern struct value *allocate_value_lazy (struct type *type); extern void value_contents_copy (struct value *dst, LONGEST dst_offset, @@ -1097,13 +1103,6 @@ extern std::vector<value_ref_ptr> value_release_to_mark (const struct value *mark); -extern void val_print (struct type *type, - LONGEST embedded_offset, CORE_ADDR address, - struct ui_file *stream, int recurse, - struct value *val, - const struct value_print_options *options, - const struct language_defn *language); - extern void common_val_print (struct value *val, struct ui_file *stream, int recurse, const struct value_print_options *options, @@ -1145,9 +1144,21 @@ extern struct value *value_slice (struct value *, int, int); +/* Create a complex number. The type is the complex type; the values + are cast to the underlying scalar type before the complex number is + created. */ + extern struct value *value_literal_complex (struct value *, struct value *, struct type *); +/* Return the real part of a complex value. */ + +extern struct value *value_real_part (struct value *value); + +/* Return the imaginary part of a complex value. */ + +extern struct value *value_imaginary_part (struct value *value); + extern struct value *find_function_in_inferior (const char *, struct objfile **); @@ -1200,14 +1211,6 @@ extern struct value *call_xmethod (struct value *method, gdb::array_view<value *> argv); -/* Given a discriminated union type and some corresponding value - contents, this will return the field index of the currently active - variant. This will throw an exception if no active variant can be - found. */ - -extern int value_union_variant (struct type *union_type, - const gdb_byte *contents); - /* Destroy the values currently allocated. This is called when GDB is exiting (e.g., on quit_force). */ extern void finalize_values (); diff -Nru gdb-9.1/gdb/varobj.c gdb-10.2/gdb/varobj.c --- gdb-9.1/gdb/varobj.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/varobj.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Implementation of the GDB variable objects API. - Copyright (C) 1999-2020 Free Software Foundation, Inc. + Copyright (C) 1999-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -1271,7 +1271,7 @@ if (value) value = coerce_ref (value); - if (var->type && TYPE_CODE (var->type) == TYPE_CODE_UNION) + if (var->type && var->type->code () == TYPE_CODE_UNION) /* For unions, we need to fetch the value implicitly because of implementation of union member fetch. When gdb creates a value for a field and the value of the enclosing @@ -2398,7 +2398,7 @@ type = varobj_get_value_type (var); - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_STRUCT: case TYPE_CODE_UNION: @@ -2445,7 +2445,7 @@ type = varobj_get_value_type (var); - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_STRUCT: case TYPE_CODE_UNION: @@ -2520,8 +2520,9 @@ all_root_varobjs (varobj_invalidate_iter, NULL); } +void _initialize_varobj (); void -_initialize_varobj (void) +_initialize_varobj () { varobj_table = XCNEWVEC (struct vlist *, VAROBJ_TABLE_SIZE); diff -Nru gdb-9.1/gdb/varobj.h gdb-10.2/gdb/varobj.h --- gdb-9.1/gdb/varobj.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/varobj.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* GDB variable objects API. - Copyright (C) 1999-2020 Free Software Foundation, Inc. + Copyright (C) 1999-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/varobj-iter.h gdb-10.2/gdb/varobj-iter.h --- gdb-9.1/gdb/varobj-iter.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/varobj-iter.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Iterator of varobj. - Copyright (C) 2013-2020 Free Software Foundation, Inc. + Copyright (C) 2013-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/gdb/vax-bsd-nat.c gdb-10.2/gdb/vax-bsd-nat.c --- gdb-9.1/gdb/vax-bsd-nat.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/vax-bsd-nat.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Native-dependent code for modern VAX BSD's. - Copyright (C) 2004-2020 Free Software Foundation, Inc. + Copyright (C) 2004-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -17,6 +17,8 @@ You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ +/* We define this to get types like register_t. */ +#define _KERNTYPES #include "defs.h" #include "inferior.h" #include "regcache.h" @@ -28,8 +30,9 @@ #include "vax-tdep.h" #include "inf-ptrace.h" +#include "nbsd-nat.h" -struct vax_bsd_nat_target final : public inf_ptrace_target +struct vax_bsd_nat_target final : public nbsd_nat_target { void fetch_registers (struct regcache *, int) override; void store_registers (struct regcache *, int) override; @@ -42,7 +45,7 @@ static void vaxbsd_supply_gregset (struct regcache *regcache, const void *gregs) { - const gdb_byte *regs = gregs; + const gdb_byte *regs = (const gdb_byte *)gregs; int regnum; for (regnum = 0; regnum < VAX_NUM_REGS; regnum++) @@ -56,7 +59,7 @@ vaxbsd_collect_gregset (const struct regcache *regcache, void *gregs, int regnum) { - gdb_byte *regs = gregs; + gdb_byte *regs = (void *)gregs; int i; for (i = 0; i <= VAX_NUM_REGS; i++) @@ -75,8 +78,9 @@ { struct reg regs; pid_t pid = regcache->ptid ().pid (); + int lwp = regcache->ptid ().lwp (); - if (ptrace (PT_GETREGS, pid, (PTRACE_TYPE_ARG3) ®s, 0) == -1) + if (ptrace (PT_GETREGS, pid, (PTRACE_TYPE_ARG3) ®s, lwp) == -1) perror_with_name (_("Couldn't get registers")); vaxbsd_supply_gregset (regcache, ®s); @@ -90,13 +94,14 @@ { struct reg regs; pid_t pid = regcache->ptid ().pid (); + int lwp = regcache->ptid ().lwp (); - if (ptrace (PT_GETREGS, pid, (PTRACE_TYPE_ARG3) ®s, 0) == -1) + if (ptrace (PT_GETREGS, pid, (PTRACE_TYPE_ARG3) ®s, lwp) == -1) perror_with_name (_("Couldn't get registers")); vaxbsd_collect_gregset (regcache, ®s, regnum); - if (ptrace (PT_SETREGS, pid, (PTRACE_TYPE_ARG3) ®s, 0) == -1) + if (ptrace (PT_SETREGS, pid, (PTRACE_TYPE_ARG3) ®s, lwp) == -1) perror_with_name (_("Couldn't write registers")); } @@ -132,8 +137,9 @@ return 1; } +void _initialize_vaxbsd_nat (); void -_initialize_vaxbsd_nat (void) +_initialize_vaxbsd_nat () { add_inf_child_target (&the_vax_bsd_nat_target); diff -Nru gdb-9.1/gdb/vax-nbsd-tdep.c gdb-10.2/gdb/vax-nbsd-tdep.c --- gdb-9.1/gdb/vax-nbsd-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/vax-nbsd-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for NetBSD/vax. - Copyright (C) 2004-2020 Free Software Foundation, Inc. + Copyright (C) 2004-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -22,6 +22,7 @@ #include "osabi.h" #include "vax-tdep.h" +#include "nbsd-tdep.h" #include "solib-svr4.h" /* NetBSD ELF. */ @@ -29,13 +30,16 @@ static void vaxnbsd_elf_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) { + nbsd_init_abi (info, gdbarch); + /* NetBSD ELF uses SVR4-style shared libraries. */ set_solib_svr4_fetch_link_map_offsets (gdbarch, svr4_ilp32_fetch_link_map_offsets); } +void _initialize_vaxnbsd_tdep (); void -_initialize_vaxnbsd_tdep (void) +_initialize_vaxnbsd_tdep () { gdbarch_register_osabi (bfd_arch_vax, 0, GDB_OSABI_NETBSD, vaxnbsd_elf_init_abi); diff -Nru gdb-9.1/gdb/vax-tdep.c gdb-10.2/gdb/vax-tdep.c --- gdb-9.1/gdb/vax-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/vax-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for the VAX. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -206,9 +206,9 @@ int len = TYPE_LENGTH (type); gdb_byte buf[8]; - if (TYPE_CODE (type) == TYPE_CODE_STRUCT - || TYPE_CODE (type) == TYPE_CODE_UNION - || TYPE_CODE (type) == TYPE_CODE_ARRAY) + if (type->code () == TYPE_CODE_STRUCT + || type->code () == TYPE_CODE_UNION + || type->code () == TYPE_CODE_ARRAY) { /* The default on VAX is to return structures in static memory. Consequently a function must return the address where we can @@ -507,8 +507,9 @@ return (gdbarch); } +void _initialize_vax_tdep (); void -_initialize_vax_tdep (void) +_initialize_vax_tdep () { gdbarch_register (bfd_arch_vax, vax_gdbarch_init, NULL); } diff -Nru gdb-9.1/gdb/vax-tdep.h gdb-10.2/gdb/vax-tdep.h --- gdb-9.1/gdb/vax-tdep.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/vax-tdep.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for the VAX. - Copyright (C) 2002-2020 Free Software Foundation, Inc. + Copyright (C) 2002-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/version.in gdb-10.2/gdb/version.in --- gdb-9.1/gdb/version.in 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/version.in 2021-04-25 04:06:27.000000000 +0000 @@ -1 +1 @@ -9.1 +10.2 diff -Nru gdb-9.1/gdb/warning.m4 gdb-10.2/gdb/warning.m4 --- gdb-9.1/gdb/warning.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/warning.m4 1970-01-01 00:00:00.000000000 +0000 @@ -1,158 +0,0 @@ -dnl Autoconf configure script for GDB, the GNU debugger. -dnl Copyright (C) 1995-2020 Free Software Foundation, Inc. -dnl -dnl This file is part of GDB. -dnl -dnl This program is free software; you can redistribute it and/or modify -dnl it under the terms of the GNU General Public License as published by -dnl the Free Software Foundation; either version 3 of the License, or -dnl (at your option) any later version. -dnl -dnl This program is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -dnl GNU General Public License for more details. -dnl -dnl You should have received a copy of the GNU General Public License -dnl along with this program. If not, see <http://www.gnu.org/licenses/>. - -AC_DEFUN([AM_GDB_WARNINGS],[ -AC_ARG_ENABLE(werror, - AS_HELP_STRING([--enable-werror], [treat compile warnings as errors]), - [case "${enableval}" in - yes | y) ERROR_ON_WARNING="yes" ;; - no | n) ERROR_ON_WARNING="no" ;; - *) AC_MSG_ERROR(bad value ${enableval} for --enable-werror) ;; - esac]) - -# Enable -Werror by default when using gcc. Turn it off for releases. -if test "${GCC}" = yes -a -z "${ERROR_ON_WARNING}" && $development; then - ERROR_ON_WARNING=yes -fi - -WERROR_CFLAGS="" -if test "${ERROR_ON_WARNING}" = yes ; then - WERROR_CFLAGS="-Werror" -fi - -# The options we'll try to enable. -build_warnings="-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 \ --Wno-error=deprecated-register \ --Wsuggest-override \ --Wimplicit-fallthrough=3 \ --Wduplicated-cond \ --Wshadow=local \ --Wdeprecated-copy \ --Wdeprecated-copy-dtor \ --Wredundant-move" - -case "${host}" in - *-*-mingw32*) - # Enable -Wno-format by default when using gcc on mingw since many - # GCC versions complain about %I64. - build_warnings="$build_warnings -Wno-format" ;; - *-*-solaris*) - # Solaris 11.4 <python2.7/ceval.h> uses #pragma no_inline that GCC - # doesn't understand. - build_warnings="$build_warnings -Wno-unknown-pragmas" - # Solaris 11 <unistd.h> marks vfork deprecated. - build_warnings="$build_warnings -Wno-deprecated-declarations" ;; - *) - # Note that gcc requires -Wformat for -Wformat-nonliteral to work, - # but there's a special case for this below. - build_warnings="$build_warnings -Wformat-nonliteral" ;; -esac - -AC_ARG_ENABLE(build-warnings, -AS_HELP_STRING([--enable-build-warnings], [enable build-time compiler warnings if gcc is used]), -[case "${enableval}" in - yes) ;; - no) build_warnings="-w";; - ,*) t=`echo "${enableval}" | sed -e "s/,/ /g"` - build_warnings="${build_warnings} ${t}";; - *,) t=`echo "${enableval}" | sed -e "s/,/ /g"` - build_warnings="${t} ${build_warnings}";; - *) build_warnings=`echo "${enableval}" | sed -e "s/,/ /g"`;; -esac -if test x"$silent" != x"yes" && test x"$build_warnings" != x""; then - echo "Setting compiler warning flags = $build_warnings" 6>&1 -fi])dnl -AC_ARG_ENABLE(gdb-build-warnings, -AS_HELP_STRING([--enable-gdb-build-warnings], [enable GDB specific build-time compiler warnings if gcc is used]), -[case "${enableval}" in - yes) ;; - no) build_warnings="-w";; - ,*) t=`echo "${enableval}" | sed -e "s/,/ /g"` - build_warnings="${build_warnings} ${t}";; - *,) t=`echo "${enableval}" | sed -e "s/,/ /g"` - build_warnings="${t} ${build_warnings}";; - *) build_warnings=`echo "${enableval}" | sed -e "s/,/ /g"`;; -esac -if test x"$silent" != x"yes" && test x"$build_warnings" != x""; then - echo "Setting GDB specific compiler warning flags = $build_warnings" 6>&1 -fi])dnl - -# The set of warnings supported by a C++ compiler is not the same as -# of the C compiler. -AC_LANG_PUSH([C++]) - -WARN_CFLAGS="" -if test "x${build_warnings}" != x -a "x$GCC" = xyes -then - AC_MSG_CHECKING(compiler warning flags) - # Separate out the -Werror flag as some files just cannot be - # compiled with it enabled. - for w in ${build_warnings}; do - # GCC does not complain about -Wno-unknown-warning. Invert - # and test -Wunknown-warning instead. - case $w in - -Wno-*) - wtest=`echo $w | sed 's/-Wno-/-W/g'` ;; - -Wformat-nonliteral) - # gcc requires -Wformat before -Wformat-nonliteral - # will work, so stick them together. - w="-Wformat $w" - wtest="$w" - ;; - *) - wtest=$w ;; - esac - - case $w in - -Werr*) WERROR_CFLAGS=-Werror ;; - *) - # Check whether GCC accepts it. - saved_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -Werror $wtest" - saved_CXXFLAGS="$CXXFLAGS" - CXXFLAGS="$CXXFLAGS -Werror $wtest" - if test "x$w" = "x-Wunused-variable"; then - # Check for https://gcc.gnu.org/bugzilla/show_bug.cgi?id=38958, - # fixed in GCC 4.9. This test is derived from the gdb - # source code that triggered this bug in GCC. - AC_TRY_COMPILE( - [struct scoped_restore_base {}; - struct scoped_restore_tmpl : public scoped_restore_base { - ~scoped_restore_tmpl() {} - };], - [const scoped_restore_base &b = scoped_restore_tmpl();], - WARN_CFLAGS="${WARN_CFLAGS} $w",) - else - AC_TRY_COMPILE([],[],WARN_CFLAGS="${WARN_CFLAGS} $w",) - fi - CFLAGS="$saved_CFLAGS" - CXXFLAGS="$saved_CXXFLAGS" - esac - done - AC_MSG_RESULT(${WARN_CFLAGS} ${WERROR_CFLAGS}) -fi -AC_SUBST(WARN_CFLAGS) -AC_SUBST(WERROR_CFLAGS) - -AC_LANG_POP([C++]) -]) diff -Nru gdb-9.1/gdb/windows-nat.c gdb-10.2/gdb/windows-nat.c --- gdb-9.1/gdb/windows-nat.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/windows-nat.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-vector operations for controlling windows child processes, for GDB. - Copyright (C) 1995-2020 Free Software Foundation, Inc. + Copyright (C) 1995-2021 Free Software Foundation, Inc. Contributed by Cygnus Solutions, A Red Hat Company. @@ -43,6 +43,7 @@ #include <cygwin/version.h> #endif #include <algorithm> +#include <vector> #include "filenames.h" #include "symfile.h" @@ -68,17 +69,26 @@ #include "inf-child.h" #include "gdbsupport/gdb_tilde_expand.h" #include "gdbsupport/pathstuff.h" +#include "gdbsupport/gdb_wait.h" +#include "nat/windows-nat.h" + +using namespace windows_nat; #define AdjustTokenPrivileges dyn_AdjustTokenPrivileges #define DebugActiveProcessStop dyn_DebugActiveProcessStop #define DebugBreakProcess dyn_DebugBreakProcess #define DebugSetProcessKillOnExit dyn_DebugSetProcessKillOnExit #define EnumProcessModules dyn_EnumProcessModules +#define EnumProcessModulesEx dyn_EnumProcessModulesEx #define GetModuleInformation dyn_GetModuleInformation #define LookupPrivilegeValueA dyn_LookupPrivilegeValueA #define OpenProcessToken dyn_OpenProcessToken #define GetConsoleFontSize dyn_GetConsoleFontSize #define GetCurrentConsoleFont dyn_GetCurrentConsoleFont +#define Wow64SuspendThread dyn_Wow64SuspendThread +#define Wow64GetThreadContext dyn_Wow64GetThreadContext +#define Wow64SetThreadContext dyn_Wow64SetThreadContext +#define Wow64GetThreadSelectorEntry dyn_Wow64GetThreadSelectorEntry typedef BOOL WINAPI (AdjustTokenPrivileges_ftype) (HANDLE, BOOL, PTOKEN_PRIVILEGES, @@ -99,6 +109,12 @@ LPDWORD); static EnumProcessModules_ftype *EnumProcessModules; +#ifdef __x86_64__ +typedef BOOL WINAPI (EnumProcessModulesEx_ftype) (HANDLE, HMODULE *, DWORD, + LPDWORD, DWORD); +static EnumProcessModulesEx_ftype *EnumProcessModulesEx; +#endif + typedef BOOL WINAPI (GetModuleInformation_ftype) (HANDLE, HMODULE, LPMODULEINFO, DWORD); static GetModuleInformation_ftype *GetModuleInformation; @@ -116,6 +132,22 @@ typedef COORD WINAPI (GetConsoleFontSize_ftype) (HANDLE, DWORD); static GetConsoleFontSize_ftype *GetConsoleFontSize; +#ifdef __x86_64__ +typedef DWORD WINAPI (Wow64SuspendThread_ftype) (HANDLE); +static Wow64SuspendThread_ftype *Wow64SuspendThread; + +typedef BOOL WINAPI (Wow64GetThreadContext_ftype) (HANDLE, PWOW64_CONTEXT); +static Wow64GetThreadContext_ftype *Wow64GetThreadContext; + +typedef BOOL WINAPI (Wow64SetThreadContext_ftype) (HANDLE, + const WOW64_CONTEXT *); +static Wow64SetThreadContext_ftype *Wow64SetThreadContext; + +typedef BOOL WINAPI (Wow64GetThreadSelectorEntry_ftype) (HANDLE, DWORD, + PLDT_ENTRY); +static Wow64GetThreadSelectorEntry_ftype *Wow64GetThreadSelectorEntry; +#endif + #undef STARTUPINFO #undef CreateProcess #undef GetModuleFileNameEx @@ -178,19 +210,6 @@ static int windows_initialization_done; #define DR6_CLEAR_VALUE 0xffff0ff0 -/* The exception thrown by a program to tell the debugger the name of - a thread. The exception record contains an ID of a thread and a - name to give it. This exception has no documented name, but MSDN - dubs it "MS_VC_EXCEPTION" in one code example. */ -#define MS_VC_EXCEPTION 0x406d1388 - -typedef enum -{ - HANDLE_EXCEPTION_UNHANDLED = 0, - HANDLE_EXCEPTION_HANDLED, - HANDLE_EXCEPTION_IGNORED -} handle_exception_result; - /* The string sent by cygwin when it processes a signal. FIXME: This should be in a cygwin include file. */ #ifndef _CYGWIN_SIGNAL_STRING @@ -198,10 +217,10 @@ #endif #define CHECK(x) check (x, __FILE__,__LINE__) -#define DEBUG_EXEC(x) if (debug_exec) printf_unfiltered x -#define DEBUG_EVENTS(x) if (debug_events) printf_unfiltered x -#define DEBUG_MEM(x) if (debug_memory) printf_unfiltered x -#define DEBUG_EXCEPT(x) if (debug_exceptions) printf_unfiltered x +#define DEBUG_EXEC(x) if (debug_exec) debug_printf x +#define DEBUG_EVENTS(x) if (debug_events) debug_printf x +#define DEBUG_MEM(x) if (debug_memory) debug_printf x +#define DEBUG_EXCEPT(x) if (debug_exceptions) debug_printf x static void cygwin_set_dr (int i, CORE_ADDR addr); static void cygwin_set_dr7 (unsigned long val); @@ -209,36 +228,9 @@ static unsigned long cygwin_get_dr6 (void); static unsigned long cygwin_get_dr7 (void); -static enum gdb_signal last_sig = GDB_SIGNAL_0; -/* Set if a signal was received from the debugged process. */ - -/* Thread information structure used to track information that is - not available in gdb's thread structure. */ -typedef struct windows_thread_info_struct - { - struct windows_thread_info_struct *next; - DWORD id; - HANDLE h; - CORE_ADDR thread_local_base; - char *name; - int suspended; - int reload_context; - CONTEXT context; - } -windows_thread_info; - -static windows_thread_info thread_head; - -/* The process and thread handles for the above context. */ - -static DEBUG_EVENT current_event; /* The current debug event from - WaitForDebugEvent */ -static HANDLE current_process_handle; /* Currently executing process */ -static windows_thread_info *current_thread; /* Info on currently selected thread */ +static std::vector<windows_thread_info *> thread_list; /* Counts of things. */ -static int exception_count = 0; -static int event_count = 0; static int saw_create; static int open_process_used = 0; @@ -320,6 +312,18 @@ void fetch_registers (struct regcache *, int) override; void store_registers (struct regcache *, int) override; + bool stopped_by_sw_breakpoint () override + { + windows_thread_info *th + = thread_rec (inferior_ptid, DONT_INVALIDATE_CONTEXT); + return th->stopped_at_software_breakpoint; + } + + bool supports_stopped_by_sw_breakpoint () override + { + return true; + } + enum target_xfer_status xfer_partial (enum target_object object, const char *annex, gdb_byte *readbuf, @@ -349,6 +353,10 @@ bool get_tib_address (ptid_t ptid, CORE_ADDR *addr) override; const char *thread_name (struct thread_info *) override; + + int get_windows_debug_event (int pid, struct target_waitstatus *ourstatus); + + void do_initial_windows_stuff (DWORD pid, bool attaching); }; static windows_nat_target the_windows_nat_target; @@ -356,15 +364,16 @@ /* Set the MAPPINGS static global to OFFSETS. See the description of MAPPINGS for more details. */ -void +static void windows_set_context_register_offsets (const int *offsets) { mappings = offsets; } -/* See windows-nat.h. */ +/* Set the function that should be used by this module to determine + whether a given register is a segment register or not. */ -void +static void windows_set_segment_register_p (segment_register_p_ftype *fun) { segment_register_p = fun; @@ -378,44 +387,31 @@ (unsigned) GetLastError ()); } -/* Find a thread record given a thread id. If GET_CONTEXT is not 0, - then also retrieve the context for this thread. If GET_CONTEXT is - negative, then don't suspend the thread. */ -static windows_thread_info * -thread_rec (DWORD id, int get_context) -{ - windows_thread_info *th; +/* See nat/windows-nat.h. */ - for (th = &thread_head; (th = th->next) != NULL;) - if (th->id == id) +windows_thread_info * +windows_nat::thread_rec (ptid_t ptid, thread_disposition_type disposition) +{ + for (windows_thread_info *th : thread_list) + if (th->tid == ptid.lwp ()) { - if (!th->suspended && get_context) + if (!th->suspended) { - if (get_context > 0 && id != current_event.dwThreadId) + switch (disposition) { - if (SuspendThread (th->h) == (DWORD) -1) - { - DWORD err = GetLastError (); - - /* We get Access Denied (5) when trying to suspend - threads that Windows started on behalf of the - debuggee, usually when those threads are just - about to exit. - We can get Invalid Handle (6) if the main thread - has exited. */ - if (err != ERROR_INVALID_HANDLE - && err != ERROR_ACCESS_DENIED) - warning (_("SuspendThread (tid=0x%x) failed." - " (winerr %u)"), - (unsigned) id, (unsigned) err); - th->suspended = -1; - } - else - th->suspended = 1; + case DONT_INVALIDATE_CONTEXT: + /* Nothing. */ + break; + case INVALIDATE_CONTEXT: + if (ptid.lwp () != current_event.dwThreadId) + th->suspend (); + th->reload_context = true; + break; + case DONT_SUSPEND: + th->reload_context = true; + th->suspended = -1; + break; } - else if (get_context < 0) - th->suspended = -1; - th->reload_context = 1; } return th; } @@ -435,21 +431,21 @@ windows_add_thread (ptid_t ptid, HANDLE h, void *tlb, bool main_thread_p) { windows_thread_info *th; - DWORD id; - gdb_assert (ptid.tid () != 0); + gdb_assert (ptid.lwp () != 0); - id = ptid.tid (); - - if ((th = thread_rec (id, FALSE))) + if ((th = thread_rec (ptid, DONT_INVALIDATE_CONTEXT))) return th; - th = XCNEW (windows_thread_info); - th->id = id; - th->h = h; - th->thread_local_base = (CORE_ADDR) (uintptr_t) tlb; - th->next = thread_head.next; - thread_head.next = th; + CORE_ADDR base = (CORE_ADDR) (uintptr_t) tlb; +#ifdef __x86_64__ + /* For WOW64 processes, this is actually the pointer to the 64bit TIB, + and the 32bit TIB is exactly 2 pages after it. */ + if (wow64_process) + base += 0x2000; +#endif + th = new windows_thread_info (ptid.lwp (), h, base); + thread_list.push_back (th); /* Add this new thread to the list of threads. @@ -457,24 +453,43 @@ the main thread silently (in reality, this thread is really more of a process to the user than a thread). */ if (main_thread_p) - add_thread_silent (ptid); + add_thread_silent (&the_windows_nat_target, ptid); else - add_thread (ptid); + add_thread (&the_windows_nat_target, ptid); /* Set the debug registers for the new thread if they are used. */ if (debug_registers_used) { - /* Only change the value of the debug registers. */ - th->context.ContextFlags = CONTEXT_DEBUG_REGISTERS; - CHECK (GetThreadContext (th->h, &th->context)); - th->context.Dr0 = dr[0]; - th->context.Dr1 = dr[1]; - th->context.Dr2 = dr[2]; - th->context.Dr3 = dr[3]; - th->context.Dr6 = DR6_CLEAR_VALUE; - th->context.Dr7 = dr[7]; - CHECK (SetThreadContext (th->h, &th->context)); - th->context.ContextFlags = 0; +#ifdef __x86_64__ + if (wow64_process) + { + /* Only change the value of the debug registers. */ + th->wow64_context.ContextFlags = CONTEXT_DEBUG_REGISTERS; + CHECK (Wow64GetThreadContext (th->h, &th->wow64_context)); + th->wow64_context.Dr0 = dr[0]; + th->wow64_context.Dr1 = dr[1]; + th->wow64_context.Dr2 = dr[2]; + th->wow64_context.Dr3 = dr[3]; + th->wow64_context.Dr6 = DR6_CLEAR_VALUE; + th->wow64_context.Dr7 = dr[7]; + CHECK (Wow64SetThreadContext (th->h, &th->wow64_context)); + th->wow64_context.ContextFlags = 0; + } + else +#endif + { + /* Only change the value of the debug registers. */ + th->context.ContextFlags = CONTEXT_DEBUG_REGISTERS; + CHECK (GetThreadContext (th->h, &th->context)); + th->context.Dr0 = dr[0]; + th->context.Dr1 = dr[1]; + th->context.Dr2 = dr[2]; + th->context.Dr3 = dr[3]; + th->context.Dr6 = DR6_CLEAR_VALUE; + th->context.Dr7 = dr[7]; + CHECK (SetThreadContext (th->h, &th->context)); + th->context.ContextFlags = 0; + } } return th; } @@ -484,17 +499,13 @@ static void windows_init_thread_list (void) { - windows_thread_info *th = &thread_head; - DEBUG_EVENTS (("gdb: windows_init_thread_list\n")); init_thread_list (); - while (th->next != NULL) - { - windows_thread_info *here = th->next; - th->next = here->next; - xfree (here); - } - thread_head.next = NULL; + + for (windows_thread_info *here : thread_list) + delete here; + + thread_list.clear (); } /* Delete a thread from the list of threads. @@ -507,12 +518,11 @@ static void windows_delete_thread (ptid_t ptid, DWORD exit_code, bool main_thread_p) { - windows_thread_info *th; DWORD id; - gdb_assert (ptid.tid () != 0); + gdb_assert (ptid.lwp () != 0); - id = ptid.tid (); + id = ptid.lwp (); /* Emit a notification about the thread being deleted. @@ -528,19 +538,18 @@ target_pid_to_str (ptid).c_str (), (unsigned) exit_code); - delete_thread (find_thread_ptid (ptid)); + delete_thread (find_thread_ptid (&the_windows_nat_target, ptid)); - for (th = &thread_head; - th->next != NULL && th->next->id != id; - th = th->next) - continue; - - if (th->next != NULL) - { - windows_thread_info *here = th->next; - th->next = here->next; - xfree (here->name); - xfree (here); + auto iter = std::find_if (thread_list.begin (), thread_list.end (), + [=] (windows_thread_info *th) + { + return th->tid == id; + }); + + if (iter != thread_list.end ()) + { + delete *iter; + thread_list.erase (iter); } } @@ -561,10 +570,20 @@ gdb_assert (r >= 0); gdb_assert (!th->reload_context); - char *context_offset = ((char *) &th->context) + mappings[r]; + char *context_ptr = (char *) &th->context; +#ifdef __x86_64__ + if (wow64_process) + context_ptr = (char *) &th->wow64_context; +#endif + + char *context_offset = context_ptr + mappings[r]; struct gdbarch *gdbarch = regcache->arch (); struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); + gdb_assert (!gdbarch_read_pc_p (gdbarch)); + gdb_assert (gdbarch_pc_regnum (gdbarch) >= 0); + gdb_assert (!gdbarch_write_pc_p (gdbarch)); + if (r == I387_FISEG_REGNUM (tdep)) { long l = *((long *) context_offset) & 0xffff; @@ -584,14 +603,38 @@ regcache->raw_supply (r, (char *) &l); } else - regcache->raw_supply (r, context_offset); + { + if (th->stopped_at_software_breakpoint + && !th->pc_adjusted + && r == gdbarch_pc_regnum (gdbarch)) + { + int size = register_size (gdbarch, r); + if (size == 4) + { + uint32_t value; + memcpy (&value, context_offset, size); + value -= gdbarch_decr_pc_after_break (gdbarch); + memcpy (context_offset, &value, size); + } + else + { + gdb_assert (size == 8); + uint64_t value; + memcpy (&value, context_offset, size); + value -= gdbarch_decr_pc_after_break (gdbarch); + memcpy (context_offset, &value, size); + } + /* Make sure we only rewrite the PC a single time. */ + th->pc_adjusted = true; + } + regcache->raw_supply (r, context_offset); + } } void windows_nat_target::fetch_registers (struct regcache *regcache, int r) { - DWORD tid = regcache->ptid ().tid (); - windows_thread_info *th = thread_rec (tid, TRUE); + windows_thread_info *th = thread_rec (regcache->ptid (), INVALIDATE_CONTEXT); /* Check if TH exists. Windows sometimes uses a non-existent thread id in its events. */ @@ -613,6 +656,26 @@ } else #endif +#ifdef __x86_64__ + if (wow64_process) + { + th->wow64_context.ContextFlags = CONTEXT_DEBUGGER_DR; + CHECK (Wow64GetThreadContext (th->h, &th->wow64_context)); + /* Copy dr values from that thread. + But only if there were not modified since last stop. + PR gdb/2388 */ + if (!debug_registers_changed) + { + dr[0] = th->wow64_context.Dr0; + dr[1] = th->wow64_context.Dr1; + dr[2] = th->wow64_context.Dr2; + dr[3] = th->wow64_context.Dr3; + dr[6] = th->wow64_context.Dr6; + dr[7] = th->wow64_context.Dr7; + } + } + else +#endif { th->context.ContextFlags = CONTEXT_DEBUGGER_DR; CHECK (GetThreadContext (th->h, &th->context)); @@ -629,7 +692,7 @@ dr[7] = th->context.Dr7; } } - th->reload_context = 0; + th->reload_context = false; } if (r < 0) @@ -651,7 +714,13 @@ { gdb_assert (r >= 0); - regcache->raw_collect (r, ((char *) &th->context) + mappings[r]); + char *context_ptr = (char *) &th->context; +#ifdef __x86_64__ + if (wow64_process) + context_ptr = (char *) &th->wow64_context; +#endif + + regcache->raw_collect (r, context_ptr + mappings[r]); } /* Store a new register value into the context of the thread tied to @@ -660,8 +729,7 @@ void windows_nat_target::store_registers (struct regcache *regcache, int r) { - DWORD tid = regcache->ptid ().tid (); - windows_thread_info *th = thread_rec (tid, TRUE); + windows_thread_info *th = thread_rec (regcache->ptid (), INVALIDATE_CONTEXT); /* Check if TH exists. Windows sometimes uses a non-existent thread id in its events. */ @@ -679,6 +747,7 @@ struct lm_info_windows : public lm_info_base { LPVOID load_addr = 0; + CORE_ADDR text_offset = 0; }; static struct so_list solib_start, *solib_end; @@ -755,7 +824,10 @@ free (rname); } else - error (_("dll path too long")); + { + warning (_("dll path for \"%s\" too long or inaccessible"), name); + strcpy (so->so_name, so->so_original_name); + } } /* Record cygwin1.dll .text start/end. */ p = strchr (so->so_name, '\0') - (sizeof ("/cygwin1.dll") - 1); @@ -763,7 +835,7 @@ { asection *text = NULL; - gdb_bfd_ref_ptr abfd (gdb_bfd_open (so->so_name, "pei-i386", -1)); + gdb_bfd_ref_ptr abfd (gdb_bfd_open (so->so_name, "pei-i386")); if (abfd == NULL) return so; @@ -786,68 +858,13 @@ return so; } -static char * -get_image_name (HANDLE h, void *address, int unicode) -{ -#ifdef __CYGWIN__ - static char buf[__PMAX]; -#else - static char buf[(2 * __PMAX) + 1]; -#endif - DWORD size = unicode ? sizeof (WCHAR) : sizeof (char); - char *address_ptr; - int len = 0; - char b[2]; - SIZE_T done; - - /* Attempt to read the name of the dll that was detected. - This is documented to work only when actively debugging - a program. It will not work for attached processes. */ - if (address == NULL) - return NULL; - - /* See if we could read the address of a string, and that the - address isn't null. */ - if (!ReadProcessMemory (h, address, &address_ptr, - sizeof (address_ptr), &done) - || done != sizeof (address_ptr) || !address_ptr) - return NULL; - - /* Find the length of the string. */ - while (ReadProcessMemory (h, address_ptr + len++ * size, &b, size, &done) - && (b[0] != 0 || b[size - 1] != 0) && done == size) - continue; - - if (!unicode) - ReadProcessMemory (h, address_ptr, buf, len, &done); - else - { - WCHAR *unicode_address = (WCHAR *) alloca (len * sizeof (WCHAR)); - ReadProcessMemory (h, address_ptr, unicode_address, len * sizeof (WCHAR), - &done); -#ifdef __CYGWIN__ - wcstombs (buf, unicode_address, __PMAX); -#else - WideCharToMultiByte (CP_ACP, 0, unicode_address, len, buf, sizeof buf, - 0, 0); -#endif - } +/* See nat/windows-nat.h. */ - return buf; -} - -/* Handle a DLL load event, and return 1. - - This function assumes that this event did not occur during inferior - initialization, where their event info may be incomplete (see - do_initial_windows_stuff and windows_add_all_dlls for more info - on how we handle DLL loading during that phase). */ - -static void -handle_load_dll () +void +windows_nat::handle_load_dll () { LOAD_DLL_DEBUG_INFO *event = ¤t_event.u.LoadDll; - char *dll_name; + const char *dll_name; /* Try getting the DLL name via the lpImageName field of the event. Note that Microsoft documents this fields as strictly optional, @@ -877,16 +894,10 @@ xfree (so); } -/* Handle a DLL unload event. - Return 1 if successful, or zero otherwise. - - This function assumes that this event did not occur during inferior - initialization, where their event info may be incomplete (see - do_initial_windows_stuff and windows_add_all_dlls for more info - on how we handle DLL loading during that phase). */ +/* See nat/windows-nat.h. */ -static void -handle_unload_dll () +void +windows_nat::handle_unload_dll () { LPVOID lpBaseOfDll = current_event.u.UnloadDll.lpBaseOfDll; struct so_list *so; @@ -940,7 +951,14 @@ static void windows_clear_solib (void) { - solib_start.next = NULL; + struct so_list *so; + + for (so = solib_start.next; so; so = solib_start.next) + { + solib_start.next = so->next; + windows_free_so (so); + } + solib_end = &solib_start; } @@ -963,19 +981,18 @@ CloseHandle ((HANDLE) event_id); } -/* Handle DEBUG_STRING output from child process. - Cygwin prepends its messages with a "cygwin:". Interpret this as - a Cygwin signal. Otherwise just print the string as a warning. */ -static int -handle_output_debug_string (struct target_waitstatus *ourstatus) +/* See nat/windows-nat.h. */ + +int +windows_nat::handle_output_debug_string (struct target_waitstatus *ourstatus) { - gdb::unique_xmalloc_ptr<char> s; int retval = 0; - if (!target_read_string - ((CORE_ADDR) (uintptr_t) current_event.u.DebugString.lpDebugStringData, - &s, 1024, 0) - || !s || !*(s.get ())) + gdb::unique_xmalloc_ptr<char> s + = (target_read_string + ((CORE_ADDR) (uintptr_t) current_event.u.DebugString.lpDebugStringData, + 1024)); + if (s == nullptr || !*(s.get ())) /* nothing to do */; else if (!startswith (s.get (), _CYGWIN_SIGNAL_STRING)) { @@ -1031,7 +1048,14 @@ display_selector (HANDLE thread, DWORD sel) { LDT_ENTRY info; - if (GetThreadSelectorEntry (thread, sel, &info)) + BOOL ret; +#ifdef __x86_64__ + if (wow64_process) + ret = Wow64GetThreadSelectorEntry (thread, sel, &info); + else +#endif + ret = GetThreadSelectorEntry (thread, sel, &info); + if (ret) { int base, limit; printf_filtered ("0x%03x: ", (unsigned) sel); @@ -1108,208 +1132,133 @@ static void display_selectors (const char * args, int from_tty) { - if (!current_thread) + if (inferior_ptid == null_ptid) { puts_filtered ("Impossible to display selectors now.\n"); return; } + + windows_thread_info *current_windows_thread + = thread_rec (inferior_ptid, DONT_INVALIDATE_CONTEXT); + if (!args) { - - puts_filtered ("Selector $cs\n"); - display_selector (current_thread->h, - current_thread->context.SegCs); - puts_filtered ("Selector $ds\n"); - display_selector (current_thread->h, - current_thread->context.SegDs); - puts_filtered ("Selector $es\n"); - display_selector (current_thread->h, - current_thread->context.SegEs); - puts_filtered ("Selector $ss\n"); - display_selector (current_thread->h, - current_thread->context.SegSs); - puts_filtered ("Selector $fs\n"); - display_selector (current_thread->h, - current_thread->context.SegFs); - puts_filtered ("Selector $gs\n"); - display_selector (current_thread->h, - current_thread->context.SegGs); +#ifdef __x86_64__ + if (wow64_process) + { + puts_filtered ("Selector $cs\n"); + display_selector (current_windows_thread->h, + current_windows_thread->wow64_context.SegCs); + puts_filtered ("Selector $ds\n"); + display_selector (current_windows_thread->h, + current_windows_thread->wow64_context.SegDs); + puts_filtered ("Selector $es\n"); + display_selector (current_windows_thread->h, + current_windows_thread->wow64_context.SegEs); + puts_filtered ("Selector $ss\n"); + display_selector (current_windows_thread->h, + current_windows_thread->wow64_context.SegSs); + puts_filtered ("Selector $fs\n"); + display_selector (current_windows_thread->h, + current_windows_thread->wow64_context.SegFs); + puts_filtered ("Selector $gs\n"); + display_selector (current_windows_thread->h, + current_windows_thread->wow64_context.SegGs); + } + else +#endif + { + puts_filtered ("Selector $cs\n"); + display_selector (current_windows_thread->h, + current_windows_thread->context.SegCs); + puts_filtered ("Selector $ds\n"); + display_selector (current_windows_thread->h, + current_windows_thread->context.SegDs); + puts_filtered ("Selector $es\n"); + display_selector (current_windows_thread->h, + current_windows_thread->context.SegEs); + puts_filtered ("Selector $ss\n"); + display_selector (current_windows_thread->h, + current_windows_thread->context.SegSs); + puts_filtered ("Selector $fs\n"); + display_selector (current_windows_thread->h, + current_windows_thread->context.SegFs); + puts_filtered ("Selector $gs\n"); + display_selector (current_windows_thread->h, + current_windows_thread->context.SegGs); + } } else { int sel; sel = parse_and_eval_long (args); printf_filtered ("Selector \"%s\"\n",args); - display_selector (current_thread->h, sel); + display_selector (current_windows_thread->h, sel); } } -#define DEBUG_EXCEPTION_SIMPLE(x) if (debug_exceptions) \ - printf_unfiltered ("gdb: Target exception %s at %s\n", x, \ - host_address_to_string (\ - current_event.u.Exception.ExceptionRecord.ExceptionAddress)) +/* See nat/windows-nat.h. */ -static handle_exception_result -handle_exception (struct target_waitstatus *ourstatus) +bool +windows_nat::handle_ms_vc_exception (const EXCEPTION_RECORD *rec) { - EXCEPTION_RECORD *rec = ¤t_event.u.Exception.ExceptionRecord; - DWORD code = rec->ExceptionCode; - handle_exception_result result = HANDLE_EXCEPTION_HANDLED; - - ourstatus->kind = TARGET_WAITKIND_STOPPED; - - /* Record the context of the current thread. */ - thread_rec (current_event.dwThreadId, -1); - - switch (code) + if (rec->NumberParameters >= 3 + && (rec->ExceptionInformation[0] & 0xffffffff) == 0x1000) { - case EXCEPTION_ACCESS_VIOLATION: - DEBUG_EXCEPTION_SIMPLE ("EXCEPTION_ACCESS_VIOLATION"); - ourstatus->value.sig = GDB_SIGNAL_SEGV; -#ifdef __CYGWIN__ - { - /* See if the access violation happened within the cygwin DLL - itself. Cygwin uses a kind of exception handling to deal - with passed-in invalid addresses. gdb should not treat - these as real SEGVs since they will be silently handled by - cygwin. A real SEGV will (theoretically) be caught by - cygwin later in the process and will be sent as a - cygwin-specific-signal. So, ignore SEGVs if they show up - within the text segment of the DLL itself. */ - const char *fn; - CORE_ADDR addr = (CORE_ADDR) (uintptr_t) rec->ExceptionAddress; - - if ((!cygwin_exceptions && (addr >= cygwin_load_start - && addr < cygwin_load_end)) - || (find_pc_partial_function (addr, &fn, NULL, NULL) - && startswith (fn, "KERNEL32!IsBad"))) - return HANDLE_EXCEPTION_UNHANDLED; - } -#endif - break; - case STATUS_STACK_OVERFLOW: - DEBUG_EXCEPTION_SIMPLE ("STATUS_STACK_OVERFLOW"); - ourstatus->value.sig = GDB_SIGNAL_SEGV; - break; - case STATUS_FLOAT_DENORMAL_OPERAND: - DEBUG_EXCEPTION_SIMPLE ("STATUS_FLOAT_DENORMAL_OPERAND"); - ourstatus->value.sig = GDB_SIGNAL_FPE; - break; - case EXCEPTION_ARRAY_BOUNDS_EXCEEDED: - DEBUG_EXCEPTION_SIMPLE ("EXCEPTION_ARRAY_BOUNDS_EXCEEDED"); - ourstatus->value.sig = GDB_SIGNAL_FPE; - break; - case STATUS_FLOAT_INEXACT_RESULT: - DEBUG_EXCEPTION_SIMPLE ("STATUS_FLOAT_INEXACT_RESULT"); - ourstatus->value.sig = GDB_SIGNAL_FPE; - break; - case STATUS_FLOAT_INVALID_OPERATION: - DEBUG_EXCEPTION_SIMPLE ("STATUS_FLOAT_INVALID_OPERATION"); - ourstatus->value.sig = GDB_SIGNAL_FPE; - break; - case STATUS_FLOAT_OVERFLOW: - DEBUG_EXCEPTION_SIMPLE ("STATUS_FLOAT_OVERFLOW"); - ourstatus->value.sig = GDB_SIGNAL_FPE; - break; - case STATUS_FLOAT_STACK_CHECK: - DEBUG_EXCEPTION_SIMPLE ("STATUS_FLOAT_STACK_CHECK"); - ourstatus->value.sig = GDB_SIGNAL_FPE; - break; - case STATUS_FLOAT_UNDERFLOW: - DEBUG_EXCEPTION_SIMPLE ("STATUS_FLOAT_UNDERFLOW"); - ourstatus->value.sig = GDB_SIGNAL_FPE; - break; - case STATUS_FLOAT_DIVIDE_BY_ZERO: - DEBUG_EXCEPTION_SIMPLE ("STATUS_FLOAT_DIVIDE_BY_ZERO"); - ourstatus->value.sig = GDB_SIGNAL_FPE; - break; - case STATUS_INTEGER_DIVIDE_BY_ZERO: - DEBUG_EXCEPTION_SIMPLE ("STATUS_INTEGER_DIVIDE_BY_ZERO"); - ourstatus->value.sig = GDB_SIGNAL_FPE; - break; - case STATUS_INTEGER_OVERFLOW: - DEBUG_EXCEPTION_SIMPLE ("STATUS_INTEGER_OVERFLOW"); - ourstatus->value.sig = GDB_SIGNAL_FPE; - break; - case EXCEPTION_BREAKPOINT: - DEBUG_EXCEPTION_SIMPLE ("EXCEPTION_BREAKPOINT"); - ourstatus->value.sig = GDB_SIGNAL_TRAP; - break; - case DBG_CONTROL_C: - DEBUG_EXCEPTION_SIMPLE ("DBG_CONTROL_C"); - ourstatus->value.sig = GDB_SIGNAL_INT; - break; - case DBG_CONTROL_BREAK: - DEBUG_EXCEPTION_SIMPLE ("DBG_CONTROL_BREAK"); - ourstatus->value.sig = GDB_SIGNAL_INT; - break; - case EXCEPTION_SINGLE_STEP: - DEBUG_EXCEPTION_SIMPLE ("EXCEPTION_SINGLE_STEP"); - ourstatus->value.sig = GDB_SIGNAL_TRAP; - break; - case EXCEPTION_ILLEGAL_INSTRUCTION: - DEBUG_EXCEPTION_SIMPLE ("EXCEPTION_ILLEGAL_INSTRUCTION"); - ourstatus->value.sig = GDB_SIGNAL_ILL; - break; - case EXCEPTION_PRIV_INSTRUCTION: - DEBUG_EXCEPTION_SIMPLE ("EXCEPTION_PRIV_INSTRUCTION"); - ourstatus->value.sig = GDB_SIGNAL_ILL; - break; - case EXCEPTION_NONCONTINUABLE_EXCEPTION: - DEBUG_EXCEPTION_SIMPLE ("EXCEPTION_NONCONTINUABLE_EXCEPTION"); - ourstatus->value.sig = GDB_SIGNAL_ILL; - break; - case MS_VC_EXCEPTION: - if (rec->NumberParameters >= 3 - && (rec->ExceptionInformation[0] & 0xffffffff) == 0x1000) - { - DWORD named_thread_id; - windows_thread_info *named_thread; - CORE_ADDR thread_name_target; - - DEBUG_EXCEPTION_SIMPLE ("MS_VC_EXCEPTION"); - - thread_name_target = rec->ExceptionInformation[1]; - named_thread_id = (DWORD) (0xffffffff & rec->ExceptionInformation[2]); - - if (named_thread_id == (DWORD) -1) - named_thread_id = current_event.dwThreadId; - - named_thread = thread_rec (named_thread_id, 0); - if (named_thread != NULL) + DWORD named_thread_id; + windows_thread_info *named_thread; + CORE_ADDR thread_name_target; + + thread_name_target = rec->ExceptionInformation[1]; + named_thread_id = (DWORD) (0xffffffff & rec->ExceptionInformation[2]); + + if (named_thread_id == (DWORD) -1) + named_thread_id = current_event.dwThreadId; + + named_thread = thread_rec (ptid_t (current_event.dwProcessId, + named_thread_id, 0), + DONT_INVALIDATE_CONTEXT); + if (named_thread != NULL) + { + int thread_name_len; + gdb::unique_xmalloc_ptr<char> thread_name + = target_read_string (thread_name_target, 1025, &thread_name_len); + if (thread_name_len > 0) { - int thread_name_len; - gdb::unique_xmalloc_ptr<char> thread_name; - - thread_name_len = target_read_string (thread_name_target, - &thread_name, 1025, NULL); - if (thread_name_len > 0) - { - thread_name.get ()[thread_name_len - 1] = '\0'; - xfree (named_thread->name); - named_thread->name = thread_name.release (); - } + thread_name.get ()[thread_name_len - 1] = '\0'; + named_thread->name = std::move (thread_name); } - ourstatus->value.sig = GDB_SIGNAL_TRAP; - result = HANDLE_EXCEPTION_IGNORED; - break; } - /* treat improperly formed exception as unknown */ - /* FALLTHROUGH */ - default: - /* Treat unhandled first chance exceptions specially. */ - if (current_event.u.Exception.dwFirstChance) - return HANDLE_EXCEPTION_UNHANDLED; - printf_unfiltered ("gdb: unknown target exception 0x%08x at %s\n", - (unsigned) current_event.u.Exception.ExceptionRecord.ExceptionCode, - host_address_to_string ( - current_event.u.Exception.ExceptionRecord.ExceptionAddress)); - ourstatus->value.sig = GDB_SIGNAL_UNKNOWN; - break; + + return true; } - exception_count++; - last_sig = ourstatus->value.sig; - return result; + + return false; +} + +/* See nat/windows-nat.h. */ + +bool +windows_nat::handle_access_violation (const EXCEPTION_RECORD *rec) +{ +#ifdef __CYGWIN__ + /* See if the access violation happened within the cygwin DLL + itself. Cygwin uses a kind of exception handling to deal with + passed-in invalid addresses. gdb should not treat these as real + SEGVs since they will be silently handled by cygwin. A real SEGV + will (theoretically) be caught by cygwin later in the process and + will be sent as a cygwin-specific-signal. So, ignore SEGVs if + they show up within the text segment of the DLL itself. */ + const char *fn; + CORE_ADDR addr = (CORE_ADDR) (uintptr_t) rec->ExceptionAddress; + + if ((!cygwin_exceptions && (addr >= cygwin_load_start + && addr < cygwin_load_end)) + || (find_pc_partial_function (addr, &fn, NULL, NULL) + && startswith (fn, "KERNEL32!IsBad"))) + return true; +#endif + return false; } /* Resume thread specified by ID, or all artificially suspended @@ -1319,51 +1268,85 @@ static BOOL windows_continue (DWORD continue_status, int id, int killed) { - windows_thread_info *th; BOOL res; - DEBUG_EVENTS (("ContinueDebugEvent (cpid=%d, ctid=0x%x, %s);\n", - (unsigned) current_event.dwProcessId, - (unsigned) current_event.dwThreadId, - continue_status == DBG_CONTINUE ? - "DBG_CONTINUE" : "DBG_EXCEPTION_NOT_HANDLED")); - - for (th = &thread_head; (th = th->next) != NULL;) - if ((id == -1 || id == (int) th->id) - && th->suspended) + desired_stop_thread_id = id; + + if (matching_pending_stop (debug_events)) + return TRUE; + + for (windows_thread_info *th : thread_list) + if (id == -1 || id == (int) th->tid) { - if (debug_registers_changed) + if (!th->suspended) + continue; +#ifdef __x86_64__ + if (wow64_process) { - th->context.ContextFlags |= CONTEXT_DEBUG_REGISTERS; - th->context.Dr0 = dr[0]; - th->context.Dr1 = dr[1]; - th->context.Dr2 = dr[2]; - th->context.Dr3 = dr[3]; - th->context.Dr6 = DR6_CLEAR_VALUE; - th->context.Dr7 = dr[7]; + if (debug_registers_changed) + { + th->wow64_context.ContextFlags |= CONTEXT_DEBUG_REGISTERS; + th->wow64_context.Dr0 = dr[0]; + th->wow64_context.Dr1 = dr[1]; + th->wow64_context.Dr2 = dr[2]; + th->wow64_context.Dr3 = dr[3]; + th->wow64_context.Dr6 = DR6_CLEAR_VALUE; + th->wow64_context.Dr7 = dr[7]; + } + if (th->wow64_context.ContextFlags) + { + DWORD ec = 0; + + if (GetExitCodeThread (th->h, &ec) + && ec == STILL_ACTIVE) + { + BOOL status = Wow64SetThreadContext (th->h, + &th->wow64_context); + + if (!killed) + CHECK (status); + } + th->wow64_context.ContextFlags = 0; + } } - if (th->context.ContextFlags) + else +#endif { - DWORD ec = 0; - - if (GetExitCodeThread (th->h, &ec) - && ec == STILL_ACTIVE) + if (debug_registers_changed) + { + th->context.ContextFlags |= CONTEXT_DEBUG_REGISTERS; + th->context.Dr0 = dr[0]; + th->context.Dr1 = dr[1]; + th->context.Dr2 = dr[2]; + th->context.Dr3 = dr[3]; + th->context.Dr6 = DR6_CLEAR_VALUE; + th->context.Dr7 = dr[7]; + } + if (th->context.ContextFlags) { - BOOL status = SetThreadContext (th->h, &th->context); + DWORD ec = 0; + + if (GetExitCodeThread (th->h, &ec) + && ec == STILL_ACTIVE) + { + BOOL status = SetThreadContext (th->h, &th->context); - if (!killed) - CHECK (status); + if (!killed) + CHECK (status); + } + th->context.ContextFlags = 0; } - th->context.ContextFlags = 0; } - if (th->suspended > 0) - (void) ResumeThread (th->h); - th->suspended = 0; + th->resume (); + } + else + { + /* When single-stepping a specific thread, other threads must + be suspended. */ + th->suspend (); } - res = ContinueDebugEvent (current_event.dwProcessId, - current_event.dwThreadId, - continue_status); + res = continue_last_debug_event (continue_status, debug_events); if (!res) error (_("Failed to resume program execution" @@ -1389,12 +1372,11 @@ (unsigned) GetLastError ()); /* We can not debug anything in that case. */ } - current_thread - = windows_add_thread (ptid_t (current_event.dwProcessId, 0, - current_event.dwThreadId), - current_event.u.CreateThread.hThread, - current_event.u.CreateThread.lpThreadLocalBase, - true /* main_thread_p */); + windows_add_thread (ptid_t (current_event.dwProcessId, 0, + current_event.dwThreadId), + current_event.u.CreateThread.hThread, + current_event.u.CreateThread.lpThreadLocalBase, + true /* main_thread_p */); return current_event.dwThreadId; } @@ -1448,34 +1430,65 @@ last_sig = GDB_SIGNAL_0; DEBUG_EXEC (("gdb: windows_resume (pid=%d, tid=0x%x, step=%d, sig=%d);\n", - ptid.pid (), (unsigned) ptid.tid (), step, sig)); + ptid.pid (), (unsigned) ptid.lwp (), step, sig)); /* Get context for currently selected thread. */ - th = thread_rec (inferior_ptid.tid (), FALSE); + th = thread_rec (inferior_ptid, DONT_INVALIDATE_CONTEXT); if (th) { - if (step) +#ifdef __x86_64__ + if (wow64_process) { - /* Single step by setting t bit. */ - struct regcache *regcache = get_current_regcache (); - struct gdbarch *gdbarch = regcache->arch (); - fetch_registers (regcache, gdbarch_ps_regnum (gdbarch)); - th->context.EFlags |= FLAG_TRACE_BIT; - } + if (step) + { + /* Single step by setting t bit. */ + struct regcache *regcache = get_current_regcache (); + struct gdbarch *gdbarch = regcache->arch (); + fetch_registers (regcache, gdbarch_ps_regnum (gdbarch)); + th->wow64_context.EFlags |= FLAG_TRACE_BIT; + } - if (th->context.ContextFlags) + if (th->wow64_context.ContextFlags) + { + if (debug_registers_changed) + { + th->wow64_context.Dr0 = dr[0]; + th->wow64_context.Dr1 = dr[1]; + th->wow64_context.Dr2 = dr[2]; + th->wow64_context.Dr3 = dr[3]; + th->wow64_context.Dr6 = DR6_CLEAR_VALUE; + th->wow64_context.Dr7 = dr[7]; + } + CHECK (Wow64SetThreadContext (th->h, &th->wow64_context)); + th->wow64_context.ContextFlags = 0; + } + } + else +#endif { - if (debug_registers_changed) + if (step) { - th->context.Dr0 = dr[0]; - th->context.Dr1 = dr[1]; - th->context.Dr2 = dr[2]; - th->context.Dr3 = dr[3]; - th->context.Dr6 = DR6_CLEAR_VALUE; - th->context.Dr7 = dr[7]; + /* Single step by setting t bit. */ + struct regcache *regcache = get_current_regcache (); + struct gdbarch *gdbarch = regcache->arch (); + fetch_registers (regcache, gdbarch_ps_regnum (gdbarch)); + th->context.EFlags |= FLAG_TRACE_BIT; + } + + if (th->context.ContextFlags) + { + if (debug_registers_changed) + { + th->context.Dr0 = dr[0]; + th->context.Dr1 = dr[1]; + th->context.Dr2 = dr[2]; + th->context.Dr3 = dr[3]; + th->context.Dr6 = DR6_CLEAR_VALUE; + th->context.Dr7 = dr[7]; + } + CHECK (SetThreadContext (th->h, &th->context)); + th->context.ContextFlags = 0; } - CHECK (SetThreadContext (th->h, &th->context)); - th->context.ContextFlags = 0; } } @@ -1485,7 +1498,7 @@ if (resume_all) windows_continue (continue_status, -1, 0); else - windows_continue (continue_status, ptid.tid (), 0); + windows_continue (continue_status, ptid.lwp (), 0); } /* Ctrl-C handler used when the inferior is not run in the same console. The @@ -1516,27 +1529,40 @@ /* Get the next event from the child. Returns a non-zero thread id if the event requires handling by WFI (or whatever). */ -static int -get_windows_debug_event (struct target_ops *ops, - int pid, struct target_waitstatus *ourstatus) + +int +windows_nat_target::get_windows_debug_event (int pid, + struct target_waitstatus *ourstatus) { BOOL debug_event; DWORD continue_status, event_code; - windows_thread_info *th; - static windows_thread_info dummy_thread_info; DWORD thread_id = 0; + /* If there is a relevant pending stop, report it now. See the + comment by the definition of "pending_stops" for details on why + this is needed. */ + gdb::optional<pending_stop> stop = fetch_pending_stop (debug_events); + if (stop.has_value ()) + { + thread_id = stop->thread_id; + *ourstatus = stop->status; + + ptid_t ptid (current_event.dwProcessId, thread_id); + windows_thread_info *th = thread_rec (ptid, INVALIDATE_CONTEXT); + th->reload_context = 1; + + return thread_id; + } + last_sig = GDB_SIGNAL_0; - if (!(debug_event = WaitForDebugEvent (¤t_event, 1000))) + if (!(debug_event = wait_for_debug_event (¤t_event, 1000))) goto out; - event_count++; continue_status = DBG_CONTINUE; event_code = current_event.dwDebugEventCode; ourstatus->kind = TARGET_WAITKIND_SPURIOUS; - th = NULL; have_saved_context = 0; switch (event_code) @@ -1548,8 +1574,7 @@ "CREATE_THREAD_DEBUG_EVENT")); if (saw_create != 1) { - struct inferior *inf; - inf = find_inferior_pid (current_event.dwProcessId); + inferior *inf = find_inferior_pid (this, current_event.dwProcessId); if (!saw_create && inf->attach_flag) { /* Kludge around a Windows bug where first event is a create @@ -1563,8 +1588,8 @@ } /* Record the existence of this thread. */ thread_id = current_event.dwThreadId; - th = windows_add_thread - (ptid_t (current_event.dwProcessId, 0, current_event.dwThreadId), + windows_add_thread + (ptid_t (current_event.dwProcessId, current_event.dwThreadId, 0), current_event.u.CreateThread.hThread, current_event.u.CreateThread.lpThreadLocalBase, false /* main_thread_p */); @@ -1576,11 +1601,10 @@ (unsigned) current_event.dwProcessId, (unsigned) current_event.dwThreadId, "EXIT_THREAD_DEBUG_EVENT")); - windows_delete_thread (ptid_t (current_event.dwProcessId, 0, - current_event.dwThreadId), + windows_delete_thread (ptid_t (current_event.dwProcessId, + current_event.dwThreadId, 0), current_event.u.ExitThread.dwExitCode, false /* main_thread_p */); - th = &dummy_thread_info; break; case CREATE_PROCESS_DEBUG_EVENT: @@ -1594,9 +1618,9 @@ current_process_handle = current_event.u.CreateProcessInfo.hProcess; /* Add the main thread. */ - th = windows_add_thread - (ptid_t (current_event.dwProcessId, 0, - current_event.dwThreadId), + windows_add_thread + (ptid_t (current_event.dwProcessId, + current_event.dwThreadId, 0), current_event.u.CreateProcessInfo.hThread, current_event.u.CreateProcessInfo.lpThreadLocalBase, true /* main_thread_p */); @@ -1617,11 +1641,26 @@ } else if (saw_create == 1) { - windows_delete_thread (ptid_t (current_event.dwProcessId, 0, - current_event.dwThreadId), + windows_delete_thread (ptid_t (current_event.dwProcessId, + current_event.dwThreadId, 0), 0, true /* main_thread_p */); - ourstatus->kind = TARGET_WAITKIND_EXITED; - ourstatus->value.integer = current_event.u.ExitProcess.dwExitCode; + DWORD exit_status = current_event.u.ExitProcess.dwExitCode; + /* If the exit status looks like a fatal exception, but we + don't recognize the exception's code, make the original + exit status value available, to avoid losing + information. */ + int exit_signal + = WIFSIGNALED (exit_status) ? WTERMSIG (exit_status) : -1; + if (exit_signal == -1) + { + ourstatus->kind = TARGET_WAITKIND_EXITED; + ourstatus->value.integer = exit_status; + } + else + { + ourstatus->kind = TARGET_WAITKIND_SIGNALLED; + ourstatus->value.sig = gdb_signal_from_host (exit_signal); + } thread_id = current_event.dwThreadId; } break; @@ -1660,7 +1699,7 @@ "EXCEPTION_DEBUG_EVENT")); if (saw_create != 1) break; - switch (handle_exception (ourstatus)) + switch (handle_exception (ourstatus, debug_exceptions)) { case HANDLE_EXCEPTION_UNHANDLED: default: @@ -1698,14 +1737,31 @@ if (!thread_id || saw_create != 1) { - CHECK (windows_continue (continue_status, -1, 0)); + CHECK (windows_continue (continue_status, desired_stop_thread_id, 0)); } - else + else if (desired_stop_thread_id != -1 && desired_stop_thread_id != thread_id) { - inferior_ptid = ptid_t (current_event.dwProcessId, 0, thread_id); - current_thread = th; - if (!current_thread) - current_thread = thread_rec (thread_id, TRUE); + /* Pending stop. See the comment by the definition of + "pending_stops" for details on why this is needed. */ + DEBUG_EVENTS (("get_windows_debug_event - " + "unexpected stop in 0x%x (expecting 0x%x)\n", + thread_id, desired_stop_thread_id)); + + if (current_event.dwDebugEventCode == EXCEPTION_DEBUG_EVENT + && ((current_event.u.Exception.ExceptionRecord.ExceptionCode + == EXCEPTION_BREAKPOINT) + || (current_event.u.Exception.ExceptionRecord.ExceptionCode + == STATUS_WX86_BREAKPOINT)) + && windows_initialization_done) + { + ptid_t ptid = ptid_t (current_event.dwProcessId, thread_id, 0); + windows_thread_info *th = thread_rec (ptid, INVALIDATE_CONTEXT); + th->stopped_at_software_breakpoint = true; + th->pc_adjusted = false; + } + pending_stops.push_back ({thread_id, *ourstatus, current_event}); + thread_id = 0; + CHECK (windows_continue (continue_status, desired_stop_thread_id, 0)); } out: @@ -1756,11 +1812,36 @@ the user tries to resume the execution in the inferior. This is a classic race that we should try to fix one day. */ SetConsoleCtrlHandler (&ctrl_c_handler, TRUE); - retval = get_windows_debug_event (this, pid, ourstatus); + retval = get_windows_debug_event (pid, ourstatus); SetConsoleCtrlHandler (&ctrl_c_handler, FALSE); if (retval) - return ptid_t (current_event.dwProcessId, 0, retval); + { + ptid_t result = ptid_t (current_event.dwProcessId, retval, 0); + + if (ourstatus->kind != TARGET_WAITKIND_EXITED + && ourstatus->kind != TARGET_WAITKIND_SIGNALLED) + { + windows_thread_info *th = thread_rec (result, INVALIDATE_CONTEXT); + + if (th != nullptr) + { + th->stopped_at_software_breakpoint = false; + if (current_event.dwDebugEventCode == EXCEPTION_DEBUG_EVENT + && ((current_event.u.Exception.ExceptionRecord.ExceptionCode + == EXCEPTION_BREAKPOINT) + || (current_event.u.Exception.ExceptionRecord.ExceptionCode + == STATUS_WX86_BREAKPOINT)) + && windows_initialization_done) + { + th->stopped_at_software_breakpoint = true; + th->pc_adjusted = false; + } + } + } + + return result; + } else { int detach = 0; @@ -1785,28 +1866,82 @@ HMODULE *hmodules; int i; - if (EnumProcessModules (current_process_handle, &dummy_hmodule, - sizeof (HMODULE), &cb_needed) == 0) - return; +#ifdef __x86_64__ + if (wow64_process) + { + if (EnumProcessModulesEx (current_process_handle, &dummy_hmodule, + sizeof (HMODULE), &cb_needed, + LIST_MODULES_32BIT) == 0) + return; + } + else +#endif + { + if (EnumProcessModules (current_process_handle, &dummy_hmodule, + sizeof (HMODULE), &cb_needed) == 0) + return; + } if (cb_needed < 1) return; hmodules = (HMODULE *) alloca (cb_needed); - if (EnumProcessModules (current_process_handle, hmodules, - cb_needed, &cb_needed) == 0) - return; +#ifdef __x86_64__ + if (wow64_process) + { + if (EnumProcessModulesEx (current_process_handle, hmodules, + cb_needed, &cb_needed, + LIST_MODULES_32BIT) == 0) + return; + } + else +#endif + { + if (EnumProcessModules (current_process_handle, hmodules, + cb_needed, &cb_needed) == 0) + return; + } + + char system_dir[__PMAX]; + char syswow_dir[__PMAX]; + size_t system_dir_len = 0; + bool convert_syswow_dir = false; +#ifdef __x86_64__ + if (wow64_process) +#endif + { + /* This fails on 32bit Windows because it has no SysWOW64 directory, + and in this case a path conversion isn't necessary. */ + UINT len = GetSystemWow64DirectoryA (syswow_dir, sizeof (syswow_dir)); + if (len > 0) + { + /* Check that we have passed a large enough buffer. */ + gdb_assert (len < sizeof (syswow_dir)); + + len = GetSystemDirectoryA (system_dir, sizeof (system_dir)); + /* Error check. */ + gdb_assert (len != 0); + /* Check that we have passed a large enough buffer. */ + gdb_assert (len < sizeof (system_dir)); + strcat (system_dir, "\\"); + strcat (syswow_dir, "\\"); + system_dir_len = strlen (system_dir); + + convert_syswow_dir = true; + } + + } for (i = 1; i < (int) (cb_needed / sizeof (HMODULE)); i++) { MODULEINFO mi; #ifdef __USEWIDE wchar_t dll_name[__PMAX]; - char name[__PMAX]; + char dll_name_mb[__PMAX]; #else char dll_name[__PMAX]; - char *name; #endif + const char *name; if (GetModuleInformation (current_process_handle, hmodules[i], &mi, sizeof (mi)) == 0) continue; @@ -1814,25 +1949,36 @@ dll_name, sizeof (dll_name)) == 0) continue; #ifdef __USEWIDE - wcstombs (name, dll_name, __PMAX); + wcstombs (dll_name_mb, dll_name, __PMAX); + name = dll_name_mb; #else name = dll_name; #endif + /* Convert the DLL path of 32bit processes returned by + GetModuleFileNameEx from the 64bit system directory to the + 32bit syswow64 directory if necessary. */ + std::string syswow_dll_path; + if (convert_syswow_dir + && strncasecmp (name, system_dir, system_dir_len) == 0 + && strchr (name + system_dir_len, '\\') == nullptr) + { + syswow_dll_path = syswow_dir; + syswow_dll_path += name + system_dir_len; + name = syswow_dll_path.c_str(); + } solib_end->next = windows_make_so (name, mi.lpBaseOfDll); solib_end = solib_end->next; } } -static void -do_initial_windows_stuff (struct target_ops *ops, DWORD pid, int attaching) +void +windows_nat_target::do_initial_windows_stuff (DWORD pid, bool attaching) { int i; struct inferior *inf; last_sig = GDB_SIGNAL_0; - event_count = 0; - exception_count = 0; open_process_used = 0; debug_registers_changed = 0; debug_registers_used = 0; @@ -1843,33 +1989,44 @@ #endif current_event.dwProcessId = pid; memset (¤t_event, 0, sizeof (current_event)); - if (!target_is_pushed (ops)) - push_target (ops); + if (!target_is_pushed (this)) + push_target (this); disable_breakpoints_in_shlibs (); windows_clear_solib (); clear_proceed_status (0); init_wait_for_inferior (); +#ifdef __x86_64__ + ignore_first_breakpoint = !attaching && wow64_process; + + if (!wow64_process) + { + windows_set_context_register_offsets (amd64_mappings); + windows_set_segment_register_p (amd64_windows_segment_register_p); + } + else +#endif + { + windows_set_context_register_offsets (i386_mappings); + windows_set_segment_register_p (i386_windows_segment_register_p); + } + inf = current_inferior (); inferior_appeared (inf, pid); inf->attach_flag = attaching; - /* Make the new process the current inferior, so terminal handling - can rely on it. When attaching, we don't know about any thread - id here, but that's OK --- nothing should be referencing the - current thread until we report an event out of windows_wait. */ - inferior_ptid = ptid_t (pid); - target_terminal::init (); target_terminal::inferior (); windows_initialization_done = 0; + ptid_t last_ptid; + while (1) { struct target_waitstatus status; - ops->wait (minus_one_ptid, &status, 0); + last_ptid = this->wait (minus_one_ptid, &status, 0); /* Note windows_wait returns TARGET_WAITKIND_SPURIOUS for thread events. */ @@ -1877,9 +2034,11 @@ && status.kind != TARGET_WAITKIND_SPURIOUS) break; - ops->resume (minus_one_ptid, 0, GDB_SIGNAL_0); + this->resume (minus_one_ptid, 0, GDB_SIGNAL_0); } + switch_to_thread (find_thread_ptid (this, last_ptid)); + /* Now that the inferior has been started and all DLLs have been mapped, we can iterate over all DLLs and load them in. @@ -1990,7 +2149,7 @@ if (from_tty) { - char *exec_file = (char *) get_exec_file (0); + const char *exec_file = get_exec_file (0); if (exec_file) printf_unfiltered ("Attaching to program `%s', %s\n", exec_file, @@ -2000,7 +2159,18 @@ target_pid_to_str (ptid_t (pid)).c_str ()); } - do_initial_windows_stuff (this, pid, 1); +#ifdef __x86_64__ + HANDLE h = OpenProcess (PROCESS_QUERY_INFORMATION, FALSE, pid); + if (h != NULL) + { + BOOL wow64; + if (IsWow64Process (h, &wow64)) + wow64_process = wow64; + CloseHandle (h); + } +#endif + + do_initial_windows_stuff (pid, 1); target_terminal::ours (); } @@ -2030,7 +2200,7 @@ } x86_cleanup_dregs (); - inferior_ptid = null_ptid; + switch_to_no_thread (); detach_inferior (inf); maybe_unpush_target (); @@ -2054,9 +2224,21 @@ DWORD cbNeeded; cbNeeded = 0; - if (!EnumProcessModules (current_process_handle, &dh_buf, - sizeof (HMODULE), &cbNeeded) || !cbNeeded) - return 0; +#ifdef __x86_64__ + if (wow64_process) + { + if (!EnumProcessModulesEx (current_process_handle, &dh_buf, + sizeof (HMODULE), &cbNeeded, + LIST_MODULES_32BIT) || !cbNeeded) + return 0; + } + else +#endif + { + if (!EnumProcessModules (current_process_handle, &dh_buf, + sizeof (HMODULE), &cbNeeded) || !cbNeeded) + return 0; + } /* We know the executable is always first in the list of modules, which we just fetched. So no need to fetch more. */ @@ -2545,7 +2727,7 @@ PROCESS_INFORMATION pi; BOOL ret; DWORD flags = 0; - const char *inferior_io_terminal = get_inferior_io_terminal (); + const char *inferior_tty = current_inferior ()->tty (); if (!exec_file) error (_("No executable specified, use `target exec'.")); @@ -2644,14 +2826,14 @@ w32_env = NULL; } - if (!inferior_io_terminal) + if (inferior_tty == nullptr) tty = ostdin = ostdout = ostderr = -1; else { - tty = open (inferior_io_terminal, O_RDWR | O_NOCTTY); + tty = open (inferior_tty, O_RDWR | O_NOCTTY); if (tty < 0) { - print_sys_errmsg (inferior_io_terminal, errno); + print_sys_errmsg (inferior_tty, errno); ostdin = ostdout = ostderr = -1; } else @@ -2716,19 +2898,19 @@ allargs_len = strlen (allargs_copy); } /* If not all the standard streams are redirected by the command - line, use inferior_io_terminal for those which aren't. */ - if (inferior_io_terminal + line, use INFERIOR_TTY for those which aren't. */ + if (inferior_tty != nullptr && !(fd_inp >= 0 && fd_out >= 0 && fd_err >= 0)) { SECURITY_ATTRIBUTES sa; sa.nLength = sizeof(sa); sa.lpSecurityDescriptor = 0; sa.bInheritHandle = TRUE; - tty = CreateFileA (inferior_io_terminal, GENERIC_READ | GENERIC_WRITE, + tty = CreateFileA (inferior_tty, GENERIC_READ | GENERIC_WRITE, 0, &sa, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); if (tty == INVALID_HANDLE_VALUE) warning (_("Warning: Failed to open TTY %s, error %#x."), - inferior_io_terminal, (unsigned) GetLastError ()); + inferior_tty, (unsigned) GetLastError ()); } if (redirected || tty != INVALID_HANDLE_VALUE) { @@ -2814,6 +2996,12 @@ error (_("Error creating process %s, (error %u)."), exec_file, (unsigned) GetLastError ()); +#ifdef __x86_64__ + BOOL wow64; + if (IsWow64Process (pi.hProcess, &wow64)) + wow64_process = wow64; +#endif + CloseHandle (pi.hThread); CloseHandle (pi.hProcess); @@ -2822,7 +3010,7 @@ else saw_create = 0; - do_initial_windows_stuff (this, pi.dwProcessId, 0); + do_initial_windows_stuff (pi.dwProcessId, 0); /* windows_continue (DBG_CONTINUE, -1, 0); */ } @@ -2837,6 +3025,7 @@ CHECK (CloseHandle (current_process_handle)); open_process_used = 0; } + siginfo_er.ExceptionCode = 0; inf_child_target::mourn_inferior (); } @@ -2900,7 +3089,7 @@ { if (!windows_continue (DBG_CONTINUE, -1, 1)) break; - if (!WaitForDebugEvent (¤t_event, INFINITE)) + if (!wait_for_debug_event (¤t_event, INFINITE)) break; if (current_event.dwDebugEventCode == EXIT_PROCESS_DEBUG_EVENT) break; @@ -2920,8 +3109,8 @@ std::string windows_nat_target::pid_to_str (ptid_t ptid) { - if (ptid.tid () != 0) - return string_printf ("Thread %d.0x%lx", ptid.pid (), ptid.tid ()); + if (ptid.lwp () != 0) + return string_printf ("Thread %d.0x%lx", ptid.pid (), ptid.lwp ()); return normal_pid_to_str (ptid); } @@ -2949,6 +3138,7 @@ windows_xfer_shared_library (so->so_name, (CORE_ADDR) (uintptr_t) li->load_addr, + &li->text_offset, target_gdbarch (), &obstack); } obstack_grow_str0 (&obstack, "</library-list>\n"); @@ -2969,6 +3159,51 @@ return len != 0 ? TARGET_XFER_OK : TARGET_XFER_EOF; } +/* Helper for windows_nat_target::xfer_partial that handles signal info. */ + +static enum target_xfer_status +windows_xfer_siginfo (gdb_byte *readbuf, ULONGEST offset, ULONGEST len, + ULONGEST *xfered_len) +{ + char *buf = (char *) &siginfo_er; + size_t bufsize = sizeof (siginfo_er); + +#ifdef __x86_64__ + EXCEPTION_RECORD32 er32; + if (wow64_process) + { + buf = (char *) &er32; + bufsize = sizeof (er32); + + er32.ExceptionCode = siginfo_er.ExceptionCode; + er32.ExceptionFlags = siginfo_er.ExceptionFlags; + er32.ExceptionRecord = (uintptr_t) siginfo_er.ExceptionRecord; + er32.ExceptionAddress = (uintptr_t) siginfo_er.ExceptionAddress; + er32.NumberParameters = siginfo_er.NumberParameters; + int i; + for (i = 0; i < EXCEPTION_MAXIMUM_PARAMETERS; i++) + er32.ExceptionInformation[i] = siginfo_er.ExceptionInformation[i]; + } +#endif + + if (siginfo_er.ExceptionCode == 0) + return TARGET_XFER_E_IO; + + if (readbuf == nullptr) + return TARGET_XFER_E_IO; + + if (offset > bufsize) + return TARGET_XFER_E_IO; + + if (offset + len > bufsize) + len = bufsize - offset; + + memcpy (readbuf, buf + offset, len); + *xfered_len = len; + + return TARGET_XFER_OK; +} + enum target_xfer_status windows_nat_target::xfer_partial (enum target_object object, const char *annex, gdb_byte *readbuf, @@ -2984,6 +3219,9 @@ return windows_xfer_shared_libraries (this, object, annex, readbuf, writebuf, offset, len, xfered_len); + case TARGET_OBJECT_SIGNAL_INFO: + return windows_xfer_siginfo (readbuf, offset, len, xfered_len); + default: if (beneath () == NULL) { @@ -3006,7 +3244,7 @@ { windows_thread_info *th; - th = thread_rec (ptid.tid (), 0); + th = thread_rec (ptid, DONT_INVALIDATE_CONTEXT); if (th == NULL) return false; @@ -3019,7 +3257,7 @@ ptid_t windows_nat_target::get_ada_task_ptid (long lwp, long thread) { - return ptid_t (inferior_ptid.pid (), 0, lwp); + return ptid_t (inferior_ptid.pid (), lwp, 0); } /* Implementation of the to_thread_name method. */ @@ -3027,12 +3265,13 @@ const char * windows_nat_target::thread_name (struct thread_info *thr) { - return thread_rec (thr->ptid.tid (), 0)->name; + return thread_rec (thr->ptid, DONT_INVALIDATE_CONTEXT)->name.get (); } +void _initialize_windows_nat (); void -_initialize_windows_nat (void) +_initialize_windows_nat () { x86_dr_low.set_control = cygwin_set_dr7; x86_dr_low.set_addr = cygwin_set_dr; @@ -3185,16 +3424,15 @@ bool windows_nat_target::thread_alive (ptid_t ptid) { - int tid; - - gdb_assert (ptid.tid () != 0); - tid = ptid.tid (); + gdb_assert (ptid.lwp () != 0); - return WaitForSingleObject (thread_rec (tid, FALSE)->h, 0) != WAIT_OBJECT_0; + return (WaitForSingleObject (thread_rec (ptid, DONT_INVALIDATE_CONTEXT)->h, 0) + != WAIT_OBJECT_0); } +void _initialize_check_for_gdb_ini (); void -_initialize_check_for_gdb_ini (void) +_initialize_check_for_gdb_ini () { char *homedir; if (inhibit_gdbinit) @@ -3290,8 +3528,9 @@ /* Load any functions which may not be available in ancient versions of Windows. */ +void _initialize_loadable (); void -_initialize_loadable (void) +_initialize_loadable () { HMODULE hm = NULL; @@ -3307,6 +3546,12 @@ GPA (hm, GetConsoleFontSize); GPA (hm, DebugActiveProcessStop); GPA (hm, GetCurrentConsoleFont); +#ifdef __x86_64__ + GPA (hm, Wow64SuspendThread); + GPA (hm, Wow64GetThreadContext); + GPA (hm, Wow64SetThreadContext); + GPA (hm, Wow64GetThreadSelectorEntry); +#endif } /* Set variables to dummy versions of these processes if the function @@ -3329,6 +3574,9 @@ if (hm) { GPA (hm, EnumProcessModules); +#ifdef __x86_64__ + GPA (hm, EnumProcessModulesEx); +#endif GPA (hm, GetModuleInformation); GetModuleFileNameEx = (GetModuleFileNameEx_ftype *) GetProcAddress (hm, GetModuleFileNameEx_name); diff -Nru gdb-9.1/gdb/windows-nat.h gdb-10.2/gdb/windows-nat.h --- gdb-9.1/gdb/windows-nat.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/windows-nat.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2008-2020 Free Software Foundation, Inc. +/* Copyright (C) 2008-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -18,15 +18,23 @@ #ifndef WINDOWS_NAT_H #define WINDOWS_NAT_H -extern void windows_set_context_register_offsets (const int *offsets); - /* A pointer to a function that should return non-zero iff REGNUM corresponds to one of the segment registers. */ typedef int (segment_register_p_ftype) (int regnum); -/* Set the function that should be used by this module to determine - whether a given register is a segment register or not. */ -extern void windows_set_segment_register_p (segment_register_p_ftype *fun); +/* segment_register_p_ftype implementation for x86. */ +int i386_windows_segment_register_p (int regnum); + +/* context register offests for x86. */ +extern const int i386_mappings[]; + +#ifdef __x86_64__ +/* segment_register_p_ftype implementation for amd64. */ +int amd64_windows_segment_register_p (int regnum); + +/* context register offests for amd64. */ +extern const int amd64_mappings[]; +#endif #endif diff -Nru gdb-9.1/gdb/windows-tdep.c gdb-10.2/gdb/windows-tdep.c --- gdb-9.1/gdb/windows-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/windows-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2008-2020 Free Software Foundation, Inc. +/* Copyright (C) 2008-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -34,6 +34,76 @@ #include "solib.h" #include "solib-target.h" #include "gdbcore.h" +#include "coff/internal.h" +#include "libcoff.h" +#include "solist.h" + +#define CYGWIN_DLL_NAME "cygwin1.dll" + +/* Windows signal numbers differ between MinGW flavors and between + those and Cygwin. The below enumerations were gleaned from the + respective headers. */ + +/* Signal numbers for the various MinGW flavors. The ones marked with + MinGW-w64 are defined by MinGW-w64, not by mingw.org's MinGW. */ + +enum +{ + WINDOWS_SIGHUP = 1, /* MinGW-w64 */ + WINDOWS_SIGINT = 2, + WINDOWS_SIGQUIT = 3, /* MinGW-w64 */ + WINDOWS_SIGILL = 4, + WINDOWS_SIGTRAP = 5, /* MinGW-w64 */ + WINDOWS_SIGIOT = 6, /* MinGW-w64 */ + WINDOWS_SIGEMT = 7, /* MinGW-w64 */ + WINDOWS_SIGFPE = 8, + WINDOWS_SIGKILL = 9, /* MinGW-w64 */ + WINDOWS_SIGBUS = 10, /* MinGW-w64 */ + WINDOWS_SIGSEGV = 11, + WINDOWS_SIGSYS = 12, /* MinGW-w64 */ + WINDOWS_SIGPIPE = 13, /* MinGW-w64 */ + WINDOWS_SIGALRM = 14, /* MinGW-w64 */ + WINDOWS_SIGTERM = 15, + WINDOWS_SIGBREAK = 21, + WINDOWS_SIGABRT = 22, +}; + +/* Signal numbers for Cygwin. */ + +enum +{ + CYGWIN_SIGHUP = 1, + CYGWIN_SIGINT = 2, + CYGWIN_SIGQUIT = 3, + CYGWIN_SIGILL = 4, + CYGWIN_SIGTRAP = 5, + CYGWIN_SIGABRT = 6, + CYGWIN_SIGEMT = 7, + CYGWIN_SIGFPE = 8, + CYGWIN_SIGKILL = 9, + CYGWIN_SIGBUS = 10, + CYGWIN_SIGSEGV = 11, + CYGWIN_SIGSYS = 12, + CYGWIN_SIGPIPE = 13, + CYGWIN_SIGALRM = 14, + CYGWIN_SIGTERM = 15, + CYGWIN_SIGURG = 16, + CYGWIN_SIGSTOP = 17, + CYGWIN_SIGTSTP = 18, + CYGWIN_SIGCONT = 19, + CYGWIN_SIGCHLD = 20, + CYGWIN_SIGTTIN = 21, + CYGWIN_SIGTTOU = 22, + CYGWIN_SIGIO = 23, + CYGWIN_SIGXCPU = 24, + CYGWIN_SIGXFSZ = 25, + CYGWIN_SIGVTALRM = 26, + CYGWIN_SIGPROF = 27, + CYGWIN_SIGWINCH = 28, + CYGWIN_SIGLOST = 29, + CYGWIN_SIGUSR1 = 30, + CYGWIN_SIGUSR2 = 31, +}; struct cmd_list_element *info_w32_cmdlist; @@ -102,33 +172,65 @@ static bool maint_display_all_tib = false; +static struct gdbarch_data *windows_gdbarch_data_handle; + +struct windows_gdbarch_data +{ + struct type *siginfo_type; + struct type *tib_ptr_type; /* Type of thread information block */ +}; + +/* Allocate windows_gdbarch_data for an arch. */ + +static void * +init_windows_gdbarch_data (struct gdbarch *gdbarch) +{ + return GDBARCH_OBSTACK_ZALLOC (gdbarch, struct windows_gdbarch_data); +} + +/* Get windows_gdbarch_data of an arch. */ + +static struct windows_gdbarch_data * +get_windows_gdbarch_data (struct gdbarch *gdbarch) +{ + return ((struct windows_gdbarch_data *) + gdbarch_data (gdbarch, windows_gdbarch_data_handle)); +} + /* Define Thread Local Base pointer type. */ static struct type * windows_get_tlb_type (struct gdbarch *gdbarch) { - static struct gdbarch *last_gdbarch = NULL; - static struct type *last_tlb_type = NULL; struct type *dword_ptr_type, *dword32_type, *void_ptr_type; struct type *peb_ldr_type, *peb_ldr_ptr_type; struct type *peb_type, *peb_ptr_type, *list_type; struct type *module_list_ptr_type; struct type *tib_type, *seh_type, *tib_ptr_type, *seh_ptr_type; + struct type *word_type, *wchar_type, *wchar_ptr_type; + struct type *uni_str_type, *rupp_type, *rupp_ptr_type; + + windows_gdbarch_data *windows_gdbarch_data + = get_windows_gdbarch_data (gdbarch); + if (windows_gdbarch_data->tib_ptr_type != nullptr) + return windows_gdbarch_data->tib_ptr_type; - /* Do not rebuild type if same gdbarch as last time. */ - if (last_tlb_type && last_gdbarch == gdbarch) - return last_tlb_type; - dword_ptr_type = arch_integer_type (gdbarch, gdbarch_ptr_bit (gdbarch), 1, "DWORD_PTR"); dword32_type = arch_integer_type (gdbarch, 32, 1, "DWORD32"); + word_type = arch_integer_type (gdbarch, 16, + 1, "WORD"); + wchar_type = arch_integer_type (gdbarch, 16, + 1, "wchar_t"); void_ptr_type = lookup_pointer_type (builtin_type (gdbarch)->builtin_void); + wchar_ptr_type = arch_pointer_type (gdbarch, gdbarch_ptr_bit (gdbarch), + NULL, wchar_type); /* list entry */ list_type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT); - TYPE_NAME (list_type) = xstrdup ("list"); + list_type->set_name (xstrdup ("list")); module_list_ptr_type = void_ptr_type; @@ -140,7 +242,7 @@ /* Structured Exception Handler */ seh_type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT); - TYPE_NAME (seh_type) = xstrdup ("seh"); + seh_type->set_name (xstrdup ("seh")); seh_ptr_type = arch_type (gdbarch, TYPE_CODE_PTR, TYPE_LENGTH (void_ptr_type) * TARGET_CHAR_BIT, @@ -153,7 +255,7 @@ /* struct _PEB_LDR_DATA */ peb_ldr_type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT); - TYPE_NAME (peb_ldr_type) = xstrdup ("peb_ldr_data"); + peb_ldr_type->set_name (xstrdup ("peb_ldr_data")); append_composite_type_field (peb_ldr_type, "length", dword32_type); append_composite_type_field (peb_ldr_type, "initialized", dword32_type); @@ -168,17 +270,68 @@ NULL); TYPE_TARGET_TYPE (peb_ldr_ptr_type) = peb_ldr_type; + /* struct UNICODE_STRING */ + uni_str_type = arch_composite_type (gdbarch, "unicode_string", + TYPE_CODE_STRUCT); + + append_composite_type_field (uni_str_type, "length", word_type); + append_composite_type_field (uni_str_type, "maximum_length", word_type); + append_composite_type_field_aligned (uni_str_type, "buffer", + wchar_ptr_type, + TYPE_LENGTH (wchar_ptr_type)); + + /* struct _RTL_USER_PROCESS_PARAMETERS */ + rupp_type = arch_composite_type (gdbarch, "rtl_user_process_parameters", + TYPE_CODE_STRUCT); + + append_composite_type_field (rupp_type, "maximum_length", dword32_type); + append_composite_type_field (rupp_type, "length", dword32_type); + append_composite_type_field (rupp_type, "flags", dword32_type); + append_composite_type_field (rupp_type, "debug_flags", dword32_type); + append_composite_type_field (rupp_type, "console_handle", void_ptr_type); + append_composite_type_field (rupp_type, "console_flags", dword32_type); + append_composite_type_field_aligned (rupp_type, "standard_input", + void_ptr_type, + TYPE_LENGTH (void_ptr_type)); + append_composite_type_field (rupp_type, "standard_output", void_ptr_type); + append_composite_type_field (rupp_type, "standard_error", void_ptr_type); + append_composite_type_field (rupp_type, "current_directory", uni_str_type); + append_composite_type_field (rupp_type, "current_directory_handle", + void_ptr_type); + append_composite_type_field (rupp_type, "dll_path", uni_str_type); + append_composite_type_field (rupp_type, "image_path_name", uni_str_type); + append_composite_type_field (rupp_type, "command_line", uni_str_type); + append_composite_type_field (rupp_type, "environment", void_ptr_type); + append_composite_type_field (rupp_type, "starting_x", dword32_type); + append_composite_type_field (rupp_type, "starting_y", dword32_type); + append_composite_type_field (rupp_type, "count_x", dword32_type); + append_composite_type_field (rupp_type, "count_y", dword32_type); + append_composite_type_field (rupp_type, "count_chars_x", dword32_type); + append_composite_type_field (rupp_type, "count_chars_y", dword32_type); + append_composite_type_field (rupp_type, "fill_attribute", dword32_type); + append_composite_type_field (rupp_type, "window_flags", dword32_type); + append_composite_type_field (rupp_type, "show_window_flags", dword32_type); + append_composite_type_field_aligned (rupp_type, "window_title", + uni_str_type, + TYPE_LENGTH (void_ptr_type)); + append_composite_type_field (rupp_type, "desktop_info", uni_str_type); + append_composite_type_field (rupp_type, "shell_info", uni_str_type); + append_composite_type_field (rupp_type, "runtime_data", uni_str_type); + + rupp_ptr_type = arch_pointer_type (gdbarch, gdbarch_ptr_bit (gdbarch), + NULL, rupp_type); + /* struct process environment block */ peb_type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT); - TYPE_NAME (peb_type) = xstrdup ("peb"); + peb_type->set_name (xstrdup ("peb")); /* First bytes contain several flags. */ append_composite_type_field (peb_type, "flags", dword_ptr_type); append_composite_type_field (peb_type, "mutant", void_ptr_type); append_composite_type_field (peb_type, "image_base_address", void_ptr_type); append_composite_type_field (peb_type, "ldr", peb_ldr_ptr_type); - append_composite_type_field (peb_type, "process_parameters", void_ptr_type); + append_composite_type_field (peb_type, "process_parameters", rupp_ptr_type); append_composite_type_field (peb_type, "sub_system_data", void_ptr_type); append_composite_type_field (peb_type, "process_heap", void_ptr_type); append_composite_type_field (peb_type, "fast_peb_lock", void_ptr_type); @@ -190,7 +343,7 @@ /* struct thread information block */ tib_type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT); - TYPE_NAME (tib_type) = xstrdup ("tib"); + tib_type->set_name (xstrdup ("tib")); /* uint32_t current_seh; %fs:0x0000 */ append_composite_type_field (tib_type, "current_seh", seh_ptr_type); @@ -231,8 +384,7 @@ NULL); TYPE_TARGET_TYPE (tib_ptr_type) = tib_type; - last_tlb_type = tib_ptr_type; - last_gdbarch = gdbarch; + windows_gdbarch_data->tib_ptr_type = tib_ptr_type; return tib_ptr_type; } @@ -373,19 +525,27 @@ void windows_xfer_shared_library (const char* so_name, CORE_ADDR load_addr, + CORE_ADDR *text_offset_cached, struct gdbarch *gdbarch, struct obstack *obstack) { - CORE_ADDR text_offset; + CORE_ADDR text_offset = text_offset_cached ? *text_offset_cached : 0; obstack_grow_str (obstack, "<library name=\""); std::string p = xml_escape_text (so_name); obstack_grow_str (obstack, p.c_str ()); obstack_grow_str (obstack, "\"><segment address=\""); - gdb_bfd_ref_ptr dll (gdb_bfd_open (so_name, gnutarget, -1)); - /* The following calls are OK even if dll is NULL. - The default value 0x1000 is returned by pe_text_section_offset - in that case. */ - text_offset = pe_text_section_offset (dll.get ()); + + if (!text_offset) + { + gdb_bfd_ref_ptr dll (gdb_bfd_open (so_name, gnutarget)); + /* The following calls are OK even if dll is NULL. + The default value 0x1000 is returned by pe_text_section_offset + in that case. */ + text_offset = pe_text_section_offset (dll.get ()); + if (text_offset_cached) + *text_offset_cached = text_offset; + } + obstack_grow_str (obstack, paddress (gdbarch, load_addr + text_offset)); obstack_grow_str (obstack, "\"/></library>"); } @@ -442,11 +602,6 @@ "Thread Information Block is %s.\n"), value); } -static void -info_w32_command (const char *args, int from_tty) -{ - help_list (info_w32_cmdlist, "info w32 ", class_info, gdb_stdout); -} static int w32_prefix_command_valid = 0; void @@ -454,18 +609,320 @@ { if (!w32_prefix_command_valid) { - add_prefix_cmd ("w32", class_info, info_w32_command, - _("Print information specific to Win32 debugging."), - &info_w32_cmdlist, "info w32 ", 0, &infolist); + add_basic_prefix_cmd + ("w32", class_info, + _("Print information specific to Win32 debugging."), + &info_w32_cmdlist, "info w32 ", 0, &infolist); w32_prefix_command_valid = 1; } } -/* To be called from the various GDB_OSABI_CYGWIN handlers for the - various Windows architectures and machine types. */ +/* Implementation of `gdbarch_gdb_signal_to_target' for Windows. */ -void -windows_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) +static int +windows_gdb_signal_to_target (struct gdbarch *gdbarch, enum gdb_signal signal) +{ + switch (signal) + { + case GDB_SIGNAL_0: + return 0; + case GDB_SIGNAL_HUP: + return WINDOWS_SIGHUP; + case GDB_SIGNAL_INT: + return WINDOWS_SIGINT; + case GDB_SIGNAL_QUIT: + return WINDOWS_SIGQUIT; + case GDB_SIGNAL_ILL: + return WINDOWS_SIGILL; + case GDB_SIGNAL_TRAP: + return WINDOWS_SIGTRAP; + case GDB_SIGNAL_ABRT: + return WINDOWS_SIGABRT; + case GDB_SIGNAL_EMT: + return WINDOWS_SIGEMT; + case GDB_SIGNAL_FPE: + return WINDOWS_SIGFPE; + case GDB_SIGNAL_KILL: + return WINDOWS_SIGKILL; + case GDB_SIGNAL_BUS: + return WINDOWS_SIGBUS; + case GDB_SIGNAL_SEGV: + return WINDOWS_SIGSEGV; + case GDB_SIGNAL_SYS: + return WINDOWS_SIGSYS; + case GDB_SIGNAL_PIPE: + return WINDOWS_SIGPIPE; + case GDB_SIGNAL_ALRM: + return WINDOWS_SIGALRM; + case GDB_SIGNAL_TERM: + return WINDOWS_SIGTERM; + } + return -1; +} + +/* Implementation of `gdbarch_gdb_signal_to_target' for Cygwin. */ + +static int +cygwin_gdb_signal_to_target (struct gdbarch *gdbarch, enum gdb_signal signal) +{ + switch (signal) + { + case GDB_SIGNAL_0: + return 0; + case GDB_SIGNAL_HUP: + return CYGWIN_SIGHUP; + case GDB_SIGNAL_INT: + return CYGWIN_SIGINT; + case GDB_SIGNAL_QUIT: + return CYGWIN_SIGQUIT; + case GDB_SIGNAL_ILL: + return CYGWIN_SIGILL; + case GDB_SIGNAL_TRAP: + return CYGWIN_SIGTRAP; + case GDB_SIGNAL_ABRT: + return CYGWIN_SIGABRT; + case GDB_SIGNAL_EMT: + return CYGWIN_SIGEMT; + case GDB_SIGNAL_FPE: + return CYGWIN_SIGFPE; + case GDB_SIGNAL_KILL: + return CYGWIN_SIGKILL; + case GDB_SIGNAL_BUS: + return CYGWIN_SIGBUS; + case GDB_SIGNAL_SEGV: + return CYGWIN_SIGSEGV; + case GDB_SIGNAL_SYS: + return CYGWIN_SIGSYS; + case GDB_SIGNAL_PIPE: + return CYGWIN_SIGPIPE; + case GDB_SIGNAL_ALRM: + return CYGWIN_SIGALRM; + case GDB_SIGNAL_TERM: + return CYGWIN_SIGTERM; + case GDB_SIGNAL_URG: + return CYGWIN_SIGURG; + case GDB_SIGNAL_STOP: + return CYGWIN_SIGSTOP; + case GDB_SIGNAL_TSTP: + return CYGWIN_SIGTSTP; + case GDB_SIGNAL_CONT: + return CYGWIN_SIGCONT; + case GDB_SIGNAL_CHLD: + return CYGWIN_SIGCHLD; + case GDB_SIGNAL_TTIN: + return CYGWIN_SIGTTIN; + case GDB_SIGNAL_TTOU: + return CYGWIN_SIGTTOU; + case GDB_SIGNAL_IO: + return CYGWIN_SIGIO; + case GDB_SIGNAL_XCPU: + return CYGWIN_SIGXCPU; + case GDB_SIGNAL_XFSZ: + return CYGWIN_SIGXFSZ; + case GDB_SIGNAL_VTALRM: + return CYGWIN_SIGVTALRM; + case GDB_SIGNAL_PROF: + return CYGWIN_SIGPROF; + case GDB_SIGNAL_WINCH: + return CYGWIN_SIGWINCH; + case GDB_SIGNAL_PWR: + return CYGWIN_SIGLOST; + case GDB_SIGNAL_USR1: + return CYGWIN_SIGUSR1; + case GDB_SIGNAL_USR2: + return CYGWIN_SIGUSR2; + } + return -1; +} + +struct enum_value_name +{ + uint32_t value; + const char *name; +}; + +/* Allocate a TYPE_CODE_ENUM type structure with its named values. */ + +static struct type * +create_enum (struct gdbarch *gdbarch, int bit, const char *name, + const struct enum_value_name *values, int count) +{ + struct type *type; + int i; + + type = arch_type (gdbarch, TYPE_CODE_ENUM, bit, name); + type->set_num_fields (count); + type->set_fields + ((struct field *) TYPE_ZALLOC (type, sizeof (struct field) * count)); + TYPE_UNSIGNED (type) = 1; + + for (i = 0; i < count; i++) + { + TYPE_FIELD_NAME (type, i) = values[i].name; + SET_FIELD_ENUMVAL (type->field (i), values[i].value); + } + + return type; +} + +static const struct enum_value_name exception_values[] = +{ + { 0x40000015, "FATAL_APP_EXIT" }, + { 0x4000001E, "WX86_SINGLE_STEP" }, + { 0x4000001F, "WX86_BREAKPOINT" }, + { 0x40010005, "DBG_CONTROL_C" }, + { 0x40010008, "DBG_CONTROL_BREAK" }, + { 0x80000002, "DATATYPE_MISALIGNMENT" }, + { 0x80000003, "BREAKPOINT" }, + { 0x80000004, "SINGLE_STEP" }, + { 0xC0000005, "ACCESS_VIOLATION" }, + { 0xC0000006, "IN_PAGE_ERROR" }, + { 0xC000001D, "ILLEGAL_INSTRUCTION" }, + { 0xC0000025, "NONCONTINUABLE_EXCEPTION" }, + { 0xC0000026, "INVALID_DISPOSITION" }, + { 0xC000008C, "ARRAY_BOUNDS_EXCEEDED" }, + { 0xC000008D, "FLOAT_DENORMAL_OPERAND" }, + { 0xC000008E, "FLOAT_DIVIDE_BY_ZERO" }, + { 0xC000008F, "FLOAT_INEXACT_RESULT" }, + { 0xC0000090, "FLOAT_INVALID_OPERATION" }, + { 0xC0000091, "FLOAT_OVERFLOW" }, + { 0xC0000092, "FLOAT_STACK_CHECK" }, + { 0xC0000093, "FLOAT_UNDERFLOW" }, + { 0xC0000094, "INTEGER_DIVIDE_BY_ZERO" }, + { 0xC0000095, "INTEGER_OVERFLOW" }, + { 0xC0000096, "PRIV_INSTRUCTION" }, + { 0xC00000FD, "STACK_OVERFLOW" }, + { 0xC0000409, "FAST_FAIL" }, +}; + +static const struct enum_value_name violation_values[] = +{ + { 0, "READ_ACCESS_VIOLATION" }, + { 1, "WRITE_ACCESS_VIOLATION" }, + { 8, "DATA_EXECUTION_PREVENTION_VIOLATION" }, +}; + +/* Implement the "get_siginfo_type" gdbarch method. */ + +static struct type * +windows_get_siginfo_type (struct gdbarch *gdbarch) +{ + struct windows_gdbarch_data *windows_gdbarch_data; + struct type *dword_type, *pvoid_type, *ulongptr_type; + struct type *code_enum, *violation_enum; + struct type *violation_type, *para_type, *siginfo_ptr_type, *siginfo_type; + + windows_gdbarch_data = get_windows_gdbarch_data (gdbarch); + if (windows_gdbarch_data->siginfo_type != NULL) + return windows_gdbarch_data->siginfo_type; + + dword_type = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch), + 1, "DWORD"); + pvoid_type = arch_pointer_type (gdbarch, gdbarch_ptr_bit (gdbarch), "PVOID", + builtin_type (gdbarch)->builtin_void); + ulongptr_type = arch_integer_type (gdbarch, gdbarch_ptr_bit (gdbarch), + 1, "ULONG_PTR"); + + /* ExceptionCode value names */ + code_enum = create_enum (gdbarch, gdbarch_int_bit (gdbarch), + "ExceptionCode", exception_values, + ARRAY_SIZE (exception_values)); + + /* ACCESS_VIOLATION type names */ + violation_enum = create_enum (gdbarch, gdbarch_ptr_bit (gdbarch), + "ViolationType", violation_values, + ARRAY_SIZE (violation_values)); + + /* ACCESS_VIOLATION information */ + violation_type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT); + append_composite_type_field (violation_type, "Type", violation_enum); + append_composite_type_field (violation_type, "Address", pvoid_type); + + /* Unnamed union of the documented field ExceptionInformation, + and the alternative AccessViolationInformation (which displays + human-readable values for ExceptionCode ACCESS_VIOLATION). */ + para_type = arch_composite_type (gdbarch, NULL, TYPE_CODE_UNION); + append_composite_type_field (para_type, "ExceptionInformation", + lookup_array_range_type (ulongptr_type, 0, 14)); + append_composite_type_field (para_type, "AccessViolationInformation", + violation_type); + + siginfo_type = arch_composite_type (gdbarch, "EXCEPTION_RECORD", + TYPE_CODE_STRUCT); + siginfo_ptr_type = arch_pointer_type (gdbarch, gdbarch_ptr_bit (gdbarch), + NULL, siginfo_type); + + /* ExceptionCode is documented as type DWORD, but here a helper + enum type is used instead to display a human-readable value. */ + append_composite_type_field (siginfo_type, "ExceptionCode", code_enum); + append_composite_type_field (siginfo_type, "ExceptionFlags", dword_type); + append_composite_type_field (siginfo_type, "ExceptionRecord", + siginfo_ptr_type); + append_composite_type_field (siginfo_type, "ExceptionAddress", + pvoid_type); + append_composite_type_field (siginfo_type, "NumberParameters", dword_type); + /* The 64-bit variant needs some padding. */ + append_composite_type_field_aligned (siginfo_type, "", + para_type, TYPE_LENGTH (ulongptr_type)); + + windows_gdbarch_data->siginfo_type = siginfo_type; + + return siginfo_type; +} + +/* Implement the "solib_create_inferior_hook" target_so_ops method. */ + +static void +windows_solib_create_inferior_hook (int from_tty) +{ + CORE_ADDR exec_base = 0; + + /* Find base address of main executable in + TIB->process_environment_block->image_base_address. */ + struct gdbarch *gdbarch = target_gdbarch (); + enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); + int ptr_bytes; + int peb_offset; /* Offset of process_environment_block in TIB. */ + int base_offset; /* Offset of image_base_address in PEB. */ + if (gdbarch_ptr_bit (gdbarch) == 32) + { + ptr_bytes = 4; + peb_offset = 48; + base_offset = 8; + } + else + { + ptr_bytes = 8; + peb_offset = 96; + base_offset = 16; + } + CORE_ADDR tlb; + gdb_byte buf[8]; + if (target_has_execution + && target_get_tib_address (inferior_ptid, &tlb) + && !target_read_memory (tlb + peb_offset, buf, ptr_bytes)) + { + CORE_ADDR peb = extract_unsigned_integer (buf, ptr_bytes, byte_order); + if (!target_read_memory (peb + base_offset, buf, ptr_bytes)) + exec_base = extract_unsigned_integer (buf, ptr_bytes, byte_order); + } + + /* Rebase executable if the base address changed because of ASLR. */ + if (symfile_objfile != nullptr && exec_base != 0) + { + CORE_ADDR vmaddr = pe_data (exec_bfd)->pe_opthdr.ImageBase; + if (vmaddr != exec_base) + objfile_rebase (symfile_objfile, exec_base - vmaddr); + } +} + +static struct target_so_ops windows_so_ops; + +/* Common parts for gdbarch initialization for the Windows and Cygwin OS + ABIs. */ + +static void +windows_init_abi_common (struct gdbarch_info info, struct gdbarch *gdbarch) { set_gdbarch_wchar_bit (gdbarch, 16); set_gdbarch_wchar_signed (gdbarch, 0); @@ -477,7 +934,29 @@ set_gdbarch_iterate_over_objfiles_in_search_order (gdbarch, windows_iterate_over_objfiles_in_search_order); - set_solib_ops (gdbarch, &solib_target_so_ops); + windows_so_ops = solib_target_so_ops; + windows_so_ops.solib_create_inferior_hook + = windows_solib_create_inferior_hook; + set_solib_ops (gdbarch, &windows_so_ops); + + set_gdbarch_get_siginfo_type (gdbarch, windows_get_siginfo_type); +} + +/* See windows-tdep.h. */ +void +windows_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) +{ + windows_init_abi_common (info, gdbarch); + set_gdbarch_gdb_signal_to_target (gdbarch, windows_gdb_signal_to_target); +} + +/* See windows-tdep.h. */ + +void +cygwin_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) +{ + windows_init_abi_common (info, gdbarch); + set_gdbarch_gdb_signal_to_target (gdbarch, cygwin_gdb_signal_to_target); } /* Implementation of `tlb' variable. */ @@ -489,9 +968,133 @@ NULL }; +/* Layout of an element of a PE's Import Directory Table. Based on: + + https://docs.microsoft.com/en-us/windows/win32/debug/pe-format#import-directory-table + */ + +struct pe_import_directory_entry +{ + uint32_t import_lookup_table_rva; + uint32_t timestamp; + uint32_t forwarder_chain; + uint32_t name_rva; + uint32_t import_address_table_rva; +}; + +gdb_static_assert (sizeof (pe_import_directory_entry) == 20); + +/* See windows-tdep.h. */ + +bool +is_linked_with_cygwin_dll (bfd *abfd) +{ + /* The list of DLLs a PE is linked to is in the .idata section. See: + + https://docs.microsoft.com/en-us/windows/win32/debug/pe-format#the-idata-section + */ + asection *idata_section = bfd_get_section_by_name (abfd, ".idata"); + if (idata_section == nullptr) + return false; + + bfd_size_type idata_section_size = bfd_section_size (idata_section); + internal_extra_pe_aouthdr *pe_extra = &pe_data (abfd)->pe_opthdr; + bfd_vma import_table_va = pe_extra->DataDirectory[PE_IMPORT_TABLE].VirtualAddress; + bfd_vma idata_section_va = bfd_section_vma (idata_section); + + /* The section's virtual address as reported by BFD has the image base applied, + remove it. */ + gdb_assert (idata_section_va >= pe_extra->ImageBase); + idata_section_va -= pe_extra->ImageBase; + + bfd_vma idata_section_end_va = idata_section_va + idata_section_size; + + /* Make sure that the import table is indeed within the .idata section's range. */ + if (import_table_va < idata_section_va + || import_table_va >= idata_section_end_va) + { + warning (_("\ +%s: import table's virtual address (0x%" BFD_VMA_FMT "x) is outside .idata \ +section's range [0x%" BFD_VMA_FMT "x, 0x%" BFD_VMA_FMT "x[."), + bfd_get_filename (abfd), import_table_va, idata_section_va, + idata_section_end_va); + return false; + } + + /* The import table starts at this offset into the .idata section. */ + bfd_vma import_table_offset_in_sect = import_table_va - idata_section_va; + + /* Get the section's data. */ + gdb::byte_vector idata_contents; + if (!gdb_bfd_get_full_section_contents (abfd, idata_section, &idata_contents)) + { + warning (_("%s: failed to get contents of .idata section."), + bfd_get_filename (abfd)); + return false; + } + + gdb_assert (idata_contents.size () == idata_section_size); + + const gdb_byte *iter = idata_contents.data () + import_table_offset_in_sect; + const gdb_byte *end = idata_contents.data () + idata_section_size; + const pe_import_directory_entry null_dir_entry = { 0 }; + + /* Iterate through all directory entries. */ + while (true) + { + /* Is there enough space left in the section for another entry? */ + if (iter + sizeof (pe_import_directory_entry) > end) + { + warning (_("%s: unexpected end of .idata section."), + bfd_get_filename (abfd)); + break; + } + + pe_import_directory_entry *dir_entry = (pe_import_directory_entry *) iter; + + /* Is it the end of list marker? */ + if (memcmp (dir_entry, &null_dir_entry, + sizeof (pe_import_directory_entry)) == 0) + break; + + bfd_vma name_va = dir_entry->name_rva; + + /* If the name's virtual address is smaller than the section's virtual + address, there's a problem. */ + if (name_va < idata_section_va || name_va >= idata_section_end_va) + { + warning (_("\ +%s: name's virtual address (0x%" BFD_VMA_FMT "x) is outside .idata section's \ +range [0x%" BFD_VMA_FMT "x, 0x%" BFD_VMA_FMT "x[."), + bfd_get_filename (abfd), name_va, idata_section_va, + idata_section_end_va); + break; + } + + const gdb_byte *name = &idata_contents[name_va - idata_section_va]; + + /* Make sure we don't overshoot the end of the section with the + streq. */ + if (name + sizeof (CYGWIN_DLL_NAME) <= end) + { + /* Finally, check if this is the dll name we are looking for. */ + if (streq ((const char *) name, CYGWIN_DLL_NAME)) + return true; + } + + iter += sizeof (pe_import_directory_entry); + } + + return false; +} + +void _initialize_windows_tdep (); void -_initialize_windows_tdep (void) +_initialize_windows_tdep () { + windows_gdbarch_data_handle + = gdbarch_data_register_post_init (init_windows_gdbarch_data); + init_w32_command_list (); add_cmd ("thread-information-block", class_info, display_tib, _("Display thread information block."), diff -Nru gdb-9.1/gdb/windows-tdep.h gdb-10.2/gdb/windows-tdep.h --- gdb-9.1/gdb/windows-tdep.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/windows-tdep.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2008-2020 Free Software Foundation, Inc. +/* Copyright (C) 2008-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -27,9 +27,25 @@ extern void windows_xfer_shared_library (const char* so_name, CORE_ADDR load_addr, + CORE_ADDR *text_offset_cached, struct gdbarch *gdbarch, struct obstack *obstack); +/* To be called from the various GDB_OSABI_WINDOWS handlers for the + various Windows architectures and machine types. */ + extern void windows_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch); + +/* To be called from the various GDB_OSABI_CYGWIN handlers for the + various Windows architectures and machine types. */ + +extern void cygwin_init_abi (struct gdbarch_info info, + struct gdbarch *gdbarch); + +/* Return true if the Portable Executable behind ABFD uses the Cygwin dll + (cygwin1.dll). */ + +extern bool is_linked_with_cygwin_dll (bfd *abfd); + #endif diff -Nru gdb-9.1/gdb/x86-bsd-nat.c gdb-10.2/gdb/x86-bsd-nat.c --- gdb-9.1/gdb/x86-bsd-nat.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/x86-bsd-nat.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Native-dependent code for X86 BSD's. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -33,6 +33,19 @@ #include "inf-ptrace.h" +static PTRACE_TYPE_RET +gdb_ptrace (PTRACE_TYPE_ARG1 request, ptid_t ptid, PTRACE_TYPE_ARG3 addr) +{ +#ifdef __NetBSD__ + /* Support for NetBSD threads: unlike other ptrace implementations in this + file, NetBSD requires that we pass both the pid and lwp. */ + return ptrace (request, ptid.pid (), addr, ptid.lwp ()); +#else + pid_t pid = get_ptrace_pid (ptid); + return ptrace (request, pid, addr, 0); +#endif +} + #ifdef PT_GETXSTATE_INFO size_t x86bsd_xsave_len; #endif @@ -57,20 +70,18 @@ { struct dbreg dbregs; - if (ptrace (PT_GETDBREGS, get_ptrace_pid (inferior_ptid), - (PTRACE_TYPE_ARG3) &dbregs, 0) == -1) + if (gdb_ptrace (PT_GETDBREGS, ptid, (PTRACE_TYPE_ARG3) &dbregs) == -1) perror_with_name (_("Couldn't read debug registers")); return DBREG_DRX ((&dbregs), regnum); } static void -x86bsd_dr_set (int regnum, unsigned long value) +x86bsd_dr_set (ptid_t ptid, int regnum, unsigned long value) { struct dbreg dbregs; - if (ptrace (PT_GETDBREGS, get_ptrace_pid (inferior_ptid), - (PTRACE_TYPE_ARG3) &dbregs, 0) == -1) + if (gdb_ptrace (PT_GETDBREGS, ptid, (PTRACE_TYPE_ARG3) &dbregs) == -1) perror_with_name (_("Couldn't get debug registers")); /* For some mysterious reason, some of the reserved bits in the @@ -82,8 +93,8 @@ for (thread_info *thread : current_inferior ()->non_exited_threads ()) { - if (ptrace (PT_SETDBREGS, get_ptrace_pid (thread->ptid), - (PTRACE_TYPE_ARG3) &dbregs, 0) == -1) + if (gdb_ptrace (PT_SETDBREGS, thread->ptid, + (PTRACE_TYPE_ARG3) &dbregs) == -1) perror_with_name (_("Couldn't write debug registers")); } } @@ -91,7 +102,7 @@ static void x86bsd_dr_set_control (unsigned long control) { - x86bsd_dr_set (7, control); + x86bsd_dr_set (inferior_ptid, 7, control); } static void @@ -99,7 +110,7 @@ { gdb_assert (regnum >= 0 && regnum <= 4); - x86bsd_dr_set (regnum, addr); + x86bsd_dr_set (inferior_ptid, regnum, addr); } static CORE_ADDR @@ -122,6 +133,7 @@ #endif /* PT_GETDBREGS */ +void _initialize_x86_bsd_nat (); void _initialize_x86_bsd_nat () { diff -Nru gdb-9.1/gdb/x86-bsd-nat.h gdb-10.2/gdb/x86-bsd-nat.h --- gdb-9.1/gdb/x86-bsd-nat.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/x86-bsd-nat.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Native-dependent code for x86 BSD's. - Copyright (C) 2011-2020 Free Software Foundation, Inc. + Copyright (C) 2011-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/x86-linux-nat.c gdb-10.2/gdb/x86-linux-nat.c --- gdb-9.1/gdb/x86-linux-nat.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/x86-linux-nat.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Native-dependent code for GNU/Linux x86 (i386 and x86-64). - Copyright (C) 1999-2020 Free Software Foundation, Inc. + Copyright (C) 1999-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -310,6 +310,7 @@ } +void _initialize_x86_linux_nat (); void _initialize_x86_linux_nat () { diff -Nru gdb-9.1/gdb/x86-linux-nat.h gdb-10.2/gdb/x86-linux-nat.h --- gdb-9.1/gdb/x86-linux-nat.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/x86-linux-nat.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Native-dependent code for GNU/Linux x86 (i386 and x86-64). - Copyright (C) 1999-2020 Free Software Foundation, Inc. + Copyright (C) 1999-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/x86-nat.c gdb-10.2/gdb/x86-nat.c --- gdb-9.1/gdb/x86-nat.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/x86-nat.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Native-dependent code for x86 (i386 and x86-64). - Copyright (C) 2001-2020 Free Software Foundation, Inc. + Copyright (C) 2001-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/x86-nat.h gdb-10.2/gdb/x86-nat.h --- gdb-9.1/gdb/x86-nat.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/x86-nat.h 2021-04-25 04:04:35.000000000 +0000 @@ -3,7 +3,7 @@ Low level functions to implement Operating System specific code to manipulate x86 debug registers. - Copyright (C) 2009-2020 Free Software Foundation, Inc. + Copyright (C) 2009-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/x86-tdep.c gdb-10.2/gdb/x86-tdep.c --- gdb-9.1/gdb/x86-tdep.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/x86-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for X86-based targets. - Copyright (C) 2018-2020 Free Software Foundation, Inc. + Copyright (C) 2018-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/x86-tdep.h gdb-10.2/gdb/x86-tdep.h --- gdb-9.1/gdb/x86-tdep.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/x86-tdep.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for X86-based targets. - Copyright (C) 2018-2020 Free Software Foundation, Inc. + Copyright (C) 2018-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/xcoffread.c gdb-10.2/gdb/xcoffread.c --- gdb-9.1/gdb/xcoffread.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/xcoffread.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Read AIX xcoff symbol tables and convert to internal format, for GDB. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. Derived from coffread.c, dbxread.c, and a lot of hacking. Contributed by IBM Corporation. @@ -166,6 +166,7 @@ { NULL, NULL }, { ".dwmac", NULL }, { ".dwstr", NULL }, + { NULL, NULL }, /* debug_str_offsets */ { NULL, NULL }, /* debug_line_str */ { ".dwrnges", NULL }, { NULL, NULL }, /* debug_rnglists */ @@ -229,7 +230,7 @@ static struct symbol *process_xcoff_symbol (struct coff_symbol *, struct objfile *); -static void read_xcoff_symtab (struct objfile *, struct partial_symtab *); +static void read_xcoff_symtab (struct objfile *, legacy_psymtab *); #if 0 static void add_stab_to_list (char *, struct pending_stabs **); @@ -431,6 +432,9 @@ for (function_count = 0, ii = 0; ii < oldLineTb->nitems; ++ii) { + if (oldLineTb->item[ii].is_stmt == 0) + continue; + if (oldLineTb->item[ii].line == 0) { /* Function entry found. */ if (function_count >= fentry_size) @@ -441,6 +445,7 @@ fentry_size * sizeof (struct linetable_entry)); } fentry[function_count].line = ii; + fentry[function_count].is_stmt = 1; fentry[function_count].pc = oldLineTb->item[ii].pc; ++function_count; @@ -591,7 +596,7 @@ /* Global variable to pass the psymtab down to all the routines involved in psymtab to symtab processing. */ -static struct partial_symtab *this_symtab_psymtab; +static legacy_psymtab *this_symtab_psymtab; /* Objfile related to this_symtab_psymtab; set at the same time. */ static struct objfile *this_symtab_objfile; @@ -824,7 +829,7 @@ CORE_ADDR endaddr, unsigned *firstLine) { struct objfile *objfile = this_symtab_objfile; - struct gdbarch *gdbarch = get_objfile_arch (objfile); + struct gdbarch *gdbarch = objfile->arch (); unsigned int curoffset; CORE_ADDR addr; void *ext_lnno; @@ -864,7 +869,7 @@ addr = (int_lnno.l_lnno ? int_lnno.l_addr.l_paddr : read_symbol_nvalue (int_lnno.l_addr.l_symndx)); - addr += ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile)); + addr += objfile->text_section_offset (); if (addr < startaddr || (endaddr && addr >= endaddr)) return; @@ -989,7 +994,7 @@ /* Read symbols for a given partial symbol table. */ static void -read_xcoff_symtab (struct objfile *objfile, struct partial_symtab *pst) +read_xcoff_symtab (struct objfile *objfile, legacy_psymtab *pst) { bfd *abfd = objfile->obfd; char *raw_auxptr; /* Pointer to first raw aux entry for sym. */ @@ -1232,8 +1237,7 @@ } file_start_addr = - cs->c_value + ANOFFSET (objfile->section_offsets, - SECT_OFF_TEXT (objfile)); + cs->c_value + objfile->text_section_offset (); file_end_addr = file_start_addr + CSECT_LEN (&main_aux); if (cs->c_name && (cs->c_name[0] == '.' || cs->c_name[0] == '@')) @@ -1355,8 +1359,7 @@ case C_FCN: if (strcmp (cs->c_name, ".bf") == 0) { - CORE_ADDR off = ANOFFSET (objfile->section_offsets, - SECT_OFF_TEXT (objfile)); + CORE_ADDR off = objfile->text_section_offset (); bfd_coff_swap_aux_in (abfd, raw_auxptr, cs->c_type, cs->c_sclass, 0, cs->c_naux, &main_aux); @@ -1400,8 +1403,7 @@ NULL, cstk.start_addr, (fcn_cs_saved.c_value + fcn_aux_saved.x_sym.x_misc.x_fsize - + ANOFFSET (objfile->section_offsets, - SECT_OFF_TEXT (objfile)))); + + objfile->text_section_offset ())); within_function = 0; } break; @@ -1468,8 +1470,7 @@ depth++; newobj = push_context (depth, (cs->c_value - + ANOFFSET (objfile->section_offsets, - SECT_OFF_TEXT (objfile)))); + + objfile->text_section_offset ())); } else if (strcmp (cs->c_name, ".eb") == 0) { @@ -1491,8 +1492,7 @@ cstk.old_blocks, NULL, cstk.start_addr, (cs->c_value - + ANOFFSET (objfile->section_offsets, - SECT_OFF_TEXT (objfile)))); + + objfile->text_section_offset ())); } *get_local_symbols () = cstk.locals; } @@ -1521,11 +1521,6 @@ } } -#define SYMBOL_DUP(SYMBOL1, SYMBOL2) \ - (SYMBOL2) = new (&objfile->objfile_obstack) symbol (); \ - *(SYMBOL2) = *(SYMBOL1); - - #define SYMNAME_ALLOC(NAME, ALLOCED) \ ((ALLOCED) ? (NAME) : obstack_strdup (&objfile->objfile_obstack, \ (NAME))) @@ -1554,15 +1549,13 @@ else { sec = secnum_to_section (cs->c_secnum, objfile); - off = ANOFFSET (objfile->section_offsets, sec); + off = objfile->section_offsets[sec]; } name = cs->c_name; if (name[0] == '.') ++name; - initialize_objfile_symbol (sym); - /* default assumptions */ SET_SYMBOL_VALUE_ADDRESS (sym, cs->c_value + off); SYMBOL_DOMAIN (sym) = VAR_DOMAIN; @@ -1578,7 +1571,7 @@ SYMBOL_TYPE (sym) = objfile_type (objfile)->nodebug_text_symbol; SYMBOL_ACLASS_INDEX (sym) = LOC_BLOCK; - SYMBOL_DUP (sym, sym2); + sym2 = new (&objfile->objfile_obstack) symbol (*sym); if (cs->c_sclass == C_EXT || C_WEAKEXT) add_symbol_to_list (sym2, get_global_symbols ()); @@ -1657,8 +1650,7 @@ if (*pp == 'V' && !within_function) *pp = 'S'; sym = define_symbol ((cs->c_value - + ANOFFSET (objfile->section_offsets, - static_block_section)), + + objfile->section_offsets[static_block_section]), cs->c_name, 0, 0, objfile); if (sym != NULL) { @@ -1822,38 +1814,12 @@ } static void -xcoff_psymtab_to_symtab_1 (struct objfile *objfile, struct partial_symtab *pst) +xcoff_expand_psymtab (legacy_psymtab *pst, struct objfile *objfile) { - int i; - - if (!pst) - return; - - if (pst->readin) - { - fprintf_unfiltered - (gdb_stderr, "Psymtab for %s already read in. Shouldn't happen.\n", - pst->filename); - return; - } + gdb_assert (!pst->readin); /* Read in all partial symtabs on which this one is dependent. */ - for (i = 0; i < pst->number_of_dependencies; i++) - if (!pst->dependencies[i]->readin) - { - /* Inform about additional files that need to be read in. */ - if (info_verbose) - { - fputs_filtered (" ", gdb_stdout); - wrap_here (""); - fputs_filtered ("and ", gdb_stdout); - wrap_here (""); - printf_filtered ("%s...", pst->dependencies[i]->filename); - wrap_here (""); /* Flush output */ - gdb_flush (gdb_stdout); - } - xcoff_psymtab_to_symtab_1 (objfile, pst->dependencies[i]); - } + pst->expand_dependencies (objfile); if (((struct symloc *) pst->read_symtab_private)->numsyms != 0) { @@ -1864,45 +1830,27 @@ read_xcoff_symtab (objfile, pst); } - pst->readin = 1; + pst->readin = true; } /* Read in all of the symbols for a given psymtab for real. Be verbose about it if the user wants that. SELF is not NULL. */ static void -xcoff_read_symtab (struct partial_symtab *self, struct objfile *objfile) +xcoff_read_symtab (legacy_psymtab *self, struct objfile *objfile) { - if (self->readin) - { - fprintf_unfiltered - (gdb_stderr, "Psymtab for %s already read in. Shouldn't happen.\n", - self->filename); - return; - } + gdb_assert (!self->readin); if (((struct symloc *) self->read_symtab_private)->numsyms != 0 || self->number_of_dependencies) { - /* Print the message now, before reading the string table, - to avoid disconcerting pauses. */ - if (info_verbose) - { - printf_filtered ("Reading in symbols for %s...", self->filename); - gdb_flush (gdb_stdout); - } - next_symbol_text_func = xcoff_next_symbol_text; - xcoff_psymtab_to_symtab_1 (objfile, self); + self->expand_psymtab (objfile); /* Match with global symbols. This only needs to be done once, after all of the symtabs and dependencies have been read in. */ scan_file_globals (objfile); - - /* Finish up the debug error message. */ - if (info_verbose) - printf_filtered ("done.\n"); } } @@ -2008,20 +1956,18 @@ is the address relative to which its symbols are (incremental) or 0 (normal). */ -static struct partial_symtab * +static legacy_psymtab * xcoff_start_psymtab (struct objfile *objfile, const char *filename, int first_symnum) { - struct partial_symtab *result = - start_psymtab_common (objfile, - filename, - /* We fill in textlow later. */ - 0); + /* We fill in textlow later. */ + legacy_psymtab *result = new legacy_psymtab (filename, objfile, 0); result->read_symtab_private = XOBNEW (&objfile->objfile_obstack, struct symloc); ((struct symloc *) result->read_symtab_private)->first_symnum = first_symnum; - result->read_symtab = xcoff_read_symtab; + result->legacy_read_symtab = xcoff_read_symtab; + result->legacy_expand_psymtab = xcoff_expand_psymtab; /* Deduce the source language from the filename for this psymtab. */ psymtab_language = deduce_language_from_filename (filename); @@ -2037,11 +1983,11 @@ INCLUDE_LIST, NUM_INCLUDES, DEPENDENCY_LIST, and NUMBER_DEPENDENCIES are the information for includes and dependencies. */ -static struct partial_symtab * -xcoff_end_psymtab (struct objfile *objfile, struct partial_symtab *pst, +static legacy_psymtab * +xcoff_end_psymtab (struct objfile *objfile, legacy_psymtab *pst, const char **include_list, int num_includes, int capping_symbol_number, - struct partial_symtab **dependency_list, + legacy_psymtab **dependency_list, int number_dependencies, int textlow_not_set) { int i; @@ -2062,15 +2008,15 @@ pst->dependencies = objfile->partial_symtabs->allocate_dependencies (number_dependencies); memcpy (pst->dependencies, dependency_list, - number_dependencies * sizeof (struct partial_symtab *)); + number_dependencies * sizeof (legacy_psymtab *)); } else pst->dependencies = 0; for (i = 0; i < num_includes; i++) { - struct partial_symtab *subpst = - allocate_psymtab (include_list[i], objfile); + legacy_psymtab *subpst = + new legacy_psymtab (include_list[i], objfile); subpst->read_symtab_private = XOBNEW (&objfile->objfile_obstack, symloc); ((struct symloc *) subpst->read_symtab_private)->first_symnum = 0; @@ -2083,7 +2029,8 @@ subpst->dependencies[0] = pst; subpst->number_of_dependencies = 1; - subpst->read_symtab = pst->read_symtab; + subpst->legacy_read_symtab = pst->legacy_read_symtab; + subpst->legacy_expand_psymtab = pst->legacy_expand_psymtab; } if (num_includes == 0 @@ -2091,12 +2038,11 @@ && pst->n_global_syms == 0 && pst->n_static_syms == 0) { - /* Throw away this psymtab, it's empty. We can't deallocate it, since - it is on the obstack, but we can forget to chain it on the list. */ + /* Throw away this psymtab, it's empty. */ /* Empty psymtabs happen as a result of header files which don't have any symbols in them. There can be a lot of them. */ - discard_psymtab (objfile, pst); + objfile->partial_symtabs->discard_psymtab (pst); /* Indicate that psymtab was thrown away. */ pst = NULL; @@ -2167,7 +2113,6 @@ scan_xcoff_symtab (minimal_symbol_reader &reader, struct objfile *objfile) { - struct gdbarch *gdbarch = get_objfile_arch (objfile); CORE_ADDR toc_offset = 0; /* toc offset value in data section. */ const char *filestring = NULL; @@ -2177,7 +2122,7 @@ unsigned int nsyms; /* Current partial symtab */ - struct partial_symtab *pst; + legacy_psymtab *pst; /* List of current psymtab's include files. */ const char **psymtab_include_list; @@ -2185,7 +2130,7 @@ int includes_used; /* Index within current psymtab dependency list. */ - struct partial_symtab **dependency_list; + legacy_psymtab **dependency_list; int dependencies_used, dependencies_allocated; char *sraw_symbol; @@ -2199,7 +2144,7 @@ int misc_func_recorded = 0; /* true if any misc. function. */ int textlow_not_set = 1; - pst = (struct partial_symtab *) 0; + pst = (legacy_psymtab *) 0; includes_allocated = 30; includes_used = 0; @@ -2209,8 +2154,8 @@ dependencies_allocated = 30; dependencies_used = 0; dependency_list = - (struct partial_symtab **) alloca (dependencies_allocated * - sizeof (struct partial_symtab *)); + (legacy_psymtab **) alloca (dependencies_allocated * + sizeof (legacy_psymtab *)); set_last_source_file (NULL); @@ -2630,10 +2575,6 @@ switch (p[1]) { case 'S': - if (gdbarch_static_transform_name_p (gdbarch)) - namestring = gdbarch_static_transform_name - (gdbarch, namestring); - add_psymbol_to_list (gdb::string_view (namestring, p - namestring), true, VAR_DOMAIN, LOC_STATIC, @@ -3024,7 +2965,7 @@ us to test whether the associated section exists or not, and then access it quickly (without searching it again). */ - if (objfile->num_sections == 0) + if (objfile->section_offsets.empty ()) return; /* Is that even possible? Better safe than sorry. */ first_section_name = bfd_section_name (objfile->sections[0].the_bfd_section); @@ -3134,8 +3075,9 @@ return l_nimpid - 1; } +void _initialize_xcoffread (); void -_initialize_xcoffread (void) +_initialize_xcoffread () { add_symtab_fns (bfd_target_xcoff_flavour, &xcoff_sym_fns); } diff -Nru gdb-9.1/gdb/xcoffread.h gdb-10.2/gdb/xcoffread.h --- gdb-9.1/gdb/xcoffread.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/xcoffread.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Read AIX xcoff symbol tables and convert to internal format, for GDB. - Copyright (C) 2009-2020 Free Software Foundation, Inc. + Copyright (C) 2009-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/xml-builtin.h gdb-10.2/gdb/xml-builtin.h --- gdb-9.1/gdb/xml-builtin.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/xml-builtin.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Header file for builtin XML files. - Copyright (C) 2019-2020 Free Software Foundation, Inc. + Copyright (C) 2019-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/xml-support.c gdb-10.2/gdb/xml-support.c --- gdb-9.1/gdb/xml-support.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/xml-support.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Helper routines for parsing XML using Expat. - Copyright (C) 2006-2020 Free Software Foundation, Inc. + Copyright (C) 2006-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -977,13 +977,11 @@ { char *fullname = concat (dirname, "/", filename, (char *) NULL); - if (fullname == NULL) - malloc_failure (0); - file = gdb_fopen_cloexec (fullname, FOPEN_RT); + file = gdb_fopen_cloexec (fullname, FOPEN_RB); xfree (fullname); } else - file = gdb_fopen_cloexec (filename, FOPEN_RT); + file = gdb_fopen_cloexec (filename, FOPEN_RB); if (file == NULL) return {}; @@ -1010,8 +1008,10 @@ return text; } +void _initialize_xml_support (); +void _initialize_xml_support (); void -_initialize_xml_support (void) +_initialize_xml_support () { add_setshow_boolean_cmd ("xml", class_maintenance, &debug_xml, _("Set XML parser debugging."), diff -Nru gdb-9.1/gdb/xml-support.h gdb-10.2/gdb/xml-support.h --- gdb-9.1/gdb/xml-support.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/xml-support.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Helper routines for parsing XML using Expat. - Copyright (C) 2006-2020 Free Software Foundation, Inc. + Copyright (C) 2006-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/xml-syscall.c gdb-10.2/gdb/xml-syscall.c --- gdb-9.1/gdb/xml-syscall.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/xml-syscall.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,7 +1,7 @@ /* Functions that provide the mechanism to parse a syscall XML file and get its values. - Copyright (C) 2009-2020 Free Software Foundation, Inc. + Copyright (C) 2009-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/xml-syscall.h gdb-10.2/gdb/xml-syscall.h --- gdb-9.1/gdb/xml-syscall.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/xml-syscall.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,7 +1,7 @@ /* Functions that provide the mechanism to parse a syscall XML file and get its values. - Copyright (C) 2009-2020 Free Software Foundation, Inc. + Copyright (C) 2009-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/xml-tdesc.c gdb-10.2/gdb/xml-tdesc.c --- gdb-9.1/gdb/xml-tdesc.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/xml-tdesc.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* XML target description support for GDB. - Copyright (C) 2006-2020 Free Software Foundation, Inc. + Copyright (C) 2006-2021 Free Software Foundation, Inc. Contributed by CodeSourcery. diff -Nru gdb-9.1/gdb/xml-tdesc.h gdb-10.2/gdb/xml-tdesc.h --- gdb-9.1/gdb/xml-tdesc.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/xml-tdesc.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* XML target description support for GDB. - Copyright (C) 2006-2020 Free Software Foundation, Inc. + Copyright (C) 2006-2021 Free Software Foundation, Inc. Contributed by CodeSourcery. diff -Nru gdb-9.1/gdb/xstormy16-tdep.c gdb-10.2/gdb/xstormy16-tdep.c --- gdb-9.1/gdb/xstormy16-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/xstormy16-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for the Sanyo Xstormy16a (LC590000) processor. - Copyright (C) 2001-2020 Free Software Foundation, Inc. + Copyright (C) 2001-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -21,7 +21,7 @@ #include "frame.h" #include "frame-base.h" #include "frame-unwind.h" -#include "dwarf2-frame.h" +#include "dwarf2/frame.h" #include "symtab.h" #include "gdbtypes.h" #include "gdbcmd.h" @@ -133,9 +133,9 @@ static int xstormy16_type_is_scalar (struct type *t) { - return (TYPE_CODE(t) != TYPE_CODE_STRUCT - && TYPE_CODE(t) != TYPE_CODE_UNION - && TYPE_CODE(t) != TYPE_CODE_ARRAY); + return (t->code () != TYPE_CODE_STRUCT + && t->code () != TYPE_CODE_UNION + && t->code () != TYPE_CODE_ARRAY); } /* Function: xstormy16_use_struct_convention @@ -430,7 +430,7 @@ /* Found a function. */ sym = lookup_symbol (func_name, NULL, VAR_DOMAIN, NULL).symbol; /* Don't use line number debug info for assembly source files. */ - if (sym && SYMBOL_LANGUAGE (sym) != language_asm) + if (sym && sym->language () != language_asm) { sal = find_pc_line (func_addr, 0); if (sal.end && sal.end < func_end) @@ -610,7 +610,7 @@ struct type *type, const gdb_byte *buf) { enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); - enum type_code target = TYPE_CODE (TYPE_TARGET_TYPE (type)); + enum type_code target = TYPE_TARGET_TYPE (type)->code (); CORE_ADDR addr = extract_unsigned_integer (buf, TYPE_LENGTH (type), byte_order); @@ -629,7 +629,7 @@ struct type *type, gdb_byte *buf, CORE_ADDR addr) { enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); - enum type_code target = TYPE_CODE (TYPE_TARGET_TYPE (type)); + enum type_code target = TYPE_TARGET_TYPE (type)->code (); if (target == TYPE_CODE_FUNC || target == TYPE_CODE_METHOD) { @@ -833,8 +833,9 @@ Initializer function for the Sanyo Xstormy16a module. Called by gdb at start-up. */ +void _initialize_xstormy16_tdep (); void -_initialize_xstormy16_tdep (void) +_initialize_xstormy16_tdep () { register_gdbarch_init (bfd_arch_xstormy16, xstormy16_gdbarch_init); } diff -Nru gdb-9.1/gdb/xtensa-config.c gdb-10.2/gdb/xtensa-config.c --- gdb-9.1/gdb/xtensa-config.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/xtensa-config.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Configuration for the Xtensa architecture for GDB, the GNU debugger. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/xtensa-linux-nat.c gdb-10.2/gdb/xtensa-linux-nat.c --- gdb-9.1/gdb/xtensa-linux-nat.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/xtensa-linux-nat.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Xtensa GNU/Linux native support. - Copyright (C) 2007-2020 Free Software Foundation, Inc. + Copyright (C) 2007-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -328,8 +328,9 @@ return PS_OK; } +void _initialize_xtensa_linux_nat (); void -_initialize_xtensa_linux_nat (void) +_initialize_xtensa_linux_nat () { const xtensa_regtable_t *ptr; diff -Nru gdb-9.1/gdb/xtensa-linux-tdep.c gdb-10.2/gdb/xtensa-linux-tdep.c --- gdb-9.1/gdb/xtensa-linux-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/xtensa-linux-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for GNU/Linux on Xtensa processors. - Copyright (C) 2007-2020 Free Software Foundation, Inc. + Copyright (C) 2007-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -125,8 +125,9 @@ svr4_fetch_objfile_link_map); } +void _initialize_xtensa_linux_tdep (); void -_initialize_xtensa_linux_tdep (void) +_initialize_xtensa_linux_tdep () { gdbarch_register_osabi (bfd_arch_xtensa, bfd_mach_xtensa, GDB_OSABI_LINUX, xtensa_linux_init_abi); diff -Nru gdb-9.1/gdb/xtensa-tdep.c gdb-10.2/gdb/xtensa-tdep.c --- gdb-9.1/gdb/xtensa-tdep.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gdb/xtensa-tdep.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for the Xtensa port of GDB, the GNU debugger. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. This file is part of GDB. @@ -35,8 +35,8 @@ #include "dummy-frame.h" #include "dwarf2.h" -#include "dwarf2-frame.h" -#include "dwarf2loc.h" +#include "dwarf2/frame.h" +#include "dwarf2/loc.h" #include "frame-base.h" #include "frame-unwind.h" @@ -1651,9 +1651,9 @@ { /* Structures up to 16 bytes are returned in registers. */ - int struct_return = ((TYPE_CODE (valtype) == TYPE_CODE_STRUCT - || TYPE_CODE (valtype) == TYPE_CODE_UNION - || TYPE_CODE (valtype) == TYPE_CODE_ARRAY) + int struct_return = ((valtype->code () == TYPE_CODE_STRUCT + || valtype->code () == TYPE_CODE_UNION + || valtype->code () == TYPE_CODE_ARRAY) && TYPE_LENGTH (valtype) > 16); if (struct_return) @@ -1726,7 +1726,7 @@ fprintf_unfiltered (gdb_stdlog, "%2d: %s %3s ", i, host_address_to_string (arg), pulongest (TYPE_LENGTH (arg_type))); - switch (TYPE_CODE (arg_type)) + switch (arg_type->code ()) { case TYPE_CODE_INT: fprintf_unfiltered (gdb_stdlog, "int"); @@ -1735,7 +1735,7 @@ fprintf_unfiltered (gdb_stdlog, "struct"); break; default: - fprintf_unfiltered (gdb_stdlog, "%3d", TYPE_CODE (arg_type)); + fprintf_unfiltered (gdb_stdlog, "%3d", arg_type->code ()); break; } fprintf_unfiltered (gdb_stdlog, " %s\n", @@ -1760,7 +1760,7 @@ struct value *arg = args[i]; struct type *arg_type = check_typedef (value_type (arg)); - switch (TYPE_CODE (arg_type)) + switch (arg_type->code ()) { case TYPE_CODE_INT: case TYPE_CODE_BOOL: @@ -3253,8 +3253,9 @@ error (_("xtensa_dump_tdep(): not implemented")); } +void _initialize_xtensa_tdep (); void -_initialize_xtensa_tdep (void) +_initialize_xtensa_tdep () { gdbarch_register (bfd_arch_xtensa, xtensa_gdbarch_init, xtensa_dump_tdep); xtensa_init_reggroups (); diff -Nru gdb-9.1/gdb/xtensa-tdep.h gdb-10.2/gdb/xtensa-tdep.h --- gdb-9.1/gdb/xtensa-tdep.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/xtensa-tdep.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Target-dependent code for the Xtensa port of GDB, the GNU debugger. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/xtensa-xtregs.c gdb-10.2/gdb/xtensa-xtregs.c --- gdb-9.1/gdb/xtensa-xtregs.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/xtensa-xtregs.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Table mapping between kernel xtregset and GDB register cache. - Copyright (C) 2007-2020 Free Software Foundation, Inc. + Copyright (C) 2007-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdb/yy-remap.h gdb-10.2/gdb/yy-remap.h --- gdb-9.1/gdb/yy-remap.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gdb/yy-remap.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 1986-2020 Free Software Foundation, Inc. +/* Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/gdbserver/acinclude.m4 gdb-10.2/gdbserver/acinclude.m4 --- gdb-9.1/gdbserver/acinclude.m4 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/acinclude.m4 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,59 @@ +dnl gdb/gdbserver/configure.in uses BFD_HAVE_SYS_PROCFS_TYPE. +m4_include(../bfd/bfd.m4) + +dnl This gets AM_GDB_WARNINGS. +m4_include(../gdbsupport/warning.m4) + +dnl This gets autoconf bugfixes +m4_include(../config/override.m4) + +dnl For ACX_PKGVERSION and ACX_BUGURL. +m4_include(../config/acx.m4) + +m4_include(../config/depstand.m4) +m4_include(../config/lead-dot.m4) + +dnl Needed for common.m4 +dnl For AC_LIB_HAVE_LINKFLAGS. +m4_include(../config/lib-ld.m4) +m4_include(../config/lib-prefix.m4) +m4_include(../config/lib-link.m4) +dnl codeset.m4 is needed for common.m4, but not for +dnl anything else in gdbserver. +m4_include(../config/codeset.m4) +m4_include(../gdbsupport/common.m4) + +dnl For libiberty_INIT. +m4_include(../gdb/libiberty.m4) + +dnl For GDB_AC_PTRACE. +m4_include(../gdb/ptrace.m4) + +m4_include(../gdb/ax_cxx_compile_stdcxx.m4) + +dnl For GDB_AC_SELFTEST. +m4_include(../gdbsupport/selftest.m4) + +m4_include([../config/ax_pthread.m4]) + +dnl For ZW_GNU_GETTEXT_SISTER_DIR. +m4_include(../config/gettext-sister.m4) + +dnl Check for existence of a type $1 in libthread_db.h +dnl Based on BFD_HAVE_SYS_PROCFS_TYPE in bfd/bfd.m4. + +AC_DEFUN([GDBSERVER_HAVE_THREAD_DB_TYPE], +[AC_MSG_CHECKING([for $1 in thread_db.h]) + AC_CACHE_VAL(gdbserver_cv_have_thread_db_type_$1, + [AC_TRY_COMPILE([ +#include <thread_db.h>], + [$1 avar], + gdbserver_cv_have_thread_db_type_$1=yes, + gdbserver_cv_have_thread_db_type_$1=no + )]) + if test $gdbserver_cv_have_thread_db_type_$1 = yes; then + AC_DEFINE([HAVE_]translit($1, [a-z], [A-Z]), 1, + [Define if <thread_db.h> has $1.]) + fi + AC_MSG_RESULT($gdbserver_cv_have_thread_db_type_$1) +]) diff -Nru gdb-9.1/gdbserver/aclocal.m4 gdb-10.2/gdbserver/aclocal.m4 --- gdb-9.1/gdbserver/aclocal.m4 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/aclocal.m4 2020-09-13 02:33:41.000000000 +0000 @@ -0,0 +1,202 @@ +# generated automatically by aclocal 1.15.1 -*- Autoconf -*- + +# Copyright (C) 1996-2017 Free Software Foundation, Inc. + +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) +# AM_AUX_DIR_EXPAND -*- Autoconf -*- + +# Copyright (C) 2001-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets +# $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to +# '$srcdir', '$srcdir/..', or '$srcdir/../..'. +# +# Of course, Automake must honor this variable whenever it calls a +# tool from the auxiliary directory. The problem is that $srcdir (and +# therefore $ac_aux_dir as well) can be either absolute or relative, +# depending on how configure is run. This is pretty annoying, since +# it makes $ac_aux_dir quite unusable in subdirectories: in the top +# source directory, any form will work fine, but in subdirectories a +# relative path needs to be adjusted first. +# +# $ac_aux_dir/missing +# fails when called from a subdirectory if $ac_aux_dir is relative +# $top_srcdir/$ac_aux_dir/missing +# fails if $ac_aux_dir is absolute, +# fails when called from a subdirectory in a VPATH build with +# a relative $ac_aux_dir +# +# The reason of the latter failure is that $top_srcdir and $ac_aux_dir +# are both prefixed by $srcdir. In an in-source build this is usually +# harmless because $srcdir is '.', but things will broke when you +# start a VPATH build or use an absolute $srcdir. +# +# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, +# iff we strip the leading $srcdir from $ac_aux_dir. That would be: +# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` +# and then we would define $MISSING as +# MISSING="\${SHELL} $am_aux_dir/missing" +# This will work as long as MISSING is not called from configure, because +# unfortunately $(top_srcdir) has no meaning in configure. +# However there are other variables, like CC, which are often used in +# configure, and could therefore not use this "fixed" $ac_aux_dir. +# +# Another solution, used here, is to always expand $ac_aux_dir to an +# absolute PATH. The drawback is that using absolute paths prevent a +# configured tree to be moved without reconfiguration. + +AC_DEFUN([AM_AUX_DIR_EXPAND], +[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl +# Expand $ac_aux_dir to an absolute path. +am_aux_dir=`cd "$ac_aux_dir" && pwd` +]) + +# AM_CONDITIONAL -*- Autoconf -*- + +# Copyright (C) 1997-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_CONDITIONAL(NAME, SHELL-CONDITION) +# ------------------------------------- +# Define a conditional. +AC_DEFUN([AM_CONDITIONAL], +[AC_PREREQ([2.52])dnl + m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], + [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl +AC_SUBST([$1_TRUE])dnl +AC_SUBST([$1_FALSE])dnl +_AM_SUBST_NOTMAKE([$1_TRUE])dnl +_AM_SUBST_NOTMAKE([$1_FALSE])dnl +m4_define([_AM_COND_VALUE_$1], [$2])dnl +if $2; then + $1_TRUE= + $1_FALSE='#' +else + $1_TRUE='#' + $1_FALSE= +fi +AC_CONFIG_COMMANDS_PRE( +[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then + AC_MSG_ERROR([[conditional "$1" was never defined. +Usually this means the macro was only invoked conditionally.]]) +fi])]) + +# Copyright (C) 2001-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_SH +# ------------------ +# Define $install_sh. +AC_DEFUN([AM_PROG_INSTALL_SH], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +if test x"${install_sh+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi +AC_SUBST([install_sh])]) + +# Add --enable-maintainer-mode option to configure. -*- Autoconf -*- +# From Jim Meyering + +# Copyright (C) 1996-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_MAINTAINER_MODE([DEFAULT-MODE]) +# ---------------------------------- +# Control maintainer-specific portions of Makefiles. +# Default is to disable them, unless 'enable' is passed literally. +# For symmetry, 'disable' may be passed as well. Anyway, the user +# can override the default with the --enable/--disable switch. +AC_DEFUN([AM_MAINTAINER_MODE], +[m4_case(m4_default([$1], [disable]), + [enable], [m4_define([am_maintainer_other], [disable])], + [disable], [m4_define([am_maintainer_other], [enable])], + [m4_define([am_maintainer_other], [enable]) + m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])]) +AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) + dnl maintainer-mode's default is 'disable' unless 'enable' is passed + AC_ARG_ENABLE([maintainer-mode], + [AS_HELP_STRING([--]am_maintainer_other[-maintainer-mode], + am_maintainer_other[ make rules and dependencies not useful + (and sometimes confusing) to the casual installer])], + [USE_MAINTAINER_MODE=$enableval], + [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) + AC_MSG_RESULT([$USE_MAINTAINER_MODE]) + AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) + MAINT=$MAINTAINER_MODE_TRUE + AC_SUBST([MAINT])dnl +] +) + +# Copyright (C) 2001-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_STRIP +# --------------------- +# One issue with vendor 'install' (even GNU) is that you can't +# specify the program used to strip binaries. This is especially +# annoying in cross-compiling environments, where the build's strip +# is unlikely to handle the host's binaries. +# Fortunately install-sh will honor a STRIPPROG variable, so we +# always use install-sh in "make install-strip", and initialize +# STRIPPROG with the value of the STRIP variable (set by the user). +AC_DEFUN([AM_PROG_INSTALL_STRIP], +[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +# Installed binaries are usually stripped using 'strip' when the user +# run "make install-strip". However 'strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the 'STRIP' environment variable to overrule this program. +dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. +if test "$cross_compiling" != no; then + AC_CHECK_TOOL([STRIP], [strip], :) +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" +AC_SUBST([INSTALL_STRIP_PROGRAM])]) + +# Copyright (C) 2006-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. +# This macro is traced by Automake. +AC_DEFUN([_AM_SUBST_NOTMAKE]) + +# AM_SUBST_NOTMAKE(VARIABLE) +# -------------------------- +# Public sister of _AM_SUBST_NOTMAKE. +AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) + +m4_include([acinclude.m4]) diff -Nru gdb-9.1/gdbserver/ax.cc gdb-10.2/gdbserver/ax.cc --- gdb-9.1/gdbserver/ax.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/ax.cc 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,1376 @@ +/* Agent expression code for remote server. + Copyright (C) 2009-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "server.h" +#include "ax.h" +#include "gdbsupport/format.h" +#include "tracepoint.h" +#include "gdbsupport/rsp-low.h" + +static void ax_vdebug (const char *, ...) ATTRIBUTE_PRINTF (1, 2); + +#ifdef IN_PROCESS_AGENT +bool debug_agent = 0; +#endif + +static void +ax_vdebug (const char *fmt, ...) +{ + char buf[1024]; + va_list ap; + + va_start (ap, fmt); + vsprintf (buf, fmt, ap); +#ifdef IN_PROCESS_AGENT + fprintf (stderr, PROG "/ax: %s\n", buf); +#else + debug_printf (PROG "/ax: %s\n", buf); +#endif + va_end (ap); +} + +#define ax_debug_1(level, fmt, args...) \ + do { \ + if (level <= debug_threads) \ + ax_vdebug ((fmt), ##args); \ + } while (0) + +#define ax_debug(FMT, args...) \ + ax_debug_1 (1, FMT, ##args) + +/* This enum must exactly match what is documented in + gdb/doc/agentexpr.texi, including all the numerical values. */ + +enum gdb_agent_op + { +#define DEFOP(NAME, SIZE, DATA_SIZE, CONSUMED, PRODUCED, VALUE) \ + gdb_agent_op_ ## NAME = VALUE, +#include "gdbsupport/ax.def" +#undef DEFOP + gdb_agent_op_last + }; + +static const char *gdb_agent_op_names [gdb_agent_op_last] = + { + "?undef?" +#define DEFOP(NAME, SIZE, DATA_SIZE, CONSUMED, PRODUCED, VALUE) , # NAME +#include "gdbsupport/ax.def" +#undef DEFOP + }; + +#ifndef IN_PROCESS_AGENT +static const unsigned char gdb_agent_op_sizes [gdb_agent_op_last] = + { + 0 +#define DEFOP(NAME, SIZE, DATA_SIZE, CONSUMED, PRODUCED, VALUE) , SIZE +#include "gdbsupport/ax.def" +#undef DEFOP + }; +#endif + +/* A wrapper for gdb_agent_op_names that does some bounds-checking. */ + +static const char * +gdb_agent_op_name (int op) +{ + if (op < 0 || op >= gdb_agent_op_last || gdb_agent_op_names[op] == NULL) + return "?undef?"; + return gdb_agent_op_names[op]; +} + +#ifndef IN_PROCESS_AGENT + +/* The packet form of an agent expression consists of an 'X', number + of bytes in expression, a comma, and then the bytes. */ + +struct agent_expr * +gdb_parse_agent_expr (const char **actparm) +{ + const char *act = *actparm; + ULONGEST xlen; + struct agent_expr *aexpr; + + ++act; /* skip the X */ + act = unpack_varlen_hex (act, &xlen); + ++act; /* skip a comma */ + aexpr = XNEW (struct agent_expr); + aexpr->length = xlen; + aexpr->bytes = (unsigned char *) xmalloc (xlen); + hex2bin (act, aexpr->bytes, xlen); + *actparm = act + (xlen * 2); + return aexpr; +} + +void +gdb_free_agent_expr (struct agent_expr *aexpr) +{ + if (aexpr != NULL) + { + free (aexpr->bytes); + free (aexpr); + } +} + +/* Convert the bytes of an agent expression back into hex digits, so + they can be printed or uploaded. This allocates the buffer, + callers should free when they are done with it. */ + +char * +gdb_unparse_agent_expr (struct agent_expr *aexpr) +{ + char *rslt; + + rslt = (char *) xmalloc (2 * aexpr->length + 1); + bin2hex (aexpr->bytes, rslt, aexpr->length); + return rslt; +} + +/* Bytecode compilation. */ + +CORE_ADDR current_insn_ptr; + +int emit_error; + +struct bytecode_address +{ + int pc; + CORE_ADDR address; + int goto_pc; + /* Offset and size of field to be modified in the goto block. */ + int from_offset, from_size; + struct bytecode_address *next; +} *bytecode_address_table; + +void +emit_prologue (void) +{ + target_emit_ops ()->emit_prologue (); +} + +void +emit_epilogue (void) +{ + target_emit_ops ()->emit_epilogue (); +} + +static void +emit_add (void) +{ + target_emit_ops ()->emit_add (); +} + +static void +emit_sub (void) +{ + target_emit_ops ()->emit_sub (); +} + +static void +emit_mul (void) +{ + target_emit_ops ()->emit_mul (); +} + +static void +emit_lsh (void) +{ + target_emit_ops ()->emit_lsh (); +} + +static void +emit_rsh_signed (void) +{ + target_emit_ops ()->emit_rsh_signed (); +} + +static void +emit_rsh_unsigned (void) +{ + target_emit_ops ()->emit_rsh_unsigned (); +} + +static void +emit_ext (int arg) +{ + target_emit_ops ()->emit_ext (arg); +} + +static void +emit_log_not (void) +{ + target_emit_ops ()->emit_log_not (); +} + +static void +emit_bit_and (void) +{ + target_emit_ops ()->emit_bit_and (); +} + +static void +emit_bit_or (void) +{ + target_emit_ops ()->emit_bit_or (); +} + +static void +emit_bit_xor (void) +{ + target_emit_ops ()->emit_bit_xor (); +} + +static void +emit_bit_not (void) +{ + target_emit_ops ()->emit_bit_not (); +} + +static void +emit_equal (void) +{ + target_emit_ops ()->emit_equal (); +} + +static void +emit_less_signed (void) +{ + target_emit_ops ()->emit_less_signed (); +} + +static void +emit_less_unsigned (void) +{ + target_emit_ops ()->emit_less_unsigned (); +} + +static void +emit_ref (int size) +{ + target_emit_ops ()->emit_ref (size); +} + +static void +emit_if_goto (int *offset_p, int *size_p) +{ + target_emit_ops ()->emit_if_goto (offset_p, size_p); +} + +static void +emit_goto (int *offset_p, int *size_p) +{ + target_emit_ops ()->emit_goto (offset_p, size_p); +} + +static void +write_goto_address (CORE_ADDR from, CORE_ADDR to, int size) +{ + target_emit_ops ()->write_goto_address (from, to, size); +} + +static void +emit_const (LONGEST num) +{ + target_emit_ops ()->emit_const (num); +} + +static void +emit_reg (int reg) +{ + target_emit_ops ()->emit_reg (reg); +} + +static void +emit_pop (void) +{ + target_emit_ops ()->emit_pop (); +} + +static void +emit_stack_flush (void) +{ + target_emit_ops ()->emit_stack_flush (); +} + +static void +emit_zero_ext (int arg) +{ + target_emit_ops ()->emit_zero_ext (arg); +} + +static void +emit_swap (void) +{ + target_emit_ops ()->emit_swap (); +} + +static void +emit_stack_adjust (int n) +{ + target_emit_ops ()->emit_stack_adjust (n); +} + +/* FN's prototype is `LONGEST(*fn)(int)'. */ + +static void +emit_int_call_1 (CORE_ADDR fn, int arg1) +{ + target_emit_ops ()->emit_int_call_1 (fn, arg1); +} + +/* FN's prototype is `void(*fn)(int,LONGEST)'. */ + +static void +emit_void_call_2 (CORE_ADDR fn, int arg1) +{ + target_emit_ops ()->emit_void_call_2 (fn, arg1); +} + +static void +emit_eq_goto (int *offset_p, int *size_p) +{ + target_emit_ops ()->emit_eq_goto (offset_p, size_p); +} + +static void +emit_ne_goto (int *offset_p, int *size_p) +{ + target_emit_ops ()->emit_ne_goto (offset_p, size_p); +} + +static void +emit_lt_goto (int *offset_p, int *size_p) +{ + target_emit_ops ()->emit_lt_goto (offset_p, size_p); +} + +static void +emit_ge_goto (int *offset_p, int *size_p) +{ + target_emit_ops ()->emit_ge_goto (offset_p, size_p); +} + +static void +emit_gt_goto (int *offset_p, int *size_p) +{ + target_emit_ops ()->emit_gt_goto (offset_p, size_p); +} + +static void +emit_le_goto (int *offset_p, int *size_p) +{ + target_emit_ops ()->emit_le_goto (offset_p, size_p); +} + +/* Scan an agent expression for any evidence that the given PC is the + target of a jump bytecode in the expression. */ + +static int +is_goto_target (struct agent_expr *aexpr, int pc) +{ + int i; + unsigned char op; + + for (i = 0; i < aexpr->length; i += 1 + gdb_agent_op_sizes[op]) + { + op = aexpr->bytes[i]; + + if (op == gdb_agent_op_goto || op == gdb_agent_op_if_goto) + { + int target = (aexpr->bytes[i + 1] << 8) + aexpr->bytes[i + 2]; + if (target == pc) + return 1; + } + } + + return 0; +} + +/* Given an agent expression, turn it into native code. */ + +enum eval_result_type +compile_bytecodes (struct agent_expr *aexpr) +{ + int pc = 0; + int done = 0; + unsigned char op, next_op; + int arg; + /* This is only used to build 64-bit value for constants. */ + ULONGEST top; + struct bytecode_address *aentry, *aentry2; + +#define UNHANDLED \ + do \ + { \ + ax_debug ("Cannot compile op 0x%x\n", op); \ + return expr_eval_unhandled_opcode; \ + } while (0) + + if (aexpr->length == 0) + { + ax_debug ("empty agent expression\n"); + return expr_eval_empty_expression; + } + + bytecode_address_table = NULL; + + while (!done) + { + op = aexpr->bytes[pc]; + + ax_debug ("About to compile op 0x%x, pc=%d\n", op, pc); + + /* Record the compiled-code address of the bytecode, for use by + jump instructions. */ + aentry = XNEW (struct bytecode_address); + aentry->pc = pc; + aentry->address = current_insn_ptr; + aentry->goto_pc = -1; + aentry->from_offset = aentry->from_size = 0; + aentry->next = bytecode_address_table; + bytecode_address_table = aentry; + + ++pc; + + emit_error = 0; + + switch (op) + { + case gdb_agent_op_add: + emit_add (); + break; + + case gdb_agent_op_sub: + emit_sub (); + break; + + case gdb_agent_op_mul: + emit_mul (); + break; + + case gdb_agent_op_div_signed: + UNHANDLED; + break; + + case gdb_agent_op_div_unsigned: + UNHANDLED; + break; + + case gdb_agent_op_rem_signed: + UNHANDLED; + break; + + case gdb_agent_op_rem_unsigned: + UNHANDLED; + break; + + case gdb_agent_op_lsh: + emit_lsh (); + break; + + case gdb_agent_op_rsh_signed: + emit_rsh_signed (); + break; + + case gdb_agent_op_rsh_unsigned: + emit_rsh_unsigned (); + break; + + case gdb_agent_op_trace: + UNHANDLED; + break; + + case gdb_agent_op_trace_quick: + UNHANDLED; + break; + + case gdb_agent_op_log_not: + emit_log_not (); + break; + + case gdb_agent_op_bit_and: + emit_bit_and (); + break; + + case gdb_agent_op_bit_or: + emit_bit_or (); + break; + + case gdb_agent_op_bit_xor: + emit_bit_xor (); + break; + + case gdb_agent_op_bit_not: + emit_bit_not (); + break; + + case gdb_agent_op_equal: + next_op = aexpr->bytes[pc]; + if (next_op == gdb_agent_op_if_goto + && !is_goto_target (aexpr, pc) + && target_emit_ops ()->emit_eq_goto) + { + ax_debug ("Combining equal & if_goto"); + pc += 1; + aentry->pc = pc; + arg = aexpr->bytes[pc++]; + arg = (arg << 8) + aexpr->bytes[pc++]; + aentry->goto_pc = arg; + emit_eq_goto (&(aentry->from_offset), &(aentry->from_size)); + } + else if (next_op == gdb_agent_op_log_not + && (aexpr->bytes[pc + 1] == gdb_agent_op_if_goto) + && !is_goto_target (aexpr, pc + 1) + && target_emit_ops ()->emit_ne_goto) + { + ax_debug ("Combining equal & log_not & if_goto"); + pc += 2; + aentry->pc = pc; + arg = aexpr->bytes[pc++]; + arg = (arg << 8) + aexpr->bytes[pc++]; + aentry->goto_pc = arg; + emit_ne_goto (&(aentry->from_offset), &(aentry->from_size)); + } + else + emit_equal (); + break; + + case gdb_agent_op_less_signed: + next_op = aexpr->bytes[pc]; + if (next_op == gdb_agent_op_if_goto + && !is_goto_target (aexpr, pc)) + { + ax_debug ("Combining less_signed & if_goto"); + pc += 1; + aentry->pc = pc; + arg = aexpr->bytes[pc++]; + arg = (arg << 8) + aexpr->bytes[pc++]; + aentry->goto_pc = arg; + emit_lt_goto (&(aentry->from_offset), &(aentry->from_size)); + } + else if (next_op == gdb_agent_op_log_not + && !is_goto_target (aexpr, pc) + && (aexpr->bytes[pc + 1] == gdb_agent_op_if_goto) + && !is_goto_target (aexpr, pc + 1)) + { + ax_debug ("Combining less_signed & log_not & if_goto"); + pc += 2; + aentry->pc = pc; + arg = aexpr->bytes[pc++]; + arg = (arg << 8) + aexpr->bytes[pc++]; + aentry->goto_pc = arg; + emit_ge_goto (&(aentry->from_offset), &(aentry->from_size)); + } + else + emit_less_signed (); + break; + + case gdb_agent_op_less_unsigned: + emit_less_unsigned (); + break; + + case gdb_agent_op_ext: + arg = aexpr->bytes[pc++]; + if (arg < (sizeof (LONGEST) * 8)) + emit_ext (arg); + break; + + case gdb_agent_op_ref8: + emit_ref (1); + break; + + case gdb_agent_op_ref16: + emit_ref (2); + break; + + case gdb_agent_op_ref32: + emit_ref (4); + break; + + case gdb_agent_op_ref64: + emit_ref (8); + break; + + case gdb_agent_op_if_goto: + arg = aexpr->bytes[pc++]; + arg = (arg << 8) + aexpr->bytes[pc++]; + aentry->goto_pc = arg; + emit_if_goto (&(aentry->from_offset), &(aentry->from_size)); + break; + + case gdb_agent_op_goto: + arg = aexpr->bytes[pc++]; + arg = (arg << 8) + aexpr->bytes[pc++]; + aentry->goto_pc = arg; + emit_goto (&(aentry->from_offset), &(aentry->from_size)); + break; + + case gdb_agent_op_const8: + emit_stack_flush (); + top = aexpr->bytes[pc++]; + emit_const (top); + break; + + case gdb_agent_op_const16: + emit_stack_flush (); + top = aexpr->bytes[pc++]; + top = (top << 8) + aexpr->bytes[pc++]; + emit_const (top); + break; + + case gdb_agent_op_const32: + emit_stack_flush (); + top = aexpr->bytes[pc++]; + top = (top << 8) + aexpr->bytes[pc++]; + top = (top << 8) + aexpr->bytes[pc++]; + top = (top << 8) + aexpr->bytes[pc++]; + emit_const (top); + break; + + case gdb_agent_op_const64: + emit_stack_flush (); + top = aexpr->bytes[pc++]; + top = (top << 8) + aexpr->bytes[pc++]; + top = (top << 8) + aexpr->bytes[pc++]; + top = (top << 8) + aexpr->bytes[pc++]; + top = (top << 8) + aexpr->bytes[pc++]; + top = (top << 8) + aexpr->bytes[pc++]; + top = (top << 8) + aexpr->bytes[pc++]; + top = (top << 8) + aexpr->bytes[pc++]; + emit_const (top); + break; + + case gdb_agent_op_reg: + emit_stack_flush (); + arg = aexpr->bytes[pc++]; + arg = (arg << 8) + aexpr->bytes[pc++]; + emit_reg (arg); + break; + + case gdb_agent_op_end: + ax_debug ("At end of expression\n"); + + /* Assume there is one stack element left, and that it is + cached in "top" where emit_epilogue can get to it. */ + emit_stack_adjust (1); + + done = 1; + break; + + case gdb_agent_op_dup: + /* In our design, dup is equivalent to stack flushing. */ + emit_stack_flush (); + break; + + case gdb_agent_op_pop: + emit_pop (); + break; + + case gdb_agent_op_zero_ext: + arg = aexpr->bytes[pc++]; + if (arg < (sizeof (LONGEST) * 8)) + emit_zero_ext (arg); + break; + + case gdb_agent_op_swap: + next_op = aexpr->bytes[pc]; + /* Detect greater-than comparison sequences. */ + if (next_op == gdb_agent_op_less_signed + && !is_goto_target (aexpr, pc) + && (aexpr->bytes[pc + 1] == gdb_agent_op_if_goto) + && !is_goto_target (aexpr, pc + 1)) + { + ax_debug ("Combining swap & less_signed & if_goto"); + pc += 2; + aentry->pc = pc; + arg = aexpr->bytes[pc++]; + arg = (arg << 8) + aexpr->bytes[pc++]; + aentry->goto_pc = arg; + emit_gt_goto (&(aentry->from_offset), &(aentry->from_size)); + } + else if (next_op == gdb_agent_op_less_signed + && !is_goto_target (aexpr, pc) + && (aexpr->bytes[pc + 1] == gdb_agent_op_log_not) + && !is_goto_target (aexpr, pc + 1) + && (aexpr->bytes[pc + 2] == gdb_agent_op_if_goto) + && !is_goto_target (aexpr, pc + 2)) + { + ax_debug ("Combining swap & less_signed & log_not & if_goto"); + pc += 3; + aentry->pc = pc; + arg = aexpr->bytes[pc++]; + arg = (arg << 8) + aexpr->bytes[pc++]; + aentry->goto_pc = arg; + emit_le_goto (&(aentry->from_offset), &(aentry->from_size)); + } + else + emit_swap (); + break; + + case gdb_agent_op_getv: + emit_stack_flush (); + arg = aexpr->bytes[pc++]; + arg = (arg << 8) + aexpr->bytes[pc++]; + emit_int_call_1 (get_get_tsv_func_addr (), + arg); + break; + + case gdb_agent_op_setv: + arg = aexpr->bytes[pc++]; + arg = (arg << 8) + aexpr->bytes[pc++]; + emit_void_call_2 (get_set_tsv_func_addr (), + arg); + break; + + case gdb_agent_op_tracev: + UNHANDLED; + break; + + /* GDB never (currently) generates any of these ops. */ + case gdb_agent_op_float: + case gdb_agent_op_ref_float: + case gdb_agent_op_ref_double: + case gdb_agent_op_ref_long_double: + case gdb_agent_op_l_to_d: + case gdb_agent_op_d_to_l: + case gdb_agent_op_trace16: + UNHANDLED; + break; + + default: + ax_debug ("Agent expression op 0x%x not recognized\n", op); + /* Don't struggle on, things will just get worse. */ + return expr_eval_unrecognized_opcode; + } + + /* This catches errors that occur in target-specific code + emission. */ + if (emit_error) + { + ax_debug ("Error %d while emitting code for %s\n", + emit_error, gdb_agent_op_name (op)); + return expr_eval_unhandled_opcode; + } + + ax_debug ("Op %s compiled\n", gdb_agent_op_name (op)); + } + + /* Now fill in real addresses as goto destinations. */ + for (aentry = bytecode_address_table; aentry; aentry = aentry->next) + { + int written = 0; + + if (aentry->goto_pc < 0) + continue; + + /* Find the location that we are going to, and call back into + target-specific code to write the actual address or + displacement. */ + for (aentry2 = bytecode_address_table; aentry2; aentry2 = aentry2->next) + { + if (aentry2->pc == aentry->goto_pc) + { + ax_debug ("Want to jump from %s to %s\n", + paddress (aentry->address), + paddress (aentry2->address)); + write_goto_address (aentry->address + aentry->from_offset, + aentry2->address, aentry->from_size); + written = 1; + break; + } + } + + /* Error out if we didn't find a destination. */ + if (!written) + { + ax_debug ("Destination of goto %d not found\n", + aentry->goto_pc); + return expr_eval_invalid_goto; + } + } + + return expr_eval_no_error; +} + +#endif + +/* Make printf-type calls using arguments supplied from the host. We + need to parse the format string ourselves, and call the formatting + function with one argument at a time, partly because there is no + safe portable way to construct a varargs call, and partly to serve + as a security barrier against bad format strings that might get + in. */ + +static void +ax_printf (CORE_ADDR fn, CORE_ADDR chan, const char *format, + int nargs, ULONGEST *args) +{ + const char *f = format; + int i; + const char *current_substring; + int nargs_wanted; + + ax_debug ("Printf of \"%s\" with %d args", format, nargs); + + format_pieces fpieces (&f); + + nargs_wanted = 0; + for (auto &&piece : fpieces) + if (piece.argclass != literal_piece) + ++nargs_wanted; + + if (nargs != nargs_wanted) + error (_("Wrong number of arguments for specified format-string")); + + i = 0; + for (auto &&piece : fpieces) + { + current_substring = piece.string; + ax_debug ("current substring is '%s', class is %d", + current_substring, piece.argclass); + switch (piece.argclass) + { + case string_arg: + { + gdb_byte *str; + CORE_ADDR tem; + int j; + + tem = args[i]; + if (tem == 0) + { + printf (current_substring, "(null)"); + break; + } + + /* This is a %s argument. Find the length of the string. */ + for (j = 0;; j++) + { + gdb_byte c; + + read_inferior_memory (tem + j, &c, 1); + if (c == 0) + break; + } + + /* Copy the string contents into a string inside GDB. */ + str = (gdb_byte *) alloca (j + 1); + if (j != 0) + read_inferior_memory (tem, str, j); + str[j] = 0; + + printf (current_substring, (char *) str); + } + break; + + case long_long_arg: +#if defined (CC_HAS_LONG_LONG) && defined (PRINTF_HAS_LONG_LONG) + { + long long val = args[i]; + + printf (current_substring, val); + break; + } +#else + error (_("long long not supported in agent printf")); +#endif + case int_arg: + { + int val = args[i]; + + printf (current_substring, val); + break; + } + + case long_arg: + { + long val = args[i]; + + printf (current_substring, val); + break; + } + + case size_t_arg: + { + size_t val = args[i]; + + printf (current_substring, val); + break; + } + + case literal_piece: + /* Print a portion of the format string that has no + directives. Note that this will not include any + ordinary %-specs, but it might include "%%". That is + why we use printf_filtered and not puts_filtered here. + Also, we pass a dummy argument because some platforms + have modified GCC to include -Wformat-security by + default, which will warn here if there is no + argument. */ + printf (current_substring, 0); + break; + + default: + error (_("Format directive in '%s' not supported in agent printf"), + current_substring); + } + + /* Maybe advance to the next argument. */ + if (piece.argclass != literal_piece) + ++i; + } + + fflush (stdout); +} + +/* The agent expression evaluator, as specified by the GDB docs. It + returns 0 if everything went OK, and a nonzero error code + otherwise. */ + +enum eval_result_type +gdb_eval_agent_expr (struct eval_agent_expr_context *ctx, + struct agent_expr *aexpr, + ULONGEST *rslt) +{ + int pc = 0; +#define STACK_MAX 100 + ULONGEST stack[STACK_MAX], top; + int sp = 0; + unsigned char op; + int arg; + + /* This union is a convenient way to convert representations. For + now, assume a standard architecture where the hardware integer + types have 8, 16, 32, 64 bit types. A more robust solution would + be to import stdint.h from gnulib. */ + union + { + union + { + unsigned char bytes[1]; + unsigned char val; + } u8; + union + { + unsigned char bytes[2]; + unsigned short val; + } u16; + union + { + unsigned char bytes[4]; + unsigned int val; + } u32; + union + { + unsigned char bytes[8]; + ULONGEST val; + } u64; + } cnv; + + if (aexpr->length == 0) + { + ax_debug ("empty agent expression"); + return expr_eval_empty_expression; + } + + /* Cache the stack top in its own variable. Much of the time we can + operate on this variable, rather than dinking with the stack. It + needs to be copied to the stack when sp changes. */ + top = 0; + + while (1) + { + op = aexpr->bytes[pc++]; + + ax_debug ("About to interpret byte 0x%x", op); + + switch (op) + { + case gdb_agent_op_add: + top += stack[--sp]; + break; + + case gdb_agent_op_sub: + top = stack[--sp] - top; + break; + + case gdb_agent_op_mul: + top *= stack[--sp]; + break; + + case gdb_agent_op_div_signed: + if (top == 0) + { + ax_debug ("Attempted to divide by zero"); + return expr_eval_divide_by_zero; + } + top = ((LONGEST) stack[--sp]) / ((LONGEST) top); + break; + + case gdb_agent_op_div_unsigned: + if (top == 0) + { + ax_debug ("Attempted to divide by zero"); + return expr_eval_divide_by_zero; + } + top = stack[--sp] / top; + break; + + case gdb_agent_op_rem_signed: + if (top == 0) + { + ax_debug ("Attempted to divide by zero"); + return expr_eval_divide_by_zero; + } + top = ((LONGEST) stack[--sp]) % ((LONGEST) top); + break; + + case gdb_agent_op_rem_unsigned: + if (top == 0) + { + ax_debug ("Attempted to divide by zero"); + return expr_eval_divide_by_zero; + } + top = stack[--sp] % top; + break; + + case gdb_agent_op_lsh: + top = stack[--sp] << top; + break; + + case gdb_agent_op_rsh_signed: + top = ((LONGEST) stack[--sp]) >> top; + break; + + case gdb_agent_op_rsh_unsigned: + top = stack[--sp] >> top; + break; + + case gdb_agent_op_trace: + agent_mem_read (ctx, NULL, (CORE_ADDR) stack[--sp], + (ULONGEST) top); + if (--sp >= 0) + top = stack[sp]; + break; + + case gdb_agent_op_trace_quick: + arg = aexpr->bytes[pc++]; + agent_mem_read (ctx, NULL, (CORE_ADDR) top, (ULONGEST) arg); + break; + + case gdb_agent_op_log_not: + top = !top; + break; + + case gdb_agent_op_bit_and: + top &= stack[--sp]; + break; + + case gdb_agent_op_bit_or: + top |= stack[--sp]; + break; + + case gdb_agent_op_bit_xor: + top ^= stack[--sp]; + break; + + case gdb_agent_op_bit_not: + top = ~top; + break; + + case gdb_agent_op_equal: + top = (stack[--sp] == top); + break; + + case gdb_agent_op_less_signed: + top = (((LONGEST) stack[--sp]) < ((LONGEST) top)); + break; + + case gdb_agent_op_less_unsigned: + top = (stack[--sp] < top); + break; + + case gdb_agent_op_ext: + arg = aexpr->bytes[pc++]; + if (arg < (sizeof (LONGEST) * 8)) + { + LONGEST mask = 1 << (arg - 1); + top &= ((LONGEST) 1 << arg) - 1; + top = (top ^ mask) - mask; + } + break; + + case gdb_agent_op_ref8: + agent_mem_read (ctx, cnv.u8.bytes, (CORE_ADDR) top, 1); + top = cnv.u8.val; + break; + + case gdb_agent_op_ref16: + agent_mem_read (ctx, cnv.u16.bytes, (CORE_ADDR) top, 2); + top = cnv.u16.val; + break; + + case gdb_agent_op_ref32: + agent_mem_read (ctx, cnv.u32.bytes, (CORE_ADDR) top, 4); + top = cnv.u32.val; + break; + + case gdb_agent_op_ref64: + agent_mem_read (ctx, cnv.u64.bytes, (CORE_ADDR) top, 8); + top = cnv.u64.val; + break; + + case gdb_agent_op_if_goto: + if (top) + pc = (aexpr->bytes[pc] << 8) + (aexpr->bytes[pc + 1]); + else + pc += 2; + if (--sp >= 0) + top = stack[sp]; + break; + + case gdb_agent_op_goto: + pc = (aexpr->bytes[pc] << 8) + (aexpr->bytes[pc + 1]); + break; + + case gdb_agent_op_const8: + /* Flush the cached stack top. */ + stack[sp++] = top; + top = aexpr->bytes[pc++]; + break; + + case gdb_agent_op_const16: + /* Flush the cached stack top. */ + stack[sp++] = top; + top = aexpr->bytes[pc++]; + top = (top << 8) + aexpr->bytes[pc++]; + break; + + case gdb_agent_op_const32: + /* Flush the cached stack top. */ + stack[sp++] = top; + top = aexpr->bytes[pc++]; + top = (top << 8) + aexpr->bytes[pc++]; + top = (top << 8) + aexpr->bytes[pc++]; + top = (top << 8) + aexpr->bytes[pc++]; + break; + + case gdb_agent_op_const64: + /* Flush the cached stack top. */ + stack[sp++] = top; + top = aexpr->bytes[pc++]; + top = (top << 8) + aexpr->bytes[pc++]; + top = (top << 8) + aexpr->bytes[pc++]; + top = (top << 8) + aexpr->bytes[pc++]; + top = (top << 8) + aexpr->bytes[pc++]; + top = (top << 8) + aexpr->bytes[pc++]; + top = (top << 8) + aexpr->bytes[pc++]; + top = (top << 8) + aexpr->bytes[pc++]; + break; + + case gdb_agent_op_reg: + /* Flush the cached stack top. */ + stack[sp++] = top; + arg = aexpr->bytes[pc++]; + arg = (arg << 8) + aexpr->bytes[pc++]; + { + int regnum = arg; + struct regcache *regcache = ctx->regcache; + + switch (register_size (regcache->tdesc, regnum)) + { + case 8: + collect_register (regcache, regnum, cnv.u64.bytes); + top = cnv.u64.val; + break; + case 4: + collect_register (regcache, regnum, cnv.u32.bytes); + top = cnv.u32.val; + break; + case 2: + collect_register (regcache, regnum, cnv.u16.bytes); + top = cnv.u16.val; + break; + case 1: + collect_register (regcache, regnum, cnv.u8.bytes); + top = cnv.u8.val; + break; + default: + internal_error (__FILE__, __LINE__, + "unhandled register size"); + } + } + break; + + case gdb_agent_op_end: + ax_debug ("At end of expression, sp=%d, stack top cache=0x%s", + sp, pulongest (top)); + if (rslt) + { + if (sp <= 0) + { + /* This should be an error */ + ax_debug ("Stack is empty, nothing to return"); + return expr_eval_empty_stack; + } + *rslt = top; + } + return expr_eval_no_error; + + case gdb_agent_op_dup: + stack[sp++] = top; + break; + + case gdb_agent_op_pop: + if (--sp >= 0) + top = stack[sp]; + break; + + case gdb_agent_op_pick: + arg = aexpr->bytes[pc++]; + stack[sp] = top; + top = stack[sp - arg]; + ++sp; + break; + + case gdb_agent_op_rot: + { + ULONGEST tem = stack[sp - 1]; + + stack[sp - 1] = stack[sp - 2]; + stack[sp - 2] = top; + top = tem; + } + break; + + case gdb_agent_op_zero_ext: + arg = aexpr->bytes[pc++]; + if (arg < (sizeof (LONGEST) * 8)) + top &= ((LONGEST) 1 << arg) - 1; + break; + + case gdb_agent_op_swap: + /* Interchange top two stack elements, making sure top gets + copied back onto stack. */ + stack[sp] = top; + top = stack[sp - 1]; + stack[sp - 1] = stack[sp]; + break; + + case gdb_agent_op_getv: + /* Flush the cached stack top. */ + stack[sp++] = top; + arg = aexpr->bytes[pc++]; + arg = (arg << 8) + aexpr->bytes[pc++]; + top = agent_get_trace_state_variable_value (arg); + break; + + case gdb_agent_op_setv: + arg = aexpr->bytes[pc++]; + arg = (arg << 8) + aexpr->bytes[pc++]; + agent_set_trace_state_variable_value (arg, top); + /* Note that we leave the value on the stack, for the + benefit of later/enclosing expressions. */ + break; + + case gdb_agent_op_tracev: + arg = aexpr->bytes[pc++]; + arg = (arg << 8) + aexpr->bytes[pc++]; + agent_tsv_read (ctx, arg); + break; + + case gdb_agent_op_tracenz: + agent_mem_read_string (ctx, NULL, (CORE_ADDR) stack[--sp], + (ULONGEST) top); + if (--sp >= 0) + top = stack[sp]; + break; + + case gdb_agent_op_printf: + { + int nargs, slen, i; + CORE_ADDR fn = 0, chan = 0; + /* Can't have more args than the entire size of the stack. */ + ULONGEST args[STACK_MAX]; + char *format; + + nargs = aexpr->bytes[pc++]; + slen = aexpr->bytes[pc++]; + slen = (slen << 8) + aexpr->bytes[pc++]; + format = (char *) &(aexpr->bytes[pc]); + pc += slen; + /* Pop function and channel. */ + fn = top; + if (--sp >= 0) + top = stack[sp]; + chan = top; + if (--sp >= 0) + top = stack[sp]; + /* Pop arguments into a dedicated array. */ + for (i = 0; i < nargs; ++i) + { + args[i] = top; + if (--sp >= 0) + top = stack[sp]; + } + + /* A bad format string means something is very wrong; give + up immediately. */ + if (format[slen - 1] != '\0') + error (_("Unterminated format string in printf bytecode")); + + ax_printf (fn, chan, format, nargs, args); + } + break; + + /* GDB never (currently) generates any of these ops. */ + case gdb_agent_op_float: + case gdb_agent_op_ref_float: + case gdb_agent_op_ref_double: + case gdb_agent_op_ref_long_double: + case gdb_agent_op_l_to_d: + case gdb_agent_op_d_to_l: + case gdb_agent_op_trace16: + ax_debug ("Agent expression op 0x%x valid, but not handled", + op); + /* If ever GDB generates any of these, we don't have the + option of ignoring. */ + return expr_eval_unhandled_opcode; + + default: + ax_debug ("Agent expression op 0x%x not recognized", op); + /* Don't struggle on, things will just get worse. */ + return expr_eval_unrecognized_opcode; + } + + /* Check for stack badness. */ + if (sp >= (STACK_MAX - 1)) + { + ax_debug ("Expression stack overflow"); + return expr_eval_stack_overflow; + } + + if (sp < 0) + { + ax_debug ("Expression stack underflow"); + return expr_eval_stack_underflow; + } + + ax_debug ("Op %s -> sp=%d, top=0x%s", + gdb_agent_op_name (op), sp, phex_nz (top, 0)); + } +} diff -Nru gdb-9.1/gdbserver/ax.h gdb-10.2/gdbserver/ax.h --- gdb-9.1/gdbserver/ax.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/ax.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,145 @@ +/* Data structures and functions associated with agent expressions in GDB. + Copyright (C) 2009-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef GDBSERVER_AX_H +#define GDBSERVER_AX_H + +#include "regcache.h" + +#ifdef IN_PROCESS_AGENT +#include "gdbsupport/agent.h" +#define debug_threads debug_agent +#endif + +struct traceframe; + +/* Enumeration of the different kinds of things that can happen during + agent expression evaluation. */ + +enum eval_result_type + { + expr_eval_no_error, + expr_eval_empty_expression, + expr_eval_empty_stack, + expr_eval_stack_overflow, + expr_eval_stack_underflow, + expr_eval_unhandled_opcode, + expr_eval_unrecognized_opcode, + expr_eval_divide_by_zero, + expr_eval_invalid_goto + }; + +struct agent_expr +{ + int length; + + unsigned char *bytes; +}; + +#ifndef IN_PROCESS_AGENT + +/* The packet form of an agent expression consists of an 'X', number + of bytes in expression, a comma, and then the bytes. */ +struct agent_expr *gdb_parse_agent_expr (const char **actparm); + +/* Release an agent expression. */ +void gdb_free_agent_expr (struct agent_expr *aexpr); + +/* Convert the bytes of an agent expression back into hex digits, so + they can be printed or uploaded. This allocates the buffer, + callers should free when they are done with it. */ +char *gdb_unparse_agent_expr (struct agent_expr *aexpr); +void emit_prologue (void); +void emit_epilogue (void); +enum eval_result_type compile_bytecodes (struct agent_expr *aexpr); +#endif + +/* The context when evaluating agent expression. */ + +struct eval_agent_expr_context +{ + /* The registers when evaluating agent expression. */ + struct regcache *regcache; + /* The traceframe, if any, when evaluating agent expression. */ + struct traceframe *tframe; + /* The tracepoint, if any, when evaluating agent expression. */ + struct tracepoint *tpoint; +}; + +enum eval_result_type + gdb_eval_agent_expr (struct eval_agent_expr_context *ctx, + struct agent_expr *aexpr, + ULONGEST *rslt); + +/* Bytecode compilation function vector. */ + +struct emit_ops +{ + void (*emit_prologue) (void); + void (*emit_epilogue) (void); + void (*emit_add) (void); + void (*emit_sub) (void); + void (*emit_mul) (void); + void (*emit_lsh) (void); + void (*emit_rsh_signed) (void); + void (*emit_rsh_unsigned) (void); + void (*emit_ext) (int arg); + void (*emit_log_not) (void); + void (*emit_bit_and) (void); + void (*emit_bit_or) (void); + void (*emit_bit_xor) (void); + void (*emit_bit_not) (void); + void (*emit_equal) (void); + void (*emit_less_signed) (void); + void (*emit_less_unsigned) (void); + void (*emit_ref) (int size); + void (*emit_if_goto) (int *offset_p, int *size_p); + void (*emit_goto) (int *offset_p, int *size_p); + void (*write_goto_address) (CORE_ADDR from, CORE_ADDR to, int size); + void (*emit_const) (LONGEST num); + void (*emit_call) (CORE_ADDR fn); + void (*emit_reg) (int reg); + void (*emit_pop) (void); + void (*emit_stack_flush) (void); + void (*emit_zero_ext) (int arg); + void (*emit_swap) (void); + void (*emit_stack_adjust) (int n); + + /* Emit code for a generic function that takes one fixed integer + argument and returns a 64-bit int (for instance, tsv getter). */ + void (*emit_int_call_1) (CORE_ADDR fn, int arg1); + + /* Emit code for a generic function that takes one fixed integer + argument and a 64-bit int from the top of the stack, and returns + nothing (for instance, tsv setter). */ + void (*emit_void_call_2) (CORE_ADDR fn, int arg1); + + /* Emit code specialized for common combinations of compare followed + by a goto. */ + void (*emit_eq_goto) (int *offset_p, int *size_p); + void (*emit_ne_goto) (int *offset_p, int *size_p); + void (*emit_lt_goto) (int *offset_p, int *size_p); + void (*emit_le_goto) (int *offset_p, int *size_p); + void (*emit_gt_goto) (int *offset_p, int *size_p); + void (*emit_ge_goto) (int *offset_p, int *size_p); +}; + +extern CORE_ADDR current_insn_ptr; +extern int emit_error; + +#endif /* GDBSERVER_AX_H */ diff -Nru gdb-9.1/gdbserver/ChangeLog gdb-10.2/gdbserver/ChangeLog --- gdb-9.1/gdbserver/ChangeLog 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/ChangeLog 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,22347 @@ +2021-01-01 Joel Brobecker <brobecker@adacore.com> + + * server.cc (gdbserver_version): Update copyright year. + * gdbreplay.cc (gdbreplay_version): Likewise. + +2020-10-07 Anton Kolesov <anton.kolesov@synopsys.com> + + * configure.srv: Support ARC architecture. + * Makefile.in: Add linux-arc-low.cc and arch/arc.o. + * linux-arc-low.cc: New file. + +2020-09-23 Hannes Domani <ssbssa@yahoo.de> + + * win32-low.cc: Remove local wow64_process variable. + * win32-low.h: Remove local wow64_process variable. + +2020-09-10 Kamil Rytarowski <n54@gmx.com> + + * netbsd-low.cc: Add. + * netbsd-low.h: Likewise. + * netbsd-amd64-low.cc: Likewise. + * Makefile.in (SFILES): Register "netbsd-low.cc", "netbsd-low.h", + "netbsd-amd64-low.cc". + * configure.srv: Add x86_64-*-netbsd*. + +2020-08-13 Simon Marchi <simon.marchi@polymtl.ca> + + * server.cc (captured_main): Accept multiple `--selftest=` + options. Pass all `--selftest=` arguments to run_tests. + +2020-07-30 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + * configure, config.in: Regenerate. + +2020-07-26 Eli Zaretskii <eliz@gnu.org> + + * configure.ac (AC_CHECK_HEADERS): Add ws2tcpip.h. + When checking whether socklen_t type is defined, use ws2tcpip.h if + it is available and sys/socket.h isn't. + * configure: Regenerate. + * config.in: Regenerate. + +2020-07-22 Pedro Alves <pedro@palves.net> + + * inferiors.cc (switch_to_process): New, moved here from + thread-db.cc, and made extern. + * inferiors.h (switch_to_process): Declare. + * server.cc: Include "gdbsupport/scoped_restore.h". + (handle_qxfer_threads_proper): Now returns bool. Prepare to + access memory around target calls. + (handle_qxfer_threads): Handle errors. + * thread-db.cc (switch_to_process): Moved to inferiors.cc. + +2020-07-21 Simon Marchi <simon.marchi@efficios.com> + + * linux-low.cc (stopped_pids): Make static. + +2020-07-17 Andrew Burgess <andrew.burgess@embecosm.com> + + * tdesc.cc (allocate_target_description): Add header comment. + (target_desc_deleter::operator()): New function. + * tdesc.h (struct target_desc): Declare as final. + +2020-07-13 Simon Marchi <simon.marchi@polymtl.ca> + + * server.cc (handle_query): Use std::vector of + std::string for `qsupported` vector. Use separate + vector for unknowns. + * target.h (class process_stratum_target) <process_qsupported>: + Change parameters to array_view of const char *. + (target_process_qsupported): Remove `count` parameter. + * target.cc (process_stratum_target::process_qsupported): Change + parameters to array_view of const char *. + * linux-x86-low.cc (class x86_target) <process_qsupported>: + Likewise. + +2020-06-29 Tom de Vries <tdevries@suse.de> + + * ax.h: Include gdbsupport/debug_agent.h. + +2020-06-23 Andrew Burgess <andrew.burgess@embecosm.com> + + * tdesc.cc (struct tdesc_compatible_info): New struct. + (tdesc_compatible_info_list): New function. + (tdesc_compatible_info_arch_name): New function. + +2020-06-22 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Use std::list to stop pending signal instead of manually-created + linked list. + * linux-low.h: Include <list>. + (struct pending_signal): Move here from linux-low.cc. + (struct lwp_info) <pending_signals> + <pending_signals_to_report>: Update the type. + * linux-low.cc (struct pending_signals): Remove. + (linux_process_target::delete_lwp) + (linux_process_target::add_lwp) + (enqueue_one_deferred_signal) + (dequeue_one_deferred_signal) + (enqueue_pending_signal) + (linux_process_target::resume_one_lwp_throw) + (linux_process_target::thread_needs_step_over) + (linux_process_target::resume_one_thread) + (linux_process_target::proceed_one_lwp): Update the use of pending + signal list. + +2020-06-17 Simon Marchi <simon.marchi@efficios.com> + + * Makefile.in (%-generated.cc: ../gdb/regformats/arm/%.dat): + Remove. + +2020-06-12 Simon Marchi <simon.marchi@efficios.com> + + * Makefile.in (SFILES): Remove win32-arm-low.cc, wincecompat.cc. + * configure.srv: Remove mingw32ce cases. + * server.h, win32-low.cc: Remove __MINGW32CE__-guarded code. + * win32-low.h (to_back_slashes): Remove. + * win32-arm-low.cc, wincecompat.cc, wincecompat.h: Remove. + +2020-06-12 Simon Marchi <simon.marchi@efficios.com> + + * Makefile.in (SFILES): linux-tile-low.cc. + * configure.srv: Remove tilegx case. + * linux-tile-low.cc: Remove. + +2020-06-12 Simon Marchi <simon.marchi@efficios.com> + + * Makefile.in (SFILES): Remove linux-m32r-low.cc. + * configure.srv: Remove m32r case. + * linux-m32r-low.cc: Remove. + +2020-06-12 Simon Marchi <simon.marchi@efficios.com> + + * Makefile.in (SFILES): Remove linux-cris-low.c. + * configure.srv: Remove cris cases. + * linux-cris-low.cc, linux-crisv32-low.cc: Remove. + +2020-06-12 Simon Marchi <simon.marchi@efficios.com> + + * Makefile.in (SFILES): Remove linux-bfin-low.c. + * configure.srv: Remove bfin case. + * linux-bfin-low.cc: Remove. + * linux-low.cc: Remove BFIN-conditional code. + +2020-06-12 Simon Marchi <simon.marchi@efficios.com> + + * configure: Re-generate. + * configure.ac: Remove srv_qnx test. + * configure.srv: Remove nto case. + * nto-low.cc, nto-low.h, nto-x86-low.cc: Remove. + * remote-utils.c: Remove __QNX__-guarded code. + +2020-06-12 Simon Marchi <simon.marchi@efficios.com> + + * configure: Re-generate. + * configure.ac: Remove srv_lynxos test. + * configure.srv: Remove lynxos cases. + * lynx-i386-low.cc, lynx-low.cc, lynx-low.h, lynx-ppc-low.c: + Remove. + +2020-06-12 Simon Marchi <simon.marchi@efficios.com> + + * README: Fix a few outdated or incoherent things. + +2020-05-27 Hannes Domani <ssbssa@yahoo.de> + + * win32-low.cc (do_initial_child_stuff): Set open_process_used. + (win32_clear_inferiors): Use open_process_used. + (get_child_debug_event): Likewise. + +2020-05-25 Michael Weghorn <m.weghorn@posteo.de> + + PR gdbserver/25893 + * linux-low.cc (linux_process_target::create_inferior), + lynx-low.cc (lynx_process_target::create_inferior), + win32-low.cc (win32_process_target::create_inferior): Use + construct_inferior_arguments instead of stringify_argv + to get string representation which properly escapes + special characters. + * server.cc (handle_v_run): Just pass empty program arg + as such, since any further processing is now handled via + construct_inferior_arguments. + +2020-05-25 Michael Weghorn <m.weghorn@posteo.de> + + * nto-low.cc (nto_process_target::create_inferior): Pass + argv to spawnp function as char **. + +2020-05-25 Michael Weghorn <m.weghorn@posteo.de> + + * server.cc (captured_main), (handle_v_run): No longer + insert extra NULL element to args vector. + +2020-05-23 Pedro Alves <palves@redhat.com> + + * gdb-safe-ctype.h: New. + +2020-05-16 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + * linux-ia64-low.cc (ia64_target::sw_breakpoint_from_kind): + Fix incorrect 'gdb_assert_no_reached' to 'gdb_assert_not_reached'. + (ia64_target::low_breakpoint_at): Ditto. + +2020-05-15 Hannes Domani <ssbssa@yahoo.de> + + * win32-i386-low.cc (i386_supports_z_point_type): Handle + Z_PACKET_HW_BP z_type. + (i386_insert_point): Handle raw_bkpt_type type. + (i386_remove_point): Likewise. + +2020-04-30 Hannes Domani <ssbssa@yahoo.de> + + * configure.srv <x86_64-*-mingw*, x86_64-*-cygwin*> (srv_tgtobj): + Add arch/i386.o. + * win32-arm-low.cc (arm_num_regs): New function. + (struct win32_target_ops): Use arm_num_regs. + * win32-i386-low.cc (win32_get_current_dr): Adapt for WOW64 + processes. + (i386_get_thread_context): Likewise. + (i386_prepare_to_resume): Likewise. + (i386_thread_added): Likewise. + (i386_single_step): Likewise. + (i386_fetch_inferior_register): Likewise. + (i386_store_inferior_register): Likewise. + (i386_arch_setup): Likewise. + (i386_win32_num_regs): New function. + (struct win32_target_ops): Use i386_win32_num_regs. + * win32-low.cc (win32_get_thread_context): Adapt for WOW64 + processes. + (win32_require_context): Likewise. + (child_add_thread): Likewise. + (do_initial_child_stuff): Likewise. + (continue_one_thread): Likewise. + (win32_process_target::resume): Likewise. + (load_psapi): Likewise. + (win32_add_all_dlls): Likewise. + (maybe_adjust_pc): Likewise. + (win32_process_target::qxfer_siginfo): Likewise. + (initialize_low): Likewise. + * win32-low.h (struct win32_target_ops): Change num_regs to + callback function. + +2020-04-27 Simon Marchi <simon.marchi@efficios.com> + + * configure.ac: Remove check for fs_base/gs_base in + user_regs_struct. + * configure: Re-generate. + * config.in: Re-generate. + * linux-x86-low.cc (x86_64_regmap, x86_fill_gregset, + x86_store_gregset): Adjust. + +2020-04-22 Hannes Domani <ssbssa@yahoo.de> + + * server.cc (handle_search_memory_1): Fix gdb_read_memory return value + comparison. + +2020-04-16 Tom Tromey <tromey@adacore.com> + + * win32-low.cc (windows_nat::handle_access_violation): New + function. + +2020-04-15 Simon Marchi <simon.marchi@polymtl.ca> + + * win32-low.cc (get_child_debug_event): Fix format string warning. + +2020-04-13 Tom Tromey <tom@tromey.com> + + * server.h (gdb_fildes_t): Remove typedef. + * remote-utils.c (remote_desc, list_desc): Now int. + (INVALID_DESCRIPTOR): Remove. + (gdb_connected, remote_close) + (check_remote_input_interrupt_request): Update. + * utils.h (pfildes): Don't declare. + * utils.c (pfildes): Remove. + +2020-04-13 Tom Tromey <tom@tromey.com> + + * server.h (handle_serial_event, handle_target_event): Update. + * server.c: Don't call initialize_event_loop. + (keep_processing_events): New global. + (handle_serial_event): Return void. Set keep_processing_events. + (handle_target_event): Return void. + (start_event_loop): Move from event-loop.c. Rewrite. + * remote-utils.c (handle_accept_event): Return void. + (reset_readchar): Use delete_timer. + (process_remaining): Return void. + (reschedule): Use create_timer. + * event-loop.h: Remove. + * event-loop.cc: Remove. + * Makefile.in (OBS): Use gdbsupport/event-loop.o, not event-loop.o. + +2020-04-13 Tom Tromey <tom@tromey.com> + + * server.c (invoke_async_signal_handlers) + (check_async_event_handlers, flush_streams, gdb_select): New + functions. + +2020-04-13 Tom Tromey <tom@tromey.com> + + * configure: Rebuild. + * config.in: Rebuild. + +2020-04-08 Tom Tromey <tromey@adacore.com> + + PR gdb/22992 + * win32-low.c (child_continue): Call matching_pending_stop. + (get_child_debug_event): Call fetch_pending_stop. Push pending + stop when needed. + +2020-04-08 Tom Tromey <tromey@adacore.com> + + * win32-low.h (win32_process_target::stopped_by_sw_breakpoint) + (win32_process_target::supports_stopped_by_sw_breakpoint): + Declare. + * win32-low.c (win32_supports_z_point_type): Always handle + Z_PACKET_SW_BP. + (win32_insert_point): Call insert_memory_breakpoint when needed. + (win32_remove_point): Call remove_memory_breakpoint when needed. + (win32_process_target::stopped_by_sw_breakpoint) + (win32_process_target::supports_stopped_by_sw_breakpoint): New + methods. + (win32_target_ops): Update. + (maybe_adjust_pc): New function. + (win32_wait): Call maybe_adjust_pc. + +2020-04-08 Tom Tromey <tromey@adacore.com> + + * win32-low.h (struct win32_target_ops) <decr_pc_after_break>: New + field. + * win32-i386-low.c (the_low_target): Update. + * win32-arm-low.c (the_low_target): Update. + +2020-04-08 Tom Tromey <tromey@adacore.com> + + * win32-low.h (win32_process_target::read_pc) + (win32_process_target::write_pc): Declare. + * win32-low.c (win32_process_target::read_pc) + (win32_process_target::write_pc): New methods. + * win32-i386-low.c (i386_win32_get_pc, i386_win32_set_pc): New + functions. + (the_low_target): Update. + * win32-arm-low.c (arm_win32_get_pc, arm_win32_set_pc): New + functions. + (the_low_target): Update. + +2020-04-08 Tom Tromey <tromey@adacore.com> + + * win32-low.c (win32_kill, get_child_debug_event): Use + wait_for_debug_event. + +2020-04-08 Tom Tromey <tromey@adacore.com> + + * win32-low.c (child_continue): Call continue_last_debug_event. + +2020-04-08 Tom Tromey <tromey@adacore.com> + + * win32-low.c (handle_exception): Remove. + (windows_nat::handle_ms_vc_exception): New function. + (get_child_debug_event): Add "continue_status" parameter. + Update. + (win32_wait): Update. + +2020-04-08 Tom Tromey <tromey@adacore.com> + + * win32-low.c (windows_nat::handle_load_dll): Rename from + handle_load_dll. No longer static. + (windows_nat::handle_unload_dll): Rename from handle_unload_dll. + No longer static. + +2020-04-08 Tom Tromey <tromey@adacore.com> + + * win32-low.c (handle_output_debug_string): Add parameter. Change + return type. + (win32_kill, get_child_debug_event): Update. + +2020-04-08 Tom Tromey <tromey@adacore.com> + + * win32-low.c (current_process_handle, current_process_id) + (main_thread_id, last_sig, current_event, siginfo_er): Move to + nat/windows-nat.c. + +2020-04-08 Tom Tromey <tromey@adacore.com> + + * win32-low.c (get_image_name): Remove. + (handle_load_dll): Update. + +2020-04-08 Tom Tromey <tromey@adacore.com> + + * win32-low.c (windows_nat::thread_rec): Rename from thread_rec. + No longer static. Change parameters. + (child_add_thread, child_fetch_inferior_registers) + (child_store_inferior_registers, win32_resume) + (win32_get_tib_address): Update. + +2020-04-08 Tom Tromey <tromey@adacore.com> + + * win32-low.h (struct win32_target_ops): Use qualified names where + needed. + * win32-i386-low.c: Add "using namespace". + * win32-low.c: Add "using namespace". + * win32-arm-low.c: Add "using namespace". + +2020-04-08 Tom Tromey <tromey@adacore.com> + + * win32-low.c (delete_thread_info): Don't call CloseHandle. + +2020-04-08 Tom Tromey <tromey@adacore.com> + + * win32-low.c (win32_require_context, suspend_one_thread): Use + windows_thread_info::suspend. + (continue_one_thread): Use windows_thread_info::resume. + * configure.srv (srv_tgtobj): Add windows-nat.o when needed. + +2020-04-08 Tom Tromey <tromey@adacore.com> + + * win32-i386-low.c (update_debug_registers) + (i386_prepare_to_resume, i386_thread_added): Update. + +2020-04-08 Tom Tromey <tromey@adacore.com> + + * win32-low.c (child_add_thread): Use new. + (delete_thread_info): Use delete. + +2020-04-08 Tom Tromey <tromey@adacore.com> + + * win32-low.h (struct windows_thread_info): Remove. + +2020-04-08 Tom Tromey <tromey@adacore.com> + + * win32-low.h (struct windows_thread_info): Rename from + win32_thread_info. Remove typedef. + (struct win32_target_ops, win32_require_context): Update. + * win32-low.c (win32_get_thread_context) + (win32_set_thread_context, win32_prepare_to_resume) + (win32_require_context, thread_rec, child_add_thread) + (delete_thread_info, continue_one_thread) + (child_fetch_inferior_registers, child_store_inferior_registers) + (win32_resume, suspend_one_thread, win32_get_tib_address): + Update. + * win32-i386-low.c (update_debug_registers) + (win32_get_current_dr, i386_get_thread_context) + (i386_prepare_to_resume, i386_thread_added, i386_single_step) + (i386_fetch_inferior_register, i386_store_inferior_register): + Update. + * win32-arm-low.c (arm_get_thread_context) + (arm_fetch_inferior_register, arm_store_inferior_register): + Update. + +2020-04-02 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + * linux-low.h (struct linux_target_ops): Remove. + (the_low_target): Remove. + * linux-x86-low.cc (the_low_target): Remove. + * linux-aarch64-low.cc (the_low_target): Ditto. + * linux-arm-low.cc (the_low_target): Ditto. + * linux-bfin-low.cc (the_low_target): Ditto. + * linux-cris-low.cc (the_low_target): Ditto. + * linux-crisv32-low.cc (the_low_target): Ditto. + * linux-ia64-low.cc (the_low_target): Ditto. + * linux-m32r-low.cc (the_low_target): Ditto. + * linux-m68k-low.cc (the_low_target): Ditto. + * linux-mips-low.cc (the_low_target): Ditto. + * linux-nios2-low.cc (the_low_target): Ditto. + * linux-ppc-low.cc (the_low_target): Ditto. + * linux-riscv-low.cc (the_low_target): Ditto. + * linux-s390-low.cc (the_low_target): Ditto. + * linux-sh-low.cc (the_low_target): Ditto. + * linux-sparc-low.cc (the_low_target): Ditto. + * linux-tic6x-low.cc (the_low_target): Ditto. + * linux-tile-low.cc (the_low_target): Ditto. + * linux-xtensa-low.cc (the_low_target): Ditto. + +2020-04-02 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Remove the 'get_ipa_tdesc_idx' linux target op and let a concrete + linux target define the op by overriding the declaration in + process_stratum_target. + + * linux-low.h (struct linux_target_ops): Remove the op. + (class linux_process_target) <get_ipa_tdesc_idx>: Remove. + * linux-low.cc (linux_process_target::get_ipa_tdesc_idx): Remove. + * linux-x86-low.cc (class x86_target) <get_ipa_tdesc_idx>: Declare. + (x86_get_ipa_tdesc_idx): Turn into... + (x86_target::get_ipa_tdesc_idx): ...this. + (the_low_target): Remove the op field. + * linux-ppc-low.cc (class ppc_target) <get_ipa_tdesc_idx>: Declare. + (ppc_get_ipa_tdesc_idx): Turn into... + (ppc_target::get_ipa_tdesc_idx): ...this. + (the_low_target): Remove the op field. + * linux-s390-low.cc (class s390_target) <get_ipa_tdesc_idx>: Declare. + (s390_get_ipa_tdesc_idx): Turn into... + (s390_target::get_ipa_tdesc_idx): ...this. + (the_low_target): Remove the op field. + +2020-04-02 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Turn the 'get_syscall_trapinfo' linux target op into a method + of process_stratum_target. + + * linux-low.h (struct linux_target_ops): Remove the op. + (class linux_process_target) <get_syscall_trapinfo> + <gdb_catch_this_syscall> + <low_supports_catch_syscall> + <low_get_syscall_trapinfo>: Declare. + * linux-low.cc (get_syscall_trapinfo): Turn into... + (linux_process_target::get_syscall_trapinfo): ...this. + (linux_process_target::low_get_syscall_trapinfo): Define. + (gdb_catch_this_syscall_p): Turn into... + (linux_process_target::gdb_catch_this_syscall): ...this. + (linux_process_target::low_supports_catch_syscall): Define. + + Update the callers below. + + (linux_process_target::wait_1) + (linux_process_target::supports_catch_syscall) + + * linux-x86-low.cc (class x86_target) <low_supports_catch_syscall> + <low_get_syscall_trapinfo>: Declare. + (x86_target::low_supports_catch_syscall): Define. + (x86_get_syscall_trapinfo): Turn into... + (x86_target::low_get_syscall_trapinfo): ...this. + (the_low_target): Remove the op field. + * linux-aarch64-low.cc (class aarch64_target) + <low_supports_catch_syscall> + <low_get_syscall_trapinfo>: Declare. + (aarch64_target::low_supports_catch_syscall): Define. + (aarch64_get_syscall_trapinfo): Turn into... + (aarch64_target::low_get_syscall_trapinfo): ...this. + (the_low_target): Remove the op field. + * linux-arm-low.cc (class arm_target) <low_supports_catch_syscall> + <low_get_syscall_trapinfo>: Declare. + (arm_target::low_supports_catch_syscall): Define. + (arm_get_syscall_trapinfo): Turn into... + (arm_target::low_get_syscall_trapinfo): ...this. + (the_low_target): Remove the op field. + * linux-ppc-low.cc (the_low_target): Remove the op field. + * linux-s390-low.cc (the_low_target): Remove the op field. + +2020-04-02 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Remove the 'supports_hardware_single_step' linux target op and + override the process_stratum_target's op definition in + linux_process_target to return true. + + * linux-low.h (struct linux_target_ops): Remove the op. + (class linux_process_target) <finish_step_over> + <maybe_hw_step>: Declare. + * linux-low.cc (can_hardware_single_step): Remove. + (maybe_hw_step): Turn into... + (linux_process_target::maybe_hw_step): ...this. + (finish_step_over): Turn into... + (linux_process_target::finish_step_over): ...this. + (linux_process_target::supports_hardware_single_step): Update + to return true. + + Update the callers below. + + (linux_process_target::single_step) + (linux_process_target::resume_one_lwp_throw) + + * linux-arm-low.cc (class arm_target) + <supports_hardware_single_step>: Declare. + (arm_supports_hardware_single_step): Turn into... + (arm_target::supports_hardware_single_step): ...this. + (the_low_target): Remove the op field. + * linux-x86-low.cc (x86_supports_hardware_single_step): Remove. + (the_low_target): Remove the op field. + * linux-aarch64-low.cc (aarch64_supports_hardware_single_step): + Remove. + (the_low_target): Remove the op field. + * linux-bfin-low.cc (bfin_supports_hardware_single_step): Remove. + (the_low_target): Remove the op field. + * linux-crisv32-low.cc (cris_supports_hardware_single_step): Remove. + (the_low_target): Remove the op field. + * linux-m32r-low.cc (m32r_supports_hardware_single_step): Remove. + (the_low_target): Remove the op field. + * linux-m68k-low.cc (m68k_supports_hardware_single_step): Remove. + (the_low_target): Remove the op field. + * linux-ppc-low.cc (ppc_supports_hardware_single_step): Remove. + (the_low_target): Remove the op field. + * linux-s390-low.cc (s390_supports_hardware_single_step): Remove. + (the_low_target): Remove the op field. + * linux-sh-low.cc (sh_supports_hardware_single_step): Remove. + (the_low_target): Remove the op field. + * linux-tic6x-low.cc (tic6x_supports_hardware_single_step): Remove. + (the_low_target): Remove the op field. + * linux-tile-low.cc (tile_supports_hardware_single_step): Remove. + (the_low_target): Remove the op field. + * linux-xtensa-low.cc (xtensa_supports_hardware_single_step): + Remove. + (the_low_target): Remove the op field. + +2020-04-02 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Turn the 'supports_range_stepping' linux target op into a method + of linux_process_target. + + * linux-low.h (struct linux_target_ops): Remove the op. + (class linux_process_target) <low_supports_range_stepping>: Declare. + * linux-low.cc (linux_process_target::low_supports_range_stepping): + Define. + (linux_process_target::supports_range_stepping): Update the call + site. + * linux-x86-low.cc (class x86_target) + <low_supports_range_stepping>: Declare. + (x86_supports_range_stepping): Turn into... + (x86_target::low_supports_range_stepping): ...this. + (the_low_target): Remove the op field. + * linux-aarch64-low.cc (class aarch64_target) + <low_supports_range_stepping>: Declare. + (aarch64_supports_range_stepping): Turn into... + (aarch64_target::low_supports_range_stepping): ...this. + (the_low_target): Remove the op field. + * linux-arm-low.cc (the_low_target): Remove the op field. + * linux-bfin-low.cc (the_low_target): Ditto. + * linux-crisv32-low.cc (the_low_target): Ditto. + * linux-m32r-low.cc (the_low_target): Ditto. + * linux-m68k-low.cc (the_low_target): Ditto. + * linux-ppc-low.cc (the_low_target): Ditto. + * linux-s390-low.cc (the_low_target): Ditto. + * linux-sh-low.cc (the_low_target): Ditto. + * linux-tic6x-low.cc (the_low_target): Ditto. + * linux-tile-low.cc (the_low_target): Ditto. + * linux-xtensa-low.cc (the_low_target): Ditto. + +2020-04-02 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Remove the 'emit_ops' linux target ops and let the concrete + linux target define the op by overriding the declaration of + process_stratum_target. + + * linux-low.h (struct linux_target_ops): Remove the op. + (class linux_process_target) <emit_ops>: Remove. + * linux-low.cc (linux_process_target::emit_ops): Remove. + * linux-x86-low.cc (class x86_target) <emit_ops>: Declare. + (x86_emit_ops): Turn into... + (x86_target::emit_ops): ...this. + (the_low_target): Remove the op field. + * linux-aarch64-low.cc (class aarch64_target) <emit_ops>: Declare. + (aarch64_emit_ops): Turn into... + (aarch64_target::emit_ops): ...this. + (the_low_target): Remove the op field. + * linux-ppc-low.cc (class ppc_target) <emit_ops>: Declare. + (ppc_emit_ops): Turn into... + (ppc_target::emit_ops): ...this. + (the_low_target): Remove the op field. + * linux-s390-low.cc (class s390_target) <emit_ops>: Declare. + (s390_emit_ops): Turn into... + (s390_target::emit_ops): ...this. + (the_low_target): Remove the op field. + * linux-arm-low.cc (the_low_target): Remove the op field. + * linux-bfin-low.cc (the_low_target): Ditto. + * linux-crisv32-low.cc (the_low_target): Ditto. + * linux-m32r-low.cc (the_low_target): Ditto. + * linux-m68k-low.cc (the_low_target): Ditto. + * linux-sh-low.cc (the_low_target): Ditto. + * linux-tic6x-low.cc (the_low_target): Ditto. + * linux-tile-low.cc (the_low_target): Ditto. + * linux-xtensa-low.cc (the_low_target): Ditto. + +2020-04-02 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Remove the 'install_fast_tracepoint_jump_pad' and + 'get_min_fast_tracepoint_insn_len' linux target ops to let the + concrete linux target define the ops by overriding the declarations + of process_stratum_target. + + * linux-low.h (struct linux_target_ops): Remove the ops. + (class linux_process_target) <supports_fast_tracepoints> + <install_fast_tracepoint_jump_pad> + <get_min_fast_tracepoint_insn_len>: Remove. + * linux-low.cc (linux_process_target::supports_fast_tracepoints) + (linux_process_target::install_fast_tracepoint_jump_pad) + (linux_process_target::get_min_fast_tracepoint_insn_len): Remove. + * linux-x86-low.cc (class x86_target) <supports_fast_tracepoints> + <install_fast_tracepoint_jump_pad> + <get_min_fast_tracepoint_insn_len>: Declare. + (x86_target::supports_fast_tracepoints): Define. + (x86_install_fast_tracepoint_jump_pad): Turn into... + (x86_target::install_fast_tracepoint_jump_pad): ...this. + (x86_get_min_fast_tracepoint_insn_len): Turn into... + (x86_target::get_min_fast_tracepoint_insn_len): ...this. + (the_low_target): Remove the op fields. + * linux-aarch64-low.cc (class aarch64_target) + <supports_fast_tracepoints> + <install_fast_tracepoint_jump_pad> + <get_min_fast_tracepoint_insn_len>: Declare. + (aarch64_target::supports_fast_tracepoints): Define. + (aarch64_install_fast_tracepoint_jump_pad): Turn into... + (aarch64_target::install_fast_tracepoint_jump_pad): ...this. + (aarch64_get_min_fast_tracepoint_insn_len): Turn into... + (aarch64_target::get_min_fast_tracepoint_insn_len): ...this. + (the_low_target): Remove the op fields. + * linux-ppc-low.cc (class ppc_target) <supports_fast_tracepoints> + <install_fast_tracepoint_jump_pad> + <get_min_fast_tracepoint_insn_len>: Declare. + (ppc_target::supports_fast_tracepoints): Define. + (ppc_install_fast_tracepoint_jump_pad): Turn into... + (ppc_target::install_fast_tracepoint_jump_pad): ...this. + (ppc_get_min_fast_tracepoint_insn_len): Turn into... + (ppc_target::get_min_fast_tracepoint_insn_len): ...this. + (the_low_target): Remove the op fields. + * linux-s390-low.cc (class s390_target) <supports_fast_tracepoints> + <install_fast_tracepoint_jump_pad> + <get_min_fast_tracepoint_insn_len>: Declare. + (s390_target::supports_fast_tracepoints): Define. + (s390_install_fast_tracepoint_jump_pad): Turn into... + (s390_target::install_fast_tracepoint_jump_pad): ...this. + (s390_get_min_fast_tracepoint_insn_len): Turn into... + (s390_target::get_min_fast_tracepoint_insn_len): ...this. + (the_low_target): Remove the op fields. + * linux-arm-low.cc (the_low_target): Remove the op fields. + * linux-bfin-low.cc (the_low_target): Ditto. + * linux-crisv32-low.cc (the_low_target): Ditto. + * linux-m32r-low.cc (the_low_target): Ditto. + * linux-m68k-low.cc (the_low_target): Ditto. + * linux-sh-low.cc (the_low_target): Ditto. + * linux-tic6x-low.cc (the_low_target): Ditto. + * linux-tile-low.cc (the_low_target): Ditto. + * linux-xtensa-low.cc (the_low_target): Ditto. + +2020-04-02 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Turn the 'get_thread_area' linux target op into a method of + process_stratum_target. + + * linux-low.h (struct linux_target_ops): Remove the op. + (class linux_process_target) <stuck_in_jump_pad> + <linux_fast_tracepoint_collecting> + <low_get_thread_area>: Declare. + * linux-low.cc (supports_fast_tracepoints): Remove. + (linux_fast_tracepoint_collecting): Turn into... + (linux_process_target::linux_fast_tracepoint_collecting): ...this. + (linux_process_target::low_get_thread_area): Define. + (stuck_in_jump_pad_callback): Turn into... + (linux_process_target::stuck_in_jump_pad): ...this. + + Update the caller below. + + (linux_process_target::stabilize_threads) + + * linux-x86-low.cc (class x86_target) <low_get_thread_area>: + Declare. + (x86_get_thread_area): Turn into... + (x86_target::low_get_thread_area): ...this. + (the_low_target): Remove the op field. + * linux-aarch64-low.cc (class aarch64_target) <low_get_thread_area>: + Declare. + (aarch64_get_thread_area): Turn into... + (aarch64_target::low_get_thread_area): ...this. + (the_low_target): Remove the op field. + * linux-ppc-low.cc (class ppc_target) <low_get_thread_area>: + Declare. + (ppc_get_thread_area): Turn into... + (ppc_target::low_get_thread_area): ...this. + (the_low_target): Remove the op field. + * linux-s390-low.cc (class s390_target) <low_get_thread_area>: + Declare. + (s390_get_thread_area): Turn into... + (s390_target::low_get_thread_area): ...this. + (the_low_target): Remove the op field. + * linux-arm-low.cc (the_low_target): Remove the op field. + * linux-bfin-low.cc (the_low_target): Ditto. + * linux-crisv32-low.cc (the_low_target): Ditto. + * linux-m32r-low.cc (the_low_target): Ditto. + * linux-m68k-low.cc (the_low_target): Ditto. + * linux-sh-low.cc (the_low_target): Ditto. + * linux-tic6x-low.cc (the_low_target): Ditto. + * linux-tile-low.cc (the_low_target): Ditto. + * linux-xtensa-low.cc (the_low_target): Ditto. + +2020-04-02 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Remote the 'supports_tracepoints' linux target op and let the + concrete linux target define it by overriding the op declared in + process_stratum_target. + + * linux-low.h (struct linux_target_ops): Remove the op. + (class linux_process_target) <supports_tracepoints>: Remove. + * linux-low.cc (linux_process_target::supports_tracepoints): Remove. + * linux-x86-low.cc (class x86_target) <supports_tracepoints>: + Declare. + (x86_supports_tracepoints): Turn into... + (x86_target::supports_tracepoints): ...this. + (the_low_target): Remove the op field. + * linux-aarch64-low.cc (class aarch64_target) + <supports_tracepoints>: Declare. + (aarch64_supports_tracepoints): Turn into... + (aarch64_target::supports_tracepoints): ...this. + (the_low_target): Remove the op field. + * linux-ppc-low.cc (class ppc_target) <supports_tracepoints>: + Declare. + (ppc_supports_tracepoints): Turn into... + (ppc_target::supports_tracepoints): ...this. + (the_low_target): Remove the op field. + * linux-s390-low.cc (class s390_target) <supports_tracepoints>: + Declare. + (s390_supports_tracepoints): Turn into... + (s390_target::supports_tracepoints): ...this. + (the_low_target): Remove the op field. + * linux-arm-low.cc (the_low_target): Remove the op field. + * linux-bfin-low.cc (the_low_target): Ditto. + * linux-crisv32-low.cc (the_low_target): Ditto. + * linux-m32r-low.cc (the_low_target): Ditto. + * linux-m68k-low.cc (the_low_target): Ditto. + * linux-sh-low.cc (the_low_target): Ditto. + * linux-tic6x-low.cc (the_low_target): Ditto. + * linux-tile-low.cc (the_low_target): Ditto. + * linux-xtensa-low.cc (the_low_target): Ditto. + +2020-04-02 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Remove the 'process_qsupported' linux target op and let a concrete + linux target define the op by overriding the op declaration in + process_stratum_target. + + * linux-low.h (struct linux_target_ops): Remove the op. + (class linux_process_target) <process_qsupported>: Remove. + * linux-low.cc (linux_process_target::process_qsupported): Remove. + * linux-x86-low.cc (class x86_target) <process_qsupported>: Declare. + (x86_linux_process_qsupported): Turn into... + (x86_target::process_qsupported): ...this. + (the_low_target): Remove the op field. + * linux-aarch64-low.cc (the_low_target): Remove the op + field. + * linux-arm-low.cc (the_low_target): Ditto. + * linux-bfin-low.cc (the_low_target): Ditto. + * linux-crisv32-low.cc (the_low_target): Ditto. + * linux-m32r-low.cc (the_low_target): Ditto. + * linux-m68k-low.cc (the_low_target): Ditto. + * linux-ppc-low.cc (the_low_target): Ditto. + * linux-s390-low.cc (the_low_target): Ditto. + * linux-sh-low.cc (the_low_target): Ditto. + * linux-tic6x-low.cc (the_low_target): Ditto. + * linux-tile-low.cc (the_low_target): Ditto. + * linux-xtensa-low.cc (the_low_target): Ditto. + +2020-04-02 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Turn the 'prepare_to_resume' linux target op into a method of + linux_process_target. + + * linux-low.h (struct linux_target_ops): Remove the op. + (class linux_process_target) <low_prepare_to_resume>: Declare. + * linux-low.cc (linux_process_target::low_prepare_to_resume): + Define. + + Update the callers below: + + (linux_process_target::resume_one_lwp_throw) + (linux_process_target::low_prepare_to_resume) + + * linux-x86-low.cc (class x86_target) <low_prepare_to_resume>: + Declare. + (x86_target::low_prepare_to_resume): Define. + (the_low_target): Remove the op field. + * linux-aarch64-low.cc (class aarch64_target) + <low_prepare_to_resume>: Declare. + (aarch64_target::low_prepare_to_resume): Define. + (the_low_target): Remove the op field. + * linux-arm-low.cc (class arm_target) <low_prepare_to_resume>: + Declare. + (arm_prepare_to_resume): Turn into... + (arm_target::low_prepare_to_resume): ...this. + (the_low_target): Remove the op field. + * linux-mips-low.cc (class mips_target) <low_prepare_to_resume>: + Declare. + (mips_linux_prepare_to_resume): Turn into... + (mips_target::low_prepare_to_resume): ...this. + (the_low_target): Remove the op field. + * linux-bfin-low.cc (the_low_target): Remove the op field. + * linux-crisv32-low.cc (the_low_target): Ditto. + * linux-m32r-low.cc (the_low_target): Ditto. + * linux-m68k-low.cc (the_low_target): Ditto. + * linux-ppc-low.cc (the_low_target): Ditto. + * linux-s390-low.cc (the_low_target): Ditto. + * linux-sh-low.cc (the_low_target): Ditto. + * linux-tic6x-low.cc (the_low_target): Ditto. + * linux-tile-low.cc (the_low_target): Ditto. + * linux-xtensa-low.cc (the_low_target): Ditto. + +2020-04-02 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Turn the 'new_process', 'delete_process', 'new_thread', + 'delete_thread', and 'new_fork' linux target ops into methods + of linux_process_target. + + * linux-low.h (struct linux_target_ops): Remove the ops. + (class linux_process_target) <add_linux_process> + <add_lwp> + <delete_lwp> + <attach_lwp> + <detach_one_lwp> + <check_zombie_leaders> + <filter_exit_event> + <low_new_process> + <low_delete_process> + <low_new_thread> + <low_delete_thread> + <low_new_fork>: Declare. + * linux-low.cc (delete_lwp): Turn into... + (linux_process_target::delete_lwp): ...this. + (linux_process_target::low_delete_thread): Define. + (linux_add_process): Turn into... + (linux_process_target::add_linux_process): ...this. + (linux_process_target::low_new_process): Define. + (linux_process_target::low_delete_process): Define. + (linux_process_target::low_new_fork): Define. + (add_lwp): Turn into... + (linux_process_target::add_lwp): ...this. + (linux_process_target::low_new_thread): Define. + (linux_attach_lwp): Turn into... + (linux_process_target::attach_lwp): ...this. + (linux_detach_one_lwp): Turn into... + (linux_process_target::detach_one_lwp): ...this. + (linux_detach_lwp_callback): Remove and inline... + (linux_process_target::detach): ...here. + (check_zombie_leaders): Turn into... + (linux_process_target::check_zombie_leaders): ...this. + (filter_exit_event): Turn into... + (linux_process_target::filter_exit_event): ...this. + + Update the callers below. + + (linux_process_target::handle_extended_wait) + (linux_process_target::create_inferior) + (attach_proc_task_lwp_callback) + (linux_process_target::attach) + (linux_process_target::detach) + (linux_process_target::mourn) + * thread-db.cc (attach_thread) + + * linux-x86-low.cc (class x86_target) <low_new_process> + <low_delete_process> + <low_new_thread> + <low_delete_thread> + <low_new_fork>: Declare. + (x86_linux_new_process): Turn into... + (x86_target::low_new_process): ...this. + (x86_linux_delete_process): Turn into... + (x86_target::low_delete_process): ...this. + (x86_target::low_new_thread): Define. + (x86_target::low_delete_thread): Define. + (x86_linux_new_fork): Turn into... + (x86_target::low_new_fork): ...this. + (the_low_target): Remove the op fields. + * linux-aarch64-low.cc (class aarch64_target) <low_new_process> + <low_delete_process> + <low_new_thread> + <low_delete_thread> + <low_new_fork>: Declare. + (aarch64_linux_new_process): Turn into... + (aarch64_target::low_new_process): ...this. + (aarch64_linux_delete_process): Turn into... + (aarch64_target::low_delete_process): ...this. + (aarch64_target::low_new_thread): Define. + (aarch64_target::low_delete_thread): Define. + (aarch64_linux_new_fork): Turn into... + (aarch64_target::low_new_fork): ...this. + (the_low_target): Remove the op fields. + * linux-arm-low.cc (class arm_target) <low_new_process> + <low_delete_process> + <low_new_thread> + <low_delete_thread> + <low_new_fork>: Declare. + (arm_new_process): Turn into... + (arm_target::low_new_process): ...this. + (arm_delete_process): Turn into... + (arm_target::low_delete_process): ...this. + (arm_new_thread): Turn into... + (arm_target::low_new_thread): ...this. + (arm_delete_thread): Turn into... + (arm_target::low_delete_thread): ...this. + (arm_new_fork): Turn into... + (arm_target::low_new_fork): ...this. + (the_low_target): Remove the op fields. + * linux-mips-low.cc (class mips_target) <low_new_process> + <low_delete_process> + <low_new_thread> + <low_delete_thread> + <low_new_fork>: Declare. + (mips_linux_new_process): Turn into... + (mips_target::low_new_process): ...this. + (mips_linux_delete_process): Turn into... + (mips_target::low_delete_process): ...this. + (mips_linux_new_thread): Turn into... + (mips_target::low_new_thread): ...this. + (mips_linux_delete_thread): Turn into... + (mips_target::low_delete_thread): ...this. + (mips_linux_new_fork): Turn into... + (mips_target::low_new_fork): ...this. + (the_low_target): Remove the op fields. + * linux-bfin-low.cc (the_low_target): Remove the op fields. + * linux-crisv32-low.cc (the_low_target): Ditto. + * linux-m32r-low.cc (the_low_target): Ditto. + * linux-m68k-low.cc (the_low_target): Ditto. + * linux-ppc-low.cc (the_low_target): Ditto. + * linux-s390-low.cc (the_low_target): Ditto. + * linux-sh-low.cc (the_low_target): Ditto. + * linux-tic6x-low.cc (the_low_target): Ditto. + * linux-tile-low.cc (the_low_target): Ditto. + * linux-xtensa-low.cc (the_low_target): Ditto. + +2020-04-02 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Turn the 'siginfo_fixup' linux target op into a method of + linux_process_target. + + * linux-low.h (struct linux_target_ops): Remove the op. + (class linux_process_target) <siginfo_fixup> + <low_siginfo_fixup>: Declare. + * linux-low.cc (siginfo_fixup): Turn into... + (linux_process_target::siginfo_fixup): ...this. + (linux_process_target::low_siginfo_fixup): Define. + * linux-x86-low.cc (class x86_target) <low_siginfo_fixup>: Declare. + (x86_siginfo_fixup): Turn into... + (x86_target::low_siginfo_fixup): ...this. + (the_low_target): Remove the op field. + * linux-aarch64-low.cc (class aarch64_target): + <low_siginfo_fixup>: Declare. + (aarch64_linux_siginfo_fixup): Turn into... + (aarch64_target::low_siginfo_fixup): ...this. + (the_low_target): Remove the op field. + * linux-arm-low.cc (the_low_target): Remove the op field. + * linux-bfin-low.cc (the_low_target): Ditto. + * linux-crisv32-low.cc (the_low_target): Ditto. + * linux-m32r-low.cc (the_low_target): Ditto. + * linux-m68k-low.cc (the_low_target): Ditto. + * linux-mips-low.cc (the_low_target): Ditto. + * linux-ppc-low.cc (the_low_target): Ditto. + * linux-s390-low.cc (the_low_target): Ditto. + * linux-sh-low.cc (the_low_target): Ditto. + * linux-tic6x-low.cc (the_low_target): Ditto. + * linux-tile-low.cc (the_low_target): Ditto. + * linux-xtensa-low.cc (the_low_target): Ditto. + +2020-04-02 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Turn the 'collect_ptrace_register' and 'supply_ptrace_register' + linux target ops into methods of linux_process_target. + + * linux-low.h (struct linux_target_ops): Remove the ops. + (class linux_process_target) <low_collect_ptrace_register> + <low_store_ptrace_register>: Declare. + * linux-low.cc (linux_process_target::low_collect_ptrace_register) + (linux_process_target::low_supply_ptrace_register): Define. + + Update the callers below. + + (linux_process_target::fetch_register) + (linux_process_target::store_register) + + * linux-x86-low.cc (the_low_target): Remove the op fields. + * linux-aarch64-low.cc (the_low_target): Ditto. + * linux-arm-low.cc (the_low_target): Ditto. + * linux-bfin-low.cc (the_low_target): Ditto. + * linux-crisv32-low.cc (the_low_target): Ditto. + * linux-m32r-low.cc (the_low_target): Ditto. + * linux-m68k-low.cc (the_low_target): Ditto. + * linux-sh-low.cc (the_low_target): Ditto. + * linux-sparc-low.cc (the_low_target): Ditto. + * linux-tic6x-low.cc (the_low_target): Ditto. + * linux-tile-low.cc (the_low_target): Ditto. + * linux-xtensa-low.cc (the_low_target): Ditto. + * linux-mips-low.cc (class mips_target) + <low_collect_ptrace_register> + <low_supply_ptrace_register>: Declare. + (mips_collect_ptrace_register): Turn into ... + (mips_target::low_collect_ptrace_register): ...this. + (mips_supply_ptrace_register): Turn into... + (mips_target::low_supply_ptrace_register): ...this. + (the_low_target): Remove the op fields. + * linux-ppc-low.cc (class ppc_target) + <low_collect_ptrace_register> + <low_supply_ptrace_register>: Declare. + (ppc_collect_ptrace_register): Turn into ... + (ppc_target::low_collect_ptrace_register): ...this. + (ppc_supply_ptrace_register): Turn into ... + (ppc_target::low_supply_ptrace_register): ...this. + (ppc_fill_gregset): Update for the calls to + low_collect_ptrace_register. + (the_low_target): Remove the op fields. + * linux-s390-low.cc (class s390_target) + <low_collect_ptrace_register> + <low_supply_ptrace_register>: Declare. + (s390_collect_ptrace_register): Turn into ... + (s390_target::low_collect_ptrace_register): ...this. + (s390_supply_ptrace_register): Turn into ... + (s390_target::low_supply_ptrace_register): ...this. + (s390_fill_gregset): Update for the calls to + low_collect_ptrace_register. + (the_low_target): Remove the op fields. + +2020-04-02 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Turn the 'stopped_by_watchpoint' and 'stopped_data_address' linux + target ops into methods of linux_process_target. + + * linux-low.h (struct linux_target_ops): Remove the ops. + (class linux_process_target) <check_stopped_by_watchpoint> + <low_stopped_by_watchpoint> + <low_stopped_data_address>: Declare. + * linux-low.cc (check_stopped_by_watchpoint): Turn into... + (linux_process_target::check_stopped_by_watchpoint): ...this. + (linux_process_target::low_stopped_by_watchpoint): Define. + (linux_process_target::low_stopped_data_address): Define. + * linux-x86-low.cc (class x86_target) <low_stopped_by_watchpoint> + <low_stopped_data_address>: Declare. + (x86_stopped_by_watchpoint): Turn into... + (x86_target::low_stopped_by_watchpoint): ...this. + (x86_stopped_data_address): Turn into... + (x86_target::low_stopped_data_address): ...this. + (the_low_target): Remove the op fields. + * linux-aarch64-low.cc (class aarch64_target) + <low_stopped_by_watchpoint> + <low_stopped_data_address>: Declare. + (aarch64_stopped_by_watchpoint): Turn into... + (aarch64_target::low_stopped_by_watchpoint): ...this. + (aarch64_stopped_data_address): Turn into... + (aarch64_target::low_stopped_data_address): ...this. + (the_low_target): Remove the op fields. + * linux-arm-low.cc (class arm_target) <low_stopped_by_watchpoint> + <low_stopped_data_address>: Declare. + (arm_stopped_by_watchpoint): Turn into... + (arm_target::low_stopped_by_watchpoint): ...this. + (arm_stopped_data_address): Turn into... + (arm_target::low_stopped_data_address): ...this. + (the_low_target): Remove the op fields. + * linux-crisv32-low.cc (class crisv32_target) + <low_stopped_by_watchpoint> + <low_stopped_data_address>: Declare. + (cris_stopped_by_watchpoint): Turn into... + (crisv32_target::low_stopped_by_watchpoint): ...this. + (cris_stopped_data_address): Turn into... + (crisv32_target::low_stopped_data_address): ...this. + (the_low_target): Remove the op fields. + * linux-mips-low.cc (class mips_target) <low_stopped_by_watchpoint> + <low_stopped_data_address>: Declare. + (mips_stopped_by_watchpoint): Turn into... + (mips_target::low_stopped_by_watchpoint): ...this. + (mips_stopped_data_address): Turn into... + (mips_target::low_stopped_data_address): ...this. + (the_low_target): Remove the op fields. + * linux-bfin-low.cc (the_low_target): Remove the op fields. + * linux-m32r-low.cc (the_low_target): Ditto. + * linux-m68k-low.cc (the_low_target): Ditto. + * linux-ppc-low.cc (the_low_target): Ditto. + * linux-s390-low.cc (the_low_target): Ditto. + * linux-sh-low.cc (the_low_target): Ditto. + * linux-sparc-low.cc (the_low_target): Ditto. + * linux-tic6x-low.cc (the_low_target): Ditto. + * linux-tile-low.cc (the_low_target): Ditto. + * linux-xtensa-low.cc (the_low_target): Ditto. + +2020-04-02 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Turn the 'insert_point' and 'remove_point' linux target ops into + methods of linux_process_target. + + * linux-low.h (struct linux_target_ops): Remove the ops. + (class linux_process_target) <low_insert_point> + <low_remove_point>: Declare. + * linux-low.cc (linux_process_target::low_insert_point) + (linux_process_target::low_remove_point): Define. + (linux_process_target::insert_point) + (linux_process_target::remove_point): Update for calls to + low_insert_point and low_remove_point. + * linux-x86-low.cc (class x86_target) <low_insert_point> + <low_remove_point>: Declare. + (x86_insert_point): Turn into... + (x86_target::low_insert_point): ...this. + (x86_remove_point): Turn into... + (x86_target::low_remove_point): ...this. + (the_low_target): Remove the op fields. + * linux-aarch64-low.cc (class aarch64_target) <low_insert_point> + <low_remove_point>: Declare. + (aarch64_insert_point): Turn into... + (aarch64_target::low_insert_point): ...this. + (aarch64_remove_point): Turn into... + (aarch64_target::low_remove_point): ...this. + (the_low_target): Remove the op fields. + * linux-arm-low.cc (class arm_target) <low_insert_point> + <low_remove_point>: Declare. + (arm_insert_point): Turn into... + (arm_target::low_insert_point): ...this. + (arm_remove_point): Turn into... + (arm_target::low_remove_point): ...this. + (the_low_target): Remove the op fields. + * linux-crisv32-low.cc (class crisv32_target) <low_insert_point> + <low_remove_point>: Declare. + (crisv32_insert_point): Turn into... + (crisv32_target::low_insert_point): ...this. + (crisv32_remove_point): Turn into... + (crisv32_target::low_remove_point): ...this. + (the_low_target): Remove the op fields. + * linux-mips-low.cc (class mips_target) <low_insert_point> + <low_remove_point>: Declare. + (mips_insert_point): Turn into... + (mips_target::low_insert_point): ...this. + (mips_remove_point): Turn into... + (mips_target::low_remove_point): ...this. + (the_low_target): Remove the op fields. + * linux-ppc-low.cc (class ppc_target) <low_insert_point> + <low_remove_point>: Declare. + (ppc_insert_point): Turn into... + (ppc_target::low_insert_point): ...this. + (ppc_remove_point): Turn into... + (ppc_target::low_remove_point): ...this. + (the_low_target): Remove the op fields. + * linux-bfin-low.cc (the_low_target): Remove the op fields. + * linux-m32r-low.cc (the_low_target): Ditto. + * linux-m68k-low.cc (the_low_target): Ditto. + * linux-s390-low.cc (the_low_target): Ditto. + * linux-sh-low.cc (the_low_target): Ditto. + * linux-sparc-low.cc (the_low_target): Ditto. + * linux-tic6x-low.cc (the_low_target): Ditto. + * linux-tile-low.cc (the_low_target): Ditto. + * linux-xtensa-low.cc (the_low_target): Ditto. + +2020-04-02 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Remove the 'supports_z_point_type' linux target op and let the + concrete linux target define it by overriding the op declared in + process_stratum_target. + + * linux-low.cc (linux_process_target::supports_z_point_type): + Remove. + * linux-low.h (struct linux_target_ops): Remove the op. + (class linux_process_target) <supports_z_point_type>: Remove. + * linux-x86-low.cc (class x86_target) <supports_z_point_type>: + Declare. + (x86_supports_z_point_type): Turn into... + (x86_target::supports_z_point_type): ...this. + (the_low_target): Remove the op field. + * linux-aarch64-low.cc (class aarch64_target) + <supports_z_point_type>: Declare. + (aarch64_supports_z_point_type): Turn into... + (aarch64_target::supports_z_point_type): ...this. + (the_low_target): Remove the op field. + * linux-arm-low.cc (class arm_target) <supports_z_point_type>: + Declare. + (arm_supports_z_point_type): Turn into... + (arm_target::supports_z_point_type): ...this. + (the_low_target): Remove the op field. + * linux-crisv32-low.cc (class crisv32_target) + <supports_z_point_type>: Declare. + (cris_supports_z_point_type): Turn into... + (crisv32_target::supports_z_point_type): ...this. + (the_low_target): Remove the op field. + * linux-mips-low.cc (class mips_target) <supports_z_point_type>: + Declare. + (mips_supports_z_point_type): Turn into... + (mips_target::supports_z_point_type): ...this. + (the_low_target): Remove the op field. + * linux-ppc-low.cc (class ppc_target) <supports_z_point_type>: + Declare. + (ppc_supports_z_point_type): Turn into... + (ppc_target::supports_z_point_type): ...this. + (the_low_target): Remove the op field. + * linux-s390-low.cc (class s390_target) <supports_z_point_type>: + Declare. + (s390_supports_z_point_type): Turn into... + (s390_target::supports_z_point_type): ...this. + (the_low_target): Remove the op field. + * linux-bfin-low.cc (the_low_target): Remove the op field. + * linux-m32r-low.cc (the_low_target): Ditto. + * linux-m68k-low.cc (the_low_target): Ditto. + * linux-sh-low.cc (the_low_target): Ditto. + * linux-sparc-low.cc (the_low_target): Ditto. + * linux-tic6x-low.cc (the_low_target): Ditto. + * linux-tile-low.cc (the_low_target): Ditto. + * linux-xtensa-low.cc (the_low_target): Ditto. + +2020-04-02 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Turn the 'breakpoint_at' linux target op into a method of + linux_process_target. + + * linux-low.h (struct linux_target_ops): Remove the op. + (class linux_process_target) <low_breakpoint_at>: Declare. + + Update the callers below: + + * linux-low.cc (linux_process_target::save_stop_reason) + (linux_process_target::thread_still_has_status_pending) + (linux_process_target::wait_1) + + * linux-x86-low.cc (class x86_target) + <low_breakpoint_at>: Declare. + (x86_breakpoint_at): Turn into... + (x86_target::low_breakpoint_at): ...this. + (the_low_target): Remove the op field. + * linux-aarch64-low.cc (class aarch64_target) + <low_breakpoint_at>: Declare. + (aarch64_breakpoint_at): Turn into... + (aarch64_target::low_breakpoint_at): ...this. + (the_low_target): Remove the op field. + * linux-arm-low.cc (class arm_target) + <low_breakpoint_at>: Declare. + (arm_target::low_breakpoint_at): Define. + (the_low_target): Remove the op field. + * linux-bfin-low.cc (class bfin_target) + <low_breakpoint_at>: Declare. + (bfin_breakpoint_at): Turn into... + (bfin_target::low_breakpoint_at): ...this. + (the_low_target): Remove the op field. + * linux-cris-low.cc (class cris_target) + <low_breakpoint_at>: Declare. + (cris_breakpoint_at): Turn into... + (cris_target::low_breakpoint_at): ...this. + (the_low_target): Remove the op field. + * linux-crisv32-low.cc (class crisv32_target) + <low_breakpoint_at>: Declare. + (crisv32_breakpoint_at): Turn into... + (crisv32_target::low_breakpoint_at): ...this. + (the_low_target): Remove the op field. + * linux-ia64-low.cc (class ia64_target) + <low_breakpoint_at>: Declare. + (ia64_target::low_breakpoint_at): Define. + * linux-m32r-low.cc (class m32r_target) + <low_breakpoint_at>: Declare. + (m32r_breakpoint_at): Turn into... + (m32r_target::low_breakpoint_at): ...this. + (the_low_target): Remove the op field. + * linux-m68k-low.cc (class m68k_target) + <low_breakpoint_at>: Declare. + (m68k_breakpoint_at): Turn into... + (m68k_target::low_breakpoint_at): ...this. + (the_low_target): Remove the op field. + * linux-mips-low.cc (class mips_target) + <low_breakpoint_at>: Declare. + (mips_breakpoint_at): Turn into... + (mips_target::low_breakpoint_at): ...this. + (the_low_target): Remove the op field. + * linux-nios2-low.cc (class nios2_target) + <low_breakpoint_at>: Declare. + (nios2_breakpoint_at): Turn into... + (nios2_target::low_breakpoint_at): ...this. + (the_low_target): Remove the op field. + * linux-ppc-low.cc (class ppc_target) + <low_breakpoint_at>: Declare. + (ppc_breakpoint_at): Turn into... + (ppc_target::low_breakpoint_at): ...this. + (the_low_target): Remove the op field. + * linux-riscv-low.cc (class riscv_target) + <low_breakpoint_at>: Declare. + (riscv_breakpoint_at): Turn into... + (riscv_target::low_breakpoint_at): ...this. + (the_low_target): Remove the op field. + * linux-s390-low.cc (class s390_target) + <low_breakpoint_at>: Declare. + (s390_breakpoint_at): Turn into... + (s390_target::low_breakpoint_at): ...this. + (the_low_target): Remove the op field. + * linux-sh-low.cc (class sh_target) + <low_breakpoint_at>: Declare. + (sh_breakpoint_at): Turn into... + (sh_target::low_breakpoint_at): ...this. + (the_low_target): Remove the op field. + * linux-sparc-low.cc (class sparc_target) + <low_breakpoint_at>: Declare. + (sparc_breakpoint_at): Turn into... + (sparc_target::low_breakpoint_at): ...this. + (the_low_target): Remove the op field. + * linux-tic6x-low.cc (class tic6x_target) + <low_breakpoint_at>: Declare. + (tic6x_breakpoint_at): Turn into... + (tic6x_target::low_breakpoint_at): ...this. + (the_low_target): Remove the op field. + * linux-tile-low.cc (class tile_target) + <low_breakpoint_at>: Declare. + (tile_breakpoint_at): Turn into... + (tile_target::low_breakpoint_at): ...this. + (the_low_target): Remove the op field. + * linux-xtensa-low.cc (class xtensa_target) + <low_breakpoint_at>: Declare. + (xtensa_breakpoint_at): Turn into... + (xtensa_target::low_breakpoint_at): ...this. + (the_low_target): Remove the op field. + +2020-04-02 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Turn the 'decr_pc_after_break' linux_target_ops field into + a method of linux_process_target. + + * linux-low.h (struct linux_target_ops) + <decr_pc_after_break>: Remove. + (class linux_process_target) <low_decr_pc_after_break>: New method + declaration. + * linux-low.cc (linux_process_target::low_decr_pc_after_break): + New method implementation. + + Update the users below. + + (linux_process_target::save_stop_reason) + (linux_process_target::wait_1) + * linux-x86-low.cc (class x86_target) <low_decr_pc_after_break>: + New declaration. + (x86_target::low_decr_pc_after_break): New method implementation. + (the_low_target): Remove the field. + * linux-bfin-low.cc (class bfin_target) <low_decr_pc_after_break>: + New declaration. + (bfin_target::low_decr_pc_after_break): New method implementation. + (the_low_target): Remove the field. + * linux-m68k-low.cc (class m68k_target) <low_decr_pc_after_break>: + New declaration. + (m68k_target::low_decr_pc_after_break): New method implementation. + (the_low_target): Remove the field. + * linux-s390-low.cc (class s390_target) <low_decr_pc_after_break>: + New declaration. + (s390_target::low_decr_pc_after_break): New method implementation. + (the_low_target): Remove the field. + * linux-aarch64-low.cc (the_low_target): Remove the field. + * linux-arm-low.cc (the_low_target): Remove the field. + * linux-cris-low.cc (the_low_target): Remove the field. + * linux-crisv32-low.cc (the_low_target): Remove the field. + * linux-m32r-low.cc (the_low_target): Remove the field. + * linux-mips-low.cc (the_low_target): Remove the field. + * linux-nios2-low.cc (the_low_target): Remove the field. + * linux-ppc-low.cc (the_low_target): Remove the field. + * linux-riscv-low.cc (the_low_target): Remove the field. + * linux-sh-low.cc (the_low_target): Remove the field. + * linux-sparc-low.cc (the_low_target): Remove the field. + * linux-tic6x-low.cc (the_low_target): Remove the field. + * linux-tile-low.cc (the_low_target): Remove the field. + * linux-xtensa-low.cc (the_low_target): Remove the field. + +2020-04-02 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Remove the 'supports_software_single_step' linux target op and let + the concrete linux target define it by overriding the op in + process_stratum_target. + Turn the 'get_next_pcs' linux target op into a method of + linux_process_target. + + * linux-low.h (struct linux_target_ops): Remove the ops. + (class linux_process_target) <supports_software_single_step>: + Remove. + <low_get_next_pcs>: Declare. + * linux-low.cc (can_software_single_step): Remove. + (linux_process_target::low_get_next_pcs): Define. + (linux_process_target::supports_software_single_step): Remove. + + Update the callers below. + + (linux_process_target::handle_extended_wait) + (linux_process_target::wait_1) + (linux_process_target::install_software_single_step_breakpoints) + (linux_process_target::single_step) + (linux_process_target::thread_needs_step_over) + (linux_process_target::proceed_one_lwp) + (linux_process_target::supports_range_stepping) + + * linux-x86-low.cc (the_low_target): Remove the op field. + * linux-aarch64-low.cc (the_low_target): Ditto. + * linux-bfin-low.cc (the_low_target): Ditto. + * linux-cris-low.cc (the_low_target): Ditto. + * linux-crisv32-low.cc (the_low_target): Ditto. + * linux-m32r-low.cc (the_low_target): Ditto. + * linux-m68k-low.cc (the_low_target): Ditto. + * linux-mips-low.cc (the_low_target): Ditto. + * linux-nios2-low.cc (the_low_target): Ditto. + * linux-ppc-low.cc (the_low_target): Ditto. + * linux-riscv-low.cc (the_low_target): Ditto. + * linux-s390-low.cc (the_low_target): Ditto. + * linux-sh-low.cc (the_low_target): Ditto. + * linux-sparc-low.cc (the_low_target): Ditto. + * linux-tic6x-low.cc (the_low_target): Ditto. + * linux-tile-low.cc (the_low_target): Ditto. + * linux-xtensa-low.cc (the_low_target): Ditto. + * linux-arm-low.cc (class arm_target) <low_get_next_pcs> + <supports_software_single_step>: Declare. + (arm_target::supports_software_single_step): Define. + (arm_gdbserver_get_next_pcs): Turn into... + (arm_target::low_get_next_pcs): ...this. + (the_low_target): Remove the op field. + +2020-04-02 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Remove the 'sw_breakpoint_from_kind' linux target op, and let + the concrete linux target define it by overriding the op + in process_stratum_target. + + * linux-low.cc (linux_process_target::sw_breakpoint_from_kind): + Remove. + * linux-low.h (struct linux_target_ops): Remove the op. + (class linux_process_target) <sw_breakpoint_from_kind>: Remove. + * linux-x86-low.cc (class x86_target) <sw_breakpoint_from_kind>: + Declare. + (x86_sw_breakpoint_from_kind): Turn into... + (x86_target::sw_breakpoint_from_kind): ...this. + (the_low_target): Remove the op field. + * linux-aarch64-low.cc (class aarch64_target) + <sw_breakpoint_from_kind>: Declare. + (aarch64_sw_breakpoint_from_kind): Turn into... + (aarch64_target::sw_breakpoint_from_kind): ...this. + (the_low_target): Remove the op field. + * linux-arm-low.cc (class arm_target) <sw_breakpoint_from_kind>: + Declare. + (arm_target::sw_breakpoint_from_kind): Define. + (the_low_target): Remove the op field. + * linux-bfin-low.cc (class bfin_target) <sw_breakpoint_from_kind>: + Declare. + (bfin_sw_breakpoint_from_kind): Turn into... + (bfin_target::sw_breakpoint_from_kind): ...this. + (the_low_target): Remove the op field. + * linux-cris-low.cc (class cris_target) <sw_breakpoint_from_kind>: + Declare. + (cris_sw_breakpoint_from_kind): Turn into... + (cris_target::sw_breakpoint_from_kind): ...this. + (the_low_target): Remove the op field. + * linux-crisv32-low.cc (class crisv32_target) + <sw_breakpoint_from_kind>: Declare. + (cris_sw_breakpoint_from_kind): Turn into... + (crisv32_target::sw_breakpoint_from_kind): ...this. + (the_low_target): Remove the op field. + * linux-ia64-low.cc (class ia64_target) <sw_breakpoint_from_kind>: + Declare. + (ia64_target::sw_breakpoint_from_kind): Define. + * linux-m32r-low.cc (class m32r_target) <sw_breakpoint_from_kind>: + Declare. + (m32r_sw_breakpoint_from_kind): Turn into... + (m32r_target::sw_breakpoint_from_kind): ...this. + (the_low_target): Remove the op field. + * linux-m68k-low.cc (class m68k_target) <sw_breakpoint_from_kind>: + Declare. + (m68k_sw_breakpoint_from_kind): Turn into... + (m68k_target::sw_breakpoint_from_kind): ...this. + (the_low_target): Remove the op field. + * linux-mips-low.cc (class mips_target) <sw_breakpoint_from_kind>: + Declare. + (mips_sw_breakpoint_from_kind): Turn into... + (mips_target::sw_breakpoint_from_kind): ...this. + (the_low_target): Remove the op field. + * linux-nios2-low.cc (class nios2_target) <sw_breakpoint_from_kind>: + Declare. + (nios2_sw_breakpoint_from_kind): Turn into... + (nios2_target::sw_breakpoint_from_kind): ...this. + (the_low_target): Remove the op field. + * linux-ppc-low.cc (class ppc_target) <sw_breakpoint_from_kind>: + Declare. + (ppc_sw_breakpoint_from_kind): Turn into... + (ppc_target::sw_breakpoint_from_kind): ...this. + (the_low_target): Remove the op field. + * linux-riscv-low.cc (class riscv_target) <sw_breakpoint_from_kind>: + Declare. + (riscv_sw_breakpoint_from_kind): Turn into... + (riscv_target::sw_breakpoint_from_kind): ...this. + (the_low_target): Remove the op field. + * linux-s390-low.cc (class s390_target) <sw_breakpoint_from_kind>: + Declare. + (s390_sw_breakpoint_from_kind): Turn into... + (s390_target::sw_breakpoint_from_kind): ...this. + (the_low_target): Remove the op field. + * linux-sh-low.cc (class sh_target) <sw_breakpoint_from_kind>: + Declare. + (sh_sw_breakpoint_from_kind): Turn into... + (sh_target::sw_breakpoint_from_kind): ...this. + (the_low_target): Remove the op field. + * linux-sparc-low.cc (class sparc_target) <sw_breakpoint_from_kind>: + Declare. + (sparc_sw_breakpoint_from_kind): Turn into... + (sparc_target::sw_breakpoint_from_kind): ...this. + (the_low_target): Remove the op field. + * linux-tic6x-low.cc (class tic6x_target) <sw_breakpoint_from_kind>: + Declare. + (tic6x_sw_breakpoint_from_kind): Turn into... + (tic6x_target::sw_breakpoint_from_kind): ...this. + (the_low_target): Remove the op field. + * linux-tile-low.cc (class tile_target) <sw_breakpoint_from_kind>: + Declare. + (tile_sw_breakpoint_from_kind): Turn into... + (tile_target::sw_breakpoint_from_kind): ...this. + (the_low_target): Remove the op field. + * linux-xtensa-low.cc (class xtensa_target) + <sw_breakpoint_from_kind>: Declare. + (xtensa_sw_breakpoint_from_kind): Turn into... + (xtensa_target::sw_breakpoint_from_kind): ...this. + (the_low_target): Remove the op field. + +2020-04-02 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Remove the 'breakpoint_kind_from_pc' and + 'breakpoint_kind_from_current_state' linux target ops, and let the + concrete linux target define them by overriding the ops of + process_stratum_target. + + * linux-low.cc (linux_process_target::breakpoint_kind_from_pc): + Remove. + (linux_process_target::breakpoint_kind_from_current_state): Remove. + * linux-low.h (struct linux_target_ops): Remove ops. + (class linux_process_target) <breakpoint_kind_from_pc>: Remove. + <breakpoint_kind_from_current_state>: Remove. + * linux-x86-low.cc (the_low_target): Remove the op fields. + * linux-bfin-low.cc (the_low_target): Ditto. + * linux-cris-low.cc (the_low_target): Ditto. + * linux-crisv32-low.cc (the_low_target): Ditto. + * linux-m32r-low.cc (the_low_target): Ditto. + * linux-m68k-low.cc (the_low_target): Ditto. + * linux-mips-low.cc (the_low_target): Ditto. + * linux-nios2-low.cc (the_low_target): Ditto. + * linux-ppc-low.cc (the_low_target): Ditto. + * linux-s390-low.cc (the_low_target): Ditto. + * linux-sh-low.cc (the_low_target): Ditto. + * linux-sparc-low.cc (the_low_target): Ditto. + * linux-tic6x-low.cc (the_low_target): Ditto. + * linux-tile-low.cc (the_low_target): Ditto. + * linux-xtensa-low.cc (the_low_target): Ditto. + * linux-aarch64-low.cc (class aarch64_target) + <breakpoint_kind_from_pc> + <breakpoint_kind_from_current_state>: Declare. + (aarch64_breakpoint_kind_from_pc): Turn into... + (aarch64_target::breakpoint_kind_from_pc): ...this. + (aarch64_breakpoint_kind_from_current_state): Turn into... + (aarch64_target::breakpoint_kind_from_current_state): ...this. + (the_low_target): Remove the op fields. + * linux-arm-low.cc (class arm_target): + <breakpoint_kind_from_pc> + <breakpoint_kind_from_current_state>: Declare. + (arm_target::breakpoint_kind_from_pc): Define. + (arm_target::breakpoint_kind_from_current_state): Define. + (the_low_target): Remove the op fields. + * linux-riscv-low.cc (class riscv_target): + <breakpoint_kind_from_pc>: Declare. + (riscv_breakpoint_kind_from_pc): Turn into... + (riscv_target::breakpoint_kind_from_pc): ...this. + (the_low_target): Remove the op fields. + +2020-04-02 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Turn the 'get_pc' and 'set_pc' linux target ops into methods + of linux_process_target. + + * linux-low.h (struct linux_target_ops): Remove the ops. + (class linux_process_target) <low_supports_breakpoints> + <low_get_pc> + <low_set_pc>: Declare. + * linux-low.cc (supports_breakpoints): Turn into... + (linux_process_target::low_supports_breakpoints): ...this. + (linux_process_target::low_get_pc): Define. + (linux_process_target::low_set_pc): Define. + + Update the callers below. + + (linux_process_target::get_pc) + (linux_process_target::save_stop_reason) + (linux_process_target::maybe_move_out_of_jump_pad) + (linux_process_target::wait_1) + (linux_process_target::resume_one_lwp_throw) + (linux_process_target::resume) + (linux_process_target::proceed_all_lwps) + (linux_process_target::read_pc) + (linux_process_target::write_pc) + + * linux-x86-low.cc (class linux_process_target) + <low_supports_breakpoints> + <low_get_pc> + <low_set_pc>: Declare. + (x86_target::low_supports_breakpoints): Define. + (x86_get_pc): Turn into... + (x86_target::low_get_pc): ...this. + (x86_set_pc): Turn into... + (x86_target::low_set_pc): ...this. + (the_low_target): Remove the op fields. + * linux-arm-low.cc (class arm_target) + <low_supports_breakpoints> + <low_get_pc> + <low_set_pc>: Declare. + (arm_target::low_supports_breakpoints) + (arm_target::low_get_pc) + (arm_target::low_set_pc): Define. + (the_low_target): Remove the op fields. + * linux-bfin-low.cc (class bfin_target) + <low_supports_breakpoints> + <low_get_pc> + <low_set_pc>: Declare. + (bfin_target::low_supports_breakpoints) + (bfin_target::low_get_pc) + (bfin_target::low_set_pc): Define. + (the_low_target): Remove the op fields. + * linux-cris-low.cc (class cris_target) + <low_supports_breakpoints> + <low_get_pc> + <low_set_pc>: Declare. + (cris_target::low_supports_breakpoints) + (cris_target::low_get_pc) + (cris_target::low_set_pc): Define. + (the_low_target): Remove the op fields. + * linux-crisv32-low.cc (class crisv32_target) + <low_supports_breakpoints> + <low_get_pc> + <low_set_pc>: Declare. + (crisv32_target::low_supports_breakpoints) + (crisv32_target::low_get_pc) + (crisv32_target::low_set_pc): Define. + (the_low_target): Remove the op fields. + * linux-m32r-low.cc (class m32r_target) + <low_supports_breakpoints> + <low_get_pc> + <low_set_pc>: Declare. + (m32r_target::low_supports_breakpoints) + (m32r_target::low_get_pc) + (m32r_target::low_set_pc): Define. + (the_low_target): Remove the op fields. + * linux-m68k-low.cc (class m68k_target) + <low_supports_breakpoints> + <low_get_pc> + <low_set_pc>: Declare. + (m68k_target::low_supports_breakpoints) + (m68k_target::low_get_pc) + (m68k_target::low_set_pc): Define. + (the_low_target): Remove the op fields. + * linux-nios2-low.cc (class nios2_target) + <low_supports_breakpoints> + <low_get_pc> + <low_set_pc>: Declare. + (nios2_target::low_supports_breakpoints) + (nios2_target::low_get_pc) + (nios2_target::low_set_pc): Define. + (the_low_target): Remove the op fields. + * linux-sh-low.cc (class sh_target) + <low_supports_breakpoints> + <low_get_pc> + <low_set_pc>: Declare. + (sh_target::low_supports_breakpoints) + (sh_target::low_get_pc) + (sh_target::low_set_pc): Define. + (the_low_target): Remove the op fields. + * linux-xtensa-low.cc (class xtensa_target) + <low_supports_breakpoints> + <low_get_pc> + <low_set_pc>: Declare. + (xtensa_target::low_supports_breakpoints) + (xtensa_target::low_get_pc) + (xtensa_target::low_set_pc): Define. + (the_low_target): Remove the op fields. + * linux-sparc-low.cc (class sparc_target) + <low_supports_breakpoints> + <low_get_pc>: Declare. + (sparc_target::low_supports_breakpoints) + (sparc_target::low_get_pc): Define. + (the_low_target): Remove the op fields. + * linux-tile-low.cc (class tile_target) + <low_supports_breakpoints> + <low_get_pc> + <low_set_pc>: Declare. + (tile_target::low_supports_breakpoints) + (tile_target::low_get_pc) + (tile_target::low_set_pc): Define. + (the_low_target): Remove the op fields. + * linux-aarch64-low.cc (class aarch64_target) + <low_supports_breakpoints> + <low_get_pc> + <low_set_pc>: Declare. + (aarch64_target::low_supports_breakpoints): Define. + (aarch64_get_pc): Turn into... + (aarch64_target::low_get_pc): ...this. + (aarch64_set_pc): Turn into... + (aarch64_target::low_set_pc): ...this. + (the_low_target): Remove the op fields. + * linux-mips-low.cc (class mips_target) + <low_supports_breakpoints> + <low_get_pc> + <low_set_pc>: Declare. + (mips_target::low_supports_breakpoints): Define. + (mips_get_pc): Turn into... + (mips_target::low_get_pc): ...this. + (mips_set_pc): Turn into... + (mips_target::low_set_pc): ...this. + (the_low_target): Remove the op fields. + * linux-ppc-low.cc (class ppc_target) + <low_supports_breakpoints> + <low_get_pc> + <low_set_pc>: Declare. + (ppc_target::low_supports_breakpoints): Define. + (ppc_get_pc): Turn into... + (ppc_target::low_get_pc): ...this. + (ppc_set_pc): Turn into... + (ppc_target::low_set_pc): ...this. + (the_low_target): Remove the op fields. + * linux-riscv-low.cc (class riscv_target) + <low_supports_breakpoints> + <low_get_pc> + <low_set_pc>: Declare. + (riscv_target::low_supports_breakpoints): Define. + (riscv_get_pc): Turn into... + (riscv_target::low_get_pc): ...this. + (riscv_set_pc): Turn into... + (riscv_target::low_set_pc): ...this. + (the_low_target): Remove the op fields. + * linux-s390-low.cc (class s390_target) + <low_supports_breakpoints> + <low_get_pc> + <low_set_pc>: Declare. + (s390_target::low_supports_breakpoints): Define. + (s390_get_pc): Turn into... + (s390_target::low_get_pc): ...this. + (s390_set_pc): Turn into... + (s390_target::low_set_pc): ...this. + (the_low_target): Remove the op fields. + * linux-tic6x-low.cc (class tic6x_target) + <low_supports_breakpoints> + <low_get_pc> + <low_set_pc>: Declare. + (tic6x_target::low_supports_breakpoints): Define. + (tic6x_get_pc): Turn into... + (tic6x_target::low_get_pc): ...this. + (tic6x_set_pc): Turn into... + (tic6x_target::low_set_pc): ...this. + (the_low_target): Remove the op fields. + +2020-04-02 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Turn some more static methods in linux-low into private methods + of linux_process_target. + + * linux-low.cc (get_pc): Turn into... + (linux_process_target::get_pc): ...this. + (save_stop_reason): Turn into... + (linux_process_target::save_stop_reason): ...this. + (thread_still_has_status_pending_p): Turn into... + (linux_process_target::thread_still_has_status_pending): ...this. + (status_pending_p_callback): Turn into... + (linux_process_target::status_pending_p_callback): ...this. + (resume_stopped_resumed_lwps): Turn into... + (linux_process_target::resume_stopped_resumed_lwps): ...this. + (install_software_single_step_breakpoints): Turn into... + (linux_process_target::install_software_single_step_breakpoints): + ...this. + (single_step): Turn into... + (linux_process_target::single_step): ...this. + (linux_resume_one_lwp_throw): Turn into... + (linux_process_target::resume_one_lwp_throw): ...this. + (linux_resume_one_lwp): Turn into... + (linux_process_target::resume_one_lwp): ...this. + (resume_status_pending_p): Turn into... + (linux_process_target::resume_status_pending): ...this. + (need_step_over_p): Turn into... + (linux_process_target::thread_needs_step_over): ...this. + (linux_resume_one_thread): Turn into... + (linux_process_target::resume_one_thread): ...this. + (proceed_one_lwp): Turn into... + (linux_process_target::proceed_one_lwp): ...this. + (unsuspend_and_proceed_one_lwp): Turn into... + (linux_process_target::unsuspend_and_proceed_one_lwp): ...this. + + Update the calls/references to the above functions below. + + (linux_process_target::handle_extended_wait) + (linux_process_target::filter_event) + (linux_process_target::wait_for_event_filtered) + (linux_process_target::wait_1) + (linux_process_target::move_out_of_jump_pad) + (linux_process_target::start_step_over) + (linux_process_target::resume) + (linux_process_target::proceed_all_lwps) + (regsets_store_inferior_registers) + (linux_process_target::store_register) + + * linux-low.h (class linux_process_target) + <get_pc> + <save_stop_reason> + <thread_still_has_status_pending> + <status_pending_p_callback> + <resume_stopped_resumed_lwps> + <install_software_single_step_breakpoints> + <single_step> + <resume_one_lwp_throw> + <resume_one_lwp> + <resume_status_pending> + <thread_needs_step_over> + <resume_one_thread> + <proceed_one_lwp> + <unsuspend_and_proceed_one_lwp>: Declare. + +2020-04-02 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Turn the 'fetch_register' linux target op into a method of + linux_process_target. + + * linux-low.h (struct linux_target_ops) <fetch_register>: Remove. + (class linux_process_target) <low_fetch_register>: Declare. + * linux-x86-low.cc (the_low_target) + * linux-aarch64-low.cc (the_low_target) + * linux-arm-low.cc (the_low_target) + * linux-bfin-low.cc (the_low_target) + * linux-cris-low.cc (the_low_target) + * linux-crisv32-low.cc (the_low_target) + * linux-m32r-low.cc (the_low_target) + * linux-m68k-low.cc (the_low_target) + * linux-nios2-low.cc (the_low_target) + * linux-ppc-low.cc (the_low_target) + * linux-s390-low.cc (the_low_target) + * linux-sh-low.cc (the_low_target) + * linux-sparc-low.cc (the_low_target) + * linux-tic6x-low.cc (the_low_target) + * linux-tile-low.cc (the_low_target) + * linux-xtensa-low.cc (the_low_target): Remove the op field. + * linux-ia64-low.cc (class ia64_target) <low_fetch_register>: + Declare. + (ia64_fetch_register): Turn into... + (ia64_target::low_fetch_register): ...this. + (the_low_target): Remove the op field. + * linux-mips-low.cc (class mips_target) <low_fetch_register>: + Declare. + (mips_fetch_register): Turn into... + (mips_target::low_fetch_register): ...this. + (the_low_target): Remove the op field. + * linux-riscv-low.cc (class riscv_target) <low_fetch_register>: + Declare. + (riscv_fetch_register): Turn into... + (riscv_target::low_fetch_register): ...this. + (the_low_target): Remove the op field. + + Update the callers below. + + * linux-low.cc (linux_process_target::fetch_registers) + (linux_process_target::low_fetch_register) + +2020-04-02 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Turn the 'cannot_fetch_register' and 'cannot_store_register' + linux target ops into methods of linux_process_target. + + * linux-low.h (struct linux_target_ops): Remove the low target ops. + (class linux_process_target) <fetch_register> + <store_register> + <usr_fetch_inferior_registers> + <usr_store_inferior_registers> + <low_cannot_fetch_register> + <low_cannot_fetch_register> Declare. + * linux-low.cc (fetch_register): Turn into... + (linux_process_target::fetch_register): ...this. + (store_register): Turn into ... + (linux_process_target::store_register): ...this. + (usr_fetch_inferior_registers): Turn into... + (linux_process_target::usr_fetch_inferior_registers): ...this. + (usr_store_inferior_registers): Turn into... + (linux_process_target::usr_store_inferior_registers): ...this. + * linux-x86-low.cc (class x86_target) + <low_cannot_fetch_register> + <low_cannot_store_register>: Declare. + (x86_cannot_store_register): Turn into... + (x86_target::low_cannot_store_register): ...this. + (x86_cannot_fetch_register): Turn into... + (x86_target::low_cannot_fetch_register): ...this. + (the_low_target): Remove the target op fields. + * linux-aarch64-low.cc (class aarch64_target) + <low_cannot_fetch_register> + <low_cannot_store_register>: Declare. + (aarch64_target::low_cannot_fetch_register) + (aarch64_target::low_cannot_store_register): Define. + (the_low_target): Remove the op fields. + * linux-arm-low.cc (class arm_target) + <low_cannot_fetch_register> + <low_cannot_store_register>: Declare. + (arm_cannot_fetch_register): Turn into... + (arm_target::low_cannot_fetch_register): ...this. + (arm_cannot_store_register): Turn into... + (arm_target::low_cannot_store_register): ...this. + (the_low_target): Remove the op fields. + * linux-bfin-low.cc (class bfin_target) + <low_cannot_fetch_register> + <low_cannot_store_register>: Declare. + (bfin_cannot_fetch_register): Turn into... + (bfin_target::low_cannot_fetch_register): ...this. + (bfin_cannot_store_register): Turn into... + (bfin_target::low_cannot_store_register): ...this. + (the_low_target): Remove the op fields. + * linux-cris-low.cc (class cris_target) + <low_cannot_fetch_register> + <low_cannot_store_register>: Declare. + (cris_cannot_fetch_register): Turn into... + (cris_target::low_cannot_fetch_register): ...this. + (cris_cannot_store_register): Turn into... + (cris_target::low_cannot_store_register): ...this. + (the_low_target): Remove the op fields. + * linux-crisv32-low.cc (class crisv32_target) + <low_cannot_fetch_register> + <low_cannot_store_register>: Declare. + (crisv32_target::low_cannot_fetch_register) + (crisv32_target::low_cannot_store_register): Define. + (the_low_target): Remove the op fields. + * linux-ia64-low.cc (class ia64_target) + <low_cannot_fetch_register> + <low_cannot_store_register>: Declare. + (ia64_cannot_fetch_register): Turn into... + (ia64_target::low_cannot_fetch_register): ...this. + (ia64_cannot_store_register): Turn into... + (ia64_target::low_cannot_store_register): ...this. + (the_low_target): Remove the op fields. + * linux-m32r-low.cc (class m32r_target) + <low_cannot_fetch_register> + <low_cannot_store_register>: Declare. + (m32r_cannot_fetch_register): Turn into... + (m32r_target::low_cannot_fetch_register): ...this. + (m32r_cannot_store_register): Turn into... + (m32r_target::low_cannot_store_register): ...this. + (the_low_target): Remove the op fields. + * linux-m68k-low.cc (class m68k_target) + <low_cannot_fetch_register> + <low_cannot_store_register>: Declare. + (m68k_cannot_fetch_register): Turn into... + (m68k_target::low_cannot_fetch_register): ...this. + (m68k_cannot_store_register): Turn into... + (m68k_target::low_cannot_store_register): ...this. + (the_low_target): Remove the op fields. + * linux-mips-low.cc (class mips_target) + <low_cannot_fetch_register> + <low_cannot_store_register>: Declare. + (mips_cannot_fetch_register): Turn into... + (mips_target::low_cannot_fetch_register): ...this. + (mips_cannot_store_register): Turn into... + (mips_target::low_cannot_store_register): ...this. + (get_usrregs_info): Inline at the call sites in + low_cannot_fetch_register and low_cannot_store_register, + and remove. + (the_low_target): Remove the op fields. + * linux-nios2-low.cc (class nios2_target) + <low_cannot_fetch_register> + <low_cannot_store_register>: Declare. + (nios2_cannot_fetch_register): Turn into... + (nios2_target::low_cannot_fetch_register): ...this. + (nios2_cannot_store_register): Turn into... + (nios2_target::low_cannot_store_register): ...this. + (the_low_target): Remove the op fields. + * linux-ppc-low.cc (class ppc_target) + <low_cannot_fetch_register> + <low_cannot_store_register>: Declare. + (ppc_cannot_fetch_register): Turn into... + (ppc_target::low_cannot_fetch_register): ...this. + (ppc_cannot_store_register): Turn into... + (ppc_target::low_cannot_store_register): ...this. + (the_low_target): Remove the op fields. + * linux-riscv-low.cc (class riscv_target) + <low_cannot_fetch_register> + <low_cannot_store_register>: Declare. + (riscv_target::low_cannot_fetch_register) + (riscv_target::low_cannot_store_register): Define. + (the_low_target): Remove the op fields. + * linux-s390-low.cc (class s390_target) + <low_cannot_fetch_register> + <low_cannot_store_register>: Declare. + (s390_cannot_fetch_register): Turn into... + (s390_target::low_cannot_fetch_register): ...this. + (s390_cannot_store_register): Turn into... + (s390_target::low_cannot_store_register): ...this. + (the_low_target): Remove the op fields. + * linux-sh-low.cc (class sh_target) + <low_cannot_fetch_register> + <low_cannot_store_register>: Declare. + (sh_cannot_fetch_register): Turn into... + (sh_target::low_cannot_fetch_register): ...this. + (sh_cannot_store_register): Turn into... + (sh_target::low_cannot_store_register): ...this. + (the_low_target): Remove the op fields. + * linux-sparc-low.cc (class sparc_target) + <low_cannot_fetch_register> + <low_cannot_store_register>: Declare. + (sparc_cannot_fetch_register): Turn into... + (sparc_target::low_cannot_fetch_register): ...this. + (sparc_cannot_store_register): Turn into... + (sparc_target::low_cannot_store_register): ...this. + (the_low_target): Remove the op fields. + * linux-tic6x-low.cc (class tic6x_target) + <low_cannot_fetch_register> + <low_cannot_store_register>: Declare. + (tic6x_cannot_fetch_register): Turn into... + (tic6x_target::low_cannot_fetch_register): ...this. + (tic6x_cannot_store_register): Turn into... + (tic6x_target::low_cannot_store_register): ...this. + (the_low_target): Remove the op fields. + * linux-tile-low.cc (class tile_target) + <low_cannot_fetch_register> + <low_cannot_store_register>: Declare. + (tile_cannot_fetch_register): Turn into... + (tile_target::low_cannot_fetch_register): ...this. + (tile_cannot_store_register): Turn into... + (tile_target::low_cannot_store_register): ...this. + (the_low_target): Remove the op fields. + * linux-xtensa-low.cc (class xtensa_target) + <low_cannot_fetch_register> + <low_cannot_store_register>: Declare. + (xtensa_target::low_cannot_fetch_register) + (xtensa_target::low_cannot_store_register): Define. + (the_low_target): Remove the op fields. + +2020-04-02 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Turn the 'regs_info' linux target op into a method of + linux_process_target. + + * linux-low.h (struct linux_target_ops) <regs_info>: Remove. + (class linux_process_target) <get_regs_info>: Define. + + Update the callers below. + + * linux-low.cc (linux_process_target::fetch_registers) + (linux_process_target::store_registers) + * proc-service.cc (gregset_info) + + * linux-x86-low.cc (class x86_target) <get_regs_info>: Declare. + (x86_linux_regs_info): Turn into ... + (x86_target::get_regs_info): ...this. + (the_low_target): Remove the op field. + * linux-aarch64-low.cc (class aarch64_target) <get_regs_info>: + Declare. + (aarch64_regs_info): Turn into ... + (aarch64_target::get_regs_info): ...this. + (the_low_target): Remove the op field. + * linux-arm-low.cc (class arm_target) <get_regs_info>: Declare. + (arm_regs_info): Turn into ... + (arm_target::get_regs_info): ...this. + (the_low_target): Remove the op field. + * linux-bfin-low.cc (class bfin_target) <get_regs_info>: Declare. + (bfin_regs_info): Turn into ... + (bfin_target::get_regs_info): ...this. + (the_low_target): Remove the op field. + * linux-cris-low.cc (class cris_target) <get_regs_info>: Declare. + (cris_regs_info): Turn into ... + (cris_target::get_regs_info): ...this. + (the_low_target): Remove the op field. + * linux-crisv32-low.cc (class crisv32_target) <get_regs_info>: + Declare. + (crisv32_regs_info): Turn into ... + (crisv32_target::get_regs_info): ...this. + (the_low_target): Remove the op field. + * linux-ia64-low.cc (class ia64_target) <get_regs_info>: Declare. + (ia64_regs_info): Turn into ... + (ia64_target::get_regs_info): ...this. + (the_low_target): Remove the op field. + * linux-m32r-low.cc (class m32r_target) <get_regs_info>: Declare. + (m32r_regs_info): Turn into ... + (m32r_target::get_regs_info): ...this. + (the_low_target): Remove the op field. + * linux-m68k-low.cc (class m68k_target) <get_regs_info>: Declare. + (m68k_regs_info): Turn into ... + (m68k_target::get_regs_info): ...this. + (the_low_target): Remove the op field. + * linux-mips-low.cc (class mips_target) <get_regs_info>: Declare. + (mips_regs_info): Turn into ... + (mips_target::get_regs_info): ...this. + (the_low_target): Remove the op field. + (get_usrregs_info): Update the call to the op. + * linux-nios2-low.cc (class nios2_target) <get_regs_info>: Declare. + (nios2_regs_info): Turn into ... + (nios2_target::get_regs_info): ...this. + (the_low_target): Remove the op field. + * linux-ppc-low.cc (class ppc_target) <get_regs_info>: Declare. + (ppc_regs_info): Turn into ... + (ppc_target::get_regs_info): ...this. + (the_low_target): Remove the op field. + * linux-riscv-low.cc (class riscv_target) <get_regs_info>: Declare. + (riscv_regs_info): Turn into ... + (riscv_target::get_regs_info): ...this. + (the_low_target): Remove the op field. + * linux-s390-low.cc (class s390_target) <get_regs_info>: Declare. + (s390_regs_info): Turn into ... + (s390_target::get_regs_info): ...this. + (the_low_target): Remove the op field. + (s390_collect_ptrace_register) + (s390_supply_ptrace_register) + (s390_fill_gregset): Update the call to the op. + * linux-sh-low.cc (class sh_target) <get_regs_info>: Declare. + (sh_regs_info): Turn into ... + (sh_target::get_regs_info): ...this. + (the_low_target): Remove the op field. + * linux-sparc-low.cc (class sparc_target) <get_regs_info>: Declare. + (sparc_regs_info): Turn into ... + (sparc_target::get_regs_info): ...this. + (the_low_target): Remove the op field. + * linux-tic6x-low.cc (class tic6x_target) <get_regs_info>: Declare. + (tic6x_regs_info): Turn into ... + (tic6x_target::get_regs_info): ...this. + (the_low_target): Remove the op field. + * linux-tile-low.cc (class tile_target) <get_regs_info>: Declare. + (tile_regs_info): Turn into ... + (tile_target::get_regs_info): ...this. + (the_low_target): Remove the op field. + * linux-xtensa-low.cc (class xtensa_target) <get_regs_info>: + Declare. + (xtensa_regs_info): Turn into ... + (xtensa_target::get_regs_info): ...this. + (the_low_target): Remove the op field. + +2020-04-02 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Turn the 'arch_setup' linux target op into a method of + linux_process_target. + + * linux-low.h (struct linux_target_ops) <arch_setup>: Delete. + (class linux_process_target) <arch_setup_thread> + <low_arch_setup>: New declarations. + * linux-low.cc (linux_arch_setup): Delete. + (linux_arch_setup_thread): Turn into... + (linux_process_target::arch_setup_thread): ... this. + + Update the callers below. + + (linux_process_target::handle_extended_wait) + (linux_process_target::post_create_inferior) + (linux_process_target::filter_event) + + * linux-x86-low.cc (class x86_target) <low_arch_setup>: New + declaration. + (x86_linux_update_xmltarget): Turn into... + (x86_target::update_xmltarget): ...this. + (x86_linux_process_qsupported): Update the call to + x86_linux_update_xmltarget. + (x86_arch_setup): Turn into ... + (x86_target::low_arch_setup): ...this. + (the_low_target): Remove the op field. + * linux-aarch64-low.cc (class aarch64_target) <low_arch_setup>: New + declaration. + (aarch64_arch_setup): Turn into ... + (aarch64_target::low_arch_setup): ...this. + (the_low_target): Remove the op field. + * linux-arm-low.cc (class arm_target) <low_arch_setup>: New + declaration. + (arm_arch_setup): Turn into ... + (arm_target::low_arch_setup): ...this. + (the_low_target): Remove the op field. + * linux-bfin-low.cc (class bfin_target) <low_arch_setup>: New + declaration. + (bfin_arch_setup): Turn into ... + (bfin_target::low_arch_setup): ...this. + (the_low_target): Remove the op field. + * linux-cris-low.cc (class cris_target) <low_arch_setup>: New + declaration. + (cris_arch_setup): Turn into ... + (cris_target::low_arch_setup): ...this. + (the_low_target): Remove the op field. + * linux-crisv32-low.cc (class crisv32_target) <low_arch_setup>: New + declaration. + (crisv32_arch_setup): Turn into ... + (crisv32_target::low_arch_setup): ...this. + (the_low_target): Remove the op field. + * linux-ia64-low.cc (class ia64_target) <low_arch_setup>: New + declaration. + (ia64_arch_setup): Turn into ... + (ia64_target::low_arch_setup): ...this. + (the_low_target): Remove the op field. + * linux-m32r-low.cc (class m32r_target) <low_arch_setup>: New + declaration. + (m32r_arch_setup): Turn into ... + (m32r_target::low_arch_setup): ...this. + (the_low_target): Remove the op field. + * linux-m68k-low.cc (class m68k_target) <low_arch_setup>: New + declaration. + (m68k_arch_setup): Turn into ... + (m68k_target::low_arch_setup): ...this. + (the_low_target): Remove the op field. + * linux-mips-low.cc (class mips_target) <low_arch_setup>: New + declaration. + (mips_arch_setup): Turn into ... + (mips_target::low_arch_setup): ...this. + (the_low_target): Remove the op field. + * linux-nios2-low.cc (class nios2_target) <low_arch_setup>: New + declaration. + (nios2_arch_setup): Turn into ... + (nios2_target::low_arch_setup): ...this. + (the_low_target): Remove the op field. + * linux-ppc-low.cc (class ppc_target) <low_arch_setup>: New + declaration. + (ppc_arch_setup): Turn into ... + (ppc_target::low_arch_setup): ...this. + (the_low_target): Remove the op field. + * linux-riscv-low.cc (class riscv_target) <low_arch_setup>: New + declaration. + (riscv_arch_setup): Turn into ... + (riscv_target::low_arch_setup): ...this. + (the_low_target): Remove the op field. + * linux-s390-low.cc (class s390_target) <low_arch_setup>: New + declaration. + (s390_arch_setup): Turn into ... + (s390_target::low_arch_setup): ...this. + (the_low_target): Remove the op field. + * linux-sh-low.cc (class sh_target) <low_arch_setup>: New + declaration. + (sh_arch_setup): Turn into ... + (sh_target::low_arch_setup): ...this. + (the_low_target): Remove the op field. + * linux-sparc-low.cc (class sparc_target) <low_arch_setup>: New + declaration. + (sparc_arch_setup): Turn into ... + (sparc_target::low_arch_setup): ...this. + (the_low_target): Remove the op field. + * linux-tic6x-low.cc (class tic6x_target) <low_arch_setup>: New + declaration. + (tic6x_arch_setup): Turn into ... + (tic6x_target::low_arch_setup): ...this. + (the_low_target): Remove the op field. + * linux-tile-low.cc (class tile_target) <low_arch_setup>: New + declaration. + (tile_arch_setup): Turn into ... + (tile_target::low_arch_setup): ...this. + (the_low_target): Remove the op field. + * linux-xtensa-low.cc (class xtensa_target) <low_arch_setup>: New + declaration. + (xtensa_arch_setup): Turn into ... + (xtensa_target::low_arch_setup): ...this. + (the_low_target): Remove the op field. + +2020-04-02 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + * linux-low.h (the_linux_target): New extern declaration. + * linux-low.cc (initialize_low): Use 'the_linux_target' to set + 'the_target'. + (the_linux_target): Remove. + * linux-x86-low.cc (class x86_target): New class. + (the_x86_target): New static object. + (the_linux_target): Define as pointer to the_x86_target. + * linux-aarch64-low.cc (class aarch64_target): New class. + (the_aarch64_target): New static object. + (the_linux_target): Define as pointer to the_aarch64_target. + * linux-arm-low.cc (class arm_target): New class. + (the_arm_target): New static object. + (the_linux_target): Define as pointer to the_arm_target. + * linux-bfin-low.cc (class bfin_target): New class. + (the_bfin_target): New static object. + (the_linux_target): Define as pointer to the_bfin_target. + * linux-cris-low.cc (class cris_target): New class. + (the_cris_target): New static object. + (the_linux_target): Define as pointer to the_cris_target. + * linux-crisv32-low.cc (class crisv32_target): New class. + (the_crisv32_target): New static object. + (the_linux_target): Define as pointer to the_crisv32_target. + * linux-ia64-low.cc (class ia64_target): New class. + (the_ia64_target): New static object. + (the_linux_target): Define as pointer to the_ia64_target. + * linux-m32r-low.cc (class m32r_target): New class. + (the_m32r_target): New static object. + (the_linux_target): Define as pointer to the_m32r_target. + * linux-m68k-low.cc (class m68k_target): New class. + (the_m68k_target): New static object. + (the_linux_target): Define as pointer to the_m68k_target. + * linux-mips-low.cc (class mips_target): New class. + (the_mips_target): New static object. + (the_linux_target): Define as pointer to the_mips_target. + * linux-nios2-low.cc (class nios2_target): New class. + (the_nios2_target): New static object. + (the_linux_target): Define as pointer to the_nios2_target. + * linux-ppc-low.cc (class ppc_target): New class. + (the_ppc_target): New static object. + (the_linux_target): Define as pointer to the_ppc_target. + * linux-riscv-low.cc (class riscv_target): New class. + (the_riscv_target): New static object. + (the_linux_target): Define as pointer to the_riscv_target. + * linux-s390-low.cc (class s390_target): New class. + (the_s390_target): New static object. + (the_linux_target): Define as pointer to the_s390_target. + * linux-sh-low.cc (class sh_target): New class. + (the_sh_target): New static object. + (the_linux_target): Define as pointer to the_sh_target. + * linux-sparc-low.cc (class sparc_target): New class. + (the_sparc_target): New static object. + (the_linux_target): Define as pointer to the_sparc_target. + * linux-tic6x-low.cc (class tic6x_target): New class. + (the_tic6x_target): New static object. + (the_linux_target): Define as pointer to the_tic6x_target. + * linux-tile-low.cc (class tile_target): New class. + (the_tile_target): New static object. + (the_linux_target): Define as pointer to the_tile_target. + * linux-xtensa-low.cc (class xtensa_target): New class. + (the_xtensa_target): New static object. + (the_linux_target): Define as pointer to the_xtensa_target. + +2020-04-02 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Turn some static functions in linux-low.cc into private methods of + linux_process_target. + + * linux-low.cc (handle_extended_wait): Turn into ... + (linux_process_target::handle_extended_wait): ...this. Call + 'mourn' on 'this' object instead of 'the_target'. + (maybe_move_out_of_jump_pad): Turn into... + (linux_process_target::maybe_move_out_of_jump_pad): ...this. + (linux_low_filter_event): Turn into... + (linux_process_target::filter_event): ...this. + (linux_wait_for_event_filtered): Turn into... + (linux_process_target::wait_for_event_filtered): ...this. + (linux_wait_for_event): Turn into... + (linux_process_target::wait_for_event): ...this. + (linux_wait_1): Turn into... + (linux_process_target::wait_1): ...this. + (wait_for_sigstop): Turn into... + (linux_process_target::wait_for_sigstop): ...this. + (move_out_of_jump_pad_callback): Turn into... + (linux_process_target::move_out_of_jump_pad): ...this. + (stop_all_lwps): Turn into... + (linux_process_target::stop_all_lwps): ...this. + (start_step_over): Turn into... + (linux_process_target::start_step_over): ...this. + (complete_ongoing_step_over): Turn into... + (linux_process_target::complete_ongoing_step_over): ...this. + (proceed_all_lwps): Turn into... + (linux_process_target::proceed_all_lwps): ...this. + (unstop_all_lwps): Turn into... + (linux_process_target::unstop_all_lwps): ...this. + + * linux-low.h (class linux_process_target) + <handle_extended_wait> + <maybe_move_out_of_jump_pad> + filter_event> + <wait_for_event_filtered> + <wait_for_event> + <wait_1> + <wait_for_sigstop> + <move_out_of_jump_pad> + <stop_all_lwps> + <start_step_over> + <complete_ongoing_step_over> + <proceed_all_lwps> + <unstop_all_lwps>: Declare. + + Update the callers below. + + * linux-low.cc (linux_process_target::attach): Update. + (linux_process_target::stabilize_threads): Ditto. + (linux_process_target::wait): Ditto. + +2020-04-02 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + * linux-low.h (struct linux_target_ops): Update the comment for + 'cannot_store_register' to return 0 or 1. + * linux-ppc-low.cc (ppc_cannot_store_register): Return 1 instead + of 2. + +2020-03-20 Simon Marchi <simon.marchi@efficios.com> + + * config.in: Re-generate. + * configure: Re-generate. + +2020-03-17 Kamil Rytarowski <n54@gmx.com> + + * regcache.cc (find_register_by_number): Update. + * tdesc.cc (init_target_desc): Likewise. + * tdesc.h (target_desc::reg_defs): Likewise. + +2020-03-12 Tom Tromey <tom@tromey.com> + + * configure: Rebuild. + * configure.ac (GDBSERVER_DEPFILES): Remove srv_selftest_objs. + (WIN32APILIBS): New subst. + * Makefile.in (SFILES, OBS, TAGS, GDBREPLAY_OBS): Remove + gdbsupport files. + (gdbsupport/%.o): Remove target. + (GDBSUPPORT_BUILDDIR, GDBSUPPORT): New variables. + (gdbserver$(EXEEXT), gdbreplay$(EXEEXT)): Add GDBSUPPORT. + (WIN32APILIBS): New variable. + (gdbserver$(EXEEXT)): Add WIN32APILIBS. + (gdbreplay$(EXEEXT)): Likewise. + +2020-03-12 Tom Tromey <tom@tromey.com> + + * config.in, configure: Rebuild. + * configure.ac: Call ZW_GNU_GETTEXT_SISTER_DIR. + * acinclude.m4: Include gettext-sister.m4. + * Makefile.in (top_builddir, INTL, INTL_DEPS, INTL_CFLAGS): New + variables. + (INCLUDE_CFLAGS): Add INTL_CFLAGS. + (gdbserver$(EXEEXT), gdbreplay$(EXEEXT)): Use INTL_DEPS, INTL. + +2020-03-12 Simon Marchi <simon.marchi@efficios.com> + + * acinclude.m4: Update path to selftest.m4. + +2020-03-12 Simon Marchi <simon.marchi@efficios.com> + + * configure.ac: Don't source bfd/development.sh, move + GDB_AC_COMMON higher. + * configure: Re-generate. + +2020-03-12 Simon Marchi <simon.marchi@efficios.com> + + * configure: Re-generate. + +2020-03-11 Simon Marchi <simon.marchi@efficios.com> + + * configure: Re-generate. + +2020-03-06 Andrew Burgess <andrew.burgess@embecosm.com> + + * .dir-locals.el: New file. + +2020-03-05 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + * .gitattributes: New file. + +2020-03-02 Andrew Burgess <andrew.burgess@embecosm.com> + + * remote-utils.cc (prepare_resume_reply): Add ability to convert T + reply into an S reply. + * server.cc (disable_packet_T): New global. + (captured_main): Set new global when appropriate. + * server.h (disable_packet_T): Declare. + +2020-02-21 Tom Tromey <tom@tromey.com> + + * Makefile.in (mostlyclean): New target. + +2020-02-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + * target.h (struct process_stratum_target): Remove. + (class process_target): Rename to ... + (class process_stratum_target): ... this. + * linux-low.h (class linux_process_target): Derive from + 'process_stratum_target'. + * linux-low.cc (linux_target_ops): Remove. + (initialize_low): Set the_target to the singleton instance of + linux_process_target. + * lynx-low.h (class lynx_process_target): Derive from + 'process_stratum_target'. + * lynx-low.cc (lynx_target_ops): Remove. + (initialize_low): Set the_target to the singleton instance of + lynx_process_target. + * nto-low.h (class nto_process_target): Derive from + 'process_stratum_target'. + * nto-low.cc (nto_target_ops): Remove. + (initialize_low): Set the_target to the singleton instance of + nto_process_target. + * win32-low.h (class win32_process_target): Derive from + 'process_stratum_target'. + * win32-low.cc (win32_target_ops): Remove. + (initialize_low): Set the_target to the singleton instance of + win32_process_target. + + Replace 'the_target->pt' with 'the_target' in the uses below. + + * hostio.cc (hostio_error) + (handle_setfs) + (handle_open) + (handle_unlink) + (handle_readlink) + * linux-aarch32-low.cc (arm_breakpoint_at) + * linux-aarch64-low.cc (aarch64_breakpoint_at) + * linux-arm-low.cc (arm_sigreturn_next_pc) + (arm_get_hwcap) + (arm_get_syscall_trapinfo) + * linux-cris-low.cc (cris_breakpoint_at) + * linux-crisv32-low.cc (cris_breakpoint_at) + * linux-low.cc (handle_extended_wait) + (linux_wait_1) + (linux_read_memory) + (linux_process_target::breakpoint_kind_from_pc) + (linux_get_auxv) + * linux-m32r-low.cc (m32r_breakpoint_at) + * linux-mips-low.cc (mips_breakpoint_at) + * linux-nios2-low.cc (nios2_breakpoint_at) + * linux-ppc-low.cc (ppc_breakpoint_at) + * linux-s390-low.cc (s390_get_hwcap) + * linux-sh-low.cc (sh_breakpoint_at) + * linux-sparc-low.cc (sparc_fill_gregset_to_stack) + (sparc_store_gregset_from_stack) + (sparc_breakpoint_at) + * linux-tic6x-low.cc (tic6x_breakpoint_at) + * linux-tile-low.cc (tile_breakpoint_at) + * linux-x86-low.cc (x86_breakpoint_at) + * linux-xtensa-low.cc (xtensa_breakpoint_at) + * mem-break.cc (bp_size) + (bp_opcode) + (insert_memory_breakpoint) + (set_raw_breakpoint_at) + (delete_raw_breakpoint) + (z_type_supported) + (uninsert_raw_breakpoint) + (reinsert_raw_breakpoint) + (validate_inserted_breakpoint) + * regcache.cc (regcache_read_pc) + (regcache_write_pc) + * remote-utils.cc (putpkt_binary_1) + (input_interrupt) + (getpkt) + (prepare_resume_reply) + * server.cc (handle_general_set) + (handle_detach) + (handle_qxfer_auxv) + (handle_qxfer_exec_file) + (handle_qxfer_libraries_svr4) + (handle_qxfer_osdata) + (handle_qxfer_siginfo) + (handle_qxfer_fdpic) + (handle_query) + (resume) + (handle_v_requests) + (queue_stop_reply_callback) + (captured_main) + * target.cc (prepare_to_access_memory) + (done_accessing_memory) + (read_inferior_memory) + (target_write_memory) + (target_stop_and_wait) + (target_wait) + (target_mourn_inferior) + (target_continue_no_signal) + (target_continue) + (target_supports_multi_process) + (kill_inferior) + * target.h + (target_create_inferior) + (target_post_create_inferior) + (myattach) + (target_supports_fork_events) + (target_supports_vfork_events) + (target_supports_exec_events) + (target_handle_new_gdb_connection) + (detach_inferior) + (mythread_alive) + (fetch_inferior_registers) + (store_inferior_registers) + (join_inferior) + (target_supports_non_stop) + (target_async) + (target_process_qsupported) + (target_supports_catch_syscall) + (target_get_ipa_tdesc_idx) + (target_supports_tracepoints) + (target_supports_fast_tracepoints) + (target_get_min_fast_tracepoint_insn_len) + (target_thread_stopped) + (target_pause_all) + (target_unpause_all) + (target_stabilize_threads) + (target_install_fast_tracepoint_jump_pad) + (target_emit_ops) + (target_supports_disable_randomization) + (target_supports_agent) + (target_enable_btrace) + (target_disable_btrace) + (target_read_btrace) + (target_read_btrace_conf) + (target_supports_range_stepping) + (target_supports_stopped_by_sw_breakpoint) + (target_stopped_by_sw_breakpoint) + (target_supports_stopped_by_hw_breakpoint) + (target_supports_hardware_single_step) + (target_stopped_by_hw_breakpoint) + (target_breakpoint_kind_from_pc) + (target_breakpoint_kind_from_current_state) + (target_supports_software_single_step) + (target_core_of_thread) + (target_thread_name) + (target_thread_handle) + * win32-low.cc (do_initial_child_stuff) + + Rename target op default definitions listed below. + + * target.cc (process_target::post_create_inferior): Rename as ... + (process_stratum_target::post_create_inferior): ... this. + (process_target::prepare_to_access_memory): Rename as ... + (process_stratum_target::prepare_to_access_memory): ... this. + (process_target::done_accessing_memory): Rename as ... + (process_stratum_target::done_accessing_memory): ... this. + (process_target::look_up_symbols): Rename as ... + (process_stratum_target::look_up_symbols): ... this. + (process_target::supports_read_auxv): Rename as ... + (process_stratum_target::supports_read_auxv): ... this. + (process_target::read_auxv): Rename as ... + (process_stratum_target::read_auxv): ... this. + (process_target::supports_z_point_type): Rename as ... + (process_stratum_target::supports_z_point_type): ... this. + (process_target::insert_point): Rename as ... + (process_stratum_target::insert_point): ... this. + (process_target::remove_point): Rename as ... + (process_stratum_target::remove_point): ... this. + (process_target::stopped_by_sw_breakpoint): Rename as ... + (process_stratum_target::stopped_by_sw_breakpoint): ... this. + (process_target::supports_stopped_by_sw_breakpoint): Rename as ... + (process_stratum_target::supports_stopped_by_sw_breakpoint): ... this. + (process_target::stopped_by_hw_breakpoint): Rename as ... + (process_stratum_target::stopped_by_hw_breakpoint): ... this. + (process_target::supports_stopped_by_hw_breakpoint): Rename as ... + (process_stratum_target::supports_stopped_by_hw_breakpoint): ... this. + (process_target::supports_hardware_single_step): Rename as ... + (process_stratum_target::supports_hardware_single_step): ... this. + (process_target::stopped_by_watchpoint): Rename as ... + (process_stratum_target::stopped_by_watchpoint): ... this. + (process_target::stopped_data_address): Rename as ... + (process_stratum_target::stopped_data_address): ... this. + (process_target::supports_read_offsets): Rename as ... + (process_stratum_target::supports_read_offsets): ... this. + (process_target::read_offsets): Rename as ... + (process_stratum_target::read_offsets): ... this. + (process_target::supports_get_tls_address): Rename as ... + (process_stratum_target::supports_get_tls_address): ... this. + (process_target::get_tls_address): Rename as ... + (process_stratum_target::get_tls_address): ... this. + (process_target::hostio_last_error): Rename as ... + (process_stratum_target::hostio_last_error): ... this. + (process_target::supports_qxfer_osdata): Rename as ... + (process_stratum_target::supports_qxfer_osdata): ... this. + (process_target::qxfer_osdata): Rename as ... + (process_stratum_target::qxfer_osdata): ... this. + (process_target::supports_qxfer_siginfo): Rename as ... + (process_stratum_target::supports_qxfer_siginfo): ... this. + (process_target::qxfer_siginfo): Rename as ... + (process_stratum_target::qxfer_siginfo): ... this. + (process_target::supports_non_stop): Rename as ... + (process_stratum_target::supports_non_stop): ... this. + (process_target::async): Rename as ... + (process_stratum_target::async): ... this. + (process_target::start_non_stop): Rename as ... + (process_stratum_target::start_non_stop): ... this. + (process_target::supports_multi_process): Rename as ... + (process_stratum_target::supports_multi_process): ... this. + (process_target::supports_fork_events): Rename as ... + (process_stratum_target::supports_fork_events): ... this. + (process_target::supports_vfork_events): Rename as ... + (process_stratum_target::supports_vfork_events): ... this. + (process_target::supports_exec_events): Rename as ... + (process_stratum_target::supports_exec_events): ... this. + (process_target::handle_new_gdb_connection): Rename as ... + (process_stratum_target::handle_new_gdb_connection): ... this. + (process_target::handle_monitor_command): Rename as ... + (process_stratum_target::handle_monitor_command): ... this. + (process_target::core_of_thread): Rename as ... + (process_stratum_target::core_of_thread): ... this. + (process_target::supports_read_loadmap): Rename as ... + (process_stratum_target::supports_read_loadmap): ... this. + (process_target::read_loadmap): Rename as ... + (process_stratum_target::read_loadmap): ... this. + (process_target::process_qsupported): Rename as ... + (process_stratum_target::process_qsupported): ... this. + (process_target::supports_tracepoints): Rename as ... + (process_stratum_target::supports_tracepoints): ... this. + (process_target::read_pc): Rename as ... + (process_stratum_target::read_pc): ... this. + (process_target::write_pc): Rename as ... + (process_stratum_target::write_pc): ... this. + (process_target::supports_thread_stopped): Rename as ... + (process_stratum_target::supports_thread_stopped): ... this. + (process_target::thread_stopped): Rename as ... + (process_stratum_target::thread_stopped): ... this. + (process_target::supports_get_tib_address): Rename as ... + (process_stratum_target::supports_get_tib_address): ... this. + (process_target::get_tib_address): Rename as ... + (process_stratum_target::get_tib_address): ... this. + (process_target::pause_all): Rename as ... + (process_stratum_target::pause_all): ... this. + (process_target::unpause_all): Rename as ... + (process_stratum_target::unpause_all): ... this. + (process_target::stabilize_threads): Rename as ... + (process_stratum_target::stabilize_threads): ... this. + (process_target::supports_fast_tracepoints): Rename as ... + (process_stratum_target::supports_fast_tracepoints): ... this. + (process_target::get_min_fast_tracepoint_insn_len): Rename as ... + (process_stratum_target::get_min_fast_tracepoint_insn_len): ... this. + (process_target::emit_ops): Rename as ... + (process_stratum_target::emit_ops): ... this. + (process_target::supports_disable_randomization): Rename as ... + (process_stratum_target::supports_disable_randomization): ... this. + (process_target::supports_qxfer_libraries_svr4): Rename as ... + (process_stratum_target::supports_qxfer_libraries_svr4): ... this. + (process_target::qxfer_libraries_svr4): Rename as ... + (process_stratum_target::qxfer_libraries_svr4): ... this. + (process_target::supports_agent): Rename as ... + (process_stratum_target::supports_agent): ... this. + (process_target::enable_btrace): Rename as ... + (process_stratum_target::enable_btrace): ... this. + (process_target::disable_btrace): Rename as ... + (process_stratum_target::disable_btrace): ... this. + (process_target::read_btrace): Rename as ... + (process_stratum_target::read_btrace): ... this. + (process_target::read_btrace_conf): Rename as ... + (process_stratum_target::read_btrace_conf): ... this. + (process_target::supports_range_stepping): Rename as ... + (process_stratum_target::supports_range_stepping): ... this. + (process_target::supports_pid_to_exec_file): Rename as ... + (process_stratum_target::supports_pid_to_exec_file): ... this. + (process_target::pid_to_exec_file): Rename as ... + (process_stratum_target::pid_to_exec_file): ... this. + (process_target::supports_multifs): Rename as ... + (process_stratum_target::supports_multifs): ... this. + (process_target::multifs_open): Rename as ... + (process_stratum_target::multifs_open): ... this. + (process_target::multifs_unlink): Rename as ... + (process_stratum_target::multifs_unlink): ... this. + (process_target::multifs_readlink): Rename as ... + (process_stratum_target::multifs_readlink): ... this. + (process_target::breakpoint_kind_from_pc): Rename as ... + (process_stratum_target::breakpoint_kind_from_pc): ... this. + (process_target::breakpoint_kind_from_current_state): Rename as ... + (process_stratum_target::breakpoint_kind_from_current_state): ... this. + (process_target::thread_name): Rename as ... + (process_stratum_target::thread_name): ... this. + (process_target::thread_handle): Rename as ... + (process_stratum_target::thread_handle): ... this. + (process_target::supports_software_single_step): Rename as ... + (process_stratum_target::supports_software_single_step): ... this. + (process_target::supports_catch_syscall): Rename as ... + (process_stratum_target::supports_catch_syscall): ... this. + (process_target::get_ipa_tdesc_idx): Rename as ... + (process_stratum_target::get_ipa_tdesc_idx): ... this. + +2020-02-20 Pedro Alves <palves@redhat.com> + + * target.cc (set_target_ops): Simply copy the given target pointer + instead of creating a copy of the pointed object. + +2020-02-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Turn process_stratum_target's get_ipa_tdesc_idx op into a method + of process_target. + + * target.h (struct process_stratum_target): Remove the target op. + (class process_target): Add the target op. + (target_get_ipa_tdesc_idx): Update the macro. + * target.cc (process_target::get_ipa_tdesc_idx): Define. + + Update the derived classes and callers below. + + * linux-low.cc (linux_target_ops): Update. + (linux_get_ipa_tdesc_idx): Turn into ... + (linux_process_target::get_ipa_tdesc_idx): ... this. + * linux-low.h (class linux_process_target): Update. + * lynx-low.cc (lynx_target_ops): Update. + * nto-low.cc (nto_target_ops): Update. + * win32-low.cc (win32_target_ops): Update. + +2020-02-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Turn process_stratum_target's supports_catch_syscall op into a + method of process_target. + + * target.h (struct process_stratum_target): Remove the target op. + (class process_target): Add the target op. + (target_supports_catch_syscall): Update the macro. + * target.cc (process_target::supports_catch_syscall): Define. + + Update the derived classes and callers below. + + * linux-low.cc (linux_target_ops): Update. + (linux_supports_catch_syscall): Turn into ... + (linux_process_target::supports_catch_syscall): ... this. + * linux-low.h (class linux_process_target): Update. + * lynx-low.cc (lynx_target_ops): Update. + * nto-low.cc (nto_target_ops): Update. + * win32-low.cc (win32_target_ops): Update. + +2020-02-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Turn process_stratum_target's supports_software_single_step op + into a method of process_target. + + * target.h (struct process_stratum_target): Remove the target op. + (class process_target): Add the target op. + (target_supports_software_single_step): Update the macro. + * target.cc (process_target::supports_software_single_step): Define. + + Update the derived classes and callers below. + + * linux-low.cc (linux_target_ops): Update. + (linux_supports_software_single_step): Turn into ... + (linux_process_target::supports_software_single_step): ... this. + * linux-low.h (class linux_process_target): Update. + * lynx-low.cc (lynx_target_ops): Update. + * nto-low.cc (nto_target_ops): Update. + * win32-low.cc (win32_target_ops): Update. + +2020-02-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Turn process_stratum_target's thread_name and thread_handle ops + into methods of process_target. + + * target.h (struct process_stratum_target): Remove the target ops. + (class process_target): Add the target ops. + (target_thread_name): Update the macro. + (target_thread_handle): Update the macro. + * target.cc (process_target::thread_name): Define. + (process_target::thread_handle): Define. + + Update the derived classes and callers below. + + * linux-low.cc (linux_target_ops): Update. + (linux_process_target::thread_name): Define. + (linux_process_target::thread_handle): Define. + * linux-low.h (class linux_process_target): Update. + * lynx-low.cc (lynx_target_ops): Update. + * nto-low.cc (nto_target_ops): Update. + * win32-low.cc (win32_target_ops): Update. + +2020-02-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Turn process_stratum_target's breakpoint_kind_from_pc, + sw_breakpoint_from_kind, and breakpoint_kind_from_current_state + ops into methods of process_target. + + * target.h (struct process_stratum_target): Remove the target op. + (class process_target): Add the target op. + (target_breakpoint_kind_from_pc): Update the macro. + (target_breakpoint_kind_from_current_state): Update the macro. + (default_breakpoint_kind_from_pc): Remove declaration. + * target.cc (default_breakpoint_kind_from_pc): Turn into ... + (process_target::breakpoint_kind_from_pc): ... this. + (process_target::breakpoint_kind_from_current_state): Define. + + Update the derived classes and callers below. + + * mem-break.cc (bp_size): Update. + (bp_opcode): Update. + * linux-low.cc (linux_target_ops): Update. + (linux_wait_1): Update. + (linux_breakpoint_kind_from_pc): Turn into ... + (linux_process_target::breakpoint_kind_from_pc): ... this. + (linux_sw_breakpoint_from_kind): Turn into ... + (linux_process_target::sw_breakpoint_from_kind): ... this. + (linux_breakpoint_kind_from_current_state): Turn into ... + (linux_process_target::breakpoint_kind_from_current_state): ... this. + * linux-low.h (class linux_process_target): Update. + * lynx-low.cc (lynx_target_ops): Update. + (lynx_process_target::sw_breakpoint_from_kind): Define. + * lynx-low.h (class lynx_process_target): Update. + * nto-low.cc (nto_target_ops): Update. + (nto_sw_breakpoint_from_kind): Turn into ... + (nto_process_target::sw_breakpoint_from_kind): ... this. + * nto-low.h (class nto_process_target): Update. + * win32-low.cc (win32_target_ops): Update. + (win32_sw_breakpoint_from_kind): Turn into ... + (win32_process_target::sw_breakpoint_from_kind): ... this. + * win32-low.h (class win32_process_target): Update. + +2020-02-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Turn process_stratum_target's multifs_open, multifs_readlink, + multifs_unlink ops into methods of process_target. + + * target.h (struct process_stratum_target): Remove the target ops. + (class process_target): Add the target ops. Also add + 'supports_multifs'. + * target.cc: Include "fcntl.h", "unistd.h", "sys/types.h", and + "sys/stat.h". + (process_target::supports_multifs): Define. + (process_target::multifs_open): Define. + (process_target::multifs_readlink): Define. + (process_target::multifs_unlink): Define. + + Update the derived classes and callers below. + + * hostio.cc (handle_setfs): Update. + (handle_open): Update. + (handle_unlink): Update. + (handle_readlink): Update. + * linux-low.cc (linux_target_ops): Update. + (linux_process_target::supports_multifs): Define. + (linux_process_target::multifs_open): Define. + (linux_process_target::multifs_readlink): Define. + (linux_process_target::multifs_unlink): Define. + * linux-low.h (class linux_process_target): Update. + * lynx-low.cc (lynx_target_ops): Update. + * nto-low.cc (nto_target_ops): Update. + * win32-low.cc (win32_target_ops): Update. + +2020-02-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Turn process_stratum_target's pid_to_exec_file op into a method + of process_target. + + * target.h (struct process_stratum_target): Remove the target op. + (class process_target): Add the target op. Also add + 'supports_pid_to_exec_file'. + * target.cc (process_target::pid_to_exec_file): Define. + (process_target::supports_pid_to_exec_file): Define. + + Update the derived classes and callers below. + + * server.cc (handle_qxfer_exec_file): Update. + (handle_query): Update. + * linux-low.cc (linux_target_ops): Update. + (linux_process_target::supports_pid_to_exec_file): Define. + (linux_process_target::pid_to_exec_file): Define. + * linux-low.h (class linux_process_target): Update. + * lynx-low.cc (lynx_target_ops): Update. + * nto-low.cc (nto_target_ops): Update. + * win32-low.cc (win32_target_ops): Update. + +2020-02-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Turn process_stratum_target's supports_range_stepping op into a + method of process_target. + + * target.h (struct process_stratum_target): Remove the target op. + (class process_target): Add the target op. + (target_supports_range_stepping): Update the macro. + * target.cc (process_target::supports_range_stepping): Define. + + Update the derived classes and callers below. + + * linux-low.cc (linux_target_ops): Update. + (linux_supports_range_stepping): Turn into ... + (linux_process_target::supports_range_stepping): ... this. + * linux-low.h (class linux_process_target): Update. + * lynx-low.cc (lynx_target_ops): Update. + * nto-low.cc (nto_target_ops): Update. + * win32-low.cc (win32_target_ops): Update. + +2020-02-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Turn process_stratum_target's btrace-related ops (enable_btrace, + disable_btrace, read_btrace, read_btrace_conf) into methods of + process_target. + + * target.h (struct process_stratum_target): Remove the target ops. + (class process_target): Add the target ops. + (target_enable_btrace): Update. + (target_disable_btrace): Update. + (target_read_btrace): Update. + (target_read_btrace_conf): Update. + * target.cc (process_target::enable_btrace): Define. + (process_target::disable_btrace): Define. + (process_target::read_btrace): Define. + (process_target::read_btrace_conf): Define. + + Update the derived classes and callers below. + + * linux-low.cc (linux_target_ops): Update. + (linux_process_target:enable_btrace): Define as a wrapper around + linux_enable_btrace. + (linux_low_disable_btrace): Turn into ... + (linux_process_target::disable_btrace): ... this. + (linux_low_read_btrace): Turn into ... + (linux_process_target::read_btrace): ... this. + (linux_low_btrace_conf): Turn into ... + (linux_process_target::read_btrace_conf): ... this. + * linux-low.h (class linux_process_target): Update. + * lynx-low.cc (lynx_target_ops): Update. + * nto-low.cc (nto_target_ops): Update. + * win32-low.cc (win32_target_ops): Update. + +2020-02-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Turn process_stratum_target's supports_agent op into a method of + process_target. + + * target.h (struct process_stratum_target): Remove the target op. + (class process_target): Add the target op. + (target_supports_agent): Update the macro. + * target.cc (process_target::supports_agent): Define. + + Update the derived classes and callers below. + + * linux-low.cc (linux_target_ops): Update. + (linux_supports_agent): Turn into ... + (linux_process_target::supports_agent): ... this. + * linux-low.h (class linux_process_target): Update. + * lynx-low.cc (lynx_target_ops): Update. + * nto-low.cc (nto_target_ops): Update. + * win32-low.cc (win32_target_ops): Update. + +2020-02-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Turn process_stratum_target's qxfer_libraries_svr4 op into a + method of process_target. + + * target.h (struct process_stratum_target): Remove the target op. + (class process_target): Add the target op. Also add + 'supports_qxfer_libraries_svr4'. + * target.cc (process_target::qxfer_libraries_svr4): Define. + (process_target::supports_qxfer_libraries_svr4): Define. + + Update the derived classes and callers below. + + * server.cc (handle_qxfer_libraries_svr4): Update. + (handle_query): Update. + * linux-low.cc (linux_target_ops): Update. + (linux_process_target::supports_qxfer_libraries_svr4): Define. + (linux_qxfer_libraries_svr4): Turn into ... + (linux_process_target::qxfer_libraries_svr4): ... this. + * linux-low.h (class linux_process_target): Update. + * lynx-low.cc (lynx_target_ops): Update. + * nto-low.cc (nto_target_ops): Update. + * win32-low.cc (win32_target_ops): Update. + +2020-02-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Turn process_stratum_target's supports_disable_randomization op + into a method of process_target. + + * target.h (struct process_stratum_target): Remove the target op. + (class process_target): Add the target op. + (target_supports_disable_randomization): Update the macro. + * target.cc (process_target::supports_disable_randomization): Define. + + Update the derived classes and callers below. + + * linux-low.cc (linux_target_ops): Update. + (linux_supports_disable_randomization): Turn into ... + (linux_process_target::supports_disable_randomization): ... this. + * linux-low.h (class linux_process_target): Update. + * lynx-low.cc (lynx_target_ops): Update. + * nto-low.cc (nto_target_ops): Update. + * win32-low.cc (win32_target_ops): Update. + +2020-02-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Turn process_stratum_target's emit_ops op into a method of + process_target. + + * target.h (struct process_stratum_target): Remove the target op. + (class process_target): Add the target op. + (target_emit_ops): Update the macro. + * target.cc (process_target::emit_ops): Define. + + Update the derived classes and callers below. + + * linux-low.cc (linux_target_ops): Update. + (linux_emit_ops): Turn into ... + (linux_process_target::emit_ops): ... this. + * linux-low.h (class linux_process_target): Update. + * lynx-low.cc (lynx_target_ops): Update. + * nto-low.cc (nto_target_ops): Update. + * win32-low.cc (win32_target_ops): Update. + +2020-02-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Turn process_stratum_target's install_fast_tracepoint_jump_pad + and get_min_fast_tracepoint_insn_len ops into methods of + process_target. + + * target.h (struct process_stratum_target): Remove the target ops. + (class process_target): Add the target ops. Also add + 'supports_fast_tracepoints'. + (target_supports_fast_tracepoints): Update the macro. + (target_get_min_fast_tracepoint_insn_len): Update the macro. + (install_fast_tracepoint_jump_pad): Update and rename the macro + to ... + (target_install_fast_tracepoint_jump_pad): ... this. + * target.cc (process_target::supports_fast_tracepoints): Define. + (process_target::install_fast_tracepoint_jump_pad): Define. + (process_target::get_min_fast_tracepoint_insn_len): Define. + + Update the derived classes and callers below. + + * tracepoint.cc (install_fast_tracepoint): Update. + * linux-low.cc (linux_target_ops): Update. + (linux_process_target::supports_fast_tracepoints): Define. + (linux_install_fast_tracepoint_jump_pad): Turn into ... + (linux_process_target::install_fast_tracepoint_jump_pad): ... this. + (linux_get_min_fast_tracepoint_insn_len): Turn into ... + (linux_process_target::get_min_fast_tracepoint_insn_len): ... this. + * linux-low.h (class linux_process_target): Update. + * lynx-low.cc (lynx_target_ops): Update. + * nto-low.cc (nto_target_ops): Update. + * win32-low.cc (win32_target_ops): Update. + +2020-02-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Turn process_stratum_target's stabilize_threads op into a + method of process_target. + + * target.h (struct process_stratum_target): Remove the target op. + (class process_target): Add the target op. + (target_stabilize_threads): Update the macro. + * target.cc (process_target::stabilize_threads): Define. + + Update the derived classes and callers below. + + * server.cc (handle_status): Update. + * tracepoint.cc (cmd_qtdp): Update. + (cmd_qtstart): Update. + * linux-low.cc (linux_target_ops): Update. + (linux_stabilize_threads): Turn into ... + (linux_process_target::stabilize_threads): ... this. + (linux_wait_1): Update. + * linux-low.h (class linux_process_target): Update. + * lynx-low.cc (lynx_target_ops): Update. + * nto-low.cc (nto_target_ops): Update. + * win32-low.cc (win32_target_ops): Update. + +2020-02-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Turn process_stratum_target's pause_all and unpause_all ops + into methods of process_target. + + * target.h (struct process_stratum_target): Remove the target ops. + (class process_target): Add the target ops. + (pause_all): Update the macro and rename to... + (target_pause_all): ... this. + (unpause_all): Update the macro and rename to... + (target_unpause_all): ... this. + * target.cc (process_target::pause_all): Define. + (process_target::unpause_all): Define. + + Update the derived classes and callers below. + + * server.cc (handle_status): Update. + * tracepoint.cc (clear_installed_tracepoints): Update. + (cmd_qtdp): Update. + (cmd_qtstart): Update. + (stop_tracing): Update. + (cmd_qtstatus): Update. + (upload_fast_traceframes): Update. + (run_inferior_command): Update. + * linux-low.cc (linux_target_ops): Update. + (linux_pause_all): Turn into ... + (linux_process_target::pause_all): ... this. + (linux_unpause_all): Turn into ... + (linux_process_target::unpause_all): ... this. + (linux_process_target::prepare_to_access_memory): Update. + (linux_process_target::done_accessing_memory): Update. + * linux-low.h (class linux_process_target): Update. + * lynx-low.cc (lynx_target_ops): Update. + * nto-low.cc (nto_target_ops): Update. + * win32-low.cc (win32_target_ops): Update. + +2020-02-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Turn process_stratum_target's get_tib_address op into a method of + process_target. + + * target.h (struct process_stratum_target): Remove the target op. + (class process_target): Add the target op. Also add + 'supports_get_tib_address'. + * target.cc (process_target::get_tib_address): Define. + (process_target::supports_get_tib_address): Define. + + Update the derived classes and callers below. + + * server.cc (handle_query): Update. + * linux-low.cc (win32_target_ops): Update. + * lynx-low.cc (lynx_target_ops): Update. + * nto-low.cc (nto_target_ops): Update. + * win32-low.cc (win32_target_ops): Update. + (win32_process_target::supports_get_tib_address): Define. + (win32_get_tib_address): Turn into ... + (win32_process_target::get_tib_address): ... this. + * win32-low.h (class win32_process_target): Update. + +2020-02-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Turn process_stratum_target's thread_stopped op into a method of + process_target. + + * target.h (struct process_stratum_target): Remove the target op. + (class process_target): Add the target op. Also add + 'supports_thread_stopped'. + (target_thread_stopped): Update the macro. + * target.cc (process_target::thread_stopped): Define. + (process_target::supports_thread_stopped): Define. + (prepare_to_access_memory): Update. + + Update the derived classes and callers below. + + * server.cc (queue_stop_reply_callback): Update. + * linux-low.cc (linux_target_ops): Update. + (linux_process_target::supports_thread_stopped): Define. + (linux_thread_stopped): Turn into ... + (linux_process_target::thread_stopped): ... this. + * linux-low.h (class linux_process_target): Update. + * lynx-low.cc (lynx_target_ops): Update. + * nto-low.cc (nto_target_ops): Update. + * win32-low.cc (win32_target_ops): Update. + +2020-02-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Turn process_stratum_target's read_pc and write_pc ops into + methods of process_target. + + * target.h (struct process_stratum_target): Remove the target ops. + (class process_target): Add the target ops. + * target.cc (process_target::read_pc): Define. + (process_target::write_pc): Define. + + Update the derived classes and callers below. + + * regcache.cc (regcache_read_pc): Update. + (regcache_write_pc): Update. + * linux-low.cc (linux_target_ops): Update. + (linux_read_pc): Turn into ... + (linux_process_target::read_pc): ... this. + (linux_write_pc): Turn into ... + (linux_process_target::write_pc): ... this. + * linux-low.h (class linux_process_target): Update. + * lynx-low.cc (lynx_target_ops): Update. + * nto-low.cc (nto_target_ops): Update. + * win32-low.cc (win32_target_ops): Update. + +2020-02-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Turn process_stratum_target's supports_tracepoints op into a + method of process_target. + + * target.h (struct process_stratum_target): Remove the target op. + (class process_target): Add the target op. + (target_supports_tracepoints): Update the macro. + * target.cc (process_target::supports_tracepoints): Define. + + Update the derived classes and callers below. + + * linux-low.cc (linux_target_ops): Update. + (linux_supports_tracepoints): Turn into ... + (linux_process_target::supports_tracepoints): ... this. + * linux-low.h (class linux_process_target): Update. + * lynx-low.cc (lynx_target_ops): Update. + * nto-low.cc (nto_target_ops): Update. + * win32-low.cc (win32_target_ops): Update. + +2020-02-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Turn process_stratum_target's process_qsupported op into a method + of process_target. + + * target.h (struct process_stratum_target): Remove the target op. + (class process_target): Add the target op. + (target_process_qsupported): Update the macro. + * target.cc (process_target::process_qsupported): Define. + + Update the derived classes and callers below. + + * linux-low.cc (linux_target_ops): Update. + (linux_process_qsupported): Turn into ... + (linux_process_target::process_qsupported): ... this. + * linux-low.h (class linux_process_target): Update. + * lynx-low.cc (lynx_target_ops): Update. + * nto-low.cc (nto_target_ops): Update. + * win32-low.cc (win32_target_ops): Update. + +2020-02-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Turn process_stratum_target's read_loadmap op into a method of + process_target. + + * target.h (struct process_stratum_target): Remove the target op. + (class process_target): Add the target op. Also add + 'supports_read_loadmap'. + * target.cc (process_target::read_loadmap): Define. + (process_target::supports_read_loadmap): Define. + + Update the derived classes and callers below. + + * server.cc (handle_qxfer_fdpic): Update. + (handle_query): Update. + * linux-low.cc (linux_target_ops): Update. + (linux_process_target::supports_read_loadmap): Define. + (linux_read_loadmap): Turn into ... + (linux_process_target::read_loadmap): ... this. + * linux-low.h (class linux_process_target): Update. + * lynx-low.cc (lynx_target_ops): Update. + * nto-low.cc (nto_target_ops): Update. + * win32-low.cc (win32_target_ops): Update. + +2020-02-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Turn process_stratum_target's core_of_thread op into a method of + process_target. + + * target.h (struct process_stratum_target): Remove the target op. + (class process_target): Add the target op. + (target_core_of_thread): Update the macro. + * target.cc (process_target::core_of_thread): Define. + + Update the derived classes and callers below. + + * linux-low.cc (linux_target_ops): Update. + (linux_process_target::core_of_thread): Define. + * linux-low.h (class linux_process_target): Update. + * lynx-low.cc (lynx_target_ops): Update. + * nto-low.cc (nto_target_ops): Update. + * win32-low.cc (win32_target_ops): Update. + +2020-02-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Turn process_stratum_target's handle_monitor_command op into a + method of process_target. + + * target.h (struct process_stratum_target): Remove the target op. + (class process_target): Add the target op. + (target_handle_monitor_command): Update the macro. + * target.cc (process_target::handle_monitor_command): Define. + + Update the derived classes and callers below. + + * server.cc (handle_query): Update. + * linux-low.cc (linux_target_ops): Update. + (linux_process_target::handle_monitor_command): Define. + * linux-low.h (class linux_process_target): Update. + * lynx-low.cc (lynx_target_ops): Update. + * nto-low.cc (nto_target_ops): Update. + * win32-low.cc (win32_target_ops): Update. + +2020-02-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Turn process_stratum_target's handle_new_gdb_connection op into a + method of process_target. + + * target.h (struct process_stratum_target): Remove the target op. + (class process_target): Add the target op. + (target_handle_new_gdb_connection): Update the macro. + * target.cc (process_target::handle_new_gdb_connection): Define. + + Update the derived classes and callers below. + + * linux-low.cc (linux_target_ops): Update. + (linux_handle_new_gdb_connection): Turn into ... + (linux_process_target::handle_new_gdb_connection): ... this. + * linux-low.h (class linux_process_target): Update. + * lynx-low.cc (lynx_target_ops): Update. + * nto-low.cc (nto_target_ops): Update. + * win32-low.cc (win32_target_ops): Update. + +2020-02-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Turn process_stratum_target's supports_fork_events, + supports_vfork_events, and supports_exec_events ops into methods + of process_target. + + * target.h (struct process_stratum_target): Remove the target ops. + (class process_target): Add the target ops. + (target_supports_fork_events): Update the macro. + (target_supports_vfork_events): Update the macro. + (target_supports_exec_events): Update the macro. + * target.cc (process_target::supports_fork_events): Define. + (process_target::supports_vfork_events): Define. + (process_target::supports_exec_events): Define. + + Update the derived classes and callers below. + + * linux-low.cc (linux_target_ops): Update. + (linux_supports_fork_events): Turn into ... + (linux_process_target::supports_fork_events): ... this. + (linux_supports_vfork_events): Turn into ... + (linux_process_target::supports_vfork_events): ... this. + (linux_supports_exec_events): Turn into ... + (linux_process_target::supports_exec_events): ... this. + * linux-low.h (class linux_process_target): Update. + * lynx-low.cc (lynx_target_ops): Update. + * nto-low.cc (nto_target_ops): Update. + * win32-low.cc (win32_target_ops): Update. + +2020-02-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Turn process_stratum_target's supports_multi_process op into a + method of process_target. + + * target.h (struct process_stratum_target): Remove the target op. + (class process_target): Add the target op. + * target.cc (process_target::supports_multi_process): Define. + (target_supports_multi_process): Update. + + Update the derived classes and callers below. + + * linux-low.cc (linux_target_ops): Update. + (linux_supports_multi_process): Turn into ... + (linux_process_target::supports_multi_process): ... this. + * linux-low.h (class linux_process_target): Update. + * lynx-low.cc (lynx_target_ops): Update. + * nto-low.cc (nto_target_ops): Update. + * win32-low.cc (win32_target_ops): Update. + +2020-02-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Turn process_stratum_target's supports_non_stop, async, and + start_non_stop ops into methods of process_target. + + * target.h (struct process_stratum_target): Remove the target ops. + (class process_target): Add the target ops. + (target_supports_non_stop): Update the macro. + (target_async): Update the macro. + (start_non_stop): Remove declaration. + * target.cc (process_target::supports_non_stop): Define. + (process_target::async): Define. + (process_target::start_non_stop): Define. + (start_non_stop): Remove. + + Update the derived classes and callers below. + + * server.cc (handle_qxfer_siginfo): Update. + (handle_query): Update. + * linux-low.cc (linux_target_ops): Update. + (linux_supports_non_stop): Turn into ... + (linux_process_target::supports_non_stop): ... this. + (linux_async): Turn into ... + (linux_process_target::async): ... this. + (linux_start_non_stop): Turn into ... + (linux_process_target::start_non_stop): ... this. + * linux-low.h (class linux_process_target): Update. + * lynx-low.cc (lynx_target_ops): Update. + * nto-low.cc (nto_target_ops): Update. + (nto_supports_non_stop): Remove; rely on the default behavior + instead. + * win32-low.cc (win32_target_ops): Update. + +2020-02-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Turn process_stratum_target's qxfer_siginfo op into a method of + process_target. + + * target.h (struct process_stratum_target): Remove the target op. + (class process_target): Add the target op. Also add + 'supports_qxfer_siginfo'. + * target.cc (process_target::qxfer_siginfo): Define. + (process_target::supports_qxfer_siginfo): Define. + + Update the derived classes and callers below. + + * server.cc (handle_qxfer_siginfo): Update. + (handle_query): Update. + * linux-low.cc (linux_target_ops): Update. + (linux_process_target::supports_qxfer_siginfo): Define. + (linux_xfer_siginfo): Turn into ... + (linux_process_target::qxfer_siginfo): ... this. + * linux-low.h (class linux_process_target): Update. + * lynx-low.cc (lynx_target_ops): Update. + * nto-low.cc (nto_target_ops): Update. + * win32-low.cc (win32_target_ops): Update. + +2020-02-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Turn process_stratum_target's qxfer_osdata op into a method of + process_target. + + * target.h (struct process_stratum_target): Remove the target op. + (class process_target): Add the target op. Also add + 'supports_qxfer_osdata'. + * target.cc (process_target::qxfer_osdata): Define. + (process_target::supports_qxfer_osdata): Define. + + Update the derived classes and callers below. + + * server.cc (handle_qxfer_osdata): Update. + (handle_query): Update. + * linux-low.cc (linux_target_ops): Update. + (linux_process_target::supports_qxfer_osdata): Define. + (linux_qxfer_osdata): Turn into ... + (linux_process_target::qxfer_osdata): ... this. + * linux-low.h (class linux_process_target): Update. + * lynx-low.cc (lynx_target_ops): Update. + * nto-low.cc (nto_target_ops): Update. + * win32-low.cc (win32_target_ops): Update. + +2020-02-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Turn process_stratum_target's hostio_last_error op into a + method of process_target. + + * target.h (struct process_stratum_target): Remove the target op. + (class process_target): Add the target op. + * target.cc: Add "hostio.h" to includes. + (process_target::hostio_last_error): Define. + + Update the derived classes and callers below. + + * hostio.cc (hostio_error): Update. + * linux-low.cc: Remove "hostio.h" from includes. + (linux_target_ops): Update. + * lynx-low.cc (lynx_target_ops): Update. + * nto-low.cc (nto_target_ops): Update. + * win32-low.h (class win32_process_target): Update. + * win32-low.cc (win32_target_ops): Update. + (wince_hostio_last_error): Turn into ... + (win32_process_target::hostio_last_error): ... this. + +2020-02-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Turn process_stratum_target's get_tls_address op into a method of + process_target. + + * target.h (struct process_stratum_target): Remove the target op. + (class process_target): Add the target op. Also add + 'supports_get_tls_address'. + * target.cc (process_target::get_tls_address): Define. + (process_target::supports_get_tls_address): Define. + + Update the derived classes and callers below. + + * server.cc (handle_query): Update. + * linux-low.cc (linux_target_ops): Update. + (linux_process_target::supports_get_tls_address): Define. + (linux_process_target::get_tls_address): Define. + * linux-low.h (class linux_process_target): Update. + * lynx-low.cc (lynx_target_ops): Update. + * nto-low.cc (nto_target_ops): Update. + * win32-low.cc (win32_target_ops): Update. + +2020-02-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Turn process_stratum_target's read_offsets op into a method of + process_target. + + * target.h (struct process_stratum_target): Remove the target op. + (class process_target): Add the target op. Also add + 'supports_read_offsets'. + * target.cc (process_target::read_offsets): Define. + (process_target::supports_read_offsets): Define. + + Update the derived classes and callers below. + + * server.cc (handle_query): Update. + * linux-low.cc (SUPPORTS_READ_OFFSETS): New #define directive. + (linux_target_ops): Update. + (linux_process_target::supports_read_offsets): Define. + (linux_read_offsets): Turn into ... + (linux_process_target::read_offsets): ... this. + * linux-low.h (class linux_process_target): Update. + * lynx-low.cc (lynx_target_ops): Update. + * nto-low.cc (nto_target_ops): Update. + * win32-low.cc (win32_target_ops): Update. + +2020-02-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Turn process_stratum_target's stopped_by_watchpoint and + stopped_data_address ops into methods of process_target. + + * target.h (struct process_stratum_target): Remove the target ops. + (class process_target): Add the target ops. + * target.cc (process_target::stopped_by_watchpoint): Define. + (process_target::stopped_data_address): Define. + + Update the derived classes and callers below. + + * remote-utils.cc (prepare_resume_reply): Update. + * linux-low.cc (linux_target_ops): Update. + (linux_stopped_by_watchpoint): Turn into ... + (linux_process_target::stopped_by_watchpoint): ... this. + (linux_stopped_data_address): Turn into ... + (linux_process_target::stopped_data_address): ... this. + * linux-low.h (class linux_process_target): Update. + * lynx-low.cc (lynx_target_ops): Update. + * nto-low.cc (nto_target_ops): Update. + (nto_stopped_by_watchpoint): Turn into ... + (nto_process_target::stopped_by_watchpoint): ... this. + (nto_stopped_data_address): Turn into ... + (nto_process_target::stopped_data_address): ... this. + * nto-low.h (class nto_process_target): Update. + * win32-low.cc (win32_target_ops): Update. + (win32_stopped_by_watchpoint): Turn into ... + (win32_process_target::stopped_by_watchpoint): ... this. + (win32_stopped_data_address): Turn into ... + (win32_process_target::stopped_data_address): ... this. + * win32-low.h (class win32_process_target): Update. + +2020-02-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Turn process_stratum_target's supports_hardware_single_step op into + a method of process_target. + + * target.h (struct process_stratum_target): Remove the target op. + (class process_target): Add the target op. + (target_supports_hardware_single_step): Update the macro. + (target_can_do_hardware_single_step): Remove declaration. + * target.cc (process_target::supports_hardware_single_step): Define. + (target_can_do_hardware_single_step): Remove. + + Update the derived classes and callers below. + + * linux-low.h (class linux_process_target): Update. + * linux-low.cc (linux_target_ops): Update. + (linux_supports_hardware_single_step): Turn into ... + (linux_process_target::supports_hardware_single_step): ... this. + * lynx-low.h (class lynx_process_target): Update. + * lynx-low.cc (lynx_target_ops): Update. + (lynx_process_target::supports_hardware_single_step): Define. + * nto-low.h (class nto_process_target): Update. + * nto-low.cc (nto_target_ops): Update. + (nto_process_target::supports_hardware_single_step): Define. + * win32-low.h (class win32_process_target): Update. + * win32-low.cc (win32_target_ops): Update. + (win32_process_target::supports_hardware_single_step): Define. + +2020-02-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Turn process_stratum_target's {supports_}stopped_by_hw_breakpoint + ops into methods of process_target. + + * target.h (struct process_stratum_target): Remove the target ops. + (class process_target): Add the target ops. + (target_stopped_by_hw_breakpoint): Update the macro. + (target_supports_stopped_by_hw_breakpoint): Update the macro. + * target.cc (process_target::stopped_by_hw_breakpoint): Define. + (process_target::supports_stopped_by_hw_breakpoint): Define. + + Update the derived classes and callers below. + + * linux-low.cc (linux_target_ops): Update. + (linux_stopped_by_hw_breakpoint): Turn into ... + (linux_process_target::stopped_by_hw_breakpoint): ... this. + (linux_supports_stopped_by_hw_breakpoint): Turn into ... + (linux_process_target::supports_stopped_by_hw_breakpoint): ... this. + * linux-low.h (class linux_process_target): Update. + * lynx-low.cc (lynx_target_ops): Update. + * nto-low.cc (nto_target_ops): Update. + * win32-low.cc (win32_target_ops): Update. + +2020-02-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Turn process_stratum_target's {supports_}stopped_by_sw_breakpoint + ops into methods of process_target. + + * target.h (struct process_stratum_target): Remove the target ops. + (class process_target): Add the target ops. + (target_stopped_by_sw_breakpoint): Update the macro. + (target_supports_stopped_by_sw_breakpoint): Update the macro. + * target.cc (process_target::stopped_by_sw_breakpoint): Define. + (process_target::supports_stopped_by_sw_breakpoint): Define. + + Update the derived classes and callers below. + + * linux-low.cc (linux_target_ops): Update. + (linux_stopped_by_sw_breakpoint): Turn into ... + (linux_process_target::stopped_by_sw_breakpoint): ... this. + (linux_supports_stopped_by_sw_breakpoint): Turn into ... + (linux_process_target::supports_stopped_by_sw_breakpoint): ... this. + * linux-low.h (class linux_process_target): Update. + * lynx-low.cc (lynx_target_ops): Update. + * nto-low.cc (nto_target_ops): Update. + * win32-low.cc (win32_target_ops): Update. + +2020-02-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Turn process_stratum_target's insert_point and remove_point ops + into methods of process_target. + + * target.h (struct process_stratum_target): Remove the target ops. + (class process_target): Add the target ops. + * target.cc (process_target::insert_point): Define. + (process_target::remove_point): Define. + + Update the derived classes and callers below. + + * mem-break.cc (set_raw_breakpoint_at): Update. + (delete_raw_breakpoint): Update. + (uninsert_raw_breakpoint): Update. + (reinsert_raw_breakpoint): Update. + * linux-low.cc (linux_target_ops): Update. + (linux_insert_point): Turn into ... + (linux_process_target::insert_point): ... this. + (linux_remove_point): Turn into ... + (linux_process_target::remove_point): ... this. + * linux-low.h (class linux_process_target): Update. + * lynx-low.cc (lynx_target_ops): Update. + * nto-low.cc (nto_target_ops): Update. + (nto_insert_point): Turn into ... + (nto_process_target::insert_point): ... this. + (nto_remove_point): Turn into ... + (nto_process_target::remove_point): ... this. + * nto-low.h (class nto_process_target): Update. + * win32-low.cc (win32_target_ops): Update. + (win32_insert_point): Turn into ... + (win32_process_target::insert_point): ... this. + (win32_remove_point): Turn into ... + (win32_process_target::remove_point): ... this. + * win32-low.h (class win32_process_target): Update. + +2020-02-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Turn process_stratum_target's supports_z_point_type op into a + method of process_target. + + * target.h (struct process_stratum_target): Remove the target op. + (class process_target): Add the target op. + * target.cc (process_target::supports_z_point_type): Define. + + Update the derived classes and callers below. + + * mem-break.cc (z_type_supported): Update. + * linux-low.cc (linux_target_ops): Update. + (linux_supports_z_point_type): Turn into ... + (linux_process_target::supports_z_point_type): ... this. + * linux-low.h (class linux_process_target): Update. + * lynx-low.cc (lynx_target_ops): Update. + * nto-low.cc (nto_target_ops): Update. + (nto_supports_z_point_type): Turn into ... + (nto_process_target::supports_z_point_type): ... this. + * nto-low.h (class nto_process_target): Update. + * win32-low.cc (win32_target_ops): Update. + (win32_supports_z_point_type): Turn into ... + (win32_process_target::supports_z_point_type): ... this. + * win32-low.h (class win32_process_target): Update. + +2020-02-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Turn process_stratum_target's read_auxv op into a method of + process_target. + + * target.h (class process_stratum_target): Remove the target op. + (struct process_target): Add the target op. Also add + 'supports_read_auxv'. + * target.cc (process_target::read_auxv): Define. + (process_target::supports_read_auxv): Define. + + Update the derived classes and callers below. + + * server.cc (handle_qxfer_auxv): Update. + (handle_query): Update. + * linux-low.cc (linux_target_ops): Update. + (linux_process_target::supports_read_auxv): Define. + (linux_read_auxv): Turn into ... + (linux_process_target::read_auxv): ... this. + * linux-low.h (class linux_process_target): Update. + * lynx-low.cc (lynx_target_ops): Update. + * nto-low.cc (nto_target_ops): Update. + (nto_process_target::supports_read_auxv): Define. + (nto_read_auxv): Turn into ... + (nto_process_target::read_auxv): ... this. + * nto-low.h (class nto_process_target): Update. + * win32-low.cc (win32_target_ops): Update. + +2020-02-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Turn process_stratum_target's request_interrupt op into a method of + process_target. + + * target.h (struct process_stratum_target): Remove the target op. + (class process_target): Add the target op. + + Update the derived classes and callers below. + + * remote-utils.cc (putpkt_binary_1): Update. + (input_interrupt): Update. + (getpkt): Update. + * server.cc (handle_v_requests): Update. + * linux-low.cc (linux_target_ops): Update. + (linux_request_interrupt): Turn into ... + (linux_process_target::request_interrupt): ... this. + * linux-low.h (class linux_process_target): Update. + * lynx-low.cc (lynx_target_ops): Update. + (lynx_request_interrupt): Turn into ... + (lynx_process_target::request_interrupt): ... this. + * lynx-low.h (class lynx_process_target): Update. + * nto-low.cc (nto_target_ops): Update. + (nto_request_interrupt): Turn into ... + (nto_process_target::request_interrupt): ... this. + * nto-low.h (class nto_process_target): Update. + * win32-low.cc (win32_target_ops): Update. + (win32_request_interrupt): Turn into ... + (win32_process_target::request_interrupt): ... this. + * win32-low.h (class win32_process_target): Update. + +2020-02-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Turn process_stratum_target's look_up_symbols op into a method of + process_target. + + * target.h (struct process_stratum_target): Remove the target op. + (class process_target): Add the target op. + * target.cc (process_target::look_up_symbols): Define. + + Update the derived classes and callers below. + + * server.cc (handle_query): Update. + * linux-low.cc (linux_target_ops): Update. + (linux_look_up_symbols): Turn into ... + (linux_process_target::look_up_symbols): ... this. + * linux-low.h (class linux_process_target): Update. + * lynx-low.cc (lynx_target_ops): Update. + * nto-low.cc (nto_target_ops): Update. + * win32-low.cc (win32_target_ops): Update. + +2020-02-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Turn process_stratum_target's read_memory and write_memory + ops into methods of process_target. + + * target.h (struct process_stratum_target): Remove the target ops. + (class process_target): Add the target ops. + + Update the derived classes and callers below. + + * linux-aarch32-low.cc (arm_breakpoint_at): Update. + * linux-aarch64-low.cc (aarch64_breakpoint_at): Update. + * linux-arm-low.cc (arm_sigreturn_next_pc): Update. + (arm_get_syscall_trapinfo): Update. + * linux-cris-low.cc (cris_breakpoint_at): Update. + * linux-crisv32-low.cc (cris_breakpoint_at): Update. + * linux-m32r-low.cc (m32r_breakpoint_at): Update. + * linux-mips-low.cc (mips_breakpoint_at): Update. + * linux-nios2-low.cc (nios2_breakpoint_at): Update. + * linux-ppc-low.cc (ppc_breakpoint_at): Update. + * linux-sh-low.cc (sh_breakpoint_at): Update. + * linux-sparc-low.cc (sparc_fill_gregset_to_stack): Update. + (sparc_store_gregset_from_stack): Update. + (sparc_breakpoint_at): Update. + * linux-tic6x-low.cc (tic6x_breakpoint_at): Update. + * linux-tile-low.cc (tile_breakpoint_at): Update. + * linux-x86-low.cc (x86_breakpoint_at): Update. + * linux-xtensa-low.cc (xtensa_breakpoint_at): Update. + * mem-brea.cc (insert_memory_breakpoint): Update. + (validate_inserted_breakpoint): Update. + * target.cc (read_inferior_memory): Update. + (target_write_memory): Update. + * linux-low.cc (linux_target_ops): Update. + (linux_read_memory): Make a wrapper around the read_memory target + op call. + (linux_process_target::read_memory): Rename from linux_read_memory. + (linux_write_memory): Turn into ... + (linux_process_target::write_memory): ... this. + * linux-low.h (class linux_process_target): Update. + * lynx-low.cc (lynx_target_ops): Update. + (lynx_read_memory): Turn into ... + (lynx_process_target::read_memory): ... this. + (lynx_write_memory): Turn into ... + (lynx_process_target::write_memory): ... this. + * lynx-low.h (class lynx_process_target): Update. + * nto-low.cc (nto_target_ops): Update. + (nto_read_memory): Turn into ... + (nto_process_target::read_memory): ... this. + (nto_write_memory): Turn into ... + (nto_process_target::write_memory): ... this. + * nto-low.h (class nto_process_target): Update. + * win32-low.cc (win32_target_ops): Update. + (win32_read_inferior_memory): Turn into ... + (win32_process_target::read_memory): ... this. + (win32_write_inferior_memory): Turn into ... + (win32_process_target::write_memory): ... this. + * win32-low.h (class win32_process_target): Update. + +2020-02-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Turn process_stratum_target's prepare_to_access_memory and + done_accessing_memory ops into methods of process_target. + + * target.h (struct process_stratum_target): Remove the target ops. + (class process_target): Add the target ops. + * target.cc (process_target::prepare_to_access_memory): Define. + (process_target::done_accessing_memory): Define. + (prepare_to_access_memory): Update. + (done_accessing_memory): Update. + + Update the derived classes and callers below. + + * linux-low.cc (linux_target_ops): Update. + (linux_prepare_to_access_memory): Turn into ... + (linux_process_target::prepare_to_access_memory): ... this. + (linux_done_accessing_memory): Turn into ... + (linux_process_target::done_accessing_memory): ... this. + * linux-low.h (class linux_process_target): Update. + * lynx-low.cc (lynx_target_ops): Update. + * nto-low.cc (nto_target_ops): Update. + * win32-low.cc (win32_target_ops): Update. + +2020-02-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Turn process_stratum_target's fetch_registers and store_registers + ops into methods of process_target. + + * target.h (struct process_stratum_target): Remove the target ops. + (class process_target): Add the target ops. + (fetch_inferior_registers): Update the macro. + (store_inferior_registers): Update the macro. + + Update the derived classes and callers below. + + * linux-low.cc (linux_target_ops): Update. + (linux_fetch_registers): Turn into ... + (linux_process_target::fetch_registers): ... this. + (linux_store_registers): Turn into ... + (linux_process_target::store_registers): ... this. + * linux-low.h (class linux_process_target): Update. + * lynx-low.cc (lynx_target_ops): Update. + (lynx_fetch_registers): Turn into ... + (lynx_process_target::fetch_registers): ... this. + (lynx_store_registers): Turn into ... + (lynx_process_target::store_registers): ... this. + * lynx-low.h (class lynx_process_target): Update. + * nto-low.cc (nto_target_ops): Update. + (nto_fetch_registers): Turn into ... + (nto_process_target::fetch_registers): ... this. + (nto_store_registers): Turn into ... + (nto_process_target::store_registers): ... this. + * nto-low.h (class nto_process_target): Update. + * win32-low.cc (win32_target_ops): Update. + (win32_fetch_inferior_registers): Turn into ... + (win32_process_target::fetch_registers): ... this. + (win32_store_inferior_registers): Turn into ... + (win32_process_target::store_registers): ... this. + * win32-low.h (class win32_process_target): Update. + +2020-02-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Turn process_stratum_target's wait op into a method of + process_target. + + * target.h (struct process_stratum_target): Remove the target op. + (class process_target): Add the target op. + + Update the derived classes and callers below. + + * target.cc (target_wait): Update. + * linux-low.cc (linux_target_ops): Update. + (linux_wait): Turn into ... + (linux_process_target::wait): ... this. + * linux-low.h (class linux_process_target): Update. + * lynx-low.cc (lynx_target_ops): Update. + (lynx_wait): Turn into ... + (lynx_process_target::wait): ... this. + * lynx-low.h (class lynx_process_target): Update. + * nto-low.cc (nto_target_ops): Update. + (nto_wait): Turn into ... + (nto_process_target::wait): ... this. + * nto-low.h (class nto_process_target): Update. + * win32-low.cc (win32_target_ops): Update. + (win32_wait): Turn into ... + (win32_process_target::wait): ... this. + (do_initial_child_stuff): Update. + * win32-low.h (class win32_process_target): Update. + +2020-02-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Turn process_stratum_target's resume op into a method of + process_target. + + * target.h (struct process_stratum_target): Remove the target op. + (class process_target): Add the target op. + + Update the derived classes and callers below. + + * server.cc (resume): Update. + * target.cc (target_stop_and_wait): Update. + (target_continue_no_signal): Update. + (target_continue): Update. + * linux-low.cc (linux_target_ops): Update. + (linux_resume): Turn into ... + (linux_process_target::resume): ... this. + * linux-low.h (class linux_process_target): Update. + * lynx-low.cc (lynx_target_ops): Update. + (lynx_resume): Turn into ... + (lynx_process_target::resume): ... this. + * lynx-low.h (class lynx_process_target): Update. + * nto-low.cc (nto_target_ops): Update. + (nto_resume): Turn into ... + (nto_process_target::resume): ... this. + * nto-low.h (class nto_process_target): Update. + * win32-low.cc (win32_target_ops): Update. + (win32_resume): Turn into ... + (win32_process_target::resume): ... this. + (win32_process_target::detach): Update. + (do_initial_child_stuff): Update. + * win32-low.h (class win32_process_target): Update. + +2020-02-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Turn process_stratum_target's thread_alive op into a method of + process_target. + + * target.h (struct process_stratum_target): Remove the target op. + (class process_target): Add the target op. + (mythread_alive): Update the macro. + + Update the derived classes and callers below. + + * linux-low.cc (linux_target_ops): Update. + (linux_thread_alive): Turn into ... + (linux_process_target::thread_alive): ... this. + (wait_for_sigstop): Update. + * linux-low.h (class linux_process_target): Update. + * lynx-low.cc (lynx_target_ops): Update. + (lynx_thread_alive): Turn into ... + (lynx_process_target::thread_alive): ... this. + * lynx-low.h (class lynx_process_target): Update. + * nto-low.cc (nto_target_ops): Update. + (nto_thread_alive): Turn into ... + (nto_process_target::thread_alive): ... this. + * nto-low.h (class nto_process_target): Update. + * win32-low.cc (win32_target_ops): Update. + (win32_thread_alive): Turn into ... + (win32_process_target::thread_alive): ... this. + * win32-low.h (class win32_process_target): Update. + +2020-02-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Turn process_stratum_target's join op into a method of + process_target. + + * target.h (struct process_stratum_target): Remove the target op. + (class process_target): Add the target op. + (join_inferior): Update the macro. + + Update the derived classes and callers below. + + * linux-low.cc (linux_target_ops): Update. + (linux_join): Turn into ... + (linux_process_target::join): ... this. + * linux-low.h (class linux_process_target): Update. + * lynx-low.cc (lynx_target_ops): Update. + (lynx_join): Turn into ... + (lynx_process_target::join): ... this. + * lynx-low.h (class lynx_process_target): Update. + * nto-low.cc (nto_target_ops): Update. + (nto_process_target::join): Define. + * nto-low.h (class nto_process_target): Update. + * win32-low.cc (win32_target_ops): Update. + (win32_join): Turn into ... + (win32_process_target::join): ... this. + * win32-low.h (class win32_process_target): Update. + +2020-02-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Turn process_stratum_target's mourn op into a method of + process_target. + + * target.h (struct process_stratum_target): Remove the target op. + (class process_target): Add the target op. + + Update the derived classes and callers below. + + * target.cc (target_mourn_inferior): Update. + * linux-low.cc (linux_target_ops): Update. + (linux_mourn): Turn into ... + (linux_process_target::mourn): ... this. + (handle_extended_wait): Update. + (linux_process_target::kill): Update. + (linux_process_target::detach): Update. + * linux-low.h (class linux_process_target): Update. + * lynx-low.cc (lynx_target_ops): Update. + (lynx_mourn): Turn into ... + (lynx_process_target::mourn): ... this. + * lynx-low.h (class lynx_process_target): Update. + * nto-low.cc (nto_target_ops): Update. + (nto_mourn): Turn into ... + (nto_process_target::mourn): ... this. + * nto-low.h (class nto_process_target): Update. + * win32-low.cc (win32_target_ops): Update. + (win32_mourn): Turn into ... + (win32_process_target::mourn): ... this. + * win32-low.h (class win32_process_target): Update. + +2020-02-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Turn process_stratum_target's detach op into a method of + process_target. + + * target.h (struct process_stratum_target): Remove the target op. + (class process_target): Add the target op. + (detach_inferior): Update the macro. + + Update the derived classes and callers below. + + * linux-low.cc (linux_target_ops): Update. + (linux_detach): Turn into ... + (linux_process_target::detach): ... this. + * linux-low.h (class linux_process_target): Update. + * lynx-low.cc (lynx_target_ops): Update. + (lynx_detach): Turn into ... + (lynx_process_target::detach): ... this. + * lynx-low.h (class lynx_process_target): Update. + * nto-low.cc (nto_target_ops): Update. + (nto_detach): Turn into ... + (nto_process_target::detach): ... this. + * nto-low.h (class nto_process_target): Update. + * win32-low.cc (win32_target_ops): Update. + (win32_detach): Turn into ... + (win32_process_target::detach): ... this. + * win32-low.h (class win32_process_target): Update. + +2020-02-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Turn process_stratum_target's kill op into a method of + process_target. + + * target.h (struct process_stratum_target): Remove the target op. + (class process_target): Add the target op. + + Update the derived classes and callers below. + + * target.cc (kill_inferior): Update. + * linux-low.cc (linux_target_ops): Update. + (linux_kill): Turn into ... + (linux_process_target::kill): ... this. + * linux-low.h (class linux_process_target): Update. + * lynx-low.cc (lynx_target_ops): Update. + (lynx_kill): Turn into ... + (lynx_process_target::kill): ... this. + * lynx-low.h (class lynx_process_target): Update. + * nto-low.cc (nto_target_ops): Update. + (nto_kill): Turn into ... + (nto_process_target::kill): ... this. + * nto-low.h (class nto_process_target): Update. + * win32-low.cc (win32_target_ops): Update. + (win32_kill): Turn into ... + (win32_process_target::kill): ... this. + * win32-low.h (class win32_process_target): Update. + +2020-02-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Turn process_stratum_target's attach op into a method of + process_target. + + * target.h (struct process_stratum_target): Remove the target op. + (class process_target): Add the target op. + (myattach): Update the macro. + + Update the derived classes and callers below. + + * linux-low.cc (linux_target_ops): Update. + (linux_attach): Turn into ... + (linux_process_target::attach): ... this. + * linux-low.h (class linux_process_target): Update. + * lynx-low.cc (lynx_target_ops): Update. + (lynx_attach): Turn into ... + (lynx_process_target::attach): ... this. + * lynx-low.h (class lynx_process_target): Update. + * nto-low.cc (nto_target_ops): Update. + (nto_attach): Turn into ... + (nto_process_target::attach): ... this. + * nto-low.h (class nto_process_target): Update. + * win32-low.cc (win32_target_ops): Update. + (win32_attach): Turn into ... + (win32_process_target::attach): ... this. + * win32-low.h (class win32_process_target): Update. + +2020-02-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Turn process_stratum_target's post_create_inferior op into a method + of process_target. + + * target.h (struct process_stratum_target): Remove the target op. + (class process_target): Add the target op. + (target_post_create_inferior): Update the macro. + * target.cc (process_target::post_create_inferior): Define. + + Update the derived classes and callers below. + + * linux-low.cc (linux_target_ops): Update. + (linux_post_create_inferior): Turn into ... + (linux_process_target::post_create_inferior): ... this. + * linux-low.h (class linux_process_target): Update. + * lynx-low.cc (lynx_target_ops): Update. + * nto-low.cc (nto_target_ops): Update. + * win32-low.cc (win32_target_ops): Update. + +2020-02-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + Turn process_stratum_target's create_inferior op into a method of + process_target. + + * target.h (struct process_stratum_target): Remove the target op. + (class process_target): Add the target op. + (create_inferior): Rename the macro to ... + (target_create_inferior): ... this. + + Update the derived classes and callers below. + + * server.cc (handle_v_run): Update. + (captured_main): Update. + (process_serial_event): Update. + * linux-low.cc (linux_target_ops): Update. + (linux_create_inferior): Turn into ... + (linux_process_target::create_inferior): ... this. + * linux-low.h (class linux_process_target): Update. + * lynx-low.cc (lynx_target_ops): Update. + (lynx_create_inferior): Turn into ... + (lynx_process_target::create_inferior): ... this. + * lynx-low.h (class lynx_process_target): Update. + * nto-low.cc (nto_target_ops): Update. + (nto_create_inferior): Turn into ... + (nto_process_target::create_inferior): ... this. + * nto-low.h (class nto_process_target): Update. + * win32-low.cc (win32_target_ops): Update. + (win32_create_inferior): Turn into ... + (win32_process_target::create_inferior): ... this. + * win32-low.h (class win32_process_target): Update. + +2020-02-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + * target.h (class process_target): New class definition. + (struct process_stratum_target) <pt>: New field with type + 'process_target*'. + * linux-low.h (class linux_process_target): Define as a derived + class of 'process_target'. + * linux-low.cc (linux_target_ops): Add a linux_process_target* + as the 'pt' field. + * lynx-low.h (class lynx_process_target): Define as a derived + class of 'process_target'. + * lynx-low.cc (lynx_target_ops): Add a lynx_process_target* + as the 'pt' field. + * nto-low.h (class nto_process_target): Define as a derived + class of 'process_target'. + * nto-low.cc (nto_target_ops): Add an nto_process_target* + as the 'pt' field. + * win32-low.h (class win32_process_target): Define as a derived + class of 'process_target'. + * win32-low.cc (win32_target_ops): Add a win32_process_target* + as the 'pt' field. + +2020-02-19 Andrew Burgess <andrew.burgess@embecosm.com> + + * configure: Regenerate. + +2020-02-19 Maciej W. Rozycki <macro@wdc.com> + Andrew Burgess <andrew.burgess@embecosm.com> + + * linux-riscv-low.cc: New file. + * Makefile.in (SFILES): Add linux-riscv-low.cc, arch/riscv.c, + and nat/riscv-linux-tdesc.c. + * configure.srv <riscv*-*-linux*> (srv_tgtobj) + (srv_linux_regsets, srv_linux_usrregs, srv_linux_thread_db): + Define. + +2020-02-14 Tom Tromey <tom@tromey.com> + + * acinclude.m4: Don't include acx_configure_dir.m4. + * Makefile.in (LIBIBERTY_BUILDDIR, GNULIB_BUILDDIR): Update. + (SUBDIRS, CLEANDIRS, REQUIRED_SUBDIRS): Remove. + (all, install-only, uninstall, clean-info, clean) + (maintainer-clean): Don't recurse. + (subdir_do, all-lib): Remove. + ($(LIBGNU) $(LIBIBERTY) $(GNULIB_H)): Remove rule. + (GNULIB_H): Remove. + (generated_files): Update. + ($(GNULIB_BUILDDIR)/Makefile): Remove rule. + * configure: Rebuild. + * configure.ac: Don't configure gnulib or libiberty. + (GNULIB): Update. + +2020-02-14 Eli Zaretskii <eliz@gnu.org> + + * win32-low.c (create_process): Prepend PROGRAM to ARGS when + preparing the command line for CreateProcess. + (win32_create_inferior): Reflect the program name in debugging + output that shows the process and its command line. + +2020-02-13 Simon Marchi <simon.marchi@efficios.com> + + * Makefile.in: Rename source files from .c to .cc. + * %.c: Rename to %.cc. + * configure.ac: Rename server.c to server.cc. + * configure: Re-generate. + +2020-02-13 Simon Marchi <simon.marchi@efficios.com> + + * Makefile.in: Rename gdbsupport source files from .c to .cc. + +2020-02-12 Hannes Domani <ssbssa@yahoo.de> + + * win32-low.c (win32_create_inferior): Set signal_pid. + +2020-02-12 Maciej W. Rozycki <macro@wdc.com> + Pedro Alves <palves@redhat.com> + + Skip building gdbserver in a cross-configuration. + * configure.srv: Set $gdbserver_host depending on whether $target + is $host. Use $gdbserver_host instead of $host. + +2020-02-11 Simon Marchi <simon.marchi@efficios.com> + + * configure: Re-generate. + +2020-02-11 Simon Marchi <simon.marchi@efficios.com> + + * configure: Re-generate. + +2020-02-11 Simon Marchi <simon.marchi@efficios.com> + + * acinclude.m4: Update warning.m4 path. + +2020-02-09 Hannes Domani <ssbssa@yahoo.de> + + * win32-low.c (win32_clear_inferiors): Reset siginfo_er. + (handle_exception): Set siginfo_er. + (win32_xfer_siginfo): New function. + +2020-02-07 Tom Tromey <tom@tromey.com> + Pedro Alves <palves@redhat.com> + + * README: Update build documentation. + * configure.srv: Set UNSUPPORTED if host is unsupported. Check + host, not target. + * configure.ac: Update paths. + * configure: Rebuild. + * acinclude.m4: Update paths. + * Makefile.in: Update include paths. + (depcomp, INCLUDE_DIR, INCGNU, INCSUPPORT, INCLUDE_CFLAGS) + (SFILES, XML_DIR, n, $(GNULIB_BUILDDIR)/Makefile, config.status) + (version-generated.c, stamp-xml, regdat_sh, arch/%-ipa.o) + (gdbsupport/%-ipa.o, %-ipa.o, arch/%.o, gdbsupport/%.o, %.o) + (%-generated.c): Update paths. + * Move entire directory from ../gdb/gdbserver. + +2020-01-29 Maciej W. Rozycki <macro@wdc.com> + + * configure.srv <i[34567]86-*-mingw*>: Fix whitespace damage. + +2020-01-29 Pedro Franco de Carvalho <pedromfc@linux.ibm.com> + + * configure.srv (powerpc*-*-linux*): Use srv_tgtobj in second + assignment instead of srv_linux_obj. + +2020-01-28 Hannes Domani <ssbssa@yahoo.de> + + * server.c (handle_qxfer_libraries): Write segment-address with + paddress. + +2020-01-24 Hannes Domani <ssbssa@yahoo.de> + + * Makefile.in (install-strip): New target. + (install_sh, INSTALL_STRIP_PROGRAM, STRIP): New variables. + * aclocal.m4: Regenerate. + * configure: Regenerate. + * configure.ac: Add AM_PROG_INSTALL_STRIP. + +2020-01-24 Maciej W. Rozycki <macro@wdc.com> + + * Makefile.in (SFILES): Adjust paths to point to real files. + (OBS): Move waitstatus.o to target/waitstatus.o. + (TAGS): Transform paths appropriately. + (%.o): Rename to... + (nat/%.o): ... this pattern rule. + (%.o): Rename to... + (target/%.o): ... this pattern rule. + * configure.srv: Adjust paths throughout to include nat/ prefix + with the revant files. + * configure.ac: Add `nat' and `target' to CONFIG_SRC_SUBDIR. + * configure: Regenerate. + +2020-01-24 Maciej W. Rozycki <macro@wdc.com> + + * Makefile.in (TAGS): Remove config files from the recipe. + +2020-01-14 Tom Tromey <tom@tromey.com> + + * configure: Rebuild. + * configure.ac: Remove any checks that were added to common.m4. + * acinclude.m4: Include lib-ld.m4, lib-prefix.m4, and + lib-link.m4. + +2020-01-14 Tom Tromey <tom@tromey.com> + + * server.h: Include config.h. + * gdbreplay.c: Include config.h. + * configure: Rebuild. + * configure.ac: Don't source common.host. + * acinclude.m4: Update path. + * Makefile.in (INCSUPPORT): New variable. + (INCLUDE_CFLAGS): Add INCSUPPORT. + (SFILES): Update paths. + (version-generated.c): Update path to create-version.sh. + (gdbsupport/%-ipa.o, gdbsupport/%.o): Update paths. + +2020-01-14 Tom Tromey <tom@tromey.com> + + * configure.ac (LIBS): Use WIN32APILIBS. + (USE_WIN32API): Don't define. + * configure: Rebuild. + +2020-01-14 Tom Tromey <tom@tromey.com> + + * configure: Rebuild. + +2020-01-13 Simon Marchi <simon.marchi@efficios.com> + + * Makefile.in (%-generated.c): Remove rule for files from + regformats/i386. + +2020-01-13 Simon Marchi <simon.marchi@efficios.com> + + * configure: Re-generate. + +2020-01-13 Simon Marchi <simon.marchi@efficios.com> + + * tracepoint.h (IP_AGENT_EXPORT_FUNC) [!IN_PROCESS_AGENT]: + Define to static. + * tracepoint.c (stop_tracing, flush_trace_buffer, + about_to_request_buffer_space, get_trace_state_variable_value, + set_trace_state_variable_value, gdb_collect): Add declaration. + +2020-01-13 Simon Marchi <simon.marchi@efficios.com> + + * linux-x86-low.c (x86_linux_regs_info, amd64_emit_eq_goto, + amd64_emit_ne_goto, amd64_emit_lt_goto, amd64_emit_le_goto, + amd64_emit_gt_goto, amd64_emit_ge_goto, amd64_emit_ge_goto, + i386_emit_eq_goto, i386_emit_ne_goto, i386_emit_lt_goto, + i386_emit_le_goto, i386_emit_gt_goto, i386_emit_ge_goto): Make + static. + +2020-01-13 Simon Marchi <simon.marchi@efficios.com> + + * inferiors.c: Include gdbsupport/common-inferior.h. + +2020-01-13 Simon Marchi <simon.marchi@efficios.com> + + * hostio-errno.c: Include hostio.h. + +2020-01-13 Simon Marchi <simon.marchi@efficios.com> + + * Makefile.in (%-generated.c): Make $(regdat_sh) a regular + prerequisite. + +2020-01-12 Simon Marchi <simon.marchi@polymtl.ca> + + * linux-arm-tdesc.c: Include linux-arm-tdesc.h. + * linux-arm-tdesc.h: Include arch/arm.h. + +2020-01-12 Simon Marchi <simon.marchi@polymtl.ca> + + * linux-aarch64-low.c (aarch64_write_goto_address): Make static. + +2020-01-12 Simon Marchi <simon.marchi@polymtl.ca> + + * linux-aarch32-tdesc.c: Include linux-aarch32-tdesc.h. + * linux-aarch64-tdesc.c: Include linux-aarch64-tdesc.h. + +2020-01-10 Pedro Alves <palves@redhat.com> + + * fork-child.c (post_fork_inferior): Pass target down to + startup_inferior. + * inferiors.c (switch_to_thread): Add process_stratum_target + parameter. + * lynx-low.c (lynx_target_ops): Now a process_stratum_target. + * nto-low.c (nto_target_ops): Now a process_stratum_target. + * linux-low.c (linux_target_ops): Now a process_stratum_target. + * remote-utils.c (prepare_resume_reply): Pass the target to + switch_to_thread. + * target.c (the_target): Now a process_stratum_target. + (done_accessing_memory): Pass the target to switch_to_thread. + (set_target_ops): Ajust to use process_stratum_target. + * target.h (struct target_ops): Rename to ... + (struct process_stratum_target): ... this. + (the_target, set_target_ops): Adjust. + (prepare_to_access_memory): Adjust comment. + * win32-low.c (child_xfer_memory): Adjust to use + process_stratum_target. + (win32_target_ops): Now a process_stratum_target. + +2020-01-06 Eli Zaretskii <eliz@gnu.org> + Pedro Alves <palves@redhat.com> + + * win32-low.c (get_child_debug_event): Extract the fatal exception + from the exit status and convert to the equivalent Posix signal + number. + (win32_wait): Allow TARGET_WAITKIND_SIGNALLED status as well. + * Makefile.in (OBS, SFILES): Add gdb_wait.[co]. + +2020-01-01 Hannes Domani <ssbssa@yahoo.de> + + * Makefile.in: Use INSTALL_PROGRAM_ENV. + +2020-01-01 Joel Brobecker <brobecker@adacore.com> + + * server.c (gdbserver_version): Change copyright year to 2020. + * gdbreplay.c (gdbreplay_version): Likewise. + +2019-12-19 Christian Biesinger <cbiesinger@google.com> + + * configure: Regenerate. + * configure.ac: Quote variable arguments of test. + +2019-12-16 Bernd Edlinger <bernd.edlinger@hotmail.de> + + * Makefile.in: Fix build with GNU Make 3.81 + +2019-12-16 Tom Tromey <tromey@adacore.com> + + * server.c (get_exec_file): Constify result. + +2019-12-10 Christian Biesinger <cbiesinger@google.com> + + * Makefile.in: Add safe-strerror.c to gdbreplay and IPA, and change + UNDO_GNULIB_CFLAGS to undo strerror_r instead of strerror. + * config.in: Regenerate. + * configure: Regenerate. + * configure.ac: Don't check for strerror. + * linux-i386-ipa.c (initialize_fast_tracepoint_trampoline_buffer): + Call safe_strerror instead of strerror. + * server.h (strerror): Remove this now-unnecessary declaration. + * tracepoint.c (init_named_socket): Call safe_strerror instead of + strerror. + (gdb_agent_helper_thread): Likewise. + * utils.c (perror_with_name): Likewise. + +2019-11-26 Tom Tromey <tom@tromey.com> + + * configure, config.in: Rebuild. + +2019-11-26 Tom Tromey <tom@tromey.com> + + * remote-utils.c (block_unblock_async_io): Use gdb_sigmask. + * linux-low.c (linux_wait_for_event_filtered, linux_async): Use + gdb_sigmask. + * configure, config.in: Rebuild. + +2019-11-26 Tom Tromey <tom@tromey.com> + + * Makefile.in (PTHREAD_CFLAGS, PTHREAD_LIBS): New variables. + (INTERNAL_CFLAGS_BASE): Use PTHREAD_CFLAGS. + (GDBSERVER_LIBS): Use PTHREAD_LIBS. + * acinclude.m4: Include ax_pthread.m4. + * config.in, configure: Rebuild. + +2019-11-26 Christian Biesinger <cbiesinger@google.com> + + * debug.c (debug_set_output): Call safe_strerror instead of + strerror. + * linux-low.c (attach_proc_task_lwp_callback): Likewise. + (linux_kill_one_lwp): Likewise. + (linux_detach_one_lwp): Likewise. + (linux_wait_for_event_filtered): Likewise. + (store_register): Likewise. + * lynx-low.c (lynx_attach): Likewise. + * mem-break.c (insert_memory_breakpoint): Likewise. + (remove_memory_breakpoint): Likewise. + (delete_fast_tracepoint_jump): Likewise. + (set_fast_tracepoint_jump): Likewise. + (uninsert_fast_tracepoint_jumps_at): Likewise. + (reinsert_fast_tracepoint_jumps_at): Likewise. + * nto-low.c (nto_xfer_memory): Likewise. + (nto_resume): Likewise. + +2019-11-20 Luis Machado <luis.machado@linaro.org> + + * linux-aarch64-low.c (is_sve_tdesc): Check against target feature + instead of register count. + * tdesc.c (tdesc_contains_feature): New function. + * tdesc.h (tdesc_contains_feature): New prototype. + +2019-11-15 Christian Biesinger <cbiesinger@google.com> + + * Makefile.in: Add safe-strerror.c. + * configure: Regenerate. + * configure.ac: Don't source common.host. + +2019-11-15 Christian Biesinger <cbiesinger@google.com> + + * config.in: Regenerate. + * configure: Regenerate. + +2019-11-12 Andrew Burgess <andrew.burgess@embecosm.com> + + * ax.c (ax_printf): Handle size_t_arg. + +2019-11-06 Christian Biesinger <cbiesinger@google.com> + + * linux-tdep.c (linux_info_proc): Use strtok_r instead of strtok. + * mi/mi-main.c (output_cores): Likewise. + * nat/linux-osdata.c (linux_xfer_osdata_cpus): Likewise. + (linux_xfer_osdata_modules): Likewise. + * remote.c (register_remote_support_xml): Likewise. + * sparc64-tdep.c (adi_is_addr_mapped): Likewise. + * xml-syscall.c (syscall_create_syscall_desc): Likewise. + +2019-11-01 Christian Biesinger <cbiesinger@google.com> + + * configure: Regenerate. + * configure.ac: Remove check for strerror_r. + +2019-10-31 Christian Biesinger <cbiesinger@google.com> + + * config.in: Regenerate. + * configure: Regenerate. + * configure.ac: Also check for strerror_r. + +2019-10-31 Christian Biesinger <cbiesinger@google.com> + + * ax.h (debug_agent): Remove duplicate declaration. + +2019-10-26 Tom de Vries <tdevries@suse.de> + + * linux-aarch64-low.c: Fix typos in comments. + * linux-arm-low.c: Same. + * linux-low.c: Same. + * linux-ppc-low.c: Same. + * proc-service.c: Same. + * regcache.h: Same. + * server.c: Same. + * tracepoint.c: Same. + * win32-low.c: Same. + +2019-10-25 Tom Tromey <tromey@adacore.com> + + * utils.c (xstrdup): Remove. + +2019-10-23 Tom Tromey <tom@tromey.com> + + * configure, config.in: Rebuild. + +2019-10-23 Tom Tromey <tom@tromey.com> + + * configure: Rebuild. + * acinclude.m4: Use m4_include, not sinclude. + +2019-10-17 Tom Tromey <tromey@adacore.com> + + * configure: Rebuild. + * configure.ac: Use AC_CONFIG_HEADERS. Create stamp-h there, not + in AC_CONFIG_FILES invocation. + * Makefile.in (stamp-h, Makefile): Use new-style config.status + invocation. + +2019-10-16 Christian Biesinger <cbiesinger@google.com> + + * server.c: Include xml-builtin.h. + (get_xml_features): Don't declare xml_builtins here. + +2019-10-15 Andrew Burgess <andrew.burgess@embecosm.com> + + * Makefile.in: Remove references to vec-ipa.o. + +2019-10-15 Andrew Burgess <andrew.burgess@embecosm.com> + + * Makefile.in: Remove references to vec.c. + +2019-10-02 Christian Biesinger <cbiesinger@google.com> + + * server.c (server_waiting): Change to bool. + (extended_protocol): Likewise. + (response_needed): Likewise. + (exit_requested): Likewise. + (run_once): Likewise. + (report_no_resumed): Likewise. + (non_stop): Likewise. + (disable_packet_vCont): Likewise. + (disable_packet_Tthread): Likewise. + (disable_packet_qC): Likewise. + (disable_packet_qfThreadInfo): Likewise. + (handle_general_set): Update. + (handle_detach): Update. + (handle_monitor_command): Update. + (handle_query): Update. + (captured_main): Update. + (process_serial_event): Update. + * server.h (server_waiting): Change to bool. + (disable_packet_vCont): Likewise. + (disable_packet_Tthread): Likewise. + (disable_packet_qC): Likewise. + (disable_packet_qfThreadInfo): Likewise. + (run_once): Likewise. + (non_stop): Likewise. + * target.c (target_stop_and_wait): Update. + +2019-10-02 Tom Tromey <tromey@adacore.com> + + * Makefile.in (SFILES): Add common-inferior.c. + (OBS): Add common-inferior.o. + * server.c (startup_with_shell): Don't define. + +2019-10-02 Andrew Burgess <andrew.burgess@embecosm.com> + + * linux-low.c (linux_low_read_btrace): Update for change to + std::vector. + +2019-09-20 Christian Biesinger <cbiesinger@google.com> + + * debug.c (debug_threads): Remove comment in favor of the header. + * debug.h (using_threads): Add declaration. + (debug_threads): Add comment. + * linux-aarch64-low.c: Include debug.h and remove declaration of + debug_threads. + * nto-low.c: Likewise. + * remote-utils.c: Likewise. + * thread-db.c: Likewise. + +2019-09-20 Ulrich Weigand <uweigand@de.ibm.com> + + * configure.srv (ipa_ppc_linux_regobj): Remove powerpc-cell32l-ipa.o + and powerpc-cell64l-ipa.o. + (powerpc*-*-linux*): Remove powerpc-cell32l.o and powerpc-cell64l.o + from srv_regobj. Remove rs6000/powerpc-cell32l.xml and + rs6000/powerpc-cell64l.xml from srv_xmlfiles. + (spu*-*-*): Remove. + + * spu-low.c: Remove file. + + * linux-ppc-low.c (INSTR_SC, NR_spu_run): Remove. + (parse_spufs_run): Remove. + (ppc_get_pc): Remove Cell/B.E. support. + (ppc_set_pc): Likewise. + (ppc_breakpoint_at): Likewise. + (ppc_arch_setup): Likewise. + (ppc_get_ipa_tdesc_idx): Do not handle tdesc_powerpc_cell64l or + tdesc_powerpc_cell32l. + (initialize_low_arch): Do not call init_registers_powerpc_cell64l + or init_registers_powerpc_cell32l. + * linux-ppc-ipa.c (get_ipa_tdesc): Do not handle PPC_TDESC_CELL. + (initialize_low_tracepoint): Do not call init_registers_powerpc_cell64l + or init_registers_powerpc_cell32l. + * linux-ppc-tdesc-init.h (PPC_TDESC_CELL): Mark as unused. + (init_registers_powerpc_cell32l): Remove prototype. + (init_registers_powerpc_cell64l): Likewise. + + * target.h (struct target_ops): Remove qxfer_spu member. + * server.c (handle_qxfer_spu): Remove. + (qxfer_packets): Remove entry for "spu". + (handle_query): No longer support qXfer:spu:read or qXfer:spu:write. + * linux-low.c (SPUFS_MAGIC): Remove. + (spu_enumerate_spu_ids): Remove. + (linux_qxfer_spu): Remove. + (linux_target_ops): Remove qxfer_spu member. + * lynx-low.c (lynx_target_ops): Remove qxfer_spu member. + * nto-low.c (nto_target_ops): Remove qxfer_spu member. + * win32-low.c (win32_target_ops): Remove qxfer_spu member. + +2019-08-23 Sergio Durigan Junior <sergiodj@redhat.com> + + * Makefile.in (SFILES): Add 'gdbsupport/gdb-dlfcn.c'. + (OBS): Add 'gdbsupport/gdb-dlfcn.o'. + * config.in: Regenerate. + * configure: Regenerate. + +2019-08-15 Tom Tromey <tromey@adacore.com> + + * target.c (target_write_memory): Use gdb::byte_vector. + +2019-08-15 Tom Tromey <tromey@adacore.com> + + * tracepoint.c (write_inferior_data_pointer) + (write_inferior_integer, write_inferior_int8) + (write_inferior_uinteger, m_tracepoint_action_download) + (r_tracepoint_action_download, x_tracepoint_action_download) + (l_tracepoint_action_download, clear_inferior_trace_buffer) + (download_agent_expr, download_tracepoint_1) + (download_trace_state_variables, upload_fast_traceframes): Update. + * server.c (gdb_write_memory): Update. + * remote-utils.c (relocate_instruction): Update. + * proc-service.c (ps_pdwrite): Update. + * mem-break.c (remove_memory_breakpoint) + (delete_fast_tracepoint_jump, set_fast_tracepoint_jump) + (uninsert_fast_tracepoint_jumps_at) + (reinsert_fast_tracepoint_jumps_at): Update. + * linux-x86-low.c (append_insns) + (i386_install_fast_tracepoint_jump_pad) + (amd64_write_goto_address, i386_write_goto_address): Update. + * linux-s390-low.c (append_insns, s390_write_goto_address): + Update. + * linux-ppc-low.c (ppc_relocate_instruction) + (ppc_install_fast_tracepoint_jump_pad, emit_insns) + (ppc_write_goto_address): Update. + * linux-aarch64-low.c (append_insns): Update. + * target.h (struct target_ops): Update. + (write_inferior_memory): Don't declare. + * target.c (target_write_memory): Rename from + write_inferior_memory. Remove old target_write_memory. + +2019-08-15 Tom Tromey <tromey@adacore.com> + + * target.c (write_inferior_memory): Use std::vector. + +2019-08-06 Frank Ch. Eigler <fche@redhat.com> + + PR build/24886 + * configure.ac: Drop enable-libmcheck support. + * configure, config.in: Rebuild. + * acinclude.m4: Don't include it. + +2019-07-19 Alan Hayward <alan.hayward@arm.com> + + * configure.srv: Remove Arm xml files. + +2019-07-19 Alan Hayward <alan.hayward@arm.com> + + * configure.srv: Add new files. Remove xml generated files. + * linux-aarch32-low.c (initialize_low_arch_aarch32): Don't init + registers. + * linux-aarch32-low.h (tdesc_arm_with_neon): Remove. + * linux-aarch32-tdesc.c: New file. + * linux-aarch32-tdesc.h: New file. + * linux-aarch64-low.c (aarch64_arch_setup): Call aarch32_linux_read_description. + * linux-arm-low.c (init_registers_arm, tdesc_arm) + (init_registers_arm_with_iwmmxt, tdesc_arm_with_iwmmxt) + (init_registers_arm_with_vfpv2, tdesc_arm_with_vfpv2) + (init_registers_arm_with_vfpv3, tdesc_arm_with_vfpv3): Remove. + (arm_fill_wmmxregset, arm_store_wmmxregset, arm_fill_vfpregset) + (arm_store_vfpregset): Call arm_linux_get_tdesc_fp_type. + (arm_read_description): Call arm_linux_read_description. + (initialize_low_arch): Don't init registers. + * linux-arm-tdesc.c: New file. + * linux-arm-tdesc.h: New file. + +2019-07-10 Alan Hayward <alan.hayward@arm.com> + + * linux-arm-low.c (arm_fill_wmmxregset, arm_store_wmmxregset): + Move counter inside for. + (arm_read_description): Check ptrace earlier. + (arm_arch_setup): Call arm_linux_init_hwbp_cap here. + +2019-07-09 Tom Tromey <tom@tromey.com> + + * configure: Rebuild. + * configure.ac: Change common to gdbsupport. + * acinclude.m4: Change common to gdbsupport. + * Makefile.in (SFILES, OBS, GDBREPLAY_OBS, IPA_OBJS) + (version-generated.c, gdbsupport/%-ipa.o, gdbsupport/%.o): Change + common to gdbsupport. + * ax.c, event-loop.c, fork-child.c, gdb_proc_service.h, + gdbreplay.c, gdbthread.h, hostio-errno.c, hostio.c, i387-fp.c, + inferiors.c, inferiors.h, linux-aarch64-tdesc-selftest.c, + linux-amd64-ipa.c, linux-i386-ipa.c, linux-low.c, + linux-tic6x-low.c, linux-x86-low.c, linux-x86-tdesc-selftest.c, + linux-x86-tdesc.c, lynx-i386-low.c, lynx-low.c, mem-break.h, + nto-x86-low.c, regcache.c, regcache.h, remote-utils.c, server.c, + server.h, spu-low.c, symbol.c, target.h, tdesc.c, tdesc.h, + thread-db.c, tracepoint.c, win32-i386-low.c, win32-low.c: Change + common to gdbsupport. + +2019-07-04 Alan Hayward <alan.hayward@arm.com> + + * linux-aarch32-low.c (arm_read_description, arm_regsets): Use new + defines. + * linux-arm-low.c (arm_read_description, arm_regsets): Likewise. + +2019-07-04 Alan Hayward <alan.hayward@arm.com> + + * configure.srv: Remove legacy xml. + * linux-aarch64-low.c (initialize_low_arch): Remove + initialize_low_tdesc call. + * linux-aarch64-tdesc-selftest.c: Remove file. + * linux-aarch64-tdesc.h (initialize_low_tdesc): Remove. + * linux-x86-low.c (initialize_low_arch): Remove + initialize_low_tdesc call. + * linux-x86-tdesc-selftest.c: Remove file. + * linux-x86-tdesc.h (initialize_low_tdesc): Remove. + +2019-06-20 Tom de Vries <tdevries@suse.de> + + * linux-s390-ipa.c (get_ipa_tdesc)[!__s390x__]: Use + s390_te_linux64_ft_collect_regmap for S390_TDESC_GS. + +2019-06-19 Tom de Vries <tdevries@suse.de> + + * debug.h (debug_write): Change return type to ssize_t. + * debug.c (debug_write): Same. + +2019-06-14 Tom Tromey <tom@tromey.com> + + * configure.ac: Use new path to gnulib. + * configure: Rebuild. + * Makefile.in (INCGNU, $(GNULIB_BUILDDIR)/Makefile): Use new path + to gnulib. + +2019-06-11 Tom Tromey <tom@tromey.com> + + * Makefile.in (SFILES): Add alloc.c. + (OBS): Add alloc.o. + (IPA_OBJS): Add alloc-ipa.o. + (alloc-ipa.o): New target. + (%.o: ../%.c): New pattern rule. + +2019-06-10 Tom Tromey <tromey@adacore.com> + + * remote-utils.c (look_up_one_symbol, relocate_instruction): Don't + end warning with a newline. + * linux-s390-low.c (s390_get_wordsize): Don't end warning with a + newline. + * thread-db.c (attach_thread): Don't end warning with a newline. + (thread_db_notice_clone): Likewise. + * tracepoint.c (gdb_agent_helper_thread): Don't end warning with a + newline. + * linux-x86-low.c (x86_get_min_fast_tracepoint_insn_len): Don't + end warning with a newline. + +2019-06-04 Pedro Alves <palves@redhat.com> + + * server.c (captured_main): Use make_unique_xstrdup. + +2019-06-02 Tom Tromey <tom@tromey.com> + + * gdbreplay.c (fromhex): Remove. + * Makefile.in (GDBREPLAY_OBS): Add rsp-low.o. + +2019-05-29 Tom Tromey <tromey@adacore.com> + + * configure: Rebuild. + +2019-05-06 Kevin Buettner <kevinb@redhat.com> + + * linux-x86-low.c (x86_fill_gregset): Don't compile 64-bit + sign extension code on 32-bit builds. + +2019-05-03 Eli Zaretskii <eliz@gnu.org> + + * remote-utils.c: + * gdbreplay.c [USE_WIN32API]: Remove the _WIN32_WINNT override. + +2019-04-19 Tom Tromey <tom@tromey.com> + + * server.c (struct vstop_notif): Derive from notif_event. + <base>: Remove. + (queue_stop_reply): Update. + (remove_all_on_match_ptid): Change type. Rewrite. + (discard_queued_stop_replies): Rewrite. + (in_queued_stop_replies_ptid): Change type. + (in_queued_stop_replies): Rewrite. + (notif_stop): Update. + (queue_stop_reply_callback): Update. + (captured_main): Don't call initialize_notif. + (push_stop_notification): Update. + * notif.c (notif_write_event, handle_notif_ack) + (notif_event_enque, notif_push): Update. + (notif_event_xfree, initialize_notif): Remove. + * notif.h (struct notif_event): Include <list>, not + "common/queue.h". + (struct notif_server) <queue>: Now a std::list. + (notif_event_p): Remove typedef. + (initialize_notif): Don't declare. + (struct notif_event): Add virtual destructor. + +2019-04-17 Alan Hayward <alan.hayward@arm.com> + + * ax.c (ax_vdebug): Call debug_printf. + * debug.c (debug_write): New function. + * debug.h (debug_write): New declaration. + * linux-low.c (sigchld_handler): Call debug_write. + +2019-04-17 Alan Hayward <alan.hayward@arm.com> + + * debug.c (debug_set_output): New function. + (debug_vprintf): Send output to debug_file. + (debug_flush): Likewise. + * debug.h (debug_set_output): New declaration. + * server.c (handle_monitor_command): Add debug-file option. + (captured_main): Likewise. + +2019-04-17 Alan Hayward <alan.hayward@arm.com> + + * debug.c (remote_debug): Add definition. + * debug.h (remote_debug): Add declaration. + * hostio.c (remote_debug): Remove declaration. + * remote-utils.c (struct ui_file): Likewise. + (remote_debug): Likewise. + * remote-utils.h (remote_debug): Likewise, + * server.c (remote_debug): Remove definition. + +2019-04-10 Kevin Buettner <kevinb@redhat.com> + + * linux-x86-low.c (x86_fill_gregset): Sign extend EAX value + when using a 64-bit gdbserver. + +2019-04-09 Tom Tromey <tromey@adacore.com> + + * linux-low.c (select_event_lwp): Use find_thread_in_random. + +2019-04-08 Tom Tromey <tom@tromey.com> + + * linux-low.c (linux_detach_one_lwp): Replace throw_exception with + throw. + (linux_resume_one_lwp): Likewise. + +2019-04-08 Tom Tromey <tom@tromey.com> + + * gdbreplay.c: Update. + * linux-low.c: Update. + * server.c: Update. + +2019-04-08 Tom Tromey <tom@tromey.com> + + * server.c: Use C++ exception handling. + * linux-low.c: Use C++ exception handling. + * gdbreplay.c: Use C++ exception handling. + +2019-04-08 Tom Tromey <tom@tromey.com> + + * server.c (handle_btrace_general_set, handle_qxfer_btrace) + (handle_qxfer_btrace_conf, detach_or_kill_for_exit_cleanup) + (captured_main, main): Update. + * gdbreplay.c (main): Update. + +2019-04-05 Pedro Franco de Carvalho <pedromfc@linux.ibm.com> + + * linux-low.c (linux_get_auxv): Remove static. Return auxv entry + value in argument pointer, return 1 if the entry is found and 0 + otherwise. Move comment. + (linux_get_hwcap, linux_get_hwcap2): Use modified linux_get_auxv. + * linux-low.h (linux_get_auxv): Declare. + * linux-ppc-low.c (is_elfv2_inferior): Use linux_get_auxv. + +2019-04-05 Tom Tromey <tromey@adacore.com> + + * server.c (gdbserver_usage): Use upper-case for metasyntactic + variables. + +2019-03-28 Alan Hayward <alan.hayward@arm.com> + + * linux-low.c (AT_HWCAP2): Add define if not already included. + +2019-03-26 Alan Hayward <alan.hayward@arm.com> + + * linux-aarch64-low.c (aarch64_get_hwcap): Remove function. + (aarch64_arch_setup): Call linux_get_hwcap. + * linux-arm-low.c (arm_get_hwcap): Remove function. + (arm_read_description): Call linux_get_hwcap. + * linux-low.c (linux_get_auxv): New function. + (linux_get_hwcap): Likewise. + (linux_get_hwcap2): Likewise. + * linux-low.h (linux_get_hwcap): New declaration. + (linux_get_hwcap2): Likewise. + * linux-ppc-low.c (ppc_get_auxv): Remove function. + (ppc_arch_setup): Call linux_get_hwcap. + * linux-s390-low.c (s390_get_hwcap): Remove function. + (s390_arch_setup): Call linux_get_hwcap. + +2019-03-22 Alan Hayward <alan.hayward@arm.com> + Jiong Wang <jiong.wang@arm.com> + + * linux-aarch64-low.c (aarch64_store_pauthregset): New function. + * linux-low.c (regsets_store_inferior_registers): Allow optional reads + to fail. + * linux-low.h (enum regset_type): Add OPTIONAL_REGS. + +2019-03-22 Alan Hayward <alan.hayward@arm.com> + Jiong Wang <jiong.wang@arm.com> + + * linux-aarch64-low.c (AARCH64_HWCAP_PACA): New define. + (aarch64_get_hwcap): New function. + (aarch64_arch_setup): Read APIA hwcap. + +2019-03-22 Alan Hayward <alan.hayward@arm.com> + Jiong Wang <jiong.wang@arm.com> + + * linux-aarch64-ipa.c (get_ipa_tdesc): Add pauth param. + (initialize_low_tracepoint): Likewise. + * linux-aarch64-low.c (aarch64_arch_setup): Likewise. + * linux-aarch64-tdesc-selftest.c (aarch64_tdesc_test): Likewise. + * linux-aarch64-tdesc.c (struct target_desc): Likewise. + (aarch64_linux_read_description): Likewise. + * linux-aarch64-tdesc.h (aarch64_linux_read_description): Likewise. + +2019-03-12 John Baldwin <jhb@FreeBSD.org> + + * linux-x86-tdesc.c (i386_linux_read_description): Update call to + i386_create_target_description for 'segments' parameter. + * lynx-i386-low.c (lynx_i386_arch_setup): Likewise. + * nto-x86-low.c (nto_x86_arch_setup): Likewise. + * win32-i386-low.c (i386_arch_setup): Likewise. + +2019-03-12 Tom Tromey <tromey@adacore.com> + + * linux-low.c (iterate_over_lwps): Update. + +2019-03-06 Tom Tromey <tom@tromey.com> + + * server.c (detach_or_kill_for_exit_cleanup): Remove parameter. + (captured_main): Use SCOPE_EXIT. + +2019-03-04 Sergio Durigan Junior <sergiodj@redhat.com> + + * configure.srv: Use '$enable_unittest' instead of '$development' + when checking whether to fill 'srv_regobj' on 'aarch64*-*-linux*' + case. + +2019-02-27 Tom Tromey <tromey@adacore.com> + + * gdbreplay.c (logchar): Handle \r\n. + +2019-02-07 Alan Hayward <alan.hayward@arm.com> + + * linux-low.c (linux_attach): Add process before lwp. + * server.c (attach_inferior): Check if already attached. + +2019-02-07 Tom Tromey <tom@tromey.com> + + * x86-tdesc.h: Rename include guard. + * x86-low.h: Add include guard. + * wincecompat.h: Rename include guard. + * win32-low.h: Add include guard. + * utils.h: Rename include guard. + * tracepoint.h: Rename include guard. + * tdesc.h: Rename include guard. + * target.h: Rename include guard. + * server.h: Rename include guard. + * remote-utils.h: Rename include guard. + * regcache.h: Rename include guard. + * nto-low.h: Rename include guard. + * notif.h: Add include guard. + * mem-break.h: Rename include guard. + * lynx-low.h: Add include guard. + * linux-x86-tdesc.h: Add include guard. + * linux-s390-tdesc.h: Add include guard. + * linux-ppc-tdesc-init.h: Add include guard. + * linux-low.h: Add include guard. + * linux-aarch64-tdesc.h: Add include guard. + * linux-aarch32-low.h: Add include guard. + * inferiors.h: Rename include guard. + * i387-fp.h: Rename include guard. + * hostio.h: Rename include guard. + * gdbthread.h: Rename include guard. + * gdb_proc_service.h: Rename include guard. + * event-loop.h: Rename include guard. + * dll.h: Rename include guard. + * debug.h: Rename include guard. + * ax.h: Rename include guard. + +2018-01-30 Szabolcs Nagy <szabolcs.nagy@arm.com> + + PR gdb/23985 + * Makefile.in (IPAGENT_CFLAGS): Add UNDO_GNULIB_CFLAGS. + (UNDO_GNULIB_CFLAGS): Undo gnulib replacements. + +2019-01-25 Tom Tromey <tom@tromey.com> + + * Makefile.in (INCLUDE_CFLAGS): Don't add -I for common. + +2019-01-25 Tom Tromey <tom@tromey.com> + + * win32-low.c: Fix common/ includes. + * win32-i386-low.c: Fix common/ includes. + * tracepoint.c: Fix common/ includes. + * thread-db.c: Fix common/ includes. + * target.h: Fix common/ includes. + * symbol.c: Fix common/ includes. + * spu-low.c: Fix common/ includes. + * server.h: Fix common/ includes. + * server.c: Fix common/ includes. + * remote-utils.c: Fix common/ includes. + * regcache.h: Fix common/ includes. + * regcache.c: Fix common/ includes. + * nto-x86-low.c: Fix common/ includes. + * notif.h: Fix common/ includes. + * mem-break.h: Fix common/ includes. + * lynx-low.c: Fix common/ includes. + * lynx-i386-low.c: Fix common/ includes. + * linux-x86-tdesc-selftest.c: Fix common/ includes. + * linux-x86-low.c: Fix common/ includes. + * linux-low.c: Fix common/ includes. + * inferiors.h: Fix common/ includes. + * i387-fp.c: Fix common/ includes. + * hostio.c: Fix common/ includes. + * hostio-errno.c: Fix common/ includes. + * gdbthread.h: Fix common/ includes. + * gdbreplay.c: Fix common/ includes. + * fork-child.c: Fix common/ includes. + * event-loop.c: Fix common/ includes. + * ax.c: + (enum gdb_agent_op): Fix common/ includes. + +2019-01-21 Tom Tromey <tom@tromey.com> + + * tracepoint.c: Fix includes. + * remote-utils.c: Fix includes. + * linux-x86-low.c: Fix includes. + +2019-01-01 Joel Brobecker <brobecker@adacore.com> + + * gdbreplay.c (gdbreplay_version): Update copyright year in + version message. + * server.c (gdbserver_version): Likewise. + +2018-12-05 Alan Hayward <alan.hayward@arm.com> + + * linux-low.c (add_lwp): Switch ordering. + +2018-11-29 Tom Tromey <tom@tromey.com> + + * win32-low.c (win32_join): Take pid, not process. + * target.h (struct target_ops) <join>: Change argument type. + (join_inferior): Change argument name. + * spu-low.c (spu_join): Take pid, not process. + * server.c (handle_detach): Preserve pid before destroying + process. + * lynx-low.c (lynx_join): Take pid, not process. + * linux-low.c (linux_join): Take pid, not process. + +2018-11-23 Alan Hayward <alan.hayward@arm.com> + + * linux-aarch64-low.c (aarch64_cannot_store_register): Remove. + (aarch64_cannot_fetch_register): Likewise. + (struct linux_target_ops): Update references. + +2018-10-31 Pedro Franco de Carvalho <pedromfc@linux.ibm.com> + + * linux-ppc-low.c: Include nat/linux-ptrace.h. + +2018-10-26 Pedro Franco de Carvalho <pedromfc@linux.ibm.com> + + * configure.srv (ipa_ppc_linux_regobj): Add + powerpc-isa207-htm-vsx32l-ipa.o and + powerpc-isa207-htm-vsx64l-ipa.o. + (powerpc*-*-linux*): Add powerpc-isa207-htm-vsx32l.o and + powerpc-isa207-htm-vsx64l.o to srv_regobj. Add + rs6000/power-htm-spr.xml, rs6000/power-htm-core.xml, + rs6000/power64-htm-core.xml, rs6000/power-htm-fpu.xml, + rs6000/power-htm-altivec.xml, rs6000/power-htm-vsx.xml, + rs6000/power-htm-ppr.xml, rs6000/power-htm-dscr.xml, + rs6000/power-htm-tar.xml, rs6000/powerpc-isa207-htm-vsx32l.xml, + and rs6000/powerpc-isa207-htm-vsx64l.xml to srv_xmlfiles. + * linux-ppc-tdesc-init.h (enum ppc_linux_tdesc) + <PPC_TDESC_ISA207_HTM_VSX>: New enum value. + (init_registers_powerpc_isa207_htm_vsx32l) + (init_registers_powerpc_isa207_htm_vsx64l): Declare. + * linux-ppc-low.c (ppc_fill_tm_sprregset, ppc_store_tm_sprregset) + (ppc_store_tm_cgprregset, ppc_store_tm_cfprregset) + (ppc_store_tm_cvrregset, ppc_store_tm_cvsxregset) + (ppc_store_tm_cpprregset, ppc_store_tm_cdscrregset) + (ppc_store_tm_ctarregset): New functions. + (ppc_regsets): Add entries for HTM regsets. + (ppc_arch_setup): Set htm in features struct when needed. Set + sizes for the HTM regsets. + (ppc_get_ipa_tdesc_idx): Return PPC_TDESC_ISA207_HTM_VSX. + (initialize_low_arch): Call + init_registers_powerpc_isa207_htm_vsx32l and + init_registers_powerpc_isa207_htm_vsx64l. + * linux-ppc-ipa.c (get_ipa_tdesc): Handle + PPC_TDESC_ISA207_HTM_VSX. + (initialize_low_tracepoint): Call + init_registers_powerpc_isa207_htm_vsx32l and + init_registers_powerpc_isa207_htm_vsx64l. + +2018-10-26 Pedro Franco de Carvalho <pedromfc@linux.ibm.com> + + * configure.srv (powerpc*-*-linux*): Add rs6000/power-ebb.xml and + rs6000/power-linux-pmu.xml to srv_xmlfiles. + * linux-ppc-low.c (ppc_store_ebbregset, ppc_fill_pmuregset) + (ppc_store_pmuregset): New functions. + (ppc_regsets): Add entries for ebb and pmu regsets. + (ppc_arch_setup): Set isa207 in features struct if the ebb and + pmu regsets are available. Set sizes for these regsets. + +2018-10-26 Pedro Franco de Carvalho <pedromfc@linux.ibm.com> + + * configure.srv (ipa_ppc_linux_regobj): Add + powerpc-isa207-vsx64l-ipa.o and powerpc-isa207-vsx32l-ipa.o. + (powerpc*-*-linux*): Add powerpc-isa207-vsx32l.o and + powerpc-isa207-vsx64l.o to srv_regobj, add rs6000/power-tar.xml, + rs6000/powerpc-isa207-vsx32l.xml, and + rs6000/powerpc-isa207-vsx64l.xml to srv_xmlfiles. + * linux-ppc-tdesc-init.h (enum ppc_linux_tdesc) + <PPC_TDESC_ISA207_VSX>: New enum value. + (init_registers_powerpc_isa207_vsx32l): Declare. + (init_registers_powerpc_isa207_vsx64l): Declare. + * linux-ppc-low.c (ppc_fill_tarregset): New function. + (ppc_store_tarregset): New function. + (ppc_regsets): Add entry for the TAR regset. + (ppc_arch_setup): Set isa207 in features struct when needed. Set + size for the TAR regsets. + (ppc_get_ipa_tdesc_idx): Return PPC_TDESC_ISA207_VSX. + (initialize_low_arch): Call init_registers_powerpc_isa207_vsx32l + and init_registers_powerpc_isa207_vsx64l. + * linux-ppc-ipa.c (get_ipa_tdesc): Handle PPC_TDESC_ISA207_VSX. + (initialize_low_tracepoint): Call + init_registers_powerpc_isa207_vsx32l and + init_registers_powerpc_isa207_vsx64l. + +2018-10-26 Edjunior Barbosa Machado <emachado@linux.vnet.ibm.com> + Pedro Franco de Carvalho <pedromfc@linux.ibm.com> + + * configure.srv (ipa_ppc_linux_regobj): Add + powerpc-isa205-ppr-dscr-vsx32l-ipa.o and + powerpc-isa205-ppr-dscr-vsx64l-ipa.o. + (powerpc*-*-linux*): Add powerpc-isa205-ppr-dscr-vsx32l.o and + powerpc-isa205-ppr-dscr-vsx64l.o to srv_regobj, add + rs6000/power-dscr.xml, rs6000/power-ppr.xml, + rs6000/powerpc-isa205-ppr-dscr-vsx32l.xml and + rs6000/powerpc-isa205-ppr-dscr-vsx64l.xml to srv_xmlfiles. + * linux-ppc-tdesc-init.h (enum ppc_linux_tdesc) + <PPC_TDESC_ISA205_PPR_DSCR_VSX>: New enum value. + (init_registers_powerpc_isa205_ppr_dscr_vsx32l) + (init_registers_powerpc_isa205_ppr_dscr_vsx64l): Declare. + * linux-ppc-low.c: Include "elf/common.h" and <sys/uio.h>. + (ppc_hwcap): Add comment. + (ppc_hwcap2): New global. + (ppc_check_regset, ppc_fill_pprregset, ppc_store_pprregset) + (ppc_fill_dscrregset, ppc_store_dscrregset): New functions. + (ppc_regsets): Add entries for the DSCR and PPR regsets. + (ppc_arch_setup): Get AT_HWCAP2. Set ppr_dscr in features struct + when needed. Set sizes for the the DSCR and PPR regsets. + (ppc_get_ipa_tdesc_idx): Return PPC_TDESC_ISA205_PPR_DSCR_VSX. + (initialize_low_arch): Call + init_registers_powerpc_isa205_ppr_dscr_vsx32l and + init_registers_powerpc_isa205_ppr_dscr_vsx64l. + * linux-ppc-ipa.c (get_ipa_tdesc): Handle + PPC_TDESC_ISA205_PPR_DSCR_VSX. + (initialize_low_tracepoint): Call + init_registers_powerpc_isa205_ppr_dscr_vsx32l and + init_registers_powerpc_isa205_ppr_dscr_vsx64l. + +2018-10-26 Pedro Franco de Carvalho <pedromfc@linux.ibm.com> + + * linux-ppc-low.c (ppc_fill_vrregset): Remove memset calls. + +2018-10-10 Sergio Durigan Junior <sergiodj@redhat.com> + Simon Marchi <simark@simark.ca> + + * acinclude.m4: Include "../selftest.m4". + * configure: Regenerate. + * configure.ac: Use "GDB_AC_SELFTEST". + * configure.srv: Use "$enable_unittests" instead of + "$development" when checking whether unit tests have been + enabled. + * server.c (captured_main): Update message informing that + selftests have been disabled. + +2018-10-04 Tom Tromey <tom@tromey.com> + + * configure: Rebuild. + +2018-10-04 Tom Tromey <tom@tromey.com> + + * server.c (handle_status): Rename inner "thread". + (process_serial_event): Declare "res" in 'm' case. + * linux-low.c (last_thread_of_process_p, find_lwp_pid) + (iterate_over_lwps): Rename inner "thread". + (linux_qxfer_libraries_svr4): Rename inner "len". + * gdbthread.h (find_thread_in_random): Rename inner "thread". + +2018-10-01 Gary Benson <gbenson@redhat.com> + + * gdb_proc_service.h: Moved common code to + common/gdb_proc_service.h. + +2018-10-01 Gary Benson <gbenson@redhat.com> + + * gdb_proc_service.h: Synchronize comments and whitespace with + GDB's version of this file. + +2018-09-25 Tom Tromey <tom@tromey.com> + + * configure: Rebuild. + * configure.ac (WARN_CFLAGS): Don't remove -Wmissing-prototypes. + +2018-09-16 Simon Marchi <simon.marchi@polymtl.ca> + + * Makefile.in (gdbserver$(EXEEXT)): Sort OBS. + (gdbreplay$(EXEEXT)): Sort GDBREPLAY_OBS. + ($(IPA_LIB)): Sort IPA_OBJS. + +2018-09-16 Simon Marchi <simon.marchi@polymtl.ca> + + * Makefile.in: Remove references to $(ADD_DEPS). + +2018-09-16 Tom Tromey <tom@tromey.com> + + * remote-utils.c (remote_open): Use GNU style for metasyntactic + variables. + * gdbreplay.c (gdbreplay_usage): Use GNU style for metasyntactic + variables. + +2018-09-05 Tom Tromey <tom@tromey.com> + + * configure: Rebuild. + +2018-08-28 Simon Marchi <simon.marchi@polymtl.ca> + + PR build/23399 + * tracepoint.c (IPA_SYM_STRUCT_NAME): Define. + +2018-08-27 Tom Tromey <tom@tromey.com> + + PR build/23087: + * configure: Rebuild. + +2018-08-27 Tom Tromey <tom@tromey.com> + + * linux-s390-low.c (s390_emit_ext, s390_emit_litpool) + (s390_emit_const, s390_emit_reg, s390_emit_zero_ext) + (s390_emit_stack_adjust, s390_emit_set_r2, s390x_emit_ext) + (s390x_emit_const, s390x_emit_reg, s390x_emit_zero_ext) + (s390x_emit_stack_adjust): Add casts to unsigned char. + +2018-08-22 Simon Marchi <simon.marchi@ericsson.com> + + PR gdb/23374 + PR gdb/23375 + * server.h (struct client_state) <disable_randomization>: + Initialize to 1. + +2018-07-22 Simon Marchi <simon.marchi@polymtl.ca> + + * linux-mips-low.c (mips_collect_ptrace_register): Remove unused + variable. + (mips_supply_ptrace_register): Likewise. + +2018-07-22 Tom Tromey <tom@tromey.com> + + * configure: Rebuild. + +2018-07-22 Tom Tromey <tom@tromey.com> + + * win32-low.c (win32_create_inferior): Remove unused variables. + * gdbreplay.c (remote_open): Remove unused variable. + * remote-utils.c (remote_prepare): Remove unused variable. + * x86-tdesc.h (X86_TDESC_H): Define. + (amd64_expedite_regs): Define conditionally. + (i386_expedite_regs): Mark ATTRIBUTE_UNUSED. + * linux-x86-tdesc.c (i386_tdescs): Move inside #if. + * remote-utils.c (readchar): Remove unused variable. + +2018-07-13 Pedro Alves <palves@redhat.com> + + * linux-low.c (linux_kill): Change parameter to process_info + pointer instead of pid. Adjust. + * lynx-low.c (lynx_kill): Likewise. + * nto-low.c (nto_kill): Likewise. + * spu-low.c (spu_kill): Likewise. + * win32-low.c (win32_kill): Likewise. + * server.c (handle_v_kill, kill_inferior_callback) + (detach_or_kill_for_exit): Adjust. + * target.c (kill_inferior): Change parameter to process_info + pointer instead of pid. Adjust. + * target.h (struct target_ops) <kill>: Change parameter to + process_info pointer instead of pid. Adjust all implementations + and callers. + (kill_inferior): Likewise. + +2018-07-13 Pedro Alves <palves@redhat.com> + + * linux-low.c (linux_detach, linux_join): Change parameter to + process_info pointer instead of pid. Adjust. + * lynx-low.c (lynx_detach, lynx_join): Likewise. + * nto-low.c (nto_detach): Likewise. + * spu-low.c (spu_detach, spu_join): Likewise. + * win32-low.c (win32_detach, win32_join): Likewise. + * server.c (handle_detach, detach_or_kill_for_exit): Adjust. + * target.h (struct target_ops) <detach, join>: Change parameter to + process_info pointer instead of pid. Adjust all implementations + and callers. + (detach_inferior, join_inferior): Rename 'pid' parameter to + 'proc'. + +2018-07-11 Sergio Durigan Junior <sergiodj@redhat.com> + Jan Kratochvil <jan.kratochvil@redhat.com> + Paul Fertser <fercerpav@gmail.com> + Tsutomu Seki <sekiriki@gmail.com> + + * Makefile.in (SFILES): Add '$(srcdir)/common/netstuff.c'. + (OBS): Add 'common/netstuff.o'. + (GDBREPLAY_OBS): Likewise. + * gdbreplay.c: Include 'wspiapi.h' and 'netstuff.h'. + (remote_open): Implement support for IPv6 + connections. + * remote-utils.c: Include 'netstuff.h', 'filestuff.h' + and 'wspiapi.h'. + (handle_accept_event): Accept connections from IPv6 sources. + (remote_prepare): Handle IPv6-style hostnames; implement + support for IPv6 connections. + (remote_open): Implement support for printing connections from + IPv6 sources. + +2018-07-11 Pedro Alves <palves@redhat.com> + + PR gdb/23377 + * mem-break.c (any_persistent_commands): Add process_info + parameter and use it instead of relying on the current process. + Change return type to bool. + * mem-break.h (any_persistent_commands): Add process_info + parameter and change return type to bool. + * server.c (handle_detach): Remove require_running_or_return call. + Look up the process_info for the process we're about to detach. + If not found, return back error to GDB. Adjust + any_persistent_commands call to pass down a process pointer. + +2018-07-11 Pedro Alves <palves@redhat.com> + + * i387-fp.c (i387_cache_to_fsave, cache_to_fxsave) + (i387_cache_to_xsave): Use regcache_raw_get_unsigned_by_name + instead of collect_register_by_name. + * regcache.c (regcache_raw_get_unsigned_by_name): New. + * regcache.h (regcache_raw_get_unsigned_by_name): New. + +2018-07-04 Vyacheslav Barinov <v.barinov@samsung.com> + Pedro Alves <palves@redhat.com> + + * linux-low.c (initialize_low): Call linux_proc_init_warnings. + +2018-07-03 Tom Tromey <tom@tromey.com> + + * linux-low.c: Update. + * lynx-low.c: Update. + * mem-break.c: Update. + * nto-low.c: Update. + * remote-utils.c: Update. + * server.c: Update. + * spu-low.c: Update. + * target.c: Update. + * win32-low.c: Update. + +2018-07-03 Tom Tromey <tom@tromey.com> + + * server.c: Update. + +2018-07-03 Tom Tromey <tom@tromey.com> + + * linux-low.c: Update. + +2018-07-03 Tom Tromey <tom@tromey.com> + + * target.c: Update. + +2018-07-03 Tom Tromey <tom@tromey.com> + + * linux-low.c: Update. + * linux-mips-low.c: Update. + * lynx-low.c: Update. + * nto-low.c: Update. + * remote-utils.c: Update. + * server.c: Update. + * spu-low.c: Update. + * target.c: Update. + * thread-db.c: Update. + +2018-07-03 Tom Tromey <tom@tromey.com> + + * linux-low.c: Update. + * linux-mips-low.c: Update. + * lynx-low.c: Update. + * mem-break.c: Update. + * nto-low.c: Update. + * remote-utils.c: Update. + * server.c: Update. + * spu-low.c: Update. + * target.c: Update. + * tracepoint.c: Update. + +2018-07-03 Tom Tromey <tom@tromey.com> + + * linux-low.c: Update. + * linux-ppc-low.c: Update. + * linux-x86-low.c: Update. + * proc-service.c: Update. + * server.c: Update. + * spu-low.c: Update. + * thread-db.c: Update. + * win32-low.c: Update. + +2018-07-03 Tom Tromey <tom@tromey.com> + + * linux-low.c: Update. + * lynx-low.c: Update. + * nto-low.c: Update. + * remote-utils.c: Update. + * spu-low.c: Update. + * thread-db.c: Update. + * win32-low.c: Update. + +2018-06-29 Joel Brobecker <brobecker@adacore.com> + + * linux-x86-tdesc.c (amd64_linux_read_description): Add missing + parameter in call to 'amd64_create_target_description'. + +2018-06-28 Jan Kratochvil <jan.kratochvil@redhat.com> + + * x86-tdesc.h: Remove executable permission flag. + +2018-06-19 Simon Marchi <simon.marchi@ericsson.com> + + * configure.ac: Remove AC_PREREQ, add missing quoting. + * configure: Re-generate. + * config.in: Re-generate. + * aclocal.m4: Re-generate. + +2018-06-18 Simon Marchi <simon.marchi@ericsson.com> + + * tracepoint.h (current_traceframe): Remove declaration. + +2018-06-18 Alan Hayward <alan.hayward@arm.com> + + * linux-aarch64-low.c (is_sve_tdesc): New function. + (aarch64_sve_regs_copy_to_regcache): Likewise. + (aarch64_sve_regs_copy_from_regcache): Likewise. + (aarch64_regs_info): Add SVE checks. + (initialize_low_arch): Initialize SVE. + +2018-06-18 Alan Hayward <alan.hayward@arm.com> + + * Makefile.in: Add aarch64-sve-linux-ptrace.c. + +2018-06-11 Alan Hayward <alan.hayward@arm.com> + + * linux-aarch64-ipa.c (get_ipa_tdesc): Add null VQ param. + (initialize_low_tracepoint): Likewise + * linux-aarch64-low.c (aarch64_arch_setup): Get VQ. + * linux-aarch64-tdesc-selftest.c (aarch64_tdesc_test): Add null VQ + param. + * linux-aarch64-tdesc.c (aarch64_linux_read_description): Add VQ + checks. + * linux-aarch64-tdesc.h (aarch64_linux_read_description): Add VQ. + +2018-06-11 Alan Hayward <alan.hayward@arm.com> + + * server.h (PBUFSIZ): Increase size + +2018-06-11 Alan Hayward <alan.hayward@arm.com> + + * regcache.c (regcache::raw_compare): New function. + * regcache.h (regcache::raw_compare): New declaration. + +2018-06-11 Alan Hayward <alan.hayward@arm.com> + + * regcache.c (new_register_cache): Use new. + (free_register_cache): Use delete. + (register_data): Use const. + (supply_register): Move body inside regcache. + (regcache::raw_supply): New override function. + (collect_register): Move body inside regcache. + (regcache::raw_collect): New override function. + (regcache::get_register_status): New override function. + * regcache.h (struct regcache): Inherit from reg_buffer_common. + +2018-06-09 Tom Tromey <tom@tromey.com> + + * event-loop.c (gdb_event, gdb_event_p): Remove typedefs. Don't + declare queue. + (event_queue): Use std::queue. + (gdb_event_xfree): Remove. + (initialize_event_loop, process_event, wait_for_event): Update. + +2018-06-08 Stan Cox <scox@redhat.com> + + * win32-low.c (win32_create_inferior): last_ptid and last_status + moved to client_state. + +2018-06-08 Pedro Alves <palves@redhat.com> + + * Makefile.in (GDBREPLAY_OBS): Add common/cleanups.o, + common/common-exceptions.o, common/common-utils.o, + common/errors.o, common/print-utils.o and utils.o. + * gdbreplay.c: Include "common-defs.h" instead of the two + 'config.h's here. Don't include stdio.h, errno.h, stdlib.h, + string.h or alloca.h. + (perror_with_name): Delete. + (remote_open): Use xstrdup instead of strdup. + (main): Rename to ... + (captured_main): ... this. + (main): New. + +2018-06-08 Tom Tromey <tom@tromey.com> + + * linux-low.c (linux_low_read_btrace): Update. + +2018-06-04 Stan Cox <scox@redhat.com> + + * server.h (struct client_state): New. + * server.c (cont_thread, general_thread, multi_process) + (report_fork_events, report_vfork_events, report_exec_events) + (report_thread_events, swbreak_feature, hwbreak_feature) + (vCont_supported, disable_randomization, pass_signals) + (program_signals, program_signals_p, last_status, last_ptid, own_buf): + Moved to client_state. + * remote-utils.c (remote_debug, noack_mode) + (transport_is_reliable): Moved to client_state. + * tracepoint.c (current_traceframe): Moved to client_state. + + Update all callers. + * server.c, remote-utils.c, tracepoint.c, fork-child.c, + linux-low.c, remote-utils.h, target.c: Use client_state. + +2018-05-31 Alan Hayward <alan.hayward@arm.com> + + * configure.srv: Add new c/h file. + +2018-05-31 Alan Hayward <alan.hayward@arm.com> + + * linux-aarch64-tdesc.c (aarch64_linux_read_description): Add + null VQ. + +2018-05-25 Maciej W. Rozycki <macro@mips.com> + + * gdb.arch/mips-fpregset-core.exp: New test. + * gdb.arch/mips-fpregset-core.c: New test source. + +2018-05-23 Erik Kurzinger <ekurzinger@nvidia.com> + + PR server/23198 + * hostio.c (require_int): Do not report overflow for integers + between 0xfffffff and 0x7fffffff. + +2018-05-22 Maciej W. Rozycki <macro@mips.com> + + * linux-mips-low.c [HAVE_PTRACE_GETREGS] (mips_collect_register) + (mips_supply_register): Move outside HAVE_PTRACE_GETREGS. + (mips_collect_ptrace_register, mips_supply_ptrace_register): New + functions. + (the_low_target): Wire them. + +2018-05-22 Pedro Franco de Carvalho <pedromfc@linux.vnet.ibm.com> + + * linux-ppc-low.c (ppc_fill_vrregset): Add vscr_offset variable. + Set vscr_offset to 0 in little-endian mode and 12 in big-endian + mode. Call collect_register_by_name with vscr using + vscr_offset. Zero-pad vscr and vrsave fields in collector buffer. + (ppc_store_vrregset): Add and set vscr_offset variable as in + ppc_fill_vrregset. Call supply_register_by_name with vscr using + vscr_offset. + +2018-05-22 Pedro Franco de Carvalho <pedromfc@linux.vnet.ibm.com> + + * linux-ppc-low.c (SIZEOF_VSXREGS, SIZEOF_VRREGS): Remove. + (ppc_arch_setup): Change SIZEOF_VRREGS and SIZEOF_VSXREGS to + PPC_LINUX_SIZEOF_VRREGSET and PPC_LINUX_SIZEOF_VSXREGSET. + +2018-05-22 Pedro Franco de Carvalho <pedromfc@linux.vnet.ibm.com> + + * linux-ppc-low.c (ppc_fill_vsxregset): Remove ppc_hwcap check. + (ppc_store_vsxregset): Likewise. + (ppc_fill_vrregset): Likewise. + (ppc_store_vrregset): Likewise. + (ppc_fill_evrregset): Likewise. + (ppc_store_evrregset): Likewise. + (ppc_regsets): Set VSX/VR/EVR regset sizes to 0. + (ppc_arch_setup): Iterate through ppc_regsets and set sizes when + needed. + +2018-05-22 Pedro Franco de Carvalho <pedromfc@linux.vnet.ibm.com> + + * linux-ppc-low.c (ppc_arch_setup): Remove code for getting the + wordsize of the inferior. Call ppc_linux_target_wordsize. + +2018-05-22 Pedro Franco de Carvalho <pedromfc@linux.vnet.ibm.com> + + * configure.srv (srv_tgtobj): Add arch/ppc-linux-common.o. + * Makefile.in (SFILES): Add arch/ppc-linux-common.c. + * linux-ppc-tdesc.h: Rename to linux-ppc-tdesc-init.h. + * linux-ppc-tdesc-init.h (tdesc_powerpc_32l, tdesc_powerpc_64l) + (tdesc_powerpc_altivec32l, tdesc_powerpc_altivec64l) + (tdesc_powerpc_cell32l, tdesc_powerpc_cell64l) + (tdesc_powerpc_vsx32l, tdesc_powerpc_vsx64l) + (tdesc_powerpc_isa205_32l, tdesc_powerpc_isa205_64l) + (tdesc_powerpc_isa205_altivec32l, tdesc_powerpc_isa205_altivec64l) + (tdesc_powerpc_isa205_vsx32l, tdesc_powerpc_isa205_vsx64l) + (tdesc_powerpc_e500l): Remove. + * linux-ppc-ipa.c: Include arch/ppc-linux-tdesc.h and + linux-ppc-tdesc-init.h. Don't include linux-ppc-tdesc.h. + * linux-ppc-low.c: Include arch/ppc-linux-common.h, + arch/ppc-linux-tdesc.h, and linux-ppc-tdesc-init.h. Don't include + linux-ppc-tdesc.h. + (ppc_arch_setup): Remove target description matching code. Fill a + ppc_linux_features struct and call ppc_linux_match_description + with it. + +2018-05-22 Maciej W. Rozycki <macro@mips.com> + + * linux-mips-low.c (mips_cannot_fetch_register): Return 1 if the + width of the requested register exceeds the width of the + `ptrace' data type. + (mips_cannot_store_register): Likewise. + +2018-05-21 Maciej W. Rozycki <macro@mips.com> + + * linux-mips-low.c (mips_fetch_register): New function. Update + preceding comment. + (mips_store_gregset): Supply 0 rather than $restart for $zero. + (the_low_target): Wire `mips_fetch_register'. + +2018-05-10 Joel Brobecker <brobecker@adacore.com> + + * lynx-i386-low.c (LYNXOS_178): New macro. + [LYNXOS_178] (usr_fcontext_t): Provide a definition that matches + the layout on LynxOS-178. + (lynx_i386_fill_fpregset, lynx_i386_store_fpregset): Do not + handle floating point registers that are not supported by + LynxOS-178. + +2018-05-10 Tom Tromey <tom@tromey.com> + + * configure: Rebuild. + +2018-05-10 Joel Brobecker <brobecker@adacore.com> + + PR server/23158: + * tdesc.h (init_target_desc) <expedite_regs>: New parameter. + * tdesc.c (init_target_desc) <expedite_regs>: New parameter. + Use it to set the expedite_regs field in the given tdesc. + * x86-tdesc.h: New file. + * linux-aarch64-tdesc.c (aarch64_linux_read_description): + Adjust following the addition of the new expedite_regs parameter + to init_target_desc. + * linux-tic6x-low.c (tic6x_read_description): Likewise. + * linux-x86-tdesc.c: #include "x86-tdesc.h". + (i386_linux_read_description, amd64_linux_read_description): + Adjust following the addition of the new expedite_regs parameter + to init_target_desc. + * lynx-i386-low.c: #include "x86-tdesc.h". + (lynx_i386_arch_setup): Adjust following the addition of the new + expedite_regs parameter to init_target_desc. + * nto-x86-low.c: #include "x86-tdesc.h". + (nto_x86_arch_setup): Adjust following the addition of the new + expedite_regs parameter to init_target_desc. + * win32-i386-low.c: #include "x86-tdesc.h". + (i386_arch_setup): Adjust following the addition of the new + expedite_regs parameter to init_target_desc. + +2018-05-10 Joel Brobecker <brobecker@adacore.com> + + PR server/23158: + * win32-low.c (win32_create_inferior): Add call to my_wait + setting last_status global. + +2018-05-10 Joel Brobecker <brobecker@adacore.com> + + PR server/23158: + * win32-low.c (create_process): Only call gdb_tilde_expand if + inferior_cwd is not NULL. + +2018-05-08 Andrew Burgess <andrew.burgess@embecosm.com> + + * i387-fp.c (i387_cache_to_xsave): Only write x87 control + registers to the cache if their values have changed. + (i387_xsave_to_cache): Provide default values for x87 control + registers when these features are available, but disabled. + * regcache.c (supply_register_by_name_zeroed): New function. + * regcache.h (supply_register_by_name_zeroed): Declare new + function. + +2018-05-07 Tom Tromey <tom@tromey.com> + + * configure: Rebuild. + +2018-05-04 Tom Tromey <tom@tromey.com> + + * configure: Rebuild. + +2018-05-04 Jan Kratochvil <jan.kratochvil@redhat.com> + Pedro Alves <palves@redhat.com> + + * linux-aarch64-low.c (aarch64_stopped_data_address): + Likewise. + +2018-04-27 Tom Tromey <tom@tromey.com> + + * configure: Rebuild. + +2018-04-23 Tom Tromey <tom@tromey.com> + + * configure: Rebuild. + +2018-04-19 Simon Marchi <simon.marchi@ericsson.com> + + * Makefile.in (depcomp): Add "..". + (all_deps_files): New and use it. + +2018-04-18 Alan Hayward <alan.hayward@arm.com> + + * configure.srv (aarch64*-*-linux*): Don't include xml. + (i[34567]86-*-cygwin*): Likewise. + (i[34567]86-*-linux*): Likewise. + (i[34567]86-*-lynxos*): Likewise. + (i[34567]86-*-mingw32ce*): Likewise. + (i[34567]86-*-mingw*): Likewise. + (i[34567]86-*-nto*): Likewise. + (tic6x-*-uclinux): Likewise. + (x86_64-*-linux*): Likewise. + (x86_64-*-mingw*): Likewise. + (x86_64-*-cygwin*): Likewise. + +2018-04-18 Alan Hayward <alan.hayward@arm.com> + + * tdesc.c: Remove xml parameter. + +2018-04-18 Alan Hayward <alan.hayward@arm.com> + + * server.c (get_features_xml): Remove cast. + * tdesc.c (void target_desc::accept): Fill in function. + (tdesc_get_features_xml): Remove old xml creation. + (print_xml_feature::visit_pre): Add xml vistor. + * tdesc.h (struct target_desc): Make xmltarget mutable. + (tdesc_get_features_xml): Remove declaration. + +2018-04-18 Alan Hayward <alan.hayward@arm.com> + + * tdesc.c (tdesc_architecture_name): Add new function. + (tdesc_osabi_name): Likewise. + (tdesc_get_features_xml): Use new functions. + +2018-04-18 Alan Hayward <alan.hayward@arm.com> + + * tdesc.c (tdesc_create_flags): Remove. + (tdesc_add_flag): Likewise. + (tdesc_named_type): Likewise. + (tdesc_create_union): Likewise. + (tdesc_create_struct): Likewise. + (tdesc_create_vector): Likewise. + (tdesc_add_bitfield): Likewise. + (tdesc_add_field): Likewise. + (tdesc_set_struct_size): Likewise. + +2018-04-18 Alan Hayward <alan.hayward@arm.com> + + * tdesc.c (~target_desc): Remove implictly deleted items. + (init_target_desc): Iterate all features. + (tdesc_get_features_xml): Use vector. + (tdesc_create_feature): Create feature. + * tdesc.h (tdesc_feature) Remove + (target_desc): Add features. + +2018-04-18 Alan Hayward <alan.hayward@arm.com> + + * Makefile.in: Add common/tdesc.c + * tdesc.c (init_target_desc): init all reg_defs from register + vector. + (tdesc_create_reg): Create tdesc_reg. + * tdesc.h (tdesc_feature): Add register vector. + +2018-03-30 Simon Marchi <simon.marchi@polymtl.ca> + + * tdesc.h (struct target_desc) <features>: Change type to + std::vector<std::string>. + * tdesc.c (target_desc::~target_desc): Adjust to std::vector + changes. + (tdesc_get_features_xml): Likewise. + (tdesc_create_feature): Likewise. + +2018-03-26 Alan Hayward <alan.hayward@arm.com> + + * regcache.c (find_register_by_number): Return a ref. + (find_regno): Use references. + (register_size): Likewise. + (register_data): Likewise. + * tdesc.c (target_desc::~target_desc): Remove free calls. + (target_desc::operator==): Use std::vector compare. + (init_target_desc): Use reference. + (tdesc_create_reg): Use reg constructors. + * tdesc.h (struct target_desc): Replace pointer with object. + +2018-03-23 Alan Hayward <alan.hayward@arm.com> + + * regcache.c (find_register_by_number): Make static. + (find_regno): Use find_register_by_number + * regcache.h (struct reg): Remove declaration. + +2018-03-23 Alan Hayward <alan.hayward@arm.com> + + * tdesc.c (target_desc::~target_desc): Move to here. + (target_desc::operator==): Likewise. + * tdesc.h (target_desc::~target_desc): Move from here. + (target_desc::operator==): Likewise. + +2018-03-22 Andreas Arnez <arnez@linux.vnet.ibm.com> + + * linux-s390-low.c (s390_get_wordsize): Correct brace style. + +2018-03-21 Andreas Arnez <arnez@linux.vnet.ibm.com> + + * linux-s390-ipa.c (get_ipa_tdesc): Add handling for + S390_TDESC_GS. + * linux-s390-low.c (s390_get_ipa_tdesc_idx): Likewise. + (initialize_low_tracepoint): Call init_registers_s390x_gs_linux64 + and init_registers_s390_gs_linux64. + +2018-03-21 Andreas Arnez <arnez@linux.vnet.ibm.com> + + * linux-s390-low.c (s390_fill_gs): Remove function. + (s390_fill_gsbc): Remove function. + (s390_regsets): Set fill functions for the guarded storage regsets + to NULL. + +2018-03-21 Andreas Arnez <arnez@linux.vnet.ibm.com> + + * linux-s390-low.c (s390_get_hwcap): Replace tdesc parameter by + the word size. Add comment. + (s390_get_wordsize): New function. + (s390_arch_setup): No longer select a temporary tdesc to fetch the + pswm with it. Instead, use s390_get_wordsize to determine the + word size first and derive the correct tdesc from that directly. + +2018-03-16 Simon Marchi <simon.marchi@polymtl.ca> + + * Makefile.in: Include silent-rules.mk. + (srcdir, abs_top_srcdir, abs_srcdir, VPATH): Move up. + (COMPILE): Add ECHO_CXX. + (gdbserver$(EXEEXT)): Add SILENCE and ECHO_CXXLD. + (gdbreplay$(EXEEXT)): Add SILENCE and ECHO_CXXLD. + ($(IPA_LIB)): Add SILENCE and ECHO_CXXLD. + (version-generated.c): Add ECHO_GEN. + (stamp-xml): Add SILENCE and ECHO_GEN_XML_BUILTIN_GENERATED. + (IPAGENT_COMPILE): Add ECHO_CXX. + (%-generated.c): Add ECHO_REGDAT. + +2018-03-14 Tom Tromey <tom@tromey.com> + + PR cli/14977: + * ax.c (ax_printf): Special case for NULL. + +2018-03-08 Simon Marchi <simon.marchi@polymtl.ca> + + * linux-low.c (linux_qxfer_libraries_svr4): Use + xml_escape_text_append. + +2018-03-08 Simon Marchi <simon.marchi@polymtl.ca> + + * linux-low.c (linux_qxfer_libraries_svr4): Use std::string. + +2018-03-02 Simon Marchi <simon.marchi@polymtl.ca> + + * server.c (handle_general_set): Remove unnecessary xstrdup. + +2018-03-02 Simon Marchi <simon.marchi@polymtl.ca> + + * server.c (parse_debug_format_options): Adjust to + delim_string_to_char_ptr_vec changes. + * thread-db.c (thread_db_load_search): Adjust to + dirnames_to_char_ptr_vec changes. + +2018-03-01 Markus Metzger <markus.t.metzger@intel.com> + + * target.h (target_enable_btrace, target_disable_btrace) + (target_read_btrace, target_read_btrace_conf): Turn macro into + inline function. Throw error if target method is not defined. + * server.c (handle_qxfer_btrace handle_qxfer_btrace_conf): Remove + check for btrace target method. Be prepared to handle exceptions + from btrace target methods. + +2018-02-28 Sergio Durigan Junior <sergiodj@redhat.com> + + * server.c (captured_main): Change order of error message printed + when the current working directory cannot be found. + +2018-02-28 Sergio Durigan Junior <sergiodj@redhat.com> + + * server.c: Include "filenames.h" and "pathstuff.h". + (program_name): Delete variable. + (program_path): New anonymous class. + (get_exec_wrapper): Use "program_path" instead of + "program_name". + (handle_v_run): Likewise. + (captured_main): Likewise. + (process_serial_event): Likewise. + +2018-02-28 Sergio Durigan Junior <sergiodj@redhat.com> + + * Makefile.in (SFILES): Add "$(srcdir)/common/pathstuff.c". + (OBJS): Add "pathstuff.o". + * server.c (current_directory): New global variable. + (captured_main): Initialize "current_directory". + +2018-02-26 Alan Hayward <alan.hayward@arm.com> + + * tdesc.c: Use common/tdesc.h. + * tdesc.h: Likewise. + +2018-02-20 Alan Hayward <alan.hayward@arm.com> + Simon Marchi <simon.marchi@ericsson.com> + + * Makefile.in: Switch order of make rules. + +2018-02-19 Alan Hayward <alan.hayward@arm.com> + + * Makefile.in: Add common directory in build. + * configure.ac: Add common reference. + * configure: Regenerate. + +2018-02-09 Markus Metzger <markus.t.metzger@intel.com> + + * linux-low.c (linux_target_ops): Remove linux_supports_btrace. + * nto-low.c (nto_target_ops): Remove NULL for supports_btrace. + * spu-low.c (spu_target_ops): Likewise. + * win32-low.c (win32_target_ops): Likewise. + * server.c (supported_btrace_packets): Report packets unconditionally. + * target.h (target_ops) <supports_btrace>: Remove. + (target_supports_btrace): Remove. + +2018-02-09 Markus Metzger <markus.t.metzger@intel.com> + + * server.c (handle_btrace_enable_bts, handle_btrace_enable_pt) + (handle_btrace_disable): Change return type to void. Use exceptions + to report errors. + (handle_btrace_general_set): Catch exception and copy message to + return message. + +2018-02-08 Tom Tromey <tom@tromey.com> + + * linux-low.c (install_software_single_step_breakpoints): Use + make_scoped_restore. + * inferiors.c (make_cleanup_restore_current_thread): Remove. + (do_restore_current_thread_cleanup): Remove. + * gdbthread.h (make_cleanup_restore_current_thread): Don't + declare. + +2018-02-08 Tom Tromey <tom@tromey.com> + + * mem-break.c (set_raw_breakpoint_at): Use + gdb::unique_xmalloc_ptr. + +2018-01-30 Pedro Alves <palves@redhat.com> + + PR gdb/13211 + * target.c (target_terminal::terminal_state): Rename to ... + (target_terminal::m_terminal_state): ... this. + +2018-01-19 James Clarke <jrtc27@jrtc27.com> + + * linux-low.c (handle_extended_wait): Surround call to + thread_db_notice_clone with #ifdef USE_THREAD_DB. + +2018-01-17 Simon Marchi <simon.marchi@ericsson.com> + + * linux-low.c (attach_proc_task_lwp_callback): Adjust to + linux_ptrace_attach_fail_reason_string now returning an + std::string. + (linux_attach): Likewise. + * thread-db.c (attach_thread): Likewise. + +2018-01-17 Eldar Abusalimov <eldar.abusalimov@jetbrains.com> + + PR gdb/21559 + * configure.ac: Include <sys/types.h> prior to <sys/user.h> when + checking for fs_base/gs_base fields in struct user_regs_struct. + * configure: Regenerate. + +2018-01-16 Yao Qi <yao.qi@linaro.org> + + PR gdb/18749 + * linux-low.c (fetch_register): Call supply_register instead of + error. + +2018-01-08 Yao Qi <yao.qi@linaro.org> + Simon Marchi <simon.marchi@ericsson.com> + + * Makefile.in (OBS): Remove selftest.o. + * configure.ac: Set srv_selftest_objs if $development is true. + (GDBSERVER_DEPFILES): Append $srv_selftest_objs. + * configure: Re-generated. + * server.c (captured_main): Wrap variable selftest_filter with + GDB_SELF_TEST. + +2018-01-07 Simon Marchi <simon.marchi@polymtl.ca> + + * server.c (parse_debug_format_options): Return std::string. + (handle_monitor_command, captured_main): Adjust. + +2018-01-05 Pedro Alves <palves@redhat.com> + + PR gdb/18653 + * server.c (captured_main): Pass quiet=false to + save_original_signals_state. + +2018-01-01 Joel Brobecker <brobecker@adacore.com> + + * gdbreplay.c (gdbreplay_version): Update copyright year in + version message. + * server.c (gdbserver_version): Likewise. + +2017-12-08 Tom Tromey <tom@tromey.com> + + * ax.c (ax_printf): Update. + +2017-12-07 Yao Qi <yao.qi@linaro.org> + + * linux-aarch64-ipa.c (initialize_low_tracepoint): Call + aarch64_linux_read_description. + * linux-amd64-ipa.c (idx2mask): New array. + (get_ipa_tdesc): Move idx2mask out. + (initialize_low_tracepoint): Initialize target descriptions. + * linux-i386-ipa.c (idx2mask): New array. + (get_ipa_tdesc): Move idx2mask out. + (initialize_low_tracepoint): Initialize target descriptions. + +2017-12-05 Simon Marchi <simon.marchi@polymtl.ca> + + * tdesc.c (struct tdesc_type): Change return type. + (tdesc_add_flag): Change parameter type. + (tdesc_add_bitfield): Likewise. + (tdesc_add_field): Likewise. + (tdesc_set_struct_size): Likewise. + +2017-12-05 Simon Marchi <simon.marchi@ericsson.com> + + * regcache.c (registers_to_string): Remove unused variable. + +2017-12-02 Simon Marchi <simon.marchi@polymtl.ca> + + * inferiors.c (for_each_inferior_with_data): Remove. + * inferiors.h (for_each_inferior_with_data): Remove. + * server.c (handle_qxfer_threads_worker): Change parameter type. + (handle_qxfer_threads_proper): Use for_each_thread. + +2017-12-02 Simon Marchi <simon.marchi@polymtl.ca> + + * inferiors.c (for_each_inferior): Remove. + (clear_inferiors): Use for_each_thread. + * inferiors.h (for_each_inferior): Remove. + * linux-low.c (linux_wait_for_event_filtered): Use + for_each_thread. + (linux_stabilize_threads): Likewise. + * regcache.c (regcache_release): Likewise. + * server.c (gdb_wants_all_threads_stopped): Likewise. + (clear_pending_status_callback): Remove. + (handle_status): Use for_each_thread. + (captured_main): Likewise. + * win32-low.c (child_init_thread_list): Likewise. + (win32_clear_inferiors): Likewise. + (fake_breakpoint_event): Likewise. + +2017-12-02 Simon Marchi <simon.marchi@polymtl.ca> + + * inferiors.h (find_inferior): Remove. + * inferiors.c (find_inferior): Remove. + +2017-12-02 Simon Marchi <simon.marchi@polymtl.ca> + + * linux-low.c (resume_status_pending_p): Update comment. + (need_step_over_p): Update comment. + +2017-12-02 Simon Marchi <simon.marchi@polymtl.ca> + + * linux-low.c (proceed_one_lwp): Return void, change parameter + type. + (unsuspend_and_proceed_one_lwp): Likewise. + (proceed_all_lwps): Use for_each_thread. + (unstop_all_lwps): Likewise. + +2017-12-02 Simon Marchi <simon.marchi@polymtl.ca> + + * linux-low.c (linux_resume_one_thread): Return void, take + parameter directly. + (linux_resume): Use for_each_thread. + +2017-12-02 Simon Marchi <simon.marchi@polymtl.ca> + + * linux-low.c (send_sigstop_callback): Return void, change + parameter type. Rename to... + (send_sigstop): ... this. + (suspend_and_send_sigstop_callback): Return void, change parameter + type. Rename to... + (suspend_and_send_sigstop): ... this. + (stop_all_lwps): Use for_each_thread. + +2017-12-02 Simon Marchi <simon.marchi@polymtl.ca> + + * linux-low.c (lwp_running): Return bool, remove unused + argument. + (linux_stabilize_threads): Use find_thread. + +2017-12-02 Simon Marchi <simon.marchi@polymtl.ca> + + * linux-low.c (select_singlestep_lwp_callback): Remove. + (count_events_callback): Remove. + (select_event_lwp_callback): Remove. + (select_event_lwp): Use find_thread/for_each_thread. + +2017-12-02 Simon Marchi <simon.marchi@polymtl.ca> + + * linux-low.c (not_stopped_callback): Return bool, take filter + argument directly. + (linux_wait_for_event_filtered): Use find_thread. + (linux_wait_1): Likewise. + +2017-12-02 Simon Marchi <simon.marchi@polymtl.ca> + + * linux-low.c (same_lwp): Remove. + (find_lwp_pid): Use find_thread. + +2017-12-02 Simon Marchi <simon.marchi@polymtl.ca> + + * linux-low.c (delete_lwp_callback): Remove. + (linux_mourn): Use for_each_thread. + +2017-12-02 Simon Marchi <simon.marchi@polymtl.ca> + + * linux-low.c (linux_detach_lwp_callback): Return void, remove + args parameter, don't check for pid. + (linux_detach): Use for_each_thread. + +2017-12-02 Simon Marchi <simon.marchi@polymtl.ca> + + * linux-low.c (struct counter): Remove. + (second_thread_of_pid_p): Remove. + (last_thread_of_process_p): Use find_thread. + +2017-12-02 Simon Marchi <simon.marchi@polymtl.ca> + + * inferiors.c (find_inferior_in_random): Remove. + * inferiors.h (find_inferior_in_random): Remove. + * linux-low.c (status_pending_p_callback): Return bool, accept + parameter ptid directly. + (linux_wait_for_event_filtered): Use find_thread_in_random. + (linux_wait_1): Likewise. + +2017-12-02 Simon Marchi <simon.marchi@polymtl.ca> + + * inferiors.c (find_inferior_id): Remove. + (find_thread_ptid): Move implemention from find_inferior_id to + here. + * inferiors.h (find_inferior_id): Remove. + * server.c (handle_status): Use find_thread_ptid. + (process_serial_event): Likewise. + * thread-db.c (find_one_thread): Likewise. + (thread_db_thread_handle): Likewise. + * win32-low.c (thread_rec): Likewise. + (child_delete_thread): Likewise. + (win32_thread_alive): Likewise. + (get_child_debug_event): Likewise. + +2017-12-02 Simon Marchi <simon.marchi@polymtl.ca> + + * linux-mips-low.c (update_watch_registers_callback): Return + void, remove pid_p parameter, don't check for pid. + (mips_insert_point, mips_remove_point): Use for_each_thread. + +2017-12-02 Simon Marchi <simon.marchi@polymtl.ca> + + * lynx.low (lynx_delete_thread_callback): Remove. + (lynx_mourn): Use for_each_thread. + +2017-12-02 Simon Marchi <simon.marchi@polymtl.ca> + + * regcache.c (regcache_invalidate_one): Remove. + (regcache_invalidate_pid): use for_each_thread. + +2017-11-26 Tom Tromey <tom@tromey.com> + + * linux-low.c (linux_create_inferior): Update. + +2017-11-24 Ulrich Weigand <uweigand@de.ibm.com> + + * spu-low.c (spu_create_inferior): Fix typo in argument name. + +2017-11-24 Alan Hayward <alan.hayward@arm.com> + + * configure.srv: Add linux-aarch64-tdesc-selftest.o. + * linux-aarch64-low.c (initialize_low_arch): Call init func. + * linux-aarch64-tdesc-selftest.c: New file. + * linux-aarch64-tdesc.h (initialize_low_tdesc): New declaration. + +2017-11-24 Alan Hayward <alan.hayward@arm.com> + + * configure.srv: Add new file. + * linux-aarch64-low.c (initialize_low_arch): Call init func. + * linux-aarch64-tdesc-selftest.c: New file. + * linux-aarch64-tdesc.h (initialize_low_tdesc): New declaration. + +2017-11-24 Alan Hayward <alan.hayward@arm.com> + + * linux-aarch64-ipa.c (initialize_low_tracepoint): Remove init. + * linux-aarch64-low.c (initialize_low_arch): Remove init. + * linux-aarch64-tdesc.c (aarch64_linux_read_description): Add init. + +2017-11-24 Alan Hayward <alan.hayward@arm.com> + + * configure.srv: Add new files. + * linux-aarch64-ipa.c (get_ipa_tdesc): Call + aarch64_linux_read_description. + * linux-aarch64-low.c (aarch64_linux_read_description): + Merge with aarch64_arch_setup. + (aarch64_arch_setup): Call aarch64_linux_read_description. + * linux-aarch64-tdesc.c: New file. + * linux-aarch64-tdesc.h: New file. + +2017-11-24 Yao Qi <yao.qi@linaro.org> + + * configure.srv: Set $srv_regobj for tic6x-linux. + * linux-tic6x-low.c: Include "arch/tic6x.h" and "tdesc.h". + (tic6x_read_description): Move some code to tic6x_arch_setup. + (tic6x_tdesc_test): New function. + (initialize_low_arch): Call selftests::register_test. + +2017-11-22 Yao Qi <yao.qi@linaro.org> + + * remote-utils.c (prepare_resume_reply): Use memcpy. + +2017-11-19 Simon Marchi <simon.marchi@ericsson.com> + + * linux-low.c (kill_one_lwp_callback): Return void, take + argument directly, don't filter on pid. + (linux_kill): Use for_each_thread. + +2017-11-19 Simon Marchi <simon.marchi@ericsson.com> + + * linux-low.c (need_step_over_p): Return bool, remove dummy + argument. + (linux_resume, proceed_all_lwps): Use find_thread. + +2017-11-19 Simon Marchi <simon.marchi@ericsson.com> + + * linux-low.c (resume_status_pending_p): Return bool, remove + flag_p argument. + (linux_resume): Use find_thread. + +2017-11-19 Simon Marchi <simon.marchi@ericsson.com> + + * linux-low.c (struct thread_resume_array): Remove. + (linux_set_resume_request): Return void, take arguments + directly. + (linux_resume): Use for_each_thread. + +2017-11-19 Simon Marchi <simon.marchi@ericsson.com> + + * linux-low.c (stuck_in_jump_pad_callback): Change prototype, + return bool, remove data argument. + (linux_stabilize_threads): Use find_thread. + +2017-11-19 Simon Marchi <simon.marchi@ericsson.com> + + * linux-low.c (unsuspend_one_lwp): Remove. + (unsuspend_all_lwps): Use for_each_thread, inline code from + unsuspend_one_lwp. + +2017-11-19 Simon Marchi <simon.marchi@ericsson.com> + + * gdbthread.h (find_thread): Add overload with ptid_t filter. + * linux-low.c (struct iterate_over_lwps_args): Remove. + (iterate_over_lwps_filter): Remove. + (iterate_over_lwps): Use find_thread. + +2017-11-19 Simon Marchi <simon.marchi@ericsson.com> + + * linux-low.c (reset_lwp_ptrace_options_callback): Remove. + (linux_handle_new_gdb_connection): Use for_each_thread, inline + code from reset_lwp_ptrace_options_callback. + +2017-11-19 Simon Marchi <simon.marchi@ericsson.com> + + * linux-arm-low.c (struct update_registers_data): Remove. + (update_registers_callback): Return void, take arguments + directly, don't check thread's pid. + (arm_insert_point, arm_remove_point): Use for_each_thread. + +2017-11-19 Simon Marchi <simon.marchi@ericsson.com> + + * win32-low.c (continue_one_thread): Return void, take argument + directly. + (child_continue): Use for_each_thread. + +2017-11-19 Simon Marchi <simon.marchi@ericsson.com> + + * win32-i386-low.c (update_debug_registers_callback): Rename + to ... + (update_debug_registers): ... this, return void, remove pid_p arg. + (x86_dr_low_set_addr, x86_dr_low_set_control): Use for_each_thread. + +2017-11-17 Simon Marchi <simon.marchi@polymtl.ca> + + * inferiors.h (struct process_info): Add constructor, initialize + fields.. + <syscalls_to_catch>: Change type to std::vector<int>. + * inferiors.c (add_process): Allocate process_info with new. + (remove_process): Free process_info with delete. + * linux-low.c (handle_extended_wait): Adjust. + (gdb_catching_syscalls_p, gdb_catch_this_syscall_p): Adjust. + * server.c (handle_general_set): Adjust. + +2017-11-16 Pedro Alves <palves@redhat.com> + + * remote-utils.c (remote_close): Block SIGIO signals instead of + uninstalling the SIGIO handler. + +2017-11-16 Alan Hayward <alan.hayward@arm.com> + + * tdesc.c (tdesc_get_features_xml): Allow null osabi. + +2017-11-16 Yao Qi <yao.qi@linaro.org> + + * linux-tic6x-low.c (tic6x_fill_gregset): Cast buf. + (tic6x_store_gregset): Likewise. + (tic6x_usrregs_info): Move it up. + +2017-11-15 Alan Hayward <alan.hayward@arm.com> + + * Makefile.in: Update arch rules. + * configure.srv: Explicitly mark arch/ files. + +2017-11-13 Andreas Schwab <schwab@suse.de> + + * linux-m68k-low.c (m68k_supports_hardware_single_step): New + function. + (struct linux_target_ops) <supports_hardware_single_step>: Initialize. + +2017-11-06 Pedro Alves <palves@redhat.com> + + * config.in, configure: Regenerate. + +2017-10-27 Simon Marchi <simon.marchi@ericsson.com> + + * target.c (struct thread_search): Remove. + (thread_search_callback): Remove. + (prepare_to_access_memory): Use for_each_thread instead of + find_inferior. Inline code from thread_search_callback. + +2017-10-27 Simon Marchi <simon.marchi@ericsson.com> + + * server.c (struct visit_actioned_threads_data): Remove. + (visit_actioned_threads): Change prototype to take arguments + directly. + (resume): Use find_thread instead of find_inferior. + +2017-10-27 Simon Marchi <simon.marchi@ericsson.com> + + * server.c (queue_stop_reply_callback): Change prototype, return + void. + (find_status_pending_thread_callback): Remove. + (handle_status): Replace find_inferior with find_thread and + for_each_thread. + +2017-10-25 Alan Hayward <alan.hayward@arm.com> + + * linux-aarch64-low.c (aarch64_fill_gregset): Replace defines + with REGNO. + (aarch64_store_gregset): Likewise. + (aarch64_fill_fpregset): Likewise. + (aarch64_store_fpregset): Likewise. + +2017-10-21 Simon Marchi <simon.marchi@ericsson.com> + + * gdbthread.h (find_thread, for_each_thread): New functions. + * inferiors.c (thread_of_pid): Remove. + (find_any_thread_of_pid): Use find_thread. + * linux-low.c (num_lwps): Use for_each_thread. + +2017-10-17 Yao Qi <yao.qi@linaro.org> + + * Makefile.in: Remove one rule. + * configure.srv: Rename aarch64-insn.o with arch/aarch64-insn.o. + +2017-10-17 Yao Qi <yao.qi@linaro.org> + + * configure.srv: Rename arm-linux.o with arch/arm-linux.o. + Rename arm-get-next-pcs.o with arch/arm-get-next-pcs.o. + +2017-10-17 Yao Qi <yao.qi@linaro.org> + + * configure.srv: Rename arm.o with arch/arm.o. + +2017-10-17 Yao Qi <yao.qi@linaro.org> + + * Makefile.in (CONFIG_SRC_SUBDIR): New variable. + (clean): Remove .o files in CONFIG_SRC_SUBDIR. + (distclean): Remove DEPDIR in CONFIG_SRC_SUBDIR. + (arch-i386.o, arch-amd64.o): Remove rules. + (arch/%.o): New rule. + Update POSTCOMPILE and COMPILE.pre. + * configure.ac: Invoke AC_CONFIG_COMMANDS. + * configure: Re-generated. + * configure.srv: Replace arch-i386.o with arch/i386.o. + Replace arch-amd64.o with arch/amd64.o. + +2017-10-16 Yao Qi <yao.qi@linaro.org> + + * configure: Regenerated. + +2017-10-14 Simon Marchi <simon.marchi@polymtl.ca> + + * inferiors.h: (struct inferior_list): Remove. + (struct inferior_list_entry); Remove. + (add_inferior_to_list, clear_inferior_list, one_inferior_p, + A_I_NEXT, ALL_INFERIORS_TYPE, ALL_INFERIORS, remove_inferior, + get_first_inferior): Remove. + (for_each_inferior, for_each_inferior_with_data, find_inferior, + find_inferior_id, find_inferior_in_random): Change signature. + * inferiors.c (all_threads): Change type to + std::list<thread_info *>. + (get_thread): Remove macro. + (find_inferior, find_inferior_id): Change signature, implement + using find_thread. + (find_inferior_in_random): Change signature, implement using + find_thread_in_random. + (for_each_inferior, for_each_inferior_with_data): Change + signature, implement using for_each_thread. + (add_inferior_to_list, remove_inferior): Remove. + (add_thread, get_first_thread, thread_of_pid, + find_any_thread_of_pid, free_one_thread, remove_thread): Update. + (get_first_inferior, one_inferior_p, clear_inferior_list): + Remove. + (clear_inferiors, get_thread_process): Update. + * gdbthread.h: Include <list>. + (struct thread_info) <entry>: Remove field. + <id>: New field. + (all_threads): Change type to std::list<thread_info *>. + (get_first_inferior): Add doc. + (find_thread, for_each_thread, find_thread_in_random): New + functions. + (current_ptid, pid_of, ptid_of, lwpid_of): Update. + * linux-arm-low.c (update_registers_callback): Update. + * linux-low.c (second_thread_of_pid_p): Update. + (kill_one_lwp_callback, linux_detach_lwp_callback, + delete_lwp_callback, status_pending_p_callback, same_lwp, + find_lwp_pid, num_lwps, iterate_over_lwps_filter, + iterate_over_lwps, not_stopped_callback, + resume_stopped_resumed_lwps, count_events_callback, + select_singlestep_lwp_callback, select_event_lwp_callback, + unsuspend_one_lwp, linux_wait_1, send_sigstop_callback, + suspend_and_send_sigstop_callback, wait_for_sigstop, + stuck_in_jump_pad_callback, move_out_of_jump_pad_callback, + lwp_running, linux_set_resume_request, resume_status_pending_p, + need_step_over_p, start_step_over, linux_resume_one_thread, + proceed_one_lwp, unsuspend_and_proceed_one_lwp, + reset_lwp_ptrace_options_callback): Update. + * linux-mips-low.c (update_watch_registers_callback): Update. + * regcache.c (regcache_invalidate_one, regcache_invalidate): + Update. + (free_register_cache_thread_one): Remove. + (regcache_release): Update. + * server.c (handle_btrace_enable_bts, handle_btrace_enable_pt, + handle_qxfer_threads_worker): Update. + (handle_query): Update, use list iterator. + (visit_actioned_threads, handle_pending_status, + queue_stop_reply_callback, gdb_wants_all_threads_stopped, + clear_pending_status_callback, set_pending_status_callback, + find_status_pending_thread_callback, handle_status, + process_serial_event): Update. + * target.c (thread_search_callback): Update. + * thread-db.c (thread_db_get_tls_address): Update. + * tracepoint.c (tracepoint_finished_step, tracepoint_was_hit): + Update. + * win32-i386-low.c (update_debug_registers_callback): Update. + * win32-low.c (delete_thread_info, child_delete_thread, + continue_one_thread, suspend_one_thread, + get_child_debug_event): Adjust. + +2017-10-14 Simon Marchi <simon.marchi@polymtl.ca> + + * gdbthread.h (ptid_of, pid_of, lwpid_of): New functions. + * inferiors.h: Include <list>. + (struct process_info) <entry>: Remove field. + <pid>: New field. + (pid_of): Change macro to function. + (ptid_of, lwpid_of): Remove macro. + (all_processes): Change type to std::list<process_info *>. + (ALL_PROCESSES): Remove macro. + (for_each_process, find_process): New function. + * inferiors.c (all_processes): Change type to + std::list<process_info *>. + (find_thread_process): Adjust. + (add_process): Likewise. + (remove_process): Likewise. + (find_process_pid): Likewise. + (get_first_process): Likewise. + (started_inferior_callback): Remove. + (have_started_inferiors_p): Adjust. + (attached_inferior_callback): Remove. + (have_attached_inferiors_p): Adjust. + * linux-low.c (check_zombie_leaders): Likewise. + * linux-x86-low.c (x86_arch_setup_process_callback): Remove. + (x86_linux_update_xmltarget): Adjust. + * server.c (handle_query): Likewise. + (gdb_reattached_process): Remove. + (handle_status): Adjust. + (kill_inferior_callback): Likewise. + (detach_or_kill_inferior): Remove. + (print_started_pid): Likewise. + (print_attached_pid): Likewise. + (detach_or_kill_for_exit): Update. + (process_serial_event): Likewise. + * linux-arm-low.c (arm_new_fork): Likewise. + +2017-10-14 Simon Marchi <simon.marchi@polymtl.ca> + + * dll.h: Include <list>. + (struct dll_info): Add constructor. + <entry>: Remove field. + (all_dlls): Change type to std::list<dll_info>. + * dll.c: Include <algorithm>. + (get_dll): Remove macro. + (all_dlls): Change type to std::list<dll_info *>. + (free_one_dll): Remove. + (match_dll): Likewise. + (loaded_dll): Adjust. + (unloaded_dll): Adjust to all_dlls type change, use + std::find_if. Inline code from match_dll. + (clear_dlls): Adjust to all_dlls type change. + * server.c (emit_dll_description): Remove. + (handle_qxfer_libraries): Adjust to all_dlls type change, + integrate emit_dll_description's functionality. + +2017-10-12 Simon Marchi <simon.marchi@ericsson.com> + + * linux-low.h (struct linux_target_ops) <delete_process>: New + field. + * linux-low.c (linux_mourn): Call the_low_target.delete_process. + * linux-aarch64-low.c (aarch64_linux_delete_process): New. + (struct linux_target_ops): Add delete_process callback. + * linux-arm-low.c (arm_delete_process): New. + (struct linux_target_ops): Add delete_process callback. + * linux-bfin-low.c (struct linux_target_ops): Likewise. + * linux-crisv32-low.c (struct linux_target_ops): Likewise. + * linux-m32r-low.c (struct linux_target_ops): Likewise. + * linux-mips-low.c (mips_linux_delete_process): New. + (struct linux_target_ops): Add delete_process callback. + * linux-ppc-low.c (struct linux_target_ops): Likewise. + * linux-s390-low.c (struct linux_target_ops): Likewise. + * linux-sh-low.c (struct linux_target_ops): Likewise. + * linux-tic6x-low.c (struct linux_target_ops): Likewise. + * linux-tile-low.c (struct linux_target_ops): Likewise. + * linux-x86-low.c (x86_linux_delete_process): New. + (struct linux_target_ops): Add delete_process callback. + * linux-xtensa-low.c (struct linux_target_ops): Likewise. + +2017-10-12 Simon Marchi <simon.marchi@ericsson.com> + + * linux-aarch64-low.c (the_low_target): Add thread delete + callback. + * linux-arm-low.c (arm_delete_thread): New function. + (the_low_target): Add thread delete callback. + * linux-bfin-low.c (the_low_target): Likewise. + * linux-crisv32-low.c (the_low_target): Likewise. + * linux-low.c (delete_lwp): Invoke delete_thread callback if + set. + * linux-low.h (struct linux_target_ops) <delete_thread>: New + field. + * linux-m32r-low.c (the_low_target): Add thread delete callback. + * linux-mips-low.c (mips_linux_delete_thread): New function. + (the_low_target): Add thread delete callback. + * linux-ppc-low.c (the_low_target): Likewise. + * linux-s390-low.c (the_low_target): Likewise. + * linux-sh-low.c (the_low_target): Likewise. + * linux-tic6x-low.c (the_low_target): Likewise. + * linux-tile-low.c (the_low_target): Likewise. + * linux-x86-low.c (the_low_target): Likewise. + * linux-xtensa-low.c (the_low_target): Likewise. + +2017-10-06 Yuanhui Zhang <asmwarrior@gmail.com> + + * win32-low.c: Include "common-inferior.h". + +2017-10-04 Sergio Durigan Junior <sergiodj@redhat.com> + + * inferiors.c (set_inferior_cwd): New function. + * server.c (handle_general_set): Handle QSetWorkingDir packet. + (handle_query): Inform that QSetWorkingDir is supported. + * win32-low.c (create_process): Pass the inferior's cwd to + CreateProcess. + +2017-10-04 Sergio Durigan Junior <sergiodj@redhat.com> + + * inferiors.c (current_inferior_cwd): New global variable. + (get_inferior_cwd): New function. + * inferiors.h (struct process_info) <cwd>: New field. + +2017-10-04 Sergio Durigan Junior <sergiodj@redhat.com> + + * Makefile.in (SFILES): Add $(srcdir)/common/gdb_tilde_expand.c. + (OBS): Add gdb_tilde_expand.o. + +2017-10-02 Simon Marchi <simon.marchi@ericsson.com> + + * lynx-i386-low.c (lynx_i386_arch_setup): Call init_target_desc. + * nto-x86-low.c (nto_x86_arch_setup): Likewise. + +2017-09-29 Pedro Alves <palves@redhat.com> + + * ax.c (gdb_parse_agent_expr): Constify. + * ax.h (gdb_parse_agent_expr): Constify. + * mem-break.c (add_breakpoint_condition, add_breakpoint_commands): + Constify. + * mem-break.h (add_breakpoint_condition, add_breakpoint_commands): Constify. + * remote-utils.c (hex_or_minus_one, read_ptid): Constify. + * remote-utils.h (read_ptid): Constify. + * server.c (handle_qxfer_exec_file, handle_query, handle_v_cont) + (process_point_options, process_serial_event): Constify. + * tracepoint.c (add_tracepoint_action, cmd_qtdp, cmd_qtdpsrc) + (cmd_qtdv, cmd_qtenable_disable, cmd_qtro, cmd_qtframe, cmd_qtp) + (cmd_qtbuffer): Constify. + +2017-09-29 Pedro Alves <palves@redhat.com> + + * proc-service.c (ps_pdread): Return PS_ERR if reading memory + fails. + +2017-09-29 Pedro Alves <palves@redhat.com> + + * linux-low.c (handle_extended_wait): Pass parent thread instead + of process to thread_db_notice_clone. + * linux-low.h (thread_db_notice_clone): Replace parent process + parameter with parent thread parameter. + * thread-db.c (find_one_thread): Add comment. + (thread_db_notice_clone): Replace parent process parameter with + parent thread parameter. Temporarily switch to the parent thread. + +2017-09-26 Sergio Durigan Junior <sergiodj@redhat.com> + + * gdbthread.h: Include "common-gdbthread.h". + * inferiors.c (switch_to_thread): Use "gdb_assert" instead of + "if" when validating the ptid. + * remote-utils.c: Include "gdbthread.h". + (prepare_resume_reply): Use "switch_to_thread". + * target.c (done_accessing_memory): Likewise. + +2017-09-25 Andreas Arnez <arnez@linux.vnet.ibm.com> + + * configure.srv (s390*-*-linux*): Add s390-gs-linux64.o and + s390x-gs-linux64.o to srv_regobj. Add s390-gs-linux64.xml, + s390x-gs-linux64.xml, s390-gs.xml, and s390-gsbc.xml to + srv_xmlfiles. Add s390-gs-linux64-ipa.o and + s390x-gs-linux64-ipa.o to ipa_obj. + * linux-s390-low.c (HWCAP_S390_GS): New define. + (s390_fill_gs, s390_store_gs, s390_fill_gsbc, s390_store_gsbc): + New functions. + (s390_regsets): Add regsets for NT_S390_GS_CB and NT_S390_GS_BC. + (s390_arch_setup): Check for guarded-storage support and choose + appropriate tdesc. + (initialize_low_arch): Invoke init_registers_s390_gs_linux64 and + init_registers_s390x_gs_linux64. + * linux-s390-tdesc.h (enum s390_linux_tdesc) <S390_TDESC_GS>: New + enum value. + (init_registers_s390x_gs_linux64, tdesc_s390x_gs_linux64) + (init_registers_s390_gs_linux64, tdesc_s390_gs_linux64): Declare. + +2017-09-22 Simon Marchi <simon.marchi@ericsson.com> + + * win32-i386-low.c (i386_arch_setup): Call init_target_desc. + +2017-09-21 Kevin Buettner <kevinb@redhat.com> + + * linux-low.h (struct lwp_info): Add new field, thread_handle. + (thread_db_thread_handle): Declare. + * linux-low.c (linux_target_ops): Initialize thread_handle. + * server.c (handle_qxfer_threads_worker): Add support for + "handle" attribute. + * target.h (struct target_ops): Add new function pointer, + thread_handle. + (target_thread_handle): Define. + * thread-db.c (find_one_thread, attach_thread): Set thread_handle + field in lwp. + (thread_db_thread_handle): New function. + +2017-09-21 Kevin Buettner <kevinb@redhat.com> + + * linux-low.c (handle_extended_wait): Call thread_db_notice_clone(). + * linux-low.h (thread_db_notice_clone): Declare. + * thread-db.c (thread_db_notice_clone): New function. + +2017-09-21 Pedro Alves <palves@redhat.com> + + * server.c (gdb_read_memory, handle_status, process_serial_event) + (handle_serial_event, handle_target_event): Adjust to + set_desired_thread prototype change. + * target.c (set_desired_thread): Remove 'use_general' parameter + and adjust. + * target.h (set_desired_thread): Remove 'use_general' parameter. + +2017-09-20 Tom Tromey <tom@tromey.com> + + * target.c (target_terminal::terminal_state): Define. + (target_terminal::init): Rename from target_terminal_init. + (target_terminal::inferior): Rename from + target_terminal_inferior. + (target_terminal::ours): Rename from target_terminal_ours. + (target_terminal::ours_for_output, target_terminal::info): New. + +2017-09-16 Simon Marchi <simon.marchi@ericsson.com> + + * server.c (accumulate_file_name_length): Remove. + (emit_dll_description): Adjust to std::string change. + (handle_qxfer_libraries): Use std::string to hold document. + +2017-09-16 Simon Marchi <simon.marchi@ericsson.com> + + * linux-low.c (linux_qxfer_libraries_svr4): Adjust to change of + return type of xml_escape_text. + * server.c (emit_dll_description): Likewise. + +2017-09-16 Simon Marchi <simon.marchi@ericsson.com> + + * server.c (captured_main): Accept argument for --selftest. + Update run_tests call. + * linux-x86-tdesc-selftest.c (initialize_low_tdesc): Add names + when registering selftests. + +2017-09-16 Sergio Durigan Junior <sergiodj@redhat.com> + + * regcache.c (get_thread_regcache): Update code to use "std::vector" + instead of "VEC" for "target_desc.reg_defs". + (regcache_cpy): Likewise. + (registers_to_string): Likewise. + (registers_from_string): Likewise. + (find_regno): Likewise. + (supply_regblock): Likewise. + (regcache_raw_read_unsigned): Likewise. + * tdesc.c (init_target_desc): Likewise. + (tdesc_create_reg): Likewise. + * tdesc.h: Remove declaration of "tdesc_reg_p". Include <vector>. + (struct target_desc) <reg_defs>: Convert to "std::vector". + (target_desc): Do not initialize "reg_defs". + (~target_desc): Update code to use "std::vector" instead of "VEC" + for "target_desc.reg_defs". + (operator==): Likewise. + +2017-09-15 Simon Marchi <simon.marchi@ericsson.com> + + * inferiors.h (thread_to_gdb_id): Remove. + * inferiors.c (thread_to_gdb_id): Remove. + * server.c (handle_qxfer_threads_worker, handle_query): Adjust. + * lynx-low.c (lynx_resume, lynx_wait_1, lynx_fetch_registers, + lynx_store_registers, lynx_read_memory, lynx_write_memory): + Likewise. + * nto-low.c (nto_fetch_registers, nto_store_registers, + nto_stopped_by_watchpoint, nto_stopped_data_address): Likewise. + +2017-09-15 Simon Marchi <simon.marchi@ericsson.com> + + * inferiors.h (gdb_id_to_thread_id): Remove. + * inferiors.c (gdb_id_to_thread_id): Remove. + * server.c (process_serial_event): Adjust to gdb_id_to_thread_id + removal. Move pid declaration closer to where it's used. + +2017-09-15 Simon Marchi <simon.marchi@ericsson.com> + + * server.c (handle_detach): New function. + (process_serial_event): Move code out, call handle_detach. + +2017-09-15 Simon Marchi <simon.marchi@ericsson.com> + + * server.c (require_running): Rename to ... + (require_running_or_return): ... this ... + (require_running_or_break): ... and this. + (handle_query, process_serial_event): Adjust. + +2017-09-15 Simon Marchi <simon.marchi@ericsson.com> + + * linux-low.c (linux_set_resume_request): Remove unused + variables. + +2017-09-15 Simon Marchi <simon.marchi@ericsson.com> + + * server.c (first_thread_of): Remove. + (process_serial_event): Replace usage of first_thread_of with + find_any_thread_of_pid. + * tracepoint.c (same_process_p): Remove. + (gdb_agent_about_to_close): Replace usage of same_process_p with + find_any_thread_of_pid. + * linux-x86-low.c (same_process_callback): Remove. + (x86_arch_setup_process_callback): Replace usage of + same_process_callback with find_any_thread_of_pid. + * thread-db.c (any_thread_of): Remove. + (switch_to_process): Replace usage of any_thread_of with + find_any_thread_of_pid. + * inferiors.c (thread_pid_matches_callback): Remove. + (find_thread_process): Adjust to use find_any_thread_of_pid. + +2017-09-10 Sergio Durigan Junior <sergiodj@redhat.com> + + * regcache.c (get_thread_regcache): Guard calls to "memset" + with "!VEC_empty". + +2017-09-10 Sergio Durigan Junior <sergiodj@redhat.com> + + * linux-low.c (handle_extended_wait): Use + "allocate_target_description" instead of "XNEW". + * linux-x86-low.c (initialize_low_arch): Likewise. + +2017-09-05 Yao Qi <yao.qi@linaro.org> + + * configure.srv (srv_i386_regobj): Remove. + (srv_amd64_regobj): Remove. + (srv_regobj): Set it to "" for x86 non-linux targets. + * linux-x86-tdesc.c (i386_linux_read_description): + * lynx-i386-low.c: Include x86-xstate.h and arch/i386.h. + (init_registers_i386): Remove the declaration. + (tdesc_i386): Remove the declaration. + (lynx_i386_arch_setup): Call i386_create_target_description. + * nto-x86-low.c: Likewise. + * win32-i386-low.c [__x86_64__]: include arch/amd64.h. + [!__x86_64__]: include arch/i386.h. + (i386_arch_setup) [__x86_64__]: Call amd64_create_target_description. + +2017-09-05 Yao Qi <yao.qi@linaro.org> + + * configure.srv (srv_amd64_linux_xmlfiles): Remove + i386/amd64-XXX-linux from it. + +2017-09-05 Yao Qi <yao.qi@linaro.org> + + * configure.srv: Empty srv_amd64_linux_regobj if $development is + false. + (ipa_amd64_linux_regobj): Remove. + (ipa_x32_linux_regobj): Remove. + +2017-09-05 Yao Qi <yao.qi@linaro.org> + + * Makefile.in (arch-amd64.o): New rule. + * configure.srv: Append arch-amd64.o. + * linux-amd64-ipa.c: Include common/x86-xstate.h. + (get_ipa_tdesc): Call amd64_linux_read_description. + (initialize_low_tracepoint): Don't call init_registers_x32_XXX + and init_registers_amd64_XXX. + * linux-x86-low.c (x86_linux_read_description): Call + amd64_linux_read_description. + (x86_get_ipa_tdesc_idx): Call amd64_get_ipa_tdesc_idx. + (initialize_low_arch): Don't call init_registers_x32_XXX and + init_registers_amd64_XXX. + * linux-x86-tdesc-selftest.c: Declare init_registers_amd64_XXX + and tdesc_amd64_XXX. + [__x86_64__] (amd64_tdesc_test): New function. + (initialize_low_tdesc) [__x86_64__]: Call init_registers_x32_XXX + and init_registers_amd64_XXX. + * linux-x86-tdesc.c: Include arch/amd64.h. + (xcr0_to_tdesc_idx): New function. + (i386_linux_read_description): New function. + (amd64_get_ipa_tdesc_idx): New function. + * linux-x86-tdesc.h (amd64_get_ipa_tdesc_idx): Declare. + (amd64_get_ipa_tdesc): Declare. + +2017-09-05 Yao Qi <yao.qi@linaro.org> + + * configure.srv (srv_i386_linux_xmlfiles): Remove + i386/i386-XXX-linux.xml from it. + +2017-09-05 Yao Qi <yao.qi@linaro.org> + + * configure.srv: Set srv_i386_linux_regobj empty if $development + is false. + * linux-i386-ipa.c (initialize_low_tracepoint): Don't call + initialize_low_tdesc. + * linux-x86-low.c (initialize_low_arch): Wrap initialize_low_tdesc + with #if initialize_low_tdesc. + * linux-x86-tdesc-selftest.c: New file. + * linux-x86-tdesc.c: Move code to linux-x86-tdesc-selftest.c. + +2017-09-05 Yao Qi <yao.qi@linaro.org> + + * Makefile.in (arch-i386.o): New rule. + * configure.srv (i[34567]86-*-linux*): Add arch-i386.o. + (x86_64-*-linux*): Likewise. + * linux-x86-tdesc.c: Don't include ../features/i386/32bit-XXX.c, + include arch/i386.h. + (i386_linux_read_description): Remove code and call + i386_create_target_description. + * tdesc.c (allocate_target_description): New function. + * tdesc.h (set_tdesc_architecture): Remove declaration. + (set_tdesc_osabi): Likewise. + +2017-09-05 Yao Qi <yao.qi@linaro.org> + + * linux-x86-tdesc.c: Don't include <inttypes.h>. + (i386_linux_read_description) [!IN_PROCESS_AGENT]: Call + set_tdesc_architecture and set_tdesc_osabi. Remove code setting + .xmltarget. + * server.c (get_features_xml): Call tdesc_get_features_xml. + * tdesc.c (set_tdesc_architecture): New function. + (set_tdesc_osabi): New function. + (tdesc_get_features_xml): New function. + (tdesc_create_feature): Add an argument. + * tdesc.h (struct target_desc) <features>: New field. + <arch, osabi>: New field. + (~target_desc): xfree features, arch, and osabi. + (target_desc::oerator==): Don't compare .xmltarget. + [!IN_PROCESS_AGENT] (set_tdesc_architecture): Declare. + (set_tdesc_osabi): Likewise. + (tdesc_get_features_xml): Likewise. + +2017-09-05 Yao Qi <yao.qi@linaro.org> + + * linux-x86-tdesc.c: Include selftest.h. + (i386_tdesc_test): New function. + (initialize_low_tdesc): Call selftests::register_test. + * tdesc.h: Include regdef.h. + (target_desc): Override operator == and !=. + +2017-09-05 Yao Qi <yao.qi@linaro.org> + + * configure.srv (srv_tgtobj): Append linux-x86-tdesc.o. + (ipa_obj): Likewise. + * linux-i386-ipa.c: Include common/x86-xstate.h + (get_ipa_tdesc): Call i386_linux_read_description. + (initialize_low_tracepoint): Don't call init_registers_XXX + functions, call initialize_low_tdesc instead. + * linux-x86-low.c (x86_linux_read_description): Call + i386_linux_read_description. + (initialize_low_arch): Don't call init_registers_i386_XXX + functions, call initialize_low_tdesc. + * linux-x86-tdesc.c: New file. + * linux-x86-tdesc.h (x86_linux_tdesc): New X86_TDESC_LAST. + (i386_get_ipa_tdesc_idx): Declare. + (i386_get_ipa_tdesc): Declare. + (initialize_low_tdesc): Declare. + +2017-09-05 Yao Qi <yao.qi@linaro.org> + + * linux-x86-low.c (x86_get_ipa_tdesc_idx): Use X86_TDESC_MMX + instead of 0. + +2017-09-05 Yao Qi <yao.qi@linaro.org> + + * Makefile.in (IPA_OBJS): Add vec-ipa.o + * regcache.c (get_thread_regcache): Use VEC_length. + (init_register_cache): Likewise. + (regcache_cpy): Likewise. + (registers_to_string): Iterate reg_defs via VEC_iterate. + (find_regno): Likewise. + (find_register_by_number): Use VEC_index. + (register_size): Call find_register_by_number. + (register_data): Call find_register_by_number. + (supply_regblock): Use VEC_length. + (regcache_raw_read_unsigned): Likewise. + * tdesc.c (init_target_desc): Iterate reg_defs via + VEC_iterate. + (default_description): Update initializer. + (copy_target_description): Don't update field num_registers. + * tdesc.h (struct target_desc) <reg_defs>: Change it to VEC. + <num_registers>: Remove. + +2017-09-04 Simon Marchi <simon.marchi@ericsson.com> + + * Makefile.in (.SECONDARY): Define target. + +2017-09-03 Simon Marchi <simon.marchi@ericsson.com> + + * linux-low.c (linux_wait_1): Adjust. + * server.c (queue_stop_reply_callback): Adjust. + +2017-08-31 Sergio Durigan Junior <sergiodj@redhat.com> + + * server.c (handle_general_set): Handle QEnvironmentHexEncoded, + QEnvironmentUnset and QEnvironmentReset packets. + (handle_query): Inform remote that QEnvironmentHexEncoded, + QEnvironmentUnset and QEnvironmentReset are supported. + +2017-08-25 Simon Marchi <simon.marchi@ericsson.com> + + * inferiors.h (inferior_target_data): Rename to ... + (thread_target_data): ... this. + (inferior_regcache_data): Rename to ... + (thread_regcache_data): ... this. + (set_inferior_regcache_data): Rename to ... + (set_thread_regcache_data): ... this. + * inferiors.c (inferior_target_data): Rename to ... + (thread_target_data): ... this. + (inferior_regcache_data): Rename to ... + (thread_regcache_data): ... this. + (set_inferior_regcache_data): Rename to ... + (set_thread_regcache_data): ... this. + (free_one_thread): Update. + * linux-low.h (get_thread_lwp): Update. + * regcache.c (get_thread_regcache): Update. + (regcache_invalidate_thread): Update. + (free_register_cache_thread): Update. + * win32-i386-low.c (update_debug_registers_callback): Update. + (win32_get_current_dr): Update. + * win32-low.c (thread_rec): Update. + (delete_thread_info): Update. + (continue_one_thread): Update. + (suspend_one_thread): Update. + +2017-08-24 Simon Marchi <simon.marchi@ericsson.com> + + * inferiors.c (set_inferior_target_data): Remove. + * inferiors.h (set_inferior_target_data): Remove. + +2017-08-18 Yao Qi <yao.qi@linaro.org> + + * Makefile.in (OBS): Add selftest.o. + * configure.ac: AC_DEFINE GDB_SELF_TEST if $development. + * configure, config.in: Re-generated. + * server.c: Include common/sefltest.h. + (captured_main): Handle option --selftest. + +2017-08-09 Yao Qi <yao.qi@linaro.org> + + * configure.srv (srv_i386_regobj): Remove i386-avx.o, + i386-avx-avx512.o, i386-avx-mpx-avx512-pku.o, i386-mpx.o, + i386-avx-mpx.o and i386-mmx.o. + (srv_amd64_regobj): Remove amd64-avx.o, amd64-avx-avx512.o, + amd64-avx-mpx-avx512-pku.o, amd64-mpx.o and amd64-avx-mpx.o. + (srv_i386_xmlfiles): Remove i386/i386-avx.xml, + i386/i386-avx-avx512.xml, i386/i386-avx-mpx-avx512-pku.xml, + i386/i386-mpx.xml, i386/i386-avx-mpx.xml and i386/i386-mmx.xml. + (srv_amd64_xmlfile):i386/amd64-avx.xml, i386/amd64-avx-avx512.xml, + i386/amd64-avx-mpx-avx512-pku.xml, i386/amd64-mpx.xml, + i386/amd64-avx-mpx.xml. + +2017-08-09 Yao Qi <yao.qi@linaro.org> + + * configure.srv (srv_amd64_regobj): Remove x32.o, x32-avx.o + and x32-avx-avx512.o. + (srv_amd64_xmlfiles): Remove i386/x32.xml, i386/x32-avx.xml + i386/x32-avx-avx512.xml. + +2017-07-26 Simon Marchi <simon.marchi@ericsson.com> + + * tracepoint.h (enum class fast_tpoint_collect_result): New + enumeration. + (fast_tracepoint_collecting): Change return type to + fast_tpoint_collect_result. + * tracepoint.c (fast_tracepoint_collecting): Likewise. + * linux-low.h: Include tracepoint.h. + (struct lwp_info) <collecting_fast_tracepoint>: Change type to + fast_tpoint_collect_result. + * linux-low.c (handle_tracepoints): Adjust. + (linux_fast_tracepoint_collecting): Change return type to + fast_tpoint_collect_result. + (maybe_move_out_of_jump_pad, linux_wait_for_event_filtered, + linux_wait_1, stuck_in_jump_pad_callback, + lwp_signal_can_be_delivered, linux_resume_one_lwp_throw, + proceed_one_lwp): Adjust to type change. + +2017-07-10 Yao Qi <yao.qi@linaro.org> + + * linux-x86-low.c (x86_linux_read_description): Re-indent the code. + +2017-06-29 Yao Qi <yao.qi@linaro.org> + + * tdesc.h (struct target_desc) [IN_PROCESS_AGENT] <expedite_regs>: + Remove. + [IN_PROCESS_AGENT] <xmltarget>: Likewise. + +2017-06-20 Simon Marchi <simon.marchi@ericsson.com> + + * Makefile.in (IPA_OBJS): Sort and format one item per line. + +2017-06-20 Sergio Durigan Junior <sergiodj@redhat.com> + + * linux-low.c (linux_create_inferior): Adjust code to access the + environment information via 'gdb_environ' class. + * lynx-low.c (lynx_create_inferior): Likewise. + * server.c (our_environ): Make it an instance of 'gdb_environ'. + (get_environ): Return a pointer to 'our_environ'. + (captured_main): Initialize 'our_environ'. + * server.h (get_environ): Adjust prototype. + * spu-low.c (spu_create_inferior): Adjust code to access the + environment information via 'gdb_environ' class. + +2017-06-17 Simon Marchi <simon.marchi@ericsson.com> + + * linux-low.c (linux_read_memory, linux_write_memory): Remove + usage of "register" keyword. + +2017-06-17 Simon Marchi <simon.marchi@ericsson.com> + + * configure: Re-generate. + +2017-06-17 Simon Marchi <simon.marchi@ericsson.com> + + * configure: Re-generate. + +2017-06-17 Simon Marchi <simon.marchi@ericsson.com> + + * Makefile.in (COMPILE.pre): Add "-x c++". + +2017-06-09 Sergio Durigan Junior <sergiodj@redhat.com> + + * fork-child.c: Conditionally include <signal.h>. + +2017-06-07 Sergio Durigan Junior <sergiodj@redhat.com> + + * server.c (handle_general_set): Handle new packet + "QStartupWithShell". + (handle_query): Add "QStartupWithShell" to the list of supported + packets. + (gdbserver_usage): Add help text explaining the + new "--startup-with-shell" and "--no-startup-with-shell" CLI + options. + (captured_main): Recognize and act upon the presence of the new + CLI options. + +2017-06-07 Sergio Durigan Junior <sergiodj@redhat.com> + Pedro Alves <palves@redhat.com> + + * Makefile.in (SFILES): Add "nat/fork-inferior.o". + * configure: Regenerate. + * configure.srv (srv_linux_obj): Add "fork-child.o" and + "fork-inferior.o". + (i[34567]86-*-lynxos*): Likewise. + (spu*-*-*): Likewise. + * fork-child.c: New file. + * linux-low.c: Include "common-inferior.h", "nat/fork-inferior.h" + and "environ.h". + (linux_ptrace_fun): New function. + (linux_create_inferior): Adjust function prototype to reflect + change on "target.h". Adjust function code to use + "fork_inferior". + (linux_request_interrupt): Delete "signal_pid". + * lynx-low.c: Include "common-inferior.h" and "nat/fork-inferior.h". + (lynx_ptrace_fun): New function. + (lynx_create_inferior): Adjust function prototype to reflect + change on "target.h". Adjust function code to use + "fork_inferior". + * nto-low.c (nto_create_inferior): Adjust function prototype and + code to reflect change on "target.h". Update comments. + * server.c: Include "common-inferior.h", "nat/fork-inferior.h", + "common-terminal.h" and "environ.h". + (terminal_fd): Moved to fork-child.c. + (old_foreground_pgrp): Likewise. + (restore_old_foreground_pgrp): Likewise. + (last_status): Make it global. + (last_ptid): Likewise. + (our_environ): New variable. + (startup_with_shell): Likewise. + (program_name): Likewise. + (program_argv): Rename to... + (program_args): ...this. + (wrapper_argv): New variable. + (start_inferior): Delete function. + (get_exec_wrapper): New function. + (get_exec_file): Likewise. + (get_environ): Likewise. + (prefork_hook): Likewise. + (post_fork_inferior): Likewise. + (postfork_hook): Likewise. + (postfork_child_hook): Likewise. + (handle_v_run): Update code to deal with arguments coming from the + remote host. Update calls from "start_inferior" to + "create_inferior". + (captured_main): Likewise. Initialize environment variable. Call + "have_job_control". + * server.h (post_fork_inferior): New prototype. + (get_environ): Likewise. + (last_status): Declare. + (last_ptid): Likewise. + (signal_pid): Likewise. + * spu-low.c: Include "common-inferior.h" and "nat/fork-inferior.h". + (spu_ptrace_fun): New function. + (spu_create_inferior): Adjust function prototype to reflect change + on "target.h". Adjust function code to use "fork_inferior". + * target.c (target_terminal_init): New function. + (target_terminal_inferior): Likewise. + (target_terminal_ours): Likewise. + * target.h: Include <vector>. + (struct target_ops) <create_inferior>: Update prototype. + (create_inferior): Update macro. + * utils.c (gdb_flush_out_err): New function. + * win32-low.c (win32_create_inferior): Adjust function prototype + and code to reflect change on "target.h". + +2017-06-07 Sergio Durigan Junior <sergiodj@redhat.com> + + * inferiors.c (switch_to_thread): New function. + +2017-06-07 Sergio Durigan Junior <sergiodj@redhat.com> + + * Makefile.in (SFILE): Add "common/job-control.c". + (OBS): Add "job-control.o". + +2017-05-06 Sergio Durigan Junior <sergiodj@redhat.com> + + * Makefile: Remove "@host_makefile_frag@". + +2017-05-05 Pedro Alves <palves@redhat.com> + + * configure: Regenerate. + +2017-05-03 Sergio Durigan Junior <sergiodj@redhat.com> + + * configure: Regenerate. + +2017-05-02 Simon Marchi <simon.marchi@polymtl.ca> + + * linux-arm-low.c (arm_gdbserver_get_next_pcs): Adjust to + software_single_step change of return type to + std::vector<CORE_ADDR>. + * linux-low.c (install_software_single_step_breakpoints): + Likewise. + * linux-low.h (install_software_single_step_breakpoints): + Likewise. + +2017-04-12 Sergio Durigan Junior <sergiodj@redhat.com> + + * remote-utils.c: Include "gdb_termios.h" instead of + "terminal.h". + * terminal.h: Delete file. + +2017-04-12 Sergio Durigan Junior <sergiodj@redhat.com> + + * server.c: Include <vector>. + <program_argv, wrapper_argv>: Convert to std::vector. + (start_inferior): Rewrite function to use C++. + (handle_v_run): Likewise. Update code that calculates the argv + based on the vRun packet; use C++. + (captured_main): Likewise. + +2017-04-06 Simon Marchi <simon.marchi@ericsson.com> + + * server.c (handle_v_cont): Initialize thread_resume::thread + with null_ptid. + +2017-04-05 Pedro Alves <palves@redhat.com> + + * configure: Regenerate. + +2017-04-05 Pedro Alves <palves@redhat.com> + + * gdbreplay.c (sync_error): Constify. + * linux-x86-low.c (push_opcode): Constify. + +2017-04-05 Pedro Alves <palves@redhat.com> + + * win32-low.c (get_child_debug_event) + <CREATE_PROCESS_DEBUG_EVENT>: Don't report TARGET_WAITKIND_EXECD. + Report TARGET_WAITKIND_SPURIOUS instead. + +2017-04-05 Pedro Alves <palves@redhat.com> + + * remote-utils.c (remote_prepare, remote_open): Constify. + * remote-utils.h (remote_prepare, remote_open): Constify. + * server.c (captured_main): Constify 'port' handling. + +2017-04-04 Simon Marchi <simon.marchi@ericsson.com> + + * Makefile.in (clean): Clear .deps. + +2017-03-31 Simon Marchi <simon.marchi@polymtl.ca> + + * .gitignore: Remove generated files, replace with wildcard. + * (clean): Replace removal of generated files with wildcard. + (version.c): Replace with... + (version-generated.c): ...this. + (xml-builtin.c): Replace with... + (xml-builtin-generated.c): ...this. + (%-ipa.o: %-generated.c, %.o: %-generated.c): New rules. + (%.c: *regformats*): Replace with... + (%-generated.c: *regformats*): ...this. + +2017-03-27 Max Filippov <jcmvbkbc@gmail.com> + + * linux-xtensa-low.c (regnum::R_THREADPTR): New enum member. + (xtensa_fill_gregset): Call collect_register_by_name for + threadptr register. + (xtensa_store_gregset): Call supply_register_by_name for + threadptr register. + +2017-03-27 Max Filippov <jcmvbkbc@gmail.com> + + * linux-xtensa-low.c (xtensa_fill_gregset): Call collect_register + for all registers in a0_regnum..a0_regnum + C0_NREGS range. + (xtensa_store_gregset): Call supply_register for all registers in + a0_regnum..a0_regnum + C0_NREGS range. + +2017-03-13 Simon Marchi <simon.marchi@polymtl.ca> + + * Makefile.in (%-ipa.o: %-ipa.c): New rule. + (ax-ipa.o: ax.c): Remove. + (linux-i386-ipa.o: linux-i386-ipa.c): Remove. + (linux-amd64-ipa.o: linux-amd64-ipa.c): Remove. + (linux-aarch64-ipa.o: linux-aarch64-ipa.c): Remove. + (linux-s390-ipa.o: linux-s390-ipa.c): Remove. + (linux-ppc-ipa.o: linux-ppc-ipa.c): Remove. + +2017-03-13 Simon Marchi <simon.marchi@polymtl.ca> + + * Makefile.in (%-ipa.o: ../common/%.c): New rule. + (print-utils-ipa.o: ../common/print-utils.c): Remove. + (rsp-low-ipa.o: ../common/rsp-low.c): Remove. + (errors-ipa.o: ../common/errors.c): Remove. + (format-ipa.o: ../common/format.c): Remove. + (common-utils-ipa.o: ../common/common-utils.c): Remove. + +2017-03-13 Simon Marchi <simon.marchi@polymtl.ca> + + * Makefile.in (%-ipa.o: %.c): New rule. + (tracepoint-ipa.o: tracepoint.c): Remove. + (utils-ipa.o: utils.c): Remove. + (remote-utils-ipa.o: remote-utils.c): Remove. + (regcache-ipa.o: regcache.c): Remove. + (i386-linux-ipa.o: i386-linux.c): Remove. + (i386-mmx-linux-ipa.o: i386-mmx-linux.c): Remove. + (i386-avx-linux-ipa.o: i386-avx-linux.c): Remove. + (i386-mpx-linux-ipa.o: i386-mpx-linux.c): Remove. + (i386-avx-mpx-linux-ipa.o: i386-avx-mpx-linux.c): Remove. + (i386-avx-avx512-linux-ipa.o: i386-avx-avx512-linux.c): Remove. + (i386-avx-mpx-avx512-pku-linux-ipa.o: i386-avx-mpx-avx512-pku-linux.c): Remove. + (amd64-linux-ipa.o: amd64-linux.c): Remove. + (amd64-avx-linux-ipa.o: amd64-avx-linux.c): Remove. + (amd64-mpx-linux-ipa.o: amd64-mpx-linux.c): Remove. + (amd64-avx-mpx-linux-ipa.o: amd64-avx-mpx-linux.c): Remove. + (amd64-avx-avx512-linux-ipa.o: amd64-avx-avx512-linux.c): Remove. + (amd64-avx-mpx-avx512-pku-linux-ipa.o: amd64-avx-mpx-avx512-pku-linux.c): Remove. + (aarch64-ipa.o: aarch64.c): Remove. + (s390-linux32-ipa.o: s390-linux32.c): Remove. + (s390-linux32v1-ipa.o: s390-linux32v1.c): Remove. + (s390-linux32v2-ipa.o: s390-linux32v2.c): Remove. + (s390-linux64-ipa.o: s390-linux64.c): Remove. + (s390-linux64v1-ipa.o: s390-linux64v1.c): Remove. + (s390-linux64v2-ipa.o: s390-linux64v2.c): Remove. + (s390-te-linux64-ipa.o: s390-te-linux64.c): Remove. + (s390-vx-linux64-ipa.o: s390-vx-linux64.c): Remove. + (s390-tevx-linux64-ipa.o: s390-tevx-linux64.c): Remove. + (s390x-linux64-ipa.o: s390x-linux64.c): Remove. + (s390x-linux64v1-ipa.o: s390x-linux64v1.c): Remove. + (s390x-linux64v2-ipa.o: s390x-linux64v2.c): Remove. + (s390x-te-linux64-ipa.o: s390x-te-linux64.c): Remove. + (s390x-vx-linux64-ipa.o: s390x-vx-linux64.c): Remove. + (s390x-tevx-linux64-ipa.o: s390x-tevx-linux64.c): Remove. + (powerpc-32l-ipa.o: powerpc-32l.c): Remove. + (powerpc-altivec32l-ipa.o: powerpc-altivec32l.c): Remove. + (powerpc-cell32l-ipa.o: powerpc-cell32l.c): Remove. + (powerpc-vsx32l-ipa.o: powerpc-vsx32l.c): Remove. + (powerpc-isa205-32l-ipa.o: powerpc-isa205-32l.c): Remove. + (powerpc-isa205-altivec32l-ipa.o: powerpc-isa205-altivec32l.c): Remove. + (powerpc-isa205-vsx32l-ipa.o: powerpc-isa205-vsx32l.c): Remove. + (powerpc-e500l-ipa.o: powerpc-e500l.c): Remove. + (powerpc-64l-ipa.o: powerpc-64l.c): Remove. + (powerpc-altivec64l-ipa.o: powerpc-altivec64l.c): Remove. + (powerpc-cell64l-ipa.o: powerpc-cell64l.c): Remove. + (powerpc-vsx64l-ipa.o: powerpc-vsx64l.c): Remove. + (powerpc-isa205-64l-ipa.o: powerpc-isa205-64l.c): Remove. + (powerpc-isa205-altivec64l-ipa.o: powerpc-isa205-altivec64l.c): Remove. + (powerpc-isa205-vsx64l-ipa.o: powerpc-isa205-vsx64l.c): Remove. + (tdesc-ipa.o: tdesc.c): Remove. + (x32-linux-ipa.o: x32-linux.c): Remove. + (x32-avx-linux-ipa.o: x32-avx-linux.c): Remove. + (x32-avx512-linux-ipa.o: x32-avx512-linux.c): Remove. + +2017-03-13 Simon Marchi <simon.marchi@polymtl.ca> + + * Makefile.in (%.o: ../arch/%.c): New rule. + (arm.o: ../arch/arm.c): Remove. + (arm-linux.o: ../arch/arm-linux.c): Remove. + (arm-get-next-pcs.o: ../arch/arm-get-next-pcs.c): Remove. + (aarch64-insn.o: ../arch/aarch64-insn.c): Remove. + +2017-03-13 Simon Marchi <simon.marchi@polymtl.ca> + + * Makefile.in (%.o: ../nat/%.c): New rule. + (x86-dregs.o: ../nat/x86-dregs.c): Remove. + (amd64-linux-siginfo.o: ../nat/amd64-linux-siginfo.c): Remove. + (linux-btrace.o: ../nat/linux-btrace.c): Remove. + (linux-osdata.o: ../nat/linux-osdata.c): Remove. + (linux-procfs.o: ../nat/linux-procfs.c): Remove. + (linux-ptrace.o: ../nat/linux-ptrace.c): Remove. + (linux-waitpid.o: ../nat/linux-waitpid.c): Remove. + (mips-linux-watch.o: ../nat/mips-linux-watch.c): Remove. + (ppc-linux.o: ../nat/ppc-linux.c): Remove. + (linux-personality.o: ../nat/linux-personality.c): Remove. + (aarch64-linux-hw-point.o: ../nat/aarch64-linux-hw-point.c): Remove. + (aarch64-linux.o: ../nat/aarch64-linux.c): Remove. + (x86-linux.o: ../nat/x86-linux.c): Remove. + (x86-linux-dregs.o: ../nat/x86-linux-dregs.c): Remove. + (linux-namespaces.o: ../nat/linux-namespaces.c): Remove. + +2017-03-13 Simon Marchi <simon.marchi@polymtl.ca> + + * Makefile.in (%.o: ../common/%.c): New rule. + (signals.o: ../common/signals.c): Remove. + (print-utils.o: ../common/print-utils.c): Remove. + (rsp-low.o: ../common/rsp-low.c): Remove. + (common-utils.o: ../common/common-utils.c): Remove. + (posix-strerror.o: ../common/posix-strerror.c): Remove. + (mingw-strerror.o: ../common/mingw-strerror.c): Remove. + (vec.o: ../common/vec.c): Remove. + (gdb_vecs.o: ../common/gdb_vecs.c): Remove. + (xml-utils.o: ../common/xml-utils.c): Remove. + (ptid.o: ../common/ptid.c): Remove. + (buffer.o: ../common/buffer.c): Remove. + (format.o: ../common/format.c): Remove. + (filestuff.o: ../common/filestuff.c): Remove. + (agent.o: ../common/agent.c): Remove. + (errors.o: ../common/errors.c): Remove. + (environ.o: ../common/environ.c): Remove. + (common-debug.o: ../common/common-debug.c): Remove. + (cleanups.o: ../common/cleanups.c): Remove. + (common-exceptions.o: ../common/common-exceptions.c): Remove. + (fileio.o: ../common/fileio.c): Remove. + (common-regcache.o: ../common/common-regcache.c): Remove. + (signals-state-save-restore.o: ../common/signals-state-save-restore.c): Remove. + (new-op.o: ../common/new-op.c): Remove. + (btrace-common.o: ../common/btrace-common.c): Remove. + +2017-03-13 Simon Marchi <simon.marchi@polymtl.ca> + + * Makefile.in (%.o: ../target/%.c): New rule. + (waitstatus.o: ../target/waitstatus.c): Remove. + +2017-03-13 Simon Marchi <simon.marchi@polymtl.ca> + + * Makefile.in + (%.c: ../regformats/%.dat, + (%.c: ../regformats/arm/%.dat, + (%.c: ../regformats/i386/%.dat, + (%.c: ../regformats/rs6000/%.dat): New rules. + (aarch64.c): Remove. + (reg-arm.c): Remove. + (arm-with-iwmmxt.c): Remove. + (arm-with-vfpv2.c): Remove. + (arm-with-vfpv3.c): Remove. + (arm-with-neon.c): Remove. + (reg-bfin.c): Remove. + (reg-cris.c): Remove. + (reg-crisv32.c): Remove. + (i386.c): Remove. + (i386-linux.c): Remove. + (i386-avx.c): Remove. + (i386-avx-linux.c): Remove. + (i386-avx-avx512.c): Remove. + (i386-avx-avx512-linux.c): Remove. + (i386-mpx.c): Remove. + (i386-mpx-linux.c): Remove. + (i386-avx-mpx-avx512-pku.c): Remove. + (i386-avx-mpx-avx512-pku-linux.c): Remove. + (i386-avx-mpx.c): Remove. + (i386-avx-mpx-linux.c): Remove. + (i386-mmx.c): Remove. + (i386-mmx-linux.c): Remove. + (reg-ia64.c): Remove. + (reg-m32r.c): Remove. + (reg-m68k.c): Remove. + (reg-cf.c): Remove. + (mips-linux.c): Remove. + (mips-dsp-linux.c): Remove. + (mips64-linux.c): Remove. + (mips64-dsp-linux.c): Remove. + (nios2-linux.c): Remove. + (powerpc-32.c): Remove. + (powerpc-32l.c): Remove. + (powerpc-altivec32l.c): Remove. + (powerpc-cell32l.c): Remove. + (powerpc-vsx32l.c): Remove. + (powerpc-isa205-32l.c): Remove. + (powerpc-isa205-altivec32l.c): Remove. + (powerpc-isa205-vsx32l.c): Remove. + (powerpc-e500l.c): Remove. + (powerpc-64l.c): Remove. + (powerpc-altivec64l.c): Remove. + (powerpc-cell64l.c): Remove. + (powerpc-vsx64l.c): Remove. + (powerpc-isa205-64l.c): Remove. + (powerpc-isa205-altivec64l.c): Remove. + (powerpc-isa205-vsx64l.c): Remove. + (s390-linux32.c): Remove. + (s390-linux32v1.c): Remove. + (s390-linux32v2.c): Remove. + (s390-linux64.c): Remove. + (s390-linux64v1.c): Remove. + (s390-linux64v2.c): Remove. + (s390-te-linux64.c): Remove. + (s390-vx-linux64.c): Remove. + (s390-tevx-linux64.c): Remove. + (s390x-linux64.c): Remove. + (s390x-linux64v1.c): Remove. + (s390x-linux64v2.c): Remove. + (s390x-te-linux64.c): Remove. + (s390x-vx-linux64.c): Remove. + (s390x-tevx-linux64.c): Remove. + (tic6x-c64xp-linux.c): Remove. + (tic6x-c64x-linux.c): Remove. + (tic6x-c62x-linux.c): Remove. + (reg-sh.c): Remove. + (reg-sparc64.c): Remove. + (reg-spu.c): Remove. + (amd64.c): Remove. + (amd64-linux.c): Remove. + (amd64-avx.c): Remove. + (amd64-avx-linux.c): Remove. + (amd64-avx-avx512.c): Remove. + (amd64-avx-avx512-linux.c): Remove. + (amd64-mpx.c): Remove. + (amd64-mpx-linux.c): Remove. + (amd64-avx-mpx-avx512-pku.c): Remove. + (amd64-avx-mpx-avx512-pku-linux.c): Remove. + (amd64-avx-mpx.c): Remove. + (amd64-avx-mpx-linux.c): Remove. + (x32.c): Remove. + (x32-linux.c): Remove. + (x32-avx.c): Remove. + (x32-avx-linux.c): Remove. + (x32-avx-avx512.c): Remove. + (x32-avx-avx512-linux.c): Remove. + (reg-xtensa.c): Remove. + (reg-tilegx.c): Remove. + (reg-tilegx32.c): Remove. + +2017-03-07 Sergio Durigan Junior <sergiodj@redhat.com> + + * Makefile.in (SFILES): Add "common/environ.c". + (OBJS): Add "common/environ.h". + +2017-01-27 Walfred Tedeschi <walfred.tedeschi@intel.com> + + * configure.ac: Check if the fs_base and gs_base members of + `struct user_regs_struct' exist. + * config.in: Regenerated. + * configure: Likewise. + +2017-01-09 Antoine Tremblay <antoine.tremblay@ericsson.com> + + * linux-aarch32-low.c (arm_breakpoint_kind_from_pc): Use + target_read_memory. + * linux-arm-low.c (get_next_pcs_read_memory_unsigned_integer): Likewise. + (get_next_pcs_syscall_next_pc): Likewise. + +2016-12-23 Luis Machado <lgustavo@codesourcery.com> + + * win32-i386-low.c: Fix incorrect reference to a couple source files. + * nto-x86-low.c: Likewise. + +2016-11-30 Simon Marchi <simon.marchi@polymtl.ca> + + * Makefile.in: Include disable-implicit-rules.mk. + +2016-11-23 Pedro Alves <palves@redhat.com> + + * debug.c: Include <chrono> instead of "gdb_sys_time.h". + (debug_vprintf): Use std::chrono::steady_clock instead of + gettimeofday. Use '.' instead of ':'. + * tracepoint.c: Include <chrono> instead of "gdb_sys_time.h". + (get_timestamp): Use std::chrono::steady_clock instead of + gettimeofday. + +2016-11-22 Simon Marchi <simon.marchi@polymtl.ca> + + * Makefile.in: Fix whitespace formatting. + +2016-11-22 Simon Marchi <simon.marchi@polymtl.ca> + + * Makefile.in (SFILES, OBS): Flatten list and order + alphabetically. + +2016-11-23 Pedro Alves <palves@redhat.com> + + * event-loop.c (handle_file_event): Use warning. + * linux-low.c (linux_resume_one_lwp_throw): Use warning. + * mem-break.c (add_breakpoint_condition, add_breakpoint_commands): + Use warning. + +2016-11-23 Pedro Alves <palves@redhat.com> + + * linux-low.c (check_zombie_leaders): Use debug_printf for debug + output. + * notif.c (handle_notif_ack, notif_event_enque): Likewise. + * remote-utils.c (putpkt_binary_1, readchar, getpkt): Use + debug_printf and debug_flush for debug output. + * server.c (handle_general_set): Likewise. + * thread-db.c (try_thread_db_load): Use debug_printf for debug + output. + +2016-11-17 Simon Marchi <simon.marchi@polymtl.ca> + + * Makefile.in (.c.o): Replace rule with ... + (%.o: %.c): ... this one. + +2016-11-17 Simon Marchi <simon.marchi@polymtl.ca> + + * Makefile.in: Remove @GMAKE_TRUE@ prefixes and removes lines + prefixed with @GMAKE_FALSE@. Update comment related to non-GNU + make. + * configure.ac: Remove checks for the make program. + * configure: Re-generate. + +2016-10-28 Pedro Alves <palves@redhat.com> + + * Makefile.in (CXX_DIALECT): Get from configure. + (COMPILE.pre, CC_LD): Append $(CXX_DIALECT). + * acinclude.m4: Include ../ax_cxx_compile_stdcxx.m4. + * configure.ac: Call AX_CXX_COMPILE_STDCXX. + * config.in: Regenerate. + * configure: Regenerate. + +2016-10-27 Yao Qi <yao.qi@linaro.org> + + * linux-low.c (linux_supports_range_stepping): Return true if + can_software_single_step return true. + +2016-10-27 Yao Qi <yao.qi@linaro.org> + + * inferiors.c (find_inferior_in_random): New function. + * inferiors.h (find_inferior_in_random): Declare. + * linux-low.c (linux_wait_for_event_filtered): Call + find_inferior_in_random instead of find_inferior. + +2016-10-27 Yao Qi <yao.qi@linaro.org> + + * linux-low.c (linux_wait_1): If single-step breakpoints are + inserted, remove them. + +2016-10-26 Pedro Alves <palves@redhat.com> + + * linux-low.c (handle_extended_wait): Link parent/child fork + threads. + (linux_wait_1): Unlink them. + (linux_set_resume_request): Ignore resume requests for + already-resumed and unhandled fork child threads. + * linux-low.h (struct lwp_info) <fork_relative>: New field. + * server.c (in_queued_stop_replies_ptid, in_queued_stop_replies): + New functions. + (handle_v_requests) <vCont>: Don't call require_running. + * server.h (in_queued_stop_replies): New declaration. + +2016-10-24 Yao Qi <yao.qi@linaro.org> + + PR server/20733 + * linux-aarch64-low.c (append_insns): Cast the return value to + 'uint32_t *'. + +2016-10-10 Yao Qi <yao.qi@linaro.org> + + * linux-aarch32-low.c (enum arm_breakpoint_kinds): Remove. + +2016-10-06 Sergio Durigan Junior <sergiodj@redhat.com> + + * target.c (target_supports_multi_process): New function, moved + from... + * target.h (target_supports_multi_process): ... here. Remove + macro. + +2016-10-05 Tom Tromey <tom@tromey.com> + + PR remote/20655: + * tracepoint.c (handle_tracepoint_bkpts): Check + ipa_error_tracepoint, not ipa_stopping_tracepoint. + +2016-10-05 Yao Qi <yao.qi@linaro.org> + + * configure.srv: Update the path of arm-*.xml files. + +2016-10-05 Terry Guo <terry.guo@arm.com> + Yao Qi <yao.qi@linaro.org> + + * Makefile.in: Adjust the path of rules. + * configure.srv: Update the path of xml files. + * regformats/arm-with-iwmmxt.dat: Regenerated. + * regformats/arm-with-neon.dat: Likewise. + * regformats/arm-with-vfpv2.dat: Likewise. + * regformats/arm-with-vfpv3.dat Likewise. + +2016-09-30 Yao Qi <yao.qi@linaro.org> + + PR gdbserver/20627 + * target.c (target_stop_and_wait): Don't call + target_continue_no_signal, use resume_stop instead. + +2016-09-26 Yao Qi <yao.qi@linaro.org> + + * linux-low.c (linux_wait_1): Call debug_exit. + +2016-09-23 Pedro Alves <palves@redhat.com> + + * Makefile.in (SFILES): Add common/new-op.c. + (OBS): Add common/new-op.o. + (new-op.o): New rule. + +2016-09-21 Simon Marchi <simon.marchi@ericsson.com> + + * .gitinore: Ignore more files. + +2016-09-21 Yao Qi <yao.qi@linaro.org> + + * linux-aarch32-low.c (arm_fill_gregset): Keep bits 20 to + 23. + +2016-09-19 Sergio Durigan Junior <sergiodj@redhat.com> + + * server.c (start_inferior): Call target_mourn_inferior instead of + mourn_inferior; pass ptid_t argument to it. + (resume): Likewise. + (handle_target_event): Likewise. + * target.c (target_mourn_inferior): New function. + * target.h (mourn_inferior): Delete macro. + +2016-09-16 Andreas Arnez <arnez@linux.vnet.ibm.com> + + * linux-low.c (lwp_is_stepping): New function. + +2016-09-06 Carl Love <cel@us.ibm.com> + + * server.c (start_inferior): Fixed comment, requested comment change + didn't get updated correctly. Removed reference to ptrace () call as + it is only true on Linux systems. + +2016-09-06 Carl Love <cel@us.ibm.com> + + * server.c (start_inferior): Do not call + function target_post_create_inferior () if the + inferior process has already exited. + +2016-09-05 Pedro Alves <palves@redhat.com> + + * Makefile.in (COMPILER, COMPILER_CFLAGS): Remove. + (COMPILE.pre, CC_LD): Use CXX directly. + (INTERNAL_CFLAGS_BASE): Use CXXFLAGS directly. + * acinclude.m4: Don't include build-with-cxx.m4. + * configure.ac: Remove GDB_AC_BUILD_WITH_CXX call. + * configure: Regenerate. + +2016-09-02 Akash Trehan <akash.trehan123@gmail.com> + + PR gdb/19495 + * remote-utils.c (relocate_instruction): Remove redundant strcpy() + call writing data to own_buf. + +2016-09-01 Sergio Durigan Junior <sergiodj@redhat.com> + + * target.c (mywait): Call target_wait instead of + the_target->wait. + (target_wait): New function. + +2016-09-01 Sergio Durigan Junior <sergiodj@redhat.com> + + * server.c (start_inferior): New variable 'ptid'. Replace calls + to the_target->resume by target_continue{,_no_signal}, depending + on the case. + * target.c (target_stop_and_wait): Call target_continue_no_signal + instead of the_target->resume. + (target_continue): New function. + +2016-08-31 Antoine Tremblay <antoine.tremblay@ericsson.com> + + * linux-low.c (linux_wait_1): Move event switch after unsuspend_lwps. + +2016-08-25 Adhemerval Zanella <adhemerval.zanella@linaro.org> + + PR server/20491 + * gdb_proc_service.h (ps_get_thread_area): Remove const from struct + ps_prochandle. + * linux-aarch64-low.c (ps_get_thread_area): Likewise. + * linux-arm-low.c (ps_get_thread_area): Likewise. + * linux-crisv32-low.c (ps_get_thread_area): Likewise. + * linux-m68k-low.c (ps_get_thread_area): Likewise. + * linux-mips-low.c (ps_get_thread_area): Likewise. + * linux-nios2-low.c (ps_get_thread_area): Likewise. + * linux-tic6x-low.c (ps_get_thread_area): Likewise. + * linux-x86-low.c (ps_get_thread_area): Likewise. + * linux-xtensa-low.c (ps_get_thread_area): Likewise. + +2016-08-19 Pedro Alves <palves@redhat.com> + + * linux-x86-low.c (amd64_emit_call): Emit missing call opcode. + +2016-08-19 Pedro Alves <palves@redhat.com> + + * linux-x86-low.c (amd64_install_fast_tracepoint_jump_pad): Fix + comment. Use memcpy instead of casting through unsigned long. + +2016-08-19 Pedro Alves <palves@redhat.com> + + * linux-amd64-ipa.c (alloc_jump_pad_buffer) [__ILP32__]: Try + allocating around 0x80000000. + +2016-08-19 Pedro Alves <palves@redhat.com> + + PR gdb/20415 + * Makefile.in (x32-linux-ipa.o, x32-avx-linux-ipa.o) + (x32-avx512-linux-ipa.o): New rules. + * configure.ac (x86_64-*-linux*): New x32 check. + * configure.srv (ipa_x32_linux_regobj): New. + (x86_64-*-linux*): Use $ipa_x32_linux_regobj if building for x32. + * linux-amd64-ipa.c (get_ipa_tdesc) [__ILP32__]: Return x32 + descriptions. + (initialize_low_tracepoint) [__ILP32__]: Initialize x32 + descriptions. + * configure: Regenerate. + +2016-08-09 Pedro Alves <palves@redhat.com> + + PR gdb/18653 + * Makefile.in (OBS): Add signals-state-save-restore.o. + (signals-state-save-restore.o): New rule. + * config.in: Regenerate. + * configure: Regenerate. + * linux-low.c: Include "signals-state-save-restore.h". + (linux_create_inferior): Call + restore_original_signals_state. + * server.c: Include "dispositions-save-restore.h". + (captured_main): Call save_original_signals_state. + +2016-08-05 Pedro Alves <palves@redhat.com> + + * configure: Regenerate. + +2016-08-04 Yao Qi <yao.qi@linaro.org> + + * linux-low.c (regsets_fetch_inferior_registers): Check + errno is ESRCH or not. + +2016-08-02 Yao Qi <yao.qi@linaro.org> + + * thread-db.c (struct thread_db) <td_ta_event_getmsg_p>: Remove. + <td_ta_set_event_p, td_ta_event_addr_p>: Remove. + (thread_db_load_search): Update. + (try_thread_db_load_1): Don't look for td_ta_event_addr, + td_ta_set_event and td_ta_event_getmsg. + +2016-07-26 Pedro Alves <palves@redhat.com> + + PR server/20414 + * linux-x86-low.c (x86_get_pc, x86_set_pc): Use uint64_t instead + of unsigned long for 64-bit registers and use uint32_t instead of + unsigned int for 32-bit registers. + +2016-07-26 Pedro Alves <palves@redhat.com> + + * linux-x86-low.c (x86_siginfo_fixup): Rename 'native' parameter + to 'ptrace'. + +2016-07-21 Tom Tromey <tom@tromey.com> + + * configure: Rebuild. + +2016-07-21 Yao Qi <yao.qi@linaro.org> + + * mem-break.c (find_gdb_breakpoint): Cast bp to + 'struct gdb_breakpoint *' rather than 'gdb_breakpoint *'. + +2016-07-21 Yao Qi <yao.qi@linaro.org> + + * server.c (handle_v_requests): Support s and S actions + if target_supports_software_single_step return true. + +2016-07-21 Yao Qi <yao.qi@linaro.org> + + * linux-low.c (resume_stopped_resumed_lwps): If resume request + is resume_step, call maybe_hw_step. + (linux_wait_1): Stop all threads, remove reinsert breakpoints, + and unstop them. + (linux_resume_one_lwp_throw): Don't assert the thread has reinsert + breakpoints or not. + (proceed_one_lwp): If resume request is resume_step, install + reinsert breakpoints and call maybe_hw_step. + +2016-07-21 Yao Qi <yao.qi@linaro.org> + + * linux-low.c (proceed_one_lwp): Declare. + (linux_resume_one_thread): Remove local variable 'step'. + Lift code enqueue signal. Call proceed_one_lwp instead of + linux_resume_one_lwp. + +2016-07-21 Yao Qi <yao.qi@linaro.org> + + * linux-low.c (linux_resume_one_thread): Call + enqueue_pending_signal. + +2016-07-21 Yao Qi <yao.qi@linaro.org> + + * gdbthread.h (make_cleanup_restore_current_thread): Declare. + * inferiors.c (do_restore_current_thread_cleanup): New function. + (make_cleanup_restore_current_thread): Likewise. + * linux-low.c (install_software_single_step_breakpoints): Call + make_cleanup_restore_current_thread. Switch current_thread to + thread. + +2016-07-21 Yao Qi <yao.qi@linaro.org> + + * mem-break.c (struct reinsert_breakpoint) <ptid>: New field. + (set_reinsert_breakpoint): New parameter ptid. Callers updated. + (clone_one_breakpoint): Likewise. + (delete_reinsert_breakpoints): Change parameter to thread. + Callers updated. + (has_reinsert_breakpoints): Likewise. + (uninsert_reinsert_breakpoints): Likewise. + (reinsert_reinsert_breakpoints): Likewise. + * mem-break.h (set_reinsert_breakpoint): Update declaration. + (delete_reinsert_breakpoints): Likewise. + (reinsert_reinsert_breakpoints): Likewise. + (uninsert_reinsert_breakpoints): Likewise. + (has_reinsert_breakpoints): Likewise. + +2016-07-21 Yao Qi <yao.qi@linaro.org> + + * inferiors.c (get_thread_process): Make parameter const. + * inferiors.h (get_thread_process): Update declaration. + * mem-break.c (clone_all_breakpoints): Remove all parameters. + Add new parameters child_thread and parent_thread. Callers + updated. + * mem-break.h (clone_all_breakpoints): Update declaration. + +2016-07-21 Yao Qi <yao.qi@linaro.org> + + * mem-break.c (struct breakpoint) <cond_list>: Remove. + <command_list, handler>: Remove. + (struct gdb_breakpoint): New. + (struct other_breakpoint): New. + (struct reinsert_breakpoint): New. + (is_gdb_breakpoint): New function. + (any_persistent_commands): Update command_list if + is_gdb_breakpoint returns true. + (set_breakpoint): Create breakpoints according to their types. + (find_gdb_breakpoint): Return 'struct gdb_breakpoint *'. + (set_gdb_breakpoint_1): Likewise. + (set_gdb_breakpoint): Likewise. + (clear_breakpoint_conditions): Change parameter type to + 'struct gdb_breakpoint *'. + (clear_breakpoint_commands): Likewise. + (clear_breakpoint_conditions_and_commands): Likewise. + (add_condition_to_breakpoint): Likewise. + (add_breakpoint_condition): Likewise. + (add_commands_to_breakpoint): Likewise. + (check_breakpoints): Check other_breakpoint. + (clone_one_breakpoint): Clone breakpopint according to its type. + * mem-break.h (struct gdb_breakpoint): Declare. + (set_gdb_breakpoint): Update declaration. + (clear_breakpoint_conditions_and_commands): Likewise. + (add_breakpoint_condition): Likewise. + (add_breakpoint_commands): Likewise. + * server.c (process_point_options): Change parameter type to + 'struct gdb_breakpoint *'. + +2016-07-21 Yao Qi <yao.qi@linaro.org> + + * mem-break.c (set_breakpoint_at): Rename it to ... + (set_breakpoint_type_at): ... it. + (set_breakpoint_at): Call set_breakpoint_type_at. + (set_reinsert_breakpoint): Call set_breakpoint_type_at. + * mem-break.h (set_breakpoint_at): Update comments. + +2016-07-12 Chung-Lin Tang <cltang@codesourcery.com> + + * linux-nios2-low.c (nios2_fill_gregset): Add type cast + to buf parameter. + (nios2_store_gregset): Likewise. + +2016-07-01 Pedro Alves <palves@redhat.com> + Antoine Tremblay <antoine.tremblay@ericsson.com> + + * linux-low.c: Change interface to take the target lwp_info + pointer directly and return void. Handle detaching from a zombie + thread. + (linux_detach_lwp_callback): New function. + (linux_detach): Detach from the leader thread after detaching from + the clone threads. + +2016-06-28 Yao Qi <yao.qi@linaro.org> + + * linux-aarch64-low.c (aarch64_ftrace_insn_reloc_b): Use int64_t + for variable new_offset. + (aarch64_ftrace_insn_reloc_b_cond): Likewise. + (aarch64_ftrace_insn_reloc_cb): Likewise. + (aarch64_ftrace_insn_reloc_tb): Likewise. + (aarch64_install_fast_tracepoint_jump_pad): Likewise. Use + PRIx64 instead of PRIx32. + +2016-06-28 Yao Qi <yao.qi@linaro.org> + + * linux-arm-low.c (arm_get_syscall_trapinfo): New function. + (the_low_target): Install arm_get_syscall_trapinfo. + +2016-06-28 Yao Qi <yao.qi@linaro.org> + + * linux-aarch64-low.c (aarch64_get_syscall_trapinfo): New + function. + (the_low_target): Install aarch64_get_syscall_trapinfo. + +2016-06-28 Yao Qi <yao.qi@linaro.org> + + * linux-low.c (get_syscall_trapinfo): Remove parameter sysret. + Callers updated. + * linux-low.h (struct linux_target_ops) <get_syscall_trapinfo>: + Remove parameter sysno. + * linux-x86-low.c (x86_get_syscall_trapinfo): Remove parameter + sysret. + +2016-06-21 Andreas Arnez <arnez@linux.vnet.ibm.com> + + * linux-s390-low.c (s390_emit_eq_goto): Mark function static. + (s390_emit_ne_goto): Likewise. + (s390_emit_lt_goto): Likewise. + (s390_emit_le_goto): Likewise. + (s390_emit_gt_goto): Likewise. + (s390_emit_ge_goto): Likewise. + (s390x_emit_eq_goto): Likewise. + (s390x_emit_ne_goto): Likewise. + (s390x_emit_lt_goto): Likewise. + (s390x_emit_le_goto): Likewise. + (s390x_emit_gt_goto): Likewise. + (s390x_emit_ge_goto): Likewise. + (s390_emit_ops_impl): Mark variable static. + (s390x_emit_ops): Likewise. + +2016-06-17 Yao Qi <yao.qi@linaro.org> + + * linux-low.c (handle_extended_wait): Call + uninsert_reinsert_breakpoints for the parent process. Remove + reinsert breakpoints from the child process. Reinsert them to + the parent process when vfork is done. + * mem-break.c (uninsert_reinsert_breakpoints): New function. + (reinsert_reinsert_breakpoints): New function. + * mem-break.h (uninsert_reinsert_breakpoints): Declare + (reinsert_reinsert_breakpoints): Declare. + +2016-06-17 Yao Qi <yao.qi@linaro.org> + + * linux-low.c (handle_extended_wait): If the parent is doing + step-over, remove the reinsert breakpoints from the forked child. + +2016-06-17 Yao Qi <yao.qi@linaro.org> + + * linux-low.c (unsuspend_all_lwps): Declare. + (linux_low_filter_event): If thread exited, call finish_step_over. + If step-over is finished, unsuspend other threads. + +2016-06-17 Yao Qi <yao.qi@linaro.org> + + * linux-low.c (linux_resume_one_lwp_throw): Assert + has_reinsert_breakpoints returns false. + * mem-break.c (delete_disabled_breakpoints): Assert + bp type isn't reinsert_breakpoint. + +2016-06-17 Yao Qi <yao.qi@linaro.org> + + * linux-low.c (maybe_hw_step): New function. + (linux_resume_one_lwp_throw): Call maybe_hw_step. + (finish_step_over): Switch current_thread to lwp temporarily, + and assert has_reinsert_breakpoints returns true. + (proceed_one_lwp): Call maybe_hw_step. + * mem-break.c (has_reinsert_breakpoints): New function. + * mem-break.h (has_reinsert_breakpoints): Declare. + +2016-06-02 Jon Turney <jon.turney@dronecode.org.uk> + + * win32-low.c (win32_create_inferior): Add pointer casts for C++. + +2016-05-17 Yao Qi <yao.qi@linaro.org> + + * linux-low.c (linux_stabilize_threads): Call unsuspend_all_lwps + instead of find_inferior. + +2016-05-05 Yao Qi <yao.qi@linaro.org> + + * linux-arm-low.c (get_next_pcs_read_memory_unsigned_integer): + Initialize res to zero. + +2016-05-05 Yao Qi <yao.qi@linaro.org> + + * linux-arm-low.c (arm_sigreturn_next_pc): Change type of cpsr + to uint32_t. + +2016-05-04 Ulrich Weigand <Ulrich.Weigand@de.ibm.com> + + * spu-low.c (fetch_ppc_register): Cast PowerPC-Linux-specific value + used as first ptrace argument to PTRACE_TYPE_ARG1 for C++. + (fetch_ppc_memory_1, store_ppc_memory_1): Likewise. + +2016-04-28 Par Olsson <par.olsson@windriver.com> + Simon Marchi <simon.marchi@ericsson.com> + + * tracepoint.c (write_inferior_int8): New function. + (cmd_qtenable_disable): Write enable flag using + write_inferior_int8. + +2016-04-25 Yao Qi <yao.qi@linaro.org> + + * linux-low.c (lwp_signal_can_be_delivered): Adjust. + (need_step_over_p): Return zero if the LWP has pending signals + can be delivered on software single step target. + +2016-04-25 Yao Qi <yao.qi@linaro.org> + + * linux-low.c (reinsert_raw_breakpoint): If bp->inserted is true + return instead of error. + +2016-04-22 Yao Qi <yao.qi@linaro.org> + + * linux-aarch32-low.c (arm_store_gregset): Clear CPSR bits 20 + to 23. + +2016-04-22 Yao Qi <yao.qi@linaro.org> + + * linux-low.c (lwp_signal_can_be_delivered): Don't deliver + signal when stepping over breakpoint with software single + step. + +2016-04-21 Pedro Alves <palves@redhat.com> + + * linux-s390-low.c (s390_collect_ptrace_register) + (s390_supply_ptrace_register, s390_get_hwcap): Use gdb_byte * and + add casts. + (s390_check_regset): Use void * instead of gdb_byte *. + +2016-04-20 Pedro Alves <palves@redhat.com> + + * configure: Renegerate. + +2016-04-20 Yao Qi <yao.qi@linaro.org> + + * linux-aarch32-low.c: Include "arch/arm-linux.h". + (arm_fill_gregset): Use ARM_CPSR_GREGNUM rather than magic + number 16. + (arm_store_gregset): Likewise. + +2016-04-16 Walfred Tedeschi <walfred.tedeschi@intel.com> + + * Makefile.in (clean): Add removal for i386-avx-mpx.c, + i386-avx-mpx-linux.c, amd64-avx-mpx.c and amd64-avx-mpx-linux.c. + (i386-avx-mpx.c, i386-avx-mpx-linux.c, amd64-avx-mpx.c) + (amd64-avx-mpx-linux.c): New rules. + (amd64-avx-mpx-linux-ipa.o, i386-avx-mpx-linux-ipa.o): New rule. + * configure.srv (srv_i386_regobj): Add i386-avx-mpx.o. + (srv_i386_linux_regobj): Add i386-avx-mpx-linux.o. + (srv_amd64_regobj): Add amd64-avx-mpx.o. + (srv_amd64_linux_regobj): Add amd64-avx-mpx-linux.o. + (srv_i386_xmlfiles): Add i386/i386-avx-mpx.xml. + (srv_amd64_xmlfiles): Add i386/amd64-avx-mpx.xml. + (srv_i386_linux_xmlfiles): Add i386/i386-avx-mpx-linux.xml. + (srv_amd64_linux_xmlfiles): Add i386/amd64-avx-mpx-linux.xml. + (ipa_i386_linux_regobj): Add i386-avx-mpx-linux-ipa.o. + (ipa_amd64_linux_regobj): Add amd64-avx-mpx-linux-ipa.o. + * linux-x86-low.c (x86_linux_read_description): Add case for + X86_XSTATE_AVX_MPX_MASK. + (x86_get_ipa_tdesc_idx): Add cases for avx_mpx. + (initialize_low_arch): Call init_registers_amd64_avx_mpx_linux and + init_registers_i386_avx_mpx_linux. + * linux-i386-ipa.c (get_ipa_tdesc): Add case for avx_mpx. + (initialize_low_tracepoint): Call + init_registers_i386_avx_mpx_linux. + * linux-amd64-ipa.c (get_ipa_tdesc): Add case for avx_mpx. + (initialize_low_tracepoint): Call + init_registers_amd64_avx_mpx_linux. + * linux-x86-tdesc.h (X86_TDESC_AVX_MPX): New enum value. + (init_registers_amd64_avx_mpx_linux, tdesc_amd64_avx_mpx_linux) + (init_registers_i386_avx_mpx_linux, tdesc_i386_avx_mpx_linux): New + declarations. + +2016-04-18 Pedro Alves <palves@redhat.com> + + * configure: Regenerate. + +2016-04-13 Antoine Tremblay <antoine.tremblay@ericsson.com> + + * linux-aarch64-low.c (aarch64_emit_add): Switch x1 and x0. + (aarch64_emit_sub): Likewise. + +2016-04-12 Pedro Alves <palves@redhat.com> + + * utils.c (prepare_to_throw_exception): Delete. + +2016-04-05 Simon Marchi <simon.marchi@ericsson.com> + + * Makefile.in ($(IPA_LIB)): Set SONAME of the IPA lib. + +2016-04-05 Marcin KoÅ›cielnicki <koriakin@0x04.net> + + * tracepoint.c (getauxval): Move to #ifdef IN_PROCESS_AGENT. + +2016-04-03 Marcin KoÅ›cielnicki <koriakin@0x04.net> + + * linux-aarch64-ipa.c: Add <elf.h> include. + * linux-ppc-ipa.c: Add <elf.h> include. + * linux-s390-ipa.c: Add <elf.h> include. + +2016-03-31 Marcin KoÅ›cielnicki <koriakin@0x04.net> + + * tracepoint.c (gdb_collect_ptr): Remove const qualifier. + (get_raw_reg_ptr): Likewise. + (get_trace_state_variable_value_ptr): Likewise. + (set_trace_state_variable_value_ptr): Likewise. + (initialize_tracepoint): Cast alloc_jump_pad_buffer result to + char *. + +2016-03-31 Wei-cheng Wang <cole945@gmail.com> + Marcin KoÅ›cielnicki <koriakin@0x04.net> + + PR/17221 + * linux-ppc-low.c (emit_insns): New function. + (__EMIT_ASM, _EMIT_ASM, EMIT_ASM): New macros. + (ppc_emit_prologue): New function. + (ppc_emit_epilogue): New function. + (ppc_emit_add): New function. + (ppc_emit_sub): New function. + (ppc_emit_mul): New function. + (ppc_emit_lsh): New function. + (ppc_emit_rsh_signed): New function. + (ppc_emit_rsh_unsigned): New function. + (ppc_emit_ext): New function. + (ppc_emit_zero_ext): New function. + (ppc_emit_log_not): New function. + (ppc_emit_bit_and): New function. + (ppc_emit_bit_or): New function. + (ppc_emit_bit_xor): New function. + (ppc_emit_bit_not): New function. + (ppc_emit_equal): New function. + (ppc_emit_less_signed): New function. + (ppc_emit_less_unsigned): New function. + (ppc_emit_ref): New function. + (ppc_emit_const): New function. + (ppc_emit_reg): New function. + (ppc_emit_pop): New function. + (ppc_emit_stack_flush): New function. + (ppc_emit_swap): New function. + (ppc_emit_stack_adjust): New function. + (ppc_emit_call): New function. + (ppc_emit_int_call_1): New function. + (ppc_emit_void_call_2): New function. + (ppc_emit_if_goto): New function. + (ppc_emit_goto): New function. + (ppc_emit_eq_goto): New function. + (ppc_emit_ne_goto): New function. + (ppc_emit_lt_goto): New function. + (ppc_emit_le_goto): New function. + (ppc_emit_gt_goto): New function. + (ppc_emit_ge_goto): New function. + (ppc_write_goto_address): New function. + (ppc_emit_ops_impl): New static variable. + (ppc64v1_emit_prologue): New function. + (ppc64v2_emit_prologue): New function. + (ppc64_emit_epilogue): New function. + (ppc64_emit_add): New function. + (ppc64_emit_sub): New function. + (ppc64_emit_mul): New function. + (ppc64_emit_lsh): New function. + (ppc64_emit_rsh_signed): New function. + (ppc64_emit_rsh_unsigned): New function. + (ppc64_emit_ext): New function. + (ppc64_emit_zero_ext): New function. + (ppc64_emit_log_not): New function. + (ppc64_emit_bit_and): New function. + (ppc64_emit_bit_or): New function. + (ppc64_emit_bit_xor): New function. + (ppc64_emit_bit_not): New function. + (ppc64_emit_equal): New function. + (ppc64_emit_less_signed): New function. + (ppc64_emit_less_unsigned): New function. + (ppc64_emit_ref): New function. + (ppc64_emit_const): New function. + (ppc64v1_emit_reg): New function. + (ppc64v2_emit_reg): New function. + (ppc64_emit_pop): New function. + (ppc64_emit_stack_flush): New function. + (ppc64_emit_swap): New function. + (ppc64v1_emit_call): New function. + (ppc64v2_emit_call): New function. + (ppc64v1_emit_int_call_1): New function. + (ppc64v2_emit_int_call_1): New function. + (ppc64v1_emit_void_call_2): New function. + (ppc64v2_emit_void_call_2): New function. + (ppc64_emit_if_goto): New function. + (ppc64_emit_eq_goto): New function. + (ppc64_emit_ne_goto): New function. + (ppc64_emit_lt_goto): New function. + (ppc64_emit_le_goto): New function. + (ppc64_emit_gt_goto): New function. + (ppc64_emit_ge_goto): New function. + (ppc64v1_emit_ops_impl): New static variable. + (ppc64v2_emit_ops_impl): New static variable. + (ppc_emit_ops): New function. + (linux_low_target): Wire in ppc_emit_ops. + +2016-03-31 Wei-cheng Wang <cole945@gmail.com> + Marcin KoÅ›cielnicki <koriakin@0x04.net> + + PR/17221 + * Makefile.in: Add powerpc-*-ipa.o + * configure.srv: Add ipa_obj for powerpc*-linux. + * linux-ppc-ipa.c: New file. + * linux-ppc-low.c: Added linux-ppc-tdesc.h, ax.h, tracepoint.h + includes. + (PPC_FIELD): New macro. + (PPC_SEXT): New macro. + (PPC_OP6): New macro. + (PPC_BO): New macro. + (PPC_LI): New macro. + (PPC_BD): New macro. + (init_registers_*): Move prototype to linux-ppc-tdesc.h. + (tdesc_*): Move declaration to linux-ppc-tdesc.h. + (ppc_get_hwcap): Rename to ppc_get_auxv and add type parameter. + (ppc_get_thread_area): New function. + (is_elfv2_inferior): New function. + (gen_ds_form): New function. + (GEN_STD): New macro. + (GEN_STDU): New macro. + (GEN_LD): New macro. + (GEN_LDU): New macro. + (gen_d_form): New function. + (GEN_ADDI): New macro. + (GEN_ADDIS): New macro. + (GEN_LI): New macro. + (GEN_LIS): New macro. + (GEN_ORI): New macro. + (GEN_ORIS): New macro. + (GEN_LWZ): New macro. + (GEN_STW): New macro. + (GEN_STWU): New macro. + (gen_xfx_form): New function. + (GEN_MFSPR): New macro. + (GEN_MTSPR): New macro. + (GEN_MFCR): New macro. + (GEN_MTCR): New macro. + (GEN_SYNC): New macro. + (GEN_LWSYNC): New macro. + (gen_x_form): New function. + (GEN_OR): New macro. + (GEN_MR): New macro. + (GEN_LWARX): New macro. + (GEN_STWCX): New macro. + (GEN_CMPW): New macro. + (gen_md_form): New function. + (GEN_RLDICL): New macro. + (GEN_RLDICR): New macro. + (gen_i_form): New function. + (GEN_B): New macro. + (GEN_BL): New macro. + (gen_b_form): New function. + (GEN_BNE): New macro. + (GEN_LOAD): New macro. + (GEN_STORE): New macro. + (gen_limm): New function. + (gen_atomic_xchg): New function. + (gen_call): New function. + (ppc_relocate_instruction): New function. + (ppc_install_fast_tracepoint_jump_pad): New function. + (ppc_get_min_fast_tracepoint_insn_len): New function. + (ppc_get_ipa_tdesc_idx): New function. + (the_low_target): Wire in the new functions. + (initialize_low_arch) [!__powerpc64__]: Don'it initialize 64-bit + tdescs. + * linux-ppc-tdesc.h: New file. + +2016-03-31 Marcin KoÅ›cielnicki <koriakin@0x04.net> + + * linux-aarch64-ipa.c: Add <sys/mman.h> and <sys/auxv.h> includes. + (alloc_jump_pad_buffer): New function. + * linux-amd64-ipa.c: Add <sys/mman.h> include. + (alloc_jump_pad_buffer): New function. + * linux-i386-ipa.c (alloc_jump_pad_buffer): New function. + * linux-s390-ipa.c: Add <sys/mman.h> and <sys/auxv.h> includes. + (alloc_jump_pad_buffer): New function. + * tracepoint.c (getauxval) [!HAVE_GETAUXVAL]: New function. + (initialize_tracepoint): Delegate to alloc_jump_pad_buffer. + * tracepoint.h (alloc_jump_pad_buffer): New prototype. + (getauxval) [!HAVE_GETAUXVAL]: New prototype. + +2016-03-30 Marcin KoÅ›cielnicki <koriakin@0x04.net> + + * linux-aarch64-ipa.c: Rename gdb_agent_get_raw_reg to get_raw_reg. + * linux-amd64-ipa.c: Likewise. + * linux-i386-ipa.c: Likewise. + * linux-s390-ipa.c: Likewise. + * tracepoint.c: IPA-export gdb_collect_ptr instead of gdb_collect, + ditto for get_raw_reg_ptr, get_trace_state_variable_value_ptr, + set_trace_state_variable_value_ptr. + (struct ipa_sym_addresses): Likewise. + (symbol_list): Likewise. + (install_fast_tracepoint): Dereference gdb_collect_ptr instead of + accessing gdb_collect directly. + (gdb_collect_ptr_type): New typedef. + (get_raw_reg_ptr_type): New typedef. + (get_trace_state_variable_value_ptr_type): New typedef. + (set_trace_state_variable_value_ptr_type): New typedef. + (gdb_collect_ptr): New global. + (get_raw_reg_ptr): New global. + (get_trace_state_variable_value_ptr): New global. + (set_trace_state_variable_value_ptr): New global. + (get_raw_reg_func_addr): Dereference get_raw_reg_ptr instead of + accessing get_raw_reg directly. + (get_get_tsv_func_addr): Likewise for + get_trace_state_variable_value_ptr. + (get_set_tsv_func_addr): Likewise for + set_trace_state_variable_value_ptr. + * tracepoint.h: Rename gdb_agent_get_raw_reg to get_raw_reg. + +2016-03-30 Simon Marchi <simon.marchi@ericsson.com> + + * tracepoint.c (cmd_qtenable_disable): Remove whitespace. + +2016-03-30 Marcin KoÅ›cielnicki <koriakin@0x04.net> + + * remote-utils.c (look_up_one_symbol): Remove own_buf, handle 'v' + packets. + (relocate_instruction): Remove own_buf. + * server.c (own_buf): Make global. + (handle_v_requests): Make global. + * server.h (own_buf): New declaration. + (handle_v_requests): New prototype. + +2016-03-29 Marcin KoÅ›cielnicki <koriakin@0x04.net> + + PR 18377 + * linux-s390-low.c (add_insns): New function. + (s390_emit_prologue): New function. + (s390_emit_epilogue): New function. + (s390_emit_add): New function. + (s390_emit_sub): New function. + (s390_emit_mul): New function. + (s390_emit_lsh): New function. + (s390_emit_rsh_signed): New function. + (s390_emit_rsh_unsigned): New function. + (s390_emit_ext): New function. + (s390_emit_log_not): New function. + (s390_emit_bit_and): New function. + (s390_emit_bit_or): New function. + (s390_emit_bit_xor): New function. + (s390_emit_bit_not): New function. + (s390_emit_equal): New function. + (s390_emit_less_signed): New function. + (s390_emit_less_unsigned): New function. + (s390_emit_ref): New function. + (s390_emit_if_goto): New function. + (s390_emit_goto): New function. + (s390_write_goto_address): New function. + (s390_emit_litpool): New function. + (s390_emit_const): New function. + (s390_emit_call): New function. + (s390_emit_reg): New function. + (s390_emit_pop): New function. + (s390_emit_stack_flush): New function. + (s390_emit_zero_ext): New function. + (s390_emit_swap): New function. + (s390_emit_stack_adjust): New function. + (s390_emit_set_r2): New function. + (s390_emit_int_call_1): New function. + (s390_emit_void_call_2): New function. + (s390_emit_eq_goto): New function. + (s390_emit_ne_goto): New function. + (s390_emit_lt_goto): New function. + (s390_emit_le_goto): New function. + (s390_emit_gt_goto): New function. + (s390_emit_ge_goto): New function. + (s390x_emit_prologue): New function. + (s390x_emit_epilogue): New function. + (s390x_emit_add): New function. + (s390x_emit_sub): New function. + (s390x_emit_mul): New function. + (s390x_emit_lsh): New function. + (s390x_emit_rsh_signed): New function. + (s390x_emit_rsh_unsigned): New function. + (s390x_emit_ext): New function. + (s390x_emit_log_not): New function. + (s390x_emit_bit_and): New function. + (s390x_emit_bit_or): New function. + (s390x_emit_bit_xor): New function. + (s390x_emit_bit_not): New function. + (s390x_emit_equal): New function. + (s390x_emit_less_signed): New function. + (s390x_emit_less_unsigned): New function. + (s390x_emit_ref): New function. + (s390x_emit_if_goto): New function. + (s390x_emit_const): New function. + (s390x_emit_call): New function. + (s390x_emit_reg): New function. + (s390x_emit_pop): New function. + (s390x_emit_stack_flush): New function. + (s390x_emit_zero_ext): New function. + (s390x_emit_swap): New function. + (s390x_emit_stack_adjust): New function. + (s390x_emit_int_call_1): New function. + (s390x_emit_void_call_2): New function. + (s390x_emit_eq_goto): New function. + (s390x_emit_ne_goto): New function. + (s390x_emit_lt_goto): New function. + (s390x_emit_le_goto): New function. + (s390x_emit_gt_goto): New function. + (s390x_emit_ge_goto): New function. + (s390_emit_ops): New function. + (struct linux_target_ops): Fill in emit_ops hook. + +2016-03-29 Marcin KoÅ›cielnicki <koriakin@0x04.net> + + PR 18377 + * Makefile.in: Add s390 IPA files. + * configure.srv: Build IPA for s390. + * linux-s390-ipa.c: New file. + * linux-s390-low.c: New includes - inttypes.h and linux-s390-tdesc.h. + (init_registers_s390_linux32): Move declaration to linux-s390-tdesc.h. + (tdesc_s390_linux32): Likewise. + (init_registers_s390_linux32v1): Likewise. + (tdesc_s390_linux32v1): Likewise. + (init_registers_s390_linux32v2): Likewise. + (tdesc_s390_linux32v2): Likewise. + (init_registers_s390_linux64): Likewise. + (tdesc_s390_linux64): Likewise. + (init_registers_s390_linux64v1): Likewise. + (tdesc_s390_linux64v1): Likewise. + (init_registers_s390_linux64v2): Likewise. + (tdesc_s390_linux64v2): Likewise. + (init_registers_s390_te_linux64): Likewise. + (tdesc_s390_te_linux64): Likewise. + (init_registers_s390_vx_linux64): Likewise. + (tdesc_s390_vx_linux64): Likewise. + (init_registers_s390_tevx_linux64): Likewise. + (tdesc_s390_tevx_linux64): Likewise. + (init_registers_s390x_linux64): Likewise. + (tdesc_s390x_linux64): Likewise. + (init_registers_s390x_linux64v1): Likewise. + (tdesc_s390x_linux64v1): Likewise. + (init_registers_s390x_linux64v2): Likewise. + (tdesc_s390x_linux64v2): Likewise. + (init_registers_s390x_te_linux64): Likewise. + (tdesc_s390x_te_linux64): Likewise. + (init_registers_s390x_vx_linux64): Likewise. + (tdesc_s390x_vx_linux64): Likewise. + (init_registers_s390x_tevx_linux64): Likewise. + (tdesc_s390x_tevx_linux64): Likewise. + (have_hwcap_s390_vx): New static variable. + (s390_arch_setup): Fill have_hwcap_s390_vx. + (s390_get_thread_area): New function. + (s390_ft_entry_gpr_esa): New const. + (s390_ft_entry_gpr_zarch): New const. + (s390_ft_entry_misc): New const. + (s390_ft_entry_fr): New const. + (s390_ft_entry_vr): New const. + (s390_ft_main_31): New const. + (s390_ft_main_64): New const. + (s390_ft_exit_fr): New const. + (s390_ft_exit_vr): New const. + (s390_ft_exit_misc): New const. + (s390_ft_exit_gpr_esa): New const. + (s390_ft_exit_gpr_zarch): New const. + (append_insns): New function. + (s390_relocate_instruction): New function. + (s390_install_fast_tracepoint_jump_pad): New function. + (s390_get_min_fast_tracepoint_insn_len): New function. + (s390_get_ipa_tdesc_idx): New function. + (struct linux_target_ops): Wire in the above functions. + (initialize_low_arch) [!__s390x__]: Don't initialize s390x tdescs. + * linux-s390-tdesc.h: New file. + +2016-03-29 Marcin KoÅ›cielnicki <koriakin@0x04.net> + + * linux-s390-low.c (s390_supports_tracepoints): New function. + (struct linux_target_ops): Fill supports_tracepoints hook. + +2016-03-18 Yao Qi <yao.qi@linaro.org> + + * linux-low.c (lwp_signal_can_be_delivered): New function. + (linux_resume_one_lwp_throw): Use lwp_signal_can_be_delivered. + +2016-03-18 Yao Qi <yao.qi@linaro.org> + + * linux-low.c (linux_resume_one_lwp_throw): Set 'signal' to + 0 if signal is enqueued. Remove 'signal' from one debugging + message. Move one debugging message to some lines below. + Remove code setting 'signal' to 0. + +2016-03-18 Yao Qi <yao.qi@linaro.org> + + * linux-low.c (linux_low_filter_event): Remove redundant + WIFSTOPPED check together with linux_wstatus_maybe_breakpoint. + +2016-03-09 Marcin KoÅ›cielnicki <koriakin@0x04.net> + + * linux-ppc-low.c (ppc_supports_tracepoints): New function. + (struct linux_target_ops): Wire in the above. + +2016-03-03 Yao Qi <yao.qi@linaro.org> + + * linux-low.c: Update comments to start_step_over. + +2016-03-03 Yao Qi <yao.qi@linaro.org> + + PR server/19736 + * linux-low.c (handle_extended_wait): Set child suspended + if event_lwp->bp_reinsert isn't zero. + +2016-03-02 Yao Qi <yao.qi@linaro.org> + + * linux-low.c (linux_resume_one_lwp_throw): Replace code with + enqueue_pending_signal. + +2016-03-02 Marcin KoÅ›cielnicki <koriakin@0x04.net> + + * tracepoint.c (cmd_qtstart): Only set ipa_tdesc_idx if agent + is actually loaded. + +2016-02-25 Marcin KoÅ›cielnicki <koriakin@0x04.net> + + * linux-s390-low.c (s390_num_regs_3264): Define on 31-bit too. + (s390_regmap_3264) [!__s390x__]: New global. + (s390_collect_ptrace_register): Skip map entries containing -1. + (s390_supply_ptrace_register): Ditto. + (s390_fill_gprs_high): New function. + (s390_store_gprs_high): New function. + (s390_regsets): Add NT_S390_HIGH_GPRS. + (s390_get_hwcap): Enable on 31-bit. + (have_hwcap_s390_high_gprs): Enable on 31-bit. + (s390_arch_setup): Enable detection of high GPRs, TDB, VX on 31-bit. + Detect NT_S390_HIGH_GPRS. + (s390_usrregs_info_3264): Enable on 31-bit. + (s390_regs_info): Enable regs_info_3264 on 31-bit. + (initialize_low_arch): Initialize s390_regsets_info_3264 on 31-bit. + +2016-02-25 Marcin KoÅ›cielnicki <koriakin@0x04.net> + + PR gdb/13808 + * Makefile.in: Add i386-*-linux-ipa.o and amd64-*-linux-ipa.o. + * configure.srv: Ditto. + * linux-aarch64-ipa.c (get_ipa_tdesc): New function. + (initialize_low_tracepoint): Remove ipa_tdesc assignment. + * linux-amd64-ipa.c: Add "linux-x86-tdesc.h" include. + (init_registers_amd64_linux): Remove prototype. + (tdesc_amd64_linux): Remove declaration. + (get_ipa_tdesc): New function. + (initialize_low_tracepoint): Remove ipa_tdesc assignment, + initialize remaining tdescs. + * linux-i386-ipa.c: Add "linux-x86-tdesc.h" include. + (init_registers_i386_linux): Remove prototype. + (tdesc_i386_linux): Remove declaration. + (get_ipa_tdesc): New function. + (initialize_low_tracepoint): Remove ipa_tdesc assignment, + initialize remaining tdescs. + * linux-low.c (linux_get_ipa_tdesc_idx): New function. + (linux_target_ops): wire in linux_get_ipa_tdesc_idx. + * linux-low.h (struct linux_target_ops): Add get_ipa_tdesc_idx. + * linux-x86-low.c: Move tdesc declarations to linux-x86-tdesc.h. + (x86_get_ipa_tdesc_idx): New function. + (the_low_target): Wire in x86_get_ipa_tdesc_idx. + * linux-x86-tdesc.h: New file. + * target.h (struct target_ops): Add get_ipa_tdesc_idx. + (target_get_ipa_tdesc_idx): New macro. + * tracepoint.c (ipa_tdesc_idx): New macro. + (struct ipa_sym_addresses): Add addr_ipa_tdesc_idx. + (symbol_list): Add ipa_tdesc_idx. + (cmd_qtstart): Write ipa_tdesc_idx in the target. + (ipa_tdesc): Remove. + (ipa_tdesc_idx): New variable. + (get_context_regcache): Use get_ipa_tdesc. + (gdb_collect): Ditto. + (gdb_probe): Ditto. + * tracepoint.h (get_ipa_tdesc): New prototype. + (ipa_tdesc): Remove. + +2016-02-24 Pedro Alves <palves@redhat.com> + + * linux-low.c (check_stopped_by_breakpoint): Rename to ... + (save_stop_reason): ... this. Use GDB_ARCH_IS_TRAP_HWBKPT and + handle ambiguous GDB_ARCH_IS_TRAP_BRKPT / GDB_ARCH_IS_TRAP_HWBKPT. + Factor out common code between the USE_SIGTRAP_SIGINFO and + !USE_SIGTRAP_SIGINFO blocks. + (linux_low_filter_event): Call save_stop_reason instead of + check_stopped_by_breakpoint and check_stopped_by_watchpoint. + Update comments. + (linux_wait_1): Update comments. + +2016-02-24 Wei-cheng Wang <cole945@gmail.com> + + * linux-ppc-low.c (ppc_supports_z_point_type): New function: + (ppc_insert_point, ppc_remove_point): Insert/remove z-packet breakpoints. + (ppc64_emit_ops_vector): Add target ops - ppc_supports_z_point_type, + ppc_insert_point, ppc_remove_point. + +2016-02-17 Marcin KoÅ›cielnicki <koriakin@0x04.net> + + * linux-s390-low.c (s390_supports_z_point_type): New function. + (struct linux_target_ops): Wire s390_supports_z_point_type in. + +2016-02-16 Yao Qi <yao.qi@linaro.org> + + * linux-arm-low.c (get_next_pcs_syscall_next_pc): Remove argument + PC. Get pc from regcache_read_pc. + +2016-02-12 Yao Qi <yao.qi@linaro.org> + + * linux-aarch64-low.c (aarch64_get_pc): Call linux_get_pc_64bit + or linux_get_pc_32bit. + (aarch64_set_pc): Call linux_set_pc_64bit or linux_set_pc_32bit. + +2016-02-12 Yao Qi <yao.qi@linaro.org> + + * linux-arm-low.c (get_next_pcs_ops): Initialize it with + arm_linux_get_next_pcs_fixup. + +2016-02-12 Marcin KoÅ›cielnicki <koriakin@0x04.net> + + * tracepoint.c (x_tracepoint_action_download): Change + write_inferior_data_ptr to write_inferior_data_pointer. + (cmd_qtstart): Likewise. + (write_inferior_data_ptr): Remove. + (download_agent_expr): Change write_inferior_data_ptr to + write_inferior_data_pointer. + (download_tracepoint_1): Likewise. + (download_tracepoint): Likewise. + (download_trace_state_variables): Likewise. + +2016-02-11 Wei-cheng Wang <cole945@gmail.com> + Marcin KoÅ›cielnicki <koriakin@0x04.net> + + * tracepoint.c (struct tracepoint_action_ops): Remove. + (struct tracepoint_action): Remove ops. + (m_tracepoint_action_download, r_tracepoint_action_download) + (x_tracepoint_action_download, l_tracepoint_action_download): Adjust + size and offset accordingly. + (m_tracepoint_action_ops, r_tracepoint_action_ops) + (x_tracepoint_action_ops, l_tracepoint_action_ops): Remove. + (tracepoint_action_send, tracepoint_action_download): New functions. + Helpers for trace action handlers. + (add_tracepoint_action): Remove setup actions ops. + (download_tracepoint_1, tracepoint_send_agent): Call helper functions. + +2016-02-10 Yao Qi <yao.qi@linaro.org> + + * regcache.c (regcache_raw_read_unsigned): Clear *VAL. + +2016-02-09 Simon Marchi <simon.marchi@ericsson.com> + + * configure.ac: Use AC_CONFIG_FILES instead of passing arguments + to AC_OUTPUT. + * configure: Regenerate. + +2016-02-09 Simon Marchi <simon.marchi@ericsson.com> + + * linux-aarch64-low.c (aarch64_linux_siginfo_fixup): Change + void * to gdb_byte *. + * linux-low.c (siginfo_fixup): Likewise. + (linux_xfer_siginfo): Likewise. + * linux-low.h (struct linux_target_ops) <siginfo_fixup>: + Likewise. + * linux-x86-low.c (x86_siginfo_fixup): Likewise. + +2016-02-02 Walfred Tedeschi <walfred.tedeschi@intel.com> + + * configure.srv (x86_64-*-linux*): Add amd64-linux-siginfo.o + to srv_tgtobj. + (i[34567]86-*-linux*): Add amd64-linux-siginfo.o + to srv_tgtobj. + * linux-x86-low.c [__x86_64__]: Include + "nat/amd64-linux-siginfo.h". + (compat_siginfo_from_siginfo, siginfo_from_compat_siginfo) + (compat_x32_siginfo_from_siginfo, siginfo_from_compat_x32_siginfo) + (compat_timeval, compat_sigval, compat_x32_clock, cpt_si_pid) + (cpt_si_uid, cpt_si_timerid, cpt_si_overrun, cpt_si_status) + (cpt_si_utime, cpt_si_stime, cpt_si_ptr, cpt_si_addr, cpt_si_band) + (cpt_si_fd, si_timerid, si_overrun): Move from + nat/amd64-linux-siginfo.c. + * Makefile.in (amd64-linux-siginfo.o:): New rule. + +2016-01-28 Simon Marchi <simon.marchi@ericsson.com> + + * server.c (skip_to_semicolon): Remove. + (process_point_options): Use strchrnul instead of + skip_to_semicolon. + +2016-01-26 Yao Qi <yao.qi@linaro.org> + + * linux-arm-low.c (arm_gdbserver_get_next_pcs): Remove argument pc. + * linux-low.c (install_software_single_step_breakpoints): Don't + call regcache_read_pc. + * linux-low.h (struct linux_target_ops) <get_next_pcs>: Remove + argument pc. + +2016-01-26 Yao Qi <yao.qi@linaro.org> + + * linux-low.c (install_software_single_step_breakpoints): Call + regcache_read_pc instead of get_pc. + +2016-01-26 Yao Qi <yao.qi@linaro.org> + + * remote-utils.c (remote_close) [!USE_WIN32API]: Ignore SIGIO. + (unblock_async_io): Rename to ... + (block_unblock_async_io): ... it. New function. + (enable_async_io): Don't install SIGIO handler. Unblock it + instead. + (disable_async_io): Don't ignore SIGIO. Block it instead. + (initialize_async_io): Install SIGIO handler. Don't call + unblock_async_io. + +2016-01-26 Yao Qi <yao.qi@linaro.org> + + * remote-utils.c (getpkt): If the buffer isn't empty, and the + first character is '\003', call *the_target->request_interrupt. + +2016-01-25 Yao Qi <yao.qi@linaro.org> + + * remote-utils.c (new_thread_notify): Remove. + (dead_thread_notify): Likewise. + * remote-utils.h (new_thread_notify): Remove declaration. + (dead_thread_notify): Likewise. + +2016-01-23 Marcin KoÅ›cielnicki <koriakin@0x04.net> + + * gdb.trace/pending.exp: Fix expected message on continue. + +2016-01-22 Marcin KoÅ›cielnicki <koriakin@0x04.net> + + * tracepoint.c (write_inferior_data_ptr): Cast to uintptr_t, so that + it works properly on big-endian machines where sizeof (CORE_ADDR) + != sizeof (void *). + +2016-01-21 Pedro Alves <palves@redhat.com> + + * Makefile.in (COMPILER_CFLAGS, CXXFLAGS): New. + (INTERNAL_CFLAGS_BASE): Use COMPILER_CFLAGS instead of CFLAGS. + * configure: Regenerate. + +2016-01-21 Yao Qi <yao.qi@linaro.org> + + * linux-arm-low.c (arm_sigreturn_next_pc): Add parameter + is_thumb and set it according to CPSR saved on the stack. + (get_next_pcs_syscall_next_pc): Pass is_thumb to + arm_sigreturn_next_pc. + +2016-01-18 Yao Qi <yao.qi@linaro.org> + + * linux-low.c (linux_set_pc_64bit): New function. + (linux_get_pc_64bit): New function. + * linux-low.h (linux_set_pc_64bit, linux_get_pc_64bit): + Declare. + * linux-sparc-low.c (debug_threads): Remove declaration. + (sparc_get_pc): Remove. + (the_low_target): Use linux_get_pc_64bit instead of + sparc_get_pc. + * linux-tile-low.c (tile_get_pc, tile_set_pc): Remove. + (the_low_target): Use linux_get_pc_64bit and + linux_set_pc_64bit. + +2016-01-18 Yao Qi <yao.qi@linaro.org> + + * linux-arm-low.c (debug_threads): Remove declaration. + (arm_get_pc, arm_set_pc): Remove. + (the_low_target): Use linux_get_pc_32bit and + linux_set_pc_32bit. + * linux-bfin-low.c (bfin_get_pc, bfin_set_pc): Remove. + (the_low_target): Use linux_get_pc_32bit and + linux_set_pc_32bit. + * linux-cris-low.c (debug_threads): Remove declaration. + (cris_get_pc, cris_set_pc,): Remove. + (the_low_target): Use linux_get_pc_32bit and + linux_set_pc_32bit. + * linux-crisv32-low.c (debug_threads): Remove declaration. + (cris_get_pc, cris_set_pc): Remove. + (the_low_target): Use linux_get_pc_32bit and + linux_set_pc_32bit. + * linux-low.c: Include inttypes.h. + (linux_get_pc_32bit, linux_set_pc_32bit): New functions. + * linux-low.h (linux_get_pc_32bit, linux_set_pc_32bit): Declare. + * linux-m32r-low.c (m32r_get_pc, m32r_set_pc): Remove. + (the_low_target): Use linux_get_pc_32bit and + linux_set_pc_32bit. + * linux-m68k-low.c (m68k_get_pc, m68k_set_pc): Remove. + (the_low_target): Use linux_get_pc_32bit and + linux_set_pc_32bit. + * linux-nios2-low.c (nios2_get_pc, nios2_set_pc): Remove. + (the_low_target): Use linux_get_pc_32bit and + linux_set_pc_32bit. + * linux-sh-low.c (sh_get_pc, sh_set_pc): Remove. + (the_low_target): Use linux_get_pc_32bit and + linux_set_pc_32bit. + * linux-xtensa-low.c (xtensa_get_pc, xtensa_set_pc): Remove. + (the_low_target): Use linux_get_pc_32bit and + linux_set_pc_32bit. + +2016-01-18 Gary Benson <gbenson@redhat.com> + + * configure.ac (AC_FUNC_FORK): New check. + * config.in: Regenerate. + * configure: Likewise. + +2016-01-14 Yao Qi <yao.qi@linaro.org> + + * linux-aarch32-low.c (thumb2_breakpoint): Make it static. + * linux-aarch32-low.h (thumb2_breakpoint): Remove declaration. + * linux-arm-low.c (arm_gdbserver_get_next_pcs): Pass 1 to + arm_get_next_pcs_ctor. + +2016-01-12 Josh Stone <jistone@redhat.com> + Philippe Waroquiers <philippe.waroquiers@skynet.be> + + * inferiors.h: Include "gdb_vecs.h". + (struct process_info): Add syscalls_to_catch. + * inferiors.c (remove_process): Free syscalls_to_catch. + * remote-utils.c (prepare_resume_reply): Report syscall_entry and + syscall_return stops. + * server.h (UNKNOWN_SYSCALL, ANY_SYSCALL): Define. + * server.c (handle_general_set): Handle QCatchSyscalls. + (handle_query): Report support for QCatchSyscalls. + * target.h (struct target_ops): Add supports_catch_syscall. + (target_supports_catch_syscall): New macro. + * linux-low.h (struct linux_target_ops): Add get_syscall_trapinfo. + (struct lwp_info): Add syscall_state. + * linux-low.c (handle_extended_wait): Mark syscall_state as an entry. + Maintain syscall_state and syscalls_to_catch across exec. + (get_syscall_trapinfo): New function, proxy to the_low_target. + (linux_low_ptrace_options): Enable PTRACE_O_TRACESYSGOOD. + (linux_low_filter_event): Toggle syscall_state entry/return for + syscall traps, and set it ignored for all others. + (gdb_catching_syscalls_p): New function. + (gdb_catch_this_syscall_p): New function. + (linux_wait_1): Handle SYSCALL_SIGTRAP. + (linux_resume_one_lwp_throw): Add PTRACE_SYSCALL possibility. + (linux_supports_catch_syscall): New function. + (linux_target_ops): Install it. + * linux-x86-low.c (x86_get_syscall_trapinfo): New function. + (the_low_target): Install it. + +2016-01-12 Mike Frysinger <vapier@gentoo.org> + + * acinclude.m4: Include new ../warning.m4 file. + * configure: Regenerated. + * configure.ac: Replace all warning logic with AM_GDB_WARNINGS. + +2016-01-12 Mike Frysinger <vapier@gentoo.org> + + * ax.c (is_goto_target): Mark static. + * linux-low.c (register_addr): Likewise. + (linux_fetch_registers, linux_store_registers): Likewise. + * mem-break.c (any_persistent_commands): Fix old prototype. + (add_commands_to_breakpoint): Mark static. + * regcache.c (find_register_by_name): Delete unused func. + * remote-utils.c (hex_or_minus_one): Mark static. + * server.c (monitor_show_help): Mark static. + (handle_query, handle_v_cont, handle_v_attach, handle_v_kill, + handle_v_requests): Likewise. + +2016-01-12 Pedro Alves <palves@redhat.com> + + Remove use of the registered trademark symbol throughout. + +2016-01-08 Yao Qi <yao.qi@linaro.org> + + * remote-utils.c (getpkt): If c is '\003', call target hook + request_interrupt. + +2016-01-06 Yao Qi <yao.qi@linaro.org> + + * linux-aarch32-low.h (arm_abi_breakpoint): Move to + linux-aarch32-low.c. + (arm_eabi_breakpoint, arm_breakpoint): Likewise. + (arm_breakpoint_len, thumb_breakpoint_len): Likewise. + (thumb2_breakpoint, thumb2_breakpoint_len): Likewise. + (thumb2_breakpoint): Declare. + * linux-aarch32-low.c (arm_abi_breakpoint): Moved from + linux-aarch32-low.h. + (arm_eabi_breakpoint, arm_breakpoint): Likewise. + (arm_breakpoint_len, thumb_breakpoint_len): Likewise. + (thumb2_breakpoint, thumb2_breakpoint_len): Likewise. + +2016-01-01 Joel Brobecker <brobecker@adacore.com> + + * gdbreplay.c (gdbreplay_version): Change copyright year in + version message. + * server.c (gdbserver_version): Likewise. + +2015-12-28 Patrick Palka <patrick@parcs.ath.cx> + + * server.c (crc32_table): Delete. + (crc32): Use libiberty's xcrc32 function. + +2015-12-22 Joel Brobecker <brobecker@adacore.com> + + * lynx-low.c (lynx_delete_thread_callback): New function. + (lynx_mourn): Properly delete our process and all of its + threads. Remove call to clear_inferiors. + +2015-12-22 Joel Brobecker <brobecker@adacore.com> + + * target.c (thread_search_callback): Add check that + the thread_stopped target callback is not NULL before + calling it. + +2015-12-21 Yao Qi <yao.qi@linaro.org> + + * linux-aarch32-low.h [__aarch64__]: Use arm_abi_breakpoint + arm breakpoint. + +2015-12-18 Antoine Tremblay <antoine.tremblay@ericsson.com> + + * server.c (handle_query): Call target_supports_software_single_step. + +2015-12-18 Antoine Tremblay <antoine.tremblay@ericsson.com> + + * linux-low.c (single_step): New function. + (linux_resume_one_lwp_throw): Call single_step. + (start_step_over): Likewise. + +2015-12-18 Antoine Tremblay <antoine.tremblay@ericsson.com> + + * Makefile.in (SFILES): Append arch/arm-linux.c, + arch/arm-get-next-pcs.c. + (arm-linux.o): New rule. + (arm-get-next-pcs.o): New rule. + * configure.srv (arm*-*-linux*): Add arm-get-next-pcs.o, + arm-linux.o. + * linux-aarch32-low.c (arm_abi_breakpoint): Remove macro. Moved + to linux-aarch32-low.c. + (arm_eabi_breakpoint, arm_breakpoint): Likewise. + (arm_breakpoint_len, thumb_breakpoint): Likewise. + (thumb_breakpoint_len, thumb2_breakpoint): Likewise. + (thumb2_breakpoint_len): Likewise. + (arm_is_thumb_mode): Make non-static. + * linux-aarch32-low.h (arm_abi_breakpoint): New macro. Moved + from linux-aarch32-low.c. + (arm_eabi_breakpoint, arm_breakpoint): Likewise. + (arm_breakpoint_len, thumb_breakpoint): Likewise. + (thumb_breakpoint_len, thumb2_breakpoint): Likewise. + (thumb2_breakpoint_len): Likewise. + (arm_is_thumb_mode): New declaration. + * linux-arm-low.c: Include arch/arm-linux.h + aarch/arm-get-next-pcs.h, sys/syscall.h. + (get_next_pcs_ops): New struct. + (get_next_pcs_addr_bits_remove): New function. + (get_next_pcs_is_thumb): New function. + (get_next_pcs_read_memory_unsigned_integer): Likewise. + (arm_sigreturn_next_pc): Likewise. + (get_next_pcs_syscall_next_pc): Likewise. + (arm_gdbserver_get_next_pcs): Likewise. + (struct linux_target_ops) <arm_gdbserver_get_next_pcs>: + Initialize. + * linux-low.h: Move CORE_ADDR vector definition to gdb_vecs.h. + * server.h: Include gdb_vecs.h. + +2015-12-18 Antoine Tremblay <antoine.tremblay@ericsson.com> + + * Makefile.in (SFILES): Append common/common-regcache.c. + (OBS): Append common-regcache.o. + (common-regcache.o): New rule. + * regcache.c (init_register_cache): Initialize cache to + REG_UNAVAILABLE. + (regcache_raw_read_unsigned): New function. + * regcache.h (REG_UNAVAILABLE, REG_VALID): Replaced by shared + register_status enum. + +2015-12-18 Antoine Tremblay <antoine.tremblay@ericsson.com> + + * linux-aarch64-low.c (the_low_targets): Rename + breakpoint_reinsert_addr to get_next_pcs. + * linux-arm-low.c (the_low_targets): Likewise. + * linux-bfin-low.c (the_low_targets): Likewise. + * linux-cris-low.c (the_low_targets): Likewise. + * linux-crisv32-low.c (the_low_targets): Likewise. + * linux-low.c (can_software_single_step): Likewise. + (install_software_single_step_breakpoints): New function. + (start_step_over): Use install_software_single_step_breakpoints. + * linux-low.h: New CORE_ADDR vector. + (struct linux_target_ops) Rename breakpoint_reinsert_addr to + get_next_pcs. + * linux-mips-low.c (the_low_targets): Likewise. + * linux-nios2-low.c (the_low_targets): Likewise. + * linux-sparc-low.c (the_low_targets): Likewise. + +2015-12-17 Pedro Alves <palves@redhat.com> + + * linux-low.c (linux_kill_one_lwp): Remove references to + LinuxThreads. + (kill_lwp): Remove HAVE_TKILL_SYSCALL check. No longer fall back + to 'kill'. + (linux_init_signals): Delete. + (initialize_low): Adjust. + * thread-db.c (thread_db_init): Remove LinuxThreads reference. + +2015-12-16 Pedro Alves <palves@redhat.com> + + * configure.ac (compiler warning flags): When testing a + -Wno-foo option, check whether -Wfoo works instead. + * configure: Regenerate. + +2015-12-11 Don Breazeal <donb@codesourcery.com> + + * server.c (process_serial_event): Don't exit from gdbserver + in remote mode if there are still active inferiors. + +2015-12-11 Yao Qi <yao.qi@linaro.org> + + * linux-aarch64-low.c (aarch64_breakpoint_at): Call + arm_breakpoint_at if the process is 32-bit. + +2015-12-11 Yao Qi <yao.qi@linaro.org> + + * linux-aarch32-low.c [__aarch64__]: Use arm_abi_breakpoint + arm breakpoint. + +2015-12-07 Yao Qi <yao.qi@linaro.org> + + * configure.srv: Append arm.o to srv_tgtobj for + aarch64*-*-linux* target. + * linux-aarch32-low.c (arm_abi_breakpoint): New macro. Moved + from linux-arm-low.c. + (arm_eabi_breakpoint, arm_breakpoint): Likewise. + (arm_breakpoint_len, thumb_breakpoint): Likewise. + (thumb_breakpoint_len, thumb2_breakpoint): Likewise. + (thumb2_breakpoint_len): Likewise. + (arm_is_thumb_mode, arm_breakpoint_at): Likewise. + (arm_breakpoint_kinds): Likewise. + (arm_breakpoint_kind_from_pc): Likewise. + (arm_sw_breakpoint_from_kind): Likewise. + (arm_breakpoint_kind_from_current_state): Likewise. + * linux-aarch32-low.h (arm_breakpoint_kind_from_pc): Declare. + (arm_sw_breakpoint_from_kind): Declare. + (arm_breakpoint_kind_from_current_state): Declare. + (arm_breakpoint_at): Declare. + * linux-aarch64-low.c (aarch64_sw_breakpoint_from_kind): Call + arm_sw_breakpoint_from_kind if process is 32-bit. + (aarch64_breakpoint_kind_from_pc): New function. + (aarch64_breakpoint_kind_from_current_state): New function. + (the_low_target): Initialize fields breakpoint_kind_from_pc + and breakpoint_kind_from_current_state. + * linux-arm-low.c (arm_breakpoint_kinds): Move to + linux-aarch32-low.c. + (arm_abi_breakpoint, arm_eabi_breakpoint): Likewise. + (arm_breakpoint, arm_breakpoint_len): Likewise. + (thumb_breakpoint, thumb_breakpoint_len): Likewise. + (thumb2_breakpoint, thumb2_breakpoint_len): Likewise. + (arm_is_thumb_mode): Likewise. + (arm_breakpoint_at): Likewise. + (arm_breakpoint_kind_from_pc): Likewise. + (arm_sw_breakpoint_from_kind): Likewise. + (arm_breakpoint_kind_from_current_state): Likewise. + + Revert: + 2015-08-04 Yao Qi <yao.qi@linaro.org> + + * linux-aarch64-low.c (aarch64_supports_z_point_type): Return + 0 for Z_PACKET_SW_BP if it may be used in multi-arch debugging. + * server.c (extended_protocol): Remove "static". + * server.h (extended_protocol): Declare it. + +2015-12-04 Josh Stone <jistone@redhat.com> + + * target.h (struct target_ops) <arch_setup>: Rename to ... + (struct target_ops) <post_create_inferior>: ... this. + (target_arch_setup): Rename to ... + (target_post_create_inferior): ... this, calling post_create_inferior. + * server.c (start_inferior): Update target_arch_setup calls to + target_post_create_inferior. + * linux-low.c (linux_low_ptrace_options): Forward declare. + (linux_arch_setup): Update its comment for general use. + (linux_post_create_inferior): New, run arch_setup and setup ptrace. + (struct linux_target_ops): Use linux_post_create_inferior. + * lynx-low.c (struct lynx_target_ops): Update arch_setup stub comment + to post_create_inferior. + * nto-low.c (struct nto_target_ops): Likewise. + * spu-low.c (struct spu_target_ops): Likewise. + * win32-low.c (struct win32_target_ops): Likewise. + +2015-12-03 Antoine Tremblay <antoine.tremblay@ericsson.com> + + * linux-arm-low.c: Remove duplicate arch/arm.h include. + +2015-11-30 Antoine Tremblay <antoine.tremblay@ericsson.com> + + * linux-arm-low.c (arm_reinsert_addr): Remove function. + (struct linux_target_ops <breakpoint_reinsert_addr>: Set to NULL. + * linux-cris-low.c (cris_reinsert_addr> Remove function. + (struct linux_target_ops) <breakpoint_reinsert_addr>: Set to NULL. + * linux-crisv32-low.c (cris_reinsert_addr): Remove function. + (struct linux_target_ops) <breakpoint_reinsert_addr>: Set to NULL. + * linux-mips-low.c (mips_reinsert_addr): Remove function. + (struct linux_target_ops) <breakpoint_reinsert_addr>: Set to NULL. + * linux-nios2-low.c (nios2_reinsert_addr): Remove function. + (struct linux_target_ops) <breakpoint_reinsert_addr>: Set to NULL. + * linux-sparc-low.c (sparc_reinsert_addr): Remove function. + (struct linux_target_ops) <breakpoint_reinsert_addr>: Set to NULL. + +2015-11-30 Antoine Tremblay <antoine.tremblay@ericsson.com> + + * linux-low.c (linux_look_up_symbols): Don't call + linux_supports_traceclone. + * linux-low.h (thread_db_init): Remove use_events argument. + * thread-db.c (thread_db_use_event): Remove global variable. + (struct thread_db) <td_thr_event_enable_p>: Remove field. + (struct thread_db) <td_create_bp>: Remove field. + (thread_db_create_event): Remove function. + (thread_db_enable_reporting): Likewise. + (find_one_thread): Don't check for thread_db_use_events. + (attach_thread): Likewise. + (thread_db_load_search): Remove td_thr_event_enable_p initialization. + (try_thread_db_load_1): Don't check for thread_db_use_events. + (thread_db_init): Remove use_events argument and thread events + handling. + (remove_thread_event_breakpoints): Remove function. + (thread_db_detach): Remove call to remove_thred_event_breakpoints. + +2015-11-30 Antoine Tremblay <antoine.tremblay@ericsson.com> + + * linux-aarch64-low.c (aarch64_supports_hardware_single_step): + New function. + (struct linux_target_ops) <supports_hardware_single_step>: Initialize. + * linux-arm-low.c (arm_supports_hardware_single_step): New function. + (struct linux_target_ops) <supports_hardware_single_step>: Initialize. + * linux-bfin-low.c (bfin_supports_hardware_single_step): New function. + (struct linux_target_ops) <bfin_supports_hardware_single_step>: + Initialize. + * linux-crisv32-low.c (cris_supports_hardware_single_step): + New function. + (struct linux_target_ops) <supports_hardware_single_step>: Initialize. + * linux-low.c (can_hardware_single_step): Use + supports_hardware_single_step. + (can_software_single_step): New function. + (start_step_over): Call can_software_single_step. + (linux_supports_hardware_single_step): New function. + (struct target_ops) <supports_software_single_step>: Initialize. + * linux-low.h (struct linux_target_ops) + <supports_hardware_single_step>: Initialize. + * linux-m32r-low.c (m32r_supports_hardware_single_step): New function. + (struct linux_target_ops) <supports_hardware_single_step>: Initialize. + * linux-ppc-low.c (ppc_supports_hardware_single_step): New function. + (struct linux_target_ops) <supports_hardware_single_step> Initialize. + * linux-s390-low.c (s390_supports_hardware_single_step): New function. + (struct linux_target_ops) <supports_hardware_single_step>: Initialize. + * linux-sh-low.c (sh_supports_hardware_single_step): New function. + (struct linux_target_ops) <supports_hardware_single_step>: Initialize. + * linux-tic6x-low.c (tic6x_supports_hardware_single_step): New function. + (struct linux_target_ops) <tic6x_supports_hardware_single_step>: + Initialize. + * linux-tile-low.c (tile_supports_hardware_single_step): New function. + (struct linux_target_ops) <tile_supports_hardware_single_step>: + Initialize. + * linux-x86-low.c (x86_supports_hardware_single_step) New function. + (struct linux_target_ops) <supports_hardware_single_step>: Initialize. + * linux-xtensa-low.c (xtensa_supports_hardware_single_step): + New function. + (struct linux_target_ops) <supports_hardware_single_step>: Initialize. + * target.h (struct target_ops): <supports_software_single_step>: + New field. + (target_supports_software_single_step): New macro. + +2015-11-30 Antoine Tremblay <antoine.tremblay@ericsson.com> + + * linux-low.c (linux_wait_1): Fix pc advance condition. + * mem-break.c (reinsert_breakpoint_inserted_here): New function. + * mem-break.h (reinsert_breakpoint_inserted_here): New declaration. + +2015-11-30 Antoine Tremblay <antoine.tremblay@ericsson.com> + + * linux-arm-low.c (arm_is_thumb_mode): New function. + (arm_breakpoint_at): Use arm_is_thumb_mode. + (arm_breakpoint_kind_from_current_state): New function. + (struct linux_target_ops) <breakpoint_kind_from_current_state>: + Initialize. + * linux-low.c (linux_wait_1): Call breakpoint_kind_from_current_state. + (linux_breakpoint_kind_from_current_state): New function. + (struct target_ops <breakpoint_kind_from_current_state>: Initialize. + * linux-low.h (struct linux_target_ops) + <breakpoint_kind_from_current_state>: New field. + * target.h (struct target_ops): Likewise. + (target_breakpoint_kind_from_current_state): New macro. + +2015-11-30 Pedro Alves <palves@redhat.com> + + * linux-low.c (linux_resume): Wake up the event loop before + returning. + +2015-11-30 Pedro Alves <palves@redhat.com> + + * mem-break.c (check_gdb_bp_preconditions): Remove current_thread + check. + (set_gdb_breakpoint): If prepare_to_access_memory fails, set *ERR + to -1. + * target.c (struct thread_search): New structure. + (thread_search_callback): New function. + (prev_general_thread): New global. + (prepare_to_access_memory, done_accessing_memory): New functions. + * target.h (prepare_to_access_memory, done_accessing_memory): + Replace macros with function declarations. + +2015-11-30 Pedro Alves <palves@redhat.com> + + PR 14618 + * linux-low.c (linux_wait_1): If the last resumed thread is gone, + report TARGET_WAITKIND_NO_RESUMED. + * remote-utils.c (prepare_resume_reply): Handle + TARGET_WAITKIND_NO_RESUMED. + * server.c (report_no_resumed): New global. + (handle_query) <qSupported>: Handle "no-resumed+". Report + "no-resumed+" support. + (resume): When the target reports TARGET_WAITKIND_NO_RESUMED, only + return error if the client doesn't support no-resumed events. + (push_stop_notification): New function. + (handle_target_event): Use it. Report TARGET_WAITKIND_NO_RESUMED + events if the client supports them. + +2015-11-30 Pedro Alves <palves@redhat.com> + + * linux-low.c (thread_still_has_status_pending_p): Don't check + vCont;t here. + (lwp_resumed): New function. + (status_pending_p_callback): Return early if the LWP is not + supposed to be resumed. + +2015-11-30 Pedro Alves <palves@redhat.com> + + * linux-low.c (handle_extended_wait): Assert that the LWP's + waitstatus is TARGET_WAITKIND_IGNORE. If GDB wants to hear about + thread create events, leave the new child's status pending. + (linux_low_filter_event): If GDB wants to hear about thread exit + events, leave the LWP marked dead and don't delete it. + (linux_wait_for_event_filtered): Don't check for thread exit. + (filter_exit_event): New function. + (linux_wait_1): Use it, when returning an exit event. + (linux_resume_one_lwp_throw): Assert that the LWP's + waitstatus is TARGET_WAITKIND_IGNORE. + * remote-utils.c (prepare_resume_reply): Handle + TARGET_WAITKIND_THREAD_CREATED and TARGET_WAITKIND_THREAD_EXITED. + * server.c (report_thread_events): New global. + (handle_general_set): Handle QThreadEvents. + (handle_query) <qSupported>: Handle and report QThreadEvents+; + (handle_target_event): Handle TARGET_WAITKIND_THREAD_CREATED and + TARGET_WAITKIND_THREAD_EXITED. + * server.h (report_thread_events): Declare. + +2015-11-30 Pedro Alves <palves@redhat.com> + + * linux-low.c (resume_stopped_resumed_lwps): Don't check whether + the thread's last_resume_kind was resume_stop. + +2015-11-30 Pedro Alves <palves@redhat.com> + + * linux-low.c (linux_attach): In non-stop mode, wait for one stop + before returning. + +2015-11-30 Pedro Alves <palves@redhat.com> + + * server.c (handle_v_requests): Handle vCtrlC. + +2015-11-30 Pedro Alves <palves@redhat.com> + + * gdbthread.h (find_any_thread_of_pid): Declare. + * inferiors.c (thread_of_pid, find_any_thread_of_pid): New + functions. + * server.c (handle_query): If current_thread is NULL, look for + another thread of the selected process. + +2015-11-26 Daniel Colascione <dancol@dancol.org> + Simon Marchi <simon.marchi@ericsson.com> + + * linux-low.c (linux_target_ops): Use linux_proc_tid_get_name. + * server.c (handle_qxfer_threads_worker): Refactor to include thread + name in reply. + * target.h (struct target_ops) <thread_name>: New field. + (target_thread_name): New macro. + +2015-11-23 Joel Brobecker <brobecker@adacore.com> + + * regcache.h (regcache_invalidate_pid): Add declaration. + * regcache.c (regcache_invalidate_pid): New function, extracted + from regcache_invalidate. + (regcache_invalidate): Reimplement using regcache_invalidate_pid. + Add trivial documentation comment. + * lynx-low.c: Use regcache_invalidate_pid instead of + regcache_invalidate. + +2015-11-23 Joel Brobecker <brobecker@adacore.com> + + * configure.ac: Do not call AC_CHECK_TYPES for Elf32_auxv_t + and Elf64_auxv_t if the target is Android. + +2015-11-22 Doug Evans <xdje42@gmail.com> + + * target.h: #include <sys/types.h>. + +2015-11-19 Pedro Alves <palves@redhat.com> + + * linux-low.c (linux_process_qsupported): Change prototype. + Adjust. + * linux-low.h (struct linux_target_ops) <process_qsupported>: + Change prototype. + * linux-x86-low.c (x86_linux_process_qsupported): Change prototype + and adjust to loop over all features. + * server.c (handle_query) <qSupported>: Adjust to call + target_process_qsupported once, passing it a vector of unprocessed + features. + * target.h (struct target_ops) <process_qsupported>: Change + prototype. + (target_process_qsupported): Adjust. + +2015-11-19 Pedro Alves <palves@redhat.com> + + * configure.ac (ERROR_ON_WARNING): Don't check whether in C++ + mode. + * configure: Regenerate. + +2015-11-19 Pedro Alves <palves@redhat.com> + + * configure: Regenerate. + +2015-11-19 Yao Qi <yao.qi@linaro.org> + + * linux-aarch64-low.c (emit_data_processing_reg): Change opcode + type to uint32_t. + +2015-11-19 Yao Qi <yao.qi@linaro.org> + + * linux-aarch64-low.c (enum aarch64_operand_type): New. + (struct aarch64_operand): Move enum out. + +2015-11-19 Yao Qi <yao.qi@linaro.org> + + * linux-aarch64-low.c (aarch64_fill_fpregset): Cast buf to + struct user_fpsimd_state *. + (aarch64_store_fpregset): Likewise. + +2015-11-19 Yao Qi <yao.qi@linaro.org> + + * linux-aarch64-low.c (aarch64_fill_gregset): Cast buf to + struct user_pt_regs *. + (aarch64_store_gregset): Likewise. + +2015-11-18 Pedro Alves <palves@redhat.com> + + * Makefile.in (all_object_files): Add $IPA_OBJS. + +2015-11-17 Pedro Alves <palves@redhat.com> + + * win32-low.c (win32_resume): Use gdb_signal_from_host, + GDB_SIGNAL_0 and gdb_signal_to_string. + +2015-11-17 Pedro Alves <palves@redhat.com> + + * win32-low.c (handle_output_debug_string): Remove parameter. + (win32_kill): Remove our_status local and adjust call to + handle_output_debug_string. + (get_child_debug_event): Adjust call to + handle_output_debug_string. + +2015-11-03 Simon Marchi <simon.marchi@polymtl.ca> + + * linux-mips-low.c (mips_fill_gregset): Add cast. + (mips_store_gregset): Likewise. + (mips_fill_fpregset): Likewise. + (mips_store_fpregset): Likewise. + +2015-11-03 Simon Marchi <simon.marchi@polymtl.ca> + + * linux-mips-low.c (mips_add_watchpoint): Rename private to + priv. + +2015-11-03 Simon Marchi <simon.marchi@polymtl.ca> + + * linux-mips-low.c (mips_linux_new_thread): Change type of + watch_type to enum target_hw_bp_type. + +2015-11-03 Simon Marchi <simon.marchi@polymtl.ca> + + * linux-arm-low.c (raw_bkpt_type_to_arm_hwbp_type): + Change return type to arm_hwbp_type. + +2015-11-03 Simon Marchi <simon.marchi@polymtl.ca> + + * linux-aarch32-low.c (arm_fill_gregset): Add cast. + (arm_store_gregset): Likewise. + * linux-arm-low.c (arm_get_hwcap): Likewise. + (arm_read_description): Likewise. + +2015-11-03 Simon Marchi <simon.marchi@polymtl.ca> + + * linux-aarch32-low.c (aarch32_regsets): Use NULL_REGSET. + +2015-11-03 Simon Marchi <simon.marchi@polymtl.ca> + + * linux-ppc-low.c (ppc_get_hwcap): Add cast. + (ppc_fill_vsxregset): Likewise. + (ppc_store_vsxregset): Likewise. + (ppc_fill_vrregset): Likewise. + (ppc_store_vrregset): Likewise. + (ppc_fill_evrregset): Likewise. + (ppc_store_evrregset): Likewise. + +2015-11-03 Simon Marchi <simon.marchi@polymtl.ca> + + * linux-ppc-low.c (ppc_usrregs_info): Remove + forward-declaration. + (ppc_arch_setup): Move lower in file. + +2015-10-30 Simon Marchi <simon.marchi@ericsson.com> + + * proc-service.c (ps_pdread): Change CORE_ADDR cast to uintptr_t. + (ps_pdwrite): Likewise. + +2015-10-29 Henrik Wallin <henrik.wallin@windriver.com> + + * linux-arm-low.c (arm_new_thread): Move pointer dereference + to after assert checks. + +2015-10-29 Simon Marchi <simon.marchi@ericsson.com> + + * proc-service.c (ps_pdread): Add/adjust casts. + (ps_pdwrite): Add/adjust casts. + +2015-10-29 Simon Marchi <simon.marchi@polymtl.ca> + + * server.c (handle_search_memory_1): Cast return value of + memmem. + +2015-10-29 Simon Marchi <simon.marchi@polymtl.ca> + + * server.c (write_qxfer_response): Change type of data to + gdb_byte *. + +2015-10-29 Pedro Alves <palves@redhat.com> + + * mem-break.c (Z_packet_to_bkpt_type): Add cast. + +2015-10-29 Pedro Alves <palves@redhat.com> + + * tracepoint.c (clear_installed_tracepoints): Add casts. + +2015-10-29 Pedro Alves <palves@redhat.com> + + * server.c (handle_v_cont, process_serial_event): Add enum + gdb_signal casts to signal parsing code. + +2015-10-29 Pedro Alves <palves@redhat.com> + + * linux-low.h (NULL_REGSET): Define. + * linux-aarch64-low.c (aarch64_regsets): Use NULL_REGSET. + * linux-arm-low.c (arm_regsets): Likewise. + * linux-crisv32-low.c (cris_regsets): Likewise. + * linux-m68k-low.c (m68k_regsets): Likewise. + * linux-mips-low.c (mips_regsets): Likewise. + * linux-nios2-low.c (nios2_regsets): Likewise. + * linux-ppc-low.c (ppc_regsets): Likewise. + * linux-s390-low.c (s390_regsets): Likewise. + * linux-sh-low.c (sh_regsets): Likewise. + * linux-sparc-low.c (sparc_regsets): Likewise. + * linux-tic6x-low.c (tic6x_regsets): Likewise. + * linux-tile-low.c (tile_regsets): Likewise. + * linux-x86-low.c (x86_regsets): Likewise. + * linux-xtensa-low.c (xtensa_regsets): Likewise. + +2015-10-29 Pedro Alves <palves@redhat.com> + + * linux-low.h (NULL_REGSET): Define. + * linux-aarch64-low.c (aarch64_regsets): Use NULL_REGSET. + * linux-arm-low.c (arm_regsets): Likewise. + * linux-crisv32-low.c (cris_regsets): Likewise. + * linux-m68k-low.c (m68k_regsets): Likewise. + * linux-mips-low.c (mips_regsets): Likewise. + * linux-nios2-low.c (nios2_regsets): Likewise. + * linux-ppc-low.c (ppc_regsets): Likewise. + * linux-s390-low.c (s390_regsets): Likewise. + * linux-sh-low.c (sh_regsets): Likewise. + * linux-sparc-low.c (sparc_regsets): Likewise. + * linux-tic6x-low.c (tic6x_regsets): Likewise. + * linux-tile-low.c (tile_regsets): Likewise. + * linux-x86-low.c (x86_regsets): Likewise. + * linux-xtensa-low.c (xtensa_regsets): Likewise. + +2015-10-26 Doug Evans <dje@google.com> + + * linux-low.c (__SIGRTMIN): Move to nat/linux-nat.h. + +2015-10-26 Doug Evans <dje@google.com> + + * linux-low.c (W_STOPCODE): Moved to common/gdb_wait.h. + +2015-10-26 Doug Evans <dje@google.com> + + * thread-db.c (find_one_thread): Cast ti.ti_tid to unsigned long + for debug_printf. + (attach_thread, find_new_threads_callback): Ditto. + +2015-10-23 Antoine Tremblay <antoine.tremblay@ericsson.com> + + * mem-break.h (set_breakpoint_data): Remove. + +2015-10-23 Antoine Tremblay <antoine.tremblay@ericsson.com> + + * nto-low.c (nto_sw_breakpoint_from_kind): New function. + (struct target_ops) <sw_breakpoint_from_kind>: Initialize. + (initialize_low): Remove set_breakpoint_data call. + * spu-low.c (spu_sw_breakpoint_from_kind): New function. + (struct target_ops) <sw_breakpoint_from_kind>: Iniitalize. + (initialize_low): Remove set_breakpoint_data call. + * win32-low.c (win32_sw_breakpoint_from_kind): New function. + (struct target_ops) <sw_breakpoint_from_kind>: Initialize. + (initialize_low): Remove set_breakpoint_data call. + +2015-10-23 Antoine Tremblay <antoine.tremblay@ericsson.com> + + * linux-low.c (default_breakpoint_kind_from_pc): Move to target.c. + * mem-break.c (set_breakpoint_at): Use target_breakpoint_kind_from_pc. + * target.c (default_breakpoint_kind_from_pc): Moved from linux-low.c + * target.h (target_breakpoint_kind_from_pc): New macro. + +2015-10-22 Antoine Tremblay <antoine.tremblay@ericsson.com> + + * linux-low.c (default_breakpoint_kind_from_pc): New function. + (linux_breakpoint_kind_from_pc): Use default_breakpoint_kind_from_pc for + the default breakpoint kind. + +2015-10-21 Antoine Tremblay <antoine.tremblay@ericsson.com> + + * linux-arm-low.c (arm_supports_z_point_type): Add software + breakpoint support. + +2015-10-21 Antoine Tremblay <antoine.tremblay@ericsson.com> + + * linux-arm-low.c: Refactor breakpoint definitions. + (arm_breakpoint_at): Adjust for arm_abi_breakpoint. + (arm_sw_breakpoint_from_kind): Adjust for arm_breakpoint. + +2015-10-21 Antoine Tremblay <antoine.tremblay@ericsson.com> + + * Makefile.in: Add arm.c/o. + * configure.srv: Likewise. + * linux-arm-low.c (arm_breakpoint_kinds): New enum. + (arm_breakpoint_kind_from_pc): New function. + (arm_sw_breakpoint_from_kind): Return proper kind. + (struct linux_target_ops) <breakpoint_kind_from_pc>: Initialize. + +2015-10-21 Antoine Tremblay <antoine.tremblay@ericsson.com> + + * linux-low.c (initialize_low): Ajdust for breakpoint global variables + removal. + * mem-break.c : Remove breakpoint_data/breakpoint_len global variables. + (struct raw_breakpoint) <size>: Remove. + (struct raw_breakpoint) <kind>: Add. + (bp_size): New function. + (bp_opcode): Likewise. + (find_raw_breakpoint_at): Adjust for kind. + (insert_memory_breakpoint): Adjust for kind call bp_size,bp_opcode. + (remove_memory_breakpoint): Adjust for kind call bp_size. + (set_raw_breakpoint_at): Adjust for kind. + (set_breakpoint): Likewise. + (set_breakpoint_at): Call breakpoint_kind_from_pc. + (delete_raw_breakpoint): Adjust for kind. + (delete_breakpoint): Likewise. + (find_gdb_breakpoint): Likewise. + (set_gdb_breakpoint_1): Likewise. + (set_gdb_breakpoint): Likewise. + (delete_gdb_breakpoint_1): Likewise. + (delete_gdb_breakpoint): Likewise. + (uninsert_raw_breakpoint): Likewise. + (reinsert_raw_breakpoint): Likewise. + (set_breakpoint_data): Remove. + (validate_inserted_breakpoint): Adjust for kind call bp_size,bp_opcode. + (check_mem_read): Adjust for kind call bp_size. + (check_mem_write): Adjust for kind call bp_size,bp_opcode. + (clone_one_breakpoint): Adjust for kind. + * mem-break.h (set_gdb_breakpoint): Likewise. + (delete_gdb_breakpoint): Likewise. + * server.c (process_serial_event): Likewise. + +2015-10-21 Antoine Tremblay <antoine.tremblay@ericsson.com> + + * linux-aarch64-low.c (aarch64_sw_breakpoint_from_kind): New function. + (struct linux_target_ops) <breakpoint>: Remove. + (struct linux_target_ops) <breakpoint_len>: Remove. + (struct linux_target_ops) <breakpoint_kind_from_pc>: Initialize field. + (struct linux_target_ops) <sw_breakpoint_from_kind>: Initialize field. + * linux-arm-low.c (arm_breakpoint_kind_from_pc): New function. + (arm_sw_breakpoint_from_kind): New function. + * linux-bfin-low.c (bfin_sw_breakpoint_from_kind): New function. + (struct linux_target_ops) <breakpoint>: Remove. + (struct linux_target_ops) <breakpoint_len>: Remove. + (struct linux_target_ops) <breakpoint_kind_from_pc>: Initialize field. + (struct linux_target_ops) <sw_breakpoint_from_kind>: Initialize field. + * linux-cris-low.c (cris_sw_breakpoint_from_kind): New function. + (struct linux_target_ops) <breakpoint>: Remove. + (struct linux_target_ops) <breakpoint_len>: Remove. + (struct linux_target_ops) <breakpoint_kind_from_pc>: Initialize field. + (struct linux_target_ops) <sw_breakpoint_from_kind>: Initialize field. + * linux-crisv32-low.c (cris_sw_breakpoint_from_kind): New function. + (struct linux_target_ops) <breakpoint>: Remove. + (struct linux_target_ops) <breakpoint_len>: Remove. + (struct linux_target_ops) <breakpoint_kind_from_pc>: Initialize field. + (struct linux_target_ops) <sw_breakpoint_from_kind>: Initialize field. + * linux-low.c (linux_wait_1): Call breakpoint_kind_from_pc + and sw_breakpoint_from_kind to increment the pc. + (linux_breakpoint_kind_from_pc): New function. + (linux_sw_breakpoint_from_kind): New function. + (struct target_ops) <sw_breakpoint_from_kind>: Initialize field. + (initialize_low): Call breakpoint_kind_from_pc and + sw_breakpoint_from_kind to replace breakpoint_data/len. + * linux-low.h (struct linux_target_ops) <breakpoint_kind_from_pc>: + New field. + (struct linux_target_ops) <sw_breakpoint_from_kind>: Likewise. + * linux-m32r-low.c (m32r_sw_breakpoint_from_kind): New function. + (struct linux_target_ops) <breakpoint>: Remove. + (struct linux_target_ops) <breakpoint_len>: Remove. + (struct linux_target_ops) <breakpoint_kind_from_pc>: Initialize field. + (struct linux_target_ops) <sw_breakpoint_from_kind>: Initialize field. + * linux-m68k-low.c (m68k_sw_breakpoint_from_kind): New function. + (struct linux_target_ops) <breakpoint>: Remove. + (struct linux_target_ops) <breakpoint_len>: Remove. + (struct linux_target_ops) <breakpoint_kind_from_pc>: Initialize field. + (struct linux_target_ops) <sw_breakpoint_from_kind>: Initialize field. + * linux-mips-low.c (mips_sw_breakpoint_from_kind): New function. + (struct linux_target_ops) <breakpoint>: Remove. + (struct linux_target_ops) <breakpoint_len>: Remove. + (struct linux_target_ops) <breakpoint_kind_from_pc>: Initialize field. + (struct linux_target_ops) <sw_breakpoint_from_kind>: Initialize field. + * linux-nios2-low.c (nios2_sw_breakpoint_from_kind): New function. + (struct linux_target_ops) <breakpoint>: Remove. + (struct linux_target_ops) <breakpoint_len>: Remove. + (struct linux_target_ops) <breakpoint_kind_from_pc>: Initialize field. + (struct linux_target_ops) <sw_breakpoint_from_kind>: Initialize field. + * linux-ppc-low.c (ppc_sw_breakpoint_from_kind): New function. + (struct linux_target_ops) <breakpoint>: Remove. + (struct linux_target_ops) <breakpoint_len>: Remove. + (struct linux_target_ops) <breakpoint_kind_from_pc>: Initialize field. + (struct linux_target_ops) <sw_breakpoint_from_kind>: Initialize field. + * linux-s390-low.c (s390_sw_breakpoint_from_kind): New function. + (struct linux_target_ops) <breakpoint>: Remove. + (struct linux_target_ops) <breakpoint_len>: Remove. + (struct linux_target_ops) <breakpoint_kind_from_pc>: Initialize field. + (struct linux_target_ops) <sw_breakpoint_from_kind>: Initialize field. + * linux-sh-low.c (sh_sw_breakpoint_from_kind): New function. + (struct linux_target_ops) <breakpoint>: Remove. + (struct linux_target_ops) <breakpoint_len>: Remove. + (struct linux_target_ops) <breakpoint_kind_from_pc>: Initialize field. + (struct linux_target_ops) <sw_breakpoint_from_kind>: Initialize field. + * linux-sparc-low.c (sparc_sw_breakpoint_from_kind): New function. + (struct linux_target_ops) <breakpoint>: Remove. + (struct linux_target_ops) <breakpoint_len>: Remove. + (struct linux_target_ops) <breakpoint_kind_from_pc>: Initialize field. + (struct linux_target_ops) <sw_breakpoint_from_kind>: Initialize field. + * linux-tic6x-low.c (tic6x_sw_breakpoint_from_kind): New function. + (struct linux_target_ops) <breakpoint>: Remove. + (struct linux_target_ops) <breakpoint_len>: Remove. + (struct linux_target_ops) <breakpoint_kind_from_pc>: Initialize field. + (struct linux_target_ops) <sw_breakpoint_from_kind>: Initialize field. + * linux-tile-low.c (tile_sw_breakpoint_from_kind): New function. + * linux-x86-low.c (x86_sw_breakpoint_from_kind): New function. + (struct linux_target_ops) <breakpoint>: Remove. + (struct linux_target_ops) <breakpoint_len>: Remove. + (struct linux_target_ops) <breakpoint_kind_from_pc>: Initialize field. + (struct linux_target_ops) <sw_breakpoint_from_kind>: Initialize field. + * linux-xtensa-low.c (xtensa_sw_breakpoint_from_kind) New function. + (struct linux_target_ops) <breakpoint>: Remove. + (struct linux_target_ops) <breakpoint_len>: Remove. + (struct linux_target_ops) <breakpoint_kind_from_pc>: Initialize field. + (struct linux_target_ops) <sw_breakpoint_from_kind>: Initialize field. + +2015-10-21 Antoine Tremblay <antoine.tremblay@ericsson.com> + + * linux-cris-low.c (cris_get_pc): Remove void arg. + +2015-10-16 Aleksandar Ristovski <aristovski@qnx.com> + + * gdbserver/nto-low.c (nto_insert_point, nto_remove_point): Fix + variable name. + +2015-10-16 Aleksandar Ristovski <aristovski@qnx.com> + + * inferiors.c (thread_pid_matches_callback): New function. + (find_thread_process): New function. + (remove_thread): Reset current_thread. + (remove_process): Assert threads have been removed first. + +2015-10-15 Yao Qi <yao.qi@linaro.org> + + * linux-aarch64-low.c (aarch64_insert_point): Set len to 2 + if it is 3. + (aarch64_remove_point): Likewise. + * regcache.c (regcache_register_size): New function. + +2015-10-12 Yao Qi <yao.qi@linaro.org> + + * linux-aarch64-low.c: Update all callers as emit_load_store + is renamed to aarch64_emit_load_store. + +2015-10-12 Yao Qi <yao.qi@linaro.org> + + * linux-aarch64-low.c: Update all callers of function renaming + from emit_insn to aarch64_emit_insn. + +2015-10-12 Yao Qi <yao.qi@linaro.org> + + * linux-aarch64-low.c (enum aarch64_opcodes): Move to + arch/aarch64-insn.h. + (struct aarch64_memory_operand): Likewise. + (ENCODE): Likewise. + (emit_insn): Move to arch/aarch64-insn.c. + (emit_b, emit_bcond, emit_cb, emit_tb): Remove. + (emit_load_store): Move to arch/aarch64-insn.c. + (emit_ldr, emit_ldrb, emit_ldrsw, emit_nop): Remove. + (can_encode_int32): Remove. + +2015-10-12 Yao Qi <yao.qi@linaro.org> + + * linux-aarch64-low.c (extract_signed_bitfield): Remove. + (aarch64_decode_ldr_literal): Move to gdb/arch/aarch64-insn.c. + (aarch64_relocate_instruction): Likewise. + (struct aarch64_insn_data): Move to gdb/arch/aarch64-insn.h. + (struct aarch64_insn_visitor): Likewise. + +2015-10-12 Yao Qi <yao.qi@linaro.org> + + * linux-aarch64-low.c (struct aarch64_insn_data): New. + (struct aarch64_insn_visitor): New. + (struct aarch64_insn_relocation_data): New. + (aarch64_ftrace_insn_reloc_b): New function. + (aarch64_ftrace_insn_reloc_b_cond): Likewise. + (aarch64_ftrace_insn_reloc_cb): Likewise. + (aarch64_ftrace_insn_reloc_tb): Likewise. + (aarch64_ftrace_insn_reloc_adr): Likewise. + (aarch64_ftrace_insn_reloc_ldr_literal): Likewise. + (aarch64_ftrace_insn_reloc_others): Likewise. + (visitor): New. + (aarch64_relocate_instruction): Use visitor. + +2015-10-12 Yao Qi <yao.qi@linaro.org> + + * linux-aarch64-low.c (aarch64_relocate_instruction): Return + int. Add argument buf. + (aarch64_install_fast_tracepoint_jump_pad): Pass buf to + aarch64_relocate_instruction. + +2015-10-12 Yao Qi <yao.qi@linaro.org> + + * linux-aarch64-low.c (aarch64_relocate_instruction): Add + argument insn. Remove local variable insn. Don't call + target_read_uint32. + (aarch64_install_fast_tracepoint_jump_pad): Call + target_read_uint32. + +2015-09-30 Yao Qi <yao.qi@linaro.org> + + * linux-aarch64-low.c (emit_movk): Shorten a long line. + (emit_load_store_pair): Likewise. + +2015-09-25 Simon Marchi <simon.marchi@ericsson.com> + + * dll.c (match_dll): Add cast(s). + (unloaded_dll): Likewise. + * linux-low.c (second_thread_of_pid_p): Likewise. + (delete_lwp_callback): Likewise. + (count_events_callback): Likewise. + (select_event_lwp_callback): Likewise. + (linux_set_resume_request): Likewise. + * server.c (accumulate_file_name_length): Likewise. + (emit_dll_description): Likewise. + (handle_qxfer_threads_worker): Likewise. + (visit_actioned_threads): Likewise. + * thread-db.c (any_thread_of): Likewise. + * tracepoint.c (same_process_p): Likewise. + (match_blocktype): Likewise. + (build_traceframe_info_xml): Likewise. + +2015-09-25 Simon Marchi <simon.marchi@ericsson.com> + + * ax.c (gdb_parse_agent_expr): Add cast to allocation result + assignment. + (gdb_unparse_agent_expr): Likewise. + * hostio.c (require_data): Likewise. + (handle_pread): Likewise. + * linux-low.c (disable_regset): Likewise. + (fetch_register): Likewise. + (store_register): Likewise. + (get_dynamic): Likewise. + (linux_qxfer_libraries_svr4): Likewise. + * mem-break.c (delete_fast_tracepoint_jump): Likewise. + (set_fast_tracepoint_jump): Likewise. + (uninsert_fast_tracepoint_jumps_at): Likewise. + (reinsert_fast_tracepoint_jumps_at): Likewise. + (validate_inserted_breakpoint): Likewise. + (clone_agent_expr): Likewise. + * regcache.c (init_register_cache): Likewise. + * remote-utils.c (putpkt_binary_1): Likewise. + (decode_M_packet): Likewise. + (decode_X_packet): Likewise. + (look_up_one_symbol): Likewise. + (relocate_instruction): Likewise. + (monitor_output): Likewise. + * server.c (handle_search_memory): Likewise. + (handle_qxfer_exec_file): Likewise. + (handle_qxfer_libraries): Likewise. + (handle_qxfer): Likewise. + (handle_query): Likewise. + (handle_v_cont): Likewise. + (handle_v_run): Likewise. + (captured_main): Likewise. + * target.c (write_inferior_memory): Likewise. + * thread-db.c (try_thread_db_load_from_dir): Likewise. + * tracepoint.c (init_trace_buffer): Likewise. + (add_tracepoint_action): Likewise. + (add_traceframe): Likewise. + (add_traceframe_block): Likewise. + (cmd_qtdpsrc): Likewise. + (cmd_qtdv): Likewise. + (cmd_qtstatus): Likewise. + (response_source): Likewise. + (response_tsv): Likewise. + (cmd_qtnotes): Likewise. + (gdb_collect): Likewise. + (initialize_tracepoint): Likewise. + +2015-09-21 Pierre Langlois <pierre.langlois@arm.com> + + * linux-aarch64-low-.c: Include ax.h and tracepoint.h. + (enum aarch64_opcodes) <RET>, <SUBS>, <AND>, <ORR>, <ORN>, + <EOR>, <LSLV>, <LSRV>, <ASRV>, <SBFM>, <UBFM>, <CSINC>, <MUL>, + <NOP>: New. + (enum aarch64_condition_codes): New enum. + (w0): New static global. + (fp): Likewise. + (lr): Likewise. + (struct aarch64_memory_operand) <type>: New + MEMORY_OPERAND_POSTINDEX type. + (postindex_memory_operand): New helper function. + (emit_ret): New function. + (emit_load_store_pair): New function, factored out of emit_stp + with support for MEMORY_OPERAND_POSTINDEX. + (emit_stp): Rewrite using emit_load_store_pair. + (emit_ldp): New function. + (emit_load_store): Likewise. + (emit_ldr): Mention post-index instruction in comment. + (emit_ldrh): New function. + (emit_ldrb): New function. + (emit_ldrsw): Mention post-index instruction in comment. + (emit_str): Likewise. + (emit_subs): New function. + (emit_cmp): Likewise. + (emit_and): Likewise. + (emit_orr): Likewise. + (emit_orn): Likewise. + (emit_eor): Likewise. + (emit_mvn): Likewise. + (emit_lslv): Likewise. + (emit_lsrv): Likewise. + (emit_asrv): Likewise. + (emit_mul): Likewise. + (emit_sbfm): Likewise. + (emit_sbfx): Likewise. + (emit_ubfm): Likewise. + (emit_ubfx): Likewise. + (emit_csinc): Likewise. + (emit_cset): Likewise. + (emit_nop): Likewise. + (emit_ops_insns): New helper function. + (emit_pop): Likewise. + (emit_push): Likewise. + (aarch64_emit_prologue): New function. + (aarch64_emit_epilogue): Likewise. + (aarch64_emit_add): Likewise. + (aarch64_emit_sub): Likewise. + (aarch64_emit_mul): Likewise. + (aarch64_emit_lsh): Likewise. + (aarch64_emit_rsh_signed): Likewise. + (aarch64_emit_rsh_unsigned): Likewise. + (aarch64_emit_ext): Likewise. + (aarch64_emit_log_not): Likewise. + (aarch64_emit_bit_and): Likewise. + (aarch64_emit_bit_or): Likewise. + (aarch64_emit_bit_xor): Likewise. + (aarch64_emit_bit_not): Likewise. + (aarch64_emit_equal): Likewise. + (aarch64_emit_less_signed): Likewise. + (aarch64_emit_less_unsigned): Likewise. + (aarch64_emit_ref): Likewise. + (aarch64_emit_if_goto): Likewise. + (aarch64_emit_goto): Likewise. + (aarch64_write_goto_address): Likewise. + (aarch64_emit_const): Likewise. + (aarch64_emit_call): Likewise. + (aarch64_emit_reg): Likewise. + (aarch64_emit_pop): Likewise. + (aarch64_emit_stack_flush): Likewise. + (aarch64_emit_zero_ext): Likewise. + (aarch64_emit_swap): Likewise. + (aarch64_emit_stack_adjust): Likewise. + (aarch64_emit_int_call_1): Likewise. + (aarch64_emit_void_call_2): Likewise. + (aarch64_emit_eq_goto): Likewise. + (aarch64_emit_ne_goto): Likewise. + (aarch64_emit_lt_goto): Likewise. + (aarch64_emit_le_goto): Likewise. + (aarch64_emit_gt_goto): Likewise. + (aarch64_emit_ge_got): Likewise. + (aarch64_emit_ops_impl): New static global variable. + (aarch64_emit_ops): New target function, return + &aarch64_emit_ops_impl. + (struct linux_target_ops): Install it. + +2015-09-21 Pierre Langlois <pierre.langlois@arm.com> + + * Makefile.in (linux-aarch64-ipa.o, aarch64-ipa.o): New rules. + * configure.srv (aarch64*-*-linux*): Add linux-aarch64-ipa.o and + aarch64-ipa.o. + * linux-aarch64-ipa.c: New file. + * linux-aarch64-low.c: Include arch/aarch64-insn.h, inttypes.h + and endian.h. + (aarch64_get_thread_area): New target method. + (extract_signed_bitfield): New helper function. + (aarch64_decode_ldr_literal): New function. + (enum aarch64_opcodes): New enum. + (struct aarch64_register): New struct. + (struct aarch64_operand): New struct. + (x0): New static global. + (x1): Likewise. + (x2): Likewise. + (x3): Likewise. + (x4): Likewise. + (w2): Likewise. + (ip0): Likewise. + (sp): Likewise. + (xzr): Likewise. + (aarch64_register): New helper function. + (register_operand): Likewise. + (immediate_operand): Likewise. + (struct aarch64_memory_operand): New struct. + (offset_memory_operand): New helper function. + (preindex_memory_operand): Likewise. + (enum aarch64_system_control_registers): New enum. + (ENCODE): New macro. + (emit_insn): New helper function. + (emit_b): New function. + (emit_bcond): Likewise. + (emit_cb): Likewise. + (emit_tb): Likewise. + (emit_blr): Likewise. + (emit_stp): Likewise. + (emit_ldp_q_offset): Likewise. + (emit_stp_q_offset): Likewise. + (emit_load_store): Likewise. + (emit_ldr): Likewise. + (emit_ldrsw): Likewise. + (emit_str): Likewise. + (emit_ldaxr): Likewise. + (emit_stxr): Likewise. + (emit_stlr): Likewise. + (emit_data_processing_reg): Likewise. + (emit_data_processing): Likewise. + (emit_add): Likewise. + (emit_sub): Likewise. + (emit_mov): Likewise. + (emit_movk): Likewise. + (emit_mov_addr): Likewise. + (emit_mrs): Likewise. + (emit_msr): Likewise. + (emit_sevl): Likewise. + (emit_wfe): Likewise. + (append_insns): Likewise. + (can_encode_int32_in): New helper function. + (aarch64_relocate_instruction): New function. + (aarch64_install_fast_tracepoint_jump_pad): Likewise. + (aarch64_get_min_fast_tracepoint_insn_len): Likewise. + (struct linux_target_ops): Install aarch64_get_thread_area, + aarch64_install_fast_tracepoint_jump_pad and + aarch64_get_min_fast_tracepoint_insn_len. + +2015-09-21 Pierre Langlois <pierre.langlois@arm.com> + + * Makefile.in (aarch64-insn.o): New rule. + * configure.srv (aarch64*-*-linux*): Add aarch64-insn.o. + +2015-09-21 Yao Qi <yao.qi@linaro.org> + + * ax.c [!IN_PROCESS_AGENT] (gdb_agent_op_sizes): Define it. + +2015-09-21 Yao Qi <yao.qi@linaro.org> + + * tracepoint.c (max_jump_pad_size): Remove. + +2015-09-18 Yao Qi <yao.qi@linaro.org> + + * linux-aarch64-low.c: Don't include sys/uio.h. + (ps_get_thread_area): Call aarch64_ps_get_thread_area. + +2015-09-16 Wei-cheng Wang <cole945@gmail.com> + + * tracepoint.c (eval_result_type): Change prototype. + (condition_true_at_tracepoint): Fix argument to compiled_cond. + +2015-09-15 Pedro Alves <palves@redhat.com> + + * remote-utils.c (prepare_resume_reply) <TARGET_WAITKIND_EXECD>: + Check whether to report exec events instead of checking whether + multiprocess is enabled. + +2015-09-15 Pedro Alves <palves@redhat.com> + + PR remote/18965 + * remote-utils.c (prepare_resume_reply): Merge + TARGET_WAITKIND_VFORK_DONE switch case with the + TARGET_WAITKIND_FORKED case. + +2015-09-15 Yao Qi <yao.qi@linaro.org> + + * server.c (handle_query): Check string comparison using + "else if" instead of "if". + +2015-09-15 Yao Qi <yao.qi@linaro.org> + + * server.c (vCont_supported): New global variable. + (handle_query): Set vCont_supported to 1 if "vContSupported+" + matches. Append ";vContSupported+" to own_buf. + (handle_v_requests): Append ";s;S" to own_buf if target supports + hardware single step or vCont_supported is false. + (capture_main): Set vCont_supported to zero. + +2015-09-15 Yao Qi <yao.qi@linaro.org> + + * linux-low.c (linux_supports_conditional_breakpoints): Rename + it to ... + (linux_supports_hardware_single_step): ... New function. + (linux_target_ops): Update. + * lynx-low.c (lynx_target_ops): Set field + supports_hardware_single_step to target_can_do_hardware_single_step. + * nto-low.c (nto_target_ops): Likewise. + * spu-low.c (spu_target_ops): Likewise. + * win32-low.c (win32_target_ops): Likewise. + * target.c (target_can_do_hardware_single_step): New function. + * target.h (struct target_ops) <supports_conditional_breakpoints>: + Remove. <supports_hardware_single_step>: New field. + (target_supports_conditional_breakpoints): Remove. + (target_supports_hardware_single_step): New macro. + (target_can_do_hardware_single_step): Declare. + * server.c (handle_query): Use target_supports_hardware_single_step + instead of target_supports_conditional_breakpoints. + +2015-09-15 Yao Qi <yao.qi@linaro.org> + + * linux-aarch64-low.c (aarch64_linux_siginfo_fixup): New + function. + (struct linux_target_ops the_low_target): Install + aarch64_linux_siginfo_fixup. + +2015-09-11 Don Breazeal <donb@codesourcery.com> + Luis Machado <lgustavo@codesourcery.com> + + * linux-low.c (linux_mourn): Static declaration. + (linux_arch_setup): Move in front of + handle_extended_wait. + (linux_arch_setup_thread): New function. + (handle_extended_wait): Handle exec events. Call + linux_arch_setup_thread. Make event_lwp argument a + pointer-to-a-pointer. + (check_zombie_leaders): Do not check stopped threads. + (linux_low_ptrace_options): Add PTRACE_O_TRACEEXEC. + (linux_low_filter_event): Add lwp and thread for exec'ing + non-leader thread if leader thread has been deleted. + Refactor code into linux_arch_setup_thread and call it. + Pass child lwp pointer by reference to handle_extended_wait. + (linux_wait_for_event_filtered): Update comment. + (linux_wait_1): Prevent clobbering exec event status. + (linux_supports_exec_events): New function. + (linux_target_ops) <supports_exec_events>: Initialize new member. + * lynx-low.c (lynx_target_ops) <supports_exec_events>: Initialize + new member. + * remote-utils.c (prepare_resume_reply): New stop reason 'exec'. + * server.c (report_exec_events): New global variable. + (handle_query): Handle qSupported query for exec-events feature. + (captured_main): Initialize report_exec_events. + * server.h (report_exec_events): Declare new global variable. + * target.h (struct target_ops) <supports_exec_events>: New + member. + (target_supports_exec_events): New macro. + * win32-low.c (win32_target_ops) <supports_exec_events>: + Initialize new member. + +2015-09-09 Markus Metzger <markus.t.metzger@intel.com> + + * linux-low.c (linux_low_enable_btrace): Remove. + (linux_target_ops): Replace linux_low_enable_btrace with + linux_enable_btrace. + +2015-09-03 Yao Qi <yao.qi@linaro.org> + + * linux-aarch64-low.c (aarch64_insert_point): Call + aarch64_handle_watchpoint if aarch64_linux_region_ok_for_watchpoint + returns true. + +2015-08-27 Ulrich Weigand <Ulrich.Weigand@de.ibm.com> + + * linux-low.c (check_stopped_by_breakpoint): Use + GDB_ARCH_IS_TRAP_BRKPT instead of GDB_ARCH_TRAP_BRKPT. + +2015-08-27 Pedro Alves <palves@redhat.com> + + * proc-service.c (ps_pdwrite): Return PS_ERR/PS_OK explicily. + +2015-08-26 Simon Marchi <simon.marchi@ericsson.com> + + * ax.c (gdb_parse_agent_expr): Replace xmalloc-family function with + the XNEW-family equivalent. + (compile_bytecodes): Likewise. + * dll.c (loaded_dll): Likewise. + * event-loop.c (append_callback_event): Likewise. + (create_file_handler): Likewise. + (create_file_event): Likewise. + * hostio.c (handle_open): Likewise. + * inferiors.c (add_thread): Likewise. + (add_process): Likewise. + * linux-aarch64-low.c (aarch64_linux_new_process): Likewise. + * linux-arm-low.c (arm_new_process): Likewise. + (arm_new_thread): Likewise. + * linux-low.c (add_to_pid_list): Likewise. + (linux_add_process): Likewise. + (handle_extended_wait): Likewise. + (add_lwp): Likewise. + (enqueue_one_deferred_signal): Likewise. + (enqueue_pending_signal): Likewise. + (linux_resume_one_lwp_throw): Likewise. + (linux_resume_one_thread): Likewise. + (linux_read_memory): Likewise. + (linux_write_memory): Likewise. + * linux-mips-low.c (mips_linux_new_process): Likewise. + (mips_linux_new_thread): Likewise. + (mips_add_watchpoint): Likewise. + * linux-x86-low.c (initialize_low_arch): Likewise. + * lynx-low.c (lynx_add_process): Likewise. + * mem-break.c (set_raw_breakpoint_at): Likewise. + (set_breakpoint): Likewise. + (add_condition_to_breakpoint): Likewise. + (add_commands_to_breakpoint): Likewise. + (clone_agent_expr): Likewise. + (clone_one_breakpoint): Likewise. + * regcache.c (new_register_cache): Likewise. + * remote-utils.c (look_up_one_symbol): Likewise. + * server.c (queue_stop_reply): Likewise. + (start_inferior): Likewise. + (queue_stop_reply_callback): Likewise. + (handle_target_event): Likewise. + * spu-low.c (fetch_ppc_memory): Likewise. + (store_ppc_memory): Likewise. + * target.c (set_target_ops): Likewise. + * thread-db.c (thread_db_load_search): Likewise. + (try_thread_db_load_1): Likewise. + * tracepoint.c (add_tracepoint): Likewise. + (add_tracepoint_action): Likewise. + (create_trace_state_variable): Likewise. + (cmd_qtdpsrc): Likewise. + (cmd_qtro): Likewise. + (add_while_stepping_state): Likewise. + * win32-low.c (child_add_thread): Likewise. + (get_image_name): Likewise. + +2015-08-25 Yao Qi <yao.qi@linaro.org> + + * linux-aarch64-low.c (aarch64_linux_new_thread): Remove. + +2015-08-25 Yao Qi <yao.qi@linaro.org> + + * Makefile.in (aarch64-linux.o): New rule. + * configure.srv (aarch64*-*-linux*): Append aarch64-linux.o to + srv_tgtobj. + * linux-aarch64-low.c: Include nat/aarch64-linux.h. + (aarch64_init_debug_reg_state): Make it extern. + (aarch64_linux_prepare_to_resume): Remove. + +2015-08-25 Yao Qi <yao.qi@linaro.org> + + * linux-aarch64-low.c (aarch64_linux_prepare_to_resume): Use + lwp_arch_private_info and ptid_of_lwp. + +2015-08-25 Yao Qi <yao.qi@linaro.org> + + * linux-aarch64-low.c (aarch64_get_debug_reg_state): Add argument pid. + Find proc_info by find_process_pid. All callers updated. + +2015-08-25 Yao Qi <yao.qi@linaro.org> + + * linux-aarch64-low.c (struct arch64_dr_update_callback_param): + Remove. + (debug_reg_change_callback): Remove. + (aarch64_notify_debug_reg_change): Remove. + +2015-08-25 Yao Qi <yao.qi@linaro.org> + + * linux-aarch64-low.c (aarch64_notify_debug_reg_change): + Call current_lwp_ptid. + +2015-08-25 Yao Qi <yao.qi@linaro.org> + + * linux-aarch64-low.c (debug_reg_change_callback): Use + debug_printf. + +2015-08-25 Yao Qi <yao.qi@linaro.org> + + * linux-aarch64-low.c (debug_reg_change_callback): Use phex. + +2015-08-25 Yao Qi <yao.qi@linaro.org> + + * linux-aarch64-low.c (debug_reg_change_callback): Remove comments. + +2015-08-25 Yao Qi <yao.qi@linaro.org> + + * linux-aarch64-low.c (debug_reg_change_callback): Re-indent + the code. + +2015-08-25 Yao Qi <yao.qi@linaro.org> + + * linux-aarch64-low.c (aarch64_dr_update_callback_param) <pid>: + Remove. + (debug_reg_change_callback): Remove argument entry and add argument + lwp. Remove local variable thread. Don't print thread id in the + debugging output. Don't check whether pid of thread equals to pid. + (aarch64_notify_debug_reg_change): Don't set param.pid. Call + iterate_over_lwps instead find_inferior. + +2015-08-24 Pedro Alves <palves@redhat.com> + + * inferiors.c (get_first_process): New function. + * inferiors.h (get_first_process): New declaration. + * remote-utils.c (read_ptid): Default to the first process in the + list, instead of to the current thread's process. + +2015-08-24 Pedro Alves <palves@redhat.com> + + * debug.c: Include gdb_sys_time.h instead of sys/time.h. + * event-loop.c: Likewise. + * remote-utils.c: Likewise. + * tracepoint.c: Likewise. + +2015-08-24 Pedro Alves <palves@redhat.com> + + * spu-low.c (spu_request_interrupt): Use lwpid_of instead of + ptid_get_lwp. + +2015-08-21 Pedro Alves <palves@redhat.com> + + * ax.c (gdb_eval_agent_expr): Return expr_eval_unhandled_opcode + instead of literal 1. + +2015-08-21 Pedro Alves <palves@redhat.com> + + * tdesc.c (default_description): Explicitly zero-initialize. + +2015-08-21 Pedro Alves <palves@redhat.com> + + PR gdb/18749 + * inferiors.c (remove_thread): Discard any pending stop reply for + this thread. + * server.c (remove_all_on_match_pid): Rename to ... + (remove_all_on_match_ptid): ... this. Work with a filter ptid + instead of a pid. + (discard_queued_stop_replies): Change parameter to a ptid. Now + extern. + (handle_v_kill, kill_inferior_callback, captured_main) + (process_serial_event): Adjust. + * server.h (discard_queued_stop_replies): Declare. + +2015-08-21 Pedro Alves <palves@redhat.com> + + * linux-low.c (wait_for_sigstop): Always switch to no thread + selected if the previously current thread dies. + * lynx-low.c (lynx_request_interrupt): Use the first thread's + process instead of the current thread's. + * remote-utils.c (input_interrupt): Don't check if there's no + current thread. + * server.c (gdb_read_memory, gdb_write_memory): If setting the + current thread to the general thread fails, error out. + (handle_qxfer_auxv, handle_qxfer_libraries) + (handle_qxfer_libraries_svr4, handle_qxfer_siginfo) + (handle_qxfer_spu, handle_qxfer_statictrace, handle_qxfer_fdpic) + (handle_query): Check if there's a thread selected instead of + checking whether there's any thread in the thread list. + (handle_qxfer_threads, handle_qxfer_btrace) + (handle_qxfer_btrace_conf): Don't error out early if there's no + thread in the thread list. + (handle_v_cont, myresume): Don't set the current thread to the + continue thread. + (process_serial_event) <Hg handling>: Also set thread_id if the + previous general thread is still alive. + (process_serial_event) <g/G handling>: If setting the current + thread to the general thread fails, error out. + * spu-low.c (spu_resume, spu_request_interrupt): Use the first + thread's lwp instead of the current thread's. + * target.c (set_desired_thread): If the desired thread was not + found, leave the current thread pointing to NULL. Return an int + (boolean) indicating success. + * target.h (set_desired_thread): Change return type to int. + +2015-08-20 Max Filippov <jcmvbkbc@gmail.com> + + * configure.srv (xtensa*-*-linux*): Add srv_linux_thread_db=yes. + * linux-xtensa-low.c (arch/xtensa.h gdb_proc_service.h): New + #includes. + (ps_get_thread_area): New function. + +2015-08-19 Gary Benson <gbenson@redhat.com> + + * hostio.c (handle_pread): Do not attempt to read more data + than hostio_reply_with_data can fit in a packet. + +2015-08-18 Joel Brobecker <brobecker@adacore.com> + + * linux-aarch32-low.c (NT_ARM_VFP): Define if not already defined. + +2015-08-14 Matthew Fortune <matthew.fortune@imgtec.com> + + * linux-low.c (get_r_debug): Handle DT_MIPS_RLD_MAP_REL. + +2015-08-06 Pedro Alves <palves@redhat.com> + + * tracepoint.c (expr_eval_result): Now an int. + +2015-08-06 Pedro Alves <palves@redhat.com> + + * gdbthread.h (struct regcache): Forward declare. + (struct thread_info) <regcache_data>: Now a struct regcache + pointer. + * inferiors.c (inferior_regcache_data) + (set_inferior_regcache_data): Now work with struct regcache + pointers. + * inferiors.h (struct regcache): Forward declare. + (inferior_regcache_data, set_inferior_regcache_data): Now work + with struct regcache pointers. + * regcache.c (get_thread_regcache, regcache_invalidate_thread) + (free_register_cache_thread): Remove struct regcache pointer + casts. + +2015-08-06 Pedro Alves <palves@redhat.com> + + * server.c (captured_main): On error, print the exception message + to stderr, and if run_once is set, throw a quit. + +2015-08-06 Pedro Alves <palves@redhat.com> + + * linux-low.c (move_out_of_jump_pad_callback): Temporarily switch + the current thread. + +2015-08-06 Pedro Alves <palves@redhat.com> + + * linux-low.c (linux_write_memory): Rewrite debug output to avoid + reading beyond the passed in buffer length. + +2015-08-06 Pierre Langlois <pierre.langlois@arm.com> + + * tracepoint.c (symbol_list) <required>: Remove. + +2015-08-06 Pedro Alves <palves@redhat.com> + + * linux-low.c (handle_extended_wait): Set the fork child's suspend + count if stopping and suspending threads. + (check_stopped_by_breakpoint): If stopped by trace, set the LWP's + stop reason to TARGET_STOPPED_BY_SINGLE_STEP. + (linux_detach): Complete an ongoing step-over. + (lwp_suspended_inc, lwp_suspended_decr): New functions. Use + throughout. + (resume_stopped_resumed_lwps): Don't resume a suspended thread. + (linux_wait_1): If passing a signal to the inferior after + finishing a step-over, unsuspend and re-resume all lwps. If we + see a single-step event but the thread should be continuing, don't + pass the trap to gdb. + (stuck_in_jump_pad_callback, move_out_of_jump_pad_callback): Use + internal_error instead of gdb_assert. + (enqueue_pending_signal): New function. + (check_ptrace_stopped_lwp_gone): Add debug output. + (start_step_over): Use internal_error instead of gdb_assert. + (complete_ongoing_step_over): New function. + (linux_resume_one_thread): Don't resume a suspended thread. + (proceed_one_lwp): If the LWP is stepping over a breakpoint, reset + it stepping. + +2015-08-06 Pedro Alves <palves@redhat.com> + + * linux-low.c (add_lwp): Set waitstatus to TARGET_WAITKIND_IGNORE. + (linux_thread_alive): Use lwp_is_marked_dead. + (extended_event_reported): Delete. + (linux_wait_1): Check if waitstatus is TARGET_WAITKIND_IGNORE + instead of extended_event_reported. + (mark_lwp_dead): Don't set the 'dead' flag. Store the waitstatus + as well. + (lwp_is_marked_dead): New function. + (lwp_running): Use lwp_is_marked_dead. + * linux-low.h: Delete 'dead' field, and update 'waitstatus's + comment. + +2015-08-06 Pedro Alves <palves@redhat.com> + + * linux-low.c (linux_wait_1): Move fork event output out of the + !report_to_gdb check. Pass event_child->waitstatus to + target_waitstatus_to_string instead of ourstatus. + +2015-08-04 Yao Qi <yao.qi@linaro.org> + + * linux-aarch64-low.c (aarch64_supports_tracepoints): Return 0 + if current_thread is 32 bit. + +2015-08-04 Yao Qi <yao.qi@linaro.org> + + * linux-aarch64-low.c (aarch64_supports_z_point_type): Return + 0 for Z_PACKET_SW_BP if it may be used in multi-arch debugging. + * server.c (extended_protocol): Remove "static". + * server.h (extended_protocol): Declare it. + +2015-08-04 Yao Qi <yao.qi@linaro.org> + + * linux-aarch64-low.c (aarch64_get_pc): Get PC register on + both aarch64 and aarch32. + (aarch64_set_pc): Likewise. + +2015-08-04 Yao Qi <yao.qi@linaro.org> + + * configure.srv (case aarch64*-*-linux*): Append arm-with-neon.o + to srv_regobj and append arm-core.xml arm-vfpv3.xml and + arm-with-neon.xml to srv_xmlfiles. + * linux-aarch64-low.c: Include linux-aarch32-low.h. + (is_64bit_tdesc): New function. + (aarch64_linux_read_description): New function. + (aarch64_arch_setup): Call aarch64_linux_read_description. + (regs_info): Rename to regs_info_aarch64. + (aarch64_regs_info): Return right regs_info. + (initialize_low_arch): Call initialize_low_arch_aarch32. + +2015-08-04 Yao Qi <yao.qi@linaro.org> + + * configure.srv (srv_tgtobj): Add linux-aarch32-low.o. + * linux-aarch32-low.c: New file. + * linux-aarch32-low.h: New file. + * linux-arm-low.c (arm_fill_gregset): Move it to + linux-aarch32-low.c. + (arm_store_gregset): Likewise. + (arm_fill_vfpregset): Call arm_fill_vfpregset_num + (arm_store_vfpregset): Call arm_store_vfpregset_num. + (arm_arch_setup): Check if PTRACE_GETREGSET works. + (regs_info): Rename to regs_info_arm. + (arm_regs_info): Return regs_info_aarch32 if + have_ptrace_getregset is 1 and target description is + arm_with_neon or arm_with_vfpv3. + (initialize_low_arch): Don't call init_registers_arm_with_neon. + Call initialize_low_arch_aarch32 instead. + +2015-08-04 Yao Qi <yao.qi@linaro.org> + + * linux-x86-low.c (have_ptrace_getregset): Move it to ... + * linux-low.c: ... here. + * linux-low.h (have_ptrace_getregset): Declare it. + +2015-08-04 Pedro Alves <palves@redhat.com> + + * thread-db.c (struct thread_db): Use new typedefs. + (try_thread_db_load_1): Define local TDB_DLSYM macro and use it in + CHK calls. + (disable_thread_event_reporting): Cast result of dlsym to + destination function pointer type. + (thread_db_mourn): Use td_ta_delete_ftype. + +2015-08-03 Sandra Loosemore <sandra@codesourcery.com> + + * linux-nios2-low.c (NIOS2_BREAKPOINT): Conditionalize for + arch variant. + (CDX_BREAKPOINT): Define for R2. + (nios2_breakpoint_at): Check for CDX_BREAKPOINT when R2. + (the_low_target): Add comments. + +2015-07-30 Yao Qi <yao.qi@linaro.org> + + * linux-arm-low.c (arm_hwcap): Remove it. + (arm_read_description): New local variable arm_hwcap. Don't + set arm_hwcap to zero. + +2015-07-30 Yao Qi <yao.qi@linaro.org> + + * linux-arm-low.c (arm_fill_wmmxregset): Don't use arm_hwcap. + Use regcache->tdesc instead. + (arm_store_wmmxregset): Likewise. + (arm_fill_vfpregset): Likewise. + (arm_store_vfpregset): Likewise. + +2015-07-30 Yao Qi <yao.qi@linaro.org> + + * linux-arm-low.c: Include arch/arm.h. + (arm_fill_gregset): Don't use arm_num_regs and arm_regmap. + (arm_store_gregset): Likewise. + +2015-07-29 Simon Marchi <simon.marchi@ericsson.com> + + * linux-mips-low.c (mips_linux_prepare_to_resume): Add NULL as + ptrace's 4th parameter. + +2015-07-27 Yao Qi <yao.qi@linaro.org> + + * configure.srv (case aarch64*-*-linux*): Don't set + srv_linux_usrregs. + +2015-07-24 Pedro Alves <palves@redhat.c: Likewise.om> + + * linux-aarch64-low.c: Include nat/gdb_ptrace.h instead of + sys/ptrace.h. + * linux-arm-low.c: Likewise. + * linux-cris-low.c: Likewise. + * linux-crisv32-low.c: Likewise. + * linux-low.c: Likewise. + * linux-m68k-low.c: Likewise. + * linux-mips-low.c: Likewise. + * linux-nios2-low.c: Likewise. + * linux-s390-low.c: Likewise. + * linux-sparc-low.c: Likewise. + * linux-tic6x-low.c: Likewise. + * linux-tile-low.c: Likewise. + * linux-x86-low.c: Likewise. + +2015-07-24 Pedro Alves <palves@redhat.com> + + * config.in: Regenerate. + * configure: Regenerate. + +2015-07-24 Pedro Alves <palves@redhat.com> + + * acinclude.m4: Include ../ptrace.m4. + * configure.ac: Call GDB_AC_PTRACE. + * config.in, configure: Regenerate. + +2015-07-24 Yao Qi <yao.qi@linaro.org> + + * linux-low.c (linux_create_inferior): Remove setting to + proc->priv->new_inferior. + (linux_attach): Likewise. + (linux_low_filter_event): Likewise. + * linux-low.h (struct process_info_private) <new_inferior>: Remove. + +2015-07-24 Yao Qi <yao.qi@linaro.org> + + * linux-low.c (linux_arch_setup): New function. + (linux_low_filter_event): If proc->tdesc is NULL and + proc->attached is true, call the_low_target.arch_setup. + Otherwise, keep status pending, and return. + (linux_resume_one_lwp_throw): Don't call get_pc if + thread->while_stepping isn't NULL. Don't call + get_thread_regcache if proc->tdesc is NULL. + (need_step_over_p): Return 0 if proc->tdesc is NULL. + (linux_target_ops): Install arch_setup. + * server.c (start_inferior): Call the_target->arch_setup. + * target.h (struct target_ops) <arch_setup>: New field. + (target_arch_setup): New marco. + * lynx-low.c (lynx_target_ops): Update. + * nto-low.c (nto_target_ops): Update. + * spu-low.c (spu_target_ops): Update. + * win32-low.c (win32_target_ops): Update. + +2015-07-24 Yao Qi <yao.qi@linaro.org> + + * linux-low.c (linux_add_process): Don't set + proc->priv->new_inferior. + (linux_create_inferior): Set proc->priv->new_inferior to 1. + (linux_attach): Likewise. + +2015-07-24 Yao Qi <yao.qi@linaro.org> + + * server.c (start_inferior): Code refactor. + +2015-07-24 Yao Qi <yao.qi@linaro.org> + + * server.c (process_serial_event): Set general_thread. + +2015-07-21 Yao Qi <yao.qi@linaro.org> + + * linux-aarch64-low.c (aarch64_arch_setup): Remove code and call + aarch64_linux_get_debug_reg_capacity. + +2015-07-17 Yao Qi <yao.qi@linaro.org> + + * Makefile.in (aarch64-linux-hw-point.o): New rule. + * configure.srv (srv_tgtobj): Append aarch64-linux-hw-point.o. + * linux-aarch64-low.c: Include nat/aarch64-linux-hw-point.h. + (AARCH64_HBP_MAX_NUM): Move to nat/aarch64-linux-hw-point.h. + (AARCH64_HWP_MAX_NUM, AARCH64_HBP_ALIGNMENT): Likewise. + (AARCH64_HWP_ALIGNMENT): Likewise. + (AARCH64_HWP_MAX_LEN_PER_REG): Likewise. + (AARCH64_DEBUG_NUM_SLOTS, AARCH64_DEBUG_ARCH): Likewise. + (aarch64_num_bp_regs, aarch64_num_wp_regs): Likewise. + (AARCH64_DEBUG_ARCH_V8, DR_MARK_ALL_CHANGED): Likewise. + (DR_MARK_N_CHANGED, DR_CLEAR_CHANGED): Likewise. + (DR_HAS_CHANGED, DR_N_HAS_CHANGE): Likewise. + (struct aarch64_debug_reg_state): Likewise. + (struct arch_lwp_info): Likewise. + (aarch64_align_watchpoint): Likewise. + (DR_CONTROL_ENABLED, DR_CONTROL_LENGTH): Likewise. + (aarch64_watchpoint_length): Likewise. + (aarch64_point_encode_ctrl_reg): Likewise + (aarch64_point_is_aligned): Likewise. + (aarch64_align_watchpoint): Likewise. + (aarch64_linux_set_debug_regs): + (aarch64_dr_state_insert_one_point): Likewise. + (aarch64_dr_state_remove_one_point): Likewise. + (aarch64_handle_breakpoint): Likewise. + (aarch64_handle_aligned_watchpoint): Likewise. + (aarch64_handle_unaligned_watchpoint): Likewise. + (aarch64_handle_watchpoint): Likewise. + +2015-07-17 Yao Qi <yao.qi@linaro.org> + + * linux-aarch64-low.c (aarch64_handle_breakpoint): Add argument state + and don't aarch64_get_debug_reg_state. All callers update. + (aarch64_handle_aligned_watchpoint): Likewise. + (aarch64_handle_unaligned_watchpoint): Likewise. + (aarch64_handle_watchpoint): Likewise. + (aarch64_insert_point): Call aarch64_get_debug_reg_state earlier. + (aarch64_remove_point): Likewise. + +2015-07-17 Yao Qi <yao.qi@linaro.org> + + * linux-aarch64-low.c (aarch64_show_debug_reg_state): Use + debug_printf. + (aarch64_handle_unaligned_watchpoint): Likewise. + +2015-07-15 Jan Kratochvil <jan.kratochvil@redhat.com> + + Revert the previous 3 commits: + Move gdb_regex* to common/ + Move linux_find_memory_regions_full & co. + gdbserver build-id attribute generator + +2015-07-15 Aleksandar Ristovski <aristovski@qnx.com + Jan Kratochvil <jan.kratochvil@redhat.com> + + gdbserver build-id attribute generator. + * linux-low.c (nat/linux-maps.h, search.h, rsp-low.h): Include. + (ElfXX_Ehdr, ElfXX_Phdr, ElfXX_Nhdr): New. + (ELFXX_FLD, ELFXX_SIZEOF, ELFXX_ROUNDUP, BUILD_ID_INVALID): New. + (find_phdr): New. + (get_dynamic): Use find_pdhr to traverse program headers. + (struct mapping_entry, mapping_entry_s, free_mapping_entry_vec) + (compare_mapping_entry_range, struct find_memory_region_callback_data) + (read_build_id, find_memory_region_callback, lrfind_mapping_entry) + (get_hex_build_id): New. + (linux_qxfer_libraries_svr4): Add optional build-id attribute + to reply XML document. + +2015-07-15 Aleksandar Ristovski <aristovski@qnx.com + Jan Kratochvil <jan.kratochvil@redhat.com> + + * target.c: Include target/target-utils.h and fcntl.h. + (target_fileio_read_stralloc_1_pread, target_fileio_read_stralloc_1) + (target_fileio_read_stralloc): New functions. + +2015-07-15 Jan Kratochvil <jan.kratochvil@redhat.com> + + * Makefile.in (OBS): Add gdb_regex.o. + (gdb_regex.o): New. + * config.in: Rebuilt. + * configure: Rebuilt. + +2015-07-15 Aleksandar Ristovski <aristovski@qnx.com + Jan Kratochvil <jan.kratochvil@redhat.com> + + Create empty nat/linux-maps.[ch] and common/target-utils.[ch]. + * Makefile.in (OBS): Add target-utils.o. + (linux-maps.o, target-utils.o): New. + * configure.srv (srv_linux_obj): Add linux-maps.o. + +2015-07-15 Pierre Langlois <pierre.langlois@arm.com> + + * linux-aarch64-low.c (aarch64_supports_range_stepping): New + function, return 1. + (the_low_target): Install it. + +2015-07-14 Pedro Alves <palves@redhat.com> + + * linux-low.c (kill_wait_lwp): Don't assert if waitpid fails. + Instead, ignore ECHILD, and throw an error for other errnos. + +2015-07-10 Pedro Alves <palves@redhat.com> + + * event-loop.c (struct callback_event) <data>: Change type to + gdb_client_data instance instead of gdb_client_data pointer. + (append_callback_event): Adjust. + +2015-07-10 Pierre Langlois <pierre.langlois@arm.com> + + * linux-aarch64-low.c: Add comments for each linux_target_ops + method. Remove comments already covered in target_ops and + linux_target_ops definitions. + (the_low_target): Add comments for each unimplemented method. + +2015-07-09 Yao Qi <yao.qi@linaro.org> + + * linux-aarch64-low.c (aarch64_regmap): Remove. + (aarch64_usrregs_info): Remove. + (regs_info): Set field usrregs to NULL. + +2015-07-02 Markus Metzger <markus.t.metzger@intel.com> + + * linux-low.c: Include "rsp-low.h" + (linux_low_encode_pt_config, linux_low_encode_raw): New. + (linux_low_read_btrace): Support BTRACE_FORMAT_PT. + (linux_low_btrace_conf): Support BTRACE_FORMAT_PT. + (handle_btrace_enable_pt): New. + (handle_btrace_general_set): Support "pt". + (handle_btrace_conf_general_set): Support "pt:size". + +2015-06-29 Pierre Langlois <pierre.langlois@arm.com> + + * linux-aarch64-low.c (aarch64_supports_z_point_type): Enable for + Z_PACKET_SW_BP. + +2015-06-29 Pierre Langlois <pierre.langlois@arm.com> + + * linux-aarch64-low.c: Remove comment about endianness. + (aarch64_breakpoint): Change type to gdb_byte[]. Set to "brk #0". + (aarch64_breakpoint_at): Change type of insn to gdb_byte[]. Use + memcmp. + +2015-06-24 Gary Benson <gbenson@redhat.com> + + * linux-i386-ipa.c (stdint.h): Do not include. + * lynx-i386-low.c (stdint.h): Likewise. + * lynx-ppc-low.c (stdint.h): Likewise. + * mem-break.c (stdint.h): Likewise. + * thread-db.c (stdint.h): Likewise. + * tracepoint.c (stdint.h): Likewise. + * win32-low.c (stdint.h): Likewise. + +2015-06-18 Simon Marchi <simon.marchi@ericsson.com> + + * server.c (write_qxfer_response): Update call to + remote_escape_output. + +2015-06-15 Aleksandar Ristovski <aristovski@qnx.com + Jan Kratochvil <jan.kratochvil@redhat.com> + + Merge multiple hex conversions. + * gdbreplay.c (tohex): Rename to 'fromhex'. + (logchar): Use fromhex. + +2015-06-10 Jan Kratochvil <jan.kratochvil@redhat.com> + + * server.c (handle_qxfer_libraries): Set `version' attribute for + <library-list>. + +2015-06-10 Gary Benson <gbenson@redhat.com> + + * target.h (struct target_ops) <multifs_open>: New field. + <multifs_unlink>: Likewise. + <multifs_readlink>: Likewise. + * linux-low.c (nat/linux-namespaces.h): New include. + (linux_target_ops): Initialize the_target->multifs_open, + the_target->multifs_unlink and the_target->multifs_readlink. + * hostio.h (hostio_handle_new_gdb_connection): New declaration. + * hostio.c (hostio_fs_pid): New static variable. + (hostio_handle_new_gdb_connection): New function. + (handle_setfs): Likewise. + (handle_open): Use the_target->multifs_open as appropriate. + (handle_unlink): Use the_target->multifs_unlink as appropriate. + (handle_readlink): Use the_target->multifs_readlink as + appropriate. + (handle_vFile): Handle vFile:setfs packets. + * server.c (handle_query): Call hostio_handle_new_gdb_connection + after target_handle_new_gdb_connection. + +2015-06-10 Gary Benson <gbenson@redhat.com> + + * configure.ac (AC_CHECK_FUNCS): Add setns. + * config.in: Regenerate. + * configure: Likewise. + * Makefile.in (SFILES): Add nat/linux-namespaces.c. + (linux-namespaces.o): New rule. + * configure.srv (srv_linux_obj): Add linux-namespaces.o. + +2015-06-09 Gary Benson <gbenson@redhat.com> + + * hostio.c (handle_open): Process mode argument with + fileio_to_host_mode. + +2015-06-01 Yao Qi <yao.qi@linaro.org> + + * linux-s390-low.c (PTRACE_GETREGSET, PTRACE_SETREGSET): Remove. + * linux-x86-low.c: Likewise. + +2015-05-28 Don Breazeal <donb@codesourcery.com> + + * linux-low.c (handle_extended_wait): Initialize + thread_info.last_resume_kind for new fork children. + +2015-05-15 Pedro Alves <palves@redhat.com> + + * target.h (target_handle_new_gdb_connection): Rewrite using if + wrapped in do/while. + +2015-05-14 Joel Brobecker <brobecker@adacore.com> + + * configure.ac: Add prfpregset_t BFD_HAVE_SYS_PROCFS_TYPE check. + * configure, config.in: Regenerate. + * gdb_proc_service.h [HAVE_PRFPREGSET_T] (prfpregset_t): + Declare typedef. + +2015-05-12 Don Breazeal <donb@codesourcery.com> + + * linux-low.c (handle_extended_wait): Handle PTRACE_EVENT_FORK and + PTRACE_EVENT_VFORK_DONE. + (linux_low_ptrace_options, extended_event_reported): Add vfork + events. + * remote-utils.c (prepare_resume_reply): New stop reasons "vfork" + and "vforkdone" for RSP 'T' Stop Reply Packet. + * server.h (report_vfork_events): Declare + global variable. + +2015-05-12 Don Breazeal <donb@codesourcery.com> + + * linux-aarch64-low.c (aarch64_linux_new_fork): New function. + (the_low_target) <new_fork>: Initialize new member. + * linux-arm-low.c (arm_new_fork): New function. + (the_low_target) <new_fork>: Initialize new member. + * linux-low.c (handle_extended_wait): Call new target function + new_fork. + * linux-low.h (struct linux_target_ops) <new_fork>: New member. + * linux-mips-low.c (mips_add_watchpoint): New function + extracted from mips_insert_point. + (the_low_target) <new_fork>: Initialize new member. + (mips_linux_new_fork): New function. + (mips_insert_point): Call mips_add_watchpoint. + * linux-x86-low.c (x86_linux_new_fork): New function. + (the_low_target) <new_fork>: Initialize new member. + +2015-05-12 Don Breazeal <donb@codesourcery.com> + + * linux-low.c (handle_extended_wait): Implement return value, + rename argument 'event_child' to 'event_lwp', handle + PTRACE_EVENT_FORK, call internal_error for unrecognized event. + (linux_low_ptrace_options): New function. + (linux_low_filter_event): Call linux_low_ptrace_options, + use different argument fo linux_enable_event_reporting, + use return value from handle_extended_wait. + (extended_event_reported): New function. + (linux_wait_1): Call extended_event_reported and set + status to report fork events. + (linux_write_memory): Add pid to debug message. + (reset_lwp_ptrace_options_callback): New function. + (linux_handle_new_gdb_connection): New function. + (linux_target_ops): Initialize new structure member. + * linux-low.h (struct lwp_info) <waitstatus>: New member. + * lynx-low.c: Initialize new structure member. + * remote-utils.c (prepare_resume_reply): Implement stop reason + "fork" for "T" stop message. + * server.c (handle_query): Call handle_new_gdb_connection. + * server.h (report_fork_events): Declare global flag. + * target.h (struct target_ops) <handle_new_gdb_connection>: + New member. + (target_handle_new_gdb_connection): New macro. + * win32-low.c: Initialize new structure member. + +2015-05-12 Don Breazeal <donb@codesourcery.com> + + * mem-break.c (APPEND_TO_LIST): Define macro. + (clone_agent_expr): New function. + (clone_one_breakpoint): New function. + (clone_all_breakpoints): New function. + * mem-break.h: Declare new functions. + +2015-05-12 Don Breazeal <donb@codesourcery.com> + + * linux-low.c (linux_supports_fork_events): New function. + (linux_supports_vfork_events): New function. + (linux_target_ops): Initialize new structure members. + (initialize_low): Call linux_check_ptrace_features. + * lynx-low.c (lynx_target_ops): Initialize new structure + members. + * server.c (report_fork_events, report_vfork_events): + New global flags. + (handle_query): Add new features to qSupported packet and + response. + (captured_main): Initialize new global variables. + * target.h (struct target_ops) <supports_fork_events>: + New member. + <supports_vfork_events>: New member. + (target_supports_fork_events): New macro. + (target_supports_vfork_events): New macro. + * win32-low.c (win32_target_ops): Initialize new structure + members. + +2015-05-12 Gary Benson <gbenson@redhat.com> + + * server.c (handle_qxfer_exec_file): Use current process + if annex is empty. + +2015-05-08 Sandra Loosemore <sandra@codesourcery.com> + + * linux-nios2-low.c: Include elf/common.h. Adjust comments. + Remove HAVE_PTRACE_GETREGS conditionals. + (nios2_regsets): Use PTRACE_GETREGSET and PTRACE_SETREGSET + instead of PTRACE_GETREGS and PTRACE_SETREGS. + +2015-05-08 Yao Qi <yao.qi@linaro.org> + + * linux-low.c (linux_supports_conditional_breakpoints): New + function. + (linux_target_ops): Install new target method. + * lynx-low.c (lynx_target_ops): Install NULL hook for + supports_conditional_breakpoints. + * nto-low.c (nto_target_ops): Likewise. + * spu-low.c (spu_target_ops): Likewise. + * win32-low.c (win32_target_ops): Likewise. + * server.c (handle_query): Check + target_supports_conditional_breakpoints. + * target.h (struct target_ops) <supports_conditional_breakpoints>: + New field. + (target_supports_conditional_breakpoints): New macro. + +2015-05-06 Pedro Alves <palves@redhat.com> + + PR server/18081 + * server.c (start_inferior): If the process exits, mourn it. + +2015-04-21 Gary Benson <gbenson@redhat.com> + + * hostio.c (fileio_open_flags_to_host): Factored out to + fileio_to_host_openflags in common/fileio.c. Single use + updated. + +2015-04-17 Max Filippov <jcmvbkbc@gmail.com> + + * linux-xtensa-low.c (xtensa_fill_gregset) + (xtensa_store_gregset): Check XCHAL_HAVE_LOOPS instead of + XCHAL_HAVE_LOOP. + +2015-04-17 Max Filippov <jcmvbkbc@gmail.com> + + * linux-xtensa-low.c (xtensa_usrregs_info): Remove. + (regs_info): Replace usrregs pointer with NULL. + +2015-04-17 Gary Benson <gbenson@redhat.com> + + * target.h (struct target_ops) <pid_to_exec_file>: New field. + * linux-low.c (linux_target_ops): Initialize pid_to_exec_file. + * server.c (handle_qxfer_exec_file): New function. + (qxfer_packets): Add exec-file entry. + (handle_query): Report qXfer:exec-file:read as supported packet. + +2015-04-14 Romain Naour <romain.naour@openwide.fr> (tiny change) + + * linux-low.c (linux_read_offsets): Remove get_thread_lwp. + +2015-04-09 Gary Benson <gbenson@redhat.com> + + * hostio-errno.c (errno_to_fileio_error): Remove function. + Update caller to use remote_fileio_to_fio_error. + +2015-04-09 Yao Qi <yao.qi@linaro.org> + + * linux-low.c (linux_insert_point): Call + insert_memory_breakpoint if TYPE is raw_bkpt_type_sw. + (linux_remove_point): Call remove_memory_breakpoint if type is + raw_bkpt_type_sw. + * linux-x86-low.c (x86_insert_point): Don't call + insert_memory_breakpoint. + (x86_remove_point): Don't call remove_memory_breakpoint. + +2015-04-01 Pedro Alves <palves@redhat.com> + Cleber Rosa <crosa@redhat.com> + + * server.c (gdbserver_usage): Reorganize and extend the usage + message. + +2015-03-24 Pedro Alves <palves@redhat.com> + + * linux-low.c (check_stopped_by_breakpoint): Tweak debug log + output. Also dump TRAP_TRACE. + (linux_low_filter_event): In debug output, distinguish a + resume_stop SIGSTOP from a delayed SIGSTOP. + +2015-03-24 Gary Benson <gbenson@redhat.com> + + * linux-x86-low.c (x86_linux_new_thread): Moved to + nat/x86-linux.c. + (x86_linux_prepare_to_resume): Likewise. + +2015-03-24 Gary Benson <gbenson@redhat.com> + + * Makefile.in (x86-linux-dregs.o): New rule. + * configure.srv: Add x86-linux-dregs.o to relevant targets. + * linux-x86-low.c: Include nat/x86-linux-dregs.h. + (u_debugreg_offset): Moved to nat/x86-linux-dregs.c. + (x86_linux_dr_get): Likewise. + (x86_linux_dr_set): Likewise. + (update_debug_registers_callback): Likewise. + (x86_linux_dr_set_addr): Likewise. + (x86_linux_dr_get_addr): Likewise. + (x86_linux_dr_set_control): Likewise. + (x86_linux_dr_get_control): Likewise. + (x86_linux_dr_get_status): Likewise. + (x86_linux_update_debug_registers): Likewise. + +2015-03-24 Gary Benson <gbenson@redhat.com> + + * linux-x86-low.c (x86_linux_update_debug_registers): + New function, factored out from... + (x86_linux_prepare_to_resume): ...this. + +2015-03-24 Gary Benson <gbenson@redhat.com> + + * linux-x86-low.c (x86_linux_dr_get): Update comments. + (x86_linux_dr_set): Likewise. + (update_debug_registers_callback): Likewise. + (x86_linux_dr_set_addr): Likewise. + (x86_linux_dr_get_addr): Likewise. + (x86_linux_dr_set_control): Likewise. + (x86_linux_dr_get_control): Likewise. + (x86_linux_dr_get_status): Likewise. + (x86_linux_prepare_to_resume): Likewise. + +2015-03-24 Gary Benson <gbenson@redhat.com> + + * linux-x86-low.c (x86_linux_dr_get): Add assertion. + Use perror_with_name. Pass string through gettext. + (x86_linux_dr_set): Likewise. + +2015-03-24 Gary Benson <gbenson@redhat.com> + + * linux-x86-low.c (x86_dr_low_set_addr): Rename to... + (x86_linux_dr_set_addr): ...this. + (x86_dr_low_get_addr): Rename to... + (x86_linux_dr_get_addr): ...this. + (x86_dr_low_set_control): Rename to... + (x86_linux_dr_set_control): ...this. + (x86_dr_low_get_control): Rename to... + (x86_linux_dr_get_control): ...this. + (x86_dr_low_get_status): Rename to... + (x86_linux_dr_get_status): ...this. + (x86_dr_low): Update with new function names. + +2015-03-24 Gary Benson <gbenson@redhat.com> + + * Makefile.in (x86-linux.o): New rule. + * configure.srv: Add x86-linux.o to relevant targets. + * linux-low.c (lwp_set_arch_private_info): New function. + (lwp_arch_private_info): Likewise. + * linux-x86-low.c: Include nat/x86-linux.h. + (arch_lwp_info): Removed structure. + (update_debug_registers_callback): + Use lwp_set_debug_registers_changed. + (x86_linux_prepare_to_resume): Use lwp_debug_registers_changed + and lwp_set_debug_registers_changed. + (x86_linux_new_thread): Use lwp_set_debug_registers_changed. + +2015-03-24 Gary Benson <gbenson@redhat.com> + + * linux-low.h (linux_target_ops) <new_thread>: Changed signature. + * linux-arm-low.c (arm_new_thread): Likewise. + * linux-aarch64-low.c (aarch64_linux_new_thread): Likewise. + * linux-mips-low.c (mips_linux_new_thread): Likewise. + * linux-x86-low.c (x86_linux_new_thread): Likewise. + * linux-low.c (add_lwp): Update the_low_target.new_thread call. + +2015-03-24 Gary Benson <gbenson@redhat.com> + + * linux-low.c (ptid_of_lwp): New function. + (lwp_is_stopped): Likewise. + (lwp_stop_reason): Likewise. + * linux-x86-low.c (update_debug_registers_callback): + Use lwp_is_stopped. + (x86_linux_prepare_to_resume): Use ptid_of_lwp and + lwp_stop_reason. + +2015-03-24 Gary Benson <gbenson@redhat.com> + + * linux-low.h (linux_stop_lwp): Remove declaration. + +2015-03-24 Gary Benson <gbenson@redhat.com> + + * linux-low.h: Include nat/linux-nat.h. + * linux-low.c (iterate_over_lwps_args): New structure. + (iterate_over_lwps_filter): New function. + (iterate_over_lwps): Likewise. + * linux-x86-low.c (update_debug_registers_callback): + Update signature to what iterate_over_lwps expects. + Remove PID check that iterate_over_lwps now performs. + (x86_dr_low_set_addr): Use iterate_over_lwps. + (x86_dr_low_set_control): Likewise. + +2015-03-24 Gary Benson <gbenson@redhat.com> + + * linux-x86-low.c (x86_debug_reg_state): New function. + (x86_linux_prepare_to_resume): Use the above. + +2015-03-24 Gary Benson <gbenson@redhat.com> + + * linux-low.c (current_lwp_ptid): New function. + * linux-x86-low.c: Include nat/linux-nat.h. + (x86_dr_low_get_addr): Use current_lwp_ptid. + (x86_dr_low_get_control): Likewise. + (x86_dr_low_get_status): Likewise. + +2015-03-20 Pedro Alves <palves@redhat.com> + + * tracepoint.c (cmd_qtstatus): Make "str" const. + +2015-03-20 Pedro Alves <palves@redhat.com> + + * server.c (handle_general_set): Make "req_str" const. + +2015-03-19 Pedro Alves <palves@redhat.com> + + * linux-low.c (linux_resume_one_lwp): Rename to ... + (linux_resume_one_lwp_throw): ... this. Don't handle ESRCH here, + instead call perror_with_name. + (check_ptrace_stopped_lwp_gone): New function. + (linux_resume_one_lwp): Reimplement as wrapper around + linux_resume_one_lwp_throw that swallows errors if the LWP is + gone. + +2015-03-19 Pedro Alves <palves@redhat.com> + + * linux-low.c (count_events_callback, select_event_lwp_callback): + No longer check whether the thread has resume_stop as last resume + kind. + +2015-03-19 Pedro Alves <palves@redhat.com> + + * linux-low.c (count_events_callback, select_event_lwp_callback): + Use the lwp's status_pending_p field, not the thread's. + +2015-03-19 Pedro Alves <palves@redhat.com> + + * linux-low.c (select_event_lwp_callback): Update comments to + no longer mention SIGTRAP. + +2015-03-18 Gary Benson <gbenson@redhat.com> + + * server.c (handle_query): Do not report vFile:fstat as supported. + +2015-03-11 Gary Benson <gbenson@redhat.com> + + * hostio.c (sys/types.h): New include. + (sys/stat.h): Likewise. + (common-remote-fileio.h): Likewise. + (handle_fstat): New function. + (handle_vFile): Handle vFile:fstat packets. + +2015-03-11 Gary Benson <gbenson@redhat.com> + + * configure.ac (AC_CHECK_MEMBERS): Add checks for + struct stat.st_blocks and struct stat.st_blksize. + * configure: Regenerate. + * config.in: Likewise. + * Makefile.in (SFILES): Add common/common-remote-fileio.c. + (OBS): Add common-remote-fileio.o. + (common-remote-fileio.o): New rule. + +2015-03-09 Pedro Alves <palves@redhat.com> + + * tracepoint.c (gdb_agent_helper_thread): Cast '&sockaddr' to + 'struct sockaddr' pointer in 'accept' call. + +2015-03-09 Pedro Alves <palves@redhat.com> + + Revert: + 2015-03-07 Pedro Alves <palves@redhat.com> + * gdbreplay.c: No longer include <netinet/in.h>, <sys/socket.h>, + or <winsock2.h> here. Instead include "gdb_socket.h". + (remote_open): Use union gdb_sockaddr_u. + * remote-utils.c: No longer include <netinet/in.h>, <sys/socket.h> + or <winsock2.h> here. Instead include "gdb_socket.h". + (handle_accept_event, remote_prepare): Use union gdb_sockaddr_u. + * tracepoint.c: Include "gdb_socket.h" instead of <sys/socket.h> + or <sys/un.h>. + (init_named_socket, gdb_agent_helper_thread): Use union + gdb_sockaddr_u. + +2015-03-07 Pedro Alves <palves@redhat.com> + + * configure.ac (build_warnings): Move + -Wdeclaration-after-statement to the C-specific set. + * configure: Regenerate. + +2015-03-07 Pedro Alves <palves@redhat.com> + + * gdbreplay.c: No longer include <netinet/in.h>, <sys/socket.h>, + or <winsock2.h> here. Instead include "gdb_socket.h". + (remote_open): Use union gdb_sockaddr_u. + * remote-utils.c: No longer include <netinet/in.h>, <sys/socket.h> + or <winsock2.h> here. Instead include "gdb_socket.h". + (handle_accept_event, remote_prepare): Use union gdb_sockaddr_u. + * tracepoint.c: Include "gdb_socket.h" instead of <sys/socket.h> + or <sys/un.h>. + (init_named_socket, gdb_agent_helper_thread): Use union + gdb_sockaddr_u. + +2015-03-07 Pedro Alves <palves@redhat.com> + + Adjust all callers of TRY_CATCH to use TRY/CATCH/END_CATCH + instead. + +2015-03-06 Yao Qi <yao.qi@linaro.org> + + * linux-aarch64-low.c (aarch64_insert_point): Use + show_debug_regs as a boolean. + (aarch64_remove_point): Likewise. + +2015-03-05 Pedro Alves <palves@redhat.com> + + * lynx-low.c (lynx_target_ops): Install NULL hooks for + stopped_by_sw_breakpoint, supports_stopped_by_sw_breakpoint, + stopped_by_hw_breakpoint, supports_stopped_by_hw_breakpoint. + * nto-low.c (nto_target_ops): Likewise. + * spu-low.c (spu_target_ops): Likewise. + * win32-low.c (win32_target_ops): Likewise. + +2015-03-04 Pedro Alves <palves@redhat.com> + + * linux-low.c (check_stopped_by_breakpoint) [USE_SIGTRAP_SIGINFO]: + Decide whether a breakpoint triggered based on the SIGTRAP's + siginfo.si_code. + (thread_still_has_status_pending_p) [USE_SIGTRAP_SIGINFO]: Don't check whether a + breakpoint is inserted if relying on SIGTRAP's siginfo.si_code. + (linux_low_filter_event): Check for breakpoints before checking + watchpoints. + (linux_wait_1): Don't re-increment the PC if relying on SIGTRAP's + siginfo.si_code. + (linux_stopped_by_sw_breakpoint) + (linux_supports_stopped_by_sw_breakpoint) + (linux_stopped_by_hw_breakpoint) + (linux_supports_stopped_by_hw_breakpoint): New functions. + (linux_target_ops): Install new target methods. + +2015-03-04 Pedro Alves <palves@redhat.com> + + * remote-utils.c (prepare_resume_reply): Report swbreak/hbreak. + * server.c (swbreak_feature, hwbreak_feature): New globals. + (handle_query) <qSupported>: Handle "swbreak+" and "hwbreak+". + (captured_main): Clear swbreak_feature and hwbreak_feature. + * server.h (swbreak_feature, hwbreak_feature): Declare. + * target.h (struct target_ops) <stopped_by_sw_breakpoint, + supports_stopped_by_sw_breakpoint, stopped_by_hw_breakpoint, + supports_stopped_by_hw_breakpoint>: New fields. + (target_supports_stopped_by_sw_breakpoint) + (target_stopped_by_sw_breakpoint) + (target_supports_stopped_by_hw_breakpoint) + (target_stopped_by_hw_breakpoint): Declare. + +2015-03-04 Pedro Alves <palves@redhat.com> + + enum lwp_stop_reason -> enum target_stop_reason + * linux-low.c (check_stopped_by_breakpoint): Adjust. + (thread_still_has_status_pending_p, check_stopped_by_watchpoint) + (linux_wait_1, stuck_in_jump_pad_callback) + (move_out_of_jump_pad_callback, linux_resume_one_lwp) + (linux_stopped_by_watchpoint): + * linux-low.h (enum lwp_stop_reason): Delete. + (struct lwp_info) <stop_reason>: Now an enum target_stop_reason. + * linux-x86-low.c (x86_linux_prepare_to_resume): Adjust. + +2015-03-04 Yao Qi <yao.qi@linaro.org> + + * Makefile.in (SFILES): Add linux-aarch64-low.c. + +2015-03-03 Gary Benson <gbenson@redhat.com> + + * hostio.c (handle_vFile): Fix prefix lengths. + +2015-03-03 Markus Metzger <markus.t.metzger@intel.com> + + * linux-low.c (linux_low_enable_btrace): Do not overwrite non-zero + ptr_bits. + +2015-03-02 Andreas Arnez <arnez@linux.vnet.ibm.com> + + * Makefile.in (s390-vx-linux64.c, s390-tevx-linux64.c) + (s390x-vx-linux64.c, s390x-tevx-linux64.c): New rules. + (clean): Add "rm -f" for above C files. + * configure.srv (srv_regobj): Add s390-vx-linux64.o, + s390-tevx-linux64.o, s390x-vx-linux64.o, and s390x-tevx-linux64.o. + (srv_xmlfiles): Add s390-vx-linux64.xml, s390-tevx-linux64.xml, + s390x-vx-linux64.xml, s390x-tevx-linux64.xml, and s390-vx.xml. + * linux-s390-low.c (HWCAP_S390_VX): New macro. + (init_registers_s390_vx_linux64, init_registers_s390_tevx_linux64) + (init_registers_s390x_vx_linux64) + (init_registers_s390x_tevx_linux64) + (tdesc_s390_vx_linux64, tdesc_s390_tevx_linux64) + (tdesc_s390x_vx_linux64, tdesc_s390x_tevx_linux64): New extern + declarations. + (s390_fill_vxrs_low, s390_store_vxrs_low, s390_fill_vxrs_high) + (s390_store_vxrs_high): New functions. + (s390_regsets): Add entries for NT_S390_VXRS_LOW and + NT_S390_VXRS_HIGH. + (s390_arch_setup): Add logic for selecting one of the new target + descriptions. Activate the new vector regsets if applicable. + (initialize_low_arch): Also invoke init_registers_s390_vx_linux64, + init_registers_s390_tevx_linux64, init_registers_s390x_vx_linux64, + and init_registers_s390x_tevx_linux64. + +2015-03-01 Pedro Alves <palves@redhat.com> + + * linux-i386-ipa.c (gdb_agent_get_raw_reg): Constify 'raw_regs' + parameter. + +2015-02-27 Pedro Alves <palves@redhat.com> + + * linux-x86-low.c (u_debugreg_offset): New function. + (x86_linux_dr_get, x86_linux_dr_set): Use it. + +2015-02-27 Pedro Alves <palves@redhat.com> + + * gdb_proc_service.h: Wrap with EXTERN_C_PUSH/EXTERN_C_POP. + [!HAVE_PROC_SERVICE_H] (struct ps_prochandle): Forward declare. + [!HAVE_PROC_SERVICE_H] (ps_pdread, ps_pdwrite, ps_ptread) + ps_ptwrite, ps_lgetregs, ps_lsetregs, ps_lgetfpregs) + (ps_lsetfpregs, ps_getpid) + (ps_get_thread_area, ps_pglobal_lookup, ps_pstop, ps_pcontinue) + (ps_lstop, ps_lcontinue, ps_lgetxregsize, ps_lgetxregs) + (ps_lsetxregs, ps_plog): Declare. + +2015-02-27 Pedro Alves <palves@redhat.com> + + * linux-amd64-ipa.c (gdb_agent_get_raw_reg): Use + IP_AGENT_EXPORT_FUNC. + * linux-i386-ipa.c (gdb_agent_get_raw_reg): Use + IP_AGENT_EXPORT_FUNC. + * tracepoint.c (ATTR_USED, ATTR_NOINLINE, ATTR_CONSTRUCTOR) + (IP_AGENT_EXPORT): Delete. + (gdb_tp_heap_buffer, gdb_jump_pad_buffer, gdb_jump_pad_buffer_end) + (gdb_trampoline_buffer, gdb_trampoline_buffer_end) + (gdb_trampoline_buffer_error, collecting, gdb_collect) + (stop_tracing, flush_trace_buffer, about_to_request_buffer_space) + (trace_buffer_is_full, stopping_tracepoint, expr_eval_result) + (error_tracepoint, tracepoints, tracing, trace_buffer_ctrl) + (trace_buffer_ctrl_curr, trace_buffer_lo, trace_buffer_hi) + (traceframe_read_count, traceframe_write_count) + (traceframes_created, trace_state_variables, get_raw_reg) + (get_trace_state_variable_value, set_trace_state_variable_value) + (ust_loaded, helper_thread_id, cmd_buf): Use + IPA_SYM_EXPORTED_NAME. + (stop_tracing, flush_trace_buffer): Use IP_AGENT_EXPORT_FUNC. + (tracepoints) Use IP_AGENT_EXPORT_VAR. + (stopping_tracepoint, trace_buffer_is_full, expr_eval_result): Use + IP_AGENT_EXPORT_VAR and wrap in EXTERN_C_PUSH/EXTERN_C_POP. + (last_tracepoint): Move into !IN_PROCESS_AGENT block. + (error_tracepoint): Use IP_AGENT_EXPORT_VAR and wrap in + EXTERN_C_PUSH/EXTERN_C_POP. + (trace_state_variables): Use IP_AGENT_EXPORT_VAR. + (trace_buffer_lo, trace_buffer_hi): Use IP_AGENT_EXPORT_VAR and + wrap in EXTERN_C_PUSH/EXTERN_C_POP. + (trace_buffer_ctrl, trace_buffer_ctrl_curr) + (traceframe_write_count, traceframe_read_count) + (traceframes_created, tracing): Use IP_AGENT_EXPORT_VAR. + (about_to_request_buffer_space, get_trace_state_variable_value) + (set_trace_state_variable_value): Use IP_AGENT_EXPORT_FUNC. + (collecting): Use IP_AGENT_EXPORT_VAR and wrap in + EXTERN_C_PUSH/EXTERN_C_POP. + (gdb_collect): Use IP_AGENT_EXPORT_FUNC. + (ust_loaded, cmd_buf): Use IP_AGENT_EXPORT_VAR. + (helper_thread_id, gdb_agent_capability): Use IP_AGENT_EXPORT_VAR + and wrap in EXTERN_C_PUSH/EXTERN_C_POP. + (gdb_tp_heap_buffer, gdb_jump_pad_buffer, gdb_jump_pad_buffer_end) + (gdb_trampoline_buffer, gdb_trampoline_buffer_end) + (gdb_trampoline_buffer_error): Use IP_AGENT_EXPORT_VAR. + * tracepoint.h (ATTR_USED, ATTR_NOINLINE, EXPORTED_SYMBOL): + Define. + (IP_AGENT_EXPORT_FUNC, IP_AGENT_EXPORT_VAR) + (IP_AGENT_EXPORT_VAR_DECL): Define. + (tracing): Declare. + (gdb_agent_get_raw_reg): Declare. + +2015-02-27 Tom Tromey <tromey@redhat.com> + Pedro Alves <palves@redhat.com> + + Rename symbols whose names are reserved C++ keywords throughout. + +2015-02-27 Pedro Alves <palves@redhat.com> + + * Makefile.in (COMPILER): New, get it from autoconf. + (CXX): Get from autoconf instead. + (COMPILE.pre): Use COMPILER. + (CC-LD): Rename to ... + (CC_LD): ... this. Use COMPILER. + (gdbserver$(EXEEXT), gdbreplay$(EXEEXT), $(IPA_LIB)): Adjust. + (CXX_FOR_TARGET): Default to g++ instead of gcc. + * acinclude.m4: Include build-with-cxx.m4. + * configure.ac: Call AC_PROG_CXX and GDB_AC_BUILD_WITH_CXX. + Disable -Werror by default if building in C++ mode. + (build_warnings): Add -Wno-sign-compare, -Wno-write-strings and + -Wno-narrowing in C++ mode. Run supported-warning-flags tests with + the C++ compiler. Save/restore CXXFLAGS too. + * configure: Regenerate. + +2015-02-27 Pedro Alves <palves@redhat.com> + + * acinclude.m4: Include libiberty.m4. + * configure.ac: Call libiberty_INIT. + * config.in, configure: Regenerate. + +2015-02-26 Pedro Alves <palves@redhat.com> + + * linux-low.c (linux_wait_1): When incrementing the PC past a + program breakpoint always use the_low_target.breakpoint_len as + increment, rather than the maximum between that and + the_low_target.decr_pc_after_break. + +2015-02-23 Pedro Alves <palves@redhat.com> + + * linux-low.c (check_stopped_by_breakpoint): Don't check if the + thread was doing a step-over; always adjust the PC if + we stepped over a permanent breakpoint. + (linux_wait_1): If we stepped over breakpoint that was on top of a + permanent breakpoint, manually advance the PC past it. + +2015-02-23 Pedro Alves <palves@redhat.com> + + * linux-x86-low.c (REGSIZE): Define in both 32-bit and 64-bit + modes. + (x86_fill_gregset, x86_store_gregset): Use it when handling + $orig_eax. + +2015-02-20 Pedro Alves <palves@redhat.com> + + * thread-db.c: Include "nat/linux-procfs.h". + (thread_db_init): Skip listing new threads if the kernel supports + PTRACE_EVENT_CLONE and /proc/PID/task/ is accessible. + +2015-02-20 Pedro Alves <palves@redhat.com> + + * linux-low.c (status_pending_p_callback): Use ptid_match. + +2015-02-19 Antoine Tremblay <antoine.tremblay@ericsson.com> + + PR breakpoints/16812 + * linux-low.c (wstatus_maybe_breakpoint): Remove. + (linux_low_filter_event): Update wstatus_maybe_breakpoint name. + (linux_wait_1): Report SIGTRAP,SIGILL,SIGSEGV. + +2015-02-10 Antoine Tremblay <antoine.tremblay@ericsson.com> + + PR breakpoints/15956 + * tracepoint.c (cmd_qtinit): Add check for current_thread. + +2015-02-09 Markus Metzger <markus.t.metzger@intel.com> + + * linux-low.c (linux_low_btrace_conf): Print size. + * server.c (handle_btrace_conf_general_set): New. + (hanle_general_set): Call handle_btrace_conf_general_set. + (handle_query): Report Qbtrace-conf:bts:size as supported. + +2015-02-09 Markus Metzger <markus.t.metzger@intel.com> + + * linux-low.c (linux_low_enable_btrace): Update parameters. + (linux_low_btrace_conf): New. + (linux_target_ops)<to_btrace_conf>: Initialize. + * server.c (current_btrace_conf): New. + (handle_btrace_enable): Rename to ... + (handle_btrace_enable_bts): ... this. Pass ¤t_btrace_conf + to target_enable_btrace. Update comment. Update users. + (handle_qxfer_btrace_conf): New. + (qxfer_packets): Add btrace-conf entry. + (handle_query): Report qXfer:btrace-conf:read as supported packet. + * target.h (target_ops)<enable_btrace>: Update parameters and comment. + (target_ops)<read_btrace_conf>: New. + (target_enable_btrace): Update parameters. + (target_read_btrace_conf): New. + +2015-02-09 Markus Metzger <markus.t.metzger@intel.com> + + * server.c (handle_btrace_general_set): Remove call to + target_supports_btrace. + (supported_btrace_packets): New. + (handle_query): Call supported_btrace_packets. + * target.h: include btrace-common.h. + (btrace_target_info): Removed. + (supports_btrace, target_supports_btrace): Update parameters. + +2015-02-09 Markus Metzger <markus.t.metzger@intel.com> + + * Makefile.in (SFILES): Add common/btrace-common.c. + (OBS): Add common/btrace-common.o. + (btrace-common.o): Add build rules. + * linux-low: Include btrace-common.h. + (linux_low_read_btrace): Use struct btrace_data. Call + btrace_data_init and btrace_data_fini. + +2015-02-06 Pedro Alves <palves@redhat.com> + + * thread-db.c (find_new_threads_callback): Add debug output. + +2015-02-04 Pedro Alves <palves@redhat.com> + + * linux-low.c (handle_extended_wait): Don't resume LWPs here. + (resume_stopped_resumed_lwps): New function. + (linux_wait_for_event_filtered): Use it. + +2015-01-15 Sergio Durigan Junior <sergiodj@redhat.com> + + * Makefile.in (SFILES): Add linux-personality.c. + (linux-personality.o): New rule. + * configure.srv (srv_linux_obj): Add linux-personality.o to the + list of objects to be built. + * linux-low.c: Include nat/linux-personality.h. + (linux_create_inferior): Remove code to disable address space + randomization (moved to ../nat/linux-personality.c). Create + cleanup to disable address space randomization. + +2015-01-15 Sergio Durigan Junior <sergiodj@redhat.com> + + * Makefile.in (posix-strerror.o): New rule. + (mingw-strerror.o): Likewise. + * configure: Regenerated. + * configure.ac: Source file ../common/common.host. Initialize new + variable srv_host_obs. Add srv_host_obs to GDBSERVER_DEPFILES. + +2015-01-14 Yao Qi <yao@codesourcery.com> + + * Makefile.in (SFILES): Add nat/ppc-linux.c. + (ppc-linux.o): New rule. + * configure.srv (powerpc*-*-linux*): Add ppc-linux.o. + * configure.ac: AC_CHECK_FUNCS(getauxval). + * config.in: Re-generated. + * configure: Re-generated. + * linux-ppc-low.c (ppc_arch_setup) [__powerpc64__]: Call + ppc64_64bit_inferior_p + +2015-01-14 Yao Qi <yao@codesourcery.com> + + * linux-ppc-low.c: Include "nat/ppc-linux.h". + (PPC_FEATURE_HAS_VSX): Move to nat/ppc-linux.h. + (PPC_FEATURE_HAS_ALTIVEC, PPC_FEATURE_HAS_SPE): Likewise. + (PT_ORIG_R3, PT_TRAP): Likewise. + (PTRACE_GETVSXREGS, PTRACE_SETVSXREGS): Likewise. + (PTRACE_GETVRREGS, PTRACE_SETVRREGS): Likewise. + (PTRACE_GETEVRREGS, PTRACE_SETEVRREGS): Likewise. + +2015-01-10 Joel Brobecker <brobecker@adacore.com> + + * i387-fp.c (i387_cache_to_xsave): In look over + num_avx512_zmmh_high_registers, replace use of struct i387_xsave + zmmh_low_space field by use of zmmh_high_space. + +2015-01-09 Pedro Alves <palves@redhat.com> + + * linux-low.c (step_over_bkpt): Move higher up in the file. + (handle_extended_wait): Don't store the stop_pc here. + (get_stop_pc): Adjust comments and rename to ... + (check_stopped_by_breakpoint): ... this. Record whether the LWP + stopped for a software breakpoint or hardware breakpoint. + (thread_still_has_status_pending_p): New function. + (status_pending_p_callback): Use + thread_still_has_status_pending_p. If the event is no longer + interesting, resume the LWP. + (handle_tracepoints): Add assert. + (maybe_move_out_of_jump_pad): Remove cancel_breakpoints call. + (wstatus_maybe_breakpoint): New function. + (cancel_breakpoint): Delete function. + (check_stopped_by_watchpoint): New function, factored out from + linux_low_filter_event. + (lp_status_maybe_breakpoint): Delete function. + (linux_low_filter_event): Remove filter_ptid argument. + Leave thread group exits pending here. Store the LWP's stop PC. + Always leave events pending. + (linux_wait_for_event_filtered): Pull all events out of the + kernel, and leave them all pending. + (count_events_callback, select_event_lwp_callback): Consider all + events. + (cancel_breakpoints_callback, linux_cancel_breakpoints): Delete. + (select_event_lwp): Only give preference to the stepping LWP in + all-stop mode. Adjust comments. + (ignore_event): New function. + (linux_wait_1): Delete 'retry' label. Use ignore_event. Remove + references to cancel_breakpoints. Adjust to renames. Also give + equal priority to all LWPs that have had events in non-stop mode. + If reporting a software breakpoint event, unadjust the LWP's PC. + (linux_wait): If linux_wait_1 returned an ignored event, retry. + (stuck_in_jump_pad_callback, move_out_of_jump_pad_callback): + Adjust. + (linux_resume_one_lwp): Store the LWP's PC. Adjust. + (resume_status_pending_p): Use thread_still_has_status_pending_p. + (linux_stopped_by_watchpoint): Adjust. + (linux_target_ops): Remove reference to linux_cancel_breakpoints. + * linux-low.h (enum lwp_stop_reason): New. + (struct lwp_info) <stop_pc>: Adjust comment. + <stopped_by_watchpoint>: Delete field. + <stop_reason>: New field. + * linux-x86-low.c (x86_linux_prepare_to_resume): Adjust. + * mem-break.c (software_breakpoint_inserted_here) + (hardware_breakpoint_inserted_here): New function. + * mem-break.h (software_breakpoint_inserted_here) + (hardware_breakpoint_inserted_here): Declare. + * target.h (struct target_ops) <cancel_breakpoints>: Remove field. + (cancel_breakpoints): Delete. + * tracepoint.c (clear_installed_tracepoints, stop_tracing) + (upload_fast_traceframes): Remove references to + cancel_breakpoints. + +2015-01-09 Pedro Alves <palves@redhat.com> + + * thread-db.c (find_new_threads_callback): Ignore thread if the + kernel thread ID is -1. + +2015-01-09 Pedro Alves <palves@redhat.com> + + * linux-low.c (linux_attach_fail_reason_string): Move to + nat/linux-ptrace.c, and rename. + (linux_attach_lwp): Update comment. + (attach_proc_task_lwp_callback): New function. + (linux_attach): Adjust to rename and use + linux_proc_attach_tgid_threads. + (linux_attach_fail_reason_string): Delete declaration. + +2015-01-01 Joel Brobecker <brobecker@adacore.com> + + * gdbreplay.c (gdbreplay_version): Update copyright year to 2015. + * server.c (gdbserver_version): Likewise. + +2014-12-29 Sergio Durigan Junior <sergiodj@redhat.com> + + * remote-utils.c: Include ctype.h. + (input_interrupt): Explicitly handle the case when the char + received is the NUL byte. Improve the printing of non-ASCII + characters. + +2014-12-16 Joel Brobecker <brobecker@adacore.com> + + * linux-low.c (linux_low_filter_event): Update call to + linux_enable_event_reporting following the addition of + a new parameter to that function. + +2014-12-16 Catalin Udma <catalin.udma@freescale.com> + + PR server/17457 + * linux-aarch64-low.c (AARCH64_FPSR_REGNO): New define. + (AARCH64_FPCR_REGNO): Likewise. + (AARCH64_NUM_REGS): Update to include fpsr/fpcr registers. + (aarch64_fill_fpregset): Add missing fpsr/fpcr registers. + (aarch64_store_fpregset): Likewise. + +2014-12-15 Joel Brobecker <brobecker@adacore.com> + + * lynx-low.c (lynx_resume): Use PTRACE_SINGLESTEP_ONE if N == 1. + Remove FIXME comment about assumption about N. + +2014-12-13 Joel Brobecker <brobecker@adacore.com> + + * configure.ac: If large-file support is disabled in GDBserver, + pass --disable-largefile to ACX_CONFIGURE_DIR call for "gnulib". + * configure: Regenerate. + +2014-12-12 Andreas Arnez <arnez@linux.vnet.ibm.com> + + * linux-low.c (regsets_fetch_inferior_registers): Suppress the + warning upon ENODATA from ptrace. + * linux-s390-low.c (s390_store_tdb): New. + (s390_regsets): Add regset for NT_S390_TDB. + +2014-12-12 Andreas Arnez <arnez@linux.vnet.ibm.com> + + * linux-low.c (regsets_store_inferior_registers): Skip regsets + without a fill_function. + * linux-s390-low.c (s390_fill_last_break): Remove. + (s390_regsets): Set fill_function to NULL for NT_S390_LAST_BREAK. + (s390_arch_setup): Use regset's size instead of fill_function for + loop end condition. + +2014-12-12 Andreas Arnez <arnez@linux.vnet.ibm.com> + + * linux-low.c (regsets_fetch_inferior_registers): Do not invoke + the regset's store function when ptrace returned an error. + * regcache.c (get_thread_regcache): Invalidate register cache + before fetching inferior's registers. + +2014-12-12 Andreas Arnez <arnez@linux.vnet.ibm.com> + + * linux-low.c (regsets_fetch_inferior_registers): Rephrase + while-loop as for-loop. + (regsets_store_inferior_registers): Likewise. + +2014-11-28 Yao Qi <yao@codesourcery.com> + + * configure.ac(AC_CHECK_FUNCS): Remove readlink. + * config.in, configure: Re-generate. + * hostio.c (handle_unlink): Remove code checking HAVE_READLINK + is defined. + +2014-11-21 Yao Qi <yao@codesourcery.com> + + * configure.ac: Don't invoke AC_FUNC_ALLOCA. + (AC_CHECK_HEADERS): Remove malloc.h. + * configure: Re-generated. + * config.in: Re-generated. + * server.h: Don't include alloca.h and malloc.h. + * gdbreplay.c: Don't check HAVE_ALLOCA_H is defined. + Don't include malloc.h. + +2014-11-17 Joel Brobecker <brobecker@adacore.com> + + * lynx-low.c (lynx_write_memory): Put lynx_read_memory and + corresponding ERRNO check in same block. + +2014-11-12 Pedro Alves <palves@redhat.com> + + * server.c (cont_thread): Update comment. + (start_inferior, attach_inferior): No longer clear cont_thread. + (handle_v_cont): No longer set cont_thread. + (captured_main): Clear cont_thread each time a GDB connects. + +2014-11-12 Pedro Alves <palves@redhat.com> + + * linux-low.c (linux_wait_1): Don't force a wait for the Hc + thread, and don't resume all threads if the Hc thread has exited. + +2014-11-12 Pedro Alves <palves@redhat.com> + + * linux-low.c (linux_request_interrupt): Always send a SIGINT to + the process group instead of to a specific LWP. + +2014-10-15 Pedro Alves <palves@redhat.com> + + PR server/17487 + * win32-arm-low.c (arm_set_thread_context): Remove current_event + parameter. + (arm_set_thread_context): Delete. + (the_low_target): Adjust. + * win32-i386-low.c (debug_registers_changed) + (debug_registers_used): Delete. + (update_debug_registers_callback): New function. + (x86_dr_low_set_addr, x86_dr_low_set_control): Mark all threads as + needing to update their debug registers. + (win32_get_current_dr): New function. + (x86_dr_low_get_addr, x86_dr_low_get_control) + (x86_dr_low_get_status): Fetch the debug register from the thread + record's context. + (i386_initial_stuff): Adjust. + (i386_get_thread_context): Remove current_event parameter. Don't + clear debug_registers_changed nor copy DR values to + debug_reg_state. + (i386_set_thread_context): Delete. + (i386_prepare_to_resume): New function. + (i386_thread_added): Mark the thread as needing to update irs + debug registers. + (the_low_target): Remove i386_set_thread_context and install + i386_prepare_to_resume. + * win32-low.c (win32_get_thread_context): Adjust. + (win32_set_thread_context): Use SetThreadContext + directly. + (win32_prepare_to_resume): New function. + (win32_require_context): New function, factored out from ... + (thread_rec): ... this. + (continue_one_thread): Call win32_prepare_to_resume on each thread + we're about to continue. + (win32_resume): Call win32_prepare_to_resume on the event thread. + * win32-low.h (struct win32_thread_info) + <debug_registers_changed>: New field. + (struct win32_target_ops): Change prototype of set_thread_context, + delete set_thread_context and add prepare_to_resume. + (win32_require_context): New declaration. + +2014-10-08 Gary Benson <gbenson@redhat.com> + + * server.h: Do not include common-exceptions.h. + +2014-10-08 Gary Benson <gbenson@redhat.com> + + * server.h: Do not include cleanups.h. + +2014-09-30 James Hogan <james.hogan@imgtec.com> + + * Makefile.in (clean): Add rm -f commands for mips-dsp-linux.c and + mips64-dsp-linux.c. + +2014-09-23 Yao Qi <yao@codesourcery.com> + + * linux-low.c (lp_status_maybe_breakpoint): New function. + (linux_low_filter_event): Call lp_status_maybe_breakpoint. + (count_events_callback): Likewise. + (select_event_lwp_callback): Likewise. + (cancel_breakpoints_callback): Likewise. + +2014-09-19 Don Breazeal <donb@codesourcery.com> + + * linux-low.c (handle_extended_wait): Call + linux_ptrace_get_extended_event. + (get_stop_pc, get_detach_signal, linux_low_filter_event): Call + linux_is_extended_waitstatus. + +2014-09-16 Joel Brobecker <brobecker@adacore.com> + + * Makefile.in (CPPFLAGS): Define. + (INTERNAL_CFLAGS_BASE): Add ${CPPFLAGS}. + (IPAGENT_CFLAGS): Remove ${CPPFLAGS}. + +2014-09-16 Gary Benson <gbenson@redhat.com> + + * inferiors.h (current_inferior): Renamed as... + (current_thread): New variable. All uses updated. + * linux-low.c (get_pc): Renamed saved_inferior as saved_thread. + (maybe_move_out_of_jump_pad): Likewise. + (cancel_breakpoint): Likewise. + (linux_low_filter_event): Likewise. + (wait_for_sigstop): Likewise. + (linux_resume_one_lwp): Likewise. + (need_step_over_p): Likewise. + (start_step_over): Likewise. + (linux_stabilize_threads): Renamed save_inferior as saved_thread. + * linux-x86-low.c (x86_linux_update_xmltarget): Likewise. + * proc-service.c (ps_lgetregs): Renamed reg_inferior as reg_thread + and save_inferior as saved_thread. + * regcache.c (get_thread_regcache): Renamed saved_inferior as + saved_thread. + (regcache_invalidate_thread): Likewise. + * remote-utils.c (prepare_resume_reply): Likewise. + * thread-db.c (thread_db_get_tls_address): Likewise. + (disable_thread_event_reporting): Likewise. + (remove_thread_event_breakpoints): Likewise. + * tracepoint.c (gdb_agent_about_to_close): Renamed save_inferior + as saved_thread. + * target.h (set_desired_inferior): Renamed as... + (set_desired_thread): New declaration. All uses updated. + * server.c (myresume): Updated comment to reference thread instead + of inferior. + (handle_serial_event): Likewise. + (handle_target_event): Likewise. + +2014-09-12 Tom Tromey <tromey@redhat.com> + Gary Benson <gbenson@redhat.com> + + * regcache.h: Include common-regcache.h. + (regcache_read_pc): Don't declare. + * regcache.c (get_thread_regcache_for_ptid): New function. + +2014-09-11 Tom Tromey <tromey@redhat.com> + Gary Benson <gbenson@redhat.com> + + * symbol.c: New file. + * Makefile.in (SFILES): Add symbol.c. + (OBS): Add symbol.o. + +2014-09-11 Gary Benson <gbenson@redhat.com> + + * target.c (target_stop_ptid, target_continue_ptid): New + functions. + +2014-09-11 Tom Tromey <tromey@redhat.com> + Gary Benson <gbenson@redhat.com> + + * target.h: Include target/target.h. + * target.c (target_read_memory, target_read_uint32) + (target_write_memory): New functions. + +2014-09-11 Gary Benson <gbenson@redhat.com> + + * server.h (debug_hw_points): Don't declare. + * server.c (debug_hw_points): Don't define. Replace all uses + with show_debug_regs. + * linux-aarch64-low.c (debug_hw_points): Don't define. Replace + all uses with show_debug_regs. + +2014-09-08 Edjunior Barbosa Machado <emachado@linux.vnet.ibm.com> + + * linux-ppc-low.c (ppc_collect_ptrace_register): Adjust routine to take + endianness into account. + (ppc_supply_ptrace_register): Likewise. + +2014-09-03 James Hogan <james.hogan@imgtec.com> + + * linux-mips-low.c (mips_read_description): Reset errno to 0 prior + to reading DSP_CONTROL with PTRACE_PEEKUSER ptrace call. + +2014-09-03 Gary Benson <gbenson@redhat.com> + + * linux-x86-low.c (x86_linux_prepare_to_resume): Use + ALL_DEBUG_ADDRESS_REGISTERS. + +2014-09-02 Gary Benson <gbenson@redhat.com> + + * i386-low.h: Renamed as... + * x86-low.h: New file. All type, function and variable name + prefixes changed from "i386_" to "x86_". All references updated. + * i386-low.c: Renamed as... + * x86-low.c: New file. All type, function and variable name + prefixes changed from "i386_" to "x86_". All references updated. + +2014-09-02 Gary Benson <gbenson@redhat.com> + + * linux-x86-low.c (x86_linux_new_process): Use XCNEW. + (x86_linux_new_thread): Likewise. + +2014-08-29 Gary Benson <gbenson@redhat.com> + + * server.h (setjmp.h): Do not include. + (toplevel): Do not declare. + (common-exceptions.h): Include. + (cleanups.h): Likewise. + * server.c (toplevel): Do not define. + (exit_code): New static global. + (detach_or_kill_for_exit_cleanup): New function. + (main): New function. Original main renamed to... + (captured_main): New function. + * utils.c (verror) [!IN_PROCESS_AGENT]: Use throw_verror. + +2014-08-29 Gary Benson <gbenson@redhat.com> + + * Makefile.in (SFILES): Add common/common-exceptions.c. + (OBS): Add common-exceptions.o. + (common-exceptions.o): New rule. + * utils.c (prepare_to_throw_exception): New function. + +2014-08-29 Gary Benson <gbenson@redhat.com> + + * config.in: Regenerate. + * configure: Likewise. + +2014-08-29 Gary Benson <gbenson@redhat.com> + + * Makefile.in (SFILES): Add common/cleanups.c. + (OBS): cleanups.o. + (cleanups.o): New rule. + +2014-08-29 Gary Benson <gbenson@redhat.com> + + * utils.c (internal_vwarning): New function. + +2014-08-28 Gary Benson <gbenson@redhat.com> + + * utils.h (fatal): Remove declaration. + * utils.c (fatal): Remove function. + +2014-08-28 Gary Benson <gbenson@redhat.com> + + * tracepoint.c (gdb_agent_init): Replace fatal with + perror_with_name. + (initialize_tracepoint): Likewise. + +2014-08-28 Gary Benson <gbenson@redhat.com> + + * remote-utils.c (remote_prepare): Replace fatal with error. + +2014-08-28 Gary Benson <gbenson@redhat.com> + + * linux-low.c (linux_async): Replace fatal with warning. + Tidy up and return. + (linux_start_non_stop): Return -1 if linux_async failed. + +2014-08-28 Gary Benson <gbenson@redhat.com> + + * linux-x86-low.c (i386_dr_low_set_addr): Replace check with + gdb_assert. + (i386_dr_low_get_addr): Remove vague comment. + * win32-i386-low.c (i386_dr_low_set_addr): Replace check with + gdb_assert. + +2014-08-28 Gary Benson <gbenson@redhat.com> + + * inferiors.c (get_thread_process): Replace check with gdb_assert. + * linux-low.c (linux_wait_for_event_filtered): Replace fatal with + internal_error. + (linux_resume_one_lwp): Likewise. + * linux-x86-low.c (x86_siginfo_fixup): Replace checks with + gdb_assert. + * mem-break.c (raw_bkpt_type_to_target_hw_bp_type): Replace fatal + with internal_error. + * regcache.c (get_thread_regcache): Replace check with gdb_assert. + (init_register_cache): Replace fatal with gdb_assert_not_reached. + (find_register_by_name): Replace fatal with internal_error. + (find_regno): Likewise. + * tdesc.c (init_target_desc): Replace check with gdb_assert. + * thread-db.c (thread_db_create_event): Likewise. + (thread_db_load_search): Likewise. + (try_thread_db_load_1): Likewise. + * tracepoint.c (get_jump_space_head): Replace fatal with + internal_error. + (claim_trampoline_space): Likewise. + (have_fast_tracepoint_trampoline_buffer): Likewise. + (cmd_qtstart): Likewise. + (stop_tracing): Likewise. + (fast_tracepoint_collecting): Likewise. + (target_malloc): Likewise. + (download_tracepoint): Likewise. + (download_trace_state_variables): Replace check with gdb_assert. + (upload_fast_traceframes): Replace fatal with internal_error. + +2014-08-19 Tom Tromey <tromey@redhat.com> + Gary Benson <gbenson@redhat.com> + + * Makefile.in (SFILES): Add common/common-debug.c. + (OBS): Add common-debug.o. + (common-debug.o): New rule. + * debug.h (debug_printf): Don't declare. + * debug.c (debug_printf): Renamed and rewritten as... + (debug_vprintf): New function. + +2014-08-19 Gary Benson <gbenson@redhat.com> + + * utils.h: Do not include print-utils.h. + +2014-08-19 Tom Tromey <tromey@redhat.com> + Gary Benson <gbenson@redhat.com> + + * server.h: Add static assertion. + (gdb_byte, CORE_ADDR, LONGEST, ULONGEST): Remove. + +2014-08-19 Tom Tromey <tromey@redhat.com> + Gary Benson <gbenson@redhat.com> + + * Makefile.in (SFILES): Add common/errors.c. + (OBS): Add errors.o. + (IPA_OBS): Add errors-ipa.o. + (errors.o): New rule. + (errors-ipa.o): Likewise. + * utils.h (perror_with_name, error, warning): Don't declare. + * utils.c (warning): Renamed and rewritten as... + (vwarning): New function. + (error): Renamed and rewritten as... + (verror): New function. + (internal_error): Renamed and rewritten as... + (internal_verror): New function. + +2014-08-07 Gary Benson <gbenson@redhat.com> + + * configure.ac (AC_CHECK_HEADERS): Remove errno.h. + * configure: Regenerate. + * config.in: Likewise. + * server.h: Do not include errno.h. + * event-loop.c: Likewise. + * hostio-errno.c: Likewise. + * linux-low.c: Likewise. + * remote-utils.c: Likewise. + * spu-low.c: Likewise. + * utils.c: Likewise. + * gdbreplay.c: Unconditionally include errno.h. + +2014-08-07 Gary Benson <gbenson@redhat.com> + + * server.h: Do not include string.h. + * event-loop.c: Likewise. + * linux-low.c: Likewise. + * regcache.c: Likewise. + * remote-utils.c: Likewise. + * spu-low.c: Likewise. + * utils.c: Likewise. + +2014-08-07 Gary Benson <gbenson@redhat.com> + + * server.h: Do not include gdb_assert.h. + +2014-08-07 Gary Benson <gbenson@redhat.com> + + * server.h: Do not include common-utils.h. + +2014-08-07 Gary Benson <gbenson@redhat.com> + + * server.h: Do not include ptid.h. + * notif.h: Likewise. + +2014-08-07 Gary Benson <gbenson@redhat.com> + + * server.h: Do not include gdb_locale.h. + +2014-08-07 Gary Benson <gbenson@redhat.com> + + * server.h: Do not include gdb/signals.h. + * win32-low.c: Likewise. + +2014-08-07 Gary Benson <gbenson@redhat.com> + + * server.h: Do not include pathmax.h. + +2014-08-07 Gary Benson <gbenson@redhat.com> + + * server.h: Do not include libiberty.h. + * linux-bfin-low.c: Likewise. + +2014-08-07 Gary Benson <gbenson@redhat.com> + + * server.h: Do not include ansidecl.h. + +2014-08-07 Gary Benson <gbenson@redhat.com> + + * linux-x86-low.c: Do not include stddef.h. + * lynx-ppc-low.c: Likewise. + * tracepoint.c: Likewise. + +2014-08-07 Gary Benson <gbenson@redhat.com> + + * server.h: Do not include stdarg.h. + * nto-low.c: Likewise. + +2014-08-07 Gary Benson <gbenson@redhat.com> + + * server.h: Do not include stdlib.h. + * inferiors.c: Likewise. + * linux-low.c: Likewise. + * regcache.c: Likewise. + * spu-low.c: Likewise. + * tracepoint.c: Likewise. + * utils.c: Likewise. + +2014-08-07 Gary Benson <gbenson@redhat.com> + + * server.h: Do not include stdio.h. + * linux-low.c: Likewise. + * remote-utils.c: Likewise. + * spu-low.c: Likewise. + * utils.c: Likewise. + * wincecompat.c: Likewise. + +2014-08-06 Gary Benson <gbenson@redhat.com> + + * regcache.c (init_register_cache): Move conditionals inside if. + +2014-08-06 Gary Benson <gbenson@redhat.com> + + * linux-low.c (linux_supports_non_stop): Use target_is_async_p. + +2014-07-31 Gary Benson <gbenson@redhat.com> + + * ax.h: Do not include server.h. + * gdbthread.h: Likewise. + * lynx-low.h: Likewise. + * notif.h: Likewise. + +2014-07-30 Gary Benson <gbenson@redhat.com> + + * server.h: Include common-defs.h. + Do not include config.h or build-gnulib-gdbserver/config.h. + +2014-07-30 Gary Benson <gbenson@redhat.com> + + * hostio-errno.c: Move server.h to top of includes list. + * inferiors.c: Likewise. + * linux-x86-low.c: Likewise. + * notif.c: Include server.h. + +2014-07-24 Tom Tromey <tromey@redhat.com> + Gary Benson <gbenson@redhat.com> + + * server.h (CORE_ADDR): Now unsigned. + +2014-07-16 Pedro Alves <palves@redhat.com> + + * linux-low.c (linux_kill_one_lwp): Use kill_lwp, not kill. + +2014-07-15 Pedro Alves <palves@redhat.com> + + * linux-low.c (linux_kill_one_lwp): Save errno and work with saved + copy. + +2014-07-11 Pedro Alves <palves@redhat.com> + + * linux-low.c (kill_wait_lwp): New function, based on + kill_one_lwp_callback, but use my_waitpid directly. + (kill_one_lwp_callback, linux_kill): Use it. + +2014-06-23 Pedro Alves <palves@redhat.com> + + * linux-x86-low.c (x86_linux_prepare_to_resume): Clear DR_CONTROL + before setting DR0..DR3. + +2014-06-20 Gary Benson <gbenson@redhat.com> + + * configure.ac (AC_REPLACE_FUNCS) <vasprintf, vsnprintf>: Removed. + * configure: Regenerated. + * config.in: Likewise. + +2014-06-20 Gary Benson <gbenson@redhat.com> + + * Makefile.in (SFILES): Update locations for files moved + from common to nat. + (object file files): Reordered. + +2014-06-20 Gary Benson <gbenson@redhat.com> + + * i386-low.h (i386_dr_low_can_set_addr): Removed. + (i386_dr_low_set_addr): Likewise. + (i386_dr_low_get_addr): Likewise. + (i386_dr_low_can_set_control): Likewise. + (i386_dr_low_set_control): Likewise. + (i386_dr_low_get_control): Likewise. + (i386_dr_low_get_status): Likewise. + (i386_get_debug_register_length): Likewise. + * linux-x86-low.c (i386_dr_low_set_addr): + Changed signature. Made static. + (i386_dr_low_get_addr): Likewise. + (i386_dr_low_set_control): Likewise. + (i386_dr_low_get_control): Likewise. + (i386_dr_low_get_status): Likewise. + (i386_dr_low): New global variable. + * win32-i386-low.c (i386_dr_low_set_addr): + Changed signature. Made static. + (i386_dr_low_get_addr): Likewise. + (i386_dr_low_set_control): Likewise. + (i386_dr_low_get_control): Likewise. + (i386_dr_low_get_status): Likewise. + (i386_dr_low): New global variable. + +2014-06-20 Marcus Shawcroft <marcus.shawcroft@arm.com> + + * configure.ac: Invoke. AC_CHECK_TOOL(AR, ar). + * Makefile.in (AR, AR_FLAGS): Define. + * configure: Regenerate. + +2014-06-19 Gary Benson <gbenson@redhat.com> + + * Makefile.in (i386-dregs.o): New rule. + * configure.srv: Add i386-dregs.o to all targets using i386-low.o. + * i386-low.c (target.h): Remove include. + (TARGET_HAS_DR_LEN_8): Now in i386-dregs.c. + (DR_CONTROL_SHIFT): Likewise. + (DR_CONTROL_SIZE): Likewise. + (DR_RW_EXECUTE): Likewise. + (DR_RW_WRITE): Likewise. + (DR_RW_READ): Likewise. + (DR_RW_IORW): Likewise. + (DR_LEN_1): Likewise. + (DR_LEN_2): Likewise. + (DR_LEN_4): Likewise. + (DR_LEN_8): Likewise. + (DR_LOCAL_ENABLE_SHIFT): Likewise. + (DR_GLOBAL_ENABLE_SHIFT): Likewise. + (DR_ENABLE_SIZE): Likewise. + (DR_LOCAL_SLOWDOWN): Likewise. + (DR_GLOBAL_SLOWDOWN): Likewise. + (DR_CONTROL_RESERVED): Likewise. + (I386_DR_CONTROL_MASK): Likewise. + (I386_DR_VACANT): Likewise. + (I386_DR_LOCAL_ENABLE): Likewise. + (I386_DR_GLOBAL_ENABLE): Likewise. + (I386_DR_DISABLE): Likewise. + (I386_DR_SET_RW_LEN): Likewise. + (I386_DR_GET_RW_LEN): Likewise. + (I386_DR_WATCH_HIT): Likewise. + (i386_wp_op_t): Likewise. + (i386_show_dr): Likewise. + (i386_length_and_rw_bits): Likewise. + (i386_insert_aligned_watchpoint): Likewise. + (i386_remove_aligned_watchpoint): Likewise. + (i386_handle_nonaligned_watchpoint): Likewise. + i386_update_inferior_debug_regs(): Likewise. + (i386_dr_insert_watchpoint): Likewise. + (i386_dr_remove_watchpoint): Likewise. + (i386_dr_region_ok_for_watchpoint): Likewise. + (i386_dr_stopped_data_address): Likewise. + (i386_dr_stopped_by_watchpoint): Likewise. + +2014-06-19 Gary Benson <gbenson@redhat.com> + + * i386-low.c (i386_dr_show): Renamed to + i386_show_dr and made static. All uses updated. + (i386_dr_length_and_rw_bits): Renamed to + i386_length_and_rw_bits and made static. + All uses updated. + (i386_dr_insert_aligned_watchpoint): Renamed to + i386_insert_aligned_watchpoint and made static. + All uses updated. + (i386_dr_remove_aligned_watchpoint): Renamed to + i386_remove_aligned_watchpoint and made static. + All uses updated. + (i386_dr_update_inferior_debug_regs): Renamed to + i386_update_inferior_debug_regs and made static. + All uses updated. + +2014-06-18 Gary Benson <gbenson@redhat.com> + + * i386-low.h (i386_dr_low_can_set_addr): New macro. + (i386_dr_low_can_set_control): Likewise. + (i386_get_debug_register_length): Likewise. + * i386-low.c (i386_dr_low_can_set_addr): Now in i386-low.h. + (i386_dr_low_can_set_control): Likewise. + (i386_get_debug_register_length): Likewise. + +2014-06-17 Gary Benson <gbenson@redhat.com> + + * i386-low.h (i386-dregs.h): New include. + (DR_FIRSTADDR): Now in i386-dregs.h. + (DR_LASTADDR): Likewise. + (DR_NADDR): Likewise. + (DR_STATUS): Likewise. + (DR_CONTROL): Likewise. + (i386_debug_reg_state): Likewise. + (i386_dr_insert_watchpoint): Likewise. + (i386_dr_remove_watchpoint): Likewise. + (i386_dr_region_ok_for_watchpoint): Likewise. + (i386_dr_stopped_data_address): Likewise. + (i386_dr_stopped_by_watchpoint): Likewise. + * i386-low.c (ALL_DEBUG_REGISTERS): Likewise. + +2014-06-18 Gary Benson <gbenson@redhat.com> + + * i386-low.h (i386_low_insert_watchpoint): Renamed to + i386_dr_insert_watchpoint. + (i386_low_remove_watchpoint): Renamed to + i386_dr_remove_watchpoint. + (i386_low_region_ok_for_watchpoint): Renamed to + i386_dr_region_ok_for_watchpoint. + (i386_low_stopped_data_address): Renamed to + i386_dr_stopped_data_address. + (i386_low_stopped_by_watchpoint): Renamed to + i386_dr_stopped_by_watchpoint. + * i386-low.c (i386_show_dr): Renamed to + i386_dr_show and made nonstatic. All uses updated. + (i386_length_and_rw_bits): Renamed to + i386_dr_length_and_rw_bits and made nonstatic. + All uses updated. + (i386_insert_aligned_watchpoint): Renamed to + i386_dr_insert_aligned_watchpoint and made nonstatic. + All uses updated. + (i386_remove_aligned_watchpoint): Renamed to + i386_dr_remove_aligned_watchpoint and made nonstatic. + All uses updated. + (i386_update_inferior_debug_regs): Renamed to + i386_dr_update_inferior_debug_regs and made nonstatic. + All uses updated. + (i386_low_insert_watchpoint): Renamed to + i386_dr_insert_watchpoint. All uses updated. + (i386_low_remove_watchpoint): Renamed to + i386_dr_remove_watchpoint. All uses updated. + (i386_low_region_ok_for_watchpoint): Renamed to + i386_dr_region_ok_for_watchpoint. All uses updated. + (i386_low_stopped_data_address): Renamed to + i386_dr_stopped_data_address. All uses updated. + (i386_low_stopped_by_watchpoint): Renamed to + i386_dr_stopped_by_watchpoint. All uses updated. + +2014-06-18 Gary Benson <gbenson@redhat.com> + + * i386-low.c (i386_dr_low_can_set_addr): New macro. + (i386_dr_low_can_set_control): Likewise. + (i386_insert_aligned_watchpoint): New check. + +2014-06-18 Gary Benson <gbenson@redhat.com> + + * i386-low.c (i386_update_inferior_debug_regs) <inf_state>: + Renamed to state. + +2014-06-18 Gary Benson <gbenson@redhat.com> + + * i386-low.c (i386_length_and_rw_bits): Use internal_error + instead of fatal and error. + (i386_handle_nonaligned_watchpoint): Likewise. + +2014-06-18 Gary Benson <gbenson@redhat.com> + + * i386-low.c (i386_get_debug_register_length): New macro. + (TARGET_HAS_DR_LEN_8): Remove conditional. Use above macro. + (i386_show_dr): Use debug_printf instead of fprintf. Use + phex to format values. + +2014-06-18 Gary Benson <gbenson@redhat.com> + + * i386-low.h: Comment changes. + * i386-low.c: Likewise. + +2014-06-18 Gary Benson <gbenson@redhat.com> + + * i386-low.c: Whitespace changes. + +2014-06-12 Tom Tromey <tromey@redhat.com> + + * utils.c (freeargv): Remove. + +2014-06-12 Tom Tromey <tromey@redhat.com> + + * debug.c (debug_printf): Remove HAVE_GETTIMEOFDAY checks. + * server.c (monitor_show_help): Remove HAVE_GETTIMEOFDAY check. + (parse_debug_format_options): Likewise. + (gdbserver_usage): Likewise. + * Makefile.in (LIBIBERTY_BUILDDIR, LIBIBERTY): New variables. + (SUBDIRS, REQUIRED_SUBDIRS): Add libiberty. + (gdbserver$(EXEEXT), gdbreplay$(EXEEXT)): Depend on and link + against libiberty. + ($(LIBGNU)): Depend on libiberty. + (all-lib): Recurse into all subdirs. + (install-only): Invoke "install" target in subdirs. + (vasprintf.o, vsnprintf.o, safe-ctype.o, lbasename.o): Remove + targets. + * configure: Rebuild. + * configure.ac: Add ACX_CONFIGURE_DIR for libiberty. Don't check + for vasprintf, vsnprintf, or gettimeofday. + * configure.srv: Don't add safe-ctype.o or lbasename.o to + srv_tgtobj. + +2014-06-05 Joel Brobecker <brobecker@adacore.com> + + * development.sh: Delete. + * Makefile.in (config.status): Adjust dependency on development.sh. + * configure.ac: Adjust development.sh source call. + * configure: Regenerate. + +2014-06-02 Pedro Alves <palves@redhat.com> + + * ax.c (gdb_free_agent_expr): New function. + * ax.h (gdb_free_agent_expr): New declaration. + * mem-break.c (delete_gdb_breakpoint_1): Also clear the commands + list. + (clear_breakpoint_conditions, clear_breakpoint_commands): Make + static. + (clear_breakpoint_conditions_and_commands): New function. + * mem-break.h (clear_breakpoint_conditions): Delete declaration. + (clear_breakpoint_conditions_and_commands): New declaration. + +2014-05-23 Ramana Radhakrishnan <ramana.radhakrishnan@arm.com> + + * linux-aarch64-low.c (asm/ptrace.h): Include. + +2014-05-21 Jan Kratochvil <jan.kratochvil@redhat.com> + + Fix TLS access for -static -pthread. + * gdbserver/thread-db.c (struct thread_db): Add td_thr_tlsbase_p. + (thread_db_get_tls_address): Call it if LOAD_MODULE is zero. + (thread_db_load_search, try_thread_db_load_1): Initialize it. + +2014-05-20 Pedro Alves <palves@redhat.com> + + * linux-aarch64-low.c (aarch64_insert_point) + (aarch64_remove_point): No longer check whether the type is + supported here. Adjust to new interface. + (the_low_target): Install aarch64_supports_z_point_type as + supports_z_point_type method. + * linux-arm-low.c (raw_bkpt_type_to_arm_hwbp_type): New function. + (arm_linux_hw_point_initialize): Take an enum raw_bkpt_type + instead of a Z packet char. Adjust. + (arm_supports_z_point_type): New function. + (arm_insert_point, arm_remove_point): Adjust to new interface. + (the_low_target): Install arm_supports_z_point_type. + * linux-crisv32-low.c (cris_supports_z_point_type): New function. + (cris_insert_point, cris_remove_point): Adjust to new interface. + Don't check whether the type is supported here. + (the_low_target): Install cris_supports_z_point_type. + * linux-low.c (linux_supports_z_point_type): New function. + (linux_insert_point, linux_remove_point): Adjust to new interface. + * linux-low.h (struct linux_target_ops) <insert_point, + remove_point>: Take an enum raw_bkpt_type instead of a char. Add + raw_breakpoint pointer parameter. + <supports_z_point_type>: New method. + * linux-mips-low.c (mips_supports_z_point_type): New function. + (mips_insert_point, mips_remove_point): Adjust to new interface. + Use mips_supports_z_point_type. + (the_low_target): Install mips_supports_z_point_type. + * linux-ppc-low.c (the_low_target): Install NULL as + supports_z_point_type method. + * linux-s390-low.c (the_low_target): Install NULL as + supports_z_point_type method. + * linux-sparc-low.c (the_low_target): Install NULL as + supports_z_point_type method. + * linux-x86-low.c (x86_supports_z_point_type): New function. + (x86_insert_point): Adjust to new insert_point interface. Use + insert_memory_breakpoint. Adjust to new + i386_low_insert_watchpoint interface. + (x86_remove_point): Adjust to remove_point interface. Use + remove_memory_breakpoint. Adjust to new + i386_low_remove_watchpoint interface. + (the_low_target): Install x86_supports_z_point_type. + * lynx-low.c (lynx_target_ops): Install NULL as + supports_z_point_type callback. + * nto-low.c (nto_supports_z_point_type): New. + (nto_insert_point, nto_remove_point): Adjust to new interface. + (nto_target_ops): Install nto_supports_z_point_type. + * mem-break.c: Adjust intro comment. + (struct raw_breakpoint) <raw_type, size>: New fields. + <inserted>: Update comment. + <shlib_disabled>: Delete field. + (enum bkpt_type) <gdb_breakpoint>: Delete value. + <gdb_breakpoint_Z0, gdb_breakpoint_Z1, gdb_breakpoint_Z2, + gdb_breakpoint_Z3, gdb_breakpoint_Z4>: New values. + (raw_bkpt_type_to_target_hw_bp_type): New function. + (find_enabled_raw_code_breakpoint_at): New function. + (find_raw_breakpoint_at): New type and size parameters. Use them. + (insert_memory_breakpoint): New function, based off + set_raw_breakpoint_at. + (remove_memory_breakpoint): New function. + (set_raw_breakpoint_at): Reimplement. + (set_breakpoint): New, based on set_breakpoint_at. + (set_breakpoint_at): Reimplement. + (delete_raw_breakpoint): Go through the_target->remove_point + instead of assuming memory breakpoints. + (find_gdb_breakpoint_at): Delete. + (Z_packet_to_bkpt_type, Z_packet_to_raw_bkpt_type): New functions. + (find_gdb_breakpoint): New function. + (set_gdb_breakpoint_at): Delete. + (z_type_supported): New function. + (set_gdb_breakpoint_1): New function, loosely based off + set_gdb_breakpoint_at. + (check_gdb_bp_preconditions, set_gdb_breakpoint): New functions. + (delete_gdb_breakpoint_at): Delete. + (delete_gdb_breakpoint_1): New function, loosely based off + delete_gdb_breakpoint_at. + (delete_gdb_breakpoint): New function. + (clear_gdb_breakpoint_conditions): Rename to ... + (clear_breakpoint_conditions): ... this. Don't handle a NULL + breakpoint. + (add_condition_to_breakpoint): Make static. + (add_breakpoint_condition): Take a struct breakpoint pointer + instead of an address. Adjust. + (gdb_condition_true_at_breakpoint): Rename to ... + (gdb_condition_true_at_breakpoint_z_type): ... this, and add + z_type parameter. + (gdb_condition_true_at_breakpoint): Reimplement. + (add_breakpoint_commands): Take a struct breakpoint pointer + instead of an address. Adjust. + (gdb_no_commands_at_breakpoint): Rename to ... + (gdb_no_commands_at_breakpoint_z_type): ... this. Add z_type + parameter. Return true if no breakpoint was found. Change debug + output. + (gdb_no_commands_at_breakpoint): Reimplement. + (run_breakpoint_commands): Rename to ... + (run_breakpoint_commands_z_type): ... this. Add z_type parameter, + and change return type to boolean. + (run_breakpoint_commands): New function. + (gdb_breakpoint_here): Also check for Z1 breakpoints. + (uninsert_raw_breakpoint): Don't try to reinsert a disabled + breakpoint. Go through the_target->remove_point instead of + assuming memory breakpoint. + (uninsert_breakpoints_at, uninsert_all_breakpoints): Uninsert + software and hardware breakpoints. + (reinsert_raw_breakpoint): Go through the_target->insert_point + instead of assuming memory breakpoint. + (reinsert_breakpoints_at, reinsert_all_breakpoints): Reinsert + software and hardware breakpoints. + (check_breakpoints, breakpoint_here, breakpoint_inserted_here): + Check both software and hardware breakpoints. + (validate_inserted_breakpoint): Assert the breakpoint is a + software breakpoint. Set the inserted flag to -1 instead of + setting shlib_disabled. + (delete_disabled_breakpoints): Adjust. + (validate_breakpoints): Only validate software breakpoints. + Adjust to inserted flag change. + (check_mem_read, check_mem_write): Skip breakpoint types other + than software breakpoints. Adjust to inserted flag change. + * mem-break.h (enum raw_bkpt_type): New enum. + (raw_breakpoint, struct process_info): Forward declare. + (Z_packet_to_target_hw_bp_type): Delete declaration. + (raw_bkpt_type_to_target_hw_bp_type, Z_packet_to_raw_bkpt_type) + (set_gdb_breakpoint, delete_gdb_breakpoint) + (clear_breakpoint_conditions): New declarations. + (set_gdb_breakpoint_at, clear_gdb_breakpoint_conditions): Delete. + (breakpoint_inserted_here): Update comment. + (add_breakpoint_condition, add_breakpoint_commands): Replace + address parameter with a breakpoint pointer parameter. + (gdb_breakpoint_here): Update comment. + (delete_gdb_breakpoint_at): Delete. + (insert_memory_breakpoint, remove_memory_breakpoint): Declare. + * server.c (process_point_options): Take a struct breakpoint + pointer instead of an address. Adjust. + (process_serial_event) <Z/z packets>: Use set_gdb_breakpoint and + delete_gdb_breakpoint. + * spu-low.c (spu_target_ops): Install NULL as + supports_z_point_type method. + * target.h: Include mem-break.h. + (struct target_ops) <prepare_to_access_memory>: Update comment. + <supports_z_point_type>: New field. + <insert_point, remove_point>: Take an enum raw_bkpt_type argument + instead of a char. Also take a raw breakpoint pointer. + * win32-arm-low.c (the_low_target): Install NULL as + supports_z_point_type. + * win32-i386-low.c (i386_supports_z_point_type): New function. + (i386_insert_point, i386_remove_point): Adjust to new interface. + (the_low_target): Install i386_supports_z_point_type. + * win32-low.c (win32_supports_z_point_type): New function. + (win32_insert_point, win32_remove_point): Adjust to new interface. + (win32_target_ops): Install win32_supports_z_point_type. + * win32-low.h (struct win32_target_ops): + <supports_z_point_type>: New method. + <insert_point, remove_point>: Take an enum raw_bkpt_type argument + instead of a char. Also take a raw breakpoint pointer. + +2014-05-20 Pedro Alves <palves@redhat.com> + + * mem-break.h: Include break-common.h. + (Z_PACKET_SW_BP, Z_PACKET_HW_BP, Z_PACKET_WRITE_WP) + (Z_PACKET_READ_WP, Z_PACKET_ACCESS_WP): New defines. + (Z_packet_to_target_hw_bp_type): New declaration. + * mem-break.c (Z_packet_to_target_hw_bp_type): New function. + * i386-low.c (Z_PACKET_HW_BP, Z_PACKET_WRITE_WP, Z_PACKET_READ_WP) + (Z_PACKET_ACCESS_WP): Delete macros. + (Z_packet_to_hw_type): Delete function. + * i386-low.h: Don't include break-common.h here. + (Z_packet_to_hw_type): Delete declaration. + * linux-x86-low.c (x86_insert_point, x86_insert_point): Call + Z_packet_to_target_hw_bp_type instead of Z_packet_to_hw_type. + * win32-i386-low.c (i386_insert_point, i386_remove_point): Call + Z_packet_to_target_hw_bp_type instead of Z_packet_to_hw_type. + * linux-aarch64-low.c: Don't include break-common.h here. + (Z_PACKET_SW_BP, Z_PACKET_HW_BP, Z_PACKET_WRITE_WP) + (Z_PACKET_READ_WP, Z_PACKET_ACCESS_WP): Delete macros. + (Z_packet_to_target_hw_bp_type): Delete function. + * linux-mips-low.c (rsp_bp_type_to_target_hw_bp_type): Delete + function. + (mips_insert_point, mips_remove_point): Use + Z_packet_to_target_hw_bp_type. + +2014-05-20 Pedro Alves <palves@redhat.com> + + * linux-aarch64-low.c: Include break-common.h. + (enum target_point_type): Delete. + (Z_packet_to_point_type): Rename to ... + (Z_packet_to_target_hw_bp_type): ... this, and return a + target_hw_bp_type instead. + (aarch64_show_debug_reg_state): Take an enum target_hw_bp_type + instead of an enum target_point_type. + (aarch64_point_encode_ctrl_reg): Likewise. Compute type mask from + breakpoint type. + (aarch64_dr_state_insert_one_point) + (aarch64_dr_state_remove_one_point, aarch64_handle_breakpoint) + (aarch64_handle_aligned_watchpoint) + (aarch64_handle_unaligned_watchpoint, aarch64_handle_watchpoint): + Take an enum target_hw_bp_type instead of an enum + target_point_type. + (aarch64_supports_z_point_type): New function. + (aarch64_insert_point, aarch64_remove_point): Use it. Adjust to + use Z_packet_to_target_hw_bp_type. + +2014-05-20 Joel Brobecker <brobecker@adacore.com> + + * configure.ac: Only use -Werror by default when DEVELOPMENT + is true. + * configure: Regenerate. + +2014-05-19 Jan Kratochvil <jan.kratochvil@redhat.com> + + Fix gdbserver qGetTLSAddr for x86_64 -m32. + * linux-x86-low.c (X86_64_USER_REGS): New. + (x86_fill_gregset): Call memset for BUF first in x86_64 -m32 case. + +2014-04-28 Yao Qi <yao@codesourcery.com> + + * Makefile.in (i386-avx512.c): Fix the typo of generated file + name. + +2014-04-25 Pedro Alves <palves@redhat.com> + + PR server/16255 + * linux-low.c (linux_attach_fail_reason_string): New function. + (linux_attach_lwp): Delete. + (linux_attach_lwp_1): Rename to ... + (linux_attach_lwp): ... this. Take a ptid instead of a pid as + argument. Remove "initial" parameter. Return int instead of + void. Don't error or warn here. + (linux_attach): Adjust to call linux_attach_lwp. Call error on + failure to attach to the tgid. Call warning when failing to + attach to an lwp. + * linux-low.h (linux_attach_lwp): Take a ptid instead of a pid as + argument. Remove "initial" parameter. Return int instead of + void. Don't error or warn here. + (linux_attach_fail_reason_string): New declaration. + * thread-db.c (attach_thread): Adjust to linux_attach_lwp's + interface change. Use linux_attach_fail_reason_string. + +2014-04-24 Michael Sturm <michael.sturm@mintel.com> + Walfred Tedeschi <walfred.tedeschi@intel.com> + + * Makefile.in: Added rules to handle new files + i386-avx512.c i386-avx512-linux.c amd64-avx512.c + amd64-avx512-linux.c x32-avx512.c x32-avx512-linux.c. + * configure.srv (srv_i386_regobj): Add i386-avx512.o. + (srv_i386_linux_regobj): Add i386-avx512-linux.o. + (srv_amd64_regobj): Add amd64-avx512.o and x32-avx512.o. + (srv_amd64_linux_regobj): Add amd64-avx512-linux.o and + x32-avx512-linux.o. + (srv_i386_32bit_xmlfiles): Add i386/32bit-avx512.xml. + (srv_i386_64bit_xmlfiles): Add i386/64bit-avx512.xml. + (srv_amd64_xmlfiles): Add i386/amd64-avx512.xml and + i386/x32-avx512.xml. + (srv_i386_linux_xmlfiles): Add i386/i386-avx512-linux.xml. + (srv_amd64_linux_xmlfiles): Add i386/amd64-avx512-linux.xml and + i386/x32-avx512-linux.xml. + * i387-fp.c (num_avx512_k_registers): New constant for number + of K registers. + (num_avx512_zmmh_low_registers): New constant for number of + lower ZMM registers (0-15). + (num_avx512_zmmh_high_registers): New constant for number of + higher ZMM registers (16-31). + (num_avx512_ymmh_registers): New contant for number of higher + YMM registers (ymm16-31 added by avx521 on x86_64). + (num_avx512_xmm_registers): New constant for number of higher + XMM registers (xmm16-31 added by AVX512 on x86_64). + (struct i387_xsave): Add space for AVX512 registers. + (i387_cache_to_xsave): Change raw buffer size to 64 characters. + Add code to handle AVX512 registers. + (i387_xsave_to_cache): Add code to handle AVX512 registers. + * linux-x86-low.c (init_registers_amd64_avx512_linux): New + prototypei from generated file. + (tdesc_amd64_avx512_linux): Likewise. + (init_registers_x32_avx512_linux): Likewise. + (tdesc_x32_avx512_linux): Likewise. + (init_registers_i386_avx512_linux): Likewise. + (tdesc_i386_avx512_linux): Likewise. + (x86_64_regmap): Add AVX512 registers. + (x86_linux_read_description): Add code to handle AVX512 XSTATE + mask. + (initialize_low_arch): Add code to initialize AVX512 registers. + +2014-04-23 Pedro Alves <palves@redhat.com> + + * mem-break.c (find_gdb_breakpoint_at): Make static. + * mem-break.h (find_gdb_breakpoint_at): Delete declaration. + +2014-04-23 Pedro Alves <palves@redhat.com> + + * i386-low.c: Don't include break-common.h here. + (i386_low_insert_watchpoint, i386_low_remove_watchpoint): Change + prototype to take target_hw_bp_type as argument instead of a Z + packet char. + * i386-low.h: Include break-common.h here. + (Z_packet_to_hw_type): Declare. + (i386_low_insert_watchpoint, i386_low_remove_watchpoint): Change + prototypes. + * linux-x86-low.c (x86_insert_point): Convert the packet number to + a target_hw_bp_type before calling i386_low_insert_watchpoint. + (x86_remove_point): Convert the packet number to a + target_hw_bp_type before calling i386_low_remove_watchpoint. + * win32-i386-low.c (i386_insert_point): Convert the packet number + to a target_hw_bp_type before calling i386_low_insert_watchpoint. + (i386_remove_point): Convert the packet number to a + target_hw_bp_type before calling i386_low_remove_watchpoint. + +2014-04-23 Pedro Alves <palves@redhat.com> + + * utils.h (perror_with_name): Add ATTRIBUTE_NORETURN. + +2014-04-10 Pedro Alves <palves@redhat.com> + + * mem-break.c (add_breakpoint_condition, add_breakpoint_commands): + Check if the condition or command is NULL before checking if the + breakpoint is known. On success, return true. + * mem-break.h (add_breakpoint_condition): Document return. + (add_breakpoint_commands): Add describing comment. + * server.c (skip_to_semicolon): New function. + (process_point_options): Use it. + +2014-04-09 Pedro Alves <palves@redhat.com> + + * linux-low.c (linux_read_loadmap): Pass current_inferior directly + to lwpid_of. + +2014-02-27 Pedro Alves <palves@redhat.com> + + PR 12702 + * inferiors.h (A_I_NEXT, ALL_INFERIORS_TYPE, ALL_PROCESSES): New + macros. + * linux-low.c (delete_lwp, handle_extended_wait): Add debug + output. + (last_thread_of_process_p): Take a PID argument instead of a + thread pointer. + (linux_wait_for_lwp): Delete. + (num_lwps, check_zombie_leaders, not_stopped_callback): New + functions. + (linux_low_filter_event): New function, party factored out from + linux_wait_for_event. + (linux_wait_for_event): Rename to ... + (linux_wait_for_event_filtered): ... this. Add new filter ptid + argument. Partly rewrite. Always use waitpid(-1, WNOHANG) and + sigsuspend. Check for zombie leaders. + (linux_wait_for_event): Reimplement as wrapper around + linux_wait_for_event_filtered. + (linux_wait_1): Handle TARGET_WAITKIND_NO_RESUMED. Assume that if + a normal or signal exit is seen, it's the whole process exiting. + (wait_for_sigstop): No longer a for_each_inferior callback. + Rewrite on top of linux_wait_for_event_filtered. + (stop_all_lwps): Call wait_for_sigstop directly. + * server.c (resume, handle_target_event): Handle + TARGET_WAITKIND_NO_RESUMED. + +2014-02-26 Joel Brobecker <brobecker@adacore.com> + + * win32-low.c (psapi_get_dll_name, + * win32_CreateToolhelp32Snapshot): Delete. + (win32_CreateToolhelp32Snapshot, win32_Module32First) + (win32_Module32Next, load_toolhelp, toolhelp_get_dll_name): + Delete. + (handle_load_dll): Add function description. + Remove code using psapi_get_dll_name and toolhelp_get_dll_name. + +2014-02-26 Joel Brobecker <brobecker@adacore.com> + + * win32-low.c (win32_add_one_solib): Add 0x1000 to load_addr. + Add comment. + (win32_add_all_dlls): Remove 0x1000 offset applied to DLL + base address when calling win32_add_one_solib. + (handle_load_dll): Delete local variable load_addr. + Remove 0x1000 offset applied to DLL base address when calling + win32_add_one_solib. + (handle_unload_dll): Add comment. + +2014-02-26 Joel Brobecker <brobecker@adacore.com> + + * win32-low.c (win32_add_all_dlls): Renames + win32_ensure_ntdll_loaded. Rewrite function documentation. + Adjust implementation to always load all DLLs. + Add 0x1000 offset to DLL base address when calling + win32_add_one_solib. + (child_initialization_done): New static global. + (do_initial_child_stuff): Set child_initialization_done to + zero during child initialization, and 1 after. Replace call + to win32_ensure_ntdll_loaded by call to win32_add_all_dlls. + Add comment. + (match_dll_by_basename, dll_is_loaded_by_basename): Delete. + (handle_unload_dll): Add function documentation. + (get_child_debug_event): Ignore load and unload DLL events + during child initialization. + +2014-02-20 Doug Evans <dje@google.com> + + Remove global all_lwps. + * inferiors.h (ptid_of): Move here from linux-low.h. + (pid_of, lwpid_of): Ditto. + * linux-aarch64-low.c (debug_reg_change_callback): Update, "entry" + parameter is a struct thread_info * now. + (aarch64_notify_debug_reg_change): Fetch pid from current_inferior + directly. Pass &all_threads to find_inferior instead of &all_lwps. + (aarch64_stopped_data_address): Fetch lwpid from current_inferior + directly. + (aarch64_linux_prepare_to_resume): Fetch ptid from thread. + (aarch64_arch_setup): Fetch lwpid from current_inferior directly. + * linux-arm-low.c (update_registers_callback): Update, "entry" + parameter is a struct thread_info * now. + Fetch lwpid from current_inferior directly. + (arm_insert_point): Pass &all_threads to find_inferior instead of + &all_lwps. + (arm_remove_point): Ditto. + (arm_stopped_by_watchpoint): Fetch lwp from current_inferior. + (arm_prepare_to_resume): Fetch pid from thread. + (arm_read_description): Fetch lwpid from current_inferior directly. + * linux-low.c (all_lwps): Delete. + (delete_lwp): Delete call to remove_inferior. + (handle_extended_wait): Fetch lwpid from thread. + (add_lwp): Don't set lwp->entry.id. Remove call to + add_inferior_to_list. + (linux_attach_lwp_1): Fetch pid from current_inferior directly. + (linux_kill_one_lwp): Fetch ptid,lwpid from thread. + (kill_one_lwp_callback): Ditto. + (linux_kill): Don't dereference NULL pointer. + Fetch ptid,lwpid from thread. + (get_detach_signal): Fetch ptid from thread. + (linux_detach_one_lwp): Fetch ptid,lwpid from thread. + Simplify call to regcache_invalidate_thread. + (delete_lwp_callback): Update, "entry" parameter is a + struct thread_info * now. Fetch pid from thread. + (linux_mourn): Pass &all_threads to find_inferior instead of &all_lwps. + (status_pending_p_callback): Update, "entry" parameter is a + struct thread_info * now. Fetch ptid from thread. + (find_lwp_pid): Update, "entry" parameter is a + struct thread_info * now. + (linux_wait_for_lwp): Fetch pid from thread. + (linux_fast_tracepoint_collecting): Fetch lwpid from thread. + (maybe_move_out_of_jump_pad): Fetch lwpid from current_inferior. + (enqueue_one_deferred_signal): Fetch lwpid from thread. + (dequeue_one_deferred_signal): Ditto. + (cancel_breakpoint): Fetch ptid from current_inferior. + (linux_wait_for_event): Pass &all_threads to find_inferior, + not &all_lwps. Fetch ptid, lwpid from thread. + (count_events_callback): Update, "entry" parameter is a + struct thread_info * now. + (select_singlestep_lwp_callback): Ditto. + (select_event_lwp_callback): Ditto. + (cancel_breakpoints_callback): Ditto. + (linux_cancel_breakpoints): Pass &all_threads to find_inferior, + not &all_lwps. + (select_event_lwp): Ditto. Fetch ptid from event_thread. + (unsuspend_one_lwp): Update, "entry" parameter is a + struct thread_info * now. + (unsuspend_all_lwps): Pass &all_threads to find_inferior, + not &all_lwps. + (linux_stabilize_threads): Ditto. And for for_each_inferior. + Fetch lwpid from thread, not lwp. + (linux_wait_1): Fetch ptid, lwpid from current_inferior. + Pass &all_threads to find_inferior, not &all_lwps. + (send_sigstop): Fetch lwpid from thread, not lwp. + (send_sigstop_callback): Update, "entry" parameter is a + struct thread_info * now. + (suspend_and_send_sigstop_callback): Ditto. + (wait_for_sigstop): Ditto. Fetch ptid, lwpid from thread, lwp. + (stuck_in_jump_pad_callback): Update, "entry" parameter is a + struct thread_info * now. + (move_out_of_jump_pad_callback): Ditto. Fetch ptid, lwpid + from thread, lwp. + (lwp_running): Update, "entry" parameter is a + struct thread_info * now. + (stop_all_lwps): Fetch ptid from thread. + Pass &all_threads to find_inferior, for_each_inferior, not &all_lwps. + (linux_resume_one_lwp): Fetch lwpid from thread. + (linux_set_resume_request): Update, "entry" parameter is a + struct thread_info * now. Fetch pid, lwpid from thread. + (resume_status_pending_p): Update, "entry" parameter is a + struct thread_info * now. + (need_step_over_p): Ditto. Fetch lwpid from thread. + (start_step_over): Fetch lwpid from thread. + (linux_resume_one_thread): Update, "entry" parameter is a + struct thread_info * now. Fetch lwpid from thread. + (linux_resume): Pass &all_threads to find_inferior, not &all_lwps. + (proceed_one_lwp): Update, "entry" parameter is a + struct thread_info * now. Fetch lwpid from thread. + (unsuspend_and_proceed_one_lwp): Update, "entry" parameter is a + struct thread_info * now. + (proceed_all_lwps): Pass &all_threads to find_inferior, not &all_lwps. + (unstop_all_lwps): Ditto. Fetch lwpid from thread. + (regsets_fetch_inferior_registers): Fetch lwpid from current_inferior + directly. + (regsets_store_inferior_registers): Ditto. + (fetch_register, store_register): Ditto. + (linux_read_memory, linux_write_memory): Ditto. + (linux_request_interrupt): Ditto. + (linux_read_auxv): Ditto. + (linux_xfer_siginfo): Ditto. + (linux_qxfer_spu): Ditto. + (linux_qxfer_libraries_svr4): Ditto. + * linux-low.h (ptid_of, pid_of, lwpid_of): Delete, + moved to inferiors.h. + (get_lwp): Delete. + (get_thread_lwp): Update. + (struct lwp_info): Delete member "entry". Simplify comment for + member "thread". + (all_lwps): Delete. + * linux-mips-low.c (mips_read_description): Fetch lwpid from + current_inferior directly. + (update_watch_registers_callback): Update, "entry" parameter is a + struct thread_info * now. Fetch pid from thread. + (mips_linux_prepare_to_resume): Fetch ptid from thread. + (mips_insert_point): Fetch lwpid from current_inferior. + Pass &all_threads to find_inferior, not &all_lwps. + (mips_remove_point): Pass &all_threads to find_inferior, not &all_lwps. + (mips_stopped_by_watchpoint): Fetch lwpid from current_inferior + directly. + (mips_stopped_data_address): Ditto. + * linux-s390-low.c (s390_arch_setup): Fetch pid from current_inferior + directly. + * linux-tile-low.c (tile_arch_setup): Ditto. + * linux-x86-low.c (x86_get_thread_area): Fetch lwpid from thread. + (update_debug_registers_callback): Update, "entry" parameter is a + struct thread_info * now. Fetch pid from thread. + (i386_dr_low_set_addr): Fetch pid from current_inferior directly. + Pass &all_threads to find_inferior, not &all_lwps. + (i386_dr_low_get_addr): Fetch ptid from current_inferior directly. + (i386_dr_low_set_control): Fetch pid from current_inferior directly. + Pass &all_threads to find_inferior, not &all_lwps. + (i386_dr_low_get_control): Fetch ptid from current_inferior directly. + (i386_dr_low_get_status): Ditto. + (x86_linux_prepare_to_resume): Fetch ptid from thread. + (x86_siginfo_fixup): Fetch lwpid from current_inferior directly. + (x86_linux_read_description): Ditto. + * proc-service.c (ps_getpid): Fetch pid from current_inferior directly. + +2014-02-20 Doug Evans <dje@google.com> + + * inferiors.c (get_first_inferior): Fix buglet. + +2014-02-19 Doug Evans <dje@google.com> + + * gdbthread.h (add_thread): Change result type to struct thread_info *. + * inferiors.c (add_thread): Change result type to struct thread_info *. + All callers updated. + (add_lwp): Call add_thread here instead of in callers. + All callers updated. + * linux-low.h (get_lwp_thread): Rewrite. + (struct lwp_info): New member "thread". + +2014-02-19 Doug Evans <dje@google.com> + + * linux-low.c (add_lwp): Change result to struct lwp_info *. + All callers updated. + +2014-02-19 Doug Evans <dje@google.com> + + * inferiors.c (add_thread): Fix whitespace. + +2014-02-19 Doug Evans <dje@google.com> + + * dll.c (clear_dlls): Replace accessing list implemention details + with API function. + * gdbthread.h (get_first_thread): Declare. + * inferiors.c (for_each_inferior_with_data): New function. + (get_first_thread): New function. + (find_thread_ptid): Simplify. + (get_first_inferior): New function. + (clear_list): Delete. + (one_inferior_p): New function. + (clear_inferior_list): New function. + (clear_inferiors): Update. + * inferiors.h (for_each_inferior_with_data): Declare. + (clear_inferior_list): Declare. + (one_inferior_p): Declare. + (get_first_inferior): Declare. + * linux-low.c (linux_wait_for_event): Replace accessing list + implemention details with API function. + * server.c (target_running): Ditto. + (accumulate_file_name_length): New function. + (emit_dll_description): New function. + (handle_qxfer_libraries): Replace accessing list implemention + details with API function. + (handle_qxfer_threads_worker): New function. + (handle_qxfer_threads_proper): Replace accessing list implemention + details with API function. + (handle_query): Ditto. + (visit_actioned_threads_callback_ftype): New typedef. + (visit_actioned_threads_data): New struct. + (visit_actioned_threads): Rewrite to be find_inferior callback. + (resume): Call find_inferior. + (handle_status): Replace accessing list implemention + details with API function. + (process_serial_event): Replace accessing list implemention details + with API function. + * target.c (set_desired_inferior): Replace accessing list implemention + details with API function. + * tracepoint.c (same_process_p): New function. + (gdb_agent_about_to_close): Replace accessing list implemention + details with API function. + * win32-low.c (child_delete_thread): Replace accessing list + implemention details with API function. + (match_dll_by_basename): New function. + (dll_is_loaded_by_basename): New function. + (win32_ensure_ntdll_loaded): Replace accessing list implemention + details call to dll_is_loaded_by_basename. + +2014-02-19 Doug Evans <dje@google.com> + + * dll.h (struct dll_info): Add comment. + * gdbthread.h (struct thread_info): Add comment. + (current_ptid): Simplify. + * inferiors.c (add_process): Update. + (remove_process): Update. + * inferiors.h (struct process_info): Rename member "head" to "entry". + * linux-low.c (delete_lwp): Update. + (add_lwp): Update. + (last_thread_of_process_p): Update. + (kill_one_lwp_callback, linux_kill): Update. + (status_pending_p_callback): Update. + (wait_for_sigstop): Update. Simplify read of ptid. + (start_step_over): Update. + * linux-low.h (ptid_of, pid_of, lwpid_of): Update. + (get_lwp_thread): Update. + (struct lwp_info): Rename member "head" to "entry". + * regcache.h (inferior_list_entry): Delete. + * server.c (kill_inferior_callback): Update. + (detach_or_kill_inferior_callback): Update. + (print_started_pid): Update. + (print_attached_pid): Update. + (process_serial_event): Simplify read of ptid. + * thread-db.c (thread_db_create_event): Update. + (thread_db_get_tls_address): Update. + * win32-low.c (current_inferior_ptid): Simplify. + +2014-02-19 Tom Tromey <tromey@redhat.com> + + * target.h (struct target_ops) <supports_btrace>: Add target_ops + argument. + (target_supports_btrace): Update. + +2014-02-14 Yao Qi <yao@codesourcery.com> + + * Makefile.in (IPA_OBJS): Append rsp-low-ipa.o. + (rsp-low-ipa.o): New target. + +2014-02-12 Tom Tromey <tromey@redhat.com> + + * ax.c (gdb_parse_agent_expr): Use hex2bin, not + convert_ascii_to_int. + * regcache.c (registers_to_string): Likewise. + * remote-utils.c (decode_M_packet): Likewise. + * server.c (process_serial_event): Likewise. + +2014-02-12 Tom Tromey <tromey@redhat.com> + + * server.c (handle_query, handle_v_run): Use hex2bin, not + unhexify. + * tracepoint.c (cmd_qtdpsrc, cmd_qtdv, cmd_qtnotes): Likewise. + +2014-02-12 Tom Tromey <tromey@redhat.com> + + * ax.c (gdb_unparse_agent_expr): Use bin2hex, not + convert_int_to_ascii. + * regcache.c (registers_to_string, collect_register_as_string): + Likewise. + * remote-utils.c (look_up_one_symbol, relocate_instruction): + Likewise. + * server.c (process_serial_event): Likewise. + * tracepoint.c (cmd_qtstatus, response_source, response_tsv) + (cmd_qtbuffer, cstr_to_hexstr): Likewise. + +2014-02-12 Tom Tromey <tromey@redhat.com> + + * remote-utils.c (look_up_one_symbol, monitor_output): Use + bin2hex, not hexify. + * tracepoint.c (cmd_qtstatus): Likewise. + +2014-02-12 Tom Tromey <tromey@redhat.com> + + * remote-utils.c (monitor_output): Pass explicit length to + hexify. + +2014-02-12 Tom Tromey <tromey@redhat.com> + + * tracepoint.c: Include rsp-low.h. + * server.c: Include rsp-low.h. + * remote-utils.h (convert_ascii_to_int, convert_int_to_ascii) + (unhexify, hexify, remote_escape_output, unpack_varlen_hex): Don't + declare. + * remote-utils.c: Include rsp-low.h. + (fromhex, hexchars, ishex, unhexify, tohex, hexify) + (remote_escape_output, remote_unescape_input, unpack_varlen_hex) + (convert_int_to_ascii, convert_ascii_to_int): Move to + common/rsp-low.c. + * regcache.c: Include rsp-low.h. + * ax.c: Include rsp-low.h. + * Makefile.in (SFILES): Add common/rsp-low.c. + (OBS): Add rsp-low.o. + (rsp-low.o): New target. + +2014-02-12 Tom Tromey <tromey@redhat.com> + + * utils.h (pulongest, plongest, phex_nz): Don't declare. + Include print-utils.h. + * utils.c (NUMCELLS, CELLSIZE, get_cell, decimal2str, pulongest) + (plongest, thirty_two, phex_nz): Remove. + * Makefile.in (SFILES): Add common/print-utils.c. + (OBS): Add print-utils.o. + (print-utils-ipa.o): New target. + (print-utils.o): New target. + (IPA_OBJS): Add print-utils-ipa.o. + +2014-02-06 Tom Tromey <tromey@redhat.com> + + * Makefile.in (SFILES): Fix indentation. + +2014-02-05 Doug Evans <dje@google.com> + + * linux-low.c (linux_wait_for_event): Improve comment. + (linux_wait_1): Keep current_inferior in sync with event_child. + +2014-01-22 Doug Evans <dje@google.com> + + * gdbthread.h (gdb_id_to_thread): Delete, unused. + +2014-01-22 Doug Evans <dje@google.com> + + * configure.ac (AC_CHECK_FUNCS): Add test for gettimeofday. + * configure: Regenerate. + * config.in: Regenerate. + * Makefile.in (SFILES): Add debug.c. + (OBS): Add debug.o. + * debug.c: New file. + * debug.h: New file. + * linux-aarch64-low.c (*): Update all debugging printfs to use + debug_printf instead of fprintf. + * linux-arm-low.c (*): Ditto. + * linux-cris-low.c (*): Ditto. + * linux-crisv32-low.c (*): Ditto. + * linux-m32r-low.c (*): Ditto. + * linux-sparc-low.c (*): Ditto. + * linux-x86.c (*): Ditto. + * linux-low.c (*): Ditto. + (linux_wait_1): Add calls to debug_enter, debug_exit. + (linux_wait): Remove redundant debugging printf. + (stop_all_lwps): Add calls to debug_enter, debug_exit. + (linux_resume, unstop_all_lwps): Ditto. + * mem-break.c (*): Update all debugging printfs to use + debug_printf instead of fprintf. + * remote-utils.c (*): Ditto. + * thread-db.c (*): Ditto. + * server.c #include <ctype.h>, "gdb_vecs.h". + (debug_threads): Moved to debug.c. + (*): Update all debugging printfs to use debug_printf instead of + fprintf. + (start_inferior): Replace call to fflush with call to debug_flush. + (monitor_show_help): Mention set debug-format. + (parse_debug_format_options): New function. + (handle_monitor_command): Handle "monitor set debug-format". + (gdbserver_usage): Mention --debug-format. + (main): Parse --debug-format. + * server.h (debug_threads): Declaration moved to debug.h. + #include "debug.h". + * tracepoint.c (trace_debug_1) [!IN_PROCESS_AGENT]: Add version of + trace_debug_1 that uses debug_printf. + (tracepoint_look_up_symbols): Update all debugging printfs to use + debug_printf instead of fprintf. + +2014-01-20 Baruch Siach <baruch@tkos.co.il> + + * linux-xtensa-low.c: Include asm/ptrace.h instead of + sys/ptrace.h. + +2014-01-17 Pedro Alves <palves@redhat.com> + + PR build/16445 + * linux-x86-low.c: Don't include elf/common.h if ELFMAG0 is + defined after including gdb_proc_service.h. + +2014-01-16 Doug Evans <dje@google.com> + + * dll.c (UNSPECIFIED_CORE_ADDR): New macro. + (match_dll): Use it. + +2014-01-16 Markus Metzger <markus.t.metzger@intel.com> + + * target.h (target_ops) <read_btrace>: Change parameters and + return type to allow error reporting. + * server.c (handle_qxfer_btrace): Support delta reads. Pass + trace reading errors on. + * linux-low.c (linux_low_read_btrace): Pass trace reading + errors on. + (linux_low_disable_btrace): New. + +2014-01-15 Doug Evans <dje@google.com> + + * inferiors.c (thread_id_to_gdb_id): Delete. + * inferiors.h (thread_id_to_gdb_id): Delete. + +2014-01-13 Eli Zaretskii <eliz@gnu.org> + + * Makefile.in (INCLUDE_CFLAGS): Remove trailing slash from + "-I$(srcdir)/../". Fixes MinGW compilation errors with old GCC + versions. + +2014-01-08 Pedro Alves <palves@redhat.com> + + * server.c (handle_status): Don't discard previous queued stop + replies or thread's pending status here. + (main) <disconnection>: Do it here instead. + +2014-01-08 Pedro Alves <palves@redhat.com> + + * gdbthread.h (struct thread_info) <status_pending_p>: New field. + * server.c (visit_actioned_threads, handle_pending_status): New + function. + (handle_v_cont): Factor out parts to ... + (resume): ... this new function. If in all-stop, and a thread + being resumed has a pending status, report it without actually + resuming. + (myresume): Adjust to use the new 'resume' function. + (clear_pending_status_callback, set_pending_status_callback) + (find_status_pending_thread_callback): New functions. + (handle_status): Handle the case of multiple threads having + interesting statuses to report. Report threads' real last signal + instead of always reporting GDB_SIGNAL_TRAP. Look for a thread + with an interesting thread to report the status for, instead of + always reporting the status of the first thread. + +2014-01-01 Joel Brobecker <brobecker@adacore.com> + + * gdbserver.c (gdbserver_version): Set copyright year to 2014. + * gdbreplay.c (gdbreplay_version): Likewise. + +2013-12-18 Yufeng Zhang <yufeng.zhang@arm.com> + + * linux-aarch64-low.c (aarch64_linux_set_debug_regs): Set + iov.iov_len with the real length in use. + +2013-12-13 Joel Brobecker <brobecker@adacore.com> + + * Makefile.in (safe-ctype.o, lbasename.o): New rules. + * configure.srv: Add safe-ctype.o and lbasename.o to srv_tgtobj + for all targets that use win32-low.c. + * win32-low.c (win32_ensure_ntdll_loaded): New function. + (do_initial_child_stuff): Add call to win32_ensure_ntdll_loaded. + +2013-12-13 Pedro Alves <palves@redhat.com> + + * target.c (mywait): Set OURSTATUS->KIND to TARGET_WAITKIND_STOPPED + if equal to TARGET_WAITKIND_LOADED. + * win32-low.c (cached_status): New static global. + (win32_wait): Add declaration. + (do_initial_child_stuff): Flush all initial pending debug events + up to the initial breakpoint. + (win32_wait): If CACHED_STATUS was set, return that instead + of doing a real wait. Remove the code resuming the execution + of the inferior after receiving a TARGET_WAITKIND_LOADED event + during the initial phase. Also remove the code changing + OURSTATUS->KIND from TARGET_WAITKIND_LOADED to + TARGET_WAITKIND_STOPPED. + +2013-12-11 Yao Qi <yao@codesourcery.com> + + * notif.c (handle_notif_ack): Return 0 if no notification + matches. + +2013-11-20 Doug Evans <dje@google.com> + + * linux-low.c (linux_set_resume_request): Fix comment. + +2013-11-20 Doug Evans <dje@google.com> + + * linux-low.c (resume_status_pending_p): Tweak comment. + +2013-11-20 Walfred Tedeschi <walfred.tedeschi@intel.com> + + * Makefile.in: Add i386-mpx.c, i386-mpx-linux.c, amd64-mpx.c, + amd64-mpx-linux.c, x32-mpx.c and x32-mpx-linux.c generation. + * configure.srv (srv_i386_regobj): Add i386-mpx.o. + (srv_i386_linux_regobj): Add i386-mpx-linux.o. + (srv_amd64_regobj): Add amd64-mpx.o. + (srv_amd64_linux_regobj): Add amd64-mpx-linux.o. + (srv_i386_32bit_xmlfiles): Add i386/32bit-mpx.xml. + (srv_i386_64bit_xmlfiles): Add i386/64bit-mpx.xml. + * i387-fp.c (num_pl_bnd_register) Added constant. + (num_pl_bnd_cfg_registers) Added constant. + (struct i387_xsave) Added reserved area and MPX fields. + (i387_cache_to_xsave, i387_xsave_to_cache) Add MPX. + * linux-x86-low.c (init_registers_i386_mpx_linux): Declare new + function. + (tdesc_i386_mpx_linux): Add MPX amd64 target. + (init_registers_amd64_mpx_linux): Declare new function. + (tdesc_amd64_mpx_linux): Add MPX amd64 target. + (x86_64_regmap): Add MPX registers. + (x86_linux_read_description): Add MPX case. + (initialize_low_arch): Initialize MPX targets. + +2013-11-18 Tom Tromey <tromey@redhat.com> + + * configure: Rebuild. + * configure.ac: Don't check for stdlib.h. + * gdbreplay.c: Unconditionally include stdlib.h. + +2013-11-18 Tom Tromey <tromey@redhat.com> + + * config.in: Rebuild. + * configure: Rebuild. + * configure.ac: Don't use AC_HEADER_DIRENT. + +2013-11-18 Tom Tromey <tromey@redhat.com> + + * server.h: Don't check HAVE_STRING_H. + * gdbreplay.c: Don't check HAVE_STRING_H. + * configure: Rebuild. + +2013-11-18 Tom Tromey <tromey@redhat.com> + + * Makefile.in (gdbreplay$(EXEEXT)): Depend on and link against + LIBGNU. + +2013-11-08 Tom Tromey <tromey@redhat.com> + + * configure, config.in: Rebuild. + * configure.ac: Remove unused configury. + +2013-11-08 Tom Tromey <tromey@redhat.com> + + * acinclude.m4: Include common.m4, codeset.m4. + * configure, config.in: Rebuild. + * configure.ac: Use GDB_AC_COMMON. + +2013-11-06 Andreas Arnez <arnez@linux.vnet.ibm.com> + + * linux-s390-low.c (HWCAP_S390_TE): New define. + (s390_arch_setup): Consider the TE field in the HWCAP for + determining 'have_regset_tdb'. + +2013-10-16 Sergio Durigan Junior <sergiodj@redhat.com> + + PR gdb/16014 + * tracepoint.c (download_tracepoint_1): Remove unnecessary double + call to sizeof. + +2013-10-02 Pedro Alves <palves@redhat.com> + + * server.c (process_serial_event): Don't output "GDBserver + exiting" if GDB is connected through stdio. + * target.c (mywait): Likewise, be silent if GDB is connected + through stdio. + +2013-10-01 Joel Brobecker <brobecker@adacore.com> + + * lynx-low.c (lynx_add_threads_after_attach): New function. + (lynx_attach): Remove call to add_thread. Add call to + lynx_add_threads_after_attach instead. + +2013-09-28 Mike Frysinger <vapier@gentoo.org> + + * configure.ac (AC_CHECK_HEADERS): Add sys/syscall.h + * config.in, configure: Regenerated. + +2013-09-18 Yao Qi <yao@codesourcery.com> + + PR server/15959 + * server.c (start_inferior): Clear 'resume_info'. + +2013-09-16 Jiong Wang <jiwang@tilera.com> + + * linux-tile-low.c (tile_regsets): Modify the size field to 64-bit + for each register. + +2013-09-16 Jiong Wang <jiwang@tilera.com> + + * configure.srv <tilegx*-*-linux*>: Remove linux-osdata.o from and add + linux-tile-low.o to srv_tgtobj. + +2013-09-16 Will Newton <will.newton@linaro.org> + + * linux-aarch64-low.c (aarch64_linux_set_debug_regs): Zero + out regs. + +2013-09-06 Pedro Alves <palves@redhat.com> + + * Makefile.in (gdb_proc_service_h, regdef_h, regcache_h) + (signals_def, signals_h, ptid_h, ax_h, agent_h, linux_btrace_h) + (linux_osdata_h, vec_h, gdb_vecs_h, host_defs_h, libiberty_h) + (server_h, gdbthread_h, linux_low_h, linux_ptrace_h) + (gdb_thread_db_h, linux_procfs_h, lynx_low_h, nto_low_h) + (mips_linux_watch_h, i386_low_h, win32_low_h): Delete. + +2013-09-06 Pedro Alves <palves@redhat.com> + + * Makefile.in (linux-btrace.o, mips-linux-watch.o): Remove + explicit header dependencies and use $COMPILE/$POSTCOMPILE. + +2013-09-06 Pedro Alves <palves@redhat.com> + + * linux-amd64-ipa.c: Include tracepoint.h. + * linux-i386-ipa.c: Include tracepoint.h. + +2013-09-06 Ricard Wanderlof <ricardw@axis.com> + + * linux-crisv32-low.c (PTRACE_GET_THREAD_AREA): New macro. + (ps_get_thread_area): New function. + +2013-09-06 Ricard Wanderlof <ricardw@axis.com> + + * linux-crisv32-low.c (elf_gregset_t): Delete typedef. + (initialize_low_arch): Call init_registers_crisv32 rather than + init_register_crisv32. + +2013-09-05 Pedro Alves <palves@redhat.com> + + * server.h (handle_vFile, hostio_last_error_from_errno): Move + to ... + * hostio.h: ... this new file. + * hostio.c, server.c, linux-low.c, nto-low.c, spu-low, + win32-low.c: Include hostio.h. + +2013-09-05 Pedro Alves <palves@redhat.com> + + * server.h (gdb_client_data, handler_func, callback_handler_func) + (delete_file_handler, add_file_handler, append_callback_event) + (delete_callback_event, start_event_loop, initialize_event_loop): + Move to event-loop.h and include it. + * event-loop.h: New file. + +2013-09-05 Pedro Alves <palves@redhat.com> + + * dll.c, inferiors.c, remote-utils.c, server.c: Include "dll.h". + * server.h (struct dll_info, all_dlls, dlls_changed, clear_dlls) + (loaded_dll, unloaded_dll): Move to ... + * dll.h: ... this new file. + * inferiors.c, remote-utils.c, win32-low.c: Include "dll.h". + +2013-09-05 Pedro Alves <palves@redhat.com> + + * server.h (current_process, get_thread_process, all_processes) + (add_inferior_to_list, for_each_inferior, current_inferior) + (remove_inferior, add_process, remove_process, find_process_pid) + (have_started_inferiors_p, have_attached_inferiors_p) + (thread_id_to_gdb_id, thread_to_gdb_id, gdb_id_to_thread_id) + (clear_inferiors, find_inferior, find_inferior_id) + (inferior_target_data, set_inferior_target_data) + (inferior_regcache_data, set_inferior_regcache_data): Move to + inferiors.h, and include it. + * inferiors.h: New file. + +2013-09-05 Pedro Alves <palves@redhat.com> + + * server.h (struct emit_ops, current_insn_ptr, emit_error): + Move ... + * ax.h: ... here. + +2013-09-05 Pedro Alves <palves@redhat.com> + + * ax.c, linux-low.c, linux-x86-low.c, server.c: Include + tracepoint.h. + * server.h (IPA_BUFSIZ, initialize_tracepoint, tracing) + (disconnected_tracing, tracepoint_look_up_symbols, stop_tracing + (handle_tracepoint_general_set, handle_tracepoint_query) + (tracepoint_finished_step, tracepoint_was_hit) + (release_while_stepping_state_list, current_traceframe) + (in_readonly_region, traceframe_read_mem) + (fetch_traceframe_registers, traceframe_read_sdata) + (traceframe_read_info, struct fast_tpoint_collect_status) + (fast_tracepoint_collecting, force_unlock_trace_buffer) + (handle_tracepoit_bkpts, initialize_low_tracepoint) + (supply_fast_tracepoint_registers) + (supply_static_tracepoint_registers, set_trampoline_buffer_space) + (ipa_tdesc, claim_trampoline_space) + (have_fast_tracepoint_trampoline_buffer, gdb_agent_about_to_close) + (agent_mem_read, agent_get_trace_state_variable_value) + (agent_set_trace_state_variable_value, agent_tsv_read) + (agent_mem_read_string, get_raw_reg_func_addr) + (get_get_tsv_func_addr, get_set_tsv_func_addr): Move to ... + * tracepoint.h: ... this new file. + +2013-09-05 Pedro Alves <palves@redhat.com> + + * server.h (perror_with_name, error, fatal, warning, paddress) + (pulongest, plongest, phex_nz, pfildes): Move to utils.h, and + include it. + * utils.h: New file. + +2013-09-05 Pedro Alves <palves@redhat.com> + + * server.h (remote_debug, noack_mode, transport_is_reliable) + (gdb_connected, STDIO_CONNECTION_NAME, remote_connection_is_stdio) + (read_ptid, write_ptid, putpkt, putpkt_binary, putpkt_notif) + (getpkt, remote_prepare, remote_open, remote_close, write_ok) + (write_enn, initialize_async_io, enable_async_io) + (disable_async_io, check_remote_input_interrupt_request) + (convert_ascii_to_int, convert_int_to_ascii, new_thread_notify) + (dead_thread_notify, prepare_resume_reply) + (decode_address_to_semicolon, decode_address, decode_m_packet) + (decode_M_packet, decode_X_packet, decode_xfer_write) + (decode_search_memory_packet, unhexify, hexify) + (remote_escape_output, unpack_varlen_hex, clear_symbol_cache) + (look_up_one_symbol, relocate_instruction) + (monitor_output): Move to remote-utils.h, and include it. + * remote-utils.h: New file. + +2013-09-05 Pedro Alves <palves@redhat.com> + + * server.h (_): Delete. + +2013-09-02 Pedro Alves <palves@redhat.com> + + * tracepoint.c (TRACEFRAME_EOB_MARKER_SIZE): New macro. + (init_trace_buffer): Ensure at least TRACEFRAME_EOB_MARKER_SIZE is + allocated. + (trace_buffer_alloc): Use TRACEFRAME_EOB_MARKER_SIZE. + +2013-09-02 Pierre Muller <muller@sourceware.org> + + * win32-low.c (child_xfer_memory): Check if ReadProcessMemory + or WriteProcessMemory complete successfully and handle + ERROR_PARTIAL_COPY error. + +2013-09-02 Pedro Alves <palves@redhat.com> + + * server.c (gdb_read_memory): Return -1 on traceframe memory read + error instead of EIO. + +2013-08-28 Jan Kratochvil <jan.kratochvil@redhat.com> + + PR server/15604 + * linux-low.c: Include filestuff.h. + (linux_create_inferior) <pid == 0>: Call close_most_fds. + * lynx-low.c: Include filestuff.h. + (lynx_create_inferior) <pid == 0>: Call close_most_fds. + * server.c: Include filestuff.h. + (main): Call notice_open_fds. + * spu-low.c: Include filestuff.h. + (spu_create_inferior) <pid == 0>: Call close_most_fds. + +2013-08-22 Luis Machado <lgustavo@codesourcery.com> + + * Makefile.in: Explain why ../target and ../nat are not + listed as include file search paths. + (linux-waitpid.o): New object file rule. + * configure.srv (srv_native_linux_obj): New variable. + Replace all occurrences of linux native object files with + $srv_native_linux_obj. + * linux-low.c: Include nat/linux-nat.h and nat/linux-waitpid.h. + (HAS_NOMMU): Move defining logic to common/linux-ptrace.c. + (linux_enable_event_reporting): Remove declaration. + (my_waitpid): Moved to common/linux-waitpid.c. + (linux_wait_for_event): Pass ptid when calling + linux_enable_event_reporting. + (linux_supports_tracefork_flag): Remove. + (linux_enable_event_reporting): Likewise. + (linux_tracefork_grandchild): Remove. + (STACK_SIZE): Moved to common/linux-ptrace.c. + (linux_tracefork_child): Remove. + (linux_test_for_tracefork): Remove. + (linux_look_up_symbols): Call linux_supports_traceclone. + (initialize_low): Remove call to linux_test_for_tracefork. + * linux-low.h (PTRACE_TYPE_ARG3): Move to + common/linux-ptrace.h. + (PTRACE_TYPE_ARG4): Likewise. + Include linux-ptrace.h. + +2013-08-21 Pedro Alves <palves@redhat.com> + + * config.in: Renegerate. + +2013-08-19 Luis Machado <lgustavo@codesourcery.com> + + * Makefile.in (INCLUDE_CFLAGS): Include -I$(srcdir)/../. + (SFILES): Remove $(srcdir)/common/target-common.c and + add $(srcdir)/target/waitstatus.c. + (OBS): Remove target-common.o and add waitstatus.o. + (server_h): Remove $(srcdir)/../common/target-common.h and + add $(srcdir)/../target/resume.h, $(srcdir)/../target/wait.h + and $(srcdir)/../target/waitstatus.h. + (target-common.o): Remove. + (waitstatus.o): New target object file. + * target.h: Do not include target-common.h and + include target/resume.h, target/wait.h and + target/waitstatus.h. + +2013-08-13 Luis Machado <lgustavo@codesourcery.com> + + * linux-arm-low.c: Rename all occurrences of PTRACE_ARG3_TYPE + to PTRACE_TYPE_ARG3. + * linux-low.c: Rename all occurrences of PTRACE_ARG3_TYPE + to PTRACE_TYPE_ARG3 and PTRACE_ARG4_TYPE to + PTRACE_TYPE_ARG4. + * linux-low.h (PTRACE_ARG3_TYPE): Rename to PTRACE_TYPE_ARG3. + (PTRACE_ARG4_TYPE): Rename to PTRACE_TYPE_ARG4. + +2013-07-27 Jie Zhang <jie@codesourcery.com> + Daniel Jacobowitz <dan@codesourcery.com> + Yao Qi <yao@codesourcery.com> + + * Makefile.in (SFILES): Add common/mips-linux-watch.c. + (mips-linux-watch.o): New rule. + (mips_linux_watch_h): New variable. + * configure.srv <mips*-*-linux*>: Add mips-linux-watch.o to + srv_tgtobj. + * linux-mips-low.c: Include mips-linux-watch.h. + (struct arch_process_info, struct arch_lwp_info): New. + (update_watch_registers_callback): New function. + (mips_linux_new_process, mips_linux_new_thread) New functions. + (mips_linux_prepare_to_resume, mips_insert_point): New + functions. + (mips_remove_point, mips_stopped_by_watchpoint): New + functions. + (rsp_bp_type_to_target_hw_bp_type): New function. + (mips_stopped_data_address): New function. + (the_low_target): Add watchpoint support functions. + +2013-07-27 Yao Qi <yao@codesourcery.com> + + * i386-low.c: Include break-common.h. + (enum target_hw_bp_type): Remove. + +2013-07-24 Luis Machado <lgustavo@codesourcery.com> + + * Makefile.in (SFILES): /common/target-common.c. + (OBS): Add target-common.o. + (server_h): Add $(srcdir)/../common/target-common.h. + (target-common.o): New target. + * server.c (queue_stop_reply_callback): Free + status string after use. + * target.c (target_waitstatus_to_string): Remove. + * target.h: Include target-common.h. + (resume_kind): Likewise. + (target_waitkind): Likewise. + (target_waitstatus): Likewise. + (TARGET_WNOHANG): Likewise. + +2013-07-04 Yao Qi <yao@codesourcery.com> + + * Makefile.in (host_alias): Use @host_noncanonical@. + (target_alias): Use @target_noncanonical@. + * configure.ac: Use ACX_NONCANONICAL_TARGET and + ACX_NONCANONICAL_HOST. + * configure: Regenerated. + + Revert: + 2013-06-28 Mircea Gherzan <mircea.gherzan@intel.com> + + * configure.ac (version_host, version_target): Set and AC_SUBST them. + * configure: Rebuild. + * Makefile.in (version_host, version_target): Get from configure. + (version.c): Use $(version_host) and $(version_target). + +2013-07-03 Pedro Alves <palves@redhat.com> + + * Makefile.in (config.status): Depend on development.sh. + * acinclude.m4: Include libmcheck.m4. + * configure: Regenerate. + +2013-07-02 Mircea Gherzan <mircea.gherzan@intel.com> + + * win32-low.c (winapi_DebugActiveProcessStop): Move the WINAPI + attribute inside the parentheses. + (winapi_DebugSetProcessKillOnExit): Ditto. + (winapi_DebugBreakProcess): Ditto. + (winapi_GenerateConsoleCtrlEvent): Ditto. + +2013-07-02 Mircea Gherzan <mircea.gherzan@intel.com> + + * notif.h (notif_event): Add a dummy member to avoid compiler + errors. + +2013-07-01 Pedro Alves <palves@redhat.com> + + * hostio.c (HOSTIO_PATH_MAX): Define. + (require_filename, handle_open, handle_unlink, handle_readlink): + Use it. + +2013-07-01 Pedro Alves <palves@redhat.com> + + * server.h: Include "pathmax.h". + * linux-low.c: Don't include sys/param.h. + (linux_pid_exe_is_elf_64_file): Use PATH_MAX instead of + MAXPATHLEN. + * win32-low.c: Don't include sys/param.h. + (win32_create_inferior): Use PATH_MAX instead of MAXPATHLEN. + +2013-07-01 Pedro Alves <palves@redhat.com> + + * event-loop.c: Don't check HAVE_UNISTD_H before including + <unistd.h>. + * gdbreplay.c: Likewise. + * remote-utils.c: Likewise. + * server.c: Likewise. + * configure.ac: Don't check for unistd.h. + * configure: Regenerate. + +2013-06-28 Tom Tromey <tromey@redhat.com> + + * Makefile.in (version.c): Use version.in, not + common/version.in. + +2013-06-28 Mircea Gherzan <mircea.gherzan@intel.com> + + * configure.ac (version_host, version_target): Set and AC_SUBST them. + * configure: Rebuild. + * Makefile.in (version_host, version_target): Get from configure. + (version.c): Use $(version_host) and $(version_target). + +2013-06-10 Dmitry Kozlov <ddk@codesourcery.com> + + Fix trace-status to output user name without trailing colon. + * tracepoint.c (cmd_qtstatus): Remove unnecessary colon from user name. + +2013-06-10 Dmitry Kozlov <ddk@codesourcery.com> + + Fix trace-status to output proper start-time and stop-time. + * tracepoint.c (cmd_qtstatus): Modify trace-status output to + output start time and stop time in hex as gdb expects. + +2013-06-26 Pedro Alves <pedro@codesourcery.com> + + * tracepoint.c (build_traceframe_info_xml): Output trace state + variables present in the trace buffer. + +2013-06-24 Tom Tromey <tromey@redhat.com> + + * Makefile.in (version.c): Use bfd/version.h, common/version.in, + create-version.sh. + (version.o): Remove. + * gdbreplay.c: Include version.h. + (version, host_name): Don't declare. + * server.h: Include version.h. + (version, host_name): Don't declare. + +2013-06-12 Pedro Alves <palves@redhat.com> + + * linux-x86-low.c (linux_is_elf64): Delete global. + (x86_siginfo_fixup): Replace reference to `linux_is_elf64' global + with local linux_pid_exe_is_elf_64_file use. + +2013-06-11 Pedro Alves <palves@redhat.com> + + * linux-low.c (regset_disabled, disable_regset): New functions. + (regsets_fetch_inferior_registers) + (regsets_store_inferior_registers): Use them. + (initialize_regsets_info); Don't allocate the disabled_regsets + array here. + * linux-low.h (struct regsets_info) <disabled_regsets>: Extend + comment. + +2013-06-11 Pedro Alves <palves@redhat.com> + + * linux-low.c (initialize_regsets_info): Use xcalloc instead of + xmalloc. + +2013-06-11 Pedro Alves <palves@redhat.com> + + * linux-x86-low.c (initialize_low_arch): Call + init_registers_x32_avx_linux. + +2013-06-09 Jan Kratochvil <jan.kratochvil@redhat.com> + + Fix compatibility with Android Bionic. + * linux-low.c (linux_qxfer_libraries_svr4): Ignore first entry even if + it is not empty. + +2013-06-07 Pedro Alves <palves@redhat.com> + + PR server/14823 + * Makefile.in (OBS): Add tdesc.o. + (IPA_OBJS): Add tdesc-ipa.o. + (tdesc-ipa.o): New rule. + * ax.c (gdb_eval_agent_expr): Adjust register_size call to new + interface. + * linux-low.c (new_inferior): Delete. + (disabled_regsets, num_regsets): Delete. + (linux_add_process): Adjust to set the new per-process + new_inferior flag. + (linux_detach_one_lwp): Adjust to call regcache_invalidate_thread. + (linux_wait_for_lwp): Adjust. Only call arch_setup if the event + was a stop. When calling arch_setup, switch the current inferior + to the thread that got an event. + (linux_resume_one_lwp): Adjust to call regcache_invalidate_thread. + (regsets_fetch_inferior_registers) + (regsets_store_inferior_registers): New regsets_info parameter. + Adjust to use it. + (linux_register_in_regsets): New regs_info parameter. Adjust to + use it. + (register_addr, fetch_register, store_register): New usrregs_info + parameter. Adjust to use it. + (usr_fetch_inferior_registers, usr_store_inferior_registers): New + parameter regs_info. Adjust to use it. + (linux_fetch_registers): Get the current inferior's regs_info, and + adjust to use it. + (linux_store_registers): Ditto. + [HAVE_LINUX_REGSETS] (initialize_regsets_info): New. + (initialize_low): Don't initialize the target_regsets here. Call + initialize_low_arch. + * linux-low.h (target_regsets): Delete declaration. + (struct regsets_info): New. + (struct usrregs_info): New. + (struct regs_info): New. + (struct process_info_private) <new_inferior>: New field. + (struct linux_target_ops): Delete the num_regs, regmap, and + regset_bitmap fields. New field regs_info. + [HAVE_LINUX_REGSETS] (initialize_regsets_info): Declare. + * i387-fp.c (num_xmm_registers): Delete. + (i387_cache_to_fsave, i387_fsave_to_cache): Adjust find_regno + calls to new interface. + (i387_cache_to_fxsave, i387_cache_to_xsave, i387_fxsave_to_cache) + (i387_xsave_to_cache): Adjust find_regno calls to new interface. + Infer the number of xmm registers from the regcache's target + description. + * i387-fp.h (num_xmm_registers): Delete. + * inferiors.c (add_thread): Don't install the thread's regcache + here. + * proc-service.c (gregset_info): Fetch the current inferior's + regs_info. Adjust to use it. + * regcache.c: Include tdesc.h. + (register_bytes, reg_defs, num_registers) + (gdbserver_expedite_regs): Delete. + (get_thread_regcache): If the thread doesn't have a regcache yet, + create one, instead of aborting gdbserver. + (regcache_invalidate_one): Rename to ... + (regcache_invalidate_thread): ... this. + (regcache_invalidate_one): New. + (regcache_invalidate): Only invalidate registers of the current + process. + (init_register_cache): Add target_desc parameter, and use it. + (new_register_cache): Ditto. Assert the target description has a + non zero registers_size. + (regcache_cpy): Add assertions. Adjust. + (realloc_register_cache, set_register_cache): Delete. + (registers_to_string, registers_from_string): Adjust. + (find_register_by_name, find_regno, find_register_by_number) + (register_cache_size): Add target_desc parameter, and use it. + (free_register_cache_thread, free_register_cache_thread_one) + (regcache_release, register_cache_size): New. + (register_size): Add target_desc parameter, and use it. + (register_data, supply_register, supply_register_zeroed) + (supply_regblock, supply_register_by_name, collect_register) + (collect_register_as_string, collect_register_by_name): Adjust. + * regcache.h (struct target_desc): Forward declare. + (struct regcache) <tdesc>: New field. + (init_register_cache, new_register_cache): Add target_desc + parameter. + (regcache_invalidate_thread): Declare. + (regcache_invalidate_one): Delete declaration. + (regcache_release): Declare. + (find_register_by_number, register_cache_size, register_size) + (find_regno): Add target_desc parameter. + (gdbserver_expedite_regs, gdbserver_xmltarget): Delete + declarations. + * remote-utils.c: Include tdesc.h. + (outreg, prepare_resume_reply): Adjust. + * server.c: Include tdesc.h. + (gdbserver_xmltarget): Delete declaration. + (get_features_xml, process_serial_event): Adjust. + * server.h [IN_PROCESS_AGENT] (struct target_desc): Forward + declare. + (struct process_info) <tdesc>: New field. + (ipa_tdesc): Declare. + * tdesc.c: New file. + * tdesc.h: New file. + * tracepoint.c: Include tdesc.h. + [IN_PROCESS_AGENT] (ipa_tdesc): Define. + (get_context_regcache): Adjust to pass ipa_tdesc down. + (do_action_at_tracepoint): Adjust to get the register cache size + from the context regcache's description. + (traceframe_walk_blocks): Adjust to get the register cache size + from the current trace frame's description. + (traceframe_get_pc): Adjust to get current trace frame's + description and pass it down. + (gdb_collect): Adjust to get the register cache size from the + IPA's description. + * linux-amd64-ipa.c (tdesc_amd64_linux): Declare. + (gdbserver_xmltarget): Delete. + (initialize_low_tracepoint): Set the ipa's target description. + * linux-i386-ipa.c (tdesc_i386_linux): Declare. + (initialize_low_tracepoint): Set the ipa's target description. + * linux-x86-low.c: Include tdesc.h. + [__x86_64__] (is_64bit_tdesc): New. + (ps_get_thread_area, x86_get_thread_area): Use it. + (i386_cannot_store_register): Rename to ... + (x86_cannot_store_register): ... this. Use is_64bit_tdesc. + (i386_cannot_fetch_register): Rename to ... + (x86_cannot_fetch_register): ... this. Use is_64bit_tdesc. + (x86_fill_gregset, x86_store_gregset): Adjust register_size calls + to new interface. + (target_regsets): Rename to ... + (x86_regsets): ... this. + (x86_get_pc, x86_set_pc): Adjust register_size calls to new + interface. + (x86_siginfo_fixup): Use is_64bit_tdesc. + [__x86_64__] (tdesc_amd64_linux, tdesc_amd64_avx_linux) + (tdesc_x32_avx_linux, tdesc_x32_linux) + (tdesc_i386_linux, tdesc_i386_mmx_linux, tdesc_i386_avx_linux): + Declare. + (x86_linux_update_xmltarget): Delete. + (I386_LINUX_XSAVE_XCR0_OFFSET): Define. + (have_ptrace_getfpxregs, have_ptrace_getregset): New. + (AMD64_LINUX_USER64_CS): New. + (x86_linux_read_description): New, based on + x86_linux_update_xmltarget. + (same_process_callback): New. + (x86_arch_setup_process_callback): New. + (x86_linux_update_xmltarget): New. + (x86_regsets_info): New. + (amd64_linux_regs_info): New. + (i386_linux_usrregs_info): New. + (i386_linux_regs_info): New. + (x86_linux_regs_info): New. + (x86_arch_setup): Reimplement. + (x86_install_fast_tracepoint_jump_pad): Use is_64bit_tdesc. + (x86_emit_ops): Ditto. + (the_low_target): Adjust. Install x86_linux_regs_info, + x86_cannot_fetch_register, and x86_cannot_store_register. + (initialize_low_arch): New. + * linux-ia64-low.c (tdesc_ia64): Declare. + (ia64_fetch_register): Adjust. + (ia64_usrregs_info, regs_info): New globals. + (ia64_regs_info): New function. + (the_low_target): Adjust. + (initialize_low_arch): New function. + * linux-sparc-low.c (tdesc_sparc64): Declare. + (sparc_fill_gregset_to_stack, sparc_store_gregset_from_stack): + Adjust. + (sparc_arch_setup): New function. + (sparc_regsets_info, sparc_usrregs_info, regs_info): New globals. + (the_low_target): Adjust. + (initialize_low_arch): New function. + * linux-ppc-low.c (tdesc_powerpc_32l, tdesc_powerpc_altivec32l) + (tdesc_powerpc_cell32l, tdesc_powerpc_vsx32l) + (tdesc_powerpc_isa205_32l, tdesc_powerpc_isa205_altivec32l) + (tdesc_powerpc_isa205_vsx32l, tdesc_powerpc_e500l) + (tdesc_powerpc_64l, tdesc_powerpc_altivec64l) + (tdesc_powerpc_cell64l, tdesc_powerpc_vsx64l) + (tdesc_powerpc_isa205_64l, tdesc_powerpc_isa205_altivec64l) + (tdesc_powerpc_isa205_vsx64l): Declare. + (ppc_cannot_store_register, ppc_collect_ptrace_register) + (ppc_supply_ptrace_register, parse_spufs_run, ppc_get_pc) + (ppc_set_pc, ppc_get_hwcap): Adjust. + (ppc_usrregs_info): Forward declare. + (!__powerpc64__) ppc_regmap_adjusted: New global. + (ppc_arch_setup): Adjust to the current process'es target + description. + (ppc_fill_vsxregset, ppc_store_vsxregset, ppc_fill_vrregset) + (ppc_store_vrregset, ppc_fill_evrregset, ppc_store_evrregse) + (ppc_store_evrregset): Adjust. + (target_regsets): Rename to ... + (ppc_regsets): ... this, and make static. + (ppc_usrregs_info, ppc_regsets_info, regs_info): New globals. + (ppc_regs_info): New function. + (the_low_target): Adjust. + (initialize_low_arch): New function. + * linux-s390-low.c (tdesc_s390_linux32, tdesc_s390_linux32v1) + (tdesc_s390_linux32v2, tdesc_s390_linux64, tdesc_s390_linux64v1) + (tdesc_s390_linux64v2, tdesc_s390x_linux64, tdesc_s390x_linux64v1) + (tdesc_s390x_linux64v2): Declare. + (s390_collect_ptrace_register, s390_supply_ptrace_register) + (s390_fill_gregset, s390_store_last_break): Adjust. + (target_regsets): Rename to ... + (s390_regsets): ... this, and make static. + (s390_get_pc, s390_set_pc): Adjust. + (s390_get_hwcap): New target_desc parameter, and use it. + [__s390x__] (have_hwcap_s390_high_gprs): New global. + (s390_arch_setup): Adjust to set the current process'es target + description. Don't adjust the regmap. + (s390_usrregs_info, s390_regsets_info, regs_info): New globals. + [__s390x__] (s390_usrregs_info_3264, s390_regsets_info_3264) + (regs_info_3264): New globals. + (s390_regs_info): New function. + (the_low_target): Adjust. + (initialize_low_arch): New function. + * linux-mips-low.c (tdesc_mips_linux, tdesc_mips_dsp_linux) + (tdesc_mips64_linux, tdesc_mips64_dsp_linux): Declare. + [__mips64] (init_registers_mips_linux) + (init_registers_mips_dsp_linux): Delete defines. + [__mips64] (tdesc_mips_linux, tdesc_mips_dsp_linux): New defines. + (have_dsp): New global. + (mips_read_description): New, based on mips_arch_setup. + (mips_arch_setup): Reimplement. + (get_usrregs_info): New function. + (mips_cannot_fetch_register, mips_cannot_store_register) + (mips_get_pc, mips_set_pc, mips_fill_gregset, mips_store_gregset) + (mips_fill_fpregset, mips_store_fpregset): Adjust. + (target_regsets): Rename to ... + (mips_regsets): ... this, and make static. + (mips_regsets_info, mips_dsp_usrregs_info, mips_usrregs_info) + (dsp_regs_info, regs_info): New globals. + (mips_regs_info): New function. + (the_low_target): Adjust. + (initialize_low_arch): New function. + * linux-arm-low.c (tdesc_arm, tdesc_arm_with_iwmmxt) + (tdesc_arm_with_vfpv2, tdesc_arm_with_vfpv3, tdesc_arm_with_neon): + Declare. + (arm_fill_vfpregset, arm_store_vfpregset): Adjust. + (arm_read_description): New, with bits factored from + arm_arch_setup. + (arm_arch_setup): Reimplement. + (target_regsets): Rename to ... + (arm_regsets): ... this, and make static. + (arm_regsets_info, arm_usrregs_info, regs_info): New globals. + (arm_regs_info): New function. + (the_low_target): Adjust. + (initialize_low_arch): New function. + * linux-m68k-low.c (tdesc_m68k): Declare. + (target_regsets): Rename to ... + (m68k_regsets): ... this, and make static. + (m68k_regsets_info, m68k_usrregs_info, regs_info): New globals. + (m68k_regs_info): New function. + (m68k_arch_setup): New function. + (the_low_target): Adjust. + (initialize_low_arch): New function. + * linux-sh-low.c (tdesc_sharch): Declare. + (target_regsets): Rename to ... + (sh_regsets): ... this, and make static. + (sh_regsets_info, sh_usrregs_info, regs_info): New globals. + (sh_regs_info, sh_arch_setup): New functions. + (the_low_target): Adjust. + (initialize_low_arch): New function. + * linux-bfin-low.c (tdesc_bfin): Declare. + (bfin_arch_setup): New function. + (bfin_usrregs_info, regs_info): New globals. + (bfin_regs_info): New function. + (the_low_target): Adjust. + (initialize_low_arch): New function. + * linux-cris-low.c (tdesc_cris): Declare. + (cris_arch_setup): New function. + (cris_usrregs_info, regs_info): New globals. + (cris_regs_info): New function. + (the_low_target): Adjust. + (initialize_low_arch): New function. + * linux-cris-low.c (tdesc_crisv32): Declare. + (cris_arch_setup): New function. + (cris_regsets_info, cris_usrregs_info, regs_info): New globals. + (cris_regs_info): New function. + (the_low_target): Adjust. + (initialize_low_arch): New function. + * linux-m32r-low.c (tdesc_m32r): Declare. + (m32r_arch_setup): New function. + (m32r_usrregs_info, regs_info): New globals. + (m32r_regs_info): Adjust. + (initialize_low_arch): New function. + * linux-tic6x-low.c (tdesc_tic6x_c64xp_linux) + (tdesc_tic6x_c64x_linux, tdesc_tic6x_c62x_linux): Declare. + (tic6x_usrregs_info): Forward declare. + (tic6x_read_description): New function, based on ... + (tic6x_arch_setup): ... this. Reimplement. + (target_regsets): Rename to ... + (tic6x_regsets): ... this, and make static. + (tic6x_regsets_info, tic6x_usrregs_info, regs_info): New globals. + (tic6x_regs_info): New function. + (the_low_target): Adjust. + (initialize_low_arch): New function. + * linux-xtensa-low.c (tdesc_xtensa): Declare. + (xtensa_fill_gregset, xtensa_store_gregset): Adjust. + (target_regsets): Rename to ... + (xtensa_regsets): ... this, and make static. + (xtensa_regsets_info, xtensa_usrregs_info, regs_info): New + globals. + (xtensa_arch_setup, xtensa_regs_info): New functions. + (the_low_target): Adjust. + (initialize_low_arch): New function. + * linux-nios2-low.c (tdesc_nios2_linux): Declare. + (nios2_arch_setup): Set the current process'es tdesc. + (target_regsets): Rename to ... + (nios2_regsets): ... this. + (nios2_regsets_info, nios2_usrregs_info, regs_info): New globals. + (nios2_regs_info): New function. + (the_low_target): Adjust. + (initialize_low_arch): New function. + * linux-aarch64-low.c (tdesc_aarch64): Declare. + (aarch64_arch_setup): Set the current process'es tdesc. + (target_regsets): Rename to ... + (aarch64_regsets): ... this. + (aarch64_regsets_info, aarch64_usrregs_info, regs_info): New globals. + (aarch64_regs_info): New function. + (the_low_target): Adjust. + (initialize_low_arch): New function. + * linux-tile-low.c (tdesc_tilegx, tdesc_tilegx32): Declare + globals. + (target_regsets): Rename to ... + (tile_regsets): ... this. + (tile_regsets_info, tile_usrregs_info, regs_info): New globals. + (tile_regs_info): New function. + (tile_arch_setup): Set the current process'es tdesc. + (the_low_target): Adjust. + (initialize_low_arch): New function. + * spu-low.c (tdesc_spu): Declare. + (spu_create_inferior, spu_attach): Set the new process'es tdesc. + * win32-arm-low.c (tdesc_arm): Declare. + (arm_arch_setup): New function. + (the_low_target): Install arm_arch_setup instead of + init_registers_arm. + * win32-i386-low.c (tdesc_i386, tdesc_amd64): Declare. + (init_windows_x86): Rename to ... + (i386_arch_setup): ... this. Set `win32_tdesc'. + (the_low_target): Adjust. + * win32-low.c (win32_tdesc): New global. + (child_add_thread): Don't create the thread cache here. + (do_initial_child_stuff): Set the new process'es tdesc. + * win32-low.h (struct target_desc): Forward declare. + (win32_tdesc): Declare. + * lynx-i386-low.c (tdesc_i386): Declare global. + (lynx_i386_arch_setup): Set `lynx_tdesc'. + * lynx-low.c (lynx_tdesc): New global. + (lynx_add_process): Set the new process'es tdesc. + * lynx-low.h (struct target_desc): Forward declare. + (lynx_tdesc): Declare global. + * lynx-ppc-low.c (tdesc_powerpc_32): Declare global. + (lynx_ppc_arch_setup): Set `lynx_tdesc'. + * nto-low.c (nto_tdesc): New global. + (do_attach): Set the new process'es tdesc. + * nto-low.h (struct target_desc): Forward declare. + (nto_tdesc): Declare. + * nto-x86-low.c (tdesc_i386): Declare. + (nto_x86_arch_setup): Set `nto_tdesc'. + +2013-06-04 Gary Benson <gbenson@redhat.com> + + * server.c (handle_query): Add "augmented-libraries-svr4-read+" + to qSupported response when appropriate. + (handle_qxfer_libraries_svr4): Allow qXfer:libraries-svr4:read + with nonzero-length annex. + * linux-low.c (linux_qxfer_libraries_svr4): Parse and handle + arguments supplied in annex. + +2013-05-31 Doug Evans <dje@google.com> + + PR server/15594 + * linux-x86-low.c (ps_get_thread_area): Properly extend address to + 64 bits in 64-cross-32 environment. + +2013-05-28 Pedro Alves <palves@redhat.com> + + * Makefile.in (clean): Remove reference to aarch64-without-fpu.c. + (aarch64-without-fpu.c): Delete rule. + * configure.srv (aarch64*-*-linux*): Remove references to + aarch64-without-fpu.o and aarch64-without-fpu.xml. + * linux-aarch64-low.c (init_registers_aarch64_without_fpu): Remove + declaration. + +2013-05-24 Pedro Alves <palves@redhat.com> + + * server.c (handle_v_cont) <vCont;r>: Use unpack_varlen_hex + instead of strchr/decode_address. Error if the range isn't split + with a ','. Don't assume there's be a ':' in the action. + +2013-05-23 Yao Qi <yao@codesourcery.com> + Pedro Alves <palves@redhat.com> + + * linux-low.c (lwp_in_step_range): New function. + (linux_wait_1): If the thread was range stepping and stopped + outside the stepping range, report the stop to GDB. Otherwise, + continue stepping. Add range stepping debug output. + (linux_set_resume_request): Copy the step range from the resume + request to the lwp. + (linux_supports_range_stepping): New. + (linux_target_ops) <supports_range_stepping>: Set to + linux_supports_range_stepping. + * linux-low.h (struct linux_target_ops) + <supports_range_stepping>: New field. + (struct lwp_info) <step_range_start, step_range_end>: New fields. + * linux-x86-low.c (x86_supports_range_stepping): New. + (the_low_target) <supports_range_stepping>: Set to + x86_supports_range_stepping. + * server.c (handle_v_cont): Handle 'r' action. + (handle_v_requests): Append ";r" if the target supports range + stepping. + * target.h (struct thread_resume) <step_range_start, + step_range_end>: New fields. + (struct target_ops) <supports_range_stepping>: + New field. + (target_supports_range_stepping): New macro. + +2013-05-17 Joel Brobecker <brobecker@adacore.com> + + * lynx-low.c (lynx_resume): Fix null_ptid/minus_one_ptid + confusion in comment. + +2013-05-17 Joel Brobecker <brobecker@adacore.com> + + * lynx-low.c (struct process_info_private): New type. + (lynx_add_process): New function. + (lynx_create_inferior, lynx_attach): Replace calls to + add_process by calls to lynx_add_process. + (lynx_resume): If PTID is null, then try using + current_process()->private->last_wait_event_ptid. + Add comments. + (lynx_clear_inferiors): Delete. The contents of that function + has been inlined in lynx_mourn; + (lynx_wait_1): Save the ptid in the process's private data. + (lynx_mourn): Free the process' private data. Replace call + to lynx_clear_inferiors by call to clear_inferiors. + +2013-05-17 Yao Qi <yao@codesourcery.com> + + * i386-low.c (i386_length_and_rw_bits): Move the comment to + the right place. + +2013-05-16 Luis Machado <lgustavo@codesourcery.com> + + * linux-low.c: Move definition checks upwards for PT_TEXT_ADDR, + PT_DATA_ADDR and PT_TEXT_END_ADDR. Update comments. + (linux_read_offsets): Remove PT_TEXT_ADDR, PT_DATA_ADDR and + PT_TEXT_END_ADDR guards. Update comments. + (linux_target_op) <read_offsets>: Conditionally define to + linux_read_offsets if the target is UCLIBC and if it defines + PT_TEXT_ADDR, PT_DATA_ADDR and PT_TEXT_END_ADDR. + +2013-05-06 Sandra Loosemore <sandra@codesourcery.com> + Andrew Jenner <andrew@codesourcery.com> + + * Makefile.in (SFILES): Add linux-nios2-low.c. + (clean): Add action to delete nios2-linux.c. + (nios2-linux.c): New rule. + * configure.srv: Add nios2*-*-linux*. + * linux-nios2-low.c: New. + +2013-05-03 Hafiz Abid Qadeer <abidh@codesourcery.com> + + * tracepoint.c (cmd_qtinit): Call 'stop_tracing'. + +2013-04-25 Hui Zhu <hui@codesourcery.com> + + PR gdb/15186 + * ax.c (ax_printf): Add fflush. + +2013-04-22 Tom Tromey <tromey@redhat.com> + + * Makefile.in (SFILES): Add filestuff.c. + (OBS): Add filestuff.o. + (filestuff.o): New target. + * config.in, configure: Rebuild. + * configure.ac: Check for fdwalk, pipe2. + +2013-04-17 Pedro Alves <palves@redhat.com> + + * configure.ac (USE_THREAD_DB): Delete variable. + (if test "$srv_linux_thread_db" = "yes"): AC_DEFINE USE_THREAD_DB. + Don't AC_SUBST USE_THREAD_DB. + * Makefile.in (INTERNAL_CFLAGS): Remove @USE_THREAD_DB@. + * config.in, configure: Regenerate. + +2013-04-16 Pedro Alves <palves@redhat.com> + + * linux-low.h (struct lwp_info) <thread_known>: Move under + the USE_THREAD_DB #ifdef. + +2013-04-16 Pedro Alves <palves@redhat.com> + + * Makefile.in (INTERNAL_CFLAGS): Add @USE_THREAD_DB@. + (linux-low.o): Delete rule. + * linux-low.h: Always include "gdb_thread_db.h" instead of + conditionally including thread_db.h. + (struct lwp_info) <th>: Guard with #ifdef USE_THREAD_DB instead of + HAVE_THREAD_DB_H. + +2013-04-07 Jan Kratochvil <jan.kratochvil@redhat.com> + + * Makefile.in (install-only): Fix make install regression. + +2013-04-05 Jan Kratochvil <jan.kratochvil@redhat.com> + + Convert man pages to texinfo, new gdbinit.5 texinfo page. + * Makefile.in (install-only): Remove $(man1dir) and gdbserver.1 + installation. + * gdbserver.1: Remove. + +2013-03-22 Pedro Alves <palves@redhat.com> + + * linux-low.c (handle_extended_wait): Don't call + linux_enable_event_reporting. + +2013-03-15 Tony Theodore <tonyt@logyst.com> + + PR build/9098: + * Makefile.in (SHELL): Use @SHELL@. + +2013-03-14 Sergio Durigan Junior <sergiodj@redhat.com> + + * tracepoint.c (cmd_qtv): Initialize `val' with zero, silencing + compiler warning. + +2013-03-13 Joel Brobecker <brobecker@adacore.com> + + * linux-low.c (linux_target_ops) [!HAVE_LINUX_BTRACE]: + Remove extraneous NULL element. + +2013-03-13 Yao Qi <yao@codesourcery.com> + + * tracepoint.c (traceframe_read_tsv): Look for the last matched + 'V' block in trace frame. + +2013-03-11 Markus Metzger <markus.t.metzger@intel.com> + + * target.h (struct target_ops): Add btrace ops. + (target_supports_btrace): New macro. + (target_enable_btrace): New macro. + (target_disable_btrace): New macro. + (target_read_btrace): New macro. + * gdbthread.h (struct thread_info): Add btrace field. + * server.c: Include btrace-common.h. + (handle_btrace_general_set): New function. + (handle_btrace_enable): New function. + (handle_btrace_disable): New function. + (handle_general_set): Call handle_btrace_general_set. + (handle_qxfer_btrace): New function. + (struct qxfer qxfer_packets[]): Add btrace entry. + * inferiors.c (remove_thread): Disable btrace. + * linux-low: Include linux-btrace.h. + (linux_low_enable_btrace): New function. + (linux_low_read_btrace): New function. + (linux_target_ops): Add btrace ops. + * configure.srv (i[34567]86-*-linux*): Add linux-btrace.o. + Add srv_linux_btrace=yes. + (x86_64-*-linux*): Add linux-btrace.o. + Add srv_linux_btrace=yes. + * configure.ac: Define HAVE_LINUX_BTRACE. + * config.in: Regenerated. + * configure: Regenerated. + +2013-03-11 Markus Metzger <markus.t.metzger@intel.com> + + * server.c (handle_qxfer): Preserve error message if -3 is + returned. + (qxfer): Document the -3 return value. + +2013-03-11 Markus Metzger <markus.t.metzger@intel.com> + + * Makefile.in (SFILES): Add $(srcdir)/common/linux-btrace.c. + (linux_btrace_h): New variable. + (linux-btrace.o): New rule. + +2013-03-08 Stan Shebs <stan@codesourcery.com> + Hafiz Abid Qadeer <abidh@codesourcery.com> + + * tracepoint.c (trace_buffer_size): New global. + (DEFAULT_TRACE_BUFFER_SIZE): New define. + (init_trace_buffer): Change to one-argument function. Allocate + trace buffer memory. + (handle_tracepoint_general_set): Call cmd_bigqtbuffer_size to + handle QTBuffer:size packet. + (cmd_bigqtbuffer_size): New function. + (initialize_tracepoint): Call init_trace_buffer with + DEFAULT_TRACE_BUFFER_SIZE. + * server.c (handle_query): Add QTBuffer:size in the + supported packets. + +2013-03-07 Yao Qi <yao@codesourcery.com> + + * tracepoint.c (cur_action, cur_step_action): Make them unsigned. + (cmd_qtfp): Initialize cur_action and cur_step_action 0 instead + of -1. + (cmd_qtsp): Adjust condition. Do post increment. + Set cur_action and cur_step_action back to 0. + +2013-03-07 Jeremy Bennett <jeremy.bennett@embecosm.com> + + PR server/15236 + * linux-low.c (linux_write_memory): Return early success if LEN is + zero. + +2013-03-05 Corinna Vinschen <vinschen@redhat.de> + + * configure.srv: Add x86_64-*-cygwin* as target. + +2013-02-28 Tom Tromey <tromey@redhat.com> + + * configure.ac: Invoke AC_SYS_LARGEFILE. + * configure, config.in: Rebuild. + +2013-02-28 Corinna Vinschen <vinschen@redhat.com> + + * win32-low.c: Throughout, fix format strings and casts of + printf-like functions to avoid type related warnings on all + platforms. + (get_child_debug_event): Print dwDebugEventCode as hex since + that's how it's usually documented. + +2013-02-28 Yao Qi <yao@codesourcery.com> + + * tracepoint.c (cmd_qtbuffer): Call phex_nz instead of + pulongest. + +2013-02-27 Jiong Wang <jiwang@tilera.com> + + * Makefile.in (clean): Remove reg-tilegx.c, reg-tilegx32.c. + (reg-tilegx32.c): New rule. + * configure.srv (tilegx-*-linux*): Add reg-tilegx32.o to srv_regobj. + * linux-tile-low.c (tile_arch_setup): New function. Invoke + different register info initializer according to elf class. + (init_registers_tilgx32): New function. The tilegx32 register info + initializer. + (tile_fill_gregset): Use "uint_reg_t" to represent register size. + (tile_store_gregset): Likewise. + +2013-02-27 Yao Qi <yao@codesourcery.com> + + * server.c (process_point_options): Print debug message when + debug_threads is true. + +2013-02-26 Yao Qi <yao@codesourcery.com> + + * tracepoint.c (cmd_qtbuffer): Don't set '\0' in OWN_BUF. + +2013-02-19 Pedro Alves <palves@redhat.com> + Kai Tietz <ktietz@redhat.com> + + PR gdb/15161 + + * server.c (handle_query) <CRC check>: Use unpack_varlen_hex + instead of strtoul to extract address from packet. + (process_serial_event) <'z'>: Likewise. + +2013-02-18 Yao Qi <yao@codesourcery.com> + + * linux-bfin-low.c (the_low_target): Use NULL instead of 0. + +2013-02-14 Pedro Alves <palves@redhat.com> + + Plug memory leak. + + * tracepoint.c (cmd_qtnotes): Free TRACING_USER_NAME, + TRACING_NOTES and TRACING_STOP_NOTE before clobbering. + +2013-02-14 Pedro Alves <palves@redhat.com> + + * tracepoint.c (cmd_qtdpsrc): Use savestring. + +2013-02-14 Pedro Alves <palves@redhat.com> + + * tracepoint.c (save_string): Delete. + (add_tracepoint_action): Use savestring instead of save_string. + +2013-02-12 Pedro Alves <palves@redhat.com> + + * linux-xtensa-low.c: Ditto. + * xtensa-xtregs.c: Ditto. + +2013-02-12 Sanimir Agovic <sanimir.agovic@intel.com> + + * thread-db.c (thread_db_get_tls_address): NULL pointer check + thread_db. + +2013-02-07 Marcus Shawcroft <marcus.shawcroft@arm.com> + + * linux-aarch64-low.c (aarch64_arch_setup): Clamp + aarch64_num_wp_regs and aarch64_num_bp_regs to + AARCH64_HWP_MAX_NUM and AARCH64_HBP_MAX_NUM respectively. + +2013-02-07 Marcus Shawcroft <marcus.shawcroft@arm.com> + + * linux-aarch64-low.c (ps_get_thread_area): Replace + PTRACE_GET_THREAD_AREA with PTRACE_GETREGSET. + +2013-02-04 Jim MacArthur <jim.macarthur@arm.com> + Marcus Shawcroft <marcus.shawcroft@arm.com> + Nigel Stephens <nigel.stephens@arm.com> + Yufeng Zhang <yufeng.zhang@arm.com> + + * Makefile.in (clean): Remove aarch64.c and aarch64-without-fpu.c. + (aarch64.c, aarch64-without-fpu.c): New targets. + * configure.srv (aarch64*-*-linux*): New. + * linux-aarch64-low.c: New file. + +2013-02-04 Marcus Shawcroft <marcus.shawcroft@arm.com> + + * linux-low.c (handle_extended_wait, linux_create_inferior) + (linux_attach_lwp_1, linux_kill_one_lwp, linux_attach_one_lwp) + (dequeue_one_deferred_signal, linux_resume_one_thread) + (fetch_register, linux_write_memory, linux_enable_event_reporting) + (linux_tracefork_grandchild, linux_test_for_tracefork) + (linux_read_offsets, linux_xfer_siginfo, linux_xfer_siginfo): Add + PTRACE_ARG3_TYPE and PTRACE_ARG4_TYPE cast to ptrace arguments + where the argument is 0. + +2013-01-25 Yao Qi <yao@codesourcery.com> + + * event-loop.c: Include "queue.h". + (gdb_event_p): New typedef. + (struct gdb_event) <next_event>: Remove. + (event_queue): Change to QUEUE(gdb_event_p). + (async_queue_event): Remove. + (gdb_event_xfree): New. + (initialize_event_loop): New. + (process_event): Use API from QUEUE. + (wait_for_event): Likewise. + * server.c (main): Call initialize_event_loop. + * server.h (initialize_event_loop): Declare. + +2013-01-18 Yao Qi <yao@codesourcery.com> + + * ax.h (struct eval_agent_expr_context): New. + (gdb_eval_agent_expr): Update declaration. + * ax.c (gdb_eval_agent_expr): Remove argument REGCACHE and + TFRAME. Add new argument CTX. + * server.h (struct eval_agent_expr_context): Declare. + (agent_mem_read, agent_tsv_read): Update declaration. + (agent_mem_read_string): Likewise. + * tracepoint.c (eval_tracepoint_agent_expr): Remove. + (add_traceframe_block): Add new argument TPOINT. + Increase TPOINT->traceframe_usage. + (do_action_at_tracepoint): Call gdb_eval_agent_expr instead of + eval_tracepoint_agent_expr. + (condition_true_at_tracepoint): Likewise. + (agent_mem_read): Remove argument TFRAME. Add argument CTX. + (agent_mem_read_string, agent_tsv_read): Likewise. + +2013-01-16 Yao Qi <yao@codesourcery.com> + + * linux-low.c (linux_resume_one_lwp): Don't check + 'lwp->bp_reinsert != 0'. + +2013-01-07 Joel Brobecker <brobecker@adacore.com> + Pedro Alves <palves@redhat.com> + + * lynx-low.c (ptrace_request_to_str): Define a temporary + macro and use it to simplify this function's implementation. + +2013-01-07 Joel Brobecker <brobecker@adacore.com> + + * lynx-low.c (lynx_resume): Call perror_with_name if lynx_ptrace + sets errno. + +2013-01-07 Joel Brobecker <brobecker@adacore.com> + + * configure.srv (i[34567]86-*-lynxos*): Set srv_xmlfiles. + +2013-01-07 Joel Brobecker <brobecker@adacore.com> + + * configure.srv (powerpc-*-lynxos*): Set srv_xmlfiles. + +2013-01-07 Joel Brobecker <brobecker@adacore.com> + + * lynx-low.c (lynx_resume): Use the resume_info parameter + to determine the ptid for the lynx_ptrace call, unless + it is equal to minus_one_ptid, in which case we use the + ptid of the current_inferior. + (lynx_wait_1): After having received a thread create/exit + event, resume the inferior's execution using the signaling + thread's ptid, rather than the old ptid. + +2013-01-07 Joel Brobecker <brobecker@adacore.com> + + * lynx-low.c (lynx_resume): Delete variable ret. + +2013-01-01 Joel Brobecker <brobecker@adacore.com> + + * gdbreplay.c (gdbreplay_version): Update copyright year. + * server.c (gdbserver_version): Likewise. + +2012-12-17 Joel Brobecker <brobecker@adacore.com> + + * lynx-low.c (lynx_wait_1): Add debug trace before adding + new thread. + +2012-12-17 Joel Brobecker <brobecker@adacore.com> + + * lynx-low.c (ptrace_request_to_str): Add handling for + PTRACE_GETTRACESIG. + +2012-12-17 Joel Brobecker <brobecker@adacore.com> + + * lynx-low.c (lynx_attach): Delete variable new_process. + +2012-12-17 Joel Brobecker <brobecker@adacore.com> + + * lynx-low.c (lynx_create_inferior): Delete variable + new_process. + +2012-12-17 Joel Brobecker <brobecker@adacore.com> + + * lynx-low.c (ptrace_request_to_str): Do not handle + PTRACE_GETTHREADLIST if this macro does not exist. + +2012-12-15 Yao Qi <yao@codesourcery.com> + + * Makefile.in (OBS): Add notif.o. + * notif.c, notif.h: New. + * server.c: Include "notif.h". + (struct vstop_notif) <next>: Remove. + <base>: New field. + (queue_stop_reply): Update. + (push_event, send_next_stop_reply): Remove. + (discard_queued_stop_replies): Update. + (notif_stop): New variable. + (handle_v_stopped): Remove. + (handle_v_requests): Don't call handle_v_stopped. Call + handle_ack_notif instead. + (queue_stop_reply_callback): Call notif_event_enque instead + of queue_stop_reply. + (handle_status): Don't call send_next_stop_reply, call + notif_write_event instead. + (kill_inferior_callback): Likewise. + (detach_or_kill_inferior_callback): Likewise. + (main): Call initialize_notif. + (process_serial_event): Call QUEUE_is_empty. + (handle_target_event): Call notif_push instead of push event. + * server.h (push_event): Remove declaration. + +2012-12-10 Tom Tromey <tromey@redhat.com> + + * Makefile.in (DEPMODE, DEPDIR, depcomp, COMPILE.pre) + (COMPILE.post, COMPILE, POSTCOMPILE, IPAGENT_COMPILE): New + macros. + (.c.o): Rewrite. + (ax-ipa.o, tracepoint-ipa.o, utils-ipa.o, format-ipa.o) + (common-utils-ipa.o, remote-utils-ipa.o, regcache-ipa.o) + (i386-linux-ipa.o, linux-i386-ipa.o, linux-amd64-ipa.o) + (amd64-linux-ipa.o, ax.o): Rewrite. + (event-loop.o, hostio.o, hostio-errno.o, inferiors.o, mem-break.o) + (proc-service.o, regcache.o, remote-utils.o, server.o, target.o) + (thread-db.o, tracepoint.o, utils.o, gdbreplay.o, dll.o): Remove. + (signals.o, linux-procfs.o, linux-ptrace.o, common-utils.o, vec.o) + (gdb_vecs.o, xml-utils.o, linux-osdata.o, ptid.o, buffer.o) + (format.o, agent.o, vasprintf.o, vsnprintf.o): Rewrite. + (i386-low.o, i387-fp.o, linux-low.o, linux-arm-low.o) + (linux-bfin-low.o, linux-cris-low.o, linux-crisv32-low.o) + (linux-ia64-low.o, linux-m32r-low.o, linux-mips-low.o) + (linux-ppc-low.o, linux-s390-low.o, linux-sh-low.o) + (linux-tic6x-low.o, linux-x86-low.o, linux-xtensa-low.o) + (linux-tile-low.o, lynx-low.o, lynx-ppc-low.o, nto-low.o) + (nto-x86-low.o, linux-low.o, win32-low.o, win32-arm-low.o) + (win32-i386-low.o, spu-low.o, reg-arm.o, arm-with-iwmmxt.o) + (arm-with-vfpv2.o, arm-with-vfpv3.o, arm-with-neon.o, reg-bfin.o) + (reg-cris.o, reg-crisv32.o, i386.o, i386-linux.o, i386-avx.o) + (i386-avx-linux.o, i386-mmx.o, i386-mmx-linux.o, reg-ia64.o) + (reg-m32r.o, reg-m68k.o, reg-cf.o, mips-linux.o, mips-dsp-linux.o) + (mips64-linux.o, mips64-dsp-linux.o, powerpc-32.o, powerpc-32l.o) + (powerpc-altivec32l.o, powerpc-cell32l.o, powerpc-vsx32l.o) + (powerpc-isa205-32l.o, powerpc-isa205-altivec32l.o) + (powerpc-isa205-vsx32l.o, powerpc-e500l.o, powerpc-64l.o) + (powerpc-altivec64l.o, powerpc-cell64l.o, powerpc-vsx64l.o) + (powerpc-isa205-64l.o, powerpc-isa205-altivec64l.o) + (powerpc-isa205-vsx64l.o, s390-linux32.o, s390-linux32v1.o) + (s390-linux32v2.o, s390-linux64.o, s390-linux64v1.o) + (s390-linux64v2.o, s390x-linux64.o, s390x-linux64v1.o) + (s390x-linux64v2.o, tic6x-c64xp-linux.o, tic6x-c64x-linux.o) + (tic6x-c62x-linux.o, reg-sh.o, reg-sparc64.o, reg-spu.o, amd64.o) + (amd64-linux.o, amd64-avx.o, amd64-avx-linux.o, x32.o) + (x32-linux.o, x32-avx.o, x32-avx-linux.o, reg-xtensa.o) + (reg-tilegx.o): Remove. + (all_object_files): New macro. + Include .deps files. + * aclocal.m4, configure: Rebuild. + * acinclude.m4: Include depstand.m4, lead-dot.m4. + * configure.ac: Invoke ZW_CREATE_DEPDIR, + ZW_PROG_COMPILER_DEPENDENCIES. Compute GMAKE condition. + +2012-12-05 Tom Tromey <tromey@redhat.com> + + PR gdb/14917: + * server.h (current_insn_ptr, emit_error): Declare 'extern'. + +2012-11-28 Markus Metzger <markus.t.metzger@intel.com> + + * configure.ac: Check for linux/perf_event.h. + * config.in: Regenerated. + * configure: Regenerated. + +2012-11-26 Maxime Villard <rustyBSD@gmx.fr> + + * hostio.c (handle_readlink): Decrease buffer size + parameter passed to readlink by one byte. + +2012-11-26 Yao Qi <yao@codesourcery.com> + + * configure.ac (build_warnings): Append '-Wempty-body'. + * configure: Regenerated. + * linux-low.c (linux_create_inferior): Use braces for empty 'if' + body. + +2012-11-15 Pierre Muller <muller@sourceware.org> + + * configure.ac (AC_CHECK_HEADERS): Add wait.h header. + * config.in: Regenerate. + * configure: Regenerate. + * linux-low.c: Use "gdb_stat.h" header instead of <sys/stat.h> header. + Use "gdb_wait.h" header instead of <sys/wait.h> header. + * lynx-low.c: Use "gdb_wait.h" header instead of <sys/wait.h> header. + * remote-utils.c: Use "gdb_stat.h" header instead of <sys/stat.h> + header. + * server.c: Remove HAVE_WAIT_H conditional. Use "gdb_wait.h" header + instead of <sys/wait.h> header. + * spu-low.c: Use "gdb_wait.h" header instead of <sys/wait.h> header. + +2012-11-13 Markus Metzger <markus.t.metzger@intel.com> + + * Makefile.in: (INTERNAL_CFLAGS): Add -DGDBSERVER + (various make rules): Remove -DGDBSERVER + +2012-11-09 Yao Qi <yao@codesourcery.com> + + * spu-low.c (current_ptid): Move it to .. + * gdbthread.h: ... here. New. + * remote-utils.c (read_ptid): Use macro 'current_ptid'. + * server.c (myresume, process_serial_event): Likewise. + * thread-db.c (thread_db_find_new_threads): Likewise. + * tracepoint.c (run_inferior_command): Likewise. + +2012-10-01 Andrew Burgess <aburgess@broadcom.com> + + * server.c (handle_search_memory_1): Include access length in + warning message. + +2012-09-05 Michael Brandt <michael.brandt@axis.com> + + * linux-crisv32-low.c: Fix compile errors. + +2012-09-04 Yao Qi <yao@codesourcery.com> + + * tracepoint.c (cmd_qtsv): Adjust debug message. + Don't check CUR_TPOINT. + +2012-08-28 Yao Qi <yao@codesourcery.com> + + * ax.c, tracepoint.c: Replace ATTR_FORMAT with ATTRIBUTE_PRINTF. + * server.h: Include 'libiberty.h' and 'ansidecl.h'. + (ATTR_NORETURN, ATTR_FORMAT, ATTR_MALLOC): Remove. + Remove declarations of xmalloc, xreallloc, xstrdup and + freeargv. + * Makefile.in (libiberty_h): New. + (server_h): Append dependencies 'libiberty.h' and 'ansidecl.h'. + (linux-bfin-low.o): Append dependency 'libiberty.h'. + +2012-08-23 Yao Qi <yao@codesourcery.com> + + * server.h: Remove declaration of 'xsnprintf'. + +2012-08-22 Keith Seitz <keiths@redhat.com> + + * server.h: Include build-gnulib-gbserver/config.h. + * gdbreplay.c: Likewise. + +2012-08-08 Doug Evans <dje@google.com> + + * Makefile.in (SFILES): Add gdb_vecs.c. + (OBS): Add gdb_vecs.o. + (gdb_vecs_h, host_defs_h): New variables. + (thread-db.o): Add $(gdb_vecs_h) dependency. + (gdb_vecs.o): New rule. + * thread-db.c: #include "gdb_vecs.h". + (thread_db_load_search): Use a vector to iterate over path elements. + Handle text appearing after "$pdir". + + * configure.ac: Add check for strstr. + * config.in: Regenerate. + * configure: Regenerate. + +2012-08-02 Ulrich Weigand <ulrich.weigand@linaro.org> + + * hostio.c (handle_pread): If pread fails, fall back to attempting + lseek/read. + (handle_pwrite): Likewise for pwrite. + +2012-08-01 Ulrich Weigand <ulrich.weigand@linaro.org> + + * linux-arm-low.c (arm_linux_hw_point_initialize): Distinguish + between unsupported TYPE and unimplementable ADDR/LEN combination. + (arm_insert_point): Act on new return value. + +2012-07-31 Pedro Alves <palves@redhat.com> + + * server.c (process_point_options): Only skip tokens if we find + one that is unrecognized. Don't treat 'X' specially while + skipping unrecognized tokens. + +2012-07-30 Ulrich Weigand <ulrich.weigand@linaro.org> + + * linux-arm-low.c (arm_linux_hw_point_initialize): Do not attempt + to 4-byte-align HW breakpoint addresses for Thumb. + +2012-07-27 Yao Qi <yao@codesourcery.com> + + PR remote/14161. + + * server.h: Declare gdb_agent_about_to_close. + * target.c (kill_inferior): Include "agent.h". + New. Send command 'kill'. + * target.h (kill_inferior): Removed macro. + * tracepoint.c (gdb_agent_about_to_close): New. + (gdb_agent_helper_thread): Handle command 'close'. + Wait endlessly until the inferior stops. + Install gdb_agent_remove_socket to atexit hook. + (agent_socket_name): New static variable. + (gdb_agent_socket_init): Replace local variable 'name' with + 'agent_socket_name'. + (gdb_agent_remove_socket): New. + +2012-07-27 Yao Qi <yao@codesourcery.com> + + * server.c (process_point_options): Stop at 'X' when parsing. + +2012-07-19 Michael Eager <eager@eagercon.com> + + * i386-low.c (Z_packet_to_hw_type): Add Z_PACKET_HW_BP, translate + to hw_execute. + * linux-x86-low.c (x86_insert_point, x86_remove_point): + Call i386_low_insert_watchpoint, i386_low_remove_watchpoint to add/del + hardware breakpoint. + +2012-07-07 Jan Kratochvil <jan.kratochvil@redhat.com> + + * gdbserver/linux-low.c (initialize_low): Call + linux_ptrace_init_warnings. + +2012-07-02 Doug Evans <dje@google.com> + + * mem-break.c (gdb_no_commands_at_breakpoint): Fix cast from + pointer to int. + +2012-07-02 Stan Shebs <stan@codesourcery.com> + + * Makefile.in (WARN_CFLAGS_NO_FORMAT): Define. + (ax.o): Add it to build rule. + (ax-ipa.o): Ditto. + (OBS): Add format.o. + (IPA_OBS): Add format.o. + * server.c (handle_query): Claim support for breakpoint commands. + (process_point_options): Add command case. + (process_serial_event): Leave running if there are printfs in + effect. + * mem-break.h (any_persistent_commands): Declare. + (add_breakpoint_commands): Declare. + (gdb_no_commands_at_breakpoint): Declare. + (run_breakpoint_commands): Declare. + * mem-break.c (struct point_command_list): New struct. + (struct breakpoint): New field command_list. + (any_persistent_commands): New function. + (add_commands_to_breakpoint): New function. + (add_breakpoint_commands): New function. + (gdb_no_commands_at_breakpoint): New function. + (run_breakpoint_commands): New function. + * linux-low.c (linux_wait_1): Test for and run breakpoint commands + locally. + * ax.c: Include format.h. + (ax_printf): New function. + (gdb_eval_agent_expr): Add printf opcode. + +2012-06-13 Yao Qi <yao@codesourcery.com> + + * server.c (start_inferior): Remove duplicated writes to fields + 'last_resume_kind' and 'last_status' of 'current_inferior'. + +2012-06-12 Yao Qi <yao@codesourcery.com> + Pedro Alves <palves@redhat.com> + + * linux-low.c (linux_set_resume_request): Simplify predicate. Add + comment. + * server.c (handle_v_cont): Extend comment. + +2012-06-11 Yao Qi <yao@codesourcery.com> + + * linux-low.c (linux_attach): Add 'static'. + +2012-06-06 Yao Qi <yao@codesourcery.com> + + * ax.c (gdb_eval_agent_expr): Print `top' in hex. + +2012-06-01 Jan Kratochvil <jan.kratochvil@redhat.com> + + Fix gcc -flto compilation warning. + * server.c (main): Make variable multi_mode and attach volatile. + +2012-05-30 Thiago Jung Bauermann <thiago.bauermann@linaro.org> + + * linux-low.c (get_r_debug): Disable code using DT_MIPS_RLD_MAP + if the platform doesn't know about it. + +2012-05-30 Jeff Kenton <jkenton@tilera.com> + + * Makefile.in (SFILES): Add linux-tile-low.c. + (linux-tile-low.o, reg-tilegx.o, reg-tilegx.c): New rules. + * configure.srv: Handle tilegx-*-linux*. + * linux-tile-low.c: New file. + +2012-05-28 Jan Kratochvil <jan.kratochvil@redhat.com> + + * linux-low.c (linux_qxfer_libraries_svr4): Return -1 if R_DEBUG is -1. + +2012-05-24 Pedro Alves <palves@redhat.com> + + PR gdb/7205 + + Replace TARGET_SIGNAL_ with GDB_SIGNAL_ throughout. + +2012-05-24 Pedro Alves <palves@redhat.com> + + PR gdb/7205 + + Replace target_signal with gdb_signal throughout. + +2012-05-22 Maciej W. Rozycki <macro@codesourcery.com> + + * linux-low.c (linux_store_registers): Avoid the copying sequence + when no data has been retrieved by ptrace. + +2012-05-22 Will Deacon <will.deacon@arm.com> + + * linux-low (__UCLIBC__ && !(__UCLIBC_HAS_MMU__ || __ARCH_HAS_MMU__)): + Include asm/ptrace.h. + (PT_TEXT_ADDR, PT_DATA_ADDR, PT_TEXT_END_ADDR): Define only if not + already defined. + +2012-05-21 Maciej W. Rozycki <macro@codesourcery.com> + + * linux-low.c (linux_store_registers): Don't re-retrieve data + with ptrace that has already been obtained from /proc. Always + copy any data retrieved with ptrace to the buffer supplied. + +2012-05-11 Yao Qi <yao@codesourcery.com> + Pedro Alves <palves@redhat.com> + + * linux-low.c (enum stopping_threads_kind): New. + (stopping_threads): Change type to `enum stopping_threads_kind'. + (handle_extended_wait): If stopping and suspending threads, leave + the new_lwp suspended too. + (linux_wait_for_event): Adjust. + (stop_all_lwps): Set `stopping_threads' to + STOPPING_AND_SUSPENDING_THREADS or STOPPING_THREADS depending on + whether we're suspending threads or just stopping them. Assert no + recursion happens. + +2012-04-29 Yao Qi <yao@codesourcery.com> + + * server.h: Move some code to ... + * gdbthread.h: ... here. New. + * Makefile.in (inferiors.o, regcache.o): Depends on gdbthread.h + (remote-utils.o, server.o, target.o tracepoint.o): Likewise. + (nto-low.o, win32-low.o): Likewise. + * inferiors.c, linux-low.h, nto-low.c: Include gdbthread.h. + * regcache.c, remote-utils.c, server.c: Likewise. + * target.c, tracepoint.c, win32-low.c: Likewise. + +2012-04-24 Thiago Jung Bauermann <thiago.bauermann@linaro.org> + + * linux-low.h (PTRACE_ARG3_TYPE): Move macro from linux-low.c. + (PTRACE_ARG4_TYPE): Likewise. + (PTRACE_XFER_TYPE): Likewise. + * linux-arm-low.c (arm_prepare_to_resume): Cast third argument of + ptrace to PTRACE_ARG3_TYPE. + * linux-low.c (PTRACE_ARG3_TYPE): Move macro to linux-low.h. + (PTRACE_ARG4_TYPE): Likewise. + (PTRACE_XFER_TYPE): Likewise. + (linux_detach_one_lwp): Cast fourth argument of + ptrace to long then PTRACE_ARG4_TYPE. + (regsets_fetch_inferior_registers): Cast third argument of + ptrace to long then PTRACE_ARG3_TYPE. + (regsets_store_inferior_registers): Likewise. + +2012-04-20 Pedro Alves <palves@redhat.com> + + * configure: Regenerate. + +2012-04-19 Pedro Alves <palves@redhat.com> + + * Makefile.in (GNULIB_BUILDDIR): New. + (LIBGNU, INCGNU, GNULIB_H): Adjust. + (SUBDIRS, CLEANDIRS, REQUIRED_SUBDIRS): New. + (all, install-only, uninstall, clean-info, all-lib, clean): No + longer pass GNULIB_FLAGS_TO_PASS. Use subdir_do. + (maintainer-clean realclean distclean): Use subdir_do. + (subdir_do): New. + (gnulib/import/Makefile): Adjust. Replace gnulib/import with + $(GNULIB_BUILDDIR). Don't pass argument to config.status. + * acinclude.m4: Include acx_configure_dir.m4. + * configure.ac: Remove gl_EARLY, gl_INIT, and AM_INIT_AUTOMAKE + calls. Call AC_PROG_RANLIB. Configure gnulib using + ACX_CONFIGURE_DIR. + (GNULIB): New. + (GNULIB_STDINT_H): Adjust. + (AC_OUTPUT): Don't output gnulib/Makefile anymore. + * gdbreplay.c: Include build-gnulib/config.h. + * server.h: Likewise. + * aclocal.m4: Regenerate. + * config.in: Regenerate. + * configure: Regenerate. + +2012-04-19 Pedro Alves <palves@redhat.com> + + * Makefile.in (LIBGNU, INCGNU): Adjust. + (GNULIB_FLAGS_TO_PASS, GNULIB_H): Adjust. + (all, install-only, uninstall, clean-info, all-lib, clean) + (maintainer-clean, Makefile, gnulib/Makefile): Adjust. + * configure.ac: Adjust AC_OUTPUT output. + * aclocal.m4: Regenerate. + * configure: Regenerate. + +2012-04-19 Pedro Alves <palves@redhat.com> + + * Makefile.in (generated_files): New. + (server_h): Remove the explicit dependency on config.h, and depend + on $generated_files. + +2012-04-19 Pedro Alves <palves@redhat.com> + + * Makefile.in (INCGNU): Add -Ignulib. + +2012-04-19 Pedro Alves <palves@redhat.com> + + * Makefile.in (GNULIB_INCLUDE_DIR): Rename to ... + (INCGNU): ... this, and spell out -I here. + (GNULIB_LIB): Rename to ... + (LIBGNU): ... this. + (INCLUDE_CFLAGS, gdbserver$(EXEEXT), $(GNULIB_LIB) rule): Adjust. + +2012-04-19 Pedro Alves <palves@redhat.com> + + * config.in: Regenerate. + +2012-04-19 Pedro Alves <palves@redhat.com> + + * configure.ac: Remove AC_CHECK_DECLS check for memmem. + * server.h (memmem): Remove declaration. + * config.in: Regenerate. + * configure: Regenerate. + +2012-04-19 Yao Qi <yao@codesourcery.com> + + * Makefile.in (SFILES): Add common/vec.c. + (OBS): Add vec.o. + (vec.o): New rule. + +2012-04-19 Yao Qi <yao@codesourcery.com> + + * remote-utils.c (prepare_resume_reply): Replace with macro + target_core_of_thread. + * server.c (handle_qxfer_threads_proper): Likewise. + * target.h (traget_core_of_thread): New macro. + +2012-04-18 Pedro Alves <palves@redhat.com> + + * aclocal.m4: Regenerate. + * configure: Regenerate. + +2012-04-16 Yao Qi <yao@codesourcery.com> + + * tracepoint.c (cmd_qtstart): Download tracepoints even when they are + duplicated on address. + +2012-04-16 Yao Qi <yao@codesourcery.com> + + * tracepoint.c (COPY_FIELD_TO_BUF): New macro. + (struct tracepoint_action_ops) <send>: New field. + (m_tracepoint_action_send, r_tracepoint_action_send): New. + (agent_expr_send, x_tracepoint_action_send): New. + (l_tracepoint_action_send): New. + (cmd_qtdp): Download and install tracepoint + according to `use_agent'. + (run_inferior_command): Add one more parameter `len'. + Update callers. + (tracepoint_send_agent): New. + (cmd_qtdp, cmd_qtstart): Call tracepoint_send_agent. + +2012-04-16 Yao Qi <yao@codesourcery.com> + + * tracepoint.c (download_tracepoints): Moved to ... + (cmd_qtstart): ... here. + +2012-04-14 Yao Qi <yao@codesourcery.com> + + * tracepoint.c: Include inttypes.h. + (struct collect_memory_action): Use sized types. + (struct tracepoint): Likewise. + (cmd_qtdp, stop_tracing): Update print specifiers. + (cmd_qtp, response_tracepoint): Likewise. + (collect_data_at_tracepoint): Likewise. + (collect_data_at_step): Likewise. + +2012-04-14 Yao Qi <yao@codesourcery.com> + + Import gnulib module inttypes. + * aclocal.m4, config.in, configure: Regenerated. + +2012-04-14 Yao Qi <yao@codesourcery.com> + + * Makefile.in (maintainer-clean, realclean, distclean): Remove + Makefile and config.status at last. + +2012-04-13 Yao Qi <yao@codesourcery.com> + + * tracepoint.c: Include stdint.h unconditionally. + +2012-04-13 Thiago Jung Bauermann <thiago.bauermann@linaro.org> + + * acinclude.m4 (GDBSERVER_HAVE_THREAD_DB_TYPE): New macro based + on BFD_HAVE_SYS_PROCFS_TYPE. + * configure.ac: Look for lwpid_t and psaddr_t in libthread_db.h. + * configure: Regenerate. + * config.in: Likewise. + +2012-04-13 H.J. Lu <hongjiu.lu@intel.com> + + * Makefile.in (clean): Also remove x32.c x32-linux.c + x32-avx.c x32-avx-linux.c. + (x32.o): New target. + (x32.c): Likewise. + (x32-linux.o): Likewise. + (x32-linux.c): Likewise. + (x32-avx.o): Likewise. + (x32-avx.c): Likewise. + (x32-avx-linux.o): Likewise. + (x32-avx-linux.c): Likewise. + + * configure.srv (srv_amd64_regobj): Add x32.o x32-avx.o. + (srv_amd64_linux_regobj): Add x32-linux.o x32-avx-linux.o. + (srv_i386_64bit_xmlfiles): Add i386/x32-core.xml. + (srv_amd64_xmlfiles): Add i386/x32.xml i386/x32-avx.xml. + (srv_amd64_linux_xmlfiles): Add i386/x32-linux.xml + i386/x32-avx-linux.xml. + + * linux-x86-low.c (init_registers_x32_linux): New prototype. + (init_registers_x32_avx_linux): Likwise. + (x86_linux_update_xmltarget): Call init_registers_x32_linux + or init_registers_x32_avx_linux if linux_is_elf64 is false. + +2012-04-13 Pedro Alves <palves@redhat.com> + + * Makefile.in (GNULIB_FLAGS_TO_PASS): New. + (FLAGS_TO_PASS): Don't change or set $top_srcdir, $srcdir and VPATH. + (all, uninstall, clean-info, all-lib, clean, maintainer-clean) + (realclean, distclean): Explicitly pass $GNULIB_FLAGS_TO_PASS to + the sub-make. + +2012-04-12 H.J. Lu <hongjiu.lu@intel.com> + + * linux-x86-low.c (compat_x32_clock_t): New. + (compat_x32_siginfo_t): Likewise. + (compat_x32_siginfo_from_siginfo): Likewise. + (siginfo_from_compat_x32_siginfo): Likewise. + (linux_is_elf64): Likewise. + (x86_siginfo_fixup): Call compat_x32_siginfo_from_siginfo + and siginfo_from_compat_x32_siginfo for x32. + (x86_arch_setup): Set linux_is_elf64. + +2012-04-12 H.J. Lu <hongjiu.lu@intel.com> + + PR gdb/13969 + * linux-low.c (linux_pid_exe_is_elf_64_file): Also return the + e_machine field. + (linux_qxfer_libraries_svr4): Update call to elf_64_file_p. + * linux-low.h (linux_pid_exe_is_elf_64_file): Updated. + * linux-x86-low.c (x86_arch_setup): Check if GDBserver is + compatible with process. + +2012-04-12 Yao Qi <yao@codesourcery.com> + + * Makefile.in: Define abs_top_srcdir and abs_srcdir. + (INCLUDE_CFLAGS): Append GNULIB_INCLUDE_DIR. + (install-only, install-info, clean): Handle sub dir gnulib. + (all-lib, am--refresh): New targets. + (memmem.o): Remove target. + * configure.ac: Remove AC_CONFIG_LIBOBJ_DIR. + Invoke gl_EARLY. Invoke AC_CHECK_PROGS for make. + (AC_REPLACE_FUNCS): Remove memmem. + Invoke gl_INIT and AM_INIT_AUTOMAKE. + (AC_OUTPUT): Generate Makefile in gnulib/. + * aclocal.m4, config.in, configure: Regenerated. + +2012-04-10 Maciej W. Rozycki <macro@codesourcery.com> + + * linux-low.c (get_r_debug): Handle DT_MIPS_RLD_MAP. + +2012-04-05 Pedro Alves <palves@redhat.com> + + -Werror=strict-aliasing + + * spu-low.c (parse_spufs_run): Avoid dereferencing type-punned + pointer. + +2012-04-04 Pedro Alves <palves@redhat.com> + + * linux-sparc-low.c (sparc_fill_gregset_to_stack) + (sparc_store_gregset_from_stack, sparc_store_gregset) + (sparc_breakpoint_at): Fix formatting. + +2012-03-30 Thiago Jung Bauermann <thiago.bauermann@linaro.org> + + * configure.ac: Check whether Elf32_auxv_t and Elf64_auxv_t + are available. + * linux-low.c [HAVE_ELF32_AUXV_T] (Elf32_auxv_t): Add typedef. + [HAVE_ELF64_AUXV_T] (Elf64_auxv_t): Likewise. + * config.in: Regenerate. + * configure: Likewise. + +2012-03-29 Pedro Alves <palves@redhat.com> + + * linux-low.c (regsets_store_inferior_registers) [__sparc__]: + Correct ptrace arguments. + +2012-03-28 Pedro Alves <palves@redhat.com> + + * linux-ia64-low.c (ia64_regmap): Map IA64_EC_REGNUM to PT_AR_EC. + (IA64_GR0_REGNUM, IA64_FR0_REGNUM) + (IA64_FR1_REGNUM): New defines. + (ia64_fetch_register): New. + (the_low_target): Install it. + * linux-low.h (struct linux_target_ops) <fetch_register>: New + field. + * linux-low.c (linux_fetch_registers): Try the + the_low_target.fetch_register hook first. + + * linux-arm-low.c (the_low_target): Adjust. + * linux-bfin-low.c (the_low_target): Adjust. + * linux-cris-low.c (the_low_target): Adjust. + * linux-crisv32-low.c (the_low_target): Adjust. + * linux-m32r-low.c (the_low_target): Adjust. + * linux-m68k-low.c (the_low_target): Adjust. + * linux-mips-low.c (the_low_target): Adjust. + * linux-ppc-low.c (the_low_target): Adjust. + * linux-s390-low.c (the_low_target): Adjust. + * linux-sh-low.c (the_low_target): Adjust. + * linux-sparc-low.c (the_low_target): Adjust. + * linux-tic6x-low.c (the_low_target): Adjust. + * linux-x86-low.c (the_low_target): Adjust. + * linux-xtensa-low.c (the_low_target): Adjust. + +2012-03-26 Pedro Alves <palves@redhat.com> + + * server.c (handle_qxfer_libraries): Don't bail early if + the_target->qxfer_libraries_svr4 is not NULL. + +2012-03-26 Pedro Alves <palves@redhat.com> + + * linux-low.c (linux_qxfer_libraries_svr4): Fix pasto in comment. + +2012-03-23 Pedro Alves <palves@redhat.com> + + * linux-low.c (linux_qxfer_libraries_svr4): Terminate the + "library-list-svr4" element's start tag when the the DSO list is + empty. + +2012-03-23 Pedro Alves <palves@redhat.com> + + * linux-low.c (read_one_ptr): Read the inferior's pointer through + a variable whose type size is the same as the inferior's pointer + size. + +2012-03-21 Thomas Schwinge <thomas@codesourcery.com> + + * linux-arm-low.c (arm_stopped_by_watchpoint): Use siginfo_t instead of + struct siginfo. + * linux-low.c (siginfo_fixup, linux_xfer_siginfo): Likewise. + * linux-x86-low.c (x86_siginfo_fixup): Likewise. + * linux-low.h: Include <signal.h>. + (struct siginfo): Remove forward declaration. + (struct linux_target_ops) <siginfo_fixup>: Use siginfo_t instead of + struct siginfo. + +2012-03-21 Mike Frysinger <vapier@gentoo.org> + + * .gitignore: Ignore more files. + +2012-03-19 Pedro Alves <palves@redhat.com> + Jan Kratochvil <jan.kratochvil@redhat.com> + + * server.c (cont_thread, general_thread): Add describing comments. + (start_inferior): Clear `cont_thread'. + (handle_v_cont): Don't set `cont_thread' if resuming all threads + of a process. + +2012-03-15 Yao Qi <yao@codesourcery.com> + + * tracepoint.c (install_tracepoint): Move duplicated tracepoint + handling to ... + (cmd_qtdp): ... here. + +2012-03-15 Yao Qi <yao@codesourcery.com> + + * tracepoint.c (struct tracepoint_action_ops): New. + (struct tracepoint_action) [!IN_PROCESS_AGENT] <ops>: New field. + (m_tracepoint_action_download): New. + (r_tracepoint_action_download): New. + (x_tracepoint_action_download): New. + (l_tracepoint_action_download): New. + (add_tracepoint_action): Install `action->ops' according type. + (download_tracepoint_1): Move code `download' function pointer + of various tracepoint_action_ops. + +2012-03-13 Jan Kratochvil <jan.kratochvil@redhat.com> + + * linux-low.c (linux_attach_lwp_1): New variable buffer. Call + linux_ptrace_attach_warnings. + +2012-03-13 Jan Kratochvil <jan.kratochvil@redhat.com> + + * Makefile.in (linux-ptrace.o): New. + * configure.srv (arm*-*-linux*, bfin-*-*linux*, crisv32-*-linux*) + (cris-*-linux*, i[34567]86-*-linux*, ia64-*-linux*, m32r*-*-linux*) + (m68*-*-linux*, m68*-*-uclinux*, mips*-*-linux*, powerpc*-*-linux*) + (s390*-*-linux*, sh*-*-linux*, sparc*-*-linux*, tic6x-*-uclinux) + (x86_64-*-linux*, xtensa*-*-linux*): Add linux-ptrace.o to SRV_TGTOBJ + of these targets. + * linux-low.c (linux_attach_lwp_1): Remove redundent else clause. + +2012-03-08 Yao Qi <yao@codesourcery.com> + Pedro Alves <palves@redhat.com> + + Fix PR server/13392. + * linux-x86-low.c (amd64_install_fast_tracepoint_jump_pad): Check + offset of JMP insn. + * tracepoint.c (remove_tracepoint): New. + (cmd_qtdp): Call remove_tracepoint when failed to install. + +2012-03-07 Pedro Alves <palves@redhat.com> + + * linux-low.c (get_detach_signal): New. + (linux_detach_one_lwp): Get rid of a pending SIGSTOP with SIGCONT. + Pass on pending signals to PTRACE_DETACH. Check the result of the + ptrace call. + * server.c (program_signals, program_signals_p): New. + (handle_general_set): Handle QProgramSignals. + * server.h (program_signals, program_signals_p): Declare. + +2012-03-05 Pedro Alves <palves@redhat.com> + Jan Kratochvil <jan.kratochvil@redhat.com> + + * linux-low.c (get_dynamic): Don't warn when PT_PHDR isn't found. + New comment why. + +2012-03-03 Yao Qi <yao@codesourcery.com> + + * tracepoint.c (tracepoint_look_up_symbols): Update call to + agent_look_up_symbols. + +2012-03-03 Yao Qi <yao@codesourcery.com> + + * Makefile.in (linux-low.o): Keep dependence on agent.h. + (linux-x86-low.o): Likewise. + * server.h: Remove in_process_agent_loaded. + * tracepoint.c (in_process_agent_loaded): Removed. Moved it + common/agent.c. + Update callers. + +2012-03-03 Yao Qi <yao@codesourcery.com> + + * tracepoint.c (gdb_agent_capability): New global. + (in_process_agent_loaded_ust): Renamed to + `in_process_agent_supports_ust'. + Update callers. + (in_process_agent_supports_ust): Call agent_capability_check. + (clear_installed_tracepoints): Assert that agent supports + agent. + +2012-03-03 Yao Qi <yao@codesourcery.com> + + * linux-low.c (linux_supports_agent): New. + (linux_target_ops): Initialize field `supports_agent' with + linux_supports_agent. + * target.h (struct target_ops) <supports_agent>: New. + (target_supports_agent): New macro. + * server.c (handle_general_set): Handle packet 'QAgent'. + (handle_query): Send `QAgent+'. + * Makefile.in (server.o): Depends on agent.h. + +2012-03-03 Yao Qi <yao@codesourcery.com> + + * Makefile.in (OBS): Add agent.o. + Add new rule for agent.o. + Track dependence of tracepoint.c on agent.h. + * tracepoint.c (run_inferior_command_1): + (run_inferior_command): Call agent_run_command. + (gdb_ust_connect_sync_socket): Deleted. Move it to + common/agent.c. + (resume_thread, stop_thread): Likewise. + (gdb_ust_socket_init): Renamed to ... + (gdb_agent_socket_init): ... New. + (gdb_ust_thread): Renamed to ... + (gdb_agent_helper_thread): ... New. + (gdb_ust_init): Move some code to ... + (gdb_agent_init): ... here. New. + [HAVE_UST]: Call gdb_ust_init. + (initialize_tracepoint_ftlib): Call gdb_agent_init. + * configure.ac: Add `sys/un.h' to AC_CHECK_HEADERS. + * config.in, configure: Regenerated. + +2012-03-02 Pedro Alves <palves@redhat.com> + + * inferiors.c (add_pid_to_list, pull_pid_from_list): Delete. + * linux-low.c (struct simple_pid_list): New. + (stopped_pids): New a struct simple_pid_list pointer. + (add_to_pid_list, pull_pid_from_list): New. + (handle_extended_wait): Don't assume the first signal new children + report is SIGSTOP. Adjust call to pull_pid_from_list. + (linux_wait_for_lwp): Adjust. + +2012-03-02 Yao Qi <yao@codesourcery.com> + + * tracepoint.c (do_action_at_tracepoint): Write `stop_pc' in + debug log. + +2012-03-02 Yao Qi <yao@codesourcery.com> + + * tracepoint.c (collect_ust_data_at_tracepoint): Remove parameters + `stop_pc' and `tpoint'. Update caller. + +2012-03-01 Maciej W. Rozycki <macro@codesourcery.com> + + * linux-low.h (linux_target_ops): Add regset_bitmap member. + * linux-low.c (use_linux_regsets): New macro. + [!HAVE_LINUX_REGSETS] (regsets_fetch_inferior_registers): Likewise. + [!HAVE_LINUX_REGSETS] (regsets_store_inferior_registers): Likewise. + (linux_register_in_regsets): New function. + (usr_fetch_inferior_registers): Skip registers covered by + regsets. + (usr_store_inferior_registers): Likewise. + (usr_fetch_inferior_registers): New macro. + (usr_store_inferior_registers): Likewise. + (linux_fetch_registers): Handle mixed regset/non-regset targets. + (linux_store_registers): Likewise. + * linux-mips-low.c (init_registers_mips_dsp_linux): New + prototype. + (init_registers_mips64_dsp_linux): Likewise. + (init_registers_mips_linux): New macro. + (init_registers_mips_dsp_linux): Likewise. + (mips_dsp_num_regs): Likewise. + (DSP_BASE, DSP_CONTROL): New fallback macros. + (mips_base_regs): New macro. + (mips_regmap): Use it. Fix the size. + (mips_dsp_regmap): New variable. + (mips_dsp_regset_bitmap): Likewise. + (mips_arch_setup): New function. + (mips_cannot_fetch_register): Use the_low_target.regmap rather + than mips_regmap. + (mips_cannot_store_register): Likewise. + (the_low_target): Update .arch_setup, .num_regs and .regmap + initializers. Add .regset_bitmap initializer. + * linux-arm-low.c (the_low_target): Add .regset_bitmap + initializer. + * linux-bfin-low.c (the_low_target): Likewise. + * linux-cris-low.c (the_low_target): Likewise. + * linux-crisv32-low.c (the_low_target): Likewise. + * linux-ia64-low.c (the_low_target): Likewise. + * linux-m32r-low.c (the_low_target): Likewise. + * linux-m68k-low.c (the_low_target): Likewise. + * linux-ppc-low.c (the_low_target): Likewise. + * linux-s390-low.c (the_low_target): Likewise. + * linux-sh-low.c (the_low_target): Likewise. + * linux-sparc-low.c (the_low_target): Likewise. + * linux-tic6x-low.c (the_low_target): Likewise. + * linux-x86-low.c (the_low_target): Likewise. + * linux-xtensa-low.c (the_low_target): Likewise. + * configure.srv <mips*-*-linux*>: Add mips-dsp-linux.o and + mips64-dsp-linux.o to srv_regobj. Add mips-dsp-linux.xml, + mips64-dsp-linux.xml, mips-dsp.xml and mips64-dsp.xml to + srv_xmlfiles. + * Makefile.in (mips-dsp-linux.o, mips-dsp-linux.c): New targets. + (mips64-dsp-linux.o, mips64-dsp-linux.c): Likewise. + +2012-02-29 Yao Qi <yao@codesourcery.com> + Pedro Alves <palves@redhat.com> + + * linux-low.c: (linux_wait_1): Call unsuspend_all_lwps when + `step_over_finished' is true. + +2012-02-27 Pedro Alves <palves@redhat.com> + + * linux-low.c (pid_is_stopped): Delete, moved to common/. + (linux_attach_lwp_1): Adjust to use linux_proc_pid_is_stopped. + +2012-02-27 Pedro Alves <palves@redhat.com> + + PR server/9684 + * linux-low.c (pid_is_stopped): New. + (linux_attach_lwp_1): Handle attaching to 'T (stopped)' processes. + +2012-02-25 Luis Machado <lgustavo@codesourcery.com> + + * mem-break.c (clear_gdb_breakpoint_conditions): Fix de-allocation + of conditions. + +2012-02-24 Maciej W. Rozycki <macro@codesourcery.com> + + * linux-mips-low.c (mips_regmap): Correct the index of $f9. + +2012-02-24 Luis Machado <lgustavo@codesourcery> + + * server.c (handle_query): Advertise support for target-side + breakpoint condition evaluation. + (process_point_options): New function. + (process_serial_event): When inserting a breakpoint, check for + a target-side condition that should be evaluated. + + * mem-break.c: Include regcache.h and ax.h. + (point_cond_list_t): New data structure. + (breakpoint) <cond_list>: New field. + (find_gdb_breakpoint_at): Make non-static. + (delete_gdb_breakpoint_at): Clear any target-side + conditions. + (clear_gdb_breakpoint_conditions): New function. + (add_condition_to_breakpoint): Likewise. + (add_breakpoint_condition): Likewise. + (gdb_condition_true_at_breakpoint): Likewise. + (gdb_breakpoint_here): Return result directly instead + of going through a local variable. + + * mem-break.h (find_gdb_breakpoint_at): New prototype. + (clear_gdb_breakpoint_conditions): Likewise. + (add_breakpoint_condition): Likewise. + (gdb_condition_true_at_breakpoint): Likewise. + + * linux-low.c (linux_wait_1): Evaluate target-side breakpoint condition. + (need_step_over_p): Take target-side breakpoint condition into + consideration. + +2012-02-24 Luis Machado <lgustavo@codesourcery> + + * server.h: Include tracepoint.h. + (agent_mem_read, agent_get_trace_state_variable_value, + agent_set_trace_state_variable_value, + agent_tsv_read, agent_mem_read_string, get_get_tsv_func_addr, + get_set_tsv_func_addr): New prototypes. + + * ax.h: New include file. + * ax.c: New source file. + + * tracepoint.c: Include ax.h. + (gdb_agent_op, gdb_agent_op_names, gdb_agent_op_sizes, + agent_expr, eval_result_type): Move to ax.h. + (parse_agent_expr): Rename to ... + (gdb_parse_agent_expr): ... this, make it non-static and move + to ax.h. + (unparse_agent_expr) Rename to ... + (gdb_unparse_agent_expr): ... this, make it non-static and move + to ax.h. + (eval_agent_expr): Rename to ... + (eval_tracepoint_agent_expr): ... this. + (agent_mem_read, agent_mem_read_string, agent_tsv_read): Remove + forward declarations. + (add_tracepoint_action): Call gdb_parse_agent_expr (...). + (agent_get_trace_state_variable_value): New function. + (agent_set_trace_state_variable_value): New function. + (cmd_qtdp): Call gdb_parse_agent_expr (...). + (response_tracepoint): Call gdb_unparse_agent_expr (...). + (do_action_at_tracepoint): Call eval_tracepoint_agent_expr (...). + (condition_true_at_tracepoint): Likewise. + (parse_agent_expr): Rename to ... + (gdb_parse_agent_expr): ... this and move to ax.c. + (unparse_agent_expr): Rename to ... + (gdb_unparse_agent_expr): ... this and move to ax.c. + (gdb_agent_op_name): Move to ax.c. + (eval_agent_expr): Rename to ... + (gdb_eval_agent_expr): ... this, use regcache passed as parameter + and move to ax.c. + (eval_tracepoint_agent_expr): New function. + (agent_mem_read, agent_mem_read_string, agent_tsv_read): Make + non-static. + (current_insn_ptr, emit_error, struct bytecode_address): Move to + ax.c. + (emit_prologue, emit_epilogue, emit_add, emit_sub, emit_mul, emit_lsh, + emit_rsh_signed, emit_rsh_unsigned, emit_ext, emit_log_not, + emit_bit_and, emit_bit_or, emit_bit_xor, emit_bit_not, emit_equal, + emit_less_signed, emit_less_unsigned, emit_ref, emit_if_goto, + emit_goto, write_goto_address, emit_const, emit_reg, emit_pop, + emit_stack, emit_zero_ext, emit_swap, emit_stack_adjust, + emit_int_call_1, emit_void_call_2, emit_eq_goto, emit_ne_goto, + emit_lt_goto, emit_ge_goto, emit_gt_goto, emit_le_goto): Move to ax.c. + (get_get_tsv_func_addr, get_set_tsv_func_addr): New functions. + (compile_bytecodes): Remove forward declaration. + (is_goto_target): Move to ax.c. + (compile_bytecodes): Move to ax.c and call + agent_get_trace_state_variable_value (...) and + agent_set_trace_state_variable_value (...). + + * Makefile.in: Update ax.c and IPA dependencies. + +2012-02-24 Pedro Alves <palves@redhat.com> + + * tracepoint.c (cmd_bigqtbuffer): Rename as ... + (cmd_bigqtbuffer_circular): ... this. Only handle + 'QTBuffer:circular:'. + (handle_tracepoint_general_set): Adjust. + +2012-02-16 Yao Qi <yao@codesourcery.com> + + * inferiors.c: Move code to ... + * dll.c: .... here. New. + * server.h: Declare clear_dlls. + * Makefile.in (SFILES): Add dll.c. + (OBS): Add dll.o + (dll.o): New rule. + +2012-02-11 Yao Qi <yao@codesourcery.com> + + * server.c: (handle_monitor_command): Add a new parameter + `own_buf'. + (handle_query): Update caller. + +2012-02-09 Joel Brobecker <brobecker@adacore.com> + + * configure.ac: Add readlink to AC_CHECK_FUNCS list. + * configure, config.in: Regenerate. + * hostio.c: Provide an alternate implementation if HAVE_READLINK + is not defined. + +2012-02-02 Pedro Alves <palves@redhat.com> + + Try SIGKILL first, then PTRACE_KILL. + * linux-low.c (linux_kill_one_lwp): New. + (linux_kill_one_lwp): Rename to ... + (kill_one_lwp_callback): ... this. Use the new + linux_kill_one_lwp. + +2012-02-02 Pedro Alves <palves@redhat.com> + + * tracepoint.c (cmd_qtminftpilen): Return 0 if there's no current + inferior. + +2012-01-27 Pedro Alves <palves@redhat.com> + + * linux-low.c (linux_child_pid_to_exec_file): Delete. + (elf_64_file_p): Make static. + (linux_pid_exe_is_elf_64_file): New. + * linux-low.h (linux_child_pid_to_exec_file, elf_64_file_p): + Delete declarations. + (linux_pid_exe_is_elf_64_file): Declare. + * linux-x86-low.c (x86_arch_setup): Use + linux_pid_exe_is_elf_64_file. + +2012-01-25 Jan Kratochvil <jan.kratochvil@redhat.com> + + * linux-low.c (linux_wait_for_event_1): Rename to ... + (linux_wait_for_event): ... here and merge it with former + linux_wait_for_event - new variable wait_ptid, use it. + (linux_wait_for_event): Remove - merge it to linux_wait_for_event_1. + +2012-01-23 Pedro Alves <palves@redhat.com> + + * server.c (main): Avoid yet another case of infinite loop while + detaching/killing after a longjmp. + +2012-01-20 Jan Kratochvil <jan.kratochvil@redhat.com> + + Code cleanup. + * linux-low.c (linux_wait_for_event_1): Use ptid_is_pid. + +2012-01-20 Ulrich Weigand <ulrich.weigand@linaro.org> + + * hostio.c (handle_readlink): New function. + (handle_vFile): Call it to handle "vFile:readlink" packets. + +2012-01-20 Pedro Alves <palves@redhat.com> + Ulrich Weigand <ulrich.weigand@linaro.org> + + * server.c (handle_v_requests): Only support vAttach and vRun to + start multiple processes when in extended protocol mode. + +2012-01-17 Pedro Alves <palves@redhat.com> + + * tracepoint.c (initialize_tracepoint): Use mmap instead of + memalign plus mprotect to allocate the scratch buffer. + +2012-01-13 Pedro Alves <palves@redhat.com> + + * server.c (attach_inferior): Clear `cont_thread'. + +2012-01-13 Pedro Alves <palves@redhat.com> + + * server.c (main): Avoid infinite loop while detaching/killing + after a longjmp. + +2012-01-09 Doug Evans <dje@google.com> + + * server.c (start_inferior): Set last_ptid in --wrapper case. + +2012-01-06 Yao Qi <yao@codesourcery.com> + + * tracepoint.c [IN_PROCESS_AGENT] (debug_threads): Macro + defined. + [IN_PROCESS_AGENT] (debug_agent): New global variable. + +2012-01-04 Yao Qi <yao@codesourcery.com> + + * tracepoint.c (cmd_qtdp): Print debug message + for static tracepoint. + +2012-01-04 Yao Qi <yao@codesourcery.com> + + * tracepoint.c (trace_vdebug): Differentiate debug message + between gdbserver and IPA. + +2012-01-03 Yao Qi <yao@codesourcery.com> + + * tracepoint.c (tracepoint_was_hit): Don't collect for + static tracepoint. + +2012-01-02 Joel Brobecker <brobecker@adacore.com> + + * terminal.h: Reformat copyright header. + +2012-01-02 Joel Brobecker <brobecker@adacore.com> + + * server.c (gdbserver_version): Update copyright year. + * gdbreplay.c (gdbreplay_version): Likewise. + +2011-12-18 Jan Kratochvil <jan.kratochvil@redhat.com> + + * linux-low.c (linux_create_inferior): Put empty if clause for write. + + Revert: + 2011-12-18 Hui Zhu <teawater@gmail.com> + * linux-low.c (linux_create_inferior): Save return value to ret. + +2011-12-18 Hui Zhu <teawater@gmail.com> + + * linux-low.c (linux_create_inferior): Save return value to ret. + +2011-12-16 Doug Evans <dje@google.com> + + * linux-low.c (linux_create_inferior): If stdio connection, + redirect stdin from /dev/null, stdout to stderr. + * remote-utils.c (remote_is_stdio): New static global. + (remote_connection_is_stdio): New function. + (remote_prepare): Handle stdio connection. + (remote_open): Ditto. + (remote_close): Don't close stdin for stdio connections. + (read_prim,write_prim): New functions. Replace all calls to + read/write to these. + * server.c (main): Watch for "-" argument. Move call to + remote_prepare before start_inferior. + * server.h (STDIO_CONNECTION_NAME): New macro. + (remote_connection_is_stdio): Declare. + + * remote-utils.c (prepare_resume_reply): Remove extraneous \n + in debugging output. + +2011-12-15 Yao Qi <yao@codesourcery.com> + + * tracepoint.c: Include sys/syscall.h. + (gdb_ust_thread): Remove preprocessor conditional. + +2011-12-14 Pedro Alves <pedro@codesourcery.com> + + * linux-low.c (linux_detach_one_lwp): Call + the_low_target.prepare_to_resume before detaching. + +2011-12-14 Yao Qi <yao@codesourcery.com> + + * tracepoint.c (gdb_ust_thread): Don't ignore return value + of write. + +2011-12-14 Yao Qi <yao@codesourcery.com> + + * i386-low.c (i386_low_stopped_data_address): Initialize local + variable `control'. + +2011-12-13 Pedro Alves <pedro@codesourcery.com> + + PR remote/13492 + + * i386-low.c (i386_low_stopped_data_address): Avoid fetching + DR_CONTROL unless necessary. Extend comments. + * linux-x86-low.c (x86_linux_prepare_to_resume): Don't write to + DR0-3 if not used. If any watchpoint was set, clear DR_STATUS. + +2011-12-13 Yao Qi <yao@codesourcery.com> + + * tracepoint.c (trace_buffer_alloc): Replace magic numbers with + macros. + (upload_fast_traceframes, upload_fast_traceframes): Likewise. + +2011-12-08 Jan Kratochvil <jan.kratochvil@redhat.com> + + * linux-low.c (linux_kill): Skip PTRACE_KILL if LWP does not exist. + Print new debug message for such case. + +2011-12-06 Jan Kratochvil <jan.kratochvil@redhat.com> + + Fix overlapping memcpy. + * mem-break.c (set_raw_breakpoint_at): New variable buf. Use it for + the read_inferior_memory transfer. + (delete_fast_tracepoint_jump): New variable buf. Use it for the + write_inferior_memory transfer. + (set_fast_tracepoint_jump): New variable buf. Use it for the + read_inferior_memory and write_inferior_memory transfers. + (uninsert_fast_tracepoint_jumps_at, reinsert_fast_tracepoint_jumps_at) + (delete_raw_breakpoint, uninsert_raw_breakpoint): New variable buf. + Use it for the write_inferior_memory transfer. + (check_mem_read, check_mem_write): New gdb_asserts for overlapping + buffers. + +2011-12-06 Maciej W. Rozycki <macro@codesourcery.com> + + * linux-low.c (fetch_register, store_register): Make code + consistent, fix formatting. + +2011-12-06 Maciej W. Rozycki <macro@codesourcery.com> + + * linux-low.c (usr_store_inferior_registers): Factor out code + to handle individual registers into... + (store_register): ... this new function. + +2011-12-06 Ulrich Weigand <uweigand@de.ibm.com> + + * Makefile.in (s390-linux32v1.o, s390-linux32v1.c): New rules. + (s390-linux32v2.o, s390-linux32v2.c): Likewise. + (s390-linux64v1.o, s390-linux64v1.c): Likewise. + (s390-linux64v2.o, s390-linux64v2.c): Likewise. + (s390x-linux64v1.o, s390x-linux64v1.c): Likewise. + (s390x-linux64v2.o, s390x-linux64v2.c): Likewise. + * configure.srv [s390*-*-linux*] (srv_regobj): Add new objects. + (srv_xmlfiles): Add new XML files. + + * linux-s390-low.c: Include "elf/common.h", <sys/ptrace.h>, + and <sys/uio.h>. + (PTRACE_GETREGSET, PTRACE_SETREGSET): Define if undefined. + (init_registers_s390_linux32v1): Add prototype. + (init_registers_s390_linux32v2): Likewise. + (init_registers_s390_linux64v1): Likewise. + (init_registers_s390_linux64v2): Likewise. + (init_registers_s390x_linux64v1): Likewise. + (init_registers_s390x_linux64v2): Likewise. + (s390_num_regs): Increment to 52. + (s390_regmap): Add orig_r2 register. + (s390_num_regs_3264): Increment to 68. + (s390_regmap_3264): Add orig_r2 register. + (s390_collect_ptrace_register): Handle orig_r2 register. + (s390_supply_ptrace_register): Likewise. + (s390_fill_last_break): New function. + (s390_store_last_break): Likewise. + (s390_fill_system_call): New function. + (s390_store_system_call): Likewise. + (target_regsets): Handle NT_S390_LAST_BREAK and NT_S390_SYSTEM_CALL + register sets. + (s390_check_regset): New function. + (s390_arch_setup): Check for presence of NT_S390_LAST_BREAK and + NT_S390_SYSTEM_CALL regsets and use appropriate description. + Update target_regsets for available register sets. + +2011-12-02 Paul Pluzhnikov <ppluzhnikov@google.com> + Jan Kratochvil <jan.kratochvil@redhat.com> + + * linux-low.c (get_phdr_phnum_from_proc_auxv, get_dynamic, get_r_debug) + (read_one_ptr, struct link_map_offsets, linux_qxfer_libraries_svr4): + New. + (struct linux_target_ops): Install linux_qxfer_libraries_svr4. + * linux-low.h (struct process_info_private): New member r_debug. + * server.c (handle_qxfer_libraries): Call + the_target->qxfer_libraries_svr4. + (handle_qxfer_libraries_svr4): New function. + (qxfer_packets): New entry "libraries-svr4". + (handle_query): Check QXFER_LIBRARIES_SVR4 and report libraries-svr4. + * target.h (struct target_ops): New member qxfer_libraries_svr4. + * remote.c (remote_xfer_partial): Call add_packet_config_cmd for + PACKET_qXfer_libraries_svr4. + +2011-11-30 Ulrich Weigand <uweigand@de.ibm.com> + + * linux-s390-low.c (s390_collect_ptrace_register): Fully convert + PSW address/mask between 8-byte and 16-byte formats. + (s390_supply_ptrace_register): Likewise. + (s390_get_pc, s390_set_pc): 4-byte PSW address always includes + basic addressing mode bit. + +2011-11-24 Stan Shebs <stan@codesourcery.com> + + * tracepoint.c (cmd_qtstatus): Use plongest instead of %llx. + +2011-11-17 Stan Shebs <stan@codesourcery.com> + + * tracepoint.c (struct tracepoint): New field traceframe_usage. + (tracing_start_time): New global. + (tracing_stop_time): New global. + (tracing_user_name): New global. + (tracing_notes): New global. + (tracing_stop_note): New global. + (cmd_qtstart): Set traceframe_usage, start_time. + (stop_tracing): Set stop_time. + (cmd_qtstatus): Report additional status. + (cmd_qtp): New function. + (handle_tracepoint_query): Call it. + (cmd_qtnotes): New function. + (handle_tracepoint_general_set): Call it. + (get_timestamp): Rename from tsv_get_timestamp. + +2011-11-14 Stan Shebs <stan@codesourcery.com> + Kwok Cheung Yeung <kcy@codesourcery.com> + + * linux-x86-low.c (small_jump_insn): New. + (i386_install_fast_tracepoint_jump_pad): Add arguments for + trampoline and error message, build a trampoline and issue a small + jump instruction to it. + (x86_install_fast_tracepoint_jump_pad): Add arguments for + trampoline and error message. + (x86_get_min_fast_tracepoint_insn_len): New. + (the_low_target): Add call to x86_get_min_fast_tracepoint_insn_len. + * linux-low.h (struct linux_target_ops): Add arguments to + install_fast_tracepoint_jump_pad operation, add new operation. + * linux-low.c (linux_install_fast_tracepoint_jump_pad): Add + arguments. + (linux_get_min_fast_tracepoint_insn_len): New function. + (linux_target_op): Add new operation. + * tracepoint.c (gdb_trampoline_buffer): New IPA variable. + (gdb_trampoline_buffer_end): Ditto. + (gdb_trampoline_buffer_error): Ditto. + (struct ipa_sym_addresses): Add fields for new IPA variables. + (symbol_list): Add entries for new IPA variables. + (struct tracepoint): Add fields to hold the address range of the + trampoline used by the tracepoint. + (trampoline_buffer_head): New static variable. + (trampoline_buffer_tail): Ditto. + (claim_trampoline_space): New function. + (have_fast_tracepoint_trampoline_buffer): New function. + (clone_fast_tracepoint): Fill in trampoline fields of tracepoint + structure. + (install_fast_tracepoint): Ditto, also add error buffer argument. + (cmd_qtminftpilen): New function. + (handle_tracepoint_query): Add response to qTMinFTPILen packet. + (fast_tracepoint_from_trampoline_address): New function. + (fast_tracepoint_collecting): Handle trampoline as part of jump + pad space. + (set_trampoline_buffer_space): New function. + (initialize_tracepoint): Initialize new IPA variables. + * target.h (struct target_ops): Add arguments to + install_fast_tracepoint_jump_pad operation, add new + get_min_fast_tracepoint_insn_len operation. + (target_get_min_fast_tracepoint_insn_len): New. + (install_fast_tracepoint_jump_pad): Add arguments. + * server.h (IPA_BUFSIZ): Define. + * linux-i386-ipa.c: Include extra header files. + (initialize_fast_tracepoint_trampoline_buffer): New function. + (initialize_low_tracepoint): Call it. + * server.h (set_trampoline_buffer_space): Declare. + (claim_trampoline_space): Ditto. + (have_fast_tracepoint_trampoline_buffer): Ditto. + +2011-11-14 Yao Qi <yao@codesourcery.com> + + * server.c (handle_query): Handle InstallInTrace for qSupported. + * tracepoint.c (add_tracepoint): Sort list. + (install_tracepoint, download_tracepoint): New. + (cmd_qtdp): Call them to install and download tracepoints. + (sort_tracepoints): Removed. + (cmd_qtstart): Update. + +2011-11-14 Yao Qi <yao@codesourcery.com> + + * mem-break.c (inc_ref_fast_tracepoint_jump): New. + * mem-break.h: Declare. + * tracepoint.c (cmd_qtstart): Move some code to ... + (clone_fast_tracepoint, install_fast_tracepoint): ... here. + New. + (download_tracepoints): Move some code to ... + (download_tracepoint_1): ... here. New. + +2011-11-08 Yao Qi <yao@codesourcery.com> + + * remote-utils.c (relocate_instruction): A comment fix. + +2011-11-07 Joel Brobecker <brobecker@adacore.com> + + * win32-i386-low.c (dr_status_mirror, dr_control_mirror): Delete. + (i386_dr_low_get_control, i386_dr_low_get_status): Use + dr_status_mirror and dr_control_mirror from debug_reg_state. + (i386_dr_low_get_status): Use debug_reg_state.dr_status_mirror + (i386_initial_stuff): Remove use of deleted globals. + (i386_get_thread_context, i386_set_thread_context, + i386_thread_added): Use dr_status_mirror and dr_control_mirror + from debug_reg_state. + +2011-11-05 Yao Qi <yao@codesourcery.com> + + * tracepoint.c (gdb_collect): Loop over tracepoints of same + address as TPOINT's. + +2011-11-02 Stan Shebs <stan@codesourcery.com> + + * tracepoint.c (agent_mem_read_string): New function. + (eval_agent_expr): Call it for tracenz. + * server.c (handle_query): Report support for tracenz. + +2011-11-02 Yao Qi <yao@codesourcery.com> + + * tracepoint.c (cmd_qtstart): Remove unused local variables. + +2011-11-02 Yao Qi <yao@codesourcery.com> + + * target.h: Fix a typo in comment. + +2011-10-31 Pedro Alves <pedro@codesourcery.com> + + * mem-break.c (check_mem_write): Add `myaddr' parameter. Don't + clobber the breakpoints' shadows with fast tracepoint jumps. + * mem-break.h (check_mem_write): Add `myaddr' parameter. + * target.c (write_inferior_memory): Also pass MYADDR down to + check_mem_write. + +2011-10-07 Ulrich Weigand <ulrich.weigand@linaro.org> + + * configure.ac: Check support for personality routine. + * configure: Regenerate. + * config.in: Likewise. + * linux-low.c: Include <sys/personality.h>. + Define ADDR_NO_RANDOMIZE if necessary. + (linux_create_inferior): Disable address space randomization when + forking inferior, if requested. + (linux_supports_disable_randomization): New function. + (linux_target_ops): Install it. + * server.h (disable_randomization): Declare. + * server.c (disable_randomization): New global variable. + (handle_general_set): Handle QDisableRandomization. + (handle_query): Likewise for qSupported. + (main): Support --disable-randomization and --no-disable-randomization + command line arguments. + * target.h (struct target_ops): Add supports_disable_randomization. + (target_supports_disable_randomization): New macro. + +2011-09-29 Mike Frysinger <vapier@gentoo.org> + + * linux-low.c (target_loadseg): Add defined PTRACE_GETFDPIC to the + ifdef check. + [PT_GETDSBT] (target_loadmap): Wrap in a defined PT_GETDSBT check. + [!PT_GETDSBT] (target_loadmap): New definition. + (LINUX_LOADMAP, LINUX_LOADMAP_EXEC, LINUX_LOADMAP_INTERP): Define. + (linux_read_loadmap): Change PTRACE_GETDSBT_EXEC to + LINUX_LOADMAP_EXEC, PTRACE_GETDSBT_INTERP to LINUX_LOADMAP_INTERP, + and PT_GETDSBT to LINUX_LOADMAP. + [!PT_GETDSBT] (linux_read_loadmap): Define to NULL. + (linux_target_ops): Delete unnecessary ifdef PT_GETDSBT check. + +2011-09-21 Ulrich Weigand <ulrich.weigand@linaro.org> + + * linux-arm-low.c (struct arm_linux_hwbp_cap): Remove. + (arm_linux_hwbp_cap): New static variable. + (arm_linux_get_hwbp_cap): Replace by ... + (arm_linux_init_hwbp_cap): ... this new function. + (arm_linux_get_hw_breakpoint_count): Use arm_linux_hwbp_cap. + (arm_linux_get_hw_watchpoint_count): Likewise. + (arm_linux_get_hw_watchpoint_max_length): Likewise. + (arm_arch_setup): Call arm_linux_init_hwbp_cap. + (arm_prepare_to_resume): Use perror_with_name instead of error. + +2011-09-21 Ulrich Weigand <ulrich.weigand@linaro.org> + + * linux-arm-low.c: Include <signal.h>. + (PTRACE_GETHBPREGS, PTRACE_SETHBPREGS): Define if necessary. + (struct arm_linux_hwbp_cap): New data type. + (arm_hwbp_type, arm_hwbp_control_t): New typedefs. + (struct arm_linux_hw_breakpoint): New data type. + (MAX_BPTS, MAX_WPTS): Define. + (struct arch_process_info, struct arch_lwp_info): New data types. + (arm_linux_get_hwbp_cap): New function. + (arm_linux_get_hw_breakpoint_count): Likewise. + (arm_linux_get_hw_watchpoint_count): Likewise. + (arm_linux_get_hw_watchpoint_max_length): Likewise. + (arm_hwbp_control_initialize): Likewise. + (arm_hwbp_control_is_enabled): Likewise. + (arm_hwbp_control_is_initialized): Likewise. + (arm_hwbp_control_disable): Likewise. + (arm_linux_hw_breakpoint_equal): Likewise. + (arm_linux_hw_point_initialize): Likewise. + (struct update_registers_data): New data structure. + (update_registers_callback: New function. + (arm_insert_point): Likewise. + (arm_remove_point): Likewise. + (arm_stopped_by_watchpoint): Likewise. + (arm_stopped_data_address): Likewise. + (arm_new_process): Likewise. + (arm_new_thread): Likewise. + (arm_prepare_to_resume): Likewise. + (the_low_target): Register arm_insert_point, arm_remove_point, + arm_stopped_by_watchpoint, arm_stopped_data_address, arm_new_process, + arm_new_thread, and arm_prepare_to_resume. + +2011-09-15 Stan Shebs <stan@codesourcery.com> + + * server.h (struct emit_ops): Add compare-goto fields. + * tracepoint.c (gdb_agent_op_sizes): New table. + (emit_eq_goto): New function. + (emit_ne_goto): New function. + (emit_lt_goto): New function. + (emit_le_goto): New function. + (emit_gt_goto): New function. + (emit_ge_goto): New function. + (is_goto_target): New function. + (compile_bytecodes): Recognize special cases of compare-goto + combinations and call specialized emitters for them. + * linux-x86-low.c (amd64_emit_eq_goto): New function. + (amd64_emit_ne_goto): New function. + (amd64_emit_lt_goto): New function. + (amd64_emit_le_goto): New function. + (amd64_emit_gt_goto): New function. + (amd64_emit_ge_goto): New function. + (amd64_emit_ops): Add the new functions. + (i386_emit_eq_goto): New function. + (i386_emit_ne_goto): New function. + (i386_emit_lt_goto): New function. + (i386_emit_le_goto): New function. + (i386_emit_gt_goto): New function. + (i386_emit_ge_goto): New function. + (i386_emit_ops): Add the new functions. + +2011-09-08 Stan Shebs <stan@codesourcery.com> + + * linux-x86-low.c (i386_emit_prologue): Save %ebx. + (i386_emit_epilogue): Restore %ebx. + +2011-08-31 Jie Zhang <jzhang918@gmail.com> + + * server.c (step_thread): Remove definition. + (process_serial_event): Don't handle Hs. + * server.h (step_thread): Remove declaration. + * target.c (set_desired_inferior): Remove use of step_thread. + +2011-08-24 Luis Machado <lgustavo@codesourcery.com> + + * linux-low.c: Include linux-procfs.h. + (linux_attach_lwp_1): Update comments. + (linux_attach): Scan for existing threads when attaching to a + process that is the tgid. + * Makefile.in: Update dependencies. + +2011-08-24 Luis Machado <lgustavo@codesourcery.com> + + * configure.srv: Add linux-procfs.o dependencies. + +2011-08-14 Yao Qi <yao@codesourcery.com> + + * target.h (struct target_ops): Fix indent. + * win32-low.c (win32_target_ops): Fix comment. + +2011-08-14 Andrew Jenner <andrew@codesourcery.com> + Yao Qi <yao@codesourcery.com> + + * Makefile.in (clean): Remove tic6x-*.c files. + (linux-tic6x-low.o, tic6x-c62x-linux.o, tic6x-c64x-linux.o): New rules. + (tic6x-c64xp-linux.o, tic6x-c62x-linux.c, tic6x-c64x-linux.c): Likewise. + (tic6x-c64xp-linux.c): Likewise. + * configure.srv: Add support for tic6x-*-uclinux. + * linux-tic6x-low.c: New. + * linux-low.c (PT_TEXT_ADDR, PT_DATA_ADDR, PT_TEXT_END_ADDR): Define. + +2011-08-14 Andrew Stubbs <ams@codesourcery.com> + Yao Qi <yao@codesourcery.com> + + * target.h (struct target_ops): Add read_loadmap. + * linux-low.c (struct target_loadseg): New type. + (struct target_loadmap): New type. + (linux_read_loadmap): New function. + (linux_target_ops): Add linux_read_loadmap. + * server.c (handle_query): Support qXfer:fdpic:read packet. + * win32-low.c (win32_target_ops): Initialize field `read_loadmap' + to NULL. + +2011-08-05 Eli Zaretskii <eliz@gnu.org> + + * win32-low.c: Include <stdint.h>. + +2011-07-22 Pedro Alves <pedro@codesourcery.com> + + * i386-low.c (i386_insert_aligned_watchpoint): Don't pass the info + to the inferior here. + (i386_remove_aligned_watchpoint): Ditto. + (i386_handle_nonaligned_watchpoint): Return immediate on fail to + fit part of the watchpoint in the debug registers. + (i386_update_inferior_debug_regs): New. + (i386_low_insert_watchpoint): Work on a local mirror of the debug + registers, and only update the inferior on success. + (i386_low_remove_watchpoint): Ditto. + +2011-07-22 Kwok Cheung Yeung <kcy@codesourcery.com> + + * linux-low.c (compare_ints, unique, list_threads, show_process, + linux_core_of_thread): Delete. + (linux_target_ops): Change linux_core_of_thread to + linux_common_core_of_thread. + (linux_qxfer_osdata): Defer to linux_common_xfer_osdata. + * utils.c (malloc_failure): Change type of argument. + (xmalloc, xrealloc, xcalloc, xsnprintf): Delete. + * Makefile.in (SFILES): Add common/common-utils.c, common/xml-utils.c, + common/linux-osdata.c, common/ptid.c and common/buffer.c. + (OBS): Add xml-utils.o, common-utils.o, ptid.o and buffer.o. + (IPA_OBJS): Add common-utils-ipa.o. + (ptid_h, linux_osdata_h): New macros. + (server_h): Add common/common-utils.h, common/xml-utils.h, + common/buffer.h, common/gdb_assert.h, common/gdb_locale.h and + common/ptid.h. + (common-utils-ipa.o, common-utils.o, xml-utils.o, linux-osdata.o, + ptid.o, buffer.o): New rules. + (linux-low.o): Add common/linux-osdata.h as a dependency. + * configure.srv (srv_tgtobj): Add linux-osdata.o to Linux targets. + * configure.ac: Add AC_HEADER_DIRENT check. + * config.in: Regenerate. + * configure: Regenerate. + * remote-utils.c (xml_escape_text): Delete. + (buffer_grow, buffer_free, buffer_init, buffer_finish, + buffer_xml_printf): Move to common/buffer.c. + * server.c (main): Remove call to initialize_inferiors. + * server.h (struct ptid, ptid_t, minus_one_ptid, null_ptid, + ptid_build, pid_to_ptid, ptid_get_pid, ptid_get_lwp, ptid_get_tid, + ptid_equal, ptid_is_pid, initialize_inferiors, xml_escape_text, + internal_error, gdb_assert, gdb_assert_fail): Delete. + (struct buffer, buffer_grow, buffer_free, buffer_init, buffer_finish, + buffer_xml_printf, buffer_grow_str, buffer_grow_str0): Move to + common/buffer.h. + * inferiors.c (null_ptid, minus_one_ptid, ptid_build, pid_to_ptid, + ptid_get_pid, ptid_get_lwp, ptid_get_tid, ptid_equal, ptid_is_pid, + initialize_inferiors): Delete. + +2011-07-20 Pedro Alves <pedro@codesourcery.com> + + * tracepoint.c (tracepoint_look_up_symbols): Return upon the first + symbol error. + +2011-05-31 Pedro Alves <pedro@codesourcery.com> + + * linux-x86-low.c (i386_dr_low_get_addr): Fix off by one in + assertion. + * win32-i386-low.c (i386_dr_low_get_addr): Ditto. + +2011-05-26 Yao Qi <yao@codesourcery.com> + + * Makefile.in (thread-db.o): Track dependence to + common/gdb_thread_db.h. + * thread-db.c: include gdb_thread_db.h from right place. + +2011-05-16 Adrian Cornish <gnu@bluedreamer.com> + + * linux-i386-ipa.c (supply_static_tracepoint_registers): Pass + __FILE__ and __LINE__ to internal_error. + +2011-05-13 Doug Evans <dje@google.com> + + * thread-db.c (try_thread_db_load_from_sdir): New function. + (try_thread_db_load_from_dir): New function. + (thread_db_load_search): Handle $sdir, ignore $pdir. + Remove trying of system directories if search of + libthread-db-search-path fails, that is now done via $sdir. + +2011-05-12 Kwok Cheung Yeung <kcy@codesourcery.com> + + * server.c (handle_query): Add EnableDisableTracepoints to the list + of supported features. + * tracepoint.c (clear_installed_tracepoints): Uninstall disabled + tracepoints. + (cmd_qtenable_disable): New. + (cmd_qtstart): Install tracepoints even if disabled. + (handle_tracepoint_general_set): Add call to cmd_qtenable_disable on + receiving a QTEnable or QTDisable packet. + (gdb_collect): Skip data collection if fast tracepoint is disabled. + (ust_marker_to_static_tracepoint): Do not ignore disabled static + tracepoints. + (gdb_probe): Skip data collection if static tracepoint is disabled. + +2011-05-10 Doug Evans <dje@google.com> + + * thread-db.c (thread_db_handle_monitor_command): Handle elided path. + +2011-05-04 Doug Evans <dje@google.com> + + * linux-low.c (linux_join): Skip process lookup. + * spu-low.c (spu_join): Ditto. + * server.c (join_inferiors_callback): Delete. + (process_serial_event): For 'D' packet (detach) call join_inferior + directly. + +2011-05-04 Joseph Myers <joseph@codesourcery.com> + + * README: Don't mention xscale*-*-linux*. + * configure.srv (xscale*-*-linux*): Don't handle target. + +2011-04-27 Nathan Froyd <froydnj@codesourcery.com> + + * linux-x86-low.c (amd64_emit_const): Call memcpy instead of + casting pointers. + (amd64_emit_reg, amd64_emit_int_call_1, amd64_emit_void_call_2): + (i386_emit_const, i386_emit_reg, i386_emit_int_call_1): + (i386_emit_void_call_2): Likewise. + +2011-04-26 Yao Qi <yao@codesourcery.com> + + * linux-low.c: Move common macros to linux-ptrace.h. + Include linux-ptrace.h. + * Makefile.in (linux_ptrace_h): New. + (linux-low.o): Depends on linux-ptrace.h. + +2011-04-24 Jan Kratochvil <jan.kratochvil@redhat.com> + + * remote-utils.c (handle_accept_event): Close LISTEN_DESC only if + RUN_ONCE. Comment for the LISTEN_DESC delete_file_handler call. + (remote_prepare): New function with most of the TCP code from ... + (remote_open): ... here. Detect PORT here unconditionally. Move also + setting transport_is_reliable. + * server.c (run_once): New variable. + (gdbserver_usage): Document it. + (main): Set run_once for `--once'. Call remote_prepare. Exit after + the first run if RUN_ONCE. + * server.h (run_once, remote_prepare): New declarations. + +2011-04-19 Tom Tromey <tromey@redhat.com> + + * win32-low.c (handle_load_dll): Remove duplicate "the". + +2011-04-07 Pierre Muller <muller@ics.u-strasbg.fr> + + Remove support for old Cygwin 1.5 versions. + * win32-low.c (win32_create_inferior): Use new cygwin_path_list + function to avoid warning. + (win32_add_one_solib): Use cygwin_conv_path function to avoid + warning. + +2011-03-18 Pierre Muller <muller@ics.u-strasbg.fr> + + * gdbserver/server.h (Macro _): Define it if not available. + +2011-03-14 Michael Snyder <msnyder@vmware.com> + + * hostio.c (handle_close): Remove unnecessary null test. + +2011-03-10 Joel Brobecker <brobecker@adacore.com> + + * Makefile.in (maintainer-clean realclean distclean): Remove + "make ... subdir_do" command. + +2011-03-10 Michael Snyder <msnyder@vmware.com> + + * tracepoint.c (tracepoint_finish_step): Fix loop variable. + + * server.c (handle_v_run): Free alloced buffer on early return. + +2011-03-09 Yao Qi <yao@codesourcery.com> + + Revert: + 2011-03-04 Yao Qi <yao@codesourcery.com> + + * Makefile.in: Remove GNU make feature --directory. + + 2011-03-05 Yao Qi <yao@codesourcery.com> + + * Makefile.in (CLEANDIRS, REQUIRED_SUBDIRS): New variable. + (subdir_do): New make target. Copied from gdb/Makefile. + (maintainer-clean, realclean, distclean, clean): Call corresponding + make targets in common/Makefile. + + 2011-02-11 Yao Qi <yao@codesourcery.com> + + * configure.ac: Call AC_PROG_RANLIB. + * Makefile.in: Remove signals.o from OBS. Link libcommon.a. + * configure: Regenerate. + +2011-03-07 Jan Kratochvil <jan.kratochvil@redhat.com> + + * remote-utils.c (putpkt_binary_1): Calculate BUF2 size dynamically. + +2011-03-06 Yao Qi <yao@codesourcery.com> + + * Makefile.in (REQUIRED_SUBDIRS): Remove $(LIBCOMMON_DIR). + +2011-03-05 Yao Qi <yao@codesourcery.com> + + * Makefile.in (CLEANDIRS, REQUIRED_SUBDIRS): New variable. + (subdir_do): New make target. Copied from gdb/Makefile. + (maintainer-clean, realclean, distclean, clean): Call corresponding + make targets in common/Makefile. + +2011-03-04 Yao Qi <yao@codesourcery.com> + + * Makefile.in: Remove GNU make feature --directory. + +2011-03-04 Michael Snyder <msnyder@vmware.com> + + * server.c (queue_stop_reply): Call xmalloc not malloc. + +2011-03-02 Michael Snyder <msnyder@vmware.com> + + * linux-arm-low.c (arm_arch_setup): Replace malloc with xmalloc. + +2011-02-28 Michael Snyder <msnyder@vmware.com> + + * tracepoint.c (cmd_qtv): Discard unused value 'packet'. + (cmd_qtframe): Ditto. + (cmd_qtbuffer): Ditto. + (cmd_bigqtbuffer): Ditto. + + * utils.c (decimal2str): Initialize 'width' to nine, then + don't mess with it. + +2011-02-28 Ulrich Weigand <uweigand@de.ibm.com> + + * hostio.c (require_data): Free *data, not data. + +2011-02-28 Jan Kratochvil <jan.kratochvil@redhat.com> + + * hostio.c (require_data): Use free, not xfree. + +2011-02-27 Michael Snyder <msnyder@vmware.com> + + * server.c (handle_query): Discard unused value. + + * hostio.c (require_data): Free malloc memory before returning + error. + +2011-02-26 Michael Snyder <msnyder@vmware.com> + + * linux-low.c (list_threads): Call closedir for dirent. + +2011-02-27 Michael Snyder <msnyder@vmware.com> + + * i386-low.c (i386-length_and_rw_bits): Comment the fact that + a case statement falls through. + + * linux-low.c (linux_xfer_siginfo): Fix fencepost error. + + * linux-amd64-ipa.c (gdb_agent_get_raw_reg): Fix fencepost error + in comparison. + +2011-02-26 Michael Snyder <msnyder@vmware.com> + + * utils.c (decimal2str): Eliminate dead code and dead param. + (pulongest): Drop dead param from call to decimal2str. + (plongest): Ditto. + +2011-02-24 Joel Brobecker <brobecker@adacore.com> + + Revert the following patch (not approved yet): + 2011-02-21 Hui Zhu <teawater@gmail.com> + * tracepoint.c (tp_printf): New function. + (eval_agent_expr): Handle gdb_agent_op_printf. + +2011-02-21 Hui Zhu <teawater@gmail.com> + + * tracepoint.c (tp_printf): New function. + (eval_agent_expr): Handle gdb_agent_op_printf. + +2011-02-18 Tom Tromey <tromey@redhat.com> + + * Makefile.in (tracepoint-ipa.o): Depend on ax.def. + (tracepoint.o): Likewise. + * tracepoint.c (enum gdb_agent_op): Use ax.def. + (gdb_agent_op_names): Likewise. + +2011-02-18 Tom Tromey <tromey@redhat.com> + + * tracepoint.c (enum gdb_agent_op) <gdb_agent_op_pick, + gdb_agent_op_rot>: New constants. + (gdb_agent_op_names): Add pick and roll. + (eval_agent_expr) <gdb_agent_op_pick, gdb_agent_op_rot>: New + cases. + +2011-02-15 Jan Kratochvil <jan.kratochvil@redhat.com> + + * aclocal.m4: Regenerated with aclocal-1.11.1. + +2011-02-14 Pedro Alves <pedro@codesourcery.com> + + * server.c (handle_qxfer_traceframe_info): New. + (qxfer_packets): Register "traceframe-info". + (handle_query): Report support for qXfer:traceframe-info:read+. + * tracepoint.c (match_blocktype): New. + (traceframe_find_block_type): Rename to ... + (traceframe_walk_blocks): ... this. Add callback filter argument, + and use it. + (traceframe_find_block_type): New, reimplemented on top of + traceframe_walk_blocks. + (build_traceframe_info_xml): New. + (traceframe_read_info): New. + * server.h (traceframe_read_info): Declare. + +2011-02-11 Yao Qi <yao@codesourcery.com> + + * configure.ac: Call AC_PROG_RANLIB. + * Makefile.in: Remove signals.o from OBS. Link libcommon.a. + * configure: Regenerate. + +2011-02-07 Pedro Alves <pedro@codesourcery.com> + + * server.c (gdb_read_memory): Change return semantics to allow + partial transfers. + (handle_search_memory_1): Adjust. + (process_serial_event) <'m' packet>: Handle partial transfers. + * tracepoint.c (traceframe_read_mem): Handle partial transfers. + +2011-01-28 Pedro Alves <pedro@codesourcery.com> + + * regcache.c (init_register_cache): Initialize + regcache->register_status. + (free_register_cache): Release regcache->register_status. + (regcache_cpy): Copy register_status. + (registers_to_string): Print 'x's for unavailable registers. + (supply_register): Mark the register's status valid or + unavailable, depending on whether a buffer was passed in or not. + (supply_register_zeroed): New. + (supply_regblock): Mark the registers' status valid or + unavailable, depending on whether a buffer was passed in or not. + * regcache.h (REG_UNAVAILABLE, REG_VALID): New defines. + (struct regcache): New `register_status' field. + (supply_register_zeroed): Declare. + * i387-fp.c (i387_xsave_to_cache): Zero out registers using + supply_register_zeroed, rather than passing a NULL buffer to + supply_register. + * tracepoint.c (fetch_traceframe_registers): Update comment. + +2011-01-28 Pedro Alves <pedro@codesourcery.com> + + * i387-fp.c (i387_xsave_to_cache): Make passing NULL as register + buffer explicit. + +2011-01-25 Pedro Alves <pedro@codesourcery.com> + + * server.h (decode_xfer_write): Change prototype. + * remote-utils.c (decode_xfer_write): Remove `annex' parameter, + and don't extract the annex here. + * server.c (decode_xfer_read): Remove `annex' parameter, + and don't extract the annex here. + (decode_xfer): New. + (struct qxfer): New. + (handle_qxfer_auxv, handle_qxfer_features, handle_qxfer_libraries) + (handle_qxfer_osdata, handle_qxfer_siginfo, handle_qxfer_spu) + (handle_qxfer_statictrace): New functions, abstracted out from + handle_query, and made to use the struct qxfer interface. + (handle_threads_qxfer_proper): Rename to ... + (handle_qxfer_threads_proper): ... this. + (handle_threads_qxfer): Rename to ... + (handle_qxfer_threads): ... this. Adjust. + (qxfer_packets): New array. + (handle_qxfer): New function. + (handle_query): Use handle_qxfer. + +2011-01-05 Michael Snyder <msnyder@msnyder-server.eng.vmware.com> + + * gdbreplay.c: Shorten lines of >= 80 columns. + * linux-low.c: Ditto. + * linux-ppc-low.c: Ditto. + * linux-s390-low.c: Ditto. + * linux-sparc-low.c: Ditto. + * linux-x86-low.c: Ditto. + * linux-xtensa-low.c: Ditto. + * mem-break.c: Ditto. + * nto-low.c: Ditto. + * regcache.h: Ditto. + * remote-utils.c: Ditto. + * server.c: Ditto. + * server.h: Ditto. + * thread-db.c: Ditto. + * tracepoint.c: Ditto. + * utils.c: Ditto. + * win32-low.h: Ditto. + +2011-01-05 Joel Brobecker <brobecker@adacore.com> + + * gdbserver/configure.ac, gdbserver/gdbserver.1: Copyright year + update. + +2011-01-01 Joel Brobecker <brobecker@adacore.com> + + * server.c (gdbserver_version): Update copyright year in version + output. + * gdbreplay.c (gdbreplay_version): Ditto. + +2010-12-29 Jie Zhang <jie.zhang@analog.com> + + * configure.srv (bfin-*-*linux*): Handle Blackfin/Linux targets. + * linux-bfin-low.c: New file. + * linux-low.c: Define PT_TEXT_ADDR, PT_TEXT_END_ADDR, and + PT_DATA_ADDR for BFIN targets. + * Makefile.in (SFILES): Add linux-bfin-low.c. + (clean): Remove reg-bfin.c. + (linux-bfin-low.o, reg-bfin.o, reg-bfin.c): New targets. + * README: Mention supported Blackfin targets. + +2010-12-23 Mike Frysinger <vapier@gentoo.org> + + * .gitignore: New file. + +2010-11-16 Mike Frysinger <vapier@gentoo.org> + + * linux-low.c (linux_tracefork_child): Add char* cast to arg. + +2010-10-22 Jie Zhang <jie@codesourcery.com> + + * Makefile.in: Add FLAGS_TO_PASS variable. + (install): Remove dependency of install-only and recursively + invoke make for install-only. + +2010-10-04 Doug Evans <dje@google.com> + + * Makefile.in (uninstall): Use $(DESTDIR). + +2010-09-24 Pedro Alves <pedro@codesourcery.com> + + PR gdb/11842 + + * linux-x86-low.c (compat_siginfo_from_siginfo) + (siginfo_from_compat_siginfo): Also copy si_pid and si_uid when + si_code is < 0. Check for si_code == SI_TIMER before checking for + si_code < 0. + +2010-09-13 Joel Brobecker <brobecker@adacore.com> + + * lynx-i386-low.c: New file. + * configure.srv: Add handling of i[34567]86-*-lynxos* targets. + +2010-09-13 Joel Brobecker <brobecker@adacore.com> + + * lynx-low.c (ptrace_request_to_str): Remove handling for + request values that have been removed in LynxOS 5.x. + +2010-09-13 Joel Brobecker <brobecker@adacore.com> + + * lynx-low.c, lynx-ppc-loc.c: Include <sys/ptrace.h> instead of + <ptrace.h> + +2010-09-09 Nathan Sidwell <nathan@codesourcery.com> + + * configure.ac: Add --enable-inprocess-agent option. + * configure: Rebuilt. + +2010-09-06 Yao Qi <yao@codesourcery.com> + + * linux-low.c (linux_kill): Remove unused variable. + (linux_stabilize_threads): Likewise. + * server.c (start_inferior): Likewise. + (queue_stop_reply_callback): Likewise. + * tracepoint.c (do_action_at_tracepoint): Likewise. + +2010-09-06 Yao Qi <yao@codesourcery.com> + + * linux-low.c (maybe_move_out_of_jump_pad): Restore current_inferior + on return. + +2010-09-06 Jan Kratochvil <jan.kratochvil@redhat.com> + + * target.c (mywait) <TARGET_WAITKIND_EXITED>: Fix to use INTEGER. + +2010-09-06 Pedro Alves <pedro@codesourcery.com> + + * Makefile.in (install-only): Replace $IPA_DEPFILES with + "$(IPA_DEPFILES)". + +2010-09-01 Joel Brobecker <brobecker@adacore.com> + + * gdbserver/lynx-low.c, gdbserver/lynx-low.h, + gdbserver/lynx-ppc-low.c: New files. + * Makefile.in (lynx_low_h): New variable. + (lynx-low.o, lynx-ppc-low.o): New rules. + * configure.ac: On LynxOS, link with -lnetinet. + * configure.srv: Add handling of powerpc-*-lynxos* targets. + * configure: regenerate. + +2010-09-01 Joel Brobecker <brobecker@adacore.com> + + * Makefile.in (vasprintf.o, vsnprintf.o): New rules. + * configure.ac: Add check for vasprintf and vsnprintf. + * configure, config.in: Regenerate. + * server.h (vasprintf, vsnprintf): Add conditional declarations. + +2010-09-01 Joel Brobecker <brobecker@adacore.com> + + * gdbreplay.c: Move include of alloca.h up, next to include of + malloc.h. + * server.h: Add include of malloc.h. + * mem-break.c: Remove include of malloc.h. + * server.c, tracepoint.c, utils.c, win32-low.c: Likewise. + +2010-09-01 Joel Brobecker <brobecker@adacore.com> + + * Makefile.in (memmem.o): Build with -Wno-error. + +2010-09-01 Joel Brobecker <brobecker@adacore.com> + + * utils.c (xsnprintf): Make non-static. + * server.h: Add xsnprintf declaration. + * linux-low.c, nto-low.c, target.c, thread-db.c, tracepoint.c: + replace calls to snprintf by calls to xsnprintf throughout. + +2010-09-01 Joel Brobecker <brobecker@adacore.com> + + * configure.ac: Add configure check for alloca. + * configure, config.in: Regenerate. + * server.h: Include alloca.h if it exists. + * gdbreplay.c: Include alloca.h if it exists. + +2010-08-28 Pedro Alves <pedro@codesourcery.com> + + * linux-low.c (__SIGRTMIN): Define if not already defined. + (linux_create_inferior): Check for __ANDROID__ rather than + __SIGRTMIN. + (enqueue_one_deferred_signal): Don't requeue non-RT signals that + are already deferred. + (linux_wait_1): Check for __ANDROID__ rather than __SIGRTMIN. + (linux_resume_one_thread): Don't queue a SIGSTOP if the lwp is + stopped and already has a pending signal to report. + (proceed_one_lwp): : Don't queue a SIGSTOP if the lwp already has + a pending signal to report or is moving out of a jump pad. + (linux_init_signals): Check for __ANDROID__ rather than + __SIGRTMIN. + +2010-08-28 Pedro Alves <pedro@codesourcery.com> + + * linux-low.c (linux_stabilize_threads): Wrap debug output in a + debug_threads check. Avoid a linear search when not doing debug + output. + +2010-08-27 Pedro Alves <pedro@codesourcery.com> + + * event-loop.c (event_handle_func): Adjust to use gdb_fildes_t. + (struct gdb_event) <fd>: Change type to gdb_fildes_t. + (struct file_handler) <fd>: Change type to gdb_fildes_t. + (process_event): Change local fd's type to gdb_fildes_t. + (create_file_handler): Adjust prototype. + (delete_file_handler): Adjust prototype. + (handle_file_event): Adjust prototype. Use pfildes. + (create_file_event): Adjsut prototype. + * remote-utils.c (remote_desc, listen_desc): Change type to + gdb_fildes_t. + * server.h: New gdb_fildes_t typedef. + [USE_WIN32API]: Include winsock2.h. + (delete_file_handler, add_file_handler): Adjust prototypes. + (pfildes): Declare. + * utils.c (pfildes): New. + +2010-08-27 Pedro Alves <pedro@codesourcery.com> + + * configure.ac (build_warnings): Add -Wno-char-subscripts. + * configure: Regenerate. + +2010-08-27 Pedro Alves <pedro@codesourcery.com> + + * linux-low.c (linux_unprepare_to_access_memory): Rename to ... + (linux_done_accessing_memory): ... this. + (linux_target_ops): Adjust. + * linux-x86-low.c (x86_insert_point, x86_remove_point): Adjust. + * nto-low.c (nto_target_ops): Adjust comment. + * server.c (gdb_read_memory, gdb_write_memory): Adjust. + * spu-low.c (spu_target_ops): Adjust comment. + * target.h (target_ops): Rename unprepare_to_access_memory field + to done_accessing_memory. + (unprepare_to_access_memory): Rename to ... + (done_accessing_memory): ... this. + +2010-08-26 Pedro Alves <pedro@codesourcery.com> + + * linux-low.c (linux_prepare_to_access_memory): New. + (linux_unprepare_to_access_memory): New. + (linux_target_ops): Install them. + * server.c (read_memory): Rename to ... + (gdb_read_memory): ... this. Use + prepare_to_access_memory/prepare_to_access_memory. + (write_memory): Rename to ... + (gdb_write_memory): ... this. Use + prepare_to_access_memory/prepare_to_access_memory. + (handle_search_memory_1): Adjust. + (process_serial_event): Adjust. + * target.h (struct target_ops): New fields + prepare_to_access_memory and unprepare_to_access_memory. + (prepare_to_access_memory, unprepare_to_access_memory): New. + * linux-x86-low.c (x86_insert_point, x86_remove_point): Use + prepare_to_access_memory/prepare_to_access_memory. + * nto-low.c (nto_target_ops): Adjust. + * spu-low.c (spu_target_ops): Adjust. + * win32-low.c (win32_target_ops): Adjust. + +2010-08-26 Pedro Alves <pedro@codesourcery.com> + + * Makefile.in (WARN_CFLAGS): Get it from configure. + (WERROR_CFLAGS): New. + (INTERNAL_CFLAGS): Add WERROR_CFLAGS. + * configure.ac: Introduce --enable-werror, which adds -Werror to + the compiler command line. Enabled by default. Disable with + --disable-werror. Add -Wdeclaration-after-statement + Wpointer-arith and -Wformat-nonliteral to warning flags. + * configure: Regenerate. + +2010-08-26 Pedro Alves <pedro@codesourcery.com> + + * mem-break.c [HAVE_MALLOC_H]: Include malloc.h. + +2010-08-26 Pedro Alves <pedro@codesourcery.com> + + * gdbreplay.c (remote_error): New. + (gdbchar): New. + (expect): Use gdbchar. Check for error reading from GDB. + Clarify sync error output. + (play): Check for errors writing to GDB. + * linux-low.c (sigchld_handler): Really ignore `write' errors. + * remote-utils.c (getpkt): Check for errors writing to the remote + descriptor. + +2010-08-25 Pedro Alves <pedro@codesourcery.com> + + * linux-low.c (linux_wait_1): Move non-debugging code out of + `debug_threads' control. + +2010-08-25 Pedro Alves <pedro@codesourcery.com> + + * linux-low.c (linux_wait_1): Don't set last_status here. + * server.c (push_event, queue_stop_reply_callback): Assert we're + not pushing a TARGET_WAITKIND_IGNORE event. + (start_inferior, start_inferior, attach_inferior, handle_v_cont) + (myresume, handle_target_event): Set the thread's last_resume_kind + and last_status from the target returned status. + +2010-08-25 Pedro Alves <pedro@codesourcery.com> + + PR threads/10729 + + * linux-x86-low.c (update_debug_registers_callback): New. + (i386_dr_low_set_addr): Use it. + (i386_dr_low_get_addr): New. + (i386_dr_low_set_control): Use update_debug_registers_callback. + (i386_dr_low_get_control): New. + (i386_dr_low_get_status): Adjust. + * linux-low.c (linux_stop_lwp): New. + * linux-low.h (linux_stop_lwp): Declare. + + * i386-low.c (I386_DR_GET_RW_LEN): Take the dr7 contents as + argument instead of a i386_debug_reg_state. + (I386_DR_WATCH_HIT): Take the dr6 contents as argument instead of + a i386_debug_reg_state. + (i386_insert_aligned_watchpoint): Adjust. + (i386_remove_aligned_watchpoint): Adjust. + (i386_low_stopped_data_address): Read the debug registers from the + inferior instead of from the mirrors. + * i386-low.h (struct i386_debug_reg_state): Extend comment. + (i386_dr_low_get_addr): Declare. + (i386_dr_low_get_control): Declare. + (i386_dr_low_get_status): Change prototype. + + * win32-i386-low.c (dr_status_mirror, dr_control_mirror): New globals. + (i386_dr_low_get_addr): New. + (i386_dr_low_get_control): New. + (i386_dr_low_get_status): Adjust prototype. Return + dr_status_mirror. + (i386_initial_stuff): Clear dr_status_mirror and + dr_control_mirror. + (i386_get_thread_context): Adjust. + (i386_set_thread_context): Adjust. + (i386_thread_added): Adjust. + +2010-08-24 Pedro Alves <pedro@codesourcery.com> + + * linux-low.h (linux_thread_area): Delete declaration. + +2010-08-11 Thomas Schwinge <thomas@codesourcery.com> + + * linux-low.c (linux_wait_1): Correctly return the ptid of the child + after its termination. + +2010-08-09 Pedro Alves <pedro@codesourcery.com> + + * linux-low.c (gdb_wants_lwp_stopped): Delete. + (gdb_wants_all_stopped): Delete. + (linux_wait_1): Don't call them. + * server.c (handle_v_cont): Tag all threads as want-stopped. + (gdb_wants_thread_stopped): Fix comments. Tag the thread that + stopped as "client-wants-stopped". + +2010-07-31 Pedro Alves <pedro@codesourcery.com> + + * Makefile.in (signals_h): New. + (server_h): Depend on it. + (server.o): Don't depend on $(signals_def). + (signals.o): Depend on $(signals_def). + +2010-07-31 Jan Kratochvil <jan.kratochvil@redhat.com> + + * Makefile.in (signals_def): New. + (server_h): Append include/gdb/signals.h and signals_def. + (server.o): Append signals_def. + +2010-07-25 Jan Kratochvil <jan.kratochvil@redhat.com> + + * server.c (handle_target_event): Use target_signal_to_host for + resume_info.sig initialization. + * target.h (struct thread_resume) <sig>: New comment. + +2010-07-20 Ozkan Sezer <sezeroz@gmail.com> + + * server.c (handle_query): strcpy() the returned string from paddress() + instead of sprintf(). + * utils.c (paddress): Return phex_nz(). + +2010-07-07 Joel Brobecker <brobecker@adacore.com> + + * server.c (handle_v_cont): Call mourn_inferior if process + just exited. + (myresume): Likewise. + +2010-07-01 Pedro Alves <pedro@codesourcery.com> + + Static tracepoints, and integration with UST. + + * configure.ac: Handle --with-ust. substitute ustlibs and ustinc. + * mem-break.c (uninsert_all_breakpoints) + (reinsert_all_breakpoints): New. + * mem-break.h (reinsert_all_breakpoints, uninsert_all_breakpoints): + * tracepoint.c (ust_loaded, helper_thread_id, cmd_buf): New. + (gdb_agent_ust_loaded, helper_thread_id) + (gdb_agent_helper_thread_id): New macros. + (struct ipa_sym_addresses): Add addr_ust_loaded, + addr_helper_thread_id, addr_cmd_buf. + (symbol_list): Add ust_loaded, helper_thread_id, cmd_buf. + (in_process_agent_loaded_ust): New. + (write_e_ust_not_loaded): New. + (maybe_write_ipa_ust_not_loaded): New. + (struct collect_static_trace_data_action): New. + (enum tracepoint_type) <static_tracepoint>: New. + (struct tracepoint) <handle>: Mention static tracepoints. + (struct static_tracepoint_ctx): New. + (CMD_BUF_SIZE): New. + (add_tracepoint_action): Handle static tracepoint actions. + (unprobe_marker_at): New. + (clear_installed_tracepoints): Handle static tracepoints. + (cmd_qtdp): Handle static tracepoints. + (probe_marker_at): New. + (cmd_qtstart): Handle static tracepoints. + (response_tracepoint): Handle static tracepoints. + (cmd_qtfstm, cmd_qtsstm, cmd_qtstmat): New. + (handle_tracepoint_query): Handle qTfSTM, qTsSTM and qTSTMat. + (get_context_regcache): Handle static tracepoints. + (do_action_at_tracepoint): Handle static tracepoint actions. + (traceframe_find_block_type): Handle static trace data blocks. + (traceframe_read_sdata): New. + (download_tracepoints): Download static tracepoint actions. + [HAVE_UST] Include ust/ust.h, dlfcn.h, sys/socket.h, and sys/un.h. + (GDB_PROBE_NAME): New. + (ust_ops): New. + (GET_UST_SYM): New. + (USTF): New. + (dlsym_ust): New. + (ust_marker_to_static_tracepoint): New. + (gdb_probe): New. + (collect_ust_data_at_tracepoint): New. + (gdb_ust_probe): New. + (UNIX_PATH_MAX, SOCK_DIR): New. + (gdb_ust_connect_sync_socket): New. + (resume_thread, stop_thread): New. + (run_inferior_command): New. + (init_named_socket): New. + (gdb_ust_socket_init): New. + (cstr_to_hexstr): New. + (next_st): New. + (first_marker, next_marker): New. + (response_ust_marker): New. + (cmd_qtfstm, cmd_qtsstm): New. + (unprobe_marker_at, probe_marker_at): New. + (cmd_qtstmat, gdb_ust_thread): New. + (gdb_ust_init): New. + (initialize_tracepoint_ftlib): Call gdb_ust_init. + * linux-amd64-ipa.c [HAVE_UST]: Include ust/processor.h + (ST_REGENTRY): New. + (x86_64_st_collect_regmap): New. + (X86_64_NUM_ST_COLLECT_GREGS): New. + (AMD64_RIP_REGNUM): New. + (supply_static_tracepoint_registers): New. + * linux-i386-ipa.c [HAVE_UST]: Include ust/processor.h + (ST_REGENTRY): New. + (i386_st_collect_regmap): New. + (i386_NUM_ST_COLLECT_GREGS): New. + (supply_static_tracepoint_registers): New. + * server.c (handle_query): Handle qXfer:statictrace:read. + <qSupported>: Report support for StaticTracepoints, and + qXfer:statictrace:read features. + * server.h (traceframe_read_sdata) + (supply_static_tracepoint_registers): Declare. + * remote-utils.c (convert_int_to_ascii, hexchars, ishex, tohex) + (unpack_varlen_hex): Include in IPA build. + * Makefile.in (ustlibs, ustinc): New. + (IPA_OBJS): Add remote-utils-ipa.o. + ($(IPA_LIB)): Link -ldl and -lpthread. + (UST_CFLAGS): New. + (IPAGENT_CFLAGS): Add UST_CFLAGS. + * config.in, configure: Regenerate. + +2010-06-20 Ian Lance Taylor <iant@google.com> + Pedro Alves <pedro@codesourcery.com> + + * linux-x86-low.c (always_true): Delete. + (EMIT_ASM, EMIT_ASM32): Use an uncondition asm jmp instead of + trying to fool the compiler with always_true. + +2010-06-20 Pedro Alves <pedro@codesourcery.com> + + * tracepoint.c (condition_true_at_tracepoint): Don't run compiled + conditions in gdbserver. + +2010-06-19 Ulrich Weigand <uweigand@de.ibm.com> + + * spu-low.c (spu_read_memory): Wrap around local store limit. + (spu_write_memory): Likewise. + +2010-06-15 Pedro Alves <pedro@codesourcery.com> + + * linux-x86-low.c (amd64_emit_const, amd64_emit_void_call_2) + (i386_emit_const, i386_emit_void_call_2): Replace int64_t uses with + LONGEST uses. + * server.h (struct emit_ops): Replace int64_t uses with LONGEST + uses. + * tracepoint.c (emit_const, emit_void_call_2): Replace int64_t + uses with LONGEST uses. + +2010-06-14 Stan Shebs <stan@codesourcery.com> + Pedro Alves <pedro@codesourcery.com> + + Bytecode compiler. + + * linux-x86-low.c: Include limits.h. + (add_insns): New. + (always_true): New. + (EMIT_ASM): New. + (EMIT_ASM32): New. + (amd64_emit_prologue, amd64_emit_epilogue, amd64_emit_add) + (amd64_emit_sub, amd64_emit_mul, amd64_emit_lsh) + (amd64_emit_rsh_signed, amd64_emit_rsh_unsigned, amd64_emit_ext, + (amd64_emit_log_not, amd64_emit_bit_and, amd64_emit_bit_or) + (amd64_emit_bit_xor, amd64_emit_bit_not, amd64_emit_equal, + (amd64_emit_less_signed, amd64_emit_less_unsigned, amd64_emit_ref, + (amd64_emit_if_goto, amd64_emit_goto, amd64_write_goto_address) + (amd64_emit_const, amd64_emit_call, amd64_emit_reg) + (amd64_emit_pop, amd64_emit_stack_flush, amd64_emit_zero_ext) + (amd64_emit_swap, amd64_emit_stack_adjust, amd64_emit_int_call_1) + (amd64_emit_void_call_2): New. + (amd64_emit_ops): New. + (i386_emit_prologue, i386_emit_epilogue, i386_emit_add) + (i386_emit_sub,i386_emit_mul, i386_emit_lsh, i386_emit_rsh_signed) + (i386_emit_rsh_unsigned, i386_emit_ext, i386_emit_log_not) + (i386_emit_bit_and, i386_emit_bit_or, i386_emit_bit_xor) + (i386_emit_bit_not, i386_emit_equal, i386_emit_less_signed) + (i386_emit_less_unsigned, i386_emit_ref, i386_emit_if_goto) + (i386_emit_goto, i386_write_goto_address, i386_emit_const) + (i386_emit_call, i386_emit_reg, i386_emit_pop) + (i386_emit_stack_flush, i386_emit_zero_ext, i386_emit_swap) + (i386_emit_stack_adjust, i386_emit_int_call_1) + (i386_emit_void_call_2): New. + (i386_emit_ops): New. + (x86_emit_ops): New. + (the_low_target): Install x86_emit_ops. + * server.h (struct emit_ops): New. + (get_raw_reg_func_addr): Declare. + (current_insn_ptr, emit_error): Declare. + * tracepoint.c (get_raw_reg, get_trace_state_variable_value) + (set_trace_state_variable_value): New defines. + (struct ipa_sym_addresses): New fields addr_get_raw_reg, + addr_get_trace_state_variable_value and + addr_set_trace_state_variable_value. + (symbol_list): New fields for get_raw_reg, + get_trace_state_variable_value and set_trace_state_variable_value. + (condfn): New typedef. + (struct tracepoint): New field `compiled_cond'. + (do_action_at_tracepoint): Clear compiled_cond. + (get_trace_state_variable_value, set_trace_state_variable_value): + Export in the IPA. + (condition_true_at_tracepoint): If there's a compiled condition, + run that. + (current_insn_ptr, emit_error): New globals. + (struct bytecode_address): New. + (get_raw_reg_func_addr): New. + (emit_prologue, emit_epilogue, emit_add, emit_sub, emit_mul) + (emit_lsh, emit_rsh_signed, emit_rsh_unsigned, emit_ext) + (emit_log_not, emit_bit_and, emit_bit_or, emit_bit_xor) + (emit_bit_not, emit_equal, emit_less_signed, emit_less_unsigned) + (emit_ref, emit_if_goto, emit_goto, write_goto_address, emit_const) + (emit_reg, emit_pop, emit_stack_flush, emit_zero_ext, emit_swap) + (emit_stack_adjust, emit_int_call_1, emit_void_call_2): New. + (compile_tracepoint_condition, compile_bytecodes): New. + * target.h (emit_ops): Forward declare. + (struct target_ops): New field emit_ops. + (target_emit_ops): New. + * linux-amd64-ipa.c (gdb_agent_get_raw_reg): New. + * linux-i386-ipa.c (gdb_agent_get_raw_reg): New. + * linux-low.c (linux_emit_ops): New. + (linux_target_ops): Install it. + * linux-low.h (struct linux_target_ops): New field emit_ops. + +2010-06-14 Ulrich Weigand <uweigand@de.ibm.com> + + * linux-ppc-low.c (ppc_arch_setup): Use private regcache to test MSR. + * linux-s390-low.c (ppc_arch_setup): Use private regcache to test PSW. + +2010-06-01 Pedro Alves <pedro@codesourcery.com> + Stan Shebs <stan@codesourcery.com> + + * Makefile.in (IPA_DEPFILES, extra_libraries): New. + (all): Depend on $(extra_libraries). + (install-only): Install the IPA. + (IPA_OBJS, IPA_LIB): New. + (clean): Remove the IPA lib. + (IPAGENT_CFLAGS): New. + (tracepoint-ipa.o, utils-ipa.o, remote-utils-ipa.o) + (regcache-ipa.o, i386-linux-ipa.o, linux-i386-ipa.o) + (linux-amd64-ipa.o, amd64-linux-ipa.o): New rules. + * linux-amd64-ipa.c, linux-i386-ipa.c: New files. + * configure.ac: Check for atomic builtins support in the compiler. + (IPA_DEPFILES, extra_libraries): Define. + * configure.srv (ipa_obj): Add description. + (ipa_i386_linux_regobj, ipa_amd64_linux_regobj): Define. + (i[34567]86-*-linux*): Set ipa_obj. + (x86_64-*-linux*): Set ipa_obj. + * linux-low.c (stabilizing_threads): New. + (supports_fast_tracepoints): New. + (linux_detach): Stabilize threads before detaching. + (handle_tracepoints): Handle internal tracing breakpoints. Assert + the lwp is either not stabilizing, or is moving out of a jump pad. + (linux_fast_tracepoint_collecting): New. + (maybe_move_out_of_jump_pad): New. + (enqueue_one_deferred_signal): New. + (dequeue_one_deferred_signal): New. + (linux_wait_for_event_1): If moving out of a jump pad, defer + pending signals to later. + (linux_stabilize_threads): New. + (linux_wait_1): Check if threads need moving out of jump pads, and + do it if so. + (stuck_in_jump_pad_callback): New. + (move_out_of_jump_pad_callback): New. + (lwp_running): New. + (linux_resume_one_lwp): Handle moving out of jump pads. + (linux_set_resume_request): Dequeue deferred signals. + (need_step_over_p): Also step over fast tracepoint jumps. + (start_step_over): Also uninsert fast tracepoint jumps. + (finish_step_over): Also reinsert fast tracepoint jumps. + (linux_install_fast_tracepoint_jump): New. + (linux_target_ops): Install linux_stabilize_threads and + linux_install_fast_tracepoint_jump_pad. + * linux-low.h (linux_target_ops) <get_thread_area, + install_fast_tracepoint_jump_pad>: New fields. + (struct lwp_info) <collecting_fast_tracepoint, + pending_signals_to_report, exit_jump_pad_bkpt>: New fields. + (linux_get_thread_area): Declare. + * linux-x86-low.c (jump_insn): New. + (x86_get_thread_area): New. + (append_insns): New. + (push_opcode): New. + (amd64_install_fast_tracepoint_jump_pad): New. + (i386_install_fast_tracepoint_jump_pad): New. + (x86_install_fast_tracepoint_jump_pad): New. + (the_low_target): Install x86_get_thread_area and + x86_install_fast_tracepoint_jump_pad. + * mem-break.c (set_raw_breakpoint_at): Use read_inferior_memory. + (struct fast_tracepoint_jump): New. + (fast_tracepoint_jump_insn): New. + (fast_tracepoint_jump_shadow): New. + (find_fast_tracepoint_jump_at): New. + (fast_tracepoint_jump_here): New. + (delete_fast_tracepoint_jump): New. + (set_fast_tracepoint_jump): New. + (uninsert_fast_tracepoint_jumps_at): New. + (reinsert_fast_tracepoint_jumps_at): New. + (set_breakpoint_at): Use write_inferior_memory. + (uninsert_raw_breakpoint): Use write_inferior_memory. + (check_mem_read): Mask out fast tracepoint jumps. + (check_mem_write): Mask out fast tracepoint jumps. + * mem-break.h (struct fast_tracepoint_jump): Forward declare. + (set_fast_tracepoint_jump): Declare. + (delete_fast_tracepoint_jump) + (fast_tracepoint_jump_here, uninsert_fast_tracepoint_jumps_at) + (reinsert_fast_tracepoint_jumps_at): Declare. + * regcache.c: Don't compile many functions when building the + in-process agent library. + (init_register_cache) [IN_PROCESS_AGENT]: Don't allow allocating + the register buffer in the heap. + (free_register_cache): If the register buffer isn't owned by the + regcache, don't free it. + (set_register_cache) [IN_PROCESS_AGENT]: Don't re-alocate + pre-existing register caches. + * remote-utils.c (convert_int_to_ascii): Constify `from' parameter + type. + (convert_ascii_to_int): : Constify `from' parameter type. + (decode_M_packet, decode_X_packet): Replace the `to' parameter by + a `to_p' pointer to pointer parameter. If TO_P is NULL, malloc + the needed buffer in-place. + (relocate_instruction): New. + * server.c (handle_query) <qSymbols>: If the target supports + tracepoints, give it a chance of looking up symbols. Report + support for fast tracepoints. + (handle_status): Stabilize threads. + (process_serial_event): Adjust. + * server.h (struct fast_tracepoint_jump): Forward declare. + (struct process_info) <fast_tracepoint_jumps>: New field. + (convert_ascii_to_int, convert_int_to_ascii): Adjust. + (decode_X_packet, decode_M_packet): Adjust. + (relocate_instruction): Declare. + (in_process_agent_loaded): Declare. + (tracepoint_look_up_symbols): Declare. + (struct fast_tpoint_collect_status): Declare. + (fast_tracepoint_collecting): Declare. + (force_unlock_trace_buffer): Declare. + (handle_tracepoint_bkpts): Declare. + (initialize_low_tracepoint) + (supply_fast_tracepoint_registers) [IN_PROCESS_AGENT]: Declare. + * target.h (struct target_ops) <stabilize_threads, + install_fast_tracepoint_jump_pad>: New fields. + (stabilize_threads, install_fast_tracepoint_jump_pad): New. + * tracepoint.c [HAVE_MALLOC_H]: Include malloc.h. + [HAVE_STDINT_H]: Include stdint.h. + (trace_debug_1): Rename to ... + (trace_vdebug): ... this. + (trace_debug): Rename to ... + (trace_debug_1): ... this. Add `level' parameter. + (trace_debug): New. + (ATTR_USED, ATTR_NOINLINE): New. + (IP_AGENT_EXPORT): New. + (gdb_tp_heap_buffer, gdb_jump_pad_buffer, gdb_jump_pad_buffer_end) + (collecting, gdb_collect, stop_tracing, flush_trace_buffer) + (about_to_request_buffer_space, trace_buffer_is_full) + (stopping_tracepoint, expr_eval_result, error_tracepoint) + (tracepoints, tracing, trace_buffer_ctrl, trace_buffer_ctrl_curr) + (trace_buffer_lo, trace_buffer_hi, traceframe_read_count) + (traceframe_write_count, traceframes_created) + (trace_state_variables) + New renaming defines. + (struct ipa_sym_addresses): New. + (STRINGIZE_1, STRINGIZE, IPA_SYM): New. + (symbol_list): New. + (ipa_sym_addrs): New. + (all_tracepoint_symbols_looked_up): New. + (in_process_agent_loaded): New. + (write_e_ipa_not_loaded): New. + (maybe_write_ipa_not_loaded): New. + (tracepoint_look_up_symbols): New. + (debug_threads) [IN_PROCESS_AGENT]: New. + (read_inferior_memory) [IN_PROCESS_AGENT]: New. + (UNKNOWN_SIDE_EFFECTS): New. + (stop_tracing): New. + (flush_trace_buffer): New. + (stop_tracing_bkpt): New. + (flush_trace_buffer_bkpt): New. + (read_inferior_integer): New. + (read_inferior_uinteger): New. + (read_inferior_data_pointer): New. + (write_inferior_data_pointer): New. + (write_inferior_integer): New. + (write_inferior_uinteger): New. + (struct collect_static_trace_data_action): Delete. + (enum tracepoint_type): New. + (struct tracepoint) <type>: New field `type'. + <actions_str, step_actions, step_actions_str>: Only include in + GDBserver. + <orig_size, obj_addr_on_target, adjusted_insn_addr> + <adjusted_insn_addr_end, jump_pad, jump_pad_end>: New fields. + (tracepoints): Use IP_AGENT_EXPORT. + (last_tracepoint): Don't include in the IPA. + (stopping_tracepoint): Use IP_AGENT_EXPORT. + (trace_buffer_is_full): Use IP_AGENT_EXPORT. + (alloced_trace_state_variables): New. + (trace_state_variables): Use IP_AGENT_EXPORT. + (traceframe_t): Delete unused variable. + (circular_trace_buffer): Don't include in the IPA. + (trace_buffer_start): Delete. + (struct trace_buffer_control): New. + (trace_buffer_free): Delete. + (struct ipa_trace_buffer_control): New. + (GDBSERVER_FLUSH_COUNT_MASK, GDBSERVER_FLUSH_COUNT_MASK_PREV) + (GDBSERVER_FLUSH_COUNT_MASK_CURR, GDBSERVER_UPDATED_FLUSH_COUNT_BIT): + New. + (trace_buffer_ctrl): New. + (TRACE_BUFFER_CTRL_CURR): New. + (trace_buffer_start, trace_buffer_free, trace_buffer_end_free): + Reimplement as macros. + (trace_buffer_wrap): Delete. + (traceframe_write_count, traceframe_read_count) + (traceframes_created, tracing): Use IP_AGENT_EXPORT. + (struct tracepoint_hit_ctx) <type>: New field. + (struct fast_tracepoint_ctx): New. + (memory_barrier): New. + (cmpxchg): New. + (record_tracepoint_error): Update atomically in the IPA. + (clear_inferior_trace_buffer): New. + (about_to_request_buffer_space): New. + (trace_buffer_alloc): Handle GDBserver and inferior simulatenous + updating the same buffer. + (add_tracepoint): Default the tracepoint's type to trap + tracepoint, and orig_size to -1. + (get_trace_state_variable) [IN_PROCESS_AGENT]: Handle allocated + internal variables. + (create_trace_state_variable): New parameter `gdb'. Handle it. + (clear_installed_tracepoints): Clear fast tracepoint jumps. + (cmd_qtdp): Handle fast tracepoints. + (cmd_qtdv): Adjust. + (max_jump_pad_size): New. + (gdb_jump_pad_head): New. + (get_jump_space_head): New. + (claim_jump_space): New. + (sort_tracepoints): New. + (MAX_JUMP_SIZE): New. + (cmd_qtstart): Handle fast tracepoints. Sync tracepoints with the + IPA. + (stop_tracing) [IN_PROCESS_AGENT]: Don't include the tdisconnected + support. Upload fast traceframes, and delete internal IPA + breakpoints. + (stop_tracing_handler): New. + (flush_trace_buffer_handler): New. + (cmd_qtstop): Upload fast tracepoints. + (response_tracepoint): Handle fast tracepoints. + (tracepoint_finished_step): Upload fast traceframes. Set the + tracepoint hit context's tracepoint type. + (handle_tracepoint_bkpts): New. + (tracepoint_was_hit): Set the tracepoint hit context's tracepoint + type. Add comment about fast tracepoints. + (collect_data_at_tracepoint) [IN_PROCESS_AGENT]: Don't access the + non-existing action_str field. + (get_context_regcache): Handle fast tracepoints. + (do_action_at_tracepoint) [!IN_PROCESS_AGENT]: Don't write the PC + to the regcache. + (fast_tracepoint_from_jump_pad_address): New. + (fast_tracepoint_from_ipa_tpoint_address): New. + (collecting_t): New. + (force_unlock_trace_buffer): New. + (fast_tracepoint_collecting): New. + (collecting): New. + (gdb_collect): New. + (write_inferior_data_ptr): New. + (target_tp_heap): New. + (target_malloc): New. + (download_agent_expr): New. + (UALIGN): New. + (download_tracepoints): New. + (download_trace_state_variables): New. + (upload_fast_traceframes): New. + (IPA_FIRST_TRACEFRAME): New. + (IPA_NEXT_TRACEFRAME_1): New. + (IPA_NEXT_TRACEFRAME): New. + [IN_PROCESS_AGENT]: Include sys/mman.h and fcntl.h. + [IN_PROCESS_AGENT] (gdb_tp_heap_buffer, gdb_jump_pad_buffer) + (gdb_jump_pad_buffer_end): New. + [IN_PROCESS_AGENT] (initialize_tracepoint_ftlib): New. + (initialize_tracepoint): Adjust. + [IN_PROCESS_AGENT]: Allocate the IPA heap, and jump pad scratch + buffer. Initialize the low module. + * utils.c (PREFIX, TOOLNAME): New. + (malloc_failure): Use PREFIX. + (error): In the IPA, an error causes an exit. + (fatal, warning): Use PREFIX. + (internal_error): Use TOOLNAME. + (NUMCELLS): Increase to 10. + * configure, config.in: Regenerate. + +2010-06-01 Pedro Alves <pedro@codesourcery.com> + + * server.c (handle_query) <qSupported>: Do two passes over the + qSupported string to avoid nesting strtok. + +2010-05-28 Jan Kratochvil <jan.kratochvil@redhat.com> + + * Makefile.in (SFILES): Add $(srcdir)/proc-service.list. + (CDEPS): New. + * configure.ac (RDYNAMIC): New AC_MSG_CHECKING wrapping. Test also + -Wl,--dynamic-list. + * configure: Regenerate. + * proc-service.list: New. + +2010-05-28 Jan Kratochvil <jan.kratochvil@redhat.com> + + * linux-low.c (linux_core_of_thread): Fix crash on invalid CONTENT. + New comment. + +2010-05-26 Ozkan Sezer <sezeroz@gmail.com> + + * gdbreplay.c (remote_open): Check error return from socket() call by + its equality to -1 not by it being negative. + * remote-utils.c (remote_open): Likewise. + +2010-05-23 Pedro Alves <pedro@codesourcery.com> + + * config.h: Regenerate. + +2010-05-19 Maxim Kuvyrkov <maxim@codesourcery.com> + + * linux-m68k-low.c (ps_get_thread_area): Don't define if kernel + doesn't provide PTRACE_GET_THREAD_AREA. + +2010-05-19 Maxim Kuvyrkov <maxim@codesourcery.com> + + * linux-m68k-low.c: Include <asm/ptrace.h> + (ps_get_thread_area): Implement. + +2010-05-03 Doug Evans <dje@google.com> + + * event-loop.c (struct callback_event): New struct. + (callback_list): New global. + (append_callback_event, delete_callback_event): New functions. + (process_callback): New function. + (start_event_loop): Call it. + * remote-utils.c (NOT_SCHEDULED): Define. + (readchar_buf, readchar_bufcnt, readchar_bufp): New static globals, + moved out of readchar. + (readchar): Rewrite. Call reschedule before returning. + (reset_readchar): New function. + (remote_close): Call it. + (process_remaining, reschedule): New functions. + * server.h (callback_handler_func): New typedef. + (append_callback_event, delete_callback_event): Declare. + +2010-05-03 Pedro Alves <pedro@codesourcery.com> + + * proc-service.c (ps_pglobal_lookup): Use + thread_db_look_up_one_symbol. + * remote-utils.c (look_up_one_symbol): Add new `may_ask_gdb' + parameter. Use it instead of all_symbols_looked_up. + * server.h (struct process_info) <all_symbols_looked_up>: Delete + field. + (all_symbols_looked_up): Don't declare. + (look_up_one_symbol): Add new `may_ask_gdb' parameter. + * thread-db.c (struct thread_db) <all_symbols_looked_up>: New + field. + (thread_db_look_up_symbols): Adjust call to look_up_one_symbol. + Set all_symbols_looked_up here. + (thread_db_look_up_one_symbol): New. + (thread_db_get_tls_address): Adjust. + (thread_db_load_search, try_thread_db_load_1): Always allocate the + thread_db object on the heap, and tentatively set it in the + process structure. + (thread_db_init): Don't set all_symbols_looked_up here. + * linux-low.h (thread_db_look_up_one_symbol): Declare. + +2010-05-03 Pedro Alves <pedro@codesourcery.com> + + * linux-low.c (linux_kill, linux_detach): Adjust. + (status_pending_p_callback): Remove redundant statement. Check + for !TARGET_WAITIKIND_IGNORE, instead of + TARGET_WAITKIND_STOPPED. + (handle_tracepoints): Make sure LWP is locked. Adjust. + (linux_wait_for_event_1): Adjust. + (linux_cancel_breakpoints): New. + (unsuspend_one_lwp): New. + (unsuspend_all_lwps): New. + (linux_wait_1): If finishing a step-over, unsuspend all lwps. + (send_sigstop_callback): Change return type to int, add new + `except' parameter and handle it. + (suspend_and_send_sigstop_callback): New. + (stop_all_lwps): Add new `suspend' and `expect' parameters, and + pass them down. If SUSPEND, also increment the lwp's suspend + count. + (linux_resume_one_lwp): Add notice about resuming a suspended LWP. + (need_step_over_p): Don't consider suspended LWPs. + (start_step_over): Adjust. + (proceed_one_lwp): Change return type to int, add new `except' + parameter and handle it. + (unsuspend_and_proceed_one_lwp): New. + (proceed_all_lwps): Use find_inferior instead of + for_each_inferior. + (unstop_all_lwps): Add `unsuspend' parameter. If UNSUSPEND, them + also decrement the suspend count of LWPs. Pass `except' down, + instead of hacking its suspend count. + (linux_pause_all): Add `freeze' parameter. Adjust. + (linux_unpause_all): New. + (linux_target_ops): Install linux_unpause_all. + * server.c (handle_status): Adjust. + * target.h (struct target_ops): New fields `unpause_all' and + `cancel_breakpoints'. Add new parameter to `pause_all'. + (pause_all): Add new `freeze' parameter. + (unpause_all): New. + (cancel_breakpoints): New. + * tracepoint.c (clear_installed_tracepoints): Pause threads, and + cancel breakpoints. + (cmd_qtstart): Pause threads. + (stop_tracing): Pause threads, and cancel breakpoints. + * win32-low.c (win32_target_ops): Adjust. + +2010-05-03 Pedro Alves <pedro@codesourcery.com> + + * linux-low.c (linux_wait_for_event_1): Move passing the signal to + the inferior right away from here... + (linux_wait_1): ... to here, and adjust to check the thread's + last_resume_kind instead of the lwp's step or stop_expected flags. + +2010-05-02 Pedro Alves <pedro@codesourcery.com> + + * README: Use consistent `GDB' and `GDBserver' spellings. + +2010-05-02 Pedro Alves <pedro@codesourcery.com> + + * linux-low.c (linux_kill_one_lwp): Assume the lwp is stopped. + (linux_kill): Stop all lwps here. Don't delete the main lwp here. + (linux_detach_one_lwp): Assume the lwp is stopped. + (any_thread_of): Delete. + (linux_detach): Stop all lwps here. Don't blindly delete all + breakpoints. + (delete_lwp_callback): New. + (linux_mourn): Delete all lwps of the process that is gone. + (linux_wait_1): Don't delete the last lwp of the process here. + * mem-break.h (mark_breakpoints_out): Declare. + * mem-break.c (mark_breakpoints_out): New. + (free_all_breakpoints): Use it. + * server.c (handle_target_event): If the process is gone, mark + breakpoints out. + * thread-db.c (struct thread_db) <create_bp>: New field. + (thread_db_enable_reporting): Fix prototype. Store a thread event + breakpoint reference in the thread_db struct. + (thread_db_load_search): Clear the thread_db object. + (try_thread_db_load_1): Ditto. + (switch_to_process): New. + (disable_thread_event_reporting): Use it. + (remove_thread_event_breakpoints): New. + (thread_db_detach, thread_db_mourn): Use it. + +2010-05-01 Pedro Alves <pedro@codesourcery.com> + + * linux-low.c (linux_enable_event_reporting): New. + (linux_wait_for_event_1, handle_extended_wait): Use it. + +2010-04-30 Pedro Alves <pedro@codesourcery.com> + + * linux-low.c (linux_kill_one_lwp, linux_kill) + (linux_detach_one_lwp): Adjust to send_sigstop interface change. + (send_sigstop): Take an lwp_info as parameter instead. Queue a + SIGSTOP even if the LWP is stopped. + (send_sigstop_callback): New. + (stop_all_lwps): Use send_sigstop_callback instead. + (linux_resume_one_thread): Adjust. + (proceed_one_lwp): Still proceed an LWP that the client has + requested to stop, if we haven't reported it as stopped yet. Make + sure that LWPs the client want stopped, have a pending SIGSTOP. + +2010-04-26 Doug Evans <dje@google.com> + + * server.c (handle_general_set): Make static. + + * remote-utils.c (putpkt_binary_1): Call readchar instead of read. + Print received char after testing for error/eof instead of before. + (input_interrupt): Tweak comment. + +2010-04-23 Doug Evans <dje@google.com> + + * server.c (start_inferior): Print inferior argv if --debug. + +2010-04-21 Aleksandar Ristovski <aristovski@qnx.com> + + * Makefile.in (nto_low_h nto-low.o nto-x86-low.o): New dependency lists. + * nto-x86-low.c: Include server.h + +2010-04-20 Pierre Muller <muller@ics.u-strasbg.fr> + + * win32-i386-low.c: Use __x86_64__ macro instead of __x86_64 to + be consistent with other sources of this directory. + (init_registers_amd64): Correct name of source file of this function + in the comment. + +2010-04-19 Pierre Muller <muller@ics.u-strasbg.fr> + + * configure.srv (x86_64-*-mingw*): New configuration for Windows + 64-bit executables. + +2010-04-19 Pierre Muller <muller@ics.u-strasbg.fr> + + * win32-i386-low.c: Add 64-bit support. + (CONTEXT_EXTENDED_REGISTERS): Set macro to zero if not exisiting. + (init_registers_amd64): Declare. + (mappings): Add 64-bit version of array. + (init_windows_x86): New function. + (the_low_target): Change init_arch field to init_windows_x86. + +2010-04-19 Pierre Muller <muller@ics.u-strasbg.fr> + + * win32-low.c: Adapt to support also 64-bit architecture. + (child_xfer_memory): Use uintptr_t type for local variable `addr'. + (get_image_name): Use SIZE_T type for local variable `done'. + (psapi_get_dll_name): Use LPVOID type for parameter `BaseAddress'. + (toolhelp_get_dll_name): Idem. + (handle_load_dll): Use CORE_ADDR type for local variable `load_addr'. + Use uintptr_t typecast to avoid warning. + (handle_unload_dll): Use uintptr_t typecast to avoid warning. + (handle_exception): Use phex_nz to avoid warning. + (win32_wait): Remove unused local variable `process'. + +2010-04-19 Pierre Muller <muller@ics.u-strasbg.fr> + + * configure.srv (srv_amd64_regobj): Replace `x86-64-avx.o' by + `amd64-avx.o'. + +2010-04-17 Pierre Muller <muller@ics.u-strasbg.fr> + + * configure.ac: Use `ws2_32' library for srv_mingw. + * configure: Regenerate. + * gdbreplay.c: Include winsock2.h instead of winsock.h. + * remote-utils.c: Likewise. + +2010-04-17 H.J. Lu <hongjiu.lu@intel.com> + + * linux-x86-low.c (xmltarget_amd64_linux_no_xml): Define only + if __x86_64__ is defined. + +2010-04-16 Pierre Muller <muller@ics.u-strasbg.fr> + + * configure: Regenerate. + +2010-04-16 Pierre Muller <muller@ics.u-strasbg.fr> + + * server.c (handle_query): Handle 'qGetTIBAddr' query. + * target.h (target_ops): New get_tib_address field. + * win32-low.h (win32_thread_info): Add thread_local_base field. + * win32-low.c (child_add_thread): Add tlb argument. + Set thread_local_base field to TLB. + (get_child_debug_event): Adapt to child_add_thread change. + (win32_get_tib_address): New function. + (win32_target_ops): Set get_tib_address field to + win32_get_tib_address. + * linux-low.c (linux_target_ops): Set get_tib_address field to NULL. + +2010-04-12 Pedro Alves <pedro@codesourcery.com> + + * linux-low.c (linux_mourn): Also remove the process. + * server.c (handle_target_event): Don't remove the process here. + * nto-low.c (nto_mourn): New. + (nto_target_ops): Install it. + * spu-low.c (spu_mourn): New. + (spu_target_ops): Install it. + * win32-low.c (win32_mourn): New. + (win32_target_ops): Install it. + +2010-04-12 Pedro Alves <pedro@codesourcery.com> + + * server.h (buffer_xml_printf): Remove redundant `;'. + +2010-04-12 Pedro Alves <pedro@codesourcery.com> + + * regcache.c (set_register_cache): Invalidate regcaches before + changing the register cache layout. + (regcache_invalidate_one): Allow a NULL regcache. + * linux-x86-low.c (x86_linux_update_xmltarget): Invalidate + regcaches before changing the register cache layout or the target + regsets. + +2010-04-12 H.J. Lu <hongjiu.lu@intel.com> + + * linux-x86-low.c (x86_linux_update_xmltarget): Avoid unused + variable warning on Linux/x86-64. + +2010-04-11 Pedro Alves <pedro@codesourcery.com> + + GDBserver disconnected tracing support. + + * linux-low.c (linux_remove_process): Delete. + (add_lwp): Don't set last_resume_kind here. + (linux_kill): Use `mourn'. + (linux_detach): Use `thread_db_detach', and `mourn'. + (linux_mourn): New. + (linux_attach_lwp_1): Adjust comment. + (linux_attach): last_resume_kind moved the thread_info; adjust. + (status_pending_p_callback): Adjust. + (linux_wait_for_event_1): Adjust. + (count_events_callback, select_singlestep_lwp_callback) + (select_event_lwp_callback, cancel_breakpoints_callback) + (db_wants_lwp_stopped, linux_wait_1, need_step_over_p) + (proceed_one_lwp): Adjust. + (linux_async): Add debug output. + (linux_thread_stopped): New. + (linux_pause_all): New. + (linux_target_ops): Install linux_mourn, linux_thread_stopped and + linux_pause_all. + * linux-low.h (struct lwp_info): Delete last_resume_kind field. + (thread_db_free): Delete declaration. + (thread_db_detach, thread_db_mourn): Declare. + * thread-db.c (thread_db_init): Use thread_db_mourn. + (thread_db_free): Delete, split in two. + (disable_thread_event_reporting): New. + (thread_db_detach): New. + (thread_db_mourn): New. + + * server.h (struct thread_info) <last_resume_kind>: New field. + <attached>: Add comment. + <gdb_detached>: New field. + (handler_func): Change return type to int. + (handle_serial_event, handle_target_event): Ditto. + (gdb_connected): Declare. + (tracing): Delete. + (disconnected_tracing): Declare. + (stop_tracing): Declare. + + * server.c (handle_query) <qSupported>: Report support for + disconnected tracing. + (queue_stop_reply_callback): Account for running threads. + (gdb_wants_thread_stopped): New. + (gdb_wants_all_threads_stopped): New. + (gdb_reattached_process): New. + (handle_status): Clear the `gdb_detached' flag of all processes. + In all-stop, stop all threads. + (main): Be sure to leave tfind mode. Handle disconnected tracing. + (process_serial_event): If the remote connection breaks, or if an + exit was forced with "monitor exit", force an event loop exit. + Handle disconnected tracing on detach. + (handle_serial_event): Adjust. + (handle_target_event): If GDB isn't connected, forward events back + to the inferior, unless the last process exited, in which case, + exit gdbserver. Adjust interface. + + * remote-utils.c (remote_open): Don't block in accept. Instead + register an event loop source on the listen socket file + descriptor. Refactor bits into ... + (listen_desc): ... this new global. + (gdb_connected): ... this new function. + (enable_async_notification): ... this new function. + (handle_accept_event): ... this new function. + (remote_close): Clear remote_desc. + + * inferiors.c (add_thread): Set the new thread's last_resume_kind. + + * target.h (struct target_ops) <mourn, thread_stopped, pause_all>: + New fields. + (mourn_inferior): Define. + (target_process_qsupported): Avoid the dangling else problem. + (thread_stopped): Define. + (pause_all): Define. + (target_waitstatus_to_string): Declare. + * target.c (target_waitstatus_to_string): New. + + * tracepoint.c (tracing): Make extern. + (disconnected_tracing): New. + (stop_tracing): Make extern. Handle tracing stops due to GDB + disconnecting. + (cmd_qtdisconnected): New. + (cmd_qtstatus): Report disconnected tracing status in trace reply. + (handle_tracepoint_general_set): Handle QTDisconnected. + + * event-loop.c (event_handler_func): Change return type to int. + (process_event): Bail out if the event handler wants the event + loop to stop. + (handle_file_event): Ditto. + (start_event_loop): Bail out if the event handler wants the event + loop to stop. + + * nto-low.c (nto_target_ops): Adjust. + * spu-low.c (spu_wait): Don't remove the process here. + (spu_target_ops): Adjust. + * win32-low.c (win32_wait): Don't remove the process here. + (win32_target_ops): Adjust. + +2010-04-11 Pedro Alves <pedro@codesourcery.com> + + * regcache.c (realloc_register_cache): Invalidate inferior's + regcache before recreating it. + +2010-04-09 Pedro Alves <pedro@codesourcery.com> + + * tracepoint.c (cmd_qtstatus): Report trace buffer circularity. + +2010-04-09 Stan Shebs <stan@codesourcery.com> + Pedro Alves <pedro@codesourcery.com> + + * server.h (LONGEST): New. + (struct thread_info) <while_stepping>: New field. + (unpack_varlen_hex, xrealloc, pulongest, plongest, phex_nz): + Declare. + (initialize_tracepoint, handle_tracepoint_general_set) + (handle_tracepoint_query, tracepoint_finished_step) + (tracepoint_was_hit, release_while_stepping_state_list): + (current_traceframe): Declare. + * server.c (handle_general_set): Handle tracepoint packets. + (read_memory): New. + (write_memory): New. + (handle_search_memory_1): Use read_memory. + (handle_query): Report support for conditional tracepoints, trace + state variables, and tracepoint sources. Handle tracepoint + queries. + (main): Initialize the tracepoints module. + (process_serial_event): Handle traceframe reads/writes. + + * linux-low.c (handle_tracepoints): New. + (linux_wait_1): Call it. + (linux_resume_one_lwp): Handle while-stepping. + (linux_supports_tracepoints, linux_read_pc, linux_write_pc): New. + (linux_target_ops): Install them. + * linux-low.h (struct linux_target_ops) <supports_tracepoints>: + New field. + * linux-x86-low.c (x86_supports_tracepoints): New. + (the_low_target). Install it. + + * mem-break.h (delete_breakpoint): Declare. + * mem-break.c (delete_breakpoint): Make external. + + * target.h (struct target_ops): Add `supports_tracepoints', + `read_pc', and `write_pc' fields. + (target_supports_tracepoints): Define. + * utils.c (xrealloc, decimal2str, pulongest, plongest, thirty_two) + (phex_nz): New. + + * regcache.h (struct regcache) <registers_owned>: New field. + (init_register_cache, regcache_cpy): Declare. + (regcache_read_pc, regcache_write_pc): Declare. + (register_cache_size): Declare. + (supply_regblock): Declare. + * regcache.c (init_register_cache): New. + (new_register_cache): Use it. + (regcache_cpy): New. + (register_cache_size): New. + (supply_regblock): New. + (regcache_read_pc, regcache_write_pc): New. + + * tracepoint.c: New. + + * Makefile.in (OBS): Add tracepoint.o. + (tracepoint.o): New rule. + +2010-04-08 H.J. Lu <hongjiu.lu@intel.com> + + * Makefile.in (clean): Also remove i386-mmx.c i386-mmx-linux.c. + (i386-mmx.o): New. + (i386-mmx.c): Likewise. + (i386-mmx-linux.o): Likewise. + (i386-mmx-linux.c): Likewise. + + * configure.srv (srv_i386_regobj): Add i386-mmx.o. + (srv_i386_linux_regobj): Add i386-mmx-linux.o. + (srv_i386_xmlfiles): Add i386/i386-mmx.xml. + (srv_i386_linux_xmlfiles): Add i386/i386-mmx-linux.xml. + + * linux-x86-low.c (init_registers_i386_mmx_linux): New. + (x86_linux_update_xmltarget): Call init_registers_i386_mmx_linux + and return if ptrace PTRACE_GETFPXREGS failed in 32bit. + +2010-04-07 H.J. Lu <hongjiu.lu@intel.com> + + * Makefile.in (clean): Updated. + (i386-avx.o): New. + (i386-avx.c): Likewise. + (i386-avx-linux.o): Likewise. + (i386-avx-linux.c): Likewise. + (amd64-avx.o): Likewise. + (amd64-avx.c): Likewise. + (amd64-avx-linux.o): Likewise. + (amd64-avx-linux.c): Likewise. + + * configure.srv (srv_i386_regobj): Add i386-avx.o. + (srv_i386_linux_regobj): Add i386-avx-linux.o. + (srv_amd64_regobj): Add amd64-avx.o. + (srv_amd64_linux_regobj): Add amd64-avx-linux.o. + (srv_i386_32bit_xmlfiles): Add i386/32bit-avx.xml. + (srv_i386_64bit_xmlfiles): Add i386/64bit-avx.xml. + (srv_i386_xmlfiles): Add i386/i386-avx.xml. + (srv_amd64_xmlfiles): Add i386/amd64-avx.xml. + (srv_i386_linux_xmlfiles): Add i386/i386-avx-linux.xml. + (srv_amd64_linux_xmlfiles): Add i386/amd64-avx-linux.xml. + + * i387-fp.c: Include "i386-xstate.h". + (i387_xsave): New. + (i387_cache_to_xsave): Likewise. + (i387_xsave_to_cache): Likewise. + (x86_xcr0): Likewise. + + * i387-fp.h (i387_cache_to_xsave): Likewise. + (i387_xsave_to_cache): Likewise. + (x86_xcr0): Likewise. + + * linux-arm-low.c (target_regsets): Initialize nt_type to 0. + * linux-crisv32-low.c (target_regsets): Likewise. + * linux-m68k-low.c (target_regsets): Likewise. + * linux-mips-low.c (target_regsets): Likewise. + * linux-ppc-low.c (target_regsets): Likewise. + * linux-s390-low.c (target_regsets): Likewise. + * linux-sh-low.c (target_regsets): Likewise. + * linux-sparc-low.c (target_regsets): Likewise. + * linux-xtensa-low.c (target_regsets): Likewise. + + * linux-low.c: Include <sys/uio.h>. + (regsets_fetch_inferior_registers): Support nt_type. + (regsets_store_inferior_registers): Likewise. + (linux_process_qsupported): New. + (linux_target_ops): Add linux_process_qsupported. + + * linux-low.h (regset_info): Add nt_type. + (linux_target_ops): Add process_qsupported. + + * linux-x86-low.c: Include "i386-xstate.h", "elf/common.h" + and <sys/uio.h>. + (init_registers_i386_avx_linux): New. + (init_registers_amd64_avx_linux): Likewise. + (xmltarget_i386_linux_no_xml): Likewise. + (xmltarget_amd64_linux_no_xml): Likewise. + (PTRACE_GETREGSET): Likewise. + (PTRACE_SETREGSET): Likewise. + (x86_fill_xstateregset): Likewise. + (x86_store_xstateregset): Likewise. + (use_xml): Likewise. + (x86_linux_update_xmltarget): Likewise. + (x86_linux_process_qsupported): Likewise. + (target_regsets): Add NT_X86_XSTATE entry and Initialize nt_type. + (x86_arch_setup): Don't call init_registers_amd64_linux nor + init_registers_i386_linux here. Call + x86_linux_update_xmltarget. + (the_low_target): Add x86_linux_process_qsupported. + + * server.c (handle_query): Call target_process_qsupported. + + * target.h (target_ops): Add process_qsupported. + (target_process_qsupported): New. + +2010-04-03 Pedro Alves <pedro@codesourcery.com> + + * inferiors.c (add_thread): Set last_status kind to + TARGET_WAITKIND_IGNORE. + * linux-low.c (cancel_breakpoint): Remove unnecessary regcache + fetch. Use ptid_of. Avoid unnecessary get_lwp_thread calls. + (linux_wait_1): Move `thread' local definition to block that uses + it. Don't NULL initialize `event_child'. + (linux_resume_one_thread): Avoid unnecessary get_lwp_thread calls. + Alway set the thread's last_status to TARGET_WAITKIND_IGNORE. + * linux-x86-low.c (x86_breakpoint_at): Read raw memory. + +2010-04-01 Pedro Alves <pedro@codesourcery.com> + + * linux-low.c (get_stop_pc): Don't adjust the PC if stopped with + an extended waitstatus, or by a watchpoint. + (cancel_breakpoints_callback): Don't cancel a breakpoint if the + thread was stepping or has been stopped by a watchpoint. + +2010-04-01 Pedro Alves <pedro@codesourcery.com> + + * mem-break.c (struct raw_breakpoint): New field shlib_disabled. + (set_gdb_breakpoint_at): If GDB is inserting a breakpoint on top + of another, then delete the previous, and validate all + breakpoints. + (validate_inserted_breakpoint): New. + (delete_disabled_breakpoints): New. + (validate_breakpoints): New. + (check_mem_read): Validate breakpoints before trusting their + shadow. Delete disabled breakpoints. + (check_mem_write): Validate breakpoints before trusting they + should be inserted. Delete disabled breakpoints. + * mem-break.h (validate_breakpoints): + * server.c (handle_query): Validate breakpoints when we see a + qSymbol query. + +2010-04-01 Pedro Alves <pedro@codesourcery.com> + + * linux-low.c (linux_wait_1): Avoid setting need_step_over is + there's a GDB breakpoint at stop_pc. Always report a trap to GDB + if we could tell there's a GDB breakpoint at stop_pc. + (need_step_over_p): Don't do a step over if we find a GDB + breakpoint at the resume PC. + + * mem-break.c (struct raw_breakpoint): New. + (enum bkpt_type): New type `gdb_breakpoint'. + (struct breakpoint): Delete the `PC', `old_data' and `inserted' + fields. New field `raw'. + (find_raw_breakpoint_at): New. + (set_raw_breakpoint_at): Handle refcounting. Create a raw + breakpoint instead. + (set_breakpoint_at): Adjust. + (delete_raw_breakpoint): New. + (release_breakpoint): New. + (delete_breakpoint): Rename to... + (delete_breakpoint_1): ... this. Add proc parameter. Use + release_breakpoint. Return ENOENT. + (delete_breakpoint): Reimplement. + (find_breakpoint_at): Delete. + (find_gdb_breakpoint_at): New. + (delete_breakpoint_at): Delete. + (set_gdb_breakpoint_at): New. + (delete_gdb_breakpoint_at): New. + (gdb_breakpoint_here): New. + (set_reinsert_breakpoint): Use release_breakpoint. + (uninsert_breakpoint): Rename to ... + (uninsert_raw_breakpoint): ... this. + (uninsert_breakpoints_at): Adjust to handle raw breakpoints. + (reinsert_raw_breakpoint): Change parameter type to + raw_breakpoint. + (reinsert_breakpoints_at): Adjust to handle raw breakpoints + instead. + (check_breakpoints): Adjust. Use release_breakpoint. + (breakpoint_here): Rewrite using find_raw_breakpoint_at. + (breakpoint_inserted_here): Ditto. + (check_mem_read): Adjust to iterate over raw breakpoints instead. + Don't trust the breakpoint's shadow if it is not inserted. + (check_mem_write): Adjust to iterate over raw breakpoints instead. + (delete_all_breakpoints): Adjust. + (free_all_breakpoints): Mark all breakpoints as uninserted, and + use delete_breakpoint_1. + + * mem-break.h (breakpoints_supported): Delete declaration. + (set_gdb_breakpoint_at): Declare. + (gdb_breakpoint_here): Declare. + (delete_breakpoint_at): Delete. + (delete_gdb_breakpoint_at): Declare. + + * server.h (struct raw_breakpoint): Forward declare. + (struct process_info): New field `raw_breakpoints'. + + * linux-x86-low.c (x86_insert_point, x86_remote_point): Handle Z0 + breakpoints. + +2010-03-24 Pedro Alves <pedro@codesourcery.com> + + * linux-low.c (status_pending_p_callback): Fix comment. + (linux_wait_for_event_1): Move most of the internal breakpoint + handling from here... + (linux_wait_1): ... to here. + (count_events_callback): New. + (select_singlestep_lwp_callback): New. + (select_event_lwp_callback): New. + (cancel_breakpoints_callback): New. + (select_event_lwp): New. + (linux_wait_1): Simplify internal breakpoint handling. Give equal + priority to all LWPs that have had events that should be reported + to the client. Cancel breakpoints when about to reporting the + event to the client, not while stopping lwps. No longer cancel + finished single-steps here. + (cancel_finished_single_step): Delete. + (cancel_finished_single_steps): Delete. + +2010-03-24 Pedro Alves <pedro@codesourcery.com> + + * mem-break.c (enum bkpt_type): New. + (struct breakpoint): New field `type'. + (set_breakpoint_at): Change return type to struct breakpoint + pointer. Set type to `other_breakpoint' by default. + (delete_breakpoint): Rewrite, supporting more than one breakpoint + in the breakpoint list. + (delete_reinsert_breakpoints): Only delete reinsert breakpoints. + (reinsert_breakpoint): Rename to ... + (reinsert_raw_breakpoint): ... this. + (reinsert_breakpoints_at): Adjust. + * mem-break.h (struct breakpoint): Declare. + (set_breakpoint_at): Change return type to struct breakpoint + pointer. + +2010-03-24 Pedro Alves <pedro@codesourcery.com> + + * server.c (handle_query): Assign, not compare. + +2010-03-24 Pedro Alves <pedro@codesourcery.com> + + Teach linux gdbserver to step-over-breakpoints. + + * linux-low.c (can_hardware_single_step): New. + (supports_breakpoints): New. + (handle_extended_wait): If stopping threads, read the stop pc of + the new cloned LWP. + (get_pc): New. + (get_stop_pc): Add `lwp' parameter. Handle it. Bail out if the + low target doesn't support retrieving the PC. + (add_lwp): Set last_resume_kind to resume_continue. + (linux_attach_lwp_1): Adjust comments. Always set stop_expected. + (linux_attach): Don't clear stop_expected. Set the lwp's + last_resume_kind to resume_stop. + (linux_detach_one_lwp): Don't check for removed breakpoints. + (check_removed_breakpoint): Delete. + (status_pending_p): Rename to ... + (status_pending_p_callback): ... this. Don't check for removed + breakpoints. Don't consider threads that are stopped from GDB's + perspective. + (linux_wait_for_lwp): Always read the stop_pc here. + (cancel_breakpoint): New. + (step_over_bkpt): New global. + (linux_wait_for_event_1): Implement stepping over breakpoints. + (gdb_wants_lwp_stopped): New. + (gdb_wants_all_stopped): New. + (linux_wait_1): Tag threads as gdb-wants-stopped. Cancel finished + single-step traps here. Store the thread's last reported target + wait status. + (send_sigstop): Don't clear stop_expected. Always set it, + instead. + (mark_lwp_dead): Remove reference to pending_is_breakpoint. + (cancel_finished_single_step): New. + (cancel_finished_single_steps): New. + (wait_for_sigstop): Don't cancel finished single-step traps here. + (linux_resume_one_lwp): Don't check for removed breakpoints. + Don't set `step' on non-hardware step archs. + (linux_set_resume_request): Ignore resume_stop requests if already + stopping or stopped. Set the lwp's last_resume_kind. + (resume_status_pending_p): Don't check for removed breakpoints. + (need_step_over_p): New. + (start_step_over): New. + (finish_step_over): New. + (linux_resume_one_thread): Always queue a sigstop for resume_stop + requests. Clear the thread's last reported target waitstatus. + Don't use the `suspended' flag. Don't consider pending breakpoints. + (linux_resume): Start a step-over if necessary. + (proceed_one_lwp): New. + (proceed_all_lwps): New. + (unstop_all_lwps): New. + * linux-low.h (struct lwp_info): Rewrite comment for the + `suspended' flag. Add the `stop_pc' field. Delete the + `pending_stop_pc' field. Tweak the `stepping' flag's comment. + Add `'last_resume_kind' and `need_step_over' fields. + * inferiors.c (struct thread_info): Delete, moved elsewhere. + * mem-break.c (struct breakpoint): Delete `reinserting' flag. + Delete `breakpoint_to_reinsert' field. New flag `inserted'. + (set_raw_breakpoint_at): New. + (set_breakpoint_at): Rewrite to use it. + (reinsert_breakpoint_handler): Delete. + (set_reinsert_breakpoint): New. + (reinsert_breakpoint_by_bp): Delete. + (delete_reinsert_breakpoints): New. + (uninsert_breakpoint): Rewrite. + (uninsert_breakpoints_at): New. + (reinsert_breakpoint): Rewrite. + (reinsert_breakpoints_at): New. + (check_breakpoints): Rewrite. + (breakpoint_here): New. + (breakpoint_inserted_here): New. + (check_mem_read): Adjust. + * mem-break.h (breakpoints_supported, breakpoint_here) + (breakpoint_inserted_here, set_reinsert_breakpoint): Declare. + (reinsert_breakpoint_by_bp): Delete declaration. + (delete_reinsert_breakpoints): Declare. + (reinsert_breakpoint): Delete declaration. + (reinsert_breakpoints_at): Declare. + (uninsert_breakpoint): Delete declaration. + (uninsert_breakpoints_at): Declare. + (check_breakpoints): Adjust prototype. + * server.h: Adjust include order. + (struct thread_info): Declare here. Add a `last_status' field. + +2010-03-23 Michael Snyder <msnyder@vmware.com> + + * server.c (crc32): New function. + (handle_query): Add handling for 'qCRC:' request. + +2010-03-23 Pedro Alves <pedro@codesourcery.com> + + * linux-x86-low.c (x86_linux_prepare_to_resume): Clear DR6 if the + lwp had been stopped by a watchpoint. + +2010-03-16 Pedro Alves <pedro@codesourcery.com> + + * server.h (internal_error): Declare. + (gdb_assert, ASSERT_FUNCTION, gdb_assert_fail): Define. + * utils.c (internal_error): New function. + +2010-03-15 Andreas Schwab <schwab@redhat.com> + + * configure.srv: Fix typo setting srv_regobj. + +2010-03-15 Pedro Alves <pedro@codesourcery.com> + + * linux-low.c (fetch_register): Avoid passing a non string literal + format to `error'. + (usr_store_inferior_registers): Ditto. + +2010-03-14 Pedro Alves <pedro@codesourcery.com> + + * linux-low.c (linux_write_memory): Bail out early if peeking + memory failed. + +2010-03-14 Pedro Alves <pedro@codesourcery.com> + + * linux-low.h (struct lwp_info): New fields + `stopped_by_watchpoint' and `stopped_data_address'. + * linux-low.c (linux_wait_for_lwp): Check for watchpoint triggers + here, and cache them in the lwp object. + (wait_for_sigstop): Check stopped_by_watchpoint lwp field + directly. + (linux_resume_one_lwp): Clear the lwp's stopped_by_watchpoint + field. + (linux_stopped_by_watchpoint): Rewrite. + (linux_stopped_data_address): Rewrite. + +2010-03-06 Simo Melenius <simo.melenius@iki.fi> + + * linux-low.c (linux_wait_for_lwp): Fetch the regcache after + switching the current inferior, not before. + +2010-03-01 H.J. Lu <hongjiu.lu@intel.com> + + * Makefile.in (clean): Replace reg-i386.c, reg-x86-64.c, + reg-i386-linux.c and reg-x86-64-linux.c with i386.c, amd64.c, + i386-linux.c and amd64-linux.c. + (reg-i386.o): Removed. + (reg-i386.c): Likewise. + (reg-i386-linux.o): Likewise. + (reg-i386-linux.c): Likewise. + (reg-x86-64.o): Likewise. + (reg-x86-64.c): Likewise. + (reg-x86-64-linux.o): Likewise. + (reg-x86-64-linux.c): Likewise. + (i386.o): New. + (i386.c): Likewise. + (i386-linux.o): Likewise. + (i386-linux.c): Likewise. + (amd64.o): Likewise. + (amd64.c): Likewise. + (amd64-linux.o): Likewise. + (amd64-linux.c): Likewise. + + * configure.srv (srv_i386_regobj): New. + (srv_i386_linux_regobj): Likewise. + (srv_amd64_regobj): Likewise. + (srv_amd64_linux_regobj): Likewise. + (srv_i386_32bit_xmlfiles): Likewise. + (srv_i386_64bit_xmlfiles): Likewise. + (srv_i386_xmlfiles): Likewise. + (srv_amd64_xmlfiles): Likewise. + (srv_i386_linux_xmlfiles): Likewise. + (srv_amd64_linux_xmlfiles): Likewise. + (i[34567]86-*-cygwin*): Set srv_regobj to $srv_i386_regobj. Set + srv_xmlfiles to $srv_i386_xmlfiles. + (i[34567]86-*-mingw32ce*): Likewise. + (i[34567]86-*-mingw*): Likewise. + (i[34567]86-*-nto*): Likewise. + (i[34567]86-*-linux*): Set srv_regobj to $srv_i386_linux_regobj + and $srv_amd64_linux_regobj. Set srv_xmlfiles to + $srv_i386_linux_xmlfiles and $srv_amd64_linux_xmlfiles. + (x86_64-*-linux*): Likewise. + + * linux-x86-low.c (init_registers_x86_64_linux): Removed. + (init_registers_amd64_linux): New. + (x86_arch_setup): Replace init_registers_x86_64_linux with + init_registers_amd64_linux. + +2010-02-23 Maxim Kuvyrkov <maxim@codesourcery.com> + + * configure.ac: Check for libdl. If it is not available link against + static libthread_db. + * configure: Regenerate. + +2010-02-22 Pedro Alves <pedro@codesourcery.com> + + PR9605 + + * i386-low.c (i386_length_and_rw_bits): Throw a fatal error if + handing a read watchpoint. + (i386_low_insert_watchpoint): Read watchpoints aren't supported. + +2010-02-12 Doug Evans <dje@google.com> + + * linux-low.c (linux_supports_tracefork_flag): Document. + (linux_look_up_symbols): Add comment. + +2010-02-03 H.J. Lu <hongjiu.lu@intel.com> + + * regcache.c (supply_register): Clear regcache if buf is NULL. + +2010-02-02 Nicolas Roche <roche@sourceware.org> + Joel Brobecker <brobecker@adacore.com> + + * inferiors.c (find_inferior): Add function documentation. + (unloaded_dll): Handle the case where the unloaded dll has not + been previously registered in the dll list. + +2010-02-01 Daniel Jacobowitz <dan@codesourcery.com> + + * linux-arm-low.c (thumb_breakpoint_len): Delete. + (thumb2_breakpoint): New. + (arm_breakpoint_at): Check for Thumb-2 breakpoints. + +2010-01-29 Daniel Jacobowitz <dan@codesourcery.com> + + * linux-low.c (get_stop_pc): Check for SIGTRAP. + (linux_wait_for_event_1): Handle SIGILL and SIGSEGV as possible + breakpoints. + +2010-01-21 Pedro Alves <pedro@codesourcery.com> + + * linux-ppc-low.c (ppc_arch_setup): Adjust to regcache changes. + +2010-01-21 Jan Kratochvil <jan.kratochvil@redhat.com> + + * linux-s390-low.c (s390_collect_ptrace_register) + (s390_supply_ptrace_register): Adjust it for the new regcache parameter. + +2010-01-21 Doug Evans <dje@google.com> + + * linux-low.c (PTRACE_ARG3_TYPE): Change from long to void*. + (PTRACE_ARG4_TYPE): New macro. + (handle_extended_wait): Cast ptrace arg4 to PTRACE_ARG4_TYPE. + (linux_wait_for_event_1, linux_resume_one_lwp): Ditto. + (fetch_register): Cast to uintptr_t before casting to PTRACE_ARG3_TYPE. + (usr_store_inferior_registers): Ditto. + (linux_read_memory, linux_write_memory): Ditto. + (linux_test_for_tracefork): Ditto. + + * linux-arm-low.c: Remove redundant include of gdb_proc_service.h. + Only include elf.h if gdb_proc_service.h didn't include linux/elf.h. + +2010-01-21 Pedro Alves <pedro@codesourcery.com> + + * proc-service.c (ps_lgetregs): Don't refetch registers from the + target. + +2010-01-21 Pedro Alves <pedro@codesourcery.com> + + * spu-low.c (spu_fetch_registers, spu_store_registers): Change + prototype to take a regcache. Adjust. + +2010-01-20 Pedro Alves <pedro@codesourcery.com> + + * regcache.h (struct thread_info): Forward declare. + (struct regcache): New. + (new_register_cache): Adjust prototype. + (get_thread_regcache): Declare. + (free_register_cache): Adjust prototype. + (registers_to_string, registers_from_string): Ditto. + (supply_register, supply_register_by_name, collect_register) + (collect_register_as_string, collect_register_by_name): Ditto. + * regcache.c (struct inferior_regcache_data): Delete. + (get_regcache): Rename to ... + (get_thread_regcache): ... this. Adjust. Switch inferior before + fetching registers. + (regcache_invalidate_one): Adjust. + (regcache_invalidate): Fix prototype. + (new_register_cache): Return the new register cache. + (free_register_cache): Change prototype. + (realloc_register_cache): Adjust. + (registers_to_string): Change prototype to take a regcache. Adjust. + (registers_from_string): Ditto. + (register_data): Ditto. + (supply_register): Ditto. + (supply_register_by_name): Ditto. + (collect_register): Ditto. + (collect_register_as_string): Ditto. + (collect_register_by_name): Ditto. + * server.c (process_serial_event): Adjust. + * linux-low.h (regset_fill_func, regset_store_func): Change + prototype. + (get_pc, set_pc, collect_ptrace_register, supply_ptrace_register): + Change prototype. + * linux-low.c (get_stop_pc): Adjust. + (check_removed_breakpoint): Adjust. + (linux_wait_for_event): Adjust. + (linux_resume_one_lwp): Adjust. + (fetch_register): Add regcache parameter. Adjust. + (usr_store_inferior_registers): Ditto. + (regsets_fetch_inferior_registers): Ditto. + (regsets_store_inferior_registers): Ditto. + (linux_fetch_registers, linux_store_registers): Ditto. + * i387-fp.c (i387_cache_to_fsave): Change prototype to take a + regcache. Adjust. + (i387_fsave_to_cache, i387_cache_to_fxsave, i387_fxsave_to_cache): + Ditto. + * i387-fp.h (i387_cache_to_fsave, i387_fsave_to_cache): Change + prototype to take a regcache. + (i387_cache_to_fxsave, i387_fxsave_to_cache): Ditto. + * remote-utils.c (convert_ascii_to_int, outreg) + (prepare_resume_reply): Change prototype to take a regcache. + Adjust. + * target.h (struct target_ops) <fetch_registers, store_registers>: + Change prototype to take a regcache. + (fetch_inferior_registers, store_inferior_registers): Change + prototype to take a regcache. Adjust. + * proc-service.c (ps_lgetregs): Adjust. + * linux-x86-low.c (x86_fill_gregset, x86_store_gregset) + (x86_fill_fpregset, x86_store_fpregset, x86_fill_fpxregset) + (x86_store_fpxregset, x86_get_pc, x86_set_pc): Change prototype to + take a regcache. Adjust. + * linux-arm-low.c (arm_fill_gregset, arm_store_gregset) + (arm_fill_wmmxregset, arm_store_wmmxregset, arm_fill_vfpregset) + (arm_store_vfpregset, arm_get_pc, arm_set_pc): + (arm_breakpoint_at): Change prototype to take a regcache. Adjust. + * linux-cris-low.c (cris_get_pc, cris_set_pc) + (cris_cannot_fetch_register): + (cris_breakpoint_at): Change prototype to take a regcache. + Adjust. + * linux-crisv32-low.c (cris_get_pc, cris_set_pc, + cris_reinsert_addr, cris_write_data_breakpoint): Change prototype + to take a regcache. Adjust. + (cris_breakpoint_at, cris_insert_point, cris_remove_point): + Adjust. + * linux-m32r-low.c (m32r_get_pc, m32r_set_pc): Change prototype to + take a regcache. Adjust. + * linux-m68k-low.c (m68k_fill_gregset, m68k_store_gregset) + (m68k_fill_fpregset, m68k_store_fpregset, m68k_get_pc, + (m68k_set_pc): Change prototype to take a regcache. Adjust. + * linux-mips-low.c (mips_get_pc): + (mips_set_pc): Change prototype to take a regcache. Adjust. + (mips_reinsert_addr): Adjust. + (mips_collect_register): Change prototype to take a regcache. + Adjust. + (mips_supply_register): + (mips_collect_register_32bit, mips_supply_register_32bit) + (mips_fill_gregset, mips_store_gregset, mips_fill_fpregset) + (mips_store_fpregset): Ditto. + * linux-ppc-low.c (ppc_supply_ptrace_register) + (ppc_supply_ptrace_register): Ditto. + (parse_spufs_run): Adjust. + (ppc_get_pc, ppc_set_pc, ppc_fill_gregset, ppc_fill_vsxregset) + (ppc_store_vsxregset, ppc_fill_vrregset, ppc_store_vrregset) + (ppc_fill_evrregset, ppc_store_evrregset): Change prototype to + take a regcache. Adjust. + * linux-s390-low.c (s390_collect_ptrace_register) + (s390_supply_ptrace_register, s390_fill_gregset, s390_get_pc) + (s390_set_pc): Change prototype to take a regcache. Adjust. + (s390_arch_setup): Adjust. + * linux-sh-low.c (sh_get_pc, sh_breakpoint_at) + (sh_fill_gregset): Change prototype to take a regcache. Adjust. + * linux-sparc-low.c (sparc_fill_gregset_to_stack) + (sparc_fill_gregset, sparc_store_gregset_from_stack) + (sparc_store_gregset, sparc_get_pc): Change prototype to take a + regcache. Adjust. + (sparc_breakpoint_at): Adjust. + * linux-xtensa-low.c (xtensa_fill_gregset): + (xtensa_store_gregset): + (xtensa_fill_xtregset, xtensa_store_xtregset, xtensa_get_pc) + (xtensa_set_pc): Change prototype to take a regcache. Adjust. + * nto-low.c (nto_fetch_registers, nto_store_registers): Change + prototype to take a regcache. Adjust. + * win32-arm-low.c (arm_fetch_inferior_register) + (arm_store_inferior_register): Change prototype to take a + regcache. Adjust. + * win32-i386-low.c (i386_fetch_inferior_register) + (i386_store_inferior_register): Change prototype to take a + regcache. Adjust. + * win32-low.c (child_fetch_inferior_registers) + (child_store_inferior_registers): Change prototype to take a + regcache. Adjust. + (win32_wait): Adjust. + (win32_fetch_inferior_registers): Change prototype to take a + regcache. Adjust. + (win32_store_inferior_registers): Adjust. + * win32-low.h (struct win32_target_ops) <fetch_inferior_register, + store_inferior_register>: Change prototype to take a regcache. + +2010-01-20 Doug Evans <dje@google.com> + + * linux-low.c (linux_create_inferior): Wrap use of __SIGRTMIN in + #ifdef. + (linux_wait_for_event1, linux_init_signals): Ditto. + (W_STOPCODE): Provide definition if missing. + +2010-01-13 Vladimir Prus <vladimir@codesourcery.com> + + * linux-low.c (linux_core_of_thread): New. + (compare_ints, show_process, list_threads): New. + (linux_qxfer_osdata): Report threads and cores. + (linux_target_op): Register linux_core_of_thread. + * remote-utils.c (prepare_resume_reply): Report the core. + (buffer_xml_printf): Support %d specifier. + * server.c (handle_threads_qxfer_proper, handle_threads_qxfer): + New. + (handle_query): Handle qXfer:threads. Announce availability + thereof. + * target.h (struct target_ops): New field core_of_thread. + +2010-01-04 Ulrich Weigand <uweigand@de.ibm.com> + + * Makefile.in (clean): Remove new generated files. + (reg-s390.o, reg-s390.c): Remove rules. + (reg-s390x.o, reg-s390x.c): Likewise. + (s390-linux32.o, s390-linux32.c): Add rules. + (s390-linux64.o, s390-linux64.c): Likewise. + (s390x-linux64.o, s390x-linux64.c): Likewise. + * configure.srv (s390*-*-linux*): Update srv_regobj and srv_xmlfiles. + * linux-s390-low.c: Include <elf.h>. + (HWCAP_S390_HIGH_GPRS): Define if undefined. + (init_registers_s390): Remove prototype. + (init_registers_s390x): Likewise. + (init_registers_s390_linux32): Add prototype. + (init_registers_s390_linux64): Likewise. + (init_registers_s390x_linux64): Likewise. + (s390_num_regs_3264): New define. + (s390_regmap_3264): New global variable. + (s390_cannot_fetch_register): Remove obsolete check. + (s390_cannot_store_register): Likewise. + (s390_collect_ptrace_register): Handle upper/lower register halves. + (s390_supply_ptrace_register): Likewise. + (s390_fill_gregset): Update to register number changes. + (s390_get_hwcap): New routine. + (s390_arch_setup): Detect 32-bit process running on 64-bit system. + Install appropriate regmap and register set. + +2010-01-01 Joel Brobecker <brobecker@adacore.com> + + * server.c (gdbserver_version): Update copyright year to 2010. + * gdbreplay.c (gdbreplay_version): Likewise. + +2009-12-28 Doug Evans <dje@google.com> + + * linux-low.c: Delete inclusion of ansidecl.h, elf/common.h, + elf/external.h. Include <elf.h> instead but only if necessary. + +2009-12-28 Pedro Alves <pedro@codesourcery.com> + + * linux-low.c (linux_remove_process): Remove `detaching' + parameter. Don't release/detach from thread_db here. + (linux_kill): Release/detach from thread_db here, ... + (linux_detach): ... and here, before actually detaching. + (linux_wait_1): ... and here, when a process exits. + * thread-db.c (any_thread_of): New. + (thread_db_free): Switch the current inferior to a thread of the + passed in process. + +2009-12-21 Doug Evans <dje@google.com> + + * linux-x86-low.c: Delete outdated comment about Elf32_Phdr. + + * linux-low.c (kill_lwp): Use __NR_tkill instead of SYS_tkill. + Move definition of tkill_failed to ifdef __NR_tkill to avoid gcc + warning ifndef __NR_tkill. Move setting of errno there too. + Delete unnecessary resetting of errno after syscall. + Minor comment changes to match gdb/linux-nat.c:kill_lwp. + + * configure.ac: Check for dladdr. + * config.in: Regenerate. + * configure: Regenerate. + * thread-db.c (dladdr_to_soname): Only define ifdef HAVE_DLADDR. + (try_thread_db_load): Update. + + * linux-low.c (my_waitpid): Delete unnecessary prototype. + +2009-12-18 Doug Evans <dje@google.com> + + * event-loop.c: Include unistd.h if it exists. + + * linux-low.c (my_waitpid): Move definition away from being in + between linux_tracefork_child/linux_test_for_tracefork. + + * gdb_proc_service.h (psaddr_t): Fix type. + * thread-db.c (thread_db_info.td_thr_tls_get_addr_p): Fix + signature to match glibc. + +2009-12-16 Doug Evans <dje@google.com> + + * linux-low.c (linux_read_memory): Fix argument to read. + +2009-11-26 Pedro Alves <pedro@codesourcery.com> + + * win32-low.c (get_child_debug_event): On EXIT_THREAD_DEBUG_EVENT + events, don't leave current_inferior pointing at null. + +2009-11-26 Pedro Alves <pedro@codesourcery.com> + + * win32-low.c (LOG): Delete. + (OUTMSG): Output to stderr. + (OUTMSG2): Conditionalize on `debug_threads' variable, instead of + on compile time LOG macro. + (win32_wait): Fix debug output. + +2009-11-26 Pedro Alves <pedro@codesourcery.com> + + * win32-low.c (win32_add_one_solib): If the dll name is + "ntdll.dll", prepend the system directory to the dll path. + +2009-11-17 Daniel Jacobowitz <dan@codesourcery.com> + + * m68k-tdep.c (m68k_gdbarch_init): Reuse previous initialization. + +2009-11-17 Nathan Sidwell <nathan@codesourcery.com> + Vladimir Prus <vladimir@codesourcery.com> + + * Makefile.in (reg-cf.o, reg-cf.c): New targets. + * configure.ac: Check for __mcoldfire__ and set + gdb_cv_m68k_is_coldfire. + * configure.srv: Use gdb_cv_m68k_is_coldfire to select between + reg-cf.o and reg-m68k.o. + * configure: Regenerated. + +2009-11-16 Pedro Alves <pedro@codesourcery.com> + + * linux-low.c (linux_remove_process): Add `detaching' parameter. + Pass it to thread_db_free. + (linux_kill, linux_detach, linux_wait_1): Adjust to pass the + proper `detaching' argument to linux_remove_process. + * linux-low.h (thread_db_free): Add `detaching' parameter. + * thread-db.c (thread_db_init): Pass false as `detaching' argument + to thread_db_free. + (thread_db_free): Add `detaching' parameter. Only + call td_ta_clear_event if detaching from process. + +2009-11-12 Maxim Kuvyrkov <maxim@codesourcery.com> + + * thread-db.c (thread_db_free): Fix typo. + +2009-11-11 Paul Pluzhnikov <ppluzhnikov@google.com> + + PR gdb/10838 + * thread-db.c (thread_db_free): Call td_ta_clear_event. + +2009-11-03 Nathan Sidwell <nathan@codesourcery.com> + + * configure.ac (i[34567]86-*): Check if we're targetting x86-64 + with an i686 compiler. + * configure.srv (i[34567]86-*-linux*): Pull in x86-64 handling if + needed. + * configure: Rebuilt. + +2009-10-29 Sandra Loosemore <sandra@codesourcery.com> + + PR gdb/10783 + + * server.c (handle_search_memory_1): Correct read_addr initialization + in loop for searching subsequent chunks. + +2009-10-29 Paul Pluzhnikov <ppluzhnikov@google.com> + + * configure.ac: New --with-libthread-db option. + * thread-db.c: Allow direct dependence on libthread_db. + (thread_db_free): Adjust. + * config.in: Regenerate. + * configure: Likewise. + +2009-10-28 Paul Pluzhnikov <ppluzhnikov@google.com> + + PR gdb/10757 + * thread-db.c (attach_thread): New function. + (maybe_attach_thread): Return success/failure. + (find_new_threads_callback): Adjust. + (thread_db_find_new_threads): Loop until no new threads. + +2009-10-13 Pedro Alves <pedro@codesourcery.com> + + * proc-service.c (ps_lgetregs): Formatting. + +2009-10-08 Paul Pluzhnikov <ppluzhnikov@google.com> + + * acinclude.m4: (SRV_CHECK_THREAD_DB, SRV_CHECK_TLS_GET_ADDR): Remove. + * configure.ac: Adjust. + * linux-low.h (struct process_info_private): Move members to struct + thread_db. + (thread_db_free, thread_db_handle_monitor_command): New prototype. + * linux-low.c (linux_remove_process): Adjust. + (linux_wait_for_event_1, linux_look_up_symbols): Likewise. + * server.c (handle_query): Move code ... + (handle_monitor_command): ... here. New function. + * target.h (struct target_ops): New member. + * thread-db.c (struct thread_db): New. + (libthread_db_search_path): New variable. + (thread_db_create_event, thread_db_enable_reporting) + (find_one_thread, maybe_attach_thread, find_new_threads_callback) + (thread_db_find_new_threads, (thread_db_get_tls_address): Adjust. + (try_thread_db_load_1, dladdr_to_soname): New functions. + (try_thread_db_load, thread_db_load_search): New functions. + (thread_db_init): Search for libthread_db. + (thread_db_free): New function. + (thread_db_handle_monitor_command): Likewise. + * config.in: Regenerate. + * configure: Regenerate. + +2009-09-27 Ulrich Weigand <uweigand@de.ibm.com> + + * spu-low.c (spu_kill): Wait for inferior to terminate. + Call clear_inferiors. + (spu_detach): Call clear_inferiors. + +2009-08-22 Ralf Wildenhues <Ralf.Wildenhues@gmx.de> + + * aclocal.m4: Regenerate. + * config.in: Likewise. + * configure: Likewise. + +2009-07-31 Ulrich Weigand <uweigand@de.ibm.com> + + * linux-ppc-low.c (INSTR_SC, NR_spu_run): Define. + (parse_spufs_run): New function. + (ppc_get_pc, ppc_set_pc): Detect and handle SPU PC. + (ppc_breakpoint_at): Handle SPU breakpoints. + +2009-07-31 Ulrich Weigand <uweigand@de.ibm.com> + + * linux-low.c: Include <sys/stat.h> and <sys/vfs.h>. + (SPUFS_MAGIC): Define. + (spu_enumerate_spu_ids): New function. + (linux_qxfer_spu): New function. + (linux_target_ops): Install linux_qxfer_spu. + +2009-07-31 Ulrich Weigand <uweigand@de.ibm.com> + + * configure.srv (powerpc*-*-linux*): Add powerpc-cell32l.o + and powerpc-cell64l.o to srv_regobj. Add rs6000/powerpc-cell32l.xml + and rs6000/powerpc-cell64l.xml to srv_xmlfiles. + * Makefile.in (powerpc-cell32l.o, powerpc-cell32l.c): New rules. + (powerpc-cell64l.o, powerpc-cell64l.c): Likewise. + (clean): Handle powerpc-cell32l.c and powerpc-cell64l.c. + * linux-ppc-low.c (PPC_FEATURE_CELL): Define. + (init_registers_powerpc_cell32l): Add prototype. + (init_registers_powerpc_cell64l): Likewise. + (ppc_arch_setup): Detect Cell/B.E. architecture. + +2009-07-30 Ralf Wildenhues <Ralf.Wildenhues@gmx.de> + + * Makefile.in (datarootdir): New variable. + +2009-07-28 Daniel Jacobowitz <dan@codesourcery.com> + + * linux-low.c (linux_write_memory): Update debugging output. + * Makefile.in (clean): Add new descriptions. + (arm-with-vfpv2.o, arm-with-vfpv2.c, arm-with-vfpv3.o) + (arm-with-vfpv3.c, arm-with-neon.o, arm-with-neon.c): New rules. + * configure.srv: Add new files for arm*-*-linux*. + * linux-arm-low.c: Add new declarations. + (PTRACE_GETVFPREGS, PTRACE_SETVFPREGS): Define if undefined. + (arm_hwcap, HWCAP_VFP, HWCAP_IWMMXT, HWCAP_NEON, HWCAP_VFPv3) + (HWCAP_VFPv3D16): New. + (arm_fill_wmmxregset, arm_store_wmmxregset): Check HWCAP_IWMMXT + instead of __IWMMXT__. + (arm_fill_vfpregset, arm_store_vfpregset, arm_get_hwcap) + (arm_arch_setup): New. + (target_regsets): Remove #ifdef. Add VFP regset. + (the_low_target): Use arm_arch_setup. + +2009-07-28 Daniel Jacobowitz <dan@codesourcery.com> + + * linux-low.c (linux_kill_one_lwp): Adjust kernel workaround to skip + the main thread again. + +2009-07-06 Aleksandar Ristovski <aristovski@qnx.com> + + Adding Neutrino gdbserver. + * configure: Regenerated. + * configure.ac: Add case for srv_qnx and set LIBS accordingly. + * configure.srv (i[34567]86-*-nto*): New target. + * nto-low.c, nto-low.h, nto-x86-low.c: New files. + * remote-utils.c [__QNX__]: Include sys/iomgr.h + (nto_comctrl) [__QNX__]: New function. + (enable_async_io, disable_async_io) [__QNX__]: Call nto_comctrl. + +2009-07-05 Danny Backx <dannybackx@users.sourceforge.net> + + * configure.srv (i[34567]86-*-mingw32ce*): Add i386-low.o to + srv_tgtobj. + +2009-07-04 Danny Backx <dannybackx@users.sourceforge.net> + Pedro Alves <pedro@codesourcery.com> + + * win32-i386-low.c (i386_get_thread_context): Handle systems that + don't support CONTEXT_EXTENDED_REGISTERS. + (i386_win32_breakpoint, i386_win32_breakpoint_len): New. + (the_low_target): Install them. + * win32-low.c (get_child_debug_event): Handle WaitForDebugEvent + failing with ERROR_PIPE_NOT_CONNECTED. + +2009-06-30 Doug Evans <dje@google.com> + Pierre Muller <muller@ics.u-strasbg.fr> + + Add h/w watchpoint support to x86-linux, win32-i386. + * Makefile.in (SFILES): Add i386-low.c + (i386_low_h): Define. + (i386-low.o): Add dependencies. + (linux-x86-low.o): Add i386-low.h dependency. + (win32-i386-low.o): Ditto. + * i386-low.c: New file. + * i386-low.h: New file. + * configure.srv (i[34567]86-*-cygwin*): Add i386-low.o to srv_tgtobj. + (i[34567]86-*-linux*, i[34567]86-*-mingw*, x86_64-*-linux*): Ditto. + * linux-low.c (linux_add_process): Initialize arch_private. + (linux_remove_process): Free arch_private. + (add_lwp): Initialize arch_private. + (delete_lwp): Free arch_private. + (linux_resume_one_lwp): Call the_low_target.prepare_to_resume if + provided. + * linux-low.h (process_info_private): New member arch_private. + (lwp_info): New member arch_private. + (linux_target_ops): New members new_process, new_thread, + prepare_to_resume. + (ptid_of): New macro. + * linux-x86-low.c: Include stddef.h, i386-low.h. + (arch_process_info): New struct. + (arch_lwp_info): New struct. + (x86_linux_dr_get, x86_linux_dr_set): New functions. + (i386_dr_low_set_addr, i386_dr_low_set_control): New functions. + (i386_dr_low_get_status): New function. + (x86_insert_point, x86_remove_point): New functions. + (x86_stopped_by_watchpoint): New function. + (x86_stopped_data_address): New function. + (x86_linux_new_process, x86_linux_new_thread): New functions. + (x86_linux_prepare_to_resume): New function. + (the_low_target): Add entries for insert_point, remove_point, + stopped_by_watchpoint, stopped_data_address, new_process, new_thread, + prepare_to_resume. + * server.c (debug_hw_points): New global. + (monitor_show_help): Document set debug-hw-points. + (handle_query): Process "set debug-hw-points". + * server.h (debug_hw_points): Declare. + (paddress): Declare. + * utils.c (NUMCELLS, CELLSIZE): New macros. + (get_sell, xsnprintf, paddress): New functions. + * win32-arm-low.c (the_low_target): Add entries for insert_point, + remove_point, stopped_by_watchpoint, stopped_data_address. + * win32-i386-low.c: Include i386-low.h. + (debug_reg_state): Replaces dr. + (i386_dr_low_set_addr, i386_dr_low_set_control): New functions. + (i386_dr_low_get_status): New function. + (i386_insert_point, i386_remove_point): New functions. + (i386_stopped_by_watchpoint): New function. + (i386_stopped_data_address): New function. + (i386_initial_stuff): Update. + (get_thread_context,set_thread_context,i386_thread_added): Update. + (the_low_target): Add entries for insert_point, + remove_point, stopped_by_watchpoint, stopped_data_address. + * win32-low.c (win32_insert_watchpoint): New function. + (win32_remove_watchpoint): New function. + (win32_stopped_by_watchpoint): New function. + (win32_stopped_data_address): New function. + (win32_target_ops): Add entries for insert_watchpoint, + remove_watchpoint, stopped_by_watchpoint, stopped_data_address. + * win32-low.h (win32_target_ops): New members insert_point, + remove_point, stopped_by_watchpoint, stopped_data_address. + +2009-06-25 Pedro Alves <pedro@codesourcery.com> + + * server.c (process_serial_event): Re-return unsupported, not + error, if the type isn't recognized. Re-allow supporting only + insert or remove packets. Also call require_running for + breakpoints. Add missing break statement to default case. Tidy. + * target.h (struct target_ops): Rename insert_watchpoint to + insert_point, and remove_watchpoint to remove_point. + + * linux-low.h (struct linux_target_ops): Likewise. + * linux-low.c (linux_insert_watchpoint): Rename to ... + (linux_insert_point): ... this. Adjust. + (linux_remove_watchpoint): Rename to ... + (linux_remove_point): ... this. Adjust. + (linux_target_ops): Adjust. + * linux-crisv32-low.c (cris_insert_watchpoint): Rename to ... + (cris_insert_point): ... this. + (cris_remove_watchpoint): Rename to ... + (cris_remove_point): ... this. + (the_low_target): Adjust. + +2009-06-24 Pierre Muller <muller@ics.u-strasbg.fr> + + * server.c (handle_v_kill): Pass signal_pid to + kill_inferior if multi_process is zero. + +2009-06-23 Aleksandar Ristovski <aristovski@qnx.com> + + * server.c (process_serial_event): Add support for Z0 and Z1 packet. + * target.h (target_ops): Comment for *_watchpoint to make it clear + the functions can get types '0' and '1'. + +2009-06-22 Aleksandar Ristovski <aristovski@qnx.com> + + * linux-low.c (usr_fetch_inferior_registers): Remove check for regno 0. + * proc-service.c (ps_lgetregs): Pass -1 to fetch all registers. + * regcache.c (get_regcache): Likewise. + * spu-low.c (spu_fetch_registers): Remove 0 to -1 conversion. + * win32-low.c (child_fetch_inferior_registers): Remove check for + regno 0. + +2009-06-19 Aleksandar Ristovski <aristovski@qnx.com> + Pedro Alves <pedro@codesourcery.com> + + * target.h (struct target_ops) <supports_multi_process>: New + callback. + (target_supports_multi_process): New. + * server.c (handle_query): Even if GDB reports support, only + enable multi-process if the target also supports it. Report + multi-process support only if the target backend supports it. + * linux-low.c (linux_supports_multi_process): New function. + (linux_target_ops): Install it as target_supports_multi_process + callback. + +2009-05-24 Doug Evans <dje@google.com> + + Global renaming of find_thread_pid to find_thread_ptid. + * server.h (find_thread_ptid): Renamed from find_thread_pid. + * inferiors.c (find_thread_ptid): Renamed from find_thread_pid. + All callers updated. + + * linux-low.c (handle_extended_wait): Use linux_resume_one_lwp + to resume the newly created thread, don't call ptrace (PTRACE_CONT) + directly. + + * linux-low.c (get_stop_pc): Print pc if debug_threads. + (check_removed_breakpoint, linux_wait_for_lwp): Ditto. + (linux_resume_one_lwp): Ditto. + +2009-05-23 Doug Evans <dje@google.com> + + * linux-low.c (linux_resume_one_lwp): Change type of first arg + from struct inferior_list_entry * to struct lwp_info *. + All callers updated. + +2009-05-13 Doug Evans <dje@google.com> + + * linux-x86-low.c: Don't include assert.h. + (x86_siginfo_fixup): Use fatal, not assert. + (x86_arch_setup): Fix comment. + +2009-05-12 Doug Evans <dje@google.com> + + Biarch support for i386/amd64 gdbserver. + * Makefile.in (SFILES): Remove linux-i386-low.c, linux-x86-64-low.c. + Add linux-x86-low.c. + (linux-i386-low.o, linux-x86-64-low.o): Delete. + (linux-x86-low.o): Add. + * linux-x86-64-low.c: Delete. + * linux-i386-low.c: Delete. + * linux-x86-low.c: New file. + * configure.srv (i?86-linux srv_tgtobj): Replace linux-i386-low.o with + linux-x86-low.o. + (x86_64-linux srv_tgtobj): Replace linux-x86-64-low.o with + linux-x86-low.o. + (x86_64-linux srv_regobj): Add reg-i386-linux.o. + * linux-low.c: Include ansidecl.h, elf/common.h, elf/external.h. + (linux_child_pid_to_exec_file): New function. + (elf_64_header_p, elf_64_file_p): New functions. + (siginfo_fixup): New function. + (linux_xfer_siginfo): New local inf_siginfo. Call siginfo_fixup to + give target a chance to convert layout. + * linux-low.h (linux_target_ops): New member siginfo_fixup. + (linux_child_pid_to_exec_file, elf_64_file_p): Declare. + +2009-05-07 Doug Evans <dje@google.com> + + * linux-low.c (regsets_fetch_inferior_registers): Fix memory leak. + (regsets_store_inferior_registers): Ditto. + +2009-05-06 Pedro Alves <pedro@codesourcery.com> + + PR server/10048 + + * linux-low.c (must_set_ptrace_flags): Delete. + (linux_create_inferior): Set `lwp->must_set_ptrace_flags' instead + of the global. + (linux_attach_lwp_1): Don't set PTRACE_SETOPTIONS here. Set + `lwp->must_set_ptrace_flags' instead. + (linux_wait_for_event_1): Set ptrace options here. + (linux_wait_1): ... not here. + +2009-04-30 Doug Evans <dje@google.com> + + * inferiors.c (started_inferior_callback): New function. + (attached_inferior_callback): New function. + (have_started_inferiors_p, have_attached_inferiors_p): New functions. + * server.c (print_started_pid, print_attached_pid): New functions. + (detach_or_kill_for_exit): New function. + (main): Call it instead of for_each_inferior (kill_inferior_callback). + * server.h (have_started_inferiors_p): Declare. + (have_attached_inferiors_p): Declare. + + * inferiors.c (remove_process): Fix memory leak, free process. + * linux-low.c (linux_remove_process): New function. + (linux_kill): Call it instead of remove_process. + (linux_detach, linux_wait_1): Ditto. + +2009-04-19 Danny Backx <dannybackx@users.sourceforge.net> + + * configure.srv: Add x86 Windows CE target. + +2009-04-03 Ulrich Weigand <uweigand@de.ibm.com> + + * inferiors.c (get_thread_process): Make global. + * server.h (get_thread_process): Add prototype. + * thread-db.c (find_one_thread): Use get_thread_process + instead of current_process. + (thread_db_get_tls_address): Do not crash if called when + thread layer is not yet initialized. + +2009-04-03 Ulrich Weigand <uweigand@de.ibm.com> + + * remote-utils.c (prepare_resume_reply): Null-terminate packet. + * spu-low.c (current_tid): Rename to ... + (current_ptid): ... this. + (fetch_ppc_register, fetch_ppc_memory, store_ppc_memory, + spu_proc_xfer_spu, spu_resume, spu_request_interrupt): Use + ptid_get_lwp (current_ptid) instead of current_tid. + (spu_kill, spu_detach, spu_join, spu_wait): Use pid argument + instead of current_tid. Use find_process_pid to verify pid + argument is valid. Pass proper argument to remove_process. + (spu_thread_alive): Compare current_ptid instead of current_tid. + (spu_resume): Likewise. + +2009-04-02 Pedro Alves <pedro@codesourcery.com> + + * linux-low.c (usr_store_inferior_registers): Declare local `pid' + variable. + +2009-04-01 Pedro Alves <pedro@codesourcery.com> + + Implement the multiprocess extensions, and add linux multiprocess + support. + + * server.h (ULONGEST): Declare. + (struct ptid, ptid_t): New. + (minus_one_ptid, null_ptid): Declare. + (ptid_build, pid_to_ptid, ptid_get_pid, ptid_get_lwp) + (ptid_get_tid, ptid_equal, ptid_is_pid): Declare. + (struct inferior_list_entry): Change `id' type from unsigned from + to ptid_t. + (struct sym_cache, struct breakpoint, struct + process_info_private): Forward declare. + (struct process_info): Declare. + (current_process): Declare. + (all_processes): Declare. + (initialize_inferiors): Declare. + (add_thread): Adjust to use ptid_t. + (thread_id_to_gdb_id, thread_to_gdb_id, gdb_id_to_thread_id): Ditto. + (add_process, remove_process, find_thread_pid): Declare. + (find_inferior_id): Adjust to use ptid_t. + (cont_thread, general_thread, step_thread): Change type to ptid_t. + (multi_process): Declare. + (push_event): Adjust to use ptid_t. + (read_ptid, write_ptid): Declare. + (prepare_resume_reply): Adjust to use ptid_t. + (clear_symbol_cache): Declare. + * inferiors.c (all_processes): New. + (null_ptid, minus_one_ptid): New. + (ptid_build, pid_to_ptid, ptid_get_pid, ptid_get_lwp) + (ptid_get_tid, ptid_equal, ptid_is_pid): New. + (add_thread): Change unsigned long to ptid. Remove gdb_id + parameter. Adjust. + (thread_id_to_gdb_id, thread_to_gdb_id): Change unsigned long to ptid. + (gdb_id_to_thread): Rename to ... + (find_thread_pid): ... this. Change unsigned long to ptid. + (gdb_id_to_thread_id, find_inferior_id): Change unsigned long to ptid. + (loaded_dll, pull_pid_from_list): Adjust. + (add_process, remove_process, find_process_pid) + (get_thread_process, current_process, initialize_inferiors): New. + * target.h (struct thread_resume) <thread>: Change type to ptid_t. + (struct target_waitstatus) <related_pid>: Ditto. + (struct target_ops) <kill, detach>: Add `pid' argument. Change + return type to int. + (struct target_ops) <join>: Add `pid' argument. + (struct target_ops) <thread_alive>: Change pid's type to ptid_t. + (struct target_ops) <wait>: Add `ptid' field. Change return type + to ptid. + (kill_inferior, detach_inferior, join_inferior): Add `pid' argument. + (mywait): Add `ptid' argument. Change return type to ptid_t. + (target_pid_to_str): Declare. + * target.c (set_desired_inferior): Adjust to use ptids. + (mywait): Add new `ptid' argument. Adjust. + (target_pid_to_str): New. + * mem-break.h (free_all_breakpoints): Declare. + * mem-break.c (breakpoints): Delelete. + (set_breakpoint_at, delete_breakpoint, find_breakpoint_at) + (check_mem_read, check_mem_write, delete_all_breakpoints): Adjust + to use per-process breakpoint list. + (free_all_breakpoints): New. + * remote-utils.c (struct sym_cache) <name>: Drop `const'. + (symbol_cache, all_symbols_looked_up): Delete. + (hexchars): New. + (ishex, unpack_varlen_hex, write_ptid, hex_or_minus_one, + read_ptid): New. + (prepare_resume_reply): Change ptid argument's type from unsigned + long to ptid_t. Adjust. Implement W;process and X;process. + (free_sym_cache, clear_symbol_cache): New. + (look_up_one_symbol): Adjust to per-process symbol cache. * + * server.c (cont_thread, general_thread, step_thread): Change type + to ptid_t. + (attached): Delete. + (multi_process): New. + (last_ptid): Change type to ptid_t. + (struct vstop_notif) <ptid>: Change type to ptid_t. + (queue_stop_reply, push_event): Change `ptid' argument's type to + ptid_t. + (discard_queued_stop_replies): Add `pid' argument. + (start_inferior): Adjust to use ptids. Adjust to mywait interface + changes. Don't reference the `attached' global. + (attach_inferior): Adjust to mywait interface changes. + (handle_query): Adjust to use ptids. Parse GDB's qSupported + features. Handle and report "multiprocess+". Handle + "qAttached:PID". + (handle_v_cont): Adjust to use ptids. Adjust to mywait interface + changes. + (handle_v_kill): New. + (handle_v_stopped): Adjust to use target_pid_to_str. + (handle_v_requests): Allow multiple attaches and runs when + multiprocess extensions are in effect. Handle "vKill". + (myresume): Adjust to use ptids. + (queue_stop_reply_callback): Add `arg' parameter. Handle it. + (handle_status): Adjust to discard_queued_stop_replies interface + change. + (first_thread_of, kill_inferior_callback) + (detach_or_kill_inferior_callback, join_inferiors_callback): New. + (main): Call initialize_inferiors. Adjust to use ptids, killing + and detaching from all inferiors. Handle multiprocess packet + variants. + * linux-low.h: Include gdb_proc_service.h. + (struct process_info_private): New. + (struct linux_target_ops) <pid_of>: Use ptid_get_pid. + <lwpid_of>: Use ptid_get_lwp. + (get_lwp_thread): Adjust. + (struct lwp_info): Add `dead' member. + (find_lwp_pid): Declare. + * linux-low.c (thread_db_active): Delete. + (new_inferior): Adjust comment. + (inferior_pid): Delete. + (linux_add_process): New. + (handle_extended_wait): Adjust. + (add_lwp): Change unsigned long to ptid. + (linux_create_inferior): Add process to processes table. Adjust + to use ptids. Don't set new_inferior here. + (linux_attach_lwp): Rename to ... + (linux_attach_lwp_1): ... this. Add `initial' argument. Handle + it. Adjust to use ptids. + (linux_attach_lwp): New. + (linux_attach): Add process to processes table. Don't set + new_inferior here. + (struct counter): New. + (second_thread_of_pid_p, last_thread_of_process_p): New. + (linux_kill_one_lwp): Add `args' parameter. Handle it. Adjust to + multiple processes. + (linux_kill): Add `pid' argument. Handle it. Adjust to multiple + processes. Remove process from process table. + (linux_detach_one_lwp): Add `args' parameter. Handle it. Adjust + to multiple processes. + (any_thread_of): New. + (linux_detach): Add `pid' argument, and handle it. Remove process + from processes table. + (linux_join): Add `pid' argument. Handle it. + (linux_thread_alive): Change unsighed long argument to ptid_t. + Consider dead lwps as not being alive. + (status_pending_p): Rename `dummy' argument to `arg'. Filter out + threads we're not interested in. + (same_lwp, find_lwp_pid): New. + (linux_wait_for_lwp): Change `pid' argument's type from int to + ptid_t. Adjust. + (linux_wait_for_event): Rename to ... + (linux_wait_for_event_1): ... this. Change `pid' argument's type + from int to ptid_t. Adjust. + (linux_wait_for_event): New. + (linux_wait_1): Add `ptid' argument. Change return type to + ptid_t. Adjust. Use last_thread_of_process_p. Remove processes + that exit from the process table. + (linux_wait): Add `ptid' argument. Change return type to ptid_t. + Adjust. + (mark_lwp_dead): New. + (wait_for_sigstop): Adjust to use ptids. If a process exits while + stopping all threads, mark its main lwp as dead. + (linux_set_resume_request, linux_resume_one_thread): Adjust to use + ptids. + (fetch_register, usr_store_inferior_registers) + (regsets_fetch_inferior_registers) + (regsets_store_inferior_registers, linux_read_memory) + (linux_write_memory): Inline `inferior_pid'. + (linux_look_up_symbols): Adjust to use per-process + `thread_db_active'. + (linux_request_interrupt): Adjust to use ptids. + (linux_read_auxv): Inline `inferior_pid'. + (initialize_low): Don't reference thread_db_active. + * gdb_proc_service.h (struct ps_prochandle) <pid>: Remove. + * proc-service.c (ps_lgetregs): Use find_lwp_pid. + (ps_getpid): Return the pid of the current inferior. + * thread-db.c (proc_handle, thread_agent): Delete. + (thread_db_create_event, thread_db_enable_reporting): Adjust to + per-process data. + (find_one_thread): Change argument type to ptid_t. Adjust to + per-process data. + (maybe_attach_thread): Adjust to per-process data and ptids. + (thread_db_find_new_threads): Ditto. + (thread_db_init): Ditto. + * spu-low.c (spu_create_inferior, spu_attach): Add process to + processes table. Adjust to use ptids. + (spu_kill, spu_detach): Adjust interface. Remove process from + processes table. + (spu_join, spu_thread_alive): Adjust interface. + (spu_wait): Adjust interface. Remove process from processes + table. Adjust to use ptids. + * win32-low.c (current_inferior_tid): Delete. + (current_inferior_ptid): New. + (debug_event_ptid): New. + (thread_rec): Take a ptid. Adjust. + (child_add_thread): Add `pid' argument. Adjust to use ptids. + (child_delete_thread): Ditto. + (do_initial_child_stuff): Add `attached' argument. Add process to + processes table. + (child_fetch_inferior_registers, child_store_inferior_registers): + Adjust. + (win32_create_inferior): Pass 0 to do_initial_child_stuff. + (win32_attach): Pass 1 to do_initial_child_stuff. + (win32_kill): Adjust interface. Remove process from processes + table. + (win32_detach): Ditto. + (win32_join): Adjust interface. + (win32_thread_alive): Take a ptid. + (win32_resume): Adjust to use ptids. + (get_child_debug_event): Ditto. + (win32_wait): Adjust interface. Remove exiting process from + processes table. + +2009-04-01 Pedro Alves <pedro@codesourcery.com> + + Non-stop mode support. + + * server.h (non_stop): Declare. + (gdb_client_data, handler_func): Declare. + (delete_file_handler, add_file_handler, start_event_loop): + Declare. + (handle_serial_event, handle_target_event, push_event) + (putpkt_notif): Declare. + * target.h (enum resume_kind): New. + (struct thread_resume): Replace `step' field by `kind' field. + (TARGET_WNOHANG): Define. + (struct target_ops) <wait>: Add `options' argument. + <supports_non_stop, async, start_non_stop>: New fields. + (target_supports_non_stop, target_async): New. + (start_non_stop): Declare. + (mywait): Add `options' argument. + * target.c (mywait): Add `options' argument. Print child exit + notifications here. + (start_non_stop): New. + * server.c (non_stop, own_buf, mem_buf): New globals. + (struct vstop_notif): New. + (notif_queue): New global. + (queue_stop_reply, push_event, discard_queued_stop_replies) + (send_next_stop_reply): New. + (start_inferior): Adjust to use resume_kind. Adjust to mywait + interface changes. + (attach_inferior): In non-stop mode, don't wait for the target + here. + (handle_general_set): Handle QNonStop. + (handle_query): When handling qC, return the current general + thread, instead of the first thread of the list. + (handle_query): If the backend supports non-stop mode, include + QNonStop+ in the qSupported query response. + (handle_v_cont): Adjust to use resume_kind. Handle resume_stop + and non-stop mode. + (handle_v_attach, handle_v_run): Handle non-stop mode. + (handle_v_stopped): New. + (handle_v_requests): Report support for vCont;t. Handle vStopped. + (myresume): Adjust to use resume_kind. Handle non-stop. + (queue_stop_reply_callback): New. + (handle_status): Handle non-stop mode. + (main): Clear non_stop flag on reconnection. Use the event-loop. + Refactor serial protocol handling from here ... + (process_serial_event): ... to this new function. When GDB + selects any thread, select one here. In non-stop mode, wait until + GDB acks all pending events before exiting. + (handle_serial_event, handle_target_event): New. + * remote-utils.c (remote_open): Install remote_desc in the event + loop. + (remote_close): Remove remote_desc from the event loop. + (putpkt_binary): Rename to... + (putpkt_binary_1): ... this. Add `is_notic' argument. Handle it. + (putpkt_binary): New as wrapper around putpkt_binary_1. + (putpkt_notif): New. + (prepare_resume_reply): In non-stop mode, don't change the + general_thread. + * event-loop.c: New. + * Makefile.in (OBJ): Add event-loop.o. + (event-loop.o): New rule. + + * linux-low.h (pid_of): Moved here. + (lwpid_of): New. + (get_lwp_thread): Use lwpid_of. + (struct lwp_info): Delete `lwpid' field. Add `suspended' field. + * linux-low.c (pid_of): Delete. + (inferior_pid): Use lwpid_of. + (linux_event_pipe): New. + (target_is_async_p): New. + (delete_lwp): New. + (handle_extended_wait): Use lwpid_of. + (add_lwp): Don't set lwpid field. + (linux_attach_lwp): Adjust debug output. Use lwpid_of. + (linux_kill_one_lwp): If killing a running lwp, stop it first. + Use lwpid_of. Adjust to linux_wait_for_event interface changes. + (linux_detach_one_lwp): If detaching from a running lwp, stop it + first. Adjust to linux_wait_for_event interface changes. Use + lwpid_of. + (linux_detach): Don't delete the main lwp here. + (linux_join): Use my_waitpid. Avoid signal_pid. Use lwpid_of. + (status_pending_p): Don't consider explicitly suspended lwps. + (linux_wait_for_lwp): Take an integer pid instead of a lwp_info + pointer. Add OPTIONS argument. Change return type to int. Use + my_waitpid instead of sleeping. Handle WNOHANG. Use lwpid_of. + (linux_wait_for_event): Take an integer pid instead of a lwp_info + pointer. Add status pointer argument. Return a pid instead of a + status. Use lwpid_of. Adjust to linux_wait_for_lwp interface + changes. In non-stop mode, don't switch to a random thread. + (linux_wait): Rename to... + (linux_wait_1): ... this. Add target_options argument, and handle + it. Adjust to use resume_kind. Use lwpid_of. In non-stop mode, + don't handle the continue thread. Handle TARGET_WNOHANG. Merge + clean exit and signal exit code. Don't stop all threads in + non-stop mode. In all-stop mode, only stop all threads when + reporting a stop to GDB. Handle explicit thread stop requests. + (async_file_flush, async_file_mark): New. + (linux_wait): New. + (send_sigstop): Use lwpid_of. + (wait_for_sigstop): Use lwpid_of. Adjust to linux_wait_for_event + interface changes. In non-stop mode, don't switch to a random + thread. + (linux_resume_one_lwp): Use lwpid_of. + (linux_continue_one_thread, linux_queue_one_thread): Merge into ... + (linux_resume_one_thread): ... this. Handle resume_stop. In + non-stop mode, don't look for pending flag in all threads. + (resume_status_pending_p): Don't consider explicitly suspended + threads. + (my_waitpid): Reimplement. Emulate __WALL. + (linux_request_interrupt, linux_read_offsets, linux_xfer_siginfo): + Use lwpid_of. + (sigchld_handler, linux_supports_non_stop, linux_async) + (linux_start_non_stop): New. + (linux_target_ops): Register linux_supports_non_stop, linux_async + and linux_start_non_stop. + (initialize_low): Install SIGCHLD handler. + * thread-db.c (thread_db_create_event, find_one_thread) + (thread_db_get_tls_address): Use lwpid_of. + * win32-low.c (win32_detach): Adjust to use resume_kind. + (win32_wait): Add `options' argument. + * spu-low.c (spu_resume): Adjust to use resume_kind. + (spu_wait): Add `options' argument. + +2009-04-01 Pedro Alves <pedro@codesourcery.com> + + Decouple target code from remote protocol. + + * target.h (enum target_waitkind): New. + (struct target_waitstatus): New. + (struct target_ops) <wait>: Return an unsigned long. Take a + target_waitstatus pointer instead of a char pointer. + (mywait): Likewise. + * target.c (mywait): Change prototype to return an unsigned long. + Take a target_waitstatus pointer instead of a char pointer. Adjust. + * server.h (thread_from_wait, old_thread_from_wait): Delete + declarations. + (prepare_resume_reply): Change prototype to take a + target_waitstatus. + * server.c (thread_from_wait, old_thread_from_wait): Delete. + (last_status, last_ptid): New. + (start_inferior): Remove "statusptr" argument. Adjust. Return a + pid instead of a signal. + (attach_inferior): Remove "status" and "signal" parameters. + Adjust. + (handle_query): For qGetTLSAddr, parse the thread id with strtol, + not as an address. + (handle_v_cont, handle_v_attach, handle_v_run, handle_v_kill) + (handle_v_requests, myresume): Remove "status" and "signal" + parameters. Adjust. + (handle_status): New. + (main): Delete local `status'. Adjust. + * remote-utils.c: Include target.h. + (prepare_resume_reply): Change prototype to take a + target_waitstatus. Adjust. + + * linux-low.c (linux_wait): Adjust to new target_ops->wait + interface. + * spu-low.c (spu_wait): Adjust. + * win32-low.c (enum target_waitkind, struct target_waitstatus): + Delete. + (win32_wait): Adjust. + +2009-04-01 Pedro Alves <pedro@codesourcery.com> + + * target.h (struct thread_resume): Delete leave_stopped member. + (struct target_ops): Add a `n' argument to the `resume' callback. + * server.c (start_inferior): Adjust. + (handle_v_cont, myresume): Adjust. + * linux-low.c (check_removed_breakpoint): Adjust to resume + interface change, and to removed leave_stopped field. + (resume_ptr): Delete. + (struct thread_resume_array): New. + (linux_set_resume_request): Add new `arg' parameter. Adjust to + resume interface change. + (linux_continue_one_thread, linux_queue_one_thread) + (resume_status_pending_p): Check if the resume field is NULL + instead of checking the leave_stopped member. + (linux_resume): Adjust to the target resume interface change. + * spu-low.c (spu_resume): Adjust to the target resume interface + change. + * win32-low.c (win32_detach, win32_resume): Ditto. + +2009-04-01 Pedro Alves <pedro@codesourcery.com> + + * linux-low.c (linux_wait_for_event): Don't clear the `stepping' + flag. + (wait_for_sigstop): Don't leave a finished single-step SIGTRAP + pending. + (linux_continue_one_thread): Only preserve the stepping flag if + there's a pending breakpoint. + +2009-03-31 Pedro Alves <pedro@codesourcery.com> + + * server.c (main): After the inferior having exited, call + remote_close before exiting gdbserver. + +2009-03-25 Thiago Jung Bauermann <bauerman@br.ibm.com> + + Fix size of FPSCR in Power 7 processors. + * linux-ppc-low.c (PPC_FEATURE_ARCH_2_05): Remove #define. + (PPC_FEATURE_HAS_DFP): New #define. + (ppc_arch_setup): Check for DFP feature instead of ISA 2.05 to decide on + size of the FPSCR. + +2009-03-23 Pedro Alves <pedro@codesourcery.com> + + * server.c (handle_query) Whitespace and formatting. + +2009-03-22 Pedro Alves <pedro@codesourcery.com> + + * i387-fp.c, linux-arm-low.c, linux-cris-low.c, + linux-crisv32-low.c, linux-i386-low.c, linux-low.c, + linux-mips-low.c, linux-s390-low.c, linux-sparc-low.c, + linux-x86-64-low.c, linux-xtensa-low.c, proc-service.c, + regcache.c, remote-utils.c, server.c, spu-low.c, target.h, + thread-db.c, win32-low.c, xtensa-xtregs.c, gdbreplay.c, + Makefile.in, configure.ac: Fix whitespace throughout. + * configure: Regenerate. + +2009-03-22 Pedro Alves <pedro@codesourcery.com> + + * inferiors.c (find_inferior): Make it safe for the callback + function to delete the currently iterated inferior. + +2009-03-22 Pedro Alves <pedro@codesourcery.com> + + * Makefile.in (linuw_low_h): Move higher. + (thread-db.o): Depend on $(linux_low_h). + +2009-03-17 Pedro Alves <pedro@codesourcery.com> + + Rename "process" to "lwp" throughout. + + * linux-low.c (all_processes): Rename to... + (all_lwps): ... this. + (inferior_pid, handle_extended_wait, get_stop_pc): Adjust. + (add_process): Rename to ... + (add_lwp): ... this. Adjust. + (linux_create_inferior): Adjust. + (linux_attach_lwp): Adjust. + (linux_attach): Adjust. + (linux_kill_one_process): Rename to ... + (linux_kill_one_lwp): ... this. Adjust. + (linux_kill): Adjust. + (linux_detach_one_process): Rename to ... + (linux_detach_one_lwp): ... this. Adjust. + (linux_detach): Adjust. + (check_removed_breakpoint): Adjust. + (status_pending_p): Adjust. + (linux_wait_for_process): Rename to ... + (linux_wait_for_lwp): ... this. Adjust. + (linux_wait_for_event): Adjust. + (send_sigstop): Adjust. + (wait_for_sigstop): Adjust. + (stop_all_processes): Rename to ... + (stop_all_lwps): ... this. + (linux_resume_one_process): Rename to ... + (linux_resume_one_lwp): ... this. Adjust. + (linux_set_resume_request, linux_continue_one_thread) + (linux_queue_one_thread, resume_status_pending_p) + (usr_store_inferior_registers, regsets_store_inferior_registers) + (linux_request_interrupt, linux_read_offsets, linux_xfer_siginfo): + Adjust. + * linux-low.h (get_process): Rename to ... + (get_lwp): ... this. Adjust. + (get_thread_process): Rename to ... + (get_thread_lwp): ... this. Adjust. + (get_process_thread): Rename to ... + (get_lwp_thread): ... this. Adjust. + (struct process_info): Rename to ... + (struct lwp_info): ... this. + (all_processes): Rename to ... + (all_lwps): ... this. + * proc-service.c (ps_lgetregs): Adjust. + * thread-db.c (thread_db_create_event, find_one_thread) + (maybe_attach_thread, thread_db_get_tls_address): Adjust. + +2009-03-14 Pedro Alves <pedro@codesourcery.com> + + * server.c (handle_query): Handle "qAttached". + +2009-03-13 Nathan Sidwell <nathan@codesourcery.com> + + * Makefile.in, hostio-errno.c, errno.c, xtensa-xtregs.c: Change to + GPLv3, update license URL. + +2009-03-01 Doug Evans <dje@google.com> + + * Makefile.in (INCLUDE_CFLAGS): Add -I$(srcdir)/../common. + (server_h): Add gdb_signals.h. + (signals.o): Update. + * server.h (target_signal_from_host,target_signal_to_host_p) + (target_signal_to_host,target_signal_to_name): Moved to gdb_signals.h. + +2009-02-14 Pierre Muller <muller@ics.u-strasbg.fr> + + * remote-utils.c (getpkt): Also generate remote-debug + information if noack_mode is set. + +2009-02-06 Pedro Alves <pedro@codesourcery.com> + + * server.c (handle_query): Report qXfer:siginfo:read and + qXfer:siginfo:write as supported and handle them. + * target.h (struct target_ops) <qxfer_siginfo>: New field. + * linux-low.c (linux_xfer_siginfo): New. + (linux_target_ops): Set it. + +2009-01-26 Pedro Alves <pedro@codesourcery.com> + + * server.c (gdbserver_usage): Mention --remote-debug. + (main): Accept '--remote-debug' switch. + +2009-01-18 Doug Evans <dje@google.com> + + * regcache.c (new_register_cache): No need to check result of xcalloc. + * server.c (handle_search_memory): Back out calls to xmalloc, + result is checked and error is returned to user upon failure. + (handle_query): Ditto. Add more checks for result of malloc. + (handle_v_cont): Check result of malloc, report error back to + user upon failure. + (handle_v_run): Ditto. Call freeargv. + * server.h (freeargv): Declare. + * utils.c (freeargv): New fn. + +2009-01-15 Doug Evans <dje@google.com> + + * gdbreplay.c (perror_with_name): Make arg const char *. + * server.h (target_signal_to_name): Make return type const char *. + * thread-db.c (thread_db_err_str): Make return type const char *. + * utils.c (perror_with_name): Make arg const char *. + +2009-01-14 Pedro Alves <pedro@codesourcery.com> + + * win32-low.c (get_child_debug_event): Issue a final DBG_CONTINUE + when handling a EXIT_PROCESS_DEBUG_EVENT. + +2009-01-06 Joel Brobecker <brobecker@adacore.com> + + * gdbreplay.c (gdbreplay_version): Update copyright year. + * server.c (gdbserver_version): Likewise. + +2009-01-05 Doug Evans <dje@google.com> + + * linux-low.c (linux_attach_lwp): Add some comments/fixmes. + (handle_extended_wait): Improve comment. + +2008-12-13 Doug Evans <dje@google.com> + + * utils.c (xmalloc,xcalloc,xstrdup): New fns. + * server.h (ATTR_MALLOC): New macro. + (xmalloc,xcalloc,xstrdup): Declare. + * hostio.c: Replace malloc,calloc,strdup with xmalloc,xcalloc,xstrdup. + * inferiors.c: Ditto. + * linux-low.c: Ditto. + * mem-break.c: Ditto. + * regcache.c: Ditto. + * remote-utils.c: Ditto. + * server.c: Ditto. + * target.c: Ditto. + * win32-low.c: Ditto. + +2008-12-12 Doug Evans <dje@google.com> + + * linux-low.c (linux_wait_for_process): Don't clobber current_inferior + in debugging printf. + + * linux-low.c (handle_extended_wait): Simplify, use my_waitpid. + +2008-12-09 Doug Evans <dje@google.com> + + * linux-low.h (struct process_info): Delete member tid, unused. + * thread-db.c (find_one_thread): Update. + (maybe_attach_thread): Update. + +2008-12-02 Pedro Alves <pedro@codesourcery.com> + + * target.h (struct target_ops): Add qxfer_osdata member. + * linux-low.c: Include ctype.h and pwd.h and sys/types.h + and dirent.h. + (linux_qxfer_osdata): New functions. + (linux_target_ops): Register linux_qxfer_osdata as qxfer_osdata + callback. + * server.c (handle_query): Handle "qXfer:osdata:read:". + * remote-utils.c (buffer_grow, buffer_free, buffer_init, buffer_finish) + (buffer_xml_printf): New functions. + * server.h (struct buffer): New. + (buffer_grow_str, buffer_grow_str0): New macros. + (buffer_grow, buffer_free, buffer_init, buffer_finish) + (buffer_xml_printf): Declare. + +2008-11-24 Doug Evans <dje@google.com> + + * Makefile.in (VERSION,DIST,LINT,LINTFLAGS): Delete, unused. + +2008-11-24 Daniel Jacobowitz <dan@codesourcery.com> + + * server.c (handle_v_run): Always use the supplied argument list. + +2008-11-19 Bob Wilson <bob.wilson@acm.org> + + * xtensa-xtregs.c (XTENSA_ELF_XTREG_SIZE): Change to 4. + (xtensa_regmap_table): Add entry for scompare1. + +2008-11-18 Thiago Jung Bauermann <bauerman@br.ibm.com> + + * Makefile.in (powerpc-isa205-32l.o, powerpc-isa205-32l.c, + powerpc-isa205-altivec32l.o, powerpc-isa205-altivec32l.c, + powerpc-isa205-vsx32l.o, powerpc-isa205-vsx32l.c, + powerpc-isa205-64l.o, powerpc-isa205-64l.c, + powerpc-isa205-altivec64l.o, powerpc-isa205-altivec64l.c, + powerpc-isa205-vsx64l.o, powerpc-isa205-vsx64l.c): New targets. + * configure.srv (powerpc*-*-linux*): Add ISA 2.05 object files and + XML target descriptions. + * linux-ppc-low.c (ppc_arch_setup): Init registers with 64-bit FPSCR + when inferior is running on an ISA 2.05 or later processor. Add + special case to return offset for full 64-bit slot of FPSCR when + in 32-bits. + +2008-11-14 Daniel Gutson <dgutson@codesourcery.com> + + * Makefile.in (SFILES, clean): Added sparc64 files. + (reg-sparc64.o, reg-sparc64.c): New. + * configure.srv (sparc*-*-linux*): New configuration. + * linux-low.c (regsets_fetch_inferior_registers): Swap ptrace + syscall arguments for SPARC. + (regsets_store_inferior_registers): Likewise. + * linux-sparc-low.c: New file. + +2008-10-21 Doug Evans <dje@google.com> + + * Makefile.in (BFD_DIR,BFD,BFD_SRC,BFD_CFLAGS): Delete. + (READLINE_DIR,READLINE_DEP): Delete. + (INTERNAL_CFLAGS): Update. + (LINTFLAGS): Update. + +2008-10-10 Pedro Alves <pedro@codesourcery.com> + + * server.c (handle_v_run): If GDB didn't specify an argv, use the + whole argv from the last run, not just argv[0]. + +2008-09-08 Pedro Alves <pedro@codesourcery.com> + + * regcache.c (new_register_cache): Return NULL if the register + cache size isn't known yet. + (free_register_cache): Avoid dereferencing a NULL regcache. + +2008-09-04 Daniel Jacobowitz <dan@codesourcery.com> + + * configure.srv: Merge MIPS and MIPS64. + +2008-08-24 Maciej W. Rozycki <macro@linux-mips.org> + + * Makefile.in (uninstall): Apply $(EXEEXT) too. + +2008-08-18 Luis Machado <luisgpm@br.ibm.com> + + * Makefile.in: Add required vsx dependencies. + + * linux-ppc-low: Define PPC_FEATURE_HAS_VSX. + Declare init_registers_powerpc_vsx32l. + Declare init_registers_powerpc_vsx64l. + Define PTRACE_GETVSXREGS and PTRACE_SETVSXREGS. + (ppc_arch_setup): Check for VSX in hwcap. + (ppc_fill_vsxregset): New function. + (ppc_store_vsxregset): New function. + Add new VSX entry in regset_info target_regsets. + + * configure.srv: Add new VSX dependencies. + +2008-08-12 Pedro Alves <pedro@codesourcery.com> + + * remote-utils.c (noack_mode, transport_is_reliable): New globals. + (remote_open): Set or clear transport_is_reliable. + (putpkt_binary): Don't expect acks in noack mode. + (getpkt): Don't send ack/nac in noack mode. + * server.c (handle_general_set): Handle QStartNoAckMode. + (handle_query): If connected by tcp pass QStartNoAckMode+ in + qSupported. + (main): Reset noack_mode on every connection. + * server.h (noack_mode): Declare. + +2008-08-07 Ralf Wildenhues <Ralf.Wildenhues@gmx.de> + + * Makefile.in (GDBREPLAY_OBS): New variable. + (gdbreplay$(EXEEXT)): Use it to avoid unportable $^. + +2008-08-05 Ulrich Weigand <uweigand@de.ibm.com> + Daniel Jacobowitz <dan@codesourcery.com> + + * linux-low.c (linux_resume_one_process): Ignore ESRCH. + (usr_store_inferior_registers): Likewise. + (regsets_store_inferior_registers): Likewise. + +2008-07-31 Rolf Jansen <rj@surtec.com> + Pedro Alves <pedro@codesourcery.com> + + * configure.ac: Check for memmem declaration. + * server.c [HAVE_MALLOC_H]: Include malloc.h. + (disable_packet_vCont, disable_packet_Tthread, disable_packet_qC) + (disable_packet_qfThreadInfo): Unconditionally compile. + * server.h [!HAVE_DECL_MEMMEM]: Declare memmem. + * configure, config.in: Regenerate. + +2008-07-28 Doug Kwan <dougkwan@google.com> + + * linux-low.c (sys/dir.h, sys/user.h): Remove includes. + (linux_write_memory): Remove declaration of errno. + +2008-07-12 Ulrich Weigand <uweigand@de.ibm.com> + + * linux-low.c (handle_extended_wait): Do not use "status" + variable uninitialized. + +2008-07-07 Pedro Alves <pedro@codesourcery.com> + + * server.c (handle_v_attach): Inhibit reporting dll changes. + +2008-06-27 Pedro Alves <pedro@codesourcery.com> + + * remote-utils.c (prepare_resume_reply): If requested, don't + output "thread:TID" in the T stop reply. + + * server.c (disable_packet_vCont, disable_packet_Tthread) + (disable_packet_qC, disable_packet_qfThreadInfo): New globals. + (handle_query): If requested, disable support for qC, qfThreadInfo + and qsThreadInfo. + (handle_v_requests): If requested, disable support for vCont. + (gdbserver_show_disableable): New. + (main): Handle --disable-packet and --disable-packet=LIST. + + * server.h (disable_packet_vCont, disable_packet_Tthread) + (disable_packet_qC, disable_packet_qfThreadInfo): Declare. + +2008-06-20 Carlos O'Donell <carlos@codesourcery.com> + + * server.c (gdbserver_usage): Mention --version. + +2008-06-06 Daniel Jacobowitz <dan@codesourcery.com> + + * Makefile.in (gdbreplay.o): New rule. + +2008-06-06 Joseph Myers <joseph@codesourcery.com> + + * gdbreplay.c (gdbreplay_version): Say gdbreplay in version + message, not gdbserver. + +2008-06-05 Vladimir Prus <vladimir@codesourcery.com> + Nathan Sidwell <nathan@codesourcery.com> + Joseph Myers <joseph@codesourcery.com> + + * acinclude.m4: Include ../../config/acx.m4. + * configure.ac: Use ACX_PKGVERSION and ACX_BUGURL. + * configure, config.in: Regenerate. + * Makefile.in (gdbreplay$(EXEEXT)): Add version.o. + * server.c (gdbserver_version): Print PKGVERSION. + (gdbsrever_usage): Add stream parameter. Print REPORT_BUGS_TO. + (main): Adjust gdbserver_usage calls. + * gdbreplay.c (version, host_name): Add declarations. + (gdbreplay_version, gdbreplay_usage): New. + (main): Accept --version and --help options. + +2008-06-04 Daniel Jacobowitz <dan@codesourcery.com> + + * linux-arm-low.c (thumb_breakpoint, thumb_breakpoint_len): New. + (arm_breakpoint_at): Handle Thumb. + (the_low_target): Add comment. + +2008-05-29 Ulrich Weigand <uweigand@de.ibm.com> + + * linux-ppc-low.c (ppc_collect_ptrace_register): Clear buffer. + +2008-05-09 Doug Evans <dje@google.com> + + * server.h (decode_search_memory_packet): Declare. + * remote-utils.c (decode_search_memory_packet): New fn. + * server.c (handle_search_memory_1): New fn. + (handle_search_memory): New fn. + (handle_query): Process qSearch:memory packets. + +2008-05-08 Ulrich Weigand <uweigand@de.ibm.com> + + * regcache.c (registers_length): Remove. + (set_register_cache): Verify that PBUFSIZ is large enough to hold a + full register packet. + * regcache.h (registers_length): Remove prototype. + * server.h (PBUFSIZ): Define to 16384. + +2008-05-03 Ulrich Weigand <uweigand@de.ibm.com> + + * configure.srv (powerpc*-*-linux*): Set srv_regobj to + powerpc-32l.o, powerpc-altivec32l.o, powerpc-e500l.o, + powerpc-64l.o, and powerpc-altivec64l.o. + Remove rs6000/powerpc-32.xml, rs6000/powerpc-64.xml, and + rs6000/powerpc-e500.xml; add rs6000/powerpc-32l.xml, + rs6000/powerpc-altivec32l.xml, rs6000/powerpc-e500l.xml, + rs6000/powerpc-64l.xml, rs6000/powerpc-altivec64l.xml, + rs6000/power-linux.xml, and rs6000/power64-linux.xml + to srv_xmlfiles. + + * Makefile.in (reg-ppc.o, reg-ppc.c): Remove, replace by ... + (powerpc-32l.o, powerpc-32l.c): ... these new rules. + (powerpc-32.o, powerpc-32.c): Remove, replace by ... + (powerpc-altivec32l.o, powerpc-altivec32l.c): ... these new rules. + (powerpc-e500.o, powerpc-e500.c): Remove, replace by ... + (powerpc-e500l.o, powerpc-e500l.c): ... these new rules. + (reg-ppc64.o, reg-ppc64.c): Remove, replace by ... + (powerpc-64l.o, powerpc-64l.c): ... these new rules. + (powerpc-64.o, powerpc-64.c): Remove, replace by ... + (powerpc-altivec64l.o, powerpc-altivec64l.c): ... these new rules. + (clean): Update. + + * linux-ppc-low.c (init_registers_ppc): Remove, replace by ... + (init_registers_powerpc_32l): ... this new prototype. + (init_registers_powerpc_32): Remove, replace by ... + (init_registers_powerpc_altivec32l): ... this new prototype. + (init_registers_powerpc_e500): Remove, replace by ... + (init_registers_powerpc_e500l): ... this new prototype. + (init_registers_ppc64): Remove, replace by ... + (init_registers_powerpc_64l): ... this new prototype. + (init_registers_powerpc_64): Remove, replace by ... + (init_registers_powerpc_altivec64l): ... this new prototype. + (ppc_num_regs): Set to 73. + (PT_ORIG_R3, PT_TRAP): Define if necessary. + (ppc_regmap, ppc_regmap_e500): Add values for orig_r3 and trap. + (ppc_cannot_store_register): Handle orig_r3 and trap. + (ppc_arch_setup): Update init_registers_... calls. + (ppc_fill_gregset): Handle orig_r3 and trap. + + * inferiors.c (clear_inferiors): Reset current_inferior. + +2008-04-23 Paolo Bonzini <bonzini@gnu.org> + + * acinclude.m4: Add override.m4. + * configure: Regenerate. + +2008-04-21 Ulrich Weigand <uweigand@de.ibm.com> + + * linux-ppc-low.c (ppc_arch_setup): Reset ppc_hwcap after the + initial call to init_register_ppc64. + +2008-04-21 Ulrich Weigand <uweigand@de.ibm.com> + + * configure.srv (powerpc64-*-linux*, powerpc-*-linux*): Merge into + single powerpc*-*-linux* case. + (s390-*-linux*, s390x-*-linux*): Merge into single s390*-*-linux* case. + +2008-04-17 Ulrich Weigand <uweigand@de.ibm.com> + + * configure.srv [powerpc64-*-linux*]: Remove powerpc-e500.o from + srv_regobj. Remove rs6000/powerpc-e500.xml and rs6000/power-spe.xml + from reg_xmlfiles. + * linux-ppc-low.c: Include <elf.h>. + (PPC_FEATURE_HAS_ALTIVEC, PPC_FEATURE_HAS_SPE): Define. + (ppc_hwcap): New global variable. + (ppc_regmap): Remove __SPE__ #ifdef sections. + (ppc_regmap_e500): New global variable. + (ppc_cannot_store_register): Update __SPE__ special case. + (ppc_get_hwcap): New function. + (ppc_arch_setup): Use it to determine whether inferior supports + AltiVec or SPE registers. Set the_low_target.regmap if appropriate. + (ppc_fill_vrregset, ppc_store_vrregset): Define unconditionally. + Do not access registers if target does not support AltiVec. + (ppc_fill_evrregset, ppc_store_evrregset): Define unconditionally. + Do not access registers if target does not support SPE. + (target_regsets): Unconditionally include AltiVec and SPE regsets. + +2008-04-17 Daniel Jacobowitz <dan@codesourcery.com> + + * linux-low.c (disabled_regsets, num_regsets): New. + (use_regsets_p): Delete. + (linux_wait_for_process): Clear disabled_regsets. + (regsets_fetch_inferior_registers): Check and set it. + (regsets_store_inferior_registers): Likewise. + (linux_fetch_registers, linux_store_registers): Do not use + use_regsets_p. + (initialize_low): Allocate disabled_regsets. + +2008-04-14 Daniel Jacobowitz <dan@codesourcery.com> + + * Makefile.in (LIBOBJS): New. + (OBS): Use LIBOBJS. + (memmem.o): New rule. + * configure.ac: Use AC_CONFIG_LIBOBJ_DIR and check for memmem. + * configure: Regenerated. + +2008-04-04 Ulrich Weigand <uweigand@de.ibm.com> + + * server.c (handle_query): Never return "unsupported" for + qXfer:features:read queries. + +2008-03-27 Ulrich Weigand <uweigand@de.ibm.com> + + * server.c (get_features_xml): Fix inverted condition. + (handle_query): Always support qXfer:feature:read. + +2008-03-10 Daniel Jacobowitz <dan@codesourcery.com> + + * server.c (wrapper_argv): New. + (start_inferior): Handle wrapper_argv. If set, expect an extra + trap. + (gdbserver_usage): Document --wrapper. + (main): Parse --wrapper. + +2008-02-28 Ulrich Weigand <uweigand@de.ibm.com> + + * configure.srv [powerpc64-*-linux*]: Add all files mentioned for + powerpc-*-linux* to srv_regobj and reg_xmlfiles. + * linux-ppc-low.c (ppc_get_pc): Support bi-arch operation. + (ppc_set_pc): Likewise. + (ppc_arch_setup): New function. + (ppc_fill_gregset): Call ppc_collect_ptrace_register instead + of collect_register. + (the_low_target): Use ppc_arch_setup as arch_setup initializer. + +2008-02-28 Ulrich Weigand <uweigand@de.ibm.com> + + * configure.srv [powerpc64-*-linux*]: Use linux-ppc-low.o + instead of linux-ppc64-low.o. + * linux-ppc64-low.c: Remove file. + * Makefile.in (SFILES): Remove linux-ppc64-low.c. + (linux-ppc64-low.o): Remove rule. + + * linux-ppc-low.c (init_registers_ppc64): Add prototype. + (init_registers_powerpc_64): Likewise. + (ppc_regmap): Conditionally define depending on __powerpc64__. + (ppc_cannot_store_register): Do not special-case "fpscr" when + compiled on __powerpc64__. + (ppc_collect_ptrace_register): New function. + (ppc_supply_ptrace_register): New function. + (ppc_breakpoint): Change type to "unsigned int". + (ppc_breakpoint_at): Change type of "insn" to "unsigned int". + (the_low_target): Conditionally provide initializers for the + arch_setup member depending on __powerpc64__. Install + collect_ptrace_register and supply_ptrace_register members. + +2008-02-28 Ulrich Weigand <uweigand@de.ibm.com> + + * regcache.h (gdbserver_xmltarget): Add extern declaration. + * server.c (gdbserver_xmltarget): Define. + (get_features_xml): Use it to replace "target.xml" and arch_string. + + * configure.srv: Remove srv_xmltarget. Add XML files that were + mentioned there to srv_xmlfiles instead. Remove conditional tests + on gdb_cv_arm_iwmmxt, gdb_cv_ppc_altivec, gdb_cv_ppc_spe; set + srv_xmlfiles and srv_regobj to include all possible choices. + * configure.ac (srv_xmltarget): Remove. + (srv_xmlfiles): Do not add "target.xml". + (gdb_cv_arm_iwmmxt, gdb_cv_ppc_altivec, gdb_cv_ppc_spe): Remove + checks for supplementary target information. + * configure: Regenerate. + * Makefile.in (XML_TARGET): Remove. + (target.xml): Remove rule. + (clean): Do not clean up target.xml. + (.PRECIOUS): Do not mention target.xml. + + * target.h (struct target_ops): Remove arch_string member. + * linux-low.c (linux_arch_string): Remove. + (linux_target_ops): Remove arch_string initializer. + * linux-low.h (struct linux_target_ops): Remove arch_string member. + * linux-i386-low.c (the_low_target): Remove arch_string initializer. + * linux-x86-64-low.c (the_low_target): Remove arch_string initializer. + * spu-low.c (spu_arch_string): Remove. + (spu_target_ops): Remove arch_string initializer. + * win32-low.c (win32_arch_string): Remove. + (win32_target_ops): Remove arch_string initializer. + * win32-low.h (struct win32_target_ops): Remove arch_string member. + * win32-arm-low.c (the_low_target): Remove arch_string initializer. + * win32-i368-low.c (the_low_target): Remove arch_string initializer. + +2008-02-27 Ulrich Weigand <uweigand@de.ibm.com> + + * linux-low.h (struct linux_target_ops): Replace left_pad_xfer field + by collect_ptrace_register and supply_ptrace_register hooks. + * linux-low.c (fetch_register): Use supply_ptrace_register callback + instead of checking for the_low_target.left_pad_xfer. + (usr_store_inferior_registers): Use collect_ptrace_register callback + instead of checking for the_low_target.left_pad_xfer. + + * linux-s390-low.c (s390_collect_ptrace_register): New function. + (s390_supply_ptrace_register): Likewise. + (s390_fill_gregset): Call s390_collect_ptrace_register. + (the_low_target): Update. + + * linux-ppc64-low.c (ppc_collect_ptrace_register): New function. + (ppc_supply_ptrace_register): Likewise. + (the_low_target): Update. + + * linux-i386-low.c (the_low_target): Update. + * linux-x86-64-low.c (the_low_target): Update. + +2008-02-27 Ulrich Weigand <uweigand@de.ibm.com> + + * configure.srv [s390x-*-linux*]: Set srv_regobj to include both + reg-s390.o and reg-s390x.o. + + * linux-low.c (new_inferior): New global variable. + (linux_create_inferior, linux_attach): Set it. + (linux_wait_for_process): Call the_low_target.arch_setup after the + target has stopped for the first time. + (initialize_low): Do not call the_low_target.arch_setup. + + * linux-s390-low.c (s390_get_pc): Support bi-arch operation. + (s390_set_pc): Likewise. + (s390_arch_setup): New function. + (the_low_target): Use s390_arch_setup as arch_setup routine. + + * regcache.c (realloc_register_cache): New function. + (set_register_cache): Call it for each existing regcache. + +2008-02-27 Ulrich Weigand <uweigand@de.ibm.com> + + * server.h (init_registers): Remove prototype. + + * linux-low.h (struct linux_target_ops): Add arch_setup field. + * linux-low.c (initialize_low): Call the_low_target.arch_setup () + instead of init_registers (). + * linux-arm-low.c (init_registers_arm): Add prototype. + (init_registers_arm_with_iwmmxt): Likewise. + (the_low_target): Add initializer for arch_setup field. + * linux-cris-low.c (init_registers_cris): Add prototype. + (the_low_target): Add initializer for arch_setup field. + * linux-crisv32-low.c (init_registers_crisv32): Add prototype. + (the_low_target): Add initializer for arch_setup field. + * linux-i386-low.c (init_registers_i386_linux): Add prototype. + (the_low_target): Add initializer for arch_setup field. + * linux-ia64-low.c (init_registers_ia64): Add prototype. + (the_low_target): Add initializer for arch_setup field. + * linux-m32r-low.c (init_registers_m32r): Add prototype. + (the_low_target): Add initializer for arch_setup field. + * linux-m68k-low.c (init_registers_m68k): Add prototype. + (the_low_target): Add initializer for arch_setup field. + * linux-mips-low.c (init_registers_mips_linux): Add prototype. + (init_registers_mips64_linux): Likewise. + (the_low_target): Add initializer for arch_setup field. + * linux-ppc-low.c (init_registers_ppc): Add prototype. + (init_registers_powerpc_32, init_registers_powerpc_e500): Likewise. + (the_low_target): Add initializer for arch_setup field. + * linux-ppc64-low.c (init_registers_ppc64): Add prototype. + (init_registers_powerpc_64): Likewise. + (the_low_target): Add initializer for arch_setup field. + * linux-s390-low.c (init_registers_s390): Add prototype. + (init_registers_s390x): Likewise. + (the_low_target): Add initializer for arch_setup field. + * linux-sh-low.c (init_registers_sh): Add prototype. + (the_low_target): Add initializer for arch_setup field. + * linux-x86-64-low.c (init_registers_x86_64_linux): Add prototype. + (the_low_target): Add initializer for arch_setup field. + * linux-xtensa-low.c (init_registers_xtensa): Add prototype. + (the_low_target): Add initializer for arch_setup field. + + * win32-low.h (struct win32_target_ops): Add arch_setup field. + * win32-low.c (initialize_low): Call the_low_target.arch_setup () + instead of init_registers (). + * win32-arm-low.c (init_registers_arm): Add prototype. + (the_low_target): Add initializer for arch_setup field. + * win32-i386-low.c (init_registers_i386): Add prototype. + (the_low_target): Add initializer for arch_setup field. + + * spu-low.c (init_registers_spu): Add prototype. + (initialize_low): Call initialie_registers_spu () instead of + initialize_registers (). + +2008-02-19 Pedro Alves <pedro@codesourcery.com> + + * server.c (handle_v_requests): When handling the vRun and vAttach + packets, if already debugging a process, don't kill it. Return an + error instead. + +2008-02-17 Daniel Jacobowitz <dan@codesourcery.com> + + * server.c (handle_query): Correct length check. + +2008-02-14 Pedro Alves <pedro_alves@portugalmail.pt> + + * win32-low.c (do_initial_child_stuff): Add process handle + parameter. Set current_process_handle and current_process_id from the + parameters. Clear globals. + (win32_create_inferior): Don't set current_process_handle and + current_process_id here. Instead pass them on the call to + do_initial_child_stuff. + (win32_attach): Likewise. + (win32_clear_inferiors): New. + (win32_kill): Don't close the current process handle or the + current thread handle here. Instead call win32_clear_inferiors. + (win32_detach): Don't open a new handle to the process. Call + win32_clear_inferiors. + (win32_join): Don't rely on current_process_handle; open a new + handle using the process id. + (win32_wait): Call win32_clear_inferiors when the inferior process + has exited. + +2008-02-14 Daniel Jacobowitz <dan@codesourcery.com> + + * server.c (monitor_show_help): Add "exit". + +2008-02-11 Maxim Grigoriev <maxim2405@gmail.com> + + * Makefile.in (SFILES): Add linux-xtensa-low.c. + (clean): Add reg-xtensa.c. + (linux-xtensa-low.o, reg-xtensa.o, reg-xtensa.c): New dependencies. + * configure.srv (xtensa*-*-linux*) New target. + * linux-xtensa-low.c: New. + * xtensa-xtregs.c: New. + +2008-02-01 Pedro Alves <pedro_alves@portugalmail.pt> + + * hostio.c: Don't include errno.h. + (errno_to_fileio_errno): Move to hostio-errno. + * hostio.c: (hostio_error): Remove the error parameter. Defer the + error number outputting to the target->hostio_last_error callback. + (hostio_packet_error): Use FILEIO_EINVAL directly. + (handle_open, handle_pread, hostio_error, handle_unlink): Update + calls to hostio_error. + * hostio-errno.c: New. + * server.h (hostio_last_error_from_errno): Declare. + * target.h (target_ops): Add hostio_last_error member. + * linux-low.c (linux_target_op): Register hostio_last_error_from_errno + as hostio_last_error handler. + * spu-low.c (spu_target_ops): Likewise. + * win32-low.c [_WIN32_WCE] (win32_error_to_fileio_error) + (wince_hostio_last_error): New functions. + (win32_target_ops) [_WIN32_WCE]: Register wince_hostio_last_error + as hostio_last_error handler. + (win32_target_ops) [!_WIN32_WCE]: Register + hostio_last_error_from_errno as hostio_last_error handler. + * Makefile.in (SFILES): Add hostio.c and hostio-errno.c. + (hostio-errno.o): New rule. + * configure.ac (GDBSERVER_DEPFILES): Add $srv_hostio_err_objs. + * configure.srv (srv_hostio_err_objs): New variable. Default to + hostio-errno.o. + (arm*-*-mingw32ce*): Set srv_hostio_err_objs to "". + * configure: Regenerate. + +2008-01-29 Daniel Jacobowitz <dan@codesourcery.com> + + * linux-low.c (linux_attach_lwp): Do not _exit after errors. + (linux_kill, linux_detach): Clean up the process list. + * remote-utils.c (remote_open): Improve port number parsing. + (putpkt_binary, input_interrupt): Only send interrupts if the target + is running. + * server.c (extended_protocol): Make static. + (attached): Define earlier. + (exit_requested, response_needed, program_argv): New variables. + (target_running): New. + (start_inferior): Clear attached here. + (attach_inferior): Set attached here. + (require_running): Define. + (handle_query): Use require_running and target_running. Implement + "monitor exit". + (handle_v_attach, handle_v_run): New. + (handle_v_requests): Use require_running. Handle vAttach and vRun. + (gdbserver_usage): Update. + (main): Redo argument parsing. Handle --debug and --multi. Handle + --attach along with other options or after the port. Save + program_argv. Support no initial program. Resynchronize + communication with GDB after an error. Handle "monitor exit". + Use require_running and target_running. Always allow the extended + protocol. Do not error out for Hc0 or Hc-1. Do not automatically + restart in extended mode. + * README: Refer to the GDB manual. Update --attach usage. + +2007-12-20 Andreas Schwab <schwab@suse.de> + + * linux-low.c (STACK_SIZE): Define. + (linux_tracefork_child): Use it. Use __clone2 on ia64. + (linux_test_for_tracefork): Likewise. + +2007-12-18 Daniel Jacobowitz <dan@codesourcery.com> + + * linux-low.c (linux_wait_for_event): Update messages. Do not + reinsert auto-delete breakpoints. + * mem-break.c (struct breakpoint): Change return type of handler to + int. + (set_breakpoint_at): Update handler type. + (reinsert_breakpoint_handler): Return 1 instead of calling + delete_breakpoint. + (reinsert_breakpoint_by_bp): Check for the original breakpoint before + setting a new one. + (check_breakpoints): Delete auto-delete breakpoints and return 2. + * mem-break.h (set_breakpoint_at): Update handler type. + * thread-db.c (thread_db_create_event, thread_db_create_event): Update. + * win32-low.c (auto_delete_breakpoint): New. + (get_child_debug_event): Use it. + +2007-12-16 Daniel Jacobowitz <dan@codesourcery.com> + + * configure.ac: Check for pread and pwrite. + * hostio.c (handle_pread): Fall back to lseek and read. + (handle_pwrite): Fall back to lseek and write. + * config.in, configure: Regenerated. + +2007-12-07 Daniel Jacobowitz <dan@codesourcery.com> + + * server.c (myresume): Add own_buf argument. + (main): Update calls. + +2007-12-06 Daniel Jacobowitz <dan@codesourcery.com> + + * linux-low.c (linux_wait, linux_resume): Do not handle async I/O. + * remote-utils.c (remote_open): Do not call disable_async_io. + (block_async_io): Delete. + (unblock_async_io): Make static. + (initialize_async_io): New. + * server.c (handle_v_cont): Handle async I/O here. + (myresume): Likewise. Move other common resume tasks here... + (main): ... from here. Call initialize_async_io. Disable async + I/O before the main loop. + * server.h (initialize_async_io): Declare. + (block_async_io, unblock_async_io): Delete prototypes. + * spu-low.c (spu_resume, spu_wait): Do not handle async I/O here. + +2007-12-06 Mick Davis <mickd@goanna.iinet.net.au> + + * remote-utils.c (readchar): Allow binary data in received messages. + +2007-12-03 Pedro Alves <pedro_alves@portugalmail.pt> + + * win32-low.c (attaching): New global. + (win32_create_inferior): Clear the `attaching' global. + (win32_attach): Set the `attaching' global. + (get_child_debug_event) [_WIN32_WCE]: Stop the inferior when + attaching. Only set a breakpoint at the entry point if not + attaching. + +2007-12-03 Pedro Alves <pedro_alves@portugalmail.pt> + + * server.c (main): Don't report dll events on the initial + connection on attaches. + +2007-12-03 Pedro Alves <pedro_alves@portugalmail.pt> + + * server.c (main): Relax numerical bases supported for the pid of + the --attach command line argument. + +2007-12-03 Pedro Alves <pedro_alves@portugalmail.pt> + + * win32-low.c (win32_attach): Call OpenProcess before + DebugActiveProcess, not after. Add last error output to error + call. + +2007-12-03 Pedro Alves <pedro_alves@portugalmail.pt> + + * win32-low.c (win32_get_thread_context) + (win32_set_thread_context): New functions. + (thread_rec): Use win32_get_thread_context. + (continue_one_thread, win32_resume): Use win32_set_thread_context. + * win32-low.h (win32_thread_info) [_WIN32_WCE]: Add `base_context' + field. + +2007-12-03 Leo Zayas + Pedro Alves <pedro_alves@portugalmail.pt> + + * win32-low.c (soft_interrupt_requested, faked_breakpoint): New + global variables. + (child_add_thread): Minor cleanup. + (child_continue): Resume artificially suspended threads before + calling ContinueDebugEvent. + (suspend_one_thread): New. + (fake_breakpoint_event): New. + (get_child_debug_event): Change return type to int. Check here if + gdb sent an interrupt request. If a soft interrupt was requested, + fake a breakpoint event. Return 0 if there is no event to handle, + and 1 otherwise. + (win32_wait): Don't check here if gdb sent an interrupt request. + Ensure there is a valid event to handle. + (win32_request_interrupt): Add soft interruption method as last + resort. + +2007-12-03 Leo Zayas + Pedro Alves <pedro_alves@portugalmail.pt> + + * win32-low.h (win32_thread_info): Add descriptions to the + structure members. Replace `suspend_count' counter by a + `suspended' flag. + * win32-low.c (thread_rec): Update condition of when to get the + context from the inferior. Rely on ContextFlags being set if it + has already been retrieved. Only suspend the inferior thread if + we haven't already. Warn if that fails. + (continue_one_thread): s/suspend_count/suspended/. Only call + ResumeThread once. Warn if that fails. + +2007-12-02 Pedro Alves <pedro_alves@portugalmail.pt> + + * win32-low.c (win32_wait): Don't read from the inferior when it + has already exited. + +2007-12-02 Pedro Alves <pedro_alves@portugalmail.pt> + + * Makefile.in (win32_low_h): New variable. + (win32-low.o): Add dependency on $(win32_low_h). + (win32-arm-low.o, win32-i386-low.o): New rules. + +2007-11-30 Daniel Jacobowitz <dan@codesourcery.com> + + * hostio.c: Correct copyright year. + +2007-11-30 Daniel Jacobowitz <dan@codesourcery.com> + + * Makefile.in (OBS): Add hostio.o. + (hostio.o): New rule. + * server.h (handle_vFile): Declare. + * hostio.c: New file. + * server.c (handle_v_requests): Take packet_len and new_packet_len + for binary packets. Call handle_vFile. + (main): Update call to handle_v_requests. + +2007-11-05 Daniel Jacobowitz <dan@codesourcery.com> + + * linux-low.c: Include <sched.h>. + +2007-11-01 Daniel Jacobowitz <dan@codesourcery.com> + + * linux-low.c (linux_tracefork_grandchild): New. + (linux_tracefork_child): Use clone. + (linux_test_for_tracefork): Use clone; allocate and free a stack. + +2007-10-31 Joel Brobecker <brobecker@adacore.com> + + * Makefile.in: Use $(SHELL) instead of "sh" to call regdat.sh. + +2007-10-24 Daniel Jacobowitz <dan@codesourcery.com> + + * linux-low.c (handle_extended_wait): Handle unexpected signals. + +2007-10-23 Daniel Jacobowitz <dan@codesourcery.com> + + * inferiors.c (change_inferior_id): Delete. + (add_pid_to_list, pull_pid_from_list): New. + * linux-low.c (PTRACE_SETOPTIONS, PTRACE_GETEVENTMSG) + (PTRACE_O_TRACESYSGOOD, PTRACE_O_TRACEFORK, PTRACE_O_TRACEVFORK) + (PTRACE_O_TRACECLONE, PTRACE_O_TRACEEXEC, PTRACE_O_TRACEVFORKDONE) + (PTRACE_O_TRACEEXIT, PTRACE_EVENT_FORK, PTRACE_EVENT_VFORK) + (PTRACE_EVENT_CLONE, PTRACE_EVENT_EXEC, PTRACE_EVENT_VFORK_DONE) + (PTRACE_EVENT_EXIT, __WALL): Provide default definitions. + (stopped_pids, thread_db_active, must_set_ptrace_flags): New variables. + (using_threads): Always set to 1. + (handle_extended_wait): New. + (add_process): Do not set TID. + (linux_create_inferior): Set must_set_ptrace_flags. + (linux_attach_lwp): Remove TID argument. Do not check using_threads. + Use PTRACE_SETOPTIONS. Call new_thread_notify. Update all callers. + (linux_thread_alive): Rename TID argument to LWPID. + (linux_wait_for_process): Handle unknown processes. Do not use TID. + (linux_wait_for_event): Do not use TID or check using_threads. Update + call to dead_thread_notify. Call handle_extended_wait. + (linux_create_inferior): Use PTRACE_SETOPTIONS. + (send_sigstop): Delete sigstop_sent. + (wait_for_sigstop): Avoid TID. + (linux_supports_tracefork_flag, linux_tracefork_child, my_waitpid) + (linux_test_for_tracefork): New. + (linux_lookup_signals): Use thread_db_active and + linux_supports_tracefork_flag. + (initialize_low): Use thread_db_active and linux_test_for_tracefork. + * linux-low.h (get_process_thread): Avoid TID. + (struct process_ifo): Move thread_known and tid to the end. Remove + sigstop_sent. + (linux_attach_lwp, thread_db_init): Update prototypes. + * server.h (change_inferior_id): Delete prototype. + (add_pid_to_list, pull_pid_from_list): New prototypes. + * thread-db.c (thread_db_use_events): New. + (find_first_thread): Rename to... + (find_one_thread): ...this. Update callers and messages. Do not + call fatal. Check thread_db_use_events. Do not call + change_inferior_id or new_thread_notify. + (maybe_attach_thread): Update. Do not call new_thread_notify. + (thread_db_init): Set thread_db_use_events. Check use_events. + * utils.c (fatal, warning): Correct message prefix. + +2007-10-15 Daniel Jacobowitz <dan@codesourcery.com> + + * Makefile.in (clean): Remove new files. + (powerpc-32.o, powerpc-32.c, powerpc-e500.o, powerpc-e500.c) + (powerpc-64.o, powerpc-64.c): New rules. + * configure.srv: Use alternate register sets for powerpc64-*-linux* + with AltiVec, powerpc-*-linux* with AltiVec, and powerpc-*-linux* + with SPE. + * linux-ppc-low.c (ppc_regmap): Do not fetch the FP registers for + SPE targets. + (ppc_cannot_store_register): Do not check for FPSCR for SPE targets. + (PTRACE_GETVRREGS, PTRACE_SETVRREGS, SIZEOF_VRREGS, ppc_fill_vrregset) + (ppc_store_vrregset, PTRACE_GETEVRREGS, PTRACE_SETEVRREGS) + (struct gdb_evrregset_t, ppc_fill_evrregset, ppc_store_evrregset): New. + (target_regsets): Add AltiVec and SPE register sets. + * configure.ac: Check for AltiVec and SPE. + * linux-ppc64-low.c (PTRACE_GETVRREGS, PTRACE_SETVRREGS, SIZEOF_VRREGS) + (ppc_fill_vrregset, ppc_store_vrregset): New. + (target_regsets): Add AltiVec register set. + * configure: Regenerated. + +2007-09-19 Daniel Jacobowitz <dan@codesourcery.com> + + * linux-low.c (O_LARGEFILE): Define. + (linux_read_memory): Use /proc/PID/mem. + * configure.ac: Use AC_GNU_SOURCE. Check for pread64. + * configure, config.in: Regenerated. + +2007-09-04 Daniel Jacobowitz <dan@codesourcery.com> + + * linux-low.c (linux_wait_for_event): Do not pass signals while + single-stepping. + +2007-09-03 Pedro Alves <pedro_alves@portugalmail.pt> + + * win32-low.c (create_process): New. + (win32_create_inferior): Use create_process instead of + CreateProcess. If create_process failed retry appending an ".exe" + suffix. Store the GetLastError result immediatelly after + create_process calls and use it on the call to error. + +2007-09-03 Pedro Alves <pedro_alves@portugalmail.pt> + + * win32-low.c (handle_load_dll): Don't use toolhelp when waiting. + +2007-08-23 Joel Brobecker <brobecker@adacore.com> + + * configure.ac: Switch license to GPLv3. + +2007-08-01 Michael Snyder <msnyder@access-company.com> + + * remote-utils.c (putpkt_binary): Memory leak, free buf2. + +2007-07-31 Pedro Alves <pedro_alves@portugalmail.pt> + + * win32-low.c (winapi_CloseToolhelp32Snapshot) [_WIN32_WCE]: New + typedef. + (win32_CloseToolhelp32Snapshot) [_WIN32_WCE]: New global var. + (load_toolhelp) [_WIN32_WCE]: Load TOOLHELP.DLL. Get + CloseToolhelp32Snapshot. + (toolhelp_get_dll_name) [_WIN32_WCE]: Close the snapshot with + CloseToolhelp32Snapshot. + +2007-07-27 Michael Snyder <michael.snyder@access-company.com> + + * server.c (main): Check for inferior exit before main loop. + +2007-07-18 Pedro Alves <pedro_alves@portugalmail.pt> + + * remote-utils.c (remote_open): Set SO_KEEPALIVE on remote_desc + instead of on tmp_desc. + +2007-07-17 Pedro Alves <pedro_alves@portugalmail.pt> + Daniel Jacobowitz <dan@codesourcery.com> + + * inferiors.c (all_dlls, dlls_changed, get_dll): New. + (add_thread): Minor cleanups. + (clear_inferiors): Move lower in the file. Clear the DLL + list. + (free_one_dll, match_dll, loaded_dll, unloaded_dll, clear_list): New. + * remote-utils.c (prepare_resume_reply): Check dlls_changed. + (xml_escape_text): New. + * server.c (handle_query): Handle qXfer:libraries:read. Report it + for qSupported. + (handle_v_cont): Report errors. + (gdbserver_version): Update. + (main): Correct size of own_buf. Do not report initial DLL events. + * server.h (struct dll_info, all_dlls, dlls_changed, loaded_dll) + (unloaded_dll, xml_escape_text): New. + * win32-low.c (enum target_waitkind): Update comments. + (win32_add_one_solib, get_image_name, winapi_EnumProcessModules) + (winapi_GetModuleInformation, winapi_GetModuleFileNameExA) + (win32_EnumProcessModules, win32_GetModuleInformation) + (win32_GetModuleFileNameExA, load_psapi, psapi_get_dll_name) + (winapi_CreateToolhelp32Snapshot, winapi_Module32First) + (winapi_Module32Next, win32_CreateToolhelp32Snapshot) + (win32_Module32First, win32_Module32Next, load_toolhelp) + (toolhelp_get_dll_name, handle_load_dll, handle_unload_dll): New. + (get_child_debug_event): Handle DLL events. + (win32_wait): Likewise. + +2007-07-12 Daniel Jacobowitz <dan@codesourcery.com> + + * configure.srv: Set srv_linux_regsets for sh*-*-linux*. + * linux-sh-low.c (sh_fill_gregset, target_regsets): New. + +2007-07-08 Pedro Alves <pedro_alves@portugalmail.pt> + + * win32-low.c (handle_output_debug_string): Ignore event if not + waiting. + +2007-07-08 Pedro Alves <pedro_alves@portugalmail.pt> + + * win32-arm-low.c (arm_wince_breakpoint): Fix typo. + +2007-07-03 Daniel Jacobowitz <dan@codesourcery.com> + + * remote-utils.c (look_up_one_symbol): Handle 'm' packets. + +2007-07-02 Daniel Jacobowitz <dan@codesourcery.com> + + * inferiors.c (change_inferior_id): Add comment. + * linux-low.c (check_removed_breakpoint): Add an early + prototype. Improve debug output. + (linux_attach): Doc update. + (linux_detach_one_process, linux_detach): Clean up before releasing + each process. + (send_sigstop, wait_for_sigstop): Improve comments and debug output. + * linux-low.h (struct process_info): Doc improvement. + * mem-break.c (delete_all_breakpoints): New. + * mem-break.h (delete_all_breakpoints): New prototype. + * thread-db.c (find_first_thread): New. + (thread_db_create_event): Call it instead of + thread_db_find_new_threads. Clean up unused variables. + (maybe_attach_thread): Remove first thread handling. + (thread_db_find_new_threads): Use find_first_thread. + (thread_db_get_tls_address): Likewise. + +2007-06-27 Daniel Jacobowitz <dan@codesourcery.com> + + * thread-db.c (thread_db_find_new_threads): Add prototype. + (thread_db_create_event): Check for the main thread before adding + a new thread. + (maybe_attach_thread): Only enable event reporting if TID == 0. + (thread_db_get_tls_address): Check for new threads. + +2007-06-20 Daniel Jacobowitz <dan@codesourcery.com> + + * linux-low.c (linux_create_inferior): Try execv before execvp. + * spu-low.c (spu_create_inferior): Likewise. + +2007-06-13 Mike Frysinger <vapier@gentoo.org> + + * linux-low.c (linux_create_inferior): Change execv to execvp. + * spu-low.c (spu_create_inferior): Likewies. + +2007-06-13 Daniel Jacobowitz <dan@codesourcery.com> + + * Makefile.in (clean): Clean new files instead of deleted ones. + (reg-mips.o, reg-mips.c, reg-mips64.o, reg-mips64.c): Delete. + (mips-linux.o, mips-linux.c, mips64-linux.o, mips64-linux.c): New + rules. + * configure.srv: Specify XML files and new regformats for MIPS and + MIPS64 GNU/Linux. + * linux-mips-low.c (mips_num_regs): Set to only used registers. + (mips_regmap): Do not fetch $0. Remove unused registers. Add + an entry for the restart register. + (mips_cannot_fetch_register, mips_cannot_store_register) + (mips_reinsert_addr, mips_fill_fpregset, mips_store_fpregset): Update + register names to match the XML descriptions. + (mips_fill_gregset, mips_store_gregset): Likewise. Handle the + restart register instead of $0. + +2007-06-12 Ulrich Weigand <uweigand@de.ibm.com> + Markus Deuling <deuling@de.ibm.com> + + * remote-utils.c (decode_xfer_write): New function. + * server.h (decode_xfer_write): Add prototype. + * server.c (handle_query): Add PACKET_LEN argument. Support + qXfer:spu:read and qXfer:spu:write packets. + (main): Pass packet_len to handle_query. + * spu-low.c (spu_target_ops): Add spu_proc_xfer_spu. + * target.h (target_ops): Add qxfer_spu. + +2007-06-12 Ulrich Weigand <uweigand@de.ibm.com> + + * spu-low.c (spu_proc_xfer_spu): Do not return failure when + accessing non-seekable spufs files. + +2007-05-16 Markus Deuling <deuling@de.ibm.com> + + * server.c (handle_query): Add reply for qC packet. + +2007-05-10 Pedro Alves <pedro_alves@portugalmail.pt> + Leo Zayas <lerele@champenstudios@com> + + * server.h (check_remote_input_interrupt_request): New function. + * remote_utils.c (INVALID_DESCRIPTOR): New define. + (remote_desc): Initialize with INVALID_DESCRIPTOR. + (input_interrupt): Expose on USE_WIN32API too. Fix whitespace. + (check_remote_input_interrupt_request): New function. + * server.h (check_remote_input_interrupt_request): Declare. + * win32-low.c (winapi_DebugBreakProcess, + winapi_GenerateConsoleCtrlEvent): New typedefs. + (get_child_debug_event): Lower Win32 debug event polling from 1 sec + to 250 ms. + (win32_wait): Check for remote interrupt request + with check_remote_input_interrupt_request. + (win32_request_interrupt): New function. + (win32_target_op): Set request_interrupt to win32_request_interrupt. + +2007-05-10 Pedro Alves <pedro_alves@portugalmail.pt> + + * win32-low.c (debug_registers_changed, + debug_registers_used, CONTEXT_EXTENDED_REGISTERS, + CONTEXT_FLOATING_POINT, CONTEXT_DEBUG_REGISTERS, + CONTEXT_DEBUGGER, CONTEXT_DEBUGGER_DR): Delete. + (thread_rec): Get context using the low target. + (child_add_thread): Call thread_added on the low target, + which does the same thing. + (regptr): Delete. + (do_initial_child_stuff): Remove debug registers references. + Set context using the low target. Resume threads after + setting the contexts. + (child_continue): Remove dead variable. Remove debug + registers references. + (child_fetch_inferior_registers): Go through the low target. + (do_child_store_inferior_registers): Remove. + (child_store_inferior_registers): Go through the low target. + (win32_resume): Remove debug registers references. + Set context using the low target. + (handle_exception): Change return type to void. Don't record + context here. Set status to TARGET_WAITKIND_SPURIOUS on a + first chance exception. + (get_child_debug_event): Change return type to void. Remove + goto loop. Always return after waiting for debug event. + (win32_wait): Convert to switch statement. Handle spurious + events. + + * win32-i386-low.c (debug_registers_changed, + debug_registers_used): New. + (initial_stuff): Rename to ... + (i386_initial_stuff): ... this. Clear debug registers + state variables. + (store_debug_registers): Delete. + (i386_get_thread_context): New. + (load_debug_registers): Delete. + (i386_set_thread_context): New. + (i386_thread_added): New. + (single_step): Rename to ... + (i386_single_step): ... this. + (do_fetch_inferior_registers): Rename to ... + (i386_fetch_inferior_register): ... this. + (i386_store_inferior_register): New. + (the_low_target): Adapt to new interface. + + * win32-arm-low.c (CONTEXT_FLOATING_POINT): Define. + (arm_get_thread_context): New. + (arm_set_thread_context): New. + (regptr): New. + (do_fetch_inferior_registers): Rename to ... + (arm_fetch_inferior_register): ... this. + (arm_store_inferior_register): New. + (arm_wince_breakpoint): Reimplement as unsigned long. + (arm_wince_breakpoint_len): Define. + (the_low_target): Adapt to new interface. + + * win32-low.h (target_ops): Remove regmap, store_debug_registers and + load_debug_registers. Add get_thread_context, set_thread_context, + thread_added and store_inferior_register. Rename + fetch_inferior_registers to fetch_inferior_register. + (regptr): Remove declaration. + +2007-05-10 Pedro Alves <pedro_alves@portugalmail.pt> + + * linux-low.c (linux_detach): Change return type to int. Return 0. + * spu-low.c (spu_detach): Likewise. + +2007-05-10 Pedro Alves <pedro_alves@portugalmail.pt> + + * target.h (target_ops): Change return type of detach to int. + Add join. + (join_inferior): New. + * server.c (main): Don't skip detach support on mingw32. + If the inferior doesn't support detaching return error. + Call join_inferior instead of using waitpid. + * linux-low.c (linux_join): New. + (linux_target_op): Add linux_join. + * spu-low.c (spu_join): New. + (spu_target_ops): Add spu_join. + * win32-low.c (win32_detach): Adapt to new interface. + Reopen current_process_handle before detaching. Issue a child + resume before detaching. + (win32_join): New. + (win32_target_op): Add win32_join. + +2007-05-10 Pedro Alves <pedro_alves@portugalmail.pt> + + * win32-low.c (win32-attach): Fix return value. + * target.h (target_ops): Describe ATTACH return values. + +2007-05-10 Pedro Alves <pedro_alves@portugalmail.pt> + + * win32-low.c (GETPROCADDRESS): Define. + (winapi_DebugActiveProcessStop): Add WINAPI. typedef as pointer. + (winapi_DebugSetProcessKillOnExit): Likewise. + (win32_create_inferior): Force usage of ansi CreateProcessA. + (win32_attach): Use GETPROCADDRESS. + (win32_detach): Likewise. + +2007-05-10 Pedro Alves <pedro_alves@portugalmail.pt> + + * win32-low.c (win32_wait): Don't use WSTOPSIG. + +2007-03-30 Pedro Alves <pedro_alves@portugalmail.pt> + + * win32-low.c: Commit leftover changes from 2007-03-29. + +2007-03-30 Daniel Jacobowitz <dan@codesourcery.com> + + * i387-fp.c (struct i387_fsave, struct i387_fxsave): Make 16-bit + fields short instead of int. Add explicit padding. + (i387_cache_to_fsave): Remove unnecessary casts. + (i387_fsave_to_cache): Doc fix. + (i387_cache_to_fxsave): Remove unnecessary casts and masking. + +2007-03-30 Daniel Jacobowitz <dan@codesourcery.com> + + * i387-fp.c (i387_cache_to_fxsave): Reinitialize val2 before use. + (i387_fxsave_to_cache): Check fp->ftag while building ftag value. + +2007-03-29 Pedro Alves <pedro_alves@portugalmail.pt> + + * configure.srv (arm*-*-mingw32ce*): Move near the other + arm targets. + +2007-03-29 Pedro Alves <pedro_alves@portugalmail.pt> + + * configure.ac: Add errno checking. + (AC_CHECK_HEADERS): Add errno.h, fcntl.h, signal.h, + sys/file.h and malloc.h. + (AC_CHECK_DECLS): Add perror. + (srv_mingwce): Handle. + * configure.srv (i[34567]86-*-cygwin*): Add + win32-i386-low.o to srv_tgtobj. + (i[34567]86-*-mingw*): Likewise. + (arm*-*-mingw32ce*): Add case. + * gdbreplay.c [HAVE_SYS_FILE_H, HAVE_SIGNAL_H, + HAVE_FCNTL_H, HAVE_ERRNO_H, HAVE_MALLOC_H]: Check. + [__MINGW32CE__] (strerror): New function. + [__MINGW32CE__] (errno): Define to GetLastError. + [__MINGW32CE__] (COUNTOF): New macro. + (remote_open): Remove extra close call. + * mem-break.c (delete_breakpoint_at): New function. + * mem-break.h (delete_breakpoint_at): Declare. + * remote-utils.c [HAVE_SYS_FILE_H, HAVE_SIGNAL_H, + HAVE_FCNTL_H, HAVE_UNISTD_H, HAVE_ERRNO_H]: Check. + [USE_WIN32API] (read, write): Add char* casts. + * server.c [HAVE_UNISTD_H, HAVE_SIGNAL_H]: Check. + * server.h: Include wincecompat.h on Windows CE. + [HAVE_ERRNO_H]: Check. + (perror): Declare if not declared. + * utils.c: Add stdlib.h, errno.h and malloc.h includes. + (perror_with_name): Remove errno declaration. + * wincecompat.h: New. + * wincecompat.c: New. + * win32-low.h: New. + * win32-arm-low.c: New. + * win32-i386-low.c: New. + (win32-low.c): Include mem-break.h and win32-low.h, and winnt.h. + (OUTMSG2): Make it safe. + (_T): New macro. + (COUNTOF): New macro. + (NUM_REGS): Get it from the low target. + (CONTEXT_EXTENDED_REGISTERS, CONTEXT_FLOATING_POINT, + CONTEXT_DEBUG_REGISTERS): Add fallbacks to 0. + (thread_rec): Let low target handle debug registers. + (child_add_thread): Likewise. + (child_init_thread_list): Likewise. + (continue_one_thread): Likewise. + (regptr): New. + (do_child_fetch_inferior_registers): Move to ... + * win32-i386-low.c: ... here, and rename to ... + (do_fetch_inferior_registers): ... this. + * win32-low.c (child_fetch_inferior_registers): + Go through the low target. + (do_child_store_inferior_registers): Use regptr. + (strwinerror): New function. + (win32_create_inferior): Handle Windows CE. + Use strwinerror instead of strerror on Windows error + codes. Add program to the error output. + Don't close the main thread handle on Windows CE. + (win32_attach): Use coredll.dll on Windows CE. + (win32_kill): Close current process and current + thread handles. + (win32_detach): Use coredll.dll on Windows CE. + (win32_resume): Let low target handle debug registers, and + step request. + (handle_exception): Add/Remove initial breakpoint. Avoid + non-existant WSTOPSIG on Windows CE. + (win32_read_inferior_memory): Cast to remove warning. + (win32_arch_string): Go through the low target. + (initialize_low): Call set_breakpoint_data with the low + target's breakpoint. + * win32-low.c (dr, FLAG_TRACE_BIT, FCS_REGNUM, + FOP_REGNUM, mappings): Move to ... + * win32-i386-low.c: ... here. + * win32-low.c (win32_thread_info): Move to ... + * win32-low.h: ... here. + * Makefile.in (SFILES): Add win32-low.c, win32-i386-low.c, + win32-arm-low.c and wincecompat.c. + (all:): Add $EXEEXT. + (install-only:): Likewise. + (gdbserver:): Likewise. + (gdbreplay:): Likewise. + * config.in: Regenerate. + * configure: Regenerate. + +2007-03-28 Pedro Alves <pedro_alves@portugalmail.pt> + + * win32-low.c: Rename typedef thread_info to + win32_thread_info throughout. + +2007-03-28 Pedro Alves <pedro_alves@portugalmail.pt> + + * win32-i386-low.c: Rename to ... + * win32-low.c: ... this. + * configure.srv: Replace win32-i386-low.o with win32-low.o. + * Makefile.in: Likewise. + +2007-03-27 Pedro Alves <pedro_alves@portugalmail.pt> + + * remote-utils.c (monitor_output): Constify msg parameter. + * server.h (monitor_output): Likewise. + * win32-i386-low.c (handle_output_debug_string): New. + (win32_kill): Handle OUTPUT_DEBUG_STRING_EVENT events using + handle_output_debug_string. + (get_child_debug_event): Likewise. + +2007-03-27 Mat Hostetter <mat@lcs.mit.edu> + + * server.c (main): Correct strtoul check. + +2007-03-27 Jon Ringle <jon@ringle.org> + + * linux-low.c: Check __ARCH_HAS_MMU__ also. + +2007-03-27 Brooks Moses <brooks.moses@codesourcery.com> + + * Makefile.in: Add dummy "pdf" and "install-pdf" targets. + +2007-02-27 Daniel Jacobowitz <dan@codesourcery.com> + + * terminal.h: Check HAVE_SGTTY_H. + +2007-02-27 Mat Hostetter <mat@lcs.mit.edu> + + * remote-utils.c (remote_open): Print out the assigned port number. + +2007-02-26 Daniel Jacobowitz <dan@codesourcery.com> + + * remote-utils.c (monitor_output): New function. + * server.c (debug_threads): Define here. + (monitor_show_help): New function. + (handle_query): Handle qRcmd. + (main): Do not handle 'd' packet. + * server.h (debug_threads, remote_debug, monitor_output): Declare. + * linux-low.c, spu-low.c, win32-i386-low.c: Remove definitions + of debug_threads. + +2007-02-25 Pedro Alves <pedro_alves@portugalmail.pt> + + * Makefile.in (EXEEXT): New. + (clean): Use $(EXEEXT). + +2007-02-25 Pedro Alves <pedro_alves@portugalmail.pt> + + * target.h (target_ops): Rename send_signal to request_interrupt, + and remove enum target_signal parameter. + * linux-low.c (linux_request_interrupt): Rename from + linux_send_signal, and always send SIGINT. + * spu-low.c (spu_request_interrupt): Rename from spu_send_signal, + and always send SIGINT. + * remote-utils.c (putpkt_binary): Call request_interrupt, instead + of send_signal. + (input_interrupt): Likewise. + +2007-02-25 Pedro Alves <pedro_alves@portugalmail.pt> + + * server.c (get_features_xml): Check if target implemented + arch_string. + * win32-i386-low.c (win32_arch_string): New. + (win32_target_ops): Add win32_arch_string as arch_string member. + +2007-02-22 Markus Deuling <deuling@de.ibm.com> + + * spu-low.c (spu_arch_string): New. + (spu_target_ops): Add spu_arch_string. + +2007-02-16 Daniel Jacobowitz <dan@codesourcery.com> + + * remote-utils.c: Remove HAVE_TERMINAL_H check. + * configure.ac: Do not check for terminal.h. + * configure, config.in: Regenerated. + +2007-02-08 Daniel Jacobowitz <dan@codesourcery.com> + + * Makefile.in (OBS): Add $(XML_BUILTIN). + (XML_DIR, XML_TARGET, XML_FILES, XML_BUILTIN): New. + (clean): Update. + (target.xml, xml-builtin.c, stamp-xml, arm-with-iwmmxt.o) + (arm-with-iwmmxt.c): New. + * config.in, configure: Regenerate. + * configure.ac: Check for iWMMXt. Handle srv_xmltarget, + srv_xmlbuiltin, and srv_xmlfiles. Define USE_XML. + * configure.srv: Mention srv_xmltarget and srv_xmlfiles. + (arm*-*-linux*): Add iWMMXt and regset support. + * linux-arm-low.c (PTRACE_GETWMMXREGS, PTRACE_SETWMMXREGS): Define. + (arm_fill_gregset, arm_store_gregset, arm_fill_wmmxregset) + (arm_store_wmmxregset, target_regsets): New. + * server.c (get_features_xml): Take annex argument. Check builtin + XML documents. + (handle_query): Handle multiple annexes. + +2007-01-29 Daniel Jacobowitz <dan@codesourcery.com> + + * remote-utils.c [USE_WIN32API] (read, write): Define. + (putpkt_binary, input_interrupt, readchar, getpkt): Use read and + write. + +2007-01-09 Daniel Jacobowitz <dan@codesourcery.com> + + * linux-i386-low.c (the_low_target): Set arch_string. + * linux-x86-64-low.c (the_low_target): Likewise. + * linux-low.c (linux_arch_string): New. + (linux_target_ops): Add it. + * linux-low.h (struct linux_target_ops): Add arch_string. + * server.c (write_qxfer_response): Use const void * for DATA. + (get_features_xml): New. + (handle_query): Handle qXfer:features:read. Report it for qSupported. + * target.h (struct target_ops): Add arch_string method. + +2007-01-03 Denis Pilat <denis.pilat@st.com> + Daniel Jacobowitz <dan@codesourcery.com> + + * linux-low.c (linux_kill): Handle being called with no threads. + * win32-i386-low.c (win32_kill): Likewise. + (get_child_debug_event): Clear current_process_handle. + +2006-12-30 Denis PILAT <denis.pilat@st.com> + Daniel Jacobowitz <dan@codesourcery.com> + + * remote-utils.c (remote_open): Check the type of specified + serial port devices before opening them. + * server.c (main): Kill the inferior if an error occurs during + the first remote_open. + +2006-12-05 Markus Deuling <deuling@de.ibm.com> + + * README: Update supported targets. + +2006-11-28 Daniel Jacobowitz <dan@codesourcery.com> + + * Makefile.in (clean): Remove reg-mips64.c. + (reg-mips64.c, reg-mips64.o): New rules. + * configure.srv: Handle mips64. Include regset support for mips. + * linux-mips-low.c (union mips_register): New. + (mips_get_pc, mips_set_pc, mips_reinsert_addr): Use it. + (mips_breakpoint, mips_breakpoint_at): Use int. + (mips_collect_register, mips_supply_register) + (mips_collect_register_32bit, mips_supply_register_32bit) + (mips_fill_gregset, mips_store_gregset, mips_fill_fpregset) + (mips_store_fpregset, target_regsets): New. + * thread-db.c (thread_db_get_tls_address): Use uintptr_t. + +2006-11-22 Ulrich Weigand <uweigand@de.ibm.com> + + * configure.srv: Add target "spu*-*-*". + * Makefile.in (clean): Remove reg-spu.c. + (reg-spu.c, reg-spu.o, spu-low.o): Add dependencies. + * spu-low.c: New file. + +2006-11-16 Daniel Jacobowitz <dan@codesourcery.com> + + * configure.ac: Correct td_thr_tls_get_addr test. + * configure: Regenerated. + +2006-11-16 Daniel Jacobowitz <dan@codesourcery.com> + + * linux-low.c (linux_wait_for_event): Reformat. Use the + pass_signals array. + * remote-utils.c (decode_address_to_semicolon): New. + * server.c (pass_signals, handle_general_set): New. + (handle_query): Mention QPassSignals for qSupported. + (main): Call handle_general_set. + * server.h (pass_signals, decode_address_to_semicolon): New. + +2006-11-06 Daniel Jacobowitz <dan@codesourcery.com> + + * server.c (handle_query): Correct error handling for read_auxv. + +2005-10-19 Ulrich Weigand <uweigand@de.ibm.com> + + * configure.srv [s390-*-linux*, s390x-*-linux*]: Set srv_linux_regsets + and srv_linux_thread_db to yes. + * linux-s390-low.c (s390_fill_gregset): New function. + (target_regsets): Define data structure. + +2006-10-17 Daniel Jacobowitz <dan@codesourcery.com> + + * acinclude.m4 (SRV_CHECK_TLS_GET_ADDR): New. + * configure.ac: Use it. Define HAVE_TD_THR_TLS_GET_ADDR. + * config.in, configure: Regenerated. + * inferiors.c (gdb_id_to_thread): New function. + (gdb_id_to_thread_id): Use it. + * linux-low.c (linux_target_ops): Use thread_db_get_tls_address. + * linux-low.h (struct process_info): Add th member. + (thread_db_get_tls_address): New prototype. + * remote-utils.c (decode_address): Make non-static. + * server.c (handle_query): Handle qGetTLSAddr. + * server.h (gdb_id_to_thread, decode_address): New prototypes. + * target.h (struct target_ops): Add get_tls_address. + * thread-db.c (maybe_attach_thread): Save the thread handle. + (thread_db_get_tls_address): New. + +2006-09-28 Daniel Jacobowitz <dan@codesourcery.com> + + * linux-low.c (PTRACE_GETSIGINFO, PTRACE_SETSIGINFO): Define. + (linux_resume_one_process): Take a siginfo_t *. Update all + callers. Queue it if necessary. Use PTRACE_SETSIGINFO. + (struct pending_signals): Add a siginfo_t. + (linux_wait_for_process): Always set last_status. + (linux_wait_for_event): Use PTRACE_GETSIGINFO. + (linux_queue_one_thread): Use PTRACE_GETSIGINFO. + * linux-low.h (struct process_info): Add last_status. + +2006-09-21 Daniel Jacobowitz <dan@codesourcery.com> + + * remote-utils.c (try_rle): New function. + (putpkt_binary): Use it. + +2006-08-19 Daniel Jacobowitz <dan@codesourcery.com> + + * Makefile.in (clean): Clean reg-x86-64-linux.c. + (reg-x86-64-linux.o, reg-x86-64-linux.c): New. + * configure.srv (x86_64-*-linux*): Use reg-x86-64-linux.o. + * linux-x86-64-low.c (x86_64_regmap): Include ORIG_RAX. + (x86_64_fill_gregset, x86_64_store_gregset): Skip floating + point registers. + +2006-08-08 Richard Sandiford <richard@codesourcery.com> + + * server.c (terminal_fd): New variable. + (old_foreground_pgrp): Likewise. + (restore_old_foreground_pgrp): New function. + (start_inferior): Record the terminal file descriptor in terminal_fd + and its original foreground group in old_foreground_pgrp. Register + restore_old_foreground_pgrp with atexit(). + +2006-07-26 Daniel Jacobowitz <dan@codesourcery.com> + + * server.c (handle_query): Correct qPart to qXfer. + +2006-07-22 Daniel Jacobowitz <dan@codesourcery.com> + + * configure.ac: Check for more headers which are missing on + Windows. Automatically supply -lwsock32 and USE_WIN32API. + * configure.srv: Add Cygwin and mingw32. + * remote-utils.c: Don't include headers unconditionally which + are missing on mingw32. Include <winsock.h> for mingw32. + (remote_open): Adjust for mingw32 support. Flush + standard error after writing to it. + (remote_close, putpkt_binary, input_interrupt, block_async_io) + (unblock_async_io, enable_async_io, disable_async_io) + (readchar, getpkt): Update for Winsock support. + (prepare_resume_reply): Expect a protocol signal number. + * server.c: Disable <sys/wait.h> on mingw32. + (start_inferior): Adjust for mingw32 support. Flush + standard error after writing to it. + (attach_inferior): Likewise. Use protocol signal + numbers. + (main): Skip 'D' packet on mingw32. Use protocol signal numbers + and names. + * win32-i386-low.c: New file. + * Makefile.in (XM_CLIBS): Set. + (gdbserver, gdbreplay): Use $(INTERNAL_CFLAGS). + (win32-i386-low.o): New dependency rule. + * linux-low.c (linux_wait): Use target signal numbers. + * target.h (struct target_ops): Doc fix. + * server.h (target_signal_to_name): New prototype. + * gdbreplay.c: Don't include headers unconditionally which + are missing on mingw32. Include <winsock.h> for mingw32. + (remote_close, remote_open): Adjust for Winsock support. + * configure, config.in: Regenerated. + +2006-07-12 Daniel Jacobowitz <dan@codesourcery.com> + + * server.c (decode_xfer_read, write_qxfer_response): New. + (handle_query): Take a packet length argument. Handle + qXfer:auxv:read instead of qPart:auxv:read. Mention it in + the qSupported response. + (main): Update call to handle_query. + +2006-06-22 Daniel Jacobowitz <dan@codesourcery.com> + + * remote-utils.c (remote_escape_output, remote_unescape_input): New. + (putpkt_binary): Renamed from putpkt and adjusted for binary + data. + (putpkt): New wrapper for putpkt_binary. + (readchar): Don't mask off the high bit. + (decode_X_packet): New function. + * server.c (main): Call putpkt_binary if a handler sets the packet + length. Save the length of the incoming packet. Handle 'X'. + * server.h (gdb_byte, remote_escape_output, decode_X_packet): New. + +2006-06-21 Daniel Jacobowitz <dan@codesourcery.com> + + * server.c (handle_query): Handle qSupported. + +2006-05-30 Daniel Jacobowitz <dan@codesourcery.com> + + * remote-utils.c (all_symbols_looked_up): New variable. + (look_up_one_symbol): Check it. + * server.h (look_up_one_symbol): New declaration. + * thread-db.c (thread_db_init): Set all_symbols_looked_up. + +2006-05-30 Daniel Jacobowitz <dan@codesourcery.com> + + * Makefile.in (linux-arm-low.o): Update dependencies. + * linux-arm-low.c: Include "gdb_proc_service.h". + (PTRACE_GET_THREAD_AREA): Define. + (ps_get_thread_area): New function. + +2006-05-09 Nathan Sidwell <nathan@codesourcery.com> + + * configure.srv (m68k*-*-uclinux*): New target. + * linux-low.c (linux_create_inferior): Use vfork on mmuless systems. + (linux_resume_one_process): Remove extraneous cast. + (linux_read_offsets): New. + (linux_target_op): Add linux_read_offsets on mmuless systems. + * server.c (handle_query): Add qOffsets logic. + * target.h (struct target_ops): Add read_offsets. + +2006-03-15 Daniel Jacobowitz <dan@codesourcery.com> + + * linux-mips-low.c: Include <sys/ptrace.h> and "gdb_proc_service.h". + (PTRACE_GET_THREAD_AREA): Define. + (ps_get_thread_area): New function. + * Makefile.in (linux-i386-low.o, linux-mips-low.o) + (linux-x86-64-low.o): Update. + +2006-03-15 Daniel Jacobowitz <dan@codesourcery.com> + + * configure.ac: Remove checks for prfpregset_t. + * gdb_proc_service.h: New file. + * linux-i386-low.c, linux-x86-64-low.c, thread-db.c: Use the + new "gdb_proc_service.h". + * proc-service.c: Likewise. + (ps_pglobal_lookup, ps_pdread, ps_pdwrite): Use psaddr_t. + (ps_lgetfpregs, ps_lsetfpregs): Use a void* argument. + * Makefile.in (gdb_proc_service_h): Updated. + * configure, config.in: Regenerated. + +2006-03-03 Daniel Jacobowitz <dan@codesourcery.com> + + * remote-utils.c (prepare_resume_reply): Move declaration + of gdb_id_from_wait to the top of the block. + +2006-02-15 Daniel Jacobowitz <dan@codesourcery.com> + + * linux-low.c (regsets_store_inferior_registers): Read the regset + from the target before filling it. + +2006-02-08 Daniel Jacobowitz <dan@codesourcery.com> + + * server.c (attach_inferior): Return SIGTRAP for a successful + attach. + +2006-02-01 Daniel Jacobowitz <dan@codesourcery.com> + + * Makefile.in (OBS): Add version.o. + (STAGESTUFF): Delete. + (version.o): Add dependencies. + (version.c): Replace rule. + (clean): Remove version.c. + * server.c (gdbserver_version): New. + (gdbserver_usage): Use printf. + (main): Handle --version and --help. + * server.h (version, host_name): Add declarations. + +2005-12-23 Eli Zaretskii <eliz@gnu.org> + + * linux-arm-low.c: + * linux-arm-low.c: + * inferiors.c: + * i387-fp.h: + * i387-fp.c: + * gdbreplay.c: + * regcache.c: + * proc-service.c: + * mem-break.h: + * mem-break.c: + * linux-x86-64-low.c: + * linux-sh-low.c: + * linux-s390-low.c: + * linux-ppc64-low.c: + * linux-ppc-low.c: + * linux-mips-low.c: + * linux-m68k-low.c: + * linux-m32r-low.c: + * linux-low.h: + * linux-low.c: + * linux-ia64-low.c: + * linux-i386-low.c: + * linux-crisv32-low.c: + * thread-db.c: + * terminal.h: + * target.h: + * target.c: + * server.h: + * server.c: + * remote-utils.c: + * regcache.h: + * utils.c: + * Makefile.in: + * configure.ac: + * gdbserver.1: Add (C) after Copyright. Update the FSF + address. + +2005-11-13 Daniel Jacobowitz <dan@codesourcery.com> + + * linux-arm-low.c (arm_eabi_breakpoint): New variable. + (arm_breakpoint_at): Recognize both breakpoints. + (the_low_target): Use the correct breakpoint instruction. + +2005-11-02 Daniel Jacobowitz <dan@codesourcery.com> + + * configure.srv (x86_64-*-linux*): Turn on thread_db support. + * linux-x86-64-low.c (x86_64_breakpoint, x86_64_breakpoint_len) + (x86_64_get_pc, x86_64_set_pc, x86_64_breakpoint_at): New. + (the_low_target): Update. + +2005-10-25 Andreas Schwab <schwab@suse.de> + + * server.c (main): Allocate mem_buf with PBUFSIZ bytes. + + * linux-ia64-low.c (ia64_regmap): Remove NAT registers. + (ia64_num_regs): Reduce to 462. + +2005-09-17 Daniel Jacobowitz <dan@codesourcery.com> + + * acinclude.m4: Correct quoting. + * aclocal.m4: Regenerated. + + Suggested by SZOKOVACS Robert <szo@ies.hu>: + * thread-db.c (thread_db_err_str): Handle TD_VERSION. + (thread_db_init): Call thread_db_err_str. + * configure.ac: Check for TD_VERSION. + * config.in, configure: Regenerated. + +2005-07-31 Kaveh R. Ghazi <ghazi@caip.rutgers.edu> + + * server.h (error, fatal, warning): Add ATTR_FORMAT. + +2005-07-13 Daniel Jacobowitz <dan@codesourcery.com> + + * configure.ac: Define HAVE_LINUX_REGSETS even if PTRACE_GETREGS + is not available. Define HAVE_PTRACE_GETREGS if it is. + * config.in, configure: Regenerated. + * configure.srv: Set srv_linux_regsets for PowerPC and PowerPC64. + * linux-i386-low.c, linux-m68k-low.c: Update to use + HAVE_PTRACE_GETREGS. + * linux-low.c (regsets_fetch_inferior_registers) + (regsets_store_inferior_registers): Only return 0 if we processed + GENERAL_REGS. + * linux-ppc-low.c (ppc_fill_gregset, target_regsets): New. + * linux-ppc64-low.c (ppc_fill_gregset, target_regsets): New. + +2005-07-13 Daniel Jacobowitz <dan@codesourcery.com> + + * inferiors.c (struct thread_info): Add gdb_id. + (add_thread): Add gdb_id argument. + (thread_id_to_gdb_id, thread_to_gdb_id, gdb_id_to_thread_id): New. + * linux-low.c (linux_create_inferior, linux_attach_lwp): Update + calls to add_thread. + * remote-utils.c (prepare_resume_reply: Use thread_to_gdb_id. + * server.c (handle_query): Use thread_to_gdb_id. + (handle_v_cont, main): Use gdb_id_to_thread_id. + * server.h (add_thread): Update prototype. + (thread_id_to_gdb_id, thread_to_gdb_id, gdb_id_to_thread_id): New + prototypes. + +2005-07-13 Daniel Jacobowitz <dan@codesourcery.com> + + * linux-low.c (fetch_register, usr_store_inferior_registers): Handle + left-padded registers. + * linux-low.h (struct linux_target_ops): Add left_pad_xfer. + * linux-ppc64-low.c (the_low_target): Set left_pad_xfer. + +2005-07-01 Steve Ellcey <sje@cup.hp.com> + + * configure.ac (BFD_NEED_DECLARATION): Replace with AC_CHECK_DECLS. + * configure: Regenerate. + * config.in: Regenerate. + * server.h (NEED_DECLARATION_STRERROR): + Replace with !HAVE_DECL_STRERROR. + +2005-06-16 Daniel Jacobowitz <dan@codesourcery.com> + + * linux-low.c (linux_wait, linux_send_signal): Don't test + an unsigned long variable for > 0 if it could be MAX_ULONG. + * server.c (myresume): Likewise. + * target.c (set_desired_inferior): Likewise. + +2005-06-13 Mark Kettenis <kettenis@gnu.org> + + * configure.ac: Simplify and improve check for socklen_t. + * configure, config.in: Regenerate. + +2005-06-12 Daniel Jacobowitz <dan@codesourcery.com> + + * acconfig.h: Remove. + * configure.ac: Add a test for socklen_t. Use three-argument + AC_DEFINE throughout. + * config.in: Regenerated using autoheader 2.59. + * configure: Regenerated. + + * gdbreplay.c (socklen_t): Provide a default. + (remote_open): Use socklen_t. + * remote-utils.c (socklen_t): Provide a default. + (remote_open): Use socklen_t. + (convert_int_to_ascii, convert_ascii_to_int, decode_M_packet): Use + unsigned char. + + * i387-fp.c (struct i387_fsave, struct i387_fxsave): Use unsigned + char for buffers. + * linux-low.c (linux_read_memory, linux_write_memory) + (linux_read_auxv): Likewise. + * mem-break.c (breakpoint_data, set_breakpoint_data, check_mem_read) + (check_mem_write): Likewise. + * mem-break.h (set_breakpoint_data, check_mem_read, check_mem_write): + Likewise. + * regcache.c (struct inferior_rgcache_data, registers_to_string) + (registers_from_string, register_data): Likewise. + * server.c (handle_query, main): Likewise. + * server.h (convert_ascii_to_int, convert_int_to_ascii) + (decode_M_packet): Likewise. + * target.c (read_inferior_memory, write_inferior_memory): Likewise. + * target.h (struct target_ops): Update read_memory, write_memory, + and read_auxv. + (read_inferior_memory, write_inferior_memory): Update. + * linux-low.h (struct linux_target_ops): Change type of breakpoint + to unsigned char *. + * linux-arm-low.c, linux-cris-low.c, linux-crisv32-low.c, + linux-i386-low.c, linux-m32r-low.c, linux-m68k-low.c, + linux-mips-low.c, linux-ppc-low.c, linux-ppc64-low.c, + linux-s390-low.c, linux-sh-low.c: Update for changes in + read_inferior_memory and the_low_target->breakpoint. + +2005-05-28 Daniel Jacobowitz <dan@codesourcery.com> + + * Makefile.in (SFILES): Add linux-ppc64-low.c. + (linux-ppc64-low.o, reg-ppc64.c, reg-ppc64.o): New targets. + * configure.srv: Add powerpc64-*-linux*. + * linux-ppc64-low.c: New file. + +2005-05-23 Orjan Friberg <orjanf@axis.com> + + * linux-cris-low.c: New file with support for CRIS. + * linux-crisv32-low.c: Ditto for CRISv32. + * Makefile.in (SFILES): Add linux-cris-low.c, linux-crisv32-low.c. + (clean): Add reg-cris.c and reg-crisv32.c. + Add linux-cris-low.o, linux-crisv32-low.o, reg-cris.o, reg-cris.c, + reg-crisv32.o, and reg-crisv32.c to make rules. + * configure.srv: Add cris-*-linux* and crisv32-*-linux* to list of + recognized targets. + +2005-05-16 Ulrich Weigand <uweigand@de.ibm.com> + + * linux-low.c (fetch_register): Ensure buffer size is a multiple + of sizeof (PTRACE_XFER_TYPE). + (usr_store_inferior_registers): Likewise. Zero out excess bytes. + +2005-05-12 Orjan Friberg <orjanf@axis.com> + + * target.h (struct target_ops): Add insert_watchpoint, + remove_watchpoint, stopped_by_watchpoint, stopped_data_address function + pointers for hardware watchpoint support. + * linux-low.h (struct linux_target_ops): Ditto. + * linux-low.c (linux_insert_watchpoint, linux_remove_watchpoint) + (linux_stopped_by_watchpoint, linux_stopped_data_address): New. Add + to linux_target_ops. + * remote-utils.c (prepare_resume_reply): Add watchpoint information to + reply packet. + * server.c (main): Recognize 'Z' and 'z' packets. + +2005-05-10 Ulrich Weigand <uweigand@de.ibm.com> + + * linux-s390-low.c (s390_breakpoint, s390_breakpoint_len): Define. + (s390_get_pc, s390_set_pc, s390_breakpoint_at): New functions. + (the_low_target): Add new members. + +2005-05-04 Daniel Jacobowitz <dan@codesourcery.com> + + * proc-service.c (ps_lgetregs): Search all_processes instead of + all_threads. + +2005-05-04 Daniel Jacobowitz <dan@codesourcery.com> + + * server.c (start_inferior): Change return type to int. + (attach_inferior): Change sigptr to int *. + (handle_v_cont, handle_v_requests): Change signal to int *. + (main): Change signal to int. + +2005-04-15 Kei Sakamoto <sakamoto.kei@renesas.com> + + * Makefile.in: Add linux-m32r-low.o, reg-m32r.c and reg-m32r.o. + * configure.srv: Add m32r*-*-linux*. + * linux-m32r-low.c: New file. + +2005-03-04 Daniel Jacobowitz <dan@codesourcery.com> + + * Makefile.in (stamp-h): Set CONFIG_HEADERS explicitly. + +2005-03-03 Daniel Jacobowitz <dan@codesourcery.com> + + * inferiors.c (change_inferior_id, add_thread, find_inferior_id): + Take unsigned long arguments for PIDs. + * linux-low.c (add_process, linux_attach_lwp, linux_attach) + (linux_thread_alive, linux_wait_for_event, kill_lwp, send_sigstop) + (wait_for_sigstop, linux_resume_one_process) + (regsets_fetch_inferior_registers, linux_send_signal) + (linux_read_auxv): Likewise. Update the types of variables holding + PIDs. Update format string specifiers. + * linux-low.h (struct process_info, linux_attach_lwp): Likewise. + * remote-utils.c (prepare_resume_reply): Likewise. + * server.c (cont_thread, general_thread, step_thread) + (thread_from_wait, old_thread_from_wait, signal_pid): Change type to + unsigned long. + (handle_query): Update format specifiers. + (handle_v_cont, main): Use strtoul for thread IDs. + * server.h (struct inferior_list_entry): Use unsigned long for ID. + (add_thread, find_inferior_id, change_inferior_id, cont_thread) + (general_thread, step_thread, thread_from_wait) + (old_thread_from_wait): Update. + * target.h (struct thread_resume): Use unsigned long for THREAD. + (struct target_ops): Use unsigned long for arguments to attach and + thread_alive. + +2005-02-24 Daniel Jacobowitz <dan@codesourcery.com> + + * acinclude.m4: Include bfd/bfd.m4 directly. + * configure.ac: Use AC_ARG_PROGRAM. Suggested by Aron Griffis + <agriffis@toolchain.org>. + * aclocal.m4, configure: Regenerated. + +2005-01-07 Andrew Cagney <cagney@gnu.org> + + * configure.ac: Rename configure.in, require autoconf 2.59. + * configure: Re-generate. + +2004-12-08 Daniel Jacobowitz <dan@debian.org> + + * acinclude.m4 (SRV_CHECK_THREAD_DB): Add ps_get_thread_area. Reset + LIBS when finished. + * aclocal.m4: Regenerated. + * configure: Regenerated. + +2004-11-21 Andreas Schwab <schwab@suse.de> + + * linux-m68k-low.c (m68k_num_gregs): Define. + (m68k_fill_gregset, m68k_store_gregset, m68k_fill_fpregset) + (m68k_store_fpregset, target_regsets) [HAVE_LINUX_REGSETS]: New. + (m68k_breakpoint, m68k_breakpoint_len, m68k_get_pc, m68k_set_pc) + (m68k_breakpoint_at): New. Add to the_low_target. + + * configure.srv (m68*-*-linux*): Set srv_linux_regsets and + srv_linux_thread_db to yes. + +2004-10-20 Joel Brobecker <brobecker@gnat.com> + + * linux-x86-64-low.c (ARCH_SET_GS): Add definition if missing. + (ARCH_SET_FS): Likewise. + (ARCH_GET_FS): Likewise. + (ARCH_GET_GS): Likewise. + +2004-10-16 Daniel Jacobowitz <dan@debian.org> + + * linux-i386-low.c (ps_get_thread_area): New. + * linux-x86-64-low.c (ps_get_thread_area): New. + * linux-low.c: Include <sys/syscall.h>. + (linux_kill_one_process): Don't kill the first thread here. + (linux_kill): Kill the first thread here. + (kill_lwp): New function. + (send_sigstop, linux_send_signal): Use it. + * proc-service.c: Clean up #ifdefs. + (fpregset_info): Delete. + (ps_lgetregs): Update and enable implementation. + (ps_lsetregs, ps_lgetfpregs, ps_lsetfpregs): Remove disabled + implementations. + * remote-utils.c (struct sym_cache, symbol_cache): New. + (input_interrupt): Print a clearer message. + (async_io_enabled): New variable. + (enable_async_io, disable_async_io): Use it. Update comments. + (look_up_one_symbol): Use the symbol cache. + * thread-db.c (thread_db_look_up_symbols): New function. + (thread_db_init): Update comments. Call thread_db_look_up_symbols. + +2004-10-16 Daniel Jacobowitz <dan@debian.org> + + * configure.in: Test for -rdynamic. + * configure: Regenerated. + * Makefile (INTERNAL_LDFLAGS): New. + (gdbserver, gdbreplay): Use it. + +2004-09-02 Andrew Cagney <cagney@gnu.org> + + * Makefile.in (TAGS): Replace TM_FILE with DEPRECATED_TM_FILE. + +2004-03-23 Daniel Jacobowitz <drow@mvista.com> + + * linux-low.c (linux_wait): Clear all_processes list also. + +2004-03-12 Daniel Jacobowitz <drow@mvista.com> + + * linux-low.c: Include <errno.h>. Remove extern declaration of + errno. + +2004-03-12 Daniel Jacobowitz <drow@mvista.com> + + * gdbreplay.c, server.h, utils.c: Update copyright years. + +2004-03-04 Nathan J. Williams <nathanw@wasabisystems.com> + + * server.c (main): Print child status or termination signal from + variable 'signal', not 'sig'. + +2004-03-04 Nathan J. Williams <nathanw@wasabisystems.com> + + * linux-low.c (linux_read_memory): Change return type to + int. Check for and return error from ptrace(). + * target.c (read_inferior_memory): Change return type to int. Pass + back return status from the_target->read_memory(). + * target.h (struct target_ops): Adapt *read_memory() prototype. + Update comment. + (read_inferior_memory): Adapt prototype. + * server.c (main): Return an error packet if + read_inferior_memory() returns an error. + +2004-03-04 Daniel Jacobowitz <drow@mvista.com> + + * Makefile.in (distclean): Remove config.h, stamp-h, and config.log. + Unify with other clean targets. + +2004-02-29 Daniel Jacobowitz <drow@mvista.com> + + * server.c (handle_v_cont): Call set_desired_inferior. + +2004-02-29 Daniel Jacobowitz <drow@mvista.com> + + * remote-utils.c (prepare_resume_reply): Always supply "thread:". + +2004-02-29 Daniel Jacobowitz <drow@mvista.com> + + * linux-low.c (linux_wait): Unblock async I/O. + (linux_resume): Block and enable async I/O. + * remote-utils.c (block_async_io, unblock_async_io): New functions. + * server.h (block_async_io, unblock_async_io): Add prototypes. + +2004-02-29 Daniel Jacobowitz <drow@mvista.com> + + * remote-utils.c (remote_open): Print a status notice after + opening a TCP port. + * server.c (attach_inferior): Print a status notice after + attaching. + +2004-02-29 Daniel Jacobowitz <drow@mvista.com> + + * linux-arm-low.c (arm_get_pc): Print out stop PC in debug mode. + +2004-02-26 Daniel Jacobowitz <drow@mvista.com> + + * remote-utils.c (write_enn): Use "E01" instead of "ENN" for the + error packet. + * server.c, target.h: Update copyright years. + +2004-02-25 Roland McGrath <roland@redhat.com> + + * target.h (struct target_ops): New member `read_auxv'. + * server.c (handle_query): Handle qPart:auxv:read: query using that. + * linux-low.c (linux_read_auxv): New function. + (linux_target_ops): Initialize `read_auxv' member to that. + +2004-02-17 Ulrich Weigand <Ulrich.Weigand@de.ibm.com> + + Committed by Jim Blandy <jimb@redhat.com>. + + * linux-s390-low.c (s390_num_regs): Update. + (s390_regmap): Remove control registers. Use __s390x__ predefine + instead of GPR_SIZE to distiguish s390 and s390x targets. + +2004-01-31 Daniel Jacobowitz <drow@mvista.com> + + * linux-low.c: Update copyright year. + (check_removed_breakpoint): Clear pending_is_breakpoint. + (linux_set_resume_request, linux_queue_one_thread) + (resume_status_pending_p): New functions. + (linux_continue_one_thread): Use process->resume. + (linux_resume): Only resume threads if there are no pending events. + * linux-low.h (struct process_info): Add resume request + pointer. + +2004-01-30 Daniel Jacobowitz <drow@mvista.com> + + * regcache.c (new_register_cache): Clear the allocated register + buffer. Suggested by Atsushi Nemoto <anemo@mba.ocn.ne.jp>. + +2003-10-13 Daniel Jacobowitz <drow@mvista.com> + + * linux-low.c (linux_resume): Take a struct thread_resume * + argument. + (linux_wait): Update call. + (resume_ptr): New static variable. + (linux_continue_one_thread): Renamed from + linux_continue_one_process. Use resume_ptr. + (linux_resume): Use linux_continue_one_thread. + * server.c (handle_v_cont, handle_v_requests): New functions. + (myresume): New function. + (main): Handle 'v' case. + * target.h (struct thread_resume): New type. + (struct target_ops): Change argument of "resume" to struct + thread_resume *. + (myresume): Delete macro. + +2003-08-08 H.J. Lu <hongjiu.lu@intel.com> + + * Makefile.in (install-only): Create dest dir. Support DESTDIR. + (uninstall): Support DESTDIR. + +Mon Jul 21 20:09:34 UTC 2003 Brendan Conoboy <blc@redhat.com> + + * configure.srv: Add xscale*linux copy of arm*linux entry. + +2003-07-24 Daniel Jacobowitz <drow@mvista.com> + + * linux-arm-low.c (arm_reinsert_addr): New function. + (the_low_target): Add arm_reinsert_addr. + +2003-07-08 Mark Kettenis <kettenis@gnu.org> + + * mem-break.c: Remove whitespace at end of file. + +2003-06-28 Daniel Jacobowitz <drow@mvista.com> + + * configure.in: Check whether we need to prototype strerror. + * server.h: Optionally prototype strerror. + * gdbreplay.c (perror_with_name): Use strerror. + * linux-low.c (linux_attach_lwp): Use strerror. + * utils.c (perror_with_name): Use strerror. + * config.in, configure: Regenerated. + +2003-06-28 Daniel Jacobowitz <drow@mvista.com> + + * linux-sh-low.c (sh_regmap): Fix FP register offsets, reported by + SUGIOKA Toshinobu <sugioka@itonet.co.jp>. + +2003-06-20 Daniel Jacobowitz <drow@mvista.com> + + * Makefile.in (SFILES): Update. + * low-hppabsd.c, low-lynx.c, low-nbsd.c, low-sim.c, low-sparc.c, + low-sun3.c: Remove files. + +2003-06-17 Daniel Jacobowitz <drow@mvista.com> + + * linux-low.c: Move comment to linux_thread_alive where it belonged. + (linux_detach_one_process, linux_detach): New functions. + (linux_target_ops): Add linux_detach. + * server.c (main): Handle 'D' packet. + * target.h (struct target_ops): Add "detach" member. + (detach_inferior): Define. + +2003-06-13 Mark Kettenis <kettenis@gnu.org> + + From Kelley Cook <kelleycook@wideopenwest.com>: + * configure.srv: Accept i[34567]86 variants. + +2003-06-05 Daniel Jacobowitz <drow@mvista.com> + + * linux-low.c (linux_wait_for_event): Correct comment typos. + (linux_resume_one_process): Call check_removed_breakpoint. + (linux_send_signal): New function. + (linux_target_ops): Add linux_send_signal. + * remote-utils.c (putpkt, input_interrupt): Use send_signal instead + of kill. + * target.h (struct target_ops): Add send_signal. + +2003-05-29 Jim Blandy <jimb@redhat.com> + + * linux-low.c (usr_store_inferior_registers): Transfer buf in + PTRACE_XFER_TYPE-sized chunks, not int-sized chunks. Otherwise, + if 'int' is smaller than PTRACE_XFER_TYPE, you end up throwing + away part of the register's value. + +2003-03-26 Daniel Jacobowitz <drow@mvista.com> + + * linux-low.c (linux_create_inferior): Use __SIGRTMIN. + (linux_wait_for_event, linux_init_signals): Likewise. + +2003-03-17 Daniel Jacobowitz <drow@mvista.com> + + * configure.in: Check for stdlib.h. + * configure: Regenerated. + * config.in: Regenerated. + +2003-01-04 Andreas Schwab <schwab@suse.de> + + * linux-m68k-low.c (m68k_num_regs): Define to 29 instead of 31. + +2003-01-02 Andrew Cagney <ac131313@redhat.com> + + * Makefile.in: Remove obsolete code. + +2002-11-20 Daniel Jacobowitz <drow@mvista.com> + + * linux-s390-low.c (s390_regmap): Check GPR_SIZE instead of + defined(PT_FPR0_HI). + +2002-11-17 Stuart Hughes <seh@zee2.com> + + * linux-arm-low.c (arm_num_regs): Increase. + (arm_regmap): Include status register. + +2002-11-17 Daniel Jacobowitz <drow@mvista.com> + + * linux-low.c (register_addr): Remove incorrect -1 check. + +2002-08-29 Daniel Jacobowitz <drow@mvista.com> + + * linux-low.c (linux_create_inferior): Call setpgid. Return + the new PID. + (unstopped_p, linux_signal_pid): Remove. + (linux_target_ops): Remove linux_signal_pid. + * remote-utils.c (putpkt, input_interrupt): Use signal_pid + global instead of target method. + * target.h (struct target_ops): Remove signal_pid. Update comment + for create_inferior. + * server.c (signal_pid): New variable. + (create_inferior): Set signal_pid. Block SIGTTOU and SIGTTIN in + gdbserver. Set the child to be the foreground process group. + (attach_inferior): Set signal_pid. + +2002-08-23 Daniel Jacobowitz <drow@mvista.com> + + * ChangeLog: New file, with entries from gdb/ChangeLog after GDB 5.2. + +2002-08-20 Jim Blandy <jimb@redhat.com> + + * Makefile.in (LDFLAGS): Allow the configure script to establish a + default for this. + +2002-08-01 Andrew Cagney <cagney@redhat.com> + + * Makefile.in: Make chill references obsolete. + +2002-07-24 Kevin Buettner <kevinb@redhat.com> + + * configure.in (unistd.h): Add to AC_CHECK_HEADERS list. + * configure: Regenerate. + * config.in: Regenerate. + +2002-07-09 David O'Brien <obrien@FreeBSD.org> + + * gdbreplay.c (stdlib.h, unistd.h): Conditionaly include. + (perror_with_name, remote_close, remote_open, expect, play): Static. + +2002-07-04 Michal Ludvig <mludvig@suse.cz> + + * linux-x86-64-low.c (x86_64_regmap): Make it an array of + byte offsets instead of an array of indexes. + (x86_64_store_gregset, x86_64_store_fpregset): Parameter made const. + +2002-06-13 Daniel Jacobowitz <drow@mvista.com> + + * regcache.c: Add comment. + +2002-06-11 Daniel Jacobowitz <drow@mvista.com> + + * thread-db.c: New file. + * proc-service.c: New file. + * acinclude.m4: New file. + * Makefile.in: Add GDBSERVER_LIBS, gdb_proc_service_h, + proc-service.o, and thread-db.o. + (linux-low.o): Add USE_THREAD_DB. + * acconfig.h: Add HAVE_PRGREGSET_T, HAVE_PRFPREGSET_T, + HAVE_LWPID_T, HAVE_PSADDR_T, and PRFPREGSET_T_BROKEN. + * aclocal.m4: Regenerated. + * config.in: Regenerated. + * configure: Regenerated. + * configure.in: Check for proc_service.h, sys/procfs.h, + thread_db.h, and linux/elf.h headrs. + Check for lwpid_t, psaddr_t, prgregset_t, prfpregset_t, and + PRFPREGSET_T_BROKEN. Introduce srv_thread_depfiles and USE_THREAD_DB. + Check for -lthread_db and thread support. + * configure.srv: Enable thread_db support for ARM, i386, MIPS, + PowerPC, and SuperH. + * i387-fp.c: Constify arguments. + * i387-fp.h: Likewise. + * inferiors.c: (struct thread_info): Renamed from + `struct inferior_info'. Remove PID member. Use generic inferior + list header. All uses updated. + (inferiors, signal_pid): Removed. + (all_threads): New variable. + (get_thread): Define. + (add_inferior_to_list): New function. + (for_each_inferior): New function. + (change_inferior_id): New function. + (add_inferior): Removed. + (remove_inferior): New function. + (add_thread): New function. + (free_one_thread): New function. + (remove_thread): New function. + (clear_inferiors): Use for_each_inferior and free_one_thread. + (find_inferior): New function. + (find_inferior_id): New function. + (inferior_target_data): Update argument type. + (set_inferior_target_data): Likewise. + (inferior_regcache_data): Likewise. + (set_inferior_regcache_data): Likewise. + * linux-low.c (linux_bp_reinsert): Remove. + (all_processes, stopping_threads, using_thrads) + (struct pending_signals, debug_threads, pid_of): New. + (inferior_pid): Replace with macro. + (struct inferior_linux_data): Remove. + (get_stop_pc, add_process): New functions. + (linux_create_inferior): Restore SIGRTMIN+1 before calling exec. + Use add_process and add_thread. + (linux_attach_lwp): New function, based on old linux_attach. Use + add_process and add_thread. Set stop_expected for new threads. + (linux_attach): New function. + (linux_kill_one_process): New function. + (linux_kill): Kill all LWPs. + (linux_thread_alive): Use find_inferior_id. + (check_removed_breakpoints, status_pending_p): New functions. + (linux_wait_for_process): Renamed from linux_wait_for_one_inferior. + Update. Use WNOHANG. Wait for cloned processes also. Update process + struct for the found process. + (linux_wait_for_event): New function. + (linux_wait): Use it. Support LWPs. + (send_sigstop, wait_for_sigstop, stop_all_processes) + (linux_resume_one_process, linux_continue_one_process): New functions. + (linux_resume): Support LWPs. + (REGISTER_RAW_SIZE): Remove. + (fetch_register): Use register_size instead. Call supply_register. + (usr_store_inferior_registers): Likewise. Call collect_register. + Fix recursive case. + (regsets_fetch_inferior_registers): Improve error message. + (regsets_store_inferior_registers): Add debugging. + (linux_look_up_symbols): Call thread_db_init if USE_THREAD_DB. + (unstopped_p, linux_signal_pid): New functions. + (linux_target_ops): Add linux_signal_pid. + (linux_init_signals): New function. + (initialize_low): Call it. Initialize using_threads. + * regcache.c (inferior_regcache_data): Add valid + flag. + (get_regcache): Fetch registers lazily. Add fetch argument + and update all callers. + (regcache_invalidate_one, regcache_invalidate): New + functions. + (new_register_cache): Renamed from create_register_cache. + Return the new regcache. + (free_register_cache): Change argument to a void *. + (registers_to_string, registers_from_string): Call get_regcache + with fetch flag set. + (register_data): Make static. Pass fetch flag to get_regcache. + (supply_register): Call get_regcache with fetch flag clear. + (collect_register): Call get_regcache with fetch flag set. + (collect_register_as_string): New function. + * regcache.h: Update. + * remote-utils.c (putpkt): Flush after debug output and use + stderr. + Handle input interrupts while waiting for an ACK. + (input_interrupt): Use signal_pid method. + (getpkt): Flush after debug output and use stderr. + (outreg): Use collect_register_as_string. + (new_thread_notify, dead_thread_notify): New functions. + (prepare_resume_reply): Check using_threads. Set thread_from_wait + and general_thread. + (look_up_one_symbol): Flush after debug output. + * server.c (step_thread, server_waiting): New variables. + (start_inferior): Don't use signal_pid. Update call to mywait. + (attach_inferior): Update call to mywait. + (handle_query): Handle qfThreadInfo and qsThreadInfo. + (main): Don't fetch/store registers explicitly. Use + set_desired_inferior. Support proposed ``Hs'' packet. Update + calls to mywait. + * server.h: Update. + (struct inferior_list, struct_inferior_list_entry): New. + * target.c (set_desired_inferior): New. + (write_inferior_memory): Constify. + (mywait): New function. + * target.h: Update. + (struct target_ops): New signal_pid method. + (mywait): Removed macro, added prototype. + + * linux-low.h (regset_func): Removed. + (regset_fill_func, regset_store_func): New. + (enum regset_type): New. + (struct regset_info): Add type field. Use new operation types. + (struct linux_target_ops): stop_pc renamed to get_pc. + Add decr_pc_after_break and breakpoint_at. + (get_process, get_thread_proess, get_process_thread) + (strut process_info, all_processes, linux_attach_lwp) + (thread_db_init): New. + + * linux-arm-low.c (arm_get_pc, arm_set_pc, + arm_breakpoint, arm_breakpoint_len, arm_breakpoint_at): New. + (the_low_target): Add new members. + * linux-i386-low.c (i386_store_gregset, i386_store_fpregset) + (i386_store_fpxregset): Constify. + (target_regsets): Add new kind identifier. + (i386_get_pc): Renamed from i386_stop_pc. Simplify. + (i386_set_pc): Add debugging. + (i386_breakpoint_at): New function. + (the_low_target): Add new members. + * linux-mips-low.c (mips_get_pc, mips_set_pc) + (mips_breakpoint, mips_breakpoint_len, mips_reinsert_addr) + (mips_breakpoint_at): New. + (the_low_target): Add new members. + * linux-ppc-low.c (ppc_get_pc, ppc_set_pc) + (ppc_breakpoint, ppc_breakpoint_len, ppc_breakpoint_at): New. + (the_low_target): Add new members. + * linux-sh-low.c (sh_get_pc, sh_set_pc) + (sh_breakpoint, sh_breakpoint_len, sh_breakpoint_at): New. + (the_low_target): Add new members. + * linux-x86-64-low.c (target_regsets): Add new kind + identifier. + +2002-05-15 Daniel Jacobowitz <drow@mvista.com> + + From Martin Pool <mbp@samba.org>: + * server.c (gdbserver_usage): New function. + (main): Call it. + +2002-05-14 Daniel Jacobowitz <drow@mvista.com> + + * mem-break.c (reinsert_breakpoint_by_bp): Correct typo + stop_at -> stop_pc. + +2002-05-04 Andrew Cagney <ac131313@redhat.com> + + * Makefile.in: Remove obsolete code. + +2002-04-24 Michal Ludvig <mludvig@suse.cz> + + * linux-low.c (regsets_fetch_inferior_registers), + (regsets_store_inferior_registers): Removed cast to int from + ptrace() calls. + * regcache.h: Added declaration of struct inferior_info. + +2002-04-20 Daniel Jacobowitz <drow@mvista.com> + + * inferiors.c (struct inferior_info): Add regcache_data. + (add_inferior): Call create_register_cache. + (clear_inferiors): Call free_register_cache. + (inferior_regcache_data, set_inferior_regcache_data): New functions. + * regcache.c (struct inferior_regcache_data): New. + (registers): Remove. + (get_regcache): New function. + (create_register_cache, free_register_cache): New functions. + (set_register_cache): Don't initialize the register cache here. + (registers_to_string, registers_from_string, register_data): Call + get_regcache. + * regcache.h: Add prototypes. + * server.h: Likewise. + +2002-04-20 Daniel Jacobowitz <drow@mvista.com> + + * mem-break.c: New file. + * mem-break.h: New file. + * Makefile.in: Add mem-break.o rule; update server.h + dependencies. + * inferiors.c (struct inferior_info): Add target_data + member. + (clear_inferiors): Free target_data member if set. + (inferior_target_data, set_inferior_target_data): New functions. + * linux-i386-low.c (i386_breakpoint, i386_breakpoint_len) + (i386_stop_pc, i386_set_pc): New. Add to the_low_target. + * linux-low.c (linux_bp_reinsert): New variable. + (struct inferior_linux_data): New. + (linux_create_inferior): Use set_inferior_target_data. + (linux_attach): Likewise. Call add_inferior. + (linux_wait_for_one_inferior): New function. + (linux_wait): Call it. + (linux_write_memory): Add const. + (initialize_low): Call set_breakpoint_data. + * linux-low.h (struct linux_target_ops): Add breakpoint + handling members. + * server.c (attach_inferior): Remove extra add_inferior + call. + * server.h: Include mem-break.h. Update inferior.c + prototypes. + * target.c (read_inferior_memory) + (write_inferior_memory): New functions. + * target.h (read_inferior_memory) + (write_inferior_memory): Change macros to prototypes. + (struct target_ops): Update comments. Add const to write_memory + definition. + +2002-04-11 Daniel Jacobowitz <drow@mvista.com> + + * linux-low.c (usr_store_inferior_registers): Support + registers which are allowed to fail to store. + * linux-low.h (linux_target_ops): Likewise. + * linux-ppc-low.c (ppc_regmap): Support FPSCR. + (ppc_cannot_store_register): FPSCR may not be storable. + +2002-04-09 Daniel Jacobowitz <drow@mvista.com> + + * server.h: Include <string.h> if HAVE_STRING_H. + * ChangeLog: Correct paths in last ChangeLog entry. + +2002-04-09 Daniel Jacobowitz <drow@mvista.com> + + * linux-low.h: Remove obsolete prototypes. + (struct linux_target_ops): New. + (extern the_low_target): New. + * linux-low.c (num_regs, regmap): Remove declarations. + (register_addr): Use the_low_target explicitly. + (fetch_register): Likewise. + (usr_fetch_inferior_registers): Likewise. + (usr_store_inferior_registers): Likewise. + * linux-arm-low.c (num_regs): Remove. + (arm_num_regs): Define. + (arm_regmap): Renamed from regmap, made static. + (arm_cannot_fetch_register): Renamed from cannot_fetch_register, + made static. + (arm_cannot_store_register): Renamed from cannot_store_register, + made static. + (the_low_target): New. + * linux-i386-low.c (num_regs): Remove. + (i386_num_regs): Define. + (i386_regmap): Renamed from regmap, made static. + (i386_cannot_fetch_register): Renamed from cannot_fetch_register, + made static. + (i386_cannot_store_register): Renamed from cannot_store_register, + made static. + (the_low_target): New. + * linux-ia64-low.c (num_regs): Remove. + (ia64_num_regs): Define. + (ia64_regmap): Renamed from regmap, made static. + (ia64_cannot_fetch_register): Renamed from cannot_fetch_register, + made static. + (ia64_cannot_store_register): Renamed from cannot_store_register, + made static. + (the_low_target): New. + * linux-m68k-low.c (num_regs): Remove. + (m68k_num_regs): Define. + (m68k_regmap): Renamed from regmap, made static. + (m68k_cannot_fetch_register): Renamed from cannot_fetch_register, + made static. + (m68k_cannot_store_register): Renamed from cannot_store_register, + made static. + (the_low_target): New. + * linux-mips-low.c (num_regs): Remove. + (mips_num_regs): Define. + (mips_regmap): Renamed from regmap, made static. + (mips_cannot_fetch_register): Renamed from cannot_fetch_register, + made static. + (mips_cannot_store_register): Renamed from cannot_store_register, + made static. + (the_low_target): New. + * linux-ppc-low.c (num_regs): Remove. + (ppc_num_regs): Define. + (ppc_regmap): Renamed from regmap, made static. + (ppc_cannot_fetch_register): Renamed from cannot_fetch_register, + made static. + (ppc_cannot_store_register): Renamed from cannot_store_register, + made static. + (the_low_target): New. + * linux-s390-low.c (num_regs): Remove. + (s390_num_regs): Define. + (s390_regmap): Renamed from regmap, made static. + (s390_cannot_fetch_register): Renamed from cannot_fetch_register, + made static. + (s390_cannot_store_register): Renamed from cannot_store_register, + made static. + (the_low_target): New. + * linux-sh-low.c (num_regs): Remove. + (sh_num_regs): Define. + (sh_regmap): Renamed from regmap, made static. + (sh_cannot_fetch_register): Renamed from cannot_fetch_register, + made static. + (sh_cannot_store_register): Renamed from cannot_store_register, + made static. + (the_low_target): New. + * linux-x86-64-low.c (x86_64_regmap): Renamed from regmap. + (the_low_target): New. + +2002-04-09 Daniel Jacobowitz <drow@mvista.com> + + * Makefile.in: Add stamp-h target. + * configure.in: Create stamp-h. + * configure: Regenerated. + +2002-04-09 Daniel Jacobowitz <drow@mvista.com> + + * inferiors.c: New file. + * target.c: New file. + * target.h: New file. + * Makefile.in: Add target.o and inferiors.o. Update + dependencies. + * linux-low.c (inferior_pid): New static variable, + moved from server.c. + (linux_create_inferior): Renamed from create_inferior. + Call add_inferior. Return 0 on success instead of a PID. + (linux_attach): Renamed from myattach. + (linux_kill): Renamed from kill_inferior. Call clear_inferiors (). + (linux_thread_alive): Renamed from mythread_alive. + (linux_wait): Renamed from mywait. Call clear_inferiors () if the + child dies. + (linux_resume): Renamed from myresume. Add missing ``return 0''. + (regsets_store_inferior_registers): Correct error message. + Add missing ``return 0''. + (linux_fetch_registers): Renamed from fetch_inferior_registers. + (linux_store_registers): Renamed from store_inferior_registers. + (linux_read_memory): Renamed from read_inferior_memory. + (linux_write_memory): Renamed from write_inferior_memory. + (linux_target_ops): New structure. + (initialize_low): Call set_target_ops (). + * remote-utils.c (unhexify): New function. + (hexify): New function. + (input_interrupt): Send signals to ``signal_pid''. + * server.c (inferior_pid): Remove. + (start_inferior): Update create_inferior call. + (attach_inferior): Call add_inferior. + (handle_query): New function. + (main): Call handle_query for `q' packets. + * server.h: Include "target.h". Remove obsolete prototypes. + Add prototypes for "inferiors.c", "target.c", hexify, and unhexify. + +2002-04-09 Daniel Jacobowitz <drow@mvista.com> + + * Makefile.in: Add WARN_CFLAGS. Update configury + dependencies. + * configure.in: Check for <string.h> + * configure: Regenerate. + * config.in: Regenerate. + * gdbreplay.c: Include needed system headers. + (remote_open): Remove strchr prototype. + * linux-low.h: Correct #ifdef to HAVE_LINUX_USRREGS. + * regcache.c (supply_register): Change buf argument to const void *. + (supply_register_by_name): Likewise. + (collect_register): Change buf argument to void *. + (collect_register_by_name): Likewise. + * regcache.h: Add missing prototypes. + * remote-utils.c: Include <arpa/inet.h> for inet_ntoa. + * server.c (handle_query): New function. + (attached): New static variable, moved out of main. + (main): Quiet longjmp clobber warnings. + * server.h: Add ATTR_NORETURN and ATTR_FORMAT. Update prototypes. + * utils.c (error): Remove NORETURN. + (fatal): Likewise. diff -Nru gdb-9.1/gdbserver/config.in gdb-10.2/gdbserver/config.in --- gdb-9.1/gdbserver/config.in 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/config.in 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,508 @@ +/* config.in. Generated from configure.ac by autoheader. */ + +/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP + systems. This function is required for `alloca.c' support on those systems. + */ +#undef CRAY_STACKSEG_END + +/* Define to 1 if std::thread works. */ +#undef CXX_STD_THREAD + +/* Define to 1 if using `alloca.c'. */ +#undef C_ALLOCA + +/* Define to 1 if translation of program messages to the user's native + language is requested. */ +#undef ENABLE_NLS + +/* Define if self-testing features should be enabled */ +#undef GDB_SELF_TEST + +/* Define to 1 if you have `alloca', as a function or macro. */ +#undef HAVE_ALLOCA + +/* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix). + */ +#undef HAVE_ALLOCA_H + +/* Define to 1 if you have the <arpa/inet.h> header file. */ +#undef HAVE_ARPA_INET_H + +/* define if the compiler supports basic C++11 syntax */ +#undef HAVE_CXX11 + +/* Define to 1 if you have the declaration of `ADDR_NO_RANDOMIZE', and to 0 if + you don't. */ +#undef HAVE_DECL_ADDR_NO_RANDOMIZE + +/* Define to 1 if you have the declaration of `asprintf', and to 0 if you + don't. */ +#undef HAVE_DECL_ASPRINTF + +/* Define to 1 if you have the declaration of `basename(char *)', and to 0 if + you don't. */ +#undef HAVE_DECL_BASENAME + +/* Define to 1 if you have the declaration of `ffs', and to 0 if you don't. */ +#undef HAVE_DECL_FFS + +/* Define to 1 if you have the declaration of `perror', and to 0 if you don't. + */ +#undef HAVE_DECL_PERROR + +/* Define to 1 if you have the declaration of `snprintf', and to 0 if you + don't. */ +#undef HAVE_DECL_SNPRINTF + +/* Define to 1 if you have the declaration of `strstr', and to 0 if you don't. + */ +#undef HAVE_DECL_STRSTR + +/* Define to 1 if you have the declaration of `strtol', and to 0 if you don't. + */ +#undef HAVE_DECL_STRTOL + +/* Define to 1 if you have the declaration of `strtoll', and to 0 if you + don't. */ +#undef HAVE_DECL_STRTOLL + +/* Define to 1 if you have the declaration of `strtoul', and to 0 if you + don't. */ +#undef HAVE_DECL_STRTOUL + +/* Define to 1 if you have the declaration of `strtoull', and to 0 if you + don't. */ +#undef HAVE_DECL_STRTOULL + +/* Define to 1 if you have the declaration of `strverscmp', and to 0 if you + don't. */ +#undef HAVE_DECL_STRVERSCMP + +/* Define to 1 if you have the declaration of `vasprintf', and to 0 if you + don't. */ +#undef HAVE_DECL_VASPRINTF + +/* Define to 1 if you have the declaration of `vsnprintf', and to 0 if you + don't. */ +#undef HAVE_DECL_VSNPRINTF + +/* Define to 1 if you have the `dladdr' function. */ +#undef HAVE_DLADDR + +/* Define to 1 if you have the <dlfcn.h> header file. */ +#undef HAVE_DLFCN_H + +/* Define to 1 if the system has the type `Elf32_auxv_t'. */ +#undef HAVE_ELF32_AUXV_T + +/* Define to 1 if the system has the type `Elf64_auxv_t'. */ +#undef HAVE_ELF64_AUXV_T + +/* Define if <sys/procfs.h> has elf_fpregset_t. */ +#undef HAVE_ELF_FPREGSET_T + +/* Define to 1 if you have the <fcntl.h> header file. */ +#undef HAVE_FCNTL_H + +/* Define to 1 if you have the `fdwalk' function. */ +#undef HAVE_FDWALK + +/* Define to 1 if you have the `fork' function. */ +#undef HAVE_FORK + +/* Define if <sys/procfs.h> has fpregset_t. */ +#undef HAVE_FPREGSET_T + +/* Define to 1 if you have the `getauxval' function. */ +#undef HAVE_GETAUXVAL + +/* Define to 1 if you have the `getpagesize' function. */ +#undef HAVE_GETPAGESIZE + +/* Define to 1 if you have the `getrlimit' function. */ +#undef HAVE_GETRLIMIT + +/* Define to 1 if you have the `getrusage' function. */ +#undef HAVE_GETRUSAGE + +/* Define if <sys/procfs.h> has gregset_t. */ +#undef HAVE_GREGSET_T + +/* Define to 1 if you have the <inttypes.h> header file. */ +#undef HAVE_INTTYPES_H + +/* Define to 1 if your system has the kinfo_getfile function. */ +#undef HAVE_KINFO_GETFILE + +/* Define if you have <langinfo.h> and nl_langinfo(CODESET). */ +#undef HAVE_LANGINFO_CODESET + +/* Define to 1 if you have the `dl' library (-ldl). */ +#undef HAVE_LIBDL + +/* Define if you have the ipt library. */ +#undef HAVE_LIBIPT + +/* Define if the target supports branch tracing. */ +#undef HAVE_LINUX_BTRACE + +/* Define to 1 if you have the <linux/elf.h> header file. */ +#undef HAVE_LINUX_ELF_H + +/* Define to 1 if you have the <linux/perf_event.h> header file. */ +#undef HAVE_LINUX_PERF_EVENT_H + +/* Define if the target supports register sets. */ +#undef HAVE_LINUX_REGSETS + +/* Define if the target supports PTRACE_PEEKUSR for register access. */ +#undef HAVE_LINUX_USRREGS + +/* Define to 1 if you have the <locale.h> header file. */ +#undef HAVE_LOCALE_H + +/* Define to 1 if the system has the type `long long'. */ +#undef HAVE_LONG_LONG + +/* Define if <thread_db.h> has lwpid_t. */ +#undef HAVE_LWPID_T + +/* Define to 1 if you have the <memory.h> header file. */ +#undef HAVE_MEMORY_H + +/* Define to 1 if you have a working `mmap' system call. */ +#undef HAVE_MMAP + +/* Define to 1 if you have the <netdb.h> header file. */ +#undef HAVE_NETDB_H + +/* Define to 1 if you have the <netinet/in.h> header file. */ +#undef HAVE_NETINET_IN_H + +/* Define to 1 if you have the <netinet/tcp.h> header file. */ +#undef HAVE_NETINET_TCP_H + +/* Define if you support the personality syscall. */ +#undef HAVE_PERSONALITY + +/* Define to 1 if you have the `pipe' function. */ +#undef HAVE_PIPE + +/* Define to 1 if you have the `pipe2' function. */ +#undef HAVE_PIPE2 + +/* Define to 1 if you have the `poll' function. */ +#undef HAVE_POLL + +/* Define to 1 if you have the <poll.h> header file. */ +#undef HAVE_POLL_H + +/* Define to 1 if you have the `pread' function. */ +#undef HAVE_PREAD + +/* Define to 1 if you have the `pread64' function. */ +#undef HAVE_PREAD64 + +/* Define if <sys/procfs.h> has prfpregset_t. */ +#undef HAVE_PRFPREGSET_T + +/* Define if <sys/procfs.h> has prgregset32_t. */ +#undef HAVE_PRGREGSET32_T + +/* Define if <sys/procfs.h> has prgregset_t. */ +#undef HAVE_PRGREGSET_T + +/* Define to 1 if you have the <proc_service.h> header file. */ +#undef HAVE_PROC_SERVICE_H + +/* Define if <thread_db.h> has psaddr_t. */ +#undef HAVE_PSADDR_T + +/* Have PTHREAD_PRIO_INHERIT. */ +#undef HAVE_PTHREAD_PRIO_INHERIT + +/* Define to 1 if you have the `pthread_setname_np' function. */ +#undef HAVE_PTHREAD_SETNAME_NP + +/* Define to 1 if you have the `pthread_sigmask' function. */ +#undef HAVE_PTHREAD_SIGMASK + +/* Define to 1 if you have the `ptrace64' function. */ +#undef HAVE_PTRACE64 + +/* Define if the target supports PTRACE_GETFPXREGS for extended register + access. */ +#undef HAVE_PTRACE_GETFPXREGS + +/* Define if the target supports PTRACE_GETREGS for register access. */ +#undef HAVE_PTRACE_GETREGS + +/* Define to 1 if you have the <ptrace.h> header file. */ +#undef HAVE_PTRACE_H + +/* Define to 1 if you have the `pt_insn_event' function. */ +#undef HAVE_PT_INSN_EVENT + +/* Define to 1 if you have the `pwrite' function. */ +#undef HAVE_PWRITE + +/* Define to 1 if you have the `sbrk' function. */ +#undef HAVE_SBRK + +/* Define to 1 if you have the `setns' function. */ +#undef HAVE_SETNS + +/* Define to 1 if you have the `setpgid' function. */ +#undef HAVE_SETPGID + +/* Define to 1 if you have the `setpgrp' function. */ +#undef HAVE_SETPGRP + +/* Define to 1 if you have the `sigaction' function. */ +#undef HAVE_SIGACTION + +/* Define to 1 if you have the `sigaltstack' function. */ +#undef HAVE_SIGALTSTACK + +/* Define to 1 if you have the <signal.h> header file. */ +#undef HAVE_SIGNAL_H + +/* Define to 1 if you have the `sigprocmask' function. */ +#undef HAVE_SIGPROCMASK + +/* Define if sigsetjmp is available. */ +#undef HAVE_SIGSETJMP + +/* Define to 1 if you have the `socketpair' function. */ +#undef HAVE_SOCKETPAIR + +/* Define to 1 if the system has the type `socklen_t'. */ +#undef HAVE_SOCKLEN_T + +/* Define to 1 if you have the <stdint.h> header file. */ +#undef HAVE_STDINT_H + +/* Define to 1 if you have the <stdlib.h> header file. */ +#undef HAVE_STDLIB_H + +/* Define to 1 if you have the <strings.h> header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the <string.h> header file. */ +#undef HAVE_STRING_H + +/* Define to 1 if `enabled' is a member of `struct pt_insn'. */ +#undef HAVE_STRUCT_PT_INSN_ENABLED + +/* Define to 1 if `resynced' is a member of `struct pt_insn'. */ +#undef HAVE_STRUCT_PT_INSN_RESYNCED + +/* Define to 1 if `st_blksize' is a member of `struct stat'. */ +#undef HAVE_STRUCT_STAT_ST_BLKSIZE + +/* Define to 1 if `st_blocks' is a member of `struct stat'. */ +#undef HAVE_STRUCT_STAT_ST_BLOCKS + +/* Define to 1 if the target supports __sync_*_compare_and_swap */ +#undef HAVE_SYNC_BUILTINS + +/* Define to 1 if you have the <sys/file.h> header file. */ +#undef HAVE_SYS_FILE_H + +/* Define to 1 if you have the <sys/ioctl.h> header file. */ +#undef HAVE_SYS_IOCTL_H + +/* Define to 1 if you have the <sys/param.h> header file. */ +#undef HAVE_SYS_PARAM_H + +/* Define to 1 if you have the <sys/poll.h> header file. */ +#undef HAVE_SYS_POLL_H + +/* Define to 1 if you have the <sys/procfs.h> header file. */ +#undef HAVE_SYS_PROCFS_H + +/* Define to 1 if you have the <sys/ptrace.h> header file. */ +#undef HAVE_SYS_PTRACE_H + +/* Define to 1 if you have the <sys/reg.h> header file. */ +#undef HAVE_SYS_REG_H + +/* Define to 1 if you have the <sys/resource.h> header file. */ +#undef HAVE_SYS_RESOURCE_H + +/* Define to 1 if you have the <sys/select.h> header file. */ +#undef HAVE_SYS_SELECT_H + +/* Define to 1 if you have the <sys/socket.h> header file. */ +#undef HAVE_SYS_SOCKET_H + +/* Define to 1 if you have the <sys/stat.h> header file. */ +#undef HAVE_SYS_STAT_H + +/* Define to 1 if you have the <sys/types.h> header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define to 1 if you have the <sys/un.h> header file. */ +#undef HAVE_SYS_UN_H + +/* Define to 1 if you have the <sys/wait.h> header file. */ +#undef HAVE_SYS_WAIT_H + +/* Define if TD_VERSION is available. */ +#undef HAVE_TD_VERSION + +/* Define to 1 if you have the <termios.h> header file. */ +#undef HAVE_TERMIOS_H + +/* Define to 1 if you have the <thread_db.h> header file. */ +#undef HAVE_THREAD_DB_H + +/* Define to 1 if you have the <unistd.h> header file. */ +#undef HAVE_UNISTD_H + +/* Define if UST is available */ +#undef HAVE_UST + +/* Define to 1 if you have the `vfork' function. */ +#undef HAVE_VFORK + +/* Define to 1 if you have the <vfork.h> header file. */ +#undef HAVE_VFORK_H + +/* Define to 1 if you have the <wait.h> header file. */ +#undef HAVE_WAIT_H + +/* Define to 1 if `fork' works. */ +#undef HAVE_WORKING_FORK + +/* Define to 1 if `vfork' works. */ +#undef HAVE_WORKING_VFORK + +/* Define to 1 if you have the <ws2tcpip.h> header file. */ +#undef HAVE_WS2TCPIP_H + +/* Define to the address where bug reports for this package should be sent. */ +#undef PACKAGE_BUGREPORT + +/* Define to the full name of this package. */ +#undef PACKAGE_NAME + +/* Define to the full name and version of this package. */ +#undef PACKAGE_STRING + +/* Define to the one symbol short name of this package. */ +#undef PACKAGE_TARNAME + +/* Define to the home page for this package. */ +#undef PACKAGE_URL + +/* Define to the version of this package. */ +#undef PACKAGE_VERSION + +/* Additional package description */ +#undef PKGVERSION + +/* Define to necessary symbol if this constant uses a non-standard name on + your system. */ +#undef PTHREAD_CREATE_JOINABLE + +/* Define to the type of arg 1 for ptrace. */ +#undef PTRACE_TYPE_ARG1 + +/* Define to the type of arg 3 for ptrace. */ +#undef PTRACE_TYPE_ARG3 + +/* Define to the type of arg 4 for ptrace. */ +#undef PTRACE_TYPE_ARG4 + +/* Define to the type of arg 5 for ptrace. */ +#undef PTRACE_TYPE_ARG5 + +/* Define as the return type of ptrace. */ +#undef PTRACE_TYPE_RET + +/* Bug reporting address */ +#undef REPORT_BUGS_TO + +/* The size of `long long', as computed by sizeof. */ +#undef SIZEOF_LONG_LONG + +/* If using the C implementation of alloca, define if you know the + direction of stack growth for your system; otherwise it will be + automatically deduced at runtime. + STACK_DIRECTION > 0 => grows toward higher addresses + STACK_DIRECTION < 0 => grows toward lower addresses + STACK_DIRECTION = 0 => direction of growth unknown */ +#undef STACK_DIRECTION + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Define if we should use libthread_db directly. */ +#undef USE_LIBTHREAD_DB_DIRECTLY + +/* Enable extensions on AIX 3, Interix. */ +#ifndef _ALL_SOURCE +# undef _ALL_SOURCE +#endif +/* Enable GNU extensions on systems that have them. */ +#ifndef _GNU_SOURCE +# undef _GNU_SOURCE +#endif +/* Enable threading extensions on Solaris. */ +#ifndef _POSIX_PTHREAD_SEMANTICS +# undef _POSIX_PTHREAD_SEMANTICS +#endif +/* Enable extensions on HP NonStop. */ +#ifndef _TANDEM_SOURCE +# undef _TANDEM_SOURCE +#endif +/* Enable general extensions on Solaris. */ +#ifndef __EXTENSIONS__ +# undef __EXTENSIONS__ +#endif + + +/* Define if we should use libthread_db. */ +#undef USE_THREAD_DB + +/* Define if we should use the Windows API, instead of the POSIX API. On + Windows, we use the Windows API when building for MinGW, but the POSIX API + when building for Cygwin. */ +#undef USE_WIN32API + +/* Define if an XML target description is available. */ +#undef USE_XML + +/* Enable large inode numbers on Mac OS X 10.5. */ +#ifndef _DARWIN_USE_64_BIT_INODE +# define _DARWIN_USE_64_BIT_INODE 1 +#endif + +/* Number of bits in a file offset, on hosts where this is settable. */ +#undef _FILE_OFFSET_BITS + +/* Define for large files, on AIX-style hosts. */ +#undef _LARGE_FILES + +/* Define to 1 if on MINIX. */ +#undef _MINIX + +/* Define to 2 if the system does not provide POSIX.1 features except with + this defined. */ +#undef _POSIX_1_SOURCE + +/* Define to 1 if you need to in order for `stat' and other things to work. */ +#undef _POSIX_SOURCE + +/* Use structured /proc on Solaris. */ +#undef _STRUCTURED_PROC + +/* Define to `int' if <sys/types.h> does not define. */ +#undef pid_t + +/* Define to `unsigned int' if <sys/types.h> does not define. */ +#undef size_t + +/* Define as `fork' if `vfork' does not work. */ +#undef vfork diff -Nru gdb-9.1/gdbserver/configure gdb-10.2/gdbserver/configure --- gdb-9.1/gdbserver/configure 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/configure 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,12011 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.69. +# +# +# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. +# +# +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +# Use a proper internal environment variable to ensure we don't fall + # into an infinite loop, continuously re-executing ourselves. + if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then + _as_can_reexec=no; export _as_can_reexec; + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +as_fn_exit 255 + fi + # We don't want this to propagate to other subprocesses. + { _as_can_reexec=; unset _as_can_reexec;} +if test "x$CONFIG_SHELL" = x; then + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } + +exitcode=0 +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : + +else + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1 +test -x / || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 +test \$(( 1 + 1 )) = 2 || exit 1" + if (eval "$as_required") 2>/dev/null; then : + as_have_required=yes +else + as_have_required=no +fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + as_found=: + case $as_dir in #( + /*) + for as_base in sh bash ksh sh5; do + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + break 2 +fi +fi + done;; + esac + as_found=false +done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } +IFS=$as_save_IFS + + + if test "x$CONFIG_SHELL" != x; then : + export CONFIG_SHELL + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +exit 255 +fi + + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." + else + $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, +$0: including any error possibly output before this +$0: message. Then install a modern shell, or manually run +$0: the script under such a shell if you do have one." + fi + exit 1 +fi +fi +fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS + +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + + + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + + # If we had to re-execute with $CONFIG_SHELL, we're ensured to have + # already done that, so ensure we don't try to do so again and fall + # in an infinite loop. This has already happened in practice. + _as_can_reexec=no; export _as_can_reexec + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' + fi +else + as_ln_s='cp -pR' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +as_test_x='test -x' +as_executable_p=as_fn_executable_p + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +test -n "$DJDIR" || exec 7<&0 </dev/null +exec 6>&1 + +# Name of the host. +# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_clean_files= +ac_config_libobj_dir=. +LIBOBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= + +# Identity of this package. +PACKAGE_NAME= +PACKAGE_TARNAME= +PACKAGE_VERSION= +PACKAGE_STRING= +PACKAGE_BUGREPORT= +PACKAGE_URL= + +ac_unique_file="server.cc" +# Factoring default headers for most tests. +ac_includes_default="\ +#include <stdio.h> +#ifdef HAVE_SYS_TYPES_H +# include <sys/types.h> +#endif +#ifdef HAVE_SYS_STAT_H +# include <sys/stat.h> +#endif +#ifdef STDC_HEADERS +# include <stdlib.h> +# include <stddef.h> +#else +# ifdef HAVE_STDLIB_H +# include <stdlib.h> +# endif +#endif +#ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H +# include <memory.h> +# endif +# include <string.h> +#endif +#ifdef HAVE_STRINGS_H +# include <strings.h> +#endif +#ifdef HAVE_INTTYPES_H +# include <inttypes.h> +#endif +#ifdef HAVE_STDINT_H +# include <stdint.h> +#endif +#ifdef HAVE_UNISTD_H +# include <unistd.h> +#endif" + +ac_header_list= +ac_subst_vars='LTLIBOBJS +LIBOBJS +GNULIB_STDINT_H +extra_libraries +IPA_DEPFILES +srv_xmlfiles +srv_xmlbuiltin +GDBSERVER_LIBS +GDBSERVER_DEPFILES +RDYNAMIC +REPORT_BUGS_TEXI +REPORT_BUGS_TO +PKGVERSION +WERROR_CFLAGS +WARN_CFLAGS +ustinc +ustlibs +CCDEPMODE +CONFIG_SRC_SUBDIR +CATOBJEXT +GENCAT +INSTOBJEXT +DATADIRNAME +CATALOGS +POSUB +GMSGFMT +XGETTEXT +INCINTL +LIBINTL_DEP +LIBINTL +USE_NLS +DEPDIR +am__leading_dot +host_noncanonical +target_noncanonical +WIN32APILIBS +LTLIBIPT +LIBIPT +HAVE_LIBIPT +PTHREAD_CFLAGS +PTHREAD_LIBS +PTHREAD_CC +ax_pthread_config +SED +ALLOCA +CXX_DIALECT +HAVE_CXX11 +RANLIB +AR +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM +target_os +target_vendor +target_cpu +target +host_os +host_vendor +host_cpu +host +build_os +build_vendor +build_cpu +build +INSTALL_STRIP_PROGRAM +STRIP +install_sh +EGREP +GREP +CPP +ac_ct_CXX +CXXFLAGS +CXX +OBJEXT +EXEEXT +ac_ct_CC +CPPFLAGS +LDFLAGS +CFLAGS +CC +MAINT +MAINTAINER_MODE_FALSE +MAINTAINER_MODE_TRUE +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_URL +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' +ac_subst_files='' +ac_user_opts=' +enable_option_checking +enable_maintainer_mode +enable_largefile +with_intel_pt +with_gnu_ld +enable_rpath +with_libipt_prefix +with_libipt_type +enable_unit_tests +with_ust +with_ust_include +with_ust_lib +enable_werror +enable_build_warnings +enable_gdb_build_warnings +with_pkgversion +with_bugurl +with_libthread_db +enable_inprocess_agent +' + ac_precious_vars='build_alias +host_alias +target_alias +CC +CFLAGS +LDFLAGS +LIBS +CPPFLAGS +CXX +CXXFLAGS +CCC +CPP' + + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datarootdir='${prefix}/share' +datadir='${datarootdir}' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +includedir='${prefix}/include' +oldincludedir='/usr/include' +docdir='${datarootdir}/doc/${PACKAGE}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' + +ac_prev= +ac_dashdash= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval $ac_prev=\$ac_option + ac_prev= + continue + fi + + case $ac_option in + *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *=) ac_optarg= ;; + *) ac_optarg=yes ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=*) + datadir=$ac_optarg ;; + + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=\$ac_optarg ;; + + -without-* | --without-*) + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) as_fn_error $? "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information" + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + case $ac_envvar in #( + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; + esac + eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + as_fn_error $? "missing argument to $ac_option" +fi + +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + esac +fi + +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir +do + eval ac_val=\$$ac_var + # Remove trailing slashes. + case $ac_val in + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; + esac + # Be sure to have absolute directory names. + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + as_fn_error $? "working directory cannot be determined" +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + as_fn_error $? "pwd does not report name of working directory" + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures this package to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking ...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] +_ACEOF + + cat <<\_ACEOF + +Program names: + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM run sed PROGRAM on installed program names + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] + --target=TARGET configure for building compilers for TARGET [HOST] +_ACEOF +fi + +if test -n "$ac_init_help"; then + + cat <<\_ACEOF + +Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --enable-maintainer-mode + enable make rules and dependencies not useful (and + sometimes confusing) to the casual installer + --disable-largefile omit support for large files + --disable-rpath do not hardcode runtime library paths + --enable-unit-tests Enable the inclusion of unit tests when compiling + GDB + --enable-werror treat compile warnings as errors + --enable-build-warnings enable build-time compiler warnings if gcc is used + --enable-gdb-build-warnings + enable GDB specific build-time compiler warnings if + gcc is used + --enable-inprocess-agent + inprocess agent + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-intel-pt include Intel Processor Trace support (auto/yes/no) + --with-gnu-ld assume the C compiler uses GNU ld default=no + --with-libipt-prefix[=DIR] search for libipt in DIR/include and DIR/lib + --without-libipt-prefix don't search for libipt in includedir and libdir + --with-libipt-type=TYPE type of library to search for (auto/static/shared) + --with-ust=PATH Specify prefix directory for the installed UST package + Equivalent to --with-ust-include=PATH/include + plus --with-ust-lib=PATH/lib + --with-ust-include=PATH Specify directory for installed UST include files + --with-ust-lib=PATH Specify the directory for the installed UST library + --with-pkgversion=PKG Use PKG in the version string in place of "GDB" + --with-bugurl=URL Direct users to URL to report a bug + --with-libthread-db=PATH + use given libthread_db directly + +Some influential environment variables: + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a + nonstandard directory <lib dir> + LIBS libraries to pass to the linker, e.g. -l<library> + CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if + you have headers in a nonstandard directory <include dir> + CXX C++ compiler command + CXXFLAGS C++ compiler flags + CPP C preprocessor + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +Report bugs to the package provider. +_ACEOF +ac_status=$? +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for guested configure. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive + else + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } + done +fi + +test -n "$ac_init_help" && exit $ac_status +if $ac_init_version; then + cat <<\_ACEOF +configure +generated by GNU Autoconf 2.69 + +Copyright (C) 2012 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit +fi + +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## + +# ac_fn_c_try_compile LINENO +# -------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_compile + +# ac_fn_cxx_try_compile LINENO +# ---------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_cxx_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_cxx_try_compile + +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_cpp + +# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists, giving a warning if it cannot be compiled using +# the include files in INCLUDES and setting the cache variable VAR +# accordingly. +ac_fn_c_check_header_mongrel () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if eval \${$3+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 +$as_echo_n "checking $2 usability... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_header_compiler=yes +else + ac_header_compiler=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 +$as_echo_n "checking $2 presence... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <$2> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + ac_header_preproc=yes +else + ac_header_preproc=no +fi +rm -f conftest.err conftest.i conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( + yes:no: ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; + no:yes:* ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=\$ac_header_compiler" +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_mongrel + +# ac_fn_c_try_run LINENO +# ---------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes +# that executables *can* be run. +ac_fn_c_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_run + +# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists and can be compiled using the include files in +# INCLUDES, setting the cache variable VAR accordingly. +ac_fn_c_check_header_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_compile + +# ac_fn_c_check_type LINENO TYPE VAR INCLUDES +# ------------------------------------------- +# Tests whether TYPE exists after having included INCLUDES, setting cache +# variable VAR accordingly. +ac_fn_c_check_type () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=no" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +if (sizeof ($2)) + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +if (sizeof (($2))) + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + eval "$3=yes" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_type + +# ac_fn_c_try_link LINENO +# ----------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + test -x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_link + +# ac_fn_c_check_func LINENO FUNC VAR +# ---------------------------------- +# Tests whether FUNC exists, setting the cache variable VAR accordingly +ac_fn_c_check_func () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case <limits.h> declares $2. + For example, HP-UX 11i <limits.h> declares gettimeofday. */ +#define $2 innocuous_$2 + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $2 (); below. + Prefer <limits.h> to <assert.h> if __STDC__ is defined, since + <limits.h> exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include <limits.h> +#else +# include <assert.h> +#endif + +#undef $2 + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $2 (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$2 || defined __stub___$2 +choke me +#endif + +int +main () +{ +return $2 (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_func + +# ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES +# --------------------------------------------- +# Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR +# accordingly. +ac_fn_c_check_decl () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + as_decl_name=`echo $2|sed 's/ *(.*//'` + as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'` + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5 +$as_echo_n "checking whether $as_decl_name is declared... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +#ifndef $as_decl_name +#ifdef __cplusplus + (void) $as_decl_use; +#else + (void) $as_decl_name; +#endif +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_decl + +# ac_fn_c_check_member LINENO AGGR MEMBER VAR INCLUDES +# ---------------------------------------------------- +# Tries to find if the field MEMBER exists in type AGGR, after including +# INCLUDES, setting cache variable VAR accordingly. +ac_fn_c_check_member () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5 +$as_echo_n "checking for $2.$3... " >&6; } +if eval \${$4+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$5 +int +main () +{ +static $2 ac_aggr; +if (ac_aggr.$3) +return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$4=yes" +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$5 +int +main () +{ +static $2 ac_aggr; +if (sizeof ac_aggr.$3) +return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$4=yes" +else + eval "$4=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$4 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_member + +# ac_fn_cxx_try_link LINENO +# ------------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_cxx_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + test -x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_cxx_try_link + +# ac_fn_cxx_check_func LINENO FUNC VAR +# ------------------------------------ +# Tests whether FUNC exists, setting the cache variable VAR accordingly +ac_fn_cxx_check_func () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case <limits.h> declares $2. + For example, HP-UX 11i <limits.h> declares gettimeofday. */ +#define $2 innocuous_$2 + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $2 (); below. + Prefer <limits.h> to <assert.h> if __STDC__ is defined, since + <limits.h> exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include <limits.h> +#else +# include <assert.h> +#endif + +#undef $2 + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $2 (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$2 || defined __stub___$2 +choke me +#endif + +int +main () +{ +return $2 (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_cxx_check_func + +# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES +# -------------------------------------------- +# Tries to find the compile-time value of EXPR in a program that includes +# INCLUDES, setting VAR accordingly. Returns whether the value could be +# computed +ac_fn_c_compute_int () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if test "$cross_compiling" = yes; then + # Depending upon the size, compute the lo and hi bounds. +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) >= 0)]; +test_array [0] = 0; +return test_array [0]; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_lo=0 ac_mid=0 + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) <= $ac_mid)]; +test_array [0] = 0; +return test_array [0]; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_hi=$ac_mid; break +else + as_fn_arith $ac_mid + 1 && ac_lo=$as_val + if test $ac_lo -le $ac_mid; then + ac_lo= ac_hi= + break + fi + as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) < 0)]; +test_array [0] = 0; +return test_array [0]; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_hi=-1 ac_mid=-1 + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) >= $ac_mid)]; +test_array [0] = 0; +return test_array [0]; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_lo=$ac_mid; break +else + as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val + if test $ac_mid -le $ac_hi; then + ac_lo= ac_hi= + break + fi + as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + ac_lo= ac_hi= +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +# Binary search between lo and hi bounds. +while test "x$ac_lo" != "x$ac_hi"; do + as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) <= $ac_mid)]; +test_array [0] = 0; +return test_array [0]; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_hi=$ac_mid +else + as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +done +case $ac_lo in #(( +?*) eval "$3=\$ac_lo"; ac_retval=0 ;; +'') ac_retval=1 ;; +esac + else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +static long int longval () { return $2; } +static unsigned long int ulongval () { return $2; } +#include <stdio.h> +#include <stdlib.h> +int +main () +{ + + FILE *f = fopen ("conftest.val", "w"); + if (! f) + return 1; + if (($2) < 0) + { + long int i = longval (); + if (i != ($2)) + return 1; + fprintf (f, "%ld", i); + } + else + { + unsigned long int i = ulongval (); + if (i != ($2)) + return 1; + fprintf (f, "%lu", i); + } + /* Do not output a trailing newline, as this causes \r\n confusion + on some platforms. */ + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + echo >>conftest.val; read $3 <conftest.val; ac_retval=0 +else + ac_retval=1 +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f conftest.val + + fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_compute_int +cat >config.log <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by $as_me, which was +generated by GNU Autoconf 2.69. Invocation command line was + + $ $0 $@ + +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + $as_echo "PATH: $as_dir" + done +IFS=$as_save_IFS + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *\'*) + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; + 2) + as_fn_append ac_configure_args1 " '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + as_fn_append ac_configure_args " '$ac_arg'" + ;; + esac + done +done +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + $as_echo "## ---------------- ## +## Cache variables. ## +## ---------------- ##" + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + $as_echo "## ----------------- ## +## Output variables. ## +## ----------------- ##" + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + $as_echo "## ------------------- ## +## File substitutions. ## +## ------------------- ##" + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + $as_echo "## ----------- ## +## confdefs.h. ## +## ----------- ##" + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status +' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +$as_echo "/* confdefs.h */" > confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_URL "$PACKAGE_URL" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + # We do not want a PATH search for config.site. + case $CONFIG_SITE in #(( + -*) ac_site_file1=./$CONFIG_SITE;; + */*) ac_site_file1=$CONFIG_SITE;; + *) ac_site_file1=./$CONFIG_SITE;; + esac +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site +fi +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue + if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" \ + || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "failed to load site script $ac_site_file +See \`config.log' for more details" "$LINENO" 5; } + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special files + # actually), so we avoid doing that. DJGPP emulates it as a regular file. + if test /dev/null != "$cache_file" && test -f "$cache_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +as_fn_append ac_header_list " stdlib.h" +as_fn_append ac_header_list " unistd.h" +as_fn_append ac_header_list " sys/param.h" +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) as_fn_append ac_configure_args " '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 +fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + + + +ac_config_headers="$ac_config_headers config.h:config.in" + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 +$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } + # Check whether --enable-maintainer-mode was given. +if test "${enable_maintainer_mode+set}" = set; then : + enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval +else + USE_MAINTAINER_MODE=no +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 +$as_echo "$USE_MAINTAINER_MODE" >&6; } + if test $USE_MAINTAINER_MODE = yes; then + MAINTAINER_MODE_TRUE= + MAINTAINER_MODE_FALSE='#' +else + MAINTAINER_MODE_TRUE='#' + MAINTAINER_MODE_FALSE= +fi + + MAINT=$MAINTAINER_MODE_TRUE + + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5; } + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +$as_echo_n "checking whether the C compiler works... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { { ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. + break;; + * ) + break;; + esac +done +test "$ac_cv_exeext" = no && ac_cv_exeext= + +else + ac_file='' +fi +if test -z "$ac_file"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "C compiler cannot create executables +See \`config.log' for more details" "$LINENO" 5; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +$as_echo_n "checking for C compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +ac_exeext=$ac_cv_exeext + +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest conftest$ac_cv_exeext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdio.h> +int +main () +{ +FILE *f = fopen ("conftest.out", "w"); + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +ac_clean_files="$ac_clean_files conftest.out" +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +if test "$cross_compiling" != yes; then + { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if { ac_try='./conftest$ac_cv_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details" "$LINENO" 5; } + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if ${ac_cv_objext+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of object files: cannot compile +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if ${ac_cv_c_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if ${ac_cv_prog_cc_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdarg.h> +#include <stdio.h> +struct stat; +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +if test -z "$CXX"; then + if test -n "$CCC"; then + CXX=$CCC + else + if test -n "$ac_tool_prefix"; then + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CXX"; then + ac_cv_prog_CXX="$CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CXX=$ac_cv_prog_CXX +if test -n "$CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 +$as_echo "$CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CXX" && break + done +fi +if test -z "$CXX"; then + ac_ct_CXX=$CXX + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CXX"; then + ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CXX="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CXX=$ac_cv_prog_ac_ct_CXX +if test -n "$ac_ct_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 +$as_echo "$ac_ct_CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CXX" && break +done + + if test "x$ac_ct_CXX" = x; then + CXX="g++" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CXX=$ac_ct_CXX + fi +fi + + fi +fi +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 +$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } +if ${ac_cv_cxx_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_cxx_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 +$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GXX=yes +else + GXX= +fi +ac_test_CXXFLAGS=${CXXFLAGS+set} +ac_save_CXXFLAGS=$CXXFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 +$as_echo_n "checking whether $CXX accepts -g... " >&6; } +if ${ac_cv_prog_cxx_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_cxx_werror_flag=$ac_cxx_werror_flag + ac_cxx_werror_flag=yes + ac_cv_prog_cxx_g=no + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +else + CXXFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + +else + ac_cxx_werror_flag=$ac_save_cxx_werror_flag + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cxx_werror_flag=$ac_save_cxx_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 +$as_echo "$ac_cv_prog_cxx_g" >&6; } +if test "$ac_test_CXXFLAGS" = set; then + CXXFLAGS=$ac_save_CXXFLAGS +elif test $ac_cv_prog_cxx_g = yes; then + if test "$GXX" = yes; then + CXXFLAGS="-g -O2" + else + CXXFLAGS="-g" + fi +else + if test "$GXX" = yes; then + CXXFLAGS="-O2" + else + CXXFLAGS= + fi +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if ${ac_cv_prog_CPP+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since + # <limits.h> exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include <limits.h> +#else +# include <assert.h> +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <ac_nonexistent.h> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since + # <limits.h> exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include <limits.h> +#else +# include <assert.h> +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <ac_nonexistent.h> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if ${ac_cv_path_GREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_GREP" || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if ${ac_cv_path_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_EGREP" || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if ${ac_cv_header_stdc+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdlib.h> +#include <stdarg.h> +#include <string.h> +#include <float.h> + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <string.h> + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdlib.h> + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <ctype.h> +#include <stdlib.h> +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "#define STDC_HEADERS 1" >>confdefs.h + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + + ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default" +if test "x$ac_cv_header_minix_config_h" = xyes; then : + MINIX=yes +else + MINIX= +fi + + + if test "$MINIX" = yes; then + +$as_echo "#define _POSIX_SOURCE 1" >>confdefs.h + + +$as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h + + +$as_echo "#define _MINIX 1" >>confdefs.h + + fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5 +$as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; } +if ${ac_cv_safe_to_define___extensions__+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +# define __EXTENSIONS__ 1 + $ac_includes_default +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_safe_to_define___extensions__=yes +else + ac_cv_safe_to_define___extensions__=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5 +$as_echo "$ac_cv_safe_to_define___extensions__" >&6; } + test $ac_cv_safe_to_define___extensions__ = yes && + $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h + + $as_echo "#define _ALL_SOURCE 1" >>confdefs.h + + $as_echo "#define _GNU_SOURCE 1" >>confdefs.h + + $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h + + $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h + + + +# Check whether --enable-largefile was given. +if test "${enable_largefile+set}" = set; then : + enableval=$enable_largefile; +fi + +if test "$enable_largefile" != no; then + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5 +$as_echo_n "checking for special C compiler options needed for large files... " >&6; } +if ${ac_cv_sys_largefile_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_sys_largefile_CC=no + if test "$GCC" != yes; then + ac_save_CC=$CC + while :; do + # IRIX 6.2 and later do not support large files by default, + # so use the C compiler's -n32 option if that helps. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF + if ac_fn_c_try_compile "$LINENO"; then : + break +fi +rm -f core conftest.err conftest.$ac_objext + CC="$CC -n32" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_largefile_CC=' -n32'; break +fi +rm -f core conftest.err conftest.$ac_objext + break + done + CC=$ac_save_CC + rm -f conftest.$ac_ext + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5 +$as_echo "$ac_cv_sys_largefile_CC" >&6; } + if test "$ac_cv_sys_largefile_CC" != no; then + CC=$CC$ac_cv_sys_largefile_CC + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5 +$as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; } +if ${ac_cv_sys_file_offset_bits+:} false; then : + $as_echo_n "(cached) " >&6 +else + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_file_offset_bits=no; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#define _FILE_OFFSET_BITS 64 +#include <sys/types.h> + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_file_offset_bits=64; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cv_sys_file_offset_bits=unknown + break +done +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5 +$as_echo "$ac_cv_sys_file_offset_bits" >&6; } +case $ac_cv_sys_file_offset_bits in #( + no | unknown) ;; + *) +cat >>confdefs.h <<_ACEOF +#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits +_ACEOF +;; +esac +rm -rf conftest* + if test $ac_cv_sys_file_offset_bits = unknown; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5 +$as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; } +if ${ac_cv_sys_large_files+:} false; then : + $as_echo_n "(cached) " >&6 +else + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_large_files=no; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#define _LARGE_FILES 1 +#include <sys/types.h> + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_large_files=1; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cv_sys_large_files=unknown + break +done +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5 +$as_echo "$ac_cv_sys_large_files" >&6; } +case $ac_cv_sys_large_files in #( + no | unknown) ;; + *) +cat >>confdefs.h <<_ACEOF +#define _LARGE_FILES $ac_cv_sys_large_files +_ACEOF +;; +esac +rm -rf conftest* + fi + + +fi + +ac_aux_dir= +for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 +fi + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + + +# Expand $ac_aux_dir to an absolute path. +am_aux_dir=`cd "$ac_aux_dir" && pwd` + +if test x"${install_sh+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi + +# Installed binaries are usually stripped using 'strip' when the user +# run "make install-strip". However 'strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the 'STRIP' environment variable to overrule this program. +if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" + + +# Make sure we can run config.sub. +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if ${ac_cv_build+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; +esac +build=$ac_cv_build +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if ${ac_cv_host+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build +else + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; +esac +host=$ac_cv_host +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5 +$as_echo_n "checking target system type... " >&6; } +if ${ac_cv_target+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "x$target_alias" = x; then + ac_cv_target=$ac_cv_host +else + ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5 +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5 +$as_echo "$ac_cv_target" >&6; } +case $ac_cv_target in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical target" "$LINENO" 5;; +esac +target=$ac_cv_target +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_target +shift +target_cpu=$1 +target_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +target_os=$* +IFS=$ac_save_IFS +case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac + + +# The aliases save the names the user supplied, while $host etc. +# will get canonicalized. +test -n "$target_alias" && + test "$program_prefix$program_suffix$program_transform_name" = \ + NONENONEs,x,x, && + program_prefix=${target_alias}- + + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } +if test -z "$INSTALL"; then +if ${ac_cv_path_install+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in #(( + ./ | .// | /[cC]/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + fi + done + done + ;; +esac + + done +IFS=$as_save_IFS + +rm -rf conftest.one conftest.two conftest.dir + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi +else + RANLIB="$ac_cv_prog_RANLIB" +fi + + +test "$program_prefix" != NONE && + program_transform_name="s&^&$program_prefix&;$program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s&\$&$program_suffix&;$program_transform_name" +# Double any \ or $. +# By default was `s,x,x', remove it if useless. +ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' +program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` + + +# We require a C++11 compiler. Check if one is available, and if +# necessary, set CXX_DIALECT to some -std=xxx switch. + + ax_cxx_compile_alternatives="11 0x" ax_cxx_compile_cxx11_required=true + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + CXX_DIALECT="" + ac_success=no + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features by default" >&5 +$as_echo_n "checking whether $CXX supports C++11 features by default... " >&6; } +if ${ax_cv_cxx_compile_cxx11+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +// If the compiler admits that it is not ready for C++11, why torture it? +// Hopefully, this will speed up the test. + +#ifndef __cplusplus + +#error "This is not a C++ compiler" + +#elif __cplusplus < 201103L + +#error "This is not a C++11 compiler" + +#else + +namespace cxx11 +{ + + namespace test_static_assert + { + + template <typename T> + struct check + { + static_assert(sizeof(int) <= sizeof(T), "not big enough"); + }; + + } + + namespace test_final_override + { + + struct Base + { + virtual void f() {} + }; + + struct Derived : public Base + { + virtual void f() override {} + }; + + } + + namespace test_double_right_angle_brackets + { + + template < typename T > + struct check {}; + + typedef check<void> single_type; + typedef check<check<void>> double_type; + typedef check<check<check<void>>> triple_type; + typedef check<check<check<check<void>>>> quadruple_type; + + } + + namespace test_decltype + { + + int + f() + { + int a = 1; + decltype(a) b = 2; + return a + b; + } + + } + + namespace test_type_deduction + { + + template < typename T1, typename T2 > + struct is_same + { + static const bool value = false; + }; + + template < typename T > + struct is_same<T, T> + { + static const bool value = true; + }; + + template < typename T1, typename T2 > + auto + add(T1 a1, T2 a2) -> decltype(a1 + a2) + { + return a1 + a2; + } + + int + test(const int c, volatile int v) + { + static_assert(is_same<int, decltype(0)>::value == true, ""); + static_assert(is_same<int, decltype(c)>::value == false, ""); + static_assert(is_same<int, decltype(v)>::value == false, ""); + auto ac = c; + auto av = v; + auto sumi = ac + av + 'x'; + auto sumf = ac + av + 1.0; + static_assert(is_same<int, decltype(ac)>::value == true, ""); + static_assert(is_same<int, decltype(av)>::value == true, ""); + static_assert(is_same<int, decltype(sumi)>::value == true, ""); + static_assert(is_same<int, decltype(sumf)>::value == false, ""); + static_assert(is_same<int, decltype(add(c, v))>::value == true, ""); + return (sumf > 0.0) ? sumi : add(c, v); + } + + } + + namespace test_noexcept + { + + int f() { return 0; } + int g() noexcept { return 0; } + + static_assert(noexcept(f()) == false, ""); + static_assert(noexcept(g()) == true, ""); + + } + + namespace test_constexpr + { + + template < typename CharT > + unsigned long constexpr + strlen_c_r(const CharT *const s, const unsigned long acc) noexcept + { + return *s ? strlen_c_r(s + 1, acc + 1) : acc; + } + + template < typename CharT > + unsigned long constexpr + strlen_c(const CharT *const s) noexcept + { + return strlen_c_r(s, 0UL); + } + + static_assert(strlen_c("") == 0UL, ""); + static_assert(strlen_c("1") == 1UL, ""); + static_assert(strlen_c("example") == 7UL, ""); + static_assert(strlen_c("another\0example") == 7UL, ""); + + } + + namespace test_rvalue_references + { + + template < int N > + struct answer + { + static constexpr int value = N; + }; + + answer<1> f(int&) { return answer<1>(); } + answer<2> f(const int&) { return answer<2>(); } + answer<3> f(int&&) { return answer<3>(); } + + void + test() + { + int i = 0; + const int c = 0; + static_assert(decltype(f(i))::value == 1, ""); + static_assert(decltype(f(c))::value == 2, ""); + static_assert(decltype(f(0))::value == 3, ""); + } + + } + + namespace test_uniform_initialization + { + + struct test + { + static const int zero {}; + static const int one {1}; + }; + + static_assert(test::zero == 0, ""); + static_assert(test::one == 1, ""); + + } + + namespace test_lambdas + { + + void + test1() + { + auto lambda1 = [](){}; + auto lambda2 = lambda1; + lambda1(); + lambda2(); + } + + int + test2() + { + auto a = [](int i, int j){ return i + j; }(1, 2); + auto b = []() -> int { return '0'; }(); + auto c = [=](){ return a + b; }(); + auto d = [&](){ return c; }(); + auto e = [a, &b](int x) mutable { + const auto identity = [](int y){ return y; }; + for (auto i = 0; i < a; ++i) + a += b--; + return x + identity(a + b); + }(0); + return a + b + c + d + e; + } + + int + test3() + { + const auto nullary = [](){ return 0; }; + const auto unary = [](int x){ return x; }; + using nullary_t = decltype(nullary); + using unary_t = decltype(unary); + const auto higher1st = [](nullary_t f){ return f(); }; + const auto higher2nd = [unary](nullary_t f1){ + return [unary, f1](unary_t f2){ return f2(unary(f1())); }; + }; + return higher1st(nullary) + higher2nd(nullary)(unary); + } + + } + + namespace test_variadic_templates + { + + template <int...> + struct sum; + + template <int N0, int... N1toN> + struct sum<N0, N1toN...> + { + static constexpr auto value = N0 + sum<N1toN...>::value; + }; + + template <> + struct sum<> + { + static constexpr auto value = 0; + }; + + static_assert(sum<>::value == 0, ""); + static_assert(sum<1>::value == 1, ""); + static_assert(sum<23>::value == 23, ""); + static_assert(sum<1, 2>::value == 3, ""); + static_assert(sum<5, 5, 11>::value == 21, ""); + static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); + + } + + // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae + // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function + // because of this. + namespace test_template_alias_sfinae + { + + struct foo {}; + + template<typename T> + using member = typename T::member_type; + + template<typename T> + void func(...) {} + + template<typename T> + void func(member<T>*) {} + + void test(); + + void test() { func<foo>(0); } + + } + +} // namespace cxx11 + +#endif // __cplusplus >= 201103L + + + +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ax_cv_cxx_compile_cxx11=yes +else + ax_cv_cxx_compile_cxx11=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_cxx_compile_cxx11" >&5 +$as_echo "$ax_cv_cxx_compile_cxx11" >&6; } + if test x$ax_cv_cxx_compile_cxx11 = xyes; then + ac_success=yes + fi + + if test x$ac_success = xno; then + for alternative in ${ax_cxx_compile_alternatives}; do + switch="-std=gnu++${alternative}" + cachevar=`$as_echo "ax_cv_cxx_compile_cxx11_$switch" | $as_tr_sh` + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features with $switch" >&5 +$as_echo_n "checking whether $CXX supports C++11 features with $switch... " >&6; } +if eval \${$cachevar+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_CXX="$CXX" + CXX="$CXX $switch" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +// If the compiler admits that it is not ready for C++11, why torture it? +// Hopefully, this will speed up the test. + +#ifndef __cplusplus + +#error "This is not a C++ compiler" + +#elif __cplusplus < 201103L + +#error "This is not a C++11 compiler" + +#else + +namespace cxx11 +{ + + namespace test_static_assert + { + + template <typename T> + struct check + { + static_assert(sizeof(int) <= sizeof(T), "not big enough"); + }; + + } + + namespace test_final_override + { + + struct Base + { + virtual void f() {} + }; + + struct Derived : public Base + { + virtual void f() override {} + }; + + } + + namespace test_double_right_angle_brackets + { + + template < typename T > + struct check {}; + + typedef check<void> single_type; + typedef check<check<void>> double_type; + typedef check<check<check<void>>> triple_type; + typedef check<check<check<check<void>>>> quadruple_type; + + } + + namespace test_decltype + { + + int + f() + { + int a = 1; + decltype(a) b = 2; + return a + b; + } + + } + + namespace test_type_deduction + { + + template < typename T1, typename T2 > + struct is_same + { + static const bool value = false; + }; + + template < typename T > + struct is_same<T, T> + { + static const bool value = true; + }; + + template < typename T1, typename T2 > + auto + add(T1 a1, T2 a2) -> decltype(a1 + a2) + { + return a1 + a2; + } + + int + test(const int c, volatile int v) + { + static_assert(is_same<int, decltype(0)>::value == true, ""); + static_assert(is_same<int, decltype(c)>::value == false, ""); + static_assert(is_same<int, decltype(v)>::value == false, ""); + auto ac = c; + auto av = v; + auto sumi = ac + av + 'x'; + auto sumf = ac + av + 1.0; + static_assert(is_same<int, decltype(ac)>::value == true, ""); + static_assert(is_same<int, decltype(av)>::value == true, ""); + static_assert(is_same<int, decltype(sumi)>::value == true, ""); + static_assert(is_same<int, decltype(sumf)>::value == false, ""); + static_assert(is_same<int, decltype(add(c, v))>::value == true, ""); + return (sumf > 0.0) ? sumi : add(c, v); + } + + } + + namespace test_noexcept + { + + int f() { return 0; } + int g() noexcept { return 0; } + + static_assert(noexcept(f()) == false, ""); + static_assert(noexcept(g()) == true, ""); + + } + + namespace test_constexpr + { + + template < typename CharT > + unsigned long constexpr + strlen_c_r(const CharT *const s, const unsigned long acc) noexcept + { + return *s ? strlen_c_r(s + 1, acc + 1) : acc; + } + + template < typename CharT > + unsigned long constexpr + strlen_c(const CharT *const s) noexcept + { + return strlen_c_r(s, 0UL); + } + + static_assert(strlen_c("") == 0UL, ""); + static_assert(strlen_c("1") == 1UL, ""); + static_assert(strlen_c("example") == 7UL, ""); + static_assert(strlen_c("another\0example") == 7UL, ""); + + } + + namespace test_rvalue_references + { + + template < int N > + struct answer + { + static constexpr int value = N; + }; + + answer<1> f(int&) { return answer<1>(); } + answer<2> f(const int&) { return answer<2>(); } + answer<3> f(int&&) { return answer<3>(); } + + void + test() + { + int i = 0; + const int c = 0; + static_assert(decltype(f(i))::value == 1, ""); + static_assert(decltype(f(c))::value == 2, ""); + static_assert(decltype(f(0))::value == 3, ""); + } + + } + + namespace test_uniform_initialization + { + + struct test + { + static const int zero {}; + static const int one {1}; + }; + + static_assert(test::zero == 0, ""); + static_assert(test::one == 1, ""); + + } + + namespace test_lambdas + { + + void + test1() + { + auto lambda1 = [](){}; + auto lambda2 = lambda1; + lambda1(); + lambda2(); + } + + int + test2() + { + auto a = [](int i, int j){ return i + j; }(1, 2); + auto b = []() -> int { return '0'; }(); + auto c = [=](){ return a + b; }(); + auto d = [&](){ return c; }(); + auto e = [a, &b](int x) mutable { + const auto identity = [](int y){ return y; }; + for (auto i = 0; i < a; ++i) + a += b--; + return x + identity(a + b); + }(0); + return a + b + c + d + e; + } + + int + test3() + { + const auto nullary = [](){ return 0; }; + const auto unary = [](int x){ return x; }; + using nullary_t = decltype(nullary); + using unary_t = decltype(unary); + const auto higher1st = [](nullary_t f){ return f(); }; + const auto higher2nd = [unary](nullary_t f1){ + return [unary, f1](unary_t f2){ return f2(unary(f1())); }; + }; + return higher1st(nullary) + higher2nd(nullary)(unary); + } + + } + + namespace test_variadic_templates + { + + template <int...> + struct sum; + + template <int N0, int... N1toN> + struct sum<N0, N1toN...> + { + static constexpr auto value = N0 + sum<N1toN...>::value; + }; + + template <> + struct sum<> + { + static constexpr auto value = 0; + }; + + static_assert(sum<>::value == 0, ""); + static_assert(sum<1>::value == 1, ""); + static_assert(sum<23>::value == 23, ""); + static_assert(sum<1, 2>::value == 3, ""); + static_assert(sum<5, 5, 11>::value == 21, ""); + static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); + + } + + // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae + // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function + // because of this. + namespace test_template_alias_sfinae + { + + struct foo {}; + + template<typename T> + using member = typename T::member_type; + + template<typename T> + void func(...) {} + + template<typename T> + void func(member<T>*) {} + + void test(); + + void test() { func<foo>(0); } + + } + +} // namespace cxx11 + +#endif // __cplusplus >= 201103L + + + +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + eval $cachevar=yes +else + eval $cachevar=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CXX="$ac_save_CXX" +fi +eval ac_res=\$$cachevar + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + if eval test x\$$cachevar = xyes; then + CXX_DIALECT="$switch" + ac_success=yes + break + fi + done + fi + + if test x$ac_success = xno; then + for alternative in ${ax_cxx_compile_alternatives}; do + for switch in -std=c++${alternative} +std=c++${alternative} "-h std=c++${alternative}"; do + cachevar=`$as_echo "ax_cv_cxx_compile_cxx11_$switch" | $as_tr_sh` + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features with $switch" >&5 +$as_echo_n "checking whether $CXX supports C++11 features with $switch... " >&6; } +if eval \${$cachevar+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_CXX="$CXX" + CXX="$CXX $switch" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +// If the compiler admits that it is not ready for C++11, why torture it? +// Hopefully, this will speed up the test. + +#ifndef __cplusplus + +#error "This is not a C++ compiler" + +#elif __cplusplus < 201103L + +#error "This is not a C++11 compiler" + +#else + +namespace cxx11 +{ + + namespace test_static_assert + { + + template <typename T> + struct check + { + static_assert(sizeof(int) <= sizeof(T), "not big enough"); + }; + + } + + namespace test_final_override + { + + struct Base + { + virtual void f() {} + }; + + struct Derived : public Base + { + virtual void f() override {} + }; + + } + + namespace test_double_right_angle_brackets + { + + template < typename T > + struct check {}; + + typedef check<void> single_type; + typedef check<check<void>> double_type; + typedef check<check<check<void>>> triple_type; + typedef check<check<check<check<void>>>> quadruple_type; + + } + + namespace test_decltype + { + + int + f() + { + int a = 1; + decltype(a) b = 2; + return a + b; + } + + } + + namespace test_type_deduction + { + + template < typename T1, typename T2 > + struct is_same + { + static const bool value = false; + }; + + template < typename T > + struct is_same<T, T> + { + static const bool value = true; + }; + + template < typename T1, typename T2 > + auto + add(T1 a1, T2 a2) -> decltype(a1 + a2) + { + return a1 + a2; + } + + int + test(const int c, volatile int v) + { + static_assert(is_same<int, decltype(0)>::value == true, ""); + static_assert(is_same<int, decltype(c)>::value == false, ""); + static_assert(is_same<int, decltype(v)>::value == false, ""); + auto ac = c; + auto av = v; + auto sumi = ac + av + 'x'; + auto sumf = ac + av + 1.0; + static_assert(is_same<int, decltype(ac)>::value == true, ""); + static_assert(is_same<int, decltype(av)>::value == true, ""); + static_assert(is_same<int, decltype(sumi)>::value == true, ""); + static_assert(is_same<int, decltype(sumf)>::value == false, ""); + static_assert(is_same<int, decltype(add(c, v))>::value == true, ""); + return (sumf > 0.0) ? sumi : add(c, v); + } + + } + + namespace test_noexcept + { + + int f() { return 0; } + int g() noexcept { return 0; } + + static_assert(noexcept(f()) == false, ""); + static_assert(noexcept(g()) == true, ""); + + } + + namespace test_constexpr + { + + template < typename CharT > + unsigned long constexpr + strlen_c_r(const CharT *const s, const unsigned long acc) noexcept + { + return *s ? strlen_c_r(s + 1, acc + 1) : acc; + } + + template < typename CharT > + unsigned long constexpr + strlen_c(const CharT *const s) noexcept + { + return strlen_c_r(s, 0UL); + } + + static_assert(strlen_c("") == 0UL, ""); + static_assert(strlen_c("1") == 1UL, ""); + static_assert(strlen_c("example") == 7UL, ""); + static_assert(strlen_c("another\0example") == 7UL, ""); + + } + + namespace test_rvalue_references + { + + template < int N > + struct answer + { + static constexpr int value = N; + }; + + answer<1> f(int&) { return answer<1>(); } + answer<2> f(const int&) { return answer<2>(); } + answer<3> f(int&&) { return answer<3>(); } + + void + test() + { + int i = 0; + const int c = 0; + static_assert(decltype(f(i))::value == 1, ""); + static_assert(decltype(f(c))::value == 2, ""); + static_assert(decltype(f(0))::value == 3, ""); + } + + } + + namespace test_uniform_initialization + { + + struct test + { + static const int zero {}; + static const int one {1}; + }; + + static_assert(test::zero == 0, ""); + static_assert(test::one == 1, ""); + + } + + namespace test_lambdas + { + + void + test1() + { + auto lambda1 = [](){}; + auto lambda2 = lambda1; + lambda1(); + lambda2(); + } + + int + test2() + { + auto a = [](int i, int j){ return i + j; }(1, 2); + auto b = []() -> int { return '0'; }(); + auto c = [=](){ return a + b; }(); + auto d = [&](){ return c; }(); + auto e = [a, &b](int x) mutable { + const auto identity = [](int y){ return y; }; + for (auto i = 0; i < a; ++i) + a += b--; + return x + identity(a + b); + }(0); + return a + b + c + d + e; + } + + int + test3() + { + const auto nullary = [](){ return 0; }; + const auto unary = [](int x){ return x; }; + using nullary_t = decltype(nullary); + using unary_t = decltype(unary); + const auto higher1st = [](nullary_t f){ return f(); }; + const auto higher2nd = [unary](nullary_t f1){ + return [unary, f1](unary_t f2){ return f2(unary(f1())); }; + }; + return higher1st(nullary) + higher2nd(nullary)(unary); + } + + } + + namespace test_variadic_templates + { + + template <int...> + struct sum; + + template <int N0, int... N1toN> + struct sum<N0, N1toN...> + { + static constexpr auto value = N0 + sum<N1toN...>::value; + }; + + template <> + struct sum<> + { + static constexpr auto value = 0; + }; + + static_assert(sum<>::value == 0, ""); + static_assert(sum<1>::value == 1, ""); + static_assert(sum<23>::value == 23, ""); + static_assert(sum<1, 2>::value == 3, ""); + static_assert(sum<5, 5, 11>::value == 21, ""); + static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); + + } + + // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae + // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function + // because of this. + namespace test_template_alias_sfinae + { + + struct foo {}; + + template<typename T> + using member = typename T::member_type; + + template<typename T> + void func(...) {} + + template<typename T> + void func(member<T>*) {} + + void test(); + + void test() { func<foo>(0); } + + } + +} // namespace cxx11 + +#endif // __cplusplus >= 201103L + + + +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + eval $cachevar=yes +else + eval $cachevar=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CXX="$ac_save_CXX" +fi +eval ac_res=\$$cachevar + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + if eval test x\$$cachevar = xyes; then + CXX_DIALECT="$switch" + ac_success=yes + break + fi + done + if test x$ac_success = xyes; then + break + fi + done + fi + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + if test x$ax_cxx_compile_cxx11_required = xtrue; then + if test x$ac_success = xno; then + as_fn_error $? "*** A compiler with support for C++11 language features is required." "$LINENO" 5 + fi + fi + if test x$ac_success = xno; then + HAVE_CXX11=0 + { $as_echo "$as_me:${as_lineno-$LINENO}: No compiler with C++11 support was found" >&5 +$as_echo "$as_me: No compiler with C++11 support was found" >&6;} + else + HAVE_CXX11=1 + +$as_echo "#define HAVE_CXX11 1" >>confdefs.h + + fi + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if ${ac_cv_header_stdc+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdlib.h> +#include <stdarg.h> +#include <string.h> +#include <float.h> + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <string.h> + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdlib.h> + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <ctype.h> +#include <stdlib.h> +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "#define STDC_HEADERS 1" >>confdefs.h + +fi + + +ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" +if test "x$ac_cv_type_size_t" = xyes; then : + +else + +cat >>confdefs.h <<_ACEOF +#define size_t unsigned int +_ACEOF + +fi + + + + + for ac_header in $ac_header_list +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + + + + + +ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default" +if test "x$ac_cv_type_pid_t" = xyes; then : + +else + +cat >>confdefs.h <<_ACEOF +#define pid_t int +_ACEOF + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if ${ac_cv_path_SED+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed + { ac_script=; unset ac_script;} + if test -z "$SED"; then + ac_path_SED_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_SED" || continue +# Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_SED_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_SED"; then + as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 + fi +else + ac_cv_path_SED=$SED +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +$as_echo "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed + + + if test "X$prefix" = "XNONE"; then + acl_final_prefix="$ac_default_prefix" + else + acl_final_prefix="$prefix" + fi + if test "X$exec_prefix" = "XNONE"; then + acl_final_exec_prefix='${prefix}' + else + acl_final_exec_prefix="$exec_prefix" + fi + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" + prefix="$acl_save_prefix" + + +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then : + withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +# Prepare PATH_SEPARATOR. +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by GCC" >&5 +$as_echo_n "checking for ld used by GCC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | [A-Za-z]:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the path of ld + ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` + while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do + ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if ${acl_cv_path_LD+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$LD"; then + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + acl_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some GNU ld's only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + if "$acl_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then + test "$with_gnu_ld" != no && break + else + test "$with_gnu_ld" != yes && break + fi + fi + done + IFS="$ac_save_ifs" +else + acl_cv_path_LD="$LD" # Let the user override the test with a path. +fi +fi + +LD="$acl_cv_path_LD" +if test -n "$LD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if ${acl_cv_prog_gnu_ld+:} false; then : + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU ld's only accept -v. +if $LD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then + acl_cv_prog_gnu_ld=yes +else + acl_cv_prog_gnu_ld=no +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_prog_gnu_ld" >&5 +$as_echo "$acl_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$acl_cv_prog_gnu_ld + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shared library run path origin" >&5 +$as_echo_n "checking for shared library run path origin... " >&6; } +if ${acl_cv_rpath+:} false; then : + $as_echo_n "(cached) " >&6 +else + + CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ + ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh + . ./conftest.sh + rm -f ./conftest.sh + acl_cv_rpath=done + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_rpath" >&5 +$as_echo "$acl_cv_rpath" >&6; } + wl="$acl_cv_wl" + libext="$acl_cv_libext" + shlibext="$acl_cv_shlibext" + hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" + hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" + hardcode_direct="$acl_cv_hardcode_direct" + hardcode_minus_L="$acl_cv_hardcode_minus_L" + # Check whether --enable-rpath was given. +if test "${enable_rpath+set}" = set; then : + enableval=$enable_rpath; : +else + enable_rpath=yes +fi + + + + # Set the 'development' global. + . $srcdir/../bfd/development.sh + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if ${ac_cv_header_stdc+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdlib.h> +#include <stdarg.h> +#include <string.h> +#include <float.h> + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <string.h> + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdlib.h> + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <ctype.h> +#include <stdlib.h> +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "#define STDC_HEADERS 1" >>confdefs.h + +fi + + # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works +# for constant arguments. Useless! +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working alloca.h" >&5 +$as_echo_n "checking for working alloca.h... " >&6; } +if ${ac_cv_working_alloca_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <alloca.h> +int +main () +{ +char *p = (char *) alloca (2 * sizeof (int)); + if (p) return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_working_alloca_h=yes +else + ac_cv_working_alloca_h=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_working_alloca_h" >&5 +$as_echo "$ac_cv_working_alloca_h" >&6; } +if test $ac_cv_working_alloca_h = yes; then + +$as_echo "#define HAVE_ALLOCA_H 1" >>confdefs.h + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca" >&5 +$as_echo_n "checking for alloca... " >&6; } +if ${ac_cv_func_alloca_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __GNUC__ +# define alloca __builtin_alloca +#else +# ifdef _MSC_VER +# include <malloc.h> +# define alloca _alloca +# else +# ifdef HAVE_ALLOCA_H +# include <alloca.h> +# else +# ifdef _AIX + #pragma alloca +# else +# ifndef alloca /* predefined by HP cc +Olibcalls */ +void *alloca (size_t); +# endif +# endif +# endif +# endif +#endif + +int +main () +{ +char *p = (char *) alloca (1); + if (p) return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_func_alloca_works=yes +else + ac_cv_func_alloca_works=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_alloca_works" >&5 +$as_echo "$ac_cv_func_alloca_works" >&6; } + +if test $ac_cv_func_alloca_works = yes; then + +$as_echo "#define HAVE_ALLOCA 1" >>confdefs.h + +else + # The SVR3 libPW and SVR4 libucb both contain incompatible functions +# that cause trouble. Some versions do not even contain alloca or +# contain a buggy version. If you still want to use their alloca, +# use ar to extract alloca.o from them instead of compiling alloca.c. + +ALLOCA=\${LIBOBJDIR}alloca.$ac_objext + +$as_echo "#define C_ALLOCA 1" >>confdefs.h + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether \`alloca.c' needs Cray hooks" >&5 +$as_echo_n "checking whether \`alloca.c' needs Cray hooks... " >&6; } +if ${ac_cv_os_cray+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#if defined CRAY && ! defined CRAY2 +webecray +#else +wenotbecray +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "webecray" >/dev/null 2>&1; then : + ac_cv_os_cray=yes +else + ac_cv_os_cray=no +fi +rm -f conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_os_cray" >&5 +$as_echo "$ac_cv_os_cray" >&6; } +if test $ac_cv_os_cray = yes; then + for ac_func in _getb67 GETB67 getb67; do + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + +cat >>confdefs.h <<_ACEOF +#define CRAY_STACKSEG_END $ac_func +_ACEOF + + break +fi + + done +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking stack direction for C alloca" >&5 +$as_echo_n "checking stack direction for C alloca... " >&6; } +if ${ac_cv_c_stack_direction+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + ac_cv_c_stack_direction=0 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +find_stack_direction (int *addr, int depth) +{ + int dir, dummy = 0; + if (! addr) + addr = &dummy; + *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1; + dir = depth ? find_stack_direction (addr, depth - 1) : 0; + return dir + dummy; +} + +int +main (int argc, char **argv) +{ + return find_stack_direction (0, argc + !argv + 20) < 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_c_stack_direction=1 +else + ac_cv_c_stack_direction=-1 +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_stack_direction" >&5 +$as_echo "$ac_cv_c_stack_direction" >&6; } +cat >>confdefs.h <<_ACEOF +#define STACK_DIRECTION $ac_cv_c_stack_direction +_ACEOF + + +fi + + + WIN32APILIBS= + case ${host} in + *mingw32*) + +$as_echo "#define USE_WIN32API 1" >>confdefs.h + + WIN32APILIBS="-lws2_32" + ;; + esac + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nl_langinfo and CODESET" >&5 +$as_echo_n "checking for nl_langinfo and CODESET... " >&6; } +if ${am_cv_langinfo_codeset+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <langinfo.h> +int +main () +{ +char* cs = nl_langinfo(CODESET); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + am_cv_langinfo_codeset=yes +else + am_cv_langinfo_codeset=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_langinfo_codeset" >&5 +$as_echo "$am_cv_langinfo_codeset" >&6; } + if test $am_cv_langinfo_codeset = yes; then + +$as_echo "#define HAVE_LANGINFO_CODESET 1" >>confdefs.h + + fi + + + for ac_header in linux/perf_event.h locale.h memory.h signal.h sys/resource.h sys/socket.h sys/un.h sys/wait.h thread_db.h wait.h termios.h dlfcn.h linux/elf.h proc_service.h poll.h sys/poll.h sys/select.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + +for ac_func in getpagesize +do : + ac_fn_c_check_func "$LINENO" "getpagesize" "ac_cv_func_getpagesize" +if test "x$ac_cv_func_getpagesize" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_GETPAGESIZE 1 +_ACEOF + +fi +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working mmap" >&5 +$as_echo_n "checking for working mmap... " >&6; } +if ${ac_cv_func_mmap_fixed_mapped+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + ac_cv_func_mmap_fixed_mapped=no +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +/* malloc might have been renamed as rpl_malloc. */ +#undef malloc + +/* Thanks to Mike Haertel and Jim Avera for this test. + Here is a matrix of mmap possibilities: + mmap private not fixed + mmap private fixed at somewhere currently unmapped + mmap private fixed at somewhere already mapped + mmap shared not fixed + mmap shared fixed at somewhere currently unmapped + mmap shared fixed at somewhere already mapped + For private mappings, we should verify that changes cannot be read() + back from the file, nor mmap's back from the file at a different + address. (There have been systems where private was not correctly + implemented like the infamous i386 svr4.0, and systems where the + VM page cache was not coherent with the file system buffer cache + like early versions of FreeBSD and possibly contemporary NetBSD.) + For shared mappings, we should conversely verify that changes get + propagated back to all the places they're supposed to be. + + Grep wants private fixed already mapped. + The main things grep needs to know about mmap are: + * does it exist and is it safe to write into the mmap'd area + * how to use it (BSD variants) */ + +#include <fcntl.h> +#include <sys/mman.h> + +#if !defined STDC_HEADERS && !defined HAVE_STDLIB_H +char *malloc (); +#endif + +/* This mess was copied from the GNU getpagesize.h. */ +#ifndef HAVE_GETPAGESIZE +# ifdef _SC_PAGESIZE +# define getpagesize() sysconf(_SC_PAGESIZE) +# else /* no _SC_PAGESIZE */ +# ifdef HAVE_SYS_PARAM_H +# include <sys/param.h> +# ifdef EXEC_PAGESIZE +# define getpagesize() EXEC_PAGESIZE +# else /* no EXEC_PAGESIZE */ +# ifdef NBPG +# define getpagesize() NBPG * CLSIZE +# ifndef CLSIZE +# define CLSIZE 1 +# endif /* no CLSIZE */ +# else /* no NBPG */ +# ifdef NBPC +# define getpagesize() NBPC +# else /* no NBPC */ +# ifdef PAGESIZE +# define getpagesize() PAGESIZE +# endif /* PAGESIZE */ +# endif /* no NBPC */ +# endif /* no NBPG */ +# endif /* no EXEC_PAGESIZE */ +# else /* no HAVE_SYS_PARAM_H */ +# define getpagesize() 8192 /* punt totally */ +# endif /* no HAVE_SYS_PARAM_H */ +# endif /* no _SC_PAGESIZE */ + +#endif /* no HAVE_GETPAGESIZE */ + +int +main () +{ + char *data, *data2, *data3; + const char *cdata2; + int i, pagesize; + int fd, fd2; + + pagesize = getpagesize (); + + /* First, make a file with some known garbage in it. */ + data = (char *) malloc (pagesize); + if (!data) + return 1; + for (i = 0; i < pagesize; ++i) + *(data + i) = rand (); + umask (0); + fd = creat ("conftest.mmap", 0600); + if (fd < 0) + return 2; + if (write (fd, data, pagesize) != pagesize) + return 3; + close (fd); + + /* Next, check that the tail of a page is zero-filled. File must have + non-zero length, otherwise we risk SIGBUS for entire page. */ + fd2 = open ("conftest.txt", O_RDWR | O_CREAT | O_TRUNC, 0600); + if (fd2 < 0) + return 4; + cdata2 = ""; + if (write (fd2, cdata2, 1) != 1) + return 5; + data2 = (char *) mmap (0, pagesize, PROT_READ | PROT_WRITE, MAP_SHARED, fd2, 0L); + if (data2 == MAP_FAILED) + return 6; + for (i = 0; i < pagesize; ++i) + if (*(data2 + i)) + return 7; + close (fd2); + if (munmap (data2, pagesize)) + return 8; + + /* Next, try to mmap the file at a fixed address which already has + something else allocated at it. If we can, also make sure that + we see the same garbage. */ + fd = open ("conftest.mmap", O_RDWR); + if (fd < 0) + return 9; + if (data2 != mmap (data2, pagesize, PROT_READ | PROT_WRITE, + MAP_PRIVATE | MAP_FIXED, fd, 0L)) + return 10; + for (i = 0; i < pagesize; ++i) + if (*(data + i) != *(data2 + i)) + return 11; + + /* Finally, make sure that changes to the mapped area do not + percolate back to the file as seen by read(). (This is a bug on + some variants of i386 svr4.0.) */ + for (i = 0; i < pagesize; ++i) + *(data2 + i) = *(data2 + i) + 1; + data3 = (char *) malloc (pagesize); + if (!data3) + return 12; + if (read (fd, data3, pagesize) != pagesize) + return 13; + for (i = 0; i < pagesize; ++i) + if (*(data + i) != *(data3 + i)) + return 14; + close (fd); + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_mmap_fixed_mapped=yes +else + ac_cv_func_mmap_fixed_mapped=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_mmap_fixed_mapped" >&5 +$as_echo "$ac_cv_func_mmap_fixed_mapped" >&6; } +if test $ac_cv_func_mmap_fixed_mapped = yes; then + +$as_echo "#define HAVE_MMAP 1" >>confdefs.h + +fi +rm -f conftest.mmap conftest.txt + + for ac_header in vfork.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "vfork.h" "ac_cv_header_vfork_h" "$ac_includes_default" +if test "x$ac_cv_header_vfork_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_VFORK_H 1 +_ACEOF + +fi + +done + +for ac_func in fork vfork +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + +if test "x$ac_cv_func_fork" = xyes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working fork" >&5 +$as_echo_n "checking for working fork... " >&6; } +if ${ac_cv_func_fork_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + ac_cv_func_fork_works=cross +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ + + /* By Ruediger Kuhlmann. */ + return fork () < 0; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_fork_works=yes +else + ac_cv_func_fork_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_fork_works" >&5 +$as_echo "$ac_cv_func_fork_works" >&6; } + +else + ac_cv_func_fork_works=$ac_cv_func_fork +fi +if test "x$ac_cv_func_fork_works" = xcross; then + case $host in + *-*-amigaos* | *-*-msdosdjgpp*) + # Override, as these systems have only a dummy fork() stub + ac_cv_func_fork_works=no + ;; + *) + ac_cv_func_fork_works=yes + ;; + esac + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&5 +$as_echo "$as_me: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&2;} +fi +ac_cv_func_vfork_works=$ac_cv_func_vfork +if test "x$ac_cv_func_vfork" = xyes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working vfork" >&5 +$as_echo_n "checking for working vfork... " >&6; } +if ${ac_cv_func_vfork_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + ac_cv_func_vfork_works=cross +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Thanks to Paul Eggert for this test. */ +$ac_includes_default +#include <sys/wait.h> +#ifdef HAVE_VFORK_H +# include <vfork.h> +#endif +/* On some sparc systems, changes by the child to local and incoming + argument registers are propagated back to the parent. The compiler + is told about this with #include <vfork.h>, but some compilers + (e.g. gcc -O) don't grok <vfork.h>. Test for this by using a + static variable whose address is put into a register that is + clobbered by the vfork. */ +static void +#ifdef __cplusplus +sparc_address_test (int arg) +# else +sparc_address_test (arg) int arg; +#endif +{ + static pid_t child; + if (!child) { + child = vfork (); + if (child < 0) { + perror ("vfork"); + _exit(2); + } + if (!child) { + arg = getpid(); + write(-1, "", 0); + _exit (arg); + } + } +} + +int +main () +{ + pid_t parent = getpid (); + pid_t child; + + sparc_address_test (0); + + child = vfork (); + + if (child == 0) { + /* Here is another test for sparc vfork register problems. This + test uses lots of local variables, at least as many local + variables as main has allocated so far including compiler + temporaries. 4 locals are enough for gcc 1.40.3 on a Solaris + 4.1.3 sparc, but we use 8 to be safe. A buggy compiler should + reuse the register of parent for one of the local variables, + since it will think that parent can't possibly be used any more + in this routine. Assigning to the local variable will thus + munge parent in the parent process. */ + pid_t + p = getpid(), p1 = getpid(), p2 = getpid(), p3 = getpid(), + p4 = getpid(), p5 = getpid(), p6 = getpid(), p7 = getpid(); + /* Convince the compiler that p..p7 are live; otherwise, it might + use the same hardware register for all 8 local variables. */ + if (p != p1 || p != p2 || p != p3 || p != p4 + || p != p5 || p != p6 || p != p7) + _exit(1); + + /* On some systems (e.g. IRIX 3.3), vfork doesn't separate parent + from child file descriptors. If the child closes a descriptor + before it execs or exits, this munges the parent's descriptor + as well. Test for this by closing stdout in the child. */ + _exit(close(fileno(stdout)) != 0); + } else { + int status; + struct stat st; + + while (wait(&status) != child) + ; + return ( + /* Was there some problem with vforking? */ + child < 0 + + /* Did the child fail? (This shouldn't happen.) */ + || status + + /* Did the vfork/compiler bug occur? */ + || parent != getpid() + + /* Did the file descriptor bug occur? */ + || fstat(fileno(stdout), &st) != 0 + ); + } +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_vfork_works=yes +else + ac_cv_func_vfork_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_vfork_works" >&5 +$as_echo "$ac_cv_func_vfork_works" >&6; } + +fi; +if test "x$ac_cv_func_fork_works" = xcross; then + ac_cv_func_vfork_works=$ac_cv_func_vfork + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&5 +$as_echo "$as_me: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&2;} +fi + +if test "x$ac_cv_func_vfork_works" = xyes; then + +$as_echo "#define HAVE_WORKING_VFORK 1" >>confdefs.h + +else + +$as_echo "#define vfork fork" >>confdefs.h + +fi +if test "x$ac_cv_func_fork_works" = xyes; then + +$as_echo "#define HAVE_WORKING_FORK 1" >>confdefs.h + +fi + + for ac_func in fdwalk getrlimit pipe pipe2 poll socketpair sigaction \ + ptrace64 sbrk setns sigaltstack sigprocmask \ + setpgid setpgrp getrusage getauxval +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + + ac_fn_c_check_decl "$LINENO" "ADDR_NO_RANDOMIZE" "ac_cv_have_decl_ADDR_NO_RANDOMIZE" "#include <sys/personality.h> +" +if test "x$ac_cv_have_decl_ADDR_NO_RANDOMIZE" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_ADDR_NO_RANDOMIZE $ac_have_decl +_ACEOF + + + if test "$cross_compiling" = yes; then : + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/personality.h> +int +main () +{ + + # if !HAVE_DECL_ADDR_NO_RANDOMIZE + # define ADDR_NO_RANDOMIZE 0x0040000 + # endif + /* Test the flag could be set and stays set. */ + personality (personality (0xffffffff) | ADDR_NO_RANDOMIZE); + if (!(personality (personality (0xffffffff)) & ADDR_NO_RANDOMIZE)) + return 1 + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + have_personality=true +else + have_personality=false +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/personality.h> +int +main () +{ + + # if !HAVE_DECL_ADDR_NO_RANDOMIZE + # define ADDR_NO_RANDOMIZE 0x0040000 + # endif + /* Test the flag could be set and stays set. */ + personality (personality (0xffffffff) | ADDR_NO_RANDOMIZE); + if (!(personality (personality (0xffffffff)) & ADDR_NO_RANDOMIZE)) + return 1 + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + have_personality=true +else + have_personality=false +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + if $have_personality + then + +$as_echo "#define HAVE_PERSONALITY 1" >>confdefs.h + + fi + + ac_fn_c_check_decl "$LINENO" "strstr" "ac_cv_have_decl_strstr" "$ac_includes_default" +if test "x$ac_cv_have_decl_strstr" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_STRSTR $ac_have_decl +_ACEOF + + + # ----------------------- # + # Checks for structures. # + # ----------------------- # + + ac_fn_c_check_member "$LINENO" "struct stat" "st_blocks" "ac_cv_member_struct_stat_st_blocks" "$ac_includes_default" +if test "x$ac_cv_member_struct_stat_st_blocks" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_STAT_ST_BLOCKS 1 +_ACEOF + + +fi +ac_fn_c_check_member "$LINENO" "struct stat" "st_blksize" "ac_cv_member_struct_stat_st_blksize" "$ac_includes_default" +if test "x$ac_cv_member_struct_stat_st_blksize" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_STAT_ST_BLKSIZE 1 +_ACEOF + + +fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing kinfo_getfile" >&5 +$as_echo_n "checking for library containing kinfo_getfile... " >&6; } +if ${ac_cv_search_kinfo_getfile+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char kinfo_getfile (); +int +main () +{ +return kinfo_getfile (); + ; + return 0; +} +_ACEOF +for ac_lib in '' util util-freebsd; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_kinfo_getfile=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_kinfo_getfile+:} false; then : + break +fi +done +if ${ac_cv_search_kinfo_getfile+:} false; then : + +else + ac_cv_search_kinfo_getfile=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_kinfo_getfile" >&5 +$as_echo "$ac_cv_search_kinfo_getfile" >&6; } +ac_res=$ac_cv_search_kinfo_getfile +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + +$as_echo "#define HAVE_KINFO_GETFILE 1" >>confdefs.h + +fi + + + # Check for std::thread. This does not work on some platforms, like + # mingw and DJGPP. + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + + + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +ax_pthread_ok=no + +# We used to check for pthread.h first, but this fails if pthread.h +# requires special compiler flags (e.g. on Tru64 or Sequent). +# It gets checked for in the link test anyway. + +# First of all, check if the user has set any of the PTHREAD_LIBS, +# etcetera environment variables, and if threads linking works using +# them: +if test "x$PTHREAD_CFLAGS$PTHREAD_LIBS" != "x"; then + ax_pthread_save_CC="$CC" + ax_pthread_save_CFLAGS="$CFLAGS" + ax_pthread_save_LIBS="$LIBS" + if test "x$PTHREAD_CC" != "x"; then : + CC="$PTHREAD_CC" +fi + CFLAGS="$CFLAGS $PTHREAD_CFLAGS" + LIBS="$PTHREAD_LIBS $LIBS" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_join using $CC $PTHREAD_CFLAGS $PTHREAD_LIBS" >&5 +$as_echo_n "checking for pthread_join using $CC $PTHREAD_CFLAGS $PTHREAD_LIBS... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char pthread_join (); +int +main () +{ +return pthread_join (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ax_pthread_ok=yes +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5 +$as_echo "$ax_pthread_ok" >&6; } + if test "x$ax_pthread_ok" = "xno"; then + PTHREAD_LIBS="" + PTHREAD_CFLAGS="" + fi + CC="$ax_pthread_save_CC" + CFLAGS="$ax_pthread_save_CFLAGS" + LIBS="$ax_pthread_save_LIBS" +fi + +# We must check for the threads library under a number of different +# names; the ordering is very important because some systems +# (e.g. DEC) have both -lpthread and -lpthreads, where one of the +# libraries is broken (non-POSIX). + +# Create a list of thread flags to try. Items starting with a "-" are +# C compiler flags, and other items are library names, except for "none" +# which indicates that we try without any flags at all, and "pthread-config" +# which is a program returning the flags for the Pth emulation library. + +ax_pthread_flags="pthreads none -Kthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config" + +# The ordering *is* (sometimes) important. Some notes on the +# individual items follow: + +# pthreads: AIX (must check this before -lpthread) +# none: in case threads are in libc; should be tried before -Kthread and +# other compiler flags to prevent continual compiler warnings +# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h) +# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads), Tru64 +# (Note: HP C rejects this with "bad form for `-t' option") +# -pthreads: Solaris/gcc (Note: HP C also rejects) +# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it +# doesn't hurt to check since this sometimes defines pthreads and +# -D_REENTRANT too), HP C (must be checked before -lpthread, which +# is present but should not be used directly; and before -mthreads, +# because the compiler interprets this as "-mt" + "-hreads") +# -mthreads: Mingw32/gcc, Lynx/gcc +# pthread: Linux, etcetera +# --thread-safe: KAI C++ +# pthread-config: use pthread-config program (for GNU Pth library) + +case $host_os in + + freebsd*) + + # -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able) + # lthread: LinuxThreads port on FreeBSD (also preferred to -pthread) + + ax_pthread_flags="-kthread lthread $ax_pthread_flags" + ;; + + hpux*) + + # From the cc(1) man page: "[-mt] Sets various -D flags to enable + # multi-threading and also sets -lpthread." + + ax_pthread_flags="-mt -pthread pthread $ax_pthread_flags" + ;; + + openedition*) + + # IBM z/OS requires a feature-test macro to be defined in order to + # enable POSIX threads at all, so give the user a hint if this is + # not set. (We don't define these ourselves, as they can affect + # other portions of the system API in unpredictable ways.) + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +# if !defined(_OPEN_THREADS) && !defined(_UNIX03_THREADS) + AX_PTHREAD_ZOS_MISSING +# endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "AX_PTHREAD_ZOS_MISSING" >/dev/null 2>&1; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: IBM z/OS requires -D_OPEN_THREADS or -D_UNIX03_THREADS to enable pthreads support." >&5 +$as_echo "$as_me: WARNING: IBM z/OS requires -D_OPEN_THREADS or -D_UNIX03_THREADS to enable pthreads support." >&2;} +fi +rm -f conftest* + + ;; + + solaris*) + + # On Solaris (at least, for some versions), libc contains stubbed + # (non-functional) versions of the pthreads routines, so link-based + # tests will erroneously succeed. (N.B.: The stubs are missing + # pthread_cleanup_push, or rather a function called by this macro, + # so we could check for that, but who knows whether they'll stub + # that too in a future libc.) So we'll check first for the + # standard Solaris way of linking pthreads (-mt -lpthread). + + ax_pthread_flags="-mt,pthread pthread $ax_pthread_flags" + ;; +esac + +# GCC generally uses -pthread, or -pthreads on some platforms (e.g. SPARC) + +if test "x$GCC" = "xyes"; then : + ax_pthread_flags="-pthread -pthreads $ax_pthread_flags" +fi + +# The presence of a feature test macro requesting re-entrant function +# definitions is, on some systems, a strong hint that pthreads support is +# correctly enabled + +case $host_os in + darwin* | hpux* | linux* | osf* | solaris*) + ax_pthread_check_macro="_REENTRANT" + ;; + + aix*) + ax_pthread_check_macro="_THREAD_SAFE" + ;; + + *) + ax_pthread_check_macro="--" + ;; +esac +if test "x$ax_pthread_check_macro" = "x--"; then : + ax_pthread_check_cond=0 +else + ax_pthread_check_cond="!defined($ax_pthread_check_macro)" +fi + +# Are we compiling with Clang? + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC is Clang" >&5 +$as_echo_n "checking whether $CC is Clang... " >&6; } +if ${ax_cv_PTHREAD_CLANG+:} false; then : + $as_echo_n "(cached) " >&6 +else + ax_cv_PTHREAD_CLANG=no + # Note that Autoconf sets GCC=yes for Clang as well as GCC + if test "x$GCC" = "xyes"; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Note: Clang 2.7 lacks __clang_[a-z]+__ */ +# if defined(__clang__) && defined(__llvm__) + AX_PTHREAD_CC_IS_CLANG +# endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "AX_PTHREAD_CC_IS_CLANG" >/dev/null 2>&1; then : + ax_cv_PTHREAD_CLANG=yes +fi +rm -f conftest* + + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_CLANG" >&5 +$as_echo "$ax_cv_PTHREAD_CLANG" >&6; } +ax_pthread_clang="$ax_cv_PTHREAD_CLANG" + +ax_pthread_clang_warning=no + +# Clang needs special handling, because older versions handle the -pthread +# option in a rather... idiosyncratic way + +if test "x$ax_pthread_clang" = "xyes"; then + + # Clang takes -pthread; it has never supported any other flag + + # (Note 1: This will need to be revisited if a system that Clang + # supports has POSIX threads in a separate library. This tends not + # to be the way of modern systems, but it's conceivable.) + + # (Note 2: On some systems, notably Darwin, -pthread is not needed + # to get POSIX threads support; the API is always present and + # active. We could reasonably leave PTHREAD_CFLAGS empty. But + # -pthread does define _REENTRANT, and while the Darwin headers + # ignore this macro, third-party headers might not.) + + PTHREAD_CFLAGS="-pthread" + PTHREAD_LIBS= + + ax_pthread_ok=yes + + # However, older versions of Clang make a point of warning the user + # that, in an invocation where only linking and no compilation is + # taking place, the -pthread option has no effect ("argument unused + # during compilation"). They expect -pthread to be passed in only + # when source code is being compiled. + # + # Problem is, this is at odds with the way Automake and most other + # C build frameworks function, which is that the same flags used in + # compilation (CFLAGS) are also used in linking. Many systems + # supported by AX_PTHREAD require exactly this for POSIX threads + # support, and in fact it is often not straightforward to specify a + # flag that is used only in the compilation phase and not in + # linking. Such a scenario is extremely rare in practice. + # + # Even though use of the -pthread flag in linking would only print + # a warning, this can be a nuisance for well-run software projects + # that build with -Werror. So if the active version of Clang has + # this misfeature, we search for an option to squash it. + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether Clang needs flag to prevent \"argument unused\" warning when linking with -pthread" >&5 +$as_echo_n "checking whether Clang needs flag to prevent \"argument unused\" warning when linking with -pthread... " >&6; } +if ${ax_cv_PTHREAD_CLANG_NO_WARN_FLAG+:} false; then : + $as_echo_n "(cached) " >&6 +else + ax_cv_PTHREAD_CLANG_NO_WARN_FLAG=unknown + # Create an alternate version of $ac_link that compiles and + # links in two steps (.c -> .o, .o -> exe) instead of one + # (.c -> exe), because the warning occurs only in the second + # step + ax_pthread_save_ac_link="$ac_link" + ax_pthread_sed='s/conftest\.\$ac_ext/conftest.$ac_objext/g' + ax_pthread_link_step=`$as_echo "$ac_link" | sed "$ax_pthread_sed"` + ax_pthread_2step_ac_link="($ac_compile) && (echo ==== >&5) && ($ax_pthread_link_step)" + ax_pthread_save_CFLAGS="$CFLAGS" + for ax_pthread_try in '' -Qunused-arguments -Wno-unused-command-line-argument unknown; do + if test "x$ax_pthread_try" = "xunknown"; then : + break +fi + CFLAGS="-Werror -Wunknown-warning-option $ax_pthread_try -pthread $ax_pthread_save_CFLAGS" + ac_link="$ax_pthread_save_ac_link" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int main(void){return 0;} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_link="$ax_pthread_2step_ac_link" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int main(void){return 0;} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + break +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + done + ac_link="$ax_pthread_save_ac_link" + CFLAGS="$ax_pthread_save_CFLAGS" + if test "x$ax_pthread_try" = "x"; then : + ax_pthread_try=no +fi + ax_cv_PTHREAD_CLANG_NO_WARN_FLAG="$ax_pthread_try" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" >&5 +$as_echo "$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" >&6; } + + case "$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" in + no | unknown) ;; + *) PTHREAD_CFLAGS="$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG $PTHREAD_CFLAGS" ;; + esac + +fi # $ax_pthread_clang = yes + +if test "x$ax_pthread_ok" = "xno"; then +for ax_pthread_try_flag in $ax_pthread_flags; do + + case $ax_pthread_try_flag in + none) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work without any flags" >&5 +$as_echo_n "checking whether pthreads work without any flags... " >&6; } + ;; + + -mt,pthread) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with -mt -lpthread" >&5 +$as_echo_n "checking whether pthreads work with -mt -lpthread... " >&6; } + PTHREAD_CFLAGS="-mt" + PTHREAD_LIBS="-lpthread" + ;; + + -*) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with $ax_pthread_try_flag" >&5 +$as_echo_n "checking whether pthreads work with $ax_pthread_try_flag... " >&6; } + PTHREAD_CFLAGS="$ax_pthread_try_flag" + ;; + + pthread-config) + # Extract the first word of "pthread-config", so it can be a program name with args. +set dummy pthread-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ax_pthread_config+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ax_pthread_config"; then + ac_cv_prog_ax_pthread_config="$ax_pthread_config" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ax_pthread_config="yes" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_prog_ax_pthread_config" && ac_cv_prog_ax_pthread_config="no" +fi +fi +ax_pthread_config=$ac_cv_prog_ax_pthread_config +if test -n "$ax_pthread_config"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_config" >&5 +$as_echo "$ax_pthread_config" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$ax_pthread_config" = "xno"; then : + continue +fi + PTHREAD_CFLAGS="`pthread-config --cflags`" + PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" + ;; + + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the pthreads library -l$ax_pthread_try_flag" >&5 +$as_echo_n "checking for the pthreads library -l$ax_pthread_try_flag... " >&6; } + PTHREAD_LIBS="-l$ax_pthread_try_flag" + ;; + esac + + ax_pthread_save_CFLAGS="$CFLAGS" + ax_pthread_save_LIBS="$LIBS" + CFLAGS="$CFLAGS $PTHREAD_CFLAGS" + LIBS="$PTHREAD_LIBS $LIBS" + + # Check for various functions. We must include pthread.h, + # since some functions may be macros. (On the Sequent, we + # need a special flag -Kthread to make this header compile.) + # We check for pthread_join because it is in -lpthread on IRIX + # while pthread_create is in libc. We check for pthread_attr_init + # due to DEC craziness with -lpthreads. We check for + # pthread_cleanup_push because it is one of the few pthread + # functions on Solaris that doesn't have a non-functional libc stub. + # We try pthread_create on general principles. + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <pthread.h> +# if $ax_pthread_check_cond +# error "$ax_pthread_check_macro must be defined" +# endif + static void routine(void *a) { a = 0; } + static void *start_routine(void *a) { return a; } +int +main () +{ +pthread_t th; pthread_attr_t attr; + pthread_create(&th, 0, start_routine, 0); + pthread_join(th, 0); + pthread_attr_init(&attr); + pthread_cleanup_push(routine, 0); + pthread_cleanup_pop(0) /* ; */ + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ax_pthread_ok=yes +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + + CFLAGS="$ax_pthread_save_CFLAGS" + LIBS="$ax_pthread_save_LIBS" + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5 +$as_echo "$ax_pthread_ok" >&6; } + if test "x$ax_pthread_ok" = "xyes"; then : + break +fi + + PTHREAD_LIBS="" + PTHREAD_CFLAGS="" +done +fi + +# Various other checks: +if test "x$ax_pthread_ok" = "xyes"; then + ax_pthread_save_CFLAGS="$CFLAGS" + ax_pthread_save_LIBS="$LIBS" + CFLAGS="$CFLAGS $PTHREAD_CFLAGS" + LIBS="$PTHREAD_LIBS $LIBS" + + # Detect AIX lossage: JOINABLE attribute is called UNDETACHED. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for joinable pthread attribute" >&5 +$as_echo_n "checking for joinable pthread attribute... " >&6; } +if ${ax_cv_PTHREAD_JOINABLE_ATTR+:} false; then : + $as_echo_n "(cached) " >&6 +else + ax_cv_PTHREAD_JOINABLE_ATTR=unknown + for ax_pthread_attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <pthread.h> +int +main () +{ +int attr = $ax_pthread_attr; return attr /* ; */ + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ax_cv_PTHREAD_JOINABLE_ATTR=$ax_pthread_attr; break +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + done + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_JOINABLE_ATTR" >&5 +$as_echo "$ax_cv_PTHREAD_JOINABLE_ATTR" >&6; } + if test "x$ax_cv_PTHREAD_JOINABLE_ATTR" != "xunknown" && \ + test "x$ax_cv_PTHREAD_JOINABLE_ATTR" != "xPTHREAD_CREATE_JOINABLE" && \ + test "x$ax_pthread_joinable_attr_defined" != "xyes"; then : + +cat >>confdefs.h <<_ACEOF +#define PTHREAD_CREATE_JOINABLE $ax_cv_PTHREAD_JOINABLE_ATTR +_ACEOF + + ax_pthread_joinable_attr_defined=yes + +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether more special flags are required for pthreads" >&5 +$as_echo_n "checking whether more special flags are required for pthreads... " >&6; } +if ${ax_cv_PTHREAD_SPECIAL_FLAGS+:} false; then : + $as_echo_n "(cached) " >&6 +else + ax_cv_PTHREAD_SPECIAL_FLAGS=no + case $host_os in + solaris*) + ax_cv_PTHREAD_SPECIAL_FLAGS="-D_POSIX_PTHREAD_SEMANTICS" + ;; + esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_SPECIAL_FLAGS" >&5 +$as_echo "$ax_cv_PTHREAD_SPECIAL_FLAGS" >&6; } + if test "x$ax_cv_PTHREAD_SPECIAL_FLAGS" != "xno" && \ + test "x$ax_pthread_special_flags_added" != "xyes"; then : + PTHREAD_CFLAGS="$ax_cv_PTHREAD_SPECIAL_FLAGS $PTHREAD_CFLAGS" + ax_pthread_special_flags_added=yes +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PTHREAD_PRIO_INHERIT" >&5 +$as_echo_n "checking for PTHREAD_PRIO_INHERIT... " >&6; } +if ${ax_cv_PTHREAD_PRIO_INHERIT+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <pthread.h> +int +main () +{ +int i = PTHREAD_PRIO_INHERIT; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ax_cv_PTHREAD_PRIO_INHERIT=yes +else + ax_cv_PTHREAD_PRIO_INHERIT=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_PRIO_INHERIT" >&5 +$as_echo "$ax_cv_PTHREAD_PRIO_INHERIT" >&6; } + if test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes" && \ + test "x$ax_pthread_prio_inherit_defined" != "xyes"; then : + +$as_echo "#define HAVE_PTHREAD_PRIO_INHERIT 1" >>confdefs.h + + ax_pthread_prio_inherit_defined=yes + +fi + + CFLAGS="$ax_pthread_save_CFLAGS" + LIBS="$ax_pthread_save_LIBS" + + # More AIX lossage: compile with *_r variant + if test "x$GCC" != "xyes"; then + case $host_os in + aix*) + case "x/$CC" in #( + x*/c89|x*/c89_128|x*/c99|x*/c99_128|x*/cc|x*/cc128|x*/xlc|x*/xlc_v6|x*/xlc128|x*/xlc128_v6) : + #handle absolute path differently from PATH based program lookup + case "x$CC" in #( + x/*) : + if as_fn_executable_p ${CC}_r; then : + PTHREAD_CC="${CC}_r" +fi ;; #( + *) : + for ac_prog in ${CC}_r +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_PTHREAD_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$PTHREAD_CC"; then + ac_cv_prog_PTHREAD_CC="$PTHREAD_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_PTHREAD_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +PTHREAD_CC=$ac_cv_prog_PTHREAD_CC +if test -n "$PTHREAD_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PTHREAD_CC" >&5 +$as_echo "$PTHREAD_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$PTHREAD_CC" && break +done +test -n "$PTHREAD_CC" || PTHREAD_CC="$CC" + ;; +esac ;; #( + *) : + ;; +esac + ;; + esac + fi +fi + +test -n "$PTHREAD_CC" || PTHREAD_CC="$CC" + + + + + +# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: +if test "x$ax_pthread_ok" = "xyes"; then + threads=yes + : +else + ax_pthread_ok=no + threads=no +fi +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + + if test "$threads" = "yes"; then + save_LIBS="$LIBS" + LIBS="$PTHREAD_LIBS $LIBS" + save_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$PTHREAD_CFLAGS $save_CXXFLAGS" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for std::thread" >&5 +$as_echo_n "checking for std::thread... " >&6; } +if ${gdb_cv_cxx_std_thread+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <thread> + void callback() { } +int +main () +{ +std::thread t(callback); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + gdb_cv_cxx_std_thread=yes +else + gdb_cv_cxx_std_thread=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_cxx_std_thread" >&5 +$as_echo "$gdb_cv_cxx_std_thread" >&6; } + + # This check must be here, while LIBS includes any necessary + # threading library. + for ac_func in pthread_sigmask pthread_setname_np +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_cxx_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + + LIBS="$save_LIBS" + CXXFLAGS="$save_CXXFLAGS" + fi + if test "$gdb_cv_cxx_std_thread" = "yes"; then + +$as_echo "#define CXX_STD_THREAD 1" >>confdefs.h + + fi + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sigsetjmp" >&5 +$as_echo_n "checking for sigsetjmp... " >&6; } +if ${gdb_cv_func_sigsetjmp+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include <setjmp.h> + +int +main () +{ +sigjmp_buf env; while (! sigsetjmp (env, 1)) siglongjmp (env, 1); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gdb_cv_func_sigsetjmp=yes +else + gdb_cv_func_sigsetjmp=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_func_sigsetjmp" >&5 +$as_echo "$gdb_cv_func_sigsetjmp" >&6; } + if test "$gdb_cv_func_sigsetjmp" = "yes"; then + +$as_echo "#define HAVE_SIGSETJMP 1" >>confdefs.h + + fi + + +# Check whether --with-intel_pt was given. +if test "${with_intel_pt+set}" = set; then : + withval=$with_intel_pt; +else + with_intel_pt=auto +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use intel pt" >&5 +$as_echo_n "checking whether to use intel pt... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_intel_pt" >&5 +$as_echo "$with_intel_pt" >&6; } + + if test "${with_intel_pt}" = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Intel Processor Trace support disabled; some features may be unavailable." >&5 +$as_echo "$as_me: WARNING: Intel Processor Trace support disabled; some features may be unavailable." >&2;} + HAVE_LIBIPT=no + else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include <linux/perf_event.h> + #ifndef PERF_ATTR_SIZE_VER5 + # error + #endif + +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + perf_event=yes +else + perf_event=no +fi +rm -f conftest.err conftest.i conftest.$ac_ext + if test "$perf_event" != yes; then + if test "$with_intel_pt" = yes; then + as_fn_error $? "linux/perf_event.h missing or too old" "$LINENO" 5 + else + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: linux/perf_event.h missing or too old; some features may be unavailable." >&5 +$as_echo "$as_me: WARNING: linux/perf_event.h missing or too old; some features may be unavailable." >&2;} + fi + fi + + + + + + + + + + use_additional=yes + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + +# Check whether --with-libipt-prefix was given. +if test "${with_libipt_prefix+set}" = set; then : + withval=$with_libipt_prefix; + if test "X$withval" = "Xno"; then + use_additional=no + else + if test "X$withval" = "X"; then + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + else + additional_includedir="$withval/include" + additional_libdir="$withval/lib" + fi + fi + +fi + + +# Check whether --with-libipt-type was given. +if test "${with_libipt_type+set}" = set; then : + withval=$with_libipt_type; with_libipt_type=$withval +else + with_libipt_type=auto +fi + + lib_type=`eval echo \$with_libipt_type` + + LIBIPT= + LTLIBIPT= + INCIPT= + rpathdirs= + ltrpathdirs= + names_already_handled= + names_next_round='ipt ' + while test -n "$names_next_round"; do + names_this_round="$names_next_round" + names_next_round= + for name in $names_this_round; do + already_handled= + for n in $names_already_handled; do + if test "$n" = "$name"; then + already_handled=yes + break + fi + done + if test -z "$already_handled"; then + names_already_handled="$names_already_handled $name" + uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` + eval value=\"\$HAVE_LIB$uppername\" + if test -n "$value"; then + if test "$value" = yes; then + eval value=\"\$LIB$uppername\" + test -z "$value" || LIBIPT="${LIBIPT}${LIBIPT:+ }$value" + eval value=\"\$LTLIB$uppername\" + test -z "$value" || LTLIBIPT="${LTLIBIPT}${LTLIBIPT:+ }$value" + else + : + fi + else + found_dir= + found_la= + found_so= + found_a= + if test $use_additional = yes; then + if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext" && test x$lib_type != xstatic; then + found_dir="$additional_libdir" + found_so="$additional_libdir/lib$name.$shlibext" + if test -f "$additional_libdir/lib$name.la"; then + found_la="$additional_libdir/lib$name.la" + fi + elif test x$lib_type != xshared; then + if test -f "$additional_libdir/lib$name.$libext"; then + found_dir="$additional_libdir" + found_a="$additional_libdir/lib$name.$libext" + if test -f "$additional_libdir/lib$name.la"; then + found_la="$additional_libdir/lib$name.la" + fi + fi + fi + fi + if test "X$found_dir" = "X"; then + for x in $LDFLAGS $LTLIBIPT; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + case "$x" in + -L*) + dir=`echo "X$x" | sed -e 's/^X-L//'` + if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext" && test x$lib_type != xstatic; then + found_dir="$dir" + found_so="$dir/lib$name.$shlibext" + if test -f "$dir/lib$name.la"; then + found_la="$dir/lib$name.la" + fi + elif test x$lib_type != xshared; then + if test -f "$dir/lib$name.$libext"; then + found_dir="$dir" + found_a="$dir/lib$name.$libext" + if test -f "$dir/lib$name.la"; then + found_la="$dir/lib$name.la" + fi + fi + fi + ;; + esac + if test "X$found_dir" != "X"; then + break + fi + done + fi + if test "X$found_dir" != "X"; then + LTLIBIPT="${LTLIBIPT}${LTLIBIPT:+ }-L$found_dir -l$name" + if test "X$found_so" != "X"; then + if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then + LIBIPT="${LIBIPT}${LIBIPT:+ }$found_so" + else + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $found_dir" + fi + if test "$hardcode_direct" = yes; then + LIBIPT="${LIBIPT}${LIBIPT:+ }$found_so" + else + if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then + LIBIPT="${LIBIPT}${LIBIPT:+ }$found_so" + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $found_dir" + fi + else + haveit= + for x in $LDFLAGS $LIBIPT; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + LIBIPT="${LIBIPT}${LIBIPT:+ }-L$found_dir" + fi + if test "$hardcode_minus_L" != no; then + LIBIPT="${LIBIPT}${LIBIPT:+ }$found_so" + else + LIBIPT="${LIBIPT}${LIBIPT:+ }-l$name" + fi + fi + fi + fi + else + if test "X$found_a" != "X"; then + LIBIPT="${LIBIPT}${LIBIPT:+ }$found_a" + else + LIBIPT="${LIBIPT}${LIBIPT:+ }-L$found_dir -l$name" + fi + fi + additional_includedir= + case "$found_dir" in + */lib | */lib/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'` + additional_includedir="$basedir/include" + ;; + esac + if test "X$additional_includedir" != "X"; then + if test "X$additional_includedir" != "X/usr/include"; then + haveit= + if test "X$additional_includedir" = "X/usr/local/include"; then + if test -n "$GCC"; then + case $host_os in + linux*) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + for x in $CPPFLAGS $INCIPT; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-I$additional_includedir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_includedir"; then + INCIPT="${INCIPT}${INCIPT:+ }-I$additional_includedir" + fi + fi + fi + fi + fi + if test -n "$found_la"; then + save_libdir="$libdir" + case "$found_la" in + */* | *\\*) . "$found_la" ;; + *) . "./$found_la" ;; + esac + libdir="$save_libdir" + for dep in $dependency_libs; do + case "$dep" in + -L*) + additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` + if test "X$additional_libdir" != "X/usr/lib"; then + haveit= + if test "X$additional_libdir" = "X/usr/local/lib"; then + if test -n "$GCC"; then + case $host_os in + linux*) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + haveit= + for x in $LDFLAGS $LIBIPT; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + LIBIPT="${LIBIPT}${LIBIPT:+ }-L$additional_libdir" + fi + fi + haveit= + for x in $LDFLAGS $LTLIBIPT; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + LTLIBIPT="${LTLIBIPT}${LTLIBIPT:+ }-L$additional_libdir" + fi + fi + fi + fi + ;; + -R*) + dir=`echo "X$dep" | sed -e 's/^X-R//'` + if test "$enable_rpath" != no; then + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $dir" + fi + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $dir" + fi + fi + ;; + -l*) + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` + ;; + *.la) + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` + ;; + *) + LIBIPT="${LIBIPT}${LIBIPT:+ }$dep" + LTLIBIPT="${LTLIBIPT}${LTLIBIPT:+ }$dep" + ;; + esac + done + fi + else + if test "x$lib_type" = "xauto" || test "x$lib_type" = "xshared"; then + LIBIPT="${LIBIPT}${LIBIPT:+ }-l$name" + LTLIBIPT="${LTLIBIPT}${LTLIBIPT:+ }-l$name" + else + LIBIPT="${LIBIPT}${LIBIPT:+ }-l:lib$name.$libext" + LTLIBIPT="${LTLIBIPT}${LTLIBIPT:+ }-l:lib$name.$libext" + fi + fi + fi + fi + done + done + if test "X$rpathdirs" != "X"; then + if test -n "$hardcode_libdir_separator"; then + alldirs= + for found_dir in $rpathdirs; do + alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir" + done + acl_save_libdir="$libdir" + libdir="$alldirs" + eval flag=\"$hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIBIPT="${LIBIPT}${LIBIPT:+ }$flag" + else + for found_dir in $rpathdirs; do + acl_save_libdir="$libdir" + libdir="$found_dir" + eval flag=\"$hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIBIPT="${LIBIPT}${LIBIPT:+ }$flag" + done + fi + fi + if test "X$ltrpathdirs" != "X"; then + for found_dir in $ltrpathdirs; do + LTLIBIPT="${LTLIBIPT}${LTLIBIPT:+ }-R$found_dir" + done + fi + + + ac_save_CPPFLAGS="$CPPFLAGS" + + for element in $INCIPT; do + haveit= + for x in $CPPFLAGS; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X$element"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" + fi + done + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libipt" >&5 +$as_echo_n "checking for libipt... " >&6; } +if ${ac_cv_libipt+:} false; then : + $as_echo_n "(cached) " >&6 +else + + ac_save_LIBS="$LIBS" + LIBS="$LIBS $LIBIPT" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include "intel-pt.h" +int +main () +{ +pt_insn_alloc_decoder (0); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_libipt=yes +else + ac_cv_libipt=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LIBS="$ac_save_LIBS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_libipt" >&5 +$as_echo "$ac_cv_libipt" >&6; } + if test "$ac_cv_libipt" = yes; then + HAVE_LIBIPT=yes + +$as_echo "#define HAVE_LIBIPT 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libipt" >&5 +$as_echo_n "checking how to link with libipt... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBIPT" >&5 +$as_echo "$LIBIPT" >&6; } + else + HAVE_LIBIPT=no + CPPFLAGS="$ac_save_CPPFLAGS" + LIBIPT= + LTLIBIPT= + fi + + + + + + + if test "$HAVE_LIBIPT" != yes; then + if test "$with_intel_pt" = yes; then + as_fn_error $? "libipt is missing or unusable" "$LINENO" 5 + else + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: libipt is missing or unusable; some features may be unavailable." >&5 +$as_echo "$as_me: WARNING: libipt is missing or unusable; some features may be unavailable." >&2;} + fi + else + save_LIBS=$LIBS + LIBS="$LIBS $LIBIPT" + for ac_func in pt_insn_event +do : + ac_fn_c_check_func "$LINENO" "pt_insn_event" "ac_cv_func_pt_insn_event" +if test "x$ac_cv_func_pt_insn_event" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_PT_INSN_EVENT 1 +_ACEOF + +fi +done + + ac_fn_c_check_member "$LINENO" "struct pt_insn" "enabled" "ac_cv_member_struct_pt_insn_enabled" "#include <intel-pt.h> +" +if test "x$ac_cv_member_struct_pt_insn_enabled" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_PT_INSN_ENABLED 1 +_ACEOF + + +fi +ac_fn_c_check_member "$LINENO" "struct pt_insn" "resynced" "ac_cv_member_struct_pt_insn_resynced" "#include <intel-pt.h> +" +if test "x$ac_cv_member_struct_pt_insn_resynced" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_PT_INSN_RESYNCED 1 +_ACEOF + + +fi + + LIBS=$save_LIBS + fi + fi + + +$as_echo "#define _STRUCTURED_PROC 1" >>confdefs.h + + for ac_header in sys/procfs.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "sys/procfs.h" "ac_cv_header_sys_procfs_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_procfs_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SYS_PROCFS_H 1 +_ACEOF + +fi + +done + + if test "$ac_cv_header_sys_procfs_h" = yes; then + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gregset_t in sys/procfs.h" >&5 +$as_echo_n "checking for gregset_t in sys/procfs.h... " >&6; } + if ${bfd_cv_have_sys_procfs_type_gregset_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#define _SYSCALL32 +#include <sys/procfs.h> +int +main () +{ +gregset_t avar + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + bfd_cv_have_sys_procfs_type_gregset_t=yes +else + bfd_cv_have_sys_procfs_type_gregset_t=no + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + + if test $bfd_cv_have_sys_procfs_type_gregset_t = yes; then + +$as_echo "#define HAVE_GREGSET_T 1" >>confdefs.h + + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_gregset_t" >&5 +$as_echo "$bfd_cv_have_sys_procfs_type_gregset_t" >&6; } + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fpregset_t in sys/procfs.h" >&5 +$as_echo_n "checking for fpregset_t in sys/procfs.h... " >&6; } + if ${bfd_cv_have_sys_procfs_type_fpregset_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#define _SYSCALL32 +#include <sys/procfs.h> +int +main () +{ +fpregset_t avar + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + bfd_cv_have_sys_procfs_type_fpregset_t=yes +else + bfd_cv_have_sys_procfs_type_fpregset_t=no + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + + if test $bfd_cv_have_sys_procfs_type_fpregset_t = yes; then + +$as_echo "#define HAVE_FPREGSET_T 1" >>confdefs.h + + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_fpregset_t" >&5 +$as_echo "$bfd_cv_have_sys_procfs_type_fpregset_t" >&6; } + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for prgregset_t in sys/procfs.h" >&5 +$as_echo_n "checking for prgregset_t in sys/procfs.h... " >&6; } + if ${bfd_cv_have_sys_procfs_type_prgregset_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#define _SYSCALL32 +#include <sys/procfs.h> +int +main () +{ +prgregset_t avar + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + bfd_cv_have_sys_procfs_type_prgregset_t=yes +else + bfd_cv_have_sys_procfs_type_prgregset_t=no + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + + if test $bfd_cv_have_sys_procfs_type_prgregset_t = yes; then + +$as_echo "#define HAVE_PRGREGSET_T 1" >>confdefs.h + + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_prgregset_t" >&5 +$as_echo "$bfd_cv_have_sys_procfs_type_prgregset_t" >&6; } + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for prfpregset_t in sys/procfs.h" >&5 +$as_echo_n "checking for prfpregset_t in sys/procfs.h... " >&6; } + if ${bfd_cv_have_sys_procfs_type_prfpregset_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#define _SYSCALL32 +#include <sys/procfs.h> +int +main () +{ +prfpregset_t avar + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + bfd_cv_have_sys_procfs_type_prfpregset_t=yes +else + bfd_cv_have_sys_procfs_type_prfpregset_t=no + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + + if test $bfd_cv_have_sys_procfs_type_prfpregset_t = yes; then + +$as_echo "#define HAVE_PRFPREGSET_T 1" >>confdefs.h + + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_prfpregset_t" >&5 +$as_echo "$bfd_cv_have_sys_procfs_type_prfpregset_t" >&6; } + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for prgregset32_t in sys/procfs.h" >&5 +$as_echo_n "checking for prgregset32_t in sys/procfs.h... " >&6; } + if ${bfd_cv_have_sys_procfs_type_prgregset32_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#define _SYSCALL32 +#include <sys/procfs.h> +int +main () +{ +prgregset32_t avar + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + bfd_cv_have_sys_procfs_type_prgregset32_t=yes +else + bfd_cv_have_sys_procfs_type_prgregset32_t=no + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + + if test $bfd_cv_have_sys_procfs_type_prgregset32_t = yes; then + +$as_echo "#define HAVE_PRGREGSET32_T 1" >>confdefs.h + + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_prgregset32_t" >&5 +$as_echo "$bfd_cv_have_sys_procfs_type_prgregset32_t" >&6; } + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lwpid_t in sys/procfs.h" >&5 +$as_echo_n "checking for lwpid_t in sys/procfs.h... " >&6; } + if ${bfd_cv_have_sys_procfs_type_lwpid_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#define _SYSCALL32 +#include <sys/procfs.h> +int +main () +{ +lwpid_t avar + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + bfd_cv_have_sys_procfs_type_lwpid_t=yes +else + bfd_cv_have_sys_procfs_type_lwpid_t=no + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + + if test $bfd_cv_have_sys_procfs_type_lwpid_t = yes; then + +$as_echo "#define HAVE_LWPID_T 1" >>confdefs.h + + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_lwpid_t" >&5 +$as_echo "$bfd_cv_have_sys_procfs_type_lwpid_t" >&6; } + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for psaddr_t in sys/procfs.h" >&5 +$as_echo_n "checking for psaddr_t in sys/procfs.h... " >&6; } + if ${bfd_cv_have_sys_procfs_type_psaddr_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#define _SYSCALL32 +#include <sys/procfs.h> +int +main () +{ +psaddr_t avar + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + bfd_cv_have_sys_procfs_type_psaddr_t=yes +else + bfd_cv_have_sys_procfs_type_psaddr_t=no + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + + if test $bfd_cv_have_sys_procfs_type_psaddr_t = yes; then + +$as_echo "#define HAVE_PSADDR_T 1" >>confdefs.h + + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_psaddr_t" >&5 +$as_echo "$bfd_cv_have_sys_procfs_type_psaddr_t" >&6; } + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for elf_fpregset_t in sys/procfs.h" >&5 +$as_echo_n "checking for elf_fpregset_t in sys/procfs.h... " >&6; } + if ${bfd_cv_have_sys_procfs_type_elf_fpregset_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#define _SYSCALL32 +#include <sys/procfs.h> +int +main () +{ +elf_fpregset_t avar + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + bfd_cv_have_sys_procfs_type_elf_fpregset_t=yes +else + bfd_cv_have_sys_procfs_type_elf_fpregset_t=no + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + + if test $bfd_cv_have_sys_procfs_type_elf_fpregset_t = yes; then + +$as_echo "#define HAVE_ELF_FPREGSET_T 1" >>confdefs.h + + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_elf_fpregset_t" >&5 +$as_echo "$bfd_cv_have_sys_procfs_type_elf_fpregset_t" >&6; } + + fi + +# This is set by GDB_AC_COMMON. + + + +# Check whether we will enable the inclusion of unit tests when +# compiling GDB. +# +# The default value of this option changes depending whether we're on +# development mode (in which case it's "true") or not (in which case +# it's "false"). The $development variable is set by the GDB_AC_COMMON +# macro, which must therefore be used before GDB_AC_SELFTEST. + +if test "x$development" != xtrue && test "x$development" != xfalse; then : + as_fn_error $? "Invalid value for \$development, got \"$development\", expecting \"true\" or \"false\"." "$LINENO" 5 +fi + +# Check whether --enable-unit-tests was given. +if test "${enable_unit_tests+set}" = set; then : + enableval=$enable_unit_tests; case "${enableval}" in + yes) enable_unittests=true ;; + no) enable_unittests=false ;; + *) as_fn_error $? "bad value ${enableval} for --{enable,disable}-unit-tests option" "$LINENO" 5 ;; +esac +else + enable_unittests=$development +fi + + +if $enable_unittests; then + +$as_echo "#define GDB_SELF_TEST 1" >>confdefs.h + + +fi + + + case ${build_alias} in + "") build_noncanonical=${build} ;; + *) build_noncanonical=${build_alias} ;; +esac + + case ${host_alias} in + "") host_noncanonical=${build_noncanonical} ;; + *) host_noncanonical=${host_alias} ;; +esac + + case ${target_alias} in + "") target_noncanonical=${host_noncanonical} ;; + *) target_noncanonical=${target_alias} ;; +esac + + + + + + +# Dependency checking. +rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null + +DEPDIR="${am__leading_dot}deps" + +ac_config_commands="$ac_config_commands depdir" + + + +# If we haven't got the data from the intl directory, +# assume NLS is disabled. +USE_NLS=no +LIBINTL= +LIBINTL_DEP= +INCINTL= +XGETTEXT= +GMSGFMT= +POSUB= + +if test -f ../intl/config.intl; then + . ../intl/config.intl +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5 +$as_echo_n "checking whether NLS is requested... " >&6; } +if test x"$USE_NLS" != xyes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define ENABLE_NLS 1" >>confdefs.h + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for catalogs to be installed" >&5 +$as_echo_n "checking for catalogs to be installed... " >&6; } + # Look for .po and .gmo files in the source directory. + CATALOGS= + XLINGUAS= + for cat in $srcdir/po/*.gmo $srcdir/po/*.po; do + # If there aren't any .gmo files the shell will give us the + # literal string "../path/to/srcdir/po/*.gmo" which has to be + # weeded out. + case "$cat" in *\**) + continue;; + esac + # The quadruple backslash is collapsed to a double backslash + # by the backticks, then collapsed again by the double quotes, + # leaving us with one backslash in the sed expression (right + # before the dot that mustn't act as a wildcard). + cat=`echo $cat | sed -e "s!$srcdir/po/!!" -e "s!\\\\.po!.gmo!"` + lang=`echo $cat | sed -e "s!\\\\.gmo!!"` + # The user is allowed to set LINGUAS to a list of languages to + # install catalogs for. If it's empty that means "all of them." + if test "x$LINGUAS" = x; then + CATALOGS="$CATALOGS $cat" + XLINGUAS="$XLINGUAS $lang" + else + case "$LINGUAS" in *$lang*) + CATALOGS="$CATALOGS $cat" + XLINGUAS="$XLINGUAS $lang" + ;; + esac + fi + done + LINGUAS="$XLINGUAS" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LINGUAS" >&5 +$as_echo "$LINGUAS" >&6; } + + + DATADIRNAME=share + + INSTOBJEXT=.mo + + GENCAT=gencat + + CATOBJEXT=.gmo + +fi + +# Create sub-directories for objects and dependencies. +CONFIG_SRC_SUBDIR="arch gdbsupport nat target" + + +ac_config_commands="$ac_config_commands gdbdepdir" + + +depcc="$CC" am_compiler_list= + +am_depcomp=$ac_aux_dir/depcomp +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if ${am_cv_CC_dependencies_compiler_type+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + for depmode in $am_compiler_list; do + if test $depmode = none; then break; fi + + $as_echo "$as_me:$LINENO: trying $depmode" >&5 + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "include sub/conftest.Po" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. + depcmd="depmode=$depmode \ + source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c" + echo "| $depcmd" | sed -e 's/ */ /g' >&5 + if env $depcmd > conftest.err 2>&1 && + grep sub/conftst6.h sub/conftest.Po >>conftest.err 2>&1 && + grep sub/conftest.${OBJEXT-o} sub/conftest.Po >>conftest.err 2>&1 && + ${MAKE-make} -s -f confmf >>conftest.err 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + $as_echo "$as_me:$LINENO: success" >&5 + break + fi + fi + $as_echo "$as_me:$LINENO: failure, diagnostics are:" >&5 + sed -e 's/^/| /' < conftest.err >&5 + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } +if test x${am_cv_CC_dependencies_compiler_type-none} = xnone +then as_fn_error $? "no usable dependency style found" "$LINENO" 5 +else CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + +fi + + +for ac_header in termios.h sys/reg.h string.h sys/procfs.h linux/elf.h fcntl.h signal.h sys/file.h sys/ioctl.h netinet/in.h sys/socket.h netdb.h netinet/tcp.h arpa/inet.h ws2tcpip.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + +for ac_header in vfork.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "vfork.h" "ac_cv_header_vfork_h" "$ac_includes_default" +if test "x$ac_cv_header_vfork_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_VFORK_H 1 +_ACEOF + +fi + +done + +for ac_func in fork vfork +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + +if test "x$ac_cv_func_fork" = xyes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working fork" >&5 +$as_echo_n "checking for working fork... " >&6; } +if ${ac_cv_func_fork_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + ac_cv_func_fork_works=cross +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ + + /* By Ruediger Kuhlmann. */ + return fork () < 0; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_fork_works=yes +else + ac_cv_func_fork_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_fork_works" >&5 +$as_echo "$ac_cv_func_fork_works" >&6; } + +else + ac_cv_func_fork_works=$ac_cv_func_fork +fi +if test "x$ac_cv_func_fork_works" = xcross; then + case $host in + *-*-amigaos* | *-*-msdosdjgpp*) + # Override, as these systems have only a dummy fork() stub + ac_cv_func_fork_works=no + ;; + *) + ac_cv_func_fork_works=yes + ;; + esac + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&5 +$as_echo "$as_me: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&2;} +fi +ac_cv_func_vfork_works=$ac_cv_func_vfork +if test "x$ac_cv_func_vfork" = xyes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working vfork" >&5 +$as_echo_n "checking for working vfork... " >&6; } +if ${ac_cv_func_vfork_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + ac_cv_func_vfork_works=cross +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Thanks to Paul Eggert for this test. */ +$ac_includes_default +#include <sys/wait.h> +#ifdef HAVE_VFORK_H +# include <vfork.h> +#endif +/* On some sparc systems, changes by the child to local and incoming + argument registers are propagated back to the parent. The compiler + is told about this with #include <vfork.h>, but some compilers + (e.g. gcc -O) don't grok <vfork.h>. Test for this by using a + static variable whose address is put into a register that is + clobbered by the vfork. */ +static void +#ifdef __cplusplus +sparc_address_test (int arg) +# else +sparc_address_test (arg) int arg; +#endif +{ + static pid_t child; + if (!child) { + child = vfork (); + if (child < 0) { + perror ("vfork"); + _exit(2); + } + if (!child) { + arg = getpid(); + write(-1, "", 0); + _exit (arg); + } + } +} + +int +main () +{ + pid_t parent = getpid (); + pid_t child; + + sparc_address_test (0); + + child = vfork (); + + if (child == 0) { + /* Here is another test for sparc vfork register problems. This + test uses lots of local variables, at least as many local + variables as main has allocated so far including compiler + temporaries. 4 locals are enough for gcc 1.40.3 on a Solaris + 4.1.3 sparc, but we use 8 to be safe. A buggy compiler should + reuse the register of parent for one of the local variables, + since it will think that parent can't possibly be used any more + in this routine. Assigning to the local variable will thus + munge parent in the parent process. */ + pid_t + p = getpid(), p1 = getpid(), p2 = getpid(), p3 = getpid(), + p4 = getpid(), p5 = getpid(), p6 = getpid(), p7 = getpid(); + /* Convince the compiler that p..p7 are live; otherwise, it might + use the same hardware register for all 8 local variables. */ + if (p != p1 || p != p2 || p != p3 || p != p4 + || p != p5 || p != p6 || p != p7) + _exit(1); + + /* On some systems (e.g. IRIX 3.3), vfork doesn't separate parent + from child file descriptors. If the child closes a descriptor + before it execs or exits, this munges the parent's descriptor + as well. Test for this by closing stdout in the child. */ + _exit(close(fileno(stdout)) != 0); + } else { + int status; + struct stat st; + + while (wait(&status) != child) + ; + return ( + /* Was there some problem with vforking? */ + child < 0 + + /* Did the child fail? (This shouldn't happen.) */ + || status + + /* Did the vfork/compiler bug occur? */ + || parent != getpid() + + /* Did the file descriptor bug occur? */ + || fstat(fileno(stdout), &st) != 0 + ); + } +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_vfork_works=yes +else + ac_cv_func_vfork_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_vfork_works" >&5 +$as_echo "$ac_cv_func_vfork_works" >&6; } + +fi; +if test "x$ac_cv_func_fork_works" = xcross; then + ac_cv_func_vfork_works=$ac_cv_func_vfork + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&5 +$as_echo "$as_me: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&2;} +fi + +if test "x$ac_cv_func_vfork_works" = xyes; then + +$as_echo "#define HAVE_WORKING_VFORK 1" >>confdefs.h + +else + +$as_echo "#define vfork fork" >>confdefs.h + +fi +if test "x$ac_cv_func_fork_works" = xyes; then + +$as_echo "#define HAVE_WORKING_FORK 1" >>confdefs.h + +fi + +for ac_func in pread pwrite pread64 +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + +# Check the return and argument types of ptrace. + + +for ac_header in sys/ptrace.h ptrace.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +gdb_ptrace_headers=' +#include <sys/types.h> +#if HAVE_SYS_PTRACE_H +# include <sys/ptrace.h> +#endif +#if HAVE_UNISTD_H +# include <unistd.h> +#endif +' + +# Check return type. Varargs (used on GNU/Linux) conflict with the +# empty argument list, so check for that explicitly. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking return type of ptrace" >&5 +$as_echo_n "checking return type of ptrace... " >&6; } +if ${gdb_cv_func_ptrace_ret+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$gdb_ptrace_headers +int +main () +{ +extern long ptrace (enum __ptrace_request, ...); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gdb_cv_func_ptrace_ret='long' +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$gdb_ptrace_headers +int +main () +{ +extern int ptrace (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gdb_cv_func_ptrace_ret='int' +else + gdb_cv_func_ptrace_ret='long' +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_func_ptrace_ret" >&5 +$as_echo "$gdb_cv_func_ptrace_ret" >&6; } + +cat >>confdefs.h <<_ACEOF +#define PTRACE_TYPE_RET $gdb_cv_func_ptrace_ret +_ACEOF + +# Check argument types. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking types of arguments for ptrace" >&5 +$as_echo_n "checking types of arguments for ptrace... " >&6; } +if ${gdb_cv_func_ptrace_args+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$gdb_ptrace_headers +int +main () +{ +extern long ptrace (enum __ptrace_request, ...); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gdb_cv_func_ptrace_args='enum __ptrace_request,int,long,long' +else + +for gdb_arg1 in 'int' 'long'; do + for gdb_arg2 in 'pid_t' 'int' 'long'; do + for gdb_arg3 in 'int *' 'caddr_t' 'int' 'long' 'void *'; do + for gdb_arg4 in 'int' 'long' 'void *'; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$gdb_ptrace_headers +int +main () +{ + +extern $gdb_cv_func_ptrace_ret + ptrace ($gdb_arg1, $gdb_arg2, $gdb_arg3, $gdb_arg4); + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gdb_cv_func_ptrace_args="$gdb_arg1,$gdb_arg2,$gdb_arg3,$gdb_arg4"; + break 4; +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + for gdb_arg5 in 'int *' 'int' 'long'; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$gdb_ptrace_headers +int +main () +{ + +extern $gdb_cv_func_ptrace_ret + ptrace ($gdb_arg1, $gdb_arg2, $gdb_arg3, $gdb_arg4, $gdb_arg5); + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +gdb_cv_func_ptrace_args="$gdb_arg1,$gdb_arg2,$gdb_arg3,$gdb_arg4,$gdb_arg5"; + break 5; +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done + done + done + done +done +# Provide a safe default value. +: ${gdb_cv_func_ptrace_args='int,int,long,long'} + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_func_ptrace_args" >&5 +$as_echo "$gdb_cv_func_ptrace_args" >&6; } +ac_save_IFS=$IFS; IFS=',' +set dummy `echo "$gdb_cv_func_ptrace_args" | sed 's/\*/\*/g'` +IFS=$ac_save_IFS +shift + +cat >>confdefs.h <<_ACEOF +#define PTRACE_TYPE_ARG1 $1 +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PTRACE_TYPE_ARG3 $3 +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PTRACE_TYPE_ARG4 $4 +_ACEOF + +if test -n "$5"; then + +cat >>confdefs.h <<_ACEOF +#define PTRACE_TYPE_ARG5 $5 +_ACEOF + +fi + + +# Check for UST +ustlibs="" +ustinc="" + + +# Check whether --with-ust was given. +if test "${with_ust+set}" = set; then : + withval=$with_ust; +fi + + +# Check whether --with-ust_include was given. +if test "${with_ust_include+set}" = set; then : + withval=$with_ust_include; +fi + + +# Check whether --with-ust_lib was given. +if test "${with_ust_lib+set}" = set; then : + withval=$with_ust_lib; +fi + + +case $with_ust in + no) + ustlibs= + ustinc= + ;; + "" | yes) + ustlibs=" -lust " + ustinc="" + ;; + *) + ustlibs="-L$with_ust/lib -lust" + ustinc="-I$with_ust/include " + ;; +esac +if test "x$with_ust_include" != x; then + ustinc="-I$with_ust_include " +fi +if test "x$with_ust_lib" != x; then + ustlibs="-L$with_ust_lib -lust" +fi + +if test "x$with_ust" != "xno"; then + saved_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $ustinc" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ust" >&5 +$as_echo_n "checking for ust... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#define CONFIG_UST_GDB_INTEGRATION +#include <ust/ust.h> + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; }; +$as_echo "#define HAVE_UST 1" >>confdefs.h + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; }; ustlibs= ; ustinc= +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CFLAGS="$saved_CFLAGS" +fi + +# Flags needed for UST + + + + +# Check whether --enable-werror was given. +if test "${enable_werror+set}" = set; then : + enableval=$enable_werror; case "${enableval}" in + yes | y) ERROR_ON_WARNING="yes" ;; + no | n) ERROR_ON_WARNING="no" ;; + *) as_fn_error $? "bad value ${enableval} for --enable-werror" "$LINENO" 5 ;; + esac +fi + + +# Enable -Werror by default when using gcc. Turn it off for releases. +if test "${GCC}" = yes -a -z "${ERROR_ON_WARNING}" && $development; then + ERROR_ON_WARNING=yes +fi + +WERROR_CFLAGS="" +if test "${ERROR_ON_WARNING}" = yes ; then + WERROR_CFLAGS="-Werror" +fi + +# The options we'll try to enable. +build_warnings="-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 \ +-Wno-error=deprecated-register \ +-Wsuggest-override \ +-Wimplicit-fallthrough=3 \ +-Wduplicated-cond \ +-Wshadow=local \ +-Wdeprecated-copy \ +-Wdeprecated-copy-dtor \ +-Wredundant-move \ +-Wmissing-declarations \ +-Wmissing-prototypes \ +-Wstrict-null-sentinel \ +" + +case "${host}" in + *-*-mingw32*) + # Enable -Wno-format by default when using gcc on mingw since many + # GCC versions complain about %I64. + build_warnings="$build_warnings -Wno-format" ;; + *-*-solaris*) + # Solaris 11.4 <python2.7/ceval.h> uses #pragma no_inline that GCC + # doesn't understand. + build_warnings="$build_warnings -Wno-unknown-pragmas" + # Solaris 11 <unistd.h> marks vfork deprecated. + build_warnings="$build_warnings -Wno-deprecated-declarations" ;; + *) + # Note that gcc requires -Wformat for -Wformat-nonliteral to work, + # but there's a special case for this below. + build_warnings="$build_warnings -Wformat-nonliteral" ;; +esac + +# Check whether --enable-build-warnings was given. +if test "${enable_build_warnings+set}" = set; then : + enableval=$enable_build_warnings; case "${enableval}" in + yes) ;; + no) build_warnings="-w";; + ,*) t=`echo "${enableval}" | sed -e "s/,/ /g"` + build_warnings="${build_warnings} ${t}";; + *,) t=`echo "${enableval}" | sed -e "s/,/ /g"` + build_warnings="${t} ${build_warnings}";; + *) build_warnings=`echo "${enableval}" | sed -e "s/,/ /g"`;; +esac +if test x"$silent" != x"yes" && test x"$build_warnings" != x""; then + echo "Setting compiler warning flags = $build_warnings" 6>&1 +fi +fi +# Check whether --enable-gdb-build-warnings was given. +if test "${enable_gdb_build_warnings+set}" = set; then : + enableval=$enable_gdb_build_warnings; case "${enableval}" in + yes) ;; + no) build_warnings="-w";; + ,*) t=`echo "${enableval}" | sed -e "s/,/ /g"` + build_warnings="${build_warnings} ${t}";; + *,) t=`echo "${enableval}" | sed -e "s/,/ /g"` + build_warnings="${t} ${build_warnings}";; + *) build_warnings=`echo "${enableval}" | sed -e "s/,/ /g"`;; +esac +if test x"$silent" != x"yes" && test x"$build_warnings" != x""; then + echo "Setting GDB specific compiler warning flags = $build_warnings" 6>&1 +fi +fi + +# The set of warnings supported by a C++ compiler is not the same as +# of the C compiler. +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + +WARN_CFLAGS="" +if test "x${build_warnings}" != x -a "x$GCC" = xyes +then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking compiler warning flags" >&5 +$as_echo_n "checking compiler warning flags... " >&6; } + # Separate out the -Werror flag as some files just cannot be + # compiled with it enabled. + for w in ${build_warnings}; do + # GCC does not complain about -Wno-unknown-warning. Invert + # and test -Wunknown-warning instead. + case $w in + -Wno-*) + wtest=`echo $w | sed 's/-Wno-/-W/g'` ;; + -Wformat-nonliteral) + # gcc requires -Wformat before -Wformat-nonliteral + # will work, so stick them together. + w="-Wformat $w" + wtest="$w" + ;; + *) + wtest=$w ;; + esac + + case $w in + -Werr*) WERROR_CFLAGS=-Werror ;; + *) + # Check whether GCC accepts it. + saved_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -Werror $wtest" + saved_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS -Werror $wtest" + if test "x$w" = "x-Wunused-variable"; then + # Check for https://gcc.gnu.org/bugzilla/show_bug.cgi?id=38958, + # fixed in GCC 4.9. This test is derived from the gdb + # source code that triggered this bug in GCC. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +struct scoped_restore_base {}; + struct scoped_restore_tmpl : public scoped_restore_base { + ~scoped_restore_tmpl() {} + }; +int +main () +{ +const scoped_restore_base &b = scoped_restore_tmpl(); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + WARN_CFLAGS="${WARN_CFLAGS} $w" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + WARN_CFLAGS="${WARN_CFLAGS} $w" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + CFLAGS="$saved_CFLAGS" + CXXFLAGS="$saved_CXXFLAGS" + esac + done + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${WARN_CFLAGS} ${WERROR_CFLAGS}" >&5 +$as_echo "${WARN_CFLAGS} ${WERROR_CFLAGS}" >&6; } +fi + + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + +old_LIBS="$LIBS" +LIBS="$LIBS -ldl" +for ac_func in dladdr +do : + ac_fn_c_check_func "$LINENO" "dladdr" "ac_cv_func_dladdr" +if test "x$ac_cv_func_dladdr" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_DLADDR 1 +_ACEOF + +fi +done + +LIBS="$old_LIBS" + + + # Check for presence and size of long long. + ac_fn_c_check_type "$LINENO" "long long" "ac_cv_type_long_long" "$ac_includes_default" +if test "x$ac_cv_type_long_long" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_LONG_LONG 1 +_ACEOF + +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long long" >&5 +$as_echo_n "checking size of long long... " >&6; } +if ${ac_cv_sizeof_long_long+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long long))" "ac_cv_sizeof_long_long" "$ac_includes_default"; then : + +else + if test "$ac_cv_type_long_long" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot compute sizeof (long long) +See \`config.log' for more details" "$LINENO" 5; } + else + ac_cv_sizeof_long_long=0 + fi +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_long" >&5 +$as_echo "$ac_cv_sizeof_long_long" >&6; } + + + +cat >>confdefs.h <<_ACEOF +#define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long +_ACEOF + + +fi + + + as_ac_Symbol=`$as_echo "ac_cv_have_decl_basename(char *)" | $as_tr_sh` +ac_fn_c_check_decl "$LINENO" "basename(char *)" "$as_ac_Symbol" "$ac_includes_default" +if eval test \"x\$"$as_ac_Symbol"\" = x"yes"; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_BASENAME $ac_have_decl +_ACEOF +ac_fn_c_check_decl "$LINENO" "ffs" "ac_cv_have_decl_ffs" "$ac_includes_default" +if test "x$ac_cv_have_decl_ffs" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_FFS $ac_have_decl +_ACEOF +ac_fn_c_check_decl "$LINENO" "asprintf" "ac_cv_have_decl_asprintf" "$ac_includes_default" +if test "x$ac_cv_have_decl_asprintf" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_ASPRINTF $ac_have_decl +_ACEOF +ac_fn_c_check_decl "$LINENO" "vasprintf" "ac_cv_have_decl_vasprintf" "$ac_includes_default" +if test "x$ac_cv_have_decl_vasprintf" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_VASPRINTF $ac_have_decl +_ACEOF +ac_fn_c_check_decl "$LINENO" "snprintf" "ac_cv_have_decl_snprintf" "$ac_includes_default" +if test "x$ac_cv_have_decl_snprintf" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_SNPRINTF $ac_have_decl +_ACEOF +ac_fn_c_check_decl "$LINENO" "vsnprintf" "ac_cv_have_decl_vsnprintf" "$ac_includes_default" +if test "x$ac_cv_have_decl_vsnprintf" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_VSNPRINTF $ac_have_decl +_ACEOF + + ac_fn_c_check_decl "$LINENO" "strtol" "ac_cv_have_decl_strtol" "$ac_includes_default" +if test "x$ac_cv_have_decl_strtol" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_STRTOL $ac_have_decl +_ACEOF +ac_fn_c_check_decl "$LINENO" "strtoul" "ac_cv_have_decl_strtoul" "$ac_includes_default" +if test "x$ac_cv_have_decl_strtoul" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_STRTOUL $ac_have_decl +_ACEOF +ac_fn_c_check_decl "$LINENO" "strtoll" "ac_cv_have_decl_strtoll" "$ac_includes_default" +if test "x$ac_cv_have_decl_strtoll" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_STRTOLL $ac_have_decl +_ACEOF +ac_fn_c_check_decl "$LINENO" "strtoull" "ac_cv_have_decl_strtoull" "$ac_includes_default" +if test "x$ac_cv_have_decl_strtoull" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_STRTOULL $ac_have_decl +_ACEOF + + ac_fn_c_check_decl "$LINENO" "strverscmp" "ac_cv_have_decl_strverscmp" "$ac_includes_default" +if test "x$ac_cv_have_decl_strverscmp" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_STRVERSCMP $ac_have_decl +_ACEOF + + + +ac_fn_c_check_decl "$LINENO" "perror" "ac_cv_have_decl_perror" "$ac_includes_default" +if test "x$ac_cv_have_decl_perror" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_PERROR $ac_have_decl +_ACEOF +ac_fn_c_check_decl "$LINENO" "vasprintf" "ac_cv_have_decl_vasprintf" "$ac_includes_default" +if test "x$ac_cv_have_decl_vasprintf" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_VASPRINTF $ac_have_decl +_ACEOF +ac_fn_c_check_decl "$LINENO" "vsnprintf" "ac_cv_have_decl_vsnprintf" "$ac_includes_default" +if test "x$ac_cv_have_decl_vsnprintf" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_VSNPRINTF $ac_have_decl +_ACEOF + + +ac_fn_c_check_type "$LINENO" "socklen_t" "ac_cv_type_socklen_t" "#include <sys/types.h> +#if HAVE_SYS_SOCKET_H +# include <sys/socket.h> +#elif HAVE_WS2TCPIP_H +# include <ws2tcpip.h> +#endif + +" +if test "x$ac_cv_type_socklen_t" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_SOCKLEN_T 1 +_ACEOF + + +fi + + +case "${target}" in + *-android*) + # Starting with NDK version 9, <elf.h> actually includes definitions + # of Elf32_auxv_t and Elf64_auxv_t. But sadly, <elf.h> includes + # <sys/exec_elf.h> which defines some of the ELF types incorrectly, + # leading to conflicts with the defintions from <linux/elf.h>. + # This makes it impossible for us to include both <elf.h> and + # <linux/elf.h>, which means that, in practice, we do not have + # access to Elf32_auxv_t and Elf64_auxv_t on this platform. + # Therefore, do not try to auto-detect availability, as it would + # get it wrong on this platform. + ;; + *) + ac_fn_c_check_type "$LINENO" "Elf32_auxv_t" "ac_cv_type_Elf32_auxv_t" "#include <elf.h> + +" +if test "x$ac_cv_type_Elf32_auxv_t" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_ELF32_AUXV_T 1 +_ACEOF + + +fi +ac_fn_c_check_type "$LINENO" "Elf64_auxv_t" "ac_cv_type_Elf64_auxv_t" "#include <elf.h> + +" +if test "x$ac_cv_type_Elf64_auxv_t" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_ELF64_AUXV_T 1 +_ACEOF + + +fi + +esac + + + +# Check whether --with-pkgversion was given. +if test "${with_pkgversion+set}" = set; then : + withval=$with_pkgversion; case "$withval" in + yes) as_fn_error $? "package version not specified" "$LINENO" 5 ;; + no) PKGVERSION= ;; + *) PKGVERSION="($withval) " ;; + esac +else + PKGVERSION="(GDB) " + +fi + + + + + +# Check whether --with-bugurl was given. +if test "${with_bugurl+set}" = set; then : + withval=$with_bugurl; case "$withval" in + yes) as_fn_error $? "bug URL not specified" "$LINENO" 5 ;; + no) BUGURL= + ;; + *) BUGURL="$withval" + ;; + esac +else + BUGURL="http://www.gnu.org/software/gdb/bugs/" + +fi + + case ${BUGURL} in + "") + REPORT_BUGS_TO= + REPORT_BUGS_TEXI= + ;; + *) + REPORT_BUGS_TO="<$BUGURL>" + REPORT_BUGS_TEXI=@uref{`echo "$BUGURL" | sed 's/@/@@/g'`} + ;; + esac; + + + + +cat >>confdefs.h <<_ACEOF +#define PKGVERSION "$PKGVERSION" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define REPORT_BUGS_TO "$REPORT_BUGS_TO" +_ACEOF + + +# Check for various supplementary target information (beyond the +# triplet) which might affect the choices in configure.srv. +case "${target}" in + i[34567]86-*-linux*) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if building for x86-64" >&5 +$as_echo_n "checking if building for x86-64... " >&6; } +if ${gdb_cv_i386_is_x86_64+:} false; then : + $as_echo_n "(cached) " >&6 +else + save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $CFLAGS" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#if __x86_64__ +got it +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "got it" >/dev/null 2>&1; then : + gdb_cv_i386_is_x86_64=yes +else + gdb_cv_i386_is_x86_64=no +fi +rm -f conftest* + + CPPFLAGS="$save_CPPFLAGS" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_i386_is_x86_64" >&5 +$as_echo "$gdb_cv_i386_is_x86_64" >&6; } + ;; + + x86_64-*-linux*) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if building for x32" >&5 +$as_echo_n "checking if building for x32... " >&6; } +if ${gdb_cv_x86_is_x32+:} false; then : + $as_echo_n "(cached) " >&6 +else + save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $CFLAGS" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#if __x86_64__ && __ILP32__ +got it +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "got it" >/dev/null 2>&1; then : + gdb_cv_x86_is_x32=yes +else + gdb_cv_x86_is_x32=no +fi +rm -f conftest* + + CPPFLAGS="$save_CPPFLAGS" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_x86_is_x32" >&5 +$as_echo "$gdb_cv_x86_is_x32" >&6; } + ;; + + m68k-*-*) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if building for Coldfire" >&5 +$as_echo_n "checking if building for Coldfire... " >&6; } +if ${gdb_cv_m68k_is_coldfire+:} false; then : + $as_echo_n "(cached) " >&6 +else + save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $CFLAGS" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef __mcoldfire__ +got it +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "got it" >/dev/null 2>&1; then : + gdb_cv_m68k_is_coldfire=yes +else + gdb_cv_m68k_is_coldfire=no +fi +rm -f conftest* + + CPPFLAGS="$save_CPPFLAGS" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_m68k_is_coldfire" >&5 +$as_echo "$gdb_cv_m68k_is_coldfire" >&6; } + ;; +esac + +. ${srcdir}/configure.srv + +if test "${srv_mingwce}" = "yes"; then + LIBS="$LIBS -lws2" +elif test "${srv_mingw}" = "yes"; then + # WIN32APILIBS is set by GDB_AC_COMMON. + LIBS="$LIBS $WIN32APILIBS" +fi + +if test "${srv_linux_usrregs}" = "yes"; then + +$as_echo "#define HAVE_LINUX_USRREGS 1" >>confdefs.h + +fi + +if test "${srv_linux_regsets}" = "yes"; then + +$as_echo "#define HAVE_LINUX_REGSETS 1" >>confdefs.h + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PTRACE_GETREGS" >&5 +$as_echo_n "checking for PTRACE_GETREGS... " >&6; } + if ${gdbsrv_cv_have_ptrace_getregs+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/ptrace.h> +int +main () +{ +PTRACE_GETREGS; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gdbsrv_cv_have_ptrace_getregs=yes +else + gdbsrv_cv_have_ptrace_getregs=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdbsrv_cv_have_ptrace_getregs" >&5 +$as_echo "$gdbsrv_cv_have_ptrace_getregs" >&6; } + if test "${gdbsrv_cv_have_ptrace_getregs}" = "yes"; then + +$as_echo "#define HAVE_PTRACE_GETREGS 1" >>confdefs.h + + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PTRACE_GETFPXREGS" >&5 +$as_echo_n "checking for PTRACE_GETFPXREGS... " >&6; } + if ${gdbsrv_cv_have_ptrace_getfpxregs+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/ptrace.h> +int +main () +{ +PTRACE_GETFPXREGS; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gdbsrv_cv_have_ptrace_getfpxregs=yes +else + gdbsrv_cv_have_ptrace_getfpxregs=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdbsrv_cv_have_ptrace_getfpxregs" >&5 +$as_echo "$gdbsrv_cv_have_ptrace_getfpxregs" >&6; } + if test "${gdbsrv_cv_have_ptrace_getfpxregs}" = "yes"; then + +$as_echo "#define HAVE_PTRACE_GETFPXREGS 1" >>confdefs.h + + fi +fi + +if test "${srv_linux_btrace}" = "yes"; then + +$as_echo "#define HAVE_LINUX_BTRACE 1" >>confdefs.h + +fi + +if test "$bfd_cv_have_sys_procfs_type_lwpid_t" != yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lwpid_t in thread_db.h" >&5 +$as_echo_n "checking for lwpid_t in thread_db.h... " >&6; } + if ${gdbserver_cv_have_thread_db_type_lwpid_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <thread_db.h> +int +main () +{ +lwpid_t avar + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gdbserver_cv_have_thread_db_type_lwpid_t=yes +else + gdbserver_cv_have_thread_db_type_lwpid_t=no + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + + if test $gdbserver_cv_have_thread_db_type_lwpid_t = yes; then + +$as_echo "#define HAVE_LWPID_T 1" >>confdefs.h + + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdbserver_cv_have_thread_db_type_lwpid_t" >&5 +$as_echo "$gdbserver_cv_have_thread_db_type_lwpid_t" >&6; } + +fi + +if test "$bfd_cv_have_sys_procfs_type_psaddr_t" != yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for psaddr_t in thread_db.h" >&5 +$as_echo_n "checking for psaddr_t in thread_db.h... " >&6; } + if ${gdbserver_cv_have_thread_db_type_psaddr_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <thread_db.h> +int +main () +{ +psaddr_t avar + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gdbserver_cv_have_thread_db_type_psaddr_t=yes +else + gdbserver_cv_have_thread_db_type_psaddr_t=no + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + + if test $gdbserver_cv_have_thread_db_type_psaddr_t = yes; then + +$as_echo "#define HAVE_PSADDR_T 1" >>confdefs.h + + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdbserver_cv_have_thread_db_type_psaddr_t" >&5 +$as_echo "$gdbserver_cv_have_thread_db_type_psaddr_t" >&6; } + +fi + +old_LIBS="$LIBS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if ${ac_cv_lib_dl_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBDL 1 +_ACEOF + + LIBS="-ldl $LIBS" + +fi + +LIBS="$old_LIBS" + +srv_thread_depfiles= +srv_libs= + +if test "$srv_linux_thread_db" = "yes"; then + if test "$ac_cv_lib_dl_dlopen" = "yes"; then + srv_libs="-ldl" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the dynamic export flag" >&5 +$as_echo_n "checking for the dynamic export flag... " >&6; } + old_LDFLAGS="$LDFLAGS" + # Older GNU ld supports --export-dynamic but --dynamic-list may not be + # supported there. + RDYNAMIC="-Wl,--dynamic-list=${srcdir}/proc-service.list" + LDFLAGS="$LDFLAGS $RDYNAMIC" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + found="-Wl,--dynamic-list" + RDYNAMIC='-Wl,--dynamic-list=$(srcdir)/proc-service.list' +else + RDYNAMIC="-rdynamic" + LDFLAGS="$old_LDFLAGS $RDYNAMIC" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + found="-rdynamic" +else + found="no" + RDYNAMIC="" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + + LDFLAGS="$old_LDFLAGS" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $found" >&5 +$as_echo "$found" >&6; } + else + srv_libs="-lthread_db" + fi + + srv_thread_depfiles="thread-db.o proc-service.o" + +$as_echo "#define USE_THREAD_DB 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for TD_VERSION" >&5 +$as_echo_n "checking for TD_VERSION... " >&6; } +if ${gdbsrv_cv_have_td_version+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <thread_db.h> +int +main () +{ +TD_VERSION; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gdbsrv_cv_have_td_version=yes +else + gdbsrv_cv_have_td_version=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdbsrv_cv_have_td_version" >&5 +$as_echo "$gdbsrv_cv_have_td_version" >&6; } + if test "$gdbsrv_cv_have_td_version" = yes; then + +$as_echo "#define HAVE_TD_VERSION 1" >>confdefs.h + + fi +fi + + +# Check whether --with-libthread-db was given. +if test "${with_libthread_db+set}" = set; then : + withval=$with_libthread_db; srv_libthread_db_path="${withval}" + srv_libs="$srv_libthread_db_path" + +fi + + +if test "$srv_libs" != "" -a "$srv_libs" != "-ldl"; then + +$as_echo "#define USE_LIBTHREAD_DB_DIRECTLY 1" >>confdefs.h + +fi + +if test "$srv_xmlfiles" != ""; then + srv_xmlbuiltin="xml-builtin.o" + +$as_echo "#define USE_XML 1" >>confdefs.h + + + tmp_xmlfiles=$srv_xmlfiles + srv_xmlfiles="" + for f in $tmp_xmlfiles; do + srv_xmlfiles="$srv_xmlfiles \$(XML_DIR)/$f" + done +fi + +GDBSERVER_DEPFILES="$srv_regobj $srv_tgtobj $srv_hostio_err_objs $srv_thread_depfiles" +GDBSERVER_LIBS="$srv_libs" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the target supports __sync_*_compare_and_swap" >&5 +$as_echo_n "checking whether the target supports __sync_*_compare_and_swap... " >&6; } +if ${gdbsrv_cv_have_sync_builtins+:} false; then : + $as_echo_n "(cached) " >&6 +else + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +int foo, bar; bar = __sync_val_compare_and_swap(&foo, 0, 1); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + gdbsrv_cv_have_sync_builtins=yes +else + gdbsrv_cv_have_sync_builtins=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdbsrv_cv_have_sync_builtins" >&5 +$as_echo "$gdbsrv_cv_have_sync_builtins" >&6; } +if test "$gdbsrv_cv_have_sync_builtins" = yes; then + +$as_echo "#define HAVE_SYNC_BUILTINS 1" >>confdefs.h + +fi + +saved_cflags="$CFLAGS" +CFLAGS="$CFLAGS -fvisibility=hidden" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gdbsrv_cv_have_visibility_hidden=yes +else + gdbsrv_cv_have_visibility_hidden=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +CFLAGS="$saved_cflags" + +IPA_DEPFILES="" +extra_libraries="" + +# check whether to enable the inprocess agent +if test "$ipa_obj" != "" \ + -a "$gdbsrv_cv_have_sync_builtins" = yes \ + -a "$gdbsrv_cv_have_visibility_hidden" = yes; then + have_ipa=true +else + have_ipa=false +fi + +# Check whether --enable-inprocess-agent was given. +if test "${enable_inprocess_agent+set}" = set; then : + enableval=$enable_inprocess_agent; case "$enableval" in + yes) want_ipa=true ;; + no) want_ipa=false ;; + *) as_fn_error $? "bad value $enableval for inprocess-agent" "$LINENO" 5 ;; +esac +else + want_ipa=$have_ipa +fi + + +if $want_ipa ; then + if $have_ipa ; then + IPA_DEPFILES="$ipa_obj" + extra_libraries="$extra_libraries libinproctrace.so" + else + as_fn_error $? "inprocess agent not supported for this target" "$LINENO" 5 + fi +fi + + + + + + + + +GNULIB=../gnulib/import + +GNULIB_STDINT_H= +if test x"$STDINT_H" != x; then + GNULIB_STDINT_H=$GNULIB/$STDINT_H +fi + + +ac_config_files="$ac_config_files Makefile" + + +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, we kill variables containing newlines. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes: double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \. + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + if test "x$cache_file" != "x/dev/null"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} + if test ! -f "$cache_file" || test -h "$cache_file"; then + cat confcache >"$cache_file" + else + case $cache_file in #( + */* | ?:*) + mv -f confcache "$cache_file"$$ && + mv -f "$cache_file"$$ "$cache_file" ;; #( + *) + mv -f confcache "$cache_file" ;; + esac + fi + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +DEFS=-DHAVE_CONFIG_H + +ac_libobjs= +ac_ltlibobjs= +U= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + +if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then + as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi + +: "${CONFIG_STATUS=./config.status}" +ac_write_fail=0 +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false + +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' + fi +else + as_ln_s='cp -pR' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +as_test_x='test -x' +as_executable_p=as_fn_executable_p + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by $as_me, which was +generated by GNU Autoconf 2.69. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + +case $ac_config_headers in *" +"*) set x $ac_config_headers; shift; ac_config_headers=$*;; +esac + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# Files that config.status was made for. +config_files="$ac_config_files" +config_headers="$ac_config_headers" +config_commands="$ac_config_commands" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +ac_cs_usage="\ +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. + +Usage: $0 [OPTION]... [TAG]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + --config print configuration, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Configuration commands: +$config_commands + +Report bugs to the package provider." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" +ac_cs_version="\\ +config.status +configured by $0, generated by GNU Autoconf 2.69, + with options \\"\$ac_cs_config\\" + +Copyright (C) 2012 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +INSTALL='$INSTALL' +test -n "\$AWK" || AWK=awk +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=?*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + --*=) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg= + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + '') as_fn_error $? "missing file argument" ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_HEADERS " '$ac_optarg'" + ac_need_defaults=false;; + --he | --h) + # Conflict between --help and --header + as_fn_error $? "ambiguous option: \`$1' +Try \`$0 --help' for more information.";; + --help | --hel | -h ) + $as_echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) as_fn_error $? "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; + + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +if \$ac_cs_recheck; then + set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + $as_echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# +# INIT-COMMANDS +# +ac_aux_dir=$ac_aux_dir DEPDIR=$DEPDIR +ac_aux_dir=$ac_aux_dir DEPDIR=$DEPDIR CONFIG_SRC_SUBDIR="$CONFIG_SRC_SUBDIR" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h:config.in" ;; + "depdir") CONFIG_COMMANDS="$CONFIG_COMMANDS depdir" ;; + "gdbdepdir") CONFIG_COMMANDS="$CONFIG_COMMANDS gdbdepdir" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + + *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= ac_tmp= + trap 'exit_status=$? + : "${ac_tmp:=$tmp}" + { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 +ac_tmp=$tmp + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$ac_tmp/subs1.awk" && +_ACEOF + + +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\)..*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\)..*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' <conf$$subs.awk | sed ' +/^[^""]/{ + N + s/\n// +} +' >>$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ + || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 +_ACEOF + +# VPATH may cause trouble with some makes, so we remove sole $(srcdir), +# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ +h +s/// +s/^/:/ +s/[ ]*$/:/ +s/:\$(srcdir):/:/g +s/:\${srcdir}:/:/g +s/:@srcdir@:/:/g +s/^:*// +s/:*$// +x +s/\(=[ ]*\).*/\1/ +G +s/\n// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +fi # test -n "$CONFIG_FILES" + +# Set up the scripts for CONFIG_HEADERS section. +# No need to generate them if there are no CONFIG_HEADERS. +# This happens for instance with `./config.status Makefile'. +if test -n "$CONFIG_HEADERS"; then +cat >"$ac_tmp/defines.awk" <<\_ACAWK || +BEGIN { +_ACEOF + +# Transform confdefs.h into an awk script `defines.awk', embedded as +# here-document in config.status, that substitutes the proper values into +# config.h.in to produce config.h. + +# Create a delimiter string that does not exist in confdefs.h, to ease +# handling of long lines. +ac_delim='%!_!# ' +for ac_last_try in false false :; do + ac_tt=`sed -n "/$ac_delim/p" confdefs.h` + if test -z "$ac_tt"; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +# For the awk script, D is an array of macro values keyed by name, +# likewise P contains macro parameters if any. Preserve backslash +# newline sequences. + +ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* +sed -n ' +s/.\{148\}/&'"$ac_delim"'/g +t rset +:rset +s/^[ ]*#[ ]*define[ ][ ]*/ / +t def +d +:def +s/\\$// +t bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3"/p +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p +d +:bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3\\\\\\n"\\/p +t cont +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p +t cont +d +:cont +n +s/.\{148\}/&'"$ac_delim"'/g +t clear +:clear +s/\\$// +t bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/"/p +d +:bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p +b cont +' <confdefs.h | sed ' +s/'"$ac_delim"'/"\\\ +"/g' >>$CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + for (key in D) D_is_set[key] = 1 + FS = "" +} +/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { + line = \$ 0 + split(line, arg, " ") + if (arg[1] == "#") { + defundef = arg[2] + mac1 = arg[3] + } else { + defundef = substr(arg[1], 2) + mac1 = arg[2] + } + split(mac1, mac2, "(") #) + macro = mac2[1] + prefix = substr(line, 1, index(line, defundef) - 1) + if (D_is_set[macro]) { + # Preserve the white space surrounding the "#". + print prefix "define", macro P[macro] D[macro] + next + } else { + # Replace #undef with comments. This is necessary, for example, + # in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. + if (defundef == "undef") { + print "/*", prefix defundef, macro, "*/" + next + } + } +} +{ print } +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 +fi # test -n "$CONFIG_HEADERS" + + +eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$ac_tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$ac_tmp/stdin" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir="$ac_dir"; as_fn_mkdir_p + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + case $ac_mode in + :F) + # + # CONFIG_FILE + # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ + >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ + "$ac_tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&5 +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&2;} + + rm -f "$ac_tmp/stdin" + case $ac_file in + -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; + *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; + esac \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + ;; + :H) + # + # CONFIG_HEADER + # + if test x"$ac_file" != x-; then + { + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" + } >"$ac_tmp/config.h" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +$as_echo "$as_me: $ac_file is unchanged" >&6;} + else + rm -f "$ac_file" + mv "$ac_tmp/config.h" "$ac_file" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + fi + else + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ + || as_fn_error $? "could not create -" "$LINENO" 5 + fi + ;; + + :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} + ;; + esac + + + case $ac_file$ac_mode in + "config.h":H) echo > stamp-h ;; + "depdir":C) $SHELL $ac_aux_dir/mkinstalldirs $DEPDIR ;; + "gdbdepdir":C) + for subdir in ${CONFIG_SRC_SUBDIR} + do + $SHELL $ac_aux_dir/mkinstalldirs $subdir/$DEPDIR + done ;; + + esac +done # for ac_tag + + +as_fn_exit 0 +_ACEOF +ac_clean_files=$ac_clean_files_save + +test $ac_write_fail = 0 || + as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || as_fn_exit 1 +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} +fi + diff -Nru gdb-9.1/gdbserver/configure.ac gdb-10.2/gdbserver/configure.ac --- gdb-9.1/gdbserver/configure.ac 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/configure.ac 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,421 @@ +dnl Autoconf configure script for GDB server. +dnl Copyright (C) 2000-2021 Free Software Foundation, Inc. +dnl +dnl This file is part of GDB. +dnl +dnl This program is free software; you can redistribute it and/or modify +dnl it under the terms of the GNU General Public License as published by +dnl the Free Software Foundation; either version 3 of the License, or +dnl (at your option) any later version. +dnl +dnl This program is distributed in the hope that it will be useful, +dnl but WITHOUT ANY WARRANTY; without even the implied warranty of +dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +dnl GNU General Public License for more details. +dnl +dnl You should have received a copy of the GNU General Public License +dnl along with this program. If not, see <http://www.gnu.org/licenses/>. + +dnl Process this file with autoconf to produce a configure script. + +AC_INIT(server.cc) +AC_CONFIG_HEADERS(config.h:config.in, [echo > stamp-h]) + +AM_MAINTAINER_MODE + +AC_PROG_CC +AC_PROG_CXX +AC_GNU_SOURCE +AC_SYS_LARGEFILE +AM_PROG_INSTALL_STRIP + +AC_CANONICAL_SYSTEM + +AC_PROG_INSTALL +AC_CHECK_TOOL(AR, ar) +AC_PROG_RANLIB + +AC_ARG_PROGRAM + +# We require a C++11 compiler. Check if one is available, and if +# necessary, set CXX_DIALECT to some -std=xxx switch. +AX_CXX_COMPILE_STDCXX(11, , mandatory) + +AC_HEADER_STDC + +GDB_AC_COMMON +# This is set by GDB_AC_COMMON. +AC_SUBST(WIN32APILIBS) + +GDB_AC_SELFTEST + +ACX_NONCANONICAL_TARGET +ACX_NONCANONICAL_HOST + +# Dependency checking. +ZW_CREATE_DEPDIR + +dnl Set up for gettext. +ZW_GNU_GETTEXT_SISTER_DIR + +# Create sub-directories for objects and dependencies. +CONFIG_SRC_SUBDIR="arch gdbsupport nat target" +AC_SUBST(CONFIG_SRC_SUBDIR) + +AC_CONFIG_COMMANDS([gdbdepdir],[ + for subdir in ${CONFIG_SRC_SUBDIR} + do + $SHELL $ac_aux_dir/mkinstalldirs $subdir/$DEPDIR + done], + [ac_aux_dir=$ac_aux_dir DEPDIR=$DEPDIR CONFIG_SRC_SUBDIR="$CONFIG_SRC_SUBDIR"]) + +ZW_PROG_COMPILER_DEPENDENCIES([CC]) + +AC_CHECK_HEADERS(termios.h sys/reg.h string.h dnl + sys/procfs.h linux/elf.h dnl + fcntl.h signal.h sys/file.h dnl + sys/ioctl.h netinet/in.h sys/socket.h netdb.h dnl + netinet/tcp.h arpa/inet.h ws2tcpip.h) +AC_FUNC_FORK +AC_CHECK_FUNCS(pread pwrite pread64) + +# Check the return and argument types of ptrace. +GDB_AC_PTRACE + +# Check for UST +ustlibs="" +ustinc="" + +AC_ARG_WITH(ust, [ --with-ust=PATH Specify prefix directory for the installed UST package + Equivalent to --with-ust-include=PATH/include + plus --with-ust-lib=PATH/lib]) +AC_ARG_WITH(ust_include, [ --with-ust-include=PATH Specify directory for installed UST include files]) +AC_ARG_WITH(ust_lib, [ --with-ust-lib=PATH Specify the directory for the installed UST library]) + +case $with_ust in + no) + ustlibs= + ustinc= + ;; + "" | yes) + ustlibs=" -lust " + ustinc="" + ;; + *) + ustlibs="-L$with_ust/lib -lust" + ustinc="-I$with_ust/include " + ;; +esac +if test "x$with_ust_include" != x; then + ustinc="-I$with_ust_include " +fi +if test "x$with_ust_lib" != x; then + ustlibs="-L$with_ust_lib -lust" +fi + +if test "x$with_ust" != "xno"; then + saved_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $ustinc" + AC_MSG_CHECKING([for ust]) + AC_TRY_COMPILE([ +#define CONFIG_UST_GDB_INTEGRATION +#include <ust/ust.h> + ],[], + [AC_MSG_RESULT([yes]); AC_DEFINE(HAVE_UST, 1, [Define if UST is available])], + [AC_MSG_RESULT([no]); ustlibs= ; ustinc= ]) + CFLAGS="$saved_CFLAGS" +fi + +# Flags needed for UST +AC_SUBST(ustlibs) +AC_SUBST(ustinc) + +AM_GDB_WARNINGS + +dnl dladdr is glibc-specific. It is used by thread-db.c but only for +dnl debugging messages. It lives in -ldl which is handled below so we don't +dnl use AC_CHECK_LIB (or AC_SEARCH_LIBS) here. Instead we just temporarily +dnl augment LIBS. +old_LIBS="$LIBS" +LIBS="$LIBS -ldl" +AC_CHECK_FUNCS(dladdr) +LIBS="$old_LIBS" + +libiberty_INIT + +AC_CHECK_DECLS([perror, vasprintf, vsnprintf]) + +AC_CHECK_TYPES(socklen_t, [], [], +[#include <sys/types.h> +#if HAVE_SYS_SOCKET_H +# include <sys/socket.h> +#elif HAVE_WS2TCPIP_H +# include <ws2tcpip.h> +#endif +]) + +case "${target}" in + *-android*) + # Starting with NDK version 9, <elf.h> actually includes definitions + # of Elf32_auxv_t and Elf64_auxv_t. But sadly, <elf.h> includes + # <sys/exec_elf.h> which defines some of the ELF types incorrectly, + # leading to conflicts with the defintions from <linux/elf.h>. + # This makes it impossible for us to include both <elf.h> and + # <linux/elf.h>, which means that, in practice, we do not have + # access to Elf32_auxv_t and Elf64_auxv_t on this platform. + # Therefore, do not try to auto-detect availability, as it would + # get it wrong on this platform. + ;; + *) + AC_CHECK_TYPES([Elf32_auxv_t, Elf64_auxv_t], [], [], + #include <elf.h> + ) +esac + +ACX_PKGVERSION([GDB]) +ACX_BUGURL([http://www.gnu.org/software/gdb/bugs/]) +AC_DEFINE_UNQUOTED([PKGVERSION], ["$PKGVERSION"], [Additional package description]) +AC_DEFINE_UNQUOTED([REPORT_BUGS_TO], ["$REPORT_BUGS_TO"], [Bug reporting address]) + +# Check for various supplementary target information (beyond the +# triplet) which might affect the choices in configure.srv. +case "${target}" in +changequote(,)dnl + i[34567]86-*-linux*) +changequote([,])dnl + AC_CACHE_CHECK([if building for x86-64], [gdb_cv_i386_is_x86_64], + [save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $CFLAGS" + AC_EGREP_CPP([got it], [ +#if __x86_64__ +got it +#endif + ], [gdb_cv_i386_is_x86_64=yes], + [gdb_cv_i386_is_x86_64=no]) + CPPFLAGS="$save_CPPFLAGS"]) + ;; + + x86_64-*-linux*) + AC_CACHE_CHECK([if building for x32], [gdb_cv_x86_is_x32], + [save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $CFLAGS" + AC_EGREP_CPP([got it], [ +#if __x86_64__ && __ILP32__ +got it +#endif + ], [gdb_cv_x86_is_x32=yes], + [gdb_cv_x86_is_x32=no]) + CPPFLAGS="$save_CPPFLAGS"]) + ;; + + m68k-*-*) + AC_CACHE_CHECK([if building for Coldfire], [gdb_cv_m68k_is_coldfire], + [save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $CFLAGS" + AC_EGREP_CPP([got it], [ +#ifdef __mcoldfire__ +got it +#endif + ], [gdb_cv_m68k_is_coldfire=yes], + [gdb_cv_m68k_is_coldfire=no]) + CPPFLAGS="$save_CPPFLAGS"]) + ;; +esac + +. ${srcdir}/configure.srv + +if test "${srv_mingwce}" = "yes"; then + LIBS="$LIBS -lws2" +elif test "${srv_mingw}" = "yes"; then + # WIN32APILIBS is set by GDB_AC_COMMON. + LIBS="$LIBS $WIN32APILIBS" +fi + +if test "${srv_linux_usrregs}" = "yes"; then + AC_DEFINE(HAVE_LINUX_USRREGS, 1, + [Define if the target supports PTRACE_PEEKUSR for register ] + [access.]) +fi + +if test "${srv_linux_regsets}" = "yes"; then + AC_DEFINE(HAVE_LINUX_REGSETS, 1, + [Define if the target supports register sets.]) + + AC_MSG_CHECKING(for PTRACE_GETREGS) + AC_CACHE_VAL(gdbsrv_cv_have_ptrace_getregs, + [AC_TRY_COMPILE([#include <sys/ptrace.h>], + [PTRACE_GETREGS;], + [gdbsrv_cv_have_ptrace_getregs=yes], + [gdbsrv_cv_have_ptrace_getregs=no])]) + AC_MSG_RESULT($gdbsrv_cv_have_ptrace_getregs) + if test "${gdbsrv_cv_have_ptrace_getregs}" = "yes"; then + AC_DEFINE(HAVE_PTRACE_GETREGS, 1, + [Define if the target supports PTRACE_GETREGS for register ] + [access.]) + fi + + AC_MSG_CHECKING(for PTRACE_GETFPXREGS) + AC_CACHE_VAL(gdbsrv_cv_have_ptrace_getfpxregs, + [AC_TRY_COMPILE([#include <sys/ptrace.h>], + [PTRACE_GETFPXREGS;], + [gdbsrv_cv_have_ptrace_getfpxregs=yes], + [gdbsrv_cv_have_ptrace_getfpxregs=no])]) + AC_MSG_RESULT($gdbsrv_cv_have_ptrace_getfpxregs) + if test "${gdbsrv_cv_have_ptrace_getfpxregs}" = "yes"; then + AC_DEFINE(HAVE_PTRACE_GETFPXREGS, 1, + [Define if the target supports PTRACE_GETFPXREGS for extended ] + [register access.]) + fi +fi + +if test "${srv_linux_btrace}" = "yes"; then + AC_DEFINE(HAVE_LINUX_BTRACE, 1, + [Define if the target supports branch tracing.]) +fi + +dnl Some systems (e.g., Android) have lwpid_t defined in libthread_db.h. +if test "$bfd_cv_have_sys_procfs_type_lwpid_t" != yes; then + GDBSERVER_HAVE_THREAD_DB_TYPE(lwpid_t) +fi + +dnl Some systems (e.g., Android) have psaddr_t defined in libthread_db.h. +if test "$bfd_cv_have_sys_procfs_type_psaddr_t" != yes; then + GDBSERVER_HAVE_THREAD_DB_TYPE(psaddr_t) +fi + +dnl Check for libdl, but do not add it to LIBS as only gdbserver +dnl needs it (and gdbreplay doesn't). +old_LIBS="$LIBS" +AC_CHECK_LIB(dl, dlopen) +LIBS="$old_LIBS" + +srv_thread_depfiles= +srv_libs= + +if test "$srv_linux_thread_db" = "yes"; then + if test "$ac_cv_lib_dl_dlopen" = "yes"; then + srv_libs="-ldl" + AC_MSG_CHECKING(for the dynamic export flag) + old_LDFLAGS="$LDFLAGS" + # Older GNU ld supports --export-dynamic but --dynamic-list may not be + # supported there. + RDYNAMIC="-Wl,--dynamic-list=${srcdir}/proc-service.list" + LDFLAGS="$LDFLAGS $RDYNAMIC" + AC_TRY_LINK([], [], + [found="-Wl,--dynamic-list" + RDYNAMIC='-Wl,--dynamic-list=$(srcdir)/proc-service.list'], + [RDYNAMIC="-rdynamic" + LDFLAGS="$old_LDFLAGS $RDYNAMIC" + AC_TRY_LINK([], [], + [found="-rdynamic"], + [found="no" + RDYNAMIC=""])]) + AC_SUBST(RDYNAMIC) + LDFLAGS="$old_LDFLAGS" + AC_MSG_RESULT($found) + else + srv_libs="-lthread_db" + fi + + srv_thread_depfiles="thread-db.o proc-service.o" + AC_DEFINE(USE_THREAD_DB, 1, [Define if we should use libthread_db.]) + AC_CACHE_CHECK([for TD_VERSION], gdbsrv_cv_have_td_version, + [AC_TRY_COMPILE([#include <thread_db.h>], [TD_VERSION;], + [gdbsrv_cv_have_td_version=yes], + [gdbsrv_cv_have_td_version=no])]) + if test "$gdbsrv_cv_have_td_version" = yes; then + AC_DEFINE(HAVE_TD_VERSION, 1, [Define if TD_VERSION is available.]) + fi +fi + +AC_ARG_WITH(libthread-db, +AS_HELP_STRING([--with-libthread-db=PATH], [use given libthread_db directly]), +[srv_libthread_db_path="${withval}" + srv_libs="$srv_libthread_db_path" +]) + +if test "$srv_libs" != "" -a "$srv_libs" != "-ldl"; then + AC_DEFINE(USE_LIBTHREAD_DB_DIRECTLY, 1, [Define if we should use libthread_db directly.]) +fi + +if test "$srv_xmlfiles" != ""; then + srv_xmlbuiltin="xml-builtin.o" + AC_DEFINE(USE_XML, 1, [Define if an XML target description is available.]) + + tmp_xmlfiles=$srv_xmlfiles + srv_xmlfiles="" + for f in $tmp_xmlfiles; do + srv_xmlfiles="$srv_xmlfiles \$(XML_DIR)/$f" + done +fi + +GDBSERVER_DEPFILES="$srv_regobj $srv_tgtobj $srv_hostio_err_objs $srv_thread_depfiles" +GDBSERVER_LIBS="$srv_libs" + +dnl Check whether the target supports __sync_*_compare_and_swap. +AC_CACHE_CHECK([whether the target supports __sync_*_compare_and_swap], + gdbsrv_cv_have_sync_builtins, [ +AC_TRY_LINK([], [int foo, bar; bar = __sync_val_compare_and_swap(&foo, 0, 1);], + gdbsrv_cv_have_sync_builtins=yes, + gdbsrv_cv_have_sync_builtins=no)]) +if test "$gdbsrv_cv_have_sync_builtins" = yes; then + AC_DEFINE(HAVE_SYNC_BUILTINS, 1, + [Define to 1 if the target supports __sync_*_compare_and_swap]) +fi + +dnl Check for -fvisibility=hidden support in the compiler. +saved_cflags="$CFLAGS" +CFLAGS="$CFLAGS -fvisibility=hidden" +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([])], + [gdbsrv_cv_have_visibility_hidden=yes], + [gdbsrv_cv_have_visibility_hidden=no]) +CFLAGS="$saved_cflags" + +IPA_DEPFILES="" +extra_libraries="" + +# check whether to enable the inprocess agent +if test "$ipa_obj" != "" \ + -a "$gdbsrv_cv_have_sync_builtins" = yes \ + -a "$gdbsrv_cv_have_visibility_hidden" = yes; then + have_ipa=true +else + have_ipa=false +fi + +AC_ARG_ENABLE(inprocess-agent, +AS_HELP_STRING([--enable-inprocess-agent], [inprocess agent]), +[case "$enableval" in + yes) want_ipa=true ;; + no) want_ipa=false ;; + *) AC_MSG_ERROR([bad value $enableval for inprocess-agent]) ;; +esac], +[want_ipa=$have_ipa]) + +if $want_ipa ; then + if $have_ipa ; then + IPA_DEPFILES="$ipa_obj" + extra_libraries="$extra_libraries libinproctrace.so" + else + AC_MSG_ERROR([inprocess agent not supported for this target]) + fi +fi + +AC_SUBST(GDBSERVER_DEPFILES) +AC_SUBST(GDBSERVER_LIBS) +AC_SUBST(srv_xmlbuiltin) +AC_SUBST(srv_xmlfiles) +AC_SUBST(IPA_DEPFILES) +AC_SUBST(extra_libraries) + +GNULIB=../gnulib/import + +GNULIB_STDINT_H= +if test x"$STDINT_H" != x; then + GNULIB_STDINT_H=$GNULIB/$STDINT_H +fi +AC_SUBST(GNULIB_STDINT_H) + +AC_CONFIG_FILES([Makefile]) + +AC_OUTPUT diff -Nru gdb-9.1/gdbserver/configure.srv gdb-10.2/gdbserver/configure.srv --- gdb-9.1/gdbserver/configure.srv 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/configure.srv 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,379 @@ +# Mappings from configuration triplets to gdbserver build options. +# This is invoked from the autoconf-generated configure script, to +# produce the appropriate Makefile substitutions. +# It is also sourced by the top level configure script, to determine +# whether gdbserver is supported on a given host. + +# This file sets the following shell variables: +# srv_regobj The register protocol appropriate for this target. +# srv_tgtobj Any other target-specific modules appropriate +# for this target. +# srv_hostio_err The object implementing the hostio_last_error +# target method. +# srv_xmlfiles All XML files which should be available for +# gdbserver in this configuration. +# ipa_obj Any other target-specific modules appropriate +# for this target's in-process agent. +# UNSUPPORTED Set to 1 if the host is unsupported. +# +# In addition, on GNU/Linux the following shell variables will be set: +# srv_linux_regsets Set to "yes" if ptrace(PTRACE_GETREGS) and friends +# may be available on this platform; unset otherwise. +# They will only be used if <sys/ptrace.h> defines +# PTRACE_GETREGS. +# srv_linux_usrregs Set to "yes" if we can get at registers via +# PTRACE_PEEKUSR / PTRACE_POKEUSR. + +# Default hostio_last_error implementation +srv_hostio_err_objs="hostio-errno.o" + +ipa_ppc_linux_regobj="powerpc-32l-ipa.o powerpc-altivec32l-ipa.o powerpc-vsx32l-ipa.o powerpc-isa205-32l-ipa.o powerpc-isa205-altivec32l-ipa.o powerpc-isa205-vsx32l-ipa.o powerpc-isa205-ppr-dscr-vsx32l-ipa.o powerpc-isa207-vsx32l-ipa.o powerpc-isa207-htm-vsx32l-ipa.o powerpc-e500l-ipa.o powerpc-64l-ipa.o powerpc-altivec64l-ipa.o powerpc-vsx64l-ipa.o powerpc-isa205-64l-ipa.o powerpc-isa205-altivec64l-ipa.o powerpc-isa205-vsx64l-ipa.o powerpc-isa205-ppr-dscr-vsx64l-ipa.o powerpc-isa207-vsx64l-ipa.o powerpc-isa207-htm-vsx64l-ipa.o" + +# Linux object files. This is so we don't have to repeat +# these files over and over again. +srv_linux_obj="linux-low.o nat/linux-osdata.o nat/linux-procfs.o nat/linux-ptrace.o nat/linux-waitpid.o nat/linux-personality.o nat/linux-namespaces.o fork-child.o nat/fork-inferior.o" + +# Input is taken from the "${host}" and "${target}" variables. + +# GDBserver can only debug native programs. +if test "${target}" = "${host}"; then + gdbserver_host=${host} +else + gdbserver_host= +fi + +case "${gdbserver_host}" in + aarch64*-*-linux*) srv_tgtobj="linux-aarch64-low.o" + srv_tgtobj="$srv_tgtobj nat/aarch64-linux-hw-point.o" + srv_tgtobj="$srv_tgtobj linux-aarch32-low.o" + srv_tgtobj="$srv_tgtobj linux-aarch32-tdesc.o" + srv_tgtobj="${srv_tgtobj} arch/aarch32.o" + srv_tgtobj="${srv_tgtobj} arch/arm.o" + srv_tgtobj="$srv_tgtobj nat/aarch64-linux.o" + srv_tgtobj="$srv_tgtobj arch/aarch64-insn.o" + srv_tgtobj="$srv_tgtobj arch/aarch64.o" + srv_tgtobj="$srv_tgtobj linux-aarch64-tdesc.o" + srv_tgtobj="$srv_tgtobj nat/aarch64-sve-linux-ptrace.o" + srv_tgtobj="${srv_tgtobj} $srv_linux_obj" + srv_linux_regsets=yes + srv_linux_thread_db=yes + ipa_obj="linux-aarch64-ipa.o" + ipa_obj="${ipa_obj} linux-aarch64-tdesc-ipa.o" + ipa_obj="${ipa_obj} arch/aarch64-ipa.o" + ;; + arc*-*-linux*) + srv_regobj="" + srv_tgtobj="linux-arc-low.o arch/arc.o $srv_linux_obj" + srv_xmlfiles="arc/v1-core.xml" + srv_xmlfiles="${srv_xmlfiles} arc/v1-aux.xml" + srv_xmlfiles="${srv_xmlfiles} arc/v2-core.xml" + srv_xmlfiles="${srv_xmlfiles} arc/v2-aux.xml" + srv_linux_regsets=yes + srv_linux_usrregs=yes + srv_linux_thread_db=yes + ;; + arm*-*-linux*) srv_tgtobj="$srv_linux_obj linux-arm-low.o" + srv_tgtobj="$srv_tgtobj linux-arm-tdesc.o" + srv_tgtobj="$srv_tgtobj linux-aarch32-low.o" + srv_tgtobj="$srv_tgtobj linux-aarch32-tdesc.o" + srv_tgtobj="${srv_tgtobj} arch/aarch32.o" + srv_tgtobj="${srv_tgtobj} arch/arm.o" + srv_tgtobj="${srv_tgtobj} arch/arm-linux.o" + srv_tgtobj="${srv_tgtobj} arch/arm-get-next-pcs.o" + srv_linux_usrregs=yes + srv_linux_regsets=yes + srv_linux_thread_db=yes + ;; + i[34567]86-*-cygwin*) srv_regobj="" + srv_tgtobj="x86-low.o nat/x86-dregs.o win32-low.o" + srv_tgtobj="${srv_tgtobj} win32-i386-low.o" + srv_tgtobj="${srv_tgtobj} nat/windows-nat.o" + srv_tgtobj="${srv_tgtobj} arch/i386.o" + ;; + i[34567]86-*-linux*) srv_tgtobj="${srv_tgtobj} arch/i386.o" + srv_tgtobj="${srv_tgtobj} $srv_linux_obj" + srv_tgtobj="${srv_tgtobj} linux-x86-low.o x86-low.o" + srv_tgtobj="${srv_tgtobj} nat/x86-dregs.o i387-fp.o" + srv_tgtobj="${srv_tgtobj} linux-x86-tdesc.o" + srv_tgtobj="${srv_tgtobj} nat/linux-btrace.o" + srv_tgtobj="${srv_tgtobj} nat/x86-linux.o" + srv_tgtobj="${srv_tgtobj} nat/x86-linux-dregs.o" + srv_linux_usrregs=yes + srv_linux_regsets=yes + srv_linux_thread_db=yes + srv_linux_btrace=yes + ipa_obj="linux-i386-ipa.o linux-x86-tdesc-ipa.o" + ipa_obj="${ipa_obj} arch/i386-ipa.o" + ;; + i[34567]86-*-mingw*) srv_regobj="" + srv_tgtobj="x86-low.o nat/x86-dregs.o win32-low.o" + srv_tgtobj="${srv_tgtobj} win32-i386-low.o" + srv_tgtobj="${srv_tgtobj} nat/windows-nat.o" + srv_tgtobj="${srv_tgtobj} arch/i386.o" + srv_mingw=yes + ;; + ia64-*-linux*) srv_regobj=reg-ia64.o + srv_tgtobj="$srv_linux_obj linux-ia64-low.o" + srv_linux_usrregs=yes + ;; + m68*-*-linux*) if test "$gdb_cv_m68k_is_coldfire" = yes; then + srv_regobj=reg-cf.o + else + srv_regobj=reg-m68k.o + fi + srv_tgtobj="$srv_linux_obj linux-m68k-low.o" + srv_linux_usrregs=yes + srv_linux_regsets=yes + srv_linux_thread_db=yes + ;; + m68*-*-uclinux*) if test "$gdb_cv_m68k_is_coldfire" = yes; then + srv_regobj=reg-cf.o + else + srv_regobj=reg-m68k.o + fi + srv_tgtobj="$srv_linux_obj linux-m68k-low.o" + srv_linux_usrregs=yes + srv_linux_regsets=yes + srv_linux_thread_db=yes + ;; + mips*-*-linux*) srv_regobj="mips-linux.o" + srv_regobj="${srv_regobj} mips-dsp-linux.o" + srv_regobj="${srv_regobj} mips64-linux.o" + srv_regobj="${srv_regobj} mips64-dsp-linux.o" + srv_tgtobj="$srv_linux_obj linux-mips-low.o" + srv_tgtobj="${srv_tgtobj} nat/mips-linux-watch.o" + srv_xmlfiles="mips-linux.xml" + srv_xmlfiles="${srv_xmlfiles} mips-dsp-linux.xml" + srv_xmlfiles="${srv_xmlfiles} mips-cpu.xml" + srv_xmlfiles="${srv_xmlfiles} mips-cp0.xml" + srv_xmlfiles="${srv_xmlfiles} mips-fpu.xml" + srv_xmlfiles="${srv_xmlfiles} mips-dsp.xml" + srv_xmlfiles="${srv_xmlfiles} mips64-linux.xml" + srv_xmlfiles="${srv_xmlfiles} mips64-dsp-linux.xml" + srv_xmlfiles="${srv_xmlfiles} mips64-cpu.xml" + srv_xmlfiles="${srv_xmlfiles} mips64-cp0.xml" + srv_xmlfiles="${srv_xmlfiles} mips64-fpu.xml" + srv_xmlfiles="${srv_xmlfiles} mips64-dsp.xml" + srv_linux_regsets=yes + srv_linux_usrregs=yes + srv_linux_thread_db=yes + ;; + nios2*-*-linux*) srv_regobj="nios2-linux.o" + srv_tgtobj="$srv_linux_obj linux-nios2-low.o" + srv_xmlfiles="nios2-linux.xml" + srv_xmlfiles="${srv_xmlfiles} nios2-cpu.xml" + srv_linux_regsets=yes + srv_linux_usrregs=yes + srv_linux_thread_db=yes + ;; + powerpc*-*-linux*) srv_regobj="powerpc-32l.o" + srv_regobj="${srv_regobj} powerpc-altivec32l.o" + srv_regobj="${srv_regobj} powerpc-vsx32l.o" + srv_regobj="${srv_regobj} powerpc-isa205-32l.o" + srv_regobj="${srv_regobj} powerpc-isa205-altivec32l.o" + srv_regobj="${srv_regobj} powerpc-isa205-vsx32l.o" + srv_regobj="${srv_regobj} powerpc-isa205-ppr-dscr-vsx32l.o" + srv_regobj="${srv_regobj} powerpc-isa207-vsx32l.o" + srv_regobj="${srv_regobj} powerpc-isa207-htm-vsx32l.o" + srv_regobj="${srv_regobj} powerpc-e500l.o" + srv_regobj="${srv_regobj} powerpc-64l.o" + srv_regobj="${srv_regobj} powerpc-altivec64l.o" + srv_regobj="${srv_regobj} powerpc-vsx64l.o" + srv_regobj="${srv_regobj} powerpc-isa205-64l.o" + srv_regobj="${srv_regobj} powerpc-isa205-altivec64l.o" + srv_regobj="${srv_regobj} powerpc-isa205-vsx64l.o" + srv_regobj="${srv_regobj} powerpc-isa205-ppr-dscr-vsx64l.o" + srv_regobj="${srv_regobj} powerpc-isa207-vsx64l.o" + srv_regobj="${srv_regobj} powerpc-isa207-htm-vsx64l.o" + srv_tgtobj="$srv_linux_obj linux-ppc-low.o" + srv_tgtobj="${srv_tgtobj} nat/ppc-linux.o" + srv_tgtobj="${srv_tgtobj} arch/ppc-linux-common.o" + srv_xmlfiles="rs6000/powerpc-32l.xml" + srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-altivec32l.xml" + srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-vsx32l.xml" + srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-isa205-32l.xml" + srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-isa205-altivec32l.xml" + srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-isa205-vsx32l.xml" + srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-isa205-ppr-dscr-vsx32l.xml" + srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-isa207-vsx32l.xml" + srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-isa207-htm-vsx32l.xml" + srv_xmlfiles="${srv_xmlfiles} rs6000/power-altivec.xml" + srv_xmlfiles="${srv_xmlfiles} rs6000/power-vsx.xml" + srv_xmlfiles="${srv_xmlfiles} rs6000/power-core.xml" + srv_xmlfiles="${srv_xmlfiles} rs6000/power-linux.xml" + srv_xmlfiles="${srv_xmlfiles} rs6000/power-fpu.xml" + srv_xmlfiles="${srv_xmlfiles} rs6000/power-fpu-isa205.xml" + srv_xmlfiles="${srv_xmlfiles} rs6000/power-dscr.xml" + srv_xmlfiles="${srv_xmlfiles} rs6000/power-ppr.xml" + srv_xmlfiles="${srv_xmlfiles} rs6000/power-tar.xml" + srv_xmlfiles="${srv_xmlfiles} rs6000/power-ebb.xml" + srv_xmlfiles="${srv_xmlfiles} rs6000/power-linux-pmu.xml" + srv_xmlfiles="${srv_xmlfiles} rs6000/power-htm-spr.xml" + srv_xmlfiles="${srv_xmlfiles} rs6000/power-htm-core.xml" + srv_xmlfiles="${srv_xmlfiles} rs6000/power-htm-fpu.xml" + srv_xmlfiles="${srv_xmlfiles} rs6000/power-htm-altivec.xml" + srv_xmlfiles="${srv_xmlfiles} rs6000/power-htm-vsx.xml" + srv_xmlfiles="${srv_xmlfiles} rs6000/power-htm-ppr.xml" + srv_xmlfiles="${srv_xmlfiles} rs6000/power-htm-dscr.xml" + srv_xmlfiles="${srv_xmlfiles} rs6000/power-htm-tar.xml" + srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-e500l.xml" + srv_xmlfiles="${srv_xmlfiles} rs6000/power-spe.xml" + srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-64l.xml" + srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-altivec64l.xml" + srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-vsx64l.xml" + srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-isa205-64l.xml" + srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-isa205-altivec64l.xml" + srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-isa205-vsx64l.xml" + srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-isa205-ppr-dscr-vsx64l.xml" + srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-isa207-vsx64l.xml" + srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-isa207-htm-vsx64l.xml" + srv_xmlfiles="${srv_xmlfiles} rs6000/power64-core.xml" + srv_xmlfiles="${srv_xmlfiles} rs6000/power64-linux.xml" + srv_xmlfiles="${srv_xmlfiles} rs6000/power64-htm-core.xml" + srv_linux_usrregs=yes + srv_linux_regsets=yes + srv_linux_thread_db=yes + ipa_obj="${ipa_ppc_linux_regobj} linux-ppc-ipa.o" + ;; + riscv*-*-linux*) srv_tgtobj="arch/riscv.o nat/riscv-linux-tdesc.o" + srv_tgtobj="${srv_tgtobj} linux-riscv-low.o" + srv_tgtobj="${srv_tgtobj} ${srv_linux_obj}" + srv_linux_regsets=yes + srv_linux_usrregs=yes + srv_linux_thread_db=yes + ;; + s390*-*-linux*) srv_regobj="s390-linux32.o" + srv_regobj="${srv_regobj} s390-linux32v1.o" + srv_regobj="${srv_regobj} s390-linux32v2.o" + srv_regobj="${srv_regobj} s390-linux64.o" + srv_regobj="${srv_regobj} s390-linux64v1.o" + srv_regobj="${srv_regobj} s390-linux64v2.o" + srv_regobj="${srv_regobj} s390-te-linux64.o" + srv_regobj="${srv_regobj} s390-vx-linux64.o" + srv_regobj="${srv_regobj} s390-tevx-linux64.o" + srv_regobj="${srv_regobj} s390-gs-linux64.o" + srv_regobj="${srv_regobj} s390x-linux64.o" + srv_regobj="${srv_regobj} s390x-linux64v1.o" + srv_regobj="${srv_regobj} s390x-linux64v2.o" + srv_regobj="${srv_regobj} s390x-te-linux64.o" + srv_regobj="${srv_regobj} s390x-vx-linux64.o" + srv_regobj="${srv_regobj} s390x-tevx-linux64.o" + srv_regobj="${srv_regobj} s390x-gs-linux64.o" + srv_tgtobj="$srv_linux_obj linux-s390-low.o" + srv_xmlfiles="s390-linux32.xml" + srv_xmlfiles="${srv_xmlfiles} s390-linux32v1.xml" + srv_xmlfiles="${srv_xmlfiles} s390-linux32v2.xml" + srv_xmlfiles="${srv_xmlfiles} s390-linux64.xml" + srv_xmlfiles="${srv_xmlfiles} s390-linux64v1.xml" + srv_xmlfiles="${srv_xmlfiles} s390-linux64v2.xml" + srv_xmlfiles="${srv_xmlfiles} s390-te-linux64.xml" + srv_xmlfiles="${srv_xmlfiles} s390-vx-linux64.xml" + srv_xmlfiles="${srv_xmlfiles} s390-tevx-linux64.xml" + srv_xmlfiles="${srv_xmlfiles} s390-gs-linux64.xml" + srv_xmlfiles="${srv_xmlfiles} s390x-linux64.xml" + srv_xmlfiles="${srv_xmlfiles} s390x-linux64v1.xml" + srv_xmlfiles="${srv_xmlfiles} s390x-linux64v2.xml" + srv_xmlfiles="${srv_xmlfiles} s390x-te-linux64.xml" + srv_xmlfiles="${srv_xmlfiles} s390x-vx-linux64.xml" + srv_xmlfiles="${srv_xmlfiles} s390x-tevx-linux64.xml" + srv_xmlfiles="${srv_xmlfiles} s390x-gs-linux64.xml" + srv_xmlfiles="${srv_xmlfiles} s390-core32.xml" + srv_xmlfiles="${srv_xmlfiles} s390-core64.xml" + srv_xmlfiles="${srv_xmlfiles} s390x-core64.xml" + srv_xmlfiles="${srv_xmlfiles} s390-acr.xml" + srv_xmlfiles="${srv_xmlfiles} s390-fpr.xml" + srv_xmlfiles="${srv_xmlfiles} s390-tdb.xml" + srv_xmlfiles="${srv_xmlfiles} s390-vx.xml" + srv_xmlfiles="${srv_xmlfiles} s390-gs.xml" + srv_xmlfiles="${srv_xmlfiles} s390-gsbc.xml" + srv_linux_usrregs=yes + srv_linux_regsets=yes + srv_linux_thread_db=yes + ipa_obj="linux-s390-ipa.o" + ipa_obj="${ipa_obj} s390-linux32-ipa.o" + ipa_obj="${ipa_obj} s390-linux32v1-ipa.o" + ipa_obj="${ipa_obj} s390-linux32v2-ipa.o" + ipa_obj="${ipa_obj} s390-linux64-ipa.o" + ipa_obj="${ipa_obj} s390-linux64v1-ipa.o" + ipa_obj="${ipa_obj} s390-linux64v2-ipa.o" + ipa_obj="${ipa_obj} s390-vx-linux64-ipa.o" + ipa_obj="${ipa_obj} s390-te-linux64-ipa.o" + ipa_obj="${ipa_obj} s390-tevx-linux64-ipa.o" + ipa_obj="${ipa_obj} s390-gs-linux64-ipa.o" + ipa_obj="${ipa_obj} s390x-linux64-ipa.o" + ipa_obj="${ipa_obj} s390x-linux64v1-ipa.o" + ipa_obj="${ipa_obj} s390x-linux64v2-ipa.o" + ipa_obj="${ipa_obj} s390x-vx-linux64-ipa.o" + ipa_obj="${ipa_obj} s390x-te-linux64-ipa.o" + ipa_obj="${ipa_obj} s390x-tevx-linux64-ipa.o" + ipa_obj="${ipa_obj} s390x-gs-linux64-ipa.o" + ;; + sh*-*-linux*) srv_regobj=reg-sh.o + srv_tgtobj="$srv_linux_obj linux-sh-low.o" + srv_linux_usrregs=yes + srv_linux_regsets=yes + srv_linux_thread_db=yes + ;; + sparc*-*-linux*) srv_regobj=reg-sparc64.o + srv_tgtobj="$srv_linux_obj linux-sparc-low.o" + srv_linux_regsets=yes + srv_linux_thread_db=yes + ;; + tic6x-*-uclinux) if $development; then + srv_regobj="tic6x-c64xp-linux.o" + srv_regobj="${srv_regobj} tic6x-c64x-linux.o" + srv_regobj="${srv_regobj} tic6x-c62x-linux.o" + else + srv_regobj="" + fi + srv_tgtobj="$srv_linux_obj linux-tic6x-low.o" + srv_tgtobj="${srv_tgtobj} arch/tic6x.o" + srv_linux_regsets=yes + srv_linux_usrregs=yes + srv_linux_thread_db=yes + ;; + x86_64-*-linux*) srv_tgtobj="$srv_linux_obj linux-x86-low.o x86-low.o" + srv_tgtobj="${srv_tgtobj} nat/x86-dregs.o i387-fp.o" + srv_tgtobj="${srv_tgtobj} arch/i386.o arch/amd64.o" + srv_tgtobj="${srv_tgtobj} linux-x86-tdesc.o" + srv_tgtobj="${srv_tgtobj} nat/linux-btrace.o" + srv_tgtobj="${srv_tgtobj} nat/x86-linux.o" + srv_tgtobj="${srv_tgtobj} nat/x86-linux-dregs.o" + srv_tgtobj="${srv_tgtobj} nat/amd64-linux-siginfo.o" + srv_linux_usrregs=yes # This is for i386 progs. + srv_linux_regsets=yes + srv_linux_thread_db=yes + srv_linux_btrace=yes + ipa_obj="linux-amd64-ipa.o linux-x86-tdesc-ipa.o" + ipa_obj="${ipa_obj} arch/amd64-ipa.o" + ;; + x86_64-*-mingw*) srv_regobj="" + srv_tgtobj="x86-low.o nat/x86-dregs.o i387-fp.o" + srv_tgtobj="${srv_tgtobj} win32-low.o win32-i386-low.o" + srv_tgtobj="${srv_tgtobj} nat/windows-nat.o" + srv_tgtobj="${srv_tgtobj} arch/amd64.o arch/i386.o" + srv_mingw=yes + ;; + x86_64-*-cygwin*) srv_regobj="" + srv_tgtobj="x86-low.o nat/x86-dregs.o i387-fp.o" + srv_tgtobj="${srv_tgtobj} win32-low.o win32-i386-low.o" + srv_tgtobj="${srv_tgtobj} nat/windows-nat.o" + srv_tgtobj="${srv_tgtobj} arch/amd64.o arch/i386.o" + ;; + x86_64-*-netbsd*) srv_regobj="" + srv_tgtobj="netbsd-low.o netbsd-amd64-low.o fork-child.o" + srv_tgtobj="${srv_tgtobj} nat/fork-inferior.o" + srv_tgtobj="${srv_tgtobj} nat/netbsd-nat.o" + srv_tgtobj="${srv_tgtobj} arch/amd64.o" + ;; + + xtensa*-*-linux*) srv_regobj=reg-xtensa.o + srv_tgtobj="$srv_linux_obj linux-xtensa-low.o" + srv_linux_regsets=yes + srv_linux_thread_db=yes + ;; + *) + # Who are you? + UNSUPPORTED=1 + ;; +esac diff -Nru gdb-9.1/gdbserver/debug.cc gdb-10.2/gdbserver/debug.cc --- gdb-9.1/gdbserver/debug.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/debug.cc 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,140 @@ +/* Debugging routines for the remote server for GDB. + Copyright (C) 2014-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "server.h" +#include <chrono> + +#if !defined (IN_PROCESS_AGENT) +int remote_debug = 0; +#endif + +/* Output file for debugging. Default to standard error. */ +FILE *debug_file = stderr; + +/* See debug.h. */ +int debug_threads; + +/* Include timestamps in debugging output. */ +int debug_timestamp; + +#if !defined (IN_PROCESS_AGENT) + +/* See debug.h. */ + +void +debug_set_output (const char *new_debug_file) +{ + /* Close any existing file and reset to standard error. */ + if (debug_file != stderr) + { + fclose (debug_file); + } + debug_file = stderr; + + /* Catch empty filenames. */ + if (new_debug_file == nullptr || strlen (new_debug_file) == 0) + return; + + FILE *fptr = fopen (new_debug_file, "w"); + + if (fptr == nullptr) + { + debug_printf ("Cannot open %s for writing. %s. Switching to stderr.\n", + new_debug_file, safe_strerror (errno)); + return; + } + + debug_file = fptr; +} + +#endif + +/* Print a debugging message. + If the text begins a new line it is preceded by a timestamp. + We don't get fancy with newline checking, we just check whether the + previous call ended with "\n". */ + +void +debug_vprintf (const char *format, va_list ap) +{ +#if !defined (IN_PROCESS_AGENT) + /* N.B. Not thread safe, and can't be used, as is, with IPA. */ + static int new_line = 1; + + if (debug_timestamp && new_line) + { + using namespace std::chrono; + + steady_clock::time_point now = steady_clock::now (); + seconds s = duration_cast<seconds> (now.time_since_epoch ()); + microseconds us = duration_cast<microseconds> (now.time_since_epoch ()) - s; + + fprintf (debug_file, "%ld.%06ld ", (long) s.count (), (long) us.count ()); + } +#endif + + vfprintf (debug_file, format, ap); + +#if !defined (IN_PROCESS_AGENT) + if (*format) + new_line = format[strlen (format) - 1] == '\n'; +#endif +} + +/* Flush debugging output. + This is called, for example, when starting an inferior to ensure all debug + output thus far appears before any inferior output. */ + +void +debug_flush (void) +{ + fflush (debug_file); +} + +/* Notify the user that the code is entering FUNCTION_NAME. + FUNCTION_NAME is the name of the calling function, or NULL if unknown. + + This is intended to be called via the debug_enter macro. */ + +void +do_debug_enter (const char *function_name) +{ + if (function_name != NULL) + debug_printf (">>>> entering %s\n", function_name); +} + +/* Notify the user that the code is exiting FUNCTION_NAME. + FUNCTION_NAME is the name of the calling function, or NULL if unknown. + + This is intended to be called via the debug_exit macro. */ + +void +do_debug_exit (const char *function_name) +{ + if (function_name != NULL) + debug_printf ("<<<< exiting %s\n", function_name); +} + +/* See debug.h. */ + +ssize_t +debug_write (const void *buf, size_t nbyte) +{ + int fd = fileno (debug_file); + return write (fd, buf, nbyte); +} diff -Nru gdb-9.1/gdbserver/debug.h gdb-10.2/gdbserver/debug.h --- gdb-9.1/gdbserver/debug.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/debug.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,65 @@ +/* Debugging routines for the remote server for GDB. + Copyright (C) 2014-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef GDBSERVER_DEBUG_H +#define GDBSERVER_DEBUG_H + +#if !defined (IN_PROCESS_AGENT) +extern int remote_debug; + +/* Switch all debug output to DEBUG_FILE. If DEBUG_FILE is nullptr or an + empty string, or if the file cannot be opened, then debug output is sent to + stderr. */ +void debug_set_output (const char *debug_file); +#endif + +extern int using_threads; + +/* Enable miscellaneous debugging output. The name is historical - it + was originally used to debug LinuxThreads support. */ + +extern int debug_threads; + +extern int debug_timestamp; + +void debug_flush (void); +void do_debug_enter (const char *function_name); +void do_debug_exit (const char *function_name); + +/* Async signal safe debug output function that calls write directly. */ +ssize_t debug_write (const void *buf, size_t nbyte); + +/* These macros are for use in major functions that produce a lot of + debugging output. They help identify in the mass of debugging output + when these functions enter and exit. debug_enter is intended to be + called at the start of a function, before any other debugging output. + debug_exit is intended to be called at the end of the same function, + after all debugging output. */ +#ifdef FUNCTION_NAME +#define debug_enter() \ + do { do_debug_enter (FUNCTION_NAME); } while (0) +#define debug_exit() \ + do { do_debug_exit (FUNCTION_NAME); } while (0) +#else +#define debug_enter() \ + do { } while (0) +#define debug_exit() \ + do { } while (0) +#endif + +#endif /* GDBSERVER_DEBUG_H */ diff -Nru gdb-9.1/gdbserver/.dir-locals.el gdb-10.2/gdbserver/.dir-locals.el --- gdb-9.1/gdbserver/.dir-locals.el 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/.dir-locals.el 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,41 @@ +;; Emacs settings. +;; Copyright (C) 2012-2021 Free Software Foundation, Inc. + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation; either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see <http://www.gnu.org/licenses/>. + +;; There are three copies of this file, one in each of gdb/, +;; gdbserver/, and gdbsupport/. If you edit any one of these then +;; please replicate the changes in the other two copies. + +( + (tcl-mode . ((tcl-indent-level . 4) + (tcl-continued-indent-level . 4) + (indent-tabs-mode . t))) + (nil . ((bug-reference-url-format . "http://sourceware.org/bugzilla/show_bug.cgi?id=%s"))) + (c-mode . ((c-file-style . "GNU") + (mode . c++) + (indent-tabs-mode . t) + (tab-width . 8) + (c-basic-offset . 2) + (eval . (c-set-offset 'innamespace 0)) + )) + (c++-mode . ((eval . (when (fboundp 'c-toggle-comment-style) + (c-toggle-comment-style 1))) + (indent-tabs-mode . t) + (tab-width . 8) + (c-file-style . "GNU") + (c-basic-offset . 2) + (eval . (c-set-offset 'innamespace 0)) + )) +) diff -Nru gdb-9.1/gdbserver/dll.cc gdb-10.2/gdbserver/dll.cc --- gdb-9.1/gdbserver/dll.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/dll.cc 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,80 @@ +/* Copyright (C) 2002-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "server.h" +#include "dll.h" + +#include <algorithm> + +/* An "unspecified" CORE_ADDR, for match_dll. */ +#define UNSPECIFIED_CORE_ADDR (~(CORE_ADDR) 0) + +std::list<dll_info> all_dlls; +int dlls_changed; + +/* Record a newly loaded DLL at BASE_ADDR. */ + +void +loaded_dll (const char *name, CORE_ADDR base_addr) +{ + all_dlls.emplace_back (name != NULL ? name : "", base_addr); + dlls_changed = 1; +} + +/* Record that the DLL with NAME and BASE_ADDR has been unloaded. */ + +void +unloaded_dll (const char *name, CORE_ADDR base_addr) +{ + auto pred = [&] (const dll_info &dll) + { + if (base_addr != UNSPECIFIED_CORE_ADDR + && base_addr == dll.base_addr) + return true; + + if (name != NULL && dll.name == name) + return true; + + return false; + }; + + auto iter = std::find_if (all_dlls.begin (), all_dlls.end (), pred); + + if (iter == all_dlls.end ()) + /* For some inferiors we might get unloaded_dll events without having + a corresponding loaded_dll. In that case, the dll cannot be found + in ALL_DLL, and there is nothing further for us to do. + + This has been observed when running 32bit executables on Windows64 + (i.e. through WOW64, the interface between the 32bits and 64bits + worlds). In that case, the inferior always does some strange + unloading of unnamed dll. */ + return; + else + { + /* DLL has been found so remove the entry and free associated + resources. */ + all_dlls.erase (iter); + dlls_changed = 1; + } +} + +void +clear_dlls (void) +{ + all_dlls.clear (); +} diff -Nru gdb-9.1/gdbserver/dll.h gdb-10.2/gdbserver/dll.h --- gdb-9.1/gdbserver/dll.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/dll.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,40 @@ +/* Copyright (C) 1993-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef GDBSERVER_DLL_H +#define GDBSERVER_DLL_H + +#include <list> + +struct dll_info +{ + dll_info (const std::string &name_, CORE_ADDR base_addr_) + : name (name_), base_addr (base_addr_) + {} + + std::string name; + CORE_ADDR base_addr; +}; + +extern std::list<dll_info> all_dlls; +extern int dlls_changed; + +extern void clear_dlls (void); +extern void loaded_dll (const char *name, CORE_ADDR base_addr); +extern void unloaded_dll (const char *name, CORE_ADDR base_addr); + +#endif /* GDBSERVER_DLL_H */ diff -Nru gdb-9.1/gdbserver/fork-child.cc gdb-10.2/gdbserver/fork-child.cc --- gdb-9.1/gdbserver/fork-child.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/fork-child.cc 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,119 @@ +/* Fork a Unix child process, and set up to debug it, for GDBserver. + Copyright (C) 1989-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "server.h" +#include "gdbsupport/job-control.h" +#include "nat/fork-inferior.h" +#ifdef HAVE_SIGNAL_H +#include <signal.h> +#endif + +#ifdef SIGTTOU +/* A file descriptor for the controlling terminal. */ +static int terminal_fd; + +/* TERMINAL_FD's original foreground group. */ +static pid_t old_foreground_pgrp; + +/* Hand back terminal ownership to the original foreground group. */ + +static void +restore_old_foreground_pgrp (void) +{ + tcsetpgrp (terminal_fd, old_foreground_pgrp); +} +#endif + +/* See nat/fork-inferior.h. */ + +void +prefork_hook (const char *args) +{ + client_state &cs = get_client_state (); + if (debug_threads) + { + debug_printf ("args: %s\n", args); + debug_flush (); + } + +#ifdef SIGTTOU + signal (SIGTTOU, SIG_DFL); + signal (SIGTTIN, SIG_DFL); +#endif + + /* Clear this so the backend doesn't get confused, thinking + CONT_THREAD died, and it needs to resume all threads. */ + cs.cont_thread = null_ptid; +} + +/* See nat/fork-inferior.h. */ + +void +postfork_hook (pid_t pid) +{ +} + +/* See nat/fork-inferior.h. */ + +void +postfork_child_hook () +{ + /* This is set to the result of setpgrp, which if vforked, will be + visible to you in the parent process. It's only used by humans + for debugging. */ + static int debug_setpgrp = 657473; + + debug_setpgrp = gdb_setpgid (); + if (debug_setpgrp == -1) + perror (_("setpgrp failed in child")); +} + +/* See nat/fork-inferior.h. */ + +void +gdb_flush_out_err () +{ + fflush (stdout); + fflush (stderr); +} + +/* See server.h. */ + +void +post_fork_inferior (int pid, const char *program) +{ + client_state &cs = get_client_state (); +#ifdef SIGTTOU + signal (SIGTTOU, SIG_IGN); + signal (SIGTTIN, SIG_IGN); + terminal_fd = fileno (stderr); + old_foreground_pgrp = tcgetpgrp (terminal_fd); + tcsetpgrp (terminal_fd, pid); + atexit (restore_old_foreground_pgrp); +#endif + + startup_inferior (the_target, pid, + START_INFERIOR_TRAPS_EXPECTED, + &cs.last_status, &cs.last_ptid); + current_thread->last_resume_kind = resume_stop; + current_thread->last_status = cs.last_status; + signal_pid = pid; + target_post_create_inferior (); + fprintf (stderr, "Process %s created; pid = %d\n", program, pid); + fflush (stderr); +} diff -Nru gdb-9.1/gdbserver/gdb_proc_service.h gdb-10.2/gdbserver/gdb_proc_service.h --- gdb-9.1/gdbserver/gdb_proc_service.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/gdb_proc_service.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,31 @@ +/* <proc_service.h> replacement for systems that don't have it. + Copyright (C) 2000-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef GDBSERVER_GDB_PROC_SERVICE_H +#define GDBSERVER_GDB_PROC_SERVICE_H + +#include "gdbsupport/gdb_proc_service.h" + +/* Structure that identifies the target process. */ +struct ps_prochandle +{ + /* We don't need to track anything. All context is served from the + current inferior. */ +}; + +#endif /* GDBSERVER_GDB_PROC_SERVICE_H */ diff -Nru gdb-9.1/gdbserver/gdbreplay.cc gdb-10.2/gdbserver/gdbreplay.cc --- gdb-9.1/gdbserver/gdbreplay.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/gdbreplay.cc 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,532 @@ +/* Replay a remote debug session logfile for GDB. + Copyright (C) 1996-2021 Free Software Foundation, Inc. + Written by Fred Fish (fnf@cygnus.com) from pieces of gdbserver. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "gdbsupport/common-defs.h" + +#undef PACKAGE +#undef PACKAGE_NAME +#undef PACKAGE_VERSION +#undef PACKAGE_STRING +#undef PACKAGE_TARNAME + +#include <config.h> +#include "gdbsupport/version.h" + +#if HAVE_SYS_FILE_H +#include <sys/file.h> +#endif +#if HAVE_SIGNAL_H +#include <signal.h> +#endif +#include <ctype.h> +#if HAVE_FCNTL_H +#include <fcntl.h> +#endif +#include <unistd.h> +#ifdef HAVE_NETINET_IN_H +#include <netinet/in.h> +#endif +#ifdef HAVE_SYS_SOCKET_H +#include <sys/socket.h> +#endif +#if HAVE_NETDB_H +#include <netdb.h> +#endif +#if HAVE_NETINET_TCP_H +#include <netinet/tcp.h> +#endif + +#if USE_WIN32API +#include <ws2tcpip.h> +#endif + +#include "gdbsupport/netstuff.h" +#include "gdbsupport/rsp-low.h" + +#ifndef HAVE_SOCKLEN_T +typedef int socklen_t; +#endif + +/* Sort of a hack... */ +#define EOL (EOF - 1) + +static int remote_desc; + +#ifdef __MINGW32CE__ + +#ifndef COUNTOF +#define COUNTOF(STR) (sizeof (STR) / sizeof ((STR)[0])) +#endif + +#define errno (GetLastError ()) + +char * +strerror (DWORD error) +{ + static char buf[1024]; + WCHAR *msgbuf; + DWORD lasterr = GetLastError (); + DWORD chars = FormatMessageW (FORMAT_MESSAGE_FROM_SYSTEM + | FORMAT_MESSAGE_ALLOCATE_BUFFER, + NULL, + error, + 0, /* Default language */ + (LPVOID)&msgbuf, + 0, + NULL); + if (chars != 0) + { + /* If there is an \r\n appended, zap it. */ + if (chars >= 2 + && msgbuf[chars - 2] == '\r' + && msgbuf[chars - 1] == '\n') + { + chars -= 2; + msgbuf[chars] = 0; + } + + if (chars > ((COUNTOF (buf)) - 1)) + { + chars = COUNTOF (buf) - 1; + msgbuf [chars] = 0; + } + + wcstombs (buf, msgbuf, chars + 1); + LocalFree (msgbuf); + } + else + sprintf (buf, "unknown win32 error (%ld)", error); + + SetLastError (lasterr); + return buf; +} + +#endif /* __MINGW32CE__ */ + +static void +sync_error (FILE *fp, const char *desc, int expect, int got) +{ + fprintf (stderr, "\n%s\n", desc); + fprintf (stderr, "At logfile offset %ld, expected '0x%x' got '0x%x'\n", + ftell (fp), expect, got); + fflush (stderr); + exit (1); +} + +static void +remote_error (const char *desc) +{ + fprintf (stderr, "\n%s\n", desc); + fflush (stderr); + exit (1); +} + +static void +remote_close (void) +{ +#ifdef USE_WIN32API + closesocket (remote_desc); +#else + close (remote_desc); +#endif +} + +/* Open a connection to a remote debugger. + NAME is the filename used for communication. */ + +static void +remote_open (char *name) +{ + char *last_colon = strrchr (name, ':'); + + if (last_colon == NULL) + { + fprintf (stderr, "%s: Must specify tcp connection as host:addr\n", name); + fflush (stderr); + exit (1); + } + +#ifdef USE_WIN32API + static int winsock_initialized; +#endif + int tmp; + int tmp_desc; + struct addrinfo hint; + struct addrinfo *ainfo; + + memset (&hint, 0, sizeof (hint)); + /* Assume no prefix will be passed, therefore we should use + AF_UNSPEC. */ + hint.ai_family = AF_UNSPEC; + hint.ai_socktype = SOCK_STREAM; + hint.ai_protocol = IPPROTO_TCP; + + parsed_connection_spec parsed = parse_connection_spec (name, &hint); + + if (parsed.port_str.empty ()) + error (_("Missing port on hostname '%s'"), name); + +#ifdef USE_WIN32API + if (!winsock_initialized) + { + WSADATA wsad; + + WSAStartup (MAKEWORD (1, 0), &wsad); + winsock_initialized = 1; + } +#endif + + int r = getaddrinfo (parsed.host_str.c_str (), parsed.port_str.c_str (), + &hint, &ainfo); + + if (r != 0) + { + fprintf (stderr, "%s:%s: cannot resolve name: %s\n", + parsed.host_str.c_str (), parsed.port_str.c_str (), + gai_strerror (r)); + fflush (stderr); + exit (1); + } + + scoped_free_addrinfo free_ainfo (ainfo); + + struct addrinfo *p; + + for (p = ainfo; p != NULL; p = p->ai_next) + { + tmp_desc = socket (p->ai_family, p->ai_socktype, p->ai_protocol); + + if (tmp_desc >= 0) + break; + } + + if (p == NULL) + perror_with_name ("Cannot open socket"); + + /* Allow rapid reuse of this port. */ + tmp = 1; + setsockopt (tmp_desc, SOL_SOCKET, SO_REUSEADDR, (char *) &tmp, + sizeof (tmp)); + + switch (p->ai_family) + { + case AF_INET: + ((struct sockaddr_in *) p->ai_addr)->sin_addr.s_addr = INADDR_ANY; + break; + case AF_INET6: + ((struct sockaddr_in6 *) p->ai_addr)->sin6_addr = in6addr_any; + break; + default: + fprintf (stderr, "Invalid 'ai_family' %d\n", p->ai_family); + exit (1); + } + + if (bind (tmp_desc, p->ai_addr, p->ai_addrlen) != 0) + perror_with_name ("Can't bind address"); + + if (p->ai_socktype == SOCK_DGRAM) + remote_desc = tmp_desc; + else + { + struct sockaddr_storage sockaddr; + socklen_t sockaddrsize = sizeof (sockaddr); + char orig_host[GDB_NI_MAX_ADDR], orig_port[GDB_NI_MAX_PORT]; + + if (listen (tmp_desc, 1) != 0) + perror_with_name ("Can't listen on socket"); + + remote_desc = accept (tmp_desc, (struct sockaddr *) &sockaddr, + &sockaddrsize); + + if (remote_desc == -1) + perror_with_name ("Accept failed"); + + /* Enable TCP keep alive process. */ + tmp = 1; + setsockopt (tmp_desc, SOL_SOCKET, SO_KEEPALIVE, + (char *) &tmp, sizeof (tmp)); + + /* Tell TCP not to delay small packets. This greatly speeds up + interactive response. */ + tmp = 1; + setsockopt (remote_desc, IPPROTO_TCP, TCP_NODELAY, + (char *) &tmp, sizeof (tmp)); + + if (getnameinfo ((struct sockaddr *) &sockaddr, sockaddrsize, + orig_host, sizeof (orig_host), + orig_port, sizeof (orig_port), + NI_NUMERICHOST | NI_NUMERICSERV) == 0) + { + fprintf (stderr, "Remote debugging from host %s, port %s\n", + orig_host, orig_port); + fflush (stderr); + } + +#ifndef USE_WIN32API + close (tmp_desc); /* No longer need this */ + + signal (SIGPIPE, SIG_IGN); /* If we don't do this, then + gdbreplay simply exits when + the remote side dies. */ +#else + closesocket (tmp_desc); /* No longer need this */ +#endif + } + +#if defined(F_SETFL) && defined (FASYNC) + fcntl (remote_desc, F_SETFL, FASYNC); +#endif + + fprintf (stderr, "Replay logfile using %s\n", name); + fflush (stderr); +} + +static int +logchar (FILE *fp) +{ + int ch; + int ch2; + + ch = fgetc (fp); + if (ch != '\r') + { + fputc (ch, stdout); + fflush (stdout); + } + switch (ch) + { + /* Treat \r\n as a newline. */ + case '\r': + ch = fgetc (fp); + if (ch == '\n') + ch = EOL; + else + { + ungetc (ch, fp); + ch = '\r'; + } + fputc (ch == EOL ? '\n' : '\r', stdout); + fflush (stdout); + break; + case '\n': + ch = EOL; + break; + case '\\': + ch = fgetc (fp); + fputc (ch, stdout); + fflush (stdout); + switch (ch) + { + case '\\': + break; + case 'b': + ch = '\b'; + break; + case 'f': + ch = '\f'; + break; + case 'n': + ch = '\n'; + break; + case 'r': + ch = '\r'; + break; + case 't': + ch = '\t'; + break; + case 'v': + ch = '\v'; + break; + case 'x': + ch2 = fgetc (fp); + fputc (ch2, stdout); + fflush (stdout); + ch = fromhex (ch2) << 4; + ch2 = fgetc (fp); + fputc (ch2, stdout); + fflush (stdout); + ch |= fromhex (ch2); + break; + default: + /* Treat any other char as just itself */ + break; + } + default: + break; + } + return (ch); +} + +static int +gdbchar (int desc) +{ + unsigned char fromgdb; + + if (read (desc, &fromgdb, 1) != 1) + return -1; + else + return fromgdb; +} + +/* Accept input from gdb and match with chars from fp (after skipping one + blank) up until a \n is read from fp (which is not matched) */ + +static void +expect (FILE *fp) +{ + int fromlog; + int fromgdb; + + if ((fromlog = logchar (fp)) != ' ') + { + sync_error (fp, "Sync error during gdb read of leading blank", ' ', + fromlog); + } + do + { + fromlog = logchar (fp); + if (fromlog == EOL) + break; + fromgdb = gdbchar (remote_desc); + if (fromgdb < 0) + remote_error ("Error during read from gdb"); + } + while (fromlog == fromgdb); + + if (fromlog != EOL) + { + sync_error (fp, "Sync error during read of gdb packet from log", fromlog, + fromgdb); + } +} + +/* Play data back to gdb from fp (after skipping leading blank) up until a + \n is read from fp (which is discarded and not sent to gdb). */ + +static void +play (FILE *fp) +{ + int fromlog; + char ch; + + if ((fromlog = logchar (fp)) != ' ') + { + sync_error (fp, "Sync error skipping blank during write to gdb", ' ', + fromlog); + } + while ((fromlog = logchar (fp)) != EOL) + { + ch = fromlog; + if (write (remote_desc, &ch, 1) != 1) + remote_error ("Error during write to gdb"); + } +} + +static void +gdbreplay_version (void) +{ + printf ("GNU gdbreplay %s%s\n" + "Copyright (C) 2021 Free Software Foundation, Inc.\n" + "gdbreplay is free software, covered by " + "the GNU General Public License.\n" + "This gdbreplay was configured as \"%s\"\n", + PKGVERSION, version, host_name); +} + +static void +gdbreplay_usage (FILE *stream) +{ + fprintf (stream, "Usage:\tgdbreplay LOGFILE HOST:PORT\n"); + if (REPORT_BUGS_TO[0] && stream == stdout) + fprintf (stream, "Report bugs to \"%s\".\n", REPORT_BUGS_TO); +} + +/* Main function. This is called by the real "main" function, + wrapped in a TRY_CATCH that handles any uncaught exceptions. */ + +static void ATTRIBUTE_NORETURN +captured_main (int argc, char *argv[]) +{ + FILE *fp; + int ch; + + if (argc >= 2 && strcmp (argv[1], "--version") == 0) + { + gdbreplay_version (); + exit (0); + } + if (argc >= 2 && strcmp (argv[1], "--help") == 0) + { + gdbreplay_usage (stdout); + exit (0); + } + + if (argc < 3) + { + gdbreplay_usage (stderr); + exit (1); + } + fp = fopen (argv[1], "r"); + if (fp == NULL) + { + perror_with_name (argv[1]); + } + remote_open (argv[2]); + while ((ch = logchar (fp)) != EOF) + { + switch (ch) + { + case 'w': + /* data sent from gdb to gdbreplay, accept and match it */ + expect (fp); + break; + case 'r': + /* data sent from gdbreplay to gdb, play it */ + play (fp); + break; + case 'c': + /* Command executed by gdb */ + while ((ch = logchar (fp)) != EOL); + break; + } + } + remote_close (); + exit (0); +} + +int +main (int argc, char *argv[]) +{ + try + { + captured_main (argc, argv); + } + catch (const gdb_exception &exception) + { + if (exception.reason == RETURN_ERROR) + { + fflush (stdout); + fprintf (stderr, "%s\n", exception.what ()); + } + + exit (1); + } + + gdb_assert_not_reached ("captured_main should never return"); +} diff -Nru gdb-9.1/gdbserver/gdbthread.h gdb-10.2/gdbserver/gdbthread.h --- gdb-9.1/gdbserver/gdbthread.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/gdbthread.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,227 @@ +/* Multi-thread control defs for remote server for GDB. + Copyright (C) 1993-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef GDBSERVER_GDBTHREAD_H +#define GDBSERVER_GDBTHREAD_H + +#include "gdbsupport/common-gdbthread.h" +#include "inferiors.h" + +#include <list> + +struct btrace_target_info; +struct regcache; + +struct thread_info +{ + /* The id of this thread. */ + ptid_t id; + + void *target_data; + struct regcache *regcache_data; + + /* The last resume GDB requested on this thread. */ + enum resume_kind last_resume_kind; + + /* The last wait status reported for this thread. */ + struct target_waitstatus last_status; + + /* True if LAST_STATUS hasn't been reported to GDB yet. */ + int status_pending_p; + + /* Given `while-stepping', a thread may be collecting data for more + than one tracepoint simultaneously. E.g.: + + ff0001 INSN1 <-- TP1, while-stepping 10 collect $regs + ff0002 INSN2 + ff0003 INSN3 <-- TP2, collect $regs + ff0004 INSN4 <-- TP3, while-stepping 10 collect $regs + ff0005 INSN5 + + Notice that when instruction INSN5 is reached, the while-stepping + actions of both TP1 and TP3 are still being collected, and that TP2 + had been collected meanwhile. The whole range of ff0001-ff0005 + should be single-stepped, due to at least TP1's while-stepping + action covering the whole range. + + On the other hand, the same tracepoint with a while-stepping action + may be hit by more than one thread simultaneously, hence we can't + keep the current step count in the tracepoint itself. + + This is the head of the list of the states of `while-stepping' + tracepoint actions this thread is now collecting; NULL if empty. + Each item in the list holds the current step of the while-stepping + action. */ + struct wstep_state *while_stepping; + + /* Branch trace target information for this thread. */ + struct btrace_target_info *btrace; +}; + +extern std::list<thread_info *> all_threads; + +void remove_thread (struct thread_info *thread); +struct thread_info *add_thread (ptid_t ptid, void *target_data); + +/* Return a pointer to the first thread, or NULL if there isn't one. */ + +struct thread_info *get_first_thread (void); + +struct thread_info *find_thread_ptid (ptid_t ptid); + +/* Find any thread of the PID process. Returns NULL if none is + found. */ +struct thread_info *find_any_thread_of_pid (int pid); + +/* Find the first thread for which FUNC returns true. Return NULL if no thread + satisfying FUNC is found. */ + +template <typename Func> +static thread_info * +find_thread (Func func) +{ + std::list<thread_info *>::iterator next, cur = all_threads.begin (); + + while (cur != all_threads.end ()) + { + next = cur; + next++; + + if (func (*cur)) + return *cur; + + cur = next; + } + + return NULL; +} + +/* Like the above, but only consider threads with pid PID. */ + +template <typename Func> +static thread_info * +find_thread (int pid, Func func) +{ + return find_thread ([&] (thread_info *thread) + { + return thread->id.pid () == pid && func (thread); + }); +} + +/* Find the first thread that matches FILTER for which FUNC returns true. + Return NULL if no thread satisfying these conditions is found. */ + +template <typename Func> +static thread_info * +find_thread (ptid_t filter, Func func) +{ + return find_thread ([&] (thread_info *thread) { + return thread->id.matches (filter) && func (thread); + }); +} + +/* Invoke FUNC for each thread. */ + +template <typename Func> +static void +for_each_thread (Func func) +{ + std::list<thread_info *>::iterator next, cur = all_threads.begin (); + + while (cur != all_threads.end ()) + { + next = cur; + next++; + func (*cur); + cur = next; + } +} + +/* Like the above, but only consider threads with pid PID. */ + +template <typename Func> +static void +for_each_thread (int pid, Func func) +{ + for_each_thread ([&] (thread_info *thread) + { + if (pid == thread->id.pid ()) + func (thread); + }); +} + +/* Find the a random thread for which FUNC (THREAD) returns true. If + no entry is found then return NULL. */ + +template <typename Func> +static thread_info * +find_thread_in_random (Func func) +{ + int count = 0; + int random_selector; + + /* First count how many interesting entries we have. */ + for_each_thread ([&] (thread_info *thread) { + if (func (thread)) + count++; + }); + + if (count == 0) + return NULL; + + /* Now randomly pick an entry out of those. */ + random_selector = (int) + ((count * (double) rand ()) / (RAND_MAX + 1.0)); + + thread_info *thread = find_thread ([&] (thread_info *thr_arg) { + return func (thr_arg) && (random_selector-- == 0); + }); + + gdb_assert (thread != NULL); + + return thread; +} + +/* Get current thread ID (Linux task ID). */ +#define current_ptid (current_thread->id) + +/* Get the ptid of THREAD. */ + +static inline ptid_t +ptid_of (const thread_info *thread) +{ + return thread->id; +} + +/* Get the pid of THREAD. */ + +static inline int +pid_of (const thread_info *thread) +{ + return thread->id.pid (); +} + +/* Get the lwp of THREAD. */ + +static inline long +lwpid_of (const thread_info *thread) +{ + return thread->id.lwp (); +} + +#endif /* GDBSERVER_GDBTHREAD_H */ diff -Nru gdb-9.1/gdbserver/.gitattributes gdb-10.2/gdbserver/.gitattributes --- gdb-9.1/gdbserver/.gitattributes 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/.gitattributes 2020-09-13 02:33:41.000000000 +0000 @@ -0,0 +1,6 @@ +# -*- conf -*- + +# Use cpp-style diffs for .h files. This is useful +# if you modify classes defined in a header file. + +*.h diff=cpp diff -Nru gdb-9.1/gdbserver/.gitignore gdb-10.2/gdbserver/.gitignore --- gdb-9.1/gdbserver/.gitignore 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/.gitignore 2020-09-13 02:33:41.000000000 +0000 @@ -0,0 +1,10 @@ +/Makefile + +gdbreplay +gdbserver +libinproctrace.so + +build-gnulib-gdbserver +build-libiberty-gdbserver + +*-generated.c diff -Nru gdb-9.1/gdbserver/hostio.cc gdb-10.2/gdbserver/hostio.cc --- gdb-9.1/gdbserver/hostio.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/hostio.cc 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,617 @@ +/* Host file transfer support for gdbserver. + Copyright (C) 2007-2021 Free Software Foundation, Inc. + + Contributed by CodeSourcery. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "server.h" +#include "gdb/fileio.h" +#include "hostio.h" + +#include <fcntl.h> +#include <limits.h> +#include <unistd.h> +#include <sys/types.h> +#include <sys/stat.h> +#include "gdbsupport/fileio.h" + +struct fd_list +{ + int fd; + struct fd_list *next; +}; + +static struct fd_list *open_fds; + +static int +safe_fromhex (char a, int *nibble) +{ + if (a >= '0' && a <= '9') + *nibble = a - '0'; + else if (a >= 'a' && a <= 'f') + *nibble = a - 'a' + 10; + else if (a >= 'A' && a <= 'F') + *nibble = a - 'A' + 10; + else + return -1; + + return 0; +} + +/* Filenames are hex encoded, so the maximum we can handle is half the + packet buffer size. Cap to PATH_MAX, if it is shorter. */ +#if !defined (PATH_MAX) || (PATH_MAX > (PBUFSIZ / 2 + 1)) +# define HOSTIO_PATH_MAX (PBUFSIZ / 2 + 1) +#else +# define HOSTIO_PATH_MAX PATH_MAX +#endif + +static int +require_filename (char **pp, char *filename) +{ + int count; + char *p; + + p = *pp; + count = 0; + + while (*p && *p != ',') + { + int nib1, nib2; + + /* Don't allow overflow. */ + if (count >= HOSTIO_PATH_MAX - 1) + return -1; + + if (safe_fromhex (p[0], &nib1) + || safe_fromhex (p[1], &nib2)) + return -1; + + filename[count++] = nib1 * 16 + nib2; + p += 2; + } + + filename[count] = '\0'; + *pp = p; + return 0; +} + +static int +require_int (char **pp, int *value) +{ + char *p; + int count, firstdigit; + + p = *pp; + *value = 0; + count = 0; + firstdigit = -1; + + while (*p && *p != ',') + { + int nib; + + if (safe_fromhex (p[0], &nib)) + return -1; + + if (firstdigit == -1) + firstdigit = nib; + + /* Don't allow overflow. */ + if (count >= 8 || (count == 7 && firstdigit >= 0x8)) + return -1; + + *value = *value * 16 + nib; + p++; + count++; + } + + *pp = p; + return 0; +} + +static int +require_data (char *p, int p_len, char **data, int *data_len) +{ + int input_index, output_index, escaped; + + *data = (char *) xmalloc (p_len); + + output_index = 0; + escaped = 0; + for (input_index = 0; input_index < p_len; input_index++) + { + char b = p[input_index]; + + if (escaped) + { + (*data)[output_index++] = b ^ 0x20; + escaped = 0; + } + else if (b == '}') + escaped = 1; + else + (*data)[output_index++] = b; + } + + if (escaped) + { + free (*data); + return -1; + } + + *data_len = output_index; + return 0; +} + +static int +require_comma (char **pp) +{ + if (**pp == ',') + { + (*pp)++; + return 0; + } + else + return -1; +} + +static int +require_end (char *p) +{ + if (*p == '\0') + return 0; + else + return -1; +} + +static int +require_valid_fd (int fd) +{ + struct fd_list *fd_ptr; + + for (fd_ptr = open_fds; fd_ptr != NULL; fd_ptr = fd_ptr->next) + if (fd_ptr->fd == fd) + return 0; + + return -1; +} + +/* Fill in own_buf with the last hostio error packet, however it + suitable for the target. */ +static void +hostio_error (char *own_buf) +{ + the_target->hostio_last_error (own_buf); +} + +static void +hostio_packet_error (char *own_buf) +{ + sprintf (own_buf, "F-1,%x", FILEIO_EINVAL); +} + +static void +hostio_reply (char *own_buf, int result) +{ + sprintf (own_buf, "F%x", result); +} + +static int +hostio_reply_with_data (char *own_buf, char *buffer, int len, + int *new_packet_len) +{ + int input_index, output_index, out_maxlen; + + sprintf (own_buf, "F%x;", len); + output_index = strlen (own_buf); + + out_maxlen = PBUFSIZ; + + for (input_index = 0; input_index < len; input_index++) + { + char b = buffer[input_index]; + + if (b == '$' || b == '#' || b == '}' || b == '*') + { + /* These must be escaped. */ + if (output_index + 2 > out_maxlen) + break; + own_buf[output_index++] = '}'; + own_buf[output_index++] = b ^ 0x20; + } + else + { + if (output_index + 1 > out_maxlen) + break; + own_buf[output_index++] = b; + } + } + + *new_packet_len = output_index; + return input_index; +} + +/* Process ID of inferior whose filesystem hostio functions + that take FILENAME arguments will use. Zero means to use + our own filesystem. */ + +static int hostio_fs_pid; + +/* See hostio.h. */ + +void +hostio_handle_new_gdb_connection (void) +{ + hostio_fs_pid = 0; +} + +/* Handle a "vFile:setfs:" packet. */ + +static void +handle_setfs (char *own_buf) +{ + char *p; + int pid; + + /* If the target doesn't have any of the in-filesystem-of methods + then there's no point in GDB sending "vFile:setfs:" packets. We + reply with an empty packet (i.e. we pretend we don't understand + "vFile:setfs:") and that should stop GDB sending any more. */ + if (!the_target->supports_multifs ()) + { + own_buf[0] = '\0'; + return; + } + + p = own_buf + strlen ("vFile:setfs:"); + + if (require_int (&p, &pid) + || pid < 0 + || require_end (p)) + { + hostio_packet_error (own_buf); + return; + } + + hostio_fs_pid = pid; + + hostio_reply (own_buf, 0); +} + +static void +handle_open (char *own_buf) +{ + char filename[HOSTIO_PATH_MAX]; + char *p; + int fileio_flags, fileio_mode, flags, fd; + mode_t mode; + struct fd_list *new_fd; + + p = own_buf + strlen ("vFile:open:"); + + if (require_filename (&p, filename) + || require_comma (&p) + || require_int (&p, &fileio_flags) + || require_comma (&p) + || require_int (&p, &fileio_mode) + || require_end (p) + || fileio_to_host_openflags (fileio_flags, &flags) + || fileio_to_host_mode (fileio_mode, &mode)) + { + hostio_packet_error (own_buf); + return; + } + + /* We do not need to convert MODE, since the fileio protocol + uses the standard values. */ + if (hostio_fs_pid != 0) + fd = the_target->multifs_open (hostio_fs_pid, filename, flags, mode); + else + fd = open (filename, flags, mode); + + if (fd == -1) + { + hostio_error (own_buf); + return; + } + + /* Record the new file descriptor. */ + new_fd = XNEW (struct fd_list); + new_fd->fd = fd; + new_fd->next = open_fds; + open_fds = new_fd; + + hostio_reply (own_buf, fd); +} + +static void +handle_pread (char *own_buf, int *new_packet_len) +{ + int fd, ret, len, offset, bytes_sent; + char *p, *data; + static int max_reply_size = -1; + + p = own_buf + strlen ("vFile:pread:"); + + if (require_int (&p, &fd) + || require_comma (&p) + || require_valid_fd (fd) + || require_int (&p, &len) + || require_comma (&p) + || require_int (&p, &offset) + || require_end (p)) + { + hostio_packet_error (own_buf); + return; + } + + /* Do not attempt to read more than the maximum number of bytes + hostio_reply_with_data can fit in a packet. We may still read + too much because of escaping, but this is handled below. */ + if (max_reply_size == -1) + { + sprintf (own_buf, "F%x;", PBUFSIZ); + max_reply_size = PBUFSIZ - strlen (own_buf); + } + if (len > max_reply_size) + len = max_reply_size; + + data = (char *) xmalloc (len); +#ifdef HAVE_PREAD + ret = pread (fd, data, len, offset); +#else + ret = -1; +#endif + /* If we have no pread or it failed for this file, use lseek/read. */ + if (ret == -1) + { + ret = lseek (fd, offset, SEEK_SET); + if (ret != -1) + ret = read (fd, data, len); + } + + if (ret == -1) + { + hostio_error (own_buf); + free (data); + return; + } + + bytes_sent = hostio_reply_with_data (own_buf, data, ret, new_packet_len); + + /* If we were using read, and the data did not all fit in the reply, + we would have to back up using lseek here. With pread it does + not matter. But we still have a problem; the return value in the + packet might be wrong, so we must fix it. This time it will + definitely fit. */ + if (bytes_sent < ret) + bytes_sent = hostio_reply_with_data (own_buf, data, bytes_sent, + new_packet_len); + + free (data); +} + +static void +handle_pwrite (char *own_buf, int packet_len) +{ + int fd, ret, len, offset; + char *p, *data; + + p = own_buf + strlen ("vFile:pwrite:"); + + if (require_int (&p, &fd) + || require_comma (&p) + || require_valid_fd (fd) + || require_int (&p, &offset) + || require_comma (&p) + || require_data (p, packet_len - (p - own_buf), &data, &len)) + { + hostio_packet_error (own_buf); + return; + } + +#ifdef HAVE_PWRITE + ret = pwrite (fd, data, len, offset); +#else + ret = -1; +#endif + /* If we have no pwrite or it failed for this file, use lseek/write. */ + if (ret == -1) + { + ret = lseek (fd, offset, SEEK_SET); + if (ret != -1) + ret = write (fd, data, len); + } + + if (ret == -1) + { + hostio_error (own_buf); + free (data); + return; + } + + hostio_reply (own_buf, ret); + free (data); +} + +static void +handle_fstat (char *own_buf, int *new_packet_len) +{ + int fd, bytes_sent; + char *p; + struct stat st; + struct fio_stat fst; + + p = own_buf + strlen ("vFile:fstat:"); + + if (require_int (&p, &fd) + || require_valid_fd (fd) + || require_end (p)) + { + hostio_packet_error (own_buf); + return; + } + + if (fstat (fd, &st) == -1) + { + hostio_error (own_buf); + return; + } + + host_to_fileio_stat (&st, &fst); + + bytes_sent = hostio_reply_with_data (own_buf, + (char *) &fst, sizeof (fst), + new_packet_len); + + /* If the response does not fit into a single packet, do not attempt + to return a partial response, but simply fail. */ + if (bytes_sent < sizeof (fst)) + write_enn (own_buf); +} + +static void +handle_close (char *own_buf) +{ + int fd, ret; + char *p; + struct fd_list **open_fd_p, *old_fd; + + p = own_buf + strlen ("vFile:close:"); + + if (require_int (&p, &fd) + || require_valid_fd (fd) + || require_end (p)) + { + hostio_packet_error (own_buf); + return; + } + + ret = close (fd); + + if (ret == -1) + { + hostio_error (own_buf); + return; + } + + open_fd_p = &open_fds; + /* We know that fd is in the list, thanks to require_valid_fd. */ + while ((*open_fd_p)->fd != fd) + open_fd_p = &(*open_fd_p)->next; + + old_fd = *open_fd_p; + *open_fd_p = (*open_fd_p)->next; + free (old_fd); + + hostio_reply (own_buf, ret); +} + +static void +handle_unlink (char *own_buf) +{ + char filename[HOSTIO_PATH_MAX]; + char *p; + int ret; + + p = own_buf + strlen ("vFile:unlink:"); + + if (require_filename (&p, filename) + || require_end (p)) + { + hostio_packet_error (own_buf); + return; + } + + if (hostio_fs_pid != 0) + ret = the_target->multifs_unlink (hostio_fs_pid, filename); + else + ret = unlink (filename); + + if (ret == -1) + { + hostio_error (own_buf); + return; + } + + hostio_reply (own_buf, ret); +} + +static void +handle_readlink (char *own_buf, int *new_packet_len) +{ + char filename[HOSTIO_PATH_MAX], linkname[HOSTIO_PATH_MAX]; + char *p; + int ret, bytes_sent; + + p = own_buf + strlen ("vFile:readlink:"); + + if (require_filename (&p, filename) + || require_end (p)) + { + hostio_packet_error (own_buf); + return; + } + + if (hostio_fs_pid != 0) + ret = the_target->multifs_readlink (hostio_fs_pid, filename, + linkname, + sizeof (linkname) - 1); + else + ret = readlink (filename, linkname, sizeof (linkname) - 1); + + if (ret == -1) + { + hostio_error (own_buf); + return; + } + + bytes_sent = hostio_reply_with_data (own_buf, linkname, ret, new_packet_len); + + /* If the response does not fit into a single packet, do not attempt + to return a partial response, but simply fail. */ + if (bytes_sent < ret) + sprintf (own_buf, "F-1,%x", FILEIO_ENAMETOOLONG); +} + +/* Handle all the 'F' file transfer packets. */ + +int +handle_vFile (char *own_buf, int packet_len, int *new_packet_len) +{ + if (startswith (own_buf, "vFile:open:")) + handle_open (own_buf); + else if (startswith (own_buf, "vFile:pread:")) + handle_pread (own_buf, new_packet_len); + else if (startswith (own_buf, "vFile:pwrite:")) + handle_pwrite (own_buf, packet_len); + else if (startswith (own_buf, "vFile:fstat:")) + handle_fstat (own_buf, new_packet_len); + else if (startswith (own_buf, "vFile:close:")) + handle_close (own_buf); + else if (startswith (own_buf, "vFile:unlink:")) + handle_unlink (own_buf); + else if (startswith (own_buf, "vFile:readlink:")) + handle_readlink (own_buf, new_packet_len); + else if (startswith (own_buf, "vFile:setfs:")) + handle_setfs (own_buf); + else + return 0; + + return 1; +} diff -Nru gdb-9.1/gdbserver/hostio-errno.cc gdb-10.2/gdbserver/hostio-errno.cc --- gdb-9.1/gdbserver/hostio-errno.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/hostio-errno.cc 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,36 @@ +/* Host file transfer support for gdbserver. + Copyright (C) 2007-2021 Free Software Foundation, Inc. + + Contributed by CodeSourcery. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +/* This file implements the hostio_last_error target callback + on top of errno. */ + +#include "server.h" + +#include "hostio.h" + +#include "gdbsupport/fileio.h" + +void +hostio_last_error_from_errno (char *buf) +{ + int error = errno; + int fileio_error = host_to_fileio_error (error); + sprintf (buf, "F-1,%x", fileio_error); +} diff -Nru gdb-9.1/gdbserver/hostio.h gdb-10.2/gdbserver/hostio.h --- gdb-9.1/gdbserver/hostio.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/hostio.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,31 @@ +/* Host file transfer support for gdbserver. + Copyright (C) 1993-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef GDBSERVER_HOSTIO_H +#define GDBSERVER_HOSTIO_H + +/* Per-connection setup. */ +extern void hostio_handle_new_gdb_connection (void); + +/* Functions from hostio.c. */ +extern int handle_vFile (char *, int, int *); + +/* Functions from hostio-errno.c. */ +extern void hostio_last_error_from_errno (char *own_buf); + +#endif /* GDBSERVER_HOSTIO_H */ diff -Nru gdb-9.1/gdbserver/i387-fp.cc gdb-10.2/gdbserver/i387-fp.cc --- gdb-9.1/gdbserver/i387-fp.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/i387-fp.cc 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,954 @@ +/* i387-specific utility functions, for the remote server for GDB. + Copyright (C) 2000-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "server.h" +#include "i387-fp.h" +#include "gdbsupport/x86-xstate.h" + +static const int num_mpx_bnd_registers = 4; +static const int num_mpx_cfg_registers = 2; +static const int num_avx512_k_registers = 8; +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; +static const int num_pkeys_registers = 1; + +/* Note: These functions preserve the reserved bits in control registers. + However, gdbserver promptly throws away that information. */ + +/* These structs should have the proper sizes and alignment on both + i386 and x86-64 machines. */ + +struct i387_fsave { + /* All these are only sixteen bits, plus padding, except for fop (which + is only eleven bits), and fooff / fioff (which are 32 bits each). */ + unsigned short fctrl; + unsigned short pad1; + unsigned short fstat; + unsigned short pad2; + unsigned short ftag; + unsigned short pad3; + unsigned int fioff; + unsigned short fiseg; + unsigned short fop; + unsigned int fooff; + unsigned short foseg; + unsigned short pad4; + + /* Space for eight 80-bit FP values. */ + unsigned char st_space[80]; +}; + +struct i387_fxsave { + /* All these are only sixteen bits, plus padding, except for fop (which + is only eleven bits), and fooff / fioff (which are 32 bits each). */ + unsigned short fctrl; + unsigned short fstat; + unsigned short ftag; + unsigned short fop; + unsigned int fioff; + unsigned short fiseg; + unsigned short pad1; + unsigned int fooff; + unsigned short foseg; + unsigned short pad12; + + unsigned int mxcsr; + unsigned int pad3; + + /* Space for eight 80-bit FP values in 128-bit spaces. */ + unsigned char st_space[128]; + + /* Space for eight 128-bit XMM values, or 16 on x86-64. */ + unsigned char xmm_space[256]; +}; + +struct i387_xsave { + /* All these are only sixteen bits, plus padding, except for fop (which + is only eleven bits), and fooff / fioff (which are 32 bits each). */ + unsigned short fctrl; + unsigned short fstat; + unsigned short ftag; + unsigned short fop; + unsigned int fioff; + unsigned short fiseg; + unsigned short pad1; + unsigned int fooff; + unsigned short foseg; + unsigned short pad12; + + unsigned int mxcsr; + unsigned int mxcsr_mask; + + /* Space for eight 80-bit FP values in 128-bit spaces. */ + unsigned char st_space[128]; + + /* Space for eight 128-bit XMM values, or 16 on x86-64. */ + unsigned char xmm_space[256]; + + unsigned char reserved1[48]; + + /* The extended control register 0 (the XFEATURE_ENABLED_MASK + register). */ + unsigned long long xcr0; + + unsigned char reserved2[40]; + + /* The XSTATE_BV bit vector. */ + unsigned long long xstate_bv; + + unsigned char reserved3[56]; + + /* Space for eight upper 128-bit YMM values, or 16 on x86-64. */ + unsigned char ymmh_space[256]; + + unsigned char reserved4[128]; + + /* Space for 4 bound registers values of 128 bits. */ + unsigned char mpx_bnd_space[64]; + + /* Space for 2 MPX configuration registers of 64 bits + plus reserved space. */ + unsigned char mpx_cfg_space[16]; + + unsigned char reserved5[48]; + + /* Space for 8 OpMask register values of 64 bits. */ + unsigned char k_space[64]; + + /* Space for 16 256-bit zmm0-15. */ + unsigned char zmmh_low_space[512]; + + /* Space for 16 512-bit zmm16-31 values. */ + unsigned char zmmh_high_space[1024]; + + /* Space for 1 32-bit PKRU register. The HW XSTATE size for this feature is + actually 64 bits, but WRPKRU/RDPKRU instructions ignore upper 32 bits. */ + unsigned char pkru_space[8]; +}; + +void +i387_cache_to_fsave (struct regcache *regcache, void *buf) +{ + struct i387_fsave *fp = (struct i387_fsave *) buf; + int i; + int st0_regnum = find_regno (regcache->tdesc, "st0"); + unsigned long val2; + + for (i = 0; i < 8; i++) + collect_register (regcache, i + st0_regnum, + ((char *) &fp->st_space[0]) + i * 10); + + fp->fioff = regcache_raw_get_unsigned_by_name (regcache, "fioff"); + fp->fooff = regcache_raw_get_unsigned_by_name (regcache, "fooff"); + + /* This one's 11 bits... */ + val2 = regcache_raw_get_unsigned_by_name (regcache, "fop"); + fp->fop = (val2 & 0x7FF) | (fp->fop & 0xF800); + + /* Some registers are 16-bit. */ + fp->fctrl = regcache_raw_get_unsigned_by_name (regcache, "fctrl"); + fp->fstat = regcache_raw_get_unsigned_by_name (regcache, "fstat"); + fp->ftag = regcache_raw_get_unsigned_by_name (regcache, "ftag"); + fp->fiseg = regcache_raw_get_unsigned_by_name (regcache, "fiseg"); + fp->foseg = regcache_raw_get_unsigned_by_name (regcache, "foseg"); +} + +void +i387_fsave_to_cache (struct regcache *regcache, const void *buf) +{ + struct i387_fsave *fp = (struct i387_fsave *) buf; + int i; + int st0_regnum = find_regno (regcache->tdesc, "st0"); + unsigned long val; + + for (i = 0; i < 8; i++) + supply_register (regcache, i + st0_regnum, + ((char *) &fp->st_space[0]) + i * 10); + + supply_register_by_name (regcache, "fioff", &fp->fioff); + supply_register_by_name (regcache, "fooff", &fp->fooff); + + /* Some registers are 16-bit. */ + val = fp->fctrl & 0xFFFF; + supply_register_by_name (regcache, "fctrl", &val); + + val = fp->fstat & 0xFFFF; + supply_register_by_name (regcache, "fstat", &val); + + val = fp->ftag & 0xFFFF; + supply_register_by_name (regcache, "ftag", &val); + + val = fp->fiseg & 0xFFFF; + supply_register_by_name (regcache, "fiseg", &val); + + val = fp->foseg & 0xFFFF; + supply_register_by_name (regcache, "foseg", &val); + + /* fop has only 11 valid bits. */ + val = (fp->fop) & 0x7FF; + supply_register_by_name (regcache, "fop", &val); +} + +void +i387_cache_to_fxsave (struct regcache *regcache, void *buf) +{ + struct i387_fxsave *fp = (struct i387_fxsave *) buf; + int i; + int st0_regnum = find_regno (regcache->tdesc, "st0"); + int xmm0_regnum = find_regno (regcache->tdesc, "xmm0"); + unsigned long val, val2; + /* Amd64 has 16 xmm regs; I386 has 8 xmm regs. */ + int num_xmm_registers = register_size (regcache->tdesc, 0) == 8 ? 16 : 8; + + for (i = 0; i < 8; i++) + collect_register (regcache, i + st0_regnum, + ((char *) &fp->st_space[0]) + i * 16); + for (i = 0; i < num_xmm_registers; i++) + collect_register (regcache, i + xmm0_regnum, + ((char *) &fp->xmm_space[0]) + i * 16); + + fp->fioff = regcache_raw_get_unsigned_by_name (regcache, "fioff"); + fp->fooff = regcache_raw_get_unsigned_by_name (regcache, "fooff"); + fp->mxcsr = regcache_raw_get_unsigned_by_name (regcache, "mxcsr"); + + /* This one's 11 bits... */ + val2 = regcache_raw_get_unsigned_by_name (regcache, "fop"); + fp->fop = (val2 & 0x7FF) | (fp->fop & 0xF800); + + /* Some registers are 16-bit. */ + fp->fctrl = regcache_raw_get_unsigned_by_name (regcache, "fctrl"); + fp->fstat = regcache_raw_get_unsigned_by_name (regcache, "fstat"); + + /* Convert to the simplifed tag form stored in fxsave data. */ + val = regcache_raw_get_unsigned_by_name (regcache, "ftag"); + val2 = 0; + for (i = 7; i >= 0; i--) + { + int tag = (val >> (i * 2)) & 3; + + if (tag != 3) + val2 |= (1 << i); + } + fp->ftag = val2; + + fp->fiseg = regcache_raw_get_unsigned_by_name (regcache, "fiseg"); + fp->foseg = regcache_raw_get_unsigned_by_name (regcache, "foseg"); +} + +void +i387_cache_to_xsave (struct regcache *regcache, void *buf) +{ + struct i387_xsave *fp = (struct i387_xsave *) buf; + int i; + unsigned long val, val2; + unsigned long long xstate_bv = 0; + unsigned long long clear_bv = 0; + char raw[64]; + char *p; + /* Amd64 has 16 xmm regs; I386 has 8 xmm regs. */ + int num_xmm_registers = register_size (regcache->tdesc, 0) == 8 ? 16 : 8; + + /* The supported bits in `xstat_bv' are 8 bytes. Clear part in + vector registers if its bit in xstat_bv is zero. */ + clear_bv = (~fp->xstate_bv) & x86_xcr0; + + /* Clear part in x87 and vector registers if its bit in xstat_bv is + zero. */ + if (clear_bv) + { + if ((clear_bv & X86_XSTATE_X87)) + { + for (i = 0; i < 8; i++) + memset (((char *) &fp->st_space[0]) + i * 16, 0, 10); + + fp->fioff = 0; + fp->fooff = 0; + fp->fctrl = I387_FCTRL_INIT_VAL; + fp->fstat = 0; + fp->ftag = 0; + fp->fiseg = 0; + fp->foseg = 0; + fp->fop = 0; + } + + if ((clear_bv & X86_XSTATE_SSE)) + for (i = 0; i < num_xmm_registers; i++) + memset (((char *) &fp->xmm_space[0]) + i * 16, 0, 16); + + if ((clear_bv & X86_XSTATE_AVX)) + for (i = 0; i < num_xmm_registers; i++) + memset (((char *) &fp->ymmh_space[0]) + i * 16, 0, 16); + + if ((clear_bv & X86_XSTATE_SSE) && (clear_bv & X86_XSTATE_AVX)) + memset (((char *) &fp->mxcsr), 0, 4); + + if ((clear_bv & X86_XSTATE_BNDREGS)) + for (i = 0; i < num_mpx_bnd_registers; i++) + memset (((char *) &fp->mpx_bnd_space[0]) + i * 16, 0, 16); + + if ((clear_bv & X86_XSTATE_BNDCFG)) + for (i = 0; i < num_mpx_cfg_registers; i++) + memset (((char *) &fp->mpx_cfg_space[0]) + i * 8, 0, 8); + + if ((clear_bv & X86_XSTATE_K)) + for (i = 0; i < num_avx512_k_registers; i++) + memset (((char *) &fp->k_space[0]) + i * 8, 0, 8); + + if ((clear_bv & X86_XSTATE_ZMM_H)) + for (i = 0; i < num_avx512_zmmh_low_registers; i++) + memset (((char *) &fp->zmmh_low_space[0]) + i * 32, 0, 32); + + if ((clear_bv & X86_XSTATE_ZMM)) + { + for (i = 0; i < num_avx512_zmmh_high_registers; i++) + memset (((char *) &fp->zmmh_low_space[0]) + 32 + i * 64, 0, 32); + for (i = 0; i < num_avx512_xmm_registers; i++) + memset (((char *) &fp->zmmh_high_space[0]) + i * 64, 0, 16); + for (i = 0; i < num_avx512_ymmh_registers; i++) + memset (((char *) &fp->zmmh_high_space[0]) + 16 + i * 64, 0, 16); + } + + if ((clear_bv & X86_XSTATE_PKRU)) + for (i = 0; i < num_pkeys_registers; i++) + memset (((char *) &fp->pkru_space[0]) + i * 4, 0, 4); + } + + /* Check if any x87 registers are changed. */ + if ((x86_xcr0 & X86_XSTATE_X87)) + { + int st0_regnum = find_regno (regcache->tdesc, "st0"); + + for (i = 0; i < 8; i++) + { + collect_register (regcache, i + st0_regnum, raw); + p = ((char *) &fp->st_space[0]) + i * 16; + if (memcmp (raw, p, 10)) + { + xstate_bv |= X86_XSTATE_X87; + memcpy (p, raw, 10); + } + } + } + + /* Check if any SSE registers are changed. */ + if ((x86_xcr0 & X86_XSTATE_SSE)) + { + int xmm0_regnum = find_regno (regcache->tdesc, "xmm0"); + + for (i = 0; i < num_xmm_registers; i++) + { + collect_register (regcache, i + xmm0_regnum, raw); + p = ((char *) &fp->xmm_space[0]) + i * 16; + if (memcmp (raw, p, 16)) + { + xstate_bv |= X86_XSTATE_SSE; + memcpy (p, raw, 16); + } + } + } + + /* Check if any AVX registers are changed. */ + if ((x86_xcr0 & X86_XSTATE_AVX)) + { + int ymm0h_regnum = find_regno (regcache->tdesc, "ymm0h"); + + for (i = 0; i < num_xmm_registers; i++) + { + collect_register (regcache, i + ymm0h_regnum, raw); + p = ((char *) &fp->ymmh_space[0]) + i * 16; + if (memcmp (raw, p, 16)) + { + xstate_bv |= X86_XSTATE_AVX; + memcpy (p, raw, 16); + } + } + } + + /* Check if any bound register has changed. */ + if ((x86_xcr0 & X86_XSTATE_BNDREGS)) + { + int bnd0r_regnum = find_regno (regcache->tdesc, "bnd0raw"); + + for (i = 0; i < num_mpx_bnd_registers; i++) + { + collect_register (regcache, i + bnd0r_regnum, raw); + p = ((char *) &fp->mpx_bnd_space[0]) + i * 16; + if (memcmp (raw, p, 16)) + { + xstate_bv |= X86_XSTATE_BNDREGS; + memcpy (p, raw, 16); + } + } + } + + /* Check if any status register has changed. */ + if ((x86_xcr0 & X86_XSTATE_BNDCFG)) + { + int bndcfg_regnum = find_regno (regcache->tdesc, "bndcfgu"); + + for (i = 0; i < num_mpx_cfg_registers; i++) + { + collect_register (regcache, i + bndcfg_regnum, raw); + p = ((char *) &fp->mpx_cfg_space[0]) + i * 8; + if (memcmp (raw, p, 8)) + { + xstate_bv |= X86_XSTATE_BNDCFG; + memcpy (p, raw, 8); + } + } + } + + /* Check if any K registers are changed. */ + if ((x86_xcr0 & X86_XSTATE_K)) + { + int k0_regnum = find_regno (regcache->tdesc, "k0"); + + for (i = 0; i < num_avx512_k_registers; i++) + { + collect_register (regcache, i + k0_regnum, raw); + p = ((char *) &fp->k_space[0]) + i * 8; + if (memcmp (raw, p, 8) != 0) + { + xstate_bv |= X86_XSTATE_K; + memcpy (p, raw, 8); + } + } + } + + /* Check if any of ZMM0H-ZMM15H registers are changed. */ + if ((x86_xcr0 & X86_XSTATE_ZMM_H)) + { + int zmm0h_regnum = find_regno (regcache->tdesc, "zmm0h"); + + for (i = 0; i < num_avx512_zmmh_low_registers; i++) + { + collect_register (regcache, i + zmm0h_regnum, raw); + p = ((char *) &fp->zmmh_low_space[0]) + i * 32; + if (memcmp (raw, p, 32) != 0) + { + xstate_bv |= X86_XSTATE_ZMM_H; + memcpy (p, raw, 32); + } + } + } + + /* Check if any of ZMM16H-ZMM31H registers are changed. */ + if ((x86_xcr0 & X86_XSTATE_ZMM)) + { + int zmm16h_regnum = find_regno (regcache->tdesc, "zmm16h"); + + for (i = 0; i < num_avx512_zmmh_high_registers; i++) + { + collect_register (regcache, i + zmm16h_regnum, raw); + p = ((char *) &fp->zmmh_high_space[0]) + 32 + i * 64; + if (memcmp (raw, p, 32) != 0) + { + xstate_bv |= X86_XSTATE_ZMM; + memcpy (p, raw, 32); + } + } + } + + /* Check if any XMM_AVX512 registers are changed. */ + if ((x86_xcr0 & X86_XSTATE_ZMM)) + { + int xmm_avx512_regnum = find_regno (regcache->tdesc, "xmm16"); + + for (i = 0; i < num_avx512_xmm_registers; i++) + { + collect_register (regcache, i + xmm_avx512_regnum, raw); + p = ((char *) &fp->zmmh_high_space[0]) + i * 64; + if (memcmp (raw, p, 16) != 0) + { + xstate_bv |= X86_XSTATE_ZMM; + memcpy (p, raw, 16); + } + } + } + + /* Check if any YMMH_AVX512 registers are changed. */ + if ((x86_xcr0 & X86_XSTATE_ZMM)) + { + int ymmh_avx512_regnum = find_regno (regcache->tdesc, "ymm16h"); + + for (i = 0; i < num_avx512_ymmh_registers; i++) + { + collect_register (regcache, i + ymmh_avx512_regnum, raw); + p = ((char *) &fp->zmmh_high_space[0]) + 16 + i * 64; + if (memcmp (raw, p, 16) != 0) + { + xstate_bv |= X86_XSTATE_ZMM; + memcpy (p, raw, 16); + } + } + } + + /* Check if any PKEYS registers are changed. */ + if ((x86_xcr0 & X86_XSTATE_PKRU)) + { + int pkru_regnum = find_regno (regcache->tdesc, "pkru"); + + for (i = 0; i < num_pkeys_registers; i++) + { + collect_register (regcache, i + pkru_regnum, raw); + p = ((char *) &fp->pkru_space[0]) + i * 4; + if (memcmp (raw, p, 4) != 0) + { + xstate_bv |= X86_XSTATE_PKRU; + memcpy (p, raw, 4); + } + } + } + + if ((x86_xcr0 & X86_XSTATE_SSE) || (x86_xcr0 & X86_XSTATE_AVX)) + { + collect_register_by_name (regcache, "mxcsr", raw); + if (memcmp (raw, &fp->mxcsr, 4) != 0) + { + if (((fp->xstate_bv | xstate_bv) + & (X86_XSTATE_SSE | X86_XSTATE_AVX)) == 0) + xstate_bv |= X86_XSTATE_SSE; + memcpy (&fp->mxcsr, raw, 4); + } + } + + if (x86_xcr0 & X86_XSTATE_X87) + { + collect_register_by_name (regcache, "fioff", raw); + if (memcmp (raw, &fp->fioff, 4) != 0) + { + xstate_bv |= X86_XSTATE_X87; + memcpy (&fp->fioff, raw, 4); + } + + collect_register_by_name (regcache, "fooff", raw); + if (memcmp (raw, &fp->fooff, 4) != 0) + { + xstate_bv |= X86_XSTATE_X87; + memcpy (&fp->fooff, raw, 4); + } + + /* This one's 11 bits... */ + val2 = regcache_raw_get_unsigned_by_name (regcache, "fop"); + val2 = (val2 & 0x7FF) | (fp->fop & 0xF800); + if (fp->fop != val2) + { + xstate_bv |= X86_XSTATE_X87; + fp->fop = val2; + } + + /* Some registers are 16-bit. */ + val = regcache_raw_get_unsigned_by_name (regcache, "fctrl"); + if (fp->fctrl != val) + { + xstate_bv |= X86_XSTATE_X87; + fp->fctrl = val; + } + + val = regcache_raw_get_unsigned_by_name (regcache, "fstat"); + if (fp->fstat != val) + { + xstate_bv |= X86_XSTATE_X87; + fp->fstat = val; + } + + /* Convert to the simplifed tag form stored in fxsave data. */ + val = regcache_raw_get_unsigned_by_name (regcache, "ftag"); + val2 = 0; + for (i = 7; i >= 0; i--) + { + int tag = (val >> (i * 2)) & 3; + + if (tag != 3) + val2 |= (1 << i); + } + if (fp->ftag != val2) + { + xstate_bv |= X86_XSTATE_X87; + fp->ftag = val2; + } + + val = regcache_raw_get_unsigned_by_name (regcache, "fiseg"); + if (fp->fiseg != val) + { + xstate_bv |= X86_XSTATE_X87; + fp->fiseg = val; + } + + val = regcache_raw_get_unsigned_by_name (regcache, "foseg"); + if (fp->foseg != val) + { + xstate_bv |= X86_XSTATE_X87; + fp->foseg = val; + } + } + + /* Update the corresponding bits in xstate_bv if any SSE/AVX + registers are changed. */ + fp->xstate_bv |= xstate_bv; +} + +static int +i387_ftag (struct i387_fxsave *fp, int regno) +{ + unsigned char *raw = &fp->st_space[regno * 16]; + unsigned int exponent; + unsigned long fraction[2]; + int integer; + + integer = raw[7] & 0x80; + exponent = (((raw[9] & 0x7f) << 8) | raw[8]); + fraction[0] = ((raw[3] << 24) | (raw[2] << 16) | (raw[1] << 8) | raw[0]); + fraction[1] = (((raw[7] & 0x7f) << 24) | (raw[6] << 16) + | (raw[5] << 8) | raw[4]); + + if (exponent == 0x7fff) + { + /* Special. */ + return (2); + } + else if (exponent == 0x0000) + { + if (fraction[0] == 0x0000 && fraction[1] == 0x0000 && !integer) + { + /* Zero. */ + return (1); + } + else + { + /* Special. */ + return (2); + } + } + else + { + if (integer) + { + /* Valid. */ + return (0); + } + else + { + /* Special. */ + return (2); + } + } +} + +void +i387_fxsave_to_cache (struct regcache *regcache, const void *buf) +{ + struct i387_fxsave *fp = (struct i387_fxsave *) buf; + int i, top; + int st0_regnum = find_regno (regcache->tdesc, "st0"); + int xmm0_regnum = find_regno (regcache->tdesc, "xmm0"); + unsigned long val; + /* Amd64 has 16 xmm regs; I386 has 8 xmm regs. */ + int num_xmm_registers = register_size (regcache->tdesc, 0) == 8 ? 16 : 8; + + for (i = 0; i < 8; i++) + supply_register (regcache, i + st0_regnum, + ((char *) &fp->st_space[0]) + i * 16); + for (i = 0; i < num_xmm_registers; i++) + supply_register (regcache, i + xmm0_regnum, + ((char *) &fp->xmm_space[0]) + i * 16); + + supply_register_by_name (regcache, "fioff", &fp->fioff); + supply_register_by_name (regcache, "fooff", &fp->fooff); + supply_register_by_name (regcache, "mxcsr", &fp->mxcsr); + + /* Some registers are 16-bit. */ + val = fp->fctrl & 0xFFFF; + supply_register_by_name (regcache, "fctrl", &val); + + val = fp->fstat & 0xFFFF; + supply_register_by_name (regcache, "fstat", &val); + + /* Generate the form of ftag data that GDB expects. */ + top = (fp->fstat >> 11) & 0x7; + val = 0; + for (i = 7; i >= 0; i--) + { + int tag; + if (fp->ftag & (1 << i)) + tag = i387_ftag (fp, (i + 8 - top) % 8); + else + tag = 3; + val |= tag << (2 * i); + } + supply_register_by_name (regcache, "ftag", &val); + + val = fp->fiseg & 0xFFFF; + supply_register_by_name (regcache, "fiseg", &val); + + val = fp->foseg & 0xFFFF; + supply_register_by_name (regcache, "foseg", &val); + + val = (fp->fop) & 0x7FF; + supply_register_by_name (regcache, "fop", &val); +} + +void +i387_xsave_to_cache (struct regcache *regcache, const void *buf) +{ + struct i387_xsave *fp = (struct i387_xsave *) buf; + struct i387_fxsave *fxp = (struct i387_fxsave *) buf; + int i, top; + unsigned long val; + unsigned long long clear_bv; + gdb_byte *p; + /* Amd64 has 16 xmm regs; I386 has 8 xmm regs. */ + int num_xmm_registers = register_size (regcache->tdesc, 0) == 8 ? 16 : 8; + + /* The supported bits in `xstat_bv' are 8 bytes. Clear part in + vector registers if its bit in xstat_bv is zero. */ + clear_bv = (~fp->xstate_bv) & x86_xcr0; + + /* Check if any x87 registers are changed. */ + if ((x86_xcr0 & X86_XSTATE_X87) != 0) + { + int st0_regnum = find_regno (regcache->tdesc, "st0"); + + if ((clear_bv & X86_XSTATE_X87) != 0) + { + for (i = 0; i < 8; i++) + supply_register_zeroed (regcache, i + st0_regnum); + } + else + { + p = (gdb_byte *) &fp->st_space[0]; + for (i = 0; i < 8; i++) + supply_register (regcache, i + st0_regnum, p + i * 16); + } + } + + if ((x86_xcr0 & X86_XSTATE_SSE) != 0) + { + int xmm0_regnum = find_regno (regcache->tdesc, "xmm0"); + + if ((clear_bv & X86_XSTATE_SSE)) + { + for (i = 0; i < num_xmm_registers; i++) + supply_register_zeroed (regcache, i + xmm0_regnum); + } + else + { + p = (gdb_byte *) &fp->xmm_space[0]; + for (i = 0; i < num_xmm_registers; i++) + supply_register (regcache, i + xmm0_regnum, p + i * 16); + } + } + + if ((x86_xcr0 & X86_XSTATE_AVX) != 0) + { + int ymm0h_regnum = find_regno (regcache->tdesc, "ymm0h"); + + if ((clear_bv & X86_XSTATE_AVX) != 0) + { + for (i = 0; i < num_xmm_registers; i++) + supply_register_zeroed (regcache, i + ymm0h_regnum); + } + else + { + p = (gdb_byte *) &fp->ymmh_space[0]; + for (i = 0; i < num_xmm_registers; i++) + supply_register (regcache, i + ymm0h_regnum, p + i * 16); + } + } + + if ((x86_xcr0 & X86_XSTATE_BNDREGS)) + { + int bnd0r_regnum = find_regno (regcache->tdesc, "bnd0raw"); + + + if ((clear_bv & X86_XSTATE_BNDREGS) != 0) + { + for (i = 0; i < num_mpx_bnd_registers; i++) + supply_register_zeroed (regcache, i + bnd0r_regnum); + } + else + { + p = (gdb_byte *) &fp->mpx_bnd_space[0]; + for (i = 0; i < num_mpx_bnd_registers; i++) + supply_register (regcache, i + bnd0r_regnum, p + i * 16); + } + + } + + if ((x86_xcr0 & X86_XSTATE_BNDCFG)) + { + int bndcfg_regnum = find_regno (regcache->tdesc, "bndcfgu"); + + if ((clear_bv & X86_XSTATE_BNDCFG) != 0) + { + for (i = 0; i < num_mpx_cfg_registers; i++) + supply_register_zeroed (regcache, i + bndcfg_regnum); + } + else + { + p = (gdb_byte *) &fp->mpx_cfg_space[0]; + for (i = 0; i < num_mpx_cfg_registers; i++) + supply_register (regcache, i + bndcfg_regnum, p + i * 8); + } + } + + if ((x86_xcr0 & X86_XSTATE_K) != 0) + { + int k0_regnum = find_regno (regcache->tdesc, "k0"); + + if ((clear_bv & X86_XSTATE_K) != 0) + { + for (i = 0; i < num_avx512_k_registers; i++) + supply_register_zeroed (regcache, i + k0_regnum); + } + else + { + p = (gdb_byte *) &fp->k_space[0]; + for (i = 0; i < num_avx512_k_registers; i++) + supply_register (regcache, i + k0_regnum, p + i * 8); + } + } + + if ((x86_xcr0 & X86_XSTATE_ZMM_H) != 0) + { + int zmm0h_regnum = find_regno (regcache->tdesc, "zmm0h"); + + if ((clear_bv & X86_XSTATE_ZMM_H) != 0) + { + for (i = 0; i < num_avx512_zmmh_low_registers; i++) + supply_register_zeroed (regcache, i + zmm0h_regnum); + } + else + { + p = (gdb_byte *) &fp->zmmh_low_space[0]; + for (i = 0; i < num_avx512_zmmh_low_registers; i++) + supply_register (regcache, i + zmm0h_regnum, p + i * 32); + } + } + + if ((x86_xcr0 & X86_XSTATE_ZMM) != 0) + { + int zmm16h_regnum = find_regno (regcache->tdesc, "zmm16h"); + int ymm16h_regnum = find_regno (regcache->tdesc, "ymm16h"); + int xmm16_regnum = find_regno (regcache->tdesc, "xmm16"); + + if ((clear_bv & X86_XSTATE_ZMM) != 0) + { + for (i = 0; i < num_avx512_zmmh_high_registers; i++) + supply_register_zeroed (regcache, i + zmm16h_regnum); + for (i = 0; i < num_avx512_ymmh_registers; i++) + supply_register_zeroed (regcache, i + ymm16h_regnum); + for (i = 0; i < num_avx512_xmm_registers; i++) + supply_register_zeroed (regcache, i + xmm16_regnum); + } + else + { + p = (gdb_byte *) &fp->zmmh_high_space[0]; + for (i = 0; i < num_avx512_zmmh_high_registers; i++) + supply_register (regcache, i + zmm16h_regnum, p + 32 + i * 64); + for (i = 0; i < num_avx512_ymmh_registers; i++) + supply_register (regcache, i + ymm16h_regnum, p + 16 + i * 64); + for (i = 0; i < num_avx512_xmm_registers; i++) + supply_register (regcache, i + xmm16_regnum, p + i * 64); + } + } + + if ((x86_xcr0 & X86_XSTATE_PKRU) != 0) + { + int pkru_regnum = find_regno (regcache->tdesc, "pkru"); + + if ((clear_bv & X86_XSTATE_PKRU) != 0) + { + for (i = 0; i < num_pkeys_registers; i++) + supply_register_zeroed (regcache, i + pkru_regnum); + } + else + { + p = (gdb_byte *) &fp->pkru_space[0]; + for (i = 0; i < num_pkeys_registers; i++) + supply_register (regcache, i + pkru_regnum, p + i * 4); + } + } + + if ((clear_bv & (X86_XSTATE_SSE | X86_XSTATE_AVX)) + == (X86_XSTATE_SSE | X86_XSTATE_AVX)) + { + unsigned int default_mxcsr = I387_MXCSR_INIT_VAL; + supply_register_by_name (regcache, "mxcsr", &default_mxcsr); + } + else + supply_register_by_name (regcache, "mxcsr", &fp->mxcsr); + + if ((clear_bv & X86_XSTATE_X87) != 0) + { + supply_register_by_name_zeroed (regcache, "fioff"); + supply_register_by_name_zeroed (regcache, "fooff"); + + val = I387_FCTRL_INIT_VAL; + supply_register_by_name (regcache, "fctrl", &val); + + supply_register_by_name_zeroed (regcache, "fstat"); + + val = 0xFFFF; + supply_register_by_name (regcache, "ftag", &val); + + supply_register_by_name_zeroed (regcache, "fiseg"); + supply_register_by_name_zeroed (regcache, "foseg"); + supply_register_by_name_zeroed (regcache, "fop"); + } + else + { + supply_register_by_name (regcache, "fioff", &fp->fioff); + supply_register_by_name (regcache, "fooff", &fp->fooff); + + /* Some registers are 16-bit. */ + val = fp->fctrl & 0xFFFF; + supply_register_by_name (regcache, "fctrl", &val); + + val = fp->fstat & 0xFFFF; + supply_register_by_name (regcache, "fstat", &val); + + /* Generate the form of ftag data that GDB expects. */ + top = (fp->fstat >> 11) & 0x7; + val = 0; + for (i = 7; i >= 0; i--) + { + int tag; + if (fp->ftag & (1 << i)) + tag = i387_ftag (fxp, (i + 8 - top) % 8); + else + tag = 3; + val |= tag << (2 * i); + } + supply_register_by_name (regcache, "ftag", &val); + + val = fp->fiseg & 0xFFFF; + supply_register_by_name (regcache, "fiseg", &val); + + val = fp->foseg & 0xFFFF; + supply_register_by_name (regcache, "foseg", &val); + + val = (fp->fop) & 0x7FF; + supply_register_by_name (regcache, "fop", &val); + } +} + +/* Default to SSE. */ +unsigned long long x86_xcr0 = X86_XSTATE_SSE_MASK; diff -Nru gdb-9.1/gdbserver/i387-fp.h gdb-10.2/gdbserver/i387-fp.h --- gdb-9.1/gdbserver/i387-fp.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/i387-fp.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,33 @@ +/* i387-specific utility functions, for the remote server for GDB. + Copyright (C) 2000-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef GDBSERVER_I387_FP_H +#define GDBSERVER_I387_FP_H + +void i387_cache_to_fsave (struct regcache *regcache, void *buf); +void i387_fsave_to_cache (struct regcache *regcache, const void *buf); + +void i387_cache_to_fxsave (struct regcache *regcache, void *buf); +void i387_fxsave_to_cache (struct regcache *regcache, const void *buf); + +void i387_cache_to_xsave (struct regcache *regcache, void *buf); +void i387_xsave_to_cache (struct regcache *regcache, const void *buf); + +extern unsigned long long x86_xcr0; + +#endif /* GDBSERVER_I387_FP_H */ diff -Nru gdb-9.1/gdbserver/inferiors.cc gdb-10.2/gdbserver/inferiors.cc --- gdb-9.1/gdbserver/inferiors.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/inferiors.cc 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,254 @@ +/* Inferior process information for the remote server for GDB. + Copyright (C) 2002-2021 Free Software Foundation, Inc. + + Contributed by MontaVista Software. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "server.h" +#include "gdbsupport/common-inferior.h" +#include "gdbthread.h" +#include "dll.h" + +std::list<process_info *> all_processes; +std::list<thread_info *> all_threads; + +struct thread_info *current_thread; + +/* The current working directory used to start the inferior. */ +static const char *current_inferior_cwd = NULL; + +struct thread_info * +add_thread (ptid_t thread_id, void *target_data) +{ + struct thread_info *new_thread = XCNEW (struct thread_info); + + new_thread->id = thread_id; + new_thread->last_resume_kind = resume_continue; + new_thread->last_status.kind = TARGET_WAITKIND_IGNORE; + + all_threads.push_back (new_thread); + + if (current_thread == NULL) + current_thread = new_thread; + + new_thread->target_data = target_data; + + return new_thread; +} + +/* See gdbthread.h. */ + +struct thread_info * +get_first_thread (void) +{ + if (!all_threads.empty ()) + return all_threads.front (); + else + return NULL; +} + +struct thread_info * +find_thread_ptid (ptid_t ptid) +{ + return find_thread ([&] (thread_info *thread) { + return thread->id == ptid; + }); +} + +/* Find a thread associated with the given PROCESS, or NULL if no + such thread exists. */ + +static struct thread_info * +find_thread_process (const struct process_info *const process) +{ + return find_any_thread_of_pid (process->pid); +} + +/* See gdbthread.h. */ + +struct thread_info * +find_any_thread_of_pid (int pid) +{ + return find_thread (pid, [] (thread_info *thread) { + return true; + }); +} + +static void +free_one_thread (thread_info *thread) +{ + free_register_cache (thread_regcache_data (thread)); + free (thread); +} + +void +remove_thread (struct thread_info *thread) +{ + if (thread->btrace != NULL) + target_disable_btrace (thread->btrace); + + discard_queued_stop_replies (ptid_of (thread)); + all_threads.remove (thread); + free_one_thread (thread); + if (current_thread == thread) + current_thread = NULL; +} + +void * +thread_target_data (struct thread_info *thread) +{ + return thread->target_data; +} + +struct regcache * +thread_regcache_data (struct thread_info *thread) +{ + return thread->regcache_data; +} + +void +set_thread_regcache_data (struct thread_info *thread, struct regcache *data) +{ + thread->regcache_data = data; +} + +void +clear_inferiors (void) +{ + for_each_thread (free_one_thread); + all_threads.clear (); + + clear_dlls (); + + current_thread = NULL; +} + +struct process_info * +add_process (int pid, int attached) +{ + process_info *process = new process_info (pid, attached); + + all_processes.push_back (process); + + return process; +} + +/* Remove a process from the common process list and free the memory + allocated for it. + The caller is responsible for freeing private data first. */ + +void +remove_process (struct process_info *process) +{ + clear_symbol_cache (&process->symbol_cache); + free_all_breakpoints (process); + gdb_assert (find_thread_process (process) == NULL); + all_processes.remove (process); + delete process; +} + +process_info * +find_process_pid (int pid) +{ + return find_process ([&] (process_info *process) { + return process->pid == pid; + }); +} + +/* Get the first process in the process list, or NULL if the list is empty. */ + +process_info * +get_first_process (void) +{ + if (!all_processes.empty ()) + return all_processes.front (); + else + return NULL; +} + +/* Return non-zero if there are any inferiors that we have created + (as opposed to attached-to). */ + +int +have_started_inferiors_p (void) +{ + return find_process ([] (process_info *process) { + return !process->attached; + }) != NULL; +} + +/* Return non-zero if there are any inferiors that we have attached to. */ + +int +have_attached_inferiors_p (void) +{ + return find_process ([] (process_info *process) { + return process->attached; + }) != NULL; +} + +struct process_info * +get_thread_process (const struct thread_info *thread) +{ + return find_process_pid (thread->id.pid ()); +} + +struct process_info * +current_process (void) +{ + gdb_assert (current_thread != NULL); + return get_thread_process (current_thread); +} + +/* See gdbsupport/common-gdbthread.h. */ + +void +switch_to_thread (process_stratum_target *ops, ptid_t ptid) +{ + gdb_assert (ptid != minus_one_ptid); + current_thread = find_thread_ptid (ptid); +} + +/* See inferiors.h. */ + +void +switch_to_process (process_info *proc) +{ + int pid = pid_of (proc); + + current_thread = find_any_thread_of_pid (pid); +} + +/* See gdbsupport/common-inferior.h. */ + +const char * +get_inferior_cwd () +{ + return current_inferior_cwd; +} + +/* See gdbsupport/common-inferior.h. */ + +void +set_inferior_cwd (const char *cwd) +{ + xfree ((void *) current_inferior_cwd); + if (cwd != NULL) + current_inferior_cwd = xstrdup (cwd); + else + current_inferior_cwd = NULL; +} diff -Nru gdb-9.1/gdbserver/inferiors.h gdb-10.2/gdbserver/inferiors.h --- gdb-9.1/gdbserver/inferiors.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/inferiors.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,150 @@ +/* Inferior process information for the remote server for GDB. + Copyright (C) 1993-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef GDBSERVER_INFERIORS_H +#define GDBSERVER_INFERIORS_H + +#include "gdbsupport/gdb_vecs.h" +#include <list> + +struct thread_info; +struct regcache; +struct target_desc; +struct sym_cache; +struct breakpoint; +struct raw_breakpoint; +struct fast_tracepoint_jump; +struct process_info_private; + +struct process_info +{ + process_info (int pid_, int attached_) + : pid (pid_), attached (attached_) + {} + + /* This process' pid. */ + int pid; + + /* Nonzero if this child process was attached rather than + spawned. */ + int attached; + + /* True if GDB asked us to detach from this process, but we remained + attached anyway. */ + int gdb_detached = 0; + + /* The symbol cache. */ + struct sym_cache *symbol_cache = NULL; + + /* The list of memory breakpoints. */ + struct breakpoint *breakpoints = NULL; + + /* The list of raw memory breakpoints. */ + struct raw_breakpoint *raw_breakpoints = NULL; + + /* The list of installed fast tracepoints. */ + struct fast_tracepoint_jump *fast_tracepoint_jumps = NULL; + + /* The list of syscalls to report, or just a single element, ANY_SYSCALL, + for unfiltered syscall reporting. */ + std::vector<int> syscalls_to_catch; + + const struct target_desc *tdesc = NULL; + + /* Private target data. */ + struct process_info_private *priv = NULL; +}; + +/* Get the pid of PROC. */ + +static inline int +pid_of (const process_info *proc) +{ + return proc->pid; +} + +/* Return a pointer to the process that corresponds to the current + thread (current_thread). It is an error to call this if there is + no current thread selected. */ + +struct process_info *current_process (void); +struct process_info *get_thread_process (const struct thread_info *); + +extern std::list<process_info *> all_processes; + +/* Invoke FUNC for each process. */ + +template <typename Func> +static void +for_each_process (Func func) +{ + std::list<process_info *>::iterator next, cur = all_processes.begin (); + + while (cur != all_processes.end ()) + { + next = cur; + next++; + func (*cur); + cur = next; + } +} + +/* Find the first process for which FUNC returns true. Return NULL if no + process satisfying FUNC is found. */ + +template <typename Func> +static process_info * +find_process (Func func) +{ + std::list<process_info *>::iterator next, cur = all_processes.begin (); + + while (cur != all_processes.end ()) + { + next = cur; + next++; + + if (func (*cur)) + return *cur; + + cur = next; + } + + return NULL; +} + +extern struct thread_info *current_thread; + +/* Return the first process in the processes list. */ +struct process_info *get_first_process (void); + +struct process_info *add_process (int pid, int attached); +void remove_process (struct process_info *process); +struct process_info *find_process_pid (int pid); +int have_started_inferiors_p (void); +int have_attached_inferiors_p (void); + +/* Switch to a thread of PROC. */ +void switch_to_process (process_info *proc); + +void clear_inferiors (void); + +void *thread_target_data (struct thread_info *); +struct regcache *thread_regcache_data (struct thread_info *); +void set_thread_regcache_data (struct thread_info *, struct regcache *); + +#endif /* GDBSERVER_INFERIORS_H */ diff -Nru gdb-9.1/gdbserver/linux-aarch32-low.cc gdb-10.2/gdbserver/linux-aarch32-low.cc --- gdb-9.1/gdbserver/linux-aarch32-low.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/linux-aarch32-low.cc 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,303 @@ +/* Copyright (C) 1995-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "server.h" +#include "arch/arm.h" +#include "arch/arm-linux.h" +#include "linux-low.h" +#include "linux-aarch32-low.h" + +#include <sys/ptrace.h> +/* Don't include elf.h if linux/elf.h got included by gdb_proc_service.h. + On Bionic elf.h and linux/elf.h have conflicting definitions. */ +#ifndef ELFMAG0 +#include <elf.h> +#endif + +/* Correct in either endianness. */ +#define arm_abi_breakpoint 0xef9f0001UL + +/* For new EABI binaries. We recognize it regardless of which ABI + is used for gdbserver, so single threaded debugging should work + OK, but for multi-threaded debugging we only insert the current + ABI's breakpoint instruction. For now at least. */ +#define arm_eabi_breakpoint 0xe7f001f0UL + +#if (defined __ARM_EABI__ || defined __aarch64__) +static const unsigned long arm_breakpoint = arm_eabi_breakpoint; +#else +static const unsigned long arm_breakpoint = arm_abi_breakpoint; +#endif + +#define arm_breakpoint_len 4 +static const unsigned short thumb_breakpoint = 0xde01; +#define thumb_breakpoint_len 2 +static const unsigned short thumb2_breakpoint[] = { 0xf7f0, 0xa000 }; +#define thumb2_breakpoint_len 4 + +/* Some older versions of GNU/Linux and Android do not define + the following macros. */ +#ifndef NT_ARM_VFP +#define NT_ARM_VFP 0x400 +#endif + +/* Collect GP registers from REGCACHE to buffer BUF. */ + +void +arm_fill_gregset (struct regcache *regcache, void *buf) +{ + int i; + uint32_t *regs = (uint32_t *) buf; + uint32_t cpsr = regs[ARM_CPSR_GREGNUM]; + + for (i = ARM_A1_REGNUM; i <= ARM_PC_REGNUM; i++) + collect_register (regcache, i, ®s[i]); + + collect_register (regcache, ARM_PS_REGNUM, ®s[ARM_CPSR_GREGNUM]); + /* Keep reserved bits bit 20 to bit 23. */ + regs[ARM_CPSR_GREGNUM] = ((regs[ARM_CPSR_GREGNUM] & 0xff0fffff) + | (cpsr & 0x00f00000)); +} + +/* Supply GP registers contents, stored in BUF, to REGCACHE. */ + +void +arm_store_gregset (struct regcache *regcache, const void *buf) +{ + int i; + char zerobuf[8]; + const uint32_t *regs = (const uint32_t *) buf; + uint32_t cpsr = regs[ARM_CPSR_GREGNUM]; + + memset (zerobuf, 0, 8); + for (i = ARM_A1_REGNUM; i <= ARM_PC_REGNUM; i++) + supply_register (regcache, i, ®s[i]); + + for (; i < ARM_PS_REGNUM; i++) + supply_register (regcache, i, zerobuf); + + /* Clear reserved bits bit 20 to bit 23. */ + cpsr &= 0xff0fffff; + supply_register (regcache, ARM_PS_REGNUM, &cpsr); +} + +/* Collect NUM number of VFP registers from REGCACHE to buffer BUF. */ + +void +arm_fill_vfpregset_num (struct regcache *regcache, void *buf, int num) +{ + int i, base; + + gdb_assert (num == 16 || num == 32); + + base = find_regno (regcache->tdesc, "d0"); + for (i = 0; i < num; i++) + collect_register (regcache, base + i, (char *) buf + i * 8); + + collect_register_by_name (regcache, "fpscr", (char *) buf + 32 * 8); +} + +/* Supply NUM number of VFP registers contents, stored in BUF, to + REGCACHE. */ + +void +arm_store_vfpregset_num (struct regcache *regcache, const void *buf, int num) +{ + int i, base; + + gdb_assert (num == 16 || num == 32); + + base = find_regno (regcache->tdesc, "d0"); + for (i = 0; i < num; i++) + supply_register (regcache, base + i, (char *) buf + i * 8); + + supply_register_by_name (regcache, "fpscr", (char *) buf + 32 * 8); +} + +static void +arm_fill_vfpregset (struct regcache *regcache, void *buf) +{ + arm_fill_vfpregset_num (regcache, buf, 32); +} + +static void +arm_store_vfpregset (struct regcache *regcache, const void *buf) +{ + arm_store_vfpregset_num (regcache, buf, 32); +} + +/* Register sets with using PTRACE_GETREGSET. */ + +static struct regset_info aarch32_regsets[] = { + { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_PRSTATUS, + ARM_CORE_REGS_SIZE + ARM_INT_REGISTER_SIZE, GENERAL_REGS, + arm_fill_gregset, arm_store_gregset }, + { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_ARM_VFP, ARM_VFP3_REGS_SIZE, + EXTENDED_REGS, + arm_fill_vfpregset, arm_store_vfpregset }, + NULL_REGSET +}; + +static struct regsets_info aarch32_regsets_info = + { + aarch32_regsets, /* regsets */ + 0, /* num_regsets */ + NULL, /* disabled_regsets */ + }; + +struct regs_info regs_info_aarch32 = + { + NULL, /* regset_bitmap */ + NULL, /* usrregs */ + &aarch32_regsets_info + }; + +/* Returns 1 if the current instruction set is thumb, 0 otherwise. */ + +int +arm_is_thumb_mode (void) +{ + struct regcache *regcache = get_thread_regcache (current_thread, 1); + unsigned long cpsr; + + collect_register_by_name (regcache, "cpsr", &cpsr); + + if (cpsr & 0x20) + return 1; + else + return 0; +} + +/* Returns 1 if there is a software breakpoint at location. */ + +int +arm_breakpoint_at (CORE_ADDR where) +{ + if (arm_is_thumb_mode ()) + { + /* Thumb mode. */ + unsigned short insn; + + the_target->read_memory (where, (unsigned char *) &insn, 2); + if (insn == thumb_breakpoint) + return 1; + + if (insn == thumb2_breakpoint[0]) + { + the_target->read_memory (where + 2, (unsigned char *) &insn, 2); + if (insn == thumb2_breakpoint[1]) + return 1; + } + } + else + { + /* ARM mode. */ + unsigned long insn; + + the_target->read_memory (where, (unsigned char *) &insn, 4); + if (insn == arm_abi_breakpoint) + return 1; + + if (insn == arm_eabi_breakpoint) + return 1; + } + + return 0; +} + +/* Implementation of linux_target_ops method "breakpoint_kind_from_pc". + + Determine the type and size of breakpoint to insert at PCPTR. Uses the + program counter value to determine whether a 16-bit or 32-bit breakpoint + should be used. It returns the breakpoint's kind, and adjusts the program + counter (if necessary) to point to the actual memory location where the + breakpoint should be inserted. */ + +int +arm_breakpoint_kind_from_pc (CORE_ADDR *pcptr) +{ + if (IS_THUMB_ADDR (*pcptr)) + { + gdb_byte buf[2]; + + *pcptr = UNMAKE_THUMB_ADDR (*pcptr); + + /* Check whether we are replacing a thumb2 32-bit instruction. */ + if (target_read_memory (*pcptr, buf, 2) == 0) + { + unsigned short inst1 = 0; + + target_read_memory (*pcptr, (gdb_byte *) &inst1, 2); + if (thumb_insn_size (inst1) == 4) + return ARM_BP_KIND_THUMB2; + } + return ARM_BP_KIND_THUMB; + } + else + return ARM_BP_KIND_ARM; +} + +/* Implementation of the linux_target_ops method "sw_breakpoint_from_kind". */ + +const gdb_byte * +arm_sw_breakpoint_from_kind (int kind , int *size) +{ + *size = arm_breakpoint_len; + /* Define an ARM-mode breakpoint; we only set breakpoints in the C + library, which is most likely to be ARM. If the kernel supports + clone events, we will never insert a breakpoint, so even a Thumb + C library will work; so will mixing EABI/non-EABI gdbserver and + application. */ + switch (kind) + { + case ARM_BP_KIND_THUMB: + *size = thumb_breakpoint_len; + return (gdb_byte *) &thumb_breakpoint; + case ARM_BP_KIND_THUMB2: + *size = thumb2_breakpoint_len; + return (gdb_byte *) &thumb2_breakpoint; + case ARM_BP_KIND_ARM: + *size = arm_breakpoint_len; + return (const gdb_byte *) &arm_breakpoint; + default: + return NULL; + } + return NULL; +} + +/* Implementation of the linux_target_ops method + "breakpoint_kind_from_current_state". */ + +int +arm_breakpoint_kind_from_current_state (CORE_ADDR *pcptr) +{ + if (arm_is_thumb_mode ()) + { + *pcptr = MAKE_THUMB_ADDR (*pcptr); + return arm_breakpoint_kind_from_pc (pcptr); + } + else + { + return arm_breakpoint_kind_from_pc (pcptr); + } +} + +void +initialize_low_arch_aarch32 (void) +{ + initialize_regsets_info (&aarch32_regsets_info); +} diff -Nru gdb-9.1/gdbserver/linux-aarch32-low.h gdb-10.2/gdbserver/linux-aarch32-low.h --- gdb-9.1/gdbserver/linux-aarch32-low.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/linux-aarch32-low.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,39 @@ +/* Copyright (C) 1995-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef GDBSERVER_LINUX_AARCH32_LOW_H +#define GDBSERVER_LINUX_AARCH32_LOW_H + +extern struct regs_info regs_info_aarch32; + +void arm_fill_gregset (struct regcache *regcache, void *buf); +void arm_store_gregset (struct regcache *regcache, const void *buf); +void arm_fill_vfpregset_num (struct regcache *regcache, void *buf, int num); +void arm_store_vfpregset_num (struct regcache *regcache, const void *buf, + int num); + +int arm_breakpoint_kind_from_pc (CORE_ADDR *pcptr); +const gdb_byte *arm_sw_breakpoint_from_kind (int kind , int *size); +int arm_breakpoint_kind_from_current_state (CORE_ADDR *pcptr); +int arm_breakpoint_at (CORE_ADDR where); + +void initialize_low_arch_aarch32 (void); + +void init_registers_arm_with_neon (void); +int arm_is_thumb_mode (void); + +#endif /* GDBSERVER_LINUX_AARCH32_LOW_H */ diff -Nru gdb-9.1/gdbserver/linux-aarch32-tdesc.cc gdb-10.2/gdbserver/linux-aarch32-tdesc.cc --- gdb-9.1/gdbserver/linux-aarch32-tdesc.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/linux-aarch32-tdesc.cc 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,50 @@ +/* Copyright (C) 2019-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "server.h" + +#include "linux-aarch32-tdesc.h" + +#include "tdesc.h" +#include "arch/aarch32.h" +#include <inttypes.h> + +static struct target_desc *tdesc_aarch32; + +/* See linux-aarch32-tdesc.h. */ + +const target_desc * +aarch32_linux_read_description () +{ + if (tdesc_aarch32 == nullptr) + { + tdesc_aarch32 = aarch32_create_target_description (); + + static const char *expedite_regs[] = { "r11", "sp", "pc", 0 }; + init_target_desc (tdesc_aarch32, expedite_regs); + } + return tdesc_aarch32; +} + +/* See linux-aarch32-tdesc.h. */ + +bool +is_aarch32_linux_description (const target_desc *tdesc) +{ + gdb_assert (tdesc != nullptr); + return tdesc == tdesc_aarch32; +} diff -Nru gdb-9.1/gdbserver/linux-aarch32-tdesc.h gdb-10.2/gdbserver/linux-aarch32-tdesc.h --- gdb-9.1/gdbserver/linux-aarch32-tdesc.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/linux-aarch32-tdesc.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,29 @@ +/* Copyright (C) 2019-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef GDBSERVER_LINUX_AARCH32_TDESC_H +#define GDBSERVER_LINUX_AARCH32_TDESC_H + +/* Return the AArch32 target description. */ + +const target_desc * aarch32_linux_read_description (); + +/* Return true if TDESC is the AArch32 target description. */ + +bool is_aarch32_linux_description (const target_desc *tdesc); + +#endif /* linux-aarch32-tdesc.h. */ diff -Nru gdb-9.1/gdbserver/linux-aarch64-ipa.cc gdb-10.2/gdbserver/linux-aarch64-ipa.cc --- gdb-9.1/gdbserver/linux-aarch64-ipa.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/linux-aarch64-ipa.cc 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,209 @@ +/* GNU/Linux/AArch64 specific low level interface, for the in-process + agent library for GDB. + + Copyright (C) 2015-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "server.h" +#include <sys/mman.h> +#include "tracepoint.h" +#include <elf.h> +#ifdef HAVE_GETAUXVAL +#include <sys/auxv.h> +#endif +#include "linux-aarch64-tdesc.h" + +/* Each register saved by the jump pad is in a 16 byte cell. */ +#define FT_CR_SIZE 16 + +#define FT_CR_FPCR 0 +#define FT_CR_FPSR 1 +#define FT_CR_CPSR 2 +#define FT_CR_PC 3 +#define FT_CR_SP 4 +#define FT_CR_X0 5 +#define FT_CR_GPR(n) (FT_CR_X0 + (n)) +#define FT_CR_FPR(n) (FT_CR_GPR (31) + (n)) + +/* Mapping between registers collected by the jump pad and GDB's register + array layout used by regcache. + + See linux-aarch64-low.c (aarch64_install_fast_tracepoint_jump_pad) for + more details. */ + +static const int aarch64_ft_collect_regmap[] = { + FT_CR_GPR (0), + FT_CR_GPR (1), + FT_CR_GPR (2), + FT_CR_GPR (3), + FT_CR_GPR (4), + FT_CR_GPR (5), + FT_CR_GPR (6), + FT_CR_GPR (7), + FT_CR_GPR (8), + FT_CR_GPR (9), + FT_CR_GPR (10), + FT_CR_GPR (11), + FT_CR_GPR (12), + FT_CR_GPR (13), + FT_CR_GPR (14), + FT_CR_GPR (15), + FT_CR_GPR (16), + FT_CR_GPR (17), + FT_CR_GPR (18), + FT_CR_GPR (19), + FT_CR_GPR (20), + FT_CR_GPR (21), + FT_CR_GPR (22), + FT_CR_GPR (23), + FT_CR_GPR (24), + FT_CR_GPR (25), + FT_CR_GPR (26), + FT_CR_GPR (27), + FT_CR_GPR (28), + /* FP */ + FT_CR_GPR (29), + /* LR */ + FT_CR_GPR (30), + FT_CR_SP, + FT_CR_PC, + FT_CR_CPSR, + FT_CR_FPR (0), + FT_CR_FPR (1), + FT_CR_FPR (2), + FT_CR_FPR (3), + FT_CR_FPR (4), + FT_CR_FPR (5), + FT_CR_FPR (6), + FT_CR_FPR (7), + FT_CR_FPR (8), + FT_CR_FPR (9), + FT_CR_FPR (10), + FT_CR_FPR (11), + FT_CR_FPR (12), + FT_CR_FPR (13), + FT_CR_FPR (14), + FT_CR_FPR (15), + FT_CR_FPR (16), + FT_CR_FPR (17), + FT_CR_FPR (18), + FT_CR_FPR (19), + FT_CR_FPR (20), + FT_CR_FPR (21), + FT_CR_FPR (22), + FT_CR_FPR (23), + FT_CR_FPR (24), + FT_CR_FPR (25), + FT_CR_FPR (26), + FT_CR_FPR (27), + FT_CR_FPR (28), + FT_CR_FPR (29), + FT_CR_FPR (30), + FT_CR_FPR (31), + FT_CR_FPSR, + FT_CR_FPCR +}; + +#define AARCH64_NUM_FT_COLLECT_GREGS \ + (sizeof (aarch64_ft_collect_regmap) / sizeof(aarch64_ft_collect_regmap[0])) + +/* Fill in REGCACHE with registers saved by the jump pad in BUF. */ + +void +supply_fast_tracepoint_registers (struct regcache *regcache, + const unsigned char *buf) +{ + int i; + + for (i = 0; i < AARCH64_NUM_FT_COLLECT_GREGS; i++) + supply_register (regcache, i, + ((char *) buf) + + (aarch64_ft_collect_regmap[i] * FT_CR_SIZE)); +} + +ULONGEST +get_raw_reg (const unsigned char *raw_regs, int regnum) +{ + if (regnum >= AARCH64_NUM_FT_COLLECT_GREGS) + return 0; + + return *(ULONGEST *) (raw_regs + + aarch64_ft_collect_regmap[regnum] * FT_CR_SIZE); +} + +/* Return target_desc to use for IPA, given the tdesc index passed by + gdbserver. Index is ignored, since we have only one tdesc + at the moment. SVE and pauth not yet supported. */ + +const struct target_desc * +get_ipa_tdesc (int idx) +{ + return aarch64_linux_read_description (0, false); +} + +/* Allocate buffer for the jump pads. The branch instruction has a reach + of +/- 128MiB, and the executable is loaded at 0x400000 (4MiB). + To maximize the area of executable that can use tracepoints, try + allocating at 0x400000 - size initially, decreasing until we hit + a free area. */ + +void * +alloc_jump_pad_buffer (size_t size) +{ + uintptr_t addr; + uintptr_t exec_base = getauxval (AT_PHDR); + int pagesize; + void *res; + + if (exec_base == 0) + exec_base = 0x400000; + + pagesize = sysconf (_SC_PAGE_SIZE); + if (pagesize == -1) + perror_with_name ("sysconf"); + + addr = exec_base - size; + + /* size should already be page-aligned, but this can't hurt. */ + addr &= ~(pagesize - 1); + + /* Search for a free area. If we hit 0, we're out of luck. */ + for (; addr; addr -= pagesize) + { + /* No MAP_FIXED - we don't want to zap someone's mapping. */ + res = mmap ((void *) addr, size, + PROT_READ | PROT_WRITE | PROT_EXEC, + MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); + + /* If we got what we wanted, return. */ + if ((uintptr_t) res == addr) + return res; + + /* If we got a mapping, but at a wrong address, undo it. */ + if (res != MAP_FAILED) + munmap (res, size); + } + + return NULL; +} + +void +initialize_low_tracepoint (void) +{ + /* SVE and pauth not yet supported. */ + aarch64_linux_read_description (0, false); +} diff -Nru gdb-9.1/gdbserver/linux-aarch64-low.cc gdb-10.2/gdbserver/linux-aarch64-low.cc --- gdb-9.1/gdbserver/linux-aarch64-low.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/linux-aarch64-low.cc 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,3181 @@ +/* GNU/Linux/AArch64 specific low level interface, for the remote server for + GDB. + + Copyright (C) 2009-2021 Free Software Foundation, Inc. + Contributed by ARM Ltd. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "server.h" +#include "linux-low.h" +#include "nat/aarch64-linux.h" +#include "nat/aarch64-linux-hw-point.h" +#include "arch/aarch64-insn.h" +#include "linux-aarch32-low.h" +#include "elf/common.h" +#include "ax.h" +#include "tracepoint.h" +#include "debug.h" + +#include <signal.h> +#include <sys/user.h> +#include "nat/gdb_ptrace.h" +#include <asm/ptrace.h> +#include <inttypes.h> +#include <endian.h> +#include <sys/uio.h> + +#include "gdb_proc_service.h" +#include "arch/aarch64.h" +#include "linux-aarch32-tdesc.h" +#include "linux-aarch64-tdesc.h" +#include "nat/aarch64-sve-linux-ptrace.h" +#include "tdesc.h" + +#ifdef HAVE_SYS_REG_H +#include <sys/reg.h> +#endif + +/* Linux target op definitions for the AArch64 architecture. */ + +class aarch64_target : public linux_process_target +{ +public: + + const regs_info *get_regs_info () override; + + int breakpoint_kind_from_pc (CORE_ADDR *pcptr) override; + + int breakpoint_kind_from_current_state (CORE_ADDR *pcptr) override; + + const gdb_byte *sw_breakpoint_from_kind (int kind, int *size) override; + + bool supports_z_point_type (char z_type) override; + + bool supports_tracepoints () override; + + bool supports_fast_tracepoints () override; + + int install_fast_tracepoint_jump_pad + (CORE_ADDR tpoint, CORE_ADDR tpaddr, CORE_ADDR collector, + CORE_ADDR lockaddr, ULONGEST orig_size, CORE_ADDR *jump_entry, + CORE_ADDR *trampoline, ULONGEST *trampoline_size, + unsigned char *jjump_pad_insn, ULONGEST *jjump_pad_insn_size, + CORE_ADDR *adjusted_insn_addr, CORE_ADDR *adjusted_insn_addr_end, + char *err) override; + + int get_min_fast_tracepoint_insn_len () override; + + struct emit_ops *emit_ops () override; + +protected: + + void low_arch_setup () override; + + bool low_cannot_fetch_register (int regno) override; + + bool low_cannot_store_register (int regno) override; + + bool low_supports_breakpoints () override; + + CORE_ADDR low_get_pc (regcache *regcache) override; + + void low_set_pc (regcache *regcache, CORE_ADDR newpc) override; + + bool low_breakpoint_at (CORE_ADDR pc) override; + + int low_insert_point (raw_bkpt_type type, CORE_ADDR addr, + int size, raw_breakpoint *bp) override; + + int low_remove_point (raw_bkpt_type type, CORE_ADDR addr, + int size, raw_breakpoint *bp) override; + + bool low_stopped_by_watchpoint () override; + + CORE_ADDR low_stopped_data_address () override; + + bool low_siginfo_fixup (siginfo_t *native, gdb_byte *inf, + int direction) override; + + arch_process_info *low_new_process () override; + + void low_delete_process (arch_process_info *info) override; + + void low_new_thread (lwp_info *) override; + + void low_delete_thread (arch_lwp_info *) override; + + void low_new_fork (process_info *parent, process_info *child) override; + + void low_prepare_to_resume (lwp_info *lwp) override; + + int low_get_thread_area (int lwpid, CORE_ADDR *addrp) override; + + bool low_supports_range_stepping () override; + + bool low_supports_catch_syscall () override; + + void low_get_syscall_trapinfo (regcache *regcache, int *sysno) override; +}; + +/* The singleton target ops object. */ + +static aarch64_target the_aarch64_target; + +bool +aarch64_target::low_cannot_fetch_register (int regno) +{ + gdb_assert_not_reached ("linux target op low_cannot_fetch_register " + "is not implemented by the target"); +} + +bool +aarch64_target::low_cannot_store_register (int regno) +{ + gdb_assert_not_reached ("linux target op low_cannot_store_register " + "is not implemented by the target"); +} + +void +aarch64_target::low_prepare_to_resume (lwp_info *lwp) +{ + aarch64_linux_prepare_to_resume (lwp); +} + +/* Per-process arch-specific data we want to keep. */ + +struct arch_process_info +{ + /* Hardware breakpoint/watchpoint data. + The reason for them to be per-process rather than per-thread is + due to the lack of information in the gdbserver environment; + gdbserver is not told that whether a requested hardware + breakpoint/watchpoint is thread specific or not, so it has to set + each hw bp/wp for every thread in the current process. The + higher level bp/wp management in gdb will resume a thread if a hw + bp/wp trap is not expected for it. Since the hw bp/wp setting is + same for each thread, it is reasonable for the data to live here. + */ + struct aarch64_debug_reg_state debug_reg_state; +}; + +/* Return true if the size of register 0 is 8 byte. */ + +static int +is_64bit_tdesc (void) +{ + struct regcache *regcache = get_thread_regcache (current_thread, 0); + + return register_size (regcache->tdesc, 0) == 8; +} + +/* Return true if the regcache contains the number of SVE registers. */ + +static bool +is_sve_tdesc (void) +{ + struct regcache *regcache = get_thread_regcache (current_thread, 0); + + return tdesc_contains_feature (regcache->tdesc, "org.gnu.gdb.aarch64.sve"); +} + +static void +aarch64_fill_gregset (struct regcache *regcache, void *buf) +{ + struct user_pt_regs *regset = (struct user_pt_regs *) buf; + int i; + + for (i = 0; i < AARCH64_X_REGS_NUM; i++) + collect_register (regcache, AARCH64_X0_REGNUM + i, ®set->regs[i]); + collect_register (regcache, AARCH64_SP_REGNUM, ®set->sp); + collect_register (regcache, AARCH64_PC_REGNUM, ®set->pc); + collect_register (regcache, AARCH64_CPSR_REGNUM, ®set->pstate); +} + +static void +aarch64_store_gregset (struct regcache *regcache, const void *buf) +{ + const struct user_pt_regs *regset = (const struct user_pt_regs *) buf; + int i; + + for (i = 0; i < AARCH64_X_REGS_NUM; i++) + supply_register (regcache, AARCH64_X0_REGNUM + i, ®set->regs[i]); + supply_register (regcache, AARCH64_SP_REGNUM, ®set->sp); + supply_register (regcache, AARCH64_PC_REGNUM, ®set->pc); + supply_register (regcache, AARCH64_CPSR_REGNUM, ®set->pstate); +} + +static void +aarch64_fill_fpregset (struct regcache *regcache, void *buf) +{ + struct user_fpsimd_state *regset = (struct user_fpsimd_state *) buf; + int i; + + for (i = 0; i < AARCH64_V_REGS_NUM; i++) + collect_register (regcache, AARCH64_V0_REGNUM + i, ®set->vregs[i]); + collect_register (regcache, AARCH64_FPSR_REGNUM, ®set->fpsr); + collect_register (regcache, AARCH64_FPCR_REGNUM, ®set->fpcr); +} + +static void +aarch64_store_fpregset (struct regcache *regcache, const void *buf) +{ + const struct user_fpsimd_state *regset + = (const struct user_fpsimd_state *) buf; + int i; + + for (i = 0; i < AARCH64_V_REGS_NUM; i++) + supply_register (regcache, AARCH64_V0_REGNUM + i, ®set->vregs[i]); + supply_register (regcache, AARCH64_FPSR_REGNUM, ®set->fpsr); + supply_register (regcache, AARCH64_FPCR_REGNUM, ®set->fpcr); +} + +/* Store the pauth registers to regcache. */ + +static void +aarch64_store_pauthregset (struct regcache *regcache, const void *buf) +{ + uint64_t *pauth_regset = (uint64_t *) buf; + int pauth_base = find_regno (regcache->tdesc, "pauth_dmask"); + + if (pauth_base == 0) + return; + + supply_register (regcache, AARCH64_PAUTH_DMASK_REGNUM (pauth_base), + &pauth_regset[0]); + supply_register (regcache, AARCH64_PAUTH_CMASK_REGNUM (pauth_base), + &pauth_regset[1]); +} + +bool +aarch64_target::low_supports_breakpoints () +{ + return true; +} + +/* Implementation of linux target ops method "low_get_pc". */ + +CORE_ADDR +aarch64_target::low_get_pc (regcache *regcache) +{ + if (register_size (regcache->tdesc, 0) == 8) + return linux_get_pc_64bit (regcache); + else + return linux_get_pc_32bit (regcache); +} + +/* Implementation of linux target ops method "low_set_pc". */ + +void +aarch64_target::low_set_pc (regcache *regcache, CORE_ADDR pc) +{ + if (register_size (regcache->tdesc, 0) == 8) + linux_set_pc_64bit (regcache, pc); + else + linux_set_pc_32bit (regcache, pc); +} + +#define aarch64_breakpoint_len 4 + +/* AArch64 BRK software debug mode instruction. + This instruction needs to match gdb/aarch64-tdep.c + (aarch64_default_breakpoint). */ +static const gdb_byte aarch64_breakpoint[] = {0x00, 0x00, 0x20, 0xd4}; + +/* Implementation of linux target ops method "low_breakpoint_at". */ + +bool +aarch64_target::low_breakpoint_at (CORE_ADDR where) +{ + if (is_64bit_tdesc ()) + { + gdb_byte insn[aarch64_breakpoint_len]; + + read_memory (where, (unsigned char *) &insn, aarch64_breakpoint_len); + if (memcmp (insn, aarch64_breakpoint, aarch64_breakpoint_len) == 0) + return true; + + return false; + } + else + return arm_breakpoint_at (where); +} + +static void +aarch64_init_debug_reg_state (struct aarch64_debug_reg_state *state) +{ + int i; + + for (i = 0; i < AARCH64_HBP_MAX_NUM; ++i) + { + state->dr_addr_bp[i] = 0; + state->dr_ctrl_bp[i] = 0; + state->dr_ref_count_bp[i] = 0; + } + + for (i = 0; i < AARCH64_HWP_MAX_NUM; ++i) + { + state->dr_addr_wp[i] = 0; + state->dr_ctrl_wp[i] = 0; + state->dr_ref_count_wp[i] = 0; + } +} + +/* Return the pointer to the debug register state structure in the + current process' arch-specific data area. */ + +struct aarch64_debug_reg_state * +aarch64_get_debug_reg_state (pid_t pid) +{ + struct process_info *proc = find_process_pid (pid); + + return &proc->priv->arch_private->debug_reg_state; +} + +/* Implementation of target ops method "supports_z_point_type". */ + +bool +aarch64_target::supports_z_point_type (char z_type) +{ + switch (z_type) + { + case Z_PACKET_SW_BP: + case Z_PACKET_HW_BP: + case Z_PACKET_WRITE_WP: + case Z_PACKET_READ_WP: + case Z_PACKET_ACCESS_WP: + return true; + default: + return false; + } +} + +/* Implementation of linux target ops method "low_insert_point". + + It actually only records the info of the to-be-inserted bp/wp; + the actual insertion will happen when threads are resumed. */ + +int +aarch64_target::low_insert_point (raw_bkpt_type type, CORE_ADDR addr, + int len, raw_breakpoint *bp) +{ + int ret; + enum target_hw_bp_type targ_type; + struct aarch64_debug_reg_state *state + = aarch64_get_debug_reg_state (pid_of (current_thread)); + + if (show_debug_regs) + fprintf (stderr, "insert_point on entry (addr=0x%08lx, len=%d)\n", + (unsigned long) addr, len); + + /* Determine the type from the raw breakpoint type. */ + targ_type = raw_bkpt_type_to_target_hw_bp_type (type); + + if (targ_type != hw_execute) + { + if (aarch64_linux_region_ok_for_watchpoint (addr, len)) + ret = aarch64_handle_watchpoint (targ_type, addr, len, + 1 /* is_insert */, state); + else + ret = -1; + } + else + { + if (len == 3) + { + /* LEN is 3 means the breakpoint is set on a 32-bit thumb + instruction. Set it to 2 to correctly encode length bit + mask in hardware/watchpoint control register. */ + len = 2; + } + ret = aarch64_handle_breakpoint (targ_type, addr, len, + 1 /* is_insert */, state); + } + + if (show_debug_regs) + aarch64_show_debug_reg_state (state, "insert_point", addr, len, + targ_type); + + return ret; +} + +/* Implementation of linux target ops method "low_remove_point". + + It actually only records the info of the to-be-removed bp/wp, + the actual removal will be done when threads are resumed. */ + +int +aarch64_target::low_remove_point (raw_bkpt_type type, CORE_ADDR addr, + int len, raw_breakpoint *bp) +{ + int ret; + enum target_hw_bp_type targ_type; + struct aarch64_debug_reg_state *state + = aarch64_get_debug_reg_state (pid_of (current_thread)); + + if (show_debug_regs) + fprintf (stderr, "remove_point on entry (addr=0x%08lx, len=%d)\n", + (unsigned long) addr, len); + + /* Determine the type from the raw breakpoint type. */ + targ_type = raw_bkpt_type_to_target_hw_bp_type (type); + + /* Set up state pointers. */ + if (targ_type != hw_execute) + ret = + aarch64_handle_watchpoint (targ_type, addr, len, 0 /* is_insert */, + state); + else + { + if (len == 3) + { + /* LEN is 3 means the breakpoint is set on a 32-bit thumb + instruction. Set it to 2 to correctly encode length bit + mask in hardware/watchpoint control register. */ + len = 2; + } + ret = aarch64_handle_breakpoint (targ_type, addr, len, + 0 /* is_insert */, state); + } + + if (show_debug_regs) + aarch64_show_debug_reg_state (state, "remove_point", addr, len, + targ_type); + + return ret; +} + +/* Implementation of linux target ops method "low_stopped_data_address". */ + +CORE_ADDR +aarch64_target::low_stopped_data_address () +{ + siginfo_t siginfo; + int pid, i; + struct aarch64_debug_reg_state *state; + + pid = lwpid_of (current_thread); + + /* Get the siginfo. */ + if (ptrace (PTRACE_GETSIGINFO, pid, NULL, &siginfo) != 0) + return (CORE_ADDR) 0; + + /* Need to be a hardware breakpoint/watchpoint trap. */ + if (siginfo.si_signo != SIGTRAP + || (siginfo.si_code & 0xffff) != 0x0004 /* TRAP_HWBKPT */) + return (CORE_ADDR) 0; + + /* Check if the address matches any watched address. */ + state = aarch64_get_debug_reg_state (pid_of (current_thread)); + for (i = aarch64_num_wp_regs - 1; i >= 0; --i) + { + const unsigned int offset + = aarch64_watchpoint_offset (state->dr_ctrl_wp[i]); + const unsigned int len = aarch64_watchpoint_length (state->dr_ctrl_wp[i]); + const CORE_ADDR addr_trap = (CORE_ADDR) siginfo.si_addr; + const CORE_ADDR addr_watch = state->dr_addr_wp[i] + offset; + const CORE_ADDR addr_watch_aligned = align_down (state->dr_addr_wp[i], 8); + const CORE_ADDR addr_orig = state->dr_addr_orig_wp[i]; + + if (state->dr_ref_count_wp[i] + && DR_CONTROL_ENABLED (state->dr_ctrl_wp[i]) + && addr_trap >= addr_watch_aligned + && addr_trap < addr_watch + len) + { + /* ADDR_TRAP reports the first address of the memory range + accessed by the CPU, regardless of what was the memory + range watched. Thus, a large CPU access that straddles + the ADDR_WATCH..ADDR_WATCH+LEN range may result in an + ADDR_TRAP that is lower than the + ADDR_WATCH..ADDR_WATCH+LEN range. E.g.: + + addr: | 4 | 5 | 6 | 7 | 8 | + |---- range watched ----| + |----------- range accessed ------------| + + In this case, ADDR_TRAP will be 4. + + To match a watchpoint known to GDB core, we must never + report *ADDR_P outside of any ADDR_WATCH..ADDR_WATCH+LEN + range. ADDR_WATCH <= ADDR_TRAP < ADDR_ORIG is a false + positive on kernels older than 4.10. See PR + external/20207. */ + return addr_orig; + } + } + + return (CORE_ADDR) 0; +} + +/* Implementation of linux target ops method "low_stopped_by_watchpoint". */ + +bool +aarch64_target::low_stopped_by_watchpoint () +{ + return (low_stopped_data_address () != 0); +} + +/* Fetch the thread-local storage pointer for libthread_db. */ + +ps_err_e +ps_get_thread_area (struct ps_prochandle *ph, + lwpid_t lwpid, int idx, void **base) +{ + return aarch64_ps_get_thread_area (ph, lwpid, idx, base, + is_64bit_tdesc ()); +} + +/* Implementation of linux target ops method "low_siginfo_fixup". */ + +bool +aarch64_target::low_siginfo_fixup (siginfo_t *native, gdb_byte *inf, + int direction) +{ + /* Is the inferior 32-bit? If so, then fixup the siginfo object. */ + if (!is_64bit_tdesc ()) + { + if (direction == 0) + aarch64_compat_siginfo_from_siginfo ((struct compat_siginfo *) inf, + native); + else + aarch64_siginfo_from_compat_siginfo (native, + (struct compat_siginfo *) inf); + + return true; + } + + return false; +} + +/* Implementation of linux target ops method "low_new_process". */ + +arch_process_info * +aarch64_target::low_new_process () +{ + struct arch_process_info *info = XCNEW (struct arch_process_info); + + aarch64_init_debug_reg_state (&info->debug_reg_state); + + return info; +} + +/* Implementation of linux target ops method "low_delete_process". */ + +void +aarch64_target::low_delete_process (arch_process_info *info) +{ + xfree (info); +} + +void +aarch64_target::low_new_thread (lwp_info *lwp) +{ + aarch64_linux_new_thread (lwp); +} + +void +aarch64_target::low_delete_thread (arch_lwp_info *arch_lwp) +{ + aarch64_linux_delete_thread (arch_lwp); +} + +/* Implementation of linux target ops method "low_new_fork". */ + +void +aarch64_target::low_new_fork (process_info *parent, + process_info *child) +{ + /* These are allocated by linux_add_process. */ + gdb_assert (parent->priv != NULL + && parent->priv->arch_private != NULL); + gdb_assert (child->priv != NULL + && child->priv->arch_private != NULL); + + /* Linux kernel before 2.6.33 commit + 72f674d203cd230426437cdcf7dd6f681dad8b0d + will inherit hardware debug registers from parent + on fork/vfork/clone. Newer Linux kernels create such tasks with + zeroed debug registers. + + GDB core assumes the child inherits the watchpoints/hw + breakpoints of the parent, and will remove them all from the + forked off process. Copy the debug registers mirrors into the + new process so that all breakpoints and watchpoints can be + removed together. The debug registers mirror will become zeroed + in the end before detaching the forked off process, thus making + this compatible with older Linux kernels too. */ + + *child->priv->arch_private = *parent->priv->arch_private; +} + +/* Matches HWCAP_PACA in kernel header arch/arm64/include/uapi/asm/hwcap.h. */ +#define AARCH64_HWCAP_PACA (1 << 30) + +/* Implementation of linux target ops method "low_arch_setup". */ + +void +aarch64_target::low_arch_setup () +{ + unsigned int machine; + int is_elf64; + int tid; + + tid = lwpid_of (current_thread); + + is_elf64 = linux_pid_exe_is_elf_64_file (tid, &machine); + + if (is_elf64) + { + uint64_t vq = aarch64_sve_get_vq (tid); + unsigned long hwcap = linux_get_hwcap (8); + bool pauth_p = hwcap & AARCH64_HWCAP_PACA; + + current_process ()->tdesc = aarch64_linux_read_description (vq, pauth_p); + } + else + current_process ()->tdesc = aarch32_linux_read_description (); + + aarch64_linux_get_debug_reg_capacity (lwpid_of (current_thread)); +} + +/* Wrapper for aarch64_sve_regs_copy_to_reg_buf. */ + +static void +aarch64_sve_regs_copy_to_regcache (struct regcache *regcache, const void *buf) +{ + return aarch64_sve_regs_copy_to_reg_buf (regcache, buf); +} + +/* Wrapper for aarch64_sve_regs_copy_from_reg_buf. */ + +static void +aarch64_sve_regs_copy_from_regcache (struct regcache *regcache, void *buf) +{ + return aarch64_sve_regs_copy_from_reg_buf (regcache, buf); +} + +static struct regset_info aarch64_regsets[] = +{ + { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_PRSTATUS, + sizeof (struct user_pt_regs), GENERAL_REGS, + aarch64_fill_gregset, aarch64_store_gregset }, + { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_FPREGSET, + sizeof (struct user_fpsimd_state), FP_REGS, + aarch64_fill_fpregset, aarch64_store_fpregset + }, + { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_ARM_PAC_MASK, + AARCH64_PAUTH_REGS_SIZE, OPTIONAL_REGS, + NULL, aarch64_store_pauthregset }, + NULL_REGSET +}; + +static struct regsets_info aarch64_regsets_info = + { + aarch64_regsets, /* regsets */ + 0, /* num_regsets */ + NULL, /* disabled_regsets */ + }; + +static struct regs_info regs_info_aarch64 = + { + NULL, /* regset_bitmap */ + NULL, /* usrregs */ + &aarch64_regsets_info, + }; + +static struct regset_info aarch64_sve_regsets[] = +{ + { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_PRSTATUS, + sizeof (struct user_pt_regs), GENERAL_REGS, + aarch64_fill_gregset, aarch64_store_gregset }, + { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_ARM_SVE, + SVE_PT_SIZE (AARCH64_MAX_SVE_VQ, SVE_PT_REGS_SVE), EXTENDED_REGS, + aarch64_sve_regs_copy_from_regcache, aarch64_sve_regs_copy_to_regcache + }, + { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_ARM_PAC_MASK, + AARCH64_PAUTH_REGS_SIZE, OPTIONAL_REGS, + NULL, aarch64_store_pauthregset }, + NULL_REGSET +}; + +static struct regsets_info aarch64_sve_regsets_info = + { + aarch64_sve_regsets, /* regsets. */ + 0, /* num_regsets. */ + NULL, /* disabled_regsets. */ + }; + +static struct regs_info regs_info_aarch64_sve = + { + NULL, /* regset_bitmap. */ + NULL, /* usrregs. */ + &aarch64_sve_regsets_info, + }; + +/* Implementation of linux target ops method "get_regs_info". */ + +const regs_info * +aarch64_target::get_regs_info () +{ + if (!is_64bit_tdesc ()) + return ®s_info_aarch32; + + if (is_sve_tdesc ()) + return ®s_info_aarch64_sve; + + return ®s_info_aarch64; +} + +/* Implementation of target ops method "supports_tracepoints". */ + +bool +aarch64_target::supports_tracepoints () +{ + if (current_thread == NULL) + return true; + else + { + /* We don't support tracepoints on aarch32 now. */ + return is_64bit_tdesc (); + } +} + +/* Implementation of linux target ops method "low_get_thread_area". */ + +int +aarch64_target::low_get_thread_area (int lwpid, CORE_ADDR *addrp) +{ + struct iovec iovec; + uint64_t reg; + + iovec.iov_base = ® + iovec.iov_len = sizeof (reg); + + if (ptrace (PTRACE_GETREGSET, lwpid, NT_ARM_TLS, &iovec) != 0) + return -1; + + *addrp = reg; + + return 0; +} + +bool +aarch64_target::low_supports_catch_syscall () +{ + return true; +} + +/* Implementation of linux target ops method "low_get_syscall_trapinfo". */ + +void +aarch64_target::low_get_syscall_trapinfo (regcache *regcache, int *sysno) +{ + int use_64bit = register_size (regcache->tdesc, 0) == 8; + + if (use_64bit) + { + long l_sysno; + + collect_register_by_name (regcache, "x8", &l_sysno); + *sysno = (int) l_sysno; + } + else + collect_register_by_name (regcache, "r7", sysno); +} + +/* List of condition codes that we need. */ + +enum aarch64_condition_codes +{ + EQ = 0x0, + NE = 0x1, + LO = 0x3, + GE = 0xa, + LT = 0xb, + GT = 0xc, + LE = 0xd, +}; + +enum aarch64_operand_type +{ + OPERAND_IMMEDIATE, + OPERAND_REGISTER, +}; + +/* Representation of an operand. At this time, it only supports register + and immediate types. */ + +struct aarch64_operand +{ + /* Type of the operand. */ + enum aarch64_operand_type type; + + /* Value of the operand according to the type. */ + union + { + uint32_t imm; + struct aarch64_register reg; + }; +}; + +/* List of registers that we are currently using, we can add more here as + we need to use them. */ + +/* General purpose scratch registers (64 bit). */ +static const struct aarch64_register x0 = { 0, 1 }; +static const struct aarch64_register x1 = { 1, 1 }; +static const struct aarch64_register x2 = { 2, 1 }; +static const struct aarch64_register x3 = { 3, 1 }; +static const struct aarch64_register x4 = { 4, 1 }; + +/* General purpose scratch registers (32 bit). */ +static const struct aarch64_register w0 = { 0, 0 }; +static const struct aarch64_register w2 = { 2, 0 }; + +/* Intra-procedure scratch registers. */ +static const struct aarch64_register ip0 = { 16, 1 }; + +/* Special purpose registers. */ +static const struct aarch64_register fp = { 29, 1 }; +static const struct aarch64_register lr = { 30, 1 }; +static const struct aarch64_register sp = { 31, 1 }; +static const struct aarch64_register xzr = { 31, 1 }; + +/* Dynamically allocate a new register. If we know the register + statically, we should make it a global as above instead of using this + helper function. */ + +static struct aarch64_register +aarch64_register (unsigned num, int is64) +{ + return (struct aarch64_register) { num, is64 }; +} + +/* Helper function to create a register operand, for instructions with + different types of operands. + + For example: + p += emit_mov (p, x0, register_operand (x1)); */ + +static struct aarch64_operand +register_operand (struct aarch64_register reg) +{ + struct aarch64_operand operand; + + operand.type = OPERAND_REGISTER; + operand.reg = reg; + + return operand; +} + +/* Helper function to create an immediate operand, for instructions with + different types of operands. + + For example: + p += emit_mov (p, x0, immediate_operand (12)); */ + +static struct aarch64_operand +immediate_operand (uint32_t imm) +{ + struct aarch64_operand operand; + + operand.type = OPERAND_IMMEDIATE; + operand.imm = imm; + + return operand; +} + +/* Helper function to create an offset memory operand. + + For example: + p += emit_ldr (p, x0, sp, offset_memory_operand (16)); */ + +static struct aarch64_memory_operand +offset_memory_operand (int32_t offset) +{ + return (struct aarch64_memory_operand) { MEMORY_OPERAND_OFFSET, offset }; +} + +/* Helper function to create a pre-index memory operand. + + For example: + p += emit_ldr (p, x0, sp, preindex_memory_operand (16)); */ + +static struct aarch64_memory_operand +preindex_memory_operand (int32_t index) +{ + return (struct aarch64_memory_operand) { MEMORY_OPERAND_PREINDEX, index }; +} + +/* Helper function to create a post-index memory operand. + + For example: + p += emit_ldr (p, x0, sp, postindex_memory_operand (16)); */ + +static struct aarch64_memory_operand +postindex_memory_operand (int32_t index) +{ + return (struct aarch64_memory_operand) { MEMORY_OPERAND_POSTINDEX, index }; +} + +/* System control registers. These special registers can be written and + read with the MRS and MSR instructions. + + - NZCV: Condition flags. GDB refers to this register under the CPSR + name. + - FPSR: Floating-point status register. + - FPCR: Floating-point control registers. + - TPIDR_EL0: Software thread ID register. */ + +enum aarch64_system_control_registers +{ + /* op0 op1 crn crm op2 */ + NZCV = (0x1 << 14) | (0x3 << 11) | (0x4 << 7) | (0x2 << 3) | 0x0, + FPSR = (0x1 << 14) | (0x3 << 11) | (0x4 << 7) | (0x4 << 3) | 0x1, + FPCR = (0x1 << 14) | (0x3 << 11) | (0x4 << 7) | (0x4 << 3) | 0x0, + TPIDR_EL0 = (0x1 << 14) | (0x3 << 11) | (0xd << 7) | (0x0 << 3) | 0x2 +}; + +/* Write a BLR instruction into *BUF. + + BLR rn + + RN is the register to branch to. */ + +static int +emit_blr (uint32_t *buf, struct aarch64_register rn) +{ + return aarch64_emit_insn (buf, BLR | ENCODE (rn.num, 5, 5)); +} + +/* Write a RET instruction into *BUF. + + RET xn + + RN is the register to branch to. */ + +static int +emit_ret (uint32_t *buf, struct aarch64_register rn) +{ + return aarch64_emit_insn (buf, RET | ENCODE (rn.num, 5, 5)); +} + +static int +emit_load_store_pair (uint32_t *buf, enum aarch64_opcodes opcode, + struct aarch64_register rt, + struct aarch64_register rt2, + struct aarch64_register rn, + struct aarch64_memory_operand operand) +{ + uint32_t opc; + uint32_t pre_index; + uint32_t write_back; + + if (rt.is64) + opc = ENCODE (2, 2, 30); + else + opc = ENCODE (0, 2, 30); + + switch (operand.type) + { + case MEMORY_OPERAND_OFFSET: + { + pre_index = ENCODE (1, 1, 24); + write_back = ENCODE (0, 1, 23); + break; + } + case MEMORY_OPERAND_POSTINDEX: + { + pre_index = ENCODE (0, 1, 24); + write_back = ENCODE (1, 1, 23); + break; + } + case MEMORY_OPERAND_PREINDEX: + { + pre_index = ENCODE (1, 1, 24); + write_back = ENCODE (1, 1, 23); + break; + } + default: + return 0; + } + + return aarch64_emit_insn (buf, opcode | opc | pre_index | write_back + | ENCODE (operand.index >> 3, 7, 15) + | ENCODE (rt2.num, 5, 10) + | ENCODE (rn.num, 5, 5) | ENCODE (rt.num, 5, 0)); +} + +/* Write a STP instruction into *BUF. + + STP rt, rt2, [rn, #offset] + STP rt, rt2, [rn, #index]! + STP rt, rt2, [rn], #index + + RT and RT2 are the registers to store. + RN is the base address register. + OFFSET is the immediate to add to the base address. It is limited to a + -512 .. 504 range (7 bits << 3). */ + +static int +emit_stp (uint32_t *buf, struct aarch64_register rt, + struct aarch64_register rt2, struct aarch64_register rn, + struct aarch64_memory_operand operand) +{ + return emit_load_store_pair (buf, STP, rt, rt2, rn, operand); +} + +/* Write a LDP instruction into *BUF. + + LDP rt, rt2, [rn, #offset] + LDP rt, rt2, [rn, #index]! + LDP rt, rt2, [rn], #index + + RT and RT2 are the registers to store. + RN is the base address register. + OFFSET is the immediate to add to the base address. It is limited to a + -512 .. 504 range (7 bits << 3). */ + +static int +emit_ldp (uint32_t *buf, struct aarch64_register rt, + struct aarch64_register rt2, struct aarch64_register rn, + struct aarch64_memory_operand operand) +{ + return emit_load_store_pair (buf, LDP, rt, rt2, rn, operand); +} + +/* Write a LDP (SIMD&VFP) instruction using Q registers into *BUF. + + LDP qt, qt2, [rn, #offset] + + RT and RT2 are the Q registers to store. + RN is the base address register. + OFFSET is the immediate to add to the base address. It is limited to + -1024 .. 1008 range (7 bits << 4). */ + +static int +emit_ldp_q_offset (uint32_t *buf, unsigned rt, unsigned rt2, + struct aarch64_register rn, int32_t offset) +{ + uint32_t opc = ENCODE (2, 2, 30); + uint32_t pre_index = ENCODE (1, 1, 24); + + return aarch64_emit_insn (buf, LDP_SIMD_VFP | opc | pre_index + | ENCODE (offset >> 4, 7, 15) + | ENCODE (rt2, 5, 10) + | ENCODE (rn.num, 5, 5) | ENCODE (rt, 5, 0)); +} + +/* Write a STP (SIMD&VFP) instruction using Q registers into *BUF. + + STP qt, qt2, [rn, #offset] + + RT and RT2 are the Q registers to store. + RN is the base address register. + OFFSET is the immediate to add to the base address. It is limited to + -1024 .. 1008 range (7 bits << 4). */ + +static int +emit_stp_q_offset (uint32_t *buf, unsigned rt, unsigned rt2, + struct aarch64_register rn, int32_t offset) +{ + uint32_t opc = ENCODE (2, 2, 30); + uint32_t pre_index = ENCODE (1, 1, 24); + + return aarch64_emit_insn (buf, STP_SIMD_VFP | opc | pre_index + | ENCODE (offset >> 4, 7, 15) + | ENCODE (rt2, 5, 10) + | ENCODE (rn.num, 5, 5) | ENCODE (rt, 5, 0)); +} + +/* Write a LDRH instruction into *BUF. + + LDRH wt, [xn, #offset] + LDRH wt, [xn, #index]! + LDRH wt, [xn], #index + + RT is the register to store. + RN is the base address register. + OFFSET is the immediate to add to the base address. It is limited to + 0 .. 32760 range (12 bits << 3). */ + +static int +emit_ldrh (uint32_t *buf, struct aarch64_register rt, + struct aarch64_register rn, + struct aarch64_memory_operand operand) +{ + return aarch64_emit_load_store (buf, 1, LDR, rt, rn, operand); +} + +/* Write a LDRB instruction into *BUF. + + LDRB wt, [xn, #offset] + LDRB wt, [xn, #index]! + LDRB wt, [xn], #index + + RT is the register to store. + RN is the base address register. + OFFSET is the immediate to add to the base address. It is limited to + 0 .. 32760 range (12 bits << 3). */ + +static int +emit_ldrb (uint32_t *buf, struct aarch64_register rt, + struct aarch64_register rn, + struct aarch64_memory_operand operand) +{ + return aarch64_emit_load_store (buf, 0, LDR, rt, rn, operand); +} + + + +/* Write a STR instruction into *BUF. + + STR rt, [rn, #offset] + STR rt, [rn, #index]! + STR rt, [rn], #index + + RT is the register to store. + RN is the base address register. + OFFSET is the immediate to add to the base address. It is limited to + 0 .. 32760 range (12 bits << 3). */ + +static int +emit_str (uint32_t *buf, struct aarch64_register rt, + struct aarch64_register rn, + struct aarch64_memory_operand operand) +{ + return aarch64_emit_load_store (buf, rt.is64 ? 3 : 2, STR, rt, rn, operand); +} + +/* Helper function emitting an exclusive load or store instruction. */ + +static int +emit_load_store_exclusive (uint32_t *buf, uint32_t size, + enum aarch64_opcodes opcode, + struct aarch64_register rs, + struct aarch64_register rt, + struct aarch64_register rt2, + struct aarch64_register rn) +{ + return aarch64_emit_insn (buf, opcode | ENCODE (size, 2, 30) + | ENCODE (rs.num, 5, 16) | ENCODE (rt2.num, 5, 10) + | ENCODE (rn.num, 5, 5) | ENCODE (rt.num, 5, 0)); +} + +/* Write a LAXR instruction into *BUF. + + LDAXR rt, [xn] + + RT is the destination register. + RN is the base address register. */ + +static int +emit_ldaxr (uint32_t *buf, struct aarch64_register rt, + struct aarch64_register rn) +{ + return emit_load_store_exclusive (buf, rt.is64 ? 3 : 2, LDAXR, xzr, rt, + xzr, rn); +} + +/* Write a STXR instruction into *BUF. + + STXR ws, rt, [xn] + + RS is the result register, it indicates if the store succeeded or not. + RT is the destination register. + RN is the base address register. */ + +static int +emit_stxr (uint32_t *buf, struct aarch64_register rs, + struct aarch64_register rt, struct aarch64_register rn) +{ + return emit_load_store_exclusive (buf, rt.is64 ? 3 : 2, STXR, rs, rt, + xzr, rn); +} + +/* Write a STLR instruction into *BUF. + + STLR rt, [xn] + + RT is the register to store. + RN is the base address register. */ + +static int +emit_stlr (uint32_t *buf, struct aarch64_register rt, + struct aarch64_register rn) +{ + return emit_load_store_exclusive (buf, rt.is64 ? 3 : 2, STLR, xzr, rt, + xzr, rn); +} + +/* Helper function for data processing instructions with register sources. */ + +static int +emit_data_processing_reg (uint32_t *buf, uint32_t opcode, + struct aarch64_register rd, + struct aarch64_register rn, + struct aarch64_register rm) +{ + uint32_t size = ENCODE (rd.is64, 1, 31); + + return aarch64_emit_insn (buf, opcode | size | ENCODE (rm.num, 5, 16) + | ENCODE (rn.num, 5, 5) | ENCODE (rd.num, 5, 0)); +} + +/* Helper function for data processing instructions taking either a register + or an immediate. */ + +static int +emit_data_processing (uint32_t *buf, enum aarch64_opcodes opcode, + struct aarch64_register rd, + struct aarch64_register rn, + struct aarch64_operand operand) +{ + uint32_t size = ENCODE (rd.is64, 1, 31); + /* The opcode is different for register and immediate source operands. */ + uint32_t operand_opcode; + + if (operand.type == OPERAND_IMMEDIATE) + { + /* xxx1 000x xxxx xxxx xxxx xxxx xxxx xxxx */ + operand_opcode = ENCODE (8, 4, 25); + + return aarch64_emit_insn (buf, opcode | operand_opcode | size + | ENCODE (operand.imm, 12, 10) + | ENCODE (rn.num, 5, 5) + | ENCODE (rd.num, 5, 0)); + } + else + { + /* xxx0 101x xxxx xxxx xxxx xxxx xxxx xxxx */ + operand_opcode = ENCODE (5, 4, 25); + + return emit_data_processing_reg (buf, opcode | operand_opcode, rd, + rn, operand.reg); + } +} + +/* Write an ADD instruction into *BUF. + + ADD rd, rn, #imm + ADD rd, rn, rm + + This function handles both an immediate and register add. + + RD is the destination register. + RN is the input register. + OPERAND is the source operand, either of type OPERAND_IMMEDIATE or + OPERAND_REGISTER. */ + +static int +emit_add (uint32_t *buf, struct aarch64_register rd, + struct aarch64_register rn, struct aarch64_operand operand) +{ + return emit_data_processing (buf, ADD, rd, rn, operand); +} + +/* Write a SUB instruction into *BUF. + + SUB rd, rn, #imm + SUB rd, rn, rm + + This function handles both an immediate and register sub. + + RD is the destination register. + RN is the input register. + IMM is the immediate to substract to RN. */ + +static int +emit_sub (uint32_t *buf, struct aarch64_register rd, + struct aarch64_register rn, struct aarch64_operand operand) +{ + return emit_data_processing (buf, SUB, rd, rn, operand); +} + +/* Write a MOV instruction into *BUF. + + MOV rd, #imm + MOV rd, rm + + This function handles both a wide immediate move and a register move, + with the condition that the source register is not xzr. xzr and the + stack pointer share the same encoding and this function only supports + the stack pointer. + + RD is the destination register. + OPERAND is the source operand, either of type OPERAND_IMMEDIATE or + OPERAND_REGISTER. */ + +static int +emit_mov (uint32_t *buf, struct aarch64_register rd, + struct aarch64_operand operand) +{ + if (operand.type == OPERAND_IMMEDIATE) + { + uint32_t size = ENCODE (rd.is64, 1, 31); + /* Do not shift the immediate. */ + uint32_t shift = ENCODE (0, 2, 21); + + return aarch64_emit_insn (buf, MOV | size | shift + | ENCODE (operand.imm, 16, 5) + | ENCODE (rd.num, 5, 0)); + } + else + return emit_add (buf, rd, operand.reg, immediate_operand (0)); +} + +/* Write a MOVK instruction into *BUF. + + MOVK rd, #imm, lsl #shift + + RD is the destination register. + IMM is the immediate. + SHIFT is the logical shift left to apply to IMM. */ + +static int +emit_movk (uint32_t *buf, struct aarch64_register rd, uint32_t imm, + unsigned shift) +{ + uint32_t size = ENCODE (rd.is64, 1, 31); + + return aarch64_emit_insn (buf, MOVK | size | ENCODE (shift, 2, 21) | + ENCODE (imm, 16, 5) | ENCODE (rd.num, 5, 0)); +} + +/* Write instructions into *BUF in order to move ADDR into a register. + ADDR can be a 64-bit value. + + This function will emit a series of MOV and MOVK instructions, such as: + + MOV xd, #(addr) + MOVK xd, #(addr >> 16), lsl #16 + MOVK xd, #(addr >> 32), lsl #32 + MOVK xd, #(addr >> 48), lsl #48 */ + +static int +emit_mov_addr (uint32_t *buf, struct aarch64_register rd, CORE_ADDR addr) +{ + uint32_t *p = buf; + + /* The MOV (wide immediate) instruction clears to top bits of the + register. */ + p += emit_mov (p, rd, immediate_operand (addr & 0xffff)); + + if ((addr >> 16) != 0) + p += emit_movk (p, rd, (addr >> 16) & 0xffff, 1); + else + return p - buf; + + if ((addr >> 32) != 0) + p += emit_movk (p, rd, (addr >> 32) & 0xffff, 2); + else + return p - buf; + + if ((addr >> 48) != 0) + p += emit_movk (p, rd, (addr >> 48) & 0xffff, 3); + + return p - buf; +} + +/* Write a SUBS instruction into *BUF. + + SUBS rd, rn, rm + + This instruction update the condition flags. + + RD is the destination register. + RN and RM are the source registers. */ + +static int +emit_subs (uint32_t *buf, struct aarch64_register rd, + struct aarch64_register rn, struct aarch64_operand operand) +{ + return emit_data_processing (buf, SUBS, rd, rn, operand); +} + +/* Write a CMP instruction into *BUF. + + CMP rn, rm + + This instruction is an alias of SUBS xzr, rn, rm. + + RN and RM are the registers to compare. */ + +static int +emit_cmp (uint32_t *buf, struct aarch64_register rn, + struct aarch64_operand operand) +{ + return emit_subs (buf, xzr, rn, operand); +} + +/* Write a AND instruction into *BUF. + + AND rd, rn, rm + + RD is the destination register. + RN and RM are the source registers. */ + +static int +emit_and (uint32_t *buf, struct aarch64_register rd, + struct aarch64_register rn, struct aarch64_register rm) +{ + return emit_data_processing_reg (buf, AND, rd, rn, rm); +} + +/* Write a ORR instruction into *BUF. + + ORR rd, rn, rm + + RD is the destination register. + RN and RM are the source registers. */ + +static int +emit_orr (uint32_t *buf, struct aarch64_register rd, + struct aarch64_register rn, struct aarch64_register rm) +{ + return emit_data_processing_reg (buf, ORR, rd, rn, rm); +} + +/* Write a ORN instruction into *BUF. + + ORN rd, rn, rm + + RD is the destination register. + RN and RM are the source registers. */ + +static int +emit_orn (uint32_t *buf, struct aarch64_register rd, + struct aarch64_register rn, struct aarch64_register rm) +{ + return emit_data_processing_reg (buf, ORN, rd, rn, rm); +} + +/* Write a EOR instruction into *BUF. + + EOR rd, rn, rm + + RD is the destination register. + RN and RM are the source registers. */ + +static int +emit_eor (uint32_t *buf, struct aarch64_register rd, + struct aarch64_register rn, struct aarch64_register rm) +{ + return emit_data_processing_reg (buf, EOR, rd, rn, rm); +} + +/* Write a MVN instruction into *BUF. + + MVN rd, rm + + This is an alias for ORN rd, xzr, rm. + + RD is the destination register. + RM is the source register. */ + +static int +emit_mvn (uint32_t *buf, struct aarch64_register rd, + struct aarch64_register rm) +{ + return emit_orn (buf, rd, xzr, rm); +} + +/* Write a LSLV instruction into *BUF. + + LSLV rd, rn, rm + + RD is the destination register. + RN and RM are the source registers. */ + +static int +emit_lslv (uint32_t *buf, struct aarch64_register rd, + struct aarch64_register rn, struct aarch64_register rm) +{ + return emit_data_processing_reg (buf, LSLV, rd, rn, rm); +} + +/* Write a LSRV instruction into *BUF. + + LSRV rd, rn, rm + + RD is the destination register. + RN and RM are the source registers. */ + +static int +emit_lsrv (uint32_t *buf, struct aarch64_register rd, + struct aarch64_register rn, struct aarch64_register rm) +{ + return emit_data_processing_reg (buf, LSRV, rd, rn, rm); +} + +/* Write a ASRV instruction into *BUF. + + ASRV rd, rn, rm + + RD is the destination register. + RN and RM are the source registers. */ + +static int +emit_asrv (uint32_t *buf, struct aarch64_register rd, + struct aarch64_register rn, struct aarch64_register rm) +{ + return emit_data_processing_reg (buf, ASRV, rd, rn, rm); +} + +/* Write a MUL instruction into *BUF. + + MUL rd, rn, rm + + RD is the destination register. + RN and RM are the source registers. */ + +static int +emit_mul (uint32_t *buf, struct aarch64_register rd, + struct aarch64_register rn, struct aarch64_register rm) +{ + return emit_data_processing_reg (buf, MUL, rd, rn, rm); +} + +/* Write a MRS instruction into *BUF. The register size is 64-bit. + + MRS xt, system_reg + + RT is the destination register. + SYSTEM_REG is special purpose register to read. */ + +static int +emit_mrs (uint32_t *buf, struct aarch64_register rt, + enum aarch64_system_control_registers system_reg) +{ + return aarch64_emit_insn (buf, MRS | ENCODE (system_reg, 15, 5) + | ENCODE (rt.num, 5, 0)); +} + +/* Write a MSR instruction into *BUF. The register size is 64-bit. + + MSR system_reg, xt + + SYSTEM_REG is special purpose register to write. + RT is the input register. */ + +static int +emit_msr (uint32_t *buf, enum aarch64_system_control_registers system_reg, + struct aarch64_register rt) +{ + return aarch64_emit_insn (buf, MSR | ENCODE (system_reg, 15, 5) + | ENCODE (rt.num, 5, 0)); +} + +/* Write a SEVL instruction into *BUF. + + This is a hint instruction telling the hardware to trigger an event. */ + +static int +emit_sevl (uint32_t *buf) +{ + return aarch64_emit_insn (buf, SEVL); +} + +/* Write a WFE instruction into *BUF. + + This is a hint instruction telling the hardware to wait for an event. */ + +static int +emit_wfe (uint32_t *buf) +{ + return aarch64_emit_insn (buf, WFE); +} + +/* Write a SBFM instruction into *BUF. + + SBFM rd, rn, #immr, #imms + + This instruction moves the bits from #immr to #imms into the + destination, sign extending the result. + + RD is the destination register. + RN is the source register. + IMMR is the bit number to start at (least significant bit). + IMMS is the bit number to stop at (most significant bit). */ + +static int +emit_sbfm (uint32_t *buf, struct aarch64_register rd, + struct aarch64_register rn, uint32_t immr, uint32_t imms) +{ + uint32_t size = ENCODE (rd.is64, 1, 31); + uint32_t n = ENCODE (rd.is64, 1, 22); + + return aarch64_emit_insn (buf, SBFM | size | n | ENCODE (immr, 6, 16) + | ENCODE (imms, 6, 10) | ENCODE (rn.num, 5, 5) + | ENCODE (rd.num, 5, 0)); +} + +/* Write a SBFX instruction into *BUF. + + SBFX rd, rn, #lsb, #width + + This instruction moves #width bits from #lsb into the destination, sign + extending the result. This is an alias for: + + SBFM rd, rn, #lsb, #(lsb + width - 1) + + RD is the destination register. + RN is the source register. + LSB is the bit number to start at (least significant bit). + WIDTH is the number of bits to move. */ + +static int +emit_sbfx (uint32_t *buf, struct aarch64_register rd, + struct aarch64_register rn, uint32_t lsb, uint32_t width) +{ + return emit_sbfm (buf, rd, rn, lsb, lsb + width - 1); +} + +/* Write a UBFM instruction into *BUF. + + UBFM rd, rn, #immr, #imms + + This instruction moves the bits from #immr to #imms into the + destination, extending the result with zeros. + + RD is the destination register. + RN is the source register. + IMMR is the bit number to start at (least significant bit). + IMMS is the bit number to stop at (most significant bit). */ + +static int +emit_ubfm (uint32_t *buf, struct aarch64_register rd, + struct aarch64_register rn, uint32_t immr, uint32_t imms) +{ + uint32_t size = ENCODE (rd.is64, 1, 31); + uint32_t n = ENCODE (rd.is64, 1, 22); + + return aarch64_emit_insn (buf, UBFM | size | n | ENCODE (immr, 6, 16) + | ENCODE (imms, 6, 10) | ENCODE (rn.num, 5, 5) + | ENCODE (rd.num, 5, 0)); +} + +/* Write a UBFX instruction into *BUF. + + UBFX rd, rn, #lsb, #width + + This instruction moves #width bits from #lsb into the destination, + extending the result with zeros. This is an alias for: + + UBFM rd, rn, #lsb, #(lsb + width - 1) + + RD is the destination register. + RN is the source register. + LSB is the bit number to start at (least significant bit). + WIDTH is the number of bits to move. */ + +static int +emit_ubfx (uint32_t *buf, struct aarch64_register rd, + struct aarch64_register rn, uint32_t lsb, uint32_t width) +{ + return emit_ubfm (buf, rd, rn, lsb, lsb + width - 1); +} + +/* Write a CSINC instruction into *BUF. + + CSINC rd, rn, rm, cond + + This instruction conditionally increments rn or rm and places the result + in rd. rn is chosen is the condition is true. + + RD is the destination register. + RN and RM are the source registers. + COND is the encoded condition. */ + +static int +emit_csinc (uint32_t *buf, struct aarch64_register rd, + struct aarch64_register rn, struct aarch64_register rm, + unsigned cond) +{ + uint32_t size = ENCODE (rd.is64, 1, 31); + + return aarch64_emit_insn (buf, CSINC | size | ENCODE (rm.num, 5, 16) + | ENCODE (cond, 4, 12) | ENCODE (rn.num, 5, 5) + | ENCODE (rd.num, 5, 0)); +} + +/* Write a CSET instruction into *BUF. + + CSET rd, cond + + This instruction conditionally write 1 or 0 in the destination register. + 1 is written if the condition is true. This is an alias for: + + CSINC rd, xzr, xzr, !cond + + Note that the condition needs to be inverted. + + RD is the destination register. + RN and RM are the source registers. + COND is the encoded condition. */ + +static int +emit_cset (uint32_t *buf, struct aarch64_register rd, unsigned cond) +{ + /* The least significant bit of the condition needs toggling in order to + invert it. */ + return emit_csinc (buf, rd, xzr, xzr, cond ^ 0x1); +} + +/* Write LEN instructions from BUF into the inferior memory at *TO. + + Note instructions are always little endian on AArch64, unlike data. */ + +static void +append_insns (CORE_ADDR *to, size_t len, const uint32_t *buf) +{ + size_t byte_len = len * sizeof (uint32_t); +#if (__BYTE_ORDER == __BIG_ENDIAN) + uint32_t *le_buf = (uint32_t *) xmalloc (byte_len); + size_t i; + + for (i = 0; i < len; i++) + le_buf[i] = htole32 (buf[i]); + + target_write_memory (*to, (const unsigned char *) le_buf, byte_len); + + xfree (le_buf); +#else + target_write_memory (*to, (const unsigned char *) buf, byte_len); +#endif + + *to += byte_len; +} + +/* Sub-class of struct aarch64_insn_data, store information of + instruction relocation for fast tracepoint. Visitor can + relocate an instruction from BASE.INSN_ADDR to NEW_ADDR and save + the relocated instructions in buffer pointed by INSN_PTR. */ + +struct aarch64_insn_relocation_data +{ + struct aarch64_insn_data base; + + /* The new address the instruction is relocated to. */ + CORE_ADDR new_addr; + /* Pointer to the buffer of relocated instruction(s). */ + uint32_t *insn_ptr; +}; + +/* Implementation of aarch64_insn_visitor method "b". */ + +static void +aarch64_ftrace_insn_reloc_b (const int is_bl, const int32_t offset, + struct aarch64_insn_data *data) +{ + struct aarch64_insn_relocation_data *insn_reloc + = (struct aarch64_insn_relocation_data *) data; + int64_t new_offset + = insn_reloc->base.insn_addr - insn_reloc->new_addr + offset; + + if (can_encode_int32 (new_offset, 28)) + insn_reloc->insn_ptr += emit_b (insn_reloc->insn_ptr, is_bl, new_offset); +} + +/* Implementation of aarch64_insn_visitor method "b_cond". */ + +static void +aarch64_ftrace_insn_reloc_b_cond (const unsigned cond, const int32_t offset, + struct aarch64_insn_data *data) +{ + struct aarch64_insn_relocation_data *insn_reloc + = (struct aarch64_insn_relocation_data *) data; + int64_t new_offset + = insn_reloc->base.insn_addr - insn_reloc->new_addr + offset; + + if (can_encode_int32 (new_offset, 21)) + { + insn_reloc->insn_ptr += emit_bcond (insn_reloc->insn_ptr, cond, + new_offset); + } + else if (can_encode_int32 (new_offset, 28)) + { + /* The offset is out of range for a conditional branch + instruction but not for a unconditional branch. We can use + the following instructions instead: + + B.COND TAKEN ; If cond is true, then jump to TAKEN. + B NOT_TAKEN ; Else jump over TAKEN and continue. + TAKEN: + B #(offset - 8) + NOT_TAKEN: + + */ + + insn_reloc->insn_ptr += emit_bcond (insn_reloc->insn_ptr, cond, 8); + insn_reloc->insn_ptr += emit_b (insn_reloc->insn_ptr, 0, 8); + insn_reloc->insn_ptr += emit_b (insn_reloc->insn_ptr, 0, new_offset - 8); + } +} + +/* Implementation of aarch64_insn_visitor method "cb". */ + +static void +aarch64_ftrace_insn_reloc_cb (const int32_t offset, const int is_cbnz, + const unsigned rn, int is64, + struct aarch64_insn_data *data) +{ + struct aarch64_insn_relocation_data *insn_reloc + = (struct aarch64_insn_relocation_data *) data; + int64_t new_offset + = insn_reloc->base.insn_addr - insn_reloc->new_addr + offset; + + if (can_encode_int32 (new_offset, 21)) + { + insn_reloc->insn_ptr += emit_cb (insn_reloc->insn_ptr, is_cbnz, + aarch64_register (rn, is64), new_offset); + } + else if (can_encode_int32 (new_offset, 28)) + { + /* The offset is out of range for a compare and branch + instruction but not for a unconditional branch. We can use + the following instructions instead: + + CBZ xn, TAKEN ; xn == 0, then jump to TAKEN. + B NOT_TAKEN ; Else jump over TAKEN and continue. + TAKEN: + B #(offset - 8) + NOT_TAKEN: + + */ + insn_reloc->insn_ptr += emit_cb (insn_reloc->insn_ptr, is_cbnz, + aarch64_register (rn, is64), 8); + insn_reloc->insn_ptr += emit_b (insn_reloc->insn_ptr, 0, 8); + insn_reloc->insn_ptr += emit_b (insn_reloc->insn_ptr, 0, new_offset - 8); + } +} + +/* Implementation of aarch64_insn_visitor method "tb". */ + +static void +aarch64_ftrace_insn_reloc_tb (const int32_t offset, int is_tbnz, + const unsigned rt, unsigned bit, + struct aarch64_insn_data *data) +{ + struct aarch64_insn_relocation_data *insn_reloc + = (struct aarch64_insn_relocation_data *) data; + int64_t new_offset + = insn_reloc->base.insn_addr - insn_reloc->new_addr + offset; + + if (can_encode_int32 (new_offset, 16)) + { + insn_reloc->insn_ptr += emit_tb (insn_reloc->insn_ptr, is_tbnz, bit, + aarch64_register (rt, 1), new_offset); + } + else if (can_encode_int32 (new_offset, 28)) + { + /* The offset is out of range for a test bit and branch + instruction but not for a unconditional branch. We can use + the following instructions instead: + + TBZ xn, #bit, TAKEN ; xn[bit] == 0, then jump to TAKEN. + B NOT_TAKEN ; Else jump over TAKEN and continue. + TAKEN: + B #(offset - 8) + NOT_TAKEN: + + */ + insn_reloc->insn_ptr += emit_tb (insn_reloc->insn_ptr, is_tbnz, bit, + aarch64_register (rt, 1), 8); + insn_reloc->insn_ptr += emit_b (insn_reloc->insn_ptr, 0, 8); + insn_reloc->insn_ptr += emit_b (insn_reloc->insn_ptr, 0, + new_offset - 8); + } +} + +/* Implementation of aarch64_insn_visitor method "adr". */ + +static void +aarch64_ftrace_insn_reloc_adr (const int32_t offset, const unsigned rd, + const int is_adrp, + struct aarch64_insn_data *data) +{ + struct aarch64_insn_relocation_data *insn_reloc + = (struct aarch64_insn_relocation_data *) data; + /* We know exactly the address the ADR{P,} instruction will compute. + We can just write it to the destination register. */ + CORE_ADDR address = data->insn_addr + offset; + + if (is_adrp) + { + /* Clear the lower 12 bits of the offset to get the 4K page. */ + insn_reloc->insn_ptr += emit_mov_addr (insn_reloc->insn_ptr, + aarch64_register (rd, 1), + address & ~0xfff); + } + else + insn_reloc->insn_ptr += emit_mov_addr (insn_reloc->insn_ptr, + aarch64_register (rd, 1), address); +} + +/* Implementation of aarch64_insn_visitor method "ldr_literal". */ + +static void +aarch64_ftrace_insn_reloc_ldr_literal (const int32_t offset, const int is_sw, + const unsigned rt, const int is64, + struct aarch64_insn_data *data) +{ + struct aarch64_insn_relocation_data *insn_reloc + = (struct aarch64_insn_relocation_data *) data; + CORE_ADDR address = data->insn_addr + offset; + + insn_reloc->insn_ptr += emit_mov_addr (insn_reloc->insn_ptr, + aarch64_register (rt, 1), address); + + /* We know exactly what address to load from, and what register we + can use: + + MOV xd, #(oldloc + offset) + MOVK xd, #((oldloc + offset) >> 16), lsl #16 + ... + + LDR xd, [xd] ; or LDRSW xd, [xd] + + */ + + if (is_sw) + insn_reloc->insn_ptr += emit_ldrsw (insn_reloc->insn_ptr, + aarch64_register (rt, 1), + aarch64_register (rt, 1), + offset_memory_operand (0)); + else + insn_reloc->insn_ptr += emit_ldr (insn_reloc->insn_ptr, + aarch64_register (rt, is64), + aarch64_register (rt, 1), + offset_memory_operand (0)); +} + +/* Implementation of aarch64_insn_visitor method "others". */ + +static void +aarch64_ftrace_insn_reloc_others (const uint32_t insn, + struct aarch64_insn_data *data) +{ + struct aarch64_insn_relocation_data *insn_reloc + = (struct aarch64_insn_relocation_data *) data; + + /* The instruction is not PC relative. Just re-emit it at the new + location. */ + insn_reloc->insn_ptr += aarch64_emit_insn (insn_reloc->insn_ptr, insn); +} + +static const struct aarch64_insn_visitor visitor = +{ + aarch64_ftrace_insn_reloc_b, + aarch64_ftrace_insn_reloc_b_cond, + aarch64_ftrace_insn_reloc_cb, + aarch64_ftrace_insn_reloc_tb, + aarch64_ftrace_insn_reloc_adr, + aarch64_ftrace_insn_reloc_ldr_literal, + aarch64_ftrace_insn_reloc_others, +}; + +bool +aarch64_target::supports_fast_tracepoints () +{ + return true; +} + +/* Implementation of target ops method + "install_fast_tracepoint_jump_pad". */ + +int +aarch64_target::install_fast_tracepoint_jump_pad + (CORE_ADDR tpoint, CORE_ADDR tpaddr, CORE_ADDR collector, + CORE_ADDR lockaddr, ULONGEST orig_size, CORE_ADDR *jump_entry, + CORE_ADDR *trampoline, ULONGEST *trampoline_size, + unsigned char *jjump_pad_insn, ULONGEST *jjump_pad_insn_size, + CORE_ADDR *adjusted_insn_addr, CORE_ADDR *adjusted_insn_addr_end, + char *err) +{ + uint32_t buf[256]; + uint32_t *p = buf; + int64_t offset; + int i; + uint32_t insn; + CORE_ADDR buildaddr = *jump_entry; + struct aarch64_insn_relocation_data insn_data; + + /* We need to save the current state on the stack both to restore it + later and to collect register values when the tracepoint is hit. + + The saved registers are pushed in a layout that needs to be in sync + with aarch64_ft_collect_regmap (see linux-aarch64-ipa.c). Later on + the supply_fast_tracepoint_registers function will fill in the + register cache from a pointer to saved registers on the stack we build + here. + + For simplicity, we set the size of each cell on the stack to 16 bytes. + This way one cell can hold any register type, from system registers + to the 128 bit SIMD&FP registers. Furthermore, the stack pointer + has to be 16 bytes aligned anyway. + + Note that the CPSR register does not exist on AArch64. Instead we + can access system bits describing the process state with the + MRS/MSR instructions, namely the condition flags. We save them as + if they are part of a CPSR register because that's how GDB + interprets these system bits. At the moment, only the condition + flags are saved in CPSR (NZCV). + + Stack layout, each cell is 16 bytes (descending): + + High *-------- SIMD&FP registers from 31 down to 0. --------* + | q31 | + . . + . . 32 cells + . . + | q0 | + *---- General purpose registers from 30 down to 0. ----* + | x30 | + . . + . . 31 cells + . . + | x0 | + *------------- Special purpose registers. -------------* + | SP | + | PC | + | CPSR (NZCV) | 5 cells + | FPSR | + | FPCR | <- SP + 16 + *------------- collecting_t object --------------------* + | TPIDR_EL0 | struct tracepoint * | + Low *------------------------------------------------------* + + After this stack is set up, we issue a call to the collector, passing + it the saved registers at (SP + 16). */ + + /* Push SIMD&FP registers on the stack: + + SUB sp, sp, #(32 * 16) + + STP q30, q31, [sp, #(30 * 16)] + ... + STP q0, q1, [sp] + + */ + p += emit_sub (p, sp, sp, immediate_operand (32 * 16)); + for (i = 30; i >= 0; i -= 2) + p += emit_stp_q_offset (p, i, i + 1, sp, i * 16); + + /* Push general purpose registers on the stack. Note that we do not need + to push x31 as it represents the xzr register and not the stack + pointer in a STR instruction. + + SUB sp, sp, #(31 * 16) + + STR x30, [sp, #(30 * 16)] + ... + STR x0, [sp] + + */ + p += emit_sub (p, sp, sp, immediate_operand (31 * 16)); + for (i = 30; i >= 0; i -= 1) + p += emit_str (p, aarch64_register (i, 1), sp, + offset_memory_operand (i * 16)); + + /* Make space for 5 more cells. + + SUB sp, sp, #(5 * 16) + + */ + p += emit_sub (p, sp, sp, immediate_operand (5 * 16)); + + + /* Save SP: + + ADD x4, sp, #((32 + 31 + 5) * 16) + STR x4, [sp, #(4 * 16)] + + */ + p += emit_add (p, x4, sp, immediate_operand ((32 + 31 + 5) * 16)); + p += emit_str (p, x4, sp, offset_memory_operand (4 * 16)); + + /* Save PC (tracepoint address): + + MOV x3, #(tpaddr) + ... + + STR x3, [sp, #(3 * 16)] + + */ + + p += emit_mov_addr (p, x3, tpaddr); + p += emit_str (p, x3, sp, offset_memory_operand (3 * 16)); + + /* Save CPSR (NZCV), FPSR and FPCR: + + MRS x2, nzcv + MRS x1, fpsr + MRS x0, fpcr + + STR x2, [sp, #(2 * 16)] + STR x1, [sp, #(1 * 16)] + STR x0, [sp, #(0 * 16)] + + */ + p += emit_mrs (p, x2, NZCV); + p += emit_mrs (p, x1, FPSR); + p += emit_mrs (p, x0, FPCR); + p += emit_str (p, x2, sp, offset_memory_operand (2 * 16)); + p += emit_str (p, x1, sp, offset_memory_operand (1 * 16)); + p += emit_str (p, x0, sp, offset_memory_operand (0 * 16)); + + /* Push the collecting_t object. It consist of the address of the + tracepoint and an ID for the current thread. We get the latter by + reading the tpidr_el0 system register. It corresponds to the + NT_ARM_TLS register accessible with ptrace. + + MOV x0, #(tpoint) + ... + + MRS x1, tpidr_el0 + + STP x0, x1, [sp, #-16]! + + */ + + p += emit_mov_addr (p, x0, tpoint); + p += emit_mrs (p, x1, TPIDR_EL0); + p += emit_stp (p, x0, x1, sp, preindex_memory_operand (-16)); + + /* Spin-lock: + + The shared memory for the lock is at lockaddr. It will hold zero + if no-one is holding the lock, otherwise it contains the address of + the collecting_t object on the stack of the thread which acquired it. + + At this stage, the stack pointer points to this thread's collecting_t + object. + + We use the following registers: + - x0: Address of the lock. + - x1: Pointer to collecting_t object. + - x2: Scratch register. + + MOV x0, #(lockaddr) + ... + MOV x1, sp + + ; Trigger an event local to this core. So the following WFE + ; instruction is ignored. + SEVL + again: + ; Wait for an event. The event is triggered by either the SEVL + ; or STLR instructions (store release). + WFE + + ; Atomically read at lockaddr. This marks the memory location as + ; exclusive. This instruction also has memory constraints which + ; make sure all previous data reads and writes are done before + ; executing it. + LDAXR x2, [x0] + + ; Try again if another thread holds the lock. + CBNZ x2, again + + ; We can lock it! Write the address of the collecting_t object. + ; This instruction will fail if the memory location is not marked + ; as exclusive anymore. If it succeeds, it will remove the + ; exclusive mark on the memory location. This way, if another + ; thread executes this instruction before us, we will fail and try + ; all over again. + STXR w2, x1, [x0] + CBNZ w2, again + + */ + + p += emit_mov_addr (p, x0, lockaddr); + p += emit_mov (p, x1, register_operand (sp)); + + p += emit_sevl (p); + p += emit_wfe (p); + p += emit_ldaxr (p, x2, x0); + p += emit_cb (p, 1, w2, -2 * 4); + p += emit_stxr (p, w2, x1, x0); + p += emit_cb (p, 1, x2, -4 * 4); + + /* Call collector (struct tracepoint *, unsigned char *): + + MOV x0, #(tpoint) + ... + + ; Saved registers start after the collecting_t object. + ADD x1, sp, #16 + + ; We use an intra-procedure-call scratch register. + MOV ip0, #(collector) + ... + + ; And call back to C! + BLR ip0 + + */ + + p += emit_mov_addr (p, x0, tpoint); + p += emit_add (p, x1, sp, immediate_operand (16)); + + p += emit_mov_addr (p, ip0, collector); + p += emit_blr (p, ip0); + + /* Release the lock. + + MOV x0, #(lockaddr) + ... + + ; This instruction is a normal store with memory ordering + ; constraints. Thanks to this we do not have to put a data + ; barrier instruction to make sure all data read and writes are done + ; before this instruction is executed. Furthermore, this instruction + ; will trigger an event, letting other threads know they can grab + ; the lock. + STLR xzr, [x0] + + */ + p += emit_mov_addr (p, x0, lockaddr); + p += emit_stlr (p, xzr, x0); + + /* Free collecting_t object: + + ADD sp, sp, #16 + + */ + p += emit_add (p, sp, sp, immediate_operand (16)); + + /* Restore CPSR (NZCV), FPSR and FPCR. And free all special purpose + registers from the stack. + + LDR x2, [sp, #(2 * 16)] + LDR x1, [sp, #(1 * 16)] + LDR x0, [sp, #(0 * 16)] + + MSR NZCV, x2 + MSR FPSR, x1 + MSR FPCR, x0 + + ADD sp, sp #(5 * 16) + + */ + p += emit_ldr (p, x2, sp, offset_memory_operand (2 * 16)); + p += emit_ldr (p, x1, sp, offset_memory_operand (1 * 16)); + p += emit_ldr (p, x0, sp, offset_memory_operand (0 * 16)); + p += emit_msr (p, NZCV, x2); + p += emit_msr (p, FPSR, x1); + p += emit_msr (p, FPCR, x0); + + p += emit_add (p, sp, sp, immediate_operand (5 * 16)); + + /* Pop general purpose registers: + + LDR x0, [sp] + ... + LDR x30, [sp, #(30 * 16)] + + ADD sp, sp, #(31 * 16) + + */ + for (i = 0; i <= 30; i += 1) + p += emit_ldr (p, aarch64_register (i, 1), sp, + offset_memory_operand (i * 16)); + p += emit_add (p, sp, sp, immediate_operand (31 * 16)); + + /* Pop SIMD&FP registers: + + LDP q0, q1, [sp] + ... + LDP q30, q31, [sp, #(30 * 16)] + + ADD sp, sp, #(32 * 16) + + */ + for (i = 0; i <= 30; i += 2) + p += emit_ldp_q_offset (p, i, i + 1, sp, i * 16); + p += emit_add (p, sp, sp, immediate_operand (32 * 16)); + + /* Write the code into the inferior memory. */ + append_insns (&buildaddr, p - buf, buf); + + /* Now emit the relocated instruction. */ + *adjusted_insn_addr = buildaddr; + target_read_uint32 (tpaddr, &insn); + + insn_data.base.insn_addr = tpaddr; + insn_data.new_addr = buildaddr; + insn_data.insn_ptr = buf; + + aarch64_relocate_instruction (insn, &visitor, + (struct aarch64_insn_data *) &insn_data); + + /* We may not have been able to relocate the instruction. */ + if (insn_data.insn_ptr == buf) + { + sprintf (err, + "E.Could not relocate instruction from %s to %s.", + core_addr_to_string_nz (tpaddr), + core_addr_to_string_nz (buildaddr)); + return 1; + } + else + append_insns (&buildaddr, insn_data.insn_ptr - buf, buf); + *adjusted_insn_addr_end = buildaddr; + + /* Go back to the start of the buffer. */ + p = buf; + + /* Emit a branch back from the jump pad. */ + offset = (tpaddr + orig_size - buildaddr); + if (!can_encode_int32 (offset, 28)) + { + sprintf (err, + "E.Jump back from jump pad too far from tracepoint " + "(offset 0x%" PRIx64 " cannot be encoded in 28 bits).", + offset); + return 1; + } + + p += emit_b (p, 0, offset); + append_insns (&buildaddr, p - buf, buf); + + /* Give the caller a branch instruction into the jump pad. */ + offset = (*jump_entry - tpaddr); + if (!can_encode_int32 (offset, 28)) + { + sprintf (err, + "E.Jump pad too far from tracepoint " + "(offset 0x%" PRIx64 " cannot be encoded in 28 bits).", + offset); + return 1; + } + + emit_b ((uint32_t *) jjump_pad_insn, 0, offset); + *jjump_pad_insn_size = 4; + + /* Return the end address of our pad. */ + *jump_entry = buildaddr; + + return 0; +} + +/* Helper function writing LEN instructions from START into + current_insn_ptr. */ + +static void +emit_ops_insns (const uint32_t *start, int len) +{ + CORE_ADDR buildaddr = current_insn_ptr; + + if (debug_threads) + debug_printf ("Adding %d instrucions at %s\n", + len, paddress (buildaddr)); + + append_insns (&buildaddr, len, start); + current_insn_ptr = buildaddr; +} + +/* Pop a register from the stack. */ + +static int +emit_pop (uint32_t *buf, struct aarch64_register rt) +{ + return emit_ldr (buf, rt, sp, postindex_memory_operand (1 * 16)); +} + +/* Push a register on the stack. */ + +static int +emit_push (uint32_t *buf, struct aarch64_register rt) +{ + return emit_str (buf, rt, sp, preindex_memory_operand (-1 * 16)); +} + +/* Implementation of emit_ops method "emit_prologue". */ + +static void +aarch64_emit_prologue (void) +{ + uint32_t buf[16]; + uint32_t *p = buf; + + /* This function emit a prologue for the following function prototype: + + enum eval_result_type f (unsigned char *regs, + ULONGEST *value); + + The first argument is a buffer of raw registers. The second + argument is the result of + evaluating the expression, which will be set to whatever is on top of + the stack at the end. + + The stack set up by the prologue is as such: + + High *------------------------------------------------------* + | LR | + | FP | <- FP + | x1 (ULONGEST *value) | + | x0 (unsigned char *regs) | + Low *------------------------------------------------------* + + As we are implementing a stack machine, each opcode can expand the + stack so we never know how far we are from the data saved by this + prologue. In order to be able refer to value and regs later, we save + the current stack pointer in the frame pointer. This way, it is not + clobbered when calling C functions. + + Finally, throughout every operation, we are using register x0 as the + top of the stack, and x1 as a scratch register. */ + + p += emit_stp (p, x0, x1, sp, preindex_memory_operand (-2 * 16)); + p += emit_str (p, lr, sp, offset_memory_operand (3 * 8)); + p += emit_str (p, fp, sp, offset_memory_operand (2 * 8)); + + p += emit_add (p, fp, sp, immediate_operand (2 * 8)); + + + emit_ops_insns (buf, p - buf); +} + +/* Implementation of emit_ops method "emit_epilogue". */ + +static void +aarch64_emit_epilogue (void) +{ + uint32_t buf[16]; + uint32_t *p = buf; + + /* Store the result of the expression (x0) in *value. */ + p += emit_sub (p, x1, fp, immediate_operand (1 * 8)); + p += emit_ldr (p, x1, x1, offset_memory_operand (0)); + p += emit_str (p, x0, x1, offset_memory_operand (0)); + + /* Restore the previous state. */ + p += emit_add (p, sp, fp, immediate_operand (2 * 8)); + p += emit_ldp (p, fp, lr, fp, offset_memory_operand (0)); + + /* Return expr_eval_no_error. */ + p += emit_mov (p, x0, immediate_operand (expr_eval_no_error)); + p += emit_ret (p, lr); + + emit_ops_insns (buf, p - buf); +} + +/* Implementation of emit_ops method "emit_add". */ + +static void +aarch64_emit_add (void) +{ + uint32_t buf[16]; + uint32_t *p = buf; + + p += emit_pop (p, x1); + p += emit_add (p, x0, x1, register_operand (x0)); + + emit_ops_insns (buf, p - buf); +} + +/* Implementation of emit_ops method "emit_sub". */ + +static void +aarch64_emit_sub (void) +{ + uint32_t buf[16]; + uint32_t *p = buf; + + p += emit_pop (p, x1); + p += emit_sub (p, x0, x1, register_operand (x0)); + + emit_ops_insns (buf, p - buf); +} + +/* Implementation of emit_ops method "emit_mul". */ + +static void +aarch64_emit_mul (void) +{ + uint32_t buf[16]; + uint32_t *p = buf; + + p += emit_pop (p, x1); + p += emit_mul (p, x0, x1, x0); + + emit_ops_insns (buf, p - buf); +} + +/* Implementation of emit_ops method "emit_lsh". */ + +static void +aarch64_emit_lsh (void) +{ + uint32_t buf[16]; + uint32_t *p = buf; + + p += emit_pop (p, x1); + p += emit_lslv (p, x0, x1, x0); + + emit_ops_insns (buf, p - buf); +} + +/* Implementation of emit_ops method "emit_rsh_signed". */ + +static void +aarch64_emit_rsh_signed (void) +{ + uint32_t buf[16]; + uint32_t *p = buf; + + p += emit_pop (p, x1); + p += emit_asrv (p, x0, x1, x0); + + emit_ops_insns (buf, p - buf); +} + +/* Implementation of emit_ops method "emit_rsh_unsigned". */ + +static void +aarch64_emit_rsh_unsigned (void) +{ + uint32_t buf[16]; + uint32_t *p = buf; + + p += emit_pop (p, x1); + p += emit_lsrv (p, x0, x1, x0); + + emit_ops_insns (buf, p - buf); +} + +/* Implementation of emit_ops method "emit_ext". */ + +static void +aarch64_emit_ext (int arg) +{ + uint32_t buf[16]; + uint32_t *p = buf; + + p += emit_sbfx (p, x0, x0, 0, arg); + + emit_ops_insns (buf, p - buf); +} + +/* Implementation of emit_ops method "emit_log_not". */ + +static void +aarch64_emit_log_not (void) +{ + uint32_t buf[16]; + uint32_t *p = buf; + + /* If the top of the stack is 0, replace it with 1. Else replace it with + 0. */ + + p += emit_cmp (p, x0, immediate_operand (0)); + p += emit_cset (p, x0, EQ); + + emit_ops_insns (buf, p - buf); +} + +/* Implementation of emit_ops method "emit_bit_and". */ + +static void +aarch64_emit_bit_and (void) +{ + uint32_t buf[16]; + uint32_t *p = buf; + + p += emit_pop (p, x1); + p += emit_and (p, x0, x0, x1); + + emit_ops_insns (buf, p - buf); +} + +/* Implementation of emit_ops method "emit_bit_or". */ + +static void +aarch64_emit_bit_or (void) +{ + uint32_t buf[16]; + uint32_t *p = buf; + + p += emit_pop (p, x1); + p += emit_orr (p, x0, x0, x1); + + emit_ops_insns (buf, p - buf); +} + +/* Implementation of emit_ops method "emit_bit_xor". */ + +static void +aarch64_emit_bit_xor (void) +{ + uint32_t buf[16]; + uint32_t *p = buf; + + p += emit_pop (p, x1); + p += emit_eor (p, x0, x0, x1); + + emit_ops_insns (buf, p - buf); +} + +/* Implementation of emit_ops method "emit_bit_not". */ + +static void +aarch64_emit_bit_not (void) +{ + uint32_t buf[16]; + uint32_t *p = buf; + + p += emit_mvn (p, x0, x0); + + emit_ops_insns (buf, p - buf); +} + +/* Implementation of emit_ops method "emit_equal". */ + +static void +aarch64_emit_equal (void) +{ + uint32_t buf[16]; + uint32_t *p = buf; + + p += emit_pop (p, x1); + p += emit_cmp (p, x0, register_operand (x1)); + p += emit_cset (p, x0, EQ); + + emit_ops_insns (buf, p - buf); +} + +/* Implementation of emit_ops method "emit_less_signed". */ + +static void +aarch64_emit_less_signed (void) +{ + uint32_t buf[16]; + uint32_t *p = buf; + + p += emit_pop (p, x1); + p += emit_cmp (p, x1, register_operand (x0)); + p += emit_cset (p, x0, LT); + + emit_ops_insns (buf, p - buf); +} + +/* Implementation of emit_ops method "emit_less_unsigned". */ + +static void +aarch64_emit_less_unsigned (void) +{ + uint32_t buf[16]; + uint32_t *p = buf; + + p += emit_pop (p, x1); + p += emit_cmp (p, x1, register_operand (x0)); + p += emit_cset (p, x0, LO); + + emit_ops_insns (buf, p - buf); +} + +/* Implementation of emit_ops method "emit_ref". */ + +static void +aarch64_emit_ref (int size) +{ + uint32_t buf[16]; + uint32_t *p = buf; + + switch (size) + { + case 1: + p += emit_ldrb (p, w0, x0, offset_memory_operand (0)); + break; + case 2: + p += emit_ldrh (p, w0, x0, offset_memory_operand (0)); + break; + case 4: + p += emit_ldr (p, w0, x0, offset_memory_operand (0)); + break; + case 8: + p += emit_ldr (p, x0, x0, offset_memory_operand (0)); + break; + default: + /* Unknown size, bail on compilation. */ + emit_error = 1; + break; + } + + emit_ops_insns (buf, p - buf); +} + +/* Implementation of emit_ops method "emit_if_goto". */ + +static void +aarch64_emit_if_goto (int *offset_p, int *size_p) +{ + uint32_t buf[16]; + uint32_t *p = buf; + + /* The Z flag is set or cleared here. */ + p += emit_cmp (p, x0, immediate_operand (0)); + /* This instruction must not change the Z flag. */ + p += emit_pop (p, x0); + /* Branch over the next instruction if x0 == 0. */ + p += emit_bcond (p, EQ, 8); + + /* The NOP instruction will be patched with an unconditional branch. */ + if (offset_p) + *offset_p = (p - buf) * 4; + if (size_p) + *size_p = 4; + p += emit_nop (p); + + emit_ops_insns (buf, p - buf); +} + +/* Implementation of emit_ops method "emit_goto". */ + +static void +aarch64_emit_goto (int *offset_p, int *size_p) +{ + uint32_t buf[16]; + uint32_t *p = buf; + + /* The NOP instruction will be patched with an unconditional branch. */ + if (offset_p) + *offset_p = 0; + if (size_p) + *size_p = 4; + p += emit_nop (p); + + emit_ops_insns (buf, p - buf); +} + +/* Implementation of emit_ops method "write_goto_address". */ + +static void +aarch64_write_goto_address (CORE_ADDR from, CORE_ADDR to, int size) +{ + uint32_t insn; + + emit_b (&insn, 0, to - from); + append_insns (&from, 1, &insn); +} + +/* Implementation of emit_ops method "emit_const". */ + +static void +aarch64_emit_const (LONGEST num) +{ + uint32_t buf[16]; + uint32_t *p = buf; + + p += emit_mov_addr (p, x0, num); + + emit_ops_insns (buf, p - buf); +} + +/* Implementation of emit_ops method "emit_call". */ + +static void +aarch64_emit_call (CORE_ADDR fn) +{ + uint32_t buf[16]; + uint32_t *p = buf; + + p += emit_mov_addr (p, ip0, fn); + p += emit_blr (p, ip0); + + emit_ops_insns (buf, p - buf); +} + +/* Implementation of emit_ops method "emit_reg". */ + +static void +aarch64_emit_reg (int reg) +{ + uint32_t buf[16]; + uint32_t *p = buf; + + /* Set x0 to unsigned char *regs. */ + p += emit_sub (p, x0, fp, immediate_operand (2 * 8)); + p += emit_ldr (p, x0, x0, offset_memory_operand (0)); + p += emit_mov (p, x1, immediate_operand (reg)); + + emit_ops_insns (buf, p - buf); + + aarch64_emit_call (get_raw_reg_func_addr ()); +} + +/* Implementation of emit_ops method "emit_pop". */ + +static void +aarch64_emit_pop (void) +{ + uint32_t buf[16]; + uint32_t *p = buf; + + p += emit_pop (p, x0); + + emit_ops_insns (buf, p - buf); +} + +/* Implementation of emit_ops method "emit_stack_flush". */ + +static void +aarch64_emit_stack_flush (void) +{ + uint32_t buf[16]; + uint32_t *p = buf; + + p += emit_push (p, x0); + + emit_ops_insns (buf, p - buf); +} + +/* Implementation of emit_ops method "emit_zero_ext". */ + +static void +aarch64_emit_zero_ext (int arg) +{ + uint32_t buf[16]; + uint32_t *p = buf; + + p += emit_ubfx (p, x0, x0, 0, arg); + + emit_ops_insns (buf, p - buf); +} + +/* Implementation of emit_ops method "emit_swap". */ + +static void +aarch64_emit_swap (void) +{ + uint32_t buf[16]; + uint32_t *p = buf; + + p += emit_ldr (p, x1, sp, offset_memory_operand (0 * 16)); + p += emit_str (p, x0, sp, offset_memory_operand (0 * 16)); + p += emit_mov (p, x0, register_operand (x1)); + + emit_ops_insns (buf, p - buf); +} + +/* Implementation of emit_ops method "emit_stack_adjust". */ + +static void +aarch64_emit_stack_adjust (int n) +{ + /* This is not needed with our design. */ + uint32_t buf[16]; + uint32_t *p = buf; + + p += emit_add (p, sp, sp, immediate_operand (n * 16)); + + emit_ops_insns (buf, p - buf); +} + +/* Implementation of emit_ops method "emit_int_call_1". */ + +static void +aarch64_emit_int_call_1 (CORE_ADDR fn, int arg1) +{ + uint32_t buf[16]; + uint32_t *p = buf; + + p += emit_mov (p, x0, immediate_operand (arg1)); + + emit_ops_insns (buf, p - buf); + + aarch64_emit_call (fn); +} + +/* Implementation of emit_ops method "emit_void_call_2". */ + +static void +aarch64_emit_void_call_2 (CORE_ADDR fn, int arg1) +{ + uint32_t buf[16]; + uint32_t *p = buf; + + /* Push x0 on the stack. */ + aarch64_emit_stack_flush (); + + /* Setup arguments for the function call: + + x0: arg1 + x1: top of the stack + + MOV x1, x0 + MOV x0, #arg1 */ + + p += emit_mov (p, x1, register_operand (x0)); + p += emit_mov (p, x0, immediate_operand (arg1)); + + emit_ops_insns (buf, p - buf); + + aarch64_emit_call (fn); + + /* Restore x0. */ + aarch64_emit_pop (); +} + +/* Implementation of emit_ops method "emit_eq_goto". */ + +static void +aarch64_emit_eq_goto (int *offset_p, int *size_p) +{ + uint32_t buf[16]; + uint32_t *p = buf; + + p += emit_pop (p, x1); + p += emit_cmp (p, x1, register_operand (x0)); + /* Branch over the next instruction if x0 != x1. */ + p += emit_bcond (p, NE, 8); + /* The NOP instruction will be patched with an unconditional branch. */ + if (offset_p) + *offset_p = (p - buf) * 4; + if (size_p) + *size_p = 4; + p += emit_nop (p); + + emit_ops_insns (buf, p - buf); +} + +/* Implementation of emit_ops method "emit_ne_goto". */ + +static void +aarch64_emit_ne_goto (int *offset_p, int *size_p) +{ + uint32_t buf[16]; + uint32_t *p = buf; + + p += emit_pop (p, x1); + p += emit_cmp (p, x1, register_operand (x0)); + /* Branch over the next instruction if x0 == x1. */ + p += emit_bcond (p, EQ, 8); + /* The NOP instruction will be patched with an unconditional branch. */ + if (offset_p) + *offset_p = (p - buf) * 4; + if (size_p) + *size_p = 4; + p += emit_nop (p); + + emit_ops_insns (buf, p - buf); +} + +/* Implementation of emit_ops method "emit_lt_goto". */ + +static void +aarch64_emit_lt_goto (int *offset_p, int *size_p) +{ + uint32_t buf[16]; + uint32_t *p = buf; + + p += emit_pop (p, x1); + p += emit_cmp (p, x1, register_operand (x0)); + /* Branch over the next instruction if x0 >= x1. */ + p += emit_bcond (p, GE, 8); + /* The NOP instruction will be patched with an unconditional branch. */ + if (offset_p) + *offset_p = (p - buf) * 4; + if (size_p) + *size_p = 4; + p += emit_nop (p); + + emit_ops_insns (buf, p - buf); +} + +/* Implementation of emit_ops method "emit_le_goto". */ + +static void +aarch64_emit_le_goto (int *offset_p, int *size_p) +{ + uint32_t buf[16]; + uint32_t *p = buf; + + p += emit_pop (p, x1); + p += emit_cmp (p, x1, register_operand (x0)); + /* Branch over the next instruction if x0 > x1. */ + p += emit_bcond (p, GT, 8); + /* The NOP instruction will be patched with an unconditional branch. */ + if (offset_p) + *offset_p = (p - buf) * 4; + if (size_p) + *size_p = 4; + p += emit_nop (p); + + emit_ops_insns (buf, p - buf); +} + +/* Implementation of emit_ops method "emit_gt_goto". */ + +static void +aarch64_emit_gt_goto (int *offset_p, int *size_p) +{ + uint32_t buf[16]; + uint32_t *p = buf; + + p += emit_pop (p, x1); + p += emit_cmp (p, x1, register_operand (x0)); + /* Branch over the next instruction if x0 <= x1. */ + p += emit_bcond (p, LE, 8); + /* The NOP instruction will be patched with an unconditional branch. */ + if (offset_p) + *offset_p = (p - buf) * 4; + if (size_p) + *size_p = 4; + p += emit_nop (p); + + emit_ops_insns (buf, p - buf); +} + +/* Implementation of emit_ops method "emit_ge_got". */ + +static void +aarch64_emit_ge_got (int *offset_p, int *size_p) +{ + uint32_t buf[16]; + uint32_t *p = buf; + + p += emit_pop (p, x1); + p += emit_cmp (p, x1, register_operand (x0)); + /* Branch over the next instruction if x0 <= x1. */ + p += emit_bcond (p, LT, 8); + /* The NOP instruction will be patched with an unconditional branch. */ + if (offset_p) + *offset_p = (p - buf) * 4; + if (size_p) + *size_p = 4; + p += emit_nop (p); + + emit_ops_insns (buf, p - buf); +} + +static struct emit_ops aarch64_emit_ops_impl = +{ + aarch64_emit_prologue, + aarch64_emit_epilogue, + aarch64_emit_add, + aarch64_emit_sub, + aarch64_emit_mul, + aarch64_emit_lsh, + aarch64_emit_rsh_signed, + aarch64_emit_rsh_unsigned, + aarch64_emit_ext, + aarch64_emit_log_not, + aarch64_emit_bit_and, + aarch64_emit_bit_or, + aarch64_emit_bit_xor, + aarch64_emit_bit_not, + aarch64_emit_equal, + aarch64_emit_less_signed, + aarch64_emit_less_unsigned, + aarch64_emit_ref, + aarch64_emit_if_goto, + aarch64_emit_goto, + aarch64_write_goto_address, + aarch64_emit_const, + aarch64_emit_call, + aarch64_emit_reg, + aarch64_emit_pop, + aarch64_emit_stack_flush, + aarch64_emit_zero_ext, + aarch64_emit_swap, + aarch64_emit_stack_adjust, + aarch64_emit_int_call_1, + aarch64_emit_void_call_2, + aarch64_emit_eq_goto, + aarch64_emit_ne_goto, + aarch64_emit_lt_goto, + aarch64_emit_le_goto, + aarch64_emit_gt_goto, + aarch64_emit_ge_got, +}; + +/* Implementation of target ops method "emit_ops". */ + +emit_ops * +aarch64_target::emit_ops () +{ + return &aarch64_emit_ops_impl; +} + +/* Implementation of target ops method + "get_min_fast_tracepoint_insn_len". */ + +int +aarch64_target::get_min_fast_tracepoint_insn_len () +{ + return 4; +} + +/* Implementation of linux target ops method "low_supports_range_stepping". */ + +bool +aarch64_target::low_supports_range_stepping () +{ + return true; +} + +/* Implementation of target ops method "sw_breakpoint_from_kind". */ + +const gdb_byte * +aarch64_target::sw_breakpoint_from_kind (int kind, int *size) +{ + if (is_64bit_tdesc ()) + { + *size = aarch64_breakpoint_len; + return aarch64_breakpoint; + } + else + return arm_sw_breakpoint_from_kind (kind, size); +} + +/* Implementation of target ops method "breakpoint_kind_from_pc". */ + +int +aarch64_target::breakpoint_kind_from_pc (CORE_ADDR *pcptr) +{ + if (is_64bit_tdesc ()) + return aarch64_breakpoint_len; + else + return arm_breakpoint_kind_from_pc (pcptr); +} + +/* Implementation of the target ops method + "breakpoint_kind_from_current_state". */ + +int +aarch64_target::breakpoint_kind_from_current_state (CORE_ADDR *pcptr) +{ + if (is_64bit_tdesc ()) + return aarch64_breakpoint_len; + else + return arm_breakpoint_kind_from_current_state (pcptr); +} + +/* The linux target ops object. */ + +linux_process_target *the_linux_target = &the_aarch64_target; + +void +initialize_low_arch (void) +{ + initialize_low_arch_aarch32 (); + + initialize_regsets_info (&aarch64_regsets_info); + initialize_regsets_info (&aarch64_sve_regsets_info); +} diff -Nru gdb-9.1/gdbserver/linux-aarch64-tdesc.cc gdb-10.2/gdbserver/linux-aarch64-tdesc.cc --- gdb-9.1/gdbserver/linux-aarch64-tdesc.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/linux-aarch64-tdesc.cc 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,60 @@ +/* GNU/Linux/aarch64 specific target description, for the remote server + for GDB. + Copyright (C) 2017-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "server.h" + +#include "linux-aarch64-tdesc.h" + +#include "tdesc.h" +#include "arch/aarch64.h" +#include "linux-aarch32-low.h" +#include <inttypes.h> + +/* All possible aarch64 target descriptors. */ +struct target_desc *tdesc_aarch64_list[AARCH64_MAX_SVE_VQ + 1][2/*pauth*/]; + +/* Create the aarch64 target description. */ + +const target_desc * +aarch64_linux_read_description (uint64_t vq, bool pauth_p) +{ + if (vq > AARCH64_MAX_SVE_VQ) + error (_("VQ is %" PRIu64 ", maximum supported value is %d"), vq, + AARCH64_MAX_SVE_VQ); + + struct target_desc *tdesc = tdesc_aarch64_list[vq][pauth_p]; + + if (tdesc == NULL) + { + tdesc = aarch64_create_target_description (vq, pauth_p); + + static const char *expedite_regs_aarch64[] = { "x29", "sp", "pc", NULL }; + static const char *expedite_regs_aarch64_sve[] = { "x29", "sp", "pc", + "vg", NULL }; + + if (vq == 0) + init_target_desc (tdesc, expedite_regs_aarch64); + else + init_target_desc (tdesc, expedite_regs_aarch64_sve); + + tdesc_aarch64_list[vq][pauth_p] = tdesc; + } + + return tdesc; +} diff -Nru gdb-9.1/gdbserver/linux-aarch64-tdesc.h gdb-10.2/gdbserver/linux-aarch64-tdesc.h --- gdb-9.1/gdbserver/linux-aarch64-tdesc.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/linux-aarch64-tdesc.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,25 @@ +/* Low level support for aarch64, shared between gdbserver and IPA. + + Copyright (C) 2016-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef GDBSERVER_LINUX_AARCH64_TDESC_H +#define GDBSERVER_LINUX_AARCH64_TDESC_H + +const target_desc * aarch64_linux_read_description (uint64_t vq, bool pauth_p); + +#endif /* GDBSERVER_LINUX_AARCH64_TDESC_H */ diff -Nru gdb-9.1/gdbserver/linux-amd64-ipa.cc gdb-10.2/gdbserver/linux-amd64-ipa.cc --- gdb-9.1/gdbserver/linux-amd64-ipa.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/linux-amd64-ipa.cc 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,289 @@ +/* GNU/Linux/x86-64 specific low level interface, for the in-process + agent library for GDB. + + Copyright (C) 2010-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "server.h" +#include <sys/mman.h> +#include "tracepoint.h" +#include "linux-x86-tdesc.h" +#include "gdbsupport/x86-xstate.h" + +/* Defined in auto-generated file amd64-linux.c. */ +void init_registers_amd64_linux (void); +extern const struct target_desc *tdesc_amd64_linux; + +/* fast tracepoints collect registers. */ + +#define FT_CR_RIP 0 +#define FT_CR_EFLAGS 1 +#define FT_CR_R8 2 +#define FT_CR_R9 3 +#define FT_CR_R10 4 +#define FT_CR_R11 5 +#define FT_CR_R12 6 +#define FT_CR_R13 7 +#define FT_CR_R14 8 +#define FT_CR_R15 9 +#define FT_CR_RAX 10 +#define FT_CR_RBX 11 +#define FT_CR_RCX 12 +#define FT_CR_RDX 13 +#define FT_CR_RSI 14 +#define FT_CR_RDI 15 +#define FT_CR_RBP 16 +#define FT_CR_RSP 17 + +static const int x86_64_ft_collect_regmap[] = { + FT_CR_RAX * 8, FT_CR_RBX * 8, FT_CR_RCX * 8, FT_CR_RDX * 8, + FT_CR_RSI * 8, FT_CR_RDI * 8, FT_CR_RBP * 8, FT_CR_RSP * 8, + FT_CR_R8 * 8, FT_CR_R9 * 8, FT_CR_R10 * 8, FT_CR_R11 * 8, + FT_CR_R12 * 8, FT_CR_R13 * 8, FT_CR_R14 * 8, FT_CR_R15 * 8, + FT_CR_RIP * 8, FT_CR_EFLAGS * 8 +}; + +#define X86_64_NUM_FT_COLLECT_GREGS \ + (sizeof (x86_64_ft_collect_regmap) / sizeof(x86_64_ft_collect_regmap[0])) + +void +supply_fast_tracepoint_registers (struct regcache *regcache, + const unsigned char *buf) +{ + int i; + + for (i = 0; i < X86_64_NUM_FT_COLLECT_GREGS; i++) + supply_register (regcache, i, + ((char *) buf) + x86_64_ft_collect_regmap[i]); +} + +ULONGEST +get_raw_reg (const unsigned char *raw_regs, int regnum) +{ + if (regnum >= X86_64_NUM_FT_COLLECT_GREGS) + return 0; + + return *(ULONGEST *) (raw_regs + x86_64_ft_collect_regmap[regnum]); +} + +#ifdef HAVE_UST + +#include <ust/processor.h> + +/* "struct registers" is the UST object type holding the registers at + the time of the static tracepoint marker call. This doesn't + contain RIP, but we know what it must have been (the marker + address). */ + +#define ST_REGENTRY(REG) \ + { \ + offsetof (struct registers, REG), \ + sizeof (((struct registers *) NULL)->REG) \ + } + +static struct +{ + int offset; + int size; +} x86_64_st_collect_regmap[] = + { + ST_REGENTRY(rax), + ST_REGENTRY(rbx), + ST_REGENTRY(rcx), + ST_REGENTRY(rdx), + ST_REGENTRY(rsi), + ST_REGENTRY(rdi), + ST_REGENTRY(rbp), + ST_REGENTRY(rsp), + ST_REGENTRY(r8), + ST_REGENTRY(r9), + ST_REGENTRY(r10), + ST_REGENTRY(r11), + ST_REGENTRY(r12), + ST_REGENTRY(r13), + ST_REGENTRY(r14), + ST_REGENTRY(r15), + { -1, 0 }, + ST_REGENTRY(rflags), + ST_REGENTRY(cs), + ST_REGENTRY(ss), + }; + +#define X86_64_NUM_ST_COLLECT_GREGS \ + (sizeof (x86_64_st_collect_regmap) / sizeof (x86_64_st_collect_regmap[0])) + +/* GDB's RIP register number. */ +#define AMD64_RIP_REGNUM 16 + +void +supply_static_tracepoint_registers (struct regcache *regcache, + const unsigned char *buf, + CORE_ADDR pc) +{ + int i; + unsigned long newpc = pc; + + supply_register (regcache, AMD64_RIP_REGNUM, &newpc); + + for (i = 0; i < X86_64_NUM_ST_COLLECT_GREGS; i++) + if (x86_64_st_collect_regmap[i].offset != -1) + { + switch (x86_64_st_collect_regmap[i].size) + { + case 8: + supply_register (regcache, i, + ((char *) buf) + + x86_64_st_collect_regmap[i].offset); + break; + case 2: + { + unsigned long reg + = * (short *) (((char *) buf) + + x86_64_st_collect_regmap[i].offset); + reg &= 0xffff; + supply_register (regcache, i, ®); + } + break; + default: + internal_error (__FILE__, __LINE__, + "unhandled register size: %d", + x86_64_st_collect_regmap[i].size); + break; + } + } +} + +#endif /* HAVE_UST */ + +#if !defined __ILP32__ +/* Map the tdesc index to xcr0 mask. */ +static uint64_t idx2mask[X86_TDESC_LAST] = { + X86_XSTATE_X87_MASK, + X86_XSTATE_SSE_MASK, + X86_XSTATE_AVX_MASK, + X86_XSTATE_MPX_MASK, + X86_XSTATE_AVX_MPX_MASK, + X86_XSTATE_AVX_AVX512_MASK, + X86_XSTATE_AVX_MPX_AVX512_PKU_MASK, +}; +#endif + +/* Return target_desc to use for IPA, given the tdesc index passed by + gdbserver. */ + +const struct target_desc * +get_ipa_tdesc (int idx) +{ + if (idx >= X86_TDESC_LAST) + { + internal_error (__FILE__, __LINE__, + "unknown ipa tdesc index: %d", idx); + } + +#if defined __ILP32__ + switch (idx) + { + case X86_TDESC_SSE: + return amd64_linux_read_description (X86_XSTATE_SSE_MASK, true); + case X86_TDESC_AVX: + return amd64_linux_read_description (X86_XSTATE_AVX_MASK, true); + case X86_TDESC_AVX_AVX512: + return amd64_linux_read_description (X86_XSTATE_AVX_AVX512_MASK, true); + default: + break; + } +#else + return amd64_linux_read_description (idx2mask[idx], false); +#endif + + internal_error (__FILE__, __LINE__, + "unknown ipa tdesc index: %d", idx); +} + +/* Allocate buffer for the jump pads. The branch instruction has a + reach of +/- 31-bit, and the executable is loaded at low addresses. + + 64-bit: Use MAP_32BIT to allocate in the first 2GB. Shared + libraries, being allocated at the top, are unfortunately out of + luck. + + x32: Since MAP_32BIT is 64-bit only, do the placement manually. + Try allocating at '0x80000000 - SIZE' initially, decreasing until + we hit a free area. This ensures the executable is fully covered, + and is as close as possible to the shared libraries, which are + usually mapped at the top of the first 4GB of the address space. +*/ + +void * +alloc_jump_pad_buffer (size_t size) +{ +#if __ILP32__ + uintptr_t addr; + int pagesize; + + pagesize = sysconf (_SC_PAGE_SIZE); + if (pagesize == -1) + perror_with_name ("sysconf"); + + addr = 0x80000000 - size; + + /* size should already be page-aligned, but this can't hurt. */ + addr &= ~(pagesize - 1); + + /* Search for a free area. If we hit 0, we're out of luck. */ + for (; addr; addr -= pagesize) + { + void *res; + + /* No MAP_FIXED - we don't want to zap someone's mapping. */ + res = mmap ((void *) addr, size, + PROT_READ | PROT_WRITE | PROT_EXEC, + MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); + + /* If we got what we wanted, return. */ + if ((uintptr_t) res == addr) + return res; + + /* If we got a mapping, but at a wrong address, undo it. */ + if (res != MAP_FAILED) + munmap (res, size); + } + + return NULL; +#else + void *res = mmap (NULL, size, PROT_READ | PROT_WRITE | PROT_EXEC, + MAP_PRIVATE | MAP_ANONYMOUS | MAP_32BIT, -1, 0); + + if (res == MAP_FAILED) + return NULL; + + return res; +#endif +} + +void +initialize_low_tracepoint (void) +{ +#if defined __ILP32__ + amd64_linux_read_description (X86_XSTATE_SSE_MASK, true); + amd64_linux_read_description (X86_XSTATE_AVX_MASK, true); + amd64_linux_read_description (X86_XSTATE_AVX_AVX512_MASK, true); +#else + for (auto i = 0; i < X86_TDESC_LAST; i++) + amd64_linux_read_description (idx2mask[i], false); +#endif +} diff -Nru gdb-9.1/gdbserver/linux-arc-low.cc gdb-10.2/gdbserver/linux-arc-low.cc --- gdb-9.1/gdbserver/linux-arc-low.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/linux-arc-low.cc 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,418 @@ +/* Target dependent code for the remote server for GNU/Linux ARC. + + Copyright 2020-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "server.h" +#include "regdef.h" +#include "linux-low.h" +#include "tdesc.h" +#include "arch/arc.h" + +#include <linux/elf.h> +#include <arpa/inet.h> + +/* Linux starting with 4.12 supports NT_ARC_V2 note type, which adds R30, + R58 and R59 registers. */ +#ifdef NT_ARC_V2 +#define ARC_HAS_V2_REGSET +#endif + +/* The encoding of the instruction "TRAP_S 1" (endianness agnostic). */ +#define TRAP_S_1_OPCODE 0x783e +#define TRAP_S_1_SIZE 2 + +/* Using a mere "uint16_t arc_linux_traps_s = TRAP_S_1_OPCODE" would + work as well, because the endianness will end up correctly when + the code is compiled for the same endianness as the target (see + the notes for "low_breakpoint_at" in this file). However, this + illustrates how the __BIG_ENDIAN__ macro can be used to make + easy-to-understand codes. */ +#if defined(__BIG_ENDIAN__) +/* 0x78, 0x3e. */ +static gdb_byte arc_linux_trap_s[TRAP_S_1_SIZE] + = {TRAP_S_1_OPCODE >> 8, TRAP_S_1_OPCODE & 0xFF}; +#else +/* 0x3e, 0x78. */ +static gdb_byte arc_linux_trap_s[TRAP_S_1_SIZE] + = {TRAP_S_1_OPCODE && 0xFF, TRAP_S_1_OPCODE >> 8}; +#endif + +/* Linux target op definitions for the ARC architecture. + Note for future: in case of adding the protected method low_get_next_pcs(), + the public method supports_software_single_step() should be added to return + "true". */ + +class arc_target : public linux_process_target +{ +public: + + const regs_info *get_regs_info () override; + + const gdb_byte *sw_breakpoint_from_kind (int kind, int *size) override; + +protected: + + void low_arch_setup () override; + + bool low_cannot_fetch_register (int regno) override; + + bool low_cannot_store_register (int regno) override; + + bool low_supports_breakpoints () override; + + CORE_ADDR low_get_pc (regcache *regcache) override; + + void low_set_pc (regcache *regcache, CORE_ADDR newpc) override; + + bool low_breakpoint_at (CORE_ADDR where) override; +}; + +/* The singleton target ops object. */ + +static arc_target the_arc_target; + +bool +arc_target::low_supports_breakpoints () +{ + return true; +} + +CORE_ADDR +arc_target::low_get_pc (regcache *regcache) +{ + return linux_get_pc_32bit (regcache); +} + +void +arc_target::low_set_pc (regcache *regcache, CORE_ADDR pc) +{ + linux_set_pc_32bit (regcache, pc); +} + +static const struct target_desc * +arc_linux_read_description (void) +{ +#ifdef __ARC700__ + arc_arch_features features (4, ARC_ISA_ARCV1); +#else + arc_arch_features features (4, ARC_ISA_ARCV2); +#endif + struct target_desc *tdesc = arc_create_target_description (features); + + static const char *expedite_regs[] = { "sp", "status32", nullptr }; + init_target_desc (tdesc, expedite_regs); + + return tdesc; +} + +void +arc_target::low_arch_setup () +{ + current_process ()->tdesc = arc_linux_read_description (); +} + +bool +arc_target::low_cannot_fetch_register (int regno) +{ + return (regno >= current_process ()->tdesc->reg_defs.size ()); +} + +bool +arc_target::low_cannot_store_register (int regno) +{ + return (regno >= current_process ()->tdesc->reg_defs.size ()); +} + +/* This works for both endianness. Below you see an illustration of how + the "trap_s 1" instruction encoded for both endianness in the memory + will end up as the TRAP_S_1_OPCODE constant: + + BE: 0x78 0x3e --> at INSN addr: 0x78 0x3e --> INSN = 0x783e + LE: 0x3e 0x78 --> at INSN addr: 0x3e 0x78 --> INSN = 0x783e + + One can employ "memcmp()" for comparing the arrays too. */ + +bool +arc_target::low_breakpoint_at (CORE_ADDR where) +{ + uint16_t insn; + + /* "the_target" global variable is the current object at hand. */ + this->read_memory (where, (gdb_byte *) &insn, TRAP_S_1_SIZE); + return (insn == TRAP_S_1_OPCODE); +} + +/* PTRACE_GETREGSET/NT_PRSTATUS and PTRACE_SETREGSET/NT_PRSTATUS work with + regsets in a struct, "user_regs_struct", defined in the + linux/arch/arc/include/uapi/asm/ptrace.h header. This code supports + ARC Linux ABI v3 and v4. */ + +/* Populate a ptrace NT_PRSTATUS regset from a regcache. + + This appears to be a unique approach to populating the buffer, but + being name, rather than offset based, it is robust to future API + changes, as there is no need to create a regmap of registers in the + user_regs_struct. */ + +static void +arc_fill_gregset (struct regcache *regcache, void *buf) +{ + struct user_regs_struct *regbuf = (struct user_regs_struct *) buf; + + /* Core registers. */ + collect_register_by_name (regcache, "r0", &(regbuf->scratch.r0)); + collect_register_by_name (regcache, "r1", &(regbuf->scratch.r1)); + collect_register_by_name (regcache, "r2", &(regbuf->scratch.r2)); + collect_register_by_name (regcache, "r3", &(regbuf->scratch.r3)); + collect_register_by_name (regcache, "r4", &(regbuf->scratch.r4)); + collect_register_by_name (regcache, "r5", &(regbuf->scratch.r5)); + collect_register_by_name (regcache, "r6", &(regbuf->scratch.r6)); + collect_register_by_name (regcache, "r7", &(regbuf->scratch.r7)); + collect_register_by_name (regcache, "r8", &(regbuf->scratch.r8)); + collect_register_by_name (regcache, "r9", &(regbuf->scratch.r9)); + collect_register_by_name (regcache, "r10", &(regbuf->scratch.r10)); + collect_register_by_name (regcache, "r11", &(regbuf->scratch.r11)); + collect_register_by_name (regcache, "r12", &(regbuf->scratch.r12)); + collect_register_by_name (regcache, "r13", &(regbuf->callee.r13)); + collect_register_by_name (regcache, "r14", &(regbuf->callee.r14)); + collect_register_by_name (regcache, "r15", &(regbuf->callee.r15)); + collect_register_by_name (regcache, "r16", &(regbuf->callee.r16)); + collect_register_by_name (regcache, "r17", &(regbuf->callee.r17)); + collect_register_by_name (regcache, "r18", &(regbuf->callee.r18)); + collect_register_by_name (regcache, "r19", &(regbuf->callee.r19)); + collect_register_by_name (regcache, "r20", &(regbuf->callee.r20)); + collect_register_by_name (regcache, "r21", &(regbuf->callee.r21)); + collect_register_by_name (regcache, "r22", &(regbuf->callee.r22)); + collect_register_by_name (regcache, "r23", &(regbuf->callee.r23)); + collect_register_by_name (regcache, "r24", &(regbuf->callee.r24)); + collect_register_by_name (regcache, "r25", &(regbuf->callee.r25)); + collect_register_by_name (regcache, "gp", &(regbuf->scratch.gp)); + collect_register_by_name (regcache, "fp", &(regbuf->scratch.fp)); + collect_register_by_name (regcache, "sp", &(regbuf->scratch.sp)); + collect_register_by_name (regcache, "blink", &(regbuf->scratch.blink)); + + /* Loop registers. */ + collect_register_by_name (regcache, "lp_count", &(regbuf->scratch.lp_count)); + collect_register_by_name (regcache, "lp_start", &(regbuf->scratch.lp_start)); + collect_register_by_name (regcache, "lp_end", &(regbuf->scratch.lp_end)); + + /* The current "pc" value must be written to "eret" (exception return + address) register, because that is the address that the kernel code + will jump back to after a breakpoint exception has been raised. + The "pc_stop" value is ignored by the genregs_set() in + linux/arch/arc/kernel/ptrace.c. */ + collect_register_by_name (regcache, "pc", &(regbuf->scratch.ret)); + + /* Currently ARC Linux ptrace doesn't allow writes to status32 because + some of its bits are kernel mode-only and shoudn't be writable from + user-space. Writing status32 from debugger could be useful, though, + so ability to write non-priviliged bits will be added to kernel + sooner or later. */ + + /* BTA. */ + collect_register_by_name (regcache, "bta", &(regbuf->scratch.bta)); +} + +/* Populate a regcache from a ptrace NT_PRSTATUS regset. */ + +static void +arc_store_gregset (struct regcache *regcache, const void *buf) +{ + const struct user_regs_struct *regbuf = (const struct user_regs_struct *) buf; + + /* Core registers. */ + supply_register_by_name (regcache, "r0", &(regbuf->scratch.r0)); + supply_register_by_name (regcache, "r1", &(regbuf->scratch.r1)); + supply_register_by_name (regcache, "r2", &(regbuf->scratch.r2)); + supply_register_by_name (regcache, "r3", &(regbuf->scratch.r3)); + supply_register_by_name (regcache, "r4", &(regbuf->scratch.r4)); + supply_register_by_name (regcache, "r5", &(regbuf->scratch.r5)); + supply_register_by_name (regcache, "r6", &(regbuf->scratch.r6)); + supply_register_by_name (regcache, "r7", &(regbuf->scratch.r7)); + supply_register_by_name (regcache, "r8", &(regbuf->scratch.r8)); + supply_register_by_name (regcache, "r9", &(regbuf->scratch.r9)); + supply_register_by_name (regcache, "r10", &(regbuf->scratch.r10)); + supply_register_by_name (regcache, "r11", &(regbuf->scratch.r11)); + supply_register_by_name (regcache, "r12", &(regbuf->scratch.r12)); + supply_register_by_name (regcache, "r13", &(regbuf->callee.r13)); + supply_register_by_name (regcache, "r14", &(regbuf->callee.r14)); + supply_register_by_name (regcache, "r15", &(regbuf->callee.r15)); + supply_register_by_name (regcache, "r16", &(regbuf->callee.r16)); + supply_register_by_name (regcache, "r17", &(regbuf->callee.r17)); + supply_register_by_name (regcache, "r18", &(regbuf->callee.r18)); + supply_register_by_name (regcache, "r19", &(regbuf->callee.r19)); + supply_register_by_name (regcache, "r20", &(regbuf->callee.r20)); + supply_register_by_name (regcache, "r21", &(regbuf->callee.r21)); + supply_register_by_name (regcache, "r22", &(regbuf->callee.r22)); + supply_register_by_name (regcache, "r23", &(regbuf->callee.r23)); + supply_register_by_name (regcache, "r24", &(regbuf->callee.r24)); + supply_register_by_name (regcache, "r25", &(regbuf->callee.r25)); + supply_register_by_name (regcache, "gp", &(regbuf->scratch.gp)); + supply_register_by_name (regcache, "fp", &(regbuf->scratch.fp)); + supply_register_by_name (regcache, "sp", &(regbuf->scratch.sp)); + supply_register_by_name (regcache, "blink", &(regbuf->scratch.blink)); + + /* Loop registers. */ + supply_register_by_name (regcache, "lp_count", &(regbuf->scratch.lp_count)); + supply_register_by_name (regcache, "lp_start", &(regbuf->scratch.lp_start)); + supply_register_by_name (regcache, "lp_end", &(regbuf->scratch.lp_end)); + + /* The genregs_get() in linux/arch/arc/kernel/ptrace.c populates the + pseudo register "stop_pc" with the "efa" (exception fault address) + register. This was deemed necessary, because the breakpoint + instruction, "trap_s 1", is a committing one; i.e. the "eret" + (exception return address) register will be pointing to the next + instruction, while "efa" points to the address that raised the + breakpoint. */ + supply_register_by_name (regcache, "pc", &(regbuf->stop_pc)); + unsigned long pcl = regbuf->stop_pc & ~3L; + supply_register_by_name (regcache, "pcl", &pcl); + + /* Other auxilliary registers. */ + supply_register_by_name (regcache, "status32", &(regbuf->scratch.status32)); + + /* BTA. */ + supply_register_by_name (regcache, "bta", &(regbuf->scratch.bta)); +} + +#ifdef ARC_HAS_V2_REGSET + +/* Look through a regcache's TDESC for a register named NAME. + If found, return true; false, otherwise. */ + +static bool +is_reg_name_available_p (const struct target_desc *tdesc, + const char *name) +{ + for (const gdb::reg ® : tdesc->reg_defs) + if (strcmp (name, reg.name) == 0) + return true; + return false; +} + +/* Copy registers from regcache to user_regs_arcv2. */ + +static void +arc_fill_v2_regset (struct regcache *regcache, void *buf) +{ + struct user_regs_arcv2 *regbuf = (struct user_regs_arcv2 *) buf; + + if (is_reg_name_available_p (regcache->tdesc, "r30")) + collect_register_by_name (regcache, "r30", &(regbuf->r30)); + + if (is_reg_name_available_p (regcache->tdesc, "r58")) + collect_register_by_name (regcache, "r58", &(regbuf->r58)); + + if (is_reg_name_available_p (regcache->tdesc, "r59")) + collect_register_by_name (regcache, "r59", &(regbuf->r59)); +} + +/* Copy registers from user_regs_arcv2 to regcache. */ + +static void +arc_store_v2_regset (struct regcache *regcache, const void *buf) +{ + struct user_regs_arcv2 *regbuf = (struct user_regs_arcv2 *) buf; + + if (is_reg_name_available_p (regcache->tdesc, "r30")) + supply_register_by_name (regcache, "r30", &(regbuf->r30)); + + if (is_reg_name_available_p (regcache->tdesc, "r58")) + supply_register_by_name (regcache, "r58", &(regbuf->r58)); + + if (is_reg_name_available_p (regcache->tdesc, "r59")) + supply_register_by_name (regcache, "r59", &(regbuf->r59)); +} + +#endif + +/* Fetch the thread-local storage pointer for libthread_db. Note that + this function is not called from GDB, but is called from libthread_db. + + This is the same function as for other architectures, for example in + linux-arm-low.c. */ + +ps_err_e +ps_get_thread_area (struct ps_prochandle *ph, lwpid_t lwpid, + int idx, void **base) +{ + if (ptrace (PTRACE_GET_THREAD_AREA, lwpid, nullptr, base) != 0) + return PS_ERR; + + /* IDX is the bias from the thread pointer to the beginning of the + thread descriptor. It has to be subtracted due to implementation + quirks in libthread_db. */ + *base = (void *) ((char *) *base - idx); + + return PS_OK; +} + +static struct regset_info arc_regsets[] = +{ + { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_PRSTATUS, + sizeof (struct user_regs_struct), GENERAL_REGS, + arc_fill_gregset, arc_store_gregset + }, +#ifdef ARC_HAS_V2_REGSET + { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_ARC_V2, + sizeof (struct user_regs_arcv2), GENERAL_REGS, + arc_fill_v2_regset, arc_store_v2_regset + }, +#endif + NULL_REGSET +}; + +static struct regsets_info arc_regsets_info = +{ + arc_regsets, /* regsets */ + 0, /* num_regsets */ + nullptr, /* disabled regsets */ +}; + +static struct regs_info arc_regs_info = +{ + nullptr, /* regset_bitmap */ + nullptr, /* usrregs */ + &arc_regsets_info +}; + +const regs_info * +arc_target::get_regs_info () +{ + return &arc_regs_info; +} + +/* One of the methods necessary for Z0 packet support. */ + +const gdb_byte * +arc_target::sw_breakpoint_from_kind (int kind, int *size) +{ + gdb_assert (kind == TRAP_S_1_SIZE); + *size = kind; + return arc_linux_trap_s; +} + +/* The linux target ops object. */ + +linux_process_target *the_linux_target = &the_arc_target; + +void +initialize_low_arch (void) +{ + initialize_regsets_info (&arc_regsets_info); +} diff -Nru gdb-9.1/gdbserver/linux-arm-low.cc gdb-10.2/gdbserver/linux-arm-low.cc --- gdb-9.1/gdbserver/linux-arm-low.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/linux-arm-low.cc 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,1140 @@ +/* GNU/Linux/ARM specific low level interface, for the remote server for GDB. + Copyright (C) 1995-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "server.h" +#include "linux-low.h" +#include "arch/arm.h" +#include "arch/arm-linux.h" +#include "arch/arm-get-next-pcs.h" +#include "linux-aarch32-low.h" +#include "linux-aarch32-tdesc.h" +#include "linux-arm-tdesc.h" + +#include <sys/uio.h> +/* Don't include elf.h if linux/elf.h got included by gdb_proc_service.h. + On Bionic elf.h and linux/elf.h have conflicting definitions. */ +#ifndef ELFMAG0 +#include <elf.h> +#endif +#include "nat/gdb_ptrace.h" +#include <signal.h> +#include <sys/syscall.h> + +#ifndef PTRACE_GET_THREAD_AREA +#define PTRACE_GET_THREAD_AREA 22 +#endif + +#ifndef PTRACE_GETWMMXREGS +# define PTRACE_GETWMMXREGS 18 +# define PTRACE_SETWMMXREGS 19 +#endif + +#ifndef PTRACE_GETVFPREGS +# define PTRACE_GETVFPREGS 27 +# define PTRACE_SETVFPREGS 28 +#endif + +#ifndef PTRACE_GETHBPREGS +#define PTRACE_GETHBPREGS 29 +#define PTRACE_SETHBPREGS 30 +#endif + +/* Linux target op definitions for the ARM architecture. */ + +class arm_target : public linux_process_target +{ +public: + + const regs_info *get_regs_info () override; + + int breakpoint_kind_from_pc (CORE_ADDR *pcptr) override; + + int breakpoint_kind_from_current_state (CORE_ADDR *pcptr) override; + + const gdb_byte *sw_breakpoint_from_kind (int kind, int *size) override; + + bool supports_software_single_step () override; + + bool supports_z_point_type (char z_type) override; + + bool supports_hardware_single_step () override; + +protected: + + void low_arch_setup () override; + + bool low_cannot_fetch_register (int regno) override; + + bool low_cannot_store_register (int regno) override; + + bool low_supports_breakpoints () override; + + CORE_ADDR low_get_pc (regcache *regcache) override; + + void low_set_pc (regcache *regcache, CORE_ADDR newpc) override; + + std::vector<CORE_ADDR> low_get_next_pcs (regcache *regcache) override; + + bool low_breakpoint_at (CORE_ADDR pc) override; + + int low_insert_point (raw_bkpt_type type, CORE_ADDR addr, + int size, raw_breakpoint *bp) override; + + int low_remove_point (raw_bkpt_type type, CORE_ADDR addr, + int size, raw_breakpoint *bp) override; + + bool low_stopped_by_watchpoint () override; + + CORE_ADDR low_stopped_data_address () override; + + arch_process_info *low_new_process () override; + + void low_delete_process (arch_process_info *info) override; + + void low_new_thread (lwp_info *) override; + + void low_delete_thread (arch_lwp_info *) override; + + void low_new_fork (process_info *parent, process_info *child) override; + + void low_prepare_to_resume (lwp_info *lwp) override; + + bool low_supports_catch_syscall () override; + + void low_get_syscall_trapinfo (regcache *regcache, int *sysno) override; +}; + +/* The singleton target ops object. */ + +static arm_target the_arm_target; + +bool +arm_target::low_supports_breakpoints () +{ + return true; +} + +CORE_ADDR +arm_target::low_get_pc (regcache *regcache) +{ + return linux_get_pc_32bit (regcache); +} + +void +arm_target::low_set_pc (regcache *regcache, CORE_ADDR pc) +{ + linux_set_pc_32bit (regcache, pc); +} + +int +arm_target::breakpoint_kind_from_pc (CORE_ADDR *pcptr) +{ + return arm_breakpoint_kind_from_pc (pcptr); +} + +int +arm_target::breakpoint_kind_from_current_state (CORE_ADDR *pcptr) +{ + return arm_breakpoint_kind_from_current_state (pcptr); +} + +const gdb_byte * +arm_target::sw_breakpoint_from_kind (int kind, int *size) +{ + return arm_sw_breakpoint_from_kind (kind, size); +} + +bool +arm_target::low_breakpoint_at (CORE_ADDR pc) +{ + return arm_breakpoint_at (pc); +} + +/* Information describing the hardware breakpoint capabilities. */ +static struct +{ + unsigned char arch; + unsigned char max_wp_length; + unsigned char wp_count; + unsigned char bp_count; +} arm_linux_hwbp_cap; + +/* Enum describing the different types of ARM hardware break-/watch-points. */ +typedef enum +{ + arm_hwbp_break = 0, + arm_hwbp_load = 1, + arm_hwbp_store = 2, + arm_hwbp_access = 3 +} arm_hwbp_type; + +/* Type describing an ARM Hardware Breakpoint Control register value. */ +typedef unsigned int arm_hwbp_control_t; + +/* Structure used to keep track of hardware break-/watch-points. */ +struct arm_linux_hw_breakpoint +{ + /* Address to break on, or being watched. */ + unsigned int address; + /* Control register for break-/watch- point. */ + arm_hwbp_control_t control; +}; + +/* Since we cannot dynamically allocate subfields of arch_process_info, + assume a maximum number of supported break-/watchpoints. */ +#define MAX_BPTS 32 +#define MAX_WPTS 32 + +/* Per-process arch-specific data we want to keep. */ +struct arch_process_info +{ + /* Hardware breakpoints for this process. */ + struct arm_linux_hw_breakpoint bpts[MAX_BPTS]; + /* Hardware watchpoints for this process. */ + struct arm_linux_hw_breakpoint wpts[MAX_WPTS]; +}; + +/* Per-thread arch-specific data we want to keep. */ +struct arch_lwp_info +{ + /* Non-zero if our copy differs from what's recorded in the thread. */ + char bpts_changed[MAX_BPTS]; + char wpts_changed[MAX_WPTS]; + /* Cached stopped data address. */ + CORE_ADDR stopped_data_address; +}; + +/* These are in <asm/elf.h> in current kernels. */ +#define HWCAP_VFP 64 +#define HWCAP_IWMMXT 512 +#define HWCAP_NEON 4096 +#define HWCAP_VFPv3 8192 +#define HWCAP_VFPv3D16 16384 + +#ifdef HAVE_SYS_REG_H +#include <sys/reg.h> +#endif + +#define arm_num_regs 26 + +static int arm_regmap[] = { + 0, 4, 8, 12, 16, 20, 24, 28, + 32, 36, 40, 44, 48, 52, 56, 60, + -1, -1, -1, -1, -1, -1, -1, -1, -1, + 64 +}; + +/* Forward declarations needed for get_next_pcs ops. */ +static ULONGEST get_next_pcs_read_memory_unsigned_integer (CORE_ADDR memaddr, + int len, + int byte_order); + +static CORE_ADDR get_next_pcs_addr_bits_remove (struct arm_get_next_pcs *self, + CORE_ADDR val); + +static CORE_ADDR get_next_pcs_syscall_next_pc (struct arm_get_next_pcs *self); + +static int get_next_pcs_is_thumb (struct arm_get_next_pcs *self); + +/* get_next_pcs operations. */ +static struct arm_get_next_pcs_ops get_next_pcs_ops = { + get_next_pcs_read_memory_unsigned_integer, + get_next_pcs_syscall_next_pc, + get_next_pcs_addr_bits_remove, + get_next_pcs_is_thumb, + arm_linux_get_next_pcs_fixup, +}; + +bool +arm_target::low_cannot_store_register (int regno) +{ + return (regno >= arm_num_regs); +} + +bool +arm_target::low_cannot_fetch_register (int regno) +{ + return (regno >= arm_num_regs); +} + +static void +arm_fill_wmmxregset (struct regcache *regcache, void *buf) +{ + if (arm_linux_get_tdesc_fp_type (regcache->tdesc) != ARM_FP_TYPE_IWMMXT) + return; + + for (int i = 0; i < 16; i++) + collect_register (regcache, arm_num_regs + i, (char *) buf + i * 8); + + /* We only have access to wcssf, wcasf, and wcgr0-wcgr3. */ + for (int i = 0; i < 6; i++) + collect_register (regcache, arm_num_regs + i + 16, + (char *) buf + 16 * 8 + i * 4); +} + +static void +arm_store_wmmxregset (struct regcache *regcache, const void *buf) +{ + if (arm_linux_get_tdesc_fp_type (regcache->tdesc) != ARM_FP_TYPE_IWMMXT) + return; + + for (int i = 0; i < 16; i++) + supply_register (regcache, arm_num_regs + i, (char *) buf + i * 8); + + /* We only have access to wcssf, wcasf, and wcgr0-wcgr3. */ + for (int i = 0; i < 6; i++) + supply_register (regcache, arm_num_regs + i + 16, + (char *) buf + 16 * 8 + i * 4); +} + +static void +arm_fill_vfpregset (struct regcache *regcache, void *buf) +{ + int num; + + if (is_aarch32_linux_description (regcache->tdesc)) + num = 32; + else + { + arm_fp_type fp_type = arm_linux_get_tdesc_fp_type (regcache->tdesc); + + if (fp_type == ARM_FP_TYPE_VFPV3) + num = 32; + else if (fp_type == ARM_FP_TYPE_VFPV2) + num = 16; + else + return; + } + + arm_fill_vfpregset_num (regcache, buf, num); +} + +/* Wrapper of UNMAKE_THUMB_ADDR for get_next_pcs. */ +static CORE_ADDR +get_next_pcs_addr_bits_remove (struct arm_get_next_pcs *self, CORE_ADDR val) +{ + return UNMAKE_THUMB_ADDR (val); +} + +static void +arm_store_vfpregset (struct regcache *regcache, const void *buf) +{ + int num; + + if (is_aarch32_linux_description (regcache->tdesc)) + num = 32; + else + { + arm_fp_type fp_type = arm_linux_get_tdesc_fp_type (regcache->tdesc); + + if (fp_type == ARM_FP_TYPE_VFPV3) + num = 32; + else if (fp_type == ARM_FP_TYPE_VFPV2) + num = 16; + else + return; + } + + arm_store_vfpregset_num (regcache, buf, num); +} + +/* Wrapper of arm_is_thumb_mode for get_next_pcs. */ +static int +get_next_pcs_is_thumb (struct arm_get_next_pcs *self) +{ + return arm_is_thumb_mode (); +} + +/* Read memory from the inferior. + BYTE_ORDER is ignored and there to keep compatiblity with GDB's + read_memory_unsigned_integer. */ +static ULONGEST +get_next_pcs_read_memory_unsigned_integer (CORE_ADDR memaddr, + int len, + int byte_order) +{ + ULONGEST res; + + res = 0; + target_read_memory (memaddr, (unsigned char *) &res, len); + + return res; +} + +/* Fetch the thread-local storage pointer for libthread_db. */ + +ps_err_e +ps_get_thread_area (struct ps_prochandle *ph, + lwpid_t lwpid, int idx, void **base) +{ + if (ptrace (PTRACE_GET_THREAD_AREA, lwpid, NULL, base) != 0) + return PS_ERR; + + /* IDX is the bias from the thread pointer to the beginning of the + thread descriptor. It has to be subtracted due to implementation + quirks in libthread_db. */ + *base = (void *) ((char *)*base - idx); + + return PS_OK; +} + + +/* Query Hardware Breakpoint information for the target we are attached to + (using PID as ptrace argument) and set up arm_linux_hwbp_cap. */ +static void +arm_linux_init_hwbp_cap (int pid) +{ + unsigned int val; + + if (ptrace (PTRACE_GETHBPREGS, pid, 0, &val) < 0) + return; + + arm_linux_hwbp_cap.arch = (unsigned char)((val >> 24) & 0xff); + if (arm_linux_hwbp_cap.arch == 0) + return; + + arm_linux_hwbp_cap.max_wp_length = (unsigned char)((val >> 16) & 0xff); + arm_linux_hwbp_cap.wp_count = (unsigned char)((val >> 8) & 0xff); + arm_linux_hwbp_cap.bp_count = (unsigned char)(val & 0xff); + + if (arm_linux_hwbp_cap.wp_count > MAX_WPTS) + internal_error (__FILE__, __LINE__, "Unsupported number of watchpoints"); + if (arm_linux_hwbp_cap.bp_count > MAX_BPTS) + internal_error (__FILE__, __LINE__, "Unsupported number of breakpoints"); +} + +/* How many hardware breakpoints are available? */ +static int +arm_linux_get_hw_breakpoint_count (void) +{ + return arm_linux_hwbp_cap.bp_count; +} + +/* How many hardware watchpoints are available? */ +static int +arm_linux_get_hw_watchpoint_count (void) +{ + return arm_linux_hwbp_cap.wp_count; +} + +/* Maximum length of area watched by hardware watchpoint. */ +static int +arm_linux_get_hw_watchpoint_max_length (void) +{ + return arm_linux_hwbp_cap.max_wp_length; +} + +/* Initialize an ARM hardware break-/watch-point control register value. + BYTE_ADDRESS_SELECT is the mask of bytes to trigger on; HWBP_TYPE is the + type of break-/watch-point; ENABLE indicates whether the point is enabled. + */ +static arm_hwbp_control_t +arm_hwbp_control_initialize (unsigned byte_address_select, + arm_hwbp_type hwbp_type, + int enable) +{ + gdb_assert ((byte_address_select & ~0xffU) == 0); + gdb_assert (hwbp_type != arm_hwbp_break + || ((byte_address_select & 0xfU) != 0)); + + return (byte_address_select << 5) | (hwbp_type << 3) | (3 << 1) | enable; +} + +/* Does the breakpoint control value CONTROL have the enable bit set? */ +static int +arm_hwbp_control_is_enabled (arm_hwbp_control_t control) +{ + return control & 0x1; +} + +/* Is the breakpoint control value CONTROL initialized? */ +static int +arm_hwbp_control_is_initialized (arm_hwbp_control_t control) +{ + return control != 0; +} + +/* Change a breakpoint control word so that it is in the disabled state. */ +static arm_hwbp_control_t +arm_hwbp_control_disable (arm_hwbp_control_t control) +{ + return control & ~0x1; +} + +/* Are two break-/watch-points equal? */ +static int +arm_linux_hw_breakpoint_equal (const struct arm_linux_hw_breakpoint *p1, + const struct arm_linux_hw_breakpoint *p2) +{ + return p1->address == p2->address && p1->control == p2->control; +} + +/* Convert a raw breakpoint type to an enum arm_hwbp_type. */ + +static arm_hwbp_type +raw_bkpt_type_to_arm_hwbp_type (enum raw_bkpt_type raw_type) +{ + switch (raw_type) + { + case raw_bkpt_type_hw: + return arm_hwbp_break; + case raw_bkpt_type_write_wp: + return arm_hwbp_store; + case raw_bkpt_type_read_wp: + return arm_hwbp_load; + case raw_bkpt_type_access_wp: + return arm_hwbp_access; + default: + gdb_assert_not_reached ("unhandled raw type"); + } +} + +/* Initialize the hardware breakpoint structure P for a breakpoint or + watchpoint at ADDR to LEN. The type of watchpoint is given in TYPE. + Returns -1 if TYPE is unsupported, or -2 if the particular combination + of ADDR and LEN cannot be implemented. Otherwise, returns 0 if TYPE + represents a breakpoint and 1 if type represents a watchpoint. */ +static int +arm_linux_hw_point_initialize (enum raw_bkpt_type raw_type, CORE_ADDR addr, + int len, struct arm_linux_hw_breakpoint *p) +{ + arm_hwbp_type hwbp_type; + unsigned mask; + + hwbp_type = raw_bkpt_type_to_arm_hwbp_type (raw_type); + + if (hwbp_type == arm_hwbp_break) + { + /* For breakpoints, the length field encodes the mode. */ + switch (len) + { + case 2: /* 16-bit Thumb mode breakpoint */ + case 3: /* 32-bit Thumb mode breakpoint */ + mask = 0x3; + addr &= ~1; + break; + case 4: /* 32-bit ARM mode breakpoint */ + mask = 0xf; + addr &= ~3; + break; + default: + /* Unsupported. */ + return -2; + } + } + else + { + CORE_ADDR max_wp_length = arm_linux_get_hw_watchpoint_max_length (); + CORE_ADDR aligned_addr; + + /* Can not set watchpoints for zero or negative lengths. */ + if (len <= 0) + return -2; + /* The current ptrace interface can only handle watchpoints that are a + power of 2. */ + if ((len & (len - 1)) != 0) + return -2; + + /* Test that the range [ADDR, ADDR + LEN) fits into the largest address + range covered by a watchpoint. */ + aligned_addr = addr & ~(max_wp_length - 1); + if (aligned_addr + max_wp_length < addr + len) + return -2; + + mask = (1 << len) - 1; + } + + p->address = (unsigned int) addr; + p->control = arm_hwbp_control_initialize (mask, hwbp_type, 1); + + return hwbp_type != arm_hwbp_break; +} + +/* Callback to mark a watch-/breakpoint to be updated in all threads of + the current process. */ + +static void +update_registers_callback (thread_info *thread, int watch, int i) +{ + struct lwp_info *lwp = get_thread_lwp (thread); + + /* The actual update is done later just before resuming the lwp, + we just mark that the registers need updating. */ + if (watch) + lwp->arch_private->wpts_changed[i] = 1; + else + lwp->arch_private->bpts_changed[i] = 1; + + /* If the lwp isn't stopped, force it to momentarily pause, so + we can update its breakpoint registers. */ + if (!lwp->stopped) + linux_stop_lwp (lwp); +} + +bool +arm_target::supports_z_point_type (char z_type) +{ + switch (z_type) + { + case Z_PACKET_SW_BP: + case Z_PACKET_HW_BP: + case Z_PACKET_WRITE_WP: + case Z_PACKET_READ_WP: + case Z_PACKET_ACCESS_WP: + return true; + default: + /* Leave the handling of sw breakpoints with the gdb client. */ + return false; + } +} + +/* Insert hardware break-/watchpoint. */ +int +arm_target::low_insert_point (raw_bkpt_type type, CORE_ADDR addr, + int len, raw_breakpoint *bp) +{ + struct process_info *proc = current_process (); + struct arm_linux_hw_breakpoint p, *pts; + int watch, i, count; + + watch = arm_linux_hw_point_initialize (type, addr, len, &p); + if (watch < 0) + { + /* Unsupported. */ + return watch == -1 ? 1 : -1; + } + + if (watch) + { + count = arm_linux_get_hw_watchpoint_count (); + pts = proc->priv->arch_private->wpts; + } + else + { + count = arm_linux_get_hw_breakpoint_count (); + pts = proc->priv->arch_private->bpts; + } + + for (i = 0; i < count; i++) + if (!arm_hwbp_control_is_enabled (pts[i].control)) + { + pts[i] = p; + + /* Only update the threads of the current process. */ + for_each_thread (current_thread->id.pid (), [&] (thread_info *thread) + { + update_registers_callback (thread, watch, i); + }); + + return 0; + } + + /* We're out of watchpoints. */ + return -1; +} + +/* Remove hardware break-/watchpoint. */ +int +arm_target::low_remove_point (raw_bkpt_type type, CORE_ADDR addr, + int len, raw_breakpoint *bp) +{ + struct process_info *proc = current_process (); + struct arm_linux_hw_breakpoint p, *pts; + int watch, i, count; + + watch = arm_linux_hw_point_initialize (type, addr, len, &p); + if (watch < 0) + { + /* Unsupported. */ + return -1; + } + + if (watch) + { + count = arm_linux_get_hw_watchpoint_count (); + pts = proc->priv->arch_private->wpts; + } + else + { + count = arm_linux_get_hw_breakpoint_count (); + pts = proc->priv->arch_private->bpts; + } + + for (i = 0; i < count; i++) + if (arm_linux_hw_breakpoint_equal (&p, pts + i)) + { + pts[i].control = arm_hwbp_control_disable (pts[i].control); + + /* Only update the threads of the current process. */ + for_each_thread (current_thread->id.pid (), [&] (thread_info *thread) + { + update_registers_callback (thread, watch, i); + }); + + return 0; + } + + /* No watchpoint matched. */ + return -1; +} + +/* Return whether current thread is stopped due to a watchpoint. */ +bool +arm_target::low_stopped_by_watchpoint () +{ + struct lwp_info *lwp = get_thread_lwp (current_thread); + siginfo_t siginfo; + + /* We must be able to set hardware watchpoints. */ + if (arm_linux_get_hw_watchpoint_count () == 0) + return false; + + /* Retrieve siginfo. */ + errno = 0; + ptrace (PTRACE_GETSIGINFO, lwpid_of (current_thread), 0, &siginfo); + if (errno != 0) + return false; + + /* This must be a hardware breakpoint. */ + if (siginfo.si_signo != SIGTRAP + || (siginfo.si_code & 0xffff) != 0x0004 /* TRAP_HWBKPT */) + return false; + + /* If we are in a positive slot then we're looking at a breakpoint and not + a watchpoint. */ + if (siginfo.si_errno >= 0) + return false; + + /* Cache stopped data address for use by arm_stopped_data_address. */ + lwp->arch_private->stopped_data_address + = (CORE_ADDR) (uintptr_t) siginfo.si_addr; + + return true; +} + +/* Return data address that triggered watchpoint. Called only if + low_stopped_by_watchpoint returned true. */ +CORE_ADDR +arm_target::low_stopped_data_address () +{ + struct lwp_info *lwp = get_thread_lwp (current_thread); + return lwp->arch_private->stopped_data_address; +} + +/* Called when a new process is created. */ +arch_process_info * +arm_target::low_new_process () +{ + struct arch_process_info *info = XCNEW (struct arch_process_info); + return info; +} + +/* Called when a process is being deleted. */ + +void +arm_target::low_delete_process (arch_process_info *info) +{ + xfree (info); +} + +/* Called when a new thread is detected. */ +void +arm_target::low_new_thread (lwp_info *lwp) +{ + struct arch_lwp_info *info = XCNEW (struct arch_lwp_info); + int i; + + for (i = 0; i < MAX_BPTS; i++) + info->bpts_changed[i] = 1; + for (i = 0; i < MAX_WPTS; i++) + info->wpts_changed[i] = 1; + + lwp->arch_private = info; +} + +/* Function to call when a thread is being deleted. */ + +void +arm_target::low_delete_thread (arch_lwp_info *arch_lwp) +{ + xfree (arch_lwp); +} + +void +arm_target::low_new_fork (process_info *parent, process_info *child) +{ + struct arch_process_info *parent_proc_info; + struct arch_process_info *child_proc_info; + struct lwp_info *child_lwp; + struct arch_lwp_info *child_lwp_info; + int i; + + /* These are allocated by linux_add_process. */ + gdb_assert (parent->priv != NULL + && parent->priv->arch_private != NULL); + gdb_assert (child->priv != NULL + && child->priv->arch_private != NULL); + + parent_proc_info = parent->priv->arch_private; + child_proc_info = child->priv->arch_private; + + /* Linux kernel before 2.6.33 commit + 72f674d203cd230426437cdcf7dd6f681dad8b0d + will inherit hardware debug registers from parent + on fork/vfork/clone. Newer Linux kernels create such tasks with + zeroed debug registers. + + GDB core assumes the child inherits the watchpoints/hw + breakpoints of the parent, and will remove them all from the + forked off process. Copy the debug registers mirrors into the + new process so that all breakpoints and watchpoints can be + removed together. The debug registers mirror will become zeroed + in the end before detaching the forked off process, thus making + this compatible with older Linux kernels too. */ + + *child_proc_info = *parent_proc_info; + + /* Mark all the hardware breakpoints and watchpoints as changed to + make sure that the registers will be updated. */ + child_lwp = find_lwp_pid (ptid_t (child->pid)); + child_lwp_info = child_lwp->arch_private; + for (i = 0; i < MAX_BPTS; i++) + child_lwp_info->bpts_changed[i] = 1; + for (i = 0; i < MAX_WPTS; i++) + child_lwp_info->wpts_changed[i] = 1; +} + +/* Called when resuming a thread. + If the debug regs have changed, update the thread's copies. */ +void +arm_target::low_prepare_to_resume (lwp_info *lwp) +{ + struct thread_info *thread = get_lwp_thread (lwp); + int pid = lwpid_of (thread); + struct process_info *proc = find_process_pid (pid_of (thread)); + struct arch_process_info *proc_info = proc->priv->arch_private; + struct arch_lwp_info *lwp_info = lwp->arch_private; + int i; + + for (i = 0; i < arm_linux_get_hw_breakpoint_count (); i++) + if (lwp_info->bpts_changed[i]) + { + errno = 0; + + if (arm_hwbp_control_is_enabled (proc_info->bpts[i].control)) + if (ptrace (PTRACE_SETHBPREGS, pid, + (PTRACE_TYPE_ARG3) ((i << 1) + 1), + &proc_info->bpts[i].address) < 0) + perror_with_name ("Unexpected error setting breakpoint address"); + + if (arm_hwbp_control_is_initialized (proc_info->bpts[i].control)) + if (ptrace (PTRACE_SETHBPREGS, pid, + (PTRACE_TYPE_ARG3) ((i << 1) + 2), + &proc_info->bpts[i].control) < 0) + perror_with_name ("Unexpected error setting breakpoint"); + + lwp_info->bpts_changed[i] = 0; + } + + for (i = 0; i < arm_linux_get_hw_watchpoint_count (); i++) + if (lwp_info->wpts_changed[i]) + { + errno = 0; + + if (arm_hwbp_control_is_enabled (proc_info->wpts[i].control)) + if (ptrace (PTRACE_SETHBPREGS, pid, + (PTRACE_TYPE_ARG3) -((i << 1) + 1), + &proc_info->wpts[i].address) < 0) + perror_with_name ("Unexpected error setting watchpoint address"); + + if (arm_hwbp_control_is_initialized (proc_info->wpts[i].control)) + if (ptrace (PTRACE_SETHBPREGS, pid, + (PTRACE_TYPE_ARG3) -((i << 1) + 2), + &proc_info->wpts[i].control) < 0) + perror_with_name ("Unexpected error setting watchpoint"); + + lwp_info->wpts_changed[i] = 0; + } +} + +/* Find the next pc for a sigreturn or rt_sigreturn syscall. In + addition, set IS_THUMB depending on whether we will return to ARM + or Thumb code. + See arm-linux.h for stack layout details. */ +static CORE_ADDR +arm_sigreturn_next_pc (struct regcache *regcache, int svc_number, + int *is_thumb) +{ + unsigned long sp; + unsigned long sp_data; + /* Offset of PC register. */ + int pc_offset = 0; + CORE_ADDR next_pc = 0; + uint32_t cpsr; + + gdb_assert (svc_number == __NR_sigreturn || svc_number == __NR_rt_sigreturn); + + collect_register_by_name (regcache, "sp", &sp); + the_target->read_memory (sp, (unsigned char *) &sp_data, 4); + + pc_offset = arm_linux_sigreturn_next_pc_offset + (sp, sp_data, svc_number, __NR_sigreturn == svc_number ? 1 : 0); + + the_target->read_memory (sp + pc_offset, (unsigned char *) &next_pc, 4); + + /* Set IS_THUMB according the CPSR saved on the stack. */ + the_target->read_memory (sp + pc_offset + 4, (unsigned char *) &cpsr, 4); + *is_thumb = ((cpsr & CPSR_T) != 0); + + return next_pc; +} + +/* When PC is at a syscall instruction, return the PC of the next + instruction to be executed. */ +static CORE_ADDR +get_next_pcs_syscall_next_pc (struct arm_get_next_pcs *self) +{ + CORE_ADDR next_pc = 0; + CORE_ADDR pc = regcache_read_pc (self->regcache); + int is_thumb = arm_is_thumb_mode (); + ULONGEST svc_number = 0; + struct regcache *regcache = self->regcache; + + if (is_thumb) + { + collect_register (regcache, 7, &svc_number); + next_pc = pc + 2; + } + else + { + unsigned long this_instr; + unsigned long svc_operand; + + target_read_memory (pc, (unsigned char *) &this_instr, 4); + svc_operand = (0x00ffffff & this_instr); + + if (svc_operand) /* OABI. */ + { + svc_number = svc_operand - 0x900000; + } + else /* EABI. */ + { + collect_register (regcache, 7, &svc_number); + } + + next_pc = pc + 4; + } + + /* This is a sigreturn or sigreturn_rt syscall. */ + if (svc_number == __NR_sigreturn || svc_number == __NR_rt_sigreturn) + { + /* SIGRETURN or RT_SIGRETURN may affect the arm thumb mode, so + update IS_THUMB. */ + next_pc = arm_sigreturn_next_pc (regcache, svc_number, &is_thumb); + } + + /* Addresses for calling Thumb functions have the bit 0 set. */ + if (is_thumb) + next_pc = MAKE_THUMB_ADDR (next_pc); + + return next_pc; +} + +static const struct target_desc * +arm_read_description (void) +{ + unsigned long arm_hwcap = linux_get_hwcap (4); + + if (arm_hwcap & HWCAP_IWMMXT) + return arm_linux_read_description (ARM_FP_TYPE_IWMMXT); + + if (arm_hwcap & HWCAP_VFP) + { + /* Make sure that the kernel supports reading VFP registers. Support was + added in 2.6.30. */ + int pid = lwpid_of (current_thread); + errno = 0; + char *buf = (char *) alloca (ARM_VFP3_REGS_SIZE); + if (ptrace (PTRACE_GETVFPREGS, pid, 0, buf) < 0 && errno == EIO) + return arm_linux_read_description (ARM_FP_TYPE_NONE); + + /* NEON implies either no VFP, or VFPv3-D32. We only support + it with VFP. */ + if (arm_hwcap & HWCAP_NEON) + return aarch32_linux_read_description (); + else if ((arm_hwcap & (HWCAP_VFPv3 | HWCAP_VFPv3D16)) == HWCAP_VFPv3) + return arm_linux_read_description (ARM_FP_TYPE_VFPV3); + else + return arm_linux_read_description (ARM_FP_TYPE_VFPV2); + } + + /* The default configuration uses legacy FPA registers, probably + simulated. */ + return arm_linux_read_description (ARM_FP_TYPE_NONE); +} + +void +arm_target::low_arch_setup () +{ + int tid = lwpid_of (current_thread); + int gpregs[18]; + struct iovec iov; + + /* Query hardware watchpoint/breakpoint capabilities. */ + arm_linux_init_hwbp_cap (tid); + + current_process ()->tdesc = arm_read_description (); + + iov.iov_base = gpregs; + iov.iov_len = sizeof (gpregs); + + /* Check if PTRACE_GETREGSET works. */ + if (ptrace (PTRACE_GETREGSET, tid, NT_PRSTATUS, &iov) == 0) + have_ptrace_getregset = 1; + else + have_ptrace_getregset = 0; +} + +bool +arm_target::supports_software_single_step () +{ + return true; +} + +/* Fetch the next possible PCs after the current instruction executes. */ + +std::vector<CORE_ADDR> +arm_target::low_get_next_pcs (regcache *regcache) +{ + struct arm_get_next_pcs next_pcs_ctx; + + arm_get_next_pcs_ctor (&next_pcs_ctx, + &get_next_pcs_ops, + /* Byte order is ignored assumed as host. */ + 0, + 0, + 1, + regcache); + + return arm_get_next_pcs (&next_pcs_ctx); +} + +/* Support for hardware single step. */ + +bool +arm_target::supports_hardware_single_step () +{ + return false; +} + +bool +arm_target::low_supports_catch_syscall () +{ + return true; +} + +/* Implementation of linux target ops method "low_get_syscall_trapinfo". */ + +void +arm_target::low_get_syscall_trapinfo (regcache *regcache, int *sysno) +{ + if (arm_is_thumb_mode ()) + collect_register_by_name (regcache, "r7", sysno); + else + { + unsigned long pc; + unsigned long insn; + + collect_register_by_name (regcache, "pc", &pc); + + if (read_memory (pc - 4, (unsigned char *) &insn, 4)) + *sysno = UNKNOWN_SYSCALL; + else + { + unsigned long svc_operand = (0x00ffffff & insn); + + if (svc_operand) + { + /* OABI */ + *sysno = svc_operand - 0x900000; + } + else + { + /* EABI */ + collect_register_by_name (regcache, "r7", sysno); + } + } + } +} + +/* Register sets without using PTRACE_GETREGSET. */ + +static struct regset_info arm_regsets[] = { + { PTRACE_GETREGS, PTRACE_SETREGS, 0, + ARM_CORE_REGS_SIZE + ARM_INT_REGISTER_SIZE, GENERAL_REGS, + arm_fill_gregset, arm_store_gregset }, + { PTRACE_GETWMMXREGS, PTRACE_SETWMMXREGS, 0, IWMMXT_REGS_SIZE, EXTENDED_REGS, + arm_fill_wmmxregset, arm_store_wmmxregset }, + { PTRACE_GETVFPREGS, PTRACE_SETVFPREGS, 0, ARM_VFP3_REGS_SIZE, EXTENDED_REGS, + arm_fill_vfpregset, arm_store_vfpregset }, + NULL_REGSET +}; + +static struct regsets_info arm_regsets_info = + { + arm_regsets, /* regsets */ + 0, /* num_regsets */ + NULL, /* disabled_regsets */ + }; + +static struct usrregs_info arm_usrregs_info = + { + arm_num_regs, + arm_regmap, + }; + +static struct regs_info regs_info_arm = + { + NULL, /* regset_bitmap */ + &arm_usrregs_info, + &arm_regsets_info + }; + +const regs_info * +arm_target::get_regs_info () +{ + const struct target_desc *tdesc = current_process ()->tdesc; + + if (have_ptrace_getregset == 1 + && (is_aarch32_linux_description (tdesc) + || arm_linux_get_tdesc_fp_type (tdesc) == ARM_FP_TYPE_VFPV3)) + return ®s_info_aarch32; + + return ®s_info_arm; +} + +/* The linux target ops object. */ + +linux_process_target *the_linux_target = &the_arm_target; + +void +initialize_low_arch (void) +{ + initialize_low_arch_aarch32 (); + initialize_regsets_info (&arm_regsets_info); +} diff -Nru gdb-9.1/gdbserver/linux-arm-tdesc.cc gdb-10.2/gdbserver/linux-arm-tdesc.cc --- gdb-9.1/gdbserver/linux-arm-tdesc.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/linux-arm-tdesc.cc 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,65 @@ +/* Copyright (C) 2019-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "server.h" + +#include "linux-arm-tdesc.h" + +#include "tdesc.h" +#include "arch/arm.h" +#include <inttypes.h> + +/* All possible Arm target descriptors. */ +static struct target_desc *tdesc_arm_list[ARM_FP_TYPE_INVALID]; + +/* See linux-arm-tdesc.h. */ + +const target_desc * +arm_linux_read_description (arm_fp_type fp_type) +{ + struct target_desc *tdesc = tdesc_arm_list[fp_type]; + + if (tdesc == nullptr) + { + tdesc = arm_create_target_description (fp_type); + + static const char *expedite_regs[] = { "r11", "sp", "pc", 0 }; + init_target_desc (tdesc, expedite_regs); + + tdesc_arm_list[fp_type] = tdesc; + } + + return tdesc; +} + +/* See linux-arm-tdesc.h. */ + +arm_fp_type +arm_linux_get_tdesc_fp_type (const target_desc *tdesc) +{ + gdb_assert (tdesc != nullptr); + + /* Many of the tdesc_arm_list entries may not have been initialised yet. This + is ok, because tdesc must be one of the initialised ones. */ + for (int i = ARM_FP_TYPE_NONE; i < ARM_FP_TYPE_INVALID; i++) + { + if (tdesc == tdesc_arm_list[i]) + return (arm_fp_type) i; + } + + return ARM_FP_TYPE_INVALID; +} diff -Nru gdb-9.1/gdbserver/linux-arm-tdesc.h gdb-10.2/gdbserver/linux-arm-tdesc.h --- gdb-9.1/gdbserver/linux-arm-tdesc.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/linux-arm-tdesc.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,31 @@ +/* Copyright (C) 2019-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef GDBSERVER_LINUX_ARM_TDESC_H +#define GDBSERVER_LINUX_ARM_TDESC_H + +#include "arch/arm.h" + +/* Return the Arm target description with fp registers FP_TYPE. */ + +const target_desc * arm_linux_read_description (arm_fp_type fp_type); + +/* For a target description TDESC, return its fp type. */ + +arm_fp_type arm_linux_get_tdesc_fp_type (const target_desc *tdesc); + +#endif /* linux-arm-tdesc.h. */ diff -Nru gdb-9.1/gdbserver/linux-i386-ipa.cc gdb-10.2/gdbserver/linux-i386-ipa.cc --- gdb-9.1/gdbserver/linux-i386-ipa.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/linux-i386-ipa.cc 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,294 @@ +/* GNU/Linux/x86 specific low level interface, for the in-process + agent library for GDB. + + Copyright (C) 2010-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "server.h" +#include <sys/mman.h> +#include "tracepoint.h" +#include "linux-x86-tdesc.h" +#include "gdbsupport/x86-xstate.h" + +/* GDB register numbers. */ + +enum i386_gdb_regnum +{ + I386_EAX_REGNUM, /* %eax */ + I386_ECX_REGNUM, /* %ecx */ + I386_EDX_REGNUM, /* %edx */ + I386_EBX_REGNUM, /* %ebx */ + I386_ESP_REGNUM, /* %esp */ + I386_EBP_REGNUM, /* %ebp */ + I386_ESI_REGNUM, /* %esi */ + I386_EDI_REGNUM, /* %edi */ + I386_EIP_REGNUM, /* %eip */ + I386_EFLAGS_REGNUM, /* %eflags */ + I386_CS_REGNUM, /* %cs */ + I386_SS_REGNUM, /* %ss */ + I386_DS_REGNUM, /* %ds */ + I386_ES_REGNUM, /* %es */ + I386_FS_REGNUM, /* %fs */ + I386_GS_REGNUM, /* %gs */ + I386_ST0_REGNUM /* %st(0) */ +}; + +#define i386_num_regs 16 + +#define FT_CR_EAX 15 +#define FT_CR_ECX 14 +#define FT_CR_EDX 13 +#define FT_CR_EBX 12 +#define FT_CR_UESP 11 +#define FT_CR_EBP 10 +#define FT_CR_ESI 9 +#define FT_CR_EDI 8 +#define FT_CR_EIP 7 +#define FT_CR_EFL 6 +#define FT_CR_DS 5 +#define FT_CR_ES 4 +#define FT_CR_FS 3 +#define FT_CR_GS 2 +#define FT_CR_SS 1 +#define FT_CR_CS 0 + +/* Mapping between the general-purpose registers in jump tracepoint + format and GDB's register array layout. */ + +static const int i386_ft_collect_regmap[] = +{ + FT_CR_EAX * 4, FT_CR_ECX * 4, FT_CR_EDX * 4, FT_CR_EBX * 4, + FT_CR_UESP * 4, FT_CR_EBP * 4, FT_CR_ESI * 4, FT_CR_EDI * 4, + FT_CR_EIP * 4, FT_CR_EFL * 4, FT_CR_CS * 4, FT_CR_SS * 4, + FT_CR_DS * 4, FT_CR_ES * 4, FT_CR_FS * 4, FT_CR_GS * 4 +}; + +void +supply_fast_tracepoint_registers (struct regcache *regcache, + const unsigned char *buf) +{ + int i; + + for (i = 0; i < i386_num_regs; i++) + { + int regval; + + if (i >= I386_CS_REGNUM && i <= I386_GS_REGNUM) + regval = *(short *) (((char *) buf) + i386_ft_collect_regmap[i]); + else + regval = *(int *) (((char *) buf) + i386_ft_collect_regmap[i]); + + supply_register (regcache, i, ®val); + } +} + +ULONGEST +get_raw_reg (const unsigned char *raw_regs, int regnum) +{ + /* This should maybe be allowed to return an error code, or perhaps + better, have the emit_reg detect this, and emit a constant zero, + or something. */ + + if (regnum > i386_num_regs) + return 0; + else if (regnum >= I386_CS_REGNUM && regnum <= I386_GS_REGNUM) + return *(short *) (raw_regs + i386_ft_collect_regmap[regnum]); + else + return *(int *) (raw_regs + i386_ft_collect_regmap[regnum]); +} + +#ifdef HAVE_UST + +#include <ust/processor.h> + +/* "struct registers" is the UST object type holding the registers at + the time of the static tracepoint marker call. This doesn't + contain EIP, but we know what it must have been (the marker + address). */ + +#define ST_REGENTRY(REG) \ + { \ + offsetof (struct registers, REG), \ + sizeof (((struct registers *) NULL)->REG) \ + } + +static struct +{ + int offset; + int size; +} i386_st_collect_regmap[] = + { + ST_REGENTRY(eax), + ST_REGENTRY(ecx), + ST_REGENTRY(edx), + ST_REGENTRY(ebx), + ST_REGENTRY(esp), + ST_REGENTRY(ebp), + ST_REGENTRY(esi), + ST_REGENTRY(edi), + { -1, 0 }, /* eip */ + ST_REGENTRY(eflags), + ST_REGENTRY(cs), + ST_REGENTRY(ss), + }; + +#define i386_NUM_ST_COLLECT_GREGS \ + (sizeof (i386_st_collect_regmap) / sizeof (i386_st_collect_regmap[0])) + +void +supply_static_tracepoint_registers (struct regcache *regcache, + const unsigned char *buf, + CORE_ADDR pc) +{ + int i; + unsigned int newpc = pc; + + supply_register (regcache, I386_EIP_REGNUM, &newpc); + + for (i = 0; i < i386_NUM_ST_COLLECT_GREGS; i++) + if (i386_st_collect_regmap[i].offset != -1) + { + switch (i386_st_collect_regmap[i].size) + { + case 4: + supply_register (regcache, i, + ((char *) buf) + + i386_st_collect_regmap[i].offset); + break; + case 2: + { + unsigned long reg + = * (short *) (((char *) buf) + + i386_st_collect_regmap[i].offset); + reg &= 0xffff; + supply_register (regcache, i, ®); + } + break; + default: + internal_error (__FILE__, __LINE__, "unhandled register size: %d", + i386_st_collect_regmap[i].size); + } + } +} + +#endif /* HAVE_UST */ + + +/* This is only needed because reg-i386-linux-lib.o references it. We + may use it proper at some point. */ +const char *gdbserver_xmltarget; + +/* Attempt to allocate memory for trampolines in the first 64 KiB of + memory to enable smaller jump patches. */ + +static void +initialize_fast_tracepoint_trampoline_buffer (void) +{ + const CORE_ADDR buffer_end = 64 * 1024; + /* Ensure that the buffer will be at least 1 KiB in size, which is + enough space for over 200 fast tracepoints. */ + const int min_buffer_size = 1024; + char buf[IPA_BUFSIZ]; + CORE_ADDR mmap_min_addr = buffer_end + 1; + ULONGEST buffer_size; + FILE *f = fopen ("/proc/sys/vm/mmap_min_addr", "r"); + + if (!f) + { + snprintf (buf, sizeof (buf), "mmap_min_addr open failed: %s", + safe_strerror (errno)); + set_trampoline_buffer_space (0, 0, buf); + return; + } + + if (fgets (buf, IPA_BUFSIZ, f)) + sscanf (buf, "%llu", &mmap_min_addr); + + fclose (f); + + buffer_size = buffer_end - mmap_min_addr; + + if (buffer_size >= min_buffer_size) + { + if (mmap ((void *) (uintptr_t) mmap_min_addr, buffer_size, + PROT_READ | PROT_EXEC | PROT_WRITE, + MAP_FIXED | MAP_PRIVATE | MAP_ANONYMOUS, + -1, 0) + != MAP_FAILED) + set_trampoline_buffer_space (mmap_min_addr, buffer_end, NULL); + else + { + snprintf (buf, IPA_BUFSIZ, "low-64K-buffer mmap() failed: %s", + safe_strerror (errno)); + set_trampoline_buffer_space (0, 0, buf); + } + } + else + { + snprintf (buf, IPA_BUFSIZ, "mmap_min_addr is %d, must be %d or less", + (int) mmap_min_addr, (int) buffer_end - min_buffer_size); + set_trampoline_buffer_space (0, 0, buf); + } +} + +/* Map the tdesc index to xcr0 mask. */ +static uint64_t idx2mask[X86_TDESC_LAST] = { + X86_XSTATE_X87_MASK, + X86_XSTATE_SSE_MASK, + X86_XSTATE_AVX_MASK, + X86_XSTATE_MPX_MASK, + X86_XSTATE_AVX_MPX_MASK, + X86_XSTATE_AVX_AVX512_MASK, + X86_XSTATE_AVX_MPX_AVX512_PKU_MASK, +}; + +/* Return target_desc to use for IPA, given the tdesc index passed by + gdbserver. */ + +const struct target_desc * +get_ipa_tdesc (int idx) +{ + if (idx >= X86_TDESC_LAST) + { + internal_error (__FILE__, __LINE__, + "unknown ipa tdesc index: %d", idx); + } + return i386_linux_read_description (idx2mask[idx]); +} + +/* Allocate buffer for the jump pads. On i386, we can reach an arbitrary + address with a jump instruction, so just allocate normally. */ + +void * +alloc_jump_pad_buffer (size_t size) +{ + void *res = mmap (NULL, size, PROT_READ | PROT_WRITE | PROT_EXEC, + MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); + + if (res == MAP_FAILED) + return NULL; + + return res; +} + +void +initialize_low_tracepoint (void) +{ + initialize_fast_tracepoint_trampoline_buffer (); + for (auto i = 0; i < X86_TDESC_LAST; i++) + i386_linux_read_description (idx2mask[i]); +} diff -Nru gdb-9.1/gdbserver/linux-ia64-low.cc gdb-10.2/gdbserver/linux-ia64-low.cc --- gdb-9.1/gdbserver/linux-ia64-low.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/linux-ia64-low.cc 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,396 @@ +/* GNU/Linux/IA64 specific low level interface, for the remote server for GDB. + Copyright (C) 1995-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "server.h" +#include "linux-low.h" + +#ifdef HAVE_SYS_REG_H +#include <sys/reg.h> +#endif + +/* Linux target op definitions for the IA64 architecture. */ + +class ia64_target : public linux_process_target +{ +public: + + const regs_info *get_regs_info () override; + + const gdb_byte *sw_breakpoint_from_kind (int kind, int *size) override; + +protected: + + void low_arch_setup () override; + + bool low_cannot_fetch_register (int regno) override; + + bool low_cannot_store_register (int regno) override; + + bool low_fetch_register (regcache *regcache, int regno) override; + + bool low_breakpoint_at (CORE_ADDR pc) override; +}; + +/* The singleton target ops object. */ + +static ia64_target the_ia64_target; + +const gdb_byte * +ia64_target::sw_breakpoint_from_kind (int kind, int *size) +{ + gdb_assert_not_reached ("target op sw_breakpoint_from_kind is not " + "implemented by this target"); +} + +bool +ia64_target::low_breakpoint_at (CORE_ADDR pc) +{ + gdb_assert_not_reached ("linux target op low_breakpoint_at is not " + "implemented by this target"); +} + +/* Defined in auto-generated file reg-ia64.c. */ +void init_registers_ia64 (void); +extern const struct target_desc *tdesc_ia64; + +#define ia64_num_regs 462 + +#include <asm/ptrace_offsets.h> + +static int ia64_regmap[] = + { + /* general registers */ + -1, /* gr0 not available; i.e, it's always zero */ + PT_R1, + PT_R2, + PT_R3, + PT_R4, + PT_R5, + PT_R6, + PT_R7, + PT_R8, + PT_R9, + PT_R10, + PT_R11, + PT_R12, + PT_R13, + PT_R14, + PT_R15, + PT_R16, + PT_R17, + PT_R18, + PT_R19, + PT_R20, + PT_R21, + PT_R22, + PT_R23, + PT_R24, + PT_R25, + PT_R26, + PT_R27, + PT_R28, + PT_R29, + PT_R30, + PT_R31, + /* gr32 through gr127 not directly available via the ptrace interface */ + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + /* Floating point registers */ + -1, -1, /* f0 and f1 not available (f0 is +0.0 and f1 is +1.0) */ + PT_F2, + PT_F3, + PT_F4, + PT_F5, + PT_F6, + PT_F7, + PT_F8, + PT_F9, + PT_F10, + PT_F11, + PT_F12, + PT_F13, + PT_F14, + PT_F15, + PT_F16, + PT_F17, + PT_F18, + PT_F19, + PT_F20, + PT_F21, + PT_F22, + PT_F23, + PT_F24, + PT_F25, + PT_F26, + PT_F27, + PT_F28, + PT_F29, + PT_F30, + PT_F31, + PT_F32, + PT_F33, + PT_F34, + PT_F35, + PT_F36, + PT_F37, + PT_F38, + PT_F39, + PT_F40, + PT_F41, + PT_F42, + PT_F43, + PT_F44, + PT_F45, + PT_F46, + PT_F47, + PT_F48, + PT_F49, + PT_F50, + PT_F51, + PT_F52, + PT_F53, + PT_F54, + PT_F55, + PT_F56, + PT_F57, + PT_F58, + PT_F59, + PT_F60, + PT_F61, + PT_F62, + PT_F63, + PT_F64, + PT_F65, + PT_F66, + PT_F67, + PT_F68, + PT_F69, + PT_F70, + PT_F71, + PT_F72, + PT_F73, + PT_F74, + PT_F75, + PT_F76, + PT_F77, + PT_F78, + PT_F79, + PT_F80, + PT_F81, + PT_F82, + PT_F83, + PT_F84, + PT_F85, + PT_F86, + PT_F87, + PT_F88, + PT_F89, + PT_F90, + PT_F91, + PT_F92, + PT_F93, + PT_F94, + PT_F95, + PT_F96, + PT_F97, + PT_F98, + PT_F99, + PT_F100, + PT_F101, + PT_F102, + PT_F103, + PT_F104, + PT_F105, + PT_F106, + PT_F107, + PT_F108, + PT_F109, + PT_F110, + PT_F111, + PT_F112, + PT_F113, + PT_F114, + PT_F115, + PT_F116, + PT_F117, + PT_F118, + PT_F119, + PT_F120, + PT_F121, + PT_F122, + PT_F123, + PT_F124, + PT_F125, + PT_F126, + PT_F127, + /* predicate registers - we don't fetch these individually */ + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + /* branch registers */ + PT_B0, + PT_B1, + PT_B2, + PT_B3, + PT_B4, + PT_B5, + PT_B6, + PT_B7, + /* virtual frame pointer and virtual return address pointer */ + -1, -1, + /* other registers */ + PT_PR, + PT_CR_IIP, /* ip */ + PT_CR_IPSR, /* psr */ + PT_CFM, /* cfm */ + /* kernel registers not visible via ptrace interface (?) */ + -1, -1, -1, -1, -1, -1, -1, -1, + /* hole */ + -1, -1, -1, -1, -1, -1, -1, -1, + PT_AR_RSC, + PT_AR_BSP, + PT_AR_BSPSTORE, + PT_AR_RNAT, + -1, + -1, /* Not available: FCR, IA32 floating control register */ + -1, -1, + -1, /* Not available: EFLAG */ + -1, /* Not available: CSD */ + -1, /* Not available: SSD */ + -1, /* Not available: CFLG */ + -1, /* Not available: FSR */ + -1, /* Not available: FIR */ + -1, /* Not available: FDR */ + -1, + PT_AR_CCV, + -1, -1, -1, + PT_AR_UNAT, + -1, -1, -1, + PT_AR_FPSR, + -1, -1, -1, + -1, /* Not available: ITC */ + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, + PT_AR_PFS, + PT_AR_LC, + PT_AR_EC, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, + }; + +bool +ia64_target::low_cannot_store_register (int regno) +{ + return false; +} + +bool +ia64_target::low_cannot_fetch_register (int regno) +{ + return false; +} + +/* GDB register numbers. */ +#define IA64_GR0_REGNUM 0 +#define IA64_FR0_REGNUM 128 +#define IA64_FR1_REGNUM 129 + +bool +ia64_target::low_fetch_register (regcache *regcache, int regnum) +{ + /* r0 cannot be fetched but is always zero. */ + if (regnum == IA64_GR0_REGNUM) + { + const gdb_byte zero[8] = { 0 }; + + gdb_assert (sizeof (zero) == register_size (regcache->tdesc, regnum)); + supply_register (regcache, regnum, zero); + return true; + } + + /* fr0 cannot be fetched but is always zero. */ + if (regnum == IA64_FR0_REGNUM) + { + const gdb_byte f_zero[16] = { 0 }; + + gdb_assert (sizeof (f_zero) == register_size (regcache->tdesc, regnum)); + supply_register (regcache, regnum, f_zero); + return true; + } + + /* fr1 cannot be fetched but is always one (1.0). */ + if (regnum == IA64_FR1_REGNUM) + { + const gdb_byte f_one[16] = + { 0, 0, 0, 0, 0, 0, 0, 0x80, 0xff, 0xff, 0, 0, 0, 0, 0, 0 }; + + gdb_assert (sizeof (f_one) == register_size (regcache->tdesc, regnum)); + supply_register (regcache, regnum, f_one); + return true; + } + + return false; +} + +static struct usrregs_info ia64_usrregs_info = + { + ia64_num_regs, + ia64_regmap, + }; + +static struct regs_info myregs_info = + { + NULL, /* regset_bitmap */ + &ia64_usrregs_info + }; + +const regs_info * +ia64_target::get_regs_info () +{ + return &myregs_info; +} + +void +ia64_target::low_arch_setup () +{ + current_process ()->tdesc = tdesc_ia64; +} + +/* The linux target ops object. */ + +linux_process_target *the_linux_target = &the_ia64_target; + +void +initialize_low_arch (void) +{ + init_registers_ia64 (); +} diff -Nru gdb-9.1/gdbserver/linux-low.cc gdb-10.2/gdbserver/linux-low.cc --- gdb-9.1/gdbserver/linux-low.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/linux-low.cc 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,7253 @@ +/* Low level interface to ptrace, for the remote server for GDB. + Copyright (C) 1995-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "server.h" +#include "linux-low.h" +#include "nat/linux-osdata.h" +#include "gdbsupport/agent.h" +#include "tdesc.h" +#include "gdbsupport/rsp-low.h" +#include "gdbsupport/signals-state-save-restore.h" +#include "nat/linux-nat.h" +#include "nat/linux-waitpid.h" +#include "gdbsupport/gdb_wait.h" +#include "nat/gdb_ptrace.h" +#include "nat/linux-ptrace.h" +#include "nat/linux-procfs.h" +#include "nat/linux-personality.h" +#include <signal.h> +#include <sys/ioctl.h> +#include <fcntl.h> +#include <unistd.h> +#include <sys/syscall.h> +#include <sched.h> +#include <ctype.h> +#include <pwd.h> +#include <sys/types.h> +#include <dirent.h> +#include <sys/stat.h> +#include <sys/vfs.h> +#include <sys/uio.h> +#include "gdbsupport/filestuff.h" +#include "tracepoint.h" +#include <inttypes.h> +#include "gdbsupport/common-inferior.h" +#include "nat/fork-inferior.h" +#include "gdbsupport/environ.h" +#include "gdbsupport/gdb-sigmask.h" +#include "gdbsupport/scoped_restore.h" +#ifndef ELFMAG0 +/* Don't include <linux/elf.h> here. If it got included by gdb_proc_service.h + then ELFMAG0 will have been defined. If it didn't get included by + gdb_proc_service.h then including it will likely introduce a duplicate + definition of elf_fpregset_t. */ +#include <elf.h> +#endif +#include "nat/linux-namespaces.h" + +#ifdef HAVE_PERSONALITY +# include <sys/personality.h> +# if !HAVE_DECL_ADDR_NO_RANDOMIZE +# define ADDR_NO_RANDOMIZE 0x0040000 +# endif +#endif + +#ifndef O_LARGEFILE +#define O_LARGEFILE 0 +#endif + +#ifndef AT_HWCAP2 +#define AT_HWCAP2 26 +#endif + +/* Some targets did not define these ptrace constants from the start, + so gdbserver defines them locally here. In the future, these may + be removed after they are added to asm/ptrace.h. */ +#if !(defined(PT_TEXT_ADDR) \ + || defined(PT_DATA_ADDR) \ + || defined(PT_TEXT_END_ADDR)) +#if defined(__mcoldfire__) +/* These are still undefined in 3.10 kernels. */ +#define PT_TEXT_ADDR 49*4 +#define PT_DATA_ADDR 50*4 +#define PT_TEXT_END_ADDR 51*4 +/* These are still undefined in 3.10 kernels. */ +#elif defined(__TMS320C6X__) +#define PT_TEXT_ADDR (0x10000*4) +#define PT_DATA_ADDR (0x10004*4) +#define PT_TEXT_END_ADDR (0x10008*4) +#endif +#endif + +#if (defined(__UCLIBC__) \ + && defined(HAS_NOMMU) \ + && defined(PT_TEXT_ADDR) \ + && defined(PT_DATA_ADDR) \ + && defined(PT_TEXT_END_ADDR)) +#define SUPPORTS_READ_OFFSETS +#endif + +#ifdef HAVE_LINUX_BTRACE +# include "nat/linux-btrace.h" +# include "gdbsupport/btrace-common.h" +#endif + +#ifndef HAVE_ELF32_AUXV_T +/* Copied from glibc's elf.h. */ +typedef struct +{ + uint32_t a_type; /* Entry type */ + union + { + uint32_t a_val; /* Integer value */ + /* We use to have pointer elements added here. We cannot do that, + though, since it does not work when using 32-bit definitions + on 64-bit platforms and vice versa. */ + } a_un; +} Elf32_auxv_t; +#endif + +#ifndef HAVE_ELF64_AUXV_T +/* Copied from glibc's elf.h. */ +typedef struct +{ + uint64_t a_type; /* Entry type */ + union + { + uint64_t a_val; /* Integer value */ + /* We use to have pointer elements added here. We cannot do that, + though, since it does not work when using 32-bit definitions + on 64-bit platforms and vice versa. */ + } a_un; +} Elf64_auxv_t; +#endif + +/* Does the current host support PTRACE_GETREGSET? */ +int have_ptrace_getregset = -1; + +/* LWP accessors. */ + +/* See nat/linux-nat.h. */ + +ptid_t +ptid_of_lwp (struct lwp_info *lwp) +{ + return ptid_of (get_lwp_thread (lwp)); +} + +/* See nat/linux-nat.h. */ + +void +lwp_set_arch_private_info (struct lwp_info *lwp, + struct arch_lwp_info *info) +{ + lwp->arch_private = info; +} + +/* See nat/linux-nat.h. */ + +struct arch_lwp_info * +lwp_arch_private_info (struct lwp_info *lwp) +{ + return lwp->arch_private; +} + +/* See nat/linux-nat.h. */ + +int +lwp_is_stopped (struct lwp_info *lwp) +{ + return lwp->stopped; +} + +/* See nat/linux-nat.h. */ + +enum target_stop_reason +lwp_stop_reason (struct lwp_info *lwp) +{ + return lwp->stop_reason; +} + +/* See nat/linux-nat.h. */ + +int +lwp_is_stepping (struct lwp_info *lwp) +{ + return lwp->stepping; +} + +/* A list of all unknown processes which receive stop signals. Some + other process will presumably claim each of these as forked + children momentarily. */ + +struct simple_pid_list +{ + /* The process ID. */ + int pid; + + /* The status as reported by waitpid. */ + int status; + + /* Next in chain. */ + struct simple_pid_list *next; +}; +static struct simple_pid_list *stopped_pids; + +/* Trivial list manipulation functions to keep track of a list of new + stopped processes. */ + +static void +add_to_pid_list (struct simple_pid_list **listp, int pid, int status) +{ + struct simple_pid_list *new_pid = XNEW (struct simple_pid_list); + + new_pid->pid = pid; + new_pid->status = status; + new_pid->next = *listp; + *listp = new_pid; +} + +static int +pull_pid_from_list (struct simple_pid_list **listp, int pid, int *statusp) +{ + struct simple_pid_list **p; + + for (p = listp; *p != NULL; p = &(*p)->next) + if ((*p)->pid == pid) + { + struct simple_pid_list *next = (*p)->next; + + *statusp = (*p)->status; + xfree (*p); + *p = next; + return 1; + } + return 0; +} + +enum stopping_threads_kind + { + /* Not stopping threads presently. */ + NOT_STOPPING_THREADS, + + /* Stopping threads. */ + STOPPING_THREADS, + + /* Stopping and suspending threads. */ + STOPPING_AND_SUSPENDING_THREADS + }; + +/* This is set while stop_all_lwps is in effect. */ +enum stopping_threads_kind stopping_threads = NOT_STOPPING_THREADS; + +/* FIXME make into a target method? */ +int using_threads = 1; + +/* True if we're presently stabilizing threads (moving them out of + jump pads). */ +static int stabilizing_threads; + +static void unsuspend_all_lwps (struct lwp_info *except); +static void mark_lwp_dead (struct lwp_info *lwp, int wstat); +static int lwp_is_marked_dead (struct lwp_info *lwp); +static int kill_lwp (unsigned long lwpid, int signo); +static void enqueue_pending_signal (struct lwp_info *lwp, int signal, siginfo_t *info); +static int linux_low_ptrace_options (int attached); +static int check_ptrace_stopped_lwp_gone (struct lwp_info *lp); + +/* When the event-loop is doing a step-over, this points at the thread + being stepped. */ +ptid_t step_over_bkpt; + +bool +linux_process_target::low_supports_breakpoints () +{ + return false; +} + +CORE_ADDR +linux_process_target::low_get_pc (regcache *regcache) +{ + return 0; +} + +void +linux_process_target::low_set_pc (regcache *regcache, CORE_ADDR newpc) +{ + gdb_assert_not_reached ("linux target op low_set_pc is not implemented"); +} + +std::vector<CORE_ADDR> +linux_process_target::low_get_next_pcs (regcache *regcache) +{ + gdb_assert_not_reached ("linux target op low_get_next_pcs is not " + "implemented"); +} + +int +linux_process_target::low_decr_pc_after_break () +{ + return 0; +} + +/* True if LWP is stopped in its stepping range. */ + +static int +lwp_in_step_range (struct lwp_info *lwp) +{ + CORE_ADDR pc = lwp->stop_pc; + + return (pc >= lwp->step_range_start && pc < lwp->step_range_end); +} + +/* The read/write ends of the pipe registered as waitable file in the + event loop. */ +static int linux_event_pipe[2] = { -1, -1 }; + +/* True if we're currently in async mode. */ +#define target_is_async_p() (linux_event_pipe[0] != -1) + +static void send_sigstop (struct lwp_info *lwp); + +/* Return non-zero if HEADER is a 64-bit ELF file. */ + +static int +elf_64_header_p (const Elf64_Ehdr *header, unsigned int *machine) +{ + if (header->e_ident[EI_MAG0] == ELFMAG0 + && header->e_ident[EI_MAG1] == ELFMAG1 + && header->e_ident[EI_MAG2] == ELFMAG2 + && header->e_ident[EI_MAG3] == ELFMAG3) + { + *machine = header->e_machine; + return header->e_ident[EI_CLASS] == ELFCLASS64; + + } + *machine = EM_NONE; + return -1; +} + +/* Return non-zero if FILE is a 64-bit ELF file, + zero if the file is not a 64-bit ELF file, + and -1 if the file is not accessible or doesn't exist. */ + +static int +elf_64_file_p (const char *file, unsigned int *machine) +{ + Elf64_Ehdr header; + int fd; + + fd = open (file, O_RDONLY); + if (fd < 0) + return -1; + + if (read (fd, &header, sizeof (header)) != sizeof (header)) + { + close (fd); + return 0; + } + close (fd); + + return elf_64_header_p (&header, machine); +} + +/* Accepts an integer PID; Returns true if the executable PID is + running is a 64-bit ELF file.. */ + +int +linux_pid_exe_is_elf_64_file (int pid, unsigned int *machine) +{ + char file[PATH_MAX]; + + sprintf (file, "/proc/%d/exe", pid); + return elf_64_file_p (file, machine); +} + +void +linux_process_target::delete_lwp (lwp_info *lwp) +{ + struct thread_info *thr = get_lwp_thread (lwp); + + if (debug_threads) + debug_printf ("deleting %ld\n", lwpid_of (thr)); + + remove_thread (thr); + + low_delete_thread (lwp->arch_private); + + delete lwp; +} + +void +linux_process_target::low_delete_thread (arch_lwp_info *info) +{ + /* Default implementation should be overridden if architecture-specific + info is being used. */ + gdb_assert (info == nullptr); +} + +process_info * +linux_process_target::add_linux_process (int pid, int attached) +{ + struct process_info *proc; + + proc = add_process (pid, attached); + proc->priv = XCNEW (struct process_info_private); + + proc->priv->arch_private = low_new_process (); + + return proc; +} + +arch_process_info * +linux_process_target::low_new_process () +{ + return nullptr; +} + +void +linux_process_target::low_delete_process (arch_process_info *info) +{ + /* Default implementation must be overridden if architecture-specific + info exists. */ + gdb_assert (info == nullptr); +} + +void +linux_process_target::low_new_fork (process_info *parent, process_info *child) +{ + /* Nop. */ +} + +void +linux_process_target::arch_setup_thread (thread_info *thread) +{ + struct thread_info *saved_thread; + + saved_thread = current_thread; + current_thread = thread; + + low_arch_setup (); + + current_thread = saved_thread; +} + +int +linux_process_target::handle_extended_wait (lwp_info **orig_event_lwp, + int wstat) +{ + client_state &cs = get_client_state (); + struct lwp_info *event_lwp = *orig_event_lwp; + int event = linux_ptrace_get_extended_event (wstat); + struct thread_info *event_thr = get_lwp_thread (event_lwp); + struct lwp_info *new_lwp; + + gdb_assert (event_lwp->waitstatus.kind == TARGET_WAITKIND_IGNORE); + + /* All extended events we currently use are mid-syscall. Only + PTRACE_EVENT_STOP is delivered more like a signal-stop, but + you have to be using PTRACE_SEIZE to get that. */ + event_lwp->syscall_state = TARGET_WAITKIND_SYSCALL_ENTRY; + + if ((event == PTRACE_EVENT_FORK) || (event == PTRACE_EVENT_VFORK) + || (event == PTRACE_EVENT_CLONE)) + { + ptid_t ptid; + unsigned long new_pid; + int ret, status; + + /* Get the pid of the new lwp. */ + ptrace (PTRACE_GETEVENTMSG, lwpid_of (event_thr), (PTRACE_TYPE_ARG3) 0, + &new_pid); + + /* If we haven't already seen the new PID stop, wait for it now. */ + if (!pull_pid_from_list (&stopped_pids, new_pid, &status)) + { + /* The new child has a pending SIGSTOP. We can't affect it until it + hits the SIGSTOP, but we're already attached. */ + + ret = my_waitpid (new_pid, &status, __WALL); + + if (ret == -1) + perror_with_name ("waiting for new child"); + else if (ret != new_pid) + warning ("wait returned unexpected PID %d", ret); + else if (!WIFSTOPPED (status)) + warning ("wait returned unexpected status 0x%x", status); + } + + if (event == PTRACE_EVENT_FORK || event == PTRACE_EVENT_VFORK) + { + struct process_info *parent_proc; + struct process_info *child_proc; + struct lwp_info *child_lwp; + struct thread_info *child_thr; + struct target_desc *tdesc; + + ptid = ptid_t (new_pid, new_pid, 0); + + if (debug_threads) + { + debug_printf ("HEW: Got fork event from LWP %ld, " + "new child is %d\n", + ptid_of (event_thr).lwp (), + ptid.pid ()); + } + + /* Add the new process to the tables and clone the breakpoint + lists of the parent. We need to do this even if the new process + will be detached, since we will need the process object and the + breakpoints to remove any breakpoints from memory when we + detach, and the client side will access registers. */ + child_proc = add_linux_process (new_pid, 0); + gdb_assert (child_proc != NULL); + child_lwp = add_lwp (ptid); + gdb_assert (child_lwp != NULL); + child_lwp->stopped = 1; + child_lwp->must_set_ptrace_flags = 1; + child_lwp->status_pending_p = 0; + child_thr = get_lwp_thread (child_lwp); + child_thr->last_resume_kind = resume_stop; + child_thr->last_status.kind = TARGET_WAITKIND_STOPPED; + + /* If we're suspending all threads, leave this one suspended + too. If the fork/clone parent is stepping over a breakpoint, + all other threads have been suspended already. Leave the + child suspended too. */ + if (stopping_threads == STOPPING_AND_SUSPENDING_THREADS + || event_lwp->bp_reinsert != 0) + { + if (debug_threads) + debug_printf ("HEW: leaving child suspended\n"); + child_lwp->suspended = 1; + } + + parent_proc = get_thread_process (event_thr); + child_proc->attached = parent_proc->attached; + + if (event_lwp->bp_reinsert != 0 + && supports_software_single_step () + && event == PTRACE_EVENT_VFORK) + { + /* If we leave single-step breakpoints there, child will + hit it, so uninsert single-step breakpoints from parent + (and child). Once vfork child is done, reinsert + them back to parent. */ + uninsert_single_step_breakpoints (event_thr); + } + + clone_all_breakpoints (child_thr, event_thr); + + tdesc = allocate_target_description (); + copy_target_description (tdesc, parent_proc->tdesc); + child_proc->tdesc = tdesc; + + /* Clone arch-specific process data. */ + low_new_fork (parent_proc, child_proc); + + /* Save fork info in the parent thread. */ + if (event == PTRACE_EVENT_FORK) + event_lwp->waitstatus.kind = TARGET_WAITKIND_FORKED; + else if (event == PTRACE_EVENT_VFORK) + event_lwp->waitstatus.kind = TARGET_WAITKIND_VFORKED; + + event_lwp->waitstatus.value.related_pid = ptid; + + /* The status_pending field contains bits denoting the + extended event, so when the pending event is handled, + the handler will look at lwp->waitstatus. */ + event_lwp->status_pending_p = 1; + event_lwp->status_pending = wstat; + + /* Link the threads until the parent event is passed on to + higher layers. */ + event_lwp->fork_relative = child_lwp; + child_lwp->fork_relative = event_lwp; + + /* If the parent thread is doing step-over with single-step + breakpoints, the list of single-step breakpoints are cloned + from the parent's. Remove them from the child process. + In case of vfork, we'll reinsert them back once vforked + child is done. */ + if (event_lwp->bp_reinsert != 0 + && supports_software_single_step ()) + { + /* The child process is forked and stopped, so it is safe + to access its memory without stopping all other threads + from other processes. */ + delete_single_step_breakpoints (child_thr); + + gdb_assert (has_single_step_breakpoints (event_thr)); + gdb_assert (!has_single_step_breakpoints (child_thr)); + } + + /* Report the event. */ + return 0; + } + + if (debug_threads) + debug_printf ("HEW: Got clone event " + "from LWP %ld, new child is LWP %ld\n", + lwpid_of (event_thr), new_pid); + + ptid = ptid_t (pid_of (event_thr), new_pid, 0); + new_lwp = add_lwp (ptid); + + /* Either we're going to immediately resume the new thread + or leave it stopped. resume_one_lwp is a nop if it + thinks the thread is currently running, so set this first + before calling resume_one_lwp. */ + new_lwp->stopped = 1; + + /* If we're suspending all threads, leave this one suspended + too. If the fork/clone parent is stepping over a breakpoint, + all other threads have been suspended already. Leave the + child suspended too. */ + if (stopping_threads == STOPPING_AND_SUSPENDING_THREADS + || event_lwp->bp_reinsert != 0) + new_lwp->suspended = 1; + + /* Normally we will get the pending SIGSTOP. But in some cases + we might get another signal delivered to the group first. + If we do get another signal, be sure not to lose it. */ + if (WSTOPSIG (status) != SIGSTOP) + { + new_lwp->stop_expected = 1; + new_lwp->status_pending_p = 1; + new_lwp->status_pending = status; + } + else if (cs.report_thread_events) + { + new_lwp->waitstatus.kind = TARGET_WAITKIND_THREAD_CREATED; + new_lwp->status_pending_p = 1; + new_lwp->status_pending = status; + } + +#ifdef USE_THREAD_DB + thread_db_notice_clone (event_thr, ptid); +#endif + + /* Don't report the event. */ + return 1; + } + else if (event == PTRACE_EVENT_VFORK_DONE) + { + event_lwp->waitstatus.kind = TARGET_WAITKIND_VFORK_DONE; + + if (event_lwp->bp_reinsert != 0 && supports_software_single_step ()) + { + reinsert_single_step_breakpoints (event_thr); + + gdb_assert (has_single_step_breakpoints (event_thr)); + } + + /* Report the event. */ + return 0; + } + else if (event == PTRACE_EVENT_EXEC && cs.report_exec_events) + { + struct process_info *proc; + std::vector<int> syscalls_to_catch; + ptid_t event_ptid; + pid_t event_pid; + + if (debug_threads) + { + debug_printf ("HEW: Got exec event from LWP %ld\n", + lwpid_of (event_thr)); + } + + /* Get the event ptid. */ + event_ptid = ptid_of (event_thr); + event_pid = event_ptid.pid (); + + /* Save the syscall list from the execing process. */ + proc = get_thread_process (event_thr); + syscalls_to_catch = std::move (proc->syscalls_to_catch); + + /* Delete the execing process and all its threads. */ + mourn (proc); + current_thread = NULL; + + /* Create a new process/lwp/thread. */ + proc = add_linux_process (event_pid, 0); + event_lwp = add_lwp (event_ptid); + event_thr = get_lwp_thread (event_lwp); + gdb_assert (current_thread == event_thr); + arch_setup_thread (event_thr); + + /* Set the event status. */ + event_lwp->waitstatus.kind = TARGET_WAITKIND_EXECD; + event_lwp->waitstatus.value.execd_pathname + = xstrdup (linux_proc_pid_to_exec_file (lwpid_of (event_thr))); + + /* Mark the exec status as pending. */ + event_lwp->stopped = 1; + event_lwp->status_pending_p = 1; + event_lwp->status_pending = wstat; + event_thr->last_resume_kind = resume_continue; + event_thr->last_status.kind = TARGET_WAITKIND_IGNORE; + + /* Update syscall state in the new lwp, effectively mid-syscall too. */ + event_lwp->syscall_state = TARGET_WAITKIND_SYSCALL_ENTRY; + + /* Restore the list to catch. Don't rely on the client, which is free + to avoid sending a new list when the architecture doesn't change. + Also, for ANY_SYSCALL, the architecture doesn't really matter. */ + proc->syscalls_to_catch = std::move (syscalls_to_catch); + + /* Report the event. */ + *orig_event_lwp = event_lwp; + return 0; + } + + internal_error (__FILE__, __LINE__, _("unknown ptrace event %d"), event); +} + +CORE_ADDR +linux_process_target::get_pc (lwp_info *lwp) +{ + struct thread_info *saved_thread; + struct regcache *regcache; + CORE_ADDR pc; + + if (!low_supports_breakpoints ()) + return 0; + + saved_thread = current_thread; + current_thread = get_lwp_thread (lwp); + + regcache = get_thread_regcache (current_thread, 1); + pc = low_get_pc (regcache); + + if (debug_threads) + debug_printf ("pc is 0x%lx\n", (long) pc); + + current_thread = saved_thread; + return pc; +} + +void +linux_process_target::get_syscall_trapinfo (lwp_info *lwp, int *sysno) +{ + struct thread_info *saved_thread; + struct regcache *regcache; + + saved_thread = current_thread; + current_thread = get_lwp_thread (lwp); + + regcache = get_thread_regcache (current_thread, 1); + low_get_syscall_trapinfo (regcache, sysno); + + if (debug_threads) + debug_printf ("get_syscall_trapinfo sysno %d\n", *sysno); + + current_thread = saved_thread; +} + +void +linux_process_target::low_get_syscall_trapinfo (regcache *regcache, int *sysno) +{ + /* By default, report an unknown system call number. */ + *sysno = UNKNOWN_SYSCALL; +} + +bool +linux_process_target::save_stop_reason (lwp_info *lwp) +{ + CORE_ADDR pc; + CORE_ADDR sw_breakpoint_pc; + struct thread_info *saved_thread; +#if USE_SIGTRAP_SIGINFO + siginfo_t siginfo; +#endif + + if (!low_supports_breakpoints ()) + return false; + + pc = get_pc (lwp); + sw_breakpoint_pc = pc - low_decr_pc_after_break (); + + /* breakpoint_at reads from the current thread. */ + saved_thread = current_thread; + current_thread = get_lwp_thread (lwp); + +#if USE_SIGTRAP_SIGINFO + if (ptrace (PTRACE_GETSIGINFO, lwpid_of (current_thread), + (PTRACE_TYPE_ARG3) 0, &siginfo) == 0) + { + if (siginfo.si_signo == SIGTRAP) + { + if (GDB_ARCH_IS_TRAP_BRKPT (siginfo.si_code) + && GDB_ARCH_IS_TRAP_HWBKPT (siginfo.si_code)) + { + /* The si_code is ambiguous on this arch -- check debug + registers. */ + if (!check_stopped_by_watchpoint (lwp)) + lwp->stop_reason = TARGET_STOPPED_BY_SW_BREAKPOINT; + } + else if (GDB_ARCH_IS_TRAP_BRKPT (siginfo.si_code)) + { + /* If we determine the LWP stopped for a SW breakpoint, + trust it. Particularly don't check watchpoint + registers, because at least on s390, we'd find + stopped-by-watchpoint as long as there's a watchpoint + set. */ + lwp->stop_reason = TARGET_STOPPED_BY_SW_BREAKPOINT; + } + else if (GDB_ARCH_IS_TRAP_HWBKPT (siginfo.si_code)) + { + /* This can indicate either a hardware breakpoint or + hardware watchpoint. Check debug registers. */ + if (!check_stopped_by_watchpoint (lwp)) + lwp->stop_reason = TARGET_STOPPED_BY_HW_BREAKPOINT; + } + else if (siginfo.si_code == TRAP_TRACE) + { + /* We may have single stepped an instruction that + triggered a watchpoint. In that case, on some + architectures (such as x86), instead of TRAP_HWBKPT, + si_code indicates TRAP_TRACE, and we need to check + the debug registers separately. */ + if (!check_stopped_by_watchpoint (lwp)) + lwp->stop_reason = TARGET_STOPPED_BY_SINGLE_STEP; + } + } + } +#else + /* We may have just stepped a breakpoint instruction. E.g., in + non-stop mode, GDB first tells the thread A to step a range, and + then the user inserts a breakpoint inside the range. In that + case we need to report the breakpoint PC. */ + if ((!lwp->stepping || lwp->stop_pc == sw_breakpoint_pc) + && low_breakpoint_at (sw_breakpoint_pc)) + lwp->stop_reason = TARGET_STOPPED_BY_SW_BREAKPOINT; + + if (hardware_breakpoint_inserted_here (pc)) + lwp->stop_reason = TARGET_STOPPED_BY_HW_BREAKPOINT; + + if (lwp->stop_reason == TARGET_STOPPED_BY_NO_REASON) + check_stopped_by_watchpoint (lwp); +#endif + + if (lwp->stop_reason == TARGET_STOPPED_BY_SW_BREAKPOINT) + { + if (debug_threads) + { + struct thread_info *thr = get_lwp_thread (lwp); + + debug_printf ("CSBB: %s stopped by software breakpoint\n", + target_pid_to_str (ptid_of (thr))); + } + + /* Back up the PC if necessary. */ + if (pc != sw_breakpoint_pc) + { + struct regcache *regcache + = get_thread_regcache (current_thread, 1); + low_set_pc (regcache, sw_breakpoint_pc); + } + + /* Update this so we record the correct stop PC below. */ + pc = sw_breakpoint_pc; + } + else if (lwp->stop_reason == TARGET_STOPPED_BY_HW_BREAKPOINT) + { + if (debug_threads) + { + struct thread_info *thr = get_lwp_thread (lwp); + + debug_printf ("CSBB: %s stopped by hardware breakpoint\n", + target_pid_to_str (ptid_of (thr))); + } + } + else if (lwp->stop_reason == TARGET_STOPPED_BY_WATCHPOINT) + { + if (debug_threads) + { + struct thread_info *thr = get_lwp_thread (lwp); + + debug_printf ("CSBB: %s stopped by hardware watchpoint\n", + target_pid_to_str (ptid_of (thr))); + } + } + else if (lwp->stop_reason == TARGET_STOPPED_BY_SINGLE_STEP) + { + if (debug_threads) + { + struct thread_info *thr = get_lwp_thread (lwp); + + debug_printf ("CSBB: %s stopped by trace\n", + target_pid_to_str (ptid_of (thr))); + } + } + + lwp->stop_pc = pc; + current_thread = saved_thread; + return true; +} + +lwp_info * +linux_process_target::add_lwp (ptid_t ptid) +{ + struct lwp_info *lwp; + + lwp = new lwp_info {}; + + lwp->waitstatus.kind = TARGET_WAITKIND_IGNORE; + + lwp->thread = add_thread (ptid, lwp); + + low_new_thread (lwp); + + return lwp; +} + +void +linux_process_target::low_new_thread (lwp_info *info) +{ + /* Nop. */ +} + +/* Callback to be used when calling fork_inferior, responsible for + actually initiating the tracing of the inferior. */ + +static void +linux_ptrace_fun () +{ + if (ptrace (PTRACE_TRACEME, 0, (PTRACE_TYPE_ARG3) 0, + (PTRACE_TYPE_ARG4) 0) < 0) + trace_start_error_with_name ("ptrace"); + + if (setpgid (0, 0) < 0) + trace_start_error_with_name ("setpgid"); + + /* If GDBserver is connected to gdb via stdio, redirect the inferior's + stdout to stderr so that inferior i/o doesn't corrupt the connection. + Also, redirect stdin to /dev/null. */ + if (remote_connection_is_stdio ()) + { + if (close (0) < 0) + trace_start_error_with_name ("close"); + if (open ("/dev/null", O_RDONLY) < 0) + trace_start_error_with_name ("open"); + if (dup2 (2, 1) < 0) + trace_start_error_with_name ("dup2"); + if (write (2, "stdin/stdout redirected\n", + sizeof ("stdin/stdout redirected\n") - 1) < 0) + { + /* Errors ignored. */; + } + } +} + +/* Start an inferior process and returns its pid. + PROGRAM is the name of the program to be started, and PROGRAM_ARGS + are its arguments. */ + +int +linux_process_target::create_inferior (const char *program, + const std::vector<char *> &program_args) +{ + client_state &cs = get_client_state (); + struct lwp_info *new_lwp; + int pid; + ptid_t ptid; + + { + maybe_disable_address_space_randomization restore_personality + (cs.disable_randomization); + std::string str_program_args = construct_inferior_arguments (program_args); + + pid = fork_inferior (program, + str_program_args.c_str (), + get_environ ()->envp (), linux_ptrace_fun, + NULL, NULL, NULL, NULL); + } + + add_linux_process (pid, 0); + + ptid = ptid_t (pid, pid, 0); + new_lwp = add_lwp (ptid); + new_lwp->must_set_ptrace_flags = 1; + + post_fork_inferior (pid, program); + + return pid; +} + +/* Implement the post_create_inferior target_ops method. */ + +void +linux_process_target::post_create_inferior () +{ + struct lwp_info *lwp = get_thread_lwp (current_thread); + + low_arch_setup (); + + if (lwp->must_set_ptrace_flags) + { + struct process_info *proc = current_process (); + int options = linux_low_ptrace_options (proc->attached); + + linux_enable_event_reporting (lwpid_of (current_thread), options); + lwp->must_set_ptrace_flags = 0; + } +} + +int +linux_process_target::attach_lwp (ptid_t ptid) +{ + struct lwp_info *new_lwp; + int lwpid = ptid.lwp (); + + if (ptrace (PTRACE_ATTACH, lwpid, (PTRACE_TYPE_ARG3) 0, (PTRACE_TYPE_ARG4) 0) + != 0) + return errno; + + new_lwp = add_lwp (ptid); + + /* We need to wait for SIGSTOP before being able to make the next + ptrace call on this LWP. */ + new_lwp->must_set_ptrace_flags = 1; + + if (linux_proc_pid_is_stopped (lwpid)) + { + if (debug_threads) + debug_printf ("Attached to a stopped process\n"); + + /* The process is definitely stopped. It is in a job control + stop, unless the kernel predates the TASK_STOPPED / + TASK_TRACED distinction, in which case it might be in a + ptrace stop. Make sure it is in a ptrace stop; from there we + can kill it, signal it, et cetera. + + First make sure there is a pending SIGSTOP. Since we are + already attached, the process can not transition from stopped + to running without a PTRACE_CONT; so we know this signal will + go into the queue. The SIGSTOP generated by PTRACE_ATTACH is + probably already in the queue (unless this kernel is old + enough to use TASK_STOPPED for ptrace stops); but since + SIGSTOP is not an RT signal, it can only be queued once. */ + kill_lwp (lwpid, SIGSTOP); + + /* Finally, resume the stopped process. This will deliver the + SIGSTOP (or a higher priority signal, just like normal + PTRACE_ATTACH), which we'll catch later on. */ + ptrace (PTRACE_CONT, lwpid, (PTRACE_TYPE_ARG3) 0, (PTRACE_TYPE_ARG4) 0); + } + + /* The next time we wait for this LWP we'll see a SIGSTOP as PTRACE_ATTACH + brings it to a halt. + + There are several cases to consider here: + + 1) gdbserver has already attached to the process and is being notified + of a new thread that is being created. + In this case we should ignore that SIGSTOP and resume the + process. This is handled below by setting stop_expected = 1, + and the fact that add_thread sets last_resume_kind == + resume_continue. + + 2) This is the first thread (the process thread), and we're attaching + to it via attach_inferior. + In this case we want the process thread to stop. + This is handled by having linux_attach set last_resume_kind == + resume_stop after we return. + + If the pid we are attaching to is also the tgid, we attach to and + stop all the existing threads. Otherwise, we attach to pid and + ignore any other threads in the same group as this pid. + + 3) GDB is connecting to gdbserver and is requesting an enumeration of all + existing threads. + In this case we want the thread to stop. + FIXME: This case is currently not properly handled. + We should wait for the SIGSTOP but don't. Things work apparently + because enough time passes between when we ptrace (ATTACH) and when + gdb makes the next ptrace call on the thread. + + On the other hand, if we are currently trying to stop all threads, we + should treat the new thread as if we had sent it a SIGSTOP. This works + because we are guaranteed that the add_lwp call above added us to the + end of the list, and so the new thread has not yet reached + wait_for_sigstop (but will). */ + new_lwp->stop_expected = 1; + + return 0; +} + +/* Callback for linux_proc_attach_tgid_threads. Attach to PTID if not + already attached. Returns true if a new LWP is found, false + otherwise. */ + +static int +attach_proc_task_lwp_callback (ptid_t ptid) +{ + /* Is this a new thread? */ + if (find_thread_ptid (ptid) == NULL) + { + int lwpid = ptid.lwp (); + int err; + + if (debug_threads) + debug_printf ("Found new lwp %d\n", lwpid); + + err = the_linux_target->attach_lwp (ptid); + + /* Be quiet if we simply raced with the thread exiting. EPERM + is returned if the thread's task still exists, and is marked + as exited or zombie, as well as other conditions, so in that + case, confirm the status in /proc/PID/status. */ + if (err == ESRCH + || (err == EPERM && linux_proc_pid_is_gone (lwpid))) + { + if (debug_threads) + { + debug_printf ("Cannot attach to lwp %d: " + "thread is gone (%d: %s)\n", + lwpid, err, safe_strerror (err)); + } + } + else if (err != 0) + { + std::string reason + = linux_ptrace_attach_fail_reason_string (ptid, err); + + warning (_("Cannot attach to lwp %d: %s"), lwpid, reason.c_str ()); + } + + return 1; + } + return 0; +} + +static void async_file_mark (void); + +/* Attach to PID. If PID is the tgid, attach to it and all + of its threads. */ + +int +linux_process_target::attach (unsigned long pid) +{ + struct process_info *proc; + struct thread_info *initial_thread; + ptid_t ptid = ptid_t (pid, pid, 0); + int err; + + proc = add_linux_process (pid, 1); + + /* Attach to PID. We will check for other threads + soon. */ + err = attach_lwp (ptid); + if (err != 0) + { + remove_process (proc); + + std::string reason = linux_ptrace_attach_fail_reason_string (ptid, err); + error ("Cannot attach to process %ld: %s", pid, reason.c_str ()); + } + + /* Don't ignore the initial SIGSTOP if we just attached to this + process. It will be collected by wait shortly. */ + initial_thread = find_thread_ptid (ptid_t (pid, pid, 0)); + initial_thread->last_resume_kind = resume_stop; + + /* We must attach to every LWP. If /proc is mounted, use that to + find them now. On the one hand, the inferior may be using raw + clone instead of using pthreads. On the other hand, even if it + is using pthreads, GDB may not be connected yet (thread_db needs + to do symbol lookups, through qSymbol). Also, thread_db walks + structures in the inferior's address space to find the list of + threads/LWPs, and those structures may well be corrupted. Note + that once thread_db is loaded, we'll still use it to list threads + and associate pthread info with each LWP. */ + linux_proc_attach_tgid_threads (pid, attach_proc_task_lwp_callback); + + /* GDB will shortly read the xml target description for this + process, to figure out the process' architecture. But the target + description is only filled in when the first process/thread in + the thread group reports its initial PTRACE_ATTACH SIGSTOP. Do + that now, otherwise, if GDB is fast enough, it could read the + target description _before_ that initial stop. */ + if (non_stop) + { + struct lwp_info *lwp; + int wstat, lwpid; + ptid_t pid_ptid = ptid_t (pid); + + lwpid = wait_for_event_filtered (pid_ptid, pid_ptid, &wstat, __WALL); + gdb_assert (lwpid > 0); + + lwp = find_lwp_pid (ptid_t (lwpid)); + + if (!WIFSTOPPED (wstat) || WSTOPSIG (wstat) != SIGSTOP) + { + lwp->status_pending_p = 1; + lwp->status_pending = wstat; + } + + initial_thread->last_resume_kind = resume_continue; + + async_file_mark (); + + gdb_assert (proc->tdesc != NULL); + } + + return 0; +} + +static int +last_thread_of_process_p (int pid) +{ + bool seen_one = false; + + thread_info *thread = find_thread (pid, [&] (thread_info *thr_arg) + { + if (!seen_one) + { + /* This is the first thread of this process we see. */ + seen_one = true; + return false; + } + else + { + /* This is the second thread of this process we see. */ + return true; + } + }); + + return thread == NULL; +} + +/* Kill LWP. */ + +static void +linux_kill_one_lwp (struct lwp_info *lwp) +{ + struct thread_info *thr = get_lwp_thread (lwp); + int pid = lwpid_of (thr); + + /* PTRACE_KILL is unreliable. After stepping into a signal handler, + there is no signal context, and ptrace(PTRACE_KILL) (or + ptrace(PTRACE_CONT, SIGKILL), pretty much the same) acts like + ptrace(CONT, pid, 0,0) and just resumes the tracee. A better + alternative is to kill with SIGKILL. We only need one SIGKILL + per process, not one for each thread. But since we still support + support debugging programs using raw clone without CLONE_THREAD, + we send one for each thread. For years, we used PTRACE_KILL + only, so we're being a bit paranoid about some old kernels where + PTRACE_KILL might work better (dubious if there are any such, but + that's why it's paranoia), so we try SIGKILL first, PTRACE_KILL + second, and so we're fine everywhere. */ + + errno = 0; + kill_lwp (pid, SIGKILL); + if (debug_threads) + { + int save_errno = errno; + + debug_printf ("LKL: kill_lwp (SIGKILL) %s, 0, 0 (%s)\n", + target_pid_to_str (ptid_of (thr)), + save_errno ? safe_strerror (save_errno) : "OK"); + } + + errno = 0; + ptrace (PTRACE_KILL, pid, (PTRACE_TYPE_ARG3) 0, (PTRACE_TYPE_ARG4) 0); + if (debug_threads) + { + int save_errno = errno; + + debug_printf ("LKL: PTRACE_KILL %s, 0, 0 (%s)\n", + target_pid_to_str (ptid_of (thr)), + save_errno ? safe_strerror (save_errno) : "OK"); + } +} + +/* Kill LWP and wait for it to die. */ + +static void +kill_wait_lwp (struct lwp_info *lwp) +{ + struct thread_info *thr = get_lwp_thread (lwp); + int pid = ptid_of (thr).pid (); + int lwpid = ptid_of (thr).lwp (); + int wstat; + int res; + + if (debug_threads) + debug_printf ("kwl: killing lwp %d, for pid: %d\n", lwpid, pid); + + do + { + linux_kill_one_lwp (lwp); + + /* Make sure it died. Notes: + + - The loop is most likely unnecessary. + + - We don't use wait_for_event as that could delete lwps + while we're iterating over them. We're not interested in + any pending status at this point, only in making sure all + wait status on the kernel side are collected until the + process is reaped. + + - We don't use __WALL here as the __WALL emulation relies on + SIGCHLD, and killing a stopped process doesn't generate + one, nor an exit status. + */ + res = my_waitpid (lwpid, &wstat, 0); + if (res == -1 && errno == ECHILD) + res = my_waitpid (lwpid, &wstat, __WCLONE); + } while (res > 0 && WIFSTOPPED (wstat)); + + /* Even if it was stopped, the child may have already disappeared. + E.g., if it was killed by SIGKILL. */ + if (res < 0 && errno != ECHILD) + perror_with_name ("kill_wait_lwp"); +} + +/* Callback for `for_each_thread'. Kills an lwp of a given process, + except the leader. */ + +static void +kill_one_lwp_callback (thread_info *thread, int pid) +{ + struct lwp_info *lwp = get_thread_lwp (thread); + + /* We avoid killing the first thread here, because of a Linux kernel (at + least 2.6.0-test7 through 2.6.8-rc4) bug; if we kill the parent before + the children get a chance to be reaped, it will remain a zombie + forever. */ + + if (lwpid_of (thread) == pid) + { + if (debug_threads) + debug_printf ("lkop: is last of process %s\n", + target_pid_to_str (thread->id)); + return; + } + + kill_wait_lwp (lwp); +} + +int +linux_process_target::kill (process_info *process) +{ + int pid = process->pid; + + /* If we're killing a running inferior, make sure it is stopped + first, as PTRACE_KILL will not work otherwise. */ + stop_all_lwps (0, NULL); + + for_each_thread (pid, [&] (thread_info *thread) + { + kill_one_lwp_callback (thread, pid); + }); + + /* See the comment in linux_kill_one_lwp. We did not kill the first + thread in the list, so do so now. */ + lwp_info *lwp = find_lwp_pid (ptid_t (pid)); + + if (lwp == NULL) + { + if (debug_threads) + debug_printf ("lk_1: cannot find lwp for pid: %d\n", + pid); + } + else + kill_wait_lwp (lwp); + + mourn (process); + + /* Since we presently can only stop all lwps of all processes, we + need to unstop lwps of other processes. */ + unstop_all_lwps (0, NULL); + return 0; +} + +/* Get pending signal of THREAD, for detaching purposes. This is the + signal the thread last stopped for, which we need to deliver to the + thread when detaching, otherwise, it'd be suppressed/lost. */ + +static int +get_detach_signal (struct thread_info *thread) +{ + client_state &cs = get_client_state (); + enum gdb_signal signo = GDB_SIGNAL_0; + int status; + struct lwp_info *lp = get_thread_lwp (thread); + + if (lp->status_pending_p) + status = lp->status_pending; + else + { + /* If the thread had been suspended by gdbserver, and it stopped + cleanly, then it'll have stopped with SIGSTOP. But we don't + want to deliver that SIGSTOP. */ + if (thread->last_status.kind != TARGET_WAITKIND_STOPPED + || thread->last_status.value.sig == GDB_SIGNAL_0) + return 0; + + /* Otherwise, we may need to deliver the signal we + intercepted. */ + status = lp->last_status; + } + + if (!WIFSTOPPED (status)) + { + if (debug_threads) + debug_printf ("GPS: lwp %s hasn't stopped: no pending signal\n", + target_pid_to_str (ptid_of (thread))); + return 0; + } + + /* Extended wait statuses aren't real SIGTRAPs. */ + if (WSTOPSIG (status) == SIGTRAP && linux_is_extended_waitstatus (status)) + { + if (debug_threads) + debug_printf ("GPS: lwp %s had stopped with extended " + "status: no pending signal\n", + target_pid_to_str (ptid_of (thread))); + return 0; + } + + signo = gdb_signal_from_host (WSTOPSIG (status)); + + if (cs.program_signals_p && !cs.program_signals[signo]) + { + if (debug_threads) + debug_printf ("GPS: lwp %s had signal %s, but it is in nopass state\n", + target_pid_to_str (ptid_of (thread)), + gdb_signal_to_string (signo)); + return 0; + } + else if (!cs.program_signals_p + /* If we have no way to know which signals GDB does not + want to have passed to the program, assume + SIGTRAP/SIGINT, which is GDB's default. */ + && (signo == GDB_SIGNAL_TRAP || signo == GDB_SIGNAL_INT)) + { + if (debug_threads) + debug_printf ("GPS: lwp %s had signal %s, " + "but we don't know if we should pass it. " + "Default to not.\n", + target_pid_to_str (ptid_of (thread)), + gdb_signal_to_string (signo)); + return 0; + } + else + { + if (debug_threads) + debug_printf ("GPS: lwp %s has pending signal %s: delivering it.\n", + target_pid_to_str (ptid_of (thread)), + gdb_signal_to_string (signo)); + + return WSTOPSIG (status); + } +} + +void +linux_process_target::detach_one_lwp (lwp_info *lwp) +{ + struct thread_info *thread = get_lwp_thread (lwp); + int sig; + int lwpid; + + /* If there is a pending SIGSTOP, get rid of it. */ + if (lwp->stop_expected) + { + if (debug_threads) + debug_printf ("Sending SIGCONT to %s\n", + target_pid_to_str (ptid_of (thread))); + + kill_lwp (lwpid_of (thread), SIGCONT); + lwp->stop_expected = 0; + } + + /* Pass on any pending signal for this thread. */ + sig = get_detach_signal (thread); + + /* Preparing to resume may try to write registers, and fail if the + lwp is zombie. If that happens, ignore the error. We'll handle + it below, when detach fails with ESRCH. */ + try + { + /* Flush any pending changes to the process's registers. */ + regcache_invalidate_thread (thread); + + /* Finally, let it resume. */ + low_prepare_to_resume (lwp); + } + catch (const gdb_exception_error &ex) + { + if (!check_ptrace_stopped_lwp_gone (lwp)) + throw; + } + + lwpid = lwpid_of (thread); + if (ptrace (PTRACE_DETACH, lwpid, (PTRACE_TYPE_ARG3) 0, + (PTRACE_TYPE_ARG4) (long) sig) < 0) + { + int save_errno = errno; + + /* We know the thread exists, so ESRCH must mean the lwp is + zombie. This can happen if one of the already-detached + threads exits the whole thread group. In that case we're + still attached, and must reap the lwp. */ + if (save_errno == ESRCH) + { + int ret, status; + + ret = my_waitpid (lwpid, &status, __WALL); + if (ret == -1) + { + warning (_("Couldn't reap LWP %d while detaching: %s"), + lwpid, safe_strerror (errno)); + } + else if (!WIFEXITED (status) && !WIFSIGNALED (status)) + { + warning (_("Reaping LWP %d while detaching " + "returned unexpected status 0x%x"), + lwpid, status); + } + } + else + { + error (_("Can't detach %s: %s"), + target_pid_to_str (ptid_of (thread)), + safe_strerror (save_errno)); + } + } + else if (debug_threads) + { + debug_printf ("PTRACE_DETACH (%s, %s, 0) (OK)\n", + target_pid_to_str (ptid_of (thread)), + strsignal (sig)); + } + + delete_lwp (lwp); +} + +int +linux_process_target::detach (process_info *process) +{ + struct lwp_info *main_lwp; + + /* As there's a step over already in progress, let it finish first, + otherwise nesting a stabilize_threads operation on top gets real + messy. */ + complete_ongoing_step_over (); + + /* Stop all threads before detaching. First, ptrace requires that + the thread is stopped to successfully detach. Second, thread_db + may need to uninstall thread event breakpoints from memory, which + only works with a stopped process anyway. */ + stop_all_lwps (0, NULL); + +#ifdef USE_THREAD_DB + thread_db_detach (process); +#endif + + /* Stabilize threads (move out of jump pads). */ + target_stabilize_threads (); + + /* Detach from the clone lwps first. If the thread group exits just + while we're detaching, we must reap the clone lwps before we're + able to reap the leader. */ + for_each_thread (process->pid, [this] (thread_info *thread) + { + /* We don't actually detach from the thread group leader just yet. + If the thread group exits, we must reap the zombie clone lwps + before we're able to reap the leader. */ + if (thread->id.pid () == thread->id.lwp ()) + return; + + lwp_info *lwp = get_thread_lwp (thread); + detach_one_lwp (lwp); + }); + + main_lwp = find_lwp_pid (ptid_t (process->pid)); + detach_one_lwp (main_lwp); + + mourn (process); + + /* Since we presently can only stop all lwps of all processes, we + need to unstop lwps of other processes. */ + unstop_all_lwps (0, NULL); + return 0; +} + +/* Remove all LWPs that belong to process PROC from the lwp list. */ + +void +linux_process_target::mourn (process_info *process) +{ + struct process_info_private *priv; + +#ifdef USE_THREAD_DB + thread_db_mourn (process); +#endif + + for_each_thread (process->pid, [this] (thread_info *thread) + { + delete_lwp (get_thread_lwp (thread)); + }); + + /* Freeing all private data. */ + priv = process->priv; + low_delete_process (priv->arch_private); + free (priv); + process->priv = NULL; + + remove_process (process); +} + +void +linux_process_target::join (int pid) +{ + int status, ret; + + do { + ret = my_waitpid (pid, &status, 0); + if (WIFEXITED (status) || WIFSIGNALED (status)) + break; + } while (ret != -1 || errno != ECHILD); +} + +/* Return true if the given thread is still alive. */ + +bool +linux_process_target::thread_alive (ptid_t ptid) +{ + struct lwp_info *lwp = find_lwp_pid (ptid); + + /* We assume we always know if a thread exits. If a whole process + exited but we still haven't been able to report it to GDB, we'll + hold on to the last lwp of the dead process. */ + if (lwp != NULL) + return !lwp_is_marked_dead (lwp); + else + return 0; +} + +bool +linux_process_target::thread_still_has_status_pending (thread_info *thread) +{ + struct lwp_info *lp = get_thread_lwp (thread); + + if (!lp->status_pending_p) + return 0; + + if (thread->last_resume_kind != resume_stop + && (lp->stop_reason == TARGET_STOPPED_BY_SW_BREAKPOINT + || lp->stop_reason == TARGET_STOPPED_BY_HW_BREAKPOINT)) + { + struct thread_info *saved_thread; + CORE_ADDR pc; + int discard = 0; + + gdb_assert (lp->last_status != 0); + + pc = get_pc (lp); + + saved_thread = current_thread; + current_thread = thread; + + if (pc != lp->stop_pc) + { + if (debug_threads) + debug_printf ("PC of %ld changed\n", + lwpid_of (thread)); + discard = 1; + } + +#if !USE_SIGTRAP_SIGINFO + else if (lp->stop_reason == TARGET_STOPPED_BY_SW_BREAKPOINT + && !low_breakpoint_at (pc)) + { + if (debug_threads) + debug_printf ("previous SW breakpoint of %ld gone\n", + lwpid_of (thread)); + discard = 1; + } + else if (lp->stop_reason == TARGET_STOPPED_BY_HW_BREAKPOINT + && !hardware_breakpoint_inserted_here (pc)) + { + if (debug_threads) + debug_printf ("previous HW breakpoint of %ld gone\n", + lwpid_of (thread)); + discard = 1; + } +#endif + + current_thread = saved_thread; + + if (discard) + { + if (debug_threads) + debug_printf ("discarding pending breakpoint status\n"); + lp->status_pending_p = 0; + return 0; + } + } + + return 1; +} + +/* Returns true if LWP is resumed from the client's perspective. */ + +static int +lwp_resumed (struct lwp_info *lwp) +{ + struct thread_info *thread = get_lwp_thread (lwp); + + if (thread->last_resume_kind != resume_stop) + return 1; + + /* Did gdb send us a `vCont;t', but we haven't reported the + corresponding stop to gdb yet? If so, the thread is still + resumed/running from gdb's perspective. */ + if (thread->last_resume_kind == resume_stop + && thread->last_status.kind == TARGET_WAITKIND_IGNORE) + return 1; + + return 0; +} + +bool +linux_process_target::status_pending_p_callback (thread_info *thread, + ptid_t ptid) +{ + struct lwp_info *lp = get_thread_lwp (thread); + + /* Check if we're only interested in events from a specific process + or a specific LWP. */ + if (!thread->id.matches (ptid)) + return 0; + + if (!lwp_resumed (lp)) + return 0; + + if (lp->status_pending_p + && !thread_still_has_status_pending (thread)) + { + resume_one_lwp (lp, lp->stepping, GDB_SIGNAL_0, NULL); + return 0; + } + + return lp->status_pending_p; +} + +struct lwp_info * +find_lwp_pid (ptid_t ptid) +{ + thread_info *thread = find_thread ([&] (thread_info *thr_arg) + { + int lwp = ptid.lwp () != 0 ? ptid.lwp () : ptid.pid (); + return thr_arg->id.lwp () == lwp; + }); + + if (thread == NULL) + return NULL; + + return get_thread_lwp (thread); +} + +/* Return the number of known LWPs in the tgid given by PID. */ + +static int +num_lwps (int pid) +{ + int count = 0; + + for_each_thread (pid, [&] (thread_info *thread) + { + count++; + }); + + return count; +} + +/* See nat/linux-nat.h. */ + +struct lwp_info * +iterate_over_lwps (ptid_t filter, + gdb::function_view<iterate_over_lwps_ftype> callback) +{ + thread_info *thread = find_thread (filter, [&] (thread_info *thr_arg) + { + lwp_info *lwp = get_thread_lwp (thr_arg); + + return callback (lwp); + }); + + if (thread == NULL) + return NULL; + + return get_thread_lwp (thread); +} + +void +linux_process_target::check_zombie_leaders () +{ + for_each_process ([this] (process_info *proc) { + pid_t leader_pid = pid_of (proc); + struct lwp_info *leader_lp; + + leader_lp = find_lwp_pid (ptid_t (leader_pid)); + + if (debug_threads) + debug_printf ("leader_pid=%d, leader_lp!=NULL=%d, " + "num_lwps=%d, zombie=%d\n", + leader_pid, leader_lp!= NULL, num_lwps (leader_pid), + linux_proc_pid_is_zombie (leader_pid)); + + if (leader_lp != NULL && !leader_lp->stopped + /* Check if there are other threads in the group, as we may + have raced with the inferior simply exiting. */ + && !last_thread_of_process_p (leader_pid) + && linux_proc_pid_is_zombie (leader_pid)) + { + /* A leader zombie can mean one of two things: + + - It exited, and there's an exit status pending + available, or only the leader exited (not the whole + program). In the latter case, we can't waitpid the + leader's exit status until all other threads are gone. + + - There are 3 or more threads in the group, and a thread + other than the leader exec'd. On an exec, the Linux + kernel destroys all other threads (except the execing + one) in the thread group, and resets the execing thread's + tid to the tgid. No exit notification is sent for the + execing thread -- from the ptracer's perspective, it + appears as though the execing thread just vanishes. + Until we reap all other threads except the leader and the + execing thread, the leader will be zombie, and the + execing thread will be in `D (disc sleep)'. As soon as + all other threads are reaped, the execing thread changes + it's tid to the tgid, and the previous (zombie) leader + vanishes, giving place to the "new" leader. We could try + distinguishing the exit and exec cases, by waiting once + more, and seeing if something comes out, but it doesn't + sound useful. The previous leader _does_ go away, and + we'll re-add the new one once we see the exec event + (which is just the same as what would happen if the + previous leader did exit voluntarily before some other + thread execs). */ + + if (debug_threads) + debug_printf ("CZL: Thread group leader %d zombie " + "(it exited, or another thread execd).\n", + leader_pid); + + delete_lwp (leader_lp); + } + }); +} + +/* Callback for `find_thread'. Returns the first LWP that is not + stopped. */ + +static bool +not_stopped_callback (thread_info *thread, ptid_t filter) +{ + if (!thread->id.matches (filter)) + return false; + + lwp_info *lwp = get_thread_lwp (thread); + + return !lwp->stopped; +} + +/* Increment LWP's suspend count. */ + +static void +lwp_suspended_inc (struct lwp_info *lwp) +{ + lwp->suspended++; + + if (debug_threads && lwp->suspended > 4) + { + struct thread_info *thread = get_lwp_thread (lwp); + + debug_printf ("LWP %ld has a suspiciously high suspend count," + " suspended=%d\n", lwpid_of (thread), lwp->suspended); + } +} + +/* Decrement LWP's suspend count. */ + +static void +lwp_suspended_decr (struct lwp_info *lwp) +{ + lwp->suspended--; + + if (lwp->suspended < 0) + { + struct thread_info *thread = get_lwp_thread (lwp); + + internal_error (__FILE__, __LINE__, + "unsuspend LWP %ld, suspended=%d\n", lwpid_of (thread), + lwp->suspended); + } +} + +/* This function should only be called if the LWP got a SIGTRAP. + + Handle any tracepoint steps or hits. Return true if a tracepoint + event was handled, 0 otherwise. */ + +static int +handle_tracepoints (struct lwp_info *lwp) +{ + struct thread_info *tinfo = get_lwp_thread (lwp); + int tpoint_related_event = 0; + + gdb_assert (lwp->suspended == 0); + + /* If this tracepoint hit causes a tracing stop, we'll immediately + uninsert tracepoints. To do this, we temporarily pause all + threads, unpatch away, and then unpause threads. We need to make + sure the unpausing doesn't resume LWP too. */ + lwp_suspended_inc (lwp); + + /* And we need to be sure that any all-threads-stopping doesn't try + to move threads out of the jump pads, as it could deadlock the + inferior (LWP could be in the jump pad, maybe even holding the + lock.) */ + + /* Do any necessary step collect actions. */ + tpoint_related_event |= tracepoint_finished_step (tinfo, lwp->stop_pc); + + tpoint_related_event |= handle_tracepoint_bkpts (tinfo, lwp->stop_pc); + + /* See if we just hit a tracepoint and do its main collect + actions. */ + tpoint_related_event |= tracepoint_was_hit (tinfo, lwp->stop_pc); + + lwp_suspended_decr (lwp); + + gdb_assert (lwp->suspended == 0); + gdb_assert (!stabilizing_threads + || (lwp->collecting_fast_tracepoint + != fast_tpoint_collect_result::not_collecting)); + + if (tpoint_related_event) + { + if (debug_threads) + debug_printf ("got a tracepoint event\n"); + return 1; + } + + return 0; +} + +fast_tpoint_collect_result +linux_process_target::linux_fast_tracepoint_collecting + (lwp_info *lwp, fast_tpoint_collect_status *status) +{ + CORE_ADDR thread_area; + struct thread_info *thread = get_lwp_thread (lwp); + + /* Get the thread area address. This is used to recognize which + thread is which when tracing with the in-process agent library. + We don't read anything from the address, and treat it as opaque; + it's the address itself that we assume is unique per-thread. */ + if (low_get_thread_area (lwpid_of (thread), &thread_area) == -1) + return fast_tpoint_collect_result::not_collecting; + + return fast_tracepoint_collecting (thread_area, lwp->stop_pc, status); +} + +int +linux_process_target::low_get_thread_area (int lwpid, CORE_ADDR *addrp) +{ + return -1; +} + +bool +linux_process_target::maybe_move_out_of_jump_pad (lwp_info *lwp, int *wstat) +{ + struct thread_info *saved_thread; + + saved_thread = current_thread; + current_thread = get_lwp_thread (lwp); + + if ((wstat == NULL + || (WIFSTOPPED (*wstat) && WSTOPSIG (*wstat) != SIGTRAP)) + && supports_fast_tracepoints () + && agent_loaded_p ()) + { + struct fast_tpoint_collect_status status; + + if (debug_threads) + debug_printf ("Checking whether LWP %ld needs to move out of the " + "jump pad.\n", + lwpid_of (current_thread)); + + fast_tpoint_collect_result r + = linux_fast_tracepoint_collecting (lwp, &status); + + if (wstat == NULL + || (WSTOPSIG (*wstat) != SIGILL + && WSTOPSIG (*wstat) != SIGFPE + && WSTOPSIG (*wstat) != SIGSEGV + && WSTOPSIG (*wstat) != SIGBUS)) + { + lwp->collecting_fast_tracepoint = r; + + if (r != fast_tpoint_collect_result::not_collecting) + { + if (r == fast_tpoint_collect_result::before_insn + && lwp->exit_jump_pad_bkpt == NULL) + { + /* Haven't executed the original instruction yet. + Set breakpoint there, and wait till it's hit, + then single-step until exiting the jump pad. */ + lwp->exit_jump_pad_bkpt + = set_breakpoint_at (status.adjusted_insn_addr, NULL); + } + + if (debug_threads) + debug_printf ("Checking whether LWP %ld needs to move out of " + "the jump pad...it does\n", + lwpid_of (current_thread)); + current_thread = saved_thread; + + return true; + } + } + else + { + /* If we get a synchronous signal while collecting, *and* + while executing the (relocated) original instruction, + reset the PC to point at the tpoint address, before + reporting to GDB. Otherwise, it's an IPA lib bug: just + report the signal to GDB, and pray for the best. */ + + lwp->collecting_fast_tracepoint + = fast_tpoint_collect_result::not_collecting; + + if (r != fast_tpoint_collect_result::not_collecting + && (status.adjusted_insn_addr <= lwp->stop_pc + && lwp->stop_pc < status.adjusted_insn_addr_end)) + { + siginfo_t info; + struct regcache *regcache; + + /* The si_addr on a few signals references the address + of the faulting instruction. Adjust that as + well. */ + if ((WSTOPSIG (*wstat) == SIGILL + || WSTOPSIG (*wstat) == SIGFPE + || WSTOPSIG (*wstat) == SIGBUS + || WSTOPSIG (*wstat) == SIGSEGV) + && ptrace (PTRACE_GETSIGINFO, lwpid_of (current_thread), + (PTRACE_TYPE_ARG3) 0, &info) == 0 + /* Final check just to make sure we don't clobber + the siginfo of non-kernel-sent signals. */ + && (uintptr_t) info.si_addr == lwp->stop_pc) + { + info.si_addr = (void *) (uintptr_t) status.tpoint_addr; + ptrace (PTRACE_SETSIGINFO, lwpid_of (current_thread), + (PTRACE_TYPE_ARG3) 0, &info); + } + + regcache = get_thread_regcache (current_thread, 1); + low_set_pc (regcache, status.tpoint_addr); + lwp->stop_pc = status.tpoint_addr; + + /* Cancel any fast tracepoint lock this thread was + holding. */ + force_unlock_trace_buffer (); + } + + if (lwp->exit_jump_pad_bkpt != NULL) + { + if (debug_threads) + debug_printf ("Cancelling fast exit-jump-pad: removing bkpt. " + "stopping all threads momentarily.\n"); + + stop_all_lwps (1, lwp); + + delete_breakpoint (lwp->exit_jump_pad_bkpt); + lwp->exit_jump_pad_bkpt = NULL; + + unstop_all_lwps (1, lwp); + + gdb_assert (lwp->suspended >= 0); + } + } + } + + if (debug_threads) + debug_printf ("Checking whether LWP %ld needs to move out of the " + "jump pad...no\n", + lwpid_of (current_thread)); + + current_thread = saved_thread; + return false; +} + +/* Enqueue one signal in the "signals to report later when out of the + jump pad" list. */ + +static void +enqueue_one_deferred_signal (struct lwp_info *lwp, int *wstat) +{ + struct thread_info *thread = get_lwp_thread (lwp); + + if (debug_threads) + debug_printf ("Deferring signal %d for LWP %ld.\n", + WSTOPSIG (*wstat), lwpid_of (thread)); + + if (debug_threads) + { + for (const auto &sig : lwp->pending_signals_to_report) + debug_printf (" Already queued %d\n", + sig.signal); + + debug_printf (" (no more currently queued signals)\n"); + } + + /* Don't enqueue non-RT signals if they are already in the deferred + queue. (SIGSTOP being the easiest signal to see ending up here + twice) */ + if (WSTOPSIG (*wstat) < __SIGRTMIN) + { + for (const auto &sig : lwp->pending_signals_to_report) + { + if (sig.signal == WSTOPSIG (*wstat)) + { + if (debug_threads) + debug_printf ("Not requeuing already queued non-RT signal %d" + " for LWP %ld\n", + sig.signal, + lwpid_of (thread)); + return; + } + } + } + + lwp->pending_signals_to_report.emplace_back (WSTOPSIG (*wstat)); + + ptrace (PTRACE_GETSIGINFO, lwpid_of (thread), (PTRACE_TYPE_ARG3) 0, + &lwp->pending_signals_to_report.back ().info); +} + +/* Dequeue one signal from the "signals to report later when out of + the jump pad" list. */ + +static int +dequeue_one_deferred_signal (struct lwp_info *lwp, int *wstat) +{ + struct thread_info *thread = get_lwp_thread (lwp); + + if (!lwp->pending_signals_to_report.empty ()) + { + const pending_signal &p_sig = lwp->pending_signals_to_report.front (); + + *wstat = W_STOPCODE (p_sig.signal); + if (p_sig.info.si_signo != 0) + ptrace (PTRACE_SETSIGINFO, lwpid_of (thread), (PTRACE_TYPE_ARG3) 0, + &p_sig.info); + + lwp->pending_signals_to_report.pop_front (); + + if (debug_threads) + debug_printf ("Reporting deferred signal %d for LWP %ld.\n", + WSTOPSIG (*wstat), lwpid_of (thread)); + + if (debug_threads) + { + for (const auto &sig : lwp->pending_signals_to_report) + debug_printf (" Still queued %d\n", + sig.signal); + + debug_printf (" (no more queued signals)\n"); + } + + return 1; + } + + return 0; +} + +bool +linux_process_target::check_stopped_by_watchpoint (lwp_info *child) +{ + struct thread_info *saved_thread = current_thread; + current_thread = get_lwp_thread (child); + + if (low_stopped_by_watchpoint ()) + { + child->stop_reason = TARGET_STOPPED_BY_WATCHPOINT; + child->stopped_data_address = low_stopped_data_address (); + } + + current_thread = saved_thread; + + return child->stop_reason == TARGET_STOPPED_BY_WATCHPOINT; +} + +bool +linux_process_target::low_stopped_by_watchpoint () +{ + return false; +} + +CORE_ADDR +linux_process_target::low_stopped_data_address () +{ + return 0; +} + +/* Return the ptrace options that we want to try to enable. */ + +static int +linux_low_ptrace_options (int attached) +{ + client_state &cs = get_client_state (); + int options = 0; + + if (!attached) + options |= PTRACE_O_EXITKILL; + + if (cs.report_fork_events) + options |= PTRACE_O_TRACEFORK; + + if (cs.report_vfork_events) + options |= (PTRACE_O_TRACEVFORK | PTRACE_O_TRACEVFORKDONE); + + if (cs.report_exec_events) + options |= PTRACE_O_TRACEEXEC; + + options |= PTRACE_O_TRACESYSGOOD; + + return options; +} + +lwp_info * +linux_process_target::filter_event (int lwpid, int wstat) +{ + client_state &cs = get_client_state (); + struct lwp_info *child; + struct thread_info *thread; + int have_stop_pc = 0; + + child = find_lwp_pid (ptid_t (lwpid)); + + /* Check for stop events reported by a process we didn't already + know about - anything not already in our LWP list. + + If we're expecting to receive stopped processes after + fork, vfork, and clone events, then we'll just add the + new one to our list and go back to waiting for the event + to be reported - the stopped process might be returned + from waitpid before or after the event is. + + But note the case of a non-leader thread exec'ing after the + leader having exited, and gone from our lists (because + check_zombie_leaders deleted it). The non-leader thread + changes its tid to the tgid. */ + + if (WIFSTOPPED (wstat) && child == NULL && WSTOPSIG (wstat) == SIGTRAP + && linux_ptrace_get_extended_event (wstat) == PTRACE_EVENT_EXEC) + { + ptid_t child_ptid; + + /* A multi-thread exec after we had seen the leader exiting. */ + if (debug_threads) + { + debug_printf ("LLW: Re-adding thread group leader LWP %d" + "after exec.\n", lwpid); + } + + child_ptid = ptid_t (lwpid, lwpid, 0); + child = add_lwp (child_ptid); + child->stopped = 1; + current_thread = child->thread; + } + + /* If we didn't find a process, one of two things presumably happened: + - A process we started and then detached from has exited. Ignore it. + - A process we are controlling has forked and the new child's stop + was reported to us by the kernel. Save its PID. */ + if (child == NULL && WIFSTOPPED (wstat)) + { + add_to_pid_list (&stopped_pids, lwpid, wstat); + return NULL; + } + else if (child == NULL) + return NULL; + + thread = get_lwp_thread (child); + + child->stopped = 1; + + child->last_status = wstat; + + /* Check if the thread has exited. */ + if ((WIFEXITED (wstat) || WIFSIGNALED (wstat))) + { + if (debug_threads) + debug_printf ("LLFE: %d exited.\n", lwpid); + + if (finish_step_over (child)) + { + /* Unsuspend all other LWPs, and set them back running again. */ + unsuspend_all_lwps (child); + } + + /* If there is at least one more LWP, then the exit signal was + not the end of the debugged application and should be + ignored, unless GDB wants to hear about thread exits. */ + if (cs.report_thread_events + || last_thread_of_process_p (pid_of (thread))) + { + /* Since events are serialized to GDB core, and we can't + report this one right now. Leave the status pending for + the next time we're able to report it. */ + mark_lwp_dead (child, wstat); + return child; + } + else + { + delete_lwp (child); + return NULL; + } + } + + gdb_assert (WIFSTOPPED (wstat)); + + if (WIFSTOPPED (wstat)) + { + struct process_info *proc; + + /* Architecture-specific setup after inferior is running. */ + proc = find_process_pid (pid_of (thread)); + if (proc->tdesc == NULL) + { + if (proc->attached) + { + /* This needs to happen after we have attached to the + inferior and it is stopped for the first time, but + before we access any inferior registers. */ + arch_setup_thread (thread); + } + else + { + /* The process is started, but GDBserver will do + architecture-specific setup after the program stops at + the first instruction. */ + child->status_pending_p = 1; + child->status_pending = wstat; + return child; + } + } + } + + if (WIFSTOPPED (wstat) && child->must_set_ptrace_flags) + { + struct process_info *proc = find_process_pid (pid_of (thread)); + int options = linux_low_ptrace_options (proc->attached); + + linux_enable_event_reporting (lwpid, options); + child->must_set_ptrace_flags = 0; + } + + /* Always update syscall_state, even if it will be filtered later. */ + if (WIFSTOPPED (wstat) && WSTOPSIG (wstat) == SYSCALL_SIGTRAP) + { + child->syscall_state + = (child->syscall_state == TARGET_WAITKIND_SYSCALL_ENTRY + ? TARGET_WAITKIND_SYSCALL_RETURN + : TARGET_WAITKIND_SYSCALL_ENTRY); + } + else + { + /* Almost all other ptrace-stops are known to be outside of system + calls, with further exceptions in handle_extended_wait. */ + child->syscall_state = TARGET_WAITKIND_IGNORE; + } + + /* Be careful to not overwrite stop_pc until save_stop_reason is + called. */ + if (WIFSTOPPED (wstat) && WSTOPSIG (wstat) == SIGTRAP + && linux_is_extended_waitstatus (wstat)) + { + child->stop_pc = get_pc (child); + if (handle_extended_wait (&child, wstat)) + { + /* The event has been handled, so just return without + reporting it. */ + return NULL; + } + } + + if (linux_wstatus_maybe_breakpoint (wstat)) + { + if (save_stop_reason (child)) + have_stop_pc = 1; + } + + if (!have_stop_pc) + child->stop_pc = get_pc (child); + + if (WIFSTOPPED (wstat) && WSTOPSIG (wstat) == SIGSTOP + && child->stop_expected) + { + if (debug_threads) + debug_printf ("Expected stop.\n"); + child->stop_expected = 0; + + if (thread->last_resume_kind == resume_stop) + { + /* We want to report the stop to the core. Treat the + SIGSTOP as a normal event. */ + if (debug_threads) + debug_printf ("LLW: resume_stop SIGSTOP caught for %s.\n", + target_pid_to_str (ptid_of (thread))); + } + else if (stopping_threads != NOT_STOPPING_THREADS) + { + /* Stopping threads. We don't want this SIGSTOP to end up + pending. */ + if (debug_threads) + debug_printf ("LLW: SIGSTOP caught for %s " + "while stopping threads.\n", + target_pid_to_str (ptid_of (thread))); + return NULL; + } + else + { + /* This is a delayed SIGSTOP. Filter out the event. */ + if (debug_threads) + debug_printf ("LLW: %s %s, 0, 0 (discard delayed SIGSTOP)\n", + child->stepping ? "step" : "continue", + target_pid_to_str (ptid_of (thread))); + + resume_one_lwp (child, child->stepping, 0, NULL); + return NULL; + } + } + + child->status_pending_p = 1; + child->status_pending = wstat; + return child; +} + +bool +linux_process_target::maybe_hw_step (thread_info *thread) +{ + if (supports_hardware_single_step ()) + return true; + else + { + /* GDBserver must insert single-step breakpoint for software + single step. */ + gdb_assert (has_single_step_breakpoints (thread)); + return false; + } +} + +void +linux_process_target::resume_stopped_resumed_lwps (thread_info *thread) +{ + struct lwp_info *lp = get_thread_lwp (thread); + + if (lp->stopped + && !lp->suspended + && !lp->status_pending_p + && thread->last_status.kind == TARGET_WAITKIND_IGNORE) + { + int step = 0; + + if (thread->last_resume_kind == resume_step) + step = maybe_hw_step (thread); + + if (debug_threads) + debug_printf ("RSRL: resuming stopped-resumed LWP %s at %s: step=%d\n", + target_pid_to_str (ptid_of (thread)), + paddress (lp->stop_pc), + step); + + resume_one_lwp (lp, step, GDB_SIGNAL_0, NULL); + } +} + +int +linux_process_target::wait_for_event_filtered (ptid_t wait_ptid, + ptid_t filter_ptid, + int *wstatp, int options) +{ + struct thread_info *event_thread; + struct lwp_info *event_child, *requested_child; + sigset_t block_mask, prev_mask; + + retry: + /* N.B. event_thread points to the thread_info struct that contains + event_child. Keep them in sync. */ + event_thread = NULL; + event_child = NULL; + requested_child = NULL; + + /* Check for a lwp with a pending status. */ + + if (filter_ptid == minus_one_ptid || filter_ptid.is_pid ()) + { + event_thread = find_thread_in_random ([&] (thread_info *thread) + { + return status_pending_p_callback (thread, filter_ptid); + }); + + if (event_thread != NULL) + event_child = get_thread_lwp (event_thread); + if (debug_threads && event_thread) + debug_printf ("Got a pending child %ld\n", lwpid_of (event_thread)); + } + else if (filter_ptid != null_ptid) + { + requested_child = find_lwp_pid (filter_ptid); + + if (stopping_threads == NOT_STOPPING_THREADS + && requested_child->status_pending_p + && (requested_child->collecting_fast_tracepoint + != fast_tpoint_collect_result::not_collecting)) + { + enqueue_one_deferred_signal (requested_child, + &requested_child->status_pending); + requested_child->status_pending_p = 0; + requested_child->status_pending = 0; + resume_one_lwp (requested_child, 0, 0, NULL); + } + + if (requested_child->suspended + && requested_child->status_pending_p) + { + internal_error (__FILE__, __LINE__, + "requesting an event out of a" + " suspended child?"); + } + + if (requested_child->status_pending_p) + { + event_child = requested_child; + event_thread = get_lwp_thread (event_child); + } + } + + if (event_child != NULL) + { + if (debug_threads) + debug_printf ("Got an event from pending child %ld (%04x)\n", + lwpid_of (event_thread), event_child->status_pending); + *wstatp = event_child->status_pending; + event_child->status_pending_p = 0; + event_child->status_pending = 0; + current_thread = event_thread; + return lwpid_of (event_thread); + } + + /* But if we don't find a pending event, we'll have to wait. + + We only enter this loop if no process has a pending wait status. + Thus any action taken in response to a wait status inside this + loop is responding as soon as we detect the status, not after any + pending events. */ + + /* Make sure SIGCHLD is blocked until the sigsuspend below. Block + all signals while here. */ + sigfillset (&block_mask); + gdb_sigmask (SIG_BLOCK, &block_mask, &prev_mask); + + /* Always pull all events out of the kernel. We'll randomly select + an event LWP out of all that have events, to prevent + starvation. */ + while (event_child == NULL) + { + pid_t ret = 0; + + /* Always use -1 and WNOHANG, due to couple of a kernel/ptrace + quirks: + + - If the thread group leader exits while other threads in the + thread group still exist, waitpid(TGID, ...) hangs. That + waitpid won't return an exit status until the other threads + in the group are reaped. + + - When a non-leader thread execs, that thread just vanishes + without reporting an exit (so we'd hang if we waited for it + explicitly in that case). The exec event is reported to + the TGID pid. */ + errno = 0; + ret = my_waitpid (-1, wstatp, options | WNOHANG); + + if (debug_threads) + debug_printf ("LWFE: waitpid(-1, ...) returned %d, %s\n", + ret, errno ? safe_strerror (errno) : "ERRNO-OK"); + + if (ret > 0) + { + if (debug_threads) + { + debug_printf ("LLW: waitpid %ld received %s\n", + (long) ret, status_to_str (*wstatp)); + } + + /* Filter all events. IOW, leave all events pending. We'll + randomly select an event LWP out of all that have events + below. */ + filter_event (ret, *wstatp); + /* Retry until nothing comes out of waitpid. A single + SIGCHLD can indicate more than one child stopped. */ + continue; + } + + /* Now that we've pulled all events out of the kernel, resume + LWPs that don't have an interesting event to report. */ + if (stopping_threads == NOT_STOPPING_THREADS) + for_each_thread ([this] (thread_info *thread) + { + resume_stopped_resumed_lwps (thread); + }); + + /* ... and find an LWP with a status to report to the core, if + any. */ + event_thread = find_thread_in_random ([&] (thread_info *thread) + { + return status_pending_p_callback (thread, filter_ptid); + }); + + if (event_thread != NULL) + { + event_child = get_thread_lwp (event_thread); + *wstatp = event_child->status_pending; + event_child->status_pending_p = 0; + event_child->status_pending = 0; + break; + } + + /* Check for zombie thread group leaders. Those can't be reaped + until all other threads in the thread group are. */ + check_zombie_leaders (); + + auto not_stopped = [&] (thread_info *thread) + { + return not_stopped_callback (thread, wait_ptid); + }; + + /* If there are no resumed children left in the set of LWPs we + want to wait for, bail. We can't just block in + waitpid/sigsuspend, because lwps might have been left stopped + in trace-stop state, and we'd be stuck forever waiting for + their status to change (which would only happen if we resumed + them). Even if WNOHANG is set, this return code is preferred + over 0 (below), as it is more detailed. */ + if (find_thread (not_stopped) == NULL) + { + if (debug_threads) + debug_printf ("LLW: exit (no unwaited-for LWP)\n"); + gdb_sigmask (SIG_SETMASK, &prev_mask, NULL); + return -1; + } + + /* No interesting event to report to the caller. */ + if ((options & WNOHANG)) + { + if (debug_threads) + debug_printf ("WNOHANG set, no event found\n"); + + gdb_sigmask (SIG_SETMASK, &prev_mask, NULL); + return 0; + } + + /* Block until we get an event reported with SIGCHLD. */ + if (debug_threads) + debug_printf ("sigsuspend'ing\n"); + + sigsuspend (&prev_mask); + gdb_sigmask (SIG_SETMASK, &prev_mask, NULL); + goto retry; + } + + gdb_sigmask (SIG_SETMASK, &prev_mask, NULL); + + current_thread = event_thread; + + return lwpid_of (event_thread); +} + +int +linux_process_target::wait_for_event (ptid_t ptid, int *wstatp, int options) +{ + return wait_for_event_filtered (ptid, ptid, wstatp, options); +} + +/* Select one LWP out of those that have events pending. */ + +static void +select_event_lwp (struct lwp_info **orig_lp) +{ + struct thread_info *event_thread = NULL; + + /* In all-stop, give preference to the LWP that is being + single-stepped. There will be at most one, and it's the LWP that + the core is most interested in. If we didn't do this, then we'd + have to handle pending step SIGTRAPs somehow in case the core + later continues the previously-stepped thread, otherwise we'd + report the pending SIGTRAP, and the core, not having stepped the + thread, wouldn't understand what the trap was for, and therefore + would report it to the user as a random signal. */ + if (!non_stop) + { + event_thread = find_thread ([] (thread_info *thread) + { + lwp_info *lp = get_thread_lwp (thread); + + return (thread->last_status.kind == TARGET_WAITKIND_IGNORE + && thread->last_resume_kind == resume_step + && lp->status_pending_p); + }); + + if (event_thread != NULL) + { + if (debug_threads) + debug_printf ("SEL: Select single-step %s\n", + target_pid_to_str (ptid_of (event_thread))); + } + } + if (event_thread == NULL) + { + /* No single-stepping LWP. Select one at random, out of those + which have had events. */ + + event_thread = find_thread_in_random ([&] (thread_info *thread) + { + lwp_info *lp = get_thread_lwp (thread); + + /* Only resumed LWPs that have an event pending. */ + return (thread->last_status.kind == TARGET_WAITKIND_IGNORE + && lp->status_pending_p); + }); + } + + if (event_thread != NULL) + { + struct lwp_info *event_lp = get_thread_lwp (event_thread); + + /* Switch the event LWP. */ + *orig_lp = event_lp; + } +} + +/* Decrement the suspend count of all LWPs, except EXCEPT, if non + NULL. */ + +static void +unsuspend_all_lwps (struct lwp_info *except) +{ + for_each_thread ([&] (thread_info *thread) + { + lwp_info *lwp = get_thread_lwp (thread); + + if (lwp != except) + lwp_suspended_decr (lwp); + }); +} + +static bool lwp_running (thread_info *thread); + +/* Stabilize threads (move out of jump pads). + + If a thread is midway collecting a fast tracepoint, we need to + finish the collection and move it out of the jump pad before + reporting the signal. + + This avoids recursion while collecting (when a signal arrives + midway, and the signal handler itself collects), which would trash + the trace buffer. In case the user set a breakpoint in a signal + handler, this avoids the backtrace showing the jump pad, etc.. + Most importantly, there are certain things we can't do safely if + threads are stopped in a jump pad (or in its callee's). For + example: + + - starting a new trace run. A thread still collecting the + previous run, could trash the trace buffer when resumed. The trace + buffer control structures would have been reset but the thread had + no way to tell. The thread could even midway memcpy'ing to the + buffer, which would mean that when resumed, it would clobber the + trace buffer that had been set for a new run. + + - we can't rewrite/reuse the jump pads for new tracepoints + safely. Say you do tstart while a thread is stopped midway while + collecting. When the thread is later resumed, it finishes the + collection, and returns to the jump pad, to execute the original + instruction that was under the tracepoint jump at the time the + older run had been started. If the jump pad had been rewritten + since for something else in the new run, the thread would now + execute the wrong / random instructions. */ + +void +linux_process_target::stabilize_threads () +{ + thread_info *thread_stuck = find_thread ([this] (thread_info *thread) + { + return stuck_in_jump_pad (thread); + }); + + if (thread_stuck != NULL) + { + if (debug_threads) + debug_printf ("can't stabilize, LWP %ld is stuck in jump pad\n", + lwpid_of (thread_stuck)); + return; + } + + thread_info *saved_thread = current_thread; + + stabilizing_threads = 1; + + /* Kick 'em all. */ + for_each_thread ([this] (thread_info *thread) + { + move_out_of_jump_pad (thread); + }); + + /* Loop until all are stopped out of the jump pads. */ + while (find_thread (lwp_running) != NULL) + { + struct target_waitstatus ourstatus; + struct lwp_info *lwp; + int wstat; + + /* Note that we go through the full wait even loop. While + moving threads out of jump pad, we need to be able to step + over internal breakpoints and such. */ + wait_1 (minus_one_ptid, &ourstatus, 0); + + if (ourstatus.kind == TARGET_WAITKIND_STOPPED) + { + lwp = get_thread_lwp (current_thread); + + /* Lock it. */ + lwp_suspended_inc (lwp); + + if (ourstatus.value.sig != GDB_SIGNAL_0 + || current_thread->last_resume_kind == resume_stop) + { + wstat = W_STOPCODE (gdb_signal_to_host (ourstatus.value.sig)); + enqueue_one_deferred_signal (lwp, &wstat); + } + } + } + + unsuspend_all_lwps (NULL); + + stabilizing_threads = 0; + + current_thread = saved_thread; + + if (debug_threads) + { + thread_stuck = find_thread ([this] (thread_info *thread) + { + return stuck_in_jump_pad (thread); + }); + + if (thread_stuck != NULL) + debug_printf ("couldn't stabilize, LWP %ld got stuck in jump pad\n", + lwpid_of (thread_stuck)); + } +} + +/* Convenience function that is called when the kernel reports an + event that is not passed out to GDB. */ + +static ptid_t +ignore_event (struct target_waitstatus *ourstatus) +{ + /* If we got an event, there may still be others, as a single + SIGCHLD can indicate more than one child stopped. This forces + another target_wait call. */ + async_file_mark (); + + ourstatus->kind = TARGET_WAITKIND_IGNORE; + return null_ptid; +} + +ptid_t +linux_process_target::filter_exit_event (lwp_info *event_child, + target_waitstatus *ourstatus) +{ + client_state &cs = get_client_state (); + struct thread_info *thread = get_lwp_thread (event_child); + ptid_t ptid = ptid_of (thread); + + if (!last_thread_of_process_p (pid_of (thread))) + { + if (cs.report_thread_events) + ourstatus->kind = TARGET_WAITKIND_THREAD_EXITED; + else + ourstatus->kind = TARGET_WAITKIND_IGNORE; + + delete_lwp (event_child); + } + return ptid; +} + +/* Returns 1 if GDB is interested in any event_child syscalls. */ + +static int +gdb_catching_syscalls_p (struct lwp_info *event_child) +{ + struct thread_info *thread = get_lwp_thread (event_child); + struct process_info *proc = get_thread_process (thread); + + return !proc->syscalls_to_catch.empty (); +} + +bool +linux_process_target::gdb_catch_this_syscall (lwp_info *event_child) +{ + int sysno; + struct thread_info *thread = get_lwp_thread (event_child); + struct process_info *proc = get_thread_process (thread); + + if (proc->syscalls_to_catch.empty ()) + return false; + + if (proc->syscalls_to_catch[0] == ANY_SYSCALL) + return true; + + get_syscall_trapinfo (event_child, &sysno); + + for (int iter : proc->syscalls_to_catch) + if (iter == sysno) + return true; + + return false; +} + +ptid_t +linux_process_target::wait_1 (ptid_t ptid, target_waitstatus *ourstatus, + int target_options) +{ + client_state &cs = get_client_state (); + int w; + struct lwp_info *event_child; + int options; + int pid; + int step_over_finished; + int bp_explains_trap; + int maybe_internal_trap; + int report_to_gdb; + int trace_event; + int in_step_range; + int any_resumed; + + if (debug_threads) + { + debug_enter (); + debug_printf ("wait_1: [%s]\n", target_pid_to_str (ptid)); + } + + /* Translate generic target options into linux options. */ + options = __WALL; + if (target_options & TARGET_WNOHANG) + options |= WNOHANG; + + bp_explains_trap = 0; + trace_event = 0; + in_step_range = 0; + ourstatus->kind = TARGET_WAITKIND_IGNORE; + + auto status_pending_p_any = [&] (thread_info *thread) + { + return status_pending_p_callback (thread, minus_one_ptid); + }; + + auto not_stopped = [&] (thread_info *thread) + { + return not_stopped_callback (thread, minus_one_ptid); + }; + + /* Find a resumed LWP, if any. */ + if (find_thread (status_pending_p_any) != NULL) + any_resumed = 1; + else if (find_thread (not_stopped) != NULL) + any_resumed = 1; + else + any_resumed = 0; + + if (step_over_bkpt == null_ptid) + pid = wait_for_event (ptid, &w, options); + else + { + if (debug_threads) + debug_printf ("step_over_bkpt set [%s], doing a blocking wait\n", + target_pid_to_str (step_over_bkpt)); + pid = wait_for_event (step_over_bkpt, &w, options & ~WNOHANG); + } + + if (pid == 0 || (pid == -1 && !any_resumed)) + { + gdb_assert (target_options & TARGET_WNOHANG); + + if (debug_threads) + { + debug_printf ("wait_1 ret = null_ptid, " + "TARGET_WAITKIND_IGNORE\n"); + debug_exit (); + } + + ourstatus->kind = TARGET_WAITKIND_IGNORE; + return null_ptid; + } + else if (pid == -1) + { + if (debug_threads) + { + debug_printf ("wait_1 ret = null_ptid, " + "TARGET_WAITKIND_NO_RESUMED\n"); + debug_exit (); + } + + ourstatus->kind = TARGET_WAITKIND_NO_RESUMED; + return null_ptid; + } + + event_child = get_thread_lwp (current_thread); + + /* wait_for_event only returns an exit status for the last + child of a process. Report it. */ + if (WIFEXITED (w) || WIFSIGNALED (w)) + { + if (WIFEXITED (w)) + { + ourstatus->kind = TARGET_WAITKIND_EXITED; + ourstatus->value.integer = WEXITSTATUS (w); + + if (debug_threads) + { + debug_printf ("wait_1 ret = %s, exited with " + "retcode %d\n", + target_pid_to_str (ptid_of (current_thread)), + WEXITSTATUS (w)); + debug_exit (); + } + } + else + { + ourstatus->kind = TARGET_WAITKIND_SIGNALLED; + ourstatus->value.sig = gdb_signal_from_host (WTERMSIG (w)); + + if (debug_threads) + { + debug_printf ("wait_1 ret = %s, terminated with " + "signal %d\n", + target_pid_to_str (ptid_of (current_thread)), + WTERMSIG (w)); + debug_exit (); + } + } + + if (ourstatus->kind == TARGET_WAITKIND_EXITED) + return filter_exit_event (event_child, ourstatus); + + return ptid_of (current_thread); + } + + /* If step-over executes a breakpoint instruction, in the case of a + hardware single step it means a gdb/gdbserver breakpoint had been + planted on top of a permanent breakpoint, in the case of a software + single step it may just mean that gdbserver hit the reinsert breakpoint. + The PC has been adjusted by save_stop_reason to point at + the breakpoint address. + So in the case of the hardware single step advance the PC manually + past the breakpoint and in the case of software single step advance only + if it's not the single_step_breakpoint we are hitting. + This avoids that a program would keep trapping a permanent breakpoint + forever. */ + if (step_over_bkpt != null_ptid + && event_child->stop_reason == TARGET_STOPPED_BY_SW_BREAKPOINT + && (event_child->stepping + || !single_step_breakpoint_inserted_here (event_child->stop_pc))) + { + int increment_pc = 0; + int breakpoint_kind = 0; + CORE_ADDR stop_pc = event_child->stop_pc; + + breakpoint_kind = breakpoint_kind_from_current_state (&stop_pc); + sw_breakpoint_from_kind (breakpoint_kind, &increment_pc); + + if (debug_threads) + { + debug_printf ("step-over for %s executed software breakpoint\n", + target_pid_to_str (ptid_of (current_thread))); + } + + if (increment_pc != 0) + { + struct regcache *regcache + = get_thread_regcache (current_thread, 1); + + event_child->stop_pc += increment_pc; + low_set_pc (regcache, event_child->stop_pc); + + if (!low_breakpoint_at (event_child->stop_pc)) + event_child->stop_reason = TARGET_STOPPED_BY_NO_REASON; + } + } + + /* If this event was not handled before, and is not a SIGTRAP, we + report it. SIGILL and SIGSEGV are also treated as traps in case + a breakpoint is inserted at the current PC. If this target does + not support internal breakpoints at all, we also report the + SIGTRAP without further processing; it's of no concern to us. */ + maybe_internal_trap + = (low_supports_breakpoints () + && (WSTOPSIG (w) == SIGTRAP + || ((WSTOPSIG (w) == SIGILL + || WSTOPSIG (w) == SIGSEGV) + && low_breakpoint_at (event_child->stop_pc)))); + + if (maybe_internal_trap) + { + /* Handle anything that requires bookkeeping before deciding to + report the event or continue waiting. */ + + /* First check if we can explain the SIGTRAP with an internal + breakpoint, or if we should possibly report the event to GDB. + Do this before anything that may remove or insert a + breakpoint. */ + bp_explains_trap = breakpoint_inserted_here (event_child->stop_pc); + + /* We have a SIGTRAP, possibly a step-over dance has just + finished. If so, tweak the state machine accordingly, + reinsert breakpoints and delete any single-step + breakpoints. */ + step_over_finished = finish_step_over (event_child); + + /* Now invoke the callbacks of any internal breakpoints there. */ + check_breakpoints (event_child->stop_pc); + + /* Handle tracepoint data collecting. This may overflow the + trace buffer, and cause a tracing stop, removing + breakpoints. */ + trace_event = handle_tracepoints (event_child); + + if (bp_explains_trap) + { + if (debug_threads) + debug_printf ("Hit a gdbserver breakpoint.\n"); + } + } + else + { + /* We have some other signal, possibly a step-over dance was in + progress, and it should be cancelled too. */ + step_over_finished = finish_step_over (event_child); + } + + /* We have all the data we need. Either report the event to GDB, or + resume threads and keep waiting for more. */ + + /* If we're collecting a fast tracepoint, finish the collection and + move out of the jump pad before delivering a signal. See + linux_stabilize_threads. */ + + if (WIFSTOPPED (w) + && WSTOPSIG (w) != SIGTRAP + && supports_fast_tracepoints () + && agent_loaded_p ()) + { + if (debug_threads) + debug_printf ("Got signal %d for LWP %ld. Check if we need " + "to defer or adjust it.\n", + WSTOPSIG (w), lwpid_of (current_thread)); + + /* Allow debugging the jump pad itself. */ + if (current_thread->last_resume_kind != resume_step + && maybe_move_out_of_jump_pad (event_child, &w)) + { + enqueue_one_deferred_signal (event_child, &w); + + if (debug_threads) + debug_printf ("Signal %d for LWP %ld deferred (in jump pad)\n", + WSTOPSIG (w), lwpid_of (current_thread)); + + resume_one_lwp (event_child, 0, 0, NULL); + + if (debug_threads) + debug_exit (); + return ignore_event (ourstatus); + } + } + + if (event_child->collecting_fast_tracepoint + != fast_tpoint_collect_result::not_collecting) + { + if (debug_threads) + debug_printf ("LWP %ld was trying to move out of the jump pad (%d). " + "Check if we're already there.\n", + lwpid_of (current_thread), + (int) event_child->collecting_fast_tracepoint); + + trace_event = 1; + + event_child->collecting_fast_tracepoint + = linux_fast_tracepoint_collecting (event_child, NULL); + + if (event_child->collecting_fast_tracepoint + != fast_tpoint_collect_result::before_insn) + { + /* No longer need this breakpoint. */ + if (event_child->exit_jump_pad_bkpt != NULL) + { + if (debug_threads) + debug_printf ("No longer need exit-jump-pad bkpt; removing it." + "stopping all threads momentarily.\n"); + + /* Other running threads could hit this breakpoint. + We don't handle moribund locations like GDB does, + instead we always pause all threads when removing + breakpoints, so that any step-over or + decr_pc_after_break adjustment is always taken + care of while the breakpoint is still + inserted. */ + stop_all_lwps (1, event_child); + + delete_breakpoint (event_child->exit_jump_pad_bkpt); + event_child->exit_jump_pad_bkpt = NULL; + + unstop_all_lwps (1, event_child); + + gdb_assert (event_child->suspended >= 0); + } + } + + if (event_child->collecting_fast_tracepoint + == fast_tpoint_collect_result::not_collecting) + { + if (debug_threads) + debug_printf ("fast tracepoint finished " + "collecting successfully.\n"); + + /* We may have a deferred signal to report. */ + if (dequeue_one_deferred_signal (event_child, &w)) + { + if (debug_threads) + debug_printf ("dequeued one signal.\n"); + } + else + { + if (debug_threads) + debug_printf ("no deferred signals.\n"); + + if (stabilizing_threads) + { + ourstatus->kind = TARGET_WAITKIND_STOPPED; + ourstatus->value.sig = GDB_SIGNAL_0; + + if (debug_threads) + { + debug_printf ("wait_1 ret = %s, stopped " + "while stabilizing threads\n", + target_pid_to_str (ptid_of (current_thread))); + debug_exit (); + } + + return ptid_of (current_thread); + } + } + } + } + + /* Check whether GDB would be interested in this event. */ + + /* Check if GDB is interested in this syscall. */ + if (WIFSTOPPED (w) + && WSTOPSIG (w) == SYSCALL_SIGTRAP + && !gdb_catch_this_syscall (event_child)) + { + if (debug_threads) + { + debug_printf ("Ignored syscall for LWP %ld.\n", + lwpid_of (current_thread)); + } + + resume_one_lwp (event_child, event_child->stepping, 0, NULL); + + if (debug_threads) + debug_exit (); + return ignore_event (ourstatus); + } + + /* If GDB is not interested in this signal, don't stop other + threads, and don't report it to GDB. Just resume the inferior + right away. We do this for threading-related signals as well as + any that GDB specifically requested we ignore. But never ignore + SIGSTOP if we sent it ourselves, and do not ignore signals when + stepping - they may require special handling to skip the signal + handler. Also never ignore signals that could be caused by a + breakpoint. */ + if (WIFSTOPPED (w) + && current_thread->last_resume_kind != resume_step + && ( +#if defined (USE_THREAD_DB) && !defined (__ANDROID__) + (current_process ()->priv->thread_db != NULL + && (WSTOPSIG (w) == __SIGRTMIN + || WSTOPSIG (w) == __SIGRTMIN + 1)) + || +#endif + (cs.pass_signals[gdb_signal_from_host (WSTOPSIG (w))] + && !(WSTOPSIG (w) == SIGSTOP + && current_thread->last_resume_kind == resume_stop) + && !linux_wstatus_maybe_breakpoint (w)))) + { + siginfo_t info, *info_p; + + if (debug_threads) + debug_printf ("Ignored signal %d for LWP %ld.\n", + WSTOPSIG (w), lwpid_of (current_thread)); + + if (ptrace (PTRACE_GETSIGINFO, lwpid_of (current_thread), + (PTRACE_TYPE_ARG3) 0, &info) == 0) + info_p = &info; + else + info_p = NULL; + + if (step_over_finished) + { + /* We cancelled this thread's step-over above. We still + need to unsuspend all other LWPs, and set them back + running again while the signal handler runs. */ + unsuspend_all_lwps (event_child); + + /* Enqueue the pending signal info so that proceed_all_lwps + doesn't lose it. */ + enqueue_pending_signal (event_child, WSTOPSIG (w), info_p); + + proceed_all_lwps (); + } + else + { + resume_one_lwp (event_child, event_child->stepping, + WSTOPSIG (w), info_p); + } + + if (debug_threads) + debug_exit (); + + return ignore_event (ourstatus); + } + + /* Note that all addresses are always "out of the step range" when + there's no range to begin with. */ + in_step_range = lwp_in_step_range (event_child); + + /* If GDB wanted this thread to single step, and the thread is out + of the step range, we always want to report the SIGTRAP, and let + GDB handle it. Watchpoints should always be reported. So should + signals we can't explain. A SIGTRAP we can't explain could be a + GDB breakpoint --- we may or not support Z0 breakpoints. If we + do, we're be able to handle GDB breakpoints on top of internal + breakpoints, by handling the internal breakpoint and still + reporting the event to GDB. If we don't, we're out of luck, GDB + won't see the breakpoint hit. If we see a single-step event but + the thread should be continuing, don't pass the trap to gdb. + That indicates that we had previously finished a single-step but + left the single-step pending -- see + complete_ongoing_step_over. */ + report_to_gdb = (!maybe_internal_trap + || (current_thread->last_resume_kind == resume_step + && !in_step_range) + || event_child->stop_reason == TARGET_STOPPED_BY_WATCHPOINT + || (!in_step_range + && !bp_explains_trap + && !trace_event + && !step_over_finished + && !(current_thread->last_resume_kind == resume_continue + && event_child->stop_reason == TARGET_STOPPED_BY_SINGLE_STEP)) + || (gdb_breakpoint_here (event_child->stop_pc) + && gdb_condition_true_at_breakpoint (event_child->stop_pc) + && gdb_no_commands_at_breakpoint (event_child->stop_pc)) + || event_child->waitstatus.kind != TARGET_WAITKIND_IGNORE); + + run_breakpoint_commands (event_child->stop_pc); + + /* We found no reason GDB would want us to stop. We either hit one + of our own breakpoints, or finished an internal step GDB + shouldn't know about. */ + if (!report_to_gdb) + { + if (debug_threads) + { + if (bp_explains_trap) + debug_printf ("Hit a gdbserver breakpoint.\n"); + if (step_over_finished) + debug_printf ("Step-over finished.\n"); + if (trace_event) + debug_printf ("Tracepoint event.\n"); + if (lwp_in_step_range (event_child)) + debug_printf ("Range stepping pc 0x%s [0x%s, 0x%s).\n", + paddress (event_child->stop_pc), + paddress (event_child->step_range_start), + paddress (event_child->step_range_end)); + } + + /* We're not reporting this breakpoint to GDB, so apply the + decr_pc_after_break adjustment to the inferior's regcache + ourselves. */ + + if (low_supports_breakpoints ()) + { + struct regcache *regcache + = get_thread_regcache (current_thread, 1); + low_set_pc (regcache, event_child->stop_pc); + } + + if (step_over_finished) + { + /* If we have finished stepping over a breakpoint, we've + stopped and suspended all LWPs momentarily except the + stepping one. This is where we resume them all again. + We're going to keep waiting, so use proceed, which + handles stepping over the next breakpoint. */ + unsuspend_all_lwps (event_child); + } + else + { + /* Remove the single-step breakpoints if any. Note that + there isn't single-step breakpoint if we finished stepping + over. */ + if (supports_software_single_step () + && has_single_step_breakpoints (current_thread)) + { + stop_all_lwps (0, event_child); + delete_single_step_breakpoints (current_thread); + unstop_all_lwps (0, event_child); + } + } + + if (debug_threads) + debug_printf ("proceeding all threads.\n"); + proceed_all_lwps (); + + if (debug_threads) + debug_exit (); + + return ignore_event (ourstatus); + } + + if (debug_threads) + { + if (event_child->waitstatus.kind != TARGET_WAITKIND_IGNORE) + { + std::string str + = target_waitstatus_to_string (&event_child->waitstatus); + + debug_printf ("LWP %ld: extended event with waitstatus %s\n", + lwpid_of (get_lwp_thread (event_child)), str.c_str ()); + } + if (current_thread->last_resume_kind == resume_step) + { + if (event_child->step_range_start == event_child->step_range_end) + debug_printf ("GDB wanted to single-step, reporting event.\n"); + else if (!lwp_in_step_range (event_child)) + debug_printf ("Out of step range, reporting event.\n"); + } + if (event_child->stop_reason == TARGET_STOPPED_BY_WATCHPOINT) + debug_printf ("Stopped by watchpoint.\n"); + else if (gdb_breakpoint_here (event_child->stop_pc)) + debug_printf ("Stopped by GDB breakpoint.\n"); + if (debug_threads) + debug_printf ("Hit a non-gdbserver trap event.\n"); + } + + /* Alright, we're going to report a stop. */ + + /* Remove single-step breakpoints. */ + if (supports_software_single_step ()) + { + /* Remove single-step breakpoints or not. It it is true, stop all + lwps, so that other threads won't hit the breakpoint in the + staled memory. */ + int remove_single_step_breakpoints_p = 0; + + if (non_stop) + { + remove_single_step_breakpoints_p + = has_single_step_breakpoints (current_thread); + } + else + { + /* In all-stop, a stop reply cancels all previous resume + requests. Delete all single-step breakpoints. */ + + find_thread ([&] (thread_info *thread) { + if (has_single_step_breakpoints (thread)) + { + remove_single_step_breakpoints_p = 1; + return true; + } + + return false; + }); + } + + if (remove_single_step_breakpoints_p) + { + /* If we remove single-step breakpoints from memory, stop all lwps, + so that other threads won't hit the breakpoint in the staled + memory. */ + stop_all_lwps (0, event_child); + + if (non_stop) + { + gdb_assert (has_single_step_breakpoints (current_thread)); + delete_single_step_breakpoints (current_thread); + } + else + { + for_each_thread ([] (thread_info *thread){ + if (has_single_step_breakpoints (thread)) + delete_single_step_breakpoints (thread); + }); + } + + unstop_all_lwps (0, event_child); + } + } + + if (!stabilizing_threads) + { + /* In all-stop, stop all threads. */ + if (!non_stop) + stop_all_lwps (0, NULL); + + if (step_over_finished) + { + if (!non_stop) + { + /* If we were doing a step-over, all other threads but + the stepping one had been paused in start_step_over, + with their suspend counts incremented. We don't want + to do a full unstop/unpause, because we're in + all-stop mode (so we want threads stopped), but we + still need to unsuspend the other threads, to + decrement their `suspended' count back. */ + unsuspend_all_lwps (event_child); + } + else + { + /* If we just finished a step-over, then all threads had + been momentarily paused. In all-stop, that's fine, + we want threads stopped by now anyway. In non-stop, + we need to re-resume threads that GDB wanted to be + running. */ + unstop_all_lwps (1, event_child); + } + } + + /* If we're not waiting for a specific LWP, choose an event LWP + from among those that have had events. Giving equal priority + to all LWPs that have had events helps prevent + starvation. */ + if (ptid == minus_one_ptid) + { + event_child->status_pending_p = 1; + event_child->status_pending = w; + + select_event_lwp (&event_child); + + /* current_thread and event_child must stay in sync. */ + current_thread = get_lwp_thread (event_child); + + event_child->status_pending_p = 0; + w = event_child->status_pending; + } + + + /* Stabilize threads (move out of jump pads). */ + if (!non_stop) + target_stabilize_threads (); + } + else + { + /* If we just finished a step-over, then all threads had been + momentarily paused. In all-stop, that's fine, we want + threads stopped by now anyway. In non-stop, we need to + re-resume threads that GDB wanted to be running. */ + if (step_over_finished) + unstop_all_lwps (1, event_child); + } + + if (event_child->waitstatus.kind != TARGET_WAITKIND_IGNORE) + { + /* If the reported event is an exit, fork, vfork or exec, let + GDB know. */ + + /* Break the unreported fork relationship chain. */ + if (event_child->waitstatus.kind == TARGET_WAITKIND_FORKED + || event_child->waitstatus.kind == TARGET_WAITKIND_VFORKED) + { + event_child->fork_relative->fork_relative = NULL; + event_child->fork_relative = NULL; + } + + *ourstatus = event_child->waitstatus; + /* Clear the event lwp's waitstatus since we handled it already. */ + event_child->waitstatus.kind = TARGET_WAITKIND_IGNORE; + } + else + ourstatus->kind = TARGET_WAITKIND_STOPPED; + + /* Now that we've selected our final event LWP, un-adjust its PC if + it was a software breakpoint, and the client doesn't know we can + adjust the breakpoint ourselves. */ + if (event_child->stop_reason == TARGET_STOPPED_BY_SW_BREAKPOINT + && !cs.swbreak_feature) + { + int decr_pc = low_decr_pc_after_break (); + + if (decr_pc != 0) + { + struct regcache *regcache + = get_thread_regcache (current_thread, 1); + low_set_pc (regcache, event_child->stop_pc + decr_pc); + } + } + + if (WSTOPSIG (w) == SYSCALL_SIGTRAP) + { + get_syscall_trapinfo (event_child, + &ourstatus->value.syscall_number); + ourstatus->kind = event_child->syscall_state; + } + else if (current_thread->last_resume_kind == resume_stop + && WSTOPSIG (w) == SIGSTOP) + { + /* A thread that has been requested to stop by GDB with vCont;t, + and it stopped cleanly, so report as SIG0. The use of + SIGSTOP is an implementation detail. */ + ourstatus->value.sig = GDB_SIGNAL_0; + } + else if (current_thread->last_resume_kind == resume_stop + && WSTOPSIG (w) != SIGSTOP) + { + /* A thread that has been requested to stop by GDB with vCont;t, + but, it stopped for other reasons. */ + ourstatus->value.sig = gdb_signal_from_host (WSTOPSIG (w)); + } + else if (ourstatus->kind == TARGET_WAITKIND_STOPPED) + { + ourstatus->value.sig = gdb_signal_from_host (WSTOPSIG (w)); + } + + gdb_assert (step_over_bkpt == null_ptid); + + if (debug_threads) + { + debug_printf ("wait_1 ret = %s, %d, %d\n", + target_pid_to_str (ptid_of (current_thread)), + ourstatus->kind, ourstatus->value.sig); + debug_exit (); + } + + if (ourstatus->kind == TARGET_WAITKIND_EXITED) + return filter_exit_event (event_child, ourstatus); + + return ptid_of (current_thread); +} + +/* Get rid of any pending event in the pipe. */ +static void +async_file_flush (void) +{ + int ret; + char buf; + + do + ret = read (linux_event_pipe[0], &buf, 1); + while (ret >= 0 || (ret == -1 && errno == EINTR)); +} + +/* Put something in the pipe, so the event loop wakes up. */ +static void +async_file_mark (void) +{ + int ret; + + async_file_flush (); + + do + ret = write (linux_event_pipe[1], "+", 1); + while (ret == 0 || (ret == -1 && errno == EINTR)); + + /* Ignore EAGAIN. If the pipe is full, the event loop will already + be awakened anyway. */ +} + +ptid_t +linux_process_target::wait (ptid_t ptid, + target_waitstatus *ourstatus, + int target_options) +{ + ptid_t event_ptid; + + /* Flush the async file first. */ + if (target_is_async_p ()) + async_file_flush (); + + do + { + event_ptid = wait_1 (ptid, ourstatus, target_options); + } + while ((target_options & TARGET_WNOHANG) == 0 + && event_ptid == null_ptid + && ourstatus->kind == TARGET_WAITKIND_IGNORE); + + /* If at least one stop was reported, there may be more. A single + SIGCHLD can signal more than one child stop. */ + if (target_is_async_p () + && (target_options & TARGET_WNOHANG) != 0 + && event_ptid != null_ptid) + async_file_mark (); + + return event_ptid; +} + +/* Send a signal to an LWP. */ + +static int +kill_lwp (unsigned long lwpid, int signo) +{ + int ret; + + errno = 0; + ret = syscall (__NR_tkill, lwpid, signo); + if (errno == ENOSYS) + { + /* If tkill fails, then we are not using nptl threads, a + configuration we no longer support. */ + perror_with_name (("tkill")); + } + return ret; +} + +void +linux_stop_lwp (struct lwp_info *lwp) +{ + send_sigstop (lwp); +} + +static void +send_sigstop (struct lwp_info *lwp) +{ + int pid; + + pid = lwpid_of (get_lwp_thread (lwp)); + + /* If we already have a pending stop signal for this process, don't + send another. */ + if (lwp->stop_expected) + { + if (debug_threads) + debug_printf ("Have pending sigstop for lwp %d\n", pid); + + return; + } + + if (debug_threads) + debug_printf ("Sending sigstop to lwp %d\n", pid); + + lwp->stop_expected = 1; + kill_lwp (pid, SIGSTOP); +} + +static void +send_sigstop (thread_info *thread, lwp_info *except) +{ + struct lwp_info *lwp = get_thread_lwp (thread); + + /* Ignore EXCEPT. */ + if (lwp == except) + return; + + if (lwp->stopped) + return; + + send_sigstop (lwp); +} + +/* Increment the suspend count of an LWP, and stop it, if not stopped + yet. */ +static void +suspend_and_send_sigstop (thread_info *thread, lwp_info *except) +{ + struct lwp_info *lwp = get_thread_lwp (thread); + + /* Ignore EXCEPT. */ + if (lwp == except) + return; + + lwp_suspended_inc (lwp); + + send_sigstop (thread, except); +} + +static void +mark_lwp_dead (struct lwp_info *lwp, int wstat) +{ + /* Store the exit status for later. */ + lwp->status_pending_p = 1; + lwp->status_pending = wstat; + + /* Store in waitstatus as well, as there's nothing else to process + for this event. */ + if (WIFEXITED (wstat)) + { + lwp->waitstatus.kind = TARGET_WAITKIND_EXITED; + lwp->waitstatus.value.integer = WEXITSTATUS (wstat); + } + else if (WIFSIGNALED (wstat)) + { + lwp->waitstatus.kind = TARGET_WAITKIND_SIGNALLED; + lwp->waitstatus.value.sig = gdb_signal_from_host (WTERMSIG (wstat)); + } + + /* Prevent trying to stop it. */ + lwp->stopped = 1; + + /* No further stops are expected from a dead lwp. */ + lwp->stop_expected = 0; +} + +/* Return true if LWP has exited already, and has a pending exit event + to report to GDB. */ + +static int +lwp_is_marked_dead (struct lwp_info *lwp) +{ + return (lwp->status_pending_p + && (WIFEXITED (lwp->status_pending) + || WIFSIGNALED (lwp->status_pending))); +} + +void +linux_process_target::wait_for_sigstop () +{ + struct thread_info *saved_thread; + ptid_t saved_tid; + int wstat; + int ret; + + saved_thread = current_thread; + if (saved_thread != NULL) + saved_tid = saved_thread->id; + else + saved_tid = null_ptid; /* avoid bogus unused warning */ + + if (debug_threads) + debug_printf ("wait_for_sigstop: pulling events\n"); + + /* Passing NULL_PTID as filter indicates we want all events to be + left pending. Eventually this returns when there are no + unwaited-for children left. */ + ret = wait_for_event_filtered (minus_one_ptid, null_ptid, &wstat, __WALL); + gdb_assert (ret == -1); + + if (saved_thread == NULL || mythread_alive (saved_tid)) + current_thread = saved_thread; + else + { + if (debug_threads) + debug_printf ("Previously current thread died.\n"); + + /* We can't change the current inferior behind GDB's back, + otherwise, a subsequent command may apply to the wrong + process. */ + current_thread = NULL; + } +} + +bool +linux_process_target::stuck_in_jump_pad (thread_info *thread) +{ + struct lwp_info *lwp = get_thread_lwp (thread); + + if (lwp->suspended != 0) + { + internal_error (__FILE__, __LINE__, + "LWP %ld is suspended, suspended=%d\n", + lwpid_of (thread), lwp->suspended); + } + gdb_assert (lwp->stopped); + + /* Allow debugging the jump pad, gdb_collect, etc.. */ + return (supports_fast_tracepoints () + && agent_loaded_p () + && (gdb_breakpoint_here (lwp->stop_pc) + || lwp->stop_reason == TARGET_STOPPED_BY_WATCHPOINT + || thread->last_resume_kind == resume_step) + && (linux_fast_tracepoint_collecting (lwp, NULL) + != fast_tpoint_collect_result::not_collecting)); +} + +void +linux_process_target::move_out_of_jump_pad (thread_info *thread) +{ + struct thread_info *saved_thread; + struct lwp_info *lwp = get_thread_lwp (thread); + int *wstat; + + if (lwp->suspended != 0) + { + internal_error (__FILE__, __LINE__, + "LWP %ld is suspended, suspended=%d\n", + lwpid_of (thread), lwp->suspended); + } + gdb_assert (lwp->stopped); + + /* For gdb_breakpoint_here. */ + saved_thread = current_thread; + current_thread = thread; + + wstat = lwp->status_pending_p ? &lwp->status_pending : NULL; + + /* Allow debugging the jump pad, gdb_collect, etc. */ + if (!gdb_breakpoint_here (lwp->stop_pc) + && lwp->stop_reason != TARGET_STOPPED_BY_WATCHPOINT + && thread->last_resume_kind != resume_step + && maybe_move_out_of_jump_pad (lwp, wstat)) + { + if (debug_threads) + debug_printf ("LWP %ld needs stabilizing (in jump pad)\n", + lwpid_of (thread)); + + if (wstat) + { + lwp->status_pending_p = 0; + enqueue_one_deferred_signal (lwp, wstat); + + if (debug_threads) + debug_printf ("Signal %d for LWP %ld deferred " + "(in jump pad)\n", + WSTOPSIG (*wstat), lwpid_of (thread)); + } + + resume_one_lwp (lwp, 0, 0, NULL); + } + else + lwp_suspended_inc (lwp); + + current_thread = saved_thread; +} + +static bool +lwp_running (thread_info *thread) +{ + struct lwp_info *lwp = get_thread_lwp (thread); + + if (lwp_is_marked_dead (lwp)) + return false; + + return !lwp->stopped; +} + +void +linux_process_target::stop_all_lwps (int suspend, lwp_info *except) +{ + /* Should not be called recursively. */ + gdb_assert (stopping_threads == NOT_STOPPING_THREADS); + + if (debug_threads) + { + debug_enter (); + debug_printf ("stop_all_lwps (%s, except=%s)\n", + suspend ? "stop-and-suspend" : "stop", + except != NULL + ? target_pid_to_str (ptid_of (get_lwp_thread (except))) + : "none"); + } + + stopping_threads = (suspend + ? STOPPING_AND_SUSPENDING_THREADS + : STOPPING_THREADS); + + if (suspend) + for_each_thread ([&] (thread_info *thread) + { + suspend_and_send_sigstop (thread, except); + }); + else + for_each_thread ([&] (thread_info *thread) + { + send_sigstop (thread, except); + }); + + wait_for_sigstop (); + stopping_threads = NOT_STOPPING_THREADS; + + if (debug_threads) + { + debug_printf ("stop_all_lwps done, setting stopping_threads " + "back to !stopping\n"); + debug_exit (); + } +} + +/* Enqueue one signal in the chain of signals which need to be + delivered to this process on next resume. */ + +static void +enqueue_pending_signal (struct lwp_info *lwp, int signal, siginfo_t *info) +{ + lwp->pending_signals.emplace_back (signal); + if (info == nullptr) + memset (&lwp->pending_signals.back ().info, 0, sizeof (siginfo_t)); + else + lwp->pending_signals.back ().info = *info; +} + +void +linux_process_target::install_software_single_step_breakpoints (lwp_info *lwp) +{ + struct thread_info *thread = get_lwp_thread (lwp); + struct regcache *regcache = get_thread_regcache (thread, 1); + + scoped_restore save_current_thread = make_scoped_restore (¤t_thread); + + current_thread = thread; + std::vector<CORE_ADDR> next_pcs = low_get_next_pcs (regcache); + + for (CORE_ADDR pc : next_pcs) + set_single_step_breakpoint (pc, current_ptid); +} + +int +linux_process_target::single_step (lwp_info* lwp) +{ + int step = 0; + + if (supports_hardware_single_step ()) + { + step = 1; + } + else if (supports_software_single_step ()) + { + install_software_single_step_breakpoints (lwp); + step = 0; + } + else + { + if (debug_threads) + debug_printf ("stepping is not implemented on this target"); + } + + return step; +} + +/* The signal can be delivered to the inferior if we are not trying to + finish a fast tracepoint collect. Since signal can be delivered in + the step-over, the program may go to signal handler and trap again + after return from the signal handler. We can live with the spurious + double traps. */ + +static int +lwp_signal_can_be_delivered (struct lwp_info *lwp) +{ + return (lwp->collecting_fast_tracepoint + == fast_tpoint_collect_result::not_collecting); +} + +void +linux_process_target::resume_one_lwp_throw (lwp_info *lwp, int step, + int signal, siginfo_t *info) +{ + struct thread_info *thread = get_lwp_thread (lwp); + struct thread_info *saved_thread; + int ptrace_request; + struct process_info *proc = get_thread_process (thread); + + /* Note that target description may not be initialised + (proc->tdesc == NULL) at this point because the program hasn't + stopped at the first instruction yet. It means GDBserver skips + the extra traps from the wrapper program (see option --wrapper). + Code in this function that requires register access should be + guarded by proc->tdesc == NULL or something else. */ + + if (lwp->stopped == 0) + return; + + gdb_assert (lwp->waitstatus.kind == TARGET_WAITKIND_IGNORE); + + fast_tpoint_collect_result fast_tp_collecting + = lwp->collecting_fast_tracepoint; + + gdb_assert (!stabilizing_threads + || (fast_tp_collecting + != fast_tpoint_collect_result::not_collecting)); + + /* Cancel actions that rely on GDB not changing the PC (e.g., the + user used the "jump" command, or "set $pc = foo"). */ + if (thread->while_stepping != NULL && lwp->stop_pc != get_pc (lwp)) + { + /* Collecting 'while-stepping' actions doesn't make sense + anymore. */ + release_while_stepping_state_list (thread); + } + + /* If we have pending signals or status, and a new signal, enqueue the + signal. Also enqueue the signal if it can't be delivered to the + inferior right now. */ + if (signal != 0 + && (lwp->status_pending_p + || !lwp->pending_signals.empty () + || !lwp_signal_can_be_delivered (lwp))) + { + enqueue_pending_signal (lwp, signal, info); + + /* Postpone any pending signal. It was enqueued above. */ + signal = 0; + } + + if (lwp->status_pending_p) + { + if (debug_threads) + debug_printf ("Not resuming lwp %ld (%s, stop %s);" + " has pending status\n", + lwpid_of (thread), step ? "step" : "continue", + lwp->stop_expected ? "expected" : "not expected"); + return; + } + + saved_thread = current_thread; + current_thread = thread; + + /* This bit needs some thinking about. If we get a signal that + we must report while a single-step reinsert is still pending, + we often end up resuming the thread. It might be better to + (ew) allow a stack of pending events; then we could be sure that + the reinsert happened right away and not lose any signals. + + Making this stack would also shrink the window in which breakpoints are + uninserted (see comment in linux_wait_for_lwp) but not enough for + complete correctness, so it won't solve that problem. It may be + worthwhile just to solve this one, however. */ + if (lwp->bp_reinsert != 0) + { + if (debug_threads) + debug_printf (" pending reinsert at 0x%s\n", + paddress (lwp->bp_reinsert)); + + if (supports_hardware_single_step ()) + { + if (fast_tp_collecting == fast_tpoint_collect_result::not_collecting) + { + if (step == 0) + warning ("BAD - reinserting but not stepping."); + if (lwp->suspended) + warning ("BAD - reinserting and suspended(%d).", + lwp->suspended); + } + } + + step = maybe_hw_step (thread); + } + + if (fast_tp_collecting == fast_tpoint_collect_result::before_insn) + { + if (debug_threads) + debug_printf ("lwp %ld wants to get out of fast tracepoint jump pad" + " (exit-jump-pad-bkpt)\n", + lwpid_of (thread)); + } + else if (fast_tp_collecting == fast_tpoint_collect_result::at_insn) + { + if (debug_threads) + debug_printf ("lwp %ld wants to get out of fast tracepoint jump pad" + " single-stepping\n", + lwpid_of (thread)); + + if (supports_hardware_single_step ()) + step = 1; + else + { + internal_error (__FILE__, __LINE__, + "moving out of jump pad single-stepping" + " not implemented on this target"); + } + } + + /* If we have while-stepping actions in this thread set it stepping. + If we have a signal to deliver, it may or may not be set to + SIG_IGN, we don't know. Assume so, and allow collecting + while-stepping into a signal handler. A possible smart thing to + do would be to set an internal breakpoint at the signal return + address, continue, and carry on catching this while-stepping + action only when that breakpoint is hit. A future + enhancement. */ + if (thread->while_stepping != NULL) + { + if (debug_threads) + debug_printf ("lwp %ld has a while-stepping action -> forcing step.\n", + lwpid_of (thread)); + + step = single_step (lwp); + } + + if (proc->tdesc != NULL && low_supports_breakpoints ()) + { + struct regcache *regcache = get_thread_regcache (current_thread, 1); + + lwp->stop_pc = low_get_pc (regcache); + + if (debug_threads) + { + debug_printf (" %s from pc 0x%lx\n", step ? "step" : "continue", + (long) lwp->stop_pc); + } + } + + /* If we have pending signals, consume one if it can be delivered to + the inferior. */ + if (!lwp->pending_signals.empty () && lwp_signal_can_be_delivered (lwp)) + { + const pending_signal &p_sig = lwp->pending_signals.front (); + + signal = p_sig.signal; + if (p_sig.info.si_signo != 0) + ptrace (PTRACE_SETSIGINFO, lwpid_of (thread), (PTRACE_TYPE_ARG3) 0, + &p_sig.info); + + lwp->pending_signals.pop_front (); + } + + if (debug_threads) + debug_printf ("Resuming lwp %ld (%s, signal %d, stop %s)\n", + lwpid_of (thread), step ? "step" : "continue", signal, + lwp->stop_expected ? "expected" : "not expected"); + + low_prepare_to_resume (lwp); + + regcache_invalidate_thread (thread); + errno = 0; + lwp->stepping = step; + if (step) + ptrace_request = PTRACE_SINGLESTEP; + else if (gdb_catching_syscalls_p (lwp)) + ptrace_request = PTRACE_SYSCALL; + else + ptrace_request = PTRACE_CONT; + ptrace (ptrace_request, + lwpid_of (thread), + (PTRACE_TYPE_ARG3) 0, + /* Coerce to a uintptr_t first to avoid potential gcc warning + of coercing an 8 byte integer to a 4 byte pointer. */ + (PTRACE_TYPE_ARG4) (uintptr_t) signal); + + current_thread = saved_thread; + if (errno) + perror_with_name ("resuming thread"); + + /* Successfully resumed. Clear state that no longer makes sense, + and mark the LWP as running. Must not do this before resuming + otherwise if that fails other code will be confused. E.g., we'd + later try to stop the LWP and hang forever waiting for a stop + status. Note that we must not throw after this is cleared, + otherwise handle_zombie_lwp_error would get confused. */ + lwp->stopped = 0; + lwp->stop_reason = TARGET_STOPPED_BY_NO_REASON; +} + +void +linux_process_target::low_prepare_to_resume (lwp_info *lwp) +{ + /* Nop. */ +} + +/* Called when we try to resume a stopped LWP and that errors out. If + the LWP is no longer in ptrace-stopped state (meaning it's zombie, + or about to become), discard the error, clear any pending status + the LWP may have, and return true (we'll collect the exit status + soon enough). Otherwise, return false. */ + +static int +check_ptrace_stopped_lwp_gone (struct lwp_info *lp) +{ + struct thread_info *thread = get_lwp_thread (lp); + + /* If we get an error after resuming the LWP successfully, we'd + confuse !T state for the LWP being gone. */ + gdb_assert (lp->stopped); + + /* We can't just check whether the LWP is in 'Z (Zombie)' state, + because even if ptrace failed with ESRCH, the tracee may be "not + yet fully dead", but already refusing ptrace requests. In that + case the tracee has 'R (Running)' state for a little bit + (observed in Linux 3.18). See also the note on ESRCH in the + ptrace(2) man page. Instead, check whether the LWP has any state + other than ptrace-stopped. */ + + /* Don't assume anything if /proc/PID/status can't be read. */ + if (linux_proc_pid_is_trace_stopped_nowarn (lwpid_of (thread)) == 0) + { + lp->stop_reason = TARGET_STOPPED_BY_NO_REASON; + lp->status_pending_p = 0; + return 1; + } + return 0; +} + +void +linux_process_target::resume_one_lwp (lwp_info *lwp, int step, int signal, + siginfo_t *info) +{ + try + { + resume_one_lwp_throw (lwp, step, signal, info); + } + catch (const gdb_exception_error &ex) + { + if (!check_ptrace_stopped_lwp_gone (lwp)) + throw; + } +} + +/* This function is called once per thread via for_each_thread. + We look up which resume request applies to THREAD and mark it with a + pointer to the appropriate resume request. + + This algorithm is O(threads * resume elements), but resume elements + is small (and will remain small at least until GDB supports thread + suspension). */ + +static void +linux_set_resume_request (thread_info *thread, thread_resume *resume, size_t n) +{ + struct lwp_info *lwp = get_thread_lwp (thread); + + for (int ndx = 0; ndx < n; ndx++) + { + ptid_t ptid = resume[ndx].thread; + if (ptid == minus_one_ptid + || ptid == thread->id + /* Handle both 'pPID' and 'pPID.-1' as meaning 'all threads + of PID'. */ + || (ptid.pid () == pid_of (thread) + && (ptid.is_pid () + || ptid.lwp () == -1))) + { + if (resume[ndx].kind == resume_stop + && thread->last_resume_kind == resume_stop) + { + if (debug_threads) + debug_printf ("already %s LWP %ld at GDB's request\n", + (thread->last_status.kind + == TARGET_WAITKIND_STOPPED) + ? "stopped" + : "stopping", + lwpid_of (thread)); + + continue; + } + + /* Ignore (wildcard) resume requests for already-resumed + threads. */ + if (resume[ndx].kind != resume_stop + && thread->last_resume_kind != resume_stop) + { + if (debug_threads) + debug_printf ("already %s LWP %ld at GDB's request\n", + (thread->last_resume_kind + == resume_step) + ? "stepping" + : "continuing", + lwpid_of (thread)); + continue; + } + + /* Don't let wildcard resumes resume fork children that GDB + does not yet know are new fork children. */ + if (lwp->fork_relative != NULL) + { + struct lwp_info *rel = lwp->fork_relative; + + if (rel->status_pending_p + && (rel->waitstatus.kind == TARGET_WAITKIND_FORKED + || rel->waitstatus.kind == TARGET_WAITKIND_VFORKED)) + { + if (debug_threads) + debug_printf ("not resuming LWP %ld: has queued stop reply\n", + lwpid_of (thread)); + continue; + } + } + + /* If the thread has a pending event that has already been + reported to GDBserver core, but GDB has not pulled the + event out of the vStopped queue yet, likewise, ignore the + (wildcard) resume request. */ + if (in_queued_stop_replies (thread->id)) + { + if (debug_threads) + debug_printf ("not resuming LWP %ld: has queued stop reply\n", + lwpid_of (thread)); + continue; + } + + lwp->resume = &resume[ndx]; + thread->last_resume_kind = lwp->resume->kind; + + lwp->step_range_start = lwp->resume->step_range_start; + lwp->step_range_end = lwp->resume->step_range_end; + + /* If we had a deferred signal to report, dequeue one now. + This can happen if LWP gets more than one signal while + trying to get out of a jump pad. */ + if (lwp->stopped + && !lwp->status_pending_p + && dequeue_one_deferred_signal (lwp, &lwp->status_pending)) + { + lwp->status_pending_p = 1; + + if (debug_threads) + debug_printf ("Dequeueing deferred signal %d for LWP %ld, " + "leaving status pending.\n", + WSTOPSIG (lwp->status_pending), + lwpid_of (thread)); + } + + return; + } + } + + /* No resume action for this thread. */ + lwp->resume = NULL; +} + +bool +linux_process_target::resume_status_pending (thread_info *thread) +{ + struct lwp_info *lwp = get_thread_lwp (thread); + + /* LWPs which will not be resumed are not interesting, because + we might not wait for them next time through linux_wait. */ + if (lwp->resume == NULL) + return false; + + return thread_still_has_status_pending (thread); +} + +bool +linux_process_target::thread_needs_step_over (thread_info *thread) +{ + struct lwp_info *lwp = get_thread_lwp (thread); + struct thread_info *saved_thread; + CORE_ADDR pc; + struct process_info *proc = get_thread_process (thread); + + /* GDBserver is skipping the extra traps from the wrapper program, + don't have to do step over. */ + if (proc->tdesc == NULL) + return false; + + /* LWPs which will not be resumed are not interesting, because we + might not wait for them next time through linux_wait. */ + + if (!lwp->stopped) + { + if (debug_threads) + debug_printf ("Need step over [LWP %ld]? Ignoring, not stopped\n", + lwpid_of (thread)); + return false; + } + + if (thread->last_resume_kind == resume_stop) + { + if (debug_threads) + debug_printf ("Need step over [LWP %ld]? Ignoring, should remain" + " stopped\n", + lwpid_of (thread)); + return false; + } + + gdb_assert (lwp->suspended >= 0); + + if (lwp->suspended) + { + if (debug_threads) + debug_printf ("Need step over [LWP %ld]? Ignoring, suspended\n", + lwpid_of (thread)); + return false; + } + + if (lwp->status_pending_p) + { + if (debug_threads) + debug_printf ("Need step over [LWP %ld]? Ignoring, has pending" + " status.\n", + lwpid_of (thread)); + return false; + } + + /* Note: PC, not STOP_PC. Either GDB has adjusted the PC already, + or we have. */ + pc = get_pc (lwp); + + /* If the PC has changed since we stopped, then don't do anything, + and let the breakpoint/tracepoint be hit. This happens if, for + instance, GDB handled the decr_pc_after_break subtraction itself, + GDB is OOL stepping this thread, or the user has issued a "jump" + command, or poked thread's registers herself. */ + if (pc != lwp->stop_pc) + { + if (debug_threads) + debug_printf ("Need step over [LWP %ld]? Cancelling, PC was changed. " + "Old stop_pc was 0x%s, PC is now 0x%s\n", + lwpid_of (thread), + paddress (lwp->stop_pc), paddress (pc)); + return false; + } + + /* On software single step target, resume the inferior with signal + rather than stepping over. */ + if (supports_software_single_step () + && !lwp->pending_signals.empty () + && lwp_signal_can_be_delivered (lwp)) + { + if (debug_threads) + debug_printf ("Need step over [LWP %ld]? Ignoring, has pending" + " signals.\n", + lwpid_of (thread)); + + return false; + } + + saved_thread = current_thread; + current_thread = thread; + + /* We can only step over breakpoints we know about. */ + if (breakpoint_here (pc) || fast_tracepoint_jump_here (pc)) + { + /* Don't step over a breakpoint that GDB expects to hit + though. If the condition is being evaluated on the target's side + and it evaluate to false, step over this breakpoint as well. */ + if (gdb_breakpoint_here (pc) + && gdb_condition_true_at_breakpoint (pc) + && gdb_no_commands_at_breakpoint (pc)) + { + if (debug_threads) + debug_printf ("Need step over [LWP %ld]? yes, but found" + " GDB breakpoint at 0x%s; skipping step over\n", + lwpid_of (thread), paddress (pc)); + + current_thread = saved_thread; + return false; + } + else + { + if (debug_threads) + debug_printf ("Need step over [LWP %ld]? yes, " + "found breakpoint at 0x%s\n", + lwpid_of (thread), paddress (pc)); + + /* We've found an lwp that needs stepping over --- return 1 so + that find_thread stops looking. */ + current_thread = saved_thread; + + return true; + } + } + + current_thread = saved_thread; + + if (debug_threads) + debug_printf ("Need step over [LWP %ld]? No, no breakpoint found" + " at 0x%s\n", + lwpid_of (thread), paddress (pc)); + + return false; +} + +void +linux_process_target::start_step_over (lwp_info *lwp) +{ + struct thread_info *thread = get_lwp_thread (lwp); + struct thread_info *saved_thread; + CORE_ADDR pc; + int step; + + if (debug_threads) + debug_printf ("Starting step-over on LWP %ld. Stopping all threads\n", + lwpid_of (thread)); + + stop_all_lwps (1, lwp); + + if (lwp->suspended != 0) + { + internal_error (__FILE__, __LINE__, + "LWP %ld suspended=%d\n", lwpid_of (thread), + lwp->suspended); + } + + if (debug_threads) + debug_printf ("Done stopping all threads for step-over.\n"); + + /* Note, we should always reach here with an already adjusted PC, + either by GDB (if we're resuming due to GDB's request), or by our + caller, if we just finished handling an internal breakpoint GDB + shouldn't care about. */ + pc = get_pc (lwp); + + saved_thread = current_thread; + current_thread = thread; + + lwp->bp_reinsert = pc; + uninsert_breakpoints_at (pc); + uninsert_fast_tracepoint_jumps_at (pc); + + step = single_step (lwp); + + current_thread = saved_thread; + + resume_one_lwp (lwp, step, 0, NULL); + + /* Require next event from this LWP. */ + step_over_bkpt = thread->id; +} + +bool +linux_process_target::finish_step_over (lwp_info *lwp) +{ + if (lwp->bp_reinsert != 0) + { + struct thread_info *saved_thread = current_thread; + + if (debug_threads) + debug_printf ("Finished step over.\n"); + + current_thread = get_lwp_thread (lwp); + + /* Reinsert any breakpoint at LWP->BP_REINSERT. Note that there + may be no breakpoint to reinsert there by now. */ + reinsert_breakpoints_at (lwp->bp_reinsert); + reinsert_fast_tracepoint_jumps_at (lwp->bp_reinsert); + + lwp->bp_reinsert = 0; + + /* Delete any single-step breakpoints. No longer needed. We + don't have to worry about other threads hitting this trap, + and later not being able to explain it, because we were + stepping over a breakpoint, and we hold all threads but + LWP stopped while doing that. */ + if (!supports_hardware_single_step ()) + { + gdb_assert (has_single_step_breakpoints (current_thread)); + delete_single_step_breakpoints (current_thread); + } + + step_over_bkpt = null_ptid; + current_thread = saved_thread; + return true; + } + else + return false; +} + +void +linux_process_target::complete_ongoing_step_over () +{ + if (step_over_bkpt != null_ptid) + { + struct lwp_info *lwp; + int wstat; + int ret; + + if (debug_threads) + debug_printf ("detach: step over in progress, finish it first\n"); + + /* Passing NULL_PTID as filter indicates we want all events to + be left pending. Eventually this returns when there are no + unwaited-for children left. */ + ret = wait_for_event_filtered (minus_one_ptid, null_ptid, &wstat, + __WALL); + gdb_assert (ret == -1); + + lwp = find_lwp_pid (step_over_bkpt); + if (lwp != NULL) + finish_step_over (lwp); + step_over_bkpt = null_ptid; + unsuspend_all_lwps (lwp); + } +} + +void +linux_process_target::resume_one_thread (thread_info *thread, + bool leave_all_stopped) +{ + struct lwp_info *lwp = get_thread_lwp (thread); + int leave_pending; + + if (lwp->resume == NULL) + return; + + if (lwp->resume->kind == resume_stop) + { + if (debug_threads) + debug_printf ("resume_stop request for LWP %ld\n", lwpid_of (thread)); + + if (!lwp->stopped) + { + if (debug_threads) + debug_printf ("stopping LWP %ld\n", lwpid_of (thread)); + + /* Stop the thread, and wait for the event asynchronously, + through the event loop. */ + send_sigstop (lwp); + } + else + { + if (debug_threads) + debug_printf ("already stopped LWP %ld\n", + lwpid_of (thread)); + + /* The LWP may have been stopped in an internal event that + was not meant to be notified back to GDB (e.g., gdbserver + breakpoint), so we should be reporting a stop event in + this case too. */ + + /* If the thread already has a pending SIGSTOP, this is a + no-op. Otherwise, something later will presumably resume + the thread and this will cause it to cancel any pending + operation, due to last_resume_kind == resume_stop. If + the thread already has a pending status to report, we + will still report it the next time we wait - see + status_pending_p_callback. */ + + /* If we already have a pending signal to report, then + there's no need to queue a SIGSTOP, as this means we're + midway through moving the LWP out of the jumppad, and we + will report the pending signal as soon as that is + finished. */ + if (lwp->pending_signals_to_report.empty ()) + send_sigstop (lwp); + } + + /* For stop requests, we're done. */ + lwp->resume = NULL; + thread->last_status.kind = TARGET_WAITKIND_IGNORE; + return; + } + + /* If this thread which is about to be resumed has a pending status, + then don't resume it - we can just report the pending status. + Likewise if it is suspended, because e.g., another thread is + stepping past a breakpoint. Make sure to queue any signals that + would otherwise be sent. In all-stop mode, we do this decision + based on if *any* thread has a pending status. If there's a + thread that needs the step-over-breakpoint dance, then don't + resume any other thread but that particular one. */ + leave_pending = (lwp->suspended + || lwp->status_pending_p + || leave_all_stopped); + + /* If we have a new signal, enqueue the signal. */ + if (lwp->resume->sig != 0) + { + siginfo_t info, *info_p; + + /* If this is the same signal we were previously stopped by, + make sure to queue its siginfo. */ + if (WIFSTOPPED (lwp->last_status) + && WSTOPSIG (lwp->last_status) == lwp->resume->sig + && ptrace (PTRACE_GETSIGINFO, lwpid_of (thread), + (PTRACE_TYPE_ARG3) 0, &info) == 0) + info_p = &info; + else + info_p = NULL; + + enqueue_pending_signal (lwp, lwp->resume->sig, info_p); + } + + if (!leave_pending) + { + if (debug_threads) + debug_printf ("resuming LWP %ld\n", lwpid_of (thread)); + + proceed_one_lwp (thread, NULL); + } + else + { + if (debug_threads) + debug_printf ("leaving LWP %ld stopped\n", lwpid_of (thread)); + } + + thread->last_status.kind = TARGET_WAITKIND_IGNORE; + lwp->resume = NULL; +} + +void +linux_process_target::resume (thread_resume *resume_info, size_t n) +{ + struct thread_info *need_step_over = NULL; + + if (debug_threads) + { + debug_enter (); + debug_printf ("linux_resume:\n"); + } + + for_each_thread ([&] (thread_info *thread) + { + linux_set_resume_request (thread, resume_info, n); + }); + + /* If there is a thread which would otherwise be resumed, which has + a pending status, then don't resume any threads - we can just + report the pending status. Make sure to queue any signals that + would otherwise be sent. In non-stop mode, we'll apply this + logic to each thread individually. We consume all pending events + before considering to start a step-over (in all-stop). */ + bool any_pending = false; + if (!non_stop) + any_pending = find_thread ([this] (thread_info *thread) + { + return resume_status_pending (thread); + }) != nullptr; + + /* If there is a thread which would otherwise be resumed, which is + stopped at a breakpoint that needs stepping over, then don't + resume any threads - have it step over the breakpoint with all + other threads stopped, then resume all threads again. Make sure + to queue any signals that would otherwise be delivered or + queued. */ + if (!any_pending && low_supports_breakpoints ()) + need_step_over = find_thread ([this] (thread_info *thread) + { + return thread_needs_step_over (thread); + }); + + bool leave_all_stopped = (need_step_over != NULL || any_pending); + + if (debug_threads) + { + if (need_step_over != NULL) + debug_printf ("Not resuming all, need step over\n"); + else if (any_pending) + debug_printf ("Not resuming, all-stop and found " + "an LWP with pending status\n"); + else + debug_printf ("Resuming, no pending status or step over needed\n"); + } + + /* Even if we're leaving threads stopped, queue all signals we'd + otherwise deliver. */ + for_each_thread ([&] (thread_info *thread) + { + resume_one_thread (thread, leave_all_stopped); + }); + + if (need_step_over) + start_step_over (get_thread_lwp (need_step_over)); + + if (debug_threads) + { + debug_printf ("linux_resume done\n"); + debug_exit (); + } + + /* We may have events that were pending that can/should be sent to + the client now. Trigger a linux_wait call. */ + if (target_is_async_p ()) + async_file_mark (); +} + +void +linux_process_target::proceed_one_lwp (thread_info *thread, lwp_info *except) +{ + struct lwp_info *lwp = get_thread_lwp (thread); + int step; + + if (lwp == except) + return; + + if (debug_threads) + debug_printf ("proceed_one_lwp: lwp %ld\n", lwpid_of (thread)); + + if (!lwp->stopped) + { + if (debug_threads) + debug_printf (" LWP %ld already running\n", lwpid_of (thread)); + return; + } + + if (thread->last_resume_kind == resume_stop + && thread->last_status.kind != TARGET_WAITKIND_IGNORE) + { + if (debug_threads) + debug_printf (" client wants LWP to remain %ld stopped\n", + lwpid_of (thread)); + return; + } + + if (lwp->status_pending_p) + { + if (debug_threads) + debug_printf (" LWP %ld has pending status, leaving stopped\n", + lwpid_of (thread)); + return; + } + + gdb_assert (lwp->suspended >= 0); + + if (lwp->suspended) + { + if (debug_threads) + debug_printf (" LWP %ld is suspended\n", lwpid_of (thread)); + return; + } + + if (thread->last_resume_kind == resume_stop + && lwp->pending_signals_to_report.empty () + && (lwp->collecting_fast_tracepoint + == fast_tpoint_collect_result::not_collecting)) + { + /* We haven't reported this LWP as stopped yet (otherwise, the + last_status.kind check above would catch it, and we wouldn't + reach here. This LWP may have been momentarily paused by a + stop_all_lwps call while handling for example, another LWP's + step-over. In that case, the pending expected SIGSTOP signal + that was queued at vCont;t handling time will have already + been consumed by wait_for_sigstop, and so we need to requeue + another one here. Note that if the LWP already has a SIGSTOP + pending, this is a no-op. */ + + if (debug_threads) + debug_printf ("Client wants LWP %ld to stop. " + "Making sure it has a SIGSTOP pending\n", + lwpid_of (thread)); + + send_sigstop (lwp); + } + + if (thread->last_resume_kind == resume_step) + { + if (debug_threads) + debug_printf (" stepping LWP %ld, client wants it stepping\n", + lwpid_of (thread)); + + /* If resume_step is requested by GDB, install single-step + breakpoints when the thread is about to be actually resumed if + the single-step breakpoints weren't removed. */ + if (supports_software_single_step () + && !has_single_step_breakpoints (thread)) + install_software_single_step_breakpoints (lwp); + + step = maybe_hw_step (thread); + } + else if (lwp->bp_reinsert != 0) + { + if (debug_threads) + debug_printf (" stepping LWP %ld, reinsert set\n", + lwpid_of (thread)); + + step = maybe_hw_step (thread); + } + else + step = 0; + + resume_one_lwp (lwp, step, 0, NULL); +} + +void +linux_process_target::unsuspend_and_proceed_one_lwp (thread_info *thread, + lwp_info *except) +{ + struct lwp_info *lwp = get_thread_lwp (thread); + + if (lwp == except) + return; + + lwp_suspended_decr (lwp); + + proceed_one_lwp (thread, except); +} + +void +linux_process_target::proceed_all_lwps () +{ + struct thread_info *need_step_over; + + /* If there is a thread which would otherwise be resumed, which is + stopped at a breakpoint that needs stepping over, then don't + resume any threads - have it step over the breakpoint with all + other threads stopped, then resume all threads again. */ + + if (low_supports_breakpoints ()) + { + need_step_over = find_thread ([this] (thread_info *thread) + { + return thread_needs_step_over (thread); + }); + + if (need_step_over != NULL) + { + if (debug_threads) + debug_printf ("proceed_all_lwps: found " + "thread %ld needing a step-over\n", + lwpid_of (need_step_over)); + + start_step_over (get_thread_lwp (need_step_over)); + return; + } + } + + if (debug_threads) + debug_printf ("Proceeding, no step-over needed\n"); + + for_each_thread ([this] (thread_info *thread) + { + proceed_one_lwp (thread, NULL); + }); +} + +void +linux_process_target::unstop_all_lwps (int unsuspend, lwp_info *except) +{ + if (debug_threads) + { + debug_enter (); + if (except) + debug_printf ("unstopping all lwps, except=(LWP %ld)\n", + lwpid_of (get_lwp_thread (except))); + else + debug_printf ("unstopping all lwps\n"); + } + + if (unsuspend) + for_each_thread ([&] (thread_info *thread) + { + unsuspend_and_proceed_one_lwp (thread, except); + }); + else + for_each_thread ([&] (thread_info *thread) + { + proceed_one_lwp (thread, except); + }); + + if (debug_threads) + { + debug_printf ("unstop_all_lwps done\n"); + debug_exit (); + } +} + + +#ifdef HAVE_LINUX_REGSETS + +#define use_linux_regsets 1 + +/* Returns true if REGSET has been disabled. */ + +static int +regset_disabled (struct regsets_info *info, struct regset_info *regset) +{ + return (info->disabled_regsets != NULL + && info->disabled_regsets[regset - info->regsets]); +} + +/* Disable REGSET. */ + +static void +disable_regset (struct regsets_info *info, struct regset_info *regset) +{ + int dr_offset; + + dr_offset = regset - info->regsets; + if (info->disabled_regsets == NULL) + info->disabled_regsets = (char *) xcalloc (1, info->num_regsets); + info->disabled_regsets[dr_offset] = 1; +} + +static int +regsets_fetch_inferior_registers (struct regsets_info *regsets_info, + struct regcache *regcache) +{ + struct regset_info *regset; + int saw_general_regs = 0; + int pid; + struct iovec iov; + + pid = lwpid_of (current_thread); + for (regset = regsets_info->regsets; regset->size >= 0; regset++) + { + void *buf, *data; + int nt_type, res; + + if (regset->size == 0 || regset_disabled (regsets_info, regset)) + continue; + + buf = xmalloc (regset->size); + + nt_type = regset->nt_type; + if (nt_type) + { + iov.iov_base = buf; + iov.iov_len = regset->size; + data = (void *) &iov; + } + else + data = buf; + +#ifndef __sparc__ + res = ptrace (regset->get_request, pid, + (PTRACE_TYPE_ARG3) (long) nt_type, data); +#else + res = ptrace (regset->get_request, pid, data, nt_type); +#endif + if (res < 0) + { + if (errno == EIO + || (errno == EINVAL && regset->type == OPTIONAL_REGS)) + { + /* If we get EIO on a regset, or an EINVAL and the regset is + optional, do not try it again for this process mode. */ + disable_regset (regsets_info, regset); + } + else if (errno == ENODATA) + { + /* ENODATA may be returned if the regset is currently + not "active". This can happen in normal operation, + so suppress the warning in this case. */ + } + else if (errno == ESRCH) + { + /* At this point, ESRCH should mean the process is + already gone, in which case we simply ignore attempts + to read its registers. */ + } + else + { + char s[256]; + sprintf (s, "ptrace(regsets_fetch_inferior_registers) PID=%d", + pid); + perror (s); + } + } + else + { + if (regset->type == GENERAL_REGS) + saw_general_regs = 1; + regset->store_function (regcache, buf); + } + free (buf); + } + if (saw_general_regs) + return 0; + else + return 1; +} + +static int +regsets_store_inferior_registers (struct regsets_info *regsets_info, + struct regcache *regcache) +{ + struct regset_info *regset; + int saw_general_regs = 0; + int pid; + struct iovec iov; + + pid = lwpid_of (current_thread); + for (regset = regsets_info->regsets; regset->size >= 0; regset++) + { + void *buf, *data; + int nt_type, res; + + if (regset->size == 0 || regset_disabled (regsets_info, regset) + || regset->fill_function == NULL) + continue; + + buf = xmalloc (regset->size); + + /* First fill the buffer with the current register set contents, + in case there are any items in the kernel's regset that are + not in gdbserver's regcache. */ + + nt_type = regset->nt_type; + if (nt_type) + { + iov.iov_base = buf; + iov.iov_len = regset->size; + data = (void *) &iov; + } + else + data = buf; + +#ifndef __sparc__ + res = ptrace (regset->get_request, pid, + (PTRACE_TYPE_ARG3) (long) nt_type, data); +#else + res = ptrace (regset->get_request, pid, data, nt_type); +#endif + + if (res == 0) + { + /* Then overlay our cached registers on that. */ + regset->fill_function (regcache, buf); + + /* Only now do we write the register set. */ +#ifndef __sparc__ + res = ptrace (regset->set_request, pid, + (PTRACE_TYPE_ARG3) (long) nt_type, data); +#else + res = ptrace (regset->set_request, pid, data, nt_type); +#endif + } + + if (res < 0) + { + if (errno == EIO + || (errno == EINVAL && regset->type == OPTIONAL_REGS)) + { + /* If we get EIO on a regset, or an EINVAL and the regset is + optional, do not try it again for this process mode. */ + disable_regset (regsets_info, regset); + } + else if (errno == ESRCH) + { + /* At this point, ESRCH should mean the process is + already gone, in which case we simply ignore attempts + to change its registers. See also the related + comment in resume_one_lwp. */ + free (buf); + return 0; + } + else + { + perror ("Warning: ptrace(regsets_store_inferior_registers)"); + } + } + else if (regset->type == GENERAL_REGS) + saw_general_regs = 1; + free (buf); + } + if (saw_general_regs) + return 0; + else + return 1; +} + +#else /* !HAVE_LINUX_REGSETS */ + +#define use_linux_regsets 0 +#define regsets_fetch_inferior_registers(regsets_info, regcache) 1 +#define regsets_store_inferior_registers(regsets_info, regcache) 1 + +#endif + +/* Return 1 if register REGNO is supported by one of the regset ptrace + calls or 0 if it has to be transferred individually. */ + +static int +linux_register_in_regsets (const struct regs_info *regs_info, int regno) +{ + unsigned char mask = 1 << (regno % 8); + size_t index = regno / 8; + + return (use_linux_regsets + && (regs_info->regset_bitmap == NULL + || (regs_info->regset_bitmap[index] & mask) != 0)); +} + +#ifdef HAVE_LINUX_USRREGS + +static int +register_addr (const struct usrregs_info *usrregs, int regnum) +{ + int addr; + + if (regnum < 0 || regnum >= usrregs->num_regs) + error ("Invalid register number %d.", regnum); + + addr = usrregs->regmap[regnum]; + + return addr; +} + + +void +linux_process_target::fetch_register (const usrregs_info *usrregs, + regcache *regcache, int regno) +{ + CORE_ADDR regaddr; + int i, size; + char *buf; + int pid; + + if (regno >= usrregs->num_regs) + return; + if (low_cannot_fetch_register (regno)) + return; + + regaddr = register_addr (usrregs, regno); + if (regaddr == -1) + return; + + size = ((register_size (regcache->tdesc, regno) + + sizeof (PTRACE_XFER_TYPE) - 1) + & -sizeof (PTRACE_XFER_TYPE)); + buf = (char *) alloca (size); + + pid = lwpid_of (current_thread); + for (i = 0; i < size; i += sizeof (PTRACE_XFER_TYPE)) + { + errno = 0; + *(PTRACE_XFER_TYPE *) (buf + i) = + ptrace (PTRACE_PEEKUSER, pid, + /* Coerce to a uintptr_t first to avoid potential gcc warning + of coercing an 8 byte integer to a 4 byte pointer. */ + (PTRACE_TYPE_ARG3) (uintptr_t) regaddr, (PTRACE_TYPE_ARG4) 0); + regaddr += sizeof (PTRACE_XFER_TYPE); + if (errno != 0) + { + /* Mark register REGNO unavailable. */ + supply_register (regcache, regno, NULL); + return; + } + } + + low_supply_ptrace_register (regcache, regno, buf); +} + +void +linux_process_target::store_register (const usrregs_info *usrregs, + regcache *regcache, int regno) +{ + CORE_ADDR regaddr; + int i, size; + char *buf; + int pid; + + if (regno >= usrregs->num_regs) + return; + if (low_cannot_store_register (regno)) + return; + + regaddr = register_addr (usrregs, regno); + if (regaddr == -1) + return; + + size = ((register_size (regcache->tdesc, regno) + + sizeof (PTRACE_XFER_TYPE) - 1) + & -sizeof (PTRACE_XFER_TYPE)); + buf = (char *) alloca (size); + memset (buf, 0, size); + + low_collect_ptrace_register (regcache, regno, buf); + + pid = lwpid_of (current_thread); + for (i = 0; i < size; i += sizeof (PTRACE_XFER_TYPE)) + { + errno = 0; + ptrace (PTRACE_POKEUSER, pid, + /* Coerce to a uintptr_t first to avoid potential gcc warning + about coercing an 8 byte integer to a 4 byte pointer. */ + (PTRACE_TYPE_ARG3) (uintptr_t) regaddr, + (PTRACE_TYPE_ARG4) *(PTRACE_XFER_TYPE *) (buf + i)); + if (errno != 0) + { + /* At this point, ESRCH should mean the process is + already gone, in which case we simply ignore attempts + to change its registers. See also the related + comment in resume_one_lwp. */ + if (errno == ESRCH) + return; + + + if (!low_cannot_store_register (regno)) + error ("writing register %d: %s", regno, safe_strerror (errno)); + } + regaddr += sizeof (PTRACE_XFER_TYPE); + } +} +#endif /* HAVE_LINUX_USRREGS */ + +void +linux_process_target::low_collect_ptrace_register (regcache *regcache, + int regno, char *buf) +{ + collect_register (regcache, regno, buf); +} + +void +linux_process_target::low_supply_ptrace_register (regcache *regcache, + int regno, const char *buf) +{ + supply_register (regcache, regno, buf); +} + +void +linux_process_target::usr_fetch_inferior_registers (const regs_info *regs_info, + regcache *regcache, + int regno, int all) +{ +#ifdef HAVE_LINUX_USRREGS + struct usrregs_info *usr = regs_info->usrregs; + + if (regno == -1) + { + for (regno = 0; regno < usr->num_regs; regno++) + if (all || !linux_register_in_regsets (regs_info, regno)) + fetch_register (usr, regcache, regno); + } + else + fetch_register (usr, regcache, regno); +#endif +} + +void +linux_process_target::usr_store_inferior_registers (const regs_info *regs_info, + regcache *regcache, + int regno, int all) +{ +#ifdef HAVE_LINUX_USRREGS + struct usrregs_info *usr = regs_info->usrregs; + + if (regno == -1) + { + for (regno = 0; regno < usr->num_regs; regno++) + if (all || !linux_register_in_regsets (regs_info, regno)) + store_register (usr, regcache, regno); + } + else + store_register (usr, regcache, regno); +#endif +} + +void +linux_process_target::fetch_registers (regcache *regcache, int regno) +{ + int use_regsets; + int all = 0; + const regs_info *regs_info = get_regs_info (); + + if (regno == -1) + { + if (regs_info->usrregs != NULL) + for (regno = 0; regno < regs_info->usrregs->num_regs; regno++) + low_fetch_register (regcache, regno); + + all = regsets_fetch_inferior_registers (regs_info->regsets_info, regcache); + if (regs_info->usrregs != NULL) + usr_fetch_inferior_registers (regs_info, regcache, -1, all); + } + else + { + if (low_fetch_register (regcache, regno)) + return; + + use_regsets = linux_register_in_regsets (regs_info, regno); + if (use_regsets) + all = regsets_fetch_inferior_registers (regs_info->regsets_info, + regcache); + if ((!use_regsets || all) && regs_info->usrregs != NULL) + usr_fetch_inferior_registers (regs_info, regcache, regno, 1); + } +} + +void +linux_process_target::store_registers (regcache *regcache, int regno) +{ + int use_regsets; + int all = 0; + const regs_info *regs_info = get_regs_info (); + + if (regno == -1) + { + all = regsets_store_inferior_registers (regs_info->regsets_info, + regcache); + if (regs_info->usrregs != NULL) + usr_store_inferior_registers (regs_info, regcache, regno, all); + } + else + { + use_regsets = linux_register_in_regsets (regs_info, regno); + if (use_regsets) + all = regsets_store_inferior_registers (regs_info->regsets_info, + regcache); + if ((!use_regsets || all) && regs_info->usrregs != NULL) + usr_store_inferior_registers (regs_info, regcache, regno, 1); + } +} + +bool +linux_process_target::low_fetch_register (regcache *regcache, int regno) +{ + return false; +} + +/* A wrapper for the read_memory target op. */ + +static int +linux_read_memory (CORE_ADDR memaddr, unsigned char *myaddr, int len) +{ + return the_target->read_memory (memaddr, myaddr, len); +} + +/* Copy LEN bytes from inferior's memory starting at MEMADDR + to debugger memory starting at MYADDR. */ + +int +linux_process_target::read_memory (CORE_ADDR memaddr, + unsigned char *myaddr, int len) +{ + int pid = lwpid_of (current_thread); + PTRACE_XFER_TYPE *buffer; + CORE_ADDR addr; + int count; + char filename[64]; + int i; + int ret; + int fd; + + /* Try using /proc. Don't bother for one word. */ + if (len >= 3 * sizeof (long)) + { + int bytes; + + /* We could keep this file open and cache it - possibly one per + thread. That requires some juggling, but is even faster. */ + sprintf (filename, "/proc/%d/mem", pid); + fd = open (filename, O_RDONLY | O_LARGEFILE); + if (fd == -1) + goto no_proc; + + /* If pread64 is available, use it. It's faster if the kernel + supports it (only one syscall), and it's 64-bit safe even on + 32-bit platforms (for instance, SPARC debugging a SPARC64 + application). */ +#ifdef HAVE_PREAD64 + bytes = pread64 (fd, myaddr, len, memaddr); +#else + bytes = -1; + if (lseek (fd, memaddr, SEEK_SET) != -1) + bytes = read (fd, myaddr, len); +#endif + + close (fd); + if (bytes == len) + return 0; + + /* Some data was read, we'll try to get the rest with ptrace. */ + if (bytes > 0) + { + memaddr += bytes; + myaddr += bytes; + len -= bytes; + } + } + + no_proc: + /* Round starting address down to longword boundary. */ + addr = memaddr & -(CORE_ADDR) sizeof (PTRACE_XFER_TYPE); + /* Round ending address up; get number of longwords that makes. */ + count = ((((memaddr + len) - addr) + sizeof (PTRACE_XFER_TYPE) - 1) + / sizeof (PTRACE_XFER_TYPE)); + /* Allocate buffer of that many longwords. */ + buffer = XALLOCAVEC (PTRACE_XFER_TYPE, count); + + /* Read all the longwords */ + errno = 0; + for (i = 0; i < count; i++, addr += sizeof (PTRACE_XFER_TYPE)) + { + /* Coerce the 3rd arg to a uintptr_t first to avoid potential gcc warning + about coercing an 8 byte integer to a 4 byte pointer. */ + buffer[i] = ptrace (PTRACE_PEEKTEXT, pid, + (PTRACE_TYPE_ARG3) (uintptr_t) addr, + (PTRACE_TYPE_ARG4) 0); + if (errno) + break; + } + ret = errno; + + /* Copy appropriate bytes out of the buffer. */ + if (i > 0) + { + i *= sizeof (PTRACE_XFER_TYPE); + i -= memaddr & (sizeof (PTRACE_XFER_TYPE) - 1); + memcpy (myaddr, + (char *) buffer + (memaddr & (sizeof (PTRACE_XFER_TYPE) - 1)), + i < len ? i : len); + } + + return ret; +} + +/* Copy LEN bytes of data from debugger memory at MYADDR to inferior's + memory at MEMADDR. On failure (cannot write to the inferior) + returns the value of errno. Always succeeds if LEN is zero. */ + +int +linux_process_target::write_memory (CORE_ADDR memaddr, + const unsigned char *myaddr, int len) +{ + int i; + /* Round starting address down to longword boundary. */ + CORE_ADDR addr = memaddr & -(CORE_ADDR) sizeof (PTRACE_XFER_TYPE); + /* Round ending address up; get number of longwords that makes. */ + int count + = (((memaddr + len) - addr) + sizeof (PTRACE_XFER_TYPE) - 1) + / sizeof (PTRACE_XFER_TYPE); + + /* Allocate buffer of that many longwords. */ + PTRACE_XFER_TYPE *buffer = XALLOCAVEC (PTRACE_XFER_TYPE, count); + + int pid = lwpid_of (current_thread); + + if (len == 0) + { + /* Zero length write always succeeds. */ + return 0; + } + + if (debug_threads) + { + /* Dump up to four bytes. */ + char str[4 * 2 + 1]; + char *p = str; + int dump = len < 4 ? len : 4; + + for (i = 0; i < dump; i++) + { + sprintf (p, "%02x", myaddr[i]); + p += 2; + } + *p = '\0'; + + debug_printf ("Writing %s to 0x%08lx in process %d\n", + str, (long) memaddr, pid); + } + + /* Fill start and end extra bytes of buffer with existing memory data. */ + + errno = 0; + /* Coerce the 3rd arg to a uintptr_t first to avoid potential gcc warning + about coercing an 8 byte integer to a 4 byte pointer. */ + buffer[0] = ptrace (PTRACE_PEEKTEXT, pid, + (PTRACE_TYPE_ARG3) (uintptr_t) addr, + (PTRACE_TYPE_ARG4) 0); + if (errno) + return errno; + + if (count > 1) + { + errno = 0; + buffer[count - 1] + = ptrace (PTRACE_PEEKTEXT, pid, + /* Coerce to a uintptr_t first to avoid potential gcc warning + about coercing an 8 byte integer to a 4 byte pointer. */ + (PTRACE_TYPE_ARG3) (uintptr_t) (addr + (count - 1) + * sizeof (PTRACE_XFER_TYPE)), + (PTRACE_TYPE_ARG4) 0); + if (errno) + return errno; + } + + /* Copy data to be written over corresponding part of buffer. */ + + memcpy ((char *) buffer + (memaddr & (sizeof (PTRACE_XFER_TYPE) - 1)), + myaddr, len); + + /* Write the entire buffer. */ + + for (i = 0; i < count; i++, addr += sizeof (PTRACE_XFER_TYPE)) + { + errno = 0; + ptrace (PTRACE_POKETEXT, pid, + /* Coerce to a uintptr_t first to avoid potential gcc warning + about coercing an 8 byte integer to a 4 byte pointer. */ + (PTRACE_TYPE_ARG3) (uintptr_t) addr, + (PTRACE_TYPE_ARG4) buffer[i]); + if (errno) + return errno; + } + + return 0; +} + +void +linux_process_target::look_up_symbols () +{ +#ifdef USE_THREAD_DB + struct process_info *proc = current_process (); + + if (proc->priv->thread_db != NULL) + return; + + thread_db_init (); +#endif +} + +void +linux_process_target::request_interrupt () +{ + /* Send a SIGINT to the process group. This acts just like the user + typed a ^C on the controlling terminal. */ + ::kill (-signal_pid, SIGINT); +} + +bool +linux_process_target::supports_read_auxv () +{ + return true; +} + +/* Copy LEN bytes from inferior's auxiliary vector starting at OFFSET + to debugger memory starting at MYADDR. */ + +int +linux_process_target::read_auxv (CORE_ADDR offset, unsigned char *myaddr, + unsigned int len) +{ + char filename[PATH_MAX]; + int fd, n; + int pid = lwpid_of (current_thread); + + xsnprintf (filename, sizeof filename, "/proc/%d/auxv", pid); + + fd = open (filename, O_RDONLY); + if (fd < 0) + return -1; + + if (offset != (CORE_ADDR) 0 + && lseek (fd, (off_t) offset, SEEK_SET) != (off_t) offset) + n = -1; + else + n = read (fd, myaddr, len); + + close (fd); + + return n; +} + +int +linux_process_target::insert_point (enum raw_bkpt_type type, CORE_ADDR addr, + int size, raw_breakpoint *bp) +{ + if (type == raw_bkpt_type_sw) + return insert_memory_breakpoint (bp); + else + return low_insert_point (type, addr, size, bp); +} + +int +linux_process_target::low_insert_point (raw_bkpt_type type, CORE_ADDR addr, + int size, raw_breakpoint *bp) +{ + /* Unsupported (see target.h). */ + return 1; +} + +int +linux_process_target::remove_point (enum raw_bkpt_type type, CORE_ADDR addr, + int size, raw_breakpoint *bp) +{ + if (type == raw_bkpt_type_sw) + return remove_memory_breakpoint (bp); + else + return low_remove_point (type, addr, size, bp); +} + +int +linux_process_target::low_remove_point (raw_bkpt_type type, CORE_ADDR addr, + int size, raw_breakpoint *bp) +{ + /* Unsupported (see target.h). */ + return 1; +} + +/* Implement the stopped_by_sw_breakpoint target_ops + method. */ + +bool +linux_process_target::stopped_by_sw_breakpoint () +{ + struct lwp_info *lwp = get_thread_lwp (current_thread); + + return (lwp->stop_reason == TARGET_STOPPED_BY_SW_BREAKPOINT); +} + +/* Implement the supports_stopped_by_sw_breakpoint target_ops + method. */ + +bool +linux_process_target::supports_stopped_by_sw_breakpoint () +{ + return USE_SIGTRAP_SIGINFO; +} + +/* Implement the stopped_by_hw_breakpoint target_ops + method. */ + +bool +linux_process_target::stopped_by_hw_breakpoint () +{ + struct lwp_info *lwp = get_thread_lwp (current_thread); + + return (lwp->stop_reason == TARGET_STOPPED_BY_HW_BREAKPOINT); +} + +/* Implement the supports_stopped_by_hw_breakpoint target_ops + method. */ + +bool +linux_process_target::supports_stopped_by_hw_breakpoint () +{ + return USE_SIGTRAP_SIGINFO; +} + +/* Implement the supports_hardware_single_step target_ops method. */ + +bool +linux_process_target::supports_hardware_single_step () +{ + return true; +} + +bool +linux_process_target::stopped_by_watchpoint () +{ + struct lwp_info *lwp = get_thread_lwp (current_thread); + + return lwp->stop_reason == TARGET_STOPPED_BY_WATCHPOINT; +} + +CORE_ADDR +linux_process_target::stopped_data_address () +{ + struct lwp_info *lwp = get_thread_lwp (current_thread); + + return lwp->stopped_data_address; +} + +/* This is only used for targets that define PT_TEXT_ADDR, + PT_DATA_ADDR and PT_TEXT_END_ADDR. If those are not defined, supposedly + the target has different ways of acquiring this information, like + loadmaps. */ + +bool +linux_process_target::supports_read_offsets () +{ +#ifdef SUPPORTS_READ_OFFSETS + return true; +#else + return false; +#endif +} + +/* Under uClinux, programs are loaded at non-zero offsets, which we need + to tell gdb about. */ + +int +linux_process_target::read_offsets (CORE_ADDR *text_p, CORE_ADDR *data_p) +{ +#ifdef SUPPORTS_READ_OFFSETS + unsigned long text, text_end, data; + int pid = lwpid_of (current_thread); + + errno = 0; + + text = ptrace (PTRACE_PEEKUSER, pid, (PTRACE_TYPE_ARG3) PT_TEXT_ADDR, + (PTRACE_TYPE_ARG4) 0); + text_end = ptrace (PTRACE_PEEKUSER, pid, (PTRACE_TYPE_ARG3) PT_TEXT_END_ADDR, + (PTRACE_TYPE_ARG4) 0); + data = ptrace (PTRACE_PEEKUSER, pid, (PTRACE_TYPE_ARG3) PT_DATA_ADDR, + (PTRACE_TYPE_ARG4) 0); + + if (errno == 0) + { + /* Both text and data offsets produced at compile-time (and so + used by gdb) are relative to the beginning of the program, + with the data segment immediately following the text segment. + However, the actual runtime layout in memory may put the data + somewhere else, so when we send gdb a data base-address, we + use the real data base address and subtract the compile-time + data base-address from it (which is just the length of the + text segment). BSS immediately follows data in both + cases. */ + *text_p = text; + *data_p = data - (text_end - text); + + return 1; + } + return 0; +#else + gdb_assert_not_reached ("target op read_offsets not supported"); +#endif +} + +bool +linux_process_target::supports_get_tls_address () +{ +#ifdef USE_THREAD_DB + return true; +#else + return false; +#endif +} + +int +linux_process_target::get_tls_address (thread_info *thread, + CORE_ADDR offset, + CORE_ADDR load_module, + CORE_ADDR *address) +{ +#ifdef USE_THREAD_DB + return thread_db_get_tls_address (thread, offset, load_module, address); +#else + return -1; +#endif +} + +bool +linux_process_target::supports_qxfer_osdata () +{ + return true; +} + +int +linux_process_target::qxfer_osdata (const char *annex, + unsigned char *readbuf, + unsigned const char *writebuf, + CORE_ADDR offset, int len) +{ + return linux_common_xfer_osdata (annex, readbuf, offset, len); +} + +void +linux_process_target::siginfo_fixup (siginfo_t *siginfo, + gdb_byte *inf_siginfo, int direction) +{ + bool done = low_siginfo_fixup (siginfo, inf_siginfo, direction); + + /* If there was no callback, or the callback didn't do anything, + then just do a straight memcpy. */ + if (!done) + { + if (direction == 1) + memcpy (siginfo, inf_siginfo, sizeof (siginfo_t)); + else + memcpy (inf_siginfo, siginfo, sizeof (siginfo_t)); + } +} + +bool +linux_process_target::low_siginfo_fixup (siginfo_t *native, gdb_byte *inf, + int direction) +{ + return false; +} + +bool +linux_process_target::supports_qxfer_siginfo () +{ + return true; +} + +int +linux_process_target::qxfer_siginfo (const char *annex, + unsigned char *readbuf, + unsigned const char *writebuf, + CORE_ADDR offset, int len) +{ + int pid; + siginfo_t siginfo; + gdb_byte inf_siginfo[sizeof (siginfo_t)]; + + if (current_thread == NULL) + return -1; + + pid = lwpid_of (current_thread); + + if (debug_threads) + debug_printf ("%s siginfo for lwp %d.\n", + readbuf != NULL ? "Reading" : "Writing", + pid); + + if (offset >= sizeof (siginfo)) + return -1; + + if (ptrace (PTRACE_GETSIGINFO, pid, (PTRACE_TYPE_ARG3) 0, &siginfo) != 0) + return -1; + + /* When GDBSERVER is built as a 64-bit application, ptrace writes into + SIGINFO an object with 64-bit layout. Since debugging a 32-bit + inferior with a 64-bit GDBSERVER should look the same as debugging it + with a 32-bit GDBSERVER, we need to convert it. */ + siginfo_fixup (&siginfo, inf_siginfo, 0); + + if (offset + len > sizeof (siginfo)) + len = sizeof (siginfo) - offset; + + if (readbuf != NULL) + memcpy (readbuf, inf_siginfo + offset, len); + else + { + memcpy (inf_siginfo + offset, writebuf, len); + + /* Convert back to ptrace layout before flushing it out. */ + siginfo_fixup (&siginfo, inf_siginfo, 1); + + if (ptrace (PTRACE_SETSIGINFO, pid, (PTRACE_TYPE_ARG3) 0, &siginfo) != 0) + return -1; + } + + return len; +} + +/* SIGCHLD handler that serves two purposes: In non-stop/async mode, + so we notice when children change state; as the handler for the + sigsuspend in my_waitpid. */ + +static void +sigchld_handler (int signo) +{ + int old_errno = errno; + + if (debug_threads) + { + do + { + /* Use the async signal safe debug function. */ + if (debug_write ("sigchld_handler\n", + sizeof ("sigchld_handler\n") - 1) < 0) + break; /* just ignore */ + } while (0); + } + + if (target_is_async_p ()) + async_file_mark (); /* trigger a linux_wait */ + + errno = old_errno; +} + +bool +linux_process_target::supports_non_stop () +{ + return true; +} + +bool +linux_process_target::async (bool enable) +{ + bool previous = target_is_async_p (); + + if (debug_threads) + debug_printf ("linux_async (%d), previous=%d\n", + enable, previous); + + if (previous != enable) + { + sigset_t mask; + sigemptyset (&mask); + sigaddset (&mask, SIGCHLD); + + gdb_sigmask (SIG_BLOCK, &mask, NULL); + + if (enable) + { + if (pipe (linux_event_pipe) == -1) + { + linux_event_pipe[0] = -1; + linux_event_pipe[1] = -1; + gdb_sigmask (SIG_UNBLOCK, &mask, NULL); + + warning ("creating event pipe failed."); + return previous; + } + + fcntl (linux_event_pipe[0], F_SETFL, O_NONBLOCK); + fcntl (linux_event_pipe[1], F_SETFL, O_NONBLOCK); + + /* Register the event loop handler. */ + add_file_handler (linux_event_pipe[0], + handle_target_event, NULL); + + /* Always trigger a linux_wait. */ + async_file_mark (); + } + else + { + delete_file_handler (linux_event_pipe[0]); + + close (linux_event_pipe[0]); + close (linux_event_pipe[1]); + linux_event_pipe[0] = -1; + linux_event_pipe[1] = -1; + } + + gdb_sigmask (SIG_UNBLOCK, &mask, NULL); + } + + return previous; +} + +int +linux_process_target::start_non_stop (bool nonstop) +{ + /* Register or unregister from event-loop accordingly. */ + target_async (nonstop); + + if (target_is_async_p () != (nonstop != false)) + return -1; + + return 0; +} + +bool +linux_process_target::supports_multi_process () +{ + return true; +} + +/* Check if fork events are supported. */ + +bool +linux_process_target::supports_fork_events () +{ + return linux_supports_tracefork (); +} + +/* Check if vfork events are supported. */ + +bool +linux_process_target::supports_vfork_events () +{ + return linux_supports_tracefork (); +} + +/* Check if exec events are supported. */ + +bool +linux_process_target::supports_exec_events () +{ + return linux_supports_traceexec (); +} + +/* Target hook for 'handle_new_gdb_connection'. Causes a reset of the + ptrace flags for all inferiors. This is in case the new GDB connection + doesn't support the same set of events that the previous one did. */ + +void +linux_process_target::handle_new_gdb_connection () +{ + /* Request that all the lwps reset their ptrace options. */ + for_each_thread ([] (thread_info *thread) + { + struct lwp_info *lwp = get_thread_lwp (thread); + + if (!lwp->stopped) + { + /* Stop the lwp so we can modify its ptrace options. */ + lwp->must_set_ptrace_flags = 1; + linux_stop_lwp (lwp); + } + else + { + /* Already stopped; go ahead and set the ptrace options. */ + struct process_info *proc = find_process_pid (pid_of (thread)); + int options = linux_low_ptrace_options (proc->attached); + + linux_enable_event_reporting (lwpid_of (thread), options); + lwp->must_set_ptrace_flags = 0; + } + }); +} + +int +linux_process_target::handle_monitor_command (char *mon) +{ +#ifdef USE_THREAD_DB + return thread_db_handle_monitor_command (mon); +#else + return 0; +#endif +} + +int +linux_process_target::core_of_thread (ptid_t ptid) +{ + return linux_common_core_of_thread (ptid); +} + +bool +linux_process_target::supports_disable_randomization () +{ +#ifdef HAVE_PERSONALITY + return true; +#else + return false; +#endif +} + +bool +linux_process_target::supports_agent () +{ + return true; +} + +bool +linux_process_target::supports_range_stepping () +{ + if (supports_software_single_step ()) + return true; + + return low_supports_range_stepping (); +} + +bool +linux_process_target::low_supports_range_stepping () +{ + return false; +} + +bool +linux_process_target::supports_pid_to_exec_file () +{ + return true; +} + +char * +linux_process_target::pid_to_exec_file (int pid) +{ + return linux_proc_pid_to_exec_file (pid); +} + +bool +linux_process_target::supports_multifs () +{ + return true; +} + +int +linux_process_target::multifs_open (int pid, const char *filename, + int flags, mode_t mode) +{ + return linux_mntns_open_cloexec (pid, filename, flags, mode); +} + +int +linux_process_target::multifs_unlink (int pid, const char *filename) +{ + return linux_mntns_unlink (pid, filename); +} + +ssize_t +linux_process_target::multifs_readlink (int pid, const char *filename, + char *buf, size_t bufsiz) +{ + return linux_mntns_readlink (pid, filename, buf, bufsiz); +} + +#if defined PT_GETDSBT || defined PTRACE_GETFDPIC +struct target_loadseg +{ + /* Core address to which the segment is mapped. */ + Elf32_Addr addr; + /* VMA recorded in the program header. */ + Elf32_Addr p_vaddr; + /* Size of this segment in memory. */ + Elf32_Word p_memsz; +}; + +# if defined PT_GETDSBT +struct target_loadmap +{ + /* Protocol version number, must be zero. */ + Elf32_Word version; + /* Pointer to the DSBT table, its size, and the DSBT index. */ + unsigned *dsbt_table; + unsigned dsbt_size, dsbt_index; + /* Number of segments in this map. */ + Elf32_Word nsegs; + /* The actual memory map. */ + struct target_loadseg segs[/*nsegs*/]; +}; +# define LINUX_LOADMAP PT_GETDSBT +# define LINUX_LOADMAP_EXEC PTRACE_GETDSBT_EXEC +# define LINUX_LOADMAP_INTERP PTRACE_GETDSBT_INTERP +# else +struct target_loadmap +{ + /* Protocol version number, must be zero. */ + Elf32_Half version; + /* Number of segments in this map. */ + Elf32_Half nsegs; + /* The actual memory map. */ + struct target_loadseg segs[/*nsegs*/]; +}; +# define LINUX_LOADMAP PTRACE_GETFDPIC +# define LINUX_LOADMAP_EXEC PTRACE_GETFDPIC_EXEC +# define LINUX_LOADMAP_INTERP PTRACE_GETFDPIC_INTERP +# endif + +bool +linux_process_target::supports_read_loadmap () +{ + return true; +} + +int +linux_process_target::read_loadmap (const char *annex, CORE_ADDR offset, + unsigned char *myaddr, unsigned int len) +{ + int pid = lwpid_of (current_thread); + int addr = -1; + struct target_loadmap *data = NULL; + unsigned int actual_length, copy_length; + + if (strcmp (annex, "exec") == 0) + addr = (int) LINUX_LOADMAP_EXEC; + else if (strcmp (annex, "interp") == 0) + addr = (int) LINUX_LOADMAP_INTERP; + else + return -1; + + if (ptrace (LINUX_LOADMAP, pid, addr, &data) != 0) + return -1; + + if (data == NULL) + return -1; + + actual_length = sizeof (struct target_loadmap) + + sizeof (struct target_loadseg) * data->nsegs; + + if (offset < 0 || offset > actual_length) + return -1; + + copy_length = actual_length - offset < len ? actual_length - offset : len; + memcpy (myaddr, (char *) data + offset, copy_length); + return copy_length; +} +#endif /* defined PT_GETDSBT || defined PTRACE_GETFDPIC */ + +bool +linux_process_target::supports_catch_syscall () +{ + return (low_supports_catch_syscall () + && linux_supports_tracesysgood ()); +} + +bool +linux_process_target::low_supports_catch_syscall () +{ + return false; +} + +CORE_ADDR +linux_process_target::read_pc (regcache *regcache) +{ + if (!low_supports_breakpoints ()) + return 0; + + return low_get_pc (regcache); +} + +void +linux_process_target::write_pc (regcache *regcache, CORE_ADDR pc) +{ + gdb_assert (low_supports_breakpoints ()); + + low_set_pc (regcache, pc); +} + +bool +linux_process_target::supports_thread_stopped () +{ + return true; +} + +bool +linux_process_target::thread_stopped (thread_info *thread) +{ + return get_thread_lwp (thread)->stopped; +} + +/* This exposes stop-all-threads functionality to other modules. */ + +void +linux_process_target::pause_all (bool freeze) +{ + stop_all_lwps (freeze, NULL); +} + +/* This exposes unstop-all-threads functionality to other gdbserver + modules. */ + +void +linux_process_target::unpause_all (bool unfreeze) +{ + unstop_all_lwps (unfreeze, NULL); +} + +int +linux_process_target::prepare_to_access_memory () +{ + /* Neither ptrace nor /proc/PID/mem allow accessing memory through a + running LWP. */ + if (non_stop) + target_pause_all (true); + return 0; +} + +void +linux_process_target::done_accessing_memory () +{ + /* Neither ptrace nor /proc/PID/mem allow accessing memory through a + running LWP. */ + if (non_stop) + target_unpause_all (true); +} + +/* Extract &phdr and num_phdr in the inferior. Return 0 on success. */ + +static int +get_phdr_phnum_from_proc_auxv (const int pid, const int is_elf64, + CORE_ADDR *phdr_memaddr, int *num_phdr) +{ + char filename[PATH_MAX]; + int fd; + const int auxv_size = is_elf64 + ? sizeof (Elf64_auxv_t) : sizeof (Elf32_auxv_t); + char buf[sizeof (Elf64_auxv_t)]; /* The larger of the two. */ + + xsnprintf (filename, sizeof filename, "/proc/%d/auxv", pid); + + fd = open (filename, O_RDONLY); + if (fd < 0) + return 1; + + *phdr_memaddr = 0; + *num_phdr = 0; + while (read (fd, buf, auxv_size) == auxv_size + && (*phdr_memaddr == 0 || *num_phdr == 0)) + { + if (is_elf64) + { + Elf64_auxv_t *const aux = (Elf64_auxv_t *) buf; + + switch (aux->a_type) + { + case AT_PHDR: + *phdr_memaddr = aux->a_un.a_val; + break; + case AT_PHNUM: + *num_phdr = aux->a_un.a_val; + break; + } + } + else + { + Elf32_auxv_t *const aux = (Elf32_auxv_t *) buf; + + switch (aux->a_type) + { + case AT_PHDR: + *phdr_memaddr = aux->a_un.a_val; + break; + case AT_PHNUM: + *num_phdr = aux->a_un.a_val; + break; + } + } + } + + close (fd); + + if (*phdr_memaddr == 0 || *num_phdr == 0) + { + warning ("Unexpected missing AT_PHDR and/or AT_PHNUM: " + "phdr_memaddr = %ld, phdr_num = %d", + (long) *phdr_memaddr, *num_phdr); + return 2; + } + + return 0; +} + +/* Return &_DYNAMIC (via PT_DYNAMIC) in the inferior, or 0 if not present. */ + +static CORE_ADDR +get_dynamic (const int pid, const int is_elf64) +{ + CORE_ADDR phdr_memaddr, relocation; + int num_phdr, i; + unsigned char *phdr_buf; + const int phdr_size = is_elf64 ? sizeof (Elf64_Phdr) : sizeof (Elf32_Phdr); + + if (get_phdr_phnum_from_proc_auxv (pid, is_elf64, &phdr_memaddr, &num_phdr)) + return 0; + + gdb_assert (num_phdr < 100); /* Basic sanity check. */ + phdr_buf = (unsigned char *) alloca (num_phdr * phdr_size); + + if (linux_read_memory (phdr_memaddr, phdr_buf, num_phdr * phdr_size)) + return 0; + + /* Compute relocation: it is expected to be 0 for "regular" executables, + non-zero for PIE ones. */ + relocation = -1; + for (i = 0; relocation == -1 && i < num_phdr; i++) + if (is_elf64) + { + Elf64_Phdr *const p = (Elf64_Phdr *) (phdr_buf + i * phdr_size); + + if (p->p_type == PT_PHDR) + relocation = phdr_memaddr - p->p_vaddr; + } + else + { + Elf32_Phdr *const p = (Elf32_Phdr *) (phdr_buf + i * phdr_size); + + if (p->p_type == PT_PHDR) + relocation = phdr_memaddr - p->p_vaddr; + } + + if (relocation == -1) + { + /* PT_PHDR is optional, but necessary for PIE in general. Fortunately + any real world executables, including PIE executables, have always + PT_PHDR present. PT_PHDR is not present in some shared libraries or + in fpc (Free Pascal 2.4) binaries but neither of those have a need for + or present DT_DEBUG anyway (fpc binaries are statically linked). + + Therefore if there exists DT_DEBUG there is always also PT_PHDR. + + GDB could find RELOCATION also from AT_ENTRY - e_entry. */ + + return 0; + } + + for (i = 0; i < num_phdr; i++) + { + if (is_elf64) + { + Elf64_Phdr *const p = (Elf64_Phdr *) (phdr_buf + i * phdr_size); + + if (p->p_type == PT_DYNAMIC) + return p->p_vaddr + relocation; + } + else + { + Elf32_Phdr *const p = (Elf32_Phdr *) (phdr_buf + i * phdr_size); + + if (p->p_type == PT_DYNAMIC) + return p->p_vaddr + relocation; + } + } + + return 0; +} + +/* Return &_r_debug in the inferior, or -1 if not present. Return value + can be 0 if the inferior does not yet have the library list initialized. + We look for DT_MIPS_RLD_MAP first. MIPS executables use this instead of + DT_DEBUG, although they sometimes contain an unused DT_DEBUG entry too. */ + +static CORE_ADDR +get_r_debug (const int pid, const int is_elf64) +{ + CORE_ADDR dynamic_memaddr; + const int dyn_size = is_elf64 ? sizeof (Elf64_Dyn) : sizeof (Elf32_Dyn); + unsigned char buf[sizeof (Elf64_Dyn)]; /* The larger of the two. */ + CORE_ADDR map = -1; + + dynamic_memaddr = get_dynamic (pid, is_elf64); + if (dynamic_memaddr == 0) + return map; + + while (linux_read_memory (dynamic_memaddr, buf, dyn_size) == 0) + { + if (is_elf64) + { + Elf64_Dyn *const dyn = (Elf64_Dyn *) buf; +#if defined DT_MIPS_RLD_MAP || defined DT_MIPS_RLD_MAP_REL + union + { + Elf64_Xword map; + unsigned char buf[sizeof (Elf64_Xword)]; + } + rld_map; +#endif +#ifdef DT_MIPS_RLD_MAP + if (dyn->d_tag == DT_MIPS_RLD_MAP) + { + if (linux_read_memory (dyn->d_un.d_val, + rld_map.buf, sizeof (rld_map.buf)) == 0) + return rld_map.map; + else + break; + } +#endif /* DT_MIPS_RLD_MAP */ +#ifdef DT_MIPS_RLD_MAP_REL + if (dyn->d_tag == DT_MIPS_RLD_MAP_REL) + { + if (linux_read_memory (dyn->d_un.d_val + dynamic_memaddr, + rld_map.buf, sizeof (rld_map.buf)) == 0) + return rld_map.map; + else + break; + } +#endif /* DT_MIPS_RLD_MAP_REL */ + + if (dyn->d_tag == DT_DEBUG && map == -1) + map = dyn->d_un.d_val; + + if (dyn->d_tag == DT_NULL) + break; + } + else + { + Elf32_Dyn *const dyn = (Elf32_Dyn *) buf; +#if defined DT_MIPS_RLD_MAP || defined DT_MIPS_RLD_MAP_REL + union + { + Elf32_Word map; + unsigned char buf[sizeof (Elf32_Word)]; + } + rld_map; +#endif +#ifdef DT_MIPS_RLD_MAP + if (dyn->d_tag == DT_MIPS_RLD_MAP) + { + if (linux_read_memory (dyn->d_un.d_val, + rld_map.buf, sizeof (rld_map.buf)) == 0) + return rld_map.map; + else + break; + } +#endif /* DT_MIPS_RLD_MAP */ +#ifdef DT_MIPS_RLD_MAP_REL + if (dyn->d_tag == DT_MIPS_RLD_MAP_REL) + { + if (linux_read_memory (dyn->d_un.d_val + dynamic_memaddr, + rld_map.buf, sizeof (rld_map.buf)) == 0) + return rld_map.map; + else + break; + } +#endif /* DT_MIPS_RLD_MAP_REL */ + + if (dyn->d_tag == DT_DEBUG && map == -1) + map = dyn->d_un.d_val; + + if (dyn->d_tag == DT_NULL) + break; + } + + dynamic_memaddr += dyn_size; + } + + return map; +} + +/* Read one pointer from MEMADDR in the inferior. */ + +static int +read_one_ptr (CORE_ADDR memaddr, CORE_ADDR *ptr, int ptr_size) +{ + int ret; + + /* Go through a union so this works on either big or little endian + hosts, when the inferior's pointer size is smaller than the size + of CORE_ADDR. It is assumed the inferior's endianness is the + same of the superior's. */ + union + { + CORE_ADDR core_addr; + unsigned int ui; + unsigned char uc; + } addr; + + ret = linux_read_memory (memaddr, &addr.uc, ptr_size); + if (ret == 0) + { + if (ptr_size == sizeof (CORE_ADDR)) + *ptr = addr.core_addr; + else if (ptr_size == sizeof (unsigned int)) + *ptr = addr.ui; + else + gdb_assert_not_reached ("unhandled pointer size"); + } + return ret; +} + +bool +linux_process_target::supports_qxfer_libraries_svr4 () +{ + return true; +} + +struct link_map_offsets + { + /* Offset and size of r_debug.r_version. */ + int r_version_offset; + + /* Offset and size of r_debug.r_map. */ + int r_map_offset; + + /* Offset to l_addr field in struct link_map. */ + int l_addr_offset; + + /* Offset to l_name field in struct link_map. */ + int l_name_offset; + + /* Offset to l_ld field in struct link_map. */ + int l_ld_offset; + + /* Offset to l_next field in struct link_map. */ + int l_next_offset; + + /* Offset to l_prev field in struct link_map. */ + int l_prev_offset; + }; + +/* Construct qXfer:libraries-svr4:read reply. */ + +int +linux_process_target::qxfer_libraries_svr4 (const char *annex, + unsigned char *readbuf, + unsigned const char *writebuf, + CORE_ADDR offset, int len) +{ + struct process_info_private *const priv = current_process ()->priv; + char filename[PATH_MAX]; + int pid, is_elf64; + + static const struct link_map_offsets lmo_32bit_offsets = + { + 0, /* r_version offset. */ + 4, /* r_debug.r_map offset. */ + 0, /* l_addr offset in link_map. */ + 4, /* l_name offset in link_map. */ + 8, /* l_ld offset in link_map. */ + 12, /* l_next offset in link_map. */ + 16 /* l_prev offset in link_map. */ + }; + + static const struct link_map_offsets lmo_64bit_offsets = + { + 0, /* r_version offset. */ + 8, /* r_debug.r_map offset. */ + 0, /* l_addr offset in link_map. */ + 8, /* l_name offset in link_map. */ + 16, /* l_ld offset in link_map. */ + 24, /* l_next offset in link_map. */ + 32 /* l_prev offset in link_map. */ + }; + const struct link_map_offsets *lmo; + unsigned int machine; + int ptr_size; + CORE_ADDR lm_addr = 0, lm_prev = 0; + CORE_ADDR l_name, l_addr, l_ld, l_next, l_prev; + int header_done = 0; + + if (writebuf != NULL) + return -2; + if (readbuf == NULL) + return -1; + + pid = lwpid_of (current_thread); + xsnprintf (filename, sizeof filename, "/proc/%d/exe", pid); + is_elf64 = elf_64_file_p (filename, &machine); + lmo = is_elf64 ? &lmo_64bit_offsets : &lmo_32bit_offsets; + ptr_size = is_elf64 ? 8 : 4; + + while (annex[0] != '\0') + { + const char *sep; + CORE_ADDR *addrp; + int name_len; + + sep = strchr (annex, '='); + if (sep == NULL) + break; + + name_len = sep - annex; + if (name_len == 5 && startswith (annex, "start")) + addrp = &lm_addr; + else if (name_len == 4 && startswith (annex, "prev")) + addrp = &lm_prev; + else + { + annex = strchr (sep, ';'); + if (annex == NULL) + break; + annex++; + continue; + } + + annex = decode_address_to_semicolon (addrp, sep + 1); + } + + if (lm_addr == 0) + { + int r_version = 0; + + if (priv->r_debug == 0) + priv->r_debug = get_r_debug (pid, is_elf64); + + /* We failed to find DT_DEBUG. Such situation will not change + for this inferior - do not retry it. Report it to GDB as + E01, see for the reasons at the GDB solib-svr4.c side. */ + if (priv->r_debug == (CORE_ADDR) -1) + return -1; + + if (priv->r_debug != 0) + { + if (linux_read_memory (priv->r_debug + lmo->r_version_offset, + (unsigned char *) &r_version, + sizeof (r_version)) != 0 + || r_version != 1) + { + warning ("unexpected r_debug version %d", r_version); + } + else if (read_one_ptr (priv->r_debug + lmo->r_map_offset, + &lm_addr, ptr_size) != 0) + { + warning ("unable to read r_map from 0x%lx", + (long) priv->r_debug + lmo->r_map_offset); + } + } + } + + std::string document = "<library-list-svr4 version=\"1.0\""; + + while (lm_addr + && read_one_ptr (lm_addr + lmo->l_name_offset, + &l_name, ptr_size) == 0 + && read_one_ptr (lm_addr + lmo->l_addr_offset, + &l_addr, ptr_size) == 0 + && read_one_ptr (lm_addr + lmo->l_ld_offset, + &l_ld, ptr_size) == 0 + && read_one_ptr (lm_addr + lmo->l_prev_offset, + &l_prev, ptr_size) == 0 + && read_one_ptr (lm_addr + lmo->l_next_offset, + &l_next, ptr_size) == 0) + { + unsigned char libname[PATH_MAX]; + + if (lm_prev != l_prev) + { + warning ("Corrupted shared library list: 0x%lx != 0x%lx", + (long) lm_prev, (long) l_prev); + break; + } + + /* Ignore the first entry even if it has valid name as the first entry + corresponds to the main executable. The first entry should not be + skipped if the dynamic loader was loaded late by a static executable + (see solib-svr4.c parameter ignore_first). But in such case the main + executable does not have PT_DYNAMIC present and this function already + exited above due to failed get_r_debug. */ + if (lm_prev == 0) + string_appendf (document, " main-lm=\"0x%lx\"", (unsigned long) lm_addr); + else + { + /* Not checking for error because reading may stop before + we've got PATH_MAX worth of characters. */ + libname[0] = '\0'; + linux_read_memory (l_name, libname, sizeof (libname) - 1); + libname[sizeof (libname) - 1] = '\0'; + if (libname[0] != '\0') + { + if (!header_done) + { + /* Terminate `<library-list-svr4'. */ + document += '>'; + header_done = 1; + } + + string_appendf (document, "<library name=\""); + xml_escape_text_append (&document, (char *) libname); + string_appendf (document, "\" lm=\"0x%lx\" " + "l_addr=\"0x%lx\" l_ld=\"0x%lx\"/>", + (unsigned long) lm_addr, (unsigned long) l_addr, + (unsigned long) l_ld); + } + } + + lm_prev = lm_addr; + lm_addr = l_next; + } + + if (!header_done) + { + /* Empty list; terminate `<library-list-svr4'. */ + document += "/>"; + } + else + document += "</library-list-svr4>"; + + int document_len = document.length (); + if (offset < document_len) + document_len -= offset; + else + document_len = 0; + if (len > document_len) + len = document_len; + + memcpy (readbuf, document.data () + offset, len); + + return len; +} + +#ifdef HAVE_LINUX_BTRACE + +btrace_target_info * +linux_process_target::enable_btrace (ptid_t ptid, + const btrace_config *conf) +{ + return linux_enable_btrace (ptid, conf); +} + +/* See to_disable_btrace target method. */ + +int +linux_process_target::disable_btrace (btrace_target_info *tinfo) +{ + enum btrace_error err; + + err = linux_disable_btrace (tinfo); + return (err == BTRACE_ERR_NONE ? 0 : -1); +} + +/* Encode an Intel Processor Trace configuration. */ + +static void +linux_low_encode_pt_config (struct buffer *buffer, + const struct btrace_data_pt_config *config) +{ + buffer_grow_str (buffer, "<pt-config>\n"); + + switch (config->cpu.vendor) + { + case CV_INTEL: + buffer_xml_printf (buffer, "<cpu vendor=\"GenuineIntel\" family=\"%u\" " + "model=\"%u\" stepping=\"%u\"/>\n", + config->cpu.family, config->cpu.model, + config->cpu.stepping); + break; + + default: + break; + } + + buffer_grow_str (buffer, "</pt-config>\n"); +} + +/* Encode a raw buffer. */ + +static void +linux_low_encode_raw (struct buffer *buffer, const gdb_byte *data, + unsigned int size) +{ + if (size == 0) + return; + + /* We use hex encoding - see gdbsupport/rsp-low.h. */ + buffer_grow_str (buffer, "<raw>\n"); + + while (size-- > 0) + { + char elem[2]; + + elem[0] = tohex ((*data >> 4) & 0xf); + elem[1] = tohex (*data++ & 0xf); + + buffer_grow (buffer, elem, 2); + } + + buffer_grow_str (buffer, "</raw>\n"); +} + +/* See to_read_btrace target method. */ + +int +linux_process_target::read_btrace (btrace_target_info *tinfo, + buffer *buffer, + enum btrace_read_type type) +{ + struct btrace_data btrace; + enum btrace_error err; + + err = linux_read_btrace (&btrace, tinfo, type); + if (err != BTRACE_ERR_NONE) + { + if (err == BTRACE_ERR_OVERFLOW) + buffer_grow_str0 (buffer, "E.Overflow."); + else + buffer_grow_str0 (buffer, "E.Generic Error."); + + return -1; + } + + switch (btrace.format) + { + case BTRACE_FORMAT_NONE: + buffer_grow_str0 (buffer, "E.No Trace."); + return -1; + + case BTRACE_FORMAT_BTS: + buffer_grow_str (buffer, "<!DOCTYPE btrace SYSTEM \"btrace.dtd\">\n"); + buffer_grow_str (buffer, "<btrace version=\"1.0\">\n"); + + for (const btrace_block &block : *btrace.variant.bts.blocks) + buffer_xml_printf (buffer, "<block begin=\"0x%s\" end=\"0x%s\"/>\n", + paddress (block.begin), paddress (block.end)); + + buffer_grow_str0 (buffer, "</btrace>\n"); + break; + + case BTRACE_FORMAT_PT: + buffer_grow_str (buffer, "<!DOCTYPE btrace SYSTEM \"btrace.dtd\">\n"); + buffer_grow_str (buffer, "<btrace version=\"1.0\">\n"); + buffer_grow_str (buffer, "<pt>\n"); + + linux_low_encode_pt_config (buffer, &btrace.variant.pt.config); + + linux_low_encode_raw (buffer, btrace.variant.pt.data, + btrace.variant.pt.size); + + buffer_grow_str (buffer, "</pt>\n"); + buffer_grow_str0 (buffer, "</btrace>\n"); + break; + + default: + buffer_grow_str0 (buffer, "E.Unsupported Trace Format."); + return -1; + } + + return 0; +} + +/* See to_btrace_conf target method. */ + +int +linux_process_target::read_btrace_conf (const btrace_target_info *tinfo, + buffer *buffer) +{ + const struct btrace_config *conf; + + buffer_grow_str (buffer, "<!DOCTYPE btrace-conf SYSTEM \"btrace-conf.dtd\">\n"); + buffer_grow_str (buffer, "<btrace-conf version=\"1.0\">\n"); + + conf = linux_btrace_conf (tinfo); + if (conf != NULL) + { + switch (conf->format) + { + case BTRACE_FORMAT_NONE: + break; + + case BTRACE_FORMAT_BTS: + buffer_xml_printf (buffer, "<bts"); + buffer_xml_printf (buffer, " size=\"0x%x\"", conf->bts.size); + buffer_xml_printf (buffer, " />\n"); + break; + + case BTRACE_FORMAT_PT: + buffer_xml_printf (buffer, "<pt"); + buffer_xml_printf (buffer, " size=\"0x%x\"", conf->pt.size); + buffer_xml_printf (buffer, "/>\n"); + break; + } + } + + buffer_grow_str0 (buffer, "</btrace-conf>\n"); + return 0; +} +#endif /* HAVE_LINUX_BTRACE */ + +/* See nat/linux-nat.h. */ + +ptid_t +current_lwp_ptid (void) +{ + return ptid_of (current_thread); +} + +const char * +linux_process_target::thread_name (ptid_t thread) +{ + return linux_proc_tid_get_name (thread); +} + +#if USE_THREAD_DB +bool +linux_process_target::thread_handle (ptid_t ptid, gdb_byte **handle, + int *handle_len) +{ + return thread_db_thread_handle (ptid, handle, handle_len); +} +#endif + +/* Default implementation of linux_target_ops method "set_pc" for + 32-bit pc register which is literally named "pc". */ + +void +linux_set_pc_32bit (struct regcache *regcache, CORE_ADDR pc) +{ + uint32_t newpc = pc; + + supply_register_by_name (regcache, "pc", &newpc); +} + +/* Default implementation of linux_target_ops method "get_pc" for + 32-bit pc register which is literally named "pc". */ + +CORE_ADDR +linux_get_pc_32bit (struct regcache *regcache) +{ + uint32_t pc; + + collect_register_by_name (regcache, "pc", &pc); + if (debug_threads) + debug_printf ("stop pc is 0x%" PRIx32 "\n", pc); + return pc; +} + +/* Default implementation of linux_target_ops method "set_pc" for + 64-bit pc register which is literally named "pc". */ + +void +linux_set_pc_64bit (struct regcache *regcache, CORE_ADDR pc) +{ + uint64_t newpc = pc; + + supply_register_by_name (regcache, "pc", &newpc); +} + +/* Default implementation of linux_target_ops method "get_pc" for + 64-bit pc register which is literally named "pc". */ + +CORE_ADDR +linux_get_pc_64bit (struct regcache *regcache) +{ + uint64_t pc; + + collect_register_by_name (regcache, "pc", &pc); + if (debug_threads) + debug_printf ("stop pc is 0x%" PRIx64 "\n", pc); + return pc; +} + +/* See linux-low.h. */ + +int +linux_get_auxv (int wordsize, CORE_ADDR match, CORE_ADDR *valp) +{ + gdb_byte *data = (gdb_byte *) alloca (2 * wordsize); + int offset = 0; + + gdb_assert (wordsize == 4 || wordsize == 8); + + while (the_target->read_auxv (offset, data, 2 * wordsize) == 2 * wordsize) + { + if (wordsize == 4) + { + uint32_t *data_p = (uint32_t *) data; + if (data_p[0] == match) + { + *valp = data_p[1]; + return 1; + } + } + else + { + uint64_t *data_p = (uint64_t *) data; + if (data_p[0] == match) + { + *valp = data_p[1]; + return 1; + } + } + + offset += 2 * wordsize; + } + + return 0; +} + +/* See linux-low.h. */ + +CORE_ADDR +linux_get_hwcap (int wordsize) +{ + CORE_ADDR hwcap = 0; + linux_get_auxv (wordsize, AT_HWCAP, &hwcap); + return hwcap; +} + +/* See linux-low.h. */ + +CORE_ADDR +linux_get_hwcap2 (int wordsize) +{ + CORE_ADDR hwcap2 = 0; + linux_get_auxv (wordsize, AT_HWCAP2, &hwcap2); + return hwcap2; +} + +#ifdef HAVE_LINUX_REGSETS +void +initialize_regsets_info (struct regsets_info *info) +{ + for (info->num_regsets = 0; + info->regsets[info->num_regsets].size >= 0; + info->num_regsets++) + ; +} +#endif + +void +initialize_low (void) +{ + struct sigaction sigchld_action; + + memset (&sigchld_action, 0, sizeof (sigchld_action)); + set_target_ops (the_linux_target); + + linux_ptrace_init_warnings (); + linux_proc_init_warnings (); + + sigchld_action.sa_handler = sigchld_handler; + sigemptyset (&sigchld_action.sa_mask); + sigchld_action.sa_flags = SA_RESTART; + sigaction (SIGCHLD, &sigchld_action, NULL); + + initialize_low_arch (); + + linux_check_ptrace_features (); +} diff -Nru gdb-9.1/gdbserver/linux-low.h gdb-10.2/gdbserver/linux-low.h --- gdb-9.1/gdbserver/linux-low.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/linux-low.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,897 @@ +/* Internal interfaces for the GNU/Linux specific target code for gdbserver. + Copyright (C) 2002-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef GDBSERVER_LINUX_LOW_H +#define GDBSERVER_LINUX_LOW_H + +#include "nat/linux-nat.h" +#include "nat/gdb_thread_db.h" +#include <signal.h> + +#include "gdbthread.h" +#include "gdb_proc_service.h" + +/* Included for ptrace type definitions. */ +#include "nat/linux-ptrace.h" +#include "target/waitstatus.h" /* For enum target_stop_reason. */ +#include "tracepoint.h" + +#include <list> + +#define PTRACE_XFER_TYPE long + +#ifdef HAVE_LINUX_REGSETS +typedef void (*regset_fill_func) (struct regcache *, void *); +typedef void (*regset_store_func) (struct regcache *, const void *); +enum regset_type { + GENERAL_REGS, + FP_REGS, + EXTENDED_REGS, + OPTIONAL_REGS, /* Do not error if the regset cannot be accessed. */ +}; + +/* The arch's regsets array initializer must be terminated with a NULL + regset. */ +#define NULL_REGSET \ + { 0, 0, 0, -1, (enum regset_type) -1, NULL, NULL } + +struct regset_info +{ + int get_request, set_request; + /* If NT_TYPE isn't 0, it will be passed to ptrace as the 3rd + argument and the 4th argument should be "const struct iovec *". */ + int nt_type; + int size; + enum regset_type type; + regset_fill_func fill_function; + regset_store_func store_function; +}; + +/* Aggregation of all the supported regsets of a given + architecture/mode. */ + +struct regsets_info +{ + /* The regsets array. */ + struct regset_info *regsets; + + /* The number of regsets in the REGSETS array. */ + int num_regsets; + + /* If we get EIO on a regset, do not try it again. Note the set of + supported regsets may depend on processor mode on biarch + machines. This is a (lazily allocated) array holding one boolean + byte (0/1) per regset, with each element corresponding to the + regset in the REGSETS array above at the same offset. */ + char *disabled_regsets; +}; + +#endif + +/* Mapping between the general-purpose registers in `struct user' + format and GDB's register array layout. */ + +struct usrregs_info +{ + /* The number of registers accessible. */ + int num_regs; + + /* The registers map. */ + int *regmap; +}; + +/* All info needed to access an architecture/mode's registers. */ + +struct regs_info +{ + /* Regset support bitmap: 1 for registers that are transferred as a part + of a regset, 0 for ones that need to be handled individually. This + can be NULL if all registers are transferred with regsets or regsets + are not supported. */ + unsigned char *regset_bitmap; + + /* Info used when accessing registers with PTRACE_PEEKUSER / + PTRACE_POKEUSER. This can be NULL if all registers are + transferred with regsets .*/ + struct usrregs_info *usrregs; + +#ifdef HAVE_LINUX_REGSETS + /* Info used when accessing registers with regsets. */ + struct regsets_info *regsets_info; +#endif +}; + +struct process_info_private +{ + /* Arch-specific additions. */ + struct arch_process_info *arch_private; + + /* libthread_db-specific additions. Not NULL if this process has loaded + thread_db, and it is active. */ + struct thread_db *thread_db; + + /* &_r_debug. 0 if not yet determined. -1 if no PT_DYNAMIC in Phdrs. */ + CORE_ADDR r_debug; +}; + +struct lwp_info; + +/* Target ops definitions for a Linux target. */ + +class linux_process_target : public process_stratum_target +{ +public: + + int create_inferior (const char *program, + const std::vector<char *> &program_args) override; + + void post_create_inferior () override; + + int attach (unsigned long pid) override; + + int kill (process_info *proc) override; + + int detach (process_info *proc) override; + + void mourn (process_info *proc) override; + + void join (int pid) override; + + bool thread_alive (ptid_t pid) override; + + void resume (thread_resume *resume_info, size_t n) override; + + ptid_t wait (ptid_t ptid, target_waitstatus *status, + int options) override; + + void fetch_registers (regcache *regcache, int regno) override; + + void store_registers (regcache *regcache, int regno) override; + + int prepare_to_access_memory () override; + + void done_accessing_memory () override; + + int read_memory (CORE_ADDR memaddr, unsigned char *myaddr, + int len) override; + + int write_memory (CORE_ADDR memaddr, const unsigned char *myaddr, + int len) override; + + void look_up_symbols () override; + + void request_interrupt () override; + + bool supports_read_auxv () override; + + int read_auxv (CORE_ADDR offset, unsigned char *myaddr, + unsigned int len) override; + + int insert_point (enum raw_bkpt_type type, CORE_ADDR addr, + int size, raw_breakpoint *bp) override; + + int remove_point (enum raw_bkpt_type type, CORE_ADDR addr, + int size, raw_breakpoint *bp) override; + + bool stopped_by_sw_breakpoint () override; + + bool supports_stopped_by_sw_breakpoint () override; + + bool stopped_by_hw_breakpoint () override; + + bool supports_stopped_by_hw_breakpoint () override; + + bool supports_hardware_single_step () override; + + bool stopped_by_watchpoint () override; + + CORE_ADDR stopped_data_address () override; + + bool supports_read_offsets () override; + + int read_offsets (CORE_ADDR *text, CORE_ADDR *data) override; + + bool supports_get_tls_address () override; + + int get_tls_address (thread_info *thread, CORE_ADDR offset, + CORE_ADDR load_module, CORE_ADDR *address) override; + + bool supports_qxfer_osdata () override; + + int qxfer_osdata (const char *annex, unsigned char *readbuf, + unsigned const char *writebuf, + CORE_ADDR offset, int len) override; + + bool supports_qxfer_siginfo () override; + + int qxfer_siginfo (const char *annex, unsigned char *readbuf, + unsigned const char *writebuf, + CORE_ADDR offset, int len) override; + + bool supports_non_stop () override; + + bool async (bool enable) override; + + int start_non_stop (bool enable) override; + + bool supports_multi_process () override; + + bool supports_fork_events () override; + + bool supports_vfork_events () override; + + bool supports_exec_events () override; + + void handle_new_gdb_connection () override; + + int handle_monitor_command (char *mon) override; + + int core_of_thread (ptid_t ptid) override; + +#if defined PT_GETDSBT || defined PTRACE_GETFDPIC + bool supports_read_loadmap () override; + + int read_loadmap (const char *annex, CORE_ADDR offset, + unsigned char *myaddr, unsigned int len) override; +#endif + + CORE_ADDR read_pc (regcache *regcache) override; + + void write_pc (regcache *regcache, CORE_ADDR pc) override; + + bool supports_thread_stopped () override; + + bool thread_stopped (thread_info *thread) override; + + void pause_all (bool freeze) override; + + void unpause_all (bool unfreeze) override; + + void stabilize_threads () override; + + bool supports_disable_randomization () override; + + bool supports_qxfer_libraries_svr4 () override; + + int qxfer_libraries_svr4 (const char *annex, + unsigned char *readbuf, + unsigned const char *writebuf, + CORE_ADDR offset, int len) override; + + bool supports_agent () override; + +#ifdef HAVE_LINUX_BTRACE + btrace_target_info *enable_btrace (ptid_t ptid, + const btrace_config *conf) override; + + int disable_btrace (btrace_target_info *tinfo) override; + + int read_btrace (btrace_target_info *tinfo, buffer *buf, + enum btrace_read_type type) override; + + int read_btrace_conf (const btrace_target_info *tinfo, + buffer *buf) override; +#endif + + bool supports_range_stepping () override; + + bool supports_pid_to_exec_file () override; + + char *pid_to_exec_file (int pid) override; + + bool supports_multifs () override; + + int multifs_open (int pid, const char *filename, int flags, + mode_t mode) override; + + int multifs_unlink (int pid, const char *filename) override; + + ssize_t multifs_readlink (int pid, const char *filename, char *buf, + size_t bufsiz) override; + + const char *thread_name (ptid_t thread) override; + +#if USE_THREAD_DB + bool thread_handle (ptid_t ptid, gdb_byte **handle, + int *handle_len) override; +#endif + + bool supports_catch_syscall () override; + + /* Return the information to access registers. This has public + visibility because proc-service uses it. */ + virtual const regs_info *get_regs_info () = 0; + +private: + + /* Handle a GNU/Linux extended wait response. If we see a clone, + fork, or vfork event, we need to add the new LWP to our list + (and return 0 so as not to report the trap to higher layers). + If we see an exec event, we will modify ORIG_EVENT_LWP to point + to a new LWP representing the new program. */ + int handle_extended_wait (lwp_info **orig_event_lwp, int wstat); + + /* Do low-level handling of the event, and check if we should go on + and pass it to caller code. Return the affected lwp if we are, or + NULL otherwise. */ + lwp_info *filter_event (int lwpid, int wstat); + + /* Wait for an event from child(ren) WAIT_PTID, and return any that + match FILTER_PTID (leaving others pending). The PTIDs can be: + minus_one_ptid, to specify any child; a pid PTID, specifying all + lwps of a thread group; or a PTID representing a single lwp. Store + the stop status through the status pointer WSTAT. OPTIONS is + passed to the waitpid call. Return 0 if no event was found and + OPTIONS contains WNOHANG. Return -1 if no unwaited-for children + was found. Return the PID of the stopped child otherwise. */ + int wait_for_event_filtered (ptid_t wait_ptid, ptid_t filter_ptid, + int *wstatp, int options); + + /* Wait for an event from child(ren) PTID. PTIDs can be: + minus_one_ptid, to specify any child; a pid PTID, specifying all + lwps of a thread group; or a PTID representing a single lwp. Store + the stop status through the status pointer WSTAT. OPTIONS is + passed to the waitpid call. Return 0 if no event was found and + OPTIONS contains WNOHANG. Return -1 if no unwaited-for children + was found. Return the PID of the stopped child otherwise. */ + int wait_for_event (ptid_t ptid, int *wstatp, int options); + + /* Wait for all children to stop for the SIGSTOPs we just queued. */ + void wait_for_sigstop (); + + /* Wait for process, returns status. */ + ptid_t wait_1 (ptid_t ptid, target_waitstatus *ourstatus, + int target_options); + + /* Stop all lwps that aren't stopped yet, except EXCEPT, if not NULL. + If SUSPEND, then also increase the suspend count of every LWP, + except EXCEPT. */ + void stop_all_lwps (int suspend, lwp_info *except); + + /* Stopped LWPs that the client wanted to be running, that don't have + pending statuses, are set to run again, except for EXCEPT, if not + NULL. This undoes a stop_all_lwps call. */ + void unstop_all_lwps (int unsuspend, lwp_info *except); + + /* Start a step-over operation on LWP. When LWP stopped at a + breakpoint, to make progress, we need to remove the breakpoint out + of the way. If we let other threads run while we do that, they may + pass by the breakpoint location and miss hitting it. To avoid + that, a step-over momentarily stops all threads while LWP is + single-stepped by either hardware or software while the breakpoint + is temporarily uninserted from the inferior. When the single-step + finishes, we reinsert the breakpoint, and let all threads that are + supposed to be running, run again. */ + void start_step_over (lwp_info *lwp); + + /* If there's a step over in progress, wait until all threads stop + (that is, until the stepping thread finishes its step), and + unsuspend all lwps. The stepping thread ends with its status + pending, which is processed later when we get back to processing + events. */ + void complete_ongoing_step_over (); + + /* Finish a step-over. Reinsert the breakpoint we had uninserted in + start_step_over, if still there, and delete any single-step + breakpoints we've set, on non hardware single-step targets. + Return true if step over finished. */ + bool finish_step_over (lwp_info *lwp); + + /* When we finish a step-over, set threads running again. If there's + another thread that may need a step-over, now's the time to start + it. Eventually, we'll move all threads past their breakpoints. */ + void proceed_all_lwps (); + + /* The reason we resume in the caller, is because we want to be able + to pass lwp->status_pending as WSTAT, and we need to clear + status_pending_p before resuming, otherwise, resume_one_lwp + refuses to resume. */ + bool maybe_move_out_of_jump_pad (lwp_info *lwp, int *wstat); + + /* Move THREAD out of the jump pad. */ + void move_out_of_jump_pad (thread_info *thread); + + /* Call low_arch_setup on THREAD. */ + void arch_setup_thread (thread_info *thread); + +#ifdef HAVE_LINUX_USRREGS + /* Fetch one register. */ + void fetch_register (const usrregs_info *usrregs, regcache *regcache, + int regno); + + /* Store one register. */ + void store_register (const usrregs_info *usrregs, regcache *regcache, + int regno); +#endif + + /* Fetch all registers, or just one, from the child process. + If REGNO is -1, do this for all registers, skipping any that are + assumed to have been retrieved by regsets_fetch_inferior_registers, + unless ALL is non-zero. + Otherwise, REGNO specifies which register (so we can save time). */ + void usr_fetch_inferior_registers (const regs_info *regs_info, + regcache *regcache, int regno, int all); + + /* Store our register values back into the inferior. + If REGNO is -1, do this for all registers, skipping any that are + assumed to have been saved by regsets_store_inferior_registers, + unless ALL is non-zero. + Otherwise, REGNO specifies which register (so we can save time). */ + void usr_store_inferior_registers (const regs_info *regs_info, + regcache *regcache, int regno, int all); + + /* Return the PC as read from the regcache of LWP, without any + adjustment. */ + CORE_ADDR get_pc (lwp_info *lwp); + + /* Called when the LWP stopped for a signal/trap. If it stopped for a + trap check what caused it (breakpoint, watchpoint, trace, etc.), + and save the result in the LWP's stop_reason field. If it stopped + for a breakpoint, decrement the PC if necessary on the lwp's + architecture. Returns true if we now have the LWP's stop PC. */ + bool save_stop_reason (lwp_info *lwp); + + /* Resume execution of LWP. If STEP is nonzero, single-step it. If + SIGNAL is nonzero, give it that signal. */ + void resume_one_lwp_throw (lwp_info *lwp, int step, int signal, + siginfo_t *info); + + /* Like resume_one_lwp_throw, but no error is thrown if the LWP + disappears while we try to resume it. */ + void resume_one_lwp (lwp_info *lwp, int step, int signal, siginfo_t *info); + + /* This function is called once per thread. We check the thread's + last resume request, which will tell us whether to resume, step, or + leave the thread stopped. Any signal the client requested to be + delivered has already been enqueued at this point. + + If any thread that GDB wants running is stopped at an internal + breakpoint that needs stepping over, we start a step-over operation + on that particular thread, and leave all others stopped. */ + void proceed_one_lwp (thread_info *thread, lwp_info *except); + + /* This function is called once per thread. We check the thread's + resume request, which will tell us whether to resume, step, or + leave the thread stopped; and what signal, if any, it should be + sent. + + For threads which we aren't explicitly told otherwise, we preserve + the stepping flag; this is used for stepping over gdbserver-placed + breakpoints. + + If pending_flags was set in any thread, we queue any needed + signals, since we won't actually resume. We already have a pending + event to report, so we don't need to preserve any step requests; + they should be re-issued if necessary. */ + void resume_one_thread (thread_info *thread, bool leave_all_stopped); + + /* Return true if this lwp has an interesting status pending. */ + bool status_pending_p_callback (thread_info *thread, ptid_t ptid); + + /* Resume LWPs that are currently stopped without any pending status + to report, but are resumed from the core's perspective. */ + void resume_stopped_resumed_lwps (thread_info *thread); + + /* Unsuspend THREAD, except EXCEPT, and proceed. */ + void unsuspend_and_proceed_one_lwp (thread_info *thread, lwp_info *except); + + /* Return true if this lwp still has an interesting status pending. + If not (e.g., it had stopped for a breakpoint that is gone), return + false. */ + bool thread_still_has_status_pending (thread_info *thread); + + /* Return true if this lwp is to-be-resumed and has an interesting + status pending. */ + bool resume_status_pending (thread_info *thread); + + /* Return true if this lwp that GDB wants running is stopped at an + internal breakpoint that we need to step over. It assumes that + any required STOP_PC adjustment has already been propagated to + the inferior's regcache. */ + bool thread_needs_step_over (thread_info *thread); + + /* Single step via hardware or software single step. + Return 1 if hardware single stepping, 0 if software single stepping + or can't single step. */ + int single_step (lwp_info* lwp); + + /* Return true if THREAD is doing hardware single step. */ + bool maybe_hw_step (thread_info *thread); + + /* Install breakpoints for software single stepping. */ + void install_software_single_step_breakpoints (lwp_info *lwp); + + /* Fetch the possibly triggered data watchpoint info and store it in + CHILD. + + On some archs, like x86, that use debug registers to set + watchpoints, it's possible that the way to know which watched + address trapped, is to check the register that is used to select + which address to watch. Problem is, between setting the watchpoint + and reading back which data address trapped, the user may change + the set of watchpoints, and, as a consequence, GDB changes the + debug registers in the inferior. To avoid reading back a stale + stopped-data-address when that happens, we cache in LP the fact + that a watchpoint trapped, and the corresponding data address, as + soon as we see CHILD stop with a SIGTRAP. If GDB changes the debug + registers meanwhile, we have the cached data we can rely on. */ + bool check_stopped_by_watchpoint (lwp_info *child); + + /* Convert a native/host siginfo object, into/from the siginfo in the + layout of the inferiors' architecture. */ + void siginfo_fixup (siginfo_t *siginfo, gdb_byte *inf_siginfo, + int direction); + + /* Add a process to the common process list, and set its private + data. */ + process_info *add_linux_process (int pid, int attached); + + /* Add a new thread. */ + lwp_info *add_lwp (ptid_t ptid); + + /* Delete a thread. */ + void delete_lwp (lwp_info *lwp); + +public: /* Make this public because it's used from outside. */ + /* Attach to an inferior process. Returns 0 on success, ERRNO on + error. */ + int attach_lwp (ptid_t ptid); + +private: /* Back to private. */ + /* Detach from LWP. */ + void detach_one_lwp (lwp_info *lwp); + + /* Detect zombie thread group leaders, and "exit" them. We can't + reap their exits until all other threads in the group have + exited. */ + void check_zombie_leaders (); + + /* Convenience function that is called when the kernel reports an exit + event. This decides whether to report the event to GDB as a + process exit event, a thread exit event, or to suppress the + event. */ + ptid_t filter_exit_event (lwp_info *event_child, + target_waitstatus *ourstatus); + + /* Returns true if THREAD is stopped in a jump pad, and we can't + move it out, because we need to report the stop event to GDB. For + example, if the user puts a breakpoint in the jump pad, it's + because she wants to debug it. */ + bool stuck_in_jump_pad (thread_info *thread); + + /* Convenience wrapper. Returns information about LWP's fast tracepoint + collection status. */ + fast_tpoint_collect_result linux_fast_tracepoint_collecting + (lwp_info *lwp, fast_tpoint_collect_status *status); + + /* This function should only be called if LWP got a SYSCALL_SIGTRAP. + Fill *SYSNO with the syscall nr trapped. */ + void get_syscall_trapinfo (lwp_info *lwp, int *sysno); + + /* Returns true if GDB is interested in the event_child syscall. + Only to be called when stopped reason is SYSCALL_SIGTRAP. */ + bool gdb_catch_this_syscall (lwp_info *event_child); + +protected: + /* The architecture-specific "low" methods are listed below. */ + + /* Architecture-specific setup for the current thread. */ + virtual void low_arch_setup () = 0; + + /* Return false if we can fetch/store the register, true if we cannot + fetch/store the register. */ + virtual bool low_cannot_fetch_register (int regno) = 0; + + virtual bool low_cannot_store_register (int regno) = 0; + + /* Hook to fetch a register in some non-standard way. Used for + example by backends that have read-only registers with hardcoded + values (e.g., IA64's gr0/fr0/fr1). Returns true if register + REGNO was supplied, false if not, and we should fallback to the + standard ptrace methods. */ + virtual bool low_fetch_register (regcache *regcache, int regno); + + /* Return true if breakpoints are supported. Such targets must + implement the GET_PC and SET_PC methods. */ + virtual bool low_supports_breakpoints (); + + virtual CORE_ADDR low_get_pc (regcache *regcache); + + virtual void low_set_pc (regcache *regcache, CORE_ADDR newpc); + + /* Find the next possible PCs after the current instruction executes. + Targets that override this method should also override + 'supports_software_single_step' to return true. */ + virtual std::vector<CORE_ADDR> low_get_next_pcs (regcache *regcache); + + /* Return true if there is a breakpoint at PC. */ + virtual bool low_breakpoint_at (CORE_ADDR pc) = 0; + + /* Breakpoint and watchpoint related functions. See target.h for + comments. */ + virtual int low_insert_point (raw_bkpt_type type, CORE_ADDR addr, + int size, raw_breakpoint *bp); + + virtual int low_remove_point (raw_bkpt_type type, CORE_ADDR addr, + int size, raw_breakpoint *bp); + + virtual bool low_stopped_by_watchpoint (); + + virtual CORE_ADDR low_stopped_data_address (); + + /* Hooks to reformat register data for PEEKUSR/POKEUSR (in particular + for registers smaller than an xfer unit). */ + virtual void low_collect_ptrace_register (regcache *regcache, int regno, + char *buf); + + virtual void low_supply_ptrace_register (regcache *regcache, int regno, + const char *buf); + + /* Hook to convert from target format to ptrace format and back. + Returns true if any conversion was done; false otherwise. + If DIRECTION is 1, then copy from INF to NATIVE. + If DIRECTION is 0, copy from NATIVE to INF. */ + virtual bool low_siginfo_fixup (siginfo_t *native, gdb_byte *inf, + int direction); + + /* Hook to call when a new process is created or attached to. + If extra per-process architecture-specific data is needed, + allocate it here. */ + virtual arch_process_info *low_new_process (); + + /* Hook to call when a process is being deleted. If extra per-process + architecture-specific data is needed, delete it here. */ + virtual void low_delete_process (arch_process_info *info); + + /* Hook to call when a new thread is detected. + If extra per-thread architecture-specific data is needed, + allocate it here. */ + virtual void low_new_thread (lwp_info *); + + /* Hook to call when a thread is being deleted. If extra per-thread + architecture-specific data is needed, delete it here. */ + virtual void low_delete_thread (arch_lwp_info *); + + /* Hook to call, if any, when a new fork is attached. */ + virtual void low_new_fork (process_info *parent, process_info *child); + + /* Hook to call prior to resuming a thread. */ + virtual void low_prepare_to_resume (lwp_info *lwp); + + /* Fill ADDRP with the thread area address of LWPID. Returns 0 on + success, -1 on failure. */ + virtual int low_get_thread_area (int lwpid, CORE_ADDR *addrp); + + /* Returns true if the low target supports range stepping. */ + virtual bool low_supports_range_stepping (); + + /* Return true if the target supports catch syscall. Such targets + override the low_get_syscall_trapinfo method below. */ + virtual bool low_supports_catch_syscall (); + + /* Fill *SYSNO with the syscall nr trapped. Only to be called when + inferior is stopped due to SYSCALL_SIGTRAP. */ + virtual void low_get_syscall_trapinfo (regcache *regcache, int *sysno); + + /* How many bytes the PC should be decremented after a break. */ + virtual int low_decr_pc_after_break (); +}; + +extern linux_process_target *the_linux_target; + +#define get_thread_lwp(thr) ((struct lwp_info *) (thread_target_data (thr))) +#define get_lwp_thread(lwp) ((lwp)->thread) + +/* Information about a signal that is to be delivered to a thread. */ + +struct pending_signal +{ + pending_signal (int signal) + : signal {signal} + {}; + + int signal; + siginfo_t info; +}; + +/* This struct is recorded in the target_data field of struct thread_info. + + On linux ``all_threads'' is keyed by the LWP ID, which we use as the + GDB protocol representation of the thread ID. Threads also have + a "process ID" (poorly named) which is (presently) the same as the + LWP ID. + + There is also ``all_processes'' is keyed by the "overall process ID", + which GNU/Linux calls tgid, "thread group ID". */ + +struct lwp_info +{ + /* Backlink to the parent object. */ + struct thread_info *thread; + + /* If this flag is set, the next SIGSTOP will be ignored (the + process will be immediately resumed). This means that either we + sent the SIGSTOP to it ourselves and got some other pending event + (so the SIGSTOP is still pending), or that we stopped the + inferior implicitly via PTRACE_ATTACH and have not waited for it + yet. */ + int stop_expected; + + /* When this is true, we shall not try to resume this thread, even + if last_resume_kind isn't resume_stop. */ + int suspended; + + /* If this flag is set, the lwp is known to be stopped right now (stop + event already received in a wait()). */ + int stopped; + + /* Signal whether we are in a SYSCALL_ENTRY or + in a SYSCALL_RETURN event. + Values: + - TARGET_WAITKIND_SYSCALL_ENTRY + - TARGET_WAITKIND_SYSCALL_RETURN */ + enum target_waitkind syscall_state; + + /* When stopped is set, the last wait status recorded for this lwp. */ + int last_status; + + /* If WAITSTATUS->KIND != TARGET_WAITKIND_IGNORE, the waitstatus for + this LWP's last event, to pass to GDB without any further + processing. This is used to store extended ptrace event + information or exit status until it can be reported to GDB. */ + struct target_waitstatus waitstatus; + + /* A pointer to the fork child/parent relative. Valid only while + the parent fork event is not reported to higher layers. Used to + avoid wildcard vCont actions resuming a fork child before GDB is + notified about the parent's fork event. */ + struct lwp_info *fork_relative; + + /* When stopped is set, this is where the lwp last stopped, with + decr_pc_after_break already accounted for. If the LWP is + running, this is the address at which the lwp was resumed. */ + CORE_ADDR stop_pc; + + /* If this flag is set, STATUS_PENDING is a waitstatus that has not yet + been reported. */ + int status_pending_p; + int status_pending; + + /* The reason the LWP last stopped, if we need to track it + (breakpoint, watchpoint, etc.) */ + enum target_stop_reason stop_reason; + + /* On architectures where it is possible to know the data address of + a triggered watchpoint, STOPPED_DATA_ADDRESS is non-zero, and + contains such data address. Only valid if STOPPED_BY_WATCHPOINT + is true. */ + CORE_ADDR stopped_data_address; + + /* If this is non-zero, it is a breakpoint to be reinserted at our next + stop (SIGTRAP stops only). */ + CORE_ADDR bp_reinsert; + + /* If this flag is set, the last continue operation at the ptrace + level on this process was a single-step. */ + int stepping; + + /* Range to single step within. This is a copy of the step range + passed along the last resume request. See 'struct + thread_resume'. */ + CORE_ADDR step_range_start; /* Inclusive */ + CORE_ADDR step_range_end; /* Exclusive */ + + /* If this flag is set, we need to set the event request flags the + next time we see this LWP stop. */ + int must_set_ptrace_flags; + + /* A chain of signals that need to be delivered to this process. */ + std::list<pending_signal> pending_signals; + + /* A link used when resuming. It is initialized from the resume request, + and then processed and cleared in linux_resume_one_lwp. */ + struct thread_resume *resume; + + /* Information bout this lwp's fast tracepoint collection status (is it + currently stopped in the jump pad, and if so, before or at/after the + relocated instruction). Normally, we won't care about this, but we will + if a signal arrives to this lwp while it is collecting. */ + fast_tpoint_collect_result collecting_fast_tracepoint; + + /* A chain of signals that need to be reported to GDB. These were + deferred because the thread was doing a fast tracepoint collect + when they arrived. */ + std::list<pending_signal> pending_signals_to_report; + + /* When collecting_fast_tracepoint is first found to be 1, we insert + a exit-jump-pad-quickly breakpoint. This is it. */ + struct breakpoint *exit_jump_pad_bkpt; + +#ifdef USE_THREAD_DB + int thread_known; + /* The thread handle, used for e.g. TLS access. Only valid if + THREAD_KNOWN is set. */ + td_thrhandle_t th; + + /* The pthread_t handle. */ + thread_t thread_handle; +#endif + + /* Arch-specific additions. */ + struct arch_lwp_info *arch_private; +}; + +int linux_pid_exe_is_elf_64_file (int pid, unsigned int *machine); + +/* Attach to PTID. Returns 0 on success, non-zero otherwise (an + errno). */ +int linux_attach_lwp (ptid_t ptid); + +struct lwp_info *find_lwp_pid (ptid_t ptid); +/* For linux_stop_lwp see nat/linux-nat.h. */ + +#ifdef HAVE_LINUX_REGSETS +void initialize_regsets_info (struct regsets_info *regsets_info); +#endif + +void initialize_low_arch (void); + +void linux_set_pc_32bit (struct regcache *regcache, CORE_ADDR pc); +CORE_ADDR linux_get_pc_32bit (struct regcache *regcache); + +void linux_set_pc_64bit (struct regcache *regcache, CORE_ADDR pc); +CORE_ADDR linux_get_pc_64bit (struct regcache *regcache); + +/* From thread-db.c */ +int thread_db_init (void); +void thread_db_detach (struct process_info *); +void thread_db_mourn (struct process_info *); +int thread_db_handle_monitor_command (char *); +int thread_db_get_tls_address (struct thread_info *thread, CORE_ADDR offset, + CORE_ADDR load_module, CORE_ADDR *address); +int thread_db_look_up_one_symbol (const char *name, CORE_ADDR *addrp); + +/* Called from linux-low.c when a clone event is detected. Upon entry, + both the clone and the parent should be stopped. This function does + whatever is required have the clone under thread_db's control. */ + +void thread_db_notice_clone (struct thread_info *parent_thr, ptid_t child_ptid); + +bool thread_db_thread_handle (ptid_t ptid, gdb_byte **handle, int *handle_len); + +extern int have_ptrace_getregset; + +/* Search for the value with type MATCH in the auxv vector with + entries of length WORDSIZE bytes. If found, store the value in + *VALP and return 1. If not found or if there is an error, return + 0. */ + +int linux_get_auxv (int wordsize, CORE_ADDR match, + CORE_ADDR *valp); + +/* Fetch the AT_HWCAP entry from the auxv vector, where entries are length + WORDSIZE. If no entry was found, return zero. */ + +CORE_ADDR linux_get_hwcap (int wordsize); + +/* Fetch the AT_HWCAP2 entry from the auxv vector, where entries are length + WORDSIZE. If no entry was found, return zero. */ + +CORE_ADDR linux_get_hwcap2 (int wordsize); + +#endif /* GDBSERVER_LINUX_LOW_H */ diff -Nru gdb-9.1/gdbserver/linux-m68k-low.cc gdb-10.2/gdbserver/linux-m68k-low.cc --- gdb-9.1/gdbserver/linux-m68k-low.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/linux-m68k-low.cc 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,270 @@ +/* GNU/Linux/m68k specific low level interface, for the remote server for GDB. + Copyright (C) 1995-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "server.h" +#include "linux-low.h" + +/* Linux target op definitions for the m68k architecture. */ + +class m68k_target : public linux_process_target +{ +public: + + const regs_info *get_regs_info () override; + + const gdb_byte *sw_breakpoint_from_kind (int kind, int *size) override; + +protected: + + void low_arch_setup () override; + + bool low_cannot_fetch_register (int regno) override; + + bool low_cannot_store_register (int regno) override; + + bool low_supports_breakpoints () override; + + CORE_ADDR low_get_pc (regcache *regcache) override; + + void low_set_pc (regcache *regcache, CORE_ADDR newpc) override; + + int low_decr_pc_after_break () override; + + bool low_breakpoint_at (CORE_ADDR pc) override; +}; + +/* The singleton target ops object. */ + +static m68k_target the_m68k_target; + +bool +m68k_target::low_supports_breakpoints () +{ + return true; +} + +CORE_ADDR +m68k_target::low_get_pc (regcache *regcache) +{ + return linux_get_pc_32bit (regcache); +} + +void +m68k_target::low_set_pc (regcache *regcache, CORE_ADDR pc) +{ + linux_set_pc_32bit (regcache, pc); +} + +int +m68k_target::low_decr_pc_after_break () +{ + return 2; +} + +/* Defined in auto-generated file reg-m68k.c. */ +void init_registers_m68k (void); +extern const struct target_desc *tdesc_m68k; + +#ifdef HAVE_SYS_REG_H +#include <sys/reg.h> +#endif + +#define m68k_num_regs 29 +#define m68k_num_gregs 18 + +/* This table must line up with REGISTER_NAMES in tm-m68k.h */ +static int m68k_regmap[] = +{ +#ifdef PT_D0 + PT_D0 * 4, PT_D1 * 4, PT_D2 * 4, PT_D3 * 4, + PT_D4 * 4, PT_D5 * 4, PT_D6 * 4, PT_D7 * 4, + PT_A0 * 4, PT_A1 * 4, PT_A2 * 4, PT_A3 * 4, + PT_A4 * 4, PT_A5 * 4, PT_A6 * 4, PT_USP * 4, + PT_SR * 4, PT_PC * 4, +#else + 14 * 4, 0 * 4, 1 * 4, 2 * 4, 3 * 4, 4 * 4, 5 * 4, 6 * 4, + 7 * 4, 8 * 4, 9 * 4, 10 * 4, 11 * 4, 12 * 4, 13 * 4, 15 * 4, + 17 * 4, 18 * 4, +#endif +#ifdef PT_FP0 + PT_FP0 * 4, PT_FP1 * 4, PT_FP2 * 4, PT_FP3 * 4, + PT_FP4 * 4, PT_FP5 * 4, PT_FP6 * 4, PT_FP7 * 4, + PT_FPCR * 4, PT_FPSR * 4, PT_FPIAR * 4 +#else + 21 * 4, 24 * 4, 27 * 4, 30 * 4, 33 * 4, 36 * 4, + 39 * 4, 42 * 4, 45 * 4, 46 * 4, 47 * 4 +#endif +}; + +bool +m68k_target::low_cannot_store_register (int regno) +{ + return (regno >= m68k_num_regs); +} + +bool +m68k_target::low_cannot_fetch_register (int regno) +{ + return (regno >= m68k_num_regs); +} + +#ifdef HAVE_PTRACE_GETREGS +#include <sys/procfs.h> +#include "nat/gdb_ptrace.h" + +static void +m68k_fill_gregset (struct regcache *regcache, void *buf) +{ + int i; + + for (i = 0; i < m68k_num_gregs; i++) + collect_register (regcache, i, (char *) buf + m68k_regmap[i]); +} + +static void +m68k_store_gregset (struct regcache *regcache, const void *buf) +{ + int i; + + for (i = 0; i < m68k_num_gregs; i++) + supply_register (regcache, i, (const char *) buf + m68k_regmap[i]); +} + +static void +m68k_fill_fpregset (struct regcache *regcache, void *buf) +{ + int i; + + for (i = m68k_num_gregs; i < m68k_num_regs; i++) + collect_register (regcache, i, ((char *) buf + + (m68k_regmap[i] - m68k_regmap[m68k_num_gregs]))); +} + +static void +m68k_store_fpregset (struct regcache *regcache, const void *buf) +{ + int i; + + for (i = m68k_num_gregs; i < m68k_num_regs; i++) + supply_register (regcache, i, ((const char *) buf + + (m68k_regmap[i] - m68k_regmap[m68k_num_gregs]))); +} + +#endif /* HAVE_PTRACE_GETREGS */ + +static struct regset_info m68k_regsets[] = { +#ifdef HAVE_PTRACE_GETREGS + { PTRACE_GETREGS, PTRACE_SETREGS, 0, sizeof (elf_gregset_t), + GENERAL_REGS, + m68k_fill_gregset, m68k_store_gregset }, + { PTRACE_GETFPREGS, PTRACE_SETFPREGS, 0, sizeof (elf_fpregset_t), + FP_REGS, + m68k_fill_fpregset, m68k_store_fpregset }, +#endif /* HAVE_PTRACE_GETREGS */ + NULL_REGSET +}; + +static const gdb_byte m68k_breakpoint[] = { 0x4E, 0x4F }; +#define m68k_breakpoint_len 2 + +/* Implementation of target ops method "sw_breakpoint_from_kind". */ + +const gdb_byte * +m68k_target::sw_breakpoint_from_kind (int kind, int *size) +{ + *size = m68k_breakpoint_len; + return m68k_breakpoint; +} + +bool +m68k_target::low_breakpoint_at (CORE_ADDR pc) +{ + unsigned char c[2]; + + read_inferior_memory (pc, c, 2); + if (c[0] == 0x4E && c[1] == 0x4F) + return true; + + return false; +} + +#include <asm/ptrace.h> + +#ifdef PTRACE_GET_THREAD_AREA +/* Fetch the thread-local storage pointer for libthread_db. */ + +ps_err_e +ps_get_thread_area (struct ps_prochandle *ph, + lwpid_t lwpid, int idx, void **base) +{ + if (ptrace (PTRACE_GET_THREAD_AREA, lwpid, NULL, base) != 0) + return PS_ERR; + + /* IDX is the bias from the thread pointer to the beginning of the + thread descriptor. It has to be subtracted due to implementation + quirks in libthread_db. */ + *base = (void *) ((char *)*base - idx); + + return PS_OK; +} +#endif /* PTRACE_GET_THREAD_AREA */ + +static struct regsets_info m68k_regsets_info = + { + m68k_regsets, /* regsets */ + 0, /* num_regsets */ + NULL, /* disabled_regsets */ + }; + +static struct usrregs_info m68k_usrregs_info = + { + m68k_num_regs, + m68k_regmap, + }; + +static struct regs_info myregs_info = + { + NULL, /* regset_bitmap */ + &m68k_usrregs_info, + &m68k_regsets_info + }; + +const regs_info * +m68k_target::get_regs_info () +{ + return &myregs_info; +} + +void +m68k_target::low_arch_setup () +{ + current_process ()->tdesc = tdesc_m68k; +} + +/* The linux target ops object. */ + +linux_process_target *the_linux_target = &the_m68k_target; + +void +initialize_low_arch (void) +{ + /* Initialize the Linux target descriptions. */ + init_registers_m68k (); + + initialize_regsets_info (&m68k_regsets_info); +} diff -Nru gdb-9.1/gdbserver/linux-mips-low.cc gdb-10.2/gdbserver/linux-mips-low.cc --- gdb-9.1/gdbserver/linux-mips-low.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/linux-mips-low.cc 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,1014 @@ +/* GNU/Linux/MIPS specific low level interface, for the remote server for GDB. + Copyright (C) 1995-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "server.h" +#include "linux-low.h" + +#include "nat/gdb_ptrace.h" +#include <endian.h> + +#include "nat/mips-linux-watch.h" +#include "gdb_proc_service.h" + +/* Linux target op definitions for the MIPS architecture. */ + +class mips_target : public linux_process_target +{ +public: + + const regs_info *get_regs_info () override; + + const gdb_byte *sw_breakpoint_from_kind (int kind, int *size) override; + + bool supports_z_point_type (char z_type) override; + +protected: + + void low_arch_setup () override; + + bool low_cannot_fetch_register (int regno) override; + + bool low_cannot_store_register (int regno) override; + + bool low_fetch_register (regcache *regcache, int regno) override; + + bool low_supports_breakpoints () override; + + CORE_ADDR low_get_pc (regcache *regcache) override; + + void low_set_pc (regcache *regcache, CORE_ADDR newpc) override; + + bool low_breakpoint_at (CORE_ADDR pc) override; + + int low_insert_point (raw_bkpt_type type, CORE_ADDR addr, + int size, raw_breakpoint *bp) override; + + int low_remove_point (raw_bkpt_type type, CORE_ADDR addr, + int size, raw_breakpoint *bp) override; + + bool low_stopped_by_watchpoint () override; + + CORE_ADDR low_stopped_data_address () override; + + void low_collect_ptrace_register (regcache *regcache, int regno, + char *buf) override; + + void low_supply_ptrace_register (regcache *regcache, int regno, + const char *buf) override; + + arch_process_info *low_new_process () override; + + void low_delete_process (arch_process_info *info) override; + + void low_new_thread (lwp_info *) override; + + void low_delete_thread (arch_lwp_info *) override; + + void low_new_fork (process_info *parent, process_info *child) override; + + void low_prepare_to_resume (lwp_info *lwp) override; +}; + +/* The singleton target ops object. */ + +static mips_target the_mips_target; + +/* Defined in auto-generated file mips-linux.c. */ +void init_registers_mips_linux (void); +extern const struct target_desc *tdesc_mips_linux; + +/* Defined in auto-generated file mips-dsp-linux.c. */ +void init_registers_mips_dsp_linux (void); +extern const struct target_desc *tdesc_mips_dsp_linux; + +/* Defined in auto-generated file mips64-linux.c. */ +void init_registers_mips64_linux (void); +extern const struct target_desc *tdesc_mips64_linux; + +/* Defined in auto-generated file mips64-dsp-linux.c. */ +void init_registers_mips64_dsp_linux (void); +extern const struct target_desc *tdesc_mips64_dsp_linux; + +#ifdef __mips64 +#define tdesc_mips_linux tdesc_mips64_linux +#define tdesc_mips_dsp_linux tdesc_mips64_dsp_linux +#endif + +#ifndef PTRACE_GET_THREAD_AREA +#define PTRACE_GET_THREAD_AREA 25 +#endif + +#ifdef HAVE_SYS_REG_H +#include <sys/reg.h> +#endif + +#define mips_num_regs 73 +#define mips_dsp_num_regs 80 + +#include <asm/ptrace.h> + +#ifndef DSP_BASE +#define DSP_BASE 71 +#define DSP_CONTROL 77 +#endif + +union mips_register +{ + unsigned char buf[8]; + + /* Deliberately signed, for proper sign extension. */ + int reg32; + long long reg64; +}; + +/* Return the ptrace ``address'' of register REGNO. */ + +#define mips_base_regs \ + -1, 1, 2, 3, 4, 5, 6, 7, \ + 8, 9, 10, 11, 12, 13, 14, 15, \ + 16, 17, 18, 19, 20, 21, 22, 23, \ + 24, 25, 26, 27, 28, 29, 30, 31, \ + \ + -1, MMLO, MMHI, BADVADDR, CAUSE, PC, \ + \ + FPR_BASE, FPR_BASE + 1, FPR_BASE + 2, FPR_BASE + 3, \ + FPR_BASE + 4, FPR_BASE + 5, FPR_BASE + 6, FPR_BASE + 7, \ + FPR_BASE + 8, FPR_BASE + 9, FPR_BASE + 10, FPR_BASE + 11, \ + FPR_BASE + 12, FPR_BASE + 13, FPR_BASE + 14, FPR_BASE + 15, \ + FPR_BASE + 16, FPR_BASE + 17, FPR_BASE + 18, FPR_BASE + 19, \ + FPR_BASE + 20, FPR_BASE + 21, FPR_BASE + 22, FPR_BASE + 23, \ + FPR_BASE + 24, FPR_BASE + 25, FPR_BASE + 26, FPR_BASE + 27, \ + FPR_BASE + 28, FPR_BASE + 29, FPR_BASE + 30, FPR_BASE + 31, \ + FPC_CSR, FPC_EIR + +#define mips_dsp_regs \ + DSP_BASE, DSP_BASE + 1, DSP_BASE + 2, DSP_BASE + 3, \ + DSP_BASE + 4, DSP_BASE + 5, \ + DSP_CONTROL + +static int mips_regmap[mips_num_regs] = { + mips_base_regs, + 0 +}; + +static int mips_dsp_regmap[mips_dsp_num_regs] = { + mips_base_regs, + mips_dsp_regs, + 0 +}; + +/* DSP registers are not in any regset and can only be accessed + individually. */ + +static unsigned char mips_dsp_regset_bitmap[(mips_dsp_num_regs + 7) / 8] = { + 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x80 +}; + +static int have_dsp = -1; + +/* Try peeking at an arbitrarily chosen DSP register and pick the available + user register set accordingly. */ + +static const struct target_desc * +mips_read_description (void) +{ + if (have_dsp < 0) + { + int pid = lwpid_of (current_thread); + + errno = 0; + ptrace (PTRACE_PEEKUSER, pid, DSP_CONTROL, 0); + switch (errno) + { + case 0: + have_dsp = 1; + break; + case EIO: + have_dsp = 0; + break; + default: + perror_with_name ("ptrace"); + break; + } + } + + return have_dsp ? tdesc_mips_dsp_linux : tdesc_mips_linux; +} + +void +mips_target::low_arch_setup () +{ + current_process ()->tdesc = mips_read_description (); +} + +/* Per-process arch-specific data we want to keep. */ + +struct arch_process_info +{ + /* -1 if the kernel and/or CPU do not support watch registers. + 1 if watch_readback is valid and we can read style, num_valid + and the masks. + 0 if we need to read the watch_readback. */ + + int watch_readback_valid; + + /* Cached watch register read values. */ + + struct pt_watch_regs watch_readback; + + /* Current watchpoint requests for this process. */ + + struct mips_watchpoint *current_watches; + + /* The current set of watch register values for writing the + registers. */ + + struct pt_watch_regs watch_mirror; +}; + +/* Per-thread arch-specific data we want to keep. */ + +struct arch_lwp_info +{ + /* Non-zero if our copy differs from what's recorded in the thread. */ + int watch_registers_changed; +}; + +/* From mips-linux-nat.c. */ + +/* Pseudo registers can not be read. ptrace does not provide a way to + read (or set) PS_REGNUM, and there's no point in reading or setting + ZERO_REGNUM, it's always 0. We also can not set BADVADDR, CAUSE, + or FCRIR via ptrace(). */ + +bool +mips_target::low_cannot_fetch_register (int regno) +{ + const struct target_desc *tdesc; + + if (get_regs_info ()->usrregs->regmap[regno] == -1) + return true; + + tdesc = current_process ()->tdesc; + + /* On n32 we can't access 64-bit registers via PTRACE_PEEKUSR. */ + if (register_size (tdesc, regno) > sizeof (PTRACE_XFER_TYPE)) + return true; + + if (find_regno (tdesc, "r0") == regno) + return true; + + return false; +} + +bool +mips_target::low_cannot_store_register (int regno) +{ + const struct target_desc *tdesc; + + if (get_regs_info ()->usrregs->regmap[regno] == -1) + return true; + + tdesc = current_process ()->tdesc; + + /* On n32 we can't access 64-bit registers via PTRACE_POKEUSR. */ + if (register_size (tdesc, regno) > sizeof (PTRACE_XFER_TYPE)) + return true; + + if (find_regno (tdesc, "r0") == regno) + return true; + + if (find_regno (tdesc, "cause") == regno) + return true; + + if (find_regno (tdesc, "badvaddr") == regno) + return true; + + if (find_regno (tdesc, "fir") == regno) + return true; + + return false; +} + +bool +mips_target::low_fetch_register (regcache *regcache, int regno) +{ + const struct target_desc *tdesc = current_process ()->tdesc; + + if (find_regno (tdesc, "r0") == regno) + { + supply_register_zeroed (regcache, regno); + return true; + } + + return false; +} + +bool +mips_target::low_supports_breakpoints () +{ + return true; +} + +CORE_ADDR +mips_target::low_get_pc (regcache *regcache) +{ + union mips_register pc; + collect_register_by_name (regcache, "pc", pc.buf); + return register_size (regcache->tdesc, 0) == 4 ? pc.reg32 : pc.reg64; +} + +void +mips_target::low_set_pc (regcache *regcache, CORE_ADDR pc) +{ + union mips_register newpc; + if (register_size (regcache->tdesc, 0) == 4) + newpc.reg32 = pc; + else + newpc.reg64 = pc; + + supply_register_by_name (regcache, "pc", newpc.buf); +} + +/* Correct in either endianness. */ +static const unsigned int mips_breakpoint = 0x0005000d; +#define mips_breakpoint_len 4 + +/* Implementation of target ops method "sw_breakpoint_from_kind". */ + +const gdb_byte * +mips_target::sw_breakpoint_from_kind (int kind, int *size) +{ + *size = mips_breakpoint_len; + return (const gdb_byte *) &mips_breakpoint; +} + +bool +mips_target::low_breakpoint_at (CORE_ADDR where) +{ + unsigned int insn; + + read_memory (where, (unsigned char *) &insn, 4); + if (insn == mips_breakpoint) + return true; + + /* If necessary, recognize more trap instructions here. GDB only uses the + one. */ + return false; +} + +/* Mark the watch registers of lwp, represented by ENTRY, as changed. */ + +static void +update_watch_registers_callback (thread_info *thread) +{ + struct lwp_info *lwp = get_thread_lwp (thread); + + /* The actual update is done later just before resuming the lwp, + we just mark that the registers need updating. */ + lwp->arch_private->watch_registers_changed = 1; + + /* If the lwp isn't stopped, force it to momentarily pause, so + we can update its watch registers. */ + if (!lwp->stopped) + linux_stop_lwp (lwp); +} + +/* This is the implementation of linux target ops method + low_new_process. */ + +arch_process_info * +mips_target::low_new_process () +{ + struct arch_process_info *info = XCNEW (struct arch_process_info); + + return info; +} + +/* This is the implementation of linux target ops method + low_delete_process. */ + +void +mips_target::low_delete_process (arch_process_info *info) +{ + xfree (info); +} + +/* This is the implementation of linux target ops method low_new_thread. + Mark the watch registers as changed, so the threads' copies will + be updated. */ + +void +mips_target::low_new_thread (lwp_info *lwp) +{ + struct arch_lwp_info *info = XCNEW (struct arch_lwp_info); + + info->watch_registers_changed = 1; + + lwp->arch_private = info; +} + +/* Function to call when a thread is being deleted. */ + +void +mips_target::low_delete_thread (arch_lwp_info *arch_lwp) +{ + xfree (arch_lwp); +} + +/* Create a new mips_watchpoint and add it to the list. */ + +static void +mips_add_watchpoint (struct arch_process_info *priv, CORE_ADDR addr, int len, + enum target_hw_bp_type watch_type) +{ + struct mips_watchpoint *new_watch; + struct mips_watchpoint **pw; + + new_watch = XNEW (struct mips_watchpoint); + new_watch->addr = addr; + new_watch->len = len; + new_watch->type = watch_type; + new_watch->next = NULL; + + pw = &priv->current_watches; + while (*pw != NULL) + pw = &(*pw)->next; + *pw = new_watch; +} + +/* Hook to call when a new fork is attached. */ + +void +mips_target::low_new_fork (process_info *parent, + process_info *child) +{ + struct arch_process_info *parent_private; + struct arch_process_info *child_private; + struct mips_watchpoint *wp; + + /* These are allocated by linux_add_process. */ + gdb_assert (parent->priv != NULL + && parent->priv->arch_private != NULL); + gdb_assert (child->priv != NULL + && child->priv->arch_private != NULL); + + /* Linux kernel before 2.6.33 commit + 72f674d203cd230426437cdcf7dd6f681dad8b0d + will inherit hardware debug registers from parent + on fork/vfork/clone. Newer Linux kernels create such tasks with + zeroed debug registers. + + GDB core assumes the child inherits the watchpoints/hw + breakpoints of the parent, and will remove them all from the + forked off process. Copy the debug registers mirrors into the + new process so that all breakpoints and watchpoints can be + removed together. The debug registers mirror will become zeroed + in the end before detaching the forked off process, thus making + this compatible with older Linux kernels too. */ + + parent_private = parent->priv->arch_private; + child_private = child->priv->arch_private; + + child_private->watch_readback_valid = parent_private->watch_readback_valid; + child_private->watch_readback = parent_private->watch_readback; + + for (wp = parent_private->current_watches; wp != NULL; wp = wp->next) + mips_add_watchpoint (child_private, wp->addr, wp->len, wp->type); + + child_private->watch_mirror = parent_private->watch_mirror; +} +/* This is the implementation of linux target ops method + low_prepare_to_resume. If the watch regs have changed, update the + thread's copies. */ + +void +mips_target::low_prepare_to_resume (lwp_info *lwp) +{ + ptid_t ptid = ptid_of (get_lwp_thread (lwp)); + struct process_info *proc = find_process_pid (ptid.pid ()); + struct arch_process_info *priv = proc->priv->arch_private; + + if (lwp->arch_private->watch_registers_changed) + { + /* Only update the watch registers if we have set or unset a + watchpoint already. */ + if (mips_linux_watch_get_num_valid (&priv->watch_mirror) > 0) + { + /* Write the mirrored watch register values. */ + int tid = ptid.lwp (); + + if (-1 == ptrace (PTRACE_SET_WATCH_REGS, tid, + &priv->watch_mirror, NULL)) + perror_with_name ("Couldn't write watch register"); + } + + lwp->arch_private->watch_registers_changed = 0; + } +} + +bool +mips_target::supports_z_point_type (char z_type) +{ + switch (z_type) + { + case Z_PACKET_WRITE_WP: + case Z_PACKET_READ_WP: + case Z_PACKET_ACCESS_WP: + return true; + default: + return false; + } +} + +/* This is the implementation of linux target ops method + low_insert_point. */ + +int +mips_target::low_insert_point (raw_bkpt_type type, CORE_ADDR addr, + int len, raw_breakpoint *bp) +{ + struct process_info *proc = current_process (); + struct arch_process_info *priv = proc->priv->arch_private; + struct pt_watch_regs regs; + long lwpid; + enum target_hw_bp_type watch_type; + uint32_t irw; + + lwpid = lwpid_of (current_thread); + if (!mips_linux_read_watch_registers (lwpid, + &priv->watch_readback, + &priv->watch_readback_valid, + 0)) + return -1; + + if (len <= 0) + return -1; + + regs = priv->watch_readback; + /* Add the current watches. */ + mips_linux_watch_populate_regs (priv->current_watches, ®s); + + /* Now try to add the new watch. */ + watch_type = raw_bkpt_type_to_target_hw_bp_type (type); + irw = mips_linux_watch_type_to_irw (watch_type); + if (!mips_linux_watch_try_one_watch (®s, addr, len, irw)) + return -1; + + /* It fit. Stick it on the end of the list. */ + mips_add_watchpoint (priv, addr, len, watch_type); + + priv->watch_mirror = regs; + + /* Only update the threads of this process. */ + for_each_thread (proc->pid, update_watch_registers_callback); + + return 0; +} + +/* This is the implementation of linux target ops method + low_remove_point. */ + +int +mips_target::low_remove_point (raw_bkpt_type type, CORE_ADDR addr, + int len, raw_breakpoint *bp) +{ + struct process_info *proc = current_process (); + struct arch_process_info *priv = proc->priv->arch_private; + + int deleted_one; + enum target_hw_bp_type watch_type; + + struct mips_watchpoint **pw; + struct mips_watchpoint *w; + + /* Search for a known watch that matches. Then unlink and free it. */ + watch_type = raw_bkpt_type_to_target_hw_bp_type (type); + deleted_one = 0; + pw = &priv->current_watches; + while ((w = *pw)) + { + if (w->addr == addr && w->len == len && w->type == watch_type) + { + *pw = w->next; + free (w); + deleted_one = 1; + break; + } + pw = &(w->next); + } + + if (!deleted_one) + return -1; /* We don't know about it, fail doing nothing. */ + + /* At this point watch_readback is known to be valid because we + could not have added the watch without reading it. */ + gdb_assert (priv->watch_readback_valid == 1); + + priv->watch_mirror = priv->watch_readback; + mips_linux_watch_populate_regs (priv->current_watches, + &priv->watch_mirror); + + /* Only update the threads of this process. */ + for_each_thread (proc->pid, update_watch_registers_callback); + + return 0; +} + +/* This is the implementation of linux target ops method + low_stopped_by_watchpoint. The watchhi R and W bits indicate + the watch register triggered. */ + +bool +mips_target::low_stopped_by_watchpoint () +{ + struct process_info *proc = current_process (); + struct arch_process_info *priv = proc->priv->arch_private; + int n; + int num_valid; + long lwpid = lwpid_of (current_thread); + + if (!mips_linux_read_watch_registers (lwpid, + &priv->watch_readback, + &priv->watch_readback_valid, + 1)) + return 0; + + num_valid = mips_linux_watch_get_num_valid (&priv->watch_readback); + + for (n = 0; n < MAX_DEBUG_REGISTER && n < num_valid; n++) + if (mips_linux_watch_get_watchhi (&priv->watch_readback, n) + & (R_MASK | W_MASK)) + return true; + + return false; +} + +/* This is the implementation of linux target ops method + low_stopped_data_address. */ + +CORE_ADDR +mips_target::low_stopped_data_address () +{ + struct process_info *proc = current_process (); + struct arch_process_info *priv = proc->priv->arch_private; + int n; + int num_valid; + long lwpid = lwpid_of (current_thread); + + /* On MIPS we don't know the low order 3 bits of the data address. + GDB does not support remote targets that can't report the + watchpoint address. So, make our best guess; return the starting + address of a watchpoint request which overlaps the one that + triggered. */ + + if (!mips_linux_read_watch_registers (lwpid, + &priv->watch_readback, + &priv->watch_readback_valid, + 0)) + return 0; + + num_valid = mips_linux_watch_get_num_valid (&priv->watch_readback); + + for (n = 0; n < MAX_DEBUG_REGISTER && n < num_valid; n++) + if (mips_linux_watch_get_watchhi (&priv->watch_readback, n) + & (R_MASK | W_MASK)) + { + CORE_ADDR t_low, t_hi; + int t_irw; + struct mips_watchpoint *watch; + + t_low = mips_linux_watch_get_watchlo (&priv->watch_readback, n); + t_irw = t_low & IRW_MASK; + t_hi = (mips_linux_watch_get_watchhi (&priv->watch_readback, n) + | IRW_MASK); + t_low &= ~(CORE_ADDR)t_hi; + + for (watch = priv->current_watches; + watch != NULL; + watch = watch->next) + { + CORE_ADDR addr = watch->addr; + CORE_ADDR last_byte = addr + watch->len - 1; + + if ((t_irw & mips_linux_watch_type_to_irw (watch->type)) == 0) + { + /* Different type. */ + continue; + } + /* Check for overlap of even a single byte. */ + if (last_byte >= t_low && addr <= t_low + t_hi) + return addr; + } + } + + /* Shouldn't happen. */ + return 0; +} + +/* Fetch the thread-local storage pointer for libthread_db. */ + +ps_err_e +ps_get_thread_area (struct ps_prochandle *ph, + lwpid_t lwpid, int idx, void **base) +{ + if (ptrace (PTRACE_GET_THREAD_AREA, lwpid, NULL, base) != 0) + return PS_ERR; + + /* IDX is the bias from the thread pointer to the beginning of the + thread descriptor. It has to be subtracted due to implementation + quirks in libthread_db. */ + *base = (void *) ((char *)*base - idx); + + return PS_OK; +} + +static void +mips_collect_register (struct regcache *regcache, + int use_64bit, int regno, union mips_register *reg) +{ + union mips_register tmp_reg; + + if (use_64bit) + { + collect_register (regcache, regno, &tmp_reg.reg64); + *reg = tmp_reg; + } + else + { + collect_register (regcache, regno, &tmp_reg.reg32); + reg->reg64 = tmp_reg.reg32; + } +} + +static void +mips_supply_register (struct regcache *regcache, + int use_64bit, int regno, const union mips_register *reg) +{ + int offset = 0; + + /* For big-endian 32-bit targets, ignore the high four bytes of each + eight-byte slot. */ + if (__BYTE_ORDER == __BIG_ENDIAN && !use_64bit) + offset = 4; + + supply_register (regcache, regno, reg->buf + offset); +} + +#ifdef HAVE_PTRACE_GETREGS + +static void +mips_collect_register_32bit (struct regcache *regcache, + int use_64bit, int regno, unsigned char *buf) +{ + union mips_register tmp_reg; + int reg32; + + mips_collect_register (regcache, use_64bit, regno, &tmp_reg); + reg32 = tmp_reg.reg64; + memcpy (buf, ®32, 4); +} + +static void +mips_supply_register_32bit (struct regcache *regcache, + int use_64bit, int regno, const unsigned char *buf) +{ + union mips_register tmp_reg; + int reg32; + + memcpy (®32, buf, 4); + tmp_reg.reg64 = reg32; + mips_supply_register (regcache, use_64bit, regno, &tmp_reg); +} + +static void +mips_fill_gregset (struct regcache *regcache, void *buf) +{ + union mips_register *regset = (union mips_register *) buf; + int i, use_64bit; + const struct target_desc *tdesc = regcache->tdesc; + + use_64bit = (register_size (tdesc, 0) == 8); + + for (i = 1; i < 32; i++) + mips_collect_register (regcache, use_64bit, i, regset + i); + + mips_collect_register (regcache, use_64bit, + find_regno (tdesc, "lo"), regset + 32); + mips_collect_register (regcache, use_64bit, + find_regno (tdesc, "hi"), regset + 33); + mips_collect_register (regcache, use_64bit, + find_regno (tdesc, "pc"), regset + 34); + mips_collect_register (regcache, use_64bit, + find_regno (tdesc, "badvaddr"), regset + 35); + mips_collect_register (regcache, use_64bit, + find_regno (tdesc, "status"), regset + 36); + mips_collect_register (regcache, use_64bit, + find_regno (tdesc, "cause"), regset + 37); + + mips_collect_register (regcache, use_64bit, + find_regno (tdesc, "restart"), regset + 0); +} + +static void +mips_store_gregset (struct regcache *regcache, const void *buf) +{ + const union mips_register *regset = (const union mips_register *) buf; + int i, use_64bit; + + use_64bit = (register_size (regcache->tdesc, 0) == 8); + + supply_register_by_name_zeroed (regcache, "r0"); + + for (i = 1; i < 32; i++) + mips_supply_register (regcache, use_64bit, i, regset + i); + + mips_supply_register (regcache, use_64bit, + find_regno (regcache->tdesc, "lo"), regset + 32); + mips_supply_register (regcache, use_64bit, + find_regno (regcache->tdesc, "hi"), regset + 33); + mips_supply_register (regcache, use_64bit, + find_regno (regcache->tdesc, "pc"), regset + 34); + mips_supply_register (regcache, use_64bit, + find_regno (regcache->tdesc, "badvaddr"), regset + 35); + mips_supply_register (regcache, use_64bit, + find_regno (regcache->tdesc, "status"), regset + 36); + mips_supply_register (regcache, use_64bit, + find_regno (regcache->tdesc, "cause"), regset + 37); + + mips_supply_register (regcache, use_64bit, + find_regno (regcache->tdesc, "restart"), regset + 0); +} + +static void +mips_fill_fpregset (struct regcache *regcache, void *buf) +{ + union mips_register *regset = (union mips_register *) buf; + int i, use_64bit, first_fp, big_endian; + + use_64bit = (register_size (regcache->tdesc, 0) == 8); + first_fp = find_regno (regcache->tdesc, "f0"); + big_endian = (__BYTE_ORDER == __BIG_ENDIAN); + + /* See GDB for a discussion of this peculiar layout. */ + for (i = 0; i < 32; i++) + if (use_64bit) + collect_register (regcache, first_fp + i, regset[i].buf); + else + collect_register (regcache, first_fp + i, + regset[i & ~1].buf + 4 * (big_endian != (i & 1))); + + mips_collect_register_32bit (regcache, use_64bit, + find_regno (regcache->tdesc, "fcsr"), regset[32].buf); + mips_collect_register_32bit (regcache, use_64bit, + find_regno (regcache->tdesc, "fir"), + regset[32].buf + 4); +} + +static void +mips_store_fpregset (struct regcache *regcache, const void *buf) +{ + const union mips_register *regset = (const union mips_register *) buf; + int i, use_64bit, first_fp, big_endian; + + use_64bit = (register_size (regcache->tdesc, 0) == 8); + first_fp = find_regno (regcache->tdesc, "f0"); + big_endian = (__BYTE_ORDER == __BIG_ENDIAN); + + /* See GDB for a discussion of this peculiar layout. */ + for (i = 0; i < 32; i++) + if (use_64bit) + supply_register (regcache, first_fp + i, regset[i].buf); + else + supply_register (regcache, first_fp + i, + regset[i & ~1].buf + 4 * (big_endian != (i & 1))); + + mips_supply_register_32bit (regcache, use_64bit, + find_regno (regcache->tdesc, "fcsr"), + regset[32].buf); + mips_supply_register_32bit (regcache, use_64bit, + find_regno (regcache->tdesc, "fir"), + regset[32].buf + 4); +} +#endif /* HAVE_PTRACE_GETREGS */ + +/* Take care of 32-bit registers with 64-bit ptrace, POKEUSER side. */ + +void +mips_target::low_collect_ptrace_register (regcache *regcache, int regno, + char *buf) +{ + int use_64bit = sizeof (PTRACE_XFER_TYPE) == 8; + + if (use_64bit && register_size (regcache->tdesc, regno) == 4) + { + union mips_register reg; + + mips_collect_register (regcache, 0, regno, ®); + memcpy (buf, ®, sizeof (reg)); + } + else + collect_register (regcache, regno, buf); +} + +/* Take care of 32-bit registers with 64-bit ptrace, PEEKUSER side. */ + +void +mips_target::low_supply_ptrace_register (regcache *regcache, int regno, + const char *buf) +{ + int use_64bit = sizeof (PTRACE_XFER_TYPE) == 8; + + if (use_64bit && register_size (regcache->tdesc, regno) == 4) + { + union mips_register reg; + + memcpy (®, buf, sizeof (reg)); + mips_supply_register (regcache, 0, regno, ®); + } + else + supply_register (regcache, regno, buf); +} + +static struct regset_info mips_regsets[] = { +#ifdef HAVE_PTRACE_GETREGS + { PTRACE_GETREGS, PTRACE_SETREGS, 0, 38 * 8, GENERAL_REGS, + mips_fill_gregset, mips_store_gregset }, + { PTRACE_GETFPREGS, PTRACE_SETFPREGS, 0, 33 * 8, FP_REGS, + mips_fill_fpregset, mips_store_fpregset }, +#endif /* HAVE_PTRACE_GETREGS */ + NULL_REGSET +}; + +static struct regsets_info mips_regsets_info = + { + mips_regsets, /* regsets */ + 0, /* num_regsets */ + NULL, /* disabled_regsets */ + }; + +static struct usrregs_info mips_dsp_usrregs_info = + { + mips_dsp_num_regs, + mips_dsp_regmap, + }; + +static struct usrregs_info mips_usrregs_info = + { + mips_num_regs, + mips_regmap, + }; + +static struct regs_info dsp_regs_info = + { + mips_dsp_regset_bitmap, + &mips_dsp_usrregs_info, + &mips_regsets_info + }; + +static struct regs_info myregs_info = + { + NULL, /* regset_bitmap */ + &mips_usrregs_info, + &mips_regsets_info + }; + +const regs_info * +mips_target::get_regs_info () +{ + if (have_dsp) + return &dsp_regs_info; + else + return &myregs_info; +} + +/* The linux target ops object. */ + +linux_process_target *the_linux_target = &the_mips_target; + +void +initialize_low_arch (void) +{ + /* Initialize the Linux target descriptions. */ + init_registers_mips_linux (); + init_registers_mips_dsp_linux (); + init_registers_mips64_linux (); + init_registers_mips64_dsp_linux (); + + initialize_regsets_info (&mips_regsets_info); +} diff -Nru gdb-9.1/gdbserver/linux-nios2-low.cc gdb-10.2/gdbserver/linux-nios2-low.cc --- gdb-9.1/gdbserver/linux-nios2-low.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/linux-nios2-low.cc 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,290 @@ +/* GNU/Linux/Nios II specific low level interface, for the remote server for + GDB. + Copyright (C) 2008-2021 Free Software Foundation, Inc. + + Contributed by Mentor Graphics, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "server.h" +#include "linux-low.h" +#include "elf/common.h" +#include "nat/gdb_ptrace.h" +#include <endian.h> +#include "gdb_proc_service.h" +#include <asm/ptrace.h> + +#ifndef PTRACE_GET_THREAD_AREA +#define PTRACE_GET_THREAD_AREA 25 +#endif + +/* Linux target op definitions for the NIOS II architecture. */ + +class nios2_target : public linux_process_target +{ +public: + + const regs_info *get_regs_info () override; + + const gdb_byte *sw_breakpoint_from_kind (int kind, int *size) override; + +protected: + + void low_arch_setup () override; + + bool low_cannot_fetch_register (int regno) override; + + bool low_cannot_store_register (int regno) override; + + bool low_supports_breakpoints () override; + + CORE_ADDR low_get_pc (regcache *regcache) override; + + void low_set_pc (regcache *regcache, CORE_ADDR newpc) override; + + bool low_breakpoint_at (CORE_ADDR pc) override; +}; + +/* The singleton target ops object. */ + +static nios2_target the_nios2_target; + +bool +nios2_target::low_supports_breakpoints () +{ + return true; +} + +CORE_ADDR +nios2_target::low_get_pc (regcache *regcache) +{ + return linux_get_pc_32bit (regcache); +} + +void +nios2_target::low_set_pc (regcache *regcache, CORE_ADDR pc) +{ + linux_set_pc_32bit (regcache, pc); +} + +/* The following definition must agree with the number of registers + defined in "struct user_regs" in GLIBC + (sysdeps/unix/sysv/linux/nios2/sys/user.h), and also with + NIOS2_NUM_REGS in GDB proper. */ + +#define nios2_num_regs 49 + +/* Defined in auto-generated file nios2-linux.c. */ + +void init_registers_nios2_linux (void); +extern const struct target_desc *tdesc_nios2_linux; + +/* This union is used to convert between int and byte buffer + representations of register contents. */ + +union nios2_register +{ + unsigned char buf[4]; + int reg32; +}; + +/* Return the ptrace ``address'' of register REGNO. */ + +static int nios2_regmap[] = { + -1, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, + 48, + 0 +}; + +/* Implement the low_arch_setup linux target ops method. */ + +void +nios2_target::low_arch_setup () +{ + current_process ()->tdesc = tdesc_nios2_linux; +} + +/* Implement the low_cannot_fetch_register linux target ops method. */ + +bool +nios2_target::low_cannot_fetch_register (int regno) +{ + return (nios2_regmap[regno] == -1); +} + +/* Implement the low_cannot_store_register linux target ops method. */ + +bool +nios2_target::low_cannot_store_register (int regno) +{ + return (nios2_regmap[regno] == -1); +} + +/* Breakpoint support. Also see comments on nios2_breakpoint_from_pc + in nios2-tdep.c. */ + +#if defined(__nios2_arch__) && __nios2_arch__ == 2 +#define NIOS2_BREAKPOINT 0xb7fd0020 +#define CDX_BREAKPOINT 0xd7c9 +#else +#define NIOS2_BREAKPOINT 0x003b6ffa +#endif + +/* We only register the 4-byte breakpoint, even on R2 targets which also + support 2-byte breakpoints. Since there is no supports_z_point_type + function provided, gdbserver never inserts software breakpoints itself + and instead relies on GDB to insert the breakpoint of the correct length + via a memory write. */ +static const unsigned int nios2_breakpoint = NIOS2_BREAKPOINT; +#define nios2_breakpoint_len 4 + +/* Implementation of target ops method "sw_breakpoint_from_kind". */ + +const gdb_byte * +nios2_target::sw_breakpoint_from_kind (int kind, int *size) +{ + *size = nios2_breakpoint_len; + return (const gdb_byte *) &nios2_breakpoint; +} + +/* Implement the low_breakpoint_at linux target ops method. */ + +bool +nios2_target::low_breakpoint_at (CORE_ADDR where) +{ + unsigned int insn; + + /* For R2, first check for the 2-byte CDX trap.n breakpoint encoding. */ +#if defined(__nios2_arch__) && __nios2_arch__ == 2 + read_memory (where, (unsigned char *) &insn, 2); + if (insn == CDX_BREAKPOINT) + return true; +#endif + + read_memory (where, (unsigned char *) &insn, 4); + if (insn == nios2_breakpoint) + return true; + return false; +} + +/* Fetch the thread-local storage pointer for libthread_db. */ + +ps_err_e +ps_get_thread_area (struct ps_prochandle *ph, + lwpid_t lwpid, int idx, void **base) +{ + if (ptrace (PTRACE_GET_THREAD_AREA, lwpid, NULL, base) != 0) + return PS_ERR; + + /* IDX is the bias from the thread pointer to the beginning of the + thread descriptor. It has to be subtracted due to implementation + quirks in libthread_db. */ + *base = (void *) ((char *) *base - idx); + + return PS_OK; +} + +/* Helper functions to collect/supply a single register REGNO. */ + +static void +nios2_collect_register (struct regcache *regcache, int regno, + union nios2_register *reg) +{ + union nios2_register tmp_reg; + + collect_register (regcache, regno, &tmp_reg.reg32); + reg->reg32 = tmp_reg.reg32; +} + +static void +nios2_supply_register (struct regcache *regcache, int regno, + const union nios2_register *reg) +{ + supply_register (regcache, regno, reg->buf); +} + +/* We have only a single register set on Nios II. */ + +static void +nios2_fill_gregset (struct regcache *regcache, void *buf) +{ + union nios2_register *regset = (union nios2_register *) buf; + int i; + + for (i = 1; i < nios2_num_regs; i++) + nios2_collect_register (regcache, i, regset + i); +} + +static void +nios2_store_gregset (struct regcache *regcache, const void *buf) +{ + const union nios2_register *regset = (union nios2_register *) buf; + int i; + + for (i = 0; i < nios2_num_regs; i++) + nios2_supply_register (regcache, i, regset + i); +} + +static struct regset_info nios2_regsets[] = +{ + { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_PRSTATUS, + nios2_num_regs * 4, GENERAL_REGS, + nios2_fill_gregset, nios2_store_gregset }, + NULL_REGSET +}; + +static struct regsets_info nios2_regsets_info = + { + nios2_regsets, /* regsets */ + 0, /* num_regsets */ + NULL, /* disabled_regsets */ + }; + +static struct usrregs_info nios2_usrregs_info = + { + nios2_num_regs, + nios2_regmap, + }; + +static struct regs_info myregs_info = + { + NULL, /* regset_bitmap */ + &nios2_usrregs_info, + &nios2_regsets_info + }; + +const regs_info * +nios2_target::get_regs_info () +{ + return &myregs_info; +} + +/* The linux target ops object. */ + +linux_process_target *the_linux_target = &the_nios2_target; + +void +initialize_low_arch (void) +{ + init_registers_nios2_linux (); + + initialize_regsets_info (&nios2_regsets_info); +} diff -Nru gdb-9.1/gdbserver/linux-ppc-ipa.cc gdb-10.2/gdbserver/linux-ppc-ipa.cc --- gdb-9.1/gdbserver/linux-ppc-ipa.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/linux-ppc-ipa.cc 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,259 @@ +/* GNU/Linux/PowerPC specific low level interface, for the in-process + agent library for GDB. + + Copyright (C) 2016-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "server.h" +#include <sys/mman.h> +#include "tracepoint.h" +#include "arch/ppc-linux-tdesc.h" +#include "linux-ppc-tdesc-init.h" +#include <elf.h> +#ifdef HAVE_GETAUXVAL +#include <sys/auxv.h> +#endif + +/* These macros define the position of registers in the buffer collected + by the fast tracepoint jump pad. */ +#define FT_CR_R0 0 +#define FT_CR_CR 32 +#define FT_CR_XER 33 +#define FT_CR_LR 34 +#define FT_CR_CTR 35 +#define FT_CR_PC 36 +#define FT_CR_GPR(n) (FT_CR_R0 + (n)) + +static const int ppc_ft_collect_regmap[] = { + /* GPRs */ + FT_CR_GPR (0), FT_CR_GPR (1), FT_CR_GPR (2), + FT_CR_GPR (3), FT_CR_GPR (4), FT_CR_GPR (5), + FT_CR_GPR (6), FT_CR_GPR (7), FT_CR_GPR (8), + FT_CR_GPR (9), FT_CR_GPR (10), FT_CR_GPR (11), + FT_CR_GPR (12), FT_CR_GPR (13), FT_CR_GPR (14), + FT_CR_GPR (15), FT_CR_GPR (16), FT_CR_GPR (17), + FT_CR_GPR (18), FT_CR_GPR (19), FT_CR_GPR (20), + FT_CR_GPR (21), FT_CR_GPR (22), FT_CR_GPR (23), + FT_CR_GPR (24), FT_CR_GPR (25), FT_CR_GPR (26), + FT_CR_GPR (27), FT_CR_GPR (28), FT_CR_GPR (29), + FT_CR_GPR (30), FT_CR_GPR (31), + /* FPRs - not collected. */ + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + FT_CR_PC, /* PC */ + -1, /* MSR */ + FT_CR_CR, /* CR */ + FT_CR_LR, /* LR */ + FT_CR_CTR, /* CTR */ + FT_CR_XER, /* XER */ + -1, /* FPSCR */ +}; + +#define PPC_NUM_FT_COLLECT_GREGS \ + (sizeof (ppc_ft_collect_regmap) / sizeof(ppc_ft_collect_regmap[0])) + +/* Supply registers collected by the fast tracepoint jump pad. + BUF is the second argument we pass to gdb_collect in jump pad. */ + +void +supply_fast_tracepoint_registers (struct regcache *regcache, + const unsigned char *buf) +{ + int i; + + for (i = 0; i < PPC_NUM_FT_COLLECT_GREGS; i++) + { + if (ppc_ft_collect_regmap[i] == -1) + continue; + supply_register (regcache, i, + ((char *) buf) + + ppc_ft_collect_regmap[i] * sizeof (long)); + } +} + +/* Return the value of register REGNUM. RAW_REGS is collected buffer + by jump pad. This function is called by emit_reg. */ + +ULONGEST +get_raw_reg (const unsigned char *raw_regs, int regnum) +{ + if (regnum >= PPC_NUM_FT_COLLECT_GREGS) + return 0; + if (ppc_ft_collect_regmap[regnum] == -1) + return 0; + + return *(unsigned long *) (raw_regs + + ppc_ft_collect_regmap[regnum] * sizeof (long)); +} + +/* Allocate buffer for the jump pads. The branch instruction has a reach + of +/- 32MiB, and the executable is loaded at 0x10000000 (256MiB). + + 64-bit: To maximize the area of executable that can use tracepoints, + try allocating at 0x10000000 - size initially, decreasing until we hit + a free area. + + 32-bit: ld.so loads dynamic libraries right below the executable, so + we cannot depend on that area (dynamic libraries can be quite large). + Instead, aim right after the executable - at sbrk(0). This will + cause future brk to fail, and malloc will fallback to mmap. */ + +void * +alloc_jump_pad_buffer (size_t size) +{ +#ifdef __powerpc64__ + uintptr_t addr; + uintptr_t exec_base = getauxval (AT_PHDR); + int pagesize; + void *res; + + if (exec_base == 0) + exec_base = 0x10000000; + + pagesize = sysconf (_SC_PAGE_SIZE); + if (pagesize == -1) + perror_with_name ("sysconf"); + + addr = exec_base - size; + + /* size should already be page-aligned, but this can't hurt. */ + addr &= ~(pagesize - 1); + + /* Search for a free area. If we hit 0, we're out of luck. */ + for (; addr; addr -= pagesize) + { + /* No MAP_FIXED - we don't want to zap someone's mapping. */ + res = mmap ((void *) addr, size, + PROT_READ | PROT_WRITE | PROT_EXEC, + MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); + + /* If we got what we wanted, return. */ + if ((uintptr_t) res == addr) + return res; + + /* If we got a mapping, but at a wrong address, undo it. */ + if (res != MAP_FAILED) + munmap (res, size); + } + + return NULL; +#else + void *target = sbrk (0); + void *res = mmap (target, size, PROT_READ | PROT_WRITE | PROT_EXEC, + MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); + + if (res == target) + return res; + + if (res != MAP_FAILED) + munmap (res, size); + + return NULL; +#endif +} + +/* Return target_desc to use for IPA, given the tdesc index passed by + gdbserver. */ + +const struct target_desc * +get_ipa_tdesc (int idx) +{ + switch (idx) + { +#ifdef __powerpc64__ + case PPC_TDESC_BASE: + return tdesc_powerpc_64l; + case PPC_TDESC_ALTIVEC: + return tdesc_powerpc_altivec64l; + case PPC_TDESC_VSX: + return tdesc_powerpc_vsx64l; + case PPC_TDESC_ISA205: + return tdesc_powerpc_isa205_64l; + case PPC_TDESC_ISA205_ALTIVEC: + return tdesc_powerpc_isa205_altivec64l; + case PPC_TDESC_ISA205_VSX: + return tdesc_powerpc_isa205_vsx64l; + case PPC_TDESC_ISA205_PPR_DSCR_VSX: + return tdesc_powerpc_isa205_ppr_dscr_vsx64l; + case PPC_TDESC_ISA207_VSX: + return tdesc_powerpc_isa207_vsx64l; + case PPC_TDESC_ISA207_HTM_VSX: + return tdesc_powerpc_isa207_htm_vsx64l; +#else + case PPC_TDESC_BASE: + return tdesc_powerpc_32l; + case PPC_TDESC_ALTIVEC: + return tdesc_powerpc_altivec32l; + case PPC_TDESC_VSX: + return tdesc_powerpc_vsx32l; + case PPC_TDESC_ISA205: + return tdesc_powerpc_isa205_32l; + case PPC_TDESC_ISA205_ALTIVEC: + return tdesc_powerpc_isa205_altivec32l; + case PPC_TDESC_ISA205_VSX: + return tdesc_powerpc_isa205_vsx32l; + case PPC_TDESC_ISA205_PPR_DSCR_VSX: + return tdesc_powerpc_isa205_ppr_dscr_vsx32l; + case PPC_TDESC_ISA207_VSX: + return tdesc_powerpc_isa207_vsx32l; + case PPC_TDESC_ISA207_HTM_VSX: + return tdesc_powerpc_isa207_htm_vsx32l; + case PPC_TDESC_E500: + return tdesc_powerpc_e500l; +#endif + default: + internal_error (__FILE__, __LINE__, + "unknown ipa tdesc index: %d", idx); +#ifdef __powerpc64__ + return tdesc_powerpc_64l; +#else + return tdesc_powerpc_32l; +#endif + } +} + + +/* Initialize ipa_tdesc and others. */ + +void +initialize_low_tracepoint (void) +{ +#ifdef __powerpc64__ + init_registers_powerpc_64l (); + init_registers_powerpc_altivec64l (); + init_registers_powerpc_vsx64l (); + init_registers_powerpc_isa205_64l (); + init_registers_powerpc_isa205_altivec64l (); + init_registers_powerpc_isa205_vsx64l (); + init_registers_powerpc_isa205_ppr_dscr_vsx64l (); + init_registers_powerpc_isa207_vsx64l (); + init_registers_powerpc_isa207_htm_vsx64l (); +#else + init_registers_powerpc_32l (); + init_registers_powerpc_altivec32l (); + init_registers_powerpc_vsx32l (); + init_registers_powerpc_isa205_32l (); + init_registers_powerpc_isa205_altivec32l (); + init_registers_powerpc_isa205_vsx32l (); + init_registers_powerpc_isa205_ppr_dscr_vsx32l (); + init_registers_powerpc_isa207_vsx32l (); + init_registers_powerpc_isa207_htm_vsx32l (); + init_registers_powerpc_e500l (); +#endif +} diff -Nru gdb-9.1/gdbserver/linux-ppc-low.cc gdb-10.2/gdbserver/linux-ppc-low.cc --- gdb-9.1/gdbserver/linux-ppc-low.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/linux-ppc-low.cc 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,3482 @@ +/* GNU/Linux/PowerPC specific low level interface, for the remote server for + GDB. + Copyright (C) 1995-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "server.h" +#include "linux-low.h" + +#include "elf/common.h" +#include <sys/uio.h> +#include <elf.h> +#include <asm/ptrace.h> + +#include "arch/ppc-linux-common.h" +#include "arch/ppc-linux-tdesc.h" +#include "nat/ppc-linux.h" +#include "nat/linux-ptrace.h" +#include "linux-ppc-tdesc-init.h" +#include "ax.h" +#include "tracepoint.h" + +#define PPC_FIELD(value, from, len) \ + (((value) >> (32 - (from) - (len))) & ((1 << (len)) - 1)) +#define PPC_SEXT(v, bs) \ + ((((CORE_ADDR) (v) & (((CORE_ADDR) 1 << (bs)) - 1)) \ + ^ ((CORE_ADDR) 1 << ((bs) - 1))) \ + - ((CORE_ADDR) 1 << ((bs) - 1))) +#define PPC_OP6(insn) PPC_FIELD (insn, 0, 6) +#define PPC_BO(insn) PPC_FIELD (insn, 6, 5) +#define PPC_LI(insn) (PPC_SEXT (PPC_FIELD (insn, 6, 24), 24) << 2) +#define PPC_BD(insn) (PPC_SEXT (PPC_FIELD (insn, 16, 14), 14) << 2) + +/* Linux target op definitions for the PowerPC architecture. */ + +class ppc_target : public linux_process_target +{ +public: + + const regs_info *get_regs_info () override; + + const gdb_byte *sw_breakpoint_from_kind (int kind, int *size) override; + + bool supports_z_point_type (char z_type) override; + + + void low_collect_ptrace_register (regcache *regcache, int regno, + char *buf) override; + + void low_supply_ptrace_register (regcache *regcache, int regno, + const char *buf) override; + + bool supports_tracepoints () override; + + bool supports_fast_tracepoints () override; + + int install_fast_tracepoint_jump_pad + (CORE_ADDR tpoint, CORE_ADDR tpaddr, CORE_ADDR collector, + CORE_ADDR lockaddr, ULONGEST orig_size, CORE_ADDR *jump_entry, + CORE_ADDR *trampoline, ULONGEST *trampoline_size, + unsigned char *jjump_pad_insn, ULONGEST *jjump_pad_insn_size, + CORE_ADDR *adjusted_insn_addr, CORE_ADDR *adjusted_insn_addr_end, + char *err) override; + + int get_min_fast_tracepoint_insn_len () override; + + struct emit_ops *emit_ops () override; + + int get_ipa_tdesc_idx () override; + +protected: + + void low_arch_setup () override; + + bool low_cannot_fetch_register (int regno) override; + + bool low_cannot_store_register (int regno) override; + + bool low_supports_breakpoints () override; + + CORE_ADDR low_get_pc (regcache *regcache) override; + + void low_set_pc (regcache *regcache, CORE_ADDR newpc) override; + + bool low_breakpoint_at (CORE_ADDR pc) override; + + int low_insert_point (raw_bkpt_type type, CORE_ADDR addr, + int size, raw_breakpoint *bp) override; + + int low_remove_point (raw_bkpt_type type, CORE_ADDR addr, + int size, raw_breakpoint *bp) override; + + int low_get_thread_area (int lwpid, CORE_ADDR *addrp) override; +}; + +/* The singleton target ops object. */ + +static ppc_target the_ppc_target; + +/* Holds the AT_HWCAP auxv entry. */ + +static unsigned long ppc_hwcap; + +/* Holds the AT_HWCAP2 auxv entry. */ + +static unsigned long ppc_hwcap2; + + +#define ppc_num_regs 73 + +#ifdef __powerpc64__ +/* We use a constant for FPSCR instead of PT_FPSCR, because + many shipped PPC64 kernels had the wrong value in ptrace.h. */ +static int ppc_regmap[] = + {PT_R0 * 8, PT_R1 * 8, PT_R2 * 8, PT_R3 * 8, + PT_R4 * 8, PT_R5 * 8, PT_R6 * 8, PT_R7 * 8, + PT_R8 * 8, PT_R9 * 8, PT_R10 * 8, PT_R11 * 8, + PT_R12 * 8, PT_R13 * 8, PT_R14 * 8, PT_R15 * 8, + PT_R16 * 8, PT_R17 * 8, PT_R18 * 8, PT_R19 * 8, + PT_R20 * 8, PT_R21 * 8, PT_R22 * 8, PT_R23 * 8, + PT_R24 * 8, PT_R25 * 8, PT_R26 * 8, PT_R27 * 8, + PT_R28 * 8, PT_R29 * 8, PT_R30 * 8, PT_R31 * 8, + PT_FPR0*8, PT_FPR0*8 + 8, PT_FPR0*8+16, PT_FPR0*8+24, + PT_FPR0*8+32, PT_FPR0*8+40, PT_FPR0*8+48, PT_FPR0*8+56, + PT_FPR0*8+64, PT_FPR0*8+72, PT_FPR0*8+80, PT_FPR0*8+88, + PT_FPR0*8+96, PT_FPR0*8+104, PT_FPR0*8+112, PT_FPR0*8+120, + PT_FPR0*8+128, PT_FPR0*8+136, PT_FPR0*8+144, PT_FPR0*8+152, + PT_FPR0*8+160, PT_FPR0*8+168, PT_FPR0*8+176, PT_FPR0*8+184, + PT_FPR0*8+192, PT_FPR0*8+200, PT_FPR0*8+208, PT_FPR0*8+216, + PT_FPR0*8+224, PT_FPR0*8+232, PT_FPR0*8+240, PT_FPR0*8+248, + PT_NIP * 8, PT_MSR * 8, PT_CCR * 8, PT_LNK * 8, + PT_CTR * 8, PT_XER * 8, PT_FPR0*8 + 256, + PT_ORIG_R3 * 8, PT_TRAP * 8 }; +#else +/* Currently, don't check/send MQ. */ +static int ppc_regmap[] = + {PT_R0 * 4, PT_R1 * 4, PT_R2 * 4, PT_R3 * 4, + PT_R4 * 4, PT_R5 * 4, PT_R6 * 4, PT_R7 * 4, + PT_R8 * 4, PT_R9 * 4, PT_R10 * 4, PT_R11 * 4, + PT_R12 * 4, PT_R13 * 4, PT_R14 * 4, PT_R15 * 4, + PT_R16 * 4, PT_R17 * 4, PT_R18 * 4, PT_R19 * 4, + PT_R20 * 4, PT_R21 * 4, PT_R22 * 4, PT_R23 * 4, + PT_R24 * 4, PT_R25 * 4, PT_R26 * 4, PT_R27 * 4, + PT_R28 * 4, PT_R29 * 4, PT_R30 * 4, PT_R31 * 4, + PT_FPR0*4, PT_FPR0*4 + 8, PT_FPR0*4+16, PT_FPR0*4+24, + PT_FPR0*4+32, PT_FPR0*4+40, PT_FPR0*4+48, PT_FPR0*4+56, + PT_FPR0*4+64, PT_FPR0*4+72, PT_FPR0*4+80, PT_FPR0*4+88, + PT_FPR0*4+96, PT_FPR0*4+104, PT_FPR0*4+112, PT_FPR0*4+120, + PT_FPR0*4+128, PT_FPR0*4+136, PT_FPR0*4+144, PT_FPR0*4+152, + PT_FPR0*4+160, PT_FPR0*4+168, PT_FPR0*4+176, PT_FPR0*4+184, + PT_FPR0*4+192, PT_FPR0*4+200, PT_FPR0*4+208, PT_FPR0*4+216, + PT_FPR0*4+224, PT_FPR0*4+232, PT_FPR0*4+240, PT_FPR0*4+248, + PT_NIP * 4, PT_MSR * 4, PT_CCR * 4, PT_LNK * 4, + PT_CTR * 4, PT_XER * 4, PT_FPSCR * 4, + PT_ORIG_R3 * 4, PT_TRAP * 4 + }; + +static int ppc_regmap_e500[] = + {PT_R0 * 4, PT_R1 * 4, PT_R2 * 4, PT_R3 * 4, + PT_R4 * 4, PT_R5 * 4, PT_R6 * 4, PT_R7 * 4, + PT_R8 * 4, PT_R9 * 4, PT_R10 * 4, PT_R11 * 4, + PT_R12 * 4, PT_R13 * 4, PT_R14 * 4, PT_R15 * 4, + PT_R16 * 4, PT_R17 * 4, PT_R18 * 4, PT_R19 * 4, + PT_R20 * 4, PT_R21 * 4, PT_R22 * 4, PT_R23 * 4, + PT_R24 * 4, PT_R25 * 4, PT_R26 * 4, PT_R27 * 4, + PT_R28 * 4, PT_R29 * 4, PT_R30 * 4, PT_R31 * 4, + -1, -1, -1, -1, + -1, -1, -1, -1, + -1, -1, -1, -1, + -1, -1, -1, -1, + -1, -1, -1, -1, + -1, -1, -1, -1, + -1, -1, -1, -1, + -1, -1, -1, -1, + PT_NIP * 4, PT_MSR * 4, PT_CCR * 4, PT_LNK * 4, + PT_CTR * 4, PT_XER * 4, -1, + PT_ORIG_R3 * 4, PT_TRAP * 4 + }; +#endif + +/* Check whether the kernel provides a register set with number + REGSET_ID of size REGSETSIZE for process/thread TID. */ + +static int +ppc_check_regset (int tid, int regset_id, int regsetsize) +{ + void *buf = alloca (regsetsize); + struct iovec iov; + + iov.iov_base = buf; + iov.iov_len = regsetsize; + + if (ptrace (PTRACE_GETREGSET, tid, regset_id, &iov) >= 0 + || errno == ENODATA) + return 1; + return 0; +} + +bool +ppc_target::low_cannot_store_register (int regno) +{ + const struct target_desc *tdesc = current_process ()->tdesc; + +#ifndef __powerpc64__ + /* Some kernels do not allow us to store fpscr. */ + if (!(ppc_hwcap & PPC_FEATURE_HAS_SPE) + && regno == find_regno (tdesc, "fpscr")) + return true; +#endif + + /* Some kernels do not allow us to store orig_r3 or trap. */ + if (regno == find_regno (tdesc, "orig_r3") + || regno == find_regno (tdesc, "trap")) + return true; + + return false; +} + +bool +ppc_target::low_cannot_fetch_register (int regno) +{ + return false; +} + +void +ppc_target::low_collect_ptrace_register (regcache *regcache, int regno, + char *buf) +{ + memset (buf, 0, sizeof (long)); + + if (__BYTE_ORDER == __LITTLE_ENDIAN) + { + /* Little-endian values always sit at the left end of the buffer. */ + collect_register (regcache, regno, buf); + } + else if (__BYTE_ORDER == __BIG_ENDIAN) + { + /* Big-endian values sit at the right end of the buffer. In case of + registers whose sizes are smaller than sizeof (long), we must use a + padding to access them correctly. */ + int size = register_size (regcache->tdesc, regno); + + if (size < sizeof (long)) + collect_register (regcache, regno, buf + sizeof (long) - size); + else + collect_register (regcache, regno, buf); + } + else + perror_with_name ("Unexpected byte order"); +} + +void +ppc_target::low_supply_ptrace_register (regcache *regcache, int regno, + const char *buf) +{ + if (__BYTE_ORDER == __LITTLE_ENDIAN) + { + /* Little-endian values always sit at the left end of the buffer. */ + supply_register (regcache, regno, buf); + } + else if (__BYTE_ORDER == __BIG_ENDIAN) + { + /* Big-endian values sit at the right end of the buffer. In case of + registers whose sizes are smaller than sizeof (long), we must use a + padding to access them correctly. */ + int size = register_size (regcache->tdesc, regno); + + if (size < sizeof (long)) + supply_register (regcache, regno, buf + sizeof (long) - size); + else + supply_register (regcache, regno, buf); + } + else + perror_with_name ("Unexpected byte order"); +} + +bool +ppc_target::low_supports_breakpoints () +{ + return true; +} + +CORE_ADDR +ppc_target::low_get_pc (regcache *regcache) +{ + if (register_size (regcache->tdesc, 0) == 4) + { + unsigned int pc; + collect_register_by_name (regcache, "pc", &pc); + return (CORE_ADDR) pc; + } + else + { + unsigned long pc; + collect_register_by_name (regcache, "pc", &pc); + return (CORE_ADDR) pc; + } +} + +void +ppc_target::low_set_pc (regcache *regcache, CORE_ADDR pc) +{ + if (register_size (regcache->tdesc, 0) == 4) + { + unsigned int newpc = pc; + supply_register_by_name (regcache, "pc", &newpc); + } + else + { + unsigned long newpc = pc; + supply_register_by_name (regcache, "pc", &newpc); + } +} + +#ifndef __powerpc64__ +static int ppc_regmap_adjusted; +#endif + + +/* Correct in either endianness. + This instruction is "twge r2, r2", which GDB uses as a software + breakpoint. */ +static const unsigned int ppc_breakpoint = 0x7d821008; +#define ppc_breakpoint_len 4 + +/* Implementation of target ops method "sw_breakpoint_from_kind". */ + +const gdb_byte * +ppc_target::sw_breakpoint_from_kind (int kind, int *size) +{ + *size = ppc_breakpoint_len; + return (const gdb_byte *) &ppc_breakpoint; +} + +bool +ppc_target::low_breakpoint_at (CORE_ADDR where) +{ + unsigned int insn; + + read_memory (where, (unsigned char *) &insn, 4); + if (insn == ppc_breakpoint) + return true; + /* If necessary, recognize more trap instructions here. GDB only uses + the one. */ + + return false; +} + +/* Implement supports_z_point_type target-ops. + Returns true if type Z_TYPE breakpoint is supported. + + Handling software breakpoint at server side, so tracepoints + and breakpoints can be inserted at the same location. */ + +bool +ppc_target::supports_z_point_type (char z_type) +{ + switch (z_type) + { + case Z_PACKET_SW_BP: + return true; + case Z_PACKET_HW_BP: + case Z_PACKET_WRITE_WP: + case Z_PACKET_ACCESS_WP: + default: + return false; + } +} + +/* Implement the low_insert_point linux target op. + Returns 0 on success, -1 on failure and 1 on unsupported. */ + +int +ppc_target::low_insert_point (raw_bkpt_type type, CORE_ADDR addr, + int size, raw_breakpoint *bp) +{ + switch (type) + { + case raw_bkpt_type_sw: + return insert_memory_breakpoint (bp); + + case raw_bkpt_type_hw: + case raw_bkpt_type_write_wp: + case raw_bkpt_type_access_wp: + default: + /* Unsupported. */ + return 1; + } +} + +/* Implement the low_remove_point linux target op. + Returns 0 on success, -1 on failure and 1 on unsupported. */ + +int +ppc_target::low_remove_point (raw_bkpt_type type, CORE_ADDR addr, + int size, raw_breakpoint *bp) +{ + switch (type) + { + case raw_bkpt_type_sw: + return remove_memory_breakpoint (bp); + + case raw_bkpt_type_hw: + case raw_bkpt_type_write_wp: + case raw_bkpt_type_access_wp: + default: + /* Unsupported. */ + return 1; + } +} + +/* Provide only a fill function for the general register set. ps_lgetregs + will use this for NPTL support. */ + +static void ppc_fill_gregset (struct regcache *regcache, void *buf) +{ + int i; + + ppc_target *my_ppc_target = (ppc_target *) the_linux_target; + + for (i = 0; i < 32; i++) + my_ppc_target->low_collect_ptrace_register (regcache, i, + (char *) buf + ppc_regmap[i]); + + for (i = 64; i < 70; i++) + my_ppc_target->low_collect_ptrace_register (regcache, i, + (char *) buf + ppc_regmap[i]); + + for (i = 71; i < 73; i++) + my_ppc_target->low_collect_ptrace_register (regcache, i, + (char *) buf + ppc_regmap[i]); +} + +/* Program Priority Register regset fill function. */ + +static void +ppc_fill_pprregset (struct regcache *regcache, void *buf) +{ + char *ppr = (char *) buf; + + collect_register_by_name (regcache, "ppr", ppr); +} + +/* Program Priority Register regset store function. */ + +static void +ppc_store_pprregset (struct regcache *regcache, const void *buf) +{ + const char *ppr = (const char *) buf; + + supply_register_by_name (regcache, "ppr", ppr); +} + +/* Data Stream Control Register regset fill function. */ + +static void +ppc_fill_dscrregset (struct regcache *regcache, void *buf) +{ + char *dscr = (char *) buf; + + collect_register_by_name (regcache, "dscr", dscr); +} + +/* Data Stream Control Register regset store function. */ + +static void +ppc_store_dscrregset (struct regcache *regcache, const void *buf) +{ + const char *dscr = (const char *) buf; + + supply_register_by_name (regcache, "dscr", dscr); +} + +/* Target Address Register regset fill function. */ + +static void +ppc_fill_tarregset (struct regcache *regcache, void *buf) +{ + char *tar = (char *) buf; + + collect_register_by_name (regcache, "tar", tar); +} + +/* Target Address Register regset store function. */ + +static void +ppc_store_tarregset (struct regcache *regcache, const void *buf) +{ + const char *tar = (const char *) buf; + + supply_register_by_name (regcache, "tar", tar); +} + +/* Event-Based Branching regset store function. Unless the inferior + has a perf event open, ptrace can return in error when reading and + writing to the regset, with ENODATA. For reading, the registers + will correctly show as unavailable. For writing, gdbserver + currently only caches any register writes from P and G packets and + the stub always tries to write all the regsets when resuming the + inferior, which would result in frequent warnings. For this + reason, we don't define a fill function. This also means that the + client-side regcache will be dirty if the user tries to write to + the EBB registers. G packets that the client sends to write to + unrelated registers will also include data for EBB registers, even + if they are unavailable. */ + +static void +ppc_store_ebbregset (struct regcache *regcache, const void *buf) +{ + const char *regset = (const char *) buf; + + /* The order in the kernel regset is: EBBRR, EBBHR, BESCR. In the + .dat file is BESCR, EBBHR, EBBRR. */ + supply_register_by_name (regcache, "ebbrr", ®set[0]); + supply_register_by_name (regcache, "ebbhr", ®set[8]); + supply_register_by_name (regcache, "bescr", ®set[16]); +} + +/* Performance Monitoring Unit regset fill function. */ + +static void +ppc_fill_pmuregset (struct regcache *regcache, void *buf) +{ + char *regset = (char *) buf; + + /* The order in the kernel regset is SIAR, SDAR, SIER, MMCR2, MMCR0. + In the .dat file is MMCR0, MMCR2, SIAR, SDAR, SIER. */ + collect_register_by_name (regcache, "siar", ®set[0]); + collect_register_by_name (regcache, "sdar", ®set[8]); + collect_register_by_name (regcache, "sier", ®set[16]); + collect_register_by_name (regcache, "mmcr2", ®set[24]); + collect_register_by_name (regcache, "mmcr0", ®set[32]); +} + +/* Performance Monitoring Unit regset store function. */ + +static void +ppc_store_pmuregset (struct regcache *regcache, const void *buf) +{ + const char *regset = (const char *) buf; + + supply_register_by_name (regcache, "siar", ®set[0]); + supply_register_by_name (regcache, "sdar", ®set[8]); + supply_register_by_name (regcache, "sier", ®set[16]); + supply_register_by_name (regcache, "mmcr2", ®set[24]); + supply_register_by_name (regcache, "mmcr0", ®set[32]); +} + +/* Hardware Transactional Memory special-purpose register regset fill + function. */ + +static void +ppc_fill_tm_sprregset (struct regcache *regcache, void *buf) +{ + int i, base; + char *regset = (char *) buf; + + base = find_regno (regcache->tdesc, "tfhar"); + for (i = 0; i < 3; i++) + collect_register (regcache, base + i, ®set[i * 8]); +} + +/* Hardware Transactional Memory special-purpose register regset store + function. */ + +static void +ppc_store_tm_sprregset (struct regcache *regcache, const void *buf) +{ + int i, base; + const char *regset = (const char *) buf; + + base = find_regno (regcache->tdesc, "tfhar"); + for (i = 0; i < 3; i++) + supply_register (regcache, base + i, ®set[i * 8]); +} + +/* For the same reasons as the EBB regset, none of the HTM + checkpointed regsets have a fill function. These registers are + only available if the inferior is in a transaction. */ + +/* Hardware Transactional Memory checkpointed general-purpose regset + store function. */ + +static void +ppc_store_tm_cgprregset (struct regcache *regcache, const void *buf) +{ + int i, base, size, endian_offset; + const char *regset = (const char *) buf; + + base = find_regno (regcache->tdesc, "cr0"); + size = register_size (regcache->tdesc, base); + + gdb_assert (size == 4 || size == 8); + + for (i = 0; i < 32; i++) + supply_register (regcache, base + i, ®set[i * size]); + + endian_offset = 0; + + if ((size == 8) && (__BYTE_ORDER == __BIG_ENDIAN)) + endian_offset = 4; + + supply_register_by_name (regcache, "ccr", + ®set[PT_CCR * size + endian_offset]); + + supply_register_by_name (regcache, "cxer", + ®set[PT_XER * size + endian_offset]); + + supply_register_by_name (regcache, "clr", ®set[PT_LNK * size]); + supply_register_by_name (regcache, "cctr", ®set[PT_CTR * size]); +} + +/* Hardware Transactional Memory checkpointed floating-point regset + store function. */ + +static void +ppc_store_tm_cfprregset (struct regcache *regcache, const void *buf) +{ + int i, base; + const char *regset = (const char *) buf; + + base = find_regno (regcache->tdesc, "cf0"); + + for (i = 0; i < 32; i++) + supply_register (regcache, base + i, ®set[i * 8]); + + supply_register_by_name (regcache, "cfpscr", ®set[32 * 8]); +} + +/* Hardware Transactional Memory checkpointed vector regset store + function. */ + +static void +ppc_store_tm_cvrregset (struct regcache *regcache, const void *buf) +{ + int i, base; + const char *regset = (const char *) buf; + int vscr_offset = 0; + + base = find_regno (regcache->tdesc, "cvr0"); + + for (i = 0; i < 32; i++) + supply_register (regcache, base + i, ®set[i * 16]); + + if (__BYTE_ORDER == __BIG_ENDIAN) + vscr_offset = 12; + + supply_register_by_name (regcache, "cvscr", + ®set[32 * 16 + vscr_offset]); + + supply_register_by_name (regcache, "cvrsave", ®set[33 * 16]); +} + +/* Hardware Transactional Memory checkpointed vector-scalar regset + store function. */ + +static void +ppc_store_tm_cvsxregset (struct regcache *regcache, const void *buf) +{ + int i, base; + const char *regset = (const char *) buf; + + base = find_regno (regcache->tdesc, "cvs0h"); + for (i = 0; i < 32; i++) + supply_register (regcache, base + i, ®set[i * 8]); +} + +/* Hardware Transactional Memory checkpointed Program Priority + Register regset store function. */ + +static void +ppc_store_tm_cpprregset (struct regcache *regcache, const void *buf) +{ + const char *cppr = (const char *) buf; + + supply_register_by_name (regcache, "cppr", cppr); +} + +/* Hardware Transactional Memory checkpointed Data Stream Control + Register regset store function. */ + +static void +ppc_store_tm_cdscrregset (struct regcache *regcache, const void *buf) +{ + const char *cdscr = (const char *) buf; + + supply_register_by_name (regcache, "cdscr", cdscr); +} + +/* Hardware Transactional Memory checkpointed Target Address Register + regset store function. */ + +static void +ppc_store_tm_ctarregset (struct regcache *regcache, const void *buf) +{ + const char *ctar = (const char *) buf; + + supply_register_by_name (regcache, "ctar", ctar); +} + +static void +ppc_fill_vsxregset (struct regcache *regcache, void *buf) +{ + int i, base; + char *regset = (char *) buf; + + base = find_regno (regcache->tdesc, "vs0h"); + for (i = 0; i < 32; i++) + collect_register (regcache, base + i, ®set[i * 8]); +} + +static void +ppc_store_vsxregset (struct regcache *regcache, const void *buf) +{ + int i, base; + const char *regset = (const char *) buf; + + base = find_regno (regcache->tdesc, "vs0h"); + for (i = 0; i < 32; i++) + supply_register (regcache, base + i, ®set[i * 8]); +} + +static void +ppc_fill_vrregset (struct regcache *regcache, void *buf) +{ + int i, base; + char *regset = (char *) buf; + int vscr_offset = 0; + + base = find_regno (regcache->tdesc, "vr0"); + for (i = 0; i < 32; i++) + collect_register (regcache, base + i, ®set[i * 16]); + + if (__BYTE_ORDER == __BIG_ENDIAN) + vscr_offset = 12; + + collect_register_by_name (regcache, "vscr", + ®set[32 * 16 + vscr_offset]); + + collect_register_by_name (regcache, "vrsave", ®set[33 * 16]); +} + +static void +ppc_store_vrregset (struct regcache *regcache, const void *buf) +{ + int i, base; + const char *regset = (const char *) buf; + int vscr_offset = 0; + + base = find_regno (regcache->tdesc, "vr0"); + for (i = 0; i < 32; i++) + supply_register (regcache, base + i, ®set[i * 16]); + + if (__BYTE_ORDER == __BIG_ENDIAN) + vscr_offset = 12; + + supply_register_by_name (regcache, "vscr", + ®set[32 * 16 + vscr_offset]); + supply_register_by_name (regcache, "vrsave", ®set[33 * 16]); +} + +struct gdb_evrregset_t +{ + unsigned long evr[32]; + unsigned long long acc; + unsigned long spefscr; +}; + +static void +ppc_fill_evrregset (struct regcache *regcache, void *buf) +{ + int i, ev0; + struct gdb_evrregset_t *regset = (struct gdb_evrregset_t *) buf; + + ev0 = find_regno (regcache->tdesc, "ev0h"); + for (i = 0; i < 32; i++) + collect_register (regcache, ev0 + i, ®set->evr[i]); + + collect_register_by_name (regcache, "acc", ®set->acc); + collect_register_by_name (regcache, "spefscr", ®set->spefscr); +} + +static void +ppc_store_evrregset (struct regcache *regcache, const void *buf) +{ + int i, ev0; + const struct gdb_evrregset_t *regset = (const struct gdb_evrregset_t *) buf; + + ev0 = find_regno (regcache->tdesc, "ev0h"); + for (i = 0; i < 32; i++) + supply_register (regcache, ev0 + i, ®set->evr[i]); + + supply_register_by_name (regcache, "acc", ®set->acc); + supply_register_by_name (regcache, "spefscr", ®set->spefscr); +} + +static struct regset_info ppc_regsets[] = { + /* List the extra register sets before GENERAL_REGS. That way we will + fetch them every time, but still fall back to PTRACE_PEEKUSER for the + general registers. Some kernels support these, but not the newer + PPC_PTRACE_GETREGS. */ + { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_PPC_TM_CTAR, 0, EXTENDED_REGS, + NULL, ppc_store_tm_ctarregset }, + { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_PPC_TM_CDSCR, 0, EXTENDED_REGS, + NULL, ppc_store_tm_cdscrregset }, + { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_PPC_TM_CPPR, 0, EXTENDED_REGS, + NULL, ppc_store_tm_cpprregset }, + { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_PPC_TM_CVSX, 0, EXTENDED_REGS, + NULL, ppc_store_tm_cvsxregset }, + { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_PPC_TM_CVMX, 0, EXTENDED_REGS, + NULL, ppc_store_tm_cvrregset }, + { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_PPC_TM_CFPR, 0, EXTENDED_REGS, + NULL, ppc_store_tm_cfprregset }, + { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_PPC_TM_CGPR, 0, EXTENDED_REGS, + NULL, ppc_store_tm_cgprregset }, + { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_PPC_TM_SPR, 0, EXTENDED_REGS, + ppc_fill_tm_sprregset, ppc_store_tm_sprregset }, + { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_PPC_EBB, 0, EXTENDED_REGS, + NULL, ppc_store_ebbregset }, + { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_PPC_PMU, 0, EXTENDED_REGS, + ppc_fill_pmuregset, ppc_store_pmuregset }, + { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_PPC_TAR, 0, EXTENDED_REGS, + ppc_fill_tarregset, ppc_store_tarregset }, + { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_PPC_PPR, 0, EXTENDED_REGS, + ppc_fill_pprregset, ppc_store_pprregset }, + { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_PPC_DSCR, 0, EXTENDED_REGS, + ppc_fill_dscrregset, ppc_store_dscrregset }, + { PTRACE_GETVSXREGS, PTRACE_SETVSXREGS, 0, 0, EXTENDED_REGS, + ppc_fill_vsxregset, ppc_store_vsxregset }, + { PTRACE_GETVRREGS, PTRACE_SETVRREGS, 0, 0, EXTENDED_REGS, + ppc_fill_vrregset, ppc_store_vrregset }, + { PTRACE_GETEVRREGS, PTRACE_SETEVRREGS, 0, 0, EXTENDED_REGS, + ppc_fill_evrregset, ppc_store_evrregset }, + { 0, 0, 0, 0, GENERAL_REGS, ppc_fill_gregset, NULL }, + NULL_REGSET +}; + +static struct usrregs_info ppc_usrregs_info = + { + ppc_num_regs, + ppc_regmap, + }; + +static struct regsets_info ppc_regsets_info = + { + ppc_regsets, /* regsets */ + 0, /* num_regsets */ + NULL, /* disabled_regsets */ + }; + +static struct regs_info myregs_info = + { + NULL, /* regset_bitmap */ + &ppc_usrregs_info, + &ppc_regsets_info + }; + +const regs_info * +ppc_target::get_regs_info () +{ + return &myregs_info; +} + +void +ppc_target::low_arch_setup () +{ + const struct target_desc *tdesc; + struct regset_info *regset; + struct ppc_linux_features features = ppc_linux_no_features; + + int tid = lwpid_of (current_thread); + + features.wordsize = ppc_linux_target_wordsize (tid); + + if (features.wordsize == 4) + tdesc = tdesc_powerpc_32l; + else + tdesc = tdesc_powerpc_64l; + + current_process ()->tdesc = tdesc; + + /* The value of current_process ()->tdesc needs to be set for this + call. */ + ppc_hwcap = linux_get_hwcap (features.wordsize); + ppc_hwcap2 = linux_get_hwcap2 (features.wordsize); + + features.isa205 = ppc_linux_has_isa205 (ppc_hwcap); + + if (ppc_hwcap & PPC_FEATURE_HAS_VSX) + features.vsx = true; + + if (ppc_hwcap & PPC_FEATURE_HAS_ALTIVEC) + features.altivec = true; + + if ((ppc_hwcap2 & PPC_FEATURE2_DSCR) + && ppc_check_regset (tid, NT_PPC_DSCR, PPC_LINUX_SIZEOF_DSCRREGSET) + && ppc_check_regset (tid, NT_PPC_PPR, PPC_LINUX_SIZEOF_PPRREGSET)) + { + features.ppr_dscr = true; + if ((ppc_hwcap2 & PPC_FEATURE2_ARCH_2_07) + && (ppc_hwcap2 & PPC_FEATURE2_TAR) + && (ppc_hwcap2 & PPC_FEATURE2_EBB) + && ppc_check_regset (tid, NT_PPC_TAR, + PPC_LINUX_SIZEOF_TARREGSET) + && ppc_check_regset (tid, NT_PPC_EBB, + PPC_LINUX_SIZEOF_EBBREGSET) + && ppc_check_regset (tid, NT_PPC_PMU, + PPC_LINUX_SIZEOF_PMUREGSET)) + { + features.isa207 = true; + if ((ppc_hwcap2 & PPC_FEATURE2_HTM) + && ppc_check_regset (tid, NT_PPC_TM_SPR, + PPC_LINUX_SIZEOF_TM_SPRREGSET)) + features.htm = true; + } + } + + tdesc = ppc_linux_match_description (features); + + /* On 32-bit machines, check for SPE registers. + Set the low target's regmap field as appropriately. */ +#ifndef __powerpc64__ + if (ppc_hwcap & PPC_FEATURE_HAS_SPE) + tdesc = tdesc_powerpc_e500l; + + if (!ppc_regmap_adjusted) + { + if (ppc_hwcap & PPC_FEATURE_HAS_SPE) + ppc_usrregs_info.regmap = ppc_regmap_e500; + + /* If the FPSCR is 64-bit wide, we need to fetch the whole + 64-bit slot and not just its second word. The PT_FPSCR + supplied in a 32-bit GDB compilation doesn't reflect + this. */ + if (register_size (tdesc, 70) == 8) + ppc_regmap[70] = (48 + 2*32) * sizeof (long); + + ppc_regmap_adjusted = 1; + } +#endif + + current_process ()->tdesc = tdesc; + + for (regset = ppc_regsets; regset->size >= 0; regset++) + switch (regset->get_request) + { + case PTRACE_GETVRREGS: + regset->size = features.altivec ? PPC_LINUX_SIZEOF_VRREGSET : 0; + break; + case PTRACE_GETVSXREGS: + regset->size = features.vsx ? PPC_LINUX_SIZEOF_VSXREGSET : 0; + break; + case PTRACE_GETEVRREGS: + if (ppc_hwcap & PPC_FEATURE_HAS_SPE) + regset->size = 32 * 4 + 8 + 4; + else + regset->size = 0; + break; + case PTRACE_GETREGSET: + switch (regset->nt_type) + { + case NT_PPC_PPR: + regset->size = (features.ppr_dscr ? + PPC_LINUX_SIZEOF_PPRREGSET : 0); + break; + case NT_PPC_DSCR: + regset->size = (features.ppr_dscr ? + PPC_LINUX_SIZEOF_DSCRREGSET : 0); + break; + case NT_PPC_TAR: + regset->size = (features.isa207 ? + PPC_LINUX_SIZEOF_TARREGSET : 0); + break; + case NT_PPC_EBB: + regset->size = (features.isa207 ? + PPC_LINUX_SIZEOF_EBBREGSET : 0); + break; + case NT_PPC_PMU: + regset->size = (features.isa207 ? + PPC_LINUX_SIZEOF_PMUREGSET : 0); + break; + case NT_PPC_TM_SPR: + regset->size = (features.htm ? + PPC_LINUX_SIZEOF_TM_SPRREGSET : 0); + break; + case NT_PPC_TM_CGPR: + if (features.wordsize == 4) + regset->size = (features.htm ? + PPC32_LINUX_SIZEOF_CGPRREGSET : 0); + else + regset->size = (features.htm ? + PPC64_LINUX_SIZEOF_CGPRREGSET : 0); + break; + case NT_PPC_TM_CFPR: + regset->size = (features.htm ? + PPC_LINUX_SIZEOF_CFPRREGSET : 0); + break; + case NT_PPC_TM_CVMX: + regset->size = (features.htm ? + PPC_LINUX_SIZEOF_CVMXREGSET : 0); + break; + case NT_PPC_TM_CVSX: + regset->size = (features.htm ? + PPC_LINUX_SIZEOF_CVSXREGSET : 0); + break; + case NT_PPC_TM_CPPR: + regset->size = (features.htm ? + PPC_LINUX_SIZEOF_CPPRREGSET : 0); + break; + case NT_PPC_TM_CDSCR: + regset->size = (features.htm ? + PPC_LINUX_SIZEOF_CDSCRREGSET : 0); + break; + case NT_PPC_TM_CTAR: + regset->size = (features.htm ? + PPC_LINUX_SIZEOF_CTARREGSET : 0); + break; + default: + break; + } + break; + default: + break; + } +} + +/* Implementation of target ops method "supports_tracepoints". */ + +bool +ppc_target::supports_tracepoints () +{ + return true; +} + +/* Get the thread area address. This is used to recognize which + thread is which when tracing with the in-process agent library. We + don't read anything from the address, and treat it as opaque; it's + the address itself that we assume is unique per-thread. */ + +int +ppc_target::low_get_thread_area (int lwpid, CORE_ADDR *addr) +{ + struct lwp_info *lwp = find_lwp_pid (ptid_t (lwpid)); + struct thread_info *thr = get_lwp_thread (lwp); + struct regcache *regcache = get_thread_regcache (thr, 1); + ULONGEST tp = 0; + +#ifdef __powerpc64__ + if (register_size (regcache->tdesc, 0) == 8) + collect_register_by_name (regcache, "r13", &tp); + else +#endif + collect_register_by_name (regcache, "r2", &tp); + + *addr = tp; + + return 0; +} + +#ifdef __powerpc64__ + +/* Older glibc doesn't provide this. */ + +#ifndef EF_PPC64_ABI +#define EF_PPC64_ABI 3 +#endif + +/* Returns 1 if inferior is using ELFv2 ABI. Undefined for 32-bit + inferiors. */ + +static int +is_elfv2_inferior (void) +{ + /* To be used as fallback if we're unable to determine the right result - + assume inferior uses the same ABI as gdbserver. */ +#if _CALL_ELF == 2 + const int def_res = 1; +#else + const int def_res = 0; +#endif + CORE_ADDR phdr; + Elf64_Ehdr ehdr; + + const struct target_desc *tdesc = current_process ()->tdesc; + int wordsize = register_size (tdesc, 0); + + if (!linux_get_auxv (wordsize, AT_PHDR, &phdr)) + return def_res; + + /* Assume ELF header is at the beginning of the page where program headers + are located. If it doesn't look like one, bail. */ + + read_inferior_memory (phdr & ~0xfff, (unsigned char *) &ehdr, sizeof ehdr); + if (memcmp(ehdr.e_ident, ELFMAG, SELFMAG)) + return def_res; + + return (ehdr.e_flags & EF_PPC64_ABI) == 2; +} + +#endif + +/* Generate a ds-form instruction in BUF and return the number of bytes written + + 0 6 11 16 30 32 + | OPCD | RST | RA | DS |XO| */ + +__attribute__((unused)) /* Maybe unused due to conditional compilation. */ +static int +gen_ds_form (uint32_t *buf, int opcd, int rst, int ra, int ds, int xo) +{ + uint32_t insn; + + gdb_assert ((opcd & ~0x3f) == 0); + gdb_assert ((rst & ~0x1f) == 0); + gdb_assert ((ra & ~0x1f) == 0); + gdb_assert ((xo & ~0x3) == 0); + + insn = (rst << 21) | (ra << 16) | (ds & 0xfffc) | (xo & 0x3); + *buf = (opcd << 26) | insn; + return 1; +} + +/* Followings are frequently used ds-form instructions. */ + +#define GEN_STD(buf, rs, ra, offset) gen_ds_form (buf, 62, rs, ra, offset, 0) +#define GEN_STDU(buf, rs, ra, offset) gen_ds_form (buf, 62, rs, ra, offset, 1) +#define GEN_LD(buf, rt, ra, offset) gen_ds_form (buf, 58, rt, ra, offset, 0) +#define GEN_LDU(buf, rt, ra, offset) gen_ds_form (buf, 58, rt, ra, offset, 1) + +/* Generate a d-form instruction in BUF. + + 0 6 11 16 32 + | OPCD | RST | RA | D | */ + +static int +gen_d_form (uint32_t *buf, int opcd, int rst, int ra, int si) +{ + uint32_t insn; + + gdb_assert ((opcd & ~0x3f) == 0); + gdb_assert ((rst & ~0x1f) == 0); + gdb_assert ((ra & ~0x1f) == 0); + + insn = (rst << 21) | (ra << 16) | (si & 0xffff); + *buf = (opcd << 26) | insn; + return 1; +} + +/* Followings are frequently used d-form instructions. */ + +#define GEN_ADDI(buf, rt, ra, si) gen_d_form (buf, 14, rt, ra, si) +#define GEN_ADDIS(buf, rt, ra, si) gen_d_form (buf, 15, rt, ra, si) +#define GEN_LI(buf, rt, si) GEN_ADDI (buf, rt, 0, si) +#define GEN_LIS(buf, rt, si) GEN_ADDIS (buf, rt, 0, si) +#define GEN_ORI(buf, rt, ra, si) gen_d_form (buf, 24, rt, ra, si) +#define GEN_ORIS(buf, rt, ra, si) gen_d_form (buf, 25, rt, ra, si) +#define GEN_LWZ(buf, rt, ra, si) gen_d_form (buf, 32, rt, ra, si) +#define GEN_STW(buf, rt, ra, si) gen_d_form (buf, 36, rt, ra, si) +#define GEN_STWU(buf, rt, ra, si) gen_d_form (buf, 37, rt, ra, si) + +/* Generate a xfx-form instruction in BUF and return the number of bytes + written. + + 0 6 11 21 31 32 + | OPCD | RST | RI | XO |/| */ + +static int +gen_xfx_form (uint32_t *buf, int opcd, int rst, int ri, int xo) +{ + uint32_t insn; + unsigned int n = ((ri & 0x1f) << 5) | ((ri >> 5) & 0x1f); + + gdb_assert ((opcd & ~0x3f) == 0); + gdb_assert ((rst & ~0x1f) == 0); + gdb_assert ((xo & ~0x3ff) == 0); + + insn = (rst << 21) | (n << 11) | (xo << 1); + *buf = (opcd << 26) | insn; + return 1; +} + +/* Followings are frequently used xfx-form instructions. */ + +#define GEN_MFSPR(buf, rt, spr) gen_xfx_form (buf, 31, rt, spr, 339) +#define GEN_MTSPR(buf, rt, spr) gen_xfx_form (buf, 31, rt, spr, 467) +#define GEN_MFCR(buf, rt) gen_xfx_form (buf, 31, rt, 0, 19) +#define GEN_MTCR(buf, rt) gen_xfx_form (buf, 31, rt, 0x3cf, 144) +#define GEN_SYNC(buf, L, E) gen_xfx_form (buf, 31, L & 0x3, \ + E & 0xf, 598) +#define GEN_LWSYNC(buf) GEN_SYNC (buf, 1, 0) + + +/* Generate a x-form instruction in BUF and return the number of bytes written. + + 0 6 11 16 21 31 32 + | OPCD | RST | RA | RB | XO |RC| */ + +static int +gen_x_form (uint32_t *buf, int opcd, int rst, int ra, int rb, int xo, int rc) +{ + uint32_t insn; + + gdb_assert ((opcd & ~0x3f) == 0); + gdb_assert ((rst & ~0x1f) == 0); + gdb_assert ((ra & ~0x1f) == 0); + gdb_assert ((rb & ~0x1f) == 0); + gdb_assert ((xo & ~0x3ff) == 0); + gdb_assert ((rc & ~1) == 0); + + insn = (rst << 21) | (ra << 16) | (rb << 11) | (xo << 1) | rc; + *buf = (opcd << 26) | insn; + return 1; +} + +/* Followings are frequently used x-form instructions. */ + +#define GEN_OR(buf, ra, rs, rb) gen_x_form (buf, 31, rs, ra, rb, 444, 0) +#define GEN_MR(buf, ra, rs) GEN_OR (buf, ra, rs, rs) +#define GEN_LWARX(buf, rt, ra, rb) gen_x_form (buf, 31, rt, ra, rb, 20, 0) +#define GEN_STWCX(buf, rs, ra, rb) gen_x_form (buf, 31, rs, ra, rb, 150, 1) +/* Assume bf = cr7. */ +#define GEN_CMPW(buf, ra, rb) gen_x_form (buf, 31, 28, ra, rb, 0, 0) + + +/* Generate a md-form instruction in BUF and return the number of bytes written. + + 0 6 11 16 21 27 30 31 32 + | OPCD | RS | RA | sh | mb | XO |sh|Rc| */ + +static int +gen_md_form (uint32_t *buf, int opcd, int rs, int ra, int sh, int mb, + int xo, int rc) +{ + uint32_t insn; + unsigned int n = ((mb & 0x1f) << 1) | ((mb >> 5) & 0x1); + unsigned int sh0_4 = sh & 0x1f; + unsigned int sh5 = (sh >> 5) & 1; + + gdb_assert ((opcd & ~0x3f) == 0); + gdb_assert ((rs & ~0x1f) == 0); + gdb_assert ((ra & ~0x1f) == 0); + gdb_assert ((sh & ~0x3f) == 0); + gdb_assert ((mb & ~0x3f) == 0); + gdb_assert ((xo & ~0x7) == 0); + gdb_assert ((rc & ~0x1) == 0); + + insn = (rs << 21) | (ra << 16) | (sh0_4 << 11) | (n << 5) + | (sh5 << 1) | (xo << 2) | (rc & 1); + *buf = (opcd << 26) | insn; + return 1; +} + +/* The following are frequently used md-form instructions. */ + +#define GEN_RLDICL(buf, ra, rs ,sh, mb) \ + gen_md_form (buf, 30, rs, ra, sh, mb, 0, 0) +#define GEN_RLDICR(buf, ra, rs ,sh, mb) \ + gen_md_form (buf, 30, rs, ra, sh, mb, 1, 0) + +/* Generate a i-form instruction in BUF and return the number of bytes written. + + 0 6 30 31 32 + | OPCD | LI |AA|LK| */ + +static int +gen_i_form (uint32_t *buf, int opcd, int li, int aa, int lk) +{ + uint32_t insn; + + gdb_assert ((opcd & ~0x3f) == 0); + + insn = (li & 0x3fffffc) | (aa & 1) | (lk & 1); + *buf = (opcd << 26) | insn; + return 1; +} + +/* The following are frequently used i-form instructions. */ + +#define GEN_B(buf, li) gen_i_form (buf, 18, li, 0, 0) +#define GEN_BL(buf, li) gen_i_form (buf, 18, li, 0, 1) + +/* Generate a b-form instruction in BUF and return the number of bytes written. + + 0 6 11 16 30 31 32 + | OPCD | BO | BI | BD |AA|LK| */ + +static int +gen_b_form (uint32_t *buf, int opcd, int bo, int bi, int bd, + int aa, int lk) +{ + uint32_t insn; + + gdb_assert ((opcd & ~0x3f) == 0); + gdb_assert ((bo & ~0x1f) == 0); + gdb_assert ((bi & ~0x1f) == 0); + + insn = (bo << 21) | (bi << 16) | (bd & 0xfffc) | (aa & 1) | (lk & 1); + *buf = (opcd << 26) | insn; + return 1; +} + +/* The following are frequently used b-form instructions. */ +/* Assume bi = cr7. */ +#define GEN_BNE(buf, bd) gen_b_form (buf, 16, 0x4, (7 << 2) | 2, bd, 0 ,0) + +/* GEN_LOAD and GEN_STORE generate 64- or 32-bit load/store for ppc64 or ppc32 + respectively. They are primary used for save/restore GPRs in jump-pad, + not used for bytecode compiling. */ + +#ifdef __powerpc64__ +#define GEN_LOAD(buf, rt, ra, si, is_64) (is_64 ? \ + GEN_LD (buf, rt, ra, si) : \ + GEN_LWZ (buf, rt, ra, si)) +#define GEN_STORE(buf, rt, ra, si, is_64) (is_64 ? \ + GEN_STD (buf, rt, ra, si) : \ + GEN_STW (buf, rt, ra, si)) +#else +#define GEN_LOAD(buf, rt, ra, si, is_64) GEN_LWZ (buf, rt, ra, si) +#define GEN_STORE(buf, rt, ra, si, is_64) GEN_STW (buf, rt, ra, si) +#endif + +/* Generate a sequence of instructions to load IMM in the register REG. + Write the instructions in BUF and return the number of bytes written. */ + +static int +gen_limm (uint32_t *buf, int reg, uint64_t imm, int is_64) +{ + uint32_t *p = buf; + + if ((imm + 32768) < 65536) + { + /* li reg, imm[15:0] */ + p += GEN_LI (p, reg, imm); + } + else if ((imm >> 32) == 0) + { + /* lis reg, imm[31:16] + ori reg, reg, imm[15:0] + rldicl reg, reg, 0, 32 */ + p += GEN_LIS (p, reg, (imm >> 16) & 0xffff); + if ((imm & 0xffff) != 0) + p += GEN_ORI (p, reg, reg, imm & 0xffff); + /* Clear upper 32-bit if sign-bit is set. */ + if (imm & (1u << 31) && is_64) + p += GEN_RLDICL (p, reg, reg, 0, 32); + } + else + { + gdb_assert (is_64); + /* lis reg, <imm[63:48]> + ori reg, reg, <imm[48:32]> + rldicr reg, reg, 32, 31 + oris reg, reg, <imm[31:16]> + ori reg, reg, <imm[15:0]> */ + p += GEN_LIS (p, reg, ((imm >> 48) & 0xffff)); + if (((imm >> 32) & 0xffff) != 0) + p += GEN_ORI (p, reg, reg, ((imm >> 32) & 0xffff)); + p += GEN_RLDICR (p, reg, reg, 32, 31); + if (((imm >> 16) & 0xffff) != 0) + p += GEN_ORIS (p, reg, reg, ((imm >> 16) & 0xffff)); + if ((imm & 0xffff) != 0) + p += GEN_ORI (p, reg, reg, (imm & 0xffff)); + } + + return p - buf; +} + +/* Generate a sequence for atomically exchange at location LOCK. + This code sequence clobbers r6, r7, r8. LOCK is the location for + the atomic-xchg, OLD_VALUE is expected old value stored in the + location, and R_NEW is a register for the new value. */ + +static int +gen_atomic_xchg (uint32_t *buf, CORE_ADDR lock, int old_value, int r_new, + int is_64) +{ + const int r_lock = 6; + const int r_old = 7; + const int r_tmp = 8; + uint32_t *p = buf; + + /* + 1: lwarx TMP, 0, LOCK + cmpwi TMP, OLD + bne 1b + stwcx. NEW, 0, LOCK + bne 1b */ + + p += gen_limm (p, r_lock, lock, is_64); + p += gen_limm (p, r_old, old_value, is_64); + + p += GEN_LWARX (p, r_tmp, 0, r_lock); + p += GEN_CMPW (p, r_tmp, r_old); + p += GEN_BNE (p, -8); + p += GEN_STWCX (p, r_new, 0, r_lock); + p += GEN_BNE (p, -16); + + return p - buf; +} + +/* Generate a sequence of instructions for calling a function + at address of FN. Return the number of bytes are written in BUF. */ + +static int +gen_call (uint32_t *buf, CORE_ADDR fn, int is_64, int is_opd) +{ + uint32_t *p = buf; + + /* Must be called by r12 for caller to calculate TOC address. */ + p += gen_limm (p, 12, fn, is_64); + if (is_opd) + { + p += GEN_LOAD (p, 11, 12, 16, is_64); + p += GEN_LOAD (p, 2, 12, 8, is_64); + p += GEN_LOAD (p, 12, 12, 0, is_64); + } + p += GEN_MTSPR (p, 12, 9); /* mtctr r12 */ + *p++ = 0x4e800421; /* bctrl */ + + return p - buf; +} + +/* Copy the instruction from OLDLOC to *TO, and update *TO to *TO + size + of instruction. This function is used to adjust pc-relative instructions + when copying. */ + +static void +ppc_relocate_instruction (CORE_ADDR *to, CORE_ADDR oldloc) +{ + uint32_t insn, op6; + long rel, newrel; + + read_inferior_memory (oldloc, (unsigned char *) &insn, 4); + op6 = PPC_OP6 (insn); + + if (op6 == 18 && (insn & 2) == 0) + { + /* branch && AA = 0 */ + rel = PPC_LI (insn); + newrel = (oldloc - *to) + rel; + + /* Out of range. Cannot relocate instruction. */ + if (newrel >= (1 << 25) || newrel < -(1 << 25)) + return; + + insn = (insn & ~0x3fffffc) | (newrel & 0x3fffffc); + } + else if (op6 == 16 && (insn & 2) == 0) + { + /* conditional branch && AA = 0 */ + + /* If the new relocation is too big for even a 26-bit unconditional + branch, there is nothing we can do. Just abort. + + Otherwise, if it can be fit in 16-bit conditional branch, just + copy the instruction and relocate the address. + + If the it's big for conditional-branch (16-bit), try to invert the + condition and jump with 26-bit branch. For example, + + beq .Lgoto + INSN1 + + => + + bne 1f (+8) + b .Lgoto + 1:INSN1 + + After this transform, we are actually jump from *TO+4 instead of *TO, + so check the relocation again because it will be 1-insn farther then + before if *TO is after OLDLOC. + + + For BDNZT (or so) is transformed from + + bdnzt eq, .Lgoto + INSN1 + + => + + bdz 1f (+12) + bf eq, 1f (+8) + b .Lgoto + 1:INSN1 + + See also "BO field encodings". */ + + rel = PPC_BD (insn); + newrel = (oldloc - *to) + rel; + + if (newrel < (1 << 15) && newrel >= -(1 << 15)) + insn = (insn & ~0xfffc) | (newrel & 0xfffc); + else if ((PPC_BO (insn) & 0x14) == 0x4 || (PPC_BO (insn) & 0x14) == 0x10) + { + newrel -= 4; + + /* Out of range. Cannot relocate instruction. */ + if (newrel >= (1 << 25) || newrel < -(1 << 25)) + return; + + if ((PPC_BO (insn) & 0x14) == 0x4) + insn ^= (1 << 24); + else if ((PPC_BO (insn) & 0x14) == 0x10) + insn ^= (1 << 22); + + /* Jump over the unconditional branch. */ + insn = (insn & ~0xfffc) | 0x8; + target_write_memory (*to, (unsigned char *) &insn, 4); + *to += 4; + + /* Build a unconditional branch and copy LK bit. */ + insn = (18 << 26) | (0x3fffffc & newrel) | (insn & 0x3); + target_write_memory (*to, (unsigned char *) &insn, 4); + *to += 4; + + return; + } + else if ((PPC_BO (insn) & 0x14) == 0) + { + uint32_t bdnz_insn = (16 << 26) | (0x10 << 21) | 12; + uint32_t bf_insn = (16 << 26) | (0x4 << 21) | 8; + + newrel -= 8; + + /* Out of range. Cannot relocate instruction. */ + if (newrel >= (1 << 25) || newrel < -(1 << 25)) + return; + + /* Copy BI field. */ + bf_insn |= (insn & 0x1f0000); + + /* Invert condition. */ + bdnz_insn |= (insn ^ (1 << 22)) & (1 << 22); + bf_insn |= (insn ^ (1 << 24)) & (1 << 24); + + target_write_memory (*to, (unsigned char *) &bdnz_insn, 4); + *to += 4; + target_write_memory (*to, (unsigned char *) &bf_insn, 4); + *to += 4; + + /* Build a unconditional branch and copy LK bit. */ + insn = (18 << 26) | (0x3fffffc & newrel) | (insn & 0x3); + target_write_memory (*to, (unsigned char *) &insn, 4); + *to += 4; + + return; + } + else /* (BO & 0x14) == 0x14, branch always. */ + { + /* Out of range. Cannot relocate instruction. */ + if (newrel >= (1 << 25) || newrel < -(1 << 25)) + return; + + /* Build a unconditional branch and copy LK bit. */ + insn = (18 << 26) | (0x3fffffc & newrel) | (insn & 0x3); + target_write_memory (*to, (unsigned char *) &insn, 4); + *to += 4; + + return; + } + } + + target_write_memory (*to, (unsigned char *) &insn, 4); + *to += 4; +} + +bool +ppc_target::supports_fast_tracepoints () +{ + return true; +} + +/* Implement install_fast_tracepoint_jump_pad of target_ops. + See target.h for details. */ + +int +ppc_target::install_fast_tracepoint_jump_pad (CORE_ADDR tpoint, + CORE_ADDR tpaddr, + CORE_ADDR collector, + CORE_ADDR lockaddr, + ULONGEST orig_size, + CORE_ADDR *jump_entry, + CORE_ADDR *trampoline, + ULONGEST *trampoline_size, + unsigned char *jjump_pad_insn, + ULONGEST *jjump_pad_insn_size, + CORE_ADDR *adjusted_insn_addr, + CORE_ADDR *adjusted_insn_addr_end, + char *err) +{ + uint32_t buf[256]; + uint32_t *p = buf; + int j, offset; + CORE_ADDR buildaddr = *jump_entry; + const CORE_ADDR entryaddr = *jump_entry; + int rsz, min_frame, frame_size, tp_reg; +#ifdef __powerpc64__ + struct regcache *regcache = get_thread_regcache (current_thread, 0); + int is_64 = register_size (regcache->tdesc, 0) == 8; + int is_opd = is_64 && !is_elfv2_inferior (); +#else + int is_64 = 0, is_opd = 0; +#endif + +#ifdef __powerpc64__ + if (is_64) + { + /* Minimum frame size is 32 bytes for ELFv2, and 112 bytes for ELFv1. */ + rsz = 8; + min_frame = 112; + frame_size = (40 * rsz) + min_frame; + tp_reg = 13; + } + else + { +#endif + rsz = 4; + min_frame = 16; + frame_size = (40 * rsz) + min_frame; + tp_reg = 2; +#ifdef __powerpc64__ + } +#endif + + /* Stack frame layout for this jump pad, + + High thread_area (r13/r2) | + tpoint - collecting_t obj + PC/<tpaddr> | +36 + CTR | +35 + LR | +34 + XER | +33 + CR | +32 + R31 | + R29 | + ... | + R1 | +1 + R0 - collected registers + ... | + ... | + Low Back-chain - + + + The code flow of this jump pad, + + 1. Adjust SP + 2. Save GPR and SPR + 3. Prepare argument + 4. Call gdb_collector + 5. Restore GPR and SPR + 6. Restore SP + 7. Build a jump for back to the program + 8. Copy/relocate original instruction + 9. Build a jump for replacing original instruction. */ + + /* Adjust stack pointer. */ + if (is_64) + p += GEN_STDU (p, 1, 1, -frame_size); /* stdu r1,-frame_size(r1) */ + else + p += GEN_STWU (p, 1, 1, -frame_size); /* stwu r1,-frame_size(r1) */ + + /* Store GPRs. Save R1 later, because it had just been modified, but + we want the original value. */ + for (j = 2; j < 32; j++) + p += GEN_STORE (p, j, 1, min_frame + j * rsz, is_64); + p += GEN_STORE (p, 0, 1, min_frame + 0 * rsz, is_64); + /* Set r0 to the original value of r1 before adjusting stack frame, + and then save it. */ + p += GEN_ADDI (p, 0, 1, frame_size); + p += GEN_STORE (p, 0, 1, min_frame + 1 * rsz, is_64); + + /* Save CR, XER, LR, and CTR. */ + p += GEN_MFCR (p, 3); /* mfcr r3 */ + p += GEN_MFSPR (p, 4, 1); /* mfxer r4 */ + p += GEN_MFSPR (p, 5, 8); /* mflr r5 */ + p += GEN_MFSPR (p, 6, 9); /* mfctr r6 */ + p += GEN_STORE (p, 3, 1, min_frame + 32 * rsz, is_64);/* std r3, 32(r1) */ + p += GEN_STORE (p, 4, 1, min_frame + 33 * rsz, is_64);/* std r4, 33(r1) */ + p += GEN_STORE (p, 5, 1, min_frame + 34 * rsz, is_64);/* std r5, 34(r1) */ + p += GEN_STORE (p, 6, 1, min_frame + 35 * rsz, is_64);/* std r6, 35(r1) */ + + /* Save PC<tpaddr> */ + p += gen_limm (p, 3, tpaddr, is_64); + p += GEN_STORE (p, 3, 1, min_frame + 36 * rsz, is_64); + + + /* Setup arguments to collector. */ + /* Set r4 to collected registers. */ + p += GEN_ADDI (p, 4, 1, min_frame); + /* Set r3 to TPOINT. */ + p += gen_limm (p, 3, tpoint, is_64); + + /* Prepare collecting_t object for lock. */ + p += GEN_STORE (p, 3, 1, min_frame + 37 * rsz, is_64); + p += GEN_STORE (p, tp_reg, 1, min_frame + 38 * rsz, is_64); + /* Set R5 to collecting object. */ + p += GEN_ADDI (p, 5, 1, 37 * rsz); + + p += GEN_LWSYNC (p); + p += gen_atomic_xchg (p, lockaddr, 0, 5, is_64); + p += GEN_LWSYNC (p); + + /* Call to collector. */ + p += gen_call (p, collector, is_64, is_opd); + + /* Simply write 0 to release the lock. */ + p += gen_limm (p, 3, lockaddr, is_64); + p += gen_limm (p, 4, 0, is_64); + p += GEN_LWSYNC (p); + p += GEN_STORE (p, 4, 3, 0, is_64); + + /* Restore stack and registers. */ + p += GEN_LOAD (p, 3, 1, min_frame + 32 * rsz, is_64); /* ld r3, 32(r1) */ + p += GEN_LOAD (p, 4, 1, min_frame + 33 * rsz, is_64); /* ld r4, 33(r1) */ + p += GEN_LOAD (p, 5, 1, min_frame + 34 * rsz, is_64); /* ld r5, 34(r1) */ + p += GEN_LOAD (p, 6, 1, min_frame + 35 * rsz, is_64); /* ld r6, 35(r1) */ + p += GEN_MTCR (p, 3); /* mtcr r3 */ + p += GEN_MTSPR (p, 4, 1); /* mtxer r4 */ + p += GEN_MTSPR (p, 5, 8); /* mtlr r5 */ + p += GEN_MTSPR (p, 6, 9); /* mtctr r6 */ + + /* Restore GPRs. */ + for (j = 2; j < 32; j++) + p += GEN_LOAD (p, j, 1, min_frame + j * rsz, is_64); + p += GEN_LOAD (p, 0, 1, min_frame + 0 * rsz, is_64); + /* Restore SP. */ + p += GEN_ADDI (p, 1, 1, frame_size); + + /* Flush instructions to inferior memory. */ + target_write_memory (buildaddr, (unsigned char *) buf, (p - buf) * 4); + + /* Now, insert the original instruction to execute in the jump pad. */ + *adjusted_insn_addr = buildaddr + (p - buf) * 4; + *adjusted_insn_addr_end = *adjusted_insn_addr; + ppc_relocate_instruction (adjusted_insn_addr_end, tpaddr); + + /* Verify the relocation size. If should be 4 for normal copy, + 8 or 12 for some conditional branch. */ + if ((*adjusted_insn_addr_end - *adjusted_insn_addr == 0) + || (*adjusted_insn_addr_end - *adjusted_insn_addr > 12)) + { + sprintf (err, "E.Unexpected instruction length = %d" + "when relocate instruction.", + (int) (*adjusted_insn_addr_end - *adjusted_insn_addr)); + return 1; + } + + buildaddr = *adjusted_insn_addr_end; + p = buf; + /* Finally, write a jump back to the program. */ + offset = (tpaddr + 4) - buildaddr; + if (offset >= (1 << 25) || offset < -(1 << 25)) + { + sprintf (err, "E.Jump back from jump pad too far from tracepoint " + "(offset 0x%x > 26-bit).", offset); + return 1; + } + /* b <tpaddr+4> */ + p += GEN_B (p, offset); + target_write_memory (buildaddr, (unsigned char *) buf, (p - buf) * 4); + *jump_entry = buildaddr + (p - buf) * 4; + + /* The jump pad is now built. Wire in a jump to our jump pad. This + is always done last (by our caller actually), so that we can + install fast tracepoints with threads running. This relies on + the agent's atomic write support. */ + offset = entryaddr - tpaddr; + if (offset >= (1 << 25) || offset < -(1 << 25)) + { + sprintf (err, "E.Jump back from jump pad too far from tracepoint " + "(offset 0x%x > 26-bit).", offset); + return 1; + } + /* b <jentry> */ + GEN_B ((uint32_t *) jjump_pad_insn, offset); + *jjump_pad_insn_size = 4; + + return 0; +} + +/* Returns the minimum instruction length for installing a tracepoint. */ + +int +ppc_target::get_min_fast_tracepoint_insn_len () +{ + return 4; +} + +/* Emits a given buffer into the target at current_insn_ptr. Length + is in units of 32-bit words. */ + +static void +emit_insns (uint32_t *buf, int n) +{ + n = n * sizeof (uint32_t); + target_write_memory (current_insn_ptr, (unsigned char *) buf, n); + current_insn_ptr += n; +} + +#define __EMIT_ASM(NAME, INSNS) \ + do \ + { \ + extern uint32_t start_bcax_ ## NAME []; \ + extern uint32_t end_bcax_ ## NAME []; \ + emit_insns (start_bcax_ ## NAME, \ + end_bcax_ ## NAME - start_bcax_ ## NAME); \ + __asm__ (".section .text.__ppcbcax\n\t" \ + "start_bcax_" #NAME ":\n\t" \ + INSNS "\n\t" \ + "end_bcax_" #NAME ":\n\t" \ + ".previous\n\t"); \ + } while (0) + +#define _EMIT_ASM(NAME, INSNS) __EMIT_ASM (NAME, INSNS) +#define EMIT_ASM(INSNS) _EMIT_ASM (__LINE__, INSNS) + +/* + + Bytecode execution stack frame - 32-bit + + | LR save area (SP + 4) + SP' -> +- Back chain (SP + 0) + | Save r31 for access saved arguments + | Save r30 for bytecode stack pointer + | Save r4 for incoming argument *value + | Save r3 for incoming argument regs + r30 -> +- Bytecode execution stack + | + | 64-byte (8 doublewords) at initial. + | Expand stack as needed. + | + +- + | Some padding for minimum stack frame and 16-byte alignment. + | 16 bytes. + SP +- Back-chain (SP') + + initial frame size + = 16 + (4 * 4) + 64 + = 96 + + r30 is the stack-pointer for bytecode machine. + It should point to next-empty, so we can use LDU for pop. + r3 is used for cache of the high part of TOP value. + It was the first argument, pointer to regs. + r4 is used for cache of the low part of TOP value. + It was the second argument, pointer to the result. + We should set *result = TOP after leaving this function. + + Note: + * To restore stack at epilogue + => sp = r31 + * To check stack is big enough for bytecode execution. + => r30 - 8 > SP + 8 + * To return execution result. + => 0(r4) = TOP + + */ + +/* Regardless of endian, register 3 is always high part, 4 is low part. + These defines are used when the register pair is stored/loaded. + Likewise, to simplify code, have a similiar define for 5:6. */ + +#if __BYTE_ORDER == __LITTLE_ENDIAN +#define TOP_FIRST "4" +#define TOP_SECOND "3" +#define TMP_FIRST "6" +#define TMP_SECOND "5" +#else +#define TOP_FIRST "3" +#define TOP_SECOND "4" +#define TMP_FIRST "5" +#define TMP_SECOND "6" +#endif + +/* Emit prologue in inferior memory. See above comments. */ + +static void +ppc_emit_prologue (void) +{ + EMIT_ASM (/* Save return address. */ + "mflr 0 \n" + "stw 0, 4(1) \n" + /* Adjust SP. 96 is the initial frame size. */ + "stwu 1, -96(1) \n" + /* Save r30 and incoming arguments. */ + "stw 31, 96-4(1) \n" + "stw 30, 96-8(1) \n" + "stw 4, 96-12(1) \n" + "stw 3, 96-16(1) \n" + /* Point r31 to original r1 for access arguments. */ + "addi 31, 1, 96 \n" + /* Set r30 to pointing stack-top. */ + "addi 30, 1, 64 \n" + /* Initial r3/TOP to 0. */ + "li 3, 0 \n" + "li 4, 0 \n"); +} + +/* Emit epilogue in inferior memory. See above comments. */ + +static void +ppc_emit_epilogue (void) +{ + EMIT_ASM (/* *result = TOP */ + "lwz 5, -12(31) \n" + "stw " TOP_FIRST ", 0(5) \n" + "stw " TOP_SECOND ", 4(5) \n" + /* Restore registers. */ + "lwz 31, -4(31) \n" + "lwz 30, -8(31) \n" + /* Restore SP. */ + "lwz 1, 0(1) \n" + /* Restore LR. */ + "lwz 0, 4(1) \n" + /* Return 0 for no-error. */ + "li 3, 0 \n" + "mtlr 0 \n" + "blr \n"); +} + +/* TOP = stack[--sp] + TOP */ + +static void +ppc_emit_add (void) +{ + EMIT_ASM ("lwzu " TMP_FIRST ", 8(30) \n" + "lwz " TMP_SECOND ", 4(30)\n" + "addc 4, 6, 4 \n" + "adde 3, 5, 3 \n"); +} + +/* TOP = stack[--sp] - TOP */ + +static void +ppc_emit_sub (void) +{ + EMIT_ASM ("lwzu " TMP_FIRST ", 8(30) \n" + "lwz " TMP_SECOND ", 4(30) \n" + "subfc 4, 4, 6 \n" + "subfe 3, 3, 5 \n"); +} + +/* TOP = stack[--sp] * TOP */ + +static void +ppc_emit_mul (void) +{ + EMIT_ASM ("lwzu " TMP_FIRST ", 8(30) \n" + "lwz " TMP_SECOND ", 4(30) \n" + "mulhwu 7, 6, 4 \n" + "mullw 3, 6, 3 \n" + "mullw 5, 4, 5 \n" + "mullw 4, 6, 4 \n" + "add 3, 5, 3 \n" + "add 3, 7, 3 \n"); +} + +/* TOP = stack[--sp] << TOP */ + +static void +ppc_emit_lsh (void) +{ + EMIT_ASM ("lwzu " TMP_FIRST ", 8(30) \n" + "lwz " TMP_SECOND ", 4(30) \n" + "subfic 3, 4, 32\n" /* r3 = 32 - TOP */ + "addi 7, 4, -32\n" /* r7 = TOP - 32 */ + "slw 5, 5, 4\n" /* Shift high part left */ + "slw 4, 6, 4\n" /* Shift low part left */ + "srw 3, 6, 3\n" /* Shift low to high if shift < 32 */ + "slw 7, 6, 7\n" /* Shift low to high if shift >= 32 */ + "or 3, 5, 3\n" + "or 3, 7, 3\n"); /* Assemble high part */ +} + +/* Top = stack[--sp] >> TOP + (Arithmetic shift right) */ + +static void +ppc_emit_rsh_signed (void) +{ + EMIT_ASM ("lwzu " TMP_FIRST ", 8(30) \n" + "lwz " TMP_SECOND ", 4(30) \n" + "addi 7, 4, -32\n" /* r7 = TOP - 32 */ + "sraw 3, 5, 4\n" /* Shift high part right */ + "cmpwi 7, 1\n" + "blt 0, 1f\n" /* If shift <= 32, goto 1: */ + "sraw 4, 5, 7\n" /* Shift high to low */ + "b 2f\n" + "1:\n" + "subfic 7, 4, 32\n" /* r7 = 32 - TOP */ + "srw 4, 6, 4\n" /* Shift low part right */ + "slw 5, 5, 7\n" /* Shift high to low */ + "or 4, 4, 5\n" /* Assemble low part */ + "2:\n"); +} + +/* Top = stack[--sp] >> TOP + (Logical shift right) */ + +static void +ppc_emit_rsh_unsigned (void) +{ + EMIT_ASM ("lwzu " TMP_FIRST ", 8(30) \n" + "lwz " TMP_SECOND ", 4(30) \n" + "subfic 3, 4, 32\n" /* r3 = 32 - TOP */ + "addi 7, 4, -32\n" /* r7 = TOP - 32 */ + "srw 6, 6, 4\n" /* Shift low part right */ + "slw 3, 5, 3\n" /* Shift high to low if shift < 32 */ + "srw 7, 5, 7\n" /* Shift high to low if shift >= 32 */ + "or 6, 6, 3\n" + "srw 3, 5, 4\n" /* Shift high part right */ + "or 4, 6, 7\n"); /* Assemble low part */ +} + +/* Emit code for signed-extension specified by ARG. */ + +static void +ppc_emit_ext (int arg) +{ + switch (arg) + { + case 8: + EMIT_ASM ("extsb 4, 4\n" + "srawi 3, 4, 31"); + break; + case 16: + EMIT_ASM ("extsh 4, 4\n" + "srawi 3, 4, 31"); + break; + case 32: + EMIT_ASM ("srawi 3, 4, 31"); + break; + default: + emit_error = 1; + } +} + +/* Emit code for zero-extension specified by ARG. */ + +static void +ppc_emit_zero_ext (int arg) +{ + switch (arg) + { + case 8: + EMIT_ASM ("clrlwi 4,4,24\n" + "li 3, 0\n"); + break; + case 16: + EMIT_ASM ("clrlwi 4,4,16\n" + "li 3, 0\n"); + break; + case 32: + EMIT_ASM ("li 3, 0"); + break; + default: + emit_error = 1; + } +} + +/* TOP = !TOP + i.e., TOP = (TOP == 0) ? 1 : 0; */ + +static void +ppc_emit_log_not (void) +{ + EMIT_ASM ("or 4, 3, 4 \n" + "cntlzw 4, 4 \n" + "srwi 4, 4, 5 \n" + "li 3, 0 \n"); +} + +/* TOP = stack[--sp] & TOP */ + +static void +ppc_emit_bit_and (void) +{ + EMIT_ASM ("lwzu " TMP_FIRST ", 8(30) \n" + "lwz " TMP_SECOND ", 4(30) \n" + "and 4, 6, 4 \n" + "and 3, 5, 3 \n"); +} + +/* TOP = stack[--sp] | TOP */ + +static void +ppc_emit_bit_or (void) +{ + EMIT_ASM ("lwzu " TMP_FIRST ", 8(30) \n" + "lwz " TMP_SECOND ", 4(30) \n" + "or 4, 6, 4 \n" + "or 3, 5, 3 \n"); +} + +/* TOP = stack[--sp] ^ TOP */ + +static void +ppc_emit_bit_xor (void) +{ + EMIT_ASM ("lwzu " TMP_FIRST ", 8(30) \n" + "lwz " TMP_SECOND ", 4(30) \n" + "xor 4, 6, 4 \n" + "xor 3, 5, 3 \n"); +} + +/* TOP = ~TOP + i.e., TOP = ~(TOP | TOP) */ + +static void +ppc_emit_bit_not (void) +{ + EMIT_ASM ("nor 3, 3, 3 \n" + "nor 4, 4, 4 \n"); +} + +/* TOP = stack[--sp] == TOP */ + +static void +ppc_emit_equal (void) +{ + EMIT_ASM ("lwzu " TMP_FIRST ", 8(30) \n" + "lwz " TMP_SECOND ", 4(30) \n" + "xor 4, 6, 4 \n" + "xor 3, 5, 3 \n" + "or 4, 3, 4 \n" + "cntlzw 4, 4 \n" + "srwi 4, 4, 5 \n" + "li 3, 0 \n"); +} + +/* TOP = stack[--sp] < TOP + (Signed comparison) */ + +static void +ppc_emit_less_signed (void) +{ + EMIT_ASM ("lwzu " TMP_FIRST ", 8(30) \n" + "lwz " TMP_SECOND ", 4(30) \n" + "cmplw 6, 6, 4 \n" + "cmpw 7, 5, 3 \n" + /* CR6 bit 0 = low less and high equal */ + "crand 6*4+0, 6*4+0, 7*4+2\n" + /* CR7 bit 0 = (low less and high equal) or high less */ + "cror 7*4+0, 7*4+0, 6*4+0\n" + "mfcr 4 \n" + "rlwinm 4, 4, 29, 31, 31 \n" + "li 3, 0 \n"); +} + +/* TOP = stack[--sp] < TOP + (Unsigned comparison) */ + +static void +ppc_emit_less_unsigned (void) +{ + EMIT_ASM ("lwzu " TMP_FIRST ", 8(30) \n" + "lwz " TMP_SECOND ", 4(30) \n" + "cmplw 6, 6, 4 \n" + "cmplw 7, 5, 3 \n" + /* CR6 bit 0 = low less and high equal */ + "crand 6*4+0, 6*4+0, 7*4+2\n" + /* CR7 bit 0 = (low less and high equal) or high less */ + "cror 7*4+0, 7*4+0, 6*4+0\n" + "mfcr 4 \n" + "rlwinm 4, 4, 29, 31, 31 \n" + "li 3, 0 \n"); +} + +/* Access the memory address in TOP in size of SIZE. + Zero-extend the read value. */ + +static void +ppc_emit_ref (int size) +{ + switch (size) + { + case 1: + EMIT_ASM ("lbz 4, 0(4)\n" + "li 3, 0"); + break; + case 2: + EMIT_ASM ("lhz 4, 0(4)\n" + "li 3, 0"); + break; + case 4: + EMIT_ASM ("lwz 4, 0(4)\n" + "li 3, 0"); + break; + case 8: + if (__BYTE_ORDER == __LITTLE_ENDIAN) + EMIT_ASM ("lwz 3, 4(4)\n" + "lwz 4, 0(4)"); + else + EMIT_ASM ("lwz 3, 0(4)\n" + "lwz 4, 4(4)"); + break; + } +} + +/* TOP = NUM */ + +static void +ppc_emit_const (LONGEST num) +{ + uint32_t buf[10]; + uint32_t *p = buf; + + p += gen_limm (p, 3, num >> 32 & 0xffffffff, 0); + p += gen_limm (p, 4, num & 0xffffffff, 0); + + emit_insns (buf, p - buf); + gdb_assert ((p - buf) <= (sizeof (buf) / sizeof (*buf))); +} + +/* Set TOP to the value of register REG by calling get_raw_reg function + with two argument, collected buffer and register number. */ + +static void +ppc_emit_reg (int reg) +{ + uint32_t buf[13]; + uint32_t *p = buf; + + /* fctx->regs is passed in r3 and then saved in -16(31). */ + p += GEN_LWZ (p, 3, 31, -16); + p += GEN_LI (p, 4, reg); /* li r4, reg */ + p += gen_call (p, get_raw_reg_func_addr (), 0, 0); + + emit_insns (buf, p - buf); + gdb_assert ((p - buf) <= (sizeof (buf) / sizeof (*buf))); + + if (__BYTE_ORDER == __LITTLE_ENDIAN) + { + EMIT_ASM ("mr 5, 4\n" + "mr 4, 3\n" + "mr 3, 5\n"); + } +} + +/* TOP = stack[--sp] */ + +static void +ppc_emit_pop (void) +{ + EMIT_ASM ("lwzu " TOP_FIRST ", 8(30) \n" + "lwz " TOP_SECOND ", 4(30) \n"); +} + +/* stack[sp++] = TOP + + Because we may use up bytecode stack, expand 8 doublewords more + if needed. */ + +static void +ppc_emit_stack_flush (void) +{ + /* Make sure bytecode stack is big enough before push. + Otherwise, expand 64-byte more. */ + + EMIT_ASM (" stw " TOP_FIRST ", 0(30) \n" + " stw " TOP_SECOND ", 4(30)\n" + " addi 5, 30, -(8 + 8) \n" + " cmpw 7, 5, 1 \n" + " bgt 7, 1f \n" + " stwu 31, -64(1) \n" + "1:addi 30, 30, -8 \n"); +} + +/* Swap TOP and stack[sp-1] */ + +static void +ppc_emit_swap (void) +{ + EMIT_ASM ("lwz " TMP_FIRST ", 8(30) \n" + "lwz " TMP_SECOND ", 12(30) \n" + "stw " TOP_FIRST ", 8(30) \n" + "stw " TOP_SECOND ", 12(30) \n" + "mr 3, 5 \n" + "mr 4, 6 \n"); +} + +/* Discard N elements in the stack. Also used for ppc64. */ + +static void +ppc_emit_stack_adjust (int n) +{ + uint32_t buf[6]; + uint32_t *p = buf; + + n = n << 3; + if ((n >> 15) != 0) + { + emit_error = 1; + return; + } + + p += GEN_ADDI (p, 30, 30, n); + + emit_insns (buf, p - buf); + gdb_assert ((p - buf) <= (sizeof (buf) / sizeof (*buf))); +} + +/* Call function FN. */ + +static void +ppc_emit_call (CORE_ADDR fn) +{ + uint32_t buf[11]; + uint32_t *p = buf; + + p += gen_call (p, fn, 0, 0); + + emit_insns (buf, p - buf); + gdb_assert ((p - buf) <= (sizeof (buf) / sizeof (*buf))); +} + +/* FN's prototype is `LONGEST(*fn)(int)'. + TOP = fn (arg1) + */ + +static void +ppc_emit_int_call_1 (CORE_ADDR fn, int arg1) +{ + uint32_t buf[15]; + uint32_t *p = buf; + + /* Setup argument. arg1 is a 16-bit value. */ + p += gen_limm (p, 3, (uint32_t) arg1, 0); + p += gen_call (p, fn, 0, 0); + + emit_insns (buf, p - buf); + gdb_assert ((p - buf) <= (sizeof (buf) / sizeof (*buf))); + + if (__BYTE_ORDER == __LITTLE_ENDIAN) + { + EMIT_ASM ("mr 5, 4\n" + "mr 4, 3\n" + "mr 3, 5\n"); + } +} + +/* FN's prototype is `void(*fn)(int,LONGEST)'. + fn (arg1, TOP) + + TOP should be preserved/restored before/after the call. */ + +static void +ppc_emit_void_call_2 (CORE_ADDR fn, int arg1) +{ + uint32_t buf[21]; + uint32_t *p = buf; + + /* Save TOP. 0(30) is next-empty. */ + p += GEN_STW (p, 3, 30, 0); + p += GEN_STW (p, 4, 30, 4); + + /* Setup argument. arg1 is a 16-bit value. */ + if (__BYTE_ORDER == __LITTLE_ENDIAN) + { + p += GEN_MR (p, 5, 4); + p += GEN_MR (p, 6, 3); + } + else + { + p += GEN_MR (p, 5, 3); + p += GEN_MR (p, 6, 4); + } + p += gen_limm (p, 3, (uint32_t) arg1, 0); + p += gen_call (p, fn, 0, 0); + + /* Restore TOP */ + p += GEN_LWZ (p, 3, 30, 0); + p += GEN_LWZ (p, 4, 30, 4); + + emit_insns (buf, p - buf); + gdb_assert ((p - buf) <= (sizeof (buf) / sizeof (*buf))); +} + +/* Note in the following goto ops: + + When emitting goto, the target address is later relocated by + write_goto_address. OFFSET_P is the offset of the branch instruction + in the code sequence, and SIZE_P is how to relocate the instruction, + recognized by ppc_write_goto_address. In current implementation, + SIZE can be either 24 or 14 for branch of conditional-branch instruction. + */ + +/* If TOP is true, goto somewhere. Otherwise, just fall-through. */ + +static void +ppc_emit_if_goto (int *offset_p, int *size_p) +{ + EMIT_ASM ("or. 3, 3, 4 \n" + "lwzu " TOP_FIRST ", 8(30) \n" + "lwz " TOP_SECOND ", 4(30) \n" + "1:bne 0, 1b \n"); + + if (offset_p) + *offset_p = 12; + if (size_p) + *size_p = 14; +} + +/* Unconditional goto. Also used for ppc64. */ + +static void +ppc_emit_goto (int *offset_p, int *size_p) +{ + EMIT_ASM ("1:b 1b"); + + if (offset_p) + *offset_p = 0; + if (size_p) + *size_p = 24; +} + +/* Goto if stack[--sp] == TOP */ + +static void +ppc_emit_eq_goto (int *offset_p, int *size_p) +{ + EMIT_ASM ("lwzu " TMP_FIRST ", 8(30) \n" + "lwz " TMP_SECOND ", 4(30) \n" + "xor 4, 6, 4 \n" + "xor 3, 5, 3 \n" + "or. 3, 3, 4 \n" + "lwzu " TOP_FIRST ", 8(30) \n" + "lwz " TOP_SECOND ", 4(30) \n" + "1:beq 0, 1b \n"); + + if (offset_p) + *offset_p = 28; + if (size_p) + *size_p = 14; +} + +/* Goto if stack[--sp] != TOP */ + +static void +ppc_emit_ne_goto (int *offset_p, int *size_p) +{ + EMIT_ASM ("lwzu " TMP_FIRST ", 8(30) \n" + "lwz " TMP_SECOND ", 4(30) \n" + "xor 4, 6, 4 \n" + "xor 3, 5, 3 \n" + "or. 3, 3, 4 \n" + "lwzu " TOP_FIRST ", 8(30) \n" + "lwz " TOP_SECOND ", 4(30) \n" + "1:bne 0, 1b \n"); + + if (offset_p) + *offset_p = 28; + if (size_p) + *size_p = 14; +} + +/* Goto if stack[--sp] < TOP */ + +static void +ppc_emit_lt_goto (int *offset_p, int *size_p) +{ + EMIT_ASM ("lwzu " TMP_FIRST ", 8(30) \n" + "lwz " TMP_SECOND ", 4(30) \n" + "cmplw 6, 6, 4 \n" + "cmpw 7, 5, 3 \n" + /* CR6 bit 0 = low less and high equal */ + "crand 6*4+0, 6*4+0, 7*4+2\n" + /* CR7 bit 0 = (low less and high equal) or high less */ + "cror 7*4+0, 7*4+0, 6*4+0\n" + "lwzu " TOP_FIRST ", 8(30) \n" + "lwz " TOP_SECOND ", 4(30)\n" + "1:blt 7, 1b \n"); + + if (offset_p) + *offset_p = 32; + if (size_p) + *size_p = 14; +} + +/* Goto if stack[--sp] <= TOP */ + +static void +ppc_emit_le_goto (int *offset_p, int *size_p) +{ + EMIT_ASM ("lwzu " TMP_FIRST ", 8(30) \n" + "lwz " TMP_SECOND ", 4(30) \n" + "cmplw 6, 6, 4 \n" + "cmpw 7, 5, 3 \n" + /* CR6 bit 0 = low less/equal and high equal */ + "crandc 6*4+0, 7*4+2, 6*4+1\n" + /* CR7 bit 0 = (low less/eq and high equal) or high less */ + "cror 7*4+0, 7*4+0, 6*4+0\n" + "lwzu " TOP_FIRST ", 8(30) \n" + "lwz " TOP_SECOND ", 4(30)\n" + "1:blt 7, 1b \n"); + + if (offset_p) + *offset_p = 32; + if (size_p) + *size_p = 14; +} + +/* Goto if stack[--sp] > TOP */ + +static void +ppc_emit_gt_goto (int *offset_p, int *size_p) +{ + EMIT_ASM ("lwzu " TMP_FIRST ", 8(30) \n" + "lwz " TMP_SECOND ", 4(30) \n" + "cmplw 6, 6, 4 \n" + "cmpw 7, 5, 3 \n" + /* CR6 bit 0 = low greater and high equal */ + "crand 6*4+0, 6*4+1, 7*4+2\n" + /* CR7 bit 0 = (low greater and high equal) or high greater */ + "cror 7*4+0, 7*4+1, 6*4+0\n" + "lwzu " TOP_FIRST ", 8(30) \n" + "lwz " TOP_SECOND ", 4(30)\n" + "1:blt 7, 1b \n"); + + if (offset_p) + *offset_p = 32; + if (size_p) + *size_p = 14; +} + +/* Goto if stack[--sp] >= TOP */ + +static void +ppc_emit_ge_goto (int *offset_p, int *size_p) +{ + EMIT_ASM ("lwzu " TMP_FIRST ", 8(30) \n" + "lwz " TMP_SECOND ", 4(30) \n" + "cmplw 6, 6, 4 \n" + "cmpw 7, 5, 3 \n" + /* CR6 bit 0 = low ge and high equal */ + "crandc 6*4+0, 7*4+2, 6*4+0\n" + /* CR7 bit 0 = (low ge and high equal) or high greater */ + "cror 7*4+0, 7*4+1, 6*4+0\n" + "lwzu " TOP_FIRST ", 8(30)\n" + "lwz " TOP_SECOND ", 4(30)\n" + "1:blt 7, 1b \n"); + + if (offset_p) + *offset_p = 32; + if (size_p) + *size_p = 14; +} + +/* Relocate previous emitted branch instruction. FROM is the address + of the branch instruction, TO is the goto target address, and SIZE + if the value we set by *SIZE_P before. Currently, it is either + 24 or 14 of branch and conditional-branch instruction. + Also used for ppc64. */ + +static void +ppc_write_goto_address (CORE_ADDR from, CORE_ADDR to, int size) +{ + long rel = to - from; + uint32_t insn; + int opcd; + + read_inferior_memory (from, (unsigned char *) &insn, 4); + opcd = (insn >> 26) & 0x3f; + + switch (size) + { + case 14: + if (opcd != 16 + || (rel >= (1 << 15) || rel < -(1 << 15))) + emit_error = 1; + insn = (insn & ~0xfffc) | (rel & 0xfffc); + break; + case 24: + if (opcd != 18 + || (rel >= (1 << 25) || rel < -(1 << 25))) + emit_error = 1; + insn = (insn & ~0x3fffffc) | (rel & 0x3fffffc); + break; + default: + emit_error = 1; + } + + if (!emit_error) + target_write_memory (from, (unsigned char *) &insn, 4); +} + +/* Table of emit ops for 32-bit. */ + +static struct emit_ops ppc_emit_ops_impl = +{ + ppc_emit_prologue, + ppc_emit_epilogue, + ppc_emit_add, + ppc_emit_sub, + ppc_emit_mul, + ppc_emit_lsh, + ppc_emit_rsh_signed, + ppc_emit_rsh_unsigned, + ppc_emit_ext, + ppc_emit_log_not, + ppc_emit_bit_and, + ppc_emit_bit_or, + ppc_emit_bit_xor, + ppc_emit_bit_not, + ppc_emit_equal, + ppc_emit_less_signed, + ppc_emit_less_unsigned, + ppc_emit_ref, + ppc_emit_if_goto, + ppc_emit_goto, + ppc_write_goto_address, + ppc_emit_const, + ppc_emit_call, + ppc_emit_reg, + ppc_emit_pop, + ppc_emit_stack_flush, + ppc_emit_zero_ext, + ppc_emit_swap, + ppc_emit_stack_adjust, + ppc_emit_int_call_1, + ppc_emit_void_call_2, + ppc_emit_eq_goto, + ppc_emit_ne_goto, + ppc_emit_lt_goto, + ppc_emit_le_goto, + ppc_emit_gt_goto, + ppc_emit_ge_goto +}; + +#ifdef __powerpc64__ + +/* + + Bytecode execution stack frame - 64-bit + + | LR save area (SP + 16) + | CR save area (SP + 8) + SP' -> +- Back chain (SP + 0) + | Save r31 for access saved arguments + | Save r30 for bytecode stack pointer + | Save r4 for incoming argument *value + | Save r3 for incoming argument regs + r30 -> +- Bytecode execution stack + | + | 64-byte (8 doublewords) at initial. + | Expand stack as needed. + | + +- + | Some padding for minimum stack frame. + | 112 for ELFv1. + SP +- Back-chain (SP') + + initial frame size + = 112 + (4 * 8) + 64 + = 208 + + r30 is the stack-pointer for bytecode machine. + It should point to next-empty, so we can use LDU for pop. + r3 is used for cache of TOP value. + It was the first argument, pointer to regs. + r4 is the second argument, pointer to the result. + We should set *result = TOP after leaving this function. + + Note: + * To restore stack at epilogue + => sp = r31 + * To check stack is big enough for bytecode execution. + => r30 - 8 > SP + 112 + * To return execution result. + => 0(r4) = TOP + + */ + +/* Emit prologue in inferior memory. See above comments. */ + +static void +ppc64v1_emit_prologue (void) +{ + /* On ELFv1, function pointers really point to function descriptor, + so emit one here. We don't care about contents of words 1 and 2, + so let them just overlap out code. */ + uint64_t opd = current_insn_ptr + 8; + uint32_t buf[2]; + + /* Mind the strict aliasing rules. */ + memcpy (buf, &opd, sizeof buf); + emit_insns(buf, 2); + EMIT_ASM (/* Save return address. */ + "mflr 0 \n" + "std 0, 16(1) \n" + /* Save r30 and incoming arguments. */ + "std 31, -8(1) \n" + "std 30, -16(1) \n" + "std 4, -24(1) \n" + "std 3, -32(1) \n" + /* Point r31 to current r1 for access arguments. */ + "mr 31, 1 \n" + /* Adjust SP. 208 is the initial frame size. */ + "stdu 1, -208(1) \n" + /* Set r30 to pointing stack-top. */ + "addi 30, 1, 168 \n" + /* Initial r3/TOP to 0. */ + "li 3, 0 \n"); +} + +/* Emit prologue in inferior memory. See above comments. */ + +static void +ppc64v2_emit_prologue (void) +{ + EMIT_ASM (/* Save return address. */ + "mflr 0 \n" + "std 0, 16(1) \n" + /* Save r30 and incoming arguments. */ + "std 31, -8(1) \n" + "std 30, -16(1) \n" + "std 4, -24(1) \n" + "std 3, -32(1) \n" + /* Point r31 to current r1 for access arguments. */ + "mr 31, 1 \n" + /* Adjust SP. 208 is the initial frame size. */ + "stdu 1, -208(1) \n" + /* Set r30 to pointing stack-top. */ + "addi 30, 1, 168 \n" + /* Initial r3/TOP to 0. */ + "li 3, 0 \n"); +} + +/* Emit epilogue in inferior memory. See above comments. */ + +static void +ppc64_emit_epilogue (void) +{ + EMIT_ASM (/* Restore SP. */ + "ld 1, 0(1) \n" + /* *result = TOP */ + "ld 4, -24(1) \n" + "std 3, 0(4) \n" + /* Restore registers. */ + "ld 31, -8(1) \n" + "ld 30, -16(1) \n" + /* Restore LR. */ + "ld 0, 16(1) \n" + /* Return 0 for no-error. */ + "li 3, 0 \n" + "mtlr 0 \n" + "blr \n"); +} + +/* TOP = stack[--sp] + TOP */ + +static void +ppc64_emit_add (void) +{ + EMIT_ASM ("ldu 4, 8(30) \n" + "add 3, 4, 3 \n"); +} + +/* TOP = stack[--sp] - TOP */ + +static void +ppc64_emit_sub (void) +{ + EMIT_ASM ("ldu 4, 8(30) \n" + "sub 3, 4, 3 \n"); +} + +/* TOP = stack[--sp] * TOP */ + +static void +ppc64_emit_mul (void) +{ + EMIT_ASM ("ldu 4, 8(30) \n" + "mulld 3, 4, 3 \n"); +} + +/* TOP = stack[--sp] << TOP */ + +static void +ppc64_emit_lsh (void) +{ + EMIT_ASM ("ldu 4, 8(30) \n" + "sld 3, 4, 3 \n"); +} + +/* Top = stack[--sp] >> TOP + (Arithmetic shift right) */ + +static void +ppc64_emit_rsh_signed (void) +{ + EMIT_ASM ("ldu 4, 8(30) \n" + "srad 3, 4, 3 \n"); +} + +/* Top = stack[--sp] >> TOP + (Logical shift right) */ + +static void +ppc64_emit_rsh_unsigned (void) +{ + EMIT_ASM ("ldu 4, 8(30) \n" + "srd 3, 4, 3 \n"); +} + +/* Emit code for signed-extension specified by ARG. */ + +static void +ppc64_emit_ext (int arg) +{ + switch (arg) + { + case 8: + EMIT_ASM ("extsb 3, 3"); + break; + case 16: + EMIT_ASM ("extsh 3, 3"); + break; + case 32: + EMIT_ASM ("extsw 3, 3"); + break; + default: + emit_error = 1; + } +} + +/* Emit code for zero-extension specified by ARG. */ + +static void +ppc64_emit_zero_ext (int arg) +{ + switch (arg) + { + case 8: + EMIT_ASM ("rldicl 3,3,0,56"); + break; + case 16: + EMIT_ASM ("rldicl 3,3,0,48"); + break; + case 32: + EMIT_ASM ("rldicl 3,3,0,32"); + break; + default: + emit_error = 1; + } +} + +/* TOP = !TOP + i.e., TOP = (TOP == 0) ? 1 : 0; */ + +static void +ppc64_emit_log_not (void) +{ + EMIT_ASM ("cntlzd 3, 3 \n" + "srdi 3, 3, 6 \n"); +} + +/* TOP = stack[--sp] & TOP */ + +static void +ppc64_emit_bit_and (void) +{ + EMIT_ASM ("ldu 4, 8(30) \n" + "and 3, 4, 3 \n"); +} + +/* TOP = stack[--sp] | TOP */ + +static void +ppc64_emit_bit_or (void) +{ + EMIT_ASM ("ldu 4, 8(30) \n" + "or 3, 4, 3 \n"); +} + +/* TOP = stack[--sp] ^ TOP */ + +static void +ppc64_emit_bit_xor (void) +{ + EMIT_ASM ("ldu 4, 8(30) \n" + "xor 3, 4, 3 \n"); +} + +/* TOP = ~TOP + i.e., TOP = ~(TOP | TOP) */ + +static void +ppc64_emit_bit_not (void) +{ + EMIT_ASM ("nor 3, 3, 3 \n"); +} + +/* TOP = stack[--sp] == TOP */ + +static void +ppc64_emit_equal (void) +{ + EMIT_ASM ("ldu 4, 8(30) \n" + "xor 3, 3, 4 \n" + "cntlzd 3, 3 \n" + "srdi 3, 3, 6 \n"); +} + +/* TOP = stack[--sp] < TOP + (Signed comparison) */ + +static void +ppc64_emit_less_signed (void) +{ + EMIT_ASM ("ldu 4, 8(30) \n" + "cmpd 7, 4, 3 \n" + "mfcr 3 \n" + "rlwinm 3, 3, 29, 31, 31 \n"); +} + +/* TOP = stack[--sp] < TOP + (Unsigned comparison) */ + +static void +ppc64_emit_less_unsigned (void) +{ + EMIT_ASM ("ldu 4, 8(30) \n" + "cmpld 7, 4, 3 \n" + "mfcr 3 \n" + "rlwinm 3, 3, 29, 31, 31 \n"); +} + +/* Access the memory address in TOP in size of SIZE. + Zero-extend the read value. */ + +static void +ppc64_emit_ref (int size) +{ + switch (size) + { + case 1: + EMIT_ASM ("lbz 3, 0(3)"); + break; + case 2: + EMIT_ASM ("lhz 3, 0(3)"); + break; + case 4: + EMIT_ASM ("lwz 3, 0(3)"); + break; + case 8: + EMIT_ASM ("ld 3, 0(3)"); + break; + } +} + +/* TOP = NUM */ + +static void +ppc64_emit_const (LONGEST num) +{ + uint32_t buf[5]; + uint32_t *p = buf; + + p += gen_limm (p, 3, num, 1); + + emit_insns (buf, p - buf); + gdb_assert ((p - buf) <= (sizeof (buf) / sizeof (*buf))); +} + +/* Set TOP to the value of register REG by calling get_raw_reg function + with two argument, collected buffer and register number. */ + +static void +ppc64v1_emit_reg (int reg) +{ + uint32_t buf[15]; + uint32_t *p = buf; + + /* fctx->regs is passed in r3 and then saved in 176(1). */ + p += GEN_LD (p, 3, 31, -32); + p += GEN_LI (p, 4, reg); + p += GEN_STD (p, 2, 1, 40); /* Save TOC. */ + p += gen_call (p, get_raw_reg_func_addr (), 1, 1); + p += GEN_LD (p, 2, 1, 40); /* Restore TOC. */ + + emit_insns (buf, p - buf); + gdb_assert ((p - buf) <= (sizeof (buf) / sizeof (*buf))); +} + +/* Likewise, for ELFv2. */ + +static void +ppc64v2_emit_reg (int reg) +{ + uint32_t buf[12]; + uint32_t *p = buf; + + /* fctx->regs is passed in r3 and then saved in 176(1). */ + p += GEN_LD (p, 3, 31, -32); + p += GEN_LI (p, 4, reg); + p += GEN_STD (p, 2, 1, 24); /* Save TOC. */ + p += gen_call (p, get_raw_reg_func_addr (), 1, 0); + p += GEN_LD (p, 2, 1, 24); /* Restore TOC. */ + + emit_insns (buf, p - buf); + gdb_assert ((p - buf) <= (sizeof (buf) / sizeof (*buf))); +} + +/* TOP = stack[--sp] */ + +static void +ppc64_emit_pop (void) +{ + EMIT_ASM ("ldu 3, 8(30)"); +} + +/* stack[sp++] = TOP + + Because we may use up bytecode stack, expand 8 doublewords more + if needed. */ + +static void +ppc64_emit_stack_flush (void) +{ + /* Make sure bytecode stack is big enough before push. + Otherwise, expand 64-byte more. */ + + EMIT_ASM (" std 3, 0(30) \n" + " addi 4, 30, -(112 + 8) \n" + " cmpd 7, 4, 1 \n" + " bgt 7, 1f \n" + " stdu 31, -64(1) \n" + "1:addi 30, 30, -8 \n"); +} + +/* Swap TOP and stack[sp-1] */ + +static void +ppc64_emit_swap (void) +{ + EMIT_ASM ("ld 4, 8(30) \n" + "std 3, 8(30) \n" + "mr 3, 4 \n"); +} + +/* Call function FN - ELFv1. */ + +static void +ppc64v1_emit_call (CORE_ADDR fn) +{ + uint32_t buf[13]; + uint32_t *p = buf; + + p += GEN_STD (p, 2, 1, 40); /* Save TOC. */ + p += gen_call (p, fn, 1, 1); + p += GEN_LD (p, 2, 1, 40); /* Restore TOC. */ + + emit_insns (buf, p - buf); + gdb_assert ((p - buf) <= (sizeof (buf) / sizeof (*buf))); +} + +/* Call function FN - ELFv2. */ + +static void +ppc64v2_emit_call (CORE_ADDR fn) +{ + uint32_t buf[10]; + uint32_t *p = buf; + + p += GEN_STD (p, 2, 1, 24); /* Save TOC. */ + p += gen_call (p, fn, 1, 0); + p += GEN_LD (p, 2, 1, 24); /* Restore TOC. */ + + emit_insns (buf, p - buf); + gdb_assert ((p - buf) <= (sizeof (buf) / sizeof (*buf))); +} + +/* FN's prototype is `LONGEST(*fn)(int)'. + TOP = fn (arg1) + */ + +static void +ppc64v1_emit_int_call_1 (CORE_ADDR fn, int arg1) +{ + uint32_t buf[13]; + uint32_t *p = buf; + + /* Setup argument. arg1 is a 16-bit value. */ + p += gen_limm (p, 3, arg1, 1); + p += GEN_STD (p, 2, 1, 40); /* Save TOC. */ + p += gen_call (p, fn, 1, 1); + p += GEN_LD (p, 2, 1, 40); /* Restore TOC. */ + + emit_insns (buf, p - buf); + gdb_assert ((p - buf) <= (sizeof (buf) / sizeof (*buf))); +} + +/* Likewise for ELFv2. */ + +static void +ppc64v2_emit_int_call_1 (CORE_ADDR fn, int arg1) +{ + uint32_t buf[10]; + uint32_t *p = buf; + + /* Setup argument. arg1 is a 16-bit value. */ + p += gen_limm (p, 3, arg1, 1); + p += GEN_STD (p, 2, 1, 24); /* Save TOC. */ + p += gen_call (p, fn, 1, 0); + p += GEN_LD (p, 2, 1, 24); /* Restore TOC. */ + + emit_insns (buf, p - buf); + gdb_assert ((p - buf) <= (sizeof (buf) / sizeof (*buf))); +} + +/* FN's prototype is `void(*fn)(int,LONGEST)'. + fn (arg1, TOP) + + TOP should be preserved/restored before/after the call. */ + +static void +ppc64v1_emit_void_call_2 (CORE_ADDR fn, int arg1) +{ + uint32_t buf[17]; + uint32_t *p = buf; + + /* Save TOP. 0(30) is next-empty. */ + p += GEN_STD (p, 3, 30, 0); + + /* Setup argument. arg1 is a 16-bit value. */ + p += GEN_MR (p, 4, 3); /* mr r4, r3 */ + p += gen_limm (p, 3, arg1, 1); + p += GEN_STD (p, 2, 1, 40); /* Save TOC. */ + p += gen_call (p, fn, 1, 1); + p += GEN_LD (p, 2, 1, 40); /* Restore TOC. */ + + /* Restore TOP */ + p += GEN_LD (p, 3, 30, 0); + + emit_insns (buf, p - buf); + gdb_assert ((p - buf) <= (sizeof (buf) / sizeof (*buf))); +} + +/* Likewise for ELFv2. */ + +static void +ppc64v2_emit_void_call_2 (CORE_ADDR fn, int arg1) +{ + uint32_t buf[14]; + uint32_t *p = buf; + + /* Save TOP. 0(30) is next-empty. */ + p += GEN_STD (p, 3, 30, 0); + + /* Setup argument. arg1 is a 16-bit value. */ + p += GEN_MR (p, 4, 3); /* mr r4, r3 */ + p += gen_limm (p, 3, arg1, 1); + p += GEN_STD (p, 2, 1, 24); /* Save TOC. */ + p += gen_call (p, fn, 1, 0); + p += GEN_LD (p, 2, 1, 24); /* Restore TOC. */ + + /* Restore TOP */ + p += GEN_LD (p, 3, 30, 0); + + emit_insns (buf, p - buf); + gdb_assert ((p - buf) <= (sizeof (buf) / sizeof (*buf))); +} + +/* If TOP is true, goto somewhere. Otherwise, just fall-through. */ + +static void +ppc64_emit_if_goto (int *offset_p, int *size_p) +{ + EMIT_ASM ("cmpdi 7, 3, 0 \n" + "ldu 3, 8(30) \n" + "1:bne 7, 1b \n"); + + if (offset_p) + *offset_p = 8; + if (size_p) + *size_p = 14; +} + +/* Goto if stack[--sp] == TOP */ + +static void +ppc64_emit_eq_goto (int *offset_p, int *size_p) +{ + EMIT_ASM ("ldu 4, 8(30) \n" + "cmpd 7, 4, 3 \n" + "ldu 3, 8(30) \n" + "1:beq 7, 1b \n"); + + if (offset_p) + *offset_p = 12; + if (size_p) + *size_p = 14; +} + +/* Goto if stack[--sp] != TOP */ + +static void +ppc64_emit_ne_goto (int *offset_p, int *size_p) +{ + EMIT_ASM ("ldu 4, 8(30) \n" + "cmpd 7, 4, 3 \n" + "ldu 3, 8(30) \n" + "1:bne 7, 1b \n"); + + if (offset_p) + *offset_p = 12; + if (size_p) + *size_p = 14; +} + +/* Goto if stack[--sp] < TOP */ + +static void +ppc64_emit_lt_goto (int *offset_p, int *size_p) +{ + EMIT_ASM ("ldu 4, 8(30) \n" + "cmpd 7, 4, 3 \n" + "ldu 3, 8(30) \n" + "1:blt 7, 1b \n"); + + if (offset_p) + *offset_p = 12; + if (size_p) + *size_p = 14; +} + +/* Goto if stack[--sp] <= TOP */ + +static void +ppc64_emit_le_goto (int *offset_p, int *size_p) +{ + EMIT_ASM ("ldu 4, 8(30) \n" + "cmpd 7, 4, 3 \n" + "ldu 3, 8(30) \n" + "1:ble 7, 1b \n"); + + if (offset_p) + *offset_p = 12; + if (size_p) + *size_p = 14; +} + +/* Goto if stack[--sp] > TOP */ + +static void +ppc64_emit_gt_goto (int *offset_p, int *size_p) +{ + EMIT_ASM ("ldu 4, 8(30) \n" + "cmpd 7, 4, 3 \n" + "ldu 3, 8(30) \n" + "1:bgt 7, 1b \n"); + + if (offset_p) + *offset_p = 12; + if (size_p) + *size_p = 14; +} + +/* Goto if stack[--sp] >= TOP */ + +static void +ppc64_emit_ge_goto (int *offset_p, int *size_p) +{ + EMIT_ASM ("ldu 4, 8(30) \n" + "cmpd 7, 4, 3 \n" + "ldu 3, 8(30) \n" + "1:bge 7, 1b \n"); + + if (offset_p) + *offset_p = 12; + if (size_p) + *size_p = 14; +} + +/* Table of emit ops for 64-bit ELFv1. */ + +static struct emit_ops ppc64v1_emit_ops_impl = +{ + ppc64v1_emit_prologue, + ppc64_emit_epilogue, + ppc64_emit_add, + ppc64_emit_sub, + ppc64_emit_mul, + ppc64_emit_lsh, + ppc64_emit_rsh_signed, + ppc64_emit_rsh_unsigned, + ppc64_emit_ext, + ppc64_emit_log_not, + ppc64_emit_bit_and, + ppc64_emit_bit_or, + ppc64_emit_bit_xor, + ppc64_emit_bit_not, + ppc64_emit_equal, + ppc64_emit_less_signed, + ppc64_emit_less_unsigned, + ppc64_emit_ref, + ppc64_emit_if_goto, + ppc_emit_goto, + ppc_write_goto_address, + ppc64_emit_const, + ppc64v1_emit_call, + ppc64v1_emit_reg, + ppc64_emit_pop, + ppc64_emit_stack_flush, + ppc64_emit_zero_ext, + ppc64_emit_swap, + ppc_emit_stack_adjust, + ppc64v1_emit_int_call_1, + ppc64v1_emit_void_call_2, + ppc64_emit_eq_goto, + ppc64_emit_ne_goto, + ppc64_emit_lt_goto, + ppc64_emit_le_goto, + ppc64_emit_gt_goto, + ppc64_emit_ge_goto +}; + +/* Table of emit ops for 64-bit ELFv2. */ + +static struct emit_ops ppc64v2_emit_ops_impl = +{ + ppc64v2_emit_prologue, + ppc64_emit_epilogue, + ppc64_emit_add, + ppc64_emit_sub, + ppc64_emit_mul, + ppc64_emit_lsh, + ppc64_emit_rsh_signed, + ppc64_emit_rsh_unsigned, + ppc64_emit_ext, + ppc64_emit_log_not, + ppc64_emit_bit_and, + ppc64_emit_bit_or, + ppc64_emit_bit_xor, + ppc64_emit_bit_not, + ppc64_emit_equal, + ppc64_emit_less_signed, + ppc64_emit_less_unsigned, + ppc64_emit_ref, + ppc64_emit_if_goto, + ppc_emit_goto, + ppc_write_goto_address, + ppc64_emit_const, + ppc64v2_emit_call, + ppc64v2_emit_reg, + ppc64_emit_pop, + ppc64_emit_stack_flush, + ppc64_emit_zero_ext, + ppc64_emit_swap, + ppc_emit_stack_adjust, + ppc64v2_emit_int_call_1, + ppc64v2_emit_void_call_2, + ppc64_emit_eq_goto, + ppc64_emit_ne_goto, + ppc64_emit_lt_goto, + ppc64_emit_le_goto, + ppc64_emit_gt_goto, + ppc64_emit_ge_goto +}; + +#endif + +/* Implementation of target ops method "emit_ops". */ + +emit_ops * +ppc_target::emit_ops () +{ +#ifdef __powerpc64__ + struct regcache *regcache = get_thread_regcache (current_thread, 0); + + if (register_size (regcache->tdesc, 0) == 8) + { + if (is_elfv2_inferior ()) + return &ppc64v2_emit_ops_impl; + else + return &ppc64v1_emit_ops_impl; + } +#endif + return &ppc_emit_ops_impl; +} + +/* Implementation of target ops method "get_ipa_tdesc_idx". */ + +int +ppc_target::get_ipa_tdesc_idx () +{ + struct regcache *regcache = get_thread_regcache (current_thread, 0); + const struct target_desc *tdesc = regcache->tdesc; + +#ifdef __powerpc64__ + if (tdesc == tdesc_powerpc_64l) + return PPC_TDESC_BASE; + if (tdesc == tdesc_powerpc_altivec64l) + return PPC_TDESC_ALTIVEC; + if (tdesc == tdesc_powerpc_vsx64l) + return PPC_TDESC_VSX; + if (tdesc == tdesc_powerpc_isa205_64l) + return PPC_TDESC_ISA205; + if (tdesc == tdesc_powerpc_isa205_altivec64l) + return PPC_TDESC_ISA205_ALTIVEC; + if (tdesc == tdesc_powerpc_isa205_vsx64l) + return PPC_TDESC_ISA205_VSX; + if (tdesc == tdesc_powerpc_isa205_ppr_dscr_vsx64l) + return PPC_TDESC_ISA205_PPR_DSCR_VSX; + if (tdesc == tdesc_powerpc_isa207_vsx64l) + return PPC_TDESC_ISA207_VSX; + if (tdesc == tdesc_powerpc_isa207_htm_vsx64l) + return PPC_TDESC_ISA207_HTM_VSX; +#endif + + if (tdesc == tdesc_powerpc_32l) + return PPC_TDESC_BASE; + if (tdesc == tdesc_powerpc_altivec32l) + return PPC_TDESC_ALTIVEC; + if (tdesc == tdesc_powerpc_vsx32l) + return PPC_TDESC_VSX; + if (tdesc == tdesc_powerpc_isa205_32l) + return PPC_TDESC_ISA205; + if (tdesc == tdesc_powerpc_isa205_altivec32l) + return PPC_TDESC_ISA205_ALTIVEC; + if (tdesc == tdesc_powerpc_isa205_vsx32l) + return PPC_TDESC_ISA205_VSX; + if (tdesc == tdesc_powerpc_isa205_ppr_dscr_vsx32l) + return PPC_TDESC_ISA205_PPR_DSCR_VSX; + if (tdesc == tdesc_powerpc_isa207_vsx32l) + return PPC_TDESC_ISA207_VSX; + if (tdesc == tdesc_powerpc_isa207_htm_vsx32l) + return PPC_TDESC_ISA207_HTM_VSX; + if (tdesc == tdesc_powerpc_e500l) + return PPC_TDESC_E500; + + return 0; +} + +/* The linux target ops object. */ + +linux_process_target *the_linux_target = &the_ppc_target; + +void +initialize_low_arch (void) +{ + /* Initialize the Linux target descriptions. */ + + init_registers_powerpc_32l (); + init_registers_powerpc_altivec32l (); + init_registers_powerpc_vsx32l (); + init_registers_powerpc_isa205_32l (); + init_registers_powerpc_isa205_altivec32l (); + init_registers_powerpc_isa205_vsx32l (); + init_registers_powerpc_isa205_ppr_dscr_vsx32l (); + init_registers_powerpc_isa207_vsx32l (); + init_registers_powerpc_isa207_htm_vsx32l (); + init_registers_powerpc_e500l (); +#if __powerpc64__ + init_registers_powerpc_64l (); + init_registers_powerpc_altivec64l (); + init_registers_powerpc_vsx64l (); + init_registers_powerpc_isa205_64l (); + init_registers_powerpc_isa205_altivec64l (); + init_registers_powerpc_isa205_vsx64l (); + init_registers_powerpc_isa205_ppr_dscr_vsx64l (); + init_registers_powerpc_isa207_vsx64l (); + init_registers_powerpc_isa207_htm_vsx64l (); +#endif + + initialize_regsets_info (&ppc_regsets_info); +} diff -Nru gdb-9.1/gdbserver/linux-ppc-tdesc-init.h gdb-10.2/gdbserver/linux-ppc-tdesc-init.h --- gdb-9.1/gdbserver/linux-ppc-tdesc-init.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/linux-ppc-tdesc-init.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,106 @@ +/* Low level support for ppc, shared between gdbserver and IPA. + + Copyright (C) 2016-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef GDBSERVER_LINUX_PPC_TDESC_INIT_H +#define GDBSERVER_LINUX_PPC_TDESC_INIT_H + +/* Note: since IPA obviously knows what ABI it's running on (32 vs 64), + it's sufficient to pass only the register set here. This, together with + the ABI known at IPA compile time, maps to a tdesc. */ + +enum ppc_linux_tdesc { + PPC_TDESC_BASE, + PPC_TDESC_ALTIVEC, + PPC_TDESC_CELL, /* No longer used, but kept to avoid ABI changes. */ + PPC_TDESC_VSX, + PPC_TDESC_ISA205, + PPC_TDESC_ISA205_ALTIVEC, + PPC_TDESC_ISA205_VSX, + PPC_TDESC_ISA205_PPR_DSCR_VSX, + PPC_TDESC_ISA207_VSX, + PPC_TDESC_ISA207_HTM_VSX, + PPC_TDESC_E500, +}; + +#if !defined __powerpc64__ || !defined IN_PROCESS_AGENT + +/* Defined in auto-generated file powerpc-32l.c. */ +void init_registers_powerpc_32l (void); + +/* Defined in auto-generated file powerpc-altivec32l.c. */ +void init_registers_powerpc_altivec32l (void); + +/* Defined in auto-generated file powerpc-vsx32l.c. */ +void init_registers_powerpc_vsx32l (void); + +/* Defined in auto-generated file powerpc-isa205-32l.c. */ +void init_registers_powerpc_isa205_32l (void); + +/* Defined in auto-generated file powerpc-isa205-altivec32l.c. */ +void init_registers_powerpc_isa205_altivec32l (void); + +/* Defined in auto-generated file powerpc-isa205-vsx32l.c. */ +void init_registers_powerpc_isa205_vsx32l (void); + +/* Defined in auto-generated file powerpc-isa205-ppr-dscr-vsx32l.c. */ +void init_registers_powerpc_isa205_ppr_dscr_vsx32l (void); + +/* Defined in auto-generated file powerpc-isa207-vsx32l.c. */ +void init_registers_powerpc_isa207_vsx32l (void); + +/* Defined in auto-generated file powerpc-isa207-htm-vsx32l.c. */ +void init_registers_powerpc_isa207_htm_vsx32l (void); + +/* Defined in auto-generated file powerpc-e500l.c. */ +void init_registers_powerpc_e500l (void); + +#endif + +#if defined __powerpc64__ + +/* Defined in auto-generated file powerpc-64l.c. */ +void init_registers_powerpc_64l (void); + +/* Defined in auto-generated file powerpc-altivec64l.c. */ +void init_registers_powerpc_altivec64l (void); + +/* Defined in auto-generated file powerpc-vsx64l.c. */ +void init_registers_powerpc_vsx64l (void); + +/* Defined in auto-generated file powerpc-isa205-64l.c. */ +void init_registers_powerpc_isa205_64l (void); + +/* Defined in auto-generated file powerpc-isa205-altivec64l.c. */ +void init_registers_powerpc_isa205_altivec64l (void); + +/* Defined in auto-generated file powerpc-isa205-vsx64l.c. */ +void init_registers_powerpc_isa205_vsx64l (void); + +/* Defined in auto-generated file powerpc-isa205-ppr-dscr-vsx64l.c. */ +void init_registers_powerpc_isa205_ppr_dscr_vsx64l (void); + +/* Defined in auto-generated file powerpc-isa207-vsx64l.c. */ +void init_registers_powerpc_isa207_vsx64l (void); + +/* Defined in auto-generated file powerpc-isa207-htm-vsx64l.c. */ +void init_registers_powerpc_isa207_htm_vsx64l (void); + +#endif + +#endif /* GDBSERVER_LINUX_PPC_TDESC_INIT_H */ diff -Nru gdb-9.1/gdbserver/linux-riscv-low.cc gdb-10.2/gdbserver/linux-riscv-low.cc --- gdb-9.1/gdbserver/linux-riscv-low.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/linux-riscv-low.cc 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,321 @@ +/* GNU/Linux/RISC-V specific low level interface, for the remote server + for GDB. + Copyright (C) 2020-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "server.h" + +#include "linux-low.h" +#include "tdesc.h" +#include "elf/common.h" +#include "nat/riscv-linux-tdesc.h" +#include "opcode/riscv.h" + +/* Work around glibc header breakage causing ELF_NFPREG not to be usable. */ +#ifndef NFPREG +# define NFPREG 33 +#endif + +/* Linux target op definitions for the RISC-V architecture. */ + +class riscv_target : public linux_process_target +{ +public: + + const regs_info *get_regs_info () override; + + int breakpoint_kind_from_pc (CORE_ADDR *pcptr) override; + + const gdb_byte *sw_breakpoint_from_kind (int kind, int *size) override; + +protected: + + void low_arch_setup () override; + + bool low_cannot_fetch_register (int regno) override; + + bool low_cannot_store_register (int regno) override; + + bool low_fetch_register (regcache *regcache, int regno) override; + + bool low_supports_breakpoints () override; + + CORE_ADDR low_get_pc (regcache *regcache) override; + + void low_set_pc (regcache *regcache, CORE_ADDR newpc) override; + + bool low_breakpoint_at (CORE_ADDR pc) override; +}; + +/* The singleton target ops object. */ + +static riscv_target the_riscv_target; + +bool +riscv_target::low_cannot_fetch_register (int regno) +{ + gdb_assert_not_reached ("linux target op low_cannot_fetch_register " + "is not implemented by the target"); +} + +bool +riscv_target::low_cannot_store_register (int regno) +{ + gdb_assert_not_reached ("linux target op low_cannot_store_register " + "is not implemented by the target"); +} + +/* Implementation of linux target ops method "low_arch_setup". */ + +void +riscv_target::low_arch_setup () +{ + static const char *expedite_regs[] = { "sp", "pc", NULL }; + + const riscv_gdbarch_features features + = riscv_linux_read_features (lwpid_of (current_thread)); + target_desc *tdesc = riscv_create_target_description (features); + + if (!tdesc->expedite_regs) + init_target_desc (tdesc, expedite_regs); + current_process ()->tdesc = tdesc; +} + +/* Collect GPRs from REGCACHE into BUF. */ + +static void +riscv_fill_gregset (struct regcache *regcache, void *buf) +{ + const struct target_desc *tdesc = regcache->tdesc; + elf_gregset_t *regset = (elf_gregset_t *) buf; + int regno = find_regno (tdesc, "zero"); + int i; + + collect_register_by_name (regcache, "pc", *regset); + for (i = 1; i < ARRAY_SIZE (*regset); i++) + collect_register (regcache, regno + i, *regset + i); +} + +/* Supply GPRs from BUF into REGCACHE. */ + +static void +riscv_store_gregset (struct regcache *regcache, const void *buf) +{ + const elf_gregset_t *regset = (const elf_gregset_t *) buf; + const struct target_desc *tdesc = regcache->tdesc; + int regno = find_regno (tdesc, "zero"); + int i; + + supply_register_by_name (regcache, "pc", *regset); + supply_register_zeroed (regcache, regno); + for (i = 1; i < ARRAY_SIZE (*regset); i++) + supply_register (regcache, regno + i, *regset + i); +} + +/* Collect FPRs from REGCACHE into BUF. */ + +static void +riscv_fill_fpregset (struct regcache *regcache, void *buf) +{ + const struct target_desc *tdesc = regcache->tdesc; + int regno = find_regno (tdesc, "ft0"); + int flen = register_size (regcache->tdesc, regno); + gdb_byte *regbuf = (gdb_byte *) buf; + int i; + + for (i = 0; i < ELF_NFPREG - 1; i++, regbuf += flen) + collect_register (regcache, regno + i, regbuf); + collect_register_by_name (regcache, "fcsr", regbuf); +} + +/* Supply FPRs from BUF into REGCACHE. */ + +static void +riscv_store_fpregset (struct regcache *regcache, const void *buf) +{ + const struct target_desc *tdesc = regcache->tdesc; + int regno = find_regno (tdesc, "ft0"); + int flen = register_size (regcache->tdesc, regno); + const gdb_byte *regbuf = (const gdb_byte *) buf; + int i; + + for (i = 0; i < ELF_NFPREG - 1; i++, regbuf += flen) + supply_register (regcache, regno + i, regbuf); + supply_register_by_name (regcache, "fcsr", regbuf); +} + +/* RISC-V/Linux regsets. FPRs are optional and come in different sizes, + so define multiple regsets for them marking them all as OPTIONAL_REGS + rather than FP_REGS, so that "regsets_fetch_inferior_registers" picks + the right one according to size. */ +static struct regset_info riscv_regsets[] = { + { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_PRSTATUS, + sizeof (elf_gregset_t), GENERAL_REGS, + riscv_fill_gregset, riscv_store_gregset }, + { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_FPREGSET, + sizeof (struct __riscv_mc_q_ext_state), OPTIONAL_REGS, + riscv_fill_fpregset, riscv_store_fpregset }, + { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_FPREGSET, + sizeof (struct __riscv_mc_d_ext_state), OPTIONAL_REGS, + riscv_fill_fpregset, riscv_store_fpregset }, + { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_FPREGSET, + sizeof (struct __riscv_mc_f_ext_state), OPTIONAL_REGS, + riscv_fill_fpregset, riscv_store_fpregset }, + NULL_REGSET +}; + +/* RISC-V/Linux regset information. */ +static struct regsets_info riscv_regsets_info = + { + riscv_regsets, /* regsets */ + 0, /* num_regsets */ + NULL, /* disabled_regsets */ + }; + +/* Definition of linux_target_ops data member "regs_info". */ +static struct regs_info riscv_regs = + { + NULL, /* regset_bitmap */ + NULL, /* usrregs */ + &riscv_regsets_info, + }; + +/* Implementation of linux target ops method "get_regs_info". */ + +const regs_info * +riscv_target::get_regs_info () +{ + return &riscv_regs; +} + +/* Implementation of linux target ops method "low_fetch_register". */ + +bool +riscv_target::low_fetch_register (regcache *regcache, int regno) +{ + const struct target_desc *tdesc = regcache->tdesc; + + if (regno != find_regno (tdesc, "zero")) + return false; + supply_register_zeroed (regcache, regno); + return true; +} + +bool +riscv_target::low_supports_breakpoints () +{ + return true; +} + +/* Implementation of linux target ops method "low_get_pc". */ + +CORE_ADDR +riscv_target::low_get_pc (regcache *regcache) +{ + elf_gregset_t regset; + + if (sizeof (regset[0]) == 8) + return linux_get_pc_64bit (regcache); + else + return linux_get_pc_32bit (regcache); +} + +/* Implementation of linux target ops method "low_set_pc". */ + +void +riscv_target::low_set_pc (regcache *regcache, CORE_ADDR newpc) +{ + elf_gregset_t regset; + + if (sizeof (regset[0]) == 8) + linux_set_pc_64bit (regcache, newpc); + else + linux_set_pc_32bit (regcache, newpc); +} + +/* Correct in either endianness. */ +static const uint16_t riscv_ibreakpoint[] = { 0x0073, 0x0010 }; +static const uint16_t riscv_cbreakpoint = 0x9002; + +/* Implementation of target ops method "breakpoint_kind_from_pc". */ + +int +riscv_target::breakpoint_kind_from_pc (CORE_ADDR *pcptr) +{ + union + { + gdb_byte bytes[2]; + uint16_t insn; + } + buf; + + if (target_read_memory (*pcptr, buf.bytes, sizeof (buf.insn)) == 0 + && riscv_insn_length (buf.insn == sizeof (riscv_ibreakpoint))) + return sizeof (riscv_ibreakpoint); + else + return sizeof (riscv_cbreakpoint); +} + +/* Implementation of target ops method "sw_breakpoint_from_kind". */ + +const gdb_byte * +riscv_target::sw_breakpoint_from_kind (int kind, int *size) +{ + *size = kind; + switch (kind) + { + case sizeof (riscv_ibreakpoint): + return (const gdb_byte *) &riscv_ibreakpoint; + default: + return (const gdb_byte *) &riscv_cbreakpoint; + } +} + +/* Implementation of linux target ops method "low_breakpoint_at". */ + +bool +riscv_target::low_breakpoint_at (CORE_ADDR pc) +{ + union + { + gdb_byte bytes[2]; + uint16_t insn; + } + buf; + + if (target_read_memory (pc, buf.bytes, sizeof (buf.insn)) == 0 + && (buf.insn == riscv_cbreakpoint + || (buf.insn == riscv_ibreakpoint[0] + && target_read_memory (pc + sizeof (buf.insn), buf.bytes, + sizeof (buf.insn)) == 0 + && buf.insn == riscv_ibreakpoint[1]))) + return true; + else + return false; +} + +/* The linux target ops object. */ + +linux_process_target *the_linux_target = &the_riscv_target; + +/* Initialize the RISC-V/Linux target. */ + +void +initialize_low_arch () +{ + initialize_regsets_info (&riscv_regsets_info); +} diff -Nru gdb-9.1/gdbserver/linux-s390-ipa.cc gdb-10.2/gdbserver/linux-s390-ipa.cc --- gdb-9.1/gdbserver/linux-s390-ipa.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/linux-s390-ipa.cc 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,463 @@ +/* GNU/Linux S/390 specific low level interface, for the in-process + agent library for GDB. + + Copyright (C) 2016-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "server.h" +#include <sys/mman.h> +#include "tracepoint.h" +#include "linux-s390-tdesc.h" +#include <elf.h> +#ifdef HAVE_GETAUXVAL +#include <sys/auxv.h> +#endif + +#define FT_FPR(x) (0x000 + (x) * 0x10) +#define FT_VR(x) (0x000 + (x) * 0x10) +#define FT_VR_L(x) (0x008 + (x) * 0x10) +#define FT_GPR(x) (0x200 + (x) * 8) +#define FT_GPR_U(x) (0x200 + (x) * 8) +#define FT_GPR_L(x) (0x204 + (x) * 8) +#define FT_GPR(x) (0x200 + (x) * 8) +#define FT_ACR(x) (0x280 + (x) * 4) +#define FT_PSWM 0x2c0 +#define FT_PSWM_U 0x2c0 +#define FT_PSWA 0x2c8 +#define FT_PSWA_L 0x2cc +#define FT_FPC 0x2d0 + +/* Mappings between registers collected by the jump pad and GDB's register + array layout used by regcache. + + See linux-s390-low.c (s390_install_fast_tracepoint_jump_pad) for more + details. */ + +#ifndef __s390x__ + +/* Used for s390-linux32, s390-linux32v1, s390-linux32v2. */ + +static const int s390_linux32_ft_collect_regmap[] = { + /* 32-bit PSWA and PSWM. */ + FT_PSWM_U, FT_PSWA_L, + /* 32-bit GPRs (mapped to lower halves of 64-bit slots). */ + FT_GPR_L (0), FT_GPR_L (1), FT_GPR_L (2), FT_GPR_L (3), + FT_GPR_L (4), FT_GPR_L (5), FT_GPR_L (6), FT_GPR_L (7), + FT_GPR_L (8), FT_GPR_L (9), FT_GPR_L (10), FT_GPR_L (11), + FT_GPR_L (12), FT_GPR_L (13), FT_GPR_L (14), FT_GPR_L (15), + /* ACRs */ + FT_ACR (0), FT_ACR (1), FT_ACR (2), FT_ACR (3), + FT_ACR (4), FT_ACR (5), FT_ACR (6), FT_ACR (7), + FT_ACR (8), FT_ACR (9), FT_ACR (10), FT_ACR (11), + FT_ACR (12), FT_ACR (13), FT_ACR (14), FT_ACR (15), + /* FPRs (mapped to upper halves of 128-bit VR slots). */ + FT_FPR (0), FT_FPR (1), FT_FPR (2), FT_FPR (3), + FT_FPR (4), FT_FPR (5), FT_FPR (6), FT_FPR (7), + FT_FPR (8), FT_FPR (9), FT_FPR (10), FT_FPR (11), + FT_FPR (12), FT_FPR (13), FT_FPR (14), FT_FPR (15), + /* orig_r2, last_break, system_call */ + -1, -1, -1, +}; + +/* Used for s390-linux64, s390-linux64v1, s390-linux64v2, s390-vx-linux64. */ + +static const int s390_linux64_ft_collect_regmap[] = { + /* 32-bit PSWA and PSWM. */ + FT_PSWM_U, FT_PSWA_L, + /* 32-bit halves of 64-bit GPRs. */ + FT_GPR_U (0), FT_GPR_L (0), + FT_GPR_U (1), FT_GPR_L (1), + FT_GPR_U (2), FT_GPR_L (2), + FT_GPR_U (3), FT_GPR_L (3), + FT_GPR_U (4), FT_GPR_L (4), + FT_GPR_U (5), FT_GPR_L (5), + FT_GPR_U (6), FT_GPR_L (6), + FT_GPR_U (7), FT_GPR_L (7), + FT_GPR_U (8), FT_GPR_L (8), + FT_GPR_U (9), FT_GPR_L (9), + FT_GPR_U (10), FT_GPR_L (10), + FT_GPR_U (11), FT_GPR_L (11), + FT_GPR_U (12), FT_GPR_L (12), + FT_GPR_U (13), FT_GPR_L (13), + FT_GPR_U (14), FT_GPR_L (14), + FT_GPR_U (15), FT_GPR_L (15), + /* ACRs */ + FT_ACR (0), FT_ACR (1), FT_ACR (2), FT_ACR (3), + FT_ACR (4), FT_ACR (5), FT_ACR (6), FT_ACR (7), + FT_ACR (8), FT_ACR (9), FT_ACR (10), FT_ACR (11), + FT_ACR (12), FT_ACR (13), FT_ACR (14), FT_ACR (15), + /* FPRs (mapped to upper halves of 128-bit VR slots). */ + FT_FPR (0), FT_FPR (1), FT_FPR (2), FT_FPR (3), + FT_FPR (4), FT_FPR (5), FT_FPR (6), FT_FPR (7), + FT_FPR (8), FT_FPR (9), FT_FPR (10), FT_FPR (11), + FT_FPR (12), FT_FPR (13), FT_FPR (14), FT_FPR (15), + /* orig_r2, last_break, system_call */ + -1, -1, -1, + /* Lower halves of 128-bit VRs. */ + FT_VR_L (0), FT_VR_L (1), FT_VR_L (2), FT_VR_L (3), + FT_VR_L (4), FT_VR_L (5), FT_VR_L (6), FT_VR_L (7), + FT_VR_L (8), FT_VR_L (9), FT_VR_L (10), FT_VR_L (11), + FT_VR_L (12), FT_VR_L (13), FT_VR_L (14), FT_VR_L (15), + /* And the next 16 VRs. */ + FT_VR (16), FT_VR (17), FT_VR (18), FT_VR (19), + FT_VR (20), FT_VR (21), FT_VR (22), FT_VR (23), + FT_VR (24), FT_VR (25), FT_VR (26), FT_VR (27), + FT_VR (28), FT_VR (29), FT_VR (30), FT_VR (31), +}; + +/* Used for s390-te-linux64, s390-tevx-linux64, and s390-gs-linux64. */ + +static const int s390_te_linux64_ft_collect_regmap[] = { + /* 32-bit PSWA and PSWM. */ + FT_PSWM_U, FT_PSWA_L, + /* 32-bit halves of 64-bit GPRs. */ + FT_GPR_U (0), FT_GPR_L (0), + FT_GPR_U (1), FT_GPR_L (1), + FT_GPR_U (2), FT_GPR_L (2), + FT_GPR_U (3), FT_GPR_L (3), + FT_GPR_U (4), FT_GPR_L (4), + FT_GPR_U (5), FT_GPR_L (5), + FT_GPR_U (6), FT_GPR_L (6), + FT_GPR_U (7), FT_GPR_L (7), + FT_GPR_U (8), FT_GPR_L (8), + FT_GPR_U (9), FT_GPR_L (9), + FT_GPR_U (10), FT_GPR_L (10), + FT_GPR_U (11), FT_GPR_L (11), + FT_GPR_U (12), FT_GPR_L (12), + FT_GPR_U (13), FT_GPR_L (13), + FT_GPR_U (14), FT_GPR_L (14), + FT_GPR_U (15), FT_GPR_L (15), + /* ACRs */ + FT_ACR (0), FT_ACR (1), FT_ACR (2), FT_ACR (3), + FT_ACR (4), FT_ACR (5), FT_ACR (6), FT_ACR (7), + FT_ACR (8), FT_ACR (9), FT_ACR (10), FT_ACR (11), + FT_ACR (12), FT_ACR (13), FT_ACR (14), FT_ACR (15), + /* FPRs (mapped to upper halves of 128-bit VR slots). */ + FT_FPR (0), FT_FPR (1), FT_FPR (2), FT_FPR (3), + FT_FPR (4), FT_FPR (5), FT_FPR (6), FT_FPR (7), + FT_FPR (8), FT_FPR (9), FT_FPR (10), FT_FPR (11), + FT_FPR (12), FT_FPR (13), FT_FPR (14), FT_FPR (15), + /* orig_r2, last_break, system_call */ + -1, -1, -1, + /* TDB */ + -1, -1, -1, -1, + -1, -1, -1, -1, + -1, -1, -1, -1, + -1, -1, -1, -1, + -1, -1, -1, -1, + /* Lower halves of 128-bit VRs. */ + FT_VR_L (0), FT_VR_L (1), FT_VR_L (2), FT_VR_L (3), + FT_VR_L (4), FT_VR_L (5), FT_VR_L (6), FT_VR_L (7), + FT_VR_L (8), FT_VR_L (9), FT_VR_L (10), FT_VR_L (11), + FT_VR_L (12), FT_VR_L (13), FT_VR_L (14), FT_VR_L (15), + /* And the next 16 VRs. */ + FT_VR (16), FT_VR (17), FT_VR (18), FT_VR (19), + FT_VR (20), FT_VR (21), FT_VR (22), FT_VR (23), + FT_VR (24), FT_VR (25), FT_VR (26), FT_VR (27), + FT_VR (28), FT_VR (29), FT_VR (30), FT_VR (31), +}; + +#else /* __s390x__ */ + +/* Used for s390x-linux64, s390x-linux64v1, s390x-linux64v2, s390x-vx-linux64. */ + +static const int s390x_ft_collect_regmap[] = { + /* 64-bit PSWA and PSWM. */ + FT_PSWM, FT_PSWA, + /* 64-bit GPRs. */ + FT_GPR (0), FT_GPR (1), FT_GPR (2), FT_GPR (3), + FT_GPR (4), FT_GPR (5), FT_GPR (6), FT_GPR (7), + FT_GPR (8), FT_GPR (9), FT_GPR (10), FT_GPR (11), + FT_GPR (12), FT_GPR (13), FT_GPR (14), FT_GPR (15), + /* ACRs */ + FT_ACR (0), FT_ACR (1), FT_ACR (2), FT_ACR (3), + FT_ACR (4), FT_ACR (5), FT_ACR (6), FT_ACR (7), + FT_ACR (8), FT_ACR (9), FT_ACR (10), FT_ACR (11), + FT_ACR (12), FT_ACR (13), FT_ACR (14), FT_ACR (15), + /* FPRs (mapped to upper halves of 128-bit VR slots). */ + FT_FPR (0), FT_FPR (1), FT_FPR (2), FT_FPR (3), + FT_FPR (4), FT_FPR (5), FT_FPR (6), FT_FPR (7), + FT_FPR (8), FT_FPR (9), FT_FPR (10), FT_FPR (11), + FT_FPR (12), FT_FPR (13), FT_FPR (14), FT_FPR (15), + /* orig_r2, last_break, system_call */ + -1, -1, -1, + /* Lower halves of 128-bit VRs. */ + FT_VR_L (0), FT_VR_L (1), FT_VR_L (2), FT_VR_L (3), + FT_VR_L (4), FT_VR_L (5), FT_VR_L (6), FT_VR_L (7), + FT_VR_L (8), FT_VR_L (9), FT_VR_L (10), FT_VR_L (11), + FT_VR_L (12), FT_VR_L (13), FT_VR_L (14), FT_VR_L (15), + /* And the next 16 VRs. */ + FT_VR (16), FT_VR (17), FT_VR (18), FT_VR (19), + FT_VR (20), FT_VR (21), FT_VR (22), FT_VR (23), + FT_VR (24), FT_VR (25), FT_VR (26), FT_VR (27), + FT_VR (28), FT_VR (29), FT_VR (30), FT_VR (31), +}; + +/* Used for s390x-te-linux64, s390x-tevx-linux64, and + s390x-gs-linux64. */ + +static const int s390x_te_ft_collect_regmap[] = { + /* 64-bit PSWA and PSWM. */ + FT_PSWM, FT_PSWA, + /* 64-bit GPRs. */ + FT_GPR (0), FT_GPR (1), FT_GPR (2), FT_GPR (3), + FT_GPR (4), FT_GPR (5), FT_GPR (6), FT_GPR (7), + FT_GPR (8), FT_GPR (9), FT_GPR (10), FT_GPR (11), + FT_GPR (12), FT_GPR (13), FT_GPR (14), FT_GPR (15), + /* ACRs */ + FT_ACR (0), FT_ACR (1), FT_ACR (2), FT_ACR (3), + FT_ACR (4), FT_ACR (5), FT_ACR (6), FT_ACR (7), + FT_ACR (8), FT_ACR (9), FT_ACR (10), FT_ACR (11), + FT_ACR (12), FT_ACR (13), FT_ACR (14), FT_ACR (15), + /* FPRs (mapped to upper halves of 128-bit VR slots). */ + FT_FPR (0), FT_FPR (1), FT_FPR (2), FT_FPR (3), + FT_FPR (4), FT_FPR (5), FT_FPR (6), FT_FPR (7), + FT_FPR (8), FT_FPR (9), FT_FPR (10), FT_FPR (11), + FT_FPR (12), FT_FPR (13), FT_FPR (14), FT_FPR (15), + /* orig_r2, last_break, system_call */ + -1, -1, -1, + /* TDB */ + -1, -1, -1, -1, + -1, -1, -1, -1, + -1, -1, -1, -1, + -1, -1, -1, -1, + -1, -1, -1, -1, + /* Lower halves of 128-bit VRs. */ + FT_VR_L (0), FT_VR_L (1), FT_VR_L (2), FT_VR_L (3), + FT_VR_L (4), FT_VR_L (5), FT_VR_L (6), FT_VR_L (7), + FT_VR_L (8), FT_VR_L (9), FT_VR_L (10), FT_VR_L (11), + FT_VR_L (12), FT_VR_L (13), FT_VR_L (14), FT_VR_L (15), + /* And the next 16 VRs. */ + FT_VR (16), FT_VR (17), FT_VR (18), FT_VR (19), + FT_VR (20), FT_VR (21), FT_VR (22), FT_VR (23), + FT_VR (24), FT_VR (25), FT_VR (26), FT_VR (27), + FT_VR (28), FT_VR (29), FT_VR (30), FT_VR (31), +}; + +#endif + +/* Initialized by get_ipa_tdesc according to the tdesc in use. */ + +static const int *s390_regmap; +static int s390_regnum; + +/* Fill in REGCACHE with registers saved by the jump pad in BUF. */ + +void +supply_fast_tracepoint_registers (struct regcache *regcache, + const unsigned char *buf) +{ + int i; + for (i = 0; i < s390_regnum; i++) + if (s390_regmap[i] != -1) + supply_register (regcache, i, ((char *) buf) + s390_regmap[i]); +} + +ULONGEST +get_raw_reg (const unsigned char *raw_regs, int regnum) +{ + int offset; + if (regnum >= s390_regnum) + return 0; + offset = s390_regmap[regnum]; + if (offset == -1) + return 0; + + /* The regnums are variable, better to figure out size by FT offset. */ + + /* 64-bit ones. */ + if (offset < FT_VR(16) +#ifdef __s390x__ + || (offset >= FT_GPR(0) && offset < FT_ACR(0)) + || offset == FT_PSWM + || offset == FT_PSWA +#endif + ) + return *(uint64_t *) (raw_regs + offset); + + if (offset >= FT_ACR(0 && offset < FT_PSWM) + || offset == FT_FPC +#ifndef __s390x__ + || (offset >= FT_GPR(0) && offset < FT_ACR(0)) + || offset == FT_PSWM_U + || offset == FT_PSWA_L +#endif + ) + return *(uint32_t *) (raw_regs + offset); + + /* This leaves 128-bit VX. No way to return them. */ + return 0; +} + +/* Return target_desc to use for IPA, given the tdesc index passed by + gdbserver. For s390, it also sets s390_regmap and s390_regnum. */ + +const struct target_desc * +get_ipa_tdesc (int idx) +{ +#define SET_REGMAP(regmap, skip_last) \ + do { \ + s390_regmap = regmap; \ + s390_regnum = (sizeof regmap / sizeof regmap[0]) - skip_last; \ + } while(0) + switch (idx) + { +#ifdef __s390x__ + case S390_TDESC_64: + /* Subtract number of VX regs. */ + SET_REGMAP(s390x_ft_collect_regmap, 32); + return tdesc_s390x_linux64; + case S390_TDESC_64V1: + SET_REGMAP(s390x_ft_collect_regmap, 32); + return tdesc_s390x_linux64v1; + case S390_TDESC_64V2: + SET_REGMAP(s390x_ft_collect_regmap, 32); + return tdesc_s390x_linux64v2; + case S390_TDESC_TE: + SET_REGMAP(s390x_te_ft_collect_regmap, 32); + return tdesc_s390x_te_linux64; + case S390_TDESC_VX: + SET_REGMAP(s390x_ft_collect_regmap, 0); + return tdesc_s390x_vx_linux64; + case S390_TDESC_TEVX: + SET_REGMAP(s390x_te_ft_collect_regmap, 0); + return tdesc_s390x_tevx_linux64; + case S390_TDESC_GS: + SET_REGMAP(s390x_te_ft_collect_regmap, 0); + return tdesc_s390x_gs_linux64; +#else + case S390_TDESC_32: + SET_REGMAP(s390_linux32_ft_collect_regmap, 0); + return tdesc_s390_linux32; + case S390_TDESC_32V1: + SET_REGMAP(s390_linux32_ft_collect_regmap, 0); + return tdesc_s390_linux32v1; + case S390_TDESC_32V2: + SET_REGMAP(s390_linux32_ft_collect_regmap, 0); + return tdesc_s390_linux32v2; + case S390_TDESC_64: + SET_REGMAP(s390_linux64_ft_collect_regmap, 32); + return tdesc_s390_linux64; + case S390_TDESC_64V1: + SET_REGMAP(s390_linux64_ft_collect_regmap, 32); + return tdesc_s390_linux64v1; + case S390_TDESC_64V2: + SET_REGMAP(s390_linux64_ft_collect_regmap, 32); + return tdesc_s390_linux64v2; + case S390_TDESC_TE: + SET_REGMAP(s390_te_linux64_ft_collect_regmap, 32); + return tdesc_s390_te_linux64; + case S390_TDESC_VX: + SET_REGMAP(s390_linux64_ft_collect_regmap, 0); + return tdesc_s390_vx_linux64; + case S390_TDESC_TEVX: + SET_REGMAP(s390_te_linux64_ft_collect_regmap, 0); + return tdesc_s390_tevx_linux64; + case S390_TDESC_GS: + SET_REGMAP(s390_te_linux64_ft_collect_regmap, 0); + return tdesc_s390_gs_linux64; +#endif + default: + internal_error (__FILE__, __LINE__, + "unknown ipa tdesc index: %d", idx); +#ifdef __s390x__ + return tdesc_s390x_linux64; +#else + return tdesc_s390_linux32; +#endif + } +} + +/* Allocate buffer for the jump pads. On 31-bit, JG reaches everywhere, + so just allocate normally. On 64-bit, we have +/-4GiB of reach, and + the executable is usually mapped at 0x80000000 - aim for somewhere + below it. */ + +void * +alloc_jump_pad_buffer (size_t size) +{ +#ifdef __s390x__ + uintptr_t addr; + uintptr_t exec_base = getauxval (AT_PHDR); + int pagesize; + void *res; + + if (exec_base == 0) + exec_base = 0x80000000; + + pagesize = sysconf (_SC_PAGE_SIZE); + if (pagesize == -1) + perror_with_name ("sysconf"); + + addr = exec_base - size; + + /* size should already be page-aligned, but this can't hurt. */ + addr &= ~(pagesize - 1); + + /* Search for a free area. If we hit 0, we're out of luck. */ + for (; addr; addr -= pagesize) + { + /* No MAP_FIXED - we don't want to zap someone's mapping. */ + res = mmap ((void *) addr, size, + PROT_READ | PROT_WRITE | PROT_EXEC, + MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); + + /* If we got what we wanted, return. */ + if ((uintptr_t) res == addr) + return res; + + /* If we got a mapping, but at a wrong address, undo it. */ + if (res != MAP_FAILED) + munmap (res, size); + } + + return NULL; +#else + void *res = mmap (NULL, size, PROT_READ | PROT_WRITE | PROT_EXEC, + MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); + + if (res == MAP_FAILED) + return NULL; + + return res; +#endif +} + +void +initialize_low_tracepoint (void) +{ +#ifdef __s390x__ + init_registers_s390x_linux64 (); + init_registers_s390x_linux64v1 (); + init_registers_s390x_linux64v2 (); + init_registers_s390x_te_linux64 (); + init_registers_s390x_vx_linux64 (); + init_registers_s390x_tevx_linux64 (); + init_registers_s390x_gs_linux64 (); +#else + init_registers_s390_linux32 (); + init_registers_s390_linux32v1 (); + init_registers_s390_linux32v2 (); + init_registers_s390_linux64 (); + init_registers_s390_linux64v1 (); + init_registers_s390_linux64v2 (); + init_registers_s390_te_linux64 (); + init_registers_s390_vx_linux64 (); + init_registers_s390_tevx_linux64 (); + init_registers_s390_gs_linux64 (); +#endif +} diff -Nru gdb-9.1/gdbserver/linux-s390-low.cc gdb-10.2/gdbserver/linux-s390-low.cc --- gdb-9.1/gdbserver/linux-s390-low.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/linux-s390-low.cc 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,2890 @@ +/* GNU/Linux S/390 specific low level interface, for the remote server + for GDB. + Copyright (C) 2001-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +/* This file is used for both 31-bit and 64-bit S/390 systems. */ + +#include "server.h" +#include "linux-low.h" +#include "elf/common.h" +#include "ax.h" +#include "tracepoint.h" + +#include <asm/ptrace.h> +#include "nat/gdb_ptrace.h" +#include <sys/uio.h> +#include <elf.h> +#include <inttypes.h> + +#include "linux-s390-tdesc.h" + +#ifndef HWCAP_S390_HIGH_GPRS +#define HWCAP_S390_HIGH_GPRS 512 +#endif + +#ifndef HWCAP_S390_TE +#define HWCAP_S390_TE 1024 +#endif + +#ifndef HWCAP_S390_VX +#define HWCAP_S390_VX 2048 +#endif + +#ifndef HWCAP_S390_GS +#define HWCAP_S390_GS 16384 +#endif + +#define s390_num_regs 52 + +/* Linux target op definitions for the S/390 architecture. */ + +class s390_target : public linux_process_target +{ +public: + + const regs_info *get_regs_info () override; + + const gdb_byte *sw_breakpoint_from_kind (int kind, int *size) override; + + bool supports_z_point_type (char z_type) override; + + bool supports_tracepoints () override; + + bool supports_fast_tracepoints () override; + + int install_fast_tracepoint_jump_pad + (CORE_ADDR tpoint, CORE_ADDR tpaddr, CORE_ADDR collector, + CORE_ADDR lockaddr, ULONGEST orig_size, CORE_ADDR *jump_entry, + CORE_ADDR *trampoline, ULONGEST *trampoline_size, + unsigned char *jjump_pad_insn, ULONGEST *jjump_pad_insn_size, + CORE_ADDR *adjusted_insn_addr, CORE_ADDR *adjusted_insn_addr_end, + char *err) override; + + int get_min_fast_tracepoint_insn_len () override; + + void low_collect_ptrace_register (regcache *regcache, int regno, + char *buf) override; + + void low_supply_ptrace_register (regcache *regcache, int regno, + const char *buf) override; + + struct emit_ops *emit_ops () override; + + int get_ipa_tdesc_idx () override; + +protected: + + void low_arch_setup () override; + + bool low_cannot_fetch_register (int regno) override; + + bool low_cannot_store_register (int regno) override; + + bool low_supports_breakpoints () override; + + CORE_ADDR low_get_pc (regcache *regcache) override; + + void low_set_pc (regcache *regcache, CORE_ADDR newpc) override; + + int low_decr_pc_after_break () override; + + bool low_breakpoint_at (CORE_ADDR pc) override; + + int low_get_thread_area (int lwpid, CORE_ADDR *addrp) override; +}; + +/* The singleton target ops object. */ + +static s390_target the_s390_target; + +static int s390_regmap[] = { + PT_PSWMASK, PT_PSWADDR, + + PT_GPR0, PT_GPR1, PT_GPR2, PT_GPR3, + PT_GPR4, PT_GPR5, PT_GPR6, PT_GPR7, + PT_GPR8, PT_GPR9, PT_GPR10, PT_GPR11, + PT_GPR12, PT_GPR13, PT_GPR14, PT_GPR15, + + PT_ACR0, PT_ACR1, PT_ACR2, PT_ACR3, + PT_ACR4, PT_ACR5, PT_ACR6, PT_ACR7, + PT_ACR8, PT_ACR9, PT_ACR10, PT_ACR11, + PT_ACR12, PT_ACR13, PT_ACR14, PT_ACR15, + + PT_FPC, + +#ifndef __s390x__ + PT_FPR0_HI, PT_FPR1_HI, PT_FPR2_HI, PT_FPR3_HI, + PT_FPR4_HI, PT_FPR5_HI, PT_FPR6_HI, PT_FPR7_HI, + PT_FPR8_HI, PT_FPR9_HI, PT_FPR10_HI, PT_FPR11_HI, + PT_FPR12_HI, PT_FPR13_HI, PT_FPR14_HI, PT_FPR15_HI, +#else + PT_FPR0, PT_FPR1, PT_FPR2, PT_FPR3, + PT_FPR4, PT_FPR5, PT_FPR6, PT_FPR7, + PT_FPR8, PT_FPR9, PT_FPR10, PT_FPR11, + PT_FPR12, PT_FPR13, PT_FPR14, PT_FPR15, +#endif + + PT_ORIGGPR2, +}; + +#define s390_num_regs_3264 68 + +#ifdef __s390x__ +static int s390_regmap_3264[] = { + PT_PSWMASK, PT_PSWADDR, + + PT_GPR0, PT_GPR0, PT_GPR1, PT_GPR1, + PT_GPR2, PT_GPR2, PT_GPR3, PT_GPR3, + PT_GPR4, PT_GPR4, PT_GPR5, PT_GPR5, + PT_GPR6, PT_GPR6, PT_GPR7, PT_GPR7, + PT_GPR8, PT_GPR8, PT_GPR9, PT_GPR9, + PT_GPR10, PT_GPR10, PT_GPR11, PT_GPR11, + PT_GPR12, PT_GPR12, PT_GPR13, PT_GPR13, + PT_GPR14, PT_GPR14, PT_GPR15, PT_GPR15, + + PT_ACR0, PT_ACR1, PT_ACR2, PT_ACR3, + PT_ACR4, PT_ACR5, PT_ACR6, PT_ACR7, + PT_ACR8, PT_ACR9, PT_ACR10, PT_ACR11, + PT_ACR12, PT_ACR13, PT_ACR14, PT_ACR15, + + PT_FPC, + + PT_FPR0, PT_FPR1, PT_FPR2, PT_FPR3, + PT_FPR4, PT_FPR5, PT_FPR6, PT_FPR7, + PT_FPR8, PT_FPR9, PT_FPR10, PT_FPR11, + PT_FPR12, PT_FPR13, PT_FPR14, PT_FPR15, + + PT_ORIGGPR2, +}; +#else +static int s390_regmap_3264[] = { + PT_PSWMASK, PT_PSWADDR, + + -1, PT_GPR0, -1, PT_GPR1, + -1, PT_GPR2, -1, PT_GPR3, + -1, PT_GPR4, -1, PT_GPR5, + -1, PT_GPR6, -1, PT_GPR7, + -1, PT_GPR8, -1, PT_GPR9, + -1, PT_GPR10, -1, PT_GPR11, + -1, PT_GPR12, -1, PT_GPR13, + -1, PT_GPR14, -1, PT_GPR15, + + PT_ACR0, PT_ACR1, PT_ACR2, PT_ACR3, + PT_ACR4, PT_ACR5, PT_ACR6, PT_ACR7, + PT_ACR8, PT_ACR9, PT_ACR10, PT_ACR11, + PT_ACR12, PT_ACR13, PT_ACR14, PT_ACR15, + + PT_FPC, + + PT_FPR0_HI, PT_FPR1_HI, PT_FPR2_HI, PT_FPR3_HI, + PT_FPR4_HI, PT_FPR5_HI, PT_FPR6_HI, PT_FPR7_HI, + PT_FPR8_HI, PT_FPR9_HI, PT_FPR10_HI, PT_FPR11_HI, + PT_FPR12_HI, PT_FPR13_HI, PT_FPR14_HI, PT_FPR15_HI, + + PT_ORIGGPR2, +}; +#endif + + +bool +s390_target::low_cannot_fetch_register (int regno) +{ + return false; +} + +bool +s390_target::low_cannot_store_register (int regno) +{ + return false; +} + +void +s390_target::low_collect_ptrace_register (regcache *regcache, int regno, + char *buf) +{ + int size = register_size (regcache->tdesc, regno); + const struct regs_info *regs_info = get_regs_info (); + struct usrregs_info *usr = regs_info->usrregs; + int regaddr = usr->regmap[regno]; + + if (size < sizeof (long)) + { + memset (buf, 0, sizeof (long)); + + if ((regno ^ 1) < usr->num_regs + && usr->regmap[regno ^ 1] == regaddr) + { + collect_register (regcache, regno & ~1, buf); + collect_register (regcache, (regno & ~1) + 1, + buf + sizeof (long) - size); + } + else if (regaddr == PT_PSWMASK) + { + /* Convert 4-byte PSW mask to 8 bytes by clearing bit 12 and copying + the basic addressing mode bit from the PSW address. */ + gdb_byte *addr = (gdb_byte *) alloca (register_size (regcache->tdesc, regno ^ 1)); + collect_register (regcache, regno, buf); + collect_register (regcache, regno ^ 1, addr); + buf[1] &= ~0x8; + buf[size] |= (addr[0] & 0x80); + } + else if (regaddr == PT_PSWADDR) + { + /* Convert 4-byte PSW address to 8 bytes by clearing the addressing + mode bit (which gets copied to the PSW mask instead). */ + collect_register (regcache, regno, buf + sizeof (long) - size); + buf[sizeof (long) - size] &= ~0x80; + } + else if ((regaddr >= PT_GPR0 && regaddr <= PT_GPR15) + || regaddr == PT_ORIGGPR2) + collect_register (regcache, regno, buf + sizeof (long) - size); + else + collect_register (regcache, regno, buf); + } + else if (regaddr != -1) + collect_register (regcache, regno, buf); +} + +void +s390_target::low_supply_ptrace_register (regcache *regcache, int regno, + const char *buf) +{ + int size = register_size (regcache->tdesc, regno); + const struct regs_info *regs_info = get_regs_info (); + struct usrregs_info *usr = regs_info->usrregs; + int regaddr = usr->regmap[regno]; + + if (size < sizeof (long)) + { + if ((regno ^ 1) < usr->num_regs + && usr->regmap[regno ^ 1] == regaddr) + { + supply_register (regcache, regno & ~1, buf); + supply_register (regcache, (regno & ~1) + 1, + buf + sizeof (long) - size); + } + else if (regaddr == PT_PSWMASK) + { + /* Convert 8-byte PSW mask to 4 bytes by setting bit 12 and copying + the basic addressing mode into the PSW address. */ + gdb_byte *mask = (gdb_byte *) alloca (size); + gdb_byte *addr = (gdb_byte *) alloca (register_size (regcache->tdesc, regno ^ 1)); + memcpy (mask, buf, size); + mask[1] |= 0x8; + supply_register (regcache, regno, mask); + + collect_register (regcache, regno ^ 1, addr); + addr[0] &= ~0x80; + addr[0] |= (buf[size] & 0x80); + supply_register (regcache, regno ^ 1, addr); + } + else if (regaddr == PT_PSWADDR) + { + /* Convert 8-byte PSW address to 4 bytes by truncating, but + keeping the addressing mode bit (which was set from the mask). */ + gdb_byte *addr = (gdb_byte *) alloca (size); + char amode; + collect_register (regcache, regno, addr); + amode = addr[0] & 0x80; + memcpy (addr, buf + sizeof (long) - size, size); + addr[0] &= ~0x80; + addr[0] |= amode; + supply_register (regcache, regno, addr); + } + else if ((regaddr >= PT_GPR0 && regaddr <= PT_GPR15) + || regaddr == PT_ORIGGPR2) + supply_register (regcache, regno, buf + sizeof (long) - size); + else + supply_register (regcache, regno, buf); + } + else if (regaddr != -1) + supply_register (regcache, regno, buf); +} + +/* Provide only a fill function for the general register set. ps_lgetregs + will use this for NPTL support. */ + +static void +s390_fill_gregset (struct regcache *regcache, void *buf) +{ + int i; + const struct regs_info *regs_info = the_linux_target->get_regs_info (); + struct usrregs_info *usr = regs_info->usrregs; + + for (i = 0; i < usr->num_regs; i++) + { + if (usr->regmap[i] < PT_PSWMASK + || usr->regmap[i] > PT_ACR15) + continue; + + ((s390_target *) the_linux_target)->low_collect_ptrace_register + (regcache, i, (char *) buf + usr->regmap[i]); + } +} + +/* Fill and store functions for extended register sets. */ + +#ifndef __s390x__ +static void +s390_fill_gprs_high (struct regcache *regcache, void *buf) +{ + int r0h = find_regno (regcache->tdesc, "r0h"); + int i; + + for (i = 0; i < 16; i++) + collect_register (regcache, r0h + 2 * i, (char *) buf + 4 * i); +} + +static void +s390_store_gprs_high (struct regcache *regcache, const void *buf) +{ + int r0h = find_regno (regcache->tdesc, "r0h"); + int i; + + for (i = 0; i < 16; i++) + supply_register (regcache, r0h + 2 * i, (const char *) buf + 4 * i); +} +#endif + +static void +s390_store_last_break (struct regcache *regcache, const void *buf) +{ + const char *p; + + p = (const char *) buf + 8 - register_size (regcache->tdesc, 0); + supply_register_by_name (regcache, "last_break", p); +} + +static void +s390_fill_system_call (struct regcache *regcache, void *buf) +{ + collect_register_by_name (regcache, "system_call", buf); +} + +static void +s390_store_system_call (struct regcache *regcache, const void *buf) +{ + supply_register_by_name (regcache, "system_call", buf); +} + +static void +s390_store_tdb (struct regcache *regcache, const void *buf) +{ + int tdb0 = find_regno (regcache->tdesc, "tdb0"); + int tr0 = find_regno (regcache->tdesc, "tr0"); + int i; + + for (i = 0; i < 4; i++) + supply_register (regcache, tdb0 + i, (const char *) buf + 8 * i); + + for (i = 0; i < 16; i++) + supply_register (regcache, tr0 + i, (const char *) buf + 8 * (16 + i)); +} + +static void +s390_fill_vxrs_low (struct regcache *regcache, void *buf) +{ + int v0 = find_regno (regcache->tdesc, "v0l"); + int i; + + for (i = 0; i < 16; i++) + collect_register (regcache, v0 + i, (char *) buf + 8 * i); +} + +static void +s390_store_vxrs_low (struct regcache *regcache, const void *buf) +{ + int v0 = find_regno (regcache->tdesc, "v0l"); + int i; + + for (i = 0; i < 16; i++) + supply_register (regcache, v0 + i, (const char *) buf + 8 * i); +} + +static void +s390_fill_vxrs_high (struct regcache *regcache, void *buf) +{ + int v16 = find_regno (regcache->tdesc, "v16"); + int i; + + for (i = 0; i < 16; i++) + collect_register (regcache, v16 + i, (char *) buf + 16 * i); +} + +static void +s390_store_vxrs_high (struct regcache *regcache, const void *buf) +{ + int v16 = find_regno (regcache->tdesc, "v16"); + int i; + + for (i = 0; i < 16; i++) + supply_register (regcache, v16 + i, (const char *) buf + 16 * i); +} + +static void +s390_store_gs (struct regcache *regcache, const void *buf) +{ + int gsd = find_regno (regcache->tdesc, "gsd"); + int i; + + for (i = 0; i < 3; i++) + supply_register (regcache, gsd + i, (const char *) buf + 8 * (i + 1)); +} + +static void +s390_store_gsbc (struct regcache *regcache, const void *buf) +{ + int bc_gsd = find_regno (regcache->tdesc, "bc_gsd"); + int i; + + for (i = 0; i < 3; i++) + supply_register (regcache, bc_gsd + i, (const char *) buf + 8 * (i + 1)); +} + +static struct regset_info s390_regsets[] = { + { 0, 0, 0, 0, GENERAL_REGS, s390_fill_gregset, NULL }, +#ifndef __s390x__ + { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_S390_HIGH_GPRS, 0, + EXTENDED_REGS, s390_fill_gprs_high, s390_store_gprs_high }, +#endif + /* Last break address is read-only; no fill function. */ + { PTRACE_GETREGSET, -1, NT_S390_LAST_BREAK, 0, EXTENDED_REGS, + NULL, s390_store_last_break }, + { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_S390_SYSTEM_CALL, 0, + EXTENDED_REGS, s390_fill_system_call, s390_store_system_call }, + /* TDB is read-only. */ + { PTRACE_GETREGSET, -1, NT_S390_TDB, 0, EXTENDED_REGS, + NULL, s390_store_tdb }, + { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_S390_VXRS_LOW, 0, + EXTENDED_REGS, s390_fill_vxrs_low, s390_store_vxrs_low }, + { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_S390_VXRS_HIGH, 0, + EXTENDED_REGS, s390_fill_vxrs_high, s390_store_vxrs_high }, + /* Guarded storage registers are read-only. */ + { PTRACE_GETREGSET, -1, NT_S390_GS_CB, 0, EXTENDED_REGS, + NULL, s390_store_gs }, + { PTRACE_GETREGSET, -1, NT_S390_GS_BC, 0, EXTENDED_REGS, + NULL, s390_store_gsbc }, + NULL_REGSET +}; + + +static const gdb_byte s390_breakpoint[] = { 0, 1 }; +#define s390_breakpoint_len 2 + +/* Implementation of target ops method "sw_breakpoint_from_kind". */ + +const gdb_byte * +s390_target::sw_breakpoint_from_kind (int kind, int *size) +{ + *size = s390_breakpoint_len; + return s390_breakpoint; +} + +bool +s390_target::low_supports_breakpoints () +{ + return true; +} + +CORE_ADDR +s390_target::low_get_pc (regcache *regcache) +{ + if (register_size (regcache->tdesc, 0) == 4) + { + unsigned int pswa; + collect_register_by_name (regcache, "pswa", &pswa); + return pswa & 0x7fffffff; + } + else + { + unsigned long pc; + collect_register_by_name (regcache, "pswa", &pc); + return pc; + } +} + +void +s390_target::low_set_pc (regcache *regcache, CORE_ADDR newpc) +{ + if (register_size (regcache->tdesc, 0) == 4) + { + unsigned int pswa; + collect_register_by_name (regcache, "pswa", &pswa); + pswa = (pswa & 0x80000000) | (newpc & 0x7fffffff); + supply_register_by_name (regcache, "pswa", &pswa); + } + else + { + unsigned long pc = newpc; + supply_register_by_name (regcache, "pswa", &pc); + } +} + +int +s390_target::low_decr_pc_after_break () +{ + return s390_breakpoint_len; +} + +/* Determine the word size for the given PID, in bytes. */ + +#ifdef __s390x__ +static int +s390_get_wordsize (int pid) +{ + errno = 0; + PTRACE_XFER_TYPE pswm = ptrace (PTRACE_PEEKUSER, pid, + (PTRACE_TYPE_ARG3) 0, + (PTRACE_TYPE_ARG4) 0); + if (errno != 0) + { + warning (_("Couldn't determine word size, assuming 64-bit.")); + return 8; + } + /* Derive word size from extended addressing mode (PSW bit 31). */ + return pswm & (1L << 32) ? 8 : 4; +} +#else +#define s390_get_wordsize(pid) 4 +#endif + +static int +s390_check_regset (int pid, int regset, int regsize) +{ + void *buf = alloca (regsize); + struct iovec iov; + + iov.iov_base = buf; + iov.iov_len = regsize; + + if (ptrace (PTRACE_GETREGSET, pid, (long) regset, (long) &iov) >= 0 + || errno == ENODATA) + return 1; + return 0; +} + +/* For a 31-bit inferior, whether the kernel supports using the full + 64-bit GPRs. */ +static int have_hwcap_s390_high_gprs = 0; +static int have_hwcap_s390_vx = 0; + +void +s390_target::low_arch_setup () +{ + const struct target_desc *tdesc; + struct regset_info *regset; + + /* Determine word size and HWCAP. */ + int pid = pid_of (current_thread); + int wordsize = s390_get_wordsize (pid); + unsigned long hwcap = linux_get_hwcap (wordsize); + + /* Check whether the kernel supports extra register sets. */ + int have_regset_last_break + = s390_check_regset (pid, NT_S390_LAST_BREAK, 8); + int have_regset_system_call + = s390_check_regset (pid, NT_S390_SYSTEM_CALL, 4); + int have_regset_tdb + = (s390_check_regset (pid, NT_S390_TDB, 256) + && (hwcap & HWCAP_S390_TE) != 0); + int have_regset_vxrs + = (s390_check_regset (pid, NT_S390_VXRS_LOW, 128) + && s390_check_regset (pid, NT_S390_VXRS_HIGH, 256) + && (hwcap & HWCAP_S390_VX) != 0); + int have_regset_gs + = (s390_check_regset (pid, NT_S390_GS_CB, 32) + && s390_check_regset (pid, NT_S390_GS_BC, 32) + && (hwcap & HWCAP_S390_GS) != 0); + + { +#ifdef __s390x__ + if (wordsize == 8) + { + if (have_regset_gs) + tdesc = tdesc_s390x_gs_linux64; + else if (have_regset_vxrs) + tdesc = (have_regset_tdb ? tdesc_s390x_tevx_linux64 : + tdesc_s390x_vx_linux64); + else if (have_regset_tdb) + tdesc = tdesc_s390x_te_linux64; + else if (have_regset_system_call) + tdesc = tdesc_s390x_linux64v2; + else if (have_regset_last_break) + tdesc = tdesc_s390x_linux64v1; + else + tdesc = tdesc_s390x_linux64; + } + + /* For a 31-bit inferior, check whether the kernel supports + using the full 64-bit GPRs. */ + else +#endif + if (hwcap & HWCAP_S390_HIGH_GPRS) + { + have_hwcap_s390_high_gprs = 1; + if (have_regset_gs) + tdesc = tdesc_s390_gs_linux64; + else if (have_regset_vxrs) + tdesc = (have_regset_tdb ? tdesc_s390_tevx_linux64 : + tdesc_s390_vx_linux64); + else if (have_regset_tdb) + tdesc = tdesc_s390_te_linux64; + else if (have_regset_system_call) + tdesc = tdesc_s390_linux64v2; + else if (have_regset_last_break) + tdesc = tdesc_s390_linux64v1; + else + tdesc = tdesc_s390_linux64; + } + else + { + /* Assume 31-bit inferior process. */ + if (have_regset_system_call) + tdesc = tdesc_s390_linux32v2; + else if (have_regset_last_break) + tdesc = tdesc_s390_linux32v1; + else + tdesc = tdesc_s390_linux32; + } + + have_hwcap_s390_vx = have_regset_vxrs; + } + + /* Update target_regsets according to available register sets. */ + for (regset = s390_regsets; regset->size >= 0; regset++) + if (regset->get_request == PTRACE_GETREGSET) + switch (regset->nt_type) + { +#ifndef __s390x__ + case NT_S390_HIGH_GPRS: + regset->size = have_hwcap_s390_high_gprs ? 64 : 0; + break; +#endif + case NT_S390_LAST_BREAK: + regset->size = have_regset_last_break ? 8 : 0; + break; + case NT_S390_SYSTEM_CALL: + regset->size = have_regset_system_call ? 4 : 0; + break; + case NT_S390_TDB: + regset->size = have_regset_tdb ? 256 : 0; + break; + case NT_S390_VXRS_LOW: + regset->size = have_regset_vxrs ? 128 : 0; + break; + case NT_S390_VXRS_HIGH: + regset->size = have_regset_vxrs ? 256 : 0; + break; + case NT_S390_GS_CB: + case NT_S390_GS_BC: + regset->size = have_regset_gs ? 32 : 0; + default: + break; + } + + current_process ()->tdesc = tdesc; +} + + +bool +s390_target::low_breakpoint_at (CORE_ADDR pc) +{ + unsigned char c[s390_breakpoint_len]; + read_inferior_memory (pc, c, s390_breakpoint_len); + return memcmp (c, s390_breakpoint, s390_breakpoint_len) == 0; +} + +/* Breakpoint/Watchpoint support. */ + +/* The "supports_z_point_type" target ops method. */ + +bool +s390_target::supports_z_point_type (char z_type) +{ + switch (z_type) + { + case Z_PACKET_SW_BP: + return true; + default: + return false; + } +} + +static struct usrregs_info s390_usrregs_info = + { + s390_num_regs, + s390_regmap, + }; + +static struct regsets_info s390_regsets_info = + { + s390_regsets, /* regsets */ + 0, /* num_regsets */ + NULL, /* disabled_regsets */ + }; + +static struct regs_info myregs_info = + { + NULL, /* regset_bitmap */ + &s390_usrregs_info, + &s390_regsets_info + }; + +static struct usrregs_info s390_usrregs_info_3264 = + { + s390_num_regs_3264, + s390_regmap_3264 + }; + +static struct regsets_info s390_regsets_info_3264 = + { + s390_regsets, /* regsets */ + 0, /* num_regsets */ + NULL, /* disabled_regsets */ + }; + +static struct regs_info regs_info_3264 = + { + NULL, /* regset_bitmap */ + &s390_usrregs_info_3264, + &s390_regsets_info_3264 + }; + +const regs_info * +s390_target::get_regs_info () +{ + if (have_hwcap_s390_high_gprs) + { +#ifdef __s390x__ + const struct target_desc *tdesc = current_process ()->tdesc; + + if (register_size (tdesc, 0) == 4) + return ®s_info_3264; +#else + return ®s_info_3264; +#endif + } + return &myregs_info; +} + +/* The "supports_tracepoints" target ops method. */ + +bool +s390_target::supports_tracepoints () +{ + return true; +} + +/* Implementation of linux target ops method "low_get_thread_area". */ + +int +s390_target::low_get_thread_area (int lwpid, CORE_ADDR *addrp) +{ + CORE_ADDR res = ptrace (PTRACE_PEEKUSER, lwpid, (long) PT_ACR0, (long) 0); +#ifdef __s390x__ + struct regcache *regcache = get_thread_regcache (current_thread, 0); + + if (register_size (regcache->tdesc, 0) == 4) + res &= 0xffffffffull; +#endif + *addrp = res; + return 0; +} + + +/* Fast tracepoint support. + + The register save area on stack is identical for all targets: + + 0x000+i*0x10: VR0-VR31 + 0x200+i*8: GR0-GR15 + 0x280+i*4: AR0-AR15 + 0x2c0: PSWM [64-bit] + 0x2c8: PSWA [64-bit] + 0x2d0: FPC + + If we're on 31-bit linux, we just don't store the high parts of the GPRs. + Likewise, if there's no VX support, we just store the FRs into the slots + of low VR halves. The agent code is responsible for rearranging that + into regcache. */ + +/* Code sequence saving GPRs for 31-bit target with no high GPRs. There's + one trick used at the very beginning: since there's no way to allocate + stack space without destroying CC (lay instruction can do it, but it's + only supported on later CPUs), we take 4 different execution paths for + every possible value of CC, allocate stack space, save %r0, stuff the + CC value in %r0 (shifted to match its position in PSWM high word), + then branch to common path. */ + +static const unsigned char s390_ft_entry_gpr_esa[] = { + 0xa7, 0x14, 0x00, 0x1e, /* jo .Lcc3 */ + 0xa7, 0x24, 0x00, 0x14, /* jh .Lcc2 */ + 0xa7, 0x44, 0x00, 0x0a, /* jl .Lcc1 */ + /* CC = 0 */ + 0xa7, 0xfa, 0xfd, 0x00, /* ahi %r15, -0x300 */ + 0x50, 0x00, 0xf2, 0x04, /* st %r0, 0x204(%r15) */ + 0xa7, 0x08, 0x00, 0x00, /* lhi %r0, 0 */ + 0xa7, 0xf4, 0x00, 0x18, /* j .Lccdone */ + /* .Lcc1: */ + 0xa7, 0xfa, 0xfd, 0x00, /* ahi %r15, -0x300 */ + 0x50, 0x00, 0xf2, 0x04, /* st %r0, 0x204(%r15) */ + 0xa7, 0x08, 0x10, 0x00, /* lhi %r0, 0x1000 */ + 0xa7, 0xf4, 0x00, 0x10, /* j .Lccdone */ + /* .Lcc2: */ + 0xa7, 0xfa, 0xfd, 0x00, /* ahi %r15, -0x300 */ + 0x50, 0x00, 0xf2, 0x04, /* st %r0, 0x204(%r15) */ + 0xa7, 0x08, 0x20, 0x00, /* lhi %r0, 0x2000 */ + 0xa7, 0xf4, 0x00, 0x08, /* j .Lccdone */ + /* .Lcc3: */ + 0xa7, 0xfa, 0xfd, 0x00, /* ahi %r15, -0x300 */ + 0x50, 0x00, 0xf2, 0x04, /* st %r0, 0x204(%r15) */ + 0xa7, 0x08, 0x30, 0x00, /* lhi %r0, 0x3000 */ + /* .Lccdone: */ + 0x50, 0x10, 0xf2, 0x0c, /* st %r1, 0x20c(%r15) */ + 0x50, 0x20, 0xf2, 0x14, /* st %r2, 0x214(%r15) */ + 0x50, 0x30, 0xf2, 0x1c, /* st %r3, 0x21c(%r15) */ + 0x50, 0x40, 0xf2, 0x24, /* st %r4, 0x224(%r15) */ + 0x50, 0x50, 0xf2, 0x2c, /* st %r5, 0x22c(%r15) */ + 0x50, 0x60, 0xf2, 0x34, /* st %r6, 0x234(%r15) */ + 0x50, 0x70, 0xf2, 0x3c, /* st %r7, 0x23c(%r15) */ + 0x50, 0x80, 0xf2, 0x44, /* st %r8, 0x244(%r15) */ + 0x50, 0x90, 0xf2, 0x4c, /* st %r9, 0x24c(%r15) */ + 0x50, 0xa0, 0xf2, 0x54, /* st %r10, 0x254(%r15) */ + 0x50, 0xb0, 0xf2, 0x5c, /* st %r11, 0x25c(%r15) */ + 0x50, 0xc0, 0xf2, 0x64, /* st %r12, 0x264(%r15) */ + 0x50, 0xd0, 0xf2, 0x6c, /* st %r13, 0x26c(%r15) */ + 0x50, 0xe0, 0xf2, 0x74, /* st %r14, 0x274(%r15) */ + /* Compute original value of %r15 and store it. We use ahi instead + of la to preserve the whole value, and not just the low 31 bits. + This is not particularly important here, but essential in the + zarch case where someone might be using the high word of %r15 + as an extra register. */ + 0x18, 0x1f, /* lr %r1, %r15 */ + 0xa7, 0x1a, 0x03, 0x00, /* ahi %r1, 0x300 */ + 0x50, 0x10, 0xf2, 0x7c, /* st %r1, 0x27c(%r15) */ +}; + +/* Code sequence saving GPRs for 31-bit target with high GPRs and for 64-bit + target. Same as above, except this time we can use load/store multiple, + since the 64-bit regs are tightly packed. */ + +static const unsigned char s390_ft_entry_gpr_zarch[] = { + 0xa7, 0x14, 0x00, 0x21, /* jo .Lcc3 */ + 0xa7, 0x24, 0x00, 0x16, /* jh .Lcc2 */ + 0xa7, 0x44, 0x00, 0x0b, /* jl .Lcc1 */ + /* CC = 0 */ + 0xa7, 0xfb, 0xfd, 0x00, /* aghi %r15, -0x300 */ + 0xeb, 0x0e, 0xf2, 0x00, 0x00, 0x24, /* stmg %r0, %r14, 0x200(%r15) */ + 0xa7, 0x08, 0x00, 0x00, /* lhi %r0, 0 */ + 0xa7, 0xf4, 0x00, 0x1b, /* j .Lccdone */ + /* .Lcc1: */ + 0xa7, 0xfb, 0xfd, 0x00, /* aghi %r15, -0x300 */ + 0xeb, 0x0e, 0xf2, 0x00, 0x00, 0x24, /* stmg %r0, %r14, 0x200(%r15) */ + 0xa7, 0x08, 0x10, 0x00, /* lhi %r0, 0x1000 */ + 0xa7, 0xf4, 0x00, 0x12, /* j .Lccdone */ + /* .Lcc2: */ + 0xa7, 0xfb, 0xfd, 0x00, /* aghi %r15, -0x300 */ + 0xeb, 0x0e, 0xf2, 0x00, 0x00, 0x24, /* stmg %r0, %r14, 0x200(%r15) */ + 0xa7, 0x08, 0x20, 0x00, /* lhi %r0, 0x2000 */ + 0xa7, 0xf4, 0x00, 0x09, /* j .Lccdone */ + /* .Lcc3: */ + 0xa7, 0xfb, 0xfd, 0x00, /* aghi %r15, -0x300 */ + 0xeb, 0x0e, 0xf2, 0x00, 0x00, 0x24, /* stmg %r0, %r14, 0x200(%r15) */ + 0xa7, 0x08, 0x30, 0x00, /* lhi %r0, 0x3000 */ + /* .Lccdone: */ + 0xb9, 0x04, 0x00, 0x1f, /* lgr %r1, %r15 */ + 0xa7, 0x1b, 0x03, 0x00, /* aghi %r1, 0x300 */ + 0xe3, 0x10, 0xf2, 0x78, 0x00, 0x24, /* stg %r1, 0x278(%r15) */ +}; + +/* Code sequence saving ARs, PSWM and FPC. PSWM has to be assembled from + current PSWM (read by epsw) and CC from entry (in %r0). */ + +static const unsigned char s390_ft_entry_misc[] = { + 0x9b, 0x0f, 0xf2, 0x80, /* stam %a0, %a15, 0x20(%%r15) */ + 0xb9, 0x8d, 0x00, 0x23, /* epsw %r2, %r3 */ + 0xa7, 0x18, 0xcf, 0xff, /* lhi %r1, ~0x3000 */ + 0x14, 0x21, /* nr %r2, %r1 */ + 0x16, 0x20, /* or %r2, %r0 */ + 0x50, 0x20, 0xf2, 0xc0, /* st %r2, 0x2c0(%r15) */ + 0x50, 0x30, 0xf2, 0xc4, /* st %r3, 0x2c4(%r15) */ + 0xb2, 0x9c, 0xf2, 0xd0, /* stfpc 0x2d0(%r15) */ +}; + +/* Code sequence saving FRs, used if VX not supported. */ + +static const unsigned char s390_ft_entry_fr[] = { + 0x60, 0x00, 0xf0, 0x00, /* std %f0, 0x000(%r15) */ + 0x60, 0x10, 0xf0, 0x10, /* std %f1, 0x010(%r15) */ + 0x60, 0x20, 0xf0, 0x20, /* std %f2, 0x020(%r15) */ + 0x60, 0x30, 0xf0, 0x30, /* std %f3, 0x030(%r15) */ + 0x60, 0x40, 0xf0, 0x40, /* std %f4, 0x040(%r15) */ + 0x60, 0x50, 0xf0, 0x50, /* std %f5, 0x050(%r15) */ + 0x60, 0x60, 0xf0, 0x60, /* std %f6, 0x060(%r15) */ + 0x60, 0x70, 0xf0, 0x70, /* std %f7, 0x070(%r15) */ + 0x60, 0x80, 0xf0, 0x80, /* std %f8, 0x080(%r15) */ + 0x60, 0x90, 0xf0, 0x90, /* std %f9, 0x090(%r15) */ + 0x60, 0xa0, 0xf0, 0xa0, /* std %f10, 0x0a0(%r15) */ + 0x60, 0xb0, 0xf0, 0xb0, /* std %f11, 0x0b0(%r15) */ + 0x60, 0xc0, 0xf0, 0xc0, /* std %f12, 0x0c0(%r15) */ + 0x60, 0xd0, 0xf0, 0xd0, /* std %f13, 0x0d0(%r15) */ + 0x60, 0xe0, 0xf0, 0xe0, /* std %f14, 0x0e0(%r15) */ + 0x60, 0xf0, 0xf0, 0xf0, /* std %f15, 0x0f0(%r15) */ +}; + +/* Code sequence saving VRs, used if VX not supported. */ + +static const unsigned char s390_ft_entry_vr[] = { + 0xe7, 0x0f, 0xf0, 0x00, 0x00, 0x3e, /* vstm %v0, %v15, 0x000(%r15) */ + 0xe7, 0x0f, 0xf1, 0x00, 0x0c, 0x3e, /* vstm %v16, %v31, 0x100(%r15) */ +}; + +/* Code sequence doing the collection call for 31-bit target. %r1 contains + the address of the literal pool. */ + +static const unsigned char s390_ft_main_31[] = { + /* Load the literals into registers. */ + 0x58, 0x50, 0x10, 0x00, /* l %r5, 0x0(%r1) */ + 0x58, 0x20, 0x10, 0x04, /* l %r2, 0x4(%r1) */ + 0x58, 0x40, 0x10, 0x08, /* l %r4, 0x8(%r1) */ + 0x58, 0x60, 0x10, 0x0c, /* l %r6, 0xc(%r1) */ + /* Save original PSWA (tracepoint address | 0x80000000). */ + 0x50, 0x50, 0xf2, 0xcc, /* st %r5, 0x2cc(%r15) */ + /* Construct a collecting_t object at %r15+0x2e0. */ + 0x50, 0x20, 0xf2, 0xe0, /* st %r2, 0x2e0(%r15) */ + 0x9b, 0x00, 0xf2, 0xe4, /* stam %a0, %a0, 0x2e4(%r15) */ + /* Move its address to %r0. */ + 0x41, 0x00, 0xf2, 0xe0, /* la %r0, 0x2e0(%r15) */ + /* Take the lock. */ + /* .Lloop: */ + 0xa7, 0x18, 0x00, 0x00, /* lhi %r1, 0 */ + 0xba, 0x10, 0x60, 0x00, /* cs %r1, %r0, 0(%r6) */ + 0xa7, 0x74, 0xff, 0xfc, /* jne .Lloop */ + /* Address of the register save block to %r3. */ + 0x18, 0x3f, /* lr %r3, %r15 */ + /* Make a stack frame, so that we can call the collector. */ + 0xa7, 0xfa, 0xff, 0xa0, /* ahi %r15, -0x60 */ + /* Call it. */ + 0x0d, 0xe4, /* basr %r14, %r4 */ + /* And get rid of the stack frame again. */ + 0x41, 0xf0, 0xf0, 0x60, /* la %r15, 0x60(%r15) */ + /* Leave the lock. */ + 0x07, 0xf0, /* br %r0 */ + 0xa7, 0x18, 0x00, 0x00, /* lhi %r1, 0 */ + 0x50, 0x10, 0x60, 0x00, /* st %t1, 0(%r6) */ +}; + +/* Code sequence doing the collection call for 64-bit target. %r1 contains + the address of the literal pool. */ + +static const unsigned char s390_ft_main_64[] = { + /* Load the literals into registers. */ + 0xe3, 0x50, 0x10, 0x00, 0x00, 0x04, /* lg %r5, 0x00(%r1) */ + 0xe3, 0x20, 0x10, 0x08, 0x00, 0x04, /* lg %r2, 0x08(%r1) */ + 0xe3, 0x40, 0x10, 0x10, 0x00, 0x04, /* lg %r4, 0x10(%r1) */ + 0xe3, 0x60, 0x10, 0x18, 0x00, 0x04, /* lg %r6, 0x18(%r1) */ + /* Save original PSWA (tracepoint address). */ + 0xe3, 0x50, 0xf2, 0xc8, 0x00, 0x24, /* stg %r5, 0x2c8(%r15) */ + /* Construct a collecting_t object at %r15+0x2e0. */ + 0xe3, 0x20, 0xf2, 0xe0, 0x00, 0x24, /* stg %r2, 0x2e0(%r15) */ + 0x9b, 0x01, 0xf2, 0xe8, /* stam %a0, %a1, 0x2e8(%r15) */ + /* Move its address to %r0. */ + 0x41, 0x00, 0xf2, 0xe0, /* la %r0, 0x2e0(%r15) */ + /* Take the lock. */ + /* .Lloop: */ + 0xa7, 0x19, 0x00, 0x00, /* lghi %r1, 0 */ + 0xeb, 0x10, 0x60, 0x00, 0x00, 0x30, /* csg %r1, %r0, 0(%r6) */ + 0xa7, 0x74, 0xff, 0xfb, /* jne .Lloop */ + /* Address of the register save block to %r3. */ + 0xb9, 0x04, 0x00, 0x3f, /* lgr %r3, %r15 */ + /* Make a stack frame, so that we can call the collector. */ + 0xa7, 0xfb, 0xff, 0x60, /* aghi %r15, -0xa0 */ + /* Call it. */ + 0x0d, 0xe4, /* basr %r14, %r4 */ + /* And get rid of the stack frame again. */ + 0x41, 0xf0, 0xf0, 0xa0, /* la %r15, 0xa0(%r15) */ + /* Leave the lock. */ + 0x07, 0xf0, /* br %r0 */ + 0xa7, 0x19, 0x00, 0x00, /* lghi %r1, 0 */ + 0xe3, 0x10, 0x60, 0x00, 0x00, 0x24, /* stg %t1, 0(%r6) */ +}; + +/* Code sequence restoring FRs, for targets with no VX support. */ + +static const unsigned char s390_ft_exit_fr[] = { + 0x68, 0x00, 0xf0, 0x00, /* ld %f0, 0x000(%r15) */ + 0x68, 0x10, 0xf0, 0x10, /* ld %f1, 0x010(%r15) */ + 0x68, 0x20, 0xf0, 0x20, /* ld %f2, 0x020(%r15) */ + 0x68, 0x30, 0xf0, 0x30, /* ld %f3, 0x030(%r15) */ + 0x68, 0x40, 0xf0, 0x40, /* ld %f4, 0x040(%r15) */ + 0x68, 0x50, 0xf0, 0x50, /* ld %f5, 0x050(%r15) */ + 0x68, 0x60, 0xf0, 0x60, /* ld %f6, 0x060(%r15) */ + 0x68, 0x70, 0xf0, 0x70, /* ld %f7, 0x070(%r15) */ + 0x68, 0x80, 0xf0, 0x80, /* ld %f8, 0x080(%r15) */ + 0x68, 0x90, 0xf0, 0x90, /* ld %f9, 0x090(%r15) */ + 0x68, 0xa0, 0xf0, 0xa0, /* ld %f10, 0x0a0(%r15) */ + 0x68, 0xb0, 0xf0, 0xb0, /* ld %f11, 0x0b0(%r15) */ + 0x68, 0xc0, 0xf0, 0xc0, /* ld %f12, 0x0c0(%r15) */ + 0x68, 0xd0, 0xf0, 0xd0, /* ld %f13, 0x0d0(%r15) */ + 0x68, 0xe0, 0xf0, 0xe0, /* ld %f14, 0x0e0(%r15) */ + 0x68, 0xf0, 0xf0, 0xf0, /* ld %f15, 0x0f0(%r15) */ +}; + +/* Code sequence restoring VRs. */ + +static const unsigned char s390_ft_exit_vr[] = { + 0xe7, 0x0f, 0xf0, 0x00, 0x00, 0x36, /* vlm %v0, %v15, 0x000(%r15) */ + 0xe7, 0x0f, 0xf1, 0x00, 0x0c, 0x36, /* vlm %v16, %v31, 0x100(%r15) */ +}; + +/* Code sequence restoring misc registers. As for PSWM, only CC should be + modified by C code, so we use the alr instruction to restore it by + manufacturing an operand that'll result in the original flags. */ + +static const unsigned char s390_ft_exit_misc[] = { + 0xb2, 0x9d, 0xf2, 0xd0, /* lfpc 0x2d0(%r15) */ + 0x58, 0x00, 0xf2, 0xc0, /* l %r0, 0x2c0(%r15) */ + /* Extract CC to high 2 bits of %r0. */ + 0x88, 0x00, 0x00, 0x0c, /* srl %r0, 12 */ + 0x89, 0x00, 0x00, 0x1e, /* sll %r0, 30 */ + /* Add %r0 to itself. Result will be nonzero iff CC bit 0 is set, and + will have carry iff CC bit 1 is set - resulting in the same flags + as the original. */ + 0x1e, 0x00, /* alr %r0, %r0 */ + 0x9a, 0x0f, 0xf2, 0x80, /* lam %a0, %a15, 0x280(%r15) */ +}; + +/* Code sequence restoring GPRs, for 31-bit targets with no high GPRs. */ + +static const unsigned char s390_ft_exit_gpr_esa[] = { + 0x58, 0x00, 0xf2, 0x04, /* l %r0, 0x204(%r15) */ + 0x58, 0x10, 0xf2, 0x0c, /* l %r1, 0x20c(%r15) */ + 0x58, 0x20, 0xf2, 0x14, /* l %r2, 0x214(%r15) */ + 0x58, 0x30, 0xf2, 0x1c, /* l %r3, 0x21c(%r15) */ + 0x58, 0x40, 0xf2, 0x24, /* l %r4, 0x224(%r15) */ + 0x58, 0x50, 0xf2, 0x2c, /* l %r5, 0x22c(%r15) */ + 0x58, 0x60, 0xf2, 0x34, /* l %r6, 0x234(%r15) */ + 0x58, 0x70, 0xf2, 0x3c, /* l %r7, 0x23c(%r15) */ + 0x58, 0x80, 0xf2, 0x44, /* l %r8, 0x244(%r15) */ + 0x58, 0x90, 0xf2, 0x4c, /* l %r9, 0x24c(%r15) */ + 0x58, 0xa0, 0xf2, 0x54, /* l %r10, 0x254(%r15) */ + 0x58, 0xb0, 0xf2, 0x5c, /* l %r11, 0x25c(%r15) */ + 0x58, 0xc0, 0xf2, 0x64, /* l %r12, 0x264(%r15) */ + 0x58, 0xd0, 0xf2, 0x6c, /* l %r13, 0x26c(%r15) */ + 0x58, 0xe0, 0xf2, 0x74, /* l %r14, 0x274(%r15) */ + 0x58, 0xf0, 0xf2, 0x7c, /* l %r15, 0x27c(%r15) */ +}; + +/* Code sequence restoring GPRs, for 64-bit targets and 31-bit targets + with high GPRs. */ + +static const unsigned char s390_ft_exit_gpr_zarch[] = { + 0xeb, 0x0f, 0xf2, 0x00, 0x00, 0x04, /* lmg %r0, %r15, 0x200(%r15) */ +}; + +/* Writes instructions to target, updating the to pointer. */ + +static void +append_insns (CORE_ADDR *to, size_t len, const unsigned char *buf) +{ + target_write_memory (*to, buf, len); + *to += len; +} + +/* Relocates an instruction from oldloc to *to, updating to. */ + +static int +s390_relocate_instruction (CORE_ADDR *to, CORE_ADDR oldloc, int is_64) +{ + gdb_byte buf[6]; + int ilen; + int op2; + /* 0: no fixup, 1: PC16DBL fixup, 2: PC32DBL fixup. */ + int mode = 0; + int is_bras = 0; + read_inferior_memory (oldloc, buf, sizeof buf); + if (buf[0] < 0x40) + ilen = 2; + else if (buf[0] < 0xc0) + ilen = 4; + else + ilen = 6; + switch (buf[0]) + { + case 0x05: /* BALR */ + case 0x0c: /* BASSM */ + case 0x0d: /* BASR */ + case 0x45: /* BAL */ + case 0x4d: /* BAS */ + /* These save a return address and mess around with registers. + We can't relocate them. */ + return 1; + case 0x84: /* BRXH */ + case 0x85: /* BRXLE */ + mode = 1; + break; + case 0xa7: + op2 = buf[1] & 0xf; + /* BRC, BRAS, BRCT, BRCTG */ + if (op2 >= 4 && op2 <= 7) + mode = 1; + /* BRAS */ + if (op2 == 5) + is_bras = 1; + break; + case 0xc0: + op2 = buf[1] & 0xf; + /* LARL, BRCL, BRASL */ + if (op2 == 0 || op2 == 4 || op2 == 5) + mode = 2; + /* BRASL */ + if (op2 == 5) + is_bras = 1; + break; + case 0xc4: + case 0xc6: + /* PC-relative addressing instructions. */ + mode = 2; + break; + case 0xc5: /* BPRP */ + case 0xc7: /* BPP */ + /* Branch prediction - just skip it. */ + return 0; + case 0xcc: + op2 = buf[1] & 0xf; + /* BRCTH */ + if (op2 == 6) + mode = 2; + break; + case 0xec: + op2 = buf[5]; + switch (op2) + { + case 0x44: /* BRXHG */ + case 0x45: /* BRXLG */ + case 0x64: /* CGRJ */ + case 0x65: /* CLGRJ */ + case 0x76: /* CRJ */ + case 0x77: /* CLRJ */ + mode = 1; + break; + } + break; + } + + if (mode != 0) + { + /* We'll have to relocate an instruction with a PC-relative field. + First, compute the target. */ + int64_t loffset = 0; + CORE_ADDR target; + if (mode == 1) + { + int16_t soffset = 0; + memcpy (&soffset, buf + 2, 2); + loffset = soffset; + } + else if (mode == 2) + { + int32_t soffset = 0; + memcpy (&soffset, buf + 2, 4); + loffset = soffset; + } + target = oldloc + loffset * 2; + if (!is_64) + target &= 0x7fffffff; + + if (is_bras) + { + /* BRAS or BRASL was used. We cannot just relocate those, since + they save the return address in a register. We can, however, + replace them with a LARL+JG sequence. */ + + /* Make the LARL. */ + int32_t soffset; + buf[0] = 0xc0; + buf[1] &= 0xf0; + loffset = oldloc + ilen - *to; + loffset >>= 1; + soffset = loffset; + if (soffset != loffset && is_64) + return 1; + memcpy (buf + 2, &soffset, 4); + append_insns (to, 6, buf); + + /* Note: this is not fully correct. In 31-bit mode, LARL will write + an address with the top bit 0, while BRAS/BRASL will write it + with top bit 1. It should not matter much, since linux compilers + use BR and not BSM to return from functions, but it could confuse + some poor stack unwinder. */ + + /* We'll now be writing a JG. */ + mode = 2; + buf[0] = 0xc0; + buf[1] = 0xf4; + ilen = 6; + } + + /* Compute the new offset and write it to the buffer. */ + loffset = target - *to; + loffset >>= 1; + + if (mode == 1) + { + int16_t soffset = loffset; + if (soffset != loffset) + return 1; + memcpy (buf + 2, &soffset, 2); + } + else if (mode == 2) + { + int32_t soffset = loffset; + if (soffset != loffset && is_64) + return 1; + memcpy (buf + 2, &soffset, 4); + } + } + append_insns (to, ilen, buf); + return 0; +} + +bool +s390_target::supports_fast_tracepoints () +{ + return true; +} + +/* Implementation of target ops method + "install_fast_tracepoint_jump_pad". */ + +int +s390_target::install_fast_tracepoint_jump_pad + (CORE_ADDR tpoint, CORE_ADDR tpaddr, CORE_ADDR collector, + CORE_ADDR lockaddr, ULONGEST orig_size, CORE_ADDR *jump_entry, + CORE_ADDR *trampoline, ULONGEST *trampoline_size, + unsigned char *jjump_pad_insn, ULONGEST *jjump_pad_insn_size, + CORE_ADDR *adjusted_insn_addr, CORE_ADDR *adjusted_insn_addr_end, + char *err) +{ + int i; + int64_t loffset; + int32_t offset; + unsigned char jbuf[6] = { 0xc0, 0xf4, 0, 0, 0, 0 }; /* jg ... */ + CORE_ADDR buildaddr = *jump_entry; +#ifdef __s390x__ + struct regcache *regcache = get_thread_regcache (current_thread, 0); + int is_64 = register_size (regcache->tdesc, 0) == 8; + int is_zarch = is_64 || have_hwcap_s390_high_gprs; + int has_vx = have_hwcap_s390_vx; +#else + int is_64 = 0, is_zarch = 0, has_vx = 0; +#endif + CORE_ADDR literals[4] = { + tpaddr, + tpoint, + collector, + lockaddr, + }; + + /* First, store the GPRs. */ + if (is_zarch) + append_insns (&buildaddr, sizeof s390_ft_entry_gpr_zarch, + s390_ft_entry_gpr_zarch); + else + append_insns (&buildaddr, sizeof s390_ft_entry_gpr_esa, + s390_ft_entry_gpr_esa); + + /* Second, misc registers (ARs, PSWM, FPC). PSWA will be stored below. */ + append_insns (&buildaddr, sizeof s390_ft_entry_misc, s390_ft_entry_misc); + + /* Third, FRs or VRs. */ + if (has_vx) + append_insns (&buildaddr, sizeof s390_ft_entry_vr, s390_ft_entry_vr); + else + append_insns (&buildaddr, sizeof s390_ft_entry_fr, s390_ft_entry_fr); + + /* Now, the main part of code - store PSWA, take lock, call collector, + leave lock. First, we'll need to fetch 4 literals. */ + if (is_64) { + unsigned char buf[] = { + 0x07, 0x07, /* nopr %r7 */ + 0x07, 0x07, /* nopr %r7 */ + 0x07, 0x07, /* nopr %r7 */ + 0xa7, 0x15, 0x00, 0x12, /* bras %r1, .Lend */ + 0, 0, 0, 0, 0, 0, 0, 0, /* tpaddr */ + 0, 0, 0, 0, 0, 0, 0, 0, /* tpoint */ + 0, 0, 0, 0, 0, 0, 0, 0, /* collector */ + 0, 0, 0, 0, 0, 0, 0, 0, /* lockaddr */ + /* .Lend: */ + }; + /* Find the proper start place in buf, so that literals will be + aligned. */ + int bufpos = (buildaddr + 2) & 7; + /* Stuff the literals into the buffer. */ + for (i = 0; i < 4; i++) { + uint64_t lit = literals[i]; + memcpy (&buf[sizeof buf - 32 + i * 8], &lit, 8); + } + append_insns (&buildaddr, sizeof buf - bufpos, buf + bufpos); + append_insns (&buildaddr, sizeof s390_ft_main_64, s390_ft_main_64); + } else { + unsigned char buf[] = { + 0x07, 0x07, /* nopr %r7 */ + 0xa7, 0x15, 0x00, 0x0a, /* bras %r1, .Lend */ + 0, 0, 0, 0, /* tpaddr */ + 0, 0, 0, 0, /* tpoint */ + 0, 0, 0, 0, /* collector */ + 0, 0, 0, 0, /* lockaddr */ + /* .Lend: */ + }; + /* Find the proper start place in buf, so that literals will be + aligned. */ + int bufpos = (buildaddr + 2) & 3; + /* First literal will be saved as the PSWA, make sure it has the high bit + set. */ + literals[0] |= 0x80000000; + /* Stuff the literals into the buffer. */ + for (i = 0; i < 4; i++) { + uint32_t lit = literals[i]; + memcpy (&buf[sizeof buf - 16 + i * 4], &lit, 4); + } + append_insns (&buildaddr, sizeof buf - bufpos, buf + bufpos); + append_insns (&buildaddr, sizeof s390_ft_main_31, s390_ft_main_31); + } + + /* Restore FRs or VRs. */ + if (has_vx) + append_insns (&buildaddr, sizeof s390_ft_exit_vr, s390_ft_exit_vr); + else + append_insns (&buildaddr, sizeof s390_ft_exit_fr, s390_ft_exit_fr); + + /* Restore misc registers. */ + append_insns (&buildaddr, sizeof s390_ft_exit_misc, s390_ft_exit_misc); + + /* Restore the GPRs. */ + if (is_zarch) + append_insns (&buildaddr, sizeof s390_ft_exit_gpr_zarch, + s390_ft_exit_gpr_zarch); + else + append_insns (&buildaddr, sizeof s390_ft_exit_gpr_esa, + s390_ft_exit_gpr_esa); + + /* Now, adjust the original instruction to execute in the jump + pad. */ + *adjusted_insn_addr = buildaddr; + if (s390_relocate_instruction (&buildaddr, tpaddr, is_64)) + { + sprintf (err, "E.Could not relocate instruction for tracepoint."); + return 1; + } + *adjusted_insn_addr_end = buildaddr; + + /* Finally, write a jump back to the program. */ + + loffset = (tpaddr + orig_size) - buildaddr; + loffset >>= 1; + offset = loffset; + if (is_64 && offset != loffset) + { + sprintf (err, + "E.Jump back from jump pad too far from tracepoint " + "(offset 0x%" PRIx64 " > int33).", loffset); + return 1; + } + memcpy (jbuf + 2, &offset, 4); + append_insns (&buildaddr, sizeof jbuf, jbuf); + + /* The jump pad is now built. Wire in a jump to our jump pad. This + is always done last (by our caller actually), so that we can + install fast tracepoints with threads running. This relies on + the agent's atomic write support. */ + loffset = *jump_entry - tpaddr; + loffset >>= 1; + offset = loffset; + if (is_64 && offset != loffset) + { + sprintf (err, + "E.Jump back from jump pad too far from tracepoint " + "(offset 0x%" PRIx64 " > int33).", loffset); + return 1; + } + memcpy (jbuf + 2, &offset, 4); + memcpy (jjump_pad_insn, jbuf, sizeof jbuf); + *jjump_pad_insn_size = sizeof jbuf; + + /* Return the end address of our pad. */ + *jump_entry = buildaddr; + + return 0; +} + +/* Implementation of target ops method + "get_min_fast_tracepoint_insn_len". */ + +int +s390_target::get_min_fast_tracepoint_insn_len () +{ + /* We only support using 6-byte jumps to reach the tracepoint code. + If the tracepoint buffer were allocated sufficiently close (64kiB) + to the executable code, and the traced instruction itself was close + enough to the beginning, we could use 4-byte jumps, but this doesn't + seem to be worth the effort. */ + return 6; +} + +/* Implementation of target ops method "get_ipa_tdesc_idx". */ + +int +s390_target::get_ipa_tdesc_idx () +{ + struct regcache *regcache = get_thread_regcache (current_thread, 0); + const struct target_desc *tdesc = regcache->tdesc; + +#ifdef __s390x__ + if (tdesc == tdesc_s390x_linux64) + return S390_TDESC_64; + if (tdesc == tdesc_s390x_linux64v1) + return S390_TDESC_64V1; + if (tdesc == tdesc_s390x_linux64v2) + return S390_TDESC_64V2; + if (tdesc == tdesc_s390x_te_linux64) + return S390_TDESC_TE; + if (tdesc == tdesc_s390x_vx_linux64) + return S390_TDESC_VX; + if (tdesc == tdesc_s390x_tevx_linux64) + return S390_TDESC_TEVX; + if (tdesc == tdesc_s390x_gs_linux64) + return S390_TDESC_GS; +#endif + + if (tdesc == tdesc_s390_linux32) + return S390_TDESC_32; + if (tdesc == tdesc_s390_linux32v1) + return S390_TDESC_32V1; + if (tdesc == tdesc_s390_linux32v2) + return S390_TDESC_32V2; + if (tdesc == tdesc_s390_linux64) + return S390_TDESC_64; + if (tdesc == tdesc_s390_linux64v1) + return S390_TDESC_64V1; + if (tdesc == tdesc_s390_linux64v2) + return S390_TDESC_64V2; + if (tdesc == tdesc_s390_te_linux64) + return S390_TDESC_TE; + if (tdesc == tdesc_s390_vx_linux64) + return S390_TDESC_VX; + if (tdesc == tdesc_s390_tevx_linux64) + return S390_TDESC_TEVX; + if (tdesc == tdesc_s390_gs_linux64) + return S390_TDESC_GS; + + return 0; +} + +/* Appends given buffer to current_insn_ptr in the target. */ + +static void +add_insns (const unsigned char *start, int len) +{ + CORE_ADDR buildaddr = current_insn_ptr; + + if (debug_threads) + debug_printf ("Adding %d bytes of insn at %s\n", + len, paddress (buildaddr)); + + append_insns (&buildaddr, len, start); + current_insn_ptr = buildaddr; +} + +/* Register usage in emit: + + - %r0, %r1: temp + - %r2: top of stack (high word for 31-bit) + - %r3: low word of top of stack (for 31-bit) + - %r4, %r5: temp + - %r6, %r7, %r8: don't use + - %r9: saved arg1 + - %r10: saved arg2 + - %r11: frame pointer + - %r12: saved top of stack for void_call_2 (high word for 31-bit) + - %r13: low word of saved top of stack (for 31-bit) + - %r14: return address for calls + - %r15: stack pointer + + */ + +/* The "emit_prologue" emit_ops method for s390. */ + +static void +s390_emit_prologue (void) +{ + static const unsigned char buf[] = { + 0x90, 0x9f, 0xf0, 0x24, /* stm %r9, %r15, 0x24(%r15) */ + 0x18, 0x92, /* lr %r9, %r2 */ + 0x18, 0xa3, /* lr %r10, %r3 */ + 0x18, 0xbf, /* lr %r11, %r15 */ + }; + add_insns (buf, sizeof buf); +} + +/* The "emit_epilogue" emit_ops method for s390. */ + +static void +s390_emit_epilogue (void) +{ + static const unsigned char buf[] = { + 0x90, 0x23, 0xa0, 0x00, /* stm %r2, %r3, 0(%r10) */ + 0xa7, 0x28, 0x00, 0x00, /* lhi %r2, 0 */ + 0x98, 0x9f, 0xb0, 0x24, /* lm %r9, %r15, 0x24(%r11) */ + 0x07, 0xfe, /* br %r14 */ + }; + add_insns (buf, sizeof buf); +} + +/* The "emit_add" emit_ops method for s390. */ + +static void +s390_emit_add (void) +{ + static const unsigned char buf[] = { + 0x5e, 0x30, 0xf0, 0x04, /* al %r3, 4(%r15) */ + 0xe3, 0x20, 0xf0, 0x00, 0x00, 0x98, /* al %r2, 0(%r15) */ + 0x41, 0xf0, 0xf0, 0x08, /* la %r15, 8(%r15) */ + }; + add_insns (buf, sizeof buf); +} + +/* The "emit_sub" emit_ops method for s390. */ + +static void +s390_emit_sub (void) +{ + static const unsigned char buf[] = { + 0x98, 0x45, 0xf0, 0x00, /* lm %r4, %r5, 0(%r15) */ + 0x1f, 0x53, /* slr %r5, %r3 */ + 0xb9, 0x99, 0x00, 0x42, /* slbr %r4, %r2 */ + 0x41, 0xf0, 0xf0, 0x08, /* la %r15, 8(%r15) */ + 0x18, 0x35, /* lr %r3, %r5 */ + 0x18, 0x24, /* lr %r2, %r4 */ + }; + add_insns (buf, sizeof buf); +} + +/* The "emit_mul" emit_ops method for s390. */ + +static void +s390_emit_mul (void) +{ + emit_error = 1; +} + +/* The "emit_lsh" emit_ops method for s390. */ + +static void +s390_emit_lsh (void) +{ + static const unsigned char buf[] = { + 0x18, 0x43, /* lr %r4, %r3 */ + 0x98, 0x23, 0xf0, 0x00, /* lm %r2, %r3, 0(%r15) */ + 0x8d, 0x20, 0x40, 0x00, /* sldl %r2, 0(%r4) */ + 0x41, 0xf0, 0xf0, 0x08, /* la %r15, 8(%r15) */ + }; + add_insns (buf, sizeof buf); +} + +/* The "emit_rsh_signed" emit_ops method for s390. */ + +static void +s390_emit_rsh_signed (void) +{ + static const unsigned char buf[] = { + 0x18, 0x43, /* lr %r4, %r3 */ + 0x98, 0x23, 0xf0, 0x00, /* lm %r2, %r3, 0(%r15) */ + 0x8e, 0x20, 0x40, 0x00, /* srda %r2, 0(%r4) */ + 0x41, 0xf0, 0xf0, 0x08, /* la %r15, 8(%r15) */ + }; + add_insns (buf, sizeof buf); +} + +/* The "emit_rsh_unsigned" emit_ops method for s390. */ + +static void +s390_emit_rsh_unsigned (void) +{ + static const unsigned char buf[] = { + 0x18, 0x43, /* lr %r4, %r3 */ + 0x98, 0x23, 0xf0, 0x00, /* lm %r2, %r3, 0(%r15) */ + 0x8c, 0x20, 0x40, 0x00, /* srdl %r2, 0(%r4) */ + 0x41, 0xf0, 0xf0, 0x08, /* la %r15, 8(%r15) */ + }; + add_insns (buf, sizeof buf); +} + +/* The "emit_ext" emit_ops method for s390. */ + +static void +s390_emit_ext (int arg) +{ + unsigned char buf[] = { + 0x8d, 0x20, 0x00, (unsigned char) (64 - arg), /* sldl %r2, <64-arg> */ + 0x8e, 0x20, 0x00, (unsigned char) (64 - arg), /* srda %r2, <64-arg> */ + }; + add_insns (buf, sizeof buf); +} + +/* The "emit_log_not" emit_ops method for s390. */ + +static void +s390_emit_log_not (void) +{ + static const unsigned char buf[] = { + 0x16, 0x23, /* or %r2, %r3 */ + 0xa7, 0x28, 0x00, 0x00, /* lhi %r2, 0 */ + 0xa7, 0x38, 0x00, 0x00, /* lhi %r3, 0 */ + 0xa7, 0x74, 0x00, 0x04, /* jne .Lskip */ + 0xa7, 0x38, 0x00, 0x01, /* lhi %r3, 1 */ + /* .Lskip: */ + }; + add_insns (buf, sizeof buf); +} + +/* The "emit_bit_and" emit_ops method for s390. */ + +static void +s390_emit_bit_and (void) +{ + static const unsigned char buf[] = { + 0x54, 0x20, 0xf0, 0x00, /* n %r2, 0(%r15) */ + 0x54, 0x30, 0xf0, 0x04, /* n %r3, 4(%r15) */ + 0x41, 0xf0, 0xf0, 0x08, /* la %r15, 8(%r15) */ + }; + add_insns (buf, sizeof buf); +} + +/* The "emit_bit_or" emit_ops method for s390. */ + +static void +s390_emit_bit_or (void) +{ + static const unsigned char buf[] = { + 0x56, 0x20, 0xf0, 0x00, /* o %r2, 0(%r15) */ + 0x56, 0x30, 0xf0, 0x04, /* o %r3, 4(%r15) */ + 0x41, 0xf0, 0xf0, 0x08, /* la %r15, 8(%r15) */ + }; + add_insns (buf, sizeof buf); +} + +/* The "emit_bit_xor" emit_ops method for s390. */ + +static void +s390_emit_bit_xor (void) +{ + static const unsigned char buf[] = { + 0x57, 0x20, 0xf0, 0x00, /* x %r2, 0(%r15) */ + 0x57, 0x30, 0xf0, 0x04, /* x %r3, 4(%r15) */ + 0x41, 0xf0, 0xf0, 0x08, /* la %r15, 8(%r15) */ + }; + add_insns (buf, sizeof buf); +} + +/* The "emit_bit_not" emit_ops method for s390. */ + +static void +s390_emit_bit_not (void) +{ + static const unsigned char buf[] = { + 0xa7, 0x48, 0xff, 0xff, /* lhi %r4, -1 */ + 0x17, 0x24, /* xr %r2, %r4 */ + 0x17, 0x34, /* xr %r3, %r4 */ + }; + add_insns (buf, sizeof buf); +} + +/* The "emit_equal" emit_ops method for s390. */ + +static void +s390_emit_equal (void) +{ + s390_emit_bit_xor (); + s390_emit_log_not (); +} + +/* The "emit_less_signed" emit_ops method for s390. */ + +static void +s390_emit_less_signed (void) +{ + static const unsigned char buf[] = { + 0x59, 0x20, 0xf0, 0x00, /* c %r2, 0(%r15) */ + 0xa7, 0x24, 0x00, 0x0c, /* jh .Lless */ + 0xa7, 0x44, 0x00, 0x06, /* jl .Lhigh */ + 0x55, 0x30, 0xf0, 0x04, /* cl %r3, 4(%r15) */ + 0xa7, 0x24, 0x00, 0x06, /* jh .Lless */ + /* .Lhigh: */ + 0xa7, 0x38, 0x00, 0x00, /* lhi %r3, 0 */ + 0xa7, 0xf4, 0x00, 0x04, /* j .Lend */ + /* .Lless: */ + 0xa7, 0x38, 0x00, 0x01, /* lhi %r3, 1 */ + /* .Lend: */ + 0xa7, 0x28, 0x00, 0x00, /* lhi %r2, 0 */ + 0x41, 0xf0, 0xf0, 0x08, /* la %r15, 8(%r15) */ + }; + add_insns (buf, sizeof buf); +} + +/* The "emit_less_unsigned" emit_ops method for s390. */ + +static void +s390_emit_less_unsigned (void) +{ + static const unsigned char buf[] = { + 0x55, 0x20, 0xf0, 0x00, /* cl %r2, 0(%r15) */ + 0xa7, 0x24, 0x00, 0x0c, /* jh .Lless */ + 0xa7, 0x44, 0x00, 0x06, /* jl .Lhigh */ + 0x55, 0x30, 0xf0, 0x04, /* cl %r3, 4(%r15) */ + 0xa7, 0x24, 0x00, 0x06, /* jh .Lless */ + /* .Lhigh: */ + 0xa7, 0x38, 0x00, 0x00, /* lhi %r3, 0 */ + 0xa7, 0xf4, 0x00, 0x04, /* j .Lend */ + /* .Lless: */ + 0xa7, 0x38, 0x00, 0x01, /* lhi %r3, 1 */ + /* .Lend: */ + 0xa7, 0x28, 0x00, 0x00, /* lhi %r2, 0 */ + 0x41, 0xf0, 0xf0, 0x08, /* la %r15, 8(%r15) */ + }; + add_insns (buf, sizeof buf); +} + +/* The "emit_ref" emit_ops method for s390. */ + +static void +s390_emit_ref (int size) +{ + static const unsigned char buf1[] = { + 0xa7, 0x28, 0x00, 0x00, /* lhi %r2, 0 */ + 0x43, 0x30, 0x30, 0x00, /* ic %r3, 0(%r3) */ + }; + static const unsigned char buf2[] = { + 0xa7, 0x28, 0x00, 0x00, /* lhi %r2, 0 */ + 0x48, 0x30, 0x30, 0x00, /* lh %r3, 0(%r3) */ + }; + static const unsigned char buf4[] = { + 0xa7, 0x28, 0x00, 0x00, /* lhi %r2, 0 */ + 0x58, 0x30, 0x30, 0x00, /* l %r3, 0(%r3) */ + }; + static const unsigned char buf8[] = { + 0x98, 0x23, 0x30, 0x00, /* lm %r2, %r3, 0(%r3) */ + }; + switch (size) + { + case 1: + add_insns (buf1, sizeof buf1); + break; + case 2: + add_insns (buf2, sizeof buf2); + break; + case 4: + add_insns (buf4, sizeof buf4); + break; + case 8: + add_insns (buf8, sizeof buf8); + break; + default: + emit_error = 1; + } +} + +/* The "emit_if_goto" emit_ops method for s390. */ + +static void +s390_emit_if_goto (int *offset_p, int *size_p) +{ + static const unsigned char buf[] = { + 0x16, 0x23, /* or %r2, %r3 */ + 0x98, 0x23, 0xf0, 0x00, /* lm %r2, %r3, 0(%r15) */ + 0x41, 0xf0, 0xf0, 0x08, /* la %r15, 8(%r15) */ + 0xc0, 0x74, 0x00, 0x00, 0x00, 0x00 /* jgne <fillme> */ + }; + add_insns (buf, sizeof buf); + if (offset_p) + *offset_p = 12; + if (size_p) + *size_p = 4; +} + +/* The "emit_goto" emit_ops method for s390 and s390x. */ + +static void +s390_emit_goto (int *offset_p, int *size_p) +{ + static const unsigned char buf[] = { + 0xc0, 0xf4, 0x00, 0x00, 0x00, 0x00, /* jg <fillme> */ + }; + add_insns (buf, sizeof buf); + if (offset_p) + *offset_p = 2; + if (size_p) + *size_p = 4; +} + +/* The "write_goto_address" emit_ops method for s390 and s390x. */ + +static void +s390_write_goto_address (CORE_ADDR from, CORE_ADDR to, int size) +{ + long diff = ((long) (to - (from - 2))) / 2; + int sdiff = diff; + unsigned char buf[sizeof sdiff]; + + /* We're only doing 4-byte sizes at the moment. */ + if (size != sizeof sdiff || sdiff != diff) + { + emit_error = 1; + return; + } + + memcpy (buf, &sdiff, sizeof sdiff); + target_write_memory (from, buf, sizeof sdiff); +} + +/* Preparation for emitting a literal pool of given size. Loads the address + of the pool into %r1, and jumps over it. Called should emit the pool data + immediately afterwards. Used for both s390 and s390x. */ + +static void +s390_emit_litpool (int size) +{ + static const unsigned char nop[] = { + 0x07, 0x07, + }; + unsigned char buf[] = { + 0xa7, 0x15, 0x00, + (unsigned char) ((size + 4) / 2), /* bras %r1, .Lend+size */ + /* .Lend: */ + }; + if (size == 4) + { + /* buf needs to start at even halfword for litpool to be aligned */ + if (current_insn_ptr & 2) + add_insns (nop, sizeof nop); + } + else + { + while ((current_insn_ptr & 6) != 4) + add_insns (nop, sizeof nop); + } + add_insns (buf, sizeof buf); +} + +/* The "emit_const" emit_ops method for s390. */ + +static void +s390_emit_const (LONGEST num) +{ + unsigned long long n = num; + unsigned char buf_s[] = { + /* lhi %r3, <num> */ + 0xa7, 0x38, + (unsigned char) (num >> 8), (unsigned char) num, + /* xr %r2, %r2 */ + 0x17, 0x22, + }; + static const unsigned char buf_l[] = { + 0x98, 0x23, 0x10, 0x00, /* lm %r2, %r3, 0(%r1) */ + }; + if (num < 0x8000 && num >= 0) + { + add_insns (buf_s, sizeof buf_s); + } + else + { + s390_emit_litpool (8); + add_insns ((unsigned char *) &n, sizeof n); + add_insns (buf_l, sizeof buf_l); + } +} + +/* The "emit_call" emit_ops method for s390. */ + +static void +s390_emit_call (CORE_ADDR fn) +{ + unsigned int n = fn; + static const unsigned char buf[] = { + 0x58, 0x10, 0x10, 0x00, /* l %r1, 0(%r1) */ + 0xa7, 0xfa, 0xff, 0xa0, /* ahi %r15, -0x60 */ + 0x0d, 0xe1, /* basr %r14, %r1 */ + 0xa7, 0xfa, 0x00, 0x60, /* ahi %r15, 0x60 */ + }; + s390_emit_litpool (4); + add_insns ((unsigned char *) &n, sizeof n); + add_insns (buf, sizeof buf); +} + +/* The "emit_reg" emit_ops method for s390. */ + +static void +s390_emit_reg (int reg) +{ + unsigned char bufpre[] = { + /* lr %r2, %r9 */ + 0x18, 0x29, + /* lhi %r3, <reg> */ + 0xa7, 0x38, (unsigned char) (reg >> 8), (unsigned char) reg, + }; + add_insns (bufpre, sizeof bufpre); + s390_emit_call (get_raw_reg_func_addr ()); +} + +/* The "emit_pop" emit_ops method for s390. */ + +static void +s390_emit_pop (void) +{ + static const unsigned char buf[] = { + 0x98, 0x23, 0xf0, 0x00, /* lm %r2, %r3, 0(%r15) */ + 0x41, 0xf0, 0xf0, 0x08, /* la %r15, 8(%r15) */ + }; + add_insns (buf, sizeof buf); +} + +/* The "emit_stack_flush" emit_ops method for s390. */ + +static void +s390_emit_stack_flush (void) +{ + static const unsigned char buf[] = { + 0xa7, 0xfa, 0xff, 0xf8, /* ahi %r15, -8 */ + 0x90, 0x23, 0xf0, 0x00, /* stm %r2, %r3, 0(%r15) */ + }; + add_insns (buf, sizeof buf); +} + +/* The "emit_zero_ext" emit_ops method for s390. */ + +static void +s390_emit_zero_ext (int arg) +{ + unsigned char buf[] = { + 0x8d, 0x20, 0x00, (unsigned char) (64 - arg), /* sldl %r2, <64-arg> */ + 0x8c, 0x20, 0x00, (unsigned char) (64 - arg), /* srdl %r2, <64-arg> */ + }; + add_insns (buf, sizeof buf); +} + +/* The "emit_swap" emit_ops method for s390. */ + +static void +s390_emit_swap (void) +{ + static const unsigned char buf[] = { + 0x98, 0x45, 0xf0, 0x00, /* lm %r4, %r5, 0(%r15) */ + 0x90, 0x23, 0xf0, 0x00, /* stm %r2, %r3, 0(%r15) */ + 0x18, 0x24, /* lr %r2, %r4 */ + 0x18, 0x35, /* lr %r3, %r5 */ + }; + add_insns (buf, sizeof buf); +} + +/* The "emit_stack_adjust" emit_ops method for s390. */ + +static void +s390_emit_stack_adjust (int n) +{ + unsigned char buf[] = { + /* ahi %r15, 8*n */ + 0xa7, 0xfa, + (unsigned char ) (n * 8 >> 8), (unsigned char) (n * 8), + }; + add_insns (buf, sizeof buf); +} + +/* Sets %r2 to a 32-bit constant. */ + +static void +s390_emit_set_r2 (int arg1) +{ + unsigned char buf_s[] = { + /* lhi %r2, <arg1> */ + 0xa7, 0x28, (unsigned char) (arg1 >> 8), (unsigned char) arg1, + }; + static const unsigned char buf_l[] = { + 0x58, 0x20, 0x10, 0x00, /* l %r2, 0(%r1) */ + }; + if (arg1 < 0x8000 && arg1 >= -0x8000) + { + add_insns (buf_s, sizeof buf_s); + } + else + { + s390_emit_litpool (4); + add_insns ((unsigned char *) &arg1, sizeof arg1); + add_insns (buf_l, sizeof buf_l); + } +} + +/* The "emit_int_call_1" emit_ops method for s390. */ + +static void +s390_emit_int_call_1 (CORE_ADDR fn, int arg1) +{ + /* FN's prototype is `LONGEST(*fn)(int)'. */ + s390_emit_set_r2 (arg1); + s390_emit_call (fn); +} + +/* The "emit_void_call_2" emit_ops method for s390. */ + +static void +s390_emit_void_call_2 (CORE_ADDR fn, int arg1) +{ + /* FN's prototype is `void(*fn)(int,LONGEST)'. */ + static const unsigned char buf[] = { + 0x18, 0xc2, /* lr %r12, %r2 */ + 0x18, 0xd3, /* lr %r13, %r3 */ + 0x18, 0x43, /* lr %r4, %r3 */ + 0x18, 0x32, /* lr %r3, %r2 */ + }; + static const unsigned char buf2[] = { + 0x18, 0x2c, /* lr %r2, %r12 */ + 0x18, 0x3d, /* lr %r3, %r13 */ + }; + add_insns (buf, sizeof buf); + s390_emit_set_r2 (arg1); + s390_emit_call (fn); + add_insns (buf2, sizeof buf2); +} + +/* The "emit_eq_goto" emit_ops method for s390. */ + +static void +s390_emit_eq_goto (int *offset_p, int *size_p) +{ + static const unsigned char buf[] = { + 0x57, 0x20, 0xf0, 0x00, /* x %r2, 0(%r15) */ + 0x57, 0x30, 0xf0, 0x04, /* x %r3, 4(%r15) */ + 0x16, 0x23, /* or %r2, %r3 */ + 0x98, 0x23, 0xf0, 0x08, /* lm %r2, %r3, 8(%r15) */ + 0x41, 0xf0, 0xf0, 0x10, /* la %r15, 16(%r15) */ + 0xc0, 0x84, 0x00, 0x00, 0x00, 0x00, /* jge <fillme> */ + }; + add_insns (buf, sizeof buf); + if (offset_p) + *offset_p = 20; + if (size_p) + *size_p = 4; +} + +/* The "emit_ne_goto" emit_ops method for s390. */ + +static void +s390_emit_ne_goto (int *offset_p, int *size_p) +{ + static const unsigned char buf[] = { + 0x57, 0x20, 0xf0, 0x00, /* x %r2, 0(%r15) */ + 0x57, 0x30, 0xf0, 0x04, /* x %r3, 4(%r15) */ + 0x16, 0x23, /* or %r2, %r3 */ + 0x98, 0x23, 0xf0, 0x08, /* lm %r2, %r3, 8(%r15) */ + 0x41, 0xf0, 0xf0, 0x10, /* la %r15, 16(%r15) */ + 0xc0, 0x74, 0x00, 0x00, 0x00, 0x00, /* jgne <fillme> */ + }; + add_insns (buf, sizeof buf); + if (offset_p) + *offset_p = 20; + if (size_p) + *size_p = 4; +} + +/* The "emit_lt_goto" emit_ops method for s390. */ + +static void +s390_emit_lt_goto (int *offset_p, int *size_p) +{ + static const unsigned char buf[] = { + 0x59, 0x20, 0xf0, 0x00, /* c %r2, 0(%r15) */ + 0xa7, 0x24, 0x00, 0x0e, /* jh .Ltrue */ + 0xa7, 0x44, 0x00, 0x06, /* jl .Lfalse */ + 0x55, 0x30, 0xf0, 0x04, /* cl %r3, 4(%r15) */ + 0xa7, 0x24, 0x00, 0x08, /* jh .Ltrue */ + /* .Lfalse: */ + 0x98, 0x23, 0xf0, 0x08, /* lm %r2, %r3, 8(%r15) */ + 0x41, 0xf0, 0xf0, 0x10, /* la %r15, 16(%r15) */ + 0xa7, 0xf4, 0x00, 0x09, /* j .Lend */ + /* .Ltrue: */ + 0x98, 0x23, 0xf0, 0x08, /* lm %r2, %r3, 8(%r15) */ + 0x41, 0xf0, 0xf0, 0x10, /* la %r15, 16(%r15) */ + 0xc0, 0xf4, 0x00, 0x00, 0x00, 0x00, /* jg <fillme> */ + /* .Lend: */ + }; + add_insns (buf, sizeof buf); + if (offset_p) + *offset_p = 42; + if (size_p) + *size_p = 4; +} + +/* The "emit_le_goto" emit_ops method for s390. */ + +static void +s390_emit_le_goto (int *offset_p, int *size_p) +{ + static const unsigned char buf[] = { + 0x59, 0x20, 0xf0, 0x00, /* c %r2, 0(%r15) */ + 0xa7, 0x24, 0x00, 0x0e, /* jh .Ltrue */ + 0xa7, 0x44, 0x00, 0x06, /* jl .Lfalse */ + 0x55, 0x30, 0xf0, 0x04, /* cl %r3, 4(%r15) */ + 0xa7, 0xa4, 0x00, 0x08, /* jhe .Ltrue */ + /* .Lfalse: */ + 0x98, 0x23, 0xf0, 0x08, /* lm %r2, %r3, 8(%r15) */ + 0x41, 0xf0, 0xf0, 0x10, /* la %r15, 16(%r15) */ + 0xa7, 0xf4, 0x00, 0x09, /* j .Lend */ + /* .Ltrue: */ + 0x98, 0x23, 0xf0, 0x08, /* lm %r2, %r3, 8(%r15) */ + 0x41, 0xf0, 0xf0, 0x10, /* la %r15, 16(%r15) */ + 0xc0, 0xf4, 0x00, 0x00, 0x00, 0x00, /* jg <fillme> */ + /* .Lend: */ + }; + add_insns (buf, sizeof buf); + if (offset_p) + *offset_p = 42; + if (size_p) + *size_p = 4; +} + +/* The "emit_gt_goto" emit_ops method for s390. */ + +static void +s390_emit_gt_goto (int *offset_p, int *size_p) +{ + static const unsigned char buf[] = { + 0x59, 0x20, 0xf0, 0x00, /* c %r2, 0(%r15) */ + 0xa7, 0x44, 0x00, 0x0e, /* jl .Ltrue */ + 0xa7, 0x24, 0x00, 0x06, /* jh .Lfalse */ + 0x55, 0x30, 0xf0, 0x04, /* cl %r3, 4(%r15) */ + 0xa7, 0x44, 0x00, 0x08, /* jl .Ltrue */ + /* .Lfalse: */ + 0x98, 0x23, 0xf0, 0x08, /* lm %r2, %r3, 8(%r15) */ + 0x41, 0xf0, 0xf0, 0x10, /* la %r15, 16(%r15) */ + 0xa7, 0xf4, 0x00, 0x09, /* j .Lend */ + /* .Ltrue: */ + 0x98, 0x23, 0xf0, 0x08, /* lm %r2, %r3, 8(%r15) */ + 0x41, 0xf0, 0xf0, 0x10, /* la %r15, 16(%r15) */ + 0xc0, 0xf4, 0x00, 0x00, 0x00, 0x00, /* jg <fillme> */ + /* .Lend: */ + }; + add_insns (buf, sizeof buf); + if (offset_p) + *offset_p = 42; + if (size_p) + *size_p = 4; +} + +/* The "emit_ge_goto" emit_ops method for s390. */ + +static void +s390_emit_ge_goto (int *offset_p, int *size_p) +{ + static const unsigned char buf[] = { + 0x59, 0x20, 0xf0, 0x00, /* c %r2, 0(%r15) */ + 0xa7, 0x44, 0x00, 0x0e, /* jl .Ltrue */ + 0xa7, 0x24, 0x00, 0x06, /* jh .Lfalse */ + 0x55, 0x30, 0xf0, 0x04, /* cl %r3, 4(%r15) */ + 0xa7, 0xc4, 0x00, 0x08, /* jle .Ltrue */ + /* .Lfalse: */ + 0x98, 0x23, 0xf0, 0x08, /* lm %r2, %r3, 8(%r15) */ + 0x41, 0xf0, 0xf0, 0x10, /* la %r15, 16(%r15) */ + 0xa7, 0xf4, 0x00, 0x09, /* j .Lend */ + /* .Ltrue: */ + 0x98, 0x23, 0xf0, 0x08, /* lm %r2, %r3, 8(%r15) */ + 0x41, 0xf0, 0xf0, 0x10, /* la %r15, 16(%r15) */ + 0xc0, 0xf4, 0x00, 0x00, 0x00, 0x00, /* jg <fillme> */ + /* .Lend: */ + }; + add_insns (buf, sizeof buf); + if (offset_p) + *offset_p = 42; + if (size_p) + *size_p = 4; +} + +/* The "emit_ops" structure for s390. Named _impl to avoid name + collision with s390_emit_ops function. */ + +static struct emit_ops s390_emit_ops_impl = + { + s390_emit_prologue, + s390_emit_epilogue, + s390_emit_add, + s390_emit_sub, + s390_emit_mul, + s390_emit_lsh, + s390_emit_rsh_signed, + s390_emit_rsh_unsigned, + s390_emit_ext, + s390_emit_log_not, + s390_emit_bit_and, + s390_emit_bit_or, + s390_emit_bit_xor, + s390_emit_bit_not, + s390_emit_equal, + s390_emit_less_signed, + s390_emit_less_unsigned, + s390_emit_ref, + s390_emit_if_goto, + s390_emit_goto, + s390_write_goto_address, + s390_emit_const, + s390_emit_call, + s390_emit_reg, + s390_emit_pop, + s390_emit_stack_flush, + s390_emit_zero_ext, + s390_emit_swap, + s390_emit_stack_adjust, + s390_emit_int_call_1, + s390_emit_void_call_2, + s390_emit_eq_goto, + s390_emit_ne_goto, + s390_emit_lt_goto, + s390_emit_le_goto, + s390_emit_gt_goto, + s390_emit_ge_goto + }; + +#ifdef __s390x__ + +/* The "emit_prologue" emit_ops method for s390x. */ + +static void +s390x_emit_prologue (void) +{ + static const unsigned char buf[] = { + 0xeb, 0x9f, 0xf0, 0x48, 0x00, 0x24, /* stmg %r9, %r15, 0x48(%r15) */ + 0xb9, 0x04, 0x00, 0x92, /* lgr %r9, %r2 */ + 0xb9, 0x04, 0x00, 0xa3, /* lgr %r10, %r3 */ + 0xb9, 0x04, 0x00, 0xbf, /* lgr %r11, %r15 */ + }; + add_insns (buf, sizeof buf); +} + +/* The "emit_epilogue" emit_ops method for s390x. */ + +static void +s390x_emit_epilogue (void) +{ + static const unsigned char buf[] = { + 0xe3, 0x20, 0xa0, 0x00, 0x00, 0x24, /* stg %r2, 0(%r10) */ + 0xa7, 0x29, 0x00, 0x00, /* lghi %r2, 0 */ + 0xeb, 0x9f, 0xf0, 0x48, 0x00, 0x04, /* lmg %r9, %r15, 0x48(%r15) */ + 0x07, 0xfe, /* br %r14 */ + }; + add_insns (buf, sizeof buf); +} + +/* The "emit_add" emit_ops method for s390x. */ + +static void +s390x_emit_add (void) +{ + static const unsigned char buf[] = { + 0xe3, 0x20, 0xf0, 0x00, 0x00, 0x0a, /* alg %r2, 0(%r15) */ + 0x41, 0xf0, 0xf0, 0x08, /* la %r15, 8(%r15) */ + }; + add_insns (buf, sizeof buf); +} + +/* The "emit_sub" emit_ops method for s390x. */ + +static void +s390x_emit_sub (void) +{ + static const unsigned char buf[] = { + 0xe3, 0x30, 0xf0, 0x00, 0x00, 0x04, /* lg %r3, 0(%r15) */ + 0xb9, 0x0b, 0x00, 0x32, /* slgr %r3, %r2 */ + 0xb9, 0x04, 0x00, 0x23, /* lgr %r2, %r3 */ + 0x41, 0xf0, 0xf0, 0x08, /* la %r15, 8(%r15) */ + }; + add_insns (buf, sizeof buf); +} + +/* The "emit_mul" emit_ops method for s390x. */ + +static void +s390x_emit_mul (void) +{ + emit_error = 1; +} + +/* The "emit_lsh" emit_ops method for s390x. */ + +static void +s390x_emit_lsh (void) +{ + static const unsigned char buf[] = { + 0xe3, 0x30, 0xf0, 0x00, 0x00, 0x04, /* lg %r3, 0(%r15) */ + 0xeb, 0x23, 0x20, 0x00, 0x00, 0x0d, /* sllg %r2, %r3, 0(%r2) */ + 0x41, 0xf0, 0xf0, 0x08, /* la %r15, 8(%r15) */ + }; + add_insns (buf, sizeof buf); +} + +/* The "emit_rsh_signed" emit_ops method for s390x. */ + +static void +s390x_emit_rsh_signed (void) +{ + static const unsigned char buf[] = { + 0xe3, 0x30, 0xf0, 0x00, 0x00, 0x04, /* lg %r3, 0(%r15) */ + 0xeb, 0x23, 0x20, 0x00, 0x00, 0x0a, /* srag %r2, %r3, 0(%r2) */ + 0x41, 0xf0, 0xf0, 0x08, /* la %r15, 8(%r15) */ + }; + add_insns (buf, sizeof buf); +} + +/* The "emit_rsh_unsigned" emit_ops method for s390x. */ + +static void +s390x_emit_rsh_unsigned (void) +{ + static const unsigned char buf[] = { + 0xe3, 0x30, 0xf0, 0x00, 0x00, 0x04, /* lg %r3, 0(%r15) */ + 0xeb, 0x23, 0x20, 0x00, 0x00, 0x0c, /* srlg %r2, %r3, 0(%r2) */ + 0x41, 0xf0, 0xf0, 0x08, /* la %r15, 8(%r15) */ + }; + add_insns (buf, sizeof buf); +} + +/* The "emit_ext" emit_ops method for s390x. */ + +static void +s390x_emit_ext (int arg) +{ + unsigned char buf[] = { + /* sllg %r2, %r2, <64-arg> */ + 0xeb, 0x22, 0x00, (unsigned char) (64 - arg), 0x00, 0x0d, + /* srag %r2, %r2, <64-arg> */ + 0xeb, 0x22, 0x00, (unsigned char) (64 - arg), 0x00, 0x0a, + }; + add_insns (buf, sizeof buf); +} + +/* The "emit_log_not" emit_ops method for s390x. */ + +static void +s390x_emit_log_not (void) +{ + static const unsigned char buf[] = { + 0xb9, 0x00, 0x00, 0x22, /* lpgr %r2, %r2 */ + 0xa7, 0x2b, 0xff, 0xff, /* aghi %r2, -1 */ + 0xeb, 0x22, 0x00, 0x3f, 0x00, 0x0c, /* srlg %r2, %r2, 63 */ + }; + add_insns (buf, sizeof buf); +} + +/* The "emit_bit_and" emit_ops method for s390x. */ + +static void +s390x_emit_bit_and (void) +{ + static const unsigned char buf[] = { + 0xe3, 0x20, 0xf0, 0x00, 0x00, 0x80, /* ng %r2, 0(%r15) */ + 0x41, 0xf0, 0xf0, 0x08, /* la %r15, 8(%r15) */ + }; + add_insns (buf, sizeof buf); +} + +/* The "emit_bit_or" emit_ops method for s390x. */ + +static void +s390x_emit_bit_or (void) +{ + static const unsigned char buf[] = { + 0xe3, 0x20, 0xf0, 0x00, 0x00, 0x81, /* og %r2, 0(%r15) */ + 0x41, 0xf0, 0xf0, 0x08, /* la %r15, 8(%r15) */ + }; + add_insns (buf, sizeof buf); +} + +/* The "emit_bit_xor" emit_ops method for s390x. */ + +static void +s390x_emit_bit_xor (void) +{ + static const unsigned char buf[] = { + 0xe3, 0x20, 0xf0, 0x00, 0x00, 0x82, /* xg %r2, 0(%r15) */ + 0x41, 0xf0, 0xf0, 0x08, /* la %r15, 8(%r15) */ + }; + add_insns (buf, sizeof buf); +} + +/* The "emit_bit_not" emit_ops method for s390x. */ + +static void +s390x_emit_bit_not (void) +{ + static const unsigned char buf[] = { + 0xa7, 0x39, 0xff, 0xff, /* lghi %r3, -1 */ + 0xb9, 0x82, 0x00, 0x23, /* xgr %r2, %r3 */ + }; + add_insns (buf, sizeof buf); +} + +/* The "emit_equal" emit_ops method for s390x. */ + +static void +s390x_emit_equal (void) +{ + s390x_emit_bit_xor (); + s390x_emit_log_not (); +} + +/* The "emit_less_signed" emit_ops method for s390x. */ + +static void +s390x_emit_less_signed (void) +{ + static const unsigned char buf[] = { + 0xe3, 0x20, 0xf0, 0x00, 0x00, 0x20, /* cg %r2, 0(%r15) */ + 0xa7, 0x29, 0x00, 0x01, /* lghi %r2, 1 */ + 0xa7, 0x24, 0x00, 0x04, /* jh .Lend */ + 0xa7, 0x29, 0x00, 0x00, /* lghi %r2, 0 */ + /* .Lend: */ + 0x41, 0xf0, 0xf0, 0x08, /* la %r15, 8(%r15) */ + }; + add_insns (buf, sizeof buf); +} + +/* The "emit_less_unsigned" emit_ops method for s390x. */ + +static void +s390x_emit_less_unsigned (void) +{ + static const unsigned char buf[] = { + 0xe3, 0x20, 0xf0, 0x00, 0x00, 0x21, /* clg %r2, 0(%r15) */ + 0xa7, 0x29, 0x00, 0x01, /* lghi %r2, 1 */ + 0xa7, 0x24, 0x00, 0x04, /* jh .Lend */ + 0xa7, 0x29, 0x00, 0x00, /* lghi %r2, 0 */ + /* .Lend: */ + 0x41, 0xf0, 0xf0, 0x08, /* la %r15, 8(%r15) */ + }; + add_insns (buf, sizeof buf); +} + +/* The "emit_ref" emit_ops method for s390x. */ + +static void +s390x_emit_ref (int size) +{ + static const unsigned char buf1[] = { + 0xe3, 0x20, 0x20, 0x00, 0x00, 0x90, /* llgc %r2, 0(%r2) */ + }; + static const unsigned char buf2[] = { + 0xe3, 0x20, 0x20, 0x00, 0x00, 0x91 /* llgh %r2, 0(%r2) */ + }; + static const unsigned char buf4[] = { + 0xe3, 0x20, 0x20, 0x00, 0x00, 0x16, /* llgf %r2, 0(%r2) */ + }; + static const unsigned char buf8[] = { + 0xe3, 0x20, 0x20, 0x00, 0x00, 0x04, /* lg %r2, 0(%r2) */ + }; + switch (size) + { + case 1: + add_insns (buf1, sizeof buf1); + break; + case 2: + add_insns (buf2, sizeof buf2); + break; + case 4: + add_insns (buf4, sizeof buf4); + break; + case 8: + add_insns (buf8, sizeof buf8); + break; + default: + emit_error = 1; + } +} + +/* The "emit_if_goto" emit_ops method for s390x. */ + +static void +s390x_emit_if_goto (int *offset_p, int *size_p) +{ + static const unsigned char buf[] = { + 0xb9, 0x02, 0x00, 0x22, /* ltgr %r2, %r2 */ + 0xe3, 0x20, 0xf0, 0x00, 0x00, 0x04, /* lg %r2, 0(%r15) */ + 0x41, 0xf0, 0xf0, 0x08, /* la %r15, 8(%r15) */ + 0xc0, 0x74, 0x00, 0x00, 0x00, 0x00, /* jgne <fillme> */ + }; + add_insns (buf, sizeof buf); + if (offset_p) + *offset_p = 16; + if (size_p) + *size_p = 4; +} + +/* The "emit_const" emit_ops method for s390x. */ + +static void +s390x_emit_const (LONGEST num) +{ + unsigned long long n = num; + unsigned char buf_s[] = { + /* lghi %r2, <num> */ + 0xa7, 0x29, (unsigned char) (num >> 8), (unsigned char) num, + }; + static const unsigned char buf_l[] = { + 0xe3, 0x20, 0x10, 0x00, 0x00, 0x04, /* lg %r2, 0(%r1) */ + }; + if (num < 0x8000 && num >= -0x8000) + { + add_insns (buf_s, sizeof buf_s); + } + else + { + s390_emit_litpool (8); + add_insns ((unsigned char *) &n, sizeof n); + add_insns (buf_l, sizeof buf_l); + } +} + +/* The "emit_call" emit_ops method for s390x. */ + +static void +s390x_emit_call (CORE_ADDR fn) +{ + unsigned long n = fn; + static const unsigned char buf[] = { + 0xe3, 0x10, 0x10, 0x00, 0x00, 0x04, /* lg %r1, 0(%r1) */ + 0xa7, 0xfb, 0xff, 0x60, /* aghi %r15, -0xa0 */ + 0x0d, 0xe1, /* basr %r14, %r1 */ + 0xa7, 0xfb, 0x00, 0xa0, /* aghi %r15, 0xa0 */ + }; + s390_emit_litpool (8); + add_insns ((unsigned char *) &n, sizeof n); + add_insns (buf, sizeof buf); +} + +/* The "emit_reg" emit_ops method for s390x. */ + +static void +s390x_emit_reg (int reg) +{ + unsigned char buf[] = { + /* lgr %r2, %r9 */ + 0xb9, 0x04, 0x00, 0x29, + /* lghi %r3, <reg> */ + 0xa7, 0x39, (unsigned char) (reg >> 8), (unsigned char) reg, + }; + add_insns (buf, sizeof buf); + s390x_emit_call (get_raw_reg_func_addr ()); +} + +/* The "emit_pop" emit_ops method for s390x. */ + +static void +s390x_emit_pop (void) +{ + static const unsigned char buf[] = { + 0xe3, 0x20, 0xf0, 0x00, 0x00, 0x04, /* lg %r2, 0(%r15) */ + 0x41, 0xf0, 0xf0, 0x08, /* la %r15, 8(%r15) */ + }; + add_insns (buf, sizeof buf); +} + +/* The "emit_stack_flush" emit_ops method for s390x. */ + +static void +s390x_emit_stack_flush (void) +{ + static const unsigned char buf[] = { + 0xa7, 0xfb, 0xff, 0xf8, /* aghi %r15, -8 */ + 0xe3, 0x20, 0xf0, 0x00, 0x00, 0x24, /* stg %r2, 0(%r15) */ + }; + add_insns (buf, sizeof buf); +} + +/* The "emit_zero_ext" emit_ops method for s390x. */ + +static void +s390x_emit_zero_ext (int arg) +{ + unsigned char buf[] = { + /* sllg %r2, %r2, <64-arg> */ + 0xeb, 0x22, 0x00, (unsigned char) (64 - arg), 0x00, 0x0d, + /* srlg %r2, %r2, <64-arg> */ + 0xeb, 0x22, 0x00, (unsigned char) (64 - arg), 0x00, 0x0c, + }; + add_insns (buf, sizeof buf); +} + +/* The "emit_swap" emit_ops method for s390x. */ + +static void +s390x_emit_swap (void) +{ + static const unsigned char buf[] = { + 0xe3, 0x30, 0xf0, 0x00, 0x00, 0x04, /* lg %r3, 0(%r15) */ + 0xe3, 0x20, 0xf0, 0x00, 0x00, 0x24, /* stg %r2, 0(%r15) */ + 0xb9, 0x04, 0x00, 0x23, /* lgr %r2, %r3 */ + }; + add_insns (buf, sizeof buf); +} + +/* The "emit_stack_adjust" emit_ops method for s390x. */ + +static void +s390x_emit_stack_adjust (int n) +{ + unsigned char buf[] = { + /* aghi %r15, 8*n */ + 0xa7, 0xfb, + (unsigned char) (n * 8 >> 8), (unsigned char) (n * 8), + }; + add_insns (buf, sizeof buf); +} + +/* The "emit_int_call_1" emit_ops method for s390x. */ + +static void +s390x_emit_int_call_1 (CORE_ADDR fn, int arg1) +{ + /* FN's prototype is `LONGEST(*fn)(int)'. */ + s390x_emit_const (arg1); + s390x_emit_call (fn); +} + +/* The "emit_void_call_2" emit_ops method for s390x. */ + +static void +s390x_emit_void_call_2 (CORE_ADDR fn, int arg1) +{ + /* FN's prototype is `void(*fn)(int,LONGEST)'. */ + static const unsigned char buf[] = { + 0xb9, 0x04, 0x00, 0x32, /* lgr %r3, %r2 */ + 0xb9, 0x04, 0x00, 0xc2, /* lgr %r12, %r2 */ + }; + static const unsigned char buf2[] = { + 0xb9, 0x04, 0x00, 0x2c, /* lgr %r2, %r12 */ + }; + add_insns (buf, sizeof buf); + s390x_emit_const (arg1); + s390x_emit_call (fn); + add_insns (buf2, sizeof buf2); +} + +/* The "emit_eq_goto" emit_ops method for s390x. */ + +static void +s390x_emit_eq_goto (int *offset_p, int *size_p) +{ + static const unsigned char buf[] = { + 0xe3, 0x20, 0xf0, 0x00, 0x00, 0x20, /* cg %r2, 0(%r15) */ + 0xe3, 0x20, 0xf0, 0x08, 0x00, 0x04, /* lg %r2, 8(%r15) */ + 0x41, 0xf0, 0xf0, 0x10, /* la %r15, 16(%r15) */ + 0xc0, 0x84, 0x00, 0x00, 0x00, 0x00, /* jge <fillme> */ + }; + add_insns (buf, sizeof buf); + if (offset_p) + *offset_p = 18; + if (size_p) + *size_p = 4; +} + +/* The "emit_ne_goto" emit_ops method for s390x. */ + +static void +s390x_emit_ne_goto (int *offset_p, int *size_p) +{ + static const unsigned char buf[] = { + 0xe3, 0x20, 0xf0, 0x00, 0x00, 0x20, /* cg %r2, 0(%r15) */ + 0xe3, 0x20, 0xf0, 0x08, 0x00, 0x04, /* lg %r2, 8(%r15) */ + 0x41, 0xf0, 0xf0, 0x10, /* la %r15, 16(%r15) */ + 0xc0, 0x74, 0x00, 0x00, 0x00, 0x00, /* jgne <fillme> */ + }; + add_insns (buf, sizeof buf); + if (offset_p) + *offset_p = 18; + if (size_p) + *size_p = 4; +} + +/* The "emit_lt_goto" emit_ops method for s390x. */ + +static void +s390x_emit_lt_goto (int *offset_p, int *size_p) +{ + static const unsigned char buf[] = { + 0xe3, 0x20, 0xf0, 0x00, 0x00, 0x20, /* cg %r2, 0(%r15) */ + 0xe3, 0x20, 0xf0, 0x08, 0x00, 0x04, /* lg %r2, 8(%r15) */ + 0x41, 0xf0, 0xf0, 0x10, /* la %r15, 16(%r15) */ + 0xc0, 0x24, 0x00, 0x00, 0x00, 0x00, /* jgh <fillme> */ + }; + add_insns (buf, sizeof buf); + if (offset_p) + *offset_p = 18; + if (size_p) + *size_p = 4; +} + +/* The "emit_le_goto" emit_ops method for s390x. */ + +static void +s390x_emit_le_goto (int *offset_p, int *size_p) +{ + static const unsigned char buf[] = { + 0xe3, 0x20, 0xf0, 0x00, 0x00, 0x20, /* cg %r2, 0(%r15) */ + 0xe3, 0x20, 0xf0, 0x08, 0x00, 0x04, /* lg %r2, 8(%r15) */ + 0x41, 0xf0, 0xf0, 0x10, /* la %r15, 16(%r15) */ + 0xc0, 0xa4, 0x00, 0x00, 0x00, 0x00, /* jghe <fillme> */ + }; + add_insns (buf, sizeof buf); + if (offset_p) + *offset_p = 18; + if (size_p) + *size_p = 4; +} + +/* The "emit_gt_goto" emit_ops method for s390x. */ + +static void +s390x_emit_gt_goto (int *offset_p, int *size_p) +{ + static const unsigned char buf[] = { + 0xe3, 0x20, 0xf0, 0x00, 0x00, 0x20, /* cg %r2, 0(%r15) */ + 0xe3, 0x20, 0xf0, 0x08, 0x00, 0x04, /* lg %r2, 8(%r15) */ + 0x41, 0xf0, 0xf0, 0x10, /* la %r15, 16(%r15) */ + 0xc0, 0x44, 0x00, 0x00, 0x00, 0x00, /* jgl <fillme> */ + }; + add_insns (buf, sizeof buf); + if (offset_p) + *offset_p = 18; + if (size_p) + *size_p = 4; +} + +/* The "emit_ge_goto" emit_ops method for s390x. */ + +static void +s390x_emit_ge_goto (int *offset_p, int *size_p) +{ + static const unsigned char buf[] = { + 0xe3, 0x20, 0xf0, 0x00, 0x00, 0x20, /* cg %r2, 0(%r15) */ + 0xe3, 0x20, 0xf0, 0x08, 0x00, 0x04, /* lg %r2, 8(%r15) */ + 0x41, 0xf0, 0xf0, 0x10, /* la %r15, 16(%r15) */ + 0xc0, 0xc4, 0x00, 0x00, 0x00, 0x00, /* jgle <fillme> */ + }; + add_insns (buf, sizeof buf); + if (offset_p) + *offset_p = 18; + if (size_p) + *size_p = 4; +} + +/* The "emit_ops" structure for s390x. */ + +static struct emit_ops s390x_emit_ops = + { + s390x_emit_prologue, + s390x_emit_epilogue, + s390x_emit_add, + s390x_emit_sub, + s390x_emit_mul, + s390x_emit_lsh, + s390x_emit_rsh_signed, + s390x_emit_rsh_unsigned, + s390x_emit_ext, + s390x_emit_log_not, + s390x_emit_bit_and, + s390x_emit_bit_or, + s390x_emit_bit_xor, + s390x_emit_bit_not, + s390x_emit_equal, + s390x_emit_less_signed, + s390x_emit_less_unsigned, + s390x_emit_ref, + s390x_emit_if_goto, + s390_emit_goto, + s390_write_goto_address, + s390x_emit_const, + s390x_emit_call, + s390x_emit_reg, + s390x_emit_pop, + s390x_emit_stack_flush, + s390x_emit_zero_ext, + s390x_emit_swap, + s390x_emit_stack_adjust, + s390x_emit_int_call_1, + s390x_emit_void_call_2, + s390x_emit_eq_goto, + s390x_emit_ne_goto, + s390x_emit_lt_goto, + s390x_emit_le_goto, + s390x_emit_gt_goto, + s390x_emit_ge_goto + }; +#endif + +/* The "emit_ops" target ops method. */ + +emit_ops * +s390_target::emit_ops () +{ +#ifdef __s390x__ + struct regcache *regcache = get_thread_regcache (current_thread, 0); + + if (register_size (regcache->tdesc, 0) == 8) + return &s390x_emit_ops; + else +#endif + return &s390_emit_ops_impl; +} + +/* The linux target ops object. */ + +linux_process_target *the_linux_target = &the_s390_target; + +void +initialize_low_arch (void) +{ + /* Initialize the Linux target descriptions. */ + + init_registers_s390_linux32 (); + init_registers_s390_linux32v1 (); + init_registers_s390_linux32v2 (); + init_registers_s390_linux64 (); + init_registers_s390_linux64v1 (); + init_registers_s390_linux64v2 (); + init_registers_s390_te_linux64 (); + init_registers_s390_vx_linux64 (); + init_registers_s390_tevx_linux64 (); + init_registers_s390_gs_linux64 (); +#ifdef __s390x__ + init_registers_s390x_linux64 (); + init_registers_s390x_linux64v1 (); + init_registers_s390x_linux64v2 (); + init_registers_s390x_te_linux64 (); + init_registers_s390x_vx_linux64 (); + init_registers_s390x_tevx_linux64 (); + init_registers_s390x_gs_linux64 (); +#endif + + initialize_regsets_info (&s390_regsets_info); + initialize_regsets_info (&s390_regsets_info_3264); +} diff -Nru gdb-9.1/gdbserver/linux-s390-tdesc.h gdb-10.2/gdbserver/linux-s390-tdesc.h --- gdb-9.1/gdbserver/linux-s390-tdesc.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/linux-s390-tdesc.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,116 @@ +/* Low level support for s390, shared between gdbserver and IPA. + + Copyright (C) 2016-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef GDBSERVER_LINUX_S390_TDESC_H +#define GDBSERVER_LINUX_S390_TDESC_H + +/* Note: since IPA obviously knows what ABI it's running on (s390 vs s390x), + it's sufficient to pass only the register set here. This, together with + the ABI known at IPA compile time, maps to a tdesc. */ + +enum s390_linux_tdesc { + S390_TDESC_32, + S390_TDESC_32V1, + S390_TDESC_32V2, + S390_TDESC_64, + S390_TDESC_64V1, + S390_TDESC_64V2, + S390_TDESC_TE, + S390_TDESC_VX, + S390_TDESC_TEVX, + S390_TDESC_GS, +}; + +#ifdef __s390x__ + +/* Defined in auto-generated file s390x-linux64.c. */ +void init_registers_s390x_linux64 (void); +extern const struct target_desc *tdesc_s390x_linux64; + +/* Defined in auto-generated file s390x-linux64v1.c. */ +void init_registers_s390x_linux64v1 (void); +extern const struct target_desc *tdesc_s390x_linux64v1; + +/* Defined in auto-generated file s390x-linux64v2.c. */ +void init_registers_s390x_linux64v2 (void); +extern const struct target_desc *tdesc_s390x_linux64v2; + +/* Defined in auto-generated file s390x-te-linux64.c. */ +void init_registers_s390x_te_linux64 (void); +extern const struct target_desc *tdesc_s390x_te_linux64; + +/* Defined in auto-generated file s390x-vx-linux64.c. */ +void init_registers_s390x_vx_linux64 (void); +extern const struct target_desc *tdesc_s390x_vx_linux64; + +/* Defined in auto-generated file s390x-tevx-linux64.c. */ +void init_registers_s390x_tevx_linux64 (void); +extern const struct target_desc *tdesc_s390x_tevx_linux64; + +/* Defined in auto-generated file s390x-gs-linux64.c. */ +void init_registers_s390x_gs_linux64 (void); +extern const struct target_desc *tdesc_s390x_gs_linux64; + +#endif + +#if !defined __s390x__ || !defined IN_PROCESS_AGENT + +/* Defined in auto-generated file s390-linux32.c. */ +void init_registers_s390_linux32 (void); +extern const struct target_desc *tdesc_s390_linux32; + +/* Defined in auto-generated file s390-linux32v1.c. */ +void init_registers_s390_linux32v1 (void); +extern const struct target_desc *tdesc_s390_linux32v1; + +/* Defined in auto-generated file s390-linux32v2.c. */ +void init_registers_s390_linux32v2 (void); +extern const struct target_desc *tdesc_s390_linux32v2; + +/* Defined in auto-generated file s390-linux64.c. */ +void init_registers_s390_linux64 (void); +extern const struct target_desc *tdesc_s390_linux64; + +/* Defined in auto-generated file s390-linux64v1.c. */ +void init_registers_s390_linux64v1 (void); +extern const struct target_desc *tdesc_s390_linux64v1; + +/* Defined in auto-generated file s390-linux64v2.c. */ +void init_registers_s390_linux64v2 (void); +extern const struct target_desc *tdesc_s390_linux64v2; + +/* Defined in auto-generated file s390-te-linux64.c. */ +void init_registers_s390_te_linux64 (void); +extern const struct target_desc *tdesc_s390_te_linux64; + +/* Defined in auto-generated file s390-vx-linux64.c. */ +void init_registers_s390_vx_linux64 (void); +extern const struct target_desc *tdesc_s390_vx_linux64; + +/* Defined in auto-generated file s390-tevx-linux64.c. */ +void init_registers_s390_tevx_linux64 (void); +extern const struct target_desc *tdesc_s390_tevx_linux64; + +/* Defined in auto-generated file s390-gs-linux64.c. */ +void init_registers_s390_gs_linux64 (void); +extern const struct target_desc *tdesc_s390_gs_linux64; + +#endif + +#endif /* GDBSERVER_LINUX_S390_TDESC_H */ diff -Nru gdb-9.1/gdbserver/linux-sh-low.cc gdb-10.2/gdbserver/linux-sh-low.cc --- gdb-9.1/gdbserver/linux-sh-low.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/linux-sh-low.cc 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,196 @@ +/* GNU/Linux/SH specific low level interface, for the remote server for GDB. + Copyright (C) 1995-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "server.h" +#include "linux-low.h" + +/* Linux target op definitions for the SH architecture. */ + +class sh_target : public linux_process_target +{ +public: + + const regs_info *get_regs_info () override; + + const gdb_byte *sw_breakpoint_from_kind (int kind, int *size) override; + +protected: + + void low_arch_setup () override; + + bool low_cannot_fetch_register (int regno) override; + + bool low_cannot_store_register (int regno) override; + + bool low_supports_breakpoints () override; + + CORE_ADDR low_get_pc (regcache *regcache) override; + + void low_set_pc (regcache *regcache, CORE_ADDR newpc) override; + + bool low_breakpoint_at (CORE_ADDR pc) override; +}; + +/* The singleton target ops object. */ + +static sh_target the_sh_target; + +bool +sh_target::low_supports_breakpoints () +{ + return true; +} + +CORE_ADDR +sh_target::low_get_pc (regcache *regcache) +{ + return linux_get_pc_32bit (regcache); +} + +void +sh_target::low_set_pc (regcache *regcache, CORE_ADDR pc) +{ + linux_set_pc_32bit (regcache, pc); +} + +/* Defined in auto-generated file reg-sh.c. */ +void init_registers_sh (void); +extern const struct target_desc *tdesc_sh; + +#ifdef HAVE_SYS_REG_H +#include <sys/reg.h> +#endif + +#include <asm/ptrace.h> + +#define sh_num_regs 41 + +/* Currently, don't check/send MQ. */ +static int sh_regmap[] = { + 0, 4, 8, 12, 16, 20, 24, 28, + 32, 36, 40, 44, 48, 52, 56, 60, + + REG_PC*4, REG_PR*4, REG_GBR*4, -1, + REG_MACH*4, REG_MACL*4, REG_SR*4, + REG_FPUL*4, REG_FPSCR*4, + + REG_FPREG0*4+0, REG_FPREG0*4+4, REG_FPREG0*4+8, REG_FPREG0*4+12, + REG_FPREG0*4+16, REG_FPREG0*4+20, REG_FPREG0*4+24, REG_FPREG0*4+28, + REG_FPREG0*4+32, REG_FPREG0*4+36, REG_FPREG0*4+40, REG_FPREG0*4+44, + REG_FPREG0*4+48, REG_FPREG0*4+52, REG_FPREG0*4+56, REG_FPREG0*4+60, +}; + +bool +sh_target::low_cannot_store_register (int regno) +{ + return false; +} + +bool +sh_target::low_cannot_fetch_register (int regno) +{ + return false; +} + +/* Correct in either endianness, obviously. */ +static const unsigned short sh_breakpoint = 0xc3c3; +#define sh_breakpoint_len 2 + +/* Implementation of target ops method "sw_breakpoint_from_kind". */ + +const gdb_byte * +sh_target::sw_breakpoint_from_kind (int kind, int *size) +{ + *size = sh_breakpoint_len; + return (const gdb_byte *) &sh_breakpoint; +} + +bool +sh_target::low_breakpoint_at (CORE_ADDR where) +{ + unsigned short insn; + + read_memory (where, (unsigned char *) &insn, 2); + if (insn == sh_breakpoint) + return true; + + /* If necessary, recognize more trap instructions here. GDB only uses the + one. */ + return false; +} + +/* Provide only a fill function for the general register set. ps_lgetregs + will use this for NPTL support. */ + +static void sh_fill_gregset (struct regcache *regcache, void *buf) +{ + int i; + + for (i = 0; i < 23; i++) + if (sh_regmap[i] != -1) + collect_register (regcache, i, (char *) buf + sh_regmap[i]); +} + +static struct regset_info sh_regsets[] = { + { 0, 0, 0, 0, GENERAL_REGS, sh_fill_gregset, NULL }, + NULL_REGSET +}; + +static struct regsets_info sh_regsets_info = + { + sh_regsets, /* regsets */ + 0, /* num_regsets */ + NULL, /* disabled_regsets */ + }; + +static struct usrregs_info sh_usrregs_info = + { + sh_num_regs, + sh_regmap, + }; + +static struct regs_info myregs_info = + { + NULL, /* regset_bitmap */ + &sh_usrregs_info, + &sh_regsets_info + }; + +const regs_info * +sh_target::get_regs_info () +{ + return &myregs_info; +} + +void +sh_target::low_arch_setup () +{ + current_process ()->tdesc = tdesc_sh; +} + +/* The linux target ops object. */ + +linux_process_target *the_linux_target = &the_sh_target; + +void +initialize_low_arch (void) +{ + init_registers_sh (); + + initialize_regsets_info (&sh_regsets_info); +} diff -Nru gdb-9.1/gdbserver/linux-sparc-low.cc gdb-10.2/gdbserver/linux-sparc-low.cc --- gdb-9.1/gdbserver/linux-sparc-low.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/linux-sparc-low.cc 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,354 @@ +/* Low level interface to ptrace, for the remote server for GDB. + Copyright (C) 1995-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "server.h" +#include "linux-low.h" + +#include "nat/gdb_ptrace.h" + +#include "gdb_proc_service.h" + +/* The stack pointer is offset from the stack frame by a BIAS of 2047 + (0x7ff) for 64-bit code. BIAS is likely to be defined on SPARC + hosts, so undefine it first. */ +#undef BIAS +#define BIAS 2047 + +#ifdef HAVE_SYS_REG_H +#include <sys/reg.h> +#endif + +#define INSN_SIZE 4 + +#define SPARC_R_REGS_NUM 32 +#define SPARC_F_REGS_NUM 48 +#define SPARC_CONTROL_REGS_NUM 6 + +#define sparc_num_regs \ + (SPARC_R_REGS_NUM + SPARC_F_REGS_NUM + SPARC_CONTROL_REGS_NUM) + +/* Linux target op definitions for the SPARC architecture. */ + +class sparc_target : public linux_process_target +{ +public: + + const regs_info *get_regs_info () override; + + const gdb_byte *sw_breakpoint_from_kind (int kind, int *size) override; + +protected: + + void low_arch_setup () override; + + bool low_cannot_fetch_register (int regno) override; + + bool low_cannot_store_register (int regno) override; + + bool low_supports_breakpoints () override; + + CORE_ADDR low_get_pc (regcache *regcache) override; + + /* No low_set_pc is needed. */ + + bool low_breakpoint_at (CORE_ADDR pc) override; +}; + +/* The singleton target ops object. */ + +static sparc_target the_sparc_target; + +bool +sparc_target::low_supports_breakpoints () +{ + return true; +} + +CORE_ADDR +sparc_target::low_get_pc (regcache *regcache) +{ + return linux_get_pc_64bit (regcache); +} + +/* Each offset is multiplied by 8, because of the register size. + These offsets apply to the buffer sent/filled by ptrace. + Additionally, the array elements order corresponds to the .dat file, and the + gdb's registers enumeration order. */ + +static int sparc_regmap[] = { + /* These offsets correspond to GET/SETREGSET. */ + -1, 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, /* g0 .. g7 */ + 7*8, 8*8, 9*8, 10*8, 11*8, 12*8, 13*8, 14*8, /* o0 .. o5, sp, o7 */ + -1, -1, -1, -1, -1, -1, -1, -1, /* l0 .. l7 */ + -1, -1, -1, -1, -1, -1, -1, -1, /* i0 .. i5, fp, i7 */ + + /* Floating point registers offsets correspond to GET/SETFPREGSET. */ + 0*4, 1*4, 2*4, 3*4, 4*4, 5*4, 6*4, 7*4, /* f0 .. f7 */ + 8*4, 9*4, 10*4, 11*4, 12*4, 13*4, 14*4, 15*4, /* f8 .. f15 */ + 16*4, 17*4, 18*4, 19*4, 20*4, 21*4, 22*4, 23*4, /* f16 .. f23 */ + 24*4, 25*4, 26*4, 27*4, 28*4, 29*4, 30*4, 31*4, /* f24 .. f31 */ + + /* F32 offset starts next to f31: 31*4+4 = 16 * 8. */ + 16*8, 17*8, 18*8, 19*8, 20*8, 21*8, 22*8, 23*8, /* f32 .. f46 */ + 24*8, 25*8, 26*8, 27*8, 28*8, 29*8, 30*8, 31*8, /* f48 .. f62 */ + + 17 *8, /* pc */ + 18 *8, /* npc */ + 16 *8, /* state */ + /* FSR offset also corresponds to GET/SETFPREGSET, ans is placed + next to f62. */ + 32 *8, /* fsr */ + -1, /* fprs */ + /* Y register is 32-bits length, but gdb takes care of that. */ + 19 *8, /* y */ + +}; + + +struct regs_range_t +{ + int regno_start; + int regno_end; +}; + +static const struct regs_range_t gregs_ranges[] = { + { 0, 31 }, /* g0 .. i7 */ + { 80, 82 }, /* pc .. state */ + { 84, 85 } /* fprs .. y */ +}; + +#define N_GREGS_RANGES (sizeof (gregs_ranges) / sizeof (struct regs_range_t)) + +static const struct regs_range_t fpregs_ranges[] = { + { 32, 79 }, /* f0 .. f62 */ + { 83, 83 } /* fsr */ +}; + +#define N_FPREGS_RANGES (sizeof (fpregs_ranges) / sizeof (struct regs_range_t)) + +/* Defined in auto-generated file reg-sparc64.c. */ +void init_registers_sparc64 (void); +extern const struct target_desc *tdesc_sparc64; + +bool +sparc_target::low_cannot_store_register (int regno) +{ + return (regno >= sparc_num_regs || sparc_regmap[regno] == -1); +} + +bool +sparc_target::low_cannot_fetch_register (int regno) +{ + return (regno >= sparc_num_regs || sparc_regmap[regno] == -1); +} + +static void +sparc_fill_gregset_to_stack (struct regcache *regcache, const void *buf) +{ + int i; + CORE_ADDR addr = 0; + unsigned char tmp_reg_buf[8]; + const int l0_regno = find_regno (regcache->tdesc, "l0"); + const int i7_regno = l0_regno + 15; + + /* These registers have to be stored in the stack. */ + memcpy (&addr, + ((char *) buf) + sparc_regmap[find_regno (regcache->tdesc, "sp")], + sizeof (addr)); + + addr += BIAS; + + for (i = l0_regno; i <= i7_regno; i++) + { + collect_register (regcache, i, tmp_reg_buf); + the_target->write_memory (addr, tmp_reg_buf, sizeof (tmp_reg_buf)); + addr += sizeof (tmp_reg_buf); + } +} + +static void +sparc_fill_gregset (struct regcache *regcache, void *buf) +{ + int i; + int range; + + for (range = 0; range < N_GREGS_RANGES; range++) + for (i = gregs_ranges[range].regno_start; + i <= gregs_ranges[range].regno_end; i++) + if (sparc_regmap[i] != -1) + collect_register (regcache, i, ((char *) buf) + sparc_regmap[i]); + + sparc_fill_gregset_to_stack (regcache, buf); +} + +static void +sparc_fill_fpregset (struct regcache *regcache, void *buf) +{ + int i; + int range; + + for (range = 0; range < N_FPREGS_RANGES; range++) + for (i = fpregs_ranges[range].regno_start; + i <= fpregs_ranges[range].regno_end; i++) + collect_register (regcache, i, ((char *) buf) + sparc_regmap[i]); + +} + +static void +sparc_store_gregset_from_stack (struct regcache *regcache, const void *buf) +{ + int i; + CORE_ADDR addr = 0; + unsigned char tmp_reg_buf[8]; + const int l0_regno = find_regno (regcache->tdesc, "l0"); + const int i7_regno = l0_regno + 15; + + /* These registers have to be obtained from the stack. */ + memcpy (&addr, + ((char *) buf) + sparc_regmap[find_regno (regcache->tdesc, "sp")], + sizeof (addr)); + + addr += BIAS; + + for (i = l0_regno; i <= i7_regno; i++) + { + the_target->read_memory (addr, tmp_reg_buf, sizeof (tmp_reg_buf)); + supply_register (regcache, i, tmp_reg_buf); + addr += sizeof (tmp_reg_buf); + } +} + +static void +sparc_store_gregset (struct regcache *regcache, const void *buf) +{ + int i; + char zerobuf[8]; + int range; + + memset (zerobuf, 0, sizeof (zerobuf)); + + for (range = 0; range < N_GREGS_RANGES; range++) + for (i = gregs_ranges[range].regno_start; + i <= gregs_ranges[range].regno_end; i++) + if (sparc_regmap[i] != -1) + supply_register (regcache, i, ((char *) buf) + sparc_regmap[i]); + else + supply_register (regcache, i, zerobuf); + + sparc_store_gregset_from_stack (regcache, buf); +} + +static void +sparc_store_fpregset (struct regcache *regcache, const void *buf) +{ + int i; + int range; + + for (range = 0; range < N_FPREGS_RANGES; range++) + for (i = fpregs_ranges[range].regno_start; + i <= fpregs_ranges[range].regno_end; + i++) + supply_register (regcache, i, ((char *) buf) + sparc_regmap[i]); +} + +static const gdb_byte sparc_breakpoint[INSN_SIZE] = { + 0x91, 0xd0, 0x20, 0x01 +}; +#define sparc_breakpoint_len INSN_SIZE + +/* Implementation of target ops method "sw_breakpoint_from_kind". */ + +const gdb_byte * +sparc_target::sw_breakpoint_from_kind (int kind, int *size) +{ + *size = sparc_breakpoint_len; + return sparc_breakpoint; +} + +bool +sparc_target::low_breakpoint_at (CORE_ADDR where) +{ + unsigned char insn[INSN_SIZE]; + + read_memory (where, (unsigned char *) insn, sizeof (insn)); + + if (memcmp (sparc_breakpoint, insn, sizeof (insn)) == 0) + return true; + + /* If necessary, recognize more trap instructions here. GDB only + uses TRAP Always. */ + + return false; +} + +void +sparc_target::low_arch_setup () +{ + current_process ()->tdesc = tdesc_sparc64; +} + +static struct regset_info sparc_regsets[] = { + { PTRACE_GETREGS, PTRACE_SETREGS, 0, sizeof (elf_gregset_t), + GENERAL_REGS, + sparc_fill_gregset, sparc_store_gregset }, + { PTRACE_GETFPREGS, PTRACE_SETFPREGS, 0, sizeof (fpregset_t), + FP_REGS, + sparc_fill_fpregset, sparc_store_fpregset }, + NULL_REGSET +}; + +static struct regsets_info sparc_regsets_info = + { + sparc_regsets, /* regsets */ + 0, /* num_regsets */ + NULL, /* disabled_regsets */ + }; + +static struct usrregs_info sparc_usrregs_info = + { + sparc_num_regs, + /* No regmap needs to be provided since this impl. doesn't use + USRREGS. */ + NULL + }; + +static struct regs_info myregs_info = + { + NULL, /* regset_bitmap */ + &sparc_usrregs_info, + &sparc_regsets_info + }; + +const regs_info * +sparc_target::get_regs_info () +{ + return &myregs_info; +} + +/* The linux target ops object. */ + +linux_process_target *the_linux_target = &the_sparc_target; + +void +initialize_low_arch (void) +{ + /* Initialize the Linux target descriptions. */ + init_registers_sparc64 (); + + initialize_regsets_info (&sparc_regsets_info); +} diff -Nru gdb-9.1/gdbserver/linux-tic6x-low.cc gdb-10.2/gdbserver/linux-tic6x-low.cc --- gdb-9.1/gdbserver/linux-tic6x-low.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/linux-tic6x-low.cc 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,448 @@ +/* Target dependent code for GDB on TI C6x systems. + + Copyright (C) 2010-2021 Free Software Foundation, Inc. + Contributed by Andrew Jenner <andrew@codesourcery.com> + Contributed by Yao Qi <yao@codesourcery.com> + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "server.h" +#include "linux-low.h" +#include "arch/tic6x.h" +#include "tdesc.h" + +#include "nat/gdb_ptrace.h" +#include <endian.h> + +#include "gdb_proc_service.h" + +#ifndef PTRACE_GET_THREAD_AREA +#define PTRACE_GET_THREAD_AREA 25 +#endif + +/* There are at most 69 registers accessible in ptrace. */ +#define TIC6X_NUM_REGS 69 + +#include <asm/ptrace.h> + +/* Linux target op definitions for the TI C6x architecture. */ + +class tic6x_target : public linux_process_target +{ +public: + + const regs_info *get_regs_info () override; + + const gdb_byte *sw_breakpoint_from_kind (int kind, int *size) override; + +protected: + + void low_arch_setup () override; + + bool low_cannot_fetch_register (int regno) override; + + bool low_cannot_store_register (int regno) override; + + bool low_supports_breakpoints () override; + + CORE_ADDR low_get_pc (regcache *regcache) override; + + void low_set_pc (regcache *regcache, CORE_ADDR newpc) override; + + bool low_breakpoint_at (CORE_ADDR pc) override; +}; + +/* The singleton target ops object. */ + +static tic6x_target the_tic6x_target; + +/* Defined in auto-generated file tic6x-c64xp-linux.c. */ +void init_registers_tic6x_c64xp_linux (void); +extern const struct target_desc *tdesc_tic6x_c64xp_linux; + +/* Defined in auto-generated file tic6x-c64x-linux.c. */ +void init_registers_tic6x_c64x_linux (void); +extern const struct target_desc *tdesc_tic6x_c64x_linux; + +/* Defined in auto-generated file tic62x-c6xp-linux.c. */ +void init_registers_tic6x_c62x_linux (void); +extern const struct target_desc *tdesc_tic6x_c62x_linux; + +union tic6x_register +{ + unsigned char buf[4]; + + int reg32; +}; + +/* Return the ptrace ``address'' of register REGNO. */ + +#if __BYTE_ORDER == __BIG_ENDIAN +static int tic6x_regmap_c64xp[] = { + /* A0 - A15 */ + 53, 52, 55, 54, 57, 56, 59, 58, + 61, 60, 63, 62, 65, 64, 67, 66, + /* B0 - B15 */ + 23, 22, 25, 24, 27, 26, 29, 28, + 31, 30, 33, 32, 35, 34, 69, 68, + /* CSR PC */ + 5, 4, + /* A16 - A31 */ + 37, 36, 39, 38, 41, 40, 43, 42, + 45, 44, 47, 46, 49, 48, 51, 50, + /* B16 - B31 */ + 7, 6, 9, 8, 11, 10, 13, 12, + 15, 14, 17, 16, 19, 18, 21, 20, + /* TSR, ILC, RILC */ + 1, 2, 3 +}; + +static int tic6x_regmap_c64x[] = { + /* A0 - A15 */ + 51, 50, 53, 52, 55, 54, 57, 56, + 59, 58, 61, 60, 63, 62, 65, 64, + /* B0 - B15 */ + 21, 20, 23, 22, 25, 24, 27, 26, + 29, 28, 31, 30, 33, 32, 67, 66, + /* CSR PC */ + 3, 2, + /* A16 - A31 */ + 35, 34, 37, 36, 39, 38, 41, 40, + 43, 42, 45, 44, 47, 46, 49, 48, + /* B16 - B31 */ + 5, 4, 7, 6, 9, 8, 11, 10, + 13, 12, 15, 14, 17, 16, 19, 18, + -1, -1, -1 +}; + +static int tic6x_regmap_c62x[] = { + /* A0 - A15 */ + 19, 18, 21, 20, 23, 22, 25, 24, + 27, 26, 29, 28, 31, 30, 33, 32, + /* B0 - B15 */ + 5, 4, 7, 6, 9, 8, 11, 10, + 13, 12, 15, 14, 17, 16, 35, 34, + /* CSR, PC */ + 3, 2, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1 +}; + +#else +static int tic6x_regmap_c64xp[] = { + /* A0 - A15 */ + 52, 53, 54, 55, 56, 57, 58, 59, + 60, 61, 62, 63, 64, 65, 66, 67, + /* B0 - B15 */ + 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31, 32, 33, 34, 35, 68, 69, + /* CSR PC */ + 4, 5, + /* A16 - A31 */ + 36, 37, 38, 39, 40, 41, 42, 43, + 44, 45, 46, 47, 48, 49, 50, 51, + /* B16 -B31 */ + 6, 7, 8, 9, 10, 11, 12, 13, + 14, 15, 16, 17, 18, 19, 20, 31, + /* TSR, ILC, RILC */ + 0, 3, 2 +}; + +static int tic6x_regmap_c64x[] = { + /* A0 - A15 */ + 50, 51, 52, 53, 54, 55, 56, 57, + 58, 59, 60, 61, 62, 63, 64, 65, + /* B0 - B15 */ + 20, 21, 22, 23, 24, 25, 26, 27, + 28, 29, 30, 31, 32, 33, 66, 67, + /* CSR PC */ + 2, 3, + /* A16 - A31 */ + 34, 35, 36, 37, 38, 39, 40, 41, + 42, 43, 44, 45, 46, 47, 48, 49, + /* B16 - B31 */ + 4, 5, 6, 7, 8, 9, 10, 11, + 12, 13, 14, 15, 16, 17, 18, 19, + -1, -1, -1 +}; + +static int tic6x_regmap_c62x[] = { + /* A0 - A15 */ + 18, 19, 20, 21, 22, 23, 24, 25, + 26, 27, 28, 29, 30, 31, 32, 33, + /* B0 - B15 */ + 4, 5, 6, 7, 8, 9, 10, 11, + 12, 13, 14, 15, 16, 17, 34, 35, + /* CSR PC */ + 2, 3, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1 +}; + +#endif + +static int *tic6x_regmap; +static unsigned int tic6x_breakpoint; +#define tic6x_breakpoint_len 4 + +/* Implementation of target ops method "sw_breakpoint_from_kind". */ + +const gdb_byte * +tic6x_target::sw_breakpoint_from_kind (int kind, int *size) +{ + *size = tic6x_breakpoint_len; + return (const gdb_byte *) &tic6x_breakpoint; +} + +static struct usrregs_info tic6x_usrregs_info = + { + TIC6X_NUM_REGS, + NULL, /* Set in tic6x_read_description. */ + }; + +static const struct target_desc * +tic6x_read_description (enum c6x_feature feature) +{ + static target_desc *tdescs[C6X_LAST] = { }; + struct target_desc **tdesc = &tdescs[feature]; + + if (*tdesc == NULL) + { + *tdesc = tic6x_create_target_description (feature); + static const char *expedite_regs[] = { "A15", "PC", NULL }; + init_target_desc (*tdesc, expedite_regs); + } + + return *tdesc; +} + +bool +tic6x_target::low_cannot_fetch_register (int regno) +{ + return (tic6x_regmap[regno] == -1); +} + +bool +tic6x_target::low_cannot_store_register (int regno) +{ + return (tic6x_regmap[regno] == -1); +} + +bool +tic6x_target::low_supports_breakpoints () +{ + return true; +} + +CORE_ADDR +tic6x_target::low_get_pc (regcache *regcache) +{ + union tic6x_register pc; + + collect_register_by_name (regcache, "PC", pc.buf); + return pc.reg32; +} + +void +tic6x_target::low_set_pc (regcache *regcache, CORE_ADDR pc) +{ + union tic6x_register newpc; + + newpc.reg32 = pc; + supply_register_by_name (regcache, "PC", newpc.buf); +} + +bool +tic6x_target::low_breakpoint_at (CORE_ADDR where) +{ + unsigned int insn; + + read_memory (where, (unsigned char *) &insn, 4); + if (insn == tic6x_breakpoint) + return true; + + /* If necessary, recognize more trap instructions here. GDB only uses the + one. */ + return false; +} + +/* Fetch the thread-local storage pointer for libthread_db. */ + +ps_err_e +ps_get_thread_area (struct ps_prochandle *ph, + lwpid_t lwpid, int idx, void **base) +{ + if (ptrace (PTRACE_GET_THREAD_AREA, lwpid, NULL, base) != 0) + return PS_ERR; + + /* IDX is the bias from the thread pointer to the beginning of the + thread descriptor. It has to be subtracted due to implementation + quirks in libthread_db. */ + *base = (void *) ((char *) *base - idx); + + return PS_OK; +} + +static void +tic6x_collect_register (struct regcache *regcache, int regno, + union tic6x_register *reg) +{ + union tic6x_register tmp_reg; + + collect_register (regcache, regno, &tmp_reg.reg32); + reg->reg32 = tmp_reg.reg32; +} + +static void +tic6x_supply_register (struct regcache *regcache, int regno, + const union tic6x_register *reg) +{ + int offset = 0; + + supply_register (regcache, regno, reg->buf + offset); +} + +static void +tic6x_fill_gregset (struct regcache *regcache, void *buf) +{ + auto regset = static_cast<union tic6x_register *> (buf); + int i; + + for (i = 0; i < TIC6X_NUM_REGS; i++) + if (tic6x_regmap[i] != -1) + tic6x_collect_register (regcache, i, regset + tic6x_regmap[i]); +} + +static void +tic6x_store_gregset (struct regcache *regcache, const void *buf) +{ + const auto regset = static_cast<const union tic6x_register *> (buf); + int i; + + for (i = 0; i < TIC6X_NUM_REGS; i++) + if (tic6x_regmap[i] != -1) + tic6x_supply_register (regcache, i, regset + tic6x_regmap[i]); +} + +static struct regset_info tic6x_regsets[] = { + { PTRACE_GETREGS, PTRACE_SETREGS, 0, TIC6X_NUM_REGS * 4, GENERAL_REGS, + tic6x_fill_gregset, tic6x_store_gregset }, + NULL_REGSET +}; + +void +tic6x_target::low_arch_setup () +{ + register unsigned int csr asm ("B2"); + unsigned int cpuid; + enum c6x_feature feature = C6X_CORE; + + /* Determine the CPU we're running on to find the register order. */ + __asm__ ("MVC .S2 CSR,%0" : "=r" (csr) :); + cpuid = csr >> 24; + switch (cpuid) + { + case 0x00: /* C62x */ + case 0x02: /* C67x */ + tic6x_regmap = tic6x_regmap_c62x; + tic6x_breakpoint = 0x0000a122; /* BNOP .S2 0,5 */ + feature = C6X_CORE; + break; + case 0x03: /* C67x+ */ + tic6x_regmap = tic6x_regmap_c64x; + tic6x_breakpoint = 0x0000a122; /* BNOP .S2 0,5 */ + feature = C6X_GP; + break; + case 0x0c: /* C64x */ + tic6x_regmap = tic6x_regmap_c64x; + tic6x_breakpoint = 0x0000a122; /* BNOP .S2 0,5 */ + feature = C6X_GP; + break; + case 0x10: /* C64x+ */ + case 0x14: /* C674x */ + case 0x15: /* C66x */ + tic6x_regmap = tic6x_regmap_c64xp; + tic6x_breakpoint = 0x56454314; /* illegal opcode */ + feature = C6X_C6XP; + break; + default: + error ("Unknown CPU ID 0x%02x", cpuid); + } + tic6x_usrregs_info.regmap = tic6x_regmap; + + current_process ()->tdesc = tic6x_read_description (feature); +} + +static struct regsets_info tic6x_regsets_info = + { + tic6x_regsets, /* regsets */ + 0, /* num_regsets */ + NULL, /* disabled_regsets */ + }; + +static struct regs_info myregs_info = + { + NULL, /* regset_bitmap */ + &tic6x_usrregs_info, + &tic6x_regsets_info + }; + +const regs_info * +tic6x_target::get_regs_info () +{ + return &myregs_info; +} + +#if GDB_SELF_TEST +#include "gdbsupport/selftest.h" + +namespace selftests { +namespace tdesc { +static void +tic6x_tdesc_test () +{ + SELF_CHECK (*tdesc_tic6x_c62x_linux == *tic6x_read_description (C6X_CORE)); + SELF_CHECK (*tdesc_tic6x_c64x_linux == *tic6x_read_description (C6X_GP)); + SELF_CHECK (*tdesc_tic6x_c64xp_linux == *tic6x_read_description (C6X_C6XP)); +} +} +} +#endif + +/* The linux target ops object. */ + +linux_process_target *the_linux_target = &the_tic6x_target; + +void +initialize_low_arch (void) +{ +#if GDB_SELF_TEST + /* Initialize the Linux target descriptions. */ + init_registers_tic6x_c64xp_linux (); + init_registers_tic6x_c64x_linux (); + init_registers_tic6x_c62x_linux (); + + selftests::register_test ("tic6x-tdesc", selftests::tdesc::tic6x_tdesc_test); +#endif + + initialize_regsets_info (&tic6x_regsets_info); +} diff -Nru gdb-9.1/gdbserver/linux-x86-low.cc gdb-10.2/gdbserver/linux-x86-low.cc --- gdb-9.1/gdbserver/linux-x86-low.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/linux-x86-low.cc 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,2986 @@ +/* GNU/Linux/x86-64 specific low level interface, for the remote server + for GDB. + Copyright (C) 2002-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "server.h" +#include <signal.h> +#include <limits.h> +#include <inttypes.h> +#include "linux-low.h" +#include "i387-fp.h" +#include "x86-low.h" +#include "gdbsupport/x86-xstate.h" +#include "nat/gdb_ptrace.h" + +#ifdef __x86_64__ +#include "nat/amd64-linux-siginfo.h" +#endif + +#include "gdb_proc_service.h" +/* Don't include elf/common.h if linux/elf.h got included by + gdb_proc_service.h. */ +#ifndef ELFMAG0 +#include "elf/common.h" +#endif + +#include "gdbsupport/agent.h" +#include "tdesc.h" +#include "tracepoint.h" +#include "ax.h" +#include "nat/linux-nat.h" +#include "nat/x86-linux.h" +#include "nat/x86-linux-dregs.h" +#include "linux-x86-tdesc.h" + +#ifdef __x86_64__ +static struct target_desc *tdesc_amd64_linux_no_xml; +#endif +static struct target_desc *tdesc_i386_linux_no_xml; + + +static unsigned char jump_insn[] = { 0xe9, 0, 0, 0, 0 }; +static unsigned char small_jump_insn[] = { 0x66, 0xe9, 0, 0 }; + +/* Backward compatibility for gdb without XML support. */ + +static const char *xmltarget_i386_linux_no_xml = "@<target>\ +<architecture>i386</architecture>\ +<osabi>GNU/Linux</osabi>\ +</target>"; + +#ifdef __x86_64__ +static const char *xmltarget_amd64_linux_no_xml = "@<target>\ +<architecture>i386:x86-64</architecture>\ +<osabi>GNU/Linux</osabi>\ +</target>"; +#endif + +#include <sys/reg.h> +#include <sys/procfs.h> +#include <sys/uio.h> + +#ifndef PTRACE_GET_THREAD_AREA +#define PTRACE_GET_THREAD_AREA 25 +#endif + +/* This definition comes from prctl.h, but some kernels may not have it. */ +#ifndef PTRACE_ARCH_PRCTL +#define PTRACE_ARCH_PRCTL 30 +#endif + +/* The following definitions come from prctl.h, but may be absent + for certain configurations. */ +#ifndef ARCH_GET_FS +#define ARCH_SET_GS 0x1001 +#define ARCH_SET_FS 0x1002 +#define ARCH_GET_FS 0x1003 +#define ARCH_GET_GS 0x1004 +#endif + +/* Linux target op definitions for the x86 architecture. + This is initialized assuming an amd64 target. + 'low_arch_setup' will correct it for i386 or amd64 targets. */ + +class x86_target : public linux_process_target +{ +public: + + const regs_info *get_regs_info () override; + + const gdb_byte *sw_breakpoint_from_kind (int kind, int *size) override; + + bool supports_z_point_type (char z_type) override; + + void process_qsupported (gdb::array_view<const char * const> features) override; + + bool supports_tracepoints () override; + + bool supports_fast_tracepoints () override; + + int install_fast_tracepoint_jump_pad + (CORE_ADDR tpoint, CORE_ADDR tpaddr, CORE_ADDR collector, + CORE_ADDR lockaddr, ULONGEST orig_size, CORE_ADDR *jump_entry, + CORE_ADDR *trampoline, ULONGEST *trampoline_size, + unsigned char *jjump_pad_insn, ULONGEST *jjump_pad_insn_size, + CORE_ADDR *adjusted_insn_addr, CORE_ADDR *adjusted_insn_addr_end, + char *err) override; + + int get_min_fast_tracepoint_insn_len () override; + + struct emit_ops *emit_ops () override; + + int get_ipa_tdesc_idx () override; + +protected: + + void low_arch_setup () override; + + bool low_cannot_fetch_register (int regno) override; + + bool low_cannot_store_register (int regno) override; + + bool low_supports_breakpoints () override; + + CORE_ADDR low_get_pc (regcache *regcache) override; + + void low_set_pc (regcache *regcache, CORE_ADDR newpc) override; + + int low_decr_pc_after_break () override; + + bool low_breakpoint_at (CORE_ADDR pc) override; + + int low_insert_point (raw_bkpt_type type, CORE_ADDR addr, + int size, raw_breakpoint *bp) override; + + int low_remove_point (raw_bkpt_type type, CORE_ADDR addr, + int size, raw_breakpoint *bp) override; + + bool low_stopped_by_watchpoint () override; + + CORE_ADDR low_stopped_data_address () override; + + /* collect_ptrace_register/supply_ptrace_register are not needed in the + native i386 case (no registers smaller than an xfer unit), and are not + used in the biarch case (HAVE_LINUX_USRREGS is not defined). */ + + /* Need to fix up i386 siginfo if host is amd64. */ + bool low_siginfo_fixup (siginfo_t *native, gdb_byte *inf, + int direction) override; + + arch_process_info *low_new_process () override; + + void low_delete_process (arch_process_info *info) override; + + void low_new_thread (lwp_info *) override; + + void low_delete_thread (arch_lwp_info *) override; + + void low_new_fork (process_info *parent, process_info *child) override; + + void low_prepare_to_resume (lwp_info *lwp) override; + + int low_get_thread_area (int lwpid, CORE_ADDR *addrp) override; + + bool low_supports_range_stepping () override; + + bool low_supports_catch_syscall () override; + + void low_get_syscall_trapinfo (regcache *regcache, int *sysno) override; + +private: + + /* Update all the target description of all processes; a new GDB + connected, and it may or not support xml target descriptions. */ + void update_xmltarget (); +}; + +/* The singleton target ops object. */ + +static x86_target the_x86_target; + +/* Per-process arch-specific data we want to keep. */ + +struct arch_process_info +{ + struct x86_debug_reg_state debug_reg_state; +}; + +#ifdef __x86_64__ + +/* Mapping between the general-purpose registers in `struct user' + format and GDB's register array layout. + Note that the transfer layout uses 64-bit regs. */ +static /*const*/ int i386_regmap[] = +{ + RAX * 8, RCX * 8, RDX * 8, RBX * 8, + RSP * 8, RBP * 8, RSI * 8, RDI * 8, + RIP * 8, EFLAGS * 8, CS * 8, SS * 8, + DS * 8, ES * 8, FS * 8, GS * 8 +}; + +#define I386_NUM_REGS (sizeof (i386_regmap) / sizeof (i386_regmap[0])) + +/* So code below doesn't have to care, i386 or amd64. */ +#define ORIG_EAX ORIG_RAX +#define REGSIZE 8 + +static const int x86_64_regmap[] = +{ + RAX * 8, RBX * 8, RCX * 8, RDX * 8, + RSI * 8, RDI * 8, RBP * 8, RSP * 8, + R8 * 8, R9 * 8, R10 * 8, R11 * 8, + R12 * 8, R13 * 8, R14 * 8, R15 * 8, + RIP * 8, EFLAGS * 8, CS * 8, SS * 8, + DS * 8, ES * 8, FS * 8, GS * 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, + ORIG_RAX * 8, + 21 * 8, 22 * 8, + -1, -1, -1, -1, /* MPX registers BND0 ... BND3. */ + -1, -1, /* MPX registers BNDCFGU, BNDSTATUS. */ + -1, -1, -1, -1, -1, -1, -1, -1, /* xmm16 ... xmm31 (AVX512) */ + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, /* ymm16 ... ymm31 (AVX512) */ + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, /* k0 ... k7 (AVX512) */ + -1, -1, -1, -1, -1, -1, -1, -1, /* zmm0 ... zmm31 (AVX512) */ + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1 /* pkru */ +}; + +#define X86_64_NUM_REGS (sizeof (x86_64_regmap) / sizeof (x86_64_regmap[0])) +#define X86_64_USER_REGS (GS + 1) + +#else /* ! __x86_64__ */ + +/* Mapping between the general-purpose registers in `struct user' + format and GDB's register array layout. */ +static /*const*/ int i386_regmap[] = +{ + EAX * 4, ECX * 4, EDX * 4, EBX * 4, + UESP * 4, EBP * 4, ESI * 4, EDI * 4, + EIP * 4, EFL * 4, CS * 4, SS * 4, + DS * 4, ES * 4, FS * 4, GS * 4 +}; + +#define I386_NUM_REGS (sizeof (i386_regmap) / sizeof (i386_regmap[0])) + +#define REGSIZE 4 + +#endif + +#ifdef __x86_64__ + +/* Returns true if the current inferior belongs to a x86-64 process, + per the tdesc. */ + +static int +is_64bit_tdesc (void) +{ + struct regcache *regcache = get_thread_regcache (current_thread, 0); + + return register_size (regcache->tdesc, 0) == 8; +} + +#endif + + +/* Called by libthread_db. */ + +ps_err_e +ps_get_thread_area (struct ps_prochandle *ph, + lwpid_t lwpid, int idx, void **base) +{ +#ifdef __x86_64__ + int use_64bit = is_64bit_tdesc (); + + if (use_64bit) + { + switch (idx) + { + case FS: + if (ptrace (PTRACE_ARCH_PRCTL, lwpid, base, ARCH_GET_FS) == 0) + return PS_OK; + break; + case GS: + if (ptrace (PTRACE_ARCH_PRCTL, lwpid, base, ARCH_GET_GS) == 0) + return PS_OK; + break; + default: + return PS_BADADDR; + } + return PS_ERR; + } +#endif + + { + unsigned int desc[4]; + + if (ptrace (PTRACE_GET_THREAD_AREA, lwpid, + (void *) (intptr_t) idx, (unsigned long) &desc) < 0) + return PS_ERR; + + /* Ensure we properly extend the value to 64-bits for x86_64. */ + *base = (void *) (uintptr_t) desc[1]; + return PS_OK; + } +} + +/* Get the thread area address. This is used to recognize which + thread is which when tracing with the in-process agent library. We + don't read anything from the address, and treat it as opaque; it's + the address itself that we assume is unique per-thread. */ + +int +x86_target::low_get_thread_area (int lwpid, CORE_ADDR *addr) +{ +#ifdef __x86_64__ + int use_64bit = is_64bit_tdesc (); + + if (use_64bit) + { + void *base; + if (ptrace (PTRACE_ARCH_PRCTL, lwpid, &base, ARCH_GET_FS) == 0) + { + *addr = (CORE_ADDR) (uintptr_t) base; + return 0; + } + + return -1; + } +#endif + + { + struct lwp_info *lwp = find_lwp_pid (ptid_t (lwpid)); + struct thread_info *thr = get_lwp_thread (lwp); + struct regcache *regcache = get_thread_regcache (thr, 1); + unsigned int desc[4]; + ULONGEST gs = 0; + const int reg_thread_area = 3; /* bits to scale down register value. */ + int idx; + + collect_register_by_name (regcache, "gs", &gs); + + idx = gs >> reg_thread_area; + + if (ptrace (PTRACE_GET_THREAD_AREA, + lwpid_of (thr), + (void *) (long) idx, (unsigned long) &desc) < 0) + return -1; + + *addr = desc[1]; + return 0; + } +} + + + +bool +x86_target::low_cannot_store_register (int regno) +{ +#ifdef __x86_64__ + if (is_64bit_tdesc ()) + return false; +#endif + + return regno >= I386_NUM_REGS; +} + +bool +x86_target::low_cannot_fetch_register (int regno) +{ +#ifdef __x86_64__ + if (is_64bit_tdesc ()) + return false; +#endif + + return regno >= I386_NUM_REGS; +} + +static void +x86_fill_gregset (struct regcache *regcache, void *buf) +{ + int i; + +#ifdef __x86_64__ + if (register_size (regcache->tdesc, 0) == 8) + { + for (i = 0; i < X86_64_NUM_REGS; i++) + if (x86_64_regmap[i] != -1) + collect_register (regcache, i, ((char *) buf) + x86_64_regmap[i]); + + return; + } + + /* 32-bit inferior registers need to be zero-extended. + Callers would read uninitialized memory otherwise. */ + memset (buf, 0x00, X86_64_USER_REGS * 8); +#endif + + for (i = 0; i < I386_NUM_REGS; i++) + collect_register (regcache, i, ((char *) buf) + i386_regmap[i]); + + collect_register_by_name (regcache, "orig_eax", + ((char *) buf) + ORIG_EAX * REGSIZE); + +#ifdef __x86_64__ + /* Sign extend EAX value to avoid potential syscall restart + problems. + + See amd64_linux_collect_native_gregset() in gdb/amd64-linux-nat.c + for a detailed explanation. */ + if (register_size (regcache->tdesc, 0) == 4) + { + void *ptr = ((gdb_byte *) buf + + i386_regmap[find_regno (regcache->tdesc, "eax")]); + + *(int64_t *) ptr = *(int32_t *) ptr; + } +#endif +} + +static void +x86_store_gregset (struct regcache *regcache, const void *buf) +{ + int i; + +#ifdef __x86_64__ + if (register_size (regcache->tdesc, 0) == 8) + { + for (i = 0; i < X86_64_NUM_REGS; i++) + if (x86_64_regmap[i] != -1) + supply_register (regcache, i, ((char *) buf) + x86_64_regmap[i]); + + return; + } +#endif + + for (i = 0; i < I386_NUM_REGS; i++) + supply_register (regcache, i, ((char *) buf) + i386_regmap[i]); + + supply_register_by_name (regcache, "orig_eax", + ((char *) buf) + ORIG_EAX * REGSIZE); +} + +static void +x86_fill_fpregset (struct regcache *regcache, void *buf) +{ +#ifdef __x86_64__ + i387_cache_to_fxsave (regcache, buf); +#else + i387_cache_to_fsave (regcache, buf); +#endif +} + +static void +x86_store_fpregset (struct regcache *regcache, const void *buf) +{ +#ifdef __x86_64__ + i387_fxsave_to_cache (regcache, buf); +#else + i387_fsave_to_cache (regcache, buf); +#endif +} + +#ifndef __x86_64__ + +static void +x86_fill_fpxregset (struct regcache *regcache, void *buf) +{ + i387_cache_to_fxsave (regcache, buf); +} + +static void +x86_store_fpxregset (struct regcache *regcache, const void *buf) +{ + i387_fxsave_to_cache (regcache, buf); +} + +#endif + +static void +x86_fill_xstateregset (struct regcache *regcache, void *buf) +{ + i387_cache_to_xsave (regcache, buf); +} + +static void +x86_store_xstateregset (struct regcache *regcache, const void *buf) +{ + i387_xsave_to_cache (regcache, buf); +} + +/* ??? The non-biarch i386 case stores all the i387 regs twice. + Once in i387_.*fsave.* and once in i387_.*fxsave.*. + This is, presumably, to handle the case where PTRACE_[GS]ETFPXREGS + doesn't work. IWBN to avoid the duplication in the case where it + does work. Maybe the arch_setup routine could check whether it works + and update the supported regsets accordingly. */ + +static struct regset_info x86_regsets[] = +{ +#ifdef HAVE_PTRACE_GETREGS + { PTRACE_GETREGS, PTRACE_SETREGS, 0, sizeof (elf_gregset_t), + GENERAL_REGS, + x86_fill_gregset, x86_store_gregset }, + { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_X86_XSTATE, 0, + EXTENDED_REGS, x86_fill_xstateregset, x86_store_xstateregset }, +# ifndef __x86_64__ +# ifdef HAVE_PTRACE_GETFPXREGS + { PTRACE_GETFPXREGS, PTRACE_SETFPXREGS, 0, sizeof (elf_fpxregset_t), + EXTENDED_REGS, + x86_fill_fpxregset, x86_store_fpxregset }, +# endif +# endif + { PTRACE_GETFPREGS, PTRACE_SETFPREGS, 0, sizeof (elf_fpregset_t), + FP_REGS, + x86_fill_fpregset, x86_store_fpregset }, +#endif /* HAVE_PTRACE_GETREGS */ + NULL_REGSET +}; + +bool +x86_target::low_supports_breakpoints () +{ + return true; +} + +CORE_ADDR +x86_target::low_get_pc (regcache *regcache) +{ + int use_64bit = register_size (regcache->tdesc, 0) == 8; + + if (use_64bit) + { + uint64_t pc; + + collect_register_by_name (regcache, "rip", &pc); + return (CORE_ADDR) pc; + } + else + { + uint32_t pc; + + collect_register_by_name (regcache, "eip", &pc); + return (CORE_ADDR) pc; + } +} + +void +x86_target::low_set_pc (regcache *regcache, CORE_ADDR pc) +{ + int use_64bit = register_size (regcache->tdesc, 0) == 8; + + if (use_64bit) + { + uint64_t newpc = pc; + + supply_register_by_name (regcache, "rip", &newpc); + } + else + { + uint32_t newpc = pc; + + supply_register_by_name (regcache, "eip", &newpc); + } +} + +int +x86_target::low_decr_pc_after_break () +{ + return 1; +} + + +static const gdb_byte x86_breakpoint[] = { 0xCC }; +#define x86_breakpoint_len 1 + +bool +x86_target::low_breakpoint_at (CORE_ADDR pc) +{ + unsigned char c; + + read_memory (pc, &c, 1); + if (c == 0xCC) + return true; + + return false; +} + +/* Low-level function vector. */ +struct x86_dr_low_type x86_dr_low = + { + x86_linux_dr_set_control, + x86_linux_dr_set_addr, + x86_linux_dr_get_addr, + x86_linux_dr_get_status, + x86_linux_dr_get_control, + sizeof (void *), + }; + +/* Breakpoint/Watchpoint support. */ + +bool +x86_target::supports_z_point_type (char z_type) +{ + switch (z_type) + { + case Z_PACKET_SW_BP: + case Z_PACKET_HW_BP: + case Z_PACKET_WRITE_WP: + case Z_PACKET_ACCESS_WP: + return true; + default: + return false; + } +} + +int +x86_target::low_insert_point (raw_bkpt_type type, CORE_ADDR addr, + int size, raw_breakpoint *bp) +{ + struct process_info *proc = current_process (); + + switch (type) + { + case raw_bkpt_type_hw: + case raw_bkpt_type_write_wp: + case raw_bkpt_type_access_wp: + { + enum target_hw_bp_type hw_type + = raw_bkpt_type_to_target_hw_bp_type (type); + struct x86_debug_reg_state *state + = &proc->priv->arch_private->debug_reg_state; + + return x86_dr_insert_watchpoint (state, hw_type, addr, size); + } + + default: + /* Unsupported. */ + return 1; + } +} + +int +x86_target::low_remove_point (raw_bkpt_type type, CORE_ADDR addr, + int size, raw_breakpoint *bp) +{ + struct process_info *proc = current_process (); + + switch (type) + { + case raw_bkpt_type_hw: + case raw_bkpt_type_write_wp: + case raw_bkpt_type_access_wp: + { + enum target_hw_bp_type hw_type + = raw_bkpt_type_to_target_hw_bp_type (type); + struct x86_debug_reg_state *state + = &proc->priv->arch_private->debug_reg_state; + + return x86_dr_remove_watchpoint (state, hw_type, addr, size); + } + default: + /* Unsupported. */ + return 1; + } +} + +bool +x86_target::low_stopped_by_watchpoint () +{ + struct process_info *proc = current_process (); + return x86_dr_stopped_by_watchpoint (&proc->priv->arch_private->debug_reg_state); +} + +CORE_ADDR +x86_target::low_stopped_data_address () +{ + struct process_info *proc = current_process (); + CORE_ADDR addr; + if (x86_dr_stopped_data_address (&proc->priv->arch_private->debug_reg_state, + &addr)) + return addr; + return 0; +} + +/* Called when a new process is created. */ + +arch_process_info * +x86_target::low_new_process () +{ + struct arch_process_info *info = XCNEW (struct arch_process_info); + + x86_low_init_dregs (&info->debug_reg_state); + + return info; +} + +/* Called when a process is being deleted. */ + +void +x86_target::low_delete_process (arch_process_info *info) +{ + xfree (info); +} + +void +x86_target::low_new_thread (lwp_info *lwp) +{ + /* This comes from nat/. */ + x86_linux_new_thread (lwp); +} + +void +x86_target::low_delete_thread (arch_lwp_info *alwp) +{ + /* This comes from nat/. */ + x86_linux_delete_thread (alwp); +} + +/* Target routine for new_fork. */ + +void +x86_target::low_new_fork (process_info *parent, process_info *child) +{ + /* These are allocated by linux_add_process. */ + gdb_assert (parent->priv != NULL + && parent->priv->arch_private != NULL); + gdb_assert (child->priv != NULL + && child->priv->arch_private != NULL); + + /* Linux kernel before 2.6.33 commit + 72f674d203cd230426437cdcf7dd6f681dad8b0d + will inherit hardware debug registers from parent + on fork/vfork/clone. Newer Linux kernels create such tasks with + zeroed debug registers. + + GDB core assumes the child inherits the watchpoints/hw + breakpoints of the parent, and will remove them all from the + forked off process. Copy the debug registers mirrors into the + new process so that all breakpoints and watchpoints can be + removed together. The debug registers mirror will become zeroed + in the end before detaching the forked off process, thus making + this compatible with older Linux kernels too. */ + + *child->priv->arch_private = *parent->priv->arch_private; +} + +void +x86_target::low_prepare_to_resume (lwp_info *lwp) +{ + /* This comes from nat/. */ + x86_linux_prepare_to_resume (lwp); +} + +/* See nat/x86-dregs.h. */ + +struct x86_debug_reg_state * +x86_debug_reg_state (pid_t pid) +{ + struct process_info *proc = find_process_pid (pid); + + return &proc->priv->arch_private->debug_reg_state; +} + +/* When GDBSERVER is built as a 64-bit application on linux, the + PTRACE_GETSIGINFO data is always presented in 64-bit layout. Since + debugging a 32-bit inferior with a 64-bit GDBSERVER should look the same + as debugging it with a 32-bit GDBSERVER, we do the 32-bit <-> 64-bit + conversion in-place ourselves. */ + +/* Convert a ptrace/host siginfo object, into/from the siginfo in the + layout of the inferiors' architecture. Returns true if any + conversion was done; false otherwise. If DIRECTION is 1, then copy + from INF to PTRACE. If DIRECTION is 0, copy from PTRACE to + INF. */ + +bool +x86_target::low_siginfo_fixup (siginfo_t *ptrace, gdb_byte *inf, int direction) +{ +#ifdef __x86_64__ + unsigned int machine; + int tid = lwpid_of (current_thread); + int is_elf64 = linux_pid_exe_is_elf_64_file (tid, &machine); + + /* Is the inferior 32-bit? If so, then fixup the siginfo object. */ + if (!is_64bit_tdesc ()) + return amd64_linux_siginfo_fixup_common (ptrace, inf, direction, + FIXUP_32); + /* No fixup for native x32 GDB. */ + else if (!is_elf64 && sizeof (void *) == 8) + return amd64_linux_siginfo_fixup_common (ptrace, inf, direction, + FIXUP_X32); +#endif + + return false; +} + +static int use_xml; + +/* Format of XSAVE extended state is: + struct + { + fxsave_bytes[0..463] + sw_usable_bytes[464..511] + xstate_hdr_bytes[512..575] + avx_bytes[576..831] + future_state etc + }; + + Same memory layout will be used for the coredump NT_X86_XSTATE + representing the XSAVE extended state registers. + + The first 8 bytes of the sw_usable_bytes[464..467] is the OS enabled + extended state mask, which is the same as the extended control register + 0 (the XFEATURE_ENABLED_MASK register), XCR0. We can use this mask + together with the mask saved in the xstate_hdr_bytes to determine what + states the processor/OS supports and what state, used or initialized, + the process/thread is in. */ +#define I386_LINUX_XSAVE_XCR0_OFFSET 464 + +/* Does the current host support the GETFPXREGS request? The header + file may or may not define it, and even if it is defined, the + kernel will return EIO if it's running on a pre-SSE processor. */ +int have_ptrace_getfpxregs = +#ifdef HAVE_PTRACE_GETFPXREGS + -1 +#else + 0 +#endif +; + +/* Get Linux/x86 target description from running target. */ + +static const struct target_desc * +x86_linux_read_description (void) +{ + unsigned int machine; + int is_elf64; + int xcr0_features; + int tid; + static uint64_t xcr0; + struct regset_info *regset; + + tid = lwpid_of (current_thread); + + is_elf64 = linux_pid_exe_is_elf_64_file (tid, &machine); + + if (sizeof (void *) == 4) + { + if (is_elf64 > 0) + error (_("Can't debug 64-bit process with 32-bit GDBserver")); +#ifndef __x86_64__ + else if (machine == EM_X86_64) + error (_("Can't debug x86-64 process with 32-bit GDBserver")); +#endif + } + +#if !defined __x86_64__ && defined HAVE_PTRACE_GETFPXREGS + if (machine == EM_386 && have_ptrace_getfpxregs == -1) + { + elf_fpxregset_t fpxregs; + + if (ptrace (PTRACE_GETFPXREGS, tid, 0, (long) &fpxregs) < 0) + { + have_ptrace_getfpxregs = 0; + have_ptrace_getregset = 0; + return i386_linux_read_description (X86_XSTATE_X87); + } + else + have_ptrace_getfpxregs = 1; + } +#endif + + if (!use_xml) + { + x86_xcr0 = X86_XSTATE_SSE_MASK; + + /* Don't use XML. */ +#ifdef __x86_64__ + if (machine == EM_X86_64) + return tdesc_amd64_linux_no_xml; + else +#endif + return tdesc_i386_linux_no_xml; + } + + if (have_ptrace_getregset == -1) + { + uint64_t xstateregs[(X86_XSTATE_SSE_SIZE / sizeof (uint64_t))]; + struct iovec iov; + + iov.iov_base = xstateregs; + iov.iov_len = sizeof (xstateregs); + + /* Check if PTRACE_GETREGSET works. */ + if (ptrace (PTRACE_GETREGSET, tid, + (unsigned int) NT_X86_XSTATE, (long) &iov) < 0) + have_ptrace_getregset = 0; + else + { + have_ptrace_getregset = 1; + + /* Get XCR0 from XSAVE extended state. */ + xcr0 = xstateregs[(I386_LINUX_XSAVE_XCR0_OFFSET + / sizeof (uint64_t))]; + + /* Use PTRACE_GETREGSET if it is available. */ + for (regset = x86_regsets; + regset->fill_function != NULL; regset++) + if (regset->get_request == PTRACE_GETREGSET) + regset->size = X86_XSTATE_SIZE (xcr0); + else if (regset->type != GENERAL_REGS) + regset->size = 0; + } + } + + /* Check the native XCR0 only if PTRACE_GETREGSET is available. */ + xcr0_features = (have_ptrace_getregset + && (xcr0 & X86_XSTATE_ALL_MASK)); + + if (xcr0_features) + x86_xcr0 = xcr0; + + if (machine == EM_X86_64) + { +#ifdef __x86_64__ + const target_desc *tdesc = NULL; + + if (xcr0_features) + { + tdesc = amd64_linux_read_description (xcr0 & X86_XSTATE_ALL_MASK, + !is_elf64); + } + + if (tdesc == NULL) + tdesc = amd64_linux_read_description (X86_XSTATE_SSE_MASK, !is_elf64); + return tdesc; +#endif + } + else + { + const target_desc *tdesc = NULL; + + if (xcr0_features) + tdesc = i386_linux_read_description (xcr0 & X86_XSTATE_ALL_MASK); + + if (tdesc == NULL) + tdesc = i386_linux_read_description (X86_XSTATE_SSE); + + return tdesc; + } + + gdb_assert_not_reached ("failed to return tdesc"); +} + +/* Update all the target description of all processes; a new GDB + connected, and it may or not support xml target descriptions. */ + +void +x86_target::update_xmltarget () +{ + struct thread_info *saved_thread = current_thread; + + /* Before changing the register cache's internal layout, flush the + contents of the current valid caches back to the threads, and + release the current regcache objects. */ + regcache_release (); + + for_each_process ([this] (process_info *proc) { + int pid = proc->pid; + + /* Look up any thread of this process. */ + current_thread = find_any_thread_of_pid (pid); + + low_arch_setup (); + }); + + current_thread = saved_thread; +} + +/* Process qSupported query, "xmlRegisters=". Update the buffer size for + PTRACE_GETREGSET. */ + +void +x86_target::process_qsupported (gdb::array_view<const char * const> features) +{ + /* Return if gdb doesn't support XML. If gdb sends "xmlRegisters=" + with "i386" in qSupported query, it supports x86 XML target + descriptions. */ + use_xml = 0; + + for (const char *feature : features) + { + if (startswith (feature, "xmlRegisters=")) + { + char *copy = xstrdup (feature + 13); + + char *saveptr; + for (char *p = strtok_r (copy, ",", &saveptr); + p != NULL; + p = strtok_r (NULL, ",", &saveptr)) + { + if (strcmp (p, "i386") == 0) + { + use_xml = 1; + break; + } + } + + free (copy); + } + } + + update_xmltarget (); +} + +/* Common for x86/x86-64. */ + +static struct regsets_info x86_regsets_info = + { + x86_regsets, /* regsets */ + 0, /* num_regsets */ + NULL, /* disabled_regsets */ + }; + +#ifdef __x86_64__ +static struct regs_info amd64_linux_regs_info = + { + NULL, /* regset_bitmap */ + NULL, /* usrregs_info */ + &x86_regsets_info + }; +#endif +static struct usrregs_info i386_linux_usrregs_info = + { + I386_NUM_REGS, + i386_regmap, + }; + +static struct regs_info i386_linux_regs_info = + { + NULL, /* regset_bitmap */ + &i386_linux_usrregs_info, + &x86_regsets_info + }; + +const regs_info * +x86_target::get_regs_info () +{ +#ifdef __x86_64__ + if (is_64bit_tdesc ()) + return &amd64_linux_regs_info; + else +#endif + return &i386_linux_regs_info; +} + +/* Initialize the target description for the architecture of the + inferior. */ + +void +x86_target::low_arch_setup () +{ + current_process ()->tdesc = x86_linux_read_description (); +} + +bool +x86_target::low_supports_catch_syscall () +{ + return true; +} + +/* Fill *SYSNO and *SYSRET with the syscall nr trapped and the syscall return + code. This should only be called if LWP got a SYSCALL_SIGTRAP. */ + +void +x86_target::low_get_syscall_trapinfo (regcache *regcache, int *sysno) +{ + int use_64bit = register_size (regcache->tdesc, 0) == 8; + + if (use_64bit) + { + long l_sysno; + + collect_register_by_name (regcache, "orig_rax", &l_sysno); + *sysno = (int) l_sysno; + } + else + collect_register_by_name (regcache, "orig_eax", sysno); +} + +bool +x86_target::supports_tracepoints () +{ + return true; +} + +static void +append_insns (CORE_ADDR *to, size_t len, const unsigned char *buf) +{ + target_write_memory (*to, buf, len); + *to += len; +} + +static int +push_opcode (unsigned char *buf, const char *op) +{ + unsigned char *buf_org = buf; + + while (1) + { + char *endptr; + unsigned long ul = strtoul (op, &endptr, 16); + + if (endptr == op) + break; + + *buf++ = ul; + op = endptr; + } + + return buf - buf_org; +} + +#ifdef __x86_64__ + +/* Build a jump pad that saves registers and calls a collection + function. Writes a jump instruction to the jump pad to + JJUMPAD_INSN. The caller is responsible to write it in at the + tracepoint address. */ + +static int +amd64_install_fast_tracepoint_jump_pad (CORE_ADDR tpoint, CORE_ADDR tpaddr, + CORE_ADDR collector, + CORE_ADDR lockaddr, + ULONGEST orig_size, + CORE_ADDR *jump_entry, + CORE_ADDR *trampoline, + ULONGEST *trampoline_size, + unsigned char *jjump_pad_insn, + ULONGEST *jjump_pad_insn_size, + CORE_ADDR *adjusted_insn_addr, + CORE_ADDR *adjusted_insn_addr_end, + char *err) +{ + unsigned char buf[40]; + int i, offset; + int64_t loffset; + + CORE_ADDR buildaddr = *jump_entry; + + /* Build the jump pad. */ + + /* First, do tracepoint data collection. Save registers. */ + i = 0; + /* Need to ensure stack pointer saved first. */ + buf[i++] = 0x54; /* push %rsp */ + buf[i++] = 0x55; /* push %rbp */ + buf[i++] = 0x57; /* push %rdi */ + buf[i++] = 0x56; /* push %rsi */ + buf[i++] = 0x52; /* push %rdx */ + buf[i++] = 0x51; /* push %rcx */ + buf[i++] = 0x53; /* push %rbx */ + buf[i++] = 0x50; /* push %rax */ + buf[i++] = 0x41; buf[i++] = 0x57; /* push %r15 */ + buf[i++] = 0x41; buf[i++] = 0x56; /* push %r14 */ + buf[i++] = 0x41; buf[i++] = 0x55; /* push %r13 */ + buf[i++] = 0x41; buf[i++] = 0x54; /* push %r12 */ + buf[i++] = 0x41; buf[i++] = 0x53; /* push %r11 */ + buf[i++] = 0x41; buf[i++] = 0x52; /* push %r10 */ + buf[i++] = 0x41; buf[i++] = 0x51; /* push %r9 */ + buf[i++] = 0x41; buf[i++] = 0x50; /* push %r8 */ + buf[i++] = 0x9c; /* pushfq */ + buf[i++] = 0x48; /* movabs <addr>,%rdi */ + buf[i++] = 0xbf; + memcpy (buf + i, &tpaddr, 8); + i += 8; + buf[i++] = 0x57; /* push %rdi */ + append_insns (&buildaddr, i, buf); + + /* Stack space for the collecting_t object. */ + i = 0; + i += push_opcode (&buf[i], "48 83 ec 18"); /* sub $0x18,%rsp */ + i += push_opcode (&buf[i], "48 b8"); /* mov <tpoint>,%rax */ + memcpy (buf + i, &tpoint, 8); + i += 8; + i += push_opcode (&buf[i], "48 89 04 24"); /* mov %rax,(%rsp) */ + i += push_opcode (&buf[i], + "64 48 8b 04 25 00 00 00 00"); /* mov %fs:0x0,%rax */ + i += push_opcode (&buf[i], "48 89 44 24 08"); /* mov %rax,0x8(%rsp) */ + append_insns (&buildaddr, i, buf); + + /* spin-lock. */ + i = 0; + i += push_opcode (&buf[i], "48 be"); /* movl <lockaddr>,%rsi */ + memcpy (&buf[i], (void *) &lockaddr, 8); + i += 8; + i += push_opcode (&buf[i], "48 89 e1"); /* mov %rsp,%rcx */ + i += push_opcode (&buf[i], "31 c0"); /* xor %eax,%eax */ + i += push_opcode (&buf[i], "f0 48 0f b1 0e"); /* lock cmpxchg %rcx,(%rsi) */ + i += push_opcode (&buf[i], "48 85 c0"); /* test %rax,%rax */ + i += push_opcode (&buf[i], "75 f4"); /* jne <again> */ + append_insns (&buildaddr, i, buf); + + /* Set up the gdb_collect call. */ + /* At this point, (stack pointer + 0x18) is the base of our saved + register block. */ + + i = 0; + i += push_opcode (&buf[i], "48 89 e6"); /* mov %rsp,%rsi */ + i += push_opcode (&buf[i], "48 83 c6 18"); /* add $0x18,%rsi */ + + /* tpoint address may be 64-bit wide. */ + i += push_opcode (&buf[i], "48 bf"); /* movl <addr>,%rdi */ + memcpy (buf + i, &tpoint, 8); + i += 8; + append_insns (&buildaddr, i, buf); + + /* The collector function being in the shared library, may be + >31-bits away off the jump pad. */ + i = 0; + i += push_opcode (&buf[i], "48 b8"); /* mov $collector,%rax */ + memcpy (buf + i, &collector, 8); + i += 8; + i += push_opcode (&buf[i], "ff d0"); /* callq *%rax */ + append_insns (&buildaddr, i, buf); + + /* Clear the spin-lock. */ + i = 0; + i += push_opcode (&buf[i], "31 c0"); /* xor %eax,%eax */ + i += push_opcode (&buf[i], "48 a3"); /* mov %rax, lockaddr */ + memcpy (buf + i, &lockaddr, 8); + i += 8; + append_insns (&buildaddr, i, buf); + + /* Remove stack that had been used for the collect_t object. */ + i = 0; + i += push_opcode (&buf[i], "48 83 c4 18"); /* add $0x18,%rsp */ + append_insns (&buildaddr, i, buf); + + /* Restore register state. */ + i = 0; + buf[i++] = 0x48; /* add $0x8,%rsp */ + buf[i++] = 0x83; + buf[i++] = 0xc4; + buf[i++] = 0x08; + buf[i++] = 0x9d; /* popfq */ + buf[i++] = 0x41; buf[i++] = 0x58; /* pop %r8 */ + buf[i++] = 0x41; buf[i++] = 0x59; /* pop %r9 */ + buf[i++] = 0x41; buf[i++] = 0x5a; /* pop %r10 */ + buf[i++] = 0x41; buf[i++] = 0x5b; /* pop %r11 */ + buf[i++] = 0x41; buf[i++] = 0x5c; /* pop %r12 */ + buf[i++] = 0x41; buf[i++] = 0x5d; /* pop %r13 */ + buf[i++] = 0x41; buf[i++] = 0x5e; /* pop %r14 */ + buf[i++] = 0x41; buf[i++] = 0x5f; /* pop %r15 */ + buf[i++] = 0x58; /* pop %rax */ + buf[i++] = 0x5b; /* pop %rbx */ + buf[i++] = 0x59; /* pop %rcx */ + buf[i++] = 0x5a; /* pop %rdx */ + buf[i++] = 0x5e; /* pop %rsi */ + buf[i++] = 0x5f; /* pop %rdi */ + buf[i++] = 0x5d; /* pop %rbp */ + buf[i++] = 0x5c; /* pop %rsp */ + append_insns (&buildaddr, i, buf); + + /* Now, adjust the original instruction to execute in the jump + pad. */ + *adjusted_insn_addr = buildaddr; + relocate_instruction (&buildaddr, tpaddr); + *adjusted_insn_addr_end = buildaddr; + + /* Finally, write a jump back to the program. */ + + loffset = (tpaddr + orig_size) - (buildaddr + sizeof (jump_insn)); + if (loffset > INT_MAX || loffset < INT_MIN) + { + sprintf (err, + "E.Jump back from jump pad too far from tracepoint " + "(offset 0x%" PRIx64 " > int32).", loffset); + return 1; + } + + offset = (int) loffset; + memcpy (buf, jump_insn, sizeof (jump_insn)); + memcpy (buf + 1, &offset, 4); + append_insns (&buildaddr, sizeof (jump_insn), buf); + + /* The jump pad is now built. Wire in a jump to our jump pad. This + is always done last (by our caller actually), so that we can + install fast tracepoints with threads running. This relies on + the agent's atomic write support. */ + loffset = *jump_entry - (tpaddr + sizeof (jump_insn)); + if (loffset > INT_MAX || loffset < INT_MIN) + { + sprintf (err, + "E.Jump pad too far from tracepoint " + "(offset 0x%" PRIx64 " > int32).", loffset); + return 1; + } + + offset = (int) loffset; + + memcpy (buf, jump_insn, sizeof (jump_insn)); + memcpy (buf + 1, &offset, 4); + memcpy (jjump_pad_insn, buf, sizeof (jump_insn)); + *jjump_pad_insn_size = sizeof (jump_insn); + + /* Return the end address of our pad. */ + *jump_entry = buildaddr; + + return 0; +} + +#endif /* __x86_64__ */ + +/* Build a jump pad that saves registers and calls a collection + function. Writes a jump instruction to the jump pad to + JJUMPAD_INSN. The caller is responsible to write it in at the + tracepoint address. */ + +static int +i386_install_fast_tracepoint_jump_pad (CORE_ADDR tpoint, CORE_ADDR tpaddr, + CORE_ADDR collector, + CORE_ADDR lockaddr, + ULONGEST orig_size, + CORE_ADDR *jump_entry, + CORE_ADDR *trampoline, + ULONGEST *trampoline_size, + unsigned char *jjump_pad_insn, + ULONGEST *jjump_pad_insn_size, + CORE_ADDR *adjusted_insn_addr, + CORE_ADDR *adjusted_insn_addr_end, + char *err) +{ + unsigned char buf[0x100]; + int i, offset; + CORE_ADDR buildaddr = *jump_entry; + + /* Build the jump pad. */ + + /* First, do tracepoint data collection. Save registers. */ + i = 0; + buf[i++] = 0x60; /* pushad */ + buf[i++] = 0x68; /* push tpaddr aka $pc */ + *((int *)(buf + i)) = (int) tpaddr; + i += 4; + buf[i++] = 0x9c; /* pushf */ + buf[i++] = 0x1e; /* push %ds */ + buf[i++] = 0x06; /* push %es */ + buf[i++] = 0x0f; /* push %fs */ + buf[i++] = 0xa0; + buf[i++] = 0x0f; /* push %gs */ + buf[i++] = 0xa8; + buf[i++] = 0x16; /* push %ss */ + buf[i++] = 0x0e; /* push %cs */ + append_insns (&buildaddr, i, buf); + + /* Stack space for the collecting_t object. */ + i = 0; + i += push_opcode (&buf[i], "83 ec 08"); /* sub $0x8,%esp */ + + /* Build the object. */ + i += push_opcode (&buf[i], "b8"); /* mov <tpoint>,%eax */ + memcpy (buf + i, &tpoint, 4); + i += 4; + i += push_opcode (&buf[i], "89 04 24"); /* mov %eax,(%esp) */ + + i += push_opcode (&buf[i], "65 a1 00 00 00 00"); /* mov %gs:0x0,%eax */ + i += push_opcode (&buf[i], "89 44 24 04"); /* mov %eax,0x4(%esp) */ + append_insns (&buildaddr, i, buf); + + /* spin-lock. Note this is using cmpxchg, which leaves i386 behind. + If we cared for it, this could be using xchg alternatively. */ + + i = 0; + i += push_opcode (&buf[i], "31 c0"); /* xor %eax,%eax */ + i += push_opcode (&buf[i], "f0 0f b1 25"); /* lock cmpxchg + %esp,<lockaddr> */ + memcpy (&buf[i], (void *) &lockaddr, 4); + i += 4; + i += push_opcode (&buf[i], "85 c0"); /* test %eax,%eax */ + i += push_opcode (&buf[i], "75 f2"); /* jne <again> */ + append_insns (&buildaddr, i, buf); + + + /* Set up arguments to the gdb_collect call. */ + i = 0; + i += push_opcode (&buf[i], "89 e0"); /* mov %esp,%eax */ + i += push_opcode (&buf[i], "83 c0 08"); /* add $0x08,%eax */ + i += push_opcode (&buf[i], "89 44 24 fc"); /* mov %eax,-0x4(%esp) */ + append_insns (&buildaddr, i, buf); + + i = 0; + i += push_opcode (&buf[i], "83 ec 08"); /* sub $0x8,%esp */ + append_insns (&buildaddr, i, buf); + + i = 0; + i += push_opcode (&buf[i], "c7 04 24"); /* movl <addr>,(%esp) */ + memcpy (&buf[i], (void *) &tpoint, 4); + i += 4; + append_insns (&buildaddr, i, buf); + + buf[0] = 0xe8; /* call <reladdr> */ + offset = collector - (buildaddr + sizeof (jump_insn)); + memcpy (buf + 1, &offset, 4); + append_insns (&buildaddr, 5, buf); + /* Clean up after the call. */ + buf[0] = 0x83; /* add $0x8,%esp */ + buf[1] = 0xc4; + buf[2] = 0x08; + append_insns (&buildaddr, 3, buf); + + + /* Clear the spin-lock. This would need the LOCK prefix on older + broken archs. */ + i = 0; + i += push_opcode (&buf[i], "31 c0"); /* xor %eax,%eax */ + i += push_opcode (&buf[i], "a3"); /* mov %eax, lockaddr */ + memcpy (buf + i, &lockaddr, 4); + i += 4; + append_insns (&buildaddr, i, buf); + + + /* Remove stack that had been used for the collect_t object. */ + i = 0; + i += push_opcode (&buf[i], "83 c4 08"); /* add $0x08,%esp */ + append_insns (&buildaddr, i, buf); + + i = 0; + buf[i++] = 0x83; /* add $0x4,%esp (no pop of %cs, assume unchanged) */ + buf[i++] = 0xc4; + buf[i++] = 0x04; + buf[i++] = 0x17; /* pop %ss */ + buf[i++] = 0x0f; /* pop %gs */ + buf[i++] = 0xa9; + buf[i++] = 0x0f; /* pop %fs */ + buf[i++] = 0xa1; + buf[i++] = 0x07; /* pop %es */ + buf[i++] = 0x1f; /* pop %ds */ + buf[i++] = 0x9d; /* popf */ + buf[i++] = 0x83; /* add $0x4,%esp (pop of tpaddr aka $pc) */ + buf[i++] = 0xc4; + buf[i++] = 0x04; + buf[i++] = 0x61; /* popad */ + append_insns (&buildaddr, i, buf); + + /* Now, adjust the original instruction to execute in the jump + pad. */ + *adjusted_insn_addr = buildaddr; + relocate_instruction (&buildaddr, tpaddr); + *adjusted_insn_addr_end = buildaddr; + + /* Write the jump back to the program. */ + offset = (tpaddr + orig_size) - (buildaddr + sizeof (jump_insn)); + memcpy (buf, jump_insn, sizeof (jump_insn)); + memcpy (buf + 1, &offset, 4); + append_insns (&buildaddr, sizeof (jump_insn), buf); + + /* The jump pad is now built. Wire in a jump to our jump pad. This + is always done last (by our caller actually), so that we can + install fast tracepoints with threads running. This relies on + the agent's atomic write support. */ + if (orig_size == 4) + { + /* Create a trampoline. */ + *trampoline_size = sizeof (jump_insn); + if (!claim_trampoline_space (*trampoline_size, trampoline)) + { + /* No trampoline space available. */ + strcpy (err, + "E.Cannot allocate trampoline space needed for fast " + "tracepoints on 4-byte instructions."); + return 1; + } + + offset = *jump_entry - (*trampoline + sizeof (jump_insn)); + memcpy (buf, jump_insn, sizeof (jump_insn)); + memcpy (buf + 1, &offset, 4); + target_write_memory (*trampoline, buf, sizeof (jump_insn)); + + /* Use a 16-bit relative jump instruction to jump to the trampoline. */ + offset = (*trampoline - (tpaddr + sizeof (small_jump_insn))) & 0xffff; + memcpy (buf, small_jump_insn, sizeof (small_jump_insn)); + memcpy (buf + 2, &offset, 2); + memcpy (jjump_pad_insn, buf, sizeof (small_jump_insn)); + *jjump_pad_insn_size = sizeof (small_jump_insn); + } + else + { + /* Else use a 32-bit relative jump instruction. */ + offset = *jump_entry - (tpaddr + sizeof (jump_insn)); + memcpy (buf, jump_insn, sizeof (jump_insn)); + memcpy (buf + 1, &offset, 4); + memcpy (jjump_pad_insn, buf, sizeof (jump_insn)); + *jjump_pad_insn_size = sizeof (jump_insn); + } + + /* Return the end address of our pad. */ + *jump_entry = buildaddr; + + return 0; +} + +bool +x86_target::supports_fast_tracepoints () +{ + return true; +} + +int +x86_target::install_fast_tracepoint_jump_pad (CORE_ADDR tpoint, + CORE_ADDR tpaddr, + CORE_ADDR collector, + CORE_ADDR lockaddr, + ULONGEST orig_size, + CORE_ADDR *jump_entry, + CORE_ADDR *trampoline, + ULONGEST *trampoline_size, + unsigned char *jjump_pad_insn, + ULONGEST *jjump_pad_insn_size, + CORE_ADDR *adjusted_insn_addr, + CORE_ADDR *adjusted_insn_addr_end, + char *err) +{ +#ifdef __x86_64__ + if (is_64bit_tdesc ()) + return amd64_install_fast_tracepoint_jump_pad (tpoint, tpaddr, + collector, lockaddr, + orig_size, jump_entry, + trampoline, trampoline_size, + jjump_pad_insn, + jjump_pad_insn_size, + adjusted_insn_addr, + adjusted_insn_addr_end, + err); +#endif + + return i386_install_fast_tracepoint_jump_pad (tpoint, tpaddr, + collector, lockaddr, + orig_size, jump_entry, + trampoline, trampoline_size, + jjump_pad_insn, + jjump_pad_insn_size, + adjusted_insn_addr, + adjusted_insn_addr_end, + err); +} + +/* Return the minimum instruction length for fast tracepoints on x86/x86-64 + architectures. */ + +int +x86_target::get_min_fast_tracepoint_insn_len () +{ + static int warned_about_fast_tracepoints = 0; + +#ifdef __x86_64__ + /* On x86-64, 5-byte jump instructions with a 4-byte offset are always + used for fast tracepoints. */ + if (is_64bit_tdesc ()) + return 5; +#endif + + if (agent_loaded_p ()) + { + char errbuf[IPA_BUFSIZ]; + + errbuf[0] = '\0'; + + /* On x86, if trampolines are available, then 4-byte jump instructions + with a 2-byte offset may be used, otherwise 5-byte jump instructions + with a 4-byte offset are used instead. */ + if (have_fast_tracepoint_trampoline_buffer (errbuf)) + return 4; + else + { + /* GDB has no channel to explain to user why a shorter fast + tracepoint is not possible, but at least make GDBserver + mention that something has gone awry. */ + if (!warned_about_fast_tracepoints) + { + warning ("4-byte fast tracepoints not available; %s", errbuf); + warned_about_fast_tracepoints = 1; + } + return 5; + } + } + else + { + /* Indicate that the minimum length is currently unknown since the IPA + has not loaded yet. */ + return 0; + } +} + +static void +add_insns (unsigned char *start, int len) +{ + CORE_ADDR buildaddr = current_insn_ptr; + + if (debug_threads) + debug_printf ("Adding %d bytes of insn at %s\n", + len, paddress (buildaddr)); + + append_insns (&buildaddr, len, start); + current_insn_ptr = buildaddr; +} + +/* Our general strategy for emitting code is to avoid specifying raw + bytes whenever possible, and instead copy a block of inline asm + that is embedded in the function. This is a little messy, because + we need to keep the compiler from discarding what looks like dead + code, plus suppress various warnings. */ + +#define EMIT_ASM(NAME, INSNS) \ + do \ + { \ + extern unsigned char start_ ## NAME, end_ ## NAME; \ + add_insns (&start_ ## NAME, &end_ ## NAME - &start_ ## NAME); \ + __asm__ ("jmp end_" #NAME "\n" \ + "\t" "start_" #NAME ":" \ + "\t" INSNS "\n" \ + "\t" "end_" #NAME ":"); \ + } while (0) + +#ifdef __x86_64__ + +#define EMIT_ASM32(NAME,INSNS) \ + do \ + { \ + extern unsigned char start_ ## NAME, end_ ## NAME; \ + add_insns (&start_ ## NAME, &end_ ## NAME - &start_ ## NAME); \ + __asm__ (".code32\n" \ + "\t" "jmp end_" #NAME "\n" \ + "\t" "start_" #NAME ":\n" \ + "\t" INSNS "\n" \ + "\t" "end_" #NAME ":\n" \ + ".code64\n"); \ + } while (0) + +#else + +#define EMIT_ASM32(NAME,INSNS) EMIT_ASM(NAME,INSNS) + +#endif + +#ifdef __x86_64__ + +static void +amd64_emit_prologue (void) +{ + EMIT_ASM (amd64_prologue, + "pushq %rbp\n\t" + "movq %rsp,%rbp\n\t" + "sub $0x20,%rsp\n\t" + "movq %rdi,-8(%rbp)\n\t" + "movq %rsi,-16(%rbp)"); +} + + +static void +amd64_emit_epilogue (void) +{ + EMIT_ASM (amd64_epilogue, + "movq -16(%rbp),%rdi\n\t" + "movq %rax,(%rdi)\n\t" + "xor %rax,%rax\n\t" + "leave\n\t" + "ret"); +} + +static void +amd64_emit_add (void) +{ + EMIT_ASM (amd64_add, + "add (%rsp),%rax\n\t" + "lea 0x8(%rsp),%rsp"); +} + +static void +amd64_emit_sub (void) +{ + EMIT_ASM (amd64_sub, + "sub %rax,(%rsp)\n\t" + "pop %rax"); +} + +static void +amd64_emit_mul (void) +{ + emit_error = 1; +} + +static void +amd64_emit_lsh (void) +{ + emit_error = 1; +} + +static void +amd64_emit_rsh_signed (void) +{ + emit_error = 1; +} + +static void +amd64_emit_rsh_unsigned (void) +{ + emit_error = 1; +} + +static void +amd64_emit_ext (int arg) +{ + switch (arg) + { + case 8: + EMIT_ASM (amd64_ext_8, + "cbtw\n\t" + "cwtl\n\t" + "cltq"); + break; + case 16: + EMIT_ASM (amd64_ext_16, + "cwtl\n\t" + "cltq"); + break; + case 32: + EMIT_ASM (amd64_ext_32, + "cltq"); + break; + default: + emit_error = 1; + } +} + +static void +amd64_emit_log_not (void) +{ + EMIT_ASM (amd64_log_not, + "test %rax,%rax\n\t" + "sete %cl\n\t" + "movzbq %cl,%rax"); +} + +static void +amd64_emit_bit_and (void) +{ + EMIT_ASM (amd64_and, + "and (%rsp),%rax\n\t" + "lea 0x8(%rsp),%rsp"); +} + +static void +amd64_emit_bit_or (void) +{ + EMIT_ASM (amd64_or, + "or (%rsp),%rax\n\t" + "lea 0x8(%rsp),%rsp"); +} + +static void +amd64_emit_bit_xor (void) +{ + EMIT_ASM (amd64_xor, + "xor (%rsp),%rax\n\t" + "lea 0x8(%rsp),%rsp"); +} + +static void +amd64_emit_bit_not (void) +{ + EMIT_ASM (amd64_bit_not, + "xorq $0xffffffffffffffff,%rax"); +} + +static void +amd64_emit_equal (void) +{ + EMIT_ASM (amd64_equal, + "cmp %rax,(%rsp)\n\t" + "je .Lamd64_equal_true\n\t" + "xor %rax,%rax\n\t" + "jmp .Lamd64_equal_end\n\t" + ".Lamd64_equal_true:\n\t" + "mov $0x1,%rax\n\t" + ".Lamd64_equal_end:\n\t" + "lea 0x8(%rsp),%rsp"); +} + +static void +amd64_emit_less_signed (void) +{ + EMIT_ASM (amd64_less_signed, + "cmp %rax,(%rsp)\n\t" + "jl .Lamd64_less_signed_true\n\t" + "xor %rax,%rax\n\t" + "jmp .Lamd64_less_signed_end\n\t" + ".Lamd64_less_signed_true:\n\t" + "mov $1,%rax\n\t" + ".Lamd64_less_signed_end:\n\t" + "lea 0x8(%rsp),%rsp"); +} + +static void +amd64_emit_less_unsigned (void) +{ + EMIT_ASM (amd64_less_unsigned, + "cmp %rax,(%rsp)\n\t" + "jb .Lamd64_less_unsigned_true\n\t" + "xor %rax,%rax\n\t" + "jmp .Lamd64_less_unsigned_end\n\t" + ".Lamd64_less_unsigned_true:\n\t" + "mov $1,%rax\n\t" + ".Lamd64_less_unsigned_end:\n\t" + "lea 0x8(%rsp),%rsp"); +} + +static void +amd64_emit_ref (int size) +{ + switch (size) + { + case 1: + EMIT_ASM (amd64_ref1, + "movb (%rax),%al"); + break; + case 2: + EMIT_ASM (amd64_ref2, + "movw (%rax),%ax"); + break; + case 4: + EMIT_ASM (amd64_ref4, + "movl (%rax),%eax"); + break; + case 8: + EMIT_ASM (amd64_ref8, + "movq (%rax),%rax"); + break; + } +} + +static void +amd64_emit_if_goto (int *offset_p, int *size_p) +{ + EMIT_ASM (amd64_if_goto, + "mov %rax,%rcx\n\t" + "pop %rax\n\t" + "cmp $0,%rcx\n\t" + ".byte 0x0f, 0x85, 0x0, 0x0, 0x0, 0x0"); + if (offset_p) + *offset_p = 10; + if (size_p) + *size_p = 4; +} + +static void +amd64_emit_goto (int *offset_p, int *size_p) +{ + EMIT_ASM (amd64_goto, + ".byte 0xe9, 0x0, 0x0, 0x0, 0x0"); + if (offset_p) + *offset_p = 1; + if (size_p) + *size_p = 4; +} + +static void +amd64_write_goto_address (CORE_ADDR from, CORE_ADDR to, int size) +{ + int diff = (to - (from + size)); + unsigned char buf[sizeof (int)]; + + if (size != 4) + { + emit_error = 1; + return; + } + + memcpy (buf, &diff, sizeof (int)); + target_write_memory (from, buf, sizeof (int)); +} + +static void +amd64_emit_const (LONGEST num) +{ + unsigned char buf[16]; + int i; + CORE_ADDR buildaddr = current_insn_ptr; + + i = 0; + buf[i++] = 0x48; buf[i++] = 0xb8; /* mov $<n>,%rax */ + memcpy (&buf[i], &num, sizeof (num)); + i += 8; + append_insns (&buildaddr, i, buf); + current_insn_ptr = buildaddr; +} + +static void +amd64_emit_call (CORE_ADDR fn) +{ + unsigned char buf[16]; + int i; + CORE_ADDR buildaddr; + LONGEST offset64; + + /* The destination function being in the shared library, may be + >31-bits away off the compiled code pad. */ + + buildaddr = current_insn_ptr; + + offset64 = fn - (buildaddr + 1 /* call op */ + 4 /* 32-bit offset */); + + i = 0; + + if (offset64 > INT_MAX || offset64 < INT_MIN) + { + /* Offset is too large for a call. Use callq, but that requires + a register, so avoid it if possible. Use r10, since it is + call-clobbered, we don't have to push/pop it. */ + buf[i++] = 0x48; /* mov $fn,%r10 */ + buf[i++] = 0xba; + memcpy (buf + i, &fn, 8); + i += 8; + buf[i++] = 0xff; /* callq *%r10 */ + buf[i++] = 0xd2; + } + else + { + int offset32 = offset64; /* we know we can't overflow here. */ + + buf[i++] = 0xe8; /* call <reladdr> */ + memcpy (buf + i, &offset32, 4); + i += 4; + } + + append_insns (&buildaddr, i, buf); + current_insn_ptr = buildaddr; +} + +static void +amd64_emit_reg (int reg) +{ + unsigned char buf[16]; + int i; + CORE_ADDR buildaddr; + + /* Assume raw_regs is still in %rdi. */ + buildaddr = current_insn_ptr; + i = 0; + buf[i++] = 0xbe; /* mov $<n>,%esi */ + memcpy (&buf[i], ®, sizeof (reg)); + i += 4; + append_insns (&buildaddr, i, buf); + current_insn_ptr = buildaddr; + amd64_emit_call (get_raw_reg_func_addr ()); +} + +static void +amd64_emit_pop (void) +{ + EMIT_ASM (amd64_pop, + "pop %rax"); +} + +static void +amd64_emit_stack_flush (void) +{ + EMIT_ASM (amd64_stack_flush, + "push %rax"); +} + +static void +amd64_emit_zero_ext (int arg) +{ + switch (arg) + { + case 8: + EMIT_ASM (amd64_zero_ext_8, + "and $0xff,%rax"); + break; + case 16: + EMIT_ASM (amd64_zero_ext_16, + "and $0xffff,%rax"); + break; + case 32: + EMIT_ASM (amd64_zero_ext_32, + "mov $0xffffffff,%rcx\n\t" + "and %rcx,%rax"); + break; + default: + emit_error = 1; + } +} + +static void +amd64_emit_swap (void) +{ + EMIT_ASM (amd64_swap, + "mov %rax,%rcx\n\t" + "pop %rax\n\t" + "push %rcx"); +} + +static void +amd64_emit_stack_adjust (int n) +{ + unsigned char buf[16]; + int i; + CORE_ADDR buildaddr = current_insn_ptr; + + i = 0; + buf[i++] = 0x48; /* lea $<n>(%rsp),%rsp */ + buf[i++] = 0x8d; + buf[i++] = 0x64; + buf[i++] = 0x24; + /* This only handles adjustments up to 16, but we don't expect any more. */ + buf[i++] = n * 8; + append_insns (&buildaddr, i, buf); + current_insn_ptr = buildaddr; +} + +/* FN's prototype is `LONGEST(*fn)(int)'. */ + +static void +amd64_emit_int_call_1 (CORE_ADDR fn, int arg1) +{ + unsigned char buf[16]; + int i; + CORE_ADDR buildaddr; + + buildaddr = current_insn_ptr; + i = 0; + buf[i++] = 0xbf; /* movl $<n>,%edi */ + memcpy (&buf[i], &arg1, sizeof (arg1)); + i += 4; + append_insns (&buildaddr, i, buf); + current_insn_ptr = buildaddr; + amd64_emit_call (fn); +} + +/* FN's prototype is `void(*fn)(int,LONGEST)'. */ + +static void +amd64_emit_void_call_2 (CORE_ADDR fn, int arg1) +{ + unsigned char buf[16]; + int i; + CORE_ADDR buildaddr; + + buildaddr = current_insn_ptr; + i = 0; + buf[i++] = 0xbf; /* movl $<n>,%edi */ + memcpy (&buf[i], &arg1, sizeof (arg1)); + i += 4; + append_insns (&buildaddr, i, buf); + current_insn_ptr = buildaddr; + EMIT_ASM (amd64_void_call_2_a, + /* Save away a copy of the stack top. */ + "push %rax\n\t" + /* Also pass top as the second argument. */ + "mov %rax,%rsi"); + amd64_emit_call (fn); + EMIT_ASM (amd64_void_call_2_b, + /* Restore the stack top, %rax may have been trashed. */ + "pop %rax"); +} + +static void +amd64_emit_eq_goto (int *offset_p, int *size_p) +{ + EMIT_ASM (amd64_eq, + "cmp %rax,(%rsp)\n\t" + "jne .Lamd64_eq_fallthru\n\t" + "lea 0x8(%rsp),%rsp\n\t" + "pop %rax\n\t" + /* jmp, but don't trust the assembler to choose the right jump */ + ".byte 0xe9, 0x0, 0x0, 0x0, 0x0\n\t" + ".Lamd64_eq_fallthru:\n\t" + "lea 0x8(%rsp),%rsp\n\t" + "pop %rax"); + + if (offset_p) + *offset_p = 13; + if (size_p) + *size_p = 4; +} + +static void +amd64_emit_ne_goto (int *offset_p, int *size_p) +{ + EMIT_ASM (amd64_ne, + "cmp %rax,(%rsp)\n\t" + "je .Lamd64_ne_fallthru\n\t" + "lea 0x8(%rsp),%rsp\n\t" + "pop %rax\n\t" + /* jmp, but don't trust the assembler to choose the right jump */ + ".byte 0xe9, 0x0, 0x0, 0x0, 0x0\n\t" + ".Lamd64_ne_fallthru:\n\t" + "lea 0x8(%rsp),%rsp\n\t" + "pop %rax"); + + if (offset_p) + *offset_p = 13; + if (size_p) + *size_p = 4; +} + +static void +amd64_emit_lt_goto (int *offset_p, int *size_p) +{ + EMIT_ASM (amd64_lt, + "cmp %rax,(%rsp)\n\t" + "jnl .Lamd64_lt_fallthru\n\t" + "lea 0x8(%rsp),%rsp\n\t" + "pop %rax\n\t" + /* jmp, but don't trust the assembler to choose the right jump */ + ".byte 0xe9, 0x0, 0x0, 0x0, 0x0\n\t" + ".Lamd64_lt_fallthru:\n\t" + "lea 0x8(%rsp),%rsp\n\t" + "pop %rax"); + + if (offset_p) + *offset_p = 13; + if (size_p) + *size_p = 4; +} + +static void +amd64_emit_le_goto (int *offset_p, int *size_p) +{ + EMIT_ASM (amd64_le, + "cmp %rax,(%rsp)\n\t" + "jnle .Lamd64_le_fallthru\n\t" + "lea 0x8(%rsp),%rsp\n\t" + "pop %rax\n\t" + /* jmp, but don't trust the assembler to choose the right jump */ + ".byte 0xe9, 0x0, 0x0, 0x0, 0x0\n\t" + ".Lamd64_le_fallthru:\n\t" + "lea 0x8(%rsp),%rsp\n\t" + "pop %rax"); + + if (offset_p) + *offset_p = 13; + if (size_p) + *size_p = 4; +} + +static void +amd64_emit_gt_goto (int *offset_p, int *size_p) +{ + EMIT_ASM (amd64_gt, + "cmp %rax,(%rsp)\n\t" + "jng .Lamd64_gt_fallthru\n\t" + "lea 0x8(%rsp),%rsp\n\t" + "pop %rax\n\t" + /* jmp, but don't trust the assembler to choose the right jump */ + ".byte 0xe9, 0x0, 0x0, 0x0, 0x0\n\t" + ".Lamd64_gt_fallthru:\n\t" + "lea 0x8(%rsp),%rsp\n\t" + "pop %rax"); + + if (offset_p) + *offset_p = 13; + if (size_p) + *size_p = 4; +} + +static void +amd64_emit_ge_goto (int *offset_p, int *size_p) +{ + EMIT_ASM (amd64_ge, + "cmp %rax,(%rsp)\n\t" + "jnge .Lamd64_ge_fallthru\n\t" + ".Lamd64_ge_jump:\n\t" + "lea 0x8(%rsp),%rsp\n\t" + "pop %rax\n\t" + /* jmp, but don't trust the assembler to choose the right jump */ + ".byte 0xe9, 0x0, 0x0, 0x0, 0x0\n\t" + ".Lamd64_ge_fallthru:\n\t" + "lea 0x8(%rsp),%rsp\n\t" + "pop %rax"); + + if (offset_p) + *offset_p = 13; + if (size_p) + *size_p = 4; +} + +struct emit_ops amd64_emit_ops = + { + amd64_emit_prologue, + amd64_emit_epilogue, + amd64_emit_add, + amd64_emit_sub, + amd64_emit_mul, + amd64_emit_lsh, + amd64_emit_rsh_signed, + amd64_emit_rsh_unsigned, + amd64_emit_ext, + amd64_emit_log_not, + amd64_emit_bit_and, + amd64_emit_bit_or, + amd64_emit_bit_xor, + amd64_emit_bit_not, + amd64_emit_equal, + amd64_emit_less_signed, + amd64_emit_less_unsigned, + amd64_emit_ref, + amd64_emit_if_goto, + amd64_emit_goto, + amd64_write_goto_address, + amd64_emit_const, + amd64_emit_call, + amd64_emit_reg, + amd64_emit_pop, + amd64_emit_stack_flush, + amd64_emit_zero_ext, + amd64_emit_swap, + amd64_emit_stack_adjust, + amd64_emit_int_call_1, + amd64_emit_void_call_2, + amd64_emit_eq_goto, + amd64_emit_ne_goto, + amd64_emit_lt_goto, + amd64_emit_le_goto, + amd64_emit_gt_goto, + amd64_emit_ge_goto + }; + +#endif /* __x86_64__ */ + +static void +i386_emit_prologue (void) +{ + EMIT_ASM32 (i386_prologue, + "push %ebp\n\t" + "mov %esp,%ebp\n\t" + "push %ebx"); + /* At this point, the raw regs base address is at 8(%ebp), and the + value pointer is at 12(%ebp). */ +} + +static void +i386_emit_epilogue (void) +{ + EMIT_ASM32 (i386_epilogue, + "mov 12(%ebp),%ecx\n\t" + "mov %eax,(%ecx)\n\t" + "mov %ebx,0x4(%ecx)\n\t" + "xor %eax,%eax\n\t" + "pop %ebx\n\t" + "pop %ebp\n\t" + "ret"); +} + +static void +i386_emit_add (void) +{ + EMIT_ASM32 (i386_add, + "add (%esp),%eax\n\t" + "adc 0x4(%esp),%ebx\n\t" + "lea 0x8(%esp),%esp"); +} + +static void +i386_emit_sub (void) +{ + EMIT_ASM32 (i386_sub, + "subl %eax,(%esp)\n\t" + "sbbl %ebx,4(%esp)\n\t" + "pop %eax\n\t" + "pop %ebx\n\t"); +} + +static void +i386_emit_mul (void) +{ + emit_error = 1; +} + +static void +i386_emit_lsh (void) +{ + emit_error = 1; +} + +static void +i386_emit_rsh_signed (void) +{ + emit_error = 1; +} + +static void +i386_emit_rsh_unsigned (void) +{ + emit_error = 1; +} + +static void +i386_emit_ext (int arg) +{ + switch (arg) + { + case 8: + EMIT_ASM32 (i386_ext_8, + "cbtw\n\t" + "cwtl\n\t" + "movl %eax,%ebx\n\t" + "sarl $31,%ebx"); + break; + case 16: + EMIT_ASM32 (i386_ext_16, + "cwtl\n\t" + "movl %eax,%ebx\n\t" + "sarl $31,%ebx"); + break; + case 32: + EMIT_ASM32 (i386_ext_32, + "movl %eax,%ebx\n\t" + "sarl $31,%ebx"); + break; + default: + emit_error = 1; + } +} + +static void +i386_emit_log_not (void) +{ + EMIT_ASM32 (i386_log_not, + "or %ebx,%eax\n\t" + "test %eax,%eax\n\t" + "sete %cl\n\t" + "xor %ebx,%ebx\n\t" + "movzbl %cl,%eax"); +} + +static void +i386_emit_bit_and (void) +{ + EMIT_ASM32 (i386_and, + "and (%esp),%eax\n\t" + "and 0x4(%esp),%ebx\n\t" + "lea 0x8(%esp),%esp"); +} + +static void +i386_emit_bit_or (void) +{ + EMIT_ASM32 (i386_or, + "or (%esp),%eax\n\t" + "or 0x4(%esp),%ebx\n\t" + "lea 0x8(%esp),%esp"); +} + +static void +i386_emit_bit_xor (void) +{ + EMIT_ASM32 (i386_xor, + "xor (%esp),%eax\n\t" + "xor 0x4(%esp),%ebx\n\t" + "lea 0x8(%esp),%esp"); +} + +static void +i386_emit_bit_not (void) +{ + EMIT_ASM32 (i386_bit_not, + "xor $0xffffffff,%eax\n\t" + "xor $0xffffffff,%ebx\n\t"); +} + +static void +i386_emit_equal (void) +{ + EMIT_ASM32 (i386_equal, + "cmpl %ebx,4(%esp)\n\t" + "jne .Li386_equal_false\n\t" + "cmpl %eax,(%esp)\n\t" + "je .Li386_equal_true\n\t" + ".Li386_equal_false:\n\t" + "xor %eax,%eax\n\t" + "jmp .Li386_equal_end\n\t" + ".Li386_equal_true:\n\t" + "mov $1,%eax\n\t" + ".Li386_equal_end:\n\t" + "xor %ebx,%ebx\n\t" + "lea 0x8(%esp),%esp"); +} + +static void +i386_emit_less_signed (void) +{ + EMIT_ASM32 (i386_less_signed, + "cmpl %ebx,4(%esp)\n\t" + "jl .Li386_less_signed_true\n\t" + "jne .Li386_less_signed_false\n\t" + "cmpl %eax,(%esp)\n\t" + "jl .Li386_less_signed_true\n\t" + ".Li386_less_signed_false:\n\t" + "xor %eax,%eax\n\t" + "jmp .Li386_less_signed_end\n\t" + ".Li386_less_signed_true:\n\t" + "mov $1,%eax\n\t" + ".Li386_less_signed_end:\n\t" + "xor %ebx,%ebx\n\t" + "lea 0x8(%esp),%esp"); +} + +static void +i386_emit_less_unsigned (void) +{ + EMIT_ASM32 (i386_less_unsigned, + "cmpl %ebx,4(%esp)\n\t" + "jb .Li386_less_unsigned_true\n\t" + "jne .Li386_less_unsigned_false\n\t" + "cmpl %eax,(%esp)\n\t" + "jb .Li386_less_unsigned_true\n\t" + ".Li386_less_unsigned_false:\n\t" + "xor %eax,%eax\n\t" + "jmp .Li386_less_unsigned_end\n\t" + ".Li386_less_unsigned_true:\n\t" + "mov $1,%eax\n\t" + ".Li386_less_unsigned_end:\n\t" + "xor %ebx,%ebx\n\t" + "lea 0x8(%esp),%esp"); +} + +static void +i386_emit_ref (int size) +{ + switch (size) + { + case 1: + EMIT_ASM32 (i386_ref1, + "movb (%eax),%al"); + break; + case 2: + EMIT_ASM32 (i386_ref2, + "movw (%eax),%ax"); + break; + case 4: + EMIT_ASM32 (i386_ref4, + "movl (%eax),%eax"); + break; + case 8: + EMIT_ASM32 (i386_ref8, + "movl 4(%eax),%ebx\n\t" + "movl (%eax),%eax"); + break; + } +} + +static void +i386_emit_if_goto (int *offset_p, int *size_p) +{ + EMIT_ASM32 (i386_if_goto, + "mov %eax,%ecx\n\t" + "or %ebx,%ecx\n\t" + "pop %eax\n\t" + "pop %ebx\n\t" + "cmpl $0,%ecx\n\t" + /* Don't trust the assembler to choose the right jump */ + ".byte 0x0f, 0x85, 0x0, 0x0, 0x0, 0x0"); + + if (offset_p) + *offset_p = 11; /* be sure that this matches the sequence above */ + if (size_p) + *size_p = 4; +} + +static void +i386_emit_goto (int *offset_p, int *size_p) +{ + EMIT_ASM32 (i386_goto, + /* Don't trust the assembler to choose the right jump */ + ".byte 0xe9, 0x0, 0x0, 0x0, 0x0"); + if (offset_p) + *offset_p = 1; + if (size_p) + *size_p = 4; +} + +static void +i386_write_goto_address (CORE_ADDR from, CORE_ADDR to, int size) +{ + int diff = (to - (from + size)); + unsigned char buf[sizeof (int)]; + + /* We're only doing 4-byte sizes at the moment. */ + if (size != 4) + { + emit_error = 1; + return; + } + + memcpy (buf, &diff, sizeof (int)); + target_write_memory (from, buf, sizeof (int)); +} + +static void +i386_emit_const (LONGEST num) +{ + unsigned char buf[16]; + int i, hi, lo; + CORE_ADDR buildaddr = current_insn_ptr; + + i = 0; + buf[i++] = 0xb8; /* mov $<n>,%eax */ + lo = num & 0xffffffff; + memcpy (&buf[i], &lo, sizeof (lo)); + i += 4; + hi = ((num >> 32) & 0xffffffff); + if (hi) + { + buf[i++] = 0xbb; /* mov $<n>,%ebx */ + memcpy (&buf[i], &hi, sizeof (hi)); + i += 4; + } + else + { + buf[i++] = 0x31; buf[i++] = 0xdb; /* xor %ebx,%ebx */ + } + append_insns (&buildaddr, i, buf); + current_insn_ptr = buildaddr; +} + +static void +i386_emit_call (CORE_ADDR fn) +{ + unsigned char buf[16]; + int i, offset; + CORE_ADDR buildaddr; + + buildaddr = current_insn_ptr; + i = 0; + buf[i++] = 0xe8; /* call <reladdr> */ + offset = ((int) fn) - (buildaddr + 5); + memcpy (buf + 1, &offset, 4); + append_insns (&buildaddr, 5, buf); + current_insn_ptr = buildaddr; +} + +static void +i386_emit_reg (int reg) +{ + unsigned char buf[16]; + int i; + CORE_ADDR buildaddr; + + EMIT_ASM32 (i386_reg_a, + "sub $0x8,%esp"); + buildaddr = current_insn_ptr; + i = 0; + buf[i++] = 0xb8; /* mov $<n>,%eax */ + memcpy (&buf[i], ®, sizeof (reg)); + i += 4; + append_insns (&buildaddr, i, buf); + current_insn_ptr = buildaddr; + EMIT_ASM32 (i386_reg_b, + "mov %eax,4(%esp)\n\t" + "mov 8(%ebp),%eax\n\t" + "mov %eax,(%esp)"); + i386_emit_call (get_raw_reg_func_addr ()); + EMIT_ASM32 (i386_reg_c, + "xor %ebx,%ebx\n\t" + "lea 0x8(%esp),%esp"); +} + +static void +i386_emit_pop (void) +{ + EMIT_ASM32 (i386_pop, + "pop %eax\n\t" + "pop %ebx"); +} + +static void +i386_emit_stack_flush (void) +{ + EMIT_ASM32 (i386_stack_flush, + "push %ebx\n\t" + "push %eax"); +} + +static void +i386_emit_zero_ext (int arg) +{ + switch (arg) + { + case 8: + EMIT_ASM32 (i386_zero_ext_8, + "and $0xff,%eax\n\t" + "xor %ebx,%ebx"); + break; + case 16: + EMIT_ASM32 (i386_zero_ext_16, + "and $0xffff,%eax\n\t" + "xor %ebx,%ebx"); + break; + case 32: + EMIT_ASM32 (i386_zero_ext_32, + "xor %ebx,%ebx"); + break; + default: + emit_error = 1; + } +} + +static void +i386_emit_swap (void) +{ + EMIT_ASM32 (i386_swap, + "mov %eax,%ecx\n\t" + "mov %ebx,%edx\n\t" + "pop %eax\n\t" + "pop %ebx\n\t" + "push %edx\n\t" + "push %ecx"); +} + +static void +i386_emit_stack_adjust (int n) +{ + unsigned char buf[16]; + int i; + CORE_ADDR buildaddr = current_insn_ptr; + + i = 0; + buf[i++] = 0x8d; /* lea $<n>(%esp),%esp */ + buf[i++] = 0x64; + buf[i++] = 0x24; + buf[i++] = n * 8; + append_insns (&buildaddr, i, buf); + current_insn_ptr = buildaddr; +} + +/* FN's prototype is `LONGEST(*fn)(int)'. */ + +static void +i386_emit_int_call_1 (CORE_ADDR fn, int arg1) +{ + unsigned char buf[16]; + int i; + CORE_ADDR buildaddr; + + EMIT_ASM32 (i386_int_call_1_a, + /* Reserve a bit of stack space. */ + "sub $0x8,%esp"); + /* Put the one argument on the stack. */ + buildaddr = current_insn_ptr; + i = 0; + buf[i++] = 0xc7; /* movl $<arg1>,(%esp) */ + buf[i++] = 0x04; + buf[i++] = 0x24; + memcpy (&buf[i], &arg1, sizeof (arg1)); + i += 4; + append_insns (&buildaddr, i, buf); + current_insn_ptr = buildaddr; + i386_emit_call (fn); + EMIT_ASM32 (i386_int_call_1_c, + "mov %edx,%ebx\n\t" + "lea 0x8(%esp),%esp"); +} + +/* FN's prototype is `void(*fn)(int,LONGEST)'. */ + +static void +i386_emit_void_call_2 (CORE_ADDR fn, int arg1) +{ + unsigned char buf[16]; + int i; + CORE_ADDR buildaddr; + + EMIT_ASM32 (i386_void_call_2_a, + /* Preserve %eax only; we don't have to worry about %ebx. */ + "push %eax\n\t" + /* Reserve a bit of stack space for arguments. */ + "sub $0x10,%esp\n\t" + /* Copy "top" to the second argument position. (Note that + we can't assume function won't scribble on its + arguments, so don't try to restore from this.) */ + "mov %eax,4(%esp)\n\t" + "mov %ebx,8(%esp)"); + /* Put the first argument on the stack. */ + buildaddr = current_insn_ptr; + i = 0; + buf[i++] = 0xc7; /* movl $<arg1>,(%esp) */ + buf[i++] = 0x04; + buf[i++] = 0x24; + memcpy (&buf[i], &arg1, sizeof (arg1)); + i += 4; + append_insns (&buildaddr, i, buf); + current_insn_ptr = buildaddr; + i386_emit_call (fn); + EMIT_ASM32 (i386_void_call_2_b, + "lea 0x10(%esp),%esp\n\t" + /* Restore original stack top. */ + "pop %eax"); +} + + +static void +i386_emit_eq_goto (int *offset_p, int *size_p) +{ + EMIT_ASM32 (eq, + /* Check low half first, more likely to be decider */ + "cmpl %eax,(%esp)\n\t" + "jne .Leq_fallthru\n\t" + "cmpl %ebx,4(%esp)\n\t" + "jne .Leq_fallthru\n\t" + "lea 0x8(%esp),%esp\n\t" + "pop %eax\n\t" + "pop %ebx\n\t" + /* jmp, but don't trust the assembler to choose the right jump */ + ".byte 0xe9, 0x0, 0x0, 0x0, 0x0\n\t" + ".Leq_fallthru:\n\t" + "lea 0x8(%esp),%esp\n\t" + "pop %eax\n\t" + "pop %ebx"); + + if (offset_p) + *offset_p = 18; + if (size_p) + *size_p = 4; +} + +static void +i386_emit_ne_goto (int *offset_p, int *size_p) +{ + EMIT_ASM32 (ne, + /* Check low half first, more likely to be decider */ + "cmpl %eax,(%esp)\n\t" + "jne .Lne_jump\n\t" + "cmpl %ebx,4(%esp)\n\t" + "je .Lne_fallthru\n\t" + ".Lne_jump:\n\t" + "lea 0x8(%esp),%esp\n\t" + "pop %eax\n\t" + "pop %ebx\n\t" + /* jmp, but don't trust the assembler to choose the right jump */ + ".byte 0xe9, 0x0, 0x0, 0x0, 0x0\n\t" + ".Lne_fallthru:\n\t" + "lea 0x8(%esp),%esp\n\t" + "pop %eax\n\t" + "pop %ebx"); + + if (offset_p) + *offset_p = 18; + if (size_p) + *size_p = 4; +} + +static void +i386_emit_lt_goto (int *offset_p, int *size_p) +{ + EMIT_ASM32 (lt, + "cmpl %ebx,4(%esp)\n\t" + "jl .Llt_jump\n\t" + "jne .Llt_fallthru\n\t" + "cmpl %eax,(%esp)\n\t" + "jnl .Llt_fallthru\n\t" + ".Llt_jump:\n\t" + "lea 0x8(%esp),%esp\n\t" + "pop %eax\n\t" + "pop %ebx\n\t" + /* jmp, but don't trust the assembler to choose the right jump */ + ".byte 0xe9, 0x0, 0x0, 0x0, 0x0\n\t" + ".Llt_fallthru:\n\t" + "lea 0x8(%esp),%esp\n\t" + "pop %eax\n\t" + "pop %ebx"); + + if (offset_p) + *offset_p = 20; + if (size_p) + *size_p = 4; +} + +static void +i386_emit_le_goto (int *offset_p, int *size_p) +{ + EMIT_ASM32 (le, + "cmpl %ebx,4(%esp)\n\t" + "jle .Lle_jump\n\t" + "jne .Lle_fallthru\n\t" + "cmpl %eax,(%esp)\n\t" + "jnle .Lle_fallthru\n\t" + ".Lle_jump:\n\t" + "lea 0x8(%esp),%esp\n\t" + "pop %eax\n\t" + "pop %ebx\n\t" + /* jmp, but don't trust the assembler to choose the right jump */ + ".byte 0xe9, 0x0, 0x0, 0x0, 0x0\n\t" + ".Lle_fallthru:\n\t" + "lea 0x8(%esp),%esp\n\t" + "pop %eax\n\t" + "pop %ebx"); + + if (offset_p) + *offset_p = 20; + if (size_p) + *size_p = 4; +} + +static void +i386_emit_gt_goto (int *offset_p, int *size_p) +{ + EMIT_ASM32 (gt, + "cmpl %ebx,4(%esp)\n\t" + "jg .Lgt_jump\n\t" + "jne .Lgt_fallthru\n\t" + "cmpl %eax,(%esp)\n\t" + "jng .Lgt_fallthru\n\t" + ".Lgt_jump:\n\t" + "lea 0x8(%esp),%esp\n\t" + "pop %eax\n\t" + "pop %ebx\n\t" + /* jmp, but don't trust the assembler to choose the right jump */ + ".byte 0xe9, 0x0, 0x0, 0x0, 0x0\n\t" + ".Lgt_fallthru:\n\t" + "lea 0x8(%esp),%esp\n\t" + "pop %eax\n\t" + "pop %ebx"); + + if (offset_p) + *offset_p = 20; + if (size_p) + *size_p = 4; +} + +static void +i386_emit_ge_goto (int *offset_p, int *size_p) +{ + EMIT_ASM32 (ge, + "cmpl %ebx,4(%esp)\n\t" + "jge .Lge_jump\n\t" + "jne .Lge_fallthru\n\t" + "cmpl %eax,(%esp)\n\t" + "jnge .Lge_fallthru\n\t" + ".Lge_jump:\n\t" + "lea 0x8(%esp),%esp\n\t" + "pop %eax\n\t" + "pop %ebx\n\t" + /* jmp, but don't trust the assembler to choose the right jump */ + ".byte 0xe9, 0x0, 0x0, 0x0, 0x0\n\t" + ".Lge_fallthru:\n\t" + "lea 0x8(%esp),%esp\n\t" + "pop %eax\n\t" + "pop %ebx"); + + if (offset_p) + *offset_p = 20; + if (size_p) + *size_p = 4; +} + +struct emit_ops i386_emit_ops = + { + i386_emit_prologue, + i386_emit_epilogue, + i386_emit_add, + i386_emit_sub, + i386_emit_mul, + i386_emit_lsh, + i386_emit_rsh_signed, + i386_emit_rsh_unsigned, + i386_emit_ext, + i386_emit_log_not, + i386_emit_bit_and, + i386_emit_bit_or, + i386_emit_bit_xor, + i386_emit_bit_not, + i386_emit_equal, + i386_emit_less_signed, + i386_emit_less_unsigned, + i386_emit_ref, + i386_emit_if_goto, + i386_emit_goto, + i386_write_goto_address, + i386_emit_const, + i386_emit_call, + i386_emit_reg, + i386_emit_pop, + i386_emit_stack_flush, + i386_emit_zero_ext, + i386_emit_swap, + i386_emit_stack_adjust, + i386_emit_int_call_1, + i386_emit_void_call_2, + i386_emit_eq_goto, + i386_emit_ne_goto, + i386_emit_lt_goto, + i386_emit_le_goto, + i386_emit_gt_goto, + i386_emit_ge_goto + }; + + +emit_ops * +x86_target::emit_ops () +{ +#ifdef __x86_64__ + if (is_64bit_tdesc ()) + return &amd64_emit_ops; + else +#endif + return &i386_emit_ops; +} + +/* Implementation of target ops method "sw_breakpoint_from_kind". */ + +const gdb_byte * +x86_target::sw_breakpoint_from_kind (int kind, int *size) +{ + *size = x86_breakpoint_len; + return x86_breakpoint; +} + +bool +x86_target::low_supports_range_stepping () +{ + return true; +} + +int +x86_target::get_ipa_tdesc_idx () +{ + struct regcache *regcache = get_thread_regcache (current_thread, 0); + const struct target_desc *tdesc = regcache->tdesc; + +#ifdef __x86_64__ + return amd64_get_ipa_tdesc_idx (tdesc); +#endif + + if (tdesc == tdesc_i386_linux_no_xml) + return X86_TDESC_SSE; + + return i386_get_ipa_tdesc_idx (tdesc); +} + +/* The linux target ops object. */ + +linux_process_target *the_linux_target = &the_x86_target; + +void +initialize_low_arch (void) +{ + /* Initialize the Linux target descriptions. */ +#ifdef __x86_64__ + tdesc_amd64_linux_no_xml = allocate_target_description (); + copy_target_description (tdesc_amd64_linux_no_xml, + amd64_linux_read_description (X86_XSTATE_SSE_MASK, + false)); + tdesc_amd64_linux_no_xml->xmltarget = xmltarget_amd64_linux_no_xml; +#endif + + tdesc_i386_linux_no_xml = allocate_target_description (); + copy_target_description (tdesc_i386_linux_no_xml, + i386_linux_read_description (X86_XSTATE_SSE_MASK)); + tdesc_i386_linux_no_xml->xmltarget = xmltarget_i386_linux_no_xml; + + initialize_regsets_info (&x86_regsets_info); +} diff -Nru gdb-9.1/gdbserver/linux-x86-tdesc.cc gdb-10.2/gdbserver/linux-x86-tdesc.cc --- gdb-9.1/gdbserver/linux-x86-tdesc.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/linux-x86-tdesc.cc 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,164 @@ +/* GNU/Linux/x86-64 specific target description, for the remote server + for GDB. + Copyright (C) 2017-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "server.h" +#include "tdesc.h" +#include "linux-x86-tdesc.h" +#include "arch/i386.h" +#include "gdbsupport/x86-xstate.h" +#ifdef __x86_64__ +#include "arch/amd64.h" +#endif +#include "x86-tdesc.h" + +/* Return the right x86_linux_tdesc index for a given XCR0. Return + X86_TDESC_LAST if can't find a match. */ + +static enum x86_linux_tdesc +xcr0_to_tdesc_idx (uint64_t xcr0, bool is_x32) +{ + if (xcr0 & X86_XSTATE_PKRU) + { + if (is_x32) + { + /* No x32 MPX and PKU, fall back to avx_avx512. */ + return X86_TDESC_AVX_AVX512; + } + else + return X86_TDESC_AVX_MPX_AVX512_PKU; + } + else if (xcr0 & X86_XSTATE_AVX512) + return X86_TDESC_AVX_AVX512; + else if ((xcr0 & X86_XSTATE_AVX_MPX_MASK) == X86_XSTATE_AVX_MPX_MASK) + { + if (is_x32) /* No MPX on x32. */ + return X86_TDESC_AVX; + else + return X86_TDESC_AVX_MPX; + } + else if (xcr0 & X86_XSTATE_MPX) + { + if (is_x32) /* No MPX on x32. */ + return X86_TDESC_AVX; + else + return X86_TDESC_MPX; + } + else if (xcr0 & X86_XSTATE_AVX) + return X86_TDESC_AVX; + else if (xcr0 & X86_XSTATE_SSE) + return X86_TDESC_SSE; + else if (xcr0 & X86_XSTATE_X87) + return X86_TDESC_MMX; + else + return X86_TDESC_LAST; +} + +#if defined __i386__ || !defined IN_PROCESS_AGENT + +static struct target_desc *i386_tdescs[X86_TDESC_LAST] = { }; + +/* Return the target description according to XCR0. */ + +const struct target_desc * +i386_linux_read_description (uint64_t xcr0) +{ + enum x86_linux_tdesc idx = xcr0_to_tdesc_idx (xcr0, false); + + if (idx == X86_TDESC_LAST) + return NULL; + + struct target_desc **tdesc = &i386_tdescs[idx]; + + if (*tdesc == NULL) + { + *tdesc = i386_create_target_description (xcr0, true, false); + + init_target_desc (*tdesc, i386_expedite_regs); + } + + return *tdesc;; +} +#endif + +#ifdef __x86_64__ + +static target_desc *amd64_tdescs[X86_TDESC_LAST] = { }; +static target_desc *x32_tdescs[X86_TDESC_LAST] = { }; + +const struct target_desc * +amd64_linux_read_description (uint64_t xcr0, bool is_x32) +{ + enum x86_linux_tdesc idx = xcr0_to_tdesc_idx (xcr0, is_x32); + + if (idx == X86_TDESC_LAST) + return NULL; + + struct target_desc **tdesc = NULL; + + if (is_x32) + tdesc = &x32_tdescs[idx]; + else + tdesc = &amd64_tdescs[idx]; + + if (*tdesc == NULL) + { + *tdesc = amd64_create_target_description (xcr0, is_x32, true, true); + + init_target_desc (*tdesc, amd64_expedite_regs); + } + return *tdesc; +} + +#endif + +#ifndef IN_PROCESS_AGENT + +int +i386_get_ipa_tdesc_idx (const struct target_desc *tdesc) +{ + for (int i = 0; i < X86_TDESC_LAST; i++) + { + if (tdesc == i386_tdescs[i]) + return i; + } + + /* If none tdesc is found, return the one with minimum features. */ + return X86_TDESC_MMX; +} + +#if defined __x86_64__ +int +amd64_get_ipa_tdesc_idx (const struct target_desc *tdesc) +{ + for (int i = 0; i < X86_TDESC_LAST; i++) + { + if (tdesc == amd64_tdescs[i]) + return i; + } + for (int i = 0; i < X86_TDESC_LAST; i++) + { + if (tdesc == x32_tdescs[i]) + return i; + } + + return X86_TDESC_SSE; +} + +#endif +#endif diff -Nru gdb-9.1/gdbserver/linux-x86-tdesc.h gdb-10.2/gdbserver/linux-x86-tdesc.h --- gdb-9.1/gdbserver/linux-x86-tdesc.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/linux-x86-tdesc.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,56 @@ +/* Low level support for x86 (i386 and x86-64), shared between gdbserver + and IPA. + + Copyright (C) 2016-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef GDBSERVER_LINUX_X86_TDESC_H +#define GDBSERVER_LINUX_X86_TDESC_H + +/* Note: since IPA obviously knows what ABI it's running on (i386 vs x86_64 + vs x32), it's sufficient to pass only the register set here. This, + together with the ABI known at IPA compile time, maps to a tdesc. */ + +enum x86_linux_tdesc { + X86_TDESC_MMX = 0, + X86_TDESC_SSE = 1, + X86_TDESC_AVX = 2, + X86_TDESC_MPX = 3, + X86_TDESC_AVX_MPX = 4, + X86_TDESC_AVX_AVX512 = 5, + X86_TDESC_AVX_MPX_AVX512_PKU = 6, + X86_TDESC_LAST = 7, +}; + +#if defined __i386__ || !defined IN_PROCESS_AGENT +int i386_get_ipa_tdesc_idx (const struct target_desc *tdesc); +#endif + +#if defined __x86_64__ && !defined IN_PROCESS_AGENT +int amd64_get_ipa_tdesc_idx (const struct target_desc *tdesc); +#endif + +const struct target_desc *i386_get_ipa_tdesc (int idx); + +#ifdef __x86_64__ +const struct target_desc *amd64_linux_read_description (uint64_t xcr0, + bool is_x32); +#endif + +const struct target_desc *i386_linux_read_description (uint64_t xcr0); + +#endif /* GDBSERVER_LINUX_X86_TDESC_H */ diff -Nru gdb-9.1/gdbserver/linux-xtensa-low.cc gdb-10.2/gdbserver/linux-xtensa-low.cc --- gdb-9.1/gdbserver/linux-xtensa-low.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/linux-xtensa-low.cc 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,334 @@ +/* GNU/Linux/Xtensa specific low level interface, for the remote server for GDB. + Copyright (C) 2007-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + + +#include "server.h" +#include "linux-low.h" + +/* Linux target op definitions for the Xtensa architecture. */ + +class xtensa_target : public linux_process_target +{ +public: + + const regs_info *get_regs_info () override; + + const gdb_byte *sw_breakpoint_from_kind (int kind, int *size) override; + +protected: + + void low_arch_setup () override; + + bool low_cannot_fetch_register (int regno) override; + + bool low_cannot_store_register (int regno) override; + + bool low_supports_breakpoints () override; + + CORE_ADDR low_get_pc (regcache *regcache) override; + + void low_set_pc (regcache *regcache, CORE_ADDR newpc) override; + + bool low_breakpoint_at (CORE_ADDR pc) override; +}; + +/* The singleton target ops object. */ + +static xtensa_target the_xtensa_target; + +bool +xtensa_target::low_cannot_fetch_register (int regno) +{ + gdb_assert_not_reached ("linux target op low_cannot_fetch_register " + "is not implemented by the target"); +} + +bool +xtensa_target::low_cannot_store_register (int regno) +{ + gdb_assert_not_reached ("linux target op low_cannot_store_register " + "is not implemented by the target"); +} + +bool +xtensa_target::low_supports_breakpoints () +{ + return true; +} + +CORE_ADDR +xtensa_target::low_get_pc (regcache *regcache) +{ + return linux_get_pc_32bit (regcache); +} + +void +xtensa_target::low_set_pc (regcache *regcache, CORE_ADDR pc) +{ + linux_set_pc_32bit (regcache, pc); +} + +/* Defined in auto-generated file reg-xtensa.c. */ +void init_registers_xtensa (void); +extern const struct target_desc *tdesc_xtensa; + +#include <asm/ptrace.h> +#include <xtensa-config.h> +#include "arch/xtensa.h" +#include "gdb_proc_service.h" + +#include "xtensa-xtregs.c" + +enum regnum { + R_PC=0, R_PS, + R_LBEG, R_LEND, R_LCOUNT, + R_SAR, + R_WS, R_WB, + R_THREADPTR, + R_A0 = 64 +}; + +static void +xtensa_fill_gregset (struct regcache *regcache, void *buf) +{ + elf_greg_t* rset = (elf_greg_t*)buf; + const struct target_desc *tdesc = regcache->tdesc; + int ar0_regnum; + char *ptr; + int i; + + /* Take care of AR registers. */ + + ar0_regnum = find_regno (tdesc, "ar0"); + ptr = (char*)&rset[R_A0]; + + for (i = ar0_regnum; i < ar0_regnum + XCHAL_NUM_AREGS; i++) + { + collect_register (regcache, i, ptr); + ptr += register_size (tdesc, i); + } + + if (XSHAL_ABI == XTHAL_ABI_CALL0) + { + int a0_regnum = find_regno (tdesc, "a0"); + ptr = (char *) &rset[R_A0 + 4 * rset[R_WB]]; + + for (i = a0_regnum; i < a0_regnum + C0_NREGS; i++) + { + if ((4 * rset[R_WB] + i - a0_regnum) == XCHAL_NUM_AREGS) + ptr = (char *) &rset[R_A0]; + collect_register (regcache, i, ptr); + ptr += register_size (tdesc, i); + } + } + + /* Loop registers, if hardware has it. */ + +#if XCHAL_HAVE_LOOPS + collect_register_by_name (regcache, "lbeg", (char*)&rset[R_LBEG]); + collect_register_by_name (regcache, "lend", (char*)&rset[R_LEND]); + collect_register_by_name (regcache, "lcount", (char*)&rset[R_LCOUNT]); +#endif + + collect_register_by_name (regcache, "sar", (char*)&rset[R_SAR]); + collect_register_by_name (regcache, "pc", (char*)&rset[R_PC]); + collect_register_by_name (regcache, "ps", (char*)&rset[R_PS]); + collect_register_by_name (regcache, "windowbase", (char*)&rset[R_WB]); + collect_register_by_name (regcache, "windowstart", (char*)&rset[R_WS]); + +#if XCHAL_HAVE_THREADPTR + collect_register_by_name (regcache, "threadptr", + (char *) &rset[R_THREADPTR]); +#endif +} + +static void +xtensa_store_gregset (struct regcache *regcache, const void *buf) +{ + const elf_greg_t* rset = (const elf_greg_t*)buf; + const struct target_desc *tdesc = regcache->tdesc; + int ar0_regnum; + char *ptr; + int i; + + /* Take care of AR registers. */ + + ar0_regnum = find_regno (tdesc, "ar0"); + ptr = (char *)&rset[R_A0]; + + for (i = ar0_regnum; i < ar0_regnum + XCHAL_NUM_AREGS; i++) + { + supply_register (regcache, i, ptr); + ptr += register_size (tdesc, i); + } + + if (XSHAL_ABI == XTHAL_ABI_CALL0) + { + int a0_regnum = find_regno (tdesc, "a0"); + ptr = (char *) &rset[R_A0 + (4 * rset[R_WB]) % XCHAL_NUM_AREGS]; + + for (i = a0_regnum; i < a0_regnum + C0_NREGS; i++) + { + if ((4 * rset[R_WB] + i - a0_regnum) == XCHAL_NUM_AREGS) + ptr = (char *) &rset[R_A0]; + supply_register (regcache, i, ptr); + ptr += register_size (tdesc, i); + } + } + + /* Loop registers, if hardware has it. */ + +#if XCHAL_HAVE_LOOPS + supply_register_by_name (regcache, "lbeg", (char*)&rset[R_LBEG]); + supply_register_by_name (regcache, "lend", (char*)&rset[R_LEND]); + supply_register_by_name (regcache, "lcount", (char*)&rset[R_LCOUNT]); +#endif + + supply_register_by_name (regcache, "sar", (char*)&rset[R_SAR]); + supply_register_by_name (regcache, "pc", (char*)&rset[R_PC]); + supply_register_by_name (regcache, "ps", (char*)&rset[R_PS]); + supply_register_by_name (regcache, "windowbase", (char*)&rset[R_WB]); + supply_register_by_name (regcache, "windowstart", (char*)&rset[R_WS]); + +#if XCHAL_HAVE_THREADPTR + supply_register_by_name (regcache, "threadptr", + (char *) &rset[R_THREADPTR]); +#endif +} + +/* Xtensa GNU/Linux PTRACE interface includes extended register set. */ + +static void +xtensa_fill_xtregset (struct regcache *regcache, void *buf) +{ + const xtensa_regtable_t *ptr; + + for (ptr = xtensa_regmap_table; ptr->name; ptr++) + { + collect_register_by_name (regcache, ptr->name, + (char*)buf + ptr->ptrace_offset); + } +} + +static void +xtensa_store_xtregset (struct regcache *regcache, const void *buf) +{ + const xtensa_regtable_t *ptr; + + for (ptr = xtensa_regmap_table; ptr->name; ptr++) + { + supply_register_by_name (regcache, ptr->name, + (char*)buf + ptr->ptrace_offset); + } +} + +static struct regset_info xtensa_regsets[] = { + { PTRACE_GETREGS, PTRACE_SETREGS, 0, sizeof (elf_gregset_t), + GENERAL_REGS, + xtensa_fill_gregset, xtensa_store_gregset }, + { PTRACE_GETXTREGS, PTRACE_SETXTREGS, 0, XTENSA_ELF_XTREG_SIZE, + EXTENDED_REGS, + xtensa_fill_xtregset, xtensa_store_xtregset }, + NULL_REGSET +}; + +#if XCHAL_HAVE_BE +#define XTENSA_BREAKPOINT {0xd2,0x0f} +#else +#define XTENSA_BREAKPOINT {0x2d,0xf0} +#endif + +static const gdb_byte xtensa_breakpoint[] = XTENSA_BREAKPOINT; +#define xtensa_breakpoint_len 2 + +/* Implementation of target ops method "sw_breakpoint_from_kind". */ + +const gdb_byte * +xtensa_target::sw_breakpoint_from_kind (int kind, int *size) +{ + *size = xtensa_breakpoint_len; + return xtensa_breakpoint; +} + +bool +xtensa_target::low_breakpoint_at (CORE_ADDR where) +{ + unsigned long insn; + + read_memory (where, (unsigned char *) &insn, xtensa_breakpoint_len); + return memcmp((char *) &insn, + xtensa_breakpoint, xtensa_breakpoint_len) == 0; +} + +/* Called by libthread_db. */ + +ps_err_e +ps_get_thread_area (struct ps_prochandle *ph, + lwpid_t lwpid, int idx, void **base) +{ + xtensa_elf_gregset_t regs; + + if (ptrace (PTRACE_GETREGS, lwpid, NULL, ®s) != 0) + return PS_ERR; + + /* IDX is the bias from the thread pointer to the beginning of the + thread descriptor. It has to be subtracted due to implementation + quirks in libthread_db. */ + *base = (void *) ((char *) regs.threadptr - idx); + + return PS_OK; +} + +static struct regsets_info xtensa_regsets_info = + { + xtensa_regsets, /* regsets */ + 0, /* num_regsets */ + NULL, /* disabled_regsets */ + }; + +static struct regs_info myregs_info = + { + NULL, /* regset_bitmap */ + NULL, /* usrregs */ + &xtensa_regsets_info + }; + +void +xtensa_target::low_arch_setup () +{ + current_process ()->tdesc = tdesc_xtensa; +} + +const regs_info * +xtensa_target::get_regs_info () +{ + return &myregs_info; +} + +/* The linux target ops object. */ + +linux_process_target *the_linux_target = &the_xtensa_target; + +void +initialize_low_arch (void) +{ + /* Initialize the Linux target descriptions. */ + init_registers_xtensa (); + + initialize_regsets_info (&xtensa_regsets_info); +} diff -Nru gdb-9.1/gdbserver/Makefile.in gdb-10.2/gdbserver/Makefile.in --- gdb-9.1/gdbserver/Makefile.in 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/Makefile.in 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,613 @@ +# Copyright (C) 1989-2021 Free Software Foundation, Inc. + +# This file is part of GDB. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Please keep lists in this file sorted alphabetically, with one item per line. +# See gdb/Makefile.in for guidelines on ordering files and directories. + +prefix = @prefix@ +exec_prefix = @exec_prefix@ + +host_alias = @host_noncanonical@ +target_alias = @target_noncanonical@ +program_transform_name = @program_transform_name@ +bindir = @bindir@ +libdir = @libdir@ +tooldir = $(libdir)/$(target_alias) + +datarootdir = @datarootdir@ +datadir = @datadir@ +mandir = @mandir@ +man1dir = $(mandir)/man1 +man2dir = $(mandir)/man2 +man3dir = $(mandir)/man3 +man4dir = $(mandir)/man4 +man5dir = $(mandir)/man5 +man6dir = $(mandir)/man6 +man7dir = $(mandir)/man7 +man8dir = $(mandir)/man8 +man9dir = $(mandir)/man9 +infodir = @infodir@ +htmldir = $(prefix)/html +includedir = @includedir@ +CONFIG_SRC_SUBDIR = @CONFIG_SRC_SUBDIR@ + +install_sh = @install_sh@ + +SHELL = @SHELL@ +EXEEXT = @EXEEXT@ + +INSTALL = @INSTALL@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INSTALL_DATA = @INSTALL_DATA@ +RANLIB = @RANLIB@ + +CC = @CC@ +CXX = @CXX@ +CXX_DIALECT = @CXX_DIALECT@ +AR = @AR@ +AR_FLAGS = rc +STRIP = @STRIP@ + +# Dependency tracking information. +DEPMODE = @CCDEPMODE@ +DEPDIR = @DEPDIR@ +depcomp = $(SHELL) $(srcdir)/../depcomp + +# Directory containing source files. Don't clean up the spacing, +# this exact string is matched for by the "configure" script. +srcdir = @srcdir@ +abs_top_srcdir = @abs_top_srcdir@ +abs_srcdir = @abs_srcdir@ +VPATH = @srcdir@ + +top_builddir = . + +include $(srcdir)/../gdb/silent-rules.mk + +# Note that these are overridden by GNU make-specific code below if +# GNU make is used. The overrides implement dependency tracking. +COMPILE.pre = $(CXX) $(CXX_DIALECT) +COMPILE.post = -c -o $@ +COMPILE = $(ECHO_CXX) $(COMPILE.pre) $(INTERNAL_CFLAGS) $(COMPILE.post) +POSTCOMPILE = @true + +# It is also possible that you will need to add -I/usr/include/sys to the +# CFLAGS section if your system doesn't have fcntl.h in /usr/include (which +# is where it should be according to Posix). + +# Set this up with gcc if you have gnu ld and the loader will print out +# line numbers for undefinded refs. +#CC_LD = g++ -static +CC_LD = $(CXX) $(CXX_DIALECT) + +# Where is the "include" directory? Traditionally ../include or ./include +INCLUDE_DIR = ${srcdir}/../include +INCLUDE_DEP = $$(INCLUDE_DIR) + +LIBIBERTY_BUILDDIR = ../libiberty +LIBIBERTY = $(LIBIBERTY_BUILDDIR)/libiberty.a + +GDBSUPPORT_BUILDDIR = ../gdbsupport +GDBSUPPORT = $(GDBSUPPORT_BUILDDIR)/libgdbsupport.a + +# Where is ust? These will be empty if ust was not available. +ustlibs = @ustlibs@ +ustinc = @ustinc@ + +# gnulib +GNULIB_BUILDDIR = ../gnulib +LIBGNU = $(GNULIB_BUILDDIR)/import/libgnu.a +INCGNU = -I$(srcdir)/../gnulib/import -I$(GNULIB_BUILDDIR)/import + +# Where is the INTL library? Typically in ../intl. +INTL = @LIBINTL@ +INTL_DEPS = @LIBINTL_DEP@ +INTL_CFLAGS = @INCINTL@ + +INCSUPPORT = -I$(srcdir)/.. -I.. + +# All the includes used for CFLAGS and for lint. +# -I. for config files. +# -I${srcdir} for our headers. +# -I$(srcdir)/../gdb/regformats for regdef.h. +# +# We do not include ../target or ../nat in here because headers +# in those directories should be included with the subdirectory. +# e.g.: "target/wait.h". +# +INCLUDE_CFLAGS = -I. -I${srcdir} \ + -I$(srcdir)/../gdb/regformats -I$(srcdir)/.. -I$(INCLUDE_DIR) \ + -I$(srcdir)/../gdb $(INCGNU) $(INCSUPPORT) \ + $(INTL_CFLAGS) + +# M{H,T}_CFLAGS, if defined, has host- and target-dependent CFLAGS +# from the config/ directory. +GLOBAL_CFLAGS = ${MT_CFLAGS} ${MH_CFLAGS} +#PROFILE_CFLAGS = -pg + +WARN_CFLAGS = @WARN_CFLAGS@ +WERROR_CFLAGS = @WERROR_CFLAGS@ + +WARN_CFLAGS_NO_FORMAT = `echo " $(WARN_CFLAGS) " \ + | sed "s/ -Wformat-nonliteral / -Wno-format-nonliteral /g"` + +# These are specifically reserved for setting from the command line +# when running make. I.E. "make CFLAGS=-Wmissing-prototypes". +CFLAGS = @CFLAGS@ +CXXFLAGS = @CXXFLAGS@ +CPPFLAGS = @CPPFLAGS@ + +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ + +WIN32APILIBS = @WIN32APILIBS@ + +# INTERNAL_CFLAGS is the aggregate of all other *CFLAGS macros. +INTERNAL_CFLAGS_BASE = ${CXXFLAGS} ${GLOBAL_CFLAGS} \ + ${PROFILE_CFLAGS} ${INCLUDE_CFLAGS} ${CPPFLAGS} $(PTHREAD_CFLAGS) +INTERNAL_WARN_CFLAGS = ${INTERNAL_CFLAGS_BASE} $(WARN_CFLAGS) +INTERNAL_CFLAGS = ${INTERNAL_WARN_CFLAGS} $(WERROR_CFLAGS) -DGDBSERVER + +# LDFLAGS is specifically reserved for setting from the command line +# when running make. +LDFLAGS = @LDFLAGS@ +INTERNAL_LDFLAGS = $(LDFLAGS) @RDYNAMIC@ + +# All source files that go into linking GDB remote server. + +SFILES = \ + $(srcdir)/debug.cc \ + $(srcdir)/dll.cc \ + $(srcdir)/gdbreplay.cc \ + $(srcdir)/hostio.cc \ + $(srcdir)/hostio-errno.cc \ + $(srcdir)/i387-fp.cc \ + $(srcdir)/inferiors.cc \ + $(srcdir)/linux-aarch64-low.cc \ + $(srcdir)/linux-arc-low.cc \ + $(srcdir)/linux-arm-low.cc \ + $(srcdir)/linux-ia64-low.cc \ + $(srcdir)/linux-low.cc \ + $(srcdir)/linux-m68k-low.cc \ + $(srcdir)/linux-mips-low.cc \ + $(srcdir)/linux-nios2-low.cc \ + $(srcdir)/linux-ppc-low.cc \ + $(srcdir)/linux-riscv-low.cc \ + $(srcdir)/linux-s390-low.cc \ + $(srcdir)/linux-sh-low.cc \ + $(srcdir)/linux-sparc-low.cc \ + $(srcdir)/linux-x86-low.cc \ + $(srcdir)/linux-xtensa-low.cc \ + $(srcdir)/mem-break.cc \ + $(srcdir)/netbsd-amd64-low.cc \ + $(srcdir)/netbsd-low.cc \ + $(srcdir)/netbsd-low.h \ + $(srcdir)/proc-service.cc \ + $(srcdir)/proc-service.list \ + $(srcdir)/regcache.cc \ + $(srcdir)/remote-utils.cc \ + $(srcdir)/server.cc \ + $(srcdir)/symbol.cc \ + $(srcdir)/target.cc \ + $(srcdir)/thread-db.cc \ + $(srcdir)/utils.cc \ + $(srcdir)/win32-i386-low.cc \ + $(srcdir)/win32-low.cc \ + $(srcdir)/x86-low.cc \ + $(srcdir)/../gdb/alloc.c \ + $(srcdir)/../gdb/arch/arc.c \ + $(srcdir)/../gdb/arch/arm.c \ + $(srcdir)/../gdb/arch/arm-get-next-pcs.c \ + $(srcdir)/../gdb/arch/arm-linux.c \ + $(srcdir)/../gdb/arch/ppc-linux-common.c \ + $(srcdir)/../gdb/arch/riscv.c \ + $(srcdir)/../gdb/nat/aarch64-sve-linux-ptrace.c \ + $(srcdir)/../gdb/nat/linux-btrace.c \ + $(srcdir)/../gdb/nat/linux-namespaces.c \ + $(srcdir)/../gdb/nat/linux-osdata.c \ + $(srcdir)/../gdb/nat/linux-personality.c \ + $(srcdir)/../gdb/nat/mips-linux-watch.c \ + $(srcdir)/../gdb/nat/ppc-linux.c \ + $(srcdir)/../gdb/nat/riscv-linux-tdesc.c \ + $(srcdir)/../gdb/nat/fork-inferior.c \ + $(srcdir)/../gdb/target/waitstatus.c + +DEPFILES = @GDBSERVER_DEPFILES@ + +LIBOBJS = @LIBOBJS@ + +SOURCES = $(SFILES) +TAGFILES = $(SOURCES) ${HFILES} ${ALLPARAM} ${POSSLIBS} + +OBS = \ + alloc.o \ + ax.o \ + debug.o \ + dll.o \ + hostio.o \ + inferiors.o \ + mem-break.o \ + notif.o \ + regcache.o \ + remote-utils.o \ + server.o \ + symbol.o \ + target.o \ + tdesc.o \ + tracepoint.o \ + utils.o \ + version.o \ + target/waitstatus.o \ + $(DEPFILES) \ + $(LIBOBJS) \ + $(XML_BUILTIN) + +GDBREPLAY_OBS = \ + gdbreplay.o \ + utils.o \ + version.o + +GDBSERVER_LIBS = @GDBSERVER_LIBS@ $(PTHREAD_LIBS) +XM_CLIBS = @LIBS@ +CDEPS = $(srcdir)/proc-service.list + +# XML files to compile in to gdbserver, if any. +XML_DIR = $(srcdir)/../gdb/features +XML_FILES = @srv_xmlfiles@ +XML_BUILTIN = @srv_xmlbuiltin@ + +IPA_DEPFILES = @IPA_DEPFILES@ +extra_libraries = @extra_libraries@ + +FLAGS_TO_PASS = \ + "prefix=$(prefix)" \ + "exec_prefix=$(exec_prefix)" \ + "infodir=$(infodir)" \ + "datarootdir=$(datarootdir)" \ + "docdir=$(docdir)" \ + "htmldir=$(htmldir)" \ + "pdfdir=$(pdfdir)" \ + "libdir=$(libdir)" \ + "mandir=$(mandir)" \ + "datadir=$(datadir)" \ + "includedir=$(includedir)" \ + "against=$(against)" \ + "DESTDIR=$(DESTDIR)" \ + "AR=$(AR)" \ + "AR_FLAGS=$(AR_FLAGS)" \ + "CC=$(CC)" \ + "CFLAGS=$(CFLAGS)" \ + "CXX=$(CXX)" \ + "CXXFLAGS=$(CXXFLAGS)" \ + "DLLTOOL=$(DLLTOOL)" \ + "LDFLAGS=$(LDFLAGS)" \ + "RANLIB=$(RANLIB)" \ + "MAKEINFO=$(MAKEINFO)" \ + "MAKEHTML=$(MAKEHTML)" \ + "MAKEHTMLFLAGS=$(MAKEHTMLFLAGS)" \ + "INSTALL=$(INSTALL)" \ + "INSTALL_PROGRAM=$(INSTALL_PROGRAM)" \ + "INSTALL_DATA=$(INSTALL_DATA)" \ + "RUNTEST=$(RUNTEST)" \ + "RUNTESTFLAGS=$(RUNTESTFLAGS)" + +# All generated files which can be included by another file. +generated_files = config.h + +all: gdbserver$(EXEEXT) gdbreplay$(EXEEXT) $(extra_libraries) + +# Traditionally "install" depends on "all". But it may be useful +# not to; for example, if the user has made some trivial change to a +# source file and doesn't care about rebuilding or just wants to save the +# time it takes for make to check that all is up to date. +# install-only is intended to address that need. +install: all + @$(MAKE) $(FLAGS_TO_PASS) install-only + +install-only: + n=`echo gdbserver | sed '$(program_transform_name)'`; \ + if [ x$$n = x ]; then n=gdbserver; else true; fi; \ + if [ x"$(IPA_DEPFILES)" != x ]; then \ + $(SHELL) $(srcdir)/../mkinstalldirs $(DESTDIR)$(libdir); \ + $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $(IPA_LIB) $(DESTDIR)$(libdir)/$(IPA_LIB); \ + fi; \ + $(SHELL) $(srcdir)/../mkinstalldirs $(DESTDIR)$(bindir); \ + $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) gdbserver$(EXEEXT) $(DESTDIR)$(bindir)/$$n$(EXEEXT) + +install-strip: + $(MAKE) $(FLAGS_TO_PASS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install-only + +uninstall: force + n=`echo gdbserver | sed '$(program_transform_name)'`; \ + if [ x$$n = x ]; then n=gdbserver; else true; fi; \ + rm -f $(DESTDIR)/$(bindir)/$$n$(EXEEXT) $(DESTDIR)$(man1dir)/$$n.1 + +installcheck: +check: +info dvi pdf: +install-info: +install-pdf: +html: +install-html: +clean-info: + +gdbserver$(EXEEXT): $(sort $(OBS)) ${CDEPS} $(LIBGNU) $(LIBIBERTY) \ + $(INTL_DEPS) $(GDBSUPPORT) + $(SILENCE) rm -f gdbserver$(EXEEXT) + $(ECHO_CXXLD) $(CC_LD) $(INTERNAL_CFLAGS) $(INTERNAL_LDFLAGS) \ + -o gdbserver$(EXEEXT) $(OBS) $(GDBSUPPORT) $(LIBGNU) \ + $(LIBIBERTY) $(INTL) $(GDBSERVER_LIBS) $(XM_CLIBS) \ + $(WIN32APILIBS) + +gdbreplay$(EXEEXT): $(sort $(GDBREPLAY_OBS)) $(LIBGNU) $(LIBIBERTY) \ + $(INTL_DEPS) $(GDBSUPPORT) + $(SILENCE) rm -f gdbreplay$(EXEEXT) + $(ECHO_CXXLD) $(CC_LD) $(INTERNAL_CFLAGS) $(INTERNAL_LDFLAGS) \ + -o gdbreplay$(EXEEXT) $(GDBREPLAY_OBS) $(XM_CLIBS) \ + $(GDBSUPPORT) $(LIBGNU) $(LIBIBERTY) $(INTL) \ + $(WIN32APILIBS) + +IPA_OBJS = \ + alloc-ipa.o \ + ax-ipa.o \ + gdbsupport/common-utils-ipa.o \ + gdbsupport/errors-ipa.o \ + gdbsupport/format-ipa.o \ + gdbsupport/print-utils-ipa.o \ + gdbsupport/rsp-low-ipa.o \ + gdbsupport/safe-strerror-ipa.o \ + gdbsupport/tdesc-ipa.o \ + regcache-ipa.o \ + remote-utils-ipa.o \ + tdesc-ipa.o \ + tracepoint-ipa.o \ + utils-ipa.o \ + ${IPA_DEPFILES} + +IPA_LIB = libinproctrace.so + +$(IPA_LIB): $(sort $(IPA_OBJS)) ${CDEPS} + $(SILENCE) rm -f $(IPA_LIB) + $(ECHO_CXXLD) $(CC_LD) -shared -fPIC -Wl,--soname=$(IPA_LIB) \ + -Wl,--no-undefined $(INTERNAL_CFLAGS) $(INTERNAL_LDFLAGS) \ + -o $(IPA_LIB) ${IPA_OBJS} -ldl -pthread + +# Put the proper machine-specific files first, so M-. on a machine +# specific routine gets the one for the correct machine. +# The xyzzy stuff below deals with empty DEPFILES +TAGS: ${TAGFILES} + etags \ + `for i in yzzy ${DEPFILES}; do \ + if [ x$$i != xyzzy ]; then \ + echo ${srcdir}/$$i | sed -e 's/\.o$$/\.cc/' \ + -e 's,/\(arch\|nat\|target\)/,/../\1/,' \ + fi; \ + done` \ + ${TAGFILES} +tags: TAGS + +mostlyclean clean: + rm -f *.o ${ADD_FILES} *~ + rm -f gdbserver$(EXEEXT) gdbreplay$(EXEEXT) core make.log + rm -f $(IPA_LIB) + rm -f *-generated.cc + rm -f stamp-xml + rm -f $(DEPDIR)/*.Po + for i in $(CONFIG_SRC_SUBDIR); do \ + rm -f $$i/*.o; \ + rm -f $$i/$(DEPDIR)/*; \ + done + +maintainer-clean realclean distclean: clean + rm -f Makefile config.status config.h stamp-h config.log + rm -f Makefile + for i in $(CONFIG_SRC_SUBDIR); do \ + rmdir $$i/$(DEPDIR); \ + done + +config.h: stamp-h ; @true +stamp-h: config.in config.status + $(SHELL) ./config.status config.h + +Makefile: Makefile.in config.status + $(SHELL) ./config.status $@ + +config.status: configure configure.srv $(srcdir)/../bfd/development.sh + $(SHELL) ./config.status --recheck + +# automatic rebuilding in automake-generated Makefiles requires +# this rule in the toplevel Makefile, which, with GNU make, causes +# the desired updates through the implicit regeneration of the Makefile +# and all of its prerequisites. +am--refresh: + @: + +force: + +version-generated.cc: Makefile $(srcdir)/../gdb/version.in $(srcdir)/../bfd/version.h $(srcdir)/../gdbsupport/create-version.sh + $(ECHO_GEN) $(SHELL) $(srcdir)/../gdbsupport/create-version.sh $(srcdir)/../gdb \ + $(host_alias) $(target_alias) $@ + +xml-builtin-generated.cc: stamp-xml; @true +stamp-xml: $(XML_DIR)/feature_to_c.sh Makefile $(XML_FILES) + $(SILENCE) rm -f xml-builtin.tmp + $(ECHO_GEN_XML_BUILTIN_GENERATED) $(SHELL) $(XML_DIR)/feature_to_c.sh \ + xml-builtin.tmp $(XML_FILES) + $(SILENCE) $(SHELL) $(srcdir)/../move-if-change xml-builtin.tmp xml-builtin-generated.cc + $(SILENCE) echo stamp > stamp-xml + +.PRECIOUS: xml-builtin.cc + +# GNU Make has an annoying habit of putting *all* the Makefile variables +# into the environment, unless you include this target as a circumvention. +# Rumor is that this will be fixed (and this target can be removed) +# in GNU Make 4.0. +.NOEXPORT: + +# GNU Make 3.63 has a different problem: it keeps tacking command line +# overrides onto the definition of $(MAKE). This variable setting +# will remove them. +MAKEOVERRIDES = + +regdat_sh = $(srcdir)/../gdb/regformats/regdat.sh + +UST_CFLAGS = $(ustinc) -DCONFIG_UST_GDB_INTEGRATION + +# Undo gnulib replacements for the IPA shared library build. +# The gnulib headers are still needed, but gnulib is not linked +# into the IPA lib so replacement apis don't work. +UNDO_GNULIB_CFLAGS = -Drpl_strerror_r=strerror_r + +# Note, we only build the IPA if -fvisibility=hidden is supported in +# the first place. +IPAGENT_CFLAGS = $(INTERNAL_CFLAGS) $(UST_CFLAGS) \ + $(UNDO_GNULIB_CFLAGS) \ + -fPIC -DIN_PROCESS_AGENT \ + -fvisibility=hidden + +IPAGENT_COMPILE = $(ECHO_CXX) $(COMPILE.pre) $(IPAGENT_CFLAGS) $(COMPILE.post) + +# Rules for special cases. + +ax-ipa.o: ax.cc + $(IPAGENT_COMPILE) $(WARN_CFLAGS_NO_FORMAT) $< + $(POSTCOMPILE) + +ax.o: ax.cc + $(COMPILE) $(WARN_CFLAGS_NO_FORMAT) $< + $(POSTCOMPILE) + +# Rules for objects that go in the in-process agent. + +arch/%-ipa.o: ../gdb/arch/%.c + $(IPAGENT_COMPILE) -x c++ $< + $(POSTCOMPILE) + +gdbsupport/%-ipa.o: ../gdbsupport/%.cc + $(IPAGENT_COMPILE) $< + $(POSTCOMPILE) + +%-ipa.o: %-generated.cc + $(IPAGENT_COMPILE) $< + $(POSTCOMPILE) + +%-ipa.o: %.cc + $(IPAGENT_COMPILE) $< + $(POSTCOMPILE) + +%-ipa.o: ../gdb/%.c + $(IPAGENT_COMPILE) -x c++ $< + $(POSTCOMPILE) + +# Note: Between two matching pattern rules, GNU Make 3.81 chooses the first one. +# Therefore, this one needs to be before "%.o: %.cc" for it to be considered for +# files such as linux-amd64-ipa.o generated from linux-amd64-ipa.cc. +# +# Later versions of GNU Make choose the rule with the shortest stem, so it would +# work in any order. + +%-ipa.o: %-ipa.cc + $(IPAGENT_COMPILE) $< + $(POSTCOMPILE) + +# Rules for objects that go in the gdbserver binary. + +arch/%.o: ../gdb/arch/%.c + $(COMPILE) -x c++ $< + $(POSTCOMPILE) + +%.o: %-generated.cc + $(COMPILE) $< + $(POSTCOMPILE) + +%.o: %.cc + $(COMPILE) $< + $(POSTCOMPILE) + +nat/%.o: ../gdb/nat/%.c + $(COMPILE) -x c++ $< + $(POSTCOMPILE) + +target/%.o: ../gdb/target/%.c + $(COMPILE) -x c++ $< + $(POSTCOMPILE) + +%.o: ../gdb/%.c + $(COMPILE) -x c++ $< + $(POSTCOMPILE) + +# Rules for register format descriptions. Suffix destination files with +# -generated to identify and clean them easily. + +%-generated.cc: ../gdb/regformats/%.dat $(regdat_sh) + $(ECHO_REGDAT) $(SHELL) $(regdat_sh) $< $@ + +%-generated.cc: ../gdb/regformats/rs6000/%.dat $(regdat_sh) + $(ECHO_REGDAT) $(SHELL) $(regdat_sh) $< $@ + +# +# Dependency tracking. +# + +ifeq ($(DEPMODE),depmode=gcc3) +# Note that we put the dependencies into a .Tpo file, then move them +# into place if the compile succeeds. We need this because gcc does +# not atomically write the dependency output file. +override COMPILE.post = -c -o $@ -MT $@ -MMD -MP \ + -MF $(@D)/$(DEPDIR)/$(basename $(@F)).Tpo +override POSTCOMPILE = @mv $(@D)/$(DEPDIR)/$(basename $(@F)).Tpo \ + $(@D)/$(DEPDIR)/$(basename $(@F)).Po +else +override COMPILE.pre = source='$<' object='$@' libtool=no \ + DEPDIR=$(DEPDIR) $(DEPMODE) $(depcomp) \ + $(CXX) $(CXX_DIALECT) +# depcomp handles atomicity for us, so we don't need a postcompile +# step. +override POSTCOMPILE = +endif + +# A list of all the objects we might care about in this build, for +# dependency tracking. +all_object_files = $(OBS) $(GDBREPLAY_OBS) $(IPA_OBJS) + +# Ensure that generated files are created early. Use order-only +# dependencies if available. They require GNU make 3.80 or newer, +# and the .VARIABLES variable was introduced at the same time. +ifdef .VARIABLES +$(all_object_files): | $(generated_files) +else +$(all_object_files) : $(generated_files) +endif + +# All the .deps files to include. +all_deps_files = $(foreach dep,$(patsubst %.o,%.Po,$(all_object_files)),\ + $(dir $(dep))/$(DEPDIR)/$(notdir $(dep))) + +# Dependencies. +-include $(all_deps_files) + +# Disable implicit make rules. +include $(srcdir)/../gdb/disable-implicit-rules.mk + +# Do not delete intermediate files (e.g. *-generated.cc). +.SECONDARY: + +# This is the end of "Makefile.in". diff -Nru gdb-9.1/gdbserver/mem-break.cc gdb-10.2/gdbserver/mem-break.cc --- gdb-9.1/gdbserver/mem-break.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/mem-break.cc 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,2236 @@ +/* Memory breakpoint operations for the remote server for GDB. + Copyright (C) 2002-2021 Free Software Foundation, Inc. + + Contributed by MontaVista Software. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "server.h" +#include "regcache.h" +#include "ax.h" + +#define MAX_BREAKPOINT_LEN 8 + +/* Helper macro used in loops that append multiple items to a singly-linked + list instead of inserting items at the head of the list, as, say, in the + breakpoint lists. LISTPP is a pointer to the pointer that is the head of + the new list. ITEMP is a pointer to the item to be added to the list. + TAILP must be defined to be the same type as ITEMP, and initialized to + NULL. */ + +#define APPEND_TO_LIST(listpp, itemp, tailp) \ + do \ + { \ + if ((tailp) == NULL) \ + *(listpp) = (itemp); \ + else \ + (tailp)->next = (itemp); \ + (tailp) = (itemp); \ + } \ + while (0) + +/* GDB will never try to install multiple breakpoints at the same + address. However, we can see GDB requesting to insert a breakpoint + at an address is had already inserted one previously in a few + situations. + + - The RSP documentation on Z packets says that to avoid potential + problems with duplicate packets, the operations should be + implemented in an idempotent way. + + - A breakpoint is set at ADDR, an address in a shared library. + Then the shared library is unloaded. And then another, unrelated, + breakpoint at ADDR is set. There is not breakpoint removal request + between the first and the second breakpoint. + + - When GDB wants to update the target-side breakpoint conditions or + commands, it re-inserts the breakpoint, with updated + conditions/commands associated. + + Also, we need to keep track of internal breakpoints too, so we do + need to be able to install multiple breakpoints at the same address + transparently. + + We keep track of two different, and closely related structures. A + raw breakpoint, which manages the low level, close to the metal + aspect of a breakpoint. It holds the breakpoint address, and for + software breakpoints, a buffer holding a copy of the instructions + that would be in memory had not been a breakpoint there (we call + that the shadow memory of the breakpoint). We occasionally need to + temporarilly uninsert a breakpoint without the client knowing about + it (e.g., to step over an internal breakpoint), so we keep an + `inserted' state associated with this low level breakpoint + structure. There can only be one such object for a given address. + Then, we have (a bit higher level) breakpoints. This structure + holds a callback to be called whenever a breakpoint is hit, a + high-level type, and a link to a low level raw breakpoint. There + can be many high-level breakpoints at the same address, and all of + them will point to the same raw breakpoint, which is reference + counted. */ + +/* The low level, physical, raw breakpoint. */ +struct raw_breakpoint +{ + struct raw_breakpoint *next; + + /* The low level type of the breakpoint (software breakpoint, + watchpoint, etc.) */ + enum raw_bkpt_type raw_type; + + /* A reference count. Each high level breakpoint referencing this + raw breakpoint accounts for one reference. */ + int refcount; + + /* The breakpoint's insertion address. There can only be one raw + breakpoint for a given PC. */ + CORE_ADDR pc; + + /* The breakpoint's kind. This is target specific. Most + architectures only use one specific instruction for breakpoints, while + others may use more than one. E.g., on ARM, we need to use different + breakpoint instructions on Thumb, Thumb-2, and ARM code. Likewise for + hardware breakpoints -- some architectures (including ARM) need to + setup debug registers differently depending on mode. */ + int kind; + + /* The breakpoint's shadow memory. */ + unsigned char old_data[MAX_BREAKPOINT_LEN]; + + /* Positive if this breakpoint is currently inserted in the + inferior. Negative if it was, but we've detected that it's now + gone. Zero if not inserted. */ + int inserted; +}; + +/* The type of a breakpoint. */ +enum bkpt_type + { + /* A GDB breakpoint, requested with a Z0 packet. */ + gdb_breakpoint_Z0, + + /* A GDB hardware breakpoint, requested with a Z1 packet. */ + gdb_breakpoint_Z1, + + /* A GDB write watchpoint, requested with a Z2 packet. */ + gdb_breakpoint_Z2, + + /* A GDB read watchpoint, requested with a Z3 packet. */ + gdb_breakpoint_Z3, + + /* A GDB access watchpoint, requested with a Z4 packet. */ + gdb_breakpoint_Z4, + + /* A software single-step breakpoint. */ + single_step_breakpoint, + + /* Any other breakpoint type that doesn't require specific + treatment goes here. E.g., an event breakpoint. */ + other_breakpoint, + }; + +struct point_cond_list +{ + /* Pointer to the agent expression that is the breakpoint's + conditional. */ + struct agent_expr *cond; + + /* Pointer to the next condition. */ + struct point_cond_list *next; +}; + +struct point_command_list +{ + /* Pointer to the agent expression that is the breakpoint's + commands. */ + struct agent_expr *cmd; + + /* Flag that is true if this command should run even while GDB is + disconnected. */ + int persistence; + + /* Pointer to the next command. */ + struct point_command_list *next; +}; + +/* A high level (in gdbserver's perspective) breakpoint. */ +struct breakpoint +{ + struct breakpoint *next; + + /* The breakpoint's type. */ + enum bkpt_type type; + + /* Link to this breakpoint's raw breakpoint. This is always + non-NULL. */ + struct raw_breakpoint *raw; +}; + +/* Breakpoint requested by GDB. */ + +struct gdb_breakpoint +{ + struct breakpoint base; + + /* Pointer to the condition list that should be evaluated on + the target or NULL if the breakpoint is unconditional or + if GDB doesn't want us to evaluate the conditionals on the + target's side. */ + struct point_cond_list *cond_list; + + /* Point to the list of commands to run when this is hit. */ + struct point_command_list *command_list; +}; + +/* Breakpoint used by GDBserver. */ + +struct other_breakpoint +{ + struct breakpoint base; + + /* Function to call when we hit this breakpoint. If it returns 1, + the breakpoint shall be deleted; 0 or if this callback is NULL, + it will be left inserted. */ + int (*handler) (CORE_ADDR); +}; + +/* Breakpoint for single step. */ + +struct single_step_breakpoint +{ + struct breakpoint base; + + /* Thread the reinsert breakpoint belongs to. */ + ptid_t ptid; +}; + +/* Return the breakpoint size from its kind. */ + +static int +bp_size (struct raw_breakpoint *bp) +{ + int size = 0; + + the_target->sw_breakpoint_from_kind (bp->kind, &size); + return size; +} + +/* Return the breakpoint opcode from its kind. */ + +static const gdb_byte * +bp_opcode (struct raw_breakpoint *bp) +{ + int size = 0; + + return the_target->sw_breakpoint_from_kind (bp->kind, &size); +} + +/* See mem-break.h. */ + +enum target_hw_bp_type +raw_bkpt_type_to_target_hw_bp_type (enum raw_bkpt_type raw_type) +{ + switch (raw_type) + { + case raw_bkpt_type_hw: + return hw_execute; + case raw_bkpt_type_write_wp: + return hw_write; + case raw_bkpt_type_read_wp: + return hw_read; + case raw_bkpt_type_access_wp: + return hw_access; + default: + internal_error (__FILE__, __LINE__, + "bad raw breakpoint type %d", (int) raw_type); + } +} + +/* See mem-break.h. */ + +static enum bkpt_type +Z_packet_to_bkpt_type (char z_type) +{ + gdb_assert ('0' <= z_type && z_type <= '4'); + + return (enum bkpt_type) (gdb_breakpoint_Z0 + (z_type - '0')); +} + +/* See mem-break.h. */ + +enum raw_bkpt_type +Z_packet_to_raw_bkpt_type (char z_type) +{ + switch (z_type) + { + case Z_PACKET_SW_BP: + return raw_bkpt_type_sw; + case Z_PACKET_HW_BP: + return raw_bkpt_type_hw; + case Z_PACKET_WRITE_WP: + return raw_bkpt_type_write_wp; + case Z_PACKET_READ_WP: + return raw_bkpt_type_read_wp; + case Z_PACKET_ACCESS_WP: + return raw_bkpt_type_access_wp; + default: + gdb_assert_not_reached ("unhandled Z packet type."); + } +} + +/* Return true if breakpoint TYPE is a GDB breakpoint. */ + +static int +is_gdb_breakpoint (enum bkpt_type type) +{ + return (type == gdb_breakpoint_Z0 + || type == gdb_breakpoint_Z1 + || type == gdb_breakpoint_Z2 + || type == gdb_breakpoint_Z3 + || type == gdb_breakpoint_Z4); +} + +bool +any_persistent_commands (process_info *proc) +{ + struct breakpoint *bp; + struct point_command_list *cl; + + for (bp = proc->breakpoints; bp != NULL; bp = bp->next) + { + if (is_gdb_breakpoint (bp->type)) + { + struct gdb_breakpoint *gdb_bp = (struct gdb_breakpoint *) bp; + + for (cl = gdb_bp->command_list; cl != NULL; cl = cl->next) + if (cl->persistence) + return true; + } + } + + return false; +} + +/* Find low-level breakpoint of type TYPE at address ADDR that is not + insert-disabled. Returns NULL if not found. */ + +static struct raw_breakpoint * +find_enabled_raw_code_breakpoint_at (CORE_ADDR addr, enum raw_bkpt_type type) +{ + struct process_info *proc = current_process (); + struct raw_breakpoint *bp; + + for (bp = proc->raw_breakpoints; bp != NULL; bp = bp->next) + if (bp->pc == addr + && bp->raw_type == type + && bp->inserted >= 0) + return bp; + + return NULL; +} + +/* Find low-level breakpoint of type TYPE at address ADDR. Returns + NULL if not found. */ + +static struct raw_breakpoint * +find_raw_breakpoint_at (CORE_ADDR addr, enum raw_bkpt_type type, int kind) +{ + struct process_info *proc = current_process (); + struct raw_breakpoint *bp; + + for (bp = proc->raw_breakpoints; bp != NULL; bp = bp->next) + if (bp->pc == addr && bp->raw_type == type && bp->kind == kind) + return bp; + + return NULL; +} + +/* See mem-break.h. */ + +int +insert_memory_breakpoint (struct raw_breakpoint *bp) +{ + unsigned char buf[MAX_BREAKPOINT_LEN]; + int err; + + /* Note that there can be fast tracepoint jumps installed in the + same memory range, so to get at the original memory, we need to + use read_inferior_memory, which masks those out. */ + err = read_inferior_memory (bp->pc, buf, bp_size (bp)); + if (err != 0) + { + if (debug_threads) + debug_printf ("Failed to read shadow memory of" + " breakpoint at 0x%s (%s).\n", + paddress (bp->pc), safe_strerror (err)); + } + else + { + memcpy (bp->old_data, buf, bp_size (bp)); + + err = the_target->write_memory (bp->pc, bp_opcode (bp), + bp_size (bp)); + if (err != 0) + { + if (debug_threads) + debug_printf ("Failed to insert breakpoint at 0x%s (%s).\n", + paddress (bp->pc), safe_strerror (err)); + } + } + return err != 0 ? -1 : 0; +} + +/* See mem-break.h */ + +int +remove_memory_breakpoint (struct raw_breakpoint *bp) +{ + unsigned char buf[MAX_BREAKPOINT_LEN]; + int err; + + /* Since there can be trap breakpoints inserted in the same address + range, we use `target_write_memory', which takes care of + layering breakpoints on top of fast tracepoints, and on top of + the buffer we pass it. This works because the caller has already + either unlinked the breakpoint or marked it uninserted. Also + note that we need to pass the current shadow contents, because + target_write_memory updates any shadow memory with what we pass + here, and we want that to be a nop. */ + memcpy (buf, bp->old_data, bp_size (bp)); + err = target_write_memory (bp->pc, buf, bp_size (bp)); + if (err != 0) + { + if (debug_threads) + debug_printf ("Failed to uninsert raw breakpoint " + "at 0x%s (%s) while deleting it.\n", + paddress (bp->pc), safe_strerror (err)); + } + return err != 0 ? -1 : 0; +} + +/* Set a RAW breakpoint of type TYPE and kind KIND at WHERE. On + success, a pointer to the new breakpoint is returned. On failure, + returns NULL and writes the error code to *ERR. */ + +static struct raw_breakpoint * +set_raw_breakpoint_at (enum raw_bkpt_type type, CORE_ADDR where, int kind, + int *err) +{ + struct process_info *proc = current_process (); + struct raw_breakpoint *bp; + + if (type == raw_bkpt_type_sw || type == raw_bkpt_type_hw) + { + bp = find_enabled_raw_code_breakpoint_at (where, type); + if (bp != NULL && bp->kind != kind) + { + /* A different kind than previously seen. The previous + breakpoint must be gone then. */ + if (debug_threads) + debug_printf ("Inconsistent breakpoint kind? Was %d, now %d.\n", + bp->kind, kind); + bp->inserted = -1; + bp = NULL; + } + } + else + bp = find_raw_breakpoint_at (where, type, kind); + + gdb::unique_xmalloc_ptr<struct raw_breakpoint> bp_holder; + if (bp == NULL) + { + bp_holder.reset (XCNEW (struct raw_breakpoint)); + bp = bp_holder.get (); + bp->pc = where; + bp->kind = kind; + bp->raw_type = type; + } + + if (!bp->inserted) + { + *err = the_target->insert_point (bp->raw_type, bp->pc, bp->kind, bp); + if (*err != 0) + { + if (debug_threads) + debug_printf ("Failed to insert breakpoint at 0x%s (%d).\n", + paddress (where), *err); + + return NULL; + } + + bp->inserted = 1; + } + + /* If the breakpoint was allocated above, we know we want to keep it + now. */ + bp_holder.release (); + + /* Link the breakpoint in, if this is the first reference. */ + if (++bp->refcount == 1) + { + bp->next = proc->raw_breakpoints; + proc->raw_breakpoints = bp; + } + return bp; +} + +/* Notice that breakpoint traps are always installed on top of fast + tracepoint jumps. This is even if the fast tracepoint is installed + at a later time compared to when the breakpoint was installed. + This means that a stopping breakpoint or tracepoint has higher + "priority". In turn, this allows having fast and slow tracepoints + (and breakpoints) at the same address behave correctly. */ + + +/* A fast tracepoint jump. */ + +struct fast_tracepoint_jump +{ + struct fast_tracepoint_jump *next; + + /* A reference count. GDB can install more than one fast tracepoint + at the same address (each with its own action list, for + example). */ + int refcount; + + /* The fast tracepoint's insertion address. There can only be one + of these for a given PC. */ + CORE_ADDR pc; + + /* Non-zero if this fast tracepoint jump is currently inserted in + the inferior. */ + int inserted; + + /* The length of the jump instruction. */ + int length; + + /* A poor-man's flexible array member, holding both the jump + instruction to insert, and a copy of the instruction that would + be in memory had not been a jump there (the shadow memory of the + tracepoint jump). */ + unsigned char insn_and_shadow[0]; +}; + +/* Fast tracepoint FP's jump instruction to insert. */ +#define fast_tracepoint_jump_insn(fp) \ + ((fp)->insn_and_shadow + 0) + +/* The shadow memory of fast tracepoint jump FP. */ +#define fast_tracepoint_jump_shadow(fp) \ + ((fp)->insn_and_shadow + (fp)->length) + + +/* Return the fast tracepoint jump set at WHERE. */ + +static struct fast_tracepoint_jump * +find_fast_tracepoint_jump_at (CORE_ADDR where) +{ + struct process_info *proc = current_process (); + struct fast_tracepoint_jump *jp; + + for (jp = proc->fast_tracepoint_jumps; jp != NULL; jp = jp->next) + if (jp->pc == where) + return jp; + + return NULL; +} + +int +fast_tracepoint_jump_here (CORE_ADDR where) +{ + struct fast_tracepoint_jump *jp = find_fast_tracepoint_jump_at (where); + + return (jp != NULL); +} + +int +delete_fast_tracepoint_jump (struct fast_tracepoint_jump *todel) +{ + struct fast_tracepoint_jump *bp, **bp_link; + int ret; + struct process_info *proc = current_process (); + + bp = proc->fast_tracepoint_jumps; + bp_link = &proc->fast_tracepoint_jumps; + + while (bp) + { + if (bp == todel) + { + if (--bp->refcount == 0) + { + struct fast_tracepoint_jump *prev_bp_link = *bp_link; + unsigned char *buf; + + /* Unlink it. */ + *bp_link = bp->next; + + /* Since there can be breakpoints inserted in the same + address range, we use `target_write_memory', which + takes care of layering breakpoints on top of fast + tracepoints, and on top of the buffer we pass it. + This works because we've already unlinked the fast + tracepoint jump above. Also note that we need to + pass the current shadow contents, because + target_write_memory updates any shadow memory with + what we pass here, and we want that to be a nop. */ + buf = (unsigned char *) alloca (bp->length); + memcpy (buf, fast_tracepoint_jump_shadow (bp), bp->length); + ret = target_write_memory (bp->pc, buf, bp->length); + if (ret != 0) + { + /* Something went wrong, relink the jump. */ + *bp_link = prev_bp_link; + + if (debug_threads) + debug_printf ("Failed to uninsert fast tracepoint jump " + "at 0x%s (%s) while deleting it.\n", + paddress (bp->pc), safe_strerror (ret)); + return ret; + } + + free (bp); + } + + return 0; + } + else + { + bp_link = &bp->next; + bp = *bp_link; + } + } + + warning ("Could not find fast tracepoint jump in list."); + return ENOENT; +} + +void +inc_ref_fast_tracepoint_jump (struct fast_tracepoint_jump *jp) +{ + jp->refcount++; +} + +struct fast_tracepoint_jump * +set_fast_tracepoint_jump (CORE_ADDR where, + unsigned char *insn, ULONGEST length) +{ + struct process_info *proc = current_process (); + struct fast_tracepoint_jump *jp; + int err; + unsigned char *buf; + + /* We refcount fast tracepoint jumps. Check if we already know + about a jump at this address. */ + jp = find_fast_tracepoint_jump_at (where); + if (jp != NULL) + { + jp->refcount++; + return jp; + } + + /* We don't, so create a new object. Double the length, because the + flexible array member holds both the jump insn, and the + shadow. */ + jp = (struct fast_tracepoint_jump *) xcalloc (1, sizeof (*jp) + (length * 2)); + jp->pc = where; + jp->length = length; + memcpy (fast_tracepoint_jump_insn (jp), insn, length); + jp->refcount = 1; + buf = (unsigned char *) alloca (length); + + /* Note that there can be trap breakpoints inserted in the same + address range. To access the original memory contents, we use + `read_inferior_memory', which masks out breakpoints. */ + err = read_inferior_memory (where, buf, length); + if (err != 0) + { + if (debug_threads) + debug_printf ("Failed to read shadow memory of" + " fast tracepoint at 0x%s (%s).\n", + paddress (where), safe_strerror (err)); + free (jp); + return NULL; + } + memcpy (fast_tracepoint_jump_shadow (jp), buf, length); + + /* Link the jump in. */ + jp->inserted = 1; + jp->next = proc->fast_tracepoint_jumps; + proc->fast_tracepoint_jumps = jp; + + /* Since there can be trap breakpoints inserted in the same address + range, we use use `target_write_memory', which takes care of + layering breakpoints on top of fast tracepoints, on top of the + buffer we pass it. This works because we've already linked in + the fast tracepoint jump above. Also note that we need to pass + the current shadow contents, because target_write_memory + updates any shadow memory with what we pass here, and we want + that to be a nop. */ + err = target_write_memory (where, buf, length); + if (err != 0) + { + if (debug_threads) + debug_printf ("Failed to insert fast tracepoint jump at 0x%s (%s).\n", + paddress (where), safe_strerror (err)); + + /* Unlink it. */ + proc->fast_tracepoint_jumps = jp->next; + free (jp); + + return NULL; + } + + return jp; +} + +void +uninsert_fast_tracepoint_jumps_at (CORE_ADDR pc) +{ + struct fast_tracepoint_jump *jp; + int err; + + jp = find_fast_tracepoint_jump_at (pc); + if (jp == NULL) + { + /* This can happen when we remove all breakpoints while handling + a step-over. */ + if (debug_threads) + debug_printf ("Could not find fast tracepoint jump at 0x%s " + "in list (uninserting).\n", + paddress (pc)); + return; + } + + if (jp->inserted) + { + unsigned char *buf; + + jp->inserted = 0; + + /* Since there can be trap breakpoints inserted in the same + address range, we use use `target_write_memory', which + takes care of layering breakpoints on top of fast + tracepoints, and on top of the buffer we pass it. This works + because we've already marked the fast tracepoint fast + tracepoint jump uninserted above. Also note that we need to + pass the current shadow contents, because + target_write_memory updates any shadow memory with what we + pass here, and we want that to be a nop. */ + buf = (unsigned char *) alloca (jp->length); + memcpy (buf, fast_tracepoint_jump_shadow (jp), jp->length); + err = target_write_memory (jp->pc, buf, jp->length); + if (err != 0) + { + jp->inserted = 1; + + if (debug_threads) + debug_printf ("Failed to uninsert fast tracepoint jump at" + " 0x%s (%s).\n", + paddress (pc), safe_strerror (err)); + } + } +} + +void +reinsert_fast_tracepoint_jumps_at (CORE_ADDR where) +{ + struct fast_tracepoint_jump *jp; + int err; + unsigned char *buf; + + jp = find_fast_tracepoint_jump_at (where); + if (jp == NULL) + { + /* This can happen when we remove breakpoints when a tracepoint + hit causes a tracing stop, while handling a step-over. */ + if (debug_threads) + debug_printf ("Could not find fast tracepoint jump at 0x%s " + "in list (reinserting).\n", + paddress (where)); + return; + } + + if (jp->inserted) + error ("Jump already inserted at reinsert time."); + + jp->inserted = 1; + + /* Since there can be trap breakpoints inserted in the same address + range, we use `target_write_memory', which takes care of + layering breakpoints on top of fast tracepoints, and on top of + the buffer we pass it. This works because we've already marked + the fast tracepoint jump inserted above. Also note that we need + to pass the current shadow contents, because + target_write_memory updates any shadow memory with what we pass + here, and we want that to be a nop. */ + buf = (unsigned char *) alloca (jp->length); + memcpy (buf, fast_tracepoint_jump_shadow (jp), jp->length); + err = target_write_memory (where, buf, jp->length); + if (err != 0) + { + jp->inserted = 0; + + if (debug_threads) + debug_printf ("Failed to reinsert fast tracepoint jump at" + " 0x%s (%s).\n", + paddress (where), safe_strerror (err)); + } +} + +/* Set a high-level breakpoint of type TYPE, with low level type + RAW_TYPE and kind KIND, at WHERE. On success, a pointer to the new + breakpoint is returned. On failure, returns NULL and writes the + error code to *ERR. HANDLER is called when the breakpoint is hit. + HANDLER should return 1 if the breakpoint should be deleted, 0 + otherwise. */ + +static struct breakpoint * +set_breakpoint (enum bkpt_type type, enum raw_bkpt_type raw_type, + CORE_ADDR where, int kind, + int (*handler) (CORE_ADDR), int *err) +{ + struct process_info *proc = current_process (); + struct breakpoint *bp; + struct raw_breakpoint *raw; + + raw = set_raw_breakpoint_at (raw_type, where, kind, err); + + if (raw == NULL) + { + /* warn? */ + return NULL; + } + + if (is_gdb_breakpoint (type)) + { + struct gdb_breakpoint *gdb_bp = XCNEW (struct gdb_breakpoint); + + bp = (struct breakpoint *) gdb_bp; + gdb_assert (handler == NULL); + } + else if (type == other_breakpoint) + { + struct other_breakpoint *other_bp = XCNEW (struct other_breakpoint); + + other_bp->handler = handler; + bp = (struct breakpoint *) other_bp; + } + else if (type == single_step_breakpoint) + { + struct single_step_breakpoint *ss_bp + = XCNEW (struct single_step_breakpoint); + + bp = (struct breakpoint *) ss_bp; + } + else + gdb_assert_not_reached ("unhandled breakpoint type"); + + bp->type = type; + bp->raw = raw; + + bp->next = proc->breakpoints; + proc->breakpoints = bp; + + return bp; +} + +/* Set breakpoint of TYPE on address WHERE with handler HANDLER. */ + +static struct breakpoint * +set_breakpoint_type_at (enum bkpt_type type, CORE_ADDR where, + int (*handler) (CORE_ADDR)) +{ + int err_ignored; + CORE_ADDR placed_address = where; + int breakpoint_kind = target_breakpoint_kind_from_pc (&placed_address); + + return set_breakpoint (type, raw_bkpt_type_sw, + placed_address, breakpoint_kind, handler, + &err_ignored); +} + +/* See mem-break.h */ + +struct breakpoint * +set_breakpoint_at (CORE_ADDR where, int (*handler) (CORE_ADDR)) +{ + return set_breakpoint_type_at (other_breakpoint, where, handler); +} + + +static int +delete_raw_breakpoint (struct process_info *proc, struct raw_breakpoint *todel) +{ + struct raw_breakpoint *bp, **bp_link; + int ret; + + bp = proc->raw_breakpoints; + bp_link = &proc->raw_breakpoints; + + while (bp) + { + if (bp == todel) + { + if (bp->inserted > 0) + { + struct raw_breakpoint *prev_bp_link = *bp_link; + + *bp_link = bp->next; + + ret = the_target->remove_point (bp->raw_type, bp->pc, + bp->kind, bp); + if (ret != 0) + { + /* Something went wrong, relink the breakpoint. */ + *bp_link = prev_bp_link; + + if (debug_threads) + debug_printf ("Failed to uninsert raw breakpoint " + "at 0x%s while deleting it.\n", + paddress (bp->pc)); + return ret; + } + } + else + *bp_link = bp->next; + + free (bp); + return 0; + } + else + { + bp_link = &bp->next; + bp = *bp_link; + } + } + + warning ("Could not find raw breakpoint in list."); + return ENOENT; +} + +static int +release_breakpoint (struct process_info *proc, struct breakpoint *bp) +{ + int newrefcount; + int ret; + + newrefcount = bp->raw->refcount - 1; + if (newrefcount == 0) + { + ret = delete_raw_breakpoint (proc, bp->raw); + if (ret != 0) + return ret; + } + else + bp->raw->refcount = newrefcount; + + free (bp); + + return 0; +} + +static int +delete_breakpoint_1 (struct process_info *proc, struct breakpoint *todel) +{ + struct breakpoint *bp, **bp_link; + int err; + + bp = proc->breakpoints; + bp_link = &proc->breakpoints; + + while (bp) + { + if (bp == todel) + { + *bp_link = bp->next; + + err = release_breakpoint (proc, bp); + if (err != 0) + return err; + + bp = *bp_link; + return 0; + } + else + { + bp_link = &bp->next; + bp = *bp_link; + } + } + + warning ("Could not find breakpoint in list."); + return ENOENT; +} + +int +delete_breakpoint (struct breakpoint *todel) +{ + struct process_info *proc = current_process (); + return delete_breakpoint_1 (proc, todel); +} + +/* Locate a GDB breakpoint of type Z_TYPE and kind KIND placed at + address ADDR and return a pointer to its structure. If KIND is -1, + the breakpoint's kind is ignored. */ + +static struct gdb_breakpoint * +find_gdb_breakpoint (char z_type, CORE_ADDR addr, int kind) +{ + struct process_info *proc = current_process (); + struct breakpoint *bp; + enum bkpt_type type = Z_packet_to_bkpt_type (z_type); + + for (bp = proc->breakpoints; bp != NULL; bp = bp->next) + if (bp->type == type && bp->raw->pc == addr + && (kind == -1 || bp->raw->kind == kind)) + return (struct gdb_breakpoint *) bp; + + return NULL; +} + +static int +z_type_supported (char z_type) +{ + return (z_type >= '0' && z_type <= '4' + && the_target->supports_z_point_type (z_type)); +} + +/* Create a new GDB breakpoint of type Z_TYPE at ADDR with kind KIND. + Returns a pointer to the newly created breakpoint on success. On + failure returns NULL and sets *ERR to either -1 for error, or 1 if + Z_TYPE breakpoints are not supported on this target. */ + +static struct gdb_breakpoint * +set_gdb_breakpoint_1 (char z_type, CORE_ADDR addr, int kind, int *err) +{ + struct gdb_breakpoint *bp; + enum bkpt_type type; + enum raw_bkpt_type raw_type; + + /* If we see GDB inserting a second code breakpoint at the same + address, then either: GDB is updating the breakpoint's conditions + or commands; or, the first breakpoint must have disappeared due + to a shared library unload. On targets where the shared + libraries are handled by userspace, like SVR4, for example, + GDBserver can't tell if a library was loaded or unloaded. Since + we refcount raw breakpoints, we must be careful to make sure GDB + breakpoints never contribute more than one reference. if we + didn't do this, in case the previous breakpoint is gone due to a + shared library unload, we'd just increase the refcount of the + previous breakpoint at this address, but the trap was not planted + in the inferior anymore, thus the breakpoint would never be hit. + Note this must be careful to not create a window where + breakpoints are removed from the target, for non-stop, in case + the target can poke at memory while the program is running. */ + if (z_type == Z_PACKET_SW_BP + || z_type == Z_PACKET_HW_BP) + { + bp = find_gdb_breakpoint (z_type, addr, -1); + + if (bp != NULL) + { + if (bp->base.raw->kind != kind) + { + /* A different kind than previously seen. The previous + breakpoint must be gone then. */ + bp->base.raw->inserted = -1; + delete_breakpoint ((struct breakpoint *) bp); + bp = NULL; + } + else if (z_type == Z_PACKET_SW_BP) + { + /* Check if the breakpoint is actually gone from the + target, due to an solib unload, for example. Might + as well validate _all_ breakpoints. */ + validate_breakpoints (); + + /* Breakpoints that don't pass validation are + deleted. */ + bp = find_gdb_breakpoint (z_type, addr, -1); + } + } + } + else + { + /* Data breakpoints for the same address but different kind are + expected. GDB doesn't merge these. The backend gets to do + that if it wants/can. */ + bp = find_gdb_breakpoint (z_type, addr, kind); + } + + if (bp != NULL) + { + /* We already know about this breakpoint, there's nothing else + to do - GDB's reference is already accounted for. Note that + whether the breakpoint inserted is left as is - we may be + stepping over it, for example, in which case we don't want to + force-reinsert it. */ + return bp; + } + + raw_type = Z_packet_to_raw_bkpt_type (z_type); + type = Z_packet_to_bkpt_type (z_type); + return (struct gdb_breakpoint *) set_breakpoint (type, raw_type, addr, + kind, NULL, err); +} + +static int +check_gdb_bp_preconditions (char z_type, int *err) +{ + /* As software/memory breakpoints work by poking at memory, we need + to prepare to access memory. If that operation fails, we need to + return error. Seeing an error, if this is the first breakpoint + of that type that GDB tries to insert, GDB would then assume the + breakpoint type is supported, but it may actually not be. So we + need to check whether the type is supported at all before + preparing to access memory. */ + if (!z_type_supported (z_type)) + { + *err = 1; + return 0; + } + + return 1; +} + +/* See mem-break.h. This is a wrapper for set_gdb_breakpoint_1 that + knows to prepare to access memory for Z0 breakpoints. */ + +struct gdb_breakpoint * +set_gdb_breakpoint (char z_type, CORE_ADDR addr, int kind, int *err) +{ + struct gdb_breakpoint *bp; + + if (!check_gdb_bp_preconditions (z_type, err)) + return NULL; + + /* If inserting a software/memory breakpoint, need to prepare to + access memory. */ + if (z_type == Z_PACKET_SW_BP) + { + if (prepare_to_access_memory () != 0) + { + *err = -1; + return NULL; + } + } + + bp = set_gdb_breakpoint_1 (z_type, addr, kind, err); + + if (z_type == Z_PACKET_SW_BP) + done_accessing_memory (); + + return bp; +} + +/* Delete a GDB breakpoint of type Z_TYPE and kind KIND previously + inserted at ADDR with set_gdb_breakpoint_at. Returns 0 on success, + -1 on error, and 1 if Z_TYPE breakpoints are not supported on this + target. */ + +static int +delete_gdb_breakpoint_1 (char z_type, CORE_ADDR addr, int kind) +{ + struct gdb_breakpoint *bp; + int err; + + bp = find_gdb_breakpoint (z_type, addr, kind); + if (bp == NULL) + return -1; + + /* Before deleting the breakpoint, make sure to free its condition + and command lists. */ + clear_breakpoint_conditions_and_commands (bp); + err = delete_breakpoint ((struct breakpoint *) bp); + if (err != 0) + return -1; + + return 0; +} + +/* See mem-break.h. This is a wrapper for delete_gdb_breakpoint that + knows to prepare to access memory for Z0 breakpoints. */ + +int +delete_gdb_breakpoint (char z_type, CORE_ADDR addr, int kind) +{ + int ret; + + if (!check_gdb_bp_preconditions (z_type, &ret)) + return ret; + + /* If inserting a software/memory breakpoint, need to prepare to + access memory. */ + if (z_type == Z_PACKET_SW_BP) + { + int err; + + err = prepare_to_access_memory (); + if (err != 0) + return -1; + } + + ret = delete_gdb_breakpoint_1 (z_type, addr, kind); + + if (z_type == Z_PACKET_SW_BP) + done_accessing_memory (); + + return ret; +} + +/* Clear all conditions associated with a breakpoint. */ + +static void +clear_breakpoint_conditions (struct gdb_breakpoint *bp) +{ + struct point_cond_list *cond; + + if (bp->cond_list == NULL) + return; + + cond = bp->cond_list; + + while (cond != NULL) + { + struct point_cond_list *cond_next; + + cond_next = cond->next; + gdb_free_agent_expr (cond->cond); + free (cond); + cond = cond_next; + } + + bp->cond_list = NULL; +} + +/* Clear all commands associated with a breakpoint. */ + +static void +clear_breakpoint_commands (struct gdb_breakpoint *bp) +{ + struct point_command_list *cmd; + + if (bp->command_list == NULL) + return; + + cmd = bp->command_list; + + while (cmd != NULL) + { + struct point_command_list *cmd_next; + + cmd_next = cmd->next; + gdb_free_agent_expr (cmd->cmd); + free (cmd); + cmd = cmd_next; + } + + bp->command_list = NULL; +} + +void +clear_breakpoint_conditions_and_commands (struct gdb_breakpoint *bp) +{ + clear_breakpoint_conditions (bp); + clear_breakpoint_commands (bp); +} + +/* Add condition CONDITION to GDBserver's breakpoint BP. */ + +static void +add_condition_to_breakpoint (struct gdb_breakpoint *bp, + struct agent_expr *condition) +{ + struct point_cond_list *new_cond; + + /* Create new condition. */ + new_cond = XCNEW (struct point_cond_list); + new_cond->cond = condition; + + /* Add condition to the list. */ + new_cond->next = bp->cond_list; + bp->cond_list = new_cond; +} + +/* Add a target-side condition CONDITION to a breakpoint. */ + +int +add_breakpoint_condition (struct gdb_breakpoint *bp, const char **condition) +{ + const char *actparm = *condition; + struct agent_expr *cond; + + if (condition == NULL) + return 1; + + if (bp == NULL) + return 0; + + cond = gdb_parse_agent_expr (&actparm); + + if (cond == NULL) + { + warning ("Condition evaluation failed. Assuming unconditional."); + return 0; + } + + add_condition_to_breakpoint (bp, cond); + + *condition = actparm; + + return 1; +} + +/* Evaluate condition (if any) at breakpoint BP. Return 1 if + true and 0 otherwise. */ + +static int +gdb_condition_true_at_breakpoint_z_type (char z_type, CORE_ADDR addr) +{ + /* Fetch registers for the current inferior. */ + struct gdb_breakpoint *bp = find_gdb_breakpoint (z_type, addr, -1); + ULONGEST value = 0; + struct point_cond_list *cl; + int err = 0; + struct eval_agent_expr_context ctx; + + if (bp == NULL) + return 0; + + /* Check if the breakpoint is unconditional. If it is, + the condition always evaluates to TRUE. */ + if (bp->cond_list == NULL) + return 1; + + ctx.regcache = get_thread_regcache (current_thread, 1); + ctx.tframe = NULL; + ctx.tpoint = NULL; + + /* Evaluate each condition in the breakpoint's list of conditions. + Return true if any of the conditions evaluates to TRUE. + + If we failed to evaluate the expression, TRUE is returned. This + forces GDB to reevaluate the conditions. */ + for (cl = bp->cond_list; + cl && !value && !err; cl = cl->next) + { + /* Evaluate the condition. */ + err = gdb_eval_agent_expr (&ctx, cl->cond, &value); + } + + if (err) + return 1; + + return (value != 0); +} + +int +gdb_condition_true_at_breakpoint (CORE_ADDR where) +{ + /* Only check code (software or hardware) breakpoints. */ + return (gdb_condition_true_at_breakpoint_z_type (Z_PACKET_SW_BP, where) + || gdb_condition_true_at_breakpoint_z_type (Z_PACKET_HW_BP, where)); +} + +/* Add commands COMMANDS to GDBserver's breakpoint BP. */ + +static void +add_commands_to_breakpoint (struct gdb_breakpoint *bp, + struct agent_expr *commands, int persist) +{ + struct point_command_list *new_cmd; + + /* Create new command. */ + new_cmd = XCNEW (struct point_command_list); + new_cmd->cmd = commands; + new_cmd->persistence = persist; + + /* Add commands to the list. */ + new_cmd->next = bp->command_list; + bp->command_list = new_cmd; +} + +/* Add a target-side command COMMAND to the breakpoint at ADDR. */ + +int +add_breakpoint_commands (struct gdb_breakpoint *bp, const char **command, + int persist) +{ + const char *actparm = *command; + struct agent_expr *cmd; + + if (command == NULL) + return 1; + + if (bp == NULL) + return 0; + + cmd = gdb_parse_agent_expr (&actparm); + + if (cmd == NULL) + { + warning ("Command evaluation failed. Disabling."); + return 0; + } + + add_commands_to_breakpoint (bp, cmd, persist); + + *command = actparm; + + return 1; +} + +/* Return true if there are no commands to run at this location, + which likely means we want to report back to GDB. */ + +static int +gdb_no_commands_at_breakpoint_z_type (char z_type, CORE_ADDR addr) +{ + struct gdb_breakpoint *bp = find_gdb_breakpoint (z_type, addr, -1); + + if (bp == NULL) + return 1; + + if (debug_threads) + debug_printf ("at 0x%s, type Z%c, bp command_list is 0x%s\n", + paddress (addr), z_type, + phex_nz ((uintptr_t) bp->command_list, 0)); + return (bp->command_list == NULL); +} + +/* Return true if there are no commands to run at this location, + which likely means we want to report back to GDB. */ + +int +gdb_no_commands_at_breakpoint (CORE_ADDR where) +{ + /* Only check code (software or hardware) breakpoints. */ + return (gdb_no_commands_at_breakpoint_z_type (Z_PACKET_SW_BP, where) + && gdb_no_commands_at_breakpoint_z_type (Z_PACKET_HW_BP, where)); +} + +/* Run a breakpoint's commands. Returns 0 if there was a problem + running any command, 1 otherwise. */ + +static int +run_breakpoint_commands_z_type (char z_type, CORE_ADDR addr) +{ + /* Fetch registers for the current inferior. */ + struct gdb_breakpoint *bp = find_gdb_breakpoint (z_type, addr, -1); + ULONGEST value = 0; + struct point_command_list *cl; + int err = 0; + struct eval_agent_expr_context ctx; + + if (bp == NULL) + return 1; + + ctx.regcache = get_thread_regcache (current_thread, 1); + ctx.tframe = NULL; + ctx.tpoint = NULL; + + for (cl = bp->command_list; + cl && !value && !err; cl = cl->next) + { + /* Run the command. */ + err = gdb_eval_agent_expr (&ctx, cl->cmd, &value); + + /* If one command has a problem, stop digging the hole deeper. */ + if (err) + return 0; + } + + return 1; +} + +void +run_breakpoint_commands (CORE_ADDR where) +{ + /* Only check code (software or hardware) breakpoints. If one + command has a problem, stop digging the hole deeper. */ + if (run_breakpoint_commands_z_type (Z_PACKET_SW_BP, where)) + run_breakpoint_commands_z_type (Z_PACKET_HW_BP, where); +} + +/* See mem-break.h. */ + +int +gdb_breakpoint_here (CORE_ADDR where) +{ + /* Only check code (software or hardware) breakpoints. */ + return (find_gdb_breakpoint (Z_PACKET_SW_BP, where, -1) != NULL + || find_gdb_breakpoint (Z_PACKET_HW_BP, where, -1) != NULL); +} + +void +set_single_step_breakpoint (CORE_ADDR stop_at, ptid_t ptid) +{ + struct single_step_breakpoint *bp; + + gdb_assert (current_ptid.pid () == ptid.pid ()); + + bp = (struct single_step_breakpoint *) set_breakpoint_type_at (single_step_breakpoint, + stop_at, NULL); + bp->ptid = ptid; +} + +void +delete_single_step_breakpoints (struct thread_info *thread) +{ + struct process_info *proc = get_thread_process (thread); + struct breakpoint *bp, **bp_link; + + bp = proc->breakpoints; + bp_link = &proc->breakpoints; + + while (bp) + { + if (bp->type == single_step_breakpoint + && ((struct single_step_breakpoint *) bp)->ptid == ptid_of (thread)) + { + struct thread_info *saved_thread = current_thread; + + current_thread = thread; + *bp_link = bp->next; + release_breakpoint (proc, bp); + bp = *bp_link; + current_thread = saved_thread; + } + else + { + bp_link = &bp->next; + bp = *bp_link; + } + } +} + +static void +uninsert_raw_breakpoint (struct raw_breakpoint *bp) +{ + if (bp->inserted < 0) + { + if (debug_threads) + debug_printf ("Breakpoint at %s is marked insert-disabled.\n", + paddress (bp->pc)); + } + else if (bp->inserted > 0) + { + int err; + + bp->inserted = 0; + + err = the_target->remove_point (bp->raw_type, bp->pc, bp->kind, bp); + if (err != 0) + { + bp->inserted = 1; + + if (debug_threads) + debug_printf ("Failed to uninsert raw breakpoint at 0x%s.\n", + paddress (bp->pc)); + } + } +} + +void +uninsert_breakpoints_at (CORE_ADDR pc) +{ + struct process_info *proc = current_process (); + struct raw_breakpoint *bp; + int found = 0; + + for (bp = proc->raw_breakpoints; bp != NULL; bp = bp->next) + if ((bp->raw_type == raw_bkpt_type_sw + || bp->raw_type == raw_bkpt_type_hw) + && bp->pc == pc) + { + found = 1; + + if (bp->inserted) + uninsert_raw_breakpoint (bp); + } + + if (!found) + { + /* This can happen when we remove all breakpoints while handling + a step-over. */ + if (debug_threads) + debug_printf ("Could not find breakpoint at 0x%s " + "in list (uninserting).\n", + paddress (pc)); + } +} + +void +uninsert_all_breakpoints (void) +{ + struct process_info *proc = current_process (); + struct raw_breakpoint *bp; + + for (bp = proc->raw_breakpoints; bp != NULL; bp = bp->next) + if ((bp->raw_type == raw_bkpt_type_sw + || bp->raw_type == raw_bkpt_type_hw) + && bp->inserted) + uninsert_raw_breakpoint (bp); +} + +void +uninsert_single_step_breakpoints (struct thread_info *thread) +{ + struct process_info *proc = get_thread_process (thread); + struct breakpoint *bp; + + for (bp = proc->breakpoints; bp != NULL; bp = bp->next) + { + if (bp->type == single_step_breakpoint + && ((struct single_step_breakpoint *) bp)->ptid == ptid_of (thread)) + { + gdb_assert (bp->raw->inserted > 0); + + /* Only uninsert the raw breakpoint if it only belongs to a + reinsert breakpoint. */ + if (bp->raw->refcount == 1) + { + struct thread_info *saved_thread = current_thread; + + current_thread = thread; + uninsert_raw_breakpoint (bp->raw); + current_thread = saved_thread; + } + } + } +} + +static void +reinsert_raw_breakpoint (struct raw_breakpoint *bp) +{ + int err; + + if (bp->inserted) + return; + + err = the_target->insert_point (bp->raw_type, bp->pc, bp->kind, bp); + if (err == 0) + bp->inserted = 1; + else if (debug_threads) + debug_printf ("Failed to reinsert breakpoint at 0x%s (%d).\n", + paddress (bp->pc), err); +} + +void +reinsert_breakpoints_at (CORE_ADDR pc) +{ + struct process_info *proc = current_process (); + struct raw_breakpoint *bp; + int found = 0; + + for (bp = proc->raw_breakpoints; bp != NULL; bp = bp->next) + if ((bp->raw_type == raw_bkpt_type_sw + || bp->raw_type == raw_bkpt_type_hw) + && bp->pc == pc) + { + found = 1; + + reinsert_raw_breakpoint (bp); + } + + if (!found) + { + /* This can happen when we remove all breakpoints while handling + a step-over. */ + if (debug_threads) + debug_printf ("Could not find raw breakpoint at 0x%s " + "in list (reinserting).\n", + paddress (pc)); + } +} + +int +has_single_step_breakpoints (struct thread_info *thread) +{ + struct process_info *proc = get_thread_process (thread); + struct breakpoint *bp, **bp_link; + + bp = proc->breakpoints; + bp_link = &proc->breakpoints; + + while (bp) + { + if (bp->type == single_step_breakpoint + && ((struct single_step_breakpoint *) bp)->ptid == ptid_of (thread)) + return 1; + else + { + bp_link = &bp->next; + bp = *bp_link; + } + } + + return 0; +} + +void +reinsert_all_breakpoints (void) +{ + struct process_info *proc = current_process (); + struct raw_breakpoint *bp; + + for (bp = proc->raw_breakpoints; bp != NULL; bp = bp->next) + if ((bp->raw_type == raw_bkpt_type_sw + || bp->raw_type == raw_bkpt_type_hw) + && !bp->inserted) + reinsert_raw_breakpoint (bp); +} + +void +reinsert_single_step_breakpoints (struct thread_info *thread) +{ + struct process_info *proc = get_thread_process (thread); + struct breakpoint *bp; + + for (bp = proc->breakpoints; bp != NULL; bp = bp->next) + { + if (bp->type == single_step_breakpoint + && ((struct single_step_breakpoint *) bp)->ptid == ptid_of (thread)) + { + gdb_assert (bp->raw->inserted > 0); + + if (bp->raw->refcount == 1) + { + struct thread_info *saved_thread = current_thread; + + current_thread = thread; + reinsert_raw_breakpoint (bp->raw); + current_thread = saved_thread; + } + } + } +} + +void +check_breakpoints (CORE_ADDR stop_pc) +{ + struct process_info *proc = current_process (); + struct breakpoint *bp, **bp_link; + + bp = proc->breakpoints; + bp_link = &proc->breakpoints; + + while (bp) + { + struct raw_breakpoint *raw = bp->raw; + + if ((raw->raw_type == raw_bkpt_type_sw + || raw->raw_type == raw_bkpt_type_hw) + && raw->pc == stop_pc) + { + if (!raw->inserted) + { + warning ("Hit a removed breakpoint?"); + return; + } + + if (bp->type == other_breakpoint) + { + struct other_breakpoint *other_bp + = (struct other_breakpoint *) bp; + + if (other_bp->handler != NULL && (*other_bp->handler) (stop_pc)) + { + *bp_link = bp->next; + + release_breakpoint (proc, bp); + + bp = *bp_link; + continue; + } + } + } + + bp_link = &bp->next; + bp = *bp_link; + } +} + +int +breakpoint_here (CORE_ADDR addr) +{ + struct process_info *proc = current_process (); + struct raw_breakpoint *bp; + + for (bp = proc->raw_breakpoints; bp != NULL; bp = bp->next) + if ((bp->raw_type == raw_bkpt_type_sw + || bp->raw_type == raw_bkpt_type_hw) + && bp->pc == addr) + return 1; + + return 0; +} + +int +breakpoint_inserted_here (CORE_ADDR addr) +{ + struct process_info *proc = current_process (); + struct raw_breakpoint *bp; + + for (bp = proc->raw_breakpoints; bp != NULL; bp = bp->next) + if ((bp->raw_type == raw_bkpt_type_sw + || bp->raw_type == raw_bkpt_type_hw) + && bp->pc == addr + && bp->inserted) + return 1; + + return 0; +} + +/* See mem-break.h. */ + +int +software_breakpoint_inserted_here (CORE_ADDR addr) +{ + struct process_info *proc = current_process (); + struct raw_breakpoint *bp; + + for (bp = proc->raw_breakpoints; bp != NULL; bp = bp->next) + if (bp->raw_type == raw_bkpt_type_sw + && bp->pc == addr + && bp->inserted) + return 1; + + return 0; +} + +/* See mem-break.h. */ + +int +hardware_breakpoint_inserted_here (CORE_ADDR addr) +{ + struct process_info *proc = current_process (); + struct raw_breakpoint *bp; + + for (bp = proc->raw_breakpoints; bp != NULL; bp = bp->next) + if (bp->raw_type == raw_bkpt_type_hw + && bp->pc == addr + && bp->inserted) + return 1; + + return 0; +} + +/* See mem-break.h. */ + +int +single_step_breakpoint_inserted_here (CORE_ADDR addr) +{ + struct process_info *proc = current_process (); + struct breakpoint *bp; + + for (bp = proc->breakpoints; bp != NULL; bp = bp->next) + if (bp->type == single_step_breakpoint + && bp->raw->pc == addr + && bp->raw->inserted) + return 1; + + return 0; +} + +static int +validate_inserted_breakpoint (struct raw_breakpoint *bp) +{ + unsigned char *buf; + int err; + + gdb_assert (bp->inserted); + gdb_assert (bp->raw_type == raw_bkpt_type_sw); + + buf = (unsigned char *) alloca (bp_size (bp)); + err = the_target->read_memory (bp->pc, buf, bp_size (bp)); + if (err || memcmp (buf, bp_opcode (bp), bp_size (bp)) != 0) + { + /* Tag it as gone. */ + bp->inserted = -1; + return 0; + } + + return 1; +} + +static void +delete_disabled_breakpoints (void) +{ + struct process_info *proc = current_process (); + struct breakpoint *bp, *next; + + for (bp = proc->breakpoints; bp != NULL; bp = next) + { + next = bp->next; + if (bp->raw->inserted < 0) + { + /* If single_step_breakpoints become disabled, that means the + manipulations (insertion and removal) of them are wrong. */ + gdb_assert (bp->type != single_step_breakpoint); + delete_breakpoint_1 (proc, bp); + } + } +} + +/* Check if breakpoints we inserted still appear to be inserted. They + may disappear due to a shared library unload, and worse, a new + shared library may be reloaded at the same address as the + previously unloaded one. If that happens, we should make sure that + the shadow memory of the old breakpoints isn't used when reading or + writing memory. */ + +void +validate_breakpoints (void) +{ + struct process_info *proc = current_process (); + struct breakpoint *bp; + + for (bp = proc->breakpoints; bp != NULL; bp = bp->next) + { + struct raw_breakpoint *raw = bp->raw; + + if (raw->raw_type == raw_bkpt_type_sw && raw->inserted > 0) + validate_inserted_breakpoint (raw); + } + + delete_disabled_breakpoints (); +} + +void +check_mem_read (CORE_ADDR mem_addr, unsigned char *buf, int mem_len) +{ + struct process_info *proc = current_process (); + struct raw_breakpoint *bp = proc->raw_breakpoints; + struct fast_tracepoint_jump *jp = proc->fast_tracepoint_jumps; + CORE_ADDR mem_end = mem_addr + mem_len; + int disabled_one = 0; + + for (; jp != NULL; jp = jp->next) + { + CORE_ADDR bp_end = jp->pc + jp->length; + CORE_ADDR start, end; + int copy_offset, copy_len, buf_offset; + + gdb_assert (fast_tracepoint_jump_shadow (jp) >= buf + mem_len + || buf >= fast_tracepoint_jump_shadow (jp) + (jp)->length); + + if (mem_addr >= bp_end) + continue; + if (jp->pc >= mem_end) + continue; + + start = jp->pc; + if (mem_addr > start) + start = mem_addr; + + end = bp_end; + if (end > mem_end) + end = mem_end; + + copy_len = end - start; + copy_offset = start - jp->pc; + buf_offset = start - mem_addr; + + if (jp->inserted) + memcpy (buf + buf_offset, + fast_tracepoint_jump_shadow (jp) + copy_offset, + copy_len); + } + + for (; bp != NULL; bp = bp->next) + { + CORE_ADDR bp_end = bp->pc + bp_size (bp); + CORE_ADDR start, end; + int copy_offset, copy_len, buf_offset; + + if (bp->raw_type != raw_bkpt_type_sw) + continue; + + gdb_assert (bp->old_data >= buf + mem_len + || buf >= &bp->old_data[sizeof (bp->old_data)]); + + if (mem_addr >= bp_end) + continue; + if (bp->pc >= mem_end) + continue; + + start = bp->pc; + if (mem_addr > start) + start = mem_addr; + + end = bp_end; + if (end > mem_end) + end = mem_end; + + copy_len = end - start; + copy_offset = start - bp->pc; + buf_offset = start - mem_addr; + + if (bp->inserted > 0) + { + if (validate_inserted_breakpoint (bp)) + memcpy (buf + buf_offset, bp->old_data + copy_offset, copy_len); + else + disabled_one = 1; + } + } + + if (disabled_one) + delete_disabled_breakpoints (); +} + +void +check_mem_write (CORE_ADDR mem_addr, unsigned char *buf, + const unsigned char *myaddr, int mem_len) +{ + struct process_info *proc = current_process (); + struct raw_breakpoint *bp = proc->raw_breakpoints; + struct fast_tracepoint_jump *jp = proc->fast_tracepoint_jumps; + CORE_ADDR mem_end = mem_addr + mem_len; + int disabled_one = 0; + + /* First fast tracepoint jumps, then breakpoint traps on top. */ + + for (; jp != NULL; jp = jp->next) + { + CORE_ADDR jp_end = jp->pc + jp->length; + CORE_ADDR start, end; + int copy_offset, copy_len, buf_offset; + + gdb_assert (fast_tracepoint_jump_shadow (jp) >= myaddr + mem_len + || myaddr >= fast_tracepoint_jump_shadow (jp) + (jp)->length); + gdb_assert (fast_tracepoint_jump_insn (jp) >= buf + mem_len + || buf >= fast_tracepoint_jump_insn (jp) + (jp)->length); + + if (mem_addr >= jp_end) + continue; + if (jp->pc >= mem_end) + continue; + + start = jp->pc; + if (mem_addr > start) + start = mem_addr; + + end = jp_end; + if (end > mem_end) + end = mem_end; + + copy_len = end - start; + copy_offset = start - jp->pc; + buf_offset = start - mem_addr; + + memcpy (fast_tracepoint_jump_shadow (jp) + copy_offset, + myaddr + buf_offset, copy_len); + if (jp->inserted) + memcpy (buf + buf_offset, + fast_tracepoint_jump_insn (jp) + copy_offset, copy_len); + } + + for (; bp != NULL; bp = bp->next) + { + CORE_ADDR bp_end = bp->pc + bp_size (bp); + CORE_ADDR start, end; + int copy_offset, copy_len, buf_offset; + + if (bp->raw_type != raw_bkpt_type_sw) + continue; + + gdb_assert (bp->old_data >= myaddr + mem_len + || myaddr >= &bp->old_data[sizeof (bp->old_data)]); + + if (mem_addr >= bp_end) + continue; + if (bp->pc >= mem_end) + continue; + + start = bp->pc; + if (mem_addr > start) + start = mem_addr; + + end = bp_end; + if (end > mem_end) + end = mem_end; + + copy_len = end - start; + copy_offset = start - bp->pc; + buf_offset = start - mem_addr; + + memcpy (bp->old_data + copy_offset, myaddr + buf_offset, copy_len); + if (bp->inserted > 0) + { + if (validate_inserted_breakpoint (bp)) + memcpy (buf + buf_offset, bp_opcode (bp) + copy_offset, copy_len); + else + disabled_one = 1; + } + } + + if (disabled_one) + delete_disabled_breakpoints (); +} + +/* Delete all breakpoints, and un-insert them from the inferior. */ + +void +delete_all_breakpoints (void) +{ + struct process_info *proc = current_process (); + + while (proc->breakpoints) + delete_breakpoint_1 (proc, proc->breakpoints); +} + +/* Clear the "inserted" flag in all breakpoints. */ + +void +mark_breakpoints_out (struct process_info *proc) +{ + struct raw_breakpoint *raw_bp; + + for (raw_bp = proc->raw_breakpoints; raw_bp != NULL; raw_bp = raw_bp->next) + raw_bp->inserted = 0; +} + +/* Release all breakpoints, but do not try to un-insert them from the + inferior. */ + +void +free_all_breakpoints (struct process_info *proc) +{ + mark_breakpoints_out (proc); + + /* Note: use PROC explicitly instead of deferring to + delete_all_breakpoints --- CURRENT_INFERIOR may already have been + released when we get here. There should be no call to + current_process from here on. */ + while (proc->breakpoints) + delete_breakpoint_1 (proc, proc->breakpoints); +} + +/* Clone an agent expression. */ + +static struct agent_expr * +clone_agent_expr (const struct agent_expr *src_ax) +{ + struct agent_expr *ax; + + ax = XCNEW (struct agent_expr); + ax->length = src_ax->length; + ax->bytes = (unsigned char *) xcalloc (ax->length, 1); + memcpy (ax->bytes, src_ax->bytes, ax->length); + return ax; +} + +/* Deep-copy the contents of one breakpoint to another. */ + +static struct breakpoint * +clone_one_breakpoint (const struct breakpoint *src, ptid_t ptid) +{ + struct breakpoint *dest; + struct raw_breakpoint *dest_raw; + + /* Clone the raw breakpoint. */ + dest_raw = XCNEW (struct raw_breakpoint); + dest_raw->raw_type = src->raw->raw_type; + dest_raw->refcount = src->raw->refcount; + dest_raw->pc = src->raw->pc; + dest_raw->kind = src->raw->kind; + memcpy (dest_raw->old_data, src->raw->old_data, MAX_BREAKPOINT_LEN); + dest_raw->inserted = src->raw->inserted; + + /* Clone the high-level breakpoint. */ + if (is_gdb_breakpoint (src->type)) + { + struct gdb_breakpoint *gdb_dest = XCNEW (struct gdb_breakpoint); + struct point_cond_list *current_cond; + struct point_cond_list *new_cond; + struct point_cond_list *cond_tail = NULL; + struct point_command_list *current_cmd; + struct point_command_list *new_cmd; + struct point_command_list *cmd_tail = NULL; + + /* Clone the condition list. */ + for (current_cond = ((struct gdb_breakpoint *) src)->cond_list; + current_cond != NULL; + current_cond = current_cond->next) + { + new_cond = XCNEW (struct point_cond_list); + new_cond->cond = clone_agent_expr (current_cond->cond); + APPEND_TO_LIST (&gdb_dest->cond_list, new_cond, cond_tail); + } + + /* Clone the command list. */ + for (current_cmd = ((struct gdb_breakpoint *) src)->command_list; + current_cmd != NULL; + current_cmd = current_cmd->next) + { + new_cmd = XCNEW (struct point_command_list); + new_cmd->cmd = clone_agent_expr (current_cmd->cmd); + new_cmd->persistence = current_cmd->persistence; + APPEND_TO_LIST (&gdb_dest->command_list, new_cmd, cmd_tail); + } + + dest = (struct breakpoint *) gdb_dest; + } + else if (src->type == other_breakpoint) + { + struct other_breakpoint *other_dest = XCNEW (struct other_breakpoint); + + other_dest->handler = ((struct other_breakpoint *) src)->handler; + dest = (struct breakpoint *) other_dest; + } + else if (src->type == single_step_breakpoint) + { + struct single_step_breakpoint *ss_dest + = XCNEW (struct single_step_breakpoint); + + dest = (struct breakpoint *) ss_dest; + /* Since single-step breakpoint is thread specific, don't copy + thread id from SRC, use ID instead. */ + ss_dest->ptid = ptid; + } + else + gdb_assert_not_reached ("unhandled breakpoint type"); + + dest->type = src->type; + dest->raw = dest_raw; + + return dest; +} + +/* See mem-break.h. */ + +void +clone_all_breakpoints (struct thread_info *child_thread, + const struct thread_info *parent_thread) +{ + const struct breakpoint *bp; + struct breakpoint *new_bkpt; + struct breakpoint *bkpt_tail = NULL; + struct raw_breakpoint *raw_bkpt_tail = NULL; + struct process_info *child_proc = get_thread_process (child_thread); + struct process_info *parent_proc = get_thread_process (parent_thread); + struct breakpoint **new_list = &child_proc->breakpoints; + struct raw_breakpoint **new_raw_list = &child_proc->raw_breakpoints; + + for (bp = parent_proc->breakpoints; bp != NULL; bp = bp->next) + { + new_bkpt = clone_one_breakpoint (bp, ptid_of (child_thread)); + APPEND_TO_LIST (new_list, new_bkpt, bkpt_tail); + APPEND_TO_LIST (new_raw_list, new_bkpt->raw, raw_bkpt_tail); + } +} diff -Nru gdb-9.1/gdbserver/mem-break.h gdb-10.2/gdbserver/mem-break.h --- gdb-9.1/gdbserver/mem-break.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/mem-break.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,279 @@ +/* Memory breakpoint interfaces for the remote server for GDB. + Copyright (C) 2002-2021 Free Software Foundation, Inc. + + Contributed by MontaVista Software. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef GDBSERVER_MEM_BREAK_H +#define GDBSERVER_MEM_BREAK_H + +#include "gdbsupport/break-common.h" + +/* Breakpoints are opaque. */ +struct breakpoint; +struct gdb_breakpoint; +struct fast_tracepoint_jump; +struct raw_breakpoint; +struct process_info; + +#define Z_PACKET_SW_BP '0' +#define Z_PACKET_HW_BP '1' +#define Z_PACKET_WRITE_WP '2' +#define Z_PACKET_READ_WP '3' +#define Z_PACKET_ACCESS_WP '4' + +/* The low level breakpoint types. */ + +enum raw_bkpt_type + { + /* Software/memory breakpoint. */ + raw_bkpt_type_sw, + + /* Hardware-assisted breakpoint. */ + raw_bkpt_type_hw, + + /* Hardware-assisted write watchpoint. */ + raw_bkpt_type_write_wp, + + /* Hardware-assisted read watchpoint. */ + raw_bkpt_type_read_wp, + + /* Hardware-assisted access watchpoint. */ + raw_bkpt_type_access_wp + }; + +/* Map the protocol breakpoint/watchpoint type Z_TYPE to the internal + raw breakpoint type. */ + +enum raw_bkpt_type Z_packet_to_raw_bkpt_type (char z_type); + +/* Map a raw breakpoint type to an enum target_hw_bp_type. */ + +enum target_hw_bp_type raw_bkpt_type_to_target_hw_bp_type + (enum raw_bkpt_type raw_type); + +/* Create a new GDB breakpoint of type Z_TYPE at ADDR with kind KIND. + Returns a pointer to the newly created breakpoint on success. On + failure returns NULL and sets *ERR to either -1 for error, or 1 if + Z_TYPE breakpoints are not supported on this target. */ + +struct gdb_breakpoint *set_gdb_breakpoint (char z_type, CORE_ADDR addr, + int kind, int *err); + +/* Delete a GDB breakpoint of type Z_TYPE and kind KIND previously + inserted at ADDR with set_gdb_breakpoint_at. Returns 0 on success, + -1 on error, and 1 if Z_TYPE breakpoints are not supported on this + target. */ + +int delete_gdb_breakpoint (char z_type, CORE_ADDR addr, int kind); + +/* Returns TRUE if there's a software or hardware (code) breakpoint at + ADDR in our tables, inserted, or not. */ + +int breakpoint_here (CORE_ADDR addr); + +/* Returns TRUE if there's any inserted software or hardware (code) + breakpoint set at ADDR. */ + +int breakpoint_inserted_here (CORE_ADDR addr); + +/* Returns TRUE if there's any inserted software breakpoint at + ADDR. */ + +int software_breakpoint_inserted_here (CORE_ADDR addr); + +/* Returns TRUE if there's any inserted hardware (code) breakpoint at + ADDR. */ + +int hardware_breakpoint_inserted_here (CORE_ADDR addr); + +/* Returns TRUE if there's any single-step breakpoint at ADDR. */ + +int single_step_breakpoint_inserted_here (CORE_ADDR addr); + +/* Clear all breakpoint conditions and commands associated with a + breakpoint. */ + +void clear_breakpoint_conditions_and_commands (struct gdb_breakpoint *bp); + +/* Set target-side condition CONDITION to the breakpoint at ADDR. + Returns false on failure. On success, advances CONDITION pointer + past the condition and returns true. */ + +int add_breakpoint_condition (struct gdb_breakpoint *bp, + const char **condition); + +/* Set target-side commands COMMANDS to the breakpoint at ADDR. + Returns false on failure. On success, advances COMMANDS past the + commands and returns true. If PERSIST, the commands should run + even while GDB is disconnected. */ + +int add_breakpoint_commands (struct gdb_breakpoint *bp, const char **commands, + int persist); + +/* Return true if PROC has any persistent command. */ +bool any_persistent_commands (process_info *proc); + +/* Evaluation condition (if any) at breakpoint BP. Return 1 if + true and 0 otherwise. */ + +int gdb_condition_true_at_breakpoint (CORE_ADDR where); + +int gdb_no_commands_at_breakpoint (CORE_ADDR where); + +void run_breakpoint_commands (CORE_ADDR where); + +/* Returns TRUE if there's a GDB breakpoint (Z0 or Z1) set at + WHERE. */ + +int gdb_breakpoint_here (CORE_ADDR where); + +/* Create a new breakpoint at WHERE, and call HANDLER when + it is hit. HANDLER should return 1 if the breakpoint + should be deleted, 0 otherwise. The type of the created + breakpoint is other_breakpoint. */ + +struct breakpoint *set_breakpoint_at (CORE_ADDR where, + int (*handler) (CORE_ADDR)); + +/* Delete a breakpoint. */ + +int delete_breakpoint (struct breakpoint *bkpt); + +/* Set a single-step breakpoint at STOP_AT for thread represented by + PTID. */ + +void set_single_step_breakpoint (CORE_ADDR stop_at, ptid_t ptid); + +/* Delete all single-step breakpoints of THREAD. */ + +void delete_single_step_breakpoints (struct thread_info *thread); + +/* Reinsert all single-step breakpoints of THREAD. */ + +void reinsert_single_step_breakpoints (struct thread_info *thread); + +/* Uninsert all single-step breakpoints of THREAD. This still leaves + the single-step breakpoints in the table. */ + +void uninsert_single_step_breakpoints (struct thread_info *thread); + +/* Reinsert breakpoints at WHERE (and change their status to + inserted). */ + +void reinsert_breakpoints_at (CORE_ADDR where); + +/* The THREAD has single-step breakpoints or not. */ + +int has_single_step_breakpoints (struct thread_info *thread); + +/* Uninsert breakpoints at WHERE (and change their status to + uninserted). This still leaves the breakpoints in the table. */ + +void uninsert_breakpoints_at (CORE_ADDR where); + +/* Reinsert all breakpoints of the current process (and change their + status to inserted). */ + +void reinsert_all_breakpoints (void); + +/* Uninsert all breakpoints of the current process (and change their + status to uninserted). This still leaves the breakpoints in the + table. */ + +void uninsert_all_breakpoints (void); + +/* See if any breakpoint claims ownership of STOP_PC. Call the handler for + the breakpoint, if found. */ + +void check_breakpoints (CORE_ADDR stop_pc); + +/* See if any breakpoints shadow the target memory area from MEM_ADDR + to MEM_ADDR + MEM_LEN. Update the data already read from the target + (in BUF) if necessary. */ + +void check_mem_read (CORE_ADDR mem_addr, unsigned char *buf, int mem_len); + +/* See if any breakpoints shadow the target memory area from MEM_ADDR + to MEM_ADDR + MEM_LEN. Update the data to be written to the target + (in BUF, a copy of MYADDR on entry) if necessary, as well as the + original data for any breakpoints. */ + +void check_mem_write (CORE_ADDR mem_addr, + unsigned char *buf, const unsigned char *myaddr, int mem_len); + +/* Delete all breakpoints. */ + +void delete_all_breakpoints (void); + +/* Clear the "inserted" flag in all breakpoints of PROC. */ + +void mark_breakpoints_out (struct process_info *proc); + +/* Delete all breakpoints, but do not try to un-insert them from the + inferior. */ + +void free_all_breakpoints (struct process_info *proc); + +/* Check if breakpoints still seem to be inserted in the inferior. */ + +void validate_breakpoints (void); + +/* Insert a fast tracepoint jump at WHERE, using instruction INSN, of + LENGTH bytes. */ + +struct fast_tracepoint_jump *set_fast_tracepoint_jump (CORE_ADDR where, + unsigned char *insn, + ULONGEST length); + +/* Increment reference counter of JP. */ +void inc_ref_fast_tracepoint_jump (struct fast_tracepoint_jump *jp); + +/* Delete fast tracepoint jump TODEL from our tables, and uninsert if + from memory. */ + +int delete_fast_tracepoint_jump (struct fast_tracepoint_jump *todel); + +/* Returns true if there's fast tracepoint jump set at WHERE. */ + +int fast_tracepoint_jump_here (CORE_ADDR); + +/* Uninsert fast tracepoint jumps at WHERE (and change their status to + uninserted). This still leaves the tracepoints in the table. */ + +void uninsert_fast_tracepoint_jumps_at (CORE_ADDR pc); + +/* Reinsert fast tracepoint jumps at WHERE (and change their status to + inserted). */ + +void reinsert_fast_tracepoint_jumps_at (CORE_ADDR where); + +/* Insert a memory breakpoint. */ + +int insert_memory_breakpoint (struct raw_breakpoint *bp); + +/* Remove a previously inserted memory breakpoint. */ + +int remove_memory_breakpoint (struct raw_breakpoint *bp); + +/* Create a new breakpoint list in CHILD_THREAD's process that is a + copy of breakpoint list in PARENT_THREAD's process. */ + +void clone_all_breakpoints (struct thread_info *child_thread, + const struct thread_info *parent_thread); + +#endif /* GDBSERVER_MEM_BREAK_H */ diff -Nru gdb-9.1/gdbserver/netbsd-amd64-low.cc gdb-10.2/gdbserver/netbsd-amd64-low.cc --- gdb-9.1/gdbserver/netbsd-amd64-low.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/netbsd-amd64-low.cc 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,187 @@ +/* Copyright (C) 2020-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include <sys/types.h> +#include <sys/ptrace.h> +#include <limits.h> + +#include "server.h" +#include "netbsd-low.h" +#include "gdbsupport/x86-xstate.h" +#include "arch/amd64.h" +#include "x86-tdesc.h" +#include "tdesc.h" + +/* The index of various registers inside the regcache. */ + +enum netbsd_x86_64_gdb_regnum +{ + AMD64_RAX_REGNUM, /* %rax */ + AMD64_RBX_REGNUM, /* %rbx */ + AMD64_RCX_REGNUM, /* %rcx */ + AMD64_RDX_REGNUM, /* %rdx */ + AMD64_RSI_REGNUM, /* %rsi */ + AMD64_RDI_REGNUM, /* %rdi */ + AMD64_RBP_REGNUM, /* %rbp */ + AMD64_RSP_REGNUM, /* %rsp */ + AMD64_R8_REGNUM, /* %r8 */ + AMD64_R9_REGNUM, /* %r9 */ + AMD64_R10_REGNUM, /* %r10 */ + AMD64_R11_REGNUM, /* %r11 */ + AMD64_R12_REGNUM, /* %r12 */ + AMD64_R13_REGNUM, /* %r13 */ + AMD64_R14_REGNUM, /* %r14 */ + AMD64_R15_REGNUM, /* %r15 */ + AMD64_RIP_REGNUM, /* %rip */ + AMD64_EFLAGS_REGNUM, /* %eflags */ + AMD64_CS_REGNUM, /* %cs */ + AMD64_SS_REGNUM, /* %ss */ + AMD64_DS_REGNUM, /* %ds */ + AMD64_ES_REGNUM, /* %es */ + AMD64_FS_REGNUM, /* %fs */ + AMD64_GS_REGNUM, /* %gs */ + AMD64_ST0_REGNUM = 24, /* %st0 */ + AMD64_ST1_REGNUM, /* %st1 */ + AMD64_FCTRL_REGNUM = AMD64_ST0_REGNUM + 8, + AMD64_FSTAT_REGNUM = AMD64_ST0_REGNUM + 9, + AMD64_FTAG_REGNUM = AMD64_ST0_REGNUM + 10, + AMD64_XMM0_REGNUM = 40, /* %xmm0 */ + AMD64_XMM1_REGNUM, /* %xmm1 */ + AMD64_MXCSR_REGNUM = AMD64_XMM0_REGNUM + 16, + AMD64_YMM0H_REGNUM, /* %ymm0h */ + AMD64_YMM15H_REGNUM = AMD64_YMM0H_REGNUM + 15, + AMD64_BND0R_REGNUM = AMD64_YMM15H_REGNUM + 1, + AMD64_BND3R_REGNUM = AMD64_BND0R_REGNUM + 3, + AMD64_BNDCFGU_REGNUM, + AMD64_BNDSTATUS_REGNUM, + AMD64_XMM16_REGNUM, + AMD64_XMM31_REGNUM = AMD64_XMM16_REGNUM + 15, + AMD64_YMM16H_REGNUM, + AMD64_YMM31H_REGNUM = AMD64_YMM16H_REGNUM + 15, + AMD64_K0_REGNUM, + AMD64_K7_REGNUM = AMD64_K0_REGNUM + 7, + AMD64_ZMM0H_REGNUM, + AMD64_ZMM31H_REGNUM = AMD64_ZMM0H_REGNUM + 31, + AMD64_PKRU_REGNUM, + AMD64_FSBASE_REGNUM, + AMD64_GSBASE_REGNUM +}; + +/* The fill_function for the general-purpose register set. */ + +static void +netbsd_x86_64_fill_gregset (struct regcache *regcache, char *buf) +{ + struct reg *r = (struct reg *) buf; + +#define netbsd_x86_64_collect_gp(regnum, fld) do { \ + collect_register (regcache, regnum, &r->regs[_REG_##fld]); \ + } while (0) + + netbsd_x86_64_collect_gp (AMD64_RAX_REGNUM, RAX); + netbsd_x86_64_collect_gp (AMD64_RBX_REGNUM, RBX); + netbsd_x86_64_collect_gp (AMD64_RCX_REGNUM, RCX); + netbsd_x86_64_collect_gp (AMD64_RDX_REGNUM, RDX); + netbsd_x86_64_collect_gp (AMD64_RSI_REGNUM, RSI); + netbsd_x86_64_collect_gp (AMD64_RDI_REGNUM, RDI); + netbsd_x86_64_collect_gp (AMD64_RBP_REGNUM, RBP); + netbsd_x86_64_collect_gp (AMD64_RSP_REGNUM, RSP); + netbsd_x86_64_collect_gp (AMD64_R8_REGNUM, R8); + netbsd_x86_64_collect_gp (AMD64_R9_REGNUM, R9); + netbsd_x86_64_collect_gp (AMD64_R10_REGNUM, R10); + netbsd_x86_64_collect_gp (AMD64_R11_REGNUM, R11); + netbsd_x86_64_collect_gp (AMD64_R12_REGNUM, R12); + netbsd_x86_64_collect_gp (AMD64_R13_REGNUM, R13); + netbsd_x86_64_collect_gp (AMD64_R14_REGNUM, R14); + netbsd_x86_64_collect_gp (AMD64_R15_REGNUM, R15); + netbsd_x86_64_collect_gp (AMD64_RIP_REGNUM, RIP); + netbsd_x86_64_collect_gp (AMD64_EFLAGS_REGNUM, RFLAGS); + netbsd_x86_64_collect_gp (AMD64_CS_REGNUM, CS); + netbsd_x86_64_collect_gp (AMD64_SS_REGNUM, SS); + netbsd_x86_64_collect_gp (AMD64_DS_REGNUM, DS); + netbsd_x86_64_collect_gp (AMD64_ES_REGNUM, ES); + netbsd_x86_64_collect_gp (AMD64_FS_REGNUM, FS); + netbsd_x86_64_collect_gp (AMD64_GS_REGNUM, GS); +} + +/* The store_function for the general-purpose register set. */ + +static void +netbsd_x86_64_store_gregset (struct regcache *regcache, const char *buf) +{ + struct reg *r = (struct reg *) buf; + +#define netbsd_x86_64_supply_gp(regnum, fld) do { \ + supply_register (regcache, regnum, &r->regs[_REG_##fld]); \ + } while(0) + + netbsd_x86_64_supply_gp (AMD64_RAX_REGNUM, RAX); + netbsd_x86_64_supply_gp (AMD64_RBX_REGNUM, RBX); + netbsd_x86_64_supply_gp (AMD64_RCX_REGNUM, RCX); + netbsd_x86_64_supply_gp (AMD64_RDX_REGNUM, RDX); + netbsd_x86_64_supply_gp (AMD64_RSI_REGNUM, RSI); + netbsd_x86_64_supply_gp (AMD64_RDI_REGNUM, RDI); + netbsd_x86_64_supply_gp (AMD64_RBP_REGNUM, RBP); + netbsd_x86_64_supply_gp (AMD64_RSP_REGNUM, RSP); + netbsd_x86_64_supply_gp (AMD64_R8_REGNUM, R8); + netbsd_x86_64_supply_gp (AMD64_R9_REGNUM, R9); + netbsd_x86_64_supply_gp (AMD64_R10_REGNUM, R10); + netbsd_x86_64_supply_gp (AMD64_R11_REGNUM, R11); + netbsd_x86_64_supply_gp (AMD64_R12_REGNUM, R12); + netbsd_x86_64_supply_gp (AMD64_R13_REGNUM, R13); + netbsd_x86_64_supply_gp (AMD64_R14_REGNUM, R14); + netbsd_x86_64_supply_gp (AMD64_R15_REGNUM, R15); + netbsd_x86_64_supply_gp (AMD64_RIP_REGNUM, RIP); + netbsd_x86_64_supply_gp (AMD64_EFLAGS_REGNUM, RFLAGS); + netbsd_x86_64_supply_gp (AMD64_CS_REGNUM, CS); + netbsd_x86_64_supply_gp (AMD64_SS_REGNUM, SS); + netbsd_x86_64_supply_gp (AMD64_DS_REGNUM, DS); + netbsd_x86_64_supply_gp (AMD64_ES_REGNUM, ES); + netbsd_x86_64_supply_gp (AMD64_FS_REGNUM, FS); + netbsd_x86_64_supply_gp (AMD64_GS_REGNUM, GS); +} + +/* Implements the netbsd_target_ops.arch_setup routine. */ + +static void +netbsd_x86_64_arch_setup (void) +{ + struct target_desc *tdesc + = amd64_create_target_description (X86_XSTATE_SSE_MASK, false, false, false); + + init_target_desc (tdesc, amd64_expedite_regs); + + netbsd_tdesc = tdesc; +} + +/* Description of all the x86-netbsd register sets. */ + +struct netbsd_regset_info netbsd_target_regsets[] = +{ + /* General Purpose Registers. */ + {PT_GETREGS, PT_SETREGS, sizeof (struct reg), + netbsd_x86_64_fill_gregset, netbsd_x86_64_store_gregset}, + /* End of list marker. */ + {0, 0, -1, NULL, NULL } +}; + +/* The netbsd_target_ops vector for x86-netbsd. */ + +struct netbsd_target_ops the_low_target = +{ + netbsd_x86_64_arch_setup, +}; diff -Nru gdb-9.1/gdbserver/netbsd-low.cc gdb-10.2/gdbserver/netbsd-low.cc --- gdb-9.1/gdbserver/netbsd-low.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/netbsd-low.cc 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,1327 @@ +/* Copyright (C) 2020-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "server.h" +#include "target.h" +#include "netbsd-low.h" +#include "nat/netbsd-nat.h" + +#include <sys/param.h> +#include <sys/types.h> + +#include <sys/ptrace.h> +#include <sys/sysctl.h> + +#include <limits.h> +#include <unistd.h> +#include <signal.h> + +#include <elf.h> + +#include <type_traits> + +#include "gdbsupport/eintr.h" +#include "gdbsupport/gdb_wait.h" +#include "gdbsupport/filestuff.h" +#include "gdbsupport/common-inferior.h" +#include "nat/fork-inferior.h" +#include "hostio.h" + +int using_threads = 1; + +const struct target_desc *netbsd_tdesc; + +/* Call add_process with the given parameters, and initialize + the process' private data. */ + +static void +netbsd_add_process (int pid, int attached) +{ + struct process_info *proc = add_process (pid, attached); + proc->tdesc = netbsd_tdesc; + proc->priv = nullptr; +} + +/* Callback used by fork_inferior to start tracing the inferior. */ + +static void +netbsd_ptrace_fun () +{ + /* Switch child to its own process group so that signals won't + directly affect GDBserver. */ + if (setpgid (0, 0) < 0) + trace_start_error_with_name (("setpgid")); + + if (ptrace (PT_TRACE_ME, 0, nullptr, 0) < 0) + trace_start_error_with_name (("ptrace")); + + /* If GDBserver is connected to gdb via stdio, redirect the inferior's + stdout to stderr so that inferior i/o doesn't corrupt the connection. + Also, redirect stdin to /dev/null. */ + if (remote_connection_is_stdio ()) + { + if (close (0) < 0) + trace_start_error_with_name (("close")); + if (open ("/dev/null", O_RDONLY) < 0) + trace_start_error_with_name (("open")); + if (dup2 (2, 1) < 0) + trace_start_error_with_name (("dup2")); + if (write (2, "stdin/stdout redirected\n", + sizeof ("stdin/stdout redirected\n") - 1) < 0) + { + /* Errors ignored. */ + } + } +} + +/* Implement the create_inferior method of the target_ops vector. */ + +int +netbsd_process_target::create_inferior (const char *program, + const std::vector<char *> &program_args) +{ + std::string str_program_args = construct_inferior_arguments (program_args); + + pid_t pid = fork_inferior (program, str_program_args.c_str (), + get_environ ()->envp (), netbsd_ptrace_fun, + nullptr, nullptr, nullptr, nullptr); + + netbsd_add_process (pid, 0); + + post_fork_inferior (pid, program); + + return pid; +} + +/* Implement the post_create_inferior target_ops method. */ + +void +netbsd_process_target::post_create_inferior () +{ + pid_t pid = current_process ()->pid; + netbsd_nat::enable_proc_events (pid); +} + +/* Implement the attach target_ops method. */ + +int +netbsd_process_target::attach (unsigned long pid) +{ + /* Unimplemented. */ + return -1; +} + +/* Returns true if GDB is interested in any child syscalls. */ + +static bool +gdb_catching_syscalls_p (pid_t pid) +{ + struct process_info *proc = find_process_pid (pid); + return !proc->syscalls_to_catch.empty (); +} + +/* Implement the resume target_ops method. */ + +void +netbsd_process_target::resume (struct thread_resume *resume_info, size_t n) +{ + ptid_t resume_ptid = resume_info[0].thread; + const int signal = resume_info[0].sig; + const bool step = resume_info[0].kind == resume_step; + + if (resume_ptid == minus_one_ptid) + resume_ptid = ptid_of (current_thread); + + const pid_t pid = resume_ptid.pid (); + const lwpid_t lwp = resume_ptid.lwp (); + regcache_invalidate_pid (pid); + + auto fn + = [&] (ptid_t ptid) + { + if (step) + { + if (ptid.lwp () == lwp || n != 1) + { + if (ptrace (PT_SETSTEP, pid, NULL, ptid.lwp ()) == -1) + perror_with_name (("ptrace")); + if (ptrace (PT_RESUME, pid, NULL, ptid.lwp ()) == -1) + perror_with_name (("ptrace")); + } + else + { + if (ptrace (PT_CLEARSTEP, pid, NULL, ptid.lwp ()) == -1) + perror_with_name (("ptrace")); + if (ptrace (PT_SUSPEND, pid, NULL, ptid.lwp ()) == -1) + perror_with_name (("ptrace")); + } + } + else + { + if (ptrace (PT_CLEARSTEP, pid, NULL, ptid.lwp ()) == -1) + perror_with_name (("ptrace")); + if (ptrace (PT_RESUME, pid, NULL, ptid.lwp ()) == -1) + perror_with_name (("ptrace")); + } + }; + + netbsd_nat::for_each_thread (pid, fn); + + int request = gdb_catching_syscalls_p (pid) ? PT_CONTINUE : PT_SYSCALL; + + errno = 0; + ptrace (request, pid, (void *)1, signal); + if (errno) + perror_with_name (("ptrace")); +} + +/* Returns true if GDB is interested in the reported SYSNO syscall. */ + +static bool +netbsd_catch_this_syscall (int sysno) +{ + struct process_info *proc = current_process (); + + if (proc->syscalls_to_catch.empty ()) + return false; + + if (proc->syscalls_to_catch[0] == ANY_SYSCALL) + return true; + + for (int iter : proc->syscalls_to_catch) + if (iter == sysno) + return true; + + return false; +} + +/* Helper function for child_wait and the derivatives of child_wait. + HOSTSTATUS is the waitstatus from wait() or the equivalent; store our + translation of that in OURSTATUS. */ + +static void +netbsd_store_waitstatus (struct target_waitstatus *ourstatus, int hoststatus) +{ + if (WIFEXITED (hoststatus)) + { + ourstatus->kind = TARGET_WAITKIND_EXITED; + ourstatus->value.integer = WEXITSTATUS (hoststatus); + } + else if (!WIFSTOPPED (hoststatus)) + { + ourstatus->kind = TARGET_WAITKIND_SIGNALLED; + ourstatus->value.sig = gdb_signal_from_host (WTERMSIG (hoststatus)); + } + else + { + ourstatus->kind = TARGET_WAITKIND_STOPPED; + ourstatus->value.sig = gdb_signal_from_host (WSTOPSIG (hoststatus)); + } +} + +/* Implement a safe wrapper around waitpid(). */ + +static pid_t +netbsd_waitpid (ptid_t ptid, struct target_waitstatus *ourstatus, int options) +{ + int status; + + pid_t pid + = gdb::handle_eintr<int> (-1, ::waitpid, ptid.pid (), &status, options); + + if (pid == -1) + perror_with_name (_("Child process unexpectedly missing")); + + netbsd_store_waitstatus (ourstatus, status); + return pid; +} + + +/* Implement the wait target_ops method. + + Wait for the child specified by PTID to do something. Return the + process ID of the child, or MINUS_ONE_PTID in case of error; store + the status in *OURSTATUS. */ + +static ptid_t +netbsd_wait (ptid_t ptid, struct target_waitstatus *ourstatus, + int target_options) +{ + pid_t pid = netbsd_waitpid (ptid, ourstatus, target_options); + ptid_t wptid = ptid_t (pid); + + if (pid == 0) + { + gdb_assert (target_options & TARGET_WNOHANG); + ourstatus->kind = TARGET_WAITKIND_IGNORE; + return null_ptid; + } + + gdb_assert (pid != -1); + + /* If the child stopped, keep investigating its status. */ + if (ourstatus->kind != TARGET_WAITKIND_STOPPED) + return wptid; + + /* Extract the event and thread that received a signal. */ + ptrace_siginfo_t psi; + if (ptrace (PT_GET_SIGINFO, pid, &psi, sizeof (psi)) == -1) + perror_with_name (("ptrace")); + + /* Pick child's siginfo_t. */ + siginfo_t *si = &psi.psi_siginfo; + + lwpid_t lwp = psi.psi_lwpid; + + int signo = si->si_signo; + const int code = si->si_code; + + /* Construct PTID with a specified thread that received the event. + If a signal was targeted to the whole process, lwp is 0. */ + wptid = ptid_t (pid, lwp, 0); + + /* Bail out on non-debugger oriented signals. */ + if (signo != SIGTRAP) + return wptid; + + /* Stop examining non-debugger oriented SIGTRAP codes. */ + if (code <= SI_USER || code == SI_NOINFO) + return wptid; + + /* Process state for threading events. */ + ptrace_state_t pst = {}; + if (code == TRAP_LWP) + if (ptrace (PT_GET_PROCESS_STATE, pid, &pst, sizeof (pst)) == -1) + perror_with_name (("ptrace")); + + if (code == TRAP_LWP && pst.pe_report_event == PTRACE_LWP_EXIT) + { + /* If GDB attaches to a multi-threaded process, exiting + threads might be skipped during post_attach that + have not yet reported their PTRACE_LWP_EXIT event. + Ignore exited events for an unknown LWP. */ + thread_info *thr = find_thread_ptid (wptid); + if (thr == nullptr) + ourstatus->kind = TARGET_WAITKIND_SPURIOUS; + else + { + ourstatus->kind = TARGET_WAITKIND_THREAD_EXITED; + /* NetBSD does not store an LWP exit status. */ + ourstatus->value.integer = 0; + + remove_thread (thr); + } + return wptid; + } + + if (find_thread_ptid (ptid_t (pid))) + current_thread = find_thread_ptid (wptid); + + if (code == TRAP_LWP && pst.pe_report_event == PTRACE_LWP_CREATE) + { + /* If GDB attaches to a multi-threaded process, newborn + threads might be added by nbsd_add_threads that have + not yet reported their PTRACE_LWP_CREATE event. Ignore + born events for an already-known LWP. */ + if (find_thread_ptid (wptid)) + ourstatus->kind = TARGET_WAITKIND_SPURIOUS; + else + { + add_thread (wptid, NULL); + ourstatus->kind = TARGET_WAITKIND_THREAD_CREATED; + } + return wptid; + } + + if (code == TRAP_EXEC) + { + ourstatus->kind = TARGET_WAITKIND_EXECD; + ourstatus->value.execd_pathname + = xstrdup (netbsd_nat::pid_to_exec_file (pid)); + return wptid; + } + + if (code == TRAP_TRACE) + return wptid; + + if (code == TRAP_SCE || code == TRAP_SCX) + { + int sysnum = si->si_sysnum; + + if (!netbsd_catch_this_syscall(sysnum)) + { + /* If the core isn't interested in this event, ignore it. */ + ourstatus->kind = TARGET_WAITKIND_SPURIOUS; + return wptid; + } + + ourstatus->kind + = ((code == TRAP_SCE) ? TARGET_WAITKIND_SYSCALL_ENTRY : + TARGET_WAITKIND_SYSCALL_RETURN); + ourstatus->value.syscall_number = sysnum; + return wptid; + } + + if (code == TRAP_BRKPT) + { +#ifdef PTRACE_BREAKPOINT_ADJ + CORE_ADDR pc; + struct reg r; + ptrace (PT_GETREGS, pid, &r, psi.psi_lwpid); + pc = PTRACE_REG_PC (&r); + PTRACE_REG_SET_PC (&r, pc - PTRACE_BREAKPOINT_ADJ); + ptrace (PT_SETREGS, pid, &r, psi.psi_lwpid); +#endif + return wptid; + } + + /* Unclassified SIGTRAP event. */ + ourstatus->kind = TARGET_WAITKIND_SPURIOUS; + return wptid; +} + +/* Implement the wait target_ops method. */ + +ptid_t +netbsd_process_target::wait (ptid_t ptid, struct target_waitstatus *ourstatus, + int target_options) +{ + while (true) + { + ptid_t wptid = netbsd_wait (ptid, ourstatus, target_options); + + /* Register thread in the gdbcore if a thread was not reported earlier. + This is required after ::create_inferior, when the gdbcore does not + know about the first internal thread. + This may also happen on attach, when an event is registered on a thread + that was not fully initialized during the attach stage. */ + if (wptid.lwp () != 0 && !find_thread_ptid (wptid) + && ourstatus->kind != TARGET_WAITKIND_THREAD_EXITED) + add_thread (wptid, nullptr); + + switch (ourstatus->kind) + { + case TARGET_WAITKIND_EXITED: + case TARGET_WAITKIND_STOPPED: + case TARGET_WAITKIND_SIGNALLED: + case TARGET_WAITKIND_FORKED: + case TARGET_WAITKIND_VFORKED: + case TARGET_WAITKIND_EXECD: + case TARGET_WAITKIND_VFORK_DONE: + case TARGET_WAITKIND_SYSCALL_ENTRY: + case TARGET_WAITKIND_SYSCALL_RETURN: + /* Pass the result to the generic code. */ + return wptid; + case TARGET_WAITKIND_THREAD_CREATED: + case TARGET_WAITKIND_THREAD_EXITED: + /* The core needlessly stops on these events. */ + /* FALLTHROUGH */ + case TARGET_WAITKIND_SPURIOUS: + /* Spurious events are unhandled by the gdbserver core. */ + if (ptrace (PT_CONTINUE, current_process ()->pid, (void *) 1, 0) + == -1) + perror_with_name (("ptrace")); + break; + default: + error (("Unknown stopped status")); + } + } +} + +/* Implement the kill target_ops method. */ + +int +netbsd_process_target::kill (process_info *process) +{ + pid_t pid = process->pid; + if (ptrace (PT_KILL, pid, nullptr, 0) == -1) + return -1; + + int status; + if (gdb::handle_eintr<int> (-1, ::waitpid, pid, &status, 0) == -1) + return -1; + mourn (process); + return 0; +} + +/* Implement the detach target_ops method. */ + +int +netbsd_process_target::detach (process_info *process) +{ + pid_t pid = process->pid; + + ptrace (PT_DETACH, pid, (void *) 1, 0); + mourn (process); + return 0; +} + +/* Implement the mourn target_ops method. */ + +void +netbsd_process_target::mourn (struct process_info *proc) +{ + for_each_thread (proc->pid, remove_thread); + + remove_process (proc); +} + +/* Implement the join target_ops method. */ + +void +netbsd_process_target::join (int pid) +{ + /* The PT_DETACH is sufficient to detach from the process. + So no need to do anything extra. */ +} + +/* Implement the thread_alive target_ops method. */ + +bool +netbsd_process_target::thread_alive (ptid_t ptid) +{ + return netbsd_nat::thread_alive (ptid); +} + +/* Implement the fetch_registers target_ops method. */ + +void +netbsd_process_target::fetch_registers (struct regcache *regcache, int regno) +{ + struct netbsd_regset_info *regset = netbsd_target_regsets; + ptid_t inferior_ptid = ptid_of (current_thread); + + while (regset->size >= 0) + { + std::vector<char> buf; + buf.resize (regset->size); + int res = ptrace (regset->get_request, inferior_ptid.pid (), buf.data (), + inferior_ptid.lwp ()); + if (res == -1) + perror_with_name (("ptrace")); + regset->store_function (regcache, buf.data ()); + regset++; + } +} + +/* Implement the store_registers target_ops method. */ + +void +netbsd_process_target::store_registers (struct regcache *regcache, int regno) +{ + struct netbsd_regset_info *regset = netbsd_target_regsets; + ptid_t inferior_ptid = ptid_of (current_thread); + + while (regset->size >= 0) + { + std::vector<char> buf; + buf.resize (regset->size); + int res = ptrace (regset->get_request, inferior_ptid.pid (), buf.data (), + inferior_ptid.lwp ()); + if (res == -1) + perror_with_name (("ptrace")); + + /* Then overlay our cached registers on that. */ + regset->fill_function (regcache, buf.data ()); + /* Only now do we write the register set. */ + res = ptrace (regset->set_request, inferior_ptid.pid (), buf. data (), + inferior_ptid.lwp ()); + if (res == -1) + perror_with_name (("ptrace")); + regset++; + } +} + +/* Implement the read_memory target_ops method. */ + +int +netbsd_process_target::read_memory (CORE_ADDR memaddr, unsigned char *myaddr, + int size) +{ + struct ptrace_io_desc io; + io.piod_op = PIOD_READ_D; + io.piod_len = size; + + pid_t pid = current_process ()->pid; + + int bytes_read = 0; + + if (size == 0) + { + /* Zero length write always succeeds. */ + return 0; + } + do + { + io.piod_offs = (void *)(memaddr + bytes_read); + io.piod_addr = myaddr + bytes_read; + + int rv = ptrace (PT_IO, pid, &io, 0); + if (rv == -1) + return errno; + if (io.piod_len == 0) + return 0; + + bytes_read += io.piod_len; + io.piod_len = size - bytes_read; + } + while (bytes_read < size); + + return 0; +} + +/* Implement the write_memory target_ops method. */ + +int +netbsd_process_target::write_memory (CORE_ADDR memaddr, + const unsigned char *myaddr, int size) +{ + struct ptrace_io_desc io; + io.piod_op = PIOD_WRITE_D; + io.piod_len = size; + + pid_t pid = current_process ()->pid; + + int bytes_written = 0; + + if (size == 0) + { + /* Zero length write always succeeds. */ + return 0; + } + + do + { + io.piod_addr = (void *)(myaddr + bytes_written); + io.piod_offs = (void *)(memaddr + bytes_written); + + int rv = ptrace (PT_IO, pid, &io, 0); + if (rv == -1) + return errno; + if (io.piod_len == 0) + return 0; + + bytes_written += io.piod_len; + io.piod_len = size - bytes_written; + } + while (bytes_written < size); + + return 0; +} + +/* Implement the request_interrupt target_ops method. */ + +void +netbsd_process_target::request_interrupt () +{ + ptid_t inferior_ptid = ptid_of (get_first_thread ()); + + ::kill (inferior_ptid.pid(), SIGINT); +} + +/* Read the AUX Vector for the specified PID, wrapping the ptrace(2) call + with the PIOD_READ_AUXV operation and using the PT_IO standard input + and output arguments. */ + +static size_t +netbsd_read_auxv(pid_t pid, void *offs, void *addr, size_t len) +{ + struct ptrace_io_desc pio; + + pio.piod_op = PIOD_READ_AUXV; + pio.piod_offs = offs; + pio.piod_addr = addr; + pio.piod_len = len; + + if (ptrace (PT_IO, pid, &pio, 0) == -1) + perror_with_name (("ptrace")); + + return pio.piod_len; +} + +/* Copy LEN bytes from inferior's auxiliary vector starting at OFFSET + to debugger memory starting at MYADDR. */ + +int +netbsd_process_target::read_auxv (CORE_ADDR offset, + unsigned char *myaddr, unsigned int len) +{ + pid_t pid = pid_of (current_thread); + + return netbsd_read_auxv (pid, (void *) (intptr_t) offset, myaddr, len); +} + +bool +netbsd_process_target::supports_z_point_type (char z_type) +{ + switch (z_type) + { + case Z_PACKET_SW_BP: + return true; + case Z_PACKET_HW_BP: + case Z_PACKET_WRITE_WP: + case Z_PACKET_READ_WP: + case Z_PACKET_ACCESS_WP: + default: + return false; /* Not supported. */ + } +} + +/* Insert {break/watch}point at address ADDR. SIZE is not used. */ + +int +netbsd_process_target::insert_point (enum raw_bkpt_type type, CORE_ADDR addr, + int size, struct raw_breakpoint *bp) +{ + switch (type) + { + case raw_bkpt_type_sw: + return insert_memory_breakpoint (bp); + case raw_bkpt_type_hw: + case raw_bkpt_type_write_wp: + case raw_bkpt_type_read_wp: + case raw_bkpt_type_access_wp: + default: + return 1; /* Not supported. */ + } +} + +/* Remove {break/watch}point at address ADDR. SIZE is not used. */ + +int +netbsd_process_target::remove_point (enum raw_bkpt_type type, CORE_ADDR addr, + int size, struct raw_breakpoint *bp) +{ + switch (type) + { + case raw_bkpt_type_sw: + return remove_memory_breakpoint (bp); + case raw_bkpt_type_hw: + case raw_bkpt_type_write_wp: + case raw_bkpt_type_read_wp: + case raw_bkpt_type_access_wp: + default: + return 1; /* Not supported. */ + } +} + +/* Implement the stopped_by_sw_breakpoint target_ops method. */ + +bool +netbsd_process_target::stopped_by_sw_breakpoint () +{ + ptrace_siginfo_t psi; + pid_t pid = current_process ()->pid; + + if (ptrace (PT_GET_SIGINFO, pid, &psi, sizeof (psi)) == -1) + perror_with_name (("ptrace")); + + return psi.psi_siginfo.si_signo == SIGTRAP && + psi.psi_siginfo.si_code == TRAP_BRKPT; +} + +/* Implement the supports_stopped_by_sw_breakpoint target_ops method. */ + +bool +netbsd_process_target::supports_stopped_by_sw_breakpoint () +{ + return true; +} + +/* Implement the supports_qxfer_siginfo target_ops method. */ + +bool +netbsd_process_target::supports_qxfer_siginfo () +{ + return true; +} + +/* Implement the qxfer_siginfo target_ops method. */ + +int +netbsd_process_target::qxfer_siginfo (const char *annex, unsigned char *readbuf, + unsigned const char *writebuf, + CORE_ADDR offset, int len) +{ + if (current_thread == nullptr) + return -1; + + pid_t pid = current_process ()->pid; + + return netbsd_nat::qxfer_siginfo(pid, annex, readbuf, writebuf, offset, len); +} + +/* Implement the supports_non_stop target_ops method. */ + +bool +netbsd_process_target::supports_non_stop () +{ + return false; +} + +/* Implement the supports_multi_process target_ops method. */ + +bool +netbsd_process_target::supports_multi_process () +{ + return true; +} + +/* Check if fork events are supported. */ + +bool +netbsd_process_target::supports_fork_events () +{ + return false; +} + +/* Check if vfork events are supported. */ + +bool +netbsd_process_target::supports_vfork_events () +{ + return false; +} + +/* Check if exec events are supported. */ + +bool +netbsd_process_target::supports_exec_events () +{ + return true; +} + +/* Implement the supports_disable_randomization target_ops method. */ + +bool +netbsd_process_target::supports_disable_randomization () +{ + return false; +} + +/* Extract &phdr and num_phdr in the inferior. Return 0 on success. */ + +template <typename T> +int get_phdr_phnum_from_proc_auxv (const pid_t pid, + CORE_ADDR *phdr_memaddr, int *num_phdr) +{ + typedef typename std::conditional<sizeof(T) == sizeof(int64_t), + Aux64Info, Aux32Info>::type auxv_type; + const size_t auxv_size = sizeof (auxv_type); + const size_t auxv_buf_size = 128 * sizeof (auxv_type); + + std::vector<char> auxv_buf; + auxv_buf.resize (auxv_buf_size); + + netbsd_read_auxv (pid, nullptr, auxv_buf.data (), auxv_buf_size); + + *phdr_memaddr = 0; + *num_phdr = 0; + + for (char *buf = auxv_buf.data (); + buf < (auxv_buf.data () + auxv_buf_size); + buf += auxv_size) + { + auxv_type *const aux = (auxv_type *) buf; + + switch (aux->a_type) + { + case AT_PHDR: + *phdr_memaddr = aux->a_v; + break; + case AT_PHNUM: + *num_phdr = aux->a_v; + break; + } + + if (*phdr_memaddr != 0 && *num_phdr != 0) + break; + } + + if (*phdr_memaddr == 0 || *num_phdr == 0) + { + warning ("Unexpected missing AT_PHDR and/or AT_PHNUM: " + "phdr_memaddr = %s, phdr_num = %d", + core_addr_to_string (*phdr_memaddr), *num_phdr); + return 2; + } + + return 0; +} + +/* Return &_DYNAMIC (via PT_DYNAMIC) in the inferior, or 0 if not present. */ + +template <typename T> +static CORE_ADDR +get_dynamic (netbsd_process_target *target, const pid_t pid) +{ + typedef typename std::conditional<sizeof(T) == sizeof(int64_t), + Elf64_Phdr, Elf32_Phdr>::type phdr_type; + const int phdr_size = sizeof (phdr_type); + + CORE_ADDR phdr_memaddr; + int num_phdr; + if (get_phdr_phnum_from_proc_auxv<T> (pid, &phdr_memaddr, &num_phdr)) + return 0; + + std::vector<unsigned char> phdr_buf; + phdr_buf.resize (num_phdr * phdr_size); + + if (target->read_memory (phdr_memaddr, phdr_buf.data (), phdr_buf.size ())) + return 0; + + /* Compute relocation: it is expected to be 0 for "regular" executables, + non-zero for PIE ones. */ + CORE_ADDR relocation = -1; + for (int i = 0; relocation == -1 && i < num_phdr; i++) + { + phdr_type *const p = (phdr_type *) (phdr_buf.data() + i * phdr_size); + + if (p->p_type == PT_PHDR) + relocation = phdr_memaddr - p->p_vaddr; + } + + if (relocation == -1) + { + /* PT_PHDR is optional, but necessary for PIE in general. Fortunately + any real world executables, including PIE executables, have always + PT_PHDR present. PT_PHDR is not present in some shared libraries or + in fpc (Free Pascal 2.4) binaries but neither of those have a need for + or present DT_DEBUG anyway (fpc binaries are statically linked). + + Therefore if there exists DT_DEBUG there is always also PT_PHDR. + + GDB could find RELOCATION also from AT_ENTRY - e_entry. */ + + return 0; + } + + for (int i = 0; i < num_phdr; i++) + { + phdr_type *const p = (phdr_type *) (phdr_buf.data () + i * phdr_size); + + if (p->p_type == PT_DYNAMIC) + return p->p_vaddr + relocation; + } + + return 0; +} + +/* Return &_r_debug in the inferior, or -1 if not present. Return value + can be 0 if the inferior does not yet have the library list initialized. + We look for DT_MIPS_RLD_MAP first. MIPS executables use this instead of + DT_DEBUG, although they sometimes contain an unused DT_DEBUG entry too. */ + +template <typename T> +static CORE_ADDR +get_r_debug (netbsd_process_target *target, const int pid) +{ + typedef typename std::conditional<sizeof(T) == sizeof(int64_t), + Elf64_Dyn, Elf32_Dyn>::type dyn_type; + const int dyn_size = sizeof (dyn_type); + unsigned char buf[sizeof (dyn_type)]; /* The larger of the two. */ + CORE_ADDR map = -1; + + CORE_ADDR dynamic_memaddr = get_dynamic<T> (target, pid); + if (dynamic_memaddr == 0) + return map; + + while (target->read_memory (dynamic_memaddr, buf, dyn_size) == 0) + { + dyn_type *const dyn = (dyn_type *) buf; +#if defined DT_MIPS_RLD_MAP + union + { + T map; + unsigned char buf[sizeof (T)]; + } + rld_map; + + if (dyn->d_tag == DT_MIPS_RLD_MAP) + { + if (read_memory (dyn->d_un.d_val, + rld_map.buf, sizeof (rld_map.buf)) == 0) + return rld_map.map; + else + break; + } +#endif /* DT_MIPS_RLD_MAP */ + + if (dyn->d_tag == DT_DEBUG && map == -1) + map = dyn->d_un.d_val; + + if (dyn->d_tag == DT_NULL) + break; + + dynamic_memaddr += dyn_size; + } + + return map; +} + +/* Read one pointer from MEMADDR in the inferior. */ + +static int +read_one_ptr (netbsd_process_target *target, CORE_ADDR memaddr, CORE_ADDR *ptr, + int ptr_size) +{ + /* Go through a union so this works on either big or little endian + hosts, when the inferior's pointer size is smaller than the size + of CORE_ADDR. It is assumed the inferior's endianness is the + same of the superior's. */ + + union + { + CORE_ADDR core_addr; + unsigned int ui; + unsigned char uc; + } addr; + + int ret = target->read_memory (memaddr, &addr.uc, ptr_size); + if (ret == 0) + { + if (ptr_size == sizeof (CORE_ADDR)) + *ptr = addr.core_addr; + else if (ptr_size == sizeof (unsigned int)) + *ptr = addr.ui; + else + gdb_assert_not_reached ("unhandled pointer size"); + } + return ret; +} + +/* Construct qXfer:libraries-svr4:read reply. */ + +template <typename T> +int +netbsd_qxfer_libraries_svr4 (netbsd_process_target *target, + const pid_t pid, const char *annex, + unsigned char *readbuf, + unsigned const char *writebuf, + CORE_ADDR offset, int len) +{ + struct link_map_offsets + { + /* Offset and size of r_debug.r_version. */ + int r_version_offset; + + /* Offset and size of r_debug.r_map. */ + int r_map_offset; + + /* Offset to l_addr field in struct link_map. */ + int l_addr_offset; + + /* Offset to l_name field in struct link_map. */ + int l_name_offset; + + /* Offset to l_ld field in struct link_map. */ + int l_ld_offset; + + /* Offset to l_next field in struct link_map. */ + int l_next_offset; + + /* Offset to l_prev field in struct link_map. */ + int l_prev_offset; + }; + + static const struct link_map_offsets lmo_32bit_offsets = + { + 0, /* r_version offset. */ + 4, /* r_debug.r_map offset. */ + 0, /* l_addr offset in link_map. */ + 4, /* l_name offset in link_map. */ + 8, /* l_ld offset in link_map. */ + 12, /* l_next offset in link_map. */ + 16 /* l_prev offset in link_map. */ + }; + + static const struct link_map_offsets lmo_64bit_offsets = + { + 0, /* r_version offset. */ + 8, /* r_debug.r_map offset. */ + 0, /* l_addr offset in link_map. */ + 8, /* l_name offset in link_map. */ + 16, /* l_ld offset in link_map. */ + 24, /* l_next offset in link_map. */ + 32 /* l_prev offset in link_map. */ + }; + + CORE_ADDR lm_addr = 0, lm_prev = 0; + CORE_ADDR l_name, l_addr, l_ld, l_next, l_prev; + int header_done = 0; + + const struct link_map_offsets *lmo + = ((sizeof (T) == sizeof (int64_t)) + ? &lmo_64bit_offsets : &lmo_32bit_offsets); + int ptr_size = sizeof (T); + + while (annex[0] != '\0') + { + const char *sep = strchr (annex, '='); + if (sep == nullptr) + break; + + int name_len = sep - annex; + CORE_ADDR *addrp; + if (name_len == 5 && startswith (annex, "start")) + addrp = &lm_addr; + else if (name_len == 4 && startswith (annex, "prev")) + addrp = &lm_prev; + else + { + annex = strchr (sep, ';'); + if (annex == nullptr) + break; + annex++; + continue; + } + + annex = decode_address_to_semicolon (addrp, sep + 1); + } + + if (lm_addr == 0) + { + CORE_ADDR r_debug = get_r_debug<T> (target, pid); + + /* We failed to find DT_DEBUG. Such situation will not change + for this inferior - do not retry it. Report it to GDB as + E01, see for the reasons at the GDB solib-svr4.c side. */ + if (r_debug == (CORE_ADDR) -1) + return -1; + + if (r_debug != 0) + { + CORE_ADDR map_offset = r_debug + lmo->r_map_offset; + if (read_one_ptr (target, map_offset, &lm_addr, ptr_size) != 0) + warning ("unable to read r_map from %s", + core_addr_to_string (map_offset)); + } + } + + std::string document = "<library-list-svr4 version=\"1.0\""; + + while (lm_addr + && read_one_ptr (target, lm_addr + lmo->l_name_offset, + &l_name, ptr_size) == 0 + && read_one_ptr (target, lm_addr + lmo->l_addr_offset, + &l_addr, ptr_size) == 0 + && read_one_ptr (target, lm_addr + lmo->l_ld_offset, + &l_ld, ptr_size) == 0 + && read_one_ptr (target, lm_addr + lmo->l_prev_offset, + &l_prev, ptr_size) == 0 + && read_one_ptr (target, lm_addr + lmo->l_next_offset, + &l_next, ptr_size) == 0) + { + if (lm_prev != l_prev) + { + warning ("Corrupted shared library list: 0x%lx != 0x%lx", + (long) lm_prev, (long) l_prev); + break; + } + + /* Ignore the first entry even if it has valid name as the first entry + corresponds to the main executable. The first entry should not be + skipped if the dynamic loader was loaded late by a static executable + (see solib-svr4.c parameter ignore_first). But in such case the main + executable does not have PT_DYNAMIC present and this function already + exited above due to failed get_r_debug. */ + if (lm_prev == 0) + string_appendf (document, " main-lm=\"0x%lx\"", + (unsigned long) lm_addr); + else + { + unsigned char libname[PATH_MAX]; + + /* Not checking for error because reading may stop before + we've got PATH_MAX worth of characters. */ + libname[0] = '\0'; + target->read_memory (l_name, libname, sizeof (libname) - 1); + libname[sizeof (libname) - 1] = '\0'; + if (libname[0] != '\0') + { + if (!header_done) + { + /* Terminate `<library-list-svr4'. */ + document += '>'; + header_done = 1; + } + + string_appendf (document, "<library name=\""); + xml_escape_text_append (&document, (char *) libname); + string_appendf (document, "\" lm=\"0x%lx\" " + "l_addr=\"0x%lx\" l_ld=\"0x%lx\"/>", + (unsigned long) lm_addr, (unsigned long) l_addr, + (unsigned long) l_ld); + } + } + + lm_prev = lm_addr; + lm_addr = l_next; + } + + if (!header_done) + { + /* Empty list; terminate `<library-list-svr4'. */ + document += "/>"; + } + else + document += "</library-list-svr4>"; + + int document_len = document.length (); + if (offset < document_len) + document_len -= offset; + else + document_len = 0; + if (len > document_len) + len = document_len; + + memcpy (readbuf, document.data () + offset, len); + + return len; +} + +/* Return true if FILE is a 64-bit ELF file, + false if the file is not a 64-bit ELF file, + and error if the file is not accessible or doesn't exist. */ + +static bool +elf_64_file_p (const char *file) +{ + int fd = gdb::handle_eintr<int> (-1, ::open, file, O_RDONLY); + if (fd < 0) + perror_with_name (("open")); + + Elf64_Ehdr header; + ssize_t ret = gdb::handle_eintr<ssize_t> (-1, ::read, fd, &header, sizeof (header)); + if (ret == -1) + perror_with_name (("read")); + gdb::handle_eintr<int> (-1, ::close, fd); + if (ret != sizeof (header)) + error ("Cannot read ELF file header: %s", file); + + if (header.e_ident[EI_MAG0] != ELFMAG0 + || header.e_ident[EI_MAG1] != ELFMAG1 + || header.e_ident[EI_MAG2] != ELFMAG2 + || header.e_ident[EI_MAG3] != ELFMAG3) + error ("Unrecognized ELF file header: %s", file); + + return header.e_ident[EI_CLASS] == ELFCLASS64; +} + +/* Construct qXfer:libraries-svr4:read reply. */ + +int +netbsd_process_target::qxfer_libraries_svr4 (const char *annex, + unsigned char *readbuf, + unsigned const char *writebuf, + CORE_ADDR offset, int len) +{ + if (writebuf != nullptr) + return -2; + if (readbuf == nullptr) + return -1; + + struct process_info *proc = current_process (); + pid_t pid = proc->pid; + bool is_elf64 = elf_64_file_p (netbsd_nat::pid_to_exec_file (pid)); + + if (is_elf64) + return netbsd_qxfer_libraries_svr4<int64_t> (this, pid, annex, readbuf, + writebuf, offset, len); + else + return netbsd_qxfer_libraries_svr4<int32_t> (this, pid, annex, readbuf, + writebuf, offset, len); +} + +/* Implement the supports_qxfer_libraries_svr4 target_ops method. */ + +bool +netbsd_process_target::supports_qxfer_libraries_svr4 () +{ + return true; +} + +/* Return the name of a file that can be opened to get the symbols for + the child process identified by PID. */ + +char * +netbsd_process_target::pid_to_exec_file (pid_t pid) +{ + return const_cast<char *> (netbsd_nat::pid_to_exec_file (pid)); +} + +/* Implementation of the target_ops method "supports_pid_to_exec_file". */ + +bool +netbsd_process_target::supports_pid_to_exec_file () +{ + return true; +} + +/* Implementation of the target_ops method "supports_hardware_single_step". */ +bool +netbsd_process_target::supports_hardware_single_step () +{ + return true; +} + +/* Implementation of the target_ops method "sw_breakpoint_from_kind". */ + +const gdb_byte * +netbsd_process_target::sw_breakpoint_from_kind (int kind, int *size) +{ + static gdb_byte brkpt[PTRACE_BREAKPOINT_SIZE] = {*PTRACE_BREAKPOINT}; + + *size = PTRACE_BREAKPOINT_SIZE; + + return brkpt; +} + +/* Implement the thread_name target_ops method. */ + +const char * +netbsd_process_target::thread_name (ptid_t ptid) +{ + return netbsd_nat::thread_name (ptid); +} + +/* Implement the supports_catch_syscall target_ops method. */ + +bool +netbsd_process_target::supports_catch_syscall () +{ + return true; +} + +/* Implement the supports_read_auxv target_ops method. */ + +bool +netbsd_process_target::supports_read_auxv () +{ + return true; +} + +/* The NetBSD target ops object. */ + +static netbsd_process_target the_netbsd_target; + +void +initialize_low () +{ + set_target_ops (&the_netbsd_target); + the_low_target.arch_setup (); +} diff -Nru gdb-9.1/gdbserver/netbsd-low.h gdb-10.2/gdbserver/netbsd-low.h --- gdb-9.1/gdbserver/netbsd-low.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/netbsd-low.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,154 @@ +/* Copyright (C) 2020-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef GDBSERVER_NETBSD_LOW_H +#define GDBSERVER_NETBSD_LOW_H + +struct regcache; +struct target_desc; + +/* Some information relative to a given register set. */ + +struct netbsd_regset_info +{ + /* The ptrace request needed to get/set registers of this set. */ + int get_request, set_request; + /* The size of the register set. */ + int size; + /* Fill the buffer BUF from the contents of the given REGCACHE. */ + void (*fill_function) (struct regcache *regcache, char *buf); + /* Store the register value in BUF in the given REGCACHE. */ + void (*store_function) (struct regcache *regcache, const char *buf); +}; + +/* A list of regsets for the target being debugged, terminated by an entry + where the size is negative. + + This list should be created by the target-specific code. */ + +extern struct netbsd_regset_info netbsd_target_regsets[]; + +/* The target-specific operations for NetBSD support. */ + +struct netbsd_target_ops +{ + /* Architecture-specific setup. */ + void (*arch_setup) (); +}; + +/* Target ops definitions for a NetBSD target. */ + +class netbsd_process_target : public process_stratum_target +{ +public: + + int create_inferior (const char *program, + const std::vector<char *> &program_args) override; + + void post_create_inferior () override; + + int attach (unsigned long pid) override; + + int kill (process_info *proc) override; + + int detach (process_info *proc) override; + + void mourn (process_info *proc) override; + + void join (int pid) override; + + bool thread_alive (ptid_t pid) override; + + void resume (thread_resume *resume_info, size_t n) override; + + ptid_t wait (ptid_t ptid, target_waitstatus *status, + int options) override; + + void fetch_registers (regcache *regcache, int regno) override; + + void store_registers (regcache *regcache, int regno) override; + + int read_memory (CORE_ADDR memaddr, unsigned char *myaddr, + int len) override; + + int write_memory (CORE_ADDR memaddr, const unsigned char *myaddr, + int len) override; + + void request_interrupt () override; + + bool supports_read_auxv () override; + + int read_auxv (CORE_ADDR offset, unsigned char *myaddr, + unsigned int len) override; + + bool supports_hardware_single_step () override; + + const gdb_byte *sw_breakpoint_from_kind (int kind, int *size) override; + + bool supports_z_point_type (char z_type) override; + + int insert_point (enum raw_bkpt_type type, CORE_ADDR addr, + int size, struct raw_breakpoint *bp) override; + + int remove_point (enum raw_bkpt_type type, CORE_ADDR addr, + int size, struct raw_breakpoint *bp) override; + + bool stopped_by_sw_breakpoint () override; + + bool supports_qxfer_siginfo () override; + + int qxfer_siginfo (const char *annex, unsigned char *readbuf, + unsigned const char *writebuf, CORE_ADDR offset, + int len) override; + + bool supports_stopped_by_sw_breakpoint () override; + + bool supports_non_stop () override; + + bool supports_multi_process () override; + + bool supports_fork_events () override; + + bool supports_vfork_events () override; + + bool supports_exec_events () override; + + bool supports_disable_randomization () override; + + bool supports_qxfer_libraries_svr4 () override; + + int qxfer_libraries_svr4 (const char*, unsigned char*, const unsigned char*, + CORE_ADDR, int) override; + + bool supports_pid_to_exec_file () override; + + char *pid_to_exec_file (int pid) override; + + const char *thread_name (ptid_t thread) override; + + bool supports_catch_syscall () override; +}; + +/* The inferior's target description. This is a global because the + NetBSD ports support neither bi-arch nor multi-process. */ + +extern struct netbsd_target_ops the_low_target; + +/* XXX: multilib */ +extern const struct target_desc *netbsd_tdesc; + +#endif /* GDBSERVER_NETBSD_LOW_H */ diff -Nru gdb-9.1/gdbserver/notif.cc gdb-10.2/gdbserver/notif.cc --- gdb-9.1/gdbserver/notif.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/notif.cc 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,154 @@ +/* Notification to GDB. + Copyright (C) 1989-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +/* Async notifications to GDB. When the state of remote target is + changed or something interesting to GDB happened, async + notifications are used to tell GDB. + + Each type of notification is represented by an object + 'struct notif_server', in which there is a queue for events to GDB + represented by 'struct notif_event'. GDBserver writes (by means of + 'write' field) each event in the queue into the buffer and send the + contents in buffer to GDB. The contents in buffer is specified in + RSP. See more in the comments to field 'queue' of + 'struct notif_server'. + + Here is the workflow of sending events and managing queue: + 1. At any time, when something interesting FOO happens, a object + of 'struct notif_event' or its sub-class EVENT is created for FOO. + + 2. Enque EVENT to the 'queue' field of 'struct notif_server' for + FOO and send corresponding notification packet to GDB if EVENT is + the first one. + #1 and #2 are done by function 'notif_push'. + + 3. EVENT is not deque'ed until the ack of FOO from GDB arrives. + Before ack of FOO arrives, FOO happens again, a new object of + EVENT is created and enque EVENT silently. + Once GDB has a chance to ack to FOO, it sends an ack to GDBserver, + and GDBserver repeatedly sends events to GDB and gets ack of FOO, + until queue is empty. Then, GDBserver sends 'OK' to GDB that all + queued notification events are done. + + # 3 is done by function 'handle_notif_ack'. */ + +#include "server.h" +#include "notif.h" + +static struct notif_server *notifs[] = +{ + ¬if_stop, +}; + +/* Write another event or an OK, if there are no more left, to + OWN_BUF. */ + +void +notif_write_event (struct notif_server *notif, char *own_buf) +{ + if (!notif->queue.empty ()) + { + struct notif_event *event = notif->queue.front (); + + notif->write (event, own_buf); + } + else + write_ok (own_buf); +} + +/* Handle the ack in buffer OWN_BUF,and packet length is PACKET_LEN. + Return 1 if the ack is handled, and return 0 if the contents + in OWN_BUF is not a ack. */ + +int +handle_notif_ack (char *own_buf, int packet_len) +{ + size_t i; + struct notif_server *np; + + for (i = 0; i < ARRAY_SIZE (notifs); i++) + { + const char *ack_name = notifs[i]->ack_name; + + if (startswith (own_buf, ack_name) + && packet_len == strlen (ack_name)) + break; + } + + if (i == ARRAY_SIZE (notifs)) + return 0; + + np = notifs[i]; + + /* If we're waiting for GDB to acknowledge a pending event, + consider that done. */ + if (!np->queue.empty ()) + { + struct notif_event *head = np->queue.front (); + np->queue.pop_front (); + + if (remote_debug) + debug_printf ("%s: acking %d\n", np->ack_name, + (int) np->queue.size ()); + + delete head; + } + + notif_write_event (np, own_buf); + + return 1; +} + +/* Put EVENT to the queue of NOTIF. */ + +void +notif_event_enque (struct notif_server *notif, + struct notif_event *event) +{ + notif->queue.push_back (event); + + if (remote_debug) + debug_printf ("pending events: %s %d\n", notif->notif_name, + (int) notif->queue.size ()); + +} + +/* Push one event NEW_EVENT of notification NP into NP->queue. */ + +void +notif_push (struct notif_server *np, struct notif_event *new_event) +{ + bool is_first_event = np->queue.empty (); + + /* Something interesting. Tell GDB about it. */ + notif_event_enque (np, new_event); + + /* If this is the first stop reply in the queue, then inform GDB + about it, by sending a corresponding notification. */ + if (is_first_event) + { + char buf[PBUFSIZ]; + char *p = buf; + + xsnprintf (p, PBUFSIZ, "%s:", np->notif_name); + p += strlen (p); + + np->write (new_event, p); + putpkt_notif (buf); + } +} diff -Nru gdb-9.1/gdbserver/notif.h gdb-10.2/gdbserver/notif.h --- gdb-9.1/gdbserver/notif.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/notif.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,68 @@ +/* Notification to GDB. + Copyright (C) 1989-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef GDBSERVER_NOTIF_H +#define GDBSERVER_NOTIF_H + +#include "target.h" +#include <list> + +/* Structure holding information related to a single event. We + keep a queue of these to push to GDB. It can be extended if + the event of given notification contains more information. */ + +struct notif_event +{ + virtual ~notif_event () + { + } + + /* No payload needed. */ +}; + +/* A type notification to GDB. An object of 'struct notif_server' + represents a type of notification. */ + +typedef struct notif_server +{ + /* The name of ack packet, for example, 'vStopped'. */ + const char *ack_name; + + /* The notification packet, for example, '%Stop'. Note that '%' is + not in 'notif_name'. */ + const char *notif_name; + + /* A queue of events to GDB. A new notif_event can be enque'ed + into QUEUE at any appropriate time, and the notif_reply is + deque'ed only when the ack from GDB arrives. */ + std::list<notif_event *> queue; + + /* Write event EVENT to OWN_BUF. */ + void (*write) (struct notif_event *event, char *own_buf); +} *notif_server_p; + +extern struct notif_server notif_stop; + +int handle_notif_ack (char *own_buf, int packet_len); +void notif_write_event (struct notif_server *notif, char *own_buf); + +void notif_push (struct notif_server *np, struct notif_event *event); +void notif_event_enque (struct notif_server *notif, + struct notif_event *event); + +#endif /* GDBSERVER_NOTIF_H */ diff -Nru gdb-9.1/gdbserver/proc-service.cc gdb-10.2/gdbserver/proc-service.cc --- gdb-9.1/gdbserver/proc-service.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/proc-service.cc 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,165 @@ +/* libthread_db helper functions for the remote server for GDB. + Copyright (C) 2002-2021 Free Software Foundation, Inc. + + Contributed by MontaVista Software. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "server.h" + +/* This file is currently tied to GNU/Linux. It should scale well to + another libthread_db implementation, with the appropriate gdbserver + hooks, but for now this means we can use GNU/Linux's target data. */ + +#include "linux-low.h" + +#include "gdb_proc_service.h" + +typedef struct ps_prochandle *gdb_ps_prochandle_t; +typedef void *gdb_ps_read_buf_t; +typedef const void *gdb_ps_write_buf_t; +typedef size_t gdb_ps_size_t; + +#ifdef HAVE_LINUX_REGSETS +#define HAVE_REGSETS +#endif + +#ifdef HAVE_REGSETS +static struct regset_info * +gregset_info (void) +{ + int i = 0; + const regs_info *regs_info = the_linux_target->get_regs_info (); + struct regsets_info *regsets_info = regs_info->regsets_info; + + while (regsets_info->regsets[i].size != -1) + { + if (regsets_info->regsets[i].type == GENERAL_REGS) + break; + i++; + } + + return ®sets_info->regsets[i]; +} +#endif + +/* Search for the symbol named NAME within the object named OBJ within + the target process PH. If the symbol is found the address of the + symbol is stored in SYM_ADDR. */ + +ps_err_e +ps_pglobal_lookup (gdb_ps_prochandle_t ph, const char *obj, + const char *name, psaddr_t *sym_addr) +{ + CORE_ADDR addr; + + if (thread_db_look_up_one_symbol (name, &addr) == 0) + return PS_NOSYM; + + *sym_addr = (psaddr_t) (unsigned long) addr; + return PS_OK; +} + +/* Read SIZE bytes from the target process PH at address ADDR and copy + them into BUF. */ + +ps_err_e +ps_pdread (gdb_ps_prochandle_t ph, psaddr_t addr, + gdb_ps_read_buf_t buf, gdb_ps_size_t size) +{ + if (read_inferior_memory ((uintptr_t) addr, (gdb_byte *) buf, size) != 0) + return PS_ERR; + return PS_OK; +} + +/* Write SIZE bytes from BUF into the target process PH at address ADDR. */ + +ps_err_e +ps_pdwrite (gdb_ps_prochandle_t ph, psaddr_t addr, + gdb_ps_write_buf_t buf, gdb_ps_size_t size) +{ + if (target_write_memory ((uintptr_t) addr, (const gdb_byte *) buf, size) + != 0) + return PS_ERR; + return PS_OK; +} + +/* Get the general registers of LWP LWPID within the target process PH + and store them in GREGSET. */ + +ps_err_e +ps_lgetregs (gdb_ps_prochandle_t ph, lwpid_t lwpid, prgregset_t gregset) +{ +#ifdef HAVE_REGSETS + struct lwp_info *lwp; + struct thread_info *reg_thread, *saved_thread; + struct regcache *regcache; + + lwp = find_lwp_pid (ptid_t (lwpid)); + if (lwp == NULL) + return PS_ERR; + + reg_thread = get_lwp_thread (lwp); + saved_thread = current_thread; + current_thread = reg_thread; + regcache = get_thread_regcache (current_thread, 1); + gregset_info ()->fill_function (regcache, gregset); + + current_thread = saved_thread; + return PS_OK; +#else + return PS_ERR; +#endif +} + +/* Set the general registers of LWP LWPID within the target process PH + from GREGSET. */ + +ps_err_e +ps_lsetregs (gdb_ps_prochandle_t ph, lwpid_t lwpid, const prgregset_t gregset) +{ + /* Unneeded. */ + return PS_ERR; +} + +/* Get the floating-point registers of LWP LWPID within the target + process PH and store them in FPREGSET. */ + +ps_err_e +ps_lgetfpregs (gdb_ps_prochandle_t ph, lwpid_t lwpid, prfpregset_t *fpregset) +{ + /* Unneeded. */ + return PS_ERR; +} + +/* Set the floating-point registers of LWP LWPID within the target + process PH from FPREGSET. */ + +ps_err_e +ps_lsetfpregs (gdb_ps_prochandle_t ph, lwpid_t lwpid, const prfpregset_t *fpregset) +{ + /* Unneeded. */ + return PS_ERR; +} + +/* Return overall process id of the target PH. Special for GNU/Linux + -- not used on Solaris. */ + +pid_t +ps_getpid (gdb_ps_prochandle_t ph) +{ + return pid_of (current_thread); +} diff -Nru gdb-9.1/gdbserver/proc-service.list gdb-10.2/gdbserver/proc-service.list --- gdb-9.1/gdbserver/proc-service.list 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/proc-service.list 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,30 @@ +/* -Wl,--dynamic-list symbols exported for libthread_db. + + Copyright (C) 2010-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +{ + ps_get_thread_area; + ps_getpid; + ps_lgetfpregs; + ps_lgetregs; + ps_lsetfpregs; + ps_lsetregs; + ps_pdread; + ps_pdwrite; + ps_pglobal_lookup; +}; diff -Nru gdb-9.1/gdbserver/README gdb-10.2/gdbserver/README --- gdb-9.1/gdbserver/README 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/README 2020-09-13 02:33:41.000000000 +0000 @@ -0,0 +1,132 @@ + README for GDBserver & GDBreplay + by Stu Grossman and Fred Fish + +Introduction: + +This is GDBserver, a remote server for Un*x-like systems. It can be used to +control the execution of a program on a target system from a GDB on a different +host. GDB and GDBserver communicate using the standard remote serial protocol. +They communicate via either a serial line or a TCP connection. + +For more information about GDBserver, see the GDB manual: + + https://sourceware.org/gdb/current/onlinedocs/gdb/Remote-Protocol.html + +Usage (server (target) side): + +First, you need to have a copy of the program you want to debug put onto +the target system. The program can be stripped to save space if needed, as +GDBserver doesn't care about symbols. All symbol handling is taken care of by +the GDB running on the host system. + +To use the server, you log on to the target system, and run the `gdbserver' +program. You must tell it (a) how to communicate with GDB, (b) the name of +your program, and (c) its arguments. The general syntax is: + + target> gdbserver COMM PROGRAM [ARGS ...] + +For example, using a serial port, you might say: + + target> gdbserver /dev/com1 emacs foo.txt + +This tells GDBserver to debug emacs with an argument of foo.txt, and to +communicate with GDB via /dev/com1. GDBserver now waits patiently for the +host GDB to communicate with it. + +To use a TCP connection, you could say: + + target> gdbserver host:2345 emacs foo.txt + +This says pretty much the same thing as the last example, except that we are +going to communicate with the host GDB via TCP. The `host:2345' argument means +that we are expecting to see a TCP connection to local TCP port 2345. +(Currently, the `host' part is ignored.) You can choose any number you want for +the port number as long as it does not conflict with any existing TCP ports on +the target system. This same port number must be used in the host GDB's +`target remote' command, which will be described shortly. Note that if you chose +a port number that conflicts with another service, GDBserver will print an error +message and exit. + +On some targets, GDBserver can also attach to running programs. This is +accomplished via the --attach argument. The syntax is: + + target> gdbserver --attach COMM PID + +PID is the process ID of a currently running process. It isn't necessary +to point GDBserver at a binary for the running process. + +Usage (host side): + +You need an unstripped copy of the target program on your host system, since +GDB needs to examine it's symbol tables and such. Start up GDB as you normally +would, with the target program as the first argument. (You may need to use the +--baud option if the serial line is running at anything except 9600 baud.) +Ie: `gdb TARGET-PROG', or `gdb --baud BAUD TARGET-PROG'. After that, the only +new command you need to know about is `target remote'. It's argument is either +a device name (usually a serial device, like `/dev/ttyb'), or a HOST:PORT +descriptor. For example: + + (gdb) target remote /dev/ttyb + +communicates with the server via serial line /dev/ttyb, and: + + (gdb) target remote the-target:2345 + +communicates via a TCP connection to port 2345 on host `the-target', where +you previously started up GDBserver with the same port number. Note that for +TCP connections, you must start up GDBserver prior to using the `target remote' +command, otherwise you may get an error that looks something like +`Connection refused'. + +Building GDBserver: + +See the `configure.srv` file for the list of host triplets you can build +GDBserver for. + +Building GDBserver for your host is very straightforward. If you build +GDB natively on a host which GDBserver supports, it will be built +automatically when you build GDB. You can also build just GDBserver: + + % mkdir obj + % cd obj + % path-to-toplevel-sources/configure --disable-gdb + % make all-gdbserver + +(If you have a combined binutils+gdb tree, you may want to also +disable other directories when configuring, e.g., binutils, gas, gold, +gprof, and ld.) + +If you prefer to cross-compile to your target, then you can also build +GDBserver that way. For example: + + % export CC=your-cross-compiler + % path-to-topevel-sources/configure --disable-gdb + % make all-gdbserver + +Using GDBreplay: + +A special hacked down version of GDBserver can be used to replay remote +debug log files created by GDB. Before using the GDB "target" command to +initiate a remote debug session, use "set remotelogfile <filename>" to tell +GDB that you want to make a recording of the serial or tcp session. Note +that when replaying the session, GDB communicates with GDBreplay via tcp, +regardless of whether the original session was via a serial link or tcp. + +Once you are done with the remote debug session, start GDBreplay and +tell it the name of the log file and the host and port number that GDB +should connect to (typically the same as the host running GDB): + + $ gdbreplay logfile host:port + +Then start GDB (preferably in a different screen or window) and use the +"target" command to connect to GDBreplay: + + (gdb) target remote host:port + +Repeat the same sequence of user commands to GDB that you gave in the +original debug session. GDB should not be able to tell that it is talking +to GDBreplay rather than a real target, all other things being equal. Note +that GDBreplay echos the command lines to stderr, as well as the contents of +the packets it sends and receives. The last command echoed by GDBreplay is +the next command that needs to be typed to GDB to continue the session in +sync with the original session. diff -Nru gdb-9.1/gdbserver/regcache.cc gdb-10.2/gdbserver/regcache.cc --- gdb-9.1/gdbserver/regcache.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/regcache.cc 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,516 @@ +/* Register support routines for the remote server for GDB. + Copyright (C) 2001-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "server.h" +#include "regdef.h" +#include "gdbthread.h" +#include "tdesc.h" +#include "gdbsupport/rsp-low.h" +#ifndef IN_PROCESS_AGENT + +struct regcache * +get_thread_regcache (struct thread_info *thread, int fetch) +{ + struct regcache *regcache; + + regcache = thread_regcache_data (thread); + + /* Threads' regcaches are created lazily, because biarch targets add + the main thread/lwp before seeing it stop for the first time, and + it is only after the target sees the thread stop for the first + time that the target has a chance of determining the process's + architecture. IOW, when we first add the process's main thread + we don't know which architecture/tdesc its regcache should + have. */ + 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); + } + + if (fetch && regcache->registers_valid == 0) + { + struct thread_info *saved_thread = current_thread; + + current_thread = thread; + /* Invalidate all registers, to prevent stale left-overs. */ + memset (regcache->register_status, REG_UNAVAILABLE, + regcache->tdesc->reg_defs.size ()); + fetch_inferior_registers (regcache, -1); + current_thread = saved_thread; + regcache->registers_valid = 1; + } + + return regcache; +} + +/* See gdbsupport/common-regcache.h. */ + +struct regcache * +get_thread_regcache_for_ptid (ptid_t ptid) +{ + return get_thread_regcache (find_thread_ptid (ptid), 1); +} + +void +regcache_invalidate_thread (struct thread_info *thread) +{ + struct regcache *regcache; + + regcache = thread_regcache_data (thread); + + if (regcache == NULL) + return; + + if (regcache->registers_valid) + { + struct thread_info *saved_thread = current_thread; + + current_thread = thread; + store_inferior_registers (regcache, -1); + current_thread = saved_thread; + } + + regcache->registers_valid = 0; +} + +/* See regcache.h. */ + +void +regcache_invalidate_pid (int pid) +{ + /* Only invalidate the regcaches of threads of this process. */ + for_each_thread (pid, regcache_invalidate_thread); +} + +/* See regcache.h. */ + +void +regcache_invalidate (void) +{ + /* Only update the threads of the current process. */ + int pid = current_thread->id.pid (); + + regcache_invalidate_pid (pid); +} + +#endif + +struct regcache * +init_register_cache (struct regcache *regcache, + const struct target_desc *tdesc, + unsigned char *regbuf) +{ + if (regbuf == NULL) + { +#ifndef IN_PROCESS_AGENT + /* Make sure to zero-initialize the register cache when it is + created, in case there are registers the target never + fetches. This way they'll read as zero instead of + garbage. */ + regcache->tdesc = tdesc; + regcache->registers + = (unsigned char *) xcalloc (1, tdesc->registers_size); + regcache->registers_owned = 1; + regcache->register_status + = (unsigned char *) xmalloc (tdesc->reg_defs.size ()); + memset ((void *) regcache->register_status, REG_UNAVAILABLE, + tdesc->reg_defs.size ()); +#else + gdb_assert_not_reached ("can't allocate memory from the heap"); +#endif + } + else + { + regcache->tdesc = tdesc; + regcache->registers = regbuf; + regcache->registers_owned = 0; +#ifndef IN_PROCESS_AGENT + regcache->register_status = NULL; +#endif + } + + regcache->registers_valid = 0; + + return regcache; +} + +#ifndef IN_PROCESS_AGENT + +struct regcache * +new_register_cache (const struct target_desc *tdesc) +{ + struct regcache *regcache = new struct regcache; + + gdb_assert (tdesc->registers_size != 0); + + return init_register_cache (regcache, tdesc, NULL); +} + +void +free_register_cache (struct regcache *regcache) +{ + if (regcache) + { + if (regcache->registers_owned) + free (regcache->registers); + free (regcache->register_status); + delete regcache; + } +} + +#endif + +void +regcache_cpy (struct regcache *dst, struct regcache *src) +{ + gdb_assert (src != NULL && dst != NULL); + gdb_assert (src->tdesc == dst->tdesc); + gdb_assert (src != dst); + + memcpy (dst->registers, src->registers, src->tdesc->registers_size); +#ifndef IN_PROCESS_AGENT + if (dst->register_status != NULL && src->register_status != NULL) + memcpy (dst->register_status, src->register_status, + src->tdesc->reg_defs.size ()); +#endif + dst->registers_valid = src->registers_valid; +} + +/* Return a reference to the description of register N. */ + +static const struct gdb::reg & +find_register_by_number (const struct target_desc *tdesc, int n) +{ + return tdesc->reg_defs[n]; +} + +#ifndef IN_PROCESS_AGENT + +void +registers_to_string (struct regcache *regcache, char *buf) +{ + unsigned char *registers = regcache->registers; + const struct target_desc *tdesc = regcache->tdesc; + + for (int i = 0; i < tdesc->reg_defs.size (); ++i) + { + if (regcache->register_status[i] == REG_VALID) + { + bin2hex (registers, buf, register_size (tdesc, i)); + buf += register_size (tdesc, i) * 2; + } + else + { + memset (buf, 'x', register_size (tdesc, i) * 2); + buf += register_size (tdesc, i) * 2; + } + registers += register_size (tdesc, i); + } + *buf = '\0'; +} + +void +registers_from_string (struct regcache *regcache, char *buf) +{ + int len = strlen (buf); + unsigned char *registers = regcache->registers; + const struct target_desc *tdesc = regcache->tdesc; + + if (len != tdesc->registers_size * 2) + { + warning ("Wrong sized register packet (expected %d bytes, got %d)", + 2 * tdesc->registers_size, len); + if (len > tdesc->registers_size * 2) + len = tdesc->registers_size * 2; + } + hex2bin (buf, registers, len / 2); +} + +int +find_regno (const struct target_desc *tdesc, const char *name) +{ + for (int i = 0; i < tdesc->reg_defs.size (); ++i) + { + if (strcmp (name, find_register_by_number (tdesc, i).name) == 0) + return i; + } + internal_error (__FILE__, __LINE__, "Unknown register %s requested", + name); +} + +static void +free_register_cache_thread (struct thread_info *thread) +{ + struct regcache *regcache = thread_regcache_data (thread); + + if (regcache != NULL) + { + regcache_invalidate_thread (thread); + free_register_cache (regcache); + set_thread_regcache_data (thread, NULL); + } +} + +void +regcache_release (void) +{ + /* Flush and release all pre-existing register caches. */ + for_each_thread (free_register_cache_thread); +} +#endif + +int +register_cache_size (const struct target_desc *tdesc) +{ + return tdesc->registers_size; +} + +int +register_size (const struct target_desc *tdesc, int n) +{ + return find_register_by_number (tdesc, n).size / 8; +} + +/* See gdbsupport/common-regcache.h. */ + +int +regcache_register_size (const struct regcache *regcache, int n) +{ + return register_size (regcache->tdesc, n); +} + +static unsigned char * +register_data (const struct regcache *regcache, int n, int fetch) +{ + return (regcache->registers + + find_register_by_number (regcache->tdesc, n).offset / 8); +} + +void +supply_register (struct regcache *regcache, int n, const void *buf) +{ + return regcache->raw_supply (n, buf); +} + +/* See gdbsupport/common-regcache.h. */ + +void +regcache::raw_supply (int n, const void *buf) +{ + if (buf) + { + memcpy (register_data (this, n, 0), buf, register_size (tdesc, n)); +#ifndef IN_PROCESS_AGENT + if (register_status != NULL) + register_status[n] = REG_VALID; +#endif + } + else + { + memset (register_data (this, n, 0), 0, register_size (tdesc, n)); +#ifndef IN_PROCESS_AGENT + if (register_status != NULL) + register_status[n] = REG_UNAVAILABLE; +#endif + } +} + +/* Supply register N with value zero to REGCACHE. */ + +void +supply_register_zeroed (struct regcache *regcache, int n) +{ + memset (register_data (regcache, n, 0), 0, + register_size (regcache->tdesc, n)); +#ifndef IN_PROCESS_AGENT + if (regcache->register_status != NULL) + regcache->register_status[n] = REG_VALID; +#endif +} + +#ifndef IN_PROCESS_AGENT + +/* Supply register called NAME with value zero to REGCACHE. */ + +void +supply_register_by_name_zeroed (struct regcache *regcache, + const char *name) +{ + supply_register_zeroed (regcache, find_regno (regcache->tdesc, name)); +} + +#endif + +/* Supply the whole register set whose contents are stored in BUF, to + REGCACHE. If BUF is NULL, all the registers' values are recorded + as unavailable. */ + +void +supply_regblock (struct regcache *regcache, const void *buf) +{ + if (buf) + { + const struct target_desc *tdesc = regcache->tdesc; + + memcpy (regcache->registers, buf, tdesc->registers_size); +#ifndef IN_PROCESS_AGENT + { + int i; + + for (i = 0; i < tdesc->reg_defs.size (); i++) + regcache->register_status[i] = REG_VALID; + } +#endif + } + else + { + const struct target_desc *tdesc = regcache->tdesc; + + memset (regcache->registers, 0, tdesc->registers_size); +#ifndef IN_PROCESS_AGENT + { + int i; + + for (i = 0; i < tdesc->reg_defs.size (); i++) + regcache->register_status[i] = REG_UNAVAILABLE; + } +#endif + } +} + +#ifndef IN_PROCESS_AGENT + +void +supply_register_by_name (struct regcache *regcache, + const char *name, const void *buf) +{ + supply_register (regcache, find_regno (regcache->tdesc, name), buf); +} + +#endif + +void +collect_register (struct regcache *regcache, int n, void *buf) +{ + regcache->raw_collect (n, buf); +} + +/* See gdbsupport/common-regcache.h. */ + +void +regcache::raw_collect (int n, void *buf) const +{ + memcpy (buf, register_data (this, n, 1), register_size (tdesc, n)); +} + +enum register_status +regcache_raw_read_unsigned (struct regcache *regcache, int regnum, + ULONGEST *val) +{ + int size; + + gdb_assert (regcache != NULL); + gdb_assert (regnum >= 0 + && regnum < regcache->tdesc->reg_defs.size ()); + + size = register_size (regcache->tdesc, regnum); + + if (size > (int) sizeof (ULONGEST)) + error (_("That operation is not available on integers of more than" + "%d bytes."), + (int) sizeof (ULONGEST)); + + *val = 0; + collect_register (regcache, regnum, val); + + return REG_VALID; +} + +#ifndef IN_PROCESS_AGENT + +/* See regcache.h. */ + +ULONGEST +regcache_raw_get_unsigned_by_name (struct regcache *regcache, + const char *name) +{ + return regcache_raw_get_unsigned (regcache, + find_regno (regcache->tdesc, name)); +} + +void +collect_register_as_string (struct regcache *regcache, int n, char *buf) +{ + bin2hex (register_data (regcache, n, 1), buf, + register_size (regcache->tdesc, n)); +} + +void +collect_register_by_name (struct regcache *regcache, + const char *name, void *buf) +{ + collect_register (regcache, find_regno (regcache->tdesc, name), buf); +} + +/* Special handling for register PC. */ + +CORE_ADDR +regcache_read_pc (struct regcache *regcache) +{ + return the_target->read_pc (regcache); +} + +void +regcache_write_pc (struct regcache *regcache, CORE_ADDR pc) +{ + the_target->write_pc (regcache, pc); +} + +#endif + +/* See gdbsupport/common-regcache.h. */ + +enum register_status +regcache::get_register_status (int regnum) const +{ +#ifndef IN_PROCESS_AGENT + gdb_assert (regnum >= 0 && regnum < tdesc->reg_defs.size ()); + return (enum register_status) (register_status[regnum]); +#else + return REG_VALID; +#endif +} + +/* See gdbsupport/common-regcache.h. */ + +bool +regcache::raw_compare (int regnum, const void *buf, int offset) const +{ + gdb_assert (buf != NULL); + + const unsigned char *regbuf = register_data (this, regnum, 1); + int size = register_size (tdesc, regnum); + gdb_assert (size >= offset); + + return (memcmp (buf, regbuf + offset, size - offset) == 0); +} diff -Nru gdb-9.1/gdbserver/regcache.h gdb-10.2/gdbserver/regcache.h --- gdb-9.1/gdbserver/regcache.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/regcache.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,141 @@ +/* Register support routines for the remote server for GDB. + Copyright (C) 2001-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef GDBSERVER_REGCACHE_H +#define GDBSERVER_REGCACHE_H + +#include "gdbsupport/common-regcache.h" + +struct thread_info; +struct target_desc; + +/* The data for the register cache. Note that we have one per + inferior; this is primarily for simplicity, as the performance + benefit is minimal. */ + +struct regcache : public reg_buffer_common +{ + /* The regcache's target description. */ + const struct target_desc *tdesc = nullptr; + + /* Whether the REGISTERS buffer's contents are valid. If false, we + haven't fetched the registers from the target yet. Not that this + register cache is _not_ pass-through, unlike GDB's. Note that + "valid" here is unrelated to whether the registers are available + in a traceframe. For that, check REGISTER_STATUS below. */ + int registers_valid = 0; + int registers_owned = 0; + unsigned char *registers = nullptr; +#ifndef IN_PROCESS_AGENT + /* One of REG_UNAVAILABLE or REG_VALID. */ + unsigned char *register_status = nullptr; +#endif + + /* See gdbsupport/common-regcache.h. */ + enum register_status get_register_status (int regnum) const override; + + /* See gdbsupport/common-regcache.h. */ + void raw_supply (int regnum, const void *buf) override; + + /* See gdbsupport/common-regcache.h. */ + void raw_collect (int regnum, void *buf) const override; + + /* See gdbsupport/common-regcache.h. */ + bool raw_compare (int regnum, const void *buf, int offset) const override; +}; + +struct regcache *init_register_cache (struct regcache *regcache, + const struct target_desc *tdesc, + unsigned char *regbuf); + +void regcache_cpy (struct regcache *dst, struct regcache *src); + +/* Create a new register cache for INFERIOR. */ + +struct regcache *new_register_cache (const struct target_desc *tdesc); + +struct regcache *get_thread_regcache (struct thread_info *thread, int fetch); + +/* Release all memory associated with the register cache for INFERIOR. */ + +void free_register_cache (struct regcache *regcache); + +/* Invalidate cached registers for one thread. */ + +void regcache_invalidate_thread (struct thread_info *); + +/* Invalidate cached registers for all threads of the given process. */ + +void regcache_invalidate_pid (int pid); + +/* Invalidate cached registers for all threads of the current + process. */ + +void regcache_invalidate (void); + +/* Invalidate and release the register cache of all threads of the + current process. */ + +void regcache_release (void); + +/* Convert all registers to a string in the currently specified remote + format. */ + +void registers_to_string (struct regcache *regcache, char *buf); + +/* Convert a string to register values and fill our register cache. */ + +void registers_from_string (struct regcache *regcache, char *buf); + +/* For regcache_read_pc see gdbsupport/common-regcache.h. */ + +void regcache_write_pc (struct regcache *regcache, CORE_ADDR pc); + +int register_cache_size (const struct target_desc *tdesc); + +int register_size (const struct target_desc *tdesc, int n); + +int find_regno (const struct target_desc *tdesc, const char *name); + +void supply_register (struct regcache *regcache, int n, const void *buf); + +void supply_register_zeroed (struct regcache *regcache, int n); + +void supply_register_by_name (struct regcache *regcache, + const char *name, const void *buf); + +void supply_register_by_name_zeroed (struct regcache *regcache, + const char *name); + +void supply_regblock (struct regcache *regcache, const void *buf); + +void collect_register (struct regcache *regcache, int n, void *buf); + +void collect_register_as_string (struct regcache *regcache, int n, char *buf); + +void collect_register_by_name (struct regcache *regcache, + const char *name, void *buf); + +/* Read a raw register as an unsigned integer. Convenience wrapper + around regcache_raw_get_unsigned that takes a register name instead + of a register number. */ + +ULONGEST regcache_raw_get_unsigned_by_name (struct regcache *regcache, + const char *name); + +#endif /* GDBSERVER_REGCACHE_H */ diff -Nru gdb-9.1/gdbserver/remote-utils.cc gdb-10.2/gdbserver/remote-utils.cc --- gdb-9.1/gdbserver/remote-utils.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/remote-utils.cc 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,1663 @@ +/* Remote utility routines for the remote server for GDB. + Copyright (C) 1986-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "server.h" +#if HAVE_TERMIOS_H +#include <termios.h> +#endif +#include "target.h" +#include "gdbthread.h" +#include "tdesc.h" +#include "debug.h" +#include "dll.h" +#include "gdbsupport/rsp-low.h" +#include "gdbsupport/netstuff.h" +#include "gdbsupport/filestuff.h" +#include "gdbsupport/gdb-sigmask.h" +#include <ctype.h> +#if HAVE_SYS_IOCTL_H +#include <sys/ioctl.h> +#endif +#if HAVE_SYS_FILE_H +#include <sys/file.h> +#endif +#if HAVE_NETINET_IN_H +#include <netinet/in.h> +#endif +#if HAVE_SYS_SOCKET_H +#include <sys/socket.h> +#endif +#if HAVE_NETDB_H +#include <netdb.h> +#endif +#if HAVE_NETINET_TCP_H +#include <netinet/tcp.h> +#endif +#if HAVE_SYS_IOCTL_H +#include <sys/ioctl.h> +#endif +#if HAVE_SIGNAL_H +#include <signal.h> +#endif +#if HAVE_FCNTL_H +#include <fcntl.h> +#endif +#include "gdbsupport/gdb_sys_time.h" +#include <unistd.h> +#if HAVE_ARPA_INET_H +#include <arpa/inet.h> +#endif +#include <sys/stat.h> + +#if USE_WIN32API +#include <ws2tcpip.h> +#endif + +#ifndef HAVE_SOCKLEN_T +typedef int socklen_t; +#endif + +#ifndef IN_PROCESS_AGENT + +/* Extra value for readchar_callback. */ +enum { + /* The callback is currently not scheduled. */ + NOT_SCHEDULED = -1 +}; + +/* Status of the readchar callback. + Either NOT_SCHEDULED or the callback id. */ +static int readchar_callback = NOT_SCHEDULED; + +static int readchar (void); +static void reset_readchar (void); +static void reschedule (void); + +/* A cache entry for a successfully looked-up symbol. */ +struct sym_cache +{ + char *name; + CORE_ADDR addr; + struct sym_cache *next; +}; + +static int remote_is_stdio = 0; + +static int remote_desc = -1; +static int listen_desc = -1; + +#ifdef USE_WIN32API +# define read(fd, buf, len) recv (fd, (char *) buf, len, 0) +# define write(fd, buf, len) send (fd, (char *) buf, len, 0) +#endif + +int +gdb_connected (void) +{ + return remote_desc != -1; +} + +/* Return true if the remote connection is over stdio. */ + +int +remote_connection_is_stdio (void) +{ + return remote_is_stdio; +} + +static void +enable_async_notification (int fd) +{ +#if defined(F_SETFL) && defined (FASYNC) + int save_fcntl_flags; + + save_fcntl_flags = fcntl (fd, F_GETFL, 0); + fcntl (fd, F_SETFL, save_fcntl_flags | FASYNC); +#if defined (F_SETOWN) + fcntl (fd, F_SETOWN, getpid ()); +#endif +#endif +} + +static void +handle_accept_event (int err, gdb_client_data client_data) +{ + struct sockaddr_storage sockaddr; + socklen_t len = sizeof (sockaddr); + + if (debug_threads) + debug_printf ("handling possible accept event\n"); + + remote_desc = accept (listen_desc, (struct sockaddr *) &sockaddr, &len); + if (remote_desc == -1) + perror_with_name ("Accept failed"); + + /* Enable TCP keep alive process. */ + socklen_t tmp = 1; + setsockopt (remote_desc, SOL_SOCKET, SO_KEEPALIVE, + (char *) &tmp, sizeof (tmp)); + + /* Tell TCP not to delay small packets. This greatly speeds up + interactive response. */ + tmp = 1; + setsockopt (remote_desc, IPPROTO_TCP, TCP_NODELAY, + (char *) &tmp, sizeof (tmp)); + +#ifndef USE_WIN32API + signal (SIGPIPE, SIG_IGN); /* If we don't do this, then gdbserver simply + exits when the remote side dies. */ +#endif + + if (run_once) + { +#ifndef USE_WIN32API + close (listen_desc); /* No longer need this */ +#else + closesocket (listen_desc); /* No longer need this */ +#endif + } + + /* Even if !RUN_ONCE no longer notice new connections. Still keep the + descriptor open for add_file_handler to wait for a new connection. */ + delete_file_handler (listen_desc); + + /* Convert IP address to string. */ + char orig_host[GDB_NI_MAX_ADDR], orig_port[GDB_NI_MAX_PORT]; + + int r = getnameinfo ((struct sockaddr *) &sockaddr, len, + orig_host, sizeof (orig_host), + orig_port, sizeof (orig_port), + NI_NUMERICHOST | NI_NUMERICSERV); + + if (r != 0) + fprintf (stderr, _("Could not obtain remote address: %s\n"), + gai_strerror (r)); + else + fprintf (stderr, _("Remote debugging from host %s, port %s\n"), + orig_host, orig_port); + + enable_async_notification (remote_desc); + + /* Register the event loop handler. */ + add_file_handler (remote_desc, handle_serial_event, NULL); + + /* We have a new GDB connection now. If we were disconnected + tracing, there's a window where the target could report a stop + event to the event loop, and since we have a connection now, we'd + try to send vStopped notifications to GDB. But, don't do that + until GDB as selected all-stop/non-stop, and has queried the + threads' status ('?'). */ + target_async (0); +} + +/* Prepare for a later connection to a remote debugger. + NAME is the filename used for communication. */ + +void +remote_prepare (const char *name) +{ + client_state &cs = get_client_state (); +#ifdef USE_WIN32API + static int winsock_initialized; +#endif + socklen_t tmp; + + remote_is_stdio = 0; + if (strcmp (name, STDIO_CONNECTION_NAME) == 0) + { + /* We need to record fact that we're using stdio sooner than the + call to remote_open so start_inferior knows the connection is + via stdio. */ + remote_is_stdio = 1; + cs.transport_is_reliable = 1; + return; + } + + struct addrinfo hint; + struct addrinfo *ainfo; + + memset (&hint, 0, sizeof (hint)); + /* Assume no prefix will be passed, therefore we should use + AF_UNSPEC. */ + hint.ai_family = AF_UNSPEC; + hint.ai_socktype = SOCK_STREAM; + hint.ai_protocol = IPPROTO_TCP; + + parsed_connection_spec parsed + = parse_connection_spec_without_prefix (name, &hint); + + if (parsed.port_str.empty ()) + { + cs.transport_is_reliable = 0; + return; + } + +#ifdef USE_WIN32API + if (!winsock_initialized) + { + WSADATA wsad; + + WSAStartup (MAKEWORD (1, 0), &wsad); + winsock_initialized = 1; + } +#endif + + int r = getaddrinfo (parsed.host_str.c_str (), parsed.port_str.c_str (), + &hint, &ainfo); + + if (r != 0) + error (_("%s: cannot resolve name: %s"), name, gai_strerror (r)); + + scoped_free_addrinfo freeaddrinfo (ainfo); + + struct addrinfo *iter; + + for (iter = ainfo; iter != NULL; iter = iter->ai_next) + { + listen_desc = gdb_socket_cloexec (iter->ai_family, iter->ai_socktype, + iter->ai_protocol); + + if (listen_desc >= 0) + break; + } + + if (iter == NULL) + perror_with_name ("Can't open socket"); + + /* Allow rapid reuse of this port. */ + tmp = 1; + setsockopt (listen_desc, SOL_SOCKET, SO_REUSEADDR, (char *) &tmp, + sizeof (tmp)); + + switch (iter->ai_family) + { + case AF_INET: + ((struct sockaddr_in *) iter->ai_addr)->sin_addr.s_addr = INADDR_ANY; + break; + case AF_INET6: + ((struct sockaddr_in6 *) iter->ai_addr)->sin6_addr = in6addr_any; + break; + default: + internal_error (__FILE__, __LINE__, + _("Invalid 'ai_family' %d\n"), iter->ai_family); + } + + if (bind (listen_desc, iter->ai_addr, iter->ai_addrlen) != 0) + perror_with_name ("Can't bind address"); + + if (listen (listen_desc, 1) != 0) + perror_with_name ("Can't listen on socket"); + + cs.transport_is_reliable = 1; +} + +/* Open a connection to a remote debugger. + NAME is the filename used for communication. */ + +void +remote_open (const char *name) +{ + const char *port_str; + + port_str = strchr (name, ':'); +#ifdef USE_WIN32API + if (port_str == NULL) + error ("Only HOST:PORT is supported on this platform."); +#endif + + if (strcmp (name, STDIO_CONNECTION_NAME) == 0) + { + fprintf (stderr, "Remote debugging using stdio\n"); + + /* Use stdin as the handle of the connection. + We only select on reads, for example. */ + remote_desc = fileno (stdin); + + enable_async_notification (remote_desc); + + /* Register the event loop handler. */ + add_file_handler (remote_desc, handle_serial_event, NULL); + } +#ifndef USE_WIN32API + else if (port_str == NULL) + { + struct stat statbuf; + + if (stat (name, &statbuf) == 0 + && (S_ISCHR (statbuf.st_mode) || S_ISFIFO (statbuf.st_mode))) + remote_desc = open (name, O_RDWR); + else + { + errno = EINVAL; + remote_desc = -1; + } + + if (remote_desc < 0) + perror_with_name ("Could not open remote device"); + +#if HAVE_TERMIOS_H + { + struct termios termios; + tcgetattr (remote_desc, &termios); + + termios.c_iflag = 0; + termios.c_oflag = 0; + termios.c_lflag = 0; + termios.c_cflag &= ~(CSIZE | PARENB); + termios.c_cflag |= CLOCAL | CS8; + termios.c_cc[VMIN] = 1; + termios.c_cc[VTIME] = 0; + + tcsetattr (remote_desc, TCSANOW, &termios); + } +#endif + + fprintf (stderr, "Remote debugging using %s\n", name); + + enable_async_notification (remote_desc); + + /* Register the event loop handler. */ + add_file_handler (remote_desc, handle_serial_event, NULL); + } +#endif /* USE_WIN32API */ + else + { + char listen_port[GDB_NI_MAX_PORT]; + struct sockaddr_storage sockaddr; + socklen_t len = sizeof (sockaddr); + + if (getsockname (listen_desc, (struct sockaddr *) &sockaddr, &len) < 0) + perror_with_name ("Can't determine port"); + + int r = getnameinfo ((struct sockaddr *) &sockaddr, len, + NULL, 0, + listen_port, sizeof (listen_port), + NI_NUMERICSERV); + + if (r != 0) + fprintf (stderr, _("Can't obtain port where we are listening: %s"), + gai_strerror (r)); + else + fprintf (stderr, _("Listening on port %s\n"), listen_port); + + fflush (stderr); + + /* Register the event loop handler. */ + add_file_handler (listen_desc, handle_accept_event, NULL); + } +} + +void +remote_close (void) +{ + delete_file_handler (remote_desc); + + disable_async_io (); + +#ifdef USE_WIN32API + closesocket (remote_desc); +#else + if (! remote_connection_is_stdio ()) + close (remote_desc); +#endif + remote_desc = -1; + + reset_readchar (); +} + +#endif + +#ifndef IN_PROCESS_AGENT + +void +decode_address (CORE_ADDR *addrp, const char *start, int len) +{ + CORE_ADDR addr; + char ch; + int i; + + addr = 0; + for (i = 0; i < len; i++) + { + ch = start[i]; + addr = addr << 4; + addr = addr | (fromhex (ch) & 0x0f); + } + *addrp = addr; +} + +const char * +decode_address_to_semicolon (CORE_ADDR *addrp, const char *start) +{ + const char *end; + + end = start; + while (*end != '\0' && *end != ';') + end++; + + decode_address (addrp, start, end - start); + + if (*end == ';') + end++; + return end; +} + +#endif + +#ifndef IN_PROCESS_AGENT + +/* Look for a sequence of characters which can be run-length encoded. + If there are any, update *CSUM and *P. Otherwise, output the + single character. Return the number of characters consumed. */ + +static int +try_rle (char *buf, int remaining, unsigned char *csum, char **p) +{ + int n; + + /* Always output the character. */ + *csum += buf[0]; + *(*p)++ = buf[0]; + + /* Don't go past '~'. */ + if (remaining > 97) + remaining = 97; + + for (n = 1; n < remaining; n++) + if (buf[n] != buf[0]) + break; + + /* N is the index of the first character not the same as buf[0]. + buf[0] is counted twice, so by decrementing N, we get the number + of characters the RLE sequence will replace. */ + n--; + + if (n < 3) + return 1; + + /* Skip the frame characters. The manual says to skip '+' and '-' + also, but there's no reason to. Unfortunately these two unusable + characters double the encoded length of a four byte zero + value. */ + while (n + 29 == '$' || n + 29 == '#') + n--; + + *csum += '*'; + *(*p)++ = '*'; + *csum += n + 29; + *(*p)++ = n + 29; + + return n + 1; +} + +#endif + +#ifndef IN_PROCESS_AGENT + +/* Write a PTID to BUF. Returns BUF+CHARACTERS_WRITTEN. */ + +char * +write_ptid (char *buf, ptid_t ptid) +{ + client_state &cs = get_client_state (); + int pid, tid; + + if (cs.multi_process) + { + pid = ptid.pid (); + if (pid < 0) + buf += sprintf (buf, "p-%x.", -pid); + else + buf += sprintf (buf, "p%x.", pid); + } + tid = ptid.lwp (); + if (tid < 0) + buf += sprintf (buf, "-%x", -tid); + else + buf += sprintf (buf, "%x", tid); + + return buf; +} + +static ULONGEST +hex_or_minus_one (const char *buf, const char **obuf) +{ + ULONGEST ret; + + if (startswith (buf, "-1")) + { + ret = (ULONGEST) -1; + buf += 2; + } + else + buf = unpack_varlen_hex (buf, &ret); + + if (obuf) + *obuf = buf; + + return ret; +} + +/* Extract a PTID from BUF. If non-null, OBUF is set to the to one + passed the last parsed char. Returns null_ptid on error. */ +ptid_t +read_ptid (const char *buf, const char **obuf) +{ + const char *p = buf; + const char *pp; + ULONGEST pid = 0, tid = 0; + + if (*p == 'p') + { + /* Multi-process ptid. */ + pp = unpack_varlen_hex (p + 1, &pid); + if (*pp != '.') + error ("invalid remote ptid: %s\n", p); + + p = pp + 1; + + tid = hex_or_minus_one (p, &pp); + + if (obuf) + *obuf = pp; + return ptid_t (pid, tid, 0); + } + + /* No multi-process. Just a tid. */ + tid = hex_or_minus_one (p, &pp); + + /* Since GDB is not sending a process id (multi-process extensions + are off), then there's only one process. Default to the first in + the list. */ + pid = pid_of (get_first_process ()); + + if (obuf) + *obuf = pp; + return ptid_t (pid, tid, 0); +} + +/* Write COUNT bytes in BUF to the client. + The result is the number of bytes written or -1 if error. + This may return less than COUNT. */ + +static int +write_prim (const void *buf, int count) +{ + if (remote_connection_is_stdio ()) + return write (fileno (stdout), buf, count); + else + return write (remote_desc, buf, count); +} + +/* Read COUNT bytes from the client and store in BUF. + The result is the number of bytes read or -1 if error. + This may return less than COUNT. */ + +static int +read_prim (void *buf, int count) +{ + if (remote_connection_is_stdio ()) + return read (fileno (stdin), buf, count); + else + return read (remote_desc, buf, count); +} + +/* Send a packet to the remote machine, with error checking. + The data of the packet is in BUF, and the length of the + packet is in CNT. Returns >= 0 on success, -1 otherwise. */ + +static int +putpkt_binary_1 (char *buf, int cnt, int is_notif) +{ + client_state &cs = get_client_state (); + int i; + unsigned char csum = 0; + char *buf2; + char *p; + int cc; + + buf2 = (char *) xmalloc (strlen ("$") + cnt + strlen ("#nn") + 1); + + /* Copy the packet into buffer BUF2, encapsulating it + and giving it a checksum. */ + + p = buf2; + if (is_notif) + *p++ = '%'; + else + *p++ = '$'; + + for (i = 0; i < cnt;) + i += try_rle (buf + i, cnt - i, &csum, &p); + + *p++ = '#'; + *p++ = tohex ((csum >> 4) & 0xf); + *p++ = tohex (csum & 0xf); + + *p = '\0'; + + /* Send it over and over until we get a positive ack. */ + + do + { + if (write_prim (buf2, p - buf2) != p - buf2) + { + perror ("putpkt(write)"); + free (buf2); + return -1; + } + + if (cs.noack_mode || is_notif) + { + /* Don't expect an ack then. */ + if (remote_debug) + { + if (is_notif) + debug_printf ("putpkt (\"%s\"); [notif]\n", buf2); + else + debug_printf ("putpkt (\"%s\"); [noack mode]\n", buf2); + debug_flush (); + } + break; + } + + if (remote_debug) + { + debug_printf ("putpkt (\"%s\"); [looking for ack]\n", buf2); + debug_flush (); + } + + cc = readchar (); + + if (cc < 0) + { + free (buf2); + return -1; + } + + if (remote_debug) + { + debug_printf ("[received '%c' (0x%x)]\n", cc, cc); + debug_flush (); + } + + /* Check for an input interrupt while we're here. */ + if (cc == '\003' && current_thread != NULL) + the_target->request_interrupt (); + } + while (cc != '+'); + + free (buf2); + return 1; /* Success! */ +} + +int +putpkt_binary (char *buf, int cnt) +{ + return putpkt_binary_1 (buf, cnt, 0); +} + +/* Send a packet to the remote machine, with error checking. The data + of the packet is in BUF, and the packet should be a NUL-terminated + string. Returns >= 0 on success, -1 otherwise. */ + +int +putpkt (char *buf) +{ + return putpkt_binary (buf, strlen (buf)); +} + +int +putpkt_notif (char *buf) +{ + return putpkt_binary_1 (buf, strlen (buf), 1); +} + +/* Come here when we get an input interrupt from the remote side. This + interrupt should only be active while we are waiting for the child to do + something. Thus this assumes readchar:bufcnt is 0. + About the only thing that should come through is a ^C, which + will cause us to request child interruption. */ + +static void +input_interrupt (int unused) +{ + fd_set readset; + struct timeval immediate = { 0, 0 }; + + /* Protect against spurious interrupts. This has been observed to + be a problem under NetBSD 1.4 and 1.5. */ + + FD_ZERO (&readset); + FD_SET (remote_desc, &readset); + if (select (remote_desc + 1, &readset, 0, 0, &immediate) > 0) + { + int cc; + char c = 0; + + cc = read_prim (&c, 1); + + if (cc == 0) + { + fprintf (stderr, "client connection closed\n"); + return; + } + else if (cc != 1 || c != '\003') + { + fprintf (stderr, "input_interrupt, count = %d c = %d ", cc, c); + if (isprint (c)) + fprintf (stderr, "('%c')\n", c); + else + fprintf (stderr, "('\\x%02x')\n", c & 0xff); + return; + } + + the_target->request_interrupt (); + } +} + +/* Check if the remote side sent us an interrupt request (^C). */ +void +check_remote_input_interrupt_request (void) +{ + /* This function may be called before establishing communications, + therefore we need to validate the remote descriptor. */ + + if (remote_desc == -1) + return; + + input_interrupt (0); +} + +/* Asynchronous I/O support. SIGIO must be unblocked when waiting, + in order to accept Control-C from the client, and must be blocked + when talking to the client. */ + +static void +block_unblock_async_io (int block) +{ +#ifndef USE_WIN32API + sigset_t sigio_set; + + sigemptyset (&sigio_set); + sigaddset (&sigio_set, SIGIO); + gdb_sigmask (block ? SIG_BLOCK : SIG_UNBLOCK, &sigio_set, NULL); +#endif +} + +/* Current state of asynchronous I/O. */ +static int async_io_enabled; + +/* Enable asynchronous I/O. */ +void +enable_async_io (void) +{ + if (async_io_enabled) + return; + + block_unblock_async_io (0); + + async_io_enabled = 1; +} + +/* Disable asynchronous I/O. */ +void +disable_async_io (void) +{ + if (!async_io_enabled) + return; + + block_unblock_async_io (1); + + async_io_enabled = 0; +} + +void +initialize_async_io (void) +{ + /* Make sure that async I/O starts blocked. */ + async_io_enabled = 1; + disable_async_io (); + + /* Install the signal handler. */ +#ifndef USE_WIN32API + signal (SIGIO, input_interrupt); +#endif +} + +/* Internal buffer used by readchar. + These are global to readchar because reschedule_remote needs to be + able to tell whether the buffer is empty. */ + +static unsigned char readchar_buf[BUFSIZ]; +static int readchar_bufcnt = 0; +static unsigned char *readchar_bufp; + +/* Returns next char from remote GDB. -1 if error. */ + +static int +readchar (void) +{ + int ch; + + if (readchar_bufcnt == 0) + { + readchar_bufcnt = read_prim (readchar_buf, sizeof (readchar_buf)); + + if (readchar_bufcnt <= 0) + { + if (readchar_bufcnt == 0) + { + if (remote_debug) + debug_printf ("readchar: Got EOF\n"); + } + else + perror ("readchar"); + + return -1; + } + + readchar_bufp = readchar_buf; + } + + readchar_bufcnt--; + ch = *readchar_bufp++; + reschedule (); + return ch; +} + +/* Reset the readchar state machine. */ + +static void +reset_readchar (void) +{ + readchar_bufcnt = 0; + if (readchar_callback != NOT_SCHEDULED) + { + delete_timer (readchar_callback); + readchar_callback = NOT_SCHEDULED; + } +} + +/* Process remaining data in readchar_buf. */ + +static void +process_remaining (void *context) +{ + /* This is a one-shot event. */ + readchar_callback = NOT_SCHEDULED; + + if (readchar_bufcnt > 0) + handle_serial_event (0, NULL); +} + +/* If there is still data in the buffer, queue another event to process it, + we can't sleep in select yet. */ + +static void +reschedule (void) +{ + if (readchar_bufcnt > 0 && readchar_callback == NOT_SCHEDULED) + readchar_callback = create_timer (0, process_remaining, NULL); +} + +/* Read a packet from the remote machine, with error checking, + and store it in BUF. Returns length of packet, or negative if error. */ + +int +getpkt (char *buf) +{ + client_state &cs = get_client_state (); + char *bp; + unsigned char csum, c1, c2; + int c; + + while (1) + { + csum = 0; + + while (1) + { + c = readchar (); + + /* The '\003' may appear before or after each packet, so + check for an input interrupt. */ + if (c == '\003') + { + the_target->request_interrupt (); + continue; + } + + if (c == '$') + break; + if (remote_debug) + { + debug_printf ("[getpkt: discarding char '%c']\n", c); + debug_flush (); + } + + if (c < 0) + return -1; + } + + bp = buf; + while (1) + { + c = readchar (); + if (c < 0) + return -1; + if (c == '#') + break; + *bp++ = c; + csum += c; + } + *bp = 0; + + c1 = fromhex (readchar ()); + c2 = fromhex (readchar ()); + + if (csum == (c1 << 4) + c2) + break; + + if (cs.noack_mode) + { + fprintf (stderr, + "Bad checksum, sentsum=0x%x, csum=0x%x, " + "buf=%s [no-ack-mode, Bad medium?]\n", + (c1 << 4) + c2, csum, buf); + /* Not much we can do, GDB wasn't expecting an ack/nac. */ + break; + } + + fprintf (stderr, "Bad checksum, sentsum=0x%x, csum=0x%x, buf=%s\n", + (c1 << 4) + c2, csum, buf); + if (write_prim ("-", 1) != 1) + return -1; + } + + if (!cs.noack_mode) + { + if (remote_debug) + { + debug_printf ("getpkt (\"%s\"); [sending ack] \n", buf); + debug_flush (); + } + + if (write_prim ("+", 1) != 1) + return -1; + + if (remote_debug) + { + debug_printf ("[sent ack]\n"); + debug_flush (); + } + } + else + { + if (remote_debug) + { + debug_printf ("getpkt (\"%s\"); [no ack sent] \n", buf); + debug_flush (); + } + } + + /* The readchar above may have already read a '\003' out of the socket + and moved it to the local buffer. For example, when GDB sends + vCont;c immediately followed by interrupt (see + gdb.base/interrupt-noterm.exp). As soon as we see the vCont;c, we'll + resume the inferior and wait. Since we've already moved the '\003' + to the local buffer, SIGIO won't help. In that case, if we don't + check for interrupt after the vCont;c packet, the interrupt character + would stay in the buffer unattended until after the next (unrelated) + stop. */ + while (readchar_bufcnt > 0 && *readchar_bufp == '\003') + { + /* Consume the interrupt character in the buffer. */ + readchar (); + the_target->request_interrupt (); + } + + return bp - buf; +} + +void +write_ok (char *buf) +{ + buf[0] = 'O'; + buf[1] = 'K'; + buf[2] = '\0'; +} + +void +write_enn (char *buf) +{ + /* Some day, we should define the meanings of the error codes... */ + buf[0] = 'E'; + buf[1] = '0'; + buf[2] = '1'; + buf[3] = '\0'; +} + +#endif + +#ifndef IN_PROCESS_AGENT + +static char * +outreg (struct regcache *regcache, int regno, char *buf) +{ + if ((regno >> 12) != 0) + *buf++ = tohex ((regno >> 12) & 0xf); + if ((regno >> 8) != 0) + *buf++ = tohex ((regno >> 8) & 0xf); + *buf++ = tohex ((regno >> 4) & 0xf); + *buf++ = tohex (regno & 0xf); + *buf++ = ':'; + collect_register_as_string (regcache, regno, buf); + buf += 2 * register_size (regcache->tdesc, regno); + *buf++ = ';'; + + return buf; +} + +void +prepare_resume_reply (char *buf, ptid_t ptid, + struct target_waitstatus *status) +{ + client_state &cs = get_client_state (); + if (debug_threads) + debug_printf ("Writing resume reply for %s:%d\n", + target_pid_to_str (ptid), status->kind); + + switch (status->kind) + { + case TARGET_WAITKIND_STOPPED: + case TARGET_WAITKIND_FORKED: + case TARGET_WAITKIND_VFORKED: + case TARGET_WAITKIND_VFORK_DONE: + case TARGET_WAITKIND_EXECD: + case TARGET_WAITKIND_THREAD_CREATED: + case TARGET_WAITKIND_SYSCALL_ENTRY: + case TARGET_WAITKIND_SYSCALL_RETURN: + { + struct thread_info *saved_thread; + const char **regp; + struct regcache *regcache; + + if ((status->kind == TARGET_WAITKIND_FORKED && cs.report_fork_events) + || (status->kind == TARGET_WAITKIND_VFORKED + && cs.report_vfork_events)) + { + enum gdb_signal signal = GDB_SIGNAL_TRAP; + const char *event = (status->kind == TARGET_WAITKIND_FORKED + ? "fork" : "vfork"); + + sprintf (buf, "T%02x%s:", signal, event); + buf += strlen (buf); + buf = write_ptid (buf, status->value.related_pid); + strcat (buf, ";"); + } + else if (status->kind == TARGET_WAITKIND_VFORK_DONE + && cs.report_vfork_events) + { + enum gdb_signal signal = GDB_SIGNAL_TRAP; + + sprintf (buf, "T%02xvforkdone:;", signal); + } + else if (status->kind == TARGET_WAITKIND_EXECD && cs.report_exec_events) + { + enum gdb_signal signal = GDB_SIGNAL_TRAP; + const char *event = "exec"; + char hexified_pathname[PATH_MAX * 2]; + + sprintf (buf, "T%02x%s:", signal, event); + buf += strlen (buf); + + /* Encode pathname to hexified format. */ + bin2hex ((const gdb_byte *) status->value.execd_pathname, + hexified_pathname, + strlen (status->value.execd_pathname)); + + sprintf (buf, "%s;", hexified_pathname); + xfree (status->value.execd_pathname); + status->value.execd_pathname = NULL; + buf += strlen (buf); + } + else if (status->kind == TARGET_WAITKIND_THREAD_CREATED + && cs.report_thread_events) + { + enum gdb_signal signal = GDB_SIGNAL_TRAP; + + sprintf (buf, "T%02xcreate:;", signal); + } + else if (status->kind == TARGET_WAITKIND_SYSCALL_ENTRY + || status->kind == TARGET_WAITKIND_SYSCALL_RETURN) + { + enum gdb_signal signal = GDB_SIGNAL_TRAP; + const char *event = (status->kind == TARGET_WAITKIND_SYSCALL_ENTRY + ? "syscall_entry" : "syscall_return"); + + sprintf (buf, "T%02x%s:%x;", signal, event, + status->value.syscall_number); + } + else + sprintf (buf, "T%02x", status->value.sig); + + if (disable_packet_T) + { + /* This is a bit (OK, a lot) of a kludge, however, this isn't + really a user feature, but exists only so GDB can use the + gdbserver to test handling of the 'S' stop reply packet, so + we would rather this code be as simple as possible. + + By this point we've started to build the 'T' stop packet, + and it should look like 'Txx....' where 'x' is a hex digit. + An 'S' stop packet always looks like 'Sxx', so all we do + here is convert the buffer from a T packet to an S packet + and the avoid adding any extra content by breaking out. */ + gdb_assert (*buf == 'T'); + gdb_assert (isxdigit (*(buf + 1))); + gdb_assert (isxdigit (*(buf + 2))); + *buf = 'S'; + *(buf + 3) = '\0'; + break; + } + + buf += strlen (buf); + + saved_thread = current_thread; + + switch_to_thread (the_target, ptid); + + regp = current_target_desc ()->expedite_regs; + + regcache = get_thread_regcache (current_thread, 1); + + if (the_target->stopped_by_watchpoint ()) + { + CORE_ADDR addr; + int i; + + memcpy (buf, "watch:", 6); + buf += 6; + + addr = the_target->stopped_data_address (); + + /* Convert each byte of the address into two hexadecimal + chars. Note that we take sizeof (void *) instead of + sizeof (addr); this is to avoid sending a 64-bit + address to a 32-bit GDB. */ + for (i = sizeof (void *) * 2; i > 0; i--) + *buf++ = tohex ((addr >> (i - 1) * 4) & 0xf); + *buf++ = ';'; + } + else if (cs.swbreak_feature && target_stopped_by_sw_breakpoint ()) + { + sprintf (buf, "swbreak:;"); + buf += strlen (buf); + } + else if (cs.hwbreak_feature && target_stopped_by_hw_breakpoint ()) + { + sprintf (buf, "hwbreak:;"); + buf += strlen (buf); + } + + while (*regp) + { + buf = outreg (regcache, find_regno (regcache->tdesc, *regp), buf); + regp ++; + } + *buf = '\0'; + + /* Formerly, if the debugger had not used any thread features + we would not burden it with a thread status response. This + was for the benefit of GDB 4.13 and older. However, in + recent GDB versions the check (``if (cont_thread != 0)'') + does not have the desired effect because of sillyness in + the way that the remote protocol handles specifying a + thread. Since thread support relies on qSymbol support + anyway, assume GDB can handle threads. */ + + if (using_threads && !disable_packet_Tthread) + { + /* This if (1) ought to be unnecessary. But remote_wait + in GDB will claim this event belongs to inferior_ptid + if we do not specify a thread, and there's no way for + gdbserver to know what inferior_ptid is. */ + if (1 || cs.general_thread != ptid) + { + int core = -1; + /* In non-stop, don't change the general thread behind + GDB's back. */ + if (!non_stop) + cs.general_thread = ptid; + sprintf (buf, "thread:"); + buf += strlen (buf); + buf = write_ptid (buf, ptid); + strcat (buf, ";"); + buf += strlen (buf); + + core = target_core_of_thread (ptid); + + if (core != -1) + { + sprintf (buf, "core:"); + buf += strlen (buf); + sprintf (buf, "%x", core); + strcat (buf, ";"); + buf += strlen (buf); + } + } + } + + if (dlls_changed) + { + strcpy (buf, "library:;"); + buf += strlen (buf); + dlls_changed = 0; + } + + current_thread = saved_thread; + } + break; + case TARGET_WAITKIND_EXITED: + if (cs.multi_process) + sprintf (buf, "W%x;process:%x", + status->value.integer, ptid.pid ()); + else + sprintf (buf, "W%02x", status->value.integer); + break; + case TARGET_WAITKIND_SIGNALLED: + if (cs.multi_process) + sprintf (buf, "X%x;process:%x", + status->value.sig, ptid.pid ()); + else + sprintf (buf, "X%02x", status->value.sig); + break; + case TARGET_WAITKIND_THREAD_EXITED: + sprintf (buf, "w%x;", status->value.integer); + buf += strlen (buf); + buf = write_ptid (buf, ptid); + break; + case TARGET_WAITKIND_NO_RESUMED: + sprintf (buf, "N"); + break; + default: + error ("unhandled waitkind"); + break; + } +} + +void +decode_m_packet (char *from, CORE_ADDR *mem_addr_ptr, unsigned int *len_ptr) +{ + int i = 0, j = 0; + char ch; + *mem_addr_ptr = *len_ptr = 0; + + while ((ch = from[i++]) != ',') + { + *mem_addr_ptr = *mem_addr_ptr << 4; + *mem_addr_ptr |= fromhex (ch) & 0x0f; + } + + for (j = 0; j < 4; j++) + { + if ((ch = from[i++]) == 0) + break; + *len_ptr = *len_ptr << 4; + *len_ptr |= fromhex (ch) & 0x0f; + } +} + +void +decode_M_packet (char *from, CORE_ADDR *mem_addr_ptr, unsigned int *len_ptr, + unsigned char **to_p) +{ + int i = 0; + char ch; + *mem_addr_ptr = *len_ptr = 0; + + while ((ch = from[i++]) != ',') + { + *mem_addr_ptr = *mem_addr_ptr << 4; + *mem_addr_ptr |= fromhex (ch) & 0x0f; + } + + while ((ch = from[i++]) != ':') + { + *len_ptr = *len_ptr << 4; + *len_ptr |= fromhex (ch) & 0x0f; + } + + if (*to_p == NULL) + *to_p = (unsigned char *) xmalloc (*len_ptr); + + hex2bin (&from[i++], *to_p, *len_ptr); +} + +int +decode_X_packet (char *from, int packet_len, CORE_ADDR *mem_addr_ptr, + unsigned int *len_ptr, unsigned char **to_p) +{ + int i = 0; + char ch; + *mem_addr_ptr = *len_ptr = 0; + + while ((ch = from[i++]) != ',') + { + *mem_addr_ptr = *mem_addr_ptr << 4; + *mem_addr_ptr |= fromhex (ch) & 0x0f; + } + + while ((ch = from[i++]) != ':') + { + *len_ptr = *len_ptr << 4; + *len_ptr |= fromhex (ch) & 0x0f; + } + + if (*to_p == NULL) + *to_p = (unsigned char *) xmalloc (*len_ptr); + + if (remote_unescape_input ((const gdb_byte *) &from[i], packet_len - i, + *to_p, *len_ptr) != *len_ptr) + return -1; + + return 0; +} + +/* Decode a qXfer write request. */ + +int +decode_xfer_write (char *buf, int packet_len, CORE_ADDR *offset, + unsigned int *len, unsigned char *data) +{ + char ch; + char *b = buf; + + /* Extract the offset. */ + *offset = 0; + while ((ch = *buf++) != ':') + { + *offset = *offset << 4; + *offset |= fromhex (ch) & 0x0f; + } + + /* Get encoded data. */ + packet_len -= buf - b; + *len = remote_unescape_input ((const gdb_byte *) buf, packet_len, + data, packet_len); + return 0; +} + +/* Decode the parameters of a qSearch:memory packet. */ + +int +decode_search_memory_packet (const char *buf, int packet_len, + CORE_ADDR *start_addrp, + CORE_ADDR *search_space_lenp, + gdb_byte *pattern, unsigned int *pattern_lenp) +{ + const char *p = buf; + + p = decode_address_to_semicolon (start_addrp, p); + p = decode_address_to_semicolon (search_space_lenp, p); + packet_len -= p - buf; + *pattern_lenp = remote_unescape_input ((const gdb_byte *) p, packet_len, + pattern, packet_len); + return 0; +} + +static void +free_sym_cache (struct sym_cache *sym) +{ + if (sym != NULL) + { + free (sym->name); + free (sym); + } +} + +void +clear_symbol_cache (struct sym_cache **symcache_p) +{ + struct sym_cache *sym, *next; + + /* Check the cache first. */ + for (sym = *symcache_p; sym; sym = next) + { + next = sym->next; + free_sym_cache (sym); + } + + *symcache_p = NULL; +} + +/* Get the address of NAME, and return it in ADDRP if found. if + MAY_ASK_GDB is false, assume symbol cache misses are failures. + Returns 1 if the symbol is found, 0 if it is not, -1 on error. */ + +int +look_up_one_symbol (const char *name, CORE_ADDR *addrp, int may_ask_gdb) +{ + client_state &cs = get_client_state (); + char *p, *q; + int len; + struct sym_cache *sym; + struct process_info *proc; + + proc = current_process (); + + /* Check the cache first. */ + for (sym = proc->symbol_cache; sym; sym = sym->next) + if (strcmp (name, sym->name) == 0) + { + *addrp = sym->addr; + return 1; + } + + /* It might not be an appropriate time to look up a symbol, + e.g. while we're trying to fetch registers. */ + if (!may_ask_gdb) + return 0; + + /* Send the request. */ + strcpy (cs.own_buf, "qSymbol:"); + bin2hex ((const gdb_byte *) name, cs.own_buf + strlen ("qSymbol:"), + strlen (name)); + if (putpkt (cs.own_buf) < 0) + return -1; + + /* FIXME: Eventually add buffer overflow checking (to getpkt?) */ + len = getpkt (cs.own_buf); + if (len < 0) + return -1; + + /* We ought to handle pretty much any packet at this point while we + wait for the qSymbol "response". That requires re-entering the + main loop. For now, this is an adequate approximation; allow + GDB to read from memory and handle 'v' packets (for vFile transfers) + while it figures out the address of the symbol. */ + while (1) + { + if (cs.own_buf[0] == 'm') + { + CORE_ADDR mem_addr; + unsigned char *mem_buf; + unsigned int mem_len; + + decode_m_packet (&cs.own_buf[1], &mem_addr, &mem_len); + mem_buf = (unsigned char *) xmalloc (mem_len); + if (read_inferior_memory (mem_addr, mem_buf, mem_len) == 0) + bin2hex (mem_buf, cs.own_buf, mem_len); + else + write_enn (cs.own_buf); + free (mem_buf); + if (putpkt (cs.own_buf) < 0) + return -1; + } + else if (cs.own_buf[0] == 'v') + { + int new_len = -1; + handle_v_requests (cs.own_buf, len, &new_len); + if (new_len != -1) + putpkt_binary (cs.own_buf, new_len); + else + putpkt (cs.own_buf); + } + else + break; + len = getpkt (cs.own_buf); + if (len < 0) + return -1; + } + + if (!startswith (cs.own_buf, "qSymbol:")) + { + warning ("Malformed response to qSymbol, ignoring: %s", cs.own_buf); + return -1; + } + + p = cs.own_buf + strlen ("qSymbol:"); + q = p; + while (*q && *q != ':') + q++; + + /* Make sure we found a value for the symbol. */ + if (p == q || *q == '\0') + return 0; + + decode_address (addrp, p, q - p); + + /* Save the symbol in our cache. */ + sym = XNEW (struct sym_cache); + sym->name = xstrdup (name); + sym->addr = *addrp; + sym->next = proc->symbol_cache; + proc->symbol_cache = sym; + + return 1; +} + +/* Relocate an instruction to execute at a different address. OLDLOC + is the address in the inferior memory where the instruction to + relocate is currently at. On input, TO points to the destination + where we want the instruction to be copied (and possibly adjusted) + to. On output, it points to one past the end of the resulting + instruction(s). The effect of executing the instruction at TO + shall be the same as if executing it at OLDLOC. For example, call + instructions that implicitly push the return address on the stack + should be adjusted to return to the instruction after OLDLOC; + relative branches, and other PC-relative instructions need the + offset adjusted; etc. Returns 0 on success, -1 on failure. */ + +int +relocate_instruction (CORE_ADDR *to, CORE_ADDR oldloc) +{ + client_state &cs = get_client_state (); + int len; + ULONGEST written = 0; + + /* Send the request. */ + sprintf (cs.own_buf, "qRelocInsn:%s;%s", paddress (oldloc), + paddress (*to)); + if (putpkt (cs.own_buf) < 0) + return -1; + + /* FIXME: Eventually add buffer overflow checking (to getpkt?) */ + len = getpkt (cs.own_buf); + if (len < 0) + return -1; + + /* We ought to handle pretty much any packet at this point while we + wait for the qRelocInsn "response". That requires re-entering + the main loop. For now, this is an adequate approximation; allow + GDB to access memory. */ + while (cs.own_buf[0] == 'm' || cs.own_buf[0] == 'M' || cs.own_buf[0] == 'X') + { + CORE_ADDR mem_addr; + unsigned char *mem_buf = NULL; + unsigned int mem_len; + + if (cs.own_buf[0] == 'm') + { + decode_m_packet (&cs.own_buf[1], &mem_addr, &mem_len); + mem_buf = (unsigned char *) xmalloc (mem_len); + if (read_inferior_memory (mem_addr, mem_buf, mem_len) == 0) + bin2hex (mem_buf, cs.own_buf, mem_len); + else + write_enn (cs.own_buf); + } + else if (cs.own_buf[0] == 'X') + { + if (decode_X_packet (&cs.own_buf[1], len - 1, &mem_addr, + &mem_len, &mem_buf) < 0 + || target_write_memory (mem_addr, mem_buf, mem_len) != 0) + write_enn (cs.own_buf); + else + write_ok (cs.own_buf); + } + else + { + decode_M_packet (&cs.own_buf[1], &mem_addr, &mem_len, &mem_buf); + if (target_write_memory (mem_addr, mem_buf, mem_len) == 0) + write_ok (cs.own_buf); + else + write_enn (cs.own_buf); + } + free (mem_buf); + if (putpkt (cs.own_buf) < 0) + return -1; + len = getpkt (cs.own_buf); + if (len < 0) + return -1; + } + + if (cs.own_buf[0] == 'E') + { + warning ("An error occurred while relocating an instruction: %s", + cs.own_buf); + return -1; + } + + if (!startswith (cs.own_buf, "qRelocInsn:")) + { + warning ("Malformed response to qRelocInsn, ignoring: %s", + cs.own_buf); + return -1; + } + + unpack_varlen_hex (cs.own_buf + strlen ("qRelocInsn:"), &written); + + *to += written; + return 0; +} + +void +monitor_output (const char *msg) +{ + int len = strlen (msg); + char *buf = (char *) xmalloc (len * 2 + 2); + + buf[0] = 'O'; + bin2hex ((const gdb_byte *) msg, buf + 1, len); + + putpkt (buf); + free (buf); +} + +#endif diff -Nru gdb-9.1/gdbserver/remote-utils.h gdb-10.2/gdbserver/remote-utils.h --- gdb-9.1/gdbserver/remote-utils.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/remote-utils.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,70 @@ +/* Remote utility routines for the remote server for GDB. + Copyright (C) 1993-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef GDBSERVER_REMOTE_UTILS_H +#define GDBSERVER_REMOTE_UTILS_H + +int gdb_connected (void); + +#define STDIO_CONNECTION_NAME "stdio" +int remote_connection_is_stdio (void); + +ptid_t read_ptid (const char *buf, const char **obuf); +char *write_ptid (char *buf, ptid_t ptid); + +int putpkt (char *buf); +int putpkt_binary (char *buf, int len); +int putpkt_notif (char *buf); +int getpkt (char *buf); +void remote_prepare (const char *name); +void remote_open (const char *name); +void remote_close (void); +void write_ok (char *buf); +void write_enn (char *buf); +void initialize_async_io (void); +void enable_async_io (void); +void disable_async_io (void); +void check_remote_input_interrupt_request (void); +void prepare_resume_reply (char *buf, ptid_t ptid, + struct target_waitstatus *status); + +const char *decode_address_to_semicolon (CORE_ADDR *addrp, const char *start); +void decode_address (CORE_ADDR *addrp, const char *start, int len); +void decode_m_packet (char *from, CORE_ADDR * mem_addr_ptr, + unsigned int *len_ptr); +void decode_M_packet (char *from, CORE_ADDR * mem_addr_ptr, + unsigned int *len_ptr, unsigned char **to_p); +int decode_X_packet (char *from, int packet_len, CORE_ADDR * mem_addr_ptr, + unsigned int *len_ptr, unsigned char **to_p); +int decode_xfer_write (char *buf, int packet_len, + CORE_ADDR *offset, unsigned int *len, + unsigned char *data); +int decode_search_memory_packet (const char *buf, int packet_len, + CORE_ADDR *start_addrp, + CORE_ADDR *search_space_lenp, + gdb_byte *pattern, + unsigned int *pattern_lenp); + +void clear_symbol_cache (struct sym_cache **symcache_p); +int look_up_one_symbol (const char *name, CORE_ADDR *addrp, int may_ask_gdb); + +int relocate_instruction (CORE_ADDR *to, CORE_ADDR oldloc); + +void monitor_output (const char *msg); + +#endif /* GDBSERVER_REMOTE_UTILS_H */ diff -Nru gdb-9.1/gdbserver/server.cc gdb-10.2/gdbserver/server.cc --- gdb-9.1/gdbserver/server.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/server.cc 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,4584 @@ +/* Main code for remote server for GDB. + Copyright (C) 1989-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "server.h" +#include "gdbthread.h" +#include "gdbsupport/agent.h" +#include "notif.h" +#include "tdesc.h" +#include "gdbsupport/rsp-low.h" +#include "gdbsupport/signals-state-save-restore.h" +#include <ctype.h> +#include <unistd.h> +#if HAVE_SIGNAL_H +#include <signal.h> +#endif +#include "gdbsupport/gdb_vecs.h" +#include "gdbsupport/gdb_wait.h" +#include "gdbsupport/btrace-common.h" +#include "gdbsupport/filestuff.h" +#include "tracepoint.h" +#include "dll.h" +#include "hostio.h" +#include <vector> +#include "gdbsupport/common-inferior.h" +#include "gdbsupport/job-control.h" +#include "gdbsupport/environ.h" +#include "filenames.h" +#include "gdbsupport/pathstuff.h" +#ifdef USE_XML +#include "xml-builtin.h" +#endif + +#include "gdbsupport/selftest.h" +#include "gdbsupport/scope-exit.h" +#include "gdbsupport/gdb_select.h" +#include "gdbsupport/scoped_restore.h" + +#define require_running_or_return(BUF) \ + if (!target_running ()) \ + { \ + write_enn (BUF); \ + return; \ + } + +#define require_running_or_break(BUF) \ + if (!target_running ()) \ + { \ + write_enn (BUF); \ + break; \ + } + +/* String containing the current directory (what getwd would return). */ + +char *current_directory; + +/* The environment to pass to the inferior when creating it. */ + +static gdb_environ our_environ; + +bool server_waiting; + +static bool extended_protocol; +static bool response_needed; +static bool exit_requested; + +/* --once: Exit after the first connection has closed. */ +bool run_once; + +/* Whether to report TARGET_WAITKIND_NO_RESUMED events. */ +static bool report_no_resumed; + +/* The event loop checks this to decide whether to continue accepting + events. */ +static bool keep_processing_events = true; + +bool non_stop; + +static struct { + /* Set the PROGRAM_PATH. Here we adjust the path of the provided + binary if needed. */ + void set (gdb::unique_xmalloc_ptr<char> &&path) + { + m_path = std::move (path); + + /* Make sure we're using the absolute path of the inferior when + creating it. */ + if (!contains_dir_separator (m_path.get ())) + { + int reg_file_errno; + + /* Check if the file is in our CWD. If it is, then we prefix + its name with CURRENT_DIRECTORY. Otherwise, we leave the + name as-is because we'll try searching for it in $PATH. */ + if (is_regular_file (m_path.get (), ®_file_errno)) + m_path = gdb_abspath (m_path.get ()); + } + } + + /* Return the PROGRAM_PATH. */ + char *get () + { return m_path.get (); } + +private: + /* The program name, adjusted if needed. */ + gdb::unique_xmalloc_ptr<char> m_path; +} program_path; +static std::vector<char *> program_args; +static std::string wrapper_argv; + +/* The PID of the originally created or attached inferior. Used to + send signals to the process when GDB sends us an asynchronous interrupt + (user hitting Control-C in the client), and to wait for the child to exit + when no longer debugging it. */ + +unsigned long signal_pid; + +/* Set if you want to disable optional thread related packets support + in gdbserver, for the sake of testing GDB against stubs that don't + support them. */ +bool disable_packet_vCont; +bool disable_packet_Tthread; +bool disable_packet_qC; +bool disable_packet_qfThreadInfo; +bool disable_packet_T; + +static unsigned char *mem_buf; + +/* A sub-class of 'struct notif_event' for stop, holding information + relative to a single stop reply. We keep a queue of these to + push to GDB in non-stop mode. */ + +struct vstop_notif : public notif_event +{ + /* Thread or process that got the event. */ + ptid_t ptid; + + /* Event info. */ + struct target_waitstatus status; +}; + +/* The current btrace configuration. This is gdbserver's mirror of GDB's + btrace configuration. */ +static struct btrace_config current_btrace_conf; + +/* The client remote protocol state. */ + +static client_state g_client_state; + +client_state & +get_client_state () +{ + client_state &cs = g_client_state; + return cs; +} + + +/* Put a stop reply to the stop reply queue. */ + +static void +queue_stop_reply (ptid_t ptid, struct target_waitstatus *status) +{ + struct vstop_notif *new_notif = new struct vstop_notif; + + new_notif->ptid = ptid; + new_notif->status = *status; + + notif_event_enque (¬if_stop, new_notif); +} + +static bool +remove_all_on_match_ptid (struct notif_event *event, ptid_t filter_ptid) +{ + struct vstop_notif *vstop_event = (struct vstop_notif *) event; + + return vstop_event->ptid.matches (filter_ptid); +} + +/* See server.h. */ + +void +discard_queued_stop_replies (ptid_t ptid) +{ + std::list<notif_event *>::iterator iter, next, end; + end = notif_stop.queue.end (); + for (iter = notif_stop.queue.begin (); iter != end; iter = next) + { + next = iter; + ++next; + + if (remove_all_on_match_ptid (*iter, ptid)) + { + delete *iter; + notif_stop.queue.erase (iter); + } + } +} + +static void +vstop_notif_reply (struct notif_event *event, char *own_buf) +{ + struct vstop_notif *vstop = (struct vstop_notif *) event; + + prepare_resume_reply (own_buf, vstop->ptid, &vstop->status); +} + +/* Helper for in_queued_stop_replies. */ + +static bool +in_queued_stop_replies_ptid (struct notif_event *event, ptid_t filter_ptid) +{ + struct vstop_notif *vstop_event = (struct vstop_notif *) event; + + if (vstop_event->ptid.matches (filter_ptid)) + return true; + + /* Don't resume fork children that GDB does not know about yet. */ + if ((vstop_event->status.kind == TARGET_WAITKIND_FORKED + || vstop_event->status.kind == TARGET_WAITKIND_VFORKED) + && vstop_event->status.value.related_pid.matches (filter_ptid)) + return true; + + return false; +} + +/* See server.h. */ + +int +in_queued_stop_replies (ptid_t ptid) +{ + for (notif_event *event : notif_stop.queue) + { + if (in_queued_stop_replies_ptid (event, ptid)) + return true; + } + + return false; +} + +struct notif_server notif_stop = +{ + "vStopped", "Stop", {}, vstop_notif_reply, +}; + +static int +target_running (void) +{ + return get_first_thread () != NULL; +} + +/* See gdbsupport/common-inferior.h. */ + +const char * +get_exec_wrapper () +{ + return !wrapper_argv.empty () ? wrapper_argv.c_str () : NULL; +} + +/* See gdbsupport/common-inferior.h. */ + +const char * +get_exec_file (int err) +{ + if (err && program_path.get () == NULL) + error (_("No executable file specified.")); + + return program_path.get (); +} + +/* See server.h. */ + +gdb_environ * +get_environ () +{ + return &our_environ; +} + +static int +attach_inferior (int pid) +{ + client_state &cs = get_client_state (); + /* myattach should return -1 if attaching is unsupported, + 0 if it succeeded, and call error() otherwise. */ + + if (find_process_pid (pid) != nullptr) + error ("Already attached to process %d\n", pid); + + if (myattach (pid) != 0) + return -1; + + fprintf (stderr, "Attached; pid = %d\n", pid); + fflush (stderr); + + /* FIXME - It may be that we should get the SIGNAL_PID from the + attach function, so that it can be the main thread instead of + whichever we were told to attach to. */ + signal_pid = pid; + + if (!non_stop) + { + cs.last_ptid = mywait (ptid_t (pid), &cs.last_status, 0, 0); + + /* GDB knows to ignore the first SIGSTOP after attaching to a running + process using the "attach" command, but this is different; it's + just using "target remote". Pretend it's just starting up. */ + if (cs.last_status.kind == TARGET_WAITKIND_STOPPED + && cs.last_status.value.sig == GDB_SIGNAL_STOP) + cs.last_status.value.sig = GDB_SIGNAL_TRAP; + + current_thread->last_resume_kind = resume_stop; + current_thread->last_status = cs.last_status; + } + + return 0; +} + +/* Decode a qXfer read request. Return 0 if everything looks OK, + or -1 otherwise. */ + +static int +decode_xfer_read (char *buf, CORE_ADDR *ofs, unsigned int *len) +{ + /* After the read marker and annex, qXfer looks like a + traditional 'm' packet. */ + decode_m_packet (buf, ofs, len); + + return 0; +} + +static int +decode_xfer (char *buf, char **object, char **rw, char **annex, char **offset) +{ + /* Extract and NUL-terminate the object. */ + *object = buf; + while (*buf && *buf != ':') + buf++; + if (*buf == '\0') + return -1; + *buf++ = 0; + + /* Extract and NUL-terminate the read/write action. */ + *rw = buf; + while (*buf && *buf != ':') + buf++; + if (*buf == '\0') + return -1; + *buf++ = 0; + + /* Extract and NUL-terminate the annex. */ + *annex = buf; + while (*buf && *buf != ':') + buf++; + if (*buf == '\0') + return -1; + *buf++ = 0; + + *offset = buf; + return 0; +} + +/* Write the response to a successful qXfer read. Returns the + length of the (binary) data stored in BUF, corresponding + to as much of DATA/LEN as we could fit. IS_MORE controls + the first character of the response. */ +static int +write_qxfer_response (char *buf, const gdb_byte *data, int len, int is_more) +{ + int out_len; + + if (is_more) + buf[0] = 'm'; + else + buf[0] = 'l'; + + return remote_escape_output (data, len, 1, (unsigned char *) buf + 1, + &out_len, PBUFSIZ - 2) + 1; +} + +/* Handle btrace enabling in BTS format. */ + +static void +handle_btrace_enable_bts (struct thread_info *thread) +{ + if (thread->btrace != NULL) + error (_("Btrace already enabled.")); + + current_btrace_conf.format = BTRACE_FORMAT_BTS; + thread->btrace = target_enable_btrace (thread->id, ¤t_btrace_conf); +} + +/* Handle btrace enabling in Intel Processor Trace format. */ + +static void +handle_btrace_enable_pt (struct thread_info *thread) +{ + if (thread->btrace != NULL) + error (_("Btrace already enabled.")); + + current_btrace_conf.format = BTRACE_FORMAT_PT; + thread->btrace = target_enable_btrace (thread->id, ¤t_btrace_conf); +} + +/* Handle btrace disabling. */ + +static void +handle_btrace_disable (struct thread_info *thread) +{ + + if (thread->btrace == NULL) + error (_("Branch tracing not enabled.")); + + if (target_disable_btrace (thread->btrace) != 0) + error (_("Could not disable branch tracing.")); + + thread->btrace = NULL; +} + +/* Handle the "Qbtrace" packet. */ + +static int +handle_btrace_general_set (char *own_buf) +{ + client_state &cs = get_client_state (); + struct thread_info *thread; + char *op; + + if (!startswith (own_buf, "Qbtrace:")) + return 0; + + op = own_buf + strlen ("Qbtrace:"); + + if (cs.general_thread == null_ptid + || cs.general_thread == minus_one_ptid) + { + strcpy (own_buf, "E.Must select a single thread."); + return -1; + } + + thread = find_thread_ptid (cs.general_thread); + if (thread == NULL) + { + strcpy (own_buf, "E.No such thread."); + return -1; + } + + try + { + if (strcmp (op, "bts") == 0) + handle_btrace_enable_bts (thread); + else if (strcmp (op, "pt") == 0) + handle_btrace_enable_pt (thread); + else if (strcmp (op, "off") == 0) + handle_btrace_disable (thread); + else + error (_("Bad Qbtrace operation. Use bts, pt, or off.")); + + write_ok (own_buf); + } + catch (const gdb_exception_error &exception) + { + sprintf (own_buf, "E.%s", exception.what ()); + } + + return 1; +} + +/* Handle the "Qbtrace-conf" packet. */ + +static int +handle_btrace_conf_general_set (char *own_buf) +{ + client_state &cs = get_client_state (); + struct thread_info *thread; + char *op; + + if (!startswith (own_buf, "Qbtrace-conf:")) + return 0; + + op = own_buf + strlen ("Qbtrace-conf:"); + + if (cs.general_thread == null_ptid + || cs.general_thread == minus_one_ptid) + { + strcpy (own_buf, "E.Must select a single thread."); + return -1; + } + + thread = find_thread_ptid (cs.general_thread); + if (thread == NULL) + { + strcpy (own_buf, "E.No such thread."); + return -1; + } + + if (startswith (op, "bts:size=")) + { + unsigned long size; + char *endp = NULL; + + errno = 0; + size = strtoul (op + strlen ("bts:size="), &endp, 16); + if (endp == NULL || *endp != 0 || errno != 0 || size > UINT_MAX) + { + strcpy (own_buf, "E.Bad size value."); + return -1; + } + + current_btrace_conf.bts.size = (unsigned int) size; + } + else if (strncmp (op, "pt:size=", strlen ("pt:size=")) == 0) + { + unsigned long size; + char *endp = NULL; + + errno = 0; + size = strtoul (op + strlen ("pt:size="), &endp, 16); + if (endp == NULL || *endp != 0 || errno != 0 || size > UINT_MAX) + { + strcpy (own_buf, "E.Bad size value."); + return -1; + } + + current_btrace_conf.pt.size = (unsigned int) size; + } + else + { + strcpy (own_buf, "E.Bad Qbtrace configuration option."); + return -1; + } + + write_ok (own_buf); + return 1; +} + +/* Handle all of the extended 'Q' packets. */ + +static void +handle_general_set (char *own_buf) +{ + client_state &cs = get_client_state (); + if (startswith (own_buf, "QPassSignals:")) + { + int numsigs = (int) GDB_SIGNAL_LAST, i; + const char *p = own_buf + strlen ("QPassSignals:"); + CORE_ADDR cursig; + + p = decode_address_to_semicolon (&cursig, p); + for (i = 0; i < numsigs; i++) + { + if (i == cursig) + { + cs.pass_signals[i] = 1; + if (*p == '\0') + /* Keep looping, to clear the remaining signals. */ + cursig = -1; + else + p = decode_address_to_semicolon (&cursig, p); + } + else + cs.pass_signals[i] = 0; + } + strcpy (own_buf, "OK"); + return; + } + + if (startswith (own_buf, "QProgramSignals:")) + { + int numsigs = (int) GDB_SIGNAL_LAST, i; + const char *p = own_buf + strlen ("QProgramSignals:"); + CORE_ADDR cursig; + + cs.program_signals_p = 1; + + p = decode_address_to_semicolon (&cursig, p); + for (i = 0; i < numsigs; i++) + { + if (i == cursig) + { + cs.program_signals[i] = 1; + if (*p == '\0') + /* Keep looping, to clear the remaining signals. */ + cursig = -1; + else + p = decode_address_to_semicolon (&cursig, p); + } + else + cs.program_signals[i] = 0; + } + strcpy (own_buf, "OK"); + return; + } + + if (startswith (own_buf, "QCatchSyscalls:")) + { + const char *p = own_buf + sizeof ("QCatchSyscalls:") - 1; + int enabled = -1; + CORE_ADDR sysno; + struct process_info *process; + + if (!target_running () || !target_supports_catch_syscall ()) + { + write_enn (own_buf); + return; + } + + if (strcmp (p, "0") == 0) + enabled = 0; + else if (p[0] == '1' && (p[1] == ';' || p[1] == '\0')) + enabled = 1; + else + { + fprintf (stderr, "Unknown catch-syscalls mode requested: %s\n", + own_buf); + write_enn (own_buf); + return; + } + + process = current_process (); + process->syscalls_to_catch.clear (); + + if (enabled) + { + p += 1; + if (*p == ';') + { + p += 1; + while (*p != '\0') + { + p = decode_address_to_semicolon (&sysno, p); + process->syscalls_to_catch.push_back (sysno); + } + } + else + process->syscalls_to_catch.push_back (ANY_SYSCALL); + } + + write_ok (own_buf); + return; + } + + if (strcmp (own_buf, "QEnvironmentReset") == 0) + { + our_environ = gdb_environ::from_host_environ (); + + write_ok (own_buf); + return; + } + + if (startswith (own_buf, "QEnvironmentHexEncoded:")) + { + const char *p = own_buf + sizeof ("QEnvironmentHexEncoded:") - 1; + /* The final form of the environment variable. FINAL_VAR will + hold the 'VAR=VALUE' format. */ + std::string final_var = hex2str (p); + std::string var_name, var_value; + + if (remote_debug) + { + debug_printf (_("[QEnvironmentHexEncoded received '%s']\n"), p); + debug_printf (_("[Environment variable to be set: '%s']\n"), + final_var.c_str ()); + debug_flush (); + } + + size_t pos = final_var.find ('='); + if (pos == std::string::npos) + { + warning (_("Unexpected format for environment variable: '%s'"), + final_var.c_str ()); + write_enn (own_buf); + return; + } + + var_name = final_var.substr (0, pos); + var_value = final_var.substr (pos + 1, std::string::npos); + + our_environ.set (var_name.c_str (), var_value.c_str ()); + + write_ok (own_buf); + return; + } + + if (startswith (own_buf, "QEnvironmentUnset:")) + { + const char *p = own_buf + sizeof ("QEnvironmentUnset:") - 1; + std::string varname = hex2str (p); + + if (remote_debug) + { + debug_printf (_("[QEnvironmentUnset received '%s']\n"), p); + debug_printf (_("[Environment variable to be unset: '%s']\n"), + varname.c_str ()); + debug_flush (); + } + + our_environ.unset (varname.c_str ()); + + write_ok (own_buf); + return; + } + + if (strcmp (own_buf, "QStartNoAckMode") == 0) + { + if (remote_debug) + { + debug_printf ("[noack mode enabled]\n"); + debug_flush (); + } + + cs.noack_mode = 1; + write_ok (own_buf); + return; + } + + if (startswith (own_buf, "QNonStop:")) + { + char *mode = own_buf + 9; + int req = -1; + const char *req_str; + + if (strcmp (mode, "0") == 0) + req = 0; + else if (strcmp (mode, "1") == 0) + req = 1; + else + { + /* We don't know what this mode is, so complain to + GDB. */ + fprintf (stderr, "Unknown non-stop mode requested: %s\n", + own_buf); + write_enn (own_buf); + return; + } + + req_str = req ? "non-stop" : "all-stop"; + if (the_target->start_non_stop (req == 1) != 0) + { + fprintf (stderr, "Setting %s mode failed\n", req_str); + write_enn (own_buf); + return; + } + + non_stop = (req != 0); + + if (remote_debug) + debug_printf ("[%s mode enabled]\n", req_str); + + write_ok (own_buf); + return; + } + + if (startswith (own_buf, "QDisableRandomization:")) + { + char *packet = own_buf + strlen ("QDisableRandomization:"); + ULONGEST setting; + + unpack_varlen_hex (packet, &setting); + cs.disable_randomization = setting; + + if (remote_debug) + { + debug_printf (cs.disable_randomization + ? "[address space randomization disabled]\n" + : "[address space randomization enabled]\n"); + } + + write_ok (own_buf); + return; + } + + if (target_supports_tracepoints () + && handle_tracepoint_general_set (own_buf)) + return; + + if (startswith (own_buf, "QAgent:")) + { + char *mode = own_buf + strlen ("QAgent:"); + int req = 0; + + if (strcmp (mode, "0") == 0) + req = 0; + else if (strcmp (mode, "1") == 0) + req = 1; + else + { + /* We don't know what this value is, so complain to GDB. */ + sprintf (own_buf, "E.Unknown QAgent value"); + return; + } + + /* Update the flag. */ + use_agent = req; + if (remote_debug) + debug_printf ("[%s agent]\n", req ? "Enable" : "Disable"); + write_ok (own_buf); + return; + } + + if (handle_btrace_general_set (own_buf)) + return; + + if (handle_btrace_conf_general_set (own_buf)) + return; + + if (startswith (own_buf, "QThreadEvents:")) + { + char *mode = own_buf + strlen ("QThreadEvents:"); + enum tribool req = TRIBOOL_UNKNOWN; + + if (strcmp (mode, "0") == 0) + req = TRIBOOL_FALSE; + else if (strcmp (mode, "1") == 0) + req = TRIBOOL_TRUE; + else + { + /* We don't know what this mode is, so complain to GDB. */ + sprintf (own_buf, "E.Unknown thread-events mode requested: %s\n", + mode); + return; + } + + cs.report_thread_events = (req == TRIBOOL_TRUE); + + if (remote_debug) + { + const char *req_str = cs.report_thread_events ? "enabled" : "disabled"; + + debug_printf ("[thread events are now %s]\n", req_str); + } + + write_ok (own_buf); + return; + } + + if (startswith (own_buf, "QStartupWithShell:")) + { + const char *value = own_buf + strlen ("QStartupWithShell:"); + + if (strcmp (value, "1") == 0) + startup_with_shell = true; + else if (strcmp (value, "0") == 0) + startup_with_shell = false; + else + { + /* Unknown value. */ + fprintf (stderr, "Unknown value to startup-with-shell: %s\n", + own_buf); + write_enn (own_buf); + return; + } + + if (remote_debug) + debug_printf (_("[Inferior will %s started with shell]"), + startup_with_shell ? "be" : "not be"); + + write_ok (own_buf); + return; + } + + if (startswith (own_buf, "QSetWorkingDir:")) + { + const char *p = own_buf + strlen ("QSetWorkingDir:"); + + if (*p != '\0') + { + std::string path = hex2str (p); + + set_inferior_cwd (path.c_str ()); + + if (remote_debug) + debug_printf (_("[Set the inferior's current directory to %s]\n"), + path.c_str ()); + } + else + { + /* An empty argument means that we should clear out any + previously set cwd for the inferior. */ + set_inferior_cwd (NULL); + + if (remote_debug) + debug_printf (_("\ +[Unset the inferior's current directory; will use gdbserver's cwd]\n")); + } + write_ok (own_buf); + + return; + } + + /* Otherwise we didn't know what packet it was. Say we didn't + understand it. */ + own_buf[0] = 0; +} + +static const char * +get_features_xml (const char *annex) +{ + const struct target_desc *desc = current_target_desc (); + + /* `desc->xmltarget' defines what to return when looking for the + "target.xml" file. Its contents can either be verbatim XML code + (prefixed with a '@') or else the name of the actual XML file to + be used in place of "target.xml". + + This variable is set up from the auto-generated + init_registers_... routine for the current target. */ + + if (strcmp (annex, "target.xml") == 0) + { + const char *ret = tdesc_get_features_xml (desc); + + if (*ret == '@') + return ret + 1; + else + annex = ret; + } + +#ifdef USE_XML + { + int i; + + /* Look for the annex. */ + for (i = 0; xml_builtin[i][0] != NULL; i++) + if (strcmp (annex, xml_builtin[i][0]) == 0) + break; + + if (xml_builtin[i][0] != NULL) + return xml_builtin[i][1]; + } +#endif + + return NULL; +} + +static void +monitor_show_help (void) +{ + monitor_output ("The following monitor commands are supported:\n"); + monitor_output (" set debug <0|1>\n"); + monitor_output (" Enable general debugging messages\n"); + monitor_output (" set debug-hw-points <0|1>\n"); + monitor_output (" Enable h/w breakpoint/watchpoint debugging messages\n"); + monitor_output (" set remote-debug <0|1>\n"); + monitor_output (" Enable remote protocol debugging messages\n"); + monitor_output (" set debug-format option1[,option2,...]\n"); + monitor_output (" Add additional information to debugging messages\n"); + monitor_output (" Options: all, none"); + monitor_output (", timestamp"); + monitor_output ("\n"); + monitor_output (" exit\n"); + monitor_output (" Quit GDBserver\n"); +} + +/* Read trace frame or inferior memory. Returns the number of bytes + actually read, zero when no further transfer is possible, and -1 on + error. Return of a positive value smaller than LEN does not + indicate there's no more to be read, only the end of the transfer. + E.g., when GDB reads memory from a traceframe, a first request may + be served from a memory block that does not cover the whole request + length. A following request gets the rest served from either + another block (of the same traceframe) or from the read-only + regions. */ + +static int +gdb_read_memory (CORE_ADDR memaddr, unsigned char *myaddr, int len) +{ + client_state &cs = get_client_state (); + int res; + + if (cs.current_traceframe >= 0) + { + ULONGEST nbytes; + ULONGEST length = len; + + if (traceframe_read_mem (cs.current_traceframe, + memaddr, myaddr, len, &nbytes)) + return -1; + /* Data read from trace buffer, we're done. */ + if (nbytes > 0) + return nbytes; + if (!in_readonly_region (memaddr, length)) + return -1; + /* Otherwise we have a valid readonly case, fall through. */ + /* (assume no half-trace half-real blocks for now) */ + } + + res = prepare_to_access_memory (); + if (res == 0) + { + if (set_desired_thread ()) + res = read_inferior_memory (memaddr, myaddr, len); + else + res = 1; + done_accessing_memory (); + + return res == 0 ? len : -1; + } + else + return -1; +} + +/* Write trace frame or inferior memory. Actually, writing to trace + frames is forbidden. */ + +static int +gdb_write_memory (CORE_ADDR memaddr, const unsigned char *myaddr, int len) +{ + client_state &cs = get_client_state (); + if (cs.current_traceframe >= 0) + return EIO; + else + { + int ret; + + ret = prepare_to_access_memory (); + if (ret == 0) + { + if (set_desired_thread ()) + ret = target_write_memory (memaddr, myaddr, len); + else + ret = EIO; + done_accessing_memory (); + } + return ret; + } +} + +/* Subroutine of handle_search_memory to simplify it. */ + +static int +handle_search_memory_1 (CORE_ADDR start_addr, CORE_ADDR search_space_len, + gdb_byte *pattern, unsigned pattern_len, + gdb_byte *search_buf, + unsigned chunk_size, unsigned search_buf_size, + CORE_ADDR *found_addrp) +{ + /* Prime the search buffer. */ + + if (gdb_read_memory (start_addr, search_buf, search_buf_size) + != search_buf_size) + { + warning ("Unable to access %ld bytes of target " + "memory at 0x%lx, halting search.", + (long) search_buf_size, (long) start_addr); + return -1; + } + + /* Perform the search. + + The loop is kept simple by allocating [N + pattern-length - 1] bytes. + When we've scanned N bytes we copy the trailing bytes to the start and + read in another N bytes. */ + + while (search_space_len >= pattern_len) + { + gdb_byte *found_ptr; + unsigned nr_search_bytes = (search_space_len < search_buf_size + ? search_space_len + : search_buf_size); + + found_ptr = (gdb_byte *) memmem (search_buf, nr_search_bytes, pattern, + pattern_len); + + if (found_ptr != NULL) + { + CORE_ADDR found_addr = start_addr + (found_ptr - search_buf); + *found_addrp = found_addr; + return 1; + } + + /* Not found in this chunk, skip to next chunk. */ + + /* Don't let search_space_len wrap here, it's unsigned. */ + if (search_space_len >= chunk_size) + search_space_len -= chunk_size; + else + search_space_len = 0; + + if (search_space_len >= pattern_len) + { + unsigned keep_len = search_buf_size - chunk_size; + CORE_ADDR read_addr = start_addr + chunk_size + keep_len; + int nr_to_read; + + /* Copy the trailing part of the previous iteration to the front + of the buffer for the next iteration. */ + memcpy (search_buf, search_buf + chunk_size, keep_len); + + nr_to_read = (search_space_len - keep_len < chunk_size + ? search_space_len - keep_len + : chunk_size); + + if (gdb_read_memory (read_addr, search_buf + keep_len, + nr_to_read) != nr_to_read) + { + warning ("Unable to access %ld bytes of target memory " + "at 0x%lx, halting search.", + (long) nr_to_read, (long) read_addr); + return -1; + } + + start_addr += chunk_size; + } + } + + /* Not found. */ + + return 0; +} + +/* Handle qSearch:memory packets. */ + +static void +handle_search_memory (char *own_buf, int packet_len) +{ + CORE_ADDR start_addr; + CORE_ADDR search_space_len; + gdb_byte *pattern; + unsigned int pattern_len; + /* NOTE: also defined in find.c testcase. */ +#define SEARCH_CHUNK_SIZE 16000 + const unsigned chunk_size = SEARCH_CHUNK_SIZE; + /* Buffer to hold memory contents for searching. */ + gdb_byte *search_buf; + unsigned search_buf_size; + int found; + CORE_ADDR found_addr; + int cmd_name_len = sizeof ("qSearch:memory:") - 1; + + pattern = (gdb_byte *) malloc (packet_len); + if (pattern == NULL) + { + error ("Unable to allocate memory to perform the search"); + strcpy (own_buf, "E00"); + return; + } + if (decode_search_memory_packet (own_buf + cmd_name_len, + packet_len - cmd_name_len, + &start_addr, &search_space_len, + pattern, &pattern_len) < 0) + { + free (pattern); + error ("Error in parsing qSearch:memory packet"); + strcpy (own_buf, "E00"); + return; + } + + search_buf_size = chunk_size + pattern_len - 1; + + /* No point in trying to allocate a buffer larger than the search space. */ + if (search_space_len < search_buf_size) + search_buf_size = search_space_len; + + search_buf = (gdb_byte *) malloc (search_buf_size); + if (search_buf == NULL) + { + free (pattern); + error ("Unable to allocate memory to perform the search"); + strcpy (own_buf, "E00"); + return; + } + + found = handle_search_memory_1 (start_addr, search_space_len, + pattern, pattern_len, + search_buf, chunk_size, search_buf_size, + &found_addr); + + if (found > 0) + sprintf (own_buf, "1,%lx", (long) found_addr); + else if (found == 0) + strcpy (own_buf, "0"); + else + strcpy (own_buf, "E00"); + + free (search_buf); + free (pattern); +} + +/* Handle the "D" packet. */ + +static void +handle_detach (char *own_buf) +{ + client_state &cs = get_client_state (); + + process_info *process; + + if (cs.multi_process) + { + /* skip 'D;' */ + int pid = strtol (&own_buf[2], NULL, 16); + + process = find_process_pid (pid); + } + else + { + process = (current_thread != nullptr + ? get_thread_process (current_thread) + : nullptr); + } + + if (process == NULL) + { + write_enn (own_buf); + return; + } + + if ((tracing && disconnected_tracing) || any_persistent_commands (process)) + { + if (tracing && disconnected_tracing) + fprintf (stderr, + "Disconnected tracing in effect, " + "leaving gdbserver attached to the process\n"); + + if (any_persistent_commands (process)) + fprintf (stderr, + "Persistent commands are present, " + "leaving gdbserver attached to the process\n"); + + /* Make sure we're in non-stop/async mode, so we we can both + wait for an async socket accept, and handle async target + events simultaneously. There's also no point either in + having the target stop all threads, when we're going to + pass signals down without informing GDB. */ + if (!non_stop) + { + if (debug_threads) + debug_printf ("Forcing non-stop mode\n"); + + non_stop = true; + the_target->start_non_stop (true); + } + + process->gdb_detached = 1; + + /* Detaching implicitly resumes all threads. */ + target_continue_no_signal (minus_one_ptid); + + write_ok (own_buf); + return; + } + + fprintf (stderr, "Detaching from process %d\n", process->pid); + stop_tracing (); + + /* We'll need this after PROCESS has been destroyed. */ + int pid = process->pid; + + if (detach_inferior (process) != 0) + write_enn (own_buf); + else + { + discard_queued_stop_replies (ptid_t (pid)); + write_ok (own_buf); + + if (extended_protocol || target_running ()) + { + /* There is still at least one inferior remaining or + we are in extended mode, so don't terminate gdbserver, + and instead treat this like a normal program exit. */ + cs.last_status.kind = TARGET_WAITKIND_EXITED; + cs.last_status.value.integer = 0; + cs.last_ptid = ptid_t (pid); + + current_thread = NULL; + } + else + { + putpkt (own_buf); + remote_close (); + + /* If we are attached, then we can exit. Otherwise, we + need to hang around doing nothing, until the child is + gone. */ + join_inferior (pid); + exit (0); + } + } +} + +/* Parse options to --debug-format= and "monitor set debug-format". + ARG is the text after "--debug-format=" or "monitor set debug-format". + IS_MONITOR is non-zero if we're invoked via "monitor set debug-format". + This triggers calls to monitor_output. + The result is an empty string if all options were parsed ok, otherwise an + error message which the caller must free. + + N.B. These commands affect all debug format settings, they are not + cumulative. If a format is not specified, it is turned off. + However, we don't go to extra trouble with things like + "monitor set debug-format all,none,timestamp". + Instead we just parse them one at a time, in order. + + The syntax for "monitor set debug" we support here is not identical + to gdb's "set debug foo on|off" because we also use this function to + parse "--debug-format=foo,bar". */ + +static std::string +parse_debug_format_options (const char *arg, int is_monitor) +{ + /* First turn all debug format options off. */ + debug_timestamp = 0; + + /* First remove leading spaces, for "monitor set debug-format". */ + while (isspace (*arg)) + ++arg; + + std::vector<gdb::unique_xmalloc_ptr<char>> options + = delim_string_to_char_ptr_vec (arg, ','); + + for (const gdb::unique_xmalloc_ptr<char> &option : options) + { + if (strcmp (option.get (), "all") == 0) + { + debug_timestamp = 1; + if (is_monitor) + monitor_output ("All extra debug format options enabled.\n"); + } + else if (strcmp (option.get (), "none") == 0) + { + debug_timestamp = 0; + if (is_monitor) + monitor_output ("All extra debug format options disabled.\n"); + } + else if (strcmp (option.get (), "timestamp") == 0) + { + debug_timestamp = 1; + if (is_monitor) + monitor_output ("Timestamps will be added to debug output.\n"); + } + else if (*option == '\0') + { + /* An empty option, e.g., "--debug-format=foo,,bar", is ignored. */ + continue; + } + else + return string_printf ("Unknown debug-format argument: \"%s\"\n", + option.get ()); + } + + return std::string (); +} + +/* Handle monitor commands not handled by target-specific handlers. */ + +static void +handle_monitor_command (char *mon, char *own_buf) +{ + if (strcmp (mon, "set debug 1") == 0) + { + debug_threads = 1; + monitor_output ("Debug output enabled.\n"); + } + else if (strcmp (mon, "set debug 0") == 0) + { + debug_threads = 0; + monitor_output ("Debug output disabled.\n"); + } + else if (strcmp (mon, "set debug-hw-points 1") == 0) + { + show_debug_regs = 1; + monitor_output ("H/W point debugging output enabled.\n"); + } + else if (strcmp (mon, "set debug-hw-points 0") == 0) + { + show_debug_regs = 0; + monitor_output ("H/W point debugging output disabled.\n"); + } + else if (strcmp (mon, "set remote-debug 1") == 0) + { + remote_debug = 1; + monitor_output ("Protocol debug output enabled.\n"); + } + else if (strcmp (mon, "set remote-debug 0") == 0) + { + remote_debug = 0; + monitor_output ("Protocol debug output disabled.\n"); + } + else if (startswith (mon, "set debug-format ")) + { + std::string error_msg + = parse_debug_format_options (mon + sizeof ("set debug-format ") - 1, + 1); + + if (!error_msg.empty ()) + { + monitor_output (error_msg.c_str ()); + monitor_show_help (); + write_enn (own_buf); + } + } + else if (strcmp (mon, "set debug-file") == 0) + debug_set_output (nullptr); + else if (startswith (mon, "set debug-file ")) + debug_set_output (mon + sizeof ("set debug-file ") - 1); + else if (strcmp (mon, "help") == 0) + monitor_show_help (); + else if (strcmp (mon, "exit") == 0) + exit_requested = true; + else + { + monitor_output ("Unknown monitor command.\n\n"); + monitor_show_help (); + write_enn (own_buf); + } +} + +/* Associates a callback with each supported qXfer'able object. */ + +struct qxfer +{ + /* The object this handler handles. */ + const char *object; + + /* Request that the target transfer up to LEN 8-bit bytes of the + target's OBJECT. The OFFSET, for a seekable object, specifies + the starting point. The ANNEX can be used to provide additional + data-specific information to the target. + + Return the number of bytes actually transfered, zero when no + further transfer is possible, -1 on error, -2 when the transfer + is not supported, and -3 on a verbose error message that should + be preserved. Return of a positive value smaller than LEN does + not indicate the end of the object, only the end of the transfer. + + One, and only one, of readbuf or writebuf must be non-NULL. */ + int (*xfer) (const char *annex, + gdb_byte *readbuf, const gdb_byte *writebuf, + ULONGEST offset, LONGEST len); +}; + +/* Handle qXfer:auxv:read. */ + +static int +handle_qxfer_auxv (const char *annex, + gdb_byte *readbuf, const gdb_byte *writebuf, + ULONGEST offset, LONGEST len) +{ + if (!the_target->supports_read_auxv () || writebuf != NULL) + return -2; + + if (annex[0] != '\0' || current_thread == NULL) + return -1; + + return the_target->read_auxv (offset, readbuf, len); +} + +/* Handle qXfer:exec-file:read. */ + +static int +handle_qxfer_exec_file (const char *annex, + gdb_byte *readbuf, const gdb_byte *writebuf, + ULONGEST offset, LONGEST len) +{ + char *file; + ULONGEST pid; + int total_len; + + if (!the_target->supports_pid_to_exec_file () || writebuf != NULL) + return -2; + + if (annex[0] == '\0') + { + if (current_thread == NULL) + return -1; + + pid = pid_of (current_thread); + } + else + { + annex = unpack_varlen_hex (annex, &pid); + if (annex[0] != '\0') + return -1; + } + + if (pid <= 0) + return -1; + + file = the_target->pid_to_exec_file (pid); + if (file == NULL) + return -1; + + total_len = strlen (file); + + if (offset > total_len) + return -1; + + if (offset + len > total_len) + len = total_len - offset; + + memcpy (readbuf, file + offset, len); + return len; +} + +/* Handle qXfer:features:read. */ + +static int +handle_qxfer_features (const char *annex, + gdb_byte *readbuf, const gdb_byte *writebuf, + ULONGEST offset, LONGEST len) +{ + const char *document; + size_t total_len; + + if (writebuf != NULL) + return -2; + + if (!target_running ()) + return -1; + + /* Grab the correct annex. */ + document = get_features_xml (annex); + if (document == NULL) + return -1; + + total_len = strlen (document); + + if (offset > total_len) + return -1; + + if (offset + len > total_len) + len = total_len - offset; + + memcpy (readbuf, document + offset, len); + return len; +} + +/* Handle qXfer:libraries:read. */ + +static int +handle_qxfer_libraries (const char *annex, + gdb_byte *readbuf, const gdb_byte *writebuf, + ULONGEST offset, LONGEST len) +{ + if (writebuf != NULL) + return -2; + + if (annex[0] != '\0' || current_thread == NULL) + return -1; + + std::string document = "<library-list version=\"1.0\">\n"; + + for (const dll_info &dll : all_dlls) + document += string_printf + (" <library name=\"%s\"><segment address=\"0x%s\"/></library>\n", + dll.name.c_str (), paddress (dll.base_addr)); + + document += "</library-list>\n"; + + if (offset > document.length ()) + return -1; + + if (offset + len > document.length ()) + len = document.length () - offset; + + memcpy (readbuf, &document[offset], len); + + return len; +} + +/* Handle qXfer:libraries-svr4:read. */ + +static int +handle_qxfer_libraries_svr4 (const char *annex, + gdb_byte *readbuf, const gdb_byte *writebuf, + ULONGEST offset, LONGEST len) +{ + if (writebuf != NULL) + return -2; + + if (current_thread == NULL + || !the_target->supports_qxfer_libraries_svr4 ()) + return -1; + + return the_target->qxfer_libraries_svr4 (annex, readbuf, writebuf, + offset, len); +} + +/* Handle qXfer:osadata:read. */ + +static int +handle_qxfer_osdata (const char *annex, + gdb_byte *readbuf, const gdb_byte *writebuf, + ULONGEST offset, LONGEST len) +{ + if (!the_target->supports_qxfer_osdata () || writebuf != NULL) + return -2; + + return the_target->qxfer_osdata (annex, readbuf, NULL, offset, len); +} + +/* Handle qXfer:siginfo:read and qXfer:siginfo:write. */ + +static int +handle_qxfer_siginfo (const char *annex, + gdb_byte *readbuf, const gdb_byte *writebuf, + ULONGEST offset, LONGEST len) +{ + if (!the_target->supports_qxfer_siginfo ()) + return -2; + + if (annex[0] != '\0' || current_thread == NULL) + return -1; + + return the_target->qxfer_siginfo (annex, readbuf, writebuf, offset, len); +} + +/* Handle qXfer:statictrace:read. */ + +static int +handle_qxfer_statictrace (const char *annex, + gdb_byte *readbuf, const gdb_byte *writebuf, + ULONGEST offset, LONGEST len) +{ + client_state &cs = get_client_state (); + ULONGEST nbytes; + + if (writebuf != NULL) + return -2; + + if (annex[0] != '\0' || current_thread == NULL + || cs.current_traceframe == -1) + return -1; + + if (traceframe_read_sdata (cs.current_traceframe, offset, + readbuf, len, &nbytes)) + return -1; + return nbytes; +} + +/* Helper for handle_qxfer_threads_proper. + Emit the XML to describe the thread of INF. */ + +static void +handle_qxfer_threads_worker (thread_info *thread, struct buffer *buffer) +{ + ptid_t ptid = ptid_of (thread); + char ptid_s[100]; + int core = target_core_of_thread (ptid); + char core_s[21]; + const char *name = target_thread_name (ptid); + int handle_len; + gdb_byte *handle; + bool handle_status = target_thread_handle (ptid, &handle, &handle_len); + + write_ptid (ptid_s, ptid); + + buffer_xml_printf (buffer, "<thread id=\"%s\"", ptid_s); + + if (core != -1) + { + sprintf (core_s, "%d", core); + buffer_xml_printf (buffer, " core=\"%s\"", core_s); + } + + if (name != NULL) + buffer_xml_printf (buffer, " name=\"%s\"", name); + + if (handle_status) + { + char *handle_s = (char *) alloca (handle_len * 2 + 1); + bin2hex (handle, handle_s, handle_len); + buffer_xml_printf (buffer, " handle=\"%s\"", handle_s); + } + + buffer_xml_printf (buffer, "/>\n"); +} + +/* Helper for handle_qxfer_threads. Return true on success, false + otherwise. */ + +static bool +handle_qxfer_threads_proper (struct buffer *buffer) +{ + client_state &cs = get_client_state (); + + scoped_restore save_current_thread + = make_scoped_restore (¤t_thread); + scoped_restore save_current_general_thread + = make_scoped_restore (&cs.general_thread); + + buffer_grow_str (buffer, "<threads>\n"); + + process_info *error_proc = find_process ([&] (process_info *process) + { + /* The target may need to access memory and registers (e.g. via + libthread_db) to fetch thread properties. Prepare for memory + access here, so that we potentially pause threads just once + for all accesses. Note that even if someday we stop needing + to pause threads to access memory, we will need to be able to + access registers, or other ptrace accesses like + PTRACE_GET_THREAD_AREA. */ + + /* Need to switch to each process in turn, because + prepare_to_access_memory prepares for an access in the + current process pointed to by general_thread. */ + switch_to_process (process); + cs.general_thread = current_thread->id; + + int res = prepare_to_access_memory (); + if (res == 0) + { + for_each_thread (process->pid, [&] (thread_info *thread) + { + handle_qxfer_threads_worker (thread, buffer); + }); + + done_accessing_memory (); + return false; + } + else + return true; + }); + + buffer_grow_str0 (buffer, "</threads>\n"); + return error_proc == nullptr; +} + +/* Handle qXfer:threads:read. */ + +static int +handle_qxfer_threads (const char *annex, + gdb_byte *readbuf, const gdb_byte *writebuf, + ULONGEST offset, LONGEST len) +{ + static char *result = 0; + static unsigned int result_length = 0; + + if (writebuf != NULL) + return -2; + + if (annex[0] != '\0') + return -1; + + if (offset == 0) + { + struct buffer buffer; + /* When asked for data at offset 0, generate everything and store into + 'result'. Successive reads will be served off 'result'. */ + if (result) + free (result); + + buffer_init (&buffer); + + bool res = handle_qxfer_threads_proper (&buffer); + + result = buffer_finish (&buffer); + result_length = strlen (result); + buffer_free (&buffer); + + if (!res) + return -1; + } + + if (offset >= result_length) + { + /* We're out of data. */ + free (result); + result = NULL; + result_length = 0; + return 0; + } + + if (len > result_length - offset) + len = result_length - offset; + + memcpy (readbuf, result + offset, len); + + return len; +} + +/* Handle qXfer:traceframe-info:read. */ + +static int +handle_qxfer_traceframe_info (const char *annex, + gdb_byte *readbuf, const gdb_byte *writebuf, + ULONGEST offset, LONGEST len) +{ + client_state &cs = get_client_state (); + static char *result = 0; + static unsigned int result_length = 0; + + if (writebuf != NULL) + return -2; + + if (!target_running () || annex[0] != '\0' || cs.current_traceframe == -1) + return -1; + + if (offset == 0) + { + struct buffer buffer; + + /* When asked for data at offset 0, generate everything and + store into 'result'. Successive reads will be served off + 'result'. */ + free (result); + + buffer_init (&buffer); + + traceframe_read_info (cs.current_traceframe, &buffer); + + result = buffer_finish (&buffer); + result_length = strlen (result); + buffer_free (&buffer); + } + + if (offset >= result_length) + { + /* We're out of data. */ + free (result); + result = NULL; + result_length = 0; + return 0; + } + + if (len > result_length - offset) + len = result_length - offset; + + memcpy (readbuf, result + offset, len); + return len; +} + +/* Handle qXfer:fdpic:read. */ + +static int +handle_qxfer_fdpic (const char *annex, gdb_byte *readbuf, + const gdb_byte *writebuf, ULONGEST offset, LONGEST len) +{ + if (!the_target->supports_read_loadmap ()) + return -2; + + if (current_thread == NULL) + return -1; + + return the_target->read_loadmap (annex, offset, readbuf, len); +} + +/* Handle qXfer:btrace:read. */ + +static int +handle_qxfer_btrace (const char *annex, + gdb_byte *readbuf, const gdb_byte *writebuf, + ULONGEST offset, LONGEST len) +{ + client_state &cs = get_client_state (); + static struct buffer cache; + struct thread_info *thread; + enum btrace_read_type type; + int result; + + if (writebuf != NULL) + return -2; + + if (cs.general_thread == null_ptid + || cs.general_thread == minus_one_ptid) + { + strcpy (cs.own_buf, "E.Must select a single thread."); + return -3; + } + + thread = find_thread_ptid (cs.general_thread); + if (thread == NULL) + { + strcpy (cs.own_buf, "E.No such thread."); + return -3; + } + + if (thread->btrace == NULL) + { + strcpy (cs.own_buf, "E.Btrace not enabled."); + return -3; + } + + if (strcmp (annex, "all") == 0) + type = BTRACE_READ_ALL; + else if (strcmp (annex, "new") == 0) + type = BTRACE_READ_NEW; + else if (strcmp (annex, "delta") == 0) + type = BTRACE_READ_DELTA; + else + { + strcpy (cs.own_buf, "E.Bad annex."); + return -3; + } + + if (offset == 0) + { + buffer_free (&cache); + + try + { + result = target_read_btrace (thread->btrace, &cache, type); + if (result != 0) + memcpy (cs.own_buf, cache.buffer, cache.used_size); + } + catch (const gdb_exception_error &exception) + { + sprintf (cs.own_buf, "E.%s", exception.what ()); + result = -1; + } + + if (result != 0) + return -3; + } + else if (offset > cache.used_size) + { + buffer_free (&cache); + return -3; + } + + if (len > cache.used_size - offset) + len = cache.used_size - offset; + + memcpy (readbuf, cache.buffer + offset, len); + + return len; +} + +/* Handle qXfer:btrace-conf:read. */ + +static int +handle_qxfer_btrace_conf (const char *annex, + gdb_byte *readbuf, const gdb_byte *writebuf, + ULONGEST offset, LONGEST len) +{ + client_state &cs = get_client_state (); + static struct buffer cache; + struct thread_info *thread; + int result; + + if (writebuf != NULL) + return -2; + + if (annex[0] != '\0') + return -1; + + if (cs.general_thread == null_ptid + || cs.general_thread == minus_one_ptid) + { + strcpy (cs.own_buf, "E.Must select a single thread."); + return -3; + } + + thread = find_thread_ptid (cs.general_thread); + if (thread == NULL) + { + strcpy (cs.own_buf, "E.No such thread."); + return -3; + } + + if (thread->btrace == NULL) + { + strcpy (cs.own_buf, "E.Btrace not enabled."); + return -3; + } + + if (offset == 0) + { + buffer_free (&cache); + + try + { + result = target_read_btrace_conf (thread->btrace, &cache); + if (result != 0) + memcpy (cs.own_buf, cache.buffer, cache.used_size); + } + catch (const gdb_exception_error &exception) + { + sprintf (cs.own_buf, "E.%s", exception.what ()); + result = -1; + } + + if (result != 0) + return -3; + } + else if (offset > cache.used_size) + { + buffer_free (&cache); + return -3; + } + + if (len > cache.used_size - offset) + len = cache.used_size - offset; + + memcpy (readbuf, cache.buffer + offset, len); + + return len; +} + +static const struct qxfer qxfer_packets[] = + { + { "auxv", handle_qxfer_auxv }, + { "btrace", handle_qxfer_btrace }, + { "btrace-conf", handle_qxfer_btrace_conf }, + { "exec-file", handle_qxfer_exec_file}, + { "fdpic", handle_qxfer_fdpic}, + { "features", handle_qxfer_features }, + { "libraries", handle_qxfer_libraries }, + { "libraries-svr4", handle_qxfer_libraries_svr4 }, + { "osdata", handle_qxfer_osdata }, + { "siginfo", handle_qxfer_siginfo }, + { "statictrace", handle_qxfer_statictrace }, + { "threads", handle_qxfer_threads }, + { "traceframe-info", handle_qxfer_traceframe_info }, + }; + +static int +handle_qxfer (char *own_buf, int packet_len, int *new_packet_len_p) +{ + int i; + char *object; + char *rw; + char *annex; + char *offset; + + if (!startswith (own_buf, "qXfer:")) + return 0; + + /* Grab the object, r/w and annex. */ + if (decode_xfer (own_buf + 6, &object, &rw, &annex, &offset) < 0) + { + write_enn (own_buf); + return 1; + } + + for (i = 0; + i < sizeof (qxfer_packets) / sizeof (qxfer_packets[0]); + i++) + { + const struct qxfer *q = &qxfer_packets[i]; + + if (strcmp (object, q->object) == 0) + { + if (strcmp (rw, "read") == 0) + { + unsigned char *data; + int n; + CORE_ADDR ofs; + unsigned int len; + + /* Grab the offset and length. */ + if (decode_xfer_read (offset, &ofs, &len) < 0) + { + write_enn (own_buf); + return 1; + } + + /* Read one extra byte, as an indicator of whether there is + more. */ + if (len > PBUFSIZ - 2) + len = PBUFSIZ - 2; + data = (unsigned char *) malloc (len + 1); + if (data == NULL) + { + write_enn (own_buf); + return 1; + } + n = (*q->xfer) (annex, data, NULL, ofs, len + 1); + if (n == -2) + { + free (data); + return 0; + } + else if (n == -3) + { + /* Preserve error message. */ + } + else if (n < 0) + write_enn (own_buf); + else if (n > len) + *new_packet_len_p = write_qxfer_response (own_buf, data, len, 1); + else + *new_packet_len_p = write_qxfer_response (own_buf, data, n, 0); + + free (data); + return 1; + } + else if (strcmp (rw, "write") == 0) + { + int n; + unsigned int len; + CORE_ADDR ofs; + unsigned char *data; + + strcpy (own_buf, "E00"); + data = (unsigned char *) malloc (packet_len - (offset - own_buf)); + if (data == NULL) + { + write_enn (own_buf); + return 1; + } + if (decode_xfer_write (offset, packet_len - (offset - own_buf), + &ofs, &len, data) < 0) + { + free (data); + write_enn (own_buf); + return 1; + } + + n = (*q->xfer) (annex, NULL, data, ofs, len); + if (n == -2) + { + free (data); + return 0; + } + else if (n == -3) + { + /* Preserve error message. */ + } + else if (n < 0) + write_enn (own_buf); + else + sprintf (own_buf, "%x", n); + + free (data); + return 1; + } + + return 0; + } + } + + return 0; +} + +/* Compute 32 bit CRC from inferior memory. + + On success, return 32 bit CRC. + On failure, return (unsigned long long) -1. */ + +static unsigned long long +crc32 (CORE_ADDR base, int len, unsigned int crc) +{ + while (len--) + { + unsigned char byte = 0; + + /* Return failure if memory read fails. */ + if (read_inferior_memory (base, &byte, 1) != 0) + return (unsigned long long) -1; + + crc = xcrc32 (&byte, 1, crc); + base++; + } + return (unsigned long long) crc; +} + +/* Add supported btrace packets to BUF. */ + +static void +supported_btrace_packets (char *buf) +{ + strcat (buf, ";Qbtrace:bts+"); + strcat (buf, ";Qbtrace-conf:bts:size+"); + strcat (buf, ";Qbtrace:pt+"); + strcat (buf, ";Qbtrace-conf:pt:size+"); + strcat (buf, ";Qbtrace:off+"); + strcat (buf, ";qXfer:btrace:read+"); + strcat (buf, ";qXfer:btrace-conf:read+"); +} + +/* Handle all of the extended 'q' packets. */ + +static void +handle_query (char *own_buf, int packet_len, int *new_packet_len_p) +{ + client_state &cs = get_client_state (); + static std::list<thread_info *>::const_iterator thread_iter; + + /* Reply the current thread id. */ + if (strcmp ("qC", own_buf) == 0 && !disable_packet_qC) + { + ptid_t ptid; + require_running_or_return (own_buf); + + if (cs.general_thread != null_ptid && cs.general_thread != minus_one_ptid) + ptid = cs.general_thread; + else + { + thread_iter = all_threads.begin (); + ptid = (*thread_iter)->id; + } + + sprintf (own_buf, "QC"); + own_buf += 2; + write_ptid (own_buf, ptid); + return; + } + + if (strcmp ("qSymbol::", own_buf) == 0) + { + struct thread_info *save_thread = current_thread; + + /* For qSymbol, GDB only changes the current thread if the + previous current thread was of a different process. So if + the previous thread is gone, we need to pick another one of + the same process. This can happen e.g., if we followed an + exec in a non-leader thread. */ + if (current_thread == NULL) + { + current_thread + = find_any_thread_of_pid (cs.general_thread.pid ()); + + /* Just in case, if we didn't find a thread, then bail out + instead of crashing. */ + if (current_thread == NULL) + { + write_enn (own_buf); + current_thread = save_thread; + return; + } + } + + /* GDB is suggesting new symbols have been loaded. This may + mean a new shared library has been detected as loaded, so + take the opportunity to check if breakpoints we think are + inserted, still are. Note that it isn't guaranteed that + we'll see this when a shared library is loaded, and nor will + we see this for unloads (although breakpoints in unloaded + libraries shouldn't trigger), as GDB may not find symbols for + the library at all. We also re-validate breakpoints when we + see a second GDB breakpoint for the same address, and or when + we access breakpoint shadows. */ + validate_breakpoints (); + + if (target_supports_tracepoints ()) + tracepoint_look_up_symbols (); + + if (current_thread != NULL) + the_target->look_up_symbols (); + + current_thread = save_thread; + + strcpy (own_buf, "OK"); + return; + } + + if (!disable_packet_qfThreadInfo) + { + if (strcmp ("qfThreadInfo", own_buf) == 0) + { + require_running_or_return (own_buf); + thread_iter = all_threads.begin (); + + *own_buf++ = 'm'; + ptid_t ptid = (*thread_iter)->id; + write_ptid (own_buf, ptid); + thread_iter++; + return; + } + + if (strcmp ("qsThreadInfo", own_buf) == 0) + { + require_running_or_return (own_buf); + if (thread_iter != all_threads.end ()) + { + *own_buf++ = 'm'; + ptid_t ptid = (*thread_iter)->id; + write_ptid (own_buf, ptid); + thread_iter++; + return; + } + else + { + sprintf (own_buf, "l"); + return; + } + } + } + + if (the_target->supports_read_offsets () + && strcmp ("qOffsets", own_buf) == 0) + { + CORE_ADDR text, data; + + require_running_or_return (own_buf); + if (the_target->read_offsets (&text, &data)) + sprintf (own_buf, "Text=%lX;Data=%lX;Bss=%lX", + (long)text, (long)data, (long)data); + else + write_enn (own_buf); + + return; + } + + /* Protocol features query. */ + if (startswith (own_buf, "qSupported") + && (own_buf[10] == ':' || own_buf[10] == '\0')) + { + char *p = &own_buf[10]; + int gdb_supports_qRelocInsn = 0; + + /* Process each feature being provided by GDB. The first + feature will follow a ':', and latter features will follow + ';'. */ + if (*p == ':') + { + std::vector<std::string> qsupported; + std::vector<const char *> unknowns; + + /* Two passes, to avoid nested strtok calls in + target_process_qsupported. */ + char *saveptr; + for (p = strtok_r (p + 1, ";", &saveptr); + p != NULL; + p = strtok_r (NULL, ";", &saveptr)) + qsupported.emplace_back (p); + + for (const std::string &feature : qsupported) + { + if (feature == "multiprocess+") + { + /* GDB supports and wants multi-process support if + possible. */ + if (target_supports_multi_process ()) + cs.multi_process = 1; + } + else if (feature == "qRelocInsn+") + { + /* GDB supports relocate instruction requests. */ + gdb_supports_qRelocInsn = 1; + } + else if (feature == "swbreak+") + { + /* GDB wants us to report whether a trap is caused + by a software breakpoint and for us to handle PC + adjustment if necessary on this target. */ + if (target_supports_stopped_by_sw_breakpoint ()) + cs.swbreak_feature = 1; + } + else if (feature == "hwbreak+") + { + /* GDB wants us to report whether a trap is caused + by a hardware breakpoint. */ + if (target_supports_stopped_by_hw_breakpoint ()) + cs.hwbreak_feature = 1; + } + else if (feature == "fork-events+") + { + /* GDB supports and wants fork events if possible. */ + if (target_supports_fork_events ()) + cs.report_fork_events = 1; + } + else if (feature == "vfork-events+") + { + /* GDB supports and wants vfork events if possible. */ + if (target_supports_vfork_events ()) + cs.report_vfork_events = 1; + } + else if (feature == "exec-events+") + { + /* GDB supports and wants exec events if possible. */ + if (target_supports_exec_events ()) + cs.report_exec_events = 1; + } + else if (feature == "vContSupported+") + cs.vCont_supported = 1; + else if (feature == "QThreadEvents+") + ; + else if (feature == "no-resumed+") + { + /* GDB supports and wants TARGET_WAITKIND_NO_RESUMED + events. */ + report_no_resumed = true; + } + else + { + /* Move the unknown features all together. */ + unknowns.push_back (feature.c_str ()); + } + } + + /* Give the target backend a chance to process the unknown + features. */ + target_process_qsupported (unknowns); + } + + sprintf (own_buf, + "PacketSize=%x;QPassSignals+;QProgramSignals+;" + "QStartupWithShell+;QEnvironmentHexEncoded+;" + "QEnvironmentReset+;QEnvironmentUnset+;" + "QSetWorkingDir+", + PBUFSIZ - 1); + + if (target_supports_catch_syscall ()) + strcat (own_buf, ";QCatchSyscalls+"); + + if (the_target->supports_qxfer_libraries_svr4 ()) + strcat (own_buf, ";qXfer:libraries-svr4:read+" + ";augmented-libraries-svr4-read+"); + else + { + /* We do not have any hook to indicate whether the non-SVR4 target + backend supports qXfer:libraries:read, so always report it. */ + strcat (own_buf, ";qXfer:libraries:read+"); + } + + if (the_target->supports_read_auxv ()) + strcat (own_buf, ";qXfer:auxv:read+"); + + if (the_target->supports_qxfer_siginfo ()) + strcat (own_buf, ";qXfer:siginfo:read+;qXfer:siginfo:write+"); + + if (the_target->supports_read_loadmap ()) + strcat (own_buf, ";qXfer:fdpic:read+"); + + /* We always report qXfer:features:read, as targets may + install XML files on a subsequent call to arch_setup. + If we reported to GDB on startup that we don't support + qXfer:feature:read at all, we will never be re-queried. */ + strcat (own_buf, ";qXfer:features:read+"); + + if (cs.transport_is_reliable) + strcat (own_buf, ";QStartNoAckMode+"); + + if (the_target->supports_qxfer_osdata ()) + strcat (own_buf, ";qXfer:osdata:read+"); + + if (target_supports_multi_process ()) + strcat (own_buf, ";multiprocess+"); + + if (target_supports_fork_events ()) + strcat (own_buf, ";fork-events+"); + + if (target_supports_vfork_events ()) + strcat (own_buf, ";vfork-events+"); + + if (target_supports_exec_events ()) + strcat (own_buf, ";exec-events+"); + + if (target_supports_non_stop ()) + strcat (own_buf, ";QNonStop+"); + + if (target_supports_disable_randomization ()) + strcat (own_buf, ";QDisableRandomization+"); + + strcat (own_buf, ";qXfer:threads:read+"); + + if (target_supports_tracepoints ()) + { + strcat (own_buf, ";ConditionalTracepoints+"); + strcat (own_buf, ";TraceStateVariables+"); + strcat (own_buf, ";TracepointSource+"); + strcat (own_buf, ";DisconnectedTracing+"); + if (gdb_supports_qRelocInsn && target_supports_fast_tracepoints ()) + strcat (own_buf, ";FastTracepoints+"); + strcat (own_buf, ";StaticTracepoints+"); + strcat (own_buf, ";InstallInTrace+"); + strcat (own_buf, ";qXfer:statictrace:read+"); + strcat (own_buf, ";qXfer:traceframe-info:read+"); + strcat (own_buf, ";EnableDisableTracepoints+"); + strcat (own_buf, ";QTBuffer:size+"); + strcat (own_buf, ";tracenz+"); + } + + if (target_supports_hardware_single_step () + || target_supports_software_single_step () ) + { + strcat (own_buf, ";ConditionalBreakpoints+"); + } + strcat (own_buf, ";BreakpointCommands+"); + + if (target_supports_agent ()) + strcat (own_buf, ";QAgent+"); + + supported_btrace_packets (own_buf); + + if (target_supports_stopped_by_sw_breakpoint ()) + strcat (own_buf, ";swbreak+"); + + if (target_supports_stopped_by_hw_breakpoint ()) + strcat (own_buf, ";hwbreak+"); + + if (the_target->supports_pid_to_exec_file ()) + strcat (own_buf, ";qXfer:exec-file:read+"); + + strcat (own_buf, ";vContSupported+"); + + strcat (own_buf, ";QThreadEvents+"); + + strcat (own_buf, ";no-resumed+"); + + /* Reinitialize components as needed for the new connection. */ + hostio_handle_new_gdb_connection (); + target_handle_new_gdb_connection (); + + return; + } + + /* Thread-local storage support. */ + if (the_target->supports_get_tls_address () + && startswith (own_buf, "qGetTLSAddr:")) + { + char *p = own_buf + 12; + CORE_ADDR parts[2], address = 0; + int i, err; + ptid_t ptid = null_ptid; + + require_running_or_return (own_buf); + + for (i = 0; i < 3; i++) + { + char *p2; + int len; + + if (p == NULL) + break; + + p2 = strchr (p, ','); + if (p2) + { + len = p2 - p; + p2++; + } + else + { + len = strlen (p); + p2 = NULL; + } + + if (i == 0) + ptid = read_ptid (p, NULL); + else + decode_address (&parts[i - 1], p, len); + p = p2; + } + + if (p != NULL || i < 3) + err = 1; + else + { + struct thread_info *thread = find_thread_ptid (ptid); + + if (thread == NULL) + err = 2; + else + err = the_target->get_tls_address (thread, parts[0], parts[1], + &address); + } + + if (err == 0) + { + strcpy (own_buf, paddress(address)); + return; + } + else if (err > 0) + { + write_enn (own_buf); + return; + } + + /* Otherwise, pretend we do not understand this packet. */ + } + + /* Windows OS Thread Information Block address support. */ + if (the_target->supports_get_tib_address () + && startswith (own_buf, "qGetTIBAddr:")) + { + const char *annex; + int n; + CORE_ADDR tlb; + ptid_t ptid = read_ptid (own_buf + 12, &annex); + + n = the_target->get_tib_address (ptid, &tlb); + if (n == 1) + { + strcpy (own_buf, paddress(tlb)); + return; + } + else if (n == 0) + { + write_enn (own_buf); + return; + } + return; + } + + /* Handle "monitor" commands. */ + if (startswith (own_buf, "qRcmd,")) + { + char *mon = (char *) malloc (PBUFSIZ); + int len = strlen (own_buf + 6); + + if (mon == NULL) + { + write_enn (own_buf); + return; + } + + if ((len % 2) != 0 + || hex2bin (own_buf + 6, (gdb_byte *) mon, len / 2) != len / 2) + { + write_enn (own_buf); + free (mon); + return; + } + mon[len / 2] = '\0'; + + write_ok (own_buf); + + if (the_target->handle_monitor_command (mon) == 0) + /* Default processing. */ + handle_monitor_command (mon, own_buf); + + free (mon); + return; + } + + if (startswith (own_buf, "qSearch:memory:")) + { + require_running_or_return (own_buf); + handle_search_memory (own_buf, packet_len); + return; + } + + if (strcmp (own_buf, "qAttached") == 0 + || startswith (own_buf, "qAttached:")) + { + struct process_info *process; + + if (own_buf[sizeof ("qAttached") - 1]) + { + int pid = strtoul (own_buf + sizeof ("qAttached:") - 1, NULL, 16); + process = find_process_pid (pid); + } + else + { + require_running_or_return (own_buf); + process = current_process (); + } + + if (process == NULL) + { + write_enn (own_buf); + return; + } + + strcpy (own_buf, process->attached ? "1" : "0"); + return; + } + + if (startswith (own_buf, "qCRC:")) + { + /* CRC check (compare-section). */ + const char *comma; + ULONGEST base; + int len; + unsigned long long crc; + + require_running_or_return (own_buf); + comma = unpack_varlen_hex (own_buf + 5, &base); + if (*comma++ != ',') + { + write_enn (own_buf); + return; + } + len = strtoul (comma, NULL, 16); + crc = crc32 (base, len, 0xffffffff); + /* Check for memory failure. */ + if (crc == (unsigned long long) -1) + { + write_enn (own_buf); + return; + } + sprintf (own_buf, "C%lx", (unsigned long) crc); + return; + } + + if (handle_qxfer (own_buf, packet_len, new_packet_len_p)) + return; + + if (target_supports_tracepoints () && handle_tracepoint_query (own_buf)) + return; + + /* Otherwise we didn't know what packet it was. Say we didn't + understand it. */ + own_buf[0] = 0; +} + +static void gdb_wants_all_threads_stopped (void); +static void resume (struct thread_resume *actions, size_t n); + +/* The callback that is passed to visit_actioned_threads. */ +typedef int (visit_actioned_threads_callback_ftype) + (const struct thread_resume *, struct thread_info *); + +/* Call CALLBACK for any thread to which ACTIONS applies to. Returns + true if CALLBACK returns true. Returns false if no matching thread + is found or CALLBACK results false. + Note: This function is itself a callback for find_thread. */ + +static bool +visit_actioned_threads (thread_info *thread, + const struct thread_resume *actions, + size_t num_actions, + visit_actioned_threads_callback_ftype *callback) +{ + for (size_t i = 0; i < num_actions; i++) + { + const struct thread_resume *action = &actions[i]; + + if (action->thread == minus_one_ptid + || action->thread == thread->id + || ((action->thread.pid () + == thread->id.pid ()) + && action->thread.lwp () == -1)) + { + if ((*callback) (action, thread)) + return true; + } + } + + return false; +} + +/* Callback for visit_actioned_threads. If the thread has a pending + status to report, report it now. */ + +static int +handle_pending_status (const struct thread_resume *resumption, + struct thread_info *thread) +{ + client_state &cs = get_client_state (); + if (thread->status_pending_p) + { + thread->status_pending_p = 0; + + cs.last_status = thread->last_status; + cs.last_ptid = thread->id; + prepare_resume_reply (cs.own_buf, cs.last_ptid, &cs.last_status); + return 1; + } + return 0; +} + +/* Parse vCont packets. */ +static void +handle_v_cont (char *own_buf) +{ + const char *p; + int n = 0, i = 0; + struct thread_resume *resume_info; + struct thread_resume default_action { null_ptid }; + + /* Count the number of semicolons in the packet. There should be one + for every action. */ + p = &own_buf[5]; + while (p) + { + n++; + p++; + p = strchr (p, ';'); + } + + resume_info = (struct thread_resume *) malloc (n * sizeof (resume_info[0])); + if (resume_info == NULL) + goto err; + + p = &own_buf[5]; + while (*p) + { + p++; + + memset (&resume_info[i], 0, sizeof resume_info[i]); + + if (p[0] == 's' || p[0] == 'S') + resume_info[i].kind = resume_step; + else if (p[0] == 'r') + resume_info[i].kind = resume_step; + else if (p[0] == 'c' || p[0] == 'C') + resume_info[i].kind = resume_continue; + else if (p[0] == 't') + resume_info[i].kind = resume_stop; + else + goto err; + + if (p[0] == 'S' || p[0] == 'C') + { + char *q; + int sig = strtol (p + 1, &q, 16); + if (p == q) + goto err; + p = q; + + if (!gdb_signal_to_host_p ((enum gdb_signal) sig)) + goto err; + resume_info[i].sig = gdb_signal_to_host ((enum gdb_signal) sig); + } + else if (p[0] == 'r') + { + ULONGEST addr; + + p = unpack_varlen_hex (p + 1, &addr); + resume_info[i].step_range_start = addr; + + if (*p != ',') + goto err; + + p = unpack_varlen_hex (p + 1, &addr); + resume_info[i].step_range_end = addr; + } + else + { + p = p + 1; + } + + if (p[0] == 0) + { + resume_info[i].thread = minus_one_ptid; + default_action = resume_info[i]; + + /* Note: we don't increment i here, we'll overwrite this entry + the next time through. */ + } + else if (p[0] == ':') + { + const char *q; + ptid_t ptid = read_ptid (p + 1, &q); + + if (p == q) + goto err; + p = q; + if (p[0] != ';' && p[0] != 0) + goto err; + + resume_info[i].thread = ptid; + + i++; + } + } + + if (i < n) + resume_info[i] = default_action; + + resume (resume_info, n); + free (resume_info); + return; + +err: + write_enn (own_buf); + free (resume_info); + return; +} + +/* Resume target with ACTIONS, an array of NUM_ACTIONS elements. */ + +static void +resume (struct thread_resume *actions, size_t num_actions) +{ + client_state &cs = get_client_state (); + if (!non_stop) + { + /* Check if among the threads that GDB wants actioned, there's + one with a pending status to report. If so, skip actually + resuming/stopping and report the pending event + immediately. */ + + thread_info *thread_with_status = find_thread ([&] (thread_info *thread) + { + return visit_actioned_threads (thread, actions, num_actions, + handle_pending_status); + }); + + if (thread_with_status != NULL) + return; + + enable_async_io (); + } + + the_target->resume (actions, num_actions); + + if (non_stop) + write_ok (cs.own_buf); + else + { + cs.last_ptid = mywait (minus_one_ptid, &cs.last_status, 0, 1); + + if (cs.last_status.kind == TARGET_WAITKIND_NO_RESUMED + && !report_no_resumed) + { + /* The client does not support this stop reply. At least + return error. */ + sprintf (cs.own_buf, "E.No unwaited-for children left."); + disable_async_io (); + return; + } + + if (cs.last_status.kind != TARGET_WAITKIND_EXITED + && cs.last_status.kind != TARGET_WAITKIND_SIGNALLED + && cs.last_status.kind != TARGET_WAITKIND_NO_RESUMED) + current_thread->last_status = cs.last_status; + + /* From the client's perspective, all-stop mode always stops all + threads implicitly (and the target backend has already done + so by now). Tag all threads as "want-stopped", so we don't + resume them implicitly without the client telling us to. */ + gdb_wants_all_threads_stopped (); + prepare_resume_reply (cs.own_buf, cs.last_ptid, &cs.last_status); + disable_async_io (); + + if (cs.last_status.kind == TARGET_WAITKIND_EXITED + || cs.last_status.kind == TARGET_WAITKIND_SIGNALLED) + target_mourn_inferior (cs.last_ptid); + } +} + +/* Attach to a new program. Return 1 if successful, 0 if failure. */ +static int +handle_v_attach (char *own_buf) +{ + client_state &cs = get_client_state (); + int pid; + + pid = strtol (own_buf + 8, NULL, 16); + if (pid != 0 && attach_inferior (pid) == 0) + { + /* Don't report shared library events after attaching, even if + some libraries are preloaded. GDB will always poll the + library list. Avoids the "stopped by shared library event" + notice on the GDB side. */ + dlls_changed = 0; + + if (non_stop) + { + /* In non-stop, we don't send a resume reply. Stop events + will follow up using the normal notification + mechanism. */ + write_ok (own_buf); + } + else + prepare_resume_reply (own_buf, cs.last_ptid, &cs.last_status); + + return 1; + } + else + { + write_enn (own_buf); + return 0; + } +} + +/* Run a new program. Return 1 if successful, 0 if failure. */ +static int +handle_v_run (char *own_buf) +{ + client_state &cs = get_client_state (); + char *p, *next_p; + std::vector<char *> new_argv; + char *new_program_name = NULL; + int i, new_argc; + + new_argc = 0; + for (p = own_buf + strlen ("vRun;"); p && *p; p = strchr (p, ';')) + { + p++; + new_argc++; + } + + for (i = 0, p = own_buf + strlen ("vRun;"); *p; p = next_p, ++i) + { + next_p = strchr (p, ';'); + if (next_p == NULL) + next_p = p + strlen (p); + + if (i == 0 && p == next_p) + { + /* No program specified. */ + new_program_name = NULL; + } + else if (p == next_p) + { + /* Empty argument. */ + new_argv.push_back (xstrdup ("")); + } + else + { + size_t len = (next_p - p) / 2; + /* ARG is the unquoted argument received via the RSP. */ + char *arg = (char *) xmalloc (len + 1); + /* FULL_ARGS will contain the quoted version of ARG. */ + char *full_arg = (char *) xmalloc ((len + 1) * 2); + /* These are pointers used to navigate the strings above. */ + char *tmp_arg = arg; + char *tmp_full_arg = full_arg; + int need_quote = 0; + + hex2bin (p, (gdb_byte *) arg, len); + arg[len] = '\0'; + + while (*tmp_arg != '\0') + { + switch (*tmp_arg) + { + case '\n': + /* Quote \n. */ + *tmp_full_arg = '\''; + ++tmp_full_arg; + need_quote = 1; + break; + + case '\'': + /* Quote single quote. */ + *tmp_full_arg = '\\'; + ++tmp_full_arg; + break; + + default: + break; + } + + *tmp_full_arg = *tmp_arg; + ++tmp_full_arg; + ++tmp_arg; + } + + if (need_quote) + *tmp_full_arg++ = '\''; + + /* Finish FULL_ARG and push it into the vector containing + the argv. */ + *tmp_full_arg = '\0'; + if (i == 0) + new_program_name = full_arg; + else + new_argv.push_back (full_arg); + xfree (arg); + } + if (*next_p) + next_p++; + } + + if (new_program_name == NULL) + { + /* GDB didn't specify a program to run. Use the program from the + last run with the new argument list. */ + if (program_path.get () == NULL) + { + write_enn (own_buf); + free_vector_argv (new_argv); + return 0; + } + } + else + program_path.set (gdb::unique_xmalloc_ptr<char> (new_program_name)); + + /* Free the old argv and install the new one. */ + free_vector_argv (program_args); + program_args = new_argv; + + target_create_inferior (program_path.get (), program_args); + + if (cs.last_status.kind == TARGET_WAITKIND_STOPPED) + { + prepare_resume_reply (own_buf, cs.last_ptid, &cs.last_status); + + /* In non-stop, sending a resume reply doesn't set the general + thread, but GDB assumes a vRun sets it (this is so GDB can + query which is the main thread of the new inferior. */ + if (non_stop) + cs.general_thread = cs.last_ptid; + + return 1; + } + else + { + write_enn (own_buf); + return 0; + } +} + +/* Kill process. Return 1 if successful, 0 if failure. */ +static int +handle_v_kill (char *own_buf) +{ + client_state &cs = get_client_state (); + int pid; + char *p = &own_buf[6]; + if (cs.multi_process) + pid = strtol (p, NULL, 16); + else + pid = signal_pid; + + process_info *proc = find_process_pid (pid); + + if (proc != nullptr && kill_inferior (proc) == 0) + { + cs.last_status.kind = TARGET_WAITKIND_SIGNALLED; + cs.last_status.value.sig = GDB_SIGNAL_KILL; + cs.last_ptid = ptid_t (pid); + discard_queued_stop_replies (cs.last_ptid); + write_ok (own_buf); + return 1; + } + else + { + write_enn (own_buf); + return 0; + } +} + +/* Handle all of the extended 'v' packets. */ +void +handle_v_requests (char *own_buf, int packet_len, int *new_packet_len) +{ + client_state &cs = get_client_state (); + if (!disable_packet_vCont) + { + if (strcmp (own_buf, "vCtrlC") == 0) + { + the_target->request_interrupt (); + write_ok (own_buf); + return; + } + + if (startswith (own_buf, "vCont;")) + { + handle_v_cont (own_buf); + return; + } + + if (startswith (own_buf, "vCont?")) + { + strcpy (own_buf, "vCont;c;C;t"); + + if (target_supports_hardware_single_step () + || target_supports_software_single_step () + || !cs.vCont_supported) + { + /* If target supports single step either by hardware or by + software, add actions s and S to the list of supported + actions. On the other hand, if GDB doesn't request the + supported vCont actions in qSupported packet, add s and + S to the list too. */ + own_buf = own_buf + strlen (own_buf); + strcpy (own_buf, ";s;S"); + } + + if (target_supports_range_stepping ()) + { + own_buf = own_buf + strlen (own_buf); + strcpy (own_buf, ";r"); + } + return; + } + } + + if (startswith (own_buf, "vFile:") + && handle_vFile (own_buf, packet_len, new_packet_len)) + return; + + if (startswith (own_buf, "vAttach;")) + { + if ((!extended_protocol || !cs.multi_process) && target_running ()) + { + fprintf (stderr, "Already debugging a process\n"); + write_enn (own_buf); + return; + } + handle_v_attach (own_buf); + return; + } + + if (startswith (own_buf, "vRun;")) + { + if ((!extended_protocol || !cs.multi_process) && target_running ()) + { + fprintf (stderr, "Already debugging a process\n"); + write_enn (own_buf); + return; + } + handle_v_run (own_buf); + return; + } + + if (startswith (own_buf, "vKill;")) + { + if (!target_running ()) + { + fprintf (stderr, "No process to kill\n"); + write_enn (own_buf); + return; + } + handle_v_kill (own_buf); + return; + } + + if (handle_notif_ack (own_buf, packet_len)) + return; + + /* Otherwise we didn't know what packet it was. Say we didn't + understand it. */ + own_buf[0] = 0; + return; +} + +/* Resume thread and wait for another event. In non-stop mode, + don't really wait here, but return immediatelly to the event + loop. */ +static void +myresume (char *own_buf, int step, int sig) +{ + client_state &cs = get_client_state (); + struct thread_resume resume_info[2]; + int n = 0; + int valid_cont_thread; + + valid_cont_thread = (cs.cont_thread != null_ptid + && cs.cont_thread != minus_one_ptid); + + if (step || sig || valid_cont_thread) + { + resume_info[0].thread = current_ptid; + if (step) + resume_info[0].kind = resume_step; + else + resume_info[0].kind = resume_continue; + resume_info[0].sig = sig; + n++; + } + + if (!valid_cont_thread) + { + resume_info[n].thread = minus_one_ptid; + resume_info[n].kind = resume_continue; + resume_info[n].sig = 0; + n++; + } + + resume (resume_info, n); +} + +/* Callback for for_each_thread. Make a new stop reply for each + stopped thread. */ + +static void +queue_stop_reply_callback (thread_info *thread) +{ + /* For now, assume targets that don't have this callback also don't + manage the thread's last_status field. */ + if (!the_target->supports_thread_stopped ()) + { + struct vstop_notif *new_notif = new struct vstop_notif; + + new_notif->ptid = thread->id; + new_notif->status = thread->last_status; + /* Pass the last stop reply back to GDB, but don't notify + yet. */ + notif_event_enque (¬if_stop, new_notif); + } + else + { + if (target_thread_stopped (thread)) + { + if (debug_threads) + { + std::string status_string + = target_waitstatus_to_string (&thread->last_status); + + debug_printf ("Reporting thread %s as already stopped with %s\n", + target_pid_to_str (thread->id), + status_string.c_str ()); + } + + gdb_assert (thread->last_status.kind != TARGET_WAITKIND_IGNORE); + + /* Pass the last stop reply back to GDB, but don't notify + yet. */ + queue_stop_reply (thread->id, &thread->last_status); + } + } +} + +/* Set this inferior threads's state as "want-stopped". We won't + resume this thread until the client gives us another action for + it. */ + +static void +gdb_wants_thread_stopped (thread_info *thread) +{ + thread->last_resume_kind = resume_stop; + + if (thread->last_status.kind == TARGET_WAITKIND_IGNORE) + { + /* Most threads are stopped implicitly (all-stop); tag that with + signal 0. */ + thread->last_status.kind = TARGET_WAITKIND_STOPPED; + thread->last_status.value.sig = GDB_SIGNAL_0; + } +} + +/* Set all threads' states as "want-stopped". */ + +static void +gdb_wants_all_threads_stopped (void) +{ + for_each_thread (gdb_wants_thread_stopped); +} + +/* Callback for for_each_thread. If the thread is stopped with an + interesting event, mark it as having a pending event. */ + +static void +set_pending_status_callback (thread_info *thread) +{ + if (thread->last_status.kind != TARGET_WAITKIND_STOPPED + || (thread->last_status.value.sig != GDB_SIGNAL_0 + /* A breakpoint, watchpoint or finished step from a previous + GDB run isn't considered interesting for a new GDB run. + If we left those pending, the new GDB could consider them + random SIGTRAPs. This leaves out real async traps. We'd + have to peek into the (target-specific) siginfo to + distinguish those. */ + && thread->last_status.value.sig != GDB_SIGNAL_TRAP)) + thread->status_pending_p = 1; +} + +/* Status handler for the '?' packet. */ + +static void +handle_status (char *own_buf) +{ + client_state &cs = get_client_state (); + + /* GDB is connected, don't forward events to the target anymore. */ + for_each_process ([] (process_info *process) { + process->gdb_detached = 0; + }); + + /* In non-stop mode, we must send a stop reply for each stopped + thread. In all-stop mode, just send one for the first stopped + thread we find. */ + + if (non_stop) + { + for_each_thread (queue_stop_reply_callback); + + /* The first is sent immediatly. OK is sent if there is no + stopped thread, which is the same handling of the vStopped + packet (by design). */ + notif_write_event (¬if_stop, cs.own_buf); + } + else + { + thread_info *thread = NULL; + + target_pause_all (false); + target_stabilize_threads (); + gdb_wants_all_threads_stopped (); + + /* We can only report one status, but we might be coming out of + non-stop -- if more than one thread is stopped with + interesting events, leave events for the threads we're not + reporting now pending. They'll be reported the next time the + threads are resumed. Start by marking all interesting events + as pending. */ + for_each_thread (set_pending_status_callback); + + /* Prefer the last thread that reported an event to GDB (even if + that was a GDB_SIGNAL_TRAP). */ + if (cs.last_status.kind != TARGET_WAITKIND_IGNORE + && cs.last_status.kind != TARGET_WAITKIND_EXITED + && cs.last_status.kind != TARGET_WAITKIND_SIGNALLED) + thread = find_thread_ptid (cs.last_ptid); + + /* If the last event thread is not found for some reason, look + for some other thread that might have an event to report. */ + if (thread == NULL) + thread = find_thread ([] (thread_info *thr_arg) + { + return thr_arg->status_pending_p; + }); + + /* If we're still out of luck, simply pick the first thread in + the thread list. */ + if (thread == NULL) + thread = get_first_thread (); + + if (thread != NULL) + { + struct thread_info *tp = (struct thread_info *) thread; + + /* We're reporting this event, so it's no longer + pending. */ + tp->status_pending_p = 0; + + /* GDB assumes the current thread is the thread we're + reporting the status for. */ + cs.general_thread = thread->id; + set_desired_thread (); + + gdb_assert (tp->last_status.kind != TARGET_WAITKIND_IGNORE); + prepare_resume_reply (own_buf, tp->id, &tp->last_status); + } + else + strcpy (own_buf, "W00"); + } +} + +static void +gdbserver_version (void) +{ + printf ("GNU gdbserver %s%s\n" + "Copyright (C) 2021 Free Software Foundation, Inc.\n" + "gdbserver is free software, covered by the " + "GNU General Public License.\n" + "This gdbserver was configured as \"%s\"\n", + PKGVERSION, version, host_name); +} + +static void +gdbserver_usage (FILE *stream) +{ + fprintf (stream, "Usage:\tgdbserver [OPTIONS] COMM PROG [ARGS ...]\n" + "\tgdbserver [OPTIONS] --attach COMM PID\n" + "\tgdbserver [OPTIONS] --multi COMM\n" + "\n" + "COMM may either be a tty device (for serial debugging),\n" + "HOST:PORT to listen for a TCP connection, or '-' or 'stdio' to use \n" + "stdin/stdout of gdbserver.\n" + "PROG is the executable program. ARGS are arguments passed to inferior.\n" + "PID is the process ID to attach to, when --attach is specified.\n" + "\n" + "Operating modes:\n" + "\n" + " --attach Attach to running process PID.\n" + " --multi Start server without a specific program, and\n" + " only quit when explicitly commanded.\n" + " --once Exit after the first connection has closed.\n" + " --help Print this message and then exit.\n" + " --version Display version information and exit.\n" + "\n" + "Other options:\n" + "\n" + " --wrapper WRAPPER -- Run WRAPPER to start new programs.\n" + " --disable-randomization\n" + " Run PROG with address space randomization disabled.\n" + " --no-disable-randomization\n" + " Don't disable address space randomization when\n" + " starting PROG.\n" + " --startup-with-shell\n" + " Start PROG using a shell. I.e., execs a shell that\n" + " then execs PROG. (default)\n" + " --no-startup-with-shell\n" + " Exec PROG directly instead of using a shell.\n" + " Disables argument globbing and variable substitution\n" + " on UNIX-like systems.\n" + "\n" + "Debug options:\n" + "\n" + " --debug Enable general debugging output.\n" + " --debug-format=OPT1[,OPT2,...]\n" + " Specify extra content in debugging output.\n" + " Options:\n" + " all\n" + " none\n" + " timestamp\n" + " --remote-debug Enable remote protocol debugging output.\n" + " --disable-packet=OPT1[,OPT2,...]\n" + " Disable support for RSP packets or features.\n" + " Options:\n" + " vCont, Tthread, qC, qfThreadInfo and \n" + " threads (disable all threading packets).\n" + "\n" + "For more information, consult the GDB manual (available as on-line \n" + "info or a printed manual).\n"); + if (REPORT_BUGS_TO[0] && stream == stdout) + fprintf (stream, "Report bugs to \"%s\".\n", REPORT_BUGS_TO); +} + +static void +gdbserver_show_disableable (FILE *stream) +{ + fprintf (stream, "Disableable packets:\n" + " vCont \tAll vCont packets\n" + " qC \tQuerying the current thread\n" + " qfThreadInfo\tThread listing\n" + " Tthread \tPassing the thread specifier in the " + "T stop reply packet\n" + " threads \tAll of the above\n"); +} + +/* Start up the event loop. This is the entry point to the event + loop. */ + +static void +start_event_loop () +{ + /* Loop until there is nothing to do. This is the entry point to + the event loop engine. If nothing is ready at this time, wait + for something to happen (via wait_for_event), then process it. + Return when there are no longer event sources to wait for. */ + + keep_processing_events = true; + while (keep_processing_events) + { + /* Any events already waiting in the queue? */ + int res = gdb_do_one_event (); + + /* Was there an error? */ + if (res == -1) + break; + } + + /* We are done with the event loop. There are no more event sources + to listen to. So we exit gdbserver. */ +} + +static void +kill_inferior_callback (process_info *process) +{ + kill_inferior (process); + discard_queued_stop_replies (ptid_t (process->pid)); +} + +/* Call this when exiting gdbserver with possible inferiors that need + to be killed or detached from. */ + +static void +detach_or_kill_for_exit (void) +{ + /* First print a list of the inferiors we will be killing/detaching. + This is to assist the user, for example, in case the inferior unexpectedly + dies after we exit: did we screw up or did the inferior exit on its own? + Having this info will save some head-scratching. */ + + if (have_started_inferiors_p ()) + { + fprintf (stderr, "Killing process(es):"); + + for_each_process ([] (process_info *process) { + if (!process->attached) + fprintf (stderr, " %d", process->pid); + }); + + fprintf (stderr, "\n"); + } + if (have_attached_inferiors_p ()) + { + fprintf (stderr, "Detaching process(es):"); + + for_each_process ([] (process_info *process) { + if (process->attached) + fprintf (stderr, " %d", process->pid); + }); + + fprintf (stderr, "\n"); + } + + /* Now we can kill or detach the inferiors. */ + for_each_process ([] (process_info *process) { + int pid = process->pid; + + if (process->attached) + detach_inferior (process); + else + kill_inferior (process); + + discard_queued_stop_replies (ptid_t (pid)); + }); +} + +/* Value that will be passed to exit(3) when gdbserver exits. */ +static int exit_code; + +/* Wrapper for detach_or_kill_for_exit that catches and prints + errors. */ + +static void +detach_or_kill_for_exit_cleanup () +{ + try + { + detach_or_kill_for_exit (); + } + catch (const gdb_exception &exception) + { + fflush (stdout); + fprintf (stderr, "Detach or kill failed: %s\n", + exception.what ()); + exit_code = 1; + } +} + +/* Main function. This is called by the real "main" function, + wrapped in a TRY_CATCH that handles any uncaught exceptions. */ + +static void ATTRIBUTE_NORETURN +captured_main (int argc, char *argv[]) +{ + int bad_attach; + int pid; + char *arg_end; + const char *port = NULL; + char **next_arg = &argv[1]; + volatile int multi_mode = 0; + volatile int attach = 0; + int was_running; + bool selftest = false; +#if GDB_SELF_TEST + std::vector<const char *> selftest_filters; +#endif + + current_directory = getcwd (NULL, 0); + client_state &cs = get_client_state (); + + if (current_directory == NULL) + { + error (_("Could not find current working directory: %s"), + safe_strerror (errno)); + } + + while (*next_arg != NULL && **next_arg == '-') + { + if (strcmp (*next_arg, "--version") == 0) + { + gdbserver_version (); + exit (0); + } + else if (strcmp (*next_arg, "--help") == 0) + { + gdbserver_usage (stdout); + exit (0); + } + else if (strcmp (*next_arg, "--attach") == 0) + attach = 1; + else if (strcmp (*next_arg, "--multi") == 0) + multi_mode = 1; + else if (strcmp (*next_arg, "--wrapper") == 0) + { + char **tmp; + + next_arg++; + + tmp = next_arg; + while (*next_arg != NULL && strcmp (*next_arg, "--") != 0) + { + wrapper_argv += *next_arg; + wrapper_argv += ' '; + next_arg++; + } + + if (!wrapper_argv.empty ()) + { + /* Erase the last whitespace. */ + wrapper_argv.erase (wrapper_argv.end () - 1); + } + + if (next_arg == tmp || *next_arg == NULL) + { + gdbserver_usage (stderr); + exit (1); + } + + /* Consume the "--". */ + *next_arg = NULL; + } + else if (strcmp (*next_arg, "--debug") == 0) + debug_threads = 1; + else if (startswith (*next_arg, "--debug-format=")) + { + std::string error_msg + = parse_debug_format_options ((*next_arg) + + sizeof ("--debug-format=") - 1, 0); + + if (!error_msg.empty ()) + { + fprintf (stderr, "%s", error_msg.c_str ()); + exit (1); + } + } + else if (strcmp (*next_arg, "--remote-debug") == 0) + remote_debug = 1; + else if (startswith (*next_arg, "--debug-file=")) + debug_set_output ((*next_arg) + sizeof ("--debug-file=") -1); + else if (strcmp (*next_arg, "--disable-packet") == 0) + { + gdbserver_show_disableable (stdout); + exit (0); + } + else if (startswith (*next_arg, "--disable-packet=")) + { + char *packets = *next_arg += sizeof ("--disable-packet=") - 1; + char *saveptr; + for (char *tok = strtok_r (packets, ",", &saveptr); + tok != NULL; + tok = strtok_r (NULL, ",", &saveptr)) + { + if (strcmp ("vCont", tok) == 0) + disable_packet_vCont = true; + else if (strcmp ("Tthread", tok) == 0) + disable_packet_Tthread = true; + else if (strcmp ("qC", tok) == 0) + disable_packet_qC = true; + else if (strcmp ("qfThreadInfo", tok) == 0) + disable_packet_qfThreadInfo = true; + else if (strcmp ("T", tok) == 0) + disable_packet_T = true; + else if (strcmp ("threads", tok) == 0) + { + disable_packet_vCont = true; + disable_packet_Tthread = true; + disable_packet_qC = true; + disable_packet_qfThreadInfo = true; + } + else + { + fprintf (stderr, "Don't know how to disable \"%s\".\n\n", + tok); + gdbserver_show_disableable (stderr); + exit (1); + } + } + } + else if (strcmp (*next_arg, "-") == 0) + { + /* "-" specifies a stdio connection and is a form of port + specification. */ + port = STDIO_CONNECTION_NAME; + next_arg++; + break; + } + else if (strcmp (*next_arg, "--disable-randomization") == 0) + cs.disable_randomization = 1; + else if (strcmp (*next_arg, "--no-disable-randomization") == 0) + cs.disable_randomization = 0; + else if (strcmp (*next_arg, "--startup-with-shell") == 0) + startup_with_shell = true; + else if (strcmp (*next_arg, "--no-startup-with-shell") == 0) + startup_with_shell = false; + else if (strcmp (*next_arg, "--once") == 0) + run_once = true; + else if (strcmp (*next_arg, "--selftest") == 0) + selftest = true; + else if (startswith (*next_arg, "--selftest=")) + { + selftest = true; + +#if GDB_SELF_TEST + const char *filter = *next_arg + strlen ("--selftest="); + if (*filter == '\0') + { + fprintf (stderr, _("Error: selftest filter is empty.\n")); + exit (1); + } + + selftest_filters.push_back (filter); +#endif + } + else + { + fprintf (stderr, "Unknown argument: %s\n", *next_arg); + exit (1); + } + + next_arg++; + continue; + } + + if (port == NULL) + { + port = *next_arg; + next_arg++; + } + if ((port == NULL || (!attach && !multi_mode && *next_arg == NULL)) + && !selftest) + { + gdbserver_usage (stderr); + exit (1); + } + + /* Remember stdio descriptors. LISTEN_DESC must not be listed, it will be + opened by remote_prepare. */ + notice_open_fds (); + + save_original_signals_state (false); + + /* We need to know whether the remote connection is stdio before + starting the inferior. Inferiors created in this scenario have + stdin,stdout redirected. So do this here before we call + start_inferior. */ + if (port != NULL) + remote_prepare (port); + + bad_attach = 0; + pid = 0; + + /* --attach used to come after PORT, so allow it there for + compatibility. */ + if (*next_arg != NULL && strcmp (*next_arg, "--attach") == 0) + { + attach = 1; + next_arg++; + } + + if (attach + && (*next_arg == NULL + || (*next_arg)[0] == '\0' + || (pid = strtoul (*next_arg, &arg_end, 0)) == 0 + || *arg_end != '\0' + || next_arg[1] != NULL)) + bad_attach = 1; + + if (bad_attach) + { + gdbserver_usage (stderr); + exit (1); + } + + /* Gather information about the environment. */ + our_environ = gdb_environ::from_host_environ (); + + initialize_async_io (); + initialize_low (); + have_job_control (); + if (target_supports_tracepoints ()) + initialize_tracepoint (); + + mem_buf = (unsigned char *) xmalloc (PBUFSIZ); + + if (selftest) + { +#if GDB_SELF_TEST + selftests::run_tests (selftest_filters); +#else + printf (_("Selftests have been disabled for this build.\n")); +#endif + throw_quit ("Quit"); + } + + if (pid == 0 && *next_arg != NULL) + { + int i, n; + + n = argc - (next_arg - argv); + program_path.set (make_unique_xstrdup (next_arg[0])); + for (i = 1; i < n; i++) + program_args.push_back (xstrdup (next_arg[i])); + + /* Wait till we are at first instruction in program. */ + 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 + successfully created. */ + } + else if (pid != 0) + { + if (attach_inferior (pid) == -1) + error ("Attaching not supported on this target"); + + /* Otherwise succeeded. */ + } + else + { + cs.last_status.kind = TARGET_WAITKIND_EXITED; + cs.last_status.value.integer = 0; + cs.last_ptid = minus_one_ptid; + } + + SCOPE_EXIT { detach_or_kill_for_exit_cleanup (); }; + + /* Don't report shared library events on the initial connection, + even if some libraries are preloaded. Avoids the "stopped by + shared library event" notice on gdb side. */ + dlls_changed = 0; + + if (cs.last_status.kind == TARGET_WAITKIND_EXITED + || cs.last_status.kind == TARGET_WAITKIND_SIGNALLED) + was_running = 0; + else + was_running = 1; + + if (!was_running && !multi_mode) + error ("No program to debug"); + + while (1) + { + cs.noack_mode = 0; + cs.multi_process = 0; + cs.report_fork_events = 0; + cs.report_vfork_events = 0; + cs.report_exec_events = 0; + /* Be sure we're out of tfind mode. */ + cs.current_traceframe = -1; + cs.cont_thread = null_ptid; + cs.swbreak_feature = 0; + cs.hwbreak_feature = 0; + cs.vCont_supported = 0; + + remote_open (port); + + try + { + /* Wait for events. This will return when all event sources + are removed from the event loop. */ + start_event_loop (); + + /* If an exit was requested (using the "monitor exit" + command), terminate now. */ + if (exit_requested) + throw_quit ("Quit"); + + /* The only other way to get here is for getpkt to fail: + + - If --once was specified, we're done. + + - If not in extended-remote mode, and we're no longer + debugging anything, simply exit: GDB has disconnected + after processing the last process exit. + + - Otherwise, close the connection and reopen it at the + top of the loop. */ + if (run_once || (!extended_protocol && !target_running ())) + throw_quit ("Quit"); + + fprintf (stderr, + "Remote side has terminated connection. " + "GDBserver will reopen the connection.\n"); + + /* Get rid of any pending statuses. An eventual reconnection + (by the same GDB instance or another) will refresh all its + state from scratch. */ + discard_queued_stop_replies (minus_one_ptid); + for_each_thread ([] (thread_info *thread) + { + thread->status_pending_p = 0; + }); + + if (tracing) + { + if (disconnected_tracing) + { + /* Try to enable non-stop/async mode, so we we can + both wait for an async socket accept, and handle + async target events simultaneously. There's also + no point either in having the target always stop + all threads, when we're going to pass signals + down without informing GDB. */ + if (!non_stop) + { + if (the_target->start_non_stop (true)) + non_stop = 1; + + /* Detaching implicitly resumes all threads; + simply disconnecting does not. */ + } + } + else + { + fprintf (stderr, + "Disconnected tracing disabled; " + "stopping trace run.\n"); + stop_tracing (); + } + } + } + catch (const gdb_exception_error &exception) + { + fflush (stdout); + fprintf (stderr, "gdbserver: %s\n", exception.what ()); + + if (response_needed) + { + write_enn (cs.own_buf); + putpkt (cs.own_buf); + } + + if (run_once) + throw_quit ("Quit"); + } + } +} + +/* Main function. */ + +int +main (int argc, char *argv[]) +{ + + try + { + captured_main (argc, argv); + } + catch (const gdb_exception &exception) + { + if (exception.reason == RETURN_ERROR) + { + fflush (stdout); + fprintf (stderr, "%s\n", exception.what ()); + fprintf (stderr, "Exiting\n"); + exit_code = 1; + } + + exit (exit_code); + } + + gdb_assert_not_reached ("captured_main should never return"); +} + +/* Process options coming from Z packets for a breakpoint. PACKET is + the packet buffer. *PACKET is updated to point to the first char + after the last processed option. */ + +static void +process_point_options (struct gdb_breakpoint *bp, const char **packet) +{ + const char *dataptr = *packet; + int persist; + + /* Check if data has the correct format. */ + if (*dataptr != ';') + return; + + dataptr++; + + while (*dataptr) + { + if (*dataptr == ';') + ++dataptr; + + if (*dataptr == 'X') + { + /* Conditional expression. */ + if (debug_threads) + debug_printf ("Found breakpoint condition.\n"); + if (!add_breakpoint_condition (bp, &dataptr)) + dataptr = strchrnul (dataptr, ';'); + } + else if (startswith (dataptr, "cmds:")) + { + dataptr += strlen ("cmds:"); + if (debug_threads) + debug_printf ("Found breakpoint commands %s.\n", dataptr); + persist = (*dataptr == '1'); + dataptr += 2; + if (add_breakpoint_commands (bp, &dataptr, persist)) + dataptr = strchrnul (dataptr, ';'); + } + else + { + fprintf (stderr, "Unknown token %c, ignoring.\n", + *dataptr); + /* Skip tokens until we find one that we recognize. */ + dataptr = strchrnul (dataptr, ';'); + } + } + *packet = dataptr; +} + +/* Event loop callback that handles a serial event. The first byte in + the serial buffer gets us here. We expect characters to arrive at + a brisk pace, so we read the rest of the packet with a blocking + getpkt call. */ + +static int +process_serial_event (void) +{ + client_state &cs = get_client_state (); + int signal; + unsigned int len; + CORE_ADDR mem_addr; + unsigned char sig; + int packet_len; + int new_packet_len = -1; + + disable_async_io (); + + response_needed = false; + packet_len = getpkt (cs.own_buf); + if (packet_len <= 0) + { + remote_close (); + /* Force an event loop break. */ + return -1; + } + response_needed = true; + + char ch = cs.own_buf[0]; + switch (ch) + { + case 'q': + handle_query (cs.own_buf, packet_len, &new_packet_len); + break; + case 'Q': + handle_general_set (cs.own_buf); + break; + case 'D': + handle_detach (cs.own_buf); + break; + case '!': + extended_protocol = true; + write_ok (cs.own_buf); + break; + case '?': + handle_status (cs.own_buf); + break; + case 'H': + if (cs.own_buf[1] == 'c' || cs.own_buf[1] == 'g' || cs.own_buf[1] == 's') + { + require_running_or_break (cs.own_buf); + + ptid_t thread_id = read_ptid (&cs.own_buf[2], NULL); + + if (thread_id == null_ptid || thread_id == minus_one_ptid) + thread_id = null_ptid; + else if (thread_id.is_pid ()) + { + /* The ptid represents a pid. */ + thread_info *thread = find_any_thread_of_pid (thread_id.pid ()); + + if (thread == NULL) + { + write_enn (cs.own_buf); + break; + } + + thread_id = thread->id; + } + else + { + /* The ptid represents a lwp/tid. */ + if (find_thread_ptid (thread_id) == NULL) + { + write_enn (cs.own_buf); + break; + } + } + + if (cs.own_buf[1] == 'g') + { + if (thread_id == null_ptid) + { + /* GDB is telling us to choose any thread. Check if + the currently selected thread is still valid. If + it is not, select the first available. */ + thread_info *thread = find_thread_ptid (cs.general_thread); + if (thread == NULL) + thread = get_first_thread (); + thread_id = thread->id; + } + + cs.general_thread = thread_id; + set_desired_thread (); + gdb_assert (current_thread != NULL); + } + else if (cs.own_buf[1] == 'c') + cs.cont_thread = thread_id; + + write_ok (cs.own_buf); + } + else + { + /* Silently ignore it so that gdb can extend the protocol + without compatibility headaches. */ + cs.own_buf[0] = '\0'; + } + break; + case 'g': + require_running_or_break (cs.own_buf); + if (cs.current_traceframe >= 0) + { + struct regcache *regcache + = new_register_cache (current_target_desc ()); + + if (fetch_traceframe_registers (cs.current_traceframe, + regcache, -1) == 0) + registers_to_string (regcache, cs.own_buf); + else + write_enn (cs.own_buf); + free_register_cache (regcache); + } + else + { + struct regcache *regcache; + + if (!set_desired_thread ()) + write_enn (cs.own_buf); + else + { + regcache = get_thread_regcache (current_thread, 1); + registers_to_string (regcache, cs.own_buf); + } + } + break; + case 'G': + require_running_or_break (cs.own_buf); + if (cs.current_traceframe >= 0) + write_enn (cs.own_buf); + else + { + struct regcache *regcache; + + if (!set_desired_thread ()) + write_enn (cs.own_buf); + else + { + regcache = get_thread_regcache (current_thread, 1); + registers_from_string (regcache, &cs.own_buf[1]); + write_ok (cs.own_buf); + } + } + break; + case 'm': + { + require_running_or_break (cs.own_buf); + decode_m_packet (&cs.own_buf[1], &mem_addr, &len); + int res = gdb_read_memory (mem_addr, mem_buf, len); + if (res < 0) + write_enn (cs.own_buf); + else + bin2hex (mem_buf, cs.own_buf, res); + } + break; + case 'M': + require_running_or_break (cs.own_buf); + decode_M_packet (&cs.own_buf[1], &mem_addr, &len, &mem_buf); + if (gdb_write_memory (mem_addr, mem_buf, len) == 0) + write_ok (cs.own_buf); + else + write_enn (cs.own_buf); + break; + case 'X': + require_running_or_break (cs.own_buf); + if (decode_X_packet (&cs.own_buf[1], packet_len - 1, + &mem_addr, &len, &mem_buf) < 0 + || gdb_write_memory (mem_addr, mem_buf, len) != 0) + write_enn (cs.own_buf); + else + write_ok (cs.own_buf); + break; + case 'C': + require_running_or_break (cs.own_buf); + hex2bin (cs.own_buf + 1, &sig, 1); + if (gdb_signal_to_host_p ((enum gdb_signal) sig)) + signal = gdb_signal_to_host ((enum gdb_signal) sig); + else + signal = 0; + myresume (cs.own_buf, 0, signal); + break; + case 'S': + require_running_or_break (cs.own_buf); + hex2bin (cs.own_buf + 1, &sig, 1); + if (gdb_signal_to_host_p ((enum gdb_signal) sig)) + signal = gdb_signal_to_host ((enum gdb_signal) sig); + else + signal = 0; + myresume (cs.own_buf, 1, signal); + break; + case 'c': + require_running_or_break (cs.own_buf); + signal = 0; + myresume (cs.own_buf, 0, signal); + break; + case 's': + require_running_or_break (cs.own_buf); + signal = 0; + myresume (cs.own_buf, 1, signal); + break; + case 'Z': /* insert_ ... */ + /* Fallthrough. */ + case 'z': /* remove_ ... */ + { + char *dataptr; + ULONGEST addr; + int kind; + char type = cs.own_buf[1]; + int res; + const int insert = ch == 'Z'; + const char *p = &cs.own_buf[3]; + + p = unpack_varlen_hex (p, &addr); + kind = strtol (p + 1, &dataptr, 16); + + if (insert) + { + struct gdb_breakpoint *bp; + + bp = set_gdb_breakpoint (type, addr, kind, &res); + if (bp != NULL) + { + res = 0; + + /* GDB may have sent us a list of *point parameters to + be evaluated on the target's side. Read such list + here. If we already have a list of parameters, GDB + is telling us to drop that list and use this one + instead. */ + clear_breakpoint_conditions_and_commands (bp); + const char *options = dataptr; + process_point_options (bp, &options); + } + } + else + res = delete_gdb_breakpoint (type, addr, kind); + + if (res == 0) + write_ok (cs.own_buf); + else if (res == 1) + /* Unsupported. */ + cs.own_buf[0] = '\0'; + else + write_enn (cs.own_buf); + break; + } + case 'k': + response_needed = false; + if (!target_running ()) + /* The packet we received doesn't make sense - but we can't + reply to it, either. */ + return 0; + + fprintf (stderr, "Killing all inferiors\n"); + + for_each_process (kill_inferior_callback); + + /* When using the extended protocol, we wait with no program + running. The traditional protocol will exit instead. */ + if (extended_protocol) + { + cs.last_status.kind = TARGET_WAITKIND_EXITED; + cs.last_status.value.sig = GDB_SIGNAL_KILL; + return 0; + } + else + exit (0); + + case 'T': + { + require_running_or_break (cs.own_buf); + + ptid_t thread_id = read_ptid (&cs.own_buf[1], NULL); + if (find_thread_ptid (thread_id) == NULL) + { + write_enn (cs.own_buf); + break; + } + + if (mythread_alive (thread_id)) + write_ok (cs.own_buf); + else + write_enn (cs.own_buf); + } + break; + case 'R': + response_needed = false; + + /* Restarting the inferior is only supported in the extended + protocol. */ + if (extended_protocol) + { + if (target_running ()) + for_each_process (kill_inferior_callback); + + fprintf (stderr, "GDBserver restarting\n"); + + /* Wait till we are at 1st instruction in prog. */ + if (program_path.get () != NULL) + { + target_create_inferior (program_path.get (), program_args); + + if (cs.last_status.kind == TARGET_WAITKIND_STOPPED) + { + /* Stopped at the first instruction of the target + process. */ + cs.general_thread = cs.last_ptid; + } + else + { + /* Something went wrong. */ + cs.general_thread = null_ptid; + } + } + else + { + cs.last_status.kind = TARGET_WAITKIND_EXITED; + cs.last_status.value.sig = GDB_SIGNAL_KILL; + } + return 0; + } + else + { + /* It is a request we don't understand. Respond with an + empty packet so that gdb knows that we don't support this + request. */ + cs.own_buf[0] = '\0'; + break; + } + case 'v': + /* Extended (long) request. */ + handle_v_requests (cs.own_buf, packet_len, &new_packet_len); + break; + + default: + /* It is a request we don't understand. Respond with an empty + packet so that gdb knows that we don't support this + request. */ + cs.own_buf[0] = '\0'; + break; + } + + if (new_packet_len != -1) + putpkt_binary (cs.own_buf, new_packet_len); + else + putpkt (cs.own_buf); + + response_needed = false; + + if (exit_requested) + return -1; + + return 0; +} + +/* Event-loop callback for serial events. */ + +void +handle_serial_event (int err, gdb_client_data client_data) +{ + if (debug_threads) + debug_printf ("handling possible serial event\n"); + + /* Really handle it. */ + if (process_serial_event () < 0) + { + keep_processing_events = false; + return; + } + + /* Be sure to not change the selected thread behind GDB's back. + Important in the non-stop mode asynchronous protocol. */ + set_desired_thread (); +} + +/* Push a stop notification on the notification queue. */ + +static void +push_stop_notification (ptid_t ptid, struct target_waitstatus *status) +{ + struct vstop_notif *vstop_notif = new struct vstop_notif; + + vstop_notif->status = *status; + vstop_notif->ptid = ptid; + /* Push Stop notification. */ + notif_push (¬if_stop, vstop_notif); +} + +/* Event-loop callback for target events. */ + +void +handle_target_event (int err, gdb_client_data client_data) +{ + client_state &cs = get_client_state (); + if (debug_threads) + debug_printf ("handling possible target event\n"); + + cs.last_ptid = mywait (minus_one_ptid, &cs.last_status, + TARGET_WNOHANG, 1); + + if (cs.last_status.kind == TARGET_WAITKIND_NO_RESUMED) + { + if (gdb_connected () && report_no_resumed) + push_stop_notification (null_ptid, &cs.last_status); + } + else if (cs.last_status.kind != TARGET_WAITKIND_IGNORE) + { + int pid = cs.last_ptid.pid (); + struct process_info *process = find_process_pid (pid); + int forward_event = !gdb_connected () || process->gdb_detached; + + if (cs.last_status.kind == TARGET_WAITKIND_EXITED + || cs.last_status.kind == TARGET_WAITKIND_SIGNALLED) + { + mark_breakpoints_out (process); + target_mourn_inferior (cs.last_ptid); + } + else if (cs.last_status.kind == TARGET_WAITKIND_THREAD_EXITED) + ; + else + { + /* We're reporting this thread as stopped. Update its + "want-stopped" state to what the client wants, until it + gets a new resume action. */ + current_thread->last_resume_kind = resume_stop; + current_thread->last_status = cs.last_status; + } + + if (forward_event) + { + if (!target_running ()) + { + /* The last process exited. We're done. */ + exit (0); + } + + if (cs.last_status.kind == TARGET_WAITKIND_EXITED + || cs.last_status.kind == TARGET_WAITKIND_SIGNALLED + || cs.last_status.kind == TARGET_WAITKIND_THREAD_EXITED) + ; + else + { + /* A thread stopped with a signal, but gdb isn't + connected to handle it. Pass it down to the + inferior, as if it wasn't being traced. */ + enum gdb_signal signal; + + if (debug_threads) + debug_printf ("GDB not connected; forwarding event %d for" + " [%s]\n", + (int) cs.last_status.kind, + target_pid_to_str (cs.last_ptid)); + + if (cs.last_status.kind == TARGET_WAITKIND_STOPPED) + signal = cs.last_status.value.sig; + else + signal = GDB_SIGNAL_0; + target_continue (cs.last_ptid, signal); + } + } + else + push_stop_notification (cs.last_ptid, &cs.last_status); + } + + /* Be sure to not change the selected thread behind GDB's back. + Important in the non-stop mode asynchronous protocol. */ + set_desired_thread (); +} + +/* See gdbsupport/event-loop.h. */ + +int +invoke_async_signal_handlers () +{ + return 0; +} + +/* See gdbsupport/event-loop.h. */ + +int +check_async_event_handlers () +{ + return 0; +} + +/* See gdbsupport/errors.h */ + +void +flush_streams () +{ + fflush (stdout); + fflush (stderr); +} + +/* See gdbsupport/gdb_select.h. */ + +int +gdb_select (int n, fd_set *readfds, fd_set *writefds, + fd_set *exceptfds, struct timeval *timeout) +{ + return select (n, readfds, writefds, exceptfds, timeout); +} + +#if GDB_SELF_TEST +namespace selftests +{ + +void +reset () +{} + +} // namespace selftests +#endif /* GDB_SELF_TEST */ diff -Nru gdb-9.1/gdbserver/server.h gdb-10.2/gdbserver/server.h --- gdb-9.1/gdbserver/server.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/server.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,200 @@ +/* Common definitions for remote server for GDB. + Copyright (C) 1993-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef GDBSERVER_SERVER_H +#define GDBSERVER_SERVER_H + +#include "gdbsupport/common-defs.h" + +#undef PACKAGE +#undef PACKAGE_NAME +#undef PACKAGE_VERSION +#undef PACKAGE_STRING +#undef PACKAGE_TARNAME + +#include <config.h> + +gdb_static_assert (sizeof (CORE_ADDR) >= sizeof (void *)); + +#include "gdbsupport/version.h" + +#if !HAVE_DECL_PERROR +#ifndef perror +extern void perror (const char *); +#endif +#endif + +#if !HAVE_DECL_VASPRINTF +extern int vasprintf(char **strp, const char *fmt, va_list ap); +#endif +#if !HAVE_DECL_VSNPRINTF +int vsnprintf(char *str, size_t size, const char *format, va_list ap); +#endif + +#ifdef IN_PROCESS_AGENT +# define PROG "ipa" +#else +# define PROG "gdbserver" +#endif + +#include "gdbsupport/buffer.h" +#include "gdbsupport/xml-utils.h" +#include "regcache.h" +#include "gdbsupport/gdb_signals.h" +#include "target.h" +#include "mem-break.h" +#include "gdbsupport/environ.h" + +/* Target-specific functions */ + +void initialize_low (); + +/* Public variables in server.c */ + +extern bool server_waiting; + +extern bool disable_packet_vCont; +extern bool disable_packet_Tthread; +extern bool disable_packet_qC; +extern bool disable_packet_qfThreadInfo; +extern bool disable_packet_T; + +extern bool run_once; +extern bool non_stop; + +#include "gdbsupport/event-loop.h" + +/* Functions from server.c. */ +extern void handle_v_requests (char *own_buf, int packet_len, + int *new_packet_len); +extern void handle_serial_event (int err, gdb_client_data client_data); +extern void handle_target_event (int err, gdb_client_data client_data); + +/* Get rid of the currently pending stop replies that match PTID. */ +extern void discard_queued_stop_replies (ptid_t ptid); + +/* Returns true if there's a pending stop reply that matches PTID in + the vStopped notifications queue. */ +extern int in_queued_stop_replies (ptid_t ptid); + +#include "remote-utils.h" + +#include "utils.h" +#include "debug.h" +#include "gdbsupport/gdb_vecs.h" + +/* Maximum number of bytes to read/write at once. The value here + is chosen to fill up a packet (the headers account for the 32). */ +#define MAXBUFBYTES(N) (((N)-32)/2) + +/* Buffer sizes for transferring memory, registers, etc. Set to a constant + value to accomodate multiple register formats. This value must be at least + as large as the largest register set supported by gdbserver. */ +#define PBUFSIZ 18432 + +/* Definition for an unknown syscall, used basically in error-cases. */ +#define UNKNOWN_SYSCALL (-1) + +/* Definition for any syscall, used for unfiltered syscall reporting. */ +#define ANY_SYSCALL (-2) + +/* After fork_inferior has been called, we need to adjust a few + signals and call startup_inferior to start the inferior and consume + its first events. This is done here. PID is the pid of the new + inferior and PROGRAM is its name. */ +extern void post_fork_inferior (int pid, const char *program); + +/* Get the gdb_environ being used in the current session. */ +extern gdb_environ *get_environ (); + +extern unsigned long signal_pid; + + +/* Description of the client remote protocol state for the currently + connected client. */ + +struct client_state +{ + client_state (): + own_buf ((char *) xmalloc (PBUFSIZ + 1)) + {} + + /* The thread set with an `Hc' packet. `Hc' is deprecated in favor of + `vCont'. Note the multi-process extensions made `vCont' a + requirement, so `Hc pPID.TID' is pretty much undefined. So + CONT_THREAD can be null_ptid for no `Hc' thread, minus_one_ptid for + resuming all threads of the process (again, `Hc' isn't used for + multi-process), or a specific thread ptid_t. */ + ptid_t cont_thread; + + /* The thread set with an `Hg' packet. */ + ptid_t general_thread; + + int multi_process = 0; + int report_fork_events = 0; + int report_vfork_events = 0; + int report_exec_events = 0; + int report_thread_events = 0; + + /* True if the "swbreak+" feature is active. In that case, GDB wants + us to report whether a trap is explained by a software breakpoint + and for the server to handle PC adjustment if necessary on this + target. Only enabled if the target supports it. */ + int swbreak_feature = 0; + /* True if the "hwbreak+" feature is active. In that case, GDB wants + us to report whether a trap is explained by a hardware breakpoint. + Only enabled if the target supports it. */ + int hwbreak_feature = 0; + + /* True if the "vContSupported" feature is active. In that case, GDB + wants us to report whether single step is supported in the reply to + "vCont?" packet. */ + int vCont_supported = 0; + + /* Whether we should attempt to disable the operating system's address + space randomization feature before starting an inferior. */ + int disable_randomization = 1; + + int pass_signals[GDB_SIGNAL_LAST]; + int program_signals[GDB_SIGNAL_LAST]; + int program_signals_p = 0; + + /* Last status reported to GDB. */ + struct target_waitstatus last_status; + ptid_t last_ptid; + + char *own_buf; + + /* If true, then GDB has requested noack mode. */ + int noack_mode = 0; + /* If true, then we tell GDB to use noack mode by default. */ + int transport_is_reliable = 0; + + /* The traceframe to be used as the source of data to send back to + GDB. A value of -1 means to get data from the live program. */ + + int current_traceframe = -1; + +}; + +client_state &get_client_state (); + +#include "gdbthread.h" +#include "inferiors.h" + +#endif /* GDBSERVER_SERVER_H */ diff -Nru gdb-9.1/gdbserver/symbol.cc gdb-10.2/gdbserver/symbol.cc --- gdb-9.1/gdbserver/symbol.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/symbol.cc 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,32 @@ +/* Symbol manipulating routines for the remote server for GDB. + + Copyright (C) 2014-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "server.h" +#include "gdbsupport/symbol.h" + +/* See gdbsupport/symbol.h. */ + +int +find_minimal_symbol_address (const char *name, CORE_ADDR *addr, + struct objfile *objfile) +{ + gdb_assert (objfile == NULL); + + return look_up_one_symbol (name, addr, 1) != 1; +} diff -Nru gdb-9.1/gdbserver/target.cc gdb-10.2/gdbserver/target.cc --- gdb-9.1/gdbserver/target.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/target.cc 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,842 @@ +/* Target operations for the remote server for GDB. + Copyright (C) 2002-2021 Free Software Foundation, Inc. + + Contributed by MontaVista Software. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "server.h" +#include "tracepoint.h" +#include "gdbsupport/byte-vector.h" +#include "hostio.h" +#include <fcntl.h> +#include <unistd.h> +#include <sys/types.h> +#include <sys/stat.h> + +process_stratum_target *the_target; + +int +set_desired_thread () +{ + client_state &cs = get_client_state (); + thread_info *found = find_thread_ptid (cs.general_thread); + + current_thread = found; + return (current_thread != NULL); +} + +/* The thread that was current before prepare_to_access_memory was + called. done_accessing_memory uses this to restore the previous + selected thread. */ +static ptid_t prev_general_thread; + +/* See target.h. */ + +int +prepare_to_access_memory (void) +{ + client_state &cs = get_client_state (); + + /* The first thread found. */ + struct thread_info *first = NULL; + /* The first stopped thread found. */ + struct thread_info *stopped = NULL; + /* The current general thread, if found. */ + struct thread_info *current = NULL; + + /* Save the general thread value, since prepare_to_access_memory could change + it. */ + prev_general_thread = cs.general_thread; + + int res = the_target->prepare_to_access_memory (); + if (res != 0) + return res; + + for_each_thread (prev_general_thread.pid (), [&] (thread_info *thread) + { + if (mythread_alive (thread->id)) + { + if (stopped == NULL && the_target->supports_thread_stopped () + && target_thread_stopped (thread)) + stopped = thread; + + if (first == NULL) + first = thread; + + if (current == NULL && prev_general_thread == thread->id) + current = thread; + } + }); + + /* The thread we end up choosing. */ + struct thread_info *thread; + + /* Prefer a stopped thread. If none is found, try the current + thread. Otherwise, take the first thread in the process. If + none is found, undo the effects of + target->prepare_to_access_memory() and return error. */ + if (stopped != NULL) + thread = stopped; + else if (current != NULL) + thread = current; + else if (first != NULL) + thread = first; + else + { + done_accessing_memory (); + return 1; + } + + current_thread = thread; + cs.general_thread = ptid_of (thread); + + return 0; +} + +/* See target.h. */ + +void +done_accessing_memory (void) +{ + client_state &cs = get_client_state (); + + the_target->done_accessing_memory (); + + /* Restore the previous selected thread. */ + cs.general_thread = prev_general_thread; + switch_to_thread (the_target, cs.general_thread); +} + +int +read_inferior_memory (CORE_ADDR memaddr, unsigned char *myaddr, int len) +{ + int res; + res = the_target->read_memory (memaddr, myaddr, len); + check_mem_read (memaddr, myaddr, len); + return res; +} + +/* See target/target.h. */ + +int +target_read_memory (CORE_ADDR memaddr, gdb_byte *myaddr, ssize_t len) +{ + return read_inferior_memory (memaddr, myaddr, len); +} + +/* See target/target.h. */ + +int +target_read_uint32 (CORE_ADDR memaddr, uint32_t *result) +{ + return read_inferior_memory (memaddr, (gdb_byte *) result, sizeof (*result)); +} + +/* See target/target.h. */ + +int +target_write_memory (CORE_ADDR memaddr, const unsigned char *myaddr, + ssize_t len) +{ + /* Make a copy of the data because check_mem_write may need to + update it. */ + gdb::byte_vector buffer (myaddr, myaddr + len); + check_mem_write (memaddr, buffer.data (), myaddr, len); + return the_target->write_memory (memaddr, buffer.data (), len); +} + +ptid_t +mywait (ptid_t ptid, struct target_waitstatus *ourstatus, int options, + int connected_wait) +{ + ptid_t ret; + + if (connected_wait) + server_waiting = 1; + + ret = target_wait (ptid, ourstatus, options); + + /* We don't expose _LOADED events to gdbserver core. See the + `dlls_changed' global. */ + if (ourstatus->kind == TARGET_WAITKIND_LOADED) + ourstatus->kind = TARGET_WAITKIND_STOPPED; + + /* If GDB is connected through TCP/serial, then GDBserver will most + probably be running on its own terminal/console, so it's nice to + print there why is GDBserver exiting. If however, GDB is + connected through stdio, then there's no need to spam the GDB + console with this -- the user will already see the exit through + regular GDB output, in that same terminal. */ + if (!remote_connection_is_stdio ()) + { + if (ourstatus->kind == TARGET_WAITKIND_EXITED) + fprintf (stderr, + "\nChild exited with status %d\n", ourstatus->value.integer); + else if (ourstatus->kind == TARGET_WAITKIND_SIGNALLED) + fprintf (stderr, "\nChild terminated with signal = 0x%x (%s)\n", + gdb_signal_to_host (ourstatus->value.sig), + gdb_signal_to_name (ourstatus->value.sig)); + } + + if (connected_wait) + server_waiting = 0; + + return ret; +} + +/* See target/target.h. */ + +void +target_stop_and_wait (ptid_t ptid) +{ + struct target_waitstatus status; + bool was_non_stop = non_stop; + struct thread_resume resume_info; + + resume_info.thread = ptid; + resume_info.kind = resume_stop; + resume_info.sig = GDB_SIGNAL_0; + the_target->resume (&resume_info, 1); + + non_stop = true; + mywait (ptid, &status, 0, 0); + non_stop = was_non_stop; +} + +/* See target/target.h. */ + +ptid_t +target_wait (ptid_t ptid, struct target_waitstatus *status, int options) +{ + return the_target->wait (ptid, status, options); +} + +/* See target/target.h. */ + +void +target_mourn_inferior (ptid_t ptid) +{ + the_target->mourn (find_process_pid (ptid.pid ())); +} + +/* See target/target.h. */ + +void +target_continue_no_signal (ptid_t ptid) +{ + struct thread_resume resume_info; + + resume_info.thread = ptid; + resume_info.kind = resume_continue; + resume_info.sig = GDB_SIGNAL_0; + the_target->resume (&resume_info, 1); +} + +/* See target/target.h. */ + +void +target_continue (ptid_t ptid, enum gdb_signal signal) +{ + struct thread_resume resume_info; + + resume_info.thread = ptid; + resume_info.kind = resume_continue; + resume_info.sig = gdb_signal_to_host (signal); + the_target->resume (&resume_info, 1); +} + +/* See target/target.h. */ + +int +target_supports_multi_process (void) +{ + return the_target->supports_multi_process (); +} + +void +set_target_ops (process_stratum_target *target) +{ + the_target = target; +} + +/* Convert pid to printable format. */ + +const char * +target_pid_to_str (ptid_t ptid) +{ + static char buf[80]; + + if (ptid == minus_one_ptid) + xsnprintf (buf, sizeof (buf), "<all threads>"); + else if (ptid == null_ptid) + xsnprintf (buf, sizeof (buf), "<null thread>"); + else if (ptid.tid () != 0) + xsnprintf (buf, sizeof (buf), "Thread %d.0x%lx", + ptid.pid (), ptid.tid ()); + else if (ptid.lwp () != 0) + xsnprintf (buf, sizeof (buf), "LWP %d.%ld", + ptid.pid (), ptid.lwp ()); + else + xsnprintf (buf, sizeof (buf), "Process %d", + ptid.pid ()); + + return buf; +} + +int +kill_inferior (process_info *proc) +{ + gdb_agent_about_to_close (proc->pid); + + return the_target->kill (proc); +} + +/* Define it. */ + +target_terminal_state target_terminal::m_terminal_state + = target_terminal_state::is_ours; + +/* See target/target.h. */ + +void +target_terminal::init () +{ + /* Placeholder needed because of fork_inferior. Not necessary on + GDBserver. */ +} + +/* See target/target.h. */ + +void +target_terminal::inferior () +{ + /* Placeholder needed because of fork_inferior. Not necessary on + GDBserver. */ +} + +/* See target/target.h. */ + +void +target_terminal::ours () +{ + /* Placeholder needed because of fork_inferior. Not necessary on + GDBserver. */ +} + +/* See target/target.h. */ + +void +target_terminal::ours_for_output (void) +{ + /* Placeholder. */ +} + +/* See target/target.h. */ + +void +target_terminal::info (const char *arg, int from_tty) +{ + /* Placeholder. */ +} + +/* Default implementations of target ops. + See target.h for definitions. */ + +void +process_stratum_target::post_create_inferior () +{ + /* Nop. */ +} + +int +process_stratum_target::prepare_to_access_memory () +{ + return 0; +} + +void +process_stratum_target::done_accessing_memory () +{ + /* Nop. */ +} + +void +process_stratum_target::look_up_symbols () +{ + /* Nop. */ +} + +bool +process_stratum_target::supports_read_auxv () +{ + return false; +} + +int +process_stratum_target::read_auxv (CORE_ADDR offset, unsigned char *myaddr, + unsigned int len) +{ + gdb_assert_not_reached ("target op read_auxv not supported"); +} + +bool +process_stratum_target::supports_z_point_type (char z_type) +{ + return false; +} + +int +process_stratum_target::insert_point (enum raw_bkpt_type type, + CORE_ADDR addr, + int size, raw_breakpoint *bp) +{ + return 1; +} + +int +process_stratum_target::remove_point (enum raw_bkpt_type type, + CORE_ADDR addr, + int size, raw_breakpoint *bp) +{ + return 1; +} + +bool +process_stratum_target::stopped_by_sw_breakpoint () +{ + return false; +} + +bool +process_stratum_target::supports_stopped_by_sw_breakpoint () +{ + return false; +} + +bool +process_stratum_target::stopped_by_hw_breakpoint () +{ + return false; +} + +bool +process_stratum_target::supports_stopped_by_hw_breakpoint () +{ + return false; +} + +bool +process_stratum_target::supports_hardware_single_step () +{ + return false; +} + +bool +process_stratum_target::stopped_by_watchpoint () +{ + return false; +} + +CORE_ADDR +process_stratum_target::stopped_data_address () +{ + return 0; +} + +bool +process_stratum_target::supports_read_offsets () +{ + return false; +} + +int +process_stratum_target::read_offsets (CORE_ADDR *text, CORE_ADDR *data) +{ + gdb_assert_not_reached ("target op read_offsets not supported"); +} + +bool +process_stratum_target::supports_get_tls_address () +{ + return false; +} + +int +process_stratum_target::get_tls_address (thread_info *thread, + CORE_ADDR offset, + CORE_ADDR load_module, + CORE_ADDR *address) +{ + gdb_assert_not_reached ("target op get_tls_address not supported"); +} + +void +process_stratum_target::hostio_last_error (char *buf) +{ + hostio_last_error_from_errno (buf); +} + +bool +process_stratum_target::supports_qxfer_osdata () +{ + return false; +} + +int +process_stratum_target::qxfer_osdata (const char *annex, + unsigned char *readbuf, + unsigned const char *writebuf, + CORE_ADDR offset, int len) +{ + gdb_assert_not_reached ("target op qxfer_osdata not supported"); +} + +bool +process_stratum_target::supports_qxfer_siginfo () +{ + return false; +} + +int +process_stratum_target::qxfer_siginfo (const char *annex, + unsigned char *readbuf, + unsigned const char *writebuf, + CORE_ADDR offset, int len) +{ + gdb_assert_not_reached ("target op qxfer_siginfo not supported"); +} + +bool +process_stratum_target::supports_non_stop () +{ + return false; +} + +bool +process_stratum_target::async (bool enable) +{ + return false; +} + +int +process_stratum_target::start_non_stop (bool enable) +{ + if (enable) + return -1; + else + return 0; +} + +bool +process_stratum_target::supports_multi_process () +{ + return false; +} + +bool +process_stratum_target::supports_fork_events () +{ + return false; +} + +bool +process_stratum_target::supports_vfork_events () +{ + return false; +} + +bool +process_stratum_target::supports_exec_events () +{ + return false; +} + +void +process_stratum_target::handle_new_gdb_connection () +{ + /* Nop. */ +} + +int +process_stratum_target::handle_monitor_command (char *mon) +{ + return 0; +} + +int +process_stratum_target::core_of_thread (ptid_t ptid) +{ + return -1; +} + +bool +process_stratum_target::supports_read_loadmap () +{ + return false; +} + +int +process_stratum_target::read_loadmap (const char *annex, + CORE_ADDR offset, + unsigned char *myaddr, + unsigned int len) +{ + gdb_assert_not_reached ("target op read_loadmap not supported"); +} + +void +process_stratum_target::process_qsupported + (gdb::array_view<const char * const> features) +{ + /* Nop. */ +} + +bool +process_stratum_target::supports_tracepoints () +{ + return false; +} + +CORE_ADDR +process_stratum_target::read_pc (regcache *regcache) +{ + gdb_assert_not_reached ("process_target::read_pc: Unable to find PC"); +} + +void +process_stratum_target::write_pc (regcache *regcache, CORE_ADDR pc) +{ + gdb_assert_not_reached ("process_target::write_pc: Unable to update PC"); +} + +bool +process_stratum_target::supports_thread_stopped () +{ + return false; +} + +bool +process_stratum_target::thread_stopped (thread_info *thread) +{ + gdb_assert_not_reached ("target op thread_stopped not supported"); +} + +bool +process_stratum_target::supports_get_tib_address () +{ + return false; +} + +int +process_stratum_target::get_tib_address (ptid_t ptid, CORE_ADDR *address) +{ + gdb_assert_not_reached ("target op get_tib_address not supported"); +} + +void +process_stratum_target::pause_all (bool freeze) +{ + /* Nop. */ +} + +void +process_stratum_target::unpause_all (bool unfreeze) +{ + /* Nop. */ +} + +void +process_stratum_target::stabilize_threads () +{ + /* Nop. */ +} + +bool +process_stratum_target::supports_fast_tracepoints () +{ + return false; +} + +int +process_stratum_target::install_fast_tracepoint_jump_pad + (CORE_ADDR tpoint, CORE_ADDR tpaddr, CORE_ADDR collector, + CORE_ADDR lockaddr, ULONGEST orig_size, CORE_ADDR *jump_entry, + CORE_ADDR *trampoline, ULONGEST *trampoline_size, + unsigned char *jjump_pad_insn, ULONGEST *jjump_pad_insn_size, + CORE_ADDR *adjusted_insn_addr, CORE_ADDR *adjusted_insn_addr_end, + char *err) +{ + gdb_assert_not_reached ("target op install_fast_tracepoint_jump_pad " + "not supported"); +} + +int +process_stratum_target::get_min_fast_tracepoint_insn_len () +{ + return 0; +} + +struct emit_ops * +process_stratum_target::emit_ops () +{ + return nullptr; +} + +bool +process_stratum_target::supports_disable_randomization () +{ + return false; +} + +bool +process_stratum_target::supports_qxfer_libraries_svr4 () +{ + return false; +} + +int +process_stratum_target::qxfer_libraries_svr4 (const char *annex, + unsigned char *readbuf, + unsigned const char *writebuf, + CORE_ADDR offset, int len) +{ + gdb_assert_not_reached ("target op qxfer_libraries_svr4 not supported"); +} + +bool +process_stratum_target::supports_agent () +{ + return false; +} + +btrace_target_info * +process_stratum_target::enable_btrace (ptid_t ptid, const btrace_config *conf) +{ + error (_("Target does not support branch tracing.")); +} + +int +process_stratum_target::disable_btrace (btrace_target_info *tinfo) +{ + error (_("Target does not support branch tracing.")); +} + +int +process_stratum_target::read_btrace (btrace_target_info *tinfo, + buffer *buffer, + enum btrace_read_type type) +{ + error (_("Target does not support branch tracing.")); +} + +int +process_stratum_target::read_btrace_conf (const btrace_target_info *tinfo, + buffer *buffer) +{ + error (_("Target does not support branch tracing.")); +} + +bool +process_stratum_target::supports_range_stepping () +{ + return false; +} + +bool +process_stratum_target::supports_pid_to_exec_file () +{ + return false; +} + +char * +process_stratum_target::pid_to_exec_file (int pid) +{ + gdb_assert_not_reached ("target op pid_to_exec_file not supported"); +} + +bool +process_stratum_target::supports_multifs () +{ + return false; +} + +int +process_stratum_target::multifs_open (int pid, const char *filename, + int flags, mode_t mode) +{ + return open (filename, flags, mode); +} + +int +process_stratum_target::multifs_unlink (int pid, const char *filename) +{ + return unlink (filename); +} + +ssize_t +process_stratum_target::multifs_readlink (int pid, const char *filename, + char *buf, size_t bufsiz) +{ + return readlink (filename, buf, bufsiz); +} + +int +process_stratum_target::breakpoint_kind_from_pc (CORE_ADDR *pcptr) +{ + /* The default behavior is to use the size of a breakpoint as the + kind. */ + int size = 0; + sw_breakpoint_from_kind (0, &size); + return size; +} + +int +process_stratum_target::breakpoint_kind_from_current_state (CORE_ADDR *pcptr) +{ + return breakpoint_kind_from_pc (pcptr); +} + +const char * +process_stratum_target::thread_name (ptid_t thread) +{ + return nullptr; +} + +bool +process_stratum_target::thread_handle (ptid_t ptid, gdb_byte **handle, + int *handle_len) +{ + return false; +} + +bool +process_stratum_target::supports_software_single_step () +{ + return false; +} + +bool +process_stratum_target::supports_catch_syscall () +{ + return false; +} + +int +process_stratum_target::get_ipa_tdesc_idx () +{ + return 0; +} diff -Nru gdb-9.1/gdbserver/target.h gdb-10.2/gdbserver/target.h --- gdb-9.1/gdbserver/target.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/target.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,690 @@ +/* Target operations for the remote server for GDB. + Copyright (C) 2002-2021 Free Software Foundation, Inc. + + Contributed by MontaVista Software. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef GDBSERVER_TARGET_H +#define GDBSERVER_TARGET_H + +#include <sys/types.h> /* for mode_t */ +#include "target/target.h" +#include "target/resume.h" +#include "target/wait.h" +#include "target/waitstatus.h" +#include "mem-break.h" +#include "gdbsupport/array-view.h" +#include "gdbsupport/btrace-common.h" +#include <vector> + +struct emit_ops; +struct buffer; +struct process_info; + +/* This structure describes how to resume a particular thread (or all + threads) based on the client's request. If thread is -1, then this + entry applies to all threads. These are passed around as an + array. */ + +struct thread_resume +{ + ptid_t thread; + + /* How to "resume". */ + enum resume_kind kind; + + /* If non-zero, send this signal when we resume, or to stop the + thread. If stopping a thread, and this is 0, the target should + stop the thread however it best decides to (e.g., SIGSTOP on + linux; SuspendThread on win32). This is a host signal value (not + enum gdb_signal). */ + int sig; + + /* Range to single step within. Valid only iff KIND is resume_step. + + Single-step once, and then continuing stepping as long as the + thread stops in this range. (If the range is empty + [STEP_RANGE_START == STEP_RANGE_END], then this is a single-step + request.) */ + CORE_ADDR step_range_start; /* Inclusive */ + CORE_ADDR step_range_end; /* Exclusive */ +}; + +/* GDBserver doesn't have a concept of strata like GDB, but we call + its target vector "process_stratum" anyway for the benefit of + shared code. */ + +class process_stratum_target +{ +public: + + virtual ~process_stratum_target () = default; + + /* Start a new process. + + PROGRAM is a path to the program to execute. + PROGRAM_ARGS is a standard NULL-terminated array of arguments, + to be passed to the inferior as ``argv'' (along with PROGRAM). + + Returns the new PID on success, -1 on failure. Registers the new + process with the process list. */ + virtual int create_inferior (const char *program, + const std::vector<char *> &program_args) = 0; + + /* Do additional setup after a new process is created, including + exec-wrapper completion. */ + virtual void post_create_inferior (); + + /* Attach to a running process. + + PID is the process ID to attach to, specified by the user + or a higher layer. + + Returns -1 if attaching is unsupported, 0 on success, and calls + error() otherwise. */ + virtual int attach (unsigned long pid) = 0; + + /* Kill process PROC. Return -1 on failure, and 0 on success. */ + virtual int kill (process_info *proc) = 0; + + /* Detach from process PROC. Return -1 on failure, and 0 on + success. */ + virtual int detach (process_info *proc) = 0; + + /* The inferior process has died. Do what is right. */ + virtual void mourn (process_info *proc) = 0; + + /* Wait for process PID to exit. */ + virtual void join (int pid) = 0; + + /* Return true iff the thread with process ID PID is alive. */ + virtual bool thread_alive (ptid_t pid) = 0; + + /* Resume the inferior process. */ + virtual void resume (thread_resume *resume_info, size_t n) = 0; + + /* Wait for the inferior process or thread to change state. Store + status through argument pointer STATUS. + + PTID = -1 to wait for any pid to do something, PTID(pid,0,0) to + wait for any thread of process pid to do something. Return ptid + of child, or -1 in case of error; store status through argument + pointer STATUS. OPTIONS is a bit set of options defined as + TARGET_W* above. If options contains TARGET_WNOHANG and there's + no child stop to report, return is + null_ptid/TARGET_WAITKIND_IGNORE. */ + virtual ptid_t wait (ptid_t ptid, target_waitstatus *status, + int options) = 0; + + /* Fetch registers from the inferior process. + + If REGNO is -1, fetch all registers; otherwise, fetch at least REGNO. */ + virtual void fetch_registers (regcache *regcache, int regno) = 0; + + /* Store registers to the inferior process. + + If REGNO is -1, store all registers; otherwise, store at least REGNO. */ + virtual void store_registers (regcache *regcache, int regno) = 0; + + /* Prepare to read or write memory from the inferior process. + Targets use this to do what is necessary to get the state of the + inferior such that it is possible to access memory. + + This should generally only be called from client facing routines, + such as gdb_read_memory/gdb_write_memory, or the GDB breakpoint + insertion routine. + + Like `read_memory' and `write_memory' below, returns 0 on success + and errno on failure. */ + virtual int prepare_to_access_memory (); + + /* Undo the effects of prepare_to_access_memory. */ + virtual void done_accessing_memory (); + + /* Read memory from the inferior process. This should generally be + called through read_inferior_memory, which handles breakpoint shadowing. + + Read LEN bytes at MEMADDR into a buffer at MYADDR. + + Returns 0 on success and errno on failure. */ + virtual int read_memory (CORE_ADDR memaddr, unsigned char *myaddr, + int len) = 0; + + /* Write memory to the inferior process. This should generally be + called through target_write_memory, which handles breakpoint shadowing. + + Write LEN bytes from the buffer at MYADDR to MEMADDR. + + Returns 0 on success and errno on failure. */ + virtual int write_memory (CORE_ADDR memaddr, const unsigned char *myaddr, + int len) = 0; + + /* Query GDB for the values of any symbols we're interested in. + This function is called whenever we receive a "qSymbols::" + query, which corresponds to every time more symbols (might) + become available. */ + virtual void look_up_symbols (); + + /* Send an interrupt request to the inferior process, + however is appropriate. */ + virtual void request_interrupt () = 0; + + /* Return true if the read_auxv target op is supported. */ + virtual bool supports_read_auxv (); + + /* Read auxiliary vector data from the inferior process. + + Read LEN bytes at OFFSET into a buffer at MYADDR. */ + virtual int read_auxv (CORE_ADDR offset, unsigned char *myaddr, + unsigned int len); + + /* Returns true if GDB Z breakpoint type TYPE is supported, false + otherwise. The type is coded as follows: + '0' - software-breakpoint + '1' - hardware-breakpoint + '2' - write watchpoint + '3' - read watchpoint + '4' - access watchpoint + */ + virtual bool supports_z_point_type (char z_type); + + /* Insert and remove a break or watchpoint. + Returns 0 on success, -1 on failure and 1 on unsupported. */ + virtual int insert_point (enum raw_bkpt_type type, CORE_ADDR addr, + int size, raw_breakpoint *bp); + + virtual int remove_point (enum raw_bkpt_type type, CORE_ADDR addr, + int size, raw_breakpoint *bp); + + /* Returns true if the target stopped because it executed a software + breakpoint instruction, false otherwise. */ + virtual bool stopped_by_sw_breakpoint (); + + /* Returns true if the target knows whether a trap was caused by a + SW breakpoint triggering. */ + virtual bool supports_stopped_by_sw_breakpoint (); + + /* Returns true if the target stopped for a hardware breakpoint. */ + virtual bool stopped_by_hw_breakpoint (); + + /* Returns true if the target knows whether a trap was caused by a + HW breakpoint triggering. */ + virtual bool supports_stopped_by_hw_breakpoint (); + + /* Returns true if the target can do hardware single step. */ + virtual bool supports_hardware_single_step (); + + /* Returns true if target was stopped due to a watchpoint hit, false + otherwise. */ + virtual bool stopped_by_watchpoint (); + + /* Returns the address associated with the watchpoint that hit, if any; + returns 0 otherwise. */ + virtual CORE_ADDR stopped_data_address (); + + /* Return true if the read_offsets target op is supported. */ + virtual bool supports_read_offsets (); + + /* Reports the text, data offsets of the executable. This is + needed for uclinux where the executable is relocated during load + time. */ + virtual int read_offsets (CORE_ADDR *text, CORE_ADDR *data); + + /* Return true if the get_tls_address target op is supported. */ + virtual bool supports_get_tls_address (); + + /* Fetch the address associated with a specific thread local storage + area, determined by the specified THREAD, OFFSET, and LOAD_MODULE. + Stores it in *ADDRESS and returns zero on success; otherwise returns + an error code. A return value of -1 means this system does not + support the operation. */ + virtual int get_tls_address (thread_info *thread, CORE_ADDR offset, + CORE_ADDR load_module, CORE_ADDR *address); + + /* Fill BUF with an hostio error packet representing the last hostio + error. */ + virtual void hostio_last_error (char *buf); + + /* Return true if the qxfer_osdata target op is supported. */ + virtual bool supports_qxfer_osdata (); + + /* Read/Write OS data using qXfer packets. */ + virtual int qxfer_osdata (const char *annex, unsigned char *readbuf, + unsigned const char *writebuf, + CORE_ADDR offset, int len); + + /* Return true if the qxfer_siginfo target op is supported. */ + virtual bool supports_qxfer_siginfo (); + + /* Read/Write extra signal info. */ + virtual int qxfer_siginfo (const char *annex, unsigned char *readbuf, + unsigned const char *writebuf, + CORE_ADDR offset, int len); + + /* Return true if non-stop mode is supported. */ + virtual bool supports_non_stop (); + + /* Enables async target events. Returns the previous enable + state. */ + virtual bool async (bool enable); + + /* Switch to non-stop (ENABLE == true) or all-stop (ENABLE == false) + mode. Return 0 on success, -1 otherwise. */ + virtual int start_non_stop (bool enable); + + /* Returns true if the target supports multi-process debugging. */ + virtual bool supports_multi_process (); + + /* Returns true if fork events are supported. */ + virtual bool supports_fork_events (); + + /* Returns true if vfork events are supported. */ + virtual bool supports_vfork_events (); + + /* Returns true if exec events are supported. */ + virtual bool supports_exec_events (); + + /* Allows target to re-initialize connection-specific settings. */ + virtual void handle_new_gdb_connection (); + + /* The target-specific routine to process monitor command. + Returns 1 if handled, or 0 to perform default processing. */ + virtual int handle_monitor_command (char *mon); + + /* Returns the core given a thread, or -1 if not known. */ + virtual int core_of_thread (ptid_t ptid); + + /* Returns true if the read_loadmap target op is supported. */ + virtual bool supports_read_loadmap (); + + /* Read loadmaps. Read LEN bytes at OFFSET into a buffer at MYADDR. */ + virtual int read_loadmap (const char *annex, CORE_ADDR offset, + unsigned char *myaddr, unsigned int len); + + /* Target specific qSupported support. FEATURES is an array of + features unsupported by the core of GDBserver. */ + virtual void process_qsupported + (gdb::array_view<const char * const> features); + + /* Return true if the target supports tracepoints, false otherwise. */ + virtual bool supports_tracepoints (); + + /* Read PC from REGCACHE. */ + virtual CORE_ADDR read_pc (regcache *regcache); + + /* Write PC to REGCACHE. */ + virtual void write_pc (regcache *regcache, CORE_ADDR pc); + + /* Return true if the thread_stopped op is supported. */ + virtual bool supports_thread_stopped (); + + /* Return true if THREAD is known to be stopped now. */ + virtual bool thread_stopped (thread_info *thread); + + /* Return true if the get_tib_address op is supported. */ + virtual bool supports_get_tib_address (); + + /* Read Thread Information Block address. */ + virtual int get_tib_address (ptid_t ptid, CORE_ADDR *address); + + /* Pause all threads. If FREEZE, arrange for any resume attempt to + be ignored until an unpause_all call unfreezes threads again. + There can be nested calls to pause_all, so a freeze counter + should be maintained. */ + virtual void pause_all (bool freeze); + + /* Unpause all threads. Threads that hadn't been resumed by the + client should be left stopped. Basically a pause/unpause call + pair should not end up resuming threads that were stopped before + the pause call. */ + virtual void unpause_all (bool unfreeze); + + /* Stabilize all threads. That is, force them out of jump pads. */ + virtual void stabilize_threads (); + + /* Return true if the install_fast_tracepoint_jump_pad op is + supported. */ + virtual bool supports_fast_tracepoints (); + + /* Install a fast tracepoint jump pad. TPOINT is the address of the + tracepoint internal object as used by the IPA agent. TPADDR is + the address of tracepoint. COLLECTOR is address of the function + the jump pad redirects to. LOCKADDR is the address of the jump + pad lock object. ORIG_SIZE is the size in bytes of the + instruction at TPADDR. JUMP_ENTRY points to the address of the + jump pad entry, and on return holds the address past the end of + the created jump pad. If a trampoline is created by the function, + then TRAMPOLINE and TRAMPOLINE_SIZE return the address and size of + the trampoline, else they remain unchanged. JJUMP_PAD_INSN is a + buffer containing a copy of the instruction at TPADDR. + ADJUST_INSN_ADDR and ADJUST_INSN_ADDR_END are output parameters that + return the address range where the instruction at TPADDR was relocated + to. If an error occurs, the ERR may be used to pass on an error + message. */ + virtual int install_fast_tracepoint_jump_pad + (CORE_ADDR tpoint, CORE_ADDR tpaddr, CORE_ADDR collector, + CORE_ADDR lockaddr, ULONGEST orig_size, CORE_ADDR *jump_entry, + CORE_ADDR *trampoline, ULONGEST *trampoline_size, + unsigned char *jjump_pad_insn, ULONGEST *jjump_pad_insn_size, + CORE_ADDR *adjusted_insn_addr, CORE_ADDR *adjusted_insn_addr_end, + char *err); + + /* Return the minimum length of an instruction that can be safely + overwritten for use as a fast tracepoint. */ + virtual int get_min_fast_tracepoint_insn_len (); + + /* Return the bytecode operations vector for the current inferior. + Returns nullptr if bytecode compilation is not supported. */ + virtual struct emit_ops *emit_ops (); + + /* Returns true if the target supports disabling randomization. */ + virtual bool supports_disable_randomization (); + + /* Return true if the qxfer_libraries_svr4 op is supported. */ + virtual bool supports_qxfer_libraries_svr4 (); + + /* Read solib info on SVR4 platforms. */ + virtual int qxfer_libraries_svr4 (const char *annex, + unsigned char *readbuf, + unsigned const char *writebuf, + CORE_ADDR offset, int len); + + /* Return true if target supports debugging agent. */ + virtual bool supports_agent (); + + /* Enable branch tracing for PTID based on CONF and allocate a branch trace + target information struct for reading and for disabling branch trace. */ + virtual btrace_target_info *enable_btrace (ptid_t ptid, + const btrace_config *conf); + + /* Disable branch tracing. + Returns zero on success, non-zero otherwise. */ + virtual int disable_btrace (btrace_target_info *tinfo); + + /* Read branch trace data into buffer. + Return 0 on success; print an error message into BUFFER and return -1, + otherwise. */ + virtual int read_btrace (btrace_target_info *tinfo, buffer *buf, + enum btrace_read_type type); + + /* Read the branch trace configuration into BUFFER. + Return 0 on success; print an error message into BUFFER and return -1 + otherwise. */ + virtual int read_btrace_conf (const btrace_target_info *tinfo, + buffer *buf); + + /* Return true if target supports range stepping. */ + virtual bool supports_range_stepping (); + + /* Return true if the pid_to_exec_file op is supported. */ + virtual bool supports_pid_to_exec_file (); + + /* Return the full absolute name of the executable file that was + run to create the process PID. If the executable file cannot + be determined, NULL is returned. Otherwise, a pointer to a + character string containing the pathname is returned. This + string should be copied into a buffer by the client if the string + will not be immediately used, or if it must persist. */ + virtual char *pid_to_exec_file (int pid); + + /* Return true if any of the multifs ops is supported. */ + virtual bool supports_multifs (); + + /* Multiple-filesystem-aware open. Like open(2), but operating in + the filesystem as it appears to process PID. Systems where all + processes share a common filesystem should not override this. + The default behavior is to use open(2). */ + virtual int multifs_open (int pid, const char *filename, + int flags, mode_t mode); + + /* Multiple-filesystem-aware unlink. Like unlink(2), but operates + in the filesystem as it appears to process PID. Systems where + all processes share a common filesystem should not override this. + The default behavior is to use unlink(2). */ + virtual int multifs_unlink (int pid, const char *filename); + + /* Multiple-filesystem-aware readlink. Like readlink(2), but + operating in the filesystem as it appears to process PID. + Systems where all processes share a common filesystem should + not override this. The default behavior is to use readlink(2). */ + virtual ssize_t multifs_readlink (int pid, const char *filename, + char *buf, size_t bufsiz); + + /* Return the breakpoint kind for this target based on PC. The + PCPTR is adjusted to the real memory location in case a flag + (e.g., the Thumb bit on ARM) was present in the PC. */ + virtual int breakpoint_kind_from_pc (CORE_ADDR *pcptr); + + /* Return the software breakpoint from KIND. KIND can have target + specific meaning like the Z0 kind parameter. + SIZE is set to the software breakpoint's length in memory. */ + virtual const gdb_byte *sw_breakpoint_from_kind (int kind, int *size) = 0; + + /* Return the breakpoint kind for this target based on the current + processor state (e.g. the current instruction mode on ARM) and the + PC. The PCPTR is adjusted to the real memory location in case a + flag (e.g., the Thumb bit on ARM) is present in the PC. */ + virtual int breakpoint_kind_from_current_state (CORE_ADDR *pcptr); + + /* Return the thread's name, or NULL if the target is unable to + determine it. The returned value must not be freed by the + caller. */ + virtual const char *thread_name (ptid_t thread); + + /* Thread ID to (numeric) thread handle: Return true on success and + false for failure. Return pointer to thread handle via HANDLE + and the handle's length via HANDLE_LEN. */ + virtual bool thread_handle (ptid_t ptid, gdb_byte **handle, + int *handle_len); + + /* Returns true if the target can software single step. */ + virtual bool supports_software_single_step (); + + /* Return true if the target supports catch syscall. */ + virtual bool supports_catch_syscall (); + + /* Return tdesc index for IPA. */ + virtual int get_ipa_tdesc_idx (); +}; + +extern process_stratum_target *the_target; + +void set_target_ops (process_stratum_target *); + +#define target_create_inferior(program, program_args) \ + the_target->create_inferior (program, program_args) + +#define target_post_create_inferior() \ + the_target->post_create_inferior () + +#define myattach(pid) \ + the_target->attach (pid) + +int kill_inferior (process_info *proc); + +#define target_supports_fork_events() \ + the_target->supports_fork_events () + +#define target_supports_vfork_events() \ + the_target->supports_vfork_events () + +#define target_supports_exec_events() \ + the_target->supports_exec_events () + +#define target_handle_new_gdb_connection() \ + the_target->handle_new_gdb_connection () + +#define detach_inferior(proc) \ + the_target->detach (proc) + +#define mythread_alive(pid) \ + the_target->thread_alive (pid) + +#define fetch_inferior_registers(regcache, regno) \ + the_target->fetch_registers (regcache, regno) + +#define store_inferior_registers(regcache, regno) \ + the_target->store_registers (regcache, regno) + +#define join_inferior(pid) \ + the_target->join (pid) + +#define target_supports_non_stop() \ + the_target->supports_non_stop () + +#define target_async(enable) \ + the_target->async (enable) + +#define target_process_qsupported(features) \ + the_target->process_qsupported (features) + +#define target_supports_catch_syscall() \ + the_target->supports_catch_syscall () + +#define target_get_ipa_tdesc_idx() \ + the_target->get_ipa_tdesc_idx () + +#define target_supports_tracepoints() \ + the_target->supports_tracepoints () + +#define target_supports_fast_tracepoints() \ + the_target->supports_fast_tracepoints () + +#define target_get_min_fast_tracepoint_insn_len() \ + the_target->get_min_fast_tracepoint_insn_len () + +#define target_thread_stopped(thread) \ + the_target->thread_stopped (thread) + +#define target_pause_all(freeze) \ + the_target->pause_all (freeze) + +#define target_unpause_all(unfreeze) \ + the_target->unpause_all (unfreeze) + +#define target_stabilize_threads() \ + the_target->stabilize_threads () + +#define target_install_fast_tracepoint_jump_pad(tpoint, tpaddr, \ + collector, lockaddr, \ + orig_size, \ + jump_entry, \ + trampoline, trampoline_size, \ + jjump_pad_insn, \ + jjump_pad_insn_size, \ + adjusted_insn_addr, \ + adjusted_insn_addr_end, \ + err) \ + the_target->install_fast_tracepoint_jump_pad (tpoint, tpaddr, \ + collector,lockaddr, \ + orig_size, jump_entry, \ + trampoline, \ + trampoline_size, \ + jjump_pad_insn, \ + jjump_pad_insn_size, \ + adjusted_insn_addr, \ + adjusted_insn_addr_end, \ + err) + +#define target_emit_ops() \ + the_target->emit_ops () + +#define target_supports_disable_randomization() \ + the_target->supports_disable_randomization () + +#define target_supports_agent() \ + the_target->supports_agent () + +static inline struct btrace_target_info * +target_enable_btrace (ptid_t ptid, const struct btrace_config *conf) +{ + return the_target->enable_btrace (ptid, conf); +} + +static inline int +target_disable_btrace (struct btrace_target_info *tinfo) +{ + return the_target->disable_btrace (tinfo); +} + +static inline int +target_read_btrace (struct btrace_target_info *tinfo, + struct buffer *buffer, + enum btrace_read_type type) +{ + return the_target->read_btrace (tinfo, buffer, type); +} + +static inline int +target_read_btrace_conf (struct btrace_target_info *tinfo, + struct buffer *buffer) +{ + return the_target->read_btrace_conf (tinfo, buffer); +} + +#define target_supports_range_stepping() \ + the_target->supports_range_stepping () + +#define target_supports_stopped_by_sw_breakpoint() \ + the_target->supports_stopped_by_sw_breakpoint () + +#define target_stopped_by_sw_breakpoint() \ + the_target->stopped_by_sw_breakpoint () + +#define target_supports_stopped_by_hw_breakpoint() \ + the_target->supports_stopped_by_hw_breakpoint () + +#define target_supports_hardware_single_step() \ + the_target->supports_hardware_single_step () + +#define target_stopped_by_hw_breakpoint() \ + the_target->stopped_by_hw_breakpoint () + +#define target_breakpoint_kind_from_pc(pcptr) \ + the_target->breakpoint_kind_from_pc (pcptr) + +#define target_breakpoint_kind_from_current_state(pcptr) \ + the_target->breakpoint_kind_from_current_state (pcptr) + +#define target_supports_software_single_step() \ + the_target->supports_software_single_step () + +ptid_t mywait (ptid_t ptid, struct target_waitstatus *ourstatus, int options, + int connected_wait); + +/* Prepare to read or write memory from the inferior process. See the + corresponding process_stratum_target methods for more details. */ + +int prepare_to_access_memory (void); +void done_accessing_memory (void); + +#define target_core_of_thread(ptid) \ + the_target->core_of_thread (ptid) + +#define target_thread_name(ptid) \ + the_target->thread_name (ptid) + +#define target_thread_handle(ptid, handle, handle_len) \ + the_target->thread_handle (ptid, handle, handle_len) + +int read_inferior_memory (CORE_ADDR memaddr, unsigned char *myaddr, int len); + +int set_desired_thread (); + +const char *target_pid_to_str (ptid_t); + +#endif /* GDBSERVER_TARGET_H */ diff -Nru gdb-9.1/gdbserver/tdesc.cc gdb-10.2/gdbserver/tdesc.cc --- gdb-9.1/gdbserver/tdesc.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/tdesc.cc 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,235 @@ +/* Copyright (C) 2012-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "server.h" +#include "tdesc.h" +#include "regdef.h" + +#ifndef IN_PROCESS_AGENT + +target_desc::~target_desc () +{ + xfree ((char *) arch); + xfree ((char *) osabi); +} + +bool target_desc::operator== (const target_desc &other) const +{ + if (reg_defs != other.reg_defs) + return false; + + /* Compare expedite_regs. */ + int i = 0; + for (; expedite_regs[i] != NULL; i++) + { + if (strcmp (expedite_regs[i], other.expedite_regs[i]) != 0) + return false; + } + if (other.expedite_regs[i] != NULL) + return false; + + return true; +} + +#endif + +void target_desc::accept (tdesc_element_visitor &v) const +{ +#ifndef IN_PROCESS_AGENT + v.visit_pre (this); + + for (const tdesc_feature_up &feature : features) + feature->accept (v); + + v.visit_post (this); +#endif +} + +void +init_target_desc (struct target_desc *tdesc, + const char **expedite_regs) +{ + int offset = 0; + + /* Go through all the features and populate reg_defs. */ + for (const tdesc_feature_up &feature : tdesc->features) + for (const tdesc_reg_up &treg : feature->registers) + { + int regnum = treg->target_regnum; + + /* Register number will increase (possibly with gaps) or be zero. */ + gdb_assert (regnum == 0 || regnum >= tdesc->reg_defs.size ()); + + if (regnum != 0) + tdesc->reg_defs.resize (regnum, gdb::reg (offset)); + + tdesc->reg_defs.emplace_back (treg->name.c_str (), offset, + treg->bitsize); + offset += treg->bitsize; + } + + tdesc->registers_size = offset / 8; + + /* Make sure PBUFSIZ is large enough to hold a full register + packet. */ + gdb_assert (2 * tdesc->registers_size + 32 <= PBUFSIZ); + +#ifndef IN_PROCESS_AGENT + tdesc->expedite_regs = expedite_regs; +#endif +} + +/* See gdbsupport/tdesc.h. */ + +struct target_desc * +allocate_target_description (void) +{ + return new target_desc (); +} + +/* See gdbsupport/tdesc.h. */ + +void +target_desc_deleter::operator() (struct target_desc *target_desc) const +{ + delete target_desc; +} + +#ifndef IN_PROCESS_AGENT + +static const struct target_desc default_description {}; + +void +copy_target_description (struct target_desc *dest, + const struct target_desc *src) +{ + dest->reg_defs = src->reg_defs; + dest->expedite_regs = src->expedite_regs; + dest->registers_size = src->registers_size; + dest->xmltarget = src->xmltarget; +} + +const struct target_desc * +current_target_desc (void) +{ + if (current_thread == NULL) + return &default_description; + + return current_process ()->tdesc; +} + +/* An empty structure. */ + +struct tdesc_compatible_info { }; + +/* See gdbsupport/tdesc.h. */ + +const std::vector<tdesc_compatible_info_up> & +tdesc_compatible_info_list (const target_desc *target_desc) +{ + static std::vector<tdesc_compatible_info_up> empty; + return empty; +} + +/* See gdbsupport/tdesc.h. */ + +const char * +tdesc_compatible_info_arch_name (const tdesc_compatible_info_up &c_info) +{ + return nullptr; +} + +/* See gdbsupport/tdesc.h. */ + +const char * +tdesc_architecture_name (const struct target_desc *target_desc) +{ + return target_desc->arch; +} + +/* See gdbsupport/tdesc.h. */ + +void +set_tdesc_architecture (struct target_desc *target_desc, + const char *name) +{ + target_desc->arch = xstrdup (name); +} + +/* See gdbsupport/tdesc.h. */ + +const char * +tdesc_osabi_name (const struct target_desc *target_desc) +{ + return target_desc->osabi; +} + +/* See gdbsupport/tdesc.h. */ + +void +set_tdesc_osabi (struct target_desc *target_desc, const char *name) +{ + target_desc->osabi = xstrdup (name); +} + +/* See gdbsupport/tdesc.h. */ + +const char * +tdesc_get_features_xml (const target_desc *tdesc) +{ + /* Either .xmltarget or .features is not NULL. */ + gdb_assert (tdesc->xmltarget != NULL + || (!tdesc->features.empty () + && tdesc->arch != NULL)); + + if (tdesc->xmltarget == NULL) + { + std::string buffer ("@"); + print_xml_feature v (&buffer); + tdesc->accept (v); + tdesc->xmltarget = xstrdup (buffer.c_str ()); + } + + return tdesc->xmltarget; +} +#endif + +/* See gdbsupport/tdesc.h. */ + +struct tdesc_feature * +tdesc_create_feature (struct target_desc *tdesc, const char *name) +{ + struct tdesc_feature *new_feature = new tdesc_feature (name); + tdesc->features.emplace_back (new_feature); + return new_feature; +} + +/* See gdbsupport/tdesc.h. */ + +bool +tdesc_contains_feature (const target_desc *tdesc, const std::string &feature) +{ + gdb_assert (tdesc != nullptr); + + for (const tdesc_feature_up &f : tdesc->features) + { + if (f->name == feature) + return true; + } + + return false; +} diff -Nru gdb-9.1/gdbserver/tdesc.h gdb-10.2/gdbserver/tdesc.h --- gdb-9.1/gdbserver/tdesc.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/tdesc.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,101 @@ +/* Target description definitions for remote server for GDB. + Copyright (C) 2012-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef GDBSERVER_TDESC_H +#define GDBSERVER_TDESC_H + +#include "gdbsupport/tdesc.h" + +#include "regdef.h" +#include <vector> + +/* A target description. Inherit from tdesc_feature so that target_desc + can be used as tdesc_feature. */ + +struct target_desc final : tdesc_element +{ + /* A vector of elements of register definitions that + describe the inferior's register set. */ + std::vector<struct gdb::reg> reg_defs; + + /* The register cache size, in bytes. */ + int registers_size; + + /* XML features in this target description. */ + std::vector<tdesc_feature_up> features; + +#ifndef IN_PROCESS_AGENT + /* An array of register names. These are the "expedite" registers: + registers whose values are sent along with stop replies. */ + const char **expedite_regs = NULL; + + /* Defines what to return when looking for the "target.xml" file in + response to qXfer:features:read. Its contents can either be + verbatim XML code (prefixed with a '@') or else the name of the + actual XML file to be used in place of "target.xml". + + If NULL then its content will be generated by parsing the target + description into xml. */ + mutable const char *xmltarget = NULL; + + /* The value of <architecture> element in the XML, replying GDB. */ + const char *arch = NULL; + + /* The value of <osabi> element in the XML, replying GDB. */ + const char *osabi = NULL; + +public: + target_desc () + : registers_size (0) + {} + + ~target_desc (); + + bool operator== (const target_desc &other) const; + + bool operator!= (const target_desc &other) const + { + return !(*this == other); + } +#endif + + void accept (tdesc_element_visitor &v) const override; +}; + +/* Copy target description SRC to DEST. */ + +void copy_target_description (struct target_desc *dest, + const struct target_desc *src); + +/* Initialize TDESC, and then set its expedite_regs field to + EXPEDITE_REGS. */ + +void init_target_desc (struct target_desc *tdesc, + const char **expedite_regs); + +/* Return the current inferior's target description. Never returns + NULL. */ + +const struct target_desc *current_target_desc (void); + +/* Return true if TDESC contains the feature described by string FEATURE. + Return false otherwise. */ +bool tdesc_contains_feature (const target_desc *tdesc, + const std::string &feature); + +#endif /* GDBSERVER_TDESC_H */ diff -Nru gdb-9.1/gdbserver/thread-db.cc gdb-10.2/gdbserver/thread-db.cc --- gdb-9.1/gdbserver/thread-db.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/thread-db.cc 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,902 @@ +/* Thread management interface, for the remote server for GDB. + Copyright (C) 2002-2021 Free Software Foundation, Inc. + + Contributed by MontaVista Software. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "server.h" + +#include "linux-low.h" + +#include "debug.h" +#include "gdb_proc_service.h" +#include "nat/gdb_thread_db.h" +#include "gdbsupport/gdb_vecs.h" +#include "nat/linux-procfs.h" +#include "gdbsupport/scoped_restore.h" + +#ifndef USE_LIBTHREAD_DB_DIRECTLY +#include <dlfcn.h> +#endif +#include <limits.h> +#include <ctype.h> + +struct thread_db +{ + /* Structure that identifies the child process for the + <proc_service.h> interface. */ + struct ps_prochandle proc_handle; + + /* Connection to the libthread_db library. */ + td_thragent_t *thread_agent; + + /* If this flag has been set, we've already asked GDB for all + symbols we might need; assume symbol cache misses are + failures. */ + int all_symbols_looked_up; + +#ifndef USE_LIBTHREAD_DB_DIRECTLY + /* Handle of the libthread_db from dlopen. */ + void *handle; +#endif + + /* Addresses of libthread_db functions. */ + td_ta_new_ftype *td_ta_new_p; + td_ta_map_lwp2thr_ftype *td_ta_map_lwp2thr_p; + td_thr_get_info_ftype *td_thr_get_info_p; + td_ta_thr_iter_ftype *td_ta_thr_iter_p; + td_thr_tls_get_addr_ftype *td_thr_tls_get_addr_p; + td_thr_tlsbase_ftype *td_thr_tlsbase_p; + td_symbol_list_ftype *td_symbol_list_p; +}; + +static char *libthread_db_search_path; + +static int find_one_thread (ptid_t); +static int find_new_threads_callback (const td_thrhandle_t *th_p, void *data); + +static const char * +thread_db_err_str (td_err_e err) +{ + static char buf[64]; + + switch (err) + { + case TD_OK: + return "generic 'call succeeded'"; + case TD_ERR: + return "generic error"; + case TD_NOTHR: + return "no thread to satisfy query"; + case TD_NOSV: + return "no sync handle to satisfy query"; + case TD_NOLWP: + return "no LWP to satisfy query"; + case TD_BADPH: + return "invalid process handle"; + case TD_BADTH: + return "invalid thread handle"; + case TD_BADSH: + return "invalid synchronization handle"; + case TD_BADTA: + return "invalid thread agent"; + case TD_BADKEY: + return "invalid key"; + case TD_NOMSG: + return "no event message for getmsg"; + case TD_NOFPREGS: + return "FPU register set not available"; + case TD_NOLIBTHREAD: + return "application not linked with libthread"; + case TD_NOEVENT: + return "requested event is not supported"; + case TD_NOCAPAB: + return "capability not available"; + case TD_DBERR: + return "debugger service failed"; + case TD_NOAPLIC: + return "operation not applicable to"; + case TD_NOTSD: + return "no thread-specific data for this thread"; + case TD_MALLOC: + return "malloc failed"; + case TD_PARTIALREG: + return "only part of register set was written/read"; + case TD_NOXREGS: + return "X register set not available for this thread"; +#ifdef HAVE_TD_VERSION + case TD_VERSION: + return "version mismatch between libthread_db and libpthread"; +#endif + default: + xsnprintf (buf, sizeof (buf), "unknown thread_db error '%d'", err); + return buf; + } +} + +#if 0 +static char * +thread_db_state_str (td_thr_state_e state) +{ + static char buf[64]; + + switch (state) + { + case TD_THR_STOPPED: + return "stopped by debugger"; + case TD_THR_RUN: + return "runnable"; + case TD_THR_ACTIVE: + return "active"; + case TD_THR_ZOMBIE: + return "zombie"; + case TD_THR_SLEEP: + return "sleeping"; + case TD_THR_STOPPED_ASLEEP: + return "stopped by debugger AND blocked"; + default: + xsnprintf (buf, sizeof (buf), "unknown thread_db state %d", state); + return buf; + } +} +#endif + +/* Get thread info about PTID, accessing memory via the current + thread. */ + +static int +find_one_thread (ptid_t ptid) +{ + td_thrhandle_t th; + td_thrinfo_t ti; + td_err_e err; + struct lwp_info *lwp; + struct thread_db *thread_db = current_process ()->priv->thread_db; + int lwpid = ptid.lwp (); + + thread_info *thread = find_thread_ptid (ptid); + lwp = get_thread_lwp (thread); + if (lwp->thread_known) + return 1; + + /* Get information about this thread. */ + err = thread_db->td_ta_map_lwp2thr_p (thread_db->thread_agent, lwpid, &th); + if (err != TD_OK) + error ("Cannot get thread handle for LWP %d: %s", + lwpid, thread_db_err_str (err)); + + err = thread_db->td_thr_get_info_p (&th, &ti); + if (err != TD_OK) + error ("Cannot get thread info for LWP %d: %s", + lwpid, thread_db_err_str (err)); + + if (debug_threads) + debug_printf ("Found thread %ld (LWP %d)\n", + (unsigned long) ti.ti_tid, ti.ti_lid); + + if (lwpid != ti.ti_lid) + { + warning ("PID mismatch! Expected %ld, got %ld", + (long) lwpid, (long) ti.ti_lid); + return 0; + } + + /* If the new thread ID is zero, a final thread ID will be available + later. Do not enable thread debugging yet. */ + if (ti.ti_tid == 0) + return 0; + + lwp->thread_known = 1; + lwp->th = th; + lwp->thread_handle = ti.ti_tid; + + return 1; +} + +/* Attach a thread. Return true on success. */ + +static int +attach_thread (const td_thrhandle_t *th_p, td_thrinfo_t *ti_p) +{ + struct process_info *proc = current_process (); + int pid = pid_of (proc); + ptid_t ptid = ptid_t (pid, ti_p->ti_lid, 0); + struct lwp_info *lwp; + int err; + + if (debug_threads) + debug_printf ("Attaching to thread %ld (LWP %d)\n", + (unsigned long) ti_p->ti_tid, ti_p->ti_lid); + err = the_linux_target->attach_lwp (ptid); + if (err != 0) + { + std::string reason = linux_ptrace_attach_fail_reason_string (ptid, err); + + warning ("Could not attach to thread %ld (LWP %d): %s", + (unsigned long) ti_p->ti_tid, ti_p->ti_lid, reason.c_str ()); + + return 0; + } + + lwp = find_lwp_pid (ptid); + gdb_assert (lwp != NULL); + lwp->thread_known = 1; + lwp->th = *th_p; + lwp->thread_handle = ti_p->ti_tid; + + return 1; +} + +/* Attach thread if we haven't seen it yet. + Increment *COUNTER if we have attached a new thread. + Return false on failure. */ + +static int +maybe_attach_thread (const td_thrhandle_t *th_p, td_thrinfo_t *ti_p, + int *counter) +{ + struct lwp_info *lwp; + + lwp = find_lwp_pid (ptid_t (ti_p->ti_lid)); + if (lwp != NULL) + return 1; + + if (!attach_thread (th_p, ti_p)) + return 0; + + if (counter != NULL) + *counter += 1; + + return 1; +} + +static int +find_new_threads_callback (const td_thrhandle_t *th_p, void *data) +{ + td_thrinfo_t ti; + td_err_e err; + struct thread_db *thread_db = current_process ()->priv->thread_db; + + err = thread_db->td_thr_get_info_p (th_p, &ti); + if (err != TD_OK) + error ("Cannot get thread info: %s", thread_db_err_str (err)); + + if (ti.ti_lid == -1) + { + /* A thread with kernel thread ID -1 is either a thread that + exited and was joined, or a thread that is being created but + hasn't started yet, and that is reusing the tcb/stack of a + thread that previously exited and was joined. (glibc marks + terminated and joined threads with kernel thread ID -1. See + glibc PR17707. */ + if (debug_threads) + debug_printf ("thread_db: skipping exited and " + "joined thread (0x%lx)\n", + (unsigned long) ti.ti_tid); + return 0; + } + + /* Check for zombies. */ + if (ti.ti_state == TD_THR_UNKNOWN || ti.ti_state == TD_THR_ZOMBIE) + return 0; + + if (!maybe_attach_thread (th_p, &ti, (int *) data)) + { + /* Terminate iteration early: we might be looking at stale data in + the inferior. The thread_db_find_new_threads will retry. */ + return 1; + } + + return 0; +} + +static void +thread_db_find_new_threads (void) +{ + td_err_e err; + ptid_t ptid = current_ptid; + struct thread_db *thread_db = current_process ()->priv->thread_db; + int loop, iteration; + + /* This function is only called when we first initialize thread_db. + First locate the initial thread. If it is not ready for + debugging yet, then stop. */ + if (find_one_thread (ptid) == 0) + return; + + /* Require 4 successive iterations which do not find any new threads. + The 4 is a heuristic: there is an inherent race here, and I have + seen that 2 iterations in a row are not always sufficient to + "capture" all threads. */ + for (loop = 0, iteration = 0; loop < 4; ++loop, ++iteration) + { + int new_thread_count = 0; + + /* Iterate over all user-space threads to discover new threads. */ + err = thread_db->td_ta_thr_iter_p (thread_db->thread_agent, + find_new_threads_callback, + &new_thread_count, + TD_THR_ANY_STATE, + TD_THR_LOWEST_PRIORITY, + TD_SIGNO_MASK, TD_THR_ANY_USER_FLAGS); + if (debug_threads) + debug_printf ("Found %d threads in iteration %d.\n", + new_thread_count, iteration); + + if (new_thread_count != 0) + { + /* Found new threads. Restart iteration from beginning. */ + loop = -1; + } + } + if (err != TD_OK) + error ("Cannot find new threads: %s", thread_db_err_str (err)); +} + +/* Cache all future symbols that thread_db might request. We can not + request symbols at arbitrary states in the remote protocol, only + when the client tells us that new symbols are available. So when + we load the thread library, make sure to check the entire list. */ + +static void +thread_db_look_up_symbols (void) +{ + struct thread_db *thread_db = current_process ()->priv->thread_db; + const char **sym_list; + CORE_ADDR unused; + + for (sym_list = thread_db->td_symbol_list_p (); *sym_list; sym_list++) + look_up_one_symbol (*sym_list, &unused, 1); + + /* We're not interested in any other libraries loaded after this + point, only in symbols in libpthread.so. */ + thread_db->all_symbols_looked_up = 1; +} + +int +thread_db_look_up_one_symbol (const char *name, CORE_ADDR *addrp) +{ + struct thread_db *thread_db = current_process ()->priv->thread_db; + int may_ask_gdb = !thread_db->all_symbols_looked_up; + + /* If we've passed the call to thread_db_look_up_symbols, then + anything not in the cache must not exist; we're not interested + in any libraries loaded after that point, only in symbols in + libpthread.so. It might not be an appropriate time to look + up a symbol, e.g. while we're trying to fetch registers. */ + return look_up_one_symbol (name, addrp, may_ask_gdb); +} + +int +thread_db_get_tls_address (struct thread_info *thread, CORE_ADDR offset, + CORE_ADDR load_module, CORE_ADDR *address) +{ + psaddr_t addr; + td_err_e err; + struct lwp_info *lwp; + struct thread_info *saved_thread; + struct process_info *proc; + struct thread_db *thread_db; + + proc = get_thread_process (thread); + thread_db = proc->priv->thread_db; + + /* If the thread layer is not (yet) initialized, fail. */ + if (thread_db == NULL || !thread_db->all_symbols_looked_up) + return TD_ERR; + + /* If td_thr_tls_get_addr is missing rather do not expect td_thr_tlsbase + could work. */ + if (thread_db->td_thr_tls_get_addr_p == NULL + || (load_module == 0 && thread_db->td_thr_tlsbase_p == NULL)) + return -1; + + lwp = get_thread_lwp (thread); + if (!lwp->thread_known) + find_one_thread (thread->id); + if (!lwp->thread_known) + return TD_NOTHR; + + saved_thread = current_thread; + current_thread = thread; + + if (load_module != 0) + { + /* Note the cast through uintptr_t: this interface only works if + a target address fits in a psaddr_t, which is a host pointer. + So a 32-bit debugger can not access 64-bit TLS through this. */ + err = thread_db->td_thr_tls_get_addr_p (&lwp->th, + (psaddr_t) (uintptr_t) load_module, + offset, &addr); + } + else + { + /* This code path handles the case of -static -pthread executables: + https://sourceware.org/ml/libc-help/2014-03/msg00024.html + For older GNU libc r_debug.r_map is NULL. For GNU libc after + PR libc/16831 due to GDB PR threads/16954 LOAD_MODULE is also NULL. + The constant number 1 depends on GNU __libc_setup_tls + initialization of l_tls_modid to 1. */ + err = thread_db->td_thr_tlsbase_p (&lwp->th, 1, &addr); + addr = (char *) addr + offset; + } + + current_thread = saved_thread; + if (err == TD_OK) + { + *address = (CORE_ADDR) (uintptr_t) addr; + return 0; + } + else + return err; +} + +/* See linux-low.h. */ + +bool +thread_db_thread_handle (ptid_t ptid, gdb_byte **handle, int *handle_len) +{ + struct thread_db *thread_db; + struct lwp_info *lwp; + thread_info *thread = find_thread_ptid (ptid); + + if (thread == NULL) + return false; + + thread_db = get_thread_process (thread)->priv->thread_db; + + if (thread_db == NULL) + return false; + + lwp = get_thread_lwp (thread); + + if (!lwp->thread_known && !find_one_thread (thread->id)) + return false; + + gdb_assert (lwp->thread_known); + + *handle = (gdb_byte *) &lwp->thread_handle; + *handle_len = sizeof (lwp->thread_handle); + return true; +} + +#ifdef USE_LIBTHREAD_DB_DIRECTLY + +static int +thread_db_load_search (void) +{ + td_err_e err; + struct thread_db *tdb; + struct process_info *proc = current_process (); + + gdb_assert (proc->priv->thread_db == NULL); + + tdb = XCNEW (struct thread_db); + proc->priv->thread_db = tdb; + + tdb->td_ta_new_p = &td_ta_new; + + /* Attempt to open a connection to the thread library. */ + err = tdb->td_ta_new_p (&tdb->proc_handle, &tdb->thread_agent); + if (err != TD_OK) + { + if (debug_threads) + debug_printf ("td_ta_new(): %s\n", thread_db_err_str (err)); + free (tdb); + proc->priv->thread_db = NULL; + return 0; + } + + tdb->td_ta_map_lwp2thr_p = &td_ta_map_lwp2thr; + tdb->td_thr_get_info_p = &td_thr_get_info; + tdb->td_ta_thr_iter_p = &td_ta_thr_iter; + tdb->td_symbol_list_p = &td_symbol_list; + + /* These are not essential. */ + tdb->td_thr_tls_get_addr_p = &td_thr_tls_get_addr; + tdb->td_thr_tlsbase_p = &td_thr_tlsbase; + + return 1; +} + +#else + +static int +try_thread_db_load_1 (void *handle) +{ + td_err_e err; + struct thread_db *tdb; + struct process_info *proc = current_process (); + + gdb_assert (proc->priv->thread_db == NULL); + + tdb = XCNEW (struct thread_db); + proc->priv->thread_db = tdb; + + tdb->handle = handle; + + /* Initialize pointers to the dynamic library functions we will use. + Essential functions first. */ + +#define CHK(required, a) \ + do \ + { \ + if ((a) == NULL) \ + { \ + if (debug_threads) \ + debug_printf ("dlsym: %s\n", dlerror ()); \ + if (required) \ + { \ + free (tdb); \ + proc->priv->thread_db = NULL; \ + return 0; \ + } \ + } \ + } \ + while (0) + +#define TDB_DLSYM(tdb, func) \ + tdb->func ## _p = (func ## _ftype *) dlsym (tdb->handle, #func) + + CHK (1, TDB_DLSYM (tdb, td_ta_new)); + + /* Attempt to open a connection to the thread library. */ + err = tdb->td_ta_new_p (&tdb->proc_handle, &tdb->thread_agent); + if (err != TD_OK) + { + if (debug_threads) + debug_printf ("td_ta_new(): %s\n", thread_db_err_str (err)); + free (tdb); + proc->priv->thread_db = NULL; + return 0; + } + + CHK (1, TDB_DLSYM (tdb, td_ta_map_lwp2thr)); + CHK (1, TDB_DLSYM (tdb, td_thr_get_info)); + CHK (1, TDB_DLSYM (tdb, td_ta_thr_iter)); + CHK (1, TDB_DLSYM (tdb, td_symbol_list)); + + /* These are not essential. */ + CHK (0, TDB_DLSYM (tdb, td_thr_tls_get_addr)); + CHK (0, TDB_DLSYM (tdb, td_thr_tlsbase)); + +#undef CHK +#undef TDB_DLSYM + + return 1; +} + +#ifdef HAVE_DLADDR + +/* Lookup a library in which given symbol resides. + Note: this is looking in the GDBSERVER process, not in the inferior. + Returns library name, or NULL. */ + +static const char * +dladdr_to_soname (const void *addr) +{ + Dl_info info; + + if (dladdr (addr, &info) != 0) + return info.dli_fname; + return NULL; +} + +#endif + +static int +try_thread_db_load (const char *library) +{ + void *handle; + + if (debug_threads) + debug_printf ("Trying host libthread_db library: %s.\n", + library); + handle = dlopen (library, RTLD_NOW); + if (handle == NULL) + { + if (debug_threads) + debug_printf ("dlopen failed: %s.\n", dlerror ()); + return 0; + } + +#ifdef HAVE_DLADDR + if (debug_threads && strchr (library, '/') == NULL) + { + void *td_init; + + td_init = dlsym (handle, "td_init"); + if (td_init != NULL) + { + const char *const libpath = dladdr_to_soname (td_init); + + if (libpath != NULL) + debug_printf ("Host %s resolved to: %s.\n", library, libpath); + } + } +#endif + + if (try_thread_db_load_1 (handle)) + return 1; + + /* This library "refused" to work on current inferior. */ + dlclose (handle); + return 0; +} + +/* Handle $sdir in libthread-db-search-path. + Look for libthread_db in the system dirs, or wherever a plain + dlopen(file_without_path) will look. + The result is true for success. */ + +static int +try_thread_db_load_from_sdir (void) +{ + return try_thread_db_load (LIBTHREAD_DB_SO); +} + +/* Try to load libthread_db from directory DIR of length DIR_LEN. + The result is true for success. */ + +static int +try_thread_db_load_from_dir (const char *dir, size_t dir_len) +{ + char path[PATH_MAX]; + + if (dir_len + 1 + strlen (LIBTHREAD_DB_SO) + 1 > sizeof (path)) + { + char *cp = (char *) xmalloc (dir_len + 1); + + memcpy (cp, dir, dir_len); + cp[dir_len] = '\0'; + warning (_("libthread-db-search-path component too long," + " ignored: %s."), cp); + free (cp); + return 0; + } + + memcpy (path, dir, dir_len); + path[dir_len] = '/'; + strcpy (path + dir_len + 1, LIBTHREAD_DB_SO); + return try_thread_db_load (path); +} + +/* Search libthread_db_search_path for libthread_db which "agrees" + to work on current inferior. + The result is true for success. */ + +static int +thread_db_load_search (void) +{ + int rc = 0; + + if (libthread_db_search_path == NULL) + libthread_db_search_path = xstrdup (LIBTHREAD_DB_SEARCH_PATH); + + std::vector<gdb::unique_xmalloc_ptr<char>> dir_vec + = dirnames_to_char_ptr_vec (libthread_db_search_path); + + for (const gdb::unique_xmalloc_ptr<char> &this_dir_up : dir_vec) + { + char *this_dir = this_dir_up.get (); + const int pdir_len = sizeof ("$pdir") - 1; + size_t this_dir_len; + + this_dir_len = strlen (this_dir); + + if (strncmp (this_dir, "$pdir", pdir_len) == 0 + && (this_dir[pdir_len] == '\0' + || this_dir[pdir_len] == '/')) + { + /* We don't maintain a list of loaded libraries so we don't know + where libpthread lives. We *could* fetch the info, but we don't + do that yet. Ignore it. */ + } + else if (strcmp (this_dir, "$sdir") == 0) + { + if (try_thread_db_load_from_sdir ()) + { + rc = 1; + break; + } + } + else + { + if (try_thread_db_load_from_dir (this_dir, this_dir_len)) + { + rc = 1; + break; + } + } + } + + if (debug_threads) + debug_printf ("thread_db_load_search returning %d\n", rc); + return rc; +} + +#endif /* USE_LIBTHREAD_DB_DIRECTLY */ + +int +thread_db_init (void) +{ + struct process_info *proc = current_process (); + + /* FIXME drow/2004-10-16: This is the "overall process ID", which + GNU/Linux calls tgid, "thread group ID". When we support + attaching to threads, the original thread may not be the correct + thread. We would have to get the process ID from /proc for NPTL. + + This isn't the only place in gdbserver that assumes that the first + process in the list is the thread group leader. */ + + if (thread_db_load_search ()) + { + /* It's best to avoid td_ta_thr_iter if possible. That walks + data structures in the inferior's address space that may be + corrupted, or, if the target is running, the list may change + while we walk it. In the latter case, it's possible that a + thread exits just at the exact time that causes GDBserver to + get stuck in an infinite loop. As the kernel supports clone + events and /proc/PID/task/ exists, then we already know about + all threads in the process. When we need info out of + thread_db on a given thread (e.g., for TLS), we'll use + find_one_thread then. That uses thread_db entry points that + do not walk libpthread's thread list, so should be safe, as + well as more efficient. */ + if (!linux_proc_task_list_dir_exists (pid_of (proc))) + thread_db_find_new_threads (); + thread_db_look_up_symbols (); + return 1; + } + + return 0; +} + +/* Disconnect from libthread_db and free resources. */ + +static void +disable_thread_event_reporting (struct process_info *proc) +{ + struct thread_db *thread_db = proc->priv->thread_db; + if (thread_db) + { + td_err_e (*td_ta_clear_event_p) (const td_thragent_t *ta, + td_thr_events_t *event); + +#ifndef USE_LIBTHREAD_DB_DIRECTLY + td_ta_clear_event_p + = (td_ta_clear_event_ftype *) dlsym (thread_db->handle, + "td_ta_clear_event"); +#else + td_ta_clear_event_p = &td_ta_clear_event; +#endif + + if (td_ta_clear_event_p != NULL) + { + struct thread_info *saved_thread = current_thread; + td_thr_events_t events; + + switch_to_process (proc); + + /* Set the process wide mask saying we aren't interested + in any events anymore. */ + td_event_fillset (&events); + (*td_ta_clear_event_p) (thread_db->thread_agent, &events); + + current_thread = saved_thread; + } + } +} + +void +thread_db_detach (struct process_info *proc) +{ + struct thread_db *thread_db = proc->priv->thread_db; + + if (thread_db) + { + disable_thread_event_reporting (proc); + } +} + +/* Disconnect from libthread_db and free resources. */ + +void +thread_db_mourn (struct process_info *proc) +{ + struct thread_db *thread_db = proc->priv->thread_db; + if (thread_db) + { + td_ta_delete_ftype *td_ta_delete_p; + +#ifndef USE_LIBTHREAD_DB_DIRECTLY + td_ta_delete_p = (td_ta_delete_ftype *) dlsym (thread_db->handle, "td_ta_delete"); +#else + td_ta_delete_p = &td_ta_delete; +#endif + + if (td_ta_delete_p != NULL) + (*td_ta_delete_p) (thread_db->thread_agent); + +#ifndef USE_LIBTHREAD_DB_DIRECTLY + dlclose (thread_db->handle); +#endif /* USE_LIBTHREAD_DB_DIRECTLY */ + + free (thread_db); + proc->priv->thread_db = NULL; + } +} + +/* Handle "set libthread-db-search-path" monitor command and return 1. + For any other command, return 0. */ + +int +thread_db_handle_monitor_command (char *mon) +{ + const char *cmd = "set libthread-db-search-path"; + size_t cmd_len = strlen (cmd); + + if (strncmp (mon, cmd, cmd_len) == 0 + && (mon[cmd_len] == '\0' + || mon[cmd_len] == ' ')) + { + const char *cp = mon + cmd_len; + + if (libthread_db_search_path != NULL) + free (libthread_db_search_path); + + /* Skip leading space (if any). */ + while (isspace (*cp)) + ++cp; + + if (*cp == '\0') + cp = LIBTHREAD_DB_SEARCH_PATH; + libthread_db_search_path = xstrdup (cp); + + monitor_output ("libthread-db-search-path set to `"); + monitor_output (libthread_db_search_path); + monitor_output ("'\n"); + return 1; + } + + /* Tell server.c to perform default processing. */ + return 0; +} + +/* See linux-low.h. */ + +void +thread_db_notice_clone (struct thread_info *parent_thr, ptid_t child_ptid) +{ + process_info *parent_proc = get_thread_process (parent_thr); + struct thread_db *thread_db = parent_proc->priv->thread_db; + + /* If the thread layer isn't initialized, return. It may just + be that the program uses clone, but does not use libthread_db. */ + if (thread_db == NULL || !thread_db->all_symbols_looked_up) + return; + + /* find_one_thread calls into libthread_db which accesses memory via + the current thread. Temporarily switch to a thread we know is + stopped. */ + scoped_restore restore_current_thread + = make_scoped_restore (¤t_thread, parent_thr); + + if (!find_one_thread (child_ptid)) + warning ("Cannot find thread after clone."); +} diff -Nru gdb-9.1/gdbserver/tracepoint.cc gdb-10.2/gdbserver/tracepoint.cc --- gdb-9.1/gdbserver/tracepoint.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/tracepoint.cc 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,7467 @@ +/* Tracepoint code for remote server for GDB. + Copyright (C) 2009-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "server.h" +#include "tracepoint.h" +#include "gdbthread.h" +#include "gdbsupport/rsp-low.h" + +#include <ctype.h> +#include <fcntl.h> +#include <unistd.h> +#include <chrono> +#include <inttypes.h> +#include "ax.h" +#include "tdesc.h" + +#define IPA_SYM_STRUCT_NAME ipa_sym_addresses +#include "gdbsupport/agent.h" + +#define DEFAULT_TRACE_BUFFER_SIZE 5242880 /* 5*1024*1024 */ + +/* This file is built for both GDBserver, and the in-process + agent (IPA), a shared library that includes a tracing agent that is + loaded by the inferior to support fast tracepoints. Fast + tracepoints (or more accurately, jump based tracepoints) are + implemented by patching the tracepoint location with a jump into a + small trampoline function whose job is to save the register state, + call the in-process tracing agent, and then execute the original + instruction that was under the tracepoint jump (possibly adjusted, + if PC-relative, or some such). + + The current synchronization design is pull based. That means, + GDBserver does most of the work, by peeking/poking at the inferior + agent's memory directly for downloading tracepoint and associated + objects, and for uploading trace frames. Whenever the IPA needs + something from GDBserver (trace buffer is full, tracing stopped for + some reason, etc.) the IPA calls a corresponding hook function + where GDBserver has placed a breakpoint. + + Each of the agents has its own trace buffer. When browsing the + trace frames built from slow and fast tracepoints from GDB (tfind + mode), there's no guarantee the user is seeing the trace frames in + strict chronological creation order, although, GDBserver tries to + keep the order relatively reasonable, by syncing the trace buffers + at appropriate times. + +*/ + +#ifdef IN_PROCESS_AGENT + +static void trace_vdebug (const char *, ...) ATTRIBUTE_PRINTF (1, 2); + +static void +trace_vdebug (const char *fmt, ...) +{ + char buf[1024]; + va_list ap; + + va_start (ap, fmt); + vsprintf (buf, fmt, ap); + fprintf (stderr, PROG "/tracepoint: %s\n", buf); + va_end (ap); +} + +#define trace_debug_1(level, fmt, args...) \ + do { \ + if (level <= debug_threads) \ + trace_vdebug ((fmt), ##args); \ + } while (0) + +#else + +#define trace_debug_1(level, fmt, args...) \ + do { \ + if (level <= debug_threads) \ + { \ + debug_printf ((fmt), ##args); \ + debug_printf ("\n"); \ + } \ + } while (0) + +#endif + +#define trace_debug(FMT, args...) \ + trace_debug_1 (1, FMT, ##args) + +/* Prefix exported symbols, for good citizenship. All the symbols + that need exporting are defined in this module. Note that all + these symbols must be tagged with IP_AGENT_EXPORT_*. */ +#ifdef IN_PROCESS_AGENT +# define gdb_tp_heap_buffer IPA_SYM_EXPORTED_NAME (gdb_tp_heap_buffer) +# define gdb_jump_pad_buffer IPA_SYM_EXPORTED_NAME (gdb_jump_pad_buffer) +# define gdb_jump_pad_buffer_end IPA_SYM_EXPORTED_NAME (gdb_jump_pad_buffer_end) +# define gdb_trampoline_buffer IPA_SYM_EXPORTED_NAME (gdb_trampoline_buffer) +# define gdb_trampoline_buffer_end IPA_SYM_EXPORTED_NAME (gdb_trampoline_buffer_end) +# define gdb_trampoline_buffer_error IPA_SYM_EXPORTED_NAME (gdb_trampoline_buffer_error) +# define collecting IPA_SYM_EXPORTED_NAME (collecting) +# define gdb_collect_ptr IPA_SYM_EXPORTED_NAME (gdb_collect_ptr) +# define stop_tracing IPA_SYM_EXPORTED_NAME (stop_tracing) +# define flush_trace_buffer IPA_SYM_EXPORTED_NAME (flush_trace_buffer) +# define about_to_request_buffer_space IPA_SYM_EXPORTED_NAME (about_to_request_buffer_space) +# define trace_buffer_is_full IPA_SYM_EXPORTED_NAME (trace_buffer_is_full) +# define stopping_tracepoint IPA_SYM_EXPORTED_NAME (stopping_tracepoint) +# define expr_eval_result IPA_SYM_EXPORTED_NAME (expr_eval_result) +# define error_tracepoint IPA_SYM_EXPORTED_NAME (error_tracepoint) +# define tracepoints IPA_SYM_EXPORTED_NAME (tracepoints) +# define tracing IPA_SYM_EXPORTED_NAME (tracing) +# define trace_buffer_ctrl IPA_SYM_EXPORTED_NAME (trace_buffer_ctrl) +# define trace_buffer_ctrl_curr IPA_SYM_EXPORTED_NAME (trace_buffer_ctrl_curr) +# define trace_buffer_lo IPA_SYM_EXPORTED_NAME (trace_buffer_lo) +# define trace_buffer_hi IPA_SYM_EXPORTED_NAME (trace_buffer_hi) +# define traceframe_read_count IPA_SYM_EXPORTED_NAME (traceframe_read_count) +# define traceframe_write_count IPA_SYM_EXPORTED_NAME (traceframe_write_count) +# define traceframes_created IPA_SYM_EXPORTED_NAME (traceframes_created) +# define trace_state_variables IPA_SYM_EXPORTED_NAME (trace_state_variables) +# define get_raw_reg_ptr IPA_SYM_EXPORTED_NAME (get_raw_reg_ptr) +# define get_trace_state_variable_value_ptr \ + IPA_SYM_EXPORTED_NAME (get_trace_state_variable_value_ptr) +# define set_trace_state_variable_value_ptr \ + IPA_SYM_EXPORTED_NAME (set_trace_state_variable_value_ptr) +# define ust_loaded IPA_SYM_EXPORTED_NAME (ust_loaded) +# define helper_thread_id IPA_SYM_EXPORTED_NAME (helper_thread_id) +# define cmd_buf IPA_SYM_EXPORTED_NAME (cmd_buf) +# define ipa_tdesc_idx IPA_SYM_EXPORTED_NAME (ipa_tdesc_idx) +#endif + +#ifndef IN_PROCESS_AGENT + +/* Addresses of in-process agent's symbols GDBserver cares about. */ + +struct ipa_sym_addresses +{ + CORE_ADDR addr_gdb_tp_heap_buffer; + CORE_ADDR addr_gdb_jump_pad_buffer; + CORE_ADDR addr_gdb_jump_pad_buffer_end; + CORE_ADDR addr_gdb_trampoline_buffer; + CORE_ADDR addr_gdb_trampoline_buffer_end; + CORE_ADDR addr_gdb_trampoline_buffer_error; + CORE_ADDR addr_collecting; + CORE_ADDR addr_gdb_collect_ptr; + CORE_ADDR addr_stop_tracing; + CORE_ADDR addr_flush_trace_buffer; + CORE_ADDR addr_about_to_request_buffer_space; + CORE_ADDR addr_trace_buffer_is_full; + CORE_ADDR addr_stopping_tracepoint; + CORE_ADDR addr_expr_eval_result; + CORE_ADDR addr_error_tracepoint; + CORE_ADDR addr_tracepoints; + CORE_ADDR addr_tracing; + CORE_ADDR addr_trace_buffer_ctrl; + CORE_ADDR addr_trace_buffer_ctrl_curr; + CORE_ADDR addr_trace_buffer_lo; + CORE_ADDR addr_trace_buffer_hi; + CORE_ADDR addr_traceframe_read_count; + CORE_ADDR addr_traceframe_write_count; + CORE_ADDR addr_traceframes_created; + CORE_ADDR addr_trace_state_variables; + CORE_ADDR addr_get_raw_reg_ptr; + CORE_ADDR addr_get_trace_state_variable_value_ptr; + CORE_ADDR addr_set_trace_state_variable_value_ptr; + CORE_ADDR addr_ust_loaded; + CORE_ADDR addr_ipa_tdesc_idx; +}; + +static struct +{ + const char *name; + int offset; +} symbol_list[] = { + IPA_SYM(gdb_tp_heap_buffer), + IPA_SYM(gdb_jump_pad_buffer), + IPA_SYM(gdb_jump_pad_buffer_end), + IPA_SYM(gdb_trampoline_buffer), + IPA_SYM(gdb_trampoline_buffer_end), + IPA_SYM(gdb_trampoline_buffer_error), + IPA_SYM(collecting), + IPA_SYM(gdb_collect_ptr), + IPA_SYM(stop_tracing), + IPA_SYM(flush_trace_buffer), + IPA_SYM(about_to_request_buffer_space), + IPA_SYM(trace_buffer_is_full), + IPA_SYM(stopping_tracepoint), + IPA_SYM(expr_eval_result), + IPA_SYM(error_tracepoint), + IPA_SYM(tracepoints), + IPA_SYM(tracing), + IPA_SYM(trace_buffer_ctrl), + IPA_SYM(trace_buffer_ctrl_curr), + IPA_SYM(trace_buffer_lo), + IPA_SYM(trace_buffer_hi), + IPA_SYM(traceframe_read_count), + IPA_SYM(traceframe_write_count), + IPA_SYM(traceframes_created), + IPA_SYM(trace_state_variables), + IPA_SYM(get_raw_reg_ptr), + IPA_SYM(get_trace_state_variable_value_ptr), + IPA_SYM(set_trace_state_variable_value_ptr), + IPA_SYM(ust_loaded), + IPA_SYM(ipa_tdesc_idx), +}; + +static struct ipa_sym_addresses ipa_sym_addrs; + +static int read_inferior_integer (CORE_ADDR symaddr, int *val); + +/* Returns true if both the in-process agent library and the static + tracepoints libraries are loaded in the inferior, and agent has + capability on static tracepoints. */ + +static int +in_process_agent_supports_ust (void) +{ + int loaded = 0; + + if (!agent_loaded_p ()) + { + warning ("In-process agent not loaded"); + return 0; + } + + if (agent_capability_check (AGENT_CAPA_STATIC_TRACE)) + { + /* Agent understands static tracepoint, then check whether UST is in + fact loaded in the inferior. */ + if (read_inferior_integer (ipa_sym_addrs.addr_ust_loaded, &loaded)) + { + warning ("Error reading ust_loaded in lib"); + return 0; + } + + return loaded; + } + else + return 0; +} + +static void +write_e_ipa_not_loaded (char *buffer) +{ + sprintf (buffer, + "E.In-process agent library not loaded in process. " + "Fast and static tracepoints unavailable."); +} + +/* Write an error to BUFFER indicating that UST isn't loaded in the + inferior. */ + +static void +write_e_ust_not_loaded (char *buffer) +{ +#ifdef HAVE_UST + sprintf (buffer, + "E.UST library not loaded in process. " + "Static tracepoints unavailable."); +#else + sprintf (buffer, "E.GDBserver was built without static tracepoints support"); +#endif +} + +/* If the in-process agent library isn't loaded in the inferior, write + an error to BUFFER, and return 1. Otherwise, return 0. */ + +static int +maybe_write_ipa_not_loaded (char *buffer) +{ + if (!agent_loaded_p ()) + { + write_e_ipa_not_loaded (buffer); + return 1; + } + return 0; +} + +/* If the in-process agent library and the ust (static tracepoints) + library aren't loaded in the inferior, write an error to BUFFER, + and return 1. Otherwise, return 0. */ + +static int +maybe_write_ipa_ust_not_loaded (char *buffer) +{ + if (!agent_loaded_p ()) + { + write_e_ipa_not_loaded (buffer); + return 1; + } + else if (!in_process_agent_supports_ust ()) + { + write_e_ust_not_loaded (buffer); + return 1; + } + return 0; +} + +/* Cache all future symbols that the tracepoints module might request. + We can not request symbols at arbitrary states in the remote + protocol, only when the client tells us that new symbols are + available. So when we load the in-process library, make sure to + check the entire list. */ + +void +tracepoint_look_up_symbols (void) +{ + int i; + + if (agent_loaded_p ()) + return; + + for (i = 0; i < sizeof (symbol_list) / sizeof (symbol_list[0]); i++) + { + CORE_ADDR *addrp = + (CORE_ADDR *) ((char *) &ipa_sym_addrs + symbol_list[i].offset); + + if (look_up_one_symbol (symbol_list[i].name, addrp, 1) == 0) + { + if (debug_threads) + debug_printf ("symbol `%s' not found\n", symbol_list[i].name); + return; + } + } + + agent_look_up_symbols (NULL); +} + +#endif + +/* GDBserver places a breakpoint on the IPA's version (which is a nop) + of the "stop_tracing" function. When this breakpoint is hit, + tracing stopped in the IPA for some reason. E.g., due to + tracepoint reaching the pass count, hitting conditional expression + evaluation error, etc. + + The IPA's trace buffer is never in circular tracing mode: instead, + GDBserver's is, and whenever the in-process buffer fills, it calls + "flush_trace_buffer", which triggers an internal breakpoint. + GDBserver reacts to this breakpoint by pulling the meanwhile + collected data. Old frames discarding is always handled on the + GDBserver side. */ + +#ifdef IN_PROCESS_AGENT +int +read_inferior_memory (CORE_ADDR memaddr, unsigned char *myaddr, int len) +{ + memcpy (myaddr, (void *) (uintptr_t) memaddr, len); + return 0; +} + +/* Call this in the functions where GDBserver places a breakpoint, so + that the compiler doesn't try to be clever and skip calling the + function at all. This is necessary, even if we tell the compiler + to not inline said functions. */ + +#if defined(__GNUC__) +# define UNKNOWN_SIDE_EFFECTS() asm ("") +#else +# define UNKNOWN_SIDE_EFFECTS() do {} while (0) +#endif + +/* This is needed for -Wmissing-declarations. */ +IP_AGENT_EXPORT_FUNC void stop_tracing (void); + +IP_AGENT_EXPORT_FUNC void +stop_tracing (void) +{ + /* GDBserver places breakpoint here. */ + UNKNOWN_SIDE_EFFECTS(); +} + +/* This is needed for -Wmissing-declarations. */ +IP_AGENT_EXPORT_FUNC void flush_trace_buffer (void); + +IP_AGENT_EXPORT_FUNC void +flush_trace_buffer (void) +{ + /* GDBserver places breakpoint here. */ + UNKNOWN_SIDE_EFFECTS(); +} + +#endif + +#ifndef IN_PROCESS_AGENT +static int +tracepoint_handler (CORE_ADDR address) +{ + trace_debug ("tracepoint_handler: tracepoint at 0x%s hit", + paddress (address)); + return 0; +} + +/* Breakpoint at "stop_tracing" in the inferior lib. */ +struct breakpoint *stop_tracing_bkpt; +static int stop_tracing_handler (CORE_ADDR); + +/* Breakpoint at "flush_trace_buffer" in the inferior lib. */ +struct breakpoint *flush_trace_buffer_bkpt; +static int flush_trace_buffer_handler (CORE_ADDR); + +static void download_trace_state_variables (void); +static void upload_fast_traceframes (void); + +static int run_inferior_command (char *cmd, int len); + +static int +read_inferior_integer (CORE_ADDR symaddr, int *val) +{ + return read_inferior_memory (symaddr, (unsigned char *) val, + sizeof (*val)); +} + +struct tracepoint; +static int tracepoint_send_agent (struct tracepoint *tpoint); + +static int +read_inferior_uinteger (CORE_ADDR symaddr, unsigned int *val) +{ + return read_inferior_memory (symaddr, (unsigned char *) val, + sizeof (*val)); +} + +static int +read_inferior_data_pointer (CORE_ADDR symaddr, CORE_ADDR *val) +{ + void *pval = (void *) (uintptr_t) val; + int ret; + + ret = read_inferior_memory (symaddr, (unsigned char *) &pval, sizeof (pval)); + *val = (uintptr_t) pval; + return ret; +} + +static int +write_inferior_data_pointer (CORE_ADDR symaddr, CORE_ADDR val) +{ + void *pval = (void *) (uintptr_t) val; + return target_write_memory (symaddr, + (unsigned char *) &pval, sizeof (pval)); +} + +static int +write_inferior_integer (CORE_ADDR symaddr, int val) +{ + return target_write_memory (symaddr, (unsigned char *) &val, sizeof (val)); +} + +static int +write_inferior_int8 (CORE_ADDR symaddr, int8_t val) +{ + return target_write_memory (symaddr, (unsigned char *) &val, sizeof (val)); +} + +static int +write_inferior_uinteger (CORE_ADDR symaddr, unsigned int val) +{ + return target_write_memory (symaddr, (unsigned char *) &val, sizeof (val)); +} + +static CORE_ADDR target_malloc (ULONGEST size); + +#define COPY_FIELD_TO_BUF(BUF, OBJ, FIELD) \ + do { \ + memcpy (BUF, &(OBJ)->FIELD, sizeof ((OBJ)->FIELD)); \ + BUF += sizeof ((OBJ)->FIELD); \ + } while (0) + +#endif + +/* Base action. Concrete actions inherit this. */ + +struct tracepoint_action +{ + char type; +}; + +/* An 'M' (collect memory) action. */ +struct collect_memory_action +{ + struct tracepoint_action base; + + ULONGEST addr; + ULONGEST len; + int32_t basereg; +}; + +/* An 'R' (collect registers) action. */ + +struct collect_registers_action +{ + struct tracepoint_action base; +}; + +/* An 'X' (evaluate expression) action. */ + +struct eval_expr_action +{ + struct tracepoint_action base; + + struct agent_expr *expr; +}; + +/* An 'L' (collect static trace data) action. */ +struct collect_static_trace_data_action +{ + struct tracepoint_action base; +}; + +#ifndef IN_PROCESS_AGENT +static CORE_ADDR +m_tracepoint_action_download (const struct tracepoint_action *action) +{ + CORE_ADDR ipa_action = target_malloc (sizeof (struct collect_memory_action)); + + target_write_memory (ipa_action, (unsigned char *) action, + sizeof (struct collect_memory_action)); + + return ipa_action; +} +static char * +m_tracepoint_action_send (char *buffer, const struct tracepoint_action *action) +{ + struct collect_memory_action *maction + = (struct collect_memory_action *) action; + + COPY_FIELD_TO_BUF (buffer, maction, addr); + COPY_FIELD_TO_BUF (buffer, maction, len); + COPY_FIELD_TO_BUF (buffer, maction, basereg); + + return buffer; +} + +static CORE_ADDR +r_tracepoint_action_download (const struct tracepoint_action *action) +{ + CORE_ADDR ipa_action = target_malloc (sizeof (struct collect_registers_action)); + + target_write_memory (ipa_action, (unsigned char *) action, + sizeof (struct collect_registers_action)); + + return ipa_action; +} + +static char * +r_tracepoint_action_send (char *buffer, const struct tracepoint_action *action) +{ + return buffer; +} + +static CORE_ADDR download_agent_expr (struct agent_expr *expr); + +static CORE_ADDR +x_tracepoint_action_download (const struct tracepoint_action *action) +{ + CORE_ADDR ipa_action = target_malloc (sizeof (struct eval_expr_action)); + CORE_ADDR expr; + + target_write_memory (ipa_action, (unsigned char *) action, + sizeof (struct eval_expr_action)); + expr = download_agent_expr (((struct eval_expr_action *) action)->expr); + write_inferior_data_pointer (ipa_action + + offsetof (struct eval_expr_action, expr), + expr); + + return ipa_action; +} + +/* Copy agent expression AEXPR to buffer pointed by P. If AEXPR is NULL, + copy 0 to P. Return updated header of buffer. */ + +static char * +agent_expr_send (char *p, const struct agent_expr *aexpr) +{ + /* Copy the length of condition first, and then copy its + content. */ + if (aexpr == NULL) + { + memset (p, 0, 4); + p += 4; + } + else + { + memcpy (p, &aexpr->length, 4); + p +=4; + + memcpy (p, aexpr->bytes, aexpr->length); + p += aexpr->length; + } + return p; +} + +static char * +x_tracepoint_action_send ( char *buffer, const struct tracepoint_action *action) +{ + struct eval_expr_action *eaction = (struct eval_expr_action *) action; + + return agent_expr_send (buffer, eaction->expr); +} + +static CORE_ADDR +l_tracepoint_action_download (const struct tracepoint_action *action) +{ + CORE_ADDR ipa_action + = target_malloc (sizeof (struct collect_static_trace_data_action)); + + target_write_memory (ipa_action, (unsigned char *) action, + sizeof (struct collect_static_trace_data_action)); + + return ipa_action; +} + +static char * +l_tracepoint_action_send (char *buffer, const struct tracepoint_action *action) +{ + return buffer; +} + +static char * +tracepoint_action_send (char *buffer, const struct tracepoint_action *action) +{ + switch (action->type) + { + case 'M': + return m_tracepoint_action_send (buffer, action); + case 'R': + return r_tracepoint_action_send (buffer, action); + case 'X': + return x_tracepoint_action_send (buffer, action); + case 'L': + return l_tracepoint_action_send (buffer, action); + } + error ("Unknown trace action '%c'.", action->type); +} + +static CORE_ADDR +tracepoint_action_download (const struct tracepoint_action *action) +{ + switch (action->type) + { + case 'M': + return m_tracepoint_action_download (action); + case 'R': + return r_tracepoint_action_download (action); + case 'X': + return x_tracepoint_action_download (action); + case 'L': + return l_tracepoint_action_download (action); + } + error ("Unknown trace action '%c'.", action->type); +} +#endif + +/* This structure describes a piece of the source-level definition of + the tracepoint. The contents are not interpreted by the target, + but preserved verbatim for uploading upon reconnection. */ + +struct source_string +{ + /* The type of string, such as "cond" for a conditional. */ + char *type; + + /* The source-level string itself. For the sake of target + debugging, we store it in plaintext, even though it is always + transmitted in hex. */ + char *str; + + /* Link to the next one in the list. We link them in the order + received, in case some make up an ordered list of commands or + some such. */ + struct source_string *next; +}; + +enum tracepoint_type +{ + /* Trap based tracepoint. */ + trap_tracepoint, + + /* A fast tracepoint implemented with a jump instead of a trap. */ + fast_tracepoint, + + /* A static tracepoint, implemented by a program call into a tracing + library. */ + static_tracepoint +}; + +struct tracepoint_hit_ctx; + +typedef enum eval_result_type (*condfn) (unsigned char *, + ULONGEST *); + +/* The definition of a tracepoint. */ + +/* Tracepoints may have multiple locations, each at a different + address. This can occur with optimizations, template + instantiation, etc. Since the locations may be in different + scopes, the conditions and actions may be different for each + location. Our target version of tracepoints is more like GDB's + notion of "breakpoint locations", but we have almost nothing that + is not per-location, so we bother having two kinds of objects. The + key consequence is that numbers are not unique, and that it takes + both number and address to identify a tracepoint uniquely. */ + +struct tracepoint +{ + /* The number of the tracepoint, as specified by GDB. Several + tracepoint objects here may share a number. */ + uint32_t number; + + /* Address at which the tracepoint is supposed to trigger. Several + tracepoints may share an address. */ + CORE_ADDR address; + + /* Tracepoint type. */ + enum tracepoint_type type; + + /* True if the tracepoint is currently enabled. */ + int8_t enabled; + + /* The number of single steps that will be performed after each + tracepoint hit. */ + uint64_t step_count; + + /* The number of times the tracepoint may be hit before it will + terminate the entire tracing run. */ + uint64_t pass_count; + + /* Pointer to the agent expression that is the tracepoint's + conditional, or NULL if the tracepoint is unconditional. */ + struct agent_expr *cond; + + /* The list of actions to take when the tracepoint triggers. */ + uint32_t numactions; + struct tracepoint_action **actions; + + /* Count of the times we've hit this tracepoint during the run. + Note that while-stepping steps are not counted as "hits". */ + uint64_t hit_count; + + /* Cached sum of the sizes of traceframes created by this point. */ + uint64_t traceframe_usage; + + CORE_ADDR compiled_cond; + + /* Link to the next tracepoint in the list. */ + struct tracepoint *next; + +#ifndef IN_PROCESS_AGENT + /* The list of actions to take when the tracepoint triggers, in + string/packet form. */ + char **actions_str; + + /* The collection of strings that describe the tracepoint as it was + entered into GDB. These are not used by the target, but are + reported back to GDB upon reconnection. */ + struct source_string *source_strings; + + /* The number of bytes displaced by fast tracepoints. It may subsume + multiple instructions, for multi-byte fast tracepoints. This + field is only valid for fast tracepoints. */ + uint32_t orig_size; + + /* Only for fast tracepoints. */ + CORE_ADDR obj_addr_on_target; + + /* Address range where the original instruction under a fast + tracepoint was relocated to. (_end is actually one byte past + the end). */ + CORE_ADDR adjusted_insn_addr; + CORE_ADDR adjusted_insn_addr_end; + + /* The address range of the piece of the jump pad buffer that was + assigned to this fast tracepoint. (_end is actually one byte + past the end).*/ + CORE_ADDR jump_pad; + CORE_ADDR jump_pad_end; + + /* The address range of the piece of the trampoline buffer that was + assigned to this fast tracepoint. (_end is actually one byte + past the end). */ + CORE_ADDR trampoline; + CORE_ADDR trampoline_end; + + /* The list of actions to take while in a stepping loop. These + fields are only valid for patch-based tracepoints. */ + int num_step_actions; + struct tracepoint_action **step_actions; + /* Same, but in string/packet form. */ + char **step_actions_str; + + /* Handle returned by the breakpoint or tracepoint module when we + inserted the trap or jump, or hooked into a static tracepoint. + NULL if we haven't inserted it yet. */ + void *handle; +#endif + +}; + +#ifndef IN_PROCESS_AGENT + +/* Given `while-stepping', a thread may be collecting data for more + than one tracepoint simultaneously. On the other hand, the same + tracepoint with a while-stepping action may be hit by more than one + thread simultaneously (but not quite, each thread could be handling + a different step). Each thread holds a list of these objects, + representing the current step of each while-stepping action being + collected. */ + +struct wstep_state +{ + struct wstep_state *next; + + /* The tracepoint number. */ + int tp_number; + /* The tracepoint's address. */ + CORE_ADDR tp_address; + + /* The number of the current step in this 'while-stepping' + action. */ + long current_step; +}; + +#endif + +EXTERN_C_PUSH + +/* The linked list of all tracepoints. Marked explicitly as used as + the in-process library doesn't use it for the fast tracepoints + support. */ +IP_AGENT_EXPORT_VAR struct tracepoint *tracepoints; + +/* The first tracepoint to exceed its pass count. */ + +IP_AGENT_EXPORT_VAR struct tracepoint *stopping_tracepoint; + +/* True if the trace buffer is full or otherwise no longer usable. */ + +IP_AGENT_EXPORT_VAR int trace_buffer_is_full; + +/* The first error that occurred during expression evaluation. */ + +/* Stored as an int to avoid the IPA ABI being dependent on whatever + the compiler decides to use for the enum's underlying type. Holds + enum eval_result_type values. */ +IP_AGENT_EXPORT_VAR int expr_eval_result = expr_eval_no_error; + +EXTERN_C_POP + +#ifndef IN_PROCESS_AGENT + +/* Pointer to the last tracepoint in the list, new tracepoints are + linked in at the end. */ + +static struct tracepoint *last_tracepoint; + +static const char *eval_result_names[] = + { + "terror:in the attic", /* this should never be reported */ + "terror:empty expression", + "terror:empty stack", + "terror:stack overflow", + "terror:stack underflow", + "terror:unhandled opcode", + "terror:unrecognized opcode", + "terror:divide by zero" + }; + +#endif + +/* The tracepoint in which the error occurred. */ + +EXTERN_C_PUSH +IP_AGENT_EXPORT_VAR struct tracepoint *error_tracepoint; +EXTERN_C_POP + +struct trace_state_variable +{ + /* This is the name of the variable as used in GDB. The target + doesn't use the name, but needs to have it for saving and + reconnection purposes. */ + char *name; + + /* This number identifies the variable uniquely. Numbers may be + assigned either by the target (in the case of builtin variables), + or by GDB, and are presumed unique during the course of a trace + experiment. */ + int number; + + /* The variable's initial value, a 64-bit signed integer always. */ + LONGEST initial_value; + + /* The variable's value, a 64-bit signed integer always. */ + LONGEST value; + + /* Pointer to a getter function, used to supply computed values. */ + LONGEST (*getter) (void); + + /* Link to the next variable. */ + struct trace_state_variable *next; +}; + +/* Linked list of all trace state variables. */ + +#ifdef IN_PROCESS_AGENT +struct trace_state_variable *alloced_trace_state_variables; +#endif + +IP_AGENT_EXPORT_VAR struct trace_state_variable *trace_state_variables; + +/* The results of tracing go into a fixed-size space known as the + "trace buffer". Because usage follows a limited number of + patterns, we manage it ourselves rather than with malloc. Basic + rules are that we create only one trace frame at a time, each is + variable in size, they are never moved once created, and we only + discard if we are doing a circular buffer, and then only the oldest + ones. Each trace frame includes its own size, so we don't need to + link them together, and the trace frame number is relative to the + first one, so we don't need to record numbers. A trace frame also + records the number of the tracepoint that created it. The data + itself is a series of blocks, each introduced by a single character + and with a defined format. Each type of block has enough + type/length info to allow scanners to jump quickly from one block + to the next without reading each byte in the block. */ + +/* Trace buffer management would be simple - advance a free pointer + from beginning to end, then stop - were it not for the circular + buffer option, which is a useful way to prevent a trace run from + stopping prematurely because the buffer filled up. In the circular + case, the location of the first trace frame (trace_buffer_start) + moves as old trace frames are discarded. Also, since we grow trace + frames incrementally as actions are performed, we wrap around to + the beginning of the trace buffer. This is per-block, so each + block within a trace frame remains contiguous. Things get messy + when the wrapped-around trace frame is the one being discarded; the + free space ends up in two parts at opposite ends of the buffer. */ + +#ifndef ATTR_PACKED +# if defined(__GNUC__) +# define ATTR_PACKED __attribute__ ((packed)) +# else +# define ATTR_PACKED /* nothing */ +# endif +#endif + +/* The data collected at a tracepoint hit. This object should be as + small as possible, since there may be a great many of them. We do + not need to keep a frame number, because they are all sequential + and there are no deletions; so the Nth frame in the buffer is + always frame number N. */ + +struct traceframe +{ + /* Number of the tracepoint that collected this traceframe. A value + of 0 indicates the current end of the trace buffer. We make this + a 16-bit field because it's never going to happen that GDB's + numbering of tracepoints reaches 32,000. */ + int tpnum : 16; + + /* The size of the data in this trace frame. We limit this to 32 + bits, even on a 64-bit target, because it's just implausible that + one is validly going to collect 4 gigabytes of data at a single + tracepoint hit. */ + unsigned int data_size : 32; + + /* The base of the trace data, which is contiguous from this point. */ + unsigned char data[0]; + +} ATTR_PACKED; + +/* The size of the EOB marker, in bytes. A traceframe with zeroed + fields (and no data) marks the end of trace data. */ +#define TRACEFRAME_EOB_MARKER_SIZE offsetof (struct traceframe, data) + +/* This flag is true if the trace buffer is circular, meaning that + when it fills, the oldest trace frames are discarded in order to + make room. */ + +#ifndef IN_PROCESS_AGENT +static int circular_trace_buffer; +#endif + +/* Size of the trace buffer. */ + +static LONGEST trace_buffer_size; + +EXTERN_C_PUSH + +/* Pointer to the block of memory that traceframes all go into. */ + +IP_AGENT_EXPORT_VAR unsigned char *trace_buffer_lo; + +/* Pointer to the end of the trace buffer, more precisely to the byte + after the end of the buffer. */ + +IP_AGENT_EXPORT_VAR unsigned char *trace_buffer_hi; + +EXTERN_C_POP + +/* Control structure holding the read/write/etc. pointers into the + trace buffer. We need more than one of these to implement a + transaction-like mechanism to guarantees that both GDBserver and the + in-process agent can try to change the trace buffer + simultaneously. */ + +struct trace_buffer_control +{ + /* Pointer to the first trace frame in the buffer. In the + non-circular case, this is equal to trace_buffer_lo, otherwise it + moves around in the buffer. */ + unsigned char *start; + + /* Pointer to the free part of the trace buffer. Note that we clear + several bytes at and after this pointer, so that traceframe + scans/searches terminate properly. */ + unsigned char *free; + + /* Pointer to the byte after the end of the free part. Note that + this may be smaller than trace_buffer_free in the circular case, + and means that the free part is in two pieces. Initially it is + equal to trace_buffer_hi, then is generally equivalent to + trace_buffer_start. */ + unsigned char *end_free; + + /* Pointer to the wraparound. If not equal to trace_buffer_hi, then + this is the point at which the trace data breaks, and resumes at + trace_buffer_lo. */ + unsigned char *wrap; +}; + +/* Same as above, to be used by GDBserver when updating the in-process + agent. */ +struct ipa_trace_buffer_control +{ + uintptr_t start; + uintptr_t free; + uintptr_t end_free; + uintptr_t wrap; +}; + + +/* We have possibly both GDBserver and an inferior thread accessing + the same IPA trace buffer memory. The IPA is the producer (tries + to put new frames in the buffer), while GDBserver occasionally + consumes them, that is, flushes the IPA's buffer into its own + buffer. Both sides need to update the trace buffer control + pointers (current head, tail, etc.). We can't use a global lock to + synchronize the accesses, as otherwise we could deadlock GDBserver + (if the thread holding the lock stops for a signal, say). So + instead of that, we use a transaction scheme where GDBserver writes + always prevail over the IPAs writes, and, we have the IPA detect + the commit failure/overwrite, and retry the whole attempt. This is + mainly implemented by having a global token object that represents + who wrote last to the buffer control structure. We need to freeze + any inferior writing to the buffer while GDBserver touches memory, + so that the inferior can correctly detect that GDBserver had been + there, otherwise, it could mistakingly think its commit was + successful; that's implemented by simply having GDBserver set a + breakpoint the inferior hits if it is the critical region. + + There are three cycling trace buffer control structure copies + (buffer head, tail, etc.), with the token object including an index + indicating which is current live copy. The IPA tentatively builds + an updated copy in a non-current control structure, while GDBserver + always clobbers the current version directly. The IPA then tries + to atomically "commit" its version; if GDBserver clobbered the + structure meanwhile, that will fail, and the IPA restarts the + allocation process. + + Listing the step in further detail, we have: + + In-process agent (producer): + + - passes by `about_to_request_buffer_space' breakpoint/lock + + - reads current token, extracts current trace buffer control index, + and starts tentatively updating the rightmost one (0->1, 1->2, + 2->0). Note that only one inferior thread is executing this code + at any given time, due to an outer lock in the jump pads. + + - updates counters, and tries to commit the token. + + - passes by second `about_to_request_buffer_space' breakpoint/lock, + leaving the sync region. + + - checks if the update was effective. + + - if trace buffer was found full, hits flush_trace_buffer + breakpoint, and restarts later afterwards. + + GDBserver (consumer): + + - sets `about_to_request_buffer_space' breakpoint/lock. + + - updates the token unconditionally, using the current buffer + control index, since it knows that the IP agent always writes to + the rightmost, and due to the breakpoint, at most one IP thread + can try to update the trace buffer concurrently to GDBserver, so + there will be no danger of trace buffer control index wrap making + the IPA write to the same index as GDBserver. + + - flushes the IP agent's trace buffer completely, and updates the + current trace buffer control structure. GDBserver *always* wins. + + - removes the `about_to_request_buffer_space' breakpoint. + +The token is stored in the `trace_buffer_ctrl_curr' variable. +Internally, it's bits are defined as: + + |-------------+-----+-------------+--------+-------------+--------------| + | Bit offsets | 31 | 30 - 20 | 19 | 18-8 | 7-0 | + |-------------+-----+-------------+--------+-------------+--------------| + | What | GSB | PC (11-bit) | unused | CC (11-bit) | TBCI (8-bit) | + |-------------+-----+-------------+--------+-------------+--------------| + + GSB - GDBserver Stamp Bit + PC - Previous Counter + CC - Current Counter + TBCI - Trace Buffer Control Index + + +An IPA update of `trace_buffer_ctrl_curr' does: + + - read CC from the current token, save as PC. + - updates pointers + - atomically tries to write PC+1,CC + +A GDBserver update of `trace_buffer_ctrl_curr' does: + + - reads PC and CC from the current token. + - updates pointers + - writes GSB,PC,CC +*/ + +/* These are the bits of `trace_buffer_ctrl_curr' that are reserved + for the counters described below. The cleared bits are used to + hold the index of the items of the `trace_buffer_ctrl' array that + is "current". */ +#define GDBSERVER_FLUSH_COUNT_MASK 0xfffffff0 + +/* `trace_buffer_ctrl_curr' contains two counters. The `previous' + counter, and the `current' counter. */ + +#define GDBSERVER_FLUSH_COUNT_MASK_PREV 0x7ff00000 +#define GDBSERVER_FLUSH_COUNT_MASK_CURR 0x0007ff00 + +/* When GDBserver update the IP agent's `trace_buffer_ctrl_curr', it + always stamps this bit as set. */ +#define GDBSERVER_UPDATED_FLUSH_COUNT_BIT 0x80000000 + +#ifdef IN_PROCESS_AGENT +IP_AGENT_EXPORT_VAR struct trace_buffer_control trace_buffer_ctrl[3]; +IP_AGENT_EXPORT_VAR unsigned int trace_buffer_ctrl_curr; + +# define TRACE_BUFFER_CTRL_CURR \ + (trace_buffer_ctrl_curr & ~GDBSERVER_FLUSH_COUNT_MASK) + +#else + +/* The GDBserver side agent only needs one instance of this object, as + it doesn't need to sync with itself. Define it as array anyway so + that the rest of the code base doesn't need to care for the + difference. */ +struct trace_buffer_control trace_buffer_ctrl[1]; +# define TRACE_BUFFER_CTRL_CURR 0 +#endif + +/* These are convenience macros used to access the current trace + buffer control in effect. */ +#define trace_buffer_start (trace_buffer_ctrl[TRACE_BUFFER_CTRL_CURR].start) +#define trace_buffer_free (trace_buffer_ctrl[TRACE_BUFFER_CTRL_CURR].free) +#define trace_buffer_end_free \ + (trace_buffer_ctrl[TRACE_BUFFER_CTRL_CURR].end_free) +#define trace_buffer_wrap (trace_buffer_ctrl[TRACE_BUFFER_CTRL_CURR].wrap) + + +/* Macro that returns a pointer to the first traceframe in the buffer. */ + +#define FIRST_TRACEFRAME() ((struct traceframe *) trace_buffer_start) + +/* Macro that returns a pointer to the next traceframe in the buffer. + If the computed location is beyond the wraparound point, subtract + the offset of the wraparound. */ + +#define NEXT_TRACEFRAME_1(TF) \ + (((unsigned char *) (TF)) + sizeof (struct traceframe) + (TF)->data_size) + +#define NEXT_TRACEFRAME(TF) \ + ((struct traceframe *) (NEXT_TRACEFRAME_1 (TF) \ + - ((NEXT_TRACEFRAME_1 (TF) >= trace_buffer_wrap) \ + ? (trace_buffer_wrap - trace_buffer_lo) \ + : 0))) + +/* The difference between these counters represents the total number + of complete traceframes present in the trace buffer. The IP agent + writes to the write count, GDBserver writes to read count. */ + +IP_AGENT_EXPORT_VAR unsigned int traceframe_write_count; +IP_AGENT_EXPORT_VAR unsigned int traceframe_read_count; + +/* Convenience macro. */ + +#define traceframe_count \ + ((unsigned int) (traceframe_write_count - traceframe_read_count)) + +/* The count of all traceframes created in the current run, including + ones that were discarded to make room. */ + +IP_AGENT_EXPORT_VAR int traceframes_created; + +#ifndef IN_PROCESS_AGENT + +/* Read-only regions are address ranges whose contents don't change, + and so can be read from target memory even while looking at a trace + frame. Without these, disassembly for instance will likely fail, + because the program code is not usually collected into a trace + frame. This data structure does not need to be very complicated or + particularly efficient, it's only going to be used occasionally, + and only by some commands. */ + +struct readonly_region +{ + /* The bounds of the region. */ + CORE_ADDR start, end; + + /* Link to the next one. */ + struct readonly_region *next; +}; + +/* Linked list of readonly regions. This list stays in effect from + one tstart to the next. */ + +static struct readonly_region *readonly_regions; + +#endif + +/* The global that controls tracing overall. */ + +IP_AGENT_EXPORT_VAR int tracing; + +#ifndef IN_PROCESS_AGENT + +/* Controls whether tracing should continue after GDB disconnects. */ + +int disconnected_tracing; + +/* The reason for the last tracing run to have stopped. We initialize + to a distinct string so that GDB can distinguish between "stopped + after running" and "stopped because never run" cases. */ + +static const char *tracing_stop_reason = "tnotrun"; + +static int tracing_stop_tpnum; + +/* 64-bit timestamps for the trace run's start and finish, expressed + in microseconds from the Unix epoch. */ + +LONGEST tracing_start_time; +LONGEST tracing_stop_time; + +/* The (optional) user-supplied name of the user that started the run. + This is an arbitrary string, and may be NULL. */ + +char *tracing_user_name; + +/* Optional user-supplied text describing the run. This is + an arbitrary string, and may be NULL. */ + +char *tracing_notes; + +/* Optional user-supplied text explaining a tstop command. This is an + arbitrary string, and may be NULL. */ + +char *tracing_stop_note; + +#endif + +/* Functions local to this file. */ + +/* Base "class" for tracepoint type specific data to be passed down to + collect_data_at_tracepoint. */ +struct tracepoint_hit_ctx +{ + enum tracepoint_type type; +}; + +#ifdef IN_PROCESS_AGENT + +/* Fast/jump tracepoint specific data to be passed down to + collect_data_at_tracepoint. */ +struct fast_tracepoint_ctx +{ + struct tracepoint_hit_ctx base; + + struct regcache regcache; + int regcache_initted; + unsigned char *regspace; + + unsigned char *regs; + struct tracepoint *tpoint; +}; + +/* Static tracepoint specific data to be passed down to + collect_data_at_tracepoint. */ +struct static_tracepoint_ctx +{ + struct tracepoint_hit_ctx base; + + /* The regcache corresponding to the registers state at the time of + the tracepoint hit. Initialized lazily, from REGS. */ + struct regcache regcache; + int regcache_initted; + + /* The buffer space REGCACHE above uses. We use a separate buffer + instead of letting the regcache malloc for both signal safety and + performance reasons; this is allocated on the stack instead. */ + unsigned char *regspace; + + /* The register buffer as passed on by lttng/ust. */ + struct registers *regs; + + /* The "printf" formatter and the args the user passed to the marker + call. We use this to be able to collect "static trace data" + ($_sdata). */ + const char *fmt; + va_list *args; + + /* The GDB tracepoint matching the probed marker that was "hit". */ + struct tracepoint *tpoint; +}; + +#else + +/* Static tracepoint specific data to be passed down to + collect_data_at_tracepoint. */ +struct trap_tracepoint_ctx +{ + struct tracepoint_hit_ctx base; + + struct regcache *regcache; +}; + +#endif + +#ifndef IN_PROCESS_AGENT +static CORE_ADDR traceframe_get_pc (struct traceframe *tframe); +static int traceframe_read_tsv (int num, LONGEST *val); +#endif + +static int condition_true_at_tracepoint (struct tracepoint_hit_ctx *ctx, + struct tracepoint *tpoint); + +#ifndef IN_PROCESS_AGENT +static void clear_readonly_regions (void); +static void clear_installed_tracepoints (void); +#endif + +static void collect_data_at_tracepoint (struct tracepoint_hit_ctx *ctx, + CORE_ADDR stop_pc, + struct tracepoint *tpoint); +#ifndef IN_PROCESS_AGENT +static void collect_data_at_step (struct tracepoint_hit_ctx *ctx, + CORE_ADDR stop_pc, + struct tracepoint *tpoint, int current_step); +static void compile_tracepoint_condition (struct tracepoint *tpoint, + CORE_ADDR *jump_entry); +#endif +static void do_action_at_tracepoint (struct tracepoint_hit_ctx *ctx, + CORE_ADDR stop_pc, + struct tracepoint *tpoint, + struct traceframe *tframe, + struct tracepoint_action *taction); + +#ifndef IN_PROCESS_AGENT +static struct tracepoint *fast_tracepoint_from_ipa_tpoint_address (CORE_ADDR); + +static void install_tracepoint (struct tracepoint *, char *own_buf); +static void download_tracepoint (struct tracepoint *); +static int install_fast_tracepoint (struct tracepoint *, char *errbuf); +static void clone_fast_tracepoint (struct tracepoint *to, + const struct tracepoint *from); +#endif + +static LONGEST get_timestamp (void); + +#if defined(__GNUC__) +# define memory_barrier() asm volatile ("" : : : "memory") +#else +# define memory_barrier() do {} while (0) +#endif + +/* We only build the IPA if this builtin is supported, and there are + no uses of this in GDBserver itself, so we're safe in defining this + unconditionally. */ +#define cmpxchg(mem, oldval, newval) \ + __sync_val_compare_and_swap (mem, oldval, newval) + +/* Record that an error occurred during expression evaluation. */ + +static void +record_tracepoint_error (struct tracepoint *tpoint, const char *which, + enum eval_result_type rtype) +{ + trace_debug ("Tracepoint %d at %s %s eval reports error %d", + tpoint->number, paddress (tpoint->address), which, rtype); + +#ifdef IN_PROCESS_AGENT + /* Only record the first error we get. */ + if (cmpxchg (&expr_eval_result, + expr_eval_no_error, + rtype) != expr_eval_no_error) + return; +#else + if (expr_eval_result != expr_eval_no_error) + return; +#endif + + error_tracepoint = tpoint; +} + +/* Trace buffer management. */ + +static void +clear_trace_buffer (void) +{ + trace_buffer_start = trace_buffer_lo; + trace_buffer_free = trace_buffer_lo; + trace_buffer_end_free = trace_buffer_hi; + trace_buffer_wrap = trace_buffer_hi; + /* A traceframe with zeroed fields marks the end of trace data. */ + ((struct traceframe *) trace_buffer_free)->tpnum = 0; + ((struct traceframe *) trace_buffer_free)->data_size = 0; + traceframe_read_count = traceframe_write_count = 0; + traceframes_created = 0; +} + +#ifndef IN_PROCESS_AGENT + +static void +clear_inferior_trace_buffer (void) +{ + CORE_ADDR ipa_trace_buffer_lo; + CORE_ADDR ipa_trace_buffer_hi; + struct traceframe ipa_traceframe = { 0 }; + struct ipa_trace_buffer_control ipa_trace_buffer_ctrl; + + read_inferior_data_pointer (ipa_sym_addrs.addr_trace_buffer_lo, + &ipa_trace_buffer_lo); + read_inferior_data_pointer (ipa_sym_addrs.addr_trace_buffer_hi, + &ipa_trace_buffer_hi); + + ipa_trace_buffer_ctrl.start = ipa_trace_buffer_lo; + ipa_trace_buffer_ctrl.free = ipa_trace_buffer_lo; + ipa_trace_buffer_ctrl.end_free = ipa_trace_buffer_hi; + ipa_trace_buffer_ctrl.wrap = ipa_trace_buffer_hi; + + /* A traceframe with zeroed fields marks the end of trace data. */ + target_write_memory (ipa_sym_addrs.addr_trace_buffer_ctrl, + (unsigned char *) &ipa_trace_buffer_ctrl, + sizeof (ipa_trace_buffer_ctrl)); + + write_inferior_uinteger (ipa_sym_addrs.addr_trace_buffer_ctrl_curr, 0); + + /* A traceframe with zeroed fields marks the end of trace data. */ + target_write_memory (ipa_trace_buffer_lo, + (unsigned char *) &ipa_traceframe, + sizeof (ipa_traceframe)); + + write_inferior_uinteger (ipa_sym_addrs.addr_traceframe_write_count, 0); + write_inferior_uinteger (ipa_sym_addrs.addr_traceframe_read_count, 0); + write_inferior_integer (ipa_sym_addrs.addr_traceframes_created, 0); +} + +#endif + +static void +init_trace_buffer (LONGEST bufsize) +{ + size_t alloc_size; + + trace_buffer_size = bufsize; + + /* Make sure to internally allocate at least space for the EOB + marker. */ + alloc_size = (bufsize < TRACEFRAME_EOB_MARKER_SIZE + ? TRACEFRAME_EOB_MARKER_SIZE : bufsize); + trace_buffer_lo = (unsigned char *) xrealloc (trace_buffer_lo, alloc_size); + + trace_buffer_hi = trace_buffer_lo + trace_buffer_size; + + clear_trace_buffer (); +} + +#ifdef IN_PROCESS_AGENT + +/* This is needed for -Wmissing-declarations. */ +IP_AGENT_EXPORT_FUNC void about_to_request_buffer_space (void); + +IP_AGENT_EXPORT_FUNC void +about_to_request_buffer_space (void) +{ + /* GDBserver places breakpoint here while it goes about to flush + data at random times. */ + UNKNOWN_SIDE_EFFECTS(); +} + +#endif + +/* Carve out a piece of the trace buffer, returning NULL in case of + failure. */ + +static void * +trace_buffer_alloc (size_t amt) +{ + unsigned char *rslt; + struct trace_buffer_control *tbctrl; + unsigned int curr; +#ifdef IN_PROCESS_AGENT + unsigned int prev, prev_filtered; + unsigned int commit_count; + unsigned int commit; + unsigned int readout; +#else + struct traceframe *oldest; + unsigned char *new_start; +#endif + + trace_debug ("Want to allocate %ld+%ld bytes in trace buffer", + (long) amt, (long) sizeof (struct traceframe)); + + /* Account for the EOB marker. */ + amt += TRACEFRAME_EOB_MARKER_SIZE; + +#ifdef IN_PROCESS_AGENT + again: + memory_barrier (); + + /* Read the current token and extract the index to try to write to, + storing it in CURR. */ + prev = trace_buffer_ctrl_curr; + prev_filtered = prev & ~GDBSERVER_FLUSH_COUNT_MASK; + curr = prev_filtered + 1; + if (curr > 2) + curr = 0; + + about_to_request_buffer_space (); + + /* Start out with a copy of the current state. GDBserver may be + midway writing to the PREV_FILTERED TBC, but, that's OK, we won't + be able to commit anyway if that happens. */ + trace_buffer_ctrl[curr] + = trace_buffer_ctrl[prev_filtered]; + trace_debug ("trying curr=%u", curr); +#else + /* The GDBserver's agent doesn't need all that syncing, and always + updates TCB 0 (there's only one, mind you). */ + curr = 0; +#endif + tbctrl = &trace_buffer_ctrl[curr]; + + /* Offsets are easier to grok for debugging than raw addresses, + especially for the small trace buffer sizes that are useful for + testing. */ + trace_debug ("Trace buffer [%d] start=%d free=%d endfree=%d wrap=%d hi=%d", + curr, + (int) (tbctrl->start - trace_buffer_lo), + (int) (tbctrl->free - trace_buffer_lo), + (int) (tbctrl->end_free - trace_buffer_lo), + (int) (tbctrl->wrap - trace_buffer_lo), + (int) (trace_buffer_hi - trace_buffer_lo)); + + /* The algorithm here is to keep trying to get a contiguous block of + the requested size, possibly discarding older traceframes to free + up space. Since free space might come in one or two pieces, + depending on whether discarded traceframes wrapped around at the + high end of the buffer, we test both pieces after each + discard. */ + while (1) + { + /* First, if we have two free parts, try the upper one first. */ + if (tbctrl->end_free < tbctrl->free) + { + if (tbctrl->free + amt <= trace_buffer_hi) + /* We have enough in the upper part. */ + break; + else + { + /* Our high part of free space wasn't enough. Give up + on it for now, set wraparound. We will recover the + space later, if/when the wrapped-around traceframe is + discarded. */ + trace_debug ("Upper part too small, setting wraparound"); + tbctrl->wrap = tbctrl->free; + tbctrl->free = trace_buffer_lo; + } + } + + /* The normal case. */ + if (tbctrl->free + amt <= tbctrl->end_free) + break; + +#ifdef IN_PROCESS_AGENT + /* The IP Agent's buffer is always circular. It isn't used + currently, but `circular_trace_buffer' could represent + GDBserver's mode. If we didn't find space, ask GDBserver to + flush. */ + + flush_trace_buffer (); + memory_barrier (); + if (tracing) + { + trace_debug ("gdbserver flushed buffer, retrying"); + goto again; + } + + /* GDBserver cancelled the tracing. Bail out as well. */ + return NULL; +#else + /* If we're here, then neither part is big enough, and + non-circular trace buffers are now full. */ + if (!circular_trace_buffer) + { + trace_debug ("Not enough space in the trace buffer"); + return NULL; + } + + trace_debug ("Need more space in the trace buffer"); + + /* If we have a circular buffer, we can try discarding the + oldest traceframe and see if that helps. */ + oldest = FIRST_TRACEFRAME (); + if (oldest->tpnum == 0) + { + /* Not good; we have no traceframes to free. Perhaps we're + asking for a block that is larger than the buffer? In + any case, give up. */ + trace_debug ("No traceframes to discard"); + return NULL; + } + + /* We don't run this code in the in-process agent currently. + E.g., we could leave the in-process agent in autonomous + circular mode if we only have fast tracepoints. If we do + that, then this bit becomes racy with GDBserver, which also + writes to this counter. */ + --traceframe_write_count; + + new_start = (unsigned char *) NEXT_TRACEFRAME (oldest); + /* If we freed the traceframe that wrapped around, go back + to the non-wrap case. */ + if (new_start < tbctrl->start) + { + trace_debug ("Discarding past the wraparound"); + tbctrl->wrap = trace_buffer_hi; + } + tbctrl->start = new_start; + tbctrl->end_free = tbctrl->start; + + trace_debug ("Discarded a traceframe\n" + "Trace buffer [%d], start=%d free=%d " + "endfree=%d wrap=%d hi=%d", + curr, + (int) (tbctrl->start - trace_buffer_lo), + (int) (tbctrl->free - trace_buffer_lo), + (int) (tbctrl->end_free - trace_buffer_lo), + (int) (tbctrl->wrap - trace_buffer_lo), + (int) (trace_buffer_hi - trace_buffer_lo)); + + /* Now go back around the loop. The discard might have resulted + in either one or two pieces of free space, so we want to try + both before freeing any more traceframes. */ +#endif + } + + /* If we get here, we know we can provide the asked-for space. */ + + rslt = tbctrl->free; + + /* Adjust the request back down, now that we know we have space for + the marker, but don't commit to AMT yet, we may still need to + restart the operation if GDBserver touches the trace buffer + (obviously only important in the in-process agent's version). */ + tbctrl->free += (amt - sizeof (struct traceframe)); + + /* Or not. If GDBserver changed the trace buffer behind our back, + we get to restart a new allocation attempt. */ + +#ifdef IN_PROCESS_AGENT + /* Build the tentative token. */ + commit_count = (((prev & GDBSERVER_FLUSH_COUNT_MASK_CURR) + 0x100) + & GDBSERVER_FLUSH_COUNT_MASK_CURR); + commit = (((prev & GDBSERVER_FLUSH_COUNT_MASK_CURR) << 12) + | commit_count + | curr); + + /* Try to commit it. */ + readout = cmpxchg (&trace_buffer_ctrl_curr, prev, commit); + if (readout != prev) + { + trace_debug ("GDBserver has touched the trace buffer, restarting." + " (prev=%08x, commit=%08x, readout=%08x)", + prev, commit, readout); + goto again; + } + + /* Hold your horses here. Even if that change was committed, + GDBserver could come in, and clobber it. We need to hold to be + able to tell if GDBserver clobbers before or after we committed + the change. Whenever GDBserver goes about touching the IPA + buffer, it sets a breakpoint in this routine, so we have a sync + point here. */ + about_to_request_buffer_space (); + + /* Check if the change has been effective, even if GDBserver stopped + us at the breakpoint. */ + + { + unsigned int refetch; + + memory_barrier (); + + refetch = trace_buffer_ctrl_curr; + + if (refetch == commit + || ((refetch & GDBSERVER_FLUSH_COUNT_MASK_PREV) >> 12) == commit_count) + { + /* effective */ + trace_debug ("change is effective: (prev=%08x, commit=%08x, " + "readout=%08x, refetch=%08x)", + prev, commit, readout, refetch); + } + else + { + trace_debug ("GDBserver has touched the trace buffer, not effective." + " (prev=%08x, commit=%08x, readout=%08x, refetch=%08x)", + prev, commit, readout, refetch); + goto again; + } + } +#endif + + /* We have a new piece of the trace buffer. Hurray! */ + + /* Add an EOB marker just past this allocation. */ + ((struct traceframe *) tbctrl->free)->tpnum = 0; + ((struct traceframe *) tbctrl->free)->data_size = 0; + + /* Adjust the request back down, now that we know we have space for + the marker. */ + amt -= sizeof (struct traceframe); + + if (debug_threads) + { + trace_debug ("Allocated %d bytes", (int) amt); + trace_debug ("Trace buffer [%d] start=%d free=%d " + "endfree=%d wrap=%d hi=%d", + curr, + (int) (tbctrl->start - trace_buffer_lo), + (int) (tbctrl->free - trace_buffer_lo), + (int) (tbctrl->end_free - trace_buffer_lo), + (int) (tbctrl->wrap - trace_buffer_lo), + (int) (trace_buffer_hi - trace_buffer_lo)); + } + + return rslt; +} + +#ifndef IN_PROCESS_AGENT + +/* Return the total free space. This is not necessarily the largest + block we can allocate, because of the two-part case. */ + +static int +free_space (void) +{ + if (trace_buffer_free <= trace_buffer_end_free) + return trace_buffer_end_free - trace_buffer_free; + else + return ((trace_buffer_end_free - trace_buffer_lo) + + (trace_buffer_hi - trace_buffer_free)); +} + +/* An 'S' in continuation packets indicates remainder are for + while-stepping. */ + +static int seen_step_action_flag; + +/* Create a tracepoint (location) with given number and address. Add this + new tracepoint to list and sort this list. */ + +static struct tracepoint * +add_tracepoint (int num, CORE_ADDR addr) +{ + struct tracepoint *tpoint, **tp_next; + + tpoint = XNEW (struct tracepoint); + tpoint->number = num; + tpoint->address = addr; + tpoint->numactions = 0; + tpoint->actions = NULL; + tpoint->actions_str = NULL; + tpoint->cond = NULL; + tpoint->num_step_actions = 0; + tpoint->step_actions = NULL; + tpoint->step_actions_str = NULL; + /* Start all off as regular (slow) tracepoints. */ + tpoint->type = trap_tracepoint; + tpoint->orig_size = -1; + tpoint->source_strings = NULL; + tpoint->compiled_cond = 0; + tpoint->handle = NULL; + tpoint->next = NULL; + + /* Find a place to insert this tracepoint into list in order to keep + the tracepoint list still in the ascending order. There may be + multiple tracepoints at the same address as TPOINT's, and this + guarantees TPOINT is inserted after all the tracepoints which are + set at the same address. For example, fast tracepoints A, B, C are + set at the same address, and D is to be insert at the same place as + well, + + -->| A |--> | B |-->| C |->... + + One jump pad was created for tracepoint A, B, and C, and the target + address of A is referenced/used in jump pad. So jump pad will let + inferior jump to A. If D is inserted in front of A, like this, + + -->| D |-->| A |--> | B |-->| C |->... + + without updating jump pad, D is not reachable during collect, which + is wrong. As we can see, the order of B, C and D doesn't matter, but + A should always be the `first' one. */ + for (tp_next = &tracepoints; + (*tp_next) != NULL && (*tp_next)->address <= tpoint->address; + tp_next = &(*tp_next)->next) + ; + tpoint->next = *tp_next; + *tp_next = tpoint; + last_tracepoint = tpoint; + + seen_step_action_flag = 0; + + return tpoint; +} + +#ifndef IN_PROCESS_AGENT + +/* Return the tracepoint with the given number and address, or NULL. */ + +static struct tracepoint * +find_tracepoint (int id, CORE_ADDR addr) +{ + struct tracepoint *tpoint; + + for (tpoint = tracepoints; tpoint; tpoint = tpoint->next) + if (tpoint->number == id && tpoint->address == addr) + return tpoint; + + return NULL; +} + +/* Remove TPOINT from global list. */ + +static void +remove_tracepoint (struct tracepoint *tpoint) +{ + struct tracepoint *tp, *tp_prev; + + for (tp = tracepoints, tp_prev = NULL; tp && tp != tpoint; + tp_prev = tp, tp = tp->next) + ; + + if (tp) + { + if (tp_prev) + tp_prev->next = tp->next; + else + tracepoints = tp->next; + + xfree (tp); + } +} + +/* There may be several tracepoints with the same number (because they + are "locations", in GDB parlance); return the next one after the + given tracepoint, or search from the beginning of the list if the + first argument is NULL. */ + +static struct tracepoint * +find_next_tracepoint_by_number (struct tracepoint *prev_tp, int num) +{ + struct tracepoint *tpoint; + + if (prev_tp) + tpoint = prev_tp->next; + else + tpoint = tracepoints; + for (; tpoint; tpoint = tpoint->next) + if (tpoint->number == num) + return tpoint; + + return NULL; +} + +#endif + +/* Append another action to perform when the tracepoint triggers. */ + +static void +add_tracepoint_action (struct tracepoint *tpoint, const char *packet) +{ + const char *act; + + if (*packet == 'S') + { + seen_step_action_flag = 1; + ++packet; + } + + act = packet; + + while (*act) + { + const char *act_start = act; + struct tracepoint_action *action = NULL; + + switch (*act) + { + case 'M': + { + struct collect_memory_action *maction = + XNEW (struct collect_memory_action); + ULONGEST basereg; + int is_neg; + + maction->base.type = *act; + action = &maction->base; + + ++act; + is_neg = (*act == '-'); + if (*act == '-') + ++act; + act = unpack_varlen_hex (act, &basereg); + ++act; + act = unpack_varlen_hex (act, &maction->addr); + ++act; + act = unpack_varlen_hex (act, &maction->len); + maction->basereg = (is_neg + ? - (int) basereg + : (int) basereg); + trace_debug ("Want to collect %s bytes at 0x%s (basereg %d)", + pulongest (maction->len), + paddress (maction->addr), maction->basereg); + break; + } + case 'R': + { + struct collect_registers_action *raction = + XNEW (struct collect_registers_action); + + raction->base.type = *act; + action = &raction->base; + + trace_debug ("Want to collect registers"); + ++act; + /* skip past hex digits of mask for now */ + while (isxdigit(*act)) + ++act; + break; + } + case 'L': + { + struct collect_static_trace_data_action *raction = + XNEW (struct collect_static_trace_data_action); + + raction->base.type = *act; + action = &raction->base; + + trace_debug ("Want to collect static trace data"); + ++act; + break; + } + case 'S': + trace_debug ("Unexpected step action, ignoring"); + ++act; + break; + case 'X': + { + struct eval_expr_action *xaction = XNEW (struct eval_expr_action); + + xaction->base.type = *act; + action = &xaction->base; + + trace_debug ("Want to evaluate expression"); + xaction->expr = gdb_parse_agent_expr (&act); + break; + } + default: + trace_debug ("unknown trace action '%c', ignoring...", *act); + break; + case '-': + break; + } + + if (action == NULL) + break; + + if (seen_step_action_flag) + { + tpoint->num_step_actions++; + + tpoint->step_actions + = XRESIZEVEC (struct tracepoint_action *, tpoint->step_actions, + tpoint->num_step_actions); + tpoint->step_actions_str + = XRESIZEVEC (char *, tpoint->step_actions_str, + tpoint->num_step_actions); + tpoint->step_actions[tpoint->num_step_actions - 1] = action; + tpoint->step_actions_str[tpoint->num_step_actions - 1] + = savestring (act_start, act - act_start); + } + else + { + tpoint->numactions++; + tpoint->actions + = XRESIZEVEC (struct tracepoint_action *, tpoint->actions, + tpoint->numactions); + tpoint->actions_str + = XRESIZEVEC (char *, tpoint->actions_str, tpoint->numactions); + tpoint->actions[tpoint->numactions - 1] = action; + tpoint->actions_str[tpoint->numactions - 1] + = savestring (act_start, act - act_start); + } + } +} + +#endif + +/* Find or create a trace state variable with the given number. */ + +static struct trace_state_variable * +get_trace_state_variable (int num) +{ + struct trace_state_variable *tsv; + +#ifdef IN_PROCESS_AGENT + /* Search for an existing variable. */ + for (tsv = alloced_trace_state_variables; tsv; tsv = tsv->next) + if (tsv->number == num) + return tsv; +#endif + + /* Search for an existing variable. */ + for (tsv = trace_state_variables; tsv; tsv = tsv->next) + if (tsv->number == num) + return tsv; + + return NULL; +} + +/* Find or create a trace state variable with the given number. */ + +static struct trace_state_variable * +create_trace_state_variable (int num, int gdb) +{ + struct trace_state_variable *tsv; + + tsv = get_trace_state_variable (num); + if (tsv != NULL) + return tsv; + + /* Create a new variable. */ + tsv = XNEW (struct trace_state_variable); + tsv->number = num; + tsv->initial_value = 0; + tsv->value = 0; + tsv->getter = NULL; + tsv->name = NULL; +#ifdef IN_PROCESS_AGENT + if (!gdb) + { + tsv->next = alloced_trace_state_variables; + alloced_trace_state_variables = tsv; + } + else +#endif + { + tsv->next = trace_state_variables; + trace_state_variables = tsv; + } + return tsv; +} + +/* This is needed for -Wmissing-declarations. */ +IP_AGENT_EXPORT_FUNC LONGEST get_trace_state_variable_value (int num); + +IP_AGENT_EXPORT_FUNC LONGEST +get_trace_state_variable_value (int num) +{ + struct trace_state_variable *tsv; + + tsv = get_trace_state_variable (num); + + if (!tsv) + { + trace_debug ("No trace state variable %d, skipping value get", num); + return 0; + } + + /* Call a getter function if we have one. While it's tempting to + set up something to only call the getter once per tracepoint hit, + it could run afoul of thread races. Better to let the getter + handle it directly, if necessary to worry about it. */ + if (tsv->getter) + tsv->value = (tsv->getter) (); + + trace_debug ("get_trace_state_variable_value(%d) ==> %s", + num, plongest (tsv->value)); + + return tsv->value; +} + +/* This is needed for -Wmissing-declarations. */ +IP_AGENT_EXPORT_FUNC void set_trace_state_variable_value (int num, + LONGEST val); + +IP_AGENT_EXPORT_FUNC void +set_trace_state_variable_value (int num, LONGEST val) +{ + struct trace_state_variable *tsv; + + tsv = get_trace_state_variable (num); + + if (!tsv) + { + trace_debug ("No trace state variable %d, skipping value set", num); + return; + } + + tsv->value = val; +} + +LONGEST +agent_get_trace_state_variable_value (int num) +{ + return get_trace_state_variable_value (num); +} + +void +agent_set_trace_state_variable_value (int num, LONGEST val) +{ + set_trace_state_variable_value (num, val); +} + +static void +set_trace_state_variable_name (int num, const char *name) +{ + struct trace_state_variable *tsv; + + tsv = get_trace_state_variable (num); + + if (!tsv) + { + trace_debug ("No trace state variable %d, skipping name set", num); + return; + } + + tsv->name = (char *) name; +} + +static void +set_trace_state_variable_getter (int num, LONGEST (*getter) (void)) +{ + struct trace_state_variable *tsv; + + tsv = get_trace_state_variable (num); + + if (!tsv) + { + trace_debug ("No trace state variable %d, skipping getter set", num); + return; + } + + tsv->getter = getter; +} + +/* Add a raw traceframe for the given tracepoint. */ + +static struct traceframe * +add_traceframe (struct tracepoint *tpoint) +{ + struct traceframe *tframe; + + tframe + = (struct traceframe *) trace_buffer_alloc (sizeof (struct traceframe)); + + if (tframe == NULL) + return NULL; + + tframe->tpnum = tpoint->number; + tframe->data_size = 0; + + return tframe; +} + +/* Add a block to the traceframe currently being worked on. */ + +static unsigned char * +add_traceframe_block (struct traceframe *tframe, + struct tracepoint *tpoint, int amt) +{ + unsigned char *block; + + if (!tframe) + return NULL; + + block = (unsigned char *) trace_buffer_alloc (amt); + + if (!block) + return NULL; + + gdb_assert (tframe->tpnum == tpoint->number); + + tframe->data_size += amt; + tpoint->traceframe_usage += amt; + + return block; +} + +/* Flag that the current traceframe is finished. */ + +static void +finish_traceframe (struct traceframe *tframe) +{ + ++traceframe_write_count; + ++traceframes_created; +} + +#ifndef IN_PROCESS_AGENT + +/* Given a traceframe number NUM, find the NUMth traceframe in the + buffer. */ + +static struct traceframe * +find_traceframe (int num) +{ + struct traceframe *tframe; + int tfnum = 0; + + for (tframe = FIRST_TRACEFRAME (); + tframe->tpnum != 0; + tframe = NEXT_TRACEFRAME (tframe)) + { + if (tfnum == num) + return tframe; + ++tfnum; + } + + return NULL; +} + +static CORE_ADDR +get_traceframe_address (struct traceframe *tframe) +{ + CORE_ADDR addr; + struct tracepoint *tpoint; + + addr = traceframe_get_pc (tframe); + + if (addr) + return addr; + + /* Fallback strategy, will be incorrect for while-stepping frames + and multi-location tracepoints. */ + tpoint = find_next_tracepoint_by_number (NULL, tframe->tpnum); + return tpoint->address; +} + +/* Search for the next traceframe whose address is inside or outside + the given range. */ + +static struct traceframe * +find_next_traceframe_in_range (CORE_ADDR lo, CORE_ADDR hi, int inside_p, + int *tfnump) +{ + client_state &cs = get_client_state (); + struct traceframe *tframe; + CORE_ADDR tfaddr; + + *tfnump = cs.current_traceframe + 1; + tframe = find_traceframe (*tfnump); + /* The search is not supposed to wrap around. */ + if (!tframe) + { + *tfnump = -1; + return NULL; + } + + for (; tframe->tpnum != 0; tframe = NEXT_TRACEFRAME (tframe)) + { + tfaddr = get_traceframe_address (tframe); + if (inside_p + ? (lo <= tfaddr && tfaddr <= hi) + : (lo > tfaddr || tfaddr > hi)) + return tframe; + ++*tfnump; + } + + *tfnump = -1; + return NULL; +} + +/* Search for the next traceframe recorded by the given tracepoint. + Note that for multi-location tracepoints, this will find whatever + location appears first. */ + +static struct traceframe * +find_next_traceframe_by_tracepoint (int num, int *tfnump) +{ + client_state &cs = get_client_state (); + struct traceframe *tframe; + + *tfnump = cs.current_traceframe + 1; + tframe = find_traceframe (*tfnump); + /* The search is not supposed to wrap around. */ + if (!tframe) + { + *tfnump = -1; + return NULL; + } + + for (; tframe->tpnum != 0; tframe = NEXT_TRACEFRAME (tframe)) + { + if (tframe->tpnum == num) + return tframe; + ++*tfnump; + } + + *tfnump = -1; + return NULL; +} + +#endif + +#ifndef IN_PROCESS_AGENT + +/* Clear all past trace state. */ + +static void +cmd_qtinit (char *packet) +{ + client_state &cs = get_client_state (); + struct trace_state_variable *tsv, *prev, *next; + + /* Can't do this command without a pid attached. */ + if (current_thread == NULL) + { + write_enn (packet); + return; + } + + /* Make sure we don't try to read from a trace frame. */ + cs.current_traceframe = -1; + + stop_tracing (); + + trace_debug ("Initializing the trace"); + + clear_installed_tracepoints (); + clear_readonly_regions (); + + tracepoints = NULL; + last_tracepoint = NULL; + + /* Clear out any leftover trace state variables. Ones with target + defined getters should be kept however. */ + prev = NULL; + tsv = trace_state_variables; + while (tsv) + { + trace_debug ("Looking at var %d", tsv->number); + if (tsv->getter == NULL) + { + next = tsv->next; + if (prev) + prev->next = next; + else + trace_state_variables = next; + trace_debug ("Deleting var %d", tsv->number); + free (tsv); + tsv = next; + } + else + { + prev = tsv; + tsv = tsv->next; + } + } + + clear_trace_buffer (); + clear_inferior_trace_buffer (); + + write_ok (packet); +} + +/* Unprobe the UST marker at ADDRESS. */ + +static void +unprobe_marker_at (CORE_ADDR address) +{ + char cmd[IPA_CMD_BUF_SIZE]; + + sprintf (cmd, "unprobe_marker_at:%s", paddress (address)); + run_inferior_command (cmd, strlen (cmd) + 1); +} + +/* Restore the program to its pre-tracing state. This routine may be called + in error situations, so it needs to be careful about only restoring + from known-valid bits. */ + +static void +clear_installed_tracepoints (void) +{ + struct tracepoint *tpoint; + struct tracepoint *prev_stpoint; + + target_pause_all (true); + + prev_stpoint = NULL; + + /* Restore any bytes overwritten by tracepoints. */ + for (tpoint = tracepoints; tpoint; tpoint = tpoint->next) + { + /* Catch the case where we might try to remove a tracepoint that + was never actually installed. */ + if (tpoint->handle == NULL) + { + trace_debug ("Tracepoint %d at 0x%s was " + "never installed, nothing to clear", + tpoint->number, paddress (tpoint->address)); + continue; + } + + switch (tpoint->type) + { + case trap_tracepoint: + { + struct breakpoint *bp + = (struct breakpoint *) tpoint->handle; + + delete_breakpoint (bp); + } + break; + case fast_tracepoint: + { + struct fast_tracepoint_jump *jump + = (struct fast_tracepoint_jump *) tpoint->handle; + + delete_fast_tracepoint_jump (jump); + } + break; + case static_tracepoint: + if (prev_stpoint != NULL + && prev_stpoint->address == tpoint->address) + /* Nothing to do. We already unprobed a tracepoint set at + this marker address (and there can only be one probe + per marker). */ + ; + else + { + unprobe_marker_at (tpoint->address); + prev_stpoint = tpoint; + } + break; + } + + tpoint->handle = NULL; + } + + target_unpause_all (true); +} + +/* Parse a packet that defines a tracepoint. */ + +static void +cmd_qtdp (char *own_buf) +{ + int tppacket; + /* Whether there is a trailing hyphen at the end of the QTDP packet. */ + int trail_hyphen = 0; + ULONGEST num; + ULONGEST addr; + ULONGEST count; + struct tracepoint *tpoint; + const char *packet = own_buf; + + packet += strlen ("QTDP:"); + + /* A hyphen at the beginning marks a packet specifying actions for a + tracepoint already supplied. */ + tppacket = 1; + if (*packet == '-') + { + tppacket = 0; + ++packet; + } + packet = unpack_varlen_hex (packet, &num); + ++packet; /* skip a colon */ + packet = unpack_varlen_hex (packet, &addr); + ++packet; /* skip a colon */ + + /* See if we already have this tracepoint. */ + tpoint = find_tracepoint (num, addr); + + if (tppacket) + { + /* Duplicate tracepoints are never allowed. */ + if (tpoint) + { + trace_debug ("Tracepoint error: tracepoint %d" + " at 0x%s already exists", + (int) num, paddress (addr)); + write_enn (own_buf); + return; + } + + tpoint = add_tracepoint (num, addr); + + tpoint->enabled = (*packet == 'E'); + ++packet; /* skip 'E' */ + ++packet; /* skip a colon */ + packet = unpack_varlen_hex (packet, &count); + tpoint->step_count = count; + ++packet; /* skip a colon */ + packet = unpack_varlen_hex (packet, &count); + tpoint->pass_count = count; + /* See if we have any of the additional optional fields. */ + while (*packet == ':') + { + ++packet; + if (*packet == 'F') + { + tpoint->type = fast_tracepoint; + ++packet; + packet = unpack_varlen_hex (packet, &count); + tpoint->orig_size = count; + } + else if (*packet == 'S') + { + tpoint->type = static_tracepoint; + ++packet; + } + else if (*packet == 'X') + { + tpoint->cond = gdb_parse_agent_expr (&packet); + } + else if (*packet == '-') + break; + else if (*packet == '\0') + break; + else + trace_debug ("Unknown optional tracepoint field"); + } + if (*packet == '-') + { + trail_hyphen = 1; + trace_debug ("Also has actions\n"); + } + + trace_debug ("Defined %stracepoint %d at 0x%s, " + "enabled %d step %" PRIu64 " pass %" PRIu64, + tpoint->type == fast_tracepoint ? "fast " + : tpoint->type == static_tracepoint ? "static " : "", + tpoint->number, paddress (tpoint->address), tpoint->enabled, + tpoint->step_count, tpoint->pass_count); + } + else if (tpoint) + add_tracepoint_action (tpoint, packet); + else + { + trace_debug ("Tracepoint error: tracepoint %d at 0x%s not found", + (int) num, paddress (addr)); + write_enn (own_buf); + return; + } + + /* Install tracepoint during tracing only once for each tracepoint location. + For each tracepoint loc, GDB may send multiple QTDP packets, and we can + determine the last QTDP packet for one tracepoint location by checking + trailing hyphen in QTDP packet. */ + if (tracing && !trail_hyphen) + { + struct tracepoint *tp = NULL; + + /* Pause all threads temporarily while we patch tracepoints. */ + target_pause_all (false); + + /* download_tracepoint will update global `tracepoints' + list, so it is unsafe to leave threads in jump pad. */ + target_stabilize_threads (); + + /* Freeze threads. */ + target_pause_all (true); + + + if (tpoint->type != trap_tracepoint) + { + /* Find another fast or static tracepoint at the same address. */ + for (tp = tracepoints; tp; tp = tp->next) + { + if (tp->address == tpoint->address && tp->type == tpoint->type + && tp->number != tpoint->number) + break; + } + + /* TPOINT is installed at the same address as TP. */ + if (tp) + { + if (tpoint->type == fast_tracepoint) + clone_fast_tracepoint (tpoint, tp); + else if (tpoint->type == static_tracepoint) + tpoint->handle = (void *) -1; + } + } + + if (use_agent && tpoint->type == fast_tracepoint + && agent_capability_check (AGENT_CAPA_FAST_TRACE)) + { + /* Download and install fast tracepoint by agent. */ + if (tracepoint_send_agent (tpoint) == 0) + write_ok (own_buf); + else + { + write_enn (own_buf); + remove_tracepoint (tpoint); + } + } + else + { + download_tracepoint (tpoint); + + if (tpoint->type == trap_tracepoint || tp == NULL) + { + install_tracepoint (tpoint, own_buf); + if (strcmp (own_buf, "OK") != 0) + remove_tracepoint (tpoint); + } + else + write_ok (own_buf); + } + + target_unpause_all (true); + return; + } + + write_ok (own_buf); +} + +static void +cmd_qtdpsrc (char *own_buf) +{ + ULONGEST num, addr, start, slen; + struct tracepoint *tpoint; + const char *packet = own_buf; + const char *saved; + char *srctype, *src; + size_t nbytes; + struct source_string *last, *newlast; + + packet += strlen ("QTDPsrc:"); + + packet = unpack_varlen_hex (packet, &num); + ++packet; /* skip a colon */ + packet = unpack_varlen_hex (packet, &addr); + ++packet; /* skip a colon */ + + /* See if we already have this tracepoint. */ + tpoint = find_tracepoint (num, addr); + + if (!tpoint) + { + trace_debug ("Tracepoint error: tracepoint %d at 0x%s not found", + (int) num, paddress (addr)); + write_enn (own_buf); + return; + } + + saved = packet; + packet = strchr (packet, ':'); + srctype = (char *) xmalloc (packet - saved + 1); + memcpy (srctype, saved, packet - saved); + srctype[packet - saved] = '\0'; + ++packet; + packet = unpack_varlen_hex (packet, &start); + ++packet; /* skip a colon */ + packet = unpack_varlen_hex (packet, &slen); + ++packet; /* skip a colon */ + src = (char *) xmalloc (slen + 1); + nbytes = hex2bin (packet, (gdb_byte *) src, strlen (packet) / 2); + src[nbytes] = '\0'; + + newlast = XNEW (struct source_string); + newlast->type = srctype; + newlast->str = src; + newlast->next = NULL; + /* Always add a source string to the end of the list; + this keeps sequences of actions/commands in the right + order. */ + if (tpoint->source_strings) + { + for (last = tpoint->source_strings; last->next; last = last->next) + ; + last->next = newlast; + } + else + tpoint->source_strings = newlast; + + write_ok (own_buf); +} + +static void +cmd_qtdv (char *own_buf) +{ + ULONGEST num, val, builtin; + char *varname; + size_t nbytes; + struct trace_state_variable *tsv; + const char *packet = own_buf; + + packet += strlen ("QTDV:"); + + packet = unpack_varlen_hex (packet, &num); + ++packet; /* skip a colon */ + packet = unpack_varlen_hex (packet, &val); + ++packet; /* skip a colon */ + packet = unpack_varlen_hex (packet, &builtin); + ++packet; /* skip a colon */ + + nbytes = strlen (packet) / 2; + varname = (char *) xmalloc (nbytes + 1); + nbytes = hex2bin (packet, (gdb_byte *) varname, nbytes); + varname[nbytes] = '\0'; + + tsv = create_trace_state_variable (num, 1); + tsv->initial_value = (LONGEST) val; + tsv->name = varname; + + set_trace_state_variable_value (num, (LONGEST) val); + + write_ok (own_buf); +} + +static void +cmd_qtenable_disable (char *own_buf, int enable) +{ + const char *packet = own_buf; + ULONGEST num, addr; + struct tracepoint *tp; + + packet += strlen (enable ? "QTEnable:" : "QTDisable:"); + packet = unpack_varlen_hex (packet, &num); + ++packet; /* skip a colon */ + packet = unpack_varlen_hex (packet, &addr); + + tp = find_tracepoint (num, addr); + + if (tp) + { + if ((enable && tp->enabled) || (!enable && !tp->enabled)) + { + trace_debug ("Tracepoint %d at 0x%s is already %s", + (int) num, paddress (addr), + enable ? "enabled" : "disabled"); + write_ok (own_buf); + return; + } + + trace_debug ("%s tracepoint %d at 0x%s", + enable ? "Enabling" : "Disabling", + (int) num, paddress (addr)); + + tp->enabled = enable; + + if (tp->type == fast_tracepoint || tp->type == static_tracepoint) + { + int ret; + int offset = offsetof (struct tracepoint, enabled); + CORE_ADDR obj_addr = tp->obj_addr_on_target + offset; + + ret = prepare_to_access_memory (); + if (ret) + { + trace_debug ("Failed to temporarily stop inferior threads"); + write_enn (own_buf); + return; + } + + ret = write_inferior_int8 (obj_addr, enable); + done_accessing_memory (); + + if (ret) + { + trace_debug ("Cannot write enabled flag into " + "inferior process memory"); + write_enn (own_buf); + return; + } + } + + write_ok (own_buf); + } + else + { + trace_debug ("Tracepoint %d at 0x%s not found", + (int) num, paddress (addr)); + write_enn (own_buf); + } +} + +static void +cmd_qtv (char *own_buf) +{ + client_state &cs = get_client_state (); + ULONGEST num; + LONGEST val = 0; + int err; + char *packet = own_buf; + + packet += strlen ("qTV:"); + unpack_varlen_hex (packet, &num); + + if (cs.current_traceframe >= 0) + { + err = traceframe_read_tsv ((int) num, &val); + if (err) + { + strcpy (own_buf, "U"); + return; + } + } + /* Only make tsv's be undefined before the first trace run. After a + trace run is over, the user might want to see the last value of + the tsv, and it might not be available in a traceframe. */ + else if (!tracing && strcmp (tracing_stop_reason, "tnotrun") == 0) + { + strcpy (own_buf, "U"); + return; + } + else + val = get_trace_state_variable_value (num); + + sprintf (own_buf, "V%s", phex_nz (val, 0)); +} + +/* Clear out the list of readonly regions. */ + +static void +clear_readonly_regions (void) +{ + struct readonly_region *roreg; + + while (readonly_regions) + { + roreg = readonly_regions; + readonly_regions = readonly_regions->next; + free (roreg); + } +} + +/* Parse the collection of address ranges whose contents GDB believes + to be unchanging and so can be read directly from target memory + even while looking at a traceframe. */ + +static void +cmd_qtro (char *own_buf) +{ + ULONGEST start, end; + struct readonly_region *roreg; + const char *packet = own_buf; + + trace_debug ("Want to mark readonly regions"); + + clear_readonly_regions (); + + packet += strlen ("QTro"); + + while (*packet == ':') + { + ++packet; /* skip a colon */ + packet = unpack_varlen_hex (packet, &start); + ++packet; /* skip a comma */ + packet = unpack_varlen_hex (packet, &end); + + roreg = XNEW (struct readonly_region); + roreg->start = start; + roreg->end = end; + roreg->next = readonly_regions; + readonly_regions = roreg; + trace_debug ("Added readonly region from 0x%s to 0x%s", + paddress (roreg->start), paddress (roreg->end)); + } + + write_ok (own_buf); +} + +/* Test to see if the given range is in our list of readonly ranges. + We only test for being entirely within a range, GDB is not going to + send a single memory packet that spans multiple regions. */ + +int +in_readonly_region (CORE_ADDR addr, ULONGEST length) +{ + struct readonly_region *roreg; + + for (roreg = readonly_regions; roreg; roreg = roreg->next) + if (roreg->start <= addr && (addr + length - 1) <= roreg->end) + return 1; + + return 0; +} + +static CORE_ADDR gdb_jump_pad_head; + +/* Return the address of the next free jump space. */ + +static CORE_ADDR +get_jump_space_head (void) +{ + if (gdb_jump_pad_head == 0) + { + if (read_inferior_data_pointer (ipa_sym_addrs.addr_gdb_jump_pad_buffer, + &gdb_jump_pad_head)) + { + internal_error (__FILE__, __LINE__, + "error extracting jump_pad_buffer"); + } + } + + return gdb_jump_pad_head; +} + +/* Reserve USED bytes from the jump space. */ + +static void +claim_jump_space (ULONGEST used) +{ + trace_debug ("claim_jump_space reserves %s bytes at %s", + pulongest (used), paddress (gdb_jump_pad_head)); + gdb_jump_pad_head += used; +} + +static CORE_ADDR trampoline_buffer_head = 0; +static CORE_ADDR trampoline_buffer_tail; + +/* Reserve USED bytes from the trampoline buffer and return the + address of the start of the reserved space in TRAMPOLINE. Returns + non-zero if the space is successfully claimed. */ + +int +claim_trampoline_space (ULONGEST used, CORE_ADDR *trampoline) +{ + if (!trampoline_buffer_head) + { + if (read_inferior_data_pointer (ipa_sym_addrs.addr_gdb_trampoline_buffer, + &trampoline_buffer_tail)) + { + internal_error (__FILE__, __LINE__, + "error extracting trampoline_buffer"); + } + + if (read_inferior_data_pointer (ipa_sym_addrs.addr_gdb_trampoline_buffer_end, + &trampoline_buffer_head)) + { + internal_error (__FILE__, __LINE__, + "error extracting trampoline_buffer_end"); + } + } + + /* Start claiming space from the top of the trampoline space. If + the space is located at the bottom of the virtual address space, + this reduces the possibility that corruption will occur if a null + pointer is used to write to memory. */ + if (trampoline_buffer_head - trampoline_buffer_tail < used) + { + trace_debug ("claim_trampoline_space failed to reserve %s bytes", + pulongest (used)); + return 0; + } + + trampoline_buffer_head -= used; + + trace_debug ("claim_trampoline_space reserves %s bytes at %s", + pulongest (used), paddress (trampoline_buffer_head)); + + *trampoline = trampoline_buffer_head; + return 1; +} + +/* Returns non-zero if there is space allocated for use in trampolines + for fast tracepoints. */ + +int +have_fast_tracepoint_trampoline_buffer (char *buf) +{ + CORE_ADDR trampoline_end, errbuf; + + if (read_inferior_data_pointer (ipa_sym_addrs.addr_gdb_trampoline_buffer_end, + &trampoline_end)) + { + internal_error (__FILE__, __LINE__, + "error extracting trampoline_buffer_end"); + } + + if (buf) + { + buf[0] = '\0'; + strcpy (buf, "was claiming"); + if (read_inferior_data_pointer (ipa_sym_addrs.addr_gdb_trampoline_buffer_error, + &errbuf)) + { + internal_error (__FILE__, __LINE__, + "error extracting errbuf"); + } + + read_inferior_memory (errbuf, (unsigned char *) buf, 100); + } + + return trampoline_end != 0; +} + +/* Ask the IPA to probe the marker at ADDRESS. Returns -1 if running + the command fails, or 0 otherwise. If the command ran + successfully, but probing the marker failed, ERROUT will be filled + with the error to reply to GDB, and -1 is also returned. This + allows directly passing IPA errors to GDB. */ + +static int +probe_marker_at (CORE_ADDR address, char *errout) +{ + char cmd[IPA_CMD_BUF_SIZE]; + int err; + + sprintf (cmd, "probe_marker_at:%s", paddress (address)); + err = run_inferior_command (cmd, strlen (cmd) + 1); + + if (err == 0) + { + if (*cmd == 'E') + { + strcpy (errout, cmd); + return -1; + } + } + + return err; +} + +static void +clone_fast_tracepoint (struct tracepoint *to, const struct tracepoint *from) +{ + to->jump_pad = from->jump_pad; + to->jump_pad_end = from->jump_pad_end; + to->trampoline = from->trampoline; + to->trampoline_end = from->trampoline_end; + to->adjusted_insn_addr = from->adjusted_insn_addr; + to->adjusted_insn_addr_end = from->adjusted_insn_addr_end; + to->handle = from->handle; + + gdb_assert (from->handle); + inc_ref_fast_tracepoint_jump ((struct fast_tracepoint_jump *) from->handle); +} + +#define MAX_JUMP_SIZE 20 + +/* Install fast tracepoint. Return 0 if successful, otherwise return + non-zero. */ + +static int +install_fast_tracepoint (struct tracepoint *tpoint, char *errbuf) +{ + CORE_ADDR jentry, jump_entry; + CORE_ADDR trampoline; + CORE_ADDR collect; + ULONGEST trampoline_size; + int err = 0; + /* The jump to the jump pad of the last fast tracepoint + installed. */ + unsigned char fjump[MAX_JUMP_SIZE]; + ULONGEST fjump_size; + + if (tpoint->orig_size < target_get_min_fast_tracepoint_insn_len ()) + { + trace_debug ("Requested a fast tracepoint on an instruction " + "that is of less than the minimum length."); + return 0; + } + + if (read_inferior_data_pointer (ipa_sym_addrs.addr_gdb_collect_ptr, + &collect)) + { + error ("error extracting gdb_collect_ptr"); + return 1; + } + + jentry = jump_entry = get_jump_space_head (); + + trampoline = 0; + trampoline_size = 0; + + /* Install the jump pad. */ + err = target_install_fast_tracepoint_jump_pad + (tpoint->obj_addr_on_target, tpoint->address, collect, + ipa_sym_addrs.addr_collecting, tpoint->orig_size, &jentry, + &trampoline, &trampoline_size, fjump, &fjump_size, + &tpoint->adjusted_insn_addr, &tpoint->adjusted_insn_addr_end, errbuf); + + if (err) + return 1; + + /* Wire it in. */ + tpoint->handle = set_fast_tracepoint_jump (tpoint->address, fjump, + fjump_size); + + if (tpoint->handle != NULL) + { + tpoint->jump_pad = jump_entry; + tpoint->jump_pad_end = jentry; + tpoint->trampoline = trampoline; + tpoint->trampoline_end = trampoline + trampoline_size; + + /* Pad to 8-byte alignment. */ + jentry = ((jentry + 7) & ~0x7); + claim_jump_space (jentry - jump_entry); + } + + return 0; +} + + +/* Install tracepoint TPOINT, and write reply message in OWN_BUF. */ + +static void +install_tracepoint (struct tracepoint *tpoint, char *own_buf) +{ + tpoint->handle = NULL; + *own_buf = '\0'; + + if (tpoint->type == trap_tracepoint) + { + /* Tracepoints are installed as memory breakpoints. Just go + ahead and install the trap. The breakpoints module + handles duplicated breakpoints, and the memory read + routine handles un-patching traps from memory reads. */ + tpoint->handle = set_breakpoint_at (tpoint->address, + tracepoint_handler); + } + else if (tpoint->type == fast_tracepoint || tpoint->type == static_tracepoint) + { + if (!agent_loaded_p ()) + { + trace_debug ("Requested a %s tracepoint, but fast " + "tracepoints aren't supported.", + tpoint->type == static_tracepoint ? "static" : "fast"); + write_e_ipa_not_loaded (own_buf); + return; + } + if (tpoint->type == static_tracepoint + && !in_process_agent_supports_ust ()) + { + trace_debug ("Requested a static tracepoint, but static " + "tracepoints are not supported."); + write_e_ust_not_loaded (own_buf); + return; + } + + if (tpoint->type == fast_tracepoint) + install_fast_tracepoint (tpoint, own_buf); + else + { + if (probe_marker_at (tpoint->address, own_buf) == 0) + tpoint->handle = (void *) -1; + } + + } + else + internal_error (__FILE__, __LINE__, "Unknown tracepoint type"); + + if (tpoint->handle == NULL) + { + if (*own_buf == '\0') + write_enn (own_buf); + } + else + write_ok (own_buf); +} + +static void download_tracepoint_1 (struct tracepoint *tpoint); + +static void +cmd_qtstart (char *packet) +{ + struct tracepoint *tpoint, *prev_ftpoint, *prev_stpoint; + CORE_ADDR tpptr = 0, prev_tpptr = 0; + + trace_debug ("Starting the trace"); + + /* Pause all threads temporarily while we patch tracepoints. */ + target_pause_all (false); + + /* Get threads out of jump pads. Safe to do here, since this is a + top level command. And, required to do here, since we're + deleting/rewriting jump pads. */ + + target_stabilize_threads (); + + /* Freeze threads. */ + target_pause_all (true); + + /* Sync the fast tracepoints list in the inferior ftlib. */ + if (agent_loaded_p ()) + download_trace_state_variables (); + + /* No previous fast tpoint yet. */ + prev_ftpoint = NULL; + + /* No previous static tpoint yet. */ + prev_stpoint = NULL; + + *packet = '\0'; + + if (agent_loaded_p ()) + { + /* Tell IPA about the correct tdesc. */ + if (write_inferior_integer (ipa_sym_addrs.addr_ipa_tdesc_idx, + target_get_ipa_tdesc_idx ())) + error ("Error setting ipa_tdesc_idx variable in lib"); + } + + /* Start out empty. */ + if (agent_loaded_p ()) + write_inferior_data_pointer (ipa_sym_addrs.addr_tracepoints, 0); + + /* Download and install tracepoints. */ + for (tpoint = tracepoints; tpoint; tpoint = tpoint->next) + { + /* Ensure all the hit counts start at zero. */ + tpoint->hit_count = 0; + tpoint->traceframe_usage = 0; + + if (tpoint->type == trap_tracepoint) + { + /* Tracepoints are installed as memory breakpoints. Just go + ahead and install the trap. The breakpoints module + handles duplicated breakpoints, and the memory read + routine handles un-patching traps from memory reads. */ + tpoint->handle = set_breakpoint_at (tpoint->address, + tracepoint_handler); + } + else if (tpoint->type == fast_tracepoint + || tpoint->type == static_tracepoint) + { + if (maybe_write_ipa_not_loaded (packet)) + { + trace_debug ("Requested a %s tracepoint, but fast " + "tracepoints aren't supported.", + tpoint->type == static_tracepoint + ? "static" : "fast"); + break; + } + + if (tpoint->type == fast_tracepoint) + { + int use_agent_p + = use_agent && agent_capability_check (AGENT_CAPA_FAST_TRACE); + + if (prev_ftpoint != NULL + && prev_ftpoint->address == tpoint->address) + { + if (use_agent_p) + tracepoint_send_agent (tpoint); + else + download_tracepoint_1 (tpoint); + + clone_fast_tracepoint (tpoint, prev_ftpoint); + } + else + { + /* Tracepoint is installed successfully? */ + int installed = 0; + + /* Download and install fast tracepoint by agent. */ + if (use_agent_p) + installed = !tracepoint_send_agent (tpoint); + else + { + download_tracepoint_1 (tpoint); + installed = !install_fast_tracepoint (tpoint, packet); + } + + if (installed) + prev_ftpoint = tpoint; + } + } + else + { + if (!in_process_agent_supports_ust ()) + { + trace_debug ("Requested a static tracepoint, but static " + "tracepoints are not supported."); + break; + } + + download_tracepoint_1 (tpoint); + /* Can only probe a given marker once. */ + if (prev_stpoint != NULL + && prev_stpoint->address == tpoint->address) + tpoint->handle = (void *) -1; + else + { + if (probe_marker_at (tpoint->address, packet) == 0) + { + tpoint->handle = (void *) -1; + + /* So that we can handle multiple static tracepoints + at the same address easily. */ + prev_stpoint = tpoint; + } + } + } + + prev_tpptr = tpptr; + tpptr = tpoint->obj_addr_on_target; + + if (tpoint == tracepoints) + /* First object in list, set the head pointer in the + inferior. */ + write_inferior_data_pointer (ipa_sym_addrs.addr_tracepoints, tpptr); + else + write_inferior_data_pointer (prev_tpptr + + offsetof (struct tracepoint, next), + tpptr); + } + + /* Any failure in the inner loop is sufficient cause to give + up. */ + if (tpoint->handle == NULL) + break; + } + + /* Any error in tracepoint insertion is unacceptable; better to + address the problem now, than end up with a useless or misleading + trace run. */ + if (tpoint != NULL) + { + clear_installed_tracepoints (); + if (*packet == '\0') + write_enn (packet); + target_unpause_all (true); + return; + } + + stopping_tracepoint = NULL; + trace_buffer_is_full = 0; + expr_eval_result = expr_eval_no_error; + error_tracepoint = NULL; + tracing_start_time = get_timestamp (); + + /* Tracing is now active, hits will now start being logged. */ + tracing = 1; + + if (agent_loaded_p ()) + { + if (write_inferior_integer (ipa_sym_addrs.addr_tracing, 1)) + { + internal_error (__FILE__, __LINE__, + "Error setting tracing variable in lib"); + } + + if (write_inferior_data_pointer (ipa_sym_addrs.addr_stopping_tracepoint, + 0)) + { + internal_error (__FILE__, __LINE__, + "Error clearing stopping_tracepoint variable" + " in lib"); + } + + if (write_inferior_integer (ipa_sym_addrs.addr_trace_buffer_is_full, 0)) + { + internal_error (__FILE__, __LINE__, + "Error clearing trace_buffer_is_full variable" + " in lib"); + } + + stop_tracing_bkpt = set_breakpoint_at (ipa_sym_addrs.addr_stop_tracing, + stop_tracing_handler); + if (stop_tracing_bkpt == NULL) + error ("Error setting stop_tracing breakpoint"); + + flush_trace_buffer_bkpt + = set_breakpoint_at (ipa_sym_addrs.addr_flush_trace_buffer, + flush_trace_buffer_handler); + if (flush_trace_buffer_bkpt == NULL) + error ("Error setting flush_trace_buffer breakpoint"); + } + + target_unpause_all (true); + + write_ok (packet); +} + +/* End a tracing run, filling in a stop reason to report back to GDB, + and removing the tracepoints from the code. */ + +void +stop_tracing (void) +{ + if (!tracing) + { + trace_debug ("Tracing is already off, ignoring"); + return; + } + + trace_debug ("Stopping the trace"); + + /* Pause all threads before removing fast jumps from memory, + breakpoints, and touching IPA state variables (inferior memory). + Some thread may hit the internal tracing breakpoints, or be + collecting this moment, but that's ok, we don't release the + tpoint object's memory or the jump pads here (we only do that + when we're sure we can move all threads out of the jump pads). + We can't now, since we may be getting here due to the inferior + agent calling us. */ + target_pause_all (true); + + /* Stop logging. Tracepoints can still be hit, but they will not be + recorded. */ + tracing = 0; + if (agent_loaded_p ()) + { + if (write_inferior_integer (ipa_sym_addrs.addr_tracing, 0)) + { + internal_error (__FILE__, __LINE__, + "Error clearing tracing variable in lib"); + } + } + + tracing_stop_time = get_timestamp (); + tracing_stop_reason = "t???"; + tracing_stop_tpnum = 0; + if (stopping_tracepoint) + { + trace_debug ("Stopping the trace because " + "tracepoint %d was hit %" PRIu64 " times", + stopping_tracepoint->number, + stopping_tracepoint->pass_count); + tracing_stop_reason = "tpasscount"; + tracing_stop_tpnum = stopping_tracepoint->number; + } + else if (trace_buffer_is_full) + { + trace_debug ("Stopping the trace because the trace buffer is full"); + tracing_stop_reason = "tfull"; + } + else if (expr_eval_result != expr_eval_no_error) + { + trace_debug ("Stopping the trace because of an expression eval error"); + tracing_stop_reason = eval_result_names[expr_eval_result]; + tracing_stop_tpnum = error_tracepoint->number; + } +#ifndef IN_PROCESS_AGENT + else if (!gdb_connected ()) + { + trace_debug ("Stopping the trace because GDB disconnected"); + tracing_stop_reason = "tdisconnected"; + } +#endif + else + { + trace_debug ("Stopping the trace because of a tstop command"); + tracing_stop_reason = "tstop"; + } + + stopping_tracepoint = NULL; + error_tracepoint = NULL; + + /* Clear out the tracepoints. */ + clear_installed_tracepoints (); + + if (agent_loaded_p ()) + { + /* Pull in fast tracepoint trace frames from the inferior lib + buffer into our buffer, even if our buffer is already full, + because we want to present the full number of created frames + in addition to what fit in the trace buffer. */ + upload_fast_traceframes (); + } + + if (stop_tracing_bkpt != NULL) + { + delete_breakpoint (stop_tracing_bkpt); + stop_tracing_bkpt = NULL; + } + + if (flush_trace_buffer_bkpt != NULL) + { + delete_breakpoint (flush_trace_buffer_bkpt); + flush_trace_buffer_bkpt = NULL; + } + + target_unpause_all (true); +} + +static int +stop_tracing_handler (CORE_ADDR addr) +{ + trace_debug ("lib hit stop_tracing"); + + /* Don't actually handle it here. When we stop tracing we remove + breakpoints from the inferior, and that is not allowed in a + breakpoint handler (as the caller is walking the breakpoint + list). */ + return 0; +} + +static int +flush_trace_buffer_handler (CORE_ADDR addr) +{ + trace_debug ("lib hit flush_trace_buffer"); + return 0; +} + +static void +cmd_qtstop (char *packet) +{ + stop_tracing (); + write_ok (packet); +} + +static void +cmd_qtdisconnected (char *own_buf) +{ + ULONGEST setting; + char *packet = own_buf; + + packet += strlen ("QTDisconnected:"); + + unpack_varlen_hex (packet, &setting); + + write_ok (own_buf); + + disconnected_tracing = setting; +} + +static void +cmd_qtframe (char *own_buf) +{ + client_state &cs = get_client_state (); + ULONGEST frame, pc, lo, hi, num; + int tfnum, tpnum; + struct traceframe *tframe; + const char *packet = own_buf; + + packet += strlen ("QTFrame:"); + + if (startswith (packet, "pc:")) + { + packet += strlen ("pc:"); + unpack_varlen_hex (packet, &pc); + trace_debug ("Want to find next traceframe at pc=0x%s", paddress (pc)); + tframe = find_next_traceframe_in_range (pc, pc, 1, &tfnum); + } + else if (startswith (packet, "range:")) + { + packet += strlen ("range:"); + packet = unpack_varlen_hex (packet, &lo); + ++packet; + unpack_varlen_hex (packet, &hi); + trace_debug ("Want to find next traceframe in the range 0x%s to 0x%s", + paddress (lo), paddress (hi)); + tframe = find_next_traceframe_in_range (lo, hi, 1, &tfnum); + } + else if (startswith (packet, "outside:")) + { + packet += strlen ("outside:"); + packet = unpack_varlen_hex (packet, &lo); + ++packet; + unpack_varlen_hex (packet, &hi); + trace_debug ("Want to find next traceframe " + "outside the range 0x%s to 0x%s", + paddress (lo), paddress (hi)); + tframe = find_next_traceframe_in_range (lo, hi, 0, &tfnum); + } + else if (startswith (packet, "tdp:")) + { + packet += strlen ("tdp:"); + unpack_varlen_hex (packet, &num); + tpnum = (int) num; + trace_debug ("Want to find next traceframe for tracepoint %d", tpnum); + tframe = find_next_traceframe_by_tracepoint (tpnum, &tfnum); + } + else + { + unpack_varlen_hex (packet, &frame); + tfnum = (int) frame; + if (tfnum == -1) + { + trace_debug ("Want to stop looking at traceframes"); + cs.current_traceframe = -1; + write_ok (own_buf); + return; + } + trace_debug ("Want to look at traceframe %d", tfnum); + tframe = find_traceframe (tfnum); + } + + if (tframe) + { + cs.current_traceframe = tfnum; + sprintf (own_buf, "F%xT%x", tfnum, tframe->tpnum); + } + else + sprintf (own_buf, "F-1"); +} + +static void +cmd_qtstatus (char *packet) +{ + char *stop_reason_rsp = NULL; + char *buf1, *buf2, *buf3; + const char *str; + int slen; + + /* Translate the plain text of the notes back into hex for + transmission. */ + + str = (tracing_user_name ? tracing_user_name : ""); + slen = strlen (str); + buf1 = (char *) alloca (slen * 2 + 1); + bin2hex ((gdb_byte *) str, buf1, slen); + + str = (tracing_notes ? tracing_notes : ""); + slen = strlen (str); + buf2 = (char *) alloca (slen * 2 + 1); + bin2hex ((gdb_byte *) str, buf2, slen); + + str = (tracing_stop_note ? tracing_stop_note : ""); + slen = strlen (str); + buf3 = (char *) alloca (slen * 2 + 1); + bin2hex ((gdb_byte *) str, buf3, slen); + + trace_debug ("Returning trace status as %d, stop reason %s", + tracing, tracing_stop_reason); + + if (agent_loaded_p ()) + { + target_pause_all (true); + + upload_fast_traceframes (); + + target_unpause_all (true); + } + + stop_reason_rsp = (char *) tracing_stop_reason; + + /* The user visible error string in terror needs to be hex encoded. + We leave it as plain string in `tracing_stop_reason' to ease + debugging. */ + if (startswith (stop_reason_rsp, "terror:")) + { + const char *result_name; + int hexstr_len; + char *p; + + result_name = stop_reason_rsp + strlen ("terror:"); + hexstr_len = strlen (result_name) * 2; + p = stop_reason_rsp + = (char *) alloca (strlen ("terror:") + hexstr_len + 1); + strcpy (p, "terror:"); + p += strlen (p); + bin2hex ((gdb_byte *) result_name, p, strlen (result_name)); + } + + /* If this was a forced stop, include any stop note that was supplied. */ + if (strcmp (stop_reason_rsp, "tstop") == 0) + { + stop_reason_rsp = (char *) alloca (strlen ("tstop:") + strlen (buf3) + 1); + strcpy (stop_reason_rsp, "tstop:"); + strcat (stop_reason_rsp, buf3); + } + + sprintf (packet, + "T%d;" + "%s:%x;" + "tframes:%x;tcreated:%x;" + "tfree:%x;tsize:%s;" + "circular:%d;" + "disconn:%d;" + "starttime:%s;stoptime:%s;" + "username:%s;notes:%s:", + tracing ? 1 : 0, + stop_reason_rsp, tracing_stop_tpnum, + traceframe_count, traceframes_created, + free_space (), phex_nz (trace_buffer_hi - trace_buffer_lo, 0), + circular_trace_buffer, + disconnected_tracing, + phex_nz (tracing_start_time, sizeof (tracing_start_time)), + phex_nz (tracing_stop_time, sizeof (tracing_stop_time)), + buf1, buf2); +} + +static void +cmd_qtp (char *own_buf) +{ + ULONGEST num, addr; + struct tracepoint *tpoint; + const char *packet = own_buf; + + packet += strlen ("qTP:"); + + packet = unpack_varlen_hex (packet, &num); + ++packet; /* skip a colon */ + packet = unpack_varlen_hex (packet, &addr); + + /* See if we already have this tracepoint. */ + tpoint = find_tracepoint (num, addr); + + if (!tpoint) + { + trace_debug ("Tracepoint error: tracepoint %d at 0x%s not found", + (int) num, paddress (addr)); + write_enn (own_buf); + return; + } + + sprintf (own_buf, "V%" PRIu64 ":%" PRIu64 "", tpoint->hit_count, + tpoint->traceframe_usage); +} + +/* State variables to help return all the tracepoint bits. */ +static struct tracepoint *cur_tpoint; +static unsigned int cur_action; +static unsigned int cur_step_action; +static struct source_string *cur_source_string; +static struct trace_state_variable *cur_tsv; + +/* Compose a response that is an imitation of the syntax by which the + tracepoint was originally downloaded. */ + +static void +response_tracepoint (char *packet, struct tracepoint *tpoint) +{ + char *buf; + + sprintf (packet, "T%x:%s:%c:%" PRIx64 ":%" PRIx64, tpoint->number, + paddress (tpoint->address), + (tpoint->enabled ? 'E' : 'D'), tpoint->step_count, + tpoint->pass_count); + if (tpoint->type == fast_tracepoint) + sprintf (packet + strlen (packet), ":F%x", tpoint->orig_size); + else if (tpoint->type == static_tracepoint) + sprintf (packet + strlen (packet), ":S"); + + if (tpoint->cond) + { + buf = gdb_unparse_agent_expr (tpoint->cond); + sprintf (packet + strlen (packet), ":X%x,%s", + tpoint->cond->length, buf); + free (buf); + } +} + +/* Compose a response that is an imitation of the syntax by which the + tracepoint action was originally downloaded (with the difference + that due to the way we store the actions, this will output a packet + per action, while GDB could have combined more than one action + per-packet. */ + +static void +response_action (char *packet, struct tracepoint *tpoint, + char *taction, int step) +{ + sprintf (packet, "%c%x:%s:%s", + (step ? 'S' : 'A'), tpoint->number, paddress (tpoint->address), + taction); +} + +/* Compose a response that is an imitation of the syntax by which the + tracepoint source piece was originally downloaded. */ + +static void +response_source (char *packet, + struct tracepoint *tpoint, struct source_string *src) +{ + char *buf; + int len; + + len = strlen (src->str); + buf = (char *) alloca (len * 2 + 1); + bin2hex ((gdb_byte *) src->str, buf, len); + + sprintf (packet, "Z%x:%s:%s:%x:%x:%s", + tpoint->number, paddress (tpoint->address), + src->type, 0, len, buf); +} + +/* Return the first piece of tracepoint definition, and initialize the + state machine that will iterate through all the tracepoint + bits. */ + +static void +cmd_qtfp (char *packet) +{ + trace_debug ("Returning first tracepoint definition piece"); + + cur_tpoint = tracepoints; + cur_action = cur_step_action = 0; + cur_source_string = NULL; + + if (cur_tpoint) + response_tracepoint (packet, cur_tpoint); + else + strcpy (packet, "l"); +} + +/* Return additional pieces of tracepoint definition. Each action and + stepping action must go into its own packet, because of packet size + limits, and so we use state variables to deliver one piece at a + time. */ + +static void +cmd_qtsp (char *packet) +{ + trace_debug ("Returning subsequent tracepoint definition piece"); + + if (!cur_tpoint) + { + /* This case would normally never occur, but be prepared for + GDB misbehavior. */ + strcpy (packet, "l"); + } + else if (cur_action < cur_tpoint->numactions) + { + response_action (packet, cur_tpoint, + cur_tpoint->actions_str[cur_action], 0); + ++cur_action; + } + else if (cur_step_action < cur_tpoint->num_step_actions) + { + response_action (packet, cur_tpoint, + cur_tpoint->step_actions_str[cur_step_action], 1); + ++cur_step_action; + } + else if ((cur_source_string + ? cur_source_string->next + : cur_tpoint->source_strings)) + { + if (cur_source_string) + cur_source_string = cur_source_string->next; + else + cur_source_string = cur_tpoint->source_strings; + response_source (packet, cur_tpoint, cur_source_string); + } + else + { + cur_tpoint = cur_tpoint->next; + cur_action = cur_step_action = 0; + cur_source_string = NULL; + if (cur_tpoint) + response_tracepoint (packet, cur_tpoint); + else + strcpy (packet, "l"); + } +} + +/* Compose a response that is an imitation of the syntax by which the + trace state variable was originally downloaded. */ + +static void +response_tsv (char *packet, struct trace_state_variable *tsv) +{ + char *buf = (char *) ""; + int namelen; + + if (tsv->name) + { + namelen = strlen (tsv->name); + buf = (char *) alloca (namelen * 2 + 1); + bin2hex ((gdb_byte *) tsv->name, buf, namelen); + } + + sprintf (packet, "%x:%s:%x:%s", tsv->number, phex_nz (tsv->initial_value, 0), + tsv->getter ? 1 : 0, buf); +} + +/* Return the first trace state variable definition, and initialize + the state machine that will iterate through all the tsv bits. */ + +static void +cmd_qtfv (char *packet) +{ + trace_debug ("Returning first trace state variable definition"); + + cur_tsv = trace_state_variables; + + if (cur_tsv) + response_tsv (packet, cur_tsv); + else + strcpy (packet, "l"); +} + +/* Return additional trace state variable definitions. */ + +static void +cmd_qtsv (char *packet) +{ + trace_debug ("Returning additional trace state variable definition"); + + if (cur_tsv) + { + cur_tsv = cur_tsv->next; + if (cur_tsv) + response_tsv (packet, cur_tsv); + else + strcpy (packet, "l"); + } + else + strcpy (packet, "l"); +} + +/* Return the first static tracepoint marker, and initialize the state + machine that will iterate through all the static tracepoints + markers. */ + +static void +cmd_qtfstm (char *packet) +{ + if (!maybe_write_ipa_ust_not_loaded (packet)) + run_inferior_command (packet, strlen (packet) + 1); +} + +/* Return additional static tracepoints markers. */ + +static void +cmd_qtsstm (char *packet) +{ + if (!maybe_write_ipa_ust_not_loaded (packet)) + run_inferior_command (packet, strlen (packet) + 1); +} + +/* Return the definition of the static tracepoint at a given address. + Result packet is the same as qTsST's. */ + +static void +cmd_qtstmat (char *packet) +{ + if (!maybe_write_ipa_ust_not_loaded (packet)) + run_inferior_command (packet, strlen (packet) + 1); +} + +/* Sent the agent a command to close it. */ + +void +gdb_agent_about_to_close (int pid) +{ + char buf[IPA_CMD_BUF_SIZE]; + + if (!maybe_write_ipa_not_loaded (buf)) + { + struct thread_info *saved_thread; + + saved_thread = current_thread; + + /* Find any thread which belongs to process PID. */ + current_thread = find_any_thread_of_pid (pid); + + strcpy (buf, "close"); + + run_inferior_command (buf, strlen (buf) + 1); + + current_thread = saved_thread; + } +} + +/* Return the minimum instruction size needed for fast tracepoints as a + hexadecimal number. */ + +static void +cmd_qtminftpilen (char *packet) +{ + if (current_thread == NULL) + { + /* Indicate that the minimum length is currently unknown. */ + strcpy (packet, "0"); + return; + } + + sprintf (packet, "%x", target_get_min_fast_tracepoint_insn_len ()); +} + +/* Respond to qTBuffer packet with a block of raw data from the trace + buffer. GDB may ask for a lot, but we are allowed to reply with + only as much as will fit within packet limits or whatever. */ + +static void +cmd_qtbuffer (char *own_buf) +{ + ULONGEST offset, num, tot; + unsigned char *tbp; + const char *packet = own_buf; + + packet += strlen ("qTBuffer:"); + + packet = unpack_varlen_hex (packet, &offset); + ++packet; /* skip a comma */ + unpack_varlen_hex (packet, &num); + + trace_debug ("Want to get trace buffer, %d bytes at offset 0x%s", + (int) num, phex_nz (offset, 0)); + + tot = (trace_buffer_hi - trace_buffer_lo) - free_space (); + + /* If we're right at the end, reply specially that we're done. */ + if (offset == tot) + { + strcpy (own_buf, "l"); + return; + } + + /* Object to any other out-of-bounds request. */ + if (offset > tot) + { + write_enn (own_buf); + return; + } + + /* Compute the pointer corresponding to the given offset, accounting + for wraparound. */ + tbp = trace_buffer_start + offset; + if (tbp >= trace_buffer_wrap) + tbp -= (trace_buffer_wrap - trace_buffer_lo); + + /* Trim to the remaining bytes if we're close to the end. */ + if (num > tot - offset) + num = tot - offset; + + /* Trim to available packet size. */ + if (num >= (PBUFSIZ - 16) / 2 ) + num = (PBUFSIZ - 16) / 2; + + bin2hex (tbp, own_buf, num); +} + +static void +cmd_bigqtbuffer_circular (char *own_buf) +{ + ULONGEST val; + char *packet = own_buf; + + packet += strlen ("QTBuffer:circular:"); + + unpack_varlen_hex (packet, &val); + circular_trace_buffer = val; + trace_debug ("Trace buffer is now %s", + circular_trace_buffer ? "circular" : "linear"); + write_ok (own_buf); +} + +static void +cmd_bigqtbuffer_size (char *own_buf) +{ + ULONGEST val; + LONGEST sval; + char *packet = own_buf; + + /* Can't change the size during a tracing run. */ + if (tracing) + { + write_enn (own_buf); + return; + } + + packet += strlen ("QTBuffer:size:"); + + /* -1 is sent as literal "-1". */ + if (strcmp (packet, "-1") == 0) + sval = DEFAULT_TRACE_BUFFER_SIZE; + else + { + unpack_varlen_hex (packet, &val); + sval = (LONGEST) val; + } + + init_trace_buffer (sval); + trace_debug ("Trace buffer is now %s bytes", + plongest (trace_buffer_size)); + write_ok (own_buf); +} + +static void +cmd_qtnotes (char *own_buf) +{ + size_t nbytes; + char *saved, *user, *notes, *stopnote; + char *packet = own_buf; + + packet += strlen ("QTNotes:"); + + while (*packet) + { + if (startswith (packet, "user:")) + { + packet += strlen ("user:"); + saved = packet; + packet = strchr (packet, ';'); + nbytes = (packet - saved) / 2; + user = (char *) xmalloc (nbytes + 1); + nbytes = hex2bin (saved, (gdb_byte *) user, nbytes); + user[nbytes] = '\0'; + ++packet; /* skip the semicolon */ + trace_debug ("User is '%s'", user); + xfree (tracing_user_name); + tracing_user_name = user; + } + else if (startswith (packet, "notes:")) + { + packet += strlen ("notes:"); + saved = packet; + packet = strchr (packet, ';'); + nbytes = (packet - saved) / 2; + notes = (char *) xmalloc (nbytes + 1); + nbytes = hex2bin (saved, (gdb_byte *) notes, nbytes); + notes[nbytes] = '\0'; + ++packet; /* skip the semicolon */ + trace_debug ("Notes is '%s'", notes); + xfree (tracing_notes); + tracing_notes = notes; + } + else if (startswith (packet, "tstop:")) + { + packet += strlen ("tstop:"); + saved = packet; + packet = strchr (packet, ';'); + nbytes = (packet - saved) / 2; + stopnote = (char *) xmalloc (nbytes + 1); + nbytes = hex2bin (saved, (gdb_byte *) stopnote, nbytes); + stopnote[nbytes] = '\0'; + ++packet; /* skip the semicolon */ + trace_debug ("tstop note is '%s'", stopnote); + xfree (tracing_stop_note); + tracing_stop_note = stopnote; + } + else + break; + } + + write_ok (own_buf); +} + +int +handle_tracepoint_general_set (char *packet) +{ + if (strcmp ("QTinit", packet) == 0) + { + cmd_qtinit (packet); + return 1; + } + else if (startswith (packet, "QTDP:")) + { + cmd_qtdp (packet); + return 1; + } + else if (startswith (packet, "QTDPsrc:")) + { + cmd_qtdpsrc (packet); + return 1; + } + else if (startswith (packet, "QTEnable:")) + { + cmd_qtenable_disable (packet, 1); + return 1; + } + else if (startswith (packet, "QTDisable:")) + { + cmd_qtenable_disable (packet, 0); + return 1; + } + else if (startswith (packet, "QTDV:")) + { + cmd_qtdv (packet); + return 1; + } + else if (startswith (packet, "QTro:")) + { + cmd_qtro (packet); + return 1; + } + else if (strcmp ("QTStart", packet) == 0) + { + cmd_qtstart (packet); + return 1; + } + else if (strcmp ("QTStop", packet) == 0) + { + cmd_qtstop (packet); + return 1; + } + else if (startswith (packet, "QTDisconnected:")) + { + cmd_qtdisconnected (packet); + return 1; + } + else if (startswith (packet, "QTFrame:")) + { + cmd_qtframe (packet); + return 1; + } + else if (startswith (packet, "QTBuffer:circular:")) + { + cmd_bigqtbuffer_circular (packet); + return 1; + } + else if (startswith (packet, "QTBuffer:size:")) + { + cmd_bigqtbuffer_size (packet); + return 1; + } + else if (startswith (packet, "QTNotes:")) + { + cmd_qtnotes (packet); + return 1; + } + + return 0; +} + +int +handle_tracepoint_query (char *packet) +{ + if (strcmp ("qTStatus", packet) == 0) + { + cmd_qtstatus (packet); + return 1; + } + else if (startswith (packet, "qTP:")) + { + cmd_qtp (packet); + return 1; + } + else if (strcmp ("qTfP", packet) == 0) + { + cmd_qtfp (packet); + return 1; + } + else if (strcmp ("qTsP", packet) == 0) + { + cmd_qtsp (packet); + return 1; + } + else if (strcmp ("qTfV", packet) == 0) + { + cmd_qtfv (packet); + return 1; + } + else if (strcmp ("qTsV", packet) == 0) + { + cmd_qtsv (packet); + return 1; + } + else if (startswith (packet, "qTV:")) + { + cmd_qtv (packet); + return 1; + } + else if (startswith (packet, "qTBuffer:")) + { + cmd_qtbuffer (packet); + return 1; + } + else if (strcmp ("qTfSTM", packet) == 0) + { + cmd_qtfstm (packet); + return 1; + } + else if (strcmp ("qTsSTM", packet) == 0) + { + cmd_qtsstm (packet); + return 1; + } + else if (startswith (packet, "qTSTMat:")) + { + cmd_qtstmat (packet); + return 1; + } + else if (strcmp ("qTMinFTPILen", packet) == 0) + { + cmd_qtminftpilen (packet); + return 1; + } + + return 0; +} + +#endif +#ifndef IN_PROCESS_AGENT + +/* Call this when thread TINFO has hit the tracepoint defined by + TP_NUMBER and TP_ADDRESS, and that tracepoint has a while-stepping + action. This adds a while-stepping collecting state item to the + threads' collecting state list, so that we can keep track of + multiple simultaneous while-stepping actions being collected by the + same thread. This can happen in cases like: + + ff0001 INSN1 <-- TP1, while-stepping 10 collect $regs + ff0002 INSN2 + ff0003 INSN3 <-- TP2, collect $regs + ff0004 INSN4 <-- TP3, while-stepping 10 collect $regs + ff0005 INSN5 + + Notice that when instruction INSN5 is reached, the while-stepping + actions of both TP1 and TP3 are still being collected, and that TP2 + had been collected meanwhile. The whole range of ff0001-ff0005 + should be single-stepped, due to at least TP1's while-stepping + action covering the whole range. */ + +static void +add_while_stepping_state (struct thread_info *tinfo, + int tp_number, CORE_ADDR tp_address) +{ + struct wstep_state *wstep = XNEW (struct wstep_state); + + wstep->next = tinfo->while_stepping; + + wstep->tp_number = tp_number; + wstep->tp_address = tp_address; + wstep->current_step = 0; + + tinfo->while_stepping = wstep; +} + +/* Release the while-stepping collecting state WSTEP. */ + +static void +release_while_stepping_state (struct wstep_state *wstep) +{ + free (wstep); +} + +/* Release all while-stepping collecting states currently associated + with thread TINFO. */ + +void +release_while_stepping_state_list (struct thread_info *tinfo) +{ + struct wstep_state *head; + + while (tinfo->while_stepping) + { + head = tinfo->while_stepping; + tinfo->while_stepping = head->next; + release_while_stepping_state (head); + } +} + +/* If TINFO was handling a 'while-stepping' action, the step has + finished, so collect any step data needed, and check if any more + steps are required. Return true if the thread was indeed + collecting tracepoint data, false otherwise. */ + +int +tracepoint_finished_step (struct thread_info *tinfo, CORE_ADDR stop_pc) +{ + struct tracepoint *tpoint; + struct wstep_state *wstep; + struct wstep_state **wstep_link; + struct trap_tracepoint_ctx ctx; + + /* Pull in fast tracepoint trace frames from the inferior lib buffer into + our buffer. */ + if (agent_loaded_p ()) + upload_fast_traceframes (); + + /* Check if we were indeed collecting data for one of more + tracepoints with a 'while-stepping' count. */ + if (tinfo->while_stepping == NULL) + return 0; + + if (!tracing) + { + /* We're not even tracing anymore. Stop this thread from + collecting. */ + release_while_stepping_state_list (tinfo); + + /* The thread had stopped due to a single-step request indeed + explained by a tracepoint. */ + return 1; + } + + wstep = tinfo->while_stepping; + wstep_link = &tinfo->while_stepping; + + trace_debug ("Thread %s finished a single-step for tracepoint %d at 0x%s", + target_pid_to_str (tinfo->id), + wstep->tp_number, paddress (wstep->tp_address)); + + ctx.base.type = trap_tracepoint; + ctx.regcache = get_thread_regcache (tinfo, 1); + + while (wstep != NULL) + { + tpoint = find_tracepoint (wstep->tp_number, wstep->tp_address); + if (tpoint == NULL) + { + trace_debug ("NO TRACEPOINT %d at 0x%s FOR THREAD %s!", + wstep->tp_number, paddress (wstep->tp_address), + target_pid_to_str (tinfo->id)); + + /* Unlink. */ + *wstep_link = wstep->next; + release_while_stepping_state (wstep); + wstep = *wstep_link; + continue; + } + + /* We've just finished one step. */ + ++wstep->current_step; + + /* Collect data. */ + collect_data_at_step ((struct tracepoint_hit_ctx *) &ctx, + stop_pc, tpoint, wstep->current_step); + + if (wstep->current_step >= tpoint->step_count) + { + /* The requested numbers of steps have occurred. */ + trace_debug ("Thread %s done stepping for tracepoint %d at 0x%s", + target_pid_to_str (tinfo->id), + wstep->tp_number, paddress (wstep->tp_address)); + + /* Unlink the wstep. */ + *wstep_link = wstep->next; + release_while_stepping_state (wstep); + wstep = *wstep_link; + + /* Only check the hit count now, which ensure that we do all + our stepping before stopping the run. */ + if (tpoint->pass_count > 0 + && tpoint->hit_count >= tpoint->pass_count + && stopping_tracepoint == NULL) + stopping_tracepoint = tpoint; + } + else + { + /* Keep single-stepping until the requested numbers of steps + have occurred. */ + wstep_link = &wstep->next; + wstep = *wstep_link; + } + + if (stopping_tracepoint + || trace_buffer_is_full + || expr_eval_result != expr_eval_no_error) + { + stop_tracing (); + break; + } + } + + return 1; +} + +/* Handle any internal tracing control breakpoint hits. That means, + pull traceframes from the IPA to our buffer, and syncing both + tracing agents when the IPA's tracing stops for some reason. */ + +int +handle_tracepoint_bkpts (struct thread_info *tinfo, CORE_ADDR stop_pc) +{ + /* Pull in fast tracepoint trace frames from the inferior in-process + agent's buffer into our buffer. */ + + if (!agent_loaded_p ()) + return 0; + + upload_fast_traceframes (); + + /* Check if the in-process agent had decided we should stop + tracing. */ + if (stop_pc == ipa_sym_addrs.addr_stop_tracing) + { + int ipa_trace_buffer_is_full; + CORE_ADDR ipa_stopping_tracepoint; + int ipa_expr_eval_result; + CORE_ADDR ipa_error_tracepoint; + + trace_debug ("lib stopped at stop_tracing"); + + read_inferior_integer (ipa_sym_addrs.addr_trace_buffer_is_full, + &ipa_trace_buffer_is_full); + + read_inferior_data_pointer (ipa_sym_addrs.addr_stopping_tracepoint, + &ipa_stopping_tracepoint); + write_inferior_data_pointer (ipa_sym_addrs.addr_stopping_tracepoint, 0); + + read_inferior_data_pointer (ipa_sym_addrs.addr_error_tracepoint, + &ipa_error_tracepoint); + write_inferior_data_pointer (ipa_sym_addrs.addr_error_tracepoint, 0); + + read_inferior_integer (ipa_sym_addrs.addr_expr_eval_result, + &ipa_expr_eval_result); + write_inferior_integer (ipa_sym_addrs.addr_expr_eval_result, 0); + + trace_debug ("lib: trace_buffer_is_full: %d, " + "stopping_tracepoint: %s, " + "ipa_expr_eval_result: %d, " + "error_tracepoint: %s, ", + ipa_trace_buffer_is_full, + paddress (ipa_stopping_tracepoint), + ipa_expr_eval_result, + paddress (ipa_error_tracepoint)); + + if (debug_threads) + { + if (ipa_trace_buffer_is_full) + trace_debug ("lib stopped due to full buffer."); + if (ipa_stopping_tracepoint) + trace_debug ("lib stopped due to tpoint"); + if (ipa_error_tracepoint) + trace_debug ("lib stopped due to error"); + } + + if (ipa_stopping_tracepoint != 0) + { + stopping_tracepoint + = fast_tracepoint_from_ipa_tpoint_address (ipa_stopping_tracepoint); + } + else if (ipa_expr_eval_result != expr_eval_no_error) + { + expr_eval_result = ipa_expr_eval_result; + error_tracepoint + = fast_tracepoint_from_ipa_tpoint_address (ipa_error_tracepoint); + } + stop_tracing (); + return 1; + } + else if (stop_pc == ipa_sym_addrs.addr_flush_trace_buffer) + { + trace_debug ("lib stopped at flush_trace_buffer"); + return 1; + } + + return 0; +} + +/* Return true if TINFO just hit a tracepoint. Collect data if + so. */ + +int +tracepoint_was_hit (struct thread_info *tinfo, CORE_ADDR stop_pc) +{ + struct tracepoint *tpoint; + int ret = 0; + struct trap_tracepoint_ctx ctx; + + /* Not tracing, don't handle. */ + if (!tracing) + return 0; + + ctx.base.type = trap_tracepoint; + ctx.regcache = get_thread_regcache (tinfo, 1); + + for (tpoint = tracepoints; tpoint; tpoint = tpoint->next) + { + /* Note that we collect fast tracepoints here as well. We'll + step over the fast tracepoint jump later, which avoids the + double collect. However, we don't collect for static + tracepoints here, because UST markers are compiled in program, + and probes will be executed in program. So static tracepoints + are collected there. */ + if (tpoint->enabled && stop_pc == tpoint->address + && tpoint->type != static_tracepoint) + { + trace_debug ("Thread %s at address of tracepoint %d at 0x%s", + target_pid_to_str (tinfo->id), + tpoint->number, paddress (tpoint->address)); + + /* Test the condition if present, and collect if true. */ + if (!tpoint->cond + || (condition_true_at_tracepoint + ((struct tracepoint_hit_ctx *) &ctx, tpoint))) + collect_data_at_tracepoint ((struct tracepoint_hit_ctx *) &ctx, + stop_pc, tpoint); + + if (stopping_tracepoint + || trace_buffer_is_full + || expr_eval_result != expr_eval_no_error) + { + stop_tracing (); + } + /* If the tracepoint had a 'while-stepping' action, then set + the thread to collect this tracepoint on the following + single-steps. */ + else if (tpoint->step_count > 0) + { + add_while_stepping_state (tinfo, + tpoint->number, tpoint->address); + } + + ret = 1; + } + } + + return ret; +} + +#endif + +#if defined IN_PROCESS_AGENT && defined HAVE_UST +struct ust_marker_data; +static void collect_ust_data_at_tracepoint (struct tracepoint_hit_ctx *ctx, + struct traceframe *tframe); +#endif + +/* Create a trace frame for the hit of the given tracepoint in the + given thread. */ + +static void +collect_data_at_tracepoint (struct tracepoint_hit_ctx *ctx, CORE_ADDR stop_pc, + struct tracepoint *tpoint) +{ + struct traceframe *tframe; + int acti; + + /* Only count it as a hit when we actually collect data. */ + tpoint->hit_count++; + + /* If we've exceeded a defined pass count, record the event for + later, and finish the collection for this hit. This test is only + for nonstepping tracepoints, stepping tracepoints test at the end + of their while-stepping loop. */ + if (tpoint->pass_count > 0 + && tpoint->hit_count >= tpoint->pass_count + && tpoint->step_count == 0 + && stopping_tracepoint == NULL) + stopping_tracepoint = tpoint; + + trace_debug ("Making new traceframe for tracepoint %d at 0x%s, hit %" PRIu64, + tpoint->number, paddress (tpoint->address), tpoint->hit_count); + + tframe = add_traceframe (tpoint); + + if (tframe) + { + for (acti = 0; acti < tpoint->numactions; ++acti) + { +#ifndef IN_PROCESS_AGENT + trace_debug ("Tracepoint %d at 0x%s about to do action '%s'", + tpoint->number, paddress (tpoint->address), + tpoint->actions_str[acti]); +#endif + + do_action_at_tracepoint (ctx, stop_pc, tpoint, tframe, + tpoint->actions[acti]); + } + + finish_traceframe (tframe); + } + + if (tframe == NULL && tracing) + trace_buffer_is_full = 1; +} + +#ifndef IN_PROCESS_AGENT + +static void +collect_data_at_step (struct tracepoint_hit_ctx *ctx, + CORE_ADDR stop_pc, + struct tracepoint *tpoint, int current_step) +{ + struct traceframe *tframe; + int acti; + + trace_debug ("Making new step traceframe for " + "tracepoint %d at 0x%s, step %d of %" PRIu64 ", hit %" PRIu64, + tpoint->number, paddress (tpoint->address), + current_step, tpoint->step_count, + tpoint->hit_count); + + tframe = add_traceframe (tpoint); + + if (tframe) + { + for (acti = 0; acti < tpoint->num_step_actions; ++acti) + { + trace_debug ("Tracepoint %d at 0x%s about to do step action '%s'", + tpoint->number, paddress (tpoint->address), + tpoint->step_actions_str[acti]); + + do_action_at_tracepoint (ctx, stop_pc, tpoint, tframe, + tpoint->step_actions[acti]); + } + + finish_traceframe (tframe); + } + + if (tframe == NULL && tracing) + trace_buffer_is_full = 1; +} + +#endif + +#ifdef IN_PROCESS_AGENT +/* The target description index for IPA. Passed from gdbserver, used + to select ipa_tdesc. */ +EXTERN_C_PUSH +IP_AGENT_EXPORT_VAR int ipa_tdesc_idx; +EXTERN_C_POP +#endif + +static struct regcache * +get_context_regcache (struct tracepoint_hit_ctx *ctx) +{ + struct regcache *regcache = NULL; +#ifdef IN_PROCESS_AGENT + const struct target_desc *ipa_tdesc = get_ipa_tdesc (ipa_tdesc_idx); + + if (ctx->type == fast_tracepoint) + { + struct fast_tracepoint_ctx *fctx = (struct fast_tracepoint_ctx *) ctx; + if (!fctx->regcache_initted) + { + fctx->regcache_initted = 1; + init_register_cache (&fctx->regcache, ipa_tdesc, fctx->regspace); + supply_regblock (&fctx->regcache, NULL); + supply_fast_tracepoint_registers (&fctx->regcache, fctx->regs); + } + regcache = &fctx->regcache; + } +#ifdef HAVE_UST + if (ctx->type == static_tracepoint) + { + struct static_tracepoint_ctx *sctx + = (struct static_tracepoint_ctx *) ctx; + + if (!sctx->regcache_initted) + { + sctx->regcache_initted = 1; + init_register_cache (&sctx->regcache, ipa_tdesc, sctx->regspace); + supply_regblock (&sctx->regcache, NULL); + /* Pass down the tracepoint address, because REGS doesn't + include the PC, but we know what it must have been. */ + supply_static_tracepoint_registers (&sctx->regcache, + (const unsigned char *) + sctx->regs, + sctx->tpoint->address); + } + regcache = &sctx->regcache; + } +#endif +#else + if (ctx->type == trap_tracepoint) + { + struct trap_tracepoint_ctx *tctx = (struct trap_tracepoint_ctx *) ctx; + regcache = tctx->regcache; + } +#endif + + gdb_assert (regcache != NULL); + + return regcache; +} + +static void +do_action_at_tracepoint (struct tracepoint_hit_ctx *ctx, + CORE_ADDR stop_pc, + struct tracepoint *tpoint, + struct traceframe *tframe, + struct tracepoint_action *taction) +{ + enum eval_result_type err; + + switch (taction->type) + { + case 'M': + { + struct collect_memory_action *maction; + struct eval_agent_expr_context ax_ctx; + + maction = (struct collect_memory_action *) taction; + ax_ctx.regcache = NULL; + ax_ctx.tframe = tframe; + ax_ctx.tpoint = tpoint; + + trace_debug ("Want to collect %s bytes at 0x%s (basereg %d)", + pulongest (maction->len), + paddress (maction->addr), maction->basereg); + /* (should use basereg) */ + agent_mem_read (&ax_ctx, NULL, (CORE_ADDR) maction->addr, + maction->len); + break; + } + case 'R': + { + unsigned char *regspace; + struct regcache tregcache; + struct regcache *context_regcache; + int regcache_size; + + trace_debug ("Want to collect registers"); + + context_regcache = get_context_regcache (ctx); + regcache_size = register_cache_size (context_regcache->tdesc); + + /* Collect all registers for now. */ + regspace = add_traceframe_block (tframe, tpoint, 1 + regcache_size); + if (regspace == NULL) + { + trace_debug ("Trace buffer block allocation failed, skipping"); + break; + } + /* Identify a register block. */ + *regspace = 'R'; + + /* Wrap the regblock in a register cache (in the stack, we + don't want to malloc here). */ + init_register_cache (&tregcache, context_regcache->tdesc, + regspace + 1); + + /* Copy the register data to the regblock. */ + regcache_cpy (&tregcache, context_regcache); + +#ifndef IN_PROCESS_AGENT + /* On some platforms, trap-based tracepoints will have the PC + pointing to the next instruction after the trap, but we + don't want the user or GDB trying to guess whether the + saved PC needs adjusting; so always record the adjusted + stop_pc. Note that we can't use tpoint->address instead, + since it will be wrong for while-stepping actions. This + adjustment is a nop for fast tracepoints collected from the + in-process lib (but not if GDBserver is collecting one + preemptively), since the PC had already been adjusted to + contain the tracepoint's address by the jump pad. */ + trace_debug ("Storing stop pc (0x%s) in regblock", + paddress (stop_pc)); + + /* This changes the regblock, not the thread's + regcache. */ + regcache_write_pc (&tregcache, stop_pc); +#endif + } + break; + case 'X': + { + struct eval_expr_action *eaction; + struct eval_agent_expr_context ax_ctx; + + eaction = (struct eval_expr_action *) taction; + ax_ctx.regcache = get_context_regcache (ctx); + ax_ctx.tframe = tframe; + ax_ctx.tpoint = tpoint; + + trace_debug ("Want to evaluate expression"); + + err = gdb_eval_agent_expr (&ax_ctx, eaction->expr, NULL); + + if (err != expr_eval_no_error) + { + record_tracepoint_error (tpoint, "action expression", err); + return; + } + } + break; + case 'L': + { +#if defined IN_PROCESS_AGENT && defined HAVE_UST + trace_debug ("Want to collect static trace data"); + collect_ust_data_at_tracepoint (ctx, tframe); +#else + trace_debug ("warning: collecting static trace data, " + "but static tracepoints are not supported"); +#endif + } + break; + default: + trace_debug ("unknown trace action '%c', ignoring", taction->type); + break; + } +} + +static int +condition_true_at_tracepoint (struct tracepoint_hit_ctx *ctx, + struct tracepoint *tpoint) +{ + ULONGEST value = 0; + enum eval_result_type err; + + /* Presently, gdbserver doesn't run compiled conditions, only the + IPA does. If the program stops at a fast tracepoint's address + (e.g., due to a breakpoint, trap tracepoint, or stepping), + gdbserver preemptively collect the fast tracepoint. Later, on + resume, gdbserver steps over the fast tracepoint like it steps + over breakpoints, so that the IPA doesn't see that fast + tracepoint. This avoids double collects of fast tracepoints in + that stopping scenario. Having gdbserver itself handle the fast + tracepoint gives the user a consistent view of when fast or trap + tracepoints are collected, compared to an alternative where only + trap tracepoints are collected on stop, and fast tracepoints on + resume. When a fast tracepoint is being processed by gdbserver, + it is always the non-compiled condition expression that is + used. */ +#ifdef IN_PROCESS_AGENT + if (tpoint->compiled_cond) + { + struct fast_tracepoint_ctx *fctx = (struct fast_tracepoint_ctx *) ctx; + err = ((condfn) (uintptr_t) (tpoint->compiled_cond)) (fctx->regs, &value); + } + else +#endif + { + struct eval_agent_expr_context ax_ctx; + + ax_ctx.regcache = get_context_regcache (ctx); + ax_ctx.tframe = NULL; + ax_ctx.tpoint = tpoint; + + err = gdb_eval_agent_expr (&ax_ctx, tpoint->cond, &value); + } + if (err != expr_eval_no_error) + { + record_tracepoint_error (tpoint, "condition", err); + /* The error case must return false. */ + return 0; + } + + trace_debug ("Tracepoint %d at 0x%s condition evals to %s", + tpoint->number, paddress (tpoint->address), + pulongest (value)); + return (value ? 1 : 0); +} + +/* Do memory copies for bytecodes. */ +/* Do the recording of memory blocks for actions and bytecodes. */ + +int +agent_mem_read (struct eval_agent_expr_context *ctx, + unsigned char *to, CORE_ADDR from, ULONGEST len) +{ + unsigned char *mspace; + ULONGEST remaining = len; + unsigned short blocklen; + + /* If a 'to' buffer is specified, use it. */ + if (to != NULL) + { + read_inferior_memory (from, to, len); + return 0; + } + + /* Otherwise, create a new memory block in the trace buffer. */ + while (remaining > 0) + { + size_t sp; + + blocklen = (remaining > 65535 ? 65535 : remaining); + sp = 1 + sizeof (from) + sizeof (blocklen) + blocklen; + mspace = add_traceframe_block (ctx->tframe, ctx->tpoint, sp); + if (mspace == NULL) + return 1; + /* Identify block as a memory block. */ + *mspace = 'M'; + ++mspace; + /* Record address and size. */ + memcpy (mspace, &from, sizeof (from)); + mspace += sizeof (from); + memcpy (mspace, &blocklen, sizeof (blocklen)); + mspace += sizeof (blocklen); + /* Record the memory block proper. */ + read_inferior_memory (from, mspace, blocklen); + trace_debug ("%d bytes recorded", blocklen); + remaining -= blocklen; + from += blocklen; + } + return 0; +} + +int +agent_mem_read_string (struct eval_agent_expr_context *ctx, + unsigned char *to, CORE_ADDR from, ULONGEST len) +{ + unsigned char *buf, *mspace; + ULONGEST remaining = len; + unsigned short blocklen, i; + + /* To save a bit of space, block lengths are 16-bit, so break large + requests into multiple blocks. Bordering on overkill for strings, + but it could happen that someone specifies a large max length. */ + while (remaining > 0) + { + size_t sp; + + blocklen = (remaining > 65535 ? 65535 : remaining); + /* We want working space to accumulate nonzero bytes, since + traceframes must have a predecided size (otherwise it gets + harder to wrap correctly for the circular case, etc). */ + buf = (unsigned char *) xmalloc (blocklen + 1); + for (i = 0; i < blocklen; ++i) + { + /* Read the string one byte at a time, in case the string is + at the end of a valid memory area - we don't want a + correctly-terminated string to engender segvio + complaints. */ + read_inferior_memory (from + i, buf + i, 1); + + if (buf[i] == '\0') + { + blocklen = i + 1; + /* Make sure outer loop stops now too. */ + remaining = blocklen; + break; + } + } + sp = 1 + sizeof (from) + sizeof (blocklen) + blocklen; + mspace = add_traceframe_block (ctx->tframe, ctx->tpoint, sp); + if (mspace == NULL) + { + xfree (buf); + return 1; + } + /* Identify block as a memory block. */ + *mspace = 'M'; + ++mspace; + /* Record address and size. */ + memcpy ((void *) mspace, (void *) &from, sizeof (from)); + mspace += sizeof (from); + memcpy ((void *) mspace, (void *) &blocklen, sizeof (blocklen)); + mspace += sizeof (blocklen); + /* Copy the string contents. */ + memcpy ((void *) mspace, (void *) buf, blocklen); + remaining -= blocklen; + from += blocklen; + xfree (buf); + } + return 0; +} + +/* Record the value of a trace state variable. */ + +int +agent_tsv_read (struct eval_agent_expr_context *ctx, int n) +{ + unsigned char *vspace; + LONGEST val; + + vspace = add_traceframe_block (ctx->tframe, ctx->tpoint, + 1 + sizeof (n) + sizeof (LONGEST)); + if (vspace == NULL) + return 1; + /* Identify block as a variable. */ + *vspace = 'V'; + /* Record variable's number and value. */ + memcpy (vspace + 1, &n, sizeof (n)); + val = get_trace_state_variable_value (n); + memcpy (vspace + 1 + sizeof (n), &val, sizeof (val)); + trace_debug ("Variable %d recorded", n); + return 0; +} + +#ifndef IN_PROCESS_AGENT + +/* Callback for traceframe_walk_blocks, used to find a given block + type in a traceframe. */ + +static int +match_blocktype (char blocktype, unsigned char *dataptr, void *data) +{ + char *wantedp = (char *) data; + + if (*wantedp == blocktype) + return 1; + + return 0; +} + +/* Walk over all traceframe blocks of the traceframe buffer starting + at DATABASE, of DATASIZE bytes long, and call CALLBACK for each + block found, passing in DATA unmodified. If CALLBACK returns true, + this returns a pointer to where the block is found. Returns NULL + if no callback call returned true, indicating that all blocks have + been walked. */ + +static unsigned char * +traceframe_walk_blocks (unsigned char *database, unsigned int datasize, + int tfnum, + int (*callback) (char blocktype, + unsigned char *dataptr, + void *data), + void *data) +{ + unsigned char *dataptr; + + if (datasize == 0) + { + trace_debug ("traceframe %d has no data", tfnum); + return NULL; + } + + /* Iterate through a traceframe's blocks, looking for a block of the + requested type. */ + for (dataptr = database; + dataptr < database + datasize; + /* nothing */) + { + char blocktype; + unsigned short mlen; + + if (dataptr == trace_buffer_wrap) + { + /* Adjust to reflect wrapping part of the frame around to + the beginning. */ + datasize = dataptr - database; + dataptr = database = trace_buffer_lo; + } + + blocktype = *dataptr++; + + if ((*callback) (blocktype, dataptr, data)) + return dataptr; + + switch (blocktype) + { + case 'R': + /* Skip over the registers block. */ + dataptr += current_target_desc ()->registers_size; + break; + case 'M': + /* Skip over the memory block. */ + dataptr += sizeof (CORE_ADDR); + memcpy (&mlen, dataptr, sizeof (mlen)); + dataptr += (sizeof (mlen) + mlen); + break; + case 'V': + /* Skip over the TSV block. */ + dataptr += (sizeof (int) + sizeof (LONGEST)); + break; + case 'S': + /* Skip over the static trace data block. */ + memcpy (&mlen, dataptr, sizeof (mlen)); + dataptr += (sizeof (mlen) + mlen); + break; + default: + trace_debug ("traceframe %d has unknown block type 0x%x", + tfnum, blocktype); + return NULL; + } + } + + return NULL; +} + +/* Look for the block of type TYPE_WANTED in the traceframe starting + at DATABASE of DATASIZE bytes long. TFNUM is the traceframe + number. */ + +static unsigned char * +traceframe_find_block_type (unsigned char *database, unsigned int datasize, + int tfnum, char type_wanted) +{ + return traceframe_walk_blocks (database, datasize, tfnum, + match_blocktype, &type_wanted); +} + +static unsigned char * +traceframe_find_regblock (struct traceframe *tframe, int tfnum) +{ + unsigned char *regblock; + + regblock = traceframe_find_block_type (tframe->data, + tframe->data_size, + tfnum, 'R'); + + if (regblock == NULL) + trace_debug ("traceframe %d has no register data", tfnum); + + return regblock; +} + +/* Get registers from a traceframe. */ + +int +fetch_traceframe_registers (int tfnum, struct regcache *regcache, int regnum) +{ + unsigned char *dataptr; + struct tracepoint *tpoint; + struct traceframe *tframe; + + tframe = find_traceframe (tfnum); + + if (tframe == NULL) + { + trace_debug ("traceframe %d not found", tfnum); + return 1; + } + + dataptr = traceframe_find_regblock (tframe, tfnum); + if (dataptr == NULL) + { + /* Mark registers unavailable. */ + supply_regblock (regcache, NULL); + + /* We can generally guess at a PC, although this will be + misleading for while-stepping frames and multi-location + tracepoints. */ + tpoint = find_next_tracepoint_by_number (NULL, tframe->tpnum); + if (tpoint != NULL) + regcache_write_pc (regcache, tpoint->address); + } + else + supply_regblock (regcache, dataptr); + + return 0; +} + +static CORE_ADDR +traceframe_get_pc (struct traceframe *tframe) +{ + struct regcache regcache; + unsigned char *dataptr; + const struct target_desc *tdesc = current_target_desc (); + + dataptr = traceframe_find_regblock (tframe, -1); + if (dataptr == NULL) + return 0; + + init_register_cache (®cache, tdesc, dataptr); + return regcache_read_pc (®cache); +} + +/* Read a requested block of memory from a trace frame. */ + +int +traceframe_read_mem (int tfnum, CORE_ADDR addr, + unsigned char *buf, ULONGEST length, + ULONGEST *nbytes) +{ + struct traceframe *tframe; + unsigned char *database, *dataptr; + unsigned int datasize; + CORE_ADDR maddr; + unsigned short mlen; + + trace_debug ("traceframe_read_mem"); + + tframe = find_traceframe (tfnum); + + if (!tframe) + { + trace_debug ("traceframe %d not found", tfnum); + return 1; + } + + datasize = tframe->data_size; + database = dataptr = &tframe->data[0]; + + /* Iterate through a traceframe's blocks, looking for memory. */ + while ((dataptr = traceframe_find_block_type (dataptr, + datasize + - (dataptr - database), + tfnum, 'M')) != NULL) + { + memcpy (&maddr, dataptr, sizeof (maddr)); + dataptr += sizeof (maddr); + memcpy (&mlen, dataptr, sizeof (mlen)); + dataptr += sizeof (mlen); + trace_debug ("traceframe %d has %d bytes at %s", + tfnum, mlen, paddress (maddr)); + + /* If the block includes the first part of the desired range, + return as much it has; GDB will re-request the remainder, + which might be in a different block of this trace frame. */ + if (maddr <= addr && addr < (maddr + mlen)) + { + ULONGEST amt = (maddr + mlen) - addr; + if (amt > length) + amt = length; + + memcpy (buf, dataptr + (addr - maddr), amt); + *nbytes = amt; + return 0; + } + + /* Skip over this block. */ + dataptr += mlen; + } + + trace_debug ("traceframe %d has no memory data for the desired region", + tfnum); + + *nbytes = 0; + return 0; +} + +static int +traceframe_read_tsv (int tsvnum, LONGEST *val) +{ + client_state &cs = get_client_state (); + int tfnum; + struct traceframe *tframe; + unsigned char *database, *dataptr; + unsigned int datasize; + int vnum; + int found = 0; + + trace_debug ("traceframe_read_tsv"); + + tfnum = cs.current_traceframe; + + if (tfnum < 0) + { + trace_debug ("no current traceframe"); + return 1; + } + + tframe = find_traceframe (tfnum); + + if (tframe == NULL) + { + trace_debug ("traceframe %d not found", tfnum); + return 1; + } + + datasize = tframe->data_size; + database = dataptr = &tframe->data[0]; + + /* Iterate through a traceframe's blocks, looking for the last + matched tsv. */ + while ((dataptr = traceframe_find_block_type (dataptr, + datasize + - (dataptr - database), + tfnum, 'V')) != NULL) + { + memcpy (&vnum, dataptr, sizeof (vnum)); + dataptr += sizeof (vnum); + + trace_debug ("traceframe %d has variable %d", tfnum, vnum); + + /* Check that this is the variable we want. */ + if (tsvnum == vnum) + { + memcpy (val, dataptr, sizeof (*val)); + found = 1; + } + + /* Skip over this block. */ + dataptr += sizeof (LONGEST); + } + + if (!found) + trace_debug ("traceframe %d has no data for variable %d", + tfnum, tsvnum); + return !found; +} + +/* Read a requested block of static tracepoint data from a trace + frame. */ + +int +traceframe_read_sdata (int tfnum, ULONGEST offset, + unsigned char *buf, ULONGEST length, + ULONGEST *nbytes) +{ + struct traceframe *tframe; + unsigned char *database, *dataptr; + unsigned int datasize; + unsigned short mlen; + + trace_debug ("traceframe_read_sdata"); + + tframe = find_traceframe (tfnum); + + if (!tframe) + { + trace_debug ("traceframe %d not found", tfnum); + return 1; + } + + datasize = tframe->data_size; + database = &tframe->data[0]; + + /* Iterate through a traceframe's blocks, looking for static + tracepoint data. */ + dataptr = traceframe_find_block_type (database, datasize, + tfnum, 'S'); + if (dataptr != NULL) + { + memcpy (&mlen, dataptr, sizeof (mlen)); + dataptr += sizeof (mlen); + if (offset < mlen) + { + if (offset + length > mlen) + length = mlen - offset; + + memcpy (buf, dataptr, length); + *nbytes = length; + } + else + *nbytes = 0; + return 0; + } + + trace_debug ("traceframe %d has no static trace data", tfnum); + + *nbytes = 0; + return 0; +} + +/* Callback for traceframe_walk_blocks. Builds a traceframe-info + object. DATA is pointer to a struct buffer holding the + traceframe-info object being built. */ + +static int +build_traceframe_info_xml (char blocktype, unsigned char *dataptr, void *data) +{ + struct buffer *buffer = (struct buffer *) data; + + switch (blocktype) + { + case 'M': + { + unsigned short mlen; + CORE_ADDR maddr; + + memcpy (&maddr, dataptr, sizeof (maddr)); + dataptr += sizeof (maddr); + memcpy (&mlen, dataptr, sizeof (mlen)); + dataptr += sizeof (mlen); + buffer_xml_printf (buffer, + "<memory start=\"0x%s\" length=\"0x%s\"/>\n", + paddress (maddr), phex_nz (mlen, sizeof (mlen))); + break; + } + case 'V': + { + int vnum; + + memcpy (&vnum, dataptr, sizeof (vnum)); + buffer_xml_printf (buffer, "<tvar id=\"%d\"/>\n", vnum); + break; + } + case 'R': + case 'S': + { + break; + } + default: + warning ("Unhandled trace block type (%d) '%c ' " + "while building trace frame info.", + blocktype, blocktype); + break; + } + + return 0; +} + +/* Build a traceframe-info object for traceframe number TFNUM into + BUFFER. */ + +int +traceframe_read_info (int tfnum, struct buffer *buffer) +{ + struct traceframe *tframe; + + trace_debug ("traceframe_read_info"); + + tframe = find_traceframe (tfnum); + + if (!tframe) + { + trace_debug ("traceframe %d not found", tfnum); + return 1; + } + + buffer_grow_str (buffer, "<traceframe-info>\n"); + traceframe_walk_blocks (tframe->data, tframe->data_size, + tfnum, build_traceframe_info_xml, buffer); + buffer_grow_str0 (buffer, "</traceframe-info>\n"); + return 0; +} + +/* Return the first fast tracepoint whose jump pad contains PC. */ + +static struct tracepoint * +fast_tracepoint_from_jump_pad_address (CORE_ADDR pc) +{ + struct tracepoint *tpoint; + + for (tpoint = tracepoints; tpoint; tpoint = tpoint->next) + if (tpoint->type == fast_tracepoint) + if (tpoint->jump_pad <= pc && pc < tpoint->jump_pad_end) + return tpoint; + + return NULL; +} + +/* Return the first fast tracepoint whose trampoline contains PC. */ + +static struct tracepoint * +fast_tracepoint_from_trampoline_address (CORE_ADDR pc) +{ + struct tracepoint *tpoint; + + for (tpoint = tracepoints; tpoint; tpoint = tpoint->next) + { + if (tpoint->type == fast_tracepoint + && tpoint->trampoline <= pc && pc < tpoint->trampoline_end) + return tpoint; + } + + return NULL; +} + +/* Return GDBserver's tracepoint that matches the IP Agent's + tracepoint object that lives at IPA_TPOINT_OBJ in the IP Agent's + address space. */ + +static struct tracepoint * +fast_tracepoint_from_ipa_tpoint_address (CORE_ADDR ipa_tpoint_obj) +{ + struct tracepoint *tpoint; + + for (tpoint = tracepoints; tpoint; tpoint = tpoint->next) + if (tpoint->type == fast_tracepoint) + if (tpoint->obj_addr_on_target == ipa_tpoint_obj) + return tpoint; + + return NULL; +} + +#endif + +/* The type of the object that is used to synchronize fast tracepoint + collection. */ + +typedef struct collecting_t +{ + /* The fast tracepoint number currently collecting. */ + uintptr_t tpoint; + + /* A number that GDBserver can use to identify the thread that is + presently holding the collect lock. This need not (and usually + is not) the thread id, as getting the current thread ID usually + requires a system call, which we want to avoid like the plague. + Usually this is thread's TCB, found in the TLS (pseudo-) + register, which is readable with a single insn on several + architectures. */ + uintptr_t thread_area; +} collecting_t; + +#ifndef IN_PROCESS_AGENT + +void +force_unlock_trace_buffer (void) +{ + write_inferior_data_pointer (ipa_sym_addrs.addr_collecting, 0); +} + +/* Check if the thread identified by THREAD_AREA which is stopped at + STOP_PC, is presently locking the fast tracepoint collection, and + if so, gather some status of said collection. Returns 0 if the + thread isn't collecting or in the jump pad at all. 1, if in the + jump pad (or within gdb_collect) and hasn't executed the adjusted + original insn yet (can set a breakpoint there and run to it). 2, + if presently executing the adjusted original insn --- in which + case, if we want to move the thread out of the jump pad, we need to + single-step it until this function returns 0. */ + +fast_tpoint_collect_result +fast_tracepoint_collecting (CORE_ADDR thread_area, + CORE_ADDR stop_pc, + struct fast_tpoint_collect_status *status) +{ + CORE_ADDR ipa_collecting; + CORE_ADDR ipa_gdb_jump_pad_buffer, ipa_gdb_jump_pad_buffer_end; + CORE_ADDR ipa_gdb_trampoline_buffer; + CORE_ADDR ipa_gdb_trampoline_buffer_end; + struct tracepoint *tpoint; + int needs_breakpoint; + + /* The thread THREAD_AREA is either: + + 0. not collecting at all, not within the jump pad, or within + gdb_collect or one of its callees. + + 1. in the jump pad and haven't reached gdb_collect + + 2. within gdb_collect (out of the jump pad) (collect is set) + + 3. we're in the jump pad, after gdb_collect having returned, + possibly executing the adjusted insns. + + For cases 1 and 3, `collecting' may or not be set. The jump pad + doesn't have any complicated jump logic, so we can tell if the + thread is executing the adjust original insn or not by just + matching STOP_PC with known jump pad addresses. If we it isn't + yet executing the original insn, set a breakpoint there, and let + the thread run to it, so to quickly step over a possible (many + insns) gdb_collect call. Otherwise, or when the breakpoint is + hit, only a few (small number of) insns are left to be executed + in the jump pad. Single-step the thread until it leaves the + jump pad. */ + + again: + tpoint = NULL; + needs_breakpoint = 0; + trace_debug ("fast_tracepoint_collecting"); + + if (read_inferior_data_pointer (ipa_sym_addrs.addr_gdb_jump_pad_buffer, + &ipa_gdb_jump_pad_buffer)) + { + internal_error (__FILE__, __LINE__, + "error extracting `gdb_jump_pad_buffer'"); + } + if (read_inferior_data_pointer (ipa_sym_addrs.addr_gdb_jump_pad_buffer_end, + &ipa_gdb_jump_pad_buffer_end)) + { + internal_error (__FILE__, __LINE__, + "error extracting `gdb_jump_pad_buffer_end'"); + } + + if (read_inferior_data_pointer (ipa_sym_addrs.addr_gdb_trampoline_buffer, + &ipa_gdb_trampoline_buffer)) + { + internal_error (__FILE__, __LINE__, + "error extracting `gdb_trampoline_buffer'"); + } + if (read_inferior_data_pointer (ipa_sym_addrs.addr_gdb_trampoline_buffer_end, + &ipa_gdb_trampoline_buffer_end)) + { + internal_error (__FILE__, __LINE__, + "error extracting `gdb_trampoline_buffer_end'"); + } + + if (ipa_gdb_jump_pad_buffer <= stop_pc + && stop_pc < ipa_gdb_jump_pad_buffer_end) + { + /* We can tell which tracepoint(s) the thread is collecting by + matching the jump pad address back to the tracepoint. */ + tpoint = fast_tracepoint_from_jump_pad_address (stop_pc); + if (tpoint == NULL) + { + warning ("in jump pad, but no matching tpoint?"); + return fast_tpoint_collect_result::not_collecting; + } + else + { + trace_debug ("in jump pad of tpoint (%d, %s); jump_pad(%s, %s); " + "adj_insn(%s, %s)", + tpoint->number, paddress (tpoint->address), + paddress (tpoint->jump_pad), + paddress (tpoint->jump_pad_end), + paddress (tpoint->adjusted_insn_addr), + paddress (tpoint->adjusted_insn_addr_end)); + } + + /* Definitely in the jump pad. May or may not need + fast-exit-jump-pad breakpoint. */ + if (tpoint->jump_pad <= stop_pc + && stop_pc < tpoint->adjusted_insn_addr) + needs_breakpoint = 1; + } + else if (ipa_gdb_trampoline_buffer <= stop_pc + && stop_pc < ipa_gdb_trampoline_buffer_end) + { + /* We can tell which tracepoint(s) the thread is collecting by + matching the trampoline address back to the tracepoint. */ + tpoint = fast_tracepoint_from_trampoline_address (stop_pc); + if (tpoint == NULL) + { + warning ("in trampoline, but no matching tpoint?"); + return fast_tpoint_collect_result::not_collecting; + } + else + { + trace_debug ("in trampoline of tpoint (%d, %s); trampoline(%s, %s)", + tpoint->number, paddress (tpoint->address), + paddress (tpoint->trampoline), + paddress (tpoint->trampoline_end)); + } + + /* Have not reached jump pad yet, but treat the trampoline as a + part of the jump pad that is before the adjusted original + instruction. */ + needs_breakpoint = 1; + } + else + { + collecting_t ipa_collecting_obj; + + /* If `collecting' is set/locked, then the THREAD_AREA thread + may or not be the one holding the lock. We have to read the + lock to find out. */ + + if (read_inferior_data_pointer (ipa_sym_addrs.addr_collecting, + &ipa_collecting)) + { + trace_debug ("fast_tracepoint_collecting:" + " failed reading 'collecting' in the inferior"); + return fast_tpoint_collect_result::not_collecting; + } + + if (!ipa_collecting) + { + trace_debug ("fast_tracepoint_collecting: not collecting" + " (and nobody is)."); + return fast_tpoint_collect_result::not_collecting; + } + + /* Some thread is collecting. Check which. */ + if (read_inferior_memory (ipa_collecting, + (unsigned char *) &ipa_collecting_obj, + sizeof (ipa_collecting_obj)) != 0) + goto again; + + if (ipa_collecting_obj.thread_area != thread_area) + { + trace_debug ("fast_tracepoint_collecting: not collecting " + "(another thread is)"); + return fast_tpoint_collect_result::not_collecting; + } + + tpoint + = fast_tracepoint_from_ipa_tpoint_address (ipa_collecting_obj.tpoint); + if (tpoint == NULL) + { + warning ("fast_tracepoint_collecting: collecting, " + "but tpoint %s not found?", + paddress ((CORE_ADDR) ipa_collecting_obj.tpoint)); + return fast_tpoint_collect_result::not_collecting; + } + + /* The thread is within `gdb_collect', skip over the rest of + fast tracepoint collection quickly using a breakpoint. */ + needs_breakpoint = 1; + } + + /* The caller wants a bit of status detail. */ + if (status != NULL) + { + status->tpoint_num = tpoint->number; + status->tpoint_addr = tpoint->address; + status->adjusted_insn_addr = tpoint->adjusted_insn_addr; + status->adjusted_insn_addr_end = tpoint->adjusted_insn_addr_end; + } + + if (needs_breakpoint) + { + /* Hasn't executed the original instruction yet. Set breakpoint + there, and wait till it's hit, then single-step until exiting + the jump pad. */ + + trace_debug ("\ +fast_tracepoint_collecting, returning continue-until-break at %s", + paddress (tpoint->adjusted_insn_addr)); + + return fast_tpoint_collect_result::before_insn; /* continue */ + } + else + { + /* Just single-step until exiting the jump pad. */ + + trace_debug ("fast_tracepoint_collecting, returning " + "need-single-step (%s-%s)", + paddress (tpoint->adjusted_insn_addr), + paddress (tpoint->adjusted_insn_addr_end)); + + return fast_tpoint_collect_result::at_insn; /* single-step */ + } +} + +#endif + +#ifdef IN_PROCESS_AGENT + +/* The global fast tracepoint collect lock. Points to a collecting_t + object built on the stack by the jump pad, if presently locked; + NULL if it isn't locked. Note that this lock *must* be set while + executing any *function other than the jump pad. See + fast_tracepoint_collecting. */ +EXTERN_C_PUSH +IP_AGENT_EXPORT_VAR collecting_t *collecting; +EXTERN_C_POP + +/* This is needed for -Wmissing-declarations. */ +IP_AGENT_EXPORT_FUNC void gdb_collect (struct tracepoint *tpoint, + unsigned char *regs); + +/* This routine, called from the jump pad (in asm) is designed to be + called from the jump pads of fast tracepoints, thus it is on the + critical path. */ + +IP_AGENT_EXPORT_FUNC void +gdb_collect (struct tracepoint *tpoint, unsigned char *regs) +{ + struct fast_tracepoint_ctx ctx; + const struct target_desc *ipa_tdesc; + + /* Don't do anything until the trace run is completely set up. */ + if (!tracing) + return; + + ipa_tdesc = get_ipa_tdesc (ipa_tdesc_idx); + ctx.base.type = fast_tracepoint; + ctx.regs = regs; + ctx.regcache_initted = 0; + /* Wrap the regblock in a register cache (in the stack, we don't + want to malloc here). */ + ctx.regspace = (unsigned char *) alloca (ipa_tdesc->registers_size); + if (ctx.regspace == NULL) + { + trace_debug ("Trace buffer block allocation failed, skipping"); + return; + } + + for (ctx.tpoint = tpoint; + ctx.tpoint != NULL && ctx.tpoint->address == tpoint->address; + ctx.tpoint = ctx.tpoint->next) + { + if (!ctx.tpoint->enabled) + continue; + + /* Multiple tracepoints of different types, such as fast tracepoint and + static tracepoint, can be set at the same address. */ + if (ctx.tpoint->type != tpoint->type) + continue; + + /* Test the condition if present, and collect if true. */ + if (ctx.tpoint->cond == NULL + || condition_true_at_tracepoint ((struct tracepoint_hit_ctx *) &ctx, + ctx.tpoint)) + { + collect_data_at_tracepoint ((struct tracepoint_hit_ctx *) &ctx, + ctx.tpoint->address, ctx.tpoint); + + /* Note that this will cause original insns to be written back + to where we jumped from, but that's OK because we're jumping + back to the next whole instruction. This will go badly if + instruction restoration is not atomic though. */ + if (stopping_tracepoint + || trace_buffer_is_full + || expr_eval_result != expr_eval_no_error) + { + stop_tracing (); + break; + } + } + else + { + /* If there was a condition and it evaluated to false, the only + way we would stop tracing is if there was an error during + condition expression evaluation. */ + if (expr_eval_result != expr_eval_no_error) + { + stop_tracing (); + break; + } + } + } +} + +/* These global variables points to the corresponding functions. This is + necessary on powerpc64, where asking for function symbol address from gdb + results in returning the actual code pointer, instead of the descriptor + pointer. */ + +typedef void (*gdb_collect_ptr_type) (struct tracepoint *, unsigned char *); +typedef ULONGEST (*get_raw_reg_ptr_type) (const unsigned char *, int); +typedef LONGEST (*get_trace_state_variable_value_ptr_type) (int); +typedef void (*set_trace_state_variable_value_ptr_type) (int, LONGEST); + +EXTERN_C_PUSH +IP_AGENT_EXPORT_VAR gdb_collect_ptr_type gdb_collect_ptr = gdb_collect; +IP_AGENT_EXPORT_VAR get_raw_reg_ptr_type get_raw_reg_ptr = get_raw_reg; +IP_AGENT_EXPORT_VAR get_trace_state_variable_value_ptr_type + get_trace_state_variable_value_ptr = get_trace_state_variable_value; +IP_AGENT_EXPORT_VAR set_trace_state_variable_value_ptr_type + set_trace_state_variable_value_ptr = set_trace_state_variable_value; +EXTERN_C_POP + +#endif + +#ifndef IN_PROCESS_AGENT + +CORE_ADDR +get_raw_reg_func_addr (void) +{ + CORE_ADDR res; + if (read_inferior_data_pointer (ipa_sym_addrs.addr_get_raw_reg_ptr, &res)) + { + error ("error extracting get_raw_reg_ptr"); + return 0; + } + return res; +} + +CORE_ADDR +get_get_tsv_func_addr (void) +{ + CORE_ADDR res; + if (read_inferior_data_pointer ( + ipa_sym_addrs.addr_get_trace_state_variable_value_ptr, &res)) + { + error ("error extracting get_trace_state_variable_value_ptr"); + return 0; + } + return res; +} + +CORE_ADDR +get_set_tsv_func_addr (void) +{ + CORE_ADDR res; + if (read_inferior_data_pointer ( + ipa_sym_addrs.addr_set_trace_state_variable_value_ptr, &res)) + { + error ("error extracting set_trace_state_variable_value_ptr"); + return 0; + } + return res; +} + +static void +compile_tracepoint_condition (struct tracepoint *tpoint, + CORE_ADDR *jump_entry) +{ + CORE_ADDR entry_point = *jump_entry; + enum eval_result_type err; + + trace_debug ("Starting condition compilation for tracepoint %d\n", + tpoint->number); + + /* Initialize the global pointer to the code being built. */ + current_insn_ptr = *jump_entry; + + emit_prologue (); + + err = compile_bytecodes (tpoint->cond); + + if (err == expr_eval_no_error) + { + emit_epilogue (); + + /* Record the beginning of the compiled code. */ + tpoint->compiled_cond = entry_point; + + trace_debug ("Condition compilation for tracepoint %d complete\n", + tpoint->number); + } + else + { + /* Leave the unfinished code in situ, but don't point to it. */ + + tpoint->compiled_cond = 0; + + trace_debug ("Condition compilation for tracepoint %d failed, " + "error code %d", + tpoint->number, err); + } + + /* Update the code pointer passed in. Note that we do this even if + the compile fails, so that we can look at the partial results + instead of letting them be overwritten. */ + *jump_entry = current_insn_ptr; + + /* Leave a gap, to aid dump decipherment. */ + *jump_entry += 16; +} + +/* The base pointer of the IPA's heap. This is the only memory the + IPA is allowed to use. The IPA should _not_ call the inferior's + `malloc' during operation. That'd be slow, and, most importantly, + it may not be safe. We may be collecting a tracepoint in a signal + handler, for example. */ +static CORE_ADDR target_tp_heap; + +/* Allocate at least SIZE bytes of memory from the IPA heap, aligned + to 8 bytes. */ + +static CORE_ADDR +target_malloc (ULONGEST size) +{ + CORE_ADDR ptr; + + if (target_tp_heap == 0) + { + /* We have the pointer *address*, need what it points to. */ + if (read_inferior_data_pointer (ipa_sym_addrs.addr_gdb_tp_heap_buffer, + &target_tp_heap)) + { + internal_error (__FILE__, __LINE__, + "couldn't get target heap head pointer"); + } + } + + ptr = target_tp_heap; + target_tp_heap += size; + + /* Pad to 8-byte alignment. */ + target_tp_heap = ((target_tp_heap + 7) & ~0x7); + + return ptr; +} + +static CORE_ADDR +download_agent_expr (struct agent_expr *expr) +{ + CORE_ADDR expr_addr; + CORE_ADDR expr_bytes; + + expr_addr = target_malloc (sizeof (*expr)); + target_write_memory (expr_addr, (unsigned char *) expr, sizeof (*expr)); + + expr_bytes = target_malloc (expr->length); + write_inferior_data_pointer (expr_addr + offsetof (struct agent_expr, bytes), + expr_bytes); + target_write_memory (expr_bytes, expr->bytes, expr->length); + + return expr_addr; +} + +/* Align V up to N bits. */ +#define UALIGN(V, N) (((V) + ((N) - 1)) & ~((N) - 1)) + +/* Sync tracepoint with IPA, but leave maintenance of linked list to caller. */ + +static void +download_tracepoint_1 (struct tracepoint *tpoint) +{ + struct tracepoint target_tracepoint; + CORE_ADDR tpptr = 0; + + gdb_assert (tpoint->type == fast_tracepoint + || tpoint->type == static_tracepoint); + + if (tpoint->cond != NULL && target_emit_ops () != NULL) + { + CORE_ADDR jentry, jump_entry; + + jentry = jump_entry = get_jump_space_head (); + + if (tpoint->cond != NULL) + { + /* Pad to 8-byte alignment. (needed?) */ + /* Actually this should be left for the target to + decide. */ + jentry = UALIGN (jentry, 8); + + compile_tracepoint_condition (tpoint, &jentry); + } + + /* Pad to 8-byte alignment. */ + jentry = UALIGN (jentry, 8); + claim_jump_space (jentry - jump_entry); + } + + target_tracepoint = *tpoint; + + tpptr = target_malloc (sizeof (*tpoint)); + tpoint->obj_addr_on_target = tpptr; + + /* Write the whole object. We'll fix up its pointers in a bit. + Assume no next for now. This is fixed up above on the next + iteration, if there's any. */ + target_tracepoint.next = NULL; + /* Need to clear this here too, since we're downloading the + tracepoints before clearing our own copy. */ + target_tracepoint.hit_count = 0; + + target_write_memory (tpptr, (unsigned char *) &target_tracepoint, + sizeof (target_tracepoint)); + + if (tpoint->cond) + write_inferior_data_pointer (tpptr + + offsetof (struct tracepoint, cond), + download_agent_expr (tpoint->cond)); + + if (tpoint->numactions) + { + int i; + CORE_ADDR actions_array; + + /* The pointers array. */ + actions_array + = target_malloc (sizeof (*tpoint->actions) * tpoint->numactions); + write_inferior_data_pointer (tpptr + offsetof (struct tracepoint, + actions), + actions_array); + + /* Now for each pointer, download the action. */ + for (i = 0; i < tpoint->numactions; i++) + { + struct tracepoint_action *action = tpoint->actions[i]; + CORE_ADDR ipa_action = tracepoint_action_download (action); + + if (ipa_action != 0) + write_inferior_data_pointer (actions_array + + i * sizeof (*tpoint->actions), + ipa_action); + } + } +} + +#define IPA_PROTO_FAST_TRACE_FLAG 0 +#define IPA_PROTO_FAST_TRACE_ADDR_ON_TARGET 2 +#define IPA_PROTO_FAST_TRACE_JUMP_PAD 10 +#define IPA_PROTO_FAST_TRACE_FJUMP_SIZE 18 +#define IPA_PROTO_FAST_TRACE_FJUMP_INSN 22 + +/* Send a command to agent to download and install tracepoint TPOINT. */ + +static int +tracepoint_send_agent (struct tracepoint *tpoint) +{ + char buf[IPA_CMD_BUF_SIZE]; + char *p; + int i, ret; + + p = buf; + strcpy (p, "FastTrace:"); + p += 10; + + COPY_FIELD_TO_BUF (p, tpoint, number); + COPY_FIELD_TO_BUF (p, tpoint, address); + COPY_FIELD_TO_BUF (p, tpoint, type); + COPY_FIELD_TO_BUF (p, tpoint, enabled); + COPY_FIELD_TO_BUF (p, tpoint, step_count); + COPY_FIELD_TO_BUF (p, tpoint, pass_count); + COPY_FIELD_TO_BUF (p, tpoint, numactions); + COPY_FIELD_TO_BUF (p, tpoint, hit_count); + COPY_FIELD_TO_BUF (p, tpoint, traceframe_usage); + COPY_FIELD_TO_BUF (p, tpoint, compiled_cond); + COPY_FIELD_TO_BUF (p, tpoint, orig_size); + + /* condition */ + p = agent_expr_send (p, tpoint->cond); + + /* tracepoint_action */ + for (i = 0; i < tpoint->numactions; i++) + { + struct tracepoint_action *action = tpoint->actions[i]; + + p[0] = action->type; + p = tracepoint_action_send (&p[1], action); + } + + get_jump_space_head (); + /* Copy the value of GDB_JUMP_PAD_HEAD to command buffer, so that + agent can use jump pad from it. */ + if (tpoint->type == fast_tracepoint) + { + memcpy (p, &gdb_jump_pad_head, 8); + p += 8; + } + + ret = run_inferior_command (buf, (int) (ptrdiff_t) (p - buf)); + if (ret) + return ret; + + if (!startswith (buf, "OK")) + return 1; + + /* The value of tracepoint's target address is stored in BUF. */ + memcpy (&tpoint->obj_addr_on_target, + &buf[IPA_PROTO_FAST_TRACE_ADDR_ON_TARGET], 8); + + if (tpoint->type == fast_tracepoint) + { + unsigned char *insn + = (unsigned char *) &buf[IPA_PROTO_FAST_TRACE_FJUMP_INSN]; + int fjump_size; + + trace_debug ("agent: read from cmd_buf 0x%x 0x%x\n", + (unsigned int) tpoint->obj_addr_on_target, + (unsigned int) gdb_jump_pad_head); + + memcpy (&gdb_jump_pad_head, &buf[IPA_PROTO_FAST_TRACE_JUMP_PAD], 8); + + /* This has been done in agent. We should also set up record for it. */ + memcpy (&fjump_size, &buf[IPA_PROTO_FAST_TRACE_FJUMP_SIZE], 4); + /* Wire it in. */ + tpoint->handle + = set_fast_tracepoint_jump (tpoint->address, insn, fjump_size); + } + + return 0; +} + +static void +download_tracepoint (struct tracepoint *tpoint) +{ + struct tracepoint *tp, *tp_prev; + + if (tpoint->type != fast_tracepoint + && tpoint->type != static_tracepoint) + return; + + download_tracepoint_1 (tpoint); + + /* Find the previous entry of TPOINT, which is fast tracepoint or + static tracepoint. */ + tp_prev = NULL; + for (tp = tracepoints; tp != tpoint; tp = tp->next) + { + if (tp->type == fast_tracepoint || tp->type == static_tracepoint) + tp_prev = tp; + } + + if (tp_prev) + { + CORE_ADDR tp_prev_target_next_addr; + + /* Insert TPOINT after TP_PREV in IPA. */ + if (read_inferior_data_pointer (tp_prev->obj_addr_on_target + + offsetof (struct tracepoint, next), + &tp_prev_target_next_addr)) + { + internal_error (__FILE__, __LINE__, + "error reading `tp_prev->next'"); + } + + /* tpoint->next = tp_prev->next */ + write_inferior_data_pointer (tpoint->obj_addr_on_target + + offsetof (struct tracepoint, next), + tp_prev_target_next_addr); + /* tp_prev->next = tpoint */ + write_inferior_data_pointer (tp_prev->obj_addr_on_target + + offsetof (struct tracepoint, next), + tpoint->obj_addr_on_target); + } + else + /* First object in list, set the head pointer in the + inferior. */ + write_inferior_data_pointer (ipa_sym_addrs.addr_tracepoints, + tpoint->obj_addr_on_target); + +} + +static void +download_trace_state_variables (void) +{ + CORE_ADDR ptr = 0, prev_ptr = 0; + struct trace_state_variable *tsv; + + /* Start out empty. */ + write_inferior_data_pointer (ipa_sym_addrs.addr_trace_state_variables, 0); + + for (tsv = trace_state_variables; tsv != NULL; tsv = tsv->next) + { + struct trace_state_variable target_tsv; + + /* TSV's with a getter have been initialized equally in both the + inferior and GDBserver. Skip them. */ + if (tsv->getter != NULL) + continue; + + target_tsv = *tsv; + + prev_ptr = ptr; + ptr = target_malloc (sizeof (*tsv)); + + if (tsv == trace_state_variables) + { + /* First object in list, set the head pointer in the + inferior. */ + + write_inferior_data_pointer (ipa_sym_addrs.addr_trace_state_variables, + ptr); + } + else + { + write_inferior_data_pointer (prev_ptr + + offsetof (struct trace_state_variable, + next), + ptr); + } + + /* Write the whole object. We'll fix up its pointers in a bit. + Assume no next, fixup when needed. */ + target_tsv.next = NULL; + + target_write_memory (ptr, (unsigned char *) &target_tsv, + sizeof (target_tsv)); + + if (tsv->name != NULL) + { + size_t size = strlen (tsv->name) + 1; + CORE_ADDR name_addr = target_malloc (size); + target_write_memory (name_addr, + (unsigned char *) tsv->name, size); + write_inferior_data_pointer (ptr + + offsetof (struct trace_state_variable, + name), + name_addr); + } + + gdb_assert (tsv->getter == NULL); + } + + if (prev_ptr != 0) + { + /* Fixup the next pointer in the last item in the list. */ + write_inferior_data_pointer (prev_ptr + + offsetof (struct trace_state_variable, + next), 0); + } +} + +/* Upload complete trace frames out of the IP Agent's trace buffer + into GDBserver's trace buffer. This always uploads either all or + no trace frames. This is the counter part of + `trace_alloc_trace_buffer'. See its description of the atomic + syncing mechanism. */ + +static void +upload_fast_traceframes (void) +{ + unsigned int ipa_traceframe_read_count, ipa_traceframe_write_count; + unsigned int ipa_traceframe_read_count_racy, ipa_traceframe_write_count_racy; + CORE_ADDR tf; + struct ipa_trace_buffer_control ipa_trace_buffer_ctrl; + unsigned int curr_tbctrl_idx; + unsigned int ipa_trace_buffer_ctrl_curr; + unsigned int ipa_trace_buffer_ctrl_curr_old; + CORE_ADDR ipa_trace_buffer_ctrl_addr; + struct breakpoint *about_to_request_buffer_space_bkpt; + CORE_ADDR ipa_trace_buffer_lo; + CORE_ADDR ipa_trace_buffer_hi; + + if (read_inferior_uinteger (ipa_sym_addrs.addr_traceframe_read_count, + &ipa_traceframe_read_count_racy)) + { + /* This will happen in most targets if the current thread is + running. */ + return; + } + + if (read_inferior_uinteger (ipa_sym_addrs.addr_traceframe_write_count, + &ipa_traceframe_write_count_racy)) + return; + + trace_debug ("ipa_traceframe_count (racy area): %d (w=%d, r=%d)", + ipa_traceframe_write_count_racy + - ipa_traceframe_read_count_racy, + ipa_traceframe_write_count_racy, + ipa_traceframe_read_count_racy); + + if (ipa_traceframe_write_count_racy == ipa_traceframe_read_count_racy) + return; + + about_to_request_buffer_space_bkpt + = set_breakpoint_at (ipa_sym_addrs.addr_about_to_request_buffer_space, + NULL); + + if (read_inferior_uinteger (ipa_sym_addrs.addr_trace_buffer_ctrl_curr, + &ipa_trace_buffer_ctrl_curr)) + return; + + ipa_trace_buffer_ctrl_curr_old = ipa_trace_buffer_ctrl_curr; + + curr_tbctrl_idx = ipa_trace_buffer_ctrl_curr & ~GDBSERVER_FLUSH_COUNT_MASK; + + { + unsigned int prev, counter; + + /* Update the token, with new counters, and the GDBserver stamp + bit. Alway reuse the current TBC index. */ + prev = ipa_trace_buffer_ctrl_curr & GDBSERVER_FLUSH_COUNT_MASK_CURR; + counter = (prev + 0x100) & GDBSERVER_FLUSH_COUNT_MASK_CURR; + + ipa_trace_buffer_ctrl_curr = (GDBSERVER_UPDATED_FLUSH_COUNT_BIT + | (prev << 12) + | counter + | curr_tbctrl_idx); + } + + if (write_inferior_uinteger (ipa_sym_addrs.addr_trace_buffer_ctrl_curr, + ipa_trace_buffer_ctrl_curr)) + return; + + trace_debug ("Lib: Committed %08x -> %08x", + ipa_trace_buffer_ctrl_curr_old, + ipa_trace_buffer_ctrl_curr); + + /* Re-read these, now that we've installed the + `about_to_request_buffer_space' breakpoint/lock. A thread could + have finished a traceframe between the last read of these + counters and setting the breakpoint above. If we start + uploading, we never want to leave this function with + traceframe_read_count != 0, otherwise, GDBserver could end up + incrementing the counter tokens more than once (due to event loop + nesting), which would break the IP agent's "effective" detection + (see trace_alloc_trace_buffer). */ + if (read_inferior_uinteger (ipa_sym_addrs.addr_traceframe_read_count, + &ipa_traceframe_read_count)) + return; + if (read_inferior_uinteger (ipa_sym_addrs.addr_traceframe_write_count, + &ipa_traceframe_write_count)) + return; + + if (debug_threads) + { + trace_debug ("ipa_traceframe_count (blocked area): %d (w=%d, r=%d)", + ipa_traceframe_write_count - ipa_traceframe_read_count, + ipa_traceframe_write_count, ipa_traceframe_read_count); + + if (ipa_traceframe_write_count != ipa_traceframe_write_count_racy + || ipa_traceframe_read_count != ipa_traceframe_read_count_racy) + trace_debug ("note that ipa_traceframe_count's parts changed"); + } + + /* Get the address of the current TBC object (the IP agent has an + array of 3 such objects). The index is stored in the TBC + token. */ + ipa_trace_buffer_ctrl_addr = ipa_sym_addrs.addr_trace_buffer_ctrl; + ipa_trace_buffer_ctrl_addr + += sizeof (struct ipa_trace_buffer_control) * curr_tbctrl_idx; + + if (read_inferior_memory (ipa_trace_buffer_ctrl_addr, + (unsigned char *) &ipa_trace_buffer_ctrl, + sizeof (struct ipa_trace_buffer_control))) + return; + + if (read_inferior_data_pointer (ipa_sym_addrs.addr_trace_buffer_lo, + &ipa_trace_buffer_lo)) + return; + if (read_inferior_data_pointer (ipa_sym_addrs.addr_trace_buffer_hi, + &ipa_trace_buffer_hi)) + return; + + /* Offsets are easier to grok for debugging than raw addresses, + especially for the small trace buffer sizes that are useful for + testing. */ + trace_debug ("Lib: Trace buffer [%d] start=%d free=%d " + "endfree=%d wrap=%d hi=%d", + curr_tbctrl_idx, + (int) (ipa_trace_buffer_ctrl.start - ipa_trace_buffer_lo), + (int) (ipa_trace_buffer_ctrl.free - ipa_trace_buffer_lo), + (int) (ipa_trace_buffer_ctrl.end_free - ipa_trace_buffer_lo), + (int) (ipa_trace_buffer_ctrl.wrap - ipa_trace_buffer_lo), + (int) (ipa_trace_buffer_hi - ipa_trace_buffer_lo)); + + /* Note that the IPA's buffer is always circular. */ + +#define IPA_FIRST_TRACEFRAME() (ipa_trace_buffer_ctrl.start) + +#define IPA_NEXT_TRACEFRAME_1(TF, TFOBJ) \ + ((TF) + sizeof (struct traceframe) + (TFOBJ)->data_size) + +#define IPA_NEXT_TRACEFRAME(TF, TFOBJ) \ + (IPA_NEXT_TRACEFRAME_1 (TF, TFOBJ) \ + - ((IPA_NEXT_TRACEFRAME_1 (TF, TFOBJ) >= ipa_trace_buffer_ctrl.wrap) \ + ? (ipa_trace_buffer_ctrl.wrap - ipa_trace_buffer_lo) \ + : 0)) + + tf = IPA_FIRST_TRACEFRAME (); + + while (ipa_traceframe_write_count - ipa_traceframe_read_count) + { + struct tracepoint *tpoint; + struct traceframe *tframe; + unsigned char *block; + struct traceframe ipa_tframe; + + if (read_inferior_memory (tf, (unsigned char *) &ipa_tframe, + offsetof (struct traceframe, data))) + error ("Uploading: couldn't read traceframe at %s\n", paddress (tf)); + + if (ipa_tframe.tpnum == 0) + { + internal_error (__FILE__, __LINE__, + "Uploading: No (more) fast traceframes, but" + " ipa_traceframe_count == %u??\n", + ipa_traceframe_write_count + - ipa_traceframe_read_count); + } + + /* Note that this will be incorrect for multi-location + tracepoints... */ + tpoint = find_next_tracepoint_by_number (NULL, ipa_tframe.tpnum); + + tframe = add_traceframe (tpoint); + if (tframe == NULL) + { + trace_buffer_is_full = 1; + trace_debug ("Uploading: trace buffer is full"); + } + else + { + /* Copy the whole set of blocks in one go for now. FIXME: + split this in smaller blocks. */ + block = add_traceframe_block (tframe, tpoint, + ipa_tframe.data_size); + if (block != NULL) + { + if (read_inferior_memory (tf + + offsetof (struct traceframe, data), + block, ipa_tframe.data_size)) + error ("Uploading: Couldn't read traceframe data at %s\n", + paddress (tf + offsetof (struct traceframe, data))); + } + + trace_debug ("Uploading: traceframe didn't fit"); + finish_traceframe (tframe); + } + + tf = IPA_NEXT_TRACEFRAME (tf, &ipa_tframe); + + /* If we freed the traceframe that wrapped around, go back + to the non-wrap case. */ + if (tf < ipa_trace_buffer_ctrl.start) + { + trace_debug ("Lib: Discarding past the wraparound"); + ipa_trace_buffer_ctrl.wrap = ipa_trace_buffer_hi; + } + ipa_trace_buffer_ctrl.start = tf; + ipa_trace_buffer_ctrl.end_free = ipa_trace_buffer_ctrl.start; + ++ipa_traceframe_read_count; + + if (ipa_trace_buffer_ctrl.start == ipa_trace_buffer_ctrl.free + && ipa_trace_buffer_ctrl.start == ipa_trace_buffer_ctrl.end_free) + { + trace_debug ("Lib: buffer is fully empty. " + "Trace buffer [%d] start=%d free=%d endfree=%d", + curr_tbctrl_idx, + (int) (ipa_trace_buffer_ctrl.start + - ipa_trace_buffer_lo), + (int) (ipa_trace_buffer_ctrl.free + - ipa_trace_buffer_lo), + (int) (ipa_trace_buffer_ctrl.end_free + - ipa_trace_buffer_lo)); + + ipa_trace_buffer_ctrl.start = ipa_trace_buffer_lo; + ipa_trace_buffer_ctrl.free = ipa_trace_buffer_lo; + ipa_trace_buffer_ctrl.end_free = ipa_trace_buffer_hi; + ipa_trace_buffer_ctrl.wrap = ipa_trace_buffer_hi; + } + + trace_debug ("Uploaded a traceframe\n" + "Lib: Trace buffer [%d] start=%d free=%d " + "endfree=%d wrap=%d hi=%d", + curr_tbctrl_idx, + (int) (ipa_trace_buffer_ctrl.start - ipa_trace_buffer_lo), + (int) (ipa_trace_buffer_ctrl.free - ipa_trace_buffer_lo), + (int) (ipa_trace_buffer_ctrl.end_free + - ipa_trace_buffer_lo), + (int) (ipa_trace_buffer_ctrl.wrap - ipa_trace_buffer_lo), + (int) (ipa_trace_buffer_hi - ipa_trace_buffer_lo)); + } + + if (target_write_memory (ipa_trace_buffer_ctrl_addr, + (unsigned char *) &ipa_trace_buffer_ctrl, + sizeof (struct ipa_trace_buffer_control))) + return; + + write_inferior_integer (ipa_sym_addrs.addr_traceframe_read_count, + ipa_traceframe_read_count); + + trace_debug ("Done uploading traceframes [%d]\n", curr_tbctrl_idx); + + target_pause_all (true); + + delete_breakpoint (about_to_request_buffer_space_bkpt); + about_to_request_buffer_space_bkpt = NULL; + + target_unpause_all (true); + + if (trace_buffer_is_full) + stop_tracing (); +} +#endif + +#ifdef IN_PROCESS_AGENT + +IP_AGENT_EXPORT_VAR int ust_loaded; +IP_AGENT_EXPORT_VAR char cmd_buf[IPA_CMD_BUF_SIZE]; + +#ifdef HAVE_UST + +/* Static tracepoints. */ + +/* UST puts a "struct tracepoint" in the global namespace, which + conflicts with our tracepoint. Arguably, being a library, it + shouldn't take ownership of such a generic name. We work around it + here. */ +#define tracepoint ust_tracepoint +#include <ust/ust.h> +#undef tracepoint + +extern int serialize_to_text (char *outbuf, int bufsize, + const char *fmt, va_list ap); + +#define GDB_PROBE_NAME "gdb" + +/* We dynamically search for the UST symbols instead of linking them + in. This lets the user decide if the application uses static + tracepoints, instead of always pulling libust.so in. This vector + holds pointers to all functions we care about. */ + +static struct +{ + int (*serialize_to_text) (char *outbuf, int bufsize, + const char *fmt, va_list ap); + + int (*ltt_probe_register) (struct ltt_available_probe *pdata); + int (*ltt_probe_unregister) (struct ltt_available_probe *pdata); + + int (*ltt_marker_connect) (const char *channel, const char *mname, + const char *pname); + int (*ltt_marker_disconnect) (const char *channel, const char *mname, + const char *pname); + + void (*marker_iter_start) (struct marker_iter *iter); + void (*marker_iter_next) (struct marker_iter *iter); + void (*marker_iter_stop) (struct marker_iter *iter); + void (*marker_iter_reset) (struct marker_iter *iter); +} ust_ops; + +#include <dlfcn.h> + +/* Cast through typeof to catch incompatible API changes. Since UST + only builds with gcc, we can freely use gcc extensions here + too. */ +#define GET_UST_SYM(SYM) \ + do \ + { \ + if (ust_ops.SYM == NULL) \ + ust_ops.SYM = (typeof (&SYM)) dlsym (RTLD_DEFAULT, #SYM); \ + if (ust_ops.SYM == NULL) \ + return 0; \ + } while (0) + +#define USTF(SYM) ust_ops.SYM + +/* Get pointers to all libust.so functions we care about. */ + +static int +dlsym_ust (void) +{ + GET_UST_SYM (serialize_to_text); + + GET_UST_SYM (ltt_probe_register); + GET_UST_SYM (ltt_probe_unregister); + GET_UST_SYM (ltt_marker_connect); + GET_UST_SYM (ltt_marker_disconnect); + + GET_UST_SYM (marker_iter_start); + GET_UST_SYM (marker_iter_next); + GET_UST_SYM (marker_iter_stop); + GET_UST_SYM (marker_iter_reset); + + ust_loaded = 1; + return 1; +} + +/* Given an UST marker, return the matching gdb static tracepoint. + The match is done by address. */ + +static struct tracepoint * +ust_marker_to_static_tracepoint (const struct marker *mdata) +{ + struct tracepoint *tpoint; + + for (tpoint = tracepoints; tpoint; tpoint = tpoint->next) + { + if (tpoint->type != static_tracepoint) + continue; + + if (tpoint->address == (uintptr_t) mdata->location) + return tpoint; + } + + return NULL; +} + +/* The probe function we install on lttng/ust markers. Whenever a + probed ust marker is hit, this function is called. This is similar + to gdb_collect, only for static tracepoints, instead of fast + tracepoints. */ + +static void +gdb_probe (const struct marker *mdata, void *probe_private, + struct registers *regs, void *call_private, + const char *fmt, va_list *args) +{ + struct tracepoint *tpoint; + struct static_tracepoint_ctx ctx; + const struct target_desc *ipa_tdesc; + + /* Don't do anything until the trace run is completely set up. */ + if (!tracing) + { + trace_debug ("gdb_probe: not tracing\n"); + return; + } + + ipa_tdesc = get_ipa_tdesc (ipa_tdesc_idx); + ctx.base.type = static_tracepoint; + ctx.regcache_initted = 0; + ctx.regs = regs; + ctx.fmt = fmt; + ctx.args = args; + + /* Wrap the regblock in a register cache (in the stack, we don't + want to malloc here). */ + ctx.regspace = alloca (ipa_tdesc->registers_size); + if (ctx.regspace == NULL) + { + trace_debug ("Trace buffer block allocation failed, skipping"); + return; + } + + tpoint = ust_marker_to_static_tracepoint (mdata); + if (tpoint == NULL) + { + trace_debug ("gdb_probe: marker not known: " + "loc:0x%p, ch:\"%s\",n:\"%s\",f:\"%s\"", + mdata->location, mdata->channel, + mdata->name, mdata->format); + return; + } + + if (!tpoint->enabled) + { + trace_debug ("gdb_probe: tracepoint disabled"); + return; + } + + ctx.tpoint = tpoint; + + trace_debug ("gdb_probe: collecting marker: " + "loc:0x%p, ch:\"%s\",n:\"%s\",f:\"%s\"", + mdata->location, mdata->channel, + mdata->name, mdata->format); + + /* Test the condition if present, and collect if true. */ + if (tpoint->cond == NULL + || condition_true_at_tracepoint ((struct tracepoint_hit_ctx *) &ctx, + tpoint)) + { + collect_data_at_tracepoint ((struct tracepoint_hit_ctx *) &ctx, + tpoint->address, tpoint); + + if (stopping_tracepoint + || trace_buffer_is_full + || expr_eval_result != expr_eval_no_error) + stop_tracing (); + } + else + { + /* If there was a condition and it evaluated to false, the only + way we would stop tracing is if there was an error during + condition expression evaluation. */ + if (expr_eval_result != expr_eval_no_error) + stop_tracing (); + } +} + +/* Called if the gdb static tracepoint requested collecting "$_sdata", + static tracepoint string data. This is a string passed to the + tracing library by the user, at the time of the tracepoint marker + call. E.g., in the UST marker call: + + trace_mark (ust, bar33, "str %s", "FOOBAZ"); + + the collected data is "str FOOBAZ". +*/ + +static void +collect_ust_data_at_tracepoint (struct tracepoint_hit_ctx *ctx, + struct traceframe *tframe) +{ + struct static_tracepoint_ctx *umd = (struct static_tracepoint_ctx *) ctx; + unsigned char *bufspace; + int size; + va_list copy; + unsigned short blocklen; + + if (umd == NULL) + { + trace_debug ("Wanted to collect static trace data, " + "but there's no static trace data"); + return; + } + + va_copy (copy, *umd->args); + size = USTF(serialize_to_text) (NULL, 0, umd->fmt, copy); + va_end (copy); + + trace_debug ("Want to collect ust data"); + + /* 'S' + size + string */ + bufspace = add_traceframe_block (tframe, umd->tpoint, + 1 + sizeof (blocklen) + size + 1); + if (bufspace == NULL) + { + trace_debug ("Trace buffer block allocation failed, skipping"); + return; + } + + /* Identify a static trace data block. */ + *bufspace = 'S'; + + blocklen = size + 1; + memcpy (bufspace + 1, &blocklen, sizeof (blocklen)); + + va_copy (copy, *umd->args); + USTF(serialize_to_text) ((char *) bufspace + 1 + sizeof (blocklen), + size + 1, umd->fmt, copy); + va_end (copy); + + trace_debug ("Storing static tracepoint data in regblock: %s", + bufspace + 1 + sizeof (blocklen)); +} + +/* The probe to register with lttng/ust. */ +static struct ltt_available_probe gdb_ust_probe = + { + GDB_PROBE_NAME, + NULL, + gdb_probe, + }; + +#endif /* HAVE_UST */ +#endif /* IN_PROCESS_AGENT */ + +#ifndef IN_PROCESS_AGENT + +/* Ask the in-process agent to run a command. Since we don't want to + have to handle the IPA hitting breakpoints while running the + command, we pause all threads, remove all breakpoints, and then set + the helper thread re-running. We communicate with the helper + thread by means of direct memory xfering, and a socket for + synchronization. */ + +static int +run_inferior_command (char *cmd, int len) +{ + int err = -1; + int pid = current_ptid.pid (); + + trace_debug ("run_inferior_command: running: %s", cmd); + + target_pause_all (false); + uninsert_all_breakpoints (); + + err = agent_run_command (pid, (const char *) cmd, len); + + reinsert_all_breakpoints (); + target_unpause_all (false); + + return err; +} + +#else /* !IN_PROCESS_AGENT */ + +#include <sys/socket.h> +#include <sys/un.h> + +#ifndef UNIX_PATH_MAX +#define UNIX_PATH_MAX sizeof(((struct sockaddr_un *) NULL)->sun_path) +#endif + +/* Where we put the socked used for synchronization. */ +#define SOCK_DIR P_tmpdir + +/* Thread ID of the helper thread. GDBserver reads this to know which + is the help thread. This is an LWP id on Linux. */ +EXTERN_C_PUSH +IP_AGENT_EXPORT_VAR int helper_thread_id; +EXTERN_C_POP + +static int +init_named_socket (const char *name) +{ + int result, fd; + struct sockaddr_un addr; + + result = fd = socket (PF_UNIX, SOCK_STREAM, 0); + if (result == -1) + { + warning ("socket creation failed: %s", safe_strerror (errno)); + return -1; + } + + addr.sun_family = AF_UNIX; + + strncpy (addr.sun_path, name, UNIX_PATH_MAX); + addr.sun_path[UNIX_PATH_MAX - 1] = '\0'; + + result = access (name, F_OK); + if (result == 0) + { + /* File exists. */ + result = unlink (name); + if (result == -1) + { + warning ("unlink failed: %s", safe_strerror (errno)); + close (fd); + return -1; + } + warning ("socket %s already exists; overwriting", name); + } + + result = bind (fd, (struct sockaddr *) &addr, sizeof (addr)); + if (result == -1) + { + warning ("bind failed: %s", safe_strerror (errno)); + close (fd); + return -1; + } + + result = listen (fd, 1); + if (result == -1) + { + warning ("listen: %s", safe_strerror (errno)); + close (fd); + return -1; + } + + return fd; +} + +static char agent_socket_name[UNIX_PATH_MAX]; + +static int +gdb_agent_socket_init (void) +{ + int result, fd; + + result = xsnprintf (agent_socket_name, UNIX_PATH_MAX, "%s/gdb_ust%d", + SOCK_DIR, getpid ()); + if (result >= UNIX_PATH_MAX) + { + trace_debug ("string overflow allocating socket name"); + return -1; + } + + fd = init_named_socket (agent_socket_name); + if (fd < 0) + warning ("Error initializing named socket (%s) for communication with the " + "ust helper thread. Check that directory exists and that it " + "is writable.", agent_socket_name); + + return fd; +} + +#ifdef HAVE_UST + +/* The next marker to be returned on a qTsSTM command. */ +static const struct marker *next_st; + +/* Returns the first known marker. */ + +struct marker * +first_marker (void) +{ + struct marker_iter iter; + + USTF(marker_iter_reset) (&iter); + USTF(marker_iter_start) (&iter); + + return iter.marker; +} + +/* Returns the marker following M. */ + +const struct marker * +next_marker (const struct marker *m) +{ + struct marker_iter iter; + + USTF(marker_iter_reset) (&iter); + USTF(marker_iter_start) (&iter); + + for (; iter.marker != NULL; USTF(marker_iter_next) (&iter)) + { + if (iter.marker == m) + { + USTF(marker_iter_next) (&iter); + return iter.marker; + } + } + + return NULL; +} + +/* Return an hexstr version of the STR C string, fit for sending to + GDB. */ + +static char * +cstr_to_hexstr (const char *str) +{ + int len = strlen (str); + char *hexstr = xmalloc (len * 2 + 1); + bin2hex ((gdb_byte *) str, hexstr, len); + return hexstr; +} + +/* Compose packet that is the response to the qTsSTM/qTfSTM/qTSTMat + packets. */ + +static void +response_ust_marker (char *packet, const struct marker *st) +{ + char *strid, *format, *tmp; + + next_st = next_marker (st); + + tmp = xmalloc (strlen (st->channel) + 1 + + strlen (st->name) + 1); + sprintf (tmp, "%s/%s", st->channel, st->name); + + strid = cstr_to_hexstr (tmp); + free (tmp); + + format = cstr_to_hexstr (st->format); + + sprintf (packet, "m%s:%s:%s", + paddress ((uintptr_t) st->location), + strid, + format); + + free (strid); + free (format); +} + +/* Return the first static tracepoint, and initialize the state + machine that will iterate through all the static tracepoints. */ + +static void +cmd_qtfstm (char *packet) +{ + trace_debug ("Returning first trace state variable definition"); + + if (first_marker ()) + response_ust_marker (packet, first_marker ()); + else + strcpy (packet, "l"); +} + +/* Return additional trace state variable definitions. */ + +static void +cmd_qtsstm (char *packet) +{ + trace_debug ("Returning static tracepoint"); + + if (next_st) + response_ust_marker (packet, next_st); + else + strcpy (packet, "l"); +} + +/* Disconnect the GDB probe from a marker at a given address. */ + +static void +unprobe_marker_at (char *packet) +{ + char *p = packet; + ULONGEST address; + struct marker_iter iter; + + p += sizeof ("unprobe_marker_at:") - 1; + + p = unpack_varlen_hex (p, &address); + + USTF(marker_iter_reset) (&iter); + USTF(marker_iter_start) (&iter); + for (; iter.marker != NULL; USTF(marker_iter_next) (&iter)) + if ((uintptr_t ) iter.marker->location == address) + { + int result; + + result = USTF(ltt_marker_disconnect) (iter.marker->channel, + iter.marker->name, + GDB_PROBE_NAME); + if (result < 0) + warning ("could not disable marker %s/%s", + iter.marker->channel, iter.marker->name); + break; + } +} + +/* Connect the GDB probe to a marker at a given address. */ + +static int +probe_marker_at (char *packet) +{ + char *p = packet; + ULONGEST address; + struct marker_iter iter; + struct marker *m; + + p += sizeof ("probe_marker_at:") - 1; + + p = unpack_varlen_hex (p, &address); + + USTF(marker_iter_reset) (&iter); + + for (USTF(marker_iter_start) (&iter), m = iter.marker; + m != NULL; + USTF(marker_iter_next) (&iter), m = iter.marker) + if ((uintptr_t ) m->location == address) + { + int result; + + trace_debug ("found marker for address. " + "ltt_marker_connect (marker = %s/%s)", + m->channel, m->name); + + result = USTF(ltt_marker_connect) (m->channel, m->name, + GDB_PROBE_NAME); + if (result && result != -EEXIST) + trace_debug ("ltt_marker_connect (marker = %s/%s, errno = %d)", + m->channel, m->name, -result); + + if (result < 0) + { + sprintf (packet, "E.could not connect marker: channel=%s, name=%s", + m->channel, m->name); + return -1; + } + + strcpy (packet, "OK"); + return 0; + } + + sprintf (packet, "E.no marker found at 0x%s", paddress (address)); + return -1; +} + +static int +cmd_qtstmat (char *packet) +{ + char *p = packet; + ULONGEST address; + struct marker_iter iter; + struct marker *m; + + p += sizeof ("qTSTMat:") - 1; + + p = unpack_varlen_hex (p, &address); + + USTF(marker_iter_reset) (&iter); + + for (USTF(marker_iter_start) (&iter), m = iter.marker; + m != NULL; + USTF(marker_iter_next) (&iter), m = iter.marker) + if ((uintptr_t ) m->location == address) + { + response_ust_marker (packet, m); + return 0; + } + + strcpy (packet, "l"); + return -1; +} + +static void +gdb_ust_init (void) +{ + if (!dlsym_ust ()) + return; + + USTF(ltt_probe_register) (&gdb_ust_probe); +} + +#endif /* HAVE_UST */ + +#include <sys/syscall.h> + +static void +gdb_agent_remove_socket (void) +{ + unlink (agent_socket_name); +} + +/* Helper thread of agent. */ + +static void * +gdb_agent_helper_thread (void *arg) +{ + int listen_fd; + + atexit (gdb_agent_remove_socket); + + while (1) + { + listen_fd = gdb_agent_socket_init (); + + if (helper_thread_id == 0) + helper_thread_id = syscall (SYS_gettid); + + if (listen_fd == -1) + { + warning ("could not create sync socket"); + break; + } + + while (1) + { + socklen_t tmp; + struct sockaddr_un sockaddr; + int fd; + char buf[1]; + int ret; + int stop_loop = 0; + + tmp = sizeof (sockaddr); + + do + { + fd = accept (listen_fd, (struct sockaddr *) &sockaddr, &tmp); + } + /* It seems an ERESTARTSYS can escape out of accept. */ + while (fd == -512 || (fd == -1 && errno == EINTR)); + + if (fd < 0) + { + warning ("Accept returned %d, error: %s", + fd, safe_strerror (errno)); + break; + } + + do + { + ret = read (fd, buf, 1); + } while (ret == -1 && errno == EINTR); + + if (ret == -1) + { + warning ("reading socket (fd=%d) failed with %s", + fd, safe_strerror (errno)); + close (fd); + break; + } + + if (cmd_buf[0]) + { + if (startswith (cmd_buf, "close")) + { + stop_loop = 1; + } +#ifdef HAVE_UST + else if (strcmp ("qTfSTM", cmd_buf) == 0) + { + cmd_qtfstm (cmd_buf); + } + else if (strcmp ("qTsSTM", cmd_buf) == 0) + { + cmd_qtsstm (cmd_buf); + } + else if (startswith (cmd_buf, "unprobe_marker_at:")) + { + unprobe_marker_at (cmd_buf); + } + else if (startswith (cmd_buf, "probe_marker_at:")) + { + probe_marker_at (cmd_buf); + } + else if (startswith (cmd_buf, "qTSTMat:")) + { + cmd_qtstmat (cmd_buf); + } +#endif /* HAVE_UST */ + } + + /* Fix compiler's warning: ignoring return value of 'write'. */ + ret = write (fd, buf, 1); + close (fd); + + if (stop_loop) + { + close (listen_fd); + unlink (agent_socket_name); + + /* Sleep endlessly to wait the whole inferior stops. This + thread can not exit because GDB or GDBserver may still need + 'current_thread' (representing this thread) to access + inferior memory. Otherwise, this thread exits earlier than + other threads, and 'current_thread' is set to NULL. */ + while (1) + sleep (10); + } + } + } + + return NULL; +} + +#include <signal.h> +#include <pthread.h> + +EXTERN_C_PUSH +IP_AGENT_EXPORT_VAR int gdb_agent_capability = AGENT_CAPA_STATIC_TRACE; +EXTERN_C_POP + +static void +gdb_agent_init (void) +{ + int res; + pthread_t thread; + sigset_t new_mask; + sigset_t orig_mask; + + /* We want the helper thread to be as transparent as possible, so + have it inherit an all-signals-blocked mask. */ + + sigfillset (&new_mask); + res = pthread_sigmask (SIG_SETMASK, &new_mask, &orig_mask); + if (res) + perror_with_name ("pthread_sigmask (1)"); + + res = pthread_create (&thread, + NULL, + gdb_agent_helper_thread, + NULL); + + res = pthread_sigmask (SIG_SETMASK, &orig_mask, NULL); + if (res) + perror_with_name ("pthread_sigmask (2)"); + + while (helper_thread_id == 0) + usleep (1); + +#ifdef HAVE_UST + gdb_ust_init (); +#endif +} + +#include <sys/mman.h> + +IP_AGENT_EXPORT_VAR char *gdb_tp_heap_buffer; +IP_AGENT_EXPORT_VAR char *gdb_jump_pad_buffer; +IP_AGENT_EXPORT_VAR char *gdb_jump_pad_buffer_end; +IP_AGENT_EXPORT_VAR char *gdb_trampoline_buffer; +IP_AGENT_EXPORT_VAR char *gdb_trampoline_buffer_end; +IP_AGENT_EXPORT_VAR char *gdb_trampoline_buffer_error; + +/* Record the result of getting buffer space for fast tracepoint + trampolines. Any error message is copied, since caller may not be + using persistent storage. */ + +void +set_trampoline_buffer_space (CORE_ADDR begin, CORE_ADDR end, char *errmsg) +{ + gdb_trampoline_buffer = (char *) (uintptr_t) begin; + gdb_trampoline_buffer_end = (char *) (uintptr_t) end; + if (errmsg) + strncpy (gdb_trampoline_buffer_error, errmsg, 99); + else + strcpy (gdb_trampoline_buffer_error, "no buffer passed"); +} + +static void __attribute__ ((constructor)) +initialize_tracepoint_ftlib (void) +{ + initialize_tracepoint (); + + gdb_agent_init (); +} + +#ifndef HAVE_GETAUXVAL +/* Retrieve the value of TYPE from the auxiliary vector. If TYPE is not + found, 0 is returned. This function is provided if glibc is too old. */ + +unsigned long +getauxval (unsigned long type) +{ + unsigned long data[2]; + FILE *f = fopen ("/proc/self/auxv", "r"); + unsigned long value = 0; + + if (f == NULL) + return 0; + + while (fread (data, sizeof (data), 1, f) > 0) + { + if (data[0] == type) + { + value = data[1]; + break; + } + } + + fclose (f); + return value; +} +#endif + +#endif /* IN_PROCESS_AGENT */ + +/* Return a timestamp, expressed as microseconds of the usual Unix + time. (As the result is a 64-bit number, it will not overflow any + time soon.) */ + +static LONGEST +get_timestamp (void) +{ + using namespace std::chrono; + + steady_clock::time_point now = steady_clock::now (); + return duration_cast<microseconds> (now.time_since_epoch ()).count (); +} + +void +initialize_tracepoint (void) +{ + /* Start with the default size. */ + init_trace_buffer (DEFAULT_TRACE_BUFFER_SIZE); + + /* Wire trace state variable 1 to be the timestamp. This will be + uploaded to GDB upon connection and become one of its trace state + variables. (In case you're wondering, if GDB already has a trace + variable numbered 1, it will be renumbered.) */ + create_trace_state_variable (1, 0); + set_trace_state_variable_name (1, "trace_timestamp"); + set_trace_state_variable_getter (1, get_timestamp); + +#ifdef IN_PROCESS_AGENT + { + int pagesize; + size_t jump_pad_size; + + pagesize = sysconf (_SC_PAGE_SIZE); + if (pagesize == -1) + perror_with_name ("sysconf"); + +#define SCRATCH_BUFFER_NPAGES 20 + + jump_pad_size = pagesize * SCRATCH_BUFFER_NPAGES; + + gdb_tp_heap_buffer = (char *) xmalloc (5 * 1024 * 1024); + gdb_jump_pad_buffer = (char *) alloc_jump_pad_buffer (jump_pad_size); + if (gdb_jump_pad_buffer == NULL) + perror_with_name ("mmap"); + gdb_jump_pad_buffer_end = gdb_jump_pad_buffer + jump_pad_size; + } + + gdb_trampoline_buffer = gdb_trampoline_buffer_end = 0; + + /* It's not a fatal error for something to go wrong with trampoline + buffer setup, but it can be mysterious, so create a channel to + report back on what went wrong, using a fixed size since we may + not be able to allocate space later when the problem occurs. */ + gdb_trampoline_buffer_error = (char *) xmalloc (IPA_BUFSIZ); + + strcpy (gdb_trampoline_buffer_error, "No errors reported"); + + initialize_low_tracepoint (); +#endif +} diff -Nru gdb-9.1/gdbserver/tracepoint.h gdb-10.2/gdbserver/tracepoint.h --- gdb-9.1/gdbserver/tracepoint.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/tracepoint.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,195 @@ +/* Tracepoint code for remote server for GDB. + Copyright (C) 1993-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef GDBSERVER_TRACEPOINT_H +#define GDBSERVER_TRACEPOINT_H + +/* Size for a small buffer to report problems from the in-process + agent back to GDBserver. */ +#define IPA_BUFSIZ 100 + +void initialize_tracepoint (void); + +#if defined(__GNUC__) +# define ATTR_USED __attribute__((used)) +# define ATTR_NOINLINE __attribute__((noinline)) +#else +# define ATTR_USED +# define ATTR_NOINLINE +#endif + +/* How to make symbol public/exported. */ + +#if defined _WIN32 || defined __CYGWIN__ +# define EXPORTED_SYMBOL __declspec (dllexport) +#else +# if __GNUC__ >= 4 +# define EXPORTED_SYMBOL __attribute__ ((visibility ("default"))) +# else +# define EXPORTED_SYMBOL +# endif +#endif + +/* Use these to make sure the functions and variables the IPA needs to + export (symbols GDBserver needs to query GDB about) are visible and + have C linkage. + + Tag exported functions with IP_AGENT_EXPORT_FUNC, tag the + definitions of exported variables with IP_AGENT_EXPORT_VAR, and + variable declarations with IP_AGENT_EXPORT_VAR_DECL. Variables + must also be exported with C linkage. As we can't both use extern + "C" and initialize a variable in the same statement, variables that + don't have a separate declaration must use + EXTERN_C_PUSH/EXTERN_C_POP around their definition. */ + +#ifdef IN_PROCESS_AGENT +# define IP_AGENT_EXPORT_FUNC EXTERN_C EXPORTED_SYMBOL ATTR_NOINLINE ATTR_USED +# define IP_AGENT_EXPORT_VAR EXPORTED_SYMBOL ATTR_USED +# define IP_AGENT_EXPORT_VAR_DECL EXTERN_C EXPORTED_SYMBOL +#else +# define IP_AGENT_EXPORT_FUNC static +# define IP_AGENT_EXPORT_VAR +# define IP_AGENT_EXPORT_VAR_DECL extern +#endif + +IP_AGENT_EXPORT_VAR_DECL int tracing; + +extern int disconnected_tracing; + +void tracepoint_look_up_symbols (void); + +void stop_tracing (void); + +int handle_tracepoint_general_set (char *own_buf); +int handle_tracepoint_query (char *own_buf); + +int tracepoint_finished_step (struct thread_info *tinfo, CORE_ADDR stop_pc); +int tracepoint_was_hit (struct thread_info *tinfo, CORE_ADDR stop_pc); + +void release_while_stepping_state_list (struct thread_info *tinfo); + +int in_readonly_region (CORE_ADDR addr, ULONGEST length); +int traceframe_read_mem (int tfnum, CORE_ADDR addr, + unsigned char *buf, ULONGEST length, + ULONGEST *nbytes); +int fetch_traceframe_registers (int tfnum, + struct regcache *regcache, + int regnum); + +int traceframe_read_sdata (int tfnum, ULONGEST offset, + unsigned char *buf, ULONGEST length, + ULONGEST *nbytes); + +int traceframe_read_info (int tfnum, struct buffer *buffer); + +/* If a thread is determined to be collecting a fast tracepoint, this + structure holds the collect status. */ + +struct fast_tpoint_collect_status +{ + /* The tracepoint that is presently being collected. */ + int tpoint_num; + CORE_ADDR tpoint_addr; + + /* The address range in the jump pad of where the original + instruction the tracepoint jump was inserted was relocated + to. */ + CORE_ADDR adjusted_insn_addr; + CORE_ADDR adjusted_insn_addr_end; +}; + +/* The possible states a thread can be in, related to the collection of fast + tracepoint. */ + +enum class fast_tpoint_collect_result +{ + /* Not collecting a fast tracepoint. */ + not_collecting, + + /* In the jump pad, but before the relocated instruction. */ + before_insn, + + /* In the jump pad, but at (or after) the relocated instruction. */ + at_insn, +}; + +fast_tpoint_collect_result fast_tracepoint_collecting + (CORE_ADDR thread_area, CORE_ADDR stop_pc, + struct fast_tpoint_collect_status *status); + +void force_unlock_trace_buffer (void); + +int handle_tracepoint_bkpts (struct thread_info *tinfo, CORE_ADDR stop_pc); + +#ifdef IN_PROCESS_AGENT +void initialize_low_tracepoint (void); +const struct target_desc *get_ipa_tdesc (int idx); +void supply_fast_tracepoint_registers (struct regcache *regcache, + const unsigned char *regs); +void supply_static_tracepoint_registers (struct regcache *regcache, + const unsigned char *regs, + CORE_ADDR pc); +void set_trampoline_buffer_space (CORE_ADDR begin, CORE_ADDR end, + char *errmsg); +void *alloc_jump_pad_buffer (size_t size); +#ifndef HAVE_GETAUXVAL +unsigned long getauxval (unsigned long type); +#endif +#else +void stop_tracing (void); + +int claim_trampoline_space (ULONGEST used, CORE_ADDR *trampoline); +int have_fast_tracepoint_trampoline_buffer (char *msgbuf); +void gdb_agent_about_to_close (int pid); +#endif + +struct traceframe; +struct eval_agent_expr_context; + +/* Do memory copies for bytecodes. */ +/* Do the recording of memory blocks for actions and bytecodes. */ + +int agent_mem_read (struct eval_agent_expr_context *ctx, + unsigned char *to, CORE_ADDR from, + ULONGEST len); + +LONGEST agent_get_trace_state_variable_value (int num); +void agent_set_trace_state_variable_value (int num, LONGEST val); + +/* Record the value of a trace state variable. */ + +int agent_tsv_read (struct eval_agent_expr_context *ctx, int n); +int agent_mem_read_string (struct eval_agent_expr_context *ctx, + unsigned char *to, + CORE_ADDR from, + ULONGEST len); + +/* The prototype the get_raw_reg function in the IPA. Each arch's + bytecode compiler emits calls to this function. */ +ULONGEST get_raw_reg (const unsigned char *raw_regs, int regnum); + +/* Returns the address of the get_raw_reg function in the IPA. */ +CORE_ADDR get_raw_reg_func_addr (void); +/* Returns the address of the get_trace_state_variable_value + function in the IPA. */ +CORE_ADDR get_get_tsv_func_addr (void); +/* Returns the address of the set_trace_state_variable_value + function in the IPA. */ +CORE_ADDR get_set_tsv_func_addr (void); + +#endif /* GDBSERVER_TRACEPOINT_H */ diff -Nru gdb-9.1/gdbserver/utils.cc gdb-10.2/gdbserver/utils.cc --- gdb-9.1/gdbserver/utils.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/utils.cc 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,115 @@ +/* General utility routines for the remote server for GDB. + Copyright (C) 1986-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "server.h" + +#ifdef IN_PROCESS_AGENT +# define PREFIX "ipa: " +# define TOOLNAME "GDBserver in-process agent" +#else +# define PREFIX "gdbserver: " +# define TOOLNAME "GDBserver" +#endif + +/* Generally useful subroutines used throughout the program. */ + +void +malloc_failure (long size) +{ + fprintf (stderr, + PREFIX "ran out of memory while trying to allocate %lu bytes\n", + (unsigned long) size); + exit (1); +} + +/* Print the system error message for errno, and also mention STRING + as the file name for which the error was encountered. + Then return to command level. */ + +void +perror_with_name (const char *string) +{ + const char *err; + char *combined; + + err = safe_strerror (errno); + if (err == NULL) + err = "unknown error"; + + combined = (char *) alloca (strlen (err) + strlen (string) + 3); + strcpy (combined, string); + strcat (combined, ": "); + strcat (combined, err); + + error ("%s.", combined); +} + +/* Print an error message and return to top level. */ + +void +verror (const char *string, va_list args) +{ +#ifdef IN_PROCESS_AGENT + fflush (stdout); + vfprintf (stderr, string, args); + fprintf (stderr, "\n"); + exit (1); +#else + throw_verror (GENERIC_ERROR, string, args); +#endif +} + +void +vwarning (const char *string, va_list args) +{ + fprintf (stderr, PREFIX); + vfprintf (stderr, string, args); + fprintf (stderr, "\n"); +} + +/* Report a problem internal to GDBserver, and exit. */ + +void +internal_verror (const char *file, int line, const char *fmt, va_list args) +{ + fprintf (stderr, "\ +%s:%d: A problem internal to " TOOLNAME " has been detected.\n", file, line); + vfprintf (stderr, fmt, args); + fprintf (stderr, "\n"); + exit (1); +} + +/* Report a problem internal to GDBserver. */ + +void +internal_vwarning (const char *file, int line, const char *fmt, va_list args) +{ + fprintf (stderr, "\ +%s:%d: A problem internal to " TOOLNAME " has been detected.\n", file, line); + vfprintf (stderr, fmt, args); + fprintf (stderr, "\n"); +} + +/* Convert a CORE_ADDR into a HEX string, like %lx. + The result is stored in a circular static buffer, NUMCELLS deep. */ + +char * +paddress (CORE_ADDR addr) +{ + return phex_nz (addr, sizeof (CORE_ADDR)); +} diff -Nru gdb-9.1/gdbserver/utils.h gdb-10.2/gdbserver/utils.h --- gdb-9.1/gdbserver/utils.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/utils.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,24 @@ +/* General utility routines for the remote server for GDB. + Copyright (C) 1993-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef GDBSERVER_UTILS_H +#define GDBSERVER_UTILS_H + +char *paddress (CORE_ADDR addr); + +#endif /* GDBSERVER_UTILS_H */ diff -Nru gdb-9.1/gdbserver/win32-i386-low.cc gdb-10.2/gdbserver/win32-i386-low.cc --- gdb-9.1/gdbserver/win32-i386-low.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/win32-i386-low.cc 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,625 @@ +/* Copyright (C) 2007-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "server.h" +#include "win32-low.h" +#include "x86-low.h" +#include "gdbsupport/x86-xstate.h" +#ifdef __x86_64__ +#include "arch/amd64.h" +#endif +#include "arch/i386.h" +#include "tdesc.h" +#include "x86-tdesc.h" + +using namespace windows_nat; + +#ifndef CONTEXT_EXTENDED_REGISTERS +#define CONTEXT_EXTENDED_REGISTERS 0 +#endif + +#define FCS_REGNUM 27 +#define FOP_REGNUM 31 + +#define FLAG_TRACE_BIT 0x100 + +static struct x86_debug_reg_state debug_reg_state; + +static void +update_debug_registers (thread_info *thread) +{ + windows_thread_info *th = (windows_thread_info *) thread_target_data (thread); + + /* The actual update is done later just before resuming the lwp, + we just mark that the registers need updating. */ + th->debug_registers_changed = true; +} + +/* Update the inferior's debug register REGNUM from STATE. */ + +static void +x86_dr_low_set_addr (int regnum, CORE_ADDR addr) +{ + gdb_assert (DR_FIRSTADDR <= regnum && regnum <= DR_LASTADDR); + + /* Only update the threads of this process. */ + for_each_thread (current_thread->id.pid (), update_debug_registers); +} + +/* Update the inferior's DR7 debug control register from STATE. */ + +static void +x86_dr_low_set_control (unsigned long control) +{ + /* Only update the threads of this process. */ + for_each_thread (current_thread->id.pid (), update_debug_registers); +} + +/* Return the current value of a DR register of the current thread's + context. */ + +static DWORD64 +win32_get_current_dr (int dr) +{ + windows_thread_info *th + = (windows_thread_info *) thread_target_data (current_thread); + + win32_require_context (th); + +#ifdef __x86_64__ +#define RET_DR(DR) \ + case DR: \ + return th->wow64_context.Dr ## DR + + if (wow64_process) + { + switch (dr) + { + RET_DR (0); + RET_DR (1); + RET_DR (2); + RET_DR (3); + RET_DR (6); + RET_DR (7); + } + } + else +#undef RET_DR +#endif +#define RET_DR(DR) \ + case DR: \ + return th->context.Dr ## DR + + { + switch (dr) + { + RET_DR (0); + RET_DR (1); + RET_DR (2); + RET_DR (3); + RET_DR (6); + RET_DR (7); + } + } + +#undef RET_DR + + gdb_assert_not_reached ("unhandled dr"); +} + +static CORE_ADDR +x86_dr_low_get_addr (int regnum) +{ + gdb_assert (DR_FIRSTADDR <= regnum && regnum <= DR_LASTADDR); + + return win32_get_current_dr (regnum - DR_FIRSTADDR); +} + +static unsigned long +x86_dr_low_get_control (void) +{ + return win32_get_current_dr (7); +} + +/* Get the value of the DR6 debug status register from the inferior + and record it in STATE. */ + +static unsigned long +x86_dr_low_get_status (void) +{ + return win32_get_current_dr (6); +} + +/* Low-level function vector. */ +struct x86_dr_low_type x86_dr_low = + { + x86_dr_low_set_control, + x86_dr_low_set_addr, + x86_dr_low_get_addr, + x86_dr_low_get_status, + x86_dr_low_get_control, + sizeof (void *), + }; + +/* Breakpoint/watchpoint support. */ + +static int +i386_supports_z_point_type (char z_type) +{ + switch (z_type) + { + case Z_PACKET_HW_BP: + case Z_PACKET_WRITE_WP: + case Z_PACKET_ACCESS_WP: + return 1; + default: + return 0; + } +} + +static int +i386_insert_point (enum raw_bkpt_type type, CORE_ADDR addr, + int size, struct raw_breakpoint *bp) +{ + switch (type) + { + case raw_bkpt_type_hw: + case raw_bkpt_type_write_wp: + case raw_bkpt_type_access_wp: + { + enum target_hw_bp_type hw_type + = raw_bkpt_type_to_target_hw_bp_type (type); + + return x86_dr_insert_watchpoint (&debug_reg_state, + hw_type, addr, size); + } + default: + /* Unsupported. */ + return 1; + } +} + +static int +i386_remove_point (enum raw_bkpt_type type, CORE_ADDR addr, + int size, struct raw_breakpoint *bp) +{ + switch (type) + { + case raw_bkpt_type_hw: + case raw_bkpt_type_write_wp: + case raw_bkpt_type_access_wp: + { + enum target_hw_bp_type hw_type + = raw_bkpt_type_to_target_hw_bp_type (type); + + return x86_dr_remove_watchpoint (&debug_reg_state, + hw_type, addr, size); + } + default: + /* Unsupported. */ + return 1; + } +} + +static int +x86_stopped_by_watchpoint (void) +{ + return x86_dr_stopped_by_watchpoint (&debug_reg_state); +} + +static CORE_ADDR +x86_stopped_data_address (void) +{ + CORE_ADDR addr; + if (x86_dr_stopped_data_address (&debug_reg_state, &addr)) + return addr; + return 0; +} + +static void +i386_initial_stuff (void) +{ + x86_low_init_dregs (&debug_reg_state); +} + +static void +i386_get_thread_context (windows_thread_info *th) +{ + /* Requesting the CONTEXT_EXTENDED_REGISTERS register set fails if + the system doesn't support extended registers. */ + static DWORD extended_registers = CONTEXT_EXTENDED_REGISTERS; + + again: +#ifdef __x86_64__ + if (wow64_process) + th->wow64_context.ContextFlags = (CONTEXT_FULL + | CONTEXT_FLOATING_POINT + | CONTEXT_DEBUG_REGISTERS + | extended_registers); + else +#endif + th->context.ContextFlags = (CONTEXT_FULL + | CONTEXT_FLOATING_POINT + | CONTEXT_DEBUG_REGISTERS + | extended_registers); + + BOOL ret; +#ifdef __x86_64__ + if (wow64_process) + ret = win32_Wow64GetThreadContext (th->h, &th->wow64_context); + else +#endif + ret = GetThreadContext (th->h, &th->context); + if (!ret) + { + DWORD e = GetLastError (); + + if (extended_registers && e == ERROR_INVALID_PARAMETER) + { + extended_registers = 0; + goto again; + } + + error ("GetThreadContext failure %ld\n", (long) e); + } +} + +static void +i386_prepare_to_resume (windows_thread_info *th) +{ + if (th->debug_registers_changed) + { + struct x86_debug_reg_state *dr = &debug_reg_state; + + win32_require_context (th); + +#ifdef __x86_64__ + if (wow64_process) + { + th->wow64_context.Dr0 = dr->dr_mirror[0]; + th->wow64_context.Dr1 = dr->dr_mirror[1]; + th->wow64_context.Dr2 = dr->dr_mirror[2]; + th->wow64_context.Dr3 = dr->dr_mirror[3]; + /* th->wow64_context.Dr6 = dr->dr_status_mirror; + FIXME: should we set dr6 also ?? */ + th->wow64_context.Dr7 = dr->dr_control_mirror; + } + else +#endif + { + th->context.Dr0 = dr->dr_mirror[0]; + th->context.Dr1 = dr->dr_mirror[1]; + th->context.Dr2 = dr->dr_mirror[2]; + th->context.Dr3 = dr->dr_mirror[3]; + /* th->context.Dr6 = dr->dr_status_mirror; + FIXME: should we set dr6 also ?? */ + th->context.Dr7 = dr->dr_control_mirror; + } + + th->debug_registers_changed = false; + } +} + +static void +i386_thread_added (windows_thread_info *th) +{ + th->debug_registers_changed = true; +} + +static void +i386_single_step (windows_thread_info *th) +{ +#ifdef __x86_64__ + if (wow64_process) + th->wow64_context.EFlags |= FLAG_TRACE_BIT; + else +#endif + th->context.EFlags |= FLAG_TRACE_BIT; +} + +/* An array of offset mappings into a Win32 Context structure. + This is a one-to-one mapping which is indexed by gdb's register + numbers. It retrieves an offset into the context structure where + the 4 byte register is located. + An offset value of -1 indicates that Win32 does not provide this + register in it's CONTEXT structure. In this case regptr will return + a pointer into a dummy register. */ +#ifdef __x86_64__ +#define context_offset(x) (offsetof (WOW64_CONTEXT, x)) +#else +#define context_offset(x) ((int)&(((CONTEXT *)NULL)->x)) +#endif +static const int i386_mappings[] = { + context_offset (Eax), + context_offset (Ecx), + context_offset (Edx), + context_offset (Ebx), + context_offset (Esp), + context_offset (Ebp), + context_offset (Esi), + context_offset (Edi), + context_offset (Eip), + context_offset (EFlags), + context_offset (SegCs), + context_offset (SegSs), + context_offset (SegDs), + context_offset (SegEs), + context_offset (SegFs), + context_offset (SegGs), + context_offset (FloatSave.RegisterArea[0 * 10]), + context_offset (FloatSave.RegisterArea[1 * 10]), + context_offset (FloatSave.RegisterArea[2 * 10]), + context_offset (FloatSave.RegisterArea[3 * 10]), + context_offset (FloatSave.RegisterArea[4 * 10]), + context_offset (FloatSave.RegisterArea[5 * 10]), + context_offset (FloatSave.RegisterArea[6 * 10]), + context_offset (FloatSave.RegisterArea[7 * 10]), + context_offset (FloatSave.ControlWord), + context_offset (FloatSave.StatusWord), + context_offset (FloatSave.TagWord), + context_offset (FloatSave.ErrorSelector), + context_offset (FloatSave.ErrorOffset), + context_offset (FloatSave.DataSelector), + context_offset (FloatSave.DataOffset), + context_offset (FloatSave.ErrorSelector), + /* XMM0-7 */ + context_offset (ExtendedRegisters[10 * 16]), + context_offset (ExtendedRegisters[11 * 16]), + context_offset (ExtendedRegisters[12 * 16]), + context_offset (ExtendedRegisters[13 * 16]), + context_offset (ExtendedRegisters[14 * 16]), + context_offset (ExtendedRegisters[15 * 16]), + context_offset (ExtendedRegisters[16 * 16]), + context_offset (ExtendedRegisters[17 * 16]), + /* MXCSR */ + context_offset (ExtendedRegisters[24]) +}; +#undef context_offset + +#ifdef __x86_64__ + +#define context_offset(x) (offsetof (CONTEXT, x)) +static const int amd64_mappings[] = +{ + context_offset (Rax), + context_offset (Rbx), + context_offset (Rcx), + context_offset (Rdx), + context_offset (Rsi), + context_offset (Rdi), + context_offset (Rbp), + context_offset (Rsp), + context_offset (R8), + context_offset (R9), + context_offset (R10), + context_offset (R11), + context_offset (R12), + context_offset (R13), + context_offset (R14), + context_offset (R15), + context_offset (Rip), + context_offset (EFlags), + context_offset (SegCs), + context_offset (SegSs), + context_offset (SegDs), + context_offset (SegEs), + context_offset (SegFs), + context_offset (SegGs), + context_offset (FloatSave.FloatRegisters[0]), + context_offset (FloatSave.FloatRegisters[1]), + context_offset (FloatSave.FloatRegisters[2]), + context_offset (FloatSave.FloatRegisters[3]), + context_offset (FloatSave.FloatRegisters[4]), + context_offset (FloatSave.FloatRegisters[5]), + context_offset (FloatSave.FloatRegisters[6]), + context_offset (FloatSave.FloatRegisters[7]), + context_offset (FloatSave.ControlWord), + context_offset (FloatSave.StatusWord), + context_offset (FloatSave.TagWord), + context_offset (FloatSave.ErrorSelector), + context_offset (FloatSave.ErrorOffset), + context_offset (FloatSave.DataSelector), + context_offset (FloatSave.DataOffset), + context_offset (FloatSave.ErrorSelector) + /* XMM0-7 */ , + context_offset (Xmm0), + context_offset (Xmm1), + context_offset (Xmm2), + context_offset (Xmm3), + context_offset (Xmm4), + context_offset (Xmm5), + context_offset (Xmm6), + context_offset (Xmm7), + context_offset (Xmm8), + context_offset (Xmm9), + context_offset (Xmm10), + context_offset (Xmm11), + context_offset (Xmm12), + context_offset (Xmm13), + context_offset (Xmm14), + context_offset (Xmm15), + /* MXCSR */ + context_offset (FloatSave.MxCsr) +}; +#undef context_offset + +#endif /* __x86_64__ */ + +/* Fetch register from gdbserver regcache data. */ +static void +i386_fetch_inferior_register (struct regcache *regcache, + windows_thread_info *th, int r) +{ + const int *mappings; +#ifdef __x86_64__ + if (!wow64_process) + mappings = amd64_mappings; + else +#endif + mappings = i386_mappings; + + char *context_offset; +#ifdef __x86_64__ + if (wow64_process) + context_offset = (char *) &th->wow64_context + mappings[r]; + else +#endif + context_offset = (char *) &th->context + mappings[r]; + + long l; + if (r == FCS_REGNUM) + { + l = *((long *) context_offset) & 0xffff; + supply_register (regcache, r, (char *) &l); + } + else if (r == FOP_REGNUM) + { + l = (*((long *) context_offset) >> 16) & ((1 << 11) - 1); + supply_register (regcache, r, (char *) &l); + } + else + supply_register (regcache, r, context_offset); +} + +/* Store a new register value into the thread context of TH. */ +static void +i386_store_inferior_register (struct regcache *regcache, + windows_thread_info *th, int r) +{ + const int *mappings; +#ifdef __x86_64__ + if (!wow64_process) + mappings = amd64_mappings; + else +#endif + mappings = i386_mappings; + + char *context_offset; +#ifdef __x86_64__ + if (wow64_process) + context_offset = (char *) &th->wow64_context + mappings[r]; + else +#endif + context_offset = (char *) &th->context + mappings[r]; + + collect_register (regcache, r, context_offset); +} + +static const unsigned char i386_win32_breakpoint = 0xcc; +#define i386_win32_breakpoint_len 1 + +static void +i386_arch_setup (void) +{ + struct target_desc *tdesc; + +#ifdef __x86_64__ + tdesc = amd64_create_target_description (X86_XSTATE_SSE_MASK, false, + false, false); + init_target_desc (tdesc, amd64_expedite_regs); + win32_tdesc = tdesc; +#endif + + tdesc = i386_create_target_description (X86_XSTATE_SSE_MASK, false, false); + init_target_desc (tdesc, i386_expedite_regs); +#ifdef __x86_64__ + wow64_win32_tdesc = tdesc; +#else + win32_tdesc = tdesc; +#endif +} + +/* Implement win32_target_ops "num_regs" method. */ + +static int +i386_win32_num_regs (void) +{ + int num_regs; +#ifdef __x86_64__ + if (!wow64_process) + num_regs = sizeof (amd64_mappings) / sizeof (amd64_mappings[0]); + else +#endif + num_regs = sizeof (i386_mappings) / sizeof (i386_mappings[0]); + return num_regs; +} + +/* Implement win32_target_ops "get_pc" method. */ + +static CORE_ADDR +i386_win32_get_pc (struct regcache *regcache) +{ + bool use_64bit = register_size (regcache->tdesc, 0) == 8; + + if (use_64bit) + { + uint64_t pc; + + collect_register_by_name (regcache, "rip", &pc); + return (CORE_ADDR) pc; + } + else + { + uint32_t pc; + + collect_register_by_name (regcache, "eip", &pc); + return (CORE_ADDR) pc; + } +} + +/* Implement win32_target_ops "set_pc" method. */ + +static void +i386_win32_set_pc (struct regcache *regcache, CORE_ADDR pc) +{ + bool use_64bit = register_size (regcache->tdesc, 0) == 8; + + if (use_64bit) + { + uint64_t newpc = pc; + + supply_register_by_name (regcache, "rip", &newpc); + } + else + { + uint32_t newpc = pc; + + supply_register_by_name (regcache, "eip", &newpc); + } +} + +struct win32_target_ops the_low_target = { + i386_arch_setup, + i386_win32_num_regs, + i386_initial_stuff, + i386_get_thread_context, + i386_prepare_to_resume, + i386_thread_added, + i386_fetch_inferior_register, + i386_store_inferior_register, + i386_single_step, + &i386_win32_breakpoint, + i386_win32_breakpoint_len, + 1, + i386_win32_get_pc, + i386_win32_set_pc, + i386_supports_z_point_type, + i386_insert_point, + i386_remove_point, + x86_stopped_by_watchpoint, + x86_stopped_data_address +}; diff -Nru gdb-9.1/gdbserver/win32-low.cc gdb-10.2/gdbserver/win32-low.cc --- gdb-9.1/gdbserver/win32-low.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/win32-low.cc 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,1916 @@ +/* Low level interface to Windows debugging, for gdbserver. + Copyright (C) 2006-2021 Free Software Foundation, Inc. + + Contributed by Leo Zayas. Based on "win32-nat.c" from GDB. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "server.h" +#include "regcache.h" +#include "gdb/fileio.h" +#include "mem-break.h" +#include "win32-low.h" +#include "gdbthread.h" +#include "dll.h" +#include "hostio.h" +#include <windows.h> +#include <winnt.h> +#include <imagehlp.h> +#include <tlhelp32.h> +#include <psapi.h> +#include <process.h> +#include "gdbsupport/gdb_tilde_expand.h" +#include "gdbsupport/common-inferior.h" +#include "gdbsupport/gdb_wait.h" + +using namespace windows_nat; + +#ifndef USE_WIN32API +#include <sys/cygwin.h> +#endif + +#define OUTMSG(X) do { printf X; fflush (stderr); } while (0) + +#define OUTMSG2(X) \ + do \ + { \ + if (debug_threads) \ + { \ + printf X; \ + fflush (stderr); \ + } \ + } while (0) + +#ifndef _T +#define _T(x) TEXT (x) +#endif + +#ifndef COUNTOF +#define COUNTOF(STR) (sizeof (STR) / sizeof ((STR)[0])) +#endif + +#ifdef _WIN32_WCE +# define GETPROCADDRESS(DLL, PROC) \ + ((winapi_ ## PROC) GetProcAddress (DLL, TEXT (#PROC))) +#else +# define GETPROCADDRESS(DLL, PROC) \ + ((winapi_ ## PROC) GetProcAddress (DLL, #PROC)) +#endif + +int using_threads = 1; + +/* Globals. */ +static int attaching = 0; + +/* A status that hasn't been reported to the core yet, and so + win32_wait should return it next, instead of fetching the next + debug event off the win32 API. */ +static struct target_waitstatus cached_status; + +/* Non zero if an interrupt request is to be satisfied by suspending + all threads. */ +static int soft_interrupt_requested = 0; + +/* Non zero if the inferior is stopped in a simulated breakpoint done + by suspending all the threads. */ +static int faked_breakpoint = 0; + +/* True if current_process_handle needs to be closed. */ +static bool open_process_used = false; + +const struct target_desc *win32_tdesc; +#ifdef __x86_64__ +const struct target_desc *wow64_win32_tdesc; +#endif + +#define NUM_REGS (the_low_target.num_regs ()) + +typedef BOOL (WINAPI *winapi_DebugActiveProcessStop) (DWORD dwProcessId); +typedef BOOL (WINAPI *winapi_DebugSetProcessKillOnExit) (BOOL KillOnExit); +typedef BOOL (WINAPI *winapi_DebugBreakProcess) (HANDLE); +typedef BOOL (WINAPI *winapi_GenerateConsoleCtrlEvent) (DWORD, DWORD); + +#ifdef __x86_64__ +typedef BOOL (WINAPI *winapi_Wow64SetThreadContext) (HANDLE, + const WOW64_CONTEXT *); + +winapi_Wow64GetThreadContext win32_Wow64GetThreadContext; +static winapi_Wow64SetThreadContext win32_Wow64SetThreadContext; +#endif + +#ifndef _WIN32_WCE +static void win32_add_all_dlls (void); +#endif + +/* Get the thread ID from the current selected inferior (the current + thread). */ +static ptid_t +current_thread_ptid (void) +{ + return current_ptid; +} + +/* The current debug event from WaitForDebugEvent. */ +static ptid_t +debug_event_ptid (DEBUG_EVENT *event) +{ + return ptid_t (event->dwProcessId, event->dwThreadId, 0); +} + +/* Get the thread context of the thread associated with TH. */ + +static void +win32_get_thread_context (windows_thread_info *th) +{ +#ifdef __x86_64__ + if (wow64_process) + memset (&th->wow64_context, 0, sizeof (WOW64_CONTEXT)); + else +#endif + memset (&th->context, 0, sizeof (CONTEXT)); + (*the_low_target.get_thread_context) (th); +#ifdef _WIN32_WCE + memcpy (&th->base_context, &th->context, sizeof (CONTEXT)); +#endif +} + +/* Set the thread context of the thread associated with TH. */ + +static void +win32_set_thread_context (windows_thread_info *th) +{ +#ifdef _WIN32_WCE + /* Calling SuspendThread on a thread that is running kernel code + will report that the suspending was successful, but in fact, that + will often not be true. In those cases, the context returned by + GetThreadContext will not be correct by the time the thread + stops, hence we can't set that context back into the thread when + resuming - it will most likely crash the inferior. + Unfortunately, there is no way to know when the thread will + really stop. To work around it, we'll only write the context + back to the thread when either the user or GDB explicitly change + it between stopping and resuming. */ + if (memcmp (&th->context, &th->base_context, sizeof (CONTEXT)) != 0) +#endif + { +#ifdef __x86_64__ + if (wow64_process) + win32_Wow64SetThreadContext (th->h, &th->wow64_context); + else +#endif + SetThreadContext (th->h, &th->context); + } +} + +/* Set the thread context of the thread associated with TH. */ + +static void +win32_prepare_to_resume (windows_thread_info *th) +{ + if (the_low_target.prepare_to_resume != NULL) + (*the_low_target.prepare_to_resume) (th); +} + +/* See win32-low.h. */ + +void +win32_require_context (windows_thread_info *th) +{ + DWORD context_flags; +#ifdef __x86_64__ + if (wow64_process) + context_flags = th->wow64_context.ContextFlags; + else +#endif + context_flags = th->context.ContextFlags; + if (context_flags == 0) + { + th->suspend (); + win32_get_thread_context (th); + } +} + +/* See nat/windows-nat.h. */ + +windows_thread_info * +windows_nat::thread_rec (ptid_t ptid, thread_disposition_type disposition) +{ + thread_info *thread = find_thread_ptid (ptid); + if (thread == NULL) + return NULL; + + windows_thread_info *th = (windows_thread_info *) thread_target_data (thread); + if (disposition != DONT_INVALIDATE_CONTEXT) + win32_require_context (th); + return th; +} + +/* Add a thread to the thread list. */ +static windows_thread_info * +child_add_thread (DWORD pid, DWORD tid, HANDLE h, void *tlb) +{ + windows_thread_info *th; + ptid_t ptid = ptid_t (pid, tid, 0); + + if ((th = thread_rec (ptid, DONT_INVALIDATE_CONTEXT))) + return th; + + CORE_ADDR base = (CORE_ADDR) (uintptr_t) tlb; +#ifdef __x86_64__ + /* For WOW64 processes, this is actually the pointer to the 64bit TIB, + and the 32bit TIB is exactly 2 pages after it. */ + if (wow64_process) + base += 2 * 4096; /* page size = 4096 */ +#endif + th = new windows_thread_info (tid, h, base); + + add_thread (ptid, th); + + if (the_low_target.thread_added != NULL) + (*the_low_target.thread_added) (th); + + return th; +} + +/* Delete a thread from the list of threads. */ +static void +delete_thread_info (thread_info *thread) +{ + windows_thread_info *th = (windows_thread_info *) thread_target_data (thread); + + remove_thread (thread); + delete th; +} + +/* Delete a thread from the list of threads. */ +static void +child_delete_thread (DWORD pid, DWORD tid) +{ + /* If the last thread is exiting, just return. */ + if (all_threads.size () == 1) + return; + + thread_info *thread = find_thread_ptid (ptid_t (pid, tid)); + if (thread == NULL) + return; + + delete_thread_info (thread); +} + +/* These watchpoint related wrapper functions simply pass on the function call + if the low target has registered a corresponding function. */ + +bool +win32_process_target::supports_z_point_type (char z_type) +{ + return (z_type == Z_PACKET_SW_BP + || (the_low_target.supports_z_point_type != NULL + && the_low_target.supports_z_point_type (z_type))); +} + +int +win32_process_target::insert_point (enum raw_bkpt_type type, CORE_ADDR addr, + int size, raw_breakpoint *bp) +{ + if (type == raw_bkpt_type_sw) + return insert_memory_breakpoint (bp); + else if (the_low_target.insert_point != NULL) + return the_low_target.insert_point (type, addr, size, bp); + else + /* Unsupported (see target.h). */ + return 1; +} + +int +win32_process_target::remove_point (enum raw_bkpt_type type, CORE_ADDR addr, + int size, raw_breakpoint *bp) +{ + if (type == raw_bkpt_type_sw) + return remove_memory_breakpoint (bp); + else if (the_low_target.remove_point != NULL) + return the_low_target.remove_point (type, addr, size, bp); + else + /* Unsupported (see target.h). */ + return 1; +} + +bool +win32_process_target::stopped_by_watchpoint () +{ + if (the_low_target.stopped_by_watchpoint != NULL) + return the_low_target.stopped_by_watchpoint (); + else + return false; +} + +CORE_ADDR +win32_process_target::stopped_data_address () +{ + if (the_low_target.stopped_data_address != NULL) + return the_low_target.stopped_data_address (); + else + return 0; +} + + +/* Transfer memory from/to the debugged process. */ +static int +child_xfer_memory (CORE_ADDR memaddr, char *our, int len, + int write, process_stratum_target *target) +{ + BOOL success; + SIZE_T done = 0; + DWORD lasterror = 0; + uintptr_t addr = (uintptr_t) memaddr; + + if (write) + { + success = WriteProcessMemory (current_process_handle, (LPVOID) addr, + (LPCVOID) our, len, &done); + if (!success) + lasterror = GetLastError (); + FlushInstructionCache (current_process_handle, (LPCVOID) addr, len); + } + else + { + success = ReadProcessMemory (current_process_handle, (LPCVOID) addr, + (LPVOID) our, len, &done); + if (!success) + lasterror = GetLastError (); + } + if (!success && lasterror == ERROR_PARTIAL_COPY && done > 0) + return done; + else + return success ? done : -1; +} + +/* Clear out any old thread list and reinitialize it to a pristine + state. */ +static void +child_init_thread_list (void) +{ + for_each_thread (delete_thread_info); +} + +/* Zero during the child initialization phase, and nonzero otherwise. */ + +static int child_initialization_done = 0; + +static void +do_initial_child_stuff (HANDLE proch, DWORD pid, int attached) +{ + struct process_info *proc; + + last_sig = GDB_SIGNAL_0; + + current_process_handle = proch; + current_process_id = pid; + main_thread_id = 0; + + soft_interrupt_requested = 0; + faked_breakpoint = 0; + open_process_used = true; + + memset (¤t_event, 0, sizeof (current_event)); + +#ifdef __x86_64__ + BOOL wow64; + if (!IsWow64Process (proch, &wow64)) + { + DWORD err = GetLastError (); + error ("Check if WOW64 process failed (error %d): %s\n", + (int) err, strwinerror (err)); + } + wow64_process = wow64; + + if (wow64_process + && (win32_Wow64GetThreadContext == nullptr + || win32_Wow64SetThreadContext == nullptr)) + error ("WOW64 debugging is not supported on this system.\n"); + + ignore_first_breakpoint = !attached && wow64_process; +#endif + + proc = add_process (pid, attached); +#ifdef __x86_64__ + if (wow64_process) + proc->tdesc = wow64_win32_tdesc; + else +#endif + proc->tdesc = win32_tdesc; + child_init_thread_list (); + child_initialization_done = 0; + + if (the_low_target.initial_stuff != NULL) + (*the_low_target.initial_stuff) (); + + cached_status.kind = TARGET_WAITKIND_IGNORE; + + /* Flush all currently pending debug events (thread and dll list) up + to the initial breakpoint. */ + while (1) + { + struct target_waitstatus status; + + the_target->wait (minus_one_ptid, &status, 0); + + /* Note win32_wait doesn't return thread events. */ + if (status.kind != TARGET_WAITKIND_LOADED) + { + cached_status = status; + break; + } + + { + struct thread_resume resume; + + resume.thread = minus_one_ptid; + resume.kind = resume_continue; + resume.sig = 0; + + the_target->resume (&resume, 1); + } + } + +#ifndef _WIN32_WCE + /* Now that the inferior has been started and all DLLs have been mapped, + we can iterate over all DLLs and load them in. + + We avoid doing it any earlier because, on certain versions of Windows, + LOAD_DLL_DEBUG_EVENTs are sometimes not complete. In particular, + we have seen on Windows 8.1 that the ntdll.dll load event does not + include the DLL name, preventing us from creating an associated SO. + A possible explanation is that ntdll.dll might be mapped before + the SO info gets created by the Windows system -- ntdll.dll is + the first DLL to be reported via LOAD_DLL_DEBUG_EVENT and other DLLs + do not seem to suffer from that problem. + + Rather than try to work around this sort of issue, it is much + simpler to just ignore DLL load/unload events during the startup + phase, and then process them all in one batch now. */ + win32_add_all_dlls (); +#endif + + child_initialization_done = 1; +} + +/* Resume all artificially suspended threads if we are continuing + execution. */ +static void +continue_one_thread (thread_info *thread, int thread_id) +{ + windows_thread_info *th = (windows_thread_info *) thread_target_data (thread); + + if (thread_id == -1 || thread_id == th->tid) + { + win32_prepare_to_resume (th); + + if (th->suspended) + { + DWORD *context_flags; +#ifdef __x86_64__ + if (wow64_process) + context_flags = &th->wow64_context.ContextFlags; + else +#endif + context_flags = &th->context.ContextFlags; + if (*context_flags) + { + win32_set_thread_context (th); + *context_flags = 0; + } + + th->resume (); + } + } +} + +static BOOL +child_continue (DWORD continue_status, int thread_id) +{ + desired_stop_thread_id = thread_id; + if (matching_pending_stop (debug_threads)) + return TRUE; + + /* The inferior will only continue after the ContinueDebugEvent + call. */ + for_each_thread ([&] (thread_info *thread) + { + continue_one_thread (thread, thread_id); + }); + faked_breakpoint = 0; + + return continue_last_debug_event (continue_status, debug_threads); +} + +/* Fetch register(s) from the current thread context. */ +static void +child_fetch_inferior_registers (struct regcache *regcache, int r) +{ + int regno; + windows_thread_info *th = thread_rec (current_thread_ptid (), + INVALIDATE_CONTEXT); + if (r == -1 || r > NUM_REGS) + child_fetch_inferior_registers (regcache, NUM_REGS); + else + for (regno = 0; regno < r; regno++) + (*the_low_target.fetch_inferior_register) (regcache, th, regno); +} + +/* Store a new register value into the current thread context. We don't + change the program's context until later, when we resume it. */ +static void +child_store_inferior_registers (struct regcache *regcache, int r) +{ + int regno; + windows_thread_info *th = thread_rec (current_thread_ptid (), + INVALIDATE_CONTEXT); + if (r == -1 || r == 0 || r > NUM_REGS) + child_store_inferior_registers (regcache, NUM_REGS); + else + for (regno = 0; regno < r; regno++) + (*the_low_target.store_inferior_register) (regcache, th, regno); +} + +/* Map the Windows error number in ERROR to a locale-dependent error + message string and return a pointer to it. Typically, the values + for ERROR come from GetLastError. + + The string pointed to shall not be modified by the application, + but may be overwritten by a subsequent call to strwinerror + + The strwinerror function does not change the current setting + of GetLastError. */ + +char * +strwinerror (DWORD error) +{ + static char buf[1024]; + TCHAR *msgbuf; + DWORD lasterr = GetLastError (); + DWORD chars = FormatMessage (FORMAT_MESSAGE_FROM_SYSTEM + | FORMAT_MESSAGE_ALLOCATE_BUFFER, + NULL, + error, + 0, /* Default language */ + (LPTSTR) &msgbuf, + 0, + NULL); + if (chars != 0) + { + /* If there is an \r\n appended, zap it. */ + if (chars >= 2 + && msgbuf[chars - 2] == '\r' + && msgbuf[chars - 1] == '\n') + { + chars -= 2; + msgbuf[chars] = 0; + } + + if (chars > ((COUNTOF (buf)) - 1)) + { + chars = COUNTOF (buf) - 1; + msgbuf [chars] = 0; + } + +#ifdef UNICODE + wcstombs (buf, msgbuf, chars + 1); +#else + strncpy (buf, msgbuf, chars + 1); +#endif + LocalFree (msgbuf); + } + else + sprintf (buf, "unknown win32 error (%u)", (unsigned) error); + + SetLastError (lasterr); + return buf; +} + +static BOOL +create_process (const char *program, char *args, + DWORD flags, PROCESS_INFORMATION *pi) +{ + const char *inferior_cwd = get_inferior_cwd (); + BOOL ret; + size_t argslen, proglen; + + proglen = strlen (program) + 1; + argslen = strlen (args) + proglen; + +#ifdef _WIN32_WCE + wchar_t *p, *wprogram, *wargs, *wcwd = NULL; + + wprogram = (wchar_t *) alloca (proglen * sizeof (wchar_t)); + mbstowcs (wprogram, program, proglen); + + for (p = wprogram; *p; ++p) + if (L'/' == *p) + *p = L'\\'; + + wargs = alloca ((argslen + 1) * sizeof (wchar_t)); + wcscpy (wargs, wprogram); + wcscat (wargs, L" "); + mbstowcs (wargs + proglen, args, argslen + 1 - proglen); + + if (inferior_cwd != NULL) + { + std::string expanded_infcwd = gdb_tilde_expand (inferior_cwd); + std::replace (expanded_infcwd.begin (), expanded_infcwd.end (), + '/', '\\'); + wcwd = alloca ((expanded_infcwd.size () + 1) * sizeof (wchar_t)); + if (mbstowcs (wcwd, expanded_infcwd.c_str (), + expanded_infcwd.size () + 1) == NULL) + { + error (_("\ +Could not convert the expanded inferior cwd to wide-char.")); + } + } + + ret = CreateProcessW (wprogram, /* image name */ + wargs, /* command line */ + NULL, /* security, not supported */ + NULL, /* thread, not supported */ + FALSE, /* inherit handles, not supported */ + flags, /* start flags */ + NULL, /* environment, not supported */ + wcwd, /* current directory */ + NULL, /* start info, not supported */ + pi); /* proc info */ +#else + STARTUPINFOA si = { sizeof (STARTUPINFOA) }; + char *program_and_args = (char *) alloca (argslen + 1); + + strcpy (program_and_args, program); + strcat (program_and_args, " "); + strcat (program_and_args, args); + ret = CreateProcessA (program, /* image name */ + program_and_args, /* command line */ + NULL, /* security */ + NULL, /* thread */ + TRUE, /* inherit handles */ + flags, /* start flags */ + NULL, /* environment */ + /* current directory */ + (inferior_cwd == NULL + ? NULL + : gdb_tilde_expand (inferior_cwd).c_str()), + &si, /* start info */ + pi); /* proc info */ +#endif + + return ret; +} + +/* Start a new process. + PROGRAM is the program name. + PROGRAM_ARGS is the vector containing the inferior's args. + Returns the new PID on success, -1 on failure. Registers the new + process with the process list. */ +int +win32_process_target::create_inferior (const char *program, + const std::vector<char *> &program_args) +{ + client_state &cs = get_client_state (); +#ifndef USE_WIN32API + char real_path[PATH_MAX]; + char *orig_path, *new_path, *path_ptr; +#endif + BOOL ret; + DWORD flags; + PROCESS_INFORMATION pi; + DWORD err; + std::string str_program_args = construct_inferior_arguments (program_args); + char *args = (char *) str_program_args.c_str (); + + /* win32_wait needs to know we're not attaching. */ + attaching = 0; + + if (!program) + error ("No executable specified, specify executable to debug.\n"); + + flags = DEBUG_PROCESS | DEBUG_ONLY_THIS_PROCESS; + +#ifndef USE_WIN32API + orig_path = NULL; + path_ptr = getenv ("PATH"); + if (path_ptr) + { + int size = cygwin_conv_path_list (CCP_POSIX_TO_WIN_A, path_ptr, NULL, 0); + orig_path = (char *) alloca (strlen (path_ptr) + 1); + new_path = (char *) alloca (size); + strcpy (orig_path, path_ptr); + cygwin_conv_path_list (CCP_POSIX_TO_WIN_A, path_ptr, new_path, size); + setenv ("PATH", new_path, 1); + } + cygwin_conv_path (CCP_POSIX_TO_WIN_A, program, real_path, PATH_MAX); + program = real_path; +#endif + + OUTMSG2 (("Command line is \"%s %s\"\n", program, args)); + +#ifdef CREATE_NEW_PROCESS_GROUP + flags |= CREATE_NEW_PROCESS_GROUP; +#endif + + ret = create_process (program, args, flags, &pi); + err = GetLastError (); + if (!ret && err == ERROR_FILE_NOT_FOUND) + { + char *exename = (char *) alloca (strlen (program) + 5); + strcat (strcpy (exename, program), ".exe"); + ret = create_process (exename, args, flags, &pi); + err = GetLastError (); + } + +#ifndef USE_WIN32API + if (orig_path) + setenv ("PATH", orig_path, 1); +#endif + + if (!ret) + { + error ("Error creating process \"%s %s\", (error %d): %s\n", + program, args, (int) err, strwinerror (err)); + } + else + { + OUTMSG2 (("Process created: %s %s\n", program, (char *) args)); + } + +#ifndef _WIN32_WCE + /* On Windows CE this handle can't be closed. The OS reuses + it in the debug events, while the 9x/NT versions of Windows + probably use a DuplicateHandle'd one. */ + CloseHandle (pi.hThread); +#endif + + do_initial_child_stuff (pi.hProcess, pi.dwProcessId, 0); + + /* Wait till we are at 1st instruction in program, return new pid + (assuming success). */ + cs.last_ptid = wait (ptid_t (current_process_id), &cs.last_status, 0); + + /* Necessary for handle_v_kill. */ + signal_pid = current_process_id; + + return current_process_id; +} + +/* Attach to a running process. + PID is the process ID to attach to, specified by the user + or a higher layer. */ +int +win32_process_target::attach (unsigned long pid) +{ + HANDLE h; + winapi_DebugSetProcessKillOnExit DebugSetProcessKillOnExit = NULL; + DWORD err; +#ifdef _WIN32_WCE + HMODULE dll = GetModuleHandle (_T("COREDLL.DLL")); +#else + HMODULE dll = GetModuleHandle (_T("KERNEL32.DLL")); +#endif + DebugSetProcessKillOnExit = GETPROCADDRESS (dll, DebugSetProcessKillOnExit); + + h = OpenProcess (PROCESS_ALL_ACCESS, FALSE, pid); + if (h != NULL) + { + if (DebugActiveProcess (pid)) + { + if (DebugSetProcessKillOnExit != NULL) + DebugSetProcessKillOnExit (FALSE); + + /* win32_wait needs to know we're attaching. */ + attaching = 1; + do_initial_child_stuff (h, pid, 1); + return 0; + } + + CloseHandle (h); + } + + err = GetLastError (); + error ("Attach to process failed (error %d): %s\n", + (int) err, strwinerror (err)); +} + +/* See nat/windows-nat.h. */ + +int +windows_nat::handle_output_debug_string (struct target_waitstatus *ourstatus) +{ +#define READ_BUFFER_LEN 1024 + CORE_ADDR addr; + char s[READ_BUFFER_LEN + 1] = { 0 }; + DWORD nbytes = current_event.u.DebugString.nDebugStringLength; + + if (nbytes == 0) + return 0; + + if (nbytes > READ_BUFFER_LEN) + nbytes = READ_BUFFER_LEN; + + addr = (CORE_ADDR) (size_t) current_event.u.DebugString.lpDebugStringData; + + if (current_event.u.DebugString.fUnicode) + { + /* The event tells us how many bytes, not chars, even + in Unicode. */ + WCHAR buffer[(READ_BUFFER_LEN + 1) / sizeof (WCHAR)] = { 0 }; + if (read_inferior_memory (addr, (unsigned char *) buffer, nbytes) != 0) + return 0; + wcstombs (s, buffer, (nbytes + 1) / sizeof (WCHAR)); + } + else + { + if (read_inferior_memory (addr, (unsigned char *) s, nbytes) != 0) + return 0; + } + + if (!startswith (s, "cYg")) + { + if (!server_waiting) + { + OUTMSG2(("%s", s)); + return 0; + } + + monitor_output (s); + } +#undef READ_BUFFER_LEN + + return 0; +} + +static void +win32_clear_inferiors (void) +{ + if (open_process_used) + { + CloseHandle (current_process_handle); + open_process_used = false; + } + + for_each_thread (delete_thread_info); + siginfo_er.ExceptionCode = 0; + clear_inferiors (); +} + +/* Implementation of target_ops::kill. */ + +int +win32_process_target::kill (process_info *process) +{ + TerminateProcess (current_process_handle, 0); + for (;;) + { + if (!child_continue (DBG_CONTINUE, -1)) + break; + if (!wait_for_debug_event (¤t_event, INFINITE)) + break; + if (current_event.dwDebugEventCode == EXIT_PROCESS_DEBUG_EVENT) + break; + else if (current_event.dwDebugEventCode == OUTPUT_DEBUG_STRING_EVENT) + handle_output_debug_string (nullptr); + } + + win32_clear_inferiors (); + + remove_process (process); + return 0; +} + +/* Implementation of target_ops::detach. */ + +int +win32_process_target::detach (process_info *process) +{ + winapi_DebugActiveProcessStop DebugActiveProcessStop = NULL; + winapi_DebugSetProcessKillOnExit DebugSetProcessKillOnExit = NULL; +#ifdef _WIN32_WCE + HMODULE dll = GetModuleHandle (_T("COREDLL.DLL")); +#else + HMODULE dll = GetModuleHandle (_T("KERNEL32.DLL")); +#endif + DebugActiveProcessStop = GETPROCADDRESS (dll, DebugActiveProcessStop); + DebugSetProcessKillOnExit = GETPROCADDRESS (dll, DebugSetProcessKillOnExit); + + if (DebugSetProcessKillOnExit == NULL + || DebugActiveProcessStop == NULL) + return -1; + + { + struct thread_resume resume; + resume.thread = minus_one_ptid; + resume.kind = resume_continue; + resume.sig = 0; + this->resume (&resume, 1); + } + + if (!DebugActiveProcessStop (current_process_id)) + return -1; + + DebugSetProcessKillOnExit (FALSE); + remove_process (process); + + win32_clear_inferiors (); + return 0; +} + +void +win32_process_target::mourn (struct process_info *process) +{ + remove_process (process); +} + +/* Implementation of target_ops::join. */ + +void +win32_process_target::join (int pid) +{ + HANDLE h = OpenProcess (PROCESS_ALL_ACCESS, FALSE, pid); + if (h != NULL) + { + WaitForSingleObject (h, INFINITE); + CloseHandle (h); + } +} + +/* Return true iff the thread with thread ID TID is alive. */ +bool +win32_process_target::thread_alive (ptid_t ptid) +{ + /* Our thread list is reliable; don't bother to poll target + threads. */ + return find_thread_ptid (ptid) != NULL; +} + +/* Resume the inferior process. RESUME_INFO describes how we want + to resume. */ +void +win32_process_target::resume (thread_resume *resume_info, size_t n) +{ + DWORD tid; + enum gdb_signal sig; + int step; + windows_thread_info *th; + DWORD continue_status = DBG_CONTINUE; + ptid_t ptid; + + /* This handles the very limited set of resume packets that GDB can + currently produce. */ + + if (n == 1 && resume_info[0].thread == minus_one_ptid) + tid = -1; + else if (n > 1) + tid = -1; + else + /* Yes, we're ignoring resume_info[0].thread. It'd be tricky to make + the Windows resume code do the right thing for thread switching. */ + tid = current_event.dwThreadId; + + if (resume_info[0].thread != minus_one_ptid) + { + sig = gdb_signal_from_host (resume_info[0].sig); + step = resume_info[0].kind == resume_step; + } + else + { + sig = GDB_SIGNAL_0; + step = 0; + } + + if (sig != GDB_SIGNAL_0) + { + if (current_event.dwDebugEventCode != EXCEPTION_DEBUG_EVENT) + { + OUTMSG (("Cannot continue with signal %s here.\n", + gdb_signal_to_string (sig))); + } + else if (sig == last_sig) + continue_status = DBG_EXCEPTION_NOT_HANDLED; + else + OUTMSG (("Can only continue with received signal %s.\n", + gdb_signal_to_string (last_sig))); + } + + last_sig = GDB_SIGNAL_0; + + /* Get context for the currently selected thread. */ + ptid = debug_event_ptid (¤t_event); + th = thread_rec (ptid, DONT_INVALIDATE_CONTEXT); + if (th) + { + win32_prepare_to_resume (th); + + DWORD *context_flags; +#ifdef __x86_64__ + if (wow64_process) + context_flags = &th->wow64_context.ContextFlags; + else +#endif + context_flags = &th->context.ContextFlags; + if (*context_flags) + { + /* Move register values from the inferior into the thread + context structure. */ + regcache_invalidate (); + + if (step) + { + if (the_low_target.single_step != NULL) + (*the_low_target.single_step) (th); + else + error ("Single stepping is not supported " + "in this configuration.\n"); + } + + win32_set_thread_context (th); + *context_flags = 0; + } + } + + /* Allow continuing with the same signal that interrupted us. + Otherwise complain. */ + + child_continue (continue_status, tid); +} + +static void +win32_add_one_solib (const char *name, CORE_ADDR load_addr) +{ + char buf[MAX_PATH + 1]; + char buf2[MAX_PATH + 1]; + +#ifdef _WIN32_WCE + WIN32_FIND_DATA w32_fd; + WCHAR wname[MAX_PATH + 1]; + mbstowcs (wname, name, MAX_PATH); + HANDLE h = FindFirstFile (wname, &w32_fd); +#else + WIN32_FIND_DATAA w32_fd; + HANDLE h = FindFirstFileA (name, &w32_fd); +#endif + + /* The symbols in a dll are offset by 0x1000, which is the + offset from 0 of the first byte in an image - because + of the file header and the section alignment. */ + load_addr += 0x1000; + + if (h == INVALID_HANDLE_VALUE) + strcpy (buf, name); + else + { + FindClose (h); + strcpy (buf, name); +#ifndef _WIN32_WCE + { + char cwd[MAX_PATH + 1]; + char *p; + if (GetCurrentDirectoryA (MAX_PATH + 1, cwd)) + { + p = strrchr (buf, '\\'); + if (p) + p[1] = '\0'; + SetCurrentDirectoryA (buf); + GetFullPathNameA (w32_fd.cFileName, MAX_PATH, buf, &p); + SetCurrentDirectoryA (cwd); + } + } +#endif + } + +#ifndef _WIN32_WCE + if (strcasecmp (buf, "ntdll.dll") == 0) + { + GetSystemDirectoryA (buf, sizeof (buf)); + strcat (buf, "\\ntdll.dll"); + } +#endif + +#ifdef __CYGWIN__ + cygwin_conv_path (CCP_WIN_A_TO_POSIX, buf, buf2, sizeof (buf2)); +#else + strcpy (buf2, buf); +#endif + + loaded_dll (buf2, load_addr); +} + +typedef BOOL (WINAPI *winapi_EnumProcessModules) (HANDLE, HMODULE *, + DWORD, LPDWORD); +#ifdef __x86_64__ +typedef BOOL (WINAPI *winapi_EnumProcessModulesEx) (HANDLE, HMODULE *, DWORD, + LPDWORD, DWORD); +#endif +typedef BOOL (WINAPI *winapi_GetModuleInformation) (HANDLE, HMODULE, + LPMODULEINFO, DWORD); +typedef DWORD (WINAPI *winapi_GetModuleFileNameExA) (HANDLE, HMODULE, + LPSTR, DWORD); + +static winapi_EnumProcessModules win32_EnumProcessModules; +#ifdef __x86_64__ +static winapi_EnumProcessModulesEx win32_EnumProcessModulesEx; +#endif +static winapi_GetModuleInformation win32_GetModuleInformation; +static winapi_GetModuleFileNameExA win32_GetModuleFileNameExA; + +static BOOL +load_psapi (void) +{ + static int psapi_loaded = 0; + static HMODULE dll = NULL; + + if (!psapi_loaded) + { + psapi_loaded = 1; + dll = LoadLibrary (TEXT("psapi.dll")); + if (!dll) + return FALSE; + win32_EnumProcessModules = + GETPROCADDRESS (dll, EnumProcessModules); +#ifdef __x86_64__ + win32_EnumProcessModulesEx = + GETPROCADDRESS (dll, EnumProcessModulesEx); +#endif + win32_GetModuleInformation = + GETPROCADDRESS (dll, GetModuleInformation); + win32_GetModuleFileNameExA = + GETPROCADDRESS (dll, GetModuleFileNameExA); + } + +#ifdef __x86_64__ + if (wow64_process && win32_EnumProcessModulesEx == nullptr) + return FALSE; +#endif + + return (win32_EnumProcessModules != NULL + && win32_GetModuleInformation != NULL + && win32_GetModuleFileNameExA != NULL); +} + +#ifndef _WIN32_WCE + +/* Iterate over all DLLs currently mapped by our inferior, and + add them to our list of solibs. */ + +static void +win32_add_all_dlls (void) +{ + size_t i; + HMODULE dh_buf[1]; + HMODULE *DllHandle = dh_buf; + DWORD cbNeeded; + BOOL ok; + + if (!load_psapi ()) + return; + + cbNeeded = 0; +#ifdef __x86_64__ + if (wow64_process) + ok = (*win32_EnumProcessModulesEx) (current_process_handle, + DllHandle, + sizeof (HMODULE), + &cbNeeded, + LIST_MODULES_32BIT); + else +#endif + ok = (*win32_EnumProcessModules) (current_process_handle, + DllHandle, + sizeof (HMODULE), + &cbNeeded); + + if (!ok || !cbNeeded) + return; + + DllHandle = (HMODULE *) alloca (cbNeeded); + if (!DllHandle) + return; + +#ifdef __x86_64__ + if (wow64_process) + ok = (*win32_EnumProcessModulesEx) (current_process_handle, + DllHandle, + cbNeeded, + &cbNeeded, + LIST_MODULES_32BIT); + else +#endif + ok = (*win32_EnumProcessModules) (current_process_handle, + DllHandle, + cbNeeded, + &cbNeeded); + if (!ok) + return; + + char system_dir[MAX_PATH]; + char syswow_dir[MAX_PATH]; + size_t system_dir_len = 0; + bool convert_syswow_dir = false; +#ifdef __x86_64__ + if (wow64_process) +#endif + { + /* This fails on 32bit Windows because it has no SysWOW64 directory, + and in this case a path conversion isn't necessary. */ + UINT len = GetSystemWow64DirectoryA (syswow_dir, sizeof (syswow_dir)); + if (len > 0) + { + /* Check that we have passed a large enough buffer. */ + gdb_assert (len < sizeof (syswow_dir)); + + len = GetSystemDirectoryA (system_dir, sizeof (system_dir)); + /* Error check. */ + gdb_assert (len != 0); + /* Check that we have passed a large enough buffer. */ + gdb_assert (len < sizeof (system_dir)); + + strcat (system_dir, "\\"); + strcat (syswow_dir, "\\"); + system_dir_len = strlen (system_dir); + + convert_syswow_dir = true; + } + + } + + for (i = 1; i < ((size_t) cbNeeded / sizeof (HMODULE)); i++) + { + MODULEINFO mi; + char dll_name[MAX_PATH]; + + if (!(*win32_GetModuleInformation) (current_process_handle, + DllHandle[i], + &mi, + sizeof (mi))) + continue; + if ((*win32_GetModuleFileNameExA) (current_process_handle, + DllHandle[i], + dll_name, + MAX_PATH) == 0) + continue; + + const char *name = dll_name; + /* Convert the DLL path of 32bit processes returned by + GetModuleFileNameEx from the 64bit system directory to the + 32bit syswow64 directory if necessary. */ + std::string syswow_dll_path; + if (convert_syswow_dir + && strncasecmp (dll_name, system_dir, system_dir_len) == 0 + && strchr (dll_name + system_dir_len, '\\') == nullptr) + { + syswow_dll_path = syswow_dir; + syswow_dll_path += dll_name + system_dir_len; + name = syswow_dll_path.c_str(); + } + + win32_add_one_solib (name, (CORE_ADDR) (uintptr_t) mi.lpBaseOfDll); + } +} +#endif + +typedef HANDLE (WINAPI *winapi_CreateToolhelp32Snapshot) (DWORD, DWORD); +typedef BOOL (WINAPI *winapi_Module32First) (HANDLE, LPMODULEENTRY32); +typedef BOOL (WINAPI *winapi_Module32Next) (HANDLE, LPMODULEENTRY32); + +/* See nat/windows-nat.h. */ + +void +windows_nat::handle_load_dll () +{ + LOAD_DLL_DEBUG_INFO *event = ¤t_event.u.LoadDll; + const char *dll_name; + + dll_name = get_image_name (current_process_handle, + event->lpImageName, event->fUnicode); + if (!dll_name) + return; + + win32_add_one_solib (dll_name, (CORE_ADDR) (uintptr_t) event->lpBaseOfDll); +} + +/* See nat/windows-nat.h. */ + +void +windows_nat::handle_unload_dll () +{ + CORE_ADDR load_addr = + (CORE_ADDR) (uintptr_t) current_event.u.UnloadDll.lpBaseOfDll; + + /* The symbols in a dll are offset by 0x1000, which is the + offset from 0 of the first byte in an image - because + of the file header and the section alignment. */ + load_addr += 0x1000; + unloaded_dll (NULL, load_addr); +} + +static void +suspend_one_thread (thread_info *thread) +{ + windows_thread_info *th = (windows_thread_info *) thread_target_data (thread); + + th->suspend (); +} + +static void +fake_breakpoint_event (void) +{ + OUTMSG2(("fake_breakpoint_event\n")); + + faked_breakpoint = 1; + + memset (¤t_event, 0, sizeof (current_event)); + current_event.dwThreadId = main_thread_id; + current_event.dwDebugEventCode = EXCEPTION_DEBUG_EVENT; + current_event.u.Exception.ExceptionRecord.ExceptionCode + = EXCEPTION_BREAKPOINT; + + for_each_thread (suspend_one_thread); +} + +#ifdef _WIN32_WCE +static int +auto_delete_breakpoint (CORE_ADDR stop_pc) +{ + return 1; +} +#endif + +/* See nat/windows-nat.h. */ + +bool +windows_nat::handle_ms_vc_exception (const EXCEPTION_RECORD *rec) +{ + return false; +} + +/* See nat/windows-nat.h. */ + +bool +windows_nat::handle_access_violation (const EXCEPTION_RECORD *rec) +{ + return false; +} + +/* A helper function that will, if needed, set + 'stopped_at_software_breakpoint' on the thread and adjust the + PC. */ + +static void +maybe_adjust_pc () +{ + struct regcache *regcache = get_thread_regcache (current_thread, 1); + child_fetch_inferior_registers (regcache, -1); + + windows_thread_info *th = thread_rec (current_thread_ptid (), + DONT_INVALIDATE_CONTEXT); + th->stopped_at_software_breakpoint = false; + + if (current_event.dwDebugEventCode == EXCEPTION_DEBUG_EVENT + && ((current_event.u.Exception.ExceptionRecord.ExceptionCode + == EXCEPTION_BREAKPOINT) + || (current_event.u.Exception.ExceptionRecord.ExceptionCode + == STATUS_WX86_BREAKPOINT)) + && child_initialization_done) + { + th->stopped_at_software_breakpoint = true; + CORE_ADDR pc = regcache_read_pc (regcache); + CORE_ADDR sw_breakpoint_pc = pc - the_low_target.decr_pc_after_break; + regcache_write_pc (regcache, sw_breakpoint_pc); + } +} + +/* Get the next event from the child. */ + +static int +get_child_debug_event (DWORD *continue_status, + struct target_waitstatus *ourstatus) +{ + ptid_t ptid; + + last_sig = GDB_SIGNAL_0; + ourstatus->kind = TARGET_WAITKIND_SPURIOUS; + *continue_status = DBG_CONTINUE; + + /* Check if GDB sent us an interrupt request. */ + check_remote_input_interrupt_request (); + + if (soft_interrupt_requested) + { + soft_interrupt_requested = 0; + fake_breakpoint_event (); + goto gotevent; + } + + attaching = 0; + { + gdb::optional<pending_stop> stop = fetch_pending_stop (debug_threads); + if (stop.has_value ()) + { + *ourstatus = stop->status; + current_event = stop->event; + ptid = debug_event_ptid (¤t_event); + current_thread = find_thread_ptid (ptid); + return 1; + } + + /* Keep the wait time low enough for comfortable remote + interruption, but high enough so gdbserver doesn't become a + bottleneck. */ + if (!wait_for_debug_event (¤t_event, 250)) + { + DWORD e = GetLastError(); + + if (e == ERROR_PIPE_NOT_CONNECTED) + { + /* This will happen if the loader fails to succesfully + load the application, e.g., if the main executable + tries to pull in a non-existing export from a + DLL. */ + ourstatus->kind = TARGET_WAITKIND_EXITED; + ourstatus->value.integer = 1; + return 1; + } + + return 0; + } + } + + gotevent: + + switch (current_event.dwDebugEventCode) + { + case CREATE_THREAD_DEBUG_EVENT: + OUTMSG2 (("gdbserver: kernel event CREATE_THREAD_DEBUG_EVENT " + "for pid=%u tid=%x)\n", + (unsigned) current_event.dwProcessId, + (unsigned) current_event.dwThreadId)); + + /* Record the existence of this thread. */ + child_add_thread (current_event.dwProcessId, + current_event.dwThreadId, + current_event.u.CreateThread.hThread, + current_event.u.CreateThread.lpThreadLocalBase); + break; + + case EXIT_THREAD_DEBUG_EVENT: + OUTMSG2 (("gdbserver: kernel event EXIT_THREAD_DEBUG_EVENT " + "for pid=%u tid=%x\n", + (unsigned) current_event.dwProcessId, + (unsigned) current_event.dwThreadId)); + child_delete_thread (current_event.dwProcessId, + current_event.dwThreadId); + + current_thread = get_first_thread (); + return 1; + + case CREATE_PROCESS_DEBUG_EVENT: + OUTMSG2 (("gdbserver: kernel event CREATE_PROCESS_DEBUG_EVENT " + "for pid=%u tid=%x\n", + (unsigned) current_event.dwProcessId, + (unsigned) current_event.dwThreadId)); + CloseHandle (current_event.u.CreateProcessInfo.hFile); + + if (open_process_used) + { + CloseHandle (current_process_handle); + open_process_used = false; + } + + current_process_handle = current_event.u.CreateProcessInfo.hProcess; + main_thread_id = current_event.dwThreadId; + + /* Add the main thread. */ + child_add_thread (current_event.dwProcessId, + main_thread_id, + current_event.u.CreateProcessInfo.hThread, + current_event.u.CreateProcessInfo.lpThreadLocalBase); + break; + + case EXIT_PROCESS_DEBUG_EVENT: + OUTMSG2 (("gdbserver: kernel event EXIT_PROCESS_DEBUG_EVENT " + "for pid=%u tid=%x\n", + (unsigned) current_event.dwProcessId, + (unsigned) current_event.dwThreadId)); + { + DWORD exit_status = current_event.u.ExitProcess.dwExitCode; + /* If the exit status looks like a fatal exception, but we + don't recognize the exception's code, make the original + exit status value available, to avoid losing information. */ + int exit_signal + = WIFSIGNALED (exit_status) ? WTERMSIG (exit_status) : -1; + if (exit_signal == -1) + { + ourstatus->kind = TARGET_WAITKIND_EXITED; + ourstatus->value.integer = exit_status; + } + else + { + ourstatus->kind = TARGET_WAITKIND_SIGNALLED; + ourstatus->value.sig = gdb_signal_from_host (exit_signal); + } + } + child_continue (DBG_CONTINUE, desired_stop_thread_id); + break; + + case LOAD_DLL_DEBUG_EVENT: + OUTMSG2 (("gdbserver: kernel event LOAD_DLL_DEBUG_EVENT " + "for pid=%u tid=%x\n", + (unsigned) current_event.dwProcessId, + (unsigned) current_event.dwThreadId)); + CloseHandle (current_event.u.LoadDll.hFile); + if (! child_initialization_done) + break; + handle_load_dll (); + + ourstatus->kind = TARGET_WAITKIND_LOADED; + ourstatus->value.sig = GDB_SIGNAL_TRAP; + break; + + case UNLOAD_DLL_DEBUG_EVENT: + OUTMSG2 (("gdbserver: kernel event UNLOAD_DLL_DEBUG_EVENT " + "for pid=%u tid=%x\n", + (unsigned) current_event.dwProcessId, + (unsigned) current_event.dwThreadId)); + if (! child_initialization_done) + break; + handle_unload_dll (); + ourstatus->kind = TARGET_WAITKIND_LOADED; + ourstatus->value.sig = GDB_SIGNAL_TRAP; + break; + + case EXCEPTION_DEBUG_EVENT: + OUTMSG2 (("gdbserver: kernel event EXCEPTION_DEBUG_EVENT " + "for pid=%u tid=%x\n", + (unsigned) current_event.dwProcessId, + (unsigned) current_event.dwThreadId)); + if (handle_exception (ourstatus, debug_threads) + == HANDLE_EXCEPTION_UNHANDLED) + *continue_status = DBG_EXCEPTION_NOT_HANDLED; + break; + + case OUTPUT_DEBUG_STRING_EVENT: + /* A message from the kernel (or Cygwin). */ + OUTMSG2 (("gdbserver: kernel event OUTPUT_DEBUG_STRING_EVENT " + "for pid=%u tid=%x\n", + (unsigned) current_event.dwProcessId, + (unsigned) current_event.dwThreadId)); + handle_output_debug_string (nullptr); + break; + + default: + OUTMSG2 (("gdbserver: kernel event unknown " + "for pid=%u tid=%x code=%x\n", + (unsigned) current_event.dwProcessId, + (unsigned) current_event.dwThreadId, + (unsigned) current_event.dwDebugEventCode)); + break; + } + + ptid = debug_event_ptid (¤t_event); + + if (desired_stop_thread_id != -1 && desired_stop_thread_id != ptid.lwp ()) + { + /* Pending stop. See the comment by the definition of + "pending_stops" for details on why this is needed. */ + OUTMSG2 (("get_windows_debug_event - " + "unexpected stop in 0x%lx (expecting 0x%x)\n", + ptid.lwp (), desired_stop_thread_id)); + maybe_adjust_pc (); + pending_stops.push_back ({(DWORD) ptid.lwp (), *ourstatus, current_event}); + ourstatus->kind = TARGET_WAITKIND_SPURIOUS; + } + else + current_thread = find_thread_ptid (ptid); + + return 1; +} + +/* Wait for the inferior process to change state. + STATUS will be filled in with a response code to send to GDB. + Returns the signal which caused the process to stop. */ +ptid_t +win32_process_target::wait (ptid_t ptid, target_waitstatus *ourstatus, + int options) +{ + if (cached_status.kind != TARGET_WAITKIND_IGNORE) + { + /* The core always does a wait after creating the inferior, and + do_initial_child_stuff already ran the inferior to the + initial breakpoint (or an exit, if creating the process + fails). Report it now. */ + *ourstatus = cached_status; + cached_status.kind = TARGET_WAITKIND_IGNORE; + return debug_event_ptid (¤t_event); + } + + while (1) + { + DWORD continue_status; + if (!get_child_debug_event (&continue_status, ourstatus)) + continue; + + switch (ourstatus->kind) + { + case TARGET_WAITKIND_EXITED: + OUTMSG2 (("Child exited with retcode = %x\n", + ourstatus->value.integer)); + win32_clear_inferiors (); + return ptid_t (current_event.dwProcessId); + case TARGET_WAITKIND_STOPPED: + case TARGET_WAITKIND_SIGNALLED: + case TARGET_WAITKIND_LOADED: + { + OUTMSG2 (("Child Stopped with signal = %d \n", + ourstatus->value.sig)); + maybe_adjust_pc (); + return debug_event_ptid (¤t_event); + } + default: + OUTMSG (("Ignoring unknown internal event, %d\n", ourstatus->kind)); + /* fall-through */ + case TARGET_WAITKIND_SPURIOUS: + /* do nothing, just continue */ + child_continue (continue_status, desired_stop_thread_id); + break; + } + } +} + +/* Fetch registers from the inferior process. + If REGNO is -1, fetch all registers; otherwise, fetch at least REGNO. */ +void +win32_process_target::fetch_registers (regcache *regcache, int regno) +{ + child_fetch_inferior_registers (regcache, regno); +} + +/* Store registers to the inferior process. + If REGNO is -1, store all registers; otherwise, store at least REGNO. */ +void +win32_process_target::store_registers (regcache *regcache, int regno) +{ + child_store_inferior_registers (regcache, regno); +} + +/* Read memory from the inferior process. This should generally be + called through read_inferior_memory, which handles breakpoint shadowing. + Read LEN bytes at MEMADDR into a buffer at MYADDR. */ +int +win32_process_target::read_memory (CORE_ADDR memaddr, unsigned char *myaddr, + int len) +{ + return child_xfer_memory (memaddr, (char *) myaddr, len, 0, 0) != len; +} + +/* Write memory to the inferior process. This should generally be + called through write_inferior_memory, which handles breakpoint shadowing. + Write LEN bytes from the buffer at MYADDR to MEMADDR. + Returns 0 on success and errno on failure. */ +int +win32_process_target::write_memory (CORE_ADDR memaddr, + const unsigned char *myaddr, int len) +{ + return child_xfer_memory (memaddr, (char *) myaddr, len, 1, 0) != len; +} + +/* Send an interrupt request to the inferior process. */ +void +win32_process_target::request_interrupt () +{ + winapi_DebugBreakProcess DebugBreakProcess; + winapi_GenerateConsoleCtrlEvent GenerateConsoleCtrlEvent; + +#ifdef _WIN32_WCE + HMODULE dll = GetModuleHandle (_T("COREDLL.DLL")); +#else + HMODULE dll = GetModuleHandle (_T("KERNEL32.DLL")); +#endif + + GenerateConsoleCtrlEvent = GETPROCADDRESS (dll, GenerateConsoleCtrlEvent); + + if (GenerateConsoleCtrlEvent != NULL + && GenerateConsoleCtrlEvent (CTRL_BREAK_EVENT, current_process_id)) + return; + + /* GenerateConsoleCtrlEvent can fail if process id being debugged is + not a process group id. + Fallback to XP/Vista 'DebugBreakProcess', which generates a + breakpoint exception in the interior process. */ + + DebugBreakProcess = GETPROCADDRESS (dll, DebugBreakProcess); + + if (DebugBreakProcess != NULL + && DebugBreakProcess (current_process_handle)) + return; + + /* Last resort, suspend all threads manually. */ + soft_interrupt_requested = 1; +} + +bool +win32_process_target::supports_hardware_single_step () +{ + return true; +} + +#ifdef _WIN32_WCE +int +win32_error_to_fileio_error (DWORD err) +{ + switch (err) + { + case ERROR_BAD_PATHNAME: + case ERROR_FILE_NOT_FOUND: + case ERROR_INVALID_NAME: + case ERROR_PATH_NOT_FOUND: + return FILEIO_ENOENT; + case ERROR_CRC: + case ERROR_IO_DEVICE: + case ERROR_OPEN_FAILED: + return FILEIO_EIO; + case ERROR_INVALID_HANDLE: + return FILEIO_EBADF; + case ERROR_ACCESS_DENIED: + case ERROR_SHARING_VIOLATION: + return FILEIO_EACCES; + case ERROR_NOACCESS: + return FILEIO_EFAULT; + case ERROR_BUSY: + return FILEIO_EBUSY; + case ERROR_ALREADY_EXISTS: + case ERROR_FILE_EXISTS: + return FILEIO_EEXIST; + case ERROR_BAD_DEVICE: + return FILEIO_ENODEV; + case ERROR_DIRECTORY: + return FILEIO_ENOTDIR; + case ERROR_FILENAME_EXCED_RANGE: + case ERROR_INVALID_DATA: + case ERROR_INVALID_PARAMETER: + case ERROR_NEGATIVE_SEEK: + return FILEIO_EINVAL; + case ERROR_TOO_MANY_OPEN_FILES: + return FILEIO_EMFILE; + case ERROR_HANDLE_DISK_FULL: + case ERROR_DISK_FULL: + return FILEIO_ENOSPC; + case ERROR_WRITE_PROTECT: + return FILEIO_EROFS; + case ERROR_NOT_SUPPORTED: + return FILEIO_ENOSYS; + } + + return FILEIO_EUNKNOWN; +} + +void +win32_process_target::hostio_last_error (char *buf) +{ + DWORD winerr = GetLastError (); + int fileio_err = win32_error_to_fileio_error (winerr); + sprintf (buf, "F-1,%x", fileio_err); +} +#endif + +bool +win32_process_target::supports_qxfer_siginfo () +{ + return true; +} + +/* Write Windows signal info. */ + +int +win32_process_target::qxfer_siginfo (const char *annex, + unsigned char *readbuf, + unsigned const char *writebuf, + CORE_ADDR offset, int len) +{ + if (siginfo_er.ExceptionCode == 0) + return -1; + + if (readbuf == nullptr) + return -1; + + char *buf = (char *) &siginfo_er; + size_t bufsize = sizeof (siginfo_er); + +#ifdef __x86_64__ + EXCEPTION_RECORD32 er32; + if (wow64_process) + { + buf = (char *) &er32; + bufsize = sizeof (er32); + + er32.ExceptionCode = siginfo_er.ExceptionCode; + er32.ExceptionFlags = siginfo_er.ExceptionFlags; + er32.ExceptionRecord = (uintptr_t) siginfo_er.ExceptionRecord; + er32.ExceptionAddress = (uintptr_t) siginfo_er.ExceptionAddress; + er32.NumberParameters = siginfo_er.NumberParameters; + int i; + for (i = 0; i < EXCEPTION_MAXIMUM_PARAMETERS; i++) + er32.ExceptionInformation[i] = siginfo_er.ExceptionInformation[i]; + } +#endif + + if (offset > bufsize) + return -1; + + if (offset + len > bufsize) + len = bufsize - offset; + + memcpy (readbuf, buf + offset, len); + + return len; +} + +bool +win32_process_target::supports_get_tib_address () +{ + return true; +} + +/* Write Windows OS Thread Information Block address. */ + +int +win32_process_target::get_tib_address (ptid_t ptid, CORE_ADDR *addr) +{ + windows_thread_info *th; + th = thread_rec (ptid, DONT_INVALIDATE_CONTEXT); + if (th == NULL) + return 0; + if (addr != NULL) + *addr = th->thread_local_base; + return 1; +} + +/* Implementation of the target_ops method "sw_breakpoint_from_kind". */ + +const gdb_byte * +win32_process_target::sw_breakpoint_from_kind (int kind, int *size) +{ + *size = the_low_target.breakpoint_len; + return the_low_target.breakpoint; +} + +bool +win32_process_target::stopped_by_sw_breakpoint () +{ + windows_thread_info *th = thread_rec (current_thread_ptid (), + DONT_INVALIDATE_CONTEXT); + return th == nullptr ? false : th->stopped_at_software_breakpoint; +} + +bool +win32_process_target::supports_stopped_by_sw_breakpoint () +{ + return true; +} + +CORE_ADDR +win32_process_target::read_pc (struct regcache *regcache) +{ + return (*the_low_target.get_pc) (regcache); +} + +void +win32_process_target::write_pc (struct regcache *regcache, CORE_ADDR pc) +{ + return (*the_low_target.set_pc) (regcache, pc); +} + +/* The win32 target ops object. */ + +static win32_process_target the_win32_target; + +/* Initialize the Win32 backend. */ +void +initialize_low (void) +{ + set_target_ops (&the_win32_target); + the_low_target.arch_setup (); + +#ifdef __x86_64__ + /* These functions are loaded dynamically, because they are not available + on Windows XP. */ + HMODULE dll = GetModuleHandle (_T("KERNEL32.DLL")); + win32_Wow64GetThreadContext = GETPROCADDRESS (dll, Wow64GetThreadContext); + win32_Wow64SetThreadContext = GETPROCADDRESS (dll, Wow64SetThreadContext); +#endif +} diff -Nru gdb-9.1/gdbserver/win32-low.h gdb-10.2/gdbserver/win32-low.h --- gdb-9.1/gdbserver/win32-low.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/win32-low.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,184 @@ +/* Internal interfaces for the Win32 specific target code for gdbserver. + Copyright (C) 2007-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef GDBSERVER_WIN32_LOW_H +#define GDBSERVER_WIN32_LOW_H + +#include <windows.h> +#include "nat/windows-nat.h" + +struct target_desc; + +/* The inferior's target description. This is a global because the + Windows ports support neither bi-arch nor multi-process. */ +extern const struct target_desc *win32_tdesc; +#ifdef __x86_64__ +extern const struct target_desc *wow64_win32_tdesc; + +typedef BOOL (WINAPI *winapi_Wow64GetThreadContext) (HANDLE, PWOW64_CONTEXT); +extern winapi_Wow64GetThreadContext win32_Wow64GetThreadContext; +#endif + +struct win32_target_ops +{ + /* Architecture-specific setup. */ + void (*arch_setup) (void); + + /* The number of target registers. */ + int (*num_regs) (void); + + /* Perform initializations on startup. */ + void (*initial_stuff) (void); + + /* Fetch the context from the inferior. */ + void (*get_thread_context) (windows_nat::windows_thread_info *th); + + /* Called just before resuming the thread. */ + void (*prepare_to_resume) (windows_nat::windows_thread_info *th); + + /* Called when a thread was added. */ + void (*thread_added) (windows_nat::windows_thread_info *th); + + /* Fetch register from gdbserver regcache data. */ + void (*fetch_inferior_register) (struct regcache *regcache, + windows_nat::windows_thread_info *th, + int r); + + /* Store a new register value into the thread context of TH. */ + void (*store_inferior_register) (struct regcache *regcache, + windows_nat::windows_thread_info *th, + int r); + + void (*single_step) (windows_nat::windows_thread_info *th); + + const unsigned char *breakpoint; + int breakpoint_len; + + /* Amount by which to decrement the PC after a breakpoint is + hit. */ + int decr_pc_after_break; + + /* Get the PC register from REGCACHE. */ + CORE_ADDR (*get_pc) (struct regcache *regcache); + /* Set the PC register in REGCACHE. */ + void (*set_pc) (struct regcache *regcache, CORE_ADDR newpc); + + /* Breakpoint/Watchpoint related functions. See target.h for comments. */ + int (*supports_z_point_type) (char z_type); + int (*insert_point) (enum raw_bkpt_type type, CORE_ADDR addr, + int size, struct raw_breakpoint *bp); + int (*remove_point) (enum raw_bkpt_type type, CORE_ADDR addr, + int size, struct raw_breakpoint *bp); + int (*stopped_by_watchpoint) (void); + CORE_ADDR (*stopped_data_address) (void); +}; + +extern struct win32_target_ops the_low_target; + +/* Target ops definitions for a Win32 target. */ + +class win32_process_target : public process_stratum_target +{ +public: + + int create_inferior (const char *program, + const std::vector<char *> &program_args) override; + + int attach (unsigned long pid) override; + + int kill (process_info *proc) override; + + int detach (process_info *proc) override; + + void mourn (process_info *proc) override; + + void join (int pid) override; + + bool thread_alive (ptid_t pid) override; + + void resume (thread_resume *resume_info, size_t n) override; + + ptid_t wait (ptid_t ptid, target_waitstatus *status, + int options) override; + + void fetch_registers (regcache *regcache, int regno) override; + + void store_registers (regcache *regcache, int regno) override; + + int read_memory (CORE_ADDR memaddr, unsigned char *myaddr, + int len) override; + + int write_memory (CORE_ADDR memaddr, const unsigned char *myaddr, + int len) override; + + void request_interrupt () override; + + bool supports_z_point_type (char z_type) override; + + int insert_point (enum raw_bkpt_type type, CORE_ADDR addr, + int size, raw_breakpoint *bp) override; + + int remove_point (enum raw_bkpt_type type, CORE_ADDR addr, + int size, raw_breakpoint *bp) override; + + bool supports_hardware_single_step () override; + + bool stopped_by_watchpoint () override; + + CORE_ADDR stopped_data_address () override; + +#ifdef _WIN32_WCE + void hostio_last_error (char *buf) override; +#endif + + bool supports_qxfer_siginfo () override; + + int qxfer_siginfo (const char *annex, unsigned char *readbuf, + unsigned const char *writebuf, + CORE_ADDR offset, int len) override; + + bool supports_get_tib_address () override; + + int get_tib_address (ptid_t ptid, CORE_ADDR *addr) override; + + const gdb_byte *sw_breakpoint_from_kind (int kind, int *size) override; + + CORE_ADDR read_pc (regcache *regcache) override; + + void write_pc (regcache *regcache, CORE_ADDR pc) override; + + bool stopped_by_sw_breakpoint () override; + + bool supports_stopped_by_sw_breakpoint () override; +}; + +/* Retrieve the context for this thread, if not already retrieved. */ +extern void win32_require_context (windows_nat::windows_thread_info *th); + +/* Map the Windows error number in ERROR to a locale-dependent error + message string and return a pointer to it. Typically, the values + for ERROR come from GetLastError. + + The string pointed to shall not be modified by the application, + but may be overwritten by a subsequent call to strwinerror + + The strwinerror function does not change the current setting + of GetLastError. */ +extern char * strwinerror (DWORD error); + +#endif /* GDBSERVER_WIN32_LOW_H */ diff -Nru gdb-9.1/gdbserver/x86-low.cc gdb-10.2/gdbserver/x86-low.cc --- gdb-9.1/gdbserver/x86-low.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/x86-low.cc 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,38 @@ +/* Low level support for x86 (i386 and x86-64). + + Copyright (C) 2009-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "server.h" +#include "x86-low.h" + +/* Clear the reference counts and forget everything we knew about the + debug registers. */ + +void +x86_low_init_dregs (struct x86_debug_reg_state *state) +{ + int i; + + ALL_DEBUG_ADDRESS_REGISTERS (i) + { + state->dr_mirror[i] = 0; + state->dr_ref_count[i] = 0; + } + state->dr_control_mirror = 0; + state->dr_status_mirror = 0; +} diff -Nru gdb-9.1/gdbserver/x86-low.h gdb-10.2/gdbserver/x86-low.h --- gdb-9.1/gdbserver/x86-low.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/x86-low.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,28 @@ +/* Low level support for x86 (i386 and x86-64). + + Copyright (C) 2009-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef GDBSERVER_X86_LOW_H +#define GDBSERVER_X86_LOW_H + +#include "nat/x86-dregs.h" + +/* Initialize STATE. */ +extern void x86_low_init_dregs (struct x86_debug_reg_state *state); + +#endif /* GDBSERVER_X86_LOW_H */ diff -Nru gdb-9.1/gdbserver/x86-tdesc.h gdb-10.2/gdbserver/x86-tdesc.h --- gdb-9.1/gdbserver/x86-tdesc.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/x86-tdesc.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,32 @@ +/* Copyright (C) 2018-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef GDBSERVER_X86_TDESC_H +#define GDBSERVER_X86_TDESC_H + +/* The "expedite" registers for x86 targets. Since whether the + variable is used depends on host/configuration, we mark it + ATTRIBUTE_UNUSED to keep it simple here. */ +static const char *i386_expedite_regs[] ATTRIBUTE_UNUSED + = {"ebp", "esp", "eip", NULL}; + +#ifdef __x86_64__ +/* The "expedite" registers for x86_64 targets. */ +static const char *amd64_expedite_regs[] = {"rbp", "rsp", "rip", NULL}; +#endif + +#endif /* GDBSERVER_X86_TDESC_H */ diff -Nru gdb-9.1/gdbserver/xtensa-xtregs.cc gdb-10.2/gdbserver/xtensa-xtregs.cc --- gdb-9.1/gdbserver/xtensa-xtregs.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbserver/xtensa-xtregs.cc 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,37 @@ +/* Table mapping between kernel xtregset and GDB register cache. + Copyright (C) 2007-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + + +typedef struct { + int gdb_regnum; + int gdb_offset; + int ptrace_cp_offset; + int ptrace_offset; + int size; + int coproc; + int dbnum; + char* name +;} xtensa_regtable_t; + +#define XTENSA_ELF_XTREG_SIZE 4 + +const xtensa_regtable_t xtensa_regmap_table[] = { + /* gnum,gofs,cpofs,ofs,siz,cp, dbnum, name */ + { 44, 176, 0, 0, 4, -1, 0x020c, "scompare1" }, + { 0 } +}; diff -Nru gdb-9.1/gdbsupport/acinclude.m4 gdb-10.2/gdbsupport/acinclude.m4 --- gdb-9.1/gdbsupport/acinclude.m4 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/acinclude.m4 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,10 @@ +m4_include([../bfd/bfd.m4]) +m4_include([common.m4]) +m4_include([../config/ax_pthread.m4]) +m4_include([../gdb/ax_cxx_compile_stdcxx.m4]) +m4_include([../gdb/libiberty.m4]) +m4_include([selftest.m4]) +m4_include([../gdb/ptrace.m4]) + +dnl This gets AM_GDB_WARNINGS. +m4_include(warning.m4) diff -Nru gdb-9.1/gdbsupport/aclocal.m4 gdb-10.2/gdbsupport/aclocal.m4 --- gdb-9.1/gdbsupport/aclocal.m4 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/aclocal.m4 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,1209 @@ +# generated automatically by aclocal 1.15.1 -*- Autoconf -*- + +# Copyright (C) 1996-2017 Free Software Foundation, Inc. + +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, +[m4_warning([this file was generated for autoconf 2.69. +You have another version of autoconf. It may work, but is not guaranteed to. +If you have problems, you may need to regenerate the build system entirely. +To do so, use the procedure documented by the package, typically 'autoreconf'.])]) + +# Copyright (C) 2002-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_AUTOMAKE_VERSION(VERSION) +# ---------------------------- +# Automake X.Y traces this macro to ensure aclocal.m4 has been +# generated from the m4 files accompanying Automake X.Y. +# (This private macro should not be called outside this file.) +AC_DEFUN([AM_AUTOMAKE_VERSION], +[am__api_version='1.15' +dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to +dnl require some minimum version. Point them to the right macro. +m4_if([$1], [1.15.1], [], + [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl +]) + +# _AM_AUTOCONF_VERSION(VERSION) +# ----------------------------- +# aclocal traces this macro to find the Autoconf version. +# This is a private macro too. Using m4_define simplifies +# the logic in aclocal, which can simply ignore this definition. +m4_define([_AM_AUTOCONF_VERSION], []) + +# AM_SET_CURRENT_AUTOMAKE_VERSION +# ------------------------------- +# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. +# This function is AC_REQUIREd by AM_INIT_AUTOMAKE. +AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], +[AM_AUTOMAKE_VERSION([1.15.1])dnl +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) + +# AM_AUX_DIR_EXPAND -*- Autoconf -*- + +# Copyright (C) 2001-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets +# $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to +# '$srcdir', '$srcdir/..', or '$srcdir/../..'. +# +# Of course, Automake must honor this variable whenever it calls a +# tool from the auxiliary directory. The problem is that $srcdir (and +# therefore $ac_aux_dir as well) can be either absolute or relative, +# depending on how configure is run. This is pretty annoying, since +# it makes $ac_aux_dir quite unusable in subdirectories: in the top +# source directory, any form will work fine, but in subdirectories a +# relative path needs to be adjusted first. +# +# $ac_aux_dir/missing +# fails when called from a subdirectory if $ac_aux_dir is relative +# $top_srcdir/$ac_aux_dir/missing +# fails if $ac_aux_dir is absolute, +# fails when called from a subdirectory in a VPATH build with +# a relative $ac_aux_dir +# +# The reason of the latter failure is that $top_srcdir and $ac_aux_dir +# are both prefixed by $srcdir. In an in-source build this is usually +# harmless because $srcdir is '.', but things will broke when you +# start a VPATH build or use an absolute $srcdir. +# +# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, +# iff we strip the leading $srcdir from $ac_aux_dir. That would be: +# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` +# and then we would define $MISSING as +# MISSING="\${SHELL} $am_aux_dir/missing" +# This will work as long as MISSING is not called from configure, because +# unfortunately $(top_srcdir) has no meaning in configure. +# However there are other variables, like CC, which are often used in +# configure, and could therefore not use this "fixed" $ac_aux_dir. +# +# Another solution, used here, is to always expand $ac_aux_dir to an +# absolute PATH. The drawback is that using absolute paths prevent a +# configured tree to be moved without reconfiguration. + +AC_DEFUN([AM_AUX_DIR_EXPAND], +[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl +# Expand $ac_aux_dir to an absolute path. +am_aux_dir=`cd "$ac_aux_dir" && pwd` +]) + +# AM_CONDITIONAL -*- Autoconf -*- + +# Copyright (C) 1997-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_CONDITIONAL(NAME, SHELL-CONDITION) +# ------------------------------------- +# Define a conditional. +AC_DEFUN([AM_CONDITIONAL], +[AC_PREREQ([2.52])dnl + m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], + [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl +AC_SUBST([$1_TRUE])dnl +AC_SUBST([$1_FALSE])dnl +_AM_SUBST_NOTMAKE([$1_TRUE])dnl +_AM_SUBST_NOTMAKE([$1_FALSE])dnl +m4_define([_AM_COND_VALUE_$1], [$2])dnl +if $2; then + $1_TRUE= + $1_FALSE='#' +else + $1_TRUE='#' + $1_FALSE= +fi +AC_CONFIG_COMMANDS_PRE( +[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then + AC_MSG_ERROR([[conditional "$1" was never defined. +Usually this means the macro was only invoked conditionally.]]) +fi])]) + +# Copyright (C) 1999-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + + +# There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be +# written in clear, in which case automake, when reading aclocal.m4, +# will think it sees a *use*, and therefore will trigger all it's +# C support machinery. Also note that it means that autoscan, seeing +# CC etc. in the Makefile, will ask for an AC_PROG_CC use... + + +# _AM_DEPENDENCIES(NAME) +# ---------------------- +# See how the compiler implements dependency checking. +# NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". +# We try a few techniques and use that to set a single cache variable. +# +# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was +# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular +# dependency, and given that the user is not expected to run this macro, +# just rely on AC_PROG_CC. +AC_DEFUN([_AM_DEPENDENCIES], +[AC_REQUIRE([AM_SET_DEPDIR])dnl +AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl +AC_REQUIRE([AM_MAKE_INCLUDE])dnl +AC_REQUIRE([AM_DEP_TRACK])dnl + +m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], + [$1], [CXX], [depcc="$CXX" am_compiler_list=], + [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], + [$1], [UPC], [depcc="$UPC" am_compiler_list=], + [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], + [depcc="$$1" am_compiler_list=]) + +AC_CACHE_CHECK([dependency style of $depcc], + [am_cv_$1_dependencies_compiler_type], +[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named 'D' -- because '-MD' means "put the output + # in D". + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_$1_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` + fi + am__universal=false + m4_case([$1], [CC], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac], + [CXX], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac]) + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with + # Solaris 10 /bin/sh. + echo '/* dummy */' > sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with '-c' and '-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle '-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs. + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # After this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested. + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok '-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_$1_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_$1_dependencies_compiler_type=none +fi +]) +AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) +AM_CONDITIONAL([am__fastdep$1], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) +]) + + +# AM_SET_DEPDIR +# ------------- +# Choose a directory name for dependency files. +# This macro is AC_REQUIREd in _AM_DEPENDENCIES. +AC_DEFUN([AM_SET_DEPDIR], +[AC_REQUIRE([AM_SET_LEADING_DOT])dnl +AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl +]) + + +# AM_DEP_TRACK +# ------------ +AC_DEFUN([AM_DEP_TRACK], +[AC_ARG_ENABLE([dependency-tracking], [dnl +AS_HELP_STRING( + [--enable-dependency-tracking], + [do not reject slow dependency extractors]) +AS_HELP_STRING( + [--disable-dependency-tracking], + [speeds up one-time build])]) +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' + am__nodep='_no' +fi +AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +AC_SUBST([AMDEPBACKSLASH])dnl +_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl +AC_SUBST([am__nodep])dnl +_AM_SUBST_NOTMAKE([am__nodep])dnl +]) + +# Generate code to set up dependency tracking. -*- Autoconf -*- + +# Copyright (C) 1999-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + + +# _AM_OUTPUT_DEPENDENCY_COMMANDS +# ------------------------------ +AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], +[{ + # Older Autoconf quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named 'Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`AS_DIRNAME("$mf")` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running 'make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "$am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`AS_DIRNAME(["$file"])` + AS_MKDIR_P([$dirpart/$fdir]) + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} +])# _AM_OUTPUT_DEPENDENCY_COMMANDS + + +# AM_OUTPUT_DEPENDENCY_COMMANDS +# ----------------------------- +# This macro should only be invoked once -- use via AC_REQUIRE. +# +# This code is only required when automatic dependency tracking +# is enabled. FIXME. This creates each '.P' file that we will +# need in order to bootstrap the dependency handling code. +AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], +[AC_CONFIG_COMMANDS([depfiles], + [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], + [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) +]) + +# Do all the work for Automake. -*- Autoconf -*- + +# Copyright (C) 1996-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This macro actually does too much. Some checks are only needed if +# your package does certain things. But this isn't really a big deal. + +dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O. +m4_define([AC_PROG_CC], +m4_defn([AC_PROG_CC]) +[_AM_PROG_CC_C_O +]) + +# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) +# AM_INIT_AUTOMAKE([OPTIONS]) +# ----------------------------------------------- +# The call with PACKAGE and VERSION arguments is the old style +# call (pre autoconf-2.50), which is being phased out. PACKAGE +# and VERSION should now be passed to AC_INIT and removed from +# the call to AM_INIT_AUTOMAKE. +# We support both call styles for the transition. After +# the next Automake release, Autoconf can make the AC_INIT +# arguments mandatory, and then we can depend on a new Autoconf +# release and drop the old call support. +AC_DEFUN([AM_INIT_AUTOMAKE], +[AC_PREREQ([2.65])dnl +dnl Autoconf wants to disallow AM_ names. We explicitly allow +dnl the ones we care about. +m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl +AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl +AC_REQUIRE([AC_PROG_INSTALL])dnl +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi +AC_SUBST([CYGPATH_W]) + +# Define the identity of the package. +dnl Distinguish between old-style and new-style calls. +m4_ifval([$2], +[AC_DIAGNOSE([obsolete], + [$0: two- and three-arguments forms are deprecated.]) +m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl + AC_SUBST([PACKAGE], [$1])dnl + AC_SUBST([VERSION], [$2])], +[_AM_SET_OPTIONS([$1])dnl +dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. +m4_if( + m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), + [ok:ok],, + [m4_fatal([AC_INIT should be called with package and version arguments])])dnl + AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl + AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl + +_AM_IF_OPTION([no-define],, +[AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) + AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl + +# Some tools Automake needs. +AC_REQUIRE([AM_SANITY_CHECK])dnl +AC_REQUIRE([AC_ARG_PROGRAM])dnl +AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) +AM_MISSING_PROG([AUTOCONF], [autoconf]) +AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) +AM_MISSING_PROG([AUTOHEADER], [autoheader]) +AM_MISSING_PROG([MAKEINFO], [makeinfo]) +AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl +AC_REQUIRE([AC_PROG_MKDIR_P])dnl +# For better backward compatibility. To be removed once Automake 1.9.x +# dies out for good. For more background, see: +# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html> +# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html> +AC_SUBST([mkdir_p], ['$(MKDIR_P)']) +# We need awk for the "check" target (and possibly the TAP driver). The +# system "awk" is bad on some platforms. +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([AC_PROG_MAKE_SET])dnl +AC_REQUIRE([AM_SET_LEADING_DOT])dnl +_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], + [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_AM_PROG_TAR([v7])])]) +_AM_IF_OPTION([no-dependencies],, +[AC_PROVIDE_IFELSE([AC_PROG_CC], + [_AM_DEPENDENCIES([CC])], + [m4_define([AC_PROG_CC], + m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES([CXX])], + [m4_define([AC_PROG_CXX], + m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJC], + [_AM_DEPENDENCIES([OBJC])], + [m4_define([AC_PROG_OBJC], + m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], + [_AM_DEPENDENCIES([OBJCXX])], + [m4_define([AC_PROG_OBJCXX], + m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl +]) +AC_REQUIRE([AM_SILENT_RULES])dnl +dnl The testsuite driver may need to know about EXEEXT, so add the +dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This +dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. +AC_CONFIG_COMMANDS_PRE(dnl +[m4_provide_if([_AM_COMPILER_EXEEXT], + [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl + +# POSIX will say in a future version that running "rm -f" with no argument +# is OK; and we want to be able to make that assumption in our Makefile +# recipes. So use an aggressive probe to check that the usage we want is +# actually supported "in the wild" to an acceptable degree. +# See automake bug#10828. +# To make any issue more visible, cause the running configure to be aborted +# by default if the 'rm' program in use doesn't match our expectations; the +# user can still override this though. +if rm -f && rm -fr && rm -rf; then : OK; else + cat >&2 <<'END' +Oops! + +Your 'rm' program seems unable to run without file operands specified +on the command line, even when the '-f' option is present. This is contrary +to the behaviour of most rm programs out there, and not conforming with +the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542> + +Please tell bug-automake@gnu.org about your system, including the value +of your $PATH and any error possibly output before this message. This +can help us improve future automake versions. + +END + if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then + echo 'Configuration will proceed anyway, since you have set the' >&2 + echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 + echo >&2 + else + cat >&2 <<'END' +Aborting the configuration process, to ensure you take notice of the issue. + +You can download and install GNU coreutils to get an 'rm' implementation +that behaves properly: <http://www.gnu.org/software/coreutils/>. + +If you want to complete the configuration process using your problematic +'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM +to "yes", and re-run configure. + +END + AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) + fi +fi +dnl The trailing newline in this macro's definition is deliberate, for +dnl backward compatibility and to allow trailing 'dnl'-style comments +dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841. +]) + +dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not +dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further +dnl mangled by Autoconf and run in a shell conditional statement. +m4_define([_AC_COMPILER_EXEEXT], +m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) + +# When config.status generates a header, we must update the stamp-h file. +# This file resides in the same directory as the config header +# that is generated. The stamp files are numbered to have different names. + +# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the +# loop where config.status creates the headers, so we can generate +# our stamp files there. +AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], +[# Compute $1's index in $config_headers. +_am_arg=$1 +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) + +# Copyright (C) 2001-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_SH +# ------------------ +# Define $install_sh. +AC_DEFUN([AM_PROG_INSTALL_SH], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +if test x"${install_sh+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi +AC_SUBST([install_sh])]) + +# Add --enable-maintainer-mode option to configure. -*- Autoconf -*- +# From Jim Meyering + +# Copyright (C) 1996-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_MAINTAINER_MODE([DEFAULT-MODE]) +# ---------------------------------- +# Control maintainer-specific portions of Makefiles. +# Default is to disable them, unless 'enable' is passed literally. +# For symmetry, 'disable' may be passed as well. Anyway, the user +# can override the default with the --enable/--disable switch. +AC_DEFUN([AM_MAINTAINER_MODE], +[m4_case(m4_default([$1], [disable]), + [enable], [m4_define([am_maintainer_other], [disable])], + [disable], [m4_define([am_maintainer_other], [enable])], + [m4_define([am_maintainer_other], [enable]) + m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])]) +AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) + dnl maintainer-mode's default is 'disable' unless 'enable' is passed + AC_ARG_ENABLE([maintainer-mode], + [AS_HELP_STRING([--]am_maintainer_other[-maintainer-mode], + am_maintainer_other[ make rules and dependencies not useful + (and sometimes confusing) to the casual installer])], + [USE_MAINTAINER_MODE=$enableval], + [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) + AC_MSG_RESULT([$USE_MAINTAINER_MODE]) + AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) + MAINT=$MAINTAINER_MODE_TRUE + AC_SUBST([MAINT])dnl +] +) + +# Check to see how 'make' treats includes. -*- Autoconf -*- + +# Copyright (C) 2001-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_MAKE_INCLUDE() +# ----------------- +# Check to see how make treats includes. +AC_DEFUN([AM_MAKE_INCLUDE], +[am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +AC_MSG_CHECKING([for style of include used by $am_make]) +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from 'make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi +AC_SUBST([am__include]) +AC_SUBST([am__quote]) +AC_MSG_RESULT([$_am_result]) +rm -f confinc confmf +]) + +# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- + +# Copyright (C) 1997-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_MISSING_PROG(NAME, PROGRAM) +# ------------------------------ +AC_DEFUN([AM_MISSING_PROG], +[AC_REQUIRE([AM_MISSING_HAS_RUN]) +$1=${$1-"${am_missing_run}$2"} +AC_SUBST($1)]) + +# AM_MISSING_HAS_RUN +# ------------------ +# Define MISSING if not defined so far and test if it is modern enough. +# If it is, set am_missing_run to use it, otherwise, to nothing. +AC_DEFUN([AM_MISSING_HAS_RUN], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([missing])dnl +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --is-lightweight"; then + am_missing_run="$MISSING " +else + am_missing_run= + AC_MSG_WARN(['missing' script is too old or missing]) +fi +]) + +# -*- Autoconf -*- +# Obsolete and "removed" macros, that must however still report explicit +# error messages when used, to smooth transition. +# +# Copyright (C) 1996-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +AC_DEFUN([AM_CONFIG_HEADER], +[AC_DIAGNOSE([obsolete], +['$0': this macro is obsolete. +You should use the 'AC][_CONFIG_HEADERS' macro instead.])dnl +AC_CONFIG_HEADERS($@)]) + +AC_DEFUN([AM_PROG_CC_STDC], +[AC_PROG_CC +am_cv_prog_cc_stdc=$ac_cv_prog_cc_stdc +AC_DIAGNOSE([obsolete], +['$0': this macro is obsolete. +You should simply use the 'AC][_PROG_CC' macro instead. +Also, your code should no longer depend upon 'am_cv_prog_cc_stdc', +but upon 'ac_cv_prog_cc_stdc'.])]) + +AC_DEFUN([AM_C_PROTOTYPES], + [AC_FATAL([automatic de-ANSI-fication support has been removed])]) +AU_DEFUN([fp_C_PROTOTYPES], [AM_C_PROTOTYPES]) + +# Helper functions for option handling. -*- Autoconf -*- + +# Copyright (C) 2001-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_MANGLE_OPTION(NAME) +# ----------------------- +AC_DEFUN([_AM_MANGLE_OPTION], +[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) + +# _AM_SET_OPTION(NAME) +# -------------------- +# Set option NAME. Presently that only means defining a flag for this option. +AC_DEFUN([_AM_SET_OPTION], +[m4_define(_AM_MANGLE_OPTION([$1]), [1])]) + +# _AM_SET_OPTIONS(OPTIONS) +# ------------------------ +# OPTIONS is a space-separated list of Automake options. +AC_DEFUN([_AM_SET_OPTIONS], +[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) + +# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) +# ------------------------------------------- +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +AC_DEFUN([_AM_IF_OPTION], +[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) + +# Copyright (C) 1999-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_PROG_CC_C_O +# --------------- +# Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC +# to automatically call this. +AC_DEFUN([_AM_PROG_CC_C_O], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([compile])dnl +AC_LANG_PUSH([C])dnl +AC_CACHE_CHECK( + [whether $CC understands -c and -o together], + [am_cv_prog_cc_c_o], + [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) + # Make sure it works both with $CC and with simple cc. + # Following AC_PROG_CC_C_O, we do the test twice because some + # compilers refuse to overwrite an existing .o file with -o, + # though they will create one. + am_cv_prog_cc_c_o=yes + for am_i in 1 2; do + if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ + && test -f conftest2.$ac_objext; then + : OK + else + am_cv_prog_cc_c_o=no + break + fi + done + rm -f core conftest* + unset am_i]) +if test "$am_cv_prog_cc_c_o" != yes; then + # Losing compiler, so override with the script. + # FIXME: It is wrong to rewrite CC. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__CC in this case, + # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" + CC="$am_aux_dir/compile $CC" +fi +AC_LANG_POP([C])]) + +# For backward compatibility. +AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) + +# Copyright (C) 2001-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_RUN_LOG(COMMAND) +# ------------------- +# Run COMMAND, save the exit status in ac_status, and log it. +# (This has been adapted from Autoconf's _AC_RUN_LOG macro.) +AC_DEFUN([AM_RUN_LOG], +[{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD + ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + (exit $ac_status); }]) + +# Check to make sure that the build environment is sane. -*- Autoconf -*- + +# Copyright (C) 1996-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_SANITY_CHECK +# --------------- +AC_DEFUN([AM_SANITY_CHECK], +[AC_MSG_CHECKING([whether build environment is sane]) +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[[\\\"\#\$\&\'\`$am_lf]]*) + AC_MSG_ERROR([unsafe absolute working directory name]);; +esac +case $srcdir in + *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) + AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; +esac + +# Do 'set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + am_has_slept=no + for am_try in 1 2; do + echo "timestamp, slept: $am_has_slept" > conftest.file + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$[*]" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + if test "$[*]" != "X $srcdir/configure conftest.file" \ + && test "$[*]" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken + alias in your environment]) + fi + if test "$[2]" = conftest.file || test $am_try -eq 2; then + break + fi + # Just in case. + sleep 1 + am_has_slept=yes + done + test "$[2]" = conftest.file + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +AC_MSG_RESULT([yes]) +# If we didn't sleep, we still need to ensure time stamps of config.status and +# generated files are strictly newer. +am_sleep_pid= +if grep 'slept: no' conftest.file >/dev/null 2>&1; then + ( sleep 1 ) & + am_sleep_pid=$! +fi +AC_CONFIG_COMMANDS_PRE( + [AC_MSG_CHECKING([that generated files are newer than configure]) + if test -n "$am_sleep_pid"; then + # Hide warnings about reused PIDs. + wait $am_sleep_pid 2>/dev/null + fi + AC_MSG_RESULT([done])]) +rm -f conftest.file +]) + +# Copyright (C) 2009-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_SILENT_RULES([DEFAULT]) +# -------------------------- +# Enable less verbose build rules; with the default set to DEFAULT +# ("yes" being less verbose, "no" or empty being verbose). +AC_DEFUN([AM_SILENT_RULES], +[AC_ARG_ENABLE([silent-rules], [dnl +AS_HELP_STRING( + [--enable-silent-rules], + [less verbose build output (undo: "make V=1")]) +AS_HELP_STRING( + [--disable-silent-rules], + [verbose build output (undo: "make V=0")])dnl +]) +case $enable_silent_rules in @%:@ ((( + yes) AM_DEFAULT_VERBOSITY=0;; + no) AM_DEFAULT_VERBOSITY=1;; + *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; +esac +dnl +dnl A few 'make' implementations (e.g., NonStop OS and NextStep) +dnl do not support nested variable expansions. +dnl See automake bug#9928 and bug#10237. +am_make=${MAKE-make} +AC_CACHE_CHECK([whether $am_make supports nested variables], + [am_cv_make_support_nested_variables], + [if AS_ECHO([['TRUE=$(BAR$(V)) +BAR0=false +BAR1=true +V=1 +am__doit: + @$(TRUE) +.PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then + am_cv_make_support_nested_variables=yes +else + am_cv_make_support_nested_variables=no +fi]) +if test $am_cv_make_support_nested_variables = yes; then + dnl Using '$V' instead of '$(V)' breaks IRIX make. + AM_V='$(V)' + AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' +else + AM_V=$AM_DEFAULT_VERBOSITY + AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY +fi +AC_SUBST([AM_V])dnl +AM_SUBST_NOTMAKE([AM_V])dnl +AC_SUBST([AM_DEFAULT_V])dnl +AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl +AC_SUBST([AM_DEFAULT_VERBOSITY])dnl +AM_BACKSLASH='\' +AC_SUBST([AM_BACKSLASH])dnl +_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl +]) + +# Copyright (C) 2001-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_STRIP +# --------------------- +# One issue with vendor 'install' (even GNU) is that you can't +# specify the program used to strip binaries. This is especially +# annoying in cross-compiling environments, where the build's strip +# is unlikely to handle the host's binaries. +# Fortunately install-sh will honor a STRIPPROG variable, so we +# always use install-sh in "make install-strip", and initialize +# STRIPPROG with the value of the STRIP variable (set by the user). +AC_DEFUN([AM_PROG_INSTALL_STRIP], +[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +# Installed binaries are usually stripped using 'strip' when the user +# run "make install-strip". However 'strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the 'STRIP' environment variable to overrule this program. +dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. +if test "$cross_compiling" != no; then + AC_CHECK_TOOL([STRIP], [strip], :) +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" +AC_SUBST([INSTALL_STRIP_PROGRAM])]) + +# Copyright (C) 2006-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. +# This macro is traced by Automake. +AC_DEFUN([_AM_SUBST_NOTMAKE]) + +# AM_SUBST_NOTMAKE(VARIABLE) +# -------------------------- +# Public sister of _AM_SUBST_NOTMAKE. +AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) + +# Check how to create a tarball. -*- Autoconf -*- + +# Copyright (C) 2004-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_PROG_TAR(FORMAT) +# -------------------- +# Check how to create a tarball in format FORMAT. +# FORMAT should be one of 'v7', 'ustar', or 'pax'. +# +# Substitute a variable $(am__tar) that is a command +# writing to stdout a FORMAT-tarball containing the directory +# $tardir. +# tardir=directory && $(am__tar) > result.tar +# +# Substitute a variable $(am__untar) that extract such +# a tarball read from stdin. +# $(am__untar) < result.tar +# +AC_DEFUN([_AM_PROG_TAR], +[# Always define AMTAR for backward compatibility. Yes, it's still used +# in the wild :-( We should find a proper way to deprecate it ... +AC_SUBST([AMTAR], ['$${TAR-tar}']) + +# We'll loop over all known methods to create a tar archive until one works. +_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' + +m4_if([$1], [v7], + [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], + + [m4_case([$1], + [ustar], + [# The POSIX 1988 'ustar' format is defined with fixed-size fields. + # There is notably a 21 bits limit for the UID and the GID. In fact, + # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 + # and bug#13588). + am_max_uid=2097151 # 2^21 - 1 + am_max_gid=$am_max_uid + # The $UID and $GID variables are not portable, so we need to resort + # to the POSIX-mandated id(1) utility. Errors in the 'id' calls + # below are definitely unexpected, so allow the users to see them + # (that is, avoid stderr redirection). + am_uid=`id -u || echo unknown` + am_gid=`id -g || echo unknown` + AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) + if test $am_uid -le $am_max_uid; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + _am_tools=none + fi + AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) + if test $am_gid -le $am_max_gid; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + _am_tools=none + fi], + + [pax], + [], + + [m4_fatal([Unknown tar format])]) + + AC_MSG_CHECKING([how to create a $1 tar archive]) + + # Go ahead even if we have the value already cached. We do so because we + # need to set the values for the 'am__tar' and 'am__untar' variables. + _am_tools=${am_cv_prog_tar_$1-$_am_tools} + + for _am_tool in $_am_tools; do + case $_am_tool in + gnutar) + for _am_tar in tar gnutar gtar; do + AM_RUN_LOG([$_am_tar --version]) && break + done + am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' + am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' + am__untar="$_am_tar -xf -" + ;; + plaintar) + # Must skip GNU tar: if it does not support --format= it doesn't create + # ustar tarball either. + (tar --version) >/dev/null 2>&1 && continue + am__tar='tar chf - "$$tardir"' + am__tar_='tar chf - "$tardir"' + am__untar='tar xf -' + ;; + pax) + am__tar='pax -L -x $1 -w "$$tardir"' + am__tar_='pax -L -x $1 -w "$tardir"' + am__untar='pax -r' + ;; + cpio) + am__tar='find "$$tardir" -print | cpio -o -H $1 -L' + am__tar_='find "$tardir" -print | cpio -o -H $1 -L' + am__untar='cpio -i -H $1 -d' + ;; + none) + am__tar=false + am__tar_=false + am__untar=false + ;; + esac + + # If the value was cached, stop now. We just wanted to have am__tar + # and am__untar set. + test -n "${am_cv_prog_tar_$1}" && break + + # tar/untar a dummy directory, and stop if the command works. + rm -rf conftest.dir + mkdir conftest.dir + echo GrepMe > conftest.dir/file + AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) + rm -rf conftest.dir + if test -s conftest.tar; then + AM_RUN_LOG([$am__untar <conftest.tar]) + AM_RUN_LOG([cat conftest.dir/file]) + grep GrepMe conftest.dir/file >/dev/null 2>&1 && break + fi + done + rm -rf conftest.dir + + AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) + AC_MSG_RESULT([$am_cv_prog_tar_$1])]) + +AC_SUBST([am__tar]) +AC_SUBST([am__untar]) +]) # _AM_PROG_TAR + +m4_include([../config/codeset.m4]) +m4_include([../config/depstand.m4]) +m4_include([../config/gettext-sister.m4]) +m4_include([../config/largefile.m4]) +m4_include([../config/lead-dot.m4]) +m4_include([../config/lib-ld.m4]) +m4_include([../config/lib-link.m4]) +m4_include([../config/lib-prefix.m4]) +m4_include([../config/override.m4]) +m4_include([../config/plugins.m4]) +m4_include([acinclude.m4]) diff -Nru gdb-9.1/gdbsupport/agent.cc gdb-10.2/gdbsupport/agent.cc --- gdb-9.1/gdbsupport/agent.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/agent.cc 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,280 @@ +/* Shared utility routines for GDB to interact with agent. + + Copyright (C) 2009-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "common-defs.h" +#include "target/target.h" +#include "gdbsupport/symbol.h" +#include <unistd.h> +#include "filestuff.h" + +#define IPA_SYM_STRUCT_NAME ipa_sym_addresses_common +#include "agent.h" + +bool debug_agent = false; + +/* A stdarg wrapper for debug_vprintf. */ + +static void ATTRIBUTE_PRINTF (1, 2) +debug_agent_printf (const char *fmt, ...) +{ + va_list ap; + + if (!debug_agent) + return; + va_start (ap, fmt); + debug_vprintf (fmt, ap); + va_end (ap); +} + +#define DEBUG_AGENT debug_agent_printf + +/* Global flag to determine using agent or not. */ +bool use_agent = false; + +/* Addresses of in-process agent's symbols both GDB and GDBserver cares + about. */ + +struct ipa_sym_addresses_common +{ + CORE_ADDR addr_helper_thread_id; + CORE_ADDR addr_cmd_buf; + CORE_ADDR addr_capability; +}; + +/* Cache of the helper thread id. FIXME: this global should be made + per-process. */ +static uint32_t helper_thread_id = 0; + +static struct +{ + const char *name; + int offset; +} symbol_list[] = { + IPA_SYM(helper_thread_id), + IPA_SYM(cmd_buf), + IPA_SYM(capability), +}; + +static struct ipa_sym_addresses_common ipa_sym_addrs; + +static bool all_agent_symbols_looked_up = false; + +bool +agent_loaded_p (void) +{ + return all_agent_symbols_looked_up; +} + +/* Look up all symbols needed by agent. Return 0 if all the symbols are + found, return non-zero otherwise. */ + +int +agent_look_up_symbols (void *arg) +{ + all_agent_symbols_looked_up = false; + + for (int i = 0; i < sizeof (symbol_list) / sizeof (symbol_list[0]); i++) + { + CORE_ADDR *addrp = + (CORE_ADDR *) ((char *) &ipa_sym_addrs + symbol_list[i].offset); + struct objfile *objfile = (struct objfile *) arg; + + if (find_minimal_symbol_address (symbol_list[i].name, addrp, + objfile) != 0) + { + DEBUG_AGENT ("symbol `%s' not found\n", symbol_list[i].name); + return -1; + } + } + + all_agent_symbols_looked_up = true; + return 0; +} + +static unsigned int +agent_get_helper_thread_id (void) +{ + if (helper_thread_id == 0) + { + if (target_read_uint32 (ipa_sym_addrs.addr_helper_thread_id, + &helper_thread_id)) + warning (_("Error reading helper thread's id in lib")); + } + + return helper_thread_id; +} + +#ifdef HAVE_SYS_UN_H +#include <sys/socket.h> +#include <sys/un.h> +#define SOCK_DIR P_tmpdir + +#ifndef UNIX_PATH_MAX +#define UNIX_PATH_MAX sizeof(((struct sockaddr_un *) NULL)->sun_path) +#endif + +#endif + +/* Connects to synchronization socket. PID is the pid of inferior, which is + used to set up the connection socket. */ + +static int +gdb_connect_sync_socket (int pid) +{ +#ifdef HAVE_SYS_UN_H + struct sockaddr_un addr; + int res, fd; + char path[UNIX_PATH_MAX]; + + res = xsnprintf (path, UNIX_PATH_MAX, "%s/gdb_ust%d", P_tmpdir, pid); + if (res >= UNIX_PATH_MAX) + return -1; + + res = fd = gdb_socket_cloexec (PF_UNIX, SOCK_STREAM, 0); + if (res == -1) + { + warning (_("error opening sync socket: %s"), safe_strerror (errno)); + return -1; + } + + addr.sun_family = AF_UNIX; + + res = xsnprintf (addr.sun_path, UNIX_PATH_MAX, "%s", path); + if (res >= UNIX_PATH_MAX) + { + warning (_("string overflow allocating socket name")); + close (fd); + return -1; + } + + res = connect (fd, (struct sockaddr *) &addr, sizeof (addr)); + if (res == -1) + { + warning (_("error connecting sync socket (%s): %s. " + "Make sure the directory exists and that it is writable."), + path, safe_strerror (errno)); + close (fd); + return -1; + } + + return fd; +#else + return -1; +#endif +} + +/* Execute an agent command in the inferior. PID is the value of pid of the + inferior. CMD is the buffer for command. GDB or GDBserver will store the + command into it and fetch the return result from CMD. The interaction + between GDB/GDBserver and the agent is synchronized by a synchronization + socket. Return zero if success, otherwise return non-zero. */ + +int +agent_run_command (int pid, const char *cmd, int len) +{ + int fd; + int tid = agent_get_helper_thread_id (); + ptid_t ptid = ptid_t (pid, tid, 0); + + int ret = target_write_memory (ipa_sym_addrs.addr_cmd_buf, + (gdb_byte *) cmd, len); + + if (ret != 0) + { + warning (_("unable to write")); + return -1; + } + + DEBUG_AGENT ("agent: resumed helper thread\n"); + + /* Resume helper thread. */ + target_continue_no_signal (ptid); + + fd = gdb_connect_sync_socket (pid); + if (fd >= 0) + { + char buf[1] = ""; + + DEBUG_AGENT ("agent: signalling helper thread\n"); + + do + { + ret = write (fd, buf, 1); + } while (ret == -1 && errno == EINTR); + + DEBUG_AGENT ("agent: waiting for helper thread's response\n"); + + do + { + ret = read (fd, buf, 1); + } while (ret == -1 && errno == EINTR); + + close (fd); + + DEBUG_AGENT ("agent: helper thread's response received\n"); + } + else + return -1; + + /* Need to read response with the inferior stopped. */ + if (ptid != null_ptid) + { + /* Stop thread PTID. */ + DEBUG_AGENT ("agent: stop helper thread\n"); + target_stop_and_wait (ptid); + } + + if (fd >= 0) + { + if (target_read_memory (ipa_sym_addrs.addr_cmd_buf, (gdb_byte *) cmd, + IPA_CMD_BUF_SIZE)) + { + warning (_("Error reading command response")); + return -1; + } + } + + return 0; +} + +/* Each bit of it stands for a capability of agent. */ +static uint32_t agent_capability = 0; + +/* Return true if agent has capability AGENT_CAP, otherwise return false. */ + +bool +agent_capability_check (enum agent_capa agent_capa) +{ + if (agent_capability == 0) + { + if (target_read_uint32 (ipa_sym_addrs.addr_capability, + &agent_capability)) + warning (_("Error reading capability of agent")); + } + return (agent_capability & agent_capa) != 0; +} + +/* Invalidate the cache of agent capability, so we'll read it from inferior + again. Call it when launches a new program or reconnect to remote stub. */ + +void +agent_capability_invalidate (void) +{ + agent_capability = 0; +} diff -Nru gdb-9.1/gdbsupport/agent.h gdb-10.2/gdbsupport/agent.h --- gdb-9.1/gdbsupport/agent.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/agent.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,68 @@ +/* Shared utility routines for GDB to interact with agent. + + Copyright (C) 2009-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef COMMON_AGENT_H +#define COMMON_AGENT_H + +#include "gdbsupport/preprocessor.h" + +int agent_run_command (int pid, const char *cmd, int len); + +int agent_look_up_symbols (void *); + +#define IPA_SYM_EXPORTED_NAME(SYM) gdb_agent_ ## SYM + +/* Define an entry in an IPA symbol list array. If IPA_SYM is used, the macro + IPA_SYM_STRUCT_NAME must be defined to the structure name holding the IPA + symbol addresses in that particular file, before including + gdbsupport/agent.h. */ +#define IPA_SYM(SYM) \ + { \ + STRINGIFY (IPA_SYM_EXPORTED_NAME (SYM)), \ + offsetof (IPA_SYM_STRUCT_NAME, addr_ ## SYM) \ + } + +/* The size in bytes of the buffer used to talk to the IPA helper + thread. */ +#define IPA_CMD_BUF_SIZE 1024 + +bool agent_loaded_p (void); + +extern bool debug_agent; + +extern bool use_agent; + +/* Capability of agent. Different agents may have different capabilities, + such as installing fast tracepoint or evaluating breakpoint conditions. + Capabilities are represented by bit-maps, and each capability occupies one + bit. */ + +enum agent_capa +{ + /* Capability to install fast tracepoint. */ + AGENT_CAPA_FAST_TRACE = 0x1, + /* Capability to install static tracepoint. */ + AGENT_CAPA_STATIC_TRACE = (0x1 << 1), +}; + +bool agent_capability_check (enum agent_capa); + +void agent_capability_invalidate (void); + +#endif /* COMMON_AGENT_H */ diff -Nru gdb-9.1/gdbsupport/alt-stack.h gdb-10.2/gdbsupport/alt-stack.h --- gdb-9.1/gdbsupport/alt-stack.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/alt-stack.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,70 @@ +/* Temporarily install an alternate signal stack + + Copyright (C) 2019-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef GDBSUPPORT_ALT_STACK_H +#define GDBSUPPORT_ALT_STACK_H + +#include <signal.h> + +namespace gdb +{ + +/* Try to set up an alternate signal stack for SIGSEGV handlers. + This allows us to handle SIGSEGV signals generated when the + normal process stack is exhausted. If this stack is not set + up (sigaltstack is unavailable or fails) and a SIGSEGV is + generated when the normal stack is exhausted then the program + will behave as though no SIGSEGV handler was installed. */ +class alternate_signal_stack +{ +public: + alternate_signal_stack () + { +#ifdef HAVE_SIGALTSTACK + m_stack.reset ((char *) xmalloc (SIGSTKSZ)); + + stack_t stack; + stack.ss_sp = m_stack.get (); + stack.ss_size = SIGSTKSZ; + stack.ss_flags = 0; + + sigaltstack (&stack, &m_old_stack); +#endif + } + + ~alternate_signal_stack () + { +#ifdef HAVE_SIGALTSTACK + sigaltstack (&m_old_stack, nullptr); +#endif + } + + DISABLE_COPY_AND_ASSIGN (alternate_signal_stack); + +private: + +#ifdef HAVE_SIGALTSTACK + gdb::unique_xmalloc_ptr<char> m_stack; + stack_t m_old_stack; +#endif +}; + +} + +#endif /* GDBSUPPORT_ALT_STACK_H */ diff -Nru gdb-9.1/gdbsupport/array-view.h gdb-10.2/gdbsupport/array-view.h --- gdb-9.1/gdbsupport/array-view.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/array-view.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,259 @@ +/* Copyright (C) 2017-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef COMMON_ARRAY_VIEW_H +#define COMMON_ARRAY_VIEW_H + +#include "traits.h" +#include <type_traits> + +/* An array_view is an abstraction that provides a non-owning view + over a sequence of contiguous objects. + + A way to put it is that array_view is to std::vector (and + std::array and built-in arrays with rank==1) like std::string_view + is to std::string. + + The main intent of array_view is to use it as function input + parameter type, making it possible to pass in any sequence of + contiguous objects, irrespective of whether the objects live on the + stack or heap and what actual container owns them. Implicit + construction from the element type is supported too, making it easy + to call functions that expect an array of elements when you only + have one element (usually on the stack). For example: + + struct A { .... }; + void function (gdb::array_view<A> as); + + std::vector<A> std_vec = ...; + std::array<A, N> std_array = ...; + A array[] = {...}; + A elem; + + function (std_vec); + function (std_array); + function (array); + function (elem); + + Views can be either mutable or const. A const view is simply + created by specifying a const T as array_view template parameter, + in which case operator[] of non-const array_view objects ends up + returning const references. Making the array_view itself const is + analogous to making a pointer itself be const. I.e., disables + re-seating the view/pointer. + + Since array_view objects are small (pointer plus size), and + designed to be trivially copyable, they should generally be passed + around by value. + + You can find unit tests covering the whole API in + unittests/array-view-selftests.c. */ + +namespace gdb { + +template <typename T> +class array_view +{ + /* True iff decayed T is the same as decayed U. E.g., we want to + say that 'T&' is the same as 'const T'. */ + template <typename U> + using IsDecayedT = typename std::is_same<typename std::decay<T>::type, + typename std::decay<U>::type>; + + /* True iff decayed T is the same as decayed U, and 'U *' is + implicitly convertible to 'T *'. This is a requirement for + several methods. */ + template <typename U> + using DecayedConvertible = gdb::And<IsDecayedT<U>, + std::is_convertible<U *, T *>>; + +public: + using value_type = T; + using reference = T &; + using const_reference = const T &; + using size_type = size_t; + + /* Default construction creates an empty view. */ + constexpr array_view () noexcept + : m_array (nullptr), m_size (0) + {} + + /* Create an array view over a single object of the type of an + array_view element. The created view as size==1. This is + templated on U to allow constructing a array_view<const T> over a + (non-const) T. The "convertible" requirement makes sure that you + can't create an array_view<T> over a const T. */ + template<typename U, + typename = Requires<DecayedConvertible<U>>> + constexpr array_view (U &elem) noexcept + : m_array (&elem), m_size (1) + {} + + /* Same as above, for rvalue references. */ + template<typename U, + typename = Requires<DecayedConvertible<U>>> + constexpr array_view (U &&elem) noexcept + : m_array (&elem), m_size (1) + {} + + /* Create an array view from a pointer to an array and an element + count. */ + template<typename U, + typename = Requires<DecayedConvertible<U>>> + constexpr array_view (U *array, size_t size) noexcept + : m_array (array), m_size (size) + {} + + /* Create an array view from a range. This is templated on both U + an V to allow passing in a mix of 'const T *' and 'T *'. */ + template<typename U, typename V, + typename = Requires<DecayedConvertible<U>>, + typename = Requires<DecayedConvertible<V>>> + constexpr array_view (U *begin, V *end) noexcept + : m_array (begin), m_size (end - begin) + {} + + /* Create an array view from an array. */ + template<typename U, size_t Size, + typename = Requires<DecayedConvertible<U>>> + constexpr array_view (U (&array)[Size]) noexcept + : m_array (array), m_size (Size) + {} + + /* Create an array view from a contiguous container. E.g., + std::vector and std::array. */ + template<typename Container, + typename = Requires<gdb::Not<IsDecayedT<Container>>>, + typename + = Requires<std::is_convertible + <decltype (std::declval<Container> ().data ()), + T *>>, + typename + = Requires<std::is_convertible + <decltype (std::declval<Container> ().size ()), + size_type>>> + constexpr array_view (Container &&c) noexcept + : m_array (c.data ()), m_size (c.size ()) + {} + + /* Observer methods. Some of these can't be constexpr until we + require C++14. */ + /*constexpr14*/ T *data () noexcept { return m_array; } + constexpr const T *data () const noexcept { return m_array; } + + /*constexpr14*/ T *begin () noexcept { return m_array; } + constexpr const T *begin () const noexcept { return m_array; } + + /*constexpr14*/ T *end () noexcept { return m_array + m_size; } + constexpr const T *end () const noexcept { return m_array + m_size; } + + /*constexpr14*/ reference operator[] (size_t index) noexcept + { return m_array[index]; } + constexpr const_reference operator[] (size_t index) const noexcept + { return m_array[index]; } + + constexpr size_type size () const noexcept { return m_size; } + constexpr bool empty () const noexcept { return m_size == 0; } + + /* Slice an array view. */ + + /* Return a new array view over SIZE elements starting at START. */ + constexpr array_view<T> slice (size_type start, size_type size) const noexcept + { return {m_array + start, size}; } + + /* Return a new array view over all the elements after START, + inclusive. */ + constexpr array_view<T> slice (size_type start) const noexcept + { return {m_array + start, size () - start}; } + +private: + T *m_array; + size_type m_size; +}; + +/* Compare LHS and RHS for (deep) equality. That is, whether LHS and + RHS have the same sizes, and whether each pair of elements of LHS + and RHS at the same position compares equal. */ + +template <typename T> +bool +operator== (const gdb::array_view<T> &lhs, const gdb::array_view<T> &rhs) +{ + if (lhs.size () != rhs.size ()) + return false; + + for (size_t i = 0; i < lhs.size (); i++) + if (!(lhs[i] == rhs[i])) + return false; + + return true; +} + +/* Compare two array_views for inequality. */ + +template <typename T> +bool +operator!= (const gdb::array_view<T> &lhs, const gdb::array_view<T> &rhs) +{ + return !(lhs == rhs); +} + +/* Create an array view from a pointer to an array and an element + count. + + This is useful as alternative to constructing an array_view using + brace initialization when the size variable you have handy is of + signed type, since otherwise without an explicit cast the code + would be ill-formed. + + For example, with: + + extern void foo (int, int, gdb::array_view<value *>); + + value *args[2]; + int nargs; + foo (1, 2, {values, nargs}); + + You'd get: + + source.c:10: error: narrowing conversion of ‘nargs’ from ‘int’ to + ‘size_t {aka long unsigned int}’ inside { } [-Werror=narrowing] + + You could fix it by writing the somewhat distracting explicit cast: + + foo (1, 2, {values, (size_t) nargs}); + + Or by instantiating an array_view explicitly: + + foo (1, 2, gdb::array_view<value *>(values, nargs)); + + Or, better, using make_array_view, which has the advantage of + inferring the arrav_view element's type: + + foo (1, 2, gdb::make_array_view (values, nargs)); +*/ + +template<typename U> +constexpr inline array_view<U> +make_array_view (U *array, size_t size) noexcept +{ + return {array, size}; +} + +} /* namespace gdb */ + +#endif diff -Nru gdb-9.1/gdbsupport/ax.def gdb-10.2/gdbsupport/ax.def --- gdb-9.1/gdbsupport/ax.def 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/ax.def 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,97 @@ +/* Definition of agent opcode values. -*- c -*- + Copyright (C) 1998-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +/* The actual values of the various bytecode operations. + + Other independent implementations of the agent bytecode engine will + rely on the exact values of these enums, and may not be recompiled + when we change this table. The numeric values should remain fixed + whenever possible. Thus, we assign them values explicitly here (to + allow gaps to form safely), and the disassembly table in + agentexpr.h behaves like an opcode map. If you want to see them + grouped logically, see doc/agentexpr.texi. + + Each line is of the form: + + DEFOP (name, size, data_size, consumed, produced, opcode) + + NAME is the name of the operation. + SIZE is the number of argument bytes that the operation takes from + the bytecode stream. + DATA_SIZE is the size of data operated on, in bits, for operations + that care (ref and const). It is zero otherwise. + CONSUMED is the number of stack elements consumed. + PRODUCED is the number of stack elements produced. + OPCODE is the operation's encoding. */ + +DEFOP (float, 0, 0, 0, 0, 0x01) +DEFOP (add, 0, 0, 2, 1, 0x02) +DEFOP (sub, 0, 0, 2, 1, 0x03) +DEFOP (mul, 0, 0, 2, 1, 0x04) +DEFOP (div_signed, 0, 0, 2, 1, 0x05) +DEFOP (div_unsigned, 0, 0, 2, 1, 0x06) +DEFOP (rem_signed, 0, 0, 2, 1, 0x07) +DEFOP (rem_unsigned, 0, 0, 2, 1, 0x08) +DEFOP (lsh, 0, 0, 2, 1, 0x09) +DEFOP (rsh_signed, 0, 0, 2, 1, 0x0a) +DEFOP (rsh_unsigned, 0, 0, 2, 1, 0x0b) +DEFOP (trace, 0, 0, 2, 0, 0x0c) +DEFOP (trace_quick, 1, 0, 1, 1, 0x0d) +DEFOP (log_not, 0, 0, 1, 1, 0x0e) +DEFOP (bit_and, 0, 0, 2, 1, 0x0f) +DEFOP (bit_or, 0, 0, 2, 1, 0x10) +DEFOP (bit_xor, 0, 0, 2, 1, 0x11) +DEFOP (bit_not, 0, 0, 1, 1, 0x12) +DEFOP (equal, 0, 0, 2, 1, 0x13) +DEFOP (less_signed, 0, 0, 2, 1, 0x14) +DEFOP (less_unsigned, 0, 0, 2, 1, 0x15) +DEFOP (ext, 1, 0, 1, 1, 0x16) +DEFOP (ref8, 0, 8, 1, 1, 0x17) +DEFOP (ref16, 0, 16, 1, 1, 0x18) +DEFOP (ref32, 0, 32, 1, 1, 0x19) +DEFOP (ref64, 0, 64, 1, 1, 0x1a) +DEFOP (ref_float, 0, 0, 1, 1, 0x1b) +DEFOP (ref_double, 0, 0, 1, 1, 0x1c) +DEFOP (ref_long_double, 0, 0, 1, 1, 0x1d) +DEFOP (l_to_d, 0, 0, 1, 1, 0x1e) +DEFOP (d_to_l, 0, 0, 1, 1, 0x1f) +DEFOP (if_goto, 2, 0, 1, 0, 0x20) +DEFOP (goto, 2, 0, 0, 0, 0x21) +DEFOP (const8, 1, 8, 0, 1, 0x22) +DEFOP (const16, 2, 16, 0, 1, 0x23) +DEFOP (const32, 4, 32, 0, 1, 0x24) +DEFOP (const64, 8, 64, 0, 1, 0x25) +DEFOP (reg, 2, 0, 0, 1, 0x26) +DEFOP (end, 0, 0, 0, 0, 0x27) +DEFOP (dup, 0, 0, 1, 2, 0x28) +DEFOP (pop, 0, 0, 1, 0, 0x29) +DEFOP (zero_ext, 1, 0, 1, 1, 0x2a) +DEFOP (swap, 0, 0, 2, 2, 0x2b) +DEFOP (getv, 2, 0, 0, 1, 0x2c) +DEFOP (setv, 2, 0, 1, 1, 0x2d) +DEFOP (tracev, 2, 0, 0, 1, 0x2e) +DEFOP (tracenz, 0, 0, 2, 0, 0x2f) +DEFOP (trace16, 2, 0, 1, 1, 0x30) +/* We need something here just to make the tables come out ok. */ +DEFOP (invalid2, 0, 0, 0, 0, 0x31) +/* The "consumed" number for pick is wrong, but there's no way to + express the right thing. */ +DEFOP (pick, 1, 0, 0, 1, 0x32) +DEFOP (rot, 0, 0, 3, 3, 0x33) +/* Both the argument and consumed numbers are dynamic for this one. */ +DEFOP (printf, 0, 0, 0, 0, 0x34) diff -Nru gdb-9.1/gdbsupport/block-signals.h gdb-10.2/gdbsupport/block-signals.h --- gdb-9.1/gdbsupport/block-signals.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/block-signals.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,67 @@ +/* Block signals used by gdb + + Copyright (C) 2019-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef GDBSUPPORT_BLOCK_SIGNALS_H +#define GDBSUPPORT_BLOCK_SIGNALS_H + +#include <signal.h> + +#include "gdbsupport/gdb-sigmask.h" + +namespace gdb +{ + +/* This is an RAII class that temporarily blocks the signals needed by + gdb. This can be used before starting a new thread to ensure that + this thread starts with the appropriate signals blocked. */ +class block_signals +{ +public: + block_signals () + { +#ifdef HAVE_SIGPROCMASK + sigset_t mask; + sigemptyset (&mask); + sigaddset (&mask, SIGINT); + sigaddset (&mask, SIGCHLD); + sigaddset (&mask, SIGALRM); + sigaddset (&mask, SIGWINCH); + gdb_sigmask (SIG_BLOCK, &mask, &m_old_mask); +#endif + } + + ~block_signals () + { +#ifdef HAVE_SIGPROCMASK + gdb_sigmask (SIG_SETMASK, &m_old_mask, nullptr); +#endif + } + + DISABLE_COPY_AND_ASSIGN (block_signals); + +private: + +#ifdef HAVE_SIGPROCMASK + sigset_t m_old_mask; +#endif +}; + +} + +#endif /* GDBSUPPORT_BLOCK_SIGNALS_H */ diff -Nru gdb-9.1/gdbsupport/break-common.h gdb-10.2/gdbsupport/break-common.h --- gdb-9.1/gdbsupport/break-common.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/break-common.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,31 @@ +/* Data structures associated with breakpoints shared in both GDB and + GDBserver. + Copyright (C) 1992-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef COMMON_BREAK_COMMON_H +#define COMMON_BREAK_COMMON_H + +enum target_hw_bp_type + { + hw_write = 0, /* Common HW watchpoint */ + hw_read = 1, /* Read HW watchpoint */ + hw_access = 2, /* Access HW watchpoint */ + hw_execute = 3 /* Execute HW breakpoint */ + }; + +#endif /* COMMON_BREAK_COMMON_H */ diff -Nru gdb-9.1/gdbsupport/btrace-common.cc gdb-10.2/gdbsupport/btrace-common.cc --- gdb-9.1/gdbsupport/btrace-common.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/btrace-common.cc 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,191 @@ +/* Copyright (C) 2014-2021 Free Software Foundation, Inc. + + Contributed by Intel Corp. <markus.t.metzger@intel.com> + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "common-defs.h" +#include "btrace-common.h" + + +/* See btrace-common.h. */ + +const char * +btrace_format_string (enum btrace_format format) +{ + switch (format) + { + case BTRACE_FORMAT_NONE: + return _("No or unknown format"); + + case BTRACE_FORMAT_BTS: + return _("Branch Trace Store"); + + case BTRACE_FORMAT_PT: + return _("Intel Processor Trace"); + } + + internal_error (__FILE__, __LINE__, _("Unknown branch trace format")); +} + +/* See btrace-common.h. */ + +const char * +btrace_format_short_string (enum btrace_format format) +{ + switch (format) + { + case BTRACE_FORMAT_NONE: + return "unknown"; + + case BTRACE_FORMAT_BTS: + return "bts"; + + case BTRACE_FORMAT_PT: + return "pt"; + } + + internal_error (__FILE__, __LINE__, _("Unknown branch trace format")); +} + +/* See btrace-common.h. */ + +void +btrace_data::fini () +{ + switch (format) + { + case BTRACE_FORMAT_NONE: + /* Nothing to do. */ + return; + + case BTRACE_FORMAT_BTS: + delete variant.bts.blocks; + variant.bts.blocks = nullptr; + return; + + case BTRACE_FORMAT_PT: + xfree (variant.pt.data); + return; + } + + internal_error (__FILE__, __LINE__, _("Unkown branch trace format.")); +} + +/* See btrace-common.h. */ + +bool +btrace_data::empty () const +{ + switch (format) + { + case BTRACE_FORMAT_NONE: + return true; + + case BTRACE_FORMAT_BTS: + return variant.bts.blocks->empty (); + + case BTRACE_FORMAT_PT: + return (variant.pt.size == 0); + } + + internal_error (__FILE__, __LINE__, _("Unkown branch trace format.")); +} + +/* See btrace-common.h. */ + +void +btrace_data::clear () +{ + fini (); + format = BTRACE_FORMAT_NONE; +} + +/* See btrace-common.h. */ + +int +btrace_data_append (struct btrace_data *dst, + const struct btrace_data *src) +{ + switch (src->format) + { + case BTRACE_FORMAT_NONE: + return 0; + + case BTRACE_FORMAT_BTS: + switch (dst->format) + { + default: + return -1; + + case BTRACE_FORMAT_NONE: + dst->format = BTRACE_FORMAT_BTS; + dst->variant.bts.blocks = new std::vector<btrace_block>; + + /* Fall-through. */ + case BTRACE_FORMAT_BTS: + { + unsigned int blk; + + /* We copy blocks in reverse order to have the oldest block at + index zero. */ + blk = src->variant.bts.blocks->size (); + while (blk != 0) + { + const btrace_block &block + = src->variant.bts.blocks->at (--blk); + dst->variant.bts.blocks->push_back (block); + } + } + } + return 0; + + case BTRACE_FORMAT_PT: + switch (dst->format) + { + default: + return -1; + + case BTRACE_FORMAT_NONE: + dst->format = BTRACE_FORMAT_PT; + dst->variant.pt.data = NULL; + dst->variant.pt.size = 0; + + /* fall-through. */ + case BTRACE_FORMAT_PT: + { + gdb_byte *data; + size_t size; + + size = src->variant.pt.size + dst->variant.pt.size; + data = (gdb_byte *) xmalloc (size); + + if (dst->variant.pt.size > 0) + memcpy (data, dst->variant.pt.data, dst->variant.pt.size); + memcpy (data + dst->variant.pt.size, src->variant.pt.data, + src->variant.pt.size); + + xfree (dst->variant.pt.data); + + dst->variant.pt.data = data; + dst->variant.pt.size = size; + } + } + return 0; + } + + internal_error (__FILE__, __LINE__, _("Unkown branch trace format.")); +} diff -Nru gdb-9.1/gdbsupport/btrace-common.h gdb-10.2/gdbsupport/btrace-common.h --- gdb-9.1/gdbsupport/btrace-common.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/btrace-common.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,263 @@ +/* Branch trace support for GDB, the GNU debugger. + + Copyright (C) 2013-2021 Free Software Foundation, Inc. + + Contributed by Intel Corp. <markus.t.metzger@intel.com>. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef COMMON_BTRACE_COMMON_H +#define COMMON_BTRACE_COMMON_H + +/* Branch tracing (btrace) is a per-thread control-flow execution trace of the + inferior. For presentation purposes, the branch trace is represented as a + list of sequential control-flow blocks, one such list per thread. */ + +/* A branch trace block. + + This represents a block of sequential control-flow. Adjacent blocks will be + connected via calls, returns, or jumps. The latter can be direct or + indirect, conditional or unconditional. Branches can further be + asynchronous, e.g. interrupts. */ +struct btrace_block +{ + /* The address of the first byte of the first instruction in the block. + The address may be zero if we do not know the beginning of this block, + such as for the first block in a delta trace. */ + CORE_ADDR begin; + + /* The address of the first byte of the last instruction in the block. */ + CORE_ADDR end; + + /* Simple constructor. */ + btrace_block (CORE_ADDR begin, CORE_ADDR end) + : begin (begin), + end (end) + { + /* Nothing. */ + } +}; + +/* Enumeration of btrace formats. */ + +enum btrace_format +{ + /* No branch trace format. */ + BTRACE_FORMAT_NONE, + + /* Branch trace is in Branch Trace Store (BTS) format. + Actually, the format is a sequence of blocks derived from BTS. */ + BTRACE_FORMAT_BTS, + + /* Branch trace is in Intel Processor Trace format. */ + BTRACE_FORMAT_PT +}; + +/* An enumeration of cpu vendors. */ + +enum btrace_cpu_vendor +{ + /* We do not know this vendor. */ + CV_UNKNOWN, + + /* Intel. */ + CV_INTEL, + + /* AMD. */ + CV_AMD +}; + +/* A cpu identifier. */ + +struct btrace_cpu +{ + /* The processor vendor. */ + enum btrace_cpu_vendor vendor; + + /* The cpu family. */ + unsigned short family; + + /* The cpu model. */ + unsigned char model; + + /* The cpu stepping. */ + unsigned char stepping; +}; + +/* A BTS configuration. */ + +struct btrace_config_bts +{ + /* The size of the branch trace buffer in bytes. + + This is unsigned int and not size_t since it is registered as + control variable for "set record btrace bts buffer-size". */ + unsigned int size; +}; + +/* An Intel Processor Trace configuration. */ + +struct btrace_config_pt +{ + /* The size of the branch trace buffer in bytes. + + This is unsigned int and not size_t since it is registered as + control variable for "set record btrace pt buffer-size". */ + unsigned int size; +}; + +/* A branch tracing configuration. + + This describes the requested configuration as well as the actually + obtained configuration. + We describe the configuration for all different formats so we can + easily switch between formats. */ + +struct btrace_config +{ + /* The branch tracing format. */ + enum btrace_format format; + + /* The BTS format configuration. */ + struct btrace_config_bts bts; + + /* The Intel Processor Trace format configuration. */ + struct btrace_config_pt pt; +}; + +/* Branch trace in BTS format. */ +struct btrace_data_bts +{ + /* Branch trace is represented as a vector of branch trace blocks starting + with the most recent block. This needs to be a pointer as we place + btrace_data_bts into a union. */ + std::vector<btrace_block> *blocks; +}; + +/* Configuration information to go with the trace data. */ +struct btrace_data_pt_config +{ + /* The processor on which the trace has been collected. */ + struct btrace_cpu cpu; +}; + +/* Branch trace in Intel Processor Trace format. */ +struct btrace_data_pt +{ + /* Some configuration information to go with the data. */ + struct btrace_data_pt_config config; + + /* The trace data. */ + gdb_byte *data; + + /* The size of DATA in bytes. */ + size_t size; +}; + +/* The branch trace data. */ +struct btrace_data +{ + btrace_data () = default; + + ~btrace_data () + { + fini (); + } + + btrace_data &operator= (btrace_data &&other) + { + if (this != &other) + { + fini (); + format = other.format; + variant = other.variant; + other.format = BTRACE_FORMAT_NONE; + } + return *this; + } + + /* Return true if this is empty; false otherwise. */ + bool empty () const; + + /* Clear this object. */ + void clear (); + + enum btrace_format format = BTRACE_FORMAT_NONE; + + union + { + /* Format == BTRACE_FORMAT_BTS. */ + struct btrace_data_bts bts; + + /* Format == BTRACE_FORMAT_PT. */ + struct btrace_data_pt pt; + } variant; + +private: + + DISABLE_COPY_AND_ASSIGN (btrace_data); + + void fini (); +}; + +/* Target specific branch trace information. */ +struct btrace_target_info; + +/* Enumeration of btrace read types. */ + +enum btrace_read_type +{ + /* Send all available trace. */ + BTRACE_READ_ALL, + + /* Send all available trace, if it changed. */ + BTRACE_READ_NEW, + + /* Send the trace since the last request. This will fail if the trace + buffer overflowed. */ + BTRACE_READ_DELTA +}; + +/* Enumeration of btrace errors. */ + +enum btrace_error +{ + /* No error. Everything is OK. */ + BTRACE_ERR_NONE, + + /* An unknown error. */ + BTRACE_ERR_UNKNOWN, + + /* Branch tracing is not supported on this system. */ + BTRACE_ERR_NOT_SUPPORTED, + + /* The branch trace buffer overflowed; no delta read possible. */ + BTRACE_ERR_OVERFLOW +}; + +/* Return a string representation of FORMAT. */ +extern const char *btrace_format_string (enum btrace_format format); + +/* Return an abbreviation string representation of FORMAT. */ +extern const char *btrace_format_short_string (enum btrace_format format); + +/* Append the branch trace data from SRC to the end of DST. + Both SRC and DST must use the same format. + Returns zero on success; a negative number otherwise. */ +extern int btrace_data_append (struct btrace_data *dst, + const struct btrace_data *src); + +#endif /* COMMON_BTRACE_COMMON_H */ diff -Nru gdb-9.1/gdbsupport/buffer.cc gdb-10.2/gdbsupport/buffer.cc --- gdb-9.1/gdbsupport/buffer.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/buffer.cc 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,178 @@ +/* A simple growing buffer for GDB. + + Copyright (C) 2009-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "common-defs.h" +#include "xml-utils.h" +#include "buffer.h" +#include "inttypes.h" +void +buffer_grow (struct buffer *buffer, const char *data, size_t size) +{ + char *new_buffer; + size_t new_buffer_size; + + if (size == 0) + return; + + new_buffer_size = buffer->buffer_size; + + if (new_buffer_size == 0) + new_buffer_size = 1; + + while (buffer->used_size + size > new_buffer_size) + new_buffer_size *= 2; + new_buffer = (char *) xrealloc (buffer->buffer, new_buffer_size); + memcpy (new_buffer + buffer->used_size, data, size); + buffer->buffer = new_buffer; + buffer->buffer_size = new_buffer_size; + buffer->used_size += size; +} + +void +buffer_free (struct buffer *buffer) +{ + if (!buffer) + return; + + xfree (buffer->buffer); + buffer->buffer = NULL; + buffer->buffer_size = 0; + buffer->used_size = 0; +} + +void +buffer_init (struct buffer *buffer) +{ + memset (buffer, 0, sizeof (*buffer)); +} + +char* +buffer_finish (struct buffer *buffer) +{ + char *ret = buffer->buffer; + buffer->buffer = NULL; + buffer->buffer_size = 0; + buffer->used_size = 0; + return ret; +} + +void +buffer_xml_printf (struct buffer *buffer, const char *format, ...) +{ + va_list ap; + const char *f; + const char *prev; + int percent = 0; + + va_start (ap, format); + + prev = format; + for (f = format; *f; f++) + { + if (percent) + { + char buf[32]; + char *str = buf; + const char *f_old = f; + + switch (*f) + { + case 's': + str = va_arg (ap, char *); + break; + case 'd': + sprintf (str, "%d", va_arg (ap, int)); + break; + case 'u': + sprintf (str, "%u", va_arg (ap, unsigned int)); + break; + case 'x': + sprintf (str, "%x", va_arg (ap, unsigned int)); + break; + case 'o': + sprintf (str, "%o", va_arg (ap, unsigned int)); + break; + case 'l': + f++; + switch (*f) + { + case 'd': + sprintf (str, "%ld", va_arg (ap, long)); + break; + case 'u': + sprintf (str, "%lu", va_arg (ap, unsigned long)); + break; + case 'x': + sprintf (str, "%lx", va_arg (ap, unsigned long)); + break; + case 'o': + sprintf (str, "%lo", va_arg (ap, unsigned long)); + break; + case 'l': + f++; + switch (*f) + { + case 'd': + sprintf (str, "%" PRId64, + (int64_t) va_arg (ap, long long)); + break; + case 'u': + sprintf (str, "%" PRIu64, + (uint64_t) va_arg (ap, unsigned long long)); + break; + case 'x': + sprintf (str, "%" PRIx64, + (uint64_t) va_arg (ap, unsigned long long)); + break; + case 'o': + sprintf (str, "%" PRIo64, + (uint64_t) va_arg (ap, unsigned long long)); + break; + default: + str = 0; + break; + } + break; + default: + str = 0; + break; + } + break; + default: + str = 0; + break; + } + + if (str) + { + buffer_grow (buffer, prev, f_old - prev - 1); + std::string p = xml_escape_text (str); + buffer_grow_str (buffer, p.c_str ()); + prev = f + 1; + } + percent = 0; + } + else if (*f == '%') + percent = 1; + } + + buffer_grow_str (buffer, prev); + va_end (ap); +} + diff -Nru gdb-9.1/gdbsupport/buffer.h gdb-10.2/gdbsupport/buffer.h --- gdb-9.1/gdbsupport/buffer.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/buffer.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,68 @@ +/* A simple growing buffer for GDB. + + Copyright (C) 2009-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef COMMON_BUFFER_H +#define COMMON_BUFFER_H + +struct buffer +{ + char *buffer; + size_t buffer_size; /* allocated size */ + size_t used_size; /* actually used size */ +}; + +/* Append DATA of size SIZE to the end of BUFFER. Grows the buffer to + accommodate the new data. */ +void buffer_grow (struct buffer *buffer, const char *data, size_t size); + +/* Append C to the end of BUFFER. Grows the buffer to accommodate the + new data. */ + +static inline void +buffer_grow_char (struct buffer *buffer, char c) +{ + buffer_grow (buffer, &c, 1); +} + +/* Release any memory held by BUFFER. */ +void buffer_free (struct buffer *buffer); + +/* Initialize BUFFER. BUFFER holds no memory afterwards. */ +void buffer_init (struct buffer *buffer); + +/* Return a pointer into BUFFER data, effectively transferring + ownership of the buffer memory to the caller. Calling buffer_free + afterwards has no effect on the returned data. */ +char* buffer_finish (struct buffer *buffer); + +/* Simple printf to buffer function. Current implemented formatters: + %s - grow an xml escaped text in BUFFER. + %d - grow an signed integer in BUFFER. + %u - grow an unsigned integer in BUFFER. + %x - grow an unsigned integer formatted in hexadecimal in BUFFER. + %o - grow an unsigned integer formatted in octal in BUFFER. */ +void buffer_xml_printf (struct buffer *buffer, const char *format, ...) + ATTRIBUTE_PRINTF (2, 3); + +#define buffer_grow_str(BUFFER,STRING) \ + buffer_grow (BUFFER, STRING, strlen (STRING)) +#define buffer_grow_str0(BUFFER,STRING) \ + buffer_grow (BUFFER, STRING, strlen (STRING) + 1) + +#endif /* COMMON_BUFFER_H */ diff -Nru gdb-9.1/gdbsupport/byte-vector.h gdb-10.2/gdbsupport/byte-vector.h --- gdb-9.1/gdbsupport/byte-vector.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/byte-vector.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,63 @@ +/* Copyright (C) 2017-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef COMMON_BYTE_VECTOR_H +#define COMMON_BYTE_VECTOR_H + +#include "gdbsupport/def-vector.h" + +namespace gdb { + +/* byte_vector is a gdb_byte std::vector with a custom allocator that + unlike std::vector<gdb_byte> does not zero-initialize new elements + by default when the vector is created/resized. This is what you + usually want when working with byte buffers, since if you're + creating or growing a buffer you'll most surely want to fill it in + with data, in which case zero-initialization would be a + pessimization. For example: + + gdb::byte_vector buf (some_large_size); + fill_with_data (buf.data (), buf.size ()); + + On the odd case you do need zero initialization, then you can still + call the overloads that specify an explicit value, like: + + gdb::byte_vector buf (some_initial_size, 0); + buf.resize (a_bigger_size, 0); + + (Or use std::vector<gdb_byte> instead.) + + Note that unlike std::vector<gdb_byte>, function local + gdb::byte_vector objects constructed with an initial size like: + + gdb::byte_vector buf (some_size); + fill_with_data (buf.data (), buf.size ()); + + usually compile down to the exact same as: + + std::unique_ptr<byte[]> buf (new gdb_byte[some_size]); + fill_with_data (buf.get (), some_size); + + with the former having the advantage of being a bit more readable, + and providing the whole std::vector API, if you end up needing it. +*/ +using byte_vector = gdb::def_vector<gdb_byte>; +using char_vector = gdb::def_vector<char>; + +} /* namespace gdb */ + +#endif /* COMMON_DEF_VECTOR_H */ diff -Nru gdb-9.1/gdbsupport/ChangeLog gdb-10.2/gdbsupport/ChangeLog --- gdb-9.1/gdbsupport/ChangeLog 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/ChangeLog 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,286 @@ +2020-09-10 Kamil Rytarowski <n54@gmx.com> + + * eintr.h: New file. + +2020-08-13 Simon Marchi <simon.marchi@polymtl.ca> + + * selftest.h (run_tests): Change parameter to array_view. + * selftest.c (run_tests): Change parameter to array_view and use + it. + +2020-07-30 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + * Makefile.am (AM_CPPFLAGS): Add LARGEFILE_CPPFLAGS. + * common.m4 (GDB_AC_COMMON): Use BFD_SYS_PROCFS_H to check for + <sys/procfs.h>. + * Makefile.in: Regenerate. + * configure, config.in: Regenerate. + +2020-07-28 Tom de Vries <tdevries@suse.de> + + PR build/26281 + * gdb_optional.h (class optional): Add volatile member to union + contaning m_dummy and m_item. + +2020-07-17 Andrew Burgess <andrew.burgess@embecosm.com> + + * tdesc.h (struct target_desc_deleter): Moved here + from gdb/target-descriptions.h, extend comment. + (target_desc_up): Likewise. + +2020-06-30 Tom Tromey <tromey@adacore.com> + + PR build/26183: + * gdb_string_view.h (basic_string_view::to_string): Remove. + (gdb::to_string): New function. + +2020-06-27 Simon Marchi <simon.marchi@efficios.com> + + * tdesc.h (class print_xml_feature) <add_line>: Add + ATTRIBUTE_PRINTF. + +2020-06-23 Andrew Burgess <andrew.burgess@embecosm.com> + + * tdesc.cc (print_xml_feature::visit_pre): Use add_line to add + output content, and call indent as needed in all overloaded + variants. + (print_xml_feature::visit_post): Likewise. + (print_xml_feature::visit): Likewise. + (print_xml_feature::add_line): Two new overloaded functions. + * tdesc.h (print_xml_feature::indent): New member function. + (print_xml_feature::add_line): Two new overloaded member + functions. + (print_xml_feature::m_depth): New member variable. + +2020-06-23 Andrew Burgess <andrew.burgess@embecosm.com> + + * tdesc.cc (print_xml_feature::visit_pre): Print compatible + information. + * tdesc.h (struct tdesc_compatible_info): Declare new struct. + (tdesc_compatible_info_up): New typedef. + (tdesc_compatible_info_list): Declare new function. + (tdesc_compatible_info_arch_name): Declare new function. + +2020-05-25 Michael Weghorn <m.weghorn@posteo.de> + + * common-utils.cc, common-utils.h (stringify_argv): Drop + now unused function stringify_argv + +2020-05-25 Michael Weghorn <m.weghorn@posteo.de> + + * common-inferior.cc, common-inferior.h (construct_inferior_arguments): + Adapt to take a gdb::array_view<char * const> parameter. + Adapt call site. + +2020-05-25 Michael Weghorn <m.weghorn@posteo.de> + + * common-inferior.cc, common-inferior.h (construct_inferior_arguments): + Adapt to handle zero args and return a std::string. + Adapt call site. + +2020-05-25 Michael Weghorn <m.weghorn@posteo.de> + + * common-inferior.h, common-inferior.cc: (construct_inferior_arguments): + Move function here from gdb/infcmd.c, gdb/inferior.h + +2020-05-14 Kevin Buettner <kevinb@redhat.com> + + * btrace-common.h (btrace_cpu_vendor): Add CV_AMD. + +2020-05-14 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + * common-regcache.h (regcache_read_pc_protected): New function + declaration. + +2020-04-28 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + * gdb-sigmask.h: Fix typo (pthead_sigmask -> pthread_sigmask). + +2020-04-27 Simon Marchi <simon.marchi@polymtl.ca> + + * common-defs.h: Include cstdlib.h. + +2020-04-20 Tom Tromey <tromey@adacore.com> + + * scoped_mmap.h (scoped_mmap): Mark move constructor as noexcept. + Use initialization style. Don't call destroy. + * scoped_fd.h (class scoped_fd): Mark move constructor as + noexcept. + * gdb_ref_ptr.h (class ref_ptr): Mark move constructor as + noexcept. + +2020-04-13 Tom Tromey <tom@tromey.com> + + * event-loop.c: Move comment. Remove obsolete comment. + +2020-04-13 Tom Tromey <tom@tromey.com> + + * event-loop.h: Move from ../gdb/. + * event-loop.cc: Move from ../gdb/. + +2020-04-13 Tom Tromey <tom@tromey.com> + + * errors.h (flush_streams): Declare. + +2020-04-13 Tom Tromey <tom@tromey.com> + + * gdb_select.h: Move from ../gdb/. + +2020-04-13 Tom Tromey <tom@tromey.com> + + * config.in, configure: Rebuild. + * common.m4 (GDB_AC_COMMON): Check for poll.h, sys/poll.h, + sys/select.h, and poll. + +2020-03-31 Tom Tromey <tromey@adacore.com> + + * btrace-common.cc (btrace_data_append): Conditionally call + memcpy. + +2020-03-27 Andrew Burgess <andrew.burgess@embecosm.com> + + * create-version.sh: Resolve issues highlighted by shellcheck. + +2020-03-20 Simon Marchi <simon.marchi@efficios.com> + + * config.in: Re-generate. + * configure: Re-generate. + +2020-03-17 Kamil Rytarowski <n54@gmx.com> + + * common-defs.h: Include alloca.h if HAVE_ALLOCA_H is defined. + +2020-03-12 Tom Tromey <tom@tromey.com> + + * common-types.h: Remove GDBSERVER code. + (gdb_byte, CORE_ADDR, LONGEST, ULONGEST): Redefine. + * common-defs.h: Remove GDBSERVER code. + +2020-03-12 Simon Marchi <simon.marchi@efficios.com> + + * selftest.m4: Moved from gdb/. + * acinclude.m4: Update path to selftest.m4. + +2020-03-12 Simon Marchi <simon.marchi@efficios.com> + + * configure.ac: Don't source bfd/development.sh. + * common.m4: Source bfd/development.sh. + * configure: Re-generate. + +2020-03-12 Simon Marchi <simon.marchi@efficios.com> + + * configure: Re-generate. + +2020-03-11 Simon Marchi <simon.marchi@efficios.com> + + * configure: Re-generate. + * warning.m4: Enable -Wmissing-prototypes. + +2020-03-08 Tom Tromey <tom@tromey.com> + + * gdb_binary_search.h: Fix two typos. + +2020-03-06 Andrew Burgess <andrew.burgess@embecosm.com> + + * .dir-locals.el: New file. + +2020-03-05 Vyacheslav Petrishchev <vyachemail@gmail.com> + + * configure.ac: Added call development.sh. + * configure: Regenerate. + +2020-03-05 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + + * .gitattributes: New file. + +2020-03-03 Simon Marchi <simon.marchi@efficios.com> + + * Makefile.in: Re-generate. + +2020-02-28 Sergio Durigan Junior <sergiodj@redhat.com> + + * gdb-dlfcn.h (gdb_dlopen): Update comment. + +2020-02-19 Andrew Burgess <andrew.burgess@embecosm.com> + + * configure: Regenerate. + +2020-02-14 Tom Tromey <tom@tromey.com> + + * common-defs.h: Change path to gnulib/config.h. + +2020-02-13 Simon Marchi <simon.marchi@efficios.com> + + * Makefile.am: Rename source files from .c to .cc. + (CC, CFLAGS): Don't override. + (AM_CFLAGS): Rename to ... + (AM_CXXFLAGS): ... this. + * Makefile.in: Re-generate. + * %.c: Rename to %.cc. + +2020-02-11 Simon Marchi <simon.marchi@efficios.com> + + * configure: Re-generate. + +2020-02-11 Simon Marchi <simon.marchi@efficios.com> + + * warning.m4: Add -Wstrict-null-sentinel. + * configure: Re-generate. + +2020-02-11 Simon Marchi <simon.marchi@efficios.com> + + * warning.m4: Move here, from gdb/warning.m4. + * acinclude.m4: Update warning.m4 path. + * Makefile.in: Re-generate. + +2020-02-11 Simon Marchi <simon.marchi@efficios.com> + + * acinclude.m4: Include ../gdb/warning.m4. + * configure.ac: Use AM_GDB_WARNINGS. + * Makefile.am: Set AM_CFLAGS to WARN_CFLAGS and WERROR_CFLAGS. + * Makefile.in: Re-generate. + * configure: Re-generate. + +2020-02-10 Tom de Vries <tdevries@suse.de> + + * environ.c (gdb_environ::set): Cast concat NULL sentinel to char *. + +2020-01-24 Christian Biesinger <cbiesinger@google.com> + + * thread-pool.c (set_thread_name): Add an overload for the NetBSD + version of pthread_setname_np. + +2020-01-17 Pedro Alves <palves@redhat.com> + + * Makefile.am: Append CXX_DIALECT to CXX. + * Makefile.in: Regenerate. + +2020-01-17 Pedro Alves <palves@redhat.com> + + * configure.ac: Generate config.h instead of support-config.h. + * common-defs.h: Include <gdbsupport/config.h> instead of + <gdbsupport/support-config.h>. + * Makefile.in: Regenerate. + * configure: Regenerate. + +2020-01-14 Tom Tromey <tom@tromey.com> + + * Makefile.in: Rebuild. + * Makefile.am (check-defines): New target. + * check-defines.el: New file. + +2020-01-14 Tom Tromey <tom@tromey.com> + + * configure, Makefile.in, aclocal.m4, common.m4, config.in: + Rebuild. + * common.m4 (GDB_AC_COMMON): Move many checks from + gdb/configure.ac. + * acinclude.m4: Include bfd.m4, ptrace.m4. + +2020-01-14 Tom Tromey <tom@tromey.com> + + * common-defs.h: Add GDBSERVER case. Update includes. + * acinclude.m4, aclocal.m4, config.in, configure, configure.ac, + Makefile.am, Makefile.in, README: New files. + * Moved from ../gdb/gdbsupport/ + diff -Nru gdb-9.1/gdbsupport/check-defines.el gdb-10.2/gdbsupport/check-defines.el --- gdb-9.1/gdbsupport/check-defines.el 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/check-defines.el 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,77 @@ +;; Verify that preprocessor symbols are defined in config.in. + +;; Copyright (C) 2020-2021 Free Software Foundation, Inc. +;; +;; This file is part of GDB. +;; +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation; either version 3 of the License, or +;; (at your option) any later version. +;; +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. +;; +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see <http://www.gnu.org/licenses/>. + +;; To use: +;; cd gdbsupport +;; emacs --script check-defines.el + +(require 'cl-lib) + +(setq-default case-fold-search nil) + +;; The currently recognized macros. +(defconst check-regexp "\\_<\\(\\(HAVE\\|PTRACE_TYPE\\|SIZEOF\\)_[a-zA-Z0-9_]+\\)\\_>") + +(defvar check-seen 0) + +;; Whitelist. These are things that have names like autoconf-created +;; macros, but that are managed directly in the code. +(put (intern "HAVE_USEFUL_SBRK") :check-ok t) +(put (intern "HAVE_SOCKETS") :check-ok t) +(put (intern "HAVE_F_GETFD") :check-ok t) +(put (intern "HAVE_IS_TRIVIALLY_COPYABLE") :check-ok t) +(put (intern "HAVE_IS_TRIVIALLY_CONSTRUCTIBLE") :check-ok t) +(put (intern "HAVE_DOS_BASED_FILE_SYSTEM") :check-ok t) + +(defun check-read-config.in (file) + (save-excursion + (find-file-read-only file) + (goto-char (point-min)) + (while (re-search-forward "^#undef \\(.+\\)$" nil t) + (let ((name (match-string 1))) + (put (intern name) :check-ok t))))) + +(defun check-one-file (file) + (save-excursion + (find-file-read-only file) + (goto-char (point-min)) + (while (re-search-forward check-regexp nil t) + (let ((name (match-string 1))) + (unless (get (intern name) :check-ok) + (save-excursion + (goto-char (match-beginning 0)) + (cl-incf check-seen) + (message "%s:%d:%d: error: name %s not defined" + file + (line-number-at-pos) + (current-column) + name))))))) + +(defun check-directory (dir) + (dolist (file (directory-files dir t "\\.[ch]$")) + (check-one-file file))) + +(check-read-config.in "config.in") +(check-read-config.in "../gnulib/config.in") +(check-directory ".") +(check-directory "../gdb/nat") +(check-directory "../gdb/target") + +(when (> check-seen 0) + (message "%d errors seen" check-seen)) diff -Nru gdb-9.1/gdbsupport/cleanups.cc gdb-10.2/gdbsupport/cleanups.cc --- gdb-9.1/gdbsupport/cleanups.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/cleanups.cc 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,144 @@ +/* Cleanup routines for GDB, the GNU debugger. + + Copyright (C) 1986-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "common-defs.h" +#include "cleanups.h" + +/* The cleanup list records things that have to be undone + if an error happens (descriptors to be closed, memory to be freed, etc.) + Each link in the chain records a function to call and an + argument to give it. + + Use make_cleanup to add an element to the cleanup chain. + Use do_cleanups to do all cleanup actions back to a given + point in the chain. Use discard_cleanups to remove cleanups + from the chain back to a given point, not doing them. + + If the argument is pointer to allocated memory, then you need + to additionally set the 'free_arg' member to a function that will + free that memory. This function will be called both when the cleanup + is executed and when it's discarded. */ + +struct cleanup +{ + struct cleanup *next; + void (*function) (void *); + void (*free_arg) (void *); + void *arg; +}; + +/* Used to mark the end of a cleanup chain. + The value is chosen so that it: + - is non-NULL so that make_cleanup never returns NULL, + - causes a segv if dereferenced + [though this won't catch errors that a value of, say, + ((struct cleanup *) -1) will] + - displays as something useful when printed in gdb. + This is const for a bit of extra robustness. + It is initialized to coax gcc into putting it into .rodata. + All fields are initialized to survive -Wextra. */ +static const struct cleanup sentinel_cleanup = { 0, 0, 0, 0 }; + +/* Handy macro to use when referring to sentinel_cleanup. */ +#define SENTINEL_CLEANUP ((struct cleanup *) &sentinel_cleanup) + +/* Chain of cleanup actions established with make_final_cleanup, + to be executed when gdb exits. */ +static struct cleanup *final_cleanup_chain = SENTINEL_CLEANUP; + +/* Main worker routine to create a cleanup. + PMY_CHAIN is a pointer to either cleanup_chain or final_cleanup_chain. + FUNCTION is the function to call to perform the cleanup. + ARG is passed to FUNCTION when called. + FREE_ARG, if non-NULL, is called after the cleanup is performed. + + The result is a pointer to the previous chain pointer + to be passed later to do_cleanups or discard_cleanups. */ + +static struct cleanup * +make_my_cleanup2 (struct cleanup **pmy_chain, make_cleanup_ftype *function, + void *arg, void (*free_arg) (void *)) +{ + struct cleanup *newobj = XNEW (struct cleanup); + struct cleanup *old_chain = *pmy_chain; + + newobj->next = *pmy_chain; + newobj->function = function; + newobj->free_arg = free_arg; + newobj->arg = arg; + *pmy_chain = newobj; + + gdb_assert (old_chain != NULL); + return old_chain; +} + +/* Worker routine to create a cleanup without a destructor. + PMY_CHAIN is a pointer to either cleanup_chain or final_cleanup_chain. + FUNCTION is the function to call to perform the cleanup. + ARG is passed to FUNCTION when called. + + The result is a pointer to the previous chain pointer + to be passed later to do_cleanups or discard_cleanups. */ + +static struct cleanup * +make_my_cleanup (struct cleanup **pmy_chain, make_cleanup_ftype *function, + void *arg) +{ + return make_my_cleanup2 (pmy_chain, function, arg, NULL); +} + +/* Add a new cleanup to the final cleanup_chain, + and return the previous chain pointer + to be passed later to do_cleanups or discard_cleanups. + Args are FUNCTION to clean up with, and ARG to pass to it. */ + +struct cleanup * +make_final_cleanup (make_cleanup_ftype *function, void *arg) +{ + return make_my_cleanup (&final_cleanup_chain, function, arg); +} + +/* Worker routine to perform cleanups. + PMY_CHAIN is a pointer to either cleanup_chain or final_cleanup_chain. + OLD_CHAIN is the result of a "make" cleanup routine. + Cleanups are performed until we get back to the old end of the chain. */ + +static void +do_my_cleanups (struct cleanup **pmy_chain, + struct cleanup *old_chain) +{ + struct cleanup *ptr; + + while ((ptr = *pmy_chain) != old_chain) + { + *pmy_chain = ptr->next; /* Do this first in case of recursion. */ + (*ptr->function) (ptr->arg); + if (ptr->free_arg) + (*ptr->free_arg) (ptr->arg); + xfree (ptr); + } +} + +/* Discard final cleanups and do the actions they describe. */ + +void +do_final_cleanups () +{ + do_my_cleanups (&final_cleanup_chain, SENTINEL_CLEANUP); +} diff -Nru gdb-9.1/gdbsupport/cleanups.h gdb-10.2/gdbsupport/cleanups.h --- gdb-9.1/gdbsupport/cleanups.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/cleanups.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,39 @@ +/* Cleanups. + Copyright (C) 1986-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef COMMON_CLEANUPS_H +#define COMMON_CLEANUPS_H + +/* Outside of cleanups.c, this is an opaque type. */ +struct cleanup; + +/* NOTE: cagney/2000-03-04: This typedef is strictly for the + make_cleanup function declarations below. Do not use this typedef + as a cast when passing functions into the make_cleanup() code. + Instead either use a bounce function or add a wrapper function. + Calling a f(char*) function with f(void*) is non-portable. */ +typedef void (make_cleanup_ftype) (void *); + +/* Function type for the dtor in make_cleanup_dtor. */ +typedef void (make_cleanup_dtor_ftype) (void *); + +extern struct cleanup *make_final_cleanup (make_cleanup_ftype *, void *); + +extern void do_final_cleanups (); + +#endif /* COMMON_CLEANUPS_H */ diff -Nru gdb-9.1/gdbsupport/common-debug.cc gdb-10.2/gdbsupport/common-debug.cc --- gdb-9.1/gdbsupport/common-debug.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/common-debug.cc 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,37 @@ +/* Debug printing functions. + + Copyright (C) 2014-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "common-defs.h" +#include "common-debug.h" + +/* See gdbsupport/common-debug.h. */ + +bool show_debug_regs; + +/* See gdbsupport/common-debug.h. */ + +void +debug_printf (const char *fmt, ...) +{ + va_list ap; + + va_start (ap, fmt); + debug_vprintf (fmt, ap); + va_end (ap); +} diff -Nru gdb-9.1/gdbsupport/common-debug.h gdb-10.2/gdbsupport/common-debug.h --- gdb-9.1/gdbsupport/common-debug.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/common-debug.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,41 @@ +/* Declarations for debug printing functions. + + Copyright (C) 2014-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef COMMON_COMMON_DEBUG_H +#define COMMON_COMMON_DEBUG_H + +/* Set to true to enable debugging of hardware breakpoint/ + watchpoint support code. */ + +extern bool show_debug_regs; + +/* Print a formatted message to the appropriate channel for + debugging output for the client. */ + +extern void debug_printf (const char *format, ...) + ATTRIBUTE_PRINTF (1, 2); + +/* Print a formatted message to the appropriate channel for + debugging output for the client. This function must be + provided by the client. */ + +extern void debug_vprintf (const char *format, va_list ap) + ATTRIBUTE_PRINTF (1, 0); + +#endif /* COMMON_COMMON_DEBUG_H */ diff -Nru gdb-9.1/gdbsupport/common-defs.h gdb-10.2/gdbsupport/common-defs.h --- gdb-9.1/gdbsupport/common-defs.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/common-defs.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,153 @@ +/* Common definitions. + + Copyright (C) 1986-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef COMMON_COMMON_DEFS_H +#define COMMON_COMMON_DEFS_H + +#include <gdbsupport/config.h> + +#undef PACKAGE_NAME +#undef PACKAGE +#undef PACKAGE_VERSION +#undef PACKAGE_STRING +#undef PACKAGE_TARNAME + +#include "gnulib/config.h" + +/* From: + https://www.gnu.org/software/gnulib/manual/html_node/stdint_002eh.html + + "On some hosts that predate C++11, when using C++ one must define + __STDC_CONSTANT_MACROS to make visible the definitions of constant + macros such as INTMAX_C, and one must define __STDC_LIMIT_MACROS to + make visible the definitions of limit macros such as INTMAX_MAX.". + + And: + https://www.gnu.org/software/gnulib/manual/html_node/inttypes_002eh.html + + "On some hosts that predate C++11, when using C++ one must define + __STDC_FORMAT_MACROS to make visible the declarations of format + macros such as PRIdMAX." + + Must do this before including any system header, since other system + headers may include stdint.h/inttypes.h. */ +#define __STDC_CONSTANT_MACROS 1 +#define __STDC_LIMIT_MACROS 1 +#define __STDC_FORMAT_MACROS 1 + +/* Some distros enable _FORTIFY_SOURCE by default, which on occasion + has caused build failures with -Wunused-result when a patch is + developed on a distro that does not enable _FORTIFY_SOURCE. We + enable it here in order to try to catch these problems earlier; + plus this seems like a reasonable safety measure. The check for + optimization is required because _FORTIFY_SOURCE only works when + optimization is enabled. If _FORTIFY_SOURCE is already defined, + then we don't do anything. Also, on MinGW, fortify requires + linking to -lssp, and to avoid the hassle of checking for + that and linking to it statically, we just don't define + _FORTIFY_SOURCE there. */ + +#if (!defined _FORTIFY_SOURCE && defined __OPTIMIZE__ && __OPTIMIZE__ > 0 \ + && !defined(__MINGW32__)) +#define _FORTIFY_SOURCE 2 +#endif + +/* We don't support Windows versions before XP, so we define + _WIN32_WINNT correspondingly to ensure the Windows API headers + expose the required symbols. */ +#if defined (__MINGW32__) || defined (__CYGWIN__) +# ifdef _WIN32_WINNT +# if _WIN32_WINNT < 0x0501 +# undef _WIN32_WINNT +# define _WIN32_WINNT 0x0501 +# endif +# else +# define _WIN32_WINNT 0x0501 +# endif +#endif /* __MINGW32__ || __CYGWIN__ */ + +#include <stdarg.h> +#include <stdio.h> + +/* Include both cstdlib and stdlib.h to ensure we have standard functions + defined both in the std:: namespace and in the global namespace. */ +#include <cstdlib> +#include <stdlib.h> + +#include <stddef.h> +#include <stdint.h> +#include <string.h> +#ifdef HAVE_STRINGS_H +#include <strings.h> /* for strcasecmp and strncasecmp */ +#endif +#include <errno.h> +#if HAVE_ALLOCA_H +#include <alloca.h> +#endif + +#include "ansidecl.h" +/* This is defined by ansidecl.h, but we prefer gnulib's version. On + MinGW, gnulib might enable __USE_MINGW_ANSI_STDIO, which may or not + require use of attribute gnu_printf instead of printf. gnulib + checks that at configure time. Since _GL_ATTRIBUTE_FORMAT_PRINTF + is compatible with ATTRIBUTE_PRINTF, simply use it. */ +#undef ATTRIBUTE_PRINTF +#define ATTRIBUTE_PRINTF _GL_ATTRIBUTE_FORMAT_PRINTF + +#if GCC_VERSION >= 3004 +#define ATTRIBUTE_UNUSED_RESULT __attribute__ ((__warn_unused_result__)) +#else +#define ATTRIBUTE_UNUSED_RESULT +#endif + +#include "libiberty.h" +#include "pathmax.h" +#include "gdb/signals.h" +#include "gdb_locale.h" +#include "ptid.h" +#include "common-types.h" +#include "common-utils.h" +#include "gdb_assert.h" +#include "errors.h" +#include "print-utils.h" +#include "common-debug.h" +#include "cleanups.h" +#include "common-exceptions.h" +#include "gdbsupport/poison.h" + +#define EXTERN_C extern "C" +#define EXTERN_C_PUSH extern "C" { +#define EXTERN_C_POP } + +/* Pull in gdb::unique_xmalloc_ptr. */ +#include "gdbsupport/gdb_unique_ptr.h" + +/* String containing the current directory (what getwd would return). */ +extern char *current_directory; + +/* sbrk on macOS is not useful for our purposes, since sbrk(0) always + returns the same value. brk/sbrk on macOS is just an emulation + that always returns a pointer to a 4MB section reserved for + that. */ + +#if defined (HAVE_SBRK) && !__APPLE__ +#define HAVE_USEFUL_SBRK 1 +#endif + +#endif /* COMMON_COMMON_DEFS_H */ diff -Nru gdb-9.1/gdbsupport/common-exceptions.cc gdb-10.2/gdbsupport/common-exceptions.cc --- gdb-9.1/gdbsupport/common-exceptions.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/common-exceptions.cc 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,235 @@ +/* Exception (throw catch) mechanism, for GDB, the GNU debugger. + + Copyright (C) 1986-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "common-defs.h" +#include "common-exceptions.h" +#include <forward_list> + +/* Possible catcher states. */ +enum catcher_state { + /* Initial state, a new catcher has just been created. */ + CATCHER_CREATED, + /* The catch code is running. */ + CATCHER_RUNNING, + CATCHER_RUNNING_1, + /* The catch code threw an exception. */ + CATCHER_ABORTING +}; + +/* Possible catcher actions. */ +enum catcher_action { + CATCH_ITER, + CATCH_ITER_1, + CATCH_THROWING +}; + +struct catcher +{ + enum catcher_state state = CATCHER_CREATED; + /* Jump buffer pointing back at the exception handler. */ + jmp_buf buf; + /* Status buffer belonging to the exception handler. */ + struct gdb_exception exception; +}; + +/* Where to go for throw_exception(). */ +static std::forward_list<struct catcher> catchers; + +jmp_buf * +exceptions_state_mc_init () +{ + catchers.emplace_front (); + return &catchers.front ().buf; +} + +/* Catcher state machine. Returns non-zero if the m/c should be run + again, zero if it should abort. */ + +static int +exceptions_state_mc (enum catcher_action action) +{ + switch (catchers.front ().state) + { + case CATCHER_CREATED: + switch (action) + { + case CATCH_ITER: + /* Allow the code to run the catcher. */ + catchers.front ().state = CATCHER_RUNNING; + return 1; + default: + internal_error (__FILE__, __LINE__, _("bad state")); + } + case CATCHER_RUNNING: + switch (action) + { + case CATCH_ITER: + /* No error/quit has occured. */ + return 0; + case CATCH_ITER_1: + catchers.front ().state = CATCHER_RUNNING_1; + return 1; + case CATCH_THROWING: + catchers.front ().state = CATCHER_ABORTING; + /* See also throw_exception. */ + return 1; + default: + internal_error (__FILE__, __LINE__, _("bad switch")); + } + case CATCHER_RUNNING_1: + switch (action) + { + case CATCH_ITER: + /* The did a "break" from the inner while loop. */ + return 0; + case CATCH_ITER_1: + catchers.front ().state = CATCHER_RUNNING; + return 0; + case CATCH_THROWING: + catchers.front ().state = CATCHER_ABORTING; + /* See also throw_exception. */ + return 1; + default: + internal_error (__FILE__, __LINE__, _("bad switch")); + } + case CATCHER_ABORTING: + switch (action) + { + case CATCH_ITER: + { + /* Exit normally if this catcher can handle this + exception. The caller analyses the func return + values. */ + return 0; + } + default: + internal_error (__FILE__, __LINE__, _("bad state")); + } + default: + internal_error (__FILE__, __LINE__, _("bad switch")); + } +} + +int +exceptions_state_mc_catch (struct gdb_exception *exception, + int mask) +{ + *exception = std::move (catchers.front ().exception); + catchers.pop_front (); + + if (exception->reason < 0) + { + if (mask & RETURN_MASK (exception->reason)) + { + /* Exit normally and let the caller handle the + exception. */ + return 1; + } + + /* The caller didn't request that the event be caught, relay the + event to the next exception_catch/CATCH_SJLJ. */ + throw_exception_sjlj (*exception); + } + + /* No exception was thrown. */ + return 0; +} + +int +exceptions_state_mc_action_iter (void) +{ + return exceptions_state_mc (CATCH_ITER); +} + +int +exceptions_state_mc_action_iter_1 (void) +{ + return exceptions_state_mc (CATCH_ITER_1); +} + +/* Return EXCEPTION to the nearest containing CATCH_SJLJ block. */ + +void +throw_exception_sjlj (const struct gdb_exception &exception) +{ + /* Jump to the nearest CATCH_SJLJ block, communicating REASON to + that call via setjmp's return value. Note that REASON can't be + zero, by definition in common-exceptions.h. */ + exceptions_state_mc (CATCH_THROWING); + enum return_reason reason = exception.reason; + catchers.front ().exception = exception; + longjmp (catchers.front ().buf, reason); +} + +/* Implementation of throw_exception that uses C++ try/catch. */ + +void +throw_exception (gdb_exception &&exception) +{ + if (exception.reason == RETURN_QUIT) + throw gdb_exception_quit (std::move (exception)); + else if (exception.reason == RETURN_ERROR) + throw gdb_exception_error (std::move (exception)); + else + gdb_assert_not_reached ("invalid return reason"); +} + +static void ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF (3, 0) +throw_it (enum return_reason reason, enum errors error, const char *fmt, + va_list ap) +{ + if (reason == RETURN_QUIT) + throw gdb_exception_quit (fmt, ap); + else if (reason == RETURN_ERROR) + throw gdb_exception_error (error, fmt, ap); + else + gdb_assert_not_reached ("invalid return reason"); +} + +void +throw_verror (enum errors error, const char *fmt, va_list ap) +{ + throw_it (RETURN_ERROR, error, fmt, ap); +} + +void +throw_vquit (const char *fmt, va_list ap) +{ + throw_it (RETURN_QUIT, GDB_NO_ERROR, fmt, ap); +} + +void +throw_error (enum errors error, const char *fmt, ...) +{ + va_list args; + + va_start (args, fmt); + throw_verror (error, fmt, args); + va_end (args); +} + +void +throw_quit (const char *fmt, ...) +{ + va_list args; + + va_start (args, fmt); + throw_vquit (fmt, args); + va_end (args); +} diff -Nru gdb-9.1/gdbsupport/common-exceptions.h gdb-10.2/gdbsupport/common-exceptions.h --- gdb-9.1/gdbsupport/common-exceptions.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/common-exceptions.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,304 @@ +/* Exception (throw catch) mechanism, for GDB, the GNU debugger. + + Copyright (C) 1986-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef COMMON_COMMON_EXCEPTIONS_H +#define COMMON_COMMON_EXCEPTIONS_H + +#include <setjmp.h> +#include <new> +#include <memory> +#include <string> + +/* Reasons for calling throw_exceptions(). NOTE: all reason values + must be different from zero. enum value 0 is reserved for internal + use as the return value from an initial setjmp(). */ + +enum return_reason + { + /* User interrupt. */ + RETURN_QUIT = -2, + /* Any other error. */ + RETURN_ERROR + }; + +#define RETURN_MASK(reason) (1 << (int)(-reason)) + +typedef enum +{ + RETURN_MASK_QUIT = RETURN_MASK (RETURN_QUIT), + RETURN_MASK_ERROR = RETURN_MASK (RETURN_ERROR), + RETURN_MASK_ALL = (RETURN_MASK_QUIT | RETURN_MASK_ERROR) +} return_mask; + +/* Describe all exceptions. */ + +enum errors { + GDB_NO_ERROR, + + /* Any generic error, the corresponding text is in + exception.message. */ + GENERIC_ERROR, + + /* Something requested was not found. */ + NOT_FOUND_ERROR, + + /* Thread library lacks support necessary for finding thread local + storage. */ + TLS_NO_LIBRARY_SUPPORT_ERROR, + + /* Load module not found while attempting to find thread local storage. */ + TLS_LOAD_MODULE_NOT_FOUND_ERROR, + + /* Thread local storage has not been allocated yet. */ + TLS_NOT_ALLOCATED_YET_ERROR, + + /* Something else went wrong while attempting to find thread local + storage. The ``struct gdb_exception'' message field provides + more detail. */ + TLS_GENERIC_ERROR, + + /* Problem parsing an XML document. */ + XML_PARSE_ERROR, + + /* Error accessing memory. */ + MEMORY_ERROR, + + /* Value not available. E.g., a register was not collected in a + traceframe. */ + NOT_AVAILABLE_ERROR, + + /* Value was optimized out. Note: if the value was a register, this + means the register was not saved in the frame. */ + OPTIMIZED_OUT_ERROR, + + /* DW_OP_entry_value resolving failed. */ + NO_ENTRY_VALUE_ERROR, + + /* Target throwing an error has been closed. Current command should be + aborted as the inferior state is no longer valid. */ + TARGET_CLOSE_ERROR, + + /* An undefined command was executed. */ + UNDEFINED_COMMAND_ERROR, + + /* Requested feature, method, mechanism, etc. is not supported. */ + NOT_SUPPORTED_ERROR, + + /* The number of candidates generated during line completion has + reached the user's specified limit. This isn't an error, this exception + is used to halt searching for more completions, but for consistency + "_ERROR" is appended to the name. */ + MAX_COMPLETIONS_REACHED_ERROR, + + /* Add more errors here. */ + NR_ERRORS +}; + +struct gdb_exception +{ + gdb_exception () + : reason ((enum return_reason) 0), + error (GDB_NO_ERROR) + { + } + + gdb_exception (enum return_reason r, enum errors e) + : reason (r), + error (e) + { + } + + gdb_exception (enum return_reason r, enum errors e, + const char *fmt, va_list ap) + ATTRIBUTE_PRINTF (4, 0) + : reason (r), + error (e), + message (std::make_shared<std::string> (string_vprintf (fmt, ap))) + { + } + + /* The move constructor exists so that we can mark it "noexcept", + which is a good practice for any sort of exception object. */ + explicit gdb_exception (gdb_exception &&other) noexcept = default; + + /* The copy constructor exists so that we can mark it "noexcept", + which is a good practice for any sort of exception object. */ + gdb_exception (const gdb_exception &other) noexcept + : reason (other.reason), + error (other.error), + message (other.message) + { + } + + /* The assignment operator exists so that we can mark it "noexcept", + which is a good practice for any sort of exception object. */ + gdb_exception &operator= (const gdb_exception &other) noexcept + { + reason = other.reason; + error = other.error; + message = other.message; + return *this; + } + + gdb_exception &operator= (gdb_exception &&other) noexcept = default; + + /* Return the contents of the exception message, as a C string. The + string remains owned by the exception object. */ + const char *what () const noexcept + { + return message->c_str (); + } + + enum return_reason reason; + enum errors error; + std::shared_ptr<std::string> message; +}; + +/* Functions to drive the sjlj-based exceptions state machine. Though + declared here by necessity, these functions should be considered + internal to the exceptions subsystem and not used other than via + the TRY/CATCH (or TRY_SJLJ/CATCH_SJLJ) macros defined below. */ + +extern jmp_buf *exceptions_state_mc_init (void); +extern int exceptions_state_mc_action_iter (void); +extern int exceptions_state_mc_action_iter_1 (void); +extern int exceptions_state_mc_catch (struct gdb_exception *, int); + +/* Macro to wrap up standard try/catch behavior. + + The double loop lets us correctly handle code "break"ing out of the + try catch block. (It works as the "break" only exits the inner + "while" loop, the outer for loop detects this handling it + correctly.) Of course "return" and "goto" are not so lucky. + + For instance: + + *INDENT-OFF* + + TRY_SJLJ + { + } + CATCH_SJLJ (e, RETURN_MASK_ERROR) + { + switch (e.reason) + { + case RETURN_ERROR: ... + } + } + END_CATCH_SJLJ + + The SJLJ variants are needed in some cases where gdb exceptions + need to cross third-party library code compiled without exceptions + support (e.g., readline). */ + +#define TRY_SJLJ \ + { \ + jmp_buf *buf = \ + exceptions_state_mc_init (); \ + setjmp (*buf); \ + } \ + while (exceptions_state_mc_action_iter ()) \ + while (exceptions_state_mc_action_iter_1 ()) + +#define CATCH_SJLJ(EXCEPTION, MASK) \ + { \ + struct gdb_exception EXCEPTION; \ + if (exceptions_state_mc_catch (&(EXCEPTION), MASK)) + +#define END_CATCH_SJLJ \ + } + +/* The exception types client code may catch. They're just shims + around gdb_exception that add nothing but type info. Which is used + is selected depending on the MASK argument passed to CATCH. */ + +struct gdb_exception_error : public gdb_exception +{ + gdb_exception_error (enum errors e, const char *fmt, va_list ap) + ATTRIBUTE_PRINTF (3, 0) + : gdb_exception (RETURN_ERROR, e, fmt, ap) + { + } + + explicit gdb_exception_error (gdb_exception &&ex) noexcept + : gdb_exception (std::move (ex)) + { + gdb_assert (ex.reason == RETURN_ERROR); + } +}; + +struct gdb_exception_quit : public gdb_exception +{ + gdb_exception_quit (const char *fmt, va_list ap) + ATTRIBUTE_PRINTF (2, 0) + : gdb_exception (RETURN_QUIT, GDB_NO_ERROR, fmt, ap) + { + } + + explicit gdb_exception_quit (gdb_exception &&ex) noexcept + : gdb_exception (std::move (ex)) + { + gdb_assert (ex.reason == RETURN_QUIT); + } +}; + +/* An exception type that inherits from both std::bad_alloc and a gdb + exception. This is necessary because operator new can only throw + std::bad_alloc, and OTOH, we want exceptions thrown due to memory + allocation error to be caught by all the CATCH/RETURN_MASK_ALL + spread around the codebase. */ + +struct gdb_quit_bad_alloc + : public gdb_exception_quit, + public std::bad_alloc +{ + explicit gdb_quit_bad_alloc (gdb_exception &&ex) noexcept + : gdb_exception_quit (std::move (ex)), + std::bad_alloc () + { + } +}; + +/* *INDENT-ON* */ + +/* Throw an exception (as described by "struct gdb_exception"), + landing in the inner most containing exception handler established + using TRY/CATCH. */ +extern void throw_exception (gdb_exception &&exception) + ATTRIBUTE_NORETURN; + +/* Throw an exception by executing a LONG JUMP to the inner most + containing exception handler established using TRY_SJLJ. Necessary + in some cases where we need to throw GDB exceptions across + third-party library code (e.g., readline). */ +extern void throw_exception_sjlj (const struct gdb_exception &exception) + ATTRIBUTE_NORETURN; + +/* Convenience wrappers around throw_exception that throw GDB + errors. */ +extern void throw_verror (enum errors, const char *fmt, va_list ap) + ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF (2, 0); +extern void throw_vquit (const char *fmt, va_list ap) + ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF (1, 0); +extern void throw_error (enum errors error, const char *fmt, ...) + ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF (2, 3); +extern void throw_quit (const char *fmt, ...) + ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF (1, 2); + +#endif /* COMMON_COMMON_EXCEPTIONS_H */ diff -Nru gdb-9.1/gdbsupport/common-gdbthread.h gdb-10.2/gdbsupport/common-gdbthread.h --- gdb-9.1/gdbsupport/common-gdbthread.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/common-gdbthread.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,28 @@ +/* Common multi-process/thread control defs for GDB and gdbserver. + Copyright (C) 1987-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef COMMON_COMMON_GDBTHREAD_H +#define COMMON_COMMON_GDBTHREAD_H + +struct process_stratum_target; + +/* Switch from one thread to another. */ +extern void switch_to_thread (process_stratum_target *proc_target, + ptid_t ptid); + +#endif /* COMMON_COMMON_GDBTHREAD_H */ diff -Nru gdb-9.1/gdbsupport/common-inferior.cc gdb-10.2/gdbsupport/common-inferior.cc --- gdb-9.1/gdbsupport/common-inferior.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/common-inferior.cc 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,125 @@ +/* Functions to deal with the inferior being executed on GDB or + GDBserver. + + Copyright (C) 2019-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "gdbsupport/common-defs.h" +#include "gdbsupport/common-inferior.h" + +/* See common-inferior.h. */ + +bool startup_with_shell = true; + +/* See common-inferior.h. */ + +std::string +construct_inferior_arguments (gdb::array_view<char * const> argv) +{ + std::string result; + + if (startup_with_shell) + { +#ifdef __MINGW32__ + /* This holds all the characters considered special to the + Windows shells. */ + static const char special[] = "\"!&*|[]{}<>?`~^=;, \t\n"; + static const char quote = '"'; +#else + /* This holds all the characters considered special to the + typical Unix shells. We include `^' because the SunOS + /bin/sh treats it as a synonym for `|'. */ + static const char special[] = "\"!#$&*()\\|[]{}<>?'`~^; \t\n"; + static const char quote = '\''; +#endif + for (int i = 0; i < argv.size (); ++i) + { + if (i > 0) + result += ' '; + + /* Need to handle empty arguments specially. */ + if (argv[i][0] == '\0') + { + result += quote; + result += quote; + } + else + { +#ifdef __MINGW32__ + bool quoted = false; + + if (strpbrk (argv[i], special)) + { + quoted = true; + result += quote; + } +#endif + for (char *cp = argv[i]; *cp; ++cp) + { + if (*cp == '\n') + { + /* A newline cannot be quoted with a backslash (it + just disappears), only by putting it inside + quotes. */ + result += quote; + result += '\n'; + result += quote; + } + else + { +#ifdef __MINGW32__ + if (*cp == quote) +#else + if (strchr (special, *cp) != NULL) +#endif + result += '\\'; + result += *cp; + } + } +#ifdef __MINGW32__ + if (quoted) + result += quote; +#endif + } + } + } + else + { + /* In this case we can't handle arguments that contain spaces, + tabs, or newlines -- see breakup_args(). */ + for (char *arg : argv) + { + char *cp = strchr (arg, ' '); + if (cp == NULL) + cp = strchr (arg, '\t'); + if (cp == NULL) + cp = strchr (arg, '\n'); + if (cp != NULL) + error (_("can't handle command-line " + "argument containing whitespace")); + } + + for (int i = 0; i < argv.size (); ++i) + { + if (i > 0) + result += " "; + result += argv[i]; + } + } + + return result; +} diff -Nru gdb-9.1/gdbsupport/common-inferior.h gdb-10.2/gdbsupport/common-inferior.h --- gdb-9.1/gdbsupport/common-inferior.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/common-inferior.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,68 @@ +/* Functions to deal with the inferior being executed on GDB or + GDBserver. + + Copyright (C) 1986-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef COMMON_COMMON_INFERIOR_H +#define COMMON_COMMON_INFERIOR_H + +#include "gdbsupport/array-view.h" + +/* Return the exec wrapper to be used when starting the inferior, or NULL + otherwise. */ +extern const char *get_exec_wrapper (); + +/* Return the name of the executable file as a string. + ERR nonzero means get error if there is none specified; + otherwise return 0 in that case. */ +extern const char *get_exec_file (int err); + +/* Return the inferior's current working directory. If nothing has + been set, then return NULL. */ +extern const char *get_inferior_cwd (); + +/* Set the inferior current working directory. If CWD is NULL, unset + the directory. */ +extern void set_inferior_cwd (const char *cwd); + +/* Whether to start up the debuggee under a shell. + + If startup-with-shell is set, GDB's "run" will attempt to start up + the debuggee under a shell. This also happens when using GDBserver + under extended remote mode. + + This is in order for argument-expansion to occur. E.g., + + (gdb) run * + + The "*" gets expanded by the shell into a list of files. + + While this is a nice feature, it may be handy to bypass the shell + in some cases. To disable this feature, do "set startup-with-shell + false". + + The catch-exec traps expected during start-up will be one more if + the target is started up with a shell. */ +extern bool startup_with_shell; + +/* Compute command-line string given argument vector. This does the + same shell processing as fork_inferior. */ +extern std::string +construct_inferior_arguments (gdb::array_view<char * const>); + +#endif /* COMMON_COMMON_INFERIOR_H */ diff -Nru gdb-9.1/gdbsupport/common.m4 gdb-10.2/gdbsupport/common.m4 --- gdb-9.1/gdbsupport/common.m4 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/common.m4 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,187 @@ +dnl Autoconf configure snippets for common. +dnl Copyright (C) 1995-2021 Free Software Foundation, Inc. +dnl +dnl This file is part of GDB. +dnl +dnl This program is free software; you can redistribute it and/or modify +dnl it under the terms of the GNU General Public License as published by +dnl the Free Software Foundation; either version 3 of the License, or +dnl (at your option) any later version. +dnl +dnl This program is distributed in the hope that it will be useful, +dnl but WITHOUT ANY WARRANTY; without even the implied warranty of +dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +dnl GNU General Public License for more details. +dnl +dnl You should have received a copy of the GNU General Public License +dnl along with this program. If not, see <http://www.gnu.org/licenses/>. + +dnl Invoke configury needed by the files in 'common'. +AC_DEFUN([GDB_AC_COMMON], [ + # Set the 'development' global. + . $srcdir/../bfd/development.sh + + AC_HEADER_STDC + AC_FUNC_ALLOCA + + WIN32APILIBS= + case ${host} in + *mingw32*) + AC_DEFINE(USE_WIN32API, 1, + [Define if we should use the Windows API, instead of the + POSIX API. On Windows, we use the Windows API when + building for MinGW, but the POSIX API when building + for Cygwin.]) + WIN32APILIBS="-lws2_32" + ;; + esac + + dnl Note that this requires codeset.m4, which is included + dnl by the users of common.m4. + AM_LANGINFO_CODESET + + AC_CHECK_HEADERS(linux/perf_event.h locale.h memory.h signal.h dnl + sys/resource.h sys/socket.h dnl + sys/un.h sys/wait.h dnl + thread_db.h wait.h dnl + termios.h dnl + dlfcn.h dnl + linux/elf.h proc_service.h dnl + poll.h sys/poll.h sys/select.h) + + AC_FUNC_MMAP + AC_FUNC_VFORK + AC_CHECK_FUNCS([fdwalk getrlimit pipe pipe2 poll socketpair sigaction \ + ptrace64 sbrk setns sigaltstack sigprocmask \ + setpgid setpgrp getrusage getauxval]) + + dnl Check if we can disable the virtual address space randomization. + dnl The functionality of setarch -R. + AC_CHECK_DECLS([ADDR_NO_RANDOMIZE],,, [#include <sys/personality.h>]) + define([PERSONALITY_TEST], [AC_LANG_PROGRAM([#include <sys/personality.h>], [ + # if !HAVE_DECL_ADDR_NO_RANDOMIZE + # define ADDR_NO_RANDOMIZE 0x0040000 + # endif + /* Test the flag could be set and stays set. */ + personality (personality (0xffffffff) | ADDR_NO_RANDOMIZE); + if (!(personality (personality (0xffffffff)) & ADDR_NO_RANDOMIZE)) + return 1])]) + AC_RUN_IFELSE([PERSONALITY_TEST], + [have_personality=true], + [have_personality=false], + [AC_LINK_IFELSE([PERSONALITY_TEST], + [have_personality=true], + [have_personality=false])]) + if $have_personality + then + AC_DEFINE([HAVE_PERSONALITY], 1, + [Define if you support the personality syscall.]) + fi + + AC_CHECK_DECLS([strstr]) + + # ----------------------- # + # Checks for structures. # + # ----------------------- # + + AC_CHECK_MEMBERS([struct stat.st_blocks, struct stat.st_blksize]) + + AC_SEARCH_LIBS(kinfo_getfile, util util-freebsd, + [AC_DEFINE(HAVE_KINFO_GETFILE, 1, + [Define to 1 if your system has the kinfo_getfile function. ])]) + + # Check for std::thread. This does not work on some platforms, like + # mingw and DJGPP. + AC_LANG_PUSH([C++]) + AX_PTHREAD([threads=yes], [threads=no]) + if test "$threads" = "yes"; then + save_LIBS="$LIBS" + LIBS="$PTHREAD_LIBS $LIBS" + save_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$PTHREAD_CFLAGS $save_CXXFLAGS" + AC_CACHE_CHECK([for std::thread], + gdb_cv_cxx_std_thread, + [AC_COMPILE_IFELSE([AC_LANG_PROGRAM( + [[#include <thread> + void callback() { }]], + [[std::thread t(callback);]])], + gdb_cv_cxx_std_thread=yes, + gdb_cv_cxx_std_thread=no)]) + + # This check must be here, while LIBS includes any necessary + # threading library. + AC_CHECK_FUNCS([pthread_sigmask pthread_setname_np]) + + LIBS="$save_LIBS" + CXXFLAGS="$save_CXXFLAGS" + fi + if test "$gdb_cv_cxx_std_thread" = "yes"; then + AC_DEFINE(CXX_STD_THREAD, 1, + [Define to 1 if std::thread works.]) + fi + AC_LANG_POP + + dnl Check if sigsetjmp is available. Using AC_CHECK_FUNCS won't + dnl do since sigsetjmp might only be defined as a macro. + AC_CACHE_CHECK([for sigsetjmp], gdb_cv_func_sigsetjmp, + [AC_TRY_COMPILE([ + #include <setjmp.h> + ], [sigjmp_buf env; while (! sigsetjmp (env, 1)) siglongjmp (env, 1);], + gdb_cv_func_sigsetjmp=yes, gdb_cv_func_sigsetjmp=no)]) + if test "$gdb_cv_func_sigsetjmp" = "yes"; then + AC_DEFINE(HAVE_SIGSETJMP, 1, [Define if sigsetjmp is available. ]) + fi + + AC_ARG_WITH(intel_pt, + AS_HELP_STRING([--with-intel-pt], [include Intel Processor Trace support (auto/yes/no)]), + [], [with_intel_pt=auto]) + AC_MSG_CHECKING([whether to use intel pt]) + AC_MSG_RESULT([$with_intel_pt]) + + if test "${with_intel_pt}" = no; then + AC_MSG_WARN([Intel Processor Trace support disabled; some features may be unavailable.]) + HAVE_LIBIPT=no + else + AC_PREPROC_IFELSE([AC_LANG_SOURCE([[ + #include <linux/perf_event.h> + #ifndef PERF_ATTR_SIZE_VER5 + # error + #endif + ]])], [perf_event=yes], [perf_event=no]) + if test "$perf_event" != yes; then + if test "$with_intel_pt" = yes; then + AC_MSG_ERROR([linux/perf_event.h missing or too old]) + else + AC_MSG_WARN([linux/perf_event.h missing or too old; some features may be unavailable.]) + fi + fi + + AC_LIB_HAVE_LINKFLAGS([ipt], [], [#include "intel-pt.h"], [pt_insn_alloc_decoder (0);]) + if test "$HAVE_LIBIPT" != yes; then + if test "$with_intel_pt" = yes; then + AC_MSG_ERROR([libipt is missing or unusable]) + else + AC_MSG_WARN([libipt is missing or unusable; some features may be unavailable.]) + fi + else + save_LIBS=$LIBS + LIBS="$LIBS $LIBIPT" + AC_CHECK_FUNCS(pt_insn_event) + AC_CHECK_MEMBERS([struct pt_insn.enabled, struct pt_insn.resynced], [], [], + [#include <intel-pt.h>]) + LIBS=$save_LIBS + fi + fi + + BFD_SYS_PROCFS_H + if test "$ac_cv_header_sys_procfs_h" = yes; then + BFD_HAVE_SYS_PROCFS_TYPE(gregset_t) + BFD_HAVE_SYS_PROCFS_TYPE(fpregset_t) + BFD_HAVE_SYS_PROCFS_TYPE(prgregset_t) + BFD_HAVE_SYS_PROCFS_TYPE(prfpregset_t) + BFD_HAVE_SYS_PROCFS_TYPE(prgregset32_t) + BFD_HAVE_SYS_PROCFS_TYPE(lwpid_t) + BFD_HAVE_SYS_PROCFS_TYPE(psaddr_t) + BFD_HAVE_SYS_PROCFS_TYPE(elf_fpregset_t) + fi +]) diff -Nru gdb-9.1/gdbsupport/common-regcache.cc gdb-10.2/gdbsupport/common-regcache.cc --- gdb-9.1/gdbsupport/common-regcache.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/common-regcache.cc 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,36 @@ +/* Cache and manage the values of registers for GDB, the GNU debugger. + + Copyright (C) 2015-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "common-defs.h" +#include "common-regcache.h" + +/* Return the register's value or throw if it's not available. */ + +ULONGEST +regcache_raw_get_unsigned (struct regcache *regcache, int regnum) +{ + ULONGEST value; + enum register_status status; + + status = regcache_raw_read_unsigned (regcache, regnum, &value); + if (status == REG_UNAVAILABLE) + throw_error (NOT_AVAILABLE_ERROR, + _("Register %d is not available"), regnum); + return value; +} diff -Nru gdb-9.1/gdbsupport/common-regcache.h gdb-10.2/gdbsupport/common-regcache.h --- gdb-9.1/gdbsupport/common-regcache.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/common-regcache.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,90 @@ +/* Cache and manage the values of registers + + Copyright (C) 2014-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef COMMON_COMMON_REGCACHE_H +#define COMMON_COMMON_REGCACHE_H + +/* This header is a stopgap until we have an independent regcache. */ + +enum register_status : signed char + { + /* The register value is not in the cache, and we don't know yet + whether it's available in the target (or traceframe). */ + REG_UNKNOWN = 0, + + /* The register value is valid and cached. */ + REG_VALID = 1, + + /* The register value is unavailable. E.g., we're inspecting a + traceframe, and this register wasn't collected. Note that this + is different a different "unavailable" from saying the register + does not exist in the target's architecture --- in that case, + the target should have given us a target description that does + not include the register in the first place. */ + REG_UNAVAILABLE = -1 + }; + +/* Return a pointer to the register cache associated with the + thread specified by PTID. This function must be provided by + the client. */ + +extern struct regcache *get_thread_regcache_for_ptid (ptid_t ptid); + +/* Return the size of register numbered N in REGCACHE. This function + must be provided by the client. */ + +extern int regcache_register_size (const struct regcache *regcache, int n); + +/* Read the PC register. This function must be provided by the + client. */ + +extern CORE_ADDR regcache_read_pc (struct regcache *regcache); + +/* Read the PC register. If PC cannot be read, return 0. + This is a wrapper around 'regcache_read_pc'. */ + +extern CORE_ADDR regcache_read_pc_protected (regcache *regcache); + +/* Read a raw register into a unsigned integer. */ +extern enum register_status regcache_raw_read_unsigned + (struct regcache *regcache, int regnum, ULONGEST *val); + +ULONGEST regcache_raw_get_unsigned (struct regcache *regcache, int regnum); + +struct reg_buffer_common +{ + virtual ~reg_buffer_common () = default; + + /* Get the availability status of the value of register REGNUM in this + buffer. */ + virtual register_status get_register_status (int regnum) const = 0; + + /* Supply register REGNUM, whose contents are stored in BUF, to REGCACHE. */ + virtual void raw_supply (int regnum, const void *buf) = 0; + + /* Collect register REGNUM from REGCACHE and store its contents in BUF. */ + virtual void raw_collect (int regnum, void *buf) const = 0; + + /* Compare the contents of the register stored in the regcache (ignoring the + first OFFSET bytes) to the contents of BUF (without any offset). Returns + true if the same. */ + virtual bool raw_compare (int regnum, const void *buf, int offset) const = 0; +}; + +#endif /* COMMON_COMMON_REGCACHE_H */ diff -Nru gdb-9.1/gdbsupport/common-types.h gdb-10.2/gdbsupport/common-types.h --- gdb-9.1/gdbsupport/common-types.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/common-types.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,44 @@ +/* Declarations for common types. + + Copyright (C) 1986-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef COMMON_COMMON_TYPES_H +#define COMMON_COMMON_TYPES_H + +#include <inttypes.h> + +/* * A byte from the program being debugged. */ +typedef unsigned char gdb_byte; + +/* * An address in the program being debugged. Host byte order. */ +typedef uint64_t CORE_ADDR; + +/* LONGEST must be at least as big as CORE_ADDR. */ + +typedef int64_t LONGEST; +typedef uint64_t ULONGEST; + +/* * The largest CORE_ADDR value. */ +#define CORE_ADDR_MAX (~(CORE_ADDR) 0) + +/* * The largest ULONGEST value. */ +#define ULONGEST_MAX (~(ULONGEST) 0) + +enum tribool { TRIBOOL_UNKNOWN = -1, TRIBOOL_FALSE = 0, TRIBOOL_TRUE = 1 }; + +#endif /* COMMON_COMMON_TYPES_H */ diff -Nru gdb-9.1/gdbsupport/common-utils.cc gdb-10.2/gdbsupport/common-utils.cc --- gdb-9.1/gdbsupport/common-utils.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/common-utils.cc 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,394 @@ +/* Shared general utility routines for GDB, the GNU debugger. + + Copyright (C) 1986-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "common-defs.h" +#include "common-utils.h" +#include "host-defs.h" +#include <ctype.h> + +void * +xzalloc (size_t size) +{ + return xcalloc (1, size); +} + +/* Like asprintf/vasprintf but get an internal_error if the call + fails. */ + +char * +xstrprintf (const char *format, ...) +{ + char *ret; + va_list args; + + va_start (args, format); + ret = xstrvprintf (format, args); + va_end (args); + return ret; +} + +char * +xstrvprintf (const char *format, va_list ap) +{ + char *ret = NULL; + int status = vasprintf (&ret, format, ap); + + /* NULL is returned when there was a memory allocation problem, or + any other error (for instance, a bad format string). A negative + status (the printed length) with a non-NULL buffer should never + happen, but just to be sure. */ + if (ret == NULL || status < 0) + internal_error (__FILE__, __LINE__, _("vasprintf call failed")); + return ret; +} + +int +xsnprintf (char *str, size_t size, const char *format, ...) +{ + va_list args; + int ret; + + va_start (args, format); + ret = vsnprintf (str, size, format, args); + gdb_assert (ret < size); + va_end (args); + + return ret; +} + +/* See documentation in common-utils.h. */ + +std::string +string_printf (const char* fmt, ...) +{ + va_list vp; + int size; + + va_start (vp, fmt); + size = vsnprintf (NULL, 0, fmt, vp); + va_end (vp); + + std::string str (size, '\0'); + + /* C++11 and later guarantee std::string uses contiguous memory and + always includes the terminating '\0'. */ + va_start (vp, fmt); + vsprintf (&str[0], fmt, vp); /* ARI: vsprintf */ + va_end (vp); + + return str; +} + +/* See documentation in common-utils.h. */ + +std::string +string_vprintf (const char* fmt, va_list args) +{ + va_list vp; + size_t size; + + va_copy (vp, args); + size = vsnprintf (NULL, 0, fmt, vp); + va_end (vp); + + std::string str (size, '\0'); + + /* C++11 and later guarantee std::string uses contiguous memory and + always includes the terminating '\0'. */ + vsprintf (&str[0], fmt, args); /* ARI: vsprintf */ + + return str; +} + + +/* See documentation in common-utils.h. */ + +void +string_appendf (std::string &str, const char *fmt, ...) +{ + va_list vp; + + va_start (vp, fmt); + string_vappendf (str, fmt, vp); + va_end (vp); +} + + +/* See documentation in common-utils.h. */ + +void +string_vappendf (std::string &str, const char *fmt, va_list args) +{ + va_list vp; + int grow_size; + + va_copy (vp, args); + grow_size = vsnprintf (NULL, 0, fmt, vp); + va_end (vp); + + size_t curr_size = str.size (); + str.resize (curr_size + grow_size); + + /* C++11 and later guarantee std::string uses contiguous memory and + always includes the terminating '\0'. */ + vsprintf (&str[curr_size], fmt, args); /* ARI: vsprintf */ +} + +char * +savestring (const char *ptr, size_t len) +{ + char *p = (char *) xmalloc (len + 1); + + memcpy (p, ptr, len); + p[len] = 0; + return p; +} + +/* See documentation in common-utils.h. */ + +std::string +extract_string_maybe_quoted (const char **arg) +{ + bool squote = false; + bool dquote = false; + bool bsquote = false; + std::string result; + const char *p = *arg; + + /* Find the start of the argument. */ + p = skip_spaces (p); + + /* Parse p similarly to gdb_argv buildargv function. */ + while (*p != '\0') + { + if (isspace (*p) && !squote && !dquote && !bsquote) + break; + else + { + if (bsquote) + { + bsquote = false; + result += *p; + } + else if (*p == '\\') + bsquote = true; + else if (squote) + { + if (*p == '\'') + squote = false; + else + result += *p; + } + else if (dquote) + { + if (*p == '"') + dquote = false; + else + result += *p; + } + else + { + if (*p == '\'') + squote = true; + else if (*p == '"') + dquote = true; + else + result += *p; + } + p++; + } + } + + *arg = p; + return result; +} + +/* The bit offset of the highest byte in a ULONGEST, for overflow + checking. */ + +#define HIGH_BYTE_POSN ((sizeof (ULONGEST) - 1) * HOST_CHAR_BIT) + +/* True (non-zero) iff DIGIT is a valid digit in radix BASE, + where 2 <= BASE <= 36. */ + +static int +is_digit_in_base (unsigned char digit, int base) +{ + if (!isalnum (digit)) + return 0; + if (base <= 10) + return (isdigit (digit) && digit < base + '0'); + else + return (isdigit (digit) || tolower (digit) < base - 10 + 'a'); +} + +static int +digit_to_int (unsigned char c) +{ + if (isdigit (c)) + return c - '0'; + else + return tolower (c) - 'a' + 10; +} + +/* As for strtoul, but for ULONGEST results. */ + +ULONGEST +strtoulst (const char *num, const char **trailer, int base) +{ + unsigned int high_part; + ULONGEST result; + int minus = 0; + int i = 0; + + /* Skip leading whitespace. */ + while (isspace (num[i])) + i++; + + /* Handle prefixes. */ + if (num[i] == '+') + i++; + else if (num[i] == '-') + { + minus = 1; + i++; + } + + if (base == 0 || base == 16) + { + if (num[i] == '0' && (num[i + 1] == 'x' || num[i + 1] == 'X')) + { + i += 2; + if (base == 0) + base = 16; + } + } + + if (base == 0 && num[i] == '0') + base = 8; + + if (base == 0) + base = 10; + + if (base < 2 || base > 36) + { + errno = EINVAL; + return 0; + } + + result = high_part = 0; + for (; is_digit_in_base (num[i], base); i += 1) + { + result = result * base + digit_to_int (num[i]); + high_part = high_part * base + (unsigned int) (result >> HIGH_BYTE_POSN); + result &= ((ULONGEST) 1 << HIGH_BYTE_POSN) - 1; + if (high_part > 0xff) + { + errno = ERANGE; + result = ~ (ULONGEST) 0; + high_part = 0; + minus = 0; + break; + } + } + + if (trailer != NULL) + *trailer = &num[i]; + + result = result + ((ULONGEST) high_part << HIGH_BYTE_POSN); + if (minus) + return -result; + else + return result; +} + +/* See documentation in common-utils.h. */ + +char * +skip_spaces (char *chp) +{ + if (chp == NULL) + return NULL; + while (*chp && isspace (*chp)) + chp++; + return chp; +} + +/* A const-correct version of the above. */ + +const char * +skip_spaces (const char *chp) +{ + if (chp == NULL) + return NULL; + while (*chp && isspace (*chp)) + chp++; + return chp; +} + +/* See documentation in common-utils.h. */ + +const char * +skip_to_space (const char *chp) +{ + if (chp == NULL) + return NULL; + while (*chp && !isspace (*chp)) + chp++; + return chp; +} + +/* See documentation in common-utils.h. */ + +char * +skip_to_space (char *chp) +{ + return (char *) skip_to_space ((const char *) chp); +} + +/* See gdbsupport/common-utils.h. */ + +void +free_vector_argv (std::vector<char *> &v) +{ + for (char *el : v) + xfree (el); + + v.clear (); +} + +/* See gdbsupport/common-utils.h. */ + +ULONGEST +align_up (ULONGEST v, int n) +{ + /* Check that N is really a power of two. */ + gdb_assert (n && (n & (n-1)) == 0); + return (v + n - 1) & -n; +} + +/* See gdbsupport/common-utils.h. */ + +ULONGEST +align_down (ULONGEST v, int n) +{ + /* Check that N is really a power of two. */ + gdb_assert (n && (n & (n-1)) == 0); + return (v & -n); +} diff -Nru gdb-9.1/gdbsupport/common-utils.h gdb-10.2/gdbsupport/common-utils.h --- gdb-9.1/gdbsupport/common-utils.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/common-utils.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,198 @@ +/* Shared general utility routines for GDB, the GNU debugger. + + Copyright (C) 1986-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef COMMON_COMMON_UTILS_H +#define COMMON_COMMON_UTILS_H + +#include <string> +#include <vector> + +#include "poison.h" + +/* If possible, define FUNCTION_NAME, a macro containing the name of + the function being defined. Since this macro may not always be + defined, all uses must be protected by appropriate macro definition + checks (Eg: "#ifdef FUNCTION_NAME"). + + Version 2.4 and later of GCC define a magical variable `__PRETTY_FUNCTION__' + which contains the name of the function currently being defined. + This is broken in G++ before version 2.6. + C9x has a similar variable called __func__, but prefer the GCC one since + it demangles C++ function names. */ +#if (GCC_VERSION >= 2004) +#define FUNCTION_NAME __PRETTY_FUNCTION__ +#else +#if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L +#define FUNCTION_NAME __func__ /* ARI: func */ +#endif +#endif + +#include "gdb_string_view.h" + +/* xmalloc(), xrealloc() and xcalloc() have already been declared in + "libiberty.h". */ + +/* Like xmalloc, but zero the memory. */ +void *xzalloc (size_t); + +template <typename T> +static void +xfree (T *ptr) +{ + static_assert (IsFreeable<T>::value, "Trying to use xfree with a non-POD \ +data type. Use operator delete instead."); + + if (ptr != NULL) + free (ptr); /* ARI: free */ +} + + +/* Like asprintf and vasprintf, but return the string, throw an error + if no memory. */ +char *xstrprintf (const char *format, ...) ATTRIBUTE_PRINTF (1, 2); +char *xstrvprintf (const char *format, va_list ap) + ATTRIBUTE_PRINTF (1, 0); + +/* Like snprintf, but throw an error if the output buffer is too small. */ +int xsnprintf (char *str, size_t size, const char *format, ...) + ATTRIBUTE_PRINTF (3, 4); + +/* Returns a std::string built from a printf-style format string. */ +std::string string_printf (const char* fmt, ...) + ATTRIBUTE_PRINTF (1, 2); + +/* Like string_printf, but takes a va_list. */ +std::string string_vprintf (const char* fmt, va_list args) + ATTRIBUTE_PRINTF (1, 0); + +/* Like string_printf, but appends to DEST instead of returning a new + std::string. */ +void string_appendf (std::string &dest, const char* fmt, ...) + ATTRIBUTE_PRINTF (2, 3); + +/* Like string_appendf, but takes a va_list. */ +void string_vappendf (std::string &dest, const char* fmt, va_list args) + ATTRIBUTE_PRINTF (2, 0); + +/* Make a copy of the string at PTR with LEN characters + (and add a null character at the end in the copy). + Uses malloc to get the space. Returns the address of the copy. */ + +char *savestring (const char *ptr, size_t len); + +/* Extract the next word from ARG. The next word is defined as either, + everything up to the next space, or, if the next word starts with either + a single or double quote, then everything up to the closing quote. The + enclosing quotes are not returned in the result string. The pointer in + ARG is updated to point to the first character after the end of the + word, or, for quoted words, the first character after the closing + quote. */ + +std::string extract_string_maybe_quoted (const char **arg); + +/* The strerror() function can return NULL for errno values that are + out of range. Provide a "safe" version that always returns a + printable string. This version is also thread-safe. */ + +extern const char *safe_strerror (int); + +/* Return true if the start of STRING matches PATTERN, false otherwise. */ + +static inline bool +startswith (const char *string, const char *pattern) +{ + return strncmp (string, pattern, strlen (pattern)) == 0; +} + +/* Version of startswith that takes string_view arguments. See comment + above. */ + +static inline bool +startswith (gdb::string_view string, gdb::string_view pattern) +{ + return (string.length () >= pattern.length () + && strncmp (string.data (), pattern.data (), pattern.length ()) == 0); +} + +ULONGEST strtoulst (const char *num, const char **trailer, int base); + +/* Skip leading whitespace characters in INP, returning an updated + pointer. If INP is NULL, return NULL. */ + +extern char *skip_spaces (char *inp); + +/* A const-correct version of the above. */ + +extern const char *skip_spaces (const char *inp); + +/* Skip leading non-whitespace characters in INP, returning an updated + pointer. If INP is NULL, return NULL. */ + +extern char *skip_to_space (char *inp); + +/* A const-correct version of the above. */ + +extern const char *skip_to_space (const char *inp); + +/* Assumes that V is an argv for a program, and iterates through + freeing all the elements. */ +extern void free_vector_argv (std::vector<char *> &v); + +/* Return true if VALUE is in [LOW, HIGH]. */ + +template <typename T> +static bool +in_inclusive_range (T value, T low, T high) +{ + return value >= low && value <= high; +} + +/* Ensure that V is aligned to an N byte boundary (B's assumed to be a + power of 2). Round up/down when necessary. Examples of correct + use include: + + addr = align_up (addr, 8); -- VALUE needs 8 byte alignment + write_memory (addr, value, len); + addr += len; + + and: + + sp = align_down (sp - len, 16); -- Keep SP 16 byte aligned + write_memory (sp, value, len); + + Note that uses such as: + + write_memory (addr, value, len); + addr += align_up (len, 8); + + and: + + sp -= align_up (len, 8); + write_memory (sp, value, len); + + are typically not correct as they don't ensure that the address (SP + or ADDR) is correctly aligned (relying on previous alignment to + keep things right). This is also why the methods are called + "align_..." instead of "round_..." as the latter reads better with + this incorrect coding style. */ + +extern ULONGEST align_up (ULONGEST v, int n); +extern ULONGEST align_down (ULONGEST v, int n); + +#endif /* COMMON_COMMON_UTILS_H */ diff -Nru gdb-9.1/gdbsupport/config.in gdb-10.2/gdbsupport/config.in --- gdb-9.1/gdbsupport/config.in 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/config.in 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,425 @@ +/* config.in. Generated from configure.ac by autoheader. */ + +/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP + systems. This function is required for `alloca.c' support on those systems. + */ +#undef CRAY_STACKSEG_END + +/* Define to 1 if std::thread works. */ +#undef CXX_STD_THREAD + +/* Define to 1 if using `alloca.c'. */ +#undef C_ALLOCA + +/* Define to 1 if translation of program messages to the user's native + language is requested. */ +#undef ENABLE_NLS + +/* Define if self-testing features should be enabled */ +#undef GDB_SELF_TEST + +/* Define to 1 if you have `alloca', as a function or macro. */ +#undef HAVE_ALLOCA + +/* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix). + */ +#undef HAVE_ALLOCA_H + +/* define if the compiler supports basic C++11 syntax */ +#undef HAVE_CXX11 + +/* Define to 1 if you have the declaration of `ADDR_NO_RANDOMIZE', and to 0 if + you don't. */ +#undef HAVE_DECL_ADDR_NO_RANDOMIZE + +/* Define to 1 if you have the declaration of `asprintf', and to 0 if you + don't. */ +#undef HAVE_DECL_ASPRINTF + +/* Define to 1 if you have the declaration of `basename(char *)', and to 0 if + you don't. */ +#undef HAVE_DECL_BASENAME + +/* Define to 1 if you have the declaration of `ffs', and to 0 if you don't. */ +#undef HAVE_DECL_FFS + +/* Define to 1 if you have the declaration of `snprintf', and to 0 if you + don't. */ +#undef HAVE_DECL_SNPRINTF + +/* Define to 1 if you have the declaration of `strstr', and to 0 if you don't. + */ +#undef HAVE_DECL_STRSTR + +/* Define to 1 if you have the declaration of `strtol', and to 0 if you don't. + */ +#undef HAVE_DECL_STRTOL + +/* Define to 1 if you have the declaration of `strtoll', and to 0 if you + don't. */ +#undef HAVE_DECL_STRTOLL + +/* Define to 1 if you have the declaration of `strtoul', and to 0 if you + don't. */ +#undef HAVE_DECL_STRTOUL + +/* Define to 1 if you have the declaration of `strtoull', and to 0 if you + don't. */ +#undef HAVE_DECL_STRTOULL + +/* Define to 1 if you have the declaration of `strverscmp', and to 0 if you + don't. */ +#undef HAVE_DECL_STRVERSCMP + +/* Define to 1 if you have the declaration of `vasprintf', and to 0 if you + don't. */ +#undef HAVE_DECL_VASPRINTF + +/* Define to 1 if you have the declaration of `vsnprintf', and to 0 if you + don't. */ +#undef HAVE_DECL_VSNPRINTF + +/* Define to 1 if you have the <dlfcn.h> header file. */ +#undef HAVE_DLFCN_H + +/* Define if <sys/procfs.h> has elf_fpregset_t. */ +#undef HAVE_ELF_FPREGSET_T + +/* Define to 1 if you have the `fdwalk' function. */ +#undef HAVE_FDWALK + +/* Define to 1 if you have the `fork' function. */ +#undef HAVE_FORK + +/* Define if <sys/procfs.h> has fpregset_t. */ +#undef HAVE_FPREGSET_T + +/* Define to 1 if you have the `getauxval' function. */ +#undef HAVE_GETAUXVAL + +/* Define to 1 if you have the `getpagesize' function. */ +#undef HAVE_GETPAGESIZE + +/* Define to 1 if you have the `getrlimit' function. */ +#undef HAVE_GETRLIMIT + +/* Define to 1 if you have the `getrusage' function. */ +#undef HAVE_GETRUSAGE + +/* Define if <sys/procfs.h> has gregset_t. */ +#undef HAVE_GREGSET_T + +/* Define to 1 if you have the <inttypes.h> header file. */ +#undef HAVE_INTTYPES_H + +/* Define to 1 if your system has the kinfo_getfile function. */ +#undef HAVE_KINFO_GETFILE + +/* Define if you have <langinfo.h> and nl_langinfo(CODESET). */ +#undef HAVE_LANGINFO_CODESET + +/* Define if you have the ipt library. */ +#undef HAVE_LIBIPT + +/* Define to 1 if you have the <linux/elf.h> header file. */ +#undef HAVE_LINUX_ELF_H + +/* Define to 1 if you have the <linux/perf_event.h> header file. */ +#undef HAVE_LINUX_PERF_EVENT_H + +/* Define to 1 if you have the <locale.h> header file. */ +#undef HAVE_LOCALE_H + +/* Define to 1 if the system has the type `long long'. */ +#undef HAVE_LONG_LONG + +/* Define if <sys/procfs.h> has lwpid_t. */ +#undef HAVE_LWPID_T + +/* Define to 1 if you have the <memory.h> header file. */ +#undef HAVE_MEMORY_H + +/* Define to 1 if you have a working `mmap' system call. */ +#undef HAVE_MMAP + +/* Define if you support the personality syscall. */ +#undef HAVE_PERSONALITY + +/* Define to 1 if you have the `pipe' function. */ +#undef HAVE_PIPE + +/* Define to 1 if you have the `pipe2' function. */ +#undef HAVE_PIPE2 + +/* Define to 1 if you have the `poll' function. */ +#undef HAVE_POLL + +/* Define to 1 if you have the <poll.h> header file. */ +#undef HAVE_POLL_H + +/* Define if <sys/procfs.h> has prfpregset_t. */ +#undef HAVE_PRFPREGSET_T + +/* Define if <sys/procfs.h> has prgregset32_t. */ +#undef HAVE_PRGREGSET32_T + +/* Define if <sys/procfs.h> has prgregset_t. */ +#undef HAVE_PRGREGSET_T + +/* Define to 1 if you have the <proc_service.h> header file. */ +#undef HAVE_PROC_SERVICE_H + +/* Define if <sys/procfs.h> has psaddr_t. */ +#undef HAVE_PSADDR_T + +/* Have PTHREAD_PRIO_INHERIT. */ +#undef HAVE_PTHREAD_PRIO_INHERIT + +/* Define to 1 if you have the `pthread_setname_np' function. */ +#undef HAVE_PTHREAD_SETNAME_NP + +/* Define to 1 if you have the `pthread_sigmask' function. */ +#undef HAVE_PTHREAD_SIGMASK + +/* Define to 1 if you have the `ptrace64' function. */ +#undef HAVE_PTRACE64 + +/* Define to 1 if you have the <ptrace.h> header file. */ +#undef HAVE_PTRACE_H + +/* Define to 1 if you have the `pt_insn_event' function. */ +#undef HAVE_PT_INSN_EVENT + +/* Define to 1 if you have the `sbrk' function. */ +#undef HAVE_SBRK + +/* Define to 1 if you have the `setns' function. */ +#undef HAVE_SETNS + +/* Define to 1 if you have the `setpgid' function. */ +#undef HAVE_SETPGID + +/* Define to 1 if you have the `setpgrp' function. */ +#undef HAVE_SETPGRP + +/* Define to 1 if you have the `sigaction' function. */ +#undef HAVE_SIGACTION + +/* Define to 1 if you have the `sigaltstack' function. */ +#undef HAVE_SIGALTSTACK + +/* Define to 1 if you have the <signal.h> header file. */ +#undef HAVE_SIGNAL_H + +/* Define to 1 if you have the `sigprocmask' function. */ +#undef HAVE_SIGPROCMASK + +/* Define if sigsetjmp is available. */ +#undef HAVE_SIGSETJMP + +/* Define to 1 if you have the `socketpair' function. */ +#undef HAVE_SOCKETPAIR + +/* Define to 1 if you have the <stdint.h> header file. */ +#undef HAVE_STDINT_H + +/* Define to 1 if you have the <stdlib.h> header file. */ +#undef HAVE_STDLIB_H + +/* Define to 1 if you have the <strings.h> header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the <string.h> header file. */ +#undef HAVE_STRING_H + +/* Define to 1 if `enabled' is a member of `struct pt_insn'. */ +#undef HAVE_STRUCT_PT_INSN_ENABLED + +/* Define to 1 if `resynced' is a member of `struct pt_insn'. */ +#undef HAVE_STRUCT_PT_INSN_RESYNCED + +/* Define to 1 if `st_blksize' is a member of `struct stat'. */ +#undef HAVE_STRUCT_STAT_ST_BLKSIZE + +/* Define to 1 if `st_blocks' is a member of `struct stat'. */ +#undef HAVE_STRUCT_STAT_ST_BLOCKS + +/* Define to 1 if you have the <sys/param.h> header file. */ +#undef HAVE_SYS_PARAM_H + +/* Define to 1 if you have the <sys/poll.h> header file. */ +#undef HAVE_SYS_POLL_H + +/* Define to 1 if you have the <sys/procfs.h> header file. */ +#undef HAVE_SYS_PROCFS_H + +/* Define to 1 if you have the <sys/ptrace.h> header file. */ +#undef HAVE_SYS_PTRACE_H + +/* Define to 1 if you have the <sys/resource.h> header file. */ +#undef HAVE_SYS_RESOURCE_H + +/* Define to 1 if you have the <sys/select.h> header file. */ +#undef HAVE_SYS_SELECT_H + +/* Define to 1 if you have the <sys/socket.h> header file. */ +#undef HAVE_SYS_SOCKET_H + +/* Define to 1 if you have the <sys/stat.h> header file. */ +#undef HAVE_SYS_STAT_H + +/* Define to 1 if you have the <sys/types.h> header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define to 1 if you have the <sys/un.h> header file. */ +#undef HAVE_SYS_UN_H + +/* Define to 1 if you have the <sys/wait.h> header file. */ +#undef HAVE_SYS_WAIT_H + +/* Define to 1 if you have the <termios.h> header file. */ +#undef HAVE_TERMIOS_H + +/* Define to 1 if you have the <thread_db.h> header file. */ +#undef HAVE_THREAD_DB_H + +/* Define to 1 if you have the <unistd.h> header file. */ +#undef HAVE_UNISTD_H + +/* Define to 1 if you have the `vfork' function. */ +#undef HAVE_VFORK + +/* Define to 1 if you have the <vfork.h> header file. */ +#undef HAVE_VFORK_H + +/* Define to 1 if you have the <wait.h> header file. */ +#undef HAVE_WAIT_H + +/* Define to 1 if you have the <windows.h> header file. */ +#undef HAVE_WINDOWS_H + +/* Define to 1 if `fork' works. */ +#undef HAVE_WORKING_FORK + +/* Define to 1 if `vfork' works. */ +#undef HAVE_WORKING_VFORK + +/* Name of package */ +#undef PACKAGE + +/* Define to the address where bug reports for this package should be sent. */ +#undef PACKAGE_BUGREPORT + +/* Define to the full name of this package. */ +#undef PACKAGE_NAME + +/* Define to the full name and version of this package. */ +#undef PACKAGE_STRING + +/* Define to the one symbol short name of this package. */ +#undef PACKAGE_TARNAME + +/* Define to the home page for this package. */ +#undef PACKAGE_URL + +/* Define to the version of this package. */ +#undef PACKAGE_VERSION + +/* Define to necessary symbol if this constant uses a non-standard name on + your system. */ +#undef PTHREAD_CREATE_JOINABLE + +/* Define to the type of arg 1 for ptrace. */ +#undef PTRACE_TYPE_ARG1 + +/* Define to the type of arg 3 for ptrace. */ +#undef PTRACE_TYPE_ARG3 + +/* Define to the type of arg 4 for ptrace. */ +#undef PTRACE_TYPE_ARG4 + +/* Define to the type of arg 5 for ptrace. */ +#undef PTRACE_TYPE_ARG5 + +/* Define as the return type of ptrace. */ +#undef PTRACE_TYPE_RET + +/* The size of `long long', as computed by sizeof. */ +#undef SIZEOF_LONG_LONG + +/* If using the C implementation of alloca, define if you know the + direction of stack growth for your system; otherwise it will be + automatically deduced at runtime. + STACK_DIRECTION > 0 => grows toward higher addresses + STACK_DIRECTION < 0 => grows toward lower addresses + STACK_DIRECTION = 0 => direction of growth unknown */ +#undef STACK_DIRECTION + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Define to the word size for the target. */ +#undef TARGET_WORD_SIZE + +/* Enable extensions on AIX 3, Interix. */ +#ifndef _ALL_SOURCE +# undef _ALL_SOURCE +#endif +/* Enable GNU extensions on systems that have them. */ +#ifndef _GNU_SOURCE +# undef _GNU_SOURCE +#endif +/* Enable threading extensions on Solaris. */ +#ifndef _POSIX_PTHREAD_SEMANTICS +# undef _POSIX_PTHREAD_SEMANTICS +#endif +/* Enable extensions on HP NonStop. */ +#ifndef _TANDEM_SOURCE +# undef _TANDEM_SOURCE +#endif +/* Enable general extensions on Solaris. */ +#ifndef __EXTENSIONS__ +# undef __EXTENSIONS__ +#endif + + +/* Define if we should use the Windows API, instead of the POSIX API. On + Windows, we use the Windows API when building for MinGW, but the POSIX API + when building for Cygwin. */ +#undef USE_WIN32API + +/* Version number of package */ +#undef VERSION + +/* Enable large inode numbers on Mac OS X 10.5. */ +#ifndef _DARWIN_USE_64_BIT_INODE +# define _DARWIN_USE_64_BIT_INODE 1 +#endif + +/* Number of bits in a file offset, on hosts where this is settable. */ +#undef _FILE_OFFSET_BITS + +/* Define for large files, on AIX-style hosts. */ +#undef _LARGE_FILES + +/* Define to 1 if on MINIX. */ +#undef _MINIX + +/* Define to 2 if the system does not provide POSIX.1 features except with + this defined. */ +#undef _POSIX_1_SOURCE + +/* Define to 1 if you need to in order for `stat' and other things to work. */ +#undef _POSIX_SOURCE + +/* Use structured /proc on Solaris. */ +#undef _STRUCTURED_PROC + +/* Define to `int' if <sys/types.h> does not define. */ +#undef pid_t + +/* Define to `unsigned int' if <sys/types.h> does not define. */ +#undef size_t + +/* Define as `fork' if `vfork' does not work. */ +#undef vfork diff -Nru gdb-9.1/gdbsupport/configure gdb-10.2/gdbsupport/configure --- gdb-9.1/gdbsupport/configure 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/configure 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,12546 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.69 for gdbsupport 1.0. +# +# +# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. +# +# +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +# Use a proper internal environment variable to ensure we don't fall + # into an infinite loop, continuously re-executing ourselves. + if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then + _as_can_reexec=no; export _as_can_reexec; + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +as_fn_exit 255 + fi + # We don't want this to propagate to other subprocesses. + { _as_can_reexec=; unset _as_can_reexec;} +if test "x$CONFIG_SHELL" = x; then + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } + +exitcode=0 +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : + +else + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1 +test -x / || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 +test \$(( 1 + 1 )) = 2 || exit 1" + if (eval "$as_required") 2>/dev/null; then : + as_have_required=yes +else + as_have_required=no +fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + as_found=: + case $as_dir in #( + /*) + for as_base in sh bash ksh sh5; do + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + break 2 +fi +fi + done;; + esac + as_found=false +done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } +IFS=$as_save_IFS + + + if test "x$CONFIG_SHELL" != x; then : + export CONFIG_SHELL + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +exit 255 +fi + + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." + else + $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, +$0: including any error possibly output before this +$0: message. Then install a modern shell, or manually run +$0: the script under such a shell if you do have one." + fi + exit 1 +fi +fi +fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS + +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + + + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + + # If we had to re-execute with $CONFIG_SHELL, we're ensured to have + # already done that, so ensure we don't try to do so again and fall + # in an infinite loop. This has already happened in practice. + _as_can_reexec=no; export _as_can_reexec + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' + fi +else + as_ln_s='cp -pR' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +as_test_x='test -x' +as_executable_p=as_fn_executable_p + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +test -n "$DJDIR" || exec 7<&0 </dev/null +exec 6>&1 + +# Name of the host. +# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_clean_files= +ac_config_libobj_dir=. +LIBOBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= + +# Identity of this package. +PACKAGE_NAME='gdbsupport' +PACKAGE_TARNAME='gdbsupport' +PACKAGE_VERSION='1.0' +PACKAGE_STRING='gdbsupport 1.0' +PACKAGE_BUGREPORT='' +PACKAGE_URL='' + +ac_unique_file="common-defs.h" +# Factoring default headers for most tests. +ac_includes_default="\ +#include <stdio.h> +#ifdef HAVE_SYS_TYPES_H +# include <sys/types.h> +#endif +#ifdef HAVE_SYS_STAT_H +# include <sys/stat.h> +#endif +#ifdef STDC_HEADERS +# include <stdlib.h> +# include <stddef.h> +#else +# ifdef HAVE_STDLIB_H +# include <stdlib.h> +# endif +#endif +#ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H +# include <memory.h> +# endif +# include <string.h> +#endif +#ifdef HAVE_STRINGS_H +# include <strings.h> +#endif +#ifdef HAVE_INTTYPES_H +# include <inttypes.h> +#endif +#ifdef HAVE_STDINT_H +# include <stdint.h> +#endif +#ifdef HAVE_UNISTD_H +# include <unistd.h> +#endif" + +ac_header_list= +ac_subst_vars='am__EXEEXT_FALSE +am__EXEEXT_TRUE +LTLIBOBJS +LIBOBJS +WERROR_CFLAGS +WARN_CFLAGS +SELFTEST_FALSE +SELFTEST_TRUE +LTLIBIPT +LIBIPT +HAVE_LIBIPT +PTHREAD_CFLAGS +PTHREAD_LIBS +PTHREAD_CC +ax_pthread_config +SED +ALLOCA +CATOBJEXT +GENCAT +INSTOBJEXT +DATADIRNAME +CATALOGS +POSUB +GMSGFMT +XGETTEXT +INCINTL +LIBINTL_DEP +LIBINTL +USE_NLS +CXX_DIALECT +HAVE_CXX11 +LARGEFILE_CPPFLAGS +EGREP +GREP +CPP +RANLIB +am__fastdepCXX_FALSE +am__fastdepCXX_TRUE +CXXDEPMODE +ac_ct_CXX +CXXFLAGS +CXX +am__fastdepCC_FALSE +am__fastdepCC_TRUE +CCDEPMODE +am__nodep +AMDEPBACKSLASH +AMDEP_FALSE +AMDEP_TRUE +am__quote +am__include +DEPDIR +OBJEXT +EXEEXT +ac_ct_CC +CPPFLAGS +LDFLAGS +CFLAGS +CC +AM_BACKSLASH +AM_DEFAULT_VERBOSITY +AM_DEFAULT_V +AM_V +am__untar +am__tar +AMTAR +am__leading_dot +SET_MAKE +AWK +mkdir_p +MKDIR_P +INSTALL_STRIP_PROGRAM +STRIP +install_sh +MAKEINFO +AUTOHEADER +AUTOMAKE +AUTOCONF +ACLOCAL +VERSION +PACKAGE +CYGPATH_W +am__isrc +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM +MAINT +MAINTAINER_MODE_FALSE +MAINTAINER_MODE_TRUE +target_os +target_vendor +target_cpu +target +host_os +host_vendor +host_cpu +host +build_os +build_vendor +build_cpu +build +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_URL +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' +ac_subst_files='' +ac_user_opts=' +enable_option_checking +enable_maintainer_mode +enable_silent_rules +enable_dependency_tracking +enable_plugins +enable_largefile +with_intel_pt +with_gnu_ld +enable_rpath +with_libipt_prefix +with_libipt_type +enable_unit_tests +enable_werror +enable_build_warnings +enable_gdb_build_warnings +' + ac_precious_vars='build_alias +host_alias +target_alias +CC +CFLAGS +LDFLAGS +LIBS +CPPFLAGS +CXX +CXXFLAGS +CCC +CPP' + + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datarootdir='${prefix}/share' +datadir='${datarootdir}' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +includedir='${prefix}/include' +oldincludedir='/usr/include' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' + +ac_prev= +ac_dashdash= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval $ac_prev=\$ac_option + ac_prev= + continue + fi + + case $ac_option in + *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *=) ac_optarg= ;; + *) ac_optarg=yes ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=*) + datadir=$ac_optarg ;; + + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=\$ac_optarg ;; + + -without-* | --without-*) + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) as_fn_error $? "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information" + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + case $ac_envvar in #( + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; + esac + eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + as_fn_error $? "missing argument to $ac_option" +fi + +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + esac +fi + +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir +do + eval ac_val=\$$ac_var + # Remove trailing slashes. + case $ac_val in + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; + esac + # Be sure to have absolute directory names. + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + as_fn_error $? "working directory cannot be determined" +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + as_fn_error $? "pwd does not report name of working directory" + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures gdbsupport 1.0 to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking ...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root [DATAROOTDIR/doc/gdbsupport] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] +_ACEOF + + cat <<\_ACEOF + +Program names: + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM run sed PROGRAM on installed program names + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] + --target=TARGET configure for building compilers for TARGET [HOST] +_ACEOF +fi + +if test -n "$ac_init_help"; then + case $ac_init_help in + short | recursive ) echo "Configuration of gdbsupport 1.0:";; + esac + cat <<\_ACEOF + +Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --enable-maintainer-mode + enable make rules and dependencies not useful (and + sometimes confusing) to the casual installer + --enable-silent-rules less verbose build output (undo: "make V=1") + --disable-silent-rules verbose build output (undo: "make V=0") + --enable-dependency-tracking + do not reject slow dependency extractors + --disable-dependency-tracking + speeds up one-time build + --enable-plugins Enable support for plugins + --disable-largefile omit support for large files + --disable-rpath do not hardcode runtime library paths + --enable-unit-tests Enable the inclusion of unit tests when compiling + GDB + --enable-werror treat compile warnings as errors + --enable-build-warnings enable build-time compiler warnings if gcc is used + --enable-gdb-build-warnings + enable GDB specific build-time compiler warnings if + gcc is used + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-intel-pt include Intel Processor Trace support (auto/yes/no) + --with-gnu-ld assume the C compiler uses GNU ld default=no + --with-libipt-prefix[=DIR] search for libipt in DIR/include and DIR/lib + --without-libipt-prefix don't search for libipt in includedir and libdir + --with-libipt-type=TYPE type of library to search for (auto/static/shared) + +Some influential environment variables: + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a + nonstandard directory <lib dir> + LIBS libraries to pass to the linker, e.g. -l<library> + CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if + you have headers in a nonstandard directory <include dir> + CXX C++ compiler command + CXXFLAGS C++ compiler flags + CPP C preprocessor + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +Report bugs to the package provider. +_ACEOF +ac_status=$? +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for guested configure. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive + else + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } + done +fi + +test -n "$ac_init_help" && exit $ac_status +if $ac_init_version; then + cat <<\_ACEOF +gdbsupport configure 1.0 +generated by GNU Autoconf 2.69 + +Copyright (C) 2012 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit +fi + +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## + +# ac_fn_c_try_compile LINENO +# -------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_compile + +# ac_fn_cxx_try_compile LINENO +# ---------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_cxx_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_cxx_try_compile + +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_cpp + +# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists, giving a warning if it cannot be compiled using +# the include files in INCLUDES and setting the cache variable VAR +# accordingly. +ac_fn_c_check_header_mongrel () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if eval \${$3+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 +$as_echo_n "checking $2 usability... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_header_compiler=yes +else + ac_header_compiler=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 +$as_echo_n "checking $2 presence... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <$2> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + ac_header_preproc=yes +else + ac_header_preproc=no +fi +rm -f conftest.err conftest.i conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( + yes:no: ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; + no:yes:* ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=\$ac_header_compiler" +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_mongrel + +# ac_fn_c_try_run LINENO +# ---------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes +# that executables *can* be run. +ac_fn_c_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_run + +# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists and can be compiled using the include files in +# INCLUDES, setting the cache variable VAR accordingly. +ac_fn_c_check_header_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_compile + +# ac_fn_c_try_link LINENO +# ----------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + test -x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_link + +# ac_fn_c_check_type LINENO TYPE VAR INCLUDES +# ------------------------------------------- +# Tests whether TYPE exists after having included INCLUDES, setting cache +# variable VAR accordingly. +ac_fn_c_check_type () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=no" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +if (sizeof ($2)) + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +if (sizeof (($2))) + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + eval "$3=yes" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_type + +# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES +# -------------------------------------------- +# Tries to find the compile-time value of EXPR in a program that includes +# INCLUDES, setting VAR accordingly. Returns whether the value could be +# computed +ac_fn_c_compute_int () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if test "$cross_compiling" = yes; then + # Depending upon the size, compute the lo and hi bounds. +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) >= 0)]; +test_array [0] = 0; +return test_array [0]; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_lo=0 ac_mid=0 + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) <= $ac_mid)]; +test_array [0] = 0; +return test_array [0]; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_hi=$ac_mid; break +else + as_fn_arith $ac_mid + 1 && ac_lo=$as_val + if test $ac_lo -le $ac_mid; then + ac_lo= ac_hi= + break + fi + as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) < 0)]; +test_array [0] = 0; +return test_array [0]; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_hi=-1 ac_mid=-1 + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) >= $ac_mid)]; +test_array [0] = 0; +return test_array [0]; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_lo=$ac_mid; break +else + as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val + if test $ac_mid -le $ac_hi; then + ac_lo= ac_hi= + break + fi + as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + ac_lo= ac_hi= +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +# Binary search between lo and hi bounds. +while test "x$ac_lo" != "x$ac_hi"; do + as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) <= $ac_mid)]; +test_array [0] = 0; +return test_array [0]; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_hi=$ac_mid +else + as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +done +case $ac_lo in #(( +?*) eval "$3=\$ac_lo"; ac_retval=0 ;; +'') ac_retval=1 ;; +esac + else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +static long int longval () { return $2; } +static unsigned long int ulongval () { return $2; } +#include <stdio.h> +#include <stdlib.h> +int +main () +{ + + FILE *f = fopen ("conftest.val", "w"); + if (! f) + return 1; + if (($2) < 0) + { + long int i = longval (); + if (i != ($2)) + return 1; + fprintf (f, "%ld", i); + } + else + { + unsigned long int i = ulongval (); + if (i != ($2)) + return 1; + fprintf (f, "%lu", i); + } + /* Do not output a trailing newline, as this causes \r\n confusion + on some platforms. */ + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + echo >>conftest.val; read $3 <conftest.val; ac_retval=0 +else + ac_retval=1 +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f conftest.val + + fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_compute_int + +# ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES +# --------------------------------------------- +# Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR +# accordingly. +ac_fn_c_check_decl () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + as_decl_name=`echo $2|sed 's/ *(.*//'` + as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'` + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5 +$as_echo_n "checking whether $as_decl_name is declared... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +#ifndef $as_decl_name +#ifdef __cplusplus + (void) $as_decl_use; +#else + (void) $as_decl_name; +#endif +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_decl + +# ac_fn_c_check_func LINENO FUNC VAR +# ---------------------------------- +# Tests whether FUNC exists, setting the cache variable VAR accordingly +ac_fn_c_check_func () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case <limits.h> declares $2. + For example, HP-UX 11i <limits.h> declares gettimeofday. */ +#define $2 innocuous_$2 + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $2 (); below. + Prefer <limits.h> to <assert.h> if __STDC__ is defined, since + <limits.h> exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include <limits.h> +#else +# include <assert.h> +#endif + +#undef $2 + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $2 (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$2 || defined __stub___$2 +choke me +#endif + +int +main () +{ +return $2 (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_func + +# ac_fn_c_check_member LINENO AGGR MEMBER VAR INCLUDES +# ---------------------------------------------------- +# Tries to find if the field MEMBER exists in type AGGR, after including +# INCLUDES, setting cache variable VAR accordingly. +ac_fn_c_check_member () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5 +$as_echo_n "checking for $2.$3... " >&6; } +if eval \${$4+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$5 +int +main () +{ +static $2 ac_aggr; +if (ac_aggr.$3) +return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$4=yes" +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$5 +int +main () +{ +static $2 ac_aggr; +if (sizeof ac_aggr.$3) +return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$4=yes" +else + eval "$4=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$4 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_member + +# ac_fn_cxx_try_link LINENO +# ------------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_cxx_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + test -x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_cxx_try_link + +# ac_fn_cxx_check_func LINENO FUNC VAR +# ------------------------------------ +# Tests whether FUNC exists, setting the cache variable VAR accordingly +ac_fn_cxx_check_func () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case <limits.h> declares $2. + For example, HP-UX 11i <limits.h> declares gettimeofday. */ +#define $2 innocuous_$2 + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $2 (); below. + Prefer <limits.h> to <assert.h> if __STDC__ is defined, since + <limits.h> exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include <limits.h> +#else +# include <assert.h> +#endif + +#undef $2 + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $2 (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$2 || defined __stub___$2 +choke me +#endif + +int +main () +{ +return $2 (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_cxx_check_func +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 gdbsupport $as_me 1.0, which was +generated by GNU Autoconf 2.69. Invocation command line was + + $ $0 $@ + +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + $as_echo "PATH: $as_dir" + done +IFS=$as_save_IFS + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *\'*) + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; + 2) + as_fn_append ac_configure_args1 " '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + as_fn_append ac_configure_args " '$ac_arg'" + ;; + esac + done +done +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + $as_echo "## ---------------- ## +## Cache variables. ## +## ---------------- ##" + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + $as_echo "## ----------------- ## +## Output variables. ## +## ----------------- ##" + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + $as_echo "## ------------------- ## +## File substitutions. ## +## ------------------- ##" + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + $as_echo "## ----------- ## +## confdefs.h. ## +## ----------- ##" + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status +' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +$as_echo "/* confdefs.h */" > confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_URL "$PACKAGE_URL" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + # We do not want a PATH search for config.site. + case $CONFIG_SITE in #(( + -*) ac_site_file1=./$CONFIG_SITE;; + */*) ac_site_file1=$CONFIG_SITE;; + *) ac_site_file1=./$CONFIG_SITE;; + esac +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site +fi +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue + if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" \ + || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "failed to load site script $ac_site_file +See \`config.log' for more details" "$LINENO" 5; } + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special files + # actually), so we avoid doing that. DJGPP emulates it as a regular file. + if test /dev/null != "$cache_file" && test -f "$cache_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +as_fn_append ac_header_list " stdlib.h" +as_fn_append ac_header_list " unistd.h" +as_fn_append ac_header_list " sys/param.h" +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) as_fn_append ac_configure_args " '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 +fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + + + + +ac_config_headers="$ac_config_headers config.h:config.in" + +ac_aux_dir= +for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 +fi + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + + +# Make sure we can run config.sub. +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if ${ac_cv_build+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; +esac +build=$ac_cv_build +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if ${ac_cv_host+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build +else + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; +esac +host=$ac_cv_host +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5 +$as_echo_n "checking target system type... " >&6; } +if ${ac_cv_target+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "x$target_alias" = x; then + ac_cv_target=$ac_cv_host +else + ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5 +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5 +$as_echo "$ac_cv_target" >&6; } +case $ac_cv_target in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical target" "$LINENO" 5;; +esac +target=$ac_cv_target +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_target +shift +target_cpu=$1 +target_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +target_os=$* +IFS=$ac_save_IFS +case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac + + +# The aliases save the names the user supplied, while $host etc. +# will get canonicalized. +test -n "$target_alias" && + test "$program_prefix$program_suffix$program_transform_name" = \ + NONENONEs,x,x, && + program_prefix=${target_alias}- + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 +$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } + # Check whether --enable-maintainer-mode was given. +if test "${enable_maintainer_mode+set}" = set; then : + enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval +else + USE_MAINTAINER_MODE=no +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 +$as_echo "$USE_MAINTAINER_MODE" >&6; } + if test $USE_MAINTAINER_MODE = yes; then + MAINTAINER_MODE_TRUE= + MAINTAINER_MODE_FALSE='#' +else + MAINTAINER_MODE_TRUE='#' + MAINTAINER_MODE_FALSE= +fi + + MAINT=$MAINTAINER_MODE_TRUE + + +ac_aux_dir= +for ac_dir in .. "$srcdir"/..; do + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + as_fn_error $? "cannot find install-sh, install.sh, or shtool in .. \"$srcdir\"/.." "$LINENO" 5 +fi + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + + +am__api_version='1.15' + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } +if test -z "$INSTALL"; then +if ${ac_cv_path_install+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in #(( + ./ | .// | /[cC]/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + fi + done + done + ;; +esac + + done +IFS=$as_save_IFS + +rm -rf conftest.one conftest.two conftest.dir + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 +$as_echo_n "checking whether build environment is sane... " >&6; } +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[\\\"\#\$\&\'\`$am_lf]*) + as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; +esac +case $srcdir in + *[\\\"\#\$\&\'\`$am_lf\ \ ]*) + as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; +esac + +# Do 'set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + am_has_slept=no + for am_try in 1 2; do + echo "timestamp, slept: $am_has_slept" > conftest.file + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + if test "$*" != "X $srcdir/configure conftest.file" \ + && test "$*" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + as_fn_error $? "ls -t appears to fail. Make sure there is not a broken + alias in your environment" "$LINENO" 5 + fi + if test "$2" = conftest.file || test $am_try -eq 2; then + break + fi + # Just in case. + sleep 1 + am_has_slept=yes + done + test "$2" = conftest.file + ) +then + # Ok. + : +else + as_fn_error $? "newly created file is older than distributed files! +Check your system clock" "$LINENO" 5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +# If we didn't sleep, we still need to ensure time stamps of config.status and +# generated files are strictly newer. +am_sleep_pid= +if grep 'slept: no' conftest.file >/dev/null 2>&1; then + ( sleep 1 ) & + am_sleep_pid=$! +fi + +rm -f conftest.file + +test "$program_prefix" != NONE && + program_transform_name="s&^&$program_prefix&;$program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s&\$&$program_suffix&;$program_transform_name" +# Double any \ or $. +# By default was `s,x,x', remove it if useless. +ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' +program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` + +# Expand $ac_aux_dir to an absolute path. +am_aux_dir=`cd "$ac_aux_dir" && pwd` + +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --is-lightweight"; then + am_missing_run="$MISSING " +else + am_missing_run= + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 +$as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} +fi + +if test x"${install_sh+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi + +# Installed binaries are usually stripped using 'strip' when the user +# run "make install-strip". However 'strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the 'STRIP' environment variable to overrule this program. +if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 +$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } +if test -z "$MKDIR_P"; then + if ${ac_cv_path_mkdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in mkdir gmkdir; do + for ac_exec_ext in '' $ac_executable_extensions; do + as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue + case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( + 'mkdir (GNU coreutils) '* | \ + 'mkdir (coreutils) '* | \ + 'mkdir (fileutils) '4.1*) + ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext + break 3;; + esac + done + done + done +IFS=$as_save_IFS + +fi + + test -d ./--version && rmdir ./--version + if test "${ac_cv_path_mkdir+set}" = set; then + MKDIR_P="$ac_cv_path_mkdir -p" + else + # As a last resort, use the slow shell script. Don't cache a + # value for MKDIR_P within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + MKDIR_P="$ac_install_sh -d" + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 +$as_echo "$MKDIR_P" >&6; } + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AWK+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AWK="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AWK" && break +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat >conftest.make <<\_ACEOF +SHELL = /bin/sh +all: + @echo '@@@%%%=$(MAKE)=@@@%%%' +_ACEOF +# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. +case `${MAKE-make} -f conftest.make 2>/dev/null` in + *@@@%%%=?*=@@@%%%*) + eval ac_cv_prog_make_${ac_make}_set=yes;; + *) + eval ac_cv_prog_make_${ac_make}_set=no;; +esac +rm -f conftest.make +fi +if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + SET_MAKE= +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" +fi + +rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null + +# Check whether --enable-silent-rules was given. +if test "${enable_silent_rules+set}" = set; then : + enableval=$enable_silent_rules; +fi + +case $enable_silent_rules in # ((( + yes) AM_DEFAULT_VERBOSITY=0;; + no) AM_DEFAULT_VERBOSITY=1;; + *) AM_DEFAULT_VERBOSITY=1;; +esac +am_make=${MAKE-make} +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 +$as_echo_n "checking whether $am_make supports nested variables... " >&6; } +if ${am_cv_make_support_nested_variables+:} false; then : + $as_echo_n "(cached) " >&6 +else + if $as_echo 'TRUE=$(BAR$(V)) +BAR0=false +BAR1=true +V=1 +am__doit: + @$(TRUE) +.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then + am_cv_make_support_nested_variables=yes +else + am_cv_make_support_nested_variables=no +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 +$as_echo "$am_cv_make_support_nested_variables" >&6; } +if test $am_cv_make_support_nested_variables = yes; then + AM_V='$(V)' + AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' +else + AM_V=$AM_DEFAULT_VERBOSITY + AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY +fi +AM_BACKSLASH='\' + +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + am__isrc=' -I$(srcdir)' + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi + + +# Define the identity of the package. + PACKAGE='gdbsupport' + VERSION='1.0' + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE "$PACKAGE" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define VERSION "$VERSION" +_ACEOF + +# Some tools Automake needs. + +ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} + + +AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} + + +AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} + + +AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} + + +MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} + +# For better backward compatibility. To be removed once Automake 1.9.x +# dies out for good. For more background, see: +# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html> +# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html> +mkdir_p='$(MKDIR_P)' + +# We need awk for the "check" target (and possibly the TAP driver). The +# system "awk" is bad on some platforms. +# Always define AMTAR for backward compatibility. Yes, it's still used +# in the wild :-( We should find a proper way to deprecate it ... +AMTAR='$${TAR-tar}' + + +# We'll loop over all known methods to create a tar archive until one works. +_am_tools='gnutar pax cpio none' + +am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' + + + + + + +# POSIX will say in a future version that running "rm -f" with no argument +# is OK; and we want to be able to make that assumption in our Makefile +# recipes. So use an aggressive probe to check that the usage we want is +# actually supported "in the wild" to an acceptable degree. +# See automake bug#10828. +# To make any issue more visible, cause the running configure to be aborted +# by default if the 'rm' program in use doesn't match our expectations; the +# user can still override this though. +if rm -f && rm -fr && rm -rf; then : OK; else + cat >&2 <<'END' +Oops! + +Your 'rm' program seems unable to run without file operands specified +on the command line, even when the '-f' option is present. This is contrary +to the behaviour of most rm programs out there, and not conforming with +the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542> + +Please tell bug-automake@gnu.org about your system, including the value +of your $PATH and any error possibly output before this message. This +can help us improve future automake versions. + +END + if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then + echo 'Configuration will proceed anyway, since you have set the' >&2 + echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 + echo >&2 + else + cat >&2 <<'END' +Aborting the configuration process, to ensure you take notice of the issue. + +You can download and install GNU coreutils to get an 'rm' implementation +that behaves properly: <http://www.gnu.org/software/coreutils/>. + +If you want to complete the configuration process using your problematic +'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM +to "yes", and re-run configure. + +END + as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 + fi +fi + +# Check whether --enable-silent-rules was given. +if test "${enable_silent_rules+set}" = set; then : + enableval=$enable_silent_rules; +fi + +case $enable_silent_rules in # ((( + yes) AM_DEFAULT_VERBOSITY=0;; + no) AM_DEFAULT_VERBOSITY=1;; + *) AM_DEFAULT_VERBOSITY=0;; +esac +am_make=${MAKE-make} +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 +$as_echo_n "checking whether $am_make supports nested variables... " >&6; } +if ${am_cv_make_support_nested_variables+:} false; then : + $as_echo_n "(cached) " >&6 +else + if $as_echo 'TRUE=$(BAR$(V)) +BAR0=false +BAR1=true +V=1 +am__doit: + @$(TRUE) +.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then + am_cv_make_support_nested_variables=yes +else + am_cv_make_support_nested_variables=no +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 +$as_echo "$am_cv_make_support_nested_variables" >&6; } +if test $am_cv_make_support_nested_variables = yes; then + AM_V='$(V)' + AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' +else + AM_V=$AM_DEFAULT_VERBOSITY + AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY +fi +AM_BACKSLASH='\' + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5; } + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +$as_echo_n "checking whether the C compiler works... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { { ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. + break;; + * ) + break;; + esac +done +test "$ac_cv_exeext" = no && ac_cv_exeext= + +else + ac_file='' +fi +if test -z "$ac_file"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "C compiler cannot create executables +See \`config.log' for more details" "$LINENO" 5; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +$as_echo_n "checking for C compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +ac_exeext=$ac_cv_exeext + +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest conftest$ac_cv_exeext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdio.h> +int +main () +{ +FILE *f = fopen ("conftest.out", "w"); + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +ac_clean_files="$ac_clean_files conftest.out" +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +if test "$cross_compiling" != yes; then + { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if { ac_try='./conftest$ac_cv_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details" "$LINENO" 5; } + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if ${ac_cv_objext+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of object files: cannot compile +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if ${ac_cv_c_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if ${ac_cv_prog_cc_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdarg.h> +#include <stdio.h> +struct stat; +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 +$as_echo_n "checking whether $CC understands -c and -o together... " >&6; } +if ${am_cv_prog_cc_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF + # Make sure it works both with $CC and with simple cc. + # Following AC_PROG_CC_C_O, we do the test twice because some + # compilers refuse to overwrite an existing .o file with -o, + # though they will create one. + am_cv_prog_cc_c_o=yes + for am_i in 1 2; do + if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 + ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } \ + && test -f conftest2.$ac_objext; then + : OK + else + am_cv_prog_cc_c_o=no + break + fi + done + rm -f core conftest* + unset am_i +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 +$as_echo "$am_cv_prog_cc_c_o" >&6; } +if test "$am_cv_prog_cc_c_o" != yes; then + # Losing compiler, so override with the script. + # FIXME: It is wrong to rewrite CC. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__CC in this case, + # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" + CC="$am_aux_dir/compile $CC" +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +DEPDIR="${am__leading_dot}deps" + +ac_config_commands="$ac_config_commands depfiles" + + +am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 +$as_echo_n "checking for style of include used by $am_make... " >&6; } +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from 'make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 +$as_echo "$_am_result" >&6; } +rm -f confinc confmf + +# Check whether --enable-dependency-tracking was given. +if test "${enable_dependency_tracking+set}" = set; then : + enableval=$enable_dependency_tracking; +fi + +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' + am__nodep='_no' +fi + if test "x$enable_dependency_tracking" != xno; then + AMDEP_TRUE= + AMDEP_FALSE='#' +else + AMDEP_TRUE='#' + AMDEP_FALSE= +fi + + + +depcc="$CC" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if ${am_cv_CC_dependencies_compiler_type+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named 'D' -- because '-MD' means "put the output + # in D". + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with + # Solaris 10 /bin/sh. + echo '/* dummy */' > sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with '-c' and '-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle '-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs. + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # After this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested. + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok '-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +if test -z "$CXX"; then + if test -n "$CCC"; then + CXX=$CCC + else + if test -n "$ac_tool_prefix"; then + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CXX"; then + ac_cv_prog_CXX="$CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CXX=$ac_cv_prog_CXX +if test -n "$CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 +$as_echo "$CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CXX" && break + done +fi +if test -z "$CXX"; then + ac_ct_CXX=$CXX + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CXX"; then + ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CXX="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CXX=$ac_cv_prog_ac_ct_CXX +if test -n "$ac_ct_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 +$as_echo "$ac_ct_CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CXX" && break +done + + if test "x$ac_ct_CXX" = x; then + CXX="g++" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CXX=$ac_ct_CXX + fi +fi + + fi +fi +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 +$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } +if ${ac_cv_cxx_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_cxx_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 +$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GXX=yes +else + GXX= +fi +ac_test_CXXFLAGS=${CXXFLAGS+set} +ac_save_CXXFLAGS=$CXXFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 +$as_echo_n "checking whether $CXX accepts -g... " >&6; } +if ${ac_cv_prog_cxx_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_cxx_werror_flag=$ac_cxx_werror_flag + ac_cxx_werror_flag=yes + ac_cv_prog_cxx_g=no + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +else + CXXFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + +else + ac_cxx_werror_flag=$ac_save_cxx_werror_flag + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cxx_werror_flag=$ac_save_cxx_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 +$as_echo "$ac_cv_prog_cxx_g" >&6; } +if test "$ac_test_CXXFLAGS" = set; then + CXXFLAGS=$ac_save_CXXFLAGS +elif test $ac_cv_prog_cxx_g = yes; then + if test "$GXX" = yes; then + CXXFLAGS="-g -O2" + else + CXXFLAGS="-g" + fi +else + if test "$GXX" = yes; then + CXXFLAGS="-O2" + else + CXXFLAGS= + fi +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +depcc="$CXX" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if ${am_cv_CXX_dependencies_compiler_type+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named 'D' -- because '-MD' means "put the output + # in D". + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CXX_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with + # Solaris 10 /bin/sh. + echo '/* dummy */' > sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with '-c' and '-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle '-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs. + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # After this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested. + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok '-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CXX_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CXX_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } +CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then + am__fastdepCXX_TRUE= + am__fastdepCXX_FALSE='#' +else + am__fastdepCXX_TRUE='#' + am__fastdepCXX_FALSE= +fi + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi +else + RANLIB="$ac_cv_prog_RANLIB" +fi + + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if ${ac_cv_prog_CPP+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since + # <limits.h> exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include <limits.h> +#else +# include <assert.h> +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <ac_nonexistent.h> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since + # <limits.h> exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include <limits.h> +#else +# include <assert.h> +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <ac_nonexistent.h> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if ${ac_cv_path_GREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_GREP" || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if ${ac_cv_path_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_EGREP" || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if ${ac_cv_header_stdc+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdlib.h> +#include <stdarg.h> +#include <string.h> +#include <float.h> + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <string.h> + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdlib.h> + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <ctype.h> +#include <stdlib.h> +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "#define STDC_HEADERS 1" >>confdefs.h + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + + ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default" +if test "x$ac_cv_header_minix_config_h" = xyes; then : + MINIX=yes +else + MINIX= +fi + + + if test "$MINIX" = yes; then + +$as_echo "#define _POSIX_SOURCE 1" >>confdefs.h + + +$as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h + + +$as_echo "#define _MINIX 1" >>confdefs.h + + fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5 +$as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; } +if ${ac_cv_safe_to_define___extensions__+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +# define __EXTENSIONS__ 1 + $ac_includes_default +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_safe_to_define___extensions__=yes +else + ac_cv_safe_to_define___extensions__=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5 +$as_echo "$ac_cv_safe_to_define___extensions__" >&6; } + test $ac_cv_safe_to_define___extensions__ = yes && + $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h + + $as_echo "#define _ALL_SOURCE 1" >>confdefs.h + + $as_echo "#define _GNU_SOURCE 1" >>confdefs.h + + $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h + + $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h + + + +# The tests for host and target for $enable_largefile require +# canonical names. + + + +# As the $enable_largefile decision depends on --enable-plugins we must set it +# even in directories otherwise not depending on the $plugins option. + + + maybe_plugins=no + for ac_header in dlfcn.h +do : + ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default +" +if test "x$ac_cv_header_dlfcn_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_DLFCN_H 1 +_ACEOF + maybe_plugins=yes +fi + +done + + for ac_header in windows.h +do : + ac_fn_c_check_header_compile "$LINENO" "windows.h" "ac_cv_header_windows_h" "$ac_includes_default +" +if test "x$ac_cv_header_windows_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_WINDOWS_H 1 +_ACEOF + maybe_plugins=yes +fi + +done + + + # Check whether --enable-plugins was given. +if test "${enable_plugins+set}" = set; then : + enableval=$enable_plugins; case "${enableval}" in + no) plugins=no ;; + *) plugins=yes + if test "$maybe_plugins" != "yes" ; then + as_fn_error $? "Building with plugin support requires a host that supports dlopen." "$LINENO" 5 + fi ;; + esac +else + plugins=$maybe_plugins + +fi + + if test "$plugins" = "yes"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing dlsym" >&5 +$as_echo_n "checking for library containing dlsym... " >&6; } +if ${ac_cv_search_dlsym+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlsym (); +int +main () +{ +return dlsym (); + ; + return 0; +} +_ACEOF +for ac_lib in '' dl; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_dlsym=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_dlsym+:} false; then : + break +fi +done +if ${ac_cv_search_dlsym+:} false; then : + +else + ac_cv_search_dlsym=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_dlsym" >&5 +$as_echo "$ac_cv_search_dlsym" >&6; } +ac_res=$ac_cv_search_dlsym +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + +fi + + fi + + +case "${host}" in + sparc-*-solaris*|i?86-*-solaris*) + # On native 32-bit Solaris/SPARC and x86, large-file and procfs support + # were mutually exclusive until Solaris 11.3. Without procfs support, + # the bfd/ elf module cannot provide certain routines such as + # elfcore_write_prpsinfo or elfcore_write_prstatus. So unless the user + # explicitly requested large-file support through the + # --enable-largefile switch, disable large-file support in favor of + # procfs support. + # + # Check if <sys/procfs.h> is incompatible with large-file support. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#define _FILE_OFFSET_BITS 64 +#define _STRUCTURED_PROC 1 +#include <sys/procfs.h> +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + acx_cv_procfs_lfs=yes +else + acx_cv_procfs_lfs=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + # + # Forcefully disable large-file support only if necessary, gdb is in + # tree and enabled. + if test "${target}" = "${host}" -a "$acx_cv_procfs_lfs" = no \ + -a -d $srcdir/../gdb -a "$enable_gdb" != no; then + : ${enable_largefile="no"} + if test "$plugins" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: +plugin support disabled; require large-file support which is incompatible with GDB." >&5 +$as_echo "$as_me: WARNING: +plugin support disabled; require large-file support which is incompatible with GDB." >&2;} + plugins=no + fi + fi + # + # Explicitly undef _FILE_OFFSET_BITS if enable_largefile=no for the + # benefit of g++ 9+ which predefines it on Solaris. + if test "$enable_largefile" = no; then + LARGEFILE_CPPFLAGS="-U_FILE_OFFSET_BITS" + + fi + ;; +esac + +# Check whether --enable-largefile was given. +if test "${enable_largefile+set}" = set; then : + enableval=$enable_largefile; +fi + +if test "$enable_largefile" != no; then + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5 +$as_echo_n "checking for special C compiler options needed for large files... " >&6; } +if ${ac_cv_sys_largefile_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_sys_largefile_CC=no + if test "$GCC" != yes; then + ac_save_CC=$CC + while :; do + # IRIX 6.2 and later do not support large files by default, + # so use the C compiler's -n32 option if that helps. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF + if ac_fn_c_try_compile "$LINENO"; then : + break +fi +rm -f core conftest.err conftest.$ac_objext + CC="$CC -n32" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_largefile_CC=' -n32'; break +fi +rm -f core conftest.err conftest.$ac_objext + break + done + CC=$ac_save_CC + rm -f conftest.$ac_ext + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5 +$as_echo "$ac_cv_sys_largefile_CC" >&6; } + if test "$ac_cv_sys_largefile_CC" != no; then + CC=$CC$ac_cv_sys_largefile_CC + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5 +$as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; } +if ${ac_cv_sys_file_offset_bits+:} false; then : + $as_echo_n "(cached) " >&6 +else + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_file_offset_bits=no; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#define _FILE_OFFSET_BITS 64 +#include <sys/types.h> + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_file_offset_bits=64; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cv_sys_file_offset_bits=unknown + break +done +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5 +$as_echo "$ac_cv_sys_file_offset_bits" >&6; } +case $ac_cv_sys_file_offset_bits in #( + no | unknown) ;; + *) +cat >>confdefs.h <<_ACEOF +#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits +_ACEOF +;; +esac +rm -rf conftest* + if test $ac_cv_sys_file_offset_bits = unknown; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5 +$as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; } +if ${ac_cv_sys_large_files+:} false; then : + $as_echo_n "(cached) " >&6 +else + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_large_files=no; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#define _LARGE_FILES 1 +#include <sys/types.h> + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_large_files=1; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cv_sys_large_files=unknown + break +done +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5 +$as_echo "$ac_cv_sys_large_files" >&6; } +case $ac_cv_sys_large_files in #( + no | unknown) ;; + *) +cat >>confdefs.h <<_ACEOF +#define _LARGE_FILES $ac_cv_sys_large_files +_ACEOF +;; +esac +rm -rf conftest* + fi + + +fi + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5; } + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if ${ac_cv_c_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if ${ac_cv_prog_cc_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdarg.h> +#include <stdio.h> +struct stat; +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 +$as_echo_n "checking whether $CC understands -c and -o together... " >&6; } +if ${am_cv_prog_cc_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF + # Make sure it works both with $CC and with simple cc. + # Following AC_PROG_CC_C_O, we do the test twice because some + # compilers refuse to overwrite an existing .o file with -o, + # though they will create one. + am_cv_prog_cc_c_o=yes + for am_i in 1 2; do + if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 + ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } \ + && test -f conftest2.$ac_objext; then + : OK + else + am_cv_prog_cc_c_o=no + break + fi + done + rm -f core conftest* + unset am_i +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 +$as_echo "$am_cv_prog_cc_c_o" >&6; } +if test "$am_cv_prog_cc_c_o" != yes; then + # Losing compiler, so override with the script. + # FIXME: It is wrong to rewrite CC. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__CC in this case, + # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" + CC="$am_aux_dir/compile $CC" +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +depcc="$CC" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if ${am_cv_CC_dependencies_compiler_type+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named 'D' -- because '-MD' means "put the output + # in D". + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with + # Solaris 10 /bin/sh. + echo '/* dummy */' > sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with '-c' and '-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle '-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs. + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # After this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested. + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok '-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + +am_cv_prog_cc_stdc=$ac_cv_prog_cc_stdc + + +# We require a C++11 compiler. Check if one is available, and if +# necessary, set CXX_DIALECT to some -std=xxx switch. + + ax_cxx_compile_alternatives="11 0x" ax_cxx_compile_cxx11_required=true + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + CXX_DIALECT="" + ac_success=no + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features by default" >&5 +$as_echo_n "checking whether $CXX supports C++11 features by default... " >&6; } +if ${ax_cv_cxx_compile_cxx11+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +// If the compiler admits that it is not ready for C++11, why torture it? +// Hopefully, this will speed up the test. + +#ifndef __cplusplus + +#error "This is not a C++ compiler" + +#elif __cplusplus < 201103L + +#error "This is not a C++11 compiler" + +#else + +namespace cxx11 +{ + + namespace test_static_assert + { + + template <typename T> + struct check + { + static_assert(sizeof(int) <= sizeof(T), "not big enough"); + }; + + } + + namespace test_final_override + { + + struct Base + { + virtual void f() {} + }; + + struct Derived : public Base + { + virtual void f() override {} + }; + + } + + namespace test_double_right_angle_brackets + { + + template < typename T > + struct check {}; + + typedef check<void> single_type; + typedef check<check<void>> double_type; + typedef check<check<check<void>>> triple_type; + typedef check<check<check<check<void>>>> quadruple_type; + + } + + namespace test_decltype + { + + int + f() + { + int a = 1; + decltype(a) b = 2; + return a + b; + } + + } + + namespace test_type_deduction + { + + template < typename T1, typename T2 > + struct is_same + { + static const bool value = false; + }; + + template < typename T > + struct is_same<T, T> + { + static const bool value = true; + }; + + template < typename T1, typename T2 > + auto + add(T1 a1, T2 a2) -> decltype(a1 + a2) + { + return a1 + a2; + } + + int + test(const int c, volatile int v) + { + static_assert(is_same<int, decltype(0)>::value == true, ""); + static_assert(is_same<int, decltype(c)>::value == false, ""); + static_assert(is_same<int, decltype(v)>::value == false, ""); + auto ac = c; + auto av = v; + auto sumi = ac + av + 'x'; + auto sumf = ac + av + 1.0; + static_assert(is_same<int, decltype(ac)>::value == true, ""); + static_assert(is_same<int, decltype(av)>::value == true, ""); + static_assert(is_same<int, decltype(sumi)>::value == true, ""); + static_assert(is_same<int, decltype(sumf)>::value == false, ""); + static_assert(is_same<int, decltype(add(c, v))>::value == true, ""); + return (sumf > 0.0) ? sumi : add(c, v); + } + + } + + namespace test_noexcept + { + + int f() { return 0; } + int g() noexcept { return 0; } + + static_assert(noexcept(f()) == false, ""); + static_assert(noexcept(g()) == true, ""); + + } + + namespace test_constexpr + { + + template < typename CharT > + unsigned long constexpr + strlen_c_r(const CharT *const s, const unsigned long acc) noexcept + { + return *s ? strlen_c_r(s + 1, acc + 1) : acc; + } + + template < typename CharT > + unsigned long constexpr + strlen_c(const CharT *const s) noexcept + { + return strlen_c_r(s, 0UL); + } + + static_assert(strlen_c("") == 0UL, ""); + static_assert(strlen_c("1") == 1UL, ""); + static_assert(strlen_c("example") == 7UL, ""); + static_assert(strlen_c("another\0example") == 7UL, ""); + + } + + namespace test_rvalue_references + { + + template < int N > + struct answer + { + static constexpr int value = N; + }; + + answer<1> f(int&) { return answer<1>(); } + answer<2> f(const int&) { return answer<2>(); } + answer<3> f(int&&) { return answer<3>(); } + + void + test() + { + int i = 0; + const int c = 0; + static_assert(decltype(f(i))::value == 1, ""); + static_assert(decltype(f(c))::value == 2, ""); + static_assert(decltype(f(0))::value == 3, ""); + } + + } + + namespace test_uniform_initialization + { + + struct test + { + static const int zero {}; + static const int one {1}; + }; + + static_assert(test::zero == 0, ""); + static_assert(test::one == 1, ""); + + } + + namespace test_lambdas + { + + void + test1() + { + auto lambda1 = [](){}; + auto lambda2 = lambda1; + lambda1(); + lambda2(); + } + + int + test2() + { + auto a = [](int i, int j){ return i + j; }(1, 2); + auto b = []() -> int { return '0'; }(); + auto c = [=](){ return a + b; }(); + auto d = [&](){ return c; }(); + auto e = [a, &b](int x) mutable { + const auto identity = [](int y){ return y; }; + for (auto i = 0; i < a; ++i) + a += b--; + return x + identity(a + b); + }(0); + return a + b + c + d + e; + } + + int + test3() + { + const auto nullary = [](){ return 0; }; + const auto unary = [](int x){ return x; }; + using nullary_t = decltype(nullary); + using unary_t = decltype(unary); + const auto higher1st = [](nullary_t f){ return f(); }; + const auto higher2nd = [unary](nullary_t f1){ + return [unary, f1](unary_t f2){ return f2(unary(f1())); }; + }; + return higher1st(nullary) + higher2nd(nullary)(unary); + } + + } + + namespace test_variadic_templates + { + + template <int...> + struct sum; + + template <int N0, int... N1toN> + struct sum<N0, N1toN...> + { + static constexpr auto value = N0 + sum<N1toN...>::value; + }; + + template <> + struct sum<> + { + static constexpr auto value = 0; + }; + + static_assert(sum<>::value == 0, ""); + static_assert(sum<1>::value == 1, ""); + static_assert(sum<23>::value == 23, ""); + static_assert(sum<1, 2>::value == 3, ""); + static_assert(sum<5, 5, 11>::value == 21, ""); + static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); + + } + + // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae + // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function + // because of this. + namespace test_template_alias_sfinae + { + + struct foo {}; + + template<typename T> + using member = typename T::member_type; + + template<typename T> + void func(...) {} + + template<typename T> + void func(member<T>*) {} + + void test(); + + void test() { func<foo>(0); } + + } + +} // namespace cxx11 + +#endif // __cplusplus >= 201103L + + + +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ax_cv_cxx_compile_cxx11=yes +else + ax_cv_cxx_compile_cxx11=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_cxx_compile_cxx11" >&5 +$as_echo "$ax_cv_cxx_compile_cxx11" >&6; } + if test x$ax_cv_cxx_compile_cxx11 = xyes; then + ac_success=yes + fi + + if test x$ac_success = xno; then + for alternative in ${ax_cxx_compile_alternatives}; do + switch="-std=gnu++${alternative}" + cachevar=`$as_echo "ax_cv_cxx_compile_cxx11_$switch" | $as_tr_sh` + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features with $switch" >&5 +$as_echo_n "checking whether $CXX supports C++11 features with $switch... " >&6; } +if eval \${$cachevar+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_CXX="$CXX" + CXX="$CXX $switch" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +// If the compiler admits that it is not ready for C++11, why torture it? +// Hopefully, this will speed up the test. + +#ifndef __cplusplus + +#error "This is not a C++ compiler" + +#elif __cplusplus < 201103L + +#error "This is not a C++11 compiler" + +#else + +namespace cxx11 +{ + + namespace test_static_assert + { + + template <typename T> + struct check + { + static_assert(sizeof(int) <= sizeof(T), "not big enough"); + }; + + } + + namespace test_final_override + { + + struct Base + { + virtual void f() {} + }; + + struct Derived : public Base + { + virtual void f() override {} + }; + + } + + namespace test_double_right_angle_brackets + { + + template < typename T > + struct check {}; + + typedef check<void> single_type; + typedef check<check<void>> double_type; + typedef check<check<check<void>>> triple_type; + typedef check<check<check<check<void>>>> quadruple_type; + + } + + namespace test_decltype + { + + int + f() + { + int a = 1; + decltype(a) b = 2; + return a + b; + } + + } + + namespace test_type_deduction + { + + template < typename T1, typename T2 > + struct is_same + { + static const bool value = false; + }; + + template < typename T > + struct is_same<T, T> + { + static const bool value = true; + }; + + template < typename T1, typename T2 > + auto + add(T1 a1, T2 a2) -> decltype(a1 + a2) + { + return a1 + a2; + } + + int + test(const int c, volatile int v) + { + static_assert(is_same<int, decltype(0)>::value == true, ""); + static_assert(is_same<int, decltype(c)>::value == false, ""); + static_assert(is_same<int, decltype(v)>::value == false, ""); + auto ac = c; + auto av = v; + auto sumi = ac + av + 'x'; + auto sumf = ac + av + 1.0; + static_assert(is_same<int, decltype(ac)>::value == true, ""); + static_assert(is_same<int, decltype(av)>::value == true, ""); + static_assert(is_same<int, decltype(sumi)>::value == true, ""); + static_assert(is_same<int, decltype(sumf)>::value == false, ""); + static_assert(is_same<int, decltype(add(c, v))>::value == true, ""); + return (sumf > 0.0) ? sumi : add(c, v); + } + + } + + namespace test_noexcept + { + + int f() { return 0; } + int g() noexcept { return 0; } + + static_assert(noexcept(f()) == false, ""); + static_assert(noexcept(g()) == true, ""); + + } + + namespace test_constexpr + { + + template < typename CharT > + unsigned long constexpr + strlen_c_r(const CharT *const s, const unsigned long acc) noexcept + { + return *s ? strlen_c_r(s + 1, acc + 1) : acc; + } + + template < typename CharT > + unsigned long constexpr + strlen_c(const CharT *const s) noexcept + { + return strlen_c_r(s, 0UL); + } + + static_assert(strlen_c("") == 0UL, ""); + static_assert(strlen_c("1") == 1UL, ""); + static_assert(strlen_c("example") == 7UL, ""); + static_assert(strlen_c("another\0example") == 7UL, ""); + + } + + namespace test_rvalue_references + { + + template < int N > + struct answer + { + static constexpr int value = N; + }; + + answer<1> f(int&) { return answer<1>(); } + answer<2> f(const int&) { return answer<2>(); } + answer<3> f(int&&) { return answer<3>(); } + + void + test() + { + int i = 0; + const int c = 0; + static_assert(decltype(f(i))::value == 1, ""); + static_assert(decltype(f(c))::value == 2, ""); + static_assert(decltype(f(0))::value == 3, ""); + } + + } + + namespace test_uniform_initialization + { + + struct test + { + static const int zero {}; + static const int one {1}; + }; + + static_assert(test::zero == 0, ""); + static_assert(test::one == 1, ""); + + } + + namespace test_lambdas + { + + void + test1() + { + auto lambda1 = [](){}; + auto lambda2 = lambda1; + lambda1(); + lambda2(); + } + + int + test2() + { + auto a = [](int i, int j){ return i + j; }(1, 2); + auto b = []() -> int { return '0'; }(); + auto c = [=](){ return a + b; }(); + auto d = [&](){ return c; }(); + auto e = [a, &b](int x) mutable { + const auto identity = [](int y){ return y; }; + for (auto i = 0; i < a; ++i) + a += b--; + return x + identity(a + b); + }(0); + return a + b + c + d + e; + } + + int + test3() + { + const auto nullary = [](){ return 0; }; + const auto unary = [](int x){ return x; }; + using nullary_t = decltype(nullary); + using unary_t = decltype(unary); + const auto higher1st = [](nullary_t f){ return f(); }; + const auto higher2nd = [unary](nullary_t f1){ + return [unary, f1](unary_t f2){ return f2(unary(f1())); }; + }; + return higher1st(nullary) + higher2nd(nullary)(unary); + } + + } + + namespace test_variadic_templates + { + + template <int...> + struct sum; + + template <int N0, int... N1toN> + struct sum<N0, N1toN...> + { + static constexpr auto value = N0 + sum<N1toN...>::value; + }; + + template <> + struct sum<> + { + static constexpr auto value = 0; + }; + + static_assert(sum<>::value == 0, ""); + static_assert(sum<1>::value == 1, ""); + static_assert(sum<23>::value == 23, ""); + static_assert(sum<1, 2>::value == 3, ""); + static_assert(sum<5, 5, 11>::value == 21, ""); + static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); + + } + + // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae + // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function + // because of this. + namespace test_template_alias_sfinae + { + + struct foo {}; + + template<typename T> + using member = typename T::member_type; + + template<typename T> + void func(...) {} + + template<typename T> + void func(member<T>*) {} + + void test(); + + void test() { func<foo>(0); } + + } + +} // namespace cxx11 + +#endif // __cplusplus >= 201103L + + + +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + eval $cachevar=yes +else + eval $cachevar=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CXX="$ac_save_CXX" +fi +eval ac_res=\$$cachevar + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + if eval test x\$$cachevar = xyes; then + CXX_DIALECT="$switch" + ac_success=yes + break + fi + done + fi + + if test x$ac_success = xno; then + for alternative in ${ax_cxx_compile_alternatives}; do + for switch in -std=c++${alternative} +std=c++${alternative} "-h std=c++${alternative}"; do + cachevar=`$as_echo "ax_cv_cxx_compile_cxx11_$switch" | $as_tr_sh` + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features with $switch" >&5 +$as_echo_n "checking whether $CXX supports C++11 features with $switch... " >&6; } +if eval \${$cachevar+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_CXX="$CXX" + CXX="$CXX $switch" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +// If the compiler admits that it is not ready for C++11, why torture it? +// Hopefully, this will speed up the test. + +#ifndef __cplusplus + +#error "This is not a C++ compiler" + +#elif __cplusplus < 201103L + +#error "This is not a C++11 compiler" + +#else + +namespace cxx11 +{ + + namespace test_static_assert + { + + template <typename T> + struct check + { + static_assert(sizeof(int) <= sizeof(T), "not big enough"); + }; + + } + + namespace test_final_override + { + + struct Base + { + virtual void f() {} + }; + + struct Derived : public Base + { + virtual void f() override {} + }; + + } + + namespace test_double_right_angle_brackets + { + + template < typename T > + struct check {}; + + typedef check<void> single_type; + typedef check<check<void>> double_type; + typedef check<check<check<void>>> triple_type; + typedef check<check<check<check<void>>>> quadruple_type; + + } + + namespace test_decltype + { + + int + f() + { + int a = 1; + decltype(a) b = 2; + return a + b; + } + + } + + namespace test_type_deduction + { + + template < typename T1, typename T2 > + struct is_same + { + static const bool value = false; + }; + + template < typename T > + struct is_same<T, T> + { + static const bool value = true; + }; + + template < typename T1, typename T2 > + auto + add(T1 a1, T2 a2) -> decltype(a1 + a2) + { + return a1 + a2; + } + + int + test(const int c, volatile int v) + { + static_assert(is_same<int, decltype(0)>::value == true, ""); + static_assert(is_same<int, decltype(c)>::value == false, ""); + static_assert(is_same<int, decltype(v)>::value == false, ""); + auto ac = c; + auto av = v; + auto sumi = ac + av + 'x'; + auto sumf = ac + av + 1.0; + static_assert(is_same<int, decltype(ac)>::value == true, ""); + static_assert(is_same<int, decltype(av)>::value == true, ""); + static_assert(is_same<int, decltype(sumi)>::value == true, ""); + static_assert(is_same<int, decltype(sumf)>::value == false, ""); + static_assert(is_same<int, decltype(add(c, v))>::value == true, ""); + return (sumf > 0.0) ? sumi : add(c, v); + } + + } + + namespace test_noexcept + { + + int f() { return 0; } + int g() noexcept { return 0; } + + static_assert(noexcept(f()) == false, ""); + static_assert(noexcept(g()) == true, ""); + + } + + namespace test_constexpr + { + + template < typename CharT > + unsigned long constexpr + strlen_c_r(const CharT *const s, const unsigned long acc) noexcept + { + return *s ? strlen_c_r(s + 1, acc + 1) : acc; + } + + template < typename CharT > + unsigned long constexpr + strlen_c(const CharT *const s) noexcept + { + return strlen_c_r(s, 0UL); + } + + static_assert(strlen_c("") == 0UL, ""); + static_assert(strlen_c("1") == 1UL, ""); + static_assert(strlen_c("example") == 7UL, ""); + static_assert(strlen_c("another\0example") == 7UL, ""); + + } + + namespace test_rvalue_references + { + + template < int N > + struct answer + { + static constexpr int value = N; + }; + + answer<1> f(int&) { return answer<1>(); } + answer<2> f(const int&) { return answer<2>(); } + answer<3> f(int&&) { return answer<3>(); } + + void + test() + { + int i = 0; + const int c = 0; + static_assert(decltype(f(i))::value == 1, ""); + static_assert(decltype(f(c))::value == 2, ""); + static_assert(decltype(f(0))::value == 3, ""); + } + + } + + namespace test_uniform_initialization + { + + struct test + { + static const int zero {}; + static const int one {1}; + }; + + static_assert(test::zero == 0, ""); + static_assert(test::one == 1, ""); + + } + + namespace test_lambdas + { + + void + test1() + { + auto lambda1 = [](){}; + auto lambda2 = lambda1; + lambda1(); + lambda2(); + } + + int + test2() + { + auto a = [](int i, int j){ return i + j; }(1, 2); + auto b = []() -> int { return '0'; }(); + auto c = [=](){ return a + b; }(); + auto d = [&](){ return c; }(); + auto e = [a, &b](int x) mutable { + const auto identity = [](int y){ return y; }; + for (auto i = 0; i < a; ++i) + a += b--; + return x + identity(a + b); + }(0); + return a + b + c + d + e; + } + + int + test3() + { + const auto nullary = [](){ return 0; }; + const auto unary = [](int x){ return x; }; + using nullary_t = decltype(nullary); + using unary_t = decltype(unary); + const auto higher1st = [](nullary_t f){ return f(); }; + const auto higher2nd = [unary](nullary_t f1){ + return [unary, f1](unary_t f2){ return f2(unary(f1())); }; + }; + return higher1st(nullary) + higher2nd(nullary)(unary); + } + + } + + namespace test_variadic_templates + { + + template <int...> + struct sum; + + template <int N0, int... N1toN> + struct sum<N0, N1toN...> + { + static constexpr auto value = N0 + sum<N1toN...>::value; + }; + + template <> + struct sum<> + { + static constexpr auto value = 0; + }; + + static_assert(sum<>::value == 0, ""); + static_assert(sum<1>::value == 1, ""); + static_assert(sum<23>::value == 23, ""); + static_assert(sum<1, 2>::value == 3, ""); + static_assert(sum<5, 5, 11>::value == 21, ""); + static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); + + } + + // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae + // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function + // because of this. + namespace test_template_alias_sfinae + { + + struct foo {}; + + template<typename T> + using member = typename T::member_type; + + template<typename T> + void func(...) {} + + template<typename T> + void func(member<T>*) {} + + void test(); + + void test() { func<foo>(0); } + + } + +} // namespace cxx11 + +#endif // __cplusplus >= 201103L + + + +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + eval $cachevar=yes +else + eval $cachevar=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CXX="$ac_save_CXX" +fi +eval ac_res=\$$cachevar + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + if eval test x\$$cachevar = xyes; then + CXX_DIALECT="$switch" + ac_success=yes + break + fi + done + if test x$ac_success = xyes; then + break + fi + done + fi + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + if test x$ax_cxx_compile_cxx11_required = xtrue; then + if test x$ac_success = xno; then + as_fn_error $? "*** A compiler with support for C++11 language features is required." "$LINENO" 5 + fi + fi + if test x$ac_success = xno; then + HAVE_CXX11=0 + { $as_echo "$as_me:${as_lineno-$LINENO}: No compiler with C++11 support was found" >&5 +$as_echo "$as_me: No compiler with C++11 support was found" >&6;} + else + HAVE_CXX11=1 + +$as_echo "#define HAVE_CXX11 1" >>confdefs.h + + fi + + + + +# If we haven't got the data from the intl directory, +# assume NLS is disabled. +USE_NLS=no +LIBINTL= +LIBINTL_DEP= +INCINTL= +XGETTEXT= +GMSGFMT= +POSUB= + +if test -f ../intl/config.intl; then + . ../intl/config.intl +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5 +$as_echo_n "checking whether NLS is requested... " >&6; } +if test x"$USE_NLS" != xyes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define ENABLE_NLS 1" >>confdefs.h + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for catalogs to be installed" >&5 +$as_echo_n "checking for catalogs to be installed... " >&6; } + # Look for .po and .gmo files in the source directory. + CATALOGS= + XLINGUAS= + for cat in $srcdir/po/*.gmo $srcdir/po/*.po; do + # If there aren't any .gmo files the shell will give us the + # literal string "../path/to/srcdir/po/*.gmo" which has to be + # weeded out. + case "$cat" in *\**) + continue;; + esac + # The quadruple backslash is collapsed to a double backslash + # by the backticks, then collapsed again by the double quotes, + # leaving us with one backslash in the sed expression (right + # before the dot that mustn't act as a wildcard). + cat=`echo $cat | sed -e "s!$srcdir/po/!!" -e "s!\\\\.po!.gmo!"` + lang=`echo $cat | sed -e "s!\\\\.gmo!!"` + # The user is allowed to set LINGUAS to a list of languages to + # install catalogs for. If it's empty that means "all of them." + if test "x$LINGUAS" = x; then + CATALOGS="$CATALOGS $cat" + XLINGUAS="$XLINGUAS $lang" + else + case "$LINGUAS" in *$lang*) + CATALOGS="$CATALOGS $cat" + XLINGUAS="$XLINGUAS $lang" + ;; + esac + fi + done + LINGUAS="$XLINGUAS" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LINGUAS" >&5 +$as_echo "$LINGUAS" >&6; } + + + DATADIRNAME=share + + INSTOBJEXT=.mo + + GENCAT=gencat + + CATOBJEXT=.gmo + +fi + + + # Check for presence and size of long long. + ac_fn_c_check_type "$LINENO" "long long" "ac_cv_type_long_long" "$ac_includes_default" +if test "x$ac_cv_type_long_long" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_LONG_LONG 1 +_ACEOF + +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long long" >&5 +$as_echo_n "checking size of long long... " >&6; } +if ${ac_cv_sizeof_long_long+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long long))" "ac_cv_sizeof_long_long" "$ac_includes_default"; then : + +else + if test "$ac_cv_type_long_long" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot compute sizeof (long long) +See \`config.log' for more details" "$LINENO" 5; } + else + ac_cv_sizeof_long_long=0 + fi +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_long" >&5 +$as_echo "$ac_cv_sizeof_long_long" >&6; } + + + +cat >>confdefs.h <<_ACEOF +#define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long +_ACEOF + + +fi + + + as_ac_Symbol=`$as_echo "ac_cv_have_decl_basename(char *)" | $as_tr_sh` +ac_fn_c_check_decl "$LINENO" "basename(char *)" "$as_ac_Symbol" "$ac_includes_default" +if eval test \"x\$"$as_ac_Symbol"\" = x"yes"; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_BASENAME $ac_have_decl +_ACEOF +ac_fn_c_check_decl "$LINENO" "ffs" "ac_cv_have_decl_ffs" "$ac_includes_default" +if test "x$ac_cv_have_decl_ffs" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_FFS $ac_have_decl +_ACEOF +ac_fn_c_check_decl "$LINENO" "asprintf" "ac_cv_have_decl_asprintf" "$ac_includes_default" +if test "x$ac_cv_have_decl_asprintf" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_ASPRINTF $ac_have_decl +_ACEOF +ac_fn_c_check_decl "$LINENO" "vasprintf" "ac_cv_have_decl_vasprintf" "$ac_includes_default" +if test "x$ac_cv_have_decl_vasprintf" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_VASPRINTF $ac_have_decl +_ACEOF +ac_fn_c_check_decl "$LINENO" "snprintf" "ac_cv_have_decl_snprintf" "$ac_includes_default" +if test "x$ac_cv_have_decl_snprintf" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_SNPRINTF $ac_have_decl +_ACEOF +ac_fn_c_check_decl "$LINENO" "vsnprintf" "ac_cv_have_decl_vsnprintf" "$ac_includes_default" +if test "x$ac_cv_have_decl_vsnprintf" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_VSNPRINTF $ac_have_decl +_ACEOF + + ac_fn_c_check_decl "$LINENO" "strtol" "ac_cv_have_decl_strtol" "$ac_includes_default" +if test "x$ac_cv_have_decl_strtol" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_STRTOL $ac_have_decl +_ACEOF +ac_fn_c_check_decl "$LINENO" "strtoul" "ac_cv_have_decl_strtoul" "$ac_includes_default" +if test "x$ac_cv_have_decl_strtoul" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_STRTOUL $ac_have_decl +_ACEOF +ac_fn_c_check_decl "$LINENO" "strtoll" "ac_cv_have_decl_strtoll" "$ac_includes_default" +if test "x$ac_cv_have_decl_strtoll" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_STRTOLL $ac_have_decl +_ACEOF +ac_fn_c_check_decl "$LINENO" "strtoull" "ac_cv_have_decl_strtoull" "$ac_includes_default" +if test "x$ac_cv_have_decl_strtoull" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_STRTOULL $ac_have_decl +_ACEOF + + ac_fn_c_check_decl "$LINENO" "strverscmp" "ac_cv_have_decl_strverscmp" "$ac_includes_default" +if test "x$ac_cv_have_decl_strverscmp" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_STRVERSCMP $ac_have_decl +_ACEOF + + +ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" +if test "x$ac_cv_type_size_t" = xyes; then : + +else + +cat >>confdefs.h <<_ACEOF +#define size_t unsigned int +_ACEOF + +fi + + + + + for ac_header in $ac_header_list +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + + + + + +ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default" +if test "x$ac_cv_type_pid_t" = xyes; then : + +else + +cat >>confdefs.h <<_ACEOF +#define pid_t int +_ACEOF + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if ${ac_cv_path_SED+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed + { ac_script=; unset ac_script;} + if test -z "$SED"; then + ac_path_SED_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_SED" || continue +# Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_SED_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_SED"; then + as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 + fi +else + ac_cv_path_SED=$SED +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +$as_echo "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed + + + if test "X$prefix" = "XNONE"; then + acl_final_prefix="$ac_default_prefix" + else + acl_final_prefix="$prefix" + fi + if test "X$exec_prefix" = "XNONE"; then + acl_final_exec_prefix='${prefix}' + else + acl_final_exec_prefix="$exec_prefix" + fi + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" + prefix="$acl_save_prefix" + + +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then : + withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +# Prepare PATH_SEPARATOR. +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by GCC" >&5 +$as_echo_n "checking for ld used by GCC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | [A-Za-z]:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the path of ld + ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` + while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do + ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if ${acl_cv_path_LD+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$LD"; then + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + acl_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some GNU ld's only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + if "$acl_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then + test "$with_gnu_ld" != no && break + else + test "$with_gnu_ld" != yes && break + fi + fi + done + IFS="$ac_save_ifs" +else + acl_cv_path_LD="$LD" # Let the user override the test with a path. +fi +fi + +LD="$acl_cv_path_LD" +if test -n "$LD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if ${acl_cv_prog_gnu_ld+:} false; then : + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU ld's only accept -v. +if $LD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then + acl_cv_prog_gnu_ld=yes +else + acl_cv_prog_gnu_ld=no +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_prog_gnu_ld" >&5 +$as_echo "$acl_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$acl_cv_prog_gnu_ld + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shared library run path origin" >&5 +$as_echo_n "checking for shared library run path origin... " >&6; } +if ${acl_cv_rpath+:} false; then : + $as_echo_n "(cached) " >&6 +else + + CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ + ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh + . ./conftest.sh + rm -f ./conftest.sh + acl_cv_rpath=done + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_rpath" >&5 +$as_echo "$acl_cv_rpath" >&6; } + wl="$acl_cv_wl" + libext="$acl_cv_libext" + shlibext="$acl_cv_shlibext" + hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" + hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" + hardcode_direct="$acl_cv_hardcode_direct" + hardcode_minus_L="$acl_cv_hardcode_minus_L" + # Check whether --enable-rpath was given. +if test "${enable_rpath+set}" = set; then : + enableval=$enable_rpath; : +else + enable_rpath=yes +fi + + + + # Set the 'development' global. + . $srcdir/../bfd/development.sh + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if ${ac_cv_header_stdc+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdlib.h> +#include <stdarg.h> +#include <string.h> +#include <float.h> + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <string.h> + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdlib.h> + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <ctype.h> +#include <stdlib.h> +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "#define STDC_HEADERS 1" >>confdefs.h + +fi + + # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works +# for constant arguments. Useless! +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working alloca.h" >&5 +$as_echo_n "checking for working alloca.h... " >&6; } +if ${ac_cv_working_alloca_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <alloca.h> +int +main () +{ +char *p = (char *) alloca (2 * sizeof (int)); + if (p) return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_working_alloca_h=yes +else + ac_cv_working_alloca_h=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_working_alloca_h" >&5 +$as_echo "$ac_cv_working_alloca_h" >&6; } +if test $ac_cv_working_alloca_h = yes; then + +$as_echo "#define HAVE_ALLOCA_H 1" >>confdefs.h + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca" >&5 +$as_echo_n "checking for alloca... " >&6; } +if ${ac_cv_func_alloca_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __GNUC__ +# define alloca __builtin_alloca +#else +# ifdef _MSC_VER +# include <malloc.h> +# define alloca _alloca +# else +# ifdef HAVE_ALLOCA_H +# include <alloca.h> +# else +# ifdef _AIX + #pragma alloca +# else +# ifndef alloca /* predefined by HP cc +Olibcalls */ +void *alloca (size_t); +# endif +# endif +# endif +# endif +#endif + +int +main () +{ +char *p = (char *) alloca (1); + if (p) return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_func_alloca_works=yes +else + ac_cv_func_alloca_works=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_alloca_works" >&5 +$as_echo "$ac_cv_func_alloca_works" >&6; } + +if test $ac_cv_func_alloca_works = yes; then + +$as_echo "#define HAVE_ALLOCA 1" >>confdefs.h + +else + # The SVR3 libPW and SVR4 libucb both contain incompatible functions +# that cause trouble. Some versions do not even contain alloca or +# contain a buggy version. If you still want to use their alloca, +# use ar to extract alloca.o from them instead of compiling alloca.c. + +ALLOCA=\${LIBOBJDIR}alloca.$ac_objext + +$as_echo "#define C_ALLOCA 1" >>confdefs.h + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether \`alloca.c' needs Cray hooks" >&5 +$as_echo_n "checking whether \`alloca.c' needs Cray hooks... " >&6; } +if ${ac_cv_os_cray+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#if defined CRAY && ! defined CRAY2 +webecray +#else +wenotbecray +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "webecray" >/dev/null 2>&1; then : + ac_cv_os_cray=yes +else + ac_cv_os_cray=no +fi +rm -f conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_os_cray" >&5 +$as_echo "$ac_cv_os_cray" >&6; } +if test $ac_cv_os_cray = yes; then + for ac_func in _getb67 GETB67 getb67; do + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + +cat >>confdefs.h <<_ACEOF +#define CRAY_STACKSEG_END $ac_func +_ACEOF + + break +fi + + done +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking stack direction for C alloca" >&5 +$as_echo_n "checking stack direction for C alloca... " >&6; } +if ${ac_cv_c_stack_direction+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + ac_cv_c_stack_direction=0 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +find_stack_direction (int *addr, int depth) +{ + int dir, dummy = 0; + if (! addr) + addr = &dummy; + *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1; + dir = depth ? find_stack_direction (addr, depth - 1) : 0; + return dir + dummy; +} + +int +main (int argc, char **argv) +{ + return find_stack_direction (0, argc + !argv + 20) < 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_c_stack_direction=1 +else + ac_cv_c_stack_direction=-1 +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_stack_direction" >&5 +$as_echo "$ac_cv_c_stack_direction" >&6; } +cat >>confdefs.h <<_ACEOF +#define STACK_DIRECTION $ac_cv_c_stack_direction +_ACEOF + + +fi + + + WIN32APILIBS= + case ${host} in + *mingw32*) + +$as_echo "#define USE_WIN32API 1" >>confdefs.h + + WIN32APILIBS="-lws2_32" + ;; + esac + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nl_langinfo and CODESET" >&5 +$as_echo_n "checking for nl_langinfo and CODESET... " >&6; } +if ${am_cv_langinfo_codeset+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <langinfo.h> +int +main () +{ +char* cs = nl_langinfo(CODESET); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + am_cv_langinfo_codeset=yes +else + am_cv_langinfo_codeset=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_langinfo_codeset" >&5 +$as_echo "$am_cv_langinfo_codeset" >&6; } + if test $am_cv_langinfo_codeset = yes; then + +$as_echo "#define HAVE_LANGINFO_CODESET 1" >>confdefs.h + + fi + + + for ac_header in linux/perf_event.h locale.h memory.h signal.h sys/resource.h sys/socket.h sys/un.h sys/wait.h thread_db.h wait.h termios.h dlfcn.h linux/elf.h proc_service.h poll.h sys/poll.h sys/select.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + +for ac_func in getpagesize +do : + ac_fn_c_check_func "$LINENO" "getpagesize" "ac_cv_func_getpagesize" +if test "x$ac_cv_func_getpagesize" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_GETPAGESIZE 1 +_ACEOF + +fi +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working mmap" >&5 +$as_echo_n "checking for working mmap... " >&6; } +if ${ac_cv_func_mmap_fixed_mapped+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + ac_cv_func_mmap_fixed_mapped=no +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +/* malloc might have been renamed as rpl_malloc. */ +#undef malloc + +/* Thanks to Mike Haertel and Jim Avera for this test. + Here is a matrix of mmap possibilities: + mmap private not fixed + mmap private fixed at somewhere currently unmapped + mmap private fixed at somewhere already mapped + mmap shared not fixed + mmap shared fixed at somewhere currently unmapped + mmap shared fixed at somewhere already mapped + For private mappings, we should verify that changes cannot be read() + back from the file, nor mmap's back from the file at a different + address. (There have been systems where private was not correctly + implemented like the infamous i386 svr4.0, and systems where the + VM page cache was not coherent with the file system buffer cache + like early versions of FreeBSD and possibly contemporary NetBSD.) + For shared mappings, we should conversely verify that changes get + propagated back to all the places they're supposed to be. + + Grep wants private fixed already mapped. + The main things grep needs to know about mmap are: + * does it exist and is it safe to write into the mmap'd area + * how to use it (BSD variants) */ + +#include <fcntl.h> +#include <sys/mman.h> + +#if !defined STDC_HEADERS && !defined HAVE_STDLIB_H +char *malloc (); +#endif + +/* This mess was copied from the GNU getpagesize.h. */ +#ifndef HAVE_GETPAGESIZE +# ifdef _SC_PAGESIZE +# define getpagesize() sysconf(_SC_PAGESIZE) +# else /* no _SC_PAGESIZE */ +# ifdef HAVE_SYS_PARAM_H +# include <sys/param.h> +# ifdef EXEC_PAGESIZE +# define getpagesize() EXEC_PAGESIZE +# else /* no EXEC_PAGESIZE */ +# ifdef NBPG +# define getpagesize() NBPG * CLSIZE +# ifndef CLSIZE +# define CLSIZE 1 +# endif /* no CLSIZE */ +# else /* no NBPG */ +# ifdef NBPC +# define getpagesize() NBPC +# else /* no NBPC */ +# ifdef PAGESIZE +# define getpagesize() PAGESIZE +# endif /* PAGESIZE */ +# endif /* no NBPC */ +# endif /* no NBPG */ +# endif /* no EXEC_PAGESIZE */ +# else /* no HAVE_SYS_PARAM_H */ +# define getpagesize() 8192 /* punt totally */ +# endif /* no HAVE_SYS_PARAM_H */ +# endif /* no _SC_PAGESIZE */ + +#endif /* no HAVE_GETPAGESIZE */ + +int +main () +{ + char *data, *data2, *data3; + const char *cdata2; + int i, pagesize; + int fd, fd2; + + pagesize = getpagesize (); + + /* First, make a file with some known garbage in it. */ + data = (char *) malloc (pagesize); + if (!data) + return 1; + for (i = 0; i < pagesize; ++i) + *(data + i) = rand (); + umask (0); + fd = creat ("conftest.mmap", 0600); + if (fd < 0) + return 2; + if (write (fd, data, pagesize) != pagesize) + return 3; + close (fd); + + /* Next, check that the tail of a page is zero-filled. File must have + non-zero length, otherwise we risk SIGBUS for entire page. */ + fd2 = open ("conftest.txt", O_RDWR | O_CREAT | O_TRUNC, 0600); + if (fd2 < 0) + return 4; + cdata2 = ""; + if (write (fd2, cdata2, 1) != 1) + return 5; + data2 = (char *) mmap (0, pagesize, PROT_READ | PROT_WRITE, MAP_SHARED, fd2, 0L); + if (data2 == MAP_FAILED) + return 6; + for (i = 0; i < pagesize; ++i) + if (*(data2 + i)) + return 7; + close (fd2); + if (munmap (data2, pagesize)) + return 8; + + /* Next, try to mmap the file at a fixed address which already has + something else allocated at it. If we can, also make sure that + we see the same garbage. */ + fd = open ("conftest.mmap", O_RDWR); + if (fd < 0) + return 9; + if (data2 != mmap (data2, pagesize, PROT_READ | PROT_WRITE, + MAP_PRIVATE | MAP_FIXED, fd, 0L)) + return 10; + for (i = 0; i < pagesize; ++i) + if (*(data + i) != *(data2 + i)) + return 11; + + /* Finally, make sure that changes to the mapped area do not + percolate back to the file as seen by read(). (This is a bug on + some variants of i386 svr4.0.) */ + for (i = 0; i < pagesize; ++i) + *(data2 + i) = *(data2 + i) + 1; + data3 = (char *) malloc (pagesize); + if (!data3) + return 12; + if (read (fd, data3, pagesize) != pagesize) + return 13; + for (i = 0; i < pagesize; ++i) + if (*(data + i) != *(data3 + i)) + return 14; + close (fd); + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_mmap_fixed_mapped=yes +else + ac_cv_func_mmap_fixed_mapped=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_mmap_fixed_mapped" >&5 +$as_echo "$ac_cv_func_mmap_fixed_mapped" >&6; } +if test $ac_cv_func_mmap_fixed_mapped = yes; then + +$as_echo "#define HAVE_MMAP 1" >>confdefs.h + +fi +rm -f conftest.mmap conftest.txt + + for ac_header in vfork.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "vfork.h" "ac_cv_header_vfork_h" "$ac_includes_default" +if test "x$ac_cv_header_vfork_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_VFORK_H 1 +_ACEOF + +fi + +done + +for ac_func in fork vfork +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + +if test "x$ac_cv_func_fork" = xyes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working fork" >&5 +$as_echo_n "checking for working fork... " >&6; } +if ${ac_cv_func_fork_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + ac_cv_func_fork_works=cross +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ + + /* By Ruediger Kuhlmann. */ + return fork () < 0; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_fork_works=yes +else + ac_cv_func_fork_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_fork_works" >&5 +$as_echo "$ac_cv_func_fork_works" >&6; } + +else + ac_cv_func_fork_works=$ac_cv_func_fork +fi +if test "x$ac_cv_func_fork_works" = xcross; then + case $host in + *-*-amigaos* | *-*-msdosdjgpp*) + # Override, as these systems have only a dummy fork() stub + ac_cv_func_fork_works=no + ;; + *) + ac_cv_func_fork_works=yes + ;; + esac + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&5 +$as_echo "$as_me: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&2;} +fi +ac_cv_func_vfork_works=$ac_cv_func_vfork +if test "x$ac_cv_func_vfork" = xyes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working vfork" >&5 +$as_echo_n "checking for working vfork... " >&6; } +if ${ac_cv_func_vfork_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + ac_cv_func_vfork_works=cross +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Thanks to Paul Eggert for this test. */ +$ac_includes_default +#include <sys/wait.h> +#ifdef HAVE_VFORK_H +# include <vfork.h> +#endif +/* On some sparc systems, changes by the child to local and incoming + argument registers are propagated back to the parent. The compiler + is told about this with #include <vfork.h>, but some compilers + (e.g. gcc -O) don't grok <vfork.h>. Test for this by using a + static variable whose address is put into a register that is + clobbered by the vfork. */ +static void +#ifdef __cplusplus +sparc_address_test (int arg) +# else +sparc_address_test (arg) int arg; +#endif +{ + static pid_t child; + if (!child) { + child = vfork (); + if (child < 0) { + perror ("vfork"); + _exit(2); + } + if (!child) { + arg = getpid(); + write(-1, "", 0); + _exit (arg); + } + } +} + +int +main () +{ + pid_t parent = getpid (); + pid_t child; + + sparc_address_test (0); + + child = vfork (); + + if (child == 0) { + /* Here is another test for sparc vfork register problems. This + test uses lots of local variables, at least as many local + variables as main has allocated so far including compiler + temporaries. 4 locals are enough for gcc 1.40.3 on a Solaris + 4.1.3 sparc, but we use 8 to be safe. A buggy compiler should + reuse the register of parent for one of the local variables, + since it will think that parent can't possibly be used any more + in this routine. Assigning to the local variable will thus + munge parent in the parent process. */ + pid_t + p = getpid(), p1 = getpid(), p2 = getpid(), p3 = getpid(), + p4 = getpid(), p5 = getpid(), p6 = getpid(), p7 = getpid(); + /* Convince the compiler that p..p7 are live; otherwise, it might + use the same hardware register for all 8 local variables. */ + if (p != p1 || p != p2 || p != p3 || p != p4 + || p != p5 || p != p6 || p != p7) + _exit(1); + + /* On some systems (e.g. IRIX 3.3), vfork doesn't separate parent + from child file descriptors. If the child closes a descriptor + before it execs or exits, this munges the parent's descriptor + as well. Test for this by closing stdout in the child. */ + _exit(close(fileno(stdout)) != 0); + } else { + int status; + struct stat st; + + while (wait(&status) != child) + ; + return ( + /* Was there some problem with vforking? */ + child < 0 + + /* Did the child fail? (This shouldn't happen.) */ + || status + + /* Did the vfork/compiler bug occur? */ + || parent != getpid() + + /* Did the file descriptor bug occur? */ + || fstat(fileno(stdout), &st) != 0 + ); + } +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_vfork_works=yes +else + ac_cv_func_vfork_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_vfork_works" >&5 +$as_echo "$ac_cv_func_vfork_works" >&6; } + +fi; +if test "x$ac_cv_func_fork_works" = xcross; then + ac_cv_func_vfork_works=$ac_cv_func_vfork + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&5 +$as_echo "$as_me: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&2;} +fi + +if test "x$ac_cv_func_vfork_works" = xyes; then + +$as_echo "#define HAVE_WORKING_VFORK 1" >>confdefs.h + +else + +$as_echo "#define vfork fork" >>confdefs.h + +fi +if test "x$ac_cv_func_fork_works" = xyes; then + +$as_echo "#define HAVE_WORKING_FORK 1" >>confdefs.h + +fi + + for ac_func in fdwalk getrlimit pipe pipe2 poll socketpair sigaction \ + ptrace64 sbrk setns sigaltstack sigprocmask \ + setpgid setpgrp getrusage getauxval +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + + ac_fn_c_check_decl "$LINENO" "ADDR_NO_RANDOMIZE" "ac_cv_have_decl_ADDR_NO_RANDOMIZE" "#include <sys/personality.h> +" +if test "x$ac_cv_have_decl_ADDR_NO_RANDOMIZE" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_ADDR_NO_RANDOMIZE $ac_have_decl +_ACEOF + + + if test "$cross_compiling" = yes; then : + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/personality.h> +int +main () +{ + + # if !HAVE_DECL_ADDR_NO_RANDOMIZE + # define ADDR_NO_RANDOMIZE 0x0040000 + # endif + /* Test the flag could be set and stays set. */ + personality (personality (0xffffffff) | ADDR_NO_RANDOMIZE); + if (!(personality (personality (0xffffffff)) & ADDR_NO_RANDOMIZE)) + return 1 + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + have_personality=true +else + have_personality=false +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/personality.h> +int +main () +{ + + # if !HAVE_DECL_ADDR_NO_RANDOMIZE + # define ADDR_NO_RANDOMIZE 0x0040000 + # endif + /* Test the flag could be set and stays set. */ + personality (personality (0xffffffff) | ADDR_NO_RANDOMIZE); + if (!(personality (personality (0xffffffff)) & ADDR_NO_RANDOMIZE)) + return 1 + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + have_personality=true +else + have_personality=false +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + if $have_personality + then + +$as_echo "#define HAVE_PERSONALITY 1" >>confdefs.h + + fi + + ac_fn_c_check_decl "$LINENO" "strstr" "ac_cv_have_decl_strstr" "$ac_includes_default" +if test "x$ac_cv_have_decl_strstr" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_STRSTR $ac_have_decl +_ACEOF + + + # ----------------------- # + # Checks for structures. # + # ----------------------- # + + ac_fn_c_check_member "$LINENO" "struct stat" "st_blocks" "ac_cv_member_struct_stat_st_blocks" "$ac_includes_default" +if test "x$ac_cv_member_struct_stat_st_blocks" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_STAT_ST_BLOCKS 1 +_ACEOF + + +fi +ac_fn_c_check_member "$LINENO" "struct stat" "st_blksize" "ac_cv_member_struct_stat_st_blksize" "$ac_includes_default" +if test "x$ac_cv_member_struct_stat_st_blksize" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_STAT_ST_BLKSIZE 1 +_ACEOF + + +fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing kinfo_getfile" >&5 +$as_echo_n "checking for library containing kinfo_getfile... " >&6; } +if ${ac_cv_search_kinfo_getfile+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char kinfo_getfile (); +int +main () +{ +return kinfo_getfile (); + ; + return 0; +} +_ACEOF +for ac_lib in '' util util-freebsd; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_kinfo_getfile=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_kinfo_getfile+:} false; then : + break +fi +done +if ${ac_cv_search_kinfo_getfile+:} false; then : + +else + ac_cv_search_kinfo_getfile=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_kinfo_getfile" >&5 +$as_echo "$ac_cv_search_kinfo_getfile" >&6; } +ac_res=$ac_cv_search_kinfo_getfile +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + +$as_echo "#define HAVE_KINFO_GETFILE 1" >>confdefs.h + +fi + + + # Check for std::thread. This does not work on some platforms, like + # mingw and DJGPP. + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + + + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +ax_pthread_ok=no + +# We used to check for pthread.h first, but this fails if pthread.h +# requires special compiler flags (e.g. on Tru64 or Sequent). +# It gets checked for in the link test anyway. + +# First of all, check if the user has set any of the PTHREAD_LIBS, +# etcetera environment variables, and if threads linking works using +# them: +if test "x$PTHREAD_CFLAGS$PTHREAD_LIBS" != "x"; then + ax_pthread_save_CC="$CC" + ax_pthread_save_CFLAGS="$CFLAGS" + ax_pthread_save_LIBS="$LIBS" + if test "x$PTHREAD_CC" != "x"; then : + CC="$PTHREAD_CC" +fi + CFLAGS="$CFLAGS $PTHREAD_CFLAGS" + LIBS="$PTHREAD_LIBS $LIBS" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_join using $CC $PTHREAD_CFLAGS $PTHREAD_LIBS" >&5 +$as_echo_n "checking for pthread_join using $CC $PTHREAD_CFLAGS $PTHREAD_LIBS... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char pthread_join (); +int +main () +{ +return pthread_join (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ax_pthread_ok=yes +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5 +$as_echo "$ax_pthread_ok" >&6; } + if test "x$ax_pthread_ok" = "xno"; then + PTHREAD_LIBS="" + PTHREAD_CFLAGS="" + fi + CC="$ax_pthread_save_CC" + CFLAGS="$ax_pthread_save_CFLAGS" + LIBS="$ax_pthread_save_LIBS" +fi + +# We must check for the threads library under a number of different +# names; the ordering is very important because some systems +# (e.g. DEC) have both -lpthread and -lpthreads, where one of the +# libraries is broken (non-POSIX). + +# Create a list of thread flags to try. Items starting with a "-" are +# C compiler flags, and other items are library names, except for "none" +# which indicates that we try without any flags at all, and "pthread-config" +# which is a program returning the flags for the Pth emulation library. + +ax_pthread_flags="pthreads none -Kthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config" + +# The ordering *is* (sometimes) important. Some notes on the +# individual items follow: + +# pthreads: AIX (must check this before -lpthread) +# none: in case threads are in libc; should be tried before -Kthread and +# other compiler flags to prevent continual compiler warnings +# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h) +# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads), Tru64 +# (Note: HP C rejects this with "bad form for `-t' option") +# -pthreads: Solaris/gcc (Note: HP C also rejects) +# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it +# doesn't hurt to check since this sometimes defines pthreads and +# -D_REENTRANT too), HP C (must be checked before -lpthread, which +# is present but should not be used directly; and before -mthreads, +# because the compiler interprets this as "-mt" + "-hreads") +# -mthreads: Mingw32/gcc, Lynx/gcc +# pthread: Linux, etcetera +# --thread-safe: KAI C++ +# pthread-config: use pthread-config program (for GNU Pth library) + +case $host_os in + + freebsd*) + + # -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able) + # lthread: LinuxThreads port on FreeBSD (also preferred to -pthread) + + ax_pthread_flags="-kthread lthread $ax_pthread_flags" + ;; + + hpux*) + + # From the cc(1) man page: "[-mt] Sets various -D flags to enable + # multi-threading and also sets -lpthread." + + ax_pthread_flags="-mt -pthread pthread $ax_pthread_flags" + ;; + + openedition*) + + # IBM z/OS requires a feature-test macro to be defined in order to + # enable POSIX threads at all, so give the user a hint if this is + # not set. (We don't define these ourselves, as they can affect + # other portions of the system API in unpredictable ways.) + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +# if !defined(_OPEN_THREADS) && !defined(_UNIX03_THREADS) + AX_PTHREAD_ZOS_MISSING +# endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "AX_PTHREAD_ZOS_MISSING" >/dev/null 2>&1; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: IBM z/OS requires -D_OPEN_THREADS or -D_UNIX03_THREADS to enable pthreads support." >&5 +$as_echo "$as_me: WARNING: IBM z/OS requires -D_OPEN_THREADS or -D_UNIX03_THREADS to enable pthreads support." >&2;} +fi +rm -f conftest* + + ;; + + solaris*) + + # On Solaris (at least, for some versions), libc contains stubbed + # (non-functional) versions of the pthreads routines, so link-based + # tests will erroneously succeed. (N.B.: The stubs are missing + # pthread_cleanup_push, or rather a function called by this macro, + # so we could check for that, but who knows whether they'll stub + # that too in a future libc.) So we'll check first for the + # standard Solaris way of linking pthreads (-mt -lpthread). + + ax_pthread_flags="-mt,pthread pthread $ax_pthread_flags" + ;; +esac + +# GCC generally uses -pthread, or -pthreads on some platforms (e.g. SPARC) + +if test "x$GCC" = "xyes"; then : + ax_pthread_flags="-pthread -pthreads $ax_pthread_flags" +fi + +# The presence of a feature test macro requesting re-entrant function +# definitions is, on some systems, a strong hint that pthreads support is +# correctly enabled + +case $host_os in + darwin* | hpux* | linux* | osf* | solaris*) + ax_pthread_check_macro="_REENTRANT" + ;; + + aix*) + ax_pthread_check_macro="_THREAD_SAFE" + ;; + + *) + ax_pthread_check_macro="--" + ;; +esac +if test "x$ax_pthread_check_macro" = "x--"; then : + ax_pthread_check_cond=0 +else + ax_pthread_check_cond="!defined($ax_pthread_check_macro)" +fi + +# Are we compiling with Clang? + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC is Clang" >&5 +$as_echo_n "checking whether $CC is Clang... " >&6; } +if ${ax_cv_PTHREAD_CLANG+:} false; then : + $as_echo_n "(cached) " >&6 +else + ax_cv_PTHREAD_CLANG=no + # Note that Autoconf sets GCC=yes for Clang as well as GCC + if test "x$GCC" = "xyes"; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Note: Clang 2.7 lacks __clang_[a-z]+__ */ +# if defined(__clang__) && defined(__llvm__) + AX_PTHREAD_CC_IS_CLANG +# endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "AX_PTHREAD_CC_IS_CLANG" >/dev/null 2>&1; then : + ax_cv_PTHREAD_CLANG=yes +fi +rm -f conftest* + + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_CLANG" >&5 +$as_echo "$ax_cv_PTHREAD_CLANG" >&6; } +ax_pthread_clang="$ax_cv_PTHREAD_CLANG" + +ax_pthread_clang_warning=no + +# Clang needs special handling, because older versions handle the -pthread +# option in a rather... idiosyncratic way + +if test "x$ax_pthread_clang" = "xyes"; then + + # Clang takes -pthread; it has never supported any other flag + + # (Note 1: This will need to be revisited if a system that Clang + # supports has POSIX threads in a separate library. This tends not + # to be the way of modern systems, but it's conceivable.) + + # (Note 2: On some systems, notably Darwin, -pthread is not needed + # to get POSIX threads support; the API is always present and + # active. We could reasonably leave PTHREAD_CFLAGS empty. But + # -pthread does define _REENTRANT, and while the Darwin headers + # ignore this macro, third-party headers might not.) + + PTHREAD_CFLAGS="-pthread" + PTHREAD_LIBS= + + ax_pthread_ok=yes + + # However, older versions of Clang make a point of warning the user + # that, in an invocation where only linking and no compilation is + # taking place, the -pthread option has no effect ("argument unused + # during compilation"). They expect -pthread to be passed in only + # when source code is being compiled. + # + # Problem is, this is at odds with the way Automake and most other + # C build frameworks function, which is that the same flags used in + # compilation (CFLAGS) are also used in linking. Many systems + # supported by AX_PTHREAD require exactly this for POSIX threads + # support, and in fact it is often not straightforward to specify a + # flag that is used only in the compilation phase and not in + # linking. Such a scenario is extremely rare in practice. + # + # Even though use of the -pthread flag in linking would only print + # a warning, this can be a nuisance for well-run software projects + # that build with -Werror. So if the active version of Clang has + # this misfeature, we search for an option to squash it. + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether Clang needs flag to prevent \"argument unused\" warning when linking with -pthread" >&5 +$as_echo_n "checking whether Clang needs flag to prevent \"argument unused\" warning when linking with -pthread... " >&6; } +if ${ax_cv_PTHREAD_CLANG_NO_WARN_FLAG+:} false; then : + $as_echo_n "(cached) " >&6 +else + ax_cv_PTHREAD_CLANG_NO_WARN_FLAG=unknown + # Create an alternate version of $ac_link that compiles and + # links in two steps (.c -> .o, .o -> exe) instead of one + # (.c -> exe), because the warning occurs only in the second + # step + ax_pthread_save_ac_link="$ac_link" + ax_pthread_sed='s/conftest\.\$ac_ext/conftest.$ac_objext/g' + ax_pthread_link_step=`$as_echo "$ac_link" | sed "$ax_pthread_sed"` + ax_pthread_2step_ac_link="($ac_compile) && (echo ==== >&5) && ($ax_pthread_link_step)" + ax_pthread_save_CFLAGS="$CFLAGS" + for ax_pthread_try in '' -Qunused-arguments -Wno-unused-command-line-argument unknown; do + if test "x$ax_pthread_try" = "xunknown"; then : + break +fi + CFLAGS="-Werror -Wunknown-warning-option $ax_pthread_try -pthread $ax_pthread_save_CFLAGS" + ac_link="$ax_pthread_save_ac_link" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int main(void){return 0;} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_link="$ax_pthread_2step_ac_link" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int main(void){return 0;} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + break +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + done + ac_link="$ax_pthread_save_ac_link" + CFLAGS="$ax_pthread_save_CFLAGS" + if test "x$ax_pthread_try" = "x"; then : + ax_pthread_try=no +fi + ax_cv_PTHREAD_CLANG_NO_WARN_FLAG="$ax_pthread_try" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" >&5 +$as_echo "$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" >&6; } + + case "$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" in + no | unknown) ;; + *) PTHREAD_CFLAGS="$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG $PTHREAD_CFLAGS" ;; + esac + +fi # $ax_pthread_clang = yes + +if test "x$ax_pthread_ok" = "xno"; then +for ax_pthread_try_flag in $ax_pthread_flags; do + + case $ax_pthread_try_flag in + none) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work without any flags" >&5 +$as_echo_n "checking whether pthreads work without any flags... " >&6; } + ;; + + -mt,pthread) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with -mt -lpthread" >&5 +$as_echo_n "checking whether pthreads work with -mt -lpthread... " >&6; } + PTHREAD_CFLAGS="-mt" + PTHREAD_LIBS="-lpthread" + ;; + + -*) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with $ax_pthread_try_flag" >&5 +$as_echo_n "checking whether pthreads work with $ax_pthread_try_flag... " >&6; } + PTHREAD_CFLAGS="$ax_pthread_try_flag" + ;; + + pthread-config) + # Extract the first word of "pthread-config", so it can be a program name with args. +set dummy pthread-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ax_pthread_config+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ax_pthread_config"; then + ac_cv_prog_ax_pthread_config="$ax_pthread_config" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ax_pthread_config="yes" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_prog_ax_pthread_config" && ac_cv_prog_ax_pthread_config="no" +fi +fi +ax_pthread_config=$ac_cv_prog_ax_pthread_config +if test -n "$ax_pthread_config"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_config" >&5 +$as_echo "$ax_pthread_config" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$ax_pthread_config" = "xno"; then : + continue +fi + PTHREAD_CFLAGS="`pthread-config --cflags`" + PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" + ;; + + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the pthreads library -l$ax_pthread_try_flag" >&5 +$as_echo_n "checking for the pthreads library -l$ax_pthread_try_flag... " >&6; } + PTHREAD_LIBS="-l$ax_pthread_try_flag" + ;; + esac + + ax_pthread_save_CFLAGS="$CFLAGS" + ax_pthread_save_LIBS="$LIBS" + CFLAGS="$CFLAGS $PTHREAD_CFLAGS" + LIBS="$PTHREAD_LIBS $LIBS" + + # Check for various functions. We must include pthread.h, + # since some functions may be macros. (On the Sequent, we + # need a special flag -Kthread to make this header compile.) + # We check for pthread_join because it is in -lpthread on IRIX + # while pthread_create is in libc. We check for pthread_attr_init + # due to DEC craziness with -lpthreads. We check for + # pthread_cleanup_push because it is one of the few pthread + # functions on Solaris that doesn't have a non-functional libc stub. + # We try pthread_create on general principles. + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <pthread.h> +# if $ax_pthread_check_cond +# error "$ax_pthread_check_macro must be defined" +# endif + static void routine(void *a) { a = 0; } + static void *start_routine(void *a) { return a; } +int +main () +{ +pthread_t th; pthread_attr_t attr; + pthread_create(&th, 0, start_routine, 0); + pthread_join(th, 0); + pthread_attr_init(&attr); + pthread_cleanup_push(routine, 0); + pthread_cleanup_pop(0) /* ; */ + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ax_pthread_ok=yes +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + + CFLAGS="$ax_pthread_save_CFLAGS" + LIBS="$ax_pthread_save_LIBS" + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5 +$as_echo "$ax_pthread_ok" >&6; } + if test "x$ax_pthread_ok" = "xyes"; then : + break +fi + + PTHREAD_LIBS="" + PTHREAD_CFLAGS="" +done +fi + +# Various other checks: +if test "x$ax_pthread_ok" = "xyes"; then + ax_pthread_save_CFLAGS="$CFLAGS" + ax_pthread_save_LIBS="$LIBS" + CFLAGS="$CFLAGS $PTHREAD_CFLAGS" + LIBS="$PTHREAD_LIBS $LIBS" + + # Detect AIX lossage: JOINABLE attribute is called UNDETACHED. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for joinable pthread attribute" >&5 +$as_echo_n "checking for joinable pthread attribute... " >&6; } +if ${ax_cv_PTHREAD_JOINABLE_ATTR+:} false; then : + $as_echo_n "(cached) " >&6 +else + ax_cv_PTHREAD_JOINABLE_ATTR=unknown + for ax_pthread_attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <pthread.h> +int +main () +{ +int attr = $ax_pthread_attr; return attr /* ; */ + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ax_cv_PTHREAD_JOINABLE_ATTR=$ax_pthread_attr; break +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + done + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_JOINABLE_ATTR" >&5 +$as_echo "$ax_cv_PTHREAD_JOINABLE_ATTR" >&6; } + if test "x$ax_cv_PTHREAD_JOINABLE_ATTR" != "xunknown" && \ + test "x$ax_cv_PTHREAD_JOINABLE_ATTR" != "xPTHREAD_CREATE_JOINABLE" && \ + test "x$ax_pthread_joinable_attr_defined" != "xyes"; then : + +cat >>confdefs.h <<_ACEOF +#define PTHREAD_CREATE_JOINABLE $ax_cv_PTHREAD_JOINABLE_ATTR +_ACEOF + + ax_pthread_joinable_attr_defined=yes + +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether more special flags are required for pthreads" >&5 +$as_echo_n "checking whether more special flags are required for pthreads... " >&6; } +if ${ax_cv_PTHREAD_SPECIAL_FLAGS+:} false; then : + $as_echo_n "(cached) " >&6 +else + ax_cv_PTHREAD_SPECIAL_FLAGS=no + case $host_os in + solaris*) + ax_cv_PTHREAD_SPECIAL_FLAGS="-D_POSIX_PTHREAD_SEMANTICS" + ;; + esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_SPECIAL_FLAGS" >&5 +$as_echo "$ax_cv_PTHREAD_SPECIAL_FLAGS" >&6; } + if test "x$ax_cv_PTHREAD_SPECIAL_FLAGS" != "xno" && \ + test "x$ax_pthread_special_flags_added" != "xyes"; then : + PTHREAD_CFLAGS="$ax_cv_PTHREAD_SPECIAL_FLAGS $PTHREAD_CFLAGS" + ax_pthread_special_flags_added=yes +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PTHREAD_PRIO_INHERIT" >&5 +$as_echo_n "checking for PTHREAD_PRIO_INHERIT... " >&6; } +if ${ax_cv_PTHREAD_PRIO_INHERIT+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <pthread.h> +int +main () +{ +int i = PTHREAD_PRIO_INHERIT; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ax_cv_PTHREAD_PRIO_INHERIT=yes +else + ax_cv_PTHREAD_PRIO_INHERIT=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_PRIO_INHERIT" >&5 +$as_echo "$ax_cv_PTHREAD_PRIO_INHERIT" >&6; } + if test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes" && \ + test "x$ax_pthread_prio_inherit_defined" != "xyes"; then : + +$as_echo "#define HAVE_PTHREAD_PRIO_INHERIT 1" >>confdefs.h + + ax_pthread_prio_inherit_defined=yes + +fi + + CFLAGS="$ax_pthread_save_CFLAGS" + LIBS="$ax_pthread_save_LIBS" + + # More AIX lossage: compile with *_r variant + if test "x$GCC" != "xyes"; then + case $host_os in + aix*) + case "x/$CC" in #( + x*/c89|x*/c89_128|x*/c99|x*/c99_128|x*/cc|x*/cc128|x*/xlc|x*/xlc_v6|x*/xlc128|x*/xlc128_v6) : + #handle absolute path differently from PATH based program lookup + case "x$CC" in #( + x/*) : + if as_fn_executable_p ${CC}_r; then : + PTHREAD_CC="${CC}_r" +fi ;; #( + *) : + for ac_prog in ${CC}_r +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_PTHREAD_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$PTHREAD_CC"; then + ac_cv_prog_PTHREAD_CC="$PTHREAD_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_PTHREAD_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +PTHREAD_CC=$ac_cv_prog_PTHREAD_CC +if test -n "$PTHREAD_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PTHREAD_CC" >&5 +$as_echo "$PTHREAD_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$PTHREAD_CC" && break +done +test -n "$PTHREAD_CC" || PTHREAD_CC="$CC" + ;; +esac ;; #( + *) : + ;; +esac + ;; + esac + fi +fi + +test -n "$PTHREAD_CC" || PTHREAD_CC="$CC" + + + + + +# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: +if test "x$ax_pthread_ok" = "xyes"; then + threads=yes + : +else + ax_pthread_ok=no + threads=no +fi +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + + if test "$threads" = "yes"; then + save_LIBS="$LIBS" + LIBS="$PTHREAD_LIBS $LIBS" + save_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$PTHREAD_CFLAGS $save_CXXFLAGS" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for std::thread" >&5 +$as_echo_n "checking for std::thread... " >&6; } +if ${gdb_cv_cxx_std_thread+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <thread> + void callback() { } +int +main () +{ +std::thread t(callback); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + gdb_cv_cxx_std_thread=yes +else + gdb_cv_cxx_std_thread=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_cxx_std_thread" >&5 +$as_echo "$gdb_cv_cxx_std_thread" >&6; } + + # This check must be here, while LIBS includes any necessary + # threading library. + for ac_func in pthread_sigmask pthread_setname_np +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_cxx_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + + LIBS="$save_LIBS" + CXXFLAGS="$save_CXXFLAGS" + fi + if test "$gdb_cv_cxx_std_thread" = "yes"; then + +$as_echo "#define CXX_STD_THREAD 1" >>confdefs.h + + fi + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sigsetjmp" >&5 +$as_echo_n "checking for sigsetjmp... " >&6; } +if ${gdb_cv_func_sigsetjmp+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include <setjmp.h> + +int +main () +{ +sigjmp_buf env; while (! sigsetjmp (env, 1)) siglongjmp (env, 1); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gdb_cv_func_sigsetjmp=yes +else + gdb_cv_func_sigsetjmp=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_func_sigsetjmp" >&5 +$as_echo "$gdb_cv_func_sigsetjmp" >&6; } + if test "$gdb_cv_func_sigsetjmp" = "yes"; then + +$as_echo "#define HAVE_SIGSETJMP 1" >>confdefs.h + + fi + + +# Check whether --with-intel_pt was given. +if test "${with_intel_pt+set}" = set; then : + withval=$with_intel_pt; +else + with_intel_pt=auto +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use intel pt" >&5 +$as_echo_n "checking whether to use intel pt... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_intel_pt" >&5 +$as_echo "$with_intel_pt" >&6; } + + if test "${with_intel_pt}" = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Intel Processor Trace support disabled; some features may be unavailable." >&5 +$as_echo "$as_me: WARNING: Intel Processor Trace support disabled; some features may be unavailable." >&2;} + HAVE_LIBIPT=no + else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include <linux/perf_event.h> + #ifndef PERF_ATTR_SIZE_VER5 + # error + #endif + +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + perf_event=yes +else + perf_event=no +fi +rm -f conftest.err conftest.i conftest.$ac_ext + if test "$perf_event" != yes; then + if test "$with_intel_pt" = yes; then + as_fn_error $? "linux/perf_event.h missing or too old" "$LINENO" 5 + else + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: linux/perf_event.h missing or too old; some features may be unavailable." >&5 +$as_echo "$as_me: WARNING: linux/perf_event.h missing or too old; some features may be unavailable." >&2;} + fi + fi + + + + + + + + + + use_additional=yes + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + +# Check whether --with-libipt-prefix was given. +if test "${with_libipt_prefix+set}" = set; then : + withval=$with_libipt_prefix; + if test "X$withval" = "Xno"; then + use_additional=no + else + if test "X$withval" = "X"; then + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + else + additional_includedir="$withval/include" + additional_libdir="$withval/lib" + fi + fi + +fi + + +# Check whether --with-libipt-type was given. +if test "${with_libipt_type+set}" = set; then : + withval=$with_libipt_type; with_libipt_type=$withval +else + with_libipt_type=auto +fi + + lib_type=`eval echo \$with_libipt_type` + + LIBIPT= + LTLIBIPT= + INCIPT= + rpathdirs= + ltrpathdirs= + names_already_handled= + names_next_round='ipt ' + while test -n "$names_next_round"; do + names_this_round="$names_next_round" + names_next_round= + for name in $names_this_round; do + already_handled= + for n in $names_already_handled; do + if test "$n" = "$name"; then + already_handled=yes + break + fi + done + if test -z "$already_handled"; then + names_already_handled="$names_already_handled $name" + uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` + eval value=\"\$HAVE_LIB$uppername\" + if test -n "$value"; then + if test "$value" = yes; then + eval value=\"\$LIB$uppername\" + test -z "$value" || LIBIPT="${LIBIPT}${LIBIPT:+ }$value" + eval value=\"\$LTLIB$uppername\" + test -z "$value" || LTLIBIPT="${LTLIBIPT}${LTLIBIPT:+ }$value" + else + : + fi + else + found_dir= + found_la= + found_so= + found_a= + if test $use_additional = yes; then + if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext" && test x$lib_type != xstatic; then + found_dir="$additional_libdir" + found_so="$additional_libdir/lib$name.$shlibext" + if test -f "$additional_libdir/lib$name.la"; then + found_la="$additional_libdir/lib$name.la" + fi + elif test x$lib_type != xshared; then + if test -f "$additional_libdir/lib$name.$libext"; then + found_dir="$additional_libdir" + found_a="$additional_libdir/lib$name.$libext" + if test -f "$additional_libdir/lib$name.la"; then + found_la="$additional_libdir/lib$name.la" + fi + fi + fi + fi + if test "X$found_dir" = "X"; then + for x in $LDFLAGS $LTLIBIPT; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + case "$x" in + -L*) + dir=`echo "X$x" | sed -e 's/^X-L//'` + if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext" && test x$lib_type != xstatic; then + found_dir="$dir" + found_so="$dir/lib$name.$shlibext" + if test -f "$dir/lib$name.la"; then + found_la="$dir/lib$name.la" + fi + elif test x$lib_type != xshared; then + if test -f "$dir/lib$name.$libext"; then + found_dir="$dir" + found_a="$dir/lib$name.$libext" + if test -f "$dir/lib$name.la"; then + found_la="$dir/lib$name.la" + fi + fi + fi + ;; + esac + if test "X$found_dir" != "X"; then + break + fi + done + fi + if test "X$found_dir" != "X"; then + LTLIBIPT="${LTLIBIPT}${LTLIBIPT:+ }-L$found_dir -l$name" + if test "X$found_so" != "X"; then + if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then + LIBIPT="${LIBIPT}${LIBIPT:+ }$found_so" + else + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $found_dir" + fi + if test "$hardcode_direct" = yes; then + LIBIPT="${LIBIPT}${LIBIPT:+ }$found_so" + else + if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then + LIBIPT="${LIBIPT}${LIBIPT:+ }$found_so" + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $found_dir" + fi + else + haveit= + for x in $LDFLAGS $LIBIPT; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + LIBIPT="${LIBIPT}${LIBIPT:+ }-L$found_dir" + fi + if test "$hardcode_minus_L" != no; then + LIBIPT="${LIBIPT}${LIBIPT:+ }$found_so" + else + LIBIPT="${LIBIPT}${LIBIPT:+ }-l$name" + fi + fi + fi + fi + else + if test "X$found_a" != "X"; then + LIBIPT="${LIBIPT}${LIBIPT:+ }$found_a" + else + LIBIPT="${LIBIPT}${LIBIPT:+ }-L$found_dir -l$name" + fi + fi + additional_includedir= + case "$found_dir" in + */lib | */lib/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'` + additional_includedir="$basedir/include" + ;; + esac + if test "X$additional_includedir" != "X"; then + if test "X$additional_includedir" != "X/usr/include"; then + haveit= + if test "X$additional_includedir" = "X/usr/local/include"; then + if test -n "$GCC"; then + case $host_os in + linux*) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + for x in $CPPFLAGS $INCIPT; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-I$additional_includedir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_includedir"; then + INCIPT="${INCIPT}${INCIPT:+ }-I$additional_includedir" + fi + fi + fi + fi + fi + if test -n "$found_la"; then + save_libdir="$libdir" + case "$found_la" in + */* | *\\*) . "$found_la" ;; + *) . "./$found_la" ;; + esac + libdir="$save_libdir" + for dep in $dependency_libs; do + case "$dep" in + -L*) + additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` + if test "X$additional_libdir" != "X/usr/lib"; then + haveit= + if test "X$additional_libdir" = "X/usr/local/lib"; then + if test -n "$GCC"; then + case $host_os in + linux*) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + haveit= + for x in $LDFLAGS $LIBIPT; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + LIBIPT="${LIBIPT}${LIBIPT:+ }-L$additional_libdir" + fi + fi + haveit= + for x in $LDFLAGS $LTLIBIPT; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + LTLIBIPT="${LTLIBIPT}${LTLIBIPT:+ }-L$additional_libdir" + fi + fi + fi + fi + ;; + -R*) + dir=`echo "X$dep" | sed -e 's/^X-R//'` + if test "$enable_rpath" != no; then + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $dir" + fi + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $dir" + fi + fi + ;; + -l*) + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` + ;; + *.la) + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` + ;; + *) + LIBIPT="${LIBIPT}${LIBIPT:+ }$dep" + LTLIBIPT="${LTLIBIPT}${LTLIBIPT:+ }$dep" + ;; + esac + done + fi + else + if test "x$lib_type" = "xauto" || test "x$lib_type" = "xshared"; then + LIBIPT="${LIBIPT}${LIBIPT:+ }-l$name" + LTLIBIPT="${LTLIBIPT}${LTLIBIPT:+ }-l$name" + else + LIBIPT="${LIBIPT}${LIBIPT:+ }-l:lib$name.$libext" + LTLIBIPT="${LTLIBIPT}${LTLIBIPT:+ }-l:lib$name.$libext" + fi + fi + fi + fi + done + done + if test "X$rpathdirs" != "X"; then + if test -n "$hardcode_libdir_separator"; then + alldirs= + for found_dir in $rpathdirs; do + alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir" + done + acl_save_libdir="$libdir" + libdir="$alldirs" + eval flag=\"$hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIBIPT="${LIBIPT}${LIBIPT:+ }$flag" + else + for found_dir in $rpathdirs; do + acl_save_libdir="$libdir" + libdir="$found_dir" + eval flag=\"$hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIBIPT="${LIBIPT}${LIBIPT:+ }$flag" + done + fi + fi + if test "X$ltrpathdirs" != "X"; then + for found_dir in $ltrpathdirs; do + LTLIBIPT="${LTLIBIPT}${LTLIBIPT:+ }-R$found_dir" + done + fi + + + ac_save_CPPFLAGS="$CPPFLAGS" + + for element in $INCIPT; do + haveit= + for x in $CPPFLAGS; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X$element"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" + fi + done + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libipt" >&5 +$as_echo_n "checking for libipt... " >&6; } +if ${ac_cv_libipt+:} false; then : + $as_echo_n "(cached) " >&6 +else + + ac_save_LIBS="$LIBS" + LIBS="$LIBS $LIBIPT" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include "intel-pt.h" +int +main () +{ +pt_insn_alloc_decoder (0); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_libipt=yes +else + ac_cv_libipt=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LIBS="$ac_save_LIBS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_libipt" >&5 +$as_echo "$ac_cv_libipt" >&6; } + if test "$ac_cv_libipt" = yes; then + HAVE_LIBIPT=yes + +$as_echo "#define HAVE_LIBIPT 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libipt" >&5 +$as_echo_n "checking how to link with libipt... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBIPT" >&5 +$as_echo "$LIBIPT" >&6; } + else + HAVE_LIBIPT=no + CPPFLAGS="$ac_save_CPPFLAGS" + LIBIPT= + LTLIBIPT= + fi + + + + + + + if test "$HAVE_LIBIPT" != yes; then + if test "$with_intel_pt" = yes; then + as_fn_error $? "libipt is missing or unusable" "$LINENO" 5 + else + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: libipt is missing or unusable; some features may be unavailable." >&5 +$as_echo "$as_me: WARNING: libipt is missing or unusable; some features may be unavailable." >&2;} + fi + else + save_LIBS=$LIBS + LIBS="$LIBS $LIBIPT" + for ac_func in pt_insn_event +do : + ac_fn_c_check_func "$LINENO" "pt_insn_event" "ac_cv_func_pt_insn_event" +if test "x$ac_cv_func_pt_insn_event" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_PT_INSN_EVENT 1 +_ACEOF + +fi +done + + ac_fn_c_check_member "$LINENO" "struct pt_insn" "enabled" "ac_cv_member_struct_pt_insn_enabled" "#include <intel-pt.h> +" +if test "x$ac_cv_member_struct_pt_insn_enabled" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_PT_INSN_ENABLED 1 +_ACEOF + + +fi +ac_fn_c_check_member "$LINENO" "struct pt_insn" "resynced" "ac_cv_member_struct_pt_insn_resynced" "#include <intel-pt.h> +" +if test "x$ac_cv_member_struct_pt_insn_resynced" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_PT_INSN_RESYNCED 1 +_ACEOF + + +fi + + LIBS=$save_LIBS + fi + fi + + +$as_echo "#define _STRUCTURED_PROC 1" >>confdefs.h + + for ac_header in sys/procfs.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "sys/procfs.h" "ac_cv_header_sys_procfs_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_procfs_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SYS_PROCFS_H 1 +_ACEOF + +fi + +done + + if test "$ac_cv_header_sys_procfs_h" = yes; then + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gregset_t in sys/procfs.h" >&5 +$as_echo_n "checking for gregset_t in sys/procfs.h... " >&6; } + if ${bfd_cv_have_sys_procfs_type_gregset_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#define _SYSCALL32 +#include <sys/procfs.h> +int +main () +{ +gregset_t avar + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + bfd_cv_have_sys_procfs_type_gregset_t=yes +else + bfd_cv_have_sys_procfs_type_gregset_t=no + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + + if test $bfd_cv_have_sys_procfs_type_gregset_t = yes; then + +$as_echo "#define HAVE_GREGSET_T 1" >>confdefs.h + + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_gregset_t" >&5 +$as_echo "$bfd_cv_have_sys_procfs_type_gregset_t" >&6; } + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fpregset_t in sys/procfs.h" >&5 +$as_echo_n "checking for fpregset_t in sys/procfs.h... " >&6; } + if ${bfd_cv_have_sys_procfs_type_fpregset_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#define _SYSCALL32 +#include <sys/procfs.h> +int +main () +{ +fpregset_t avar + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + bfd_cv_have_sys_procfs_type_fpregset_t=yes +else + bfd_cv_have_sys_procfs_type_fpregset_t=no + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + + if test $bfd_cv_have_sys_procfs_type_fpregset_t = yes; then + +$as_echo "#define HAVE_FPREGSET_T 1" >>confdefs.h + + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_fpregset_t" >&5 +$as_echo "$bfd_cv_have_sys_procfs_type_fpregset_t" >&6; } + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for prgregset_t in sys/procfs.h" >&5 +$as_echo_n "checking for prgregset_t in sys/procfs.h... " >&6; } + if ${bfd_cv_have_sys_procfs_type_prgregset_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#define _SYSCALL32 +#include <sys/procfs.h> +int +main () +{ +prgregset_t avar + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + bfd_cv_have_sys_procfs_type_prgregset_t=yes +else + bfd_cv_have_sys_procfs_type_prgregset_t=no + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + + if test $bfd_cv_have_sys_procfs_type_prgregset_t = yes; then + +$as_echo "#define HAVE_PRGREGSET_T 1" >>confdefs.h + + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_prgregset_t" >&5 +$as_echo "$bfd_cv_have_sys_procfs_type_prgregset_t" >&6; } + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for prfpregset_t in sys/procfs.h" >&5 +$as_echo_n "checking for prfpregset_t in sys/procfs.h... " >&6; } + if ${bfd_cv_have_sys_procfs_type_prfpregset_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#define _SYSCALL32 +#include <sys/procfs.h> +int +main () +{ +prfpregset_t avar + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + bfd_cv_have_sys_procfs_type_prfpregset_t=yes +else + bfd_cv_have_sys_procfs_type_prfpregset_t=no + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + + if test $bfd_cv_have_sys_procfs_type_prfpregset_t = yes; then + +$as_echo "#define HAVE_PRFPREGSET_T 1" >>confdefs.h + + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_prfpregset_t" >&5 +$as_echo "$bfd_cv_have_sys_procfs_type_prfpregset_t" >&6; } + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for prgregset32_t in sys/procfs.h" >&5 +$as_echo_n "checking for prgregset32_t in sys/procfs.h... " >&6; } + if ${bfd_cv_have_sys_procfs_type_prgregset32_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#define _SYSCALL32 +#include <sys/procfs.h> +int +main () +{ +prgregset32_t avar + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + bfd_cv_have_sys_procfs_type_prgregset32_t=yes +else + bfd_cv_have_sys_procfs_type_prgregset32_t=no + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + + if test $bfd_cv_have_sys_procfs_type_prgregset32_t = yes; then + +$as_echo "#define HAVE_PRGREGSET32_T 1" >>confdefs.h + + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_prgregset32_t" >&5 +$as_echo "$bfd_cv_have_sys_procfs_type_prgregset32_t" >&6; } + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lwpid_t in sys/procfs.h" >&5 +$as_echo_n "checking for lwpid_t in sys/procfs.h... " >&6; } + if ${bfd_cv_have_sys_procfs_type_lwpid_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#define _SYSCALL32 +#include <sys/procfs.h> +int +main () +{ +lwpid_t avar + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + bfd_cv_have_sys_procfs_type_lwpid_t=yes +else + bfd_cv_have_sys_procfs_type_lwpid_t=no + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + + if test $bfd_cv_have_sys_procfs_type_lwpid_t = yes; then + +$as_echo "#define HAVE_LWPID_T 1" >>confdefs.h + + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_lwpid_t" >&5 +$as_echo "$bfd_cv_have_sys_procfs_type_lwpid_t" >&6; } + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for psaddr_t in sys/procfs.h" >&5 +$as_echo_n "checking for psaddr_t in sys/procfs.h... " >&6; } + if ${bfd_cv_have_sys_procfs_type_psaddr_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#define _SYSCALL32 +#include <sys/procfs.h> +int +main () +{ +psaddr_t avar + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + bfd_cv_have_sys_procfs_type_psaddr_t=yes +else + bfd_cv_have_sys_procfs_type_psaddr_t=no + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + + if test $bfd_cv_have_sys_procfs_type_psaddr_t = yes; then + +$as_echo "#define HAVE_PSADDR_T 1" >>confdefs.h + + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_psaddr_t" >&5 +$as_echo "$bfd_cv_have_sys_procfs_type_psaddr_t" >&6; } + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for elf_fpregset_t in sys/procfs.h" >&5 +$as_echo_n "checking for elf_fpregset_t in sys/procfs.h... " >&6; } + if ${bfd_cv_have_sys_procfs_type_elf_fpregset_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#define _SYSCALL32 +#include <sys/procfs.h> +int +main () +{ +elf_fpregset_t avar + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + bfd_cv_have_sys_procfs_type_elf_fpregset_t=yes +else + bfd_cv_have_sys_procfs_type_elf_fpregset_t=no + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + + if test $bfd_cv_have_sys_procfs_type_elf_fpregset_t = yes; then + +$as_echo "#define HAVE_ELF_FPREGSET_T 1" >>confdefs.h + + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_elf_fpregset_t" >&5 +$as_echo "$bfd_cv_have_sys_procfs_type_elf_fpregset_t" >&6; } + + fi + + +# Check whether we will enable the inclusion of unit tests when +# compiling GDB. +# +# The default value of this option changes depending whether we're on +# development mode (in which case it's "true") or not (in which case +# it's "false"). The $development variable is set by the GDB_AC_COMMON +# macro, which must therefore be used before GDB_AC_SELFTEST. + +if test "x$development" != xtrue && test "x$development" != xfalse; then : + as_fn_error $? "Invalid value for \$development, got \"$development\", expecting \"true\" or \"false\"." "$LINENO" 5 +fi + +# Check whether --enable-unit-tests was given. +if test "${enable_unit_tests+set}" = set; then : + enableval=$enable_unit_tests; case "${enableval}" in + yes) enable_unittests=true ;; + no) enable_unittests=false ;; + *) as_fn_error $? "bad value ${enableval} for --{enable,disable}-unit-tests option" "$LINENO" 5 ;; +esac +else + enable_unittests=$development +fi + + +if $enable_unittests; then + +$as_echo "#define GDB_SELF_TEST 1" >>confdefs.h + + +fi + + if $enable_unittests; then + SELFTEST_TRUE= + SELFTEST_FALSE='#' +else + SELFTEST_TRUE='#' + SELFTEST_FALSE= +fi + + +# Check the return and argument types of ptrace. + + +for ac_header in sys/ptrace.h ptrace.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +gdb_ptrace_headers=' +#include <sys/types.h> +#if HAVE_SYS_PTRACE_H +# include <sys/ptrace.h> +#endif +#if HAVE_UNISTD_H +# include <unistd.h> +#endif +' + +# Check return type. Varargs (used on GNU/Linux) conflict with the +# empty argument list, so check for that explicitly. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking return type of ptrace" >&5 +$as_echo_n "checking return type of ptrace... " >&6; } +if ${gdb_cv_func_ptrace_ret+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$gdb_ptrace_headers +int +main () +{ +extern long ptrace (enum __ptrace_request, ...); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gdb_cv_func_ptrace_ret='long' +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$gdb_ptrace_headers +int +main () +{ +extern int ptrace (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gdb_cv_func_ptrace_ret='int' +else + gdb_cv_func_ptrace_ret='long' +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_func_ptrace_ret" >&5 +$as_echo "$gdb_cv_func_ptrace_ret" >&6; } + +cat >>confdefs.h <<_ACEOF +#define PTRACE_TYPE_RET $gdb_cv_func_ptrace_ret +_ACEOF + +# Check argument types. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking types of arguments for ptrace" >&5 +$as_echo_n "checking types of arguments for ptrace... " >&6; } +if ${gdb_cv_func_ptrace_args+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$gdb_ptrace_headers +int +main () +{ +extern long ptrace (enum __ptrace_request, ...); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gdb_cv_func_ptrace_args='enum __ptrace_request,int,long,long' +else + +for gdb_arg1 in 'int' 'long'; do + for gdb_arg2 in 'pid_t' 'int' 'long'; do + for gdb_arg3 in 'int *' 'caddr_t' 'int' 'long' 'void *'; do + for gdb_arg4 in 'int' 'long' 'void *'; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$gdb_ptrace_headers +int +main () +{ + +extern $gdb_cv_func_ptrace_ret + ptrace ($gdb_arg1, $gdb_arg2, $gdb_arg3, $gdb_arg4); + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gdb_cv_func_ptrace_args="$gdb_arg1,$gdb_arg2,$gdb_arg3,$gdb_arg4"; + break 4; +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + for gdb_arg5 in 'int *' 'int' 'long'; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$gdb_ptrace_headers +int +main () +{ + +extern $gdb_cv_func_ptrace_ret + ptrace ($gdb_arg1, $gdb_arg2, $gdb_arg3, $gdb_arg4, $gdb_arg5); + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +gdb_cv_func_ptrace_args="$gdb_arg1,$gdb_arg2,$gdb_arg3,$gdb_arg4,$gdb_arg5"; + break 5; +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done + done + done + done +done +# Provide a safe default value. +: ${gdb_cv_func_ptrace_args='int,int,long,long'} + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_func_ptrace_args" >&5 +$as_echo "$gdb_cv_func_ptrace_args" >&6; } +ac_save_IFS=$IFS; IFS=',' +set dummy `echo "$gdb_cv_func_ptrace_args" | sed 's/\*/\*/g'` +IFS=$ac_save_IFS +shift + +cat >>confdefs.h <<_ACEOF +#define PTRACE_TYPE_ARG1 $1 +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PTRACE_TYPE_ARG3 $3 +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PTRACE_TYPE_ARG4 $4 +_ACEOF + +if test -n "$5"; then + +cat >>confdefs.h <<_ACEOF +#define PTRACE_TYPE_ARG5 $5 +_ACEOF + +fi + + +# Detect support warning flags. + +# Check whether --enable-werror was given. +if test "${enable_werror+set}" = set; then : + enableval=$enable_werror; case "${enableval}" in + yes | y) ERROR_ON_WARNING="yes" ;; + no | n) ERROR_ON_WARNING="no" ;; + *) as_fn_error $? "bad value ${enableval} for --enable-werror" "$LINENO" 5 ;; + esac +fi + + +# Enable -Werror by default when using gcc. Turn it off for releases. +if test "${GCC}" = yes -a -z "${ERROR_ON_WARNING}" && $development; then + ERROR_ON_WARNING=yes +fi + +WERROR_CFLAGS="" +if test "${ERROR_ON_WARNING}" = yes ; then + WERROR_CFLAGS="-Werror" +fi + +# The options we'll try to enable. +build_warnings="-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 \ +-Wno-error=deprecated-register \ +-Wsuggest-override \ +-Wimplicit-fallthrough=3 \ +-Wduplicated-cond \ +-Wshadow=local \ +-Wdeprecated-copy \ +-Wdeprecated-copy-dtor \ +-Wredundant-move \ +-Wmissing-declarations \ +-Wmissing-prototypes \ +-Wstrict-null-sentinel \ +" + +case "${host}" in + *-*-mingw32*) + # Enable -Wno-format by default when using gcc on mingw since many + # GCC versions complain about %I64. + build_warnings="$build_warnings -Wno-format" ;; + *-*-solaris*) + # Solaris 11.4 <python2.7/ceval.h> uses #pragma no_inline that GCC + # doesn't understand. + build_warnings="$build_warnings -Wno-unknown-pragmas" + # Solaris 11 <unistd.h> marks vfork deprecated. + build_warnings="$build_warnings -Wno-deprecated-declarations" ;; + *) + # Note that gcc requires -Wformat for -Wformat-nonliteral to work, + # but there's a special case for this below. + build_warnings="$build_warnings -Wformat-nonliteral" ;; +esac + +# Check whether --enable-build-warnings was given. +if test "${enable_build_warnings+set}" = set; then : + enableval=$enable_build_warnings; case "${enableval}" in + yes) ;; + no) build_warnings="-w";; + ,*) t=`echo "${enableval}" | sed -e "s/,/ /g"` + build_warnings="${build_warnings} ${t}";; + *,) t=`echo "${enableval}" | sed -e "s/,/ /g"` + build_warnings="${t} ${build_warnings}";; + *) build_warnings=`echo "${enableval}" | sed -e "s/,/ /g"`;; +esac +if test x"$silent" != x"yes" && test x"$build_warnings" != x""; then + echo "Setting compiler warning flags = $build_warnings" 6>&1 +fi +fi +# Check whether --enable-gdb-build-warnings was given. +if test "${enable_gdb_build_warnings+set}" = set; then : + enableval=$enable_gdb_build_warnings; case "${enableval}" in + yes) ;; + no) build_warnings="-w";; + ,*) t=`echo "${enableval}" | sed -e "s/,/ /g"` + build_warnings="${build_warnings} ${t}";; + *,) t=`echo "${enableval}" | sed -e "s/,/ /g"` + build_warnings="${t} ${build_warnings}";; + *) build_warnings=`echo "${enableval}" | sed -e "s/,/ /g"`;; +esac +if test x"$silent" != x"yes" && test x"$build_warnings" != x""; then + echo "Setting GDB specific compiler warning flags = $build_warnings" 6>&1 +fi +fi + +# The set of warnings supported by a C++ compiler is not the same as +# of the C compiler. +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + +WARN_CFLAGS="" +if test "x${build_warnings}" != x -a "x$GCC" = xyes +then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking compiler warning flags" >&5 +$as_echo_n "checking compiler warning flags... " >&6; } + # Separate out the -Werror flag as some files just cannot be + # compiled with it enabled. + for w in ${build_warnings}; do + # GCC does not complain about -Wno-unknown-warning. Invert + # and test -Wunknown-warning instead. + case $w in + -Wno-*) + wtest=`echo $w | sed 's/-Wno-/-W/g'` ;; + -Wformat-nonliteral) + # gcc requires -Wformat before -Wformat-nonliteral + # will work, so stick them together. + w="-Wformat $w" + wtest="$w" + ;; + *) + wtest=$w ;; + esac + + case $w in + -Werr*) WERROR_CFLAGS=-Werror ;; + *) + # Check whether GCC accepts it. + saved_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -Werror $wtest" + saved_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS -Werror $wtest" + if test "x$w" = "x-Wunused-variable"; then + # Check for https://gcc.gnu.org/bugzilla/show_bug.cgi?id=38958, + # fixed in GCC 4.9. This test is derived from the gdb + # source code that triggered this bug in GCC. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +struct scoped_restore_base {}; + struct scoped_restore_tmpl : public scoped_restore_base { + ~scoped_restore_tmpl() {} + }; +int +main () +{ +const scoped_restore_base &b = scoped_restore_tmpl(); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + WARN_CFLAGS="${WARN_CFLAGS} $w" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + WARN_CFLAGS="${WARN_CFLAGS} $w" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + CFLAGS="$saved_CFLAGS" + CXXFLAGS="$saved_CXXFLAGS" + esac + done + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${WARN_CFLAGS} ${WERROR_CFLAGS}" >&5 +$as_echo "${WARN_CFLAGS} ${WERROR_CFLAGS}" >&6; } +fi + + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + +TARGET_WORD_SIZE=`sed -n 's,#define BFD_ARCH_SIZE \(.*\)$,\1,p' ../bfd/bfd-in3.h` + +cat >>confdefs.h <<_ACEOF +#define TARGET_WORD_SIZE $TARGET_WORD_SIZE +_ACEOF + + +case ${host} in + *mingw32*) + +$as_echo "#define USE_WIN32API 1" >>confdefs.h + + ;; +esac + +ac_config_files="$ac_config_files Makefile" + +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, we kill variables containing newlines. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes: double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \. + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + if test "x$cache_file" != "x/dev/null"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} + if test ! -f "$cache_file" || test -h "$cache_file"; then + cat confcache >"$cache_file" + else + case $cache_file in #( + */* | ?:*) + mv -f confcache "$cache_file"$$ && + mv -f "$cache_file"$$ "$cache_file" ;; #( + *) + mv -f confcache "$cache_file" ;; + esac + fi + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +DEFS=-DHAVE_CONFIG_H + +ac_libobjs= +ac_ltlibobjs= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + +if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then + as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 +$as_echo_n "checking that generated files are newer than configure... " >&6; } + if test -n "$am_sleep_pid"; then + # Hide warnings about reused PIDs. + wait $am_sleep_pid 2>/dev/null + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 +$as_echo "done" >&6; } + if test -n "$EXEEXT"; then + am__EXEEXT_TRUE= + am__EXEEXT_FALSE='#' +else + am__EXEEXT_TRUE='#' + am__EXEEXT_FALSE= +fi + +if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then + as_fn_error $? "conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${SELFTEST_TRUE}" && test -z "${SELFTEST_FALSE}"; then + as_fn_error $? "conditional \"SELFTEST\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi + +: "${CONFIG_STATUS=./config.status}" +ac_write_fail=0 +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false + +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' + fi +else + as_ln_s='cp -pR' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +as_test_x='test -x' +as_executable_p=as_fn_executable_p + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by gdbsupport $as_me 1.0, which was +generated by GNU Autoconf 2.69. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + +case $ac_config_headers in *" +"*) set x $ac_config_headers; shift; ac_config_headers=$*;; +esac + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# Files that config.status was made for. +config_files="$ac_config_files" +config_headers="$ac_config_headers" +config_commands="$ac_config_commands" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +ac_cs_usage="\ +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. + +Usage: $0 [OPTION]... [TAG]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + --config print configuration, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Configuration commands: +$config_commands + +Report bugs to the package provider." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" +ac_cs_version="\\ +gdbsupport config.status 1.0 +configured by $0, generated by GNU Autoconf 2.69, + with options \\"\$ac_cs_config\\" + +Copyright (C) 2012 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +INSTALL='$INSTALL' +MKDIR_P='$MKDIR_P' +AWK='$AWK' +test -n "\$AWK" || AWK=awk +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=?*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + --*=) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg= + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + '') as_fn_error $? "missing file argument" ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_HEADERS " '$ac_optarg'" + ac_need_defaults=false;; + --he | --h) + # Conflict between --help and --header + as_fn_error $? "ambiguous option: \`$1' +Try \`$0 --help' for more information.";; + --help | --hel | -h ) + $as_echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) as_fn_error $? "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; + + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +if \$ac_cs_recheck; then + set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + $as_echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# +# INIT-COMMANDS +# +AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h:config.in" ;; + "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + + *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= ac_tmp= + trap 'exit_status=$? + : "${ac_tmp:=$tmp}" + { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 +ac_tmp=$tmp + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$ac_tmp/subs1.awk" && +_ACEOF + + +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\)..*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\)..*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' <conf$$subs.awk | sed ' +/^[^""]/{ + N + s/\n// +} +' >>$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ + || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 +_ACEOF + +# VPATH may cause trouble with some makes, so we remove sole $(srcdir), +# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ +h +s/// +s/^/:/ +s/[ ]*$/:/ +s/:\$(srcdir):/:/g +s/:\${srcdir}:/:/g +s/:@srcdir@:/:/g +s/^:*// +s/:*$// +x +s/\(=[ ]*\).*/\1/ +G +s/\n// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +fi # test -n "$CONFIG_FILES" + +# Set up the scripts for CONFIG_HEADERS section. +# No need to generate them if there are no CONFIG_HEADERS. +# This happens for instance with `./config.status Makefile'. +if test -n "$CONFIG_HEADERS"; then +cat >"$ac_tmp/defines.awk" <<\_ACAWK || +BEGIN { +_ACEOF + +# Transform confdefs.h into an awk script `defines.awk', embedded as +# here-document in config.status, that substitutes the proper values into +# config.h.in to produce config.h. + +# Create a delimiter string that does not exist in confdefs.h, to ease +# handling of long lines. +ac_delim='%!_!# ' +for ac_last_try in false false :; do + ac_tt=`sed -n "/$ac_delim/p" confdefs.h` + if test -z "$ac_tt"; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +# For the awk script, D is an array of macro values keyed by name, +# likewise P contains macro parameters if any. Preserve backslash +# newline sequences. + +ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* +sed -n ' +s/.\{148\}/&'"$ac_delim"'/g +t rset +:rset +s/^[ ]*#[ ]*define[ ][ ]*/ / +t def +d +:def +s/\\$// +t bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3"/p +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p +d +:bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3\\\\\\n"\\/p +t cont +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p +t cont +d +:cont +n +s/.\{148\}/&'"$ac_delim"'/g +t clear +:clear +s/\\$// +t bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/"/p +d +:bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p +b cont +' <confdefs.h | sed ' +s/'"$ac_delim"'/"\\\ +"/g' >>$CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + for (key in D) D_is_set[key] = 1 + FS = "" +} +/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { + line = \$ 0 + split(line, arg, " ") + if (arg[1] == "#") { + defundef = arg[2] + mac1 = arg[3] + } else { + defundef = substr(arg[1], 2) + mac1 = arg[2] + } + split(mac1, mac2, "(") #) + macro = mac2[1] + prefix = substr(line, 1, index(line, defundef) - 1) + if (D_is_set[macro]) { + # Preserve the white space surrounding the "#". + print prefix "define", macro P[macro] D[macro] + next + } else { + # Replace #undef with comments. This is necessary, for example, + # in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. + if (defundef == "undef") { + print "/*", prefix defundef, macro, "*/" + next + } + } +} +{ print } +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 +fi # test -n "$CONFIG_HEADERS" + + +eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$ac_tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$ac_tmp/stdin" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir="$ac_dir"; as_fn_mkdir_p + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + case $ac_mode in + :F) + # + # CONFIG_FILE + # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac + ac_MKDIR_P=$MKDIR_P + case $MKDIR_P in + [\\/$]* | ?:[\\/]* ) ;; + */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; + esac +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +s&@MKDIR_P@&$ac_MKDIR_P&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ + >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ + "$ac_tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&5 +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&2;} + + rm -f "$ac_tmp/stdin" + case $ac_file in + -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; + *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; + esac \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + ;; + :H) + # + # CONFIG_HEADER + # + if test x"$ac_file" != x-; then + { + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" + } >"$ac_tmp/config.h" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +$as_echo "$as_me: $ac_file is unchanged" >&6;} + else + rm -f "$ac_file" + mv "$ac_tmp/config.h" "$ac_file" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + fi + else + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ + || as_fn_error $? "could not create -" "$LINENO" 5 + fi +# Compute "$ac_file"'s index in $config_headers. +_am_arg="$ac_file" +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || +$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$_am_arg" : 'X\(//\)[^/]' \| \ + X"$_am_arg" : 'X\(//\)$' \| \ + X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$_am_arg" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'`/stamp-h$_am_stamp_count + ;; + + :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} + ;; + esac + + + case $ac_file$ac_mode in + "depfiles":C) test x"$AMDEP_TRUE" != x"" || { + # Older Autoconf quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named 'Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`$as_dirname -- "$mf" || +$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$mf" : 'X\(//\)[^/]' \| \ + X"$mf" : 'X\(//\)$' \| \ + X"$mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running 'make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "$am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`$as_dirname -- "$file" || +$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$file" : 'X\(//\)[^/]' \| \ + X"$file" : 'X\(//\)$' \| \ + X"$file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir=$dirpart/$fdir; as_fn_mkdir_p + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} + ;; + + esac +done # for ac_tag + + +as_fn_exit 0 +_ACEOF +ac_clean_files=$ac_clean_files_save + +test $ac_write_fail = 0 || + as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || as_fn_exit 1 +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} +fi + diff -Nru gdb-9.1/gdbsupport/configure.ac gdb-10.2/gdbsupport/configure.ac --- gdb-9.1/gdbsupport/configure.ac 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/configure.ac 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,69 @@ +dnl Autoconf configure script for GDB support library +dnl Copyright (C) 2020-2021 Free Software Foundation, Inc. +dnl +dnl This program is free software; you can redistribute it and/or modify +dnl it under the terms of the GNU General Public License as published by +dnl the Free Software Foundation; either version 3 of the License, or +dnl (at your option) any later version. +dnl +dnl This program is distributed in the hope that it will be useful, +dnl but WITHOUT ANY WARRANTY; without even the implied warranty of +dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +dnl GNU General Public License for more details. +dnl +dnl You should have received a copy of the GNU General Public License +dnl along with this program. If not, see <http://www.gnu.org/licenses/>. + +dnl Process this file with autoconf to produce a configure script. + +AC_INIT([gdbsupport], 1.0) +AC_CONFIG_SRCDIR(common-defs.h) +AC_CONFIG_HEADER(config.h:config.in) +AC_CANONICAL_SYSTEM +AM_MAINTAINER_MODE +AC_CONFIG_AUX_DIR(..) +AM_INIT_AUTOMAKE +AM_SILENT_RULES([yes]) + +AC_PROG_CC +AC_PROG_CXX +AC_PROG_RANLIB + +AC_USE_SYSTEM_EXTENSIONS +ACX_LARGEFILE +AM_PROG_CC_STDC + +# We require a C++11 compiler. Check if one is available, and if +# necessary, set CXX_DIALECT to some -std=xxx switch. +AX_CXX_COMPILE_STDCXX(11, , mandatory) + +dnl Set up for gettext. +ZW_GNU_GETTEXT_SISTER_DIR + +libiberty_INIT +GDB_AC_COMMON +GDB_AC_SELFTEST +AM_CONDITIONAL(SELFTEST, $enable_unittests) + +# Check the return and argument types of ptrace. +GDB_AC_PTRACE + +# Detect support warning flags. +AM_GDB_WARNINGS + +TARGET_WORD_SIZE=`sed -n 's,#define BFD_ARCH_SIZE \(.*\)$,\1,p' ../bfd/bfd-in3.h` +AC_DEFINE_UNQUOTED(TARGET_WORD_SIZE, $TARGET_WORD_SIZE, + [Define to the word size for the target.]) + +case ${host} in + *mingw32*) + AC_DEFINE(USE_WIN32API, 1, + [Define if we should use the Windows API, instead of the + POSIX API. On Windows, we use the Windows API when + building for MinGW, but the POSIX API when building + for Cygwin.]) + ;; +esac + +AC_CONFIG_FILES([Makefile]) +AC_OUTPUT diff -Nru gdb-9.1/gdbsupport/create-version.sh gdb-10.2/gdbsupport/create-version.sh --- gdb-9.1/gdbsupport/create-version.sh 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/create-version.sh 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,40 @@ +#!/bin/sh + +# Copyright (C) 1989-2021 Free Software Foundation, Inc. + +# This file is part of GDB. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Create version.c from version.in. +# Usage: +# create-version.sh PATH-TO-GDB-SRCDIR HOST_ALIAS \ +# TARGET_ALIAS OUTPUT-FILE-NAME + +srcdir="$1" +host_alias="$2" +target_alias="$3" +output="$4" + +rm -f version.c-tmp "$output" version.tmp +date=$(sed -n -e 's/^.* BFD_VERSION_DATE \(.*\)$/\1/p' "$srcdir/../bfd/version.h") +sed -e "s/DATE/$date/" < "$srcdir/version.in" > version.tmp +{ + echo '#include "gdbsupport/version.h"' + echo 'const char version[] = "'"$(sed q version.tmp)"'";' + echo 'const char host_name[] = "'"$host_alias"'";' + echo 'const char target_name[] = "'"$target_alias"'";' +} >> version.c-tmp +mv version.c-tmp "$output" +rm -f version.tmp diff -Nru gdb-9.1/gdbsupport/default-init-alloc.h gdb-10.2/gdbsupport/default-init-alloc.h --- gdb-9.1/gdbsupport/default-init-alloc.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/default-init-alloc.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,67 @@ +/* Copyright (C) 2017-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef COMMON_DEFAULT_INIT_ALLOC_H +#define COMMON_DEFAULT_INIT_ALLOC_H + +namespace gdb { + +/* An allocator that default constructs using default-initialization + rather than value-initialization. The idea is to use this when you + don't want to default construct elements of containers of trivial + types using zero-initialization. */ + +/* Mostly as implementation convenience, this is implemented as an + adapter that given an allocator A, overrides 'A::construct()'. 'A' + defaults to std::allocator<T>. */ + +template<typename T, typename A = std::allocator<T>> +class default_init_allocator : public A +{ +public: + /* Pull in A's ctors. */ + using A::A; + + /* Override rebind. */ + template<typename U> + struct rebind + { + /* A couple helpers just to make it a bit more readable. */ + typedef std::allocator_traits<A> traits_; + typedef typename traits_::template rebind_alloc<U> alloc_; + + /* This is what we're after. */ + typedef default_init_allocator<U, alloc_> other; + }; + + /* Make the base allocator's construct method(s) visible. */ + using A::construct; + + /* .. and provide an override/overload for the case of default + construction (i.e., no arguments). This is where we construct + with default-init. */ + template <typename U> + void construct (U *ptr) + noexcept (std::is_nothrow_default_constructible<U>::value) + { + ::new ((void *) ptr) U; /* default-init */ + } +}; + +} /* namespace gdb */ + +#endif /* COMMON_DEFAULT_INIT_ALLOC_H */ diff -Nru gdb-9.1/gdbsupport/def-vector.h gdb-10.2/gdbsupport/def-vector.h --- gdb-9.1/gdbsupport/def-vector.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/def-vector.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,36 @@ +/* Copyright (C) 2017-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef COMMON_DEF_VECTOR_H +#define COMMON_DEF_VECTOR_H + +#include <vector> +#include "gdbsupport/default-init-alloc.h" + +namespace gdb { + +/* A vector that uses an allocator that default constructs using + default-initialization rather than value-initialization. The idea + is to use this when you don't want zero-initialization of elements + of vectors of trivial types. E.g., byte buffers. */ + +template<typename T> using def_vector + = std::vector<T, gdb::default_init_allocator<T>>; + +} /* namespace gdb */ + +#endif /* COMMON_DEF_VECTOR_H */ diff -Nru gdb-9.1/gdbsupport/.dir-locals.el gdb-10.2/gdbsupport/.dir-locals.el --- gdb-9.1/gdbsupport/.dir-locals.el 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/.dir-locals.el 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,41 @@ +;; Emacs settings. +;; Copyright (C) 2012-2021 Free Software Foundation, Inc. + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation; either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see <http://www.gnu.org/licenses/>. + +;; There are three copies of this file, one in each of gdb/, +;; gdbserver/, and gdbsupport/. If you edit any one of these then +;; please replicate the changes in the other two copies. + +( + (tcl-mode . ((tcl-indent-level . 4) + (tcl-continued-indent-level . 4) + (indent-tabs-mode . t))) + (nil . ((bug-reference-url-format . "http://sourceware.org/bugzilla/show_bug.cgi?id=%s"))) + (c-mode . ((c-file-style . "GNU") + (mode . c++) + (indent-tabs-mode . t) + (tab-width . 8) + (c-basic-offset . 2) + (eval . (c-set-offset 'innamespace 0)) + )) + (c++-mode . ((eval . (when (fboundp 'c-toggle-comment-style) + (c-toggle-comment-style 1))) + (indent-tabs-mode . t) + (tab-width . 8) + (c-file-style . "GNU") + (c-basic-offset . 2) + (eval . (c-set-offset 'innamespace 0)) + )) +) diff -Nru gdb-9.1/gdbsupport/eintr.h gdb-10.2/gdbsupport/eintr.h --- gdb-9.1/gdbsupport/eintr.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/eintr.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,67 @@ +/* Utility for handling interrupted syscalls by signals. + + Copyright (C) 2020-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef GDBSUPPORT_EINTR_H +#define GDBSUPPORT_EINTR_H + +#include <cerrno> + +namespace gdb +{ +/* Repeat a system call interrupted with a signal. + + A utility for handling interrupted syscalls, which return with error + and set the errno to EINTR. The interrupted syscalls can be repeated, + until successful completion. This utility avoids wrapping code with + manual checks for such errors which are highly repetitive. + + For example, with: + + ssize_t ret; + do + { + errno = 0; + ret = ::write (pipe[1], "+", 1); + } + while (ret == -1 && errno == EINTR); + + You could wrap it by writing the wrapped form: + + ssize_t ret = gdb::handle_eintr<ssize_t> (-1, ::write, pipe[1], "+", 1); + + The RET typename specifies the return type of the wrapped system call, which + is typically int or ssize_t. The R argument specifies the failure value + indicating the interrupted syscall when calling the F function with + the A... arguments. */ + +template <typename Ret, typename Fun, typename... Args> +inline Ret handle_eintr (const Ret &R, const Fun &F, const Args &... A) +{ + Ret ret; + do + { + errno = 0; + ret = F (A...); + } + while (ret == R && errno == EINTR); + return ret; +} +} + +#endif /* GDBSUPPORT_EINTR_H */ diff -Nru gdb-9.1/gdbsupport/enum-flags.h gdb-10.2/gdbsupport/enum-flags.h --- gdb-9.1/gdbsupport/enum-flags.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/enum-flags.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,221 @@ +/* Copyright (C) 2015-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef COMMON_ENUM_FLAGS_H +#define COMMON_ENUM_FLAGS_H + +/* Type-safe wrapper for enum flags. enum flags are enums where the + values are bits that are meant to be ORed together. + + This allows writing code like the below, while with raw enums this + would fail to compile without casts to enum type at the assignments + to 'f': + + enum some_flag + { + flag_val1 = 1 << 1, + flag_val2 = 1 << 2, + flag_val3 = 1 << 3, + flag_val4 = 1 << 4, + }; + DEF_ENUM_FLAGS_TYPE(enum some_flag, some_flags); + + some_flags f = flag_val1 | flag_val2; + f |= flag_val3; + + It's also possible to assign literal zero to an enum flags variable + (meaning, no flags), dispensing adding an awkward explicit "no + value" value to the enumeration. For example: + + some_flags f = 0; + f |= flag_val3 | flag_val4; + + Note that literal integers other than zero fail to compile: + + some_flags f = 1; // error +*/ + +#ifdef __cplusplus + +/* Traits type used to prevent the global operator overloads from + instantiating for non-flag enums. */ +template<typename T> struct enum_flags_type {}; + +/* Use this to mark an enum as flags enum. It defines FLAGS as + enum_flags wrapper class for ENUM, and enables the global operator + overloads for ENUM. */ +#define DEF_ENUM_FLAGS_TYPE(enum_type, flags_type) \ + typedef enum_flags<enum_type> flags_type; \ + template<> \ + struct enum_flags_type<enum_type> \ + { \ + typedef enum_flags<enum_type> type; \ + } + +/* Until we can rely on std::underlying type being universally + available (C++11), roll our own for enums. */ +template<int size, bool sign> class integer_for_size { typedef void type; }; +template<> struct integer_for_size<1, 0> { typedef uint8_t type; }; +template<> struct integer_for_size<2, 0> { typedef uint16_t type; }; +template<> struct integer_for_size<4, 0> { typedef uint32_t type; }; +template<> struct integer_for_size<8, 0> { typedef uint64_t type; }; +template<> struct integer_for_size<1, 1> { typedef int8_t type; }; +template<> struct integer_for_size<2, 1> { typedef int16_t type; }; +template<> struct integer_for_size<4, 1> { typedef int32_t type; }; +template<> struct integer_for_size<8, 1> { typedef int64_t type; }; + +template<typename T> +struct enum_underlying_type +{ + typedef typename + integer_for_size<sizeof (T), static_cast<bool>(T (-1) < T (0))>::type + type; +}; + +template <typename E> +class enum_flags +{ +public: + typedef E enum_type; + typedef typename enum_underlying_type<enum_type>::type underlying_type; + +private: + /* Private type used to support initializing flag types with zero: + + foo_flags f = 0; + + but not other integers: + + foo_flags f = 1; + + The way this works is that we define an implicit constructor that + takes a pointer to this private type. Since nothing can + instantiate an object of this type, the only possible pointer to + pass to the constructor is the NULL pointer, or, zero. */ + struct zero_type; + + underlying_type + underlying_value () const + { + return m_enum_value; + } + +public: + /* Allow default construction. */ + enum_flags () + : m_enum_value ((enum_type) 0) + {} + + /* If you get an error saying these two overloads are ambiguous, + then you tried to mix values of different enum types. */ + enum_flags (enum_type e) + : m_enum_value (e) + {} + enum_flags (struct enum_flags::zero_type *zero) + : m_enum_value ((enum_type) 0) + {} + + enum_flags &operator&= (enum_type e) + { + m_enum_value = (enum_type) (underlying_value () & e); + return *this; + } + enum_flags &operator|= (enum_type e) + { + m_enum_value = (enum_type) (underlying_value () | e); + return *this; + } + enum_flags &operator^= (enum_type e) + { + m_enum_value = (enum_type) (underlying_value () ^ e); + return *this; + } + + operator enum_type () const + { + return m_enum_value; + } + + enum_flags operator& (enum_type e) const + { + return (enum_type) (underlying_value () & e); + } + enum_flags operator| (enum_type e) const + { + return (enum_type) (underlying_value () | e); + } + enum_flags operator^ (enum_type e) const + { + return (enum_type) (underlying_value () ^ e); + } + enum_flags operator~ () const + { + // We only the underlying type to be unsigned when actually using + // operator~ -- if it were not unsigned, undefined behavior could + // result. However, asserting this in the class itself would + // require too many unnecessary changes to otherwise ok enum + // types. + gdb_static_assert (std::is_unsigned<underlying_type>::value); + return (enum_type) ~underlying_value (); + } + +private: + /* Stored as enum_type because GDB knows to print the bit flags + neatly if the enum values look like bit flags. */ + enum_type m_enum_value; +}; + +/* Global operator overloads. */ + +template <typename enum_type> +typename enum_flags_type<enum_type>::type +operator& (enum_type e1, enum_type e2) +{ + return enum_flags<enum_type> (e1) & e2; +} + +template <typename enum_type> +typename enum_flags_type<enum_type>::type +operator| (enum_type e1, enum_type e2) +{ + return enum_flags<enum_type> (e1) | e2; +} + +template <typename enum_type> +typename enum_flags_type<enum_type>::type +operator^ (enum_type e1, enum_type e2) +{ + return enum_flags<enum_type> (e1) ^ e2; +} + +template <typename enum_type> +typename enum_flags_type<enum_type>::type +operator~ (enum_type e) +{ + return ~enum_flags<enum_type> (e); +} + +#else /* __cplusplus */ + +/* In C, the flags type is just a typedef for the enum type. */ + +#define DEF_ENUM_FLAGS_TYPE(enum_type, flags_type) \ + typedef enum_type flags_type + +#endif /* __cplusplus */ + +#endif /* COMMON_ENUM_FLAGS_H */ diff -Nru gdb-9.1/gdbsupport/environ.cc gdb-10.2/gdbsupport/environ.cc --- gdb-9.1/gdbsupport/environ.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/environ.cc 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,183 @@ +/* environ.c -- library for manipulating environments for GNU. + + Copyright (C) 1986-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "common-defs.h" +#include "environ.h" +#include <algorithm> +#include <utility> + +/* See gdbsupport/environ.h. */ + +gdb_environ & +gdb_environ::operator= (gdb_environ &&e) +{ + /* Are we self-moving? */ + if (&e == this) + return *this; + + m_environ_vector = std::move (e.m_environ_vector); + m_user_set_env = std::move (e.m_user_set_env); + m_user_unset_env = std::move (e.m_user_unset_env); + e.m_environ_vector.clear (); + e.m_environ_vector.push_back (NULL); + e.m_user_set_env.clear (); + e.m_user_unset_env.clear (); + return *this; +} + +/* See gdbsupport/environ.h. */ + +gdb_environ gdb_environ::from_host_environ () +{ + extern char **environ; + gdb_environ e; + + if (environ == NULL) + return e; + + for (int i = 0; environ[i] != NULL; ++i) + { + /* Make sure we add the element before the last (NULL). */ + e.m_environ_vector.insert (e.m_environ_vector.end () - 1, + xstrdup (environ[i])); + } + + return e; +} + +/* See gdbsupport/environ.h. */ + +void +gdb_environ::clear () +{ + for (char *v : m_environ_vector) + xfree (v); + m_environ_vector.clear (); + /* Always add the NULL element. */ + m_environ_vector.push_back (NULL); + m_user_set_env.clear (); + m_user_unset_env.clear (); +} + +/* Helper function to check if STRING contains an environment variable + assignment of VAR, i.e., if STRING starts with 'VAR='. Return true + if it contains, false otherwise. */ + +static bool +match_var_in_string (const char *string, const char *var, size_t var_len) +{ + if (strncmp (string, var, var_len) == 0 && string[var_len] == '=') + return true; + + return false; +} + +/* See gdbsupport/environ.h. */ + +const char * +gdb_environ::get (const char *var) const +{ + size_t len = strlen (var); + + for (char *el : m_environ_vector) + if (el != NULL && match_var_in_string (el, var, len)) + return &el[len + 1]; + + return NULL; +} + +/* See gdbsupport/environ.h. */ + +void +gdb_environ::set (const char *var, const char *value) +{ + char *fullvar = concat (var, "=", value, (char *) NULL); + + /* We have to unset the variable in the vector if it exists. */ + unset (var, false); + + /* Insert the element before the last one, which is always NULL. */ + m_environ_vector.insert (m_environ_vector.end () - 1, fullvar); + + /* Mark this environment variable as having been set by the user. + This will be useful when we deal with setting environment + variables on the remote target. */ + m_user_set_env.insert (std::string (fullvar)); + + /* If this environment variable is marked as unset by the user, then + remove it from the list, because now the user wants to set + it. */ + m_user_unset_env.erase (std::string (var)); +} + +/* See gdbsupport/environ.h. */ + +void +gdb_environ::unset (const char *var, bool update_unset_list) +{ + size_t len = strlen (var); + std::vector<char *>::iterator it_env; + + /* We iterate until '.end () - 1' because the last element is + always NULL. */ + for (it_env = m_environ_vector.begin (); + it_env != m_environ_vector.end () - 1; + ++it_env) + if (match_var_in_string (*it_env, var, len)) + break; + + if (it_env != m_environ_vector.end () - 1) + { + m_user_set_env.erase (std::string (*it_env)); + xfree (*it_env); + + m_environ_vector.erase (it_env); + } + + if (update_unset_list) + m_user_unset_env.insert (std::string (var)); +} + +/* See gdbsupport/environ.h. */ + +void +gdb_environ::unset (const char *var) +{ + unset (var, true); +} + +/* See gdbsupport/environ.h. */ + +char ** +gdb_environ::envp () const +{ + return const_cast<char **> (&m_environ_vector[0]); +} + +/* See gdbsupport/environ.h. */ + +const std::set<std::string> & +gdb_environ::user_set_env () const +{ + return m_user_set_env; +} + +const std::set<std::string> & +gdb_environ::user_unset_env () const +{ + return m_user_unset_env; +} diff -Nru gdb-9.1/gdbsupport/environ.h gdb-10.2/gdbsupport/environ.h --- gdb-9.1/gdbsupport/environ.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/environ.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,103 @@ +/* Header for environment manipulation library. + Copyright (C) 1989-2021 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef COMMON_ENVIRON_H +#define COMMON_ENVIRON_H + +#include <vector> +#include <set> + +/* Class that represents the environment variables as seen by the + inferior. */ + +class gdb_environ +{ +public: + /* Regular constructor and destructor. */ + gdb_environ () + { + /* Make sure that the vector contains at least a NULL element. + If/when we add more variables to it, NULL will always be the + last element. */ + m_environ_vector.push_back (NULL); + } + + ~gdb_environ () + { + clear (); + } + + /* Move constructor. */ + gdb_environ (gdb_environ &&e) + : m_environ_vector (std::move (e.m_environ_vector)), + m_user_set_env (std::move (e.m_user_set_env)), + m_user_unset_env (std::move (e.m_user_unset_env)) + { + /* Make sure that the moved-from vector is left at a valid + state (only one NULL element). */ + e.m_environ_vector.clear (); + e.m_environ_vector.push_back (NULL); + e.m_user_set_env.clear (); + e.m_user_unset_env.clear (); + } + + /* Move assignment. */ + gdb_environ &operator= (gdb_environ &&e); + + /* Create a gdb_environ object using the host's environment + variables. */ + static gdb_environ from_host_environ (); + + /* Clear the environment variables stored in the object. */ + void clear (); + + /* Return the value in the environment for the variable VAR. The + returned pointer is only valid as long as the gdb_environ object + is not modified. */ + const char *get (const char *var) const; + + /* Store VAR=VALUE in the environment. */ + void set (const char *var, const char *value); + + /* Unset VAR in environment. */ + void unset (const char *var); + + /* Return the environment vector represented as a 'char **'. */ + char **envp () const; + + /* Return the user-set environment vector. */ + const std::set<std::string> &user_set_env () const; + + /* Return the user-unset environment vector. */ + const std::set<std::string> &user_unset_env () const; + +private: + /* Unset VAR in environment. If UPDATE_UNSET_LIST is true, then + also update M_USER_UNSET_ENV to reflect the unsetting of the + environment variable. */ + void unset (const char *var, bool update_unset_list); + + /* A vector containing the environment variables. */ + std::vector<char *> m_environ_vector; + + /* The environment variables explicitly set by the user. */ + std::set<std::string> m_user_set_env; + + /* The environment variables explicitly unset by the user. */ + std::set<std::string> m_user_unset_env; +}; + +#endif /* COMMON_ENVIRON_H */ diff -Nru gdb-9.1/gdbsupport/errors.cc gdb-10.2/gdbsupport/errors.cc --- gdb-9.1/gdbsupport/errors.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/errors.cc 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,69 @@ +/* Error reporting facilities. + + Copyright (C) 1986-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "common-defs.h" +#include "errors.h" + +/* See gdbsupport/errors.h. */ + +void +warning (const char *fmt, ...) +{ + va_list ap; + + va_start (ap, fmt); + vwarning (fmt, ap); + va_end (ap); +} + +/* See gdbsupport/errors.h. */ + +void +error (const char *fmt, ...) +{ + va_list ap; + + va_start (ap, fmt); + verror (fmt, ap); + va_end (ap); +} + +/* See gdbsupport/errors.h. */ + +void +internal_error (const char *file, int line, const char *fmt, ...) +{ + va_list ap; + + va_start (ap, fmt); + internal_verror (file, line, fmt, ap); + va_end (ap); +} + +/* See gdbsupport/errors.h. */ + +void +internal_warning (const char *file, int line, const char *fmt, ...) +{ + va_list ap; + + va_start (ap, fmt); + internal_vwarning (file, line, fmt, ap); + va_end (ap); +} diff -Nru gdb-9.1/gdbsupport/errors.h gdb-10.2/gdbsupport/errors.h --- gdb-9.1/gdbsupport/errors.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/errors.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,94 @@ +/* Declarations for error-reporting facilities. + + Copyright (C) 1986-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef COMMON_ERRORS_H +#define COMMON_ERRORS_H + +/* A problem was detected, but the requested operation can still + proceed. A warning message is constructed using a printf- or + vprintf-style argument list. The function "vwarning" must be + provided by the client. */ + +extern void warning (const char *fmt, ...) + ATTRIBUTE_PRINTF (1, 2); + +extern void vwarning (const char *fmt, va_list args) + ATTRIBUTE_PRINTF (1, 0); + +/* A non-predictable, non-fatal error was detected. The requested + operation cannot proceed. An error message is constructed using + a printf- or vprintf-style argument list. These functions do not + return. The function "verror" must be provided by the client. */ + +extern void error (const char *fmt, ...) + ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF (1, 2); + +extern void verror (const char *fmt, va_list args) + ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF (1, 0); + +/* An internal error was detected. Internal errors indicate + programming errors such as assertion failures, as opposed to + more general errors beyond the application's control. These + functions do not return. An error message is constructed using + a printf- or vprintf-style argument list. FILE and LINE + indicate the file and line number where the programming error + was detected. The function "internal_verror" must be provided + by the client. */ + +extern void internal_error (const char *file, int line, + const char *fmt, ...) + ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF (3, 4); + +extern void internal_verror (const char *file, int line, + const char *fmt, va_list args) + ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF (3, 0); + +/* An internal problem was detected, but the requested operation can + still proceed. Internal warnings indicate programming errors as + opposed to more general issues beyond the application's control. + A warning message is constructed using a printf- or vprintf-style + argument list. The function "internal_vwarning" must be provided + by the client. */ + +extern void internal_warning (const char *file, int line, + const char *fmt, ...) + ATTRIBUTE_PRINTF (3, 4); + +extern void internal_vwarning (const char *file, int line, + const char *fmt, va_list args) + ATTRIBUTE_PRINTF (3, 0); + + +/* Like "error", but the error message is constructed by combining + STRING with the system error message for errno. This function does + not return. This function must be provided by the client. */ + +extern void perror_with_name (const char *string) ATTRIBUTE_NORETURN; + +/* Call this function to handle memory allocation failures. This + function does not return. This function must be provided by the + client. */ + +extern void malloc_failure (long size) ATTRIBUTE_NORETURN; + +/* Flush stdout and stderr. Must be provided by the client. */ + +extern void flush_streams (); + +#endif /* COMMON_ERRORS_H */ diff -Nru gdb-9.1/gdbsupport/event-loop.cc gdb-10.2/gdbsupport/event-loop.cc --- gdb-9.1/gdbsupport/event-loop.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/event-loop.cc 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,886 @@ +/* Event loop machinery for GDB, the GNU debugger. + Copyright (C) 1999-2021 Free Software Foundation, Inc. + Written by Elena Zannoni <ezannoni@cygnus.com> of Cygnus Solutions. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "gdbsupport/common-defs.h" +#include "gdbsupport/event-loop.h" + +#include <chrono> + +#ifdef HAVE_POLL +#if defined (HAVE_POLL_H) +#include <poll.h> +#elif defined (HAVE_SYS_POLL_H) +#include <sys/poll.h> +#endif +#endif + +#include <sys/types.h> +#include "gdbsupport/gdb_sys_time.h" +#include "gdbsupport/gdb_select.h" + +/* Tell create_file_handler what events we are interested in. + This is used by the select version of the event loop. */ + +#define GDB_READABLE (1<<1) +#define GDB_WRITABLE (1<<2) +#define GDB_EXCEPTION (1<<3) + +/* Information about each file descriptor we register with the event + loop. */ + +typedef struct file_handler + { + int fd; /* File descriptor. */ + int mask; /* Events we want to monitor: POLLIN, etc. */ + int ready_mask; /* Events that have been seen since + the last time. */ + handler_func *proc; /* Procedure to call when fd is ready. */ + gdb_client_data client_data; /* Argument to pass to proc. */ + int error; /* Was an error detected on this fd? */ + struct file_handler *next_file; /* Next registered file descriptor. */ + } +file_handler; + +/* Do we use poll or select ? */ +#ifdef HAVE_POLL +#define USE_POLL 1 +#else +#define USE_POLL 0 +#endif /* HAVE_POLL */ + +static unsigned char use_poll = USE_POLL; + +#ifdef USE_WIN32API +#include <windows.h> +#include <io.h> +#endif + +/* Gdb_notifier is just a list of file descriptors gdb is interested in. + These are the input file descriptor, and the target file + descriptor. We have two flavors of the notifier, one for platforms + that have the POLL function, the other for those that don't, and + only support SELECT. Each of the elements in the gdb_notifier list is + basically a description of what kind of events gdb is interested + in, for each fd. */ + +static struct + { + /* Ptr to head of file handler list. */ + file_handler *first_file_handler; + + /* Next file handler to handle, for the select variant. To level + the fairness across event sources, we serve file handlers in a + round-robin-like fashion. The number and order of the polled + file handlers may change between invocations, but this is good + enough. */ + file_handler *next_file_handler; + +#ifdef HAVE_POLL + /* Ptr to array of pollfd structures. */ + struct pollfd *poll_fds; + + /* Next file descriptor to handle, for the poll variant. To level + the fairness across event sources, we poll the file descriptors + in a round-robin-like fashion. The number and order of the + polled file descriptors may change between invocations, but + this is good enough. */ + int next_poll_fds_index; + + /* Timeout in milliseconds for calls to poll(). */ + int poll_timeout; +#endif + + /* Masks to be used in the next call to select. + Bits are set in response to calls to create_file_handler. */ + fd_set check_masks[3]; + + /* What file descriptors were found ready by select. */ + fd_set ready_masks[3]; + + /* Number of file descriptors to monitor (for poll). */ + /* Number of valid bits (highest fd value + 1) (for select). */ + int num_fds; + + /* Time structure for calls to select(). */ + struct timeval select_timeout; + + /* Flag to tell whether the timeout should be used. */ + int timeout_valid; + } +gdb_notifier; + +/* Structure associated with a timer. PROC will be executed at the + first occasion after WHEN. */ +struct gdb_timer + { + std::chrono::steady_clock::time_point when; + int timer_id; + struct gdb_timer *next; + timer_handler_func *proc; /* Function to call to do the work. */ + gdb_client_data client_data; /* Argument to async_handler_func. */ + }; + +/* List of currently active timers. It is sorted in order of + increasing timers. */ +static struct + { + /* Pointer to first in timer list. */ + struct gdb_timer *first_timer; + + /* Id of the last timer created. */ + int num_timers; + } +timer_list; + +static void create_file_handler (int fd, int mask, handler_func *proc, + gdb_client_data client_data); +static int gdb_wait_for_event (int); +static int update_wait_timeout (void); +static int poll_timers (void); + +/* Process one high level event. If nothing is ready at this time, + wait for something to happen (via gdb_wait_for_event), then process + it. Returns >0 if something was done otherwise returns <0 (this + can happen if there are no event sources to wait for). */ + +int +gdb_do_one_event (void) +{ + static int event_source_head = 0; + const int number_of_sources = 3; + int current = 0; + + /* First let's see if there are any asynchronous signal handlers + that are ready. These would be the result of invoking any of the + signal handlers. */ + if (invoke_async_signal_handlers ()) + return 1; + + /* To level the fairness across event sources, we poll them in a + round-robin fashion. */ + for (current = 0; current < number_of_sources; current++) + { + int res; + + switch (event_source_head) + { + case 0: + /* Are any timers that are ready? */ + res = poll_timers (); + break; + case 1: + /* Are there events already waiting to be collected on the + monitored file descriptors? */ + res = gdb_wait_for_event (0); + break; + case 2: + /* Are there any asynchronous event handlers ready? */ + res = check_async_event_handlers (); + break; + default: + internal_error (__FILE__, __LINE__, + "unexpected event_source_head %d", + event_source_head); + } + + event_source_head++; + if (event_source_head == number_of_sources) + event_source_head = 0; + + if (res > 0) + return 1; + } + + /* Block waiting for a new event. If gdb_wait_for_event returns -1, + we should get out because this means that there are no event + sources left. This will make the event loop stop, and the + application exit. */ + + if (gdb_wait_for_event (1) < 0) + return -1; + + /* If gdb_wait_for_event has returned 1, it means that one event has + been handled. We break out of the loop. */ + return 1; +} + + + +/* Wrapper function for create_file_handler, so that the caller + doesn't have to know implementation details about the use of poll + vs. select. */ +void +add_file_handler (int fd, handler_func * proc, gdb_client_data client_data) +{ +#ifdef HAVE_POLL + struct pollfd fds; +#endif + + if (use_poll) + { +#ifdef HAVE_POLL + /* Check to see if poll () is usable. If not, we'll switch to + use select. This can happen on systems like + m68k-motorola-sys, `poll' cannot be used to wait for `stdin'. + On m68k-motorola-sysv, tty's are not stream-based and not + `poll'able. */ + fds.fd = fd; + fds.events = POLLIN; + if (poll (&fds, 1, 0) == 1 && (fds.revents & POLLNVAL)) + use_poll = 0; +#else + internal_error (__FILE__, __LINE__, + _("use_poll without HAVE_POLL")); +#endif /* HAVE_POLL */ + } + if (use_poll) + { +#ifdef HAVE_POLL + create_file_handler (fd, POLLIN, proc, client_data); +#else + internal_error (__FILE__, __LINE__, + _("use_poll without HAVE_POLL")); +#endif + } + else + create_file_handler (fd, GDB_READABLE | GDB_EXCEPTION, + proc, client_data); +} + +/* Add a file handler/descriptor to the list of descriptors we are + interested in. + + FD is the file descriptor for the file/stream to be listened to. + + For the poll case, MASK is a combination (OR) of POLLIN, + POLLRDNORM, POLLRDBAND, POLLPRI, POLLOUT, POLLWRNORM, POLLWRBAND: + these are the events we are interested in. If any of them occurs, + proc should be called. + + For the select case, MASK is a combination of READABLE, WRITABLE, + EXCEPTION. PROC is the procedure that will be called when an event + occurs for FD. CLIENT_DATA is the argument to pass to PROC. */ + +static void +create_file_handler (int fd, int mask, handler_func * proc, + gdb_client_data client_data) +{ + file_handler *file_ptr; + + /* Do we already have a file handler for this file? (We may be + changing its associated procedure). */ + for (file_ptr = gdb_notifier.first_file_handler; file_ptr != NULL; + file_ptr = file_ptr->next_file) + { + if (file_ptr->fd == fd) + break; + } + + /* It is a new file descriptor. Add it to the list. Otherwise, just + change the data associated with it. */ + if (file_ptr == NULL) + { + file_ptr = XNEW (file_handler); + file_ptr->fd = fd; + file_ptr->ready_mask = 0; + file_ptr->next_file = gdb_notifier.first_file_handler; + gdb_notifier.first_file_handler = file_ptr; + + if (use_poll) + { +#ifdef HAVE_POLL + gdb_notifier.num_fds++; + if (gdb_notifier.poll_fds) + gdb_notifier.poll_fds = + (struct pollfd *) xrealloc (gdb_notifier.poll_fds, + (gdb_notifier.num_fds + * sizeof (struct pollfd))); + else + gdb_notifier.poll_fds = + XNEW (struct pollfd); + (gdb_notifier.poll_fds + gdb_notifier.num_fds - 1)->fd = fd; + (gdb_notifier.poll_fds + gdb_notifier.num_fds - 1)->events = mask; + (gdb_notifier.poll_fds + gdb_notifier.num_fds - 1)->revents = 0; +#else + internal_error (__FILE__, __LINE__, + _("use_poll without HAVE_POLL")); +#endif /* HAVE_POLL */ + } + else + { + if (mask & GDB_READABLE) + FD_SET (fd, &gdb_notifier.check_masks[0]); + else + FD_CLR (fd, &gdb_notifier.check_masks[0]); + + if (mask & GDB_WRITABLE) + FD_SET (fd, &gdb_notifier.check_masks[1]); + else + FD_CLR (fd, &gdb_notifier.check_masks[1]); + + if (mask & GDB_EXCEPTION) + FD_SET (fd, &gdb_notifier.check_masks[2]); + else + FD_CLR (fd, &gdb_notifier.check_masks[2]); + + if (gdb_notifier.num_fds <= fd) + gdb_notifier.num_fds = fd + 1; + } + } + + file_ptr->proc = proc; + file_ptr->client_data = client_data; + file_ptr->mask = mask; +} + +/* Return the next file handler to handle, and advance to the next + file handler, wrapping around if the end of the list is + reached. */ + +static file_handler * +get_next_file_handler_to_handle_and_advance (void) +{ + file_handler *curr_next; + + /* The first time around, this is still NULL. */ + if (gdb_notifier.next_file_handler == NULL) + gdb_notifier.next_file_handler = gdb_notifier.first_file_handler; + + curr_next = gdb_notifier.next_file_handler; + gdb_assert (curr_next != NULL); + + /* Advance. */ + gdb_notifier.next_file_handler = curr_next->next_file; + /* Wrap around, if necessary. */ + if (gdb_notifier.next_file_handler == NULL) + gdb_notifier.next_file_handler = gdb_notifier.first_file_handler; + + return curr_next; +} + +/* Remove the file descriptor FD from the list of monitored fd's: + i.e. we don't care anymore about events on the FD. */ +void +delete_file_handler (int fd) +{ + file_handler *file_ptr, *prev_ptr = NULL; + int i; +#ifdef HAVE_POLL + int j; + struct pollfd *new_poll_fds; +#endif + + /* Find the entry for the given file. */ + + for (file_ptr = gdb_notifier.first_file_handler; file_ptr != NULL; + file_ptr = file_ptr->next_file) + { + if (file_ptr->fd == fd) + break; + } + + if (file_ptr == NULL) + return; + + if (use_poll) + { +#ifdef HAVE_POLL + /* Create a new poll_fds array by copying every fd's information + but the one we want to get rid of. */ + + new_poll_fds = (struct pollfd *) + xmalloc ((gdb_notifier.num_fds - 1) * sizeof (struct pollfd)); + + for (i = 0, j = 0; i < gdb_notifier.num_fds; i++) + { + if ((gdb_notifier.poll_fds + i)->fd != fd) + { + (new_poll_fds + j)->fd = (gdb_notifier.poll_fds + i)->fd; + (new_poll_fds + j)->events = (gdb_notifier.poll_fds + i)->events; + (new_poll_fds + j)->revents + = (gdb_notifier.poll_fds + i)->revents; + j++; + } + } + xfree (gdb_notifier.poll_fds); + gdb_notifier.poll_fds = new_poll_fds; + gdb_notifier.num_fds--; +#else + internal_error (__FILE__, __LINE__, + _("use_poll without HAVE_POLL")); +#endif /* HAVE_POLL */ + } + else + { + if (file_ptr->mask & GDB_READABLE) + FD_CLR (fd, &gdb_notifier.check_masks[0]); + if (file_ptr->mask & GDB_WRITABLE) + FD_CLR (fd, &gdb_notifier.check_masks[1]); + if (file_ptr->mask & GDB_EXCEPTION) + FD_CLR (fd, &gdb_notifier.check_masks[2]); + + /* Find current max fd. */ + + if ((fd + 1) == gdb_notifier.num_fds) + { + gdb_notifier.num_fds--; + for (i = gdb_notifier.num_fds; i; i--) + { + if (FD_ISSET (i - 1, &gdb_notifier.check_masks[0]) + || FD_ISSET (i - 1, &gdb_notifier.check_masks[1]) + || FD_ISSET (i - 1, &gdb_notifier.check_masks[2])) + break; + } + gdb_notifier.num_fds = i; + } + } + + /* Deactivate the file descriptor, by clearing its mask, + so that it will not fire again. */ + + file_ptr->mask = 0; + + /* If this file handler was going to be the next one to be handled, + advance to the next's next, if any. */ + if (gdb_notifier.next_file_handler == file_ptr) + { + if (file_ptr->next_file == NULL + && file_ptr == gdb_notifier.first_file_handler) + gdb_notifier.next_file_handler = NULL; + else + get_next_file_handler_to_handle_and_advance (); + } + + /* Get rid of the file handler in the file handler list. */ + if (file_ptr == gdb_notifier.first_file_handler) + gdb_notifier.first_file_handler = file_ptr->next_file; + else + { + for (prev_ptr = gdb_notifier.first_file_handler; + prev_ptr->next_file != file_ptr; + prev_ptr = prev_ptr->next_file) + ; + prev_ptr->next_file = file_ptr->next_file; + } + xfree (file_ptr); +} + +/* Handle the given event by calling the procedure associated to the + corresponding file handler. */ + +static void +handle_file_event (file_handler *file_ptr, int ready_mask) +{ + int mask; +#ifdef HAVE_POLL + int error_mask; +#endif + + { + { + /* With poll, the ready_mask could have any of three events + set to 1: POLLHUP, POLLERR, POLLNVAL. These events + cannot be used in the requested event mask (events), but + they can be returned in the return mask (revents). We + need to check for those event too, and add them to the + mask which will be passed to the handler. */ + + /* See if the desired events (mask) match the received + events (ready_mask). */ + + if (use_poll) + { +#ifdef HAVE_POLL + /* POLLHUP means EOF, but can be combined with POLLIN to + signal more data to read. */ + error_mask = POLLHUP | POLLERR | POLLNVAL; + mask = ready_mask & (file_ptr->mask | error_mask); + + if ((mask & (POLLERR | POLLNVAL)) != 0) + { + /* Work in progress. We may need to tell somebody + what kind of error we had. */ + if (mask & POLLERR) + warning (_("Error detected on fd %d"), file_ptr->fd); + if (mask & POLLNVAL) + warning (_("Invalid or non-`poll'able fd %d"), + file_ptr->fd); + file_ptr->error = 1; + } + else + file_ptr->error = 0; +#else + internal_error (__FILE__, __LINE__, + _("use_poll without HAVE_POLL")); +#endif /* HAVE_POLL */ + } + else + { + if (ready_mask & GDB_EXCEPTION) + { + warning (_("Exception condition detected on fd %d"), + file_ptr->fd); + file_ptr->error = 1; + } + else + file_ptr->error = 0; + mask = ready_mask & file_ptr->mask; + } + + /* If there was a match, then call the handler. */ + if (mask != 0) + (*file_ptr->proc) (file_ptr->error, file_ptr->client_data); + } + } +} + +/* Wait for new events on the monitored file descriptors. Run the + event handler if the first descriptor that is detected by the poll. + If BLOCK and if there are no events, this function will block in + the call to poll. Return 1 if an event was handled. Return -1 if + there are no file descriptors to monitor. Return 1 if an event was + handled, otherwise returns 0. */ + +static int +gdb_wait_for_event (int block) +{ + file_handler *file_ptr; + int num_found = 0; + + /* Make sure all output is done before getting another event. */ + flush_streams (); + + if (gdb_notifier.num_fds == 0) + return -1; + + if (block) + update_wait_timeout (); + + if (use_poll) + { +#ifdef HAVE_POLL + int timeout; + + if (block) + timeout = gdb_notifier.timeout_valid ? gdb_notifier.poll_timeout : -1; + else + timeout = 0; + + num_found = poll (gdb_notifier.poll_fds, + (unsigned long) gdb_notifier.num_fds, timeout); + + /* Don't print anything if we get out of poll because of a + signal. */ + if (num_found == -1 && errno != EINTR) + perror_with_name (("poll")); +#else + internal_error (__FILE__, __LINE__, + _("use_poll without HAVE_POLL")); +#endif /* HAVE_POLL */ + } + else + { + struct timeval select_timeout; + struct timeval *timeout_p; + + if (block) + timeout_p = gdb_notifier.timeout_valid + ? &gdb_notifier.select_timeout : NULL; + else + { + memset (&select_timeout, 0, sizeof (select_timeout)); + timeout_p = &select_timeout; + } + + gdb_notifier.ready_masks[0] = gdb_notifier.check_masks[0]; + gdb_notifier.ready_masks[1] = gdb_notifier.check_masks[1]; + gdb_notifier.ready_masks[2] = gdb_notifier.check_masks[2]; + num_found = gdb_select (gdb_notifier.num_fds, + &gdb_notifier.ready_masks[0], + &gdb_notifier.ready_masks[1], + &gdb_notifier.ready_masks[2], + timeout_p); + + /* Clear the masks after an error from select. */ + if (num_found == -1) + { + FD_ZERO (&gdb_notifier.ready_masks[0]); + FD_ZERO (&gdb_notifier.ready_masks[1]); + FD_ZERO (&gdb_notifier.ready_masks[2]); + + /* Dont print anything if we got a signal, let gdb handle + it. */ + if (errno != EINTR) + perror_with_name (("select")); + } + } + + /* Avoid looking at poll_fds[i]->revents if no event fired. */ + if (num_found <= 0) + return 0; + + /* Run event handlers. We always run just one handler and go back + to polling, in case a handler changes the notifier list. Since + events for sources we haven't consumed yet wake poll/select + immediately, no event is lost. */ + + /* To level the fairness across event descriptors, we handle them in + a round-robin-like fashion. The number and order of descriptors + may change between invocations, but this is good enough. */ + if (use_poll) + { +#ifdef HAVE_POLL + int i; + int mask; + + while (1) + { + if (gdb_notifier.next_poll_fds_index >= gdb_notifier.num_fds) + gdb_notifier.next_poll_fds_index = 0; + i = gdb_notifier.next_poll_fds_index++; + + gdb_assert (i < gdb_notifier.num_fds); + if ((gdb_notifier.poll_fds + i)->revents) + break; + } + + for (file_ptr = gdb_notifier.first_file_handler; + file_ptr != NULL; + file_ptr = file_ptr->next_file) + { + if (file_ptr->fd == (gdb_notifier.poll_fds + i)->fd) + break; + } + gdb_assert (file_ptr != NULL); + + mask = (gdb_notifier.poll_fds + i)->revents; + handle_file_event (file_ptr, mask); + return 1; +#else + internal_error (__FILE__, __LINE__, + _("use_poll without HAVE_POLL")); +#endif /* HAVE_POLL */ + } + else + { + /* See comment about even source fairness above. */ + int mask = 0; + + do + { + file_ptr = get_next_file_handler_to_handle_and_advance (); + + if (FD_ISSET (file_ptr->fd, &gdb_notifier.ready_masks[0])) + mask |= GDB_READABLE; + if (FD_ISSET (file_ptr->fd, &gdb_notifier.ready_masks[1])) + mask |= GDB_WRITABLE; + if (FD_ISSET (file_ptr->fd, &gdb_notifier.ready_masks[2])) + mask |= GDB_EXCEPTION; + } + while (mask == 0); + + handle_file_event (file_ptr, mask); + return 1; + } + return 0; +} + +/* Create a timer that will expire in MS milliseconds from now. When + the timer is ready, PROC will be executed. At creation, the timer + is added to the timers queue. This queue is kept sorted in order + of increasing timers. Return a handle to the timer struct. */ + +int +create_timer (int ms, timer_handler_func *proc, + gdb_client_data client_data) +{ + using namespace std::chrono; + struct gdb_timer *timer_ptr, *timer_index, *prev_timer; + + steady_clock::time_point time_now = steady_clock::now (); + + timer_ptr = new gdb_timer (); + timer_ptr->when = time_now + milliseconds (ms); + timer_ptr->proc = proc; + timer_ptr->client_data = client_data; + timer_list.num_timers++; + timer_ptr->timer_id = timer_list.num_timers; + + /* Now add the timer to the timer queue, making sure it is sorted in + increasing order of expiration. */ + + for (timer_index = timer_list.first_timer; + timer_index != NULL; + timer_index = timer_index->next) + { + if (timer_index->when > timer_ptr->when) + break; + } + + if (timer_index == timer_list.first_timer) + { + timer_ptr->next = timer_list.first_timer; + timer_list.first_timer = timer_ptr; + + } + else + { + for (prev_timer = timer_list.first_timer; + prev_timer->next != timer_index; + prev_timer = prev_timer->next) + ; + + prev_timer->next = timer_ptr; + timer_ptr->next = timer_index; + } + + gdb_notifier.timeout_valid = 0; + return timer_ptr->timer_id; +} + +/* There is a chance that the creator of the timer wants to get rid of + it before it expires. */ +void +delete_timer (int id) +{ + struct gdb_timer *timer_ptr, *prev_timer = NULL; + + /* Find the entry for the given timer. */ + + for (timer_ptr = timer_list.first_timer; timer_ptr != NULL; + timer_ptr = timer_ptr->next) + { + if (timer_ptr->timer_id == id) + break; + } + + if (timer_ptr == NULL) + return; + /* Get rid of the timer in the timer list. */ + if (timer_ptr == timer_list.first_timer) + timer_list.first_timer = timer_ptr->next; + else + { + for (prev_timer = timer_list.first_timer; + prev_timer->next != timer_ptr; + prev_timer = prev_timer->next) + ; + prev_timer->next = timer_ptr->next; + } + delete timer_ptr; + + gdb_notifier.timeout_valid = 0; +} + +/* Convert a std::chrono duration to a struct timeval. */ + +template<typename Duration> +static struct timeval +duration_cast_timeval (const Duration &d) +{ + using namespace std::chrono; + seconds sec = duration_cast<seconds> (d); + microseconds msec = duration_cast<microseconds> (d - sec); + + struct timeval tv; + tv.tv_sec = sec.count (); + tv.tv_usec = msec.count (); + return tv; +} + +/* Update the timeout for the select() or poll(). Returns true if the + timer has already expired, false otherwise. */ + +static int +update_wait_timeout (void) +{ + if (timer_list.first_timer != NULL) + { + using namespace std::chrono; + steady_clock::time_point time_now = steady_clock::now (); + struct timeval timeout; + + if (timer_list.first_timer->when < time_now) + { + /* It expired already. */ + timeout.tv_sec = 0; + timeout.tv_usec = 0; + } + else + { + steady_clock::duration d = timer_list.first_timer->when - time_now; + timeout = duration_cast_timeval (d); + } + + /* Update the timeout for select/ poll. */ + if (use_poll) + { +#ifdef HAVE_POLL + gdb_notifier.poll_timeout = timeout.tv_sec * 1000; +#else + internal_error (__FILE__, __LINE__, + _("use_poll without HAVE_POLL")); +#endif /* HAVE_POLL */ + } + else + { + gdb_notifier.select_timeout.tv_sec = timeout.tv_sec; + gdb_notifier.select_timeout.tv_usec = timeout.tv_usec; + } + gdb_notifier.timeout_valid = 1; + + if (timer_list.first_timer->when < time_now) + return 1; + } + else + gdb_notifier.timeout_valid = 0; + + return 0; +} + +/* Check whether a timer in the timers queue is ready. If a timer is + ready, call its handler and return. Update the timeout for the + select() or poll() as well. Return 1 if an event was handled, + otherwise returns 0.*/ + +static int +poll_timers (void) +{ + if (update_wait_timeout ()) + { + struct gdb_timer *timer_ptr = timer_list.first_timer; + timer_handler_func *proc = timer_ptr->proc; + gdb_client_data client_data = timer_ptr->client_data; + + /* Get rid of the timer from the beginning of the list. */ + timer_list.first_timer = timer_ptr->next; + + /* Delete the timer before calling the callback, not after, in + case the callback itself decides to try deleting the timer + too. */ + delete timer_ptr; + + /* Call the procedure associated with that timer. */ + (proc) (client_data); + + return 1; + } + + return 0; +} diff -Nru gdb-9.1/gdbsupport/event-loop.h gdb-10.2/gdbsupport/event-loop.h --- gdb-9.1/gdbsupport/event-loop.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/event-loop.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,102 @@ +/* Definitions used by the GDB event loop. + Copyright (C) 1999-2021 Free Software Foundation, Inc. + Written by Elena Zannoni <ezannoni@cygnus.com> of Cygnus Solutions. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef EVENT_LOOP_H +#define EVENT_LOOP_H + +/* An event loop listens for events from multiple event sources. When + an event arrives, it is queued and processed by calling the + appropriate event handler. The event loop then continues to listen + for more events. An event loop completes when there are no event + sources to listen on. External event sources can be plugged into + the loop. + + There are 4 main components: + - a list of file descriptors to be monitored, GDB_NOTIFIER. + - a list of asynchronous event sources to be monitored, + ASYNC_EVENT_HANDLER_LIST. + - a list of events that have occurred, EVENT_QUEUE. + - a list of signal handling functions, SIGHANDLER_LIST. + + GDB_NOTIFIER keeps track of the file descriptor based event + sources. ASYNC_EVENT_HANDLER_LIST keeps track of asynchronous + event sources that are signalled by some component of gdb, usually + a target_ops instance. Event sources for gdb are currently the UI + and the target. Gdb communicates with the command line user + interface via the readline library and usually communicates with + remote targets via a serial port. Serial ports are represented in + GDB as file descriptors and select/poll calls. For native targets + instead, the communication varies across operating system debug + APIs, but usually consists of calls to ptrace and waits (via + signals) or calls to poll/select (via file descriptors). In the + current gdb, the code handling events related to the target resides + in wait_for_inferior for synchronous targets; or, for asynchronous + capable targets, by having the target register either a target + controlled file descriptor and/or an asynchronous event source in + the event loop, with the fetch_inferior_event function as the event + callback. In both the synchronous and asynchronous cases, usually + the target event is collected through the target_wait interface. + The target is free to install other event sources in the event loop + if it so requires. + + EVENT_QUEUE keeps track of the events that have happened during the + last iteration of the event loop, and need to be processed. An + event is represented by a procedure to be invoked in order to + process the event. The queue is scanned head to tail. If the + event of interest is a change of state in a file descriptor, then a + call to poll or select will be made to detect it. + + If the events generate signals, they are also queued by special + functions that are invoked through traditional signal handlers. + The actions to be taken is response to such events will be executed + when the SIGHANDLER_LIST is scanned, the next time through the + infinite loop. + + Corollary tasks are the creation and deletion of event sources. */ + +typedef void *gdb_client_data; +typedef void (handler_func) (int, gdb_client_data); +typedef void (timer_handler_func) (gdb_client_data); + +/* Exported functions from event-loop.c */ + +extern int gdb_do_one_event (void); +extern void delete_file_handler (int fd); +extern void add_file_handler (int fd, handler_func *proc, + gdb_client_data client_data); +extern int create_timer (int milliseconds, + timer_handler_func *proc, + gdb_client_data client_data); +extern void delete_timer (int id); + +/* Must be defined by client. */ + +extern void handle_event_loop_exception (const gdb_exception &); + +/* Must be defined by client. Returns true if any signal handler was + ready. */ + +extern int invoke_async_signal_handlers (); + +/* Must be defined by client. Returns true if any event handler was + ready. */ + +extern int check_async_event_handlers (); + +#endif /* EVENT_LOOP_H */ diff -Nru gdb-9.1/gdbsupport/fileio.cc gdb-10.2/gdbsupport/fileio.cc --- gdb-9.1/gdbsupport/fileio.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/fileio.cc 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,255 @@ +/* File-I/O functions for GDB, the GNU debugger. + + Copyright (C) 2003-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "common-defs.h" +#include "fileio.h" +#include <sys/stat.h> +#include <fcntl.h> + +/* See fileio.h. */ + +int +host_to_fileio_error (int error) +{ + switch (error) + { + case EPERM: + return FILEIO_EPERM; + case ENOENT: + return FILEIO_ENOENT; + case EINTR: + return FILEIO_EINTR; + case EIO: + return FILEIO_EIO; + case EBADF: + return FILEIO_EBADF; + case EACCES: + return FILEIO_EACCES; + case EFAULT: + return FILEIO_EFAULT; + case EBUSY: + return FILEIO_EBUSY; + case EEXIST: + return FILEIO_EEXIST; + case ENODEV: + return FILEIO_ENODEV; + case ENOTDIR: + return FILEIO_ENOTDIR; + case EISDIR: + return FILEIO_EISDIR; + case EINVAL: + return FILEIO_EINVAL; + case ENFILE: + return FILEIO_ENFILE; + case EMFILE: + return FILEIO_EMFILE; + case EFBIG: + return FILEIO_EFBIG; + case ENOSPC: + return FILEIO_ENOSPC; + case ESPIPE: + return FILEIO_ESPIPE; + case EROFS: + return FILEIO_EROFS; + case ENOSYS: + return FILEIO_ENOSYS; + case ENAMETOOLONG: + return FILEIO_ENAMETOOLONG; + } + return FILEIO_EUNKNOWN; +} + +/* See fileio.h. */ + +int +fileio_to_host_openflags (int fileio_open_flags, int *open_flags_p) +{ + int open_flags = 0; + + if (fileio_open_flags & ~FILEIO_O_SUPPORTED) + return -1; + + if (fileio_open_flags & FILEIO_O_CREAT) + open_flags |= O_CREAT; + if (fileio_open_flags & FILEIO_O_EXCL) + open_flags |= O_EXCL; + if (fileio_open_flags & FILEIO_O_TRUNC) + open_flags |= O_TRUNC; + if (fileio_open_flags & FILEIO_O_APPEND) + open_flags |= O_APPEND; + if (fileio_open_flags & FILEIO_O_RDONLY) + open_flags |= O_RDONLY; + if (fileio_open_flags & FILEIO_O_WRONLY) + open_flags |= O_WRONLY; + if (fileio_open_flags & FILEIO_O_RDWR) + open_flags |= O_RDWR; + /* On systems supporting binary and text mode, always open files + in binary mode. */ +#ifdef O_BINARY + open_flags |= O_BINARY; +#endif + + *open_flags_p = open_flags; + return 0; +} + +/* See fileio.h. */ + +int +fileio_to_host_mode (int fileio_mode, mode_t *mode_p) +{ + mode_t mode = 0; + + if (fileio_mode & ~FILEIO_S_SUPPORTED) + return -1; + + if (fileio_mode & FILEIO_S_IFREG) + mode |= S_IFREG; + if (fileio_mode & FILEIO_S_IFDIR) + mode |= S_IFDIR; + if (fileio_mode & FILEIO_S_IFCHR) + mode |= S_IFCHR; + if (fileio_mode & FILEIO_S_IRUSR) + mode |= S_IRUSR; + if (fileio_mode & FILEIO_S_IWUSR) + mode |= S_IWUSR; + if (fileio_mode & FILEIO_S_IXUSR) + mode |= S_IXUSR; +#ifdef S_IRGRP + if (fileio_mode & FILEIO_S_IRGRP) + mode |= S_IRGRP; +#endif +#ifdef S_IWGRP + if (fileio_mode & FILEIO_S_IWGRP) + mode |= S_IWGRP; +#endif +#ifdef S_IXGRP + if (fileio_mode & FILEIO_S_IXGRP) + mode |= S_IXGRP; +#endif + if (fileio_mode & FILEIO_S_IROTH) + mode |= S_IROTH; +#ifdef S_IWOTH + if (fileio_mode & FILEIO_S_IWOTH) + mode |= S_IWOTH; +#endif +#ifdef S_IXOTH + if (fileio_mode & FILEIO_S_IXOTH) + mode |= S_IXOTH; +#endif + + *mode_p = mode; + return 0; +} + +/* Convert a host-format mode_t into a bitmask of File-I/O flags. */ + +static LONGEST +fileio_mode_pack (mode_t mode) +{ + mode_t tmode = 0; + + if (S_ISREG (mode)) + tmode |= FILEIO_S_IFREG; + if (S_ISDIR (mode)) + tmode |= FILEIO_S_IFDIR; + if (S_ISCHR (mode)) + tmode |= FILEIO_S_IFCHR; + if (mode & S_IRUSR) + tmode |= FILEIO_S_IRUSR; + if (mode & S_IWUSR) + tmode |= FILEIO_S_IWUSR; + if (mode & S_IXUSR) + tmode |= FILEIO_S_IXUSR; +#ifdef S_IRGRP + if (mode & S_IRGRP) + tmode |= FILEIO_S_IRGRP; +#endif +#ifdef S_IWGRP + if (mode & S_IWGRP) + tmode |= FILEIO_S_IWGRP; +#endif +#ifdef S_IXGRP + if (mode & S_IXGRP) + tmode |= FILEIO_S_IXGRP; +#endif + if (mode & S_IROTH) + tmode |= FILEIO_S_IROTH; +#ifdef S_IWOTH + if (mode & S_IWOTH) + tmode |= FILEIO_S_IWOTH; +#endif +#ifdef S_IXOTH + if (mode & S_IXOTH) + tmode |= FILEIO_S_IXOTH; +#endif + return tmode; +} + +/* Pack a host-format mode_t into an fio_mode_t. */ + +static void +host_to_fileio_mode (mode_t num, fio_mode_t fnum) +{ + host_to_bigendian (fileio_mode_pack (num), (char *) fnum, 4); +} + +/* Pack a host-format integer into an fio_ulong_t. */ + +static void +host_to_fileio_ulong (LONGEST num, fio_ulong_t fnum) +{ + host_to_bigendian (num, (char *) fnum, 8); +} + +/* See fileio.h. */ + +void +host_to_fileio_stat (struct stat *st, struct fio_stat *fst) +{ + LONGEST blksize; + + host_to_fileio_uint ((long) st->st_dev, fst->fst_dev); + host_to_fileio_uint ((long) st->st_ino, fst->fst_ino); + host_to_fileio_mode (st->st_mode, fst->fst_mode); + host_to_fileio_uint ((long) st->st_nlink, fst->fst_nlink); + host_to_fileio_uint ((long) st->st_uid, fst->fst_uid); + host_to_fileio_uint ((long) st->st_gid, fst->fst_gid); + host_to_fileio_uint ((long) st->st_rdev, fst->fst_rdev); + host_to_fileio_ulong ((LONGEST) st->st_size, fst->fst_size); +#ifdef HAVE_STRUCT_STAT_ST_BLKSIZE + blksize = st->st_blksize; +#else + blksize = 512; +#endif + host_to_fileio_ulong (blksize, fst->fst_blksize); +#if HAVE_STRUCT_STAT_ST_BLOCKS + host_to_fileio_ulong ((LONGEST) st->st_blocks, fst->fst_blocks); +#else + /* FIXME: This is correct for DJGPP, but other systems that don't + have st_blocks, if any, might prefer 512 instead of st_blksize. + (eliz, 30-12-2003) */ + host_to_fileio_ulong (((LONGEST) st->st_size + blksize - 1) + / blksize, + fst->fst_blocks); +#endif + host_to_fileio_time (st->st_atime, fst->fst_atime); + host_to_fileio_time (st->st_mtime, fst->fst_mtime); + host_to_fileio_time (st->st_ctime, fst->fst_ctime); +} diff -Nru gdb-9.1/gdbsupport/fileio.h gdb-10.2/gdbsupport/fileio.h --- gdb-9.1/gdbsupport/fileio.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/fileio.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,73 @@ +/* File-I/O functions for GDB, the GNU debugger. + + Copyright (C) 2003-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef COMMON_FILEIO_H +#define COMMON_FILEIO_H + +#include "gdb/fileio.h" +#include <sys/stat.h> + +/* Convert a host-format errno value to a File-I/O error number. */ + +extern int host_to_fileio_error (int error); + +/* Convert File-I/O open flags FFLAGS to host format, storing + the result in *FLAGS. Return 0 on success, -1 on error. */ + +extern int fileio_to_host_openflags (int fflags, int *flags); + +/* Convert File-I/O mode FMODE to host format, storing + the result in *MODE. Return 0 on success, -1 on error. */ + +extern int fileio_to_host_mode (int fmode, mode_t *mode); + +/* Pack a host-format integer into a byte buffer in big-endian + format. BYTES specifies the size of the integer to pack in + bytes. */ + +static inline void +host_to_bigendian (LONGEST num, char *buf, int bytes) +{ + int i; + + for (i = 0; i < bytes; ++i) + buf[i] = (num >> (8 * (bytes - i - 1))) & 0xff; +} + +/* Pack a host-format integer into an fio_uint_t. */ + +static inline void +host_to_fileio_uint (long num, fio_uint_t fnum) +{ + host_to_bigendian ((LONGEST) num, (char *) fnum, 4); +} + +/* Pack a host-format time_t into an fio_time_t. */ + +static inline void +host_to_fileio_time (time_t num, fio_time_t fnum) +{ + host_to_bigendian ((LONGEST) num, (char *) fnum, 4); +} + +/* Pack a host-format struct stat into a struct fio_stat. */ + +extern void host_to_fileio_stat (struct stat *st, struct fio_stat *fst); + +#endif /* COMMON_FILEIO_H */ diff -Nru gdb-9.1/gdbsupport/filestuff.cc gdb-10.2/gdbsupport/filestuff.cc --- gdb-9.1/gdbsupport/filestuff.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/filestuff.cc 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,503 @@ +/* Low-level file-handling. + Copyright (C) 2012-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "common-defs.h" +#include "filestuff.h" +#include "gdb_vecs.h" +#include <fcntl.h> +#include <unistd.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <algorithm> + +#ifdef USE_WIN32API +#include <winsock2.h> +#include <windows.h> +#define HAVE_SOCKETS 1 +#elif defined HAVE_SYS_SOCKET_H +#include <sys/socket.h> +/* Define HAVE_F_GETFD if we plan to use F_GETFD. */ +#define HAVE_F_GETFD F_GETFD +#define HAVE_SOCKETS 1 +#endif + +#ifdef HAVE_KINFO_GETFILE +#include <sys/user.h> +#include <libutil.h> +#endif + +#ifdef HAVE_SYS_RESOURCE_H +#include <sys/resource.h> +#endif /* HAVE_SYS_RESOURCE_H */ + +#ifndef O_CLOEXEC +#define O_CLOEXEC 0 +#endif + +#ifndef O_NOINHERIT +#define O_NOINHERIT 0 +#endif + +#ifndef SOCK_CLOEXEC +#define SOCK_CLOEXEC 0 +#endif + + + +#ifndef HAVE_FDWALK + +#include <dirent.h> + +/* Replacement for fdwalk, if the system doesn't define it. Walks all + open file descriptors (though this implementation may walk closed + ones as well, depending on the host platform's capabilities) and + call FUNC with ARG. If FUNC returns non-zero, stops immediately + and returns the same value. Otherwise, returns zero when + finished. */ + +static int +fdwalk (int (*func) (void *, int), void *arg) +{ + /* Checking __linux__ isn't great but it isn't clear what would be + better. There doesn't seem to be a good way to check for this in + configure. */ +#ifdef __linux__ + DIR *dir; + + dir = opendir ("/proc/self/fd"); + if (dir != NULL) + { + struct dirent *entry; + int result = 0; + + for (entry = readdir (dir); entry != NULL; entry = readdir (dir)) + { + long fd; + char *tail; + + errno = 0; + fd = strtol (entry->d_name, &tail, 10); + if (*tail != '\0' || errno != 0) + continue; + if ((int) fd != fd) + { + /* What can we do here really? */ + continue; + } + + if (fd == dirfd (dir)) + continue; + + result = func (arg, fd); + if (result != 0) + break; + } + + closedir (dir); + return result; + } + /* We may fall through to the next case. */ +#endif +#ifdef HAVE_KINFO_GETFILE + int nfd; + gdb::unique_xmalloc_ptr<struct kinfo_file[]> fdtbl + (kinfo_getfile (getpid (), &nfd)); + if (fdtbl != NULL) + { + for (int i = 0; i < nfd; i++) + { + if (fdtbl[i].kf_fd >= 0) + { + int result = func (arg, fdtbl[i].kf_fd); + if (result != 0) + return result; + } + } + return 0; + } + /* We may fall through to the next case. */ +#endif + + { + int max, fd; + +#if defined(HAVE_GETRLIMIT) && defined(RLIMIT_NOFILE) + struct rlimit rlim; + + if (getrlimit (RLIMIT_NOFILE, &rlim) == 0 && rlim.rlim_max != RLIM_INFINITY) + max = rlim.rlim_max; + else +#endif + { +#ifdef _SC_OPEN_MAX + max = sysconf (_SC_OPEN_MAX); +#else + /* Whoops. */ + return 0; +#endif /* _SC_OPEN_MAX */ + } + + for (fd = 0; fd < max; ++fd) + { + struct stat sb; + int result; + + /* Only call FUNC for open fds. */ + if (fstat (fd, &sb) == -1) + continue; + + result = func (arg, fd); + if (result != 0) + return result; + } + + return 0; + } +} + +#endif /* HAVE_FDWALK */ + + + +/* A vector holding all the fds open when notice_open_fds was called. We + don't use a hashtab because we don't expect there to be many open fds. */ + +static std::vector<int> open_fds; + +/* An fdwalk callback function used by notice_open_fds. It puts the + given file descriptor into the vec. */ + +static int +do_mark_open_fd (void *ignore, int fd) +{ + open_fds.push_back (fd); + return 0; +} + +/* See filestuff.h. */ + +void +notice_open_fds (void) +{ + fdwalk (do_mark_open_fd, NULL); +} + +/* See filestuff.h. */ + +void +mark_fd_no_cloexec (int fd) +{ + do_mark_open_fd (NULL, fd); +} + +/* See filestuff.h. */ + +void +unmark_fd_no_cloexec (int fd) +{ + auto it = std::remove (open_fds.begin (), open_fds.end (), fd); + + if (it != open_fds.end ()) + open_fds.erase (it); + else + gdb_assert_not_reached (_("fd not found in open_fds")); +} + +/* Helper function for close_most_fds that closes the file descriptor + if appropriate. */ + +static int +do_close (void *ignore, int fd) +{ + for (int val : open_fds) + { + if (fd == val) + { + /* Keep this one open. */ + return 0; + } + } + + close (fd); + return 0; +} + +/* See filestuff.h. */ + +void +close_most_fds (void) +{ + fdwalk (do_close, NULL); +} + + + +/* This is a tri-state flag. When zero it means we haven't yet tried + O_CLOEXEC. When positive it means that O_CLOEXEC works on this + host. When negative, it means that O_CLOEXEC doesn't work. We + track this state because, while gdb might have been compiled + against a libc that supplies O_CLOEXEC, there is no guarantee that + the kernel supports it. */ + +static int trust_o_cloexec; + +/* Mark FD as close-on-exec, ignoring errors. Update + TRUST_O_CLOEXEC. */ + +static void +mark_cloexec (int fd) +{ +#ifdef HAVE_F_GETFD + int old = fcntl (fd, F_GETFD, 0); + + if (old != -1) + { + fcntl (fd, F_SETFD, old | FD_CLOEXEC); + + if (trust_o_cloexec == 0) + { + if ((old & FD_CLOEXEC) != 0) + trust_o_cloexec = 1; + else + trust_o_cloexec = -1; + } + } +#endif /* HAVE_F_GETFD */ +} + +/* Depending on TRUST_O_CLOEXEC, mark FD as close-on-exec. */ + +static void +maybe_mark_cloexec (int fd) +{ + if (trust_o_cloexec <= 0) + mark_cloexec (fd); +} + +#ifdef HAVE_SOCKETS + +/* Like maybe_mark_cloexec, but for callers that use SOCK_CLOEXEC. */ + +static void +socket_mark_cloexec (int fd) +{ + if (SOCK_CLOEXEC == 0 || trust_o_cloexec <= 0) + mark_cloexec (fd); +} + +#endif + + + +/* See filestuff.h. */ + +int +gdb_open_cloexec (const char *filename, int flags, unsigned long mode) +{ + int fd = open (filename, flags | O_CLOEXEC, mode); + + if (fd >= 0) + maybe_mark_cloexec (fd); + + return fd; +} + +/* See filestuff.h. */ + +gdb_file_up +gdb_fopen_cloexec (const char *filename, const char *opentype) +{ + FILE *result; + /* Probe for "e" support once. But, if we can tell the operating + system doesn't know about close on exec mode "e" without probing, + skip it. E.g., the Windows runtime issues an "Invalid parameter + passed to C runtime function" OutputDebugString warning for + unknown modes. Assume that if O_CLOEXEC is zero, then "e" isn't + supported. On MinGW, O_CLOEXEC is an alias of O_NOINHERIT, and + "e" isn't supported. */ + static int fopen_e_ever_failed_einval = + O_CLOEXEC == 0 || O_CLOEXEC == O_NOINHERIT; + + if (!fopen_e_ever_failed_einval) + { + char *copy; + + copy = (char *) alloca (strlen (opentype) + 2); + strcpy (copy, opentype); + /* This is a glibc extension but we try it unconditionally on + this path. */ + strcat (copy, "e"); + result = fopen (filename, copy); + + if (result == NULL && errno == EINVAL) + { + result = fopen (filename, opentype); + if (result != NULL) + fopen_e_ever_failed_einval = 1; + } + } + else + result = fopen (filename, opentype); + + if (result != NULL) + maybe_mark_cloexec (fileno (result)); + + return gdb_file_up (result); +} + +#ifdef HAVE_SOCKETS +/* See filestuff.h. */ + +int +gdb_socketpair_cloexec (int domain, int style, int protocol, + int filedes[2]) +{ +#ifdef HAVE_SOCKETPAIR + int result = socketpair (domain, style | SOCK_CLOEXEC, protocol, filedes); + + if (result != -1) + { + socket_mark_cloexec (filedes[0]); + socket_mark_cloexec (filedes[1]); + } + + return result; +#else + gdb_assert_not_reached (_("socketpair not available on this host")); +#endif +} + +/* See filestuff.h. */ + +int +gdb_socket_cloexec (int domain, int style, int protocol) +{ + int result = socket (domain, style | SOCK_CLOEXEC, protocol); + + if (result != -1) + socket_mark_cloexec (result); + + return result; +} +#endif + +/* See filestuff.h. */ + +int +gdb_pipe_cloexec (int filedes[2]) +{ + int result; + +#ifdef HAVE_PIPE2 + result = pipe2 (filedes, O_CLOEXEC); + if (result != -1) + { + maybe_mark_cloexec (filedes[0]); + maybe_mark_cloexec (filedes[1]); + } +#else +#ifdef HAVE_PIPE + result = pipe (filedes); + if (result != -1) + { + mark_cloexec (filedes[0]); + mark_cloexec (filedes[1]); + } +#else /* HAVE_PIPE */ + gdb_assert_not_reached (_("pipe not available on this host")); +#endif /* HAVE_PIPE */ +#endif /* HAVE_PIPE2 */ + + return result; +} + +/* See gdbsupport/filestuff.h. */ + +bool +is_regular_file (const char *name, int *errno_ptr) +{ + struct stat st; + const int status = stat (name, &st); + + /* Stat should never fail except when the file does not exist. + If stat fails, analyze the source of error and return true + unless the file does not exist, to avoid returning false results + on obscure systems where stat does not work as expected. */ + + if (status != 0) + { + if (errno != ENOENT) + return true; + *errno_ptr = ENOENT; + return false; + } + + if (S_ISREG (st.st_mode)) + return true; + + if (S_ISDIR (st.st_mode)) + *errno_ptr = EISDIR; + else + *errno_ptr = EINVAL; + return false; +} + +/* See gdbsupport/filestuff.h. */ + +bool +mkdir_recursive (const char *dir) +{ + auto holder = make_unique_xstrdup (dir); + char * const start = holder.get (); + char *component_start = start; + char *component_end = start; + + while (1) + { + /* Find the beginning of the next component. */ + while (*component_start == '/') + component_start++; + + /* Are we done? */ + if (*component_start == '\0') + return true; + + /* Find the slash or null-terminator after this component. */ + component_end = component_start; + while (*component_end != '/' && *component_end != '\0') + component_end++; + + /* Temporarily replace the slash with a null terminator, so we can create + the directory up to this component. */ + char saved_char = *component_end; + *component_end = '\0'; + + /* If we get EEXIST and the existing path is a directory, then we're + happy. If it exists, but it's a regular file and this is not the last + component, we'll fail at the next component. If this is the last + component, the caller will fail with ENOTDIR when trying to + open/create a file under that path. */ + if (mkdir (start, 0700) != 0) + if (errno != EEXIST) + return false; + + /* Restore the overwritten char. */ + *component_end = saved_char; + component_start = component_end; + } +} diff -Nru gdb-9.1/gdbsupport/filestuff.h gdb-10.2/gdbsupport/filestuff.h --- gdb-9.1/gdbsupport/filestuff.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/filestuff.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,142 @@ +/* Low-level file-handling. + Copyright (C) 2012-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef COMMON_FILESTUFF_H +#define COMMON_FILESTUFF_H + +#include <dirent.h> +#include <fcntl.h> + +/* Note all the file descriptors which are open when this is called. + These file descriptors will not be closed by close_most_fds. */ + +extern void notice_open_fds (void); + +/* Mark a file descriptor as inheritable across an exec. */ + +extern void mark_fd_no_cloexec (int fd); + +/* Mark a file descriptor as no longer being inheritable across an + exec. This is only meaningful when FD was previously passed to + mark_fd_no_cloexec. */ + +extern void unmark_fd_no_cloexec (int fd); + +/* Close all open file descriptors other than those marked by + 'notice_open_fds', and stdin, stdout, and stderr. Errors that + occur while closing are ignored. */ + +extern void close_most_fds (void); + +/* Like 'open', but ensures that the returned file descriptor has the + close-on-exec flag set. */ + +extern int gdb_open_cloexec (const char *filename, int flags, + /* mode_t */ unsigned long mode); + +/* Like mkstemp, but ensures that the file descriptor is + close-on-exec. */ + +static inline int +gdb_mkostemp_cloexec (char *name_template, int flags = 0) +{ + /* gnulib provides a mkostemp replacement if needed. */ + return mkostemp (name_template, flags | O_CLOEXEC); +} + +/* Convenience wrapper for the above, which takes the filename as an + std::string. */ + +static inline int +gdb_open_cloexec (const std::string &filename, int flags, + /* mode_t */ unsigned long mode) +{ + return gdb_open_cloexec (filename.c_str (), flags, mode); +} + +struct gdb_file_deleter +{ + void operator() (FILE *file) const + { + fclose (file); + } +}; + +/* A unique pointer to a FILE. */ + +typedef std::unique_ptr<FILE, gdb_file_deleter> gdb_file_up; + +/* Like 'fopen', but ensures that the returned file descriptor has the + close-on-exec flag set. */ + +extern gdb_file_up gdb_fopen_cloexec (const char *filename, + const char *opentype); + +/* Convenience wrapper for the above, which takes the filename as an + std::string. */ + +static inline gdb_file_up +gdb_fopen_cloexec (const std::string &filename, const char *opentype) +{ + return gdb_fopen_cloexec (filename.c_str (), opentype); +} + +/* Like 'socketpair', but ensures that the returned file descriptors + have the close-on-exec flag set. */ + +extern int gdb_socketpair_cloexec (int domain, int style, int protocol, + int filedes[2]); + +/* Like 'socket', but ensures that the returned file descriptor has + the close-on-exec flag set. */ + +extern int gdb_socket_cloexec (int domain, int style, int protocol); + +/* Like 'pipe', but ensures that the returned file descriptors have + the close-on-exec flag set. */ + +extern int gdb_pipe_cloexec (int filedes[2]); + +struct gdb_dir_deleter +{ + void operator() (DIR *dir) const + { + closedir (dir); + } +}; + +/* A unique pointer to a DIR. */ + +typedef std::unique_ptr<DIR, gdb_dir_deleter> gdb_dir_up; + +/* Return true if the file NAME exists and is a regular file. + If the result is false then *ERRNO_PTR is set to a useful value assuming + we're expecting a regular file. */ +extern bool is_regular_file (const char *name, int *errno_ptr); + + +/* A cheap (as in low-quality) recursive mkdir. Try to create all the + parents directories up to DIR and DIR itself. Stop if we hit an + error along the way. There is no attempt to remove created + directories in case of failure. + + Returns false on failure and sets errno. */ + +extern bool mkdir_recursive (const char *dir); + +#endif /* COMMON_FILESTUFF_H */ diff -Nru gdb-9.1/gdbsupport/filtered-iterator.h gdb-10.2/gdbsupport/filtered-iterator.h --- gdb-9.1/gdbsupport/filtered-iterator.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/filtered-iterator.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,87 @@ +/* A forward filtered iterator for GDB, the GNU debugger. + Copyright (C) 2018-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef COMMON_FILTERED_ITERATOR_H +#define COMMON_FILTERED_ITERATOR_H + +/* A filtered iterator. This wraps BaseIterator and automatically + skips elements that FilterFunc filters out. Requires that + default-constructing a BaseIterator creates a valid one-past-end + iterator. */ + +template<typename BaseIterator, typename FilterFunc> +class filtered_iterator +{ +public: + typedef filtered_iterator self_type; + typedef typename BaseIterator::value_type value_type; + typedef typename BaseIterator::reference reference; + typedef typename BaseIterator::pointer pointer; + typedef typename BaseIterator::iterator_category iterator_category; + typedef typename BaseIterator::difference_type difference_type; + + /* Construct by forwarding all arguments to the underlying + iterator. */ + template<typename... Args> + explicit filtered_iterator (Args &&...args) + : m_it (std::forward<Args> (args)...) + { skip_filtered (); } + + /* Create a one-past-end iterator. */ + filtered_iterator () = default; + + /* Need these as the variadic constructor would be a better match + otherwise. */ + filtered_iterator (filtered_iterator &) = default; + filtered_iterator (const filtered_iterator &) = default; + filtered_iterator (filtered_iterator &&) = default; + filtered_iterator (const filtered_iterator &&other) + : filtered_iterator (static_cast<const filtered_iterator &> (other)) + {} + + value_type operator* () const { return *m_it; } + + self_type &operator++ () + { + ++m_it; + skip_filtered (); + return *this; + } + + bool operator== (const self_type &other) const + { return m_it == other.m_it; } + + bool operator!= (const self_type &other) const + { return m_it != other.m_it; } + +private: + + void skip_filtered () + { + for (; m_it != m_end; ++m_it) + if (m_filter (*m_it)) + break; + } + +private: + FilterFunc m_filter {}; + BaseIterator m_it {}; + BaseIterator m_end {}; +}; + +#endif /* COMMON_FILTERED_ITERATOR_H */ diff -Nru gdb-9.1/gdbsupport/format.cc gdb-10.2/gdbsupport/format.cc --- gdb-9.1/gdbsupport/format.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/format.cc 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,412 @@ +/* Parse a printf-style format string. + + Copyright (C) 1986-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "common-defs.h" +#include "format.h" + +format_pieces::format_pieces (const char **arg, bool gdb_extensions) +{ + const char *s; + const char *string; + const char *prev_start; + const char *percent_loc; + char *sub_start, *current_substring; + enum argclass this_argclass; + + s = *arg; + + if (gdb_extensions) + { + string = *arg; + *arg += strlen (*arg); + } + else + { + /* Parse the format-control string and copy it into the string STRING, + processing some kinds of escape sequence. */ + + char *f = (char *) alloca (strlen (s) + 1); + string = f; + + while ((gdb_extensions || *s != '"') && *s != '\0') + { + int c = *s++; + switch (c) + { + case '\0': + continue; + + case '\\': + switch (c = *s++) + { + case '\\': + *f++ = '\\'; + break; + case 'a': + *f++ = '\a'; + break; + case 'b': + *f++ = '\b'; + break; + case 'e': + *f++ = '\e'; + break; + case 'f': + *f++ = '\f'; + break; + case 'n': + *f++ = '\n'; + break; + case 'r': + *f++ = '\r'; + break; + case 't': + *f++ = '\t'; + break; + case 'v': + *f++ = '\v'; + break; + case '"': + *f++ = '"'; + break; + default: + /* ??? TODO: handle other escape sequences. */ + error (_("Unrecognized escape character \\%c in format string."), + c); + } + break; + + default: + *f++ = c; + } + } + + /* Terminate our escape-processed copy. */ + *f++ = '\0'; + + /* Whether the format string ended with double-quote or zero, we're + done with it; it's up to callers to complain about syntax. */ + *arg = s; + } + + /* Need extra space for the '\0's. Doubling the size is sufficient. */ + + current_substring = (char *) xmalloc (strlen (string) * 2 + 1000); + m_storage.reset (current_substring); + + /* Now scan the string for %-specs and see what kinds of args they want. + argclass classifies the %-specs so we can give printf-type functions + something of the right size. */ + + const char *f = string; + prev_start = string; + while (*f) + if (*f++ == '%') + { + int seen_hash = 0, seen_zero = 0, lcount = 0, seen_prec = 0; + int seen_space = 0, seen_plus = 0; + int seen_big_l = 0, seen_h = 0, seen_big_h = 0; + int seen_big_d = 0, seen_double_big_d = 0; + int seen_size_t = 0; + int bad = 0; + int n_int_args = 0; + bool seen_i64 = false; + + /* Skip over "%%", it will become part of a literal piece. */ + if (*f == '%') + { + f++; + continue; + } + + sub_start = current_substring; + + strncpy (current_substring, prev_start, f - 1 - prev_start); + current_substring += f - 1 - prev_start; + *current_substring++ = '\0'; + + if (*sub_start != '\0') + m_pieces.emplace_back (sub_start, literal_piece, 0); + + percent_loc = f - 1; + + /* Check the validity of the format specifier, and work + out what argument it expects. We only accept C89 + format strings, with the exception of long long (which + we autoconf for). */ + + /* The first part of a format specifier is a set of flag + characters. */ + while (*f != '\0' && strchr ("0-+ #", *f)) + { + if (*f == '#') + seen_hash = 1; + else if (*f == '0') + seen_zero = 1; + else if (*f == ' ') + seen_space = 1; + else if (*f == '+') + seen_plus = 1; + f++; + } + + /* The next part of a format specifier is a width. */ + if (gdb_extensions && *f == '*') + { + ++f; + ++n_int_args; + } + else + { + while (*f != '\0' && strchr ("0123456789", *f)) + f++; + } + + /* The next part of a format specifier is a precision. */ + if (*f == '.') + { + seen_prec = 1; + f++; + if (gdb_extensions && *f == '*') + { + ++f; + ++n_int_args; + } + else + { + while (*f != '\0' && strchr ("0123456789", *f)) + f++; + } + } + + /* The next part of a format specifier is a length modifier. */ + switch (*f) + { + case 'h': + seen_h = 1; + f++; + break; + case 'l': + f++; + lcount++; + if (*f == 'l') + { + f++; + lcount++; + } + break; + case 'L': + seen_big_l = 1; + f++; + break; + case 'H': + /* Decimal32 modifier. */ + seen_big_h = 1; + f++; + break; + case 'D': + /* Decimal64 and Decimal128 modifiers. */ + f++; + + /* Check for a Decimal128. */ + if (*f == 'D') + { + f++; + seen_double_big_d = 1; + } + else + seen_big_d = 1; + break; + case 'z': + /* For size_t or ssize_t. */ + seen_size_t = 1; + f++; + break; + case 'I': + /* Support the Windows '%I64' extension, because an + earlier call to format_pieces might have converted %lld + to %I64d. */ + if (f[1] == '6' && f[2] == '4') + { + f += 3; + lcount = 2; + seen_i64 = true; + } + break; + } + + switch (*f) + { + case 'u': + if (seen_hash) + bad = 1; + /* FALLTHROUGH */ + + case 'o': + case 'x': + case 'X': + if (seen_space || seen_plus) + bad = 1; + /* FALLTHROUGH */ + + case 'd': + case 'i': + if (seen_size_t) + this_argclass = size_t_arg; + else if (lcount == 0) + this_argclass = int_arg; + else if (lcount == 1) + this_argclass = long_arg; + else + this_argclass = long_long_arg; + + if (seen_big_l) + bad = 1; + break; + + case 'c': + this_argclass = lcount == 0 ? int_arg : wide_char_arg; + if (lcount > 1 || seen_h || seen_big_l) + bad = 1; + if (seen_prec || seen_zero || seen_space || seen_plus) + bad = 1; + break; + + case 'p': + this_argclass = ptr_arg; + if (lcount || seen_h || seen_big_l) + bad = 1; + if (seen_prec) + bad = 1; + if (seen_hash || seen_zero || seen_space || seen_plus) + bad = 1; + + if (gdb_extensions) + { + switch (f[1]) + { + case 's': + case 'F': + case '[': + case ']': + f++; + break; + } + } + + break; + + case 's': + this_argclass = lcount == 0 ? string_arg : wide_string_arg; + if (lcount > 1 || seen_h || seen_big_l) + bad = 1; + if (seen_zero || seen_space || seen_plus) + bad = 1; + break; + + case 'e': + case 'f': + case 'g': + case 'E': + case 'G': + if (seen_double_big_d) + this_argclass = dec128float_arg; + else if (seen_big_d) + this_argclass = dec64float_arg; + else if (seen_big_h) + this_argclass = dec32float_arg; + else if (seen_big_l) + this_argclass = long_double_arg; + else + this_argclass = double_arg; + + if (lcount || seen_h) + bad = 1; + break; + + case '*': + error (_("`*' not supported for precision or width in printf")); + + case 'n': + error (_("Format specifier `n' not supported in printf")); + + case '\0': + error (_("Incomplete format specifier at end of format string")); + + default: + error (_("Unrecognized format specifier '%c' in printf"), *f); + } + + if (bad) + error (_("Inappropriate modifiers to " + "format specifier '%c' in printf"), + *f); + + f++; + + sub_start = current_substring; + + if (lcount > 1 && !seen_i64 && USE_PRINTF_I64) + { + /* Windows' printf does support long long, but not the usual way. + Convert %lld to %I64d. */ + int length_before_ll = f - percent_loc - 1 - lcount; + + strncpy (current_substring, percent_loc, length_before_ll); + strcpy (current_substring + length_before_ll, "I64"); + current_substring[length_before_ll + 3] = + percent_loc[length_before_ll + lcount]; + current_substring += length_before_ll + 4; + } + else if (this_argclass == wide_string_arg + || this_argclass == wide_char_arg) + { + /* Convert %ls or %lc to %s. */ + int length_before_ls = f - percent_loc - 2; + + strncpy (current_substring, percent_loc, length_before_ls); + strcpy (current_substring + length_before_ls, "s"); + current_substring += length_before_ls + 2; + } + else + { + strncpy (current_substring, percent_loc, f - percent_loc); + current_substring += f - percent_loc; + } + + *current_substring++ = '\0'; + + prev_start = f; + + m_pieces.emplace_back (sub_start, this_argclass, n_int_args); + } + + /* Record the remainder of the string. */ + + if (f > prev_start) + { + sub_start = current_substring; + + strncpy (current_substring, prev_start, f - prev_start); + current_substring += f - prev_start; + *current_substring++ = '\0'; + + m_pieces.emplace_back (sub_start, literal_piece, 0); + } +} diff -Nru gdb-9.1/gdbsupport/format.h gdb-10.2/gdbsupport/format.h --- gdb-9.1/gdbsupport/format.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/format.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,101 @@ +/* Parse a printf-style format string. + + Copyright (C) 1986-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef COMMON_FORMAT_H +#define COMMON_FORMAT_H + +#include "gdbsupport/gdb_string_view.h" + +#if defined(__MINGW32__) && !defined(PRINTF_HAS_LONG_LONG) +# define USE_PRINTF_I64 1 +# define PRINTF_HAS_LONG_LONG +#else +# define USE_PRINTF_I64 0 +#endif + +/* The argclass represents the general type of data that goes with a + format directive; int_arg for %d, long_arg for %l, and so forth. + Note that these primarily distinguish types by size and need for + special handling, so for instance %u and %x are (at present) also + classed as int_arg. */ + +enum argclass + { + literal_piece, + int_arg, long_arg, long_long_arg, size_t_arg, ptr_arg, + string_arg, wide_string_arg, wide_char_arg, + double_arg, long_double_arg, + dec32float_arg, dec64float_arg, dec128float_arg + }; + +/* A format piece is a section of the format string that may include a + single print directive somewhere in it, and the associated class + for the argument. */ + +struct format_piece +{ + format_piece (const char *str, enum argclass argc, int n) + : string (str), + argclass (argc), + n_int_args (n) + { + } + + bool operator== (const format_piece &other) const + { + return (this->argclass == other.argclass + && gdb::string_view (this->string) == other.string); + } + + const char *string; + enum argclass argclass; + /* Count the number of preceding 'int' arguments that must be passed + along. This is used for a width or precision of '*'. Note that + this feature is only available in "gdb_extensions" mode. */ + int n_int_args; +}; + +class format_pieces +{ +public: + + format_pieces (const char **arg, bool gdb_extensions = false); + ~format_pieces () = default; + + DISABLE_COPY_AND_ASSIGN (format_pieces); + + typedef std::vector<format_piece>::iterator iterator; + + iterator begin () + { + return m_pieces.begin (); + } + + iterator end () + { + return m_pieces.end (); + } + +private: + + std::vector<format_piece> m_pieces; + gdb::unique_xmalloc_ptr<char> m_storage; +}; + +#endif /* COMMON_FORMAT_H */ diff -Nru gdb-9.1/gdbsupport/forward-scope-exit.h gdb-10.2/gdbsupport/forward-scope-exit.h --- gdb-9.1/gdbsupport/forward-scope-exit.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/forward-scope-exit.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,123 @@ +/* Copyright (C) 2019-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef COMMON_FORWARD_SCOPE_EXIT_H +#define COMMON_FORWARD_SCOPE_EXIT_H + +#include "gdbsupport/scope-exit.h" +#include <functional> + +/* A forward_scope_exit is like scope_exit, but instead of giving it a + callable, you instead specialize it for a given cleanup function, + and the generated class automatically has a constructor with the + same interface as the cleanup function. forward_scope_exit + captures the arguments passed to the ctor, and in turn passes those + as arguments to the wrapped cleanup function, when it is called at + scope exit time, from within the forward_scope_exit dtor. The + forward_scope_exit class can take any number of arguments, and is + cancelable if needed. + + This allows usage like this: + + void + delete_longjmp_breakpoint (int arg) + { + // Blah, blah, blah... + } + + using longjmp_breakpoint_cleanup + = FORWARD_SCOPE_EXIT (delete_longjmp_breakpoint); + + This above created a new cleanup class `longjmp_breakpoint_cleanup` + than can then be used like this: + + longjmp_breakpoint_cleanup obj (thread); + + // Blah, blah, blah... + + obj.release (); // Optional cancel if needed. + + forward_scope_exit is also handy when you would need to wrap a + scope_exit in a gdb::optional: + + gdb::optional<longjmp_breakpoint_cleanup> cleanup; + if (some condition) + cleanup.emplace (thread); + ... + if (cleanup) + cleanup->release (); + + since with scope exit, you would have to know the scope_exit's + callable template type when you create the gdb::optional: + + gdb:optional<scope_exit<what goes here?>> + + The "forward" naming fits both purposes shown above -- the class + "forwards" ctor arguments to the wrapped cleanup function at scope + exit time, and can also be used to "forward declare" + scope_exit-like objects. */ + +namespace detail +{ + +/* Function and Signature are passed in the same type, in order to + extract Function's arguments' types in the specialization below. + Those are used to generate the constructor. */ + +template<typename Function, Function *function, typename Signature> +struct forward_scope_exit; + +template<typename Function, Function *function, + typename Res, typename... Args> +class forward_scope_exit<Function, function, Res (Args...)> + : public scope_exit_base<forward_scope_exit<Function, + function, + Res (Args...)>> +{ + /* For access to on_exit(). */ + friend scope_exit_base<forward_scope_exit<Function, + function, + Res (Args...)>>; + +public: + explicit forward_scope_exit (Args ...args) + : m_bind_function (function, args...) + { + /* Nothing. */ + } + +private: + void on_exit () + { + m_bind_function (); + } + + /* The function and the arguments passed to the ctor, all packed in + a std::bind. */ + decltype (std::bind (function, std::declval<Args> ()...)) + m_bind_function; +}; + +} /* namespace detail */ + +/* This is the "public" entry point. It's a macro to avoid having to + name FUNC more than once. */ + +#define FORWARD_SCOPE_EXIT(FUNC) \ + detail::forward_scope_exit<decltype (FUNC), FUNC, decltype (FUNC)> + +#endif /* COMMON_FORWARD_SCOPE_EXIT_H */ diff -Nru gdb-9.1/gdbsupport/function-view.h gdb-10.2/gdbsupport/function-view.h --- gdb-9.1/gdbsupport/function-view.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/function-view.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,323 @@ +/* Copyright (C) 2017-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef COMMON_FUNCTION_VIEW_H +#define COMMON_FUNCTION_VIEW_H + +/* function_view is a polymorphic type-erasing wrapper class that + encapsulates a non-owning reference to arbitrary callable objects. + + A way to put it is that function_view is to std::function like + std::string_view is to std::string. While std::function stores a + type-erased callable object internally, function_view holds a + type-erased reference to an external callable object. + + This is meant to be used as callback type of a function that: + + #1 - Takes a callback as parameter. + + #2 - Wants to support arbitrary callable objects as callback type + (e.g., stateful function objects, lambda closures, free + functions). + + #3 - Does not store the callback anywhere; instead the function + just calls the callback directly or forwards it to some + other function that calls it. + + #4 - Can't be, or we don't want it to be, a template function + with the callable type as template parameter. For example, + when the callback is a parameter of a virtual member + function, or when putting the function template in a header + would expose too much implementation detail. + + Note that the C-style "function pointer" + "void *data" callback + parameter idiom fails requirement #2 above. Please don't add new + uses of that idiom. I.e., something like this wouldn't work; + + typedef bool (iterate_over_foos_cb) (foo *f, void *user_data), + void iterate_over_foos (iterate_over_foos_cb *callback, void *user_data); + + foo *find_foo_by_type (int type) + { + foo *found = nullptr; + + iterate_over_foos ([&] (foo *f, void *data) + { + if (foo->type == type) + { + found = foo; + return true; // stop iterating + } + return false; // continue iterating + }, NULL); + + return found; + } + + The above wouldn't compile, because lambdas with captures can't be + implicitly converted to a function pointer (because a capture means + some context data must be passed to the lambda somehow). + + C++11 gave us std::function as type-erased wrapper around arbitrary + callables, however, std::function is not an ideal fit for transient + callbacks such as the use case above. For this use case, which is + quite pervasive, a function_view is a better choice, because while + function_view is light and does not require any heap allocation, + std::function is a heavy-weight object with value semantics that + generally requires a heap allocation on construction/assignment of + the target callable. In addition, while it is possible to use + std::function in such a way that avoids most of the overhead by + making sure to only construct it with callables of types that fit + std::function's small object optimization, such as function + pointers and std::reference_wrapper callables, that is quite + inconvenient in practice, because restricting to free-function + callables would imply no state/capture/closure, which we need in + most cases, and std::reference_wrapper implies remembering to use + std::ref/std::cref where the callable is constructed, with the + added inconvenience that std::ref/std::cref have deleted rvalue-ref + overloads, meaning you can't use unnamed/temporary lambdas with + them. + + Note that because function_view is a non-owning view of a callable, + care must be taken to ensure that the callable outlives the + function_view that calls it. This is not really a problem for the + use case function_view is intended for, such as passing a temporary + function object / lambda to a function that accepts a callback, + because in those cases, the temporary is guaranteed to be live + until the called function returns. + + Calling a function_view with no associated target is undefined, + unlike with std::function, which throws std::bad_function_call. + This is by design, to avoid the otherwise necessary NULL check in + function_view::operator(). + + Since function_view objects are small (a pair of pointers), they + should generally be passed around by value. + + Usage: + + Given this function that accepts a callback: + + void + iterate_over_foos (gdb::function_view<void (foo *)> callback) + { + for (auto &foo : foos) + callback (&foo); + } + + you can call it like this, passing a lambda as callback: + + iterate_over_foos ([&] (foo *f) + { + process_one_foo (f); + }); + + or like this, passing a function object as callback: + + struct function_object + { + void operator() (foo *f) + { + if (s->check ()) + process_one_foo (f); + } + + // some state + state *s; + }; + + state mystate; + function_object matcher {&mystate}; + iterate_over_foos (matcher); + + or like this, passing a function pointer as callback: + + iterate_over_foos (process_one_foo); + + You can find unit tests covering the whole API in + unittests/function-view-selftests.c. */ + +namespace gdb { + +namespace fv_detail { +/* Bits shared by all function_view instantiations that do not depend + on the template parameters. */ + +/* Storage for the erased callable. This is a union in order to be + able to save both a function object (data) pointer or a function + pointer without triggering undefined behavior. */ +union erased_callable +{ + /* For function objects. */ + void *data; + + /* For function pointers. */ + void (*fn) (); +}; + +} /* namespace fv_detail */ + +/* Use partial specialization to get access to the callable's + signature. */ +template<class Signature> +struct function_view; + +template<typename Res, typename... Args> +class function_view<Res (Args...)> +{ + template<typename From, typename To> + using CompatibleReturnType + = Or<std::is_void<To>, + std::is_same<From, To>, + std::is_convertible<From, To>>; + + /* True if Func can be called with Args, and either the result is + Res, convertible to Res or Res is void. */ + template<typename Callable, + typename Res2 = typename std::result_of<Callable &(Args...)>::type> + struct IsCompatibleCallable : CompatibleReturnType<Res2, Res> + {}; + + /* True if Callable is a function_view. Used to avoid hijacking the + copy ctor. */ + template <typename Callable> + struct IsFunctionView + : std::is_same<function_view, typename std::decay<Callable>::type> + {}; + + public: + + /* NULL by default. */ + constexpr function_view () noexcept + : m_erased_callable {}, + m_invoker {} + {} + + /* Default copy/assignment is fine. */ + function_view (const function_view &) = default; + function_view &operator= (const function_view &) = default; + + /* This is the main entry point. Use SFINAE to avoid hijacking the + copy constructor and to ensure that the target type is + compatible. */ + template + <typename Callable, + typename = Requires<Not<IsFunctionView<Callable>>>, + typename = Requires<IsCompatibleCallable<Callable>>> + function_view (Callable &&callable) noexcept + { + bind (callable); + } + + /* Construct a NULL function_view. */ + constexpr function_view (std::nullptr_t) noexcept + : m_erased_callable {}, + m_invoker {} + {} + + /* Clear a function_view. */ + function_view &operator= (std::nullptr_t) noexcept + { + m_invoker = nullptr; + return *this; + } + + /* Return true if the wrapper has a target, false otherwise. Note + we check M_INVOKER instead of M_ERASED_CALLABLE because we don't + know which member of the union is active right now. */ + constexpr explicit operator bool () const noexcept + { return m_invoker != nullptr; } + + /* Call the callable. */ + Res operator () (Args... args) const + { return m_invoker (m_erased_callable, std::forward<Args> (args)...); } + + private: + + /* Bind this function_view to a compatible function object + reference. */ + template <typename Callable> + void bind (Callable &callable) noexcept + { + m_erased_callable.data = (void *) std::addressof (callable); + m_invoker = [] (fv_detail::erased_callable ecall, Args... args) + noexcept (noexcept (callable (std::forward<Args> (args)...))) -> Res + { + auto &restored_callable = *static_cast<Callable *> (ecall.data); + /* The explicit cast to Res avoids a compile error when Res is + void and the callable returns non-void. */ + return (Res) restored_callable (std::forward<Args> (args)...); + }; + } + + /* Bind this function_view to a compatible function pointer. + + Making this a separate function allows avoiding one indirection, + by storing the function pointer directly in the storage, instead + of a pointer to pointer. erased_callable is then a union in + order to avoid storing a function pointer as a data pointer here, + which would be undefined. */ + template<class Res2, typename... Args2> + void bind (Res2 (*fn) (Args2...)) noexcept + { + m_erased_callable.fn = reinterpret_cast<void (*) ()> (fn); + m_invoker = [] (fv_detail::erased_callable ecall, Args... args) + noexcept (noexcept (fn (std::forward<Args> (args)...))) -> Res + { + auto restored_fn = reinterpret_cast<Res2 (*) (Args2...)> (ecall.fn); + /* The explicit cast to Res avoids a compile error when Res is + void and the callable returns non-void. */ + return (Res) restored_fn (std::forward<Args> (args)...); + }; + } + + /* Storage for the erased callable. */ + fv_detail::erased_callable m_erased_callable; + + /* The invoker. This is set to a capture-less lambda by one of the + 'bind' overloads. The lambda restores the right type of the + callable (which is passed as first argument), and forwards the + args. */ + Res (*m_invoker) (fv_detail::erased_callable, Args...); +}; + +/* Allow comparison with NULL. Defer the work to the in-class + operator bool implementation. */ + +template<typename Res, typename... Args> +constexpr inline bool +operator== (const function_view<Res (Args...)> &f, std::nullptr_t) noexcept +{ return !static_cast<bool> (f); } + +template<typename Res, typename... Args> +constexpr inline bool +operator== (std::nullptr_t, const function_view<Res (Args...)> &f) noexcept +{ return !static_cast<bool> (f); } + +template<typename Res, typename... Args> +constexpr inline bool +operator!= (const function_view<Res (Args...)> &f, std::nullptr_t) noexcept +{ return static_cast<bool> (f); } + +template<typename Res, typename... Args> +constexpr inline bool +operator!= (std::nullptr_t, const function_view<Res (Args...)> &f) noexcept +{ return static_cast<bool> (f); } + +} /* namespace gdb */ + +#endif diff -Nru gdb-9.1/gdbsupport/gdb_assert.h gdb-10.2/gdbsupport/gdb_assert.h --- gdb-9.1/gdbsupport/gdb_assert.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/gdb_assert.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,61 @@ +/* GDB-friendly replacement for <assert.h>. + Copyright (C) 2000-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef COMMON_GDB_ASSERT_H +#define COMMON_GDB_ASSERT_H + +#include "errors.h" + +/* A static assertion. This will cause a compile-time error if EXPR, + which must be a compile-time constant, is false. */ + +#define gdb_static_assert(expr) static_assert (expr, "") + +/* PRAGMATICS: "gdb_assert.h":gdb_assert() is a lower case (rather + than upper case) macro since that provides the closest fit to the + existing lower case macro <assert.h>:assert() that it is + replacing. */ + +#define gdb_assert(expr) \ + ((void) ((expr) ? 0 : \ + (gdb_assert_fail (#expr, __FILE__, __LINE__, FUNCTION_NAME), 0))) + +/* This prints an "Assertion failed" message, asking the user if they + want to continue, dump core, or just exit. */ +#if defined (FUNCTION_NAME) +#define gdb_assert_fail(assertion, file, line, function) \ + internal_error (file, line, _("%s: Assertion `%s' failed."), \ + function, assertion) +#else +#define gdb_assert_fail(assertion, file, line, function) \ + internal_error (file, line, _("Assertion `%s' failed."), \ + assertion) +#endif + +/* The canonical form of gdb_assert (0). + MESSAGE is a string to include in the error message. */ + +#if defined (FUNCTION_NAME) +#define gdb_assert_not_reached(message) \ + internal_error (__FILE__, __LINE__, "%s: %s", FUNCTION_NAME, _(message)) +#else +#define gdb_assert_not_reached(message) \ + internal_error (__FILE__, __LINE__, _(message)) +#endif + +#endif /* COMMON_GDB_ASSERT_H */ diff -Nru gdb-9.1/gdbsupport/gdb_binary_search.h gdb-10.2/gdbsupport/gdb_binary_search.h --- gdb-9.1/gdbsupport/gdb_binary_search.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/gdb_binary_search.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,59 @@ +/* C++ implementation of a binary search. + + Copyright (C) 2019-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + + +#ifndef GDBSUPPORT_GDB_BINARY_SEARCH_H +#define GDBSUPPORT_GDB_BINARY_SEARCH_H + +#include <algorithm> + +namespace gdb { + +/* Implements a binary search using C++ iterators. + This differs from std::binary_search in that it returns an iterator for + the found element and in that the type of EL can be different from the + type of the elements in the container. + + COMP is a C-style comparison function with signature: + int comp(const value_type& a, const T& b); + It should return -1, 0 or 1 if a is less than, equal to, or greater than + b, respectively. + [first, last) must be sorted. + + The return value is an iterator pointing to the found element, or LAST if + no element was found. */ +template<typename It, typename T, typename Comp> +It binary_search (It first, It last, T el, Comp comp) +{ + auto lt = [&] (const typename std::iterator_traits<It>::value_type &a, + const T &b) + { return comp (a, b) < 0; }; + + auto lb = std::lower_bound (first, last, el, lt); + if (lb != last) + { + if (comp (*lb, el) == 0) + return lb; + } + return last; +} + +} /* namespace gdb */ + +#endif /* GDBSUPPORT_GDB_BINARY_SEARCH_H */ diff -Nru gdb-9.1/gdbsupport/gdb-dlfcn.cc gdb-10.2/gdbsupport/gdb-dlfcn.cc --- gdb-9.1/gdbsupport/gdb-dlfcn.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/gdb-dlfcn.cc 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,118 @@ +/* Platform independent shared object routines for GDB. + + Copyright (C) 2011-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "common-defs.h" +#include "gdb-dlfcn.h" + +#ifdef HAVE_DLFCN_H +#include <dlfcn.h> +#elif __MINGW32__ +#include <windows.h> +#else +/* Unsupported configuration. */ +#define NO_SHARED_LIB +#endif + +#ifdef NO_SHARED_LIB + +gdb_dlhandle_up +gdb_dlopen (const char *filename) +{ + gdb_assert_not_reached ("gdb_dlopen should not be called on this platform."); +} + +void * +gdb_dlsym (const gdb_dlhandle_up &handle, const char *symbol) +{ + gdb_assert_not_reached ("gdb_dlsym should not be called on this platform."); +} + +void +dlclose_deleter::operator() (void *handle) const +{ + gdb_assert_not_reached ("gdb_dlclose should not be called on this platform."); +} + +int +is_dl_available (void) +{ + return 0; +} + +#else /* NO_SHARED_LIB */ + +gdb_dlhandle_up +gdb_dlopen (const char *filename) +{ + void *result; +#ifdef HAVE_DLFCN_H + result = dlopen (filename, RTLD_NOW); +#elif __MINGW32__ + result = (void *) LoadLibrary (filename); +#endif + if (result != NULL) + return gdb_dlhandle_up (result); + +#ifdef HAVE_DLFCN_H + error (_("Could not load %s: %s"), filename, dlerror()); +#else + { + LPVOID buffer; + DWORD dw; + + dw = GetLastError(); + + FormatMessage (FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | + FORMAT_MESSAGE_IGNORE_INSERTS, + NULL, dw, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), + (LPTSTR) &buffer, + 0, NULL); + + error (_("Could not load %s: %s"), filename, (char *) buffer); + } +#endif +} + +void * +gdb_dlsym (const gdb_dlhandle_up &handle, const char *symbol) +{ +#ifdef HAVE_DLFCN_H + return dlsym (handle.get (), symbol); +#elif __MINGW32__ + return (void *) GetProcAddress ((HMODULE) handle.get (), symbol); +#endif +} + +void +dlclose_deleter::operator() (void *handle) const +{ +#ifdef HAVE_DLFCN_H + dlclose (handle); +#elif __MINGW32__ + FreeLibrary ((HMODULE) handle); +#endif +} + +int +is_dl_available (void) +{ + return 1; +} + +#endif /* NO_SHARED_LIB */ diff -Nru gdb-9.1/gdbsupport/gdb-dlfcn.h gdb-10.2/gdbsupport/gdb-dlfcn.h --- gdb-9.1/gdbsupport/gdb-dlfcn.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/gdb-dlfcn.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,51 @@ +/* Platform independent shared object routines for GDB. + + Copyright (C) 2011-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef GDB_DLFCN_H +#define GDB_DLFCN_H + +/* A deleter that closes an open dynamic library. */ + +struct dlclose_deleter +{ + void operator() (void *handle) const; +}; + +/* A unique pointer that points to a dynamic library. */ + +typedef std::unique_ptr<void, dlclose_deleter> gdb_dlhandle_up; + +/* Load the dynamic library file named FILENAME, and return a handle + for that dynamic library. Throw an error if the loading fails for + any reason. */ + +gdb_dlhandle_up gdb_dlopen (const char *filename); + +/* Return the address of the symbol named SYMBOL inside the shared + library whose handle is HANDLE. Return NULL when the symbol could + not be found. */ + +void *gdb_dlsym (const gdb_dlhandle_up &handle, const char *symbol); + +/* Return non-zero if the dynamic library functions are available on + this platform. */ + +int is_dl_available(void); + +#endif /* GDB_DLFCN_H */ diff -Nru gdb-9.1/gdbsupport/gdb_locale.h gdb-10.2/gdbsupport/gdb_locale.h --- gdb-9.1/gdbsupport/gdb_locale.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/gdb_locale.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,43 @@ +/* GDB-friendly replacement for <locale.h>. + Copyright (C) 2002-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef COMMON_GDB_LOCALE_H +#define COMMON_GDB_LOCALE_H + +#ifdef HAVE_LOCALE_H +# include <locale.h> +#endif + +#ifdef ENABLE_NLS +# include <libintl.h> +# define _(String) gettext (String) +# ifdef gettext_noop +# define N_(String) gettext_noop (String) +# else +# define N_(String) (String) +# endif +#else +# define _(String) (String) +# define N_(String) (String) +#endif + +#ifdef HAVE_LANGINFO_CODESET +#include <langinfo.h> +#endif + +#endif /* COMMON_GDB_LOCALE_H */ diff -Nru gdb-9.1/gdbsupport/gdb_optional.h gdb-10.2/gdbsupport/gdb_optional.h --- gdb-9.1/gdbsupport/gdb_optional.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/gdb_optional.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,221 @@ +/* An optional object. + + Copyright (C) 2017-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef COMMON_GDB_OPTIONAL_H +#define COMMON_GDB_OPTIONAL_H + +#include "gdbsupport/traits.h" + +namespace gdb +{ + +struct in_place_t +{ + explicit in_place_t () = default; +}; + +constexpr gdb::in_place_t in_place {}; + +/* This class attempts to be a compatible subset of std::optional, + which is slated to be available in C++17. This class optionally + holds an object of some type -- by default it is constructed not + holding an object, but later the object can be "emplaced". This is + similar to using std::unique_ptr, but in-object allocation is + guaranteed. + + Unlike std::optional, we currently only support copy/move + construction/assignment of an optional<T> from either exactly + optional<T> or T. I.e., we don't support copy/move + construction/assignment from optional<U> or U, when U is a type + convertible to T. Making that work depending on the definitions of + T and U is somewhat complicated, and currently the users of this + class don't need it. */ + +template<typename T> +class optional +{ +public: + + constexpr optional () + : m_dummy () + {} + + template<typename... Args> + constexpr optional (in_place_t, Args &&... args) + : m_item (std::forward<Args> (args)...), + m_instantiated (true) + {} + + ~optional () + { this->reset (); } + + /* Copy and move constructors. */ + + optional (const optional &other) + { + if (other.m_instantiated) + this->emplace (other.get ()); + } + + optional (optional &&other) + noexcept(std::is_nothrow_move_constructible<T> ()) + { + if (other.m_instantiated) + this->emplace (std::move (other.get ())); + } + + constexpr optional (const T &other) + : m_item (other), + m_instantiated (true) + {} + + constexpr optional (T &&other) + noexcept (std::is_nothrow_move_constructible<T> ()) + : m_item (std::move (other)), + m_instantiated (true) + {} + + /* Assignment operators. */ + + optional & + operator= (const optional &other) + { + if (m_instantiated && other.m_instantiated) + this->get () = other.get (); + else + { + if (other.m_instantiated) + this->emplace (other.get ()); + else + this->reset (); + } + + return *this; + } + + optional & + operator= (optional &&other) + noexcept (And<std::is_nothrow_move_constructible<T>, + std::is_nothrow_move_assignable<T>> ()) + { + if (m_instantiated && other.m_instantiated) + this->get () = std::move (other.get ()); + else + { + if (other.m_instantiated) + this->emplace (std::move (other.get ())); + else + this->reset (); + } + return *this; + } + + optional & + operator= (const T &other) + { + if (m_instantiated) + this->get () = other; + else + this->emplace (other); + return *this; + } + + optional & + operator= (T &&other) + noexcept (And<std::is_nothrow_move_constructible<T>, + std::is_nothrow_move_assignable<T>> ()) + { + if (m_instantiated) + this->get () = std::move (other); + else + this->emplace (std::move (other)); + return *this; + } + + template<typename... Args> + T &emplace (Args &&... args) + { + this->reset (); + new (&m_item) T (std::forward<Args>(args)...); + m_instantiated = true; + return this->get (); + } + + /* Observers. */ + constexpr const T *operator-> () const + { return std::addressof (this->get ()); } + + T *operator-> () + { return std::addressof (this->get ()); } + + constexpr const T &operator* () const & + { return this->get (); } + + T &operator* () & + { return this->get (); } + + T &&operator* () && + { return std::move (this->get ()); } + + constexpr const T &&operator* () const && + { return std::move (this->get ()); } + + constexpr explicit operator bool () const noexcept + { return m_instantiated; } + + constexpr bool has_value () const noexcept + { return m_instantiated; } + + /* 'reset' is a 'safe' operation with no precondition. */ + void reset () noexcept + { + if (m_instantiated) + this->destroy (); + } + +private: + + /* Destroy the object. */ + void destroy () + { + gdb_assert (m_instantiated); + m_instantiated = false; + m_item.~T (); + } + + /* The get operations have m_instantiated as a precondition. */ + T &get () noexcept { return m_item; } + constexpr const T &get () const noexcept { return m_item; } + + /* The object. */ + union + { + struct { } m_dummy; + T m_item; + volatile char dont_use; /* Silences -Wmaybe-uninitialized warning, see + PR gcc/80635. */ + }; + + /* True if the object was ever emplaced. */ + bool m_instantiated = false; +}; + +} + +#endif /* COMMON_GDB_OPTIONAL_H */ diff -Nru gdb-9.1/gdbsupport/gdb_proc_service.h gdb-10.2/gdbsupport/gdb_proc_service.h --- gdb-9.1/gdbsupport/gdb_proc_service.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/gdb_proc_service.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,202 @@ +/* <proc_service.h> replacement for systems that don't have it. + Copyright (C) 2000-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef COMMON_GDB_PROC_SERVICE_H +#define COMMON_GDB_PROC_SERVICE_H + +#include <sys/types.h> + +#ifdef HAVE_PROC_SERVICE_H + +/* glibc's proc_service.h doesn't wrap itself with extern "C". Need + to do it ourselves. */ +EXTERN_C_PUSH + +#include <proc_service.h> + +EXTERN_C_POP + +#else /* HAVE_PROC_SERVICE_H */ + +/* The following fallback definitions have been imported and adjusted + from glibc's proc_service.h */ + +/* Callback interface for libthread_db, functions users must define. + Copyright (C) 1999,2002,2003 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ + +/* The definitions in this file must correspond to those in the debugger. */ + +#ifdef HAVE_SYS_PROCFS_H +#include <sys/procfs.h> +#endif + +/* Not all platforms bring in <linux/elf.h> via <sys/procfs.h>. If + <sys/procfs.h> wasn't enough to find elf_fpregset_t, try the kernel + headers also (but don't if we don't need to). */ +#ifndef HAVE_ELF_FPREGSET_T +# ifdef HAVE_LINUX_ELF_H +# include <linux/elf.h> +# endif +#endif + +EXTERN_C_PUSH + +/* Functions in this interface return one of these status codes. */ +typedef enum +{ + PS_OK, /* Generic "call succeeded". */ + PS_ERR, /* Generic error. */ + PS_BADPID, /* Bad process handle. */ + PS_BADLID, /* Bad LWP identifier. */ + PS_BADADDR, /* Bad address. */ + PS_NOSYM, /* Could not find given symbol. */ + PS_NOFREGS /* FPU register set not available for given LWP. */ +} ps_err_e; + +#ifndef HAVE_LWPID_T +typedef unsigned int lwpid_t; +#endif + +#ifndef HAVE_PSADDR_T +typedef void *psaddr_t; +#endif + +#ifndef HAVE_PRGREGSET_T +typedef elf_gregset_t prgregset_t; +#endif + +#ifndef HAVE_PRFPREGSET_T +typedef elf_fpregset_t prfpregset_t; +#endif + +/* This type is opaque in this interface. It's defined by the user of + libthread_db. GDB's version is defined below. */ +struct ps_prochandle; + + +/* Read or write process memory at the given address. */ +extern ps_err_e ps_pdread (struct ps_prochandle *, + psaddr_t, void *, size_t); +extern ps_err_e ps_pdwrite (struct ps_prochandle *, + psaddr_t, const void *, size_t); +extern ps_err_e ps_ptread (struct ps_prochandle *, + psaddr_t, void *, size_t); +extern ps_err_e ps_ptwrite (struct ps_prochandle *, + psaddr_t, const void *, size_t); + + +/* Get and set the given LWP's general or FPU register set. */ +extern ps_err_e ps_lgetregs (struct ps_prochandle *, + lwpid_t, prgregset_t); +extern ps_err_e ps_lsetregs (struct ps_prochandle *, + lwpid_t, const prgregset_t); +extern ps_err_e ps_lgetfpregs (struct ps_prochandle *, + lwpid_t, prfpregset_t *); +extern ps_err_e ps_lsetfpregs (struct ps_prochandle *, + lwpid_t, const prfpregset_t *); + +/* Return the PID of the process. */ +extern pid_t ps_getpid (struct ps_prochandle *); + +/* Fetch the special per-thread address associated with the given LWP. + This call is only used on a few platforms (most use a normal register). + The meaning of the `int' parameter is machine-dependent. */ +extern ps_err_e ps_get_thread_area (struct ps_prochandle *, + lwpid_t, int, psaddr_t *); + + +/* Look up the named symbol in the named DSO in the symbol tables + associated with the process being debugged, filling in *SYM_ADDR + with the corresponding run-time address. */ +extern ps_err_e ps_pglobal_lookup (struct ps_prochandle *, + const char *object_name, + const char *sym_name, + psaddr_t *sym_addr); + + +/* Stop or continue the entire process. */ +extern ps_err_e ps_pstop (struct ps_prochandle *); +extern ps_err_e ps_pcontinue (struct ps_prochandle *); + +/* Stop or continue the given LWP alone. */ +extern ps_err_e ps_lstop (struct ps_prochandle *, lwpid_t); +extern ps_err_e ps_lcontinue (struct ps_prochandle *, lwpid_t); + +/* The following are only defined in/called by Solaris. */ + +/* Get size of extra register set. */ +extern ps_err_e ps_lgetxregsize (struct ps_prochandle *ph, + lwpid_t lwpid, int *xregsize); +/* Get extra register set. */ +extern ps_err_e ps_lgetxregs (struct ps_prochandle *ph, lwpid_t lwpid, + caddr_t xregset); +extern ps_err_e ps_lsetxregs (struct ps_prochandle *ph, lwpid_t lwpid, + caddr_t xregset); + +/* Log a message (sends to gdb_stderr). */ +extern void ps_plog (const char *fmt, ...); + +EXTERN_C_POP + +#endif /* HAVE_PROC_SERVICE_H */ + +/* Make sure we export the needed symbols, in case GDB is built with + -fvisibility=hidden. */ + +#define PS_EXPORT(SYM) \ + __attribute__((visibility ("default"))) typeof (SYM) SYM + +PS_EXPORT (ps_get_thread_area); +PS_EXPORT (ps_getpid); +PS_EXPORT (ps_lcontinue); +PS_EXPORT (ps_lgetfpregs); +PS_EXPORT (ps_lgetregs); +PS_EXPORT (ps_lsetfpregs); +PS_EXPORT (ps_lsetregs); +PS_EXPORT (ps_lstop); +PS_EXPORT (ps_pcontinue); +PS_EXPORT (ps_pdread); +PS_EXPORT (ps_pdwrite); +PS_EXPORT (ps_pglobal_lookup); +PS_EXPORT (ps_pstop); +PS_EXPORT (ps_ptread); +PS_EXPORT (ps_ptwrite); + +#ifdef __sun__ +PS_EXPORT (ps_lgetxregs); +PS_EXPORT (ps_lgetxregsize); +PS_EXPORT (ps_lsetxregs); +PS_EXPORT (ps_plog); +#endif + +#endif /* COMMON_GDB_PROC_SERVICE_H */ diff -Nru gdb-9.1/gdbsupport/gdb_ref_ptr.h gdb-10.2/gdbsupport/gdb_ref_ptr.h --- gdb-9.1/gdbsupport/gdb_ref_ptr.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/gdb_ref_ptr.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,228 @@ +/* Reference-counted smart pointer class + + Copyright (C) 2016-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef COMMON_GDB_REF_PTR_H +#define COMMON_GDB_REF_PTR_H + +#include <cstddef> + +namespace gdb +{ + +/* An instance of this class either holds a reference to a + reference-counted object or is "NULL". Reference counting is + handled externally by a policy class. If the object holds a + reference, then when the object is destroyed, the reference is + decref'd. + + Normally an instance is constructed using a pointer. This sort of + initialization lets this class manage the lifetime of that + reference. + + Assignment and copy construction will make a new reference as + appropriate. Assignment from a plain pointer is disallowed to + avoid confusion about whether this acquires a new reference; + instead use the "reset" method -- which, like the pointer + constructor, transfers ownership. + + The policy class must provide two static methods: + void incref (T *); + void decref (T *); +*/ +template<typename T, typename Policy> +class ref_ptr +{ + public: + + /* Create a new NULL instance. */ + ref_ptr () + : m_obj (NULL) + { + } + + /* Create a new NULL instance. Note that this is not explicit. */ + ref_ptr (const std::nullptr_t) + : m_obj (NULL) + { + } + + /* Create a new instance. OBJ is a reference, management of which + is now transferred to this class. */ + explicit ref_ptr (T *obj) + : m_obj (obj) + { + } + + /* Copy another instance. */ + ref_ptr (const ref_ptr &other) + : m_obj (other.m_obj) + { + if (m_obj != NULL) + Policy::incref (m_obj); + } + + /* Transfer ownership from OTHER. */ + ref_ptr (ref_ptr &&other) noexcept + : m_obj (other.m_obj) + { + other.m_obj = NULL; + } + + /* Destroy this instance. */ + ~ref_ptr () + { + if (m_obj != NULL) + Policy::decref (m_obj); + } + + /* Copy another instance. */ + ref_ptr &operator= (const ref_ptr &other) + { + /* Do nothing on self-assignment. */ + if (this != &other) + { + reset (other.m_obj); + if (m_obj != NULL) + Policy::incref (m_obj); + } + return *this; + } + + /* Transfer ownership from OTHER. */ + ref_ptr &operator= (ref_ptr &&other) + { + /* Do nothing on self-assignment. */ + if (this != &other) + { + reset (other.m_obj); + other.m_obj = NULL; + } + return *this; + } + + /* Change this instance's referent. OBJ is a reference, management + of which is now transferred to this class. */ + void reset (T *obj) + { + if (m_obj != NULL) + Policy::decref (m_obj); + m_obj = obj; + } + + /* Return this instance's referent without changing the state of + this class. */ + T *get () const + { + return m_obj; + } + + /* Return this instance's referent, and stop managing this + reference. The caller is now responsible for the ownership of + the reference. */ + ATTRIBUTE_UNUSED_RESULT T *release () + { + T *result = m_obj; + + m_obj = NULL; + return result; + } + + /* Let users refer to members of the underlying pointer. */ + T *operator-> () const + { + return m_obj; + } + + /* Acquire a new reference and return a ref_ptr that owns it. */ + static ref_ptr<T, Policy> new_reference (T *obj) + { + Policy::incref (obj); + return ref_ptr<T, Policy> (obj); + } + + private: + + T *m_obj; +}; + +template<typename T, typename Policy> +inline bool operator== (const ref_ptr<T, Policy> &lhs, + const ref_ptr<T, Policy> &rhs) +{ + return lhs.get () == rhs.get (); +} + +template<typename T, typename Policy> +inline bool operator== (const ref_ptr<T, Policy> &lhs, const T *rhs) +{ + return lhs.get () == rhs; +} + +template<typename T, typename Policy> +inline bool operator== (const ref_ptr<T, Policy> &lhs, const std::nullptr_t) +{ + return lhs.get () == nullptr; +} + +template<typename T, typename Policy> +inline bool operator== (const T *lhs, const ref_ptr<T, Policy> &rhs) +{ + return lhs == rhs.get (); +} + +template<typename T, typename Policy> +inline bool operator== (const std::nullptr_t, const ref_ptr<T, Policy> &rhs) +{ + return nullptr == rhs.get (); +} + +template<typename T, typename Policy> +inline bool operator!= (const ref_ptr<T, Policy> &lhs, + const ref_ptr<T, Policy> &rhs) +{ + return lhs.get () != rhs.get (); +} + +template<typename T, typename Policy> +inline bool operator!= (const ref_ptr<T, Policy> &lhs, const T *rhs) +{ + return lhs.get () != rhs; +} + +template<typename T, typename Policy> +inline bool operator!= (const ref_ptr<T, Policy> &lhs, const std::nullptr_t) +{ + return lhs.get () != nullptr; +} + +template<typename T, typename Policy> +inline bool operator!= (const T *lhs, const ref_ptr<T, Policy> &rhs) +{ + return lhs != rhs.get (); +} + +template<typename T, typename Policy> +inline bool operator!= (const std::nullptr_t, const ref_ptr<T, Policy> &rhs) +{ + return nullptr != rhs.get (); +} + +} + +#endif /* COMMON_GDB_REF_PTR_H */ diff -Nru gdb-9.1/gdbsupport/gdb-safe-ctype.h gdb-10.2/gdbsupport/gdb-safe-ctype.h --- gdb-9.1/gdbsupport/gdb-safe-ctype.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/gdb-safe-ctype.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,46 @@ +/* Wrapper around libiberty's safe-ctype.h for GDB, the GNU debugger. + + Copyright (C) 2019-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef GDB_SAFE_CTYPE_H +#define GDB_SAFE_CTYPE_H + +/* After safe-ctype.h is included, we can no longer use the host's + ctype routines. Trying to do so results in compile errors. Code + that uses safe-ctype.h that wants to refer to the locale-dependent + ctype functions must call these wrapper versions instead. */ + +static inline int +gdb_isprint (int ch) +{ + return isprint (ch); +} + +/* readline.h defines these symbols too, but we want libiberty's + versions. */ +#undef ISALPHA +#undef ISALNUM +#undef ISDIGIT +#undef ISLOWER +#undef ISPRINT +#undef ISUPPER +#undef ISXDIGIT + +#include "safe-ctype.h" + +#endif diff -Nru gdb-9.1/gdbsupport/gdb_select.h gdb-10.2/gdbsupport/gdb_select.h --- gdb-9.1/gdbsupport/gdb_select.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/gdb_select.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,51 @@ +/* Slightly more portable version of <sys/select.h>. + + Copyright (C) 2006-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#if !defined(GDB_SELECT_H) +#define GDB_SELECT_H + +#ifdef HAVE_SYS_SELECT_H +#include <sys/select.h> +#else +#include "gdbsupport/gdb_sys_time.h" +#endif + +#ifdef USE_WIN32API +#include <winsock2.h> +#endif + +extern int gdb_select (int n, fd_set *readfds, fd_set *writefds, + fd_set *exceptfds, struct timeval *timeout); + +/* Convenience wrapper around gdb_select that returns -1/EINTR if + set_quit_flag is set, either on entry or from a signal handler or + from a different thread while select is blocked. The quit flag is + not cleared on exit -- the caller is responsible to check it with + check_quit_flag or QUIT. + + Note this does NOT return -1/EINTR if any signal handler other than + SIGINT runs, nor if the current SIGINT handler does not call + set_quit_flag. */ +extern int interruptible_select (int n, + fd_set *readfds, + fd_set *writefds, + fd_set *exceptfds, + struct timeval *timeout); + +#endif /* !defined(GDB_SELECT_H) */ diff -Nru gdb-9.1/gdbsupport/gdb_setjmp.h gdb-10.2/gdbsupport/gdb_setjmp.h --- gdb-9.1/gdbsupport/gdb_setjmp.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/gdb_setjmp.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,36 @@ +/* Portability wrappers for setjmp and longjmp. + Copyright (C) 1986-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef COMMON_GDB_SETJMP_H +#define COMMON_GDB_SETJMP_H + +#include <setjmp.h> + +#ifdef HAVE_SIGSETJMP +#define SIGJMP_BUF sigjmp_buf +#define SIGSETJMP(buf,val) sigsetjmp((buf), val) +#define SIGLONGJMP(buf,val) siglongjmp((buf), (val)) +#else +#define SIGJMP_BUF jmp_buf +/* We ignore val here because that's safer and avoids having to check + whether _setjmp exists. */ +#define SIGSETJMP(buf,val) setjmp(buf) +#define SIGLONGJMP(buf,val) longjmp((buf), (val)) +#endif + +#endif /* COMMON_GDB_SETJMP_H */ diff -Nru gdb-9.1/gdbsupport/gdb-sigmask.h gdb-10.2/gdbsupport/gdb-sigmask.h --- gdb-9.1/gdbsupport/gdb-sigmask.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/gdb-sigmask.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,45 @@ +/* sigprocmask wrapper for gdb + + Copyright (C) 2019-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef GDBSUPPORT_GDB_SIGMASK_H +#define GDBSUPPORT_GDB_SIGMASK_H + +#include <signal.h> + +#ifdef HAVE_SIGPROCMASK + +#ifdef HAVE_PTHREAD_SIGMASK +#define gdb_sigmask pthread_sigmask +#else +#define gdb_sigmask sigprocmask +#endif + +#else /* HAVE_SIGPROCMASK */ + +/* Other code checks HAVE_SIGPROCMASK, but if there happened to be a + system that only had pthread_sigmask, we could still use it with + some extra changes. */ +#ifdef HAVE_PTHREAD_SIGMASK +#error pthread_sigmask available without sigprocmask - please report +#endif + +#endif /* HAVE_SIGPROCMASK */ + + +#endif /* GDBSUPPORT_GDB_SIGMASK_H */ diff -Nru gdb-9.1/gdbsupport/gdb_signals.h gdb-10.2/gdbsupport/gdb_signals.h --- gdb-9.1/gdbsupport/gdb_signals.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/gdb_signals.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,58 @@ +/* Target signal translation functions for GDB. + Copyright (C) 1990-2021 Free Software Foundation, Inc. + Contributed by Cygnus Support. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef COMMON_GDB_SIGNALS_H +#define COMMON_GDB_SIGNALS_H + +#include "gdb/signals.h" + +/* Predicate to gdb_signal_to_host(). Return non-zero if the enum + targ_signal SIGNO has an equivalent ``host'' representation. */ +/* FIXME: cagney/1999-11-22: The name below was chosen in preference + to the shorter gdb_signal_p() because it is far less ambigious. + In this context ``gdb_signal'' refers to GDB's internal + representation of the target's set of signals while ``host signal'' + refers to the target operating system's signal. Confused? */ +extern int gdb_signal_to_host_p (enum gdb_signal signo); + +/* Convert between host signal numbers and enum gdb_signal's. + gdb_signal_to_host() returns 0 and prints a warning() on GDB's + console if SIGNO has no equivalent host representation. */ +/* FIXME: cagney/1999-11-22: Here ``host'' is used incorrectly, it is + refering to the target operating system's signal numbering. + Similarly, ``enum gdb_signal'' is named incorrectly, ``enum + gdb_signal'' would probably be better as it is refering to GDB's + internal representation of a target operating system's signal. */ +extern enum gdb_signal gdb_signal_from_host (int); +extern int gdb_signal_to_host (enum gdb_signal); + +/* Return the enum symbol name of SIG as a string, to use in debug + output. */ +extern const char *gdb_signal_to_symbol_string (enum gdb_signal sig); + +/* Return the string for a signal. */ +extern const char *gdb_signal_to_string (enum gdb_signal); + +/* Return the name (SIGHUP, etc.) for a signal. */ +extern const char *gdb_signal_to_name (enum gdb_signal); + +/* Given a name (SIGHUP, etc.), return its signal. */ +enum gdb_signal gdb_signal_from_name (const char *); + +#endif /* COMMON_GDB_SIGNALS_H */ diff -Nru gdb-9.1/gdbsupport/gdb_splay_tree.h gdb-10.2/gdbsupport/gdb_splay_tree.h --- gdb-9.1/gdbsupport/gdb_splay_tree.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/gdb_splay_tree.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,42 @@ +/* GDB wrapper for splay trees. + + Copyright (C) 2017-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef COMMON_GDB_SPLAY_TREE_H +#define COMMON_GDB_SPLAY_TREE_H + +#include "splay-tree.h" + +namespace gdb { + +struct splay_tree_deleter +{ + void operator() (splay_tree tree) const + { + splay_tree_delete (tree); + } +}; + +} /* namespace gdb */ + +/* A unique pointer to a splay tree. */ + +typedef std::unique_ptr<splay_tree_s, gdb::splay_tree_deleter> + gdb_splay_tree_up; + +#endif /* COMMON_GDB_SPLAY_TREE_H */ diff -Nru gdb-9.1/gdbsupport/gdb_string_view.h gdb-10.2/gdbsupport/gdb_string_view.h --- gdb-9.1/gdbsupport/gdb_string_view.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/gdb_string_view.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,566 @@ +// Components for manipulating non-owning sequences of characters -*- C++ -*- + + +#ifndef COMMON_GDB_STRING_VIEW_H +#define COMMON_GDB_STRING_VIEW_H + +// Note: This file has been stolen from the gcc repo +// (libstdc++-v3/include/experimental/string_view) and has local modifications. + +// Copyright (C) 2013-2021 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. 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 the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// <http://www.gnu.org/licenses/>. + +// +// N3762 basic_string_view library +// + + +#if __cplusplus >= 201703L + +#include <string_view> + +namespace gdb { + using string_view = std::string_view; +} /* namespace gdb */ + +#else /* __cplusplus < 201703L */ + +#include <string> +#include <limits> +#include "gdb_assert.h" + +namespace gdb { + + /** + * @class basic_string_view <experimental/string_view> + * @brief A non-owning reference to a string. + * + * @ingroup strings + * @ingroup sequences + * @ingroup experimental + * + * @tparam _CharT Type of character + * @tparam _Traits Traits for character type, defaults to + * char_traits<_CharT>. + * + * A basic_string_view looks like this: + * + * @code + * _CharT* _M_str + * size_t _M_len + * @endcode + */ + template<typename _CharT, typename _Traits = std::char_traits<_CharT>> + class basic_string_view + { + public: + + // types + using traits_type = _Traits; + using value_type = _CharT; + using pointer = const _CharT*; + using const_pointer = const _CharT*; + using reference = const _CharT&; + using const_reference = const _CharT&; + using const_iterator = const _CharT*; + using iterator = const_iterator; + using const_reverse_iterator = std::reverse_iterator<const_iterator>; + using reverse_iterator = const_reverse_iterator; + using size_type = size_t; + using difference_type = ptrdiff_t; + static constexpr size_type npos = size_type(-1); + + // [string.view.cons], construct/copy + + constexpr + basic_string_view() noexcept + : _M_len{0}, _M_str{nullptr} + { } + + constexpr basic_string_view(const basic_string_view&) noexcept = default; + + template<typename _Allocator> + basic_string_view(const std::basic_string<_CharT, _Traits, + _Allocator>& __str) noexcept + : _M_len{__str.length()}, _M_str{__str.data()} + { } + + /*constexpr*/ basic_string_view(const _CharT* __str) + : _M_len{__str == nullptr ? 0 : traits_type::length(__str)}, + _M_str{__str} + { } + + constexpr basic_string_view(const _CharT* __str, size_type __len) + : _M_len{__len}, + _M_str{__str} + { } + + basic_string_view& + operator=(const basic_string_view&) noexcept = default; + + // [string.view.iterators], iterators + + constexpr const_iterator + begin() const noexcept + { return this->_M_str; } + + constexpr const_iterator + end() const noexcept + { return this->_M_str + this->_M_len; } + + constexpr const_iterator + cbegin() const noexcept + { return this->_M_str; } + + constexpr const_iterator + cend() const noexcept + { return this->_M_str + this->_M_len; } + + const_reverse_iterator + rbegin() const noexcept + { return const_reverse_iterator(this->end()); } + + const_reverse_iterator + rend() const noexcept + { return const_reverse_iterator(this->begin()); } + + const_reverse_iterator + crbegin() const noexcept + { return const_reverse_iterator(this->end()); } + + const_reverse_iterator + crend() const noexcept + { return const_reverse_iterator(this->begin()); } + + // [string.view.capacity], capacity + + constexpr size_type + size() const noexcept + { return this->_M_len; } + + constexpr size_type + length() const noexcept + { return _M_len; } + + constexpr size_type + max_size() const noexcept + { + return (npos - sizeof(size_type) - sizeof(void*)) + / sizeof(value_type) / 4; + } + + constexpr bool + empty() const noexcept + { return this->_M_len == 0; } + + // [string.view.access], element access + + constexpr const _CharT& + operator[](size_type __pos) const + { + // TODO: Assert to restore in a way compatible with the constexpr. + // __glibcxx_assert(__pos < this->_M_len); + return *(this->_M_str + __pos); + } + + constexpr const _CharT& + at(size_type __pos) const + { + return __pos < this->_M_len + ? *(this->_M_str + __pos) + : (error (_("basic_string_view::at: __pos " + "(which is %zu) >= this->size() " + "(which is %zu)"), + __pos, this->size()), + *this->_M_str); + } + + constexpr const _CharT& + front() const + { + // TODO: Assert to restore in a way compatible with the constexpr. + // __glibcxx_assert(this->_M_len > 0); + return *this->_M_str; + } + + constexpr const _CharT& + back() const + { + // TODO: Assert to restore in a way compatible with the constexpr. + // __glibcxx_assert(this->_M_len > 0); + return *(this->_M_str + this->_M_len - 1); + } + + constexpr const _CharT* + data() const noexcept + { return this->_M_str; } + + // [string.view.modifiers], modifiers: + + /*constexpr*/ void + remove_prefix(size_type __n) + { + gdb_assert (this->_M_len >= __n); + this->_M_str += __n; + this->_M_len -= __n; + } + + /*constexpr*/ void + remove_suffix(size_type __n) + { this->_M_len -= __n; } + + /*constexpr*/ void + swap(basic_string_view& __sv) noexcept + { + auto __tmp = *this; + *this = __sv; + __sv = __tmp; + } + + + // [string.view.ops], string operations: + + template<typename _Allocator> + explicit operator std::basic_string<_CharT, _Traits, _Allocator>() const + { + return { this->_M_str, this->_M_len }; + } + + size_type + copy(_CharT* __str, size_type __n, size_type __pos = 0) const + { + gdb_assert (__str != nullptr || __n == 0); + if (__pos > this->_M_len) + error (_("basic_string_view::copy: __pos " + "(which is %zu) > this->size() " + "(which is %zu)"), + __pos, this->size()); + size_type __rlen{std::min(__n, size_type{this->_M_len - __pos})}; + for (auto __begin = this->_M_str + __pos, + __end = __begin + __rlen; __begin != __end;) + *__str++ = *__begin++; + return __rlen; + } + + + // [string.view.ops], string operations: + + /*constexpr*/ basic_string_view + substr(size_type __pos, size_type __n=npos) const + { + return __pos <= this->_M_len + ? basic_string_view{this->_M_str + __pos, + std::min(__n, size_type{this->_M_len - __pos})} + : (error (_("basic_string_view::substr: __pos " + "(which is %zu) > this->size() " + "(which is %zu)"), + __pos, this->size()), basic_string_view{}); + } + + /*constexpr*/ int + compare(basic_string_view __str) const noexcept + { + int __ret = traits_type::compare(this->_M_str, __str._M_str, + std::min(this->_M_len, __str._M_len)); + if (__ret == 0) + __ret = _S_compare(this->_M_len, __str._M_len); + return __ret; + } + + /*constexpr*/ int + compare(size_type __pos1, size_type __n1, basic_string_view __str) const + { return this->substr(__pos1, __n1).compare(__str); } + + /*constexpr*/ int + compare(size_type __pos1, size_type __n1, + basic_string_view __str, size_type __pos2, size_type __n2) const + { return this->substr(__pos1, __n1).compare(__str.substr(__pos2, __n2)); } + + /*constexpr*/ int + compare(const _CharT* __str) const noexcept + { return this->compare(basic_string_view{__str}); } + + /*constexpr*/ int + compare(size_type __pos1, size_type __n1, const _CharT* __str) const + { return this->substr(__pos1, __n1).compare(basic_string_view{__str}); } + + /*constexpr*/ int + compare(size_type __pos1, size_type __n1, + const _CharT* __str, size_type __n2) const + { + return this->substr(__pos1, __n1) + .compare(basic_string_view(__str, __n2)); + } + + /*constexpr*/ size_type + find(basic_string_view __str, size_type __pos = 0) const noexcept + { return this->find(__str._M_str, __pos, __str._M_len); } + + /*constexpr*/ size_type + find(_CharT __c, size_type __pos=0) const noexcept; + + /*constexpr*/ size_type + find(const _CharT* __str, size_type __pos, size_type __n) const noexcept; + + /*constexpr*/ size_type + find(const _CharT* __str, size_type __pos=0) const noexcept + { return this->find(__str, __pos, traits_type::length(__str)); } + + /*constexpr*/ size_type + rfind(basic_string_view __str, size_type __pos = npos) const noexcept + { return this->rfind(__str._M_str, __pos, __str._M_len); } + + /*constexpr*/ size_type + rfind(_CharT __c, size_type __pos = npos) const noexcept; + + /*constexpr*/ size_type + rfind(const _CharT* __str, size_type __pos, size_type __n) const noexcept; + + /*constexpr*/ size_type + rfind(const _CharT* __str, size_type __pos = npos) const noexcept + { return this->rfind(__str, __pos, traits_type::length(__str)); } + + /*constexpr*/ size_type + find_first_of(basic_string_view __str, size_type __pos = 0) const noexcept + { return this->find_first_of(__str._M_str, __pos, __str._M_len); } + + /*constexpr*/ size_type + find_first_of(_CharT __c, size_type __pos = 0) const noexcept + { return this->find(__c, __pos); } + + /*constexpr*/ size_type + find_first_of(const _CharT* __str, size_type __pos, size_type __n) const; + + /*constexpr*/ size_type + find_first_of(const _CharT* __str, size_type __pos = 0) const noexcept + { return this->find_first_of(__str, __pos, traits_type::length(__str)); } + + /*constexpr*/ size_type + find_last_of(basic_string_view __str, + size_type __pos = npos) const noexcept + { return this->find_last_of(__str._M_str, __pos, __str._M_len); } + + size_type + find_last_of(_CharT __c, size_type __pos=npos) const noexcept + { return this->rfind(__c, __pos); } + + /*constexpr*/ size_type + find_last_of(const _CharT* __str, size_type __pos, size_type __n) const; + + /*constexpr*/ size_type + find_last_of(const _CharT* __str, size_type __pos = npos) const noexcept + { return this->find_last_of(__str, __pos, traits_type::length(__str)); } + + /*constexpr*/ size_type + find_first_not_of(basic_string_view __str, + size_type __pos = 0) const noexcept + { return this->find_first_not_of(__str._M_str, __pos, __str._M_len); } + + /*constexpr*/ size_type + find_first_not_of(_CharT __c, size_type __pos = 0) const noexcept; + + /*constexpr*/ size_type + find_first_not_of(const _CharT* __str, + size_type __pos, size_type __n) const; + + /*constexpr*/ size_type + find_first_not_of(const _CharT* __str, size_type __pos = 0) const noexcept + { + return this->find_first_not_of(__str, __pos, + traits_type::length(__str)); + } + + /*constexpr*/ size_type + find_last_not_of(basic_string_view __str, + size_type __pos = npos) const noexcept + { return this->find_last_not_of(__str._M_str, __pos, __str._M_len); } + + /*constexpr*/ size_type + find_last_not_of(_CharT __c, size_type __pos = npos) const noexcept; + + /*constexpr*/ size_type + find_last_not_of(const _CharT* __str, + size_type __pos, size_type __n) const; + + /*constexpr*/ size_type + find_last_not_of(const _CharT* __str, + size_type __pos = npos) const noexcept + { + return this->find_last_not_of(__str, __pos, + traits_type::length(__str)); + } + + private: + + static constexpr int + _S_compare(size_type __n1, size_type __n2) noexcept + { + return difference_type(__n1 - __n2) > std::numeric_limits<int>::max() + ? std::numeric_limits<int>::max() + : difference_type(__n1 - __n2) < std::numeric_limits<int>::min() + ? std::numeric_limits<int>::min() + : static_cast<int>(difference_type(__n1 - __n2)); + } + + size_t _M_len; + const _CharT* _M_str; + }; + + // [string.view.comparison], non-member basic_string_view comparison functions + + namespace __detail + { + // Identity transform to create a non-deduced context, so that only one + // argument participates in template argument deduction and the other + // argument gets implicitly converted to the deduced type. See n3766.html. + template<typename _Tp> + using __idt = typename std::common_type<_Tp>::type; + } + + template<typename _CharT, typename _Traits> + /*constexpr*/ bool + operator==(basic_string_view<_CharT, _Traits> __x, + basic_string_view<_CharT, _Traits> __y) noexcept + { return __x.size() == __y.size() && __x.compare(__y) == 0; } + + template<typename _CharT, typename _Traits> + /*constexpr*/ bool + operator==(basic_string_view<_CharT, _Traits> __x, + __detail::__idt<basic_string_view<_CharT, _Traits>> __y) noexcept + { return __x.size() == __y.size() && __x.compare(__y) == 0; } + + template<typename _CharT, typename _Traits> + /*constexpr*/ bool + operator==(__detail::__idt<basic_string_view<_CharT, _Traits>> __x, + basic_string_view<_CharT, _Traits> __y) noexcept + { return __x.size() == __y.size() && __x.compare(__y) == 0; } + + template<typename _CharT, typename _Traits> + /*constexpr*/ bool + operator!=(basic_string_view<_CharT, _Traits> __x, + basic_string_view<_CharT, _Traits> __y) noexcept + { return !(__x == __y); } + + template<typename _CharT, typename _Traits> + /*constexpr*/ bool + operator!=(basic_string_view<_CharT, _Traits> __x, + __detail::__idt<basic_string_view<_CharT, _Traits>> __y) noexcept + { return !(__x == __y); } + + template<typename _CharT, typename _Traits> + /*constexpr*/ bool + operator!=(__detail::__idt<basic_string_view<_CharT, _Traits>> __x, + basic_string_view<_CharT, _Traits> __y) noexcept + { return !(__x == __y); } + + template<typename _CharT, typename _Traits> + /*constexpr*/ bool + operator< (basic_string_view<_CharT, _Traits> __x, + basic_string_view<_CharT, _Traits> __y) noexcept + { return __x.compare(__y) < 0; } + + template<typename _CharT, typename _Traits> + /*constexpr*/ bool + operator< (basic_string_view<_CharT, _Traits> __x, + __detail::__idt<basic_string_view<_CharT, _Traits>> __y) noexcept + { return __x.compare(__y) < 0; } + + template<typename _CharT, typename _Traits> + /*constexpr*/ bool + operator< (__detail::__idt<basic_string_view<_CharT, _Traits>> __x, + basic_string_view<_CharT, _Traits> __y) noexcept + { return __x.compare(__y) < 0; } + + template<typename _CharT, typename _Traits> + /*constexpr*/ bool + operator> (basic_string_view<_CharT, _Traits> __x, + basic_string_view<_CharT, _Traits> __y) noexcept + { return __x.compare(__y) > 0; } + + template<typename _CharT, typename _Traits> + /*constexpr*/ bool + operator> (basic_string_view<_CharT, _Traits> __x, + __detail::__idt<basic_string_view<_CharT, _Traits>> __y) noexcept + { return __x.compare(__y) > 0; } + + template<typename _CharT, typename _Traits> + /*constexpr*/ bool + operator> (__detail::__idt<basic_string_view<_CharT, _Traits>> __x, + basic_string_view<_CharT, _Traits> __y) noexcept + { return __x.compare(__y) > 0; } + + template<typename _CharT, typename _Traits> + /*constexpr*/ bool + operator<=(basic_string_view<_CharT, _Traits> __x, + basic_string_view<_CharT, _Traits> __y) noexcept + { return __x.compare(__y) <= 0; } + + template<typename _CharT, typename _Traits> + /*constexpr*/ bool + operator<=(basic_string_view<_CharT, _Traits> __x, + __detail::__idt<basic_string_view<_CharT, _Traits>> __y) noexcept + { return __x.compare(__y) <= 0; } + + template<typename _CharT, typename _Traits> + /*constexpr*/ bool + operator<=(__detail::__idt<basic_string_view<_CharT, _Traits>> __x, + basic_string_view<_CharT, _Traits> __y) noexcept + { return __x.compare(__y) <= 0; } + + template<typename _CharT, typename _Traits> + /*constexpr*/ bool + operator>=(basic_string_view<_CharT, _Traits> __x, + basic_string_view<_CharT, _Traits> __y) noexcept + { return __x.compare(__y) >= 0; } + + template<typename _CharT, typename _Traits> + /*constexpr*/ bool + operator>=(basic_string_view<_CharT, _Traits> __x, + __detail::__idt<basic_string_view<_CharT, _Traits>> __y) noexcept + { return __x.compare(__y) >= 0; } + + template<typename _CharT, typename _Traits> + /*constexpr*/ bool + operator>=(__detail::__idt<basic_string_view<_CharT, _Traits>> __x, + basic_string_view<_CharT, _Traits> __y) noexcept + { return __x.compare(__y) >= 0; } + + // basic_string_view typedef names + + using string_view = basic_string_view<char>; +} /* namespace gdb */ + +#include "gdb_string_view.tcc" + +#endif // __cplusplus < 201703L + +namespace gdb { + +static inline std::string +to_string(const gdb::string_view &view) +{ + return { view.data (), view.size () }; +} + +} + +#endif /* COMMON_GDB_STRING_VIEW_H */ diff -Nru gdb-9.1/gdbsupport/gdb_string_view.tcc gdb-10.2/gdbsupport/gdb_string_view.tcc --- gdb-9.1/gdbsupport/gdb_string_view.tcc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/gdb_string_view.tcc 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,219 @@ +// Components for manipulating non-owning sequences of characters -*- C++ -*- + +// Note: This file has been stolen from the gcc repo +// (libstdc++-v3/include/experimental/bits/string_view.tcc) and has local +// modifications. + +// Copyright (C) 2013-2021 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. 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 the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// <http://www.gnu.org/licenses/>. + +/** @file experimental/bits/string_view.tcc + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{experimental/string_view} + */ + +// +// N3762 basic_string_view library +// + +#ifndef GDB_STRING_VIEW_TCC +#define GDB_STRING_VIEW_TCC 1 + +namespace gdb +{ + template<typename _CharT, typename _Traits> + /*constexpr*/ typename basic_string_view<_CharT, _Traits>::size_type + basic_string_view<_CharT, _Traits>:: + find(const _CharT* __str, size_type __pos, size_type __n) const noexcept + { + gdb_assert (__str != nullptr || __n == 0); + + if (__n == 0) + return __pos <= this->_M_len ? __pos : npos; + + if (__n <= this->_M_len) + { + for (; __pos <= this->_M_len - __n; ++__pos) + if (traits_type::eq(this->_M_str[__pos], __str[0]) + && traits_type::compare(this->_M_str + __pos + 1, + __str + 1, __n - 1) == 0) + return __pos; + } + return npos; + } + + template<typename _CharT, typename _Traits> + /*constexpr*/ typename basic_string_view<_CharT, _Traits>::size_type + basic_string_view<_CharT, _Traits>:: + find(_CharT __c, size_type __pos) const noexcept + { + size_type __ret = npos; + if (__pos < this->_M_len) + { + const size_type __n = this->_M_len - __pos; + const _CharT* __p = traits_type::find(this->_M_str + __pos, __n, __c); + if (__p) + __ret = __p - this->_M_str; + } + return __ret; + } + + template<typename _CharT, typename _Traits> + /*constexpr*/ typename basic_string_view<_CharT, _Traits>::size_type + basic_string_view<_CharT, _Traits>:: + rfind(const _CharT* __str, size_type __pos, size_type __n) const noexcept + { + gdb_assert (__str != nullptr || __n == 0); + + if (__n <= this->_M_len) + { + __pos = std::min(size_type(this->_M_len - __n), __pos); + do + { + if (traits_type::compare(this->_M_str + __pos, __str, __n) == 0) + return __pos; + } + while (__pos-- > 0); + } + return npos; + } + + template<typename _CharT, typename _Traits> + /*constexpr*/ typename basic_string_view<_CharT, _Traits>::size_type + basic_string_view<_CharT, _Traits>:: + rfind(_CharT __c, size_type __pos) const noexcept + { + size_type __size = this->_M_len; + if (__size > 0) + { + if (--__size > __pos) + __size = __pos; + for (++__size; __size-- > 0; ) + if (traits_type::eq(this->_M_str[__size], __c)) + return __size; + } + return npos; + } + + template<typename _CharT, typename _Traits> + /*constexpr*/ typename basic_string_view<_CharT, _Traits>::size_type + basic_string_view<_CharT, _Traits>:: + find_first_of(const _CharT* __str, size_type __pos, size_type __n) const + { + gdb_assert (__str != nullptr || __n == 0); + for (; __n && __pos < this->_M_len; ++__pos) + { + const _CharT* __p = traits_type::find(__str, __n, + this->_M_str[__pos]); + if (__p) + return __pos; + } + return npos; + } + + template<typename _CharT, typename _Traits> + /*constexpr*/ typename basic_string_view<_CharT, _Traits>::size_type + basic_string_view<_CharT, _Traits>:: + find_last_of(const _CharT* __str, size_type __pos, size_type __n) const + { + gdb_assert (__str != nullptr || __n == 0); + size_type __size = this->size(); + if (__size && __n) + { + if (--__size > __pos) + __size = __pos; + do + { + if (traits_type::find(__str, __n, this->_M_str[__size])) + return __size; + } + while (__size-- != 0); + } + return npos; + } + + template<typename _CharT, typename _Traits> + /*constexpr*/ typename basic_string_view<_CharT, _Traits>::size_type + basic_string_view<_CharT, _Traits>:: + find_first_not_of(const _CharT* __str, size_type __pos, size_type __n) const + { + gdb_assert (__str != nullptr || __n == 0); + for (; __pos < this->_M_len; ++__pos) + if (!traits_type::find(__str, __n, this->_M_str[__pos])) + return __pos; + return npos; + } + + template<typename _CharT, typename _Traits> + /*constexpr*/ typename basic_string_view<_CharT, _Traits>::size_type + basic_string_view<_CharT, _Traits>:: + find_first_not_of(_CharT __c, size_type __pos) const noexcept + { + for (; __pos < this->_M_len; ++__pos) + if (!traits_type::eq(this->_M_str[__pos], __c)) + return __pos; + return npos; + } + + template<typename _CharT, typename _Traits> + /*constexpr*/ typename basic_string_view<_CharT, _Traits>::size_type + basic_string_view<_CharT, _Traits>:: + find_last_not_of(const _CharT* __str, size_type __pos, size_type __n) const + { + gdb_assert (__str != nullptr || __n == 0); + size_type __size = this->_M_len; + if (__size) + { + if (--__size > __pos) + __size = __pos; + do + { + if (!traits_type::find(__str, __n, this->_M_str[__size])) + return __size; + } + while (__size--); + } + return npos; + } + + template<typename _CharT, typename _Traits> + /*constexpr*/ typename basic_string_view<_CharT, _Traits>::size_type + basic_string_view<_CharT, _Traits>:: + find_last_not_of(_CharT __c, size_type __pos) const noexcept + { + size_type __size = this->_M_len; + if (__size) + { + if (--__size > __pos) + __size = __pos; + do + { + if (!traits_type::eq(this->_M_str[__size], __c)) + return __size; + } + while (__size--); + } + return npos; + } +} // namespace gdb + +#endif // GDB_STRING_VIEW_TCC diff -Nru gdb-9.1/gdbsupport/gdb_sys_time.h gdb-10.2/gdbsupport/gdb_sys_time.h --- gdb-9.1/gdbsupport/gdb_sys_time.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/gdb_sys_time.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,38 @@ +/* Copyright (C) 2015-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef COMMON_GDB_SYS_TIME_H +#define COMMON_GDB_SYS_TIME_H + +#include <sys/time.h> + +/* On MinGW-w64, gnulib's sys/time.h replaces 'struct timeval' and + gettimeofday with versions that support 64-bit time_t, for POSIX + compliance. However, the gettimeofday replacement does not ever + return time_t values larger than 31-bit, as it simply returns the + system's gettimeofday's (signed) 32-bit result as (signed) 64-bit. + Because we don't really need the POSIX compliance, and it ends up + causing conflicts with other libraries we use that don't use gnulib + and thus work with the native struct timeval, such as Winsock2's + native 'select' and libiberty, simply undefine away gnulib's + replacements. */ +#if GNULIB_defined_struct_timeval +# undef timeval +# undef gettimeofday +#endif + +#endif /* COMMON_GDB_SYS_TIME_H */ diff -Nru gdb-9.1/gdbsupport/gdb_tilde_expand.cc gdb-10.2/gdbsupport/gdb_tilde_expand.cc --- gdb-9.1/gdbsupport/gdb_tilde_expand.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/gdb_tilde_expand.cc 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,95 @@ +/* Perform tilde expansion on paths for GDB and gdbserver. + + Copyright (C) 2017-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "common-defs.h" +#include "gdb_tilde_expand.h" +#include <glob.h> + +/* RAII-style class wrapping "glob". */ + +class gdb_glob +{ +public: + /* Construct a "gdb_glob" object by calling "glob" with the provided + parameters. This function can throw if "glob" fails. */ + gdb_glob (const char *pattern, int flags, + int (*errfunc) (const char *epath, int eerrno)) + { + int ret = glob (pattern, flags, errfunc, &m_glob); + + if (ret != 0) + { + if (ret == GLOB_NOMATCH) + error (_("Could not find a match for '%s'."), pattern); + else + error (_("glob could not process pattern '%s'."), + pattern); + } + } + + /* Destroy the object and free M_GLOB. */ + ~gdb_glob () + { + globfree (&m_glob); + } + + /* Return the GL_PATHC component of M_GLOB. */ + int pathc () const + { + return m_glob.gl_pathc; + } + + /* Return the GL_PATHV component of M_GLOB. */ + char **pathv () const + { + return m_glob.gl_pathv; + } + +private: + /* The actual glob object we're dealing with. */ + glob_t m_glob; +}; + +/* See gdbsupport/gdb_tilde_expand.h. */ + +std::string +gdb_tilde_expand (const char *dir) +{ + gdb_glob glob (dir, GLOB_TILDE_CHECK, NULL); + + gdb_assert (glob.pathc () > 0); + /* "glob" may return more than one match to the path provided by the + user, but we are only interested in the first match. */ + std::string expanded_dir = glob.pathv ()[0]; + + return expanded_dir; +} + +/* See gdbsupport/gdb_tilde_expand.h. */ + +gdb::unique_xmalloc_ptr<char> +gdb_tilde_expand_up (const char *dir) +{ + gdb_glob glob (dir, GLOB_TILDE_CHECK, NULL); + + gdb_assert (glob.pathc () > 0); + /* "glob" may return more than one match to the path provided by the + user, but we are only interested in the first match. */ + return make_unique_xstrdup (glob.pathv ()[0]); +} diff -Nru gdb-9.1/gdbsupport/gdb_tilde_expand.h gdb-10.2/gdbsupport/gdb_tilde_expand.h --- gdb-9.1/gdbsupport/gdb_tilde_expand.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/gdb_tilde_expand.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,31 @@ +/* Perform tilde expansion on paths for GDB and gdbserver. + + Copyright (C) 2017-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef COMMON_GDB_TILDE_EXPAND_H +#define COMMON_GDB_TILDE_EXPAND_H + +/* Perform path expansion (i.e., tilde expansion) on DIR, and return + the full path. */ +extern std::string gdb_tilde_expand (const char *dir); + +/* Same as GDB_TILDE_EXPAND, but return the full path as a + gdb::unique_xmalloc_ptr<char>. */ +extern gdb::unique_xmalloc_ptr<char> gdb_tilde_expand_up (const char *dir); + +#endif /* COMMON_GDB_TILDE_EXPAND_H */ diff -Nru gdb-9.1/gdbsupport/gdb_unique_ptr.h gdb-10.2/gdbsupport/gdb_unique_ptr.h --- gdb-9.1/gdbsupport/gdb_unique_ptr.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/gdb_unique_ptr.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,67 @@ +/* std::unique_ptr specializations for GDB. + + Copyright (C) 2016-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef COMMON_GDB_UNIQUE_PTR_H +#define COMMON_GDB_UNIQUE_PTR_H + +#include <memory> + +namespace gdb +{ +/* Define gdb::unique_xmalloc_ptr, a std::unique_ptr that manages + xmalloc'ed memory. */ + +/* The deleter for std::unique_xmalloc_ptr. Uses xfree. */ +template <typename T> +struct xfree_deleter +{ + void operator() (T *ptr) const { xfree (ptr); } +}; + +/* Same, for arrays. */ +template <typename T> +struct xfree_deleter<T[]> +{ + void operator() (T *ptr) const { xfree (ptr); } +}; + +/* Import the standard unique_ptr to our namespace with a custom + deleter. */ + +template<typename T> using unique_xmalloc_ptr + = std::unique_ptr<T, xfree_deleter<T>>; + +/* A no-op deleter. */ +template<typename T> +struct noop_deleter +{ + void operator() (T *ptr) const { } +}; + +} /* namespace gdb */ + +/* Dup STR and return a unique_xmalloc_ptr for the result. */ + +static inline gdb::unique_xmalloc_ptr<char> +make_unique_xstrdup (const char *str) +{ + return gdb::unique_xmalloc_ptr<char> (xstrdup (str)); +} + +#endif /* COMMON_GDB_UNIQUE_PTR_H */ diff -Nru gdb-9.1/gdbsupport/gdb_unlinker.h gdb-10.2/gdbsupport/gdb_unlinker.h --- gdb-9.1/gdbsupport/gdb_unlinker.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/gdb_unlinker.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,60 @@ +/* Unlinking class + + Copyright (C) 2016-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef COMMON_GDB_UNLINKER_H +#define COMMON_GDB_UNLINKER_H + +namespace gdb +{ + +/* An object of this class holds a filename and, when the object goes + of scope, the file is removed using unlink. + + A user of this class can request that the file be preserved using + the "keep" method. */ +class unlinker +{ + public: + + unlinker (const char *filename) ATTRIBUTE_NONNULL (2) + : m_filename (filename) + { + gdb_assert (filename != NULL); + } + + ~unlinker () + { + if (m_filename != NULL) + unlink (m_filename); + } + + /* Keep the file, rather than unlink it. */ + void keep () + { + m_filename = NULL; + } + + private: + + const char *m_filename; +}; + +} + +#endif /* COMMON_GDB_UNLINKER_H */ diff -Nru gdb-9.1/gdbsupport/gdb_vecs.cc gdb-10.2/gdbsupport/gdb_vecs.cc --- gdb-9.1/gdbsupport/gdb_vecs.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/gdb_vecs.cc 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,88 @@ +/* Some commonly-used VEC types. + + Copyright (C) 2012-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "common-defs.h" +#include "gdb_vecs.h" +#include "host-defs.h" + +/* Worker function to split character delimiter separated string of fields + STR into a char pointer vector. */ + +static void +delim_string_to_char_ptr_vec_append + (std::vector<gdb::unique_xmalloc_ptr<char>> *vecp, const char *str, + char delimiter) +{ + do + { + size_t this_len; + const char *next_field; + char *this_field; + + next_field = strchr (str, delimiter); + if (next_field == NULL) + this_len = strlen (str); + else + { + this_len = next_field - str; + next_field++; + } + + this_field = (char *) xmalloc (this_len + 1); + memcpy (this_field, str, this_len); + this_field[this_len] = '\0'; + vecp->emplace_back (this_field); + + str = next_field; + } + while (str != NULL); +} + +/* See gdb_vecs.h. */ + +std::vector<gdb::unique_xmalloc_ptr<char>> +delim_string_to_char_ptr_vec (const char *str, char delimiter) +{ + std::vector<gdb::unique_xmalloc_ptr<char>> retval; + + delim_string_to_char_ptr_vec_append (&retval, str, delimiter); + + return retval; +} + +/* See gdb_vecs.h. */ + +void +dirnames_to_char_ptr_vec_append + (std::vector<gdb::unique_xmalloc_ptr<char>> *vecp, const char *dirnames) +{ + delim_string_to_char_ptr_vec_append (vecp, dirnames, DIRNAME_SEPARATOR); +} + +/* See gdb_vecs.h. */ + +std::vector<gdb::unique_xmalloc_ptr<char>> +dirnames_to_char_ptr_vec (const char *dirnames) +{ + std::vector<gdb::unique_xmalloc_ptr<char>> retval; + + dirnames_to_char_ptr_vec_append (&retval, dirnames); + + return retval; +} diff -Nru gdb-9.1/gdbsupport/gdb_vecs.h gdb-10.2/gdbsupport/gdb_vecs.h --- gdb-9.1/gdbsupport/gdb_vecs.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/gdb_vecs.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,88 @@ +/* Some commonly-used VEC types. + + Copyright (C) 2012-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef COMMON_GDB_VECS_H +#define COMMON_GDB_VECS_H + +/* Split STR, a list of DELIMITER-separated fields, into a char pointer vector. + + You may modify the returned strings. */ + +extern std::vector<gdb::unique_xmalloc_ptr<char>> + delim_string_to_char_ptr_vec (const char *str, char delimiter); + +/* Like dirnames_to_char_ptr_vec, but append the directories to *VECP. */ + +extern void dirnames_to_char_ptr_vec_append + (std::vector<gdb::unique_xmalloc_ptr<char>> *vecp, const char *dirnames); + +/* Split DIRNAMES by DIRNAME_SEPARATOR delimiter and return a list of all the + elements in their original order. For empty string ("") DIRNAMES return + list of one empty string ("") element. + + You may modify the returned strings. */ + +extern std::vector<gdb::unique_xmalloc_ptr<char>> + dirnames_to_char_ptr_vec (const char *dirnames); + +/* Remove the element pointed by iterator IT from VEC, not preserving the order + of the remaining elements. Return the removed element. */ + +template <typename T> +T +unordered_remove (std::vector<T> &vec, typename std::vector<T>::iterator it) +{ + gdb_assert (it >= vec.begin () && it < vec.end ()); + + T removed = std::move (*it); + if (it != vec.end () - 1) + *it = std::move (vec.back ()); + vec.pop_back (); + + return removed; +} + +/* Remove the element at position IX from VEC, not preserving the order of the + remaining elements. Return the removed element. */ + +template <typename T> +T +unordered_remove (std::vector<T> &vec, typename std::vector<T>::size_type ix) +{ + gdb_assert (ix < vec.size ()); + + return unordered_remove (vec, vec.begin () + ix); +} + +/* Remove the element at position IX from VEC, preserving the order the + remaining elements. Return the removed element. */ + +template <typename T> +T +ordered_remove (std::vector<T> &vec, typename std::vector<T>::size_type ix) +{ + gdb_assert (ix < vec.size ()); + + T removed = std::move (vec[ix]); + vec.erase (vec.begin () + ix); + + return removed; +} + +#endif /* COMMON_GDB_VECS_H */ diff -Nru gdb-9.1/gdbsupport/gdb_wait.cc gdb-10.2/gdbsupport/gdb_wait.cc --- gdb-9.1/gdbsupport/gdb_wait.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/gdb_wait.cc 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,85 @@ +/* Support code for standard wait macros in gdb_wait.h. + + Copyright (C) 2019-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "common-defs.h" + +#include "gdb_wait.h" + +#ifdef __MINGW32__ + +/* The underlying idea is that when a Windows program is terminated by + a fatal exception, its exit code is the value of that exception, as + defined by the various EXCEPTION_* symbols in the Windows API + headers. We thus emulate WTERMSIG etc. by translating the fatal + exception codes to more-or-less equivalent Posix signals. + + The translation below is not perfect, because a program could + legitimately exit normally with a status whose value happens to + have the high bits set, but that's extremely rare, to say the + least, and it is deemed such a negligibly small probability of + false positives is justified by the utility of reporting the + terminating signal in the "normal" cases. */ + +# include <signal.h> + +# define WIN32_LEAN_AND_MEAN +# include <windows.h> /* for EXCEPTION_* constants */ + +struct xlate_status +{ + /* The exit status (actually, fatal exception code). */ + DWORD status; + + /* The corresponding signal value. */ + int sig; +}; + +int +windows_status_to_termsig (unsigned long status) +{ + static const xlate_status status_xlate_tbl[] = + { + {EXCEPTION_ACCESS_VIOLATION, SIGSEGV}, + {EXCEPTION_IN_PAGE_ERROR, SIGSEGV}, + {EXCEPTION_INVALID_HANDLE, SIGSEGV}, + {EXCEPTION_ILLEGAL_INSTRUCTION, SIGILL}, + {EXCEPTION_NONCONTINUABLE_EXCEPTION, SIGILL}, + {EXCEPTION_ARRAY_BOUNDS_EXCEEDED, SIGSEGV}, + {EXCEPTION_FLT_DENORMAL_OPERAND, SIGFPE}, + {EXCEPTION_FLT_DIVIDE_BY_ZERO, SIGFPE}, + {EXCEPTION_FLT_INEXACT_RESULT, SIGFPE}, + {EXCEPTION_FLT_INVALID_OPERATION, SIGFPE}, + {EXCEPTION_FLT_OVERFLOW, SIGFPE}, + {EXCEPTION_FLT_STACK_CHECK, SIGFPE}, + {EXCEPTION_FLT_UNDERFLOW, SIGFPE}, + {EXCEPTION_INT_DIVIDE_BY_ZERO, SIGFPE}, + {EXCEPTION_INT_OVERFLOW, SIGFPE}, + {EXCEPTION_PRIV_INSTRUCTION, SIGILL}, + {EXCEPTION_STACK_OVERFLOW, SIGSEGV}, + {CONTROL_C_EXIT, SIGTERM} + }; + + for (const xlate_status &x : status_xlate_tbl) + if (x.status == status) + return x.sig; + + return -1; +} + +#endif /* __MINGW32__ */ diff -Nru gdb-9.1/gdbsupport/gdb_wait.h gdb-10.2/gdbsupport/gdb_wait.h --- gdb-9.1/gdbsupport/gdb_wait.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/gdb_wait.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,135 @@ +/* Standard wait macros. + Copyright (C) 2000-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef COMMON_GDB_WAIT_H +#define COMMON_GDB_WAIT_H + +#ifdef HAVE_SYS_WAIT_H +#include <sys/wait.h> /* POSIX */ +#else +#ifdef HAVE_WAIT_H +#include <wait.h> /* legacy */ +#endif +#endif + +/* Define how to access the int that the wait system call stores. + This has been compatible in all Unix systems since time immemorial, + but various well-meaning people have defined various different + words for the same old bits in the same old int (sometimes claimed + to be a struct). We just know it's an int and we use these macros + to access the bits. */ + +/* The following macros are defined equivalently to their definitions + in POSIX.1. We fail to define WNOHANG and WUNTRACED, which POSIX.1 + <sys/wait.h> defines, since our code does not use waitpid() (but + NOTE exception for GNU/Linux below). We also fail to declare + wait() and waitpid(). + + For MinGW, we use the fact that when a Windows program is + terminated by a fatal exception, its exit code is the value of that + exception, as defined by the various EXCEPTION_* symbols in the + Windows API headers. See also gdb_wait.c. */ + +#ifndef WIFEXITED +# ifdef __MINGW32__ +# define WIFEXITED(w) (((w) & 0xC0000000) == 0) +# else +# define WIFEXITED(w) (((w)&0377) == 0) +# endif +#endif + +#ifndef WIFSIGNALED +# ifdef __MINGW32__ +# define WIFSIGNALED(w) (((w) & 0xC0000000) == 0xC0000000) +# else +# define WIFSIGNALED(w) (((w)&0377) != 0177 && ((w)&~0377) == 0) +# endif +#endif + +#ifndef WIFSTOPPED +#ifdef IBM6000 + +/* Unfortunately, the above comment (about being compatible in all Unix + systems) is not quite correct for AIX, sigh. And AIX 3.2 can generate + status words like 0x57c (sigtrap received after load), and gdb would + choke on it. */ + +#define WIFSTOPPED(w) ((w)&0x40) + +#else +#define WIFSTOPPED(w) (((w)&0377) == 0177) +#endif +#endif + +#ifndef WEXITSTATUS +# ifdef __MINGW32__ +# define WEXITSTATUS(w) ((w) & ~0xC0000000) +# else +# define WEXITSTATUS(w) (((w) >> 8) & 0377) /* same as WRETCODE */ +# endif +#endif + +#ifndef WTERMSIG +# ifdef __MINGW32__ +extern int windows_status_to_termsig (unsigned long); +# define WTERMSIG(w) windows_status_to_termsig (w) +# else +# define WTERMSIG(w) ((w) & 0177) +# endif +#endif + +#ifndef WSTOPSIG +#define WSTOPSIG WEXITSTATUS +#endif + +/* These are not defined in POSIX, but are used by our programs. */ + +#ifndef WSETEXIT +# ifdef W_EXITCODE +#define WSETEXIT(w,status) ((w) = W_EXITCODE(status,0)) +# else +#define WSETEXIT(w,status) ((w) = (0 | ((status) << 8))) +# endif +#endif + +#ifndef W_STOPCODE +#define W_STOPCODE(sig) ((sig) << 8 | 0x7f) +#endif + +#ifndef WSETSTOP +#define WSETSTOP(w,sig) ((w) = W_STOPCODE(sig)) +#endif + +/* For native GNU/Linux we may use waitpid and the __WCLONE option. + <GRIPE> It is of course dangerous not to use the REAL header file... + </GRIPE>. */ + +/* Bits in the third argument to `waitpid'. */ +#ifndef WNOHANG +#define WNOHANG 1 /* Don't block waiting. */ +#endif + +#ifndef WUNTRACED +#define WUNTRACED 2 /* Report status of stopped children. */ +#endif + +#ifndef __WCLONE +#define __WCLONE 0x80000000 /* Wait for cloned process. */ +#endif + +#endif /* COMMON_GDB_WAIT_H */ diff -Nru gdb-9.1/gdbsupport/.gitattributes gdb-10.2/gdbsupport/.gitattributes --- gdb-9.1/gdbsupport/.gitattributes 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/.gitattributes 2020-09-13 02:33:41.000000000 +0000 @@ -0,0 +1,6 @@ +# -*- conf -*- + +# Use cpp-style diffs for .h files. This is useful +# if you modify classes defined in a header file. + +*.h diff=cpp diff -Nru gdb-9.1/gdbsupport/hash_enum.h gdb-10.2/gdbsupport/hash_enum.h --- gdb-9.1/gdbsupport/hash_enum.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/hash_enum.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,45 @@ +/* A hasher for enums. + + Copyright (C) 2017-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef COMMON_HASH_ENUM_H +#define COMMON_HASH_ENUM_H + +/* A hasher for enums, which was missing in C++11: + http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2148 +*/ + +namespace gdb { + +/* Helper struct for hashing enum types. */ +template<typename T> +struct hash_enum +{ + typedef size_t result_type; + typedef T argument_type; + + size_t operator() (T val) const noexcept + { + using underlying = typename std::underlying_type<T>::type; + return std::hash<underlying> () (static_cast<underlying> (val)); + } +}; + +} /* namespace gdb */ + +#endif /* COMMON_HASH_ENUM_H */ diff -Nru gdb-9.1/gdbsupport/host-defs.h gdb-10.2/gdbsupport/host-defs.h --- gdb-9.1/gdbsupport/host-defs.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/host-defs.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,61 @@ +/* Basic host-specific definitions for GDB. + Copyright (C) 1986-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef COMMON_HOST_DEFS_H +#define COMMON_HOST_DEFS_H + +#include <limits.h> + +/* Static host-system-dependent parameters for GDB. */ + +/* * Number of bits in a char or unsigned char for the target machine. + Just like CHAR_BIT in <limits.h> but describes the target machine. */ +#if !defined (TARGET_CHAR_BIT) +#define TARGET_CHAR_BIT 8 +#endif + +/* * If we picked up a copy of CHAR_BIT from a configuration file + (which may get it by including <limits.h>) then use it to set + the number of bits in a host char. If not, use the same size + as the target. */ + +#if defined (CHAR_BIT) +#define HOST_CHAR_BIT CHAR_BIT +#else +#define HOST_CHAR_BIT TARGET_CHAR_BIT +#endif + +#ifdef __MSDOS__ +# define CANT_FORK +# define GLOBAL_CURDIR +# define DIRNAME_SEPARATOR ';' +#endif + +#if !defined (__CYGWIN__) && defined (_WIN32) +# define DIRNAME_SEPARATOR ';' +#endif + +#ifndef DIRNAME_SEPARATOR +#define DIRNAME_SEPARATOR ':' +#endif + +#ifndef SLASH_STRING +#define SLASH_STRING "/" +#endif + +#endif /* COMMON_HOST_DEFS_H */ diff -Nru gdb-9.1/gdbsupport/job-control.cc gdb-10.2/gdbsupport/job-control.cc --- gdb-9.1/gdbsupport/job-control.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/job-control.cc 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,86 @@ +/* Job control and terminal related functions, for GDB and gdbserver + when running under Unix. + + Copyright (C) 1986-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "common-defs.h" +#include "job-control.h" +#ifdef HAVE_TERMIOS_H +#include <termios.h> +#endif +#include <unistd.h> + +/* Nonzero if we have job control. */ +int job_control; + +/* Set the process group ID of the inferior. + + Just using job_control only does part of it because setpgid or + setpgrp might not exist on a system without job control. + + For a more clean implementation, in libiberty, put a setpgid which merely + calls setpgrp and a setpgrp which does nothing (any system with job control + will have one or the other). */ + +int +gdb_setpgid () +{ + int retval = 0; + + if (job_control) + { +#ifdef HAVE_SETPGID + /* The call setpgid (0, 0) is supposed to work and mean the same + thing as this, but on Ultrix 4.2A it fails with EPERM (and + setpgid (getpid (), getpid ()) succeeds). */ + retval = setpgid (getpid (), getpid ()); +#else +#ifdef HAVE_SETPGRP +#ifdef SETPGRP_VOID + retval = setpgrp (); +#else + retval = setpgrp (getpid (), getpid ()); +#endif +#endif /* HAVE_SETPGRP */ +#endif /* HAVE_SETPGID */ + } + + return retval; +} + +/* See gdbsupport/common-terminal.h. */ + +void +have_job_control () +{ + /* OK, figure out whether we have job control. If termios is not + available, leave job_control 0. */ +#if defined (HAVE_TERMIOS_H) + /* Do all systems with termios have the POSIX way of identifying job + control? I hope so. */ +#ifdef _POSIX_JOB_CONTROL + job_control = 1; +#else +#ifdef _SC_JOB_CONTROL + job_control = sysconf (_SC_JOB_CONTROL); +#else + job_control = 0; /* Have to assume the worst. */ +#endif /* _SC_JOB_CONTROL */ +#endif /* _POSIX_JOB_CONTROL */ +#endif /* HAVE_TERMIOS_H */ +} diff -Nru gdb-9.1/gdbsupport/job-control.h gdb-10.2/gdbsupport/job-control.h --- gdb-9.1/gdbsupport/job-control.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/job-control.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,38 @@ +/* Job control and terminal related functions, for GDB and gdbserver + when running under Unix. + + Copyright (C) 1986-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef COMMON_JOB_CONTROL_H +#define COMMON_JOB_CONTROL_H + +/* Do we have job control? Can be assumed to always be the same + within a given run of GDB. Use in gdb/inflow.c and + gdbsupport/common-inflow.c. */ +extern int job_control; + +/* Set the process group of the caller to its own pid, or do nothing + if we lack job control. */ +extern int gdb_setpgid (); + +/* Determine whether we have job control, and set variable JOB_CONTROL + accordingly. This function must be called before any use of + JOB_CONTROL. */ +extern void have_job_control (); + +#endif /* COMMON_JOB_CONTROL_H */ diff -Nru gdb-9.1/gdbsupport/Makefile.am gdb-10.2/gdbsupport/Makefile.am --- gdb-9.1/gdbsupport/Makefile.am 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/Makefile.am 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,77 @@ +## Process this file with automake to generate Makefile.in +# +# Copyright (C) 2020-2021 Free Software Foundation, Inc. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; see the file COPYING3. If not see +# <http://www.gnu.org/licenses/>. +# + +AUTOMAKE_OPTIONS = no-dist foreign +ACLOCAL_AMFLAGS = -I . -I ../config + +AM_CPPFLAGS = -I$(srcdir)/../include -I$(srcdir)/../gdb \ + -I../gnulib/import -I$(srcdir)/../gnulib/import \ + -I.. -I$(srcdir)/.. $(INCINTL) -I../bfd -I$(srcdir)/../bfd \ + @LARGEFILE_CPPFLAGS@ + +override CXX += $(CXX_DIALECT) + +AM_CXXFLAGS = $(WARN_CFLAGS) $(WERROR_CFLAGS) + +noinst_LIBRARIES = libgdbsupport.a + +if SELFTEST +selftest = selftest.cc +endif + +libgdbsupport_a_SOURCES = \ + agent.cc \ + btrace-common.cc \ + buffer.cc \ + cleanups.cc \ + common-debug.cc \ + common-exceptions.cc \ + common-inferior.cc \ + common-regcache.cc \ + common-utils.cc \ + environ.cc \ + errors.cc \ + event-loop.cc \ + fileio.cc \ + filestuff.cc \ + format.cc \ + gdb-dlfcn.cc \ + gdb_tilde_expand.cc \ + gdb_wait.cc \ + gdb_vecs.cc \ + job-control.cc \ + netstuff.cc \ + new-op.cc \ + pathstuff.cc \ + print-utils.cc \ + ptid.cc \ + rsp-low.cc \ + run-time-clock.cc \ + safe-strerror.cc \ + scoped_mmap.cc \ + signals.cc \ + signals-state-save-restore.cc \ + tdesc.cc \ + thread-pool.cc \ + xml-utils.cc \ + $(selftest) + +# Double-check that no defines are missing from our configury. +check-defines: + cd $(srcdir) && emacs --script check-defines.el diff -Nru gdb-9.1/gdbsupport/Makefile.in gdb-10.2/gdbsupport/Makefile.in --- gdb-9.1/gdbsupport/Makefile.in 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/Makefile.in 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,707 @@ +# Makefile.in generated by automake 1.15.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2021 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright (C) 2020 Free Software Foundation, Inc. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; see the file COPYING3. If not see +# <http://www.gnu.org/licenses/>. +# + +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = . +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/../config/codeset.m4 \ + $(top_srcdir)/../config/depstand.m4 \ + $(top_srcdir)/../config/gettext-sister.m4 \ + $(top_srcdir)/../config/largefile.m4 \ + $(top_srcdir)/../config/lead-dot.m4 \ + $(top_srcdir)/../config/lib-ld.m4 \ + $(top_srcdir)/../config/lib-link.m4 \ + $(top_srcdir)/../config/lib-prefix.m4 \ + $(top_srcdir)/../config/override.m4 \ + $(top_srcdir)/../config/plugins.m4 $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/../bfd/bfd.m4 $(top_srcdir)/common.m4 \ + $(top_srcdir)/../config/ax_pthread.m4 \ + $(top_srcdir)/../gdb/ax_cxx_compile_stdcxx.m4 \ + $(top_srcdir)/../gdb/libiberty.m4 $(top_srcdir)/selftest.m4 \ + $(top_srcdir)/../gdb/ptrace.m4 $(top_srcdir)/warning.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ + $(am__configure_deps) +am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ + configure.lineno config.status.lineno +mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs +CONFIG_HEADER = config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +LIBRARIES = $(noinst_LIBRARIES) +AR = ar +ARFLAGS = cru +AM_V_AR = $(am__v_AR_@AM_V@) +am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) +am__v_AR_0 = @echo " AR " $@; +am__v_AR_1 = +libgdbsupport_a_AR = $(AR) $(ARFLAGS) +libgdbsupport_a_LIBADD = +@SELFTEST_TRUE@am__objects_1 = selftest.$(OBJEXT) +am_libgdbsupport_a_OBJECTS = agent.$(OBJEXT) btrace-common.$(OBJEXT) \ + buffer.$(OBJEXT) cleanups.$(OBJEXT) common-debug.$(OBJEXT) \ + common-exceptions.$(OBJEXT) common-inferior.$(OBJEXT) \ + common-regcache.$(OBJEXT) common-utils.$(OBJEXT) \ + environ.$(OBJEXT) errors.$(OBJEXT) event-loop.$(OBJEXT) \ + fileio.$(OBJEXT) filestuff.$(OBJEXT) format.$(OBJEXT) \ + gdb-dlfcn.$(OBJEXT) gdb_tilde_expand.$(OBJEXT) \ + gdb_wait.$(OBJEXT) gdb_vecs.$(OBJEXT) job-control.$(OBJEXT) \ + netstuff.$(OBJEXT) new-op.$(OBJEXT) pathstuff.$(OBJEXT) \ + print-utils.$(OBJEXT) ptid.$(OBJEXT) rsp-low.$(OBJEXT) \ + run-time-clock.$(OBJEXT) safe-strerror.$(OBJEXT) \ + scoped_mmap.$(OBJEXT) signals.$(OBJEXT) \ + signals-state-save-restore.$(OBJEXT) tdesc.$(OBJEXT) \ + thread-pool.$(OBJEXT) xml-utils.$(OBJEXT) $(am__objects_1) +libgdbsupport_a_OBJECTS = $(am_libgdbsupport_a_OBJECTS) +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ +depcomp = $(SHELL) $(top_srcdir)/../depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +AM_V_CXX = $(am__v_CXX_@AM_V@) +am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) +am__v_CXX_0 = @echo " CXX " $@; +am__v_CXX_1 = +CXXLD = $(CXX) +CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ + -o $@ +AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) +am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) +am__v_CXXLD_0 = @echo " CXXLD " $@; +am__v_CXXLD_1 = +SOURCES = $(libgdbsupport_a_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ + $(LISP)config.in +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +CSCOPE = cscope +AM_RECURSIVE_TARGETS = cscope +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CATALOGS = @CATALOGS@ +CATOBJEXT = @CATOBJEXT@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_DIALECT = @CXX_DIALECT@ +CYGPATH_W = @CYGPATH_W@ +DATADIRNAME = @DATADIRNAME@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GENCAT = @GENCAT@ +GMSGFMT = @GMSGFMT@ +GREP = @GREP@ +HAVE_CXX11 = @HAVE_CXX11@ +HAVE_LIBIPT = @HAVE_LIBIPT@ +INCINTL = @INCINTL@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INSTOBJEXT = @INSTOBJEXT@ +LARGEFILE_CPPFLAGS = @LARGEFILE_CPPFLAGS@ +LDFLAGS = @LDFLAGS@ +LIBINTL = @LIBINTL@ +LIBINTL_DEP = @LIBINTL_DEP@ +LIBIPT = @LIBIPT@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LTLIBIPT = @LTLIBIPT@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POSUB = @POSUB@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +WARN_CFLAGS = @WARN_CFLAGS@ +WERROR_CFLAGS = @WERROR_CFLAGS@ +XGETTEXT = @XGETTEXT@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +ax_pthread_config = @ax_pthread_config@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +AUTOMAKE_OPTIONS = no-dist foreign +ACLOCAL_AMFLAGS = -I . -I ../config +AM_CPPFLAGS = -I$(srcdir)/../include -I$(srcdir)/../gdb \ + -I../gnulib/import -I$(srcdir)/../gnulib/import \ + -I.. -I$(srcdir)/.. $(INCINTL) -I../bfd -I$(srcdir)/../bfd \ + @LARGEFILE_CPPFLAGS@ + +AM_CXXFLAGS = $(WARN_CFLAGS) $(WERROR_CFLAGS) +noinst_LIBRARIES = libgdbsupport.a +@SELFTEST_TRUE@selftest = selftest.cc +libgdbsupport_a_SOURCES = \ + agent.cc \ + btrace-common.cc \ + buffer.cc \ + cleanups.cc \ + common-debug.cc \ + common-exceptions.cc \ + common-inferior.cc \ + common-regcache.cc \ + common-utils.cc \ + environ.cc \ + errors.cc \ + event-loop.cc \ + fileio.cc \ + filestuff.cc \ + format.cc \ + gdb-dlfcn.cc \ + gdb_tilde_expand.cc \ + gdb_wait.cc \ + gdb_vecs.cc \ + job-control.cc \ + netstuff.cc \ + new-op.cc \ + pathstuff.cc \ + print-utils.cc \ + ptid.cc \ + rsp-low.cc \ + run-time-clock.cc \ + safe-strerror.cc \ + scoped_mmap.cc \ + signals.cc \ + signals-state-save-restore.cc \ + tdesc.cc \ + thread-pool.cc \ + xml-utils.cc \ + $(selftest) + +all: config.h + $(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +.SUFFIXES: .cc .o .obj +am--refresh: Makefile + @: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ + $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + echo ' $(SHELL) ./config.status'; \ + $(SHELL) ./config.status;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + $(SHELL) ./config.status --recheck + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + $(am__cd) $(srcdir) && $(AUTOCONF) +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) +$(am__aclocal_m4_deps): + +config.h: stamp-h1 + @test -f $@ || rm -f stamp-h1 + @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1 + +stamp-h1: $(srcdir)/config.in $(top_builddir)/config.status + @rm -f stamp-h1 + cd $(top_builddir) && $(SHELL) ./config.status config.h +$(srcdir)/config.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) + rm -f stamp-h1 + touch $@ + +distclean-hdr: + -rm -f config.h stamp-h1 + +clean-noinstLIBRARIES: + -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) + +libgdbsupport.a: $(libgdbsupport_a_OBJECTS) $(libgdbsupport_a_DEPENDENCIES) $(EXTRA_libgdbsupport_a_DEPENDENCIES) + $(AM_V_at)-rm -f libgdbsupport.a + $(AM_V_AR)$(libgdbsupport_a_AR) libgdbsupport.a $(libgdbsupport_a_OBJECTS) $(libgdbsupport_a_LIBADD) + $(AM_V_at)$(RANLIB) libgdbsupport.a + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/agent.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/btrace-common.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/buffer.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cleanups.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/common-debug.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/common-exceptions.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/common-inferior.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/common-regcache.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/common-utils.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/environ.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/errors.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/event-loop.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fileio.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/filestuff.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/format.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gdb-dlfcn.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gdb_tilde_expand.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gdb_vecs.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gdb_wait.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/job-control.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/netstuff.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/new-op.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pathstuff.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/print-utils.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ptid.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rsp-low.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/run-time-clock.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/safe-strerror.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scoped_mmap.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/selftest.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/signals-state-save-restore.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/signals.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tdesc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/thread-pool.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xml-utils.Po@am__quote@ + +.cc.o: +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< + +.cc.obj: +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscope: cscope.files + test ! -s cscope.files \ + || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) +clean-cscope: + -rm -f cscope.files +cscope.files: clean-cscope cscopelist +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + -rm -f cscope.out cscope.in.out cscope.po.out cscope.files +check-am: all-am +check: check-am +all-am: Makefile $(LIBRARIES) config.h +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am + +distclean: distclean-am + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-hdr distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf $(top_srcdir)/autom4te.cache + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: all install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am am--refresh check check-am clean \ + clean-cscope clean-generic clean-noinstLIBRARIES cscope \ + cscopelist-am ctags ctags-am distclean distclean-compile \ + distclean-generic distclean-hdr distclean-tags dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \ + uninstall-am + +.PRECIOUS: Makefile + + +override CXX += $(CXX_DIALECT) + +# Double-check that no defines are missing from our configury. +check-defines: + cd $(srcdir) && emacs --script check-defines.el + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff -Nru gdb-9.1/gdbsupport/netstuff.cc gdb-10.2/gdbsupport/netstuff.cc --- gdb-9.1/gdbsupport/netstuff.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/netstuff.cc 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,154 @@ +/* Operations on network stuff. + Copyright (C) 2018-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "common-defs.h" +#include "netstuff.h" +#include <algorithm> + +#ifdef USE_WIN32API +#include <ws2tcpip.h> +#else +#include <netinet/in.h> +#include <arpa/inet.h> +#include <netdb.h> +#include <sys/socket.h> +#include <netinet/tcp.h> +#endif + +/* See gdbsupport/netstuff.h. */ + +scoped_free_addrinfo::~scoped_free_addrinfo () +{ + freeaddrinfo (m_res); +} + +/* See gdbsupport/netstuff.h. */ + +parsed_connection_spec +parse_connection_spec_without_prefix (std::string spec, struct addrinfo *hint) +{ + parsed_connection_spec ret; + size_t last_colon_pos = 0; + /* We're dealing with IPv6 if: + + - ai_family is AF_INET6, or + - ai_family is not AF_INET, and + - spec[0] is '[', or + - the number of ':' on spec is greater than 1. */ + bool is_ipv6 = (hint->ai_family == AF_INET6 + || (hint->ai_family != AF_INET + && (spec[0] == '[' + || std::count (spec.begin (), + spec.end (), ':') > 1))); + + if (is_ipv6) + { + if (spec[0] == '[') + { + /* IPv6 addresses can be written as '[ADDR]:PORT', and we + support this notation. */ + size_t close_bracket_pos = spec.find_first_of (']'); + + if (close_bracket_pos == std::string::npos) + error (_("Missing close bracket in hostname '%s'"), + spec.c_str ()); + + hint->ai_family = AF_INET6; + + const char c = spec[close_bracket_pos + 1]; + + if (c == '\0') + last_colon_pos = std::string::npos; + else if (c != ':') + error (_("Invalid cruft after close bracket in '%s'"), + spec.c_str ()); + + /* Erase both '[' and ']'. */ + spec.erase (0, 1); + spec.erase (close_bracket_pos - 1, 1); + } + else if (spec.find_first_of (']') != std::string::npos) + error (_("Missing open bracket in hostname '%s'"), + spec.c_str ()); + } + + if (last_colon_pos == 0) + last_colon_pos = spec.find_last_of (':'); + + /* The length of the hostname part. */ + size_t host_len; + + if (last_colon_pos != std::string::npos) + { + /* The user has provided a port. */ + host_len = last_colon_pos; + ret.port_str = spec.substr (last_colon_pos + 1); + } + else + host_len = spec.size (); + + ret.host_str = spec.substr (0, host_len); + + /* Default hostname is localhost. */ + if (ret.host_str.empty ()) + ret.host_str = "localhost"; + + return ret; +} + +/* See gdbsupport/netstuff.h. */ + +parsed_connection_spec +parse_connection_spec (const char *spec, struct addrinfo *hint) +{ + /* Struct to hold the association between valid prefixes, their + family and socktype. */ + struct host_prefix + { + /* The prefix. */ + const char *prefix; + + /* The 'ai_family'. */ + int family; + + /* The 'ai_socktype'. */ + int socktype; + }; + static const struct host_prefix prefixes[] = + { + { "udp:", AF_UNSPEC, SOCK_DGRAM }, + { "tcp:", AF_UNSPEC, SOCK_STREAM }, + { "udp4:", AF_INET, SOCK_DGRAM }, + { "tcp4:", AF_INET, SOCK_STREAM }, + { "udp6:", AF_INET6, SOCK_DGRAM }, + { "tcp6:", AF_INET6, SOCK_STREAM }, + }; + + for (const host_prefix prefix : prefixes) + if (startswith (spec, prefix.prefix)) + { + spec += strlen (prefix.prefix); + hint->ai_family = prefix.family; + hint->ai_socktype = prefix.socktype; + hint->ai_protocol + = hint->ai_socktype == SOCK_DGRAM ? IPPROTO_UDP : IPPROTO_TCP; + break; + } + + return parse_connection_spec_without_prefix (spec, hint); +} diff -Nru gdb-9.1/gdbsupport/netstuff.h gdb-10.2/gdbsupport/netstuff.h --- gdb-9.1/gdbsupport/netstuff.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/netstuff.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,76 @@ +/* Operations on network stuff. + Copyright (C) 2018-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef COMMON_NETSTUFF_H +#define COMMON_NETSTUFF_H + +#include <string> + +/* Like NI_MAXHOST/NI_MAXSERV, but enough for numeric forms. */ +#define GDB_NI_MAX_ADDR 64 +#define GDB_NI_MAX_PORT 16 + +/* Helper class to guarantee that we always call 'freeaddrinfo'. */ + +class scoped_free_addrinfo +{ +public: + /* Default constructor. */ + explicit scoped_free_addrinfo (struct addrinfo *ainfo) + : m_res (ainfo) + { + } + + /* Destructor responsible for free'ing M_RES by calling + 'freeaddrinfo'. */ + ~scoped_free_addrinfo (); + + DISABLE_COPY_AND_ASSIGN (scoped_free_addrinfo); + +private: + /* The addrinfo resource. */ + struct addrinfo *m_res; +}; + +/* The struct we return after parsing the connection spec. */ + +struct parsed_connection_spec +{ + /* The hostname. */ + std::string host_str; + + /* The port, if any. */ + std::string port_str; +}; + + +/* Parse SPEC (which is a string in the form of "ADDR:PORT") and + return a 'parsed_connection_spec' structure with the proper fields + filled in. Also adjust HINT accordingly. */ +extern parsed_connection_spec + parse_connection_spec_without_prefix (std::string spec, + struct addrinfo *hint); + +/* Parse SPEC (which is a string in the form of + "[tcp[6]:|udp[6]:]ADDR:PORT") and return a 'parsed_connection_spec' + structure with the proper fields filled in. Also adjust HINT + accordingly. */ +extern parsed_connection_spec parse_connection_spec (const char *spec, + struct addrinfo *hint); + +#endif /* COMMON_NETSTUFF_H */ diff -Nru gdb-9.1/gdbsupport/new-op.cc gdb-10.2/gdbsupport/new-op.cc --- gdb-9.1/gdbsupport/new-op.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/new-op.cc 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,95 @@ +/* Replace operator new/new[], for GDB, the GNU debugger. + + Copyright (C) 2016-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +/* GCC does not understand __has_feature. */ +#if !defined(__has_feature) +# define __has_feature(x) 0 +#endif + +#if !__has_feature(address_sanitizer) && !defined(__SANITIZE_ADDRESS__) +#include "common-defs.h" +#include "host-defs.h" +#include <new> + +/* Override operator new / operator new[], in order to internal_error + on allocation failure and thus query the user for abort/core + dump/continue, just like xmalloc does. We don't do this from a + new-handler function instead (std::set_new_handler) because we want + to catch allocation errors from within global constructors too. + + Skip overriding if building with -fsanitize=address though. + Address sanitizer wants to override operator new/delete too in + order to detect malloc+delete and new+free mismatches. Our + versions would mask out ASan's, with the result of losing that + useful mismatch detection. + + Note that C++ implementations could either have their throw + versions call the nothrow versions (libstdc++), or the other way + around (clang/libc++). For that reason, we replace both throw and + nothrow variants and call malloc directly. */ + +void * +operator new (std::size_t sz) +{ + /* malloc (0) is unpredictable; avoid it. */ + if (sz == 0) + sz = 1; + + void *p = malloc (sz); /* ARI: malloc */ + if (p == NULL) + { + /* If the user decides to continue debugging, throw a + gdb_quit_bad_alloc exception instead of a regular QUIT + gdb_exception. The former extends both std::bad_alloc and a + QUIT gdb_exception. This is necessary because operator new + can only ever throw std::bad_alloc, or something that extends + it. */ + try + { + malloc_failure (sz); + } + catch (gdb_exception &ex) + { + throw gdb_quit_bad_alloc (std::move (ex)); + } + } + return p; +} + +void * +operator new (std::size_t sz, const std::nothrow_t&) noexcept +{ + /* malloc (0) is unpredictable; avoid it. */ + if (sz == 0) + sz = 1; + return malloc (sz); /* ARI: malloc */ +} + +void * +operator new[] (std::size_t sz) +{ + return ::operator new (sz); +} + +void* +operator new[] (std::size_t sz, const std::nothrow_t&) noexcept +{ + return ::operator new (sz, std::nothrow); +} +#endif diff -Nru gdb-9.1/gdbsupport/next-iterator.h gdb-10.2/gdbsupport/next-iterator.h --- gdb-9.1/gdbsupport/next-iterator.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/next-iterator.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,102 @@ +/* A "next" iterator for GDB, the GNU debugger. + Copyright (C) 2019-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef COMMON_NEXT_ITERATOR_H +#define COMMON_NEXT_ITERATOR_H + +/* An iterator that uses the 'next' field of a type to iterate. This + can be used with various GDB types that are stored as linked + lists. */ + +template<typename T> +struct next_iterator +{ + typedef next_iterator self_type; + typedef T *value_type; + typedef T *&reference; + typedef T **pointer; + typedef std::forward_iterator_tag iterator_category; + typedef int difference_type; + + explicit next_iterator (T *item) + : m_item (item) + { + } + + /* Create a one-past-the-end iterator. */ + next_iterator () + : m_item (nullptr) + { + } + + value_type operator* () const + { + return m_item; + } + + bool operator== (const self_type &other) const + { + return m_item == other.m_item; + } + + bool operator!= (const self_type &other) const + { + return m_item != other.m_item; + } + + self_type &operator++ () + { + m_item = m_item->next; + return *this; + } + +private: + + T *m_item; +}; + +/* A range adapter that allows iterating over a linked list. */ + +template<typename T, typename Iterator = next_iterator<T>> +class next_adapter +{ +public: + + explicit next_adapter (T *item) + : m_item (item) + { + } + + using iterator = Iterator; + + iterator begin () const + { + return iterator (m_item); + } + + iterator end () const + { + return iterator (); + } + +private: + + T *m_item; +}; + +#endif /* COMMON_NEXT_ITERATOR_H */ diff -Nru gdb-9.1/gdbsupport/observable.h gdb-10.2/gdbsupport/observable.h --- gdb-9.1/gdbsupport/observable.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/observable.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,119 @@ +/* Observers + + Copyright (C) 2016-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef COMMON_OBSERVABLE_H +#define COMMON_OBSERVABLE_H + +#include <algorithm> +#include <functional> +#include <vector> + +namespace gdb +{ + +namespace observers +{ + +extern unsigned int observer_debug; + +/* An observer is an entity which is interested in being notified + when GDB reaches certain states, or certain events occur in GDB. + The entity being observed is called the observable. To receive + notifications, the observer attaches a callback to the observable. + One observable can have several observers. + + The observer implementation is also currently not reentrant. In + particular, it is therefore not possible to call the attach or + detach routines during a notification. */ + +/* The type of a key that can be passed to attach, which can be passed + to detach to remove associated observers. Tokens have address + identity, and are thus usually const globals. */ +struct token +{ + token () = default; + + DISABLE_COPY_AND_ASSIGN (token); +}; + +template<typename... T> +class observable +{ +public: + + typedef std::function<void (T...)> func_type; + + explicit observable (const char *name) + : m_name (name) + { + } + + DISABLE_COPY_AND_ASSIGN (observable); + + /* Attach F as an observer to this observable. F cannot be + detached. */ + void attach (const func_type &f) + { + m_observers.emplace_back (nullptr, f); + } + + /* Attach F as an observer to this observable. T is a reference to + a token that can be used to later remove F. */ + void attach (const func_type &f, const token &t) + { + m_observers.emplace_back (&t, f); + } + + /* Remove observers associated with T from this observable. T is + the token that was previously passed to any number of "attach" + calls. */ + void detach (const token &t) + { + auto iter = std::remove_if (m_observers.begin (), + m_observers.end (), + [&] (const std::pair<const token *, + func_type> &e) + { + return e.first == &t; + }); + + m_observers.erase (iter, m_observers.end ()); + } + + /* Notify all observers that are attached to this observable. */ + void notify (T... args) const + { + if (observer_debug) + fprintf_unfiltered (gdb_stdlog, "observable %s notify() called\n", + m_name); + for (auto &&e : m_observers) + e.second (args...); + } + +private: + + std::vector<std::pair<const token *, func_type>> m_observers; + const char *m_name; +}; + +} /* namespace observers */ + +} /* namespace gdb */ + +#endif /* COMMON_OBSERVABLE_H */ diff -Nru gdb-9.1/gdbsupport/offset-type.h gdb-10.2/gdbsupport/offset-type.h --- gdb-9.1/gdbsupport/offset-type.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/offset-type.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,133 @@ +/* Offset types for GDB. + + Copyright (C) 2017-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +/* Define an "offset" type. Offset types are distinct integer types + that are used to represent an offset into anything that is + addressable. For example, an offset into a DWARF debug section. + The idea is catch mixing unrelated offset types at compile time, in + code that needs to manipulate multiple different kinds of offsets + that are easily confused. They're safer to use than native + integers, because they have no implicit conversion to anything. + And also, since they're implemented as "enum class" strong + typedefs, they're still integers ABI-wise, making them a bit more + efficient than wrapper structs on some ABIs. + + Some properties of offset types, loosely modeled on pointers: + + - You can compare offsets of the same type for equality and order. + You can't compare an offset with an unrelated type. + + - You can add/substract an integer to/from an offset, which gives + you back a shifted offset. + + - You can subtract two offsets of the same type, which gives you + back the delta as an integer (of the enum class's underlying + type), not as an offset type. + + - You can't add two offsets of the same type, as that would not + make sense. + + However, unlike pointers, you can't deference offset types. */ + +#ifndef COMMON_OFFSET_TYPE_H +#define COMMON_OFFSET_TYPE_H + +/* Declare TYPE as being an offset type. This declares the type and + enables the operators defined below. */ +#define DEFINE_OFFSET_TYPE(TYPE, UNDERLYING) \ + enum class TYPE : UNDERLYING {}; \ + void is_offset_type (TYPE) + +/* The macro macro is all you need to know use offset types. The rest + below is all implementation detail. */ + +/* For each enum class type that you want to support arithmetic + operators, declare an "is_offset_type" overload that has exactly + one parameter, of type that enum class. E.g.,: + + void is_offset_type (sect_offset); + + The function does not need to be defined, only declared. + DEFINE_OFFSET_TYPE declares this. + + A function declaration is preferred over a traits type, because the + former allows calling the DEFINE_OFFSET_TYPE macro inside a + namespace to define the corresponding offset type in that + namespace. The compiler finds the corresponding is_offset_type + function via ADL. +*/ + +/* Adding or subtracting an integer to an offset type shifts the + offset. This is like "PTR = PTR + INT" and "PTR += INT". */ + +#define DEFINE_OFFSET_ARITHM_OP(OP) \ + template<typename E, \ + typename = decltype (is_offset_type (std::declval<E> ()))> \ + constexpr E \ + operator OP (E lhs, typename std::underlying_type<E>::type rhs) \ + { \ + using underlying = typename std::underlying_type<E>::type; \ + return (E) (static_cast<underlying> (lhs) OP rhs); \ + } \ + \ + template<typename E, \ + typename = decltype (is_offset_type (std::declval<E> ()))> \ + constexpr E \ + operator OP (typename std::underlying_type<E>::type lhs, E rhs) \ + { \ + using underlying = typename std::underlying_type<E>::type; \ + return (E) (lhs OP static_cast<underlying> (rhs)); \ + } \ + \ + template<typename E, \ + typename = decltype (is_offset_type (std::declval<E> ()))> \ + E & \ + operator OP ## = (E &lhs, typename std::underlying_type<E>::type rhs) \ + { \ + using underlying = typename std::underlying_type<E>::type; \ + lhs = (E) (static_cast<underlying> (lhs) OP rhs); \ + return lhs; \ + } + +DEFINE_OFFSET_ARITHM_OP(+) +DEFINE_OFFSET_ARITHM_OP(-) + +/* Adding two offset types doesn't make sense, just like "PTR + PTR" + doesn't make sense. This is defined as a deleted function so that + a compile error easily brings you to this comment. */ + +template<typename E, + typename = decltype (is_offset_type (std::declval<E> ()))> +constexpr typename std::underlying_type<E>::type +operator+ (E lhs, E rhs) = delete; + +/* Subtracting two offset types, however, gives you back the + difference between the offsets, as an underlying type. Similar to + how "PTR2 - PTR1" returns a ptrdiff_t. */ + +template<typename E, + typename = decltype (is_offset_type (std::declval<E> ()))> +constexpr typename std::underlying_type<E>::type +operator- (E lhs, E rhs) +{ + using underlying = typename std::underlying_type<E>::type; + return static_cast<underlying> (lhs) - static_cast<underlying> (rhs); +} + +#endif /* COMMON_OFFSET_TYPE_H */ diff -Nru gdb-9.1/gdbsupport/parallel-for.h gdb-10.2/gdbsupport/parallel-for.h --- gdb-9.1/gdbsupport/parallel-for.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/parallel-for.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,86 @@ +/* Parallel for loops + + Copyright (C) 2019-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef GDBSUPPORT_PARALLEL_FOR_H +#define GDBSUPPORT_PARALLEL_FOR_H + +#include <algorithm> +#if CXX_STD_THREAD +#include <thread> +#include "gdbsupport/thread-pool.h" +#endif + +namespace gdb +{ + +/* A very simple "parallel for". This splits the range of iterators + into subranges, and then passes each subrange to the callback. The + work may or may not be done in separate threads. + + This approach was chosen over having the callback work on single + items because it makes it simple for the caller to do + once-per-subrange initialization and destruction. */ + +template<class RandomIt, class RangeFunction> +void +parallel_for_each (RandomIt first, RandomIt last, RangeFunction callback) +{ +#if CXX_STD_THREAD + /* So we can use a local array below. */ + const size_t local_max = 16; + size_t n_threads = std::min (thread_pool::g_thread_pool->thread_count (), + local_max); + size_t n_actual_threads = 0; + std::future<void> futures[local_max]; + + size_t n_elements = last - first; + if (n_threads > 1) + { + /* Arbitrarily require that there should be at least 10 elements + in a thread. */ + if (n_elements / n_threads < 10) + n_threads = std::max (n_elements / 10, (size_t) 1); + size_t elts_per_thread = n_elements / n_threads; + n_actual_threads = n_threads - 1; + for (int i = 0; i < n_actual_threads; ++i) + { + RandomIt end = first + elts_per_thread; + auto task = [=] () + { + callback (first, end); + }; + + futures[i] = gdb::thread_pool::g_thread_pool->post_task (task); + first = end; + } + } +#endif /* CXX_STD_THREAD */ + + /* Process all the remaining elements in the main thread. */ + callback (first, last); + +#if CXX_STD_THREAD + for (int i = 0; i < n_actual_threads; ++i) + futures[i].wait (); +#endif /* CXX_STD_THREAD */ +} + +} + +#endif /* GDBSUPPORT_PARALLEL_FOR_H */ diff -Nru gdb-9.1/gdbsupport/pathstuff.cc gdb-10.2/gdbsupport/pathstuff.cc --- gdb-9.1/gdbsupport/pathstuff.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/pathstuff.cc 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,290 @@ +/* Path manipulation routines for GDB and gdbserver. + + Copyright (C) 1986-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "common-defs.h" +#include "pathstuff.h" +#include "host-defs.h" +#include "filenames.h" +#include "gdb_tilde_expand.h" + +#ifdef USE_WIN32API +#include <windows.h> +#endif + +/* See gdbsupport/pathstuff.h. */ + +gdb::unique_xmalloc_ptr<char> +gdb_realpath (const char *filename) +{ +/* On most hosts, we rely on canonicalize_file_name to compute + the FILENAME's realpath. + + But the situation is slightly more complex on Windows, due to some + versions of GCC which were reported to generate paths where + backlashes (the directory separator) were doubled. For instance: + c:\\some\\double\\slashes\\dir + ... instead of ... + c:\some\double\slashes\dir + Those double-slashes were getting in the way when comparing paths, + for instance when trying to insert a breakpoint as follow: + (gdb) b c:/some/double/slashes/dir/foo.c:4 + No source file named c:/some/double/slashes/dir/foo.c:4. + (gdb) b c:\some\double\slashes\dir\foo.c:4 + No source file named c:\some\double\slashes\dir\foo.c:4. + To prevent this from happening, we need this function to always + strip those extra backslashes. While canonicalize_file_name does + perform this simplification, it only works when the path is valid. + Since the simplification would be useful even if the path is not + valid (one can always set a breakpoint on a file, even if the file + does not exist locally), we rely instead on GetFullPathName to + perform the canonicalization. */ + +#if defined (_WIN32) + { + char buf[MAX_PATH]; + DWORD len = GetFullPathName (filename, MAX_PATH, buf, NULL); + + /* The file system is case-insensitive but case-preserving. + So it is important we do not lowercase the path. Otherwise, + we might not be able to display the original casing in a given + path. */ + if (len > 0 && len < MAX_PATH) + return make_unique_xstrdup (buf); + } +#else + { + char *rp = canonicalize_file_name (filename); + + if (rp != NULL) + return gdb::unique_xmalloc_ptr<char> (rp); + } +#endif + + /* This system is a lost cause, just dup the buffer. */ + return make_unique_xstrdup (filename); +} + +/* See gdbsupport/pathstuff.h. */ + +gdb::unique_xmalloc_ptr<char> +gdb_realpath_keepfile (const char *filename) +{ + const char *base_name = lbasename (filename); + char *dir_name; + char *result; + + /* Extract the basename of filename, and return immediately + a copy of filename if it does not contain any directory prefix. */ + if (base_name == filename) + return make_unique_xstrdup (filename); + + dir_name = (char *) alloca ((size_t) (base_name - filename + 2)); + /* Allocate enough space to store the dir_name + plus one extra + character sometimes needed under Windows (see below), and + then the closing \000 character. */ + strncpy (dir_name, filename, base_name - filename); + dir_name[base_name - filename] = '\000'; + +#ifdef HAVE_DOS_BASED_FILE_SYSTEM + /* We need to be careful when filename is of the form 'd:foo', which + is equivalent of d:./foo, which is totally different from d:/foo. */ + if (strlen (dir_name) == 2 && isalpha (dir_name[0]) && dir_name[1] == ':') + { + dir_name[2] = '.'; + dir_name[3] = '\000'; + } +#endif + + /* Canonicalize the directory prefix, and build the resulting + filename. If the dirname realpath already contains an ending + directory separator, avoid doubling it. */ + gdb::unique_xmalloc_ptr<char> path_storage = gdb_realpath (dir_name); + const char *real_path = path_storage.get (); + if (IS_DIR_SEPARATOR (real_path[strlen (real_path) - 1])) + result = concat (real_path, base_name, (char *) NULL); + else + result = concat (real_path, SLASH_STRING, base_name, (char *) NULL); + + return gdb::unique_xmalloc_ptr<char> (result); +} + +/* See gdbsupport/pathstuff.h. */ + +gdb::unique_xmalloc_ptr<char> +gdb_abspath (const char *path) +{ + gdb_assert (path != NULL && path[0] != '\0'); + + if (path[0] == '~') + return gdb_tilde_expand_up (path); + + if (IS_ABSOLUTE_PATH (path) || current_directory == NULL) + return make_unique_xstrdup (path); + + /* Beware the // my son, the Emacs barfs, the botch that catch... */ + return gdb::unique_xmalloc_ptr<char> + (concat (current_directory, + IS_DIR_SEPARATOR (current_directory[strlen (current_directory) - 1]) + ? "" : SLASH_STRING, + path, (char *) NULL)); +} + +/* See gdbsupport/pathstuff.h. */ + +const char * +child_path (const char *parent, const char *child) +{ + /* The child path must start with the parent path. */ + size_t parent_len = strlen (parent); + if (filename_ncmp (parent, child, parent_len) != 0) + return NULL; + + /* The parent path must be a directory and the child must contain at + least one component underneath the parent. */ + const char *child_component; + if (parent_len > 0 && IS_DIR_SEPARATOR (parent[parent_len - 1])) + { + /* The parent path ends in a directory separator, so it is a + directory. The first child component starts after the common + prefix. */ + child_component = child + parent_len; + } + else + { + /* The parent path does not end in a directory separator. The + first character in the child after the common prefix must be + a directory separator. + + Note that CHILD must hold at least parent_len characters for + filename_ncmp to return zero. If the character at parent_len + is nul due to CHILD containing the same path as PARENT, the + IS_DIR_SEPARATOR check will fail here. */ + if (!IS_DIR_SEPARATOR (child[parent_len])) + return NULL; + + /* The first child component starts after the separator after the + common prefix. */ + child_component = child + parent_len + 1; + } + + /* The child must contain at least one non-separator character after + the parent. */ + while (*child_component != '\0') + { + if (!IS_DIR_SEPARATOR (*child_component)) + return child_component; + + child_component++; + } + return NULL; +} + +/* See gdbsupport/pathstuff.h. */ + +bool +contains_dir_separator (const char *path) +{ + for (; *path != '\0'; path++) + { + if (IS_DIR_SEPARATOR (*path)) + return true; + } + + return false; +} + +/* See gdbsupport/pathstuff.h. */ + +std::string +get_standard_cache_dir () +{ +#ifdef __APPLE__ +#define HOME_CACHE_DIR "Library/Caches" +#else +#define HOME_CACHE_DIR ".cache" +#endif + +#ifndef __APPLE__ + const char *xdg_cache_home = getenv ("XDG_CACHE_HOME"); + if (xdg_cache_home != NULL) + { + /* Make sure the path is absolute and tilde-expanded. */ + gdb::unique_xmalloc_ptr<char> abs (gdb_abspath (xdg_cache_home)); + return string_printf ("%s/gdb", abs.get ()); + } +#endif + + const char *home = getenv ("HOME"); + if (home != NULL) + { + /* Make sure the path is absolute and tilde-expanded. */ + gdb::unique_xmalloc_ptr<char> abs (gdb_abspath (home)); + return string_printf ("%s/" HOME_CACHE_DIR "/gdb", abs.get ()); + } + + return {}; +} + +/* See gdbsupport/pathstuff.h. */ + +std::string +get_standard_temp_dir () +{ +#ifdef WIN32 + const char *tmp = getenv ("TMP"); + if (tmp != nullptr) + return tmp; + + tmp = getenv ("TEMP"); + if (tmp != nullptr) + return tmp; + + error (_("Couldn't find temp dir path, both TMP and TEMP are unset.")); + +#else + const char *tmp = getenv ("TMPDIR"); + if (tmp != nullptr) + return tmp; + + return "/tmp"; +#endif +} + +/* See gdbsupport/pathstuff.h. */ + +const char * +get_shell () +{ + const char *ret = getenv ("SHELL"); + if (ret == NULL) + ret = "/bin/sh"; + + return ret; +} + +/* See gdbsupport/pathstuff.h. */ + +gdb::char_vector +make_temp_filename (const std::string &f) +{ + gdb::char_vector filename_temp (f.length () + 8); + strcpy (filename_temp.data (), f.c_str ()); + strcat (filename_temp.data () + f.size (), "-XXXXXX"); + return filename_temp; +} diff -Nru gdb-9.1/gdbsupport/pathstuff.h gdb-10.2/gdbsupport/pathstuff.h --- gdb-9.1/gdbsupport/pathstuff.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/pathstuff.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,98 @@ +/* Path manipulation routines for GDB and gdbserver. + + Copyright (C) 1986-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef COMMON_PATHSTUFF_H +#define COMMON_PATHSTUFF_H + +#include "gdbsupport/byte-vector.h" + +/* Path utilities. */ + +/* Return the real path of FILENAME, expanding all the symbolic links. + + Contrary to "gdb_abspath", this function does not use + CURRENT_DIRECTORY for path expansion. Instead, it relies on the + current working directory (CWD) of GDB or gdbserver. */ + +extern gdb::unique_xmalloc_ptr<char> gdb_realpath (const char *filename); + +/* Return a copy of FILENAME, with its directory prefix canonicalized + by gdb_realpath. */ + +extern gdb::unique_xmalloc_ptr<char> + gdb_realpath_keepfile (const char *filename); + +/* Return PATH in absolute form, performing tilde-expansion if necessary. + PATH cannot be NULL or the empty string. + This does not resolve symlinks however, use gdb_realpath for that. + + Contrary to "gdb_realpath", this function uses CURRENT_DIRECTORY + for the path expansion. This may lead to scenarios the current + working directory (CWD) is different than CURRENT_DIRECTORY. + + If CURRENT_DIRECTORY is NULL, this function returns a copy of + PATH. */ + +extern gdb::unique_xmalloc_ptr<char> gdb_abspath (const char *path); + +/* If the path in CHILD is a child of the path in PARENT, return a + pointer to the first component in the CHILD's pathname below the + PARENT. Otherwise, return NULL. */ + +extern const char *child_path (const char *parent, const char *child); + +/* Return whether PATH contains a directory separator character. */ + +extern bool contains_dir_separator (const char *path); + +/* Get the usual user cache directory for the current platform. + + On Linux, it follows the XDG Base Directory specification: use + $XDG_CACHE_HOME/gdb if the XDG_CACHE_HOME environment variable is + defined, otherwise $HOME/.cache. + + On macOS, it follows the local convention and uses + ~/Library/Caches/gdb. + + The return value is absolute and tilde-expanded. Return an empty + string if neither XDG_CACHE_HOME (on Linux) or HOME are defined. */ + +extern std::string get_standard_cache_dir (); + +/* Get the usual temporary directory for the current platform. + + On Windows, this is the TMP or TEMP environment variable. + + On the rest, this is the TMPDIR environment variable, if defined, else /tmp. + + Throw an exception on error. */ + +extern std::string get_standard_temp_dir (); + +/* Return the file name of the user's shell. Normally this comes from + the SHELL environment variable. */ + +extern const char *get_shell (); + +/* Make a filename suitable to pass to mkstemp based on F (e.g. + /tmp/foo -> /tmp/foo-XXXXXX). */ + +extern gdb::char_vector make_temp_filename (const std::string &f); + +#endif /* COMMON_PATHSTUFF_H */ diff -Nru gdb-9.1/gdbsupport/poison.h gdb-10.2/gdbsupport/poison.h --- gdb-9.1/gdbsupport/poison.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/poison.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,248 @@ +/* Poison symbols at compile time. + + Copyright (C) 2017-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef COMMON_POISON_H +#define COMMON_POISON_H + +#include "traits.h" +#include "obstack.h" + +/* Poison memset of non-POD types. The idea is catching invalid + initialization of non-POD structs that is easy to be introduced as + side effect of refactoring. For example, say this: + + struct S { VEC(foo_s) *m_data; }; + +is converted to this at some point: + + struct S { + S() { m_data.reserve (10); } + std::vector<foo> m_data; + }; + +and old code was initializing S objects like this: + + struct S s; + memset (&s, 0, sizeof (S)); // whoops, now wipes vector. + +Declaring memset as deleted for non-POD types makes the memset above +be a compile-time error. */ + +/* Helper for SFINAE. True if "T *" is memsettable. I.e., if T is + either void, or POD. */ +template<typename T> +struct IsMemsettable + : gdb::Or<std::is_void<T>, + std::is_pod<T>> +{}; + +template <typename T, + typename = gdb::Requires<gdb::Not<IsMemsettable<T>>>> +void *memset (T *s, int c, size_t n) = delete; + +#if HAVE_IS_TRIVIALLY_COPYABLE + +/* Similarly, poison memcpy and memmove of non trivially-copyable + types, which is undefined. */ + +/* True if "T *" is relocatable. I.e., copyable with memcpy/memmove. + I.e., T is either trivially copyable, or void. */ +template<typename T> +struct IsRelocatable + : gdb::Or<std::is_void<T>, + std::is_trivially_copyable<T>> +{}; + +/* True if both source and destination are relocatable. */ + +template <typename D, typename S> +using BothAreRelocatable + = gdb::And<IsRelocatable<D>, IsRelocatable<S>>; + +template <typename D, typename S, + typename = gdb::Requires<gdb::Not<BothAreRelocatable<D, S>>>> +void *memcpy (D *dest, const S *src, size_t n) = delete; + +template <typename D, typename S, + typename = gdb::Requires<gdb::Not<BothAreRelocatable<D, S>>>> +void *memmove (D *dest, const S *src, size_t n) = delete; + +#endif /* HAVE_IS_TRIVIALLY_COPYABLE */ + +/* Poison XNEW and friends to catch usages of malloc-style allocations on + objects that require new/delete. */ + +template<typename T> +#if HAVE_IS_TRIVIALLY_CONSTRUCTIBLE +using IsMallocable = std::is_trivially_constructible<T>; +#else +using IsMallocable = std::true_type; +#endif + +template<typename T> +using IsFreeable = gdb::Or<std::is_trivially_destructible<T>, std::is_void<T>>; + +template <typename T, typename = gdb::Requires<gdb::Not<IsFreeable<T>>>> +void free (T *ptr) = delete; + +template<typename T> +static T * +xnew () +{ + static_assert (IsMallocable<T>::value, "Trying to use XNEW with a non-POD \ +data type. Use operator new instead."); + return XNEW (T); +} + +#undef XNEW +#define XNEW(T) xnew<T>() + +template<typename T> +static T * +xcnew () +{ + static_assert (IsMallocable<T>::value, "Trying to use XCNEW with a non-POD \ +data type. Use operator new instead."); + return XCNEW (T); +} + +#undef XCNEW +#define XCNEW(T) xcnew<T>() + +template<typename T> +static void +xdelete (T *p) +{ + static_assert (IsFreeable<T>::value, "Trying to use XDELETE with a non-POD \ +data type. Use operator delete instead."); + XDELETE (p); +} + +#undef XDELETE +#define XDELETE(P) xdelete (P) + +template<typename T> +static T * +xnewvec (size_t n) +{ + static_assert (IsMallocable<T>::value, "Trying to use XNEWVEC with a \ +non-POD data type. Use operator new[] (or std::vector) instead."); + return XNEWVEC (T, n); +} + +#undef XNEWVEC +#define XNEWVEC(T, N) xnewvec<T> (N) + +template<typename T> +static T * +xcnewvec (size_t n) +{ + static_assert (IsMallocable<T>::value, "Trying to use XCNEWVEC with a \ +non-POD data type. Use operator new[] (or std::vector) instead."); + return XCNEWVEC (T, n); +} + +#undef XCNEWVEC +#define XCNEWVEC(T, N) xcnewvec<T> (N) + +template<typename T> +static T * +xresizevec (T *p, size_t n) +{ + static_assert (IsMallocable<T>::value, "Trying to use XRESIZEVEC with a \ +non-POD data type."); + return XRESIZEVEC (T, p, n); +} + +#undef XRESIZEVEC +#define XRESIZEVEC(T, P, N) xresizevec<T> (P, N) + +template<typename T> +static void +xdeletevec (T *p) +{ + static_assert (IsFreeable<T>::value, "Trying to use XDELETEVEC with a \ +non-POD data type. Use operator delete[] (or std::vector) instead."); + XDELETEVEC (p); +} + +#undef XDELETEVEC +#define XDELETEVEC(P) xdeletevec (P) + +template<typename T> +static T * +xnewvar (size_t s) +{ + static_assert (IsMallocable<T>::value, "Trying to use XNEWVAR with a \ +non-POD data type."); + return XNEWVAR (T, s);; +} + +#undef XNEWVAR +#define XNEWVAR(T, S) xnewvar<T> (S) + +template<typename T> +static T * +xcnewvar (size_t s) +{ + static_assert (IsMallocable<T>::value, "Trying to use XCNEWVAR with a \ +non-POD data type."); + return XCNEWVAR (T, s); +} + +#undef XCNEWVAR +#define XCNEWVAR(T, S) xcnewvar<T> (S) + +template<typename T> +static T * +xresizevar (T *p, size_t s) +{ + static_assert (IsMallocable<T>::value, "Trying to use XRESIZEVAR with a \ +non-POD data type."); + return XRESIZEVAR (T, p, s); +} + +#undef XRESIZEVAR +#define XRESIZEVAR(T, P, S) xresizevar<T> (P, S) + +template<typename T> +static T * +xobnew (obstack *ob) +{ + static_assert (IsMallocable<T>::value, "Trying to use XOBNEW with a \ +non-POD data type."); + return XOBNEW (ob, T); +} + +#undef XOBNEW +#define XOBNEW(O, T) xobnew<T> (O) + +template<typename T> +static T * +xobnewvec (obstack *ob, size_t n) +{ + static_assert (IsMallocable<T>::value, "Trying to use XOBNEWVEC with a \ +non-POD data type."); + return XOBNEWVEC (ob, T, n); +} + +#undef XOBNEWVEC +#define XOBNEWVEC(O, T, N) xobnewvec<T> (O, N) + +#endif /* COMMON_POISON_H */ diff -Nru gdb-9.1/gdbsupport/preprocessor.h gdb-10.2/gdbsupport/preprocessor.h --- gdb-9.1/gdbsupport/preprocessor.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/preprocessor.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,35 @@ +/* Copyright (C) 2017-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef COMMON_PREPROCESSOR_H +#define COMMON_PREPROCESSOR_H + +/* Generally useful preprocessor bits. */ + +/* Concatenate two tokens. */ +#define CONCAT_1(a, b) a ## b +#define CONCAT(a, b) CONCAT_1 (a, b) + +/* Stringification. */ +#define STRINGIFY_1(x) #x +#define STRINGIFY(x) STRINGIFY_1 (x) + +/* Escape parens out. Useful if you need to pass an argument that + includes commas to another macro. */ +#define ESC_PARENS(...) __VA_ARGS__ + +#endif /* COMMON_PREPROCESSOR_H */ diff -Nru gdb-9.1/gdbsupport/print-utils.cc gdb-10.2/gdbsupport/print-utils.cc --- gdb-9.1/gdbsupport/print-utils.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/print-utils.cc 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,326 @@ +/* Cell-based print utility routines for GDB, the GNU debugger. + + Copyright (C) 1986-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "common-defs.h" +#include "print-utils.h" +/* Temporary storage using circular buffer. */ + +/* Number of cells in the circular buffer. */ +#define NUMCELLS 16 + +/* Return the next entry in the circular buffer. */ + +char * +get_print_cell (void) +{ + static char buf[NUMCELLS][PRINT_CELL_SIZE]; + static int cell = 0; + + if (++cell >= NUMCELLS) + cell = 0; + return buf[cell]; +} + +static char * +decimal2str (const char *sign, ULONGEST addr, int width) +{ + /* Steal code from valprint.c:print_decimal(). Should this worry + about the real size of addr as the above does? */ + unsigned long temp[3]; + char *str = get_print_cell (); + int i = 0; + + do + { + temp[i] = addr % (1000 * 1000 * 1000); + addr /= (1000 * 1000 * 1000); + i++; + width -= 9; + } + while (addr != 0 && i < (sizeof (temp) / sizeof (temp[0]))); + + width += 9; + if (width < 0) + width = 0; + + switch (i) + { + case 1: + xsnprintf (str, PRINT_CELL_SIZE, "%s%0*lu", sign, width, temp[0]); + break; + case 2: + xsnprintf (str, PRINT_CELL_SIZE, "%s%0*lu%09lu", sign, width, + temp[1], temp[0]); + break; + case 3: + xsnprintf (str, PRINT_CELL_SIZE, "%s%0*lu%09lu%09lu", sign, width, + temp[2], temp[1], temp[0]); + break; + default: + internal_error (__FILE__, __LINE__, + _("failed internal consistency check")); + } + + return str; +} + +static char * +octal2str (ULONGEST addr, int width) +{ + unsigned long temp[3]; + char *str = get_print_cell (); + int i = 0; + + do + { + temp[i] = addr % (0100000 * 0100000); + addr /= (0100000 * 0100000); + i++; + width -= 10; + } + while (addr != 0 && i < (sizeof (temp) / sizeof (temp[0]))); + + width += 10; + if (width < 0) + width = 0; + + switch (i) + { + case 1: + if (temp[0] == 0) + xsnprintf (str, PRINT_CELL_SIZE, "%*o", width, 0); + else + xsnprintf (str, PRINT_CELL_SIZE, "0%0*lo", width, temp[0]); + break; + case 2: + xsnprintf (str, PRINT_CELL_SIZE, "0%0*lo%010lo", width, temp[1], temp[0]); + break; + case 3: + xsnprintf (str, PRINT_CELL_SIZE, "0%0*lo%010lo%010lo", width, + temp[2], temp[1], temp[0]); + break; + default: + internal_error (__FILE__, __LINE__, + _("failed internal consistency check")); + } + + return str; +} + +/* See print-utils.h. */ + +char * +pulongest (ULONGEST u) +{ + return decimal2str ("", u, 0); +} + +/* See print-utils.h. */ + +char * +plongest (LONGEST l) +{ + if (l < 0) + return decimal2str ("-", -l, 0); + else + return decimal2str ("", l, 0); +} + +/* Eliminate warning from compiler on 32-bit systems. */ +static int thirty_two = 32; + +/* See print-utils.h. */ + +char * +phex (ULONGEST l, int sizeof_l) +{ + char *str; + + switch (sizeof_l) + { + case 8: + str = get_print_cell (); + xsnprintf (str, PRINT_CELL_SIZE, "%08lx%08lx", + (unsigned long) (l >> thirty_two), + (unsigned long) (l & 0xffffffff)); + break; + case 4: + str = get_print_cell (); + xsnprintf (str, PRINT_CELL_SIZE, "%08lx", (unsigned long) l); + break; + case 2: + str = get_print_cell (); + xsnprintf (str, PRINT_CELL_SIZE, "%04x", (unsigned short) (l & 0xffff)); + break; + default: + str = phex (l, sizeof (l)); + break; + } + + return str; +} + +/* See print-utils.h. */ + +char * +phex_nz (ULONGEST l, int sizeof_l) +{ + char *str; + + switch (sizeof_l) + { + case 8: + { + unsigned long high = (unsigned long) (l >> thirty_two); + + str = get_print_cell (); + if (high == 0) + xsnprintf (str, PRINT_CELL_SIZE, "%lx", + (unsigned long) (l & 0xffffffff)); + else + xsnprintf (str, PRINT_CELL_SIZE, "%lx%08lx", high, + (unsigned long) (l & 0xffffffff)); + break; + } + case 4: + str = get_print_cell (); + xsnprintf (str, PRINT_CELL_SIZE, "%lx", (unsigned long) l); + break; + case 2: + str = get_print_cell (); + xsnprintf (str, PRINT_CELL_SIZE, "%x", (unsigned short) (l & 0xffff)); + break; + default: + str = phex_nz (l, sizeof (l)); + break; + } + + return str; +} + +/* See print-utils.h. */ + +char * +hex_string (LONGEST num) +{ + char *result = get_print_cell (); + + xsnprintf (result, PRINT_CELL_SIZE, "0x%s", phex_nz (num, sizeof (num))); + return result; +} + +/* See print-utils.h. */ + +char * +hex_string_custom (LONGEST num, int width) +{ + char *result = get_print_cell (); + char *result_end = result + PRINT_CELL_SIZE - 1; + const char *hex = phex_nz (num, sizeof (num)); + int hex_len = strlen (hex); + + if (hex_len > width) + width = hex_len; + if (width + 2 >= PRINT_CELL_SIZE) + internal_error (__FILE__, __LINE__, _("\ +hex_string_custom: insufficient space to store result")); + + strcpy (result_end - width - 2, "0x"); + memset (result_end - width, '0', width); + strcpy (result_end - hex_len, hex); + return result_end - width - 2; +} + +/* See print-utils.h. */ + +char * +int_string (LONGEST val, int radix, int is_signed, int width, + int use_c_format) +{ + switch (radix) + { + case 16: + { + char *result; + + if (width == 0) + result = hex_string (val); + else + result = hex_string_custom (val, width); + if (! use_c_format) + result += 2; + return result; + } + case 10: + { + if (is_signed && val < 0) + return decimal2str ("-", -val, width); + else + return decimal2str ("", val, width); + } + case 8: + { + char *result = octal2str (val, width); + + if (use_c_format || val == 0) + return result; + else + return result + 1; + } + default: + internal_error (__FILE__, __LINE__, + _("failed internal consistency check")); + } +} + +/* See print-utils.h. */ + +const char * +core_addr_to_string (const CORE_ADDR addr) +{ + char *str = get_print_cell (); + + strcpy (str, "0x"); + strcat (str, phex (addr, sizeof (addr))); + return str; +} + +/* See print-utils.h. */ + +const char * +core_addr_to_string_nz (const CORE_ADDR addr) +{ + char *str = get_print_cell (); + + strcpy (str, "0x"); + strcat (str, phex_nz (addr, sizeof (addr))); + return str; +} + +/* See print-utils.h. */ + +const char * +host_address_to_string_1 (const void *addr) +{ + char *str = get_print_cell (); + + xsnprintf (str, PRINT_CELL_SIZE, "0x%s", + phex_nz ((uintptr_t) addr, sizeof (addr))); + return str; +} diff -Nru gdb-9.1/gdbsupport/print-utils.h gdb-10.2/gdbsupport/print-utils.h --- gdb-9.1/gdbsupport/print-utils.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/print-utils.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,85 @@ +/* Cell-based print utility routines for GDB, the GNU debugger. + + Copyright (C) 1986-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef COMMON_PRINT_UTILS_H +#define COMMON_PRINT_UTILS_H + +/* How many characters (including the terminating null byte) fit in a + cell. */ +#define PRINT_CELL_SIZE 50 + +/* %u for ULONGEST. The result is stored in a circular static buffer, + NUMCELLS deep. */ + +extern char *pulongest (ULONGEST u); + +/* %d for LONGEST. The result is stored in a circular static buffer, + NUMCELLS deep. */ + +extern char *plongest (LONGEST l); + +/* Convert a ULONGEST into a HEX string, like %lx, with leading zeros. + The result is stored in a circular static buffer, NUMCELLS deep. */ + +extern char *phex (ULONGEST l, int sizeof_l); + +/* Convert a ULONGEST into a HEX string, like %lx, without leading zeros. + The result is stored in a circular static buffer, NUMCELLS deep. */ + +extern char *phex_nz (ULONGEST l, int sizeof_l); + +/* Converts a LONGEST to a C-format hexadecimal literal and stores it + in a static string. Returns a pointer to this string. */ + +extern char *hex_string (LONGEST num); + +/* Converts a LONGEST number to a C-format hexadecimal literal and + stores it in a static string. Returns a pointer to this string + that is valid until the next call. The number is padded on the + left with 0s to at least WIDTH characters. */ + +extern char *hex_string_custom (LONGEST num, int width); + +/* Convert VAL to a numeral in the given radix. For + * radix 10, IS_SIGNED may be true, indicating a signed quantity; + * otherwise VAL is interpreted as unsigned. If WIDTH is supplied, + * it is the minimum width (0-padded if needed). USE_C_FORMAT means + * to use C format in all cases. If it is false, then 'x' + * and 'o' formats do not include a prefix (0x or leading 0). */ + +extern char *int_string (LONGEST val, int radix, int is_signed, int width, + int use_c_format); + +/* Convert a CORE_ADDR into a string. */ + +extern const char *core_addr_to_string (const CORE_ADDR addr); + +extern const char *core_addr_to_string_nz (const CORE_ADDR addr); + +extern const char *host_address_to_string_1 (const void *addr); + +/* Wrapper that avoids adding a pointless cast to all callers. */ +#define host_address_to_string(ADDR) \ + host_address_to_string_1 ((const void *) (ADDR)) + +/* Return the next entry in the circular print buffer. */ + +extern char *get_print_cell (void); + +#endif /* COMMON_PRINT_UTILS_H */ diff -Nru gdb-9.1/gdbsupport/ptid.cc gdb-10.2/gdbsupport/ptid.cc --- gdb-9.1/gdbsupport/ptid.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/ptid.cc 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,26 @@ +/* The ptid_t type and common functions operating on it. + + Copyright (C) 1986-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "common-defs.h" +#include "ptid.h" + +/* See ptid.h for these. */ + +ptid_t const null_ptid = ptid_t::make_null (); +ptid_t const minus_one_ptid = ptid_t::make_minus_one (); diff -Nru gdb-9.1/gdbsupport/ptid.h gdb-10.2/gdbsupport/ptid.h --- gdb-9.1/gdbsupport/ptid.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/ptid.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,171 @@ +/* The ptid_t type and common functions operating on it. + + Copyright (C) 1986-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef COMMON_PTID_H +#define COMMON_PTID_H + +/* The ptid struct is a collection of the various "ids" necessary for + identifying the inferior process/thread being debugged. This + consists of the process id (pid), lightweight process id (lwp) and + thread id (tid). When manipulating ptids, the constructors, + accessors, and predicates declared in this file should be used. Do + NOT access the struct ptid members directly. + + process_stratum targets that handle threading themselves should + prefer using the ptid.lwp field, leaving the ptid.tid field for any + thread_stratum target that might want to sit on top. +*/ + +#include <functional> + +class ptid_t +{ +public: + /* Must have a trivial defaulted default constructor so that the + type remains POD. */ + ptid_t () noexcept = default; + + /* Make a ptid given the necessary PID, LWP, and TID components. + + A ptid with only a PID (LWP and TID equal to zero) is usually used to + represent a whole process, including all its lwps/threads. */ + + explicit constexpr ptid_t (int pid, long lwp = 0, long tid = 0) + : m_pid (pid), m_lwp (lwp), m_tid (tid) + {} + + /* Fetch the pid (process id) component from the ptid. */ + + constexpr int pid () const + { return m_pid; } + + /* Return true if the ptid's lwp member is non-zero. */ + + constexpr bool lwp_p () const + { return m_lwp != 0; } + + /* Fetch the lwp (lightweight process) component from the ptid. */ + + constexpr long lwp () const + { return m_lwp; } + + /* Return true if the ptid's tid member is non-zero. */ + + constexpr bool tid_p () const + { return m_tid != 0; } + + /* Fetch the tid (thread id) component from a ptid. */ + + constexpr long tid () const + { return m_tid; } + + /* Return true if the ptid represents a whole process, including all its + lwps/threads. Such ptids have the form of (pid, 0, 0), with + pid != -1. */ + + constexpr bool is_pid () const + { + return (*this != make_null () + && *this != make_minus_one () + && m_lwp == 0 + && m_tid == 0); + } + + /* Compare two ptids to see if they are equal. */ + + constexpr bool operator== (const ptid_t &other) const + { + return (m_pid == other.m_pid + && m_lwp == other.m_lwp + && m_tid == other.m_tid); + } + + /* Compare two ptids to see if they are different. */ + + constexpr bool operator!= (const ptid_t &other) const + { + return !(*this == other); + } + + /* Return true if the ptid matches FILTER. FILTER can be the wild + card MINUS_ONE_PTID (all ptids match it); can be a ptid representing + a process (ptid.is_pid () returns true), in which case, all lwps and + threads of that given process match, lwps and threads of other + processes do not; or, it can represent a specific thread, in which + case, only that thread will match true. The ptid must represent a + specific LWP or THREAD, it can never be a wild card. */ + + constexpr bool matches (const ptid_t &filter) const + { + return (/* If filter represents any ptid, it's always a match. */ + filter == make_minus_one () + /* If filter is only a pid, any ptid with that pid + matches. */ + || (filter.is_pid () && m_pid == filter.pid ()) + + /* Otherwise, this ptid only matches if it's exactly equal + to filter. */ + || *this == filter); + } + + /* Make a null ptid. */ + + static constexpr ptid_t make_null () + { return ptid_t (0, 0, 0); } + + /* Make a minus one ptid. */ + + static constexpr ptid_t make_minus_one () + { return ptid_t (-1, 0, 0); } + +private: + /* Process id. */ + int m_pid; + + /* Lightweight process id. */ + long m_lwp; + + /* Thread id. */ + long m_tid; +}; + +/* Functor to hash a ptid. */ + +struct hash_ptid +{ + size_t operator() (const ptid_t &ptid) const + { + std::hash<long> long_hash; + + return (long_hash (ptid.pid ()) + + long_hash (ptid.lwp ()) + + long_hash (ptid.tid ())); + } +}; + +/* The null or zero ptid, often used to indicate no process. */ + +extern const ptid_t null_ptid; + +/* The (-1,0,0) ptid, often used to indicate either an error condition + or a "don't care" condition, i.e, "run all threads." */ + +extern const ptid_t minus_one_ptid; + +#endif /* COMMON_PTID_H */ diff -Nru gdb-9.1/gdbsupport/README gdb-10.2/gdbsupport/README --- gdb-9.1/gdbsupport/README 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/README 2020-09-13 02:33:41.000000000 +0000 @@ -0,0 +1,4 @@ +This is a helper library that is used by gdb and gdbserver. + +To send patches, follow the gdb patch submission instructions in +../gdb/CONTRIBUTE. For maintainers, see ../gdb/MAINTAINERS. diff -Nru gdb-9.1/gdbsupport/refcounted-object.h gdb-10.2/gdbsupport/refcounted-object.h --- gdb-9.1/gdbsupport/refcounted-object.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/refcounted-object.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,70 @@ +/* Base class of intrusively reference-counted objects. + Copyright (C) 2017-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef COMMON_REFCOUNTED_OBJECT_H +#define COMMON_REFCOUNTED_OBJECT_H + +/* Base class of intrusively reference-countable objects. + Incrementing and decrementing the reference count is an external + responsibility. */ + +class refcounted_object +{ +public: + refcounted_object () = default; + + /* Increase the refcount. */ + void incref () + { + gdb_assert (m_refcount >= 0); + m_refcount++; + } + + /* Decrease the refcount. */ + void decref () + { + m_refcount--; + gdb_assert (m_refcount >= 0); + } + + int refcount () const { return m_refcount; } + +private: + DISABLE_COPY_AND_ASSIGN (refcounted_object); + + /* The reference count. */ + int m_refcount = 0; +}; + +/* A policy class to interface gdb::ref_ptr with a + refcounted_object. */ + +struct refcounted_object_ref_policy +{ + static void incref (refcounted_object *ptr) + { + ptr->incref (); + } + + static void decref (refcounted_object *ptr) + { + ptr->decref (); + } +}; + +#endif /* COMMON_REFCOUNTED_OBJECT_H */ diff -Nru gdb-9.1/gdbsupport/rsp-low.cc gdb-10.2/gdbsupport/rsp-low.cc --- gdb-9.1/gdbsupport/rsp-low.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/rsp-low.cc 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,307 @@ +/* Low-level RSP routines for GDB, the GNU debugger. + + Copyright (C) 1988-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "common-defs.h" +#include "rsp-low.h" + +/* See rsp-low.h. */ + +int +fromhex (int a) +{ + if (a >= '0' && a <= '9') + return a - '0'; + else if (a >= 'a' && a <= 'f') + return a - 'a' + 10; + else if (a >= 'A' && a <= 'F') + return a - 'A' + 10; + else + error (_("Reply contains invalid hex digit %d"), a); +} + +/* See rsp-low.h. */ + +int +tohex (int nib) +{ + if (nib < 10) + return '0' + nib; + else + return 'a' + nib - 10; +} + +/* Encode 64 bits in 16 chars of hex. */ + +static const char hexchars[] = "0123456789abcdef"; + +static int +ishex (int ch, int *val) +{ + if ((ch >= 'a') && (ch <= 'f')) + { + *val = ch - 'a' + 10; + return 1; + } + if ((ch >= 'A') && (ch <= 'F')) + { + *val = ch - 'A' + 10; + return 1; + } + if ((ch >= '0') && (ch <= '9')) + { + *val = ch - '0'; + return 1; + } + return 0; +} + +/* See rsp-low.h. */ + +char * +pack_nibble (char *buf, int nibble) +{ + *buf++ = hexchars[(nibble & 0x0f)]; + return buf; +} + +/* See rsp-low.h. */ + +char * +pack_hex_byte (char *pkt, int byte) +{ + *pkt++ = hexchars[(byte >> 4) & 0xf]; + *pkt++ = hexchars[(byte & 0xf)]; + return pkt; +} + +/* See rsp-low.h. */ + +const char * +unpack_varlen_hex (const char *buff, /* packet to parse */ + ULONGEST *result) +{ + int nibble; + ULONGEST retval = 0; + + while (ishex (*buff, &nibble)) + { + buff++; + retval = retval << 4; + retval |= nibble & 0x0f; + } + *result = retval; + return buff; +} + +/* See rsp-low.h. */ + +int +hex2bin (const char *hex, gdb_byte *bin, int count) +{ + int i; + + for (i = 0; i < count; i++) + { + if (hex[0] == 0 || hex[1] == 0) + { + /* Hex string is short, or of uneven length. + Return the count that has been converted so far. */ + return i; + } + *bin++ = fromhex (hex[0]) * 16 + fromhex (hex[1]); + hex += 2; + } + return i; +} + +/* See rsp-low.h. */ + +gdb::byte_vector +hex2bin (const char *hex) +{ + size_t bin_len = strlen (hex) / 2; + gdb::byte_vector bin (bin_len); + + hex2bin (hex, bin.data (), bin_len); + + return bin; +} + +/* See rsp-low.h. */ + +std::string +hex2str (const char *hex) +{ + return hex2str (hex, strlen (hex)); +} + +/* See rsp-low.h. */ + +std::string +hex2str (const char *hex, int count) +{ + std::string ret; + + ret.reserve (count); + for (size_t i = 0; i < count; ++i) + { + if (hex[0] == '\0' || hex[1] == '\0') + { + /* Hex string is short, or of uneven length. Return what we + have so far. */ + return ret; + } + ret += fromhex (hex[0]) * 16 + fromhex (hex[1]); + hex += 2; + } + + return ret; +} + +/* See rsp-low.h. */ + +int +bin2hex (const gdb_byte *bin, char *hex, int count) +{ + int i; + + for (i = 0; i < count; i++) + { + *hex++ = tohex ((*bin >> 4) & 0xf); + *hex++ = tohex (*bin++ & 0xf); + } + *hex = 0; + return i; +} + +/* See rsp-low.h. */ + +std::string +bin2hex (const gdb_byte *bin, int count) +{ + std::string ret; + + ret.reserve (count * 2); + for (int i = 0; i < count; ++i) + { + ret += tohex ((*bin >> 4) & 0xf); + ret += tohex (*bin++ & 0xf); + } + + return ret; +} + +/* Return whether byte B needs escaping when sent as part of binary data. */ + +static int +needs_escaping (gdb_byte b) +{ + return b == '$' || b == '#' || b == '}' || b == '*'; +} + +/* See rsp-low.h. */ + +int +remote_escape_output (const gdb_byte *buffer, int len_units, int unit_size, + gdb_byte *out_buf, int *out_len_units, + int out_maxlen_bytes) +{ + int input_unit_index, output_byte_index = 0, byte_index_in_unit; + int number_escape_bytes_needed; + + /* Try to copy integral addressable memory units until + (1) we run out of space or + (2) we copied all of them. */ + for (input_unit_index = 0; + input_unit_index < len_units; + input_unit_index++) + { + /* Find out how many escape bytes we need for this unit. */ + number_escape_bytes_needed = 0; + for (byte_index_in_unit = 0; + byte_index_in_unit < unit_size; + byte_index_in_unit++) + { + int idx = input_unit_index * unit_size + byte_index_in_unit; + gdb_byte b = buffer[idx]; + if (needs_escaping (b)) + number_escape_bytes_needed++; + } + + /* Check if we have room to fit this escaped unit. */ + if (output_byte_index + unit_size + number_escape_bytes_needed > + out_maxlen_bytes) + break; + + /* Copy the unit byte per byte, adding escapes. */ + for (byte_index_in_unit = 0; + byte_index_in_unit < unit_size; + byte_index_in_unit++) + { + int idx = input_unit_index * unit_size + byte_index_in_unit; + gdb_byte b = buffer[idx]; + if (needs_escaping (b)) + { + out_buf[output_byte_index++] = '}'; + out_buf[output_byte_index++] = b ^ 0x20; + } + else + out_buf[output_byte_index++] = b; + } + } + + *out_len_units = input_unit_index; + return output_byte_index; +} + +/* See rsp-low.h. */ + +int +remote_unescape_input (const gdb_byte *buffer, int len, + gdb_byte *out_buf, int out_maxlen) +{ + int input_index, output_index; + int escaped; + + output_index = 0; + escaped = 0; + for (input_index = 0; input_index < len; input_index++) + { + gdb_byte b = buffer[input_index]; + + if (output_index + 1 > out_maxlen) + error (_("Received too much data from the target.")); + + if (escaped) + { + out_buf[output_index++] = b ^ 0x20; + escaped = 0; + } + else if (b == '}') + escaped = 1; + else + out_buf[output_index++] = b; + } + + if (escaped) + error (_("Unmatched escape character in target response.")); + + return output_index; +} + diff -Nru gdb-9.1/gdbsupport/rsp-low.h gdb-10.2/gdbsupport/rsp-low.h --- gdb-9.1/gdbsupport/rsp-low.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/rsp-low.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,101 @@ +/* Low-level RSP routines for GDB, the GNU debugger. + + Copyright (C) 1988-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef COMMON_RSP_LOW_H +#define COMMON_RSP_LOW_H + +#include "gdbsupport/byte-vector.h" + +/* Convert hex digit A to a number, or throw an exception. */ + +extern int fromhex (int a); + +/* Convert number NIB to a hex digit. */ + +extern int tohex (int nib); + +/* Write a character representing the low order four bits of NIBBLE in + hex to *BUF. Returns BUF+1. */ + +extern char *pack_nibble (char *buf, int nibble); + +/* Write the low byte of BYTE in hex to *BUF. Returns BUF+2. */ + +extern char *pack_hex_byte (char *pkt, int byte); + +/* Read hex digits from BUFF and convert to a number, which is stored + in RESULT. Reads until a non-hex digit is seen. Returns a pointer + to the terminating character. */ + +extern const char *unpack_varlen_hex (const char *buff, ULONGEST *result); + +/* HEX is a string of characters representing hexadecimal digits. + Convert pairs of hex digits to bytes and store sequentially into + BIN. COUNT is the maximum number of characters to convert. This + will convert fewer characters if the number of hex characters + actually seen is odd, or if HEX terminates before COUNT characters. + Returns the number of characters actually converted. */ + +extern int hex2bin (const char *hex, gdb_byte *bin, int count); + +/* Like the above, but return a gdb::byte_vector. */ + +gdb::byte_vector hex2bin (const char *hex); + +/* Like hex2bin, but return a std::string. */ + +extern std::string hex2str (const char *hex); + +/* Like hex2bin, but return a std::string. */ + +extern std::string hex2str (const char *hex, int count); + +/* Convert some bytes to a hexadecimal representation. BIN holds the + bytes to convert. COUNT says how many bytes to convert. The + resulting characters are stored in HEX, followed by a NUL + character. Returns the number of bytes actually converted. */ + +extern int bin2hex (const gdb_byte *bin, char *hex, int count); + +/* Overloaded version of bin2hex that returns a std::string. */ + +extern std::string bin2hex (const gdb_byte *bin, int count); + +/* Convert BUFFER, binary data at least LEN_UNITS addressable memory units + long, into escaped binary data in OUT_BUF. Only copy memory units that fit + completely in OUT_BUF. Set *OUT_LEN_UNITS to the number of units from + BUFFER successfully encoded in OUT_BUF, and return the number of bytes used + in OUT_BUF. The total number of bytes in the output buffer will be at most + OUT_MAXLEN_BYTES. This function properly escapes '*', and so is suitable + for the server side as well as the client. */ + +extern int remote_escape_output (const gdb_byte *buffer, int len_units, + int unit_size, gdb_byte *out_buf, + int *out_len_units, int out_maxlen_bytes); + +/* Convert BUFFER, escaped data LEN bytes long, into binary data + in OUT_BUF. Return the number of bytes written to OUT_BUF. + Raise an error if the total number of bytes exceeds OUT_MAXLEN. + + This function reverses remote_escape_output. */ + +extern int remote_unescape_input (const gdb_byte *buffer, int len, + gdb_byte *out_buf, int out_maxlen); + +#endif /* COMMON_RSP_LOW_H */ diff -Nru gdb-9.1/gdbsupport/run-time-clock.cc gdb-10.2/gdbsupport/run-time-clock.cc --- gdb-9.1/gdbsupport/run-time-clock.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/run-time-clock.cc 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,58 @@ +/* User/system CPU time clocks that follow the std::chrono interface. + Copyright (C) 2016-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "common-defs.h" +#include "run-time-clock.h" +#if defined HAVE_SYS_RESOURCE_H +#include <sys/resource.h> +#endif + +using namespace std::chrono; + +run_time_clock::time_point +run_time_clock::now () noexcept +{ + return time_point (microseconds (get_run_time ())); +} + +#ifdef HAVE_GETRUSAGE +static std::chrono::microseconds +timeval_to_microseconds (struct timeval *tv) +{ + return (seconds (tv->tv_sec) + microseconds (tv->tv_usec)); +} +#endif + +void +run_time_clock::now (user_cpu_time_clock::time_point &user, + system_cpu_time_clock::time_point &system) noexcept +{ +#ifdef HAVE_GETRUSAGE + struct rusage rusage; + + getrusage (RUSAGE_SELF, &rusage); + + microseconds utime = timeval_to_microseconds (&rusage.ru_utime); + microseconds stime = timeval_to_microseconds (&rusage.ru_stime); + user = user_cpu_time_clock::time_point (utime); + system = system_cpu_time_clock::time_point (stime); +#else + user = user_cpu_time_clock::time_point (microseconds (get_run_time ())); + system = system_cpu_time_clock::time_point (microseconds::zero ()); +#endif +} diff -Nru gdb-9.1/gdbsupport/run-time-clock.h gdb-10.2/gdbsupport/run-time-clock.h --- gdb-9.1/gdbsupport/run-time-clock.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/run-time-clock.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,75 @@ +/* User/system CPU time clocks that follow the std::chrono interface. + Copyright (C) 2016-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef COMMON_RUN_TIME_CLOCK_H +#define COMMON_RUN_TIME_CLOCK_H + +#include <chrono> + +/* Count the total amount of time spent executing in user mode. */ + +struct user_cpu_time_clock +{ + using duration = std::chrono::microseconds; + using rep = duration::rep; + using period = duration::period; + using time_point = std::chrono::time_point<user_cpu_time_clock>; + + static constexpr bool is_steady = true; + + /* Use run_time_clock::now instead. */ + static time_point now () noexcept = delete; +}; + +/* Count the total amount of time spent executing in kernel mode. */ + +struct system_cpu_time_clock +{ + using duration = std::chrono::microseconds; + using rep = duration::rep; + using period = duration::period; + using time_point = std::chrono::time_point<system_cpu_time_clock>; + + static constexpr bool is_steady = true; + + /* Use run_time_clock::now instead. */ + static time_point now () noexcept = delete; +}; + +/* Count the total amount of time spent executing in userspace+kernel + mode. */ + +struct run_time_clock +{ + using duration = std::chrono::microseconds; + using rep = duration::rep; + using period = duration::period; + using time_point = std::chrono::time_point<run_time_clock>; + + static constexpr bool is_steady = true; + + static time_point now () noexcept; + + /* Return the user/system time as separate time points, if + supported. If not supported, then the combined user+kernel time + is returned in USER and SYSTEM is set to zero. */ + static void now (user_cpu_time_clock::time_point &user, + system_cpu_time_clock::time_point &system) noexcept; +}; + +#endif /* COMMON_RUN_TIME_CLOCK_H */ diff -Nru gdb-9.1/gdbsupport/safe-iterator.h gdb-10.2/gdbsupport/safe-iterator.h --- gdb-9.1/gdbsupport/safe-iterator.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/safe-iterator.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,135 @@ +/* A safe iterator for GDB, the GNU debugger. + Copyright (C) 2018-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef COMMON_SAFE_ITERATOR_H +#define COMMON_SAFE_ITERATOR_H + +/* A forward iterator that wraps Iterator, such that when iterating + with iterator IT, it is possible to delete *IT without invalidating + IT. Suitably wrapped in a range type and used with range-for, this + allow convenient patterns like this: + + // range_safe() returns a range type whose begin()/end() methods + // return safe iterators. + for (foo *f : range_safe ()) + { + if (f->should_delete ()) + { + // The ++it operation implicitly done by the range-for is + // still OK after this. + delete f; + } + } +*/ + +template<typename Iterator> +class basic_safe_iterator +{ +public: + typedef basic_safe_iterator self_type; + typedef typename Iterator::value_type value_type; + typedef typename Iterator::reference reference; + typedef typename Iterator::pointer pointer; + typedef typename Iterator::iterator_category iterator_category; + typedef typename Iterator::difference_type difference_type; + + /* Construct using the given argument; the end iterator is default + constructed. */ + template<typename Arg> + explicit basic_safe_iterator (Arg &&arg) + : m_it (std::forward<Arg> (arg)), + m_next (m_it) + { + if (m_it != m_end) + ++m_next; + } + + /* Construct the iterator using the first argument, and construct + the end iterator using the second argument. */ + template<typename Arg> + explicit basic_safe_iterator (Arg &&arg, Arg &&arg2) + : m_it (std::forward<Arg> (arg)), + m_next (m_it), + m_end (std::forward<Arg> (arg2)) + { + if (m_it != m_end) + ++m_next; + } + + /* Create a one-past-end iterator. */ + basic_safe_iterator () + {} + + value_type operator* () const { return *m_it; } + + self_type &operator++ () + { + m_it = m_next; + if (m_it != m_end) + ++m_next; + return *this; + } + + bool operator== (const self_type &other) const + { return m_it == other.m_it; } + + bool operator!= (const self_type &other) const + { return m_it != other.m_it; } + +private: + /* The current element. */ + Iterator m_it {}; + + /* The next element. Always one element ahead of M_IT. */ + Iterator m_next {}; + + /* A one-past-end iterator. */ + Iterator m_end {}; +}; + +/* A range adapter that wraps another range, and then returns safe + iterators wrapping the original range's iterators. */ + +template<typename Range> +class basic_safe_range +{ +public: + + typedef basic_safe_iterator<typename Range::iterator> iterator; + + explicit basic_safe_range (Range range) + : m_range (range) + { + } + + iterator begin () + { + return iterator (m_range.begin (), m_range.end ()); + } + + iterator end () + { + return iterator (m_range.end (), m_range.end ()); + } + +private: + + Range m_range; +}; + +#endif /* COMMON_SAFE_ITERATOR_H */ diff -Nru gdb-9.1/gdbsupport/safe-strerror.cc gdb-10.2/gdbsupport/safe-strerror.cc --- gdb-9.1/gdbsupport/safe-strerror.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/safe-strerror.cc 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,56 @@ +/* Safe version of strerror for GDB, the GNU debugger. + + Copyright (C) 2006-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "common-defs.h" +#include <string.h> + +/* There are two different versions of strerror_r; one is GNU-specific, the + other XSI-compliant. They differ in the return type. This overload lets + us choose the right behavior for each return type. We cannot rely on Gnulib + to solve this for us because IPA does not use Gnulib but uses this + function. */ + +/* Called if we have a XSI-compliant strerror_r. */ +ATTRIBUTE_UNUSED static char * +select_strerror_r (int res, char *buf) +{ + return res == 0 ? buf : nullptr; +} + +/* Called if we have a GNU strerror_r. */ +ATTRIBUTE_UNUSED static char * +select_strerror_r (char *res, char *) +{ + return res; +} + +/* Implementation of safe_strerror as defined in common-utils.h. */ + +const char * +safe_strerror (int errnum) +{ + static thread_local char buf[1024]; + + char *res = select_strerror_r (strerror_r (errnum, buf, sizeof (buf)), buf); + if (res != nullptr) + return res; + + xsnprintf (buf, sizeof buf, "(undocumented errno %d)", errnum); + return buf; +} diff -Nru gdb-9.1/gdbsupport/scoped_fd.h gdb-10.2/gdbsupport/scoped_fd.h --- gdb-9.1/gdbsupport/scoped_fd.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/scoped_fd.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,87 @@ +/* scoped_fd, automatically close a file descriptor + + Copyright (C) 2018-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef COMMON_SCOPED_FD_H +#define COMMON_SCOPED_FD_H + +#include <unistd.h> +#include "filestuff.h" + +/* A smart-pointer-like class to automatically close a file descriptor. */ + +class scoped_fd +{ +public: + explicit scoped_fd (int fd = -1) noexcept : m_fd (fd) {} + + scoped_fd (scoped_fd &&other) noexcept + : m_fd (other.m_fd) + { + other.m_fd = -1; + } + + ~scoped_fd () + { + if (m_fd >= 0) + close (m_fd); + } + + scoped_fd &operator= (scoped_fd &&other) + { + if (m_fd != other.m_fd) + { + if (m_fd >= 0) + close (m_fd); + m_fd = other.m_fd; + other.m_fd = -1; + } + return *this; + } + + DISABLE_COPY_AND_ASSIGN (scoped_fd); + + ATTRIBUTE_UNUSED_RESULT int release () noexcept + { + int fd = m_fd; + m_fd = -1; + return fd; + } + + /* Like release, but return a gdb_file_up that owns the file + descriptor. On success, this scoped_fd will be released. On + failure, return NULL and leave this scoped_fd in possession of + the fd. */ + gdb_file_up to_file (const char *mode) noexcept + { + gdb_file_up result (fdopen (m_fd, mode)); + if (result != nullptr) + m_fd = -1; + return result; + } + + int get () const noexcept + { + return m_fd; + } + +private: + int m_fd; +}; + +#endif /* COMMON_SCOPED_FD_H */ diff -Nru gdb-9.1/gdbsupport/scoped_mmap.cc gdb-10.2/gdbsupport/scoped_mmap.cc --- gdb-9.1/gdbsupport/scoped_mmap.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/scoped_mmap.cc 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,49 @@ +/* scoped_mmap, automatically unmap files + + Copyright (C) 2018-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "common-defs.h" +#include "scoped_mmap.h" +#include "scoped_fd.h" +#include "gdbsupport/filestuff.h" + +#ifdef HAVE_SYS_MMAN_H + +scoped_mmap +mmap_file (const char *filename) +{ + scoped_fd fd (gdb_open_cloexec (filename, O_RDONLY, 0)); + if (fd.get () < 0) + perror_with_name (("open")); + + off_t size = lseek (fd.get (), 0, SEEK_END); + if (size < 0) + perror_with_name (("lseek")); + + /* We can't map an empty file. */ + if (size == 0) + error (_("file to mmap is empty")); + + scoped_mmap mmapped_file (nullptr, size, PROT_READ, MAP_PRIVATE, fd.get (), 0); + if (mmapped_file.get () == MAP_FAILED) + perror_with_name (("mmap")); + + return mmapped_file; +} + +#endif /* HAVE_SYS_MMAN_H */ diff -Nru gdb-9.1/gdbsupport/scoped_mmap.h gdb-10.2/gdbsupport/scoped_mmap.h --- gdb-9.1/gdbsupport/scoped_mmap.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/scoped_mmap.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,91 @@ +/* scoped_mmap, automatically unmap files + + Copyright (C) 2018-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef COMMON_SCOPED_MMAP_H +#define COMMON_SCOPED_MMAP_H + +#ifdef HAVE_SYS_MMAN_H + +#include <sys/mman.h> + +/* A smart-pointer-like class to mmap() and automatically munmap() a memory + mapping. */ + +class scoped_mmap +{ +public: + scoped_mmap () noexcept : m_mem (MAP_FAILED), m_length (0) {} + scoped_mmap (void *addr, size_t length, int prot, int flags, int fd, + off_t offset) noexcept : m_length (length) + { + m_mem = mmap (addr, m_length, prot, flags, fd, offset); + } + + ~scoped_mmap () + { + destroy (); + } + + scoped_mmap (scoped_mmap &&rhs) noexcept + : m_mem (rhs.m_mem), + m_length (rhs.m_length) + { + rhs.m_mem = MAP_FAILED; + rhs.m_length = 0; + } + + DISABLE_COPY_AND_ASSIGN (scoped_mmap); + + ATTRIBUTE_UNUSED_RESULT void *release () noexcept + { + void *mem = m_mem; + m_mem = MAP_FAILED; + m_length = 0; + return mem; + } + + void reset (void *addr, size_t length, int prot, int flags, int fd, + off_t offset) noexcept + { + destroy (); + + m_length = length; + m_mem = mmap (addr, m_length, prot, flags, fd, offset); + } + + size_t size () const noexcept { return m_length; } + void *get () const noexcept { return m_mem; } + +private: + void destroy () + { + if (m_mem != MAP_FAILED) + munmap (m_mem, m_length); + } + + void *m_mem; + size_t m_length; +}; + +/* Map FILENAME in memory. Throw an error if anything goes wrong. */ +scoped_mmap mmap_file (const char *filename); + +#endif /* HAVE_SYS_MMAN_H */ + +#endif /* COMMON_SCOPED_MMAP_H */ diff -Nru gdb-9.1/gdbsupport/scoped_restore.h gdb-10.2/gdbsupport/scoped_restore.h --- gdb-9.1/gdbsupport/scoped_restore.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/scoped_restore.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,118 @@ +/* scoped_restore, a simple class for saving and restoring a value + + Copyright (C) 2016-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef COMMON_SCOPED_RESTORE_H +#define COMMON_SCOPED_RESTORE_H + +/* Base class for scoped_restore_tmpl. */ +class scoped_restore_base +{ +public: + /* This informs the (scoped_restore_tmpl<T>) dtor that you no longer + want the original value restored. */ + void release () const + { m_saved_var = NULL; } + +protected: + scoped_restore_base (void *saved_var) + : m_saved_var (saved_var) + {} + + /* The type-erased saved variable. This is here so that clients can + call release() on a "scoped_restore" local, which is a typedef to + a scoped_restore_base. See below. */ + mutable void *m_saved_var; +}; + +/* A convenience typedef. Users of make_scoped_restore declare the + local RAII object as having this type. */ +typedef const scoped_restore_base &scoped_restore; + +/* An RAII-based object that saves a variable's value, and then + restores it again when this object is destroyed. */ +template<typename T> +class scoped_restore_tmpl : public scoped_restore_base +{ + public: + + /* Create a new scoped_restore object that saves the current value + of *VAR. *VAR will be restored when this scoped_restore object + is destroyed. */ + scoped_restore_tmpl (T *var) + : scoped_restore_base (var), + m_saved_value (*var) + { + } + + /* Create a new scoped_restore object that saves the current value + of *VAR, and sets *VAR to VALUE. *VAR will be restored when this + scoped_restore object is destroyed. This is templated on T2 to + allow passing VALUEs of types convertible to T. + E.g.: T='base'; T2='derived'. */ + template <typename T2> + scoped_restore_tmpl (T *var, T2 value) + : scoped_restore_base (var), + m_saved_value (*var) + { + *var = value; + } + + scoped_restore_tmpl (const scoped_restore_tmpl<T> &other) + : scoped_restore_base {other.m_saved_var}, + m_saved_value (other.m_saved_value) + { + other.m_saved_var = NULL; + } + + ~scoped_restore_tmpl () + { + if (saved_var () != NULL) + *saved_var () = m_saved_value; + } + +private: + /* Return a pointer to the saved variable with its type + restored. */ + T *saved_var () + { return static_cast<T *> (m_saved_var); } + + /* No need for this. It is intentionally not defined anywhere. */ + scoped_restore_tmpl &operator= (const scoped_restore_tmpl &); + + /* The saved value. */ + const T m_saved_value; +}; + +/* Make a scoped_restore. This is useful because it lets template + argument deduction work. */ +template<typename T> +scoped_restore_tmpl<T> make_scoped_restore (T *var) +{ + return scoped_restore_tmpl<T> (var); +} + +/* Make a scoped_restore. This is useful because it lets template + argument deduction work. */ +template<typename T, typename T2> +scoped_restore_tmpl<T> make_scoped_restore (T *var, T2 value) +{ + return scoped_restore_tmpl<T> (var, value); +} + +#endif /* COMMON_SCOPED_RESTORE_H */ diff -Nru gdb-9.1/gdbsupport/scope-exit.h gdb-10.2/gdbsupport/scope-exit.h --- gdb-9.1/gdbsupport/scope-exit.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/scope-exit.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,186 @@ +/* Copyright (C) 2019-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef COMMON_SCOPE_EXIT_H +#define COMMON_SCOPE_EXIT_H + +#include <functional> +#include <type_traits> +#include "gdbsupport/preprocessor.h" + +/* scope_exit is a general-purpose scope guard that calls its exit + function at the end of the current scope. A scope_exit may be + canceled by calling the "release" method. The API is modeled on + P0052R5 - Generic Scope Guard and RAII Wrapper for the Standard + Library, which is itself based on Andrej Alexandrescu's + ScopeGuard/SCOPE_EXIT. + + There are two forms available: + + - The "make_scope_exit" form allows canceling the scope guard. Use + it like this: + + auto cleanup = make_scope_exit ( <function, function object, lambda> ); + ... + cleanup.release (); // cancel + + - If you don't need to cancel the guard, you can use the SCOPE_EXIT + macro, like this: + + SCOPE_EXIT + { + // any code you like here. + } + + See also forward_scope_exit. +*/ + +/* CRTP base class for cancelable scope_exit-like classes. Implements + the common call-custom-function-from-dtor functionality. Classes + that inherit this implement the on_exit() method, which is called + from scope_exit_base's dtor. */ + +template <typename CRTP> +class scope_exit_base +{ +public: + scope_exit_base () = default; + + ~scope_exit_base () + { + if (!m_released) + { + auto *self = static_cast<CRTP *> (this); + self->on_exit (); + } + } + + /* This is needed for make_scope_exit because copy elision isn't + guaranteed until C++17. An optimizing compiler will usually skip + calling this, but it must exist. */ + scope_exit_base (const scope_exit_base &other) + : m_released (other.m_released) + { + other.m_released = true; + } + + void operator= (const scope_exit_base &) = delete; + + /* If this is called, then the wrapped function will not be called + on destruction. */ + void release () noexcept + { + m_released = true; + } + +private: + + /* True if released. Mutable because of the copy ctor hack + above. */ + mutable bool m_released = false; +}; + +/* The scope_exit class. */ + +template<typename EF> +class scope_exit : public scope_exit_base<scope_exit<EF>> +{ + /* For access to on_exit(). */ + friend scope_exit_base<scope_exit<EF>>; + +public: + + template<typename EFP, + typename = gdb::Requires<std::is_constructible<EF, EFP>>> + scope_exit (EFP &&f) + try : m_exit_function ((!std::is_lvalue_reference<EFP>::value + && std::is_nothrow_constructible<EF, EFP>::value) + ? std::move (f) + : f) + { + } + catch (...) + { + /* "If the initialization of exit_function throws an exception, + calls f()." */ + f (); + } + + template<typename EFP, + typename = gdb::Requires<std::is_constructible<EF, EFP>>> + scope_exit (scope_exit &&rhs) + noexcept (std::is_nothrow_move_constructible<EF>::value + || std::is_nothrow_copy_constructible<EF>::value) + : m_exit_function (std::is_nothrow_constructible<EFP>::value + ? std::move (rhs) + : rhs) + { + rhs.release (); + } + + /* This is needed for make_scope_exit because copy elision isn't + guaranteed until C++17. An optimizing compiler will usually skip + calling this, but it must exist. */ + scope_exit (const scope_exit &other) + : scope_exit_base<scope_exit<EF>> (other), + m_exit_function (other.m_exit_function) + { + } + + void operator= (const scope_exit &) = delete; + void operator= (scope_exit &&) = delete; + +private: + void on_exit () + { + m_exit_function (); + } + + /* The function to call on scope exit. */ + EF m_exit_function; +}; + +template <typename EF> +scope_exit<typename std::decay<EF>::type> +make_scope_exit (EF &&f) +{ + return scope_exit<typename std::decay<EF>::type> (std::forward<EF> (f)); +} + +namespace detail +{ + +enum class scope_exit_lhs {}; + +template<typename EF> +scope_exit<typename std::decay<EF>::type> +operator+ (scope_exit_lhs, EF &&rhs) +{ + return scope_exit<typename std::decay<EF>::type> (std::forward<EF> (rhs)); +} + +} + +/* Register a block of code to run on scope exit. Note that the local + context is captured by reference, which means you should be careful + to avoid inadvertently changing a captured local's value before the + scope exit runs. */ + +#define SCOPE_EXIT \ + auto CONCAT(scope_exit_, __LINE__) = ::detail::scope_exit_lhs () + [&] () + +#endif /* COMMON_SCOPE_EXIT_H */ diff -Nru gdb-9.1/gdbsupport/selftest.cc gdb-10.2/gdbsupport/selftest.cc --- gdb-9.1/gdbsupport/selftest.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/selftest.cc 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,122 @@ +/* GDB self-testing. + Copyright (C) 2016-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "common-defs.h" +#include "common-exceptions.h" +#include "common-debug.h" +#include "selftest.h" +#include <map> + +namespace selftests +{ +/* All the tests that have been registered. Using an std::map allows keeping + the order of tests stable and easily looking up whether a test name + exists. */ + +static std::map<std::string, std::unique_ptr<selftest>> tests; + +/* A selftest that calls the test function without arguments. */ + +struct simple_selftest : public selftest +{ + simple_selftest (self_test_function *function_) + : function (function_) + {} + + void operator() () const override + { + function (); + } + + self_test_function *function; +}; + +/* See selftest.h. */ + +void +register_test (const std::string &name, selftest *test) +{ + /* Check that no test with this name already exist. */ + gdb_assert (tests.find (name) == tests.end ()); + + tests[name] = std::unique_ptr<selftest> (test); +} + +/* See selftest.h. */ + +void +register_test (const std::string &name, self_test_function *function) +{ + register_test (name, new simple_selftest (function)); +} + +/* See selftest.h. */ + +void +run_tests (gdb::array_view<const char *const> filters) +{ + int ran = 0, failed = 0; + + for (const auto &pair : tests) + { + const std::string &name = pair.first; + const std::unique_ptr<selftest> &test = pair.second; + bool run = false; + + if (filters.empty ()) + run = true; + else + { + for (const char *filter : filters) + { + if (name.find (filter) != std::string::npos) + run = true; + } + } + + if (!run) + continue; + + try + { + debug_printf (_("Running selftest %s.\n"), name.c_str ()); + ++ran; + (*test) (); + } + catch (const gdb_exception_error &ex) + { + ++failed; + debug_printf ("Self test failed: %s\n", ex.what ()); + } + + reset (); + } + + debug_printf (_("Ran %d unit tests, %d failed\n"), + ran, failed); +} + +/* See selftest.h. */ + +void for_each_selftest (for_each_selftest_ftype func) +{ + for (const auto &pair : tests) + func (pair.first); +} + +} // namespace selftests diff -Nru gdb-9.1/gdbsupport/selftest.h gdb-10.2/gdbsupport/selftest.h --- gdb-9.1/gdbsupport/selftest.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/selftest.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,75 @@ +/* GDB self-testing. + Copyright (C) 2016-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef COMMON_SELFTEST_H +#define COMMON_SELFTEST_H + +#include "gdbsupport/array-view.h" + +/* A test is just a function that does some checks and throws an + exception if something has gone wrong. */ + +typedef void self_test_function (void); + +namespace selftests +{ + +/* Interface for the various kinds of selftests. */ + +struct selftest +{ + virtual ~selftest () = default; + virtual void operator() () const = 0; +}; + +/* Register a new self-test. */ + +extern void register_test (const std::string &name, selftest *test); + +/* Register a new self-test. */ + +extern void register_test (const std::string &name, + self_test_function *function); + +/* Run all the self tests. This print a message describing the number + of test and the number of failures. + + If FILTERS is not empty, only run tests with names containing one of the + element of FILTERS. */ + +extern void run_tests (gdb::array_view<const char *const> filters); + +/* Reset GDB or GDBserver's internal state. */ +extern void reset (); + +typedef void for_each_selftest_ftype (const std::string &name); + +/* Call FUNC for each registered selftest. */ + +extern void for_each_selftest (for_each_selftest_ftype func); +} + +/* Check that VALUE is true, and, if not, throw an exception. */ + +#define SELF_CHECK(VALUE) \ + do { \ + if (!(VALUE)) \ + error (_("self-test failed at %s:%d"), __FILE__, __LINE__); \ + } while (0) + +#endif /* COMMON_SELFTEST_H */ diff -Nru gdb-9.1/gdbsupport/selftest.m4 gdb-10.2/gdbsupport/selftest.m4 --- gdb-9.1/gdbsupport/selftest.m4 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/selftest.m4 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,50 @@ +dnl Copyright (C) 2018-2021 Free Software Foundation, Inc. +dnl +dnl This file is part of GDB. +dnl +dnl This program is free software; you can redistribute it and/or modify +dnl it under the terms of the GNU General Public License as published by +dnl the Free Software Foundation; either version 3 of the License, or +dnl (at your option) any later version. +dnl +dnl This program is distributed in the hope that it will be useful, +dnl but WITHOUT ANY WARRANTY; without even the implied warranty of +dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +dnl GNU General Public License for more details. +dnl +dnl You should have received a copy of the GNU General Public License +dnl along with this program. If not, see <http://www.gnu.org/licenses/>. + +dnl GDB_AC_SELFTEST(ACTION-IF-ENABLED) +dnl +dnl Enable the unit/self tests if needed. If they are enabled, AC_DEFINE +dnl the GDB_SELF_TEST macro, and execute ACTION-IF-ENABLED. + +AC_DEFUN([GDB_AC_SELFTEST],[ +# Check whether we will enable the inclusion of unit tests when +# compiling GDB. +# +# The default value of this option changes depending whether we're on +# development mode (in which case it's "true") or not (in which case +# it's "false"). The $development variable is set by the GDB_AC_COMMON +# macro, which must therefore be used before GDB_AC_SELFTEST. + +AS_IF([test "x$development" != xtrue && test "x$development" != xfalse], + [AC_MSG_ERROR([Invalid value for \$development, got "$development", expecting "true" or "false".])]) + +AC_ARG_ENABLE(unit-tests, +AS_HELP_STRING([--enable-unit-tests], +[Enable the inclusion of unit tests when compiling GDB]), +[case "${enableval}" in + yes) enable_unittests=true ;; + no) enable_unittests=false ;; + *) AC_MSG_ERROR( +[bad value ${enableval} for --{enable,disable}-unit-tests option]) ;; +esac], [enable_unittests=$development]) + +if $enable_unittests; then + AC_DEFINE(GDB_SELF_TEST, 1, + [Define if self-testing features should be enabled]) + $1 +fi +]) diff -Nru gdb-9.1/gdbsupport/signals.cc gdb-10.2/gdbsupport/signals.cc --- gdb-9.1/gdbsupport/signals.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/signals.cc 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,653 @@ +/* Target signal translation functions for GDB. + Copyright (C) 1990-2021 Free Software Foundation, Inc. + Contributed by Cygnus Support. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "common-defs.h" + +#ifdef HAVE_SIGNAL_H +#include <signal.h> +#endif + +#include "gdb_signals.h" + +struct gdbarch; + +/* Always use __SIGRTMIN if it's available. SIGRTMIN is the lowest + _available_ realtime signal, not the lowest supported; glibc takes + several for its own use. */ + +#ifndef REALTIME_LO +# if defined(__SIGRTMIN) +# define REALTIME_LO __SIGRTMIN +# define REALTIME_HI (__SIGRTMAX + 1) +# elif defined(SIGRTMIN) +# define REALTIME_LO SIGRTMIN +# define REALTIME_HI (SIGRTMAX + 1) +# endif +#endif + +/* This table must match in order and size the signals in enum + gdb_signal. */ + +static const struct { + const char *symbol; + const char *name; + const char *string; + } signals [] = +{ +#define SET(symbol, constant, name, string) { #symbol, name, string }, +#include "gdb/signals.def" +#undef SET +}; + +const char * +gdb_signal_to_symbol_string (enum gdb_signal sig) +{ + gdb_assert ((int) sig >= GDB_SIGNAL_FIRST && (int) sig <= GDB_SIGNAL_LAST); + + return signals[sig].symbol; +} + +/* Return the string for a signal. */ +const char * +gdb_signal_to_string (enum gdb_signal sig) +{ + if ((int) sig >= GDB_SIGNAL_FIRST && (int) sig <= GDB_SIGNAL_LAST) + return signals[sig].string; + else + return signals[GDB_SIGNAL_UNKNOWN].string; +} + +/* Return the name for a signal. */ +const char * +gdb_signal_to_name (enum gdb_signal sig) +{ + if ((int) sig >= GDB_SIGNAL_FIRST && (int) sig <= GDB_SIGNAL_LAST + && signals[sig].name != NULL) + return signals[sig].name; + else + /* I think the code which prints this will always print it along + with the string, so no need to be verbose (very old comment). */ + return "?"; +} + +/* Given a name, return its signal. */ +enum gdb_signal +gdb_signal_from_name (const char *name) +{ + enum gdb_signal sig; + + /* It's possible we also should allow "SIGCLD" as well as "SIGCHLD" + for GDB_SIGNAL_SIGCHLD. SIGIOT, on the other hand, is more + questionable; seems like by now people should call it SIGABRT + instead. */ + + /* This ugly cast brought to you by the native VAX compiler. */ + for (sig = GDB_SIGNAL_HUP; + sig < GDB_SIGNAL_LAST; + sig = (enum gdb_signal) ((int) sig + 1)) + if (signals[sig].name != NULL + && strcmp (name, signals[sig].name) == 0) + return sig; + return GDB_SIGNAL_UNKNOWN; +} + +/* The following functions are to help certain targets deal + with the signal/waitstatus stuff. They could just as well be in + a file called native-utils.c or unixwaitstatus-utils.c or whatever. */ + +/* Convert host signal to our signals. */ +enum gdb_signal +gdb_signal_from_host (int hostsig) +{ + /* A switch statement would make sense but would require special + kludges to deal with the cases where more than one signal has the + same number. Signals are ordered ANSI-standard signals first, + other signals second, with signals in each block ordered by their + numerical values on a typical POSIX platform. */ + + if (hostsig == 0) + return GDB_SIGNAL_0; + + /* SIGINT, SIGILL, SIGABRT, SIGFPE, SIGSEGV and SIGTERM + are ANSI-standard signals and are always available. */ + if (hostsig == SIGINT) + return GDB_SIGNAL_INT; + if (hostsig == SIGILL) + return GDB_SIGNAL_ILL; + if (hostsig == SIGABRT) + return GDB_SIGNAL_ABRT; + if (hostsig == SIGFPE) + return GDB_SIGNAL_FPE; + if (hostsig == SIGSEGV) + return GDB_SIGNAL_SEGV; + if (hostsig == SIGTERM) + return GDB_SIGNAL_TERM; + + /* All other signals need preprocessor conditionals. */ +#if defined (SIGHUP) + if (hostsig == SIGHUP) + return GDB_SIGNAL_HUP; +#endif +#if defined (SIGQUIT) + if (hostsig == SIGQUIT) + return GDB_SIGNAL_QUIT; +#endif +#if defined (SIGTRAP) + if (hostsig == SIGTRAP) + return GDB_SIGNAL_TRAP; +#endif +#if defined (SIGEMT) + if (hostsig == SIGEMT) + return GDB_SIGNAL_EMT; +#endif +#if defined (SIGKILL) + if (hostsig == SIGKILL) + return GDB_SIGNAL_KILL; +#endif +#if defined (SIGBUS) + if (hostsig == SIGBUS) + return GDB_SIGNAL_BUS; +#endif +#if defined (SIGSYS) + if (hostsig == SIGSYS) + return GDB_SIGNAL_SYS; +#endif +#if defined (SIGPIPE) + if (hostsig == SIGPIPE) + return GDB_SIGNAL_PIPE; +#endif +#if defined (SIGALRM) + if (hostsig == SIGALRM) + return GDB_SIGNAL_ALRM; +#endif +#if defined (SIGUSR1) + if (hostsig == SIGUSR1) + return GDB_SIGNAL_USR1; +#endif +#if defined (SIGUSR2) + if (hostsig == SIGUSR2) + return GDB_SIGNAL_USR2; +#endif +#if defined (SIGCLD) + if (hostsig == SIGCLD) + return GDB_SIGNAL_CHLD; +#endif +#if defined (SIGCHLD) + if (hostsig == SIGCHLD) + return GDB_SIGNAL_CHLD; +#endif +#if defined (SIGPWR) + if (hostsig == SIGPWR) + return GDB_SIGNAL_PWR; +#endif +#if defined (SIGWINCH) + if (hostsig == SIGWINCH) + return GDB_SIGNAL_WINCH; +#endif +#if defined (SIGURG) + if (hostsig == SIGURG) + return GDB_SIGNAL_URG; +#endif +#if defined (SIGIO) + if (hostsig == SIGIO) + return GDB_SIGNAL_IO; +#endif +#if defined (SIGPOLL) + if (hostsig == SIGPOLL) + return GDB_SIGNAL_POLL; +#endif +#if defined (SIGSTOP) + if (hostsig == SIGSTOP) + return GDB_SIGNAL_STOP; +#endif +#if defined (SIGTSTP) + if (hostsig == SIGTSTP) + return GDB_SIGNAL_TSTP; +#endif +#if defined (SIGCONT) + if (hostsig == SIGCONT) + return GDB_SIGNAL_CONT; +#endif +#if defined (SIGTTIN) + if (hostsig == SIGTTIN) + return GDB_SIGNAL_TTIN; +#endif +#if defined (SIGTTOU) + if (hostsig == SIGTTOU) + return GDB_SIGNAL_TTOU; +#endif +#if defined (SIGVTALRM) + if (hostsig == SIGVTALRM) + return GDB_SIGNAL_VTALRM; +#endif +#if defined (SIGPROF) + if (hostsig == SIGPROF) + return GDB_SIGNAL_PROF; +#endif +#if defined (SIGXCPU) + if (hostsig == SIGXCPU) + return GDB_SIGNAL_XCPU; +#endif +#if defined (SIGXFSZ) + if (hostsig == SIGXFSZ) + return GDB_SIGNAL_XFSZ; +#endif +#if defined (SIGWIND) + if (hostsig == SIGWIND) + return GDB_SIGNAL_WIND; +#endif +#if defined (SIGPHONE) + if (hostsig == SIGPHONE) + return GDB_SIGNAL_PHONE; +#endif +#if defined (SIGLOST) + if (hostsig == SIGLOST) + return GDB_SIGNAL_LOST; +#endif +#if defined (SIGWAITING) + if (hostsig == SIGWAITING) + return GDB_SIGNAL_WAITING; +#endif +#if defined (SIGCANCEL) + if (hostsig == SIGCANCEL) + return GDB_SIGNAL_CANCEL; +#endif +#if defined (SIGLWP) + if (hostsig == SIGLWP) + return GDB_SIGNAL_LWP; +#endif +#if defined (SIGDANGER) + if (hostsig == SIGDANGER) + return GDB_SIGNAL_DANGER; +#endif +#if defined (SIGGRANT) + if (hostsig == SIGGRANT) + return GDB_SIGNAL_GRANT; +#endif +#if defined (SIGRETRACT) + if (hostsig == SIGRETRACT) + return GDB_SIGNAL_RETRACT; +#endif +#if defined (SIGMSG) + if (hostsig == SIGMSG) + return GDB_SIGNAL_MSG; +#endif +#if defined (SIGSOUND) + if (hostsig == SIGSOUND) + return GDB_SIGNAL_SOUND; +#endif +#if defined (SIGSAK) + if (hostsig == SIGSAK) + return GDB_SIGNAL_SAK; +#endif +#if defined (SIGPRIO) + if (hostsig == SIGPRIO) + return GDB_SIGNAL_PRIO; +#endif + + /* Mach exceptions. Assumes that the values for EXC_ are positive! */ +#if defined (EXC_BAD_ACCESS) && defined (_NSIG) + if (hostsig == _NSIG + EXC_BAD_ACCESS) + return GDB_EXC_BAD_ACCESS; +#endif +#if defined (EXC_BAD_INSTRUCTION) && defined (_NSIG) + if (hostsig == _NSIG + EXC_BAD_INSTRUCTION) + return GDB_EXC_BAD_INSTRUCTION; +#endif +#if defined (EXC_ARITHMETIC) && defined (_NSIG) + if (hostsig == _NSIG + EXC_ARITHMETIC) + return GDB_EXC_ARITHMETIC; +#endif +#if defined (EXC_EMULATION) && defined (_NSIG) + if (hostsig == _NSIG + EXC_EMULATION) + return GDB_EXC_EMULATION; +#endif +#if defined (EXC_SOFTWARE) && defined (_NSIG) + if (hostsig == _NSIG + EXC_SOFTWARE) + return GDB_EXC_SOFTWARE; +#endif +#if defined (EXC_BREAKPOINT) && defined (_NSIG) + if (hostsig == _NSIG + EXC_BREAKPOINT) + return GDB_EXC_BREAKPOINT; +#endif + +#if defined (SIGINFO) + if (hostsig == SIGINFO) + return GDB_SIGNAL_INFO; +#endif +#if defined (SIGLIBRT) + if (hostsig == SIGLIBRT) + return GDB_SIGNAL_LIBRT; +#endif + +#if defined (REALTIME_LO) + if (hostsig >= REALTIME_LO && hostsig < REALTIME_HI) + { + /* This block of GDB_SIGNAL_REALTIME value is in order. */ + if (33 <= hostsig && hostsig <= 63) + return (enum gdb_signal) + (hostsig - 33 + (int) GDB_SIGNAL_REALTIME_33); + else if (hostsig == 32) + return GDB_SIGNAL_REALTIME_32; + else if (64 <= hostsig && hostsig <= 127) + return (enum gdb_signal) + (hostsig - 64 + (int) GDB_SIGNAL_REALTIME_64); + else + error (_("GDB bug: target.c (gdb_signal_from_host): " + "unrecognized real-time signal")); + } +#endif + + return GDB_SIGNAL_UNKNOWN; +} + +/* Convert a OURSIG (an enum gdb_signal) to the form used by the + target operating system (refered to as the ``host'') or zero if the + equivalent host signal is not available. Set/clear OURSIG_OK + accordingly. */ + +static int +do_gdb_signal_to_host (enum gdb_signal oursig, + int *oursig_ok) +{ + int retsig; + /* Silence the 'not used' warning, for targets that + do not support signals. */ + (void) retsig; + + /* Signals are ordered ANSI-standard signals first, other signals + second, with signals in each block ordered by their numerical + values on a typical POSIX platform. */ + + *oursig_ok = 1; + switch (oursig) + { + case GDB_SIGNAL_0: + return 0; + + /* SIGINT, SIGILL, SIGABRT, SIGFPE, SIGSEGV and SIGTERM + are ANSI-standard signals and are always available. */ + case GDB_SIGNAL_INT: + return SIGINT; + case GDB_SIGNAL_ILL: + return SIGILL; + case GDB_SIGNAL_ABRT: + return SIGABRT; + case GDB_SIGNAL_FPE: + return SIGFPE; + case GDB_SIGNAL_SEGV: + return SIGSEGV; + case GDB_SIGNAL_TERM: + return SIGTERM; + + /* All other signals need preprocessor conditionals. */ +#if defined (SIGHUP) + case GDB_SIGNAL_HUP: + return SIGHUP; +#endif +#if defined (SIGQUIT) + case GDB_SIGNAL_QUIT: + return SIGQUIT; +#endif +#if defined (SIGTRAP) + case GDB_SIGNAL_TRAP: + return SIGTRAP; +#endif +#if defined (SIGEMT) + case GDB_SIGNAL_EMT: + return SIGEMT; +#endif +#if defined (SIGKILL) + case GDB_SIGNAL_KILL: + return SIGKILL; +#endif +#if defined (SIGBUS) + case GDB_SIGNAL_BUS: + return SIGBUS; +#endif +#if defined (SIGSYS) + case GDB_SIGNAL_SYS: + return SIGSYS; +#endif +#if defined (SIGPIPE) + case GDB_SIGNAL_PIPE: + return SIGPIPE; +#endif +#if defined (SIGALRM) + case GDB_SIGNAL_ALRM: + return SIGALRM; +#endif +#if defined (SIGUSR1) + case GDB_SIGNAL_USR1: + return SIGUSR1; +#endif +#if defined (SIGUSR2) + case GDB_SIGNAL_USR2: + return SIGUSR2; +#endif +#if defined (SIGCHLD) || defined (SIGCLD) + case GDB_SIGNAL_CHLD: +#if defined (SIGCHLD) + return SIGCHLD; +#else + return SIGCLD; +#endif +#endif /* SIGCLD or SIGCHLD */ +#if defined (SIGPWR) + case GDB_SIGNAL_PWR: + return SIGPWR; +#endif +#if defined (SIGWINCH) + case GDB_SIGNAL_WINCH: + return SIGWINCH; +#endif +#if defined (SIGURG) + case GDB_SIGNAL_URG: + return SIGURG; +#endif +#if defined (SIGIO) + case GDB_SIGNAL_IO: + return SIGIO; +#endif +#if defined (SIGPOLL) + case GDB_SIGNAL_POLL: + return SIGPOLL; +#endif +#if defined (SIGSTOP) + case GDB_SIGNAL_STOP: + return SIGSTOP; +#endif +#if defined (SIGTSTP) + case GDB_SIGNAL_TSTP: + return SIGTSTP; +#endif +#if defined (SIGCONT) + case GDB_SIGNAL_CONT: + return SIGCONT; +#endif +#if defined (SIGTTIN) + case GDB_SIGNAL_TTIN: + return SIGTTIN; +#endif +#if defined (SIGTTOU) + case GDB_SIGNAL_TTOU: + return SIGTTOU; +#endif +#if defined (SIGVTALRM) + case GDB_SIGNAL_VTALRM: + return SIGVTALRM; +#endif +#if defined (SIGPROF) + case GDB_SIGNAL_PROF: + return SIGPROF; +#endif +#if defined (SIGXCPU) + case GDB_SIGNAL_XCPU: + return SIGXCPU; +#endif +#if defined (SIGXFSZ) + case GDB_SIGNAL_XFSZ: + return SIGXFSZ; +#endif +#if defined (SIGWIND) + case GDB_SIGNAL_WIND: + return SIGWIND; +#endif +#if defined (SIGPHONE) + case GDB_SIGNAL_PHONE: + return SIGPHONE; +#endif +#if defined (SIGLOST) + case GDB_SIGNAL_LOST: + return SIGLOST; +#endif +#if defined (SIGWAITING) + case GDB_SIGNAL_WAITING: + return SIGWAITING; +#endif +#if defined (SIGCANCEL) + case GDB_SIGNAL_CANCEL: + return SIGCANCEL; +#endif +#if defined (SIGLWP) + case GDB_SIGNAL_LWP: + return SIGLWP; +#endif +#if defined (SIGDANGER) + case GDB_SIGNAL_DANGER: + return SIGDANGER; +#endif +#if defined (SIGGRANT) + case GDB_SIGNAL_GRANT: + return SIGGRANT; +#endif +#if defined (SIGRETRACT) + case GDB_SIGNAL_RETRACT: + return SIGRETRACT; +#endif +#if defined (SIGMSG) + case GDB_SIGNAL_MSG: + return SIGMSG; +#endif +#if defined (SIGSOUND) + case GDB_SIGNAL_SOUND: + return SIGSOUND; +#endif +#if defined (SIGSAK) + case GDB_SIGNAL_SAK: + return SIGSAK; +#endif +#if defined (SIGPRIO) + case GDB_SIGNAL_PRIO: + return SIGPRIO; +#endif + + /* Mach exceptions. Assumes that the values for EXC_ are positive! */ +#if defined (EXC_BAD_ACCESS) && defined (_NSIG) + case GDB_EXC_BAD_ACCESS: + return _NSIG + EXC_BAD_ACCESS; +#endif +#if defined (EXC_BAD_INSTRUCTION) && defined (_NSIG) + case GDB_EXC_BAD_INSTRUCTION: + return _NSIG + EXC_BAD_INSTRUCTION; +#endif +#if defined (EXC_ARITHMETIC) && defined (_NSIG) + case GDB_EXC_ARITHMETIC: + return _NSIG + EXC_ARITHMETIC; +#endif +#if defined (EXC_EMULATION) && defined (_NSIG) + case GDB_EXC_EMULATION: + return _NSIG + EXC_EMULATION; +#endif +#if defined (EXC_SOFTWARE) && defined (_NSIG) + case GDB_EXC_SOFTWARE: + return _NSIG + EXC_SOFTWARE; +#endif +#if defined (EXC_BREAKPOINT) && defined (_NSIG) + case GDB_EXC_BREAKPOINT: + return _NSIG + EXC_BREAKPOINT; +#endif + +#if defined (SIGINFO) + case GDB_SIGNAL_INFO: + return SIGINFO; +#endif +#if defined (SIGLIBRT) + case GDB_SIGNAL_LIBRT: + return SIGLIBRT; +#endif + + default: +#if defined (REALTIME_LO) + retsig = 0; + + if (oursig >= GDB_SIGNAL_REALTIME_33 + && oursig <= GDB_SIGNAL_REALTIME_63) + { + /* This block of signals is continuous, and + GDB_SIGNAL_REALTIME_33 is 33 by definition. */ + retsig = (int) oursig - (int) GDB_SIGNAL_REALTIME_33 + 33; + } + else if (oursig == GDB_SIGNAL_REALTIME_32) + { + /* GDB_SIGNAL_REALTIME_32 isn't contiguous with + GDB_SIGNAL_REALTIME_33. It is 32 by definition. */ + retsig = 32; + } + else if (oursig >= GDB_SIGNAL_REALTIME_64 + && oursig <= GDB_SIGNAL_REALTIME_127) + { + /* This block of signals is continuous, and + GDB_SIGNAL_REALTIME_64 is 64 by definition. */ + retsig = (int) oursig - (int) GDB_SIGNAL_REALTIME_64 + 64; + } + + if (retsig >= REALTIME_LO && retsig < REALTIME_HI) + return retsig; +#endif + + *oursig_ok = 0; + return 0; + } +} + +int +gdb_signal_to_host_p (enum gdb_signal oursig) +{ + int oursig_ok; + do_gdb_signal_to_host (oursig, &oursig_ok); + return oursig_ok; +} + +int +gdb_signal_to_host (enum gdb_signal oursig) +{ + int oursig_ok; + int targ_signo = do_gdb_signal_to_host (oursig, &oursig_ok); + if (!oursig_ok) + { + /* The user might be trying to do "signal SIGSAK" where this system + doesn't have SIGSAK. */ + warning (_("Signal %s does not exist on this system."), + gdb_signal_to_name (oursig)); + return 0; + } + else + return targ_signo; +} diff -Nru gdb-9.1/gdbsupport/signals-state-save-restore.cc gdb-10.2/gdbsupport/signals-state-save-restore.cc --- gdb-9.1/gdbsupport/signals-state-save-restore.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/signals-state-save-restore.cc 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,114 @@ +/* Copyright (C) 2016-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "common-defs.h" +#include "signals-state-save-restore.h" +#include "gdbsupport/gdb-sigmask.h" + +#include <signal.h> + +/* The original signal actions and mask. */ + +#ifdef HAVE_SIGACTION +static struct sigaction original_signal_actions[NSIG]; + +static sigset_t original_signal_mask; +#endif + +/* See signals-state-save-restore.h. */ + +void +save_original_signals_state (bool quiet) +{ +#ifdef HAVE_SIGACTION + int i; + int res; + + res = gdb_sigmask (0, NULL, &original_signal_mask); + if (res == -1) + perror_with_name (("sigprocmask")); + + bool found_preinstalled = false; + + for (i = 1; i < NSIG; i++) + { + struct sigaction *oldact = &original_signal_actions[i]; + + res = sigaction (i, NULL, oldact); + if (res == -1 && errno == EINVAL) + { + /* Some signal numbers in the range are invalid. */ + continue; + } + else if (res == -1) + perror_with_name (("sigaction")); + + /* If we find a custom signal handler already installed, then + this function was called too late. This is a warning instead + of an internal error because this can also happen if you + LD_PRELOAD a library that installs a signal handler early via + __attribute__((constructor)), like libSegFault.so. */ + if (!quiet + && oldact->sa_handler != SIG_DFL + && oldact->sa_handler != SIG_IGN) + { + found_preinstalled = true; + + /* Use raw fprintf here because we're being called in early + startup, before GDB's filtered streams are created. */ + fprintf (stderr, + _("warning: Found custom handler for signal " + "%d (%s) preinstalled.\n"), i, + strsignal (i)); + } + } + + if (found_preinstalled) + { + fprintf (stderr, _("\ +Some signal dispositions inherited from the environment (SIG_DFL/SIG_IGN)\n\ +won't be propagated to spawned programs.\n")); + } +#endif +} + +/* See signals-state-save-restore.h. */ + +void +restore_original_signals_state (void) +{ +#ifdef HAVE_SIGACTION + int i; + int res; + + for (i = 1; i < NSIG; i++) + { + res = sigaction (i, &original_signal_actions[i], NULL); + if (res == -1 && errno == EINVAL) + { + /* Some signal numbers in the range are invalid. */ + continue; + } + else if (res == -1) + perror_with_name (("sigaction")); + } + + res = gdb_sigmask (SIG_SETMASK, &original_signal_mask, NULL); + if (res == -1) + perror_with_name (("sigprocmask")); +#endif +} diff -Nru gdb-9.1/gdbsupport/signals-state-save-restore.h gdb-10.2/gdbsupport/signals-state-save-restore.h --- gdb-9.1/gdbsupport/signals-state-save-restore.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/signals-state-save-restore.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,40 @@ +/* Copyright (C) 2016-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef COMMON_SIGNALS_STATE_SAVE_RESTORE_H +#define COMMON_SIGNALS_STATE_SAVE_RESTORE_H + +/* Save/restore the signal actions of all signals, and the signal + mask. + + Since the exec family of functions does not reset the signal + disposition of signals set to SIG_IGN, nor does it reset the signal + mask, in order to be transparent, when spawning new child processes + to debug (with "run", etc.), we must reset signal actions and mask + back to what was originally inherited from gdb/gdbserver's parent, + just before execing the target program to debug. */ + +/* Save the signal state of all signals. If !QUIET, warn if we detect + a custom signal handler preinstalled. */ + +extern void save_original_signals_state (bool quiet); + +/* Restore the signal state of all signals. */ + +extern void restore_original_signals_state (void); + +#endif /* COMMON_SIGNALS_STATE_SAVE_RESTORE_H */ diff -Nru gdb-9.1/gdbsupport/symbol.h gdb-10.2/gdbsupport/symbol.h --- gdb-9.1/gdbsupport/symbol.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/symbol.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,37 @@ +/* Declarations of common symbol functions. + + Copyright (C) 2014-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef COMMON_SYMBOL_H +#define COMMON_SYMBOL_H + +struct objfile; + +/* Find a symbol that matches NAME. Limit the search to OBJFILE if + OBJFILE is non-NULL and the implementation supports limiting the + search to specific object files. NAME may be mangled or demangled. + If a match is found, store the matching symbol's address in ADDR + and return zero. Returns nonzero if no symbol matching NAME is + found. Raise an exception if OBJFILE is non-NULL and the + implementation does not support limiting searches to specific + object files. This function must be provided by the client. */ + +extern int find_minimal_symbol_address (const char *name, CORE_ADDR *addr, + struct objfile *objfile); + +#endif /* COMMON_SYMBOL_H */ diff -Nru gdb-9.1/gdbsupport/tdesc.cc gdb-10.2/gdbsupport/tdesc.cc --- gdb-9.1/gdbsupport/tdesc.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/tdesc.cc 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,448 @@ +/* Target description support for GDB. + + Copyright (C) 2018-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "common-defs.h" +#include "gdbsupport/tdesc.h" + +tdesc_reg::tdesc_reg (struct tdesc_feature *feature, const std::string &name_, + int regnum, int save_restore_, const char *group_, + int bitsize_, const char *type_) + : name (name_), target_regnum (regnum), + save_restore (save_restore_), + group (group_ != NULL ? group_ : ""), + bitsize (bitsize_), + type (type_ != NULL ? type_ : "<unknown>") +{ + /* If the register's type is target-defined, look it up now. We may not + have easy access to the containing feature when we want it later. */ + tdesc_type = tdesc_named_type (feature, type.c_str ()); +} + +/* Predefined types. */ +static tdesc_type_builtin tdesc_predefined_types[] = +{ + { "bool", TDESC_TYPE_BOOL }, + { "int8", TDESC_TYPE_INT8 }, + { "int16", TDESC_TYPE_INT16 }, + { "int32", TDESC_TYPE_INT32 }, + { "int64", TDESC_TYPE_INT64 }, + { "int128", TDESC_TYPE_INT128 }, + { "uint8", TDESC_TYPE_UINT8 }, + { "uint16", TDESC_TYPE_UINT16 }, + { "uint32", TDESC_TYPE_UINT32 }, + { "uint64", TDESC_TYPE_UINT64 }, + { "uint128", TDESC_TYPE_UINT128 }, + { "code_ptr", TDESC_TYPE_CODE_PTR }, + { "data_ptr", TDESC_TYPE_DATA_PTR }, + { "ieee_half", TDESC_TYPE_IEEE_HALF }, + { "ieee_single", TDESC_TYPE_IEEE_SINGLE }, + { "ieee_double", TDESC_TYPE_IEEE_DOUBLE }, + { "arm_fpa_ext", TDESC_TYPE_ARM_FPA_EXT }, + { "i387_ext", TDESC_TYPE_I387_EXT }, + { "bfloat16", TDESC_TYPE_BFLOAT16 } +}; + +void tdesc_feature::accept (tdesc_element_visitor &v) const +{ + v.visit_pre (this); + + for (const tdesc_type_up &type : types) + type->accept (v); + + for (const tdesc_reg_up ® : registers) + reg->accept (v); + + v.visit_post (this); +} + +bool tdesc_feature::operator== (const tdesc_feature &other) const +{ + if (name != other.name) + return false; + + if (registers.size () != other.registers.size ()) + return false; + + for (int ix = 0; ix < registers.size (); ix++) + { + const tdesc_reg_up ®1 = registers[ix]; + const tdesc_reg_up ®2 = other.registers[ix]; + + if (reg1 != reg2 && *reg1 != *reg2) + return false; + } + + if (types.size () != other.types.size ()) + return false; + + for (int ix = 0; ix < types.size (); ix++) + { + const tdesc_type_up &type1 = types[ix]; + const tdesc_type_up &type2 = other.types[ix]; + + if (type1 != type2 && *type1 != *type2) + return false; + } + + return true; +} + +/* Lookup a predefined type. */ + +static struct tdesc_type * +tdesc_predefined_type (enum tdesc_type_kind kind) +{ + for (int ix = 0; ix < ARRAY_SIZE (tdesc_predefined_types); ix++) + if (tdesc_predefined_types[ix].kind == kind) + return &tdesc_predefined_types[ix]; + + gdb_assert_not_reached ("bad predefined tdesc type"); +} + +/* See gdbsupport/tdesc.h. */ + +struct tdesc_type * +tdesc_named_type (const struct tdesc_feature *feature, const char *id) +{ + /* First try target-defined types. */ + for (const tdesc_type_up &type : feature->types) + if (type->name == id) + return type.get (); + + /* Next try the predefined types. */ + for (int ix = 0; ix < ARRAY_SIZE (tdesc_predefined_types); ix++) + if (tdesc_predefined_types[ix].name == id) + return &tdesc_predefined_types[ix]; + + return NULL; +} + +/* See gdbsupport/tdesc.h. */ + +void +tdesc_create_reg (struct tdesc_feature *feature, const char *name, + int regnum, int save_restore, const char *group, + int bitsize, const char *type) +{ + tdesc_reg *reg = new tdesc_reg (feature, name, regnum, save_restore, + group, bitsize, type); + + feature->registers.emplace_back (reg); +} + +/* See gdbsupport/tdesc.h. */ + +struct tdesc_type * +tdesc_create_vector (struct tdesc_feature *feature, const char *name, + struct tdesc_type *field_type, int count) +{ + tdesc_type_vector *type = new tdesc_type_vector (name, field_type, count); + feature->types.emplace_back (type); + + return type; +} + +/* See gdbsupport/tdesc.h. */ + +tdesc_type_with_fields * +tdesc_create_struct (struct tdesc_feature *feature, const char *name) +{ + tdesc_type_with_fields *type + = new tdesc_type_with_fields (name, TDESC_TYPE_STRUCT); + feature->types.emplace_back (type); + + return type; +} + +/* See gdbsupport/tdesc.h. */ + +void +tdesc_set_struct_size (tdesc_type_with_fields *type, int size) +{ + gdb_assert (type->kind == TDESC_TYPE_STRUCT); + gdb_assert (size > 0); + type->size = size; +} + +/* See gdbsupport/tdesc.h. */ + +tdesc_type_with_fields * +tdesc_create_union (struct tdesc_feature *feature, const char *name) +{ + tdesc_type_with_fields *type + = new tdesc_type_with_fields (name, TDESC_TYPE_UNION); + feature->types.emplace_back (type); + + return type; +} + +/* See gdbsupport/tdesc.h. */ + +tdesc_type_with_fields * +tdesc_create_flags (struct tdesc_feature *feature, const char *name, + int size) +{ + gdb_assert (size > 0); + + tdesc_type_with_fields *type + = new tdesc_type_with_fields (name, TDESC_TYPE_FLAGS, size); + feature->types.emplace_back (type); + + return type; +} + +/* See gdbsupport/tdesc.h. */ + +tdesc_type_with_fields * +tdesc_create_enum (struct tdesc_feature *feature, const char *name, + int size) +{ + gdb_assert (size > 0); + + tdesc_type_with_fields *type + = new tdesc_type_with_fields (name, TDESC_TYPE_ENUM, size); + feature->types.emplace_back (type); + + return type; +} + +/* See gdbsupport/tdesc.h. */ + +void +tdesc_add_field (tdesc_type_with_fields *type, const char *field_name, + struct tdesc_type *field_type) +{ + gdb_assert (type->kind == TDESC_TYPE_UNION + || type->kind == TDESC_TYPE_STRUCT); + + /* Initialize start and end so we know this is not a bit-field + when we print-c-tdesc. */ + type->fields.emplace_back (field_name, field_type, -1, -1); +} + +/* See gdbsupport/tdesc.h. */ + +void +tdesc_add_typed_bitfield (tdesc_type_with_fields *type, const char *field_name, + int start, int end, struct tdesc_type *field_type) +{ + gdb_assert (type->kind == TDESC_TYPE_STRUCT + || type->kind == TDESC_TYPE_FLAGS); + gdb_assert (start >= 0 && end >= start); + + type->fields.emplace_back (field_name, field_type, start, end); +} + +/* See gdbsupport/tdesc.h. */ + +void +tdesc_add_bitfield (tdesc_type_with_fields *type, const char *field_name, + int start, int end) +{ + struct tdesc_type *field_type; + + gdb_assert (start >= 0 && end >= start); + + if (type->size > 4) + field_type = tdesc_predefined_type (TDESC_TYPE_UINT64); + else + field_type = tdesc_predefined_type (TDESC_TYPE_UINT32); + + tdesc_add_typed_bitfield (type, field_name, start, end, field_type); +} + +/* See gdbsupport/tdesc.h. */ + +void +tdesc_add_flag (tdesc_type_with_fields *type, int start, + const char *flag_name) +{ + gdb_assert (type->kind == TDESC_TYPE_FLAGS + || type->kind == TDESC_TYPE_STRUCT); + + type->fields.emplace_back (flag_name, + tdesc_predefined_type (TDESC_TYPE_BOOL), + start, start); +} + +/* See gdbsupport/tdesc.h. */ + +void +tdesc_add_enum_value (tdesc_type_with_fields *type, int value, + const char *name) +{ + gdb_assert (type->kind == TDESC_TYPE_ENUM); + type->fields.emplace_back (name, + tdesc_predefined_type (TDESC_TYPE_INT32), + value, -1); +} + +void print_xml_feature::visit_pre (const tdesc_feature *e) +{ + add_line ("<feature name=\"%s\">", e->name.c_str ()); + indent (1); +} + +void print_xml_feature::visit_post (const tdesc_feature *e) +{ + indent (-1); + add_line ("</feature>"); +} + +void print_xml_feature::visit (const tdesc_type_builtin *t) +{ + error (_("xml output is not supported for type \"%s\"."), t->name.c_str ()); +} + +void print_xml_feature::visit (const tdesc_type_vector *t) +{ + add_line ("<vector id=\"%s\" type=\"%s\" count=\"%d\"/>", + t->name.c_str (), t->element_type->name.c_str (), t->count); +} + +void print_xml_feature::visit (const tdesc_type_with_fields *t) +{ + const static char *types[] = { "struct", "union", "flags", "enum" }; + + gdb_assert (t->kind >= TDESC_TYPE_STRUCT && t->kind <= TDESC_TYPE_ENUM); + + std::string tmp; + + string_appendf (tmp, + "<%s id=\"%s\"", types[t->kind - TDESC_TYPE_STRUCT], + t->name.c_str ()); + + switch (t->kind) + { + case TDESC_TYPE_STRUCT: + case TDESC_TYPE_FLAGS: + if (t->size > 0) + string_appendf (tmp, " size=\"%d\"", t->size); + string_appendf (tmp, ">"); + add_line (tmp); + + for (const tdesc_type_field &f : t->fields) + { + tmp.clear (); + string_appendf (tmp, " <field name=\"%s\"", f.name.c_str ()); + if (f.start != -1) + string_appendf (tmp, " start=\"%d\" end=\"%d\"", f.start, + f.end); + string_appendf (tmp, " type=\"%s\"/>", + f.type->name.c_str ()); + add_line (tmp); + } + break; + + case TDESC_TYPE_ENUM: + string_appendf (tmp, ">"); + add_line (tmp); + for (const tdesc_type_field &f : t->fields) + add_line (" <field name=\"%s\" start=\"%d\"/>", + f.name.c_str (), f.start); + break; + + case TDESC_TYPE_UNION: + string_appendf (tmp, ">"); + add_line (tmp); + for (const tdesc_type_field &f : t->fields) + add_line (" <field name=\"%s\" type=\"%s\"/>", + f.name.c_str (), f.type->name.c_str ()); + break; + + default: + error (_("xml output is not supported for type \"%s\"."), + t->name.c_str ()); + } + + add_line ("</%s>", types[t->kind - TDESC_TYPE_STRUCT]); +} + +void print_xml_feature::visit (const tdesc_reg *r) +{ + std::string tmp; + + string_appendf (tmp, + "<reg name=\"%s\" bitsize=\"%d\" type=\"%s\" regnum=\"%ld\"", + r->name.c_str (), r->bitsize, r->type.c_str (), + r->target_regnum); + + if (r->group.length () > 0) + string_appendf (tmp, " group=\"%s\"", r->group.c_str ()); + + if (r->save_restore == 0) + string_appendf (tmp, " save-restore=\"no\""); + + string_appendf (tmp, "/>"); + + add_line (tmp); +} + +void print_xml_feature::visit_pre (const target_desc *e) +{ +#ifndef IN_PROCESS_AGENT + add_line ("<?xml version=\"1.0\"?>"); + add_line ("<!DOCTYPE target SYSTEM \"gdb-target.dtd\">"); + add_line ("<target>"); + indent (1); + if (tdesc_architecture_name (e)) + add_line ("<architecture>%s</architecture>", + tdesc_architecture_name (e)); + + const char *osabi = tdesc_osabi_name (e); + if (osabi != nullptr) + add_line ("<osabi>%s</osabi>", osabi); + + const std::vector<tdesc_compatible_info_up> &compatible_list + = tdesc_compatible_info_list (e); + for (const auto &c : compatible_list) + add_line ("<compatible>%s</compatible>", + tdesc_compatible_info_arch_name (c)); +#endif +} + +void print_xml_feature::visit_post (const target_desc *e) +{ + indent (-1); + add_line ("</target>"); +} + +/* See gdbsupport/tdesc.h. */ + +void +print_xml_feature::add_line (const std::string &str) +{ + string_appendf (*m_buffer, "%*s", m_depth, ""); + string_appendf (*m_buffer, "%s", str.c_str ()); + string_appendf (*m_buffer, "\n"); +} + +/* See gdbsupport/tdesc.h. */ + +void +print_xml_feature::add_line (const char *fmt, ...) +{ + std::string tmp; + + va_list ap; + va_start (ap, fmt); + string_vappendf (tmp, fmt, ap); + va_end (ap); + add_line (tmp); +} diff -Nru gdb-9.1/gdbsupport/tdesc.h gdb-10.2/gdbsupport/tdesc.h --- gdb-9.1/gdbsupport/tdesc.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/tdesc.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,465 @@ +/* Copyright (C) 2006-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef COMMON_TDESC_H +#define COMMON_TDESC_H + +struct tdesc_feature; +struct tdesc_type; +struct tdesc_type_builtin; +struct tdesc_type_vector; +struct tdesc_type_with_fields; +struct tdesc_reg; +struct target_desc; + +/* The interface to visit different elements of target description. */ + +class tdesc_element_visitor +{ +public: + virtual void visit_pre (const target_desc *e) + {} + + virtual void visit_post (const target_desc *e) + {} + + virtual void visit_pre (const tdesc_feature *e) + {} + + virtual void visit_post (const tdesc_feature *e) + {} + + virtual void visit (const tdesc_type_builtin *e) + {} + + virtual void visit (const tdesc_type_vector *e) + {} + + virtual void visit (const tdesc_type_with_fields *e) + {} + + virtual void visit (const tdesc_reg *e) + {} +}; + +class tdesc_element +{ +public: + virtual void accept (tdesc_element_visitor &v) const = 0; +}; + +/* An individual register from a target description. */ + +struct tdesc_reg : tdesc_element +{ + tdesc_reg (struct tdesc_feature *feature, const std::string &name_, + int regnum, int save_restore_, const char *group_, + int bitsize_, const char *type_); + + virtual ~tdesc_reg () = default; + + DISABLE_COPY_AND_ASSIGN (tdesc_reg); + + /* The name of this register. In standard features, it may be + recognized by the architecture support code, or it may be purely + for the user. */ + std::string name; + + /* The register number used by this target to refer to this + register. This is used for remote p/P packets and to determine + the ordering of registers in the remote g/G packets. */ + long target_regnum; + + /* If this flag is set, GDB should save and restore this register + around calls to an inferior function. */ + int save_restore; + + /* The name of the register group containing this register, or empty + if the group should be automatically determined from the + register's type. If this is "general", "float", or "vector", the + corresponding "info" command should display this register's + value. It can be an arbitrary string, but should be limited to + alphanumeric characters and internal hyphens. Currently other + strings are ignored (treated as empty). */ + std::string group; + + /* The size of the register, in bits. */ + int bitsize; + + /* The type of the register. This string corresponds to either + a named type from the target description or a predefined + type from GDB. */ + std::string type; + + /* The target-described type corresponding to TYPE, if found. */ + struct tdesc_type *tdesc_type; + + void accept (tdesc_element_visitor &v) const override + { + v.visit (this); + } + + bool operator== (const tdesc_reg &other) const + { + return (name == other.name + && target_regnum == other.target_regnum + && save_restore == other.save_restore + && bitsize == other.bitsize + && group == other.group + && type == other.type); + } + + bool operator!= (const tdesc_reg &other) const + { + return !(*this == other); + } +}; + +typedef std::unique_ptr<tdesc_reg> tdesc_reg_up; + +/* Declaration of a structure that holds information about one + "compatibility" entry within a target description. */ + +struct tdesc_compatible_info; + +/* A pointer to a single piece of compatibility information. */ + +typedef std::unique_ptr<tdesc_compatible_info> tdesc_compatible_info_up; + +/* Return a vector of compatibility information pointers from the target + description TARGET_DESC. */ + +const std::vector<tdesc_compatible_info_up> &tdesc_compatible_info_list + (const target_desc *target_desc); + +/* Return the architecture name from a compatibility information + COMPATIBLE. */ + +const char *tdesc_compatible_info_arch_name + (const tdesc_compatible_info_up &compatible); + +enum tdesc_type_kind +{ + /* Predefined types. */ + TDESC_TYPE_BOOL, + TDESC_TYPE_INT8, + TDESC_TYPE_INT16, + TDESC_TYPE_INT32, + TDESC_TYPE_INT64, + TDESC_TYPE_INT128, + TDESC_TYPE_UINT8, + TDESC_TYPE_UINT16, + TDESC_TYPE_UINT32, + TDESC_TYPE_UINT64, + TDESC_TYPE_UINT128, + TDESC_TYPE_CODE_PTR, + TDESC_TYPE_DATA_PTR, + TDESC_TYPE_IEEE_HALF, + TDESC_TYPE_IEEE_SINGLE, + TDESC_TYPE_IEEE_DOUBLE, + TDESC_TYPE_ARM_FPA_EXT, + TDESC_TYPE_I387_EXT, + TDESC_TYPE_BFLOAT16, + + /* Types defined by a target feature. */ + TDESC_TYPE_VECTOR, + TDESC_TYPE_STRUCT, + TDESC_TYPE_UNION, + TDESC_TYPE_FLAGS, + TDESC_TYPE_ENUM +}; + +struct tdesc_type : tdesc_element +{ + tdesc_type (const std::string &name_, enum tdesc_type_kind kind_) + : name (name_), kind (kind_) + {} + + virtual ~tdesc_type () = default; + + DISABLE_COPY_AND_ASSIGN (tdesc_type); + + /* The name of this type. */ + std::string name; + + /* Identify the kind of this type. */ + enum tdesc_type_kind kind; + + bool operator== (const tdesc_type &other) const + { + return name == other.name && kind == other.kind; + } + + bool operator!= (const tdesc_type &other) const + { + return !(*this == other); + } +}; + +typedef std::unique_ptr<tdesc_type> tdesc_type_up; + +struct tdesc_type_builtin : tdesc_type +{ + tdesc_type_builtin (const std::string &name, enum tdesc_type_kind kind) + : tdesc_type (name, kind) + {} + + void accept (tdesc_element_visitor &v) const override + { + v.visit (this); + } +}; + +/* tdesc_type for vector types. */ + +struct tdesc_type_vector : tdesc_type +{ + tdesc_type_vector (const std::string &name, tdesc_type *element_type_, + int count_) + : tdesc_type (name, TDESC_TYPE_VECTOR), + element_type (element_type_), count (count_) + {} + + void accept (tdesc_element_visitor &v) const override + { + v.visit (this); + } + + struct tdesc_type *element_type; + int count; +}; + +/* A named type from a target description. */ + +struct tdesc_type_field +{ + tdesc_type_field (const std::string &name_, tdesc_type *type_, + int start_, int end_) + : name (name_), type (type_), start (start_), end (end_) + {} + + std::string name; + struct tdesc_type *type; + /* For non-enum-values, either both are -1 (non-bitfield), or both are + not -1 (bitfield). For enum values, start is the value (which could be + -1), end is -1. */ + int start, end; +}; + +/* tdesc_type for struct, union, flags, and enum types. */ + +struct tdesc_type_with_fields : tdesc_type +{ + tdesc_type_with_fields (const std::string &name, tdesc_type_kind kind, + int size_ = 0) + : tdesc_type (name, kind), size (size_) + {} + + void accept (tdesc_element_visitor &v) const override + { + v.visit (this); + } + + std::vector<tdesc_type_field> fields; + int size; +}; + +/* A feature from a target description. Each feature is a collection + of other elements, e.g. registers and types. */ + +struct tdesc_feature : tdesc_element +{ + tdesc_feature (const std::string &name_) + : name (name_) + {} + + virtual ~tdesc_feature () = default; + + DISABLE_COPY_AND_ASSIGN (tdesc_feature); + + /* The name of this feature. It may be recognized by the architecture + support code. */ + std::string name; + + /* The registers associated with this feature. */ + std::vector<tdesc_reg_up> registers; + + /* The types associated with this feature. */ + std::vector<tdesc_type_up> types; + + void accept (tdesc_element_visitor &v) const override; + + bool operator== (const tdesc_feature &other) const; + + bool operator!= (const tdesc_feature &other) const + { + return !(*this == other); + } +}; + +typedef std::unique_ptr<tdesc_feature> tdesc_feature_up; + +/* A deleter adapter for a target_desc. There are different + implementations of this deleter class in gdb and gdbserver because even + though the target_desc name is shared between the two projects, the + actual implementations of target_desc are completely different. */ + +struct target_desc_deleter +{ + void operator() (struct target_desc *desc) const; +}; + +/* A unique pointer specialization that holds a target_desc. */ + +typedef std::unique_ptr<target_desc, target_desc_deleter> target_desc_up; + +/* Allocate a new target_desc. */ +target_desc *allocate_target_description (void); + +/* Set TARGET_DESC's architecture by NAME. */ +void set_tdesc_architecture (target_desc *target_desc, + const char *name); + +/* Return the architecture associated with this target description as a string, + or NULL if no architecture was specified. */ +const char *tdesc_architecture_name (const struct target_desc *target_desc); + +/* Set TARGET_DESC's osabi by NAME. */ +void set_tdesc_osabi (target_desc *target_desc, const char *name); + +/* Return the osabi associated with this target description as a string, + or NULL if no osabi was specified. */ +const char *tdesc_osabi_name (const struct target_desc *target_desc); + +/* Return the type associated with ID in the context of FEATURE, or + NULL if none. */ +struct tdesc_type *tdesc_named_type (const struct tdesc_feature *feature, + const char *id); + +/* Return the created feature named NAME in target description TDESC. */ +struct tdesc_feature *tdesc_create_feature (struct target_desc *tdesc, + const char *name); + +/* Return the created vector tdesc_type named NAME in FEATURE. */ +struct tdesc_type *tdesc_create_vector (struct tdesc_feature *feature, + const char *name, + struct tdesc_type *field_type, + int count); + +/* Return the created struct tdesc_type named NAME in FEATURE. */ +tdesc_type_with_fields *tdesc_create_struct (struct tdesc_feature *feature, + const char *name); + +/* Return the created union tdesc_type named NAME in FEATURE. */ +tdesc_type_with_fields *tdesc_create_union (struct tdesc_feature *feature, + const char *name); + +/* Return the created flags tdesc_type named NAME in FEATURE. */ +tdesc_type_with_fields *tdesc_create_flags (struct tdesc_feature *feature, + const char *name, + int size); + +/* Return the created enum tdesc_type named NAME in FEATURE. */ +tdesc_type_with_fields *tdesc_create_enum (struct tdesc_feature *feature, + const char *name, + int size); + +/* Add a new field to TYPE. FIELD_NAME is its name, and FIELD_TYPE is + its type. */ +void tdesc_add_field (tdesc_type_with_fields *type, const char *field_name, + struct tdesc_type *field_type); + +/* Add a new bitfield to TYPE, with range START to END. FIELD_NAME is its name, + and FIELD_TYPE is its type. */ +void tdesc_add_typed_bitfield (tdesc_type_with_fields *type, + const char *field_name, + int start, int end, + struct tdesc_type *field_type); + +/* Set the total length of TYPE. Structs which contain bitfields may + omit the reserved bits, so the end of the last field may not + suffice. */ +void tdesc_set_struct_size (tdesc_type_with_fields *type, int size); + +/* Add a new untyped bitfield to TYPE. + Untyped bitfields become either uint32 or uint64 depending on the size + of the underlying type. */ +void tdesc_add_bitfield (tdesc_type_with_fields *type, const char *field_name, + int start, int end); + +/* A flag is just a typed(bool) single-bit bitfield. + This function is kept to minimize changes in generated files. */ +void tdesc_add_flag (tdesc_type_with_fields *type, int start, + const char *flag_name); + +/* Add field with VALUE and NAME to the enum TYPE. */ +void tdesc_add_enum_value (tdesc_type_with_fields *type, int value, + const char *name); + +/* Create a register in feature FEATURE. */ +void tdesc_create_reg (struct tdesc_feature *feature, const char *name, + int regnum, int save_restore, const char *group, + int bitsize, const char *type); + +/* Return the tdesc in string XML format. */ + +const char *tdesc_get_features_xml (const target_desc *tdesc); + +/* Print target description as xml. */ + +class print_xml_feature : public tdesc_element_visitor +{ +public: + print_xml_feature (std::string *buffer_) + : m_buffer (buffer_), + m_depth (0) + {} + + void visit_pre (const target_desc *e) override; + void visit_post (const target_desc *e) override; + void visit_pre (const tdesc_feature *e) override; + void visit_post (const tdesc_feature *e) override; + void visit (const tdesc_type_builtin *type) override; + void visit (const tdesc_type_vector *type) override; + void visit (const tdesc_type_with_fields *type) override; + void visit (const tdesc_reg *reg) override; + +private: + + /* Called with a positive value of ADJUST when we move inside an element, + for example inside <target>, and with a negative value when we leave + the element. In this class this function does nothing, but a + sub-class can override this to track the current level of nesting. */ + void indent (int adjust) + { + m_depth += (adjust * 2); + } + + /* Functions to add lines to the output buffer M_BUFFER. Each of these + functions appends a newline, so don't include one in the strings being + passed. */ + void add_line (const std::string &str); + void add_line (const char *fmt, ...) ATTRIBUTE_PRINTF (2, 3); + + /* The buffer we are writing too. */ + std::string *m_buffer; + + /* The current indentation depth. */ + int m_depth; +}; + +#endif /* COMMON_TDESC_H */ diff -Nru gdb-9.1/gdbsupport/thread-pool.cc gdb-10.2/gdbsupport/thread-pool.cc --- gdb-9.1/gdbsupport/thread-pool.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/thread-pool.cc 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,175 @@ +/* Thread pool + + Copyright (C) 2019-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "common-defs.h" + +#if CXX_STD_THREAD + +#include "gdbsupport/thread-pool.h" +#include "gdbsupport/alt-stack.h" +#include "gdbsupport/block-signals.h" +#include <algorithm> + +/* On the off chance that we have the pthread library on a Windows + host, but std::thread is not using it, avoid calling + pthread_setname_np on Windows. */ +#ifndef _WIN32 +#ifdef HAVE_PTHREAD_SETNAME_NP +#define USE_PTHREAD_SETNAME_NP +#endif +#endif + +#ifdef USE_PTHREAD_SETNAME_NP + +#include <pthread.h> + +/* Handle platform discrepancies in pthread_setname_np: macOS uses a + single-argument form, while Linux uses a two-argument form. NetBSD + takes a printf-style format and an argument. This wrapper handles the + difference. */ + +ATTRIBUTE_UNUSED static void +set_thread_name (int (*set_name) (pthread_t, const char *, void *), + const char *name) +{ + set_name (pthread_self (), "%s", const_cast<char *> (name)); +} + +ATTRIBUTE_UNUSED static void +set_thread_name (int (*set_name) (pthread_t, const char *), const char *name) +{ + set_name (pthread_self (), name); +} + +/* The macOS man page says that pthread_setname_np returns "void", but + the headers actually declare it returning "int". */ +ATTRIBUTE_UNUSED static void +set_thread_name (int (*set_name) (const char *), const char *name) +{ + set_name (name); +} + +#endif /* USE_PTHREAD_SETNAME_NP */ + +namespace gdb +{ + +/* The thread pool detach()s its threads, so that the threads will not + prevent the process from exiting. However, it was discovered that + if any detached threads were still waiting on a condition variable, + then the condition variable's destructor would wait for the threads + to exit -- defeating the purpose. + + Allocating the thread pool on the heap and simply "leaking" it + avoids this problem. +*/ +thread_pool *thread_pool::g_thread_pool = new thread_pool (); + +thread_pool::~thread_pool () +{ + /* Because this is a singleton, we don't need to clean up. The + threads are detached so that they won't prevent process exit. + And, cleaning up here would be actively harmful in at least one + case -- see the comment by the definition of g_thread_pool. */ +} + +void +thread_pool::set_thread_count (size_t num_threads) +{ + std::lock_guard<std::mutex> guard (m_tasks_mutex); + + /* If the new size is larger, start some new threads. */ + if (m_thread_count < num_threads) + { + /* Ensure that signals used by gdb are blocked in the new + threads. */ + block_signals blocker; + for (size_t i = m_thread_count; i < num_threads; ++i) + { + std::thread thread (&thread_pool::thread_function, this); + thread.detach (); + } + } + /* If the new size is smaller, terminate some existing threads. */ + if (num_threads < m_thread_count) + { + for (size_t i = num_threads; i < m_thread_count; ++i) + m_tasks.emplace (); + m_tasks_cv.notify_all (); + } + + m_thread_count = num_threads; +} + +std::future<void> +thread_pool::post_task (std::function<void ()> func) +{ + std::packaged_task<void ()> t (func); + std::future<void> f = t.get_future (); + + if (m_thread_count == 0) + { + /* Just execute it now. */ + t (); + } + else + { + std::lock_guard<std::mutex> guard (m_tasks_mutex); + m_tasks.emplace (std::move (t)); + m_tasks_cv.notify_one (); + } + return f; +} + +void +thread_pool::thread_function () +{ +#ifdef USE_PTHREAD_SETNAME_NP + /* This must be done here, because on macOS one can only set the + name of the current thread. */ + set_thread_name (pthread_setname_np, "gdb worker"); +#endif + + /* Ensure that SIGSEGV is delivered to an alternate signal + stack. */ + gdb::alternate_signal_stack signal_stack; + + while (true) + { + optional<task> t; + + { + /* We want to hold the lock while examining the task list, but + not while invoking the task function. */ + std::unique_lock<std::mutex> guard (m_tasks_mutex); + while (m_tasks.empty ()) + m_tasks_cv.wait (guard); + t = std::move (m_tasks.front()); + m_tasks.pop (); + } + + if (!t.has_value ()) + break; + (*t) (); + } +} + +} + +#endif /* CXX_STD_THREAD */ diff -Nru gdb-9.1/gdbsupport/thread-pool.h gdb-10.2/gdbsupport/thread-pool.h --- gdb-9.1/gdbsupport/thread-pool.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/thread-pool.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,90 @@ +/* Thread pool + + Copyright (C) 2019-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef GDBSUPPORT_THREAD_POOL_H +#define GDBSUPPORT_THREAD_POOL_H + +#include <queue> +#include <thread> +#include <vector> +#include <functional> +#include <mutex> +#include <condition_variable> +#include <future> +#include "gdbsupport/gdb_optional.h" + +namespace gdb +{ + +/* A thread pool. + + There is a single global thread pool, see g_thread_pool. Tasks can + be submitted to the thread pool. They will be processed in worker + threads as time allows. */ +class thread_pool +{ +public: + /* The sole global thread pool. */ + static thread_pool *g_thread_pool; + + ~thread_pool (); + DISABLE_COPY_AND_ASSIGN (thread_pool); + + /* Set the thread count of this thread pool. By default, no threads + are created -- the thread count must be set first. */ + void set_thread_count (size_t num_threads); + + /* Return the number of executing threads. */ + size_t thread_count () const + { + return m_thread_count; + } + + /* Post a task to the thread pool. A future is returned, which can + be used to wait for the result. */ + std::future<void> post_task (std::function<void ()> func); + +private: + + thread_pool () = default; + + /* The callback for each worker thread. */ + void thread_function (); + + /* The current thread count. */ + size_t m_thread_count = 0; + + /* A convenience typedef for the type of a task. */ + typedef std::packaged_task<void ()> task; + + /* The tasks that have not been processed yet. An optional is used + to represent a task. If the optional is empty, then this means + that the receiving thread should terminate. If the optional is + non-empty, then it is an actual task to evaluate. */ + std::queue<optional<task>> m_tasks; + + /* A condition variable and mutex that are used for communication + between the main thread and the worker threads. */ + std::condition_variable m_tasks_cv; + std::mutex m_tasks_mutex; +}; + +} + +#endif /* GDBSUPPORT_THREAD_POOL_H */ diff -Nru gdb-9.1/gdbsupport/traits.h gdb-10.2/gdbsupport/traits.h --- gdb-9.1/gdbsupport/traits.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/traits.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,109 @@ +/* Copyright (C) 2017-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef COMMON_TRAITS_H +#define COMMON_TRAITS_H + +#include <type_traits> + +/* GCC does not understand __has_feature. */ +#if !defined(__has_feature) +# define __has_feature(x) 0 +#endif + +/* HAVE_IS_TRIVIALLY_COPYABLE is defined as 1 iff + std::is_trivially_copyable is available. GCC only implemented it + in GCC 5. */ +#if (__has_feature(is_trivially_copyable) \ + || (defined __GNUC__ && __GNUC__ >= 5)) +# define HAVE_IS_TRIVIALLY_COPYABLE 1 +#endif + +/* HAVE_IS_TRIVIALLY_CONSTRUCTIBLE is defined as 1 iff + std::is_trivially_constructible is available. GCC only implemented it + in GCC 5. */ +#if (__has_feature(is_trivially_constructible) \ + || (defined __GNUC__ && __GNUC__ >= 5)) +# define HAVE_IS_TRIVIALLY_CONSTRUCTIBLE 1 +#endif + +namespace gdb { + +/* Pre C++14-safe (CWG 1558) version of C++17's std::void_t. See + <http://en.cppreference.com/w/cpp/types/void_t>. */ + +template<typename... Ts> +struct make_void { typedef void type; }; + +template<typename... Ts> +using void_t = typename make_void<Ts...>::type; + +/* A few trait helpers, mainly stolen from libstdc++. Uppercase + because "and/or", etc. are reserved keywords. */ + +template<typename Predicate> +struct Not : public std::integral_constant<bool, !Predicate::value> +{}; + +template<typename...> +struct Or; + +template<> +struct Or<> : public std::false_type +{}; + +template<typename B1> +struct Or<B1> : public B1 +{}; + +template<typename B1, typename B2> +struct Or<B1, B2> + : public std::conditional<B1::value, B1, B2>::type +{}; + +template<typename B1,typename B2,typename B3, typename... Bn> +struct Or<B1, B2, B3, Bn...> + : public std::conditional<B1::value, B1, Or<B2, B3, Bn...>>::type +{}; + +template<typename...> +struct And; + +template<> +struct And<> : public std::true_type +{}; + +template<typename B1> +struct And<B1> : public B1 +{}; + +template<typename B1, typename B2> +struct And<B1, B2> + : public std::conditional<B1::value, B2, B1>::type +{}; + +template<typename B1, typename B2, typename B3, typename... Bn> +struct And<B1, B2, B3, Bn...> + : public std::conditional<B1::value, And<B2, B3, Bn...>, B1>::type +{}; + +/* Concepts-light-like helper to make SFINAE logic easier to read. */ +template<typename Condition> +using Requires = typename std::enable_if<Condition::value, void>::type; +} + +#endif /* COMMON_TRAITS_H */ diff -Nru gdb-9.1/gdbsupport/underlying.h gdb-10.2/gdbsupport/underlying.h --- gdb-9.1/gdbsupport/underlying.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/underlying.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,32 @@ +/* Copyright (C) 2017-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef COMMON_UNDERLYING_H +#define COMMON_UNDERLYING_H + +#include <type_traits> + +/* Convert an enum to its underlying value. */ + +template<typename E> +constexpr typename std::underlying_type<E>::type +to_underlying (E val) noexcept +{ + return static_cast<typename std::underlying_type<E>::type> (val); +} + +#endif diff -Nru gdb-9.1/gdbsupport/valid-expr.h gdb-10.2/gdbsupport/valid-expr.h --- gdb-9.1/gdbsupport/valid-expr.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/valid-expr.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,108 @@ +/* Compile-time valid expression checker for GDB, the GNU debugger. + + Copyright (C) 2017-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +/* Helper macros used to build compile-time unit tests that make sure + that invalid expressions that should not compile would not compile, + and that expressions that should compile do compile, and have the + right type. This is mainly used to verify that some utility's API + is really as safe as intended. */ + +#ifndef COMMON_VALID_EXPR_H +#define COMMON_VALID_EXPR_H + +#include "gdbsupport/preprocessor.h" +#include "gdbsupport/traits.h" + +/* Macro that uses SFINAE magic to detect whether the EXPR expression + is either valid or ill-formed, at compile time, without actually + producing compile-time errors. I.e., check that bad uses of the + types (e.g., involving mismatching types) would be caught at + compile time. If the expression is valid, also check whether the + expression has the right type. + + EXPR must be defined in terms of some of the template parameters, + so that template substitution failure discards the overload instead + of causing a real compile error. TYPES is thus the list of types + involved in the expression, and TYPENAMES is the same list, but + with each element prefixed by "typename". These are passed as + template parameter types to the templates within the macro. + + VALID is a boolean that indicates whether the expression is + supposed to be valid or invalid. + + EXPR_TYPE is the expected type of EXPR. Only meaningful iff VALID + is true. If VALID is false, then you must pass "void" as expected + type. + + Each invocation of the macro is wrapped in its own namespace to + avoid ODR violations. The generated namespace only includes the + line number, so client code should wrap sets of calls in a + test-specific namespace too, to fully guarantee uniqueness between + the multiple clients in the codebase. */ +#define CHECK_VALID_EXPR_INT(TYPENAMES, TYPES, VALID, EXPR_TYPE, EXPR) \ + namespace CONCAT (check_valid_expr, __LINE__) { \ + \ + template<typename, typename, typename = void> \ + struct is_valid_expression \ + : std::false_type {}; \ + \ + template <TYPENAMES> \ + struct is_valid_expression<TYPES, gdb::void_t<decltype (EXPR)>> \ + : std::true_type {}; \ + \ + static_assert (is_valid_expression<TYPES>::value == VALID, \ + ""); \ + \ + template<TYPENAMES, typename = void> \ + struct is_same_type \ + : std::is_same<EXPR_TYPE, void> {}; \ + \ + template <TYPENAMES> \ + struct is_same_type<TYPES, gdb::void_t<decltype (EXPR)>> \ + : std::is_same<EXPR_TYPE, decltype (EXPR)> {}; \ + \ + static_assert (is_same_type<TYPES>::value, ""); \ + } /* namespace */ + +/* A few convenience macros that support expressions involving a + varying numbers of types. If you need more types, feel free to add + another variant. */ + +#define CHECK_VALID_EXPR_1(T1, VALID, EXPR_TYPE, EXPR) \ + CHECK_VALID_EXPR_INT (ESC_PARENS (typename T1), \ + ESC_PARENS (T1), \ + VALID, EXPR_TYPE, EXPR) + +#define CHECK_VALID_EXPR_2(T1, T2, VALID, EXPR_TYPE, EXPR) \ + CHECK_VALID_EXPR_INT (ESC_PARENS(typename T1, typename T2), \ + ESC_PARENS (T1, T2), \ + VALID, EXPR_TYPE, EXPR) + +#define CHECK_VALID_EXPR_3(T1, T2, T3, VALID, EXPR_TYPE, EXPR) \ + CHECK_VALID_EXPR_INT (ESC_PARENS (typename T1, typename T2, typename T3), \ + ESC_PARENS (T1, T2, T3), \ + VALID, EXPR_TYPE, EXPR) + +#define CHECK_VALID_EXPR_4(T1, T2, T3, T4, VALID, EXPR_TYPE, EXPR) \ + CHECK_VALID_EXPR_INT (ESC_PARENS (typename T1, typename T2, \ + typename T3, typename T4), \ + ESC_PARENS (T1, T2, T3, T4), \ + VALID, EXPR_TYPE, EXPR) + +#endif /* COMMON_VALID_EXPR_H */ diff -Nru gdb-9.1/gdbsupport/version.h gdb-10.2/gdbsupport/version.h --- gdb-9.1/gdbsupport/version.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/version.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,31 @@ +/* Version information for GDB. + Copyright (C) 1999-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef COMMON_VERSION_H +#define COMMON_VERSION_H + +/* Version number of GDB, as a string. */ +extern const char version[]; + +/* Canonical host name as a string. */ +extern const char host_name[]; + +/* Canonical target name as a string. */ +extern const char target_name[]; + +#endif /* COMMON_VERSION_H */ diff -Nru gdb-9.1/gdbsupport/warning.m4 gdb-10.2/gdbsupport/warning.m4 --- gdb-9.1/gdbsupport/warning.m4 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/warning.m4 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,162 @@ +dnl Autoconf configure script for GDB, the GNU debugger. +dnl Copyright (C) 1995-2021 Free Software Foundation, Inc. +dnl +dnl This file is part of GDB. +dnl +dnl This program is free software; you can redistribute it and/or modify +dnl it under the terms of the GNU General Public License as published by +dnl the Free Software Foundation; either version 3 of the License, or +dnl (at your option) any later version. +dnl +dnl This program is distributed in the hope that it will be useful, +dnl but WITHOUT ANY WARRANTY; without even the implied warranty of +dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +dnl GNU General Public License for more details. +dnl +dnl You should have received a copy of the GNU General Public License +dnl along with this program. If not, see <http://www.gnu.org/licenses/>. + +AC_DEFUN([AM_GDB_WARNINGS],[ +AC_ARG_ENABLE(werror, + AS_HELP_STRING([--enable-werror], [treat compile warnings as errors]), + [case "${enableval}" in + yes | y) ERROR_ON_WARNING="yes" ;; + no | n) ERROR_ON_WARNING="no" ;; + *) AC_MSG_ERROR(bad value ${enableval} for --enable-werror) ;; + esac]) + +# Enable -Werror by default when using gcc. Turn it off for releases. +if test "${GCC}" = yes -a -z "${ERROR_ON_WARNING}" && $development; then + ERROR_ON_WARNING=yes +fi + +WERROR_CFLAGS="" +if test "${ERROR_ON_WARNING}" = yes ; then + WERROR_CFLAGS="-Werror" +fi + +# The options we'll try to enable. +build_warnings="-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 \ +-Wno-error=deprecated-register \ +-Wsuggest-override \ +-Wimplicit-fallthrough=3 \ +-Wduplicated-cond \ +-Wshadow=local \ +-Wdeprecated-copy \ +-Wdeprecated-copy-dtor \ +-Wredundant-move \ +-Wmissing-declarations \ +-Wmissing-prototypes \ +-Wstrict-null-sentinel \ +" + +case "${host}" in + *-*-mingw32*) + # Enable -Wno-format by default when using gcc on mingw since many + # GCC versions complain about %I64. + build_warnings="$build_warnings -Wno-format" ;; + *-*-solaris*) + # Solaris 11.4 <python2.7/ceval.h> uses #pragma no_inline that GCC + # doesn't understand. + build_warnings="$build_warnings -Wno-unknown-pragmas" + # Solaris 11 <unistd.h> marks vfork deprecated. + build_warnings="$build_warnings -Wno-deprecated-declarations" ;; + *) + # Note that gcc requires -Wformat for -Wformat-nonliteral to work, + # but there's a special case for this below. + build_warnings="$build_warnings -Wformat-nonliteral" ;; +esac + +AC_ARG_ENABLE(build-warnings, +AS_HELP_STRING([--enable-build-warnings], [enable build-time compiler warnings if gcc is used]), +[case "${enableval}" in + yes) ;; + no) build_warnings="-w";; + ,*) t=`echo "${enableval}" | sed -e "s/,/ /g"` + build_warnings="${build_warnings} ${t}";; + *,) t=`echo "${enableval}" | sed -e "s/,/ /g"` + build_warnings="${t} ${build_warnings}";; + *) build_warnings=`echo "${enableval}" | sed -e "s/,/ /g"`;; +esac +if test x"$silent" != x"yes" && test x"$build_warnings" != x""; then + echo "Setting compiler warning flags = $build_warnings" 6>&1 +fi])dnl +AC_ARG_ENABLE(gdb-build-warnings, +AS_HELP_STRING([--enable-gdb-build-warnings], [enable GDB specific build-time compiler warnings if gcc is used]), +[case "${enableval}" in + yes) ;; + no) build_warnings="-w";; + ,*) t=`echo "${enableval}" | sed -e "s/,/ /g"` + build_warnings="${build_warnings} ${t}";; + *,) t=`echo "${enableval}" | sed -e "s/,/ /g"` + build_warnings="${t} ${build_warnings}";; + *) build_warnings=`echo "${enableval}" | sed -e "s/,/ /g"`;; +esac +if test x"$silent" != x"yes" && test x"$build_warnings" != x""; then + echo "Setting GDB specific compiler warning flags = $build_warnings" 6>&1 +fi])dnl + +# The set of warnings supported by a C++ compiler is not the same as +# of the C compiler. +AC_LANG_PUSH([C++]) + +WARN_CFLAGS="" +if test "x${build_warnings}" != x -a "x$GCC" = xyes +then + AC_MSG_CHECKING(compiler warning flags) + # Separate out the -Werror flag as some files just cannot be + # compiled with it enabled. + for w in ${build_warnings}; do + # GCC does not complain about -Wno-unknown-warning. Invert + # and test -Wunknown-warning instead. + case $w in + -Wno-*) + wtest=`echo $w | sed 's/-Wno-/-W/g'` ;; + -Wformat-nonliteral) + # gcc requires -Wformat before -Wformat-nonliteral + # will work, so stick them together. + w="-Wformat $w" + wtest="$w" + ;; + *) + wtest=$w ;; + esac + + case $w in + -Werr*) WERROR_CFLAGS=-Werror ;; + *) + # Check whether GCC accepts it. + saved_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -Werror $wtest" + saved_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS -Werror $wtest" + if test "x$w" = "x-Wunused-variable"; then + # Check for https://gcc.gnu.org/bugzilla/show_bug.cgi?id=38958, + # fixed in GCC 4.9. This test is derived from the gdb + # source code that triggered this bug in GCC. + AC_TRY_COMPILE( + [struct scoped_restore_base {}; + struct scoped_restore_tmpl : public scoped_restore_base { + ~scoped_restore_tmpl() {} + };], + [const scoped_restore_base &b = scoped_restore_tmpl();], + WARN_CFLAGS="${WARN_CFLAGS} $w",) + else + AC_TRY_COMPILE([],[],WARN_CFLAGS="${WARN_CFLAGS} $w",) + fi + CFLAGS="$saved_CFLAGS" + CXXFLAGS="$saved_CXXFLAGS" + esac + done + AC_MSG_RESULT(${WARN_CFLAGS} ${WERROR_CFLAGS}) +fi +AC_SUBST(WARN_CFLAGS) +AC_SUBST(WERROR_CFLAGS) + +AC_LANG_POP([C++]) +]) diff -Nru gdb-9.1/gdbsupport/x86-xstate.h gdb-10.2/gdbsupport/x86-xstate.h --- gdb-9.1/gdbsupport/x86-xstate.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/x86-xstate.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,88 @@ +/* Common code for x86 XSAVE extended state. + + Copyright (C) 2010-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef COMMON_X86_XSTATE_H +#define COMMON_X86_XSTATE_H + +/* The extended state feature bits. */ +#define X86_XSTATE_X87 (1ULL << 0) +#define X86_XSTATE_SSE (1ULL << 1) +#define X86_XSTATE_AVX (1ULL << 2) +#define X86_XSTATE_BNDREGS (1ULL << 3) +#define X86_XSTATE_BNDCFG (1ULL << 4) +#define X86_XSTATE_MPX (X86_XSTATE_BNDREGS | X86_XSTATE_BNDCFG) + +/* AVX 512 adds three feature bits. All three must be enabled. */ +#define X86_XSTATE_K (1ULL << 5) +#define X86_XSTATE_ZMM_H (1ULL << 6) +#define X86_XSTATE_ZMM (1ULL << 7) +#define X86_XSTATE_AVX512 (X86_XSTATE_K | X86_XSTATE_ZMM_H \ + | X86_XSTATE_ZMM) + +#define X86_XSTATE_PKRU (1ULL << 9) + +/* Supported mask and size of the extended state. */ +#define X86_XSTATE_X87_MASK X86_XSTATE_X87 +#define X86_XSTATE_SSE_MASK (X86_XSTATE_X87 | X86_XSTATE_SSE) +#define X86_XSTATE_AVX_MASK (X86_XSTATE_SSE_MASK | X86_XSTATE_AVX) +#define X86_XSTATE_MPX_MASK (X86_XSTATE_SSE_MASK | X86_XSTATE_MPX) +#define X86_XSTATE_AVX_MPX_MASK (X86_XSTATE_AVX_MASK | X86_XSTATE_MPX) +#define X86_XSTATE_AVX_AVX512_MASK (X86_XSTATE_AVX_MASK | X86_XSTATE_AVX512) +#define X86_XSTATE_AVX_MPX_AVX512_PKU_MASK (X86_XSTATE_AVX_MPX_MASK\ + | X86_XSTATE_AVX512 | X86_XSTATE_PKRU) + +#define X86_XSTATE_ALL_MASK (X86_XSTATE_AVX_MPX_AVX512_PKU_MASK) + + +#define X86_XSTATE_SSE_SIZE 576 +#define X86_XSTATE_AVX_SIZE 832 +#define X86_XSTATE_BNDREGS_SIZE 1024 +#define X86_XSTATE_BNDCFG_SIZE 1088 +#define X86_XSTATE_AVX512_SIZE 2688 +#define X86_XSTATE_PKRU_SIZE 2696 +#define X86_XSTATE_MAX_SIZE 2696 + + +/* In case one of the MPX XCR0 bits is set we consider we have MPX. */ +#define HAS_MPX(XCR0) (((XCR0) & X86_XSTATE_MPX) != 0) +#define HAS_AVX(XCR0) (((XCR0) & X86_XSTATE_AVX) != 0) +#define HAS_AVX512(XCR0) (((XCR0) & X86_XSTATE_AVX512) != 0) +#define HAS_PKRU(XCR0) (((XCR0) & X86_XSTATE_PKRU) != 0) + +/* Get I386 XSAVE extended state size. */ +#define X86_XSTATE_SIZE(XCR0) \ + (HAS_PKRU (XCR0) ? X86_XSTATE_PKRU_SIZE : \ + (HAS_AVX512 (XCR0) ? X86_XSTATE_AVX512_SIZE : \ + (HAS_MPX (XCR0) ? X86_XSTATE_BNDCFG_SIZE : \ + (HAS_AVX (XCR0) ? X86_XSTATE_AVX_SIZE : X86_XSTATE_SSE_SIZE)))) + +/* Initial value for fctrl register, as defined in the X86 manual, and + confirmed in the (Linux) kernel source. When the x87 floating point + feature is not enabled in an inferior we use this as the value of the + fcrtl register. */ + +#define I387_FCTRL_INIT_VAL 0x037f + +/* Initial value for mxcsr register. When the avx and sse floating point + features are not enabled in an inferior we use this as the value of the + mxcsr register. */ + +#define I387_MXCSR_INIT_VAL 0x1f80 + +#endif /* COMMON_X86_XSTATE_H */ diff -Nru gdb-9.1/gdbsupport/xml-utils.cc gdb-10.2/gdbsupport/xml-utils.cc --- gdb-9.1/gdbsupport/xml-utils.cc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/xml-utils.cc 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,63 @@ +/* Shared helper routines for manipulating XML. + + Copyright (C) 2006-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "common-defs.h" +#include "xml-utils.h" + +/* See xml-utils.h. */ + +std::string +xml_escape_text (const char *text) +{ + std::string result; + + xml_escape_text_append (&result, text); + + return result; +} + +/* See xml-utils.h. */ + +void +xml_escape_text_append (std::string *result, const char *text) +{ + /* Expand the result. */ + for (int i = 0; text[i] != '\0'; i++) + switch (text[i]) + { + case '\'': + *result += "'"; + break; + case '\"': + *result += """; + break; + case '&': + *result += "&"; + break; + case '<': + *result += "<"; + break; + case '>': + *result += ">"; + break; + default: + *result += text[i]; + break; + } +} diff -Nru gdb-9.1/gdbsupport/xml-utils.h gdb-10.2/gdbsupport/xml-utils.h --- gdb-9.1/gdbsupport/xml-utils.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gdbsupport/xml-utils.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,33 @@ +/* Shared helper routines for manipulating XML. + + Copyright (C) 2006-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef COMMON_XML_UTILS_H +#define COMMON_XML_UTILS_H + +/* Return a string with special characters from TEXT replaced by entity + references. */ + +extern std::string xml_escape_text (const char *text); + +/* Append TEXT to RESULT, with special characters replaced by entity + references. */ + +extern void xml_escape_text_append (std::string *result, const char *text); + +#endif /* COMMON_XML_UTILS_H */ diff -Nru gdb-9.1/gnulib/aclocal.m4 gdb-10.2/gnulib/aclocal.m4 --- gdb-9.1/gnulib/aclocal.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/aclocal.m4 2021-04-25 04:06:26.000000000 +0000 @@ -56,66 +56,6 @@ [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) -# Copyright (C) 2011-2017 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_PROG_AR([ACT-IF-FAIL]) -# ------------------------- -# Try to determine the archiver interface, and trigger the ar-lib wrapper -# if it is needed. If the detection of archiver interface fails, run -# ACT-IF-FAIL (default is to abort configure with a proper error message). -AC_DEFUN([AM_PROG_AR], -[AC_BEFORE([$0], [LT_INIT])dnl -AC_BEFORE([$0], [AC_PROG_LIBTOOL])dnl -AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -AC_REQUIRE_AUX_FILE([ar-lib])dnl -AC_CHECK_TOOLS([AR], [ar lib "link -lib"], [false]) -: ${AR=ar} - -AC_CACHE_CHECK([the archiver ($AR) interface], [am_cv_ar_interface], - [AC_LANG_PUSH([C]) - am_cv_ar_interface=ar - AC_COMPILE_IFELSE([AC_LANG_SOURCE([[int some_variable = 0;]])], - [am_ar_try='$AR cru libconftest.a conftest.$ac_objext >&AS_MESSAGE_LOG_FD' - AC_TRY_EVAL([am_ar_try]) - if test "$ac_status" -eq 0; then - am_cv_ar_interface=ar - else - am_ar_try='$AR -NOLOGO -OUT:conftest.lib conftest.$ac_objext >&AS_MESSAGE_LOG_FD' - AC_TRY_EVAL([am_ar_try]) - if test "$ac_status" -eq 0; then - am_cv_ar_interface=lib - else - am_cv_ar_interface=unknown - fi - fi - rm -f conftest.lib libconftest.a - ]) - AC_LANG_POP([C])]) - -case $am_cv_ar_interface in -ar) - ;; -lib) - # Microsoft lib, so override with the ar-lib wrapper script. - # FIXME: It is wrong to rewrite AR. - # But if we don't then we get into trouble of one sort or another. - # A longer-term fix would be to have automake use am__AR in this case, - # and then we could set am__AR="$am_aux_dir/ar-lib \$(AR)" or something - # similar. - AR="$am_aux_dir/ar-lib $AR" - ;; -unknown) - m4_default([$1], - [AC_MSG_ERROR([could not determine $AR interface])]) - ;; -esac -AC_SUBST([AR])dnl -]) - # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001-2017 Free Software Foundation, Inc. @@ -918,23 +858,6 @@ # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) -# Copyright (C) 2001-2017 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_RUN_LOG(COMMAND) -# ------------------- -# Run COMMAND, save the exit status in ac_status, and log it. -# (This has been adapted from Autoconf's _AC_RUN_LOG macro.) -AC_DEFUN([AM_RUN_LOG], -[{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD - ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD - (exit $ac_status); }]) - # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996-2017 Free Software Foundation, Inc. @@ -1262,15 +1185,18 @@ m4_include([../config/override.m4]) m4_include([../config/plugins.m4]) m4_include([import/m4/00gnulib.m4]) +m4_include([import/m4/__inline.m4]) m4_include([import/m4/absolute-header.m4]) m4_include([import/m4/alloca.m4]) m4_include([import/m4/arpa_inet_h.m4]) +m4_include([import/m4/btowc.m4]) +m4_include([import/m4/builtin-expect.m4]) m4_include([import/m4/canonicalize.m4]) m4_include([import/m4/chdir-long.m4]) m4_include([import/m4/close.m4]) m4_include([import/m4/closedir.m4]) m4_include([import/m4/codeset.m4]) -m4_include([import/m4/configmake.m4]) +m4_include([import/m4/ctype.m4]) m4_include([import/m4/d-ino.m4]) m4_include([import/m4/d-type.m4]) m4_include([import/m4/dirent_h.m4]) @@ -1296,6 +1222,7 @@ m4_include([import/m4/flexmember.m4]) m4_include([import/m4/float_h.m4]) m4_include([import/m4/fnmatch.m4]) +m4_include([import/m4/fnmatch_h.m4]) m4_include([import/m4/fpieee.m4]) m4_include([import/m4/frexp.m4]) m4_include([import/m4/frexpl.m4]) @@ -1305,31 +1232,32 @@ m4_include([import/m4/getcwd-path-max.m4]) m4_include([import/m4/getcwd.m4]) m4_include([import/m4/getdtablesize.m4]) +m4_include([import/m4/getlogin.m4]) m4_include([import/m4/getlogin_r.m4]) +m4_include([import/m4/getpagesize.m4]) m4_include([import/m4/getprogname.m4]) +m4_include([import/m4/getrandom.m4]) m4_include([import/m4/gettimeofday.m4]) -m4_include([import/m4/glibc21.m4]) m4_include([import/m4/glob.m4]) +m4_include([import/m4/glob_h.m4]) m4_include([import/m4/gnulib-common.m4]) m4_include([import/m4/gnulib-comp.m4]) -m4_include([import/m4/hard-locale.m4]) m4_include([import/m4/include_next.m4]) m4_include([import/m4/inet_ntop.m4]) m4_include([import/m4/inttypes-pri.m4]) m4_include([import/m4/inttypes.m4]) +m4_include([import/m4/isblank.m4]) m4_include([import/m4/isnand.m4]) m4_include([import/m4/isnanl.m4]) m4_include([import/m4/largefile.m4]) -m4_include([import/m4/lib-ld.m4]) -m4_include([import/m4/lib-link.m4]) -m4_include([import/m4/lib-prefix.m4]) m4_include([import/m4/limits-h.m4]) m4_include([import/m4/localcharset.m4]) m4_include([import/m4/locale-fr.m4]) m4_include([import/m4/locale-ja.m4]) m4_include([import/m4/locale-zh.m4]) +m4_include([import/m4/locale_h.m4]) +m4_include([import/m4/localtime-buffer.m4]) m4_include([import/m4/lock.m4]) -m4_include([import/m4/longlong.m4]) m4_include([import/m4/lstat.m4]) m4_include([import/m4/malloc.m4]) m4_include([import/m4/malloca.m4]) @@ -1338,10 +1266,12 @@ m4_include([import/m4/mbsinit.m4]) m4_include([import/m4/mbsrtowcs.m4]) m4_include([import/m4/mbstate_t.m4]) +m4_include([import/m4/mbtowc.m4]) m4_include([import/m4/memchr.m4]) m4_include([import/m4/memmem.m4]) m4_include([import/m4/mempcpy.m4]) m4_include([import/m4/memrchr.m4]) +m4_include([import/m4/minmax.m4]) m4_include([import/m4/mkdir.m4]) m4_include([import/m4/mkdtemp.m4]) m4_include([import/m4/mkostemp.m4]) @@ -1353,11 +1283,13 @@ m4_include([import/m4/netinet_in_h.m4]) m4_include([import/m4/nocrash.m4]) m4_include([import/m4/off_t.m4]) -m4_include([import/m4/onceonly.m4]) +m4_include([import/m4/open-cloexec.m4]) +m4_include([import/m4/open-slash.m4]) m4_include([import/m4/open.m4]) m4_include([import/m4/openat.m4]) m4_include([import/m4/opendir.m4]) m4_include([import/m4/pathmax.m4]) +m4_include([import/m4/pthread_rwlock_rdlock.m4]) m4_include([import/m4/rawmemchr.m4]) m4_include([import/m4/readdir.m4]) m4_include([import/m4/readlink.m4]) @@ -1366,13 +1298,15 @@ m4_include([import/m4/rewinddir.m4]) m4_include([import/m4/rmdir.m4]) m4_include([import/m4/save-cwd.m4]) -m4_include([import/m4/secure_getenv.m4]) m4_include([import/m4/setenv.m4]) +m4_include([import/m4/setlocale_null.m4]) m4_include([import/m4/signal_h.m4]) m4_include([import/m4/socklen.m4]) m4_include([import/m4/sockpfaf.m4]) m4_include([import/m4/ssize_t.m4]) +m4_include([import/m4/stat-time.m4]) m4_include([import/m4/stat.m4]) +m4_include([import/m4/std-gnu11.m4]) m4_include([import/m4/stdalign.m4]) m4_include([import/m4/stdbool.m4]) m4_include([import/m4/stddef_h.m4]) @@ -1384,8 +1318,10 @@ m4_include([import/m4/strerror.m4]) m4_include([import/m4/strerror_r.m4]) m4_include([import/m4/string_h.m4]) +m4_include([import/m4/strnlen.m4]) m4_include([import/m4/strstr.m4]) m4_include([import/m4/strtok_r.m4]) +m4_include([import/m4/sys_random_h.m4]) m4_include([import/m4/sys_socket_h.m4]) m4_include([import/m4/sys_stat_h.m4]) m4_include([import/m4/sys_time_h.m4]) @@ -1397,8 +1333,12 @@ m4_include([import/m4/time_r.m4]) m4_include([import/m4/unistd-safer.m4]) m4_include([import/m4/unistd_h.m4]) +m4_include([import/m4/visibility.m4]) m4_include([import/m4/warn-on-use.m4]) m4_include([import/m4/wchar_h.m4]) m4_include([import/m4/wchar_t.m4]) m4_include([import/m4/wctype_h.m4]) m4_include([import/m4/wint_t.m4]) +m4_include([import/m4/wmemchr.m4]) +m4_include([import/m4/wmempcpy.m4]) +m4_include([import/m4/zzgnulib.m4]) diff -Nru gdb-9.1/gnulib/ChangeLog gdb-10.2/gnulib/ChangeLog --- gdb-9.1/gnulib/ChangeLog 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/ChangeLog 2021-04-25 04:06:26.000000000 +0000 @@ -1,3 +1,1069 @@ +2020-10-09 Joel Brobecker <brobecker@adacore.com> + + GDB PR build/26607 + * patches/0002-stat-fstat-windows-older-vista: New patch. + * patches/0003-stat-fstat-windows-old-mingw: New patch. + * update-gnulib.sh: Update to use the two new patches above. + * import/m4/fstat.m4: Update after applying patches above. + * import/m4/stat.m4: Ditto. + * import/stat-w32.c: Ditto. + * config.in: Regenerate. + * configure: Regenerate. + +2020-09-08 Tom Tromey <tromey@adacore.com> + + PR win32/25302: + * update-gnulib.sh: Apply stat patch. + * patches/0001-use-windows-stat: New file. + * import/m4/stat.m4: Update. + * configure: Rebuild. + +2020-08-26 Christian Biesinger <cbiesinger@google.com> + Pedro Alves <palves@redhat.com> + Joel Brobecker <brobecker@adacore.com> + + * Makefile.in: Regenerate. + * aclocal.m4: Regenerate. + * config.in: Regenerate. + * configure: Regenerate. + * import/Makefile.am: Update. + * import/Makefile.in: Regenerate. + * import/alloca.in.h (if): Update. + * import/assure.h (affirm): Update. + * import/at-func.c: Update. + * import/attribute.h: New file. + * import/btowc.c: New file. + * import/canonicalize-lgpl.c: Update. + * import/count-one-bits.h (COUNT_ONE_BITS_GENERIC): Update. + (COUNT_ONE_BITS): Update. + (intrinsic): Update. + (__popcnt64): Update. + (popcount_supported): Update. + * import/ctype.in.h: New file. + * import/dirent-private.h (WIN32_FIND_DATA): Update. + * import/dirent.in.h (_GL_ATTRIBUTE_PURE): Update. + * import/dirname.h: Update. + * import/dosname.h: Remove. + * import/error.h (_GL_ATTRIBUTE_FORMAT): Update. + * import/extra/update-copyright: Update. + * import/fchdir.c: Update. + * import/fcntl.in.h (GNULIB_defined_rpl_fcntl): Update. + (GNULIB_defined_fcntl): Update. + * import/filename.h (HAS_DEVICE): Update. + (IS_ABSOLUTE_PATH): Update. + (IS_PATH_WITH_DIR): Update. + (FILE_SYSTEM_PREFIX_LEN): Update. + (_IS_DRIVE_LETTER): Update. + (FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE): Update. + (IS_ABSOLUTE_FILE_NAME): Update. + (IS_RELATIVE_FILE_NAME): Update. + (IS_FILE_NAME_WITH_DIR): Update. + * import/filenamecat-lgpl.c (mfile_name_concat): Update. + * import/fnmatch.c (WIDE_CHAR_SUPPORT): Update. + (btowc): Update. + (iswctype): Update. + (mempcpy): Update. + (strnlen): Update. + (towlower): Update. + (wcscat): Update. + (wcslen): Update. + (wctype): Update. + (wmemchr): Update. + (wmempcpy): Update. + (SIZE_MAX): Update. + (isblank): Update. + (__libc_use_alloca): Update. + (alloca): Update. + (alloca_account): Update. + (STREQ): Update. + (CHAR_CLASS_MAX_LENGTH): Update. + (IS_CHAR_CLASS): Update. + (ISWCTYPE): Update. + (if): Update. + (HANDLE_MULTIBYTE): Update. + (internal_function): Update. + (FOLD): Update. + (CHAR): Update. + (UCHAR): Update. + (INT): Update. + (FCT): Update. + (EXT): Update. + (END): Update. + (L_): Update. + (BTOWC): Update. + (STRLEN): Update. + (STRCAT): Update. + (MEMPCPY): Update. + (MEMCHR): Update. + (WIDE_CHAR_VERSION): Update. + (STRUCT): Update. + (FINDIDX): Update. + (findidx): Update. + (ALLOCA_LIMIT): Update. + (SHLIB_COMPAT): Update. + * import/fnmatch_loop.c (struct STRUCT): Update. + (FCT): Update. + (EXT): Update. + (END): Update. + (str): Update. + (NEW_PATTERN): Update. + * import/getcwd.c: Update. + * import/getlogin_r.c (GetUserName): Update. + * import/getprogname.c (getprogname): Update. + * import/getrandom.c: New file. + * import/gettimeofday.c: Remove. + * import/glob.in.h (_Restrict_): Update. + * import/inttypes.in.h (_GL_FUNCDECL_RPL): Update. + (_GL_CXXALIAS_RPL): Update. + (_GL_FUNCDECL_SYS): Update. + (_GL_CXXALIAS_SYS): Update. + * import/isblank.c: New file. + * import/isnanl-nolibm.h (__has_builtin): Update. + * import/libc-config.h (versioned_symbol): Update. + (compat_symbol): Update. + * import/limits.in.h (_GL_ALREADY_INCLUDING_LIMITS_H): Update. + * import/m4/btowc.m4: New file. + * import/m4/ctype.m4: New file. + * import/m4/exponentl.m4: Update. + * import/m4/fnmatch.m4: Update. + * import/m4/getrandom.m4: New file. + * import/m4/glob.m4: Update. + * import/m4/gnulib-cache.m4: Update. + * import/m4/gnulib-common.m4: Update. + * import/m4/gnulib-comp.m4: Update. + * import/m4/inttypes.m4: Update. + * import/m4/isblank.m4: New file. + * import/m4/isnanl.m4: Update. + * import/m4/largefile.m4: Update. + * import/m4/mbtowc.m4: New file. + * import/m4/memmem.m4: Update. + * import/m4/minmax.m4: New file. + * import/m4/signal_h.m4: Update. + * import/m4/stdio_h.m4: Update. + * import/m4/stdlib_h.m4: Update. + * import/m4/string_h.m4: Update. + * import/m4/strnlen.m4: New file. + * import/m4/sys_random_h.m4: New file. + * import/m4/sys_socket_h.m4: Update. + * import/m4/sys_stat_h.m4: Update. + * import/m4/time_h.m4: Update. + * import/m4/unistd_h.m4: Update. + * import/m4/wchar_h.m4: Update. + * import/m4/wint_t.m4: Update. + * import/m4/wmemchr.m4: New file. + * import/m4/wmempcpy.m4: New file. + * import/math.in.h (__has_builtin): Update. + * import/mbrtowc.c (FALLTHROUGH): Update. + * import/mbtowc-impl.h: New file. + * import/mbtowc.c: New file. + * import/minmax.h: New file. + * import/open.c (open): Update. + * import/openat-proc.c (openat_proc_name): Update. + * import/openat.c (rpl_openat): Update. + (openat_needs_fchdir): Update. + * import/openat.h (FCHOWNAT_INLINE): Update. + (CHOWNAT_INLINE): Update. + (FCHMODAT_INLINE): Update. + (CHMODAT_INLINE): Update. + * import/opendir.c (WIN32_FIND_DATA): Update. + (GetFullPathName): Update. + (FindFirstFile): Update. + * import/readdir.c (FindNextFile): Update. + * import/rename.c (MoveFileEx): Update. + * import/rewinddir.c (FindFirstFile): Update. + * import/rmdir.c: Update. + * import/signal.in.h (_GL_FUNCDECL_RPL): Update. + (_GL_CXXALIAS_RPL): Update. + (_GL_FUNCDECL_SYS): Update. + (_GL_CXXALIAS_SYS): Update. + * import/stat-w32.c (_WIN32_WINNT): Update. + (LoadLibrary): Update. + (GetFinalPathNameByHandle): Update. + (GetProcAddress): Update. + (DWORD): Update. + (GetFileInformationByHandleExFunc): Update. + (GetFinalPathNameByHandleFunc): Update. + * import/stat.c (WIN32_FIND_DATA): Update. + (CreateFile): Update. + (FindFirstFile): Update. + * import/stdio.in.h (_GL_ATTRIBUTE_FORMAT): Update. + (_GL_FUNCDECL_RPL): Update. + (_GL_CXXALIAS_RPL): Update. + (_GL_FUNCDECL_SYS): Update. + (_GL_CXXALIAS_SYS): Update. + (_GL_FUNCDECL_RPL_1): Update. + (_GL_CXXALIAS_RPL_1): Update. + (_GL_CXXALIAS_SYS_CAST): Update. + * import/stdlib.in.h (_GL_ATTRIBUTE_PURE): Update. + (_GL_FUNCDECL_RPL): Update. + (_GL_CXXALIAS_RPL): Update. + (_GL_FUNCDECL_SYS): Update. + (_GL_CXXALIAS_SYS): Update. + * import/string.in.h (_GL_ATTRIBUTE_PURE): Update. + (_GL_WARN_ON_USE): Update. + (_GL_WARN_ON_USE_CXX): Update. + (_GL_FUNCDECL_RPL): Update. + (_GL_CXXALIAS_RPL): Update. + (_GL_CXXALIAS_SYS): Update. + (mbstok_r): Update. + * import/strnlen.c: New file. + * import/sys_random.in.h: New file. + * import/sys_socket.in.h (GNULIB_defined_socklen_t): Update. + (_GL_FUNCDECL_RPL): Update. + (_GL_CXXALIAS_RPL): Update. + (_GL_CXXALIAS_SYS_CAST): Update. + * import/sys_stat.in.h (_GL_FUNCDECL_RPL): Update. + (_GL_CXXALIAS_RPL): Update. + (_GL_FUNCDECL_SYS): Update. + (_GL_CXXALIAS_SYS): Update. + (lchmod): Update. + (_GL_CXXALIAS_RPL_1): Update. + (stat): Update. + * import/tempname.c (__set_errno): Update. + (__secure_getenv): Update. + (__try_tempname): Update. + (__getpid): Update. + (__gettimeofday): Update. + (RANDOM_BITS): Update. + (uint64_t): Update. + (RANDOM_VALUE_MAX): Update. + (BASE_62_DIGITS): Update. + (BASE_62_POWER): Update. + (try_tempname_len): Update. + (try_file): Update. + (try_dir): Update. + (try_nocreate): Update. + (gen_tempname_len): Update. + (__gen_tempname): Update. + (try_tempname): Update. + * import/tempname.h (gen_tempname_len): Update. + (try_tempname_len): Update. + * import/time.in.h (_GL_FUNCDECL_RPL): Update. + (_GL_CXXALIAS_RPL): Update. + (_GL_CXXALIAS_SYS): Update. + * import/unistd.in.h (if): Update. + (_GL_FUNCDECL_SYS): Update. + (_GL_CXXALIAS_SYS): Update. + (_GL_CXXALIASWARN): Update. + (_GL_WARN_ON_USE): Update. + (_GL_FUNCDECL_RPL): Update. + (_GL_CXXALIAS_RPL): Update. + * import/verify.h: Update. + * import/warn-on-use.h (_GL_WARN_ON_USE_CXX): Update. + * import/wchar.in.h (_GL_ATTRIBUTE_PURE): Update. + (_GL_FUNCDECL_RPL): Update. + (_GL_CXXALIAS_RPL): Update. + (_GL_FUNCDECL_SYS): Update. + (_GL_CXXALIAS_SYS): Update. + (_GL_CXXALIASWARN): Update. + (_GL_WARN_ON_USE): Update. + (_GL_CXXALIAS_SYS_CAST2): Update. + (_GL_CXXALIASWARN1): Update. + * import/windows-rwlock.c (CreateEvent): Update. + * import/wmemchr-impl.h: New file. + * import/wmemchr.c: New file. + * import/wmempcpy.c: New file. + * update-gnulib.sh (IMPORTED_GNULIB_MODULES): Add gettimeofday. + (GNULIB_COMMIT_SHA1): Update gnulib revision. + +2020-07-30 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + * configure.ac: Run ACX_LARGEFILE before gl_EARLY. + * configure: Regenerate. + +2020-02-22 Simon Marchi <simon.marchi@efficios.com> + + * update-gnulib.sh (GNULIB_COMMIT_SHA1): Bump to + e22cd2677a4b7beacbf30b93bb0559f7b89f96ce. + * Makefile.in, config.in, configure, import/*: Re-generate. + +2020-02-14 Simon Marchi <simon.marchi@efficios.com> + + * update-gnulib.sh (IMPORTED_GNULIB_MODULES): Import + count-one-bits module. + * configure: Re-generate. + * aclocal.m4: Re-generate. + * Makefile.in: Re-generate. + * import/count-one-bits.c: New file. + * import/count-one-bits.h: New file. + * import/Makefile.am: Re-generate. + * import/Makefile.in: Re-generate. + * import/m4/gnulib-cache.m4: Re-generate. + * import/m4/gnulib-comp.m4: Re-generate. + * import/m4/count-one-bits.m4: New file. + +2019-12-16 Christian Biesinger <cbiesinger@google.com> + + * Makefile.am: Set MAKEOVERRIDES. + * Makefile.in: Regenerate. + * aclocal.m4: Regenerate. + * config.in: Regenerate. + * configure: Regenerate. + * import/Makefile.am: Update. + * import/Makefile.in: Regenerate. + * import/_Noreturn.h: New file. + * import/alloca.c (i00afunc): Update. + * import/alloca.in.h (if): Update. + * import/arg-nonnull.h: Rename from import/extra/snippet/arg-nonnull.h. + * import/arpa_inet.in.h (if): Update. + * import/assure.h: Update. + * import/at-func.c: Update. + * import/basename-lgpl.c: Update. + * import/canonicalize-lgpl.c (if): Update. + * import/c++defs.h: Rename from import/extra/snippet/c++defs.h. + * import/cdefs.h: New file. + * import/chdir-long.c: Update. + * import/chdir-long.h: Update. + * import/cloexec.c: Update. + * import/cloexec.h: Update. + * import/close.c: Update. + * import/closedir.c: Update. + * import/config.charset: Remove. + * import/dirent-private.h: Update. + * import/dirent.in.h: Update. + * import/dirfd.c: Update. + * import/dirname-lgpl.c: Update. + * import/dirname.h (base_name): Update. + * import/dosname.h (if): Update. + * import/dup-safer-flag.c: New file. + * import/dup-safer.c: Update. + * import/dup.c: Update. + * import/dup2.c (if): Update. + (dup2_nothrow): Update. + (ms_windows_dup2): Update. + * import/errno.in.h (if): Update. + (elif): Update. + * import/error.c (if): Update. + (strerror_r): Update. + (program_name): Update. + (error): Update. + (error_at_line): Update. + * import/error.h: Update. + * import/exitfail.c: Update. + * import/exitfail.h: Update. + * import/extra/config.rpath: Update. + * import/extra/snippet/_Noreturn.h: Remove. + * import/extra/update-copyright: Update. + * import/fchdir.c: Update. + * import/fcntl.c (rpl_fcntl): Update. + (INCL_DOS): Update. + (if): Update. + (rpl_fcntl_DUPFD): Update. + (rpl_fcntl_DUPFD_CLOEXEC): Update. + (klibc_fcntl): Update. + (fcntl): Update. + (have_dupfd_cloexec): Update. + * import/fcntl.in.h (if): Update. + (creat): Update. + (_GL_FUNCDECL_RPL): Update. + (_GL_CXXALIAS_RPL): Update. + (_GL_CXXALIAS_SYS): Update. + (_GL_CXXALIASWARN): Update. + (_GL_WARN_ON_USE): Update. + (O_CLOEXEC): Update. + (GNULIB_defined_O_CLOEXEC): Update. + * import/fd-hook.c: Update. + * import/fd-hook.h: Update. + * import/fd-safer-flag.c: New file. + * import/fd-safer.c: Update. + * import/fdopendir.c: Update. + * import/filename.h: Update. + * import/filenamecat-lgpl.c (longest_relative_suffix): Update. + (mfile_name_concat): Update. + * import/filenamecat.h: Update. + * import/flexmember.h: Update. + * import/float+.h: Update. + * import/float.c: Update. + * import/float.in.h (LDBL_MIN): Update. + * import/fnmatch.c (__builtin_expect): Update. + (FALLTHROUGH): Update. + * import/fnmatch.in.h (_FNMATCH_H): Update. + (_): Update. + (fnmatch): Update. + (_GL_FUNCDECL_RPL): Update. + (_GL_CXXALIAS_RPL): Update. + (_GL_FUNCDECL_SYS): Update. + (_GL_CXXALIAS_SYS): Update. + (_GL_CXXALIASWARN): Update. + (_GL_WARN_ON_USE): Update. + * import/fnmatch_loop.c (FCT): Update. + (EXT): Update. + * import/fpucw.h (GET_FPUCW): Update. + (SET_FPUCW): Update. + * import/frexp.c: Update. + * import/frexpl.c: Update. + * import/fstat.c (stat): Update. + (fstat): Update. + (WINDOWS_NATIVE): Update. + (fstat_nothrow): Update. + (WIN32_LEAN_AND_MEAN): Update. + * import/fstatat.c (normal_fstatat): Update. + (rpl_fstatat): Update. + * import/getcwd-lgpl.c (rpl_getcwd): Update. + * import/getcwd.c (getcwd_nothrow): Update. + (getcwd_system): Update. + (__getcwd): Update. + * import/getdtablesize.c (if): Update. + (_setmaxstdio): Update. + (_setmaxstdio_nothrow): Update. + (getdtablesize): Update. + * import/getlogin_r.c (if): Update. + (getlogin_r): Update. + * import/getprogname.c (getprogname): Update. + * import/getprogname.h: Update. + * import/gettext.h (if): Update. + * import/gettimeofday.c (WINDOWS_NATIVE): Update. + (localtime): Update. + (GetProcAddress): Update. + (gmtime): Update. + (void): Update. + (struct tm): Update. + (rpl_localtime): Update. + (initialize): Update. + (rpl_gmtime): Update. + (tzset): Update. + (rpl_tzset): Update. + * import/glob-libc.h (_Restrict_): Update. + (__size_t): Update. + (__need_size_t): Update. + (glob): Update. + (globfree): Update. + (__REDIRECT_NTH): Update. + (glob64): Update. + (globfree64): Update. + (glob_pattern_p): Update. + * import/glob.c (POSIX): Update. + (if): Update. + (__set_errno): Update. + (getpwnam_r): Update. + (__lstat64): Update. + (FLEXIBLE_ARRAY_MEMBER): Update. + (__glob_pattern_p): Update. + (GETPW_R_SIZE_MAX): Update. + (GET_LOGIN_NAME_MAX): Update. + (DT_UNKNOWN): Update. + (DT_DIR): Update. + (DT_LNK): Update. + (D_TYPE_TO_RESULT): Update. + (readdir_result_might_be_symlink): Update. + (readdir_result_might_be_dir): Update. + (readdir_result_type): Update. + (D_INO_TO_RESULT): Update. + (READDIR_RESULT_INITIALIZER): Update. + (attribute_hidden): Update. + (__attribute_noinline__): Update. + (__builtin_expect): Update. + (__glibc_unlikely): Update. + (__has_builtin): Update. + (__glob_pattern_type): Update. + (is_dir): Update. + (glob): Update. + (globfree): Update. + (libc_hidden_def): Update. + (DIRSEP_CHAR): Update. + (prefix_array): Update. + (weak_alias): Update. + (link_exists2_p): Update. + (link_exists_p): Update. + (glob_in_dir): Update. + (GLOBNAMES_MEMBERS): Update. + * import/glob.in.h (_GL_GLOB_H): Update. + (_): Update. + (__BEGIN_DECLS): Update. + (__END_DECLS): Update. + (_Restrict_): Update. + (__THROW): Update. + (__THROWNL): Update. + (__size_t): Update. + (__USE_GNU): Update. + (glob): Update. + (globfree): Update. + (glob_pattern_p): Update. + (__glob_pattern_p): Update. + (__GLOB_GNULIB): Update. + (_GL_FUNCDECL_RPL): Update. + (_GL_CXXALIAS_RPL): Update. + (_GL_FUNCDECL_SYS): Update. + (_GL_CXXALIAS_SYS): Update. + (_GL_WARN_ON_USE): Update. + * import/glob_internal.h: New file. + * import/glob_pattern_p.c: New file. + * import/globfree.c: New file. + * import/glthread/lock.c (glthread_rwlock_init_for_glibc): Update. + (glthread_rwlock_rdlock_multithreaded): Update. + (glthread_once_call): Update. + (glthread_once_multithreaded): Update. + (glthread_once_singlethreaded): Update. + (glthread_recursive_lock_init_multithreaded): Update. + (glthread_recursive_lock_lock_multithreaded): Update. + (glthread_recursive_lock_unlock_multithreaded): Update. + (glthread_recursive_lock_destroy_multithreaded): Update. + (glthread_lock_init_func): Update. + (glthread_lock_lock_func): Update. + (glthread_lock_unlock_func): Update. + (glthread_lock_destroy_func): Update. + (gl_waitqueue_t): Update. + (gl_waitqueue_init): Update. + (gl_waitqueue_add): Update. + (gl_waitqueue_notify_first): Update. + (gl_waitqueue_notify_all): Update. + (glthread_rwlock_init_func): Update. + (glthread_rwlock_rdlock_func): Update. + (glthread_rwlock_wrlock_func): Update. + (glthread_rwlock_unlock_func): Update. + (glthread_rwlock_destroy_func): Update. + (glthread_recursive_lock_init_func): Update. + (glthread_recursive_lock_lock_func): Update. + (glthread_recursive_lock_unlock_func): Update. + (glthread_recursive_lock_destroy_func): Update. + (glthread_once_func): Update. + * import/glthread/lock.h (c11_threads_in_use): Update. + (pthread_in_use): Update. + (gl_rwlock_initializer): Update. + (glthread_rwlock_init): Update. + (glthread_rwlock_init_for_glibc): Update. + (pth_in_use): Update. + (gl_lock_define): Update. + (gl_lock_define_initialized): Update. + (gl_lock_initializer): Update. + (glthread_lock_init): Update. + (glthread_lock_lock): Update. + (glthread_lock_unlock): Update. + (glthread_lock_destroy): Update. + (gl_rwlock_define): Update. + (gl_rwlock_define_initialized): Update. + (glthread_rwlock_rdlock): Update. + (glthread_rwlock_wrlock): Update. + (glthread_rwlock_unlock): Update. + (glthread_rwlock_destroy): Update. + (gl_recursive_lock_define): Update. + (gl_recursive_lock_define_initialized): Update. + (gl_recursive_lock_initializer): Update. + (glthread_recursive_lock_init): Update. + (glthread_recursive_lock_lock): Update. + (glthread_recursive_lock_unlock): Update. + (glthread_recursive_lock_destroy): Update. + (gl_once_define): Update. + (glthread_once): Update. + (glthread_once_multithreaded): Update. + (glthread_once_singlethreaded): Update. + (thread_in_use): Update. + (glthread_recursive_lock_init_multithreaded): Update. + (glthread_recursive_lock_lock_multithreaded): Update. + (glthread_recursive_lock_unlock_multithreaded): Update. + (glthread_recursive_lock_destroy_multithreaded): Update. + (glthread_lock_init_func): Update. + (glthread_lock_lock_func): Update. + (glthread_lock_unlock_func): Update. + (glthread_lock_destroy_func): Update. + (glthread_rwlock_init_func): Update. + (glthread_rwlock_rdlock_func): Update. + (glthread_rwlock_wrlock_func): Update. + (glthread_rwlock_unlock_func): Update. + (glthread_rwlock_destroy_func): Update. + (glthread_recursive_lock_init_func): Update. + (glthread_recursive_lock_lock_func): Update. + (glthread_recursive_lock_unlock_func): Update. + (glthread_recursive_lock_destroy_func): Update. + (glthread_once_func): Update. + * import/glthread/threadlib.c: Update. + * import/hard-locale.c: Update. + * import/hard-locale.h: Update. + * import/inet_ntop.c: Update. + * import/intprops.h (__has_builtin): Update. + (_GL_INT_CONVERT): Update. + (_GL_INT_NEGATE_CONVERT): Update. + (verify): Update. + (_GL_HAS_BUILTIN_OVERFLOW): Update. + (_GL_HAS_BUILTIN_ADD_OVERFLOW): Update. + (_GL_HAS_BUILTIN_OVERFLOW_P): Update. + (_GL_HAS_BUILTIN_MUL_OVERFLOW): Update. + (_GL_BINARY_OP_OVERFLOW): Update. + (INT_ADD_WRAPV): Update. + (INT_SUBTRACT_WRAPV): Update. + (INT_MULTIPLY_WRAPV): Update. + (_GL_INT_OP_WRAPV): Update. + (_GL_INT_OP_WRAPV_SMALLISH): Update. + (_GL_INT_OP_WRAPV_LONGISH): Update. + (_GL_INT_OP_CALC): Update. + (_GL_INT_OP_CALC1): Update. + (_GL_INT_OP_WRAPV_VIA_UNSIGNED): Update. + (_GL_INT_ADD_RANGE_OVERFLOW): Update. + (_GL_INT_SUBTRACT_RANGE_OVERFLOW): Update. + (_GL_INT_MULTIPLY_RANGE_OVERFLOW): Update. + * import/inttypes.in.h (if): Update. + * import/isnan.c: Update. + * import/isnand-nolibm.h: Update. + * import/isnand.c: Update. + * import/isnanl-nolibm.h: Update. + * import/isnanl.c: Update. + * import/itold.c: Update. + * import/libc-config.h: New file. + * import/limits.in.h (LLONG_MIN): Update. + (LLONG_MAX): Update. + (ULLONG_MAX): Update. + (WORD_BIT): Update. + (LONG_BIT): Update. + * import/localcharset.c (setlocale): Update. + (relocate): Update. + (O_NOFOLLOW): Update. + (ISSLASH): Update. + (DIRECTORY_SEPARATOR): Update. + (getc): Update. + (volatile): Update. + (get_charset_aliases): Update. + (struct table_entry): Update. + (alias_table_defined): Update. + (locale_table_defined): Update. + (locale_charset): Update. + (if): Update. + * import/localcharset.h: Update. + * import/localtime-buffer.c: New file. + * import/localtime-buffer.h: New file. + * import/lstat.c (rpl_lstat): Update. + * import/m4/00gnulib.m4: Update. + * import/m4/__inline.m4: New file. + * import/m4/absolute-header.m4: Update. + * import/m4/alloca.m4: Update. + * import/m4/arpa_inet_h.m4: Update. + * import/m4/builtin-expect.m4: New file. + * import/m4/canonicalize.m4: Update. + * import/m4/chdir-long.m4: Update. + * import/m4/close.m4: Update. + * import/m4/closedir.m4: Update. + * import/m4/codeset.m4: Update. + * import/m4/configmake.m4: Remove. + * import/m4/d-ino.m4: Update. + * import/m4/d-type.m4: Update. + * import/m4/dirent_h.m4: Update. + * import/m4/dirfd.m4: Update. + * import/m4/dirname.m4: Update. + * import/m4/double-slash-root.m4: Update. + * import/m4/dup.m4: Update. + * import/m4/dup2.m4: Update. + * import/m4/eealloc.m4: Update. + * import/m4/environ.m4: Update. + * import/m4/errno_h.m4: Update. + * import/m4/error.m4: Update. + * import/m4/exponentd.m4: Update. + * import/m4/exponentl.m4: Update. + * import/m4/extensions.m4: Update. + * import/m4/extern-inline.m4: Update. + * import/m4/fchdir.m4: Update. + * import/m4/fcntl-o.m4: Update. + * import/m4/fcntl.m4: Update. + * import/m4/fcntl_h.m4: Update. + * import/m4/fdopendir.m4: Update. + * import/m4/filenamecat.m4: Update. + * import/m4/flexmember.m4: Update. + * import/m4/float_h.m4: Update. + * import/m4/fnmatch.m4: Update. + * import/m4/fnmatch_h.m4: New file. + * import/m4/fpieee.m4: Update. + * import/m4/frexp.m4: Update. + * import/m4/frexpl.m4: Update. + * import/m4/fstat.m4: Update. + * import/m4/fstatat.m4: Update. + * import/m4/getcwd-abort-bug.m4: Update. + * import/m4/getcwd-path-max.m4: Update. + * import/m4/getcwd.m4: Update. + * import/m4/getdtablesize.m4: Update. + * import/m4/getlogin.m4: New file. + * import/m4/getlogin_r.m4: Update. + * import/m4/getpagesize.m4: New file. + * import/m4/getprogname.m4: Update. + * import/m4/gettimeofday.m4: Update. + * import/m4/glibc21.m4: Remove. + * import/m4/glob.m4: Update. + * import/m4/glob_h.m4: New file. + * import/m4/gnulib-cache.m4: Update. + * import/m4/gnulib-common.m4: Update. + * import/m4/gnulib-comp.m4: Update. + * import/m4/gnulib-tool.m4: Update. + * import/m4/hard-locale.m4: Remove. + * import/m4/host-cpu-c-abi.m4: New file. + * import/m4/include_next.m4: Update. + * import/m4/inet_ntop.m4: Update. + * import/m4/inttypes-pri.m4: Update. + * import/m4/inttypes.m4: Update. + * import/m4/isnand.m4: Update. + * import/m4/isnanl.m4: Update. + * import/m4/largefile.m4: Update. + * import/m4/lib-ld.m4: Update. + * import/m4/lib-link.m4: Update. + * import/m4/lib-prefix.m4: Update. + * import/m4/limits-h.m4: Update. + * import/m4/localcharset.m4: Update. + * import/m4/locale-fr.m4: Update. + * import/m4/locale-ja.m4: Update. + * import/m4/locale-zh.m4: Update. + * import/m4/localtime-buffer.m4: New file. + * import/m4/lock.m4: Update. + * import/m4/longlong.m4: Update. + * import/m4/lstat.m4: Update. + * import/m4/malloc.m4: Update. + * import/m4/malloca.m4: Update. + * import/m4/math_h.m4: Update. + * import/m4/mbrtowc.m4: Update. + * import/m4/mbsinit.m4: Update. + * import/m4/mbsrtowcs.m4: Update. + * import/m4/mbstate_t.m4: Update. + * import/m4/memchr.m4: Update. + * import/m4/memmem.m4: Update. + * import/m4/mempcpy.m4: Update. + * import/m4/memrchr.m4: Update. + * import/m4/mkdir.m4: Update. + * import/m4/mkdtemp.m4: Update. + * import/m4/mkostemp.m4: Update. + * import/m4/mmap-anon.m4: Update. + * import/m4/mode_t.m4: Update. + * import/m4/msvc-inval.m4: Update. + * import/m4/msvc-nothrow.m4: Update. + * import/m4/multiarch.m4: Update. + * import/m4/netinet_in_h.m4: Update. + * import/m4/nocrash.m4: Update. + * import/m4/off_t.m4: Update. + * import/m4/onceonly.m4: Remove. + * import/m4/open-cloexec.m4: New file. + * import/m4/open-slash.m4: New file. + * import/m4/open.m4: Update. + * import/m4/openat.m4: Update. + * import/m4/opendir.m4: Update. + * import/m4/pathmax.m4: Update. + * import/m4/pthread_rwlock_rdlock.m4: New file. + * import/m4/rawmemchr.m4: Update. + * import/m4/readdir.m4: Update. + * import/m4/readlink.m4: Update. + * import/m4/realloc.m4: Update. + * import/m4/rename.m4: Update. + * import/m4/rewinddir.m4: Update. + * import/m4/rmdir.m4: Update. + * import/m4/save-cwd.m4: Update. + * import/m4/secure_getenv.m4: Remove. + * import/m4/setenv.m4: Update. + * import/m4/signal_h.m4: Update. + * import/m4/socklen.m4: Update. + * import/m4/sockpfaf.m4: Update. + * import/m4/ssize_t.m4: Update. + * import/m4/stat-time.m4: New file. + * import/m4/stat.m4: Update. + * import/m4/std-gnu11.m4: New file. + * import/m4/stdalign.m4: Update. + * import/m4/stdbool.m4: Update. + * import/m4/stddef_h.m4: Update. + * import/m4/stdint.m4: Update. + * import/m4/stdio_h.m4: Update. + * import/m4/stdlib_h.m4: Update. + * import/m4/strchrnul.m4: Update. + * import/m4/strdup.m4: Update. + * import/m4/strerror.m4: Update. + * import/m4/strerror_r.m4: Update. + * import/m4/string_h.m4: Update. + * import/m4/strstr.m4: Update. + * import/m4/strtok_r.m4: Update. + * import/m4/sys_socket_h.m4: Update. + * import/m4/sys_stat_h.m4: Update. + * import/m4/sys_time_h.m4: Update. + * import/m4/sys_types_h.m4: Update. + * import/m4/sys_uio_h.m4: Update. + * import/m4/tempname.m4: Update. + * import/m4/threadlib.m4: Update. + * import/m4/time_h.m4: Update. + * import/m4/time_r.m4: Update. + * import/m4/unistd-safer.m4: Update. + * import/m4/unistd_h.m4: Update. + * import/m4/warn-on-use.m4: Update. + * import/m4/wchar_h.m4: Update. + * import/m4/wchar_t.m4: Update. + * import/m4/wctype_h.m4: Update. + * import/m4/wint_t.m4: Update. + * import/malloc.c: Update. + * import/malloc/scratch_buffer.h: New file. + * import/malloc/scratch_buffer_grow.c: New file. + * import/malloc/scratch_buffer_grow_preserve.c: New file. + * import/malloc/scratch_buffer_set_array_size.c: New file. + * import/malloca.c (MAGIC_NUMBER): Update. + (MAGIC_SIZE): Update. + (struct preliminary_header): Update. + (HEADER_SIZE): Update. + (union header): Update. + (verify): Update. + (HASH_TABLE_SIZE): Update. + (freea): Update. + * import/malloca.h (malloca): Update. + (nmalloca): Update. + * import/malloca.valgrind: Remove. + * import/math.in.h (_GL_MATH_CXX_REAL_FLOATING_DECL_2): Update. + (func): Update. + (rpl_func): Update. + (f): Update. + (d): Update. + (l): Update. + (_GL_WARN_ON_USE): Update. + (_GL_WARN_ON_USE_ATTRIBUTE): Update. + (FP_ILOGB0): Update. + (FP_ILOGBNAN): Update. + (acosf): Update. + (_GL_FUNCDECL_RPL): Update. + (_GL_CXXALIAS_RPL): Update. + (asinf): Update. + (atanf): Update. + (atan2f): Update. + (cosf): Update. + (coshf): Update. + (expf): Update. + (expl): Update. + (expm1l): Update. + (ilogbl): Update. + (rintl): Update. + (sinf): Update. + (sinhf): Update. + (sqrtf): Update. + (tanf): Update. + (tanhf): Update. + (isfinite): Update. + (isinf): Update. + (isnan): Update. + (GNULIB_defined_signbit): Update. + (signbit): Update. + * import/mbrtowc.c (FALLTHROUGH): Update. + (locale_enc): Update. + (locale_enc_cached): Update. + (gl_lock_define_initialized): Update. + (mbrtowc): Update. + * import/mbsinit.c (if): Update. + (mbsinit): Update. + * import/mbsrtowcs-impl.h: Update. + * import/mbsrtowcs-state.c: Update. + * import/mbsrtowcs.c: Update. + * import/memchr.c: Update. + * import/memchr.valgrind: Update. + * import/memmem.c (__builtin_expect): Update. + * import/mempcpy.c: Update. + * import/memrchr.c (__memrchr): Update. + * import/mkdir.c (if): Update. + * import/mkdtemp.c: Update. + * import/mkostemp.c: Update. + * import/msvc-inval.c: Update. + * import/msvc-inval.h: Update. + * import/msvc-nothrow.c: Update. + * import/msvc-nothrow.h (if): Update. + * import/netinet_in.in.h: Update. + * import/open.c (open): Update. + (if): Update. + * import/openat-die.c: Update. + * import/openat-priv.h: Update. + * import/openat-proc.c: Update. + * import/openat.c (rpl_openat): Update. + * import/openat.h: Update. + * import/opendir.c: Update. + * import/pathmax.h (if): Update. + * import/pipe-safer.c: Update. + * import/rawmemchr.c: Update. + * import/rawmemchr.valgrind: Update. + * import/readdir.c (readdir): Update. + * import/readlink.c: Update. + * import/realloc.c: Update. + * import/ref-add.sin: Remove. + * import/ref-del.sin: Remove. + * import/rename.c (if): Update. + * import/rewinddir.c: Update. + * import/rmdir.c: Update. + * import/same-inode.h (SAME_INODE): Update. + * import/save-cwd.c (save_cwd): Update. + * import/save-cwd.h: Update. + * import/scratch_buffer.h: New file. + * import/secure_getenv.c: Remove. + * import/setenv.c: Update. + * import/signal.in.h: Update. + * import/stat-time.c: New file. + * import/stat-time.h: New file. + * import/stat-w32.c: New file. + * import/stat-w32.h: New file. + * import/stat.c (if): Update. + (stat): Update. + (REPLACE_FUNC_STAT_DIR): Update. + (WINDOWS_NATIVE): Update. + (WIN32_LEAN_AND_MEAN): Update. + (is_unc_root): Update. + (rpl_stat): Update. + * import/stdalign.in.h (elif): Update. + * import/stdbool.in.h: Update. + * import/stddef.in.h (_GL_STDDEF_ALIGNAS): Update. + (max_align_t): Update. + (GNULIB_defined_max_align_t): Update. + * import/stdint.in.h (WINT_MIN): Update. + (WINT_MAX): Update. + (_STDINT_MIN): Update. + (_STDINT_UNSIGNED_MIN): Update. + (_STDINT_SIGNED_MIN): Update. + (PTRDIFF_MIN): Update. + (SIG_ATOMIC_MIN): Update. + (WCHAR_MIN): Update. + * import/stdio.in.h (if): Update. + * import/stdlib.in.h (if): Update. + (_GL_WARN_ON_USE): Update. + (_GL_FUNCDECL_SYS): Update. + (random): Update. + (_GL_FUNCDECL_RPL): Update. + (_GL_CXXALIAS_RPL): Update. + (srandom): Update. + (initstate): Update. + (setstate): Update. + (_GL_CXXALIAS_SYS): Update. + (_GL_CXXALIASWARN): Update. + (GNULIB_defined_strtod_function): Update. + (strtold): Update. + (GNULIB_defined_strtold_function): Update. + * import/str-two-way.h: Update. + * import/strchrnul.c: Update. + * import/strchrnul.valgrind: Update. + * import/strdup.c: Update. + * import/streq.h: Update. + * import/strerror-override.c: Update. + * import/strerror-override.h: Update. + * import/strerror.c (strerror): Update. + * import/strerror_r.c (safe_copy): Update. + * import/string.in.h (_GL_FUNCDECL_SYS): Update. + (_GL_CXXALIAS_SYS): Update. + (_GL_CXXALIASWARN): Update. + (_GL_WARN_ON_USE): Update. + * import/stripslash.c: Update. + * import/strnlen1.c: Update. + * import/strnlen1.h: Update. + * import/strstr.c (__builtin_expect): Update. + * import/strtok_r.c: Update. + * import/sys_socket.in.h (CMSG_SPACE): Update. + (CMSG_LEN): Update. + (struct sockaddr_storage): Update. + (SO_REUSEPORT): Update. + (_GL_WARN_ON_USE): Update. + * import/sys_stat.in.h (if): Update. + (stat): Update. + (struct stat): Update. + (st_atime): Update. + (st_mtime): Update. + (st_ctime): Update. + (_GL_WINDOWS_STAT_TIMESPEC): Update. + (GNULIB_defined_struct_stat): Update. + (_S_IFBLK): Update. + (_S_IFLNK): Update. + (_S_IFSOCK): Update. + (fstat): Update. + (fstatat): Update. + (lstat): Update. + (stat64): Update. + (_stat64): Update. + (_stat32i64): Update. + (_stati64): Update. + (_stat32): Update. + (_stat64i32): Update. + * import/sys_time.in.h: Update. + * import/sys_types.in.h (dev_t): Update. + (GNULIB_defined_dev_t): Update. + (ino_t): Update. + (GNULIB_defined_ino_t): Update. + (_GL_WINDOWS_STAT_INODES): Update. + (if): Update. + * import/sys_uio.in.h: Update. + * import/tempname.c (__secure_getenv): Update. + (try_nocreate): Update. + * import/tempname.h: Update. + * import/time.in.h (tzset): Update. + (_GL_FUNCDECL_RPL): Update. + (_GL_CXXALIAS_RPL): Update. + (_GL_FUNCDECL_SYS): Update. + (_GL_CXXALIAS_SYS): Update. + (_GL_CXXALIASWARN): Update. + (ctime): Update. + (strftime): Update. + * import/time_r.c: Update. + * import/unistd--.h: Update. + * import/unistd-safer.h: Update. + * import/unistd.in.h (if): Update. + (elif): Update. + (__need_getopt): Update. + (access): Update. + (_GL_FUNCDECL_RPL): Update. + (_GL_CXXALIAS_RPL): Update. + (_GL_CXXALIAS_SYS): Update. + (_GL_CXXALIASWARN): Update. + (_GL_WARN_ON_USE): Update. + (_GL_FUNCDECL_SYS): Update. + (__declspec): Update. + (_GL_WARN_ON_USE_ATTRIBUTE): Update. + (faccessat): Update. + (getpass): Update. + (truncate): Update. + * import/unsetenv.c: Update. + * import/verify.h (if): Update. + (_GL_HAVE__STATIC_ASSERT): Update. + (_GL_HAVE_STATIC_ASSERT): Update. + (_GL_HAVE__STATIC_ASSERT1): Update. + (_GL_HAVE_STATIC_ASSERT1): Update. + (_GL_VERIFY): Update. + (_Static_assert): Update. + (_GL_HAS_BUILTIN_TRAP): Update. + (_GL_HAS_BUILTIN_UNREACHABLE): Update. + (verify_true): Update. + (verify): Update. + (__has_builtin): Update. + (elif): Update. + (assume): Update. + * import/warn-on-use.h: Rename from import/extra/snippet/warn-on-use.h. + * import/wchar.in.h (if): Update. + (wcsftime): Update. + (_GL_FUNCDECL_RPL): Update. + (_GL_CXXALIAS_RPL): Update. + (_GL_FUNCDECL_SYS): Update. + (_GL_CXXALIAS_SYS): Update. + (_GL_CXXALIASWARN): Update. + (_GL_WARN_ON_USE): Update. + * import/wctype.in.h (rpl_iswalnum): Update. + (rpl_iswalpha): Update. + (rpl_iswblank): Update. + (rpl_iswcntrl): Update. + (rpl_iswdigit): Update. + (rpl_iswgraph): Update. + (rpl_iswlower): Update. + (rpl_iswprint): Update. + (rpl_iswpunct): Update. + (rpl_iswspace): Update. + (rpl_iswupper): Update. + (rpl_iswxdigit): Update. + (rpl_towlower): Update. + (rpl_towupper): Update. + (iswalnum): Update. + (iswalpha): Update. + (iswblank): Update. + (iswcntrl): Update. + (iswdigit): Update. + (iswgraph): Update. + (iswlower): Update. + (iswprint): Update. + (iswpunct): Update. + (iswspace): Update. + (iswupper): Update. + (iswxdigit): Update. + (towlower): Update. + (towupper): Update. + * import/windows-initguard.h: New file. + * import/windows-mutex.c: New file. + * import/windows-mutex.h: New file. + * import/windows-once.c: New file. + * import/windows-once.h: New file. + * import/windows-recmutex.c: New file. + * import/windows-recmutex.h: New file. + * import/windows-rwlock.c: New file. + * import/windows-rwlock.h: New file. + * import/xalloc-oversized.h: New file. + * patches/0001-Fix-PR-gdb-23558-Use-system-s-getcwd-when-cross-comp.patch: Remove. + * patches/0002-mkostemp-mkostemps-Fix-compilation-error-in-C-mode-o.patch: Remove. + * patches/0003-Fix-glob-c-Coverity-issues.patch: Remove. + * update-gnulib.sh: Update to latest gnulib and don't apply patches + anymore. Also updates the patch -p flag to the current directory structure in + case patches are needed again in the future. + 2019-11-15 Tom Tromey <tromey@adacore.com> * aclocal.m4, configure, Makefile.in, import/Makefile.in: diff -Nru gdb-9.1/gnulib/config.in gdb-10.2/gnulib/config.in --- gdb-9.1/gnulib/config.in 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/config.in 2021-04-25 04:06:26.000000000 +0000 @@ -26,9 +26,6 @@ /* Define to 1 if using `alloca.c'. */ #undef C_ALLOCA -/* Define to 1 if the C locale may have encoding errors. */ -#undef C_LOCALE_MAYBE_EILSEQ - /* Define as the bit index in the word where to find bit 0 of the exponent of 'double'. */ #undef DBL_EXPBIT0_BIT @@ -56,12 +53,10 @@ #undef FCNTL_DUPFD_BUGGY /* Define to nothing if C supports flexible array members, and to 1 if it does - not. That way, with a declaration like 'struct s { int n; double + not. That way, with a declaration like 'struct s { int n; short d[FLEXIBLE_ARRAY_MEMBER]; };', the struct hack can be used with pre-C99 - compilers. When computing the size of such an object, don't use 'sizeof - (struct s)' as it overestimates the size. Use 'offsetof (struct s, d)' - instead. Don't use 'offsetof (struct s, d[0])', as this doesn't work with - MSVC and with C++ compilers. */ + compilers. Use 'FLEXSIZEOF (struct s, d, N * sizeof (short))' to calculate + the size in bytes of such a struct containing an N-element array. */ #undef FLEXIBLE_ARRAY_MEMBER /* Define to 1 if mkdir mistakenly creates a directory given with a trailing @@ -88,6 +83,14 @@ #undef GNULIB_FDOPENDIR /* Define to a C preprocessor expression that evaluates to 1 or 0, depending + whether the gnulib module fd-safer-flag shall be considered present. */ +#undef GNULIB_FD_SAFER_FLAG + +/* Define to a C preprocessor expression that evaluates to 1 or 0, depending + whether the gnulib module fnmatch-gnu shall be considered present. */ +#undef GNULIB_FNMATCH_GNU + +/* Define to a C preprocessor expression that evaluates to 1 or 0, depending whether the gnulib module fscanf shall be considered present. */ #undef GNULIB_FSCANF @@ -96,6 +99,10 @@ #undef GNULIB_GETCWD /* Define to a C preprocessor expression that evaluates to 1 or 0, depending + whether the gnulib module isblank shall be considered present. */ +#undef GNULIB_ISBLANK + +/* Define to a C preprocessor expression that evaluates to 1 or 0, depending whether the gnulib module lock shall be considered present. */ #undef GNULIB_LOCK @@ -104,6 +111,10 @@ #undef GNULIB_MKOSTEMP /* Define to a C preprocessor expression that evaluates to 1 or 0, depending + whether the gnulib module msvc-nothrow shall be considered present. */ +#undef GNULIB_MSVC_NOTHROW + +/* Define to a C preprocessor expression that evaluates to 1 or 0, depending whether the gnulib module openat shall be considered present. */ #undef GNULIB_OPENAT @@ -119,6 +130,13 @@ whether the gnulib module strerror shall be considered present. */ #undef GNULIB_STRERROR +/* Define to a C preprocessor expression that evaluates to 1 or 0, depending + whether the gnulib module strerror_r-posix shall be considered present. */ +#undef GNULIB_STRERROR_R_POSIX + +/* Define to 1 when the gnulib module btowc should be tested. */ +#undef GNULIB_TEST_BTOWC + /* Define to 1 when the gnulib module canonicalize_file_name should be tested. */ #undef GNULIB_TEST_CANONICALIZE_FILE_NAME @@ -156,6 +174,9 @@ /* Define to 1 when the gnulib module fdopendir should be tested. */ #undef GNULIB_TEST_FDOPENDIR +/* Define to 1 when the gnulib module fnmatch should be tested. */ +#undef GNULIB_TEST_FNMATCH + /* Define to 1 when the gnulib module frexp should be tested. */ #undef GNULIB_TEST_FREXP @@ -177,9 +198,15 @@ /* Define to 1 when the gnulib module getlogin_r should be tested. */ #undef GNULIB_TEST_GETLOGIN_R +/* Define to 1 when the gnulib module getrandom should be tested. */ +#undef GNULIB_TEST_GETRANDOM + /* Define to 1 when the gnulib module gettimeofday should be tested. */ #undef GNULIB_TEST_GETTIMEOFDAY +/* Define to 1 when the gnulib module glob should be tested. */ +#undef GNULIB_TEST_GLOB + /* Define to 1 when the gnulib module lstat should be tested. */ #undef GNULIB_TEST_LSTAT @@ -195,6 +222,9 @@ /* Define to 1 when the gnulib module mbsrtowcs should be tested. */ #undef GNULIB_TEST_MBSRTOWCS +/* Define to 1 when the gnulib module mbtowc should be tested. */ +#undef GNULIB_TEST_MBTOWC + /* Define to 1 when the gnulib module memchr should be tested. */ #undef GNULIB_TEST_MEMCHR @@ -246,12 +276,12 @@ /* Define to 1 when the gnulib module rmdir should be tested. */ #undef GNULIB_TEST_RMDIR -/* Define to 1 when the gnulib module secure_getenv should be tested. */ -#undef GNULIB_TEST_SECURE_GETENV - /* Define to 1 when the gnulib module setenv should be tested. */ #undef GNULIB_TEST_SETENV +/* Define to 1 when the gnulib module setlocale_null should be tested. */ +#undef GNULIB_TEST_SETLOCALE_NULL + /* Define to 1 when the gnulib module stat should be tested. */ #undef GNULIB_TEST_STAT @@ -267,6 +297,9 @@ /* Define to 1 when the gnulib module strerror_r should be tested. */ #undef GNULIB_TEST_STRERROR_R +/* Define to 1 when the gnulib module strnlen should be tested. */ +#undef GNULIB_TEST_STRNLEN + /* Define to 1 when the gnulib module strstr should be tested. */ #undef GNULIB_TEST_STRSTR @@ -279,6 +312,12 @@ /* Define to 1 when the gnulib module unsetenv should be tested. */ #undef GNULIB_TEST_UNSETENV +/* Define to 1 when the gnulib module wmemchr should be tested. */ +#undef GNULIB_TEST_WMEMCHR + +/* Define to 1 when the gnulib module wmempcpy should be tested. */ +#undef GNULIB_TEST_WMEMPCPY + /* Define to 1 if you have 'alloca' after including <alloca.h>, a header that may be supplied by this distribution. */ #undef HAVE_ALLOCA @@ -290,21 +329,27 @@ /* Define to 1 if you have the <arpa/inet.h> header file. */ #undef HAVE_ARPA_INET_H +/* Define to 1 if you have the <bcrypt.h> header file. */ +#undef HAVE_BCRYPT_H + /* Define to 1 if you have the <bp-sym.h> header file. */ #undef HAVE_BP_SYM_H -/* Define to 1 if you have the 'btowc' function. */ +/* Define to 1 if you have the `btowc' function. */ #undef HAVE_BTOWC -/* Define to 1 if you have the 'canonicalize_file_name' function. */ +/* Define to 1 if you have the `canonicalize_file_name' function. */ #undef HAVE_CANONICALIZE_FILE_NAME -/* Define to 1 if you have the 'catgets' function. */ +/* Define to 1 if you have the `catgets' function. */ #undef HAVE_CATGETS /* Define to 1 if you have the `closedir' function. */ #undef HAVE_CLOSEDIR +/* Define to 1 if you have the <crtdefs.h> header file. */ +#undef HAVE_CRTDEFS_H + /* Define to 1 if you have the declaration of `alarm', and to 0 if you don't. */ #undef HAVE_DECL_ALARM @@ -325,10 +370,6 @@ */ #undef HAVE_DECL_GETCWD -/* Define to 1 if you have the declaration of `getc_unlocked', and to 0 if you - don't. */ -#undef HAVE_DECL_GETC_UNLOCKED - /* Define to 1 if you have the declaration of `getdtablesize', and to 0 if you don't. */ #undef HAVE_DECL_GETDTABLESIZE @@ -345,10 +386,6 @@ don't. */ #undef HAVE_DECL_INET_NTOP -/* Define to 1 if you have the declaration of `isblank', and to 0 if you - don't. */ -#undef HAVE_DECL_ISBLANK - /* Define to 1 if you have the declaration of `localtime_r', and to 0 if you don't. */ #undef HAVE_DECL_LOCALTIME_R @@ -389,12 +426,13 @@ */ #undef HAVE_DECL_STRDUP -/* Define to 1, since you should have the declaration of strerror_r. */ +/* Define to 1 if you have the declaration of `strerror_r', and to 0 if you + don't. */ #undef HAVE_DECL_STRERROR_R -/* Define to 1 if you have the declaration of 'strerror_r' in the system - include files, or to 0 otherwise. */ -#undef HAVE_DECL_STRERROR_R_ORIG +/* Define to 1 if you have the declaration of `strnlen', and to 0 if you + don't. */ +#undef HAVE_DECL_STRNLEN /* Define to 1 if you have the declaration of `strtok_r', and to 0 if you don't. */ @@ -427,70 +465,73 @@ /* Define if you have the declaration of environ. */ #undef HAVE_ENVIRON_DECL -/* Define to 1 if you have the 'fchdir' function. */ +/* Define to 1 if you have the `fchdir' function. */ #undef HAVE_FCHDIR -/* Define to 1 if you have the 'fcntl' function. */ +/* Define to 1 if you have the `fcntl' function. */ #undef HAVE_FCNTL -/* Define to 1 if you have the 'fdopendir' function. */ +/* Define to 1 if you have the `fdopendir' function. */ #undef HAVE_FDOPENDIR /* Define to 1 if you have the <features.h> header file. */ #undef HAVE_FEATURES_H +/* Define to 1 if you have the `fnmatch' function. */ +#undef HAVE_FNMATCH + +/* Define to 1 if you have the <fnmatch.h> header file. */ +#undef HAVE_FNMATCH_H + /* Define if the frexp() function is available and works. */ #undef HAVE_FREXP /* Define if the frexpl() function is available. */ #undef HAVE_FREXPL -/* Define to 1 if you have the 'fstatat' function. */ +/* Define to 1 if you have the `fstatat' function. */ #undef HAVE_FSTATAT -/* Define to 1 if you have the 'getcwd' function. */ +/* Define to 1 if you have the `getcwd' function. */ #undef HAVE_GETCWD /* Define to 1 if getcwd works, but with shorter paths than is generally tested with the replacement. */ #undef HAVE_GETCWD_SHORTER -/* Define to 1 if you have the 'getdtablesize' function. */ +/* Define to 1 if you have the `getdtablesize' function. */ #undef HAVE_GETDTABLESIZE -/* Define to 1 if you have the 'getegid' function. */ -#undef HAVE_GETEGID - -/* Define to 1 if you have the 'geteuid' function. */ -#undef HAVE_GETEUID - -/* Define to 1 if you have the 'getexecname' function. */ +/* Define to 1 if you have the `getexecname' function. */ #undef HAVE_GETEXECNAME -/* Define to 1 if you have the 'getgid' function. */ -#undef HAVE_GETGID - -/* Define to 1 if you have the 'getlogin_r' function. */ +/* Define to 1 if you have the `getlogin_r' function. */ #undef HAVE_GETLOGIN_R -/* Define to 1 if you have the `getpagesize' function. */ +/* Define to 1 if the system has the 'getpagesize' function. */ #undef HAVE_GETPAGESIZE -/* Define to 1 if you have the 'getprogname' function. */ +/* Define to 1 if you have the `getprogname' function. */ #undef HAVE_GETPROGNAME -/* Define to 1 if you have the 'getpwnam_r' function. */ +/* Define to 1 if you have the `getpwnam_r' function. */ #undef HAVE_GETPWNAM_R -/* Define to 1 if you have the 'gettimeofday' function. */ +/* Define to 1 if you have the `getrandom' function. */ +#undef HAVE_GETRANDOM + +/* Define to 1 if you have the `gettimeofday' function. */ #undef HAVE_GETTIMEOFDAY -/* Define to 1 if you have the 'getuid' function. */ -#undef HAVE_GETUID +/* Define to 1 if you have the `glob' function. */ +#undef HAVE_GLOB /* Define to 1 if you have the <glob.h> header file. */ #undef HAVE_GLOB_H +/* Define to 1 if you have the `glob_pattern_p' function. */ +#undef HAVE_GLOB_PATTERN_P + /* Define to 1 if you have the `inet_ntop' function. */ #undef HAVE_INET_NTOP @@ -503,7 +544,7 @@ /* Define to 1 if <sys/socket.h> defines AF_INET6. */ #undef HAVE_IPV6 -/* Define to 1 if you have the 'isblank' function. */ +/* Define to 1 if you have the `isblank' function. */ #undef HAVE_ISBLANK /* Define if the isnan(double) function is available in libc. */ @@ -512,31 +553,28 @@ /* Define if the isnan(long double) function is available in libc. */ #undef HAVE_ISNANL_IN_LIBC -/* Define to 1 if you have the `issetugid' function. */ -#undef HAVE_ISSETUGID - -/* Define to 1 if you have the 'iswcntrl' function. */ +/* Define to 1 if you have the `iswcntrl' function. */ #undef HAVE_ISWCNTRL -/* Define to 1 if you have the 'iswctype' function. */ -#undef HAVE_ISWCTYPE - /* Define if you have <langinfo.h> and nl_langinfo(CODESET). */ #undef HAVE_LANGINFO_CODESET +/* Define to 1 if the bcrypt library is guaranteed to be present. */ +#undef HAVE_LIB_BCRYPT + /* Define to 1 if you have the <limits.h> header file. */ #undef HAVE_LIMITS_H -/* Define to 1 if you have the 'link' function. */ +/* Define to 1 if you have the `link' function. */ #undef HAVE_LINK -/* Define to 1 if you have the 'localtime_r' function. */ +/* Define to 1 if you have the `localtime_r' function. */ #undef HAVE_LOCALTIME_R /* Define to 1 if the system has the type 'long long int'. */ #undef HAVE_LONG_LONG_INT -/* Define to 1 if you have the 'lstat' function. */ +/* Define to 1 if you have the `lstat' function. */ #undef HAVE_LSTAT /* Define if the 'malloc' function is POSIX compliant. */ @@ -549,18 +587,21 @@ /* Define to 1 if you have the <math.h> header file. */ #undef HAVE_MATH_H -/* Define to 1 if you have the 'mbrtowc' function. */ +/* Define to 1 if you have the `mbrtowc' function. */ #undef HAVE_MBRTOWC -/* Define to 1 if you have the 'mbsinit' function. */ +/* Define to 1 if you have the `mbsinit' function. */ #undef HAVE_MBSINIT -/* Define to 1 if you have the 'mbsrtowcs' function. */ +/* Define to 1 if you have the `mbsrtowcs' function. */ #undef HAVE_MBSRTOWCS /* Define to 1 if <wchar.h> declares mbstate_t. */ #undef HAVE_MBSTATE_T +/* Define to 1 if you have the `mbtowc' function. */ +#undef HAVE_MBTOWC + /* Define to 1 if you have the `memmem' function. */ #undef HAVE_MEMMEM @@ -577,13 +618,19 @@ when it succeeds. */ #undef HAVE_MINIMALLY_WORKING_GETCWD +/* Define to 1 if <limits.h> defines the MIN and MAX macros. */ +#undef HAVE_MINMAX_IN_LIMITS_H + +/* Define to 1 if <sys/param.h> defines the MIN and MAX macros. */ +#undef HAVE_MINMAX_IN_SYS_PARAM_H + /* Define to 1 if you have the `mkdtemp' function. */ #undef HAVE_MKDTEMP -/* Define to 1 if you have the 'mkostemp' function. */ +/* Define to 1 if you have the `mkostemp' function. */ #undef HAVE_MKOSTEMP -/* Define to 1 if you have the 'mprotect' function. */ +/* Define to 1 if you have the `mprotect' function. */ #undef HAVE_MPROTECT /* Define to 1 on MSVC platforms that have the "invalid parameter handler" @@ -596,7 +643,7 @@ /* Define to 1 if you have the <netinet/in.h> header file. */ #undef HAVE_NETINET_IN_H -/* Define to 1 if you have the 'openat' function. */ +/* Define to 1 if you have the `openat' function. */ #undef HAVE_OPENAT /* Define to 1 if you have the `opendir' function. */ @@ -606,902 +653,35 @@ setting errno to ERANGE, ENAMETOOLONG, or ENOENT. */ #undef HAVE_PARTLY_WORKING_GETCWD -/* Define to 1 if you have the 'pipe' function. */ +/* Define to 1 if you have the `pipe' function. */ #undef HAVE_PIPE +/* Define if you have the <pthread.h> header and the POSIX threads API. */ +#undef HAVE_PTHREAD_API + /* Define if the <pthread.h> defines PTHREAD_MUTEX_RECURSIVE. */ #undef HAVE_PTHREAD_MUTEX_RECURSIVE /* Define if the POSIX multithreading library has read/write locks. */ #undef HAVE_PTHREAD_RWLOCK +/* Define if the 'pthread_rwlock_rdlock' function prefers a writer to a + reader. */ +#undef HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER + /* Define to 1 if you have the `rawmemchr' function. */ #undef HAVE_RAWMEMCHR -/* Define to 1 if accept is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_ACCEPT - -/* Define to 1 if accept4 is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_ACCEPT4 - -/* Define to 1 if acosf is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_ACOSF - -/* Define to 1 if acosl is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_ACOSL - -/* Define to 1 if alphasort is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_ALPHASORT - -/* Define to 1 if asinf is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_ASINF - -/* Define to 1 if asinl is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_ASINL - -/* Define to 1 if atanf is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_ATANF - -/* Define to 1 if atanl is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_ATANL - -/* Define to 1 if atoll is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_ATOLL - -/* Define to 1 if bind is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_BIND - -/* Define to 1 if btowc is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_BTOWC - -/* Define to 1 if canonicalize_file_name is declared even after undefining - macros. */ -#undef HAVE_RAW_DECL_CANONICALIZE_FILE_NAME - -/* Define to 1 if cbrt is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_CBRT - -/* Define to 1 if cbrtf is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_CBRTF - -/* Define to 1 if cbrtl is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_CBRTL - -/* Define to 1 if ceilf is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_CEILF - -/* Define to 1 if ceill is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_CEILL - -/* Define to 1 if chdir is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_CHDIR - -/* Define to 1 if chown is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_CHOWN - -/* Define to 1 if closedir is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_CLOSEDIR - -/* Define to 1 if connect is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_CONNECT - -/* Define to 1 if copysign is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_COPYSIGN - -/* Define to 1 if copysignf is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_COPYSIGNF - -/* Define to 1 if copysignl is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_COPYSIGNL - -/* Define to 1 if cosf is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_COSF - -/* Define to 1 if coshf is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_COSHF - -/* Define to 1 if cosl is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_COSL - -/* Define to 1 if dirfd is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_DIRFD - -/* Define to 1 if dprintf is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_DPRINTF - -/* Define to 1 if dup is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_DUP - -/* Define to 1 if dup2 is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_DUP2 - -/* Define to 1 if dup3 is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_DUP3 - -/* Define to 1 if endusershell is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_ENDUSERSHELL - -/* Define to 1 if environ is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_ENVIRON - -/* Define to 1 if euidaccess is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_EUIDACCESS - -/* Define to 1 if exp2 is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_EXP2 - -/* Define to 1 if exp2f is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_EXP2F - -/* Define to 1 if exp2l is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_EXP2L - -/* Define to 1 if expf is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_EXPF - -/* Define to 1 if expl is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_EXPL - -/* Define to 1 if expm1 is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_EXPM1 - -/* Define to 1 if expm1f is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_EXPM1F - -/* Define to 1 if expm1l is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_EXPM1L - -/* Define to 1 if fabsf is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_FABSF - -/* Define to 1 if fabsl is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_FABSL - -/* Define to 1 if faccessat is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_FACCESSAT - -/* Define to 1 if fchdir is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_FCHDIR - -/* Define to 1 if fchmodat is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_FCHMODAT - -/* Define to 1 if fchownat is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_FCHOWNAT - -/* Define to 1 if fcntl is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_FCNTL - -/* Define to 1 if fdatasync is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_FDATASYNC - -/* Define to 1 if fdopendir is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_FDOPENDIR - -/* Define to 1 if ffsl is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_FFSL - -/* Define to 1 if ffsll is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_FFSLL - -/* Define to 1 if floorf is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_FLOORF - -/* Define to 1 if floorl is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_FLOORL - -/* Define to 1 if fma is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_FMA - -/* Define to 1 if fmaf is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_FMAF - -/* Define to 1 if fmal is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_FMAL - -/* Define to 1 if fmod is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_FMOD - -/* Define to 1 if fmodf is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_FMODF - -/* Define to 1 if fmodl is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_FMODL - -/* Define to 1 if fpurge is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_FPURGE - -/* Define to 1 if frexpf is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_FREXPF - -/* Define to 1 if frexpl is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_FREXPL - -/* Define to 1 if fseeko is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_FSEEKO - -/* Define to 1 if fstat is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_FSTAT - -/* Define to 1 if fstatat is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_FSTATAT - -/* Define to 1 if fsync is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_FSYNC - -/* Define to 1 if ftello is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_FTELLO - -/* Define to 1 if ftruncate is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_FTRUNCATE - -/* Define to 1 if futimens is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_FUTIMENS - -/* Define to 1 if getcwd is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_GETCWD - -/* Define to 1 if getdelim is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_GETDELIM - -/* Define to 1 if getdomainname is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_GETDOMAINNAME - -/* Define to 1 if getdtablesize is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_GETDTABLESIZE - -/* Define to 1 if getgroups is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_GETGROUPS - -/* Define to 1 if gethostname is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_GETHOSTNAME - -/* Define to 1 if getline is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_GETLINE - -/* Define to 1 if getloadavg is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_GETLOADAVG - -/* Define to 1 if getlogin is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_GETLOGIN - -/* Define to 1 if getlogin_r is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_GETLOGIN_R - -/* Define to 1 if getpagesize is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_GETPAGESIZE - -/* Define to 1 if getpeername is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_GETPEERNAME - -/* Define to 1 if gets is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_GETS - -/* Define to 1 if getsockname is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_GETSOCKNAME - -/* Define to 1 if getsockopt is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_GETSOCKOPT - -/* Define to 1 if getsubopt is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_GETSUBOPT - -/* Define to 1 if gettimeofday is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_GETTIMEOFDAY - -/* Define to 1 if getusershell is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_GETUSERSHELL - -/* Define to 1 if grantpt is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_GRANTPT - -/* Define to 1 if group_member is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_GROUP_MEMBER - -/* Define to 1 if hypotf is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_HYPOTF - -/* Define to 1 if hypotl is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_HYPOTL - -/* Define to 1 if ilogb is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_ILOGB - -/* Define to 1 if ilogbf is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_ILOGBF - -/* Define to 1 if ilogbl is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_ILOGBL - -/* Define to 1 if imaxabs is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_IMAXABS - -/* Define to 1 if imaxdiv is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_IMAXDIV - -/* Define to 1 if inet_ntop is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_INET_NTOP - -/* Define to 1 if inet_pton is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_INET_PTON - -/* Define to 1 if initstate is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_INITSTATE - -/* Define to 1 if initstate_r is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_INITSTATE_R - -/* Define to 1 if isatty is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_ISATTY - -/* Define to 1 if iswctype is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_ISWCTYPE - -/* Define to 1 if lchmod is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_LCHMOD - -/* Define to 1 if lchown is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_LCHOWN - -/* Define to 1 if ldexpf is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_LDEXPF - -/* Define to 1 if ldexpl is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_LDEXPL - -/* Define to 1 if link is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_LINK - -/* Define to 1 if linkat is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_LINKAT - -/* Define to 1 if listen is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_LISTEN - -/* Define to 1 if log is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_LOG - -/* Define to 1 if log10 is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_LOG10 - -/* Define to 1 if log10f is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_LOG10F - -/* Define to 1 if log10l is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_LOG10L - -/* Define to 1 if log1p is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_LOG1P - -/* Define to 1 if log1pf is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_LOG1PF - -/* Define to 1 if log1pl is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_LOG1PL - -/* Define to 1 if log2 is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_LOG2 - -/* Define to 1 if log2f is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_LOG2F - -/* Define to 1 if log2l is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_LOG2L - -/* Define to 1 if logb is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_LOGB - -/* Define to 1 if logbf is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_LOGBF - -/* Define to 1 if logbl is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_LOGBL - -/* Define to 1 if logf is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_LOGF - -/* Define to 1 if logl is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_LOGL - -/* Define to 1 if lseek is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_LSEEK - -/* Define to 1 if lstat is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_LSTAT - -/* Define to 1 if mbrlen is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_MBRLEN - -/* Define to 1 if mbrtowc is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_MBRTOWC - -/* Define to 1 if mbsinit is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_MBSINIT - -/* Define to 1 if mbsnrtowcs is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_MBSNRTOWCS - -/* Define to 1 if mbsrtowcs is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_MBSRTOWCS - -/* Define to 1 if memmem is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_MEMMEM - -/* Define to 1 if mempcpy is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_MEMPCPY - -/* Define to 1 if memrchr is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_MEMRCHR - -/* Define to 1 if mkdirat is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_MKDIRAT - -/* Define to 1 if mkdtemp is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_MKDTEMP - -/* Define to 1 if mkfifo is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_MKFIFO - -/* Define to 1 if mkfifoat is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_MKFIFOAT - -/* Define to 1 if mknod is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_MKNOD - -/* Define to 1 if mknodat is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_MKNODAT - -/* Define to 1 if mkostemp is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_MKOSTEMP - -/* Define to 1 if mkostemps is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_MKOSTEMPS - -/* Define to 1 if mkstemp is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_MKSTEMP - -/* Define to 1 if mkstemps is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_MKSTEMPS - -/* Define to 1 if modf is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_MODF - -/* Define to 1 if modff is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_MODFF - -/* Define to 1 if modfl is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_MODFL - -/* Define to 1 if openat is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_OPENAT - -/* Define to 1 if opendir is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_OPENDIR - -/* Define to 1 if pclose is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_PCLOSE - -/* Define to 1 if pipe is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_PIPE - -/* Define to 1 if pipe2 is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_PIPE2 - -/* Define to 1 if popen is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_POPEN - -/* Define to 1 if posix_openpt is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_POSIX_OPENPT - -/* Define to 1 if powf is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_POWF - -/* Define to 1 if pread is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_PREAD - -/* Define to 1 if pthread_sigmask is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_PTHREAD_SIGMASK - -/* Define to 1 if ptsname is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_PTSNAME - -/* Define to 1 if ptsname_r is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_PTSNAME_R - -/* Define to 1 if pwrite is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_PWRITE - -/* Define to 1 if qsort_r is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_QSORT_R - -/* Define to 1 if random is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_RANDOM - -/* Define to 1 if random_r is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_RANDOM_R - -/* Define to 1 if rawmemchr is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_RAWMEMCHR - -/* Define to 1 if readdir is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_READDIR - -/* Define to 1 if readlink is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_READLINK - -/* Define to 1 if readlinkat is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_READLINKAT - -/* Define to 1 if realpath is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_REALPATH - -/* Define to 1 if recv is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_RECV - -/* Define to 1 if recvfrom is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_RECVFROM - -/* Define to 1 if remainder is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_REMAINDER - -/* Define to 1 if remainderf is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_REMAINDERF - -/* Define to 1 if remainderl is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_REMAINDERL - -/* Define to 1 if renameat is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_RENAMEAT - -/* Define to 1 if rewinddir is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_REWINDDIR - -/* Define to 1 if rint is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_RINT - -/* Define to 1 if rintf is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_RINTF - -/* Define to 1 if rintl is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_RINTL - -/* Define to 1 if rmdir is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_RMDIR - -/* Define to 1 if round is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_ROUND - -/* Define to 1 if roundf is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_ROUNDF - -/* Define to 1 if roundl is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_ROUNDL - -/* Define to 1 if rpmatch is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_RPMATCH - -/* Define to 1 if scandir is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_SCANDIR - -/* Define to 1 if secure_getenv is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_SECURE_GETENV - -/* Define to 1 if send is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_SEND - -/* Define to 1 if sendto is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_SENDTO - -/* Define to 1 if setenv is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_SETENV - -/* Define to 1 if sethostname is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_SETHOSTNAME - -/* Define to 1 if setsockopt is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_SETSOCKOPT - -/* Define to 1 if setstate is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_SETSTATE - -/* Define to 1 if setstate_r is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_SETSTATE_R - -/* Define to 1 if setusershell is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_SETUSERSHELL - -/* Define to 1 if shutdown is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_SHUTDOWN - -/* Define to 1 if sigaction is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_SIGACTION - -/* Define to 1 if sigaddset is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_SIGADDSET - -/* Define to 1 if sigdelset is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_SIGDELSET - -/* Define to 1 if sigemptyset is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_SIGEMPTYSET - -/* Define to 1 if sigfillset is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_SIGFILLSET - -/* Define to 1 if sigismember is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_SIGISMEMBER - -/* Define to 1 if sigpending is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_SIGPENDING - -/* Define to 1 if sigprocmask is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_SIGPROCMASK - -/* Define to 1 if sinf is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_SINF - -/* Define to 1 if sinhf is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_SINHF - -/* Define to 1 if sinl is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_SINL - -/* Define to 1 if sleep is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_SLEEP - -/* Define to 1 if snprintf is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_SNPRINTF - -/* Define to 1 if socket is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_SOCKET - -/* Define to 1 if sqrtf is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_SQRTF - -/* Define to 1 if sqrtl is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_SQRTL - -/* Define to 1 if srandom is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_SRANDOM - -/* Define to 1 if srandom_r is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_SRANDOM_R - -/* Define to 1 if stat is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_STAT - -/* Define to 1 if stpcpy is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_STPCPY - -/* Define to 1 if stpncpy is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_STPNCPY - -/* Define to 1 if strcasestr is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_STRCASESTR - -/* Define to 1 if strchrnul is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_STRCHRNUL - -/* Define to 1 if strdup is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_STRDUP - -/* Define to 1 if strerror_r is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_STRERROR_R - -/* Define to 1 if strncat is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_STRNCAT - -/* Define to 1 if strndup is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_STRNDUP - -/* Define to 1 if strnlen is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_STRNLEN - -/* Define to 1 if strpbrk is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_STRPBRK - -/* Define to 1 if strsep is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_STRSEP - -/* Define to 1 if strsignal is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_STRSIGNAL - -/* Define to 1 if strtod is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_STRTOD - -/* Define to 1 if strtoimax is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_STRTOIMAX - -/* Define to 1 if strtok_r is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_STRTOK_R - -/* Define to 1 if strtoll is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_STRTOLL - -/* Define to 1 if strtoull is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_STRTOULL - -/* Define to 1 if strtoumax is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_STRTOUMAX - -/* Define to 1 if strverscmp is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_STRVERSCMP - -/* Define to 1 if symlink is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_SYMLINK - -/* Define to 1 if symlinkat is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_SYMLINKAT - -/* Define to 1 if tanf is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_TANF - -/* Define to 1 if tanhf is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_TANHF - -/* Define to 1 if tanl is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_TANL - -/* Define to 1 if tmpfile is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_TMPFILE - -/* Define to 1 if towctrans is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_TOWCTRANS - -/* Define to 1 if trunc is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_TRUNC - -/* Define to 1 if truncf is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_TRUNCF - -/* Define to 1 if truncl is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_TRUNCL - -/* Define to 1 if ttyname_r is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_TTYNAME_R - -/* Define to 1 if unlink is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_UNLINK - -/* Define to 1 if unlinkat is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_UNLINKAT - -/* Define to 1 if unlockpt is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_UNLOCKPT - -/* Define to 1 if unsetenv is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_UNSETENV - -/* Define to 1 if usleep is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_USLEEP - -/* Define to 1 if utimensat is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_UTIMENSAT - -/* Define to 1 if vdprintf is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_VDPRINTF - -/* Define to 1 if vsnprintf is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_VSNPRINTF - -/* Define to 1 if wcpcpy is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_WCPCPY - -/* Define to 1 if wcpncpy is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_WCPNCPY - -/* Define to 1 if wcrtomb is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_WCRTOMB - -/* Define to 1 if wcscasecmp is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_WCSCASECMP - -/* Define to 1 if wcscat is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_WCSCAT - -/* Define to 1 if wcschr is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_WCSCHR - -/* Define to 1 if wcscmp is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_WCSCMP - -/* Define to 1 if wcscoll is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_WCSCOLL - -/* Define to 1 if wcscpy is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_WCSCPY - -/* Define to 1 if wcscspn is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_WCSCSPN - -/* Define to 1 if wcsdup is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_WCSDUP - -/* Define to 1 if wcslen is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_WCSLEN - -/* Define to 1 if wcsncasecmp is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_WCSNCASECMP - -/* Define to 1 if wcsncat is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_WCSNCAT - -/* Define to 1 if wcsncmp is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_WCSNCMP - -/* Define to 1 if wcsncpy is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_WCSNCPY - -/* Define to 1 if wcsnlen is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_WCSNLEN - -/* Define to 1 if wcsnrtombs is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_WCSNRTOMBS - -/* Define to 1 if wcspbrk is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_WCSPBRK - -/* Define to 1 if wcsrchr is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_WCSRCHR - -/* Define to 1 if wcsrtombs is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_WCSRTOMBS - -/* Define to 1 if wcsspn is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_WCSSPN - -/* Define to 1 if wcsstr is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_WCSSTR - -/* Define to 1 if wcstok is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_WCSTOK - -/* Define to 1 if wcswidth is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_WCSWIDTH - -/* Define to 1 if wcsxfrm is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_WCSXFRM - -/* Define to 1 if wctob is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_WCTOB - -/* Define to 1 if wctrans is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_WCTRANS - -/* Define to 1 if wctype is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_WCTYPE - -/* Define to 1 if wcwidth is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_WCWIDTH - -/* Define to 1 if wmemchr is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_WMEMCHR - -/* Define to 1 if wmemcmp is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_WMEMCMP - -/* Define to 1 if wmemcpy is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_WMEMCPY - -/* Define to 1 if wmemmove is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_WMEMMOVE - -/* Define to 1 if wmemset is declared even after undefining macros. */ -#undef HAVE_RAW_DECL_WMEMSET - -/* Define to 1 if _Exit is declared even after undefining macros. */ -#undef HAVE_RAW_DECL__EXIT - /* Define to 1 if you have the `readdir' function. */ #undef HAVE_READDIR -/* Define to 1 if you have the 'readlink' function. */ +/* Define to 1 if you have the `readlink' function. */ #undef HAVE_READLINK /* Define if the 'realloc' function is POSIX compliant. */ #undef HAVE_REALLOC_POSIX -/* Define to 1 if you have the 'realpath' function. */ +/* Define to 1 if you have the `realpath' function. */ #undef HAVE_REALPATH /* Define to 1 if you have the `rewinddir' function. */ @@ -1513,16 +693,16 @@ /* Define to 1 if the system has the type `sa_family_t'. */ #undef HAVE_SA_FAMILY_T +/* Define to 1 if you have the <sdkddkver.h> header file. */ +#undef HAVE_SDKDDKVER_H + /* Define to 1 if you have the <search.h> header file. */ #undef HAVE_SEARCH_H -/* Define to 1 if you have the 'secure_getenv' function. */ -#undef HAVE_SECURE_GETENV - /* Define to 1 if you have the `setdtablesize' function. */ #undef HAVE_SETDTABLESIZE -/* Define to 1 if you have the 'setenv' function. */ +/* Define to 1 if you have the `setenv' function. */ #undef HAVE_SETENV /* Define to 1 if you have the `shutdown' function. */ @@ -1540,7 +720,7 @@ /* Define to 1 if the system has the type `sigset_t'. */ #undef HAVE_SIGSET_T -/* Define to 1 if you have the 'snprintf' function. */ +/* Define to 1 if you have the `snprintf' function. */ #undef HAVE_SNPRINTF /* Define to 1 if you have the <stdint.h> header file. */ @@ -1552,10 +732,10 @@ /* Define to 1 if you have the `strchrnul' function. */ #undef HAVE_STRCHRNUL -/* Define to 1 if you have the 'strdup' function. */ +/* Define to 1 if you have the `strdup' function. */ #undef HAVE_STRDUP -/* Define to 1, since you should have the function strerror_r. */ +/* Define to 1 if you have the `strerror_r' function. */ #undef HAVE_STRERROR_R /* Define to 1 if you have the <strings.h> header file. */ @@ -1577,15 +757,33 @@ /* Define to 1 if `ss_family' is a member of `struct sockaddr_storage'. */ #undef HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY -/* Define to 1 if you have the 'symlink' function. */ +/* Define to 1 if `st_atimensec' is a member of `struct stat'. */ +#undef HAVE_STRUCT_STAT_ST_ATIMENSEC + +/* Define to 1 if `st_atimespec.tv_nsec' is a member of `struct stat'. */ +#undef HAVE_STRUCT_STAT_ST_ATIMESPEC_TV_NSEC + +/* Define to 1 if `st_atim.st__tim.tv_nsec' is a member of `struct stat'. */ +#undef HAVE_STRUCT_STAT_ST_ATIM_ST__TIM_TV_NSEC + +/* Define to 1 if `st_atim.tv_nsec' is a member of `struct stat'. */ +#undef HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC + +/* Define to 1 if `st_birthtimensec' is a member of `struct stat'. */ +#undef HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC + +/* Define to 1 if `st_birthtimespec.tv_nsec' is a member of `struct stat'. */ +#undef HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC + +/* Define to 1 if `st_birthtim.tv_nsec' is a member of `struct stat'. */ +#undef HAVE_STRUCT_STAT_ST_BIRTHTIM_TV_NSEC + +/* Define to 1 if you have the `symlink' function. */ #undef HAVE_SYMLINK /* Define to 1 if you have the <sys/bitypes.h> header file. */ #undef HAVE_SYS_BITYPES_H -/* Define to 1 if you have the <sys/cdefs.h> header file. */ -#undef HAVE_SYS_CDEFS_H - /* Define to 1 if you have the <sys/inttypes.h> header file. */ #undef HAVE_SYS_INTTYPES_H @@ -1595,15 +793,15 @@ /* Define to 1 if you have the <sys/param.h> header file. */ #undef HAVE_SYS_PARAM_H +/* Define to 1 if you have the <sys/random.h> header file. */ +#undef HAVE_SYS_RANDOM_H + /* Define to 1 if you have the <sys/socket.h> header file. */ #undef HAVE_SYS_SOCKET_H /* Define to 1 if you have the <sys/stat.h> header file. */ #undef HAVE_SYS_STAT_H -/* Define to 1 if you have the <sys/timeb.h> header file. */ -#undef HAVE_SYS_TIMEB_H - /* Define to 1 if you have the <sys/time.h> header file. */ #undef HAVE_SYS_TIME_H @@ -1613,6 +811,12 @@ /* Define to 1 if you have the <sys/uio.h> header file. */ #undef HAVE_SYS_UIO_H +/* Define to 1 if you have the `thrd_create' function. */ +#undef HAVE_THRD_CREATE + +/* Define to 1 if you have the <threads.h> header file. */ +#undef HAVE_THREADS_H + /* Define to 1 if you have the `towlower' function. */ #undef HAVE_TOWLOWER @@ -1631,6 +835,10 @@ /* Define if you have a global __progname variable */ #undef HAVE_VAR___PROGNAME +/* Define to 1 or 0, depending whether the compiler supports simple visibility + declarations. */ +#undef HAVE_VISIBILITY + /* Define to 1 if you have the <wchar.h> header file. */ #undef HAVE_WCHAR_H @@ -1640,6 +848,10 @@ /* Define to 1 if you have the <wctype.h> header file. */ #undef HAVE_WCTYPE_H +/* Define to 1 if the compiler and linker support weak declarations of + symbols. */ +#undef HAVE_WEAK_SYMBOLS + /* Define to 1 if you have the <windows.h> header file. */ #undef HAVE_WINDOWS_H @@ -1649,13 +861,7 @@ /* Define if you have the 'wint_t' type. */ #undef HAVE_WINT_T -/* Define to 1 if you have the 'wmemchr' function. */ -#undef HAVE_WMEMCHR - -/* Define to 1 if you have the 'wmemcpy' function. */ -#undef HAVE_WMEMCPY - -/* Define to 1 if you have the 'wmempcpy' function. */ +/* Define to 1 if you have the `wmempcpy' function. */ #undef HAVE_WMEMPCPY /* Define to 1 if fstatat (..., 0) works. For example, it does not work in AIX @@ -1671,19 +877,29 @@ /* Define to 1 if you have the <ws2tcpip.h> header file. */ #undef HAVE_WS2TCPIP_H +/* Define to 1 if you have the <xlocale.h> header file. */ +#undef HAVE_XLOCALE_H + /* Define to 1 if the system has the type `_Bool'. */ #undef HAVE__BOOL -/* Define to 1 if you have the `_ftime' function. */ -#undef HAVE__FTIME - -/* Define to 1 if you have the '_set_invalid_parameter_handler' function. */ +/* Define to 1 if you have the `_set_invalid_parameter_handler' function. */ #undef HAVE__SET_INVALID_PARAMETER_HANDLER -/* Define to 1 if you have the `__secure_getenv' function. */ -#undef HAVE___SECURE_GETENV +/* Define to 1 if the compiler supports __builtin_expect, + and to 2 if <builtins.h> does. */ +#undef HAVE___BUILTIN_EXPECT +#ifndef HAVE___BUILTIN_EXPECT +# define __builtin_expect(e, c) (e) +#elif HAVE___BUILTIN_EXPECT == 2 +# include <builtins.h> +#endif + + +/* Define to 1 if the compiler supports the keyword '__inline'. */ +#undef HAVE___INLINE -/* Define to 1 if you have the '__xpg_strerror_r' function. */ +/* Define to 1 if you have the `__xpg_strerror_r' function. */ #undef HAVE___XPG_STRERROR_R /* Define as the bit index in the word where to find bit 0 of the exponent of @@ -1707,6 +923,10 @@ */ #undef MBRTOWC_EMPTY_INPUT_BUG +/* Define if the mbrtowc function may signal encoding errors in the C locale. + */ +#undef MBRTOWC_IN_C_LOCALE_MAYBE_EILSEQ + /* Define if the mbrtowc function has the NULL pwc argument bug. */ #undef MBRTOWC_NULL_ARG1_BUG @@ -1719,6 +939,10 @@ /* Define if the mbrtowc function returns a wrong return value. */ #undef MBRTOWC_RETVAL_BUG +/* Define if the mbrtowc function stores a wide character when reporting + incomplete input. */ +#undef MBRTOWC_STORES_INCOMPLETE_BUG + /* Use GNU style printf and scanf. */ #ifndef __USE_MINGW_ANSI_STDIO # undef __USE_MINGW_ANSI_STDIO @@ -1772,7 +996,7 @@ #undef RENAME_HARD_LINK_BUG /* Define if rename does not correctly handle slashes on the destination - argument, such as on Solaris 10 or NetBSD 1.6. */ + argument, such as on Solaris 11 or NetBSD 1.6. */ #undef RENAME_TRAILING_SLASH_DEST_BUG /* Define if rename does not correctly handle slashes on the source argument, @@ -1785,10 +1009,6 @@ /* Define to 1 if gnulib's fchdir() replacement is used. */ #undef REPLACE_FCHDIR -/* Define to 1 if stat needs help when passed a directory name with a trailing - slash */ -#undef REPLACE_FUNC_STAT_DIR - /* Define to 1 if stat needs help when passed a file name with a trailing slash */ #undef REPLACE_FUNC_STAT_FILE @@ -1800,6 +1020,12 @@ /* Define to 1 if strerror(0) does not return a message implying success. */ #undef REPLACE_STRERROR_0 +/* Define to 1 if setlocale (LC_ALL, NULL) is multithread-safe. */ +#undef SETLOCALE_NULL_ALL_MTSAFE + +/* Define to 1 if setlocale (category, NULL) is multithread-safe. */ +#undef SETLOCALE_NULL_ONE_MTSAFE + /* Define to l, ll, u, ul, ull, etc., as suitable for constants of type 'sig_atomic_t'. */ #undef SIG_ATOMIC_T_SUFFIX @@ -1822,9 +1048,20 @@ /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS -/* Define to 0, since strerror_r should not return char *. */ +/* Define to 1 if strerror_r returns char *. */ #undef STRERROR_R_CHAR_P +/* Define to 1 if the type of the st_atim member of a struct stat is struct + timespec. */ +#undef TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC + +/* Define if the combination of the ISO C and POSIX multithreading APIs can be + used. */ +#undef USE_ISOC_AND_POSIX_THREADS + +/* Define if the ISO C multithreading library can be used. */ +#undef USE_ISOC_THREADS + /* Define if the POSIX multithreading library can be used. */ #undef USE_POSIX_THREADS @@ -1832,20 +1069,6 @@ weak. */ #undef USE_POSIX_THREADS_WEAK -/* Define if the GNU Pth multithreading library can be used. */ -#undef USE_PTH_THREADS - -/* Define if references to the GNU Pth multithreading library should be made - weak. */ -#undef USE_PTH_THREADS_WEAK - -/* Define if the old Solaris multithreading library can be used. */ -#undef USE_SOLARIS_THREADS - -/* Define if references to the old Solaris multithreading library should be - made weak. */ -#undef USE_SOLARIS_THREADS_WEAK - /* Enable extensions on AIX 3, Interix. */ #ifndef _ALL_SOURCE # undef _ALL_SOURCE @@ -1858,6 +1081,14 @@ #ifndef _GNU_SOURCE # undef _GNU_SOURCE #endif +/* Enable NetBSD extensions on NetBSD. */ +#ifndef _NETBSD_SOURCE +# undef _NETBSD_SOURCE +#endif +/* Enable OpenBSD extensions on NetBSD. */ +#ifndef _OPENBSD_SOURCE +# undef _OPENBSD_SOURCE +#endif /* Enable threading extensions on Solaris. */ #ifndef _POSIX_PTHREAD_SEMANTICS # undef _POSIX_PTHREAD_SEMANTICS @@ -1900,6 +1131,11 @@ #ifndef _XOPEN_SOURCE # undef _XOPEN_SOURCE #endif +/* Enable X/Open compliant socket functions that do not require linking + with -lxnet on HP-UX 11.11. */ +#ifndef _HPUX_ALT_XOPEN_SOCKET_API +# undef _HPUX_ALT_XOPEN_SOCKET_API +#endif /* Enable general extensions on Solaris. */ #ifndef __EXTENSIONS__ # undef __EXTENSIONS__ @@ -1932,19 +1168,24 @@ # endif #endif -/* Enable large inode numbers on Mac OS X 10.5. */ -#undef _DARWIN_USE_64_BIT_INODE - /* Number of bits in a file offset, on hosts where this is settable. */ #undef _FILE_OFFSET_BITS -/* Define to 1 if Gnulib overrides 'struct stat' on Windows so that struct - stat.st_size becomes 64-bit. */ -#undef _GL_WINDOWS_64_BIT_ST_SIZE +/* True if the compiler says it groks GNU C version MAJOR.MINOR. */ +#if defined __GNUC__ && defined __GNUC_MINOR__ +# define _GL_GNUC_PREREQ(major, minor) \ + ((major) < __GNUC__ + ((minor) <= __GNUC_MINOR__)) +#else +# define _GL_GNUC_PREREQ(major, minor) 0 +#endif + /* Define for large files, on AIX-style hosts. */ #undef _LARGE_FILES +/* Define to 1 on Solaris. */ +#undef _LCONV_C99 + /* Define to 1 if on MINIX. */ #undef _MINIX @@ -1952,12 +1193,28 @@ #undef _NETBSD_SOURCE /* The _Noreturn keyword of C11. */ -#if ! (defined _Noreturn \ - || (defined __STDC_VERSION__ && 201112 <= __STDC_VERSION__)) -# if (3 <= __GNUC__ || (__GNUC__ == 2 && 8 <= __GNUC_MINOR__) \ - || 0x5110 <= __SUNPRO_C) +#ifndef _Noreturn +# if (defined __cplusplus \ + && ((201103 <= __cplusplus && !(__GNUC__ == 4 && __GNUC_MINOR__ == 7)) \ + || (defined _MSC_VER && 1900 <= _MSC_VER)) \ + && 0) + /* [[noreturn]] is not practically usable, because with it the syntax + extern _Noreturn void func (...); + would not be valid; such a declaration would only be valid with 'extern' + and '_Noreturn' swapped, or without the 'extern' keyword. However, some + AIX system header files and several gnulib header files use precisely + this syntax with 'extern'. */ +# define _Noreturn [[noreturn]] +# elif ((!defined __cplusplus || defined __clang__) \ + && (201112 <= (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) \ + || _GL_GNUC_PREREQ (4, 7) \ + || (defined __apple_build_version__ \ + ? 6000000 <= __apple_build_version__ \ + : 3 < __clang_major__ + (5 <= __clang_minor__)))) + /* _Noreturn works as-is. */ +# elif _GL_GNUC_PREREQ (2, 8) || 0x5110 <= __SUNPRO_C # define _Noreturn __attribute__ ((__noreturn__)) -# elif defined _MSC_VER && 1200 <= _MSC_VER +# elif 1200 <= (defined _MSC_VER ? _MSC_VER : 0) # define _Noreturn __declspec (noreturn) # else # define _Noreturn @@ -1976,16 +1233,246 @@ /* Define to 1 if you need to in order for 'stat' and other things to work. */ #undef _POSIX_SOURCE +/* For standard stat data types on VMS. */ +#undef _USE_STD_STAT + /* Define to 1 if the system <stdint.h> predates C++11. */ #undef __STDC_CONSTANT_MACROS /* Define to 1 if the system <stdint.h> predates C++11. */ #undef __STDC_LIMIT_MACROS +/* The _GL_ASYNC_SAFE marker should be attached to functions that are + signal handlers (for signals other than SIGABRT, SIGPIPE) or can be + invoked from such signal handlers. Such functions have some restrictions: + * All functions that it calls should be marked _GL_ASYNC_SAFE as well, + or should be listed as async-signal-safe in POSIX + <https://pubs.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html#tag_15_04> + section 2.4.3. Note that malloc(), sprintf(), and fwrite(), in + particular, are NOT async-signal-safe. + * All memory locations (variables and struct fields) that these functions + access must be marked 'volatile'. This holds for both read and write + accesses. Otherwise the compiler might optimize away stores to and + reads from such locations that occur in the program, depending on its + data flow analysis. For example, when the program contains a loop + that is intended to inspect a variable set from within a signal handler + while (!signal_occurred) + ; + the compiler is allowed to transform this into an endless loop if the + variable 'signal_occurred' is not declared 'volatile'. + Additionally, recall that: + * A signal handler should not modify errno (except if it is a handler + for a fatal signal and ends by raising the same signal again, thus + provoking the termination of the process). If it invokes a function + that may clobber errno, it needs to save and restore the value of + errno. */ +#define _GL_ASYNC_SAFE + + +/* Attributes. */ +#ifdef __has_attribute +# define _GL_HAS_ATTRIBUTE(attr) __has_attribute (__##attr##__) +#else +# define _GL_HAS_ATTRIBUTE(attr) _GL_ATTR_##attr +# define _GL_ATTR_alloc_size _GL_GNUC_PREREQ (4, 3) +# define _GL_ATTR_always_inline _GL_GNUC_PREREQ (3, 2) +# define _GL_ATTR_artificial _GL_GNUC_PREREQ (4, 3) +# define _GL_ATTR_cold _GL_GNUC_PREREQ (4, 3) +# define _GL_ATTR_const _GL_GNUC_PREREQ (2, 95) +# define _GL_ATTR_deprecated _GL_GNUC_PREREQ (3, 1) +# define _GL_ATTR_error _GL_GNUC_PREREQ (4, 3) +# define _GL_ATTR_externally_visible _GL_GNUC_PREREQ (4, 1) +# define _GL_ATTR_fallthrough _GL_GNUC_PREREQ (7, 0) +# define _GL_ATTR_format _GL_GNUC_PREREQ (2, 7) +# define _GL_ATTR_leaf _GL_GNUC_PREREQ (4, 6) +# ifdef _ICC +# define _GL_ATTR_may_alias 0 +# else +# define _GL_ATTR_may_alias _GL_GNUC_PREREQ (3, 3) +# endif +# define _GL_ATTR_malloc _GL_GNUC_PREREQ (3, 0) +# define _GL_ATTR_noinline _GL_GNUC_PREREQ (3, 1) +# define _GL_ATTR_nonnull _GL_GNUC_PREREQ (3, 3) +# define _GL_ATTR_nonstring _GL_GNUC_PREREQ (8, 0) +# define _GL_ATTR_nothrow _GL_GNUC_PREREQ (3, 3) +# define _GL_ATTR_packed _GL_GNUC_PREREQ (2, 7) +# define _GL_ATTR_pure _GL_GNUC_PREREQ (2, 96) +# define _GL_ATTR_returns_nonnull _GL_GNUC_PREREQ (4, 9) +# define _GL_ATTR_sentinel _GL_GNUC_PREREQ (4, 0) +# define _GL_ATTR_unused _GL_GNUC_PREREQ (2, 7) +# define _GL_ATTR_warn_unused_result _GL_GNUC_PREREQ (3, 4) +#endif + + +#if _GL_HAS_ATTRIBUTE (alloc_size) +# define _GL_ATTRIBUTE_ALLOC_SIZE(args) __attribute__ ((__alloc_size__ args)) +#else +# define _GL_ATTRIBUTE_ALLOC_SIZE(args) +#endif + +#if _GL_HAS_ATTRIBUTE (always_inline) +# define _GL_ATTRIBUTE_ALWAYS_INLINE __attribute__ ((__always_inline__)) +#else +# define _GL_ATTRIBUTE_ALWAYS_INLINE +#endif + +#if _GL_HAS_ATTRIBUTE (artificial) +# define _GL_ATTRIBUTE_ARTIFICIAL __attribute__ ((__artificial__)) +#else +# define _GL_ATTRIBUTE_ARTIFICIAL +#endif + +/* Avoid __attribute__ ((cold)) on MinGW; see thread starting at + <https://lists.gnu.org/r/emacs-devel/2019-04/msg01152.html>. */ +#if _GL_HAS_ATTRIBUTE (cold) && !defined __MINGW32__ +# define _GL_ATTRIBUTE_COLD __attribute__ ((__cold__)) +#else +# define _GL_ATTRIBUTE_COLD +#endif + +#if _GL_HAS_ATTRIBUTE (const) +# define _GL_ATTRIBUTE_CONST __attribute__ ((__const__)) +#else +# define _GL_ATTRIBUTE_CONST +#endif + +#if 201710L < __STDC_VERSION__ +# define _GL_ATTRIBUTE_DEPRECATED [[__deprecated__]] +#elif _GL_HAS_ATTRIBUTE (deprecated) +# define _GL_ATTRIBUTE_DEPRECATED __attribute__ ((__deprecated__)) +#else +# define _GL_ATTRIBUTE_DEPRECATED +#endif + +#if _GL_HAS_ATTRIBUTE (error) +# define _GL_ATTRIBUTE_ERROR(msg) __attribute__ ((__error__ (msg))) +# define _GL_ATTRIBUTE_WARNING(msg) __attribute__ ((__warning__ (msg))) +#else +# define _GL_ATTRIBUTE_ERROR(msg) +# define _GL_ATTRIBUTE_WARNING(msg) +#endif + +#if _GL_HAS_ATTRIBUTE (externally_visible) +# define _GL_ATTRIBUTE_EXTERNALLY_VISIBLE __attribute__ ((externally_visible)) +#else +# define _GL_ATTRIBUTE_EXTERNALLY_VISIBLE +#endif + +/* FALLTHROUGH is special, because it always expands to something. */ +#if 201710L < __STDC_VERSION__ +# define _GL_ATTRIBUTE_FALLTHROUGH [[__fallthrough__]] +#elif _GL_HAS_ATTRIBUTE (fallthrough) +# define _GL_ATTRIBUTE_FALLTHROUGH __attribute__ ((__fallthrough__)) +#else +# define _GL_ATTRIBUTE_FALLTHROUGH ((void) 0) +#endif + +#if _GL_HAS_ATTRIBUTE (format) +# define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec)) +#else +# define _GL_ATTRIBUTE_FORMAT(spec) +#endif + +#if _GL_HAS_ATTRIBUTE (leaf) +# define _GL_ATTRIBUTE_LEAF __attribute__ ((__leaf__)) +#else +# define _GL_ATTRIBUTE_LEAF +#endif + +#if _GL_HAS_ATTRIBUTE (may_alias) +# define _GL_ATTRIBUTE_MAY_ALIAS __attribute__ ((__may_alias__)) +#else +# define _GL_ATTRIBUTE_MAY_ALIAS +#endif + +#if 201710L < __STDC_VERSION__ +# define _GL_ATTRIBUTE_MAYBE_UNUSED [[__maybe_unused__]] +#elif _GL_HAS_ATTRIBUTE (unused) +# define _GL_ATTRIBUTE_MAYBE_UNUSED __attribute__ ((__unused__)) +#else +# define _GL_ATTRIBUTE_MAYBE_UNUSED +#endif +/* Earlier spellings of this macro. */ +#define _GL_UNUSED _GL_ATTRIBUTE_MAYBE_UNUSED +#define _UNUSED_PARAMETER_ _GL_ATTRIBUTE_MAYBE_UNUSED + +#if _GL_HAS_ATTRIBUTE (malloc) +# define _GL_ATTRIBUTE_MALLOC __attribute__ ((__malloc__)) +#else +# define _GL_ATTRIBUTE_MALLOC +#endif + +#if 201710L < __STDC_VERSION__ +# define _GL_ATTRIBUTE_NODISCARD [[__nodiscard__]] +#elif _GL_HAS_ATTRIBUTE (warn_unused_result) +# define _GL_ATTRIBUTE_NODISCARD __attribute__ ((__warn_unused_result__)) +#else +# define _GL_ATTRIBUTE_NODISCARD +#endif + +#if _GL_HAS_ATTRIBUTE (noinline) +# define _GL_ATTRIBUTE_NOINLINE __attribute__ ((__noinline__)) +#else +# define _GL_ATTRIBUTE_NOINLINE +#endif + +#if _GL_HAS_ATTRIBUTE (nonnull) +# define _GL_ATTRIBUTE_NONNULL(args) __attribute__ ((__nonnull__ args)) +#else +# define _GL_ATTRIBUTE_NONNULL(args) +#endif + +#if _GL_HAS_ATTRIBUTE (nonstring) +# define _GL_ATTRIBUTE_NONSTRING __attribute__ ((__nonstring__)) +#else +# define _GL_ATTRIBUTE_NONSTRING +#endif + +/* There is no _GL_ATTRIBUTE_NORETURN; use _Noreturn instead. */ + +#if _GL_HAS_ATTRIBUTE (nothrow) && !defined __cplusplus +# define _GL_ATTRIBUTE_NOTHROW __attribute__ ((__nothrow__)) +#else +# define _GL_ATTRIBUTE_NOTHROW +#endif + +#if _GL_HAS_ATTRIBUTE (packed) +# define _GL_ATTRIBUTE_PACKED __attribute__ ((__packed__)) +#else +# define _GL_ATTRIBUTE_PACKED +#endif + +#if _GL_HAS_ATTRIBUTE (pure) +# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) +#else +# define _GL_ATTRIBUTE_PURE +#endif + +#if _GL_HAS_ATTRIBUTE (returns_nonnull) +# define _GL_ATTRIBUTE_RETURNS_NONNULL __attribute__ ((__returns_nonnull__)) +#else +# define _GL_ATTRIBUTE_RETURNS_NONNULL +#endif + +#if _GL_HAS_ATTRIBUTE (sentinel) +# define _GL_ATTRIBUTE_SENTINEL(pos) __attribute__ ((__sentinel__ pos)) +#else +# define _GL_ATTRIBUTE_SENTINEL(pos) +#endif + + +/* To support C++ as well as C, use _GL_UNUSED_LABEL with trailing ';'. */ +#if !defined __cplusplus || _GL_GNUC_PREREQ (4, 5) +# define _GL_UNUSED_LABEL _GL_ATTRIBUTE_MAYBE_UNUSED +#else +# define _GL_UNUSED_LABEL +#endif + + /* Please see the Gnulib manual for how to use these macros. Suppress extern inline with HP-UX cc, as it appears to be broken; see - <http://lists.gnu.org/archive/html/bug-texinfo/2013-02/msg00030.html>. + <https://lists.gnu.org/r/bug-texinfo/2013-02/msg00030.html>. Suppress extern inline with Sun C in standards-conformance mode, as it mishandles inline functions that call each other. E.g., for 'inline void f @@ -1999,20 +1486,32 @@ if isdigit is mistakenly implemented via a static inline function, a program containing an extern inline function that calls isdigit may not work since the C standard prohibits extern inline functions - from calling static functions. This bug is known to occur on: + from calling static functions (ISO C 99 section 6.7.4.(3). + This bug is known to occur on: OS X 10.8 and earlier; see: - http://lists.gnu.org/archive/html/bug-gnulib/2012-12/msg00023.html + https://lists.gnu.org/r/bug-gnulib/2012-12/msg00023.html DragonFly; see - http://muscles.dragonflybsd.org/bulk/bleeding-edge-potential/latest-per-pkg/ah-tty-0.3.12.log + http://muscles.dragonflybsd.org/bulk/clang-master-potential/20141111_102002/logs/ah-tty-0.3.12.log FreeBSD; see: - http://lists.gnu.org/archive/html/bug-gnulib/2014-07/msg00104.html + https://lists.gnu.org/r/bug-gnulib/2014-07/msg00104.html OS X 10.9 has a macro __header_inline indicating the bug is fixed for C and - for clang but remains for g++; see <http://trac.macports.org/ticket/41033>. - Assume DragonFly and FreeBSD will be similar. */ + for clang but remains for g++; see <https://trac.macports.org/ticket/41033>. + Assume DragonFly and FreeBSD will be similar. + + GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99 + inline semantics, unless -fgnu89-inline is used. It defines a macro + __GNUC_STDC_INLINE__ to indicate this situation or a macro + __GNUC_GNU_INLINE__ to indicate the opposite situation. + GCC 4.2 with -std=c99 or -std=gnu99 implements the GNU C inline + semantics but warns, unless -fgnu89-inline is used: + warning: C99 inline functions are not supported; using GNU89 + warning: to disable this warning use -fgnu89-inline or the gnu_inline function attribute + It defines a macro __GNUC_GNU_INLINE__ to indicate this situation. + */ #if (((defined __APPLE__ && defined __MACH__) \ || defined __DragonFly__ || defined __FreeBSD__) \ && (defined __header_inline \ @@ -2074,12 +1573,15 @@ # define _GL_INLINE_HEADER_END #endif -/* Define to a replacement function name for fnmatch(). */ -#undef fnmatch - /* Define to `int' if <sys/types.h> doesn't define. */ #undef gid_t +/* Define to `__inline__' or `__inline' if that's what the C compiler + calls it, or to nothing if 'inline' is not supported under any name. */ +#ifndef __cplusplus +#undef inline +#endif + /* Work around a bug in Apple GCC 4.0.1 build 5465: In C99 mode, it supports the ISO C 99 semantics of 'extern inline' (unlike the GNU C semantics of earlier versions), but does not display it by setting __GNUC_STDC_INLINE__. @@ -2106,12 +1608,13 @@ nothing if this is not supported. Do not define if restrict is supported directly. */ #undef restrict -/* Work around a bug in Sun C++: it does not support _Restrict or - __restrict__, even though the corresponding Sun C compiler ends up with - "#define restrict _Restrict" or "#define restrict __restrict__" in the - previous line. Perhaps some future version of Sun C++ will work with - restrict; if so, hopefully it defines __RESTRICT like Sun C does. */ -#if defined __SUNPRO_CC && !defined __RESTRICT +/* Work around a bug in older versions of Sun C++, which did not + #define __restrict__ or support _Restrict or __restrict__ + even though the corresponding Sun C compiler ended up with + "#define restrict _Restrict" or "#define restrict __restrict__" + in the previous line. This workaround can be removed once + we assume Oracle Developer Studio 12.5 (2016) or later. */ +#if defined __SUNPRO_CC && !defined __RESTRICT && !defined __restrict__ # define _Restrict # define __restrict__ #endif @@ -2127,40 +1630,3 @@ /* Define to `int' if <sys/types.h> doesn't define. */ #undef uid_t - -/* Define as a marker that can be attached to declarations that might not - be used. This helps to reduce warnings, such as from - GCC -Wunused-parameter. */ -#if __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) -# define _GL_UNUSED __attribute__ ((__unused__)) -#else -# define _GL_UNUSED -#endif -/* The name _UNUSED_PARAMETER_ is an earlier spelling, although the name - is a misnomer outside of parameter lists. */ -#define _UNUSED_PARAMETER_ _GL_UNUSED - -/* gcc supports the "unused" attribute on possibly unused labels, and - g++ has since version 4.5. Note to support C++ as well as C, - _GL_UNUSED_LABEL should be used with a trailing ; */ -#if !defined __cplusplus || __GNUC__ > 4 \ - || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) -# define _GL_UNUSED_LABEL _GL_UNUSED -#else -# define _GL_UNUSED_LABEL -#endif - -/* The __pure__ attribute was added in gcc 2.96. */ -#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) -# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) -#else -# define _GL_ATTRIBUTE_PURE /* empty */ -#endif - -/* The __const__ attribute was added in gcc 2.95. */ -#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) -# define _GL_ATTRIBUTE_CONST __attribute__ ((__const__)) -#else -# define _GL_ATTRIBUTE_CONST /* empty */ -#endif - diff -Nru gdb-9.1/gnulib/configure gdb-10.2/gnulib/configure --- gdb-9.1/gnulib/configure 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/configure 2021-04-25 04:06:26.000000000 +0000 @@ -620,8 +620,9 @@ #endif" gl_use_threads_default= -gl_header_list= -gl_func_list= +gl_use_winpthreads_default= +ac_header_list= +ac_func_list= gl_fnmatch_required=POSIX ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE @@ -677,6 +678,8 @@ NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H NEXT_WCTYPE_H HAVE_ISWCNTRL +REPLACE_ISWXDIGIT +REPLACE_ISWDIGIT REPLACE_ISWBLANK HAVE_WCTRANS_T HAVE_WCTYPE_T @@ -685,7 +688,10 @@ GNULIB_WCTRANS GNULIB_ISWCTYPE GNULIB_WCTYPE +GNULIB_ISWXDIGIT +GNULIB_ISWDIGIT GNULIB_ISWBLANK +HAVE_CRTDEFS_H HAVE_WINT_T NEXT_AS_FIRST_DIRECTIVE_WCHAR_H NEXT_WCHAR_H @@ -698,42 +704,22 @@ TIME_H_DEFINES_STRUCT_TIMESPEC NEXT_AS_FIRST_DIRECTIVE_TIME_H NEXT_TIME_H -REPLACE_LOCALTIME -REPLACE_GMTIME -REPLACE_TIMEGM -REPLACE_NANOSLEEP -REPLACE_MKTIME -REPLACE_LOCALTIME_R -HAVE_TIMEGM -HAVE_STRPTIME -HAVE_NANOSLEEP -HAVE_DECL_LOCALTIME_R -GNULIB_TIME_RZ -GNULIB_TIME_R -GNULIB_TIMEGM -GNULIB_STRPTIME -GNULIB_NANOSLEEP -GNULIB_MKTIME HAVE_SYS_UIO_H NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H NEXT_SYS_UIO_H +WINDOWS_STAT_INODES WINDOWS_64_BIT_OFF_T NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H NEXT_SYS_TYPES_H +HAVE_SYS_RANDOM_H +NEXT_AS_FIRST_DIRECTIVE_SYS_RANDOM_H +NEXT_SYS_RANDOM_H NEXT_AS_FIRST_DIRECTIVE_STRING_H NEXT_STRING_H NEXT_AS_FIRST_DIRECTIVE_STDLIB_H NEXT_STDLIB_H NEXT_AS_FIRST_DIRECTIVE_STDIO_H NEXT_STDIO_H -NEXT_AS_FIRST_DIRECTIVE_STDDEF_H -NEXT_STDDEF_H -GL_GENERATE_STDDEF_H_FALSE -GL_GENERATE_STDDEF_H_TRUE -STDDEF_H -HAVE_WCHAR_T -HAVE_MAX_ALIGN_T -REPLACE_NULL HAVE__BOOL GL_GENERATE_STDBOOL_H_FALSE GL_GENERATE_STDBOOL_H_TRUE @@ -867,17 +853,17 @@ NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H NEXT_NETINET_IN_H UNDEFINE_STRTOK_R -REPLACE_STRTOK_R REPLACE_STRSIGNAL -REPLACE_STRNLEN -REPLACE_STRNDUP -REPLACE_STRNCAT REPLACE_STRERROR_R REPLACE_STRERROR -REPLACE_STRCHRNUL +REPLACE_STRTOK_R REPLACE_STRCASESTR REPLACE_STRSTR +REPLACE_STRNLEN +REPLACE_STRNDUP +REPLACE_STRNCAT REPLACE_STRDUP +REPLACE_STRCHRNUL REPLACE_STPNCPY REPLACE_MEMMEM REPLACE_MEMCHR @@ -901,6 +887,7 @@ HAVE_MEMCHR HAVE_FFSLL HAVE_FFSL +HAVE_EXPLICIT_BZERO HAVE_MBSLEN GNULIB_STRVERSCMP GNULIB_STRSIGNAL @@ -939,112 +926,46 @@ GNULIB_MEMCHR GNULIB_FFSLL GNULIB_FFSL -LOCALE_FR -LOCALE_FR_UTF8 +GNULIB_EXPLICIT_BZERO +HAVE_VISIBILITY +CFLAG_VISIBILITY +LIB_MBRTOWC LOCALE_ZH_CN +LOCALE_FR_UTF8 LOCALE_JA -REPLACE_WCSWIDTH -REPLACE_WCWIDTH -REPLACE_WCSNRTOMBS -REPLACE_WCSRTOMBS -REPLACE_WCRTOMB -REPLACE_MBSNRTOWCS -REPLACE_MBSRTOWCS -REPLACE_MBRLEN -REPLACE_MBRTOWC -REPLACE_MBSINIT -REPLACE_WCTOB -REPLACE_BTOWC -REPLACE_MBSTATE_T -HAVE_DECL_WCWIDTH -HAVE_DECL_WCTOB -HAVE_WCSWIDTH -HAVE_WCSTOK -HAVE_WCSSTR -HAVE_WCSPBRK -HAVE_WCSSPN -HAVE_WCSCSPN -HAVE_WCSRCHR -HAVE_WCSCHR -HAVE_WCSDUP -HAVE_WCSXFRM -HAVE_WCSCOLL -HAVE_WCSNCASECMP -HAVE_WCSCASECMP -HAVE_WCSNCMP -HAVE_WCSCMP -HAVE_WCSNCAT -HAVE_WCSCAT -HAVE_WCPNCPY -HAVE_WCSNCPY -HAVE_WCPCPY -HAVE_WCSCPY -HAVE_WCSNLEN -HAVE_WCSLEN -HAVE_WMEMSET -HAVE_WMEMMOVE -HAVE_WMEMCPY -HAVE_WMEMCMP -HAVE_WMEMCHR -HAVE_WCSNRTOMBS -HAVE_WCSRTOMBS -HAVE_WCRTOMB -HAVE_MBSNRTOWCS -HAVE_MBSRTOWCS -HAVE_MBRLEN -HAVE_MBRTOWC -HAVE_MBSINIT -HAVE_BTOWC -GNULIB_WCSWIDTH -GNULIB_WCSTOK -GNULIB_WCSSTR -GNULIB_WCSPBRK -GNULIB_WCSSPN -GNULIB_WCSCSPN -GNULIB_WCSRCHR -GNULIB_WCSCHR -GNULIB_WCSDUP -GNULIB_WCSXFRM -GNULIB_WCSCOLL -GNULIB_WCSNCASECMP -GNULIB_WCSCASECMP -GNULIB_WCSNCMP -GNULIB_WCSCMP -GNULIB_WCSNCAT -GNULIB_WCSCAT -GNULIB_WCPNCPY -GNULIB_WCSNCPY -GNULIB_WCPCPY -GNULIB_WCSCPY -GNULIB_WCSNLEN -GNULIB_WCSLEN -GNULIB_WMEMSET -GNULIB_WMEMMOVE -GNULIB_WMEMCPY -GNULIB_WMEMCMP -GNULIB_WMEMCHR -GNULIB_WCWIDTH -GNULIB_WCSNRTOMBS -GNULIB_WCSRTOMBS -GNULIB_WCRTOMB -GNULIB_MBSNRTOWCS -GNULIB_MBSRTOWCS -GNULIB_MBRLEN -GNULIB_MBRTOWC -GNULIB_MBSINIT -GNULIB_WCTOB -GNULIB_BTOWC NEXT_AS_FIRST_DIRECTIVE_MATH_H NEXT_MATH_H LTLIBMULTITHREAD LIBMULTITHREAD LTLIBTHREAD LIBTHREAD -LIBPTH_PREFIX -LTLIBPTH -LIBPTH +LIBSTDTHREAD +NEXT_AS_FIRST_DIRECTIVE_LOCALE_H +NEXT_LOCALE_H +HAVE_XLOCALE_H +NEXT_AS_FIRST_DIRECTIVE_STDDEF_H +NEXT_STDDEF_H +GL_GENERATE_STDDEF_H_FALSE +GL_GENERATE_STDDEF_H_TRUE +STDDEF_H +HAVE_WCHAR_T +HAVE_MAX_ALIGN_T +REPLACE_NULL +REPLACE_STRUCT_LCONV +REPLACE_FREELOCALE +REPLACE_DUPLOCALE +REPLACE_NEWLOCALE +REPLACE_SETLOCALE +REPLACE_LOCALECONV +HAVE_FREELOCALE +HAVE_DUPLOCALE +HAVE_NEWLOCALE +GNULIB_LOCALENAME +GNULIB_DUPLOCALE +GNULIB_SETLOCALE_NULL +GNULIB_SETLOCALE +GNULIB_LOCALECONV LOCALCHARSET_TESTS_ENVIRONMENT -GLIBC21 NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H NEXT_INTTYPES_H UINT64_MAX_EQ_ULONG_MAX @@ -1055,6 +976,7 @@ INT32_MAX_LT_INTMAX_MAX REPLACE_STRTOUMAX REPLACE_STRTOIMAX +HAVE_IMAXDIV_T HAVE_DECL_STRTOUMAX HAVE_DECL_STRTOIMAX HAVE_DECL_IMAXDIV @@ -1089,14 +1011,12 @@ HAVE_SYS_TYPES_H HAVE_INTTYPES_H HAVE_WCHAR_H -HAVE_UNSIGNED_LONG_LONG_INT -HAVE_LONG_LONG_INT +GNULIB_OVERRIDES_WINT_T GL_GENERATE_LIMITS_H_FALSE GL_GENERATE_LIMITS_H_TRUE LIMITS_H NEXT_AS_FIRST_DIRECTIVE_LIMITS_H NEXT_LIMITS_H -HAVE_WS2TCPIP_H HAVE_SYS_SOCKET_H NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H NEXT_SYS_SOCKET_H @@ -1120,22 +1040,64 @@ GNULIB_CONNECT GNULIB_SOCKET INET_NTOP_LIB -HAVE_SYS_CDEFS_H +LIB_HARD_LOCALE +LIB_SETLOCALE_NULL +LIB_SCHED_YIELD +LIBPMULTITHREAD +LIBPTHREAD GL_GENERATE_GLOB_H_FALSE GL_GENERATE_GLOB_H_TRUE GLOB_H +HAVE_GLOB_H +NEXT_AS_FIRST_DIRECTIVE_GLOB_H +NEXT_GLOB_H +REPLACE_GLOB_PATTERN_P +REPLACE_GLOB +HAVE_GLOB_PATTERN_P +HAVE_GLOB +GNULIB_GLOB +REPLACE_LOCALTIME +REPLACE_GMTIME +REPLACE_TZSET +REPLACE_TIMEGM +REPLACE_STRFTIME +REPLACE_NANOSLEEP +REPLACE_MKTIME +REPLACE_LOCALTIME_R +REPLACE_CTIME +HAVE_TIMEZONE_T +HAVE_TZSET +HAVE_TIMEGM +HAVE_STRPTIME +HAVE_NANOSLEEP +HAVE_DECL_LOCALTIME_R +GNULIB_TZSET +GNULIB_TIME_RZ +GNULIB_TIME_R +GNULIB_TIMEGM +GNULIB_STRPTIME +GNULIB_STRFTIME +GNULIB_NANOSLEEP +GNULIB_LOCALTIME +GNULIB_MKTIME +GNULIB_CTIME NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H NEXT_SYS_TIME_H REPLACE_STRUCT_TIMEVAL REPLACE_GETTIMEOFDAY -HAVE_TIMEZONE_T HAVE_SYS_TIME_H HAVE_STRUCT_TIMEVAL HAVE_GETTIMEOFDAY GNULIB_GETTIMEOFDAY LTLIBINTL LIBINTL +LIB_GETRANDOM +REPLACE_GETRANDOM +HAVE_GETRANDOM +GNULIB_GETRANDOM +LIB_GETLOGIN WINDOWS_64_BIT_ST_SIZE +WINDOWS_STAT_TIMESPEC NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H NEXT_SYS_STAT_H REPLACE_UTIMENSAT @@ -1147,6 +1109,7 @@ REPLACE_FUTIMENS REPLACE_FSTATAT REPLACE_FSTAT +REPLACE_FCHMODAT HAVE_UTIMENSAT HAVE_MKNODAT HAVE_MKNOD @@ -1158,6 +1121,7 @@ HAVE_FUTIMENS HAVE_FSTATAT HAVE_FCHMODAT +GNULIB_OVERRIDES_STRUCT_STAT GNULIB_UTIMENSAT GNULIB_STAT GNULIB_MKNODAT @@ -1177,12 +1141,18 @@ REPLACE_TRUNCL REPLACE_TRUNCF REPLACE_TRUNC +REPLACE_TANHF +REPLACE_TANF REPLACE_SQRTL +REPLACE_SQRTF +REPLACE_SINHF +REPLACE_SINF REPLACE_SIGNBIT_USING_GCC REPLACE_SIGNBIT REPLACE_ROUNDL REPLACE_ROUNDF REPLACE_ROUND +REPLACE_RINTL REPLACE_REMAINDERL REPLACE_REMAINDERF REPLACE_REMAINDER @@ -1209,6 +1179,7 @@ REPLACE_ISNAN REPLACE_ISINF REPLACE_ISFINITE +REPLACE_ILOGBL REPLACE_ILOGBF REPLACE_ILOGB REPLACE_HYPOTL @@ -1230,13 +1201,22 @@ REPLACE_FABSL REPLACE_EXP2L REPLACE_EXP2 +REPLACE_EXPM1L REPLACE_EXPM1F REPLACE_EXPM1 +REPLACE_EXPL +REPLACE_EXPF +REPLACE_COSHF +REPLACE_COSF REPLACE_CEILL REPLACE_CEILF REPLACE_CEIL REPLACE_CBRTL REPLACE_CBRTF +REPLACE_ATAN2F +REPLACE_ATANF +REPLACE_ASINF +REPLACE_ACOSF HAVE_DECL_TRUNCL HAVE_DECL_TRUNCF HAVE_DECL_TRUNC @@ -1431,6 +1411,12 @@ GL_GENERATE_FNMATCH_H_FALSE GL_GENERATE_FNMATCH_H_TRUE FNMATCH_H +HAVE_FNMATCH_H +NEXT_AS_FIRST_DIRECTIVE_FNMATCH_H +NEXT_FNMATCH_H +REPLACE_FNMATCH +HAVE_FNMATCH +GNULIB_FNMATCH REPLACE_ITOLD GL_GENERATE_FLOAT_H_FALSE GL_GENERATE_FLOAT_H_TRUE @@ -1442,12 +1428,14 @@ REPLACE_OPENAT REPLACE_OPEN REPLACE_FCNTL +REPLACE_CREAT HAVE_OPENAT HAVE_FCNTL GNULIB_OPENAT GNULIB_OPEN GNULIB_NONBLOCKING GNULIB_FCNTL +GNULIB_CREAT EOVERFLOW_VALUE EOVERFLOW_HIDDEN ENOLINK_VALUE @@ -1462,9 +1450,10 @@ HAVE_DIRENT_H NEXT_AS_FIRST_DIRECTIVE_DIRENT_H NEXT_DIRENT_H -pkglibexecdir -runstatedir -lispdir +NEXT_AS_FIRST_DIRECTIVE_CTYPE_H +NEXT_CTYPE_H +HAVE_ISBLANK +GNULIB_ISBLANK REPLACE_FDOPENDIR REPLACE_DIRFD REPLACE_CLOSEDIR @@ -1490,11 +1479,13 @@ HAVE_MSVC_INVALID_PARAMETER_HANDLER UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS UNISTD_H_HAVE_WINSOCK2_H +UNISTD_H_HAVE_SYS_RANDOM_H REPLACE_WRITE REPLACE_USLEEP REPLACE_UNLINKAT REPLACE_UNLINK REPLACE_TTYNAME_R +REPLACE_TRUNCATE REPLACE_SYMLINKAT REPLACE_SYMLINK REPLACE_SLEEP @@ -1509,6 +1500,7 @@ REPLACE_LINK REPLACE_LCHOWN REPLACE_ISATTY +REPLACE_GETPASS REPLACE_GETPAGESIZE REPLACE_GETGROUPS REPLACE_GETLOGIN_R @@ -1517,17 +1509,21 @@ REPLACE_GETCWD REPLACE_FTRUNCATE REPLACE_FCHOWNAT +REPLACE_FACCESSAT REPLACE_DUP2 REPLACE_DUP REPLACE_CLOSE REPLACE_CHOWN +REPLACE_ACCESS HAVE_SYS_PARAM_H HAVE_OS_H HAVE_DECL_TTYNAME_R +HAVE_DECL_TRUNCATE HAVE_DECL_SETHOSTNAME HAVE_DECL_GETUSERSHELL HAVE_DECL_GETPAGESIZE HAVE_DECL_GETLOGIN_R +HAVE_DECL_GETLOGIN HAVE_DECL_GETDOMAINNAME HAVE_DECL_FDATASYNC HAVE_DECL_FCHDIR @@ -1548,10 +1544,12 @@ HAVE_LINK HAVE_LCHOWN HAVE_GROUP_MEMBER +HAVE_GETPASS HAVE_GETPAGESIZE HAVE_GETLOGIN HAVE_GETHOSTNAME HAVE_GETGROUPS +HAVE_GETENTROPY HAVE_GETDTABLESIZE HAVE_FTRUNCATE HAVE_FSYNC @@ -1562,6 +1560,7 @@ HAVE_EUIDACCESS HAVE_DUP3 HAVE_DUP2 +HAVE_COPY_FILE_RANGE HAVE_CHOWN GNULIB_WRITE GNULIB_USLEEP @@ -1570,6 +1569,7 @@ GNULIB_UNISTD_H_SIGPIPE GNULIB_UNISTD_H_NONBLOCKING GNULIB_TTYNAME_R +GNULIB_TRUNCATE GNULIB_SYMLINKAT GNULIB_SYMLINK GNULIB_SLEEP @@ -1589,11 +1589,14 @@ GNULIB_ISATTY GNULIB_GROUP_MEMBER GNULIB_GETUSERSHELL +GNULIB_GETPASS GNULIB_GETPAGESIZE +GNULIB_GETOPT_POSIX GNULIB_GETLOGIN_R GNULIB_GETLOGIN GNULIB_GETHOSTNAME GNULIB_GETGROUPS +GNULIB_GETENTROPY GNULIB_GETDTABLESIZE GNULIB_GETDOMAINNAME GNULIB_GETCWD @@ -1608,16 +1611,21 @@ GNULIB_DUP3 GNULIB_DUP2 GNULIB_DUP +GNULIB_COPY_FILE_RANGE GNULIB_CLOSE GNULIB_CHOWN GNULIB_CHDIR +GNULIB_ACCESS REPLACE_WCTOMB REPLACE_UNSETENV +REPLACE_STRTOLD REPLACE_STRTOD +REPLACE_SETSTATE REPLACE_SETENV REPLACE_REALPATH REPLACE_REALLOC REPLACE_RANDOM_R +REPLACE_RANDOM REPLACE_QSORT_R REPLACE_PUTENV REPLACE_PTSNAME_R @@ -1625,6 +1633,7 @@ REPLACE_MKSTEMP REPLACE_MBTOWC REPLACE_MALLOC +REPLACE_INITSTATE REPLACE_CANONICALIZE_FILE_NAME REPLACE_CALLOC HAVE_DECL_UNSETENV @@ -1633,12 +1642,16 @@ HAVE_STRUCT_RANDOM_DATA HAVE_STRTOULL HAVE_STRTOLL +HAVE_STRTOLD HAVE_STRTOD +HAVE_DECL_SETSTATE +HAVE_SETSTATE HAVE_DECL_SETENV HAVE_SETENV HAVE_SECURE_GETENV HAVE_RPMATCH HAVE_REALPATH +HAVE_REALLOCARRAY HAVE_RANDOM_R HAVE_RANDOM_H HAVE_RANDOM @@ -1651,6 +1664,9 @@ HAVE_MKOSTEMPS HAVE_MKOSTEMP HAVE_MKDTEMP +HAVE_MBTOWC +HAVE_DECL_INITSTATE +HAVE_INITSTATE HAVE_GRANTPT HAVE_GETSUBOPT HAVE_DECL_GETLOADAVG @@ -1663,12 +1679,14 @@ GNULIB_SYSTEM_POSIX GNULIB_STRTOULL GNULIB_STRTOLL +GNULIB_STRTOLD GNULIB_STRTOD GNULIB_SETENV GNULIB_SECURE_GETENV GNULIB_RPMATCH GNULIB_REALPATH GNULIB_REALLOC_POSIX +GNULIB_REALLOCARRAY GNULIB_RANDOM_R GNULIB_RANDOM GNULIB_QSORT_R @@ -1690,7 +1708,106 @@ GNULIB_CALLOC_POSIX GNULIB_ATOLL GNULIB__EXIT +LOCALE_FR +REPLACE_WCSTOK +REPLACE_WCSFTIME +REPLACE_WCSWIDTH +REPLACE_WCWIDTH +REPLACE_WCSNRTOMBS +REPLACE_WCSRTOMBS +REPLACE_WCRTOMB +REPLACE_MBSNRTOWCS +REPLACE_MBSRTOWCS +REPLACE_MBRLEN +REPLACE_MBRTOWC +REPLACE_MBSINIT +REPLACE_WCTOB +REPLACE_BTOWC +REPLACE_MBSTATE_T +HAVE_DECL_WCWIDTH +HAVE_DECL_WCTOB +HAVE_WCSFTIME +HAVE_WCSWIDTH +HAVE_WCSTOK +HAVE_WCSSTR +HAVE_WCSPBRK +HAVE_WCSSPN +HAVE_WCSCSPN +HAVE_WCSRCHR +HAVE_WCSCHR +HAVE_WCSDUP +HAVE_WCSXFRM +HAVE_WCSCOLL +HAVE_WCSNCASECMP +HAVE_WCSCASECMP +HAVE_WCSNCMP +HAVE_WCSCMP +HAVE_WCSNCAT +HAVE_WCSCAT +HAVE_WCPNCPY +HAVE_WCSNCPY +HAVE_WCPCPY +HAVE_WCSCPY +HAVE_WCSNLEN +HAVE_WCSLEN +HAVE_WMEMSET +HAVE_WMEMPCPY +HAVE_WMEMMOVE +HAVE_WMEMCPY +HAVE_WMEMCMP +HAVE_WMEMCHR +HAVE_WCSNRTOMBS +HAVE_WCSRTOMBS +HAVE_WCRTOMB +HAVE_MBSNRTOWCS +HAVE_MBSRTOWCS +HAVE_MBRLEN +HAVE_MBRTOWC +HAVE_MBSINIT +HAVE_BTOWC +GNULIB_WCSFTIME +GNULIB_WCSWIDTH +GNULIB_WCSTOK +GNULIB_WCSSTR +GNULIB_WCSPBRK +GNULIB_WCSSPN +GNULIB_WCSCSPN +GNULIB_WCSRCHR +GNULIB_WCSCHR +GNULIB_WCSDUP +GNULIB_WCSXFRM +GNULIB_WCSCOLL +GNULIB_WCSNCASECMP +GNULIB_WCSCASECMP +GNULIB_WCSNCMP +GNULIB_WCSCMP +GNULIB_WCSNCAT +GNULIB_WCSCAT +GNULIB_WCPNCPY +GNULIB_WCSNCPY +GNULIB_WCPCPY +GNULIB_WCSCPY +GNULIB_WCSNLEN +GNULIB_WCSLEN +GNULIB_WMEMSET +GNULIB_WMEMPCPY +GNULIB_WMEMMOVE +GNULIB_WMEMCPY +GNULIB_WMEMCMP +GNULIB_WMEMCHR +GNULIB_WCWIDTH +GNULIB_WCSNRTOMBS +GNULIB_WCSRTOMBS +GNULIB_WCRTOMB +GNULIB_MBSNRTOWCS +GNULIB_MBSRTOWCS +GNULIB_MBRLEN +GNULIB_MBRTOWC +GNULIB_MBSINIT +GNULIB_WCTOB +GNULIB_BTOWC MKDIR_P +HAVE_WS2TCPIP_H HAVE_FEATURES_H NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H NEXT_ARPA_INET_H @@ -1705,12 +1822,17 @@ HAVE_DECL_INET_NTOP GNULIB_INET_PTON GNULIB_INET_NTOP +HAVE_ALLOCA_H GL_GENERATE_ALLOCA_H_FALSE GL_GENERATE_ALLOCA_H_TRUE ALLOCA_H ALLOCA GL_COND_LIBTOOL_FALSE GL_COND_LIBTOOL_TRUE +RANLIB +ARFLAGS +AR +LARGEFILE_CPPFLAGS target_os target_vendor target_cpu @@ -1723,10 +1845,6 @@ build_vendor build_cpu build -RANLIB -ARFLAGS -ac_ct_AR -AR EGREP GREP CPP @@ -1782,12 +1900,10 @@ ac_user_opts=' enable_option_checking enable_maintainer_mode +enable_plugins enable_largefile enable_threads -enable_plugins -with_gnu_ld -enable_rpath -with_libpth_prefix +enable_cross_guesses enable_dependency_tracking enable_silent_rules ' @@ -2422,12 +2538,13 @@ --enable-maintainer-mode enable make rules and dependencies not useful (and sometimes confusing) to the casual installer + --enable-plugins Enable support for plugins --disable-largefile omit support for large files - --enable-threads={posix|solaris|pth|windows} + --enable-threads={isoc|posix|isoc+posix|windows} specify multithreading API --disable-threads build without multithread safety - --enable-plugins Enable support for plugins - --disable-rpath do not hardcode runtime library paths + --enable-cross-guesses={conservative|risky} + specify policy for cross-compilation guesses --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking @@ -2435,13 +2552,6 @@ --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") -Optional Packages: - --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] - --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) - --with-gnu-ld assume the C compiler uses GNU ld [default=no] - --with-libpth-prefix[=DIR] search for libpth in DIR/include and DIR/lib - --without-libpth-prefix don't search for libpth in includedir and libdir - Some influential environment variables: CC C compiler command CFLAGS C compiler flags @@ -2940,6 +3050,10 @@ # accordingly. ac_fn_c_check_decl () { + ac_save_ac_compile="$ac_compile" + if test -n "$ac_compile_for_check_decl"; then + ac_compile="$ac_compile_for_check_decl" + fi as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack as_decl_name=`echo $2|sed 's/ *(.*//'` as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'` @@ -2977,6 +3091,7 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + ac_compile="$ac_save_ac_compile" } # ac_fn_c_check_decl @@ -3503,70 +3618,72 @@ >$cache_file fi -gl_header_list="$gl_header_list arpa/inet.h" -gl_header_list="$gl_header_list features.h" -gl_func_list="$gl_func_list canonicalize_file_name" -gl_func_list="$gl_func_list getcwd" -gl_func_list="$gl_func_list readlink" -gl_func_list="$gl_func_list realpath" -gl_header_list="$gl_header_list sys/param.h" -gl_header_list="$gl_header_list unistd.h" -gl_func_list="$gl_func_list _set_invalid_parameter_handler" -gl_header_list="$gl_header_list sys/socket.h" -gl_func_list="$gl_func_list fchdir" -gl_header_list="$gl_header_list dirent.h" -gl_func_list="$gl_func_list fcntl" -gl_func_list="$gl_func_list symlink" -gl_func_list="$gl_func_list fdopendir" -gl_func_list="$gl_func_list mempcpy" -gl_func_list="$gl_func_list btowc" -gl_func_list="$gl_func_list isblank" -gl_func_list="$gl_func_list iswctype" -gl_func_list="$gl_func_list mbsrtowcs" -gl_func_list="$gl_func_list wmemchr" -gl_func_list="$gl_func_list wmemcpy" -gl_func_list="$gl_func_list wmempcpy" -gl_header_list="$gl_header_list wctype.h" +as_fn_append ac_header_list " arpa/inet.h" +as_fn_append ac_header_list " features.h" +as_fn_append ac_header_list " sys/socket.h" +as_fn_append ac_func_list " btowc" +as_fn_append ac_func_list " canonicalize_file_name" +as_fn_append ac_func_list " getcwd" +as_fn_append ac_func_list " readlink" +as_fn_append ac_func_list " realpath" +as_fn_append ac_header_list " sys/param.h" +as_fn_append ac_header_list " unistd.h" +as_fn_append ac_func_list " _set_invalid_parameter_handler" +as_fn_append ac_func_list " fchdir" +as_fn_append ac_header_list " dirent.h" +as_fn_append ac_func_list " fcntl" +as_fn_append ac_func_list " symlink" +as_fn_append ac_func_list " fdopendir" +as_fn_append ac_func_list " mempcpy" +as_fn_append ac_header_list " fnmatch.h" +as_fn_append ac_func_list " fnmatch" +as_fn_append ac_func_list " mbsrtowcs" gl_fnmatch_required=GNU -gl_header_list="$gl_header_list sys/stat.h" -gl_func_list="$gl_func_list fstatat" -gl_func_list="$gl_func_list getdtablesize" -gl_func_list="$gl_func_list getlogin_r" -gl_func_list="$gl_func_list getprogname" -gl_func_list="$gl_func_list getexecname" -gl_header_list="$gl_header_list sys/time.h" -gl_func_list="$gl_func_list gettimeofday" -gl_header_list="$gl_header_list sys/cdefs.h" -gl_func_list="$gl_func_list getpwnam_r" -gl_header_list="$gl_header_list netdb.h" -gl_header_list="$gl_header_list netinet/in.h" -gl_header_list="$gl_header_list limits.h" -gl_header_list="$gl_header_list wchar.h" -gl_header_list="$gl_header_list stdint.h" -gl_header_list="$gl_header_list inttypes.h" -gl_func_list="$gl_func_list lstat" -gl_header_list="$gl_header_list math.h" -gl_func_list="$gl_func_list mbsinit" -gl_func_list="$gl_func_list mbrtowc" -gl_header_list="$gl_header_list sys/mman.h" -gl_func_list="$gl_func_list mprotect" -gl_func_list="$gl_func_list mkostemp" -gl_func_list="$gl_func_list openat" -gl_func_list="$gl_func_list link" -gl_func_list="$gl_func_list secure_getenv" -gl_func_list="$gl_func_list getuid" -gl_func_list="$gl_func_list geteuid" -gl_func_list="$gl_func_list getgid" -gl_func_list="$gl_func_list getegid" -gl_func_list="$gl_func_list setenv" -gl_func_list="$gl_func_list strdup" -gl_func_list="$gl_func_list __xpg_strerror_r" -gl_func_list="$gl_func_list catgets" -gl_func_list="$gl_func_list snprintf" -gl_header_list="$gl_header_list sys/uio.h" -gl_func_list="$gl_func_list localtime_r" -gl_func_list="$gl_func_list pipe" -gl_func_list="$gl_func_list iswcntrl" +as_fn_append ac_header_list " sys/stat.h" +as_fn_append ac_func_list " fstatat" +as_fn_append ac_func_list " getdtablesize" +as_fn_append ac_func_list " getlogin_r" +as_fn_append ac_func_list " getprogname" +as_fn_append ac_func_list " getexecname" +as_fn_append ac_func_list " getrandom" +as_fn_append ac_header_list " sys/time.h" +as_fn_append ac_func_list " gettimeofday" +as_fn_append ac_header_list " glob.h" +as_fn_append ac_func_list " glob" +as_fn_append ac_func_list " glob_pattern_p" +as_fn_append ac_func_list " getpwnam_r" +as_fn_append ac_header_list " threads.h" +as_fn_append ac_header_list " netdb.h" +as_fn_append ac_header_list " netinet/in.h" +as_fn_append ac_header_list " limits.h" +as_fn_append ac_header_list " wchar.h" +as_fn_append ac_header_list " stdint.h" +as_fn_append ac_header_list " inttypes.h" +as_fn_append ac_func_list " isblank" +as_fn_append ac_header_list " xlocale.h" +as_fn_append ac_func_list " lstat" +as_fn_append ac_header_list " math.h" +as_fn_append ac_func_list " mbsinit" +as_fn_append ac_func_list " mbrtowc" +as_fn_append ac_header_list " sys/mman.h" +as_fn_append ac_func_list " mprotect" +as_fn_append ac_func_list " mkostemp" +as_fn_append ac_func_list " openat" +as_fn_append ac_func_list " link" +as_fn_append ac_func_list " setenv" +as_fn_append ac_func_list " strdup" +as_fn_append ac_func_list " strerror_r" +as_fn_append ac_func_list " __xpg_strerror_r" +as_fn_append ac_func_list " catgets" +as_fn_append ac_func_list " snprintf" +as_fn_append ac_header_list " sys/random.h" +as_fn_append ac_header_list " sys/uio.h" +as_fn_append ac_func_list " localtime_r" +as_fn_append ac_func_list " pipe" +as_fn_append ac_header_list " crtdefs.h" +as_fn_append ac_func_list " iswcntrl" +as_fn_append ac_header_list " wctype.h" +as_fn_append ac_func_list " wmempcpy" # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false @@ -3963,6 +4080,100 @@ fi fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. +set dummy ${ac_tool_prefix}clang; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}clang" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "clang", so it can be a program name with args. +set dummy clang; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="clang" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 @@ -3974,7 +4185,7 @@ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 -for ac_option in --version -v -V -qversion; do +for ac_option in --version -v -V -qversion -version; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; @@ -4360,8 +4571,420 @@ CFLAGS= fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 -$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 +$as_echo_n "checking for $CC option to enable C11 features... " >&6; } +if ${ac_cv_prog_cc_c11+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c11=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdarg.h> +#include <stdbool.h> +#include <stddef.h> +#include <stdlib.h> +#include <wchar.h> +#include <stdio.h> + +// Check varargs macros. These examples are taken from C99 6.10.3.5. +#define debug(...) fprintf (stderr, __VA_ARGS__) +#define showlist(...) puts (#__VA_ARGS__) +#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) +static void +test_varargs_macros (void) +{ + int x = 1234; + int y = 5678; + debug ("Flag"); + debug ("X = %d\n", x); + showlist (The first, second, and third items.); + report (x>y, "x is %d but y is %d", x, y); +} + +// Check long long types. +#define BIG64 18446744073709551615ull +#define BIG32 4294967295ul +#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) +#if !BIG_OK + your preprocessor is broken; +#endif +#if BIG_OK +#else + your preprocessor is broken; +#endif +static long long int bignum = -9223372036854775807LL; +static unsigned long long int ubignum = BIG64; + +struct incomplete_array +{ + int datasize; + double data[]; +}; + +struct named_init { + int number; + const wchar_t *name; + double average; +}; + +typedef const char *ccp; + +static inline int +test_restrict (ccp restrict text) +{ + // See if C++-style comments work. + // Iterate through items via the restricted pointer. + // Also check for declarations in for loops. + for (unsigned int i = 0; *(text+i) != '\0'; ++i) + continue; + return 0; +} + +// Check varargs and va_copy. +static bool +test_varargs (const char *format, ...) +{ + va_list args; + va_start (args, format); + va_list args_copy; + va_copy (args_copy, args); + + const char *str = ""; + int number = 0; + float fnumber = 0; + + while (*format) + { + switch (*format++) + { + case 's': // string + str = va_arg (args_copy, const char *); + break; + case 'd': // int + number = va_arg (args_copy, int); + break; + case 'f': // float + fnumber = va_arg (args_copy, double); + break; + default: + break; + } + } + va_end (args_copy); + va_end (args); + + return *str && number && fnumber; +} +// Check _Alignas. +char _Alignas (double) aligned_as_double; +char _Alignas (0) no_special_alignment; +extern char aligned_as_int; +char _Alignas (0) _Alignas (int) aligned_as_int; + +// Check _Alignof. +enum +{ + int_alignment = _Alignof (int), + int_array_alignment = _Alignof (int[100]), + char_alignment = _Alignof (char) +}; +_Static_assert (0 < -_Alignof (int), "_Alignof is signed"); + +// Check _Noreturn. +int _Noreturn does_not_return (void) { for (;;) continue; } + +// Check _Static_assert. +struct test_static_assert +{ + int x; + _Static_assert (sizeof (int) <= sizeof (long int), + "_Static_assert does not work in struct"); + long int y; +}; + +// Check UTF-8 literals. +#define u8 syntax error! +char const utf8_literal[] = u8"happens to be ASCII" "another string"; + +// Check duplicate typedefs. +typedef long *long_ptr; +typedef long int *long_ptr; +typedef long_ptr long_ptr; + +// Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1. +struct anonymous +{ + union { + struct { int i; int j; }; + struct { int k; long int l; } w; + }; + int m; +} v1; + +int +main () +{ + + // Check bool. + _Bool success = false; + + // Check restrict. + if (test_restrict ("String literal") == 0) + success = true; + char *restrict newvar = "Another string"; + + // Check varargs. + success &= test_varargs ("s, d' f .", "string", 65, 34.234); + test_varargs_macros (); + + // Check flexible array members. + struct incomplete_array *ia = + malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); + ia->datasize = 10; + for (int i = 0; i < ia->datasize; ++i) + ia->data[i] = i * 1.234; + + // Check named initializers. + struct named_init ni = { + .number = 34, + .name = L"Test wide string", + .average = 543.34343, + }; + + ni.number = 58; + + int dynamic_array[ni.number]; + dynamic_array[ni.number - 1] = 543; + + // work around unused variable warnings + return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x' + || dynamic_array[ni.number - 1] != 543); + + v1.i = 2; + v1.w.k = 5; + _Static_assert ((offsetof (struct anonymous, i) + == offsetof (struct anonymous, w.k)), + "Anonymous union alignment botch"); + + ; + return 0; +} +_ACEOF +for ac_arg in '' -std=gnu11 +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c11=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c11" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +ac_prog_cc_stdc_options= +case "x$ac_cv_prog_cc_c11" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + ac_prog_cc_stdc_options=" $ac_cv_prog_cc_c11" + CC=$CC$ac_prog_cc_stdc_options + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 +$as_echo "$ac_cv_prog_cc_c11" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c11" != xno; then : + ac_prog_cc_stdc=c11 + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 +$as_echo_n "checking for $CC option to enable C99 features... " >&6; } +if ${ac_cv_prog_cc_c99+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c99=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdarg.h> +#include <stdbool.h> +#include <stddef.h> +#include <stdlib.h> +#include <wchar.h> +#include <stdio.h> + +// Check varargs macros. These examples are taken from C99 6.10.3.5. +#define debug(...) fprintf (stderr, __VA_ARGS__) +#define showlist(...) puts (#__VA_ARGS__) +#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) +static void +test_varargs_macros (void) +{ + int x = 1234; + int y = 5678; + debug ("Flag"); + debug ("X = %d\n", x); + showlist (The first, second, and third items.); + report (x>y, "x is %d but y is %d", x, y); +} + +// Check long long types. +#define BIG64 18446744073709551615ull +#define BIG32 4294967295ul +#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) +#if !BIG_OK + your preprocessor is broken; +#endif +#if BIG_OK +#else + your preprocessor is broken; +#endif +static long long int bignum = -9223372036854775807LL; +static unsigned long long int ubignum = BIG64; + +struct incomplete_array +{ + int datasize; + double data[]; +}; + +struct named_init { + int number; + const wchar_t *name; + double average; +}; + +typedef const char *ccp; + +static inline int +test_restrict (ccp restrict text) +{ + // See if C++-style comments work. + // Iterate through items via the restricted pointer. + // Also check for declarations in for loops. + for (unsigned int i = 0; *(text+i) != '\0'; ++i) + continue; + return 0; +} + +// Check varargs and va_copy. +static bool +test_varargs (const char *format, ...) +{ + va_list args; + va_start (args, format); + va_list args_copy; + va_copy (args_copy, args); + + const char *str = ""; + int number = 0; + float fnumber = 0; + + while (*format) + { + switch (*format++) + { + case 's': // string + str = va_arg (args_copy, const char *); + break; + case 'd': // int + number = va_arg (args_copy, int); + break; + case 'f': // float + fnumber = va_arg (args_copy, double); + break; + default: + break; + } + } + va_end (args_copy); + va_end (args); + + return *str && number && fnumber; +} +int +main () +{ + + // Check bool. + _Bool success = false; + + // Check restrict. + if (test_restrict ("String literal") == 0) + success = true; + char *restrict newvar = "Another string"; + + // Check varargs. + success &= test_varargs ("s, d' f .", "string", 65, 34.234); + test_varargs_macros (); + + // Check flexible array members. + struct incomplete_array *ia = + malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); + ia->datasize = 10; + for (int i = 0; i < ia->datasize; ++i) + ia->data[i] = i * 1.234; + + // Check named initializers. + struct named_init ni = { + .number = 34, + .name = L"Test wide string", + .average = 543.34343, + }; + + ni.number = 58; + + int dynamic_array[ni.number]; + dynamic_array[ni.number - 1] = 543; + + // work around unused variable warnings + return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x' + || dynamic_array[ni.number - 1] != 543); + + ; + return 0; +} +_ACEOF +for ac_arg in '' -std=gnu99 -std=c99 -c99 -AC99 -D_STDC_C99= -qlanglvl=extc1x -qlanglvl=extc99 +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c99=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c99" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +ac_prog_cc_stdc_options= +case "x$ac_cv_prog_cc_c99" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + ac_prog_cc_stdc_options=" $ac_cv_prog_cc_c99" + CC=$CC$ac_prog_cc_stdc_options + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 +$as_echo "$ac_cv_prog_cc_c99" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c99" != xno; then : + ac_prog_cc_stdc=c99 + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 +$as_echo_n "checking for $CC option to enable C89 features... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else @@ -4434,6 +5057,7 @@ fi # AC_CACHE_VAL +ac_prog_cc_stdc_options= case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 @@ -4442,11 +5066,20 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) - CC="$CC $ac_cv_prog_cc_c89" + ac_prog_cc_stdc_options=" $ac_cv_prog_cc_c89" + CC=$CC$ac_prog_cc_stdc_options { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : + ac_prog_cc_stdc=c89 + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 +else + ac_prog_cc_stdc=no + ac_cv_prog_cc_stdc=no +fi + +fi fi @@ -4456,49 +5089,49 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu -ac_aux_dir= -for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do - if test -f "$ac_dir/install-sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install-sh -c" - break - elif test -f "$ac_dir/install.sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install.sh -c" - break - elif test -f "$ac_dir/shtool"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/shtool install -c" - break - fi -done -if test -z "$ac_aux_dir"; then - as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 -fi -# These three variables are undocumented and unsupported, -# and are intended to be withdrawn in a future Autoconf release. -# They can cause serious problems if a builder's source tree is in a directory -# whose full name contains unusual characters. -ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. -ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. -ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler is clang" >&5 +$as_echo_n "checking whether the compiler is clang... " >&6; } +if ${gl_cv_compiler_clang+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + #ifdef __clang__ + barfbarf + #endif -# Expand $ac_aux_dir to an absolute path. -am_aux_dir=`cd "$ac_aux_dir" && pwd` +int +main () +{ -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 -$as_echo_n "checking whether $CC understands -c and -o together... " >&6; } -if ${am_cv_prog_cc_c_o+:} false; then : + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_compiler_clang=no +else + gl_cv_compiler_clang=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_compiler_clang" >&5 +$as_echo "$gl_cv_compiler_clang" >&6; } + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for compiler option needed when checking for declarations" >&5 +$as_echo_n "checking for compiler option needed when checking for declarations... " >&6; } +if ${gl_cv_compiler_check_decl_option+:} false; then : $as_echo_n "(cached) " >&6 else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + if test $gl_cv_compiler_clang = yes; then + save_ac_compile="$ac_compile" + ac_compile="$ac_compile -Werror=implicit-function-declaration" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -4509,42 +5142,25 @@ return 0; } _ACEOF - # Make sure it works both with $CC and with simple cc. - # Following AC_PROG_CC_C_O, we do the test twice because some - # compilers refuse to overwrite an existing .o file with -o, - # though they will create one. - am_cv_prog_cc_c_o=yes - for am_i in 1 2; do - if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 - ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } \ - && test -f conftest2.$ac_objext; then - : OK - else - am_cv_prog_cc_c_o=no - break - fi - done - rm -f core conftest* - unset am_i +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_compiler_check_decl_option='-Werror=implicit-function-declaration' +else + gl_cv_compiler_check_decl_option=none fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 -$as_echo "$am_cv_prog_cc_c_o" >&6; } -if test "$am_cv_prog_cc_c_o" != yes; then - # Losing compiler, so override with the script. - # FIXME: It is wrong to rewrite CC. - # But if we don't then we get into trouble of one sort or another. - # A longer-term fix would be to have automake use am__CC in this case, - # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" - CC="$am_aux_dir/compile $CC" +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_compile="$save_ac_compile" + else + gl_cv_compiler_check_decl_option=none + fi + fi -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_compiler_check_decl_option" >&5 +$as_echo "$gl_cv_compiler_check_decl_option" >&6; } + if test "x$gl_cv_compiler_check_decl_option" != xnone; then + ac_compile_for_check_decl="$ac_compile $gl_cv_compiler_check_decl_option" + else + ac_compile_for_check_decl="$ac_compile" + fi @@ -5006,6 +5622,10 @@ $as_echo "#define _GNU_SOURCE 1" >>confdefs.h + $as_echo "#define _NETBSD_SOURCE 1" >>confdefs.h + + $as_echo "#define _OPENBSD_SOURCE 1" >>confdefs.h + $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h $as_echo "#define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1" >>confdefs.h @@ -5072,529 +5692,322 @@ test $ac_cv_should_define__xopen_source = yes && $as_echo "#define _XOPEN_SOURCE 500" >>confdefs.h + $as_echo "#define _HPUX_ALT_XOPEN_SOCKET_API 1" >>confdefs.h +# Needs to run before gl_EARLY so it can override AC_SYS_LARGEFILE included +# there. +ac_aux_dir= +for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 +fi +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. +# Make sure we can run config.sub. +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Minix Amsterdam compiler" >&5 -$as_echo_n "checking for Minix Amsterdam compiler... " >&6; } -if ${gl_cv_c_amsterdam_compiler+:} false; then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if ${ac_cv_build+:} false; then : $as_echo_n "(cached) " >&6 else + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#ifdef __ACK__ -Amsterdam -#endif - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "Amsterdam" >/dev/null 2>&1; then : - gl_cv_c_amsterdam_compiler=yes -else - gl_cv_c_amsterdam_compiler=no fi -rm -f conftest* - +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; +esac +build=$ac_cv_build +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_c_amsterdam_compiler" >&5 -$as_echo "$gl_cv_c_amsterdam_compiler" >&6; } - if test $gl_cv_c_amsterdam_compiler = yes; then - if test -z "$AR"; then - AR='cc -c.a' - fi - if test -z "$ARFLAGS"; then - ARFLAGS='-o' - fi - else - if test -n "$ac_tool_prefix"; then - for ac_prog in ar lib "link -lib" - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AR+:} false; then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if ${ac_cv_host+:} false; then : $as_echo_n "(cached) " >&6 else - if test -n "$AR"; then - ac_cv_prog_AR="$AR" # Let the user override the test. + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_AR="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi -AR=$ac_cv_prog_AR -if test -n "$AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 -$as_echo "$AR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; +esac +host=$ac_cv_host +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac - test -n "$AR" && break - done -fi -if test -z "$AR"; then - ac_ct_AR=$AR - for ac_prog in ar lib "link -lib" -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_AR+:} false; then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5 +$as_echo_n "checking target system type... " >&6; } +if ${ac_cv_target+:} false; then : $as_echo_n "(cached) " >&6 else - if test -n "$ac_ct_AR"; then - ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_AR="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_AR=$ac_cv_prog_ac_ct_AR -if test -n "$ac_ct_AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 -$as_echo "$ac_ct_AR" >&6; } + if test "x$target_alias" = x; then + ac_cv_target=$ac_cv_host else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5 fi - - test -n "$ac_ct_AR" && break -done - - if test "x$ac_ct_AR" = x; then - AR="false" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - AR=$ac_ct_AR - fi fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5 +$as_echo "$ac_cv_target" >&6; } +case $ac_cv_target in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical target" "$LINENO" 5;; +esac +target=$ac_cv_target +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_target +shift +target_cpu=$1 +target_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +target_os=$* +IFS=$ac_save_IFS +case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac -: ${AR=ar} -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the archiver ($AR) interface" >&5 -$as_echo_n "checking the archiver ($AR) interface... " >&6; } -if ${am_cv_ar_interface+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu +# The aliases save the names the user supplied, while $host etc. +# will get canonicalized. +test -n "$target_alias" && + test "$program_prefix$program_suffix$program_transform_name" = \ + NONENONEs,x,x, && + program_prefix=${target_alias}- - am_cv_ar_interface=ar - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int some_variable = 0; -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - am_ar_try='$AR cru libconftest.a conftest.$ac_objext >&5' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5 - (eval $am_ar_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - if test "$ac_status" -eq 0; then - am_cv_ar_interface=ar - else - am_ar_try='$AR -NOLOGO -OUT:conftest.lib conftest.$ac_objext >&5' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5 - (eval $am_ar_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - if test "$ac_status" -eq 0; then - am_cv_ar_interface=lib - else - am_cv_ar_interface=unknown - fi - fi - rm -f conftest.lib libconftest.a +# The tests for host and target for $enable_largefile require +# canonical names. -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_ar_interface" >&5 -$as_echo "$am_cv_ar_interface" >&6; } -case $am_cv_ar_interface in -ar) - ;; -lib) - # Microsoft lib, so override with the ar-lib wrapper script. - # FIXME: It is wrong to rewrite AR. - # But if we don't then we get into trouble of one sort or another. - # A longer-term fix would be to have automake use am__AR in this case, - # and then we could set am__AR="$am_aux_dir/ar-lib \$(AR)" or something - # similar. - AR="$am_aux_dir/ar-lib $AR" - ;; -unknown) - as_fn_error $? "could not determine $AR interface" "$LINENO" 5 - ;; -esac +# As the $enable_largefile decision depends on --enable-plugins we must set it +# even in directories otherwise not depending on the $plugins option. - fi - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. -set dummy ${ac_tool_prefix}ar; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AR+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$AR"; then - ac_cv_prog_AR="$AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_AR="${ac_tool_prefix}ar" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi + maybe_plugins=no + for ac_header in dlfcn.h +do : + ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default +" +if test "x$ac_cv_header_dlfcn_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_DLFCN_H 1 +_ACEOF + maybe_plugins=yes +fi + done - done -IFS=$as_save_IFS + for ac_header in windows.h +do : + ac_fn_c_check_header_compile "$LINENO" "windows.h" "ac_cv_header_windows_h" "$ac_includes_default +" +if test "x$ac_cv_header_windows_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_WINDOWS_H 1 +_ACEOF + maybe_plugins=yes fi -fi -AR=$ac_cv_prog_AR -if test -n "$AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 -$as_echo "$AR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi +done + + + # Check whether --enable-plugins was given. +if test "${enable_plugins+set}" = set; then : + enableval=$enable_plugins; case "${enableval}" in + no) plugins=no ;; + *) plugins=yes + if test "$maybe_plugins" != "yes" ; then + as_fn_error $? "Building with plugin support requires a host that supports dlopen." "$LINENO" 5 + fi ;; + esac +else + plugins=$maybe_plugins fi -if test -z "$ac_cv_prog_AR"; then - ac_ct_AR=$AR - # Extract the first word of "ar", so it can be a program name with args. -set dummy ar; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_AR+:} false; then : + + if test "$plugins" = "yes"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing dlsym" >&5 +$as_echo_n "checking for library containing dlsym... " >&6; } +if ${ac_cv_search_dlsym+:} false; then : $as_echo_n "(cached) " >&6 else - if test -n "$ac_ct_AR"; then - ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_AR="ar" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlsym (); +int +main () +{ +return dlsym (); + ; + return 0; +} +_ACEOF +for ac_lib in '' dl; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_dlsym=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_dlsym+:} false; then : + break +fi done - done -IFS=$as_save_IFS +if ${ac_cv_search_dlsym+:} false; then : +else + ac_cv_search_dlsym=no fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS fi -ac_ct_AR=$ac_cv_prog_ac_ct_AR -if test -n "$ac_ct_AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 -$as_echo "$ac_ct_AR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_dlsym" >&5 +$as_echo "$ac_cv_search_dlsym" >&6; } +ac_res=$ac_cv_search_dlsym +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + fi - if test "x$ac_ct_AR" = x; then - AR="ar" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - AR=$ac_ct_AR fi + + +case "${host}" in + sparc-*-solaris*|i?86-*-solaris*) + # On native 32-bit Solaris/SPARC and x86, large-file and procfs support + # were mutually exclusive until Solaris 11.3. Without procfs support, + # the bfd/ elf module cannot provide certain routines such as + # elfcore_write_prpsinfo or elfcore_write_prstatus. So unless the user + # explicitly requested large-file support through the + # --enable-largefile switch, disable large-file support in favor of + # procfs support. + # + # Check if <sys/procfs.h> is incompatible with large-file support. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#define _FILE_OFFSET_BITS 64 +#define _STRUCTURED_PROC 1 +#include <sys/procfs.h> +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + acx_cv_procfs_lfs=yes else - AR="$ac_cv_prog_AR" + acx_cv_procfs_lfs=no fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + # + # Forcefully disable large-file support only if necessary, gdb is in + # tree and enabled. + if test "${target}" = "${host}" -a "$acx_cv_procfs_lfs" = no \ + -a -d $srcdir/../gdb -a "$enable_gdb" != no; then + : ${enable_largefile="no"} + if test "$plugins" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: +plugin support disabled; require large-file support which is incompatible with GDB." >&5 +$as_echo "$as_me: WARNING: +plugin support disabled; require large-file support which is incompatible with GDB." >&2;} + plugins=no + fi + fi + # + # Explicitly undef _FILE_OFFSET_BITS if enable_largefile=no for the + # benefit of g++ 9+ which predefines it on Solaris. + if test "$enable_largefile" = no; then + LARGEFILE_CPPFLAGS="-U_FILE_OFFSET_BITS" - if test -z "$ARFLAGS"; then - ARFLAGS='cr' - fi + fi + ;; +esac +# Check whether --enable-largefile was given. +if test "${enable_largefile+set}" = set; then : + enableval=$enable_largefile; +fi - - if test -z "$RANLIB"; then - if test $gl_cv_c_amsterdam_compiler = yes; then - RANLIB=':' - else - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. -set dummy ${ac_tool_prefix}ranlib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_RANLIB+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$RANLIB"; then - ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -RANLIB=$ac_cv_prog_RANLIB -if test -n "$RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 -$as_echo "$RANLIB" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_RANLIB"; then - ac_ct_RANLIB=$RANLIB - # Extract the first word of "ranlib", so it can be a program name with args. -set dummy ranlib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_RANLIB"; then - ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_RANLIB="ranlib" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB -if test -n "$ac_ct_RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 -$as_echo "$ac_ct_RANLIB" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_RANLIB" = x; then - RANLIB=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - RANLIB=$ac_ct_RANLIB - fi -else - RANLIB="$ac_cv_prog_RANLIB" -fi - - fi - fi - - - -# Make sure we can run config.sub. -$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || - as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 -$as_echo_n "checking build system type... " >&6; } -if ${ac_cv_build+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_build_alias=$build_alias -test "x$ac_build_alias" = x && - ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` -test "x$ac_build_alias" = x && - as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 -ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 -$as_echo "$ac_cv_build" >&6; } -case $ac_cv_build in -*-*-*) ;; -*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; -esac -build=$ac_cv_build -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_build -shift -build_cpu=$1 -build_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -build_os=$* -IFS=$ac_save_IFS -case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 -$as_echo_n "checking host system type... " >&6; } -if ${ac_cv_host+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "x$host_alias" = x; then - ac_cv_host=$ac_cv_build -else - ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 -$as_echo "$ac_cv_host" >&6; } -case $ac_cv_host in -*-*-*) ;; -*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; -esac -host=$ac_cv_host -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_host -shift -host_cpu=$1 -host_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -host_os=$* -IFS=$ac_save_IFS -case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac - - - - - - # IEEE behaviour is the default on all CPUs except Alpha and SH - # (according to the test results of Bruno Haible's ieeefp/fenv_default.m4 - # and the GCC 4.1.2 manual). - case "$host_cpu" in - alpha*) - # On Alpha systems, a compiler option provides the behaviour. - # See the ieee(3) manual page, also available at - # <http://h30097.www3.hp.com/docs/base_doc/DOCUMENTATION/V51B_HTML/MAN/MAN3/0600____.HTM> - if test -n "$GCC"; then - # GCC has the option -mieee. - # For full IEEE compliance (rarely needed), use option -mieee-with-inexact. - CPPFLAGS="$CPPFLAGS -mieee" - else - # Compaq (ex-DEC) C has the option -ieee, equivalent to -ieee_with_no_inexact. - # For full IEEE compliance (rarely needed), use option -ieee_with_inexact. - CPPFLAGS="$CPPFLAGS -ieee" - fi - ;; - sh*) - if test -n "$GCC"; then - # GCC has the option -mieee. - CPPFLAGS="$CPPFLAGS -mieee" - fi - ;; - esac - -# Check whether --enable-largefile was given. -if test "${enable_largefile+set}" = set; then : - enableval=$enable_largefile; -fi - -if test "$enable_largefile" != no; then +if test "$enable_largefile" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5 $as_echo_n "checking for special C compiler options needed for large files... " >&6; } @@ -5785,10 +6198,6 @@ esac rm -rf conftest* fi - - -$as_echo "#define _DARWIN_USE_64_BIT_INODE 1" >>confdefs.h - fi @@ -5796,221 +6205,59 @@ - # Check whether --enable-threads was given. -if test "${enable_threads+set}" = set; then : - enableval=$enable_threads; gl_use_threads=$enableval -else - if test -n "$gl_use_threads_default"; then - gl_use_threads="$gl_use_threads_default" - else - case "$host_os" in - osf*) gl_use_threads=no ;; - cygwin*) - case `uname -r` in - 1.[0-5].*) gl_use_threads=no ;; - *) gl_use_threads=yes ;; - esac - ;; - *) gl_use_threads=yes ;; - esac - fi - -fi - - if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then - # For using <pthread.h>: - case "$host_os" in - osf*) - # On OSF/1, the compiler needs the flag -D_REENTRANT so that it - # groks <pthread.h>. cc also understands the flag -pthread, but - # we don't use it because 1. gcc-2.95 doesn't understand -pthread, - # 2. putting a flag into CPPFLAGS that has an effect on the linker - # causes the AC_LINK_IFELSE test below to succeed unexpectedly, - # leading to wrong values of LIBTHREAD and LTLIBTHREAD. - CPPFLAGS="$CPPFLAGS -D_REENTRANT" - ;; - esac - # Some systems optimize for single-threaded programs by default, and - # need special flags to disable these optimizations. For example, the - # definition of 'errno' in <errno.h>. - case "$host_os" in - aix* | freebsd*) CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE" ;; - solaris*) CPPFLAGS="$CPPFLAGS -D_REENTRANT" ;; - esac - fi - # Pre-early section. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Minix Amsterdam compiler" >&5 +$as_echo_n "checking for Minix Amsterdam compiler... " >&6; } +if ${gl_cv_c_amsterdam_compiler+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - # Code from module absolute-header: - # Code from module alloca: - # Code from module alloca-opt: - # Code from module arpa_inet: - # Code from module assure: - # Code from module at-internal: - # Code from module canonicalize-lgpl: - # Code from module chdir: - # Code from module chdir-long: - # Code from module cloexec: - # Code from module close: - # Code from module closedir: - # Code from module configmake: - # Code from module d-ino: - # Code from module d-type: - # Code from module dirent: - # Code from module dirfd: - # Code from module dirname-lgpl: - # Code from module dosname: - # Code from module double-slash-root: - # Code from module dup: - # Code from module dup2: - # Code from module environ: - # Code from module errno: - # Code from module error: - # Code from module exitfail: - # Code from module extensions: - # Code from module extern-inline: - # Code from module fchdir: - # Code from module fcntl: - # Code from module fcntl-h: - # Code from module fd-hook: - # Code from module fdopendir: - # Code from module filename: - # Code from module filenamecat-lgpl: - # Code from module flexmember: - # Code from module float: - # Code from module fnmatch: - # Code from module fnmatch-gnu: - # Code from module fpieee: - - # Code from module fpucw: - # Code from module frexp: - # Code from module frexpl: - # Code from module fstat: - # Code from module fstatat: - # Code from module getcwd: - # Code from module getcwd-lgpl: - # Code from module getdtablesize: - # Code from module getlogin_r: - # Code from module getprogname: - # Code from module gettext-h: - # Code from module gettimeofday: - # Code from module glob: - # Code from module hard-locale: - # Code from module havelib: - # Code from module include_next: - # Code from module inet_ntop: - # Code from module intprops: - # Code from module inttypes: - # Code from module inttypes-incomplete: - # Code from module isnand-nolibm: - # Code from module isnanl-nolibm: - # Code from module largefile: +#ifdef __ACK__ +Amsterdam +#endif - # Code from module limits-h: - # Code from module localcharset: - # Code from module lock: - # Code from module lstat: - # Code from module malloc-posix: - # Code from module malloca: - # Code from module math: - # Code from module mbrtowc: - # Code from module mbsinit: - # Code from module mbsrtowcs: - # Code from module memchr: - # Code from module memmem: - # Code from module memmem-simple: - # Code from module mempcpy: - # Code from module memrchr: - # Code from module mkdir: - # Code from module mkdtemp: - # Code from module mkostemp: - # Code from module msvc-inval: - # Code from module msvc-nothrow: - # Code from module multiarch: - # Code from module netinet_in: - # Code from module nocrash: - # Code from module open: - # Code from module openat: - # Code from module openat-die: - # Code from module openat-h: - # Code from module opendir: - # Code from module pathmax: - # Code from module rawmemchr: - # Code from module readdir: - # Code from module readlink: - # Code from module realloc-posix: - # Code from module rename: - # Code from module rewinddir: - # Code from module rmdir: - # Code from module same-inode: - # Code from module save-cwd: - # Code from module secure_getenv: - # Code from module setenv: - # Code from module signal-h: - # Code from module snippet/_Noreturn: - # Code from module snippet/arg-nonnull: - # Code from module snippet/c++defs: - # Code from module snippet/warn-on-use: - # Code from module socklen: - # Code from module ssize_t: - # Code from module stat: - # Code from module stdalign: - # Code from module stdbool: - # Code from module stddef: - # Code from module stdint: - # Code from module stdio: - # Code from module stdlib: - # Code from module strchrnul: - # Code from module strdup-posix: - # Code from module streq: - # Code from module strerror: - # Code from module strerror-override: - # Code from module strerror_r-posix: - # Code from module string: - # Code from module strnlen1: - # Code from module strstr: - # Code from module strstr-simple: - # Code from module strtok_r: - # Code from module sys_socket: - # Code from module sys_stat: - # Code from module sys_time: - # Code from module sys_types: - # Code from module sys_uio: - # Code from module tempname: - # Code from module threadlib: +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "Amsterdam" >/dev/null 2>&1; then : + gl_cv_c_amsterdam_compiler=yes +else + gl_cv_c_amsterdam_compiler=no +fi +rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_c_amsterdam_compiler" >&5 +$as_echo "$gl_cv_c_amsterdam_compiler" >&6; } - # Code from module time: - # Code from module time_r: - # Code from module unistd: - # Code from module unistd-safer: - # Code from module unsetenv: - # Code from module update-copyright: - # Code from module verify: - # Code from module wchar: - # Code from module wctype-h: + if test $gl_cv_c_amsterdam_compiler = yes; then + if test -z "$AR"; then + AR='cc -c.a' + fi + if test -z "$ARFLAGS"; then + ARFLAGS='-o' + fi + else + : + fi -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. -set dummy ${ac_tool_prefix}gcc; ac_word=$2 + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : +if ${ac_cv_prog_AR+:} false; then : $as_echo_n "(cached) " >&6 else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH @@ -6019,7 +6266,7 @@ test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="${ac_tool_prefix}gcc" + ac_cv_prog_AR="${ac_tool_prefix}ar" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -6029,10 +6276,10 @@ fi fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } @@ -6040,17 +6287,17 @@ fi -if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "gcc", so it can be a program name with args. -set dummy gcc; ac_word=$2 +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : +if ${ac_cv_prog_ac_ct_AR+:} false; then : $as_echo_n "(cached) " >&6 else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH @@ -6059,7 +6306,7 @@ test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CC="gcc" + ac_cv_prog_ac_ct_AR="ar" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -6069,17 +6316,17 @@ fi fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi - if test "x$ac_ct_CC" = x; then - CC="" + if test "x$ac_ct_AR" = x; then + AR="ar" else case $cross_compiling:$ac_tool_warned in yes:) @@ -6087,23 +6334,32 @@ $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac - CC=$ac_ct_CC + AR=$ac_ct_AR fi else - CC="$ac_cv_prog_CC" + AR="$ac_cv_prog_AR" fi -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. -set dummy ${ac_tool_prefix}cc; ac_word=$2 + if test -z "$ARFLAGS"; then + ARFLAGS='cr' + fi + + + + if test -z "$RANLIB"; then + if test $gl_cv_c_amsterdam_compiler = yes; then + RANLIB=':' + else + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : +if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH @@ -6112,7 +6368,7 @@ test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="${ac_tool_prefix}cc" + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -6122,131 +6378,28 @@ fi fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi - fi -fi -if test -z "$CC"; then - # Extract the first word of "cc", so it can be a program name with args. -set dummy cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - ac_prog_rejected=no -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_CC="cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -if test $ac_prog_rejected = yes; then - # We found a bogon in the path, so make sure we never use it. - set dummy $ac_cv_prog_CC - shift - if test $# != 0; then - # We chose a different compiler from the bogus one. - # However, it has the same basename, so the bogon will be chosen - # first if we set CC to just the basename; use the full file name. - shift - ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" - fi -fi -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - for ac_prog in cl.exe - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } fi - - - test -n "$CC" && break - done -fi -if test -z "$CC"; then - ac_ct_CC=$CC - for ac_prog in cl.exe -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : +if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. + if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH @@ -6255,7 +6408,7 @@ test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CC="$ac_prog" + ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -6265,21 +6418,17 @@ fi fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi - - test -n "$ac_ct_CC" && break -done - - if test "x$ac_ct_CC" = x; then - CC="" + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) @@ -6287,909 +6436,544 @@ $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac - CC=$ac_ct_CC + RANLIB=$ac_ct_RANLIB fi +else + RANLIB="$ac_cv_prog_RANLIB" fi -fi + fi + fi -test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "no acceptable C compiler found in \$PATH -See \`config.log' for more details" "$LINENO" 5; } -# Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -for ac_option in --version -v -V -qversion; do - { { ac_try="$ac_compiler $ac_option >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 -$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } -if ${ac_cv_c_compiler_gnu+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_compiler_gnu=yes -else - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_c_compiler_gnu=$ac_compiler_gnu + # IEEE behaviour is the default on all CPUs except Alpha and SH + # (according to the test results of Bruno Haible's ieeefp/fenv_default.m4 + # and the GCC 4.1.2 manual). + case "$host_cpu" in + alpha*) + # On Alpha systems, a compiler option provides the behaviour. + # See the ieee(3) manual page, also available at + # <https://backdrift.org/man/tru64/man3/ieee.3.html> + if test -n "$GCC"; then + # GCC has the option -mieee. + # For full IEEE compliance (rarely needed), use option -mieee-with-inexact. + CPPFLAGS="$CPPFLAGS -mieee" + else + # Compaq (ex-DEC) C has the option -ieee, equivalent to -ieee_with_no_inexact. + # For full IEEE compliance (rarely needed), use option -ieee_with_inexact. + CPPFLAGS="$CPPFLAGS -ieee" + fi + ;; + sh*) + if test -n "$GCC"; then + # GCC has the option -mieee. + CPPFLAGS="$CPPFLAGS -mieee" + fi + ;; + esac -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 -$as_echo "$ac_cv_c_compiler_gnu" >&6; } -if test $ac_compiler_gnu = yes; then - GCC=yes -else - GCC= -fi -ac_test_CFLAGS=${CFLAGS+set} -ac_save_CFLAGS=$CFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 -$as_echo_n "checking whether $CC accepts -g... " >&6; } -if ${ac_cv_prog_cc_g+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_save_c_werror_flag=$ac_c_werror_flag - ac_c_werror_flag=yes - ac_cv_prog_cc_g=no - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int -main () -{ - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -else - CFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int -main () -{ - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - -else - ac_c_werror_flag=$ac_save_c_werror_flag - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int -main () -{ - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_c_werror_flag=$ac_save_c_werror_flag -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 -$as_echo "$ac_cv_prog_cc_g" >&6; } -if test "$ac_test_CFLAGS" = set; then - CFLAGS=$ac_save_CFLAGS -elif test $ac_cv_prog_cc_g = yes; then - if test "$GCC" = yes; then - CFLAGS="-g -O2" - else - CFLAGS="-g" - fi + # Check whether --enable-threads was given. +if test "${enable_threads+set}" = set; then : + enableval=$enable_threads; gl_use_threads=$enableval else - if test "$GCC" = yes; then - CFLAGS="-O2" - else - CFLAGS= - fi + if test -n "$gl_use_threads_default"; then + gl_use_threads="$gl_use_threads_default" + else + case "$host_os" in + osf*) gl_use_threads=no ;; + cygwin*) + case `uname -r` in + 1.[0-5].*) gl_use_threads=no ;; + *) gl_use_threads=yes ;; + esac + ;; + mingw*) + case "$gl_use_winpthreads_default" in + yes) gl_use_threads=posix ;; + no) gl_use_threads=windows ;; + *) gl_use_threads=yes ;; + esac + ;; + *) gl_use_threads=yes ;; + esac + fi + fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 -$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } -if ${ac_cv_prog_cc_c89+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_prog_cc_c89=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <stdarg.h> -#include <stdio.h> -struct stat; -/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ -struct buf { int x; }; -FILE * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (p, i) - char **p; - int i; -{ - return p[i]; -} -static char *f (char * (*g) (char **, int), char **p, ...) -{ - char *s; - va_list v; - va_start (v,p); - s = g (p, va_arg (v,int)); - va_end (v); - return s; -} -/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has - function prototypes and stuff, but not '\xHH' hex character constants. - These don't provoke an error unfortunately, instead are silently treated - as 'x'. The following induces an error, until -std is added to get - proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an - array size at least. It's necessary to write '\x00'==0 to get something - that's true only with -std. */ -int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + if test "$gl_use_threads" = yes \ + || test "$gl_use_threads" = isoc \ + || test "$gl_use_threads" = posix \ + || test "$gl_use_threads" = isoc+posix; then + # For using <threads.h> or <pthread.h>: -/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters - inside strings and character constants. */ -#define FOO(x) 'x' -int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; -int test (int i, double x); -struct s1 {int (*f) (int a);}; -struct s2 {int (*f) (double a);}; -int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); -int argc; -char **argv; -int -main () -{ -return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; - ; - return 0; -} -_ACEOF -for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ - -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_c89=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext - test "x$ac_cv_prog_cc_c89" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC + if test -z "$gl_anythreadlib_early_done"; then + case "$host_os" in + osf*) + # On OSF/1, the compiler needs the flag -D_REENTRANT so that it + # groks <pthread.h>. cc also understands the flag -pthread, but + # we don't use it because 1. gcc-2.95 doesn't understand -pthread, + # 2. putting a flag into CPPFLAGS that has an effect on the linker + # causes the AC_LINK_IFELSE test below to succeed unexpectedly, + # leading to wrong values of LIBTHREAD and LTLIBTHREAD. + CPPFLAGS="$CPPFLAGS -D_REENTRANT" + ;; + esac + # Some systems optimize for single-threaded programs by default, and + # need special flags to disable these optimizations. For example, the + # definition of 'errno' in <errno.h>. + case "$host_os" in + aix* | freebsd*) CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE" ;; + solaris*) CPPFLAGS="$CPPFLAGS -D_REENTRANT" ;; + esac + gl_anythreadlib_early_done=done + fi -fi -# AC_CACHE_VAL -case "x$ac_cv_prog_cc_c89" in - x) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -$as_echo "none needed" >&6; } ;; - xno) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -$as_echo "unsupported" >&6; } ;; - *) - CC="$CC $ac_cv_prog_cc_c89" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 -$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; -esac -if test "x$ac_cv_prog_cc_c89" != xno; then : + fi -fi -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 -$as_echo_n "checking whether $CC understands -c and -o together... " >&6; } -if ${am_cv_prog_cc_c_o+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ + # Pre-early section. -int -main () -{ - ; - return 0; -} -_ACEOF - # Make sure it works both with $CC and with simple cc. - # Following AC_PROG_CC_C_O, we do the test twice because some - # compilers refuse to overwrite an existing .o file with -o, - # though they will create one. - am_cv_prog_cc_c_o=yes - for am_i in 1 2; do - if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 - ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } \ - && test -f conftest2.$ac_objext; then - : OK - else - am_cv_prog_cc_c_o=no - break - fi - done - rm -f core conftest* - unset am_i -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 -$as_echo "$am_cv_prog_cc_c_o" >&6; } -if test "$am_cv_prog_cc_c_o" != yes; then - # Losing compiler, so override with the script. - # FIXME: It is wrong to rewrite CC. - # But if we don't then we get into trouble of one sort or another. - # A longer-term fix would be to have automake use am__CC in this case, - # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" - CC="$am_aux_dir/compile $CC" -fi -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -am_cv_prog_cc_stdc=$ac_cv_prog_cc_stdc + # Code from module absolute-header: + # Code from module alloca: + # Code from module alloca-opt: + # Code from module arpa_inet: + # Code from module assure: + # Code from module at-internal: + # Code from module attribute: + # Code from module btowc: + # Code from module builtin-expect: + # Code from module c99: + # Code from module canonicalize-lgpl: + # Code from module chdir: + # Code from module chdir-long: + # Code from module cloexec: + # Code from module close: + # Code from module closedir: + # Code from module count-one-bits: + # Code from module ctype: + # Code from module d-ino: + # Code from module d-type: + # Code from module dirent: + # Code from module dirfd: + # Code from module dirname-lgpl: + # Code from module double-slash-root: + # Code from module dup: + # Code from module dup2: + # Code from module environ: + # Code from module errno: + # Code from module error: + # Code from module exitfail: + # Code from module extensions: + # Code from module extern-inline: + # Code from module fchdir: + # Code from module fcntl: + # Code from module fcntl-h: + # Code from module fd-hook: + # Code from module fd-safer-flag: + # Code from module fdopendir: + # Code from module filename: + # Code from module filenamecat-lgpl: + # Code from module flexmember: + # Code from module float: + # Code from module fnmatch: + # Code from module fnmatch-gnu: + # Code from module fnmatch-h: + # Code from module fpieee: + # Code from module fpucw: + # Code from module frexp: + # Code from module frexpl: + # Code from module fstat: + # Code from module fstatat: + # Code from module getcwd: + # Code from module getcwd-lgpl: + # Code from module getdtablesize: + # Code from module getlogin_r: + # Code from module getprogname: + # Code from module getrandom: + # Code from module gettext-h: + # Code from module gettimeofday: + # Code from module glob: + # Code from module glob-h: + # Code from module hard-locale: + # Code from module include_next: + # Code from module inet_ntop: + # Code from module intprops: + # Code from module inttypes: + # Code from module inttypes-incomplete: + # Code from module isblank: + # Code from module isnand-nolibm: + # Code from module isnanl-nolibm: + # Code from module largefile: + + # Code from module libc-config: + # Code from module limits-h: + # Code from module localcharset: + # Code from module locale: + # Code from module localtime-buffer: + # Code from module lock: + # Code from module lstat: + # Code from module malloc-posix: + # Code from module malloca: + # Code from module math: + # Code from module mbrtowc: + # Code from module mbsinit: + # Code from module mbsrtowcs: + # Code from module mbtowc: + # Code from module memchr: + # Code from module memmem: + # Code from module memmem-simple: + # Code from module mempcpy: + # Code from module memrchr: + # Code from module minmax: + # Code from module mkdir: + # Code from module mkdtemp: + # Code from module mkostemp: + # Code from module msvc-inval: + # Code from module msvc-nothrow: + # Code from module multiarch: + # Code from module netinet_in: + # Code from module nocrash: + # Code from module open: + # Code from module openat: + # Code from module openat-die: + # Code from module openat-h: + # Code from module opendir: + # Code from module pathmax: + # Code from module rawmemchr: + # Code from module readdir: + # Code from module readlink: + # Code from module realloc-posix: + # Code from module rename: + # Code from module rewinddir: + # Code from module rmdir: + # Code from module same-inode: + # Code from module save-cwd: + # Code from module scratch_buffer: + # Code from module setenv: + # Code from module setlocale-null: + # Code from module signal-h: + # Code from module snippet/_Noreturn: + # Code from module snippet/arg-nonnull: + # Code from module snippet/c++defs: + # Code from module snippet/warn-on-use: + # Code from module socklen: + # Code from module ssize_t: + # Code from module stat: + # Code from module stat-time: + # Code from module std-gnu11: + # Code from module stdalign: + # Code from module stdbool: + # Code from module stddef: + # Code from module stdint: + # Code from module stdio: + # Code from module stdlib: + # Code from module strchrnul: + # Code from module strdup-posix: + # Code from module streq: + # Code from module strerror: + # Code from module strerror-override: + # Code from module strerror_r-posix: + # Code from module string: + # Code from module strnlen: + # Code from module strnlen1: + # Code from module strstr: + # Code from module strstr-simple: + # Code from module strtok_r: + # Code from module sys_random: + # Code from module sys_socket: + # Code from module sys_stat: + # Code from module sys_time: + # Code from module sys_types: + # Code from module sys_uio: + # Code from module tempname: + # Code from module threadlib: -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5 -$as_echo_n "checking target system type... " >&6; } -if ${ac_cv_target+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "x$target_alias" = x; then - ac_cv_target=$ac_cv_host -else - ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5 -fi + + # Code from module time: + # Code from module time_r: + # Code from module unistd: + # Code from module unistd-safer: + # Code from module unsetenv: + # Code from module update-copyright: + # Code from module verify: + # Code from module wchar: + # Code from module wctype-h: + # Code from module windows-mutex: + # Code from module windows-once: + # Code from module windows-recmutex: + # Code from module windows-rwlock: + # Code from module wmemchr: + # Code from module wmempcpy: + # Code from module xalloc-oversized: + + +am_cv_prog_cc_stdc=$ac_cv_prog_cc_stdc + + +ac_aux_dir= +for ac_dir in .. "$srcdir"/..; do + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + as_fn_error $? "cannot find install-sh, install.sh, or shtool in .. \"$srcdir\"/.." "$LINENO" 5 fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5 -$as_echo "$ac_cv_target" >&6; } -case $ac_cv_target in -*-*-*) ;; -*) as_fn_error $? "invalid value of canonical target" "$LINENO" 5;; -esac -target=$ac_cv_target -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_target -shift -target_cpu=$1 -target_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -target_os=$* -IFS=$ac_save_IFS -case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. -# The aliases save the names the user supplied, while $host etc. -# will get canonicalized. -test -n "$target_alias" && - test "$program_prefix$program_suffix$program_transform_name" = \ - NONENONEs,x,x, && - program_prefix=${target_alias}- -# The tests for host and target for $enable_largefile require -# canonical names. -# As the $enable_largefile decision depends on --enable-plugins we must set it -# even in directories otherwise not depending on the $plugins option. - maybe_plugins=no - for ac_header in dlfcn.h -do : - ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default -" -if test "x$ac_cv_header_dlfcn_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_DLFCN_H 1 -_ACEOF - maybe_plugins=yes -fi -done - for ac_header in windows.h -do : - ac_fn_c_check_header_compile "$LINENO" "windows.h" "ac_cv_header_windows_h" "$ac_includes_default -" -if test "x$ac_cv_header_windows_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_WINDOWS_H 1 -_ACEOF - maybe_plugins=yes + + + # Check whether --enable-cross-guesses was given. +if test "${enable_cross_guesses+set}" = set; then : + enableval=$enable_cross_guesses; if test "x$enableval" != xconservative && test "x$enableval" != xrisky; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: invalid argument supplied to --enable-cross-guesses" >&5 +$as_echo "$as_me: WARNING: invalid argument supplied to --enable-cross-guesses" >&2;} + enableval=conservative + fi + gl_cross_guesses="$enableval" +else + gl_cross_guesses=conservative fi -done + if test $gl_cross_guesses = risky; then + gl_cross_guess_normal="guessing yes" + gl_cross_guess_inverted="guessing no" + else + gl_cross_guess_normal="guessing no" + gl_cross_guess_inverted="guessing yes" + fi + LIBC_FATAL_STDERR_=1 + export LIBC_FATAL_STDERR_ - # Check whether --enable-plugins was given. -if test "${enable_plugins+set}" = set; then : - enableval=$enable_plugins; case "${enableval}" in - no) plugins=no ;; - *) plugins=yes - if test "$maybe_plugins" != "yes" ; then - as_fn_error $? "Building with plugin support requires a host that supports dlopen." "$LINENO" 5 - fi ;; - esac +ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" +if test "x$ac_cv_type_size_t" = xyes; then : + else - plugins=$maybe_plugins + +cat >>confdefs.h <<_ACEOF +#define size_t unsigned int +_ACEOF fi - if test "$plugins" = "yes"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing dlsym" >&5 -$as_echo_n "checking for library containing dlsym... " >&6; } -if ${ac_cv_search_dlsym+:} false; then : +# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works +# for constant arguments. Useless! +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working alloca.h" >&5 +$as_echo_n "checking for working alloca.h... " >&6; } +if ${ac_cv_working_alloca_h+:} false; then : $as_echo_n "(cached) " >&6 else - ac_func_search_save_LIBS=$LIBS -cat confdefs.h - <<_ACEOF >conftest.$ac_ext + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlsym (); +#include <alloca.h> int main () { -return dlsym (); +char *p = (char *) alloca (2 * sizeof (int)); + if (p) return 0; ; return 0; } _ACEOF -for ac_lib in '' dl; do - if test -z "$ac_lib"; then - ac_res="none required" - else - ac_res=-l$ac_lib - LIBS="-l$ac_lib $ac_func_search_save_LIBS" - fi - if ac_fn_c_try_link "$LINENO"; then : - ac_cv_search_dlsym=$ac_res +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_working_alloca_h=yes +else + ac_cv_working_alloca_h=no fi rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext - if ${ac_cv_search_dlsym+:} false; then : - break + conftest$ac_exeext conftest.$ac_ext fi -done -if ${ac_cv_search_dlsym+:} false; then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_working_alloca_h" >&5 +$as_echo "$ac_cv_working_alloca_h" >&6; } +if test $ac_cv_working_alloca_h = yes; then -else - ac_cv_search_dlsym=no -fi -rm conftest.$ac_ext -LIBS=$ac_func_search_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_dlsym" >&5 -$as_echo "$ac_cv_search_dlsym" >&6; } -ac_res=$ac_cv_search_dlsym -if test "$ac_res" != no; then : - test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" +$as_echo "#define HAVE_ALLOCA_H 1" >>confdefs.h fi - fi - - -case "${host}" in - sparc-*-solaris*|i[3-7]86-*-solaris*) - # On native 32bit sparc and ia32 solaris, large-file and procfs support - # are mutually exclusive; and without procfs support, the bfd/ elf module - # cannot provide certain routines such as elfcore_write_prpsinfo - # or elfcore_write_prstatus. So unless the user explicitly requested - # large-file support through the --enable-largefile switch, disable - # large-file support in favor of procfs support. - test "${target}" = "${host}" -a "x$plugins" = xno \ - && : ${enable_largefile="no"} - ;; -esac - -# Check whether --enable-largefile was given. -if test "${enable_largefile+set}" = set; then : - enableval=$enable_largefile; -fi - -if test "$enable_largefile" != no; then - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5 -$as_echo_n "checking for special C compiler options needed for large files... " >&6; } -if ${ac_cv_sys_largefile_CC+:} false; then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca" >&5 +$as_echo_n "checking for alloca... " >&6; } +if ${ac_cv_func_alloca_works+:} false; then : $as_echo_n "(cached) " >&6 else - ac_cv_sys_largefile_CC=no - if test "$GCC" != yes; then - ac_save_CC=$CC - while :; do - # IRIX 6.2 and later do not support large files by default, - # so use the C compiler's -n32 option if that helps. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include <sys/types.h> - /* Check that off_t can represent 2**63 - 1 correctly. - We can't simply define LARGE_OFF_T to be 9223372036854775807, - since some C++ compilers masquerading as C compilers - incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) - int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 - && LARGE_OFF_T % 2147483647 == 1) - ? 1 : -1]; +#ifdef __GNUC__ +# define alloca __builtin_alloca +#else +# ifdef _MSC_VER +# include <malloc.h> +# define alloca _alloca +# else +# ifdef HAVE_ALLOCA_H +# include <alloca.h> +# else +# ifdef _AIX + #pragma alloca +# else +# ifndef alloca /* predefined by HP cc +Olibcalls */ +void *alloca (size_t); +# endif +# endif +# endif +# endif +#endif + int main () { - +char *p = (char *) alloca (1); + if (p) return 0; ; return 0; } _ACEOF - if ac_fn_c_try_compile "$LINENO"; then : - break -fi -rm -f core conftest.err conftest.$ac_objext - CC="$CC -n32" - if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_sys_largefile_CC=' -n32'; break +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_func_alloca_works=yes +else + ac_cv_func_alloca_works=no fi -rm -f core conftest.err conftest.$ac_objext - break - done - CC=$ac_save_CC - rm -f conftest.$ac_ext - fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5 -$as_echo "$ac_cv_sys_largefile_CC" >&6; } - if test "$ac_cv_sys_largefile_CC" != no; then - CC=$CC$ac_cv_sys_largefile_CC - fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_alloca_works" >&5 +$as_echo "$ac_cv_func_alloca_works" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5 -$as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; } -if ${ac_cv_sys_file_offset_bits+:} false; then : +if test $ac_cv_func_alloca_works = yes; then + +$as_echo "#define HAVE_ALLOCA 1" >>confdefs.h + +else + # The SVR3 libPW and SVR4 libucb both contain incompatible functions +# that cause trouble. Some versions do not even contain alloca or +# contain a buggy version. If you still want to use their alloca, +# use ar to extract alloca.o from them instead of compiling alloca.c. + + + + + +ALLOCA=\${LIBOBJDIR}alloca.$ac_objext + +$as_echo "#define C_ALLOCA 1" >>confdefs.h + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether \`alloca.c' needs Cray hooks" >&5 +$as_echo_n "checking whether \`alloca.c' needs Cray hooks... " >&6; } +if ${ac_cv_os_cray+:} false; then : $as_echo_n "(cached) " >&6 else - while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include <sys/types.h> - /* Check that off_t can represent 2**63 - 1 correctly. - We can't simply define LARGE_OFF_T to be 9223372036854775807, - since some C++ compilers masquerading as C compilers - incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) - int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 - && LARGE_OFF_T % 2147483647 == 1) - ? 1 : -1]; -int -main () -{ +#if defined CRAY && ! defined CRAY2 +webecray +#else +wenotbecray +#endif - ; - return 0; -} _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_sys_file_offset_bits=no; break +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "webecray" >/dev/null 2>&1; then : + ac_cv_os_cray=yes +else + ac_cv_os_cray=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#define _FILE_OFFSET_BITS 64 -#include <sys/types.h> - /* Check that off_t can represent 2**63 - 1 correctly. - We can't simply define LARGE_OFF_T to be 9223372036854775807, - since some C++ compilers masquerading as C compilers - incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) - int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 - && LARGE_OFF_T % 2147483647 == 1) - ? 1 : -1]; -int -main () -{ +rm -f conftest* - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_sys_file_offset_bits=64; break fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_cv_sys_file_offset_bits=unknown - break -done -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5 -$as_echo "$ac_cv_sys_file_offset_bits" >&6; } -case $ac_cv_sys_file_offset_bits in #( - no | unknown) ;; - *) +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_os_cray" >&5 +$as_echo "$ac_cv_os_cray" >&6; } +if test $ac_cv_os_cray = yes; then + for ac_func in _getb67 GETB67 getb67; do + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF -#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits +#define CRAY_STACKSEG_END $ac_func _ACEOF -;; -esac -rm -rf conftest* - if test $ac_cv_sys_file_offset_bits = unknown; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5 -$as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; } -if ${ac_cv_sys_large_files+:} false; then : + + break +fi + + done +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking stack direction for C alloca" >&5 +$as_echo_n "checking stack direction for C alloca... " >&6; } +if ${ac_cv_c_stack_direction+:} false; then : $as_echo_n "(cached) " >&6 else - while :; do + if test "$cross_compiling" = yes; then : + ac_cv_c_stack_direction=0 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include <sys/types.h> - /* Check that off_t can represent 2**63 - 1 correctly. - We can't simply define LARGE_OFF_T to be 9223372036854775807, - since some C++ compilers masquerading as C compilers - incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) - int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 - && LARGE_OFF_T % 2147483647 == 1) - ? 1 : -1]; +$ac_includes_default int -main () +find_stack_direction (int *addr, int depth) { - - ; - return 0; + int dir, dummy = 0; + if (! addr) + addr = &dummy; + *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1; + dir = depth ? find_stack_direction (addr, depth - 1) : 0; + return dir + dummy; } -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_sys_large_files=no; break -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#define _LARGE_FILES 1 -#include <sys/types.h> - /* Check that off_t can represent 2**63 - 1 correctly. - We can't simply define LARGE_OFF_T to be 9223372036854775807, - since some C++ compilers masquerading as C compilers - incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) - int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 - && LARGE_OFF_T % 2147483647 == 1) - ? 1 : -1]; + int -main () +main (int argc, char **argv) { - - ; - return 0; + return find_stack_direction (0, argc + !argv + 20) < 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_sys_large_files=1; break -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_cv_sys_large_files=unknown - break -done -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5 -$as_echo "$ac_cv_sys_large_files" >&6; } -case $ac_cv_sys_large_files in #( - no | unknown) ;; - *) -cat >>confdefs.h <<_ACEOF -#define _LARGE_FILES $ac_cv_sys_large_files -_ACEOF -;; -esac -rm -rf conftest* - fi - - -$as_echo "#define _DARWIN_USE_64_BIT_INODE 1" >>confdefs.h - -fi - - - -ac_aux_dir= -for ac_dir in .. "$srcdir"/..; do - if test -f "$ac_dir/install-sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install-sh -c" - break - elif test -f "$ac_dir/install.sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install.sh -c" - break - elif test -f "$ac_dir/shtool"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/shtool install -c" - break - fi -done -if test -z "$ac_aux_dir"; then - as_fn_error $? "cannot find install-sh, install.sh, or shtool in .. \"$srcdir\"/.." "$LINENO" 5 -fi - -# These three variables are undocumented and unsupported, -# and are intended to be withdrawn in a future Autoconf release. -# They can cause serious problems if a builder's source tree is in a directory -# whose full name contains unusual characters. -ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. -ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. -ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. - - - - - - - - - - LIBC_FATAL_STDERR_=1 - export LIBC_FATAL_STDERR_ - -ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" -if test "x$ac_cv_type_size_t" = xyes; then : - -else - -cat >>confdefs.h <<_ACEOF -#define size_t unsigned int -_ACEOF - -fi - -# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works -# for constant arguments. Useless! -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working alloca.h" >&5 -$as_echo_n "checking for working alloca.h... " >&6; } -if ${ac_cv_working_alloca_h+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <alloca.h> -int -main () -{ -char *p = (char *) alloca (2 * sizeof (int)); - if (p) return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_working_alloca_h=yes -else - ac_cv_working_alloca_h=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_working_alloca_h" >&5 -$as_echo "$ac_cv_working_alloca_h" >&6; } -if test $ac_cv_working_alloca_h = yes; then - -$as_echo "#define HAVE_ALLOCA_H 1" >>confdefs.h - -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca" >&5 -$as_echo_n "checking for alloca... " >&6; } -if ${ac_cv_func_alloca_works+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __GNUC__ -# define alloca __builtin_alloca -#else -# ifdef _MSC_VER -# include <malloc.h> -# define alloca _alloca -# else -# ifdef HAVE_ALLOCA_H -# include <alloca.h> -# else -# ifdef _AIX - #pragma alloca -# else -# ifndef alloca /* predefined by HP cc +Olibcalls */ -void *alloca (size_t); -# endif -# endif -# endif -# endif -#endif - -int -main () -{ -char *p = (char *) alloca (1); - if (p) return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_func_alloca_works=yes -else - ac_cv_func_alloca_works=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_alloca_works" >&5 -$as_echo "$ac_cv_func_alloca_works" >&6; } - -if test $ac_cv_func_alloca_works = yes; then - -$as_echo "#define HAVE_ALLOCA 1" >>confdefs.h - -else - # The SVR3 libPW and SVR4 libucb both contain incompatible functions -# that cause trouble. Some versions do not even contain alloca or -# contain a buggy version. If you still want to use their alloca, -# use ar to extract alloca.o from them instead of compiling alloca.c. - - - - - -ALLOCA=\${LIBOBJDIR}alloca.$ac_objext - -$as_echo "#define C_ALLOCA 1" >>confdefs.h - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether \`alloca.c' needs Cray hooks" >&5 -$as_echo_n "checking whether \`alloca.c' needs Cray hooks... " >&6; } -if ${ac_cv_os_cray+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#if defined CRAY && ! defined CRAY2 -webecray -#else -wenotbecray -#endif - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "webecray" >/dev/null 2>&1; then : - ac_cv_os_cray=yes -else - ac_cv_os_cray=no -fi -rm -f conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_os_cray" >&5 -$as_echo "$ac_cv_os_cray" >&6; } -if test $ac_cv_os_cray = yes; then - for ac_func in _getb67 GETB67 getb67; do - as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -if eval test \"x\$"$as_ac_var"\" = x"yes"; then : - -cat >>confdefs.h <<_ACEOF -#define CRAY_STACKSEG_END $ac_func -_ACEOF - - break -fi - - done -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking stack direction for C alloca" >&5 -$as_echo_n "checking stack direction for C alloca... " >&6; } -if ${ac_cv_c_stack_direction+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - ac_cv_c_stack_direction=0 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_includes_default -int -find_stack_direction (int *addr, int depth) -{ - int dir, dummy = 0; - if (! addr) - addr = &dummy; - *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1; - dir = depth ? find_stack_direction (addr, depth - 1) : 0; - return dir + dummy; -} - -int -main (int argc, char **argv) -{ - return find_stack_direction (0, argc + !argv + 20) < 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_c_stack_direction=1 -else - ac_cv_c_stack_direction=-1 +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_c_stack_direction=1 +else + ac_cv_c_stack_direction=-1 fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext @@ -7216,11 +7000,11 @@ - - for ac_header in $gl_header_list + for ac_header in $ac_header_list do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 @@ -7234,8 +7018,6 @@ - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the preprocessor supports include_next" >&5 $as_echo_n "checking whether the preprocessor supports include_next... " >&6; } if ${gl_cv_have_include_next+:} false; then : @@ -7352,15 +7134,6 @@ - - - - : - - - - - if test $ac_cv_header_features_h = yes; then HAVE_FEATURES_H=1 else @@ -7368,6 +7141,24 @@ fi + + + + if test $ac_cv_header_sys_socket_h = no; then + for ac_header in ws2tcpip.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "ws2tcpip.h" "ac_cv_header_ws2tcpip_h" "$ac_includes_default" +if test "x$ac_cv_header_ws2tcpip_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_WS2TCPIP_H 1 +_ACEOF + +fi + +done + + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then @@ -7411,379 +7202,468 @@ $as_echo "$MKDIR_P" >&6; } - GNULIB__EXIT=0; - GNULIB_ATOLL=0; - GNULIB_CALLOC_POSIX=0; - GNULIB_CANONICALIZE_FILE_NAME=0; - GNULIB_GETLOADAVG=0; - GNULIB_GETSUBOPT=0; - GNULIB_GRANTPT=0; - GNULIB_MALLOC_POSIX=0; - GNULIB_MBTOWC=0; - GNULIB_MKDTEMP=0; - GNULIB_MKOSTEMP=0; - GNULIB_MKOSTEMPS=0; - GNULIB_MKSTEMP=0; - GNULIB_MKSTEMPS=0; - GNULIB_POSIX_OPENPT=0; - GNULIB_PTSNAME=0; - GNULIB_PTSNAME_R=0; - GNULIB_PUTENV=0; - GNULIB_QSORT_R=0; - GNULIB_RANDOM=0; - GNULIB_RANDOM_R=0; - GNULIB_REALLOC_POSIX=0; - GNULIB_REALPATH=0; - GNULIB_RPMATCH=0; - GNULIB_SECURE_GETENV=0; - GNULIB_SETENV=0; - GNULIB_STRTOD=0; - GNULIB_STRTOLL=0; - GNULIB_STRTOULL=0; - GNULIB_SYSTEM_POSIX=0; - GNULIB_UNLOCKPT=0; - GNULIB_UNSETENV=0; - GNULIB_WCTOMB=0; - HAVE__EXIT=1; - HAVE_ATOLL=1; - HAVE_CANONICALIZE_FILE_NAME=1; - HAVE_DECL_GETLOADAVG=1; - HAVE_GETSUBOPT=1; - HAVE_GRANTPT=1; - HAVE_MKDTEMP=1; - HAVE_MKOSTEMP=1; - HAVE_MKOSTEMPS=1; - HAVE_MKSTEMP=1; - HAVE_MKSTEMPS=1; - HAVE_POSIX_OPENPT=1; - HAVE_PTSNAME=1; - HAVE_PTSNAME_R=1; - HAVE_QSORT_R=1; - HAVE_RANDOM=1; - HAVE_RANDOM_H=1; - HAVE_RANDOM_R=1; - HAVE_REALPATH=1; - HAVE_RPMATCH=1; - HAVE_SECURE_GETENV=1; - HAVE_SETENV=1; - HAVE_DECL_SETENV=1; - HAVE_STRTOD=1; - HAVE_STRTOLL=1; - HAVE_STRTOULL=1; - HAVE_STRUCT_RANDOM_DATA=1; - HAVE_SYS_LOADAVG_H=0; - HAVE_UNLOCKPT=1; - HAVE_DECL_UNSETENV=1; - REPLACE_CALLOC=0; - REPLACE_CANONICALIZE_FILE_NAME=0; - REPLACE_MALLOC=0; - REPLACE_MBTOWC=0; - REPLACE_MKSTEMP=0; - REPLACE_PTSNAME=0; - REPLACE_PTSNAME_R=0; - REPLACE_PUTENV=0; - REPLACE_QSORT_R=0; - REPLACE_RANDOM_R=0; - REPLACE_REALLOC=0; - REPLACE_REALPATH=0; - REPLACE_SETENV=0; - REPLACE_STRTOD=0; - REPLACE_UNSETENV=0; - REPLACE_WCTOMB=0; - + GNULIB_BTOWC=0; + GNULIB_WCTOB=0; + GNULIB_MBSINIT=0; + GNULIB_MBRTOWC=0; + GNULIB_MBRLEN=0; + GNULIB_MBSRTOWCS=0; + GNULIB_MBSNRTOWCS=0; + GNULIB_WCRTOMB=0; + GNULIB_WCSRTOMBS=0; + GNULIB_WCSNRTOMBS=0; + GNULIB_WCWIDTH=0; + GNULIB_WMEMCHR=0; + GNULIB_WMEMCMP=0; + GNULIB_WMEMCPY=0; + GNULIB_WMEMMOVE=0; + GNULIB_WMEMPCPY=0; + GNULIB_WMEMSET=0; + GNULIB_WCSLEN=0; + GNULIB_WCSNLEN=0; + GNULIB_WCSCPY=0; + GNULIB_WCPCPY=0; + GNULIB_WCSNCPY=0; + GNULIB_WCPNCPY=0; + GNULIB_WCSCAT=0; + GNULIB_WCSNCAT=0; + GNULIB_WCSCMP=0; + GNULIB_WCSNCMP=0; + GNULIB_WCSCASECMP=0; + GNULIB_WCSNCASECMP=0; + GNULIB_WCSCOLL=0; + GNULIB_WCSXFRM=0; + GNULIB_WCSDUP=0; + GNULIB_WCSCHR=0; + GNULIB_WCSRCHR=0; + GNULIB_WCSCSPN=0; + GNULIB_WCSSPN=0; + GNULIB_WCSPBRK=0; + GNULIB_WCSSTR=0; + GNULIB_WCSTOK=0; + GNULIB_WCSWIDTH=0; + GNULIB_WCSFTIME=0; + HAVE_BTOWC=1; + HAVE_MBSINIT=1; + HAVE_MBRTOWC=1; + HAVE_MBRLEN=1; + HAVE_MBSRTOWCS=1; + HAVE_MBSNRTOWCS=1; + HAVE_WCRTOMB=1; + HAVE_WCSRTOMBS=1; + HAVE_WCSNRTOMBS=1; + HAVE_WMEMCHR=1; + HAVE_WMEMCMP=1; + HAVE_WMEMCPY=1; + HAVE_WMEMMOVE=1; + HAVE_WMEMPCPY=1; + HAVE_WMEMSET=1; + HAVE_WCSLEN=1; + HAVE_WCSNLEN=1; + HAVE_WCSCPY=1; + HAVE_WCPCPY=1; + HAVE_WCSNCPY=1; + HAVE_WCPNCPY=1; + HAVE_WCSCAT=1; + HAVE_WCSNCAT=1; + HAVE_WCSCMP=1; + HAVE_WCSNCMP=1; + HAVE_WCSCASECMP=1; + HAVE_WCSNCASECMP=1; + HAVE_WCSCOLL=1; + HAVE_WCSXFRM=1; + HAVE_WCSDUP=1; + HAVE_WCSCHR=1; + HAVE_WCSRCHR=1; + HAVE_WCSCSPN=1; + HAVE_WCSSPN=1; + HAVE_WCSPBRK=1; + HAVE_WCSSTR=1; + HAVE_WCSTOK=1; + HAVE_WCSWIDTH=1; + HAVE_WCSFTIME=1; + HAVE_DECL_WCTOB=1; + HAVE_DECL_WCWIDTH=1; + REPLACE_MBSTATE_T=0; + REPLACE_BTOWC=0; + REPLACE_WCTOB=0; + REPLACE_MBSINIT=0; + REPLACE_MBRTOWC=0; + REPLACE_MBRLEN=0; + REPLACE_MBSRTOWCS=0; + REPLACE_MBSNRTOWCS=0; + REPLACE_WCRTOMB=0; + REPLACE_WCSRTOMBS=0; + REPLACE_WCSNRTOMBS=0; + REPLACE_WCWIDTH=0; + REPLACE_WCSWIDTH=0; + REPLACE_WCSFTIME=0; + REPLACE_WCSTOK=0; + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether <wchar.h> uses 'inline' correctly" >&5 +$as_echo_n "checking whether <wchar.h> uses 'inline' correctly... " >&6; } +if ${gl_cv_header_wchar_h_correct_inline+:} false; then : + $as_echo_n "(cached) " >&6 +else + gl_cv_header_wchar_h_correct_inline=yes + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + #define wcstod renamed_wcstod +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> +extern int zero (void); +int main () { return zero(); } - for ac_func in $gl_func_list -do : - as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -if eval test \"x\$"$as_ac_var"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF + save_ac_compile="$ac_compile" + ac_compile=`echo "$save_ac_compile" | sed s/conftest/conftest1/` + if echo '#include "conftest.c"' >conftest1.c && + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ -fi -done - - - + #define wcstod renamed_wcstod +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> +int zero (void) { return 0; } +_ACEOF + ac_compile=`echo "$save_ac_compile" | sed s/conftest/conftest2/` + if echo '#include "conftest.c"' >conftest2.c && + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + if $CC -o conftest$ac_exeext $CFLAGS $LDFLAGS conftest1.$ac_objext conftest2.$ac_objext $LIBS >&5 2>&1; then + : + else + gl_cv_header_wchar_h_correct_inline=no + fi + fi + fi + ac_compile="$save_ac_compile" + rm -f conftest12.c conftest12.$ac_objext conftest$ac_exeext - - - - - - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether // is distinct from /" >&5 -$as_echo_n "checking whether // is distinct from /... " >&6; } -if ${gl_cv_double_slash_root+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test x"$cross_compiling" = xyes ; then - # When cross-compiling, there is no way to tell whether // is special - # short of a list of hosts. However, the only known hosts to date - # that have a distinct // are Apollo DomainOS (too old to port to), - # Cygwin, and z/OS. If anyone knows of another system for which // has - # special semantics and is distinct from /, please report it to - # <bug-gnulib@gnu.org>. - case $host in - *-cygwin | i370-ibm-openedition) - gl_cv_double_slash_root=yes ;; - *) - # Be optimistic and assume that / and // are the same when we - # don't know. - gl_cv_double_slash_root='unknown, assuming no' ;; - esac - else - set x `ls -di / // 2>/dev/null` - if test "$2" = "$4" && wc //dev/null >/dev/null 2>&1; then - gl_cv_double_slash_root=no - else - gl_cv_double_slash_root=yes - fi - fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_double_slash_root" >&5 -$as_echo "$gl_cv_double_slash_root" >&6; } - if test "$gl_cv_double_slash_root" = yes; then - -$as_echo "#define DOUBLE_SLASH_IS_DISTINCT_ROOT 1" >>confdefs.h - +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_wchar_h_correct_inline" >&5 +$as_echo "$gl_cv_header_wchar_h_correct_inline" >&6; } + if test $gl_cv_header_wchar_h_correct_inline = no; then + as_fn_error $? "<wchar.h> cannot be used with this compiler ($CC $CFLAGS $CPPFLAGS). +This is a known interoperability problem of glibc <= 2.5 with gcc >= 4.3 in +C99 mode. You have four options: + - Add the flag -fgnu89-inline to CC and reconfigure, or + - Fix your include files, using parts of + <https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=b037a293a48718af30d706c2e18c929d0e69a621>, or + - Use a gcc version older than 4.3, or + - Don't use the flags -std=c99 or -std=gnu99. +Configuration aborted." "$LINENO" 5 fi + for ac_func in $ac_func_list +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF - - - - : - +fi +done - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether realpath works" >&5 -$as_echo_n "checking whether realpath works... " >&6; } -if ${gl_cv_func_realpath_works+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nl_langinfo and CODESET" >&5 +$as_echo_n "checking for nl_langinfo and CODESET... " >&6; } +if ${am_cv_langinfo_codeset+:} false; then : $as_echo_n "(cached) " >&6 else - - touch conftest.a - mkdir conftest.d - if test "$cross_compiling" = yes; then : - case "$host_os" in - # Guess yes on glibc systems. - *-gnu* | gnu*) gl_cv_func_realpath_works="guessing yes" ;; - # If we don't know, assume the worst. - *) gl_cv_func_realpath_works="guessing no" ;; - esac - -else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ - - - -#include <stdlib.h> -#if defined __MACH__ && defined __APPLE__ -/* Avoid a crash on Mac OS X. */ -#include <mach/mach.h> -#include <mach/mach_error.h> -#include <mach/thread_status.h> -#include <mach/exception.h> -#include <mach/task.h> -#include <pthread.h> -/* The exception port on which our thread listens. */ -static mach_port_t our_exception_port; -/* The main function of the thread listening for exceptions of type - EXC_BAD_ACCESS. */ -static void * -mach_exception_thread (void *arg) -{ - /* Buffer for a message to be received. */ - struct { - mach_msg_header_t head; - mach_msg_body_t msgh_body; - char data[1024]; - } msg; - mach_msg_return_t retval; - /* Wait for a message on the exception port. */ - retval = mach_msg (&msg.head, MACH_RCV_MSG | MACH_RCV_LARGE, 0, sizeof (msg), - our_exception_port, MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL); - if (retval != MACH_MSG_SUCCESS) - abort (); - exit (1); -} -static void -nocrash_init (void) -{ - mach_port_t self = mach_task_self (); - /* Allocate a port on which the thread shall listen for exceptions. */ - if (mach_port_allocate (self, MACH_PORT_RIGHT_RECEIVE, &our_exception_port) - == KERN_SUCCESS) { - /* See http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/mach_port_insert_right.html. */ - if (mach_port_insert_right (self, our_exception_port, our_exception_port, - MACH_MSG_TYPE_MAKE_SEND) - == KERN_SUCCESS) { - /* The exceptions we want to catch. Only EXC_BAD_ACCESS is interesting - for us. */ - exception_mask_t mask = EXC_MASK_BAD_ACCESS; - /* Create the thread listening on the exception port. */ - pthread_attr_t attr; - pthread_t thread; - if (pthread_attr_init (&attr) == 0 - && pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED) == 0 - && pthread_create (&thread, &attr, mach_exception_thread, NULL) == 0) { - pthread_attr_destroy (&attr); - /* Replace the exception port info for these exceptions with our own. - Note that we replace the exception port for the entire task, not only - for a particular thread. This has the effect that when our exception - port gets the message, the thread specific exception port has already - been asked, and we don't need to bother about it. - See http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/task_set_exception_ports.html. */ - task_set_exception_ports (self, mask, our_exception_port, - EXCEPTION_DEFAULT, MACHINE_THREAD_STATE); - } - } - } -} -#elif (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ -/* Avoid a crash on native Windows. */ -#define WIN32_LEAN_AND_MEAN -#include <windows.h> -#include <winerror.h> -static LONG WINAPI -exception_filter (EXCEPTION_POINTERS *ExceptionInfo) -{ - switch (ExceptionInfo->ExceptionRecord->ExceptionCode) - { - case EXCEPTION_ACCESS_VIOLATION: - case EXCEPTION_IN_PAGE_ERROR: - case EXCEPTION_STACK_OVERFLOW: - case EXCEPTION_GUARD_PAGE: - case EXCEPTION_PRIV_INSTRUCTION: - case EXCEPTION_ILLEGAL_INSTRUCTION: - case EXCEPTION_DATATYPE_MISALIGNMENT: - case EXCEPTION_ARRAY_BOUNDS_EXCEEDED: - case EXCEPTION_NONCONTINUABLE_EXCEPTION: - exit (1); - } - return EXCEPTION_CONTINUE_SEARCH; -} -static void -nocrash_init (void) -{ - SetUnhandledExceptionFilter ((LPTOP_LEVEL_EXCEPTION_FILTER) exception_filter); -} -#else -/* Avoid a crash on POSIX systems. */ -#include <signal.h> -#include <unistd.h> -/* A POSIX signal handler. */ -static void -exception_handler (int sig) -{ - _exit (1); -} -static void -nocrash_init (void) -{ -#ifdef SIGSEGV - signal (SIGSEGV, exception_handler); -#endif -#ifdef SIGBUS - signal (SIGBUS, exception_handler); -#endif -} -#endif - - #include <stdlib.h> - #include <string.h> - +#include <langinfo.h> int main () { - - int result = 0; - { - char *name = realpath ("conftest.a", NULL); - if (!(name && *name == '/')) - result |= 1; - free (name); - } - { - char *name = realpath ("conftest.b/../conftest.a", NULL); - if (name != NULL) - result |= 2; - free (name); - } - { - char *name = realpath ("conftest.a/", NULL); - if (name != NULL) - result |= 4; - free (name); - } - { - char *name1 = realpath (".", NULL); - char *name2 = realpath ("conftest.d//./..", NULL); - if (! name1 || ! name2 || strcmp (name1, name2)) - result |= 8; - free (name1); - free (name2); - } - return result; - +char* cs = nl_langinfo(CODESET); return !cs; ; return 0; } - _ACEOF -if ac_fn_c_try_run "$LINENO"; then : - gl_cv_func_realpath_works=yes +if ac_fn_c_try_link "$LINENO"; then : + am_cv_langinfo_codeset=yes else - gl_cv_func_realpath_works=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext + am_cv_langinfo_codeset=no fi - - rm -rf conftest.a conftest.d +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_realpath_works" >&5 -$as_echo "$gl_cv_func_realpath_works" >&6; } - case "$gl_cv_func_realpath_works" in - *yes) - -$as_echo "#define FUNC_REALPATH_WORKS 1" >>confdefs.h - - ;; - esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_langinfo_codeset" >&5 +$as_echo "$am_cv_langinfo_codeset" >&6; } + if test $am_cv_langinfo_codeset = yes; then +$as_echo "#define HAVE_LANGINFO_CODESET 1" >>confdefs.h + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a traditional french locale" >&5 +$as_echo_n "checking for a traditional french locale... " >&6; } +if ${gt_cv_locale_fr+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <locale.h> +#include <time.h> +#if HAVE_LANGINFO_CODESET +# include <langinfo.h> +#endif +#include <stdlib.h> +#include <string.h> +struct tm t; +char buf[16]; +int main () { + /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl + imitates locale dependent behaviour by looking at the environment + variables, and all locales use the UTF-8 encoding. */ +#if defined __BEOS__ || defined __HAIKU__ + return 1; +#else + /* Check whether the given locale name is recognized by the system. */ +# if defined _WIN32 && !defined __CYGWIN__ + /* On native Windows, setlocale(category, "") looks at the system settings, + not at the environment variables. Also, when an encoding suffix such + as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE + category of the locale to "C". */ + if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL + || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) + return 1; +# else + if (setlocale (LC_ALL, "") == NULL) return 1; +# endif + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) + is empty, and the behaviour of Tcl 8.4 in this locale is not useful. + On OpenBSD 4.0, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "646". In this situation, + some unit tests fail. + On MirBSD 10, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "UTF-8". */ +# if HAVE_LANGINFO_CODESET + { + const char *cs = nl_langinfo (CODESET); + if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0 + || strcmp (cs, "UTF-8") == 0) + return 1; + } +# endif +# ifdef __CYGWIN__ + /* On Cygwin, avoid locale names without encoding suffix, because the + locale_charset() function relies on the encoding suffix. Note that + LC_ALL is set on the command line. */ + if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; +# endif + /* Check whether in the abbreviation of the second month, the second + character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is only + one byte long. This excludes the UTF-8 encoding. */ + t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; + if (strftime (buf, sizeof (buf), "%b", &t) < 3 || buf[2] != 'v') return 1; +# if !defined __BIONIC__ /* Bionic libc's 'struct lconv' is just a dummy. */ + /* Check whether the decimal separator is a comma. + On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point + are nl_langinfo(RADIXCHAR) are both ".". */ + if (localeconv () ->decimal_point[0] != ',') return 1; +# endif + return 0; +#endif +} - : +_ACEOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest$ac_exeext; then + case "$host_os" in + # Handle native Windows specially, because there setlocale() interprets + # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", + # "fr" or "fra" as "French" or "French_France.1252", + # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", + # "ja" as "Japanese" or "Japanese_Japan.932", + # and similar. + mingw*) + # Test for the native Windows locale name. + if (LC_ALL=French_France.1252 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=French_France.1252 + else + # None found. + gt_cv_locale_fr=none + fi + ;; + *) + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the + # configure script would override the LC_ALL setting. Likewise for + # LC_CTYPE, which is also set at the beginning of the configure script. + # Test for the usual locale name. + if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR + else + # Test for the locale name with explicit encoding suffix. + if (LC_ALL=fr_FR.ISO-8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR.ISO-8859-1 + else + # Test for the AIX, OSF/1, FreeBSD, NetBSD, OpenBSD locale name. + if (LC_ALL=fr_FR.ISO8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR.ISO8859-1 + else + # Test for the HP-UX locale name. + if (LC_ALL=fr_FR.iso88591 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR.iso88591 + else + # Test for the Solaris 7 locale name. + if (LC_ALL=fr LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr + else + # None found. + gt_cv_locale_fr=none + fi + fi + fi + fi + fi + ;; + esac + fi + rm -fr conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_fr" >&5 +$as_echo "$gt_cv_locale_fr" >&6; } + LOCALE_FR=$gt_cv_locale_fr + GNULIB__EXIT=0; + GNULIB_ATOLL=0; + GNULIB_CALLOC_POSIX=0; + GNULIB_CANONICALIZE_FILE_NAME=0; + GNULIB_GETLOADAVG=0; + GNULIB_GETSUBOPT=0; + GNULIB_GRANTPT=0; + GNULIB_MALLOC_POSIX=0; + GNULIB_MBTOWC=0; + GNULIB_MKDTEMP=0; + GNULIB_MKOSTEMP=0; + GNULIB_MKOSTEMPS=0; + GNULIB_MKSTEMP=0; + GNULIB_MKSTEMPS=0; + GNULIB_POSIX_OPENPT=0; + GNULIB_PTSNAME=0; + GNULIB_PTSNAME_R=0; + GNULIB_PUTENV=0; + GNULIB_QSORT_R=0; + GNULIB_RANDOM=0; + GNULIB_RANDOM_R=0; + GNULIB_REALLOCARRAY=0; + GNULIB_REALLOC_POSIX=0; + GNULIB_REALPATH=0; + GNULIB_RPMATCH=0; + GNULIB_SECURE_GETENV=0; + GNULIB_SETENV=0; + GNULIB_STRTOD=0; + GNULIB_STRTOLD=0; + GNULIB_STRTOLL=0; + GNULIB_STRTOULL=0; + GNULIB_SYSTEM_POSIX=0; + GNULIB_UNLOCKPT=0; + GNULIB_UNSETENV=0; + GNULIB_WCTOMB=0; + HAVE__EXIT=1; + HAVE_ATOLL=1; + HAVE_CANONICALIZE_FILE_NAME=1; + HAVE_DECL_GETLOADAVG=1; + HAVE_GETSUBOPT=1; + HAVE_GRANTPT=1; + HAVE_INITSTATE=1; + HAVE_DECL_INITSTATE=1; + HAVE_MBTOWC=1; + HAVE_MKDTEMP=1; + HAVE_MKOSTEMP=1; + HAVE_MKOSTEMPS=1; + HAVE_MKSTEMP=1; + HAVE_MKSTEMPS=1; + HAVE_POSIX_OPENPT=1; + HAVE_PTSNAME=1; + HAVE_PTSNAME_R=1; + HAVE_QSORT_R=1; + HAVE_RANDOM=1; + HAVE_RANDOM_H=1; + HAVE_RANDOM_R=1; + HAVE_REALLOCARRAY=1; + HAVE_REALPATH=1; + HAVE_RPMATCH=1; + HAVE_SECURE_GETENV=1; + HAVE_SETENV=1; + HAVE_DECL_SETENV=1; + HAVE_SETSTATE=1; + HAVE_DECL_SETSTATE=1; + HAVE_STRTOD=1; + HAVE_STRTOLD=1; + HAVE_STRTOLL=1; + HAVE_STRTOULL=1; + HAVE_STRUCT_RANDOM_DATA=1; + HAVE_SYS_LOADAVG_H=0; + HAVE_UNLOCKPT=1; + HAVE_DECL_UNSETENV=1; + REPLACE_CALLOC=0; + REPLACE_CANONICALIZE_FILE_NAME=0; + REPLACE_INITSTATE=0; + REPLACE_MALLOC=0; + REPLACE_MBTOWC=0; + REPLACE_MKSTEMP=0; + REPLACE_PTSNAME=0; + REPLACE_PTSNAME_R=0; + REPLACE_PUTENV=0; + REPLACE_QSORT_R=0; + REPLACE_RANDOM=0; + REPLACE_RANDOM_R=0; + REPLACE_REALLOC=0; + REPLACE_REALPATH=0; + REPLACE_SETENV=0; + REPLACE_SETSTATE=0; + REPLACE_STRTOD=0; + REPLACE_STRTOLD=0; + REPLACE_UNSETENV=0; + REPLACE_WCTOMB=0; @@ -7793,18 +7673,264 @@ + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether // is distinct from /" >&5 +$as_echo_n "checking whether // is distinct from /... " >&6; } +if ${gl_cv_double_slash_root+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test x"$cross_compiling" = xyes ; then + # When cross-compiling, there is no way to tell whether // is special + # short of a list of hosts. However, the only known hosts to date + # that have a distinct // are Apollo DomainOS (too old to port to), + # Cygwin, and z/OS. If anyone knows of another system for which // has + # special semantics and is distinct from /, please report it to + # <bug-gnulib@gnu.org>. + case $host in + *-cygwin | i370-ibm-openedition) + gl_cv_double_slash_root=yes ;; + *) + # Be optimistic and assume that / and // are the same when we + # don't know. + gl_cv_double_slash_root='unknown, assuming no' ;; + esac + else + set x `ls -di / // 2>/dev/null` + if test "$2" = "$4" && wc //dev/null >/dev/null 2>&1; then + gl_cv_double_slash_root=no + else + gl_cv_double_slash_root=yes + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_double_slash_root" >&5 +$as_echo "$gl_cv_double_slash_root" >&6; } + if test "$gl_cv_double_slash_root" = yes; then - : +$as_echo "#define DOUBLE_SLASH_IS_DISTINCT_ROOT 1" >>confdefs.h + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether realpath works" >&5 +$as_echo_n "checking whether realpath works... " >&6; } +if ${gl_cv_func_realpath_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + touch conftest.a + mkdir conftest.d + if test "$cross_compiling" = yes; then : + case "$host_os" in + # Guess yes on glibc systems. + *-gnu* | gnu*) gl_cv_func_realpath_works="guessing yes" ;; + # Guess yes on musl systems. + *-musl*) gl_cv_func_realpath_works="guessing yes" ;; + # Guess no on native Windows. + mingw*) gl_cv_func_realpath_works="guessing no" ;; + # If we don't know, obey --enable-cross-guesses. + *) gl_cv_func_realpath_works="$gl_cross_guess_normal" ;; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + +#include <stdlib.h> +#if defined __MACH__ && defined __APPLE__ +/* Avoid a crash on Mac OS X. */ +#include <mach/mach.h> +#include <mach/mach_error.h> +#include <mach/thread_status.h> +#include <mach/exception.h> +#include <mach/task.h> +#include <pthread.h> +/* The exception port on which our thread listens. */ +static mach_port_t our_exception_port; +/* The main function of the thread listening for exceptions of type + EXC_BAD_ACCESS. */ +static void * +mach_exception_thread (void *arg) +{ + /* Buffer for a message to be received. */ + struct { + mach_msg_header_t head; + mach_msg_body_t msgh_body; + char data[1024]; + } msg; + mach_msg_return_t retval; + /* Wait for a message on the exception port. */ + retval = mach_msg (&msg.head, MACH_RCV_MSG | MACH_RCV_LARGE, 0, sizeof (msg), + our_exception_port, MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL); + if (retval != MACH_MSG_SUCCESS) + abort (); + exit (1); +} +static void +nocrash_init (void) +{ + mach_port_t self = mach_task_self (); + /* Allocate a port on which the thread shall listen for exceptions. */ + if (mach_port_allocate (self, MACH_PORT_RIGHT_RECEIVE, &our_exception_port) + == KERN_SUCCESS) { + /* See https://web.mit.edu/darwin/src/modules/xnu/osfmk/man/mach_port_insert_right.html. */ + if (mach_port_insert_right (self, our_exception_port, our_exception_port, + MACH_MSG_TYPE_MAKE_SEND) + == KERN_SUCCESS) { + /* The exceptions we want to catch. Only EXC_BAD_ACCESS is interesting + for us. */ + exception_mask_t mask = EXC_MASK_BAD_ACCESS; + /* Create the thread listening on the exception port. */ + pthread_attr_t attr; + pthread_t thread; + if (pthread_attr_init (&attr) == 0 + && pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED) == 0 + && pthread_create (&thread, &attr, mach_exception_thread, NULL) == 0) { + pthread_attr_destroy (&attr); + /* Replace the exception port info for these exceptions with our own. + Note that we replace the exception port for the entire task, not only + for a particular thread. This has the effect that when our exception + port gets the message, the thread specific exception port has already + been asked, and we don't need to bother about it. + See https://web.mit.edu/darwin/src/modules/xnu/osfmk/man/task_set_exception_ports.html. */ + task_set_exception_ports (self, mask, our_exception_port, + EXCEPTION_DEFAULT, MACHINE_THREAD_STATE); + } + } + } +} +#elif defined _WIN32 && ! defined __CYGWIN__ +/* Avoid a crash on native Windows. */ +#define WIN32_LEAN_AND_MEAN +#include <windows.h> +#include <winerror.h> +static LONG WINAPI +exception_filter (EXCEPTION_POINTERS *ExceptionInfo) +{ + switch (ExceptionInfo->ExceptionRecord->ExceptionCode) + { + case EXCEPTION_ACCESS_VIOLATION: + case EXCEPTION_IN_PAGE_ERROR: + case EXCEPTION_STACK_OVERFLOW: + case EXCEPTION_GUARD_PAGE: + case EXCEPTION_PRIV_INSTRUCTION: + case EXCEPTION_ILLEGAL_INSTRUCTION: + case EXCEPTION_DATATYPE_MISALIGNMENT: + case EXCEPTION_ARRAY_BOUNDS_EXCEEDED: + case EXCEPTION_NONCONTINUABLE_EXCEPTION: + exit (1); + } + return EXCEPTION_CONTINUE_SEARCH; +} +static void +nocrash_init (void) +{ + SetUnhandledExceptionFilter ((LPTOP_LEVEL_EXCEPTION_FILTER) exception_filter); +} +#else +/* Avoid a crash on POSIX systems. */ +#include <signal.h> +#include <unistd.h> +/* A POSIX signal handler. */ +static void +exception_handler (int sig) +{ + _exit (1); +} +static void +nocrash_init (void) +{ +#ifdef SIGSEGV + signal (SIGSEGV, exception_handler); +#endif +#ifdef SIGBUS + signal (SIGBUS, exception_handler); +#endif +} +#endif + + #include <stdlib.h> + #include <string.h> + +int +main () +{ + + int result = 0; + { + char *name = realpath ("conftest.a", NULL); + if (!(name && *name == '/')) + result |= 1; + free (name); + } + { + char *name = realpath ("conftest.b/../conftest.a", NULL); + if (name != NULL) + result |= 2; + free (name); + } + { + char *name = realpath ("conftest.a/", NULL); + if (name != NULL) + result |= 4; + free (name); + } + { + char *name1 = realpath (".", NULL); + char *name2 = realpath ("conftest.d//./..", NULL); + if (! name1 || ! name2 || strcmp (name1, name2)) + result |= 8; + free (name1); + free (name2); + } + return result; + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_realpath_works=yes +else + gl_cv_func_realpath_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + rm -rf conftest.a conftest.d + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_realpath_works" >&5 +$as_echo "$gl_cv_func_realpath_works" >&6; } + case "$gl_cv_func_realpath_works" in + *yes) + +$as_echo "#define FUNC_REALPATH_WORKS 1" >>confdefs.h + + ;; + esac + + + + + + + + + + + + GNULIB_ACCESS=0; GNULIB_CHDIR=0; GNULIB_CHOWN=0; GNULIB_CLOSE=0; + GNULIB_COPY_FILE_RANGE=0; GNULIB_DUP=0; GNULIB_DUP2=0; GNULIB_DUP3=0; @@ -7819,11 +7945,14 @@ GNULIB_GETCWD=0; GNULIB_GETDOMAINNAME=0; GNULIB_GETDTABLESIZE=0; + GNULIB_GETENTROPY=0; GNULIB_GETGROUPS=0; GNULIB_GETHOSTNAME=0; GNULIB_GETLOGIN=0; GNULIB_GETLOGIN_R=0; + GNULIB_GETOPT_POSIX=0; GNULIB_GETPAGESIZE=0; + GNULIB_GETPASS=0; GNULIB_GETUSERSHELL=0; GNULIB_GROUP_MEMBER=0; GNULIB_ISATTY=0; @@ -7843,6 +7972,7 @@ GNULIB_SLEEP=0; GNULIB_SYMLINK=0; GNULIB_SYMLINKAT=0; + GNULIB_TRUNCATE=0; GNULIB_TTYNAME_R=0; GNULIB_UNISTD_H_NONBLOCKING=0; GNULIB_UNISTD_H_SIGPIPE=0; @@ -7851,6 +7981,7 @@ GNULIB_USLEEP=0; GNULIB_WRITE=0; HAVE_CHOWN=1; + HAVE_COPY_FILE_RANGE=1; HAVE_DUP2=1; HAVE_DUP3=1; HAVE_EUIDACCESS=1; @@ -7861,10 +7992,12 @@ HAVE_FSYNC=1; HAVE_FTRUNCATE=1; HAVE_GETDTABLESIZE=1; + HAVE_GETENTROPY=1; HAVE_GETGROUPS=1; HAVE_GETHOSTNAME=1; HAVE_GETLOGIN=1; HAVE_GETPAGESIZE=1; + HAVE_GETPASS=1; HAVE_GROUP_MEMBER=1; HAVE_LCHOWN=1; HAVE_LINK=1; @@ -7885,17 +8018,21 @@ HAVE_DECL_FCHDIR=1; HAVE_DECL_FDATASYNC=1; HAVE_DECL_GETDOMAINNAME=1; + HAVE_DECL_GETLOGIN=1; HAVE_DECL_GETLOGIN_R=1; HAVE_DECL_GETPAGESIZE=1; HAVE_DECL_GETUSERSHELL=1; HAVE_DECL_SETHOSTNAME=1; + HAVE_DECL_TRUNCATE=1; HAVE_DECL_TTYNAME_R=1; HAVE_OS_H=0; HAVE_SYS_PARAM_H=0; + REPLACE_ACCESS=0; REPLACE_CHOWN=0; REPLACE_CLOSE=0; REPLACE_DUP=0; REPLACE_DUP2=0; + REPLACE_FACCESSAT=0; REPLACE_FCHOWNAT=0; REPLACE_FTRUNCATE=0; REPLACE_GETCWD=0; @@ -7904,6 +8041,7 @@ REPLACE_GETLOGIN_R=0; REPLACE_GETGROUPS=0; REPLACE_GETPAGESIZE=0; + REPLACE_GETPASS=0; REPLACE_ISATTY=0; REPLACE_LCHOWN=0; REPLACE_LINK=0; @@ -7918,11 +8056,13 @@ REPLACE_SLEEP=0; REPLACE_SYMLINK=0; REPLACE_SYMLINKAT=0; + REPLACE_TRUNCATE=0; REPLACE_TTYNAME_R=0; REPLACE_UNLINK=0; REPLACE_UNLINKAT=0; REPLACE_USLEEP=0; REPLACE_WRITE=0; + UNISTD_H_HAVE_SYS_RANDOM_H=0; UNISTD_H_HAVE_WINSOCK2_H=0; UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS=0; @@ -7934,27 +8074,6 @@ - : - - - - - - - - - - - - - - - - - : - - - if test $ac_cv_func__set_invalid_parameter_handler = yes; then @@ -7970,14 +8089,6 @@ - - - - - - - - GNULIB_OPENDIR=0; GNULIB_READDIR=0; GNULIB_REWINDDIR=0; @@ -8001,6 +8112,8 @@ REPLACE_FDOPENDIR=0; + GNULIB_ISBLANK=0; + HAVE_ISBLANK=1; @@ -8010,21 +8123,13 @@ - : - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if environ is properly declared" >&5 $as_echo_n "checking if environ is properly declared... " >&6; } - if ${gt_cv_var_environ_declaration+:} false; then : +if ${gt_cv_var_environ_declaration+:} false; then : $as_echo_n "(cached) " >&6 else - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if HAVE_UNISTD_H #include <unistd.h> @@ -8032,7 +8137,7 @@ /* mingw, BeOS, Haiku declare environ in <stdlib.h>, not in <unistd.h>. */ #include <stdlib.h> - extern struct { int foo; } environ; + extern struct { int foo; } environ; int main () { @@ -8048,8 +8153,7 @@ fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_var_environ_declaration" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_var_environ_declaration" >&5 $as_echo "$gt_cv_var_environ_declaration" >&6; } if test $gt_cv_var_environ_declaration = yes; then @@ -8438,66 +8542,129 @@ fi - - -$as_echo "#define HAVE_DECL_STRERROR_R 1" >>confdefs.h - - -$as_echo "#define HAVE_STRERROR_R 1" >>confdefs.h - - -$as_echo "#define STRERROR_R_CHAR_P 0" >>confdefs.h - - - - - - - ac_fn_c_check_decl "$LINENO" "fchdir" "ac_cv_have_decl_fchdir" "$ac_includes_default" -if test "x$ac_cv_have_decl_fchdir" = xyes; then : +ac_fn_c_check_decl "$LINENO" "strerror_r" "ac_cv_have_decl_strerror_r" "$ac_includes_default" +if test "x$ac_cv_have_decl_strerror_r" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_FCHDIR $ac_have_decl +#define HAVE_DECL_STRERROR_R $ac_have_decl _ACEOF +for ac_func in strerror_r +do : + ac_fn_c_check_func "$LINENO" "strerror_r" "ac_cv_func_strerror_r" +if test "x$ac_cv_func_strerror_r" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_STRERROR_R 1 +_ACEOF +fi +done - GNULIB_FCNTL=0; - GNULIB_NONBLOCKING=0; - GNULIB_OPEN=0; - GNULIB_OPENAT=0; - HAVE_FCNTL=1; - HAVE_OPENAT=1; - REPLACE_FCNTL=0; - REPLACE_OPEN=0; - REPLACE_OPENAT=0; - - +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether strerror_r returns char *" >&5 +$as_echo_n "checking whether strerror_r returns char *... " >&6; } +if ${ac_cv_func_strerror_r_char_p+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_func_strerror_r_char_p=no + if test $ac_cv_have_decl_strerror_r = yes; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ + char buf[100]; + char x = *strerror_r (0, buf, sizeof buf); + char *p = strerror_r (0, buf, sizeof buf); + return !p || x; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_func_strerror_r_char_p=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + else + # strerror_r is not declared. Choose between + # systems that have relatively inaccessible declarations for the + # function. BeOS and DEC UNIX 4.0 fall in this category, but the + # former has a strerror_r that returns char*, while the latter + # has a strerror_r that returns `int'. + # This test should segfault on the DEC system. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default + extern char *strerror_r (); +int +main () +{ +char buf[100]; + char x = *strerror_r (0, buf, sizeof buf); + return ! isalpha (x); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_strerror_r_char_p=yes +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_strerror_r_char_p" >&5 +$as_echo "$ac_cv_func_strerror_r_char_p" >&6; } +if test $ac_cv_func_strerror_r_char_p = yes; then +$as_echo "#define STRERROR_R_CHAR_P 1" >>confdefs.h +fi +ac_fn_c_check_decl "$LINENO" "fchdir" "ac_cv_have_decl_fchdir" "$ac_includes_default" +if test "x$ac_cv_have_decl_fchdir" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_FCHDIR $ac_have_decl +_ACEOF - : + GNULIB_CREAT=0; + GNULIB_FCNTL=0; + GNULIB_NONBLOCKING=0; + GNULIB_OPEN=0; + GNULIB_OPENAT=0; + HAVE_FCNTL=1; + HAVE_OPENAT=1; + REPLACE_CREAT=0; + REPLACE_FCNTL=0; + REPLACE_OPEN=0; + REPLACE_OPENAT=0; - : @@ -8509,7 +8676,12 @@ $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : - gl_cv_header_working_fcntl_h=cross-compiling + case "$host_os" in + # Guess 'no' on native Windows. + mingw*) gl_cv_header_working_fcntl_h='no' ;; + *) gl_cv_header_working_fcntl_h=cross-compiling ;; + esac + else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -8620,6 +8792,7 @@ conftest.$ac_objext conftest.beam conftest.$ac_ext fi + fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_working_fcntl_h" >&5 $as_echo "$gl_cv_header_working_fcntl_h" >&6; } @@ -8671,6 +8844,9 @@ + GNULIB_FNMATCH=0; + HAVE_FNMATCH=1; + REPLACE_FNMATCH=0; @@ -8678,61 +8854,80 @@ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mbstate_t" >&5 -$as_echo_n "checking for mbstate_t... " >&6; } -if ${ac_cv_type_mbstate_t+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_includes_default -/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before - <wchar.h>. - BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be - included before <wchar.h>. */ -#include <stddef.h> -#include <stdio.h> -#include <time.h> -#include <wchar.h> -int -main () -{ -mbstate_t x; return sizeof x; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_type_mbstate_t=yes -else - ac_cv_type_mbstate_t=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_mbstate_t" >&5 -$as_echo "$ac_cv_type_mbstate_t" >&6; } - if test $ac_cv_type_mbstate_t = yes; then -$as_echo "#define HAVE_MBSTATE_T 1" >>confdefs.h - else -$as_echo "#define mbstate_t int" >>confdefs.h - fi + if test $gl_cv_have_include_next = yes; then + gl_cv_next_fnmatch_h='<'fnmatch.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <fnmatch.h>" >&5 +$as_echo_n "checking absolute name of <fnmatch.h>... " >&6; } +if ${gl_cv_next_fnmatch_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test $ac_cv_header_fnmatch_h = yes; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <fnmatch.h> +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + + case "$host_os" in + mingw*) + gl_dirsep_regex='[/\\]' + ;; + *) + gl_dirsep_regex='\/' + ;; + esac + gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' + gl_header_literal_regex=`echo 'fnmatch.h' \ + | sed -e "$gl_make_literal_regex_sed"` + gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ + s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ + s|^/[^/]|//&| + p + q + }' + + gl_cv_absolute_fnmatch_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n "$gl_absolute_header_sed"` + + gl_header=$gl_cv_absolute_fnmatch_h + gl_cv_next_fnmatch_h='"'$gl_header'"' + else + gl_cv_next_fnmatch_h='<'fnmatch.h'>' + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_fnmatch_h" >&5 +$as_echo "$gl_cv_next_fnmatch_h" >&6; } + fi + NEXT_FNMATCH_H=$gl_cv_next_fnmatch_h + if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' + gl_next_as_first_directive='<'fnmatch.h'>' + else + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' + gl_next_as_first_directive=$gl_cv_next_fnmatch_h + fi + NEXT_AS_FIRST_DIRECTIVE_FNMATCH_H=$gl_next_as_first_directive @@ -8740,10 +8935,30 @@ + if test $ac_cv_header_fnmatch_h = yes; then + HAVE_FNMATCH_H=1 + else + HAVE_FNMATCH_H=0 + fi + FNMATCH_H='' + if false; then + FNMATCH_H=fnmatch.h + else + if test $ac_cv_header_fnmatch_h != yes; then + FNMATCH_H=fnmatch.h + fi + fi + if test -n "$FNMATCH_H"; then + GL_GENERATE_FNMATCH_H_TRUE= + GL_GENERATE_FNMATCH_H_FALSE='#' +else + GL_GENERATE_FNMATCH_H_TRUE='#' + GL_GENERATE_FNMATCH_H_FALSE= +fi @@ -8754,10 +8969,48 @@ + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mbstate_t" >&5 +$as_echo_n "checking for mbstate_t... " >&6; } +if ${ac_cv_type_mbstate_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> +int +main () +{ +mbstate_t x; return sizeof x; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_type_mbstate_t=yes +else + ac_cv_type_mbstate_t=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_mbstate_t" >&5 +$as_echo "$ac_cv_type_mbstate_t" >&6; } + if test $ac_cv_type_mbstate_t = yes; then +$as_echo "#define HAVE_MBSTATE_T 1" >>confdefs.h + else +$as_echo "#define mbstate_t int" >>confdefs.h + fi @@ -8953,13 +9206,22 @@ HAVE_DECL_TRUNC=1; HAVE_DECL_TRUNCF=1; HAVE_DECL_TRUNCL=1; + REPLACE_ACOSF=0; + REPLACE_ASINF=0; + REPLACE_ATANF=0; + REPLACE_ATAN2F=0; REPLACE_CBRTF=0; REPLACE_CBRTL=0; REPLACE_CEIL=0; REPLACE_CEILF=0; REPLACE_CEILL=0; + REPLACE_COSF=0; + REPLACE_COSHF=0; + REPLACE_EXPF=0; + REPLACE_EXPL=0; REPLACE_EXPM1=0; REPLACE_EXPM1F=0; + REPLACE_EXPM1L=0; REPLACE_EXP2=0; REPLACE_EXP2L=0; REPLACE_FABSL=0; @@ -8981,6 +9243,7 @@ REPLACE_HYPOTL=0; REPLACE_ILOGB=0; REPLACE_ILOGBF=0; + REPLACE_ILOGBL=0; REPLACE_ISFINITE=0; REPLACE_ISINF=0; REPLACE_ISNAN=0; @@ -9007,12 +9270,18 @@ REPLACE_REMAINDER=0; REPLACE_REMAINDERF=0; REPLACE_REMAINDERL=0; + REPLACE_RINTL=0; REPLACE_ROUND=0; REPLACE_ROUNDF=0; REPLACE_ROUNDL=0; REPLACE_SIGNBIT=0; REPLACE_SIGNBIT_USING_GCC=0; + REPLACE_SINF=0; + REPLACE_SINHF=0; + REPLACE_SQRTF=0; REPLACE_SQRTL=0; + REPLACE_TANF=0; + REPLACE_TANHF=0; REPLACE_TRUNC=0; REPLACE_TRUNCF=0; REPLACE_TRUNCL=0; @@ -9048,8 +9317,7 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_frexp_no_libm" >&5 $as_echo "$gl_cv_func_frexp_no_libm" >&6; } - - ac_fn_c_check_decl "$LINENO" "alarm" "ac_cv_have_decl_alarm" "$ac_includes_default" +ac_fn_c_check_decl "$LINENO" "alarm" "ac_cv_have_decl_alarm" "$ac_includes_default" if test "x$ac_cv_have_decl_alarm" = xyes; then : ac_have_decl=1 else @@ -9062,578 +9330,619 @@ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether long double and double are the same" >&5 -$as_echo_n "checking whether long double and double are the same... " >&6; } -if ${gl_cv_long_double_equals_double+:} false; then : + + FREXP_LIBM= + if test $gl_cv_func_frexp_no_libm = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether frexp() can be used with libm" >&5 +$as_echo_n "checking whether frexp() can be used with libm... " >&6; } +if ${gl_cv_func_frexp_in_libm+:} false; then : $as_echo_n "(cached) " >&6 else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + + save_LIBS="$LIBS" + LIBS="$LIBS -lm" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include <float.h> +#include <math.h> + double x; int main () { -typedef int check[sizeof (long double) == sizeof (double) - && LDBL_MANT_DIG == DBL_MANT_DIG - && LDBL_MAX_EXP == DBL_MAX_EXP - && LDBL_MIN_EXP == DBL_MIN_EXP - ? 1 : -1]; - +int e; return frexp (x, &e) > 0; ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - gl_cv_long_double_equals_double=yes +if ac_fn_c_try_link "$LINENO"; then : + gl_cv_func_frexp_in_libm=yes else - gl_cv_long_double_equals_double=no + gl_cv_func_frexp_in_libm=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LIBS="$save_LIBS" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_long_double_equals_double" >&5 -$as_echo "$gl_cv_long_double_equals_double" >&6; } - if test $gl_cv_long_double_equals_double = yes; then - -$as_echo "#define HAVE_SAME_LONG_DOUBLE_AS_DOUBLE 1" >>confdefs.h - - HAVE_SAME_LONG_DOUBLE_AS_DOUBLE=1 - else - HAVE_SAME_LONG_DOUBLE_AS_DOUBLE=0 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_frexp_in_libm" >&5 +$as_echo "$gl_cv_func_frexp_in_libm" >&6; } + if test $gl_cv_func_frexp_in_libm = yes; then + FREXP_LIBM=-lm + fi fi + if test $gl_cv_func_frexp_no_libm = yes \ + || test $gl_cv_func_frexp_in_libm = yes; then + save_LIBS="$LIBS" + LIBS="$LIBS $FREXP_LIBM" - GNULIB_FCHMODAT=0; - GNULIB_FSTAT=0; - GNULIB_FSTATAT=0; - GNULIB_FUTIMENS=0; - GNULIB_LCHMOD=0; - GNULIB_LSTAT=0; - GNULIB_MKDIRAT=0; - GNULIB_MKFIFO=0; - GNULIB_MKFIFOAT=0; - GNULIB_MKNOD=0; - GNULIB_MKNODAT=0; - GNULIB_STAT=0; - GNULIB_UTIMENSAT=0; - HAVE_FCHMODAT=1; - HAVE_FSTATAT=1; - HAVE_FUTIMENS=1; - HAVE_LCHMOD=1; - HAVE_LSTAT=1; - HAVE_MKDIRAT=1; - HAVE_MKFIFO=1; - HAVE_MKFIFOAT=1; - HAVE_MKNOD=1; - HAVE_MKNODAT=1; - HAVE_UTIMENSAT=1; - REPLACE_FSTAT=0; - REPLACE_FSTATAT=0; - REPLACE_FUTIMENS=0; - REPLACE_LSTAT=0; - REPLACE_MKDIR=0; - REPLACE_MKFIFO=0; - REPLACE_MKNOD=0; - REPLACE_STAT=0; - REPLACE_UTIMENSAT=0; - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stat file-mode macros are broken" >&5 -$as_echo_n "checking whether stat file-mode macros are broken... " >&6; } -if ${ac_cv_header_stat_broken+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether frexp works" >&5 +$as_echo_n "checking whether frexp works... " >&6; } +if ${gl_cv_func_frexp_works+:} false; then : $as_echo_n "(cached) " >&6 else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + + if test "$cross_compiling" = yes; then : + case "$host_os" in + netbsd* | irix*) gl_cv_func_frexp_works="guessing no" ;; + mingw*) # Guess yes with MSVC, no with mingw. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include <sys/types.h> -#include <sys/stat.h> -#if defined S_ISBLK && defined S_IFDIR -extern char c1[S_ISBLK (S_IFDIR) ? -1 : 1]; +#ifdef _MSC_VER + Good #endif -#if defined S_ISBLK && defined S_IFCHR -extern char c2[S_ISBLK (S_IFCHR) ? -1 : 1]; -#endif +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "Good" >/dev/null 2>&1; then : + gl_cv_func_frexp_works="guessing yes" +else + gl_cv_func_frexp_works="guessing no" +fi +rm -f conftest* -#if defined S_ISLNK && defined S_IFREG -extern char c3[S_ISLNK (S_IFREG) ? -1 : 1]; -#endif + ;; + *) gl_cv_func_frexp_works="guessing yes" ;; + esac -#if defined S_ISSOCK && defined S_IFREG -extern char c4[S_ISSOCK (S_IFREG) ? -1 : 1]; -#endif +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <float.h> +#include <math.h> +#include <string.h> +#if HAVE_DECL_ALARM +# include <signal.h> +# include <unistd.h> +#endif +/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0. + ICC 10.0 has a bug when optimizing the expression -zero. + The expression -DBL_MIN * DBL_MIN does not work when cross-compiling + to PowerPC on Mac OS X 10.5. */ +#if defined __hpux || defined __sgi || defined __ICC +static double +compute_minus_zero (void) +{ + return -DBL_MIN * DBL_MIN; +} +# define minus_zero compute_minus_zero () +#else +double minus_zero = -0.0; +#endif +int main() +{ + int result = 0; + int i; + volatile double x; + double zero = 0.0; +#if HAVE_DECL_ALARM + /* NeXTstep 3.3 frexp() runs into an endless loop when called on an infinite + number. Let the test fail in this case. */ + signal (SIGALRM, SIG_DFL); + alarm (5); +#endif + /* Test on denormalized numbers. */ + for (i = 1, x = 1.0; i >= DBL_MIN_EXP; i--, x *= 0.5) + ; + if (x > 0.0) + { + int exp; + double y = frexp (x, &exp); + /* On machines with IEEE754 arithmetic: x = 1.11254e-308, exp = -1022. + On NetBSD: y = 0.75. Correct: y = 0.5. */ + if (y != 0.5) + result |= 1; + } + /* Test on infinite numbers. */ + x = 1.0 / zero; + { + int exp; + double y = frexp (x, &exp); + if (y != x) + result |= 2; + } + /* Test on negative zero. */ + x = minus_zero; + { + int exp; + double y = frexp (x, &exp); + if (memcmp (&y, &x, sizeof x)) + result |= 4; + } + return result; +} _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_header_stat_broken=no +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_frexp_works=yes else - ac_cv_header_stat_broken=yes + gl_cv_func_frexp_works=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stat_broken" >&5 -$as_echo "$ac_cv_header_stat_broken" >&6; } -if test $ac_cv_header_stat_broken = yes; then -$as_echo "#define STAT_MACROS_BROKEN 1" >>confdefs.h fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_frexp_works" >&5 +$as_echo "$gl_cv_func_frexp_works" >&6; } + LIBS="$save_LIBS" + case "$gl_cv_func_frexp_works" in + *yes) gl_func_frexp=yes ;; + *) gl_func_frexp=no; REPLACE_FREXP=1; FREXP_LIBM= ;; + esac + else + gl_func_frexp=no + fi + if test $gl_func_frexp = yes; then +$as_echo "#define HAVE_FREXP 1" >>confdefs.h + fi - - - case "$host_os" in - mingw*) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit off_t" >&5 -$as_echo_n "checking for 64-bit off_t... " >&6; } -if ${gl_cv_type_off_t_64+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether long double and double are the same" >&5 +$as_echo_n "checking whether long double and double are the same... " >&6; } +if ${gl_cv_long_double_equals_double+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include <sys/types.h> - int verify_off_t_size[sizeof (off_t) >= 8 ? 1 : -1]; - +#include <float.h> int main () { +typedef int check[sizeof (long double) == sizeof (double) + && LDBL_MANT_DIG == DBL_MANT_DIG + && LDBL_MAX_EXP == DBL_MAX_EXP + && LDBL_MIN_EXP == DBL_MIN_EXP + ? 1 : -1]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : - gl_cv_type_off_t_64=yes + gl_cv_long_double_equals_double=yes else - gl_cv_type_off_t_64=no + gl_cv_long_double_equals_double=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_type_off_t_64" >&5 -$as_echo "$gl_cv_type_off_t_64" >&6; } - if test $gl_cv_type_off_t_64 = no; then - WINDOWS_64_BIT_OFF_T=1 - else - WINDOWS_64_BIT_OFF_T=0 - fi - WINDOWS_64_BIT_ST_SIZE=1 - ;; - *) - WINDOWS_64_BIT_OFF_T=0 - WINDOWS_64_BIT_ST_SIZE=0 - ;; - esac - - - - - - +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_long_double_equals_double" >&5 +$as_echo "$gl_cv_long_double_equals_double" >&6; } + if test $gl_cv_long_double_equals_double = yes; then +$as_echo "#define HAVE_SAME_LONG_DOUBLE_AS_DOUBLE 1" >>confdefs.h + HAVE_SAME_LONG_DOUBLE_AS_DOUBLE=1 + else + HAVE_SAME_LONG_DOUBLE_AS_DOUBLE=0 + fi - : + ac_fn_c_check_decl "$LINENO" "frexpl" "ac_cv_have_decl_frexpl" "#include <math.h> +" +if test "x$ac_cv_have_decl_frexpl" = xyes; then : +else + HAVE_DECL_FREXPL=0 +fi + FREXPL_LIBM= + if test $HAVE_DECL_FREXPL = 1; then - if test $gl_cv_have_include_next = yes; then - gl_cv_next_sys_stat_h='<'sys/stat.h'>' - else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <sys/stat.h>" >&5 -$as_echo_n "checking absolute name of <sys/stat.h>... " >&6; } -if ${gl_cv_next_sys_stat_h+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether frexpl() can be used without linking with libm" >&5 +$as_echo_n "checking whether frexpl() can be used without linking with libm... " >&6; } +if ${gl_cv_func_frexpl_no_libm+:} false; then : $as_echo_n "(cached) " >&6 else - if test $ac_cv_header_sys_stat_h = yes; then - - - - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include <sys/stat.h> +#include <math.h> + long double x; +int +main () +{ +int e; return frexpl (x, &e) > 0; + ; + return 0; +} _ACEOF - case "$host_os" in - aix*) gl_absname_cpp="$ac_cpp -C" ;; - *) gl_absname_cpp="$ac_cpp" ;; - esac - - case "$host_os" in - mingw*) - gl_dirsep_regex='[/\\]' - ;; - *) - gl_dirsep_regex='\/' - ;; - esac - gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' - gl_header_literal_regex=`echo 'sys/stat.h' \ - | sed -e "$gl_make_literal_regex_sed"` - gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ - s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ - s|^/[^/]|//&| - p - q - }' - - gl_cv_absolute_sys_stat_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | - sed -n "$gl_absolute_header_sed"` - - gl_header=$gl_cv_absolute_sys_stat_h - gl_cv_next_sys_stat_h='"'$gl_header'"' - else - gl_cv_next_sys_stat_h='<'sys/stat.h'>' - fi - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sys_stat_h" >&5 -$as_echo "$gl_cv_next_sys_stat_h" >&6; } - fi - NEXT_SYS_STAT_H=$gl_cv_next_sys_stat_h - - if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then - # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' - gl_next_as_first_directive='<'sys/stat.h'>' - else - # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' - gl_next_as_first_directive=$gl_cv_next_sys_stat_h - fi - NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H=$gl_next_as_first_directive - - - - - - - - - - - - if test $WINDOWS_64_BIT_ST_SIZE = 1; then - -$as_echo "#define _GL_WINDOWS_64_BIT_ST_SIZE 1" >>confdefs.h - - fi - - ac_fn_c_check_type "$LINENO" "nlink_t" "ac_cv_type_nlink_t" "#include <sys/types.h> - #include <sys/stat.h> -" -if test "x$ac_cv_type_nlink_t" = xyes; then : - -else - -$as_echo "#define nlink_t int" >>confdefs.h +if ac_fn_c_try_link "$LINENO"; then : + gl_cv_func_frexpl_no_libm=yes +else + gl_cv_func_frexpl_no_libm=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_frexpl_no_libm" >&5 +$as_echo "$gl_cv_func_frexpl_no_libm" >&6; } - - - for gl_func in fchmodat fstat fstatat futimens lchmod lstat mkdirat mkfifo mkfifoat mknod mknodat stat utimensat; do - as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh` - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5 -$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; } -if eval \${$as_gl_Symbol+:} false; then : + if test $gl_cv_func_frexpl_no_libm = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether frexpl() can be used with libm" >&5 +$as_echo_n "checking whether frexpl() can be used with libm... " >&6; } +if ${gl_cv_func_frexpl_in_libm+:} false; then : $as_echo_n "(cached) " >&6 else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <sys/stat.h> + save_LIBS="$LIBS" + LIBS="$LIBS -lm" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <math.h> + long double x; int main () { -#undef $gl_func - (void) $gl_func; +int e; return frexpl (x, &e) > 0; ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$as_gl_Symbol=yes" +if ac_fn_c_try_link "$LINENO"; then : + gl_cv_func_frexpl_in_libm=yes else - eval "$as_gl_Symbol=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + gl_cv_func_frexpl_in_libm=no fi -eval ac_res=\$$as_gl_Symbol - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - if eval test \"x\$"$as_gl_Symbol"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1 -_ACEOF +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LIBS="$save_LIBS" - eval ac_cv_have_decl_$gl_func=yes fi - done - +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_frexpl_in_libm" >&5 +$as_echo "$gl_cv_func_frexpl_in_libm" >&6; } + if test $gl_cv_func_frexpl_in_libm = yes; then + FREXPL_LIBM=-lm + fi + fi + if test $gl_cv_func_frexpl_no_libm = yes \ + || test $gl_cv_func_frexpl_in_libm = yes; then + save_LIBS="$LIBS" + LIBS="$LIBS $FREXPL_LIBM" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether lstat correctly handles trailing slash" >&5 -$as_echo_n "checking whether lstat correctly handles trailing slash... " >&6; } -if ${gl_cv_func_lstat_dereferences_slashed_symlink+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether frexpl works" >&5 +$as_echo_n "checking whether frexpl works... " >&6; } +if ${gl_cv_func_frexpl_works+:} false; then : $as_echo_n "(cached) " >&6 else - rm -f conftest.sym conftest.file - echo >conftest.file - if test "$cross_compiling" = yes; then : - case "$host_os" in - *-gnu*) - # Guess yes on glibc systems. - gl_cv_func_lstat_dereferences_slashed_symlink="guessing yes" ;; - *) - # If we don't know, assume the worst. - gl_cv_func_lstat_dereferences_slashed_symlink="guessing no" ;; - esac + + if test "$cross_compiling" = yes; then : + + case "$host_os" in + aix | aix[3-6]* | beos* | darwin* | irix* | mingw* | pw*) + gl_cv_func_frexpl_works="guessing no";; + *) gl_cv_func_frexpl_works="guessing yes";; + esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$ac_includes_default -int -main () -{ -struct stat sbuf; - if (symlink ("conftest.file", "conftest.sym") != 0) - return 1; - /* Linux will dereference the symlink and fail, as required by - POSIX. That is better in the sense that it means we will not - have to compile and use the lstat wrapper. */ - return lstat ("conftest.sym/", &sbuf) == 0; - ; - return 0; +#include <float.h> +#include <math.h> +/* Override the values of <float.h>, like done in float.in.h. */ +#if defined __i386__ && (defined __BEOS__ || defined __OpenBSD__) +# undef LDBL_MIN_EXP +# define LDBL_MIN_EXP (-16381) +#endif +#if defined __i386__ && (defined __FreeBSD__ || defined __DragonFly__) +# undef LDBL_MIN_EXP +# define LDBL_MIN_EXP (-16381) +#endif +#if (defined _ARCH_PPC || defined _POWER) && defined _AIX && (LDBL_MANT_DIG == 106) && defined __GNUC__ +# undef LDBL_MIN_EXP +# define LDBL_MIN_EXP DBL_MIN_EXP +#endif +#if defined __sgi && (LDBL_MANT_DIG >= 106) +# if defined __GNUC__ +# undef LDBL_MIN_EXP +# define LDBL_MIN_EXP DBL_MIN_EXP +# endif +#endif +extern +#ifdef __cplusplus +"C" +#endif +long double frexpl (long double, int *); +int main() +{ + int result = 0; + volatile long double x; + /* Test on finite numbers that fails on AIX 5.1. */ + x = 16.0L; + { + int exp = -9999; + frexpl (x, &exp); + if (exp != 5) + result |= 1; + } + /* Test on finite numbers that fails on Mac OS X 10.4, because its frexpl + function returns an invalid (incorrectly normalized) value: it returns + y = { 0x3fe028f5, 0xc28f5c28, 0x3c9eb851, 0xeb851eb8 } + but the correct result is + 0.505L = { 0x3fe028f5, 0xc28f5c29, 0xbc547ae1, 0x47ae1480 } */ + x = 1.01L; + { + int exp = -9999; + long double y = frexpl (x, &exp); + if (!(exp == 1 && y == 0.505L)) + result |= 2; + } + /* Test on large finite numbers. This fails on BeOS at i = 16322, while + LDBL_MAX_EXP = 16384. + In the loop end test, we test x against Infinity, rather than comparing + i with LDBL_MAX_EXP, because BeOS <float.h> has a wrong LDBL_MAX_EXP. */ + { + int i; + for (i = 1, x = 1.0L; x != x + x; i++, x *= 2.0L) + { + int exp = -9999; + frexpl (x, &exp); + if (exp != i) + { + result |= 4; + break; + } + } + } + /* Test on denormalized numbers. */ + { + int i; + for (i = 1, x = 1.0L; i >= LDBL_MIN_EXP; i--, x *= 0.5L) + ; + if (x > 0.0L) + { + int exp; + long double y = frexpl (x, &exp); + /* On machines with IEEE854 arithmetic: x = 1.68105e-4932, + exp = -16382, y = 0.5. On Mac OS X 10.5: exp = -16384, y = 0.5. */ + if (exp != LDBL_MIN_EXP - 1) + result |= 8; + } + } + /* Test on infinite numbers. */ + x = 1.0L / 0.0L; + { + int exp; + long double y = frexpl (x, &exp); + if (y != x) + result |= 16; + } + return result; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : - gl_cv_func_lstat_dereferences_slashed_symlink=yes + gl_cv_func_frexpl_works=yes else - gl_cv_func_lstat_dereferences_slashed_symlink=no + gl_cv_func_frexpl_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi - rm -f conftest.sym conftest.file fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_lstat_dereferences_slashed_symlink" >&5 -$as_echo "$gl_cv_func_lstat_dereferences_slashed_symlink" >&6; } - case "$gl_cv_func_lstat_dereferences_slashed_symlink" in - *yes) - -cat >>confdefs.h <<_ACEOF -#define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 -_ACEOF - - ;; - esac - - - - - +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_frexpl_works" >&5 +$as_echo "$gl_cv_func_frexpl_works" >&6; } + LIBS="$save_LIBS" + case "$gl_cv_func_frexpl_works" in + *yes) gl_func_frexpl=yes ;; + *) gl_func_frexpl=no; REPLACE_FREXPL=1 ;; + esac + else + gl_func_frexpl=no + fi + if test $gl_func_frexpl = yes; then +$as_echo "#define HAVE_FREXPL 1" >>confdefs.h - : + fi + fi + if test $HAVE_DECL_FREXPL = 0 || test $gl_func_frexpl = no; then + if test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1; then + FREXPL_LIBM="$FREXP_LIBM" + else + FREXPL_LIBM= + fi + fi + GNULIB_FCHMODAT=0; + GNULIB_FSTAT=0; + GNULIB_FSTATAT=0; + GNULIB_FUTIMENS=0; + GNULIB_LCHMOD=0; + GNULIB_LSTAT=0; + GNULIB_MKDIRAT=0; + GNULIB_MKFIFO=0; + GNULIB_MKFIFOAT=0; + GNULIB_MKNOD=0; + GNULIB_MKNODAT=0; + GNULIB_STAT=0; + GNULIB_UTIMENSAT=0; + GNULIB_OVERRIDES_STRUCT_STAT=0; + HAVE_FCHMODAT=1; + HAVE_FSTATAT=1; + HAVE_FUTIMENS=1; + HAVE_LCHMOD=1; + HAVE_LSTAT=1; + HAVE_MKDIRAT=1; + HAVE_MKFIFO=1; + HAVE_MKFIFOAT=1; + HAVE_MKNOD=1; + HAVE_MKNODAT=1; + HAVE_UTIMENSAT=1; + REPLACE_FCHMODAT=0; + REPLACE_FSTAT=0; + REPLACE_FSTATAT=0; + REPLACE_FUTIMENS=0; + REPLACE_LSTAT=0; + REPLACE_MKDIR=0; + REPLACE_MKFIFO=0; + REPLACE_MKNOD=0; + REPLACE_STAT=0; + REPLACE_UTIMENSAT=0; - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether getcwd (NULL, 0) allocates memory for result" >&5 -$as_echo_n "checking whether getcwd (NULL, 0) allocates memory for result... " >&6; } -if ${gl_cv_func_getcwd_null+:} false; then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stat file-mode macros are broken" >&5 +$as_echo_n "checking whether stat file-mode macros are broken... " >&6; } +if ${ac_cv_header_stat_broken+:} false; then : $as_echo_n "(cached) " >&6 else - if test "$cross_compiling" = yes; then : - case "$host_os" in - # Guess yes on glibc systems. - *-gnu*) gl_cv_func_getcwd_null="guessing yes";; - # Guess yes on Cygwin. - cygwin*) gl_cv_func_getcwd_null="guessing yes";; - # If we don't know, assume the worst. - *) gl_cv_func_getcwd_null="guessing no";; - esac - -else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ +#include <sys/types.h> +#include <sys/stat.h> -# include <stdlib.h> -# if HAVE_UNISTD_H -# include <unistd.h> -# else /* on Windows with MSVC */ -# include <direct.h> -# endif -# ifndef getcwd - char *getcwd (); -# endif +#if defined S_ISBLK && defined S_IFDIR +extern char c1[S_ISBLK (S_IFDIR) ? -1 : 1]; +#endif -int -main () -{ +#if defined S_ISBLK && defined S_IFCHR +extern char c2[S_ISBLK (S_IFCHR) ? -1 : 1]; +#endif -#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ -/* mingw cwd does not start with '/', but getcwd does allocate. - However, mingw fails to honor non-zero size. */ -#else - if (chdir ("/") != 0) - return 1; - else - { - char *f = getcwd (NULL, 0); - if (! f) - return 2; - if (f[0] != '/') - return 3; - if (f[1] != '\0') - return 4; - free (f); - return 0; - } +#if defined S_ISLNK && defined S_IFREG +extern char c3[S_ISLNK (S_IFREG) ? -1 : 1]; +#endif + +#if defined S_ISSOCK && defined S_IFREG +extern char c4[S_ISSOCK (S_IFREG) ? -1 : 1]; #endif - ; - return 0; -} _ACEOF -if ac_fn_c_try_run "$LINENO"; then : - gl_cv_func_getcwd_null=yes +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stat_broken=no else - gl_cv_func_getcwd_null=no + ac_cv_header_stat_broken=yes fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stat_broken" >&5 +$as_echo "$ac_cv_header_stat_broken" >&6; } +if test $ac_cv_header_stat_broken = yes; then + +$as_echo "#define STAT_MACROS_BROKEN 1" >>confdefs.h fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_getcwd_null" >&5 -$as_echo "$gl_cv_func_getcwd_null" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for getcwd with POSIX signature" >&5 -$as_echo_n "checking for getcwd with POSIX signature... " >&6; } -if ${gl_cv_func_getcwd_posix_signature+:} false; then : + + + + case "$host_os" in + mingw*) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit off_t" >&5 +$as_echo_n "checking for 64-bit off_t... " >&6; } +if ${gl_cv_type_off_t_64+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include <unistd.h> +#include <sys/types.h> + int verify_off_t_size[sizeof (off_t) >= 8 ? 1 : -1]; + int main () { -extern - #ifdef __cplusplus - "C" - #endif - char *getcwd (char *, size_t); ; return 0; } - _ACEOF if ac_fn_c_try_compile "$LINENO"; then : - gl_cv_func_getcwd_posix_signature=yes + gl_cv_type_off_t_64=yes else - gl_cv_func_getcwd_posix_signature=no + gl_cv_type_off_t_64=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_getcwd_posix_signature" >&5 -$as_echo "$gl_cv_func_getcwd_posix_signature" >&6; } - - - ac_fn_c_check_decl "$LINENO" "getcwd" "ac_cv_have_decl_getcwd" "$ac_includes_default" -if test "x$ac_cv_have_decl_getcwd" = xyes; then : - ac_have_decl=1 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_type_off_t_64" >&5 +$as_echo "$gl_cv_type_off_t_64" >&6; } + if test $gl_cv_type_off_t_64 = no; then + WINDOWS_64_BIT_OFF_T=1 + else + WINDOWS_64_BIT_OFF_T=0 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit st_size" >&5 +$as_echo_n "checking for 64-bit st_size... " >&6; } +if ${gl_cv_member_st_size_64+:} false; then : + $as_echo_n "(cached) " >&6 else - ac_have_decl=0 -fi - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_GETCWD $ac_have_decl -_ACEOF - - - - - - - + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> + struct stat buf; + int verify_st_size_size[sizeof (buf.st_size) >= 8 ? 1 : -1]; - ac_fn_c_check_decl "$LINENO" "getdtablesize" "ac_cv_have_decl_getdtablesize" "$ac_includes_default" -if test "x$ac_cv_have_decl_getdtablesize" = xyes; then : - ac_have_decl=1 -else - ac_have_decl=0 -fi +int +main () +{ -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_GETDTABLESIZE $ac_have_decl + ; + return 0; +} _ACEOF - - - - ac_fn_c_check_decl "$LINENO" "getlogin_r" "ac_cv_have_decl_getlogin_r" "$ac_includes_default" -if test "x$ac_cv_have_decl_getlogin_r" = xyes; then : - ac_have_decl=1 +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_member_st_size_64=yes else - ac_have_decl=0 + gl_cv_member_st_size_64=no fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_GETLOGIN_R $ac_have_decl -_ACEOF - - - - - - - - - ac_fn_c_check_decl "$LINENO" "getlogin" "ac_cv_have_decl_getlogin" "$ac_includes_default" -if test "x$ac_cv_have_decl_getlogin" = xyes; then : - ac_have_decl=1 -else - ac_have_decl=0 fi - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_GETLOGIN $ac_have_decl -_ACEOF - - - - - - - - - - - +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_member_st_size_64" >&5 +$as_echo "$gl_cv_member_st_size_64" >&6; } + if test $gl_cv_member_st_size_64 = no; then + WINDOWS_64_BIT_ST_SIZE=1 + else + WINDOWS_64_BIT_ST_SIZE=0 + fi + ;; + *) + WINDOWS_64_BIT_OFF_T=0 + WINDOWS_64_BIT_ST_SIZE=0 + ;; + esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C/C++ restrict keyword" >&5 $as_echo_n "checking for C/C++ restrict keyword... " >&6; } @@ -9646,17 +9955,17 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ typedef int *int_ptr; - int foo (int_ptr $ac_kw ip) { return ip[0]; } - int bar (int [$ac_kw]); /* Catch GCC bug 14050. */ - int bar (int ip[$ac_kw]) { return ip[0]; } + int foo (int_ptr $ac_kw ip) { return ip[0]; } + int bar (int [$ac_kw]); /* Catch GCC bug 14050. */ + int bar (int ip[$ac_kw]) { return ip[0]; } int main () { int s[1]; - int *$ac_kw t = s; - t[0] = 0; - return foo (t) + bar (t); + int *$ac_kw t = s; + t[0] = 0; + return foo (t) + bar (t); ; return 0; @@ -9684,16 +9993,6 @@ esac - GNULIB_GETTIMEOFDAY=0; - HAVE_GETTIMEOFDAY=1; - HAVE_STRUCT_TIMEVAL=1; - HAVE_SYS_TIME_H=1; - HAVE_TIMEZONE_T=0; - REPLACE_GETTIMEOFDAY=0; - REPLACE_STRUCT_TIMEVAL=0; - - - @@ -9701,44 +10000,29 @@ - : + if test $gl_cv_have_include_next = yes; then + gl_cv_next_sys_stat_h='<'sys/stat.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <sys/stat.h>" >&5 +$as_echo_n "checking absolute name of <sys/stat.h>... " >&6; } +if ${gl_cv_next_sys_stat_h+:} false; then : + $as_echo_n "(cached) " >&6 +else - - - - - : - - - - - - - - - if test $gl_cv_have_include_next = yes; then - gl_cv_next_sys_time_h='<'sys/time.h'>' - else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <sys/time.h>" >&5 -$as_echo_n "checking absolute name of <sys/time.h>... " >&6; } -if ${gl_cv_next_sys_time_h+:} false; then : - $as_echo_n "(cached) " >&6 -else - - if test $ac_cv_header_sys_time_h = yes; then + if test $ac_cv_header_sys_stat_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include <sys/time.h> +#include <sys/stat.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; @@ -9754,7 +10038,7 @@ ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' - gl_header_literal_regex=`echo 'sys/time.h' \ + gl_header_literal_regex=`echo 'sys/stat.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ @@ -9763,347 +10047,337 @@ q }' - gl_cv_absolute_sys_time_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + gl_cv_absolute_sys_stat_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` - gl_header=$gl_cv_absolute_sys_time_h - gl_cv_next_sys_time_h='"'$gl_header'"' + gl_header=$gl_cv_absolute_sys_stat_h + gl_cv_next_sys_stat_h='"'$gl_header'"' else - gl_cv_next_sys_time_h='<'sys/time.h'>' + gl_cv_next_sys_stat_h='<'sys/stat.h'>' fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sys_time_h" >&5 -$as_echo "$gl_cv_next_sys_time_h" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sys_stat_h" >&5 +$as_echo "$gl_cv_next_sys_stat_h" >&6; } fi - NEXT_SYS_TIME_H=$gl_cv_next_sys_time_h + NEXT_SYS_STAT_H=$gl_cv_next_sys_stat_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' - gl_next_as_first_directive='<'sys/time.h'>' + gl_next_as_first_directive='<'sys/stat.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' - gl_next_as_first_directive=$gl_cv_next_sys_time_h + gl_next_as_first_directive=$gl_cv_next_sys_stat_h fi - NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H=$gl_next_as_first_directive + NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H=$gl_next_as_first_directive - if test $ac_cv_header_sys_time_h != yes; then - HAVE_SYS_TIME_H=0 - fi + WINDOWS_STAT_TIMESPEC=0 - : - if test $ac_cv_header_sys_socket_h != yes; then - for ac_header in winsock2.h + + ac_fn_c_check_type "$LINENO" "nlink_t" "ac_cv_type_nlink_t" "#include <sys/types.h> + #include <sys/stat.h> +" +if test "x$ac_cv_type_nlink_t" = xyes; then : + +else + +$as_echo "#define nlink_t int" >>confdefs.h + +fi + + + + + + + + + + + case "$host_os" in + mingw*) + for ac_header in sdkddkver.h do : - ac_fn_c_check_header_mongrel "$LINENO" "winsock2.h" "ac_cv_header_winsock2_h" "$ac_includes_default" -if test "x$ac_cv_header_winsock2_h" = xyes; then : + ac_fn_c_check_header_mongrel "$LINENO" "sdkddkver.h" "ac_cv_header_sdkddkver_h" "$ac_includes_default" +if test "x$ac_cv_header_sdkddkver_h" = xyes; then : cat >>confdefs.h <<_ACEOF -#define HAVE_WINSOCK2_H 1 +#define HAVE_SDKDDKVER_H 1 _ACEOF fi done - fi - if test "$ac_cv_header_winsock2_h" = yes; then - HAVE_WINSOCK2_H=1 - UNISTD_H_HAVE_WINSOCK2_H=1 - SYS_IOCTL_H_HAVE_WINSOCK2_H=1 - else - HAVE_WINSOCK2_H=0 - fi + ;; + esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct timeval" >&5 -$as_echo_n "checking for struct timeval... " >&6; } -if ${gl_cv_sys_struct_timeval+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether lstat correctly handles trailing slash" >&5 +$as_echo_n "checking whether lstat correctly handles trailing slash... " >&6; } +if ${gl_cv_func_lstat_dereferences_slashed_symlink+:} false; then : $as_echo_n "(cached) " >&6 else + rm -f conftest.sym conftest.file + echo >conftest.file + if test "$cross_compiling" = yes; then : + case "$host_os" in + linux-* | linux) + # Guess yes on Linux systems. + gl_cv_func_lstat_dereferences_slashed_symlink="guessing yes" ;; + *-gnu* | gnu*) + # Guess yes on glibc systems. + gl_cv_func_lstat_dereferences_slashed_symlink="guessing yes" ;; + mingw*) + # Guess no on native Windows. + gl_cv_func_lstat_dereferences_slashed_symlink="guessing no" ;; + *) + # If we don't know, obey --enable-cross-guesses. + gl_cv_func_lstat_dereferences_slashed_symlink="$gl_cross_guess_normal" ;; + esac + +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#if HAVE_SYS_TIME_H - #include <sys/time.h> - #endif - #include <time.h> - #if HAVE_WINSOCK2_H - # include <winsock2.h> - #endif - +$ac_includes_default int main () { -static struct timeval x; x.tv_sec = x.tv_usec; +struct stat sbuf; + if (symlink ("conftest.file", "conftest.sym") != 0) + return 1; + /* Linux will dereference the symlink and fail, as required by + POSIX. That is better in the sense that it means we will not + have to compile and use the lstat wrapper. */ + return lstat ("conftest.sym/", &sbuf) == 0; + ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - gl_cv_sys_struct_timeval=yes +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_lstat_dereferences_slashed_symlink=yes else - gl_cv_sys_struct_timeval=no + gl_cv_func_lstat_dereferences_slashed_symlink=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + rm -f conftest.sym conftest.file fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_sys_struct_timeval" >&5 -$as_echo "$gl_cv_sys_struct_timeval" >&6; } - if test $gl_cv_sys_struct_timeval != yes; then - HAVE_STRUCT_TIMEVAL=0 - else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wide-enough struct timeval.tv_sec member" >&5 -$as_echo_n "checking for wide-enough struct timeval.tv_sec member... " >&6; } -if ${gl_cv_sys_struct_timeval_tv_sec+:} false; then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_lstat_dereferences_slashed_symlink" >&5 +$as_echo "$gl_cv_func_lstat_dereferences_slashed_symlink" >&6; } + case "$gl_cv_func_lstat_dereferences_slashed_symlink" in + *yes) + +cat >>confdefs.h <<_ACEOF +#define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +_ACEOF + + ;; + esac + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether getcwd (NULL, 0) allocates memory for result" >&5 +$as_echo_n "checking whether getcwd (NULL, 0) allocates memory for result... " >&6; } +if ${gl_cv_func_getcwd_null+:} false; then : $as_echo_n "(cached) " >&6 else + if test "$cross_compiling" = yes; then : + case "$host_os" in + # Guess yes on glibc systems. + *-gnu* | gnu*) gl_cv_func_getcwd_null="guessing yes";; + # Guess yes on musl systems. + *-musl*) gl_cv_func_getcwd_null="guessing yes";; + # Guess yes on Cygwin. + cygwin*) gl_cv_func_getcwd_null="guessing yes";; + # If we don't know, obey --enable-cross-guesses. + *) gl_cv_func_getcwd_null="$gl_cross_guess_normal";; + esac + +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#if HAVE_SYS_TIME_H - #include <sys/time.h> - #endif - #include <time.h> - #if HAVE_WINSOCK2_H - # include <winsock2.h> - #endif + +# include <stdlib.h> +# if HAVE_UNISTD_H +# include <unistd.h> +# else /* on Windows with MSVC */ +# include <direct.h> +# endif +# ifndef getcwd + char *getcwd (); +# endif int main () { -static struct timeval x; - typedef int verify_tv_sec_type[ - sizeof (time_t) <= sizeof x.tv_sec ? 1 : -1 - ]; + +#if defined _WIN32 && ! defined __CYGWIN__ +/* mingw cwd does not start with '/', but getcwd does allocate. + However, mingw fails to honor non-zero size. */ +#else + if (chdir ("/") != 0) + return 1; + else + { + char *f = getcwd (NULL, 0); + if (! f) + return 2; + if (f[0] != '/') + { free (f); return 3; } + if (f[1] != '\0') + { free (f); return 4; } + free (f); + return 0; + } +#endif ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - gl_cv_sys_struct_timeval_tv_sec=yes +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_getcwd_null=yes else - gl_cv_sys_struct_timeval_tv_sec=no + gl_cv_func_getcwd_null=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_sys_struct_timeval_tv_sec" >&5 -$as_echo "$gl_cv_sys_struct_timeval_tv_sec" >&6; } - if test $gl_cv_sys_struct_timeval_tv_sec != yes; then - REPLACE_STRUCT_TIMEVAL=1 - fi - fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_getcwd_null" >&5 +$as_echo "$gl_cv_func_getcwd_null" >&6; } - for gl_func in gettimeofday; do - as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh` - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5 -$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; } -if eval \${$as_gl_Symbol+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for getcwd with POSIX signature" >&5 +$as_echo_n "checking for getcwd with POSIX signature... " >&6; } +if ${gl_cv_func_getcwd_posix_signature+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ - -#if HAVE_SYS_TIME_H -# include <sys/time.h> -#endif -#include <time.h> - +#include <unistd.h> int main () { -#undef $gl_func - (void) $gl_func; +extern + #ifdef __cplusplus + "C" + #endif + char *getcwd (char *, size_t); + ; return 0; } + _ACEOF if ac_fn_c_try_compile "$LINENO"; then : - eval "$as_gl_Symbol=yes" + gl_cv_func_getcwd_posix_signature=yes else - eval "$as_gl_Symbol=no" + gl_cv_func_getcwd_posix_signature=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$as_gl_Symbol - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - if eval test \"x\$"$as_gl_Symbol"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1 -_ACEOF - eval ac_cv_have_decl_$gl_func=yes fi - done - +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_getcwd_posix_signature" >&5 +$as_echo "$gl_cv_func_getcwd_posix_signature" >&6; } +ac_fn_c_check_decl "$LINENO" "getcwd" "ac_cv_have_decl_getcwd" "$ac_includes_default" +if test "x$ac_cv_have_decl_getcwd" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_GETCWD $ac_have_decl +_ACEOF +ac_fn_c_check_decl "$LINENO" "getdtablesize" "ac_cv_have_decl_getdtablesize" "$ac_includes_default" +if test "x$ac_cv_have_decl_getdtablesize" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_GETDTABLESIZE $ac_have_decl +_ACEOF +ac_fn_c_check_decl "$LINENO" "getlogin_r" "ac_cv_have_decl_getlogin_r" "$ac_includes_default" +if test "x$ac_cv_have_decl_getlogin_r" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi - - - - - - - - - - - - - - - - - - GNULIB_SOCKET=0; - GNULIB_CONNECT=0; - GNULIB_ACCEPT=0; - GNULIB_BIND=0; - GNULIB_GETPEERNAME=0; - GNULIB_GETSOCKNAME=0; - GNULIB_GETSOCKOPT=0; - GNULIB_LISTEN=0; - GNULIB_RECV=0; - GNULIB_SEND=0; - GNULIB_RECVFROM=0; - GNULIB_SENDTO=0; - GNULIB_SETSOCKOPT=0; - GNULIB_SHUTDOWN=0; - GNULIB_ACCEPT4=0; - HAVE_STRUCT_SOCKADDR_STORAGE=1; - HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY=1; - - HAVE_SA_FAMILY_T=1; - HAVE_ACCEPT4=1; - - - : - - - - - - if test $ac_cv_header_sys_socket_h = no; then - for ac_header in ws2tcpip.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "ws2tcpip.h" "ac_cv_header_ws2tcpip_h" "$ac_includes_default" -if test "x$ac_cv_header_ws2tcpip_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_WS2TCPIP_H 1 +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_GETLOGIN_R $ac_have_decl _ACEOF -fi -done - fi +ac_fn_c_check_decl "$LINENO" "getlogin" "ac_cv_have_decl_getlogin" "$ac_includes_default" +if test "x$ac_cv_have_decl_getlogin" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_GETLOGIN $ac_have_decl +_ACEOF + case $host_os in + mingw*) + LIB_GETLOGIN='-ladvapi32' ;; + *) + LIB_GETLOGIN= ;; + esac - case "$host_os" in - osf*) -$as_echo "#define _POSIX_PII_SOCKET 1" >>confdefs.h - ;; - esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether <sys/socket.h> is self-contained" >&5 -$as_echo_n "checking whether <sys/socket.h> is self-contained... " >&6; } -if ${gl_cv_header_sys_socket_h_selfcontained+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <sys/socket.h> -int -main () -{ - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - gl_cv_header_sys_socket_h_selfcontained=yes -else - gl_cv_header_sys_socket_h_selfcontained=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_sys_socket_h_selfcontained" >&5 -$as_echo "$gl_cv_header_sys_socket_h_selfcontained" >&6; } - if test $gl_cv_header_sys_socket_h_selfcontained = yes; then - for ac_func in shutdown -do : - ac_fn_c_check_func "$LINENO" "shutdown" "ac_cv_func_shutdown" -if test "x$ac_cv_func_shutdown" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_SHUTDOWN 1 -_ACEOF + GNULIB_GETRANDOM=0; + HAVE_GETRANDOM=1; + REPLACE_GETRANDOM=0; -fi -done - if test $ac_cv_func_shutdown = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether <sys/socket.h> defines the SHUT_* macros" >&5 -$as_echo_n "checking whether <sys/socket.h> defines the SHUT_* macros... " >&6; } -if ${gl_cv_header_sys_socket_h_shut+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <sys/socket.h> -int -main () -{ -int a[] = { SHUT_RD, SHUT_WR, SHUT_RDWR }; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - gl_cv_header_sys_socket_h_shut=yes -else - gl_cv_header_sys_socket_h_shut=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_sys_socket_h_shut" >&5 -$as_echo "$gl_cv_header_sys_socket_h_shut" >&6; } - if test $gl_cv_header_sys_socket_h_shut = no; then - SYS_SOCKET_H='sys/socket.h' - fi - fi - fi - # We need to check for ws2tcpip.h now. + GNULIB_GETTIMEOFDAY=0; + HAVE_GETTIMEOFDAY=1; + HAVE_STRUCT_TIMEVAL=1; + HAVE_SYS_TIME_H=1; + REPLACE_GETTIMEOFDAY=0; + REPLACE_STRUCT_TIMEVAL=0; @@ -10112,7 +10386,6 @@ - : @@ -10122,22 +10395,22 @@ if test $gl_cv_have_include_next = yes; then - gl_cv_next_sys_socket_h='<'sys/socket.h'>' + gl_cv_next_sys_time_h='<'sys/time.h'>' else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <sys/socket.h>" >&5 -$as_echo_n "checking absolute name of <sys/socket.h>... " >&6; } -if ${gl_cv_next_sys_socket_h+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <sys/time.h>" >&5 +$as_echo_n "checking absolute name of <sys/time.h>... " >&6; } +if ${gl_cv_next_sys_time_h+:} false; then : $as_echo_n "(cached) " >&6 else - if test $ac_cv_header_sys_socket_h = yes; then + if test $ac_cv_header_sys_time_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include <sys/socket.h> +#include <sys/time.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; @@ -10153,7 +10426,7 @@ ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' - gl_header_literal_regex=`echo 'sys/socket.h' \ + gl_header_literal_regex=`echo 'sys/time.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ @@ -10162,145 +10435,55 @@ q }' - gl_cv_absolute_sys_socket_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + gl_cv_absolute_sys_time_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` - gl_header=$gl_cv_absolute_sys_socket_h - gl_cv_next_sys_socket_h='"'$gl_header'"' + gl_header=$gl_cv_absolute_sys_time_h + gl_cv_next_sys_time_h='"'$gl_header'"' else - gl_cv_next_sys_socket_h='<'sys/socket.h'>' + gl_cv_next_sys_time_h='<'sys/time.h'>' fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sys_socket_h" >&5 -$as_echo "$gl_cv_next_sys_socket_h" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sys_time_h" >&5 +$as_echo "$gl_cv_next_sys_time_h" >&6; } fi - NEXT_SYS_SOCKET_H=$gl_cv_next_sys_socket_h + NEXT_SYS_TIME_H=$gl_cv_next_sys_time_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' - gl_next_as_first_directive='<'sys/socket.h'>' + gl_next_as_first_directive='<'sys/time.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' - gl_next_as_first_directive=$gl_cv_next_sys_socket_h + gl_next_as_first_directive=$gl_cv_next_sys_time_h fi - NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H=$gl_next_as_first_directive + NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H=$gl_next_as_first_directive - if test $ac_cv_header_sys_socket_h = yes; then - HAVE_SYS_SOCKET_H=1 - HAVE_WS2TCPIP_H=0 - else - HAVE_SYS_SOCKET_H=0 - if test $ac_cv_header_ws2tcpip_h = yes; then - HAVE_WS2TCPIP_H=1 - else - HAVE_WS2TCPIP_H=0 - fi + + if test $ac_cv_header_sys_time_h != yes; then + HAVE_SYS_TIME_H=0 fi - ac_fn_c_check_type "$LINENO" "struct sockaddr_storage" "ac_cv_type_struct_sockaddr_storage" " - /* sys/types.h is not needed according to POSIX, but the - sys/socket.h in i386-unknown-freebsd4.10 and - powerpc-apple-darwin5.5 required it. */ -#include <sys/types.h> -#ifdef HAVE_SYS_SOCKET_H -#include <sys/socket.h> -#endif -#ifdef HAVE_WS2TCPIP_H -#include <ws2tcpip.h> -#endif -" -if test "x$ac_cv_type_struct_sockaddr_storage" = xyes; then : -cat >>confdefs.h <<_ACEOF -#define HAVE_STRUCT_SOCKADDR_STORAGE 1 + if test $ac_cv_header_sys_socket_h != yes; then + for ac_header in winsock2.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "winsock2.h" "ac_cv_header_winsock2_h" "$ac_includes_default" +if test "x$ac_cv_header_winsock2_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_WINSOCK2_H 1 _ACEOF - fi -ac_fn_c_check_type "$LINENO" "sa_family_t" "ac_cv_type_sa_family_t" " - /* sys/types.h is not needed according to POSIX, but the - sys/socket.h in i386-unknown-freebsd4.10 and - powerpc-apple-darwin5.5 required it. */ -#include <sys/types.h> -#ifdef HAVE_SYS_SOCKET_H -#include <sys/socket.h> -#endif -#ifdef HAVE_WS2TCPIP_H -#include <ws2tcpip.h> -#endif - -" -if test "x$ac_cv_type_sa_family_t" = xyes; then : - -cat >>confdefs.h <<_ACEOF -#define HAVE_SA_FAMILY_T 1 -_ACEOF - -fi - - if test $ac_cv_type_struct_sockaddr_storage = no; then - HAVE_STRUCT_SOCKADDR_STORAGE=0 - fi - if test $ac_cv_type_sa_family_t = no; then - HAVE_SA_FAMILY_T=0 - fi - if test $ac_cv_type_struct_sockaddr_storage != no; then - ac_fn_c_check_member "$LINENO" "struct sockaddr_storage" "ss_family" "ac_cv_member_struct_sockaddr_storage_ss_family" "#include <sys/types.h> - #ifdef HAVE_SYS_SOCKET_H - #include <sys/socket.h> - #endif - #ifdef HAVE_WS2TCPIP_H - #include <ws2tcpip.h> - #endif - -" -if test "x$ac_cv_member_struct_sockaddr_storage_ss_family" = xyes; then : - -cat >>confdefs.h <<_ACEOF -#define HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY 1 -_ACEOF - - -else - HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY=0 -fi - - fi - if test $HAVE_STRUCT_SOCKADDR_STORAGE = 0 || test $HAVE_SA_FAMILY_T = 0 \ - || test $HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = 0; then - SYS_SOCKET_H='sys/socket.h' - fi - - - - - : - - - - - - if test $ac_cv_header_sys_socket_h != yes; then - for ac_header in winsock2.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "winsock2.h" "ac_cv_header_winsock2_h" "$ac_includes_default" -if test "x$ac_cv_header_winsock2_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_WINSOCK2_H 1 -_ACEOF - -fi - -done +done fi if test "$ac_cv_header_winsock2_h" = yes; then @@ -10312,156 +10495,131 @@ fi - - - for gl_func in socket connect accept bind getpeername getsockname getsockopt listen recv send recvfrom sendto setsockopt shutdown accept4; do - as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh` - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5 -$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; } -if eval \${$as_gl_Symbol+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct timeval" >&5 +$as_echo_n "checking for struct timeval... " >&6; } +if ${gl_cv_sys_struct_timeval+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ - -/* Some systems require prerequisite headers. */ -#include <sys/types.h> -#include <sys/socket.h> +#if HAVE_SYS_TIME_H + #include <sys/time.h> + #endif + #include <time.h> + #if HAVE_WINSOCK2_H + # include <winsock2.h> + #endif int main () { -#undef $gl_func - (void) $gl_func; +static struct timeval x; x.tv_sec = x.tv_usec; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : - eval "$as_gl_Symbol=yes" + gl_cv_sys_struct_timeval=yes else - eval "$as_gl_Symbol=no" + gl_cv_sys_struct_timeval=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$as_gl_Symbol - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - if eval test \"x\$"$as_gl_Symbol"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1 -_ACEOF - eval ac_cv_have_decl_$gl_func=yes fi - done - - - - - - - - - - - : - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for IPv4 sockets" >&5 -$as_echo_n "checking for IPv4 sockets... " >&6; } - if ${gl_cv_socket_ipv4+:} false; then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_sys_struct_timeval" >&5 +$as_echo "$gl_cv_sys_struct_timeval" >&6; } + if test $gl_cv_sys_struct_timeval != yes; then + HAVE_STRUCT_TIMEVAL=0 + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wide-enough struct timeval.tv_sec member" >&5 +$as_echo_n "checking for wide-enough struct timeval.tv_sec member... " >&6; } +if ${gl_cv_sys_struct_timeval_tv_sec+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include <sys/types.h> -#ifdef HAVE_SYS_SOCKET_H -#include <sys/socket.h> -#endif -#ifdef HAVE_NETINET_IN_H -#include <netinet/in.h> -#endif -#ifdef HAVE_WINSOCK2_H -#include <winsock2.h> -#endif +#if HAVE_SYS_TIME_H + #include <sys/time.h> + #endif + #include <time.h> + #if HAVE_WINSOCK2_H + # include <winsock2.h> + #endif + int main () { -int x = AF_INET; struct in_addr y; struct sockaddr_in z; - if (&x && &y && &z) return 0; +static struct timeval x; + typedef int verify_tv_sec_type[ + sizeof (time_t) <= sizeof x.tv_sec ? 1 : -1 + ]; + ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : - gl_cv_socket_ipv4=yes + gl_cv_sys_struct_timeval_tv_sec=yes else - gl_cv_socket_ipv4=no + gl_cv_sys_struct_timeval_tv_sec=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_sys_struct_timeval_tv_sec" >&5 +$as_echo "$gl_cv_sys_struct_timeval_tv_sec" >&6; } + if test $gl_cv_sys_struct_timeval_tv_sec != yes; then + REPLACE_STRUCT_TIMEVAL=1 + fi + fi + - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_socket_ipv4" >&5 -$as_echo "$gl_cv_socket_ipv4" >&6; } - if test $gl_cv_socket_ipv4 = yes; then -$as_echo "#define HAVE_IPV4 1" >>confdefs.h - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for IPv6 sockets" >&5 -$as_echo_n "checking for IPv6 sockets... " >&6; } - if ${gl_cv_socket_ipv6+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <sys/types.h> -#ifdef HAVE_SYS_SOCKET_H -#include <sys/socket.h> -#endif -#ifdef HAVE_NETINET_IN_H -#include <netinet/in.h> -#endif -#ifdef HAVE_WINSOCK2_H -#include <winsock2.h> -#endif -#ifdef HAVE_WS2TCPIP_H -#include <ws2tcpip.h> -#endif -int -main () -{ -int x = AF_INET6; struct in6_addr y; struct sockaddr_in6 z; - if (&x && &y && &z) return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - gl_cv_socket_ipv6=yes -else - gl_cv_socket_ipv6=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_socket_ipv6" >&5 -$as_echo "$gl_cv_socket_ipv6" >&6; } - if test $gl_cv_socket_ipv6 = yes; then -$as_echo "#define HAVE_IPV6 1" >>confdefs.h - fi + NEED_LOCALTIME_BUFFER=0 + + + GNULIB_CTIME=0; + GNULIB_MKTIME=0; + GNULIB_LOCALTIME=0; + GNULIB_NANOSLEEP=0; + GNULIB_STRFTIME=0; + GNULIB_STRPTIME=0; + GNULIB_TIMEGM=0; + GNULIB_TIME_R=0; + GNULIB_TIME_RZ=0; + GNULIB_TZSET=0; + HAVE_DECL_LOCALTIME_R=1; + HAVE_NANOSLEEP=1; + HAVE_STRPTIME=1; + HAVE_TIMEGM=1; + HAVE_TZSET=1; + HAVE_TIMEZONE_T=0; + REPLACE_CTIME=GNULIB_PORTCHECK; + REPLACE_LOCALTIME_R=GNULIB_PORTCHECK; + REPLACE_MKTIME=GNULIB_PORTCHECK; + REPLACE_NANOSLEEP=GNULIB_PORTCHECK; + REPLACE_STRFTIME=GNULIB_PORTCHECK; + REPLACE_TIMEGM=GNULIB_PORTCHECK; + REPLACE_TZSET=GNULIB_PORTCHECK; + + : ${GNULIB_GETTIMEOFDAY=0}; + REPLACE_GMTIME=0; + REPLACE_LOCALTIME=0; + + GNULIB_GLOB=0; + HAVE_GLOB=1; + HAVE_GLOB_PATTERN_P=1; + REPLACE_GLOB=0; + REPLACE_GLOB_PATTERN_P=0; @@ -10471,7 +10629,6 @@ - : @@ -10481,22 +10638,22 @@ if test $gl_cv_have_include_next = yes; then - gl_cv_next_limits_h='<'limits.h'>' + gl_cv_next_glob_h='<'glob.h'>' else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <limits.h>" >&5 -$as_echo_n "checking absolute name of <limits.h>... " >&6; } -if ${gl_cv_next_limits_h+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <glob.h>" >&5 +$as_echo_n "checking absolute name of <glob.h>... " >&6; } +if ${gl_cv_next_glob_h+:} false; then : $as_echo_n "(cached) " >&6 else - if test $ac_cv_header_limits_h = yes; then + if test $ac_cv_header_glob_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include <limits.h> +#include <glob.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; @@ -10512,7 +10669,7 @@ ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' - gl_header_literal_regex=`echo 'limits.h' \ + gl_header_literal_regex=`echo 'glob.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ @@ -10521,302 +10678,706 @@ q }' - gl_cv_absolute_limits_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + gl_cv_absolute_glob_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` - gl_header=$gl_cv_absolute_limits_h - gl_cv_next_limits_h='"'$gl_header'"' + gl_header=$gl_cv_absolute_glob_h + gl_cv_next_glob_h='"'$gl_header'"' else - gl_cv_next_limits_h='<'limits.h'>' + gl_cv_next_glob_h='<'glob.h'>' fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_limits_h" >&5 -$as_echo "$gl_cv_next_limits_h" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_glob_h" >&5 +$as_echo "$gl_cv_next_glob_h" >&6; } fi - NEXT_LIMITS_H=$gl_cv_next_limits_h + NEXT_GLOB_H=$gl_cv_next_glob_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' - gl_next_as_first_directive='<'limits.h'>' + gl_next_as_first_directive='<'glob.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' - gl_next_as_first_directive=$gl_cv_next_limits_h + gl_next_as_first_directive=$gl_cv_next_glob_h fi - NEXT_AS_FIRST_DIRECTIVE_LIMITS_H=$gl_next_as_first_directive - + NEXT_AS_FIRST_DIRECTIVE_GLOB_H=$gl_next_as_first_directive - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether limits.h has ULLONG_WIDTH etc." >&5 -$as_echo_n "checking whether limits.h has ULLONG_WIDTH etc.... " >&6; } -if ${gl_cv_header_limits_width+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifndef __STDC_WANT_IEC_60559_BFP_EXT__ - #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 - #endif - #include <limits.h> - int ullw = ULLONG_WIDTH; -int -main () -{ - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - gl_cv_header_limits_width=yes -else - gl_cv_header_limits_width=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_limits_width" >&5 -$as_echo "$gl_cv_header_limits_width" >&6; } - if test "$gl_cv_header_limits_width" = yes; then - LIMITS_H= + if test $ac_cv_header_glob_h = yes; then + HAVE_GLOB_H=1 else - LIMITS_H=limits.h + HAVE_GLOB_H=0 fi - if test -n "$LIMITS_H"; then - GL_GENERATE_LIMITS_H_TRUE= - GL_GENERATE_LIMITS_H_FALSE='#' -else - GL_GENERATE_LIMITS_H_TRUE='#' - GL_GENERATE_LIMITS_H_FALSE= + + GLOB_H='' + if false; then + GLOB_H=glob.h + else + if test $ac_cv_header_glob_h != yes; then + GLOB_H=glob.h + fi + fi + + + if test -n "$GLOB_H"; then + GL_GENERATE_GLOB_H_TRUE= + GL_GENERATE_GLOB_H_FALSE='#' +else + GL_GENERATE_GLOB_H_TRUE='#' + GL_GENERATE_GLOB_H_FALSE= fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for unsigned long long int" >&5 -$as_echo_n "checking for unsigned long long int... " >&6; } -if ${ac_cv_type_unsigned_long_long_int+:} false; then : - $as_echo_n "(cached) " >&6 + + + + + + + + + + + + + + if test -z "$gl_pthreadlib_body_done"; then + gl_pthread_api=no + LIBPTHREAD= + LIBPMULTITHREAD= + # On OSF/1, the compiler needs the flag -pthread or -D_REENTRANT so that + # it groks <pthread.h>. It's added above, in gl_ANYTHREADLIB_EARLY. + ac_fn_c_check_header_mongrel "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default" +if test "x$ac_cv_header_pthread_h" = xyes; then : + gl_have_pthread_h=yes else - ac_cv_type_unsigned_long_long_int=yes - if test "x${ac_cv_prog_cc_c99-no}" = xno; then - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + gl_have_pthread_h=no +fi + + + if test "$gl_have_pthread_h" = yes; then + # Other possible tests: + # -lpthreads (FSU threads, PCthreads) + # -lgthreads + # Test whether both pthread_mutex_lock and pthread_mutexattr_init exist + # in libc. IRIX 6.5 has the first one in both libc and libpthread, but + # the second one only in libpthread, and lock.c needs it. + # + # If -pthread works, prefer it to -lpthread, since Ubuntu 14.04 + # needs -pthread for some reason. See: + # https://lists.gnu.org/r/bug-gnulib/2014-09/msg00023.html + save_LIBS=$LIBS + for gl_pthread in '' '-pthread'; do + LIBS="$LIBS $gl_pthread" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ +#include <pthread.h> + pthread_mutex_t m; + pthread_mutexattr_t ma; - /* For now, do not test the preprocessor; as of 2007 there are too many - implementations with broken preprocessors. Perhaps this can - be revisited in 2012. In the meantime, code should not expect - #if to work with literals wider than 32 bits. */ - /* Test literals. */ - long long int ll = 9223372036854775807ll; - long long int nll = -9223372036854775807LL; - unsigned long long int ull = 18446744073709551615ULL; - /* Test constant expressions. */ - typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll) - ? 1 : -1)]; - typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1 - ? 1 : -1)]; - int i = 63; int main () { -/* Test availability of runtime routines for shift and division. */ - long long int llmax = 9223372036854775807ll; - unsigned long long int ullmax = 18446744073709551615ull; - return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i) - | (llmax / ll) | (llmax % ll) - | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i) - | (ullmax / ull) | (ullmax % ull)); +pthread_mutex_lock (&m); + pthread_mutexattr_init (&ma); ; return 0; } - _ACEOF if ac_fn_c_try_link "$LINENO"; then : + gl_pthread_api=yes + LIBPTHREAD=$gl_pthread + LIBPMULTITHREAD=$gl_pthread +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LIBS=$save_LIBS + test $gl_pthread_api = yes && break + done + + # Test for libpthread by looking for pthread_kill. (Not pthread_self, + # since it is defined as a macro on OSF/1.) + if test $gl_pthread_api = yes && test -z "$LIBPTHREAD"; then + # The program links fine without libpthread. But it may actually + # need to link with libpthread in order to create multiple threads. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lpthread" >&5 +$as_echo_n "checking for pthread_kill in -lpthread... " >&6; } +if ${ac_cv_lib_pthread_pthread_kill+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lpthread $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char pthread_kill (); +int +main () +{ +return pthread_kill (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_pthread_pthread_kill=yes else - ac_cv_type_unsigned_long_long_int=no + ac_cv_lib_pthread_pthread_kill=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext - fi +LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_unsigned_long_long_int" >&5 -$as_echo "$ac_cv_type_unsigned_long_long_int" >&6; } - if test $ac_cv_type_unsigned_long_long_int = yes; then - -$as_echo "#define HAVE_UNSIGNED_LONG_LONG_INT 1" >>confdefs.h +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_kill" >&5 +$as_echo "$ac_cv_lib_pthread_pthread_kill" >&6; } +if test "x$ac_cv_lib_pthread_pthread_kill" = xyes; then : + LIBPMULTITHREAD=-lpthread + # On Solaris and HP-UX, most pthread functions exist also in libc. + # Therefore pthread_in_use() needs to actually try to create a + # thread: pthread_create from libc will fail, whereas + # pthread_create will actually create a thread. + # On Solaris 10 or newer, this test is no longer needed, because + # libc contains the fully functional pthread functions. + case "$host_os" in + solaris | solaris2.1-9 | solaris2.1-9.* | hpux*) - fi +$as_echo "#define PTHREAD_IN_USE_DETECTION_HARD 1" >>confdefs.h + esac +fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for long long int" >&5 -$as_echo_n "checking for long long int... " >&6; } -if ${ac_cv_type_long_long_int+:} false; then : + elif test $gl_pthread_api != yes; then + # Some library is needed. Try libpthread and libc_r. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lpthread" >&5 +$as_echo_n "checking for pthread_kill in -lpthread... " >&6; } +if ${ac_cv_lib_pthread_pthread_kill+:} false; then : $as_echo_n "(cached) " >&6 else - ac_cv_type_long_long_int=yes - if test "x${ac_cv_prog_cc_c99-no}" = xno; then - ac_cv_type_long_long_int=$ac_cv_type_unsigned_long_long_int - if test $ac_cv_type_long_long_int = yes; then - if test "$cross_compiling" = yes; then : - : -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + ac_check_lib_save_LIBS=$LIBS +LIBS="-lpthread $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include <limits.h> - #ifndef LLONG_MAX - # define HALF \ - (1LL << (sizeof (long long int) * CHAR_BIT - 2)) - # define LLONG_MAX (HALF - 1 + HALF) - #endif + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char pthread_kill (); int main () { -long long int n = 1; - int i; - for (i = 0; ; i++) - { - long long int m = n << i; - if (m >> i != n) - return 1; - if (LLONG_MAX / 2 < m) - break; - } - return 0; +return pthread_kill (); ; return 0; } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_pthread_pthread_kill=yes +else + ac_cv_lib_pthread_pthread_kill=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_kill" >&5 +$as_echo "$ac_cv_lib_pthread_pthread_kill" >&6; } +if test "x$ac_cv_lib_pthread_pthread_kill" = xyes; then : + gl_pthread_api=yes + LIBPTHREAD=-lpthread + LIBPMULTITHREAD=-lpthread +fi + if test $gl_pthread_api != yes; then + # For FreeBSD 4. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lc_r" >&5 +$as_echo_n "checking for pthread_kill in -lc_r... " >&6; } +if ${ac_cv_lib_c_r_pthread_kill+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lc_r $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char pthread_kill (); +int +main () +{ +return pthread_kill (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_c_r_pthread_kill=yes else - ac_cv_type_long_long_int=no + ac_cv_lib_c_r_pthread_kill=no fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_r_pthread_kill" >&5 +$as_echo "$ac_cv_lib_c_r_pthread_kill" >&6; } +if test "x$ac_cv_lib_c_r_pthread_kill" = xyes; then : + gl_pthread_api=yes + LIBPTHREAD=-lc_r + LIBPMULTITHREAD=-lc_r fi fi fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_long_long_int" >&5 -$as_echo "$ac_cv_type_long_long_int" >&6; } - if test $ac_cv_type_long_long_int = yes; then + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether POSIX threads API is available" >&5 +$as_echo_n "checking whether POSIX threads API is available... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_pthread_api" >&5 +$as_echo "$gl_pthread_api" >&6; } -$as_echo "#define HAVE_LONG_LONG_INT 1" >>confdefs.h - fi + if test $gl_pthread_api = yes; then +$as_echo "#define HAVE_PTHREAD_API 1" >>confdefs.h + fi + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sched.h> +int +main () +{ +sched_yield (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + LIB_SCHED_YIELD= +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sched_yield in -lrt" >&5 +$as_echo_n "checking for sched_yield in -lrt... " >&6; } +if ${ac_cv_lib_rt_sched_yield+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lrt $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char sched_yield (); +int +main () +{ +return sched_yield (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_rt_sched_yield=yes +else + ac_cv_lib_rt_sched_yield=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_sched_yield" >&5 +$as_echo "$ac_cv_lib_rt_sched_yield" >&6; } +if test "x$ac_cv_lib_rt_sched_yield" = xyes; then : + LIB_SCHED_YIELD=-lrt +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sched_yield in -lposix4" >&5 +$as_echo_n "checking for sched_yield in -lposix4... " >&6; } +if ${ac_cv_lib_posix4_sched_yield+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lposix4 $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char sched_yield (); +int +main () +{ +return sched_yield (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_posix4_sched_yield=yes +else + ac_cv_lib_posix4_sched_yield=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_posix4_sched_yield" >&5 +$as_echo "$ac_cv_lib_posix4_sched_yield" >&6; } +if test "x$ac_cv_lib_posix4_sched_yield" = xyes; then : + LIB_SCHED_YIELD=-lposix4 +fi +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + gl_pthreadlib_body_done=done + fi - gl_cv_c_multiarch=no - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifndef __APPLE_CC__ - not a universal capable compiler - #endif - typedef int dummy; -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - arch= - prev= - for word in ${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS}; do - if test -n "$prev"; then - case $word in - i?86 | x86_64 | ppc | ppc64) - if test -z "$arch" || test "$arch" = "$word"; then - arch="$word" - else - gl_cv_c_multiarch=yes - fi - ;; - esac - prev= - else - if test "x$word" = "x-arch"; then - prev=arch - fi - fi - done -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - if test $gl_cv_c_multiarch = yes; then - APPLE_UNIVERSAL_BUILD=1 - else - APPLE_UNIVERSAL_BUILD=0 - fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether setlocale (LC_ALL, NULL) is multithread-safe" >&5 +$as_echo_n "checking whether setlocale (LC_ALL, NULL) is multithread-safe... " >&6; } +if ${gl_cv_func_setlocale_null_all_mtsafe+:} false; then : + $as_echo_n "(cached) " >&6 +else + case "$host_os" in + # Guess no on musl libc, macOS, FreeBSD, NetBSD, OpenBSD, AIX, Haiku, Cygwin. + *-musl* | darwin* | freebsd* | netbsd* | openbsd* | aix* | haiku* | cygwin*) + gl_cv_func_setlocale_null_all_mtsafe=no ;; + # Guess yes on glibc, HP-UX, IRIX, Solaris, native Windows. + *-gnu* | gnu* | hpux* | irix* | solaris* | mingw*) + gl_cv_func_setlocale_null_all_mtsafe=yes ;; + # If we don't know, obey --enable-cross-guesses. + *) + gl_cv_func_setlocale_null_all_mtsafe="$gl_cross_guess_normal" ;; + esac +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_setlocale_null_all_mtsafe" >&5 +$as_echo "$gl_cv_func_setlocale_null_all_mtsafe" >&6; } + case "$host_os" in + mingw*) ;; + *) + if test $gl_pthread_api = no && test $ac_cv_header_threads_h = no; then + gl_cv_func_setlocale_null_all_mtsafe="trivially yes" + fi + ;; + esac + case "$gl_cv_func_setlocale_null_all_mtsafe" in + *yes) SETLOCALE_NULL_ALL_MTSAFE=1 ;; + *) SETLOCALE_NULL_ALL_MTSAFE=0 ;; + esac - if test $ac_cv_type_long_long_int = yes; then - HAVE_LONG_LONG_INT=1 - else - HAVE_LONG_LONG_INT=0 - fi +cat >>confdefs.h <<_ACEOF +#define SETLOCALE_NULL_ALL_MTSAFE $SETLOCALE_NULL_ALL_MTSAFE +_ACEOF - if test $ac_cv_type_unsigned_long_long_int = yes; then - HAVE_UNSIGNED_LONG_LONG_INT=1 - else - HAVE_UNSIGNED_LONG_LONG_INT=0 - fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether setlocale (category, NULL) is multithread-safe" >&5 +$as_echo_n "checking whether setlocale (category, NULL) is multithread-safe... " >&6; } +if ${gl_cv_func_setlocale_null_one_mtsafe+:} false; then : + $as_echo_n "(cached) " >&6 +else + case "$host_os" in + # Guess no on OpenBSD, AIX. + openbsd* | aix*) + gl_cv_func_setlocale_null_one_mtsafe=no ;; + # Guess yes on glibc, musl libc, macOS, FreeBSD, NetBSD, HP-UX, IRIX, Solaris, Haiku, Cygwin, native Windows. + *-gnu* | gnu* | *-musl* | darwin* | freebsd* | netbsd* | hpux* | irix* | solaris* | haiku* | cygwin* | mingw*) + gl_cv_func_setlocale_null_one_mtsafe=yes ;; + # If we don't know, obey --enable-cross-guesses. + *) + gl_cv_func_setlocale_null_one_mtsafe="$gl_cross_guess_normal" ;; + esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_setlocale_null_one_mtsafe" >&5 +$as_echo "$gl_cv_func_setlocale_null_one_mtsafe" >&6; } + case "$host_os" in + mingw*) ;; + *) + if test $gl_pthread_api = no && test $ac_cv_header_threads_h = no; then + gl_cv_func_setlocale_null_one_mtsafe="trivially yes" + fi + ;; + esac + case "$gl_cv_func_setlocale_null_one_mtsafe" in + *yes) SETLOCALE_NULL_ONE_MTSAFE=1 ;; + *) SETLOCALE_NULL_ONE_MTSAFE=0 ;; + esac +cat >>confdefs.h <<_ACEOF +#define SETLOCALE_NULL_ONE_MTSAFE $SETLOCALE_NULL_ONE_MTSAFE +_ACEOF - : + if test $SETLOCALE_NULL_ALL_MTSAFE = 0 || test $SETLOCALE_NULL_ONE_MTSAFE = 0; then + case "$host_os" in + mingw*) LIB_SETLOCALE_NULL= ;; + *) + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether imported symbols can be declared weak" >&5 +$as_echo_n "checking whether imported symbols can be declared weak... " >&6; } +if ${gl_cv_have_weak+:} false; then : + $as_echo_n "(cached) " >&6 +else + gl_cv_have_weak=no + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +extern void xyzzy (); +#pragma weak xyzzy +int +main () +{ +xyzzy(); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + gl_cv_have_weak=maybe +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test $gl_cv_have_weak = maybe; then + if test "$cross_compiling" = yes; then : + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __ELF__ + Extensible Linking Format + #endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "Extensible Linking Format" >/dev/null 2>&1; then : + gl_cv_have_weak="guessing yes" +else + gl_cv_have_weak="guessing no" +fi +rm -f conftest* + + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <stdio.h> +#pragma weak fputs +int main () +{ + return (fputs == NULL); +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_have_weak=yes +else + gl_cv_have_weak=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + fi + case " $LDFLAGS " in + *" -static "*) gl_cv_have_weak=no ;; + esac + case "$gl_cv_have_weak" in + *yes) + case "$host_os" in + freebsd* | dragonfly*) + : > conftest1.c + $CC $CPPFLAGS $CFLAGS $LDFLAGS -fPIC -shared -o libempty.so conftest1.c -lpthread >&5 2>&1 + cat <<EOF > conftest2.c +#include <pthread.h> +#pragma weak pthread_mutexattr_gettype +int main () +{ + return (pthread_mutexattr_gettype != NULL); +} +EOF + $CC $CPPFLAGS $CFLAGS $LDFLAGS -o conftest conftest2.c libempty.so >&5 2>&1 \ + || gl_cv_have_weak=no + rm -f conftest1.c libempty.so conftest2.c conftest + ;; + esac + ;; + esac +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_have_weak" >&5 +$as_echo "$gl_cv_have_weak" >&6; } + case "$gl_cv_have_weak" in + *yes) +$as_echo "#define HAVE_WEAK_SYMBOLS 1" >>confdefs.h + ;; + esac - if test $ac_cv_header_wchar_h = yes; then - HAVE_WCHAR_H=1 + case "$gl_cv_have_weak" in + *yes) LIB_SETLOCALE_NULL= ;; + *) LIB_SETLOCALE_NULL="$LIBPTHREAD" ;; + esac + ;; + esac else - HAVE_WCHAR_H=0 + LIB_SETLOCALE_NULL= fi - if test $ac_cv_header_inttypes_h = yes; then - HAVE_INTTYPES_H=1 - else - HAVE_INTTYPES_H=0 - fi - if test $ac_cv_header_sys_types_h = yes; then - HAVE_SYS_TYPES_H=1 - else - HAVE_SYS_TYPES_H=0 - fi + GNULIB_SOCKET=0; + GNULIB_CONNECT=0; + GNULIB_ACCEPT=0; + GNULIB_BIND=0; + GNULIB_GETPEERNAME=0; + GNULIB_GETSOCKNAME=0; + GNULIB_GETSOCKOPT=0; + GNULIB_LISTEN=0; + GNULIB_RECV=0; + GNULIB_SEND=0; + GNULIB_RECVFROM=0; + GNULIB_SENDTO=0; + GNULIB_SETSOCKOPT=0; + GNULIB_SHUTDOWN=0; + GNULIB_ACCEPT4=0; + HAVE_STRUCT_SOCKADDR_STORAGE=1; + HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY=1; + + HAVE_SA_FAMILY_T=1; + HAVE_ACCEPT4=1; + case "$host_os" in + osf*) + +$as_echo "#define _POSIX_PII_SOCKET 1" >>confdefs.h + + ;; + esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether <sys/socket.h> is self-contained" >&5 +$as_echo_n "checking whether <sys/socket.h> is self-contained... " >&6; } +if ${gl_cv_header_sys_socket_h_selfcontained+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/socket.h> +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_header_sys_socket_h_selfcontained=yes +else + gl_cv_header_sys_socket_h_selfcontained=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_sys_socket_h_selfcontained" >&5 +$as_echo "$gl_cv_header_sys_socket_h_selfcontained" >&6; } + if test $gl_cv_header_sys_socket_h_selfcontained = yes; then + for ac_func in shutdown +do : + ac_fn_c_check_func "$LINENO" "shutdown" "ac_cv_func_shutdown" +if test "x$ac_cv_func_shutdown" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SHUTDOWN 1 +_ACEOF + +fi +done + + if test $ac_cv_func_shutdown = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether <sys/socket.h> defines the SHUT_* macros" >&5 +$as_echo_n "checking whether <sys/socket.h> defines the SHUT_* macros... " >&6; } +if ${gl_cv_header_sys_socket_h_shut+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/socket.h> +int +main () +{ +int a[] = { SHUT_RD, SHUT_WR, SHUT_RDWR }; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_header_sys_socket_h_shut=yes +else + gl_cv_header_sys_socket_h_shut=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_sys_socket_h_shut" >&5 +$as_echo "$gl_cv_header_sys_socket_h_shut" >&6; } + if test $gl_cv_header_sys_socket_h_shut = no; then + SYS_SOCKET_H='sys/socket.h' + fi + fi + fi + # We need to check for ws2tcpip.h now. + - : @@ -10826,22 +11387,22 @@ if test $gl_cv_have_include_next = yes; then - gl_cv_next_stdint_h='<'stdint.h'>' + gl_cv_next_sys_socket_h='<'sys/socket.h'>' else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <stdint.h>" >&5 -$as_echo_n "checking absolute name of <stdint.h>... " >&6; } -if ${gl_cv_next_stdint_h+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <sys/socket.h>" >&5 +$as_echo_n "checking absolute name of <sys/socket.h>... " >&6; } +if ${gl_cv_next_sys_socket_h+:} false; then : $as_echo_n "(cached) " >&6 else - if test $ac_cv_header_stdint_h = yes; then + if test $ac_cv_header_sys_socket_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include <stdint.h> +#include <sys/socket.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; @@ -10857,7 +11418,7 @@ ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' - gl_header_literal_regex=`echo 'stdint.h' \ + gl_header_literal_regex=`echo 'sys/socket.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ @@ -10866,558 +11427,351 @@ q }' - gl_cv_absolute_stdint_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + gl_cv_absolute_sys_socket_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` - gl_header=$gl_cv_absolute_stdint_h - gl_cv_next_stdint_h='"'$gl_header'"' + gl_header=$gl_cv_absolute_sys_socket_h + gl_cv_next_sys_socket_h='"'$gl_header'"' else - gl_cv_next_stdint_h='<'stdint.h'>' + gl_cv_next_sys_socket_h='<'sys/socket.h'>' fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stdint_h" >&5 -$as_echo "$gl_cv_next_stdint_h" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sys_socket_h" >&5 +$as_echo "$gl_cv_next_sys_socket_h" >&6; } fi - NEXT_STDINT_H=$gl_cv_next_stdint_h + NEXT_SYS_SOCKET_H=$gl_cv_next_sys_socket_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' - gl_next_as_first_directive='<'stdint.h'>' + gl_next_as_first_directive='<'sys/socket.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' - gl_next_as_first_directive=$gl_cv_next_stdint_h + gl_next_as_first_directive=$gl_cv_next_sys_socket_h fi - NEXT_AS_FIRST_DIRECTIVE_STDINT_H=$gl_next_as_first_directive + NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H=$gl_next_as_first_directive - if test $ac_cv_header_stdint_h = yes; then - HAVE_STDINT_H=1 + if test $ac_cv_header_sys_socket_h = yes; then + HAVE_SYS_SOCKET_H=1 else - HAVE_STDINT_H=0 + HAVE_SYS_SOCKET_H=0 fi - if test $ac_cv_header_stdint_h = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stdint.h conforms to C99" >&5 -$as_echo_n "checking whether stdint.h conforms to C99... " >&6; } -if ${gl_cv_header_working_stdint_h+:} false; then : - $as_echo_n "(cached) " >&6 -else - gl_cv_header_working_stdint_h=no - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - -#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ -#define __STDC_CONSTANT_MACROS 1 -#define __STDC_LIMIT_MACROS 1 -#include <stdint.h> -/* Dragonfly defines WCHAR_MIN, WCHAR_MAX only in <wchar.h>. */ -#if !(defined WCHAR_MIN && defined WCHAR_MAX) -#error "WCHAR_MIN, WCHAR_MAX not defined in <stdint.h>" -#endif + if test $ac_cv_header_sys_socket_h = yes; then + HAVE_WS2TCPIP_H=0 + else + if test $ac_cv_header_ws2tcpip_h = yes; then + HAVE_WS2TCPIP_H=1 + else + HAVE_WS2TCPIP_H=0 + fi + fi - /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be - included before <wchar.h>. */ - #include <stddef.h> - #include <signal.h> - #if HAVE_WCHAR_H - # include <stdio.h> - # include <time.h> - # include <wchar.h> - #endif -#ifdef INT8_MAX -int8_t a1 = INT8_MAX; -int8_t a1min = INT8_MIN; -#endif -#ifdef INT16_MAX -int16_t a2 = INT16_MAX; -int16_t a2min = INT16_MIN; -#endif -#ifdef INT32_MAX -int32_t a3 = INT32_MAX; -int32_t a3min = INT32_MIN; -#endif -#ifdef INT64_MAX -int64_t a4 = INT64_MAX; -int64_t a4min = INT64_MIN; -#endif -#ifdef UINT8_MAX -uint8_t b1 = UINT8_MAX; -#else -typedef int b1[(unsigned char) -1 != 255 ? 1 : -1]; -#endif -#ifdef UINT16_MAX -uint16_t b2 = UINT16_MAX; -#endif -#ifdef UINT32_MAX -uint32_t b3 = UINT32_MAX; -#endif -#ifdef UINT64_MAX -uint64_t b4 = UINT64_MAX; -#endif -int_least8_t c1 = INT8_C (0x7f); -int_least8_t c1max = INT_LEAST8_MAX; -int_least8_t c1min = INT_LEAST8_MIN; -int_least16_t c2 = INT16_C (0x7fff); -int_least16_t c2max = INT_LEAST16_MAX; -int_least16_t c2min = INT_LEAST16_MIN; -int_least32_t c3 = INT32_C (0x7fffffff); -int_least32_t c3max = INT_LEAST32_MAX; -int_least32_t c3min = INT_LEAST32_MIN; -int_least64_t c4 = INT64_C (0x7fffffffffffffff); -int_least64_t c4max = INT_LEAST64_MAX; -int_least64_t c4min = INT_LEAST64_MIN; -uint_least8_t d1 = UINT8_C (0xff); -uint_least8_t d1max = UINT_LEAST8_MAX; -uint_least16_t d2 = UINT16_C (0xffff); -uint_least16_t d2max = UINT_LEAST16_MAX; -uint_least32_t d3 = UINT32_C (0xffffffff); -uint_least32_t d3max = UINT_LEAST32_MAX; -uint_least64_t d4 = UINT64_C (0xffffffffffffffff); -uint_least64_t d4max = UINT_LEAST64_MAX; -int_fast8_t e1 = INT_FAST8_MAX; -int_fast8_t e1min = INT_FAST8_MIN; -int_fast16_t e2 = INT_FAST16_MAX; -int_fast16_t e2min = INT_FAST16_MIN; -int_fast32_t e3 = INT_FAST32_MAX; -int_fast32_t e3min = INT_FAST32_MIN; -int_fast64_t e4 = INT_FAST64_MAX; -int_fast64_t e4min = INT_FAST64_MIN; -uint_fast8_t f1 = UINT_FAST8_MAX; -uint_fast16_t f2 = UINT_FAST16_MAX; -uint_fast32_t f3 = UINT_FAST32_MAX; -uint_fast64_t f4 = UINT_FAST64_MAX; -#ifdef INTPTR_MAX -intptr_t g = INTPTR_MAX; -intptr_t gmin = INTPTR_MIN; + ac_fn_c_check_type "$LINENO" "struct sockaddr_storage" "ac_cv_type_struct_sockaddr_storage" " + /* sys/types.h is not needed according to POSIX, but the + sys/socket.h in i386-unknown-freebsd4.10 and + powerpc-apple-darwin5.5 required it. */ +#include <sys/types.h> +#ifdef HAVE_SYS_SOCKET_H +#include <sys/socket.h> #endif -#ifdef UINTPTR_MAX -uintptr_t h = UINTPTR_MAX; +#ifdef HAVE_WS2TCPIP_H +#include <ws2tcpip.h> #endif -intmax_t i = INTMAX_MAX; -uintmax_t j = UINTMAX_MAX; -/* Check that SIZE_MAX has the correct type, if possible. */ -#if 201112 <= __STDC_VERSION__ -int k = _Generic (SIZE_MAX, size_t: 0); -#elif (2 <= __GNUC__ || defined __IBM__TYPEOF__ \ - || (0x5110 <= __SUNPRO_C && !__STDC__)) -extern size_t k; -extern __typeof__ (SIZE_MAX) k; -#endif +" +if test "x$ac_cv_type_struct_sockaddr_storage" = xyes; then : -#include <limits.h> /* for CHAR_BIT */ -#define TYPE_MINIMUM(t) \ - ((t) ((t) 0 < (t) -1 ? (t) 0 : ~ TYPE_MAXIMUM (t))) -#define TYPE_MAXIMUM(t) \ - ((t) ((t) 0 < (t) -1 \ - ? (t) -1 \ - : ((((t) 1 << (sizeof (t) * CHAR_BIT - 2)) - 1) * 2 + 1))) -struct s { - int check_PTRDIFF: - PTRDIFF_MIN == TYPE_MINIMUM (ptrdiff_t) - && PTRDIFF_MAX == TYPE_MAXIMUM (ptrdiff_t) - ? 1 : -1; - /* Detect bug in FreeBSD 6.0 / ia64. */ - int check_SIG_ATOMIC: - SIG_ATOMIC_MIN == TYPE_MINIMUM (sig_atomic_t) - && SIG_ATOMIC_MAX == TYPE_MAXIMUM (sig_atomic_t) - ? 1 : -1; - int check_SIZE: SIZE_MAX == TYPE_MAXIMUM (size_t) ? 1 : -1; - int check_WCHAR: - WCHAR_MIN == TYPE_MINIMUM (wchar_t) - && WCHAR_MAX == TYPE_MAXIMUM (wchar_t) - ? 1 : -1; - /* Detect bug in mingw. */ - int check_WINT: - WINT_MIN == TYPE_MINIMUM (wint_t) - && WINT_MAX == TYPE_MAXIMUM (wint_t) - ? 1 : -1; +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_SOCKADDR_STORAGE 1 +_ACEOF - /* Detect bugs in glibc 2.4 and Solaris 10 stdint.h, among others. */ - int check_UINT8_C: - (-1 < UINT8_C (0)) == (-1 < (uint_least8_t) 0) ? 1 : -1; - int check_UINT16_C: - (-1 < UINT16_C (0)) == (-1 < (uint_least16_t) 0) ? 1 : -1; - /* Detect bugs in OpenBSD 3.9 stdint.h. */ -#ifdef UINT8_MAX - int check_uint8: (uint8_t) -1 == UINT8_MAX ? 1 : -1; -#endif -#ifdef UINT16_MAX - int check_uint16: (uint16_t) -1 == UINT16_MAX ? 1 : -1; -#endif -#ifdef UINT32_MAX - int check_uint32: (uint32_t) -1 == UINT32_MAX ? 1 : -1; +fi +ac_fn_c_check_type "$LINENO" "sa_family_t" "ac_cv_type_sa_family_t" " + /* sys/types.h is not needed according to POSIX, but the + sys/socket.h in i386-unknown-freebsd4.10 and + powerpc-apple-darwin5.5 required it. */ +#include <sys/types.h> +#ifdef HAVE_SYS_SOCKET_H +#include <sys/socket.h> #endif -#ifdef UINT64_MAX - int check_uint64: (uint64_t) -1 == UINT64_MAX ? 1 : -1; +#ifdef HAVE_WS2TCPIP_H +#include <ws2tcpip.h> #endif - int check_uint_least8: (uint_least8_t) -1 == UINT_LEAST8_MAX ? 1 : -1; - int check_uint_least16: (uint_least16_t) -1 == UINT_LEAST16_MAX ? 1 : -1; - int check_uint_least32: (uint_least32_t) -1 == UINT_LEAST32_MAX ? 1 : -1; - int check_uint_least64: (uint_least64_t) -1 == UINT_LEAST64_MAX ? 1 : -1; - int check_uint_fast8: (uint_fast8_t) -1 == UINT_FAST8_MAX ? 1 : -1; - int check_uint_fast16: (uint_fast16_t) -1 == UINT_FAST16_MAX ? 1 : -1; - int check_uint_fast32: (uint_fast32_t) -1 == UINT_FAST32_MAX ? 1 : -1; - int check_uint_fast64: (uint_fast64_t) -1 == UINT_FAST64_MAX ? 1 : -1; - int check_uintptr: (uintptr_t) -1 == UINTPTR_MAX ? 1 : -1; - int check_uintmax: (uintmax_t) -1 == UINTMAX_MAX ? 1 : -1; - int check_size: (size_t) -1 == SIZE_MAX ? 1 : -1; -}; -int -main () -{ +" +if test "x$ac_cv_type_sa_family_t" = xyes; then : - ; - return 0; -} +cat >>confdefs.h <<_ACEOF +#define HAVE_SA_FAMILY_T 1 _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - if test "$cross_compiling" = yes; then : - gl_cv_header_working_stdint_h=yes -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ +fi -#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ -#define __STDC_CONSTANT_MACROS 1 -#define __STDC_LIMIT_MACROS 1 -#include <stdint.h> + if test $ac_cv_type_struct_sockaddr_storage = no; then + HAVE_STRUCT_SOCKADDR_STORAGE=0 + fi + if test $ac_cv_type_sa_family_t = no; then + HAVE_SA_FAMILY_T=0 + fi + if test $ac_cv_type_struct_sockaddr_storage != no; then + ac_fn_c_check_member "$LINENO" "struct sockaddr_storage" "ss_family" "ac_cv_member_struct_sockaddr_storage_ss_family" "#include <sys/types.h> + #ifdef HAVE_SYS_SOCKET_H + #include <sys/socket.h> + #endif + #ifdef HAVE_WS2TCPIP_H + #include <ws2tcpip.h> + #endif +" +if test "x$ac_cv_member_struct_sockaddr_storage_ss_family" = xyes; then : - /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be - included before <wchar.h>. */ - #include <stddef.h> - #include <signal.h> - #if HAVE_WCHAR_H - # include <stdio.h> - # include <time.h> - # include <wchar.h> - #endif +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY 1 +_ACEOF -#include <stdio.h> -#include <string.h> -#define MVAL(macro) MVAL1(macro) -#define MVAL1(expression) #expression -static const char *macro_values[] = - { -#ifdef INT8_MAX - MVAL (INT8_MAX), -#endif -#ifdef INT16_MAX - MVAL (INT16_MAX), -#endif -#ifdef INT32_MAX - MVAL (INT32_MAX), -#endif -#ifdef INT64_MAX - MVAL (INT64_MAX), -#endif -#ifdef UINT8_MAX - MVAL (UINT8_MAX), -#endif -#ifdef UINT16_MAX - MVAL (UINT16_MAX), -#endif -#ifdef UINT32_MAX - MVAL (UINT32_MAX), -#endif -#ifdef UINT64_MAX - MVAL (UINT64_MAX), -#endif - NULL - }; +else + HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY=0 +fi -int -main () -{ + fi + if test $HAVE_STRUCT_SOCKADDR_STORAGE = 0 || test $HAVE_SA_FAMILY_T = 0 \ + || test $HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = 0; then + SYS_SOCKET_H='sys/socket.h' + fi - const char **mv; - for (mv = macro_values; *mv != NULL; mv++) - { - const char *value = *mv; - /* Test whether it looks like a cast expression. */ - if (strncmp (value, "((unsigned int)"/*)*/, 15) == 0 - || strncmp (value, "((unsigned short)"/*)*/, 17) == 0 - || strncmp (value, "((unsigned char)"/*)*/, 16) == 0 - || strncmp (value, "((int)"/*)*/, 6) == 0 - || strncmp (value, "((signed short)"/*)*/, 15) == 0 - || strncmp (value, "((signed char)"/*)*/, 14) == 0) - return mv - macro_values + 1; - } - return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - gl_cv_header_working_stdint_h=yes -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if test $ac_cv_header_sys_socket_h != yes; then + for ac_header in winsock2.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "winsock2.h" "ac_cv_header_winsock2_h" "$ac_includes_default" +if test "x$ac_cv_header_winsock2_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_WINSOCK2_H 1 +_ACEOF fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_working_stdint_h" >&5 -$as_echo "$gl_cv_header_working_stdint_h" >&6; } + +done + + fi + if test "$ac_cv_header_winsock2_h" = yes; then + HAVE_WINSOCK2_H=1 + UNISTD_H_HAVE_WINSOCK2_H=1 + SYS_IOCTL_H_HAVE_WINSOCK2_H=1 + else + HAVE_WINSOCK2_H=0 fi - HAVE_C99_STDINT_H=0 - HAVE_SYS_BITYPES_H=0 - HAVE_SYS_INTTYPES_H=0 - STDINT_H=stdint.h - if test "$gl_cv_header_working_stdint_h" = yes; then - HAVE_C99_STDINT_H=1 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stdint.h predates C++11" >&5 -$as_echo_n "checking whether stdint.h predates C++11... " >&6; } -if ${gl_cv_header_stdint_predates_cxx11_h+:} false; then : - $as_echo_n "(cached) " >&6 -else - gl_cv_header_stdint_predates_cxx11_h=yes - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ -#include <stdint.h> - /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be - included before <wchar.h>. */ - #include <stddef.h> - #include <signal.h> - #if HAVE_WCHAR_H - # include <stdio.h> - # include <time.h> - # include <wchar.h> - #endif -intmax_t im = INTMAX_MAX; -int32_t i32 = INT32_C (0x7fffffff); + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for IPv4 sockets" >&5 +$as_echo_n "checking for IPv4 sockets... " >&6; } +if ${gl_cv_socket_ipv4+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> +#ifdef HAVE_SYS_SOCKET_H +#include <sys/socket.h> +#endif +#ifdef HAVE_NETINET_IN_H +#include <netinet/in.h> +#endif +#ifdef HAVE_WINSOCK2_H +#include <winsock2.h> +#endif int main () { - +int x = AF_INET; struct in_addr y; struct sockaddr_in z; + if (&x && &y && &z) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : - gl_cv_header_stdint_predates_cxx11_h=no + gl_cv_socket_ipv4=yes +else + gl_cv_socket_ipv4=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_stdint_predates_cxx11_h" >&5 -$as_echo "$gl_cv_header_stdint_predates_cxx11_h" >&6; } - - if test "$gl_cv_header_stdint_predates_cxx11_h" = yes; then - -$as_echo "#define __STDC_CONSTANT_MACROS 1" >>confdefs.h +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_socket_ipv4" >&5 +$as_echo "$gl_cv_socket_ipv4" >&6; } + if test $gl_cv_socket_ipv4 = yes; then +$as_echo "#define HAVE_IPV4 1" >>confdefs.h -$as_echo "#define __STDC_LIMIT_MACROS 1" >>confdefs.h + fi - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stdint.h has UINTMAX_WIDTH etc." >&5 -$as_echo_n "checking whether stdint.h has UINTMAX_WIDTH etc.... " >&6; } -if ${gl_cv_header_stdint_width+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for IPv6 sockets" >&5 +$as_echo_n "checking for IPv6 sockets... " >&6; } +if ${gl_cv_socket_ipv6+:} false; then : $as_echo_n "(cached) " >&6 else - gl_cv_header_stdint_width=no - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ - - /* Work if build is not clean. */ - #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 - #ifndef __STDC_WANT_IEC_60559_BFP_EXT__ - #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 - #endif - #include <stdint.h> - - /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be - included before <wchar.h>. */ - #include <stddef.h> - #include <signal.h> - #if HAVE_WCHAR_H - # include <stdio.h> - # include <time.h> - # include <wchar.h> - #endif - - int iw = UINTMAX_WIDTH; - +#include <sys/types.h> +#ifdef HAVE_SYS_SOCKET_H +#include <sys/socket.h> +#endif +#ifdef HAVE_NETINET_IN_H +#include <netinet/in.h> +#endif +#ifdef HAVE_WINSOCK2_H +#include <winsock2.h> +#endif +#ifdef HAVE_WS2TCPIP_H +#include <ws2tcpip.h> +#endif int main () { - +int x = AF_INET6; struct in6_addr y; struct sockaddr_in6 z; + if (&x && &y && &z) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : - gl_cv_header_stdint_width=yes + gl_cv_socket_ipv6=yes +else + gl_cv_socket_ipv6=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_stdint_width" >&5 -$as_echo "$gl_cv_header_stdint_width" >&6; } - if test "$gl_cv_header_stdint_width" = yes; then - STDINT_H= - fi - else - for ac_header in sys/inttypes.h sys/bitypes.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_socket_ipv6" >&5 +$as_echo "$gl_cv_socket_ipv6" >&6; } + if test $gl_cv_socket_ipv6 = yes; then -done +$as_echo "#define HAVE_IPV6 1" >>confdefs.h - if test $ac_cv_header_sys_inttypes_h = yes; then - HAVE_SYS_INTTYPES_H=1 - fi - if test $ac_cv_header_sys_bitypes_h = yes; then - HAVE_SYS_BITYPES_H=1 - fi + fi - if test $APPLE_UNIVERSAL_BUILD = 0; then - for gltype in ptrdiff_t size_t ; do - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for bit size of $gltype" >&5 -$as_echo_n "checking for bit size of $gltype... " >&6; } -if eval \${gl_cv_bitsizeof_${gltype}+:} false; then : - $as_echo_n "(cached) " >&6 -else - if ac_fn_c_compute_int "$LINENO" "sizeof ($gltype) * CHAR_BIT" "result" " - /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be - included before <wchar.h>. */ - #include <stddef.h> - #include <signal.h> - #if HAVE_WCHAR_H - # include <stdio.h> - # include <time.h> - # include <wchar.h> - #endif -#include <limits.h>"; then : -else - result=unknown -fi - eval gl_cv_bitsizeof_${gltype}=\$result -fi -eval ac_res=\$gl_cv_bitsizeof_${gltype} - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval result=\$gl_cv_bitsizeof_${gltype} - if test $result = unknown; then - result=0 - fi - GLTYPE=`echo "$gltype" | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` - cat >>confdefs.h <<_ACEOF -#define BITSIZEOF_${GLTYPE} $result -_ACEOF - eval BITSIZEOF_${GLTYPE}=\$result - done - fi - for gltype in sig_atomic_t wchar_t wint_t ; do - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for bit size of $gltype" >&5 -$as_echo_n "checking for bit size of $gltype... " >&6; } -if eval \${gl_cv_bitsizeof_${gltype}+:} false; then : + if test $gl_cv_have_include_next = yes; then + gl_cv_next_limits_h='<'limits.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <limits.h>" >&5 +$as_echo_n "checking absolute name of <limits.h>... " >&6; } +if ${gl_cv_next_limits_h+:} false; then : $as_echo_n "(cached) " >&6 else - if ac_fn_c_compute_int "$LINENO" "sizeof ($gltype) * CHAR_BIT" "result" " - /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be - included before <wchar.h>. */ - #include <stddef.h> - #include <signal.h> - #if HAVE_WCHAR_H - # include <stdio.h> - # include <time.h> - # include <wchar.h> - #endif -#include <limits.h>"; then : + if test $ac_cv_header_limits_h = yes; then -else - result=unknown -fi - eval gl_cv_bitsizeof_${gltype}=\$result -fi -eval ac_res=\$gl_cv_bitsizeof_${gltype} - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval result=\$gl_cv_bitsizeof_${gltype} - if test $result = unknown; then - result=0 - fi - GLTYPE=`echo "$gltype" | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` - cat >>confdefs.h <<_ACEOF -#define BITSIZEOF_${GLTYPE} $result + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <limits.h> _ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac - eval BITSIZEOF_${GLTYPE}=\$result - done + case "$host_os" in + mingw*) + gl_dirsep_regex='[/\\]' + ;; + *) + gl_dirsep_regex='\/' + ;; + esac + gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' + gl_header_literal_regex=`echo 'limits.h' \ + | sed -e "$gl_make_literal_regex_sed"` + gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ + s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ + s|^/[^/]|//&| + p + q + }' + + gl_cv_absolute_limits_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n "$gl_absolute_header_sed"` + + gl_header=$gl_cv_absolute_limits_h + gl_cv_next_limits_h='"'$gl_header'"' + else + gl_cv_next_limits_h='<'limits.h'>' + fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_limits_h" >&5 +$as_echo "$gl_cv_next_limits_h" >&6; } + fi + NEXT_LIMITS_H=$gl_cv_next_limits_h + + if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' + gl_next_as_first_directive='<'limits.h'>' + else + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' + gl_next_as_first_directive=$gl_cv_next_limits_h + fi + NEXT_AS_FIRST_DIRECTIVE_LIMITS_H=$gl_next_as_first_directive - for gltype in sig_atomic_t wchar_t wint_t ; do - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gltype is signed" >&5 -$as_echo_n "checking whether $gltype is signed... " >&6; } -if eval \${gl_cv_type_${gltype}_signed+:} false; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether limits.h has LLONG_MAX, WORD_BIT, ULLONG_WIDTH etc." >&5 +$as_echo_n "checking whether limits.h has LLONG_MAX, WORD_BIT, ULLONG_WIDTH etc.... " >&6; } +if ${gl_cv_header_limits_width+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ +#ifndef __STDC_WANT_IEC_60559_BFP_EXT__ + #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 + #endif + #include <limits.h> + long long llm = LLONG_MAX; + int wb = WORD_BIT; + int ullw = ULLONG_WIDTH; - /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be - included before <wchar.h>. */ - #include <stddef.h> - #include <signal.h> - #if HAVE_WCHAR_H - # include <stdio.h> - # include <time.h> - # include <wchar.h> - #endif - - int verify[2 * (($gltype) -1 < ($gltype) 0) - 1]; int main () { @@ -11427,75 +11781,89 @@ } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : - result=yes + gl_cv_header_limits_width=yes else - result=no + gl_cv_header_limits_width=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - eval gl_cv_type_${gltype}_signed=\$result +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_limits_width" >&5 +$as_echo "$gl_cv_header_limits_width" >&6; } + if test "$gl_cv_header_limits_width" = yes; then + LIMITS_H= + else + LIMITS_H=limits.h + fi + if test -n "$LIMITS_H"; then + GL_GENERATE_LIMITS_H_TRUE= + GL_GENERATE_LIMITS_H_FALSE='#' +else + GL_GENERATE_LIMITS_H_TRUE='#' + GL_GENERATE_LIMITS_H_FALSE= fi -eval ac_res=\$gl_cv_type_${gltype}_signed - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval result=\$gl_cv_type_${gltype}_signed - GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` - if test "$result" = yes; then - cat >>confdefs.h <<_ACEOF -#define HAVE_SIGNED_${GLTYPE} 1 -_ACEOF - eval HAVE_SIGNED_${GLTYPE}=1 - else - eval HAVE_SIGNED_${GLTYPE}=0 - fi - done - gl_cv_type_ptrdiff_t_signed=yes - gl_cv_type_size_t_signed=no - if test $APPLE_UNIVERSAL_BUILD = 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wint_t" >&5 +$as_echo_n "checking for wint_t... " >&6; } +if ${gt_cv_c_wint_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included + before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> + wint_t foo = (wchar_t)'\0'; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gt_cv_c_wint_t=yes +else + gt_cv_c_wint_t=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_wint_t" >&5 +$as_echo "$gt_cv_c_wint_t" >&6; } + if test $gt_cv_c_wint_t = yes; then +$as_echo "#define HAVE_WINT_T 1" >>confdefs.h - for gltype in ptrdiff_t size_t ; do - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $gltype integer literal suffix" >&5 -$as_echo_n "checking for $gltype integer literal suffix... " >&6; } -if eval \${gl_cv_type_${gltype}_suffix+:} false; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether wint_t is too small" >&5 +$as_echo_n "checking whether wint_t is too small... " >&6; } +if ${gl_cv_type_wint_t_too_small+:} false; then : $as_echo_n "(cached) " >&6 else - eval gl_cv_type_${gltype}_suffix=no - eval result=\$gl_cv_type_${gltype}_signed - if test "$result" = yes; then - glsufu= - else - glsufu=u - fi - for glsuf in "$glsufu" ${glsufu}l ${glsufu}ll ${glsufu}i64; do - case $glsuf in - '') gltype1='int';; - l) gltype1='long int';; - ll) gltype1='long long int';; - i64) gltype1='__int64';; - u) gltype1='unsigned int';; - ul) gltype1='unsigned long int';; - ull) gltype1='unsigned long long int';; - ui64)gltype1='unsigned __int64';; - esac - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ - /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be - included before <wchar.h>. */ - #include <stddef.h> - #include <signal.h> - #if HAVE_WCHAR_H - # include <stdio.h> - # include <time.h> - # include <wchar.h> - #endif +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +#if !(defined __GLIBC__ && !defined __UCLIBC__) +# include <stddef.h> +# include <stdio.h> +# include <time.h> +#endif +#include <wchar.h> + int verify[sizeof (wint_t) < sizeof (int) ? -1 : 1]; - extern $gltype foo; - extern $gltype1 foo; int main () { @@ -11505,128 +11873,68 @@ } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : - eval gl_cv_type_${gltype}_suffix=\$glsuf + gl_cv_type_wint_t_too_small=no +else + gl_cv_type_wint_t_too_small=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - eval result=\$gl_cv_type_${gltype}_suffix - test "$result" != no && break - done fi -eval ac_res=\$gl_cv_type_${gltype}_suffix - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` - eval result=\$gl_cv_type_${gltype}_suffix - test "$result" = no && result= - eval ${GLTYPE}_SUFFIX=\$result - cat >>confdefs.h <<_ACEOF -#define ${GLTYPE}_SUFFIX $result -_ACEOF +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_type_wint_t_too_small" >&5 +$as_echo "$gl_cv_type_wint_t_too_small" >&6; } + if test $gl_cv_type_wint_t_too_small = yes; then + GNULIB_OVERRIDES_WINT_T=1 + else + GNULIB_OVERRIDES_WINT_T=0 + fi + else + GNULIB_OVERRIDES_WINT_T=0 + fi - done - fi - for gltype in sig_atomic_t wchar_t wint_t ; do - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $gltype integer literal suffix" >&5 -$as_echo_n "checking for $gltype integer literal suffix... " >&6; } -if eval \${gl_cv_type_${gltype}_suffix+:} false; then : - $as_echo_n "(cached) " >&6 -else - eval gl_cv_type_${gltype}_suffix=no - eval result=\$gl_cv_type_${gltype}_signed - if test "$result" = yes; then - glsufu= - else - glsufu=u - fi - for glsuf in "$glsufu" ${glsufu}l ${glsufu}ll ${glsufu}i64; do - case $glsuf in - '') gltype1='int';; - l) gltype1='long int';; - ll) gltype1='long long int';; - i64) gltype1='__int64';; - u) gltype1='unsigned int';; - ul) gltype1='unsigned long int';; - ull) gltype1='unsigned long long int';; - ui64)gltype1='unsigned __int64';; - esac - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be - included before <wchar.h>. */ - #include <stddef.h> - #include <signal.h> - #if HAVE_WCHAR_H - # include <stdio.h> - # include <time.h> - # include <wchar.h> - #endif - extern $gltype foo; - extern $gltype1 foo; -int -main () -{ + gl_cv_c_multiarch=no + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifndef __APPLE_CC__ + not a universal capable compiler + #endif + typedef int dummy; - ; - return 0; -} _ACEOF if ac_fn_c_try_compile "$LINENO"; then : - eval gl_cv_type_${gltype}_suffix=\$glsuf -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - eval result=\$gl_cv_type_${gltype}_suffix - test "$result" != no && break - done -fi -eval ac_res=\$gl_cv_type_${gltype}_suffix - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` - eval result=\$gl_cv_type_${gltype}_suffix - test "$result" = no && result= - eval ${GLTYPE}_SUFFIX=\$result - cat >>confdefs.h <<_ACEOF -#define ${GLTYPE}_SUFFIX $result -_ACEOF - - done - - - - if test $BITSIZEOF_WINT_T -lt 32; then - BITSIZEOF_WINT_T=32 - fi - - fi - - # The substitute stdint.h needs the substitute limit.h's _GL_INTEGER_WIDTH. - LIMITS_H=limits.h - if test -n "$LIMITS_H"; then - GL_GENERATE_LIMITS_H_TRUE= - GL_GENERATE_LIMITS_H_FALSE='#' -else - GL_GENERATE_LIMITS_H_TRUE='#' - GL_GENERATE_LIMITS_H_FALSE= -fi - - - - + arch= + prev= + for word in ${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS}; do + if test -n "$prev"; then + case $word in + i?86 | x86_64 | ppc | ppc64) + if test -z "$arch" || test "$arch" = "$word"; then + arch="$word" + else + gl_cv_c_multiarch=yes + fi + ;; + esac + prev= + else + if test "x$word" = "x-arch"; then + prev=arch + fi + fi + done - if test -n "$STDINT_H"; then - GL_GENERATE_STDINT_H_TRUE= - GL_GENERATE_STDINT_H_FALSE='#' -else - GL_GENERATE_STDINT_H_TRUE='#' - GL_GENERATE_STDINT_H_FALSE= fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if test $gl_cv_c_multiarch = yes; then + APPLE_UNIVERSAL_BUILD=1 + else + APPLE_UNIVERSAL_BUILD=0 + fi @@ -11635,41 +11943,35 @@ - GNULIB_IMAXABS=0; - GNULIB_IMAXDIV=0; - GNULIB_STRTOIMAX=0; - GNULIB_STRTOUMAX=0; - HAVE_DECL_IMAXABS=1; - HAVE_DECL_IMAXDIV=1; - HAVE_DECL_STRTOIMAX=1; - HAVE_DECL_STRTOUMAX=1; - REPLACE_STRTOIMAX=0; - REPLACE_STRTOUMAX=0; - INT32_MAX_LT_INTMAX_MAX=1; - INT64_MAX_EQ_LONG_MAX='defined _LP64'; - PRI_MACROS_BROKEN=0; - PRIPTR_PREFIX=__PRIPTR_PREFIX; - UINT32_MAX_LT_UINTMAX_MAX=1; - UINT64_MAX_EQ_ULONG_MAX='defined _LP64'; - - - - - : - +$as_echo "#define HAVE_LONG_LONG_INT 1" >>confdefs.h +$as_echo "#define HAVE_UNSIGNED_LONG_LONG_INT 1" >>confdefs.h + if test $ac_cv_header_wchar_h = yes; then + HAVE_WCHAR_H=1 + else + HAVE_WCHAR_H=0 + fi + if test $ac_cv_header_inttypes_h = yes; then + HAVE_INTTYPES_H=1 + else + HAVE_INTTYPES_H=0 + fi + if test $ac_cv_header_sys_types_h = yes; then + HAVE_SYS_TYPES_H=1 + else + HAVE_SYS_TYPES_H=0 + fi - : @@ -11679,22 +11981,22 @@ if test $gl_cv_have_include_next = yes; then - gl_cv_next_inttypes_h='<'inttypes.h'>' + gl_cv_next_stdint_h='<'stdint.h'>' else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <inttypes.h>" >&5 -$as_echo_n "checking absolute name of <inttypes.h>... " >&6; } -if ${gl_cv_next_inttypes_h+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <stdint.h>" >&5 +$as_echo_n "checking absolute name of <stdint.h>... " >&6; } +if ${gl_cv_next_stdint_h+:} false; then : $as_echo_n "(cached) " >&6 else - if test $ac_cv_header_inttypes_h = yes; then + if test $ac_cv_header_stdint_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include <inttypes.h> +#include <stdint.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; @@ -11710,7 +12012,7 @@ ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' - gl_header_literal_regex=`echo 'inttypes.h' \ + gl_header_literal_regex=`echo 'stdint.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ @@ -11719,105 +12021,213 @@ q }' - gl_cv_absolute_inttypes_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + gl_cv_absolute_stdint_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` - gl_header=$gl_cv_absolute_inttypes_h - gl_cv_next_inttypes_h='"'$gl_header'"' + gl_header=$gl_cv_absolute_stdint_h + gl_cv_next_stdint_h='"'$gl_header'"' else - gl_cv_next_inttypes_h='<'inttypes.h'>' + gl_cv_next_stdint_h='<'stdint.h'>' fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_inttypes_h" >&5 -$as_echo "$gl_cv_next_inttypes_h" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stdint_h" >&5 +$as_echo "$gl_cv_next_stdint_h" >&6; } fi - NEXT_INTTYPES_H=$gl_cv_next_inttypes_h + NEXT_STDINT_H=$gl_cv_next_stdint_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' - gl_next_as_first_directive='<'inttypes.h'>' + gl_next_as_first_directive='<'stdint.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' - gl_next_as_first_directive=$gl_cv_next_inttypes_h + gl_next_as_first_directive=$gl_cv_next_stdint_h fi - NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H=$gl_next_as_first_directive - - + NEXT_AS_FIRST_DIRECTIVE_STDINT_H=$gl_next_as_first_directive + if test $ac_cv_header_stdint_h = yes; then + HAVE_STDINT_H=1 + else + HAVE_STDINT_H=0 + fi - for gl_func in imaxabs imaxdiv strtoimax strtoumax; do - as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh` - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5 -$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; } -if eval \${$as_gl_Symbol+:} false; then : + if test $ac_cv_header_stdint_h = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stdint.h conforms to C99" >&5 +$as_echo_n "checking whether stdint.h conforms to C99... " >&6; } +if ${gl_cv_header_working_stdint_h+:} false; then : $as_echo_n "(cached) " >&6 else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + gl_cv_header_working_stdint_h=no + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include <inttypes.h> - -int -main () -{ -#undef $gl_func - (void) $gl_func; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$as_gl_Symbol=yes" -else - eval "$as_gl_Symbol=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$as_gl_Symbol - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - if eval test \"x\$"$as_gl_Symbol"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1 -_ACEOF - - eval ac_cv_have_decl_$gl_func=yes -fi - done - - - for ac_header in inttypes.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "inttypes.h" "ac_cv_header_inttypes_h" "$ac_includes_default" -if test "x$ac_cv_header_inttypes_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_INTTYPES_H 1 -_ACEOF -fi +#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ +#define __STDC_CONSTANT_MACROS 1 +#define __STDC_LIMIT_MACROS 1 +#include <stdint.h> +/* Dragonfly defines WCHAR_MIN, WCHAR_MAX only in <wchar.h>. */ +#if !(defined WCHAR_MIN && defined WCHAR_MAX) +#error "WCHAR_MIN, WCHAR_MAX not defined in <stdint.h>" +#endif -done - if test $ac_cv_header_inttypes_h = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the inttypes.h PRIxNN macros are broken" >&5 -$as_echo_n "checking whether the inttypes.h PRIxNN macros are broken... " >&6; } -if ${gt_cv_inttypes_pri_broken+:} false; then : - $as_echo_n "(cached) " >&6 -else + /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ + #include <stddef.h> + #include <signal.h> + #if HAVE_WCHAR_H + # include <stdio.h> + # include <time.h> + # include <wchar.h> + #endif - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <inttypes.h> -#ifdef PRId32 -char *p = PRId32; +#ifdef INT8_MAX +int8_t a1 = INT8_MAX; +int8_t a1min = INT8_MIN; +#endif +#ifdef INT16_MAX +int16_t a2 = INT16_MAX; +int16_t a2min = INT16_MIN; +#endif +#ifdef INT32_MAX +int32_t a3 = INT32_MAX; +int32_t a3min = INT32_MIN; +#endif +#ifdef INT64_MAX +int64_t a4 = INT64_MAX; +int64_t a4min = INT64_MIN; +#endif +#ifdef UINT8_MAX +uint8_t b1 = UINT8_MAX; +#else +typedef int b1[(unsigned char) -1 != 255 ? 1 : -1]; +#endif +#ifdef UINT16_MAX +uint16_t b2 = UINT16_MAX; +#endif +#ifdef UINT32_MAX +uint32_t b3 = UINT32_MAX; +#endif +#ifdef UINT64_MAX +uint64_t b4 = UINT64_MAX; +#endif +int_least8_t c1 = INT8_C (0x7f); +int_least8_t c1max = INT_LEAST8_MAX; +int_least8_t c1min = INT_LEAST8_MIN; +int_least16_t c2 = INT16_C (0x7fff); +int_least16_t c2max = INT_LEAST16_MAX; +int_least16_t c2min = INT_LEAST16_MIN; +int_least32_t c3 = INT32_C (0x7fffffff); +int_least32_t c3max = INT_LEAST32_MAX; +int_least32_t c3min = INT_LEAST32_MIN; +int_least64_t c4 = INT64_C (0x7fffffffffffffff); +int_least64_t c4max = INT_LEAST64_MAX; +int_least64_t c4min = INT_LEAST64_MIN; +uint_least8_t d1 = UINT8_C (0xff); +uint_least8_t d1max = UINT_LEAST8_MAX; +uint_least16_t d2 = UINT16_C (0xffff); +uint_least16_t d2max = UINT_LEAST16_MAX; +uint_least32_t d3 = UINT32_C (0xffffffff); +uint_least32_t d3max = UINT_LEAST32_MAX; +uint_least64_t d4 = UINT64_C (0xffffffffffffffff); +uint_least64_t d4max = UINT_LEAST64_MAX; +int_fast8_t e1 = INT_FAST8_MAX; +int_fast8_t e1min = INT_FAST8_MIN; +int_fast16_t e2 = INT_FAST16_MAX; +int_fast16_t e2min = INT_FAST16_MIN; +int_fast32_t e3 = INT_FAST32_MAX; +int_fast32_t e3min = INT_FAST32_MIN; +int_fast64_t e4 = INT_FAST64_MAX; +int_fast64_t e4min = INT_FAST64_MIN; +uint_fast8_t f1 = UINT_FAST8_MAX; +uint_fast16_t f2 = UINT_FAST16_MAX; +uint_fast32_t f3 = UINT_FAST32_MAX; +uint_fast64_t f4 = UINT_FAST64_MAX; +#ifdef INTPTR_MAX +intptr_t g = INTPTR_MAX; +intptr_t gmin = INTPTR_MIN; +#endif +#ifdef UINTPTR_MAX +uintptr_t h = UINTPTR_MAX; +#endif +intmax_t i = INTMAX_MAX; +uintmax_t j = UINTMAX_MAX; + +/* Check that SIZE_MAX has the correct type, if possible. */ +#if 201112 <= __STDC_VERSION__ +int k = _Generic (SIZE_MAX, size_t: 0); +#elif (2 <= __GNUC__ || defined __IBM__TYPEOF__ \ + || (0x5110 <= __SUNPRO_C && !__STDC__)) +extern size_t k; +extern __typeof__ (SIZE_MAX) k; +#endif + +#include <limits.h> /* for CHAR_BIT */ +#define TYPE_MINIMUM(t) \ + ((t) ((t) 0 < (t) -1 ? (t) 0 : ~ TYPE_MAXIMUM (t))) +#define TYPE_MAXIMUM(t) \ + ((t) ((t) 0 < (t) -1 \ + ? (t) -1 \ + : ((((t) 1 << (sizeof (t) * CHAR_BIT - 2)) - 1) * 2 + 1))) +struct s { + int check_PTRDIFF: + PTRDIFF_MIN == TYPE_MINIMUM (ptrdiff_t) + && PTRDIFF_MAX == TYPE_MAXIMUM (ptrdiff_t) + ? 1 : -1; + /* Detect bug in FreeBSD 6.0 / ia64. */ + int check_SIG_ATOMIC: + SIG_ATOMIC_MIN == TYPE_MINIMUM (sig_atomic_t) + && SIG_ATOMIC_MAX == TYPE_MAXIMUM (sig_atomic_t) + ? 1 : -1; + int check_SIZE: SIZE_MAX == TYPE_MAXIMUM (size_t) ? 1 : -1; + int check_WCHAR: + WCHAR_MIN == TYPE_MINIMUM (wchar_t) + && WCHAR_MAX == TYPE_MAXIMUM (wchar_t) + ? 1 : -1; + /* Detect bug in mingw. */ + int check_WINT: + WINT_MIN == TYPE_MINIMUM (wint_t) + && WINT_MAX == TYPE_MAXIMUM (wint_t) + ? 1 : -1; + + /* Detect bugs in glibc 2.4 and Solaris 10 stdint.h, among others. */ + int check_UINT8_C: + (-1 < UINT8_C (0)) == (-1 < (uint_least8_t) 0) ? 1 : -1; + int check_UINT16_C: + (-1 < UINT16_C (0)) == (-1 < (uint_least16_t) 0) ? 1 : -1; + + /* Detect bugs in OpenBSD 3.9 stdint.h. */ +#ifdef UINT8_MAX + int check_uint8: (uint8_t) -1 == UINT8_MAX ? 1 : -1; +#endif +#ifdef UINT16_MAX + int check_uint16: (uint16_t) -1 == UINT16_MAX ? 1 : -1; +#endif +#ifdef UINT32_MAX + int check_uint32: (uint32_t) -1 == UINT32_MAX ? 1 : -1; +#endif +#ifdef UINT64_MAX + int check_uint64: (uint64_t) -1 == UINT64_MAX ? 1 : -1; #endif + int check_uint_least8: (uint_least8_t) -1 == UINT_LEAST8_MAX ? 1 : -1; + int check_uint_least16: (uint_least16_t) -1 == UINT_LEAST16_MAX ? 1 : -1; + int check_uint_least32: (uint_least32_t) -1 == UINT_LEAST32_MAX ? 1 : -1; + int check_uint_least64: (uint_least64_t) -1 == UINT_LEAST64_MAX ? 1 : -1; + int check_uint_fast8: (uint_fast8_t) -1 == UINT_FAST8_MAX ? 1 : -1; + int check_uint_fast16: (uint_fast16_t) -1 == UINT_FAST16_MAX ? 1 : -1; + int check_uint_fast32: (uint_fast32_t) -1 == UINT_FAST32_MAX ? 1 : -1; + int check_uint_fast64: (uint_fast64_t) -1 == UINT_FAST64_MAX ? 1 : -1; + int check_uintptr: (uintptr_t) -1 == UINTPTR_MAX ? 1 : -1; + int check_uintmax: (uintmax_t) -1 == UINTMAX_MAX ? 1 : -1; + int check_size: (size_t) -1 == SIZE_MAX ? 1 : -1; +}; int main () @@ -11828,3848 +12238,3379 @@ } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : - gt_cv_inttypes_pri_broken=no -else - gt_cv_inttypes_pri_broken=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_inttypes_pri_broken" >&5 -$as_echo "$gt_cv_inttypes_pri_broken" >&6; } - fi - if test "$gt_cv_inttypes_pri_broken" = yes; then - -cat >>confdefs.h <<_ACEOF -#define PRI_MACROS_BROKEN 1 -_ACEOF + if test "$cross_compiling" = yes; then : + case "$host_os" in + # Guess yes on native Windows. + mingw*) gl_cv_header_working_stdint_h="guessing yes" ;; + # In general, assume it works. + *) gl_cv_header_working_stdint_h="guessing yes" ;; + esac - PRI_MACROS_BROKEN=1 - else - PRI_MACROS_BROKEN=0 - fi +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ +#define __STDC_CONSTANT_MACROS 1 +#define __STDC_LIMIT_MACROS 1 +#include <stdint.h> - { $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the exponent in a 'double'" >&5 -$as_echo_n "checking where to find the exponent in a 'double'... " >&6; } -if ${gl_cv_cc_double_expbit0+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : + /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ + #include <stddef.h> + #include <signal.h> + #if HAVE_WCHAR_H + # include <stdio.h> + # include <time.h> + # include <wchar.h> + #endif - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#if defined arm || defined __arm || defined __arm__ - mixed_endianness +#include <stdio.h> +#include <string.h> +#define MVAL(macro) MVAL1(macro) +#define MVAL1(expression) #expression +static const char *macro_values[] = + { +#ifdef INT8_MAX + MVAL (INT8_MAX), +#endif +#ifdef INT16_MAX + MVAL (INT16_MAX), +#endif +#ifdef INT32_MAX + MVAL (INT32_MAX), +#endif +#ifdef INT64_MAX + MVAL (INT64_MAX), +#endif +#ifdef UINT8_MAX + MVAL (UINT8_MAX), #endif +#ifdef UINT16_MAX + MVAL (UINT16_MAX), +#endif +#ifdef UINT32_MAX + MVAL (UINT32_MAX), +#endif +#ifdef UINT64_MAX + MVAL (UINT64_MAX), +#endif + NULL + }; -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "mixed_endianness" >/dev/null 2>&1; then : - gl_cv_cc_double_expbit0="unknown" -else +int +main () +{ - : -if ${ac_cv_c_bigendian+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_c_bigendian=unknown - # See if we're dealing with a universal compiler. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifndef __APPLE_CC__ - not a universal capable compiler - #endif - typedef int dummy; + const char **mv; + for (mv = macro_values; *mv != NULL; mv++) + { + const char *value = *mv; + /* Test whether it looks like a cast expression. */ + if (strncmp (value, "((unsigned int)"/*)*/, 15) == 0 + || strncmp (value, "((unsigned short)"/*)*/, 17) == 0 + || strncmp (value, "((unsigned char)"/*)*/, 16) == 0 + || strncmp (value, "((int)"/*)*/, 6) == 0 + || strncmp (value, "((signed short)"/*)*/, 15) == 0 + || strncmp (value, "((signed char)"/*)*/, 14) == 0) + return mv - macro_values + 1; + } + return 0; + ; + return 0; +} _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_header_working_stdint_h=yes +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + - # Check for potential -arch flags. It is not universal unless - # there are at least two -arch flags with different values. - ac_arch= - ac_prev= - for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do - if test -n "$ac_prev"; then - case $ac_word in - i?86 | x86_64 | ppc | ppc64) - if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then - ac_arch=$ac_word - else - ac_cv_c_bigendian=universal - break - fi - ;; - esac - ac_prev= - elif test "x$ac_word" = "x-arch"; then - ac_prev=arch - fi - done fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - if test $ac_cv_c_bigendian = unknown; then - # See if sys/param.h defines the BYTE_ORDER macro. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <sys/types.h> - #include <sys/param.h> -int -main () -{ -#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ - && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ - && LITTLE_ENDIAN) - bogus endian macros - #endif +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_working_stdint_h" >&5 +$as_echo "$gl_cv_header_working_stdint_h" >&6; } + fi - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - # It does; now see whether it defined to BIG_ENDIAN or not. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + HAVE_C99_STDINT_H=0 + HAVE_SYS_BITYPES_H=0 + HAVE_SYS_INTTYPES_H=0 + STDINT_H=stdint.h + case "$gl_cv_header_working_stdint_h" in + *yes) + HAVE_C99_STDINT_H=1 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stdint.h predates C++11" >&5 +$as_echo_n "checking whether stdint.h predates C++11... " >&6; } +if ${gl_cv_header_stdint_predates_cxx11_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + gl_cv_header_stdint_predates_cxx11_h=yes + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include <sys/types.h> - #include <sys/param.h> + + +#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ +#include <stdint.h> + + + /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ + #include <stddef.h> + #include <signal.h> + #if HAVE_WCHAR_H + # include <stdio.h> + # include <time.h> + # include <wchar.h> + #endif + + +intmax_t im = INTMAX_MAX; +int32_t i32 = INT32_C (0x7fffffff); int main () { -#if BYTE_ORDER != BIG_ENDIAN - not big endian - #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_c_bigendian=yes -else - ac_cv_c_bigendian=no + gl_cv_header_stdint_predates_cxx11_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi - if test $ac_cv_c_bigendian = unknown; then - # See if <limits.h> defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <limits.h> +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_stdint_predates_cxx11_h" >&5 +$as_echo "$gl_cv_header_stdint_predates_cxx11_h" >&6; } -int -main () -{ -#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) - bogus endian macros - #endif + if test "$gl_cv_header_stdint_predates_cxx11_h" = yes; then - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - # It does; now see whether it defined to _BIG_ENDIAN or not. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <limits.h> +$as_echo "#define __STDC_CONSTANT_MACROS 1" >>confdefs.h -int -main () -{ -#ifndef _BIG_ENDIAN - not big endian - #endif - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_c_bigendian=yes +$as_echo "#define __STDC_LIMIT_MACROS 1" >>confdefs.h + + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stdint.h has UINTMAX_WIDTH etc." >&5 +$as_echo_n "checking whether stdint.h has UINTMAX_WIDTH etc.... " >&6; } +if ${gl_cv_header_stdint_width+:} false; then : + $as_echo_n "(cached) " >&6 else - ac_cv_c_bigendian=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi - if test $ac_cv_c_bigendian = unknown; then - # Compile a test program. - if test "$cross_compiling" = yes; then : - # Try to guess by grepping values from an object file. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + gl_cv_header_stdint_width=no + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -short int ascii_mm[] = - { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; - short int ascii_ii[] = - { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; - int use_ascii (int i) { - return ascii_mm[i] + ascii_ii[i]; - } - short int ebcdic_ii[] = - { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; - short int ebcdic_mm[] = - { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; - int use_ebcdic (int i) { - return ebcdic_mm[i] + ebcdic_ii[i]; - } - extern int foo; + + /* Work if build is not clean. */ + #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 + #ifndef __STDC_WANT_IEC_60559_BFP_EXT__ + #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 + #endif + #include <stdint.h> + + /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ + #include <stddef.h> + #include <signal.h> + #if HAVE_WCHAR_H + # include <stdio.h> + # include <time.h> + # include <wchar.h> + #endif + + int iw = UINTMAX_WIDTH; int main () { -return use_ascii (foo) == use_ebcdic (foo); + ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : - if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then - ac_cv_c_bigendian=yes - fi - if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then - if test "$ac_cv_c_bigendian" = unknown; then - ac_cv_c_bigendian=no - else - # finding both strings is unlikely to happen, but who knows? - ac_cv_c_bigendian=unknown - fi - fi + gl_cv_header_stdint_width=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ - - /* Are we little or big endian? From Harbison&Steele. */ - union - { - long int l; - char c[sizeof (long int)]; - } u; - u.l = 1; - return u.c[sizeof (long int) - 1] == 1; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_c_bigendian=no -else - ac_cv_c_bigendian=yes -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_stdint_width" >&5 +$as_echo "$gl_cv_header_stdint_width" >&6; } + if test "$gl_cv_header_stdint_width" = yes; then + STDINT_H= + fi + ;; + *) + for ac_header in sys/inttypes.h sys/bitypes.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF - fi fi -: - case $ac_cv_c_bigendian in #( - yes) - gl_cv_cc_double_expbit0="word 0 bit 20";; #( - no) - gl_cv_cc_double_expbit0="word 1 bit 20" ;; #( - universal) -$as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h +done - ;; #( - *) - gl_cv_cc_double_expbit0="unknown" ;; - esac + if test $ac_cv_header_sys_inttypes_h = yes; then + HAVE_SYS_INTTYPES_H=1 + fi + if test $ac_cv_header_sys_bitypes_h = yes; then + HAVE_SYS_BITYPES_H=1 + fi -fi -rm -f conftest* + if test $APPLE_UNIVERSAL_BUILD = 0; then + for gltype in ptrdiff_t size_t ; do + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for bit size of $gltype" >&5 +$as_echo_n "checking for bit size of $gltype... " >&6; } +if eval \${gl_cv_bitsizeof_${gltype}+:} false; then : + $as_echo_n "(cached) " >&6 else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ + if ac_fn_c_compute_int "$LINENO" "sizeof ($gltype) * CHAR_BIT" "result" " + /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ + #include <stddef.h> + #include <signal.h> + #if HAVE_WCHAR_H + # include <stdio.h> + # include <time.h> + # include <wchar.h> + #endif -#include <float.h> -#include <stddef.h> -#include <stdio.h> -#include <string.h> -#define NWORDS \ - ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) -typedef union { double value; unsigned int word[NWORDS]; } memory_double; -static unsigned int ored_words[NWORDS]; -static unsigned int anded_words[NWORDS]; -static void add_to_ored_words (double x) -{ - memory_double m; - size_t i; - /* Clear it first, in case sizeof (double) < sizeof (memory_double). */ - memset (&m, 0, sizeof (memory_double)); - m.value = x; - for (i = 0; i < NWORDS; i++) - { - ored_words[i] |= m.word[i]; - anded_words[i] &= m.word[i]; - } -} -int main () -{ - size_t j; - FILE *fp = fopen ("conftest.out", "w"); - if (fp == NULL) - return 1; - for (j = 0; j < NWORDS; j++) - anded_words[j] = ~ (unsigned int) 0; - add_to_ored_words (0.25); - add_to_ored_words (0.5); - add_to_ored_words (1.0); - add_to_ored_words (2.0); - add_to_ored_words (4.0); - /* Remove bits that are common (e.g. if representation of the first mantissa - bit is explicit). */ - for (j = 0; j < NWORDS; j++) - ored_words[j] &= ~anded_words[j]; - /* Now find the nonzero word. */ - for (j = 0; j < NWORDS; j++) - if (ored_words[j] != 0) - break; - if (j < NWORDS) - { - size_t i; - for (i = j + 1; i < NWORDS; i++) - if (ored_words[i] != 0) - { - fprintf (fp, "unknown"); - return (fclose (fp) != 0); - } - for (i = 0; ; i++) - if ((ored_words[j] >> i) & 1) - { - fprintf (fp, "word %d bit %d", (int) j, (int) i); - return (fclose (fp) != 0); - } - } - fprintf (fp, "unknown"); - return (fclose (fp) != 0); -} +#include <limits.h>"; then : -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - gl_cv_cc_double_expbit0=`cat conftest.out` else - gl_cv_cc_double_expbit0="unknown" -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext + result=unknown fi - rm -f conftest.out + eval gl_cv_bitsizeof_${gltype}=\$result fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_double_expbit0" >&5 -$as_echo "$gl_cv_cc_double_expbit0" >&6; } - case "$gl_cv_cc_double_expbit0" in - word*bit*) - word=`echo "$gl_cv_cc_double_expbit0" | sed -e 's/word //' -e 's/ bit.*//'` - bit=`echo "$gl_cv_cc_double_expbit0" | sed -e 's/word.*bit //'` - -cat >>confdefs.h <<_ACEOF -#define DBL_EXPBIT0_WORD $word +eval ac_res=\$gl_cv_bitsizeof_${gltype} + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval result=\$gl_cv_bitsizeof_${gltype} + if test $result = unknown; then + result=0 + fi + GLTYPE=`echo "$gltype" | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` + cat >>confdefs.h <<_ACEOF +#define BITSIZEOF_${GLTYPE} $result _ACEOF + eval BITSIZEOF_${GLTYPE}=\$result + done -cat >>confdefs.h <<_ACEOF -#define DBL_EXPBIT0_BIT $bit -_ACEOF - ;; - esac + fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 -$as_echo_n "checking whether byte ordering is bigendian... " >&6; } -if ${ac_cv_c_bigendian+:} false; then : + for gltype in sig_atomic_t wchar_t wint_t ; do + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for bit size of $gltype" >&5 +$as_echo_n "checking for bit size of $gltype... " >&6; } +if eval \${gl_cv_bitsizeof_${gltype}+:} false; then : $as_echo_n "(cached) " >&6 else - ac_cv_c_bigendian=unknown - # See if we're dealing with a universal compiler. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifndef __APPLE_CC__ - not a universal capable compiler - #endif - typedef int dummy; + if ac_fn_c_compute_int "$LINENO" "sizeof ($gltype) * CHAR_BIT" "result" " + /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ + #include <stddef.h> + #include <signal.h> + #if HAVE_WCHAR_H + # include <stdio.h> + # include <time.h> + # include <wchar.h> + #endif -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +#include <limits.h>"; then : - # Check for potential -arch flags. It is not universal unless - # there are at least two -arch flags with different values. - ac_arch= - ac_prev= - for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do - if test -n "$ac_prev"; then - case $ac_word in - i?86 | x86_64 | ppc | ppc64) - if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then - ac_arch=$ac_word - else - ac_cv_c_bigendian=universal - break - fi - ;; - esac - ac_prev= - elif test "x$ac_word" = "x-arch"; then - ac_prev=arch - fi - done +else + result=unknown fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - if test $ac_cv_c_bigendian = unknown; then - # See if sys/param.h defines the BYTE_ORDER macro. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <sys/types.h> - #include <sys/param.h> -int -main () -{ -#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ - && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ - && LITTLE_ENDIAN) - bogus endian macros - #endif + eval gl_cv_bitsizeof_${gltype}=\$result - ; - return 0; -} +fi +eval ac_res=\$gl_cv_bitsizeof_${gltype} + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval result=\$gl_cv_bitsizeof_${gltype} + if test $result = unknown; then + result=0 + fi + GLTYPE=`echo "$gltype" | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` + cat >>confdefs.h <<_ACEOF +#define BITSIZEOF_${GLTYPE} $result _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - # It does; now see whether it defined to BIG_ENDIAN or not. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + + eval BITSIZEOF_${GLTYPE}=\$result + done + + + + + for gltype in sig_atomic_t wchar_t wint_t ; do + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gltype is signed" >&5 +$as_echo_n "checking whether $gltype is signed... " >&6; } +if eval \${gl_cv_type_${gltype}_signed+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include <sys/types.h> - #include <sys/param.h> + /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ + #include <stddef.h> + #include <signal.h> + #if HAVE_WCHAR_H + # include <stdio.h> + # include <time.h> + # include <wchar.h> + #endif + + int verify[2 * (($gltype) -1 < ($gltype) 0) - 1]; int main () { -#if BYTE_ORDER != BIG_ENDIAN - not big endian - #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_c_bigendian=yes + result=yes else - ac_cv_c_bigendian=no + result=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + eval gl_cv_type_${gltype}_signed=\$result + fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +eval ac_res=\$gl_cv_type_${gltype}_signed + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval result=\$gl_cv_type_${gltype}_signed + GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` + if test "$result" = yes; then + cat >>confdefs.h <<_ACEOF +#define HAVE_SIGNED_${GLTYPE} 1 +_ACEOF + + eval HAVE_SIGNED_${GLTYPE}=1 + else + eval HAVE_SIGNED_${GLTYPE}=0 fi - if test $ac_cv_c_bigendian = unknown; then - # See if <limits.h> defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <limits.h> + done -int -main () -{ -#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) - bogus endian macros - #endif - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - # It does; now see whether it defined to _BIG_ENDIAN or not. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <limits.h> + gl_cv_type_ptrdiff_t_signed=yes + gl_cv_type_size_t_signed=no + if test $APPLE_UNIVERSAL_BUILD = 0; then -int -main () -{ -#ifndef _BIG_ENDIAN - not big endian - #endif - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_c_bigendian=yes + for gltype in ptrdiff_t size_t ; do + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $gltype integer literal suffix" >&5 +$as_echo_n "checking for $gltype integer literal suffix... " >&6; } +if eval \${gl_cv_type_${gltype}_suffix+:} false; then : + $as_echo_n "(cached) " >&6 else - ac_cv_c_bigendian=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi - if test $ac_cv_c_bigendian = unknown; then - # Compile a test program. - if test "$cross_compiling" = yes; then : - # Try to guess by grepping values from an object file. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + eval gl_cv_type_${gltype}_suffix=no + eval result=\$gl_cv_type_${gltype}_signed + if test "$result" = yes; then + glsufu= + else + glsufu=u + fi + for glsuf in "$glsufu" ${glsufu}l ${glsufu}ll ${glsufu}i64; do + case $glsuf in + '') gltype1='int';; + l) gltype1='long int';; + ll) gltype1='long long int';; + i64) gltype1='__int64';; + u) gltype1='unsigned int';; + ul) gltype1='unsigned long int';; + ull) gltype1='unsigned long long int';; + ui64)gltype1='unsigned __int64';; + esac + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -short int ascii_mm[] = - { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; - short int ascii_ii[] = - { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; - int use_ascii (int i) { - return ascii_mm[i] + ascii_ii[i]; - } - short int ebcdic_ii[] = - { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; - short int ebcdic_mm[] = - { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; - int use_ebcdic (int i) { - return ebcdic_mm[i] + ebcdic_ii[i]; - } - extern int foo; + /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ + #include <stddef.h> + #include <signal.h> + #if HAVE_WCHAR_H + # include <stdio.h> + # include <time.h> + # include <wchar.h> + #endif + + extern $gltype foo; + extern $gltype1 foo; int main () { -return use_ascii (foo) == use_ebcdic (foo); + ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : - if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then - ac_cv_c_bigendian=yes - fi - if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then - if test "$ac_cv_c_bigendian" = unknown; then - ac_cv_c_bigendian=no - else - # finding both strings is unlikely to happen, but who knows? - ac_cv_c_bigendian=unknown - fi - fi + eval gl_cv_type_${gltype}_suffix=\$glsuf fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ - - /* Are we little or big endian? From Harbison&Steele. */ - union - { - long int l; - char c[sizeof (long int)]; - } u; - u.l = 1; - return u.c[sizeof (long int) - 1] == 1; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_c_bigendian=no -else - ac_cv_c_bigendian=yes -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - fi + eval result=\$gl_cv_type_${gltype}_suffix + test "$result" != no && break + done fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 -$as_echo "$ac_cv_c_bigendian" >&6; } - case $ac_cv_c_bigendian in #( - yes) - $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h -;; #( - no) - ;; #( - universal) +eval ac_res=\$gl_cv_type_${gltype}_suffix + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` + eval result=\$gl_cv_type_${gltype}_suffix + test "$result" = no && result= + eval ${GLTYPE}_SUFFIX=\$result + cat >>confdefs.h <<_ACEOF +#define ${GLTYPE}_SUFFIX $result +_ACEOF -$as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h + done - ;; #( - *) - as_fn_error $? "unknown endianness - presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;; - esac + fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nl_langinfo and CODESET" >&5 -$as_echo_n "checking for nl_langinfo and CODESET... " >&6; } -if ${am_cv_langinfo_codeset+:} false; then : + for gltype in sig_atomic_t wchar_t wint_t ; do + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $gltype integer literal suffix" >&5 +$as_echo_n "checking for $gltype integer literal suffix... " >&6; } +if eval \${gl_cv_type_${gltype}_suffix+:} false; then : $as_echo_n "(cached) " >&6 else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + eval gl_cv_type_${gltype}_suffix=no + eval result=\$gl_cv_type_${gltype}_signed + if test "$result" = yes; then + glsufu= + else + glsufu=u + fi + for glsuf in "$glsufu" ${glsufu}l ${glsufu}ll ${glsufu}i64; do + case $glsuf in + '') gltype1='int';; + l) gltype1='long int';; + ll) gltype1='long long int';; + i64) gltype1='__int64';; + u) gltype1='unsigned int';; + ul) gltype1='unsigned long int';; + ull) gltype1='unsigned long long int';; + ui64)gltype1='unsigned __int64';; + esac + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include <langinfo.h> + + /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ + #include <stddef.h> + #include <signal.h> + #if HAVE_WCHAR_H + # include <stdio.h> + # include <time.h> + # include <wchar.h> + #endif + + extern $gltype foo; + extern $gltype1 foo; int main () { -char* cs = nl_langinfo(CODESET); return !cs; + ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : - am_cv_langinfo_codeset=yes -else - am_cv_langinfo_codeset=no +if ac_fn_c_try_compile "$LINENO"; then : + eval gl_cv_type_${gltype}_suffix=\$glsuf fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + eval result=\$gl_cv_type_${gltype}_suffix + test "$result" != no && break + done fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_langinfo_codeset" >&5 -$as_echo "$am_cv_langinfo_codeset" >&6; } - if test $am_cv_langinfo_codeset = yes; then +eval ac_res=\$gl_cv_type_${gltype}_suffix + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` + eval result=\$gl_cv_type_${gltype}_suffix + test "$result" = no && result= + eval ${GLTYPE}_SUFFIX=\$result + cat >>confdefs.h <<_ACEOF +#define ${GLTYPE}_SUFFIX $result +_ACEOF + + done -$as_echo "#define HAVE_LANGINFO_CODESET 1" >>confdefs.h + + if test $GNULIB_OVERRIDES_WINT_T = 1; then + BITSIZEOF_WINT_T=32 fi + ;; + esac - ac_fn_c_check_decl "$LINENO" "getc_unlocked" "ac_cv_have_decl_getc_unlocked" "$ac_includes_default" -if test "x$ac_cv_have_decl_getc_unlocked" = xyes; then : - ac_have_decl=1 + + + LIMITS_H='limits.h' + if test -n "$LIMITS_H"; then + GL_GENERATE_LIMITS_H_TRUE= + GL_GENERATE_LIMITS_H_FALSE='#' else - ac_have_decl=0 + GL_GENERATE_LIMITS_H_TRUE='#' + GL_GENERATE_LIMITS_H_FALSE= fi -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_GETC_UNLOCKED $ac_have_decl -_ACEOF - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C Library >= 2.1 or uClibc" >&5 -$as_echo_n "checking whether we are using the GNU C Library >= 2.1 or uClibc... " >&6; } -if ${ac_cv_gnu_library_2_1+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <features.h> -#ifdef __GNU_LIBRARY__ - #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2) - Lucky GNU user - #endif -#endif -#ifdef __UCLIBC__ - Lucky user -#endif -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "Lucky" >/dev/null 2>&1; then : - ac_cv_gnu_library_2_1=yes + + if test -n "$STDINT_H"; then + GL_GENERATE_STDINT_H_TRUE= + GL_GENERATE_STDINT_H_FALSE='#' else - ac_cv_gnu_library_2_1=no + GL_GENERATE_STDINT_H_TRUE='#' + GL_GENERATE_STDINT_H_FALSE= fi -rm -f conftest* -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gnu_library_2_1" >&5 -$as_echo "$ac_cv_gnu_library_2_1" >&6; } - GLIBC21="$ac_cv_gnu_library_2_1" + GNULIB_IMAXABS=0; + GNULIB_IMAXDIV=0; + GNULIB_STRTOIMAX=0; + GNULIB_STRTOUMAX=0; + HAVE_DECL_IMAXABS=1; + HAVE_DECL_IMAXDIV=1; + HAVE_DECL_STRTOIMAX=1; + HAVE_DECL_STRTOUMAX=1; + HAVE_IMAXDIV_T=1; + REPLACE_STRTOIMAX=0; + REPLACE_STRTOUMAX=0; + INT32_MAX_LT_INTMAX_MAX=1; + INT64_MAX_EQ_LONG_MAX='defined _LP64'; + PRI_MACROS_BROKEN=0; + PRIPTR_PREFIX=__PRIPTR_PREFIX; + UINT32_MAX_LT_UINTMAX_MAX=1; + UINT64_MAX_EQ_ULONG_MAX='defined _LP64'; - if test "X$prefix" = "XNONE"; then - acl_final_prefix="$ac_default_prefix" - else - acl_final_prefix="$prefix" - fi - if test "X$exec_prefix" = "XNONE"; then - acl_final_exec_prefix='${prefix}' - else - acl_final_exec_prefix="$exec_prefix" - fi - acl_save_prefix="$prefix" - prefix="$acl_final_prefix" - eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" - prefix="$acl_save_prefix" -# Check whether --with-gnu-ld was given. -if test "${with_gnu_ld+set}" = set; then : - withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes -else - with_gnu_ld=no -fi -# Prepare PATH_SEPARATOR. -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which - # contains only /bin. Note that ksh looks also at the FPATH variable, - # so we have to set that as well for the test. - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ - && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ - || PATH_SEPARATOR=';' - } -fi -ac_prog=ld -if test "$GCC" = yes; then - # Check if gcc -print-prog-name=ld gives a path. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 -$as_echo_n "checking for ld used by $CC... " >&6; } - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [\\/]* | ?:[\\/]*) - re_direlt='/[^/][^/]*/\.\./' - # Canonicalize the pathname of ld - ac_prog=`echo "$ac_prog"| sed 's%\\\\%/%g'` - while echo "$ac_prog" | grep "$re_direlt" > /dev/null 2>&1; do - ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` - done - test -z "$LD" && LD="$ac_prog" - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test "$with_gnu_ld" = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 -$as_echo_n "checking for GNU ld... " >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 -$as_echo_n "checking for non-GNU ld... " >&6; } -fi -if ${acl_cv_path_LD+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$LD"; then - acl_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS="$acl_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - acl_cv_path_LD="$ac_dir/$ac_prog" - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some variants of GNU ld only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$acl_cv_path_LD" -v 2>&1 </dev/null` in - *GNU* | *'with BFD'*) - test "$with_gnu_ld" != no && break - ;; - *) - test "$with_gnu_ld" != yes && break - ;; - esac - fi - done - IFS="$acl_save_ifs" -else - acl_cv_path_LD="$LD" # Let the user override the test with a path. -fi -fi -LD="$acl_cv_path_LD" -if test -n "$LD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 -$as_echo "$LD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 -$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } -if ${acl_cv_prog_gnu_ld+:} false; then : - $as_echo_n "(cached) " >&6 -else - # I'd rather use --version here, but apparently some GNU lds only accept -v. -case `$LD -v 2>&1 </dev/null` in -*GNU* | *'with BFD'*) - acl_cv_prog_gnu_ld=yes - ;; -*) - acl_cv_prog_gnu_ld=no - ;; -esac -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_prog_gnu_ld" >&5 -$as_echo "$acl_cv_prog_gnu_ld" >&6; } -with_gnu_ld=$acl_cv_prog_gnu_ld - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shared library run path origin" >&5 -$as_echo_n "checking for shared library run path origin... " >&6; } -if ${acl_cv_rpath+:} false; then : - $as_echo_n "(cached) " >&6 -else - CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ - ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh - . ./conftest.sh - rm -f ./conftest.sh - acl_cv_rpath=done -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_rpath" >&5 -$as_echo "$acl_cv_rpath" >&6; } - wl="$acl_cv_wl" - acl_libext="$acl_cv_libext" - acl_shlibext="$acl_cv_shlibext" - acl_libname_spec="$acl_cv_libname_spec" - acl_library_names_spec="$acl_cv_library_names_spec" - acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" - acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" - acl_hardcode_direct="$acl_cv_hardcode_direct" - acl_hardcode_minus_L="$acl_cv_hardcode_minus_L" - # Check whether --enable-rpath was given. -if test "${enable_rpath+set}" = set; then : - enableval=$enable_rpath; : + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_inttypes_h='<'inttypes.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <inttypes.h>" >&5 +$as_echo_n "checking absolute name of <inttypes.h>... " >&6; } +if ${gl_cv_next_inttypes_h+:} false; then : + $as_echo_n "(cached) " >&6 else - enable_rpath=yes -fi + + if test $ac_cv_header_inttypes_h = yes; then - acl_libdirstem=lib - acl_libdirstem2= - case "$host_os" in - solaris*) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit host" >&5 -$as_echo_n "checking for 64-bit host... " >&6; } -if ${gl_cv_solaris_64bit+:} false; then : - $as_echo_n "(cached) " >&6 -else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ - -#ifdef _LP64 -sixtyfour bits -#endif - +#include <inttypes.h> _ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "sixtyfour bits" >/dev/null 2>&1; then : - gl_cv_solaris_64bit=yes -else - gl_cv_solaris_64bit=no -fi -rm -f conftest* - + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_solaris_64bit" >&5 -$as_echo "$gl_cv_solaris_64bit" >&6; } - if test $gl_cv_solaris_64bit = yes; then - acl_libdirstem=lib/64 - case "$host_cpu" in - sparc*) acl_libdirstem2=lib/sparcv9 ;; - i*86 | x86_64) acl_libdirstem2=lib/amd64 ;; - esac - fi + case "$host_os" in + mingw*) + gl_dirsep_regex='[/\\]' ;; *) - searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` - if test -n "$searchpath"; then - acl_save_IFS="${IFS= }"; IFS=":" - for searchdir in $searchpath; do - if test -d "$searchdir"; then - case "$searchdir" in - */lib64/ | */lib64 ) acl_libdirstem=lib64 ;; - */../ | */.. ) - # Better ignore directories of this form. They are misleading. - ;; - *) searchdir=`cd "$searchdir" && pwd` - case "$searchdir" in - */lib64 ) acl_libdirstem=lib64 ;; - esac ;; - esac - fi - done - IFS="$acl_save_IFS" - fi + gl_dirsep_regex='\/' ;; esac - test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem" + gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' + gl_header_literal_regex=`echo 'inttypes.h' \ + | sed -e "$gl_make_literal_regex_sed"` + gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ + s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ + s|^/[^/]|//&| + p + q + }' + gl_cv_absolute_inttypes_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n "$gl_absolute_header_sed"` + gl_header=$gl_cv_absolute_inttypes_h + gl_cv_next_inttypes_h='"'$gl_header'"' + else + gl_cv_next_inttypes_h='<'inttypes.h'>' + fi - gl_threads_api=none - LIBTHREAD= - LTLIBTHREAD= - LIBMULTITHREAD= - LTLIBMULTITHREAD= - if test "$gl_use_threads" != no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether imported symbols can be declared weak" >&5 -$as_echo_n "checking whether imported symbols can be declared weak... " >&6; } -if ${gl_cv_have_weak+:} false; then : - $as_echo_n "(cached) " >&6 -else - gl_cv_have_weak=no - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -extern void xyzzy (); -#pragma weak xyzzy -int -main () -{ -xyzzy(); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - gl_cv_have_weak=maybe -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - if test $gl_cv_have_weak = maybe; then - if test "$cross_compiling" = yes; then : - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __ELF__ - Extensible Linking Format - #endif -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "Extensible Linking Format" >/dev/null 2>&1; then : - gl_cv_have_weak="guessing yes" -else - gl_cv_have_weak="guessing no" fi -rm -f conftest* +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_inttypes_h" >&5 +$as_echo "$gl_cv_next_inttypes_h" >&6; } + fi + NEXT_INTTYPES_H=$gl_cv_next_inttypes_h + if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' + gl_next_as_first_directive='<'inttypes.h'>' + else + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' + gl_next_as_first_directive=$gl_cv_next_inttypes_h + fi + NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H=$gl_next_as_first_directive -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <stdio.h> -#pragma weak fputs -int main () -{ - return (fputs == NULL); -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - gl_cv_have_weak=yes -else - gl_cv_have_weak=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_have_weak" >&5 -$as_echo "$gl_cv_have_weak" >&6; } - if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then - # On OSF/1, the compiler needs the flag -pthread or -D_REENTRANT so that - # it groks <pthread.h>. It's added above, in gl_THREADLIB_EARLY_BODY. - ac_fn_c_check_header_mongrel "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default" -if test "x$ac_cv_header_pthread_h" = xyes; then : - gl_have_pthread_h=yes -else - gl_have_pthread_h=no -fi - if test "$gl_have_pthread_h" = yes; then - # Other possible tests: - # -lpthreads (FSU threads, PCthreads) - # -lgthreads - gl_have_pthread= - # Test whether both pthread_mutex_lock and pthread_mutexattr_init exist - # in libc. IRIX 6.5 has the first one in both libc and libpthread, but - # the second one only in libpthread, and lock.c needs it. - # - # If -pthread works, prefer it to -lpthread, since Ubuntu 14.04 - # needs -pthread for some reason. See: - # http://lists.gnu.org/archive/html/bug-gnulib/2014-09/msg00023.html - save_LIBS=$LIBS - for gl_pthread in '' '-pthread'; do - LIBS="$LIBS $gl_pthread" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <pthread.h> - pthread_mutex_t m; - pthread_mutexattr_t ma; -int -main () -{ -pthread_mutex_lock (&m); - pthread_mutexattr_init (&ma); - ; - return 0; -} + + + + + + + + for ac_header in inttypes.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "inttypes.h" "ac_cv_header_inttypes_h" "$ac_includes_default" +if test "x$ac_cv_header_inttypes_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_INTTYPES_H 1 _ACEOF -if ac_fn_c_try_link "$LINENO"; then : - gl_have_pthread=yes - LIBTHREAD=$gl_pthread LTLIBTHREAD=$gl_pthread - LIBMULTITHREAD=$gl_pthread LTLIBMULTITHREAD=$gl_pthread + fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LIBS=$save_LIBS - test -n "$gl_have_pthread" && break - done - - # Test for libpthread by looking for pthread_kill. (Not pthread_self, - # since it is defined as a macro on OSF/1.) - if test -n "$gl_have_pthread" && test -z "$LIBTHREAD"; then - # The program links fine without libpthread. But it may actually - # need to link with libpthread in order to create multiple threads. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lpthread" >&5 -$as_echo_n "checking for pthread_kill in -lpthread... " >&6; } -if ${ac_cv_lib_pthread_pthread_kill+:} false; then : + +done + + if test $ac_cv_header_inttypes_h = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the inttypes.h PRIxNN macros are broken" >&5 +$as_echo_n "checking whether the inttypes.h PRIxNN macros are broken... " >&6; } +if ${gt_cv_inttypes_pri_broken+:} false; then : $as_echo_n "(cached) " >&6 else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lpthread $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" +#include <inttypes.h> +#ifdef PRId32 +char *p = PRId32; #endif -char pthread_kill (); + int main () { -return pthread_kill (); + ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_pthread_pthread_kill=yes +if ac_fn_c_try_compile "$LINENO"; then : + gt_cv_inttypes_pri_broken=no else - ac_cv_lib_pthread_pthread_kill=no + gt_cv_inttypes_pri_broken=yes fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_kill" >&5 -$as_echo "$ac_cv_lib_pthread_pthread_kill" >&6; } -if test "x$ac_cv_lib_pthread_pthread_kill" = xyes; then : - LIBMULTITHREAD=-lpthread LTLIBMULTITHREAD=-lpthread - # On Solaris and HP-UX, most pthread functions exist also in libc. - # Therefore pthread_in_use() needs to actually try to create a - # thread: pthread_create from libc will fail, whereas - # pthread_create will actually create a thread. - case "$host_os" in - solaris* | hpux*) +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_inttypes_pri_broken" >&5 +$as_echo "$gt_cv_inttypes_pri_broken" >&6; } + fi + if test "$gt_cv_inttypes_pri_broken" = yes; then -$as_echo "#define PTHREAD_IN_USE_DETECTION_HARD 1" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define PRI_MACROS_BROKEN 1 +_ACEOF - esac + PRI_MACROS_BROKEN=1 + else + PRI_MACROS_BROKEN=0 + fi -fi - elif test -z "$gl_have_pthread"; then - # Some library is needed. Try libpthread and libc_r. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lpthread" >&5 -$as_echo_n "checking for pthread_kill in -lpthread... " >&6; } -if ${ac_cv_lib_pthread_pthread_kill+:} false; then : + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the exponent in a 'double'" >&5 +$as_echo_n "checking where to find the exponent in a 'double'... " >&6; } +if ${gl_cv_cc_double_expbit0+:} false; then : $as_echo_n "(cached) " >&6 else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lpthread $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext + + if test "$cross_compiling" = yes; then : + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" +#if defined arm || defined __arm || defined __arm__ + mixed_endianness #endif -char pthread_kill (); + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "mixed_endianness" >/dev/null 2>&1; then : + gl_cv_cc_double_expbit0="unknown" +else + + : +if ${ac_cv_c_bigendian+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_c_bigendian=unknown + # See if we're dealing with a universal compiler. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifndef __APPLE_CC__ + not a universal capable compiler + #endif + typedef int dummy; + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + + # Check for potential -arch flags. It is not universal unless + # there are at least two -arch flags with different values. + ac_arch= + ac_prev= + for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do + if test -n "$ac_prev"; then + case $ac_word in + i?86 | x86_64 | ppc | ppc64) + if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then + ac_arch=$ac_word + else + ac_cv_c_bigendian=universal + break + fi + ;; + esac + ac_prev= + elif test "x$ac_word" = "x-arch"; then + ac_prev=arch + fi + done +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if test $ac_cv_c_bigendian = unknown; then + # See if sys/param.h defines the BYTE_ORDER macro. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> + #include <sys/param.h> + int main () { -return pthread_kill (); +#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ + && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ + && LITTLE_ENDIAN) + bogus endian macros + #endif + ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_pthread_pthread_kill=yes -else - ac_cv_lib_pthread_pthread_kill=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_kill" >&5 -$as_echo "$ac_cv_lib_pthread_pthread_kill" >&6; } -if test "x$ac_cv_lib_pthread_pthread_kill" = xyes; then : - gl_have_pthread=yes - LIBTHREAD=-lpthread LTLIBTHREAD=-lpthread - LIBMULTITHREAD=-lpthread LTLIBMULTITHREAD=-lpthread -fi - - if test -z "$gl_have_pthread"; then - # For FreeBSD 4. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lc_r" >&5 -$as_echo_n "checking for pthread_kill in -lc_r... " >&6; } -if ${ac_cv_lib_c_r_pthread_kill+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lc_r $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext +if ac_fn_c_try_compile "$LINENO"; then : + # It does; now see whether it defined to BIG_ENDIAN or not. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ +#include <sys/types.h> + #include <sys/param.h> -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char pthread_kill (); int main () { -return pthread_kill (); +#if BYTE_ORDER != BIG_ENDIAN + not big endian + #endif + ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_c_r_pthread_kill=yes +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_bigendian=yes else - ac_cv_lib_c_r_pthread_kill=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS + ac_cv_c_bigendian=no fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_r_pthread_kill" >&5 -$as_echo "$ac_cv_lib_c_r_pthread_kill" >&6; } -if test "x$ac_cv_lib_c_r_pthread_kill" = xyes; then : - gl_have_pthread=yes - LIBTHREAD=-lc_r LTLIBTHREAD=-lc_r - LIBMULTITHREAD=-lc_r LTLIBMULTITHREAD=-lc_r +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + if test $ac_cv_c_bigendian = unknown; then + # See if <limits.h> defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <limits.h> - fi - fi - if test -n "$gl_have_pthread"; then - gl_threads_api=posix - -$as_echo "#define USE_POSIX_THREADS 1" >>confdefs.h +int +main () +{ +#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) + bogus endian macros + #endif - if test -n "$LIBMULTITHREAD" || test -n "$LTLIBMULTITHREAD"; then - if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + # It does; now see whether it defined to _BIG_ENDIAN or not. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <limits.h> -$as_echo "#define USE_POSIX_THREADS_WEAK 1" >>confdefs.h +int +main () +{ +#ifndef _BIG_ENDIAN + not big endian + #endif - LIBTHREAD= - LTLIBTHREAD= - fi - fi - fi - fi + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_bigendian=yes +else + ac_cv_c_bigendian=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi - if test -z "$gl_have_pthread"; then - if test "$gl_use_threads" = yes || test "$gl_use_threads" = solaris; then - gl_have_solaristhread= - gl_save_LIBS="$LIBS" - LIBS="$LIBS -lthread" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + if test $ac_cv_c_bigendian = unknown; then + # Compile a test program. + if test "$cross_compiling" = yes; then : + # Try to guess by grepping values from an object file. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ - -#include <thread.h> -#include <synch.h> +short int ascii_mm[] = + { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; + short int ascii_ii[] = + { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; + int use_ascii (int i) { + return ascii_mm[i] + ascii_ii[i]; + } + short int ebcdic_ii[] = + { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; + short int ebcdic_mm[] = + { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; + int use_ebcdic (int i) { + return ebcdic_mm[i] + ebcdic_ii[i]; + } + extern int foo; int main () { -thr_self(); +return use_ascii (foo) == use_ebcdic (foo); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : - gl_have_solaristhread=yes +if ac_fn_c_try_compile "$LINENO"; then : + if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then + ac_cv_c_bigendian=yes + fi + if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then + if test "$ac_cv_c_bigendian" = unknown; then + ac_cv_c_bigendian=no + else + # finding both strings is unlikely to happen, but who knows? + ac_cv_c_bigendian=unknown + fi + fi fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LIBS="$gl_save_LIBS" - if test -n "$gl_have_solaristhread"; then - gl_threads_api=solaris - LIBTHREAD=-lthread - LTLIBTHREAD=-lthread - LIBMULTITHREAD="$LIBTHREAD" - LTLIBMULTITHREAD="$LTLIBTHREAD" - -$as_echo "#define USE_SOLARIS_THREADS 1" >>confdefs.h - - if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ -$as_echo "#define USE_SOLARIS_THREADS_WEAK 1" >>confdefs.h + /* Are we little or big endian? From Harbison&Steele. */ + union + { + long int l; + char c[sizeof (long int)]; + } u; + u.l = 1; + return u.c[sizeof (long int) - 1] == 1; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_c_bigendian=no +else + ac_cv_c_bigendian=yes +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi - LIBTHREAD= - LTLIBTHREAD= - fi - fi - fi fi - if test "$gl_use_threads" = pth; then - gl_save_CPPFLAGS="$CPPFLAGS" +fi +: + case $ac_cv_c_bigendian in #( + yes) + gl_cv_cc_double_expbit0="word 0 bit 20";; #( + no) + gl_cv_cc_double_expbit0="word 1 bit 20" ;; #( + universal) +$as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h + ;; #( + *) + gl_cv_cc_double_expbit0="unknown" ;; + esac +fi +rm -f conftest* - { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libpth" >&5 -$as_echo_n "checking how to link with libpth... " >&6; } -if ${ac_cv_libpth_libs+:} false; then : - $as_echo_n "(cached) " >&6 -else +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <float.h> +#include <stddef.h> +#include <stdio.h> +#include <string.h> +#define NWORDS \ + ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) +typedef union { double value; unsigned int word[NWORDS]; } memory_double; +static unsigned int ored_words[NWORDS]; +static unsigned int anded_words[NWORDS]; +static void add_to_ored_words (double x) +{ + memory_double m; + size_t i; + /* Clear it first, in case sizeof (double) < sizeof (memory_double). */ + memset (&m, 0, sizeof (memory_double)); + m.value = x; + for (i = 0; i < NWORDS; i++) + { + ored_words[i] |= m.word[i]; + anded_words[i] &= m.word[i]; + } +} +int main () +{ + size_t j; + FILE *fp = fopen ("conftest.out", "w"); + if (fp == NULL) + return 1; + for (j = 0; j < NWORDS; j++) + anded_words[j] = ~ (unsigned int) 0; + add_to_ored_words (0.25); + add_to_ored_words (0.5); + add_to_ored_words (1.0); + add_to_ored_words (2.0); + add_to_ored_words (4.0); + /* Remove bits that are common (e.g. if representation of the first mantissa + bit is explicit). */ + for (j = 0; j < NWORDS; j++) + ored_words[j] &= ~anded_words[j]; + /* Now find the nonzero word. */ + for (j = 0; j < NWORDS; j++) + if (ored_words[j] != 0) + break; + if (j < NWORDS) + { + size_t i; + for (i = j + 1; i < NWORDS; i++) + if (ored_words[i] != 0) + { + fprintf (fp, "unknown"); + return (fclose (fp) != 0); + } + for (i = 0; ; i++) + if ((ored_words[j] >> i) & 1) + { + fprintf (fp, "word %d bit %d", (int) j, (int) i); + return (fclose (fp) != 0); + } + } + fprintf (fp, "unknown"); + return (fclose (fp) != 0); +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_cc_double_expbit0=`cat conftest.out` +else + gl_cv_cc_double_expbit0="unknown" +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + rm -f conftest.out +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_double_expbit0" >&5 +$as_echo "$gl_cv_cc_double_expbit0" >&6; } + case "$gl_cv_cc_double_expbit0" in + word*bit*) + word=`echo "$gl_cv_cc_double_expbit0" | sed -e 's/word //' -e 's/ bit.*//'` + bit=`echo "$gl_cv_cc_double_expbit0" | sed -e 's/word.*bit //'` +cat >>confdefs.h <<_ACEOF +#define DBL_EXPBIT0_WORD $word +_ACEOF - use_additional=yes +cat >>confdefs.h <<_ACEOF +#define DBL_EXPBIT0_BIT $bit +_ACEOF - acl_save_prefix="$prefix" - prefix="$acl_final_prefix" - acl_save_exec_prefix="$exec_prefix" - exec_prefix="$acl_final_exec_prefix" + ;; + esac - eval additional_includedir=\"$includedir\" - eval additional_libdir=\"$libdir\" - exec_prefix="$acl_save_exec_prefix" - prefix="$acl_save_prefix" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 +$as_echo_n "checking whether byte ordering is bigendian... " >&6; } +if ${ac_cv_c_bigendian+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_c_bigendian=unknown + # See if we're dealing with a universal compiler. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifndef __APPLE_CC__ + not a universal capable compiler + #endif + typedef int dummy; +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : -# Check whether --with-libpth-prefix was given. -if test "${with_libpth_prefix+set}" = set; then : - withval=$with_libpth_prefix; - if test "X$withval" = "Xno"; then - use_additional=no - else - if test "X$withval" = "X"; then + # Check for potential -arch flags. It is not universal unless + # there are at least two -arch flags with different values. + ac_arch= + ac_prev= + for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do + if test -n "$ac_prev"; then + case $ac_word in + i?86 | x86_64 | ppc | ppc64) + if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then + ac_arch=$ac_word + else + ac_cv_c_bigendian=universal + break + fi + ;; + esac + ac_prev= + elif test "x$ac_word" = "x-arch"; then + ac_prev=arch + fi + done +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if test $ac_cv_c_bigendian = unknown; then + # See if sys/param.h defines the BYTE_ORDER macro. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> + #include <sys/param.h> - acl_save_prefix="$prefix" - prefix="$acl_final_prefix" - acl_save_exec_prefix="$exec_prefix" - exec_prefix="$acl_final_exec_prefix" +int +main () +{ +#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ + && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ + && LITTLE_ENDIAN) + bogus endian macros + #endif - eval additional_includedir=\"$includedir\" - eval additional_libdir=\"$libdir\" + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + # It does; now see whether it defined to BIG_ENDIAN or not. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> + #include <sys/param.h> - exec_prefix="$acl_save_exec_prefix" - prefix="$acl_save_prefix" +int +main () +{ +#if BYTE_ORDER != BIG_ENDIAN + not big endian + #endif - else - additional_includedir="$withval/include" - additional_libdir="$withval/$acl_libdirstem" - if test "$acl_libdirstem2" != "$acl_libdirstem" \ - && ! test -d "$withval/$acl_libdirstem"; then - additional_libdir="$withval/$acl_libdirstem2" - fi - fi + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_bigendian=yes +else + ac_cv_c_bigendian=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi + if test $ac_cv_c_bigendian = unknown; then + # See if <limits.h> defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <limits.h> -fi +int +main () +{ +#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) + bogus endian macros + #endif - LIBPTH= - LTLIBPTH= - INCPTH= - LIBPTH_PREFIX= - HAVE_LIBPTH= - rpathdirs= - ltrpathdirs= - names_already_handled= - names_next_round='pth ' - while test -n "$names_next_round"; do - names_this_round="$names_next_round" - names_next_round= - for name in $names_this_round; do - already_handled= - for n in $names_already_handled; do - if test "$n" = "$name"; then - already_handled=yes - break - fi - done - if test -z "$already_handled"; then - names_already_handled="$names_already_handled $name" - uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'` - eval value=\"\$HAVE_LIB$uppername\" - if test -n "$value"; then - if test "$value" = yes; then - eval value=\"\$LIB$uppername\" - test -z "$value" || LIBPTH="${LIBPTH}${LIBPTH:+ }$value" - eval value=\"\$LTLIB$uppername\" - test -z "$value" || LTLIBPTH="${LTLIBPTH}${LTLIBPTH:+ }$value" - else - : - fi - else - found_dir= - found_la= - found_so= - found_a= - eval libname=\"$acl_libname_spec\" # typically: libname=lib$name - if test -n "$acl_shlibext"; then - shrext=".$acl_shlibext" # typically: shrext=.so - else - shrext= - fi - if test $use_additional = yes; then - dir="$additional_libdir" - if test -n "$acl_shlibext"; then - if test -f "$dir/$libname$shrext"; then - found_dir="$dir" - found_so="$dir/$libname$shrext" - else - if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then - ver=`(cd "$dir" && \ - for f in "$libname$shrext".*; do echo "$f"; done \ - | sed -e "s,^$libname$shrext\\\\.,," \ - | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ - | sed 1q ) 2>/dev/null` - if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then - found_dir="$dir" - found_so="$dir/$libname$shrext.$ver" - fi - else - eval library_names=\"$acl_library_names_spec\" - for f in $library_names; do - if test -f "$dir/$f"; then - found_dir="$dir" - found_so="$dir/$f" - break - fi - done - fi - fi - fi - if test "X$found_dir" = "X"; then - if test -f "$dir/$libname.$acl_libext"; then - found_dir="$dir" - found_a="$dir/$libname.$acl_libext" - fi - fi - if test "X$found_dir" != "X"; then - if test -f "$dir/$libname.la"; then - found_la="$dir/$libname.la" - fi - fi - fi - if test "X$found_dir" = "X"; then - for x in $LDFLAGS $LTLIBPTH; do + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + # It does; now see whether it defined to _BIG_ENDIAN or not. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <limits.h> - acl_save_prefix="$prefix" - prefix="$acl_final_prefix" - acl_save_exec_prefix="$exec_prefix" - exec_prefix="$acl_final_exec_prefix" - eval x=\"$x\" - exec_prefix="$acl_save_exec_prefix" - prefix="$acl_save_prefix" - - case "$x" in - -L*) - dir=`echo "X$x" | sed -e 's/^X-L//'` - if test -n "$acl_shlibext"; then - if test -f "$dir/$libname$shrext"; then - found_dir="$dir" - found_so="$dir/$libname$shrext" - else - if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then - ver=`(cd "$dir" && \ - for f in "$libname$shrext".*; do echo "$f"; done \ - | sed -e "s,^$libname$shrext\\\\.,," \ - | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ - | sed 1q ) 2>/dev/null` - if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then - found_dir="$dir" - found_so="$dir/$libname$shrext.$ver" - fi - else - eval library_names=\"$acl_library_names_spec\" - for f in $library_names; do - if test -f "$dir/$f"; then - found_dir="$dir" - found_so="$dir/$f" - break - fi - done - fi - fi - fi - if test "X$found_dir" = "X"; then - if test -f "$dir/$libname.$acl_libext"; then - found_dir="$dir" - found_a="$dir/$libname.$acl_libext" - fi - fi - if test "X$found_dir" != "X"; then - if test -f "$dir/$libname.la"; then - found_la="$dir/$libname.la" - fi - fi - ;; - esac - if test "X$found_dir" != "X"; then - break - fi - done - fi - if test "X$found_dir" != "X"; then - LTLIBPTH="${LTLIBPTH}${LTLIBPTH:+ }-L$found_dir -l$name" - if test "X$found_so" != "X"; then - if test "$enable_rpath" = no \ - || test "X$found_dir" = "X/usr/$acl_libdirstem" \ - || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then - LIBPTH="${LIBPTH}${LIBPTH:+ }$found_so" - else - haveit= - for x in $ltrpathdirs; do - if test "X$x" = "X$found_dir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - ltrpathdirs="$ltrpathdirs $found_dir" - fi - if test "$acl_hardcode_direct" = yes; then - LIBPTH="${LIBPTH}${LIBPTH:+ }$found_so" - else - if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then - LIBPTH="${LIBPTH}${LIBPTH:+ }$found_so" - haveit= - for x in $rpathdirs; do - if test "X$x" = "X$found_dir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - rpathdirs="$rpathdirs $found_dir" - fi - else - haveit= - for x in $LDFLAGS $LIBPTH; do - - acl_save_prefix="$prefix" - prefix="$acl_final_prefix" - acl_save_exec_prefix="$exec_prefix" - exec_prefix="$acl_final_exec_prefix" - eval x=\"$x\" - exec_prefix="$acl_save_exec_prefix" - prefix="$acl_save_prefix" - - if test "X$x" = "X-L$found_dir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - LIBPTH="${LIBPTH}${LIBPTH:+ }-L$found_dir" - fi - if test "$acl_hardcode_minus_L" != no; then - LIBPTH="${LIBPTH}${LIBPTH:+ }$found_so" - else - LIBPTH="${LIBPTH}${LIBPTH:+ }-l$name" - fi - fi - fi - fi - else - if test "X$found_a" != "X"; then - LIBPTH="${LIBPTH}${LIBPTH:+ }$found_a" - else - LIBPTH="${LIBPTH}${LIBPTH:+ }-L$found_dir -l$name" - fi - fi - additional_includedir= - case "$found_dir" in - */$acl_libdirstem | */$acl_libdirstem/) - basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` - if test "$name" = 'pth'; then - LIBPTH_PREFIX="$basedir" - fi - additional_includedir="$basedir/include" - ;; - */$acl_libdirstem2 | */$acl_libdirstem2/) - basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` - if test "$name" = 'pth'; then - LIBPTH_PREFIX="$basedir" - fi - additional_includedir="$basedir/include" - ;; - esac - if test "X$additional_includedir" != "X"; then - if test "X$additional_includedir" != "X/usr/include"; then - haveit= - if test "X$additional_includedir" = "X/usr/local/include"; then - if test -n "$GCC"; then - case $host_os in - linux* | gnu* | k*bsd*-gnu) haveit=yes;; - esac - fi - fi - if test -z "$haveit"; then - for x in $CPPFLAGS $INCPTH; do - - acl_save_prefix="$prefix" - prefix="$acl_final_prefix" - acl_save_exec_prefix="$exec_prefix" - exec_prefix="$acl_final_exec_prefix" - eval x=\"$x\" - exec_prefix="$acl_save_exec_prefix" - prefix="$acl_save_prefix" - - if test "X$x" = "X-I$additional_includedir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - if test -d "$additional_includedir"; then - INCPTH="${INCPTH}${INCPTH:+ }-I$additional_includedir" - fi - fi - fi - fi - fi - if test -n "$found_la"; then - save_libdir="$libdir" - case "$found_la" in - */* | *\\*) . "$found_la" ;; - *) . "./$found_la" ;; - esac - libdir="$save_libdir" - for dep in $dependency_libs; do - case "$dep" in - -L*) - additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` - if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \ - && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then - haveit= - if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ - || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then - if test -n "$GCC"; then - case $host_os in - linux* | gnu* | k*bsd*-gnu) haveit=yes;; - esac - fi - fi - if test -z "$haveit"; then - haveit= - for x in $LDFLAGS $LIBPTH; do - - acl_save_prefix="$prefix" - prefix="$acl_final_prefix" - acl_save_exec_prefix="$exec_prefix" - exec_prefix="$acl_final_exec_prefix" - eval x=\"$x\" - exec_prefix="$acl_save_exec_prefix" - prefix="$acl_save_prefix" - - if test "X$x" = "X-L$additional_libdir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - if test -d "$additional_libdir"; then - LIBPTH="${LIBPTH}${LIBPTH:+ }-L$additional_libdir" - fi - fi - haveit= - for x in $LDFLAGS $LTLIBPTH; do - - acl_save_prefix="$prefix" - prefix="$acl_final_prefix" - acl_save_exec_prefix="$exec_prefix" - exec_prefix="$acl_final_exec_prefix" - eval x=\"$x\" - exec_prefix="$acl_save_exec_prefix" - prefix="$acl_save_prefix" - - if test "X$x" = "X-L$additional_libdir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - if test -d "$additional_libdir"; then - LTLIBPTH="${LTLIBPTH}${LTLIBPTH:+ }-L$additional_libdir" - fi - fi - fi - fi - ;; - -R*) - dir=`echo "X$dep" | sed -e 's/^X-R//'` - if test "$enable_rpath" != no; then - haveit= - for x in $rpathdirs; do - if test "X$x" = "X$dir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - rpathdirs="$rpathdirs $dir" - fi - haveit= - for x in $ltrpathdirs; do - if test "X$x" = "X$dir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - ltrpathdirs="$ltrpathdirs $dir" - fi - fi - ;; - -l*) - names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` - ;; - *.la) - names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` - ;; - *) - LIBPTH="${LIBPTH}${LIBPTH:+ }$dep" - LTLIBPTH="${LTLIBPTH}${LTLIBPTH:+ }$dep" - ;; - esac - done - fi - else - LIBPTH="${LIBPTH}${LIBPTH:+ }-l$name" - LTLIBPTH="${LTLIBPTH}${LTLIBPTH:+ }-l$name" - fi - fi - fi - done - done - if test "X$rpathdirs" != "X"; then - if test -n "$acl_hardcode_libdir_separator"; then - alldirs= - for found_dir in $rpathdirs; do - alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" - done - acl_save_libdir="$libdir" - libdir="$alldirs" - eval flag=\"$acl_hardcode_libdir_flag_spec\" - libdir="$acl_save_libdir" - LIBPTH="${LIBPTH}${LIBPTH:+ }$flag" - else - for found_dir in $rpathdirs; do - acl_save_libdir="$libdir" - libdir="$found_dir" - eval flag=\"$acl_hardcode_libdir_flag_spec\" - libdir="$acl_save_libdir" - LIBPTH="${LIBPTH}${LIBPTH:+ }$flag" - done - fi - fi - if test "X$ltrpathdirs" != "X"; then - for found_dir in $ltrpathdirs; do - LTLIBPTH="${LTLIBPTH}${LTLIBPTH:+ }-R$found_dir" - done - fi - - - - - - - ac_cv_libpth_libs="$LIBPTH" - ac_cv_libpth_ltlibs="$LTLIBPTH" - ac_cv_libpth_cppflags="$INCPTH" - ac_cv_libpth_prefix="$LIBPTH_PREFIX" - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_libpth_libs" >&5 -$as_echo "$ac_cv_libpth_libs" >&6; } - LIBPTH="$ac_cv_libpth_libs" - LTLIBPTH="$ac_cv_libpth_ltlibs" - INCPTH="$ac_cv_libpth_cppflags" - LIBPTH_PREFIX="$ac_cv_libpth_prefix" - - for element in $INCPTH; do - haveit= - for x in $CPPFLAGS; do - - acl_save_prefix="$prefix" - prefix="$acl_final_prefix" - acl_save_exec_prefix="$exec_prefix" - exec_prefix="$acl_final_exec_prefix" - eval x=\"$x\" - exec_prefix="$acl_save_exec_prefix" - prefix="$acl_save_prefix" - - if test "X$x" = "X$element"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" - fi - done - - - - - HAVE_LIBPTH=yes - - - - gl_have_pth= - gl_save_LIBS="$LIBS" - LIBS="$LIBS $LIBPTH" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <pth.h> int main () { -pth_self(); +#ifndef _BIG_ENDIAN + not big endian + #endif + ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : - gl_have_pth=yes +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_bigendian=yes +else + ac_cv_c_bigendian=no fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LIBS="$gl_save_LIBS" - if test -n "$gl_have_pth"; then - gl_threads_api=pth - LIBTHREAD="$LIBPTH" - LTLIBTHREAD="$LTLIBPTH" - LIBMULTITHREAD="$LIBTHREAD" - LTLIBMULTITHREAD="$LTLIBTHREAD" - -$as_echo "#define USE_PTH_THREADS 1" >>confdefs.h - - if test -n "$LIBMULTITHREAD" || test -n "$LTLIBMULTITHREAD"; then - if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then - -$as_echo "#define USE_PTH_THREADS_WEAK 1" >>confdefs.h - - LIBTHREAD= - LTLIBTHREAD= - fi - fi - else - CPPFLAGS="$gl_save_CPPFLAGS" - fi - fi - if test -z "$gl_have_pthread"; then - case "$gl_use_threads" in - yes | windows | win32) # The 'win32' is for backward compatibility. - if { case "$host_os" in - mingw*) true;; - *) false;; - esac - }; then - gl_threads_api=windows - -$as_echo "#define USE_WINDOWS_THREADS 1" >>confdefs.h - - fi - ;; - esac +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for multithread API to use" >&5 -$as_echo_n "checking for multithread API to use... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_threads_api" >&5 -$as_echo "$gl_threads_api" >&6; } - - - - - - - - - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether malloc, realloc, calloc are POSIX compliant" >&5 -$as_echo_n "checking whether malloc, realloc, calloc are POSIX compliant... " >&6; } -if ${gl_cv_func_malloc_posix+:} false; then : - $as_echo_n "(cached) " >&6 -else - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + if test $ac_cv_c_bigendian = unknown; then + # Compile a test program. + if test "$cross_compiling" = yes; then : + # Try to guess by grepping values from an object file. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ +short int ascii_mm[] = + { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; + short int ascii_ii[] = + { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; + int use_ascii (int i) { + return ascii_mm[i] + ascii_ii[i]; + } + short int ebcdic_ii[] = + { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; + short int ebcdic_mm[] = + { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; + int use_ebcdic (int i) { + return ebcdic_mm[i] + ebcdic_ii[i]; + } + extern int foo; int main () { -#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ - choke me - #endif - +return use_ascii (foo) == use_ebcdic (foo); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : - gl_cv_func_malloc_posix=yes -else - gl_cv_func_malloc_posix=no + if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then + ac_cv_c_bigendian=yes + fi + if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then + if test "$ac_cv_c_bigendian" = unknown; then + ac_cv_c_bigendian=no + else + # finding both strings is unlikely to happen, but who knows? + ac_cv_c_bigendian=unknown + fi + fi fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_malloc_posix" >&5 -$as_echo "$gl_cv_func_malloc_posix" >&6; } - - - - for ac_header in stdlib.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default" -if test "x$ac_cv_header_stdlib_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_STDLIB_H 1 -_ACEOF - -fi - -done - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible malloc" >&5 -$as_echo_n "checking for GNU libc compatible malloc... " >&6; } -if ${ac_cv_func_malloc_0_nonnull+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - case "$host_os" in - # Guess yes on platforms where we know the result. - *-gnu* | freebsd* | netbsd* | openbsd* \ - | hpux* | solaris* | cygwin* | mingw*) - ac_cv_func_malloc_0_nonnull=yes ;; - # If we don't know, assume the worst. - *) ac_cv_func_malloc_0_nonnull=no ;; - esac - else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#if defined STDC_HEADERS || defined HAVE_STDLIB_H - # include <stdlib.h> - #else - char *malloc (); - #endif - +$ac_includes_default int main () { -char *p = malloc (0); - int result = !p; - free (p); - return result; + + /* Are we little or big endian? From Harbison&Steele. */ + union + { + long int l; + char c[sizeof (long int)]; + } u; + u.l = 1; + return u.c[sizeof (long int) - 1] == 1; + ; return 0; } - _ACEOF if ac_fn_c_try_run "$LINENO"; then : - ac_cv_func_malloc_0_nonnull=yes + ac_cv_c_bigendian=no else - ac_cv_func_malloc_0_nonnull=no + ac_cv_c_bigendian=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_malloc_0_nonnull" >&5 -$as_echo "$ac_cv_func_malloc_0_nonnull" >&6; } - if test $ac_cv_func_malloc_0_nonnull = yes; then : - gl_cv_func_malloc_0_nonnull=1 -else - gl_cv_func_malloc_0_nonnull=0 + fi fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 +$as_echo "$ac_cv_c_bigendian" >&6; } + case $ac_cv_c_bigendian in #( + yes) + $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h +;; #( + no) + ;; #( + universal) +$as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define MALLOC_0_IS_NONNULL $gl_cv_func_malloc_0_nonnull -_ACEOF - - - - - - - - - GNULIB_BTOWC=0; - GNULIB_WCTOB=0; - GNULIB_MBSINIT=0; - GNULIB_MBRTOWC=0; - GNULIB_MBRLEN=0; - GNULIB_MBSRTOWCS=0; - GNULIB_MBSNRTOWCS=0; - GNULIB_WCRTOMB=0; - GNULIB_WCSRTOMBS=0; - GNULIB_WCSNRTOMBS=0; - GNULIB_WCWIDTH=0; - GNULIB_WMEMCHR=0; - GNULIB_WMEMCMP=0; - GNULIB_WMEMCPY=0; - GNULIB_WMEMMOVE=0; - GNULIB_WMEMSET=0; - GNULIB_WCSLEN=0; - GNULIB_WCSNLEN=0; - GNULIB_WCSCPY=0; - GNULIB_WCPCPY=0; - GNULIB_WCSNCPY=0; - GNULIB_WCPNCPY=0; - GNULIB_WCSCAT=0; - GNULIB_WCSNCAT=0; - GNULIB_WCSCMP=0; - GNULIB_WCSNCMP=0; - GNULIB_WCSCASECMP=0; - GNULIB_WCSNCASECMP=0; - GNULIB_WCSCOLL=0; - GNULIB_WCSXFRM=0; - GNULIB_WCSDUP=0; - GNULIB_WCSCHR=0; - GNULIB_WCSRCHR=0; - GNULIB_WCSCSPN=0; - GNULIB_WCSSPN=0; - GNULIB_WCSPBRK=0; - GNULIB_WCSSTR=0; - GNULIB_WCSTOK=0; - GNULIB_WCSWIDTH=0; - HAVE_BTOWC=1; - HAVE_MBSINIT=1; - HAVE_MBRTOWC=1; - HAVE_MBRLEN=1; - HAVE_MBSRTOWCS=1; - HAVE_MBSNRTOWCS=1; - HAVE_WCRTOMB=1; - HAVE_WCSRTOMBS=1; - HAVE_WCSNRTOMBS=1; - HAVE_WMEMCHR=1; - HAVE_WMEMCMP=1; - HAVE_WMEMCPY=1; - HAVE_WMEMMOVE=1; - HAVE_WMEMSET=1; - HAVE_WCSLEN=1; - HAVE_WCSNLEN=1; - HAVE_WCSCPY=1; - HAVE_WCPCPY=1; - HAVE_WCSNCPY=1; - HAVE_WCPNCPY=1; - HAVE_WCSCAT=1; - HAVE_WCSNCAT=1; - HAVE_WCSCMP=1; - HAVE_WCSNCMP=1; - HAVE_WCSCASECMP=1; - HAVE_WCSNCASECMP=1; - HAVE_WCSCOLL=1; - HAVE_WCSXFRM=1; - HAVE_WCSDUP=1; - HAVE_WCSCHR=1; - HAVE_WCSRCHR=1; - HAVE_WCSCSPN=1; - HAVE_WCSSPN=1; - HAVE_WCSPBRK=1; - HAVE_WCSSTR=1; - HAVE_WCSTOK=1; - HAVE_WCSWIDTH=1; - HAVE_DECL_WCTOB=1; - HAVE_DECL_WCWIDTH=1; - REPLACE_MBSTATE_T=0; - REPLACE_BTOWC=0; - REPLACE_WCTOB=0; - REPLACE_MBSINIT=0; - REPLACE_MBRTOWC=0; - REPLACE_MBRLEN=0; - REPLACE_MBSRTOWCS=0; - REPLACE_MBSNRTOWCS=0; - REPLACE_WCRTOMB=0; - REPLACE_WCSRTOMBS=0; - REPLACE_WCSNRTOMBS=0; - REPLACE_WCWIDTH=0; - REPLACE_WCSWIDTH=0; - - - - - - - - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a traditional japanese locale" >&5 -$as_echo_n "checking for a traditional japanese locale... " >&6; } -if ${gt_cv_locale_ja+:} false; then : - $as_echo_n "(cached) " >&6 -else - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#include <locale.h> -#include <time.h> -#if HAVE_LANGINFO_CODESET -# include <langinfo.h> -#endif -#include <stdlib.h> -#include <string.h> -struct tm t; -char buf[16]; -int main () -{ - const char *p; - /* Check whether the given locale name is recognized by the system. */ -#if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__ - /* On native Windows, setlocale(category, "") looks at the system settings, - not at the environment variables. Also, when an encoding suffix such - as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE - category of the locale to "C". */ - if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL - || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) - return 1; -#else - if (setlocale (LC_ALL, "") == NULL) return 1; -#endif - /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". - On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) - is empty, and the behaviour of Tcl 8.4 in this locale is not useful. - On OpenBSD 4.0, when an unsupported locale is specified, setlocale() - succeeds but then nl_langinfo(CODESET) is "646". In this situation, - some unit tests fail. - On MirBSD 10, when an unsupported locale is specified, setlocale() - succeeds but then nl_langinfo(CODESET) is "UTF-8". */ -#if HAVE_LANGINFO_CODESET - { - const char *cs = nl_langinfo (CODESET); - if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0 - || strcmp (cs, "UTF-8") == 0) - return 1; - } -#endif -#ifdef __CYGWIN__ - /* On Cygwin, avoid locale names without encoding suffix, because the - locale_charset() function relies on the encoding suffix. Note that - LC_ALL is set on the command line. */ - if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; -#endif - /* Check whether MB_CUR_MAX is > 1. This excludes the dysfunctional locales - on Cygwin 1.5.x. */ - if (MB_CUR_MAX == 1) - return 1; - /* Check whether in a month name, no byte in the range 0x80..0x9F occurs. - This excludes the UTF-8 encoding (except on MirBSD). */ - t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; - if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1; - for (p = buf; *p != '\0'; p++) - if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0) - return 1; - return 0; -} - -_ACEOF - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 - (eval $ac_link) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s conftest$ac_exeext; then - case "$host_os" in - # Handle native Windows specially, because there setlocale() interprets - # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", - # "fr" or "fra" as "French" or "French_France.1252", - # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", - # "ja" as "Japanese" or "Japanese_Japan.932", - # and similar. - mingw*) - # Note that on native Windows, the Japanese locale is - # Japanese_Japan.932, and CP932 is very different from EUC-JP, so we - # cannot use it here. - gt_cv_locale_ja=none - ;; - *) - # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because - # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the - # configure script would override the LC_ALL setting. Likewise for - # LC_CTYPE, which is also set at the beginning of the configure script. - # Test for the AIX locale name. - if (LC_ALL=ja_JP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then - gt_cv_locale_ja=ja_JP - else - # Test for the locale name with explicit encoding suffix. - if (LC_ALL=ja_JP.EUC-JP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then - gt_cv_locale_ja=ja_JP.EUC-JP - else - # Test for the HP-UX, OSF/1, NetBSD locale name. - if (LC_ALL=ja_JP.eucJP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then - gt_cv_locale_ja=ja_JP.eucJP - else - # Test for the IRIX, FreeBSD locale name. - if (LC_ALL=ja_JP.EUC LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then - gt_cv_locale_ja=ja_JP.EUC - else - # Test for the Solaris 7 locale name. - if (LC_ALL=ja LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then - gt_cv_locale_ja=ja - else - # Special test for NetBSD 1.6. - if test -f /usr/share/locale/ja_JP.eucJP/LC_CTYPE; then - gt_cv_locale_ja=ja_JP.eucJP - else - # None found. - gt_cv_locale_ja=none - fi - fi - fi - fi - fi - fi - ;; - esac - fi - rm -fr conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_ja" >&5 -$as_echo "$gt_cv_locale_ja" >&6; } - LOCALE_JA=$gt_cv_locale_ja - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a transitional chinese locale" >&5 -$as_echo_n "checking for a transitional chinese locale... " >&6; } -if ${gt_cv_locale_zh_CN+:} false; then : - $as_echo_n "(cached) " >&6 -else - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#include <locale.h> -#include <stdlib.h> -#include <time.h> -#if HAVE_LANGINFO_CODESET -# include <langinfo.h> -#endif -#include <stdlib.h> -#include <string.h> -struct tm t; -char buf[16]; -int main () -{ - const char *p; - /* Check whether the given locale name is recognized by the system. */ -#if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__ - /* On native Windows, setlocale(category, "") looks at the system settings, - not at the environment variables. Also, when an encoding suffix such - as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE - category of the locale to "C". */ - if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL - || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) - return 1; -#else - if (setlocale (LC_ALL, "") == NULL) return 1; -#endif - /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". - On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) - is empty, and the behaviour of Tcl 8.4 in this locale is not useful. - On OpenBSD 4.0, when an unsupported locale is specified, setlocale() - succeeds but then nl_langinfo(CODESET) is "646". In this situation, - some unit tests fail. - On MirBSD 10, when an unsupported locale is specified, setlocale() - succeeds but then nl_langinfo(CODESET) is "UTF-8". */ -#if HAVE_LANGINFO_CODESET - { - const char *cs = nl_langinfo (CODESET); - if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0 - || strcmp (cs, "UTF-8") == 0) - return 1; - } -#endif -#ifdef __CYGWIN__ - /* On Cygwin, avoid locale names without encoding suffix, because the - locale_charset() function relies on the encoding suffix. Note that - LC_ALL is set on the command line. */ - if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; -#endif - /* Check whether in a month name, no byte in the range 0x80..0x9F occurs. - This excludes the UTF-8 encoding (except on MirBSD). */ - t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; - if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1; - for (p = buf; *p != '\0'; p++) - if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0) - return 1; - /* Check whether a typical GB18030 multibyte sequence is recognized as a - single wide character. This excludes the GB2312 and GBK encodings. */ - if (mblen ("\203\062\332\066", 5) != 4) - return 1; - return 0; -} - -_ACEOF - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 - (eval $ac_link) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s conftest$ac_exeext; then - case "$host_os" in - # Handle native Windows specially, because there setlocale() interprets - # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", - # "fr" or "fra" as "French" or "French_France.1252", - # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", - # "ja" as "Japanese" or "Japanese_Japan.932", - # and similar. - mingw*) - # Test for the hypothetical native Windows locale name. - if (LC_ALL=Chinese_China.54936 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then - gt_cv_locale_zh_CN=Chinese_China.54936 - else - # None found. - gt_cv_locale_zh_CN=none - fi - ;; - solaris2.8) - # On Solaris 8, the locales zh_CN.GB18030, zh_CN.GBK, zh.GBK are - # broken. One witness is the test case in gl_MBRTOWC_SANITYCHECK. - # Another witness is that "LC_ALL=zh_CN.GB18030 bash -c true" dumps core. - gt_cv_locale_zh_CN=none - ;; - *) - # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because - # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the - # configure script would override the LC_ALL setting. Likewise for - # LC_CTYPE, which is also set at the beginning of the configure script. - # Test for the locale name without encoding suffix. - if (LC_ALL=zh_CN LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then - gt_cv_locale_zh_CN=zh_CN - else - # Test for the locale name with explicit encoding suffix. - if (LC_ALL=zh_CN.GB18030 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then - gt_cv_locale_zh_CN=zh_CN.GB18030 - else - # None found. - gt_cv_locale_zh_CN=none - fi - fi - ;; - esac - else - # If there was a link error, due to mblen(), the system is so old that - # it certainly doesn't have a chinese locale. - gt_cv_locale_zh_CN=none - fi - rm -fr conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_zh_CN" >&5 -$as_echo "$gt_cv_locale_zh_CN" >&6; } - LOCALE_ZH_CN=$gt_cv_locale_zh_CN - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a french Unicode locale" >&5 -$as_echo_n "checking for a french Unicode locale... " >&6; } -if ${gt_cv_locale_fr_utf8+:} false; then : - $as_echo_n "(cached) " >&6 -else - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#include <locale.h> -#include <time.h> -#if HAVE_LANGINFO_CODESET -# include <langinfo.h> -#endif -#include <stdlib.h> -#include <string.h> -struct tm t; -char buf[16]; -int main () { - /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl - imitates locale dependent behaviour by looking at the environment - variables, and all locales use the UTF-8 encoding. */ -#if !(defined __BEOS__ || defined __HAIKU__) - /* Check whether the given locale name is recognized by the system. */ -# if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__ - /* On native Windows, setlocale(category, "") looks at the system settings, - not at the environment variables. Also, when an encoding suffix such - as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE - category of the locale to "C". */ - if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL - || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) - return 1; -# else - if (setlocale (LC_ALL, "") == NULL) return 1; -# endif - /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". - On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) - is empty, and the behaviour of Tcl 8.4 in this locale is not useful. - On OpenBSD 4.0, when an unsupported locale is specified, setlocale() - succeeds but then nl_langinfo(CODESET) is "646". In this situation, - some unit tests fail. */ -# if HAVE_LANGINFO_CODESET - { - const char *cs = nl_langinfo (CODESET); - if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) - return 1; - } -# endif -# ifdef __CYGWIN__ - /* On Cygwin, avoid locale names without encoding suffix, because the - locale_charset() function relies on the encoding suffix. Note that - LC_ALL is set on the command line. */ - if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; -# endif - /* Check whether in the abbreviation of the second month, the second - character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is - two bytes long, with UTF-8 encoding. */ - t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; - if (strftime (buf, sizeof (buf), "%b", &t) < 4 - || buf[1] != (char) 0xc3 || buf[2] != (char) 0xa9 || buf[3] != 'v') - return 1; -#endif -#if !defined __BIONIC__ /* Bionic libc's 'struct lconv' is just a dummy. */ - /* Check whether the decimal separator is a comma. - On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point - are nl_langinfo(RADIXCHAR) are both ".". */ - if (localeconv () ->decimal_point[0] != ',') return 1; -#endif - return 0; -} - -_ACEOF - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 - (eval $ac_link) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s conftest$ac_exeext; then - case "$host_os" in - # Handle native Windows specially, because there setlocale() interprets - # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", - # "fr" or "fra" as "French" or "French_France.1252", - # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", - # "ja" as "Japanese" or "Japanese_Japan.932", - # and similar. - mingw*) - # Test for the hypothetical native Windows locale name. - if (LC_ALL=French_France.65001 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then - gt_cv_locale_fr_utf8=French_France.65001 - else - # None found. - gt_cv_locale_fr_utf8=none - fi - ;; - *) - # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because - # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the - # configure script would override the LC_ALL setting. Likewise for - # LC_CTYPE, which is also set at the beginning of the configure script. - # Test for the usual locale name. - if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then - gt_cv_locale_fr_utf8=fr_FR - else - # Test for the locale name with explicit encoding suffix. - if (LC_ALL=fr_FR.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then - gt_cv_locale_fr_utf8=fr_FR.UTF-8 - else - # Test for the Solaris 7 locale name. - if (LC_ALL=fr.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then - gt_cv_locale_fr_utf8=fr.UTF-8 - else - # None found. - gt_cv_locale_fr_utf8=none - fi - fi - fi - ;; - esac - fi - rm -fr conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_fr_utf8" >&5 -$as_echo "$gt_cv_locale_fr_utf8" >&6; } - LOCALE_FR_UTF8=$gt_cv_locale_fr_utf8 - - - - + ;; #( + *) + as_fn_error $? "unknown endianness + presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;; + esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a traditional french locale" >&5 -$as_echo_n "checking for a traditional french locale... " >&6; } -if ${gt_cv_locale_fr+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <locale.h> -#include <time.h> -#if HAVE_LANGINFO_CODESET -# include <langinfo.h> -#endif -#include <stdlib.h> -#include <string.h> -struct tm t; -char buf[16]; -int main () { - /* Check whether the given locale name is recognized by the system. */ -#if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__ - /* On native Windows, setlocale(category, "") looks at the system settings, - not at the environment variables. Also, when an encoding suffix such - as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE - category of the locale to "C". */ - if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL - || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) - return 1; -#else - if (setlocale (LC_ALL, "") == NULL) return 1; -#endif - /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". - On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) - is empty, and the behaviour of Tcl 8.4 in this locale is not useful. - On OpenBSD 4.0, when an unsupported locale is specified, setlocale() - succeeds but then nl_langinfo(CODESET) is "646". In this situation, - some unit tests fail. - On MirBSD 10, when an unsupported locale is specified, setlocale() - succeeds but then nl_langinfo(CODESET) is "UTF-8". */ -#if HAVE_LANGINFO_CODESET - { - const char *cs = nl_langinfo (CODESET); - if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0 - || strcmp (cs, "UTF-8") == 0) - return 1; - } -#endif -#ifdef __CYGWIN__ - /* On Cygwin, avoid locale names without encoding suffix, because the - locale_charset() function relies on the encoding suffix. Note that - LC_ALL is set on the command line. */ - if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; -#endif - /* Check whether in the abbreviation of the second month, the second - character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is only - one byte long. This excludes the UTF-8 encoding. */ - t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; - if (strftime (buf, sizeof (buf), "%b", &t) < 3 || buf[2] != 'v') return 1; -#if !defined __BIONIC__ /* Bionic libc's 'struct lconv' is just a dummy. */ - /* Check whether the decimal separator is a comma. - On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point - are nl_langinfo(RADIXCHAR) are both ".". */ - if (localeconv () ->decimal_point[0] != ',') return 1; -#endif - return 0; -} + GNULIB_LOCALECONV=0; + GNULIB_SETLOCALE=0; + GNULIB_SETLOCALE_NULL=0; + GNULIB_DUPLOCALE=0; + GNULIB_LOCALENAME=0; + HAVE_NEWLOCALE=1; + HAVE_DUPLOCALE=1; + HAVE_FREELOCALE=1; + REPLACE_LOCALECONV=0; + REPLACE_SETLOCALE=0; + REPLACE_NEWLOCALE=0; + REPLACE_DUPLOCALE=0; + REPLACE_FREELOCALE=0; + REPLACE_STRUCT_LCONV=0; -_ACEOF - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 - (eval $ac_link) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s conftest$ac_exeext; then - case "$host_os" in - # Handle native Windows specially, because there setlocale() interprets - # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", - # "fr" or "fra" as "French" or "French_France.1252", - # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", - # "ja" as "Japanese" or "Japanese_Japan.932", - # and similar. - mingw*) - # Test for the native Windows locale name. - if (LC_ALL=French_France.1252 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then - gt_cv_locale_fr=French_France.1252 - else - # None found. - gt_cv_locale_fr=none - fi - ;; - *) - # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because - # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the - # configure script would override the LC_ALL setting. Likewise for - # LC_CTYPE, which is also set at the beginning of the configure script. - # Test for the usual locale name. - if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then - gt_cv_locale_fr=fr_FR - else - # Test for the locale name with explicit encoding suffix. - if (LC_ALL=fr_FR.ISO-8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then - gt_cv_locale_fr=fr_FR.ISO-8859-1 - else - # Test for the AIX, OSF/1, FreeBSD, NetBSD, OpenBSD locale name. - if (LC_ALL=fr_FR.ISO8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then - gt_cv_locale_fr=fr_FR.ISO8859-1 - else - # Test for the HP-UX locale name. - if (LC_ALL=fr_FR.iso88591 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then - gt_cv_locale_fr=fr_FR.iso88591 - else - # Test for the Solaris 7 locale name. - if (LC_ALL=fr LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then - gt_cv_locale_fr=fr - else - # None found. - gt_cv_locale_fr=none - fi - fi - fi - fi - fi - ;; - esac - fi - rm -fr conftest* -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_fr" >&5 -$as_echo "$gt_cv_locale_fr" >&6; } - LOCALE_FR=$gt_cv_locale_fr + REPLACE_NULL=0; + HAVE_MAX_ALIGN_T=1; + HAVE_WCHAR_T=1; + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wchar_t" >&5 +$as_echo_n "checking for wchar_t... " >&6; } +if ${gt_cv_c_wchar_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stddef.h> + wchar_t foo = (wchar_t)'\0'; +int +main () +{ + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gt_cv_c_wchar_t=yes +else + gt_cv_c_wchar_t=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_wchar_t" >&5 +$as_echo "$gt_cv_c_wchar_t" >&6; } + if test $gt_cv_c_wchar_t = yes; then +$as_echo "#define HAVE_WCHAR_T 1" >>confdefs.h + fi + STDDEF_H= + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for good max_align_t" >&5 +$as_echo_n "checking for good max_align_t... " >&6; } +if ${gl_cv_type_max_align_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stddef.h> + unsigned int s = sizeof (max_align_t); + #if defined __GNUC__ || defined __IBM__ALIGNOF__ + int check1[2 * (__alignof__ (double) <= __alignof__ (max_align_t)) - 1]; + int check2[2 * (__alignof__ (long double) <= __alignof__ (max_align_t)) - 1]; + #endif +int +main () +{ + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_type_max_align_t=yes +else + gl_cv_type_max_align_t=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - GNULIB_FFSL=0; - GNULIB_FFSLL=0; - GNULIB_MEMCHR=0; - GNULIB_MEMMEM=0; - GNULIB_MEMPCPY=0; - GNULIB_MEMRCHR=0; - GNULIB_RAWMEMCHR=0; - GNULIB_STPCPY=0; - GNULIB_STPNCPY=0; - GNULIB_STRCHRNUL=0; - GNULIB_STRDUP=0; - GNULIB_STRNCAT=0; - GNULIB_STRNDUP=0; - GNULIB_STRNLEN=0; - GNULIB_STRPBRK=0; - GNULIB_STRSEP=0; - GNULIB_STRSTR=0; - GNULIB_STRCASESTR=0; - GNULIB_STRTOK_R=0; - GNULIB_MBSLEN=0; - GNULIB_MBSNLEN=0; - GNULIB_MBSCHR=0; - GNULIB_MBSRCHR=0; - GNULIB_MBSSTR=0; - GNULIB_MBSCASECMP=0; - GNULIB_MBSNCASECMP=0; - GNULIB_MBSPCASECMP=0; - GNULIB_MBSCASESTR=0; - GNULIB_MBSCSPN=0; - GNULIB_MBSPBRK=0; - GNULIB_MBSSPN=0; - GNULIB_MBSSEP=0; - GNULIB_MBSTOK_R=0; - GNULIB_STRERROR=0; - GNULIB_STRERROR_R=0; - GNULIB_STRSIGNAL=0; - GNULIB_STRVERSCMP=0; - HAVE_MBSLEN=0; - HAVE_FFSL=1; - HAVE_FFSLL=1; - HAVE_MEMCHR=1; - HAVE_DECL_MEMMEM=1; - HAVE_MEMPCPY=1; - HAVE_DECL_MEMRCHR=1; - HAVE_RAWMEMCHR=1; - HAVE_STPCPY=1; - HAVE_STPNCPY=1; - HAVE_STRCHRNUL=1; - HAVE_DECL_STRDUP=1; - HAVE_DECL_STRNDUP=1; - HAVE_DECL_STRNLEN=1; - HAVE_STRPBRK=1; - HAVE_STRSEP=1; - HAVE_STRCASESTR=1; - HAVE_DECL_STRTOK_R=1; - HAVE_DECL_STRERROR_R=1; - HAVE_DECL_STRSIGNAL=1; - HAVE_STRVERSCMP=1; - REPLACE_MEMCHR=0; - REPLACE_MEMMEM=0; - REPLACE_STPNCPY=0; - REPLACE_STRDUP=0; - REPLACE_STRSTR=0; - REPLACE_STRCASESTR=0; - REPLACE_STRCHRNUL=0; - REPLACE_STRERROR=0; - REPLACE_STRERROR_R=0; - REPLACE_STRNCAT=0; - REPLACE_STRNDUP=0; - REPLACE_STRNLEN=0; - REPLACE_STRSIGNAL=0; - REPLACE_STRTOK_R=0; - UNDEFINE_STRTOK_R=0; +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_type_max_align_t" >&5 +$as_echo "$gl_cv_type_max_align_t" >&6; } + if test $gl_cv_type_max_align_t = no; then + HAVE_MAX_ALIGN_T=0 + STDDEF_H=stddef.h + fi + + if test $gt_cv_c_wchar_t = no; then + HAVE_WCHAR_T=0 + STDDEF_H=stddef.h + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NULL can be used in arbitrary expressions" >&5 +$as_echo_n "checking whether NULL can be used in arbitrary expressions... " >&6; } +if ${gl_cv_decl_null_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stddef.h> + int test[2 * (sizeof NULL == sizeof (void *)) -1]; +int +main () +{ + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_decl_null_works=yes +else + gl_cv_decl_null_works=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_decl_null_works" >&5 +$as_echo "$gl_cv_decl_null_works" >&6; } + if test $gl_cv_decl_null_works = no; then + REPLACE_NULL=1 + STDDEF_H=stddef.h + fi - # Check for mmap(). Don't use AC_FUNC_MMAP, because it checks too much: it - # fails on HP-UX 11, because MAP_FIXED mappings do not work. But this is - # irrelevant for anonymous mappings. - ac_fn_c_check_func "$LINENO" "mmap" "ac_cv_func_mmap" -if test "x$ac_cv_func_mmap" = xyes; then : - gl_have_mmap=yes + if test -n "$STDDEF_H"; then + GL_GENERATE_STDDEF_H_TRUE= + GL_GENERATE_STDDEF_H_FALSE='#' else - gl_have_mmap=no + GL_GENERATE_STDDEF_H_TRUE='#' + GL_GENERATE_STDDEF_H_FALSE= fi + if test -n "$STDDEF_H"; then - # Try to allow MAP_ANONYMOUS. - gl_have_mmap_anonymous=no - if test $gl_have_mmap = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for MAP_ANONYMOUS" >&5 -$as_echo_n "checking for MAP_ANONYMOUS... " >&6; } - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <sys/mman.h> -#ifdef MAP_ANONYMOUS - I cannot identify this map -#endif -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "I cannot identify this map" >/dev/null 2>&1; then : - gl_have_mmap_anonymous=yes -fi -rm -f conftest* - if test $gl_have_mmap_anonymous != yes; then - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <sys/mman.h> -#ifdef MAP_ANON - I cannot identify this map -#endif -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "I cannot identify this map" >/dev/null 2>&1; then : -$as_echo "#define MAP_ANONYMOUS MAP_ANON" >>confdefs.h - gl_have_mmap_anonymous=yes -fi -rm -f conftest* + if test $gl_cv_have_include_next = yes; then + gl_cv_next_stddef_h='<'stddef.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <stddef.h>" >&5 +$as_echo_n "checking absolute name of <stddef.h>... " >&6; } +if ${gl_cv_next_stddef_h+:} false; then : + $as_echo_n "(cached) " >&6 +else - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_have_mmap_anonymous" >&5 -$as_echo "$gl_have_mmap_anonymous" >&6; } - if test $gl_have_mmap_anonymous = yes; then -$as_echo "#define HAVE_MAP_ANONYMOUS 1" >>confdefs.h - fi - fi + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stddef.h> +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + case "$host_os" in + mingw*) + gl_dirsep_regex='[/\\]' + ;; + *) + gl_dirsep_regex='\/' + ;; + esac + gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' + gl_header_literal_regex=`echo 'stddef.h' \ + | sed -e "$gl_make_literal_regex_sed"` + gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ + s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ + s|^/[^/]|//&| + p + q + }' - : + gl_cv_absolute_stddef_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n "$gl_absolute_header_sed"` + gl_header=$gl_cv_absolute_stddef_h + gl_cv_next_stddef_h='"'$gl_header'"' +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stddef_h" >&5 +$as_echo "$gl_cv_next_stddef_h" >&6; } + fi + NEXT_STDDEF_H=$gl_cv_next_stddef_h + if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' + gl_next_as_first_directive='<'stddef.h'>' + else + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' + gl_next_as_first_directive=$gl_cv_next_stddef_h + fi + NEXT_AS_FIRST_DIRECTIVE_STDDEF_H=$gl_next_as_first_directive - : + fi - if test $HAVE_MEMCHR = 1; then - # Detect platform-specific bugs in some versions of glibc: - # memchr should not dereference anything with length 0 - # http://bugzilla.redhat.com/499689 - # memchr should not dereference overestimated length after a match - # http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=521737 - # http://sourceware.org/bugzilla/show_bug.cgi?id=10162 - # Assume that memchr works on platforms that lack mprotect. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether memchr works" >&5 -$as_echo_n "checking whether memchr works... " >&6; } -if ${gl_cv_func_memchr_works+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether locale.h defines locale_t" >&5 +$as_echo_n "checking whether locale.h defines locale_t... " >&6; } +if ${gl_cv_header_locale_has_locale_t+:} false; then : $as_echo_n "(cached) " >&6 else - if test "$cross_compiling" = yes; then : - gl_cv_func_memchr_works="guessing no" -else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ - -#include <string.h> -#if HAVE_SYS_MMAN_H -# include <fcntl.h> -# include <unistd.h> -# include <sys/types.h> -# include <sys/mman.h> -# ifndef MAP_FILE -# define MAP_FILE 0 -# endif -#endif - +#include <locale.h> + locale_t x; int main () { - int result = 0; - char *fence = NULL; -#if HAVE_SYS_MMAN_H && HAVE_MPROTECT -# if HAVE_MAP_ANONYMOUS - const int flags = MAP_ANONYMOUS | MAP_PRIVATE; - const int fd = -1; -# else /* !HAVE_MAP_ANONYMOUS */ - const int flags = MAP_FILE | MAP_PRIVATE; - int fd = open ("/dev/zero", O_RDONLY, 0666); - if (fd >= 0) -# endif - { - int pagesize = getpagesize (); - char *two_pages = - (char *) mmap (NULL, 2 * pagesize, PROT_READ | PROT_WRITE, - flags, fd, 0); - if (two_pages != (char *)(-1) - && mprotect (two_pages + pagesize, pagesize, PROT_NONE) == 0) - fence = two_pages + pagesize; - } -#endif - if (fence) - { - if (memchr (fence, 0, 0)) - result |= 1; - strcpy (fence - 9, "12345678"); - if (memchr (fence - 9, 0, 79) != fence - 1) - result |= 2; - if (memchr (fence - 1, 0, 3) != fence - 1) - result |= 4; - } - return result; - ; return 0; } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : - gl_cv_func_memchr_works=yes +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_header_locale_has_locale_t=yes else - gl_cv_func_memchr_works=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext + gl_cv_header_locale_has_locale_t=no fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_memchr_works" >&5 -$as_echo "$gl_cv_func_memchr_works" >&6; } - if test "$gl_cv_func_memchr_works" != yes; then - REPLACE_MEMCHR=1 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_locale_has_locale_t" >&5 +$as_echo "$gl_cv_header_locale_has_locale_t" >&6; } + + + if test $ac_cv_header_xlocale_h = yes; then + HAVE_XLOCALE_H=1 + if test $gl_cv_header_locale_has_locale_t = yes; then + gl_cv_header_locale_h_needs_xlocale_h=no + else + gl_cv_header_locale_h_needs_xlocale_h=yes + fi + HAVE_LOCALE_T=1 + else + HAVE_XLOCALE_H=0 + gl_cv_header_locale_h_needs_xlocale_h=no + if test $gl_cv_header_locale_has_locale_t = yes; then + HAVE_LOCALE_T=1 + else + HAVE_LOCALE_T=0 fi fi - ac_fn_c_check_decl "$LINENO" "memmem" "ac_cv_have_decl_memmem" "$ac_includes_default" -if test "x$ac_cv_have_decl_memmem" = xyes; then : - ac_have_decl=1 + + + gl_threads_api=none + LIBTHREAD= + LTLIBTHREAD= + LIBMULTITHREAD= + LTLIBMULTITHREAD= + if test "$gl_use_threads" != no; then + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether imported symbols can be declared weak" >&5 +$as_echo_n "checking whether imported symbols can be declared weak... " >&6; } +if ${gl_cv_have_weak+:} false; then : + $as_echo_n "(cached) " >&6 else - ac_have_decl=0 + gl_cv_have_weak=no + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +extern void xyzzy (); +#pragma weak xyzzy +int +main () +{ +xyzzy(); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + gl_cv_have_weak=maybe fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test $gl_cv_have_weak = maybe; then + if test "$cross_compiling" = yes; then : + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __ELF__ + Extensible Linking Format + #endif -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_MEMMEM $ac_have_decl _ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "Extensible Linking Format" >/dev/null 2>&1; then : + gl_cv_have_weak="guessing yes" +else + gl_cv_have_weak="guessing no" +fi +rm -f conftest* +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <stdio.h> +#pragma weak fputs +int main () +{ + return (fputs == NULL); +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_have_weak=yes +else + gl_cv_have_weak=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi + case " $LDFLAGS " in + *" -static "*) gl_cv_have_weak=no ;; + esac + case "$gl_cv_have_weak" in + *yes) + case "$host_os" in + freebsd* | dragonfly*) + : > conftest1.c + $CC $CPPFLAGS $CFLAGS $LDFLAGS -fPIC -shared -o libempty.so conftest1.c -lpthread >&5 2>&1 + cat <<EOF > conftest2.c +#include <pthread.h> +#pragma weak pthread_mutexattr_gettype +int main () +{ + return (pthread_mutexattr_gettype != NULL); +} +EOF + $CC $CPPFLAGS $CFLAGS $LDFLAGS -o conftest conftest2.c libempty.so >&5 2>&1 \ + || gl_cv_have_weak=no + rm -f conftest1.c libempty.so conftest2.c conftest + ;; + esac + ;; + esac +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_have_weak" >&5 +$as_echo "$gl_cv_have_weak" >&6; } + case "$gl_cv_have_weak" in + *yes) +$as_echo "#define HAVE_WEAK_SYMBOLS 1" >>confdefs.h + ;; + esac - for ac_func in memmem -do : - ac_fn_c_check_func "$LINENO" "memmem" "ac_cv_func_memmem" -if test "x$ac_cv_func_memmem" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_MEMMEM 1 -_ACEOF + if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then -fi -done + : + fi + if test "$gl_use_threads" = isoc || test "$gl_use_threads" = isoc+posix; then - if test $ac_cv_func_memmem = yes; then - HAVE_MEMMEM=1 - else - HAVE_MEMMEM=0 - fi + gl_have_isoc_threads="$ac_cv_header_threads_h" + fi + if test "$gl_use_threads" = yes \ + || test "$gl_use_threads" = posix \ + || test "$gl_use_threads" = isoc+posix; then - : + if test -z "$gl_pthreadlib_body_done"; then + gl_pthread_api=no + LIBPTHREAD= + LIBPMULTITHREAD= + # On OSF/1, the compiler needs the flag -pthread or -D_REENTRANT so that + # it groks <pthread.h>. It's added above, in gl_ANYTHREADLIB_EARLY. + ac_fn_c_check_header_mongrel "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default" +if test "x$ac_cv_header_pthread_h" = xyes; then : + gl_have_pthread_h=yes +else + gl_have_pthread_h=no +fi + if test "$gl_have_pthread_h" = yes; then + # Other possible tests: + # -lpthreads (FSU threads, PCthreads) + # -lgthreads + # Test whether both pthread_mutex_lock and pthread_mutexattr_init exist + # in libc. IRIX 6.5 has the first one in both libc and libpthread, but + # the second one only in libpthread, and lock.c needs it. + # + # If -pthread works, prefer it to -lpthread, since Ubuntu 14.04 + # needs -pthread for some reason. See: + # https://lists.gnu.org/r/bug-gnulib/2014-09/msg00023.html + save_LIBS=$LIBS + for gl_pthread in '' '-pthread'; do + LIBS="$LIBS $gl_pthread" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <pthread.h> + pthread_mutex_t m; + pthread_mutexattr_t ma; +int +main () +{ +pthread_mutex_lock (&m); + pthread_mutexattr_init (&ma); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + gl_pthread_api=yes + LIBPTHREAD=$gl_pthread + LIBPMULTITHREAD=$gl_pthread +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LIBS=$save_LIBS + test $gl_pthread_api = yes && break + done - if test $ac_cv_have_decl_memmem = no; then - HAVE_DECL_MEMMEM=0 - else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether memmem works" >&5 -$as_echo_n "checking whether memmem works... " >&6; } -if ${gl_cv_func_memmem_works_always+:} false; then : + # Test for libpthread by looking for pthread_kill. (Not pthread_self, + # since it is defined as a macro on OSF/1.) + if test $gl_pthread_api = yes && test -z "$LIBPTHREAD"; then + # The program links fine without libpthread. But it may actually + # need to link with libpthread in order to create multiple threads. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lpthread" >&5 +$as_echo_n "checking for pthread_kill in -lpthread... " >&6; } +if ${ac_cv_lib_pthread_pthread_kill+:} false; then : $as_echo_n "(cached) " >&6 else - if test "$cross_compiling" = yes; then : - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + ac_check_lib_save_LIBS=$LIBS +LIBS="-lpthread $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#ifdef __GNU_LIBRARY__ - #include <features.h> - #if ((__GLIBC__ == 2 && ((__GLIBC_MINOR > 0 && __GLIBC_MINOR__ < 9) \ - || __GLIBC_MINOR__ > 12)) \ - || (__GLIBC__ > 2)) \ - || defined __UCLIBC__ - Lucky user - #endif -#elif defined __CYGWIN__ - #include <cygwin/version.h> - #if CYGWIN_VERSION_DLL_COMBINED > CYGWIN_VERSION_DLL_MAKE_COMBINED (1007, 7) - Lucky user - #endif -#else - Lucky user +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" #endif - +char pthread_kill (); +int +main () +{ +return pthread_kill (); + ; + return 0; +} _ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "Lucky user" >/dev/null 2>&1; then : - gl_cv_func_memmem_works_always="guessing yes" +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_pthread_pthread_kill=yes else - gl_cv_func_memmem_works_always="guessing no" + ac_cv_lib_pthread_pthread_kill=no fi -rm -f conftest* +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_kill" >&5 +$as_echo "$ac_cv_lib_pthread_pthread_kill" >&6; } +if test "x$ac_cv_lib_pthread_pthread_kill" = xyes; then : + LIBPMULTITHREAD=-lpthread + # On Solaris and HP-UX, most pthread functions exist also in libc. + # Therefore pthread_in_use() needs to actually try to create a + # thread: pthread_create from libc will fail, whereas + # pthread_create will actually create a thread. + # On Solaris 10 or newer, this test is no longer needed, because + # libc contains the fully functional pthread functions. + case "$host_os" in + solaris | solaris2.1-9 | solaris2.1-9.* | hpux*) + +$as_echo "#define PTHREAD_IN_USE_DETECTION_HARD 1" >>confdefs.h + + esac +fi + elif test $gl_pthread_api != yes; then + # Some library is needed. Try libpthread and libc_r. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lpthread" >&5 +$as_echo_n "checking for pthread_kill in -lpthread... " >&6; } +if ${ac_cv_lib_pthread_pthread_kill+:} false; then : + $as_echo_n "(cached) " >&6 else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + ac_check_lib_save_LIBS=$LIBS +LIBS="-lpthread $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include <string.h> /* for memmem */ -#define P "_EF_BF_BD" -#define HAYSTACK "F_BD_CE_BD" P P P P "_C3_88_20" P P P "_C3_A7_20" P -#define NEEDLE P P P P P - +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char pthread_kill (); int main () { - - int result = 0; - if (memmem (HAYSTACK, strlen (HAYSTACK), NEEDLE, strlen (NEEDLE))) - result |= 1; - /* Check for empty needle behavior. */ - { - const char *haystack = "AAA"; - if (memmem (haystack, 3, NULL, 0) != haystack) - result |= 2; - } - return result; - +return pthread_kill (); ; return 0; } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : - gl_cv_func_memmem_works_always=yes +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_pthread_pthread_kill=yes else - gl_cv_func_memmem_works_always=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext + ac_cv_lib_pthread_pthread_kill=no fi - - +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_memmem_works_always" >&5 -$as_echo "$gl_cv_func_memmem_works_always" >&6; } - case "$gl_cv_func_memmem_works_always" in - *yes) ;; - *) - REPLACE_MEMMEM=1 - ;; - esac - fi - : - - - ac_fn_c_check_decl "$LINENO" "memrchr" "ac_cv_have_decl_memrchr" "$ac_includes_default" -if test "x$ac_cv_have_decl_memrchr" = xyes; then : - ac_have_decl=1 -else - ac_have_decl=0 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_kill" >&5 +$as_echo "$ac_cv_lib_pthread_pthread_kill" >&6; } +if test "x$ac_cv_lib_pthread_pthread_kill" = xyes; then : + gl_pthread_api=yes + LIBPTHREAD=-lpthread + LIBPMULTITHREAD=-lpthread fi -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_MEMRCHR $ac_have_decl -_ACEOF - - - - - - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for promoted mode_t type" >&5 -$as_echo_n "checking for promoted mode_t type... " >&6; } -if ${gl_cv_promoted_mode_t+:} false; then : + if test $gl_pthread_api != yes; then + # For FreeBSD 4. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lc_r" >&5 +$as_echo_n "checking for pthread_kill in -lc_r... " >&6; } +if ${ac_cv_lib_c_r_pthread_kill+:} false; then : $as_echo_n "(cached) " >&6 else - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + ac_check_lib_save_LIBS=$LIBS +LIBS="-lc_r $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include <sys/types.h> + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char pthread_kill (); int main () { -typedef int array[2 * (sizeof (mode_t) < sizeof (int)) - 1]; +return pthread_kill (); ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - gl_cv_promoted_mode_t='int' +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_c_r_pthread_kill=yes else - gl_cv_promoted_mode_t='mode_t' + ac_cv_lib_c_r_pthread_kill=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_r_pthread_kill" >&5 +$as_echo "$ac_cv_lib_c_r_pthread_kill" >&6; } +if test "x$ac_cv_lib_c_r_pthread_kill" = xyes; then : + gl_pthread_api=yes + LIBPTHREAD=-lc_r + LIBPMULTITHREAD=-lc_r fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_promoted_mode_t" >&5 -$as_echo "$gl_cv_promoted_mode_t" >&6; } - -cat >>confdefs.h <<_ACEOF -#define PROMOTED_MODE_T $gl_cv_promoted_mode_t -_ACEOF - - + fi + fi + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether POSIX threads API is available" >&5 +$as_echo_n "checking whether POSIX threads API is available... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_pthread_api" >&5 +$as_echo "$gl_pthread_api" >&6; } + if test $gl_pthread_api = yes; then +$as_echo "#define HAVE_PTHREAD_API 1" >>confdefs.h + fi - GNULIB_DPRINTF=0; - GNULIB_FCLOSE=0; - GNULIB_FDOPEN=0; - GNULIB_FFLUSH=0; - GNULIB_FGETC=0; - GNULIB_FGETS=0; - GNULIB_FOPEN=0; - GNULIB_FPRINTF=0; - GNULIB_FPRINTF_POSIX=0; - GNULIB_FPURGE=0; - GNULIB_FPUTC=0; - GNULIB_FPUTS=0; - GNULIB_FREAD=0; - GNULIB_FREOPEN=0; - GNULIB_FSCANF=0; - GNULIB_FSEEK=0; - GNULIB_FSEEKO=0; - GNULIB_FTELL=0; - GNULIB_FTELLO=0; - GNULIB_FWRITE=0; - GNULIB_GETC=0; - GNULIB_GETCHAR=0; - GNULIB_GETDELIM=0; - GNULIB_GETLINE=0; - GNULIB_OBSTACK_PRINTF=0; - GNULIB_OBSTACK_PRINTF_POSIX=0; - GNULIB_PCLOSE=0; - GNULIB_PERROR=0; - GNULIB_POPEN=0; - GNULIB_PRINTF=0; - GNULIB_PRINTF_POSIX=0; - GNULIB_PUTC=0; - GNULIB_PUTCHAR=0; - GNULIB_PUTS=0; - GNULIB_REMOVE=0; - GNULIB_RENAME=0; - GNULIB_RENAMEAT=0; - GNULIB_SCANF=0; - GNULIB_SNPRINTF=0; - GNULIB_SPRINTF_POSIX=0; - GNULIB_STDIO_H_NONBLOCKING=0; - GNULIB_STDIO_H_SIGPIPE=0; - GNULIB_TMPFILE=0; - GNULIB_VASPRINTF=0; - GNULIB_VFSCANF=0; - GNULIB_VSCANF=0; - GNULIB_VDPRINTF=0; - GNULIB_VFPRINTF=0; - GNULIB_VFPRINTF_POSIX=0; - GNULIB_VPRINTF=0; - GNULIB_VPRINTF_POSIX=0; - GNULIB_VSNPRINTF=0; - GNULIB_VSPRINTF_POSIX=0; - HAVE_DECL_FPURGE=1; - HAVE_DECL_FSEEKO=1; - HAVE_DECL_FTELLO=1; - HAVE_DECL_GETDELIM=1; - HAVE_DECL_GETLINE=1; - HAVE_DECL_OBSTACK_PRINTF=1; - HAVE_DECL_SNPRINTF=1; - HAVE_DECL_VSNPRINTF=1; - HAVE_DPRINTF=1; - HAVE_FSEEKO=1; - HAVE_FTELLO=1; - HAVE_PCLOSE=1; - HAVE_POPEN=1; - HAVE_RENAMEAT=1; - HAVE_VASPRINTF=1; - HAVE_VDPRINTF=1; - REPLACE_DPRINTF=0; - REPLACE_FCLOSE=0; - REPLACE_FDOPEN=0; - REPLACE_FFLUSH=0; - REPLACE_FOPEN=0; - REPLACE_FPRINTF=0; - REPLACE_FPURGE=0; - REPLACE_FREOPEN=0; - REPLACE_FSEEK=0; - REPLACE_FSEEKO=0; - REPLACE_FTELL=0; - REPLACE_FTELLO=0; - REPLACE_GETDELIM=0; - REPLACE_GETLINE=0; - REPLACE_OBSTACK_PRINTF=0; - REPLACE_PERROR=0; - REPLACE_POPEN=0; - REPLACE_PRINTF=0; - REPLACE_REMOVE=0; - REPLACE_RENAME=0; - REPLACE_RENAMEAT=0; - REPLACE_SNPRINTF=0; - REPLACE_SPRINTF=0; - REPLACE_STDIO_READ_FUNCS=0; - REPLACE_STDIO_WRITE_FUNCS=0; - REPLACE_TMPFILE=0; - REPLACE_VASPRINTF=0; - REPLACE_VDPRINTF=0; - REPLACE_VFPRINTF=0; - REPLACE_VPRINTF=0; - REPLACE_VSNPRINTF=0; - REPLACE_VSPRINTF=0; + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sched.h> +int +main () +{ +sched_yield (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + LIB_SCHED_YIELD= +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sched_yield in -lrt" >&5 +$as_echo_n "checking for sched_yield in -lrt... " >&6; } +if ${ac_cv_lib_rt_sched_yield+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lrt $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char sched_yield (); +int +main () +{ +return sched_yield (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_rt_sched_yield=yes +else + ac_cv_lib_rt_sched_yield=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_sched_yield" >&5 +$as_echo "$ac_cv_lib_rt_sched_yield" >&6; } +if test "x$ac_cv_lib_rt_sched_yield" = xyes; then : + LIB_SCHED_YIELD=-lrt +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sched_yield in -lposix4" >&5 +$as_echo_n "checking for sched_yield in -lposix4... " >&6; } +if ${ac_cv_lib_posix4_sched_yield+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lposix4 $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char sched_yield (); +int +main () +{ +return sched_yield (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_posix4_sched_yield=yes +else + ac_cv_lib_posix4_sched_yield=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_posix4_sched_yield" >&5 +$as_echo "$ac_cv_lib_posix4_sched_yield" >&6; } +if test "x$ac_cv_lib_posix4_sched_yield" = xyes; then : + LIB_SCHED_YIELD=-lposix4 +fi +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + gl_pthreadlib_body_done=done + fi + LIBTHREAD=$LIBPTHREAD LTLIBTHREAD=$LIBPTHREAD + LIBMULTITHREAD=$LIBPMULTITHREAD LTLIBMULTITHREAD=$LIBPMULTITHREAD + if test $gl_pthread_api = yes; then + if test "$gl_use_threads" = isoc+posix && test "$gl_have_isoc_threads" = yes; then + gl_threads_api='isoc+posix' +$as_echo "#define USE_ISOC_AND_POSIX_THREADS 1" >>confdefs.h + LIBTHREAD= LTLIBTHREAD= + else + gl_threads_api=posix +$as_echo "#define USE_POSIX_THREADS 1" >>confdefs.h + if test -n "$LIBMULTITHREAD" || test -n "$LTLIBMULTITHREAD"; then + if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then +$as_echo "#define USE_POSIX_THREADS_WEAK 1" >>confdefs.h + LIBTHREAD= LTLIBTHREAD= + fi + fi + fi + fi + fi + if test $gl_threads_api = none; then + if test "$gl_use_threads" = isoc && test "$gl_have_isoc_threads" = yes; then + if test -z "$gl_stdthreadlib_body_done"; then + case "$host_os" in + mingw*) + LIBSTDTHREAD= + ;; + *) + if test -z "$gl_pthreadlib_body_done"; then + gl_pthread_api=no + LIBPTHREAD= + LIBPMULTITHREAD= + # On OSF/1, the compiler needs the flag -pthread or -D_REENTRANT so that + # it groks <pthread.h>. It's added above, in gl_ANYTHREADLIB_EARLY. + ac_fn_c_check_header_mongrel "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default" +if test "x$ac_cv_header_pthread_h" = xyes; then : + gl_have_pthread_h=yes +else + gl_have_pthread_h=no +fi + if test "$gl_have_pthread_h" = yes; then + # Other possible tests: + # -lpthreads (FSU threads, PCthreads) + # -lgthreads + # Test whether both pthread_mutex_lock and pthread_mutexattr_init exist + # in libc. IRIX 6.5 has the first one in both libc and libpthread, but + # the second one only in libpthread, and lock.c needs it. + # + # If -pthread works, prefer it to -lpthread, since Ubuntu 14.04 + # needs -pthread for some reason. See: + # https://lists.gnu.org/r/bug-gnulib/2014-09/msg00023.html + save_LIBS=$LIBS + for gl_pthread in '' '-pthread'; do + LIBS="$LIBS $gl_pthread" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <pthread.h> + pthread_mutex_t m; + pthread_mutexattr_t ma; +int +main () +{ +pthread_mutex_lock (&m); + pthread_mutexattr_init (&ma); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + gl_pthread_api=yes + LIBPTHREAD=$gl_pthread + LIBPMULTITHREAD=$gl_pthread +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LIBS=$save_LIBS + test $gl_pthread_api = yes && break + done + # Test for libpthread by looking for pthread_kill. (Not pthread_self, + # since it is defined as a macro on OSF/1.) + if test $gl_pthread_api = yes && test -z "$LIBPTHREAD"; then + # The program links fine without libpthread. But it may actually + # need to link with libpthread in order to create multiple threads. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lpthread" >&5 +$as_echo_n "checking for pthread_kill in -lpthread... " >&6; } +if ${ac_cv_lib_pthread_pthread_kill+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lpthread $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char pthread_kill (); +int +main () +{ +return pthread_kill (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_pthread_pthread_kill=yes +else + ac_cv_lib_pthread_pthread_kill=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_kill" >&5 +$as_echo "$ac_cv_lib_pthread_pthread_kill" >&6; } +if test "x$ac_cv_lib_pthread_pthread_kill" = xyes; then : + LIBPMULTITHREAD=-lpthread + # On Solaris and HP-UX, most pthread functions exist also in libc. + # Therefore pthread_in_use() needs to actually try to create a + # thread: pthread_create from libc will fail, whereas + # pthread_create will actually create a thread. + # On Solaris 10 or newer, this test is no longer needed, because + # libc contains the fully functional pthread functions. + case "$host_os" in + solaris | solaris2.1-9 | solaris2.1-9.* | hpux*) +$as_echo "#define PTHREAD_IN_USE_DETECTION_HARD 1" >>confdefs.h + esac +fi + elif test $gl_pthread_api != yes; then + # Some library is needed. Try libpthread and libc_r. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lpthread" >&5 +$as_echo_n "checking for pthread_kill in -lpthread... " >&6; } +if ${ac_cv_lib_pthread_pthread_kill+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lpthread $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - ac_fn_c_check_decl "$LINENO" "setenv" "ac_cv_have_decl_setenv" "$ac_includes_default" -if test "x$ac_cv_have_decl_setenv" = xyes; then : - ac_have_decl=1 +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char pthread_kill (); +int +main () +{ +return pthread_kill (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_pthread_pthread_kill=yes else - ac_have_decl=0 + ac_cv_lib_pthread_pthread_kill=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_kill" >&5 +$as_echo "$ac_cv_lib_pthread_pthread_kill" >&6; } +if test "x$ac_cv_lib_pthread_pthread_kill" = xyes; then : + gl_pthread_api=yes + LIBPTHREAD=-lpthread + LIBPMULTITHREAD=-lpthread fi -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_SETENV $ac_have_decl -_ACEOF + if test $gl_pthread_api != yes; then + # For FreeBSD 4. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lc_r" >&5 +$as_echo_n "checking for pthread_kill in -lc_r... " >&6; } +if ${ac_cv_lib_c_r_pthread_kill+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lc_r $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char pthread_kill (); +int +main () +{ +return pthread_kill (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_c_r_pthread_kill=yes +else + ac_cv_lib_c_r_pthread_kill=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_r_pthread_kill" >&5 +$as_echo "$ac_cv_lib_c_r_pthread_kill" >&6; } +if test "x$ac_cv_lib_c_r_pthread_kill" = xyes; then : + gl_pthread_api=yes + LIBPTHREAD=-lc_r + LIBPMULTITHREAD=-lc_r +fi + fi + fi + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether POSIX threads API is available" >&5 +$as_echo_n "checking whether POSIX threads API is available... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_pthread_api" >&5 +$as_echo "$gl_pthread_api" >&6; } + if test $gl_pthread_api = yes; then +$as_echo "#define HAVE_PTHREAD_API 1" >>confdefs.h + fi + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sched.h> +int +main () +{ +sched_yield (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + LIB_SCHED_YIELD= +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sched_yield in -lrt" >&5 +$as_echo_n "checking for sched_yield in -lrt... " >&6; } +if ${ac_cv_lib_rt_sched_yield+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lrt $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char sched_yield (); +int +main () +{ +return sched_yield (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_rt_sched_yield=yes +else + ac_cv_lib_rt_sched_yield=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_sched_yield" >&5 +$as_echo "$ac_cv_lib_rt_sched_yield" >&6; } +if test "x$ac_cv_lib_rt_sched_yield" = xyes; then : + LIB_SCHED_YIELD=-lrt +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sched_yield in -lposix4" >&5 +$as_echo_n "checking for sched_yield in -lposix4... " >&6; } +if ${ac_cv_lib_posix4_sched_yield+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lposix4 $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - : +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char sched_yield (); +int +main () +{ +return sched_yield (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_posix4_sched_yield=yes +else + ac_cv_lib_posix4_sched_yield=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_posix4_sched_yield" >&5 +$as_echo "$ac_cv_lib_posix4_sched_yield" >&6; } +if test "x$ac_cv_lib_posix4_sched_yield" = xyes; then : + LIB_SCHED_YIELD=-lposix4 +fi +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext - if test $ac_cv_have_decl_setenv = no; then - HAVE_DECL_SETENV=0 + gl_pthreadlib_body_done=done fi - : - - - - - - - - - - : - - - - - - for ac_header in search.h + if test $ac_cv_header_threads_h = yes; then + for ac_func in thrd_create do : - ac_fn_c_check_header_mongrel "$LINENO" "search.h" "ac_cv_header_search_h" "$ac_includes_default" -if test "x$ac_cv_header_search_h" = xyes; then : + ac_fn_c_check_func "$LINENO" "thrd_create" "ac_cv_func_thrd_create" +if test "x$ac_cv_func_thrd_create" = xyes; then : cat >>confdefs.h <<_ACEOF -#define HAVE_SEARCH_H 1 +#define HAVE_THRD_CREATE 1 _ACEOF fi - done - for ac_func in tsearch -do : - ac_fn_c_check_func "$LINENO" "tsearch" "ac_cv_func_tsearch" -if test "x$ac_cv_func_tsearch" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_TSEARCH 1 -_ACEOF + if test $ac_cv_func_thrd_create = yes; then + LIBSTDTHREAD= + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for thrd_create in -lstdthreads" >&5 +$as_echo_n "checking for thrd_create in -lstdthreads... " >&6; } +if ${ac_cv_lib_stdthreads_thrd_create+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lstdthreads $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char thrd_create (); +int +main () +{ +return thrd_create (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_stdthreads_thrd_create=yes +else + ac_cv_lib_stdthreads_thrd_create=no fi -done +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_stdthreads_thrd_create" >&5 +$as_echo "$ac_cv_lib_stdthreads_thrd_create" >&6; } +if test "x$ac_cv_lib_stdthreads_thrd_create" = xyes; then : + LIBSTDTHREAD='-lstdthreads -lpthread' +else + LIBSTDTHREAD="$LIBPMULTITHREAD" - GNULIB_PTHREAD_SIGMASK=0; - GNULIB_RAISE=0; - GNULIB_SIGNAL_H_SIGPIPE=0; - GNULIB_SIGPROCMASK=0; - GNULIB_SIGACTION=0; - HAVE_POSIX_SIGNALBLOCKING=1; - HAVE_PTHREAD_SIGMASK=1; - HAVE_RAISE=1; - HAVE_SIGSET_T=1; - HAVE_SIGINFO_T=1; - HAVE_SIGACTION=1; - HAVE_STRUCT_SIGACTION_SA_SIGACTION=1; +fi - HAVE_TYPE_VOLATILE_SIG_ATOMIC_T=1; + fi + else + LIBSTDTHREAD="$LIBPMULTITHREAD $LIB_SCHED_YIELD" + fi + ;; + esac - HAVE_SIGHANDLER_T=1; - REPLACE_PTHREAD_SIGMASK=0; - REPLACE_RAISE=0; + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ISO C threads API is available" >&5 +$as_echo_n "checking whether ISO C threads API is available... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_threads_h" >&5 +$as_echo "$ac_cv_header_threads_h" >&6; } + gl_stdthreadlib_body_done=done + fi - ac_fn_c_check_type "$LINENO" "sigset_t" "ac_cv_type_sigset_t" " - #include <signal.h> - /* Mingw defines sigset_t not in <signal.h>, but in <sys/types.h>. */ - #include <sys/types.h> + LIBTHREAD=$LIBSTDTHREAD LTLIBTHREAD=$LIBSTDTHREAD + LIBMULTITHREAD=$LIBSTDTHREAD LTLIBMULTITHREAD=$LIBSTDTHREAD + gl_threads_api=isoc -" -if test "x$ac_cv_type_sigset_t" = xyes; then : +$as_echo "#define USE_ISOC_THREADS 1" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define HAVE_SIGSET_T 1 -_ACEOF + fi + fi + if test $gl_threads_api = none; then + case "$gl_use_threads" in + yes | windows | win32) # The 'win32' is for backward compatibility. + if { case "$host_os" in + mingw*) true;; + *) false;; + esac + }; then + gl_threads_api=windows -gl_cv_type_sigset_t=yes -else - gl_cv_type_sigset_t=no -fi +$as_echo "#define USE_WINDOWS_THREADS 1" >>confdefs.h - if test $gl_cv_type_sigset_t != yes; then - HAVE_SIGSET_T=0 + fi + ;; + esac + fi fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for multithread API to use" >&5 +$as_echo_n "checking for multithread API to use... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_threads_api" >&5 +$as_echo "$gl_threads_api" >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for uid_t in sys/types.h" >&5 -$as_echo_n "checking for uid_t in sys/types.h... " >&6; } -if ${ac_cv_type_uid_t+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <sys/types.h> -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "uid_t" >/dev/null 2>&1; then : - ac_cv_type_uid_t=yes -else - ac_cv_type_uid_t=no -fi -rm -f conftest* -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_uid_t" >&5 -$as_echo "$ac_cv_type_uid_t" >&6; } -if test $ac_cv_type_uid_t = no; then -$as_echo "#define uid_t int" >>confdefs.h -$as_echo "#define gid_t int" >>confdefs.h -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5 -$as_echo_n "checking for stdbool.h that conforms to C99... " >&6; } -if ${ac_cv_header_stdbool_h+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - #include <stdbool.h> - #ifdef __cplusplus - typedef bool Bool; - #else - typedef _Bool Bool; - #ifndef bool - "error: bool is not defined" - #endif - #ifndef false - "error: false is not defined" - #endif - #if false - "error: false is not 0" - #endif - #ifndef true - "error: true is not defined" - #endif - #if true != 1 - "error: true is not 1" - #endif - #endif - #ifndef __bool_true_false_are_defined - "error: __bool_true_false_are_defined is not defined" - #endif - struct s { Bool s: 1; Bool t; bool u: 1; bool v; } s; + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether malloc, realloc, calloc are POSIX compliant" >&5 +$as_echo_n "checking whether malloc, realloc, calloc are POSIX compliant... " >&6; } +if ${gl_cv_func_malloc_posix+:} false; then : + $as_echo_n "(cached) " >&6 +else - char a[true == 1 ? 1 : -1]; - char b[false == 0 ? 1 : -1]; - char c[__bool_true_false_are_defined == 1 ? 1 : -1]; - char d[(bool) 0.5 == true ? 1 : -1]; - /* See body of main program for 'e'. */ - char f[(Bool) 0.0 == false ? 1 : -1]; - char g[true]; - char h[sizeof (Bool)]; - char i[sizeof s.t]; - enum { j = false, k = true, l = false * true, m = true * 256 }; - /* The following fails for - HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */ - Bool n[m]; - char o[sizeof n == m * sizeof n[0] ? 1 : -1]; - char p[-1 - (Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1]; - /* Catch a bug in an HP-UX C compiler. See - http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html - http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html - */ - Bool q = true; - Bool *pq = &q; - bool *qq = &q; + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ int main () { - - bool e = &s; - *pq |= q; *pq |= ! q; - *qq |= q; *qq |= ! q; - /* Refer to every declared value, to avoid compiler optimizations. */ - return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l - + !m + !n + !o + !p + !q + !pq + !qq); +#if defined _WIN32 && ! defined __CYGWIN__ + choke me + #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_header_stdbool_h=yes + gl_cv_func_malloc_posix=yes else - ac_cv_header_stdbool_h=no + gl_cv_func_malloc_posix=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdbool_h" >&5 -$as_echo "$ac_cv_header_stdbool_h" >&6; } - ac_fn_c_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default" -if test "x$ac_cv_type__Bool" = xyes; then : - -cat >>confdefs.h <<_ACEOF -#define HAVE__BOOL 1 -_ACEOF - fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_malloc_posix" >&5 +$as_echo "$gl_cv_func_malloc_posix" >&6; } - REPLACE_NULL=0; - HAVE_MAX_ALIGN_T=1; - HAVE_WCHAR_T=1; + for ac_header in stdlib.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default" +if test "x$ac_cv_header_stdlib_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_STDLIB_H 1 +_ACEOF +fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wchar_t" >&5 -$as_echo_n "checking for wchar_t... " >&6; } -if ${gt_cv_c_wchar_t+:} false; then : +done + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible malloc" >&5 +$as_echo_n "checking for GNU libc compatible malloc... " >&6; } +if ${ac_cv_func_malloc_0_nonnull+:} false; then : $as_echo_n "(cached) " >&6 else + if test "$cross_compiling" = yes; then : + case "$host_os" in + # Guess yes on platforms where we know the result. + *-gnu* | gnu* | *-musl* | freebsd* | netbsd* | openbsd* \ + | hpux* | solaris* | cygwin* | mingw*) + ac_cv_func_malloc_0_nonnull="guessing yes" ;; + # If we don't know, obey --enable-cross-guesses. + *) ac_cv_func_malloc_0_nonnull="$gl_cross_guess_normal" ;; + esac + +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include <stddef.h> - wchar_t foo = (wchar_t)'\0'; +#if defined STDC_HEADERS || defined HAVE_STDLIB_H + # include <stdlib.h> + #else + char *malloc (); + #endif + int main () { - +char *p = malloc (0); + int result = !p; + free (p); + return result; ; return 0; } + _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - gt_cv_c_wchar_t=yes +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_malloc_0_nonnull=yes else - gt_cv_c_wchar_t=no + ac_cv_func_malloc_0_nonnull=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_wchar_t" >&5 -$as_echo "$gt_cv_c_wchar_t" >&6; } - if test $gt_cv_c_wchar_t = yes; then -$as_echo "#define HAVE_WCHAR_T 1" >>confdefs.h - fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_malloc_0_nonnull" >&5 +$as_echo "$ac_cv_func_malloc_0_nonnull" >&6; } + case "$ac_cv_func_malloc_0_nonnull" in + *yes) + gl_cv_func_malloc_0_nonnull=1 + ;; + *) + gl_cv_func_malloc_0_nonnull=0 + ;; + esac +cat >>confdefs.h <<_ACEOF +#define MALLOC_0_IS_NONNULL $gl_cv_func_malloc_0_nonnull +_ACEOF - ac_fn_c_check_decl "$LINENO" "strdup" "ac_cv_have_decl_strdup" "$ac_includes_default" -if test "x$ac_cv_have_decl_strdup" = xyes; then : - ac_have_decl=1 + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a traditional japanese locale" >&5 +$as_echo_n "checking for a traditional japanese locale... " >&6; } +if ${gt_cv_locale_ja+:} false; then : + $as_echo_n "(cached) " >&6 else - ac_have_decl=0 -fi -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_STRDUP $ac_have_decl + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <locale.h> +#include <time.h> +#if HAVE_LANGINFO_CODESET +# include <langinfo.h> +#endif +#include <stdlib.h> +#include <string.h> +struct tm t; +char buf[16]; +int main () +{ + /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl + imitates locale dependent behaviour by looking at the environment + variables, and all locales use the UTF-8 encoding. */ +#if defined __BEOS__ || defined __HAIKU__ + return 1; +#else + /* Check whether the given locale name is recognized by the system. */ +# if defined _WIN32 && !defined __CYGWIN__ + /* On native Windows, setlocale(category, "") looks at the system settings, + not at the environment variables. Also, when an encoding suffix such + as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE + category of the locale to "C". */ + if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL + || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) + return 1; +# else + if (setlocale (LC_ALL, "") == NULL) return 1; +# endif + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) + is empty, and the behaviour of Tcl 8.4 in this locale is not useful. + On OpenBSD 4.0, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "646". In this situation, + some unit tests fail. + On MirBSD 10, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "UTF-8". */ +# if HAVE_LANGINFO_CODESET + { + const char *cs = nl_langinfo (CODESET); + if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0 + || strcmp (cs, "UTF-8") == 0) + return 1; + } +# endif +# ifdef __CYGWIN__ + /* On Cygwin, avoid locale names without encoding suffix, because the + locale_charset() function relies on the encoding suffix. Note that + LC_ALL is set on the command line. */ + if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; +# endif + /* Check whether MB_CUR_MAX is > 1. This excludes the dysfunctional locales + on Cygwin 1.5.x. */ + if (MB_CUR_MAX == 1) + return 1; + /* Check whether in a month name, no byte in the range 0x80..0x9F occurs. + This excludes the UTF-8 encoding (except on MirBSD). */ + { + const char *p; + t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; + if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1; + for (p = buf; *p != '\0'; p++) + if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0) + return 1; + } + return 0; +#endif +} + _ACEOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest$ac_exeext; then + case "$host_os" in + # Handle native Windows specially, because there setlocale() interprets + # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", + # "fr" or "fra" as "French" or "French_France.1252", + # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", + # "ja" as "Japanese" or "Japanese_Japan.932", + # and similar. + mingw*) + # Note that on native Windows, the Japanese locale is + # Japanese_Japan.932, and CP932 is very different from EUC-JP, so we + # cannot use it here. + gt_cv_locale_ja=none + ;; + *) + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the + # configure script would override the LC_ALL setting. Likewise for + # LC_CTYPE, which is also set at the beginning of the configure script. + # Test for the AIX locale name. + if (LC_ALL=ja_JP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_ja=ja_JP + else + # Test for the locale name with explicit encoding suffix. + if (LC_ALL=ja_JP.EUC-JP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_ja=ja_JP.EUC-JP + else + # Test for the HP-UX, OSF/1, NetBSD locale name. + if (LC_ALL=ja_JP.eucJP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_ja=ja_JP.eucJP + else + # Test for the IRIX, FreeBSD locale name. + if (LC_ALL=ja_JP.EUC LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_ja=ja_JP.EUC + else + # Test for the Solaris 7 locale name. + if (LC_ALL=ja LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_ja=ja + else + # Special test for NetBSD 1.6. + if test -f /usr/share/locale/ja_JP.eucJP/LC_CTYPE; then + gt_cv_locale_ja=ja_JP.eucJP + else + # None found. + gt_cv_locale_ja=none + fi + fi + fi + fi + fi + fi + ;; + esac + fi + rm -fr conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_ja" >&5 +$as_echo "$gt_cv_locale_ja" >&6; } + LOCALE_JA=$gt_cv_locale_ja - REPLACE_STRERROR_0=0 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether strerror(0) succeeds" >&5 -$as_echo_n "checking whether strerror(0) succeeds... " >&6; } -if ${gl_cv_func_strerror_0_works+:} false; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a french Unicode locale" >&5 +$as_echo_n "checking for a french Unicode locale... " >&6; } +if ${gt_cv_locale_fr_utf8+:} false; then : $as_echo_n "(cached) " >&6 else - if test "$cross_compiling" = yes; then : - case "$host_os" in - # Guess yes on glibc systems. - *-gnu*) gl_cv_func_strerror_0_works="guessing yes" ;; - # If we don't know, assume the worst. - *) gl_cv_func_strerror_0_works="guessing no" ;; - esac -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include <string.h> - #include <errno.h> -int -main () -{ -int result = 0; - char *str; - errno = 0; - str = strerror (0); - if (!*str) result |= 1; - if (errno) result |= 2; - if (strstr (str, "nknown") || strstr (str, "ndefined")) - result |= 4; - return result; - ; +#include <locale.h> +#include <time.h> +#if HAVE_LANGINFO_CODESET +# include <langinfo.h> +#endif +#include <stdlib.h> +#include <string.h> +struct tm t; +char buf[16]; +int main () { + /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl + imitates locale dependent behaviour by looking at the environment + variables, and all locales use the UTF-8 encoding. */ +#if !(defined __BEOS__ || defined __HAIKU__) + /* Check whether the given locale name is recognized by the system. */ +# if defined _WIN32 && !defined __CYGWIN__ + /* On native Windows, setlocale(category, "") looks at the system settings, + not at the environment variables. Also, when an encoding suffix such + as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE + category of the locale to "C". */ + if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL + || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) + return 1; +# else + if (setlocale (LC_ALL, "") == NULL) return 1; +# endif + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) + is empty, and the behaviour of Tcl 8.4 in this locale is not useful. + On OpenBSD 4.0, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "646". In this situation, + some unit tests fail. */ +# if HAVE_LANGINFO_CODESET + { + const char *cs = nl_langinfo (CODESET); + if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) + return 1; + } +# endif +# ifdef __CYGWIN__ + /* On Cygwin, avoid locale names without encoding suffix, because the + locale_charset() function relies on the encoding suffix. Note that + LC_ALL is set on the command line. */ + if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; +# endif + /* Check whether in the abbreviation of the second month, the second + character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is + two bytes long, with UTF-8 encoding. */ + t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; + if (strftime (buf, sizeof (buf), "%b", &t) < 4 + || buf[1] != (char) 0xc3 || buf[2] != (char) 0xa9 || buf[3] != 'v') + return 1; +#endif +#if !defined __BIONIC__ /* Bionic libc's 'struct lconv' is just a dummy. */ + /* Check whether the decimal separator is a comma. + On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point + are nl_langinfo(RADIXCHAR) are both ".". */ + if (localeconv () ->decimal_point[0] != ',') return 1; +#endif return 0; } -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - gl_cv_func_strerror_0_works=yes -else - gl_cv_func_strerror_0_works=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi +_ACEOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest$ac_exeext; then + case "$host_os" in + # Handle native Windows specially, because there setlocale() interprets + # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", + # "fr" or "fra" as "French" or "French_France.1252", + # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", + # "ja" as "Japanese" or "Japanese_Japan.932", + # and similar. + mingw*) + # Test for the hypothetical native Windows locale name. + if (LC_ALL=French_France.65001 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr_utf8=French_France.65001 + else + # None found. + gt_cv_locale_fr_utf8=none + fi + ;; + *) + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the + # configure script would override the LC_ALL setting. Likewise for + # LC_CTYPE, which is also set at the beginning of the configure script. + # Test for the usual locale name. + if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr_utf8=fr_FR + else + # Test for the locale name with explicit encoding suffix. + if (LC_ALL=fr_FR.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr_utf8=fr_FR.UTF-8 + else + # Test for the Solaris 7 locale name. + if (LC_ALL=fr.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr_utf8=fr.UTF-8 + else + # None found. + gt_cv_locale_fr_utf8=none + fi + fi + fi + ;; + esac + fi + rm -fr conftest* fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_strerror_0_works" >&5 -$as_echo "$gl_cv_func_strerror_0_works" >&6; } - case "$gl_cv_func_strerror_0_works" in - *yes) ;; - *) - REPLACE_STRERROR_0=1 - -$as_echo "#define REPLACE_STRERROR_0 1" >>confdefs.h - - ;; - esac - - - - - - - - - - - ac_fn_c_check_func "$LINENO" "strerror_r" "ac_cv_func_strerror_r" -if test "x$ac_cv_func_strerror_r" = xyes; then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_fr_utf8" >&5 +$as_echo "$gt_cv_locale_fr_utf8" >&6; } + LOCALE_FR_UTF8=$gt_cv_locale_fr_utf8 -fi - if test $ac_cv_func_strerror_r = yes; then - if test "$ERRNO_H:$REPLACE_STRERROR_0" = :0; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for strerror_r with POSIX signature" >&5 -$as_echo_n "checking for strerror_r with POSIX signature... " >&6; } -if ${gl_cv_func_strerror_r_posix_signature+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <string.h> - int strerror_r (int, char *, size_t); -int -main () -{ - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - gl_cv_func_strerror_r_posix_signature=yes -else - gl_cv_func_strerror_r_posix_signature=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_strerror_r_posix_signature" >&5 -$as_echo "$gl_cv_func_strerror_r_posix_signature" >&6; } - if test $gl_cv_func_strerror_r_posix_signature = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether strerror_r works" >&5 -$as_echo_n "checking whether strerror_r works... " >&6; } -if ${gl_cv_func_strerror_r_works+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a transitional chinese locale" >&5 +$as_echo_n "checking for a transitional chinese locale... " >&6; } +if ${gt_cv_locale_zh_CN+:} false; then : $as_echo_n "(cached) " >&6 else - if test "$cross_compiling" = yes; then : - - case "$host_os" in - # Guess no on AIX. - aix*) gl_cv_func_strerror_r_works="guessing no";; - # Guess no on HP-UX. - hpux*) gl_cv_func_strerror_r_works="guessing no";; - # Guess no on BSD variants. - *bsd*) gl_cv_func_strerror_r_works="guessing no";; - # Guess yes otherwise. - *) gl_cv_func_strerror_r_works="guessing yes";; - esac -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include <errno.h> - #include <string.h> -int -main () +#include <locale.h> +#include <stdlib.h> +#include <time.h> +#if HAVE_LANGINFO_CODESET +# include <langinfo.h> +#endif +#include <stdlib.h> +#include <string.h> +struct tm t; +char buf[16]; +int main () { -int result = 0; - char buf[79]; - if (strerror_r (EACCES, buf, 0) < 0) - result |= 1; - errno = 0; - if (strerror_r (EACCES, buf, sizeof buf) != 0) - result |= 2; - strcpy (buf, "Unknown"); - if (strerror_r (0, buf, sizeof buf) != 0) - result |= 4; - if (errno) - result |= 8; - if (strstr (buf, "nknown") || strstr (buf, "ndefined")) - result |= 0x10; - errno = 0; - *buf = 0; - if (strerror_r (-3, buf, sizeof buf) < 0) - result |= 0x20; - if (errno) - result |= 0x40; - if (!*buf) - result |= 0x80; - return result; - - ; + /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl + imitates locale dependent behaviour by looking at the environment + variables, and all locales use the UTF-8 encoding. */ +#if defined __BEOS__ || defined __HAIKU__ + return 1; +#else + /* Check whether the given locale name is recognized by the system. */ +# if defined _WIN32 && !defined __CYGWIN__ + /* On native Windows, setlocale(category, "") looks at the system settings, + not at the environment variables. Also, when an encoding suffix such + as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE + category of the locale to "C". */ + if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL + || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) + return 1; +# else + if (setlocale (LC_ALL, "") == NULL) return 1; +# endif + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) + is empty, and the behaviour of Tcl 8.4 in this locale is not useful. + On OpenBSD 4.0, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "646". In this situation, + some unit tests fail. + On MirBSD 10, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "UTF-8". */ +# if HAVE_LANGINFO_CODESET + { + const char *cs = nl_langinfo (CODESET); + if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0 + || strcmp (cs, "UTF-8") == 0) + return 1; + } +# endif +# ifdef __CYGWIN__ + /* On Cygwin, avoid locale names without encoding suffix, because the + locale_charset() function relies on the encoding suffix. Note that + LC_ALL is set on the command line. */ + if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; +# endif + /* Check whether in a month name, no byte in the range 0x80..0x9F occurs. + This excludes the UTF-8 encoding (except on MirBSD). */ + { + const char *p; + t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; + if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1; + for (p = buf; *p != '\0'; p++) + if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0) + return 1; + } + /* Check whether a typical GB18030 multibyte sequence is recognized as a + single wide character. This excludes the GB2312 and GBK encodings. */ + if (mblen ("\203\062\332\066", 5) != 4) + return 1; return 0; +#endif } -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - gl_cv_func_strerror_r_works=yes -else - gl_cv_func_strerror_r_works=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi +_ACEOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest$ac_exeext; then + case "$host_os" in + # Handle native Windows specially, because there setlocale() interprets + # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", + # "fr" or "fra" as "French" or "French_France.1252", + # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", + # "ja" as "Japanese" or "Japanese_Japan.932", + # and similar. + mingw*) + # Test for the hypothetical native Windows locale name. + if (LC_ALL=Chinese_China.54936 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_zh_CN=Chinese_China.54936 + else + # None found. + gt_cv_locale_zh_CN=none + fi + ;; + solaris2.8) + # On Solaris 8, the locales zh_CN.GB18030, zh_CN.GBK, zh.GBK are + # broken. One witness is the test case in gl_MBRTOWC_SANITYCHECK. + # Another witness is that "LC_ALL=zh_CN.GB18030 bash -c true" dumps core. + gt_cv_locale_zh_CN=none + ;; + *) + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the + # configure script would override the LC_ALL setting. Likewise for + # LC_CTYPE, which is also set at the beginning of the configure script. + # Test for the locale name without encoding suffix. + if (LC_ALL=zh_CN LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_zh_CN=zh_CN + else + # Test for the locale name with explicit encoding suffix. + if (LC_ALL=zh_CN.GB18030 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_zh_CN=zh_CN.GB18030 + else + # None found. + gt_cv_locale_zh_CN=none + fi + fi + ;; + esac + else + # If there was a link error, due to mblen(), the system is so old that + # it certainly doesn't have a chinese locale. + gt_cv_locale_zh_CN=none + fi + rm -fr conftest* fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_strerror_r_works" >&5 -$as_echo "$gl_cv_func_strerror_r_works" >&6; } - else - - : - - - +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_zh_CN" >&5 +$as_echo "$gt_cv_locale_zh_CN" >&6; } + LOCALE_ZH_CN=$gt_cv_locale_zh_CN - if test $ac_cv_func___xpg_strerror_r = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether __xpg_strerror_r works" >&5 -$as_echo_n "checking whether __xpg_strerror_r works... " >&6; } -if ${gl_cv_func_strerror_r_works+:} false; then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 +$as_echo_n "checking for inline... " >&6; } +if ${ac_cv_c_inline+:} false; then : $as_echo_n "(cached) " >&6 else - if test "$cross_compiling" = yes; then : - gl_cv_func_strerror_r_works="guessing no" - -else + ac_cv_c_inline=no +for ac_kw in inline __inline__ __inline; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include <errno.h> - #include <string.h> - extern - #ifdef __cplusplus - "C" - #endif - int __xpg_strerror_r(int, char *, size_t); - -int -main () -{ -int result = 0; - char buf[256] = "^"; - char copy[256]; - char *str = strerror (-1); - strcpy (copy, str); - if (__xpg_strerror_r (-2, buf, 1) == 0) - result |= 1; - if (*buf) - result |= 2; - __xpg_strerror_r (-2, buf, 256); - if (strcmp (str, copy)) - result |= 4; - return result; +#ifndef __cplusplus +typedef int foo_t; +static $ac_kw foo_t static_foo () {return 0; } +$ac_kw foo_t foo () {return 0; } +#endif - ; - return 0; -} _ACEOF -if ac_fn_c_try_run "$LINENO"; then : - gl_cv_func_strerror_r_works=yes -else - gl_cv_func_strerror_r_works=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_inline=$ac_kw fi - +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + test "$ac_cv_c_inline" != no && break +done fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_strerror_r_works" >&5 -$as_echo "$gl_cv_func_strerror_r_works" >&6; } - fi - fi - fi - fi - - - - - - - - - +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 +$as_echo "$ac_cv_c_inline" >&6; } +case $ac_cv_c_inline in + inline | yes) ;; + *) + case $ac_cv_c_inline in + no) ac_val=;; + *) ac_val=$ac_cv_c_inline;; + esac + cat >>confdefs.h <<_ACEOF +#ifndef __cplusplus +#define inline $ac_val +#endif +_ACEOF + ;; +esac + GNULIB_EXPLICIT_BZERO=0; + GNULIB_FFSL=0; + GNULIB_FFSLL=0; + GNULIB_MEMCHR=0; + GNULIB_MEMMEM=0; + GNULIB_MEMPCPY=0; + GNULIB_MEMRCHR=0; + GNULIB_RAWMEMCHR=0; + GNULIB_STPCPY=0; + GNULIB_STPNCPY=0; + GNULIB_STRCHRNUL=0; + GNULIB_STRDUP=0; + GNULIB_STRNCAT=0; + GNULIB_STRNDUP=0; + GNULIB_STRNLEN=0; + GNULIB_STRPBRK=0; + GNULIB_STRSEP=0; + GNULIB_STRSTR=0; + GNULIB_STRCASESTR=0; + GNULIB_STRTOK_R=0; + GNULIB_MBSLEN=0; + GNULIB_MBSNLEN=0; + GNULIB_MBSCHR=0; + GNULIB_MBSRCHR=0; + GNULIB_MBSSTR=0; + GNULIB_MBSCASECMP=0; + GNULIB_MBSNCASECMP=0; + GNULIB_MBSPCASECMP=0; + GNULIB_MBSCASESTR=0; + GNULIB_MBSCSPN=0; + GNULIB_MBSPBRK=0; + GNULIB_MBSSPN=0; + GNULIB_MBSSEP=0; + GNULIB_MBSTOK_R=0; + GNULIB_STRERROR=0; + GNULIB_STRERROR_R=0; + GNULIB_STRSIGNAL=0; + GNULIB_STRVERSCMP=0; + HAVE_MBSLEN=0; + HAVE_EXPLICIT_BZERO=1; + HAVE_FFSL=1; + HAVE_FFSLL=1; + HAVE_MEMCHR=1; + HAVE_DECL_MEMMEM=1; + HAVE_MEMPCPY=1; + HAVE_DECL_MEMRCHR=1; + HAVE_RAWMEMCHR=1; + HAVE_STPCPY=1; + HAVE_STPNCPY=1; + HAVE_STRCHRNUL=1; + HAVE_DECL_STRDUP=1; + HAVE_DECL_STRNDUP=1; + HAVE_DECL_STRNLEN=1; + HAVE_STRPBRK=1; + HAVE_STRSEP=1; + HAVE_STRCASESTR=1; + HAVE_DECL_STRTOK_R=1; + HAVE_DECL_STRERROR_R=1; + HAVE_DECL_STRSIGNAL=1; + HAVE_STRVERSCMP=1; + REPLACE_MEMCHR=0; + REPLACE_MEMMEM=0; + REPLACE_STPNCPY=0; + REPLACE_STRCHRNUL=0; + REPLACE_STRDUP=0; + REPLACE_STRNCAT=0; + REPLACE_STRNDUP=0; + REPLACE_STRNLEN=0; + REPLACE_STRSTR=0; + REPLACE_STRCASESTR=0; + REPLACE_STRTOK_R=0; + REPLACE_STRERROR=0; + REPLACE_STRERROR_R=0; + REPLACE_STRSIGNAL=0; + UNDEFINE_STRTOK_R=0; - if test $gl_cv_have_include_next = yes; then - gl_cv_next_string_h='<'string.h'>' - else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <string.h>" >&5 -$as_echo_n "checking absolute name of <string.h>... " >&6; } -if ${gl_cv_next_string_h+:} false; then : - $as_echo_n "(cached) " >&6 + # Check for mmap(). Don't use AC_FUNC_MMAP, because it checks too much: it + # fails on HP-UX 11, because MAP_FIXED mappings do not work. But this is + # irrelevant for anonymous mappings. + ac_fn_c_check_func "$LINENO" "mmap" "ac_cv_func_mmap" +if test "x$ac_cv_func_mmap" = xyes; then : + gl_have_mmap=yes else + gl_have_mmap=no +fi - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + # Try to allow MAP_ANONYMOUS. + gl_have_mmap_anonymous=no + if test $gl_have_mmap = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for MAP_ANONYMOUS" >&5 +$as_echo_n "checking for MAP_ANONYMOUS... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include <string.h> + +#include <sys/mman.h> +#ifdef MAP_ANONYMOUS + I cannot identify this map +#endif + _ACEOF - case "$host_os" in - aix*) gl_absname_cpp="$ac_cpp -C" ;; - *) gl_absname_cpp="$ac_cpp" ;; - esac +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "I cannot identify this map" >/dev/null 2>&1; then : + gl_have_mmap_anonymous=yes +fi +rm -f conftest* - case "$host_os" in - mingw*) - gl_dirsep_regex='[/\\]' - ;; - *) - gl_dirsep_regex='\/' - ;; - esac - gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' - gl_header_literal_regex=`echo 'string.h' \ - | sed -e "$gl_make_literal_regex_sed"` - gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ - s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ - s|^/[^/]|//&| - p - q - }' + if test $gl_have_mmap_anonymous != yes; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - gl_cv_absolute_string_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | - sed -n "$gl_absolute_header_sed"` +#include <sys/mman.h> +#ifdef MAP_ANON + I cannot identify this map +#endif - gl_header=$gl_cv_absolute_string_h - gl_cv_next_string_h='"'$gl_header'"' +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "I cannot identify this map" >/dev/null 2>&1; then : +$as_echo "#define MAP_ANONYMOUS MAP_ANON" >>confdefs.h + gl_have_mmap_anonymous=yes fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_string_h" >&5 -$as_echo "$gl_cv_next_string_h" >&6; } - fi - NEXT_STRING_H=$gl_cv_next_string_h +rm -f conftest* - if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then - # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' - gl_next_as_first_directive='<'string.h'>' - else - # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' - gl_next_as_first_directive=$gl_cv_next_string_h - fi - NEXT_AS_FIRST_DIRECTIVE_STRING_H=$gl_next_as_first_directive + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_have_mmap_anonymous" >&5 +$as_echo "$gl_have_mmap_anonymous" >&6; } + if test $gl_have_mmap_anonymous = yes; then + +$as_echo "#define HAVE_MAP_ANONYMOUS 1" >>confdefs.h + + fi + fi - for gl_func in ffsl ffsll memmem mempcpy memrchr rawmemchr stpcpy stpncpy strchrnul strdup strncat strndup strnlen strpbrk strsep strcasestr strtok_r strerror_r strsignal strverscmp; do - as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh` - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5 -$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; } -if eval \${$as_gl_Symbol+:} false; then : + if test $HAVE_MEMCHR = 1; then + # Detect platform-specific bugs in some versions of glibc: + # memchr should not dereference anything with length 0 + # https://bugzilla.redhat.com/show_bug.cgi?id=499689 + # memchr should not dereference overestimated length after a match + # https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=521737 + # https://sourceware.org/bugzilla/show_bug.cgi?id=10162 + # memchr should cast the second argument to 'unsigned char'. + # This bug exists in Android 4.3. + # Assume that memchr works on platforms that lack mprotect. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether memchr works" >&5 +$as_echo_n "checking whether memchr works... " >&6; } +if ${gl_cv_func_memchr_works+:} false; then : $as_echo_n "(cached) " >&6 else + if test "$cross_compiling" = yes; then : + case "$host_os" in + # Guess no on Android. + linux*-android*) gl_cv_func_memchr_works="guessing no" ;; + # Guess yes on native Windows. + mingw*) gl_cv_func_memchr_works="guessing yes" ;; + # If we don't know, obey --enable-cross-guesses. + *) gl_cv_func_memchr_works="$gl_cross_guess_normal" ;; + esac + +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ + #include <string.h> +#if HAVE_SYS_MMAN_H +# include <fcntl.h> +# include <unistd.h> +# include <sys/types.h> +# include <sys/mman.h> +# ifndef MAP_FILE +# define MAP_FILE 0 +# endif +#endif int main () { -#undef $gl_func - (void) $gl_func; + + int result = 0; + char *fence = NULL; +#if HAVE_SYS_MMAN_H && HAVE_MPROTECT +# if HAVE_MAP_ANONYMOUS + const int flags = MAP_ANONYMOUS | MAP_PRIVATE; + const int fd = -1; +# else /* !HAVE_MAP_ANONYMOUS */ + const int flags = MAP_FILE | MAP_PRIVATE; + int fd = open ("/dev/zero", O_RDONLY, 0666); + if (fd >= 0) +# endif + { + int pagesize = getpagesize (); + char *two_pages = + (char *) mmap (NULL, 2 * pagesize, PROT_READ | PROT_WRITE, + flags, fd, 0); + if (two_pages != (char *)(-1) + && mprotect (two_pages + pagesize, pagesize, PROT_NONE) == 0) + fence = two_pages + pagesize; + } +#endif + if (fence) + { + if (memchr (fence, 0, 0)) + result |= 1; + strcpy (fence - 9, "12345678"); + if (memchr (fence - 9, 0, 79) != fence - 1) + result |= 2; + if (memchr (fence - 1, 0, 3) != fence - 1) + result |= 4; + } + /* Test against bug on Android 4.3. */ + { + char input[3]; + input[0] = 'a'; + input[1] = 'b'; + input[2] = 'c'; + if (memchr (input, 0x789abc00 | 'b', 3) != input + 1) + result |= 8; + } + return result; + ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$as_gl_Symbol=yes" +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_memchr_works=yes else - eval "$as_gl_Symbol=no" + gl_cv_func_memchr_works=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext fi -eval ac_res=\$$as_gl_Symbol - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - if eval test \"x\$"$as_gl_Symbol"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1 -_ACEOF - eval ac_cv_have_decl_$gl_func=yes + fi - done +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_memchr_works" >&5 +$as_echo "$gl_cv_func_memchr_works" >&6; } + case "$gl_cv_func_memchr_works" in + *yes) ;; + *) REPLACE_MEMCHR=1 ;; + esac + fi + +ac_fn_c_check_decl "$LINENO" "memmem" "ac_cv_have_decl_memmem" "$ac_includes_default" +if test "x$ac_cv_have_decl_memmem" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_MEMMEM $ac_have_decl +_ACEOF - if test "$gl_cv_func_memchr_works" != yes; then - REPLACE_STRSTR=1 + for ac_func in memmem +do : + ac_fn_c_check_func "$LINENO" "memmem" "ac_cv_func_memmem" +if test "x$ac_cv_func_memmem" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_MEMMEM 1 +_ACEOF + +fi +done + + if test $ac_cv_func_memmem = yes; then + HAVE_MEMMEM=1 else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether strstr works" >&5 -$as_echo_n "checking whether strstr works... " >&6; } -if ${gl_cv_func_strstr_works_always+:} false; then : + HAVE_MEMMEM=0 + fi + + if test $ac_cv_have_decl_memmem = no; then + HAVE_DECL_MEMMEM=0 + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether memmem works" >&5 +$as_echo_n "checking whether memmem works... " >&6; } +if ${gl_cv_func_memmem_works_always+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __GNU_LIBRARY__ #include <features.h> - #if ((__GLIBC__ == 2 && __GLIBC_MINOR__ > 12) || (__GLIBC__ > 2)) \ + #if ((__GLIBC__ == 2 && ((__GLIBC_MINOR > 0 && __GLIBC_MINOR__ < 9) \ + || __GLIBC_MINOR__ > 12)) \ + || (__GLIBC__ > 2)) \ || defined __UCLIBC__ Lucky user #endif @@ -15685,9 +15626,9 @@ _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Lucky user" >/dev/null 2>&1; then : - gl_cv_func_strstr_works_always="guessing yes" + gl_cv_func_memmem_works_always="guessing yes" else - gl_cv_func_strstr_works_always="guessing no" + gl_cv_func_memmem_works_always="$gl_cross_guess_normal" fi rm -f conftest* @@ -15696,7 +15637,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include <string.h> /* for strstr */ +#include <string.h> /* for memmem */ #define P "_EF_BF_BD" #define HAYSTACK "F_BD_CE_BD" P P P P "_C3_88_20" P P P "_C3_A7_20" P #define NEEDLE P P P P P @@ -15704,524 +15645,601 @@ int main () { -return !!strstr (HAYSTACK, NEEDLE); - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - gl_cv_func_strstr_works_always=yes -else - gl_cv_func_strstr_works_always=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_strstr_works_always" >&5 -$as_echo "$gl_cv_func_strstr_works_always" >&6; } - case "$gl_cv_func_strstr_works_always" in - *yes) ;; - *) - REPLACE_STRSTR=1 - ;; - esac - fi - - - ac_fn_c_check_decl "$LINENO" "strtok_r" "ac_cv_have_decl_strtok_r" "$ac_includes_default" -if test "x$ac_cv_have_decl_strtok_r" = xyes; then : - ac_have_decl=1 -else - ac_have_decl=0 -fi - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_STRTOK_R $ac_have_decl -_ACEOF - - - - - - - + int result = 0; + if (memmem (HAYSTACK, strlen (HAYSTACK), NEEDLE, strlen (NEEDLE))) + result |= 1; + /* Check for empty needle behavior. */ + { + const char *haystack = "AAA"; + if (memmem (haystack, 3, (const char *) 1, 0) != haystack) + result |= 2; + } + return result; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_memmem_works_always=yes +else + gl_cv_func_memmem_works_always=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi - - - - - - - - - - - if test $gl_cv_have_include_next = yes; then - gl_cv_next_sys_types_h='<'sys/types.h'>' - else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <sys/types.h>" >&5 -$as_echo_n "checking absolute name of <sys/types.h>... " >&6; } -if ${gl_cv_next_sys_types_h+:} false; then : - $as_echo_n "(cached) " >&6 -else - - - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <sys/types.h> -_ACEOF - case "$host_os" in - aix*) gl_absname_cpp="$ac_cpp -C" ;; - *) gl_absname_cpp="$ac_cpp" ;; - esac - - case "$host_os" in - mingw*) - gl_dirsep_regex='[/\\]' - ;; - *) - gl_dirsep_regex='\/' - ;; - esac - gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' - gl_header_literal_regex=`echo 'sys/types.h' \ - | sed -e "$gl_make_literal_regex_sed"` - gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ - s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ - s|^/[^/]|//&| - p - q - }' - - gl_cv_absolute_sys_types_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | - sed -n "$gl_absolute_header_sed"` - - gl_header=$gl_cv_absolute_sys_types_h - gl_cv_next_sys_types_h='"'$gl_header'"' - - fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sys_types_h" >&5 -$as_echo "$gl_cv_next_sys_types_h" >&6; } - fi - NEXT_SYS_TYPES_H=$gl_cv_next_sys_types_h +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_memmem_works_always" >&5 +$as_echo "$gl_cv_func_memmem_works_always" >&6; } + case "$gl_cv_func_memmem_works_always" in + *yes) ;; + *) + REPLACE_MEMMEM=1 + ;; + esac + fi + : - if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then - # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' - gl_next_as_first_directive='<'sys/types.h'>' - else - # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' - gl_next_as_first_directive=$gl_cv_next_sys_types_h - fi - NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H=$gl_next_as_first_directive +ac_fn_c_check_decl "$LINENO" "memrchr" "ac_cv_have_decl_memrchr" "$ac_includes_default" +if test "x$ac_cv_have_decl_memrchr" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_MEMRCHR $ac_have_decl +_ACEOF + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether <limits.h> defines MIN and MAX" >&5 +$as_echo_n "checking whether <limits.h> defines MIN and MAX... " >&6; } +if ${gl_cv_minmax_in_limits_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <limits.h> + int x = MIN (42, 17); +int +main () +{ + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_minmax_in_limits_h=yes +else + gl_cv_minmax_in_limits_h=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_minmax_in_limits_h" >&5 +$as_echo "$gl_cv_minmax_in_limits_h" >&6; } + if test $gl_cv_minmax_in_limits_h = yes; then +$as_echo "#define HAVE_MINMAX_IN_LIMITS_H 1" >>confdefs.h + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether <sys/param.h> defines MIN and MAX" >&5 +$as_echo_n "checking whether <sys/param.h> defines MIN and MAX... " >&6; } +if ${gl_cv_minmax_in_sys_param_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/param.h> + int x = MIN (42, 17); +int +main () +{ + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_minmax_in_sys_param_h=yes +else + gl_cv_minmax_in_sys_param_h=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_minmax_in_sys_param_h" >&5 +$as_echo "$gl_cv_minmax_in_sys_param_h" >&6; } + if test $gl_cv_minmax_in_sys_param_h = yes; then +$as_echo "#define HAVE_MINMAX_IN_SYS_PARAM_H 1" >>confdefs.h + fi - GNULIB_MKTIME=0; - GNULIB_NANOSLEEP=0; - GNULIB_STRPTIME=0; - GNULIB_TIMEGM=0; - GNULIB_TIME_R=0; - GNULIB_TIME_RZ=0; - HAVE_DECL_LOCALTIME_R=1; - HAVE_NANOSLEEP=1; - HAVE_STRPTIME=1; - HAVE_TIMEGM=1; - REPLACE_LOCALTIME_R=GNULIB_PORTCHECK; - REPLACE_MKTIME=GNULIB_PORTCHECK; - REPLACE_NANOSLEEP=GNULIB_PORTCHECK; - REPLACE_TIMEGM=GNULIB_PORTCHECK; - : ${GNULIB_GETTIMEOFDAY=0}; - REPLACE_GMTIME=0; - REPLACE_LOCALTIME=0; - : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct timespec in <time.h>" >&5 -$as_echo_n "checking for struct timespec in <time.h>... " >&6; } -if ${gl_cv_sys_struct_timespec_in_time_h+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for O_CLOEXEC" >&5 +$as_echo_n "checking for O_CLOEXEC... " >&6; } +if ${gl_cv_macro_O_CLOEXEC+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include <time.h> +#include <fcntl.h> + #ifndef O_CLOEXEC + choke me; + #endif int main () { -static struct timespec x; x.tv_sec = x.tv_nsec; +return O_CLOEXEC; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : - gl_cv_sys_struct_timespec_in_time_h=yes + gl_cv_macro_O_CLOEXEC=yes else - gl_cv_sys_struct_timespec_in_time_h=no + gl_cv_macro_O_CLOEXEC=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_sys_struct_timespec_in_time_h" >&5 -$as_echo "$gl_cv_sys_struct_timespec_in_time_h" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_macro_O_CLOEXEC" >&5 +$as_echo "$gl_cv_macro_O_CLOEXEC" >&6; } - TIME_H_DEFINES_STRUCT_TIMESPEC=0 - SYS_TIME_H_DEFINES_STRUCT_TIMESPEC=0 - PTHREAD_H_DEFINES_STRUCT_TIMESPEC=0 - UNISTD_H_DEFINES_STRUCT_TIMESPEC=0 - if test $gl_cv_sys_struct_timespec_in_time_h = yes; then - TIME_H_DEFINES_STRUCT_TIMESPEC=1 - else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct timespec in <sys/time.h>" >&5 -$as_echo_n "checking for struct timespec in <sys/time.h>... " >&6; } -if ${gl_cv_sys_struct_timespec_in_sys_time_h+:} false; then : + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for promoted mode_t type" >&5 +$as_echo_n "checking for promoted mode_t type... " >&6; } +if ${gl_cv_promoted_mode_t+:} false; then : $as_echo_n "(cached) " >&6 else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include <sys/time.h> +#include <sys/types.h> +int +main () +{ +typedef int array[2 * (sizeof (mode_t) < sizeof (int)) - 1]; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_promoted_mode_t='int' +else + gl_cv_promoted_mode_t='mode_t' +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_promoted_mode_t" >&5 +$as_echo "$gl_cv_promoted_mode_t" >&6; } + +cat >>confdefs.h <<_ACEOF +#define PROMOTED_MODE_T $gl_cv_promoted_mode_t +_ACEOF + + + + + + GNULIB_DPRINTF=0; + GNULIB_FCLOSE=0; + GNULIB_FDOPEN=0; + GNULIB_FFLUSH=0; + GNULIB_FGETC=0; + GNULIB_FGETS=0; + GNULIB_FOPEN=0; + GNULIB_FPRINTF=0; + GNULIB_FPRINTF_POSIX=0; + GNULIB_FPURGE=0; + GNULIB_FPUTC=0; + GNULIB_FPUTS=0; + GNULIB_FREAD=0; + GNULIB_FREOPEN=0; + GNULIB_FSCANF=0; + GNULIB_FSEEK=0; + GNULIB_FSEEKO=0; + GNULIB_FTELL=0; + GNULIB_FTELLO=0; + GNULIB_FWRITE=0; + GNULIB_GETC=0; + GNULIB_GETCHAR=0; + GNULIB_GETDELIM=0; + GNULIB_GETLINE=0; + GNULIB_OBSTACK_PRINTF=0; + GNULIB_OBSTACK_PRINTF_POSIX=0; + GNULIB_PCLOSE=0; + GNULIB_PERROR=0; + GNULIB_POPEN=0; + GNULIB_PRINTF=0; + GNULIB_PRINTF_POSIX=0; + GNULIB_PUTC=0; + GNULIB_PUTCHAR=0; + GNULIB_PUTS=0; + GNULIB_REMOVE=0; + GNULIB_RENAME=0; + GNULIB_RENAMEAT=0; + GNULIB_SCANF=0; + GNULIB_SNPRINTF=0; + GNULIB_SPRINTF_POSIX=0; + GNULIB_STDIO_H_NONBLOCKING=0; + GNULIB_STDIO_H_SIGPIPE=0; + GNULIB_TMPFILE=0; + GNULIB_VASPRINTF=0; + GNULIB_VFSCANF=0; + GNULIB_VSCANF=0; + GNULIB_VDPRINTF=0; + GNULIB_VFPRINTF=0; + GNULIB_VFPRINTF_POSIX=0; + GNULIB_VPRINTF=0; + GNULIB_VPRINTF_POSIX=0; + GNULIB_VSNPRINTF=0; + GNULIB_VSPRINTF_POSIX=0; + HAVE_DECL_FPURGE=1; + HAVE_DECL_FSEEKO=1; + HAVE_DECL_FTELLO=1; + HAVE_DECL_GETDELIM=1; + HAVE_DECL_GETLINE=1; + HAVE_DECL_OBSTACK_PRINTF=1; + HAVE_DECL_SNPRINTF=1; + HAVE_DECL_VSNPRINTF=1; + HAVE_DPRINTF=1; + HAVE_FSEEKO=1; + HAVE_FTELLO=1; + HAVE_PCLOSE=1; + HAVE_POPEN=1; + HAVE_RENAMEAT=1; + HAVE_VASPRINTF=1; + HAVE_VDPRINTF=1; + REPLACE_DPRINTF=0; + REPLACE_FCLOSE=0; + REPLACE_FDOPEN=0; + REPLACE_FFLUSH=0; + REPLACE_FOPEN=0; + REPLACE_FPRINTF=0; + REPLACE_FPURGE=0; + REPLACE_FREOPEN=0; + REPLACE_FSEEK=0; + REPLACE_FSEEKO=0; + REPLACE_FTELL=0; + REPLACE_FTELLO=0; + REPLACE_GETDELIM=0; + REPLACE_GETLINE=0; + REPLACE_OBSTACK_PRINTF=0; + REPLACE_PERROR=0; + REPLACE_POPEN=0; + REPLACE_PRINTF=0; + REPLACE_REMOVE=0; + REPLACE_RENAME=0; + REPLACE_RENAMEAT=0; + REPLACE_SNPRINTF=0; + REPLACE_SPRINTF=0; + REPLACE_STDIO_READ_FUNCS=0; + REPLACE_STDIO_WRITE_FUNCS=0; + REPLACE_TMPFILE=0; + REPLACE_VASPRINTF=0; + REPLACE_VDPRINTF=0; + REPLACE_VFPRINTF=0; + REPLACE_VPRINTF=0; + REPLACE_VSNPRINTF=0; + REPLACE_VSPRINTF=0; + + -int -main () -{ -static struct timespec x; x.tv_sec = x.tv_nsec; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - gl_cv_sys_struct_timespec_in_sys_time_h=yes +ac_fn_c_check_decl "$LINENO" "setenv" "ac_cv_have_decl_setenv" "$ac_includes_default" +if test "x$ac_cv_have_decl_setenv" = xyes; then : + ac_have_decl=1 else - gl_cv_sys_struct_timespec_in_sys_time_h=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_have_decl=0 fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_sys_struct_timespec_in_sys_time_h" >&5 -$as_echo "$gl_cv_sys_struct_timespec_in_sys_time_h" >&6; } - if test $gl_cv_sys_struct_timespec_in_sys_time_h = yes; then - SYS_TIME_H_DEFINES_STRUCT_TIMESPEC=1 - else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct timespec in <pthread.h>" >&5 -$as_echo_n "checking for struct timespec in <pthread.h>... " >&6; } -if ${gl_cv_sys_struct_timespec_in_pthread_h+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <pthread.h> -int -main () -{ -static struct timespec x; x.tv_sec = x.tv_nsec; - ; - return 0; -} +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_SETENV $ac_have_decl _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - gl_cv_sys_struct_timespec_in_pthread_h=yes -else - gl_cv_sys_struct_timespec_in_pthread_h=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_sys_struct_timespec_in_pthread_h" >&5 -$as_echo "$gl_cv_sys_struct_timespec_in_pthread_h" >&6; } - if test $gl_cv_sys_struct_timespec_in_pthread_h = yes; then - PTHREAD_H_DEFINES_STRUCT_TIMESPEC=1 - else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct timespec in <unistd.h>" >&5 -$as_echo_n "checking for struct timespec in <unistd.h>... " >&6; } -if ${gl_cv_sys_struct_timespec_in_unistd_h+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <unistd.h> -int -main () -{ -static struct timespec x; x.tv_sec = x.tv_nsec; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - gl_cv_sys_struct_timespec_in_unistd_h=yes -else - gl_cv_sys_struct_timespec_in_unistd_h=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_sys_struct_timespec_in_unistd_h" >&5 -$as_echo "$gl_cv_sys_struct_timespec_in_unistd_h" >&6; } - if test $gl_cv_sys_struct_timespec_in_unistd_h = yes; then - UNISTD_H_DEFINES_STRUCT_TIMESPEC=1 - fi - fi - fi + + + + + + if test $ac_cv_have_decl_setenv = no; then + HAVE_DECL_SETENV=0 fi + for ac_header in search.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "search.h" "ac_cv_header_search_h" "$ac_includes_default" +if test "x$ac_cv_header_search_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SEARCH_H 1 +_ACEOF +fi +done + for ac_func in tsearch +do : + ac_fn_c_check_func "$LINENO" "tsearch" "ac_cv_func_tsearch" +if test "x$ac_cv_func_tsearch" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_TSEARCH 1 +_ACEOF +fi +done + GNULIB_PTHREAD_SIGMASK=0; + GNULIB_RAISE=0; + GNULIB_SIGNAL_H_SIGPIPE=0; + GNULIB_SIGPROCMASK=0; + GNULIB_SIGACTION=0; + HAVE_POSIX_SIGNALBLOCKING=1; + HAVE_PTHREAD_SIGMASK=1; + HAVE_RAISE=1; + HAVE_SIGSET_T=1; + HAVE_SIGINFO_T=1; + HAVE_SIGACTION=1; + HAVE_STRUCT_SIGACTION_SA_SIGACTION=1; + HAVE_TYPE_VOLATILE_SIG_ATOMIC_T=1; + HAVE_SIGHANDLER_T=1; + REPLACE_PTHREAD_SIGMASK=0; + REPLACE_RAISE=0; - if test $gl_cv_have_include_next = yes; then - gl_cv_next_time_h='<'time.h'>' - else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <time.h>" >&5 -$as_echo_n "checking absolute name of <time.h>... " >&6; } -if ${gl_cv_next_time_h+:} false; then : - $as_echo_n "(cached) " >&6 -else + ac_fn_c_check_type "$LINENO" "sigset_t" "ac_cv_type_sigset_t" " + #include <signal.h> + /* Mingw defines sigset_t not in <signal.h>, but in <sys/types.h>. */ + #include <sys/types.h> +" +if test "x$ac_cv_type_sigset_t" = xyes; then : - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <time.h> +cat >>confdefs.h <<_ACEOF +#define HAVE_SIGSET_T 1 _ACEOF - case "$host_os" in - aix*) gl_absname_cpp="$ac_cpp -C" ;; - *) gl_absname_cpp="$ac_cpp" ;; - esac - case "$host_os" in - mingw*) - gl_dirsep_regex='[/\\]' - ;; - *) - gl_dirsep_regex='\/' - ;; - esac - gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' - gl_header_literal_regex=`echo 'time.h' \ - | sed -e "$gl_make_literal_regex_sed"` - gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ - s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ - s|^/[^/]|//&| - p - q - }' +gl_cv_type_sigset_t=yes +else + gl_cv_type_sigset_t=no +fi - gl_cv_absolute_time_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | - sed -n "$gl_absolute_header_sed"` + if test $gl_cv_type_sigset_t != yes; then + HAVE_SIGSET_T=0 + fi - gl_header=$gl_cv_absolute_time_h - gl_cv_next_time_h='"'$gl_header'"' +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for uid_t in sys/types.h" >&5 +$as_echo_n "checking for uid_t in sys/types.h... " >&6; } +if ${ac_cv_type_uid_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "uid_t" >/dev/null 2>&1; then : + ac_cv_type_uid_t=yes +else + ac_cv_type_uid_t=no +fi +rm -f conftest* fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_time_h" >&5 -$as_echo "$gl_cv_next_time_h" >&6; } - fi - NEXT_TIME_H=$gl_cv_next_time_h +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_uid_t" >&5 +$as_echo "$ac_cv_type_uid_t" >&6; } +if test $ac_cv_type_uid_t = no; then - if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then - # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' - gl_next_as_first_directive='<'time.h'>' - else - # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' - gl_next_as_first_directive=$gl_cv_next_time_h - fi - NEXT_AS_FIRST_DIRECTIVE_TIME_H=$gl_next_as_first_directive +$as_echo "#define uid_t int" >>confdefs.h +$as_echo "#define gid_t int" >>confdefs.h + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5 +$as_echo_n "checking for stdbool.h that conforms to C99... " >&6; } +if ${ac_cv_header_stdbool_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + #include <stdbool.h> + #ifdef __cplusplus + typedef bool Bool; + #else + typedef _Bool Bool; + #ifndef bool + "error: bool is not defined" + #endif + #ifndef false + "error: false is not defined" + #endif + #if false + "error: false is not 0" + #endif + #ifndef true + "error: true is not defined" + #endif + #if true != 1 + "error: true is not 1" + #endif + #endif + #ifndef __bool_true_false_are_defined + "error: __bool_true_false_are_defined is not defined" + #endif + struct s { Bool s: 1; Bool t; bool u: 1; bool v; } s; + char a[true == 1 ? 1 : -1]; + char b[false == 0 ? 1 : -1]; + char c[__bool_true_false_are_defined == 1 ? 1 : -1]; + char d[(bool) 0.5 == true ? 1 : -1]; + /* See body of main program for 'e'. */ + char f[(Bool) 0.0 == false ? 1 : -1]; + char g[true]; + char h[sizeof (Bool)]; + char i[sizeof s.t]; + enum { j = false, k = true, l = false * true, m = true * 256 }; + /* The following fails for + HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */ + Bool n[m]; + char o[sizeof n == m * sizeof n[0] ? 1 : -1]; + char p[-1 - (Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1]; + /* Catch a bug in an HP-UX C compiler. See + https://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html + https://lists.gnu.org/r/bug-coreutils/2005-11/msg00161.html + */ + Bool q = true; + Bool *pq = &q; + bool *qq = &q; +int +main () +{ + bool e = &s; + *pq |= q; *pq |= ! q; + *qq |= q; *qq |= ! q; + /* Refer to every declared value, to avoid compiler optimizations. */ + return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l + + !m + !n + !o + !p + !q + !pq + !qq); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdbool_h=yes +else + ac_cv_header_stdbool_h=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdbool_h" >&5 +$as_echo "$ac_cv_header_stdbool_h" >&6; } + ac_fn_c_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default" +if test "x$ac_cv_type__Bool" = xyes; then : +cat >>confdefs.h <<_ACEOF +#define HAVE__BOOL 1 +_ACEOF +fi - ac_fn_c_check_decl "$LINENO" "unsetenv" "ac_cv_have_decl_unsetenv" "$ac_includes_default" -if test "x$ac_cv_have_decl_unsetenv" = xyes; then : +ac_fn_c_check_decl "$LINENO" "strdup" "ac_cv_have_decl_strdup" "$ac_includes_default" +if test "x$ac_cv_have_decl_strdup" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_UNSETENV $ac_have_decl +#define HAVE_DECL_STRDUP $ac_have_decl _ACEOF - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether <wchar.h> uses 'inline' correctly" >&5 -$as_echo_n "checking whether <wchar.h> uses 'inline' correctly... " >&6; } -if ${gl_cv_header_wchar_h_correct_inline+:} false; then : + REPLACE_STRERROR_0=0 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether strerror(0) succeeds" >&5 +$as_echo_n "checking whether strerror(0) succeeds... " >&6; } +if ${gl_cv_func_strerror_0_works+:} false; then : $as_echo_n "(cached) " >&6 else - gl_cv_header_wchar_h_correct_inline=yes - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - #define wcstod renamed_wcstod -/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before - <wchar.h>. - BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be - included before <wchar.h>. */ -#include <stddef.h> -#include <stdio.h> -#include <time.h> -#include <wchar.h> -extern int zero (void); -int main () { return zero(); } - -_ACEOF - save_ac_compile="$ac_compile" - ac_compile=`echo "$save_ac_compile" | sed s/conftest/conftest1/` - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - #define wcstod renamed_wcstod -/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before - <wchar.h>. - BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be - included before <wchar.h>. */ -#include <stddef.h> -#include <stdio.h> -#include <time.h> -#include <wchar.h> -int zero (void) { return 0; } - -_ACEOF - ac_compile=`echo "$save_ac_compile" | sed s/conftest/conftest2/` - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - if $CC -o conftest$ac_exeext $CFLAGS $LDFLAGS conftest1.$ac_objext conftest2.$ac_objext $LIBS >&5 2>&1; then - : - else - gl_cv_header_wchar_h_correct_inline=no - fi - fi - fi - ac_compile="$save_ac_compile" - rm -f conftest1.$ac_objext conftest2.$ac_objext conftest$ac_exeext - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_wchar_h_correct_inline" >&5 -$as_echo "$gl_cv_header_wchar_h_correct_inline" >&6; } - if test $gl_cv_header_wchar_h_correct_inline = no; then - as_fn_error $? "<wchar.h> cannot be used with this compiler ($CC $CFLAGS $CPPFLAGS). -This is a known interoperability problem of glibc <= 2.5 with gcc >= 4.3 in -C99 mode. You have four options: - - Add the flag -fgnu89-inline to CC and reconfigure, or - - Fix your include files, using parts of - <http://sourceware.org/git/?p=glibc.git;a=commitdiff;h=b037a293a48718af30d706c2e18c929d0e69a621>, or - - Use a gcc version older than 4.3, or - - Don't use the flags -std=c99 or -std=gnu99. -Configuration aborted." "$LINENO" 5 - fi - + if test "$cross_compiling" = yes; then : + case "$host_os" in + # Guess yes on glibc systems. + *-gnu* | gnu*) gl_cv_func_strerror_0_works="guessing yes" ;; + # Guess yes on musl systems. + *-musl*) gl_cv_func_strerror_0_works="guessing yes" ;; + # Guess yes on native Windows. + mingw*) gl_cv_func_strerror_0_works="guessing yes" ;; + # If we don't know, obey --enable-cross-guesses. + *) gl_cv_func_strerror_0_works="$gl_cross_guess_normal" ;; + esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wint_t" >&5 -$as_echo_n "checking for wint_t... " >&6; } -if ${gt_cv_c_wint_t+:} false; then : - $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ +#include <string.h> + #include <errno.h> -/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before - <wchar.h>. - BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included - before <wchar.h>. */ -#include <stddef.h> -#include <stdio.h> -#include <time.h> -#include <wchar.h> - wint_t foo = (wchar_t)'\0'; int main () { - +int result = 0; + char *str; + errno = 0; + str = strerror (0); + if (!*str) result |= 1; + if (errno) result |= 2; + if (strstr (str, "nknown") || strstr (str, "ndefined")) + result |= 4; + return result; ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - gt_cv_c_wint_t=yes +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_strerror_0_works=yes else - gt_cv_c_wint_t=no + gl_cv_func_strerror_0_works=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_wint_t" >&5 -$as_echo "$gt_cv_c_wint_t" >&6; } - if test $gt_cv_c_wint_t = yes; then -$as_echo "#define HAVE_WINT_T 1" >>confdefs.h - fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_strerror_0_works" >&5 +$as_echo "$gl_cv_func_strerror_0_works" >&6; } + case "$gl_cv_func_strerror_0_works" in + *yes) ;; + *) + REPLACE_STRERROR_0=1 +$as_echo "#define REPLACE_STRERROR_0 1" >>confdefs.h - GNULIB_ISWBLANK=0; - GNULIB_WCTYPE=0; - GNULIB_ISWCTYPE=0; - GNULIB_WCTRANS=0; - GNULIB_TOWCTRANS=0; - HAVE_ISWBLANK=1; - HAVE_WCTYPE_T=1; - HAVE_WCTRANS_T=1; - REPLACE_ISWBLANK=0; + ;; + esac @@ -16229,98 +16247,179 @@ - if false; then - GL_COND_LIBTOOL_TRUE= - GL_COND_LIBTOOL_FALSE='#' -else - GL_COND_LIBTOOL_TRUE='#' - GL_COND_LIBTOOL_FALSE= -fi - gl_cond_libtool=false - gl_libdeps= - gl_ltlibdeps= - gl_m4_base='import/m4' + if test $ac_cv_func_strerror_r = yes; then + if test "$ERRNO_H:$REPLACE_STRERROR_0" = :0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for strerror_r with POSIX signature" >&5 +$as_echo_n "checking for strerror_r with POSIX signature... " >&6; } +if ${gl_cv_func_strerror_r_posix_signature+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <string.h> + int strerror_r (int, char *, size_t); +int +main () +{ + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_func_strerror_r_posix_signature=yes +else + gl_cv_func_strerror_r_posix_signature=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_strerror_r_posix_signature" >&5 +$as_echo "$gl_cv_func_strerror_r_posix_signature" >&6; } + if test $gl_cv_func_strerror_r_posix_signature = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether strerror_r works" >&5 +$as_echo_n "checking whether strerror_r works... " >&6; } +if ${gl_cv_func_strerror_r_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + case "$host_os" in + # Guess no on AIX. + aix*) gl_cv_func_strerror_r_works="guessing no";; + # Guess no on HP-UX. + hpux*) gl_cv_func_strerror_r_works="guessing no";; + # Guess no on BSD variants. + *bsd*) gl_cv_func_strerror_r_works="guessing no";; + # Guess yes otherwise. + *) gl_cv_func_strerror_r_works="guessing yes";; + esac +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <errno.h> + #include <string.h> +int +main () +{ +int result = 0; + char buf[79]; + if (strerror_r (EACCES, buf, 0) < 0) + result |= 1; + errno = 0; + if (strerror_r (EACCES, buf, sizeof buf) != 0) + result |= 2; + strcpy (buf, "Unknown"); + if (strerror_r (0, buf, sizeof buf) != 0) + result |= 4; + if (errno) + result |= 8; + if (strstr (buf, "nknown") || strstr (buf, "ndefined")) + result |= 0x10; + errno = 0; + *buf = 0; + if (strerror_r (-3, buf, sizeof buf) < 0) + result |= 0x20; + if (errno) + result |= 0x40; + if (!*buf) + result |= 0x80; + return result; - gl_source_base='import' + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_strerror_r_works=yes +else + gl_cv_func_strerror_r_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi - if test $ac_cv_func_alloca_works = no; then - : - fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_strerror_r_works" >&5 +$as_echo "$gl_cv_func_strerror_r_works" >&6; } + else - # Define an additional variable used in the Makefile substitution. - if test $ac_cv_working_alloca_h = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca as a compiler built-in" >&5 -$as_echo_n "checking for alloca as a compiler built-in... " >&6; } -if ${gl_cv_rpl_alloca+:} false; then : + if test $ac_cv_func___xpg_strerror_r = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether __xpg_strerror_r works" >&5 +$as_echo_n "checking whether __xpg_strerror_r works... " >&6; } +if ${gl_cv_func_strerror_r_works+:} false; then : $as_echo_n "(cached) " >&6 else + if test "$cross_compiling" = yes; then : + gl_cv_func_strerror_r_works="$gl_cross_guess_normal" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ +#include <errno.h> + #include <string.h> + extern + #ifdef __cplusplus + "C" + #endif + int __xpg_strerror_r(int, char *, size_t); -#if defined __GNUC__ || defined _AIX || defined _MSC_VER - Need own alloca -#endif +int +main () +{ +int result = 0; + char buf[256] = "^"; + char copy[256]; + char *str = strerror (-1); + strcpy (copy, str); + if (__xpg_strerror_r (-2, buf, 1) == 0) + result |= 1; + if (*buf) + result |= 2; + __xpg_strerror_r (-2, buf, 256); + if (strcmp (str, copy)) + result |= 4; + return result; + ; + return 0; +} _ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "Need own alloca" >/dev/null 2>&1; then : - gl_cv_rpl_alloca=yes +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_strerror_r_works=yes else - gl_cv_rpl_alloca=no + gl_cv_func_strerror_r_works=no fi -rm -f conftest* - - +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_rpl_alloca" >&5 -$as_echo "$gl_cv_rpl_alloca" >&6; } - if test $gl_cv_rpl_alloca = yes; then -$as_echo "#define HAVE_ALLOCA 1" >>confdefs.h - ALLOCA_H=alloca.h - else - ALLOCA_H= +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_strerror_r_works" >&5 +$as_echo "$gl_cv_func_strerror_r_works" >&6; } + fi + fi fi - else - ALLOCA_H=alloca.h fi - if test -n "$ALLOCA_H"; then - GL_GENERATE_ALLOCA_H_TRUE= - GL_GENERATE_ALLOCA_H_FALSE='#' +ac_fn_c_check_decl "$LINENO" "strerror_r" "ac_cv_have_decl_strerror_r" "$ac_includes_default" +if test "x$ac_cv_have_decl_strerror_r" = xyes; then : + ac_have_decl=1 else - GL_GENERATE_ALLOCA_H_TRUE='#' - GL_GENERATE_ALLOCA_H_FALSE= + ac_have_decl=0 fi - - - - - - : - - - - - - if test $ac_cv_header_arpa_inet_h = yes; then - HAVE_ARPA_INET_H=1 - else - HAVE_ARPA_INET_H=0 - fi +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_STRERROR_R $ac_have_decl +_ACEOF @@ -16328,7 +16427,6 @@ - : @@ -16338,22 +16436,19 @@ if test $gl_cv_have_include_next = yes; then - gl_cv_next_arpa_inet_h='<'arpa/inet.h'>' + gl_cv_next_string_h='<'string.h'>' else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <arpa/inet.h>" >&5 -$as_echo_n "checking absolute name of <arpa/inet.h>... " >&6; } -if ${gl_cv_next_arpa_inet_h+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <string.h>" >&5 +$as_echo_n "checking absolute name of <string.h>... " >&6; } +if ${gl_cv_next_string_h+:} false; then : $as_echo_n "(cached) " >&6 else - if test $ac_cv_header_arpa_inet_h = yes; then - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include <arpa/inet.h> +#include <string.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; @@ -16369,7 +16464,7 @@ ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' - gl_header_literal_regex=`echo 'arpa/inet.h' \ + gl_header_literal_regex=`echo 'string.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ @@ -16378,30 +16473,27 @@ q }' - gl_cv_absolute_arpa_inet_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + gl_cv_absolute_string_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` - gl_header=$gl_cv_absolute_arpa_inet_h - gl_cv_next_arpa_inet_h='"'$gl_header'"' - else - gl_cv_next_arpa_inet_h='<'arpa/inet.h'>' - fi + gl_header=$gl_cv_absolute_string_h + gl_cv_next_string_h='"'$gl_header'"' fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_arpa_inet_h" >&5 -$as_echo "$gl_cv_next_arpa_inet_h" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_string_h" >&5 +$as_echo "$gl_cv_next_string_h" >&6; } fi - NEXT_ARPA_INET_H=$gl_cv_next_arpa_inet_h + NEXT_STRING_H=$gl_cv_next_string_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' - gl_next_as_first_directive='<'arpa/inet.h'>' + gl_next_as_first_directive='<'string.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' - gl_next_as_first_directive=$gl_cv_next_arpa_inet_h + gl_next_as_first_directive=$gl_cv_next_string_h fi - NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H=$gl_next_as_first_directive + NEXT_AS_FIRST_DIRECTIVE_STRING_H=$gl_next_as_first_directive @@ -16410,530 +16502,572 @@ - for gl_func in inet_ntop inet_pton; do - as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh` - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5 -$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; } -if eval \${$as_gl_Symbol+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -/* On some systems, this header is not self-consistent. */ -#if !(defined __GLIBC__ || defined __UCLIBC__) -# include <sys/socket.h> -#endif -#ifdef __TANDEM -# include <netdb.h> -#endif -#include <arpa/inet.h> -int -main () -{ -#undef $gl_func - (void) $gl_func; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$as_gl_Symbol=yes" -else - eval "$as_gl_Symbol=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$as_gl_Symbol - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - if eval test \"x\$"$as_gl_Symbol"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1 -_ACEOF - eval ac_cv_have_decl_$gl_func=yes +ac_fn_c_check_decl "$LINENO" "strnlen" "ac_cv_have_decl_strnlen" "$ac_includes_default" +if test "x$ac_cv_have_decl_strnlen" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 fi - done - - - - - - - - - - - - gl_LIBOBJS="$gl_LIBOBJS openat-proc.$ac_objext" - - - - - if test $ac_cv_func_canonicalize_file_name = no; then - HAVE_CANONICALIZE_FILE_NAME=0 - if test $ac_cv_func_realpath = no; then - HAVE_REALPATH=0 - else - case "$gl_cv_func_realpath_works" in - *yes) ;; - *) REPLACE_REALPATH=1 ;; - esac - fi - else - case "$gl_cv_func_realpath_works" in - *yes) - ;; - *) - REPLACE_CANONICALIZE_FILE_NAME=1 - REPLACE_REALPATH=1 - ;; - esac - fi - - if test $HAVE_CANONICALIZE_FILE_NAME = 0 || test $REPLACE_CANONICALIZE_FILE_NAME = 1; then - - - - - - - - - gl_LIBOBJS="$gl_LIBOBJS canonicalize-lgpl.$ac_objext" - - fi - cat >>confdefs.h <<_ACEOF -#define GNULIB_CANONICALIZE_LGPL 1 +#define HAVE_DECL_STRNLEN $ac_have_decl _ACEOF + if test $HAVE_MEMCHR = 0 || test $REPLACE_MEMCHR = 1; then + REPLACE_STRSTR=1 + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether strstr works" >&5 +$as_echo_n "checking whether strstr works... " >&6; } +if ${gl_cv_func_strstr_works_always+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __GNU_LIBRARY__ + #include <features.h> + #if ((__GLIBC__ == 2 && __GLIBC_MINOR__ > 12) || (__GLIBC__ > 2)) \ + || defined __UCLIBC__ + Lucky user + #endif +#elif defined __CYGWIN__ + #include <cygwin/version.h> + #if CYGWIN_VERSION_DLL_COMBINED > CYGWIN_VERSION_DLL_MAKE_COMBINED (1007, 7) + Lucky user + #endif +#else + Lucky user +#endif - - GNULIB_CANONICALIZE_FILE_NAME=1 +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "Lucky user" >/dev/null 2>&1; then : + gl_cv_func_strstr_works_always="guessing yes" +else + gl_cv_func_strstr_works_always="$gl_cross_guess_normal" +fi +rm -f conftest* +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <string.h> /* for strstr */ +#ifdef __GNU_LIBRARY__ + #include <features.h> + #if __GLIBC__ == 2 && __GLIBC_MINOR__ == 28 + Unlucky user + #endif +#endif +#define P "_EF_BF_BD" +#define HAYSTACK "F_BD_CE_BD" P P P P "_C3_88_20" P P P "_C3_A7_20" P +#define NEEDLE P P P P P +int +main () +{ +return !!strstr (HAYSTACK, NEEDLE); -$as_echo "#define GNULIB_TEST_CANONICALIZE_FILE_NAME 1" >>confdefs.h + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_strstr_works_always=yes +else + gl_cv_func_strstr_works_always=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_strstr_works_always" >&5 +$as_echo "$gl_cv_func_strstr_works_always" >&6; } + case "$gl_cv_func_strstr_works_always" in + *yes) ;; + *) + REPLACE_STRSTR=1 + ;; + esac + fi +ac_fn_c_check_decl "$LINENO" "strtok_r" "ac_cv_have_decl_strtok_r" "$ac_includes_default" +if test "x$ac_cv_have_decl_strtok_r" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_STRTOK_R $ac_have_decl +_ACEOF - GNULIB_REALPATH=1 -$as_echo "#define GNULIB_TEST_REALPATH 1" >>confdefs.h +$as_echo "#define _USE_STD_STAT 1" >>confdefs.h - GNULIB_CHDIR=1 -$as_echo "#define GNULIB_TEST_CHDIR 1" >>confdefs.h + if test $gl_cv_have_include_next = yes; then + gl_cv_next_sys_types_h='<'sys/types.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <sys/types.h>" >&5 +$as_echo_n "checking absolute name of <sys/types.h>... " >&6; } +if ${gl_cv_next_sys_types_h+:} false; then : + $as_echo_n "(cached) " >&6 +else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether this system has an arbitrary file name length limit" >&5 -$as_echo_n "checking whether this system has an arbitrary file name length limit... " >&6; } -if ${gl_cv_have_arbitrary_file_name_length_limit+:} false; then : - $as_echo_n "(cached) " >&6 -else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ - -/* Arrange to define PATH_MAX, like "pathmax.h" does. */ -#if HAVE_UNISTD_H -# include <unistd.h> -#endif -#include <limits.h> -#if defined HAVE_SYS_PARAM_H && !defined PATH_MAX && !defined MAXPATHLEN -# include <sys/param.h> -#endif -#if !defined PATH_MAX && defined MAXPATHLEN -# define PATH_MAX MAXPATHLEN -#endif -#ifdef __hpux -# undef PATH_MAX -# define PATH_MAX 1024 -#endif -#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ -# undef PATH_MAX -# define PATH_MAX 260 -#endif - -#ifdef PATH_MAX -have_arbitrary_file_name_length_limit -#endif +#include <sys/types.h> _ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "have_arbitrary_file_name_length_limit" >/dev/null 2>&1; then : - gl_cv_have_arbitrary_file_name_length_limit=yes -else - gl_cv_have_arbitrary_file_name_length_limit=no -fi -rm -f conftest* + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_have_arbitrary_file_name_length_limit" >&5 -$as_echo "$gl_cv_have_arbitrary_file_name_length_limit" >&6; } + case "$host_os" in + mingw*) + gl_dirsep_regex='[/\\]' + ;; + *) + gl_dirsep_regex='\/' + ;; + esac + gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' + gl_header_literal_regex=`echo 'sys/types.h' \ + | sed -e "$gl_make_literal_regex_sed"` + gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ + s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ + s|^/[^/]|//&| + p + q + }' - if test $gl_cv_have_arbitrary_file_name_length_limit = yes; then + gl_cv_absolute_sys_types_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n "$gl_absolute_header_sed"` + gl_header=$gl_cv_absolute_sys_types_h + gl_cv_next_sys_types_h='"'$gl_header'"' +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sys_types_h" >&5 +$as_echo "$gl_cv_next_sys_types_h" >&6; } + fi + NEXT_SYS_TYPES_H=$gl_cv_next_sys_types_h + if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' + gl_next_as_first_directive='<'sys/types.h'>' + else + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' + gl_next_as_first_directive=$gl_cv_next_sys_types_h + fi + NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H=$gl_next_as_first_directive - gl_LIBOBJS="$gl_LIBOBJS chdir-long.$ac_objext" - : - fi -$as_echo "#define GNULIB_TEST_CLOEXEC 1" >>confdefs.h - if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then - REPLACE_CLOSE=1 - fi + WINDOWS_STAT_INODES=0 - : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct timespec in <time.h>" >&5 +$as_echo_n "checking for struct timespec in <time.h>... " >&6; } +if ${gl_cv_sys_struct_timespec_in_time_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <time.h> - if test $ac_cv_header_sys_socket_h != yes; then - for ac_header in winsock2.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "winsock2.h" "ac_cv_header_winsock2_h" "$ac_includes_default" -if test "x$ac_cv_header_winsock2_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_WINSOCK2_H 1 +int +main () +{ +static struct timespec x; x.tv_sec = x.tv_nsec; + ; + return 0; +} _ACEOF - +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_sys_struct_timespec_in_time_h=yes +else + gl_cv_sys_struct_timespec_in_time_h=no fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_sys_struct_timespec_in_time_h" >&5 +$as_echo "$gl_cv_sys_struct_timespec_in_time_h" >&6; } -done - - fi - if test "$ac_cv_header_winsock2_h" = yes; then - HAVE_WINSOCK2_H=1 - UNISTD_H_HAVE_WINSOCK2_H=1 - SYS_IOCTL_H_HAVE_WINSOCK2_H=1 + TIME_H_DEFINES_STRUCT_TIMESPEC=0 + SYS_TIME_H_DEFINES_STRUCT_TIMESPEC=0 + PTHREAD_H_DEFINES_STRUCT_TIMESPEC=0 + UNISTD_H_DEFINES_STRUCT_TIMESPEC=0 + if test $gl_cv_sys_struct_timespec_in_time_h = yes; then + TIME_H_DEFINES_STRUCT_TIMESPEC=1 else - HAVE_WINSOCK2_H=0 - fi - - - if test $UNISTD_H_HAVE_WINSOCK2_H = 1; then - REPLACE_CLOSE=1 - fi - - - if test $REPLACE_CLOSE = 0; then - - - - : - - - + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct timespec in <sys/time.h>" >&5 +$as_echo_n "checking for struct timespec in <sys/time.h>... " >&6; } +if ${gl_cv_sys_struct_timespec_in_sys_time_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/time.h> +int +main () +{ +static struct timespec x; x.tv_sec = x.tv_nsec; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_sys_struct_timespec_in_sys_time_h=yes +else + gl_cv_sys_struct_timespec_in_sys_time_h=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_sys_struct_timespec_in_sys_time_h" >&5 +$as_echo "$gl_cv_sys_struct_timespec_in_sys_time_h" >&6; } + if test $gl_cv_sys_struct_timespec_in_sys_time_h = yes; then + SYS_TIME_H_DEFINES_STRUCT_TIMESPEC=1 + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct timespec in <pthread.h>" >&5 +$as_echo_n "checking for struct timespec in <pthread.h>... " >&6; } +if ${gl_cv_sys_struct_timespec_in_pthread_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <pthread.h> - if test $ac_cv_func_fchdir = no; then - HAVE_FCHDIR=0 - fi +int +main () +{ +static struct timespec x; x.tv_sec = x.tv_nsec; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_sys_struct_timespec_in_pthread_h=yes +else + gl_cv_sys_struct_timespec_in_pthread_h=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_sys_struct_timespec_in_pthread_h" >&5 +$as_echo "$gl_cv_sys_struct_timespec_in_pthread_h" >&6; } + if test $gl_cv_sys_struct_timespec_in_pthread_h = yes; then + PTHREAD_H_DEFINES_STRUCT_TIMESPEC=1 + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct timespec in <unistd.h>" >&5 +$as_echo_n "checking for struct timespec in <unistd.h>... " >&6; } +if ${gl_cv_sys_struct_timespec_in_unistd_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <unistd.h> - if test $HAVE_FCHDIR = 0; then - REPLACE_CLOSE=1 +int +main () +{ +static struct timespec x; x.tv_sec = x.tv_nsec; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_sys_struct_timespec_in_unistd_h=yes +else + gl_cv_sys_struct_timespec_in_unistd_h=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_sys_struct_timespec_in_unistd_h" >&5 +$as_echo "$gl_cv_sys_struct_timespec_in_unistd_h" >&6; } + if test $gl_cv_sys_struct_timespec_in_unistd_h = yes; then + UNISTD_H_DEFINES_STRUCT_TIMESPEC=1 + fi fi fi - - - if test $REPLACE_CLOSE = 1; then - - + fi - gl_LIBOBJS="$gl_LIBOBJS close.$ac_objext" - fi - GNULIB_CLOSE=1 + if test $gl_cv_have_include_next = yes; then + gl_cv_next_time_h='<'time.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <time.h>" >&5 +$as_echo_n "checking absolute name of <time.h>... " >&6; } +if ${gl_cv_next_time_h+:} false; then : + $as_echo_n "(cached) " >&6 +else -$as_echo "#define GNULIB_TEST_CLOSE 1" >>confdefs.h + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <time.h> +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + case "$host_os" in + mingw*) + gl_dirsep_regex='[/\\]' + ;; + *) + gl_dirsep_regex='\/' + ;; + esac + gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' + gl_header_literal_regex=`echo 'time.h' \ + | sed -e "$gl_make_literal_regex_sed"` + gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ + s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ + s|^/[^/]|//&| + p + q + }' + gl_cv_absolute_time_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n "$gl_absolute_header_sed"` + gl_header=$gl_cv_absolute_time_h + gl_cv_next_time_h='"'$gl_header'"' - for ac_func in closedir -do : - ac_fn_c_check_func "$LINENO" "closedir" "ac_cv_func_closedir" -if test "x$ac_cv_func_closedir" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_CLOSEDIR 1 -_ACEOF fi -done - - if test $ac_cv_func_closedir = no; then - HAVE_CLOSEDIR=0 - fi - - +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_time_h" >&5 +$as_echo "$gl_cv_next_time_h" >&6; } + fi + NEXT_TIME_H=$gl_cv_next_time_h + if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' + gl_next_as_first_directive='<'time.h'>' + else + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' + gl_next_as_first_directive=$gl_cv_next_time_h + fi + NEXT_AS_FIRST_DIRECTIVE_TIME_H=$gl_next_as_first_directive - : - if test $ac_cv_func_fchdir = no; then - HAVE_FCHDIR=0 - fi - if test $HAVE_FCHDIR = 0; then - if test $HAVE_CLOSEDIR = 1; then - REPLACE_CLOSEDIR=1 - fi - fi - case $host_os,$HAVE_CLOSEDIR in - os2*,1) - REPLACE_CLOSEDIR=1;; - esac - if test $HAVE_CLOSEDIR = 0 || test $REPLACE_CLOSEDIR = 1; then +ac_fn_c_check_decl "$LINENO" "unsetenv" "ac_cv_have_decl_unsetenv" "$ac_includes_default" +if test "x$ac_cv_have_decl_unsetenv" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_UNSETENV $ac_have_decl +_ACEOF - gl_LIBOBJS="$gl_LIBOBJS closedir.$ac_objext" + if test $ac_cv_header_crtdefs_h = yes; then + HAVE_CRTDEFS_H=1 + else + HAVE_CRTDEFS_H=0 fi + GNULIB_ISWBLANK=0; + GNULIB_ISWDIGIT=0; + GNULIB_ISWXDIGIT=0; + GNULIB_WCTYPE=0; + GNULIB_ISWCTYPE=0; + GNULIB_WCTRANS=0; + GNULIB_TOWCTRANS=0; + HAVE_ISWBLANK=1; + HAVE_WCTYPE_T=1; + HAVE_WCTRANS_T=1; + REPLACE_ISWBLANK=0; + REPLACE_ISWDIGIT=0; + REPLACE_ISWXDIGIT=0; - GNULIB_CLOSEDIR=1 - -$as_echo "#define GNULIB_TEST_CLOSEDIR 1" >>confdefs.h + if false; then + GL_COND_LIBTOOL_TRUE= + GL_COND_LIBTOOL_FALSE='#' +else + GL_COND_LIBTOOL_TRUE='#' + GL_COND_LIBTOOL_FALSE= +fi + gl_cond_libtool=false + gl_libdeps= + gl_ltlibdeps= + gl_m4_base='import/m4' - if test "x$datarootdir" = x; then - datarootdir='${datadir}' - fi - if test "x$docdir" = x; then - docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' - fi - if test "x$htmldir" = x; then - htmldir='${docdir}' - fi - if test "x$dvidir" = x; then - dvidir='${docdir}' - fi - if test "x$pdfdir" = x; then - pdfdir='${docdir}' - fi - if test "x$psdir" = x; then - psdir='${docdir}' - fi - if test "x$lispdir" = x; then - lispdir='${datarootdir}/emacs/site-lisp' - fi - if test "x$localedir" = x; then - localedir='${datarootdir}/locale' - fi - if test "x$runstatedir" = x; then - runstatedir='${localstatedir}/run' - fi + gl_source_base='import' - pkglibexecdir='${libexecdir}/${PACKAGE}' + if test $ac_cv_func_alloca_works = no; then + : + fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for d_ino member in directory struct" >&5 -$as_echo_n "checking for d_ino member in directory struct... " >&6; } -if ${gl_cv_struct_dirent_d_ino+:} false; then : + # Define an additional variable used in the Makefile substitution. + if test $ac_cv_working_alloca_h = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca as a compiler built-in" >&5 +$as_echo_n "checking for alloca as a compiler built-in... " >&6; } +if ${gl_cv_rpl_alloca+:} false; then : $as_echo_n "(cached) " >&6 else - if test "$cross_compiling" = yes; then : - case "$host_os" in - # Guess yes on glibc systems with Linux kernel. - linux*-gnu*) gl_cv_struct_dirent_d_ino="guessing yes" ;; - # If we don't know, assume the worst. - *) gl_cv_struct_dirent_d_ino="guessing no" ;; - esac - -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <sys/types.h> - #include <sys/stat.h> - #include <dirent.h> - -int -main () -{ -DIR *dp = opendir ("."); - struct dirent *e; - struct stat st; - if (! dp) - return 1; - e = readdir (dp); - if (! e) - return 2; - if (lstat (e->d_name, &st) != 0) - return 3; - if (e->d_ino != st.st_ino) - return 4; - closedir (dp); - return 0; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - gl_cv_struct_dirent_d_ino=yes -else - gl_cv_struct_dirent_d_ino=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_struct_dirent_d_ino" >&5 -$as_echo "$gl_cv_struct_dirent_d_ino" >&6; } - case "$gl_cv_struct_dirent_d_ino" in - *yes) - -$as_echo "#define D_INO_IN_DIRENT 1" >>confdefs.h - - ;; - esac - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for d_type member in directory struct" >&5 -$as_echo_n "checking for d_type member in directory struct... " >&6; } -if ${gl_cv_struct_dirent_d_type+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include <sys/types.h> -#include <dirent.h> +#if defined __GNUC__ || defined _AIX || defined _MSC_VER + Need own alloca +#endif -int -main () -{ -struct dirent dp; dp.d_type = 0; - ; - return 0; -} _ACEOF -if ac_fn_c_try_link "$LINENO"; then : - gl_cv_struct_dirent_d_type=yes +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "Need own alloca" >/dev/null 2>&1; then : + gl_cv_rpl_alloca=yes else - gl_cv_struct_dirent_d_type=no + gl_cv_rpl_alloca=no fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +rm -f conftest* fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_struct_dirent_d_type" >&5 -$as_echo "$gl_cv_struct_dirent_d_type" >&6; } - if test $gl_cv_struct_dirent_d_type = yes; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_rpl_alloca" >&5 +$as_echo "$gl_cv_rpl_alloca" >&6; } + if test $gl_cv_rpl_alloca = yes; then -$as_echo "#define HAVE_STRUCT_DIRENT_D_TYPE 1" >>confdefs.h +$as_echo "#define HAVE_ALLOCA 1" >>confdefs.h - fi + ALLOCA_H=alloca.h + else + ALLOCA_H= + fi + else + ALLOCA_H=alloca.h + fi + if test -n "$ALLOCA_H"; then + GL_GENERATE_ALLOCA_H_TRUE= + GL_GENERATE_ALLOCA_H_FALSE='#' +else + GL_GENERATE_ALLOCA_H_TRUE='#' + GL_GENERATE_ALLOCA_H_FALSE= +fi + if test $ac_cv_working_alloca_h = yes; then + HAVE_ALLOCA_H=1 + else + HAVE_ALLOCA_H=0 + fi + if test $ac_cv_header_arpa_inet_h = yes; then + HAVE_ARPA_INET_H=1 + else + HAVE_ARPA_INET_H=0 + fi - : @@ -16943,22 +17077,22 @@ if test $gl_cv_have_include_next = yes; then - gl_cv_next_dirent_h='<'dirent.h'>' + gl_cv_next_arpa_inet_h='<'arpa/inet.h'>' else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <dirent.h>" >&5 -$as_echo_n "checking absolute name of <dirent.h>... " >&6; } -if ${gl_cv_next_dirent_h+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <arpa/inet.h>" >&5 +$as_echo_n "checking absolute name of <arpa/inet.h>... " >&6; } +if ${gl_cv_next_arpa_inet_h+:} false; then : $as_echo_n "(cached) " >&6 else - if test $ac_cv_header_dirent_h = yes; then + if test $ac_cv_header_arpa_inet_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include <dirent.h> +#include <arpa/inet.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; @@ -16974,7 +17108,7 @@ ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' - gl_header_literal_regex=`echo 'dirent.h' \ + gl_header_literal_regex=`echo 'arpa/inet.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ @@ -16983,544 +17117,404 @@ q }' - gl_cv_absolute_dirent_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + gl_cv_absolute_arpa_inet_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` - gl_header=$gl_cv_absolute_dirent_h - gl_cv_next_dirent_h='"'$gl_header'"' + gl_header=$gl_cv_absolute_arpa_inet_h + gl_cv_next_arpa_inet_h='"'$gl_header'"' else - gl_cv_next_dirent_h='<'dirent.h'>' + gl_cv_next_arpa_inet_h='<'arpa/inet.h'>' fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_dirent_h" >&5 -$as_echo "$gl_cv_next_dirent_h" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_arpa_inet_h" >&5 +$as_echo "$gl_cv_next_arpa_inet_h" >&6; } fi - NEXT_DIRENT_H=$gl_cv_next_dirent_h + NEXT_ARPA_INET_H=$gl_cv_next_arpa_inet_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' - gl_next_as_first_directive='<'dirent.h'>' + gl_next_as_first_directive='<'arpa/inet.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' - gl_next_as_first_directive=$gl_cv_next_dirent_h + gl_next_as_first_directive=$gl_cv_next_arpa_inet_h fi - NEXT_AS_FIRST_DIRECTIVE_DIRENT_H=$gl_next_as_first_directive - + NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H=$gl_next_as_first_directive - if test $ac_cv_header_dirent_h = yes; then - HAVE_DIRENT_H=1 - else - HAVE_DIRENT_H=0 - fi - for gl_func in alphasort closedir dirfd fdopendir opendir readdir rewinddir scandir; do - as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh` - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5 -$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; } -if eval \${$as_gl_Symbol+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <dirent.h> -int -main () -{ -#undef $gl_func - (void) $gl_func; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$as_gl_Symbol=yes" -else - eval "$as_gl_Symbol=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$as_gl_Symbol - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - if eval test \"x\$"$as_gl_Symbol"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1 -_ACEOF - eval ac_cv_have_decl_$gl_func=yes -fi - done + if test $ac_cv_header_sys_socket_h = yes; then + HAVE_WS2TCPIP_H=0 + else + if test $ac_cv_header_ws2tcpip_h = yes; then + HAVE_WS2TCPIP_H=1 + else + HAVE_WS2TCPIP_H=0 + fi + fi - for ac_func in dirfd -do : - ac_fn_c_check_func "$LINENO" "dirfd" "ac_cv_func_dirfd" -if test "x$ac_cv_func_dirfd" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_DIRFD 1 -_ACEOF -fi -done - ac_fn_c_check_decl "$LINENO" "dirfd" "ac_cv_have_decl_dirfd" "#include <sys/types.h> - #include <dirent.h> -" -if test "x$ac_cv_have_decl_dirfd" = xyes; then : - ac_have_decl=1 -else - ac_have_decl=0 -fi -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_DIRFD $ac_have_decl -_ACEOF - if test $ac_cv_have_decl_dirfd = no; then - HAVE_DECL_DIRFD=0 - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether dirfd is a macro" >&5 -$as_echo_n "checking whether dirfd is a macro... " >&6; } -if ${gl_cv_func_dirfd_macro+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <sys/types.h> -#include <dirent.h> -#ifdef dirfd - dirent_header_defines_dirfd -#endif -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "dirent_header_defines_dirfd" >/dev/null 2>&1; then : - gl_cv_func_dirfd_macro=yes -else - gl_cv_func_dirfd_macro=no -fi -rm -f conftest* -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_dirfd_macro" >&5 -$as_echo "$gl_cv_func_dirfd_macro" >&6; } - # Use the replacement if we have no function or macro with that name, - # or if OS/2 kLIBC whose dirfd() does not work. - # Replace only if the system declares dirfd already. - case $ac_cv_func_dirfd,$gl_cv_func_dirfd_macro,$host_os,$ac_cv_have_decl_dirfd in - no,no,*,yes | *,*,os2*,yes) - REPLACE_DIRFD=1 -$as_echo "#define REPLACE_DIRFD 1" >>confdefs.h -;; - esac + if test $ac_cv_func_btowc = no; then + HAVE_BTOWC=0 + else - if test $ac_cv_func_dirfd = no && test $gl_cv_func_dirfd_macro = no \ - || test $REPLACE_DIRFD = 1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether btowc(0) is correct" >&5 +$as_echo_n "checking whether btowc(0) is correct... " >&6; } +if ${gl_cv_func_btowc_nul+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + case "$host_os" in + # Guess no on Cygwin. + cygwin*) gl_cv_func_btowc_nul="guessing no" ;; + # Guess yes on native Windows. + mingw*) gl_cv_func_btowc_nul="guessing yes" ;; + # Guess yes otherwise. + *) gl_cv_func_btowc_nul="guessing yes" ;; + esac +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <string.h> +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> +int main () +{ + if (btowc ('\0') != 0) + return 1; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_btowc_nul=yes +else + gl_cv_func_btowc_nul=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi - gl_LIBOBJS="$gl_LIBOBJS dirfd.$ac_objext" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_btowc_nul" >&5 +$as_echo "$gl_cv_func_btowc_nul" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to get the file descriptor associated with an open DIR*" >&5 -$as_echo_n "checking how to get the file descriptor associated with an open DIR*... " >&6; } -if ${gl_cv_sys_dir_fd_member_name+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether btowc(EOF) is correct" >&5 +$as_echo_n "checking whether btowc(EOF) is correct... " >&6; } +if ${gl_cv_func_btowc_eof+:} false; then : $as_echo_n "(cached) " >&6 else - dirfd_save_CFLAGS=$CFLAGS - for ac_expr in d_fd dd_fd; do - - CFLAGS="$CFLAGS -DDIR_FD_MEMBER_NAME=$ac_expr" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + case "$host_os" in + # Guess no on IRIX. + irix*) gl_cv_func_btowc_eof="guessing no" ;; + # Guess yes on native Windows. + mingw*) gl_cv_func_btowc_eof="guessing yes" ;; + # Guess yes otherwise. + *) gl_cv_func_btowc_eof="guessing yes" ;; + esac + if test $LOCALE_FR != none; then + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ - #include <sys/types.h> - #include <dirent.h> -int -main () +#include <locale.h> +#include <string.h> +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> +int main () { -DIR *dir_p = opendir("."); (void) dir_p->DIR_FD_MEMBER_NAME; - ; + if (setlocale (LC_ALL, "$LOCALE_FR") != NULL) + { + if (btowc (EOF) != WEOF) + return 1; + } return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - dir_fd_found=yes - -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS=$dirfd_save_CFLAGS - test "$dir_fd_found" = yes && break - done - test "$dir_fd_found" = yes || ac_expr=no_such_member - - gl_cv_sys_dir_fd_member_name=$ac_expr - - +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_btowc_eof=yes +else + gl_cv_func_btowc_eof=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_sys_dir_fd_member_name" >&5 -$as_echo "$gl_cv_sys_dir_fd_member_name" >&6; } - if test $gl_cv_sys_dir_fd_member_name != no_such_member; then - -cat >>confdefs.h <<_ACEOF -#define DIR_FD_MEMBER_NAME $gl_cv_sys_dir_fd_member_name -_ACEOF - fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_btowc_eof" >&5 +$as_echo "$gl_cv_func_btowc_eof" >&6; } + case "$gl_cv_func_btowc_nul" in + *yes) ;; + *) REPLACE_BTOWC=1 ;; + esac + case "$gl_cv_func_btowc_eof" in + *yes) ;; + *) REPLACE_BTOWC=1 ;; + esac fi + if test $HAVE_BTOWC = 0 || test $REPLACE_BTOWC = 1; then - GNULIB_DIRFD=1 - - - - - -$as_echo "#define GNULIB_TEST_DIRFD 1" >>confdefs.h - - - + gl_LIBOBJS="$gl_LIBOBJS btowc.$ac_objext" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether // is distinct from /" >&5 -$as_echo_n "checking whether // is distinct from /... " >&6; } -if ${gl_cv_double_slash_root+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test x"$cross_compiling" = xyes ; then - # When cross-compiling, there is no way to tell whether // is special - # short of a list of hosts. However, the only known hosts to date - # that have a distinct // are Apollo DomainOS (too old to port to), - # Cygwin, and z/OS. If anyone knows of another system for which // has - # special semantics and is distinct from /, please report it to - # <bug-gnulib@gnu.org>. - case $host in - *-cygwin | i370-ibm-openedition) - gl_cv_double_slash_root=yes ;; - *) - # Be optimistic and assume that / and // are the same when we - # don't know. - gl_cv_double_slash_root='unknown, assuming no' ;; - esac - else - set x `ls -di / // 2>/dev/null` - if test "$2" = "$4" && wc //dev/null >/dev/null 2>&1; then - gl_cv_double_slash_root=no - else - gl_cv_double_slash_root=yes - fi - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_double_slash_root" >&5 -$as_echo "$gl_cv_double_slash_root" >&6; } - if test "$gl_cv_double_slash_root" = yes; then - -$as_echo "#define DOUBLE_SLASH_IS_DISTINCT_ROOT 1" >>confdefs.h + : fi - if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then - REPLACE_DUP=1 - fi - + GNULIB_BTOWC=1 - : +$as_echo "#define GNULIB_TEST_BTOWC 1" >>confdefs.h - if test $ac_cv_func_fchdir = no; then - HAVE_FCHDIR=0 - fi - if test $HAVE_FCHDIR = 0; then - REPLACE_DUP=1 - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether dup works" >&5 -$as_echo_n "checking whether dup works... " >&6; } -if ${gl_cv_func_dup_works+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __builtin_expect" >&5 +$as_echo_n "checking for __builtin_expect... " >&6; } +if ${gl_cv___builtin_expect+:} false; then : $as_echo_n "(cached) " >&6 else - if test "$cross_compiling" = yes; then : - gl_cv_func_dup_works='guessing yes' -else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include <unistd.h> - #include <fcntl.h> - #include <errno.h> -int -main () -{ -/* On OS/2 kLIBC, dup does not work on a directory fd. */ - int fd = open (".", O_RDONLY); - return fd < 0 ? 1 : dup (fd) < 0 ? 2 : 0; - ; - return 0; -} + int + main (int argc, char **argv) + { + argc = __builtin_expect (argc, 100); + return argv[argc != 100][0]; + } +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + gl_cv___builtin_expect=yes +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + #include <builtins.h> + int + main (int argc, char **argv) + { + argc = __builtin_expect (argc, 100); + return argv[argc != 100][0]; + } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : - gl_cv_func_dup_works=yes +if ac_fn_c_try_link "$LINENO"; then : + gl_cv___builtin_expect="in <builtins.h>" else - gl_cv_func_dup_works=no + gl_cv___builtin_expect=no fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext fi - - +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_dup_works" >&5 -$as_echo "$gl_cv_func_dup_works" >&6; } - case "$gl_cv_func_dup_works" in - *yes) ;; - *) - REPLACE_DUP=1 - ;; - esac - - if test $REPLACE_DUP = 1; then - +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv___builtin_expect" >&5 +$as_echo "$gl_cv___builtin_expect" >&6; } + if test "$gl_cv___builtin_expect" = yes; then + $as_echo "#define HAVE___BUILTIN_EXPECT 1" >>confdefs.h + elif test "$gl_cv___builtin_expect" = "in <builtins.h>"; then + $as_echo "#define HAVE___BUILTIN_EXPECT 2" >>confdefs.h - - - - - - gl_LIBOBJS="$gl_LIBOBJS dup.$ac_objext" - - : fi - GNULIB_DUP=1 + if test $ac_cv_func_canonicalize_file_name = no; then + HAVE_CANONICALIZE_FILE_NAME=0 + if test $ac_cv_func_realpath = no; then + HAVE_REALPATH=0 + else + case "$gl_cv_func_realpath_works" in + *yes) ;; + *) REPLACE_REALPATH=1 ;; + esac + fi + else + case "$gl_cv_func_realpath_works" in + *yes) + ;; + *) + REPLACE_CANONICALIZE_FILE_NAME=1 + REPLACE_REALPATH=1 + ;; + esac + fi + if test $HAVE_CANONICALIZE_FILE_NAME = 0 || test $REPLACE_CANONICALIZE_FILE_NAME = 1; then -$as_echo "#define GNULIB_TEST_DUP 1" >>confdefs.h + gl_LIBOBJS="$gl_LIBOBJS canonicalize-lgpl.$ac_objext" + fi +cat >>confdefs.h <<_ACEOF +#define GNULIB_CANONICALIZE_LGPL 1 +_ACEOF -$as_echo "#define HAVE_DUP2 1" >>confdefs.h - if test $HAVE_DUP2 = 1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether dup2 works" >&5 -$as_echo_n "checking whether dup2 works... " >&6; } -if ${gl_cv_func_dup2_works+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - case "$host_os" in - mingw*) # on this platform, dup2 always returns 0 for success - gl_cv_func_dup2_works="guessing no" ;; - cygwin*) # on cygwin 1.5.x, dup2(1,1) returns 0 - gl_cv_func_dup2_works="guessing no" ;; - aix* | freebsd*) - # on AIX 7.1 and FreeBSD 6.1, dup2 (1,toobig) gives EMFILE, - # not EBADF. - gl_cv_func_dup2_works="guessing no" ;; - haiku*) # on Haiku alpha 2, dup2(1, 1) resets FD_CLOEXEC. - gl_cv_func_dup2_works="guessing no" ;; - *-android*) # implemented using dup3(), which fails if oldfd == newfd - gl_cv_func_dup2_works="guessing no" ;; - os2*) # on OS/2 kLIBC, dup2() does not work on a directory fd. - gl_cv_func_dup2_works="guessing no" ;; - *) gl_cv_func_dup2_works="guessing yes" ;; - esac -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - #include <errno.h> - #include <fcntl.h> - #include <limits.h> - #include <sys/resource.h> - #include <unistd.h> - #ifndef RLIM_SAVED_CUR - # define RLIM_SAVED_CUR RLIM_INFINITY - #endif - #ifndef RLIM_SAVED_MAX - # define RLIM_SAVED_MAX RLIM_INFINITY - #endif -int -main () -{ -int result = 0; - int bad_fd = INT_MAX; - struct rlimit rlim; - if (getrlimit (RLIMIT_NOFILE, &rlim) == 0 - && 0 <= rlim.rlim_cur && rlim.rlim_cur <= INT_MAX - && rlim.rlim_cur != RLIM_INFINITY - && rlim.rlim_cur != RLIM_SAVED_MAX - && rlim.rlim_cur != RLIM_SAVED_CUR) - bad_fd = rlim.rlim_cur; - #ifdef FD_CLOEXEC - if (fcntl (1, F_SETFD, FD_CLOEXEC) == -1) - result |= 1; - #endif - if (dup2 (1, 1) != 1) - result |= 2; - #ifdef FD_CLOEXEC - if (fcntl (1, F_GETFD) != FD_CLOEXEC) - result |= 4; - #endif - close (0); - if (dup2 (0, 0) != -1) - result |= 8; - /* Many gnulib modules require POSIX conformance of EBADF. */ - if (dup2 (2, bad_fd) == -1 && errno != EBADF) - result |= 16; - /* Flush out some cygwin core dumps. */ - if (dup2 (2, -1) != -1 || errno != EBADF) - result |= 32; - dup2 (2, 255); - dup2 (2, 256); - /* On OS/2 kLIBC, dup2() does not work on a directory fd. */ - { - int fd = open (".", O_RDONLY); - if (fd == -1) - result |= 64; - else if (dup2 (fd, fd + 1) == -1) - result |= 128; - close (fd); - } - return result; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - gl_cv_func_dup2_works=yes -else - gl_cv_func_dup2_works=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi + GNULIB_CANONICALIZE_FILE_NAME=1 -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_dup2_works" >&5 -$as_echo "$gl_cv_func_dup2_works" >&6; } - case "$gl_cv_func_dup2_works" in - *yes) ;; - *) - REPLACE_DUP2=1 - for ac_func in setdtablesize -do : - ac_fn_c_check_func "$LINENO" "setdtablesize" "ac_cv_func_setdtablesize" -if test "x$ac_cv_func_setdtablesize" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_SETDTABLESIZE 1 -_ACEOF -fi -done - ;; - esac - fi +$as_echo "#define GNULIB_TEST_CANONICALIZE_FILE_NAME 1" >>confdefs.h - : - if test $ac_cv_func_fchdir = no; then - HAVE_FCHDIR=0 - fi + GNULIB_REALPATH=1 - if test $HAVE_FCHDIR = 0; then - if test $HAVE_DUP2 = 1; then - REPLACE_DUP2=1 - fi - fi - if test $HAVE_DUP2 = 0 || test $REPLACE_DUP2 = 1; then +$as_echo "#define GNULIB_TEST_REALPATH 1" >>confdefs.h - gl_LIBOBJS="$gl_LIBOBJS dup2.$ac_objext" - fi + GNULIB_CHDIR=1 - GNULIB_DUP2=1 +$as_echo "#define GNULIB_TEST_CHDIR 1" >>confdefs.h -$as_echo "#define GNULIB_TEST_DUP2 1" >>confdefs.h + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether this system has an arbitrary file name length limit" >&5 +$as_echo_n "checking whether this system has an arbitrary file name length limit... " >&6; } +if ${gl_cv_have_arbitrary_file_name_length_limit+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Arrange to define PATH_MAX, like "pathmax.h" does. */ +#if HAVE_UNISTD_H +# include <unistd.h> +#endif +#include <limits.h> +#if defined HAVE_SYS_PARAM_H && !defined PATH_MAX && !defined MAXPATHLEN +# include <sys/param.h> +#endif +#if !defined PATH_MAX && defined MAXPATHLEN +# define PATH_MAX MAXPATHLEN +#endif +#ifdef __hpux +# undef PATH_MAX +# define PATH_MAX 1024 +#endif +#if defined _WIN32 && ! defined __CYGWIN__ +# undef PATH_MAX +# define PATH_MAX 260 +#endif + +#ifdef PATH_MAX +have_arbitrary_file_name_length_limit +#endif +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "have_arbitrary_file_name_length_limit" >/dev/null 2>&1; then : + gl_cv_have_arbitrary_file_name_length_limit=yes +else + gl_cv_have_arbitrary_file_name_length_limit=no +fi +rm -f conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_have_arbitrary_file_name_length_limit" >&5 +$as_echo "$gl_cv_have_arbitrary_file_name_length_limit" >&6; } + if test $gl_cv_have_arbitrary_file_name_length_limit = yes; then @@ -17529,918 +17523,1047 @@ - GNULIB_ENVIRON=1 + gl_LIBOBJS="$gl_LIBOBJS chdir-long.$ac_objext" + : + fi +$as_echo "#define GNULIB_TEST_CLOEXEC 1" >>confdefs.h -$as_echo "#define GNULIB_TEST_ENVIRON 1" >>confdefs.h + if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then + REPLACE_CLOSE=1 + fi + - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for error_at_line" >&5 -$as_echo_n "checking for error_at_line... " >&6; } -if ${ac_cv_lib_error_at_line+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <error.h> -int -main () -{ -error_at_line (0, 0, "", 0, "an error occurred"); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_error_at_line=yes -else - ac_cv_lib_error_at_line=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_error_at_line" >&5 -$as_echo "$ac_cv_lib_error_at_line" >&6; } - if test $ac_cv_lib_error_at_line = no; then + if test $ac_cv_header_sys_socket_h != yes; then + for ac_header in winsock2.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "winsock2.h" "ac_cv_header_winsock2_h" "$ac_includes_default" +if test "x$ac_cv_header_winsock2_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_WINSOCK2_H 1 +_ACEOF + +fi +done + fi + if test "$ac_cv_header_winsock2_h" = yes; then + HAVE_WINSOCK2_H=1 + UNISTD_H_HAVE_WINSOCK2_H=1 + SYS_IOCTL_H_HAVE_WINSOCK2_H=1 + else + HAVE_WINSOCK2_H=0 + fi + if test $UNISTD_H_HAVE_WINSOCK2_H = 1; then + REPLACE_CLOSE=1 + fi - gl_LIBOBJS="$gl_LIBOBJS error.$ac_objext" + if test $REPLACE_CLOSE = 0; then - : + if test $ac_cv_func_fchdir = no; then + HAVE_FCHDIR=0 fi + if test $HAVE_FCHDIR = 0; then + REPLACE_CLOSE=1 + fi + fi + if test $REPLACE_CLOSE = 1; then - : + gl_LIBOBJS="$gl_LIBOBJS close.$ac_objext" - if test $ac_cv_have_decl_fchdir = no; then - HAVE_DECL_FCHDIR=0 fi - if test $HAVE_FCHDIR = 0; then + GNULIB_CLOSE=1 - gl_LIBOBJS="$gl_LIBOBJS fchdir.$ac_objext" +$as_echo "#define GNULIB_TEST_CLOSE 1" >>confdefs.h - : -$as_echo "#define REPLACE_FCHDIR 1" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether open can visit directories" >&5 -$as_echo_n "checking whether open can visit directories... " >&6; } -if ${gl_cv_func_open_directory_works+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - case "$host_os" in - # Guess yes on glibc systems. - *-gnu*) gl_cv_func_open_directory_works="guessing yes" ;; - # If we don't know, assume the worst. - *) gl_cv_func_open_directory_works="guessing no" ;; - esac -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <fcntl.h> -int -main () -{ -return open(".", O_RDONLY) < 0; - ; - return 0; -} + + for ac_func in closedir +do : + ac_fn_c_check_func "$LINENO" "closedir" "ac_cv_func_closedir" +if test "x$ac_cv_func_closedir" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_CLOSEDIR 1 _ACEOF -if ac_fn_c_try_run "$LINENO"; then : - gl_cv_func_open_directory_works=yes -else - gl_cv_func_open_directory_works=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_open_directory_works" >&5 -$as_echo "$gl_cv_func_open_directory_works" >&6; } - case "$gl_cv_func_open_directory_works" in - *yes) ;; - *) +done -$as_echo "#define REPLACE_OPEN_DIRECTORY 1" >>confdefs.h + if test $ac_cv_func_closedir = no; then + HAVE_CLOSEDIR=0 + fi - ;; - esac + + + + if test $ac_cv_func_fchdir = no; then + HAVE_FCHDIR=0 fi + if test $HAVE_FCHDIR = 0; then + if test $HAVE_CLOSEDIR = 1; then + REPLACE_CLOSEDIR=1 + fi + fi + case $host_os,$HAVE_CLOSEDIR in + os2*,1) + REPLACE_CLOSEDIR=1;; + esac + if test $HAVE_CLOSEDIR = 0 || test $REPLACE_CLOSEDIR = 1; then - GNULIB_FCHDIR=1 -$as_echo "#define GNULIB_TEST_FCHDIR 1" >>confdefs.h + gl_LIBOBJS="$gl_LIBOBJS closedir.$ac_objext" + + fi + GNULIB_CLOSEDIR=1 - : +$as_echo "#define GNULIB_TEST_CLOSEDIR 1" >>confdefs.h + + + + + + + + + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_ctype_h='<'ctype.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <ctype.h>" >&5 +$as_echo_n "checking absolute name of <ctype.h>... " >&6; } +if ${gl_cv_next_ctype_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + + + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <ctype.h> +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + + case "$host_os" in + mingw*) + gl_dirsep_regex='[/\\]' + ;; + *) + gl_dirsep_regex='\/' + ;; + esac + gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' + gl_header_literal_regex=`echo 'ctype.h' \ + | sed -e "$gl_make_literal_regex_sed"` + gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ + s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ + s|^/[^/]|//&| + p + q + }' + + gl_cv_absolute_ctype_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n "$gl_absolute_header_sed"` + + gl_header=$gl_cv_absolute_ctype_h + gl_cv_next_ctype_h='"'$gl_header'"' +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_ctype_h" >&5 +$as_echo "$gl_cv_next_ctype_h" >&6; } + fi + NEXT_CTYPE_H=$gl_cv_next_ctype_h - if test $ac_cv_func_fcntl = no; then + if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' + gl_next_as_first_directive='<'ctype.h'>' + else + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' + gl_next_as_first_directive=$gl_cv_next_ctype_h + fi + NEXT_AS_FIRST_DIRECTIVE_CTYPE_H=$gl_next_as_first_directive - : - if test $ac_cv_func_fcntl = no; then - HAVE_FCNTL=0 - else - REPLACE_FCNTL=1 - fi - else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether fcntl handles F_DUPFD correctly" >&5 -$as_echo_n "checking whether fcntl handles F_DUPFD correctly... " >&6; } -if ${gl_cv_func_fcntl_f_dupfd_works+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for d_ino member in directory struct" >&5 +$as_echo_n "checking for d_ino member in directory struct... " >&6; } +if ${gl_cv_struct_dirent_d_ino+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : - case $host_os in - aix* | cygwin* | haiku*) - gl_cv_func_fcntl_f_dupfd_works="guessing no" ;; - *) gl_cv_func_fcntl_f_dupfd_works="guessing yes" ;; - esac + case "$host_os" in + # Guess yes on glibc systems with Linux kernel. + linux*-gnu*) gl_cv_struct_dirent_d_ino="guessing yes" ;; + # Guess yes on musl systems with Linux kernel. + linux*-musl*) gl_cv_struct_dirent_d_ino="guessing yes" ;; + # Guess no on native Windows. + mingw*) gl_cv_struct_dirent_d_ino="guessing no" ;; + # If we don't know, obey --enable-cross-guesses. + *) gl_cv_struct_dirent_d_ino="$gl_cross_guess_normal" ;; + esac + else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include <errno.h> - #include <fcntl.h> - #include <limits.h> - #include <sys/resource.h> - #include <unistd.h> - #ifndef RLIM_SAVED_CUR - # define RLIM_SAVED_CUR RLIM_INFINITY - #endif - #ifndef RLIM_SAVED_MAX - # define RLIM_SAVED_MAX RLIM_INFINITY - #endif +#include <sys/types.h> + #include <sys/stat.h> + #include <dirent.h> int main () { -int result = 0; - int bad_fd = INT_MAX; - struct rlimit rlim; - if (getrlimit (RLIMIT_NOFILE, &rlim) == 0 - && 0 <= rlim.rlim_cur && rlim.rlim_cur <= INT_MAX - && rlim.rlim_cur != RLIM_INFINITY - && rlim.rlim_cur != RLIM_SAVED_MAX - && rlim.rlim_cur != RLIM_SAVED_CUR) - bad_fd = rlim.rlim_cur; - if (fcntl (0, F_DUPFD, -1) != -1) result |= 1; - if (errno != EINVAL) result |= 2; - if (fcntl (0, F_DUPFD, bad_fd) != -1) result |= 4; - if (errno != EINVAL) result |= 8; - /* On OS/2 kLIBC, F_DUPFD does not work on a directory fd */ - { - int fd; - fd = open (".", O_RDONLY); - if (fd == -1) - result |= 16; - else if (fcntl (fd, F_DUPFD, STDERR_FILENO + 1) == -1) - result |= 32; +DIR *dp = opendir ("."); + struct dirent *e; + struct stat st; + if (! dp) + return 1; + e = readdir (dp); + if (! e) + { closedir (dp); return 2; } + if (lstat (e->d_name, &st) != 0) + { closedir (dp); return 3; } + if (e->d_ino != st.st_ino) + { closedir (dp); return 4; } + closedir (dp); + return 0; - close (fd); - } - return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : - gl_cv_func_fcntl_f_dupfd_works=yes + gl_cv_struct_dirent_d_ino=yes else - gl_cv_func_fcntl_f_dupfd_works=no + gl_cv_struct_dirent_d_ino=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_fcntl_f_dupfd_works" >&5 -$as_echo "$gl_cv_func_fcntl_f_dupfd_works" >&6; } - case $gl_cv_func_fcntl_f_dupfd_works in - *yes) ;; - *) - - - : - - - - +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_struct_dirent_d_ino" >&5 +$as_echo "$gl_cv_struct_dirent_d_ino" >&6; } + case "$gl_cv_struct_dirent_d_ino" in + *yes) - if test $ac_cv_func_fcntl = no; then - HAVE_FCNTL=0 - else - REPLACE_FCNTL=1 - fi +$as_echo "#define D_INO_IN_DIRENT 1" >>confdefs.h + ;; + esac -$as_echo "#define FCNTL_DUPFD_BUGGY 1" >>confdefs.h - ;; - esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether fcntl understands F_DUPFD_CLOEXEC" >&5 -$as_echo_n "checking whether fcntl understands F_DUPFD_CLOEXEC... " >&6; } -if ${gl_cv_func_fcntl_f_dupfd_cloexec+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for d_type member in directory struct" >&5 +$as_echo_n "checking for d_type member in directory struct... " >&6; } +if ${gl_cv_struct_dirent_d_type+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include <fcntl.h> -#ifndef F_DUPFD_CLOEXEC -choke me -#endif +#include <sys/types.h> +#include <dirent.h> int main () { - +struct dirent dp; dp.d_type = 0; ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#ifdef __linux__ -/* The Linux kernel only added F_DUPFD_CLOEXEC in 2.6.24, so we always replace - it to support the semantics on older kernels that failed with EINVAL. */ -choke me -#endif +if ac_fn_c_try_link "$LINENO"; then : + gl_cv_struct_dirent_d_type=yes +else + gl_cv_struct_dirent_d_type=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext -int -main () -{ - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - gl_cv_func_fcntl_f_dupfd_cloexec=yes -else - gl_cv_func_fcntl_f_dupfd_cloexec="needs runtime check" fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_struct_dirent_d_type" >&5 +$as_echo "$gl_cv_struct_dirent_d_type" >&6; } + if test $gl_cv_struct_dirent_d_type = yes; then + +$as_echo "#define HAVE_STRUCT_DIRENT_D_TYPE 1" >>confdefs.h + + fi + + + + + + + + + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_dirent_h='<'dirent.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <dirent.h>" >&5 +$as_echo_n "checking absolute name of <dirent.h>... " >&6; } +if ${gl_cv_next_dirent_h+:} false; then : + $as_echo_n "(cached) " >&6 else - gl_cv_func_fcntl_f_dupfd_cloexec=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_fcntl_f_dupfd_cloexec" >&5 -$as_echo "$gl_cv_func_fcntl_f_dupfd_cloexec" >&6; } - if test "$gl_cv_func_fcntl_f_dupfd_cloexec" != yes; then + if test $ac_cv_header_dirent_h = yes; then - : + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <dirent.h> +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + case "$host_os" in + mingw*) + gl_dirsep_regex='[/\\]' + ;; + *) + gl_dirsep_regex='\/' + ;; + esac + gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' + gl_header_literal_regex=`echo 'dirent.h' \ + | sed -e "$gl_make_literal_regex_sed"` + gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ + s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ + s|^/[^/]|//&| + p + q + }' + gl_cv_absolute_dirent_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n "$gl_absolute_header_sed"` - if test $ac_cv_func_fcntl = no; then - HAVE_FCNTL=0 + gl_header=$gl_cv_absolute_dirent_h + gl_cv_next_dirent_h='"'$gl_header'"' + else + gl_cv_next_dirent_h='<'dirent.h'>' + fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_dirent_h" >&5 +$as_echo "$gl_cv_next_dirent_h" >&6; } + fi + NEXT_DIRENT_H=$gl_cv_next_dirent_h + + if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' + gl_next_as_first_directive='<'dirent.h'>' + else + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' + gl_next_as_first_directive=$gl_cv_next_dirent_h + fi + NEXT_AS_FIRST_DIRECTIVE_DIRENT_H=$gl_next_as_first_directive + + + + + if test $ac_cv_header_dirent_h = yes; then + HAVE_DIRENT_H=1 else - REPLACE_FCNTL=1 + HAVE_DIRENT_H=0 fi - fi - fi - : - if test $ac_cv_func_fchdir = no; then - HAVE_FCHDIR=0 - fi - if test $HAVE_FCHDIR = 0; then + for ac_func in dirfd +do : + ac_fn_c_check_func "$LINENO" "dirfd" "ac_cv_func_dirfd" +if test "x$ac_cv_func_dirfd" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_DIRFD 1 +_ACEOF + +fi +done + ac_fn_c_check_decl "$LINENO" "dirfd" "ac_cv_have_decl_dirfd" "#include <sys/types.h> + #include <dirent.h> +" +if test "x$ac_cv_have_decl_dirfd" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_DIRFD $ac_have_decl +_ACEOF - : + if test $ac_cv_have_decl_dirfd = no; then + HAVE_DECL_DIRFD=0 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether dirfd is a macro" >&5 +$as_echo_n "checking whether dirfd is a macro... " >&6; } +if ${gl_cv_func_dirfd_macro+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> +#include <dirent.h> +#ifdef dirfd + dirent_header_defines_dirfd +#endif +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "dirent_header_defines_dirfd" >/dev/null 2>&1; then : + gl_cv_func_dirfd_macro=yes +else + gl_cv_func_dirfd_macro=no +fi +rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_dirfd_macro" >&5 +$as_echo "$gl_cv_func_dirfd_macro" >&6; } + # Use the replacement if we have no function or macro with that name, + # or if OS/2 kLIBC whose dirfd() does not work. + # Replace only if the system declares dirfd already. + case $ac_cv_func_dirfd,$gl_cv_func_dirfd_macro,$host_os,$ac_cv_have_decl_dirfd in + no,no,*,yes | *,*,os2*,yes) + REPLACE_DIRFD=1 - if test $ac_cv_func_fcntl = no; then - HAVE_FCNTL=0 - else - REPLACE_FCNTL=1 - fi +$as_echo "#define REPLACE_DIRFD 1" >>confdefs.h +;; + esac - fi + if test $ac_cv_func_dirfd = no && test $gl_cv_func_dirfd_macro = no \ + || test $REPLACE_DIRFD = 1; then - if test $HAVE_FCNTL = 0 || test $REPLACE_FCNTL = 1; then + gl_LIBOBJS="$gl_LIBOBJS dirfd.$ac_objext" - gl_LIBOBJS="$gl_LIBOBJS fcntl.$ac_objext" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to get the file descriptor associated with an open DIR*" >&5 +$as_echo_n "checking how to get the file descriptor associated with an open DIR*... " >&6; } +if ${gl_cv_sys_dir_fd_member_name+:} false; then : + $as_echo_n "(cached) " >&6 +else - fi + dirfd_save_CFLAGS=$CFLAGS + for ac_expr in d_fd dd_fd; do + CFLAGS="$CFLAGS -DDIR_FD_MEMBER_NAME=$ac_expr" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + #include <sys/types.h> + #include <dirent.h> +int +main () +{ +DIR *dir_p = opendir("."); (void) dir_p->DIR_FD_MEMBER_NAME; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + dir_fd_found=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CFLAGS=$dirfd_save_CFLAGS + test "$dir_fd_found" = yes && break + done + test "$dir_fd_found" = yes || ac_expr=no_such_member + gl_cv_sys_dir_fd_member_name=$ac_expr - GNULIB_FCNTL=1 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_sys_dir_fd_member_name" >&5 +$as_echo "$gl_cv_sys_dir_fd_member_name" >&6; } + if test $gl_cv_sys_dir_fd_member_name != no_such_member; then +cat >>confdefs.h <<_ACEOF +#define DIR_FD_MEMBER_NAME $gl_cv_sys_dir_fd_member_name +_ACEOF + fi -$as_echo "#define GNULIB_TEST_FCNTL 1" >>confdefs.h + fi + GNULIB_DIRFD=1 +$as_echo "#define GNULIB_TEST_DIRFD 1" >>confdefs.h - if test $gl_cv_have_include_next = yes; then - gl_cv_next_fcntl_h='<'fcntl.h'>' - else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <fcntl.h>" >&5 -$as_echo_n "checking absolute name of <fcntl.h>... " >&6; } -if ${gl_cv_next_fcntl_h+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <fcntl.h> -_ACEOF - case "$host_os" in - aix*) gl_absname_cpp="$ac_cpp -C" ;; - *) gl_absname_cpp="$ac_cpp" ;; - esac - case "$host_os" in - mingw*) - gl_dirsep_regex='[/\\]' - ;; - *) - gl_dirsep_regex='\/' - ;; - esac - gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' - gl_header_literal_regex=`echo 'fcntl.h' \ - | sed -e "$gl_make_literal_regex_sed"` - gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ - s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ - s|^/[^/]|//&| - p - q - }' - gl_cv_absolute_fcntl_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | - sed -n "$gl_absolute_header_sed"` + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether // is distinct from /" >&5 +$as_echo_n "checking whether // is distinct from /... " >&6; } +if ${gl_cv_double_slash_root+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test x"$cross_compiling" = xyes ; then + # When cross-compiling, there is no way to tell whether // is special + # short of a list of hosts. However, the only known hosts to date + # that have a distinct // are Apollo DomainOS (too old to port to), + # Cygwin, and z/OS. If anyone knows of another system for which // has + # special semantics and is distinct from /, please report it to + # <bug-gnulib@gnu.org>. + case $host in + *-cygwin | i370-ibm-openedition) + gl_cv_double_slash_root=yes ;; + *) + # Be optimistic and assume that / and // are the same when we + # don't know. + gl_cv_double_slash_root='unknown, assuming no' ;; + esac + else + set x `ls -di / // 2>/dev/null` + if test "$2" = "$4" && wc //dev/null >/dev/null 2>&1; then + gl_cv_double_slash_root=no + else + gl_cv_double_slash_root=yes + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_double_slash_root" >&5 +$as_echo "$gl_cv_double_slash_root" >&6; } + if test "$gl_cv_double_slash_root" = yes; then - gl_header=$gl_cv_absolute_fcntl_h - gl_cv_next_fcntl_h='"'$gl_header'"' +$as_echo "#define DOUBLE_SLASH_IS_DISTINCT_ROOT 1" >>confdefs.h + fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_fcntl_h" >&5 -$as_echo "$gl_cv_next_fcntl_h" >&6; } - fi - NEXT_FCNTL_H=$gl_cv_next_fcntl_h - if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then - # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' - gl_next_as_first_directive='<'fcntl.h'>' - else - # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' - gl_next_as_first_directive=$gl_cv_next_fcntl_h - fi - NEXT_AS_FIRST_DIRECTIVE_FCNTL_H=$gl_next_as_first_directive + if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then + REPLACE_DUP=1 + fi + if test $ac_cv_func_fchdir = no; then + HAVE_FCHDIR=0 + fi + if test $HAVE_FCHDIR = 0; then + REPLACE_DUP=1 + fi - for gl_func in fcntl openat; do - as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh` - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5 -$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; } -if eval \${$as_gl_Symbol+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether dup works" >&5 +$as_echo_n "checking whether dup works... " >&6; } +if ${gl_cv_func_dup_works+:} false; then : $as_echo_n "(cached) " >&6 else + if test "$cross_compiling" = yes; then : + case "$host_os" in + # Guess no on native Windows. + mingw*) gl_cv_func_dup_works="guessing no" ;; + *) gl_cv_func_dup_works="guessing yes" ;; + esac + +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include <fcntl.h> - +#include <unistd.h> + #include <fcntl.h> + #include <errno.h> int main () { -#undef $gl_func - (void) $gl_func; +/* On OS/2 kLIBC, dup does not work on a directory fd. */ + int fd = open (".", O_RDONLY); + return fd < 0 ? 1 : dup (fd) < 0 ? 2 : 0; + ; return 0; } + _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$as_gl_Symbol=yes" +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_dup_works=yes else - eval "$as_gl_Symbol=no" + gl_cv_func_dup_works=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext fi -eval ac_res=\$$as_gl_Symbol - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - if eval test \"x\$"$as_gl_Symbol"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1 -_ACEOF - eval ac_cv_have_decl_$gl_func=yes -fi - done + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_dup_works" >&5 +$as_echo "$gl_cv_func_dup_works" >&6; } + case "$gl_cv_func_dup_works" in + *yes) ;; + *) + REPLACE_DUP=1 + ;; + esac + + if test $REPLACE_DUP = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS dup.$ac_objext" + + : + fi + GNULIB_DUP=1 - ac_fn_c_check_decl "$LINENO" "fdopendir" "ac_cv_have_decl_fdopendir" " -#include <dirent.h> -" -if test "x$ac_cv_have_decl_fdopendir" = xyes; then : - ac_have_decl=1 -else - ac_have_decl=0 -fi -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_FDOPENDIR $ac_have_decl -_ACEOF -if test $ac_have_decl = 1; then : -else - HAVE_DECL_FDOPENDIR=0 -fi +$as_echo "#define GNULIB_TEST_DUP 1" >>confdefs.h - : - if test $ac_cv_func_fdopendir = no; then - HAVE_FDOPENDIR=0 - else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether fdopendir works" >&5 -$as_echo_n "checking whether fdopendir works... " >&6; } -if ${gl_cv_func_fdopendir_works+:} false; then : + +$as_echo "#define HAVE_DUP2 1" >>confdefs.h + + + if test $HAVE_DUP2 = 1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether dup2 works" >&5 +$as_echo_n "checking whether dup2 works... " >&6; } +if ${gl_cv_func_dup2_works+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : case "$host_os" in - # Guess yes on glibc systems. - *-gnu*) gl_cv_func_fdopendir_works="guessing yes" ;; - # If we don't know, assume the worst. - *) gl_cv_func_fdopendir_works="guessing no" ;; - esac - + mingw*) # on this platform, dup2 always returns 0 for success + gl_cv_func_dup2_works="guessing no" ;; + cygwin*) # on cygwin 1.5.x, dup2(1,1) returns 0 + gl_cv_func_dup2_works="guessing no" ;; + aix* | freebsd*) + # on AIX 7.1 and FreeBSD 6.1, dup2 (1,toobig) gives EMFILE, + # not EBADF. + gl_cv_func_dup2_works="guessing no" ;; + haiku*) # on Haiku alpha 2, dup2(1, 1) resets FD_CLOEXEC. + gl_cv_func_dup2_works="guessing no" ;; + *-android*) # implemented using dup3(), which fails if oldfd == newfd + gl_cv_func_dup2_works="guessing no" ;; + os2*) # on OS/2 kLIBC, dup2() does not work on a directory fd. + gl_cv_func_dup2_works="guessing no" ;; + *) gl_cv_func_dup2_works="guessing yes" ;; + esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include <dirent.h> -#include <fcntl.h> -#include <unistd.h> -#if !HAVE_DECL_FDOPENDIR -extern -# ifdef __cplusplus -"C" -# endif -DIR *fdopendir (int); -#endif + #include <errno.h> + #include <fcntl.h> + #include <limits.h> + #include <sys/resource.h> + #include <unistd.h> + #ifndef RLIM_SAVED_CUR + # define RLIM_SAVED_CUR RLIM_INFINITY + #endif + #ifndef RLIM_SAVED_MAX + # define RLIM_SAVED_MAX RLIM_INFINITY + #endif int main () { int result = 0; - int fd = open ("conftest.c", O_RDONLY); - if (fd < 0) result |= 1; - if (fdopendir (fd)) result |= 2; - if (close (fd)) result |= 4; - return result; + int bad_fd = INT_MAX; + struct rlimit rlim; + if (getrlimit (RLIMIT_NOFILE, &rlim) == 0 + && 0 <= rlim.rlim_cur && rlim.rlim_cur <= INT_MAX + && rlim.rlim_cur != RLIM_INFINITY + && rlim.rlim_cur != RLIM_SAVED_MAX + && rlim.rlim_cur != RLIM_SAVED_CUR) + bad_fd = rlim.rlim_cur; + #ifdef FD_CLOEXEC + if (fcntl (1, F_SETFD, FD_CLOEXEC) == -1) + result |= 1; + #endif + if (dup2 (1, 1) != 1) + result |= 2; + #ifdef FD_CLOEXEC + if (fcntl (1, F_GETFD) != FD_CLOEXEC) + result |= 4; + #endif + close (0); + if (dup2 (0, 0) != -1) + result |= 8; + /* Many gnulib modules require POSIX conformance of EBADF. */ + if (dup2 (2, bad_fd) == -1 && errno != EBADF) + result |= 16; + /* Flush out some cygwin core dumps. */ + if (dup2 (2, -1) != -1 || errno != EBADF) + result |= 32; + dup2 (2, 255); + dup2 (2, 256); + /* On OS/2 kLIBC, dup2() does not work on a directory fd. */ + { + int fd = open (".", O_RDONLY); + if (fd == -1) + result |= 64; + else if (dup2 (fd, fd + 1) == -1) + result |= 128; + + close (fd); + } + return result; ; return 0; } + _ACEOF if ac_fn_c_try_run "$LINENO"; then : - gl_cv_func_fdopendir_works=yes + gl_cv_func_dup2_works=yes else - gl_cv_func_fdopendir_works=no + gl_cv_func_dup2_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi + fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_fdopendir_works" >&5 -$as_echo "$gl_cv_func_fdopendir_works" >&6; } - case "$gl_cv_func_fdopendir_works" in +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_dup2_works" >&5 +$as_echo "$gl_cv_func_dup2_works" >&6; } + case "$gl_cv_func_dup2_works" in *yes) ;; *) - REPLACE_FDOPENDIR=1 + REPLACE_DUP2=1 + for ac_func in setdtablesize +do : + ac_fn_c_check_func "$LINENO" "setdtablesize" "ac_cv_func_setdtablesize" +if test "x$ac_cv_func_setdtablesize" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SETDTABLESIZE 1 +_ACEOF + +fi +done + ;; esac fi - if test $HAVE_FDOPENDIR = 0 || test $REPLACE_FDOPENDIR = 1; then - - - - - - gl_LIBOBJS="$gl_LIBOBJS fdopendir.$ac_objext" - + if test $ac_cv_func_fchdir = no; then + HAVE_FCHDIR=0 fi + if test $HAVE_FCHDIR = 0; then + if test $HAVE_DUP2 = 1; then + REPLACE_DUP2=1 + fi + fi + if test $HAVE_DUP2 = 0 || test $REPLACE_DUP2 = 1; then - GNULIB_FDOPENDIR=1 - - - - - -$as_echo "#define GNULIB_TEST_FDOPENDIR 1" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define GNULIB_FDOPENDIR 1 -_ACEOF + gl_LIBOBJS="$gl_LIBOBJS dup2.$ac_objext" + fi - : + GNULIB_DUP2=1 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for flexible array member" >&5 -$as_echo_n "checking for flexible array member... " >&6; } -if ${ac_cv_c_flexmember+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <stdlib.h> - #include <stdio.h> - #include <stddef.h> - struct s { int n; double d[]; }; -int -main () -{ -int m = getchar (); - size_t nbytes = offsetof (struct s, d) + m * sizeof (double); - nbytes += sizeof (struct s) - 1; - nbytes -= nbytes % sizeof (struct s); - struct s *p = malloc (nbytes); - p->d[0] = 0.0; - return p->d != (double *) NULL; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_c_flexmember=yes -else - ac_cv_c_flexmember=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_flexmember" >&5 -$as_echo "$ac_cv_c_flexmember" >&6; } - if test $ac_cv_c_flexmember = yes; then -$as_echo "#define FLEXIBLE_ARRAY_MEMBER /**/" >>confdefs.h - else - $as_echo "#define FLEXIBLE_ARRAY_MEMBER 1" >>confdefs.h +$as_echo "#define GNULIB_TEST_DUP2 1" >>confdefs.h - fi - FLOAT_H= - REPLACE_FLOAT_LDBL=0 - case "$host_os" in - aix* | beos* | openbsd* | mirbsd* | irix*) - FLOAT_H=float.h - ;; - freebsd*) - case "$host_cpu" in - i[34567]86 ) - FLOAT_H=float.h - ;; - x86_64 ) - # On x86_64 systems, the C compiler may still be generating - # 32-bit code. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#if defined __LP64__ || defined __x86_64__ || defined __amd64__ - yes - #endif -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "yes" >/dev/null 2>&1; then : -else - FLOAT_H=float.h -fi -rm -f conftest* - ;; - esac - ;; - linux*) - case "$host_cpu" in - powerpc*) - FLOAT_H=float.h - ;; - esac - ;; - esac - case "$host_os" in - aix* | freebsd* | linux*) - if test -n "$FLOAT_H"; then - REPLACE_FLOAT_LDBL=1 - fi - ;; - esac - REPLACE_ITOLD=0 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether conversion from 'int' to 'long double' works" >&5 -$as_echo_n "checking whether conversion from 'int' to 'long double' works... " >&6; } -if ${gl_cv_func_itold_works+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - case "$host" in - sparc*-*-linux*) - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#if defined __LP64__ || defined __arch64__ - yes - #endif -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "yes" >/dev/null 2>&1; then : - gl_cv_func_itold_works="guessing no" -else - gl_cv_func_itold_works="guessing yes" -fi -rm -f conftest* + GNULIB_ENVIRON=1 + + + + + +$as_echo "#define GNULIB_TEST_ENVIRON 1" >>confdefs.h + + - ;; - *) gl_cv_func_itold_works="guessing yes" ;; - esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for error_at_line" >&5 +$as_echo_n "checking for error_at_line... " >&6; } +if ${ac_cv_lib_error_at_line+:} false; then : + $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ - -int i = -1; -volatile long double ld; -int main () +#include <error.h> +int +main () { - ld += i * 1.0L; - if (ld > 0) - return 1; +error_at_line (0, 0, "", 0, "an error occurred"); + ; return 0; } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : - gl_cv_func_itold_works=yes +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_error_at_line=yes else - gl_cv_func_itold_works=no + ac_cv_lib_error_at_line=no fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_error_at_line" >&5 +$as_echo "$ac_cv_lib_error_at_line" >&6; } + if test $ac_cv_lib_error_at_line = no; then -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_itold_works" >&5 -$as_echo "$gl_cv_func_itold_works" >&6; } - case "$gl_cv_func_itold_works" in - *no) - REPLACE_ITOLD=1 - FLOAT_H=float.h - ;; - esac - if test -n "$FLOAT_H"; then + gl_LIBOBJS="$gl_LIBOBJS error.$ac_objext" - if test $gl_cv_have_include_next = yes; then - gl_cv_next_float_h='<'float.h'>' - else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <float.h>" >&5 -$as_echo_n "checking absolute name of <float.h>... " >&6; } -if ${gl_cv_next_float_h+:} false; then : - $as_echo_n "(cached) " >&6 -else + : + fi - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <float.h> -_ACEOF - case "$host_os" in - aix*) gl_absname_cpp="$ac_cpp -C" ;; - *) gl_absname_cpp="$ac_cpp" ;; - esac - case "$host_os" in - mingw*) - gl_dirsep_regex='[/\\]' - ;; - *) - gl_dirsep_regex='\/' - ;; - esac - gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' - gl_header_literal_regex=`echo 'float.h' \ - | sed -e "$gl_make_literal_regex_sed"` - gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ - s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ - s|^/[^/]|//&| - p - q - }' - gl_cv_absolute_float_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | - sed -n "$gl_absolute_header_sed"` - gl_header=$gl_cv_absolute_float_h - gl_cv_next_float_h='"'$gl_header'"' -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_float_h" >&5 -$as_echo "$gl_cv_next_float_h" >&6; } - fi - NEXT_FLOAT_H=$gl_cv_next_float_h - if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then - # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' - gl_next_as_first_directive='<'float.h'>' - else - # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' - gl_next_as_first_directive=$gl_cv_next_float_h - fi - NEXT_AS_FIRST_DIRECTIVE_FLOAT_H=$gl_next_as_first_directive + if test $ac_cv_have_decl_fchdir = no; then + HAVE_DECL_FCHDIR=0 + fi + if test $HAVE_FCHDIR = 0; then - fi - if test -n "$FLOAT_H"; then - GL_GENERATE_FLOAT_H_TRUE= - GL_GENERATE_FLOAT_H_FALSE='#' + + + + + + gl_LIBOBJS="$gl_LIBOBJS fchdir.$ac_objext" + + : + +$as_echo "#define REPLACE_FCHDIR 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether open can visit directories" >&5 +$as_echo_n "checking whether open can visit directories... " >&6; } +if ${gl_cv_func_open_directory_works+:} false; then : + $as_echo_n "(cached) " >&6 else - GL_GENERATE_FLOAT_H_TRUE='#' - GL_GENERATE_FLOAT_H_FALSE= + if test "$cross_compiling" = yes; then : + case "$host_os" in + # Guess yes on Linux systems. + linux-* | linux) gl_cv_func_open_directory_works="guessing yes" ;; + # Guess yes on glibc systems. + *-gnu* | gnu*) gl_cv_func_open_directory_works="guessing yes" ;; + # Guess no on native Windows. + mingw*) gl_cv_func_open_directory_works="guessing no" ;; + # If we don't know, obey --enable-cross-guesses. + *) gl_cv_func_open_directory_works="$gl_cross_guess_normal" ;; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <fcntl.h> + +int +main () +{ +return open(".", O_RDONLY) < 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_open_directory_works=yes +else + gl_cv_func_open_directory_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_open_directory_works" >&5 +$as_echo "$gl_cv_func_open_directory_works" >&6; } + case "$gl_cv_func_open_directory_works" in + *yes) ;; + *) + +$as_echo "#define REPLACE_OPEN_DIRECTORY 1" >>confdefs.h + ;; + esac + fi - if test $REPLACE_FLOAT_LDBL = 1; then + GNULIB_FCHDIR=1 - gl_LIBOBJS="$gl_LIBOBJS float.$ac_objext" - fi - if test $REPLACE_ITOLD = 1; then +$as_echo "#define GNULIB_TEST_FCHDIR 1" >>confdefs.h @@ -18449,193 +18572,212 @@ - gl_LIBOBJS="$gl_LIBOBJS itold.$ac_objext" + if test $ac_cv_func_fcntl = no; then + + + + if test $ac_cv_func_fcntl = no; then + HAVE_FCNTL=0 + else + REPLACE_FCNTL=1 + fi + + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether fcntl handles F_DUPFD correctly" >&5 +$as_echo_n "checking whether fcntl handles F_DUPFD correctly... " >&6; } +if ${gl_cv_func_fcntl_f_dupfd_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + case $host_os in + aix* | cygwin* | haiku*) + gl_cv_func_fcntl_f_dupfd_works="guessing no" ;; + *) gl_cv_func_fcntl_f_dupfd_works="guessing yes" ;; + esac +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <errno.h> + #include <fcntl.h> + #include <limits.h> + #include <sys/resource.h> + #include <unistd.h> + #ifndef RLIM_SAVED_CUR + # define RLIM_SAVED_CUR RLIM_INFINITY + #endif + #ifndef RLIM_SAVED_MAX + # define RLIM_SAVED_MAX RLIM_INFINITY + #endif + +int +main () +{ +int result = 0; + int bad_fd = INT_MAX; + struct rlimit rlim; + if (getrlimit (RLIMIT_NOFILE, &rlim) == 0 + && 0 <= rlim.rlim_cur && rlim.rlim_cur <= INT_MAX + && rlim.rlim_cur != RLIM_INFINITY + && rlim.rlim_cur != RLIM_SAVED_MAX + && rlim.rlim_cur != RLIM_SAVED_CUR) + bad_fd = rlim.rlim_cur; + if (fcntl (0, F_DUPFD, -1) != -1) result |= 1; + if (errno != EINVAL) result |= 2; + if (fcntl (0, F_DUPFD, bad_fd) != -1) result |= 4; + if (errno != EINVAL) result |= 8; + /* On OS/2 kLIBC, F_DUPFD does not work on a directory fd */ + { + int fd; + fd = open (".", O_RDONLY); + if (fd == -1) + result |= 16; + else if (fcntl (fd, F_DUPFD, STDERR_FILENO + 1) == -1) + result |= 32; + + close (fd); + } + return result; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_fcntl_f_dupfd_works=yes +else + gl_cv_func_fcntl_f_dupfd_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_fcntl_f_dupfd_works" >&5 +$as_echo "$gl_cv_func_fcntl_f_dupfd_works" >&6; } + case $gl_cv_func_fcntl_f_dupfd_works in + *yes) ;; + *) + + if test $ac_cv_func_fcntl = no; then + HAVE_FCNTL=0 + else + REPLACE_FCNTL=1 fi +$as_echo "#define FCNTL_DUPFD_BUGGY 1" >>confdefs.h + ;; + esac - - - FNMATCH_H= - gl_fnmatch_required_lowercase=` - echo $gl_fnmatch_required | LC_ALL=C tr '[A-Z]' '[a-z]' - ` - gl_fnmatch_cache_var="gl_cv_func_fnmatch_${gl_fnmatch_required_lowercase}" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working $gl_fnmatch_required fnmatch" >&5 -$as_echo_n "checking for working $gl_fnmatch_required fnmatch... " >&6; } -if eval \${$gl_fnmatch_cache_var+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether fcntl understands F_DUPFD_CLOEXEC" >&5 +$as_echo_n "checking whether fcntl understands F_DUPFD_CLOEXEC... " >&6; } +if ${gl_cv_func_fcntl_f_dupfd_cloexec+:} false; then : $as_echo_n "(cached) " >&6 else - if test $gl_fnmatch_required = GNU; then - gl_fnmatch_gnu_start= - gl_fnmatch_gnu_end= - else - gl_fnmatch_gnu_start='#if 0' - gl_fnmatch_gnu_end='#endif' - fi - if test "$cross_compiling" = yes; then : - eval "$gl_fnmatch_cache_var=\"guessing no\"" -else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include <fnmatch.h> - static int - y (char const *pattern, char const *string, int flags) - { - return fnmatch (pattern, string, flags) == 0; - } - static int - n (char const *pattern, char const *string, int flags) - { - return fnmatch (pattern, string, flags) == FNM_NOMATCH; - } + +#include <fcntl.h> +#ifndef F_DUPFD_CLOEXEC +choke me +#endif int main () { -char const *Apat = 'A' < '\\\\' ? "[A-\\\\\\\\]" : "[\\\\\\\\-A]"; - char const *apat = 'a' < '\\\\' ? "[a-\\\\\\\\]" : "[\\\\\\\\-a]"; - static char const A_1[] = { 'A' - 1, 0 }; - static char const A01[] = { 'A' + 1, 0 }; - static char const a_1[] = { 'a' - 1, 0 }; - static char const a01[] = { 'a' + 1, 0 }; - static char const bs_1[] = { '\\\\' - 1, 0 }; - static char const bs01[] = { '\\\\' + 1, 0 }; - int result = 0; - if (!n ("a*", "", 0)) - return 1; - if (!y ("a*", "abc", 0)) - return 1; - if (!y ("[/b", "[/b", 0)) /*"]]"*/ /* glibc Bugzilla bug 12378 */ - return 1; - if (!n ("d*/*1", "d/s/1", FNM_PATHNAME)) - return 2; - if (!y ("a\\\\bc", "abc", 0)) - return 3; - if (!n ("a\\\\bc", "abc", FNM_NOESCAPE)) - return 3; - if (!y ("*x", ".x", 0)) - return 4; - if (!n ("*x", ".x", FNM_PERIOD)) - return 4; - if (!y (Apat, "\\\\", 0)) - return 5; - if (!y (Apat, "A", 0)) - return 5; - if (!y (apat, "\\\\", 0)) - return 5; - if (!y (apat, "a", 0)) - return 5; - if (!(n (Apat, A_1, 0) == ('A' < '\\\\'))) - return 5; - if (!(n (apat, a_1, 0) == ('a' < '\\\\'))) - return 5; - if (!(y (Apat, A01, 0) == ('A' < '\\\\'))) - return 5; - if (!(y (apat, a01, 0) == ('a' < '\\\\'))) - return 5; - if (!(y (Apat, bs_1, 0) == ('A' < '\\\\'))) - return 5; - if (!(y (apat, bs_1, 0) == ('a' < '\\\\'))) - return 5; - if (!(n (Apat, bs01, 0) == ('A' < '\\\\'))) - return 5; - if (!(n (apat, bs01, 0) == ('a' < '\\\\'))) - return 5; - $gl_fnmatch_gnu_start - if (!y ("xxXX", "xXxX", FNM_CASEFOLD)) - result |= 8; - if (!y ("a++(x|yy)b", "a+xyyyyxb", FNM_EXTMATCH)) - result |= 16; - if (!n ("d*/*1", "d/s/1", FNM_FILE_NAME)) - result |= 32; - if (!y ("*", "x", FNM_FILE_NAME | FNM_LEADING_DIR)) - result |= 64; - if (!y ("x*", "x/y/z", FNM_FILE_NAME | FNM_LEADING_DIR)) - result |= 64; - if (!y ("*c*", "c/x", FNM_FILE_NAME | FNM_LEADING_DIR)) - result |= 64; - $gl_fnmatch_gnu_end - return result; ; return 0; } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : - eval "$gl_fnmatch_cache_var=yes" +if ac_fn_c_try_compile "$LINENO"; then : + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef __linux__ +/* The Linux kernel only added F_DUPFD_CLOEXEC in 2.6.24, so we always replace + it to support the semantics on older kernels that failed with EINVAL. */ +choke me +#endif + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_func_fcntl_f_dupfd_cloexec=yes else - eval "$gl_fnmatch_cache_var=no" + gl_cv_func_fcntl_f_dupfd_cloexec="needs runtime check" fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +else + gl_cv_func_fcntl_f_dupfd_cloexec=no fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_fcntl_f_dupfd_cloexec" >&5 +$as_echo "$gl_cv_func_fcntl_f_dupfd_cloexec" >&6; } + if test "$gl_cv_func_fcntl_f_dupfd_cloexec" != yes; then -fi -eval ac_res=\$$gl_fnmatch_cache_var - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval "gl_fnmatch_result=\"\$$gl_fnmatch_cache_var\"" - if test "$gl_fnmatch_result" = yes; then - rm -f "$gl_source_base/fnmatch.h" + + if test $ac_cv_func_fcntl = no; then + HAVE_FCNTL=0 else - FNMATCH_H=fnmatch.h + REPLACE_FCNTL=1 fi - if test -n "$FNMATCH_H"; then - GL_GENERATE_FNMATCH_H_TRUE= - GL_GENERATE_FNMATCH_H_FALSE='#' -else - GL_GENERATE_FNMATCH_H_TRUE='#' - GL_GENERATE_FNMATCH_H_FALSE= -fi + fi + fi - if test -n "$FNMATCH_H"; then + if test $ac_cv_func_fchdir = no; then + HAVE_FCHDIR=0 + fi + if test $HAVE_FCHDIR = 0; then + if test $ac_cv_func_fcntl = no; then + HAVE_FCNTL=0 + else + REPLACE_FCNTL=1 + fi + fi - gl_LIBOBJS="$gl_LIBOBJS fnmatch.$ac_objext" + if test $HAVE_FCNTL = 0 || test $REPLACE_FCNTL = 1; then -cat >>confdefs.h <<_ACEOF -#define fnmatch ${gl_fnmatch_required_lowercase}_fnmatch -_ACEOF - ac_fn_c_check_decl "$LINENO" "isblank" "ac_cv_have_decl_isblank" "#include <ctype.h> -" -if test "x$ac_cv_have_decl_isblank" = xyes; then : - ac_have_decl=1 -else - ac_have_decl=0 -fi -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_ISBLANK $ac_have_decl -_ACEOF - : + gl_LIBOBJS="$gl_LIBOBJS fcntl.$ac_objext" + + fi + GNULIB_FCNTL=1 +$as_echo "#define GNULIB_TEST_FCNTL 1" >>confdefs.h @@ -18650,22 +18792,69 @@ + if test $gl_cv_have_include_next = yes; then + gl_cv_next_fcntl_h='<'fcntl.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <fcntl.h>" >&5 +$as_echo_n "checking absolute name of <fcntl.h>... " >&6; } +if ${gl_cv_next_fcntl_h+:} false; then : + $as_echo_n "(cached) " >&6 +else - : + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <fcntl.h> +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + case "$host_os" in + mingw*) + gl_dirsep_regex='[/\\]' + ;; + *) + gl_dirsep_regex='\/' + ;; + esac + gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' + gl_header_literal_regex=`echo 'fcntl.h' \ + | sed -e "$gl_make_literal_regex_sed"` + gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ + s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ + s|^/[^/]|//&| + p + q + }' + gl_cv_absolute_fcntl_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n "$gl_absolute_header_sed"` + gl_header=$gl_cv_absolute_fcntl_h + gl_cv_next_fcntl_h='"'$gl_header'"' - fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_fcntl_h" >&5 +$as_echo "$gl_cv_next_fcntl_h" >&6; } + fi + NEXT_FCNTL_H=$gl_cv_next_fcntl_h + if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' + gl_next_as_first_directive='<'fcntl.h'>' + else + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' + gl_next_as_first_directive=$gl_cv_next_fcntl_h + fi + NEXT_AS_FIRST_DIRECTIVE_FCNTL_H=$gl_next_as_first_directive - if test -n "$FNMATCH_H"; then @@ -18674,35 +18863,106 @@ - gl_LIBOBJS="$gl_LIBOBJS fnmatch.$ac_objext" cat >>confdefs.h <<_ACEOF -#define fnmatch ${gl_fnmatch_required_lowercase}_fnmatch +#define GNULIB_FD_SAFER_FLAG 1 _ACEOF - ac_fn_c_check_decl "$LINENO" "isblank" "ac_cv_have_decl_isblank" "#include <ctype.h> + + + + + + ac_fn_c_check_decl "$LINENO" "fdopendir" "ac_cv_have_decl_fdopendir" " +#include <dirent.h> + " -if test "x$ac_cv_have_decl_isblank" = xyes; then : +if test "x$ac_cv_have_decl_fdopendir" = xyes; then : ac_have_decl=1 else - ac_have_decl=0 + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_FDOPENDIR $ac_have_decl +_ACEOF +if test $ac_have_decl = 1; then : + +else + HAVE_DECL_FDOPENDIR=0 +fi + + + if test $ac_cv_func_fdopendir = no; then + HAVE_FDOPENDIR=0 + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether fdopendir works" >&5 +$as_echo_n "checking whether fdopendir works... " >&6; } +if ${gl_cv_func_fdopendir_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + case "$host_os" in + # Guess yes on glibc systems. + *-gnu*) gl_cv_func_fdopendir_works="guessing yes" ;; + # Guess yes on musl systems. + *-musl*) gl_cv_func_fdopendir_works="guessing yes" ;; + # If we don't know, obey --enable-cross-guesses. + *) gl_cv_func_fdopendir_works="$gl_cross_guess_normal" ;; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <dirent.h> +#include <fcntl.h> +#include <unistd.h> +#if !HAVE_DECL_FDOPENDIR +extern +# ifdef __cplusplus +"C" +# endif +DIR *fdopendir (int); +#endif + +int +main () +{ +int result = 0; + int fd = open ("conftest.c", O_RDONLY); + if (fd < 0) result |= 1; + if (fdopendir (fd)) result |= 2; + if (close (fd)) result |= 4; + return result; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_fdopendir_works=yes +else + gl_cv_func_fdopendir_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext fi -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_ISBLANK $ac_have_decl -_ACEOF - - - : - - - - - +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_fdopendir_works" >&5 +$as_echo "$gl_cv_func_fdopendir_works" >&6; } + case "$gl_cv_func_fdopendir_works" in + *yes) ;; + *) + REPLACE_FDOPENDIR=1 + ;; + esac + fi + if test $HAVE_FDOPENDIR = 0 || test $REPLACE_FDOPENDIR = 1; then @@ -18711,423 +18971,428 @@ + gl_LIBOBJS="$gl_LIBOBJS fdopendir.$ac_objext" + fi + GNULIB_FDOPENDIR=1 +$as_echo "#define GNULIB_TEST_FDOPENDIR 1" >>confdefs.h - : +cat >>confdefs.h <<_ACEOF +#define GNULIB_FDOPENDIR 1 +_ACEOF - fi - FREXP_LIBM= - if test $gl_cv_func_frexp_no_libm = no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether frexp() can be used with libm" >&5 -$as_echo_n "checking whether frexp() can be used with libm... " >&6; } -if ${gl_cv_func_frexp_in_libm+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for flexible array member" >&5 +$as_echo_n "checking for flexible array member... " >&6; } +if ${ac_cv_c_flexmember+:} false; then : $as_echo_n "(cached) " >&6 else - - save_LIBS="$LIBS" - LIBS="$LIBS -lm" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include <math.h> - double x; +#include <stdlib.h> + #include <stdio.h> + #include <stddef.h> + struct m { struct m *next, **list; char name[]; }; + struct s { struct s *p; struct m *m; int n; double d[]; }; int main () { -int e; return frexp (x, &e) > 0; +int m = getchar (); + size_t nbytes = offsetof (struct s, d) + m * sizeof (double); + nbytes += sizeof (struct s) - 1; + nbytes -= nbytes % sizeof (struct s); + struct s *p = malloc (nbytes); + p->p = p; + p->m = NULL; + p->d[0] = 0.0; + return p->d != (double *) NULL; ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : - gl_cv_func_frexp_in_libm=yes +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_flexmember=yes else - gl_cv_func_frexp_in_libm=no + ac_cv_c_flexmember=no fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LIBS="$save_LIBS" - +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_frexp_in_libm" >&5 -$as_echo "$gl_cv_func_frexp_in_libm" >&6; } - if test $gl_cv_func_frexp_in_libm = yes; then - FREXP_LIBM=-lm - fi - fi - if test $gl_cv_func_frexp_no_libm = yes \ - || test $gl_cv_func_frexp_in_libm = yes; then - save_LIBS="$LIBS" - LIBS="$LIBS $FREXP_LIBM" +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_flexmember" >&5 +$as_echo "$ac_cv_c_flexmember" >&6; } + if test $ac_cv_c_flexmember = yes; then + +$as_echo "#define FLEXIBLE_ARRAY_MEMBER /**/" >>confdefs.h + else + $as_echo "#define FLEXIBLE_ARRAY_MEMBER 1" >>confdefs.h + fi - : + FLOAT_H= + REPLACE_FLOAT_LDBL=0 + case "$host_os" in + aix* | beos* | openbsd* | mirbsd* | irix*) + FLOAT_H=float.h + ;; + freebsd* | dragonfly*) + case "$host_cpu" in + i[34567]86 ) + FLOAT_H=float.h + ;; + x86_64 ) + # On x86_64 systems, the C compiler may still be generating + # 32-bit code. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#if defined __LP64__ || defined __x86_64__ || defined __amd64__ + int ok; + #else + error fail + #endif +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether frexp works" >&5 -$as_echo_n "checking whether frexp works... " >&6; } -if ${gl_cv_func_frexp_works+:} false; then : +else + FLOAT_H=float.h +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ;; + esac + ;; + linux*) + case "$host_cpu" in + powerpc*) + FLOAT_H=float.h + ;; + esac + ;; + esac + case "$host_os" in + aix* | freebsd* | dragonfly* | linux*) + if test -n "$FLOAT_H"; then + REPLACE_FLOAT_LDBL=1 + fi + ;; + esac + + REPLACE_ITOLD=0 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether conversion from 'int' to 'long double' works" >&5 +$as_echo_n "checking whether conversion from 'int' to 'long double' works... " >&6; } +if ${gl_cv_func_itold_works+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : - case "$host_os" in - netbsd* | irix* | mingw*) gl_cv_func_frexp_works="guessing no";; - *) gl_cv_func_frexp_works="guessing yes";; + case "$host" in + sparc*-*-linux*) + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#if defined __LP64__ || defined __arch64__ + int ok; + #else + error fail + #endif + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_func_itold_works="guessing no" +else + gl_cv_func_itold_works="guessing yes" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ;; + # Guess yes on native Windows. + mingw*) gl_cv_func_itold_works="guessing yes" ;; + *) gl_cv_func_itold_works="guessing yes" ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include <float.h> -#include <math.h> -#include <string.h> -#if HAVE_DECL_ALARM -# include <signal.h> -# include <unistd.h> -#endif -/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0. - ICC 10.0 has a bug when optimizing the expression -zero. - The expression -DBL_MIN * DBL_MIN does not work when cross-compiling - to PowerPC on Mac OS X 10.5. */ -#if defined __hpux || defined __sgi || defined __ICC -static double -compute_minus_zero (void) -{ - return -DBL_MIN * DBL_MIN; -} -# define minus_zero compute_minus_zero () -#else -double minus_zero = -0.0; -#endif -int main() +int i = -1; +volatile long double ld; +int main () { - int result = 0; - int i; - volatile double x; - double zero = 0.0; -#if HAVE_DECL_ALARM - /* NeXTstep 3.3 frexp() runs into an endless loop when called on an infinite - number. Let the test fail in this case. */ - signal (SIGALRM, SIG_DFL); - alarm (5); -#endif - /* Test on denormalized numbers. */ - for (i = 1, x = 1.0; i >= DBL_MIN_EXP; i--, x *= 0.5) - ; - if (x > 0.0) - { - int exp; - double y = frexp (x, &exp); - /* On machines with IEEE754 arithmetic: x = 1.11254e-308, exp = -1022. - On NetBSD: y = 0.75. Correct: y = 0.5. */ - if (y != 0.5) - result |= 1; - } - /* Test on infinite numbers. */ - x = 1.0 / zero; - { - int exp; - double y = frexp (x, &exp); - if (y != x) - result |= 2; - } - /* Test on negative zero. */ - x = minus_zero; - { - int exp; - double y = frexp (x, &exp); - if (memcmp (&y, &x, sizeof x)) - result |= 4; - } - return result; + ld += i * 1.0L; + if (ld > 0) + return 1; + return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : - gl_cv_func_frexp_works=yes + gl_cv_func_itold_works=yes else - gl_cv_func_frexp_works=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_frexp_works" >&5 -$as_echo "$gl_cv_func_frexp_works" >&6; } - - LIBS="$save_LIBS" - case "$gl_cv_func_frexp_works" in - *yes) gl_func_frexp=yes ;; - *) gl_func_frexp=no; REPLACE_FREXP=1; FREXP_LIBM= ;; - esac - else - gl_func_frexp=no - fi - if test $gl_func_frexp = yes; then - -$as_echo "#define HAVE_FREXP 1" >>confdefs.h - - fi - - - if test $gl_func_frexp != yes; then - - - - + gl_cv_func_itold_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_itold_works" >&5 +$as_echo "$gl_cv_func_itold_works" >&6; } + case "$gl_cv_func_itold_works" in + *no) + REPLACE_ITOLD=1 + FLOAT_H=float.h + ;; + esac + if test -n "$FLOAT_H"; then - gl_LIBOBJS="$gl_LIBOBJS frexp.$ac_objext" - fi - GNULIB_FREXP=1 + if test $gl_cv_have_include_next = yes; then + gl_cv_next_float_h='<'float.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <float.h>" >&5 +$as_echo_n "checking absolute name of <float.h>... " >&6; } +if ${gl_cv_next_float_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <float.h> +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac -$as_echo "#define GNULIB_TEST_FREXP 1" >>confdefs.h + case "$host_os" in + mingw*) + gl_dirsep_regex='[/\\]' + ;; + *) + gl_dirsep_regex='\/' + ;; + esac + gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' + gl_header_literal_regex=`echo 'float.h' \ + | sed -e "$gl_make_literal_regex_sed"` + gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ + s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ + s|^/[^/]|//&| + p + q + }' + gl_cv_absolute_float_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n "$gl_absolute_header_sed"` + gl_header=$gl_cv_absolute_float_h + gl_cv_next_float_h='"'$gl_header'"' +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_float_h" >&5 +$as_echo "$gl_cv_next_float_h" >&6; } + fi + NEXT_FLOAT_H=$gl_cv_next_float_h + if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' + gl_next_as_first_directive='<'float.h'>' + else + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' + gl_next_as_first_directive=$gl_cv_next_float_h + fi + NEXT_AS_FIRST_DIRECTIVE_FLOAT_H=$gl_next_as_first_directive - ac_fn_c_check_decl "$LINENO" "frexpl" "ac_cv_have_decl_frexpl" "#include <math.h> -" -if test "x$ac_cv_have_decl_frexpl" = xyes; then : + fi + if test -n "$FLOAT_H"; then + GL_GENERATE_FLOAT_H_TRUE= + GL_GENERATE_FLOAT_H_FALSE='#' else - HAVE_DECL_FREXPL=0 + GL_GENERATE_FLOAT_H_TRUE='#' + GL_GENERATE_FLOAT_H_FALSE= fi - FREXPL_LIBM= - if test $HAVE_DECL_FREXPL = 1; then - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether frexpl() can be used without linking with libm" >&5 -$as_echo_n "checking whether frexpl() can be used without linking with libm... " >&6; } -if ${gl_cv_func_frexpl_no_libm+:} false; then : - $as_echo_n "(cached) " >&6 -else - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <math.h> - long double x; -int -main () -{ -int e; return frexpl (x, &e) > 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - gl_cv_func_frexpl_no_libm=yes -else - gl_cv_func_frexpl_no_libm=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_frexpl_no_libm" >&5 -$as_echo "$gl_cv_func_frexpl_no_libm" >&6; } + if test $REPLACE_FLOAT_LDBL = 1; then - if test $gl_cv_func_frexpl_no_libm = no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether frexpl() can be used with libm" >&5 -$as_echo_n "checking whether frexpl() can be used with libm... " >&6; } -if ${gl_cv_func_frexpl_in_libm+:} false; then : - $as_echo_n "(cached) " >&6 -else - save_LIBS="$LIBS" - LIBS="$LIBS -lm" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <math.h> - long double x; -int -main () -{ -int e; return frexpl (x, &e) > 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - gl_cv_func_frexpl_in_libm=yes -else - gl_cv_func_frexpl_in_libm=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LIBS="$save_LIBS" -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_frexpl_in_libm" >&5 -$as_echo "$gl_cv_func_frexpl_in_libm" >&6; } - if test $gl_cv_func_frexpl_in_libm = yes; then - FREXPL_LIBM=-lm - fi - fi - if test $gl_cv_func_frexpl_no_libm = yes \ - || test $gl_cv_func_frexpl_in_libm = yes; then - save_LIBS="$LIBS" - LIBS="$LIBS $FREXPL_LIBM" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether frexpl works" >&5 -$as_echo_n "checking whether frexpl works... " >&6; } -if ${gl_cv_func_frexpl_works+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - case "$host_os" in - aix | aix[3-6]* | beos* | darwin* | irix* | mingw* | pw*) - gl_cv_func_frexpl_works="guessing no";; - *) gl_cv_func_frexpl_works="guessing yes";; - esac -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ + gl_LIBOBJS="$gl_LIBOBJS float.$ac_objext" -#include <float.h> -#include <math.h> -/* Override the values of <float.h>, like done in float.in.h. */ -#if defined __i386__ && (defined __BEOS__ || defined __OpenBSD__) -# undef LDBL_MIN_EXP -# define LDBL_MIN_EXP (-16381) -#endif -#if defined __i386__ && defined __FreeBSD__ -# undef LDBL_MIN_EXP -# define LDBL_MIN_EXP (-16381) -#endif -#if (defined _ARCH_PPC || defined _POWER) && defined _AIX && (LDBL_MANT_DIG == 106) && defined __GNUC__ -# undef LDBL_MIN_EXP -# define LDBL_MIN_EXP DBL_MIN_EXP -#endif -#if defined __sgi && (LDBL_MANT_DIG >= 106) -# if defined __GNUC__ -# undef LDBL_MIN_EXP -# define LDBL_MIN_EXP DBL_MIN_EXP -# endif -#endif -extern -#ifdef __cplusplus -"C" -#endif -long double frexpl (long double, int *); -int main() -{ - int result = 0; - volatile long double x; - /* Test on finite numbers that fails on AIX 5.1. */ - x = 16.0L; - { - int exp = -9999; - frexpl (x, &exp); - if (exp != 5) - result |= 1; - } - /* Test on finite numbers that fails on Mac OS X 10.4, because its frexpl - function returns an invalid (incorrectly normalized) value: it returns - y = { 0x3fe028f5, 0xc28f5c28, 0x3c9eb851, 0xeb851eb8 } - but the correct result is - 0.505L = { 0x3fe028f5, 0xc28f5c29, 0xbc547ae1, 0x47ae1480 } */ - x = 1.01L; - { - int exp = -9999; - long double y = frexpl (x, &exp); - if (!(exp == 1 && y == 0.505L)) - result |= 2; - } - /* Test on large finite numbers. This fails on BeOS at i = 16322, while - LDBL_MAX_EXP = 16384. - In the loop end test, we test x against Infinity, rather than comparing - i with LDBL_MAX_EXP, because BeOS <float.h> has a wrong LDBL_MAX_EXP. */ - { - int i; - for (i = 1, x = 1.0L; x != x + x; i++, x *= 2.0L) - { - int exp = -9999; - frexpl (x, &exp); - if (exp != i) - { - result |= 4; - break; - } - } - } - /* Test on denormalized numbers. */ - { - int i; - for (i = 1, x = 1.0L; i >= LDBL_MIN_EXP; i--, x *= 0.5L) - ; - if (x > 0.0L) - { - int exp; - long double y = frexpl (x, &exp); - /* On machines with IEEE854 arithmetic: x = 1.68105e-4932, - exp = -16382, y = 0.5. On Mac OS X 10.5: exp = -16384, y = 0.5. */ - if (exp != LDBL_MIN_EXP - 1) - result |= 8; - } - } - /* Test on infinite numbers. */ - x = 1.0L / 0.0L; - { - int exp; - long double y = frexpl (x, &exp); - if (y != x) - result |= 16; - } - return result; + fi + if test $REPLACE_ITOLD = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS itold.$ac_objext" + + fi + + + + + gl_fnmatch_required_lowercase=` + echo $gl_fnmatch_required | LC_ALL=C tr '[A-Z]' '[a-z]' + ` + + if test $ac_cv_func_fnmatch = no; then + HAVE_FNMATCH=0 + else + gl_fnmatch_cache_var="gl_cv_func_fnmatch_${gl_fnmatch_required_lowercase}" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working $gl_fnmatch_required fnmatch" >&5 +$as_echo_n "checking for working $gl_fnmatch_required fnmatch... " >&6; } +if eval \${$gl_fnmatch_cache_var+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test $gl_fnmatch_required = GNU; then + gl_fnmatch_gnu_start= + gl_fnmatch_gnu_end= + else + gl_fnmatch_gnu_start='#if 0' + gl_fnmatch_gnu_end='#endif' + fi + if test "$cross_compiling" = yes; then : + case "$host_os" in + # Guess yes on musl systems. + *-musl*) eval "$gl_fnmatch_cache_var=\"guessing yes\"" ;; + # Guess no otherwise, even on glibc systems. + *) eval "$gl_fnmatch_cache_var=\"guessing no\"" ;; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <fnmatch.h> + static int + y (char const *pattern, char const *string, int flags) + { + return fnmatch (pattern, string, flags) == 0; + } + static int + n (char const *pattern, char const *string, int flags) + { + return fnmatch (pattern, string, flags) == FNM_NOMATCH; + } + +int +main () +{ +char const *Apat = 'A' < '\\\\' ? "[A-\\\\\\\\]" : "[\\\\\\\\-A]"; + char const *apat = 'a' < '\\\\' ? "[a-\\\\\\\\]" : "[\\\\\\\\-a]"; + static char const A_1[] = { 'A' - 1, 0 }; + static char const A01[] = { 'A' + 1, 0 }; + static char const a_1[] = { 'a' - 1, 0 }; + static char const a01[] = { 'a' + 1, 0 }; + static char const bs_1[] = { '\\\\' - 1, 0 }; + static char const bs01[] = { '\\\\' + 1, 0 }; + int result = 0; + if (!n ("a*", "", 0)) + return 1; + if (!y ("a*", "abc", 0)) + return 1; + if (!y ("[/b", "[/b", 0)) /*"]]"*/ /* glibc Bugzilla bug 12378 */ + return 1; + if (!n ("d*/*1", "d/s/1", FNM_PATHNAME)) + return 2; + if (!y ("a\\\\bc", "abc", 0)) + return 3; + if (!n ("a\\\\bc", "abc", FNM_NOESCAPE)) + return 3; + if (!y ("*x", ".x", 0)) + return 4; + if (!n ("*x", ".x", FNM_PERIOD)) + return 4; + if (!y (Apat, "\\\\", 0)) + return 5; + if (!y (Apat, "A", 0)) + return 5; + if (!y (apat, "\\\\", 0)) + return 5; + if (!y (apat, "a", 0)) + return 5; + if (!(n (Apat, A_1, 0) == ('A' < '\\\\'))) + return 5; + if (!(n (apat, a_1, 0) == ('a' < '\\\\'))) + return 5; + if (!(y (Apat, A01, 0) == ('A' < '\\\\'))) + return 5; + if (!(y (apat, a01, 0) == ('a' < '\\\\'))) + return 5; + if (!(y (Apat, bs_1, 0) == ('A' < '\\\\'))) + return 5; + if (!(y (apat, bs_1, 0) == ('a' < '\\\\'))) + return 5; + if (!(n (Apat, bs01, 0) == ('A' < '\\\\'))) + return 5; + if (!(n (apat, bs01, 0) == ('a' < '\\\\'))) + return 5; + $gl_fnmatch_gnu_start + if (!y ("xxXX", "xXxX", FNM_CASEFOLD)) + result |= 8; + if (!y ("a++(x|yy)b", "a+xyyyyxb", FNM_EXTMATCH)) + result |= 16; + if (!n ("d*/*1", "d/s/1", FNM_FILE_NAME)) + result |= 32; + if (!y ("*", "x", FNM_FILE_NAME | FNM_LEADING_DIR)) + result |= 64; + if (!y ("x*", "x/y/z", FNM_FILE_NAME | FNM_LEADING_DIR)) + result |= 64; + if (!y ("*c*", "c/x", FNM_FILE_NAME | FNM_LEADING_DIR)) + result |= 64; + $gl_fnmatch_gnu_end + return result; + + ; + return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : - gl_cv_func_frexpl_works=yes + eval "$gl_fnmatch_cache_var=yes" else - gl_cv_func_frexpl_works=no + eval "$gl_fnmatch_cache_var=no" fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext @@ -19135,43 +19400,44 @@ fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_frexpl_works" >&5 -$as_echo "$gl_cv_func_frexpl_works" >&6; } +eval ac_res=\$$gl_fnmatch_cache_var + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval "gl_fnmatch_result=\"\$$gl_fnmatch_cache_var\"" + case "$gl_fnmatch_result" in + *yes) ;; + *) REPLACE_FNMATCH=1 ;; + esac + fi + if test $HAVE_FNMATCH = 0 || test $REPLACE_FNMATCH = 1; then - LIBS="$save_LIBS" - case "$gl_cv_func_frexpl_works" in - *yes) gl_func_frexpl=yes ;; - *) gl_func_frexpl=no; REPLACE_FREXPL=1 ;; - esac - else - gl_func_frexpl=no - fi - if test $gl_func_frexpl = yes; then -$as_echo "#define HAVE_FREXPL 1" >>confdefs.h + FNMATCH_H='fnmatch.h' + if test -n "$FNMATCH_H"; then + GL_GENERATE_FNMATCH_H_TRUE= + GL_GENERATE_FNMATCH_H_FALSE='#' +else + GL_GENERATE_FNMATCH_H_TRUE='#' + GL_GENERATE_FNMATCH_H_FALSE= +fi - fi - fi - if test $HAVE_DECL_FREXPL = 0 || test $gl_func_frexpl = no; then - if test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1; then - FREXPL_LIBM="$FREXP_LIBM" - else - FREXPL_LIBM= - fi fi + if test $HAVE_FNMATCH = 0 || test $REPLACE_FNMATCH = 1; then + - if test $HAVE_DECL_FREXPL = 0 || test $gl_func_frexpl = no; then + gl_LIBOBJS="$gl_LIBOBJS fnmatch.$ac_objext" + + - gl_LIBOBJS="$gl_LIBOBJS frexpl.$ac_objext" fi @@ -19179,13 +19445,13 @@ - GNULIB_FREXPL=1 + GNULIB_FNMATCH=1 -$as_echo "#define GNULIB_TEST_FREXPL 1" >>confdefs.h +$as_echo "#define GNULIB_TEST_FNMATCH 1" >>confdefs.h @@ -19193,20 +19459,96 @@ - if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then - REPLACE_FSTAT=1 + + if test $HAVE_FNMATCH = 0 || test $REPLACE_FNMATCH = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS fnmatch.$ac_objext" + + + + + fi - if test $WINDOWS_64_BIT_ST_SIZE = 1; then - REPLACE_FSTAT=1 +cat >>confdefs.h <<_ACEOF +#define GNULIB_FNMATCH_GNU 1 +_ACEOF + + + + + if test $gl_func_frexp != yes; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS frexp.$ac_objext" + fi - : + GNULIB_FREXP=1 + + + + + +$as_echo "#define GNULIB_TEST_FREXP 1" >>confdefs.h + + + + + if test $HAVE_DECL_FREXPL = 0 || test $gl_func_frexpl = no; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS frexpl.$ac_objext" + + fi + + + + + + GNULIB_FREXPL=1 + + + + + +$as_echo "#define GNULIB_TEST_FREXPL 1" >>confdefs.h + + + + + + + + case "$host_os" in + mingw* | solaris*) + REPLACE_FSTAT=1 + ;; + esac @@ -19237,29 +19579,42 @@ gl_LIBOBJS="$gl_LIBOBJS fstat.$ac_objext" - : - fi + case "$host_os" in + mingw*) + - GNULIB_FSTAT=1 + gl_LIBOBJS="$gl_LIBOBJS stat-w32.$ac_objext" + ;; + esac -$as_echo "#define GNULIB_TEST_FSTAT 1" >>confdefs.h + : + + fi + GNULIB_FSTAT=1 + + + + + +$as_echo "#define GNULIB_TEST_FSTAT 1" >>confdefs.h + + - : @@ -19310,15 +19665,20 @@ case $gl_cv_func_fstatat_zero_flag+$gl_cv_func_lstat_dereferences_slashed_symlink in *yes+*yes) ;; - *) REPLACE_FSTATAT=1 - case $gl_cv_func_fstatat_zero_flag in - *yes) + *) REPLACE_FSTATAT=1 ;; + esac + + case $host_os in + solaris*) + REPLACE_FSTATAT=1 ;; + esac + + case $REPLACE_FSTATAT,$gl_cv_func_fstatat_zero_flag in + 1,*yes) $as_echo "#define HAVE_WORKING_FSTATAT_ZERO_FLAG 1" >>confdefs.h ;; - esac - ;; esac fi @@ -19362,18 +19722,6 @@ *) - : - - - - - - - - : - - - @@ -19386,20 +19734,20 @@ ac_clean_files="$ac_clean_files confdir3" if test "$cross_compiling" = yes; then : # Cross-compilation guesses: - case "$host_os" in - aix*) # On AIX, it has the AIX bug. - gl_cv_func_getcwd_path_max='no, it has the AIX bug' ;; - gnu*) # On Hurd, it is 'yes'. - gl_cv_func_getcwd_path_max=yes ;; - linux* | kfreebsd*) - # On older Linux+glibc it's 'no, but it is partly working', - # on newer Linux+glibc it's 'yes'. - # On Linux+musl libc, it's 'no, but it is partly working'. - # On kFreeBSD+glibc, it's 'no, but it is partly working'. - gl_cv_func_getcwd_path_max='no, but it is partly working' ;; - *) # If we don't know, assume the worst. - gl_cv_func_getcwd_path_max=no ;; - esac + case "$host_os" in + aix*) # On AIX, it has the AIX bug. + gl_cv_func_getcwd_path_max='guessing no, it has the AIX bug' ;; + gnu*) # On Hurd, it is 'yes'. + gl_cv_func_getcwd_path_max='guessing yes' ;; + linux* | kfreebsd*) + # On older Linux+glibc it's 'no, but it is partly working', + # on newer Linux+glibc it's 'yes'. + # On Linux+musl libc, it's 'no, but it is partly working'. + # On kFreeBSD+glibc, it's 'no, but it is partly working'. + gl_cv_func_getcwd_path_max='guessing no, but it is partly working' ;; + *) # If we don't know, obey --enable-cross-guesses. + gl_cv_func_getcwd_path_max="$gl_cross_guess_normal" ;; + esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -19434,7 +19782,7 @@ # undef PATH_MAX # define PATH_MAX 1024 #endif -#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ +#if defined _WIN32 && ! defined __CYGWIN__ # undef PATH_MAX # define PATH_MAX 260 #endif @@ -19508,12 +19856,20 @@ /* If mkdir or chdir fails, it could be that this system cannot create any file with an absolute name longer than PATH_MAX, such as cygwin. If so, leave fail as 0, because the current working directory can't - be too long for getcwd if it can't even be created. For other - errors, be pessimistic and consider that as a failure, too. */ + be too long for getcwd if it can't even be created. On Linux with + the 9p file system, mkdir fails with error EINVAL when cwd_len gets + too long; ignore this failure because the getcwd() system call + produces good results whereas the gnulib substitute calls getdents64 + which fails with error EPROTO. + For other errors, be pessimistic and consider that as a failure, + too. */ if (mkdir (DIR_NAME, S_IRWXU) < 0 || chdir (DIR_NAME) < 0) { if (! (errno == ERANGE || is_ENAMETOOLONG (errno))) - fail = 20; + #ifdef __linux__ + if (! (errno == EINVAL)) + #endif + fail = 20; break; } @@ -19604,11 +19960,11 @@ gl_cv_func_getcwd_path_max=yes else case $? in - 10|11|12) gl_cv_func_getcwd_path_max='no, but it is partly working';; - 31) gl_cv_func_getcwd_path_max='no, it has the AIX bug';; - 32) gl_cv_func_getcwd_path_max='yes, but with shorter paths';; - *) gl_cv_func_getcwd_path_max=no;; - esac + 10|11|12) gl_cv_func_getcwd_path_max='no, but it is partly working';; + 31) gl_cv_func_getcwd_path_max='no, it has the AIX bug';; + 32) gl_cv_func_getcwd_path_max='yes, but with shorter paths';; + *) gl_cv_func_getcwd_path_max=no;; + esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext @@ -19623,30 +19979,46 @@ *yes) - : - - - - : - + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for getpagesize" >&5 +$as_echo_n "checking for getpagesize... " >&6; } +if ${gl_cv_func_getpagesize+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <unistd.h> +int +main () +{ +return getpagesize(); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + gl_cv_func_getpagesize=yes +else + gl_cv_func_getpagesize=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_getpagesize" >&5 +$as_echo "$gl_cv_func_getpagesize" >&6; } + if test $gl_cv_func_getpagesize = yes; then - for ac_func in getpagesize -do : - ac_fn_c_check_func "$LINENO" "getpagesize" "ac_cv_func_getpagesize" -if test "x$ac_cv_func_getpagesize" = xyes; then : - cat >>confdefs.h <<_ACEOF +cat >>confdefs.h <<_ACEOF #define HAVE_GETPAGESIZE 1 _ACEOF -fi -done + fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether getcwd aborts when 4k < cwd_length < 16k" >&5 $as_echo_n "checking whether getcwd aborts when 4k < cwd_length < 16k... " >&6; } @@ -19658,7 +20030,13 @@ # Arrange for deletion of the temporary directory this test creates. ac_clean_files="$ac_clean_files confdir-14B---" if test "$cross_compiling" = yes; then : - gl_cv_func_getcwd_abort_bug=yes + case "$host_os" in + # Guess no on musl systems. + *-musl*) gl_cv_func_getcwd_abort_bug="guessing no" ;; + # Guess yes otherwise, even on glibc systems. + *) gl_cv_func_getcwd_abort_bug="guessing yes" + esac + else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -19689,7 +20067,7 @@ # undef PATH_MAX # define PATH_MAX 1024 #endif -#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ +#if defined _WIN32 && ! defined __CYGWIN__ # undef PATH_MAX # define PATH_MAX 260 #endif @@ -19781,12 +20159,13 @@ if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_getcwd_abort_bug=no else - ret=$? - if test $ret -ge 128 || test $ret = 4; then - gl_cv_func_getcwd_abort_bug=yes - else - gl_cv_func_getcwd_abort_bug=no - fi + ret=$? + if test $ret -ge 128 || test $ret = 4; then + gl_cv_func_getcwd_abort_bug=yes + else + gl_cv_func_getcwd_abort_bug=no + fi + fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext @@ -19796,16 +20175,21 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_getcwd_abort_bug" >&5 $as_echo "$gl_cv_func_getcwd_abort_bug" >&6; } - if test $gl_cv_func_getcwd_abort_bug = yes; then : - gl_abort_bug=yes -fi + case "$gl_cv_func_getcwd_abort_bug" in + *yes) + gl_abort_bug=yes + ;; + *) + + ;; + esac ;; esac ;; esac case "$gl_cv_func_getcwd_path_max" in - "no"|"no, it has the AIX bug") ;; + *"no" | *"no, it has the AIX bug") ;; *) $as_echo "#define HAVE_MINIMALLY_WORKING_GETCWD 1" >>confdefs.h @@ -19813,12 +20197,12 @@ ;; esac case "$gl_cv_func_getcwd_path_max" in - "no, but it is partly working") + *"no, but it is partly working") $as_echo "#define HAVE_PARTLY_WORKING_GETCWD 1" >>confdefs.h ;; - "yes, but with shorter paths") + *"yes, but with shorter paths") $as_echo "#define HAVE_GETCWD_SHORTER 1" >>confdefs.h @@ -19914,48 +20298,37 @@ - : - - - - - - - : - - - - if test $ac_cv_func_getdtablesize = yes && test $ac_cv_have_decl_getdtablesize = yes; then - # Cygwin 1.7.25 automatically increases the RLIMIT_NOFILE soft limit - # up to an unchangeable hard limit; all other platforms correctly - # require setrlimit before getdtablesize() can report a larger value. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether getdtablesize works" >&5 $as_echo_n "checking whether getdtablesize works... " >&6; } if ${gl_cv_func_getdtablesize_works+:} false; then : $as_echo_n "(cached) " >&6 else - if test "$cross_compiling" = yes; then : + case "$host_os" in + vms*) gl_cv_func_getdtablesize_works="no (limitation)" ;; + *) + if test "$cross_compiling" = yes; then : case "$host_os" in - cygwin*) # on cygwin 1.5.25, getdtablesize() automatically grows - gl_cv_func_getdtablesize_works="guessing no" ;; - *) gl_cv_func_getdtablesize_works="guessing yes" ;; - esac + cygwin*) # on cygwin 1.5.25, getdtablesize() automatically grows + gl_cv_func_getdtablesize_works="guessing no" ;; + *) gl_cv_func_getdtablesize_works="guessing yes" ;; + esac + else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ - #include <unistd.h> + #include <unistd.h> int main () { int size = getdtablesize(); - if (dup2 (0, getdtablesize()) != -1) - return 1; - if (size != getdtablesize()) - return 2; + if (dup2 (0, getdtablesize()) != -1) + return 1; + if (size != getdtablesize()) + return 2; ; return 0; @@ -19970,12 +20343,14 @@ conftest.$ac_objext conftest.beam conftest.$ac_ext fi + ;; + esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_getdtablesize_works" >&5 $as_echo "$gl_cv_func_getdtablesize_works" >&6; } case "$gl_cv_func_getdtablesize_works" in - *yes) ;; + *yes | "no (limitation)") ;; *) REPLACE_GETDTABLESIZE=1 ;; esac else @@ -20016,23 +20391,11 @@ - : - - - - - if test $ac_cv_have_decl_getlogin_r = no; then HAVE_DECL_GETLOGIN_R=0 fi - : - - - - - if test $ac_cv_func_getlogin_r = no; then HAVE_GETLOGIN_R=0 else @@ -20045,10 +20408,10 @@ else case "$host_os" in - # Guess no on OSF/1. - osf*) gl_cv_func_getlogin_r_works="guessing no" ;; - # Guess yes otherwise. - *) gl_cv_func_getlogin_r_works="guessing yes" ;; + # Guess no on Mac OS X, OSF/1. + darwin* | osf*) gl_cv_func_getlogin_r_works="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_getlogin_r_works="guessing yes" ;; esac if test "$cross_compiling" = yes; then : : @@ -20057,6 +20420,7 @@ /* end confdefs.h. */ #include <stddef.h> +#include <string.h> #include <unistd.h> #if !HAVE_DECL_GETLOGIN_R extern @@ -20072,19 +20436,22 @@ char buf[100]; if (getlogin_r (buf, 0) == 0) - result |= 16; + result |= 1; if (getlogin_r (buf, 1) == 0) - result |= 17; + result |= 2; + if (getlogin_r (buf, 100) == 0) + { + size_t n = strlen (buf); + if (getlogin_r (buf, n) == 0) + result |= 4; + } return result; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_getlogin_r_works=yes else - case $? in - 16 | 17) gl_cv_func_getlogin_r_works=no ;; - esac - + gl_cv_func_getlogin_r_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext @@ -20113,12 +20480,6 @@ - : - - - - - fi @@ -20138,14 +20499,6 @@ - : - - - - - - - ac_found=0 @@ -20240,10 +20593,134 @@ + if test "$ac_cv_func_getrandom" != yes; then + HAVE_GETRANDOM=0 + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether getrandom is compatible with its GNU+BSD signature" >&5 +$as_echo_n "checking whether getrandom is compatible with its GNU+BSD signature... " >&6; } +if ${gl_cv_func_getrandom_ok+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Additional includes are needed before <sys/random.h> on Mac OS X. */ + #include <sys/types.h> + #include <stdlib.h> + #include <sys/random.h> + ssize_t getrandom (void *, size_t, unsigned int); + +int +main () +{ + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_func_getrandom_ok=yes +else + gl_cv_func_getrandom_ok=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_getrandom_ok" >&5 +$as_echo "$gl_cv_func_getrandom_ok" >&6; } + if test $gl_cv_func_getrandom_ok = no; then + REPLACE_GETRANDOM=1 + fi + fi + + case "$host_os" in + mingw*) + for ac_header in bcrypt.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "bcrypt.h" "ac_cv_header_bcrypt_h" "$ac_includes_default" +if test "x$ac_cv_header_bcrypt_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_BCRYPT_H 1 +_ACEOF + +fi + +done + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the bcrypt library is guaranteed to be present" >&5 +$as_echo_n "checking whether the bcrypt library is guaranteed to be present... " >&6; } +if ${gl_cv_lib_assume_bcrypt+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <windows.h> +int +main () +{ +#if !(_WIN32_WINNT >= _WIN32_WINNT_WIN7) + cannot assume it + #endif + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_lib_assume_bcrypt=yes +else + gl_cv_lib_assume_bcrypt=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_lib_assume_bcrypt" >&5 +$as_echo "$gl_cv_lib_assume_bcrypt" >&6; } + if test $gl_cv_lib_assume_bcrypt = yes; then + +$as_echo "#define HAVE_LIB_BCRYPT 1" >>confdefs.h + + LIB_GETRANDOM='-lbcrypt' + else + LIB_GETRANDOM='-ladvapi32' + fi + ;; + *) + LIB_GETRANDOM= ;; + esac + + + if test $HAVE_GETRANDOM = 0 || test $REPLACE_GETRANDOM = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS getrandom.$ac_objext" + + fi + + + + + + GNULIB_GETRANDOM=1 + + + + + +$as_echo "#define GNULIB_TEST_GETRANDOM 1" >>confdefs.h + + + - : @@ -20257,6 +20734,7 @@ + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gettimeofday clobbers localtime buffer" >&5 $as_echo_n "checking whether gettimeofday clobbers localtime buffer... " >&6; } if ${gl_cv_func_gettimeofday_clobber+:} false; then : @@ -20265,10 +20743,14 @@ if test "$cross_compiling" = yes; then : # When cross-compiling: case "$host_os" in - # Guess all is fine on glibc systems. - *-gnu*) gl_cv_func_gettimeofday_clobber="guessing no" ;; - # If we don't know, assume the worst. - *) gl_cv_func_gettimeofday_clobber="guessing yes" ;; + # Guess all is fine on glibc systems. + *-gnu* | gnu*) gl_cv_func_gettimeofday_clobber="guessing no" ;; + # Guess all is fine on musl systems. + *-musl*) gl_cv_func_gettimeofday_clobber="guessing no" ;; + # Guess no on native Windows. + mingw*) gl_cv_func_gettimeofday_clobber="guessing no" ;; + # If we don't know, obey --enable-cross-guesses. + *) gl_cv_func_gettimeofday_clobber="$gl_cross_guess_inverted" ;; esac else @@ -20313,11 +20795,14 @@ *yes) REPLACE_GETTIMEOFDAY=1 - REPLACE_GMTIME=1 - REPLACE_LOCALTIME=1 +$as_echo "#define GETTIMEOFDAY_CLOBBERS_LOCALTIME 1" >>confdefs.h -$as_echo "#define GETTIMEOFDAY_CLOBBERS_LOCALTIME 1" >>confdefs.h + + + NEED_LOCALTIME_BUFFER=1 + REPLACE_GMTIME=1 + REPLACE_LOCALTIME=1 ;; esac @@ -20385,7 +20870,9 @@ if test $REPLACE_STRUCT_TIMEVAL = 1; then REPLACE_GETTIMEOFDAY=1 fi - + case "$host_os" in + mingw*) REPLACE_GETTIMEOFDAY=1 ;; + esac fi cat >>confdefs.h <<_ACEOF @@ -20404,31 +20891,7 @@ gl_LIBOBJS="$gl_LIBOBJS gettimeofday.$ac_objext" - - for ac_header in sys/timeb.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "sys/timeb.h" "ac_cv_header_sys_timeb_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_timeb_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_SYS_TIMEB_H 1 -_ACEOF - -fi - -done - - for ac_func in _ftime -do : - ac_fn_c_check_func "$LINENO" "_ftime" "ac_cv_func__ftime" -if test "x$ac_cv_func__ftime" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE__FTIME 1 -_ACEOF - -fi -done - - + : fi @@ -20445,76 +20908,68 @@ - GLOB_H= - for ac_header in glob.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "glob.h" "ac_cv_header_glob_h" "$ac_includes_default" -if test "x$ac_cv_header_glob_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_GLOB_H 1 -_ACEOF -else - GLOB_H=glob.h -fi -done - if test -z "$GLOB_H"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU glob interface version 1" >&5 -$as_echo_n "checking for GNU glob interface version 1... " >&6; } -if ${gl_cv_gnu_glob_interface_version_1+:} false; then : + if test $ac_cv_func_glob = no; then + HAVE_GLOB=0 + else + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU glob interface version 1 or 2" >&5 +$as_echo_n "checking for GNU glob interface version 1 or 2... " >&6; } +if ${gl_cv_gnu_glob_interface_version_1_2+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <gnu-versions.h> -char a[_GNU_GLOB_INTERFACE_VERSION == 1 ? 1 : -1]; +char a[_GNU_GLOB_INTERFACE_VERSION == 1 || _GNU_GLOB_INTERFACE_VERSION == 2 ? 1 : -1]; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : - gl_cv_gnu_glob_interface_version_1=yes + gl_cv_gnu_glob_interface_version_1_2=yes else - gl_cv_gnu_glob_interface_version_1=no + gl_cv_gnu_glob_interface_version_1_2=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_gnu_glob_interface_version_1" >&5 -$as_echo "$gl_cv_gnu_glob_interface_version_1" >&6; } - - if test "$gl_cv_gnu_glob_interface_version_1" = "no"; then - GLOB_H=glob.h +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_gnu_glob_interface_version_1_2" >&5 +$as_echo "$gl_cv_gnu_glob_interface_version_1_2" >&6; } + if test "$gl_cv_gnu_glob_interface_version_1_2" = "no"; then + REPLACE_GLOB=1 fi - fi - if test -z "$GLOB_H"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether glob lists broken symlinks" >&5 + if test $REPLACE_GLOB = 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether glob lists broken symlinks" >&5 $as_echo_n "checking whether glob lists broken symlinks... " >&6; } if ${gl_cv_glob_lists_symlinks+:} false; then : $as_echo_n "(cached) " >&6 else - if ln -s conf-doesntexist conf$$-globtest 2>/dev/null; then - gl_cv_glob_lists_symlinks=maybe - else - # If we can't make a symlink, then we cannot test this issue. Be - # pessimistic about this. - gl_cv_glob_lists_symlinks=no - fi + if test $cross_compiling != yes; then + if ln -s conf-doesntexist conf$$-globtest 2>/dev/null; then + gl_cv_glob_lists_symlinks=maybe + else + # If we can't make a symlink, then we cannot test this issue. Be + # pessimistic about this. + gl_cv_glob_lists_symlinks=no + fi + if test $gl_cv_glob_lists_symlinks = maybe; then + if test "$cross_compiling" = yes; then : + : - if test $gl_cv_glob_lists_symlinks = maybe; then - if test "$cross_compiling" = yes; then : - gl_cv_glob_lists_symlinks=no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ - #include <stddef.h> -#include <glob.h> + #include <glob.h> int main () { glob_t found; -if (glob ("conf*-globtest", 0, NULL, &found) == GLOB_NOMATCH) return 1; + if (glob ("conf*-globtest", 0, NULL, &found) == GLOB_NOMATCH) + return 1; + globfree (&found); + ; return 0; } @@ -20528,19 +20983,35 @@ conftest.$ac_objext conftest.beam conftest.$ac_ext fi - fi + fi + rm -f conf$$-globtest + else + gl_cv_glob_lists_symlinks="$gl_cross_guess_normal" + fi + fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_glob_lists_symlinks" >&5 $as_echo "$gl_cv_glob_lists_symlinks" >&6; } + case "$gl_cv_glob_lists_symlinks" in + *yes) ;; + *) REPLACE_GLOB=1 ;; + esac + fi + + fi - if test $gl_cv_glob_lists_symlinks = no; then - GLOB_H=glob.h + if test $ac_cv_func_glob_pattern_p = no; then + HAVE_GLOB_PATTERN_P=0 + else + if test $REPLACE_GLOB = 1; then + REPLACE_GLOB_PATTERN_P=1 fi fi - rm -f conf$$-globtest + if test $HAVE_GLOB = 0 || test $REPLACE_GLOB = 1; then + GLOB_H='glob.h' if test -n "$GLOB_H"; then GL_GENERATE_GLOB_H_TRUE= GL_GENERATE_GLOB_H_FALSE='#' @@ -20550,7 +21021,9 @@ fi - if test -n "$GLOB_H"; then + fi + + if test $HAVE_GLOB = 0 || test $REPLACE_GLOB = 1; then @@ -20563,25 +21036,22 @@ - : + gl_LIBOBJS="$gl_LIBOBJS globfree.$ac_objext" - if test $ac_cv_header_sys_cdefs_h = yes; then - HAVE_SYS_CDEFS_H=1 - else - HAVE_SYS_CDEFS_H=0 - fi - : + fi + if test $HAVE_GLOB_PATTERN_P = 0 || test $REPLACE_GLOB_PATTERN_P = 1; then + @@ -20589,26 +21059,37 @@ + gl_LIBOBJS="$gl_LIBOBJS glob_pattern_p.$ac_objext" fi - : + GNULIB_GLOB=1 - HAVE_INET_NTOP=1 - INET_NTOP_LIB= + +$as_echo "#define GNULIB_TEST_GLOB 1" >>confdefs.h - : + LIB_HARD_LOCALE="$LIB_SETLOCALE_NULL" + + + + + + + + + HAVE_INET_NTOP=1 + INET_NTOP_LIB= @@ -20637,6 +21118,7 @@ if test $HAVE_WINSOCK2_H = 1; then + REPLACE_INET_NTOP=1 ac_fn_c_check_decl "$LINENO" "inet_ntop" "ac_cv_have_decl_inet_ntop" "#include <ws2tcpip.h> " if test "x$ac_cv_have_decl_inet_ntop" = xyes; then : @@ -20650,11 +21132,9 @@ _ACEOF if test $ac_cv_have_decl_inet_ntop = yes; then - REPLACE_INET_NTOP=1 INET_NTOP_LIB="-lws2_32" else HAVE_DECL_INET_NTOP=0 - HAVE_INET_NTOP=0 fi else gl_save_LIBS=$LIBS @@ -20682,7 +21162,7 @@ return 0; } _ACEOF -for ac_lib in '' nsl resolv; do +for ac_lib in '' nsl resolv network; do if test -z "$ac_lib"; then ac_res="none required" else @@ -20738,12 +21218,6 @@ fi - : - - - - - ac_fn_c_check_decl "$LINENO" "inet_ntop" "ac_cv_have_decl_inet_ntop" "#include <arpa/inet.h> #if HAVE_NETDB_H # include <netdb.h> @@ -20850,10 +21324,8 @@ #if defined INT32_MAX && defined INTMAX_MAX #define CONDITION (INT32_MAX < INTMAX_MAX) - #elif HAVE_LONG_LONG_INT - #define CONDITION (sizeof (int) < sizeof (long long int)) #else - #define CONDITION 0 + #define CONDITION (sizeof (int) < sizeof (long long int)) #endif int test[CONDITION ? 1 : -1]; int @@ -20902,10 +21374,8 @@ #if defined INT64_MAX #define CONDITION (INT64_MAX == LONG_MAX) - #elif HAVE_LONG_LONG_INT - #define CONDITION (sizeof (long long int) == sizeof (long int)) #else - #define CONDITION 0 + #define CONDITION (sizeof (long long int) == sizeof (long int)) #endif int test[CONDITION ? 1 : -1]; int @@ -20956,10 +21426,8 @@ #if defined UINT32_MAX && defined UINTMAX_MAX #define CONDITION (UINT32_MAX < UINTMAX_MAX) - #elif HAVE_LONG_LONG_INT - #define CONDITION (sizeof (unsigned int) < sizeof (unsigned long long int)) #else - #define CONDITION 0 + #define CONDITION (sizeof (unsigned int) < sizeof (unsigned long long int)) #endif int test[CONDITION ? 1 : -1]; int @@ -21008,10 +21476,8 @@ #if defined UINT64_MAX #define CONDITION (UINT64_MAX == ULONG_MAX) - #elif HAVE_LONG_LONG_INT - #define CONDITION (sizeof (unsigned long long int) == sizeof (unsigned long int)) #else - #define CONDITION 0 + #define CONDITION (sizeof (unsigned long long int) == sizeof (unsigned long int)) #endif int test[CONDITION ? 1 : -1]; int @@ -21038,11 +21504,49 @@ fi - else - UINT64_MAX_EQ_ULONG_MAX=-1 + else + UINT64_MAX_EQ_ULONG_MAX=-1 + fi + + + + + + + + + if test $ac_cv_func_isblank = no; then + HAVE_ISBLANK=0 + fi + + if test $HAVE_ISBLANK = 0; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS isblank.$ac_objext" + fi +cat >>confdefs.h <<_ACEOF +#define GNULIB_ISBLANK 1 +_ACEOF + + + + + + + + GNULIB_ISBLANK=1 + + + @@ -21116,7 +21620,10 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <math.h> - #if __GNUC__ >= 4 + #ifndef __has_builtin + # define __has_builtin(name) 0 + #endif + #if __GNUC__ >= 4 && (!defined __clang__ || __has_builtin (__builtin_isnanl)) # undef isnanl # define isnanl(x) __builtin_isnanl ((long double)(x)) #elif defined isnan @@ -21157,15 +21664,39 @@ else if test "$cross_compiling" = yes; then : + case "$host_os" in + mingw*) # Guess yes on mingw, no on MSVC. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef __MINGW32__ + Known +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "Known" >/dev/null 2>&1; then : gl_cv_func_isnanl_works="guessing yes" else + gl_cv_func_isnanl_works="guessing no" +fi +rm -f conftest* + + ;; + *) gl_cv_func_isnanl_works="guessing yes" ;; + esac + +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <float.h> #include <limits.h> #include <math.h> -#if __GNUC__ >= 4 +#ifndef __has_builtin +# define __has_builtin(name) 0 +#endif +#if __GNUC__ >= 4 && (!defined __clang__ || __has_builtin (__builtin_isnanl)) # undef isnanl # define isnanl(x) __builtin_isnanl ((long double)(x)) #elif defined isnan @@ -21311,7 +21842,7 @@ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the exponent in a 'long double'" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the exponent in a 'long double'" >&5 $as_echo_n "checking where to find the exponent in a 'long double'... " >&6; } if ${gl_cv_cc_long_double_expbit0+:} false; then : $as_echo_n "(cached) " >&6 @@ -21320,6 +21851,39 @@ if test "$cross_compiling" = yes; then : gl_cv_cc_long_double_expbit0="unknown" + case "$host_os" in + mingw*) # On native Windows (little-endian), we know the result + # in two cases: mingw, MSVC. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef __MINGW32__ + Known +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "Known" >/dev/null 2>&1; then : + gl_cv_cc_long_double_expbit0="word 2 bit 0" +fi +rm -f conftest* + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef _MSC_VER + Known +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "Known" >/dev/null 2>&1; then : + gl_cv_cc_long_double_expbit0="word 1 bit 20" +fi +rm -f conftest* + + ;; + esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -21335,14 +21899,14 @@ memory_long_double; static unsigned int ored_words[NWORDS]; static unsigned int anded_words[NWORDS]; -static void add_to_ored_words (long double x) +static void add_to_ored_words (long double *x) { memory_long_double m; size_t i; /* Clear it first, in case sizeof (long double) < sizeof (memory_long_double). */ memset (&m, 0, sizeof (memory_long_double)); - m.value = x; + m.value = *x; for (i = 0; i < NWORDS; i++) { ored_words[i] |= m.word[i]; @@ -21351,17 +21915,15 @@ } int main () { + static long double samples[5] = { 0.25L, 0.5L, 1.0L, 2.0L, 4.0L }; size_t j; FILE *fp = fopen ("conftest.out", "w"); if (fp == NULL) return 1; for (j = 0; j < NWORDS; j++) anded_words[j] = ~ (unsigned int) 0; - add_to_ored_words (0.25L); - add_to_ored_words (0.5L); - add_to_ored_words (1.0L); - add_to_ored_words (2.0L); - add_to_ored_words (4.0L); + for (j = 0; j < 5; j++) + add_to_ored_words (&samples[j]); /* Remove bits that are common (e.g. if representation of the first mantissa bit is explicit). */ for (j = 0; j < NWORDS; j++) @@ -21427,11 +21989,220 @@ fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports the __inline keyword" >&5 +$as_echo_n "checking whether the compiler supports the __inline keyword... " >&6; } +if ${gl_cv_c___inline+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +typedef int foo_t; + static __inline foo_t foo (void) { return 0; } +int +main () +{ +return foo (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_c___inline=yes +else + gl_cv_c___inline=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_c___inline" >&5 +$as_echo "$gl_cv_c___inline" >&6; } + if test $gl_cv_c___inline = yes; then + +$as_echo "#define HAVE___INLINE 1" >>confdefs.h + + fi + + + + + + LOCALCHARSET_TESTS_ENVIRONMENT= + + + + + + + + + + + + case "$host_os" in + solaris*) + +$as_echo "#define _LCONV_C99 1" >>confdefs.h + + ;; + esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether locale.h conforms to POSIX:2001" >&5 +$as_echo_n "checking whether locale.h conforms to POSIX:2001... " >&6; } +if ${gl_cv_header_locale_h_posix2001+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <locale.h> + int x = LC_MESSAGES; + int y = sizeof (((struct lconv *) 0)->decimal_point); +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_header_locale_h_posix2001=yes +else + gl_cv_header_locale_h_posix2001=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_locale_h_posix2001" >&5 +$as_echo "$gl_cv_header_locale_h_posix2001" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct lconv is properly defined" >&5 +$as_echo_n "checking whether struct lconv is properly defined... " >&6; } +if ${gl_cv_sys_struct_lconv_ok+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <locale.h> + struct lconv l; + int x = sizeof (l.decimal_point); + int y = sizeof (l.int_p_cs_precedes); +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_sys_struct_lconv_ok=yes +else + gl_cv_sys_struct_lconv_ok=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_sys_struct_lconv_ok" >&5 +$as_echo "$gl_cv_sys_struct_lconv_ok" >&6; } + if test $gl_cv_sys_struct_lconv_ok = no; then + case "$host_os" in + mingw*) + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef _MSC_VER + Special +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "Special" >/dev/null 2>&1; then : + +else + REPLACE_STRUCT_LCONV=1 +fi +rm -f conftest* + + ;; + *) REPLACE_STRUCT_LCONV=1 ;; + esac + fi + + + + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_locale_h='<'locale.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <locale.h>" >&5 +$as_echo_n "checking absolute name of <locale.h>... " >&6; } +if ${gl_cv_next_locale_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + + + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <locale.h> +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + + case "$host_os" in + mingw*) + gl_dirsep_regex='[/\\]' + ;; + *) + gl_dirsep_regex='\/' + ;; + esac + gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' + gl_header_literal_regex=`echo 'locale.h' \ + | sed -e "$gl_make_literal_regex_sed"` + gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ + s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ + s|^/[^/]|//&| + p + q + }' + + gl_cv_absolute_locale_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n "$gl_absolute_header_sed"` + + gl_header=$gl_cv_absolute_locale_h + gl_cv_next_locale_h='"'$gl_header'"' + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_locale_h" >&5 +$as_echo "$gl_cv_next_locale_h" >&6; } + fi + NEXT_LOCALE_H=$gl_cv_next_locale_h + + if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' + gl_next_as_first_directive='<'locale.h'>' + else + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' + gl_next_as_first_directive=$gl_cv_next_locale_h + fi + NEXT_AS_FIRST_DIRECTIVE_LOCALE_H=$gl_next_as_first_directive + + + + + + - : @@ -21440,22 +22211,192 @@ + gl_LIBOBJS="$gl_LIBOBJS localtime-buffer.$ac_objext" + + + + if test "$gl_threads_api" = posix; then + # OSF/1 4.0 and Mac OS X 10.1 lack the pthread_rwlock_t type and the + # pthread_rwlock_* functions. + has_rwlock=false + ac_fn_c_check_type "$LINENO" "pthread_rwlock_t" "ac_cv_type_pthread_rwlock_t" "#include <pthread.h> +" +if test "x$ac_cv_type_pthread_rwlock_t" = xyes; then : + has_rwlock=true + +$as_echo "#define HAVE_PTHREAD_RWLOCK 1" >>confdefs.h + +fi + + if $has_rwlock; then + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthread_rwlock_rdlock prefers a writer to a reader" >&5 +$as_echo_n "checking whether pthread_rwlock_rdlock prefers a writer to a reader... " >&6; } +if ${gl_cv_pthread_rwlock_rdlock_prefer_writer+:} false; then : + $as_echo_n "(cached) " >&6 +else + save_LIBS="$LIBS" + LIBS="$LIBS $LIBMULTITHREAD" + if test "$cross_compiling" = yes; then : + case "$host_os" in + # Guess no on glibc systems. + *-gnu* | gnu*) gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing no" ;; + # Guess no on musl systems. + *-musl*) gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing no" ;; + # Guess no on bionic systems. + *-android*) gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing no" ;; + # Guess yes on native Windows with the mingw-w64 winpthreads library. + # Guess no on native Windows with the gnulib windows-rwlock module. + mingw*) if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then + gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing yes" + else + gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing no" + fi + ;; + # If we don't know, obey --enable-cross-guesses. + *) gl_cv_pthread_rwlock_rdlock_prefer_writer="$gl_cross_guess_normal" ;; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <errno.h> +#include <pthread.h> +#include <stdlib.h> +#include <unistd.h> + +#define SUCCEED() exit (0) +#define FAILURE() exit (1) +#define UNEXPECTED(n) (exit (10 + (n))) + +/* The main thread creates the waiting writer and the requesting reader threads + in the default way; this guarantees that they have the same priority. + We can reuse the main thread as first reader thread. */ + +static pthread_rwlock_t lock; +static pthread_t reader1; +static pthread_t writer; +static pthread_t reader2; +static pthread_t timer; +/* Used to pass control from writer to reader2 and from reader2 to timer, + as in a relay race. + Passing control from one running thread to another running thread + is most likely faster than to create the second thread. */ +static pthread_mutex_t baton; + +static void * +timer_func (void *ignored) +{ + /* Step 13 (can be before or after step 12): + The timer thread takes the baton, then waits a moment to make sure + it can tell whether the second reader thread is blocked at step 12. */ + if (pthread_mutex_lock (&baton)) + UNEXPECTED (13); + usleep (100000); + /* By the time we get here, it's clear that the second reader thread is + blocked at step 12. This is the desired behaviour. */ + SUCCEED (); +} + +static void * +reader2_func (void *ignored) +{ + int err; + + /* Step 8 (can be before or after step 7): + The second reader thread takes the baton, then waits a moment to make sure + the writer thread has reached step 7. */ + if (pthread_mutex_lock (&baton)) + UNEXPECTED (8); + usleep (100000); + /* Step 9: The second reader thread requests the lock. */ + err = pthread_rwlock_tryrdlock (&lock); + if (err == 0) + FAILURE (); + else if (err != EBUSY) + UNEXPECTED (9); + /* Step 10: Launch a timer, to test whether the next call blocks. */ + if (pthread_create (&timer, NULL, timer_func, NULL)) + UNEXPECTED (10); + /* Step 11: Release the baton. */ + if (pthread_mutex_unlock (&baton)) + UNEXPECTED (11); + /* Step 12: The second reader thread requests the lock. */ + err = pthread_rwlock_rdlock (&lock); + if (err == 0) + FAILURE (); + else + UNEXPECTED (12); +} + +static void * +writer_func (void *ignored) +{ + /* Step 4: Take the baton, so that the second reader thread does not go ahead + too early. */ + if (pthread_mutex_lock (&baton)) + UNEXPECTED (4); + /* Step 5: Create the second reader thread. */ + if (pthread_create (&reader2, NULL, reader2_func, NULL)) + UNEXPECTED (5); + /* Step 6: Release the baton. */ + if (pthread_mutex_unlock (&baton)) + UNEXPECTED (6); + /* Step 7: The writer thread requests the lock. */ + if (pthread_rwlock_wrlock (&lock)) + UNEXPECTED (7); + return NULL; +} - LOCALCHARSET_TESTS_ENVIRONMENT="CHARSETALIASDIR=\"\$(abs_top_builddir)/$gl_source_base\"" +int +main () +{ + reader1 = pthread_self (); + + /* Step 1: The main thread initializes the lock and the baton. */ + if (pthread_rwlock_init (&lock, NULL)) + UNEXPECTED (1); + if (pthread_mutex_init (&baton, NULL)) + UNEXPECTED (1); + /* Step 2: The main thread acquires the lock as a reader. */ + if (pthread_rwlock_rdlock (&lock)) + UNEXPECTED (2); + /* Step 3: Create the writer thread. */ + if (pthread_create (&writer, NULL, writer_func, NULL)) + UNEXPECTED (3); + /* Job done. Go to sleep. */ + for (;;) + { + sleep (1); + } +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_pthread_rwlock_rdlock_prefer_writer=yes +else + gl_cv_pthread_rwlock_rdlock_prefer_writer=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + LIBS="$save_LIBS" - if test "$gl_threads_api" = posix; then - # OSF/1 4.0 and Mac OS X 10.1 lack the pthread_rwlock_t type and the - # pthread_rwlock_* functions. - ac_fn_c_check_type "$LINENO" "pthread_rwlock_t" "ac_cv_type_pthread_rwlock_t" "#include <pthread.h> -" -if test "x$ac_cv_type_pthread_rwlock_t" = xyes; then : +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_pthread_rwlock_rdlock_prefer_writer" >&5 +$as_echo "$gl_cv_pthread_rwlock_rdlock_prefer_writer" >&6; } + case "$gl_cv_pthread_rwlock_rdlock_prefer_writer" in + *yes) -$as_echo "#define HAVE_PTHREAD_RWLOCK 1" >>confdefs.h +$as_echo "#define HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER 1" >>confdefs.h -fi + ;; + esac + fi # glibc defines PTHREAD_MUTEX_RECURSIVE as enum, not as a macro. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -21498,16 +22439,11 @@ - : - - - - if test $ac_cv_func_lstat = yes; then - case "$gl_cv_func_lstat_dereferences_slashed_symlink" in - *no) + case $host_os,$gl_cv_func_lstat_dereferences_slashed_symlink in + solaris* | *no) REPLACE_LSTAT=1 ;; esac @@ -21593,13 +22529,6 @@ - : - - - - - - if test $gl_cv_have_include_next = yes; then @@ -21739,47 +22668,6 @@ fi - for gl_func in acosf acosl asinf asinl atanf atanl cbrt cbrtf cbrtl ceilf ceill copysign copysignf copysignl cosf cosl coshf expf expl exp2 exp2f exp2l expm1 expm1f expm1l fabsf fabsl floorf floorl fma fmaf fmal fmod fmodf fmodl frexpf frexpl hypotf hypotl ilogb ilogbf ilogbl ldexpf ldexpl log logf logl log10 log10f log10l log1p log1pf log1pl log2 log2f log2l logb logbf logbl modf modff modfl powf remainder remainderf remainderl rint rintf rintl round roundf roundl sinf sinl sinhf sqrtf sqrtl tanf tanl tanhf trunc truncf truncl; do - as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh` - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5 -$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; } -if eval \${$as_gl_Symbol+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <math.h> -int -main () -{ -#undef $gl_func - (void) $gl_func; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$as_gl_Symbol=yes" -else - eval "$as_gl_Symbol=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$as_gl_Symbol - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - if eval test \"x\$"$as_gl_Symbol"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1 -_ACEOF - - eval ac_cv_have_decl_$gl_func=yes -fi - done - - - - @@ -21787,20 +22675,21 @@ - : - - : + if case "$host_os" in + mingw*) true ;; + *) test $ac_cv_func_mbsinit = yes ;; + esac \ + && test $ac_cv_func_mbrtowc = yes; then - if test $ac_cv_func_mbsinit = yes && test $ac_cv_func_mbrtowc = yes; then @@ -21844,7 +22733,50 @@ memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) if (mbsinit (&state)) - return 1; + return 2; + } + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_mbrtowc_incomplete_state=yes +else + gl_cv_func_mbrtowc_incomplete_state=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + else + if test $LOCALE_FR_UTF8 != none; then + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <locale.h> +#include <string.h> +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> +int main () +{ + if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) + { + const char input[] = "B\303\274\303\237er"; /* "Büßer" */ + mbstate_t state; + wchar_t wc; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) + if (mbsinit (&state)) + return 2; } return 0; } @@ -21858,6 +22790,7 @@ conftest.$ac_objext conftest.beam conftest.$ac_ext fi + fi fi fi @@ -21911,7 +22844,7 @@ memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 3, 6, &state) != 4 && mbtowc (&wc, input + 3, 6) == 4) - return 1; + return 2; } return 0; } @@ -21946,12 +22879,6 @@ - : - - - - - if test $ac_cv_func_mbrtowc = no; then HAVE_MBRTOWC=0 ac_fn_c_check_decl "$LINENO" "mbrtowc" "ac_cv_have_decl_mbrtowc" " @@ -22104,7 +23031,7 @@ mbrtowc (&wc, NULL, 5, &state); /* Check that wc was not modified. */ if (wc != (wchar_t) 0xBADFACE) - return 1; + return 2; } return 0; } @@ -22259,26 +23186,162 @@ fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_retval" >&5 -$as_echo "$gl_cv_func_mbrtowc_retval" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_retval" >&5 +$as_echo "$gl_cv_func_mbrtowc_retval" >&6; } + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc returns 0 when parsing a NUL character" >&5 +$as_echo_n "checking whether mbrtowc returns 0 when parsing a NUL character... " >&6; } +if ${gl_cv_func_mbrtowc_nul_retval+:} false; then : + $as_echo_n "(cached) " >&6 +else + + case "$host_os" in + # Guess no on Solaris 8 and 9. + solaris2.[89]) gl_cv_func_mbrtowc_nul_retval="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_mbrtowc_nul_retval="guessing yes" ;; + esac + if test $LOCALE_ZH_CN != none; then + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <locale.h> +#include <string.h> +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> +int main () +{ + /* This fails on Solaris 8 and 9. */ + if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) + { + mbstate_t state; + wchar_t wc; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, "", 1, &state) != 0) + return 2; + } + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_mbrtowc_nul_retval=yes +else + gl_cv_func_mbrtowc_nul_retval=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_nul_retval" >&5 +$as_echo "$gl_cv_func_mbrtowc_nul_retval" >&6; } + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc stores incomplete characters" >&5 +$as_echo_n "checking whether mbrtowc stores incomplete characters... " >&6; } +if ${gl_cv_func_mbrtowc_stores_incomplete+:} false; then : + $as_echo_n "(cached) " >&6 +else + + case "$host_os" in + # Guess yes on native Windows. + mingw*) gl_cv_func_mbrtowc_stores_incomplete="guessing yes" ;; + *) gl_cv_func_mbrtowc_stores_incomplete="guessing no" ;; + esac + case "$host_os" in + mingw*) + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <locale.h> +#include <string.h> +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> +int main () +{ + int result = 0; + if (setlocale (LC_ALL, "French_France.65001") != NULL) + { + wchar_t wc = (wchar_t) 0xBADFACE; + mbstate_t state; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, "\303", 1, &state) == (size_t)(-2) + && wc != (wchar_t) 0xBADFACE) + result |= 1; + } + if (setlocale (LC_ALL, "Japanese_Japan.932") != NULL) + { + wchar_t wc = (wchar_t) 0xBADFACE; + mbstate_t state; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, "\226", 1, &state) == (size_t)(-2) + && wc != (wchar_t) 0xBADFACE) + result |= 2; + } + if (setlocale (LC_ALL, "Chinese_Taiwan.950") != NULL) + { + wchar_t wc = (wchar_t) 0xBADFACE; + mbstate_t state; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, "\245", 1, &state) == (size_t)(-2) + && wc != (wchar_t) 0xBADFACE) + result |= 4; + } + if (setlocale (LC_ALL, "Chinese_China.936") != NULL) + { + wchar_t wc = (wchar_t) 0xBADFACE; + mbstate_t state; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, "\261", 1, &state) == (size_t)(-2) + && wc != (wchar_t) 0xBADFACE) + result |= 8; + } + return result; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_mbrtowc_stores_incomplete=no +else + gl_cv_func_mbrtowc_stores_incomplete=yes +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + ;; + *) - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc returns 0 when parsing a NUL character" >&5 -$as_echo_n "checking whether mbrtowc returns 0 when parsing a NUL character... " >&6; } -if ${gl_cv_func_mbrtowc_nul_retval+:} false; then : - $as_echo_n "(cached) " >&6 -else - - case "$host_os" in - # Guess no on Solaris 8 and 9. - solaris2.[89]) gl_cv_func_mbrtowc_nul_retval="guessing no" ;; - # Guess yes otherwise. - *) gl_cv_func_mbrtowc_nul_retval="guessing yes" ;; - esac - if test $LOCALE_ZH_CN != none; then - if test "$cross_compiling" = yes; then : + if test $LOCALE_FR_UTF8 != none; then + if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -22296,33 +23359,35 @@ #include <wchar.h> int main () { - /* This fails on Solaris 8 and 9. */ - if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) + if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) { + wchar_t wc = (wchar_t) 0xBADFACE; mbstate_t state; - wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); - if (mbrtowc (&wc, "", 1, &state) != 0) + if (mbrtowc (&wc, "\303", 1, &state) == (size_t)(-2) + && wc != (wchar_t) 0xBADFACE) return 1; } return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : - gl_cv_func_mbrtowc_nul_retval=yes + gl_cv_func_mbrtowc_stores_incomplete=no else - gl_cv_func_mbrtowc_nul_retval=no + gl_cv_func_mbrtowc_stores_incomplete=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi - fi + fi + ;; + esac fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_nul_retval" >&5 -$as_echo "$gl_cv_func_mbrtowc_nul_retval" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_stores_incomplete" >&5 +$as_echo "$gl_cv_func_mbrtowc_stores_incomplete" >&6; } @@ -22333,10 +23398,11 @@ else case "$host_os" in - # Guess no on AIX and glibc systems. - aix* | *-gnu*) - gl_cv_func_mbrtowc_empty_input="guessing no" ;; - *) gl_cv_func_mbrtowc_empty_input="guessing yes" ;; + # Guess no on AIX and glibc systems. + aix* | *-gnu* | gnu*) gl_cv_func_mbrtowc_empty_input="guessing no" ;; + # Guess yes on native Windows. + mingw*) gl_cv_func_mbrtowc_empty_input="guessing yes" ;; + *) gl_cv_func_mbrtowc_empty_input="guessing yes" ;; esac if test "$cross_compiling" = yes; then : : @@ -22368,120 +23434,356 @@ $as_echo "$gl_cv_func_mbrtowc_empty_input" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C locale is free of encoding errors" >&5 -$as_echo_n "checking whether the C locale is free of encoding errors... " >&6; } -if ${gl_cv_C_locale_sans_EILSEQ+:} false; then : - $as_echo_n "(cached) " >&6 -else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C locale is free of encoding errors" >&5 +$as_echo_n "checking whether the C locale is free of encoding errors... " >&6; } +if ${gl_cv_func_mbrtowc_C_locale_sans_EILSEQ+:} false; then : + $as_echo_n "(cached) " >&6 +else + + gl_cv_func_mbrtowc_C_locale_sans_EILSEQ="$gl_cross_guess_normal" + + if test "$cross_compiling" = yes; then : + case "$host_os" in + # Guess yes on native Windows. + mingw*) gl_cv_func_mbrtowc_C_locale_sans_EILSEQ="guessing yes" ;; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <limits.h> + #include <locale.h> + #include <wchar.h> + +int +main () +{ + + int i; + char *locale = setlocale (LC_ALL, "C"); + if (! locale) + return 2; + for (i = CHAR_MIN; i <= CHAR_MAX; i++) + { + char c = i; + wchar_t wc; + mbstate_t mbs = { 0, }; + size_t ss = mbrtowc (&wc, &c, 1, &mbs); + if (1 < ss) + return 3; + } + return 0; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_mbrtowc_C_locale_sans_EILSEQ=yes +else + gl_cv_func_mbrtowc_C_locale_sans_EILSEQ=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_C_locale_sans_EILSEQ" >&5 +$as_echo "$gl_cv_func_mbrtowc_C_locale_sans_EILSEQ" >&6; } + + case "$gl_cv_func_mbrtowc_null_arg1" in + *yes) ;; + *) +$as_echo "#define MBRTOWC_NULL_ARG1_BUG 1" >>confdefs.h + + REPLACE_MBRTOWC=1 + ;; + esac + case "$gl_cv_func_mbrtowc_null_arg2" in + *yes) ;; + *) +$as_echo "#define MBRTOWC_NULL_ARG2_BUG 1" >>confdefs.h + + REPLACE_MBRTOWC=1 + ;; + esac + case "$gl_cv_func_mbrtowc_retval" in + *yes) ;; + *) +$as_echo "#define MBRTOWC_RETVAL_BUG 1" >>confdefs.h + + REPLACE_MBRTOWC=1 + ;; + esac + case "$gl_cv_func_mbrtowc_nul_retval" in + *yes) ;; + *) +$as_echo "#define MBRTOWC_NUL_RETVAL_BUG 1" >>confdefs.h + + REPLACE_MBRTOWC=1 + ;; + esac + case "$gl_cv_func_mbrtowc_stores_incomplete" in + *no) ;; + *) +$as_echo "#define MBRTOWC_STORES_INCOMPLETE_BUG 1" >>confdefs.h + + REPLACE_MBRTOWC=1 + ;; + esac + case "$gl_cv_func_mbrtowc_empty_input" in + *yes) ;; + *) +$as_echo "#define MBRTOWC_EMPTY_INPUT_BUG 1" >>confdefs.h + + REPLACE_MBRTOWC=1 + ;; + esac + case "$gl_cv_func_mbrtowc_C_locale_sans_EILSEQ" in + *yes) ;; + *) +$as_echo "#define MBRTOWC_IN_C_LOCALE_MAYBE_EILSEQ 1" >>confdefs.h + + REPLACE_MBRTOWC=1 + ;; + esac + fi + fi + if test $REPLACE_MBSTATE_T = 1; then + case "$host_os" in + mingw*) LIB_MBRTOWC= ;; + *) + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether imported symbols can be declared weak" >&5 +$as_echo_n "checking whether imported symbols can be declared weak... " >&6; } +if ${gl_cv_have_weak+:} false; then : + $as_echo_n "(cached) " >&6 +else + gl_cv_have_weak=no + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +extern void xyzzy (); +#pragma weak xyzzy +int +main () +{ +xyzzy(); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + gl_cv_have_weak=maybe +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test $gl_cv_have_weak = maybe; then + if test "$cross_compiling" = yes; then : + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __ELF__ + Extensible Linking Format + #endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "Extensible Linking Format" >/dev/null 2>&1; then : + gl_cv_have_weak="guessing yes" +else + gl_cv_have_weak="guessing no" +fi +rm -f conftest* + + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <stdio.h> +#pragma weak fputs +int main () +{ + return (fputs == NULL); +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_have_weak=yes +else + gl_cv_have_weak=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi + case " $LDFLAGS " in + *" -static "*) gl_cv_have_weak=no ;; + esac + case "$gl_cv_have_weak" in + *yes) + case "$host_os" in + freebsd* | dragonfly*) + : > conftest1.c + $CC $CPPFLAGS $CFLAGS $LDFLAGS -fPIC -shared -o libempty.so conftest1.c -lpthread >&5 2>&1 + cat <<EOF > conftest2.c +#include <pthread.h> +#pragma weak pthread_mutexattr_gettype +int main () +{ + return (pthread_mutexattr_gettype != NULL); +} +EOF + $CC $CPPFLAGS $CFLAGS $LDFLAGS -o conftest conftest2.c libempty.so >&5 2>&1 \ + || gl_cv_have_weak=no + rm -f conftest1.c libempty.so conftest2.c conftest + ;; + esac + ;; + esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_have_weak" >&5 +$as_echo "$gl_cv_have_weak" >&6; } + case "$gl_cv_have_weak" in + *yes) + +$as_echo "#define HAVE_WEAK_SYMBOLS 1" >>confdefs.h + + ;; + esac + + case "$gl_cv_have_weak" in + *yes) LIB_MBRTOWC= ;; + *) LIB_MBRTOWC="$LIBPTHREAD" ;; + esac + ;; + esac + else + LIB_MBRTOWC= + fi + + + if test $HAVE_MBRTOWC = 0 || test $REPLACE_MBRTOWC = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS mbrtowc.$ac_objext" + + if test $REPLACE_MBSTATE_T = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS lc-charset-dispatch.$ac_objext" + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS mbtowc-lock.$ac_objext" + + - gl_cv_C_locale_sans_EILSEQ="guessing no" - if test "$cross_compiling" = yes; then : - : + CFLAG_VISIBILITY= + HAVE_VISIBILITY=0 + if test -n "$GCC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the -Werror option is usable" >&5 +$as_echo_n "checking whether the -Werror option is usable... " >&6; } +if ${gl_cv_cc_vis_werror+:} false; then : + $as_echo_n "(cached) " >&6 else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + gl_save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -Werror" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include <limits.h> - #include <locale.h> - #include <wchar.h> int main () { - int i; - char *locale = setlocale (LC_ALL, "C"); - if (! locale) - return 1; - for (i = CHAR_MIN; i <= CHAR_MAX; i++) - { - char c = i; - wchar_t wc; - mbstate_t mbs = { 0, }; - size_t ss = mbrtowc (&wc, &c, 1, &mbs); - if (1 < ss) - return 1; - } - return 0; - ; return 0; } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : - gl_cv_C_locale_sans_EILSEQ=yes +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_cc_vis_werror=yes else - gl_cv_C_locale_sans_EILSEQ=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext + gl_cv_cc_vis_werror=no fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CFLAGS="$gl_save_CFLAGS" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_C_locale_sans_EILSEQ" >&5 -$as_echo "$gl_cv_C_locale_sans_EILSEQ" >&6; } - - case "$gl_cv_func_mbrtowc_null_arg1" in - *yes) ;; - *) -$as_echo "#define MBRTOWC_NULL_ARG1_BUG 1" >>confdefs.h - - REPLACE_MBRTOWC=1 - ;; - esac - case "$gl_cv_func_mbrtowc_null_arg2" in - *yes) ;; - *) -$as_echo "#define MBRTOWC_NULL_ARG2_BUG 1" >>confdefs.h - - REPLACE_MBRTOWC=1 - ;; - esac - case "$gl_cv_func_mbrtowc_retval" in - *yes) ;; - *) -$as_echo "#define MBRTOWC_RETVAL_BUG 1" >>confdefs.h - - REPLACE_MBRTOWC=1 - ;; - esac - case "$gl_cv_func_mbrtowc_nul_retval" in - *yes) ;; - *) -$as_echo "#define MBRTOWC_NUL_RETVAL_BUG 1" >>confdefs.h +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_vis_werror" >&5 +$as_echo "$gl_cv_cc_vis_werror" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for simple visibility declarations" >&5 +$as_echo_n "checking for simple visibility declarations... " >&6; } +if ${gl_cv_cc_visibility+:} false; then : + $as_echo_n "(cached) " >&6 +else + gl_save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -fvisibility=hidden" + if test $gl_cv_cc_vis_werror = yes; then + CFLAGS="$CFLAGS -Werror" + fi + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +extern __attribute__((__visibility__("hidden"))) int hiddenvar; + extern __attribute__((__visibility__("default"))) int exportedvar; + extern __attribute__((__visibility__("hidden"))) int hiddenfunc (void); + extern __attribute__((__visibility__("default"))) int exportedfunc (void); + void dummyfunc (void) {} - REPLACE_MBRTOWC=1 - ;; - esac - case "$gl_cv_func_mbrtowc_empty_input" in - *yes) ;; - *) -$as_echo "#define MBRTOWC_EMPTY_INPUT_BUG 1" >>confdefs.h +int +main () +{ - REPLACE_MBRTOWC=1 - ;; - esac - case $gl_cv_C_locale_sans_EILSEQ in - *yes) ;; - *) -$as_echo "#define C_LOCALE_MAYBE_EILSEQ 1" >>confdefs.h + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_cc_visibility=yes +else + gl_cv_cc_visibility=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CFLAGS="$gl_save_CFLAGS" - REPLACE_MBRTOWC=1 - ;; - esac +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_visibility" >&5 +$as_echo "$gl_cv_cc_visibility" >&6; } + if test $gl_cv_cc_visibility = yes; then + CFLAG_VISIBILITY="-fvisibility=hidden" + HAVE_VISIBILITY=1 fi fi - if test $HAVE_MBRTOWC = 0 || test $REPLACE_MBRTOWC = 1; then - - - +cat >>confdefs.h <<_ACEOF +#define HAVE_VISIBILITY $HAVE_VISIBILITY +_ACEOF - gl_LIBOBJS="$gl_LIBOBJS mbrtowc.$ac_objext" + fi : @@ -22512,21 +23814,15 @@ - : - - - - - - - : - + if case "$host_os" in + mingw*) true ;; + *) test $ac_cv_func_mbsinit = yes ;; + esac \ + && test $ac_cv_func_mbrtowc = yes; then - if test $ac_cv_func_mbsinit = yes && test $ac_cv_func_mbrtowc = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc handles incomplete characters" >&5 @@ -22569,7 +23865,50 @@ memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) if (mbsinit (&state)) - return 1; + return 2; + } + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_mbrtowc_incomplete_state=yes +else + gl_cv_func_mbrtowc_incomplete_state=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + else + if test $LOCALE_FR_UTF8 != none; then + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <locale.h> +#include <string.h> +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> +int main () +{ + if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) + { + const char input[] = "B\303\274\303\237er"; /* "Büßer" */ + mbstate_t state; + wchar_t wc; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) + if (mbsinit (&state)) + return 2; } return 0; } @@ -22583,6 +23922,7 @@ conftest.$ac_objext conftest.beam conftest.$ac_ext fi + fi fi fi @@ -22636,7 +23976,7 @@ memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 3, 6, &state) != 4 && mbtowc (&wc, input + 3, 6) == 4) - return 1; + return 2; } return 0; } @@ -22671,12 +24011,6 @@ - : - - - - - if test $ac_cv_func_mbsinit = no; then HAVE_MBSINIT=0 ac_fn_c_check_decl "$LINENO" "mbsinit" "ac_cv_have_decl_mbsinit" " @@ -22752,21 +24086,15 @@ - : - - - - - - - : - + if case "$host_os" in + mingw*) true ;; + *) test $ac_cv_func_mbsinit = yes ;; + esac \ + && test $ac_cv_func_mbrtowc = yes; then - if test $ac_cv_func_mbsinit = yes && test $ac_cv_func_mbrtowc = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc handles incomplete characters" >&5 @@ -22809,7 +24137,50 @@ memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) if (mbsinit (&state)) - return 1; + return 2; + } + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_mbrtowc_incomplete_state=yes +else + gl_cv_func_mbrtowc_incomplete_state=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + else + if test $LOCALE_FR_UTF8 != none; then + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <locale.h> +#include <string.h> +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> +int main () +{ + if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) + { + const char input[] = "B\303\274\303\237er"; /* "Büßer" */ + mbstate_t state; + wchar_t wc; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) + if (mbsinit (&state)) + return 2; } return 0; } @@ -22823,6 +24194,7 @@ conftest.$ac_objext conftest.beam conftest.$ac_ext fi + fi fi fi @@ -22876,7 +24248,7 @@ memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 3, 6, &state) != 4 && mbtowc (&wc, input + 3, 6) == 4) - return 1; + return 2; } return 0; } @@ -22911,12 +24283,6 @@ - : - - - - - if test $ac_cv_func_mbsrtowcs = no; then HAVE_MBSRTOWCS=0 ac_fn_c_check_decl "$LINENO" "mbsrtowcs" "ac_cv_have_decl_mbsrtowcs" " @@ -23054,31 +24420,82 @@ conftest.$ac_objext conftest.beam conftest.$ac_ext fi - fi + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbsrtowcs_works" >&5 +$as_echo "$gl_cv_func_mbsrtowcs_works" >&6; } + + case "$gl_cv_func_mbsrtowcs_works" in + *yes) ;; + *) REPLACE_MBSRTOWCS=1 ;; + esac + fi + fi + + if test $HAVE_MBSRTOWCS = 0 || test $REPLACE_MBSRTOWCS = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS mbsrtowcs.$ac_objext" + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS mbsrtowcs-state.$ac_objext" + + + : + + fi + -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbsrtowcs_works" >&5 -$as_echo "$gl_cv_func_mbsrtowcs_works" >&6; } - case "$gl_cv_func_mbsrtowcs_works" in - *yes) ;; - *) REPLACE_MBSRTOWCS=1 ;; - esac - fi - fi - if test $HAVE_MBSRTOWCS = 0 || test $REPLACE_MBSRTOWCS = 1; then + + GNULIB_MBSRTOWCS=1 + +$as_echo "#define GNULIB_TEST_MBSRTOWCS 1" >>confdefs.h - gl_LIBOBJS="$gl_LIBOBJS mbsrtowcs.$ac_objext" + for ac_func in mbtowc +do : + ac_fn_c_check_func "$LINENO" "mbtowc" "ac_cv_func_mbtowc" +if test "x$ac_cv_func_mbtowc" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_MBTOWC 1 +_ACEOF + +fi +done + + if test $ac_cv_func_mbtowc = no; then + HAVE_MBTOWC=0 + else + if false; then + REPLACE_MBTOWC=1 + fi + fi + + if test $HAVE_MBTOWC = 0 || test $REPLACE_MBTOWC = 1; then @@ -23086,7 +24503,8 @@ - gl_LIBOBJS="$gl_LIBOBJS mbsrtowcs-state.$ac_objext" + + gl_LIBOBJS="$gl_LIBOBJS mbtowc.$ac_objext" : @@ -23097,13 +24515,13 @@ - GNULIB_MBSRTOWCS=1 + GNULIB_MBTOWC=1 -$as_echo "#define GNULIB_TEST_MBSRTOWCS 1" >>confdefs.h +$as_echo "#define GNULIB_TEST_MBTOWC 1" >>confdefs.h @@ -23180,7 +24598,7 @@ $EGREP "Lucky user" >/dev/null 2>&1; then : gl_cv_func_memmem_works_fast="guessing yes" else - gl_cv_func_memmem_works_fast="guessing no" + gl_cv_func_memmem_works_fast="$gl_cross_guess_normal" fi rm -f conftest* @@ -23217,6 +24635,9 @@ if (!memmem (haystack, 2 * m + 1, needle, m + 1)) result |= 1; } + /* Free allocated memory, in case some sanitizer is watching. */ + free (haystack); + free (needle); return result; ; @@ -23277,12 +24698,6 @@ HAVE_MEMMEM=0 fi - : - - - - - if test $ac_cv_have_decl_memmem = no; then HAVE_DECL_MEMMEM=0 else @@ -23317,7 +24732,7 @@ $EGREP "Lucky user" >/dev/null 2>&1; then : gl_cv_func_memmem_works_always="guessing yes" else - gl_cv_func_memmem_works_always="guessing no" + gl_cv_func_memmem_works_always="$gl_cross_guess_normal" fi rm -f conftest* @@ -23341,7 +24756,7 @@ /* Check for empty needle behavior. */ { const char *haystack = "AAA"; - if (memmem (haystack, 3, NULL, 0) != haystack) + if (memmem (haystack, 3, (const char *) 1, 0) != haystack) result |= 2; } return result; @@ -23455,12 +24870,6 @@ - : - - - - - if test $ac_cv_have_decl_memrchr = no; then HAVE_DECL_MEMRCHR=0 fi @@ -23507,9 +24916,6 @@ - : - - @@ -23521,10 +24927,30 @@ rm -rf conftest.dir if test "$cross_compiling" = yes; then : case "$host_os" in - # Guess yes on glibc systems. - *-gnu*) gl_cv_func_mkdir_trailing_slash_works="guessing yes" ;; - # If we don't know, assume the worst. - *) gl_cv_func_mkdir_trailing_slash_works="guessing no" ;; + # Guess yes on Linux systems. + linux-* | linux) gl_cv_func_mkdir_trailing_slash_works="guessing yes" ;; + # Guess yes on glibc systems. + *-gnu* | gnu*) gl_cv_func_mkdir_trailing_slash_works="guessing yes" ;; + # Guess yes on MSVC, no on mingw. + mingw*) cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef _MSC_VER + Known +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "Known" >/dev/null 2>&1; then : + gl_cv_func_mkdir_trailing_slash_works="guessing yes" +else + gl_cv_func_mkdir_trailing_slash_works="guessing no" +fi +rm -f conftest* + + ;; + # If we don't know, obey --enable-cross-guesses. + *) gl_cv_func_mkdir_trailing_slash_works="$gl_cross_guess_normal" ;; esac else @@ -23572,10 +24998,14 @@ rm -rf conftest.dir if test "$cross_compiling" = yes; then : case "$host_os" in - # Guess yes on glibc systems. - *-gnu*) gl_cv_func_mkdir_trailing_dot_works="guessing yes" ;; - # If we don't know, assume the worst. - *) gl_cv_func_mkdir_trailing_dot_works="guessing no" ;; + # Guess yes on glibc systems. + *-gnu* | gnu*) gl_cv_func_mkdir_trailing_dot_works="guessing yes" ;; + # Guess yes on musl systems. + *-musl*) gl_cv_func_mkdir_trailing_dot_works="guessing yes" ;; + # Guess no on native Windows. + mingw*) gl_cv_func_mkdir_trailing_dot_works="guessing no" ;; + # If we don't know, obey --enable-cross-guesses. + *) gl_cv_func_mkdir_trailing_dot_works="$gl_cross_guess_normal" ;; esac else @@ -23682,12 +25112,6 @@ - : - - - - - if test $ac_cv_func_mkostemp != yes; then HAVE_MKOSTEMP=0 fi @@ -23756,6 +25180,13 @@ fi +cat >>confdefs.h <<_ACEOF +#define GNULIB_MSVC_NOTHROW 1 +_ACEOF + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether <netinet/in.h> is self-contained" >&5 $as_echo_n "checking whether <netinet/in.h> is self-contained... " >&6; } if ${gl_cv_header_netinet_in_h_selfcontained+:} false; then : @@ -23805,12 +25236,6 @@ - : - - - - - @@ -23903,36 +25328,36 @@ + case "$host_os" in mingw* | pw*) REPLACE_OPEN=1 ;; *) - : - - - + if test "$gl_cv_macro_O_CLOEXEC" != yes; then + REPLACE_OPEN=1 + fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether open recognizes a trailing slash" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether open recognizes a trailing slash" >&5 $as_echo_n "checking whether open recognizes a trailing slash... " >&6; } if ${gl_cv_func_open_slash+:} false; then : $as_echo_n "(cached) " >&6 else # Assume that if we have lstat, we can also check symlinks. - if test $ac_cv_func_lstat = yes; then - touch conftest.tmp - ln -s conftest.tmp conftest.lnk - fi - if test "$cross_compiling" = yes; then : + if test $ac_cv_func_lstat = yes; then + touch conftest.tmp + ln -s conftest.tmp conftest.lnk + fi + if test "$cross_compiling" = yes; then : - case "$host_os" in - freebsd* | aix* | hpux* | solaris2.[0-9] | solaris2.[0-9].*) - gl_cv_func_open_slash="guessing no" ;; - *) - gl_cv_func_open_slash="guessing yes" ;; - esac + case "$host_os" in + freebsd* | aix* | hpux* | solaris2.[0-9] | solaris2.[0-9].*) + gl_cv_func_open_slash="guessing no" ;; + *) + gl_cv_func_open_slash="guessing yes" ;; + esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -23963,16 +25388,21 @@ conftest.$ac_objext conftest.beam conftest.$ac_ext fi - rm -f conftest.sl conftest.tmp conftest.lnk + rm -f conftest.sl conftest.tmp conftest.lnk fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_open_slash" >&5 $as_echo "$gl_cv_func_open_slash" >&6; } - case "$gl_cv_func_open_slash" in - *no) + case "$gl_cv_func_open_slash" in + *no) $as_echo "#define OPEN_TRAILING_SLASH_BUG 1" >>confdefs.h + ;; + esac + + case "$gl_cv_func_open_slash" in + *no) REPLACE_OPEN=1 ;; esac @@ -23983,12 +25413,6 @@ - : - - - - - if test $ac_cv_func_fchdir = no; then HAVE_FCHDIR=0 fi @@ -24035,17 +25459,13 @@ - : - - - - - case $ac_cv_func_openat+$gl_cv_func_lstat_dereferences_slashed_symlink in - yes+*yes) + case $ac_cv_func_openat+$gl_cv_func_lstat_dereferences_slashed_symlink+$gl_cv_macro_O_CLOEXEC in + yes+*yes+yes) ;; yes+*) + # Solaris 10 lacks O_CLOEXEC. # Solaris 9 has *at functions, but uniformly mishandles trailing # slash in all of them. REPLACE_OPENAT=1 @@ -24113,12 +25533,6 @@ - : - - - - - if test $ac_cv_func_fchdir = no; then HAVE_FCHDIR=0 fi @@ -24163,12 +25577,6 @@ - : - - - - - @@ -24265,12 +25673,6 @@ - : - - - - - if test $ac_cv_func_readlink = no; then HAVE_READLINK=0 else @@ -24311,10 +25713,12 @@ ln -s conftest.link conftest.lnk2 if test "$cross_compiling" = yes; then : case "$host_os" in - # Guess yes on glibc systems. - *-gnu*) gl_cv_func_readlink_works="guessing yes" ;; - # If we don't know, assume the worst. - *) gl_cv_func_readlink_works="guessing no" ;; + # Guess yes on Linux systems. + linux-* | linux) gl_cv_func_readlink_works="guessing yes" ;; + # Guess yes on glibc systems. + *-gnu* | gnu*) gl_cv_func_readlink_works="guessing yes" ;; + # If we don't know, obey --enable-cross-guesses. + *) gl_cv_func_readlink_works="$gl_cross_guess_normal" ;; esac else @@ -24431,12 +25835,6 @@ - : - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether rename honors trailing slash on destination" >&5 $as_echo_n "checking whether rename honors trailing slash on destination... " >&6; } @@ -24452,10 +25850,14 @@ fi if test "$cross_compiling" = yes; then : case "$host_os" in - # Guess yes on glibc systems. - *-gnu*) gl_cv_func_rename_slash_dst_works="guessing yes" ;; - # If we don't know, assume the worst. - *) gl_cv_func_rename_slash_dst_works="guessing no" ;; + # Guess yes on Linux systems. + linux-* | linux) gl_cv_func_rename_slash_dst_works="guessing yes" ;; + # Guess yes on glibc systems. + *-gnu*) gl_cv_func_rename_slash_dst_works="guessing yes" ;; + # Guess no on native Windows. + mingw*) gl_cv_func_rename_slash_dst_works="guessing no" ;; + # If we don't know, obey --enable-cross-guesses. + *) gl_cv_func_rename_slash_dst_works="$gl_cross_guess_normal" ;; esac else @@ -24521,10 +25923,14 @@ fi if test "$cross_compiling" = yes; then : case "$host_os" in - # Guess yes on glibc systems. - *-gnu*) gl_cv_func_rename_slash_src_works="guessing yes" ;; - # If we don't know, assume the worst. - *) gl_cv_func_rename_slash_src_works="guessing no" ;; + # Guess yes on Linux systems. + linux-* | linux) gl_cv_func_rename_slash_src_works="guessing yes" ;; + # Guess yes on glibc systems. + *-gnu*) gl_cv_func_rename_slash_src_works="guessing yes" ;; + # Guess yes on native Windows. + mingw*) gl_cv_func_rename_slash_src_works="guessing yes" ;; + # If we don't know, obey --enable-cross-guesses. + *) gl_cv_func_rename_slash_src_works="$gl_cross_guess_normal" ;; esac else @@ -24577,50 +25983,49 @@ esac - : - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether rename manages hard links correctly" >&5 $as_echo_n "checking whether rename manages hard links correctly... " >&6; } if ${gl_cv_func_rename_link_works+:} false; then : $as_echo_n "(cached) " >&6 else if test $ac_cv_func_link = yes; then - rm -rf conftest.f conftest.f1 - if touch conftest.f && ln conftest.f conftest.f1 && - set x `ls -i conftest.f conftest.f1` && test "" = ""; then - if test "$cross_compiling" = yes; then : - case "$host_os" in - # Guess yes on glibc systems. - *-gnu*) gl_cv_func_rename_link_works="guessing yes" ;; - # If we don't know, assume the worst. - *) gl_cv_func_rename_link_works="guessing no" ;; - esac + if test $cross_compiling != yes; then + rm -rf conftest.f conftest.f1 conftest.f2 + if touch conftest.f conftest.f2 && ln conftest.f conftest.f1 && + set x `ls -i conftest.f conftest.f1` && test "" = ""; then + if test "$cross_compiling" = yes; then : + : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -# include <stdio.h> -# include <stdlib.h> -# include <unistd.h> +# include <errno.h> +# include <stdio.h> +# include <stdlib.h> +# include <unistd.h> int main () { int result = 0; - if (rename ("conftest.f", "conftest.f1")) - result |= 1; - if (unlink ("conftest.f1")) - result |= 2; - if (rename ("conftest.f", "conftest.f")) - result |= 4; - if (rename ("conftest.f1", "conftest.f1") == 0) - result |= 8; - return result; + if (rename ("conftest.f", "conftest.f1")) + result |= 1; + if (unlink ("conftest.f1")) + result |= 2; + + /* Allow either the POSIX-required behavior, where the + previous rename kept conftest.f, or the (better) NetBSD + behavior, where it removed conftest.f. */ + if (rename ("conftest.f", "conftest.f") != 0 + && errno != ENOENT) + result |= 4; + + if (rename ("conftest.f1", "conftest.f1") == 0) + result |= 8; + if (rename ("conftest.f2", "conftest.f2") != 0) + result |= 16; + return result; ; return 0; @@ -24635,10 +26040,22 @@ conftest.$ac_objext conftest.beam conftest.$ac_ext fi + else + gl_cv_func_rename_link_works="guessing no" + fi + rm -rf conftest.f conftest.f1 conftest.f2 else - gl_cv_func_rename_link_works="guessing no" + case "$host_os" in + # Guess yes on Linux systems. + linux-* | linux) gl_cv_func_rename_link_works="guessing yes" ;; + # Guess yes on glibc systems. + *-gnu*) gl_cv_func_rename_link_works="guessing yes" ;; + # Guess yes on native Windows. + mingw*) gl_cv_func_rename_link_works="guessing yes" ;; + # If we don't know, obey --enable-cross-guesses. + *) gl_cv_func_rename_link_works="$gl_cross_guess_normal" ;; + esac fi - rm -rf conftest.f conftest.f1 else gl_cv_func_rename_link_works=yes fi @@ -24666,10 +26083,14 @@ as_fn_error $? "cannot create temporary files" "$LINENO" 5 if test "$cross_compiling" = yes; then : case "$host_os" in - # Guess yes on glibc systems. - *-gnu*) gl_cv_func_rename_dest_works="guessing yes" ;; - # If we don't know, assume the worst. - *) gl_cv_func_rename_dest_works="guessing no" ;; + # Guess yes on Linux systems. + linux-* | linux) gl_cv_func_rename_dest_works="guessing yes" ;; + # Guess yes on glibc systems. + *-gnu*) gl_cv_func_rename_dest_works="guessing yes" ;; + # Guess no on native Windows. + mingw*) gl_cv_func_rename_dest_works="guessing no" ;; + # If we don't know, obey --enable-cross-guesses. + *) gl_cv_func_rename_dest_works="$gl_cross_guess_normal" ;; esac else @@ -24792,12 +26213,6 @@ - : - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether rmdir works" >&5 $as_echo_n "checking whether rmdir works... " >&6; } if ${gl_cv_func_rmdir_works+:} false; then : @@ -24807,10 +26222,14 @@ touch conftest.file if test "$cross_compiling" = yes; then : case "$host_os" in - # Guess yes on glibc systems. - *-gnu*) gl_cv_func_rmdir_works="guessing yes" ;; - # If we don't know, assume the worst. - *) gl_cv_func_rmdir_works="guessing no" ;; + # Guess yes on Linux systems. + linux-* | linux) gl_cv_func_rmdir_works="guessing yes" ;; + # Guess yes on glibc systems. + *-gnu* | gnu*) gl_cv_func_rmdir_works="guessing yes" ;; + # Guess no on native Windows. + mingw*) gl_cv_func_rmdir_works="guessing no" ;; + # If we don't know, obey --enable-cross-guesses. + *) gl_cv_func_rmdir_works="$gl_cross_guess_normal" ;; esac else @@ -24843,115 +26262,24 @@ if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_rmdir_works=yes else - gl_cv_func_rmdir_works=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - rm -rf conftest.dir conftest.file -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_rmdir_works" >&5 -$as_echo "$gl_cv_func_rmdir_works" >&6; } - case "$gl_cv_func_rmdir_works" in - *yes) ;; - *) - REPLACE_RMDIR=1 - ;; - esac - - if test $REPLACE_RMDIR = 1; then - - - - - - - - - gl_LIBOBJS="$gl_LIBOBJS rmdir.$ac_objext" - - fi - - - - - - GNULIB_RMDIR=1 - - - - - -$as_echo "#define GNULIB_TEST_RMDIR 1" >>confdefs.h - - - - - - : - - - - - - - - - - - - : - - - - - - if test $ac_cv_func_secure_getenv = no; then - HAVE_SECURE_GETENV=0 - fi - - if test $HAVE_SECURE_GETENV = 0; then - - - - - - - - - gl_LIBOBJS="$gl_LIBOBJS secure_getenv.$ac_objext" - - - for ac_func in __secure_getenv -do : - ac_fn_c_check_func "$LINENO" "__secure_getenv" "ac_cv_func___secure_getenv" -if test "x$ac_cv_func___secure_getenv" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE___SECURE_GETENV 1 -_ACEOF - -fi -done - - if test $ac_cv_func___secure_getenv = no; then - for ac_func in issetugid -do : - ac_fn_c_check_func "$LINENO" "issetugid" "ac_cv_func_issetugid" -if test "x$ac_cv_func_issetugid" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_ISSETUGID 1 -_ACEOF - -fi -done - - fi - - : - + gl_cv_func_rmdir_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + rm -rf conftest.dir conftest.file +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_rmdir_works" >&5 +$as_echo "$gl_cv_func_rmdir_works" >&6; } + case "$gl_cv_func_rmdir_works" in + *yes) ;; + *) + REPLACE_RMDIR=1 + ;; + esac + if test $REPLACE_RMDIR = 1; then @@ -24960,23 +26288,24 @@ + gl_LIBOBJS="$gl_LIBOBJS rmdir.$ac_objext" + fi - fi + GNULIB_RMDIR=1 - GNULIB_SECURE_GETENV=1 +$as_echo "#define GNULIB_TEST_RMDIR 1" >>confdefs.h -$as_echo "#define GNULIB_TEST_SECURE_GETENV 1" >>confdefs.h @@ -24992,10 +26321,12 @@ else if test "$cross_compiling" = yes; then : case "$host_os" in - # Guess yes on glibc systems. - *-gnu*) gl_cv_func_setenv_works="guessing yes" ;; - # If we don't know, assume the worst. - *) gl_cv_func_setenv_works="guessing no" ;; + # Guess yes on glibc systems. + *-gnu* | gnu*) gl_cv_func_setenv_works="guessing yes" ;; + # Guess yes on musl systems. + *-musl*) gl_cv_func_setenv_works="guessing yes" ;; + # If we don't know, obey --enable-cross-guesses. + *) gl_cv_func_setenv_works="$gl_cross_guess_normal" ;; esac else @@ -25081,6 +26412,315 @@ + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether setlocale (LC_ALL, NULL) is multithread-safe" >&5 +$as_echo_n "checking whether setlocale (LC_ALL, NULL) is multithread-safe... " >&6; } +if ${gl_cv_func_setlocale_null_all_mtsafe+:} false; then : + $as_echo_n "(cached) " >&6 +else + case "$host_os" in + # Guess no on musl libc, macOS, FreeBSD, NetBSD, OpenBSD, AIX, Haiku, Cygwin. + *-musl* | darwin* | freebsd* | netbsd* | openbsd* | aix* | haiku* | cygwin*) + gl_cv_func_setlocale_null_all_mtsafe=no ;; + # Guess yes on glibc, HP-UX, IRIX, Solaris, native Windows. + *-gnu* | gnu* | hpux* | irix* | solaris* | mingw*) + gl_cv_func_setlocale_null_all_mtsafe=yes ;; + # If we don't know, obey --enable-cross-guesses. + *) + gl_cv_func_setlocale_null_all_mtsafe="$gl_cross_guess_normal" ;; + esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_setlocale_null_all_mtsafe" >&5 +$as_echo "$gl_cv_func_setlocale_null_all_mtsafe" >&6; } + case "$host_os" in + mingw*) ;; + *) + if test $gl_pthread_api = no && test $ac_cv_header_threads_h = no; then + gl_cv_func_setlocale_null_all_mtsafe="trivially yes" + fi + ;; + esac + case "$gl_cv_func_setlocale_null_all_mtsafe" in + *yes) SETLOCALE_NULL_ALL_MTSAFE=1 ;; + *) SETLOCALE_NULL_ALL_MTSAFE=0 ;; + esac + +cat >>confdefs.h <<_ACEOF +#define SETLOCALE_NULL_ALL_MTSAFE $SETLOCALE_NULL_ALL_MTSAFE +_ACEOF + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether setlocale (category, NULL) is multithread-safe" >&5 +$as_echo_n "checking whether setlocale (category, NULL) is multithread-safe... " >&6; } +if ${gl_cv_func_setlocale_null_one_mtsafe+:} false; then : + $as_echo_n "(cached) " >&6 +else + case "$host_os" in + # Guess no on OpenBSD, AIX. + openbsd* | aix*) + gl_cv_func_setlocale_null_one_mtsafe=no ;; + # Guess yes on glibc, musl libc, macOS, FreeBSD, NetBSD, HP-UX, IRIX, Solaris, Haiku, Cygwin, native Windows. + *-gnu* | gnu* | *-musl* | darwin* | freebsd* | netbsd* | hpux* | irix* | solaris* | haiku* | cygwin* | mingw*) + gl_cv_func_setlocale_null_one_mtsafe=yes ;; + # If we don't know, obey --enable-cross-guesses. + *) + gl_cv_func_setlocale_null_one_mtsafe="$gl_cross_guess_normal" ;; + esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_setlocale_null_one_mtsafe" >&5 +$as_echo "$gl_cv_func_setlocale_null_one_mtsafe" >&6; } + case "$host_os" in + mingw*) ;; + *) + if test $gl_pthread_api = no && test $ac_cv_header_threads_h = no; then + gl_cv_func_setlocale_null_one_mtsafe="trivially yes" + fi + ;; + esac + case "$gl_cv_func_setlocale_null_one_mtsafe" in + *yes) SETLOCALE_NULL_ONE_MTSAFE=1 ;; + *) SETLOCALE_NULL_ONE_MTSAFE=0 ;; + esac + +cat >>confdefs.h <<_ACEOF +#define SETLOCALE_NULL_ONE_MTSAFE $SETLOCALE_NULL_ONE_MTSAFE +_ACEOF + + + if test $SETLOCALE_NULL_ALL_MTSAFE = 0 || test $SETLOCALE_NULL_ONE_MTSAFE = 0; then + case "$host_os" in + mingw*) LIB_SETLOCALE_NULL= ;; + *) + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether imported symbols can be declared weak" >&5 +$as_echo_n "checking whether imported symbols can be declared weak... " >&6; } +if ${gl_cv_have_weak+:} false; then : + $as_echo_n "(cached) " >&6 +else + gl_cv_have_weak=no + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +extern void xyzzy (); +#pragma weak xyzzy +int +main () +{ +xyzzy(); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + gl_cv_have_weak=maybe +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test $gl_cv_have_weak = maybe; then + if test "$cross_compiling" = yes; then : + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __ELF__ + Extensible Linking Format + #endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "Extensible Linking Format" >/dev/null 2>&1; then : + gl_cv_have_weak="guessing yes" +else + gl_cv_have_weak="guessing no" +fi +rm -f conftest* + + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <stdio.h> +#pragma weak fputs +int main () +{ + return (fputs == NULL); +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_have_weak=yes +else + gl_cv_have_weak=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi + case " $LDFLAGS " in + *" -static "*) gl_cv_have_weak=no ;; + esac + case "$gl_cv_have_weak" in + *yes) + case "$host_os" in + freebsd* | dragonfly*) + : > conftest1.c + $CC $CPPFLAGS $CFLAGS $LDFLAGS -fPIC -shared -o libempty.so conftest1.c -lpthread >&5 2>&1 + cat <<EOF > conftest2.c +#include <pthread.h> +#pragma weak pthread_mutexattr_gettype +int main () +{ + return (pthread_mutexattr_gettype != NULL); +} +EOF + $CC $CPPFLAGS $CFLAGS $LDFLAGS -o conftest conftest2.c libempty.so >&5 2>&1 \ + || gl_cv_have_weak=no + rm -f conftest1.c libempty.so conftest2.c conftest + ;; + esac + ;; + esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_have_weak" >&5 +$as_echo "$gl_cv_have_weak" >&6; } + case "$gl_cv_have_weak" in + *yes) + +$as_echo "#define HAVE_WEAK_SYMBOLS 1" >>confdefs.h + + ;; + esac + + case "$gl_cv_have_weak" in + *yes) LIB_SETLOCALE_NULL= ;; + *) LIB_SETLOCALE_NULL="$LIBPTHREAD" ;; + esac + ;; + esac + else + LIB_SETLOCALE_NULL= + fi + + + if test $SETLOCALE_NULL_ALL_MTSAFE = 0 || test $SETLOCALE_NULL_ONE_MTSAFE = 0; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS setlocale-lock.$ac_objext" + + + + + CFLAG_VISIBILITY= + HAVE_VISIBILITY=0 + if test -n "$GCC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the -Werror option is usable" >&5 +$as_echo_n "checking whether the -Werror option is usable... " >&6; } +if ${gl_cv_cc_vis_werror+:} false; then : + $as_echo_n "(cached) " >&6 +else + gl_save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -Werror" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_cc_vis_werror=yes +else + gl_cv_cc_vis_werror=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CFLAGS="$gl_save_CFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_vis_werror" >&5 +$as_echo "$gl_cv_cc_vis_werror" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for simple visibility declarations" >&5 +$as_echo_n "checking for simple visibility declarations... " >&6; } +if ${gl_cv_cc_visibility+:} false; then : + $as_echo_n "(cached) " >&6 +else + gl_save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -fvisibility=hidden" + if test $gl_cv_cc_vis_werror = yes; then + CFLAGS="$CFLAGS -Werror" + fi + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +extern __attribute__((__visibility__("hidden"))) int hiddenvar; + extern __attribute__((__visibility__("default"))) int exportedvar; + extern __attribute__((__visibility__("hidden"))) int hiddenfunc (void); + extern __attribute__((__visibility__("default"))) int exportedfunc (void); + void dummyfunc (void) {} + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_cc_visibility=yes +else + gl_cv_cc_visibility=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CFLAGS="$gl_save_CFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_visibility" >&5 +$as_echo "$gl_cv_cc_visibility" >&6; } + if test $gl_cv_cc_visibility = yes; then + CFLAG_VISIBILITY="-fvisibility=hidden" + HAVE_VISIBILITY=1 + fi + fi + + + +cat >>confdefs.h <<_ACEOF +#define HAVE_VISIBILITY $HAVE_VISIBILITY +_ACEOF + + + + fi + + + + + + GNULIB_SETLOCALE_NULL=1 + + + + + +$as_echo "#define GNULIB_TEST_SETLOCALE_NULL 1" >>confdefs.h + + + + + + + + @@ -25173,52 +26813,17 @@ #include <signal.h> " -if test "x$ac_cv_type_sighandler_t" = xyes; then : - -else - HAVE_SIGHANDLER_T=0 -fi - - - - for gl_func in pthread_sigmask sigaction sigaddset sigdelset sigemptyset sigfillset sigismember sigpending sigprocmask; do - as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh` - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5 -$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; } -if eval \${$as_gl_Symbol+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <signal.h> - -int -main () -{ -#undef $gl_func - (void) $gl_func; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$as_gl_Symbol=yes" -else - eval "$as_gl_Symbol=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$as_gl_Symbol - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - if eval test \"x\$"$as_gl_Symbol"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1 -_ACEOF +if test "x$ac_cv_type_sighandler_t" = xyes; then : - eval ac_cv_have_decl_$gl_func=yes +else + HAVE_SIGHANDLER_T=0 fi - done + + + + + + ac_fn_c_check_type "$LINENO" "socklen_t" "ac_cv_type_socklen_t" " @@ -25238,7 +26843,7 @@ else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for socklen_t equivalent" >&5 $as_echo_n "checking for socklen_t equivalent... " >&6; } - if ${gl_cv_socklen_t_equiv+:} false; then : +if ${gl_cv_socklen_t_equiv+:} false; then : $as_echo_n "(cached) " >&6 else # Systems have either "struct sockaddr *" or @@ -25269,13 +26874,12 @@ done test "$gl_cv_socklen_t_equiv" != "" && break done + if test "$gl_cv_socklen_t_equiv" = ""; then + as_fn_error $? "Cannot find a type to use in place of socklen_t" "$LINENO" 5 + fi fi - - if test "$gl_cv_socklen_t_equiv" = ""; then - as_fn_error $? "Cannot find a type to use in place of socklen_t" "$LINENO" 5 - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_socklen_t_equiv" >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_socklen_t_equiv" >&5 $as_echo "$gl_cv_socklen_t_equiv" >&6; } cat >>confdefs.h <<_ACEOF @@ -25320,64 +26924,30 @@ - : - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stat handles trailing slashes on directories" >&5 -$as_echo_n "checking whether stat handles trailing slashes on directories... " >&6; } -if ${gl_cv_func_stat_dir_slash+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - case $host_os in - mingw*) gl_cv_func_stat_dir_slash="guessing no";; - *) gl_cv_func_stat_dir_slash="guessing yes";; - esac -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <sys/stat.h> - -int -main () -{ -struct stat st; return stat (".", &st) != stat ("./", &st); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - gl_cv_func_stat_dir_slash=yes -else - gl_cv_func_stat_dir_slash=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_stat_dir_slash" >&5 -$as_echo "$gl_cv_func_stat_dir_slash" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stat handles trailing slashes on files" >&5 + case "$host_os" in + mingw*) + ;; + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stat handles trailing slashes on files" >&5 $as_echo_n "checking whether stat handles trailing slashes on files... " >&6; } if ${gl_cv_func_stat_file_slash+:} false; then : $as_echo_n "(cached) " >&6 else touch conftest.tmp - # Assume that if we have lstat, we can also check symlinks. - if test $ac_cv_func_lstat = yes; then - ln -s conftest.tmp conftest.lnk - fi - if test "$cross_compiling" = yes; then : + # Assume that if we have lstat, we can also check symlinks. + if test $ac_cv_func_lstat = yes; then + ln -s conftest.tmp conftest.lnk + fi + if test "$cross_compiling" = yes; then : case "$host_os" in - # Guess yes on glibc systems. - *-gnu*) gl_cv_func_stat_file_slash="guessing yes" ;; - # If we don't know, assume the worst. - *) gl_cv_func_stat_file_slash="guessing no" ;; - esac + # Guess yes on Linux systems. + linux-* | linux) gl_cv_func_stat_file_slash="guessing yes" ;; + # Guess yes on glibc systems. + *-gnu* | gnu*) gl_cv_func_stat_file_slash="guessing yes" ;; + # If we don't know, obey --enable-cross-guesses. + *) gl_cv_func_stat_file_slash="$gl_cross_guess_normal" ;; + esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -25388,14 +26958,14 @@ main () { int result = 0; - struct stat st; - if (!stat ("conftest.tmp/", &st)) - result |= 1; + struct stat st; + if (!stat ("conftest.tmp/", &st)) + result |= 1; #if HAVE_LSTAT - if (!stat ("conftest.lnk/", &st)) - result |= 2; + if (!stat ("conftest.lnk/", &st)) + result |= 2; #endif - return result; + return result; ; return 0; @@ -25410,21 +26980,22 @@ conftest.$ac_objext conftest.beam conftest.$ac_ext fi - rm -f conftest.tmp conftest.lnk + rm -f conftest.tmp conftest.lnk fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_stat_file_slash" >&5 $as_echo "$gl_cv_func_stat_file_slash" >&6; } - case $gl_cv_func_stat_dir_slash in - *no) REPLACE_STAT=1 - -$as_echo "#define REPLACE_FUNC_STAT_DIR 1" >>confdefs.h -;; - esac - case $gl_cv_func_stat_file_slash in - *no) REPLACE_STAT=1 + case $gl_cv_func_stat_file_slash in + *no) + REPLACE_STAT=1 $as_echo "#define REPLACE_FUNC_STAT_FILE 1" >>confdefs.h ;; + esac + case $host_os in + solaris*) + REPLACE_FSTAT=1 ;; + esac + ;; esac if test $REPLACE_STAT = 1; then @@ -25438,7 +27009,25 @@ gl_LIBOBJS="$gl_LIBOBJS stat.$ac_objext" - : + case "$host_os" in + mingw*) + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS stat-w32.$ac_objext" + + ;; + esac + + + + : + fi @@ -25456,6 +27045,144 @@ + + + + ac_fn_c_check_member "$LINENO" "struct stat" "st_atim.tv_nsec" "ac_cv_member_struct_stat_st_atim_tv_nsec" "#include <sys/types.h> + #include <sys/stat.h> +" +if test "x$ac_cv_member_struct_stat_st_atim_tv_nsec" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC 1 +_ACEOF + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct stat.st_atim is of type struct timespec" >&5 +$as_echo_n "checking whether struct stat.st_atim is of type struct timespec... " >&6; } +if ${ac_cv_typeof_struct_stat_st_atim_is_struct_timespec+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include <sys/types.h> + #include <sys/stat.h> + #if HAVE_SYS_TIME_H + # include <sys/time.h> + #endif + #include <time.h> + struct timespec ts; + struct stat st; + +int +main () +{ + + st.st_atim = ts; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_typeof_struct_stat_st_atim_is_struct_timespec=yes +else + ac_cv_typeof_struct_stat_st_atim_is_struct_timespec=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_typeof_struct_stat_st_atim_is_struct_timespec" >&5 +$as_echo "$ac_cv_typeof_struct_stat_st_atim_is_struct_timespec" >&6; } + if test $ac_cv_typeof_struct_stat_st_atim_is_struct_timespec = yes; then + +$as_echo "#define TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC 1" >>confdefs.h + + fi +else + ac_fn_c_check_member "$LINENO" "struct stat" "st_atimespec.tv_nsec" "ac_cv_member_struct_stat_st_atimespec_tv_nsec" "#include <sys/types.h> + #include <sys/stat.h> +" +if test "x$ac_cv_member_struct_stat_st_atimespec_tv_nsec" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_STAT_ST_ATIMESPEC_TV_NSEC 1 +_ACEOF + + +else + ac_fn_c_check_member "$LINENO" "struct stat" "st_atimensec" "ac_cv_member_struct_stat_st_atimensec" "#include <sys/types.h> + #include <sys/stat.h> +" +if test "x$ac_cv_member_struct_stat_st_atimensec" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_STAT_ST_ATIMENSEC 1 +_ACEOF + + +else + ac_fn_c_check_member "$LINENO" "struct stat" "st_atim.st__tim.tv_nsec" "ac_cv_member_struct_stat_st_atim_st__tim_tv_nsec" "#include <sys/types.h> + #include <sys/stat.h> +" +if test "x$ac_cv_member_struct_stat_st_atim_st__tim_tv_nsec" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_STAT_ST_ATIM_ST__TIM_TV_NSEC 1 +_ACEOF + + +fi + +fi + +fi + +fi + + + + + + ac_fn_c_check_member "$LINENO" "struct stat" "st_birthtimespec.tv_nsec" "ac_cv_member_struct_stat_st_birthtimespec_tv_nsec" "#include <sys/types.h> + #include <sys/stat.h> +" +if test "x$ac_cv_member_struct_stat_st_birthtimespec_tv_nsec" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC 1 +_ACEOF + + +else + ac_fn_c_check_member "$LINENO" "struct stat" "st_birthtimensec" "ac_cv_member_struct_stat_st_birthtimensec" "#include <sys/types.h> + #include <sys/stat.h> +" +if test "x$ac_cv_member_struct_stat_st_birthtimensec" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC 1 +_ACEOF + + +else + ac_fn_c_check_member "$LINENO" "struct stat" "st_birthtim.tv_nsec" "ac_cv_member_struct_stat_st_birthtim_tv_nsec" "#include <sys/types.h> + #include <sys/stat.h> +" +if test "x$ac_cv_member_struct_stat_st_birthtim_tv_nsec" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_STAT_ST_BIRTHTIM_TV_NSEC 1 +_ACEOF + + +fi + +fi + +fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working stdalign.h" >&5 $as_echo_n "checking for working stdalign.h... " >&6; } if ${gl_cv_header_working_stdalign_h+:} false; then : @@ -25468,7 +27195,7 @@ /* Test that alignof yields a result consistent with offsetof. This catches GCC bug 52023 - <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52023>. */ + <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52023>. */ #ifdef __cplusplus template <class t> struct alignof_helper { char a; t b; }; # define ao(type) offsetof (alignof_helper<type>, b) @@ -25485,8 +27212,8 @@ || (defined __APPLE__ && defined __MACH__ \ ? 4 < __GNUC__ + (1 <= __GNUC_MINOR__) \ : __GNUC__) \ - || __HP_cc || __HP_aCC || __IBMC__ || __IBMCPP__ \ - || __ICC || 0x5110 <= __SUNPRO_C \ + || (__ia64 && (61200 <= __HP_cc || 61200 <= __HP_aCC)) \ + || __ICC || 0x590 <= __SUNPRO_C || 0x0600 <= __xlC__ \ || 1300 <= _MSC_VER) struct alignas_test { char c; char alignas (8) alignas_8; }; char test_alignas[offsetof (struct alignas_test, alignas_8) == 8 @@ -25530,10 +27257,20 @@ - # Define two additional variables used in the Makefile substitution. - if test "$ac_cv_header_stdbool_h" = yes; then - STDBOOL_H='' + if test "$ac_cv_header_stdbool_h" = yes; then + case "$host_os" in + solaris*) + if test -z "$GCC"; then + STDBOOL_H='stdbool.h' + else + STDBOOL_H='' + fi + ;; + *) + STDBOOL_H='' + ;; + esac else STDBOOL_H='stdbool.h' fi @@ -25558,19 +27295,49 @@ STDDEF_H= - ac_fn_c_check_type "$LINENO" "max_align_t" "ac_cv_type_max_align_t" "#include <stddef.h> -" -if test "x$ac_cv_type_max_align_t" = xyes; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for good max_align_t" >&5 +$as_echo_n "checking for good max_align_t... " >&6; } +if ${gl_cv_type_max_align_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stddef.h> + unsigned int s = sizeof (max_align_t); + #if defined __GNUC__ || defined __IBM__ALIGNOF__ + int check1[2 * (__alignof__ (double) <= __alignof__ (max_align_t)) - 1]; + int check2[2 * (__alignof__ (long double) <= __alignof__ (max_align_t)) - 1]; + #endif + +int +main () +{ + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_type_max_align_t=yes else - HAVE_MAX_ALIGN_T=0; STDDEF_H=stddef.h + gl_cv_type_max_align_t=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_type_max_align_t" >&5 +$as_echo "$gl_cv_type_max_align_t" >&6; } + if test $gl_cv_type_max_align_t = no; then + HAVE_MAX_ALIGN_T=0 + STDDEF_H=stddef.h + fi if test $gt_cv_c_wchar_t = no; then HAVE_WCHAR_T=0 STDDEF_H=stddef.h fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NULL can be used in arbitrary expressions" >&5 $as_echo_n "checking whether NULL can be used in arbitrary expressions... " >&6; } if ${gl_cv_decl_null_works+:} false; then : @@ -25603,6 +27370,7 @@ STDDEF_H=stddef.h fi + if test -n "$STDDEF_H"; then GL_GENERATE_STDDEF_H_TRUE= GL_GENERATE_STDDEF_H_FALSE='#' @@ -25777,7 +27545,7 @@ /* For non-mingw systems, compilation will trivially succeed. For mingw, compilation will succeed for older mingw (system printf, "I64d") and fail for newer mingw (gnu printf, "lld"). */ - #if ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) && \ + #if (defined _WIN32 && ! defined __CYGWIN__) && \ (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) extern char PRIdMAX_probe[sizeof PRIdMAX == sizeof "I64d" ? 1 : -1]; #endif @@ -25842,44 +27610,9 @@ - for gl_func in dprintf fpurge fseeko ftello getdelim getline gets pclose popen renameat snprintf tmpfile vdprintf vsnprintf; do - as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh` - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5 -$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; } -if eval \${$as_gl_Symbol+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <stdio.h> -int -main () -{ -#undef $gl_func - (void) $gl_func; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$as_gl_Symbol=yes" -else - eval "$as_gl_Symbol=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$as_gl_Symbol - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - if eval test \"x\$"$as_gl_Symbol"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1 -_ACEOF - eval ac_cv_have_decl_$gl_func=yes -fi - done + @@ -25957,50 +27690,9 @@ - for gl_func in _Exit atoll canonicalize_file_name getloadavg getsubopt grantpt initstate initstate_r mkdtemp mkostemp mkostemps mkstemp mkstemps posix_openpt ptsname ptsname_r qsort_r random random_r realpath rpmatch secure_getenv setenv setstate setstate_r srandom srandom_r strtod strtoll strtoull unlockpt unsetenv; do - as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh` - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5 -$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; } -if eval \${$as_gl_Symbol+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <stdlib.h> -#if HAVE_SYS_LOADAVG_H -# include <sys/loadavg.h> -#endif -#if HAVE_RANDOM_H -# include <random.h> -#endif -int -main () -{ -#undef $gl_func - (void) $gl_func; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$as_gl_Symbol=yes" -else - eval "$as_gl_Symbol=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$as_gl_Symbol - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - if eval test \"x\$"$as_gl_Symbol"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1 -_ACEOF - eval ac_cv_have_decl_$gl_func=yes -fi - done + @@ -26116,24 +27808,12 @@ - : - - - - - if test $ac_cv_func_strdup = yes; then if test $gl_cv_func_malloc_posix != yes; then REPLACE_STRDUP=1 fi fi - : - - - - - if test $ac_cv_have_decl_strdup = no; then HAVE_DECL_STRDUP=0 fi @@ -26181,10 +27861,12 @@ else if test "$cross_compiling" = yes; then : case "$host_os" in - # Guess yes on glibc systems. - *-gnu*) gl_cv_func_working_strerror="guessing yes" ;; - # If we don't know, assume the worst. - *) gl_cv_func_working_strerror="guessing no" ;; + # Guess yes on glibc systems. + *-gnu* | gnu*) gl_cv_func_working_strerror="guessing yes" ;; + # Guess yes on musl systems. + *-musl*) gl_cv_func_working_strerror="guessing yes" ;; + # If we don't know, obey --enable-cross-guesses. + *) gl_cv_func_working_strerror="$gl_cross_guess_normal" ;; esac else @@ -26279,12 +27961,6 @@ - : - - - - - if test $ac_cv_header_sys_socket_h != yes; then for ac_header in winsock2.h do : @@ -26315,18 +27991,10 @@ - ac_fn_c_check_decl "$LINENO" "strerror_r" "ac_cv_have_decl_strerror_r" "$ac_includes_default" -if test "x$ac_cv_have_decl_strerror_r" = xyes; then : - HAVE_DECL_STRERROR_R=1 -else - HAVE_DECL_STRERROR_R=0 -fi - - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_STRERROR_R_ORIG $HAVE_DECL_STRERROR_R -_ACEOF + if test $ac_cv_have_decl_strerror_r = no; then + HAVE_DECL_STRERROR_R=0 + fi if test $ac_cv_func_strerror_r = yes; then if test "$ERRNO_H:$REPLACE_STRERROR_0" = :0; then @@ -26342,9 +28010,6 @@ fi fi - # Overwrite the findings of AC_FUNC_STRERROR_R (for code that uses that). - - if test $HAVE_DECL_STRERROR_R = 0 || test $REPLACE_STRERROR_R = 1; then @@ -26358,44 +28023,129 @@ - : + fi - : + GNULIB_STRERROR_R=1 - : +$as_echo "#define GNULIB_TEST_STRERROR_R 1" >>confdefs.h + + + + + +cat >>confdefs.h <<_ACEOF +#define GNULIB_STRERROR_R_POSIX 1 +_ACEOF + + + + + + + + + + + + if test $ac_cv_have_decl_strnlen = no; then + HAVE_DECL_STRNLEN=0 + else + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working strnlen" >&5 +$as_echo_n "checking for working strnlen... " >&6; } +if ${ac_cv_func_strnlen_working+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + # Guess no on AIX systems, yes otherwise. + case "$host_os" in + aix*) ac_cv_func_strnlen_working=no;; + *) ac_cv_func_strnlen_working=yes;; + esac +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ + +#define S "foobar" +#define S_LEN (sizeof S - 1) + /* At least one implementation is buggy: that of AIX 4.3 would + give strnlen (S, 1) == 3. */ + + int i; + for (i = 0; i < S_LEN + 1; ++i) + { + int expected = i <= S_LEN ? i : S_LEN; + if (strnlen (S, i) != expected) + return 1; + } + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_strnlen_working=yes +else + ac_cv_func_strnlen_working=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_strnlen_working" >&5 +$as_echo "$ac_cv_func_strnlen_working" >&6; } +test $ac_cv_func_strnlen_working = no && : + if test $ac_cv_func_strnlen_working = no; then + REPLACE_STRNLEN=1 + fi fi + if test $HAVE_DECL_STRNLEN = 0 || test $REPLACE_STRNLEN = 1; then - GNULIB_STRERROR_R=1 + gl_LIBOBJS="$gl_LIBOBJS strnlen.$ac_objext" + + : + fi + + + + + + GNULIB_STRNLEN=1 -$as_echo "#define GNULIB_TEST_STRERROR_R 1" >>confdefs.h +$as_echo "#define GNULIB_TEST_STRNLEN 1" >>confdefs.h + @@ -26430,7 +28180,7 @@ $EGREP "Lucky user" >/dev/null 2>&1; then : gl_cv_func_strstr_linear="guessing yes" else - gl_cv_func_strstr_linear="guessing no" + gl_cv_func_strstr_linear="$gl_cross_guess_normal" fi rm -f conftest* @@ -26475,6 +28225,9 @@ if (!strstr (haystack, needle)) result |= 1; } + /* Free allocated memory, in case some sanitizer is watching. */ + free (haystack); + free (needle); return result; ; @@ -26517,16 +28270,16 @@ - if test "$gl_cv_func_memchr_works" != yes; then + if test $HAVE_MEMCHR = 0 || test $REPLACE_MEMCHR = 1; then REPLACE_STRSTR=1 else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether strstr works" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether strstr works" >&5 $as_echo_n "checking whether strstr works... " >&6; } if ${gl_cv_func_strstr_works_always+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __GNU_LIBRARY__ @@ -26549,7 +28302,7 @@ $EGREP "Lucky user" >/dev/null 2>&1; then : gl_cv_func_strstr_works_always="guessing yes" else - gl_cv_func_strstr_works_always="guessing no" + gl_cv_func_strstr_works_always="$gl_cross_guess_normal" fi rm -f conftest* @@ -26559,6 +28312,12 @@ /* end confdefs.h. */ #include <string.h> /* for strstr */ +#ifdef __GNU_LIBRARY__ + #include <features.h> + #if __GLIBC__ == 2 && __GLIBC_MINOR__ == 28 + Unlucky user + #endif +#endif #define P "_EF_BF_BD" #define HAYSTACK "F_BD_CE_BD" P P P P "_C3_88_20" P P P "_C3_A7_20" P #define NEEDLE P P P P P @@ -26643,11 +28402,12 @@ $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : - - case "$host_os" in - # Guess no on glibc systems. - *-gnu*) gl_cv_func_strtok_r_works="guessing no";; - *) gl_cv_func_strtok_r_works="guessing yes";; + case "$host_os" in + # Guess no on glibc systems. + *-gnu* | gnu*) gl_cv_func_strtok_r_works="guessing no" ;; + # Guess yes on native Windows. + mingw*) gl_cv_func_strtok_r_works="guessing yes" ;; + *) gl_cv_func_strtok_r_works="guessing yes" ;; esac else @@ -26699,12 +28459,6 @@ HAVE_STRTOK_R=0 fi - : - - - - - if test $ac_cv_have_decl_strtok_r = no; then HAVE_DECL_STRTOK_R=0 fi @@ -26750,9 +28504,100 @@ + if test $gl_cv_have_include_next = yes; then + gl_cv_next_sys_random_h='<'sys/random.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <sys/random.h>" >&5 +$as_echo_n "checking absolute name of <sys/random.h>... " >&6; } +if ${gl_cv_next_sys_random_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + + if test $ac_cv_header_sys_random_h = yes; then + + + + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/random.h> +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + + case "$host_os" in + mingw*) + gl_dirsep_regex='[/\\]' + ;; + *) + gl_dirsep_regex='\/' + ;; + esac + gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' + gl_header_literal_regex=`echo 'sys/random.h' \ + | sed -e "$gl_make_literal_regex_sed"` + gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ + s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ + s|^/[^/]|//&| + p + q + }' + + gl_cv_absolute_sys_random_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n "$gl_absolute_header_sed"` + + gl_header=$gl_cv_absolute_sys_random_h + gl_cv_next_sys_random_h='"'$gl_header'"' + else + gl_cv_next_sys_random_h='<'sys/random.h'>' + fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sys_random_h" >&5 +$as_echo "$gl_cv_next_sys_random_h" >&6; } + fi + NEXT_SYS_RANDOM_H=$gl_cv_next_sys_random_h + + if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' + gl_next_as_first_directive='<'sys/random.h'>' + else + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' + gl_next_as_first_directive=$gl_cv_next_sys_random_h + fi + NEXT_AS_FIRST_DIRECTIVE_SYS_RANDOM_H=$gl_next_as_first_directive + + + + + if test $ac_cv_header_sys_random_h = yes; then + HAVE_SYS_RANDOM_H=1 + else + HAVE_SYS_RANDOM_H=0 + fi + + + + if test $ac_cv_header_sys_random_h = yes; then + UNISTD_H_HAVE_SYS_RANDOM_H=1 + fi + + + + + + + + + + + + - : @@ -26834,14 +28679,14 @@ + WINDOWS_STAT_TIMESPEC=0 + + - if test $WINDOWS_64_BIT_ST_SIZE = 1; then -$as_echo "#define _GL_WINDOWS_64_BIT_ST_SIZE 1" >>confdefs.h - fi ac_fn_c_check_type "$LINENO" "nlink_t" "ac_cv_type_nlink_t" "#include <sys/types.h> #include <sys/stat.h> @@ -26856,46 +28701,6 @@ - for gl_func in fchmodat fstat fstatat futimens lchmod lstat mkdirat mkfifo mkfifoat mknod mknodat stat utimensat; do - as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh` - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5 -$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; } -if eval \${$as_gl_Symbol+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <sys/stat.h> - -int -main () -{ -#undef $gl_func - (void) $gl_func; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$as_gl_Symbol=yes" -else - eval "$as_gl_Symbol=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$as_gl_Symbol - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - if eval test \"x\$"$as_gl_Symbol"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1 -_ACEOF - - eval ac_cv_have_decl_$gl_func=yes -fi - done - - @@ -26911,7 +28716,6 @@ - : @@ -27012,10 +28816,14 @@ + ac_fn_c_check_decl "$LINENO" "localtime_r" "ac_cv_have_decl_localtime_r" "/* mingw's <time.h> provides the functions asctime_r, ctime_r, + gmtime_r, localtime_r only if <unistd.h> or <pthread.h> has + been included before. */ + #if defined __MINGW32__ + # include <unistd.h> + #endif + #include <time.h> - - - ac_fn_c_check_decl "$LINENO" "localtime_r" "ac_cv_have_decl_localtime_r" "#include <time.h> " if test "x$ac_cv_have_decl_localtime_r" = xyes; then : ac_have_decl=1 @@ -27032,12 +28840,6 @@ fi - : - - - - - if test $ac_cv_func_localtime_r = yes; then HAVE_LOCALTIME_R=1 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether localtime_r is compatible with its POSIX signature" >&5 @@ -27047,7 +28849,14 @@ else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include <time.h> +/* mingw's <time.h> provides the functions asctime_r, ctime_r, + gmtime_r, localtime_r only if <unistd.h> or <pthread.h> has + been included before. */ + #if defined __MINGW32__ + # include <unistd.h> + #endif + #include <time.h> + int main () { @@ -27081,6 +28890,47 @@ fi else HAVE_LOCALTIME_R=0 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether localtime_r exists as an inline function" >&5 +$as_echo_n "checking whether localtime_r exists as an inline function... " >&6; } +if ${gl_cv_func_localtime_r_inline+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* mingw's <time.h> provides the functions asctime_r, ctime_r, + gmtime_r, localtime_r only if <unistd.h> or <pthread.h> has + been included before. */ + #if defined __MINGW32__ + # include <unistd.h> + #endif + #include <time.h> + +int +main () +{ +time_t a; + struct tm r; + localtime_r (&a, &r); + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + gl_cv_func_localtime_r_inline=yes +else + gl_cv_func_localtime_r_inline=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_localtime_r_inline" >&5 +$as_echo "$gl_cv_func_localtime_r_inline" >&6; } + if test $gl_cv_func_localtime_r_inline = yes; then + REPLACE_LOCALTIME_R=1 + fi fi if test $HAVE_LOCALTIME_R = 0 || test $REPLACE_LOCALTIME_R = 1; then @@ -27122,12 +28972,6 @@ - : - - - - - @@ -27212,63 +29056,6 @@ - for gl_func in chdir chown dup dup2 dup3 environ euidaccess faccessat fchdir fchownat fdatasync fsync ftruncate getcwd getdomainname getdtablesize getgroups gethostname getlogin getlogin_r getpagesize getusershell setusershell endusershell group_member isatty lchown link linkat lseek pipe pipe2 pread pwrite readlink readlinkat rmdir sethostname sleep symlink symlinkat ttyname_r unlink unlinkat usleep; do - as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh` - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5 -$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; } -if eval \${$as_gl_Symbol+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#if HAVE_UNISTD_H -# include <unistd.h> -#endif -/* Some systems declare various items in the wrong headers. */ -#if !(defined __GLIBC__ && !defined __UCLIBC__) -# include <fcntl.h> -# include <stdio.h> -# include <stdlib.h> -# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ -# include <io.h> -# endif -#endif - -int -main () -{ -#undef $gl_func - (void) $gl_func; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$as_gl_Symbol=yes" -else - eval "$as_gl_Symbol=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$as_gl_Symbol - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - if eval test \"x\$"$as_gl_Symbol"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1 -_ACEOF - - eval ac_cv_have_decl_$gl_func=yes -fi - done - - - - - : - - @@ -27276,8 +29063,6 @@ - : - @@ -27350,8 +29135,8 @@ case "$host_os" in # Guess yes on glibc systems. *-gnu*) gl_cv_func_unsetenv_works="guessing yes" ;; - # If we don't know, assume the worst. - *) gl_cv_func_unsetenv_works="guessing no" ;; + # If we don't know, obey --enable-cross-guesses. + *) gl_cv_func_unsetenv_works="$gl_cross_guess_normal" ;; esac else @@ -27420,12 +29205,6 @@ - : - - - - - fi @@ -27452,12 +29231,6 @@ - : - - - - - @@ -27548,54 +29321,6 @@ - for gl_func in btowc wctob mbsinit mbrtowc mbrlen mbsrtowcs mbsnrtowcs wcrtomb wcsrtombs wcsnrtombs wcwidth wmemchr wmemcmp wmemcpy wmemmove wmemset wcslen wcsnlen wcscpy wcpcpy wcsncpy wcpncpy wcscat wcsncat wcscmp wcsncmp wcscasecmp wcsncasecmp wcscoll wcsxfrm wcsdup wcschr wcsrchr wcscspn wcsspn wcspbrk wcsstr wcstok wcswidth ; do - as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh` - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5 -$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; } -if eval \${$as_gl_Symbol+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before - <wchar.h>. - BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be - included before <wchar.h>. */ -#if !(defined __GLIBC__ && !defined __UCLIBC__) -# include <stddef.h> -# include <stdio.h> -# include <time.h> -#endif -#include <wchar.h> - -int -main () -{ -#undef $gl_func - (void) $gl_func; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$as_gl_Symbol=yes" -else - eval "$as_gl_Symbol=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$as_gl_Symbol - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - if eval test \"x\$"$as_gl_Symbol"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1 -_ACEOF - - eval ac_cv_have_decl_$gl_func=yes -fi - done @@ -27603,7 +29328,6 @@ - : @@ -27630,10 +29354,6 @@ - : - - - @@ -27717,7 +29437,7 @@ else if test "$cross_compiling" = yes; then : - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdlib.h> #if __GNU_LIBRARY__ == 1 @@ -27774,10 +29494,14 @@ fi - case "$gl_cv_func_iswcntrl_works" in - *yes) REPLACE_ISWCNTRL=0 ;; - *) REPLACE_ISWCNTRL=1 ;; - esac + if test $GNULIB_OVERRIDES_WINT_T = 1; then + REPLACE_ISWCNTRL=1 + else + case "$gl_cv_func_iswcntrl_works" in + *yes) REPLACE_ISWCNTRL=0 ;; + *) REPLACE_ISWCNTRL=1 ;; + esac + fi if test $HAVE_ISWCNTRL = 0 || test $REPLACE_ISWCNTRL = 1; then @@ -27920,11 +29644,74 @@ fi - for gl_func in wctype iswctype wctrans towctrans ; do - as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh` - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5 -$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; } -if eval \${$as_gl_Symbol+:} false; then : + + + + + case "$host_os" in + mingw*) + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS windows-mutex.$ac_objext" + + ;; + esac + + case "$host_os" in + mingw*) + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS windows-once.$ac_objext" + + ;; + esac + + case "$host_os" in + mingw*) + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS windows-recmutex.$ac_objext" + + ;; + esac + + case "$host_os" in + mingw*) + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS windows-rwlock.$ac_objext" + + ;; + esac + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wmemchr" >&5 +$as_echo_n "checking for wmemchr... " >&6; } +if ${gl_cv_func_wmemchr+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -27932,43 +29719,101 @@ /* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before <wchar.h>. - BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be - included before <wchar.h>. */ -#if !(defined __GLIBC__ && !defined __UCLIBC__) -# include <stddef.h> -# include <stdio.h> -# include <time.h> -# include <wchar.h> -#endif -#include <wctype.h> + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included + before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> int main () { -#undef $gl_func - (void) $gl_func; +return ! wmemchr ((const wchar_t *) 0, (wchar_t) ' ', 0); ; return 0; } + _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$as_gl_Symbol=yes" +if ac_fn_c_try_link "$LINENO"; then : + gl_cv_func_wmemchr=yes else - eval "$as_gl_Symbol=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + gl_cv_func_wmemchr=no fi -eval ac_res=\$$as_gl_Symbol - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - if eval test \"x\$"$as_gl_Symbol"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1 -_ACEOF +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext - eval ac_cv_have_decl_$gl_func=yes fi - done +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_wmemchr" >&5 +$as_echo "$gl_cv_func_wmemchr" >&6; } + if test $gl_cv_func_wmemchr = no; then + HAVE_WMEMCHR=0 + fi + + if test $HAVE_WMEMCHR = 0; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS wmemchr.$ac_objext" + + fi + + + + + + GNULIB_WMEMCHR=1 + + + + + +$as_echo "#define GNULIB_TEST_WMEMCHR 1" >>confdefs.h + + + + + + + + + + + + if test $ac_cv_func_wmempcpy = no; then + HAVE_WMEMPCPY=0 + fi + + if test $HAVE_WMEMPCPY = 0; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS wmempcpy.$ac_objext" + + fi + + + + + + GNULIB_WMEMPCPY=1 + + + + + +$as_echo "#define GNULIB_TEST_WMEMPCPY 1" >>confdefs.h + # End of code from modules @@ -27992,6 +29837,7 @@ + gl_source_base='tests' gltests_WITNESS=IN_`echo "${PACKAGE-$PACKAGE_TARNAME}" | LC_ALL=C tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ | LC_ALL=C sed -e 's/[^A-Z0-9_]/_/g'`_GNULIB_TESTS @@ -28183,6 +30029,9 @@ ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` +# Expand $ac_aux_dir to an absolute path. +am_aux_dir=`cd "$ac_aux_dir" && pwd` + if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) @@ -29110,6 +30959,14 @@ as_fn_error $? "conditional \"GL_GENERATE_FNMATCH_H\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi +if test -z "${GL_GENERATE_FNMATCH_H_TRUE}" && test -z "${GL_GENERATE_FNMATCH_H_FALSE}"; then + as_fn_error $? "conditional \"GL_GENERATE_FNMATCH_H\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${GL_GENERATE_GLOB_H_TRUE}" && test -z "${GL_GENERATE_GLOB_H_FALSE}"; then + as_fn_error $? "conditional \"GL_GENERATE_GLOB_H\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi if test -z "${GL_GENERATE_GLOB_H_TRUE}" && test -z "${GL_GENERATE_GLOB_H_FALSE}"; then as_fn_error $? "conditional \"GL_GENERATE_GLOB_H\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 @@ -29128,6 +30985,10 @@ fi +if test -z "${GL_GENERATE_STDDEF_H_TRUE}" && test -z "${GL_GENERATE_STDDEF_H_FALSE}"; then + as_fn_error $? "conditional \"GL_GENERATE_STDDEF_H\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi if test -z "${GL_GENERATE_NETINET_IN_H_TRUE}" && test -z "${GL_GENERATE_NETINET_IN_H_FALSE}"; then as_fn_error $? "conditional \"GL_GENERATE_NETINET_IN_H\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 diff -Nru gdb-9.1/gnulib/configure.ac gdb-10.2/gnulib/configure.ac --- gdb-9.1/gnulib/configure.ac 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/gnulib/configure.ac 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ dnl Autoconf configure script for GDB, the GNU debugger. -dnl Copyright (C) 1995-2020 Free Software Foundation, Inc. +dnl Copyright (C) 1995-2021 Free Software Foundation, Inc. dnl dnl This file is part of GDB. dnl @@ -27,11 +27,12 @@ AC_PROG_CC AC_USE_SYSTEM_EXTENSIONS +# Needs to run before gl_EARLY so it can override AC_SYS_LARGEFILE included +# there. +ACX_LARGEFILE gl_EARLY AM_PROG_CC_STDC -ACX_LARGEFILE - AC_CONFIG_AUX_DIR(..) AC_CANONICAL_SYSTEM diff -Nru gdb-9.1/gnulib/import/alloca.c gdb-10.2/gnulib/import/alloca.c --- gdb-9.1/gnulib/import/alloca.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/alloca.c 2021-04-25 04:06:26.000000000 +0000 @@ -350,16 +350,16 @@ /* There must be at least one stack segment. Therefore it is a fatal error if "trailer" is null. */ - if (trailer == 0) + if (trailer == NULL) abort (); /* Discard segments that do not contain our argument address. */ - while (trailer != 0) + while (trailer != NULL) { block = (long *) trailer->this_address; size = trailer->this_size; - if (block == 0 || size == 0) + if (block == NULL || size == 0) abort (); trailer = (struct stk_trailer *) trailer->link; if ((block <= address) && (address < (block + size))) @@ -371,7 +371,7 @@ result = address - block; - if (trailer == 0) + if (trailer == NULL) { return result; } @@ -383,7 +383,7 @@ result += trailer->this_size; trailer = (struct stk_trailer *) trailer->link; } - while (trailer != 0); + while (trailer != NULL); /* We are done. Note that if you present a bogus address (one not in any segment), you will get a different number back, formed diff -Nru gdb-9.1/gnulib/import/alloca.in.h gdb-10.2/gnulib/import/alloca.in.h --- gdb-9.1/gnulib/import/alloca.in.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/alloca.in.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Memory allocation on the stack. - Copyright (C) 1995, 1999, 2001-2004, 2006-2016 Free Software Foundation, + Copyright (C) 1995, 1999, 2001-2004, 2006-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it @@ -15,7 +15,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, see - <http://www.gnu.org/licenses/>. + <https://www.gnu.org/licenses/>. */ /* Avoid using the symbol _ALLOCA_H here, as Bison assumes _ALLOCA_H @@ -35,6 +35,15 @@ */ #ifndef alloca + /* Some version of mingw have an <alloca.h> that causes trouble when + included after 'alloca' gets defined as a macro. As a workaround, + include this <alloca.h> first and define 'alloca' as a macro afterwards + if needed. */ +# if defined __GNUC__ && (defined _WIN32 && ! defined __CYGWIN__) && @HAVE_ALLOCA_H@ +# include_next <alloca.h> +# endif +#endif +#ifndef alloca # ifdef __GNUC__ # define alloca __builtin_alloca # elif defined _AIX diff -Nru gdb-9.1/gnulib/import/arg-nonnull.h gdb-10.2/gnulib/import/arg-nonnull.h --- gdb-9.1/gnulib/import/arg-nonnull.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/arg-nonnull.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,26 @@ +/* A C macro for declaring that specific arguments must not be NULL. + Copyright (C) 2009-2020 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools + that the values passed as arguments n, ..., m must be non-NULL pointers. + n = 1 stands for the first argument, n = 2 for the second argument etc. */ +#ifndef _GL_ARG_NONNULL +# if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3 +# define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params)) +# else +# define _GL_ARG_NONNULL(params) +# endif +#endif diff -Nru gdb-9.1/gnulib/import/arpa_inet.in.h gdb-10.2/gnulib/import/arpa_inet.in.h --- gdb-9.1/gnulib/import/arpa_inet.in.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/arpa_inet.in.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* A GNU-like <arpa/inet.h>. - Copyright (C) 2005-2006, 2008-2016 Free Software Foundation, Inc. + Copyright (C) 2005-2006, 2008-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -13,7 +13,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, see <http://www.gnu.org/licenses/>. */ + along with this program; if not, see <https://www.gnu.org/licenses/>. */ #ifndef _@GUARD_PREFIX@_ARPA_INET_H @@ -49,6 +49,12 @@ #ifndef _@GUARD_PREFIX@_ARPA_INET_H #define _@GUARD_PREFIX@_ARPA_INET_H +/* Get all possible declarations of inet_ntop() and inet_pton(). */ +#if (@GNULIB_INET_NTOP@ || @GNULIB_INET_PTON@ || defined GNULIB_POSIXCHECK) \ + && @HAVE_WS2TCPIP_H@ +# include <ws2tcpip.h> +#endif + /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ @@ -70,8 +76,8 @@ the return value is NULL and errno is set to ENOSPC. A good value for CNT is 46. - For more details, see the POSIX:2001 specification - <http://www.opengroup.org/susv3xsh/inet_ntop.html>. */ + For more details, see the POSIX:2008 specification + <https://pubs.opengroup.org/onlinepubs/9699919799/functions/inet_ntop.html>. */ # if @REPLACE_INET_NTOP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef inet_ntop @@ -97,7 +103,9 @@ (int af, const void *restrict src, char *restrict dst, socklen_t cnt)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (inet_ntop); +# endif #elif defined GNULIB_POSIXCHECK # undef inet_ntop # if HAVE_RAW_DECL_INET_NTOP @@ -126,7 +134,9 @@ _GL_CXXALIAS_SYS (inet_pton, int, (int af, const char *restrict src, void *restrict dst)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (inet_pton); +# endif #elif defined GNULIB_POSIXCHECK # undef inet_pton # if HAVE_RAW_DECL_INET_PTON diff -Nru gdb-9.1/gnulib/import/assure.h gdb-10.2/gnulib/import/assure.h --- gdb-9.1/gnulib/import/assure.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/assure.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Run-time assert-like macros. - Copyright (C) 2014-2016 Free Software Foundation, Inc. + Copyright (C) 2014-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -13,7 +13,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paul Eggert. */ @@ -21,12 +21,32 @@ #define _GL_ASSURE_H #include <assert.h> +#include "verify.h" + +/* Evaluate an assertion E that is guaranteed to be true. + If NDEBUG is not defined, abort the program if E is false. + If NDEBUG is defined, the compiler can assume E and behavior is + undefined if E is false, fails to evaluate, or has side effects. + + Unlike standard 'assert', this macro evaluates E even when NDEBUG + is defined, so as to catch typos, avoid some GCC warnings, and + improve performance when E is simple enough. + + Also see the documentation for 'assume' in verify.h. */ + +#ifdef NDEBUG +# define affirm(E) assume (E) +#else +# define affirm(E) assert (E) +#endif /* Check E's value at runtime, and report an error and abort if not. - However, do nothng if NDEBUG is defined. + However, do nothing if NDEBUG is defined. - Unlike standard 'assert', this macro always compiles E even when NDEBUG - is defined, so as to catch typos and avoid some GCC warnings. */ + Unlike standard 'assert', this macro compiles E even when NDEBUG + is defined, so as to catch typos and avoid some GCC warnings. + Unlike 'affirm', it is OK for E to use hard-to-optimize features, + since E is not executed if NDEBUG is defined. */ #ifdef NDEBUG # define assure(E) ((void) (0 && (E))) diff -Nru gdb-9.1/gnulib/import/at-func.c gdb-10.2/gnulib/import/at-func.c --- gdb-9.1/gnulib/import/at-func.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/at-func.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Define at-style functions like fstatat, unlinkat, fchownat, etc. - Copyright (C) 2006, 2009-2016 Free Software Foundation, Inc. + Copyright (C) 2006, 2009-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -12,11 +12,11 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* written by Jim Meyering */ -#include "dosname.h" /* solely for definition of IS_ABSOLUTE_FILE_NAME */ +#include "filename.h" /* solely for definition of IS_ABSOLUTE_FILE_NAME */ #ifdef GNULIB_SUPPORT_ONLY_AT_FDCWD # include <errno.h> diff -Nru gdb-9.1/gnulib/import/attribute.h gdb-10.2/gnulib/import/attribute.h --- gdb-9.1/gnulib/import/attribute.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/attribute.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,215 @@ +/* ATTRIBUTE_* macros for using attributes in GCC and similar compilers + + Copyright 2020 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Paul Eggert. */ + +/* Provide public ATTRIBUTE_* names for the private _GL_ATTRIBUTE_* + macros used within Gnulib. */ + +/* These attributes can be placed in two ways: + - At the start of a declaration (i.e. even before storage-class + specifiers!); then they apply to all entities that are declared + by the declaration. + - Immediately after the name of an entity being declared by the + declaration; then they apply to that entity only. */ + +#ifndef _GL_ATTRIBUTE_H +#define _GL_ATTRIBUTE_H + + +/* This file defines two types of attributes: + * C2X standard attributes. These have macro names that do not begin with + 'ATTRIBUTE_'. + * Selected GCC attributes; see: + https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html + https://gcc.gnu.org/onlinedocs/gcc/Common-Variable-Attributes.html + https://gcc.gnu.org/onlinedocs/gcc/Common-Type-Attributes.html + These names begin with 'ATTRIBUTE_' to avoid name clashes. */ + + +/* =============== Attributes for specific kinds of functions =============== */ + +/* Attributes for functions that should not be used. */ + +/* Warn if the entity is used. */ +/* Applies to: + - function, variable, + - struct, union, struct/union member, + - enumeration, enumeration item, + - typedef, + in C++ also: namespace, class, template specialization. */ +#define DEPRECATED _GL_ATTRIBUTE_DEPRECATED + +/* If a function call is not optimized way, warn with MSG. */ +/* Applies to: functions. */ +#define ATTRIBUTE_WARNING(msg) _GL_ATTRIBUTE_WARNING (msg) + +/* If a function call is not optimized way, report an error with MSG. */ +/* Applies to: functions. */ +#define ATTRIBUTE_ERROR(msg) _GL_ATTRIBUTE_ERROR (msg) + + +/* Attributes for memory-allocating functions. */ + +/* The function returns a pointer to freshly allocated memory. */ +/* Applies to: functions. */ +#define ATTRIBUTE_MALLOC _GL_ATTRIBUTE_MALLOC + +/* ATTRIBUTE_ALLOC_SIZE ((N)) - The Nth argument of the function + is the size of the returned memory block. + ATTRIBUTE_ALLOC_SIZE ((M, N)) - Multiply the Mth and Nth arguments + to determine the size of the returned memory block. */ +/* Applies to: function, pointer to function, function types. */ +#define ATTRIBUTE_ALLOC_SIZE(args) _GL_ATTRIBUTE_ALLOC_SIZE (args) + + +/* Attributes for variadic functions. */ + +/* The variadic function expects a trailing NULL argument. + ATTRIBUTE_SENTINEL () - The last argument is NULL. + ATTRIBUTE_SENTINEL ((N)) - The (N+1)st argument from the end is NULL. */ +/* Applies to: functions. */ +#define ATTRIBUTE_SENTINEL(pos) _GL_ATTRIBUTE_SENTINEL (pos) + + +/* ================== Attributes for compiler diagnostics ================== */ + +/* Attributes that help the compiler diagnose programmer mistakes. + Some of them may also help for some compiler optimizations. */ + +/* ATTRIBUTE_FORMAT ((ARCHETYPE, STRING-INDEX, FIRST-TO-CHECK)) - + The STRING-INDEXth function argument is a format string of style + ARCHETYPE, which is one of: + printf, gnu_printf + scanf, gnu_scanf, + strftime, gnu_strftime, + strfmon, + or the same thing prefixed and suffixed with '__'. + If FIRST-TO-CHECK is not 0, arguments starting at FIRST-TO_CHECK + are suitable for the format string. */ +/* Applies to: functions. */ +#define ATTRIBUTE_FORMAT(spec) _GL_ATTRIBUTE_FORMAT (spec) + +/* ATTRIBUTE_NONNULL ((N1, N2,...)) - Arguments N1, N2,... must not be NULL. + ATTRIBUTE_NONNULL () - All pointer arguments must not be null. */ +/* Applies to: functions. */ +#define ATTRIBUTE_NONNULL(args) _GL_ATTRIBUTE_NONNULL (args) + +/* The function's return value is a non-NULL pointer. */ +/* Applies to: functions. */ +#define ATTRIBUTE_RETURNS_NONNULL _GL_ATTRIBUTE_RETURNS_NONNULL + +/* Warn if the caller does not use the return value, + unless the caller uses something like ignore_value. */ +/* Applies to: function, enumeration, class. */ +#define NODISCARD _GL_ATTRIBUTE_NODISCARD + + +/* Attributes that disable false alarms when the compiler diagnoses + programmer "mistakes". */ + +/* Do not warn if the entity is not used. */ +/* Applies to: + - function, variable, + - struct, union, struct/union member, + - enumeration, enumeration item, + - typedef, + in C++ also: class. */ +#define MAYBE_UNUSED _GL_ATTRIBUTE_MAYBE_UNUSED + +/* The contents of a character array is not meant to be NUL-terminated. */ +/* Applies to: struct/union members and variables that are arrays of element + type '[[un]signed] char'. */ +#define ATTRIBUTE_NONSTRING _GL_ATTRIBUTE_NONSTRING + +/* Do not warn if control flow falls through to the immediately + following 'case' or 'default' label. */ +/* Applies to: Empty statement (;), inside a 'switch' statement. */ +#define FALLTHROUGH _GL_ATTRIBUTE_FALLTHROUGH + + +/* ================== Attributes for debugging information ================== */ + +/* Attributes regarding debugging information emitted by the compiler. */ + +/* Omit the function from stack traces when debugging. */ +/* Applies to: function. */ +#define ATTRIBUTE_ARTIFICIAL _GL_ATTRIBUTE_ARTIFICIAL + +/* Make the entity visible to debuggers etc., even with '-fwhole-program'. */ +/* Applies to: functions, variables. */ +#define ATTRIBUTE_EXTERNALLY_VISIBLE _GL_ATTRIBUTE_EXTERNALLY_VISIBLE + + +/* ========== Attributes that mainly direct compiler optimizations ========== */ + +/* The function does not throw exceptions. */ +/* Applies to: functions. */ +#define ATTRIBUTE_NOTHROW _GL_ATTRIBUTE_NOTHROW + +/* Do not inline the function. */ +/* Applies to: functions. */ +#define ATTRIBUTE_NOINLINE _GL_ATTRIBUTE_NOINLINE + +/* Always inline the function, and report an error if the compiler + cannot inline. */ +/* Applies to: function. */ +#define ATTRIBUTE_ALWAYS_INLINE _GL_ATTRIBUTE_ALWAYS_INLINE + +/* The function does not affect observable state, and always returns a value. + Compilers can omit duplicate calls with the same arguments if + observable state is not changed between calls. (This attribute is + looser than ATTRIBUTE_CONST.) */ +/* Applies to: functions. */ +#define ATTRIBUTE_PURE _GL_ATTRIBUTE_PURE + +/* The function neither depends on nor affects observable state, + and always returns a value. Compilers can omit duplicate calls with + the same arguments. (This attribute is stricter than ATTRIBUTE_PURE.) */ +/* Applies to: functions. */ +#define ATTRIBUTE_CONST _GL_ATTRIBUTE_CONST + +/* The function is rarely executed. */ +/* Applies to: functions. */ +#define ATTRIBUTE_COLD _GL_ATTRIBUTE_COLD + +/* If called from some other compilation unit, the function executes + code from that unit only by return or by exception handling, + letting the compiler optimize that unit more aggressively. */ +/* Applies to: functions. */ +#define ATTRIBUTE_LEAF _GL_ATTRIBUTE_LEAF + +/* For struct members: The member has the smallest possible alignment. + For struct, union, class: All members have the smallest possible alignment, + minimizing the memory required. */ +/* Applies to: struct members, struct, union, + in C++ also: class. */ +#define ATTRIBUTE_PACKED _GL_ATTRIBUTE_PACKED + + +/* ================ Attributes that make invalid code valid ================ */ + +/* Attributes that prevent fatal compiler optimizations for code that is not + fully ISO C compliant. */ + +/* Pointers to the type may point to the same storage as pointers to + other types, thus disabling strict aliasing optimization. */ +/* Applies to: types. */ +#define ATTRIBUTE_MAY_ALIAS _GL_ATTRIBUTE_MAY_ALIAS + + +#endif /* _GL_ATTRIBUTE_H */ diff -Nru gdb-9.1/gnulib/import/basename-lgpl.c gdb-10.2/gnulib/import/basename-lgpl.c --- gdb-9.1/gnulib/import/basename-lgpl.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/basename-lgpl.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* basename.c -- return the last element in a file name - Copyright (C) 1990, 1998-2001, 2003-2006, 2009-2016 Free Software + Copyright (C) 1990, 1998-2001, 2003-2006, 2009-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify @@ -14,7 +14,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> diff -Nru gdb-9.1/gnulib/import/btowc.c gdb-10.2/gnulib/import/btowc.c --- gdb-9.1/gnulib/import/btowc.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/btowc.c 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,39 @@ +/* Convert unibyte character to wide character. + Copyright (C) 2008, 2010-2020 Free Software Foundation, Inc. + Written by Bruno Haible <bruno@clisp.org>, 2008. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include <wchar.h> + +#include <stdio.h> +#include <stdlib.h> + +wint_t +btowc (int c) +{ + if (c != EOF) + { + char buf[1]; + wchar_t wc; + + buf[0] = c; + if (mbtowc (&wc, buf, 1) >= 0) + return wc; + } + return WEOF; +} diff -Nru gdb-9.1/gnulib/import/canonicalize-lgpl.c gdb-10.2/gnulib/import/canonicalize-lgpl.c --- gdb-9.1/gnulib/import/canonicalize-lgpl.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/canonicalize-lgpl.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Return the canonical absolute name of a given file. - Copyright (C) 1996-2016 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of the GNU C Library. This program is free software: you can redistribute it and/or modify @@ -13,7 +13,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _LIBC /* Don't use __attribute__ __nonnull__ in this compilation unit. Otherwise gcc @@ -51,7 +51,7 @@ # define __realpath realpath # include "pathmax.h" # include "malloca.h" -# include "dosname.h" +# include "filename.h" # if HAVE_GETCWD # if IN_RELOCWRAPPER /* When building the relocatable program wrapper, use the system's getcwd @@ -59,8 +59,10 @@ */ # undef getcwd # endif -# ifdef VMS - /* We want the directory in Unix syntax, not in VMS syntax. */ +# if defined VMS && !defined getcwd + /* We want the directory in Unix syntax, not in VMS syntax. + The gnulib override of 'getcwd' takes 2 arguments; the original VMS + 'getcwd' takes 3 arguments. */ # define __getcwd(buf, max) getcwd (buf, max, 0) # else # define __getcwd getcwd @@ -93,9 +95,9 @@ static void alloc_failed (void) { -#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ +#if defined _WIN32 && ! defined __CYGWIN__ /* Avoid errno problem without using the malloc or realloc modules; see: - http://lists.gnu.org/archive/html/bug-gnulib/2016-08/msg00025.html */ + https://lists.gnu.org/r/bug-gnulib/2016-08/msg00025.html */ errno = ENOMEM; #endif } @@ -268,6 +270,8 @@ #endif *dest = '\0'; + /* FIXME: if lstat fails with errno == EOVERFLOW, + the entry exists. */ #ifdef _LIBC if (__lxstat64 (_STAT_VER, rpath, &st) < 0) #else diff -Nru gdb-9.1/gnulib/import/c++defs.h gdb-10.2/gnulib/import/c++defs.h --- gdb-9.1/gnulib/import/c++defs.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/c++defs.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,313 @@ +/* C++ compatible function declaration macros. + Copyright (C) 2010-2020 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#ifndef _GL_CXXDEFS_H +#define _GL_CXXDEFS_H + +/* Begin/end the GNULIB_NAMESPACE namespace. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_BEGIN_NAMESPACE namespace GNULIB_NAMESPACE { +# define _GL_END_NAMESPACE } +#else +# define _GL_BEGIN_NAMESPACE +# define _GL_END_NAMESPACE +#endif + +/* The three most frequent use cases of these macros are: + + * For providing a substitute for a function that is missing on some + platforms, but is declared and works fine on the platforms on which + it exists: + + #if @GNULIB_FOO@ + # if !@HAVE_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on all platforms, + but is broken/insufficient and needs to be replaced on some platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on some platforms + but is broken/insufficient and needs to be replaced on some of them and + is additionally either missing or undeclared on some other platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + # if !@HAVE_FOO@ or if !@HAVE_DECL_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif +*/ + +/* _GL_EXTERN_C declaration; + performs the declaration with C linkage. */ +#if defined __cplusplus +# define _GL_EXTERN_C extern "C" +#else +# define _GL_EXTERN_C extern +#endif + +/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes); + declares a replacement function, named rpl_func, with the given prototype, + consisting of return type, parameters, and attributes. + Example: + _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...) + _GL_ARG_NONNULL ((1))); + */ +#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \ + _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes) +#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C rettype rpl_func parameters_and_attributes + +/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes); + declares the system function, named func, with the given prototype, + consisting of return type, parameters, and attributes. + Example: + _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...) + _GL_ARG_NONNULL ((1))); + */ +#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C rettype func parameters_and_attributes + +/* _GL_CXXALIAS_RPL (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to rpl_func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); + + Wrapping rpl_func in an object with an inline conversion operator + avoids a reference to rpl_func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#define _GL_CXXALIAS_RPL(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters) +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::rpl_func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters); + is like _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters); + except that the C function rpl_func may have a slightly different + declaration. A cast is used to silence the "invalid conversion" error + that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast<type>(::rpl_func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to the system provided function func, if GNULIB_NAMESPACE + is defined. + Example: + _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); + + Wrapping func in an object with an inline conversion operator + avoids a reference to func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast<type>(::func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function is picked among a set of overloaded functions, + namely the one with rettype2 and parameters2. Two consecutive casts + are used to silence the "cannot find a match" and "invalid conversion" + errors that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE + /* The outer cast must be a reinterpret_cast. + The inner cast: When the function is defined as a set of overloaded + functions, it works as a static_cast<>, choosing the designated variant. + When the function is defined as a single variant, it works as a + reinterpret_cast<>. The parenthesized cast syntax works both ways. */ +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast<type>((rettype2 (*) parameters2)(::func)); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN (func); + causes a warning to be emitted when ::func is used but not when + GNULIB_NAMESPACE::func is used. func must be defined without overloaded + variants. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN(func) \ + _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN_1(func,namespace) \ + _GL_CXXALIASWARN_2 (func, namespace) +/* To work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>, + we enable the warning only when not optimizing. */ +# if !__OPTIMIZE__ +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_WARN_ON_USE (func, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +# define _GL_CXXALIASWARN_2(func,namespace) \ + extern __typeof__ (func) func +# else +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN(func) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes); + causes a warning to be emitted when the given overloaded variant of ::func + is used but not when GNULIB_NAMESPACE::func is used. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \ + GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \ + _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace) +/* To work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>, + we enable the warning only when not optimizing. */ +# if !__OPTIMIZE__ +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# else +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +#endif /* _GL_CXXDEFS_H */ diff -Nru gdb-9.1/gnulib/import/cdefs.h gdb-10.2/gnulib/import/cdefs.h --- gdb-9.1/gnulib/import/cdefs.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/cdefs.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,514 @@ +/* Copyright (C) 1992-2020 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 3 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#ifndef _SYS_CDEFS_H +#define _SYS_CDEFS_H 1 + +/* We are almost always included from features.h. */ +#ifndef _FEATURES_H +# include <features.h> +#endif + +/* The GNU libc does not support any K&R compilers or the traditional mode + of ISO C compilers anymore. Check for some of the combinations not + anymore supported. */ +#if defined __GNUC__ && !defined __STDC__ +# error "You need a ISO C conforming compiler to use the glibc headers" +#endif + +/* Some user header file might have defined this before. */ +#undef __P +#undef __PMT + +#ifdef __GNUC__ + +/* All functions, except those with callbacks or those that + synchronize memory, are leaf functions. */ +# if __GNUC_PREREQ (4, 6) && !defined _LIBC +# define __LEAF , __leaf__ +# define __LEAF_ATTR __attribute__ ((__leaf__)) +# else +# define __LEAF +# define __LEAF_ATTR +# endif + +/* GCC can always grok prototypes. For C++ programs we add throw() + to help it optimize the function calls. But this works only with + gcc 2.8.x and egcs. For gcc 3.2 and up we even mark C functions + as non-throwing using a function attribute since programs can use + the -fexceptions options for C code as well. */ +# if !defined __cplusplus && __GNUC_PREREQ (3, 3) +# define __THROW __attribute__ ((__nothrow__ __LEAF)) +# define __THROWNL __attribute__ ((__nothrow__)) +# define __NTH(fct) __attribute__ ((__nothrow__ __LEAF)) fct +# define __NTHNL(fct) __attribute__ ((__nothrow__)) fct +# else +# if defined __cplusplus && __GNUC_PREREQ (2,8) +# define __THROW throw () +# define __THROWNL throw () +# define __NTH(fct) __LEAF_ATTR fct throw () +# define __NTHNL(fct) fct throw () +# else +# define __THROW +# define __THROWNL +# define __NTH(fct) fct +# define __NTHNL(fct) fct +# endif +# endif + +#else /* Not GCC. */ + +# if (defined __cplusplus \ + || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L)) +# define __inline inline +# else +# define __inline /* No inline functions. */ +# endif + +# define __THROW +# define __THROWNL +# define __NTH(fct) fct + +#endif /* GCC. */ + +/* Compilers that are not clang may object to + #if defined __clang__ && __has_extension(...) + even though they do not need to evaluate the right-hand side of the &&. */ +#if defined __clang__ && defined __has_extension +# define __glibc_clang_has_extension(ext) __has_extension (ext) +#else +# define __glibc_clang_has_extension(ext) 0 +#endif + +/* These two macros are not used in glibc anymore. They are kept here + only because some other projects expect the macros to be defined. */ +#define __P(args) args +#define __PMT(args) args + +/* For these things, GCC behaves the ANSI way normally, + and the non-ANSI way under -traditional. */ + +#define __CONCAT(x,y) x ## y +#define __STRING(x) #x + +/* This is not a typedef so `const __ptr_t' does the right thing. */ +#define __ptr_t void * + + +/* C++ needs to know that types and declarations are C, not C++. */ +#ifdef __cplusplus +# define __BEGIN_DECLS extern "C" { +# define __END_DECLS } +#else +# define __BEGIN_DECLS +# define __END_DECLS +#endif + + +/* Fortify support. */ +#define __bos(ptr) __builtin_object_size (ptr, __USE_FORTIFY_LEVEL > 1) +#define __bos0(ptr) __builtin_object_size (ptr, 0) + +#if __GNUC_PREREQ (4,3) +# define __warndecl(name, msg) \ + extern void name (void) __attribute__((__warning__ (msg))) +# define __warnattr(msg) __attribute__((__warning__ (msg))) +# define __errordecl(name, msg) \ + extern void name (void) __attribute__((__error__ (msg))) +#else +# define __warndecl(name, msg) extern void name (void) +# define __warnattr(msg) +# define __errordecl(name, msg) extern void name (void) +#endif + +/* Support for flexible arrays. + Headers that should use flexible arrays only if they're "real" + (e.g. only if they won't affect sizeof()) should test + #if __glibc_c99_flexarr_available. */ +#if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L && !defined __HP_cc +# define __flexarr [] +# define __glibc_c99_flexarr_available 1 +#elif __GNUC_PREREQ (2,97) +/* GCC 2.97 supports C99 flexible array members as an extension, + even when in C89 mode or compiling C++ (any version). */ +# define __flexarr [] +# define __glibc_c99_flexarr_available 1 +#elif defined __GNUC__ +/* Pre-2.97 GCC did not support C99 flexible arrays but did have + an equivalent extension with slightly different notation. */ +# define __flexarr [0] +# define __glibc_c99_flexarr_available 1 +#else +/* Some other non-C99 compiler. Approximate with [1]. */ +# define __flexarr [1] +# define __glibc_c99_flexarr_available 0 +#endif + + +/* __asm__ ("xyz") is used throughout the headers to rename functions + at the assembly language level. This is wrapped by the __REDIRECT + macro, in order to support compilers that can do this some other + way. When compilers don't support asm-names at all, we have to do + preprocessor tricks instead (which don't have exactly the right + semantics, but it's the best we can do). + + Example: + int __REDIRECT(setpgrp, (__pid_t pid, __pid_t pgrp), setpgid); */ + +#if defined __GNUC__ && __GNUC__ >= 2 + +# define __REDIRECT(name, proto, alias) name proto __asm__ (__ASMNAME (#alias)) +# ifdef __cplusplus +# define __REDIRECT_NTH(name, proto, alias) \ + name proto __THROW __asm__ (__ASMNAME (#alias)) +# define __REDIRECT_NTHNL(name, proto, alias) \ + name proto __THROWNL __asm__ (__ASMNAME (#alias)) +# else +# define __REDIRECT_NTH(name, proto, alias) \ + name proto __asm__ (__ASMNAME (#alias)) __THROW +# define __REDIRECT_NTHNL(name, proto, alias) \ + name proto __asm__ (__ASMNAME (#alias)) __THROWNL +# endif +# define __ASMNAME(cname) __ASMNAME2 (__USER_LABEL_PREFIX__, cname) +# define __ASMNAME2(prefix, cname) __STRING (prefix) cname + +/* +#elif __SOME_OTHER_COMPILER__ + +# define __REDIRECT(name, proto, alias) name proto; \ + _Pragma("let " #name " = " #alias) +*/ +#endif + +/* GCC has various useful declarations that can be made with the + `__attribute__' syntax. All of the ways we use this do fine if + they are omitted for compilers that don't understand it. */ +#if !defined __GNUC__ || __GNUC__ < 2 +# define __attribute__(xyz) /* Ignore */ +#endif + +/* At some point during the gcc 2.96 development the `malloc' attribute + for functions was introduced. We don't want to use it unconditionally + (although this would be possible) since it generates warnings. */ +#if __GNUC_PREREQ (2,96) +# define __attribute_malloc__ __attribute__ ((__malloc__)) +#else +# define __attribute_malloc__ /* Ignore */ +#endif + +/* Tell the compiler which arguments to an allocation function + indicate the size of the allocation. */ +#if __GNUC_PREREQ (4, 3) +# define __attribute_alloc_size__(params) \ + __attribute__ ((__alloc_size__ params)) +#else +# define __attribute_alloc_size__(params) /* Ignore. */ +#endif + +/* At some point during the gcc 2.96 development the `pure' attribute + for functions was introduced. We don't want to use it unconditionally + (although this would be possible) since it generates warnings. */ +#if __GNUC_PREREQ (2,96) +# define __attribute_pure__ __attribute__ ((__pure__)) +#else +# define __attribute_pure__ /* Ignore */ +#endif + +/* This declaration tells the compiler that the value is constant. */ +#if __GNUC_PREREQ (2,5) +# define __attribute_const__ __attribute__ ((__const__)) +#else +# define __attribute_const__ /* Ignore */ +#endif + +/* At some point during the gcc 3.1 development the `used' attribute + for functions was introduced. We don't want to use it unconditionally + (although this would be possible) since it generates warnings. */ +#if __GNUC_PREREQ (3,1) +# define __attribute_used__ __attribute__ ((__used__)) +# define __attribute_noinline__ __attribute__ ((__noinline__)) +#else +# define __attribute_used__ __attribute__ ((__unused__)) +# define __attribute_noinline__ /* Ignore */ +#endif + +/* Since version 3.2, gcc allows marking deprecated functions. */ +#if __GNUC_PREREQ (3,2) +# define __attribute_deprecated__ __attribute__ ((__deprecated__)) +#else +# define __attribute_deprecated__ /* Ignore */ +#endif + +/* Since version 4.5, gcc also allows one to specify the message printed + when a deprecated function is used. clang claims to be gcc 4.2, but + may also support this feature. */ +#if __GNUC_PREREQ (4,5) || \ + __glibc_clang_has_extension (__attribute_deprecated_with_message__) +# define __attribute_deprecated_msg__(msg) \ + __attribute__ ((__deprecated__ (msg))) +#else +# define __attribute_deprecated_msg__(msg) __attribute_deprecated__ +#endif + +/* At some point during the gcc 2.8 development the `format_arg' attribute + for functions was introduced. We don't want to use it unconditionally + (although this would be possible) since it generates warnings. + If several `format_arg' attributes are given for the same function, in + gcc-3.0 and older, all but the last one are ignored. In newer gccs, + all designated arguments are considered. */ +#if __GNUC_PREREQ (2,8) +# define __attribute_format_arg__(x) __attribute__ ((__format_arg__ (x))) +#else +# define __attribute_format_arg__(x) /* Ignore */ +#endif + +/* At some point during the gcc 2.97 development the `strfmon' format + attribute for functions was introduced. We don't want to use it + unconditionally (although this would be possible) since it + generates warnings. */ +#if __GNUC_PREREQ (2,97) +# define __attribute_format_strfmon__(a,b) \ + __attribute__ ((__format__ (__strfmon__, a, b))) +#else +# define __attribute_format_strfmon__(a,b) /* Ignore */ +#endif + +/* The nonnull function attribute marks pointer parameters that + must not be NULL. Do not define __nonnull if it is already defined, + for portability when this file is used in Gnulib. */ +#ifndef __nonnull +# if __GNUC_PREREQ (3,3) +# define __nonnull(params) __attribute__ ((__nonnull__ params)) +# else +# define __nonnull(params) +# endif +#endif + +/* If fortification mode, we warn about unused results of certain + function calls which can lead to problems. */ +#if __GNUC_PREREQ (3,4) +# define __attribute_warn_unused_result__ \ + __attribute__ ((__warn_unused_result__)) +# if defined __USE_FORTIFY_LEVEL && __USE_FORTIFY_LEVEL > 0 +# define __wur __attribute_warn_unused_result__ +# endif +#else +# define __attribute_warn_unused_result__ /* empty */ +#endif +#ifndef __wur +# define __wur /* Ignore */ +#endif + +/* Forces a function to be always inlined. */ +#if __GNUC_PREREQ (3,2) +/* The Linux kernel defines __always_inline in stddef.h (283d7573), and + it conflicts with this definition. Therefore undefine it first to + allow either header to be included first. */ +# undef __always_inline +# define __always_inline __inline __attribute__ ((__always_inline__)) +#else +# undef __always_inline +# define __always_inline __inline +#endif + +/* Associate error messages with the source location of the call site rather + than with the source location inside the function. */ +#if __GNUC_PREREQ (4,3) +# define __attribute_artificial__ __attribute__ ((__artificial__)) +#else +# define __attribute_artificial__ /* Ignore */ +#endif + +/* GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99 + inline semantics, unless -fgnu89-inline is used. Using __GNUC_STDC_INLINE__ + or __GNUC_GNU_INLINE is not a good enough check for gcc because gcc versions + older than 4.3 may define these macros and still not guarantee GNU inlining + semantics. + + clang++ identifies itself as gcc-4.2, but has support for GNU inlining + semantics, that can be checked for by using the __GNUC_STDC_INLINE_ and + __GNUC_GNU_INLINE__ macro definitions. */ +#if (!defined __cplusplus || __GNUC_PREREQ (4,3) \ + || (defined __clang__ && (defined __GNUC_STDC_INLINE__ \ + || defined __GNUC_GNU_INLINE__))) +# if defined __GNUC_STDC_INLINE__ || defined __cplusplus +# define __extern_inline extern __inline __attribute__ ((__gnu_inline__)) +# define __extern_always_inline \ + extern __always_inline __attribute__ ((__gnu_inline__)) +# else +# define __extern_inline extern __inline +# define __extern_always_inline extern __always_inline +# endif +#endif + +#ifdef __extern_always_inline +# define __fortify_function __extern_always_inline __attribute_artificial__ +#endif + +/* GCC 4.3 and above allow passing all anonymous arguments of an + __extern_always_inline function to some other vararg function. */ +#if __GNUC_PREREQ (4,3) +# define __va_arg_pack() __builtin_va_arg_pack () +# define __va_arg_pack_len() __builtin_va_arg_pack_len () +#endif + +/* It is possible to compile containing GCC extensions even if GCC is + run in pedantic mode if the uses are carefully marked using the + `__extension__' keyword. But this is not generally available before + version 2.8. */ +#if !__GNUC_PREREQ (2,8) +# define __extension__ /* Ignore */ +#endif + +/* __restrict is known in EGCS 1.2 and above. */ +#if !__GNUC_PREREQ (2,92) +# if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L +# define __restrict restrict +# else +# define __restrict /* Ignore */ +# endif +#endif + +/* ISO C99 also allows to declare arrays as non-overlapping. The syntax is + array_name[restrict] + GCC 3.1 supports this. */ +#if __GNUC_PREREQ (3,1) && !defined __GNUG__ +# define __restrict_arr __restrict +#else +# ifdef __GNUC__ +# define __restrict_arr /* Not supported in old GCC. */ +# else +# if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L +# define __restrict_arr restrict +# else +/* Some other non-C99 compiler. */ +# define __restrict_arr /* Not supported. */ +# endif +# endif +#endif + +#if __GNUC__ >= 3 +# define __glibc_unlikely(cond) __builtin_expect ((cond), 0) +# define __glibc_likely(cond) __builtin_expect ((cond), 1) +#else +# define __glibc_unlikely(cond) (cond) +# define __glibc_likely(cond) (cond) +#endif + +#ifdef __has_attribute +# define __glibc_has_attribute(attr) __has_attribute (attr) +#else +# define __glibc_has_attribute(attr) 0 +#endif + +#if (!defined _Noreturn \ + && (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) < 201112 \ + && !__GNUC_PREREQ (4,7)) +# if __GNUC_PREREQ (2,8) +# define _Noreturn __attribute__ ((__noreturn__)) +# else +# define _Noreturn +# endif +#endif + +#if __GNUC_PREREQ (8, 0) +/* Describes a char array whose address can safely be passed as the first + argument to strncpy and strncat, as the char array is not necessarily + a NUL-terminated string. */ +# define __attribute_nonstring__ __attribute__ ((__nonstring__)) +#else +# define __attribute_nonstring__ +#endif + +#if (!defined _Static_assert && !defined __cplusplus \ + && (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) < 201112 \ + && (!__GNUC_PREREQ (4, 6) || defined __STRICT_ANSI__)) +# define _Static_assert(expr, diagnostic) \ + extern int (*__Static_assert_function (void)) \ + [!!sizeof (struct { int __error_if_negative: (expr) ? 2 : -1; })] +#endif + +/* The #ifndef lets Gnulib avoid including these on non-glibc + platforms, where the includes typically do not exist. */ +#ifndef __WORDSIZE +# include <bits/wordsize.h> +# include <bits/long-double.h> +#endif + +#if defined __LONG_DOUBLE_MATH_OPTIONAL && defined __NO_LONG_DOUBLE_MATH +# define __LDBL_COMPAT 1 +# ifdef __REDIRECT +# define __LDBL_REDIR1(name, proto, alias) __REDIRECT (name, proto, alias) +# define __LDBL_REDIR(name, proto) \ + __LDBL_REDIR1 (name, proto, __nldbl_##name) +# define __LDBL_REDIR1_NTH(name, proto, alias) __REDIRECT_NTH (name, proto, alias) +# define __LDBL_REDIR_NTH(name, proto) \ + __LDBL_REDIR1_NTH (name, proto, __nldbl_##name) +# define __LDBL_REDIR1_DECL(name, alias) \ + extern __typeof (name) name __asm (__ASMNAME (#alias)); +# define __LDBL_REDIR_DECL(name) \ + extern __typeof (name) name __asm (__ASMNAME ("__nldbl_" #name)); +# define __REDIRECT_LDBL(name, proto, alias) \ + __LDBL_REDIR1 (name, proto, __nldbl_##alias) +# define __REDIRECT_NTH_LDBL(name, proto, alias) \ + __LDBL_REDIR1_NTH (name, proto, __nldbl_##alias) +# endif +#endif +#if !defined __LDBL_COMPAT || !defined __REDIRECT +# define __LDBL_REDIR1(name, proto, alias) name proto +# define __LDBL_REDIR(name, proto) name proto +# define __LDBL_REDIR1_NTH(name, proto, alias) name proto __THROW +# define __LDBL_REDIR_NTH(name, proto) name proto __THROW +# define __LDBL_REDIR_DECL(name) +# ifdef __REDIRECT +# define __REDIRECT_LDBL(name, proto, alias) __REDIRECT (name, proto, alias) +# define __REDIRECT_NTH_LDBL(name, proto, alias) \ + __REDIRECT_NTH (name, proto, alias) +# endif +#endif + +/* __glibc_macro_warning (MESSAGE) issues warning MESSAGE. This is + intended for use in preprocessor macros. + + Note: MESSAGE must be a _single_ string; concatenation of string + literals is not supported. */ +#if __GNUC_PREREQ (4,8) || __glibc_clang_prereq (3,5) +# define __glibc_macro_warning1(message) _Pragma (#message) +# define __glibc_macro_warning(message) \ + __glibc_macro_warning1 (GCC warning message) +#else +# define __glibc_macro_warning(msg) +#endif + +/* Generic selection (ISO C11) is a C-only feature, available in GCC + since version 4.9. Previous versions do not provide generic + selection, even though they might set __STDC_VERSION__ to 201112L, + when in -std=c11 mode. Thus, we must check for !defined __GNUC__ + when testing __STDC_VERSION__ for generic selection support. + On the other hand, Clang also defines __GNUC__, so a clang-specific + check is required to enable the use of generic selection. */ +#if !defined __cplusplus \ + && (__GNUC_PREREQ (4, 9) \ + || __glibc_clang_has_extension (c_generic_selections) \ + || (!defined __GNUC__ && defined __STDC_VERSION__ \ + && __STDC_VERSION__ >= 201112L)) +# define __HAVE_GENERIC_SELECTION 1 +#else +# define __HAVE_GENERIC_SELECTION 0 +#endif + +#endif /* sys/cdefs.h */ diff -Nru gdb-9.1/gnulib/import/chdir-long.c gdb-10.2/gnulib/import/chdir-long.c --- gdb-9.1/gnulib/import/chdir-long.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/chdir-long.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* provide a chdir function that tries not to fail due to ENAMETOOLONG - Copyright (C) 2004-2016 Free Software Foundation, Inc. + Copyright (C) 2004-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -12,7 +12,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* written by Jim Meyering */ diff -Nru gdb-9.1/gnulib/import/chdir-long.h gdb-10.2/gnulib/import/chdir-long.h --- gdb-9.1/gnulib/import/chdir-long.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/chdir-long.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* provide a chdir function that tries not to fail due to ENAMETOOLONG - Copyright (C) 2004-2005, 2009-2016 Free Software Foundation, Inc. + Copyright (C) 2004-2005, 2009-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -12,7 +12,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Jim Meyering. */ diff -Nru gdb-9.1/gnulib/import/cloexec.c gdb-10.2/gnulib/import/cloexec.c --- gdb-9.1/gnulib/import/cloexec.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/cloexec.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ -/* closexec.c - set or clear the close-on-exec descriptor flag +/* cloexec.c - set or clear the close-on-exec descriptor flag - Copyright (C) 1991, 2004-2006, 2009-2016 Free Software Foundation, Inc. + Copyright (C) 1991, 2004-2006, 2009-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -13,7 +13,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. + along with this program. If not, see <https://www.gnu.org/licenses/>. The code is taken from glibc/manual/llio.texi */ diff -Nru gdb-9.1/gnulib/import/cloexec.h gdb-10.2/gnulib/import/cloexec.h --- gdb-9.1/gnulib/import/cloexec.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/cloexec.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ -/* closexec.c - set or clear the close-on-exec descriptor flag +/* cloexec.c - set or clear the close-on-exec descriptor flag - Copyright (C) 2004, 2009-2016 Free Software Foundation, Inc. + Copyright (C) 2004, 2009-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -13,7 +13,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. + along with this program. If not, see <https://www.gnu.org/licenses/>. */ diff -Nru gdb-9.1/gnulib/import/close.c gdb-10.2/gnulib/import/close.c --- gdb-9.1/gnulib/import/close.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/close.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* close replacement. - Copyright (C) 2008-2016 Free Software Foundation, Inc. + Copyright (C) 2008-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -12,7 +12,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> @@ -22,7 +22,9 @@ #include <errno.h> #include "fd-hook.h" -#include "msvc-inval.h" +#if HAVE_MSVC_INVALID_PARAMETER_HANDLER +# include "msvc-inval.h" +#endif #undef close diff -Nru gdb-9.1/gnulib/import/closedir.c gdb-10.2/gnulib/import/closedir.c --- gdb-9.1/gnulib/import/closedir.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/closedir.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Stop reading the entries of a directory. - Copyright (C) 2006-2016 Free Software Foundation, Inc. + Copyright (C) 2006-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -12,7 +12,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> diff -Nru gdb-9.1/gnulib/import/config.charset gdb-10.2/gnulib/import/config.charset --- gdb-9.1/gnulib/import/config.charset 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/config.charset 1970-01-01 00:00:00.000000000 +0000 @@ -1,682 +0,0 @@ -#! /bin/sh -# Output a system dependent table of character encoding aliases. -# -# Copyright (C) 2000-2004, 2006-2016 Free Software Foundation, Inc. -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3, or (at your option) -# any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, see <http://www.gnu.org/licenses/>. -# -# The table consists of lines of the form -# ALIAS CANONICAL -# -# ALIAS is the (system dependent) result of "nl_langinfo (CODESET)". -# ALIAS is compared in a case sensitive way. -# -# CANONICAL is the GNU canonical name for this character encoding. -# It must be an encoding supported by libiconv. Support by GNU libc is -# also desirable. CANONICAL is case insensitive. Usually an upper case -# MIME charset name is preferred. -# The current list of GNU canonical charset names is as follows. -# -# name MIME? used by which systems -# (darwin = Mac OS X, woe32 = native Windows) -# -# ASCII, ANSI_X3.4-1968 glibc solaris freebsd netbsd darwin cygwin -# ISO-8859-1 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin -# ISO-8859-2 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin -# ISO-8859-3 Y glibc solaris cygwin -# ISO-8859-4 Y osf solaris freebsd netbsd openbsd darwin -# ISO-8859-5 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin -# ISO-8859-6 Y glibc aix hpux solaris cygwin -# ISO-8859-7 Y glibc aix hpux irix osf solaris netbsd openbsd darwin cygwin -# ISO-8859-8 Y glibc aix hpux osf solaris cygwin -# ISO-8859-9 Y glibc aix hpux irix osf solaris darwin cygwin -# ISO-8859-13 glibc netbsd openbsd darwin cygwin -# ISO-8859-14 glibc cygwin -# ISO-8859-15 glibc aix osf solaris freebsd netbsd openbsd darwin cygwin -# KOI8-R Y glibc solaris freebsd netbsd openbsd darwin -# KOI8-U Y glibc freebsd netbsd openbsd darwin cygwin -# KOI8-T glibc -# CP437 dos -# CP775 dos -# CP850 aix osf dos -# CP852 dos -# CP855 dos -# CP856 aix -# CP857 dos -# CP861 dos -# CP862 dos -# CP864 dos -# CP865 dos -# CP866 freebsd netbsd openbsd darwin dos -# CP869 dos -# CP874 woe32 dos -# CP922 aix -# CP932 aix cygwin woe32 dos -# CP943 aix -# CP949 osf darwin woe32 dos -# CP950 woe32 dos -# CP1046 aix -# CP1124 aix -# CP1125 dos -# CP1129 aix -# CP1131 darwin -# CP1250 woe32 -# CP1251 glibc solaris netbsd openbsd darwin cygwin woe32 -# CP1252 aix woe32 -# CP1253 woe32 -# CP1254 woe32 -# CP1255 glibc woe32 -# CP1256 woe32 -# CP1257 woe32 -# GB2312 Y glibc aix hpux irix solaris freebsd netbsd darwin -# EUC-JP Y glibc aix hpux irix osf solaris freebsd netbsd darwin -# EUC-KR Y glibc aix hpux irix osf solaris freebsd netbsd darwin cygwin -# EUC-TW glibc aix hpux irix osf solaris netbsd -# BIG5 Y glibc aix hpux osf solaris freebsd netbsd darwin cygwin -# BIG5-HKSCS glibc solaris darwin -# GBK glibc aix osf solaris darwin cygwin woe32 dos -# GB18030 glibc solaris netbsd darwin -# SHIFT_JIS Y hpux osf solaris freebsd netbsd darwin -# JOHAB glibc solaris woe32 -# TIS-620 glibc aix hpux osf solaris cygwin -# VISCII Y glibc -# TCVN5712-1 glibc -# ARMSCII-8 glibc darwin -# GEORGIAN-PS glibc cygwin -# PT154 glibc -# HP-ROMAN8 hpux -# HP-ARABIC8 hpux -# HP-GREEK8 hpux -# HP-HEBREW8 hpux -# HP-TURKISH8 hpux -# HP-KANA8 hpux -# DEC-KANJI osf -# DEC-HANYU osf -# UTF-8 Y glibc aix hpux osf solaris netbsd darwin cygwin -# -# Note: Names which are not marked as being a MIME name should not be used in -# Internet protocols for information interchange (mail, news, etc.). -# -# Note: ASCII and ANSI_X3.4-1968 are synonymous canonical names. Applications -# must understand both names and treat them as equivalent. -# -# The first argument passed to this file is the canonical host specification, -# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM -# or -# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM - -host="$1" -os=`echo "$host" | sed -e 's/^[^-]*-[^-]*-\(.*\)$/\1/'` -echo "# This file contains a table of character encoding aliases," -echo "# suitable for operating system '${os}'." -echo "# It was automatically generated from config.charset." -# List of references, updated during installation: -echo "# Packages using this file: " -case "$os" in - linux-gnulibc1*) - # Linux libc5 doesn't have nl_langinfo(CODESET); therefore - # localcharset.c falls back to using the full locale name - # from the environment variables. - echo "C ASCII" - echo "POSIX ASCII" - for l in af af_ZA ca ca_ES da da_DK de de_AT de_BE de_CH de_DE de_LU \ - en en_AU en_BW en_CA en_DK en_GB en_IE en_NZ en_US en_ZA \ - en_ZW es es_AR es_BO es_CL es_CO es_DO es_EC es_ES es_GT \ - es_HN es_MX es_PA es_PE es_PY es_SV es_US es_UY es_VE et \ - et_EE eu eu_ES fi fi_FI fo fo_FO fr fr_BE fr_CA fr_CH fr_FR \ - fr_LU ga ga_IE gl gl_ES id id_ID in in_ID is is_IS it it_CH \ - it_IT kl kl_GL nl nl_BE nl_NL no no_NO pt pt_BR pt_PT sv \ - sv_FI sv_SE; do - echo "$l ISO-8859-1" - echo "$l.iso-8859-1 ISO-8859-1" - echo "$l.iso-8859-15 ISO-8859-15" - echo "$l.iso-8859-15@euro ISO-8859-15" - echo "$l@euro ISO-8859-15" - echo "$l.cp-437 CP437" - echo "$l.cp-850 CP850" - echo "$l.cp-1252 CP1252" - echo "$l.cp-1252@euro CP1252" - #echo "$l.atari-st ATARI-ST" # not a commonly used encoding - echo "$l.utf-8 UTF-8" - echo "$l.utf-8@euro UTF-8" - done - for l in cs cs_CZ hr hr_HR hu hu_HU pl pl_PL ro ro_RO sk sk_SK sl \ - sl_SI sr sr_CS sr_YU; do - echo "$l ISO-8859-2" - echo "$l.iso-8859-2 ISO-8859-2" - echo "$l.cp-852 CP852" - echo "$l.cp-1250 CP1250" - echo "$l.utf-8 UTF-8" - done - for l in mk mk_MK ru ru_RU; do - echo "$l ISO-8859-5" - echo "$l.iso-8859-5 ISO-8859-5" - echo "$l.koi8-r KOI8-R" - echo "$l.cp-866 CP866" - echo "$l.cp-1251 CP1251" - echo "$l.utf-8 UTF-8" - done - for l in ar ar_SA; do - echo "$l ISO-8859-6" - echo "$l.iso-8859-6 ISO-8859-6" - echo "$l.cp-864 CP864" - #echo "$l.cp-868 CP868" # not a commonly used encoding - echo "$l.cp-1256 CP1256" - echo "$l.utf-8 UTF-8" - done - for l in el el_GR gr gr_GR; do - echo "$l ISO-8859-7" - echo "$l.iso-8859-7 ISO-8859-7" - echo "$l.cp-869 CP869" - echo "$l.cp-1253 CP1253" - echo "$l.cp-1253@euro CP1253" - echo "$l.utf-8 UTF-8" - echo "$l.utf-8@euro UTF-8" - done - for l in he he_IL iw iw_IL; do - echo "$l ISO-8859-8" - echo "$l.iso-8859-8 ISO-8859-8" - echo "$l.cp-862 CP862" - echo "$l.cp-1255 CP1255" - echo "$l.utf-8 UTF-8" - done - for l in tr tr_TR; do - echo "$l ISO-8859-9" - echo "$l.iso-8859-9 ISO-8859-9" - echo "$l.cp-857 CP857" - echo "$l.cp-1254 CP1254" - echo "$l.utf-8 UTF-8" - done - for l in lt lt_LT lv lv_LV; do - #echo "$l BALTIC" # not a commonly used encoding, wrong encoding name - echo "$l ISO-8859-13" - done - for l in ru_UA uk uk_UA; do - echo "$l KOI8-U" - done - for l in zh zh_CN; do - #echo "$l GB_2312-80" # not a commonly used encoding, wrong encoding name - echo "$l GB2312" - done - for l in ja ja_JP ja_JP.EUC; do - echo "$l EUC-JP" - done - for l in ko ko_KR; do - echo "$l EUC-KR" - done - for l in th th_TH; do - echo "$l TIS-620" - done - for l in fa fa_IR; do - #echo "$l ISIRI-3342" # a broken encoding - echo "$l.utf-8 UTF-8" - done - ;; - linux* | *-gnu*) - # With glibc-2.1 or newer, we don't need any canonicalization, - # because glibc has iconv and both glibc and libiconv support all - # GNU canonical names directly. Therefore, the Makefile does not - # need to install the alias file at all. - # The following applies only to glibc-2.0.x and older libcs. - echo "ISO_646.IRV:1983 ASCII" - ;; - aix*) - echo "ISO8859-1 ISO-8859-1" - echo "ISO8859-2 ISO-8859-2" - echo "ISO8859-5 ISO-8859-5" - echo "ISO8859-6 ISO-8859-6" - echo "ISO8859-7 ISO-8859-7" - echo "ISO8859-8 ISO-8859-8" - echo "ISO8859-9 ISO-8859-9" - echo "ISO8859-15 ISO-8859-15" - echo "IBM-850 CP850" - echo "IBM-856 CP856" - echo "IBM-921 ISO-8859-13" - echo "IBM-922 CP922" - echo "IBM-932 CP932" - echo "IBM-943 CP943" - echo "IBM-1046 CP1046" - echo "IBM-1124 CP1124" - echo "IBM-1129 CP1129" - echo "IBM-1252 CP1252" - echo "IBM-eucCN GB2312" - echo "IBM-eucJP EUC-JP" - echo "IBM-eucKR EUC-KR" - echo "IBM-eucTW EUC-TW" - echo "big5 BIG5" - echo "GBK GBK" - echo "TIS-620 TIS-620" - echo "UTF-8 UTF-8" - ;; - hpux*) - echo "iso88591 ISO-8859-1" - echo "iso88592 ISO-8859-2" - echo "iso88595 ISO-8859-5" - echo "iso88596 ISO-8859-6" - echo "iso88597 ISO-8859-7" - echo "iso88598 ISO-8859-8" - echo "iso88599 ISO-8859-9" - echo "iso885915 ISO-8859-15" - echo "roman8 HP-ROMAN8" - echo "arabic8 HP-ARABIC8" - echo "greek8 HP-GREEK8" - echo "hebrew8 HP-HEBREW8" - echo "turkish8 HP-TURKISH8" - echo "kana8 HP-KANA8" - echo "tis620 TIS-620" - echo "big5 BIG5" - echo "eucJP EUC-JP" - echo "eucKR EUC-KR" - echo "eucTW EUC-TW" - echo "hp15CN GB2312" - #echo "ccdc ?" # what is this? - echo "SJIS SHIFT_JIS" - echo "utf8 UTF-8" - ;; - irix*) - echo "ISO8859-1 ISO-8859-1" - echo "ISO8859-2 ISO-8859-2" - echo "ISO8859-5 ISO-8859-5" - echo "ISO8859-7 ISO-8859-7" - echo "ISO8859-9 ISO-8859-9" - echo "eucCN GB2312" - echo "eucJP EUC-JP" - echo "eucKR EUC-KR" - echo "eucTW EUC-TW" - ;; - osf*) - echo "ISO8859-1 ISO-8859-1" - echo "ISO8859-2 ISO-8859-2" - echo "ISO8859-4 ISO-8859-4" - echo "ISO8859-5 ISO-8859-5" - echo "ISO8859-7 ISO-8859-7" - echo "ISO8859-8 ISO-8859-8" - echo "ISO8859-9 ISO-8859-9" - echo "ISO8859-15 ISO-8859-15" - echo "cp850 CP850" - echo "big5 BIG5" - echo "dechanyu DEC-HANYU" - echo "dechanzi GB2312" - echo "deckanji DEC-KANJI" - echo "deckorean EUC-KR" - echo "eucJP EUC-JP" - echo "eucKR EUC-KR" - echo "eucTW EUC-TW" - echo "GBK GBK" - echo "KSC5601 CP949" - echo "sdeckanji EUC-JP" - echo "SJIS SHIFT_JIS" - echo "TACTIS TIS-620" - echo "UTF-8 UTF-8" - ;; - solaris*) - echo "646 ASCII" - echo "ISO8859-1 ISO-8859-1" - echo "ISO8859-2 ISO-8859-2" - echo "ISO8859-3 ISO-8859-3" - echo "ISO8859-4 ISO-8859-4" - echo "ISO8859-5 ISO-8859-5" - echo "ISO8859-6 ISO-8859-6" - echo "ISO8859-7 ISO-8859-7" - echo "ISO8859-8 ISO-8859-8" - echo "ISO8859-9 ISO-8859-9" - echo "ISO8859-15 ISO-8859-15" - echo "koi8-r KOI8-R" - echo "ansi-1251 CP1251" - echo "BIG5 BIG5" - echo "Big5-HKSCS BIG5-HKSCS" - echo "gb2312 GB2312" - echo "GBK GBK" - echo "GB18030 GB18030" - echo "cns11643 EUC-TW" - echo "5601 EUC-KR" - echo "ko_KR.johap92 JOHAB" - echo "eucJP EUC-JP" - echo "PCK SHIFT_JIS" - echo "TIS620.2533 TIS-620" - #echo "sun_eu_greek ?" # what is this? - echo "UTF-8 UTF-8" - ;; - freebsd*) - # FreeBSD 4.2 doesn't have nl_langinfo(CODESET); therefore - # localcharset.c falls back to using the full locale name - # from the environment variables. - echo "C ASCII" - echo "US-ASCII ASCII" - for l in la_LN lt_LN; do - echo "$l.ASCII ASCII" - done - for l in da_DK de_AT de_CH de_DE en_AU en_CA en_GB en_US es_ES \ - fi_FI fr_BE fr_CA fr_CH fr_FR is_IS it_CH it_IT la_LN \ - lt_LN nl_BE nl_NL no_NO pt_PT sv_SE; do - echo "$l.ISO_8859-1 ISO-8859-1" - echo "$l.DIS_8859-15 ISO-8859-15" - done - for l in cs_CZ hr_HR hu_HU la_LN lt_LN pl_PL sl_SI; do - echo "$l.ISO_8859-2 ISO-8859-2" - done - for l in la_LN lt_LT; do - echo "$l.ISO_8859-4 ISO-8859-4" - done - for l in ru_RU ru_SU; do - echo "$l.KOI8-R KOI8-R" - echo "$l.ISO_8859-5 ISO-8859-5" - echo "$l.CP866 CP866" - done - echo "uk_UA.KOI8-U KOI8-U" - echo "zh_TW.BIG5 BIG5" - echo "zh_TW.Big5 BIG5" - echo "zh_CN.EUC GB2312" - echo "ja_JP.EUC EUC-JP" - echo "ja_JP.SJIS SHIFT_JIS" - echo "ja_JP.Shift_JIS SHIFT_JIS" - echo "ko_KR.EUC EUC-KR" - ;; - netbsd*) - echo "646 ASCII" - echo "ISO8859-1 ISO-8859-1" - echo "ISO8859-2 ISO-8859-2" - echo "ISO8859-4 ISO-8859-4" - echo "ISO8859-5 ISO-8859-5" - echo "ISO8859-7 ISO-8859-7" - echo "ISO8859-13 ISO-8859-13" - echo "ISO8859-15 ISO-8859-15" - echo "eucCN GB2312" - echo "eucJP EUC-JP" - echo "eucKR EUC-KR" - echo "eucTW EUC-TW" - echo "BIG5 BIG5" - echo "SJIS SHIFT_JIS" - ;; - openbsd*) - echo "646 ASCII" - echo "ISO8859-1 ISO-8859-1" - echo "ISO8859-2 ISO-8859-2" - echo "ISO8859-4 ISO-8859-4" - echo "ISO8859-5 ISO-8859-5" - echo "ISO8859-7 ISO-8859-7" - echo "ISO8859-13 ISO-8859-13" - echo "ISO8859-15 ISO-8859-15" - ;; - darwin[56]*) - # Darwin 6.8 doesn't have nl_langinfo(CODESET); therefore - # localcharset.c falls back to using the full locale name - # from the environment variables. - echo "C ASCII" - for l in en_AU en_CA en_GB en_US la_LN; do - echo "$l.US-ASCII ASCII" - done - for l in da_DK de_AT de_CH de_DE en_AU en_CA en_GB en_US es_ES \ - fi_FI fr_BE fr_CA fr_CH fr_FR is_IS it_CH it_IT nl_BE \ - nl_NL no_NO pt_PT sv_SE; do - echo "$l ISO-8859-1" - echo "$l.ISO8859-1 ISO-8859-1" - echo "$l.ISO8859-15 ISO-8859-15" - done - for l in la_LN; do - echo "$l.ISO8859-1 ISO-8859-1" - echo "$l.ISO8859-15 ISO-8859-15" - done - for l in cs_CZ hr_HR hu_HU la_LN pl_PL sl_SI; do - echo "$l.ISO8859-2 ISO-8859-2" - done - for l in la_LN lt_LT; do - echo "$l.ISO8859-4 ISO-8859-4" - done - for l in ru_RU; do - echo "$l.KOI8-R KOI8-R" - echo "$l.ISO8859-5 ISO-8859-5" - echo "$l.CP866 CP866" - done - for l in bg_BG; do - echo "$l.CP1251 CP1251" - done - echo "uk_UA.KOI8-U KOI8-U" - echo "zh_TW.BIG5 BIG5" - echo "zh_TW.Big5 BIG5" - echo "zh_CN.EUC GB2312" - echo "ja_JP.EUC EUC-JP" - echo "ja_JP.SJIS SHIFT_JIS" - echo "ko_KR.EUC EUC-KR" - ;; - darwin*) - # Darwin 7.5 has nl_langinfo(CODESET), but sometimes its value is - # useless: - # - It returns the empty string when LANG is set to a locale of the - # form ll_CC, although ll_CC/LC_CTYPE is a symlink to an UTF-8 - # LC_CTYPE file. - # - The environment variables LANG, LC_CTYPE, LC_ALL are not set by - # the system; nl_langinfo(CODESET) returns "US-ASCII" in this case. - # - The documentation says: - # "... all code that calls BSD system routines should ensure - # that the const *char parameters of these routines are in UTF-8 - # encoding. All BSD system functions expect their string - # parameters to be in UTF-8 encoding and nothing else." - # It also says - # "An additional caveat is that string parameters for files, - # paths, and other file-system entities must be in canonical - # UTF-8. In a canonical UTF-8 Unicode string, all decomposable - # characters are decomposed ..." - # but this is not true: You can pass non-decomposed UTF-8 strings - # to file system functions, and it is the OS which will convert - # them to decomposed UTF-8 before accessing the file system. - # - The Apple Terminal application displays UTF-8 by default. - # - However, other applications are free to use different encodings: - # - xterm uses ISO-8859-1 by default. - # - TextEdit uses MacRoman by default. - # We prefer UTF-8 over decomposed UTF-8-MAC because one should - # minimize the use of decomposed Unicode. Unfortunately, through the - # Darwin file system, decomposed UTF-8 strings are leaked into user - # space nevertheless. - # Then there are also the locales with encodings other than US-ASCII - # and UTF-8. These locales can be occasionally useful to users (e.g. - # when grepping through ISO-8859-1 encoded text files), when all their - # file names are in US-ASCII. - echo "ISO8859-1 ISO-8859-1" - echo "ISO8859-2 ISO-8859-2" - echo "ISO8859-4 ISO-8859-4" - echo "ISO8859-5 ISO-8859-5" - echo "ISO8859-7 ISO-8859-7" - echo "ISO8859-9 ISO-8859-9" - echo "ISO8859-13 ISO-8859-13" - echo "ISO8859-15 ISO-8859-15" - echo "KOI8-R KOI8-R" - echo "KOI8-U KOI8-U" - echo "CP866 CP866" - echo "CP949 CP949" - echo "CP1131 CP1131" - echo "CP1251 CP1251" - echo "eucCN GB2312" - echo "GB2312 GB2312" - echo "eucJP EUC-JP" - echo "eucKR EUC-KR" - echo "Big5 BIG5" - echo "Big5HKSCS BIG5-HKSCS" - echo "GBK GBK" - echo "GB18030 GB18030" - echo "SJIS SHIFT_JIS" - echo "ARMSCII-8 ARMSCII-8" - echo "PT154 PT154" - #echo "ISCII-DEV ?" - echo "* UTF-8" - ;; - beos* | haiku*) - # BeOS and Haiku have a single locale, and it has UTF-8 encoding. - echo "* UTF-8" - ;; - msdosdjgpp*) - # DJGPP 2.03 doesn't have nl_langinfo(CODESET); therefore - # localcharset.c falls back to using the full locale name - # from the environment variables. - echo "#" - echo "# The encodings given here may not all be correct." - echo "# If you find that the encoding given for your language and" - echo "# country is not the one your DOS machine actually uses, just" - echo "# correct it in this file, and send a mail to" - echo "# Juan Manuel Guerrero <juan.guerrero@gmx.de>" - echo "# and Bruno Haible <bruno@clisp.org>." - echo "#" - echo "C ASCII" - # ISO-8859-1 languages - echo "ca CP850" - echo "ca_ES CP850" - echo "da CP865" # not CP850 ?? - echo "da_DK CP865" # not CP850 ?? - echo "de CP850" - echo "de_AT CP850" - echo "de_CH CP850" - echo "de_DE CP850" - echo "en CP850" - echo "en_AU CP850" # not CP437 ?? - echo "en_CA CP850" - echo "en_GB CP850" - echo "en_NZ CP437" - echo "en_US CP437" - echo "en_ZA CP850" # not CP437 ?? - echo "es CP850" - echo "es_AR CP850" - echo "es_BO CP850" - echo "es_CL CP850" - echo "es_CO CP850" - echo "es_CR CP850" - echo "es_CU CP850" - echo "es_DO CP850" - echo "es_EC CP850" - echo "es_ES CP850" - echo "es_GT CP850" - echo "es_HN CP850" - echo "es_MX CP850" - echo "es_NI CP850" - echo "es_PA CP850" - echo "es_PY CP850" - echo "es_PE CP850" - echo "es_SV CP850" - echo "es_UY CP850" - echo "es_VE CP850" - echo "et CP850" - echo "et_EE CP850" - echo "eu CP850" - echo "eu_ES CP850" - echo "fi CP850" - echo "fi_FI CP850" - echo "fr CP850" - echo "fr_BE CP850" - echo "fr_CA CP850" - echo "fr_CH CP850" - echo "fr_FR CP850" - echo "ga CP850" - echo "ga_IE CP850" - echo "gd CP850" - echo "gd_GB CP850" - echo "gl CP850" - echo "gl_ES CP850" - echo "id CP850" # not CP437 ?? - echo "id_ID CP850" # not CP437 ?? - echo "is CP861" # not CP850 ?? - echo "is_IS CP861" # not CP850 ?? - echo "it CP850" - echo "it_CH CP850" - echo "it_IT CP850" - echo "lt CP775" - echo "lt_LT CP775" - echo "lv CP775" - echo "lv_LV CP775" - echo "nb CP865" # not CP850 ?? - echo "nb_NO CP865" # not CP850 ?? - echo "nl CP850" - echo "nl_BE CP850" - echo "nl_NL CP850" - echo "nn CP865" # not CP850 ?? - echo "nn_NO CP865" # not CP850 ?? - echo "no CP865" # not CP850 ?? - echo "no_NO CP865" # not CP850 ?? - echo "pt CP850" - echo "pt_BR CP850" - echo "pt_PT CP850" - echo "sv CP850" - echo "sv_SE CP850" - # ISO-8859-2 languages - echo "cs CP852" - echo "cs_CZ CP852" - echo "hr CP852" - echo "hr_HR CP852" - echo "hu CP852" - echo "hu_HU CP852" - echo "pl CP852" - echo "pl_PL CP852" - echo "ro CP852" - echo "ro_RO CP852" - echo "sk CP852" - echo "sk_SK CP852" - echo "sl CP852" - echo "sl_SI CP852" - echo "sq CP852" - echo "sq_AL CP852" - echo "sr CP852" # CP852 or CP866 or CP855 ?? - echo "sr_CS CP852" # CP852 or CP866 or CP855 ?? - echo "sr_YU CP852" # CP852 or CP866 or CP855 ?? - # ISO-8859-3 languages - echo "mt CP850" - echo "mt_MT CP850" - # ISO-8859-5 languages - echo "be CP866" - echo "be_BE CP866" - echo "bg CP866" # not CP855 ?? - echo "bg_BG CP866" # not CP855 ?? - echo "mk CP866" # not CP855 ?? - echo "mk_MK CP866" # not CP855 ?? - echo "ru CP866" - echo "ru_RU CP866" - echo "uk CP1125" - echo "uk_UA CP1125" - # ISO-8859-6 languages - echo "ar CP864" - echo "ar_AE CP864" - echo "ar_DZ CP864" - echo "ar_EG CP864" - echo "ar_IQ CP864" - echo "ar_IR CP864" - echo "ar_JO CP864" - echo "ar_KW CP864" - echo "ar_MA CP864" - echo "ar_OM CP864" - echo "ar_QA CP864" - echo "ar_SA CP864" - echo "ar_SY CP864" - # ISO-8859-7 languages - echo "el CP869" - echo "el_GR CP869" - # ISO-8859-8 languages - echo "he CP862" - echo "he_IL CP862" - # ISO-8859-9 languages - echo "tr CP857" - echo "tr_TR CP857" - # Japanese - echo "ja CP932" - echo "ja_JP CP932" - # Chinese - echo "zh_CN GBK" - echo "zh_TW CP950" # not CP938 ?? - # Korean - echo "kr CP949" # not CP934 ?? - echo "kr_KR CP949" # not CP934 ?? - # Thai - echo "th CP874" - echo "th_TH CP874" - # Other - echo "eo CP850" - echo "eo_EO CP850" - ;; -esac diff -Nru gdb-9.1/gnulib/import/count-one-bits.c gdb-10.2/gnulib/import/count-one-bits.c --- gdb-9.1/gnulib/import/count-one-bits.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/count-one-bits.c 2020-09-13 02:33:41.000000000 +0000 @@ -0,0 +1,7 @@ +#include <config.h> +#define COUNT_ONE_BITS_INLINE _GL_EXTERN_INLINE +#include "count-one-bits.h" + +#if 1500 <= _MSC_VER && (defined _M_IX86 || defined _M_X64) +int popcount_support = -1; +#endif diff -Nru gdb-9.1/gnulib/import/count-one-bits.h gdb-10.2/gnulib/import/count-one-bits.h --- gdb-9.1/gnulib/import/count-one-bits.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/count-one-bits.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,163 @@ +/* count-one-bits.h -- counts the number of 1-bits in a word. + Copyright (C) 2007-2020 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Ben Pfaff. */ + +#ifndef COUNT_ONE_BITS_H +#define COUNT_ONE_BITS_H 1 + +#include <limits.h> +#include <stdlib.h> + +#ifndef _GL_INLINE_HEADER_BEGIN + #error "Please include config.h first." +#endif +_GL_INLINE_HEADER_BEGIN +#ifndef COUNT_ONE_BITS_INLINE +# define COUNT_ONE_BITS_INLINE _GL_INLINE +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* Assuming the GCC builtin is GCC_BUILTIN and the MSC builtin is MSC_BUILTIN, + expand to code that computes the number of 1-bits of the local + variable 'x' of type TYPE (an unsigned integer type) and return it + from the current function. */ +#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) +# define COUNT_ONE_BITS(GCC_BUILTIN, MSC_BUILTIN, TYPE) \ + return GCC_BUILTIN (x) +#else + +/* Compute and return the number of 1-bits set in the least + significant 32 bits of X. */ +COUNT_ONE_BITS_INLINE int +count_one_bits_32 (unsigned int x) +{ + x = ((x & 0xaaaaaaaaU) >> 1) + (x & 0x55555555U); + x = ((x & 0xccccccccU) >> 2) + (x & 0x33333333U); + x = (x >> 16) + (x & 0xffff); + x = ((x & 0xf0f0) >> 4) + (x & 0x0f0f); + return (x >> 8) + (x & 0x00ff); +} + +/* Expand to code that computes the number of 1-bits of the local + variable 'x' of type TYPE (an unsigned integer type) and return it + from the current function. */ +# define COUNT_ONE_BITS_GENERIC(TYPE) \ + do \ + { \ + int count = 0; \ + int bits; \ + for (bits = 0; bits < sizeof (TYPE) * CHAR_BIT; bits += 32) \ + { \ + count += count_one_bits_32 (x); \ + x = x >> 31 >> 1; \ + } \ + return count; \ + } \ + while (0) + +# if 1500 <= _MSC_VER && (defined _M_IX86 || defined _M_X64) + +/* While gcc falls back to its own generic code if the machine + on which it's running doesn't support popcount, with Microsoft's + compiler we need to detect and fallback ourselves. */ + +# if 0 +# include <intrin.h> +# else + /* Don't pollute the namespace with too many MSVC intrinsics. */ +# pragma intrinsic (__cpuid) +# pragma intrinsic (__popcnt) +# if defined _M_X64 +# pragma intrinsic (__popcnt64) +# endif +# endif + +# if !defined _M_X64 +static inline __popcnt64 (unsigned long long x) +{ + return __popcnt ((unsigned int) (x >> 32)) + __popcnt ((unsigned int) x); +} +# endif + +/* Return nonzero if popcount is supported. */ + +/* 1 if supported, 0 if not supported, -1 if unknown. */ +extern int popcount_support; + +COUNT_ONE_BITS_INLINE int +popcount_supported (void) +{ + if (popcount_support < 0) + { + /* Do as described in + <https://docs.microsoft.com/en-us/cpp/intrinsics/popcnt16-popcnt-popcnt64> */ + int cpu_info[4]; + __cpuid (cpu_info, 1); + popcount_support = (cpu_info[2] >> 23) & 1; + } + return popcount_support; +} + +# define COUNT_ONE_BITS(GCC_BUILTIN, MSC_BUILTIN, TYPE) \ + do \ + { \ + if (popcount_supported ()) \ + return MSC_BUILTIN (x); \ + else \ + COUNT_ONE_BITS_GENERIC (TYPE); \ + } \ + while (0) + +# else + +# define COUNT_ONE_BITS(GCC_BUILTIN, MSC_BUILTIN, TYPE) \ + COUNT_ONE_BITS_GENERIC (TYPE) + +# endif +#endif + +/* Compute and return the number of 1-bits set in X. */ +COUNT_ONE_BITS_INLINE int +count_one_bits (unsigned int x) +{ + COUNT_ONE_BITS (__builtin_popcount, __popcnt, unsigned int); +} + +/* Compute and return the number of 1-bits set in X. */ +COUNT_ONE_BITS_INLINE int +count_one_bits_l (unsigned long int x) +{ + COUNT_ONE_BITS (__builtin_popcountl, __popcnt, unsigned long int); +} + +/* Compute and return the number of 1-bits set in X. */ +COUNT_ONE_BITS_INLINE int +count_one_bits_ll (unsigned long long int x) +{ + COUNT_ONE_BITS (__builtin_popcountll, __popcnt64, unsigned long long int); +} + +#ifdef __cplusplus +} +#endif + +_GL_INLINE_HEADER_END + +#endif /* COUNT_ONE_BITS_H */ diff -Nru gdb-9.1/gnulib/import/ctype.in.h gdb-10.2/gnulib/import/ctype.in.h --- gdb-9.1/gnulib/import/ctype.in.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/ctype.in.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,57 @@ +/* A substitute for ISO C99 <ctype.h>, for platforms on which it is incomplete. + + Copyright (C) 2009-2020 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Bruno Haible. */ + +/* + * ISO C 99 <ctype.h> for platforms on which it is incomplete. + * <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/ctype.h.html> + */ + +#ifndef _@GUARD_PREFIX@_CTYPE_H + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif +@PRAGMA_COLUMNS@ + +/* Include the original <ctype.h>. */ +/* The include_next requires a split double-inclusion guard. */ +#@INCLUDE_NEXT@ @NEXT_CTYPE_H@ + +#ifndef _@GUARD_PREFIX@_CTYPE_H +#define _@GUARD_PREFIX@_CTYPE_H + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ + +/* The definition of _GL_WARN_ON_USE is copied here. */ + +/* Return non-zero if c is a blank, i.e. a space or tab character. */ +#if @GNULIB_ISBLANK@ +# if !@HAVE_ISBLANK@ +_GL_EXTERN_C int isblank (int c); +# endif +#elif defined GNULIB_POSIXCHECK +# undef isblank +# if HAVE_RAW_DECL_ISBLANK +_GL_WARN_ON_USE (isblank, "isblank is unportable - " + "use gnulib module isblank for portability"); +# endif +#endif + +#endif /* _@GUARD_PREFIX@_CTYPE_H */ +#endif /* _@GUARD_PREFIX@_CTYPE_H */ diff -Nru gdb-9.1/gnulib/import/dirent.in.h gdb-10.2/gnulib/import/dirent.in.h --- gdb-9.1/gnulib/import/dirent.in.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/dirent.in.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* A GNU-like <dirent.h>. - Copyright (C) 2006-2016 Free Software Foundation, Inc. + Copyright (C) 2006-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -12,7 +12,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _@GUARD_PREFIX@_DIRENT_H @@ -57,10 +57,12 @@ /* The __attribute__ feature is available in gcc versions 2.5 and later. The attribute __pure__ was added in gcc 2.96. */ -#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) -# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) -#else -# define _GL_ATTRIBUTE_PURE /* empty */ +#ifndef _GL_ATTRIBUTE_PURE +# if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) +# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) +# else +# define _GL_ATTRIBUTE_PURE /* empty */ +# endif #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ diff -Nru gdb-9.1/gnulib/import/dirent-private.h gdb-10.2/gnulib/import/dirent-private.h --- gdb-9.1/gnulib/import/dirent-private.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/dirent-private.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Private details of the DIR type. - Copyright (C) 2011-2016 Free Software Foundation, Inc. + Copyright (C) 2011-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -12,7 +12,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _DIRENT_PRIVATE_H #define _DIRENT_PRIVATE_H 1 @@ -20,6 +20,10 @@ #define WIN32_LEAN_AND_MEAN #include <windows.h> +/* Don't assume that UNICODE is not defined. */ +#undef WIN32_FIND_DATA +#define WIN32_FIND_DATA WIN32_FIND_DATAA + struct gl_directory { /* Status, or error code to produce in next readdir() call. diff -Nru gdb-9.1/gnulib/import/dirfd.c gdb-10.2/gnulib/import/dirfd.c --- gdb-9.1/gnulib/import/dirfd.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/dirfd.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* dirfd.c -- return the file descriptor associated with an open DIR* - Copyright (C) 2001, 2006, 2008-2016 Free Software Foundation, Inc. + Copyright (C) 2001, 2006, 2008-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -13,7 +13,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Jim Meyering. */ diff -Nru gdb-9.1/gnulib/import/dirname.h gdb-10.2/gnulib/import/dirname.h --- gdb-9.1/gnulib/import/dirname.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/dirname.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Take file names apart into directory and base names. - Copyright (C) 1998, 2001, 2003-2006, 2009-2016 Free Software Foundation, + Copyright (C) 1998, 2001, 2003-2006, 2009-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify @@ -14,14 +14,14 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef DIRNAME_H_ # define DIRNAME_H_ 1 # include <stdbool.h> # include <stddef.h> -# include "dosname.h" +# include "filename.h" # ifndef DIRECTORY_SEPARATOR # define DIRECTORY_SEPARATOR '/' @@ -36,7 +36,7 @@ #endif # if GNULIB_DIRNAME -char *base_name (char const *file); +char *base_name (char const *file) _GL_ATTRIBUTE_MALLOC; char *dir_name (char const *file); # endif diff -Nru gdb-9.1/gnulib/import/dirname-lgpl.c gdb-10.2/gnulib/import/dirname-lgpl.c --- gdb-9.1/gnulib/import/dirname-lgpl.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/dirname-lgpl.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* dirname.c -- return all but the last element in a file name - Copyright (C) 1990, 1998, 2000-2001, 2003-2006, 2009-2016 Free Software + Copyright (C) 1990, 1998, 2000-2001, 2003-2006, 2009-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify @@ -14,7 +14,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> diff -Nru gdb-9.1/gnulib/import/dosname.h gdb-10.2/gnulib/import/dosname.h --- gdb-9.1/gnulib/import/dosname.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/dosname.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,53 +0,0 @@ -/* File names on MS-DOS/Windows systems. - - Copyright (C) 2000-2001, 2004-2006, 2009-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. - - From Paul Eggert and Jim Meyering. */ - -#ifndef _DOSNAME_H -#define _DOSNAME_H - -#if (defined _WIN32 || defined __WIN32__ || \ - defined __MSDOS__ || defined __CYGWIN__ || \ - defined __EMX__ || defined __DJGPP__) - /* This internal macro assumes ASCII, but all hosts that support drive - letters use ASCII. */ -# define _IS_DRIVE_LETTER(C) (((unsigned int) (C) | ('a' - 'A')) - 'a' \ - <= 'z' - 'a') -# define FILE_SYSTEM_PREFIX_LEN(Filename) \ - (_IS_DRIVE_LETTER ((Filename)[0]) && (Filename)[1] == ':' ? 2 : 0) -# ifndef __CYGWIN__ -# define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 1 -# endif -# define ISSLASH(C) ((C) == '/' || (C) == '\\') -#else -# define FILE_SYSTEM_PREFIX_LEN(Filename) 0 -# define ISSLASH(C) ((C) == '/') -#endif - -#ifndef FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE -# define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 0 -#endif - -#if FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE -# define IS_ABSOLUTE_FILE_NAME(F) ISSLASH ((F)[FILE_SYSTEM_PREFIX_LEN (F)]) -# else -# define IS_ABSOLUTE_FILE_NAME(F) \ - (ISSLASH ((F)[0]) || FILE_SYSTEM_PREFIX_LEN (F) != 0) -#endif -#define IS_RELATIVE_FILE_NAME(F) (! IS_ABSOLUTE_FILE_NAME (F)) - -#endif /* DOSNAME_H_ */ diff -Nru gdb-9.1/gnulib/import/dup2.c gdb-10.2/gnulib/import/dup2.c --- gdb-9.1/gnulib/import/dup2.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/dup2.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Duplicate an open file descriptor to a specified file descriptor. - Copyright (C) 1999, 2004-2007, 2009-2016 Free Software Foundation, Inc. + Copyright (C) 1999, 2004-2007, 2009-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -13,7 +13,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* written by Paul Eggert */ @@ -29,16 +29,45 @@ # undef dup2 -# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ +# if defined _WIN32 && ! defined __CYGWIN__ /* Get declarations of the native Windows API functions. */ # define WIN32_LEAN_AND_MEAN # include <windows.h> -# include "msvc-inval.h" +# if HAVE_MSVC_INVALID_PARAMETER_HANDLER +# include "msvc-inval.h" +# endif /* Get _get_osfhandle. */ -# include "msvc-nothrow.h" +# if GNULIB_MSVC_NOTHROW +# include "msvc-nothrow.h" +# else +# include <io.h> +# endif + +# if HAVE_MSVC_INVALID_PARAMETER_HANDLER +static int +dup2_nothrow (int fd, int desired_fd) +{ + int result; + + TRY_MSVC_INVAL + { + result = dup2 (fd, desired_fd); + } + CATCH_MSVC_INVAL + { + errno = EBADF; + result = -1; + } + DONE_MSVC_INVAL; + + return result; +} +# else +# define dup2_nothrow dup2 +# endif static int ms_windows_dup2 (int fd, int desired_fd) @@ -59,23 +88,14 @@ } /* Wine 1.0.1 return 0 when desired_fd is negative but not -1: - http://bugs.winehq.org/show_bug.cgi?id=21289 */ + https://bugs.winehq.org/show_bug.cgi?id=21289 */ if (desired_fd < 0) { errno = EBADF; return -1; } - TRY_MSVC_INVAL - { - result = dup2 (fd, desired_fd); - } - CATCH_MSVC_INVAL - { - errno = EBADF; - result = -1; - } - DONE_MSVC_INVAL; + result = dup2_nothrow (fd, desired_fd); if (result == 0) result = desired_fd; diff -Nru gdb-9.1/gnulib/import/dup.c gdb-10.2/gnulib/import/dup.c --- gdb-9.1/gnulib/import/dup.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/dup.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Duplicate an open file descriptor. - Copyright (C) 2011-2016 Free Software Foundation, Inc. + Copyright (C) 2011-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -13,7 +13,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> @@ -22,7 +22,9 @@ #include <errno.h> -#include "msvc-inval.h" +#if HAVE_MSVC_INVALID_PARAMETER_HANDLER +# include "msvc-inval.h" +#endif #undef dup diff -Nru gdb-9.1/gnulib/import/dup-safer.c gdb-10.2/gnulib/import/dup-safer.c --- gdb-9.1/gnulib/import/dup-safer.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/dup-safer.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Invoke dup, but avoid some glitches. - Copyright (C) 2001, 2004-2006, 2009-2016 Free Software Foundation, Inc. + Copyright (C) 2001, 2004-2006, 2009-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -13,7 +13,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paul Eggert. */ diff -Nru gdb-9.1/gnulib/import/dup-safer-flag.c gdb-10.2/gnulib/import/dup-safer-flag.c --- gdb-9.1/gnulib/import/dup-safer-flag.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/dup-safer-flag.c 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,38 @@ +/* Duplicate a file descriptor result, avoiding clobbering + STD{IN,OUT,ERR}_FILENO, with specific flags. + + Copyright (C) 2001, 2004-2006, 2009-2020 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Paul Eggert and Eric Blake. */ + +#include <config.h> + +/* Specification. */ +#include "unistd-safer.h" + +#include <fcntl.h> +#include <unistd.h> + +/* Like dup, but do not return STDIN_FILENO, STDOUT_FILENO, or + STDERR_FILENO. If FLAG contains O_CLOEXEC, behave like + fcntl(F_DUPFD_CLOEXEC) rather than fcntl(F_DUPFD). */ + +int +dup_safer_flag (int fd, int flag) +{ + return fcntl (fd, (flag & O_CLOEXEC) ? F_DUPFD_CLOEXEC : F_DUPFD, + STDERR_FILENO + 1); +} diff -Nru gdb-9.1/gnulib/import/errno.in.h gdb-10.2/gnulib/import/errno.in.h --- gdb-9.1/gnulib/import/errno.in.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/errno.in.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* A POSIX-like <errno.h>. - Copyright (C) 2008-2016 Free Software Foundation, Inc. + Copyright (C) 2008-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -13,7 +13,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, see <http://www.gnu.org/licenses/>. */ + along with this program; if not, see <https://www.gnu.org/licenses/>. */ #ifndef _@GUARD_PREFIX@_ERRNO_H @@ -30,7 +30,7 @@ /* On native Windows platforms, many macros are not defined. */ -# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ +# if defined _WIN32 && ! defined __CYGWIN__ /* These are the same values as defined by MSVC 10, for interoperability. */ @@ -248,7 +248,7 @@ interoperability. */ # define EOWNERDEAD 58 # define ENOTRECOVERABLE 59 -# elif (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ +# elif defined _WIN32 && ! defined __CYGWIN__ /* We have a conflict here: pthreads-win32 defines these values differently than MSVC 10. It's hairy to decide which one to use. */ # if defined __MINGW32__ && !defined USE_WINDOWS_THREADS diff -Nru gdb-9.1/gnulib/import/error.c gdb-10.2/gnulib/import/error.c --- gdb-9.1/gnulib/import/error.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/error.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Error handler for noninteractive utilities - Copyright (C) 1990-1998, 2000-2007, 2009-2016 Free Software Foundation, Inc. + Copyright (C) 1990-1998, 2000-2007, 2009-2020 Free Software Foundation, Inc. This file is part of the GNU C Library. This program is free software: you can redistribute it and/or modify @@ -13,7 +13,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by David MacKenzie <djm@gnu.ai.mit.edu>. */ @@ -93,33 +93,37 @@ # include <fcntl.h> # include <unistd.h> -# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ +# if defined _WIN32 && ! defined __CYGWIN__ /* Get declarations of the native Windows API functions. */ # define WIN32_LEAN_AND_MEAN # include <windows.h> /* Get _get_osfhandle. */ -# include "msvc-nothrow.h" +# if GNULIB_MSVC_NOTHROW +# include "msvc-nothrow.h" +# else +# include <io.h> +# endif # endif /* The gnulib override of fcntl is not needed in this file. */ # undef fcntl -# if !HAVE_DECL_STRERROR_R +# if !(GNULIB_STRERROR_R_POSIX || HAVE_DECL_STRERROR_R) # ifndef HAVE_DECL_STRERROR_R "this configure-time declaration test was not run" # endif # if STRERROR_R_CHAR_P -char *strerror_r (); +char *strerror_r (int errnum, char *buf, size_t buflen); # else -int strerror_r (); +int strerror_r (int errnum, char *buf, size_t buflen); # endif # endif -#define program_name getprogname () +# define program_name getprogname () -# if HAVE_STRERROR_R || defined strerror_r +# if GNULIB_STRERROR_R_POSIX || HAVE_STRERROR_R || defined strerror_r # define __strerror_r strerror_r -# endif /* HAVE_STRERROR_R || defined strerror_r */ +# endif /* GNULIB_STRERROR_R_POSIX || HAVE_STRERROR_R || defined strerror_r */ #endif /* not _LIBC */ #if !_LIBC @@ -127,7 +131,7 @@ static int is_open (int fd) { -# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ +# if defined _WIN32 && ! defined __CYGWIN__ /* On native Windows: The initial state of unassigned standard file descriptors is that they are open but point to an INVALID_HANDLE_VALUE. There is no fcntl, and the gnulib replacement fcntl does not support @@ -172,9 +176,9 @@ { char const *s; -#if defined HAVE_STRERROR_R || _LIBC +#if _LIBC || GNULIB_STRERROR_R_POSIX || defined HAVE_STRERROR_R char errbuf[1024]; -# if _LIBC || STRERROR_R_CHAR_P +# if _LIBC || (!GNULIB_STRERROR_R_POSIX && STRERROR_R_CHAR_P) s = __strerror_r (errnum, errbuf, sizeof errbuf); # else if (__strerror_r (errnum, errbuf, sizeof errbuf) == 0) @@ -268,7 +272,6 @@ else #endif vfprintf (stderr, message, args); - va_end (args); ++error_message_count; if (errnum) @@ -318,6 +321,7 @@ va_start (args, message); error_tail (status, errnum, message, args); + va_end (args); #ifdef _LIBC _IO_funlockfile (stderr); @@ -388,6 +392,7 @@ va_start (args, message); error_tail (status, errnum, message, args); + va_end (args); #ifdef _LIBC _IO_funlockfile (stderr); diff -Nru gdb-9.1/gnulib/import/error.h gdb-10.2/gnulib/import/error.h --- gdb-9.1/gnulib/import/error.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/error.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Declaration for error-reporting function - Copyright (C) 1995-1997, 2003, 2006, 2008-2016 Free Software Foundation, + Copyright (C) 1995-1997, 2003, 2006, 2008-2020 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -14,23 +14,11 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _ERROR_H #define _ERROR_H 1 -/* The __attribute__ feature is available in gcc versions 2.5 and later. - The __-protected variants of the attributes 'format' and 'printf' are - accepted by gcc versions 2.6.4 (effectively 2.7) and later. - We enable _GL_ATTRIBUTE_FORMAT only if these are supported too, because - gnulib and libintl do '#define printf __printf__' when they override - the 'printf' function. */ -#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) -# define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec)) -#else -# define _GL_ATTRIBUTE_FORMAT(spec) /* empty */ -#endif - /* On mingw, the flavor of printf depends on whether the extensions module * is in use; the check for <stdio.h> determines the witness macro. */ #ifndef _GL_ATTRIBUTE_SPEC_PRINTF diff -Nru gdb-9.1/gnulib/import/exitfail.c gdb-10.2/gnulib/import/exitfail.c --- gdb-9.1/gnulib/import/exitfail.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/exitfail.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Failure exit status - Copyright (C) 2002-2003, 2005-2007, 2009-2016 Free Software Foundation, Inc. + Copyright (C) 2002-2003, 2005-2007, 2009-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -13,7 +13,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> diff -Nru gdb-9.1/gnulib/import/exitfail.h gdb-10.2/gnulib/import/exitfail.h --- gdb-9.1/gnulib/import/exitfail.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/exitfail.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Failure exit status - Copyright (C) 2002, 2009-2016 Free Software Foundation, Inc. + Copyright (C) 2002, 2009-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -13,6 +13,6 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ extern int volatile exit_failure; diff -Nru gdb-9.1/gnulib/import/extra/config.rpath gdb-10.2/gnulib/import/extra/config.rpath --- gdb-9.1/gnulib/import/extra/config.rpath 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/extra/config.rpath 1970-01-01 00:00:00.000000000 +0000 @@ -1,684 +0,0 @@ -#! /bin/sh -# Output a system dependent set of variables, describing how to set the -# run time search path of shared libraries in an executable. -# -# Copyright 1996-2016 Free Software Foundation, Inc. -# Taken from GNU libtool, 2001 -# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 -# -# This file is free software; the Free Software Foundation gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. -# -# The first argument passed to this file is the canonical host specification, -# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM -# or -# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM -# The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld -# should be set by the caller. -# -# The set of defined variables is at the end of this script. - -# Known limitations: -# - On IRIX 6.5 with CC="cc", the run time search patch must not be longer -# than 256 bytes, otherwise the compiler driver will dump core. The only -# known workaround is to choose shorter directory names for the build -# directory and/or the installation directory. - -# All known linkers require a '.a' archive for static linking (except MSVC, -# which needs '.lib'). -libext=a -shrext=.so - -host="$1" -host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` -host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` -host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` - -# Code taken from libtool.m4's _LT_CC_BASENAME. - -for cc_temp in $CC""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'` - -# Code taken from libtool.m4's _LT_COMPILER_PIC. - -wl= -if test "$GCC" = yes; then - wl='-Wl,' -else - case "$host_os" in - aix*) - wl='-Wl,' - ;; - mingw* | cygwin* | pw32* | os2* | cegcc*) - ;; - hpux9* | hpux10* | hpux11*) - wl='-Wl,' - ;; - irix5* | irix6* | nonstopux*) - wl='-Wl,' - ;; - linux* | k*bsd*-gnu | kopensolaris*-gnu) - case $cc_basename in - ecc*) - wl='-Wl,' - ;; - icc* | ifort*) - wl='-Wl,' - ;; - lf95*) - wl='-Wl,' - ;; - nagfor*) - wl='-Wl,-Wl,,' - ;; - pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) - wl='-Wl,' - ;; - ccc*) - wl='-Wl,' - ;; - xl* | bgxl* | bgf* | mpixl*) - wl='-Wl,' - ;; - como) - wl='-lopt=' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ F* | *Sun*Fortran*) - wl= - ;; - *Sun\ C*) - wl='-Wl,' - ;; - esac - ;; - esac - ;; - newsos6) - ;; - *nto* | *qnx*) - ;; - osf3* | osf4* | osf5*) - wl='-Wl,' - ;; - rdos*) - ;; - solaris*) - case $cc_basename in - f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) - wl='-Qoption ld ' - ;; - *) - wl='-Wl,' - ;; - esac - ;; - sunos4*) - wl='-Qoption ld ' - ;; - sysv4 | sysv4.2uw2* | sysv4.3*) - wl='-Wl,' - ;; - sysv4*MP*) - ;; - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - wl='-Wl,' - ;; - unicos*) - wl='-Wl,' - ;; - uts4*) - ;; - esac -fi - -# Code taken from libtool.m4's _LT_LINKER_SHLIBS. - -hardcode_libdir_flag_spec= -hardcode_libdir_separator= -hardcode_direct=no -hardcode_minus_L=no - -case "$host_os" in - cygwin* | mingw* | pw32* | cegcc*) - # FIXME: the MSVC++ port hasn't been tested in a loooong time - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - if test "$GCC" != yes; then - with_gnu_ld=no - fi - ;; - interix*) - # we just hope/assume this is gcc and not c89 (= MSVC++) - with_gnu_ld=yes - ;; - openbsd*) - with_gnu_ld=no - ;; -esac - -ld_shlibs=yes -if test "$with_gnu_ld" = yes; then - # Set some defaults for GNU ld with shared library support. These - # are reset later if shared libraries are not supported. Putting them - # here allows them to be overridden if necessary. - # Unlike libtool, we use -rpath here, not --rpath, since the documented - # option of GNU ld is called -rpath, not --rpath. - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - case "$host_os" in - aix[3-9]*) - # On AIX/PPC, the GNU linker is very broken - if test "$host_cpu" != ia64; then - ld_shlibs=no - fi - ;; - amigaos*) - case "$host_cpu" in - powerpc) - ;; - m68k) - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - ;; - esac - ;; - beos*) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - : - else - ld_shlibs=no - fi - ;; - cygwin* | mingw* | pw32* | cegcc*) - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - hardcode_libdir_flag_spec='-L$libdir' - if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then - : - else - ld_shlibs=no - fi - ;; - haiku*) - ;; - interix[3-9]*) - hardcode_direct=no - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - ;; - gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - : - else - ld_shlibs=no - fi - ;; - netbsd*) - ;; - solaris*) - if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then - ld_shlibs=no - elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - : - else - ld_shlibs=no - fi - ;; - sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) - case `$LD -v 2>&1` in - *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) - ld_shlibs=no - ;; - *) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' - else - ld_shlibs=no - fi - ;; - esac - ;; - sunos4*) - hardcode_direct=yes - ;; - *) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - : - else - ld_shlibs=no - fi - ;; - esac - if test "$ld_shlibs" = no; then - hardcode_libdir_flag_spec= - fi -else - case "$host_os" in - aix3*) - # Note: this linker hardcodes the directories in LIBPATH if there - # are no directories specified by -L. - hardcode_minus_L=yes - if test "$GCC" = yes; then - # Neither direct hardcoding nor static linking is supported with a - # broken collect2. - hardcode_direct=unsupported - fi - ;; - aix[4-9]*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - else - aix_use_runtimelinking=no - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) - for ld_flag in $LDFLAGS; do - if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then - aix_use_runtimelinking=yes - break - fi - done - ;; - esac - fi - hardcode_direct=yes - hardcode_libdir_separator=':' - if test "$GCC" = yes; then - case $host_os in aix4.[012]|aix4.[012].*) - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && \ - strings "$collect2name" | grep resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - hardcode_direct=unsupported - hardcode_minus_L=yes - hardcode_libdir_flag_spec='-L$libdir' - hardcode_libdir_separator= - fi - ;; - esac - fi - # Begin _LT_AC_SYS_LIBPATH_AIX. - echo 'int main () { return 0; }' > conftest.c - ${CC} ${LDFLAGS} conftest.c -o conftest - aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } -}'` - if test -z "$aix_libpath"; then - aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } -}'` - fi - if test -z "$aix_libpath"; then - aix_libpath="/usr/lib:/lib" - fi - rm -f conftest.c conftest - # End _LT_AC_SYS_LIBPATH_AIX. - if test "$aix_use_runtimelinking" = yes; then - hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" - else - if test "$host_cpu" = ia64; then - hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' - else - hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" - fi - fi - ;; - amigaos*) - case "$host_cpu" in - powerpc) - ;; - m68k) - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - ;; - esac - ;; - bsdi[45]*) - ;; - cygwin* | mingw* | pw32* | cegcc*) - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - hardcode_libdir_flag_spec=' ' - libext=lib - ;; - darwin* | rhapsody*) - hardcode_direct=no - if { case $cc_basename in ifort*) true;; *) test "$GCC" = yes;; esac; }; then - : - else - ld_shlibs=no - fi - ;; - dgux*) - hardcode_libdir_flag_spec='-L$libdir' - ;; - freebsd2.[01]*) - hardcode_direct=yes - hardcode_minus_L=yes - ;; - freebsd* | dragonfly*) - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - ;; - hpux9*) - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_separator=: - hardcode_direct=yes - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - ;; - hpux10*) - if test "$with_gnu_ld" = no; then - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_separator=: - hardcode_direct=yes - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - fi - ;; - hpux11*) - if test "$with_gnu_ld" = no; then - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_separator=: - case $host_cpu in - hppa*64*|ia64*) - hardcode_direct=no - ;; - *) - hardcode_direct=yes - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - ;; - esac - fi - ;; - irix5* | irix6* | nonstopux*) - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - ;; - netbsd*) - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - ;; - newsos6) - hardcode_direct=yes - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - ;; - *nto* | *qnx*) - ;; - openbsd*) - if test -f /usr/libexec/ld.so; then - hardcode_direct=yes - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - else - case "$host_os" in - openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) - hardcode_libdir_flag_spec='-R$libdir' - ;; - *) - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - ;; - esac - fi - else - ld_shlibs=no - fi - ;; - os2*) - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - ;; - osf3*) - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - ;; - osf4* | osf5*) - if test "$GCC" = yes; then - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - else - # Both cc and cxx compiler support -rpath directly - hardcode_libdir_flag_spec='-rpath $libdir' - fi - hardcode_libdir_separator=: - ;; - solaris*) - hardcode_libdir_flag_spec='-R$libdir' - ;; - sunos4*) - hardcode_libdir_flag_spec='-L$libdir' - hardcode_direct=yes - hardcode_minus_L=yes - ;; - sysv4) - case $host_vendor in - sni) - hardcode_direct=yes # is this really true??? - ;; - siemens) - hardcode_direct=no - ;; - motorola) - hardcode_direct=no #Motorola manual says yes, but my tests say they lie - ;; - esac - ;; - sysv4.3*) - ;; - sysv4*MP*) - if test -d /usr/nec; then - ld_shlibs=yes - fi - ;; - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) - ;; - sysv5* | sco3.2v5* | sco5v6*) - hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' - hardcode_libdir_separator=':' - ;; - uts4*) - hardcode_libdir_flag_spec='-L$libdir' - ;; - *) - ld_shlibs=no - ;; - esac -fi - -# Check dynamic linker characteristics -# Code taken from libtool.m4's _LT_SYS_DYNAMIC_LINKER. -# Unlike libtool.m4, here we don't care about _all_ names of the library, but -# only about the one the linker finds when passed -lNAME. This is the last -# element of library_names_spec in libtool.m4, or possibly two of them if the -# linker has special search rules. -library_names_spec= # the last element of library_names_spec in libtool.m4 -libname_spec='lib$name' -case "$host_os" in - aix3*) - library_names_spec='$libname.a' - ;; - aix[4-9]*) - library_names_spec='$libname$shrext' - ;; - amigaos*) - case "$host_cpu" in - powerpc*) - library_names_spec='$libname$shrext' ;; - m68k) - library_names_spec='$libname.a' ;; - esac - ;; - beos*) - library_names_spec='$libname$shrext' - ;; - bsdi[45]*) - library_names_spec='$libname$shrext' - ;; - cygwin* | mingw* | pw32* | cegcc*) - shrext=.dll - library_names_spec='$libname.dll.a $libname.lib' - ;; - darwin* | rhapsody*) - shrext=.dylib - library_names_spec='$libname$shrext' - ;; - dgux*) - library_names_spec='$libname$shrext' - ;; - freebsd[23].*) - library_names_spec='$libname$shrext$versuffix' - ;; - freebsd* | dragonfly*) - library_names_spec='$libname$shrext' - ;; - gnu*) - library_names_spec='$libname$shrext' - ;; - haiku*) - library_names_spec='$libname$shrext' - ;; - hpux9* | hpux10* | hpux11*) - case $host_cpu in - ia64*) - shrext=.so - ;; - hppa*64*) - shrext=.sl - ;; - *) - shrext=.sl - ;; - esac - library_names_spec='$libname$shrext' - ;; - interix[3-9]*) - library_names_spec='$libname$shrext' - ;; - irix5* | irix6* | nonstopux*) - library_names_spec='$libname$shrext' - case "$host_os" in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;; - *) libsuff= shlibsuff= ;; - esac - ;; - esac - ;; - linux*oldld* | linux*aout* | linux*coff*) - ;; - linux* | k*bsd*-gnu | kopensolaris*-gnu) - library_names_spec='$libname$shrext' - ;; - knetbsd*-gnu) - library_names_spec='$libname$shrext' - ;; - netbsd*) - library_names_spec='$libname$shrext' - ;; - newsos6) - library_names_spec='$libname$shrext' - ;; - *nto* | *qnx*) - library_names_spec='$libname$shrext' - ;; - openbsd*) - library_names_spec='$libname$shrext$versuffix' - ;; - os2*) - libname_spec='$name' - shrext=.dll - library_names_spec='$libname.a' - ;; - osf3* | osf4* | osf5*) - library_names_spec='$libname$shrext' - ;; - rdos*) - ;; - solaris*) - library_names_spec='$libname$shrext' - ;; - sunos4*) - library_names_spec='$libname$shrext$versuffix' - ;; - sysv4 | sysv4.3*) - library_names_spec='$libname$shrext' - ;; - sysv4*MP*) - library_names_spec='$libname$shrext' - ;; - sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - library_names_spec='$libname$shrext' - ;; - tpf*) - library_names_spec='$libname$shrext' - ;; - uts4*) - library_names_spec='$libname$shrext' - ;; -esac - -sed_quote_subst='s/\(["`$\\]\)/\\\1/g' -escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"` -shlibext=`echo "$shrext" | sed -e 's,^\.,,'` -escaped_libname_spec=`echo "X$libname_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` -escaped_library_names_spec=`echo "X$library_names_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` -escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` - -LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <<EOF - -# How to pass a linker flag through the compiler. -wl="$escaped_wl" - -# Static library suffix (normally "a"). -libext="$libext" - -# Shared library suffix (normally "so"). -shlibext="$shlibext" - -# Format of library name prefix. -libname_spec="$escaped_libname_spec" - -# Library names that the linker finds when passed -lNAME. -library_names_spec="$escaped_library_names_spec" - -# Flag to hardcode \$libdir into a binary during linking. -# This must work even if \$libdir does not exist. -hardcode_libdir_flag_spec="$escaped_hardcode_libdir_flag_spec" - -# Whether we need a single -rpath flag with a separated argument. -hardcode_libdir_separator="$hardcode_libdir_separator" - -# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the -# resulting binary. -hardcode_direct="$hardcode_direct" - -# Set to yes if using the -LDIR flag during linking hardcodes DIR into the -# resulting binary. -hardcode_minus_L="$hardcode_minus_L" - -EOF diff -Nru gdb-9.1/gnulib/import/extra/snippet/arg-nonnull.h gdb-10.2/gnulib/import/extra/snippet/arg-nonnull.h --- gdb-9.1/gnulib/import/extra/snippet/arg-nonnull.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/extra/snippet/arg-nonnull.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,26 +0,0 @@ -/* A C macro for declaring that specific arguments must not be NULL. - Copyright (C) 2009-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify it - under the terms of the GNU General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools - that the values passed as arguments n, ..., m must be non-NULL pointers. - n = 1 stands for the first argument, n = 2 for the second argument etc. */ -#ifndef _GL_ARG_NONNULL -# if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3 -# define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params)) -# else -# define _GL_ARG_NONNULL(params) -# endif -#endif diff -Nru gdb-9.1/gnulib/import/extra/snippet/c++defs.h gdb-10.2/gnulib/import/extra/snippet/c++defs.h --- gdb-9.1/gnulib/import/extra/snippet/c++defs.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/extra/snippet/c++defs.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,306 +0,0 @@ -/* C++ compatible function declaration macros. - Copyright (C) 2010-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify it - under the terms of the GNU General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#ifndef _GL_CXXDEFS_H -#define _GL_CXXDEFS_H - -/* Begin/end the GNULIB_NAMESPACE namespace. */ -#if defined __cplusplus && defined GNULIB_NAMESPACE -# define _GL_BEGIN_NAMESPACE namespace GNULIB_NAMESPACE { -# define _GL_END_NAMESPACE } -#else -# define _GL_BEGIN_NAMESPACE -# define _GL_END_NAMESPACE -#endif - -/* The three most frequent use cases of these macros are: - - * For providing a substitute for a function that is missing on some - platforms, but is declared and works fine on the platforms on which - it exists: - - #if @GNULIB_FOO@ - # if !@HAVE_FOO@ - _GL_FUNCDECL_SYS (foo, ...); - # endif - _GL_CXXALIAS_SYS (foo, ...); - _GL_CXXALIASWARN (foo); - #elif defined GNULIB_POSIXCHECK - ... - #endif - - * For providing a replacement for a function that exists on all platforms, - but is broken/insufficient and needs to be replaced on some platforms: - - #if @GNULIB_FOO@ - # if @REPLACE_FOO@ - # if !(defined __cplusplus && defined GNULIB_NAMESPACE) - # undef foo - # define foo rpl_foo - # endif - _GL_FUNCDECL_RPL (foo, ...); - _GL_CXXALIAS_RPL (foo, ...); - # else - _GL_CXXALIAS_SYS (foo, ...); - # endif - _GL_CXXALIASWARN (foo); - #elif defined GNULIB_POSIXCHECK - ... - #endif - - * For providing a replacement for a function that exists on some platforms - but is broken/insufficient and needs to be replaced on some of them and - is additionally either missing or undeclared on some other platforms: - - #if @GNULIB_FOO@ - # if @REPLACE_FOO@ - # if !(defined __cplusplus && defined GNULIB_NAMESPACE) - # undef foo - # define foo rpl_foo - # endif - _GL_FUNCDECL_RPL (foo, ...); - _GL_CXXALIAS_RPL (foo, ...); - # else - # if !@HAVE_FOO@ or if !@HAVE_DECL_FOO@ - _GL_FUNCDECL_SYS (foo, ...); - # endif - _GL_CXXALIAS_SYS (foo, ...); - # endif - _GL_CXXALIASWARN (foo); - #elif defined GNULIB_POSIXCHECK - ... - #endif -*/ - -/* _GL_EXTERN_C declaration; - performs the declaration with C linkage. */ -#if defined __cplusplus -# define _GL_EXTERN_C extern "C" -#else -# define _GL_EXTERN_C extern -#endif - -/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes); - declares a replacement function, named rpl_func, with the given prototype, - consisting of return type, parameters, and attributes. - Example: - _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...) - _GL_ARG_NONNULL ((1))); - */ -#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \ - _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes) -#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \ - _GL_EXTERN_C rettype rpl_func parameters_and_attributes - -/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes); - declares the system function, named func, with the given prototype, - consisting of return type, parameters, and attributes. - Example: - _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...) - _GL_ARG_NONNULL ((1))); - */ -#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \ - _GL_EXTERN_C rettype func parameters_and_attributes - -/* _GL_CXXALIAS_RPL (func, rettype, parameters); - declares a C++ alias called GNULIB_NAMESPACE::func - that redirects to rpl_func, if GNULIB_NAMESPACE is defined. - Example: - _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); - - Wrapping rpl_func in an object with an inline conversion operator - avoids a reference to rpl_func unless GNULIB_NAMESPACE::func is - actually used in the program. */ -#define _GL_CXXALIAS_RPL(func,rettype,parameters) \ - _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters) -#if defined __cplusplus && defined GNULIB_NAMESPACE -# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ - namespace GNULIB_NAMESPACE \ - { \ - static const struct _gl_ ## func ## _wrapper \ - { \ - typedef rettype (*type) parameters; \ - inline type rpl () const { return ::rpl_func; } \ - inline operator type () const { return rpl (); } \ - } func = {}; \ - } \ - _GL_EXTERN_C int _gl_cxxalias_dummy -#else -# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ - _GL_EXTERN_C int _gl_cxxalias_dummy -#endif - -/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters); - is like _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters); - except that the C function rpl_func may have a slightly different - declaration. A cast is used to silence the "invalid conversion" error - that would otherwise occur. */ -#if defined __cplusplus && defined GNULIB_NAMESPACE -# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ - namespace GNULIB_NAMESPACE \ - { \ - static const struct _gl_ ## func ## _wrapper \ - { \ - typedef rettype (*type) parameters; \ - inline type rpl () const \ - { return reinterpret_cast<type>(::rpl_func); } \ - inline operator type () const { return rpl (); } \ - } func = {}; \ - } \ - _GL_EXTERN_C int _gl_cxxalias_dummy -#else -# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ - _GL_EXTERN_C int _gl_cxxalias_dummy -#endif - -/* _GL_CXXALIAS_SYS (func, rettype, parameters); - declares a C++ alias called GNULIB_NAMESPACE::func - that redirects to the system provided function func, if GNULIB_NAMESPACE - is defined. - Example: - _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); - - Wrapping func in an object with an inline conversion operator - avoids a reference to func unless GNULIB_NAMESPACE::func is - actually used in the program. */ -#if defined __cplusplus && defined GNULIB_NAMESPACE -# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ - namespace GNULIB_NAMESPACE \ - { \ - static const struct _gl_ ## func ## _wrapper \ - { \ - typedef rettype (*type) parameters; \ - inline type rpl () const { return ::func; } \ - inline operator type () const { return rpl (); } \ - } func = {}; \ - } \ - _GL_EXTERN_C int _gl_cxxalias_dummy -#else -# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ - _GL_EXTERN_C int _gl_cxxalias_dummy -#endif - -/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters); - is like _GL_CXXALIAS_SYS (func, rettype, parameters); - except that the C function func may have a slightly different declaration. - A cast is used to silence the "invalid conversion" error that would - otherwise occur. */ -#if defined __cplusplus && defined GNULIB_NAMESPACE -# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ - namespace GNULIB_NAMESPACE \ - { \ - static const struct _gl_ ## func ## _wrapper \ - { \ - typedef rettype (*type) parameters; \ - inline type rpl () const \ - { return reinterpret_cast<type>(::func); } \ - inline operator type () const { return rpl (); }\ - } func = {}; \ - } \ - _GL_EXTERN_C int _gl_cxxalias_dummy -#else -# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ - _GL_EXTERN_C int _gl_cxxalias_dummy -#endif - -/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2); - is like _GL_CXXALIAS_SYS (func, rettype, parameters); - except that the C function is picked among a set of overloaded functions, - namely the one with rettype2 and parameters2. Two consecutive casts - are used to silence the "cannot find a match" and "invalid conversion" - errors that would otherwise occur. */ -#if defined __cplusplus && defined GNULIB_NAMESPACE - /* The outer cast must be a reinterpret_cast. - The inner cast: When the function is defined as a set of overloaded - functions, it works as a static_cast<>, choosing the designated variant. - When the function is defined as a single variant, it works as a - reinterpret_cast<>. The parenthesized cast syntax works both ways. */ -# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ - namespace GNULIB_NAMESPACE \ - { \ - static const struct _gl_ ## func ## _wrapper \ - { \ - typedef rettype (*type) parameters; \ - \ - inline type rpl () const \ - { return reinterpret_cast<type>((rettype2 (*) parameters2)(::func)); }\ - \ - inline operator type () const { return rpl (); } \ - } func = {}; \ - } \ - _GL_EXTERN_C int _gl_cxxalias_dummy -#else -# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ - _GL_EXTERN_C int _gl_cxxalias_dummy -#endif - -/* _GL_CXXALIASWARN (func); - causes a warning to be emitted when ::func is used but not when - GNULIB_NAMESPACE::func is used. func must be defined without overloaded - variants. */ -#if defined __cplusplus && defined GNULIB_NAMESPACE -# define _GL_CXXALIASWARN(func) \ - _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE) -# define _GL_CXXALIASWARN_1(func,namespace) \ - _GL_CXXALIASWARN_2 (func, namespace) -/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>, - we enable the warning only when not optimizing. */ -# if !__OPTIMIZE__ -# define _GL_CXXALIASWARN_2(func,namespace) \ - _GL_WARN_ON_USE (func, \ - "The symbol ::" #func " refers to the system function. " \ - "Use " #namespace "::" #func " instead.") -# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING -# define _GL_CXXALIASWARN_2(func,namespace) \ - extern __typeof__ (func) func -# else -# define _GL_CXXALIASWARN_2(func,namespace) \ - _GL_EXTERN_C int _gl_cxxalias_dummy -# endif -#else -# define _GL_CXXALIASWARN(func) \ - _GL_EXTERN_C int _gl_cxxalias_dummy -#endif - -/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes); - causes a warning to be emitted when the given overloaded variant of ::func - is used but not when GNULIB_NAMESPACE::func is used. */ -#if defined __cplusplus && defined GNULIB_NAMESPACE -# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ - _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \ - GNULIB_NAMESPACE) -# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \ - _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace) -/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>, - we enable the warning only when not optimizing. */ -# if !__OPTIMIZE__ -# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ - _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \ - "The symbol ::" #func " refers to the system function. " \ - "Use " #namespace "::" #func " instead.") -# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING -# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ - extern __typeof__ (func) func -# else -# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ - _GL_EXTERN_C int _gl_cxxalias_dummy -# endif -#else -# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ - _GL_EXTERN_C int _gl_cxxalias_dummy -#endif - -#endif /* _GL_CXXDEFS_H */ diff -Nru gdb-9.1/gnulib/import/extra/snippet/_Noreturn.h gdb-10.2/gnulib/import/extra/snippet/_Noreturn.h --- gdb-9.1/gnulib/import/extra/snippet/_Noreturn.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/extra/snippet/_Noreturn.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,10 +0,0 @@ -#if !defined _Noreturn && __STDC_VERSION__ < 201112 -# if (3 <= __GNUC__ || (__GNUC__ == 2 && 8 <= __GNUC_MINOR__) \ - || 0x5110 <= __SUNPRO_C) -# define _Noreturn __attribute__ ((__noreturn__)) -# elif 1200 <= _MSC_VER -# define _Noreturn __declspec (noreturn) -# else -# define _Noreturn -# endif -#endif diff -Nru gdb-9.1/gnulib/import/extra/snippet/warn-on-use.h gdb-10.2/gnulib/import/extra/snippet/warn-on-use.h --- gdb-9.1/gnulib/import/extra/snippet/warn-on-use.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/extra/snippet/warn-on-use.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,109 +0,0 @@ -/* A C macro for emitting warnings if a function is used. - Copyright (C) 2010-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify it - under the terms of the GNU General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -/* _GL_WARN_ON_USE (function, "literal string") issues a declaration - for FUNCTION which will then trigger a compiler warning containing - the text of "literal string" anywhere that function is called, if - supported by the compiler. If the compiler does not support this - feature, the macro expands to an unused extern declaration. - - This macro is useful for marking a function as a potential - portability trap, with the intent that "literal string" include - instructions on the replacement function that should be used - instead. However, one of the reasons that a function is a - portability trap is if it has the wrong signature. Declaring - FUNCTION with a different signature in C is a compilation error, so - this macro must use the same type as any existing declaration so - that programs that avoid the problematic FUNCTION do not fail to - compile merely because they included a header that poisoned the - function. But this implies that _GL_WARN_ON_USE is only safe to - use if FUNCTION is known to already have a declaration. Use of - this macro implies that there must not be any other macro hiding - the declaration of FUNCTION; but undefining FUNCTION first is part - of the poisoning process anyway (although for symbols that are - provided only via a macro, the result is a compilation error rather - than a warning containing "literal string"). Also note that in - C++, it is only safe to use if FUNCTION has no overloads. - - For an example, it is possible to poison 'getline' by: - - adding a call to gl_WARN_ON_USE_PREPARE([[#include <stdio.h>]], - [getline]) in configure.ac, which potentially defines - HAVE_RAW_DECL_GETLINE - - adding this code to a header that wraps the system <stdio.h>: - #undef getline - #if HAVE_RAW_DECL_GETLINE - _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but" - "not universally present; use the gnulib module getline"); - #endif - - It is not possible to directly poison global variables. But it is - possible to write a wrapper accessor function, and poison that - (less common usage, like &environ, will cause a compilation error - rather than issue the nice warning, but the end result of informing - the developer about their portability problem is still achieved): - #if HAVE_RAW_DECL_ENVIRON - static char ***rpl_environ (void) { return &environ; } - _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared"); - # undef environ - # define environ (*rpl_environ ()) - #endif - */ -#ifndef _GL_WARN_ON_USE - -# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) -/* A compiler attribute is available in gcc versions 4.3.0 and later. */ -# define _GL_WARN_ON_USE(function, message) \ -extern __typeof__ (function) function __attribute__ ((__warning__ (message))) -# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING -/* Verify the existence of the function. */ -# define _GL_WARN_ON_USE(function, message) \ -extern __typeof__ (function) function -# else /* Unsupported. */ -# define _GL_WARN_ON_USE(function, message) \ -_GL_WARN_EXTERN_C int _gl_warn_on_use -# endif -#endif - -/* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string") - is like _GL_WARN_ON_USE (function, "string"), except that the function is - declared with the given prototype, consisting of return type, parameters, - and attributes. - This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does - not work in this case. */ -#ifndef _GL_WARN_ON_USE_CXX -# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) -# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ -extern rettype function parameters_and_attributes \ - __attribute__ ((__warning__ (msg))) -# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING -/* Verify the existence of the function. */ -# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ -extern rettype function parameters_and_attributes -# else /* Unsupported. */ -# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ -_GL_WARN_EXTERN_C int _gl_warn_on_use -# endif -#endif - -/* _GL_WARN_EXTERN_C declaration; - performs the declaration with C linkage. */ -#ifndef _GL_WARN_EXTERN_C -# if defined __cplusplus -# define _GL_WARN_EXTERN_C extern "C" -# else -# define _GL_WARN_EXTERN_C extern -# endif -#endif diff -Nru gdb-9.1/gnulib/import/extra/update-copyright gdb-10.2/gnulib/import/extra/update-copyright --- gdb-9.1/gnulib/import/extra/update-copyright 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/extra/update-copyright 2021-04-25 04:06:26.000000000 +0000 @@ -1,11 +1,9 @@ -eval '(exit $?0)' && eval 'exec perl -wS -0777 -pi "$0" "$@"' - & eval 'exec perl -wS -0777 -pi "$0" $argv:q' - if 0; -# Update an FSF copyright year list to include the current year. +#!/bin/sh +#! -*-perl-*- -my $VERSION = '2016-01-12.23:13'; # UTC +# Update an FSF copyright year list to include the current year. -# Copyright (C) 2009-2016 Free Software Foundation, Inc. +# Copyright (C) 2009-2020 Free Software Foundation, Inc. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -18,10 +16,13 @@ # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. - +# along with this program. If not, see <https://www.gnu.org/licenses/>. +# # Written by Jim Meyering and Joel E. Denny +# This script updates an FSF copyright year list to include the current year. +# Usage: update-copyright [FILE...] +# # The arguments to this script should be names of files that contain # copyright statements to be updated. The copyright holder's name # defaults to "Free Software Foundation, Inc." but may be changed to @@ -81,6 +82,7 @@ # B. (c) # C. @copyright{} # D. © +# E. © # # 4. The "Copyright" appears at the beginning of a line, except that it # may be prefixed by any sequence (e.g., a comment) of no more than @@ -96,7 +98,7 @@ # 6. Blank lines, even if preceded by the prefix, do not appear # within the FSF copyright statement. # 7. Each copyright year is 2 or 4 digits, and years are separated by -# commas or dashes. Whitespace may appear after commas. +# commas, "-", or "--". Whitespace may appear after commas. # # Environment variables: # @@ -120,11 +122,32 @@ # 5. Set UPDATE_COPYRIGHT_HOLDER if the copyright holder is other # than "Free Software Foundation, Inc.". +# This is a prologue that allows to run a perl script as an executable +# on systems that are compliant to a POSIX version before POSIX:2017. +# On such systems, the usual invocation of an executable through execlp() +# or execvp() fails with ENOEXEC if it is a script that does not start +# with a #! line. The script interpreter mentioned in the #! line has +# to be /bin/sh, because on GuixSD systems that is the only program that +# has a fixed file name. The second line is essential for perl and is +# also useful for editing this file in Emacs. The next two lines below +# are valid code in both sh and perl. When executed by sh, they re-execute +# the script through the perl program found in $PATH. The '-x' option +# is essential as well; without it, perl would re-execute the script +# through /bin/sh. When executed by perl, the next two lines are a no-op. +eval 'exec perl -wSx -0777 -pi "$0" "$@"' + if 0; + +my $VERSION = '2020-04-04.15:07'; # UTC +# The definition above must lie within the first 8 lines in order +# for the Emacs time-stamp write hook (at end) to update it. +# If you change this file with Emacs, please let the write hook +# do its job. Otherwise, update this string manually. + use strict; use warnings; my $copyright_re = 'Copyright'; -my $circle_c_re = '(?:\([cC]\)|@copyright\{}|\\\\\(co|©)'; +my $circle_c_re = '(?:\([cC]\)|@copyright\{}|\\\\\(co|©|©)'; my $holder = $ENV{UPDATE_COPYRIGHT_HOLDER}; $holder ||= 'Free Software Foundation, Inc.'; my $prefix_max = 5; @@ -169,7 +192,7 @@ $holder_re =~ s/\s/$ws_re/g; my $stmt_remainder_re = "(?:$ws_re$circle_c_re)?" - . "$ws_re(?:(?:\\d\\d)?\\d\\d(?:,$ws_re?|-))*" + . "$ws_re(?:(?:\\d\\d)?\\d\\d(?:,$ws_re?|--?))*" . "((?:\\d\\d)?\\d\\d)$ws_re$holder_re"; if (/\G$stmt_remainder_re/) { @@ -208,26 +231,28 @@ # Make the use of intervals consistent. if (!$ENV{UPDATE_COPYRIGHT_USE_INTERVALS}) { - $stmt =~ s/(\d{4})-(\d{4})/join(', ', $1..$2)/eg; + $stmt =~ s/(\d{4})--?(\d{4})/join(', ', $1..$2)/eg; } else { + my $ndash = $ARGV =~ /\.tex(i(nfo)?)?$/ ? "--" : "-"; + $stmt =~ s/ (\d{4}) (?: - (,\ |-) + (,\ |--?) ((??{ - if ($2 eq '-') { '\d{4}'; } + if ($2 ne ', ') { '\d{4}'; } elsif (!$3) { $1 + 1; } else { $3 + 1; } })) )+ - /$1-$3/gx; + /$1$ndash$3/gx; # When it's 2, emit a single range encompassing all year numbers. $ENV{UPDATE_COPYRIGHT_USE_INTERVALS} == 2 - and $stmt =~ s/\b(\d{4})\b.*\b(\d{4})\b/$1-$2/; + and $stmt =~ s/\b(\d{4})\b.*\b(\d{4})\b/$1$ndash$2/; } # Format within margin. @@ -263,10 +288,13 @@ print STDERR "$ARGV: warning: copyright statement not found\n"; } +# Hey Emacs! # Local variables: +# coding: utf-8 # mode: perl # indent-tabs-mode: nil -# eval: (add-hook 'write-file-hooks 'time-stamp) +# eval: (add-hook 'before-save-hook 'time-stamp) +# time-stamp-line-limit: 200 # time-stamp-start: "my $VERSION = '" # time-stamp-format: "%:y-%02m-%02d.%02H:%02M" # time-stamp-time-zone: "UTC0" diff -Nru gdb-9.1/gnulib/import/fchdir.c gdb-10.2/gnulib/import/fchdir.c --- gdb-9.1/gnulib/import/fchdir.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/fchdir.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* fchdir replacement. - Copyright (C) 2006-2016 Free Software Foundation, Inc. + Copyright (C) 2006-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -12,7 +12,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> @@ -29,7 +29,7 @@ #include <sys/stat.h> #include "assure.h" -#include "dosname.h" +#include "filename.h" #include "filenamecat.h" #ifndef REPLACE_OPEN_DIRECTORY @@ -84,7 +84,8 @@ return true; } -/* Return an absolute name of DIR in malloc'd storage. */ +/* Return an absolute name of DIR in malloc'd storage. + Upon failure, return NULL with errno set. */ static char * get_name (char const *dir) { @@ -125,8 +126,8 @@ /* Mark FD as visiting FILENAME. FD must be non-negative, and refer to an open file descriptor. If REPLACE_OPEN_DIRECTORY is non-zero, this should only be called if FD is visiting a directory. Close FD - and return -1 if there is insufficient memory to track the - directory name; otherwise return FD. */ + and return -1 with errno set if there is insufficient memory to track + the directory name; otherwise return FD. */ int _gl_register_fd (int fd, const char *filename) { diff -Nru gdb-9.1/gnulib/import/fcntl.c gdb-10.2/gnulib/import/fcntl.c --- gdb-9.1/gnulib/import/fcntl.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/fcntl.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Provide file descriptor control. - Copyright (C) 2009-2016 Free Software Foundation, Inc. + Copyright (C) 2009-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -13,7 +13,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Eric Blake <ebb9@byu.net>. */ @@ -25,20 +25,25 @@ #include <errno.h> #include <limits.h> #include <stdarg.h> +#include <stdlib.h> #include <unistd.h> -#if !HAVE_FCNTL -# define rpl_fcntl fcntl +#ifdef __KLIBC__ +# define INCL_DOS +# include <os2.h> #endif -#undef fcntl -#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ +#if defined _WIN32 && ! defined __CYGWIN__ /* Get declarations of the native Windows API functions. */ # define WIN32_LEAN_AND_MEAN # include <windows.h> /* Get _get_osfhandle. */ -# include "msvc-nothrow.h" +# if GNULIB_MSVC_NOTHROW +# include "msvc-nothrow.h" +# else +# include <io.h> +# endif /* Upper bound on getdtablesize(). See lib/getdtablesize.c. */ # define OPEN_MAX_MAX 0x10000 @@ -162,93 +167,18 @@ } #endif /* W32 */ +/* Forward declarations, because we '#undef fcntl' in the middle of this + compilation unit. */ +/* Our implementation of fcntl (fd, F_DUPFD, target). */ +static int rpl_fcntl_DUPFD (int fd, int target); +/* Our implementation of fcntl (fd, F_DUPFD_CLOEXEC, target). */ +static int rpl_fcntl_DUPFD_CLOEXEC (int fd, int target); #ifdef __KLIBC__ - -# define INCL_DOS -# include <os2.h> - -static int -klibc_fcntl (int fd, int action, /* arg */...) -{ - va_list arg_ptr; - int arg; - struct stat sbuf; - int result = -1; - - va_start (arg_ptr, action); - arg = va_arg (arg_ptr, int); - result = fcntl (fd, action, arg); - /* EPERM for F_DUPFD, ENOTSUP for others */ - if (result == -1 && (errno == EPERM || errno == ENOTSUP) - && !fstat (fd, &sbuf) && S_ISDIR (sbuf.st_mode)) - { - ULONG ulMode; - - switch (action) - { - case F_DUPFD: - /* Find available fd */ - while (fcntl (arg, F_GETFL) != -1 || errno != EBADF) - arg++; - - result = dup2 (fd, arg); - break; - - /* Using underlying APIs is right ? */ - case F_GETFD: - if (DosQueryFHState (fd, &ulMode)) - break; - - result = (ulMode & OPEN_FLAGS_NOINHERIT) ? FD_CLOEXEC : 0; - break; - - case F_SETFD: - if (arg & ~FD_CLOEXEC) - break; - - if (DosQueryFHState (fd, &ulMode)) - break; - - if (arg & FD_CLOEXEC) - ulMode |= OPEN_FLAGS_NOINHERIT; - else - ulMode &= ~OPEN_FLAGS_NOINHERIT; - - /* Filter supported flags. */ - ulMode &= (OPEN_FLAGS_WRITE_THROUGH | OPEN_FLAGS_FAIL_ON_ERROR - | OPEN_FLAGS_NO_CACHE | OPEN_FLAGS_NOINHERIT); - - if (DosSetFHState (fd, ulMode)) - break; - - result = 0; - break; - - case F_GETFL: - result = 0; - break; - - case F_SETFL: - if (arg != 0) - break; - - result = 0; - break; - - default : - errno = EINVAL; - break; - } - } - - va_end (arg_ptr); - - return result; -} - -# define fcntl klibc_fcntl +/* Adds support for fcntl on directories. */ +static int klibc_fcntl (int fd, int action, /* arg */...); #endif + /* Perform the specified ACTION on the file descriptor FD, possibly using the argument ARG further described below. This replacement handles the following actions, and forwards all others on to the @@ -269,110 +199,35 @@ return -1 and set errno. */ int -rpl_fcntl (int fd, int action, /* arg */...) +fcntl (int fd, int action, /* arg */...) +#undef fcntl +#ifdef __KLIBC__ +# define fcntl klibc_fcntl +#endif { va_list arg; int result = -1; va_start (arg, action); switch (action) { - -#if !HAVE_FCNTL case F_DUPFD: { int target = va_arg (arg, int); - result = dupfd (fd, target, 0); + result = rpl_fcntl_DUPFD (fd, target); break; } -#elif FCNTL_DUPFD_BUGGY || REPLACE_FCHDIR - case F_DUPFD: - { - int target = va_arg (arg, int); - /* Detect invalid target; needed for cygwin 1.5.x. */ - if (target < 0 || getdtablesize () <= target) - errno = EINVAL; - else - { - /* Haiku alpha 2 loses fd flags on original. */ - int flags = fcntl (fd, F_GETFD); - if (flags < 0) - { - result = -1; - break; - } - result = fcntl (fd, action, target); - if (0 <= result && fcntl (fd, F_SETFD, flags) == -1) - { - int saved_errno = errno; - close (result); - result = -1; - errno = saved_errno; - } -# if REPLACE_FCHDIR - if (0 <= result) - result = _gl_register_dup (fd, result); -# endif - } - break; - } /* F_DUPFD */ -#endif /* FCNTL_DUPFD_BUGGY || REPLACE_FCHDIR */ case F_DUPFD_CLOEXEC: { int target = va_arg (arg, int); - -#if !HAVE_FCNTL - result = dupfd (fd, target, O_CLOEXEC); - break; -#else /* HAVE_FCNTL */ - /* Try the system call first, if the headers claim it exists - (that is, if GNULIB_defined_F_DUPFD_CLOEXEC is 0), since we - may be running with a glibc that has the macro but with an - older kernel that does not support it. Cache the - information on whether the system call really works, but - avoid caching failure if the corresponding F_DUPFD fails - for any reason. 0 = unknown, 1 = yes, -1 = no. */ - static int have_dupfd_cloexec = GNULIB_defined_F_DUPFD_CLOEXEC ? -1 : 0; - if (0 <= have_dupfd_cloexec) - { - result = fcntl (fd, action, target); - if (0 <= result || errno != EINVAL) - { - have_dupfd_cloexec = 1; -# if REPLACE_FCHDIR - if (0 <= result) - result = _gl_register_dup (fd, result); -# endif - } - else - { - result = rpl_fcntl (fd, F_DUPFD, target); - if (result < 0) - break; - have_dupfd_cloexec = -1; - } - } - else - result = rpl_fcntl (fd, F_DUPFD, target); - if (0 <= result && have_dupfd_cloexec == -1) - { - int flags = fcntl (result, F_GETFD); - if (flags < 0 || fcntl (result, F_SETFD, flags | FD_CLOEXEC) == -1) - { - int saved_errno = errno; - close (result); - errno = saved_errno; - result = -1; - } - } + result = rpl_fcntl_DUPFD_CLOEXEC (fd, target); break; -#endif /* HAVE_FCNTL */ - } /* F_DUPFD_CLOEXEC */ + } #if !HAVE_FCNTL case F_GETFD: { -# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ +# if defined _WIN32 && ! defined __CYGWIN__ HANDLE handle = (HANDLE) _get_osfhandle (fd); DWORD flags; if (handle == INVALID_HANDLE_VALUE @@ -401,8 +256,183 @@ default: { #if HAVE_FCNTL - void *p = va_arg (arg, void *); - result = fcntl (fd, action, p); + switch (action) + { + #ifdef F_BARRIERFSYNC /* macOS */ + case F_BARRIERFSYNC: + #endif + #ifdef F_CHKCLEAN /* macOS */ + case F_CHKCLEAN: + #endif + #ifdef F_CLOSEM /* NetBSD, HP-UX */ + case F_CLOSEM: + #endif + #ifdef F_FLUSH_DATA /* macOS */ + case F_FLUSH_DATA: + #endif + #ifdef F_FREEZE_FS /* macOS */ + case F_FREEZE_FS: + #endif + #ifdef F_FULLFSYNC /* macOS */ + case F_FULLFSYNC: + #endif + #ifdef F_GETCONFINED /* macOS */ + case F_GETCONFINED: + #endif + #ifdef F_GETDEFAULTPROTLEVEL /* macOS */ + case F_GETDEFAULTPROTLEVEL: + #endif + #ifdef F_GETFD /* POSIX */ + case F_GETFD: + #endif + #ifdef F_GETFL /* POSIX */ + case F_GETFL: + #endif + #ifdef F_GETLEASE /* Linux */ + case F_GETLEASE: + #endif + #ifdef F_GETNOSIGPIPE /* macOS */ + case F_GETNOSIGPIPE: + #endif + #ifdef F_GETOWN /* POSIX */ + case F_GETOWN: + #endif + #ifdef F_GETPIPE_SZ /* Linux */ + case F_GETPIPE_SZ: + #endif + #ifdef F_GETPROTECTIONCLASS /* macOS */ + case F_GETPROTECTIONCLASS: + #endif + #ifdef F_GETPROTECTIONLEVEL /* macOS */ + case F_GETPROTECTIONLEVEL: + #endif + #ifdef F_GET_SEALS /* Linux */ + case F_GET_SEALS: + #endif + #ifdef F_GETSIG /* Linux */ + case F_GETSIG: + #endif + #ifdef F_MAXFD /* NetBSD */ + case F_MAXFD: + #endif + #ifdef F_RECYCLE /* macOS */ + case F_RECYCLE: + #endif + #ifdef F_SETFIFOENH /* HP-UX */ + case F_SETFIFOENH: + #endif + #ifdef F_THAW_FS /* macOS */ + case F_THAW_FS: + #endif + /* These actions take no argument. */ + result = fcntl (fd, action); + break; + + #ifdef F_ADD_SEALS /* Linux */ + case F_ADD_SEALS: + #endif + #ifdef F_BADFD /* Solaris */ + case F_BADFD: + #endif + #ifdef F_CHECK_OPENEVT /* macOS */ + case F_CHECK_OPENEVT: + #endif + #ifdef F_DUP2FD /* FreeBSD, AIX, Solaris */ + case F_DUP2FD: + #endif + #ifdef F_DUP2FD_CLOEXEC /* FreeBSD, Solaris */ + case F_DUP2FD_CLOEXEC: + #endif + #ifdef F_DUP2FD_CLOFORK /* Solaris */ + case F_DUP2FD_CLOFORK: + #endif + #ifdef F_DUPFD /* POSIX */ + case F_DUPFD: + #endif + #ifdef F_DUPFD_CLOEXEC /* POSIX */ + case F_DUPFD_CLOEXEC: + #endif + #ifdef F_DUPFD_CLOFORK /* Solaris */ + case F_DUPFD_CLOFORK: + #endif + #ifdef F_GETXFL /* Solaris */ + case F_GETXFL: + #endif + #ifdef F_GLOBAL_NOCACHE /* macOS */ + case F_GLOBAL_NOCACHE: + #endif + #ifdef F_MAKECOMPRESSED /* macOS */ + case F_MAKECOMPRESSED: + #endif + #ifdef F_MOVEDATAEXTENTS /* macOS */ + case F_MOVEDATAEXTENTS: + #endif + #ifdef F_NOCACHE /* macOS */ + case F_NOCACHE: + #endif + #ifdef F_NODIRECT /* macOS */ + case F_NODIRECT: + #endif + #ifdef F_NOTIFY /* Linux */ + case F_NOTIFY: + #endif + #ifdef F_OPLKACK /* IRIX */ + case F_OPLKACK: + #endif + #ifdef F_OPLKREG /* IRIX */ + case F_OPLKREG: + #endif + #ifdef F_RDAHEAD /* macOS */ + case F_RDAHEAD: + #endif + #ifdef F_SETBACKINGSTORE /* macOS */ + case F_SETBACKINGSTORE: + #endif + #ifdef F_SETCONFINED /* macOS */ + case F_SETCONFINED: + #endif + #ifdef F_SETFD /* POSIX */ + case F_SETFD: + #endif + #ifdef F_SETFL /* POSIX */ + case F_SETFL: + #endif + #ifdef F_SETLEASE /* Linux */ + case F_SETLEASE: + #endif + #ifdef F_SETNOSIGPIPE /* macOS */ + case F_SETNOSIGPIPE: + #endif + #ifdef F_SETOWN /* POSIX */ + case F_SETOWN: + #endif + #ifdef F_SETPIPE_SZ /* Linux */ + case F_SETPIPE_SZ: + #endif + #ifdef F_SETPROTECTIONCLASS /* macOS */ + case F_SETPROTECTIONCLASS: + #endif + #ifdef F_SETSIG /* Linux */ + case F_SETSIG: + #endif + #ifdef F_SINGLE_WRITER /* macOS */ + case F_SINGLE_WRITER: + #endif + /* These actions take an 'int' argument. */ + { + int x = va_arg (arg, int); + result = fcntl (fd, action, x); + } + break; + + default: + /* Other actions take a pointer argument. */ + { + void *p = va_arg (arg, void *); + result = fcntl (fd, action, p); + } + break; + } #else errno = EINVAL; #endif @@ -412,3 +442,186 @@ va_end (arg); return result; } + +static int +rpl_fcntl_DUPFD (int fd, int target) +{ + int result; +#if !HAVE_FCNTL + result = dupfd (fd, target, 0); +#elif FCNTL_DUPFD_BUGGY || REPLACE_FCHDIR + /* Detect invalid target; needed for cygwin 1.5.x. */ + if (target < 0 || getdtablesize () <= target) + { + result = -1; + errno = EINVAL; + } + else + { + /* Haiku alpha 2 loses fd flags on original. */ + int flags = fcntl (fd, F_GETFD); + if (flags < 0) + result = -1; + else + { + result = fcntl (fd, F_DUPFD, target); + if (0 <= result && fcntl (fd, F_SETFD, flags) == -1) + { + int saved_errno = errno; + close (result); + result = -1; + errno = saved_errno; + } +# if REPLACE_FCHDIR + if (0 <= result) + result = _gl_register_dup (fd, result); +# endif + } + } +#else + result = fcntl (fd, F_DUPFD, target); +#endif + return result; +} + +static int +rpl_fcntl_DUPFD_CLOEXEC (int fd, int target) +{ + int result; +#if !HAVE_FCNTL + result = dupfd (fd, target, O_CLOEXEC); +#else /* HAVE_FCNTL */ +# if defined __HAIKU__ + /* On Haiku, the system fcntl (fd, F_DUPFD_CLOEXEC, target) sets + the FD_CLOEXEC flag on fd, not on target. Therefore avoid the + system fcntl in this case. */ +# define have_dupfd_cloexec -1 +# else + /* Try the system call first, if the headers claim it exists + (that is, if GNULIB_defined_F_DUPFD_CLOEXEC is 0), since we + may be running with a glibc that has the macro but with an + older kernel that does not support it. Cache the + information on whether the system call really works, but + avoid caching failure if the corresponding F_DUPFD fails + for any reason. 0 = unknown, 1 = yes, -1 = no. */ + static int have_dupfd_cloexec = GNULIB_defined_F_DUPFD_CLOEXEC ? -1 : 0; + if (0 <= have_dupfd_cloexec) + { + result = fcntl (fd, F_DUPFD_CLOEXEC, target); + if (0 <= result || errno != EINVAL) + { + have_dupfd_cloexec = 1; +# if REPLACE_FCHDIR + if (0 <= result) + result = _gl_register_dup (fd, result); +# endif + } + else + { + result = rpl_fcntl_DUPFD (fd, target); + if (result >= 0) + have_dupfd_cloexec = -1; + } + } + else +# endif + result = rpl_fcntl_DUPFD (fd, target); + if (0 <= result && have_dupfd_cloexec == -1) + { + int flags = fcntl (result, F_GETFD); + if (flags < 0 || fcntl (result, F_SETFD, flags | FD_CLOEXEC) == -1) + { + int saved_errno = errno; + close (result); + errno = saved_errno; + result = -1; + } + } +#endif /* HAVE_FCNTL */ + return result; +} + +#undef fcntl + +#ifdef __KLIBC__ + +static int +klibc_fcntl (int fd, int action, /* arg */...) +{ + va_list arg_ptr; + int arg; + struct stat sbuf; + int result; + + va_start (arg_ptr, action); + arg = va_arg (arg_ptr, int); + result = fcntl (fd, action, arg); + /* EPERM for F_DUPFD, ENOTSUP for others */ + if (result == -1 && (errno == EPERM || errno == ENOTSUP) + && !fstat (fd, &sbuf) && S_ISDIR (sbuf.st_mode)) + { + ULONG ulMode; + + switch (action) + { + case F_DUPFD: + /* Find available fd */ + while (fcntl (arg, F_GETFL) != -1 || errno != EBADF) + arg++; + + result = dup2 (fd, arg); + break; + + /* Using underlying APIs is right ? */ + case F_GETFD: + if (DosQueryFHState (fd, &ulMode)) + break; + + result = (ulMode & OPEN_FLAGS_NOINHERIT) ? FD_CLOEXEC : 0; + break; + + case F_SETFD: + if (arg & ~FD_CLOEXEC) + break; + + if (DosQueryFHState (fd, &ulMode)) + break; + + if (arg & FD_CLOEXEC) + ulMode |= OPEN_FLAGS_NOINHERIT; + else + ulMode &= ~OPEN_FLAGS_NOINHERIT; + + /* Filter supported flags. */ + ulMode &= (OPEN_FLAGS_WRITE_THROUGH | OPEN_FLAGS_FAIL_ON_ERROR + | OPEN_FLAGS_NO_CACHE | OPEN_FLAGS_NOINHERIT); + + if (DosSetFHState (fd, ulMode)) + break; + + result = 0; + break; + + case F_GETFL: + result = 0; + break; + + case F_SETFL: + if (arg != 0) + break; + + result = 0; + break; + + default: + errno = EINVAL; + break; + } + } + + va_end (arg_ptr); + + return result; +} + +#endif diff -Nru gdb-9.1/gnulib/import/fcntl.in.h gdb-10.2/gnulib/import/fcntl.in.h --- gdb-9.1/gnulib/import/fcntl.in.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/fcntl.in.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Like <fcntl.h>, but with non-working flags defined to 0. - Copyright (C) 2006-2016 Free Software Foundation, Inc. + Copyright (C) 2006-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -13,7 +13,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* written by Paul Eggert */ @@ -39,6 +39,12 @@ #endif #@INCLUDE_NEXT@ @NEXT_FCNTL_H@ +/* Native Windows platforms declare open(), creat() in <io.h>. */ +#if (@GNULIB_CREAT@ || @GNULIB_OPEN@ || defined GNULIB_POSIXCHECK) \ + && (defined _WIN32 && ! defined __CYGWIN__) +# include <io.h> +#endif + #else /* Normal invocation convention. */ @@ -59,6 +65,12 @@ /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_FCNTL_H@ +/* Native Windows platforms declare open(), creat() in <io.h>. */ +#if (@GNULIB_CREAT@ || @GNULIB_OPEN@ || defined GNULIB_POSIXCHECK) \ + && (defined _WIN32 && ! defined __CYGWIN__) +# include <io.h> +#endif + #ifndef _@GUARD_PREFIX@_FCNTL_H #define _@GUARD_PREFIX@_FCNTL_H @@ -66,12 +78,6 @@ # include <unistd.h> #endif -/* Native Windows platforms declare open(), creat() in <io.h>. */ -#if (@GNULIB_OPEN@ || defined GNULIB_POSIXCHECK) \ - && ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) -# include <io.h> -#endif - /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ @@ -82,6 +88,26 @@ /* Declare overridden functions. */ +#if @GNULIB_CREAT@ +# if @REPLACE_CREAT@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef creat +# define creat rpl_creat +# endif +_GL_FUNCDECL_RPL (creat, int, (const char *filename, mode_t mode) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (creat, int, (const char *filename, mode_t mode)); +# else +_GL_CXXALIAS_SYS (creat, int, (const char *filename, mode_t mode)); +# endif +_GL_CXXALIASWARN (creat); +#elif defined GNULIB_POSIXCHECK +# undef creat +/* Assume creat is always declared. */ +_GL_WARN_ON_USE (creat, "creat is not always POSIX compliant - " + "use gnulib module creat for portability"); +#endif + #if @GNULIB_FCNTL@ # if @REPLACE_FCNTL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) @@ -90,9 +116,15 @@ # endif _GL_FUNCDECL_RPL (fcntl, int, (int fd, int action, ...)); _GL_CXXALIAS_RPL (fcntl, int, (int fd, int action, ...)); +# if !GNULIB_defined_rpl_fcntl +# define GNULIB_defined_rpl_fcntl 1 +# endif # else # if !@HAVE_FCNTL@ _GL_FUNCDECL_SYS (fcntl, int, (int fd, int action, ...)); +# if !GNULIB_defined_fcntl +# define GNULIB_defined_fcntl 1 +# endif # endif _GL_CXXALIAS_SYS (fcntl, int, (int fd, int action, ...)); # endif @@ -213,7 +245,10 @@ #endif #ifndef O_CLOEXEC -# define O_CLOEXEC 0 +# define O_CLOEXEC 0x40000000 /* Try to not collide with system O_* flags. */ +# define GNULIB_defined_O_CLOEXEC 1 +#else +# define GNULIB_defined_O_CLOEXEC 0 #endif #ifndef O_DIRECT diff -Nru gdb-9.1/gnulib/import/fd-hook.c gdb-10.2/gnulib/import/fd-hook.c --- gdb-9.1/gnulib/import/fd-hook.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/fd-hook.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ -/* Hook for making making file descriptor functions close(), ioctl() extensible. - Copyright (C) 2009-2016 Free Software Foundation, Inc. +/* Hook for making file descriptor functions close(), ioctl() extensible. + Copyright (C) 2009-2020 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This program is free software: you can redistribute it and/or modify it @@ -13,7 +13,7 @@ General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> diff -Nru gdb-9.1/gnulib/import/fd-hook.h gdb-10.2/gnulib/import/fd-hook.h --- gdb-9.1/gnulib/import/fd-hook.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/fd-hook.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ -/* Hook for making making file descriptor functions close(), ioctl() extensible. - Copyright (C) 2009-2016 Free Software Foundation, Inc. +/* Hook for making file descriptor functions close(), ioctl() extensible. + Copyright (C) 2009-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published @@ -12,7 +12,7 @@ General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef FD_HOOK_H diff -Nru gdb-9.1/gnulib/import/fdopendir.c gdb-10.2/gnulib/import/fdopendir.c --- gdb-9.1/gnulib/import/fdopendir.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/fdopendir.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* provide a replacement fdopendir function - Copyright (C) 2004-2016 Free Software Foundation, Inc. + Copyright (C) 2004-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -12,7 +12,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* written by Jim Meyering */ diff -Nru gdb-9.1/gnulib/import/fd-safer.c gdb-10.2/gnulib/import/fd-safer.c --- gdb-9.1/gnulib/import/fd-safer.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/fd-safer.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Return a safer copy of a file descriptor. - Copyright (C) 2005-2006, 2009-2016 Free Software Foundation, Inc. + Copyright (C) 2005-2006, 2009-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -13,7 +13,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paul Eggert. */ diff -Nru gdb-9.1/gnulib/import/fd-safer-flag.c gdb-10.2/gnulib/import/fd-safer-flag.c --- gdb-9.1/gnulib/import/fd-safer-flag.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/fd-safer-flag.c 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,52 @@ +/* Adjust a file descriptor result so that it avoids clobbering + STD{IN,OUT,ERR}_FILENO, with specific flags. + + Copyright (C) 2005-2006, 2009-2020 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Paul Eggert and Eric Blake. */ + +#include <config.h> + +/* Specification. */ +#include "unistd-safer.h" + +#include <errno.h> +#include <unistd.h> + +/* Return FD, unless FD would be a copy of standard input, output, or + error; in that case, return a duplicate of FD, closing FD. If FLAG + contains O_CLOEXEC, the returned FD will have close-on-exec + semantics. On failure to duplicate, close FD, set errno, and + return -1. Preserve errno if FD is negative, so that the caller + can always inspect errno when the returned value is negative. + + This function is usefully wrapped around functions that return file + descriptors, e.g., fd_safer_flag (open ("file", O_RDONLY | flag), flag). */ + +int +fd_safer_flag (int fd, int flag) +{ + if (STDIN_FILENO <= fd && fd <= STDERR_FILENO) + { + int f = dup_safer_flag (fd, flag); + int e = errno; + close (fd); + errno = e; + fd = f; + } + + return fd; +} diff -Nru gdb-9.1/gnulib/import/filenamecat.h gdb-10.2/gnulib/import/filenamecat.h --- gdb-9.1/gnulib/import/filenamecat.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/filenamecat.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Concatenate two arbitrary file names. - Copyright (C) 1996-1997, 2003, 2005, 2007, 2009-2016 Free Software + Copyright (C) 1996-1997, 2003, 2005, 2007, 2009-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify @@ -14,7 +14,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Jim Meyering. */ diff -Nru gdb-9.1/gnulib/import/filenamecat-lgpl.c gdb-10.2/gnulib/import/filenamecat-lgpl.c --- gdb-9.1/gnulib/import/filenamecat-lgpl.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/filenamecat-lgpl.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Concatenate two arbitrary file names. - Copyright (C) 1996-2007, 2009-2016 Free Software Foundation, Inc. + Copyright (C) 1996-2007, 2009-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -13,7 +13,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Jim Meyering. */ @@ -31,58 +31,59 @@ # define mempcpy(D, S, N) ((void *) ((char *) memcpy (D, S, N) + (N))) #endif -/* Return the longest suffix of F that is a relative file name. - If it has no such suffix, return the empty string. */ - -static char const * _GL_ATTRIBUTE_PURE -longest_relative_suffix (char const *f) -{ - for (f += FILE_SYSTEM_PREFIX_LEN (f); ISSLASH (*f); f++) - continue; - return f; -} - -/* Concatenate two file name components, DIR and ABASE, in +/* Concatenate two file name components, DIR and BASE, in newly-allocated storage and return the result. The resulting file name F is such that the commands "ls F" and "(cd - DIR; ls BASE)" refer to the same file, where BASE is ABASE with any - file system prefixes and leading separators removed. - Arrange for a directory separator if necessary between DIR and BASE - in the result, removing any redundant separators. + DIR; ls ./BASE)" refer to the same file. If necessary, put + a separator between DIR and BASE in the result. Typically this + separator is "/", but in rare cases it might be ".". In any case, if BASE_IN_RESULT is non-NULL, set - *BASE_IN_RESULT to point to the copy of ABASE in the returned - concatenation. However, if ABASE begins with more than one slash, - set *BASE_IN_RESULT to point to the sole corresponding slash that - is copied into the result buffer. + *BASE_IN_RESULT to point to the copy of BASE at the end of the + returned concatenation. - Return NULL if malloc fails. */ + If malloc fails, return NULL with errno set. */ char * -mfile_name_concat (char const *dir, char const *abase, char **base_in_result) +mfile_name_concat (char const *dir, char const *base, char **base_in_result) { char const *dirbase = last_component (dir); size_t dirbaselen = base_len (dirbase); size_t dirlen = dirbase - dir + dirbaselen; - size_t needs_separator = (dirbaselen && ! ISSLASH (dirbase[dirbaselen - 1])); - - char const *base = longest_relative_suffix (abase); size_t baselen = strlen (base); + char sep = '\0'; + if (dirbaselen) + { + /* DIR is not a file system root, so separate with / if needed. */ + if (! ISSLASH (dir[dirlen - 1]) && ! ISSLASH (*base)) + sep = '/'; + } + else if (ISSLASH (*base)) + { + /* DIR is a file system root and BASE begins with a slash, so + separate with ".". For example, if DIR is "/" and BASE is + "/foo" then return "/./foo", as "//foo" would be wrong on + some POSIX systems. A fancier algorithm could omit "." in + some cases but is not worth the trouble. */ + sep = '.'; + } - char *p_concat = malloc (dirlen + needs_separator + baselen + 1); - char *p; - + char *p_concat = malloc (dirlen + (sep != '\0') + baselen + 1); if (p_concat == NULL) return NULL; - p = mempcpy (p_concat, dir, dirlen); - *p = DIRECTORY_SEPARATOR; - p += needs_separator; - - if (base_in_result) - *base_in_result = p - IS_ABSOLUTE_FILE_NAME (abase); + { + char *p; - p = mempcpy (p, base, baselen); - *p = '\0'; + p = mempcpy (p_concat, dir, dirlen); + *p = sep; + p += sep != '\0'; + + if (base_in_result) + *base_in_result = p; + + p = mempcpy (p, base, baselen); + *p = '\0'; + } return p_concat; } diff -Nru gdb-9.1/gnulib/import/filename.h gdb-10.2/gnulib/import/filename.h --- gdb-9.1/gnulib/import/filename.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/filename.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Basic filename support macros. - Copyright (C) 2001-2004, 2007-2016 Free Software Foundation, Inc. + Copyright (C) 2001-2004, 2007-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -12,40 +12,96 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* From Paul Eggert and Jim Meyering. */ #ifndef _FILENAME_H #define _FILENAME_H +#include <string.h> + #ifdef __cplusplus extern "C" { #endif -/* Pathname support. - ISSLASH(C) tests whether C is a directory separator character. - IS_ABSOLUTE_PATH(P) tests whether P is an absolute path. If it is not, - it may be concatenated to a directory pathname. - IS_PATH_WITH_DIR(P) tests whether P contains a directory specification. +/* Filename support. + ISSLASH(C) tests whether C is a directory separator + character. + HAS_DEVICE(Filename) tests whether Filename contains a device + specification. + FILE_SYSTEM_PREFIX_LEN(Filename) length of the device specification + at the beginning of Filename, + index of the part consisting of + alternating components and slashes. + FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE + 1 when a non-empty device specification + can be followed by an empty or relative + part, + 0 when a non-empty device specification + must be followed by a slash, + 0 when device specification don't exist. + IS_ABSOLUTE_FILE_NAME(Filename) + tests whether Filename is independent of + any notion of "current directory". + IS_RELATIVE_FILE_NAME(Filename) + tests whether Filename may be concatenated + to a directory filename. + Note: On native Windows, OS/2, DOS, "c:" is neither an absolute nor a + relative file name! + IS_FILE_NAME_WITH_DIR(Filename) tests whether Filename contains a device + or directory specification. */ -#if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__ +#if defined _WIN32 || defined __CYGWIN__ \ + || defined __EMX__ || defined __MSDOS__ || defined __DJGPP__ /* Native Windows, Cygwin, OS/2, DOS */ # define ISSLASH(C) ((C) == '/' || (C) == '\\') -# define HAS_DEVICE(P) \ - ((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) \ - && (P)[1] == ':') -# define IS_ABSOLUTE_PATH(P) (ISSLASH ((P)[0]) || HAS_DEVICE (P)) -# define IS_PATH_WITH_DIR(P) \ - (strchr (P, '/') != NULL || strchr (P, '\\') != NULL || HAS_DEVICE (P)) -# define FILE_SYSTEM_PREFIX_LEN(P) (HAS_DEVICE (P) ? 2 : 0) + /* Internal macro: Tests whether a character is a drive letter. */ +# define _IS_DRIVE_LETTER(C) \ + (((C) >= 'A' && (C) <= 'Z') || ((C) >= 'a' && (C) <= 'z')) + /* Help the compiler optimizing it. This assumes ASCII. */ +# undef _IS_DRIVE_LETTER +# define _IS_DRIVE_LETTER(C) \ + (((unsigned int) (C) | ('a' - 'A')) - 'a' <= 'z' - 'a') +# define HAS_DEVICE(Filename) \ + (_IS_DRIVE_LETTER ((Filename)[0]) && (Filename)[1] == ':') +# define FILE_SYSTEM_PREFIX_LEN(Filename) (HAS_DEVICE (Filename) ? 2 : 0) +# ifdef __CYGWIN__ +# define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 0 +# else + /* On native Windows, OS/2, DOS, the system has the notion of a + "current directory" on each drive. */ +# define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 1 +# endif +# if FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE +# define IS_ABSOLUTE_FILE_NAME(Filename) \ + ISSLASH ((Filename)[FILE_SYSTEM_PREFIX_LEN (Filename)]) +# else +# define IS_ABSOLUTE_FILE_NAME(Filename) \ + (ISSLASH ((Filename)[0]) || HAS_DEVICE (Filename)) +# endif +# define IS_RELATIVE_FILE_NAME(Filename) \ + (! (ISSLASH ((Filename)[0]) || HAS_DEVICE (Filename))) +# define IS_FILE_NAME_WITH_DIR(Filename) \ + (strchr ((Filename), '/') != NULL || strchr ((Filename), '\\') != NULL \ + || HAS_DEVICE (Filename)) #else /* Unix */ # define ISSLASH(C) ((C) == '/') -# define IS_ABSOLUTE_PATH(P) ISSLASH ((P)[0]) -# define IS_PATH_WITH_DIR(P) (strchr (P, '/') != NULL) -# define FILE_SYSTEM_PREFIX_LEN(P) 0 +# define HAS_DEVICE(Filename) ((void) (Filename), 0) +# define FILE_SYSTEM_PREFIX_LEN(Filename) ((void) (Filename), 0) +# define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 0 +# define IS_ABSOLUTE_FILE_NAME(Filename) ISSLASH ((Filename)[0]) +# define IS_RELATIVE_FILE_NAME(Filename) (! ISSLASH ((Filename)[0])) +# define IS_FILE_NAME_WITH_DIR(Filename) (strchr ((Filename), '/') != NULL) #endif +/* Deprecated macros. For backward compatibility with old users of the + 'filename' module. */ +#define IS_ABSOLUTE_PATH IS_ABSOLUTE_FILE_NAME +#define IS_PATH_WITH_DIR IS_FILE_NAME_WITH_DIR + #ifdef __cplusplus } diff -Nru gdb-9.1/gnulib/import/flexmember.h gdb-10.2/gnulib/import/flexmember.h --- gdb-9.1/gnulib/import/flexmember.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/flexmember.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,19 +1,22 @@ /* Sizes of structs with flexible array members. - Copyright 2016 Free Software Foundation, Inc. + Copyright 2016-2020 Free Software Foundation, Inc. - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. + This file is part of the GNU C Library. - This program is distributed in the hope that it will be useful, + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 3 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. + You should have received a copy of the GNU General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. Written by Paul Eggert. */ @@ -30,11 +33,26 @@ # define FLEXALIGNOF(type) _Alignof (type) #endif -/* Upper bound on the size of a struct of type TYPE with a flexible - array member named MEMBER that is followed by N bytes of other data. - This is not simply sizeof (TYPE) + N, since it may require - alignment on unusually picky C11 platforms, and - FLEXIBLE_ARRAY_MEMBER may be 1 on pre-C11 platforms. +/* Yield a properly aligned upper bound on the size of a struct of + type TYPE with a flexible array member named MEMBER that is + followed by N bytes of other data. The result is suitable as an + argument to malloc. For example: + + struct s { int n; char d[FLEXIBLE_ARRAY_MEMBER]; }; + struct s *p = malloc (FLEXSIZEOF (struct s, d, n * sizeof (char))); + + FLEXSIZEOF (TYPE, MEMBER, N) is not simply (sizeof (TYPE) + N), + since FLEXIBLE_ARRAY_MEMBER may be 1 on pre-C11 platforms. Nor is + it simply (offsetof (TYPE, MEMBER) + N), as that might yield a size + that causes malloc to yield a pointer that is not properly aligned + for TYPE; for example, if sizeof (int) == alignof (int) == 4, + malloc (offsetof (struct s, d) + 3 * sizeof (char)) is equivalent + to malloc (7) and might yield a pointer that is not a multiple of 4 + (which means the pointer is not properly aligned for struct s), + whereas malloc (FLEXSIZEOF (struct s, d, 3 * sizeof (char))) is + equivalent to malloc (8) and must yield a pointer that is a + multiple of 4. + Yield a value less than N if and only if arithmetic overflow occurs. */ #define FLEXSIZEOF(type, member, n) \ diff -Nru gdb-9.1/gnulib/import/float.c gdb-10.2/gnulib/import/float.c --- gdb-9.1/gnulib/import/float.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/float.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Auxiliary definitions for <float.h>. - Copyright (C) 2011-2016 Free Software Foundation, Inc. + Copyright (C) 2011-2020 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. This program is free software: you can redistribute it and/or modify @@ -13,7 +13,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> diff -Nru gdb-9.1/gnulib/import/float+.h gdb-10.2/gnulib/import/float+.h --- gdb-9.1/gnulib/import/float+.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/float+.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Supplemental information about the floating-point formats. - Copyright (C) 2007, 2009-2016 Free Software Foundation, Inc. + Copyright (C) 2007, 2009-2020 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2007. This program is free software; you can redistribute it and/or modify @@ -13,7 +13,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, see <http://www.gnu.org/licenses/>. */ + along with this program; if not, see <https://www.gnu.org/licenses/>. */ #ifndef _FLOATPLUS_H #define _FLOATPLUS_H diff -Nru gdb-9.1/gnulib/import/float.in.h gdb-10.2/gnulib/import/float.in.h --- gdb-9.1/gnulib/import/float.in.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/float.in.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* A correct <float.h>. - Copyright (C) 2007-2016 Free Software Foundation, Inc. + Copyright (C) 2007-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -13,7 +13,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _@GUARD_PREFIX@_FLOAT_H @@ -62,8 +62,8 @@ /* On FreeBSD/x86 6.4, the 'long double' type really has only 53 bits of precision in the compiler but 64 bits of precision at runtime. See - <http://lists.gnu.org/archive/html/bug-gnulib/2008-07/msg00063.html>. */ -#if defined __i386__ && defined __FreeBSD__ + <https://lists.gnu.org/r/bug-gnulib/2008-07/msg00063.html>. */ +#if defined __i386__ && (defined __FreeBSD__ || defined __DragonFly__) /* Number of mantissa units, in base FLT_RADIX. */ # undef LDBL_MANT_DIG # define LDBL_MANT_DIG 64 @@ -81,7 +81,7 @@ # define LDBL_MAX_EXP 16384 /* Minimum positive normalized number. */ # undef LDBL_MIN -# define LDBL_MIN 3.3621031431120935E-4932L /* = 0x1p-16382L */ +# define LDBL_MIN 3.362103143112093506262677817321752E-4932L /* = 0x1p-16382L */ /* Maximum representable finite number. */ # undef LDBL_MAX /* LDBL_MAX is represented as { 0xFFFFFFFF, 0xFFFFFFFF, 32766 }. diff -Nru gdb-9.1/gnulib/import/fnmatch.c gdb-10.2/gnulib/import/fnmatch.c --- gdb-9.1/gnulib/import/fnmatch.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/fnmatch.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,20 +1,22 @@ -/* Copyright (C) 1991-1993, 1996-2007, 2009-2016 Free Software Foundation, Inc. +/* Copyright (C) 1991-2020 Free Software Foundation, Inc. + This file is part of the GNU C Library. - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 3 of the License, or (at your option) any later version. - This program is distributed in the hope that it will be useful, + The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; if not, see <http://www.gnu.org/licenses/>. */ + You should have received a copy of the GNU General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ #ifndef _LIBC -# include <config.h> +# include <libc-config.h> #endif /* Enable GNU extensions in fnmatch.h. */ @@ -22,114 +24,89 @@ # define _GNU_SOURCE 1 #endif -#if ! defined __builtin_expect && defined __GNUC__ && __GNUC__ < 3 -# define __builtin_expect(expr, expected) (expr) -#endif - #include <fnmatch.h> -#include <alloca.h> #include <assert.h> -#include <ctype.h> #include <errno.h> -#include <stddef.h> -#include <stdbool.h> -#include <stdlib.h> +#include <ctype.h> #include <string.h> - -#define WIDE_CHAR_SUPPORT \ - (HAVE_WCTYPE_H && HAVE_BTOWC && HAVE_ISWCTYPE \ - && HAVE_WMEMCHR && (HAVE_WMEMCPY || HAVE_WMEMPCPY)) - -/* For platform which support the ISO C amendment 1 functionality we - support user defined character classes. */ -#if defined _LIBC || WIDE_CHAR_SUPPORT -# include <wctype.h> -# include <wchar.h> +#include <stdlib.h> +#if defined _LIBC || HAVE_ALLOCA +# include <alloca.h> #endif +#include <wchar.h> +#include <wctype.h> +#include <stddef.h> +#include <stdbool.h> /* We need some of the locale data (the collation sequence information) but there is no interface to get this information in general. Therefore we support a correct implementation only in glibc. */ #ifdef _LIBC # include "../locale/localeinfo.h" -# include "../locale/elem-hash.h" # include "../locale/coll-lookup.h" # include <shlib-compat.h> # define CONCAT(a,b) __CONCAT(a,b) +# define btowc __btowc +# define iswctype __iswctype # define mbsrtowcs __mbsrtowcs +# define mempcpy __mempcpy +# define strnlen __strnlen +# define towlower __towlower +# define wcscat __wcscat +# define wcslen __wcslen +# define wctype __wctype +# define wmemchr __wmemchr +# define wmempcpy __wmempcpy # define fnmatch __fnmatch extern int fnmatch (const char *pattern, const char *string, int flags); #endif -#ifndef SIZE_MAX -# define SIZE_MAX ((size_t) -1) +#ifdef _LIBC +# if __GNUC__ < 7 +# define FALLTHROUGH ((void) 0) +# else +# define FALLTHROUGH __attribute__ ((__fallthrough__)) +# endif +#else +# include "attribute.h" #endif -#include "flexmember.h" +#include <intprops.h> +#include <flexmember.h> /* We often have to test for FNM_FILE_NAME and FNM_PERIOD being both set. */ #define NO_LEADING_PERIOD(flags) \ ((flags & (FNM_FILE_NAME | FNM_PERIOD)) == (FNM_FILE_NAME | FNM_PERIOD)) -/* Comment out all this code if we are using the GNU C Library, and are not - actually compiling the library itself, and have not detected a bug - in the library. This code is part of the GNU C - Library, but also included in many other GNU distributions. Compiling - and linking in this code is a waste when using the GNU C library - (especially if it is a shared library). Rather than having every GNU - program understand 'configure --with-gnu-libc' and omit the object files, - it is simpler to just do this in the source for each such file. */ - -#if defined _LIBC || !defined __GNU_LIBRARY__ || !HAVE_FNMATCH_GNU - - -# if ! (defined isblank || (HAVE_ISBLANK && HAVE_DECL_ISBLANK)) -# define isblank(c) ((c) == ' ' || (c) == '\t') +#ifndef _LIBC +# if HAVE_ALLOCA +/* The OS usually guarantees only one guard page at the bottom of the stack, + and a page size can be as small as 4096 bytes. So we cannot safely + allocate anything larger than 4096 bytes. Also care for the possibility + of a few compiler-allocated temporary stack slots. */ +# define __libc_use_alloca(n) ((n) < 4032) +# else +/* Just use malloc. */ +# define __libc_use_alloca(n) false +# undef alloca +# define alloca(n) malloc (n) # endif +# define alloca_account(size, avar) ((avar) += (size), alloca (size)) +#endif -# define STREQ(s1, s2) (strcmp (s1, s2) == 0) - -# if defined _LIBC || WIDE_CHAR_SUPPORT -/* The GNU C library provides support for user-defined character classes - and the functions from ISO C amendment 1. */ -# ifdef CHARCLASS_NAME_MAX -# define CHAR_CLASS_MAX_LENGTH CHARCLASS_NAME_MAX -# else +/* Provide support for user-defined character classes, based on the functions + from ISO C 90 amendment 1. */ +#ifdef CHARCLASS_NAME_MAX +# define CHAR_CLASS_MAX_LENGTH CHARCLASS_NAME_MAX +#else /* This shouldn't happen but some implementation might still have this problem. Use a reasonable default value. */ -# define CHAR_CLASS_MAX_LENGTH 256 -# endif - -# ifdef _LIBC -# define IS_CHAR_CLASS(string) __wctype (string) -# else -# define IS_CHAR_CLASS(string) wctype (string) -# endif - -# ifdef _LIBC -# define ISWCTYPE(WC, WT) __iswctype (WC, WT) -# else -# define ISWCTYPE(WC, WT) iswctype (WC, WT) -# endif - -# if (HAVE_MBSTATE_T && HAVE_MBSRTOWCS) || _LIBC -/* In this case we are implementing the multibyte character handling. */ -# define HANDLE_MULTIBYTE 1 -# endif - -# else -# define CHAR_CLASS_MAX_LENGTH 6 /* Namely, 'xdigit'. */ +# define CHAR_CLASS_MAX_LENGTH 256 +#endif -# define IS_CHAR_CLASS(string) \ - (STREQ (string, "alpha") || STREQ (string, "upper") \ - || STREQ (string, "lower") || STREQ (string, "digit") \ - || STREQ (string, "alnum") || STREQ (string, "xdigit") \ - || STREQ (string, "space") || STREQ (string, "print") \ - || STREQ (string, "punct") || STREQ (string, "graph") \ - || STREQ (string, "cntrl") || STREQ (string, "blank")) -# endif +#define IS_CHAR_CLASS(string) wctype (string) /* Avoid depending on library functions or files whose names are inconsistent. */ @@ -137,68 +114,53 @@ /* Global variable. */ static int posixly_correct; -# ifndef internal_function -/* Inside GNU libc we mark some function in a special way. In other - environments simply ignore the marking. */ -# define internal_function -# endif - /* Note that this evaluates C many times. */ -# define FOLD(c) ((flags & FNM_CASEFOLD) ? tolower (c) : (c)) -# define CHAR char -# define UCHAR unsigned char -# define INT int -# define FCT internal_fnmatch -# define EXT ext_match -# define END end_pattern -# define L_(CS) CS -# ifdef _LIBC -# define BTOWC(C) __btowc (C) -# else -# define BTOWC(C) btowc (C) -# endif -# define STRLEN(S) strlen (S) -# define STRCAT(D, S) strcat (D, S) -# ifdef _LIBC -# define MEMPCPY(D, S, N) __mempcpy (D, S, N) -# else -# if HAVE_MEMPCPY -# define MEMPCPY(D, S, N) mempcpy (D, S, N) -# else -# define MEMPCPY(D, S, N) ((void *) ((char *) memcpy (D, S, N) + (N))) -# endif -# endif -# define MEMCHR(S, C, N) memchr (S, C, N) -# include "fnmatch_loop.c" +#define FOLD(c) ((flags & FNM_CASEFOLD) ? tolower (c) : (c)) +#define CHAR char +#define UCHAR unsigned char +#define INT int +#define FCT internal_fnmatch +#define EXT ext_match +#define END end_pattern +#define STRUCT fnmatch_struct +#define L_(CS) CS +#define BTOWC(C) btowc (C) +#define STRLEN(S) strlen (S) +#define STRCAT(D, S) strcat (D, S) +#define MEMPCPY(D, S, N) mempcpy (D, S, N) +#define MEMCHR(S, C, N) memchr (S, C, N) +#define WIDE_CHAR_VERSION 0 +#ifdef _LIBC +# include <locale/weight.h> +# define FINDIDX findidx +#endif +#include "fnmatch_loop.c" -# if HANDLE_MULTIBYTE -# define FOLD(c) ((flags & FNM_CASEFOLD) ? towlower (c) : (c)) -# define CHAR wchar_t -# define UCHAR wint_t -# define INT wint_t -# define FCT internal_fnwmatch -# define EXT ext_wmatch -# define END end_wpattern -# define L_(CS) L##CS -# define BTOWC(C) (C) -# ifdef _LIBC -# define STRLEN(S) __wcslen (S) -# define STRCAT(D, S) __wcscat (D, S) -# define MEMPCPY(D, S, N) __wmempcpy (D, S, N) -# else -# define STRLEN(S) wcslen (S) -# define STRCAT(D, S) wcscat (D, S) -# if HAVE_WMEMPCPY -# define MEMPCPY(D, S, N) wmempcpy (D, S, N) -# else -# define MEMPCPY(D, S, N) (wmemcpy (D, S, N) + (N)) -# endif -# endif -# define MEMCHR(S, C, N) wmemchr (S, C, N) -# define WIDE_CHAR_VERSION 1 +#define FOLD(c) ((flags & FNM_CASEFOLD) ? towlower (c) : (c)) +#define CHAR wchar_t +#define UCHAR wint_t +#define INT wint_t +#define FCT internal_fnwmatch +#define EXT ext_wmatch +#define END end_wpattern +#define L_(CS) L##CS +#define BTOWC(C) (C) +#define STRLEN(S) wcslen (S) +#define STRCAT(D, S) wcscat (D, S) +#define MEMPCPY(D, S, N) wmempcpy (D, S, N) +#define MEMCHR(S, C, N) wmemchr (S, C, N) +#define WIDE_CHAR_VERSION 1 +#ifdef _LIBC +/* Change the name the header defines so it doesn't conflict with + the <locale/weight.h> version included above. */ +# define findidx findidxwc +# include <locale/weightwc.h> +# undef findidx +# define FINDIDX findidxwc +#endif -# undef IS_CHAR_CLASS +#undef IS_CHAR_CLASS /* We have to convert the wide character string in a multibyte string. But we know that the character class names consist of alphanumeric characters from the portable character set, and since the wide character encoding @@ -214,11 +176,11 @@ do { /* Test for a printable character from the portable character set. */ -# ifdef _LIBC +#ifdef _LIBC if (*wcs < 0x20 || *wcs > 0x7e || *wcs == 0x24 || *wcs == 0x40 || *wcs == 0x60) return (wctype_t) 0; -# else +#else switch (*wcs) { case L' ': case L'!': case L'"': case L'#': case L'%': @@ -245,7 +207,7 @@ default: return (wctype_t) 0; } -# endif +#endif /* Avoid overrunning the buffer. */ if (cp == s + CHAR_CLASS_MAX_LENGTH) @@ -257,96 +219,137 @@ *cp = '\0'; -# ifdef _LIBC - return __wctype (s); -# else return wctype (s); -# endif } -# define IS_CHAR_CLASS(string) is_char_class (string) +#define IS_CHAR_CLASS(string) is_char_class (string) -# include "fnmatch_loop.c" -# endif +#include "fnmatch_loop.c" int fnmatch (const char *pattern, const char *string, int flags) { -# if HANDLE_MULTIBYTE -# define ALLOCA_LIMIT 2000 - if (__builtin_expect (MB_CUR_MAX, 1) != 1) + if (__glibc_unlikely (MB_CUR_MAX != 1)) { mbstate_t ps; - size_t patsize; - size_t strsize; - size_t totsize; + size_t n; + const char *p; + wchar_t *wpattern_malloc = NULL; wchar_t *wpattern; + wchar_t *wstring_malloc = NULL; wchar_t *wstring; - int res; + size_t alloca_used = 0; - /* Calculate the size needed to convert the strings to - wide characters. */ + /* Convert the strings into wide characters. */ memset (&ps, '\0', sizeof (ps)); - patsize = mbsrtowcs (NULL, &pattern, 0, &ps) + 1; - if (__builtin_expect (patsize != 0, 1)) + p = pattern; + n = strnlen (pattern, 1024); + if (__glibc_likely (n < 1024)) + { + wpattern = (wchar_t *) alloca_account ((n + 1) * sizeof (wchar_t), + alloca_used); + n = mbsrtowcs (wpattern, &p, n + 1, &ps); + if (__glibc_unlikely (n == (size_t) -1)) + /* Something wrong. + XXX Do we have to set 'errno' to something which mbsrtows hasn't + already done? */ + return -1; + if (p) + { + memset (&ps, '\0', sizeof (ps)); + goto prepare_wpattern; + } + } + else { + prepare_wpattern: + n = mbsrtowcs (NULL, &pattern, 0, &ps); + if (__glibc_unlikely (n == (size_t) -1)) + /* Something wrong. + XXX Do we have to set 'errno' to something which mbsrtows hasn't + already done? */ + return -1; + if (__glibc_unlikely (n >= (size_t) -1 / sizeof (wchar_t))) + { + __set_errno (ENOMEM); + return -2; + } + wpattern_malloc = wpattern + = (wchar_t *) malloc ((n + 1) * sizeof (wchar_t)); assert (mbsinit (&ps)); - strsize = mbsrtowcs (NULL, &string, 0, &ps) + 1; - if (__builtin_expect (strsize != 0, 1)) + if (wpattern == NULL) + return -2; + (void) mbsrtowcs (wpattern, &pattern, n + 1, &ps); + } + + assert (mbsinit (&ps)); + n = strnlen (string, 1024); + p = string; + if (__glibc_likely (n < 1024)) + { + wstring = (wchar_t *) alloca_account ((n + 1) * sizeof (wchar_t), + alloca_used); + n = mbsrtowcs (wstring, &p, n + 1, &ps); + if (__glibc_unlikely (n == (size_t) -1)) + { + /* Something wrong. + XXX Do we have to set 'errno' to something which + mbsrtows hasn't already done? */ + free_return: + free (wpattern_malloc); + return -1; + } + if (p) { - assert (mbsinit (&ps)); - totsize = patsize + strsize; - if (__builtin_expect (! (patsize <= totsize - && totsize <= SIZE_MAX / sizeof (wchar_t)), - 0)) - { - errno = ENOMEM; - return -1; - } - - /* Allocate room for the wide characters. */ - if (__builtin_expect (totsize < ALLOCA_LIMIT, 1)) - wpattern = (wchar_t *) alloca (totsize * sizeof (wchar_t)); - else - { - wpattern = malloc (totsize * sizeof (wchar_t)); - if (__builtin_expect (! wpattern, 0)) - { - errno = ENOMEM; - return -1; - } - } - wstring = wpattern + patsize; - - /* Convert the strings into wide characters. */ - mbsrtowcs (wpattern, &pattern, patsize, &ps); - assert (mbsinit (&ps)); - mbsrtowcs (wstring, &string, strsize, &ps); - - res = internal_fnwmatch (wpattern, wstring, wstring + strsize - 1, - flags & FNM_PERIOD, flags); - - if (__builtin_expect (! (totsize < ALLOCA_LIMIT), 0)) - free (wpattern); - return res; + memset (&ps, '\0', sizeof (ps)); + goto prepare_wstring; } } - } + else + { + prepare_wstring: + n = mbsrtowcs (NULL, &string, 0, &ps); + if (__glibc_unlikely (n == (size_t) -1)) + /* Something wrong. + XXX Do we have to set 'errno' to something which mbsrtows hasn't + already done? */ + goto free_return; + if (__glibc_unlikely (n >= (size_t) -1 / sizeof (wchar_t))) + { + free (wpattern_malloc); + __set_errno (ENOMEM); + return -2; + } + + wstring_malloc = wstring + = (wchar_t *) malloc ((n + 1) * sizeof (wchar_t)); + if (wstring == NULL) + { + free (wpattern_malloc); + return -2; + } + assert (mbsinit (&ps)); + (void) mbsrtowcs (wstring, &string, n + 1, &ps); + } + + int res = internal_fnwmatch (wpattern, wstring, wstring + n, + flags & FNM_PERIOD, flags, NULL, + alloca_used); + + free (wstring_malloc); + free (wpattern_malloc); -# endif /* HANDLE_MULTIBYTE */ + return res; + } return internal_fnmatch (pattern, string, string + strlen (string), - flags & FNM_PERIOD, flags); + flags & FNM_PERIOD, flags, NULL, 0); } -# ifdef _LIBC -# undef fnmatch +#undef fnmatch versioned_symbol (libc, __fnmatch, fnmatch, GLIBC_2_2_3); -# if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_2_3) +#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_2_3) strong_alias (__fnmatch, __fnmatch_old) compat_symbol (libc, __fnmatch_old, fnmatch, GLIBC_2_0); -# endif +#endif libc_hidden_ver (__fnmatch, fnmatch) -# endif - -#endif /* _LIBC or not __GNU_LIBRARY__. */ diff -Nru gdb-9.1/gnulib/import/fnmatch.in.h gdb-10.2/gnulib/import/fnmatch.in.h --- gdb-9.1/gnulib/import/fnmatch.in.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/fnmatch.in.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,5 @@ -/* Copyright (C) 1991-1993, 1996-1999, 2001-2003, 2005, 2007, 2009-2016 Free +/* Substitute for and wrapper around <fnmatch.h>. + Copyright (C) 1991-1993, 1996-1999, 2001-2003, 2005, 2007, 2009-2020 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -14,17 +15,31 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, see <http://www.gnu.org/licenses/>. */ + along with this program; if not, see <https://www.gnu.org/licenses/>. */ -#ifndef _FNMATCH_H -#define _FNMATCH_H 1 +#ifndef _@GUARD_PREFIX@_FNMATCH_H -/* The definition of _GL_ARG_NONNULL is copied here. */ +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif +@PRAGMA_COLUMNS@ -#ifdef __cplusplus -extern "C" { +/* The include_next requires a split double-inclusion guard. */ +#if @HAVE_FNMATCH_H@ && !@REPLACE_FNMATCH@ +# @INCLUDE_NEXT@ @NEXT_FNMATCH_H@ #endif +#ifndef _@GUARD_PREFIX@_FNMATCH_H +#define _@GUARD_PREFIX@_FNMATCH_H + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ + +/* The definition of _GL_ARG_NONNULL is copied here. */ + +/* The definition of _GL_WARN_ON_USE is copied here. */ + +#if !@HAVE_FNMATCH_H@ || @REPLACE_FNMATCH@ + /* We #undef these before defining them because some losing systems (HP-UX A.08.07 for example) define these in <unistd.h>. */ #undef FNM_PATHNAME @@ -54,14 +69,42 @@ # define FNM_NOSYS (-1) #endif +#endif + + +#if @GNULIB_FNMATCH@ /* Match NAME against the file name pattern PATTERN, returning zero if it matches, FNM_NOMATCH if not. */ -extern int fnmatch (const char *__pattern, const char *__name, - int __flags) - _GL_ARG_NONNULL ((1, 2)); - -#ifdef __cplusplus -} +# if @REPLACE_FNMATCH@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define fnmatch rpl_fnmatch +# endif +_GL_FUNCDECL_RPL (fnmatch, int, + (const char *pattern, const char *name, int flags) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (fnmatch, int, + (const char *pattern, const char *name, int flags)); +# else +# if !@HAVE_FNMATCH@ +_GL_FUNCDECL_SYS (fnmatch, int, + (const char *pattern, const char *name, int flags) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (fnmatch, int, + (const char *pattern, const char *name, int flags)); +# endif +# if !GNULIB_FNMATCH_GNU && __GLIBC__ >= 2 +_GL_CXXALIASWARN (fnmatch); +# endif +#elif defined GNULIB_POSIXCHECK +# undef fnmatch +# if HAVE_RAW_DECL_FNMATCH +_GL_WARN_ON_USE (fnmatch, + "fnmatch does not portably work - " + "use gnulib module fnmatch for portability or gnulib module fnmatch-gnu for a glibc compatible implementation"); +# endif #endif -#endif /* fnmatch.h */ + +#endif /* _@GUARD_PREFIX@_FNMATCH_H */ +#endif /* _@GUARD_PREFIX@_FNMATCH_H */ diff -Nru gdb-9.1/gnulib/import/fnmatch_loop.c gdb-10.2/gnulib/import/fnmatch_loop.c --- gdb-9.1/gnulib/import/fnmatch_loop.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/fnmatch_loop.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,33 +1,47 @@ -/* Copyright (C) 1991-1993, 1996-2006, 2009-2016 Free Software Foundation, Inc. +/* Copyright (C) 1991-2020 Free Software Foundation, Inc. This file is part of the GNU C Library. - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 3 of the License, or (at your option) any later version. - This program is distributed in the hope that it will be useful, + The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; if not, see <http://www.gnu.org/licenses/>. */ + You should have received a copy of the GNU General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#ifdef _LIBC +# include <stdint.h> +#endif + +struct STRUCT +{ + const CHAR *pattern; + const CHAR *string; + bool no_leading_period; +}; /* Match STRING against the file name pattern PATTERN, returning zero if it matches, nonzero if not. */ +static int FCT (const CHAR *pattern, const CHAR *string, + const CHAR *string_end, bool no_leading_period, int flags, + struct STRUCT *ends, size_t alloca_used); static int EXT (INT opt, const CHAR *pattern, const CHAR *string, - const CHAR *string_end, bool no_leading_period, int flags) - internal_function; -static const CHAR *END (const CHAR *patternp) internal_function; + const CHAR *string_end, bool no_leading_period, int flags, + size_t alloca_used); +static const CHAR *END (const CHAR *patternp); static int -internal_function FCT (const CHAR *pattern, const CHAR *string, const CHAR *string_end, - bool no_leading_period, int flags) + bool no_leading_period, int flags, struct STRUCT *ends, size_t alloca_used) { - register const CHAR *p = pattern, *n = string; - register UCHAR c; + const CHAR *p = pattern, *n = string; + UCHAR c; #ifdef _LIBC # if WIDE_CHAR_VERSION const char *collseq = (const char *) @@ -46,12 +60,10 @@ switch (c) { case L_('?'): - if (__builtin_expect (flags & FNM_EXTMATCH, 0) && *p == '(') + if (__glibc_unlikely (flags & FNM_EXTMATCH) && *p == '(') { - int res; - - res = EXT (c, p, n, string_end, no_leading_period, - flags); + int res = EXT (c, p, n, string_end, no_leading_period, + flags, alloca_used); if (res != -1) return res; } @@ -78,15 +90,20 @@ break; case L_('*'): - if (__builtin_expect (flags & FNM_EXTMATCH, 0) && *p == '(') + if (__glibc_unlikely (flags & FNM_EXTMATCH) && *p == '(') { - int res; - - res = EXT (c, p, n, string_end, no_leading_period, - flags); + int res = EXT (c, p, n, string_end, no_leading_period, + flags, alloca_used); if (res != -1) return res; } + else if (ends != NULL) + { + ends->pattern = p - 1; + ends->string = n; + ends->no_leading_period = no_leading_period; + return 0; + } if (n != string_end && *n == L_('.') && no_leading_period) return FNM_NOMATCH; @@ -111,7 +128,7 @@ /* There isn't another character; no match. */ return FNM_NOMATCH; else if (*n == L_('/') - && __builtin_expect (flags & FNM_FILE_NAME, 0)) + && __glibc_unlikely (flags & FNM_FILE_NAME)) /* A slash does not match a wildcard under FNM_FILE_NAME. */ return FNM_NOMATCH; @@ -147,49 +164,61 @@ else { const CHAR *endp; + struct STRUCT end; + end.pattern = NULL; endp = MEMCHR (n, (flags & FNM_FILE_NAME) ? L_('/') : L_('\0'), string_end - n); if (endp == NULL) endp = string_end; if (c == L_('[') - || (__builtin_expect (flags & FNM_EXTMATCH, 0) != 0 + || (__glibc_unlikely (flags & FNM_EXTMATCH) && (c == L_('@') || c == L_('+') || c == L_('!')) && *p == L_('('))) { int flags2 = ((flags & FNM_FILE_NAME) ? flags : (flags & ~FNM_PERIOD)); - bool no_leading_period2 = no_leading_period; - for (--p; n < endp; ++n, no_leading_period2 = false) - if (FCT (p, n, string_end, no_leading_period2, flags2) - == 0) - return 0; + for (--p; n < endp; ++n, no_leading_period = false) + if (FCT (p, n, string_end, no_leading_period, flags2, + &end, alloca_used) == 0) + goto found; } else if (c == L_('/') && (flags & FNM_FILE_NAME)) { while (n < string_end && *n != L_('/')) ++n; if (n < string_end && *n == L_('/') - && (FCT (p, n + 1, string_end, flags & FNM_PERIOD, flags) - == 0)) + && (FCT (p, n + 1, string_end, flags & FNM_PERIOD, flags, + NULL, alloca_used) == 0)) return 0; } else { int flags2 = ((flags & FNM_FILE_NAME) ? flags : (flags & ~FNM_PERIOD)); - int no_leading_period2 = no_leading_period; if (c == L_('\\') && !(flags & FNM_NOESCAPE)) c = *p; c = FOLD (c); - for (--p; n < endp; ++n, no_leading_period2 = false) + for (--p; n < endp; ++n, no_leading_period = false) if (FOLD ((UCHAR) *n) == c - && (FCT (p, n, string_end, no_leading_period2, flags2) - == 0)) - return 0; + && (FCT (p, n, string_end, no_leading_period, flags2, + &end, alloca_used) == 0)) + { + found: + if (end.pattern == NULL) + return 0; + break; + } + if (end.pattern != NULL) + { + p = end.pattern; + n = end.string; + no_leading_period = end.no_leading_period; + continue; + } } } @@ -201,7 +230,7 @@ /* Nonzero if the sense of the character class is inverted. */ const CHAR *p_init = p; const CHAR *n_init = n; - register bool not; + bool not; CHAR cold; UCHAR fn; @@ -227,8 +256,6 @@ c = *p++; for (;;) { - bool is_range = false; - if (!(flags & FNM_NOESCAPE) && c == L_('\\')) { if (*p == L_('\0')) @@ -243,9 +270,7 @@ /* Leave room for the null. */ CHAR str[CHAR_CLASS_MAX_LENGTH + 1]; size_t c1 = 0; -#if defined _LIBC || WIDE_CHAR_SUPPORT wctype_t wt; -#endif const CHAR *startp = p; for (;;) @@ -273,35 +298,19 @@ } str[c1] = L_('\0'); -#if defined _LIBC || WIDE_CHAR_SUPPORT wt = IS_CHAR_CLASS (str); if (wt == 0) /* Invalid character class name. */ return FNM_NOMATCH; -# if defined _LIBC && ! WIDE_CHAR_VERSION +#if defined _LIBC && ! WIDE_CHAR_VERSION /* The following code is glibc specific but does there a good job in speeding up the code since we can avoid the btowc() call. */ if (_ISCTYPE ((UCHAR) *n, wt)) goto matched; -# else - if (ISWCTYPE (BTOWC ((UCHAR) *n), wt)) - goto matched; -# endif #else - if ((STREQ (str, L_("alnum")) && isalnum ((UCHAR) *n)) - || (STREQ (str, L_("alpha")) && isalpha ((UCHAR) *n)) - || (STREQ (str, L_("blank")) && isblank ((UCHAR) *n)) - || (STREQ (str, L_("cntrl")) && iscntrl ((UCHAR) *n)) - || (STREQ (str, L_("digit")) && isdigit ((UCHAR) *n)) - || (STREQ (str, L_("graph")) && isgraph ((UCHAR) *n)) - || (STREQ (str, L_("lower")) && islower ((UCHAR) *n)) - || (STREQ (str, L_("print")) && isprint ((UCHAR) *n)) - || (STREQ (str, L_("punct")) && ispunct ((UCHAR) *n)) - || (STREQ (str, L_("space")) && isspace ((UCHAR) *n)) - || (STREQ (str, L_("upper")) && isupper ((UCHAR) *n)) - || (STREQ (str, L_("xdigit")) && isxdigit ((UCHAR) *n))) + if (iswctype (BTOWC ((UCHAR) *n), wt)) goto matched; #endif c = *p++; @@ -309,7 +318,12 @@ #ifdef _LIBC else if (c == L_('[') && *p == L_('=')) { - UCHAR str[1]; + /* It's important that STR be a scalar variable rather + than a one-element array, because GCC (at least 4.9.2 + -O2 on x86-64) can be confused by the array and + diagnose a "used initialized" in a dead branch in the + findidx function. */ + UCHAR str; uint32_t nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); const CHAR *startp = p; @@ -321,7 +335,7 @@ c = L_('['); goto normal_bracket; } - str[0] = c; + str = c; c = *++p; if (c != L_('=') || p[1] != L_(']')) @@ -334,7 +348,7 @@ if (nrules == 0) { - if ((UCHAR) *n == str[0]) + if ((UCHAR) *n == str) goto matched; } else @@ -342,28 +356,21 @@ const int32_t *table; # if WIDE_CHAR_VERSION const int32_t *weights; - const int32_t *extra; + const wint_t *extra; # else const unsigned char *weights; const unsigned char *extra; # endif const int32_t *indirect; int32_t idx; - const UCHAR *cp = (const UCHAR *) str; - - /* This #include defines a local function! */ -# if WIDE_CHAR_VERSION -# include <locale/weightwc.h> -# else -# include <locale/weight.h> -# endif + const UCHAR *cp = (const UCHAR *) &str; # if WIDE_CHAR_VERSION table = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEWC); weights = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_WEIGHTWC); - extra = (const int32_t *) + extra = (const wint_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_EXTRAWC); indirect = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_INDIRECTWC); @@ -378,7 +385,7 @@ _NL_CURRENT (LC_COLLATE, _NL_COLLATE_INDIRECTMB); # endif - idx = findidx (&cp); + idx = FINDIDX (table, indirect, extra, &cp, 1); if (idx != 0) { /* We found a table entry. Now see whether the @@ -388,7 +395,8 @@ int32_t idx2; const UCHAR *np = (const UCHAR *) n; - idx2 = findidx (&np); + idx2 = FINDIDX (table, indirect, extra, + &np, string_end - n); if (idx2 != 0 && (idx >> 24) == (idx2 >> 24) && len == weights[idx2 & 0xffffff]) @@ -422,6 +430,8 @@ } else { + bool is_range = false; + #ifdef _LIBC bool is_seqval = false; @@ -468,25 +478,11 @@ { int32_t table_size; const int32_t *symb_table; -# ifdef WIDE_CHAR_VERSION - char str[c1]; - size_t strcnt; -# else -# define str (startp + 1) -# endif const unsigned char *extra; int32_t idx; int32_t elem; - int32_t second; - int32_t hash; - -# ifdef WIDE_CHAR_VERSION - /* We have to convert the name to a single-byte - string. This is possible since the names - consist of ASCII characters and the internal - representation is UCS4. */ - for (strcnt = 0; strcnt < c1; ++strcnt) - str[strcnt] = startp[1 + strcnt]; +# if WIDE_CHAR_VERSION + CHAR *wextra; # endif table_size = @@ -499,81 +495,65 @@ _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_EXTRAMB); - /* Locate the character in the hashing table. */ - hash = elem_hash (str, c1); - - idx = 0; - elem = hash % table_size; - if (symb_table[2 * elem] != 0) - { - second = hash % (table_size - 2) + 1; - - do - { - /* First compare the hashing value. */ - if (symb_table[2 * elem] == hash - && (c1 - == extra[symb_table[2 * elem + 1]]) - && memcmp (str, - &extra[symb_table[2 * elem - + 1] - + 1], c1) == 0) - { - /* Yep, this is the entry. */ - idx = symb_table[2 * elem + 1]; - idx += 1 + extra[idx]; - break; - } - - /* Next entry. */ - elem += second; - } - while (symb_table[2 * elem] != 0); - } + for (elem = 0; elem < table_size; elem++) + if (symb_table[2 * elem] != 0) + { + idx = symb_table[2 * elem + 1]; + /* Skip the name of collating element. */ + idx += 1 + extra[idx]; +# if WIDE_CHAR_VERSION + /* Skip the byte sequence of the + collating element. */ + idx += 1 + extra[idx]; + /* Adjust for the alignment. */ + idx = (idx + 3) & ~3; + + wextra = (CHAR *) &extra[idx + 4]; + + if (/* Compare the length of the sequence. */ + c1 == wextra[0] + /* Compare the wide char sequence. */ + && (__wmemcmp (startp + 1, &wextra[1], + c1) + == 0)) + /* Yep, this is the entry. */ + break; +# else + if (/* Compare the length of the sequence. */ + c1 == extra[idx] + /* Compare the byte sequence. */ + && memcmp (startp + 1, + &extra[idx + 1], c1) == 0) + /* Yep, this is the entry. */ + break; +# endif + } - if (symb_table[2 * elem] != 0) + if (elem < table_size) { /* Compare the byte sequence but only if this is not part of a range. */ -# ifdef WIDE_CHAR_VERSION - int32_t *wextra; + if (! is_range - idx += 1 + extra[idx]; - /* Adjust for the alignment. */ - idx = (idx + 3) & ~3; - - wextra = (int32_t *) &extra[idx + 4]; -# endif - - if (! is_range) - { -# ifdef WIDE_CHAR_VERSION - for (c1 = 0; - (int32_t) c1 < wextra[idx]; - ++c1) - if (n[c1] != wextra[1 + c1]) - break; - - if ((int32_t) c1 == wextra[idx]) - goto matched; +# if WIDE_CHAR_VERSION + && __wmemcmp (n, &wextra[1], c1) == 0 # else - for (c1 = 0; c1 < extra[idx]; ++c1) - if (n[c1] != extra[1 + c1]) - break; - - if (c1 == extra[idx]) - goto matched; + && memcmp (n, &extra[idx + 1], c1) == 0 # endif + ) + { + n += c1 - 1; + goto matched; } /* Get the collation sequence value. */ is_seqval = true; -# ifdef WIDE_CHAR_VERSION +# if WIDE_CHAR_VERSION cold = wextra[1 + wextra[idx]]; # else - /* Adjust for the alignment. */ idx += 1 + extra[idx]; - idx = (idx + 3) & ~4; + /* Adjust for the alignment. */ + idx = (idx + 3) & ~3; cold = *((int32_t *) &extra[idx]); # endif @@ -583,10 +563,10 @@ { /* No valid character. Match it as a single byte. */ - if (!is_range && *n == str[0]) + if (!is_range && *n == startp[1]) goto matched; - cold = str[0]; + cold = startp[1]; c = *p++; } else @@ -594,7 +574,6 @@ } } else -# undef str #endif { c = FOLD (c); @@ -614,7 +593,6 @@ outside of is_seqval's scope. */ is_seqval = false; #endif - cold = c; c = *p++; } @@ -634,7 +612,7 @@ uint32_t lcollseq; UCHAR cend = *p++; -# ifdef WIDE_CHAR_VERSION +# if WIDE_CHAR_VERSION /* Search in the 'names' array for the characters. */ fcollseq = __collseq_table_lookup (collseq, fn); if (fcollseq == ~((uint32_t) 0)) @@ -689,25 +667,11 @@ { int32_t table_size; const int32_t *symb_table; -# ifdef WIDE_CHAR_VERSION - char str[c1]; - size_t strcnt; -# else -# define str (startp + 1) -# endif const unsigned char *extra; int32_t idx; int32_t elem; - int32_t second; - int32_t hash; - -# ifdef WIDE_CHAR_VERSION - /* We have to convert the name to a single-byte - string. This is possible since the names - consist of ASCII characters and the internal - representation is UCS4. */ - for (strcnt = 0; strcnt < c1; ++strcnt) - str[strcnt] = startp[1 + strcnt]; +# if WIDE_CHAR_VERSION + CHAR *wextra; # endif table_size = @@ -720,71 +684,64 @@ _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_EXTRAMB); - /* Locate the character in the hashing - table. */ - hash = elem_hash (str, c1); - - idx = 0; - elem = hash % table_size; - if (symb_table[2 * elem] != 0) - { - second = hash % (table_size - 2) + 1; - - do - { - /* First compare the hashing value. */ - if (symb_table[2 * elem] == hash - && (c1 - == extra[symb_table[2 * elem + 1]]) - && memcmp (str, - &extra[symb_table[2 * elem + 1] - + 1], c1) == 0) - { - /* Yep, this is the entry. */ - idx = symb_table[2 * elem + 1]; - idx += 1 + extra[idx]; - break; - } - - /* Next entry. */ - elem += second; - } - while (symb_table[2 * elem] != 0); - } + for (elem = 0; elem < table_size; elem++) + if (symb_table[2 * elem] != 0) + { + idx = symb_table[2 * elem + 1]; + /* Skip the name of collating + element. */ + idx += 1 + extra[idx]; +# if WIDE_CHAR_VERSION + /* Skip the byte sequence of the + collating element. */ + idx += 1 + extra[idx]; + /* Adjust for the alignment. */ + idx = (idx + 3) & ~3; + + wextra = (CHAR *) &extra[idx + 4]; + + if (/* Compare the length of the + sequence. */ + c1 == wextra[0] + /* Compare the wide char sequence. */ + && (__wmemcmp (startp + 1, + &wextra[1], c1) + == 0)) + /* Yep, this is the entry. */ + break; +# else + if (/* Compare the length of the + sequence. */ + c1 == extra[idx] + /* Compare the byte sequence. */ + && memcmp (startp + 1, + &extra[idx + 1], c1) == 0) + /* Yep, this is the entry. */ + break; +# endif + } - if (symb_table[2 * elem] != 0) + if (elem < table_size) { - /* Compare the byte sequence but only if - this is not part of a range. */ -# ifdef WIDE_CHAR_VERSION - int32_t *wextra; - - idx += 1 + extra[idx]; - /* Adjust for the alignment. */ - idx = (idx + 3) & ~4; - - wextra = (int32_t *) &extra[idx + 4]; -# endif /* Get the collation sequence value. */ is_seqval = true; -# ifdef WIDE_CHAR_VERSION +# if WIDE_CHAR_VERSION cend = wextra[1 + wextra[idx]]; # else - /* Adjust for the alignment. */ idx += 1 + extra[idx]; - idx = (idx + 3) & ~4; + /* Adjust for the alignment. */ + idx = (idx + 3) & ~3; cend = *((int32_t *) &extra[idx]); # endif } - else if (symb_table[2 * elem] != 0 && c1 == 1) + else if (c1 == 1) { - cend = str[0]; + cend = startp[1]; c = *p++; } else return FNM_NOMATCH; } -# undef str } else { @@ -799,7 +756,7 @@ characters which are not mentioned in the collation specification. */ if ( -# ifdef WIDE_CHAR_VERSION +# if WIDE_CHAR_VERSION lcollseq == 0xffffffff || # endif lcollseq <= fcollseq) @@ -811,7 +768,7 @@ hcollseq = cend; else { -# ifdef WIDE_CHAR_VERSION +# if WIDE_CHAR_VERSION hcollseq = __collseq_table_lookup (collseq, cend); if (hcollseq == ~((uint32_t) 0)) @@ -832,7 +789,7 @@ if (lcollseq <= hcollseq && fcollseq <= hcollseq) goto matched; } -# ifdef WIDE_CHAR_VERSION +# if WIDE_CHAR_VERSION range_not_matched: # endif #else @@ -848,7 +805,7 @@ return FNM_NOMATCH; /* It is a range. */ - if (cold <= fn && fn <= cend) + if ((UCHAR) cold <= fn && fn <= cend) goto matched; #endif @@ -866,11 +823,8 @@ matched: /* Skip the rest of the [...] that already matched. */ - do + while ((c = *p++) != L_(']')) { - ignore_next: - c = *p++; - if (c == L_('\0')) /* [... (unterminated) loses. */ return FNM_NOMATCH; @@ -898,12 +852,11 @@ if (c < L_('a') || c >= L_('z')) { - p = startp; - goto ignore_next; + p = startp - 2; + break; } } p += 2; - c = *p++; } else if (c == L_('[') && *p == L_('=')) { @@ -914,25 +867,21 @@ if (c != L_('=') || p[1] != L_(']')) return FNM_NOMATCH; p += 2; - c = *p++; } else if (c == L_('[') && *p == L_('.')) { - ++p; while (1) { c = *++p; - if (c == '\0') + if (c == L_('\0')) return FNM_NOMATCH; - if (*p == L_('.') && p[1] == L_(']')) + if (c == L_('.') && p[1] == L_(']')) break; } p += 2; - c = *p++; } } - while (c != L_(']')); if (not) return FNM_NOMATCH; } @@ -941,11 +890,10 @@ case L_('+'): case L_('@'): case L_('!'): - if (__builtin_expect (flags & FNM_EXTMATCH, 0) && *p == '(') + if (__glibc_unlikely (flags & FNM_EXTMATCH) && *p == '(') { - int res; - - res = EXT (c, p, n, string_end, no_leading_period, flags); + int res = EXT (c, p, n, string_end, no_leading_period, flags, + alloca_used); if (res != -1) return res; } @@ -960,7 +908,7 @@ new_no_leading_period = true; break; } - /* FALLTHROUGH */ + FALLTHROUGH; default: normal_match: if (n == string_end || c != FOLD ((UCHAR) *n)) @@ -983,7 +931,6 @@ static const CHAR * -internal_function END (const CHAR *pattern) { const CHAR *p = pattern; @@ -1013,7 +960,12 @@ } else if ((*p == L_('?') || *p == L_('*') || *p == L_('+') || *p == L_('@') || *p == L_('!')) && p[1] == L_('(')) - p = END (p + 1); + { + p = END (p + 1); + if (*p == L_('\0')) + /* This is an invalid pattern. */ + return pattern; + } else if (*p == L_(')')) break; @@ -1022,29 +974,33 @@ static int -internal_function EXT (INT opt, const CHAR *pattern, const CHAR *string, const CHAR *string_end, - bool no_leading_period, int flags) + bool no_leading_period, int flags, size_t alloca_used) { const CHAR *startp; size_t level; struct patternlist { struct patternlist *next; + CHAR malloced; CHAR str[FLEXIBLE_ARRAY_MEMBER]; } *list = NULL; struct patternlist **lastp = &list; size_t pattern_len = STRLEN (pattern); + bool any_malloced = false; const CHAR *p; const CHAR *rs; - enum { ALLOCA_LIMIT = 8000 }; + int retval = 0; /* Parse the pattern. Store the individual parts in the list. */ level = 0; for (startp = p = pattern + 1; ; ++p) if (*p == L_('\0')) - /* This is an invalid pattern. */ - return -1; + { + /* This is an invalid pattern. */ + retval = -1; + goto out; + } else if (*p == L_('[')) { /* Handle brackets special. */ @@ -1061,8 +1017,11 @@ /* Skip over all characters of the list. */ while (*p != L_(']')) if (*p++ == L_('\0')) - /* This is no valid pattern. */ - return -1; + { + /* This is no valid pattern. */ + retval = -1; + goto out; + } } else if ((*p == L_('?') || *p == L_('*') || *p == L_('+') || *p == L_('@') || *p == L_('!')) && p[1] == L_('(')) @@ -1075,22 +1034,34 @@ /* This means we found the end of the pattern. */ #define NEW_PATTERN \ struct patternlist *newp; \ - size_t plen; \ - size_t plensize; \ - size_t newpsize; \ - \ - plen = (opt == L_('?') || opt == L_('@') \ - ? pattern_len \ - : p - startp + 1UL); \ - plensize = plen * sizeof (CHAR); \ - newpsize = FLEXSIZEOF (struct patternlist, str, plensize); \ - if ((size_t) -1 / sizeof (CHAR) < plen \ - || newpsize < offsetof (struct patternlist, str) \ - || ALLOCA_LIMIT <= newpsize) \ - return -1; \ - newp = (struct patternlist *) alloca (newpsize); \ - *((CHAR *) MEMPCPY (newp->str, startp, p - startp)) = L_('\0'); \ + size_t plen = (opt == L_('?') || opt == L_('@') \ + ? pattern_len : (p - startp + 1UL)); \ + ptrdiff_t slen = FLEXSIZEOF (struct patternlist, str, 0); \ + ptrdiff_t new_used = alloca_used + slen; \ + ptrdiff_t plensize; \ + if (INT_MULTIPLY_WRAPV (plen, sizeof (CHAR), &plensize) \ + || INT_ADD_WRAPV (new_used, plensize, &new_used)) \ + { \ + retval = -2; \ + goto out; \ + } \ + slen += plensize; \ + bool malloced = ! __libc_use_alloca (new_used); \ + if (__glibc_unlikely (malloced)) \ + { \ + newp = malloc (slen); \ + if (newp == NULL) \ + { \ + retval = -2; \ + goto out; \ + } \ + any_malloced = true; \ + } \ + else \ + newp = alloca_account (slen, alloca_used); \ newp->next = NULL; \ + newp->malloced = malloced; \ + *((CHAR *) MEMPCPY (newp->str, startp, p - startp)) = L_('\0'); \ *lastp = newp; \ lastp = &newp->next NEW_PATTERN; @@ -1112,10 +1083,10 @@ switch (opt) { case L_('*'): - if (FCT (p, string, string_end, no_leading_period, flags) == 0) - return 0; - /* FALLTHROUGH */ - + if (FCT (p, string, string_end, no_leading_period, flags, NULL, + alloca_used) == 0) + goto success; + FALLTHROUGH; case L_('+'): do { @@ -1123,7 +1094,8 @@ /* First match the prefix with the current pattern with the current pattern. */ if (FCT (list->str, string, rs, no_leading_period, - flags & FNM_FILE_NAME ? flags : flags & ~FNM_PERIOD) == 0 + flags & FNM_FILE_NAME ? flags : flags & ~FNM_PERIOD, + NULL, alloca_used) == 0 /* This was successful. Now match the rest with the rest of the pattern. */ && (FCT (p, rs, string_end, @@ -1131,7 +1103,7 @@ ? no_leading_period : rs[-1] == '/' && NO_LEADING_PERIOD (flags), flags & FNM_FILE_NAME - ? flags : flags & ~FNM_PERIOD) == 0 + ? flags : flags & ~FNM_PERIOD, NULL, alloca_used) == 0 /* This didn't work. Try the whole pattern. */ || (rs != string && FCT (pattern - 1, rs, string_end, @@ -1139,20 +1111,22 @@ ? no_leading_period : rs[-1] == '/' && NO_LEADING_PERIOD (flags), flags & FNM_FILE_NAME - ? flags : flags & ~FNM_PERIOD) == 0))) + ? flags : flags & ~FNM_PERIOD, NULL, + alloca_used) == 0))) /* It worked. Signal success. */ - return 0; + goto success; } while ((list = list->next) != NULL); /* None of the patterns lead to a match. */ - return FNM_NOMATCH; + retval = FNM_NOMATCH; + break; case L_('?'): - if (FCT (p, string, string_end, no_leading_period, flags) == 0) - return 0; - /* FALLTHROUGH */ - + if (FCT (p, string, string_end, no_leading_period, flags, NULL, + alloca_used) == 0) + goto success; + FALLTHROUGH; case L_('@'): do /* I cannot believe it but 'strcat' is actually acceptable @@ -1161,13 +1135,15 @@ pattern list. */ if (FCT (STRCAT (list->str, p), string, string_end, no_leading_period, - flags & FNM_FILE_NAME ? flags : flags & ~FNM_PERIOD) == 0) + flags & FNM_FILE_NAME ? flags : flags & ~FNM_PERIOD, + NULL, alloca_used) == 0) /* It worked. Signal success. */ - return 0; + goto success; while ((list = list->next) != NULL); /* None of the patterns lead to a match. */ - return FNM_NOMATCH; + retval = FNM_NOMATCH; + break; case L_('!'): for (rs = string; rs <= string_end; ++rs) @@ -1176,7 +1152,8 @@ for (runp = list; runp != NULL; runp = runp->next) if (FCT (runp->str, string, rs, no_leading_period, - flags & FNM_FILE_NAME ? flags : flags & ~FNM_PERIOD) == 0) + flags & FNM_FILE_NAME ? flags : flags & ~FNM_PERIOD, + NULL, alloca_used) == 0) break; /* If none of the patterns matched see whether the rest does. */ @@ -1185,22 +1162,35 @@ rs == string ? no_leading_period : rs[-1] == '/' && NO_LEADING_PERIOD (flags), - flags & FNM_FILE_NAME ? flags : flags & ~FNM_PERIOD) - == 0)) + flags & FNM_FILE_NAME ? flags : flags & ~FNM_PERIOD, + NULL, alloca_used) == 0)) /* This is successful. */ - return 0; + goto success; } /* None of the patterns together with the rest of the pattern lead to a match. */ - return FNM_NOMATCH; + retval = FNM_NOMATCH; + break; default: assert (! "Invalid extended matching operator"); + retval = -1; break; } - return -1; + success: + out: + if (any_malloced) + while (list != NULL) + { + struct patternlist *old = list; + list = list->next; + if (old->malloced) + free (old); + } + + return retval; } @@ -1211,9 +1201,12 @@ #undef FCT #undef EXT #undef END +#undef STRUCT #undef MEMPCPY #undef MEMCHR #undef STRLEN #undef STRCAT #undef L_ #undef BTOWC +#undef WIDE_CHAR_VERSION +#undef FINDIDX diff -Nru gdb-9.1/gnulib/import/fpucw.h gdb-10.2/gnulib/import/fpucw.h --- gdb-9.1/gnulib/import/fpucw.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/fpucw.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Manipulating the FPU control word. -*- coding: utf-8 -*- - Copyright (C) 2007-2016 Free Software Foundation, Inc. + Copyright (C) 2007-2020 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2007. This program is free software: you can redistribute it and/or modify @@ -13,7 +13,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _FPUCW_H #define _FPUCW_H @@ -35,15 +35,15 @@ The FPU control word is under control of the application, i.e. it is not required to be set either way by the ABI. (In fact, the i386 ABI - http://refspecs.freestandards.org/elf/abi386-4.pdf page 3-12 = page 38 + https://www.linux-mips.org/pub/linux/mips/doc/ABI/abi386-4.pdf page 3-12 = page 38 is not clear about it. But in any case, gcc treats the control word like a "preserved" register: it emits code that assumes that the control word is preserved across calls, and it restores the control word at the end of functions that modify it.) - See Vincent Lefèvre's page http://www.vinc17.org/research/extended.en.html + See Vincent Lefèvre's page https://www.vinc17.net/research/extended.en.html for a good explanation. - See http://www.uwsg.iu.edu/hypermail/linux/kernel/0103.0/0453.html for + See https://web.archive.org/web/20060905133417/http://www.uwsg.iu.edu/hypermail/linux/kernel/0103.0/0453.html some argumentation which setting should be the default. */ /* This header file provides the following facilities: @@ -70,12 +70,12 @@ # define FPU_PC_DOUBLE 0x200 /* glibc calls this _FPU_DOUBLE */ # define FPU_PC_EXTENDED 0x300 /* glibc calls this _FPU_EXTENDED */ -# define GET_FPUCW() \ +# define GET_FPUCW() __extension__ \ ({ fpucw_t _cw; \ __asm__ __volatile__ ("fnstcw %0" : "=m" (*&_cw)); \ _cw; \ }) -# define SET_FPUCW(word) \ +# define SET_FPUCW(word) __extension__ \ (void)({ fpucw_t _ncw = (word); \ __asm__ __volatile__ ("fldcw %0" : : "m" (*&_ncw)); \ }) diff -Nru gdb-9.1/gnulib/import/frexp.c gdb-10.2/gnulib/import/frexp.c --- gdb-9.1/gnulib/import/frexp.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/frexp.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Split a double into fraction and mantissa. - Copyright (C) 2007-2016 Free Software Foundation, Inc. + Copyright (C) 2007-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -12,7 +12,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paolo Bonzini <bonzini@gnu.org>, 2003, and Bruno Haible <bruno@clisp.org>, 2007. */ diff -Nru gdb-9.1/gnulib/import/frexpl.c gdb-10.2/gnulib/import/frexpl.c --- gdb-9.1/gnulib/import/frexpl.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/frexpl.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Split a 'long double' into fraction and mantissa. - Copyright (C) 2007, 2009-2016 Free Software Foundation, Inc. + Copyright (C) 2007, 2009-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -12,7 +12,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> diff -Nru gdb-9.1/gnulib/import/fstatat.c gdb-10.2/gnulib/import/fstatat.c --- gdb-9.1/gnulib/import/fstatat.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/fstatat.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Work around an fstatat bug on Solaris 9. - Copyright (C) 2006, 2009-2016 Free Software Foundation, Inc. + Copyright (C) 2006, 2009-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -13,7 +13,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paul Eggert and Jim Meyering. */ @@ -28,7 +28,7 @@ #include <sys/stat.h> #undef __need_system_sys_stat_h -#if HAVE_FSTATAT +#if HAVE_FSTATAT && HAVE_WORKING_FSTATAT_ZERO_FLAG static int orig_fstatat (int fd, char const *filename, struct stat *buf, int flags) { @@ -36,13 +36,20 @@ } #endif +#ifdef __osf__ /* Write "sys/stat.h" here, not <sys/stat.h>, otherwise OSF/1 5.1 DTK cc eliminates this include because of the preliminary #include <sys/stat.h> above. */ -#include "sys/stat.h" +# include "sys/stat.h" +#else +# include <sys/stat.h> +#endif + +#include "stat-time.h" #include <errno.h> #include <fcntl.h> +#include <stdlib.h> #include <string.h> #if HAVE_FSTATAT && HAVE_WORKING_FSTATAT_ZERO_FLAG @@ -51,6 +58,12 @@ # define LSTAT_FOLLOWS_SLASHED_SYMLINK 0 # endif +static int +normal_fstatat (int fd, char const *file, struct stat *st, int flag) +{ + return stat_time_normalize (orig_fstatat (fd, file, st, flag), st); +} + /* fstatat should always follow symbolic links that end in /, but on Solaris 9 it doesn't if AT_SYMLINK_NOFOLLOW is specified. Likewise, trailing slash on a non-directory should be an error. @@ -63,7 +76,7 @@ int rpl_fstatat (int fd, char const *file, struct stat *st, int flag) { - int result = orig_fstatat (fd, file, st, flag); + int result = normal_fstatat (fd, file, st, flag); size_t len; if (LSTAT_FOLLOWS_SLASHED_SYMLINK || result != 0) @@ -79,7 +92,7 @@ errno = ENOTDIR; return -1; } - result = orig_fstatat (fd, file, st, flag & ~AT_SYMLINK_NOFOLLOW); + result = normal_fstatat (fd, file, st, flag & ~AT_SYMLINK_NOFOLLOW); } /* Fix stat behavior. */ if (result == 0 && !S_ISDIR (st->st_mode) && file[len - 1] == '/') @@ -111,7 +124,7 @@ # endif /* Replacement for Solaris' function by the same name. - <http://www.google.com/search?q=fstatat+site:docs.sun.com> + <https://www.google.com/search?q=fstatat+site:docs.oracle.com> First, try to simulate it via l?stat ("/proc/self/fd/FD/FILE"). Failing that, simulate it via save_cwd/fchdir/(stat|lstat)/restore_cwd. If either the save_cwd or the restore_cwd fails (relatively unlikely), diff -Nru gdb-9.1/gnulib/import/fstat.c gdb-10.2/gnulib/import/fstat.c --- gdb-9.1/gnulib/import/fstat.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/fstat.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* fstat() replacement. - Copyright (C) 2011-2016 Free Software Foundation, Inc. + Copyright (C) 2011-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -12,7 +12,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* If the user's config.h happens to include <sys/stat.h>, let it include only the system's <sys/stat.h> here, so that orig_fstat doesn't recurse to @@ -23,54 +23,45 @@ /* Get the original definition of fstat. It might be defined as a macro. */ #include <sys/types.h> #include <sys/stat.h> -#if _GL_WINDOWS_64_BIT_ST_SIZE -# undef stat /* avoid warning on mingw64 with _FILE_OFFSET_BITS=64 */ -# define stat _stati64 -# undef fstat /* avoid warning on mingw64 with _FILE_OFFSET_BITS=64 */ -# define fstat _fstati64 -#endif #undef __need_system_sys_stat_h +#if defined _WIN32 && ! defined __CYGWIN__ +# define WINDOWS_NATIVE +#endif + +#if !defined WINDOWS_NATIVE + static int orig_fstat (int fd, struct stat *buf) { return fstat (fd, buf); } +#endif + /* Specification. */ +#ifdef __osf__ /* Write "sys/stat.h" here, not <sys/stat.h>, otherwise OSF/1 5.1 DTK cc eliminates this include because of the preliminary #include <sys/stat.h> above. */ -#include "sys/stat.h" - -#include <errno.h> -#include <unistd.h> - -#if HAVE_MSVC_INVALID_PARAMETER_HANDLER -# include "msvc-inval.h" +# include "sys/stat.h" +#else +# include <sys/stat.h> #endif -#if HAVE_MSVC_INVALID_PARAMETER_HANDLER -static int -fstat_nothrow (int fd, struct stat *buf) -{ - int result; +#include "stat-time.h" - TRY_MSVC_INVAL - { - result = orig_fstat (fd, buf); - } - CATCH_MSVC_INVAL - { - result = -1; - errno = EBADF; - } - DONE_MSVC_INVAL; - - return result; -} -#else -# define fstat_nothrow orig_fstat +#include <errno.h> +#include <unistd.h> +#ifdef WINDOWS_NATIVE +# define WIN32_LEAN_AND_MEAN +# include <windows.h> +# if GNULIB_MSVC_NOTHROW +# include "msvc-nothrow.h" +# else +# include <io.h> +# endif +# include "stat-w32.h" #endif int @@ -84,5 +75,20 @@ return stat (name, buf); #endif - return fstat_nothrow (fd, buf); +#ifdef WINDOWS_NATIVE + /* Fill the fields ourselves, because the original fstat function returns + values for st_atime, st_mtime, st_ctime that depend on the current time + zone. See + <https://lists.gnu.org/r/bug-gnulib/2017-04/msg00134.html> */ + HANDLE h = (HANDLE) _get_osfhandle (fd); + + if (h == INVALID_HANDLE_VALUE) + { + errno = EBADF; + return -1; + } + return _gl_fstat_by_handle (h, NULL, buf); +#else + return stat_time_normalize (orig_fstat (fd, buf), buf); +#endif } diff -Nru gdb-9.1/gnulib/import/getcwd.c gdb-10.2/gnulib/import/getcwd.c --- gdb-9.1/gnulib/import/getcwd.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/getcwd.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 1991-1999, 2004-2016 Free Software Foundation, Inc. +/* Copyright (C) 1991-1999, 2004-2020 Free Software Foundation, Inc. This file is part of the GNU C Library. This program is free software: you can redistribute it and/or modify @@ -12,7 +12,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ #if !_LIBC # include <config.h> @@ -79,6 +79,10 @@ # define MATCHING_INO(dp, ino) true #endif +#if HAVE_MSVC_INVALID_PARAMETER_HANDLER +# include "msvc-inval.h" +#endif + #if !_LIBC # define __getcwd rpl_getcwd # define __lstat lstat @@ -100,11 +104,39 @@ # undef closedir #endif +#ifdef _MSC_VER +# if HAVE_MSVC_INVALID_PARAMETER_HANDLER +static char * +getcwd_nothrow (char *buf, size_t size) +{ + char *result; + + TRY_MSVC_INVAL + { + result = _getcwd (buf, size); + } + CATCH_MSVC_INVAL + { + result = NULL; + errno = ERANGE; + } + DONE_MSVC_INVAL; + + return result; +} +# else +# define getcwd_nothrow _getcwd +# endif +# define getcwd_system getcwd_nothrow +#else +# define getcwd_system getcwd +#endif + /* Get the name of the current working directory, and put it in SIZE - bytes of BUF. Returns NULL if the directory couldn't be determined or - SIZE was too small. If successful, returns BUF. In GNU, if BUF is - NULL, an array is allocated with 'malloc'; the array is SIZE bytes long, - unless SIZE == 0, in which case it is as big as necessary. */ + bytes of BUF. Returns NULL with errno set if the directory couldn't be + determined or SIZE was too small. If successful, returns BUF. In GNU, + if BUF is NULL, an array is allocated with 'malloc'; the array is SIZE + bytes long, unless SIZE == 0, in which case it is as big as necessary. */ char * __getcwd (char *buf, size_t size) @@ -155,7 +187,7 @@ this wrong result with errno = 0. */ # undef getcwd - dir = getcwd (buf, size); + dir = getcwd_system (buf, size); if (dir || (size && errno == ERANGE)) return dir; @@ -166,7 +198,7 @@ if (errno == EINVAL && buf == NULL && size == 0) { char big_buffer[BIG_FILE_NAME_LENGTH + 1]; - dir = getcwd (big_buffer, sizeof big_buffer); + dir = getcwd_system (big_buffer, sizeof big_buffer); if (dir) return strdup (dir); } @@ -411,7 +443,7 @@ if (size == 0) /* Ensure that the buffer is only as large as necessary. */ - buf = realloc (dir, used); + buf = (used < allocated ? realloc (dir, used) : dir); if (buf == NULL) /* Either buf was NULL all along, or 'realloc' failed but diff -Nru gdb-9.1/gnulib/import/getcwd-lgpl.c gdb-10.2/gnulib/import/getcwd-lgpl.c --- gdb-9.1/gnulib/import/getcwd-lgpl.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/getcwd-lgpl.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2011-2016 Free Software Foundation, Inc. +/* Copyright (C) 2011-2020 Free Software Foundation, Inc. This file is part of gnulib. This program is free software: you can redistribute it and/or modify @@ -12,7 +12,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> @@ -115,10 +115,15 @@ } else { - /* Trim to fit, if possible. */ - result = realloc (buf, strlen (buf) + 1); - if (!result) - result = buf; + /* Here result == buf. */ + /* Shrink result before returning it. */ + size_t actual_size = strlen (result) + 1; + if (actual_size < size) + { + char *shrinked_result = realloc (result, actual_size); + if (shrinked_result != NULL) + result = shrinked_result; + } } return result; } diff -Nru gdb-9.1/gnulib/import/getdtablesize.c gdb-10.2/gnulib/import/getdtablesize.c --- gdb-9.1/gnulib/import/getdtablesize.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/getdtablesize.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ -/* getdtablesize() function for platforms that don't have it. - Copyright (C) 2008-2016 Free Software Foundation, Inc. +/* getdtablesize() function: Return maximum possible file descriptor value + 1. + Copyright (C) 2008-2020 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2008. This program is free software: you can redistribute it and/or modify @@ -13,18 +13,20 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <unistd.h> -#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ +#if defined _WIN32 && ! defined __CYGWIN__ # include <stdio.h> -# include "msvc-inval.h" +# if HAVE_MSVC_INVALID_PARAMETER_HANDLER +# include "msvc-inval.h" +# endif # if HAVE_MSVC_INVALID_PARAMETER_HANDLER static int @@ -44,7 +46,8 @@ return result; } -# define _setmaxstdio _setmaxstdio_nothrow +# else +# define _setmaxstdio_nothrow _setmaxstdio # endif /* Cache for the previous getdtablesize () result. Safe to cache because @@ -76,9 +79,9 @@ freed when we call _setmaxstdio with the original value. */ int orig_max_stdio = _getmaxstdio (); unsigned int bound; - for (bound = 0x10000; _setmaxstdio (bound) < 0; bound = bound / 2) + for (bound = 0x10000; _setmaxstdio_nothrow (bound) < 0; bound = bound / 2) ; - _setmaxstdio (orig_max_stdio); + _setmaxstdio_nothrow (orig_max_stdio); dtablesize = bound; } return dtablesize; diff -Nru gdb-9.1/gnulib/import/getlogin_r.c gdb-10.2/gnulib/import/getlogin_r.c --- gdb-9.1/gnulib/import/getlogin_r.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/getlogin_r.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Provide a working getlogin_r for systems which lack it. - Copyright (C) 2005-2007, 2010-2016 Free Software Foundation, Inc. + Copyright (C) 2005-2007, 2010-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -13,7 +13,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, see <http://www.gnu.org/licenses/>. */ + along with this program; if not, see <https://www.gnu.org/licenses/>. */ /* Written by Paul Eggert, Derek Price, and Bruno Haible. */ @@ -25,9 +25,14 @@ #include <errno.h> #include <string.h> -#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ +#include "malloca.h" + +#if defined _WIN32 && ! defined __CYGWIN__ # define WIN32_LEAN_AND_MEAN # include <windows.h> +/* Don't assume that UNICODE is not defined. */ +# undef GetUserName +# define GetUserName GetUserNameA #else # if !HAVE_DECL_GETLOGIN extern char *getlogin (void); @@ -39,7 +44,7 @@ getlogin_r (char *name, size_t size) { #undef getlogin_r -#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ +#if defined _WIN32 && ! defined __CYGWIN__ /* Native Windows platform. */ DWORD sz; @@ -63,9 +68,27 @@ /* Platform with a getlogin_r() function. */ int ret = getlogin_r (name, size); - if (ret == 0 && memchr (name, '\0', size) == NULL) - /* name contains a truncated result. */ - return ERANGE; + if (ret == 0) + { + const char *nul = memchr (name, '\0', size); + if (nul == NULL) + /* name contains a truncated result. */ + return ERANGE; + if (size > 0 && nul == name + size - 1) + { + /* strlen(name) == size-1. Determine whether the untruncated result + would have had length size-1 or size. */ + char *room = (char *) malloca (size + 1); + if (room == NULL) + return ENOMEM; + ret = getlogin_r (room, size + 1); + /* The untruncated result should be the same as in the first call. */ + if (ret == 0 && memcmp (name, room, size) != 0) + /* The untruncated result would have been different. */ + ret = ERANGE; + freea (room); + } + } return ret; #else /* Platform with a getlogin() function. */ diff -Nru gdb-9.1/gnulib/import/getprogname.c gdb-10.2/gnulib/import/getprogname.c --- gdb-9.1/gnulib/import/getprogname.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/getprogname.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Program name management. - Copyright (C) 2016 Free Software Foundation, Inc. + Copyright (C) 2016-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -12,7 +12,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> @@ -43,6 +43,14 @@ # include <string.h> #endif +#ifdef __sgi +# include <string.h> +# include <unistd.h> +# include <stdio.h> +# include <fcntl.h> +# include <sys/procfs.h> +#endif + #include "dirname.h" #ifndef HAVE_GETPROGNAME /* not Mac OS X, FreeBSD, NetBSD, OpenBSD >= 5.4, Cygwin */ @@ -56,17 +64,17 @@ /* https://www.gnu.org/software/libc/manual/html_node/Error-Messages.html */ return last_component (program_invocation_name); # elif HAVE_GETEXECNAME /* Solaris */ - /* http://docs.oracle.com/cd/E19253-01/816-5168/6mbb3hrb1/index.html */ + /* https://docs.oracle.com/cd/E19253-01/816-5168/6mbb3hrb1/index.html */ const char *p = getexecname (); if (!p) p = "?"; return last_component (p); # elif HAVE_DECL___ARGV /* mingw, MSVC */ - /* https://msdn.microsoft.com/en-us/library/dn727674.aspx */ + /* https://docs.microsoft.com/en-us/cpp/c-runtime-library/argc-argv-wargv */ const char *p = __argv && __argv[0] ? __argv[0] : "?"; return last_component (p); -# elif HAVE_VAR___PROGNAME /* OpenBSD, QNX */ - /* http://man.openbsd.org/style.9 */ +# elif HAVE_VAR___PROGNAME /* OpenBSD, Android, QNX */ + /* https://man.openbsd.org/style.9 */ /* http://www.qnx.de/developers/docs/6.5.0/index.jsp?topic=%2Fcom.qnx.doc.neutrino_lib_ref%2Fp%2F__progname.html */ /* Be careful to declare this only when we absolutely need it (OpenBSD 5.1), rather than when it's available. Otherwise, @@ -74,12 +82,15 @@ malfunction (have zero length) with Fedora 25's glibc. */ extern char *__progname; const char *p = __progname; +# if defined __ANDROID__ + return last_component (p); +# else return p && p[0] ? p : "?"; +# endif # elif _AIX /* AIX */ /* Idea by Bastien ROUCARIÈS, - http://lists.gnu.org/archive/html/bug-gnulib/2010-12/msg00095.html - Reference: http:// - ibm.biz/knowctr#ssw_aix_53/com.ibm.aix.basetechref/doc/basetrf1/getprocs.htm + https://lists.gnu.org/r/bug-gnulib/2010-12/msg00095.html + Reference: https://www.ibm.com/support/knowledgecenter/en/ssw_aix_61/com.ibm.aix.basetrf1/getprocs.htm */ static char *p; static int first = 1; @@ -103,9 +114,73 @@ first = 0; pid_t pid = getpid (); struct pst_status status; - p = (0 < pstat_getproc (&status, sizeof status, 0, pid) - ? strdup (status.pst_ucomm) - : NULL); + if (pstat_getproc (&status, sizeof status, 0, pid) > 0) + { + char *ucomm = status.pst_ucomm; + char *cmd = status.pst_cmd; + if (strlen (ucomm) < PST_UCOMMLEN - 1) + p = ucomm; + else + { + /* ucomm is truncated to length PST_UCOMMLEN - 1. + Look at cmd instead. */ + char *space = strchr (cmd, ' '); + if (space != NULL) + *space = '\0'; + p = strrchr (cmd, '/'); + if (p != NULL) + p++; + else + p = cmd; + if (strlen (p) > PST_UCOMMLEN - 1 + && memcmp (p, ucomm, PST_UCOMMLEN - 1) == 0) + /* p is less truncated than ucomm. */ + ; + else + p = ucomm; + } + p = strdup (p); + } + else + { +# if !defined __LP64__ + /* Support for 32-bit programs running in 64-bit HP-UX. + The documented way to do this is to use the same source code + as above, but in a compilation unit where '#define _PSTAT64 1' + is in effect. I prefer a single compilation unit; the struct + size and the offsets are not going to change. */ + char status64[1216]; + if (__pstat_getproc64 (status64, sizeof status64, 0, pid) > 0) + { + char *ucomm = status64 + 288; + char *cmd = status64 + 168; + if (strlen (ucomm) < PST_UCOMMLEN - 1) + p = ucomm; + else + { + /* ucomm is truncated to length PST_UCOMMLEN - 1. + Look at cmd instead. */ + char *space = strchr (cmd, ' '); + if (space != NULL) + *space = '\0'; + p = strrchr (cmd, '/'); + if (p != NULL) + p++; + else + p = cmd; + if (strlen (p) > PST_UCOMMLEN - 1 + && memcmp (p, ucomm, PST_UCOMMLEN - 1) == 0) + /* p is less truncated than ucomm. */ + ; + else + p = ucomm; + } + p = strdup (p); + } + else +# endif + p = NULL; + } if (!p) p = "?"; } @@ -143,9 +218,43 @@ free (buf.ps_pathptr); } return p; +# elif defined __sgi /* IRIX */ + char filename[50]; + int fd; + + sprintf (filename, "/proc/pinfo/%d", (int) getpid ()); + fd = open (filename, O_RDONLY | O_CLOEXEC); + if (0 <= fd) + { + prpsinfo_t buf; + int ioctl_ok = 0 <= ioctl (fd, PIOCPSINFO, &buf); + close (fd); + if (ioctl_ok) + { + char *name = buf.pr_fname; + size_t namesize = sizeof buf.pr_fname; + /* It may not be NUL-terminated. */ + char *namenul = memchr (name, '\0', namesize); + size_t namelen = namenul ? namenul - name : namesize; + char *namecopy = malloc (namelen + 1); + if (namecopy) + { + namecopy[namelen] = '\0'; + return memcpy (namecopy, name, namelen); + } + } + } + return NULL; # else # error "getprogname module not ported to this OS" # endif } #endif + +/* + * Hey Emacs! + * Local Variables: + * coding: utf-8 + * End: + */ diff -Nru gdb-9.1/gnulib/import/getprogname.h gdb-10.2/gnulib/import/getprogname.h --- gdb-9.1/gnulib/import/getprogname.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/getprogname.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Program name management. - Copyright (C) 2016 Free Software Foundation, Inc. + Copyright (C) 2016-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -12,7 +12,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _GL_GETPROGNAME_H #define _GL_GETPROGNAME_H diff -Nru gdb-9.1/gnulib/import/getrandom.c gdb-10.2/gnulib/import/getrandom.c --- gdb-9.1/gnulib/import/getrandom.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/getrandom.c 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,187 @@ +/* Obtain a series of random bytes. + + Copyright 2020 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Paul Eggert. */ + +#include <config.h> + +#include <sys/random.h> + +#include <errno.h> +#include <fcntl.h> +#include <stdbool.h> +#include <unistd.h> + +#if defined _WIN32 && ! defined __CYGWIN__ +# define WIN32_LEAN_AND_MEAN +# include <windows.h> +# if HAVE_BCRYPT_H +# include <bcrypt.h> +# else +# include <ntdef.h> /* NTSTATUS */ +typedef void * BCRYPT_ALG_HANDLE; +# define BCRYPT_USE_SYSTEM_PREFERRED_RNG 0x00000002 +# if HAVE_LIB_BCRYPT +extern NTSTATUS WINAPI BCryptGenRandom (BCRYPT_ALG_HANDLE, UCHAR *, ULONG, ULONG); +# endif +# endif +# if !HAVE_LIB_BCRYPT +# include <wincrypt.h> +# ifndef CRYPT_VERIFY_CONTEXT +# define CRYPT_VERIFY_CONTEXT 0xF0000000 +# endif +# endif +#endif + +#include "minmax.h" + +#if defined _WIN32 && ! defined __CYGWIN__ + +/* Don't assume that UNICODE is not defined. */ +# undef LoadLibrary +# define LoadLibrary LoadLibraryA +# undef CryptAcquireContext +# define CryptAcquireContext CryptAcquireContextA + +# if !HAVE_LIB_BCRYPT + +/* Avoid warnings from gcc -Wcast-function-type. */ +# define GetProcAddress \ + (void *) GetProcAddress + +/* BCryptGenRandom with the BCRYPT_USE_SYSTEM_PREFERRED_RNG flag works only + starting with Windows 7. */ +typedef NTSTATUS (WINAPI * BCryptGenRandomFuncType) (BCRYPT_ALG_HANDLE, UCHAR *, ULONG, ULONG); +static BCryptGenRandomFuncType BCryptGenRandomFunc = NULL; +static BOOL initialized = FALSE; + +static void +initialize (void) +{ + HMODULE bcrypt = LoadLibrary ("bcrypt.dll"); + if (bcrypt != NULL) + { + BCryptGenRandomFunc = + (BCryptGenRandomFuncType) GetProcAddress (bcrypt, "BCryptGenRandom"); + } + initialized = TRUE; +} + +# else + +# define BCryptGenRandomFunc BCryptGenRandom + +# endif + +#else +/* These devices exist on all platforms except native Windows. */ + +/* Name of a device through which the kernel returns high quality random + numbers, from an entropy pool. When the pool is empty, the call blocks + until entropy sources have added enough bits of entropy. */ +# ifndef NAME_OF_RANDOM_DEVICE +# define NAME_OF_RANDOM_DEVICE "/dev/random" +# endif + +/* Name of a device through which the kernel returns random or pseudo-random + numbers. It uses an entropy pool, but, in order to avoid blocking, adds + bits generated by a pseudo-random number generator, as needed. */ +# ifndef NAME_OF_NONCE_DEVICE +# define NAME_OF_NONCE_DEVICE "/dev/urandom" +# endif + +#endif + +/* Set BUFFER (of size LENGTH) to random bytes under the control of FLAGS. + Return the number of bytes written (> 0). + Upon error, return -1 and set errno. */ +ssize_t +getrandom (void *buffer, size_t length, unsigned int flags) +#undef getrandom +{ +#if defined _WIN32 && ! defined __CYGWIN__ + /* BCryptGenRandom, defined in <bcrypt.h> + <https://docs.microsoft.com/en-us/windows/win32/api/bcrypt/nf-bcrypt-bcryptgenrandom> + with the BCRYPT_USE_SYSTEM_PREFERRED_RNG flag + works in Windows 7 and newer. */ + static int bcrypt_not_working /* = 0 */; + if (!bcrypt_not_working) + { +# if !HAVE_LIB_BCRYPT + if (!initialized) + initialize (); +# endif + if (BCryptGenRandomFunc != NULL + && BCryptGenRandomFunc (NULL, buffer, length, + BCRYPT_USE_SYSTEM_PREFERRED_RNG) + == 0 /*STATUS_SUCCESS*/) + return length; + bcrypt_not_working = 1; + } +# if !HAVE_LIB_BCRYPT + /* CryptGenRandom, defined in <wincrypt.h> + <https://docs.microsoft.com/en-us/windows/win32/api/wincrypt/nf-wincrypt-cryptgenrandom> + works in older releases as well, but is now deprecated. + CryptAcquireContext, defined in <wincrypt.h> + <https://docs.microsoft.com/en-us/windows/win32/api/wincrypt/nf-wincrypt-cryptacquirecontexta> */ + { + static int crypt_initialized /* = 0 */; + static HCRYPTPROV provider; + if (!crypt_initialized) + { + if (CryptAcquireContext (&provider, NULL, NULL, PROV_RSA_FULL, + CRYPT_VERIFY_CONTEXT)) + crypt_initialized = 1; + else + crypt_initialized = -1; + } + if (crypt_initialized >= 0) + { + if (!CryptGenRandom (provider, length, buffer)) + { + errno = EIO; + return -1; + } + return length; + } + } +# endif + errno = ENOSYS; + return -1; +#elif HAVE_GETRANDOM + return getrandom (buffer, length, flags); +#else + static int randfd[2] = { -1, -1 }; + bool devrandom = (flags & GRND_RANDOM) != 0; + int fd = randfd[devrandom]; + + if (fd < 0) + { + static char const randdevice[][MAX (sizeof NAME_OF_NONCE_DEVICE, + sizeof NAME_OF_RANDOM_DEVICE)] + = { NAME_OF_NONCE_DEVICE, NAME_OF_RANDOM_DEVICE }; + int oflags = (O_RDONLY + O_CLOEXEC + + (flags & GRND_NONBLOCK ? O_NONBLOCK : 0)); + fd = open (randdevice[devrandom], oflags); + if (fd < 0) + return fd; + randfd[devrandom] = fd; + } + + return read (fd, buffer, length); +#endif +} diff -Nru gdb-9.1/gnulib/import/gettext.h gdb-10.2/gnulib/import/gettext.h --- gdb-9.1/gnulib/import/gettext.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/gettext.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Convenience header for conditional use of GNU <libintl.h>. - Copyright (C) 1995-1998, 2000-2002, 2004-2006, 2009-2016 Free Software + Copyright (C) 1995-1998, 2000-2002, 2004-2006, 2009-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify @@ -13,13 +13,14 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along - with this program; if not, see <http://www.gnu.org/licenses/>. */ + with this program; if not, see <https://www.gnu.org/licenses/>. */ #ifndef _LIBGETTEXT_H #define _LIBGETTEXT_H 1 -/* NLS can be disabled through the configure --disable-nls option. */ -#if ENABLE_NLS +/* NLS can be disabled through the configure --disable-nls option + or through "#define ENABLE NLS 0" before including this file. */ +#if defined ENABLE_NLS && ENABLE_NLS /* Get declarations of GNU message catalog functions. */ # include <libintl.h> @@ -183,8 +184,16 @@ #include <string.h> -#if (((__GNUC__ >= 3 || __GNUG__ >= 2) && !defined __STRICT_ANSI__) \ - /* || __STDC_VERSION__ >= 199901L */ ) +/* GNULIB_NO_VLA can be defined to disable use of VLAs even if supported. + This relates to the -Wvla and -Wvla-larger-than warnings, enabled in + the default GCC many warnings set. This allows programs to disable use + of VLAs, which may be unintended, or may be awkward to support portably, + or may have security implications due to non-deterministic stack usage. */ + +#if (!defined GNULIB_NO_VLA \ + && (((__GNUC__ >= 3 || __GNUG__ >= 2) && !defined __STRICT_ANSI__) \ + /* || (__STDC_VERSION__ == 199901L && !defined __HP_cc) + || (__STDC_VERSION__ >= 201112L && !defined __STDC_NO_VLA__) */ )) # define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS 1 #else # define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS 0 diff -Nru gdb-9.1/gnulib/import/gettimeofday.c gdb-10.2/gnulib/import/gettimeofday.c --- gdb-9.1/gnulib/import/gettimeofday.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/gettimeofday.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Provide gettimeofday for systems that don't have it or for which it's broken. - Copyright (C) 2001-2003, 2005-2007, 2009-2016 Free Software Foundation, Inc. + Copyright (C) 2001-2003, 2005-2007, 2009-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -13,7 +13,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, see <http://www.gnu.org/licenses/>. */ + along with this program; if not, see <https://www.gnu.org/licenses/>. */ /* written by Jim Meyering */ @@ -24,93 +24,113 @@ #include <time.h> -#if HAVE_SYS_TIMEB_H -# include <sys/timeb.h> +#if defined _WIN32 && ! defined __CYGWIN__ +# define WINDOWS_NATIVE +# include <windows.h> #endif -#if GETTIMEOFDAY_CLOBBERS_LOCALTIME || TZSET_CLOBBERS_LOCALTIME +#include "localtime-buffer.h" -/* Work around the bug in some systems whereby gettimeofday clobbers - the static buffer that localtime uses for its return value. The - gettimeofday function from Mac OS X 10.0.4 (i.e., Darwin 1.3.7) has - this problem. The tzset replacement is necessary for at least - Solaris 2.5, 2.5.1, and 2.6. */ - -static struct tm tm_zero_buffer; -static struct tm *localtime_buffer_addr = &tm_zero_buffer; +#ifdef WINDOWS_NATIVE -# undef localtime -extern struct tm *localtime (time_t const *); +/* Don't assume that UNICODE is not defined. */ +# undef LoadLibrary +# define LoadLibrary LoadLibraryA -# undef gmtime -extern struct tm *gmtime (time_t const *); +# if !(_WIN32_WINNT >= _WIN32_WINNT_WIN8) -/* This is a wrapper for localtime. It is used only on systems for which - gettimeofday clobbers the static buffer used for localtime's result. +/* Avoid warnings from gcc -Wcast-function-type. */ +# define GetProcAddress \ + (void *) GetProcAddress - On the first call, record the address of the static buffer that - localtime uses for its result. */ +/* GetSystemTimePreciseAsFileTime was introduced only in Windows 8. */ +typedef void (WINAPI * GetSystemTimePreciseAsFileTimeFuncType) (FILETIME *lpTime); +static GetSystemTimePreciseAsFileTimeFuncType GetSystemTimePreciseAsFileTimeFunc = NULL; +static BOOL initialized = FALSE; -struct tm * -rpl_localtime (time_t const *timep) +static void +initialize (void) { - struct tm *tm = localtime (timep); - - if (localtime_buffer_addr == &tm_zero_buffer) - localtime_buffer_addr = tm; - - return tm; -} - -/* Same as above, since gmtime and localtime use the same buffer. */ -struct tm * -rpl_gmtime (time_t const *timep) -{ - struct tm *tm = gmtime (timep); - - if (localtime_buffer_addr == &tm_zero_buffer) - localtime_buffer_addr = tm; - - return tm; + HMODULE kernel32 = LoadLibrary ("kernel32.dll"); + if (kernel32 != NULL) + { + GetSystemTimePreciseAsFileTimeFunc = + (GetSystemTimePreciseAsFileTimeFuncType) GetProcAddress (kernel32, "GetSystemTimePreciseAsFileTime"); + } + initialized = TRUE; } -#endif /* GETTIMEOFDAY_CLOBBERS_LOCALTIME || TZSET_CLOBBERS_LOCALTIME */ +# else -#if TZSET_CLOBBERS_LOCALTIME +# define GetSystemTimePreciseAsFileTimeFunc GetSystemTimePreciseAsFileTime -# undef tzset -extern void tzset (void); +# endif -/* This is a wrapper for tzset, for systems on which tzset may clobber - the static buffer used for localtime's result. */ -void -rpl_tzset (void) -{ - /* Save and restore the contents of the buffer used for localtime's - result around the call to tzset. */ - struct tm save = *localtime_buffer_addr; - tzset (); - *localtime_buffer_addr = save; -} #endif /* This is a wrapper for gettimeofday. It is used only on systems that lack this function, or whose implementation of this function - causes problems. */ + causes problems. + Work around the bug in some systems whereby gettimeofday clobbers + the static buffer that localtime uses for its return value. The + gettimeofday function from Mac OS X 10.0.4 (i.e., Darwin 1.3.7) has + this problem. */ int gettimeofday (struct timeval *restrict tv, void *restrict tz) { #undef gettimeofday -#if HAVE_GETTIMEOFDAY -# if GETTIMEOFDAY_CLOBBERS_LOCALTIME +#ifdef WINDOWS_NATIVE + + /* On native Windows, there are two ways to get the current time: + GetSystemTimeAsFileTime + <https://docs.microsoft.com/en-us/windows/desktop/api/sysinfoapi/nf-sysinfoapi-getsystemtimeasfiletime> + or + GetSystemTimePreciseAsFileTime + <https://docs.microsoft.com/en-us/windows/desktop/api/sysinfoapi/nf-sysinfoapi-getsystemtimepreciseasfiletime>. + GetSystemTimeAsFileTime produces values that jump by increments of + 15.627 milliseconds (!) on average. + Whereas GetSystemTimePreciseAsFileTime values usually jump by 1 or 2 + microseconds. + More discussion on this topic: + <http://www.windowstimestamp.com/description>. */ + FILETIME current_time; + +# if !(_WIN32_WINNT >= _WIN32_WINNT_WIN8) + if (!initialized) + initialize (); +# endif + if (GetSystemTimePreciseAsFileTimeFunc != NULL) + GetSystemTimePreciseAsFileTimeFunc (¤t_time); + else + GetSystemTimeAsFileTime (¤t_time); + + /* Convert from FILETIME to 'struct timeval'. */ + /* FILETIME: <https://docs.microsoft.com/en-us/windows/desktop/api/minwinbase/ns-minwinbase-filetime> */ + ULONGLONG since_1601 = + ((ULONGLONG) current_time.dwHighDateTime << 32) + | (ULONGLONG) current_time.dwLowDateTime; + /* Between 1601-01-01 and 1970-01-01 there were 280 normal years and 89 leap + years, in total 134774 days. */ + ULONGLONG since_1970 = + since_1601 - (ULONGLONG) 134774 * (ULONGLONG) 86400 * (ULONGLONG) 10000000; + ULONGLONG microseconds_since_1970 = since_1970 / (ULONGLONG) 10; + tv->tv_sec = microseconds_since_1970 / (ULONGLONG) 1000000; + tv->tv_usec = microseconds_since_1970 % (ULONGLONG) 1000000; + + return 0; + +#else + +# if HAVE_GETTIMEOFDAY +# if GETTIMEOFDAY_CLOBBERS_LOCALTIME /* Save and restore the contents of the buffer used for localtime's result around the call to gettimeofday. */ struct tm save = *localtime_buffer_addr; -# endif +# endif -# if defined timeval /* 'struct timeval' overridden by gnulib? */ -# undef timeval +# if defined timeval /* 'struct timeval' overridden by gnulib? */ +# undef timeval struct timeval otv; int result = gettimeofday (&otv, (struct timezone *) tz); if (result == 0) @@ -118,25 +138,16 @@ tv->tv_sec = otv.tv_sec; tv->tv_usec = otv.tv_usec; } -# else +# else int result = gettimeofday (tv, (struct timezone *) tz); -# endif +# endif -# if GETTIMEOFDAY_CLOBBERS_LOCALTIME +# if GETTIMEOFDAY_CLOBBERS_LOCALTIME *localtime_buffer_addr = save; -# endif +# endif return result; -#else - -# if HAVE__FTIME - - struct _timeb timebuf; - _ftime (&timebuf); - tv->tv_sec = timebuf.time; - tv->tv_usec = timebuf.millitm * 1000; - # else # if !defined OK_TO_USE_1S_CLOCK @@ -146,9 +157,8 @@ tv->tv_sec = time (NULL); tv->tv_usec = 0; -# endif - return 0; +# endif #endif } diff -Nru gdb-9.1/gnulib/import/glob.c gdb-10.2/gnulib/import/glob.c --- gdb-9.1/gnulib/import/glob.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/glob.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 1991-2016 Free Software Foundation, Inc. +/* Copyright (C) 1991-2020 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -13,13 +13,16 @@ You should have received a copy of the GNU General Public License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ + <https://www.gnu.org/licenses/>. */ #ifndef _LIBC + /* Don't use __attribute__ __nonnull__ in this compilation unit. Otherwise gcc - optimizes away the pattern == NULL || pglob == NULL tests below. */ + optimizes away the pattern == NULL test below. */ # define _GL_ARG_NONNULL(params) + # include <config.h> + #endif #include <glob.h> @@ -30,21 +33,10 @@ #include <stdbool.h> #include <stddef.h> #include <stdint.h> - -/* Outcomment the following line for production quality code. */ -/* #define NDEBUG 1 */ #include <assert.h> - -#include <stdio.h> /* Needed on stupid SunOS for assert. */ - -#ifndef GLOB_ONLY_P - #include <unistd.h> -#if !defined POSIX && defined _POSIX_VERSION -# define POSIX -#endif -#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ +#if defined _WIN32 && ! defined __CYGWIN__ # define WINDOWS32 #endif @@ -53,10 +45,6 @@ #endif #include <errno.h> -#ifndef __set_errno -# define __set_errno(val) errno = (val) -#endif - #include <dirent.h> #include <stdlib.h> #include <string.h> @@ -70,13 +58,24 @@ # define opendir(name) __opendir (name) # define readdir(str) __readdir64 (str) # define getpwnam_r(name, bufp, buf, len, res) \ - __getpwnam_r (name, bufp, buf, len, res) + __getpwnam_r (name, bufp, buf, len, res) +# ifndef __lstat64 +# define __lstat64(fname, buf) __lxstat64 (_STAT_VER, fname, buf) +# endif # ifndef __stat64 # define __stat64(fname, buf) __xstat64 (_STAT_VER, fname, buf) # endif # define struct_stat64 struct stat64 +# define FLEXIBLE_ARRAY_MEMBER +# include <shlib-compat.h> #else /* !_LIBC */ +# define __glob glob # define __getlogin_r(buf, len) getlogin_r (buf, len) +# define __lstat64(fname, buf) lstat (fname, buf) +# ifdef __MINGW32__ + /* Avoid GCC warning. mingw has an unused __stat64 macro. */ +# undef __stat64 +# endif # define __stat64(fname, buf) stat (fname, buf) # define __fxstatat64(_, d, f, st, flag) fstatat (d, f, st, flag) # define struct_stat64 struct stat @@ -84,94 +83,63 @@ # define __alloca alloca # endif # define __readdir readdir -# define __glob_pattern_p glob_pattern_p # define COMPILE_GLOB64 #endif /* _LIBC */ #include <fnmatch.h> -#include "flexmember.h" - -#ifdef _SC_GETPW_R_SIZE_MAX -# define GETPW_R_SIZE_MAX() sysconf (_SC_GETPW_R_SIZE_MAX) -#else -# define GETPW_R_SIZE_MAX() (-1) -#endif -#ifdef _SC_LOGIN_NAME_MAX -# define GET_LOGIN_NAME_MAX() sysconf (_SC_LOGIN_NAME_MAX) -#else -# define GET_LOGIN_NAME_MAX() (-1) -#endif +#include <flexmember.h> +#include <glob_internal.h> +#include <scratch_buffer.h> static const char *next_brace_sub (const char *begin, int flags) __THROWNL; +/* The type of ((struct dirent *) 0)->d_type is 'unsigned char' on most + platforms, but 'unsigned int' in the mingw from mingw.org. */ +typedef uint_fast32_t dirent_type; + +#if !defined _LIBC && !defined HAVE_STRUCT_DIRENT_D_TYPE +/* Any distinct values will do here. + Undef any existing macros out of the way. */ +# undef DT_UNKNOWN +# undef DT_DIR +# undef DT_LNK +# define DT_UNKNOWN 0 +# define DT_DIR 1 +# define DT_LNK 2 +#endif + /* A representation of a directory entry which does not depend on the layout of struct dirent, or the size of ino_t. */ struct readdir_result { const char *name; -# if defined _DIRENT_HAVE_D_TYPE || defined HAVE_STRUCT_DIRENT_D_TYPE - uint8_t type; -# endif - bool skip_entry; +#if defined _DIRENT_HAVE_D_TYPE || defined HAVE_STRUCT_DIRENT_D_TYPE + dirent_type type; +#endif }; -# if defined _DIRENT_HAVE_D_TYPE || defined HAVE_STRUCT_DIRENT_D_TYPE -/* Initializer based on the d_type member of struct dirent. */ -# define D_TYPE_TO_RESULT(source) (source)->d_type, - -/* True if the directory entry D might be a symbolic link. */ -static bool -readdir_result_might_be_symlink (struct readdir_result d) -{ - return d.type == DT_UNKNOWN || d.type == DT_LNK; -} - -/* True if the directory entry D might be a directory. */ -static bool -readdir_result_might_be_dir (struct readdir_result d) +/* Initialize and return type member of struct readdir_result. */ +static dirent_type +readdir_result_type (struct readdir_result d) { - return d.type == DT_DIR || readdir_result_might_be_symlink (d); -} -# else /* defined _DIRENT_HAVE_D_TYPE || defined HAVE_STRUCT_DIRENT_D_TYPE */ -# define D_TYPE_TO_RESULT(source) - -/* If we do not have type information, symbolic links and directories - are always a possibility. */ - -static bool -readdir_result_might_be_symlink (struct readdir_result d) -{ - return true; -} - -static bool -readdir_result_might_be_dir (struct readdir_result d) -{ - return true; +#if defined _DIRENT_HAVE_D_TYPE || defined HAVE_STRUCT_DIRENT_D_TYPE +# define D_TYPE_TO_RESULT(source) (source)->d_type, + return d.type; +#else +# define D_TYPE_TO_RESULT(source) + return DT_UNKNOWN; +#endif } -# endif /* defined _DIRENT_HAVE_D_TYPE || defined HAVE_STRUCT_DIRENT_D_TYPE */ - -# if (defined POSIX || defined WINDOWS32) && !defined __GNU_LIBRARY__ -/* Initializer for skip_entry. POSIX does not require that the d_ino - field be present, and some systems do not provide it. */ -# define D_INO_TO_RESULT(source) false, -# else -# define D_INO_TO_RESULT(source) (source)->d_ino == 0, -# endif - /* Construct an initializer for a struct readdir_result object from a struct dirent *. No copy of the name is made. */ #define READDIR_RESULT_INITIALIZER(source) \ { \ source->d_name, \ D_TYPE_TO_RESULT (source) \ - D_INO_TO_RESULT (source) \ } -#endif /* !defined GLOB_ONLY_P */ - /* Call gl_readdir on STREAM. This macro can be overridden to reduce type safety if an old interface version needs to be supported. */ #ifndef GL_READDIR @@ -209,27 +177,6 @@ } #endif - -#ifndef attribute_hidden -# define attribute_hidden -#endif - -#ifndef __attribute_noinline__ -# if __GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 1) -# define __attribute_noinline__ /* Ignore */ -#else -# define __attribute_noinline__ __attribute__ ((__noinline__)) -# endif -#endif - -#if ! defined __builtin_expect && __GNUC__ < 3 -# define __builtin_expect(expr, expected) (expr) -#endif - -#ifndef __glibc_unlikely -# define __glibc_unlikely(expr) __builtin_expect (expr, 0) -#endif - #ifndef _LIBC /* The results of opendir() in this file are not used with dirfd and fchdir, and we do not leak fds to any single-threaded code that could use stdio, @@ -250,18 +197,37 @@ ((void) (buf), (void) (len), (void) (newlen), (void) (avar), (void *) 0) #endif -#ifndef __has_builtin -# define __has_builtin(x) 0 +static int +glob_lstat (glob_t *pglob, int flags, const char *fullname) +{ +/* Use on glob-lstat-compat.c to provide a compat symbol which does not + use lstat / gl_lstat. */ +#ifdef GLOB_NO_LSTAT +# define GL_LSTAT gl_stat +# define LSTAT64 __stat64 +#else +# define GL_LSTAT gl_lstat +# define LSTAT64 __lstat64 #endif + union + { + struct stat st; + struct_stat64 st64; + } ust; + return (__glibc_unlikely (flags & GLOB_ALTDIRFUNC) + ? pglob->GL_LSTAT (fullname, &ust.st) + : LSTAT64 (fullname, &ust.st64)); +} + /* Set *R = A + B. Return true if the answer is mathematically incorrect due to overflow; in this case, *R is the low order - bits of the correct answer.. */ + bits of the correct answer. */ static bool size_add_wrapv (size_t a, size_t b, size_t *r) { -#if 5 <= __GNUC__ || __has_builtin (__builtin_add_overflow) +#if 5 <= __GNUC__ && !defined __ICC return __builtin_add_overflow (a, b, r); #else *r = a + b; @@ -280,14 +246,22 @@ static int glob_in_dir (const char *pattern, const char *directory, int flags, int (*errfunc) (const char *, int), glob_t *pglob, size_t alloca_used); -extern int __glob_pattern_type (const char *pattern, int quote) - attribute_hidden; - -#ifndef GLOB_ONLY_P static int prefix_array (const char *prefix, char **array, size_t n) __THROWNL; static int collated_compare (const void *, const void *) __THROWNL; +/* Return true if FILENAME is a directory or a symbolic link to a directory. + Use FLAGS and PGLOB to resolve the filename. */ +static bool +is_dir (char const *filename, int flags, glob_t const *pglob) +{ + struct stat st; + struct_stat64 st64; + return (__glibc_unlikely (flags & GLOB_ALTDIRFUNC) + ? pglob->gl_stat (filename, &st) == 0 && S_ISDIR (st.st_mode) + : __stat64 (filename, &st64) == 0 && S_ISDIR (st64.st_mode)); +} + /* Find the end of the sub-pattern in a brace expression. */ static const char * next_brace_sub (const char *cp, int flags) @@ -312,7 +286,9 @@ return *cp != '\0' ? cp : NULL; } -#endif /* !defined GLOB_ONLY_P */ +#ifndef GLOB_ATTRIBUTE +# define GLOB_ATTRIBUTE +#endif /* Do glob searching for PATTERN, placing results in PGLOB. The bits defined above may be set in FLAGS. @@ -323,11 +299,9 @@ If memory cannot be allocated for PGLOB, GLOB_NOSPACE is returned. Otherwise, 'glob' returns zero. */ int -#ifdef GLOB_ATTRIBUTE GLOB_ATTRIBUTE -#endif -glob (const char *pattern, int flags, int (*errfunc) (const char *, int), - glob_t *pglob) +__glob (const char *pattern, int flags, int (*errfunc) (const char *, int), + glob_t *pglob) { const char *filename; char *dirname = NULL; @@ -357,6 +331,28 @@ also makes all the code that uses gl_offs simpler. */ pglob->gl_offs = 0; + if (!(flags & GLOB_APPEND)) + { + pglob->gl_pathc = 0; + if (!(flags & GLOB_DOOFFS)) + pglob->gl_pathv = NULL; + else + { + size_t i; + + if (pglob->gl_offs >= ~((size_t) 0) / sizeof (char *)) + return GLOB_NOSPACE; + + pglob->gl_pathv = (char **) malloc ((pglob->gl_offs + 1) + * sizeof (char *)); + if (pglob->gl_pathv == NULL) + return GLOB_NOSPACE; + + for (i = 0; i <= pglob->gl_offs; ++i) + pglob->gl_pathv[i] = NULL; + } + } + if (flags & GLOB_BRACE) { const char *begin; @@ -386,7 +382,7 @@ if (begin != NULL) { /* Allocate working buffer large enough for our work. Note that - we have at least an opening and closing brace. */ + we have at least an opening and closing brace. */ size_t firstc; char *alt_start; const char *p; @@ -402,14 +398,7 @@ { onealt = malloc (pattern_len); if (onealt == NULL) - { - if (!(flags & GLOB_APPEND)) - { - pglob->gl_pathc = 0; - pglob->gl_pathv = NULL; - } - return GLOB_NOSPACE; - } + return GLOB_NOSPACE; } /* We know the prefix for all sub-patterns. */ @@ -424,7 +413,8 @@ illegal_brace: if (__glibc_unlikely (!alloca_onealt)) free (onealt); - return glob (pattern, flags & ~GLOB_BRACE, errfunc, pglob); + flags &= ~GLOB_BRACE; + goto no_brace; } /* Now find the end of the whole brace expression. */ @@ -445,14 +435,6 @@ points past the final }. We will accumulate result names from recursive runs for each brace alternative in the buffer using GLOB_APPEND. */ - - if (!(flags & GLOB_APPEND)) - { - /* This call is to set a new vector, so clear out the - vector so we can append to it. */ - pglob->gl_pathc = 0; - pglob->gl_pathv = NULL; - } firstc = pglob->gl_pathc; p = begin + 1; @@ -463,9 +445,10 @@ /* Construct the new glob expression. */ mempcpy (mempcpy (alt_start, p, next - p), rest, rest_len); - result = glob (onealt, - ((flags & ~(GLOB_NOCHECK | GLOB_NOMAGIC)) - | GLOB_APPEND), errfunc, pglob); + result = __glob (onealt, + ((flags & ~(GLOB_NOCHECK | GLOB_NOMAGIC)) + | GLOB_APPEND), + errfunc, pglob); /* If we got an error, return it. */ if (result && result != GLOB_NOMATCH) @@ -500,31 +483,12 @@ } } - if (!(flags & GLOB_APPEND)) - { - pglob->gl_pathc = 0; - if (!(flags & GLOB_DOOFFS)) - pglob->gl_pathv = NULL; - else - { - size_t i; - - if (pglob->gl_offs >= SIZE_MAX / sizeof (char *)) - return GLOB_NOSPACE; - - pglob->gl_pathv = malloc ((pglob->gl_offs + 1) * sizeof (char *)); - if (pglob->gl_pathv == NULL) - return GLOB_NOSPACE; - - for (i = 0; i <= pglob->gl_offs; ++i) - pglob->gl_pathv[i] = NULL; - } - } - + no_brace: oldcount = pglob->gl_pathc + pglob->gl_offs; /* Find the filename. */ filename = strrchr (pattern, '/'); + #if defined __MSDOS__ || defined WINDOWS32 /* The case of "d:pattern". Since ':' is not allowed in file names, we can safely assume that wherever it @@ -533,6 +497,7 @@ if (filename == NULL) filename = strchr (pattern, ':'); #endif /* __MSDOS__ || WINDOWS32 */ + dirname_modified = 0; if (filename == NULL) { @@ -557,11 +522,7 @@ } filename = pattern; -#ifdef _AMIGA - dirname = (char *) ""; -#else dirname = (char *) "."; -#endif dirlen = 0; } } @@ -596,6 +557,7 @@ from "d:/", since "d:" and "d:/" are not the same.*/ } #endif + if (glob_use_alloca (alloca_used, dirlen + 1)) newp = alloca_account (dirlen + 1, alloca_used); else @@ -609,17 +571,19 @@ dirname = newp; ++filename; - if (filename[0] == '\0' #if defined __MSDOS__ || defined WINDOWS32 - && dirname[dirlen - 1] != ':' - && (dirlen < 3 || dirname[dirlen - 2] != ':' - || dirname[dirlen - 1] != '/') + bool drive_root = (dirlen > 1 + && (dirname[dirlen - 1] == ':' + || (dirlen > 2 && dirname[dirlen - 2] == ':' + && dirname[dirlen - 1] == '/'))); +#else + bool drive_root = false; #endif - && dirlen > 1) + + if (filename[0] == '\0' && dirlen > 1 && !drive_root) /* "pattern/". Expand "pattern", appending slashes. */ { int orig_flags = flags; - int val; if (!(flags & GLOB_NOESCAPE) && dirname[dirlen - 1] == '\\') { /* "pattern\\/". Remove the final backslash if it hasn't @@ -633,7 +597,7 @@ flags &= ~(GLOB_NOCHECK | GLOB_NOMAGIC); } } - val = glob (dirname, flags | GLOB_MARK, errfunc, pglob); + int val = __glob (dirname, flags | GLOB_MARK, errfunc, pglob); if (val == 0) pglob->gl_flags = ((pglob->gl_flags & ~GLOB_MARK) | (flags & GLOB_MARK)); @@ -659,15 +623,11 @@ /* Look up home directory. */ char *home_dir = getenv ("HOME"); int malloc_home_dir = 0; -# ifdef _AMIGA - if (home_dir == NULL || home_dir[0] == '\0') - home_dir = "SYS:"; -# else -# ifdef WINDOWS32 - /* Windows NT defines HOMEDRIVE and HOMEPATH. But give preference - to HOME, because the user can change HOME. */ if (home_dir == NULL || home_dir[0] == '\0') { +#ifdef WINDOWS32 + /* Windows NT defines HOMEDRIVE and HOMEPATH. But give + preference to HOME, because the user can change HOME. */ const char *home_drive = getenv ("HOMEDRIVE"); const char *home_path = getenv ("HOMEPATH"); @@ -683,133 +643,49 @@ } else home_dir = "c:/users/default"; /* poor default */ - } -# else - if (home_dir == NULL || home_dir[0] == '\0') - { - int success; - char *name; - int malloc_name = 0; - size_t buflen = GET_LOGIN_NAME_MAX () + 1; - - if (buflen == 0) - /* 'sysconf' does not support _SC_LOGIN_NAME_MAX. Try - a moderate value. */ - buflen = 20; - if (glob_use_alloca (alloca_used, buflen)) - name = alloca_account (buflen, alloca_used); - else - { - name = malloc (buflen); - if (name == NULL) +#else + int err; + struct passwd *p; + struct passwd pwbuf; + struct scratch_buffer s; + scratch_buffer_init (&s); + while (true) + { + p = NULL; + err = __getlogin_r (s.data, s.length); + if (err == 0) + { +# if defined HAVE_GETPWNAM_R || defined _LIBC + size_t ssize = strlen (s.data) + 1; + char *sdata = s.data; + err = getpwnam_r (sdata, &pwbuf, sdata + ssize, + s.length - ssize, &p); +# else + p = getpwnam (s.data); + if (p == NULL) + err = errno; +# endif + } + if (err != ERANGE) + break; + if (!scratch_buffer_grow (&s)) { retval = GLOB_NOSPACE; goto out; } - malloc_name = 1; } - - success = __getlogin_r (name, buflen) == 0; - if (success) + if (err == 0) { - struct passwd *p; -# if defined HAVE_GETPWNAM_R || defined _LIBC - long int pwbuflenmax = GETPW_R_SIZE_MAX (); - size_t pwbuflen = pwbuflenmax; - char *pwtmpbuf; - struct passwd pwbuf; - char *malloc_pwtmpbuf = NULL; - int save = errno; - -# ifndef _LIBC - if (! (0 < pwbuflenmax && pwbuflenmax <= SIZE_MAX)) - /* Perhaps 'sysconf' does not support _SC_GETPW_R_SIZE_MAX. - Try a moderate value. */ - pwbuflen = 1024; -# endif - if (glob_use_alloca (alloca_used, pwbuflen)) - pwtmpbuf = alloca_account (pwbuflen, alloca_used); - else - { - pwtmpbuf = malloc (pwbuflen); - if (pwtmpbuf == NULL) - { - if (__glibc_unlikely (malloc_name)) - free (name); - retval = GLOB_NOSPACE; - goto out; - } - malloc_pwtmpbuf = pwtmpbuf; - } - - while (getpwnam_r (name, &pwbuf, pwtmpbuf, pwbuflen, &p) - != 0) - { - size_t newlen; - bool v; - if (errno != ERANGE) - { - p = NULL; - break; - } - v = size_add_wrapv (pwbuflen, pwbuflen, &newlen); - if (!v && malloc_pwtmpbuf == NULL - && glob_use_alloca (alloca_used, newlen)) - pwtmpbuf = extend_alloca_account (pwtmpbuf, pwbuflen, - newlen, alloca_used); - else - { - char *newp = (v ? NULL - : realloc (malloc_pwtmpbuf, newlen)); - if (newp == NULL) - { - free (malloc_pwtmpbuf); - if (__glibc_unlikely (malloc_name)) - free (name); - retval = GLOB_NOSPACE; - goto out; - } - malloc_pwtmpbuf = pwtmpbuf = newp; - } - pwbuflen = newlen; - __set_errno (save); - } -# else - p = getpwnam (name); -# endif - if (__glibc_unlikely (malloc_name)) - free (name); - if (p != NULL) - { - if (malloc_pwtmpbuf == NULL) - home_dir = p->pw_dir; - else - { - size_t home_dir_len = strlen (p->pw_dir) + 1; - if (glob_use_alloca (alloca_used, home_dir_len)) - home_dir = alloca_account (home_dir_len, - alloca_used); - else - { - home_dir = malloc (home_dir_len); - if (home_dir == NULL) - { - free (pwtmpbuf); - retval = GLOB_NOSPACE; - goto out; - } - malloc_home_dir = 1; - } - memcpy (home_dir, p->pw_dir, home_dir_len); - } - } - free (malloc_pwtmpbuf); + home_dir = strdup (p->pw_dir); + malloc_home_dir = 1; } - else + scratch_buffer_free (&s); + if (err == 0 && home_dir == NULL) { - if (__glibc_unlikely (malloc_name)) - free (name); + retval = GLOB_NOSPACE; + goto out; } +#endif /* WINDOWS32 */ } if (home_dir == NULL || home_dir[0] == '\0') { @@ -826,8 +702,6 @@ malloc_home_dir = 0; } } -# endif /* WINDOWS32 */ -# endif /* Now construct the full directory. */ if (dirname[1] == '\0') { @@ -872,9 +746,9 @@ } dirname_modified = 1; } -# if !defined _AMIGA && !defined WINDOWS32 else { +#ifndef WINDOWS32 char *end_name = strchr (dirname, '/'); char *user_name; int malloc_user_name = 0; @@ -913,11 +787,11 @@ char *p = mempcpy (newp, dirname + 1, unescape - dirname - 1); char *q = unescape; - while (*q != '\0') + while (q != end_name) { if (*q == '\\') { - if (q[1] == '\0') + if (q + 1 == end_name) { /* "~fo\\o\\" unescape to user_name "foo\\", but "~fo\\o\\/" unescape to user_name @@ -933,7 +807,7 @@ *p = '\0'; } else - *((char *) mempcpy (newp, dirname + 1, end_name - dirname)) + *((char *) mempcpy (newp, dirname + 1, end_name - dirname - 1)) = '\0'; user_name = newp; } @@ -941,61 +815,21 @@ /* Look up specific user's home directory. */ { struct passwd *p; + struct scratch_buffer pwtmpbuf; + scratch_buffer_init (&pwtmpbuf); + # if defined HAVE_GETPWNAM_R || defined _LIBC - long int buflenmax = GETPW_R_SIZE_MAX (); - size_t buflen = buflenmax; - char *pwtmpbuf; - char *malloc_pwtmpbuf = NULL; struct passwd pwbuf; - int save = errno; -# ifndef _LIBC - if (! (0 <= buflenmax && buflenmax <= SIZE_MAX)) - /* Perhaps 'sysconf' does not support _SC_GETPW_R_SIZE_MAX. Try a - moderate value. */ - buflen = 1024; -# endif - if (glob_use_alloca (alloca_used, buflen)) - pwtmpbuf = alloca_account (buflen, alloca_used); - else + while (getpwnam_r (user_name, &pwbuf, + pwtmpbuf.data, pwtmpbuf.length, &p) + == ERANGE) { - pwtmpbuf = malloc (buflen); - if (pwtmpbuf == NULL) + if (!scratch_buffer_grow (&pwtmpbuf)) { - nomem_getpw: - if (__glibc_unlikely (malloc_user_name)) - free (user_name); retval = GLOB_NOSPACE; goto out; } - malloc_pwtmpbuf = pwtmpbuf; - } - - while (getpwnam_r (user_name, &pwbuf, pwtmpbuf, buflen, &p) != 0) - { - size_t newlen; - bool v; - if (errno != ERANGE) - { - p = NULL; - break; - } - v = size_add_wrapv (buflen, buflen, &newlen); - if (!v && malloc_pwtmpbuf == NULL - && glob_use_alloca (alloca_used, newlen)) - pwtmpbuf = extend_alloca_account (pwtmpbuf, buflen, - newlen, alloca_used); - else - { - char *newp = v ? NULL : realloc (malloc_pwtmpbuf, newlen); - if (newp == NULL) - { - free (malloc_pwtmpbuf); - goto nomem_getpw; - } - malloc_pwtmpbuf = pwtmpbuf = newp; - } - __set_errno (save); } # else p = getpwnam (user_name); @@ -1009,9 +843,11 @@ { size_t home_len = strlen (p->pw_dir); size_t rest_len = end_name == NULL ? 0 : strlen (end_name); + /* dirname contains end_name; we can't free it now. */ + char *prev_dirname = + (__glibc_unlikely (malloc_dirname) ? dirname : NULL); + char *d; - if (__glibc_unlikely (malloc_dirname)) - free (dirname); malloc_dirname = 0; if (glob_use_alloca (alloca_used, home_len + rest_len + 1)) @@ -1022,24 +858,25 @@ dirname = malloc (home_len + rest_len + 1); if (dirname == NULL) { - free (malloc_pwtmpbuf); + free (prev_dirname); + scratch_buffer_free (&pwtmpbuf); retval = GLOB_NOSPACE; goto out; } malloc_dirname = 1; } - *((char *) mempcpy (mempcpy (dirname, p->pw_dir, home_len), - end_name, rest_len)) = '\0'; + d = mempcpy (dirname, p->pw_dir, home_len); + if (end_name != NULL) + d = mempcpy (d, end_name, rest_len); + *d = '\0'; + + free (prev_dirname); dirlen = home_len + rest_len; dirname_modified = 1; - - free (malloc_pwtmpbuf); } else { - free (malloc_pwtmpbuf); - if (flags & GLOB_TILDE_CHECK) { /* We have to regard it as an error if we cannot find the @@ -1048,77 +885,63 @@ goto out; } } + scratch_buffer_free (&pwtmpbuf); } +#endif /* !WINDOWS32 */ } -# endif /* Not Amiga && not WINDOWS32. */ } /* Now test whether we looked for "~" or "~NAME". In this case we can give the answer now. */ if (filename == NULL) { - struct stat st; - struct_stat64 st64; + size_t newcount = pglob->gl_pathc + pglob->gl_offs; + char **new_gl_pathv; - /* Return the directory if we don't check for error or if it exists. */ - if ((flags & GLOB_NOCHECK) - || (((__builtin_expect (flags & GLOB_ALTDIRFUNC, 0)) - ? ((*pglob->gl_stat) (dirname, &st) == 0 - && S_ISDIR (st.st_mode)) - : (__stat64 (dirname, &st64) == 0 && S_ISDIR (st64.st_mode))))) - { - size_t newcount = pglob->gl_pathc + pglob->gl_offs; - char **new_gl_pathv; - - if (newcount > SIZE_MAX / sizeof (char *) - 2) - { - nospace: - free (pglob->gl_pathv); - pglob->gl_pathv = NULL; - pglob->gl_pathc = 0; - retval = GLOB_NOSPACE; - goto out; - } + if (newcount > SIZE_MAX / sizeof (char *) - 2) + { + nospace: + free (pglob->gl_pathv); + pglob->gl_pathv = NULL; + pglob->gl_pathc = 0; + retval = GLOB_NOSPACE; + goto out; + } - new_gl_pathv = realloc (pglob->gl_pathv, - (newcount + 2) * sizeof (char *)); - if (new_gl_pathv == NULL) - goto nospace; - pglob->gl_pathv = new_gl_pathv; + new_gl_pathv = realloc (pglob->gl_pathv, + (newcount + 2) * sizeof (char *)); + if (new_gl_pathv == NULL) + goto nospace; + pglob->gl_pathv = new_gl_pathv; - if (flags & GLOB_MARK) + if (flags & GLOB_MARK && is_dir (dirname, flags, pglob)) + { + char *p; + pglob->gl_pathv[newcount] = malloc (dirlen + 2); + if (pglob->gl_pathv[newcount] == NULL) + goto nospace; + p = mempcpy (pglob->gl_pathv[newcount], dirname, dirlen); + p[0] = '/'; + p[1] = '\0'; + if (__glibc_unlikely (malloc_dirname)) + free (dirname); + } + else + { + if (__glibc_unlikely (malloc_dirname)) + pglob->gl_pathv[newcount] = dirname; + else { - char *p; - pglob->gl_pathv[newcount] = malloc (dirlen + 2); + pglob->gl_pathv[newcount] = strdup (dirname); if (pglob->gl_pathv[newcount] == NULL) goto nospace; - p = mempcpy (pglob->gl_pathv[newcount], dirname, dirlen); - p[0] = '/'; - p[1] = '\0'; - if (__glibc_unlikely (malloc_dirname)) - free (dirname); } - else - { - if (__glibc_unlikely (malloc_dirname)) - pglob->gl_pathv[newcount] = dirname; - else - { - pglob->gl_pathv[newcount] = strdup (dirname); - if (pglob->gl_pathv[newcount] == NULL) - goto nospace; - } - } - pglob->gl_pathv[++newcount] = NULL; - ++pglob->gl_pathc; - pglob->gl_flags = flags; - - return 0; } + pglob->gl_pathv[++newcount] = NULL; + ++pglob->gl_pathc; + pglob->gl_flags = flags; - /* Not found. */ - retval = GLOB_NOMATCH; - goto out; + return 0; } meta = __glob_pattern_type (dirname, !(flags & GLOB_NOESCAPE)); @@ -1127,7 +950,7 @@ [ which we handle the same, using fnmatch. Broken unterminated pattern bracket expressions ought to be rare enough that it is not worth special casing them, fnmatch will do the right thing. */ - if (meta & 5) + if (meta & (GLOBPAT_SPECIAL | GLOBPAT_BRACKET)) { /* The directory name contains metacharacters, so we have to glob for the directory, and then glob for @@ -1156,11 +979,10 @@ dirs.gl_lstat = pglob->gl_lstat; } - status = glob (dirname, - ((flags & (GLOB_ERR | GLOB_NOESCAPE - | GLOB_ALTDIRFUNC)) - | GLOB_NOSORT | GLOB_ONLYDIR), - errfunc, &dirs); + status = __glob (dirname, + ((flags & (GLOB_ERR | GLOB_NOESCAPE | GLOB_ALTDIRFUNC)) + | GLOB_NOSORT | GLOB_ONLYDIR), + errfunc, &dirs); if (status != 0) { if ((flags & GLOB_NOCHECK) == 0 || status != GLOB_NOMATCH) @@ -1178,20 +1000,6 @@ { size_t old_pathc; -#ifdef SHELL - { - /* Make globbing interruptible in the bash shell. */ - extern int interrupt_state; - - if (interrupt_state) - { - globfree (&dirs); - retval = GLOB_ABORTED; - goto out; - } - } -#endif /* SHELL. */ - old_pathc = pglob->gl_pathc; status = glob_in_dir (filename, dirs.gl_pathv[i], ((flags | GLOB_APPEND) @@ -1282,7 +1090,7 @@ size_t old_pathc = pglob->gl_pathc; int orig_flags = flags; - if (meta & 2) + if (meta & GLOBPAT_BACKSLASH) { char *p = strchr (dirname, '\\'), *q; /* We need to unescape the dirname string. It is certainly @@ -1340,15 +1148,9 @@ { /* Append slashes to directory names. */ size_t i; - struct stat st; - struct_stat64 st64; for (i = oldcount; i < pglob->gl_pathc + pglob->gl_offs; ++i) - if ((__builtin_expect (flags & GLOB_ALTDIRFUNC, 0) - ? ((*pglob->gl_stat) (pglob->gl_pathv[i], &st) == 0 - && S_ISDIR (st.st_mode)) - : (__stat64 (pglob->gl_pathv[i], &st64) == 0 - && S_ISDIR (st64.st_mode)))) + if (is_dir (pglob->gl_pathv[i], flags, pglob)) { size_t len = strlen (pglob->gl_pathv[i]) + 2; char *new = realloc (pglob->gl_pathv[i], len); @@ -1378,28 +1180,9 @@ return retval; } -#if defined _LIBC && !defined glob -libc_hidden_def (glob) -#endif - - -#ifndef GLOB_ONLY_P - -/* Free storage allocated in PGLOB by a previous 'glob' call. */ -void -globfree (glob_t *pglob) -{ - if (pglob->gl_pathv != NULL) - { - size_t i; - for (i = 0; i < pglob->gl_pathc; ++i) - free (pglob->gl_pathv[pglob->gl_offs + i]); - free (pglob->gl_pathv); - pglob->gl_pathv = NULL; - } -} -#if defined _LIBC && !defined globfree -libc_hidden_def (globfree) +#if defined _LIBC && !defined __glob +versioned_symbol (libc, __glob, glob, GLIBC_2_27); +libc_hidden_ver (__glob, glob) #endif @@ -1429,19 +1212,15 @@ { size_t i; size_t dirlen = strlen (dirname); -#if defined __MSDOS__ || defined WINDOWS32 - int sep_char = '/'; -# define DIRSEP_CHAR sep_char -#else -# define DIRSEP_CHAR '/' -#endif + char dirsep_char = '/'; if (dirlen == 1 && dirname[0] == '/') /* DIRNAME is just "/", so normal prepending would get us "//foo". We want "/foo" instead, so don't prepend any chars from DIRNAME. */ dirlen = 0; + #if defined __MSDOS__ || defined WINDOWS32 - else if (dirlen > 1) + if (dirlen > 1) { if (dirname[dirlen - 1] == '/' && dirname[dirlen - 2] == ':') /* DIRNAME is "d:/". Don't prepend the slash from DIRNAME. */ @@ -1450,7 +1229,7 @@ { /* DIRNAME is "d:". Use ':' instead of '/'. */ --dirlen; - sep_char = ':'; + dirsep_char = ':'; } } #endif @@ -1468,7 +1247,7 @@ { char *endp = mempcpy (new, dirname, dirlen); - *endp++ = DIRSEP_CHAR; + *endp++ = dirsep_char; mempcpy (endp, array[i], eltlen); } free (array[i]); @@ -1478,107 +1257,6 @@ return 0; } - -/* We must not compile this function twice. */ -#ifndef NO_GLOB_PATTERN_P -int -__glob_pattern_type (const char *pattern, int quote) -{ - const char *p; - int ret = 0; - - for (p = pattern; *p != '\0'; ++p) - switch (*p) - { - case '?': - case '*': - return 1; - - case '\\': - if (quote) - { - if (p[1] != '\0') - ++p; - ret |= 2; - } - break; - - case '[': - ret |= 4; - break; - - case ']': - if (ret & 4) - return 1; - break; - } - - return ret; -} - -/* Return nonzero if PATTERN contains any metacharacters. - Metacharacters can be quoted with backslashes if QUOTE is nonzero. */ -int -__glob_pattern_p (const char *pattern, int quote) -{ - return __glob_pattern_type (pattern, quote) == 1; -} -# ifdef _LIBC -weak_alias (__glob_pattern_p, glob_pattern_p) -# endif -#endif - - -/* We put this in a separate function mainly to allow the memory - allocated with alloca to be recycled. */ -static int -__attribute_noinline__ -link_exists2_p (const char *dir, size_t dirlen, const char *fname, - glob_t *pglob -# if !defined _LIBC && !HAVE_FSTATAT - , int flags -# endif - ) -{ - size_t fnamelen = strlen (fname); - char *fullname = __alloca (dirlen + 1 + fnamelen + 1); - struct stat st; - - mempcpy (mempcpy (mempcpy (fullname, dir, dirlen), "/", 1), - fname, fnamelen + 1); - -# if !defined _LIBC && !HAVE_FSTATAT - if (__builtin_expect ((flags & GLOB_ALTDIRFUNC) == 0, 1)) - { - struct_stat64 st64; - return __stat64 (fullname, &st64) == 0; - } -# endif - return (*pglob->gl_stat) (fullname, &st) == 0; -} - -/* Return true if DIR/FNAME exists. */ -static int -link_exists_p (int dfd, const char *dir, size_t dirlen, const char *fname, - glob_t *pglob, int flags) -{ -# if defined _LIBC || HAVE_FSTATAT - if (__builtin_expect (flags & GLOB_ALTDIRFUNC, 0)) - return link_exists2_p (dir, dirlen, fname, pglob); - else - { - /* dfd cannot be -1 here, because dirfd never returns -1 on - glibc, or on hosts that have fstatat. */ - struct_stat64 st64; - return __fxstatat64 (_STAT_VER, dfd, fname, &st64, 0) == 0; - } -# else - return link_exists2_p (dir, dirlen, fname, pglob, flags); -# endif -} -#endif /* !defined GLOB_ONLY_P */ - - /* Like 'glob', but PATTERN is a final pathname component, and matches are searched for in DIRECTORY. The GLOB_NOSORT bit in FLAGS is ignored. No sorting is ever done. @@ -1590,43 +1268,36 @@ { size_t dirlen = strlen (directory); void *stream = NULL; - struct globnames - { - struct globnames *next; - size_t count; - char *name[64]; - }; - struct globnames init_names; - struct globnames *names = &init_names; - struct globnames *names_alloca = &init_names; +# define GLOBNAMES_MEMBERS(nnames) \ + struct globnames *next; size_t count; char *name[nnames]; + struct globnames { GLOBNAMES_MEMBERS (FLEXIBLE_ARRAY_MEMBER) }; + struct { GLOBNAMES_MEMBERS (64) } init_names_buf; + struct globnames *init_names = (struct globnames *) &init_names_buf; + struct globnames *names = init_names; + struct globnames *names_alloca = init_names; size_t nfound = 0; size_t cur = 0; int meta; int save; int result; - alloca_used += sizeof (init_names); + alloca_used += sizeof init_names_buf; - init_names.next = NULL; - init_names.count = sizeof init_names.name / sizeof init_names.name[0]; + init_names->next = NULL; + init_names->count = ((sizeof init_names_buf + - offsetof (struct globnames, name)) + / sizeof init_names->name[0]); meta = __glob_pattern_type (pattern, !(flags & GLOB_NOESCAPE)); - if (meta == 0 && (flags & (GLOB_NOCHECK|GLOB_NOMAGIC))) + if (meta == GLOBPAT_NONE && (flags & (GLOB_NOCHECK|GLOB_NOMAGIC))) { /* We need not do any tests. The PATTERN contains no meta characters and we must not return an error therefore the result will always contain exactly one name. */ flags |= GLOB_NOCHECK; } - else if (meta == 0) + else if (meta == GLOBPAT_NONE) { - /* Since we use the normal file functions we can also use stat() - to verify the file is there. */ - union - { - struct stat st; - struct_stat64 st64; - } ust; size_t patlen = strlen (pattern); size_t fullsize; bool alloca_fullname @@ -1645,9 +1316,8 @@ mempcpy (mempcpy (mempcpy (fullname, directory, dirlen), "/", 1), pattern, patlen + 1); - if ((__builtin_expect (flags & GLOB_ALTDIRFUNC, 0) - ? (*pglob->gl_stat) (fullname, &ust.st) - : __stat64 (fullname, &ust.st64)) == 0) + if (glob_lstat (pglob, flags, fullname) == 0 + || errno == EOVERFLOW) /* We found this file to be existing. Now tell the rest of the function to copy this name into the result. */ flags |= GLOB_NOCHECK; @@ -1669,14 +1339,8 @@ } else { - int dfd = (__builtin_expect (flags & GLOB_ALTDIRFUNC, 0) - ? -1 : dirfd ((DIR *) stream)); int fnm_flags = ((!(flags & GLOB_PERIOD) ? FNM_PERIOD : 0) - | ((flags & GLOB_NOESCAPE) ? FNM_NOESCAPE : 0) -#if defined _AMIGA || defined VMS - | FNM_CASEFOLD -#endif - ); + | ((flags & GLOB_NOESCAPE) ? FNM_NOESCAPE : 0)); flags |= GLOB_MAGCHAR; while (1) @@ -1696,51 +1360,46 @@ } if (d.name == NULL) break; - if (d.skip_entry) - continue; /* If we shall match only directories use the information provided by the dirent call if possible. */ - if ((flags & GLOB_ONLYDIR) && !readdir_result_might_be_dir (d)) - continue; + if (flags & GLOB_ONLYDIR) + switch (readdir_result_type (d)) + { + case DT_DIR: case DT_LNK: case DT_UNKNOWN: break; + default: continue; + } if (fnmatch (pattern, d.name, fnm_flags) == 0) { - /* If the file we found is a symlink we have to - make sure the target file exists. */ - if (!readdir_result_might_be_symlink (d) - || link_exists_p (dfd, directory, dirlen, d.name, - pglob, flags)) + if (cur == names->count) { - if (cur == names->count) - { - struct globnames *newnames; - size_t count = names->count * 2; - size_t nameoff = offsetof (struct globnames, name); - size_t size = FLEXSIZEOF (struct globnames, name, - count * sizeof (char *)); - if ((SIZE_MAX - nameoff) / 2 / sizeof (char *) - < names->count) - goto memory_error; - if (glob_use_alloca (alloca_used, size)) - newnames = names_alloca - = alloca_account (size, alloca_used); - else if ((newnames = malloc (size)) - == NULL) - goto memory_error; - newnames->count = count; - newnames->next = names; - names = newnames; - cur = 0; - } - names->name[cur] = strdup (d.name); - if (names->name[cur] == NULL) + struct globnames *newnames; + size_t count = names->count * 2; + size_t nameoff = offsetof (struct globnames, name); + size_t size = FLEXSIZEOF (struct globnames, name, + count * sizeof (char *)); + if ((SIZE_MAX - nameoff) / 2 / sizeof (char *) + < names->count) goto memory_error; - ++cur; - ++nfound; - if (SIZE_MAX - pglob->gl_offs <= nfound) + if (glob_use_alloca (alloca_used, size)) + newnames = names_alloca + = alloca_account (size, alloca_used); + else if ((newnames = malloc (size)) + == NULL) goto memory_error; + newnames->count = count; + newnames->next = names; + names = newnames; + cur = 0; } + names->name[cur] = strdup (d.name); + if (names->name[cur] == NULL) + goto memory_error; + ++cur; + ++nfound; + if (SIZE_MAX - pglob->gl_offs <= nfound) + goto memory_error; } } } @@ -1769,7 +1428,7 @@ new_gl_pathv = realloc (pglob->gl_pathv, (pglob->gl_pathc + pglob->gl_offs + nfound + 1) - * sizeof (char *)); + * sizeof (char *)); if (new_gl_pathv == NULL) { @@ -1777,8 +1436,7 @@ while (1) { struct globnames *old = names; - size_t i; - for (i = 0; i < cur; ++i) + for (size_t i = 0; i < cur; ++i) free (names->name[i]); names = names->next; /* NB: we will not leak memory here if we exit without @@ -1787,7 +1445,7 @@ and this is the block assigned to OLD here. */ if (names == NULL) { - assert (old == &init_names); + assert (old == init_names); break; } cur = names->count; @@ -1803,8 +1461,7 @@ while (1) { struct globnames *old = names; - size_t i; - for (i = 0; i < cur; ++i) + for (size_t i = 0; i < cur; ++i) new_gl_pathv[pglob->gl_offs + pglob->gl_pathc++] = names->name[i]; names = names->next; @@ -1814,7 +1471,7 @@ and this is the block assigned to OLD here. */ if (names == NULL) { - assert (old == &init_names); + assert (old == init_names); break; } cur = names->count; diff -Nru gdb-9.1/gnulib/import/globfree.c gdb-10.2/gnulib/import/globfree.c --- gdb-9.1/gnulib/import/globfree.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/globfree.c 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,41 @@ +/* Frees the dynamically allocated storage from an earlier call to glob. + Copyright (C) 2017-2020 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 3 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#ifndef _LIBC +# include <libc-config.h> +#endif + +#include <glob.h> +#include <stdlib.h> + +/* Free storage allocated in PGLOB by a previous `glob' call. */ +void +globfree (glob_t *pglob) +{ + if (pglob->gl_pathv != NULL) + { + size_t i; + for (i = 0; i < pglob->gl_pathc; ++i) + free (pglob->gl_pathv[pglob->gl_offs + i]); + free (pglob->gl_pathv); + pglob->gl_pathv = NULL; + } +} +#ifndef globfree +libc_hidden_def (globfree) +#endif diff -Nru gdb-9.1/gnulib/import/glob.in.h gdb-10.2/gnulib/import/glob.in.h --- gdb-9.1/gnulib/import/glob.in.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/glob.in.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* glob.h -- Find a path matching a pattern. - Copyright (C) 2005-2007, 2009-2016 Free Software Foundation, Inc. + Copyright (C) 2005-2007, 2009-2020 Free Software Foundation, Inc. Written by Derek Price <derek@ximbiot.com> & Paul Eggert <eggert@CS.UCLA.EDU> @@ -15,79 +15,167 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, see <http://www.gnu.org/licenses/>. */ + along with this program; if not, see <https://www.gnu.org/licenses/>. */ -#ifndef _GL_GLOB_H -#define _GL_GLOB_H +#ifndef _@GUARD_PREFIX@_GLOB_H -#if @HAVE_SYS_CDEFS_H@ -# include <sys/cdefs.h> +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ #endif +@PRAGMA_COLUMNS@ -#include <stddef.h> +/* The include_next requires a split double-inclusion guard. */ +#if @HAVE_GLOB_H@ && !@REPLACE_GLOB@ +# @INCLUDE_NEXT@ @NEXT_GLOB_H@ +#endif -/* On some systems, such as AIX 5.1, <sys/stat.h> does a "#define stat stat64". - Make sure this definition is seen before glob-libc.h defines types that - rely on 'struct stat'. */ -#include <sys/stat.h> +#ifndef _@GUARD_PREFIX@_GLOB_H +#define _@GUARD_PREFIX@_GLOB_H + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ + +/* The definition of _GL_ARG_NONNULL is copied here. */ -#ifndef __BEGIN_DECLS -# ifdef __cplusplus -# define __BEGIN_DECLS extern "C" { -# define __END_DECLS } +/* The definition of _GL_WARN_ON_USE is copied here. */ + +/* For plain 'restrict', use glibc's __restrict if defined. + Otherwise, GCC 2.95 and later have "__restrict"; C99 compilers have + "restrict", and "configure" may have defined "restrict". + Other compilers use __restrict, __restrict__, and _Restrict, and + 'configure' might #define 'restrict' to those words, so pick a + different name. */ +#ifndef _Restrict_ +# if defined __restrict || 2 < __GNUC__ + (95 <= __GNUC_MINOR__) +# define _Restrict_ __restrict +# elif 199901L <= __STDC_VERSION__ || defined restrict +# define _Restrict_ restrict # else -# define __BEGIN_DECLS -# define __END_DECLS +# define _Restrict_ # endif #endif -#ifndef __THROW -# define __THROW + +#ifdef __cplusplus +extern "C" { #endif -#ifndef __THROWNL -# define __THROWNL +typedef int (*_gl_glob_errfunc_fn) (const char *, int); +#ifdef __cplusplus +} #endif -/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ -/* The definition of _GL_ARG_NONNULL is copied here. */ +#if !@HAVE_GLOB_H@ || @REPLACE_GLOB@ -/* The definition of _GL_WARN_ON_USE is copied here. */ -#ifndef __size_t -# define __size_t size_t -#endif -#ifndef __USE_GNU -# define __USE_GNU 1 -#endif +/* Preparations for including the standard GNU C Library header. */ + +# include <libc-config.h> + +# include <stddef.h> + +/* On some systems, such as AIX 5.1, <sys/stat.h> does a "#define stat stat64". + Make sure this definition is seen before glob-libc.h defines types that + rely on 'struct stat'. */ +# include <sys/stat.h> +# ifndef __USE_GNU +# define __USE_GNU 1 +# endif -#define glob rpl_glob -#define globfree rpl_globfree -#define glob_pattern_p rpl_glob_pattern_p +# if @REPLACE_GLOB@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define glob rpl_glob +# define globfree rpl_globfree +# endif +# endif +# if @REPLACE_GLOB_PATTERN_P@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define glob_pattern_p rpl_glob_pattern_p +# endif +# endif +# define __glob_pattern_p glob_pattern_p + +# define __GLOB_GNULIB 1 -#define __GLOB_GNULIB 1 /* Now the standard GNU C Library header should work. */ -#include "glob-libc.h" +# include "glob-libc.h" -__BEGIN_DECLS -typedef int (*_gl_glob_errfunc_fn) (const char *, int); -__END_DECLS -#if defined __cplusplus && defined GNULIB_NAMESPACE -# undef glob -# undef globfree -# undef glob_pattern_p +#endif + + +#if @GNULIB_GLOB@ +# if @REPLACE_GLOB@ +_GL_FUNCDECL_RPL (glob, int, (const char *_Restrict_ __pattern, int __flags, + _gl_glob_errfunc_fn __errfunc, + glob_t *_Restrict_ __pglob) + _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (glob, int, (const char *_Restrict_ __pattern, int __flags, _gl_glob_errfunc_fn __errfunc, glob_t *_Restrict_ __pglob)); -_GL_CXXALIAS_RPL (globfree, void, (glob_t *__pglob)); -_GL_CXXALIAS_RPL (glob_pattern_p, int, (const char *__pattern, int __quote)); -# if 0 /* The C function name is rpl_glob, not glob. */ +# else +# if !@HAVE_GLOB@ +_GL_FUNCDECL_SYS (glob, int, (const char *_Restrict_ __pattern, int __flags, + _gl_glob_errfunc_fn __errfunc, + glob_t *_Restrict_ __pglob) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (glob, int, (const char *_Restrict_ __pattern, int __flags, + _gl_glob_errfunc_fn __errfunc, + glob_t *_Restrict_ __pglob)); +# endif _GL_CXXALIASWARN (glob); +#elif defined GNULIB_POSIXCHECK +# undef glob +# if HAVE_RAW_DECL_GLOB +_GL_WARN_ON_USE (glob, + "glob is unportable - " + "use gnulib module glob for portability"); +# endif +#endif + +#if @GNULIB_GLOB@ +# if @REPLACE_GLOB@ +_GL_FUNCDECL_RPL (globfree, void, (glob_t *__pglob) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (globfree, void, (glob_t *__pglob)); +# else +# if !@HAVE_GLOB@ +_GL_FUNCDECL_SYS (globfree, void, (glob_t *__pglob) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (globfree, void, (glob_t *__pglob)); +# endif _GL_CXXALIASWARN (globfree); +#elif defined GNULIB_POSIXCHECK +# undef globfree +# if HAVE_RAW_DECL_GLOBFREE +_GL_WARN_ON_USE (globfree, + "globfree is unportable - " + "use gnulib module glob for portability"); +# endif +#endif + +#if @GNULIB_GLOB@ +# if @REPLACE_GLOB_PATTERN_P@ +_GL_FUNCDECL_RPL (glob_pattern_p, int, (const char *__pattern, int __quote) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (glob_pattern_p, int, (const char *__pattern, int __quote)); +# else +# if !@HAVE_GLOB_PATTERN_P@ +_GL_FUNCDECL_SYS (glob_pattern_p, int, (const char *__pattern, int __quote) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (glob_pattern_p, int, (const char *__pattern, int __quote)); +# endif _GL_CXXALIASWARN (glob_pattern_p); +#elif defined GNULIB_POSIXCHECK +# undef glob_pattern_p +# if HAVE_RAW_DECL_GLOB_PATTERN_P +_GL_WARN_ON_USE (glob_pattern_p, + "glob_pattern_p is unportable - " + "use gnulib module glob for portability"); # endif #endif -#endif /* _GL_GLOB_H */ + +#endif /* _@GUARD_PREFIX@_GLOB_H */ +#endif /* _@GUARD_PREFIX@_GLOB_H */ diff -Nru gdb-9.1/gnulib/import/glob_internal.h gdb-10.2/gnulib/import/glob_internal.h --- gdb-9.1/gnulib/import/glob_internal.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/glob_internal.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,65 @@ +/* Shared definition for glob and glob_pattern_p. + Copyright (C) 2017-2020 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 3 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#ifndef GLOB_INTERNAL_H +# define GLOB_INTERNAL_H + +enum +{ + GLOBPAT_NONE = 0x0, + GLOBPAT_SPECIAL = 0x1, + GLOBPAT_BACKSLASH = 0x2, + GLOBPAT_BRACKET = 0x4 +}; + +static inline int +__glob_pattern_type (const char *pattern, int quote) +{ + const char *p; + int ret = GLOBPAT_NONE; + + for (p = pattern; *p != '\0'; ++p) + switch (*p) + { + case '?': + case '*': + return GLOBPAT_SPECIAL; + + case '\\': + if (quote) + { + if (p[1] != '\0') + ++p; + ret |= GLOBPAT_BACKSLASH; + } + break; + + case '[': + ret |= GLOBPAT_BRACKET; + break; + + case ']': + if (ret & 4) + return GLOBPAT_SPECIAL; + break; + } + + return ret; +} + +#endif /* GLOB_INTERNAL_H */ diff -Nru gdb-9.1/gnulib/import/glob-libc.h gdb-10.2/gnulib/import/glob-libc.h --- gdb-9.1/gnulib/import/glob-libc.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/glob-libc.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,19 +1,19 @@ -/* Copyright (C) 1991-1992, 1995-1998, 2000-2001, 2004-2007, 2009-2016 Free - Software Foundation, Inc. +/* Copyright (C) 1991-2020 Free Software Foundation, Inc. This file is part of the GNU C Library. - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 3 of the License, or (at your option) any later version. - This program is distributed in the hope that it will be useful, + The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + You should have received a copy of the GNU General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ #ifndef _GLOB_H #define _GLOB_H 1 @@ -22,42 +22,10 @@ # include <sys/cdefs.h> #endif -/* GCC 2.95 and later have "__restrict"; C99 compilers have - "restrict", and "configure" may have defined "restrict". - Other compilers use __restrict, __restrict__, and _Restrict, and - 'configure' might #define 'restrict' to those words, so pick a - different name. */ -#ifndef _Restrict_ -# if 199901L <= __STDC_VERSION__ -# define _Restrict_ restrict -# elif 2 < __GNUC__ || (2 == __GNUC__ && 95 <= __GNUC_MINOR__) -# define _Restrict_ __restrict -# else -# define _Restrict_ -# endif -#endif - __BEGIN_DECLS -/* We need 'size_t' for the following definitions. */ -#ifndef __size_t -# if defined __GNUC__ && __GNUC__ >= 2 -typedef __SIZE_TYPE__ __size_t; -# ifdef __USE_XOPEN -typedef __SIZE_TYPE__ size_t; -# endif -# else -# include <stddef.h> -# ifndef __size_t -# define __size_t size_t -# endif -# endif -#else -/* The GNU CC stddef.h version defines __size_t as empty. We need a real - definition. */ -# undef __size_t -# define __size_t size_t -#endif +#define __need_size_t +#include <stddef.h> /* Bits set in the FLAGS argument to 'glob'. */ #define GLOB_ERR (1 << 0)/* Return on read errors. */ @@ -69,7 +37,7 @@ #define GLOB_NOESCAPE (1 << 6)/* Backslashes don't quote metacharacters. */ #define GLOB_PERIOD (1 << 7)/* Leading '.' can be matched by metachars. */ -#if !defined __USE_POSIX2 || defined __USE_BSD || defined __USE_GNU +#if !defined __USE_POSIX2 || defined __USE_MISC # define GLOB_MAGCHAR (1 << 8)/* Set in gl_flags if any metachars seen. */ # define GLOB_ALTDIRFUNC (1 << 9)/* Use gl_opendir et al functions. */ # define GLOB_BRACE (1 << 10)/* Expand "{a,b}" to "a" "b". */ @@ -105,9 +73,9 @@ #endif typedef struct { - __size_t gl_pathc; /* Count of paths matched by the pattern. */ + size_t gl_pathc; /* Count of paths matched by the pattern. */ char **gl_pathv; /* List of matched pathnames. */ - __size_t gl_offs; /* Slots to reserve in 'gl_pathv'. */ + size_t gl_offs; /* Slots to reserve in 'gl_pathv'. */ int gl_flags; /* Set to FLAGS, maybe | GLOB_MAGCHAR. */ /* If the GLOB_ALTDIRFUNC flag is set, the following functions @@ -120,23 +88,23 @@ #endif void *(*gl_opendir) (const char *); #ifdef __USE_GNU - int (*gl_lstat) (const char *_Restrict_, struct stat *_Restrict_); - int (*gl_stat) (const char *_Restrict_, struct stat *_Restrict_); + int (*gl_lstat) (const char *__restrict, struct stat *__restrict); + int (*gl_stat) (const char *__restrict, struct stat *__restrict); #else - int (*gl_lstat) (const char *_Restrict_, void *_Restrict_); - int (*gl_stat) (const char *_Restrict_, void *_Restrict_); + int (*gl_lstat) (const char *__restrict, void *__restrict); + int (*gl_stat) (const char *__restrict, void *__restrict); #endif } glob_t; -#if defined __USE_LARGEFILE64 && !defined __GLOB_GNULIB +#ifdef __USE_LARGEFILE64 # ifdef __USE_GNU struct stat64; # endif typedef struct { - __size_t gl_pathc; + size_t gl_pathc; char **gl_pathv; - __size_t gl_offs; + size_t gl_offs; int gl_flags; /* If the GLOB_ALTDIRFUNC flag is set, the following functions @@ -149,20 +117,15 @@ # endif void *(*gl_opendir) (const char *); # ifdef __USE_GNU - int (*gl_lstat) (const char *_Restrict_, struct stat64 *_Restrict_); - int (*gl_stat) (const char *_Restrict_, struct stat64 *_Restrict_); + int (*gl_lstat) (const char *__restrict, struct stat64 *__restrict); + int (*gl_stat) (const char *__restrict, struct stat64 *__restrict); # else - int (*gl_lstat) (const char *_Restrict_, void *_Restrict_); - int (*gl_stat) (const char *_Restrict_, void *_Restrict_); + int (*gl_lstat) (const char *__restrict, void *__restrict); + int (*gl_stat) (const char *__restrict, void *__restrict); # endif } glob64_t; #endif -#if __USE_FILE_OFFSET64 && __GNUC__ < 2 && !defined __GLOB_GNULIB -# define glob glob64 -# define globfree globfree64 -#endif - /* Do glob searching for PATTERN, placing results in PGLOB. The bits defined above may be set in FLAGS. If a directory cannot be opened or read and ERRFUNC is not nil, @@ -171,29 +134,28 @@ 'glob' returns GLOB_ABEND; if it returns zero, the error is ignored. If memory cannot be allocated for PGLOB, GLOB_NOSPACE is returned. Otherwise, 'glob' returns zero. */ -#if !defined __USE_FILE_OFFSET64 || __GNUC__ < 2 || defined __GLOB_GNULIB -extern int glob (const char *_Restrict_ __pattern, int __flags, +#if !defined __USE_FILE_OFFSET64 || defined __GLOB_GNULIB +extern int glob (const char *__restrict __pattern, int __flags, int (*__errfunc) (const char *, int), - glob_t *_Restrict_ __pglob) __THROW _GL_ARG_NONNULL ((1, 4)); + glob_t *__restrict __pglob) __THROW; /* Free storage allocated in PGLOB by a previous 'glob' call. */ -extern void globfree (glob_t *__pglob) __THROW _GL_ARG_NONNULL ((1)); +extern void globfree (glob_t *__pglob) __THROW; #else -extern int __REDIRECT_NTH (glob, (const char *_Restrict_ __pattern, +extern int __REDIRECT_NTH (glob, (const char *__restrict __pattern, int __flags, int (*__errfunc) (const char *, int), - glob_t *_Restrict_ __pglob), glob64); + glob_t *__restrict __pglob), glob64); extern void __REDIRECT_NTH (globfree, (glob_t *__pglob), globfree64); #endif -#if defined __USE_LARGEFILE64 && !defined __GLOB_GNULIB -extern int glob64 (const char *_Restrict_ __pattern, int __flags, +#ifdef __USE_LARGEFILE64 +extern int glob64 (const char *__restrict __pattern, int __flags, int (*__errfunc) (const char *, int), - glob64_t *_Restrict_ __pglob) - __THROW _GL_ARG_NONNULL ((1, 4)); + glob64_t *__restrict __pglob) __THROW; -extern void globfree64 (glob64_t *__pglob) __THROW _GL_ARG_NONNULL ((1)); +extern void globfree64 (glob64_t *__pglob) __THROW; #endif @@ -203,8 +165,7 @@ This function is not part of the interface specified by POSIX.2 but several programs want to use it. */ -extern int glob_pattern_p (const char *__pattern, int __quote) - __THROW _GL_ARG_NONNULL ((1)); +extern int glob_pattern_p (const char *__pattern, int __quote) __THROW; #endif __END_DECLS diff -Nru gdb-9.1/gnulib/import/glob_pattern_p.c gdb-10.2/gnulib/import/glob_pattern_p.c --- gdb-9.1/gnulib/import/glob_pattern_p.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/glob_pattern_p.c 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,33 @@ +/* Return nonzero if PATTERN contains any metacharacters. + Copyright (C) 2017-2020 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 3 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#ifndef _LIBC +# include <libc-config.h> +#endif + +#include <glob.h> +#include "glob_internal.h" + +/* Return nonzero if PATTERN contains any metacharacters. + Metacharacters can be quoted with backslashes if QUOTE is nonzero. */ +int +__glob_pattern_p (const char *pattern, int quote) +{ + return __glob_pattern_type (pattern, quote) == GLOBPAT_SPECIAL; +} +weak_alias (__glob_pattern_p, glob_pattern_p) diff -Nru gdb-9.1/gnulib/import/glthread/lock.c gdb-10.2/gnulib/import/glthread/lock.c --- gdb-9.1/gnulib/import/glthread/lock.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/glthread/lock.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Locking in multithreaded situations. - Copyright (C) 2005-2016 Free Software Foundation, Inc. + Copyright (C) 2005-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -12,11 +12,10 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, see <http://www.gnu.org/licenses/>. */ + along with this program; if not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2005. - Based on GCC's gthr-posix.h, gthr-posix95.h, gthr-solaris.h, - gthr-win32.h. */ + Based on GCC's gthr-posix.h, gthr-posix95.h. */ #include <config.h> @@ -24,15 +23,267 @@ /* ========================================================================= */ +#if USE_ISOC_THREADS || USE_ISOC_AND_POSIX_THREADS + +/* -------------------------- gl_lock_t datatype -------------------------- */ + +int +glthread_lock_init (gl_lock_t *lock) +{ + if (mtx_init (&lock->mutex, mtx_plain) != thrd_success) + return ENOMEM; + lock->init_needed = 0; + return 0; +} + +int +glthread_lock_lock (gl_lock_t *lock) +{ + if (lock->init_needed) + call_once (&lock->init_once, lock->init_func); + if (mtx_lock (&lock->mutex) != thrd_success) + return EAGAIN; + return 0; +} + +int +glthread_lock_unlock (gl_lock_t *lock) +{ + if (lock->init_needed) + call_once (&lock->init_once, lock->init_func); + if (mtx_unlock (&lock->mutex) != thrd_success) + return EINVAL; + return 0; +} + +int +glthread_lock_destroy (gl_lock_t *lock) +{ + if (lock->init_needed) + call_once (&lock->init_once, lock->init_func); + mtx_destroy (&lock->mutex); + return 0; +} + +/* ------------------------- gl_rwlock_t datatype ------------------------- */ + +int +glthread_rwlock_init (gl_rwlock_t *lock) +{ + if (mtx_init (&lock->lock, mtx_plain) != thrd_success + || cnd_init (&lock->waiting_readers) != thrd_success + || cnd_init (&lock->waiting_writers) != thrd_success) + return ENOMEM; + lock->waiting_writers_count = 0; + lock->runcount = 0; + lock->init_needed = 0; + return 0; +} + +int +glthread_rwlock_rdlock (gl_rwlock_t *lock) +{ + if (lock->init_needed) + call_once (&lock->init_once, lock->init_func); + if (mtx_lock (&lock->lock) != thrd_success) + return EAGAIN; + /* Test whether only readers are currently running, and whether the runcount + field will not overflow, and whether no writer is waiting. The latter + condition is because POSIX recommends that "write locks shall take + precedence over read locks", to avoid "writer starvation". */ + while (!(lock->runcount + 1 > 0 && lock->waiting_writers_count == 0)) + { + /* This thread has to wait for a while. Enqueue it among the + waiting_readers. */ + if (cnd_wait (&lock->waiting_readers, &lock->lock) != thrd_success) + { + mtx_unlock (&lock->lock); + return EINVAL; + } + } + lock->runcount++; + if (mtx_unlock (&lock->lock) != thrd_success) + return EINVAL; + return 0; +} + +int +glthread_rwlock_wrlock (gl_rwlock_t *lock) +{ + if (lock->init_needed) + call_once (&lock->init_once, lock->init_func); + if (mtx_lock (&lock->lock) != thrd_success) + return EAGAIN; + /* Test whether no readers or writers are currently running. */ + while (!(lock->runcount == 0)) + { + /* This thread has to wait for a while. Enqueue it among the + waiting_writers. */ + lock->waiting_writers_count++; + if (cnd_wait (&lock->waiting_writers, &lock->lock) != thrd_success) + { + lock->waiting_writers_count--; + mtx_unlock (&lock->lock); + return EINVAL; + } + lock->waiting_writers_count--; + } + lock->runcount--; /* runcount becomes -1 */ + if (mtx_unlock (&lock->lock) != thrd_success) + return EINVAL; + return 0; +} + +int +glthread_rwlock_unlock (gl_rwlock_t *lock) +{ + if (lock->init_needed) + call_once (&lock->init_once, lock->init_func); + if (mtx_lock (&lock->lock) != thrd_success) + return EAGAIN; + if (lock->runcount < 0) + { + /* Drop a writer lock. */ + if (!(lock->runcount == -1)) + { + mtx_unlock (&lock->lock); + return EINVAL; + } + lock->runcount = 0; + } + else + { + /* Drop a reader lock. */ + if (!(lock->runcount > 0)) + { + mtx_unlock (&lock->lock); + return EINVAL; + } + lock->runcount--; + } + if (lock->runcount == 0) + { + /* POSIX recommends that "write locks shall take precedence over read + locks", to avoid "writer starvation". */ + if (lock->waiting_writers_count > 0) + { + /* Wake up one of the waiting writers. */ + if (cnd_signal (&lock->waiting_writers) != thrd_success) + { + mtx_unlock (&lock->lock); + return EINVAL; + } + } + else + { + /* Wake up all waiting readers. */ + if (cnd_broadcast (&lock->waiting_readers) != thrd_success) + { + mtx_unlock (&lock->lock); + return EINVAL; + } + } + } + if (mtx_unlock (&lock->lock) != thrd_success) + return EINVAL; + return 0; +} + +int +glthread_rwlock_destroy (gl_rwlock_t *lock) +{ + if (lock->init_needed) + call_once (&lock->init_once, lock->init_func); + mtx_destroy (&lock->lock); + cnd_destroy (&lock->waiting_readers); + cnd_destroy (&lock->waiting_writers); + return 0; +} + +/* --------------------- gl_recursive_lock_t datatype --------------------- */ + +int +glthread_recursive_lock_init (gl_recursive_lock_t *lock) +{ + if (mtx_init (&lock->mutex, mtx_plain | mtx_recursive) != thrd_success) + return ENOMEM; + lock->init_needed = 0; + return 0; +} + +int +glthread_recursive_lock_lock (gl_recursive_lock_t *lock) +{ + if (lock->init_needed) + call_once (&lock->init_once, lock->init_func); + if (mtx_lock (&lock->mutex) != thrd_success) + return EAGAIN; + return 0; +} + +int +glthread_recursive_lock_unlock (gl_recursive_lock_t *lock) +{ + if (lock->init_needed) + call_once (&lock->init_once, lock->init_func); + if (mtx_unlock (&lock->mutex) != thrd_success) + return EINVAL; + return 0; +} + +int +glthread_recursive_lock_destroy (gl_recursive_lock_t *lock) +{ + if (lock->init_needed) + call_once (&lock->init_once, lock->init_func); + mtx_destroy (&lock->mutex); + return 0; +} + +/* -------------------------- gl_once_t datatype -------------------------- */ + +#endif + +/* ========================================================================= */ + #if USE_POSIX_THREADS /* -------------------------- gl_lock_t datatype -------------------------- */ /* ------------------------- gl_rwlock_t datatype ------------------------- */ -# if HAVE_PTHREAD_RWLOCK +# if HAVE_PTHREAD_RWLOCK && (HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER || (defined PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP && (__GNU_LIBRARY__ > 1))) + +# if defined PTHREAD_RWLOCK_INITIALIZER || defined PTHREAD_RWLOCK_INITIALIZER_NP -# if !defined PTHREAD_RWLOCK_INITIALIZER +# if !HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER + /* glibc with bug https://sourceware.org/bugzilla/show_bug.cgi?id=13701 */ + +int +glthread_rwlock_init_for_glibc (pthread_rwlock_t *lock) +{ + pthread_rwlockattr_t attributes; + int err; + + err = pthread_rwlockattr_init (&attributes); + if (err != 0) + return err; + /* Note: PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP is the only value that + causes the writer to be preferred. PTHREAD_RWLOCK_PREFER_WRITER_NP does not + do this; see + http://man7.org/linux/man-pages/man3/pthread_rwlockattr_setkind_np.3.html */ + err = pthread_rwlockattr_setkind_np (&attributes, + PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP); + if (err == 0) + err = pthread_rwlock_init(lock, &attributes); + /* pthread_rwlockattr_destroy always returns 0. It cannot influence the + return value. */ + pthread_rwlockattr_destroy (&attributes); + return err; +} + +# endif +# else int glthread_rwlock_init_multithreaded (gl_rwlock_t *lock) @@ -152,11 +403,9 @@ if (err != 0) return err; /* Test whether only readers are currently running, and whether the runcount - field will not overflow. */ - /* POSIX says: "It is implementation-defined whether the calling thread - acquires the lock when a writer does not hold the lock and there are - writers blocked on the lock." Let's say, no: give the writers a higher - priority. */ + field will not overflow, and whether no writer is waiting. The latter + condition is because POSIX recommends that "write locks shall take + precedence over read locks", to avoid "writer starvation". */ while (!(lock->runcount + 1 > 0 && lock->waiting_writers_count == 0)) { /* This thread has to wait for a while. Enqueue it among the @@ -469,161 +718,25 @@ return 0; } -#endif - -/* ========================================================================= */ - -#if USE_PTH_THREADS - -/* Use the GNU Pth threads library. */ - -/* -------------------------- gl_lock_t datatype -------------------------- */ - -/* ------------------------- gl_rwlock_t datatype ------------------------- */ - -/* --------------------- gl_recursive_lock_t datatype --------------------- */ - -/* -------------------------- gl_once_t datatype -------------------------- */ - -static void -glthread_once_call (void *arg) -{ - void (**gl_once_temp_addr) (void) = (void (**) (void)) arg; - void (*initfunction) (void) = *gl_once_temp_addr; - initfunction (); -} - -int -glthread_once_multithreaded (pth_once_t *once_control, void (*initfunction) (void)) -{ - void (*temp) (void) = initfunction; - return (!pth_once (once_control, glthread_once_call, &temp) ? errno : 0); -} - -int -glthread_once_singlethreaded (pth_once_t *once_control) -{ - /* We know that pth_once_t is an integer type. */ - if (*once_control == PTH_ONCE_INIT) - { - /* First time use of once_control. Invert the marker. */ - *once_control = ~ PTH_ONCE_INIT; - return 1; - } - else - return 0; -} - -#endif - -/* ========================================================================= */ - -#if USE_SOLARIS_THREADS - -/* Use the old Solaris threads library. */ - -/* -------------------------- gl_lock_t datatype -------------------------- */ - -/* ------------------------- gl_rwlock_t datatype ------------------------- */ - -/* --------------------- gl_recursive_lock_t datatype --------------------- */ +# if !(PTHREAD_IN_USE_DETECTION_HARD || USE_POSIX_THREADS_WEAK) int -glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock) +glthread_once_multithreaded (pthread_once_t *once_control, + void (*init_function) (void)) { - int err; - - err = mutex_init (&lock->mutex, USYNC_THREAD, NULL); - if (err != 0) - return err; - lock->owner = (thread_t) 0; - lock->depth = 0; - return 0; -} - -int -glthread_recursive_lock_lock_multithreaded (gl_recursive_lock_t *lock) -{ - thread_t self = thr_self (); - if (lock->owner != self) + int err = pthread_once (once_control, init_function); + if (err == ENOSYS) { - int err; - - err = mutex_lock (&lock->mutex); - if (err != 0) - return err; - lock->owner = self; + /* This happens on FreeBSD 11: The pthread_once function in libc returns + ENOSYS. */ + if (glthread_once_singlethreaded (once_control)) + init_function (); + return 0; } - if (++(lock->depth) == 0) /* wraparound? */ - { - lock->depth--; - return EAGAIN; - } - return 0; + return err; } -int -glthread_recursive_lock_unlock_multithreaded (gl_recursive_lock_t *lock) -{ - if (lock->owner != thr_self ()) - return EPERM; - if (lock->depth == 0) - return EINVAL; - if (--(lock->depth) == 0) - { - lock->owner = (thread_t) 0; - return mutex_unlock (&lock->mutex); - } - else - return 0; -} - -int -glthread_recursive_lock_destroy_multithreaded (gl_recursive_lock_t *lock) -{ - if (lock->owner != (thread_t) 0) - return EBUSY; - return mutex_destroy (&lock->mutex); -} - -/* -------------------------- gl_once_t datatype -------------------------- */ - -int -glthread_once_multithreaded (gl_once_t *once_control, void (*initfunction) (void)) -{ - if (!once_control->inited) - { - int err; - - /* Use the mutex to guarantee that if another thread is already calling - the initfunction, this thread waits until it's finished. */ - err = mutex_lock (&once_control->mutex); - if (err != 0) - return err; - if (!once_control->inited) - { - once_control->inited = 1; - initfunction (); - } - return mutex_unlock (&once_control->mutex); - } - else - return 0; -} - -int -glthread_once_singlethreaded (gl_once_t *once_control) -{ - /* We know that gl_once_t contains an integer type. */ - if (!once_control->inited) - { - /* First time use of once_control. Invert the marker. */ - once_control->inited = ~ 0; - return 1; - } - else - return 0; -} +# endif #endif @@ -631,427 +744,6 @@ #if USE_WINDOWS_THREADS -/* -------------------------- gl_lock_t datatype -------------------------- */ - -void -glthread_lock_init_func (gl_lock_t *lock) -{ - InitializeCriticalSection (&lock->lock); - lock->guard.done = 1; -} - -int -glthread_lock_lock_func (gl_lock_t *lock) -{ - if (!lock->guard.done) - { - if (InterlockedIncrement (&lock->guard.started) == 0) - /* This thread is the first one to need this lock. Initialize it. */ - glthread_lock_init (lock); - else - /* Yield the CPU while waiting for another thread to finish - initializing this lock. */ - while (!lock->guard.done) - Sleep (0); - } - EnterCriticalSection (&lock->lock); - return 0; -} - -int -glthread_lock_unlock_func (gl_lock_t *lock) -{ - if (!lock->guard.done) - return EINVAL; - LeaveCriticalSection (&lock->lock); - return 0; -} - -int -glthread_lock_destroy_func (gl_lock_t *lock) -{ - if (!lock->guard.done) - return EINVAL; - DeleteCriticalSection (&lock->lock); - lock->guard.done = 0; - return 0; -} - -/* ------------------------- gl_rwlock_t datatype ------------------------- */ - -/* In this file, the waitqueues are implemented as circular arrays. */ -#define gl_waitqueue_t gl_carray_waitqueue_t - -static void -gl_waitqueue_init (gl_waitqueue_t *wq) -{ - wq->array = NULL; - wq->count = 0; - wq->alloc = 0; - wq->offset = 0; -} - -/* Enqueues the current thread, represented by an event, in a wait queue. - Returns INVALID_HANDLE_VALUE if an allocation failure occurs. */ -static HANDLE -gl_waitqueue_add (gl_waitqueue_t *wq) -{ - HANDLE event; - unsigned int index; - - if (wq->count == wq->alloc) - { - unsigned int new_alloc = 2 * wq->alloc + 1; - HANDLE *new_array = - (HANDLE *) realloc (wq->array, new_alloc * sizeof (HANDLE)); - if (new_array == NULL) - /* No more memory. */ - return INVALID_HANDLE_VALUE; - /* Now is a good opportunity to rotate the array so that its contents - starts at offset 0. */ - if (wq->offset > 0) - { - unsigned int old_count = wq->count; - unsigned int old_alloc = wq->alloc; - unsigned int old_offset = wq->offset; - unsigned int i; - if (old_offset + old_count > old_alloc) - { - unsigned int limit = old_offset + old_count - old_alloc; - for (i = 0; i < limit; i++) - new_array[old_alloc + i] = new_array[i]; - } - for (i = 0; i < old_count; i++) - new_array[i] = new_array[old_offset + i]; - wq->offset = 0; - } - wq->array = new_array; - wq->alloc = new_alloc; - } - /* Whether the created event is a manual-reset one or an auto-reset one, - does not matter, since we will wait on it only once. */ - event = CreateEvent (NULL, TRUE, FALSE, NULL); - if (event == INVALID_HANDLE_VALUE) - /* No way to allocate an event. */ - return INVALID_HANDLE_VALUE; - index = wq->offset + wq->count; - if (index >= wq->alloc) - index -= wq->alloc; - wq->array[index] = event; - wq->count++; - return event; -} - -/* Notifies the first thread from a wait queue and dequeues it. */ -static void -gl_waitqueue_notify_first (gl_waitqueue_t *wq) -{ - SetEvent (wq->array[wq->offset + 0]); - wq->offset++; - wq->count--; - if (wq->count == 0 || wq->offset == wq->alloc) - wq->offset = 0; -} - -/* Notifies all threads from a wait queue and dequeues them all. */ -static void -gl_waitqueue_notify_all (gl_waitqueue_t *wq) -{ - unsigned int i; - - for (i = 0; i < wq->count; i++) - { - unsigned int index = wq->offset + i; - if (index >= wq->alloc) - index -= wq->alloc; - SetEvent (wq->array[index]); - } - wq->count = 0; - wq->offset = 0; -} - -void -glthread_rwlock_init_func (gl_rwlock_t *lock) -{ - InitializeCriticalSection (&lock->lock); - gl_waitqueue_init (&lock->waiting_readers); - gl_waitqueue_init (&lock->waiting_writers); - lock->runcount = 0; - lock->guard.done = 1; -} - -int -glthread_rwlock_rdlock_func (gl_rwlock_t *lock) -{ - if (!lock->guard.done) - { - if (InterlockedIncrement (&lock->guard.started) == 0) - /* This thread is the first one to need this lock. Initialize it. */ - glthread_rwlock_init (lock); - else - /* Yield the CPU while waiting for another thread to finish - initializing this lock. */ - while (!lock->guard.done) - Sleep (0); - } - EnterCriticalSection (&lock->lock); - /* Test whether only readers are currently running, and whether the runcount - field will not overflow. */ - if (!(lock->runcount + 1 > 0)) - { - /* This thread has to wait for a while. Enqueue it among the - waiting_readers. */ - HANDLE event = gl_waitqueue_add (&lock->waiting_readers); - if (event != INVALID_HANDLE_VALUE) - { - DWORD result; - LeaveCriticalSection (&lock->lock); - /* Wait until another thread signals this event. */ - result = WaitForSingleObject (event, INFINITE); - if (result == WAIT_FAILED || result == WAIT_TIMEOUT) - abort (); - CloseHandle (event); - /* The thread which signalled the event already did the bookkeeping: - removed us from the waiting_readers, incremented lock->runcount. */ - if (!(lock->runcount > 0)) - abort (); - return 0; - } - else - { - /* Allocation failure. Weird. */ - do - { - LeaveCriticalSection (&lock->lock); - Sleep (1); - EnterCriticalSection (&lock->lock); - } - while (!(lock->runcount + 1 > 0)); - } - } - lock->runcount++; - LeaveCriticalSection (&lock->lock); - return 0; -} - -int -glthread_rwlock_wrlock_func (gl_rwlock_t *lock) -{ - if (!lock->guard.done) - { - if (InterlockedIncrement (&lock->guard.started) == 0) - /* This thread is the first one to need this lock. Initialize it. */ - glthread_rwlock_init (lock); - else - /* Yield the CPU while waiting for another thread to finish - initializing this lock. */ - while (!lock->guard.done) - Sleep (0); - } - EnterCriticalSection (&lock->lock); - /* Test whether no readers or writers are currently running. */ - if (!(lock->runcount == 0)) - { - /* This thread has to wait for a while. Enqueue it among the - waiting_writers. */ - HANDLE event = gl_waitqueue_add (&lock->waiting_writers); - if (event != INVALID_HANDLE_VALUE) - { - DWORD result; - LeaveCriticalSection (&lock->lock); - /* Wait until another thread signals this event. */ - result = WaitForSingleObject (event, INFINITE); - if (result == WAIT_FAILED || result == WAIT_TIMEOUT) - abort (); - CloseHandle (event); - /* The thread which signalled the event already did the bookkeeping: - removed us from the waiting_writers, set lock->runcount = -1. */ - if (!(lock->runcount == -1)) - abort (); - return 0; - } - else - { - /* Allocation failure. Weird. */ - do - { - LeaveCriticalSection (&lock->lock); - Sleep (1); - EnterCriticalSection (&lock->lock); - } - while (!(lock->runcount == 0)); - } - } - lock->runcount--; /* runcount becomes -1 */ - LeaveCriticalSection (&lock->lock); - return 0; -} - -int -glthread_rwlock_unlock_func (gl_rwlock_t *lock) -{ - if (!lock->guard.done) - return EINVAL; - EnterCriticalSection (&lock->lock); - if (lock->runcount < 0) - { - /* Drop a writer lock. */ - if (!(lock->runcount == -1)) - abort (); - lock->runcount = 0; - } - else - { - /* Drop a reader lock. */ - if (!(lock->runcount > 0)) - { - LeaveCriticalSection (&lock->lock); - return EPERM; - } - lock->runcount--; - } - if (lock->runcount == 0) - { - /* POSIX recommends that "write locks shall take precedence over read - locks", to avoid "writer starvation". */ - if (lock->waiting_writers.count > 0) - { - /* Wake up one of the waiting writers. */ - lock->runcount--; - gl_waitqueue_notify_first (&lock->waiting_writers); - } - else - { - /* Wake up all waiting readers. */ - lock->runcount += lock->waiting_readers.count; - gl_waitqueue_notify_all (&lock->waiting_readers); - } - } - LeaveCriticalSection (&lock->lock); - return 0; -} - -int -glthread_rwlock_destroy_func (gl_rwlock_t *lock) -{ - if (!lock->guard.done) - return EINVAL; - if (lock->runcount != 0) - return EBUSY; - DeleteCriticalSection (&lock->lock); - if (lock->waiting_readers.array != NULL) - free (lock->waiting_readers.array); - if (lock->waiting_writers.array != NULL) - free (lock->waiting_writers.array); - lock->guard.done = 0; - return 0; -} - -/* --------------------- gl_recursive_lock_t datatype --------------------- */ - -void -glthread_recursive_lock_init_func (gl_recursive_lock_t *lock) -{ - lock->owner = 0; - lock->depth = 0; - InitializeCriticalSection (&lock->lock); - lock->guard.done = 1; -} - -int -glthread_recursive_lock_lock_func (gl_recursive_lock_t *lock) -{ - if (!lock->guard.done) - { - if (InterlockedIncrement (&lock->guard.started) == 0) - /* This thread is the first one to need this lock. Initialize it. */ - glthread_recursive_lock_init (lock); - else - /* Yield the CPU while waiting for another thread to finish - initializing this lock. */ - while (!lock->guard.done) - Sleep (0); - } - { - DWORD self = GetCurrentThreadId (); - if (lock->owner != self) - { - EnterCriticalSection (&lock->lock); - lock->owner = self; - } - if (++(lock->depth) == 0) /* wraparound? */ - { - lock->depth--; - return EAGAIN; - } - } - return 0; -} - -int -glthread_recursive_lock_unlock_func (gl_recursive_lock_t *lock) -{ - if (lock->owner != GetCurrentThreadId ()) - return EPERM; - if (lock->depth == 0) - return EINVAL; - if (--(lock->depth) == 0) - { - lock->owner = 0; - LeaveCriticalSection (&lock->lock); - } - return 0; -} - -int -glthread_recursive_lock_destroy_func (gl_recursive_lock_t *lock) -{ - if (lock->owner != 0) - return EBUSY; - DeleteCriticalSection (&lock->lock); - lock->guard.done = 0; - return 0; -} - -/* -------------------------- gl_once_t datatype -------------------------- */ - -void -glthread_once_func (gl_once_t *once_control, void (*initfunction) (void)) -{ - if (once_control->inited <= 0) - { - if (InterlockedIncrement (&once_control->started) == 0) - { - /* This thread is the first one to come to this once_control. */ - InitializeCriticalSection (&once_control->lock); - EnterCriticalSection (&once_control->lock); - once_control->inited = 0; - initfunction (); - once_control->inited = 1; - LeaveCriticalSection (&once_control->lock); - } - else - { - /* Undo last operation. */ - InterlockedDecrement (&once_control->started); - /* Some other thread has already started the initialization. - Yield the CPU while waiting for the other thread to finish - initializing and taking the lock. */ - while (once_control->inited < 0) - Sleep (0); - if (once_control->inited <= 0) - { - /* Take the lock. This blocks until the other thread has - finished calling the initfunction. */ - EnterCriticalSection (&once_control->lock); - LeaveCriticalSection (&once_control->lock); - if (!(once_control->inited > 0)) - abort (); - } - } - } -} - #endif /* ========================================================================= */ diff -Nru gdb-9.1/gnulib/import/glthread/lock.h gdb-10.2/gnulib/import/glthread/lock.h --- gdb-9.1/gnulib/import/glthread/lock.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/glthread/lock.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Locking in multithreaded situations. - Copyright (C) 2005-2016 Free Software Foundation, Inc. + Copyright (C) 2005-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -12,11 +12,10 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, see <http://www.gnu.org/licenses/>. */ + along with this program; if not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2005. - Based on GCC's gthr-posix.h, gthr-posix95.h, gthr-solaris.h, - gthr-win32.h. */ + Based on GCC's gthr-posix.h, gthr-posix95.h, gthr-win32.h. */ /* This file contains locking primitives for use with a given thread library. It does not contain primitives for creating threads or for other @@ -81,6 +80,125 @@ #include <errno.h> #include <stdlib.h> +#if !defined c11_threads_in_use +# if HAVE_THREADS_H && USE_POSIX_THREADS_WEAK +# include <threads.h> +# pragma weak thrd_exit +# define c11_threads_in_use() (thrd_exit != NULL) +# else +# define c11_threads_in_use() 0 +# endif +#endif + +/* ========================================================================= */ + +#if USE_ISOC_THREADS || USE_ISOC_AND_POSIX_THREADS + +/* Use the ISO C threads library. */ + +# include <threads.h> + +# ifdef __cplusplus +extern "C" { +# endif + +/* -------------------------- gl_lock_t datatype -------------------------- */ + +typedef struct + { + int volatile init_needed; + once_flag init_once; + void (*init_func) (void); + mtx_t mutex; + } + gl_lock_t; +# define gl_lock_define(STORAGECLASS, NAME) \ + STORAGECLASS gl_lock_t NAME; +# define gl_lock_define_initialized(STORAGECLASS, NAME) \ + static void _atomic_init_##NAME (void); \ + STORAGECLASS gl_lock_t NAME = \ + { 1, ONCE_FLAG_INIT, _atomic_init_##NAME }; \ + static void _atomic_init_##NAME (void) \ + { \ + if (glthread_lock_init (&(NAME))) \ + abort (); \ + } +extern int glthread_lock_init (gl_lock_t *lock); +extern int glthread_lock_lock (gl_lock_t *lock); +extern int glthread_lock_unlock (gl_lock_t *lock); +extern int glthread_lock_destroy (gl_lock_t *lock); + +/* ------------------------- gl_rwlock_t datatype ------------------------- */ + +typedef struct + { + int volatile init_needed; + once_flag init_once; + void (*init_func) (void); + mtx_t lock; /* protects the remaining fields */ + cnd_t waiting_readers; /* waiting readers */ + cnd_t waiting_writers; /* waiting writers */ + unsigned int waiting_writers_count; /* number of waiting writers */ + int runcount; /* number of readers running, or -1 when a writer runs */ + } + gl_rwlock_t; +# define gl_rwlock_define(STORAGECLASS, NAME) \ + STORAGECLASS gl_rwlock_t NAME; +# define gl_rwlock_define_initialized(STORAGECLASS, NAME) \ + static void _atomic_init_##NAME (void); \ + STORAGECLASS gl_rwlock_t NAME = \ + { 1, ONCE_FLAG_INIT, _atomic_init_##NAME }; \ + static void _atomic_init_##NAME (void) \ + { \ + if (glthread_rwlock_init (&(NAME))) \ + abort (); \ + } +extern int glthread_rwlock_init (gl_rwlock_t *lock); +extern int glthread_rwlock_rdlock (gl_rwlock_t *lock); +extern int glthread_rwlock_wrlock (gl_rwlock_t *lock); +extern int glthread_rwlock_unlock (gl_rwlock_t *lock); +extern int glthread_rwlock_destroy (gl_rwlock_t *lock); + +/* --------------------- gl_recursive_lock_t datatype --------------------- */ + +typedef struct + { + int volatile init_needed; + once_flag init_once; + void (*init_func) (void); + mtx_t mutex; + } + gl_recursive_lock_t; +# define gl_recursive_lock_define(STORAGECLASS, NAME) \ + STORAGECLASS gl_recursive_lock_t NAME; +# define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \ + static void _atomic_init_##NAME (void); \ + STORAGECLASS gl_recursive_lock_t NAME = \ + { 1, ONCE_FLAG_INIT, _atomic_init_##NAME }; \ + static void _atomic_init_##NAME (void) \ + { \ + if (glthread_recursive_lock_init (&(NAME))) \ + abort (); \ + } +extern int glthread_recursive_lock_init (gl_recursive_lock_t *lock); +extern int glthread_recursive_lock_lock (gl_recursive_lock_t *lock); +extern int glthread_recursive_lock_unlock (gl_recursive_lock_t *lock); +extern int glthread_recursive_lock_destroy (gl_recursive_lock_t *lock); + +/* -------------------------- gl_once_t datatype -------------------------- */ + +typedef once_flag gl_once_t; +# define gl_once_define(STORAGECLASS, NAME) \ + STORAGECLASS once_flag NAME = ONCE_FLAG_INIT; +# define glthread_once(ONCE_CONTROL, INITFUNCTION) \ + (call_once (ONCE_CONTROL, INITFUNCTION), 0) + +# ifdef __cplusplus +} +# endif + +#endif + /* ========================================================================= */ #if USE_POSIX_THREADS @@ -139,13 +257,25 @@ # pragma weak pthread_mutexattr_init # pragma weak pthread_mutexattr_settype # pragma weak pthread_mutexattr_destroy +# pragma weak pthread_rwlockattr_init +# if __GNU_LIBRARY__ > 1 +# pragma weak pthread_rwlockattr_setkind_np +# endif +# pragma weak pthread_rwlockattr_destroy # ifndef pthread_self # pragma weak pthread_self # endif # if !PTHREAD_IN_USE_DETECTION_HARD -# pragma weak pthread_cancel -# define pthread_in_use() (pthread_cancel != NULL) + /* Considering all platforms with USE_POSIX_THREADS_WEAK, only few symbols + can be used to determine whether libpthread is in use. These are: + pthread_mutexattr_gettype + pthread_rwlockattr_destroy + pthread_rwlockattr_init + */ +# pragma weak pthread_mutexattr_gettype +# define pthread_in_use() \ + (pthread_mutexattr_gettype != NULL || c11_threads_in_use ()) # endif # else @@ -176,19 +306,32 @@ /* ------------------------- gl_rwlock_t datatype ------------------------- */ -# if HAVE_PTHREAD_RWLOCK +# if HAVE_PTHREAD_RWLOCK && (HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER || (defined PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP && (__GNU_LIBRARY__ > 1))) -# ifdef PTHREAD_RWLOCK_INITIALIZER +# if defined PTHREAD_RWLOCK_INITIALIZER || defined PTHREAD_RWLOCK_INITIALIZER_NP typedef pthread_rwlock_t gl_rwlock_t; # define gl_rwlock_define(STORAGECLASS, NAME) \ STORAGECLASS pthread_rwlock_t NAME; # define gl_rwlock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS pthread_rwlock_t NAME = gl_rwlock_initializer; -# define gl_rwlock_initializer \ - PTHREAD_RWLOCK_INITIALIZER -# define glthread_rwlock_init(LOCK) \ - (pthread_in_use () ? pthread_rwlock_init (LOCK, NULL) : 0) +# if HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER +# if defined PTHREAD_RWLOCK_INITIALIZER +# define gl_rwlock_initializer \ + PTHREAD_RWLOCK_INITIALIZER +# else +# define gl_rwlock_initializer \ + PTHREAD_RWLOCK_INITIALIZER_NP +# endif +# define glthread_rwlock_init(LOCK) \ + (pthread_in_use () ? pthread_rwlock_init (LOCK, NULL) : 0) +# else /* glibc with bug https://sourceware.org/bugzilla/show_bug.cgi?id=13701 */ +# define gl_rwlock_initializer \ + PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP +# define glthread_rwlock_init(LOCK) \ + (pthread_in_use () ? glthread_rwlock_init_for_glibc (LOCK) : 0) +extern int glthread_rwlock_init_for_glibc (pthread_rwlock_t *lock); +# endif # define glthread_rwlock_rdlock(LOCK) \ (pthread_in_use () ? pthread_rwlock_rdlock (LOCK) : 0) # define glthread_rwlock_wrlock(LOCK) \ @@ -362,248 +505,20 @@ typedef pthread_once_t gl_once_t; # define gl_once_define(STORAGECLASS, NAME) \ STORAGECLASS pthread_once_t NAME = PTHREAD_ONCE_INIT; -# define glthread_once(ONCE_CONTROL, INITFUNCTION) \ - (pthread_in_use () \ - ? pthread_once (ONCE_CONTROL, INITFUNCTION) \ - : (glthread_once_singlethreaded (ONCE_CONTROL) ? (INITFUNCTION (), 0) : 0)) -extern int glthread_once_singlethreaded (pthread_once_t *once_control); - -# ifdef __cplusplus -} -# endif - -#endif - -/* ========================================================================= */ - -#if USE_PTH_THREADS - -/* Use the GNU Pth threads library. */ - -# include <pth.h> - -# ifdef __cplusplus -extern "C" { -# endif - -# if USE_PTH_THREADS_WEAK - -/* Use weak references to the GNU Pth threads library. */ - -# pragma weak pth_mutex_init -# pragma weak pth_mutex_acquire -# pragma weak pth_mutex_release -# pragma weak pth_rwlock_init -# pragma weak pth_rwlock_acquire -# pragma weak pth_rwlock_release -# pragma weak pth_once - -# pragma weak pth_cancel -# define pth_in_use() (pth_cancel != NULL) - +# if PTHREAD_IN_USE_DETECTION_HARD || USE_POSIX_THREADS_WEAK +# define glthread_once(ONCE_CONTROL, INITFUNCTION) \ + (pthread_in_use () \ + ? pthread_once (ONCE_CONTROL, INITFUNCTION) \ + : (glthread_once_singlethreaded (ONCE_CONTROL) ? (INITFUNCTION (), 0) : 0)) # else - -# define pth_in_use() 1 - +# define glthread_once(ONCE_CONTROL, INITFUNCTION) \ + (pthread_in_use () \ + ? glthread_once_multithreaded (ONCE_CONTROL, INITFUNCTION) \ + : (glthread_once_singlethreaded (ONCE_CONTROL) ? (INITFUNCTION (), 0) : 0)) +extern int glthread_once_multithreaded (pthread_once_t *once_control, + void (*init_function) (void)); # endif - -/* -------------------------- gl_lock_t datatype -------------------------- */ - -typedef pth_mutex_t gl_lock_t; -# define gl_lock_define(STORAGECLASS, NAME) \ - STORAGECLASS pth_mutex_t NAME; -# define gl_lock_define_initialized(STORAGECLASS, NAME) \ - STORAGECLASS pth_mutex_t NAME = gl_lock_initializer; -# define gl_lock_initializer \ - PTH_MUTEX_INIT -# define glthread_lock_init(LOCK) \ - (pth_in_use () && !pth_mutex_init (LOCK) ? errno : 0) -# define glthread_lock_lock(LOCK) \ - (pth_in_use () && !pth_mutex_acquire (LOCK, 0, NULL) ? errno : 0) -# define glthread_lock_unlock(LOCK) \ - (pth_in_use () && !pth_mutex_release (LOCK) ? errno : 0) -# define glthread_lock_destroy(LOCK) \ - ((void)(LOCK), 0) - -/* ------------------------- gl_rwlock_t datatype ------------------------- */ - -typedef pth_rwlock_t gl_rwlock_t; -# define gl_rwlock_define(STORAGECLASS, NAME) \ - STORAGECLASS pth_rwlock_t NAME; -# define gl_rwlock_define_initialized(STORAGECLASS, NAME) \ - STORAGECLASS pth_rwlock_t NAME = gl_rwlock_initializer; -# define gl_rwlock_initializer \ - PTH_RWLOCK_INIT -# define glthread_rwlock_init(LOCK) \ - (pth_in_use () && !pth_rwlock_init (LOCK) ? errno : 0) -# define glthread_rwlock_rdlock(LOCK) \ - (pth_in_use () && !pth_rwlock_acquire (LOCK, PTH_RWLOCK_RD, 0, NULL) ? errno : 0) -# define glthread_rwlock_wrlock(LOCK) \ - (pth_in_use () && !pth_rwlock_acquire (LOCK, PTH_RWLOCK_RW, 0, NULL) ? errno : 0) -# define glthread_rwlock_unlock(LOCK) \ - (pth_in_use () && !pth_rwlock_release (LOCK) ? errno : 0) -# define glthread_rwlock_destroy(LOCK) \ - ((void)(LOCK), 0) - -/* --------------------- gl_recursive_lock_t datatype --------------------- */ - -/* In Pth, mutexes are recursive by default. */ -typedef pth_mutex_t gl_recursive_lock_t; -# define gl_recursive_lock_define(STORAGECLASS, NAME) \ - STORAGECLASS pth_mutex_t NAME; -# define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \ - STORAGECLASS pth_mutex_t NAME = gl_recursive_lock_initializer; -# define gl_recursive_lock_initializer \ - PTH_MUTEX_INIT -# define glthread_recursive_lock_init(LOCK) \ - (pth_in_use () && !pth_mutex_init (LOCK) ? errno : 0) -# define glthread_recursive_lock_lock(LOCK) \ - (pth_in_use () && !pth_mutex_acquire (LOCK, 0, NULL) ? errno : 0) -# define glthread_recursive_lock_unlock(LOCK) \ - (pth_in_use () && !pth_mutex_release (LOCK) ? errno : 0) -# define glthread_recursive_lock_destroy(LOCK) \ - ((void)(LOCK), 0) - -/* -------------------------- gl_once_t datatype -------------------------- */ - -typedef pth_once_t gl_once_t; -# define gl_once_define(STORAGECLASS, NAME) \ - STORAGECLASS pth_once_t NAME = PTH_ONCE_INIT; -# define glthread_once(ONCE_CONTROL, INITFUNCTION) \ - (pth_in_use () \ - ? glthread_once_multithreaded (ONCE_CONTROL, INITFUNCTION) \ - : (glthread_once_singlethreaded (ONCE_CONTROL) ? (INITFUNCTION (), 0) : 0)) -extern int glthread_once_multithreaded (pth_once_t *once_control, void (*initfunction) (void)); -extern int glthread_once_singlethreaded (pth_once_t *once_control); - -# ifdef __cplusplus -} -# endif - -#endif - -/* ========================================================================= */ - -#if USE_SOLARIS_THREADS - -/* Use the old Solaris threads library. */ - -# include <thread.h> -# include <synch.h> - -# ifdef __cplusplus -extern "C" { -# endif - -# if USE_SOLARIS_THREADS_WEAK - -/* Use weak references to the old Solaris threads library. */ - -# pragma weak mutex_init -# pragma weak mutex_lock -# pragma weak mutex_unlock -# pragma weak mutex_destroy -# pragma weak rwlock_init -# pragma weak rw_rdlock -# pragma weak rw_wrlock -# pragma weak rw_unlock -# pragma weak rwlock_destroy -# pragma weak thr_self - -# pragma weak thr_suspend -# define thread_in_use() (thr_suspend != NULL) - -# else - -# define thread_in_use() 1 - -# endif - -/* -------------------------- gl_lock_t datatype -------------------------- */ - -typedef mutex_t gl_lock_t; -# define gl_lock_define(STORAGECLASS, NAME) \ - STORAGECLASS mutex_t NAME; -# define gl_lock_define_initialized(STORAGECLASS, NAME) \ - STORAGECLASS mutex_t NAME = gl_lock_initializer; -# define gl_lock_initializer \ - DEFAULTMUTEX -# define glthread_lock_init(LOCK) \ - (thread_in_use () ? mutex_init (LOCK, USYNC_THREAD, NULL) : 0) -# define glthread_lock_lock(LOCK) \ - (thread_in_use () ? mutex_lock (LOCK) : 0) -# define glthread_lock_unlock(LOCK) \ - (thread_in_use () ? mutex_unlock (LOCK) : 0) -# define glthread_lock_destroy(LOCK) \ - (thread_in_use () ? mutex_destroy (LOCK) : 0) - -/* ------------------------- gl_rwlock_t datatype ------------------------- */ - -typedef rwlock_t gl_rwlock_t; -# define gl_rwlock_define(STORAGECLASS, NAME) \ - STORAGECLASS rwlock_t NAME; -# define gl_rwlock_define_initialized(STORAGECLASS, NAME) \ - STORAGECLASS rwlock_t NAME = gl_rwlock_initializer; -# define gl_rwlock_initializer \ - DEFAULTRWLOCK -# define glthread_rwlock_init(LOCK) \ - (thread_in_use () ? rwlock_init (LOCK, USYNC_THREAD, NULL) : 0) -# define glthread_rwlock_rdlock(LOCK) \ - (thread_in_use () ? rw_rdlock (LOCK) : 0) -# define glthread_rwlock_wrlock(LOCK) \ - (thread_in_use () ? rw_wrlock (LOCK) : 0) -# define glthread_rwlock_unlock(LOCK) \ - (thread_in_use () ? rw_unlock (LOCK) : 0) -# define glthread_rwlock_destroy(LOCK) \ - (thread_in_use () ? rwlock_destroy (LOCK) : 0) - -/* --------------------- gl_recursive_lock_t datatype --------------------- */ - -/* Old Solaris threads did not have recursive locks. - We have to implement them ourselves. */ - -typedef struct - { - mutex_t mutex; - thread_t owner; - unsigned long depth; - } - gl_recursive_lock_t; -# define gl_recursive_lock_define(STORAGECLASS, NAME) \ - STORAGECLASS gl_recursive_lock_t NAME; -# define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \ - STORAGECLASS gl_recursive_lock_t NAME = gl_recursive_lock_initializer; -# define gl_recursive_lock_initializer \ - { DEFAULTMUTEX, (thread_t) 0, 0 } -# define glthread_recursive_lock_init(LOCK) \ - (thread_in_use () ? glthread_recursive_lock_init_multithreaded (LOCK) : 0) -# define glthread_recursive_lock_lock(LOCK) \ - (thread_in_use () ? glthread_recursive_lock_lock_multithreaded (LOCK) : 0) -# define glthread_recursive_lock_unlock(LOCK) \ - (thread_in_use () ? glthread_recursive_lock_unlock_multithreaded (LOCK) : 0) -# define glthread_recursive_lock_destroy(LOCK) \ - (thread_in_use () ? glthread_recursive_lock_destroy_multithreaded (LOCK) : 0) -extern int glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock); -extern int glthread_recursive_lock_lock_multithreaded (gl_recursive_lock_t *lock); -extern int glthread_recursive_lock_unlock_multithreaded (gl_recursive_lock_t *lock); -extern int glthread_recursive_lock_destroy_multithreaded (gl_recursive_lock_t *lock); - -/* -------------------------- gl_once_t datatype -------------------------- */ - -typedef struct - { - volatile int inited; - mutex_t mutex; - } - gl_once_t; -# define gl_once_define(STORAGECLASS, NAME) \ - STORAGECLASS gl_once_t NAME = { 0, DEFAULTMUTEX }; -# define glthread_once(ONCE_CONTROL, INITFUNCTION) \ - (thread_in_use () \ - ? glthread_once_multithreaded (ONCE_CONTROL, INITFUNCTION) \ - : (glthread_once_singlethreaded (ONCE_CONTROL) ? (INITFUNCTION (), 0) : 0)) -extern int glthread_once_multithreaded (gl_once_t *once_control, void (*initfunction) (void)); -extern int glthread_once_singlethreaded (gl_once_t *once_control); +extern int glthread_once_singlethreaded (pthread_once_t *once_control); # ifdef __cplusplus } @@ -618,6 +533,11 @@ # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> +# include "windows-mutex.h" +# include "windows-rwlock.h" +# include "windows-recmutex.h" +# include "windows-once.h" + # ifdef __cplusplus extern "C" { # endif @@ -633,127 +553,69 @@ /* There is no way to statically initialize a CRITICAL_SECTION. It needs to be done lazily, once only. For this we need spinlocks. */ -typedef struct { volatile int done; volatile long started; } gl_spinlock_t; - /* -------------------------- gl_lock_t datatype -------------------------- */ -typedef struct - { - gl_spinlock_t guard; /* protects the initialization */ - CRITICAL_SECTION lock; - } - gl_lock_t; +typedef glwthread_mutex_t gl_lock_t; # define gl_lock_define(STORAGECLASS, NAME) \ STORAGECLASS gl_lock_t NAME; # define gl_lock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS gl_lock_t NAME = gl_lock_initializer; # define gl_lock_initializer \ - { { 0, -1 } } + GLWTHREAD_MUTEX_INIT # define glthread_lock_init(LOCK) \ - (glthread_lock_init_func (LOCK), 0) + (glwthread_mutex_init (LOCK), 0) # define glthread_lock_lock(LOCK) \ - glthread_lock_lock_func (LOCK) + glwthread_mutex_lock (LOCK) # define glthread_lock_unlock(LOCK) \ - glthread_lock_unlock_func (LOCK) + glwthread_mutex_unlock (LOCK) # define glthread_lock_destroy(LOCK) \ - glthread_lock_destroy_func (LOCK) -extern void glthread_lock_init_func (gl_lock_t *lock); -extern int glthread_lock_lock_func (gl_lock_t *lock); -extern int glthread_lock_unlock_func (gl_lock_t *lock); -extern int glthread_lock_destroy_func (gl_lock_t *lock); + glwthread_mutex_destroy (LOCK) /* ------------------------- gl_rwlock_t datatype ------------------------- */ -/* It is impossible to implement read-write locks using plain locks, without - introducing an extra thread dedicated to managing read-write locks. - Therefore here we need to use the low-level Event type. */ - -typedef struct - { - HANDLE *array; /* array of waiting threads, each represented by an event */ - unsigned int count; /* number of waiting threads */ - unsigned int alloc; /* length of allocated array */ - unsigned int offset; /* index of first waiting thread in array */ - } - gl_carray_waitqueue_t; -typedef struct - { - gl_spinlock_t guard; /* protects the initialization */ - CRITICAL_SECTION lock; /* protects the remaining fields */ - gl_carray_waitqueue_t waiting_readers; /* waiting readers */ - gl_carray_waitqueue_t waiting_writers; /* waiting writers */ - int runcount; /* number of readers running, or -1 when a writer runs */ - } - gl_rwlock_t; +typedef glwthread_rwlock_t gl_rwlock_t; # define gl_rwlock_define(STORAGECLASS, NAME) \ STORAGECLASS gl_rwlock_t NAME; # define gl_rwlock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS gl_rwlock_t NAME = gl_rwlock_initializer; # define gl_rwlock_initializer \ - { { 0, -1 } } + GLWTHREAD_RWLOCK_INIT # define glthread_rwlock_init(LOCK) \ - (glthread_rwlock_init_func (LOCK), 0) + (glwthread_rwlock_init (LOCK), 0) # define glthread_rwlock_rdlock(LOCK) \ - glthread_rwlock_rdlock_func (LOCK) + glwthread_rwlock_rdlock (LOCK) # define glthread_rwlock_wrlock(LOCK) \ - glthread_rwlock_wrlock_func (LOCK) + glwthread_rwlock_wrlock (LOCK) # define glthread_rwlock_unlock(LOCK) \ - glthread_rwlock_unlock_func (LOCK) + glwthread_rwlock_unlock (LOCK) # define glthread_rwlock_destroy(LOCK) \ - glthread_rwlock_destroy_func (LOCK) -extern void glthread_rwlock_init_func (gl_rwlock_t *lock); -extern int glthread_rwlock_rdlock_func (gl_rwlock_t *lock); -extern int glthread_rwlock_wrlock_func (gl_rwlock_t *lock); -extern int glthread_rwlock_unlock_func (gl_rwlock_t *lock); -extern int glthread_rwlock_destroy_func (gl_rwlock_t *lock); + glwthread_rwlock_destroy (LOCK) /* --------------------- gl_recursive_lock_t datatype --------------------- */ -/* The native Windows documentation says that CRITICAL_SECTION already - implements a recursive lock. But we need not rely on it: It's easy to - implement a recursive lock without this assumption. */ - -typedef struct - { - gl_spinlock_t guard; /* protects the initialization */ - DWORD owner; - unsigned long depth; - CRITICAL_SECTION lock; - } - gl_recursive_lock_t; +typedef glwthread_recmutex_t gl_recursive_lock_t; # define gl_recursive_lock_define(STORAGECLASS, NAME) \ STORAGECLASS gl_recursive_lock_t NAME; # define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS gl_recursive_lock_t NAME = gl_recursive_lock_initializer; # define gl_recursive_lock_initializer \ - { { 0, -1 }, 0, 0 } + GLWTHREAD_RECMUTEX_INIT # define glthread_recursive_lock_init(LOCK) \ - (glthread_recursive_lock_init_func (LOCK), 0) + (glwthread_recmutex_init (LOCK), 0) # define glthread_recursive_lock_lock(LOCK) \ - glthread_recursive_lock_lock_func (LOCK) + glwthread_recmutex_lock (LOCK) # define glthread_recursive_lock_unlock(LOCK) \ - glthread_recursive_lock_unlock_func (LOCK) + glwthread_recmutex_unlock (LOCK) # define glthread_recursive_lock_destroy(LOCK) \ - glthread_recursive_lock_destroy_func (LOCK) -extern void glthread_recursive_lock_init_func (gl_recursive_lock_t *lock); -extern int glthread_recursive_lock_lock_func (gl_recursive_lock_t *lock); -extern int glthread_recursive_lock_unlock_func (gl_recursive_lock_t *lock); -extern int glthread_recursive_lock_destroy_func (gl_recursive_lock_t *lock); + glwthread_recmutex_destroy (LOCK) /* -------------------------- gl_once_t datatype -------------------------- */ -typedef struct - { - volatile int inited; - volatile long started; - CRITICAL_SECTION lock; - } - gl_once_t; +typedef glwthread_once_t gl_once_t; # define gl_once_define(STORAGECLASS, NAME) \ - STORAGECLASS gl_once_t NAME = { -1, -1 }; + STORAGECLASS gl_once_t NAME = GLWTHREAD_ONCE_INIT; # define glthread_once(ONCE_CONTROL, INITFUNCTION) \ - (glthread_once_func (ONCE_CONTROL, INITFUNCTION), 0) -extern void glthread_once_func (gl_once_t *once_control, void (*initfunction) (void)); + (glwthread_once (ONCE_CONTROL, INITFUNCTION), 0) # ifdef __cplusplus } @@ -763,7 +625,7 @@ /* ========================================================================= */ -#if !(USE_POSIX_THREADS || USE_PTH_THREADS || USE_SOLARIS_THREADS || USE_WINDOWS_THREADS) +#if !(USE_ISOC_THREADS || USE_POSIX_THREADS || USE_ISOC_AND_POSIX_THREADS || USE_WINDOWS_THREADS) /* Provide dummy implementation if threads are not supported. */ diff -Nru gdb-9.1/gnulib/import/glthread/threadlib.c gdb-10.2/gnulib/import/glthread/threadlib.c --- gdb-9.1/gnulib/import/glthread/threadlib.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/glthread/threadlib.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Multithreading primitives. - Copyright (C) 2005-2016 Free Software Foundation, Inc. + Copyright (C) 2005-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -12,7 +12,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, see <http://www.gnu.org/licenses/>. */ + along with this program; if not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2005. */ @@ -20,7 +20,7 @@ /* ========================================================================= */ -#if USE_POSIX_THREADS +#if USE_POSIX_THREADS || USE_ISOC_AND_POSIX_THREADS /* Use the POSIX threads library. */ diff -Nru gdb-9.1/gnulib/import/hard-locale.c gdb-10.2/gnulib/import/hard-locale.c --- gdb-9.1/gnulib/import/hard-locale.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/hard-locale.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* hard-locale.c -- Determine whether a locale is hard. - Copyright (C) 1997-1999, 2002-2004, 2006-2007, 2009-2016 Free Software + Copyright (C) 1997-1999, 2002-2004, 2006-2007, 2009-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify @@ -14,59 +14,22 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include "hard-locale.h" #include <locale.h> -#include <stdlib.h> #include <string.h> -#ifdef __GLIBC__ -# define GLIBC_VERSION __GLIBC__ -#elif defined __UCLIBC__ -# define GLIBC_VERSION 2 -#else -# define GLIBC_VERSION 0 -#endif - -/* Return true if the current CATEGORY locale is hard, i.e. if you - can't get away with assuming traditional C or POSIX behavior. */ bool hard_locale (int category) { - bool hard = true; - char const *p = setlocale (category, NULL); + char locale[SETLOCALE_NULL_MAX]; - if (p) - { - if (2 <= GLIBC_VERSION) - { - if (strcmp (p, "C") == 0 || strcmp (p, "POSIX") == 0) - hard = false; - } - else - { - char *locale = strdup (p); - if (locale) - { - /* Temporarily set the locale to the "C" and "POSIX" locales - to find their names, so that we can determine whether one - or the other is the caller's locale. */ - if (((p = setlocale (category, "C")) - && strcmp (p, locale) == 0) - || ((p = setlocale (category, "POSIX")) - && strcmp (p, locale) == 0)) - hard = false; - - /* Restore the caller's locale. */ - setlocale (category, locale); - free (locale); - } - } - } + if (setlocale_null_r (category, locale, sizeof (locale))) + return false; - return hard; + return !(strcmp (locale, "C") == 0 || strcmp (locale, "POSIX") == 0); } diff -Nru gdb-9.1/gnulib/import/hard-locale.h gdb-10.2/gnulib/import/hard-locale.h --- gdb-9.1/gnulib/import/hard-locale.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/hard-locale.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Determine whether a locale is hard. - Copyright (C) 1999, 2003-2004, 2009-2016 Free Software Foundation, Inc. + Copyright (C) 1999, 2003-2004, 2009-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -13,13 +13,16 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef HARD_LOCALE_H_ # define HARD_LOCALE_H_ 1 # include <stdbool.h> -bool hard_locale (int); +/* Return true if the specified CATEGORY of the current locale is hard, i.e. + different from the C or POSIX locale that has a fixed behavior. + CATEGORY must be one of the LC_* values, but not LC_ALL. */ +extern bool hard_locale (int category); #endif /* HARD_LOCALE_H_ */ diff -Nru gdb-9.1/gnulib/import/inet_ntop.c gdb-10.2/gnulib/import/inet_ntop.c --- gdb-9.1/gnulib/import/inet_ntop.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/inet_ntop.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* inet_ntop.c -- convert IPv4 and IPv6 addresses from binary to text form - Copyright (C) 2005-2006, 2008-2016 Free Software Foundation, Inc. + Copyright (C) 2005-2006, 2008-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -13,7 +13,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, see <http://www.gnu.org/licenses/>. */ + along with this program; if not, see <https://www.gnu.org/licenses/>. */ /* * Copyright (c) 1996-1999 by Internet Software Consortium. diff -Nru gdb-9.1/gnulib/import/intprops.h gdb-10.2/gnulib/import/intprops.h --- gdb-9.1/gnulib/import/intprops.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/intprops.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* intprops.h -- properties of integer types - Copyright (C) 2001-2016 Free Software Foundation, Inc. + Copyright (C) 2001-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published @@ -13,7 +13,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paul Eggert. */ @@ -21,18 +21,14 @@ #define _GL_INTPROPS_H #include <limits.h> -#include <verify.h> -#ifndef __has_builtin -# define __has_builtin(x) 0 -#endif - -/* Return a value with the common real type of E and V and the value of V. */ -#define _GL_INT_CONVERT(e, v) (0 * (e) + (v)) +/* Return a value with the common real type of E and V and the value of V. + Do not evaluate E. */ +#define _GL_INT_CONVERT(e, v) ((1 ? 0 : (e)) + (v)) /* Act like _GL_INT_CONVERT (E, -V) but work around a bug in IRIX 6.5 cc; see - <http://lists.gnu.org/archive/html/bug-gnulib/2011-05/msg00406.html>. */ -#define _GL_INT_NEGATE_CONVERT(e, v) (0 * (e) - (v)) + <https://lists.gnu.org/r/bug-gnulib/2011-05/msg00406.html>. */ +#define _GL_INT_NEGATE_CONVERT(e, v) ((1 ? 0 : (e)) - (v)) /* The extra casts in the following macros work around compiler bugs, e.g., in Cray C 5.0.3.0. */ @@ -45,13 +41,14 @@ #define TYPE_SIGNED(t) (! ((t) 0 < (t) -1)) /* Return 1 if the real expression E, after promotion, has a - signed or floating type. */ + signed or floating type. Do not evaluate E. */ #define EXPR_SIGNED(e) (_GL_INT_NEGATE_CONVERT (e, 1) < 0) /* Minimum and maximum values for integer types and expressions. */ /* The width in bits of the integer type or expression T. + Do not evaluate T. Padding bits are not supported; this is checked at compile-time below. */ #define TYPE_WIDTH(t) (sizeof (t) * CHAR_BIT) @@ -63,7 +60,7 @@ : ((((t) 1 << (TYPE_WIDTH (t) - 2)) - 1) * 2 + 1))) /* The maximum and minimum values for the type of the expression E, - after integer promotion. E should not have side effects. */ + after integer promotion. E is not evaluated. */ #define _GL_INT_MINIMUM(e) \ (EXPR_SIGNED (e) \ ? ~ _GL_SIGNED_INT_MAXIMUM (e) \ @@ -84,24 +81,7 @@ /* This include file assumes that signed types are two's complement without padding bits; the above macros have undefined behavior otherwise. If this is a problem for you, please let us know how to fix it for your host. - As a sanity check, test the assumption for some signed types that - <limits.h> bounds. */ -verify (TYPE_MINIMUM (signed char) == SCHAR_MIN); -verify (TYPE_MAXIMUM (signed char) == SCHAR_MAX); -verify (TYPE_MINIMUM (short int) == SHRT_MIN); -verify (TYPE_MAXIMUM (short int) == SHRT_MAX); -verify (TYPE_MINIMUM (int) == INT_MIN); -verify (TYPE_MAXIMUM (int) == INT_MAX); -verify (TYPE_MINIMUM (long int) == LONG_MIN); -verify (TYPE_MAXIMUM (long int) == LONG_MAX); -#ifdef LLONG_MAX -verify (TYPE_MINIMUM (long long int) == LLONG_MIN); -verify (TYPE_MAXIMUM (long long int) == LLONG_MAX); -#endif -/* Similarly, sanity-check one ISO/IEC TS 18661-1:2014 macro if defined. */ -#ifdef UINT_WIDTH -verify (TYPE_WIDTH (unsigned int) == UINT_WIDTH); -#endif + This assumption is tested by the intprops-tests module. */ /* Does the __typeof__ keyword work? This could be done by 'configure', but for now it's easier to do it by hand. */ @@ -131,8 +111,8 @@ Subtract 1 for the sign bit if T is signed, and then add 1 more for a minus sign if needed. - Because _GL_SIGNED_TYPE_OR_EXPR sometimes returns 0 when its argument is - signed, this macro may overestimate the true bound by one byte when + Because _GL_SIGNED_TYPE_OR_EXPR sometimes returns 1 when its argument is + unsigned, this macro may overestimate the true bound by one byte when applied to unsigned types of size 2, 4, 16, ... bytes. */ #define INT_STRLEN_BOUND(t) \ (INT_BITS_STRLEN_BOUND (TYPE_WIDTH (t) - _GL_SIGNED_TYPE_OR_EXPR (t)) \ @@ -201,7 +181,7 @@ /* Return 1 if A * B would overflow in [MIN,MAX] arithmetic. See above for restrictions. Avoid && and || as they tickle bugs in Sun C 5.11 2010/08/13 and other compilers; see - <http://lists.gnu.org/archive/html/bug-gnulib/2011-05/msg00401.html>. */ + <https://lists.gnu.org/r/bug-gnulib/2011-05/msg00401.html>. */ #define INT_MULTIPLY_RANGE_OVERFLOW(a, b, min, max) \ ((b) < 0 \ ? ((a) < 0 \ @@ -240,13 +220,27 @@ ? (a) < (min) >> (b) \ : (max) >> (b) < (a)) -/* True if __builtin_add_overflow (A, B, P) works when P is non-null. */ -#define _GL_HAS_BUILTIN_OVERFLOW \ - (5 <= __GNUC__ || __has_builtin (__builtin_add_overflow)) - -/* True if __builtin_add_overflow_p (A, B, C) works. */ -#define _GL_HAS_BUILTIN_OVERFLOW_P \ - (7 <= __GNUC__ || __has_builtin (__builtin_add_overflow_p)) +/* True if __builtin_add_overflow (A, B, P) and __builtin_sub_overflow + (A, B, P) work when P is non-null. */ +#if 5 <= __GNUC__ && !defined __ICC +# define _GL_HAS_BUILTIN_ADD_OVERFLOW 1 +#elif defined __has_builtin +# define _GL_HAS_BUILTIN_ADD_OVERFLOW __has_builtin (__builtin_add_overflow) +#else +# define _GL_HAS_BUILTIN_ADD_OVERFLOW 0 +#endif + +/* True if __builtin_mul_overflow (A, B, P) works when P is non-null. */ +#ifdef __clang__ +/* Work around Clang bug <https://bugs.llvm.org/show_bug.cgi?id=16404>. */ +# define _GL_HAS_BUILTIN_MUL_OVERFLOW 0 +#else +# define _GL_HAS_BUILTIN_MUL_OVERFLOW _GL_HAS_BUILTIN_ADD_OVERFLOW +#endif + +/* True if __builtin_add_overflow_p (A, B, C) works, and similarly for + __builtin_mul_overflow_p and __builtin_mul_overflow_p. */ +#define _GL_HAS_BUILTIN_OVERFLOW_P (7 <= __GNUC__) /* The _GL*_OVERFLOW macros have the same restrictions as the *_RANGE_OVERFLOW macros, except that they do not assume that operands @@ -299,7 +293,9 @@ The INT_<op>_OVERFLOW macros return 1 if the corresponding C operators might not yield numerically correct answers due to arithmetic overflow. - The INT_<op>_WRAPV macros also store the low-order bits of the answer. + The INT_<op>_WRAPV macros compute the low-order bits of the sum, + difference, and product of two C integers, and return 1 if these + low-order bits are not numerically correct. These macros work correctly on all known practical hosts, and do not rely on undefined behavior due to signed arithmetic overflow. @@ -327,9 +323,11 @@ arguments should not have side effects. The WRAPV macros are not constant expressions. They support only - +, binary -, and *. The result type must be signed. + +, binary -, and *. Because the WRAPV macros convert the result, + they report overflow in different circumstances than the OVERFLOW + macros do. - These macros are tuned for their last argument being a constant. + These macros are tuned for their last input argument being a constant. Return 1 if the integer expressions A * B, A - B, -A, A * B, A / B, A % B, and A << B would overflow, respectively. */ @@ -360,24 +358,43 @@ Arguments should be free of side effects. */ #define _GL_BINARY_OP_OVERFLOW(a, b, op_result_overflow) \ op_result_overflow (a, b, \ - _GL_INT_MINIMUM (0 * (b) + (a)), \ - _GL_INT_MAXIMUM (0 * (b) + (a))) + _GL_INT_MINIMUM (_GL_INT_CONVERT (a, b)), \ + _GL_INT_MAXIMUM (_GL_INT_CONVERT (a, b))) /* Store the low-order bits of A + B, A - B, A * B, respectively, into *R. Return 1 if the result overflows. See above for restrictions. */ -#define INT_ADD_WRAPV(a, b, r) \ - _GL_INT_OP_WRAPV (a, b, r, +, __builtin_add_overflow, INT_ADD_OVERFLOW) -#define INT_SUBTRACT_WRAPV(a, b, r) \ - _GL_INT_OP_WRAPV (a, b, r, -, __builtin_sub_overflow, INT_SUBTRACT_OVERFLOW) -#define INT_MULTIPLY_WRAPV(a, b, r) \ - _GL_INT_OP_WRAPV (a, b, r, *, __builtin_mul_overflow, INT_MULTIPLY_OVERFLOW) +#if _GL_HAS_BUILTIN_ADD_OVERFLOW +# define INT_ADD_WRAPV(a, b, r) __builtin_add_overflow (a, b, r) +# define INT_SUBTRACT_WRAPV(a, b, r) __builtin_sub_overflow (a, b, r) +#else +# define INT_ADD_WRAPV(a, b, r) \ + _GL_INT_OP_WRAPV (a, b, r, +, _GL_INT_ADD_RANGE_OVERFLOW) +# define INT_SUBTRACT_WRAPV(a, b, r) \ + _GL_INT_OP_WRAPV (a, b, r, -, _GL_INT_SUBTRACT_RANGE_OVERFLOW) +#endif +#if _GL_HAS_BUILTIN_MUL_OVERFLOW +# if (9 < __GNUC__ + (3 <= __GNUC_MINOR__) \ + || (__GNUC__ == 8 && 4 <= __GNUC_MINOR__)) +# define INT_MULTIPLY_WRAPV(a, b, r) __builtin_mul_overflow (a, b, r) +# else + /* Work around GCC bug 91450. */ +# define INT_MULTIPLY_WRAPV(a, b, r) \ + ((!_GL_SIGNED_TYPE_OR_EXPR (*(r)) && EXPR_SIGNED (a) && EXPR_SIGNED (b) \ + && _GL_INT_MULTIPLY_RANGE_OVERFLOW (a, b, 0, (__typeof__ (*(r))) -1)) \ + ? ((void) __builtin_mul_overflow (a, b, r), 1) \ + : __builtin_mul_overflow (a, b, r)) +# endif +#else +# define INT_MULTIPLY_WRAPV(a, b, r) \ + _GL_INT_OP_WRAPV (a, b, r, *, _GL_INT_MULTIPLY_RANGE_OVERFLOW) +#endif /* Nonzero if this compiler has GCC bug 68193 or Clang bug 25390. See: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68193 https://llvm.org/bugs/show_bug.cgi?id=25390 For now, assume all versions of GCC-like compilers generate bogus - warnings for _Generic. This matters only for older compilers that - lack __builtin_add_overflow. */ + warnings for _Generic. This matters only for compilers that + lack relevant builtins. */ #if __GNUC__ # define _GL__GENERIC_BOGUS 1 #else @@ -385,80 +402,183 @@ #endif /* Store the low-order bits of A <op> B into *R, where OP specifies - the operation. BUILTIN is the builtin operation, and OVERFLOW the - overflow predicate. Return 1 if the result overflows. See above - for restrictions. */ -#if _GL_HAS_BUILTIN_OVERFLOW -# define _GL_INT_OP_WRAPV(a, b, r, op, builtin, overflow) builtin (a, b, r) -#elif 201112 <= __STDC_VERSION__ && !_GL__GENERIC_BOGUS -# define _GL_INT_OP_WRAPV(a, b, r, op, builtin, overflow) \ + the operation and OVERFLOW the overflow predicate. Return 1 if the + result overflows. See above for restrictions. */ +#if 201112 <= __STDC_VERSION__ && !_GL__GENERIC_BOGUS +# define _GL_INT_OP_WRAPV(a, b, r, op, overflow) \ (_Generic \ (*(r), \ signed char: \ - _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned char, \ + _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ signed char, SCHAR_MIN, SCHAR_MAX), \ + unsigned char: \ + _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ + unsigned char, 0, UCHAR_MAX), \ short int: \ - _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned short int, \ + _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ short int, SHRT_MIN, SHRT_MAX), \ + unsigned short int: \ + _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ + unsigned short int, 0, USHRT_MAX), \ int: \ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ int, INT_MIN, INT_MAX), \ + unsigned int: \ + _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ + unsigned int, 0, UINT_MAX), \ long int: \ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \ long int, LONG_MIN, LONG_MAX), \ + unsigned long int: \ + _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \ + unsigned long int, 0, ULONG_MAX), \ long long int: \ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long long int, \ - long long int, LLONG_MIN, LLONG_MAX))) + long long int, LLONG_MIN, LLONG_MAX), \ + unsigned long long int: \ + _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long long int, \ + unsigned long long int, 0, ULLONG_MAX))) #else -# define _GL_INT_OP_WRAPV(a, b, r, op, builtin, overflow) \ +/* Store the low-order bits of A <op> B into *R, where OP specifies + the operation and OVERFLOW the overflow predicate. If *R is + signed, its type is ST with bounds SMIN..SMAX; otherwise its type + is UT with bounds U..UMAX. ST and UT are narrower than int. + Return 1 if the result overflows. See above for restrictions. */ +# if _GL_HAVE___TYPEOF__ +# define _GL_INT_OP_WRAPV_SMALLISH(a,b,r,op,overflow,st,smin,smax,ut,umax) \ + (TYPE_SIGNED (__typeof__ (*(r))) \ + ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, st, smin, smax) \ + : _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, ut, 0, umax)) +# else +# define _GL_INT_OP_WRAPV_SMALLISH(a,b,r,op,overflow,st,smin,smax,ut,umax) \ + (overflow (a, b, smin, smax) \ + ? (overflow (a, b, 0, umax) \ + ? (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a,b,op,unsigned,st), 1) \ + : (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a,b,op,unsigned,st)) < 0) \ + : (overflow (a, b, 0, umax) \ + ? (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a,b,op,unsigned,st)) >= 0 \ + : (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a,b,op,unsigned,st), 0))) +# endif + +# define _GL_INT_OP_WRAPV(a, b, r, op, overflow) \ (sizeof *(r) == sizeof (signed char) \ - ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned char, \ - signed char, SCHAR_MIN, SCHAR_MAX) \ + ? _GL_INT_OP_WRAPV_SMALLISH (a, b, r, op, overflow, \ + signed char, SCHAR_MIN, SCHAR_MAX, \ + unsigned char, UCHAR_MAX) \ : sizeof *(r) == sizeof (short int) \ - ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned short int, \ - short int, SHRT_MIN, SHRT_MAX) \ + ? _GL_INT_OP_WRAPV_SMALLISH (a, b, r, op, overflow, \ + short int, SHRT_MIN, SHRT_MAX, \ + unsigned short int, USHRT_MAX) \ : sizeof *(r) == sizeof (int) \ - ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ - int, INT_MIN, INT_MAX) \ + ? (EXPR_SIGNED (*(r)) \ + ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ + int, INT_MIN, INT_MAX) \ + : _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ + unsigned int, 0, UINT_MAX)) \ : _GL_INT_OP_WRAPV_LONGISH(a, b, r, op, overflow)) # ifdef LLONG_MAX # define _GL_INT_OP_WRAPV_LONGISH(a, b, r, op, overflow) \ (sizeof *(r) == sizeof (long int) \ - ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \ - long int, LONG_MIN, LONG_MAX) \ - : _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long long int, \ - long long int, LLONG_MIN, LLONG_MAX)) + ? (EXPR_SIGNED (*(r)) \ + ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \ + long int, LONG_MIN, LONG_MAX) \ + : _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \ + unsigned long int, 0, ULONG_MAX)) \ + : (EXPR_SIGNED (*(r)) \ + ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long long int, \ + long long int, LLONG_MIN, LLONG_MAX) \ + : _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long long int, \ + unsigned long long int, 0, ULLONG_MAX))) # else # define _GL_INT_OP_WRAPV_LONGISH(a, b, r, op, overflow) \ - _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \ - long int, LONG_MIN, LONG_MAX) + (EXPR_SIGNED (*(r)) \ + ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \ + long int, LONG_MIN, LONG_MAX) \ + : _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \ + unsigned long int, 0, ULONG_MAX)) # endif #endif /* Store the low-order bits of A <op> B into *R, where the operation is given by OP. Use the unsigned type UT for calculation to avoid - overflow problems. *R's type is T, with extremal values TMIN and - TMAX. T must be a signed integer type. Return 1 if the result - overflows. */ + overflow problems. *R's type is T, with extrema TMIN and TMAX. + T must be a signed integer type. Return 1 if the result overflows. */ #define _GL_INT_OP_CALC(a, b, r, op, overflow, ut, t, tmin, tmax) \ - (sizeof ((a) op (b)) < sizeof (t) \ - ? _GL_INT_OP_CALC1 ((t) (a), (t) (b), r, op, overflow, ut, t, tmin, tmax) \ - : _GL_INT_OP_CALC1 (a, b, r, op, overflow, ut, t, tmin, tmax)) -#define _GL_INT_OP_CALC1(a, b, r, op, overflow, ut, t, tmin, tmax) \ - ((overflow (a, b) \ - || (EXPR_SIGNED ((a) op (b)) && ((a) op (b)) < (tmin)) \ - || (tmax) < ((a) op (b))) \ - ? (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a, b, op, ut, t, tmin, tmax), 1) \ - : (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a, b, op, ut, t, tmin, tmax), 0)) - -/* Return A <op> B, where the operation is given by OP. Use the - unsigned type UT for calculation to avoid overflow problems. - Convert the result to type T without overflow by subtracting TMIN - from large values before converting, and adding it afterwards. - Compilers can optimize all the operations except OP. */ -#define _GL_INT_OP_WRAPV_VIA_UNSIGNED(a, b, op, ut, t, tmin, tmax) \ - (((ut) (a) op (ut) (b)) <= (tmax) \ - ? (t) ((ut) (a) op (ut) (b)) \ - : ((t) (((ut) (a) op (ut) (b)) - (tmin)) + (tmin))) + (overflow (a, b, tmin, tmax) \ + ? (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a, b, op, ut, t), 1) \ + : (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a, b, op, ut, t), 0)) + +/* Return the low-order bits of A <op> B, where the operation is given + by OP. Use the unsigned type UT for calculation to avoid undefined + behavior on signed integer overflow, and convert the result to type T. + UT is at least as wide as T and is no narrower than unsigned int, + T is two's complement, and there is no padding or trap representations. + Assume that converting UT to T yields the low-order bits, as is + done in all known two's-complement C compilers. E.g., see: + https://gcc.gnu.org/onlinedocs/gcc/Integers-implementation.html + + According to the C standard, converting UT to T yields an + implementation-defined result or signal for values outside T's + range. However, code that works around this theoretical problem + runs afoul of a compiler bug in Oracle Studio 12.3 x86. See: + https://lists.gnu.org/r/bug-gnulib/2017-04/msg00049.html + As the compiler bug is real, don't try to work around the + theoretical problem. */ + +#define _GL_INT_OP_WRAPV_VIA_UNSIGNED(a, b, op, ut, t) \ + ((t) ((ut) (a) op (ut) (b))) + +/* Return true if the numeric values A + B, A - B, A * B fall outside + the range TMIN..TMAX. Arguments should be integer expressions + without side effects. TMIN should be signed and nonpositive. + TMAX should be positive, and should be signed unless TMIN is zero. */ +#define _GL_INT_ADD_RANGE_OVERFLOW(a, b, tmin, tmax) \ + ((b) < 0 \ + ? (((tmin) \ + ? ((EXPR_SIGNED (_GL_INT_CONVERT (a, (tmin) - (b))) || (b) < (tmin)) \ + && (a) < (tmin) - (b)) \ + : (a) <= -1 - (b)) \ + || ((EXPR_SIGNED (a) ? 0 <= (a) : (tmax) < (a)) && (tmax) < (a) + (b))) \ + : (a) < 0 \ + ? (((tmin) \ + ? ((EXPR_SIGNED (_GL_INT_CONVERT (b, (tmin) - (a))) || (a) < (tmin)) \ + && (b) < (tmin) - (a)) \ + : (b) <= -1 - (a)) \ + || ((EXPR_SIGNED (_GL_INT_CONVERT (a, b)) || (tmax) < (b)) \ + && (tmax) < (a) + (b))) \ + : (tmax) < (b) || (tmax) - (b) < (a)) +#define _GL_INT_SUBTRACT_RANGE_OVERFLOW(a, b, tmin, tmax) \ + (((a) < 0) == ((b) < 0) \ + ? ((a) < (b) \ + ? !(tmin) || -1 - (tmin) < (b) - (a) - 1 \ + : (tmax) < (a) - (b)) \ + : (a) < 0 \ + ? ((!EXPR_SIGNED (_GL_INT_CONVERT ((a) - (tmin), b)) && (a) - (tmin) < 0) \ + || (a) - (tmin) < (b)) \ + : ((! (EXPR_SIGNED (_GL_INT_CONVERT (tmax, b)) \ + && EXPR_SIGNED (_GL_INT_CONVERT ((tmax) + (b), a))) \ + && (tmax) <= -1 - (b)) \ + || (tmax) + (b) < (a))) +#define _GL_INT_MULTIPLY_RANGE_OVERFLOW(a, b, tmin, tmax) \ + ((b) < 0 \ + ? ((a) < 0 \ + ? (EXPR_SIGNED (_GL_INT_CONVERT (tmax, b)) \ + ? (a) < (tmax) / (b) \ + : ((INT_NEGATE_OVERFLOW (b) \ + ? _GL_INT_CONVERT (b, tmax) >> (TYPE_WIDTH (b) - 1) \ + : (tmax) / -(b)) \ + <= -1 - (a))) \ + : INT_NEGATE_OVERFLOW (_GL_INT_CONVERT (b, tmin)) && (b) == -1 \ + ? (EXPR_SIGNED (a) \ + ? 0 < (a) + (tmin) \ + : 0 < (a) && -1 - (tmin) < (a) - 1) \ + : (tmin) / (b) < (a)) \ + : (b) == 0 \ + ? 0 \ + : ((a) < 0 \ + ? (INT_NEGATE_OVERFLOW (_GL_INT_CONVERT (a, tmin)) && (a) == -1 \ + ? (EXPR_SIGNED (b) ? 0 < (b) + (tmin) : -1 - (tmin) < (b) - 1) \ + : (tmin) / (a) < (b)) \ + : (tmax) / (b) < (a))) #endif /* _GL_INTPROPS_H */ diff -Nru gdb-9.1/gnulib/import/inttypes.in.h gdb-10.2/gnulib/import/inttypes.in.h --- gdb-9.1/gnulib/import/inttypes.in.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/inttypes.in.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2006-2016 Free Software Foundation, Inc. +/* Copyright (C) 2006-2020 Free Software Foundation, Inc. Written by Paul Eggert, Bruno Haible, Derek Price. This file is part of gnulib. @@ -13,11 +13,11 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* * ISO C 99 <inttypes.h> for platforms that lack it. - * <http://www.opengroup.org/susv3xbd/inttypes.h.html> + * <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/inttypes.h.html> */ #if __GNUC__ >= 3 @@ -38,6 +38,8 @@ # endif # @INCLUDE_NEXT@ @NEXT_INTTYPES_H@ + +# define _GL_FINISHED_INCLUDING_SYSTEM_INTTYPES_H # endif #endif @@ -49,15 +51,15 @@ #ifndef __GLIBC__ # include <stdint.h> #endif -/* Get CHAR_BIT. */ +/* Get CHAR_BIT, INT_MAX, LONG_MAX, etc. */ #include <limits.h> /* On mingw, __USE_MINGW_ANSI_STDIO only works if <stdio.h> is also included */ -#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ +#if defined _WIN32 && ! defined __CYGWIN__ # include <stdio.h> #endif -#if !(INT_MIN == INT32_MIN && INT_MAX == INT32_MAX) -# error "This file assumes that 'int' has exactly 32 bits. Please report your platform and compiler to <bug-gnulib@gnu.org>." +#if !(INT_MAX == 0x7fffffff && INT_MIN + INT_MAX == -1) +# error "This file assumes that 'int' is 32-bit two's complement. Please report your platform and compiler to <bug-gnulib@gnu.org>." #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ @@ -189,7 +191,7 @@ # define _PRI64_PREFIX "l" # elif defined _MSC_VER || defined __MINGW32__ # define _PRI64_PREFIX "I64" -# elif @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1 +# elif LONG_MAX >> 30 == 1 # define _PRI64_PREFIX _LONG_LONG_FORMAT_PREFIX # endif # if !defined PRId64 || @PRI_MACROS_BROKEN@ @@ -206,7 +208,7 @@ # define _PRIu64_PREFIX "l" # elif defined _MSC_VER || defined __MINGW32__ # define _PRIu64_PREFIX "I64" -# elif @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1 +# elif ULONG_MAX >> 31 == 1 # define _PRIu64_PREFIX _LONG_LONG_FORMAT_PREFIX # endif # if !defined PRIo64 || @PRI_MACROS_BROKEN@ @@ -682,7 +684,7 @@ # define _SCN64_PREFIX "l" # elif defined _MSC_VER || defined __MINGW32__ # define _SCN64_PREFIX "I64" -# elif @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1 +# elif LONG_MAX >> 30 == 1 # define _SCN64_PREFIX _LONG_LONG_FORMAT_PREFIX # endif # if !defined SCNd64 || @PRI_MACROS_BROKEN@ @@ -699,7 +701,7 @@ # define _SCNu64_PREFIX "l" # elif defined _MSC_VER || defined __MINGW32__ # define _SCNu64_PREFIX "I64" -# elif @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1 +# elif ULONG_MAX >> 31 == 1 # define _SCNu64_PREFIX _LONG_LONG_FORMAT_PREFIX # endif # if !defined SCNo64 || @PRI_MACROS_BROKEN@ @@ -1067,11 +1069,13 @@ #endif #if @GNULIB_IMAXDIV@ -# if !@HAVE_DECL_IMAXDIV@ +# if !@HAVE_IMAXDIV_T@ # if !GNULIB_defined_imaxdiv_t typedef struct { intmax_t quot; intmax_t rem; } imaxdiv_t; # define GNULIB_defined_imaxdiv_t 1 # endif +# endif +# if !@HAVE_DECL_IMAXDIV@ extern imaxdiv_t imaxdiv (intmax_t, intmax_t); # endif #elif defined GNULIB_POSIXCHECK @@ -1089,15 +1093,19 @@ # define strtoimax rpl_strtoimax # endif _GL_FUNCDECL_RPL (strtoimax, intmax_t, - (const char *, char **, int) _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (strtoimax, intmax_t, (const char *, char **, int)); + (const char *restrict, char **restrict, int) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (strtoimax, intmax_t, + (const char *restrict, char **restrict, int)); # else # if !@HAVE_DECL_STRTOIMAX@ # undef strtoimax _GL_FUNCDECL_SYS (strtoimax, intmax_t, - (const char *, char **, int) _GL_ARG_NONNULL ((1))); + (const char *restrict, char **restrict, int) + _GL_ARG_NONNULL ((1))); # endif -_GL_CXXALIAS_SYS (strtoimax, intmax_t, (const char *, char **, int)); +_GL_CXXALIAS_SYS (strtoimax, intmax_t, + (const char *restrict, char **restrict, int)); # endif _GL_CXXALIASWARN (strtoimax); #elif defined GNULIB_POSIXCHECK @@ -1115,15 +1123,19 @@ # define strtoumax rpl_strtoumax # endif _GL_FUNCDECL_RPL (strtoumax, uintmax_t, - (const char *, char **, int) _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (strtoumax, uintmax_t, (const char *, char **, int)); + (const char *restrict, char **restrict, int) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (strtoumax, uintmax_t, + (const char *restrict, char **restrict, int)); # else # if !@HAVE_DECL_STRTOUMAX@ # undef strtoumax _GL_FUNCDECL_SYS (strtoumax, uintmax_t, - (const char *, char **, int) _GL_ARG_NONNULL ((1))); + (const char *restrict, char **restrict, int) + _GL_ARG_NONNULL ((1))); # endif -_GL_CXXALIAS_SYS (strtoumax, uintmax_t, (const char *, char **, int)); +_GL_CXXALIAS_SYS (strtoumax, uintmax_t, + (const char *restrict, char **restrict, int)); # endif _GL_CXXALIASWARN (strtoumax); #elif defined GNULIB_POSIXCHECK diff -Nru gdb-9.1/gnulib/import/isblank.c gdb-10.2/gnulib/import/isblank.c --- gdb-9.1/gnulib/import/isblank.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/isblank.c 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,33 @@ +/* Test whether a character is a blank. + + Copyright (C) 2009-2020 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include <ctype.h> + +int +isblank (int c) +{ + /* On all known platforms, in all predefined locales, isblank(c) is likely + equivalent with (c == ' ' || c == '\t'). Look at the glibc definition + (in glibc/localedata/locales/i18n): The "blank" characters are '\t', ' ', + U+1680, U+180E, U+2000..U+2006, U+2008..U+200A, U+205F, U+3000, and none + except the first two is present in a common 8-bit encoding. Therefore + the substitute for other platforms is not more complicated than this. */ + return (c == ' ' || c == '\t'); +} diff -Nru gdb-9.1/gnulib/import/isnan.c gdb-10.2/gnulib/import/isnan.c --- gdb-9.1/gnulib/import/isnan.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/isnan.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Test for NaN that does not need libm. - Copyright (C) 2007-2016 Free Software Foundation, Inc. + Copyright (C) 2007-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -12,7 +12,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */ diff -Nru gdb-9.1/gnulib/import/isnand.c gdb-10.2/gnulib/import/isnand.c --- gdb-9.1/gnulib/import/isnand.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/isnand.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Test for NaN that does not need libm. - Copyright (C) 2008-2016 Free Software Foundation, Inc. + Copyright (C) 2008-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -12,7 +12,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2008. */ diff -Nru gdb-9.1/gnulib/import/isnand-nolibm.h gdb-10.2/gnulib/import/isnand-nolibm.h --- gdb-9.1/gnulib/import/isnand-nolibm.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/isnand-nolibm.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Test for NaN that does not need libm. - Copyright (C) 2007-2016 Free Software Foundation, Inc. + Copyright (C) 2007-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -12,7 +12,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ #if HAVE_ISNAND_IN_LIBC /* Get declaration of isnan macro. */ diff -Nru gdb-9.1/gnulib/import/isnanl.c gdb-10.2/gnulib/import/isnanl.c --- gdb-9.1/gnulib/import/isnanl.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/isnanl.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Test for NaN that does not need libm. - Copyright (C) 2007, 2009-2016 Free Software Foundation, Inc. + Copyright (C) 2007, 2009-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -12,7 +12,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */ diff -Nru gdb-9.1/gnulib/import/isnanl-nolibm.h gdb-10.2/gnulib/import/isnanl-nolibm.h --- gdb-9.1/gnulib/import/isnanl-nolibm.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/isnanl-nolibm.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Test for NaN that does not need libm. - Copyright (C) 2007-2016 Free Software Foundation, Inc. + Copyright (C) 2007-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -12,12 +12,15 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ #if HAVE_ISNANL_IN_LIBC /* Get declaration of isnan macro or (older) isnanl function. */ # include <math.h> -# if __GNUC__ >= 4 +# ifndef __has_builtin +# define __has_builtin(name) 0 +# endif +# if __GNUC__ >= 4 && (!defined __clang__ || __has_builtin (__builtin_isnanl)) /* GCC 4.0 and newer provides three built-ins for isnan. */ # undef isnanl # define isnanl(x) __builtin_isnanl ((long double)(x)) diff -Nru gdb-9.1/gnulib/import/itold.c gdb-10.2/gnulib/import/itold.c --- gdb-9.1/gnulib/import/itold.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/itold.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Replacement for 'int' to 'long double' conversion routine. - Copyright (C) 2011-2016 Free Software Foundation, Inc. + Copyright (C) 2011-2020 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. This program is free software: you can redistribute it and/or modify @@ -13,7 +13,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> diff -Nru gdb-9.1/gnulib/import/lc-charset-dispatch.c gdb-10.2/gnulib/import/lc-charset-dispatch.c --- gdb-9.1/gnulib/import/lc-charset-dispatch.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/lc-charset-dispatch.c 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,82 @@ +/* Dispatching based on the current locale's character encoding. + Copyright (C) 2018-2020 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2018. */ + +#include <config.h> + +/* Specification. */ +#include "lc-charset-dispatch.h" + +#if GNULIB_defined_mbstate_t + +# include "localcharset.h" +# include "streq.h" + +# if GNULIB_WCHAR_SINGLE +/* When we know that the locale does not change, provide a speedup by + caching the value of locale_encoding_classification. */ +# define locale_encoding_classification_cached locale_encoding_classification +# else +/* By default, don't make assumptions, hence no caching. */ +# define locale_encoding_classification_uncached locale_encoding_classification +# endif + +# if GNULIB_WCHAR_SINGLE +static inline +# endif +enc_t +locale_encoding_classification_uncached (void) +{ + const char *encoding = locale_charset (); + if (STREQ_OPT (encoding, "UTF-8", 'U', 'T', 'F', '-', '8', 0, 0, 0, 0)) + return enc_utf8; + if (STREQ_OPT (encoding, "EUC-JP", 'E', 'U', 'C', '-', 'J', 'P', 0, 0, 0)) + return enc_eucjp; + if (STREQ_OPT (encoding, "EUC-KR", 'E', 'U', 'C', '-', 'K', 'R', 0, 0, 0) + || STREQ_OPT (encoding, "GB2312", 'G', 'B', '2', '3', '1', '2', 0, 0, 0) + || STREQ_OPT (encoding, "BIG5", 'B', 'I', 'G', '5', 0, 0, 0, 0, 0)) + return enc_94; + if (STREQ_OPT (encoding, "EUC-TW", 'E', 'U', 'C', '-', 'T', 'W', 0, 0, 0)) + return enc_euctw; + if (STREQ_OPT (encoding, "GB18030", 'G', 'B', '1', '8', '0', '3', '0', 0, 0)) + return enc_gb18030; + if (STREQ_OPT (encoding, "SJIS", 'S', 'J', 'I', 'S', 0, 0, 0, 0, 0)) + return enc_sjis; + return enc_other; +} + +# if GNULIB_WCHAR_SINGLE + +static int cached_locale_enc = -1; + +enc_t +locale_encoding_classification_cached (void) +{ + if (cached_locale_enc < 0) + cached_locale_enc = locale_encoding_classification_uncached (); + return cached_locale_enc; +} + +# endif + +#else + +/* This declaration is solely to ensure that after preprocessing + this file is never empty. */ +typedef int dummy; + +#endif diff -Nru gdb-9.1/gnulib/import/lc-charset-dispatch.h gdb-10.2/gnulib/import/lc-charset-dispatch.h --- gdb-9.1/gnulib/import/lc-charset-dispatch.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/lc-charset-dispatch.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,40 @@ +/* Dispatching based on the current locale's character encoding. + Copyright (C) 2018-2020 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2018. */ + +#include <wchar.h> + +#if GNULIB_defined_mbstate_t + +/* A classification of special values of the encoding of the current locale. */ +typedef enum + { + enc_other, /* other */ + enc_utf8, /* UTF-8 */ + enc_eucjp, /* EUC-JP */ + enc_94, /* EUC-KR, GB2312, BIG5 */ + enc_euctw, /* EUC-TW */ + enc_gb18030, /* GB18030 */ + enc_sjis /* SJIS */ + } + enc_t; + +/* Returns a classification of special values of the encoding of the current + locale. */ +extern enc_t locale_encoding_classification (void); + +#endif diff -Nru gdb-9.1/gnulib/import/libc-config.h gdb-10.2/gnulib/import/libc-config.h --- gdb-9.1/gnulib/import/libc-config.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/libc-config.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,184 @@ +/* System definitions for code taken from the GNU C Library + + Copyright 2017-2020 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 3 of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this program; if not, see + <https://www.gnu.org/licenses/>. */ + +/* Written by Paul Eggert. */ + +/* This is intended to be a good-enough substitute for glibc system + macros like those defined in <sys/cdefs.h>, so that Gnulib code + shared with glibc can do this as the first #include: + + #ifndef _LIBC + # include <libc-config.h> + #endif + + When compiled as part of glibc this is a no-op; when compiled as + part of Gnulib this includes Gnulib's <config.h> and defines macros + that glibc library code would normally assume. */ + +#include <config.h> + +/* On glibc this includes <features.h> and <sys/cdefs.h> and #defines + _FEATURES_H, __WORDSIZE, and __set_errno. On FreeBSD 11 it + includes <sys/cdefs.h> which defines __nonnull. Elsewhere it + is harmless. */ +#include <errno.h> + +/* From glibc <errno.h>. */ +#ifndef __set_errno +# define __set_errno(val) (errno = (val)) +#endif + +/* From glibc <features.h>. */ + +#ifndef __GNUC_PREREQ +# if defined __GNUC__ && defined __GNUC_MINOR__ +# define __GNUC_PREREQ(maj, min) ((maj) < __GNUC__ + ((min) <= __GNUC_MINOR__)) +# else +# define __GNUC_PREREQ(maj, min) 0 +# endif +#endif + +#ifndef __glibc_clang_prereq +# if defined __clang_major__ && defined __clang_minor__ +# ifdef __apple_build_version__ +/* Apple for some reason renumbers __clang_major__ and __clang_minor__. + Gnulib code uses only __glibc_clang_prereq (3, 5); map it to + 6000000 <= __apple_build_version__. Support for other calls to + __glibc_clang_prereq can be added here as needed. */ +# define __glibc_clang_prereq(maj, min) \ + ((maj) == 3 && (min) == 5 ? 6000000 <= __apple_build_version__ : 0) +# else +# define __glibc_clang_prereq(maj, min) \ + ((maj) < __clang_major__ + ((min) <= __clang_minor__)) +# endif +# else +# define __glibc_clang_prereq(maj, min) 0 +# endif +#endif + + +/* Prepare to include <cdefs.h>, which is our copy of glibc + <sys/cdefs.h>. */ + +/* Define _FEATURES_H so that <cdefs.h> does not include <features.h>. */ +#ifndef _FEATURES_H +# define _FEATURES_H 1 +#endif +/* Define __WORDSIZE so that <cdefs.h> does not attempt to include + nonexistent files. Make it a syntax error, since Gnulib does not + use __WORDSIZE now, and if Gnulib uses it later the syntax error + will let us know that __WORDSIZE needs configuring. */ +#ifndef __WORDSIZE +# define __WORDSIZE %%% +#endif +/* Undef the macros unconditionally defined by our copy of glibc + <sys/cdefs.h>, so that they do not clash with any system-defined + versions. */ +#undef _SYS_CDEFS_H +#undef __ASMNAME +#undef __ASMNAME2 +#undef __BEGIN_DECLS +#undef __CONCAT +#undef __END_DECLS +#undef __HAVE_GENERIC_SELECTION +#undef __LDBL_COMPAT +#undef __LDBL_REDIR +#undef __LDBL_REDIR1 +#undef __LDBL_REDIR1_DECL +#undef __LDBL_REDIR1_NTH +#undef __LDBL_REDIR_DECL +#undef __LDBL_REDIR_NTH +#undef __LEAF +#undef __LEAF_ATTR +#undef __NTH +#undef __NTHNL +#undef __P +#undef __PMT +#undef __REDIRECT +#undef __REDIRECT_LDBL +#undef __REDIRECT_NTH +#undef __REDIRECT_NTHNL +#undef __REDIRECT_NTH_LDBL +#undef __STRING +#undef __THROW +#undef __THROWNL +#undef __always_inline +#undef __attribute__ +#undef __attribute_alloc_size__ +#undef __attribute_artificial__ +#undef __attribute_const__ +#undef __attribute_deprecated__ +#undef __attribute_deprecated_msg__ +#undef __attribute_format_arg__ +#undef __attribute_format_strfmon__ +#undef __attribute_malloc__ +#undef __attribute_noinline__ +#undef __attribute_nonstring__ +#undef __attribute_pure__ +#undef __attribute_used__ +#undef __attribute_warn_unused_result__ +#undef __bos +#undef __bos0 +#undef __errordecl +#undef __extension__ +#undef __extern_always_inline +#undef __extern_inline +#undef __flexarr +#undef __fortify_function +#undef __glibc_c99_flexarr_available +#undef __glibc_clang_has_extension +#undef __glibc_likely +#undef __glibc_macro_warning +#undef __glibc_macro_warning1 +#undef __glibc_unlikely +#undef __inline +#undef __ptr_t +#undef __restrict +#undef __restrict_arr +#undef __va_arg_pack +#undef __va_arg_pack_len +#undef __warnattr +#undef __warndecl + +/* Include our copy of glibc <sys/cdefs.h>. */ +#include <cdefs.h> + +/* <cdefs.h> __inline is too pessimistic for non-GCC. */ +#undef __inline +#ifndef HAVE___INLINE +# if 199901 <= __STDC_VERSION__ || defined inline +# define __inline inline +# else +# define __inline +# endif +#endif + + +/* A substitute for glibc <libc-symbols.h>, good enough for Gnulib. */ +#define attribute_hidden +#define libc_hidden_proto(name, ...) +#define libc_hidden_def(name) +#define libc_hidden_weak(name) +#define libc_hidden_ver(local, name) +#define strong_alias(name, aliasname) +#define weak_alias(name, aliasname) + +/* A substitute for glibc <shlib-compat.h>, good enough for Gnulib. */ +#define SHLIB_COMPAT(lib, introduced, obsoleted) 0 +#define compat_symbol(lib, local, symbol, version) extern int dummy +#define versioned_symbol(lib, local, symbol, version) extern int dummy diff -Nru gdb-9.1/gnulib/import/limits.in.h gdb-10.2/gnulib/import/limits.in.h --- gdb-9.1/gnulib/import/limits.in.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/limits.in.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* A GNU-like <limits.h>. - Copyright 2016 Free Software Foundation, Inc. + Copyright 2016-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -13,21 +13,65 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, see <http://www.gnu.org/licenses/>. */ - -#ifndef _@GUARD_PREFIX@_LIMITS_H + along with this program; if not, see <https://www.gnu.org/licenses/>. */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ -/* The include_next requires a split double-inclusion guard. */ +#if defined _GL_ALREADY_INCLUDING_LIMITS_H +/* Special invocation convention: + On Haiku/x86_64, we have a sequence of nested includes + <limits.h> -> <syslimits.h> -> <limits.h>. + In this situation, LONG_MAX and INT_MAX are not yet defined, + therefore we should not attempt to define LONG_BIT. */ + #@INCLUDE_NEXT@ @NEXT_LIMITS_H@ +#else +/* Normal invocation convention. */ + +#ifndef _@GUARD_PREFIX@_LIMITS_H + +# define _GL_ALREADY_INCLUDING_LIMITS_H + +/* The include_next requires a split double-inclusion guard. */ +# @INCLUDE_NEXT@ @NEXT_LIMITS_H@ + +# undef _GL_ALREADY_INCLUDING_LIMITS_H + #ifndef _@GUARD_PREFIX@_LIMITS_H #define _@GUARD_PREFIX@_LIMITS_H +#ifndef LLONG_MIN +# if defined LONG_LONG_MIN /* HP-UX 11.31 */ +# define LLONG_MIN LONG_LONG_MIN +# elif defined LONGLONG_MIN /* IRIX 6.5 */ +# define LLONG_MIN LONGLONG_MIN +# elif defined __GNUC__ +# define LLONG_MIN (- __LONG_LONG_MAX__ - 1LL) +# endif +#endif +#ifndef LLONG_MAX +# if defined LONG_LONG_MAX /* HP-UX 11.31 */ +# define LLONG_MAX LONG_LONG_MAX +# elif defined LONGLONG_MAX /* IRIX 6.5 */ +# define LLONG_MAX LONGLONG_MAX +# elif defined __GNUC__ +# define LLONG_MAX __LONG_LONG_MAX__ +# endif +#endif +#ifndef ULLONG_MAX +# if defined ULONG_LONG_MAX /* HP-UX 11.31 */ +# define ULLONG_MAX ULONG_LONG_MAX +# elif defined ULONGLONG_MAX /* IRIX 6.5 */ +# define ULLONG_MAX ULONGLONG_MAX +# elif defined __GNUC__ +# define ULLONG_MAX (__LONG_LONG_MAX__ * 2ULL + 1ULL) +# endif +#endif + /* The number of usable bits in an unsigned or signed integer type with minimum value MIN and maximum value MAX, as an int expression suitable in #if. Cover all known practical hosts. This @@ -42,6 +86,19 @@ #define _GL_COB8(n) (_GL_COB4 ((n) >> 4) + _GL_COB4 (n)) #define _GL_COB4(n) (!!((n) & 8) + !!((n) & 4) + !!((n) & 2) + !!((n) & 1)) +#ifndef WORD_BIT +/* Assume 'int' is 32 bits wide. */ +# define WORD_BIT 32 +#endif +#ifndef LONG_BIT +/* Assume 'long' is 32 or 64 bits wide. */ +# if LONG_MAX == INT_MAX +# define LONG_BIT 32 +# else +# define LONG_BIT 64 +# endif +#endif + /* Macros specified by ISO/IEC TS 18661-1:2014. */ #if (! defined ULLONG_WIDTH \ @@ -61,3 +118,4 @@ #endif /* _@GUARD_PREFIX@_LIMITS_H */ #endif /* _@GUARD_PREFIX@_LIMITS_H */ +#endif diff -Nru gdb-9.1/gnulib/import/localcharset.c gdb-10.2/gnulib/import/localcharset.c --- gdb-9.1/gnulib/import/localcharset.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/localcharset.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Determine a canonical name for the current locale's character encoding. - Copyright (C) 2000-2006, 2008-2016 Free Software Foundation, Inc. + Copyright (C) 2000-2006, 2008-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -13,7 +13,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along - with this program; if not, see <http://www.gnu.org/licenses/>. */ + with this program; if not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>. */ @@ -22,7 +22,6 @@ /* Specification. */ #include "localcharset.h" -#include <fcntl.h> #include <stddef.h> #include <stdio.h> #include <string.h> @@ -32,7 +31,7 @@ # define DARWIN7 /* Darwin 7 or newer, i.e. Mac OS X 10.3 or newer */ #endif -#if defined _WIN32 || defined __WIN32__ +#if defined _WIN32 && !defined __CYGWIN__ # define WINDOWS_NATIVE # include <locale.h> #endif @@ -45,11 +44,10 @@ #endif #if !defined WINDOWS_NATIVE -# include <unistd.h> # if HAVE_LANGINFO_CODESET # include <langinfo.h> # else -# if 0 /* see comment below */ +# if 0 /* see comment regarding use of setlocale(), below */ # include <locale.h> # endif # endif @@ -60,6 +58,9 @@ #elif defined WINDOWS_NATIVE # define WIN32_LEAN_AND_MEAN # include <windows.h> + /* For the use of setlocale() below, the Gnulib override in setlocale.c is + not needed; see the platform lists in setlocale_null.m4. */ +# undef setlocale #endif #if defined OS2 # define INCL_DOS @@ -71,318 +72,755 @@ # include <xlocale.h> #endif -#if ENABLE_RELOCATABLE -# include "relocatable.h" -#else -# define relocate(pathname) (pathname) -#endif -/* Get LIBDIR. */ -#ifndef LIBDIR -# include "configmake.h" -#endif +#if HAVE_LANGINFO_CODESET || defined WINDOWS_NATIVE || defined OS2 -/* Define O_NOFOLLOW to 0 on platforms where it does not exist. */ -#ifndef O_NOFOLLOW -# define O_NOFOLLOW 0 -#endif +/* On these platforms, we use a mapping from non-canonical encoding name + to GNU canonical encoding name. */ -#if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__ - /* Native Windows, Cygwin, OS/2, DOS */ -# define ISSLASH(C) ((C) == '/' || (C) == '\\') -#endif - -#ifndef DIRECTORY_SEPARATOR -# define DIRECTORY_SEPARATOR '/' -#endif - -#ifndef ISSLASH -# define ISSLASH(C) ((C) == DIRECTORY_SEPARATOR) -#endif +/* With glibc-2.1 or newer, we don't need any canonicalization, + because glibc has iconv and both glibc and libiconv support all + GNU canonical names directly. */ +# if !((defined __GNU_LIBRARY__ && __GLIBC__ >= 2) || defined __UCLIBC__) -#if HAVE_DECL_GETC_UNLOCKED -# undef getc -# define getc getc_unlocked -#endif - -/* The following static variable is declared 'volatile' to avoid a - possible multithread problem in the function get_charset_aliases. If we - are running in a threaded environment, and if two threads initialize - 'charset_aliases' simultaneously, both will produce the same value, - and everything will be ok if the two assignments to 'charset_aliases' - are atomic. But I don't know what will happen if the two assignments mix. */ -#if __STDC__ != 1 -# define volatile /* empty */ -#endif -/* Pointer to the contents of the charset.alias file, if it has already been - read, else NULL. Its format is: - ALIAS_1 '\0' CANONICAL_1 '\0' ... ALIAS_n '\0' CANONICAL_n '\0' '\0' */ -static const char * volatile charset_aliases; - -/* Return a pointer to the contents of the charset.alias file. */ -static const char * -get_charset_aliases (void) +struct table_entry { - const char *cp; - - cp = charset_aliases; - if (cp == NULL) - { -#if !(defined DARWIN7 || defined VMS || defined WINDOWS_NATIVE || defined __CYGWIN__ || defined OS2) - const char *dir; - const char *base = "charset.alias"; - char *file_name; - - /* Make it possible to override the charset.alias location. This is - necessary for running the testsuite before "make install". */ - dir = getenv ("CHARSETALIASDIR"); - if (dir == NULL || dir[0] == '\0') - dir = relocate (LIBDIR); - - /* Concatenate dir and base into freshly allocated file_name. */ - { - size_t dir_len = strlen (dir); - size_t base_len = strlen (base); - int add_slash = (dir_len > 0 && !ISSLASH (dir[dir_len - 1])); - file_name = (char *) malloc (dir_len + add_slash + base_len + 1); - if (file_name != NULL) - { - memcpy (file_name, dir, dir_len); - if (add_slash) - file_name[dir_len] = DIRECTORY_SEPARATOR; - memcpy (file_name + dir_len + add_slash, base, base_len + 1); - } - } - - if (file_name == NULL) - /* Out of memory. Treat the file as empty. */ - cp = ""; - else - { - int fd; - - /* Open the file. Reject symbolic links on platforms that support - O_NOFOLLOW. This is a security feature. Without it, an attacker - could retrieve parts of the contents (namely, the tail of the - first line that starts with "* ") of an arbitrary file by placing - a symbolic link to that file under the name "charset.alias" in - some writable directory and defining the environment variable - CHARSETALIASDIR to point to that directory. */ - fd = open (file_name, - O_RDONLY | (HAVE_WORKING_O_NOFOLLOW ? O_NOFOLLOW : 0)); - if (fd < 0) - /* File not found. Treat it as empty. */ - cp = ""; - else - { - FILE *fp; - - fp = fdopen (fd, "r"); - if (fp == NULL) - { - /* Out of memory. Treat the file as empty. */ - close (fd); - cp = ""; - } - else - { - /* Parse the file's contents. */ - char *res_ptr = NULL; - size_t res_size = 0; - - for (;;) - { - int c; - char buf1[50+1]; - char buf2[50+1]; - size_t l1, l2; - char *old_res_ptr; - - c = getc (fp); - if (c == EOF) - break; - if (c == '\n' || c == ' ' || c == '\t') - continue; - if (c == '#') - { - /* Skip comment, to end of line. */ - do - c = getc (fp); - while (!(c == EOF || c == '\n')); - if (c == EOF) - break; - continue; - } - ungetc (c, fp); - if (fscanf (fp, "%50s %50s", buf1, buf2) < 2) - break; - l1 = strlen (buf1); - l2 = strlen (buf2); - old_res_ptr = res_ptr; - if (res_size == 0) - { - res_size = l1 + 1 + l2 + 1; - res_ptr = (char *) malloc (res_size + 1); - } - else - { - res_size += l1 + 1 + l2 + 1; - res_ptr = (char *) realloc (res_ptr, res_size + 1); - } - if (res_ptr == NULL) - { - /* Out of memory. */ - res_size = 0; - free (old_res_ptr); - break; - } - strcpy (res_ptr + res_size - (l2 + 1) - (l1 + 1), buf1); - strcpy (res_ptr + res_size - (l2 + 1), buf2); - } - fclose (fp); - if (res_size == 0) - cp = ""; - else - { - *(res_ptr + res_size) = '\0'; - cp = res_ptr; - } - } - } + const char alias[11+1]; + const char canonical[11+1]; +}; + +/* Table of platform-dependent mappings, sorted in ascending order. */ +static const struct table_entry alias_table[] = + { +# if defined __FreeBSD__ /* FreeBSD */ + /*{ "ARMSCII-8", "ARMSCII-8" },*/ + { "Big5", "BIG5" }, + { "C", "ASCII" }, + /*{ "CP1131", "CP1131" },*/ + /*{ "CP1251", "CP1251" },*/ + /*{ "CP866", "CP866" },*/ + /*{ "GB18030", "GB18030" },*/ + /*{ "GB2312", "GB2312" },*/ + /*{ "GBK", "GBK" },*/ + /*{ "ISCII-DEV", "?" },*/ + { "ISO8859-1", "ISO-8859-1" }, + { "ISO8859-13", "ISO-8859-13" }, + { "ISO8859-15", "ISO-8859-15" }, + { "ISO8859-2", "ISO-8859-2" }, + { "ISO8859-5", "ISO-8859-5" }, + { "ISO8859-7", "ISO-8859-7" }, + { "ISO8859-9", "ISO-8859-9" }, + /*{ "KOI8-R", "KOI8-R" },*/ + /*{ "KOI8-U", "KOI8-U" },*/ + { "SJIS", "SHIFT_JIS" }, + { "US-ASCII", "ASCII" }, + { "eucCN", "GB2312" }, + { "eucJP", "EUC-JP" }, + { "eucKR", "EUC-KR" } +# define alias_table_defined +# endif +# if defined __NetBSD__ /* NetBSD */ + { "646", "ASCII" }, + /*{ "ARMSCII-8", "ARMSCII-8" },*/ + /*{ "BIG5", "BIG5" },*/ + { "Big5-HKSCS", "BIG5-HKSCS" }, + /*{ "CP1251", "CP1251" },*/ + /*{ "CP866", "CP866" },*/ + /*{ "GB18030", "GB18030" },*/ + /*{ "GB2312", "GB2312" },*/ + { "ISO8859-1", "ISO-8859-1" }, + { "ISO8859-13", "ISO-8859-13" }, + { "ISO8859-15", "ISO-8859-15" }, + { "ISO8859-2", "ISO-8859-2" }, + { "ISO8859-4", "ISO-8859-4" }, + { "ISO8859-5", "ISO-8859-5" }, + { "ISO8859-7", "ISO-8859-7" }, + /*{ "KOI8-R", "KOI8-R" },*/ + /*{ "KOI8-U", "KOI8-U" },*/ + /*{ "PT154", "PT154" },*/ + { "SJIS", "SHIFT_JIS" }, + { "eucCN", "GB2312" }, + { "eucJP", "EUC-JP" }, + { "eucKR", "EUC-KR" }, + { "eucTW", "EUC-TW" } +# define alias_table_defined +# endif +# if defined __OpenBSD__ /* OpenBSD */ + { "646", "ASCII" }, + { "ISO8859-1", "ISO-8859-1" }, + { "ISO8859-13", "ISO-8859-13" }, + { "ISO8859-15", "ISO-8859-15" }, + { "ISO8859-2", "ISO-8859-2" }, + { "ISO8859-4", "ISO-8859-4" }, + { "ISO8859-5", "ISO-8859-5" }, + { "ISO8859-7", "ISO-8859-7" }, + { "US-ASCII", "ASCII" } +# define alias_table_defined +# endif +# if defined __APPLE__ && defined __MACH__ /* Mac OS X */ + /* Darwin 7.5 has nl_langinfo(CODESET), but sometimes its value is + useless: + - It returns the empty string when LANG is set to a locale of the + form ll_CC, although ll_CC/LC_CTYPE is a symlink to an UTF-8 + LC_CTYPE file. + - The environment variables LANG, LC_CTYPE, LC_ALL are not set by + the system; nl_langinfo(CODESET) returns "US-ASCII" in this case. + - The documentation says: + "... all code that calls BSD system routines should ensure + that the const *char parameters of these routines are in UTF-8 + encoding. All BSD system functions expect their string + parameters to be in UTF-8 encoding and nothing else." + It also says + "An additional caveat is that string parameters for files, + paths, and other file-system entities must be in canonical + UTF-8. In a canonical UTF-8 Unicode string, all decomposable + characters are decomposed ..." + but this is not true: You can pass non-decomposed UTF-8 strings + to file system functions, and it is the OS which will convert + them to decomposed UTF-8 before accessing the file system. + - The Apple Terminal application displays UTF-8 by default. + - However, other applications are free to use different encodings: + - xterm uses ISO-8859-1 by default. + - TextEdit uses MacRoman by default. + We prefer UTF-8 over decomposed UTF-8-MAC because one should + minimize the use of decomposed Unicode. Unfortunately, through the + Darwin file system, decomposed UTF-8 strings are leaked into user + space nevertheless. + Then there are also the locales with encodings other than US-ASCII + and UTF-8. These locales can be occasionally useful to users (e.g. + when grepping through ISO-8859-1 encoded text files), when all their + file names are in US-ASCII. + */ + { "ARMSCII-8", "ARMSCII-8" }, + { "Big5", "BIG5" }, + { "Big5HKSCS", "BIG5-HKSCS" }, + { "CP1131", "CP1131" }, + { "CP1251", "CP1251" }, + { "CP866", "CP866" }, + { "CP949", "CP949" }, + { "GB18030", "GB18030" }, + { "GB2312", "GB2312" }, + { "GBK", "GBK" }, + /*{ "ISCII-DEV", "?" },*/ + { "ISO8859-1", "ISO-8859-1" }, + { "ISO8859-13", "ISO-8859-13" }, + { "ISO8859-15", "ISO-8859-15" }, + { "ISO8859-2", "ISO-8859-2" }, + { "ISO8859-4", "ISO-8859-4" }, + { "ISO8859-5", "ISO-8859-5" }, + { "ISO8859-7", "ISO-8859-7" }, + { "ISO8859-9", "ISO-8859-9" }, + { "KOI8-R", "KOI8-R" }, + { "KOI8-U", "KOI8-U" }, + { "PT154", "PT154" }, + { "SJIS", "SHIFT_JIS" }, + { "eucCN", "GB2312" }, + { "eucJP", "EUC-JP" }, + { "eucKR", "EUC-KR" } +# define alias_table_defined +# endif +# if defined _AIX /* AIX */ + /*{ "GBK", "GBK" },*/ + { "IBM-1046", "CP1046" }, + { "IBM-1124", "CP1124" }, + { "IBM-1129", "CP1129" }, + { "IBM-1252", "CP1252" }, + { "IBM-850", "CP850" }, + { "IBM-856", "CP856" }, + { "IBM-921", "ISO-8859-13" }, + { "IBM-922", "CP922" }, + { "IBM-932", "CP932" }, + { "IBM-943", "CP943" }, + { "IBM-eucCN", "GB2312" }, + { "IBM-eucJP", "EUC-JP" }, + { "IBM-eucKR", "EUC-KR" }, + { "IBM-eucTW", "EUC-TW" }, + { "ISO8859-1", "ISO-8859-1" }, + { "ISO8859-15", "ISO-8859-15" }, + { "ISO8859-2", "ISO-8859-2" }, + { "ISO8859-5", "ISO-8859-5" }, + { "ISO8859-6", "ISO-8859-6" }, + { "ISO8859-7", "ISO-8859-7" }, + { "ISO8859-8", "ISO-8859-8" }, + { "ISO8859-9", "ISO-8859-9" }, + { "TIS-620", "TIS-620" }, + /*{ "UTF-8", "UTF-8" },*/ + { "big5", "BIG5" } +# define alias_table_defined +# endif +# if defined __hpux /* HP-UX */ + { "SJIS", "SHIFT_JIS" }, + { "arabic8", "HP-ARABIC8" }, + { "big5", "BIG5" }, + { "cp1251", "CP1251" }, + { "eucJP", "EUC-JP" }, + { "eucKR", "EUC-KR" }, + { "eucTW", "EUC-TW" }, + { "gb18030", "GB18030" }, + { "greek8", "HP-GREEK8" }, + { "hebrew8", "HP-HEBREW8" }, + { "hkbig5", "BIG5-HKSCS" }, + { "hp15CN", "GB2312" }, + { "iso88591", "ISO-8859-1" }, + { "iso885913", "ISO-8859-13" }, + { "iso885915", "ISO-8859-15" }, + { "iso88592", "ISO-8859-2" }, + { "iso88594", "ISO-8859-4" }, + { "iso88595", "ISO-8859-5" }, + { "iso88596", "ISO-8859-6" }, + { "iso88597", "ISO-8859-7" }, + { "iso88598", "ISO-8859-8" }, + { "iso88599", "ISO-8859-9" }, + { "kana8", "HP-KANA8" }, + { "koi8r", "KOI8-R" }, + { "roman8", "HP-ROMAN8" }, + { "tis620", "TIS-620" }, + { "turkish8", "HP-TURKISH8" }, + { "utf8", "UTF-8" } +# define alias_table_defined +# endif +# if defined __sgi /* IRIX */ + { "ISO8859-1", "ISO-8859-1" }, + { "ISO8859-15", "ISO-8859-15" }, + { "ISO8859-2", "ISO-8859-2" }, + { "ISO8859-5", "ISO-8859-5" }, + { "ISO8859-7", "ISO-8859-7" }, + { "ISO8859-9", "ISO-8859-9" }, + { "eucCN", "GB2312" }, + { "eucJP", "EUC-JP" }, + { "eucKR", "EUC-KR" }, + { "eucTW", "EUC-TW" } +# define alias_table_defined +# endif +# if defined __osf__ /* OSF/1 */ + /*{ "GBK", "GBK" },*/ + { "ISO8859-1", "ISO-8859-1" }, + { "ISO8859-15", "ISO-8859-15" }, + { "ISO8859-2", "ISO-8859-2" }, + { "ISO8859-4", "ISO-8859-4" }, + { "ISO8859-5", "ISO-8859-5" }, + { "ISO8859-7", "ISO-8859-7" }, + { "ISO8859-8", "ISO-8859-8" }, + { "ISO8859-9", "ISO-8859-9" }, + { "KSC5601", "CP949" }, + { "SJIS", "SHIFT_JIS" }, + { "TACTIS", "TIS-620" }, + /*{ "UTF-8", "UTF-8" },*/ + { "big5", "BIG5" }, + { "cp850", "CP850" }, + { "dechanyu", "DEC-HANYU" }, + { "dechanzi", "GB2312" }, + { "deckanji", "DEC-KANJI" }, + { "deckorean", "EUC-KR" }, + { "eucJP", "EUC-JP" }, + { "eucKR", "EUC-KR" }, + { "eucTW", "EUC-TW" }, + { "sdeckanji", "EUC-JP" } +# define alias_table_defined +# endif +# if defined __sun /* Solaris */ + { "5601", "EUC-KR" }, + { "646", "ASCII" }, + /*{ "BIG5", "BIG5" },*/ + { "Big5-HKSCS", "BIG5-HKSCS" }, + { "GB18030", "GB18030" }, + /*{ "GBK", "GBK" },*/ + { "ISO8859-1", "ISO-8859-1" }, + { "ISO8859-11", "TIS-620" }, + { "ISO8859-13", "ISO-8859-13" }, + { "ISO8859-15", "ISO-8859-15" }, + { "ISO8859-2", "ISO-8859-2" }, + { "ISO8859-3", "ISO-8859-3" }, + { "ISO8859-4", "ISO-8859-4" }, + { "ISO8859-5", "ISO-8859-5" }, + { "ISO8859-6", "ISO-8859-6" }, + { "ISO8859-7", "ISO-8859-7" }, + { "ISO8859-8", "ISO-8859-8" }, + { "ISO8859-9", "ISO-8859-9" }, + { "PCK", "SHIFT_JIS" }, + { "TIS620.2533", "TIS-620" }, + /*{ "UTF-8", "UTF-8" },*/ + { "ansi-1251", "CP1251" }, + { "cns11643", "EUC-TW" }, + { "eucJP", "EUC-JP" }, + { "gb2312", "GB2312" }, + { "koi8-r", "KOI8-R" } +# define alias_table_defined +# endif +# if defined __minix /* Minix */ + { "646", "ASCII" } +# define alias_table_defined +# endif +# if defined WINDOWS_NATIVE || defined __CYGWIN__ /* Windows */ + { "CP1361", "JOHAB" }, + { "CP20127", "ASCII" }, + { "CP20866", "KOI8-R" }, + { "CP20936", "GB2312" }, + { "CP21866", "KOI8-RU" }, + { "CP28591", "ISO-8859-1" }, + { "CP28592", "ISO-8859-2" }, + { "CP28593", "ISO-8859-3" }, + { "CP28594", "ISO-8859-4" }, + { "CP28595", "ISO-8859-5" }, + { "CP28596", "ISO-8859-6" }, + { "CP28597", "ISO-8859-7" }, + { "CP28598", "ISO-8859-8" }, + { "CP28599", "ISO-8859-9" }, + { "CP28605", "ISO-8859-15" }, + { "CP38598", "ISO-8859-8" }, + { "CP51932", "EUC-JP" }, + { "CP51936", "GB2312" }, + { "CP51949", "EUC-KR" }, + { "CP51950", "EUC-TW" }, + { "CP54936", "GB18030" }, + { "CP65001", "UTF-8" }, + { "CP936", "GBK" } +# define alias_table_defined +# endif +# if defined OS2 /* OS/2 */ + /* The list of encodings is taken from "List of OS/2 Codepages" + by Alex Taylor: + <http://altsan.org/os2/toolkits/uls/index.html#codepages>. + See also "__convcp() of kLIBC": + <https://github.com/bitwiseworks/libc/blob/master/src/emx/src/lib/locale/__convcp.c>. */ + { "CP1004", "CP1252" }, + /*{ "CP1041", "CP943" },*/ + /*{ "CP1088", "CP949" },*/ + { "CP1089", "ISO-8859-6" }, + /*{ "CP1114", "CP950" },*/ + /*{ "CP1115", "GB2312" },*/ + { "CP1208", "UTF-8" }, + /*{ "CP1380", "GB2312" },*/ + { "CP1381", "GB2312" }, + { "CP1383", "GB2312" }, + { "CP1386", "GBK" }, + /*{ "CP301", "CP943" },*/ + { "CP3372", "EUC-JP" }, + { "CP4946", "CP850" }, + /*{ "CP5048", "JIS_X0208-1990" },*/ + /*{ "CP5049", "JIS_X0212-1990" },*/ + /*{ "CP5067", "KS_C_5601-1987" },*/ + { "CP813", "ISO-8859-7" }, + { "CP819", "ISO-8859-1" }, + { "CP878", "KOI8-R" }, + /*{ "CP897", "CP943" },*/ + { "CP912", "ISO-8859-2" }, + { "CP913", "ISO-8859-3" }, + { "CP914", "ISO-8859-4" }, + { "CP915", "ISO-8859-5" }, + { "CP916", "ISO-8859-8" }, + { "CP920", "ISO-8859-9" }, + { "CP921", "ISO-8859-13" }, + { "CP923", "ISO-8859-15" }, + /*{ "CP941", "CP943" },*/ + /*{ "CP947", "CP950" },*/ + /*{ "CP951", "CP949" },*/ + /*{ "CP952", "JIS_X0208-1990" },*/ + /*{ "CP953", "JIS_X0212-1990" },*/ + { "CP954", "EUC-JP" }, + { "CP964", "EUC-TW" }, + { "CP970", "EUC-KR" }, + /*{ "CP971", "KS_C_5601-1987" },*/ + { "IBM-1004", "CP1252" }, + /*{ "IBM-1006", "?" },*/ + /*{ "IBM-1008", "?" },*/ + /*{ "IBM-1041", "CP943" },*/ + /*{ "IBM-1051", "?" },*/ + /*{ "IBM-1088", "CP949" },*/ + { "IBM-1089", "ISO-8859-6" }, + /*{ "IBM-1098", "?" },*/ + /*{ "IBM-1114", "CP950" },*/ + /*{ "IBM-1115", "GB2312" },*/ + /*{ "IBM-1116", "?" },*/ + /*{ "IBM-1117", "?" },*/ + /*{ "IBM-1118", "?" },*/ + /*{ "IBM-1119", "?" },*/ + { "IBM-1124", "CP1124" }, + { "IBM-1125", "CP1125" }, + { "IBM-1131", "CP1131" }, + { "IBM-1208", "UTF-8" }, + { "IBM-1250", "CP1250" }, + { "IBM-1251", "CP1251" }, + { "IBM-1252", "CP1252" }, + { "IBM-1253", "CP1253" }, + { "IBM-1254", "CP1254" }, + { "IBM-1255", "CP1255" }, + { "IBM-1256", "CP1256" }, + { "IBM-1257", "CP1257" }, + /*{ "IBM-1275", "?" },*/ + /*{ "IBM-1276", "?" },*/ + /*{ "IBM-1277", "?" },*/ + /*{ "IBM-1280", "?" },*/ + /*{ "IBM-1281", "?" },*/ + /*{ "IBM-1282", "?" },*/ + /*{ "IBM-1283", "?" },*/ + /*{ "IBM-1380", "GB2312" },*/ + { "IBM-1381", "GB2312" }, + { "IBM-1383", "GB2312" }, + { "IBM-1386", "GBK" }, + /*{ "IBM-301", "CP943" },*/ + { "IBM-3372", "EUC-JP" }, + { "IBM-367", "ASCII" }, + { "IBM-437", "CP437" }, + { "IBM-4946", "CP850" }, + /*{ "IBM-5048", "JIS_X0208-1990" },*/ + /*{ "IBM-5049", "JIS_X0212-1990" },*/ + /*{ "IBM-5067", "KS_C_5601-1987" },*/ + { "IBM-813", "ISO-8859-7" }, + { "IBM-819", "ISO-8859-1" }, + { "IBM-850", "CP850" }, + /*{ "IBM-851", "?" },*/ + { "IBM-852", "CP852" }, + { "IBM-855", "CP855" }, + { "IBM-856", "CP856" }, + { "IBM-857", "CP857" }, + /*{ "IBM-859", "?" },*/ + { "IBM-860", "CP860" }, + { "IBM-861", "CP861" }, + { "IBM-862", "CP862" }, + { "IBM-863", "CP863" }, + { "IBM-864", "CP864" }, + { "IBM-865", "CP865" }, + { "IBM-866", "CP866" }, + /*{ "IBM-868", "?" },*/ + { "IBM-869", "CP869" }, + { "IBM-874", "CP874" }, + { "IBM-878", "KOI8-R" }, + /*{ "IBM-895", "?" },*/ + /*{ "IBM-897", "CP943" },*/ + /*{ "IBM-907", "?" },*/ + /*{ "IBM-909", "?" },*/ + { "IBM-912", "ISO-8859-2" }, + { "IBM-913", "ISO-8859-3" }, + { "IBM-914", "ISO-8859-4" }, + { "IBM-915", "ISO-8859-5" }, + { "IBM-916", "ISO-8859-8" }, + { "IBM-920", "ISO-8859-9" }, + { "IBM-921", "ISO-8859-13" }, + { "IBM-922", "CP922" }, + { "IBM-923", "ISO-8859-15" }, + { "IBM-932", "CP932" }, + /*{ "IBM-941", "CP943" },*/ + /*{ "IBM-942", "?" },*/ + { "IBM-943", "CP943" }, + /*{ "IBM-947", "CP950" },*/ + { "IBM-949", "CP949" }, + { "IBM-950", "CP950" }, + /*{ "IBM-951", "CP949" },*/ + /*{ "IBM-952", "JIS_X0208-1990" },*/ + /*{ "IBM-953", "JIS_X0212-1990" },*/ + { "IBM-954", "EUC-JP" }, + /*{ "IBM-955", "?" },*/ + { "IBM-964", "EUC-TW" }, + { "IBM-970", "EUC-KR" }, + /*{ "IBM-971", "KS_C_5601-1987" },*/ + { "IBM-eucCN", "GB2312" }, + { "IBM-eucJP", "EUC-JP" }, + { "IBM-eucKR", "EUC-KR" }, + { "IBM-eucTW", "EUC-TW" }, + { "IBM33722", "EUC-JP" }, + { "ISO8859-1", "ISO-8859-1" }, + { "ISO8859-2", "ISO-8859-2" }, + { "ISO8859-3", "ISO-8859-3" }, + { "ISO8859-4", "ISO-8859-4" }, + { "ISO8859-5", "ISO-8859-5" }, + { "ISO8859-6", "ISO-8859-6" }, + { "ISO8859-7", "ISO-8859-7" }, + { "ISO8859-8", "ISO-8859-8" }, + { "ISO8859-9", "ISO-8859-9" }, + /*{ "JISX0201-1976", "JISX0201-1976" },*/ + /*{ "JISX0208-1978", "?" },*/ + /*{ "JISX0208-1983", "JIS_X0208-1983" },*/ + /*{ "JISX0208-1990", "JIS_X0208-1990" },*/ + /*{ "JISX0212-1990", "JIS_X0212-1990" },*/ + /*{ "KSC5601-1987", "KS_C_5601-1987" },*/ + { "SJIS-1", "CP943" }, + { "SJIS-2", "CP943" }, + { "eucJP", "EUC-JP" }, + { "eucKR", "EUC-KR" }, + { "eucTW-1993", "EUC-TW" } +# define alias_table_defined +# endif +# if defined VMS /* OpenVMS */ + /* The list of encodings is taken from the OpenVMS 7.3-1 documentation + "Compaq C Run-Time Library Reference Manual for OpenVMS systems" + section 10.7 "Handling Different Character Sets". */ + { "DECHANYU", "DEC-HANYU" }, + { "DECHANZI", "GB2312" }, + { "DECKANJI", "DEC-KANJI" }, + { "DECKOREAN", "EUC-KR" }, + { "ISO8859-1", "ISO-8859-1" }, + { "ISO8859-2", "ISO-8859-2" }, + { "ISO8859-5", "ISO-8859-5" }, + { "ISO8859-7", "ISO-8859-7" }, + { "ISO8859-8", "ISO-8859-8" }, + { "ISO8859-9", "ISO-8859-9" }, + { "SDECKANJI", "EUC-JP" }, + { "SJIS", "SHIFT_JIS" }, + { "eucJP", "EUC-JP" }, + { "eucTW", "EUC-TW" } +# define alias_table_defined +# endif +# ifndef alias_table_defined + /* Just a dummy entry, to avoid a C syntax error. */ + { "", "" } +# endif + }; - free (file_name); - } +# endif #else -# if defined DARWIN7 - /* To avoid the trouble of installing a file that is shared by many - GNU packages -- many packaging systems have problems with this --, - simply inline the aliases here. */ - cp = "ISO8859-1" "\0" "ISO-8859-1" "\0" - "ISO8859-2" "\0" "ISO-8859-2" "\0" - "ISO8859-4" "\0" "ISO-8859-4" "\0" - "ISO8859-5" "\0" "ISO-8859-5" "\0" - "ISO8859-7" "\0" "ISO-8859-7" "\0" - "ISO8859-9" "\0" "ISO-8859-9" "\0" - "ISO8859-13" "\0" "ISO-8859-13" "\0" - "ISO8859-15" "\0" "ISO-8859-15" "\0" - "KOI8-R" "\0" "KOI8-R" "\0" - "KOI8-U" "\0" "KOI8-U" "\0" - "CP866" "\0" "CP866" "\0" - "CP949" "\0" "CP949" "\0" - "CP1131" "\0" "CP1131" "\0" - "CP1251" "\0" "CP1251" "\0" - "eucCN" "\0" "GB2312" "\0" - "GB2312" "\0" "GB2312" "\0" - "eucJP" "\0" "EUC-JP" "\0" - "eucKR" "\0" "EUC-KR" "\0" - "Big5" "\0" "BIG5" "\0" - "Big5HKSCS" "\0" "BIG5-HKSCS" "\0" - "GBK" "\0" "GBK" "\0" - "GB18030" "\0" "GB18030" "\0" - "SJIS" "\0" "SHIFT_JIS" "\0" - "ARMSCII-8" "\0" "ARMSCII-8" "\0" - "PT154" "\0" "PT154" "\0" - /*"ISCII-DEV" "\0" "?" "\0"*/ - "*" "\0" "UTF-8" "\0"; -# endif - -# if defined VMS - /* To avoid the troubles of an extra file charset.alias_vms in the - sources of many GNU packages, simply inline the aliases here. */ - /* The list of encodings is taken from the OpenVMS 7.3-1 documentation - "Compaq C Run-Time Library Reference Manual for OpenVMS systems" - section 10.7 "Handling Different Character Sets". */ - cp = "ISO8859-1" "\0" "ISO-8859-1" "\0" - "ISO8859-2" "\0" "ISO-8859-2" "\0" - "ISO8859-5" "\0" "ISO-8859-5" "\0" - "ISO8859-7" "\0" "ISO-8859-7" "\0" - "ISO8859-8" "\0" "ISO-8859-8" "\0" - "ISO8859-9" "\0" "ISO-8859-9" "\0" - /* Japanese */ - "eucJP" "\0" "EUC-JP" "\0" - "SJIS" "\0" "SHIFT_JIS" "\0" - "DECKANJI" "\0" "DEC-KANJI" "\0" - "SDECKANJI" "\0" "EUC-JP" "\0" - /* Chinese */ - "eucTW" "\0" "EUC-TW" "\0" - "DECHANYU" "\0" "DEC-HANYU" "\0" - "DECHANZI" "\0" "GB2312" "\0" - /* Korean */ - "DECKOREAN" "\0" "EUC-KR" "\0"; -# endif - -# if defined WINDOWS_NATIVE || defined __CYGWIN__ - /* To avoid the troubles of installing a separate file in the same - directory as the DLL and of retrieving the DLL's directory at - runtime, simply inline the aliases here. */ - - cp = "CP936" "\0" "GBK" "\0" - "CP1361" "\0" "JOHAB" "\0" - "CP20127" "\0" "ASCII" "\0" - "CP20866" "\0" "KOI8-R" "\0" - "CP20936" "\0" "GB2312" "\0" - "CP21866" "\0" "KOI8-RU" "\0" - "CP28591" "\0" "ISO-8859-1" "\0" - "CP28592" "\0" "ISO-8859-2" "\0" - "CP28593" "\0" "ISO-8859-3" "\0" - "CP28594" "\0" "ISO-8859-4" "\0" - "CP28595" "\0" "ISO-8859-5" "\0" - "CP28596" "\0" "ISO-8859-6" "\0" - "CP28597" "\0" "ISO-8859-7" "\0" - "CP28598" "\0" "ISO-8859-8" "\0" - "CP28599" "\0" "ISO-8859-9" "\0" - "CP28605" "\0" "ISO-8859-15" "\0" - "CP38598" "\0" "ISO-8859-8" "\0" - "CP51932" "\0" "EUC-JP" "\0" - "CP51936" "\0" "GB2312" "\0" - "CP51949" "\0" "EUC-KR" "\0" - "CP51950" "\0" "EUC-TW" "\0" - "CP54936" "\0" "GB18030" "\0" - "CP65001" "\0" "UTF-8" "\0"; -# endif -# if defined OS2 - /* To avoid the troubles of installing a separate file in the same - directory as the DLL and of retrieving the DLL's directory at - runtime, simply inline the aliases here. */ - - /* The list of encodings is taken from "List of OS/2 Codepages" - by Alex Taylor: - <http://altsan.org/os2/toolkits/uls/index.html#codepages>. - See also "IBM Globalization - Code page identifiers": - <http://www-01.ibm.com/software/globalization/cp/cp_cpgid.html>. */ - cp = "CP813" "\0" "ISO-8859-7" "\0" - "CP878" "\0" "KOI8-R" "\0" - "CP819" "\0" "ISO-8859-1" "\0" - "CP912" "\0" "ISO-8859-2" "\0" - "CP913" "\0" "ISO-8859-3" "\0" - "CP914" "\0" "ISO-8859-4" "\0" - "CP915" "\0" "ISO-8859-5" "\0" - "CP916" "\0" "ISO-8859-8" "\0" - "CP920" "\0" "ISO-8859-9" "\0" - "CP921" "\0" "ISO-8859-13" "\0" - "CP923" "\0" "ISO-8859-15" "\0" - "CP954" "\0" "EUC-JP" "\0" - "CP964" "\0" "EUC-TW" "\0" - "CP970" "\0" "EUC-KR" "\0" - "CP1089" "\0" "ISO-8859-6" "\0" - "CP1208" "\0" "UTF-8" "\0" - "CP1381" "\0" "GB2312" "\0" - "CP1386" "\0" "GBK" "\0" - "CP3372" "\0" "EUC-JP" "\0"; +/* On these platforms, we use a mapping from locale name to GNU canonical + encoding name. */ + +struct table_entry +{ + const char locale[17+1]; + const char canonical[11+1]; +}; + +/* Table of platform-dependent mappings, sorted in ascending order. */ +static const struct table_entry locale_table[] = + { +# if defined __FreeBSD__ /* FreeBSD 4.2 */ + { "cs_CZ.ISO_8859-2", "ISO-8859-2" }, + { "da_DK.DIS_8859-15", "ISO-8859-15" }, + { "da_DK.ISO_8859-1", "ISO-8859-1" }, + { "de_AT.DIS_8859-15", "ISO-8859-15" }, + { "de_AT.ISO_8859-1", "ISO-8859-1" }, + { "de_CH.DIS_8859-15", "ISO-8859-15" }, + { "de_CH.ISO_8859-1", "ISO-8859-1" }, + { "de_DE.DIS_8859-15", "ISO-8859-15" }, + { "de_DE.ISO_8859-1", "ISO-8859-1" }, + { "en_AU.DIS_8859-15", "ISO-8859-15" }, + { "en_AU.ISO_8859-1", "ISO-8859-1" }, + { "en_CA.DIS_8859-15", "ISO-8859-15" }, + { "en_CA.ISO_8859-1", "ISO-8859-1" }, + { "en_GB.DIS_8859-15", "ISO-8859-15" }, + { "en_GB.ISO_8859-1", "ISO-8859-1" }, + { "en_US.DIS_8859-15", "ISO-8859-15" }, + { "en_US.ISO_8859-1", "ISO-8859-1" }, + { "es_ES.DIS_8859-15", "ISO-8859-15" }, + { "es_ES.ISO_8859-1", "ISO-8859-1" }, + { "fi_FI.DIS_8859-15", "ISO-8859-15" }, + { "fi_FI.ISO_8859-1", "ISO-8859-1" }, + { "fr_BE.DIS_8859-15", "ISO-8859-15" }, + { "fr_BE.ISO_8859-1", "ISO-8859-1" }, + { "fr_CA.DIS_8859-15", "ISO-8859-15" }, + { "fr_CA.ISO_8859-1", "ISO-8859-1" }, + { "fr_CH.DIS_8859-15", "ISO-8859-15" }, + { "fr_CH.ISO_8859-1", "ISO-8859-1" }, + { "fr_FR.DIS_8859-15", "ISO-8859-15" }, + { "fr_FR.ISO_8859-1", "ISO-8859-1" }, + { "hr_HR.ISO_8859-2", "ISO-8859-2" }, + { "hu_HU.ISO_8859-2", "ISO-8859-2" }, + { "is_IS.DIS_8859-15", "ISO-8859-15" }, + { "is_IS.ISO_8859-1", "ISO-8859-1" }, + { "it_CH.DIS_8859-15", "ISO-8859-15" }, + { "it_CH.ISO_8859-1", "ISO-8859-1" }, + { "it_IT.DIS_8859-15", "ISO-8859-15" }, + { "it_IT.ISO_8859-1", "ISO-8859-1" }, + { "ja_JP.EUC", "EUC-JP" }, + { "ja_JP.SJIS", "SHIFT_JIS" }, + { "ja_JP.Shift_JIS", "SHIFT_JIS" }, + { "ko_KR.EUC", "EUC-KR" }, + { "la_LN.ASCII", "ASCII" }, + { "la_LN.DIS_8859-15", "ISO-8859-15" }, + { "la_LN.ISO_8859-1", "ISO-8859-1" }, + { "la_LN.ISO_8859-2", "ISO-8859-2" }, + { "la_LN.ISO_8859-4", "ISO-8859-4" }, + { "lt_LN.ASCII", "ASCII" }, + { "lt_LN.DIS_8859-15", "ISO-8859-15" }, + { "lt_LN.ISO_8859-1", "ISO-8859-1" }, + { "lt_LN.ISO_8859-2", "ISO-8859-2" }, + { "lt_LT.ISO_8859-4", "ISO-8859-4" }, + { "nl_BE.DIS_8859-15", "ISO-8859-15" }, + { "nl_BE.ISO_8859-1", "ISO-8859-1" }, + { "nl_NL.DIS_8859-15", "ISO-8859-15" }, + { "nl_NL.ISO_8859-1", "ISO-8859-1" }, + { "no_NO.DIS_8859-15", "ISO-8859-15" }, + { "no_NO.ISO_8859-1", "ISO-8859-1" }, + { "pl_PL.ISO_8859-2", "ISO-8859-2" }, + { "pt_PT.DIS_8859-15", "ISO-8859-15" }, + { "pt_PT.ISO_8859-1", "ISO-8859-1" }, + { "ru_RU.CP866", "CP866" }, + { "ru_RU.ISO_8859-5", "ISO-8859-5" }, + { "ru_RU.KOI8-R", "KOI8-R" }, + { "ru_SU.CP866", "CP866" }, + { "ru_SU.ISO_8859-5", "ISO-8859-5" }, + { "ru_SU.KOI8-R", "KOI8-R" }, + { "sl_SI.ISO_8859-2", "ISO-8859-2" }, + { "sv_SE.DIS_8859-15", "ISO-8859-15" }, + { "sv_SE.ISO_8859-1", "ISO-8859-1" }, + { "uk_UA.KOI8-U", "KOI8-U" }, + { "zh_CN.EUC", "GB2312" }, + { "zh_TW.BIG5", "BIG5" }, + { "zh_TW.Big5", "BIG5" } +# define locale_table_defined # endif -#endif +# if defined __DJGPP__ /* DOS / DJGPP 2.03 */ + /* The encodings given here may not all be correct. + If you find that the encoding given for your language and + country is not the one your DOS machine actually uses, just + correct it in this file, and send a mail to + Juan Manuel Guerrero <juan.guerrero@gmx.de> + and <bug-gnulib@gnu.org>. */ + { "C", "ASCII" }, + { "ar", "CP864" }, + { "ar_AE", "CP864" }, + { "ar_DZ", "CP864" }, + { "ar_EG", "CP864" }, + { "ar_IQ", "CP864" }, + { "ar_IR", "CP864" }, + { "ar_JO", "CP864" }, + { "ar_KW", "CP864" }, + { "ar_MA", "CP864" }, + { "ar_OM", "CP864" }, + { "ar_QA", "CP864" }, + { "ar_SA", "CP864" }, + { "ar_SY", "CP864" }, + { "be", "CP866" }, + { "be_BE", "CP866" }, + { "bg", "CP866" }, /* not CP855 ?? */ + { "bg_BG", "CP866" }, /* not CP855 ?? */ + { "ca", "CP850" }, + { "ca_ES", "CP850" }, + { "cs", "CP852" }, + { "cs_CZ", "CP852" }, + { "da", "CP865" }, /* not CP850 ?? */ + { "da_DK", "CP865" }, /* not CP850 ?? */ + { "de", "CP850" }, + { "de_AT", "CP850" }, + { "de_CH", "CP850" }, + { "de_DE", "CP850" }, + { "el", "CP869" }, + { "el_GR", "CP869" }, + { "en", "CP850" }, + { "en_AU", "CP850" }, /* not CP437 ?? */ + { "en_CA", "CP850" }, + { "en_GB", "CP850" }, + { "en_NZ", "CP437" }, + { "en_US", "CP437" }, + { "en_ZA", "CP850" }, /* not CP437 ?? */ + { "eo", "CP850" }, + { "eo_EO", "CP850" }, + { "es", "CP850" }, + { "es_AR", "CP850" }, + { "es_BO", "CP850" }, + { "es_CL", "CP850" }, + { "es_CO", "CP850" }, + { "es_CR", "CP850" }, + { "es_CU", "CP850" }, + { "es_DO", "CP850" }, + { "es_EC", "CP850" }, + { "es_ES", "CP850" }, + { "es_GT", "CP850" }, + { "es_HN", "CP850" }, + { "es_MX", "CP850" }, + { "es_NI", "CP850" }, + { "es_PA", "CP850" }, + { "es_PE", "CP850" }, + { "es_PY", "CP850" }, + { "es_SV", "CP850" }, + { "es_UY", "CP850" }, + { "es_VE", "CP850" }, + { "et", "CP850" }, + { "et_EE", "CP850" }, + { "eu", "CP850" }, + { "eu_ES", "CP850" }, + { "fi", "CP850" }, + { "fi_FI", "CP850" }, + { "fr", "CP850" }, + { "fr_BE", "CP850" }, + { "fr_CA", "CP850" }, + { "fr_CH", "CP850" }, + { "fr_FR", "CP850" }, + { "ga", "CP850" }, + { "ga_IE", "CP850" }, + { "gd", "CP850" }, + { "gd_GB", "CP850" }, + { "gl", "CP850" }, + { "gl_ES", "CP850" }, + { "he", "CP862" }, + { "he_IL", "CP862" }, + { "hr", "CP852" }, + { "hr_HR", "CP852" }, + { "hu", "CP852" }, + { "hu_HU", "CP852" }, + { "id", "CP850" }, /* not CP437 ?? */ + { "id_ID", "CP850" }, /* not CP437 ?? */ + { "is", "CP861" }, /* not CP850 ?? */ + { "is_IS", "CP861" }, /* not CP850 ?? */ + { "it", "CP850" }, + { "it_CH", "CP850" }, + { "it_IT", "CP850" }, + { "ja", "CP932" }, + { "ja_JP", "CP932" }, + { "kr", "CP949" }, /* not CP934 ?? */ + { "kr_KR", "CP949" }, /* not CP934 ?? */ + { "lt", "CP775" }, + { "lt_LT", "CP775" }, + { "lv", "CP775" }, + { "lv_LV", "CP775" }, + { "mk", "CP866" }, /* not CP855 ?? */ + { "mk_MK", "CP866" }, /* not CP855 ?? */ + { "mt", "CP850" }, + { "mt_MT", "CP850" }, + { "nb", "CP865" }, /* not CP850 ?? */ + { "nb_NO", "CP865" }, /* not CP850 ?? */ + { "nl", "CP850" }, + { "nl_BE", "CP850" }, + { "nl_NL", "CP850" }, + { "nn", "CP865" }, /* not CP850 ?? */ + { "nn_NO", "CP865" }, /* not CP850 ?? */ + { "no", "CP865" }, /* not CP850 ?? */ + { "no_NO", "CP865" }, /* not CP850 ?? */ + { "pl", "CP852" }, + { "pl_PL", "CP852" }, + { "pt", "CP850" }, + { "pt_BR", "CP850" }, + { "pt_PT", "CP850" }, + { "ro", "CP852" }, + { "ro_RO", "CP852" }, + { "ru", "CP866" }, + { "ru_RU", "CP866" }, + { "sk", "CP852" }, + { "sk_SK", "CP852" }, + { "sl", "CP852" }, + { "sl_SI", "CP852" }, + { "sq", "CP852" }, + { "sq_AL", "CP852" }, + { "sr", "CP852" }, /* CP852 or CP866 or CP855 ?? */ + { "sr_CS", "CP852" }, /* CP852 or CP866 or CP855 ?? */ + { "sr_YU", "CP852" }, /* CP852 or CP866 or CP855 ?? */ + { "sv", "CP850" }, + { "sv_SE", "CP850" }, + { "th", "CP874" }, + { "th_TH", "CP874" }, + { "tr", "CP857" }, + { "tr_TR", "CP857" }, + { "uk", "CP1125" }, + { "uk_UA", "CP1125" }, + { "zh_CN", "GBK" }, + { "zh_TW", "CP950" } /* not CP938 ?? */ +# define locale_table_defined +# endif +# ifndef locale_table_defined + /* Just a dummy entry, to avoid a C syntax error. */ + { "", "" } +# endif + }; - charset_aliases = cp; - } +#endif - return cp; -} /* Determine the current locale's character encoding, and canonicalize it - into one of the canonical names listed in config.charset. - The result must not be freed; it is statically allocated. + into one of the canonical names listed below. + The result must not be freed; it is statically allocated. The result + becomes invalid when setlocale() is used to change the global locale, or + when the value of one of the environment variables LC_ALL, LC_CTYPE, LANG + is changed; threads in multithreaded programs should not do this. If the canonical name cannot be determined, the result is a non-canonical name. */ @@ -393,9 +831,15 @@ locale_charset (void) { const char *codeset; - const char *aliases; -#if !(defined WINDOWS_NATIVE || defined OS2) + /* This function must be multithread-safe. To achieve this without using + thread-local storage, we use a simple strcpy or memcpy to fill this static + buffer. Filling it through, for example, strcpy + strcat would not be + guaranteed to leave the buffer's contents intact if another thread is + currently accessing it. If necessary, the contents is first assembled in + a stack-allocated buffer. */ + +#if HAVE_LANGINFO_CODESET || defined WINDOWS_NATIVE || defined OS2 # if HAVE_LANGINFO_CODESET @@ -409,7 +853,7 @@ if (codeset != NULL && strcmp (codeset, "US-ASCII") == 0) { const char *locale; - static char buf[2 + 10 + 1]; + static char resultbuf[2 + 10 + 1]; locale = getenv ("LC_ALL"); if (locale == NULL || locale[0] == '\0') @@ -433,11 +877,12 @@ modifier = strchr (dot, '@'); if (modifier == NULL) return dot; - if (modifier - dot < sizeof (buf)) + if (modifier - dot < sizeof (resultbuf)) { - memcpy (buf, dot, modifier - dot); - buf [modifier - dot] = '\0'; - return buf; + /* This way of filling resultbuf is multithread-safe. */ + memcpy (resultbuf, dot, modifier - dot); + resultbuf [modifier - dot] = '\0'; + return resultbuf; } } } @@ -453,79 +898,60 @@ converting to GetConsoleOutputCP(). This leads to correct results, except when SetConsoleOutputCP has been called and a raster font is in use. */ - sprintf (buf, "CP%u", GetACP ()); - codeset = buf; - } -# endif - -# else - - /* On old systems which lack it, use setlocale or getenv. */ - const char *locale = NULL; + { + char buf[2 + 10 + 1]; - /* But most old systems don't have a complete set of locales. Some - (like SunOS 4 or DJGPP) have only the C locale. Therefore we don't - use setlocale here; it would return "C" when it doesn't support the - locale name the user has set. */ -# if 0 - locale = setlocale (LC_CTYPE, NULL); -# endif - if (locale == NULL || locale[0] == '\0') - { - locale = getenv ("LC_ALL"); - if (locale == NULL || locale[0] == '\0') - { - locale = getenv ("LC_CTYPE"); - if (locale == NULL || locale[0] == '\0') - locale = getenv ("LANG"); - } + sprintf (buf, "CP%u", GetACP ()); + strcpy (resultbuf, buf); + codeset = resultbuf; + } } +# endif - /* On some old systems, one used to set locale = "iso8859_1". On others, - you set it to "language_COUNTRY.charset". In any case, we resolve it - through the charset.alias file. */ - codeset = locale; - -# endif + if (codeset == NULL) + /* The canonical name cannot be determined. */ + codeset = ""; -#elif defined WINDOWS_NATIVE +# elif defined WINDOWS_NATIVE - static char buf[2 + 10 + 1]; + char buf[2 + 10 + 1]; + static char resultbuf[2 + 10 + 1]; /* The Windows API has a function returning the locale's codepage as a number, but the value doesn't change according to what the 'setlocale' call specified. So we use it as a last resort, in case the string returned by 'setlocale' doesn't specify the codepage. */ - char *current_locale = setlocale (LC_ALL, NULL); - char *pdot; - - /* If they set different locales for different categories, - 'setlocale' will return a semi-colon separated list of locale - values. To make sure we use the correct one, we choose LC_CTYPE. */ - if (strchr (current_locale, ';')) - current_locale = setlocale (LC_CTYPE, NULL); + char *current_locale = setlocale (LC_CTYPE, NULL); + char *pdot = strrchr (current_locale, '.'); - pdot = strrchr (current_locale, '.'); - if (pdot) + if (pdot && 2 + strlen (pdot + 1) + 1 <= sizeof (buf)) sprintf (buf, "CP%s", pdot + 1); else { /* The Windows API has a function returning the locale's codepage as a - number: GetACP(). - When the output goes to a console window, it needs to be provided in - GetOEMCP() encoding if the console is using a raster font, or in - GetConsoleOutputCP() encoding if it is using a TrueType font. - But in GUI programs and for output sent to files and pipes, GetACP() - encoding is the best bet. */ + number: GetACP(). + When the output goes to a console window, it needs to be provided in + GetOEMCP() encoding if the console is using a raster font, or in + GetConsoleOutputCP() encoding if it is using a TrueType font. + But in GUI programs and for output sent to files and pipes, GetACP() + encoding is the best bet. */ sprintf (buf, "CP%u", GetACP ()); } - codeset = buf; + /* For a locale name such as "French_France.65001", in Windows 10, + setlocale now returns "French_France.utf8" instead. */ + if (strcmp (buf + 2, "65001") == 0 || strcmp (buf + 2, "utf8") == 0) + codeset = "UTF-8"; + else + { + strcpy (resultbuf, buf); + codeset = resultbuf; + } -#elif defined OS2 +# elif defined OS2 const char *locale; - static char buf[2 + 10 + 1]; + static char resultbuf[2 + 10 + 1]; ULONG cp[3]; ULONG cplen; @@ -554,11 +980,12 @@ modifier = strchr (dot, '@'); if (modifier == NULL) return dot; - if (modifier - dot < sizeof (buf)) + if (modifier - dot < sizeof (resultbuf)) { - memcpy (buf, dot, modifier - dot); - buf [modifier - dot] = '\0'; - return buf; + /* This way of filling resultbuf is multithread-safe. */ + memcpy (resultbuf, dot, modifier - dot); + resultbuf [modifier - dot] = '\0'; + return resultbuf; } } @@ -574,33 +1001,152 @@ codeset = ""; else { + char buf[2 + 10 + 1]; + sprintf (buf, "CP%u", cp[0]); - codeset = buf; + strcpy (resultbuf, buf); + codeset = resultbuf; } } -#endif +# else - if (codeset == NULL) - /* The canonical name cannot be determined. */ - codeset = ""; +# error "Add code for other platforms here." + +# endif + + /* Resolve alias. */ + { +# ifdef alias_table_defined + /* On some platforms, UTF-8 locales are the most frequently used ones. + Speed up the common case and slow down the less common cases by + testing for this case first. */ +# if defined __OpenBSD__ || (defined __APPLE__ && defined __MACH__) || defined __sun || defined __CYGWIN__ + if (strcmp (codeset, "UTF-8") == 0) + goto done_table_lookup; + else +# endif + { + const struct table_entry * const table = alias_table; + size_t const table_size = + sizeof (alias_table) / sizeof (struct table_entry); + /* The table is sorted. Perform a binary search. */ + size_t hi = table_size; + size_t lo = 0; + while (lo < hi) + { + /* Invariant: + for i < lo, strcmp (table[i].alias, codeset) < 0, + for i >= hi, strcmp (table[i].alias, codeset) > 0. */ + size_t mid = (hi + lo) >> 1; /* >= lo, < hi */ + int cmp = strcmp (table[mid].alias, codeset); + if (cmp < 0) + lo = mid + 1; + else if (cmp > 0) + hi = mid; + else + { + /* Found an i with + strcmp (table[i].alias, codeset) == 0. */ + codeset = table[mid].canonical; + goto done_table_lookup; + } + } + } + if (0) + done_table_lookup: ; + else +# endif + { + /* Did not find it in the table. */ + /* On Mac OS X, all modern locales use the UTF-8 encoding. + BeOS and Haiku have a single locale, and it has UTF-8 encoding. */ +# if (defined __APPLE__ && defined __MACH__) || defined __BEOS__ || defined __HAIKU__ + codeset = "UTF-8"; +# else + /* Don't return an empty string. GNU libc and GNU libiconv interpret + the empty string as denoting "the locale's character encoding", + thus GNU libiconv would call this function a second time. */ + if (codeset[0] == '\0') + codeset = "ASCII"; +# endif + } + } + +#else - /* Resolve alias. */ - for (aliases = get_charset_aliases (); - *aliases != '\0'; - aliases += strlen (aliases) + 1, aliases += strlen (aliases) + 1) - if (strcmp (codeset, aliases) == 0 - || (aliases[0] == '*' && aliases[1] == '\0')) + /* On old systems which lack it, use setlocale or getenv. */ + const char *locale = NULL; + + /* But most old systems don't have a complete set of locales. Some + (like DJGPP) have only the C locale. Therefore we don't use setlocale + here; it would return "C" when it doesn't support the locale name the + user has set. */ +# if 0 + locale = setlocale (LC_CTYPE, NULL); +# endif + if (locale == NULL || locale[0] == '\0') + { + locale = getenv ("LC_ALL"); + if (locale == NULL || locale[0] == '\0') + { + locale = getenv ("LC_CTYPE"); + if (locale == NULL || locale[0] == '\0') + locale = getenv ("LANG"); + if (locale == NULL) + locale = ""; + } + } + + /* Map locale name to canonical encoding name. */ + { +# ifdef locale_table_defined + const struct table_entry * const table = locale_table; + size_t const table_size = + sizeof (locale_table) / sizeof (struct table_entry); + /* The table is sorted. Perform a binary search. */ + size_t hi = table_size; + size_t lo = 0; + while (lo < hi) { - codeset = aliases + strlen (aliases) + 1; - break; + /* Invariant: + for i < lo, strcmp (table[i].locale, locale) < 0, + for i >= hi, strcmp (table[i].locale, locale) > 0. */ + size_t mid = (hi + lo) >> 1; /* >= lo, < hi */ + int cmp = strcmp (table[mid].locale, locale); + if (cmp < 0) + lo = mid + 1; + else if (cmp > 0) + hi = mid; + else + { + /* Found an i with + strcmp (table[i].locale, locale) == 0. */ + codeset = table[mid].canonical; + goto done_table_lookup; + } + } + if (0) + done_table_lookup: ; + else +# endif + { + /* Did not find it in the table. */ + /* On Mac OS X, all modern locales use the UTF-8 encoding. + BeOS and Haiku have a single locale, and it has UTF-8 encoding. */ +# if (defined __APPLE__ && defined __MACH__) || defined __BEOS__ || defined __HAIKU__ + codeset = "UTF-8"; +# else + /* The canonical name cannot be determined. */ + /* Don't return an empty string. GNU libc and GNU libiconv interpret + the empty string as denoting "the locale's character encoding", + thus GNU libiconv would call this function a second time. */ + codeset = "ASCII"; +# endif } + } - /* Don't return an empty string. GNU libc and GNU libiconv interpret - the empty string as denoting "the locale's character encoding", - thus GNU libiconv would call this function a second time. */ - if (codeset[0] == '\0') - codeset = "ASCII"; +#endif #ifdef DARWIN7 /* Mac OS X sets MB_CUR_MAX to 1 when LC_ALL=C, and "UTF-8" diff -Nru gdb-9.1/gnulib/import/localcharset.h gdb-10.2/gnulib/import/localcharset.h --- gdb-9.1/gnulib/import/localcharset.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/localcharset.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Determine a canonical name for the current locale's character encoding. - Copyright (C) 2000-2003, 2009-2016 Free Software Foundation, Inc. + Copyright (C) 2000-2003, 2009-2020 Free Software Foundation, Inc. This file is part of the GNU CHARSET Library. This program is free software; you can redistribute it and/or modify @@ -13,7 +13,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along - with this program; if not, see <http://www.gnu.org/licenses/>. */ + with this program; if not, see <https://www.gnu.org/licenses/>. */ #ifndef _LOCALCHARSET_H #define _LOCALCHARSET_H @@ -25,12 +25,109 @@ /* Determine the current locale's character encoding, and canonicalize it - into one of the canonical names listed in config.charset. - The result must not be freed; it is statically allocated. + into one of the canonical names listed below. + The result must not be freed; it is statically allocated. The result + becomes invalid when setlocale() is used to change the global locale, or + when the value of one of the environment variables LC_ALL, LC_CTYPE, LANG + is changed; threads in multithreaded programs should not do this. If the canonical name cannot be determined, the result is a non-canonical name. */ extern const char * locale_charset (void); +/* About GNU canonical names for character encodings: + + Every canonical name must be supported by GNU libiconv. Support by GNU libc + is also desirable. + + The name is case insensitive. Usually an upper case MIME charset name is + preferred. + + The current list of these GNU canonical names is: + + name MIME? used by which systems + (darwin = Mac OS X, windows = native Windows) + + ASCII, ANSI_X3.4-1968 glibc solaris freebsd netbsd darwin minix cygwin + ISO-8859-1 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin zos + ISO-8859-2 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin zos + ISO-8859-3 Y glibc solaris cygwin + ISO-8859-4 Y hpux osf solaris freebsd netbsd openbsd darwin + ISO-8859-5 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin zos + ISO-8859-6 Y glibc aix hpux solaris cygwin + ISO-8859-7 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin zos + ISO-8859-8 Y glibc aix hpux osf solaris cygwin zos + ISO-8859-9 Y glibc aix hpux irix osf solaris freebsd darwin cygwin zos + ISO-8859-13 glibc hpux solaris freebsd netbsd openbsd darwin cygwin + ISO-8859-14 glibc cygwin + ISO-8859-15 glibc aix irix osf solaris freebsd netbsd openbsd darwin cygwin + KOI8-R Y glibc hpux solaris freebsd netbsd openbsd darwin + KOI8-U Y glibc freebsd netbsd openbsd darwin cygwin + KOI8-T glibc + CP437 dos + CP775 dos + CP850 aix osf dos + CP852 dos + CP855 dos + CP856 aix + CP857 dos + CP861 dos + CP862 dos + CP864 dos + CP865 dos + CP866 freebsd netbsd openbsd darwin dos + CP869 dos + CP874 windows dos + CP922 aix + CP932 aix cygwin windows dos + CP943 aix zos + CP949 osf darwin windows dos + CP950 windows dos + CP1046 aix + CP1124 aix + CP1125 dos + CP1129 aix + CP1131 freebsd darwin + CP1250 windows + CP1251 glibc hpux solaris freebsd netbsd openbsd darwin cygwin windows + CP1252 aix windows + CP1253 windows + CP1254 windows + CP1255 glibc windows + CP1256 windows + CP1257 windows + GB2312 Y glibc aix hpux irix solaris freebsd netbsd darwin cygwin zos + EUC-JP Y glibc aix hpux irix osf solaris freebsd netbsd darwin cygwin + EUC-KR Y glibc aix hpux irix osf solaris freebsd netbsd darwin cygwin zos + EUC-TW glibc aix hpux irix osf solaris netbsd + BIG5 Y glibc aix hpux osf solaris freebsd netbsd darwin cygwin zos + BIG5-HKSCS glibc hpux solaris netbsd darwin + GBK glibc aix osf solaris freebsd darwin cygwin windows dos + GB18030 glibc hpux solaris freebsd netbsd darwin + SHIFT_JIS Y hpux osf solaris freebsd netbsd darwin + JOHAB glibc solaris windows + TIS-620 glibc aix hpux osf solaris cygwin zos + VISCII Y glibc + TCVN5712-1 glibc + ARMSCII-8 glibc freebsd netbsd darwin + GEORGIAN-PS glibc cygwin + PT154 glibc netbsd cygwin + HP-ROMAN8 hpux + HP-ARABIC8 hpux + HP-GREEK8 hpux + HP-HEBREW8 hpux + HP-TURKISH8 hpux + HP-KANA8 hpux + DEC-KANJI osf + DEC-HANYU osf + UTF-8 Y glibc aix hpux osf solaris netbsd darwin cygwin zos + + Note: Names which are not marked as being a MIME name should not be used in + Internet protocols for information interchange (mail, news, etc.). + + Note: ASCII and ANSI_X3.4-1968 are synonymous canonical names. Applications + must understand both names and treat them as equivalent. + */ + #ifdef __cplusplus } diff -Nru gdb-9.1/gnulib/import/locale.in.h gdb-10.2/gnulib/import/locale.in.h --- gdb-9.1/gnulib/import/locale.in.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/locale.in.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,305 @@ +/* A POSIX <locale.h>. + Copyright (C) 2007-2020 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif +@PRAGMA_COLUMNS@ + +#if (defined _WIN32 && !defined __CYGWIN__ && defined __need_locale_t) \ + || defined _GL_ALREADY_INCLUDING_LOCALE_H + +/* Special invocation convention: + - Inside mingw header files, + - To handle Solaris header files (through Solaris 10) when combined + with gettext's libintl.h. */ + +#@INCLUDE_NEXT@ @NEXT_LOCALE_H@ + +#else +/* Normal invocation convention. */ + +#ifndef _@GUARD_PREFIX@_LOCALE_H + +#define _GL_ALREADY_INCLUDING_LOCALE_H + +/* The include_next requires a split double-inclusion guard. */ +#@INCLUDE_NEXT@ @NEXT_LOCALE_H@ + +#undef _GL_ALREADY_INCLUDING_LOCALE_H + +#ifndef _@GUARD_PREFIX@_LOCALE_H +#define _@GUARD_PREFIX@_LOCALE_H + +/* NetBSD 5.0 mis-defines NULL. */ +#include <stddef.h> + +/* Mac OS X 10.5 defines the locale_t type in <xlocale.h>. */ +#if @HAVE_XLOCALE_H@ +# include <xlocale.h> +#endif + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ + +/* The definition of _GL_ARG_NONNULL is copied here. */ + +/* The definition of _GL_WARN_ON_USE is copied here. */ + +/* The LC_MESSAGES locale category is specified in POSIX, but not in ISO C. + On systems that don't define it, use the same value as GNU libintl. */ +#if !defined LC_MESSAGES +# define LC_MESSAGES 1729 +#endif + +/* On native Windows with MSVC, 'struct lconv' lacks the members int_p_* and + int_n_*. Instead of overriding 'struct lconv', merely define these member + names as macros. This avoids trouble in C++ mode. */ +#if defined _MSC_VER +# define int_p_cs_precedes p_cs_precedes +# define int_p_sign_posn p_sign_posn +# define int_p_sep_by_space p_sep_by_space +# define int_n_cs_precedes n_cs_precedes +# define int_n_sign_posn n_sign_posn +# define int_n_sep_by_space n_sep_by_space +#endif + +/* Bionic libc's 'struct lconv' is just a dummy. */ +#if @REPLACE_STRUCT_LCONV@ +# define lconv rpl_lconv +struct lconv +{ + /* All 'char *' are actually 'const char *'. */ + + /* Members that depend on the LC_NUMERIC category of the locale. See + <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap07.html#tag_07_03_04> */ + + /* Symbol used as decimal point. */ + char *decimal_point; + /* Symbol used to separate groups of digits to the left of the decimal + point. */ + char *thousands_sep; + /* Definition of the size of groups of digits to the left of the decimal + point. */ + char *grouping; + + /* Members that depend on the LC_MONETARY category of the locale. See + <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap07.html#tag_07_03_03> */ + + /* Symbol used as decimal point. */ + char *mon_decimal_point; + /* Symbol used to separate groups of digits to the left of the decimal + point. */ + char *mon_thousands_sep; + /* Definition of the size of groups of digits to the left of the decimal + point. */ + char *mon_grouping; + /* Sign used to indicate a value >= 0. */ + char *positive_sign; + /* Sign used to indicate a value < 0. */ + char *negative_sign; + + /* For formatting local currency. */ + /* Currency symbol (3 characters) followed by separator (1 character). */ + char *currency_symbol; + /* Number of digits after the decimal point. */ + char frac_digits; + /* For values >= 0: 1 if the currency symbol precedes the number, 0 if it + comes after the number. */ + char p_cs_precedes; + /* For values >= 0: Position of the sign. */ + char p_sign_posn; + /* For values >= 0: Placement of spaces between currency symbol, sign, and + number. */ + char p_sep_by_space; + /* For values < 0: 1 if the currency symbol precedes the number, 0 if it + comes after the number. */ + char n_cs_precedes; + /* For values < 0: Position of the sign. */ + char n_sign_posn; + /* For values < 0: Placement of spaces between currency symbol, sign, and + number. */ + char n_sep_by_space; + + /* For formatting international currency. */ + /* Currency symbol (3 characters) followed by separator (1 character). */ + char *int_curr_symbol; + /* Number of digits after the decimal point. */ + char int_frac_digits; + /* For values >= 0: 1 if the currency symbol precedes the number, 0 if it + comes after the number. */ + char int_p_cs_precedes; + /* For values >= 0: Position of the sign. */ + char int_p_sign_posn; + /* For values >= 0: Placement of spaces between currency symbol, sign, and + number. */ + char int_p_sep_by_space; + /* For values < 0: 1 if the currency symbol precedes the number, 0 if it + comes after the number. */ + char int_n_cs_precedes; + /* For values < 0: Position of the sign. */ + char int_n_sign_posn; + /* For values < 0: Placement of spaces between currency symbol, sign, and + number. */ + char int_n_sep_by_space; +}; +#endif + +#if @GNULIB_LOCALECONV@ +# if @REPLACE_LOCALECONV@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef localeconv +# define localeconv rpl_localeconv +# endif +_GL_FUNCDECL_RPL (localeconv, struct lconv *, (void)); +_GL_CXXALIAS_RPL (localeconv, struct lconv *, (void)); +# else +_GL_CXXALIAS_SYS (localeconv, struct lconv *, (void)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (localeconv); +# endif +#elif @REPLACE_STRUCT_LCONV@ +# undef localeconv +# define localeconv localeconv_used_without_requesting_gnulib_module_localeconv +#elif defined GNULIB_POSIXCHECK +# undef localeconv +# if HAVE_RAW_DECL_LOCALECONV +_GL_WARN_ON_USE (localeconv, + "localeconv returns too few information on some platforms - " + "use gnulib module localeconv for portability"); +# endif +#endif + +#if @GNULIB_SETLOCALE@ +# if @REPLACE_SETLOCALE@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef setlocale +# define setlocale rpl_setlocale +# define GNULIB_defined_setlocale 1 +# endif +_GL_FUNCDECL_RPL (setlocale, char *, (int category, const char *locale)); +_GL_CXXALIAS_RPL (setlocale, char *, (int category, const char *locale)); +# else +_GL_CXXALIAS_SYS (setlocale, char *, (int category, const char *locale)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (setlocale); +# endif +#elif defined GNULIB_POSIXCHECK +# undef setlocale +# if HAVE_RAW_DECL_SETLOCALE +_GL_WARN_ON_USE (setlocale, "setlocale works differently on native Windows - " + "use gnulib module setlocale for portability"); +# endif +#endif + +#if @GNULIB_SETLOCALE_NULL@ +/* Included here for convenience. */ +# include "setlocale_null.h" +#endif + +#if /*@GNULIB_NEWLOCALE@ ||*/ (@GNULIB_LOCALENAME@ && @HAVE_NEWLOCALE@) +# if @REPLACE_NEWLOCALE@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef newlocale +# define newlocale rpl_newlocale +# define GNULIB_defined_newlocale 1 +# endif +_GL_FUNCDECL_RPL (newlocale, locale_t, + (int category_mask, const char *name, locale_t base) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (newlocale, locale_t, + (int category_mask, const char *name, locale_t base)); +# else +# if @HAVE_NEWLOCALE@ +_GL_CXXALIAS_SYS (newlocale, locale_t, + (int category_mask, const char *name, locale_t base)); +# endif +# endif +# if @HAVE_NEWLOCALE@ +_GL_CXXALIASWARN (newlocale); +# endif +# if @HAVE_NEWLOCALE@ || @REPLACE_NEWLOCALE@ +# ifndef HAVE_WORKING_NEWLOCALE +# define HAVE_WORKING_NEWLOCALE 1 +# endif +# endif +#elif defined GNULIB_POSIXCHECK +# undef newlocale +# if HAVE_RAW_DECL_NEWLOCALE +_GL_WARN_ON_USE (newlocale, "newlocale is not portable"); +# endif +#endif + +#if @GNULIB_DUPLOCALE@ || (@GNULIB_LOCALENAME@ && @HAVE_DUPLOCALE@) +# if @REPLACE_DUPLOCALE@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef duplocale +# define duplocale rpl_duplocale +# define GNULIB_defined_duplocale 1 +# endif +_GL_FUNCDECL_RPL (duplocale, locale_t, (locale_t locale) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (duplocale, locale_t, (locale_t locale)); +# else +# if @HAVE_DUPLOCALE@ +_GL_CXXALIAS_SYS (duplocale, locale_t, (locale_t locale)); +# endif +# endif +# if @HAVE_DUPLOCALE@ +_GL_CXXALIASWARN (duplocale); +# endif +# if @HAVE_DUPLOCALE@ || @REPLACE_DUPLOCALE@ +# ifndef HAVE_WORKING_DUPLOCALE +# define HAVE_WORKING_DUPLOCALE 1 +# endif +# endif +#elif defined GNULIB_POSIXCHECK +# undef duplocale +# if HAVE_RAW_DECL_DUPLOCALE +_GL_WARN_ON_USE (duplocale, "duplocale is buggy on some glibc systems - " + "use gnulib module duplocale for portability"); +# endif +#endif + +#if /*@GNULIB_FREELOCALE@ ||*/ (@GNULIB_LOCALENAME@ && @HAVE_FREELOCALE@) +# if @REPLACE_FREELOCALE@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef freelocale +# define freelocale rpl_freelocale +# define GNULIB_defined_freelocale 1 +# endif +_GL_FUNCDECL_RPL (freelocale, void, (locale_t locale) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (freelocale, void, (locale_t locale)); +# else +# if @HAVE_FREELOCALE@ +/* Need to cast, because on FreeBSD and Mac OS X 10.13, the return type is + int. */ +_GL_CXXALIAS_SYS_CAST (freelocale, void, (locale_t locale)); +# endif +# endif +# if @HAVE_FREELOCALE@ +_GL_CXXALIASWARN (freelocale); +# endif +#elif defined GNULIB_POSIXCHECK +# undef freelocale +# if HAVE_RAW_DECL_FREELOCALE +_GL_WARN_ON_USE (freelocale, "freelocale is not portable"); +# endif +#endif + +#endif /* _@GUARD_PREFIX@_LOCALE_H */ +#endif /* _@GUARD_PREFIX@_LOCALE_H */ +#endif /* !(__need_locale_t || _GL_ALREADY_INCLUDING_LOCALE_H) */ diff -Nru gdb-9.1/gnulib/import/localtime-buffer.c gdb-10.2/gnulib/import/localtime-buffer.c --- gdb-9.1/gnulib/import/localtime-buffer.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/localtime-buffer.c 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,60 @@ +/* Provide access to the last buffer returned by localtime() or gmtime(). + + Copyright (C) 2001-2003, 2005-2007, 2009-2020 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +/* written by Jim Meyering */ + +#include <config.h> + +/* Specification. */ +#include "localtime-buffer.h" + +#if GETTIMEOFDAY_CLOBBERS_LOCALTIME || TZSET_CLOBBERS_LOCALTIME + +static struct tm tm_zero_buffer; +struct tm *localtime_buffer_addr = &tm_zero_buffer; + +/* This is a wrapper for localtime. + + On the first call, record the address of the static buffer that + localtime uses for its result. */ + +struct tm * +rpl_localtime (time_t const *timep) +#undef localtime +{ + struct tm *tm = localtime (timep); + + if (localtime_buffer_addr == &tm_zero_buffer) + localtime_buffer_addr = tm; + + return tm; +} + +/* Same as above, since gmtime and localtime use the same buffer. */ +struct tm * +rpl_gmtime (time_t const *timep) +#undef gmtime +{ + struct tm *tm = gmtime (timep); + + if (localtime_buffer_addr == &tm_zero_buffer) + localtime_buffer_addr = tm; + + return tm; +} + +#endif diff -Nru gdb-9.1/gnulib/import/localtime-buffer.h gdb-10.2/gnulib/import/localtime-buffer.h --- gdb-9.1/gnulib/import/localtime-buffer.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/localtime-buffer.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,27 @@ +/* Provide access to the last buffer returned by localtime() or gmtime(). + + Copyright (C) 2001-2003, 2005-2007, 2009-2020 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +/* written by Jim Meyering */ + +#include <time.h> + +#if GETTIMEOFDAY_CLOBBERS_LOCALTIME || TZSET_CLOBBERS_LOCALTIME + +/* The address of the last buffer returned by localtime() or gmtime(). */ +extern struct tm *localtime_buffer_addr; + +#endif diff -Nru gdb-9.1/gnulib/import/lstat.c gdb-10.2/gnulib/import/lstat.c --- gdb-9.1/gnulib/import/lstat.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/lstat.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Work around a bug of lstat on some systems - Copyright (C) 1997-2006, 2008-2016 Free Software Foundation, Inc. + Copyright (C) 1997-2006, 2008-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -13,7 +13,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* written by Jim Meyering */ @@ -42,10 +42,16 @@ } /* Specification. */ +# ifdef __osf__ /* Write "sys/stat.h" here, not <sys/stat.h>, otherwise OSF/1 5.1 DTK cc eliminates this include because of the preliminary #include <sys/stat.h> above. */ -# include "sys/stat.h" +# include "sys/stat.h" +# else +# include <sys/stat.h> +# endif + +# include "stat-time.h" # include <string.h> # include <errno.h> @@ -66,32 +72,33 @@ int rpl_lstat (const char *file, struct stat *sbuf) { - size_t len; - int lstat_result = orig_lstat (file, sbuf); - - if (lstat_result != 0) - return lstat_result; + int result = orig_lstat (file, sbuf); /* This replacement file can blindly check against '/' rather than using the ISSLASH macro, because all platforms with '\\' either lack symlinks (mingw) or have working lstat (cygwin) and thus do not compile this file. 0 len should have already been filtered out above, with a failure return of ENOENT. */ - len = strlen (file); - if (file[len - 1] != '/' || S_ISDIR (sbuf->st_mode)) - return 0; - - /* At this point, a trailing slash is only permitted on - symlink-to-dir; but it should have found information on the - directory, not the symlink. Call stat() to get info about the - link's referent. Our replacement stat guarantees valid results, - even if the symlink is not pointing to a directory. */ - if (!S_ISLNK (sbuf->st_mode)) + if (result == 0) { - errno = ENOTDIR; - return -1; + if (S_ISDIR (sbuf->st_mode) || file[strlen (file) - 1] != '/') + result = stat_time_normalize (result, sbuf); + else + { + /* At this point, a trailing slash is permitted only on + symlink-to-dir; but it should have found information on the + directory, not the symlink. Call 'stat' to get info about the + link's referent. Our replacement stat guarantees valid results, + even if the symlink is not pointing to a directory. */ + if (!S_ISLNK (sbuf->st_mode)) + { + errno = ENOTDIR; + return -1; + } + result = stat (file, sbuf); + } } - return stat (file, sbuf); + return result; } #endif /* HAVE_LSTAT */ diff -Nru gdb-9.1/gnulib/import/m4/00gnulib.m4 gdb-10.2/gnulib/import/m4/00gnulib.m4 --- gdb-9.1/gnulib/import/m4/00gnulib.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/00gnulib.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,13 +1,14 @@ -# 00gnulib.m4 serial 3 -dnl Copyright (C) 2009-2016 Free Software Foundation, Inc. +# 00gnulib.m4 serial 7 +dnl Copyright (C) 2009-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl This file must be named something that sorts before all other -dnl gnulib-provided .m4 files. It is needed until such time as we can -dnl assume Autoconf 2.64, with its improved AC_DEFUN_ONCE and -dnl m4_divert semantics. +dnl gnulib-provided .m4 files. The first part is needed until such time +dnl as we can assume Autoconf 2.64, with its improved AC_DEFUN_ONCE and +dnl m4_divert semantics. The second part is needed until the clang fix +dnl has been included in Autoconf. # Until autoconf 2.63, handling of the diversion stack required m4_init # to be called first; but this does not happen with aclocal. Wrapping @@ -39,6 +40,76 @@ [m4_indir([_gl_DEFUN_ONCE([$1])])])])]dnl [AC][_DEFUN([_gl_DEFUN_ONCE([$1])], [$2])])]) +# The following definitions arrange to use a compiler option +# -Werror=implicit-function-declaration in AC_CHECK_DECL, when the +# compiler is clang. Without it, clang implicitly declares "known" +# library functions in C mode, but not in C++ mode, which would cause +# Gnulib to omit a declaration and thus later produce an error in C++ +# mode. As of clang 9.0, these "known" functions are identified through +# LIBBUILTIN invocations in the LLVM source file +# llvm/tools/clang/include/clang/Basic/Builtins.def. +# It's not possible to AC_REQUIRE the extra tests from AC_CHECK_DECL, +# because AC_CHECK_DECL, like other Autoconf built-ins, is not supposed +# to AC_REQUIRE anything: some configure.ac files have their first +# AC_CHECK_DECL executed conditionally. Therefore append the extra tests +# to AC_PROG_CC. +AC_DEFUN([gl_COMPILER_CLANG], +[ +dnl AC_REQUIRE([AC_PROG_CC]) + AC_CACHE_CHECK([whether the compiler is clang], + [gl_cv_compiler_clang], + [dnl Use _AC_COMPILE_IFELSE instead of AC_EGREP_CPP, to avoid error + dnl "circular dependency of AC_LANG_COMPILER(C)" if AC_PROG_CC has + dnl not yet been invoked. + _AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([[ + #ifdef __clang__ + barfbarf + #endif + ]],[[]]) + ], + [gl_cv_compiler_clang=no], + [gl_cv_compiler_clang=yes]) + ]) +]) +AC_DEFUN([gl_COMPILER_PREPARE_CHECK_DECL], +[ +dnl AC_REQUIRE([AC_PROG_CC]) +dnl AC_REQUIRE([gl_COMPILER_CLANG]) + AC_CACHE_CHECK([for compiler option needed when checking for declarations], + [gl_cv_compiler_check_decl_option], + [if test $gl_cv_compiler_clang = yes; then + dnl Test whether the compiler supports the option + dnl '-Werror=implicit-function-declaration'. + save_ac_compile="$ac_compile" + ac_compile="$ac_compile -Werror=implicit-function-declaration" + dnl Use _AC_COMPILE_IFELSE instead of AC_COMPILE_IFELSE, to avoid a + dnl warning "AC_COMPILE_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS". + _AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]],[[]])], + [gl_cv_compiler_check_decl_option='-Werror=implicit-function-declaration'], + [gl_cv_compiler_check_decl_option=none]) + ac_compile="$save_ac_compile" + else + gl_cv_compiler_check_decl_option=none + fi + ]) + if test "x$gl_cv_compiler_check_decl_option" != xnone; then + ac_compile_for_check_decl="$ac_compile $gl_cv_compiler_check_decl_option" + else + ac_compile_for_check_decl="$ac_compile" + fi +]) +dnl Redefine _AC_CHECK_DECL_BODY so that it references ac_compile_for_check_decl +dnl instead of ac_compile. If, for whatever reason, the override of AC_PROG_CC +dnl in zzgnulib.m4 is inactive, use the original ac_compile. +m4_define([_AC_CHECK_DECL_BODY], +[ ac_save_ac_compile="$ac_compile" + if test -n "$ac_compile_for_check_decl"; then + ac_compile="$ac_compile_for_check_decl" + fi] +m4_defn([_AC_CHECK_DECL_BODY])[ ac_compile="$ac_save_ac_compile" +]) + # gl_00GNULIB # ----------- # Witness macro that this file has been included. Needed to force diff -Nru gdb-9.1/gnulib/import/m4/absolute-header.m4 gdb-10.2/gnulib/import/m4/absolute-header.m4 --- gdb-9.1/gnulib/import/m4/absolute-header.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/absolute-header.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ # absolute-header.m4 serial 16 -dnl Copyright (C) 2006-2016 Free Software Foundation, Inc. +dnl Copyright (C) 2006-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. diff -Nru gdb-9.1/gnulib/import/m4/alloca.m4 gdb-10.2/gnulib/import/m4/alloca.m4 --- gdb-9.1/gnulib/import/m4/alloca.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/alloca.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ -# alloca.m4 serial 14 -dnl Copyright (C) 2002-2004, 2006-2007, 2009-2016 Free Software Foundation, +# alloca.m4 serial 15 +dnl Copyright (C) 2002-2004, 2006-2007, 2009-2020 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -37,6 +37,13 @@ fi AC_SUBST([ALLOCA_H]) AM_CONDITIONAL([GL_GENERATE_ALLOCA_H], [test -n "$ALLOCA_H"]) + + if test $ac_cv_working_alloca_h = yes; then + HAVE_ALLOCA_H=1 + else + HAVE_ALLOCA_H=0 + fi + AC_SUBST([HAVE_ALLOCA_H]) ]) # Prerequisites of lib/alloca.c. @@ -44,12 +51,12 @@ AC_DEFUN([gl_PREREQ_ALLOCA], [:]) # This works around a bug in autoconf <= 2.68. -# See <http://lists.gnu.org/archive/html/bug-gnulib/2011-06/msg00277.html>. +# See <https://lists.gnu.org/r/bug-gnulib/2011-06/msg00277.html>. m4_version_prereq([2.69], [] ,[ # This is taken from the following Autoconf patch: -# http://git.savannah.gnu.org/cgit/autoconf.git/commit/?id=6cd9f12520b0d6f76d3230d7565feba1ecf29497 +# https://git.savannah.gnu.org/gitweb/?p=autoconf.git;a=commitdiff;h=6cd9f12520b0d6f76d3230d7565feba1ecf29497 # _AC_LIBOBJ_ALLOCA # ----------------- diff -Nru gdb-9.1/gnulib/import/m4/arpa_inet_h.m4 gdb-10.2/gnulib/import/m4/arpa_inet_h.m4 --- gdb-9.1/gnulib/import/m4/arpa_inet_h.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/arpa_inet_h.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ -# arpa_inet_h.m4 serial 13 -dnl Copyright (C) 2006, 2008-2016 Free Software Foundation, Inc. +# arpa_inet_h.m4 serial 14 +dnl Copyright (C) 2006, 2008-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -24,6 +24,8 @@ AC_REQUIRE([gl_FEATURES_H]) + gl_PREREQ_SYS_H_WS2TCPIP + dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[ diff -Nru gdb-9.1/gnulib/import/m4/btowc.m4 gdb-10.2/gnulib/import/m4/btowc.m4 --- gdb-9.1/gnulib/import/m4/btowc.m4 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/btowc.m4 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,120 @@ +# btowc.m4 serial 11 +dnl Copyright (C) 2008-2020 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_BTOWC], +[ + AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) + + dnl Check whether <wchar.h> is usable at all, first. Otherwise the test + dnl program below may lead to an endless loop. See + dnl <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=42440>. + AC_REQUIRE([gl_WCHAR_H_INLINE_OK]) + + AC_CHECK_FUNCS_ONCE([btowc]) + if test $ac_cv_func_btowc = no; then + HAVE_BTOWC=0 + else + + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([gt_LOCALE_FR]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + + dnl Cygwin 1.7.2 btowc('\0') is WEOF, not 0. + AC_CACHE_CHECK([whether btowc(0) is correct], + [gl_cv_func_btowc_nul], + [ + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include <string.h> +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> +int main () +{ + if (btowc ('\0') != 0) + return 1; + return 0; +}]])], + [gl_cv_func_btowc_nul=yes], + [gl_cv_func_btowc_nul=no], + [ +changequote(,)dnl + case "$host_os" in + # Guess no on Cygwin. + cygwin*) gl_cv_func_btowc_nul="guessing no" ;; + # Guess yes on native Windows. + mingw*) gl_cv_func_btowc_nul="guessing yes" ;; + # Guess yes otherwise. + *) gl_cv_func_btowc_nul="guessing yes" ;; + esac +changequote([,])dnl + ]) + ]) + + dnl IRIX 6.5 btowc(EOF) is 0xFF, not WEOF. + AC_CACHE_CHECK([whether btowc(EOF) is correct], + [gl_cv_func_btowc_eof], + [ + dnl Initial guess, used when cross-compiling or when no suitable locale + dnl is present. +changequote(,)dnl + case "$host_os" in + # Guess no on IRIX. + irix*) gl_cv_func_btowc_eof="guessing no" ;; + # Guess yes on native Windows. + mingw*) gl_cv_func_btowc_eof="guessing yes" ;; + # Guess yes otherwise. + *) gl_cv_func_btowc_eof="guessing yes" ;; + esac +changequote([,])dnl + if test $LOCALE_FR != none; then + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include <locale.h> +#include <string.h> +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> +int main () +{ + if (setlocale (LC_ALL, "$LOCALE_FR") != NULL) + { + if (btowc (EOF) != WEOF) + return 1; + } + return 0; +}]])], + [gl_cv_func_btowc_eof=yes], + [gl_cv_func_btowc_eof=no], + [:]) + fi + ]) + + case "$gl_cv_func_btowc_nul" in + *yes) ;; + *) REPLACE_BTOWC=1 ;; + esac + case "$gl_cv_func_btowc_eof" in + *yes) ;; + *) REPLACE_BTOWC=1 ;; + esac + fi +]) + +# Prerequisites of lib/btowc.c. +AC_DEFUN([gl_PREREQ_BTOWC], [ + : +]) diff -Nru gdb-9.1/gnulib/import/m4/builtin-expect.m4 gdb-10.2/gnulib/import/m4/builtin-expect.m4 --- gdb-9.1/gnulib/import/m4/builtin-expect.m4 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/builtin-expect.m4 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,49 @@ +dnl Check for __builtin_expect. + +dnl Copyright 2016-2020 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl Written by Paul Eggert. + +AC_DEFUN([gl___BUILTIN_EXPECT], +[ + AC_CACHE_CHECK([for __builtin_expect], + [gl_cv___builtin_expect], + [AC_LINK_IFELSE( + [AC_LANG_SOURCE([[ + int + main (int argc, char **argv) + { + argc = __builtin_expect (argc, 100); + return argv[argc != 100][0]; + }]])], + [gl_cv___builtin_expect=yes], + [AC_LINK_IFELSE( + [AC_LANG_SOURCE([[ + #include <builtins.h> + int + main (int argc, char **argv) + { + argc = __builtin_expect (argc, 100); + return argv[argc != 100][0]; + }]])], + [gl_cv___builtin_expect="in <builtins.h>"], + [gl_cv___builtin_expect=no])])]) + if test "$gl_cv___builtin_expect" = yes; then + AC_DEFINE([HAVE___BUILTIN_EXPECT], [1]) + elif test "$gl_cv___builtin_expect" = "in <builtins.h>"; then + AC_DEFINE([HAVE___BUILTIN_EXPECT], [2]) + fi + AH_VERBATIM([HAVE___BUILTIN_EXPECT], + [/* Define to 1 if the compiler supports __builtin_expect, + and to 2 if <builtins.h> does. */ +#undef HAVE___BUILTIN_EXPECT +#ifndef HAVE___BUILTIN_EXPECT +# define __builtin_expect(e, c) (e) +#elif HAVE___BUILTIN_EXPECT == 2 +# include <builtins.h> +#endif + ]) +]) diff -Nru gdb-9.1/gnulib/import/m4/canonicalize.m4 gdb-10.2/gnulib/import/m4/canonicalize.m4 --- gdb-9.1/gnulib/import/m4/canonicalize.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/canonicalize.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ -# canonicalize.m4 serial 28 +# canonicalize.m4 serial 31 -dnl Copyright (C) 2003-2007, 2009-2016 Free Software Foundation, Inc. +dnl Copyright (C) 2003-2007, 2009-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -35,8 +35,8 @@ HAVE_REALPATH=0 else case "$gl_cv_func_realpath_works" in - *yes) ;; - *) REPLACE_REALPATH=1 ;; + *yes) ;; + *) REPLACE_REALPATH=1 ;; esac fi else @@ -113,8 +113,12 @@ [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_realpath_works="guessing yes" ;; - # If we don't know, assume the worst. - *) gl_cv_func_realpath_works="guessing no" ;; + # Guess yes on musl systems. + *-musl*) gl_cv_func_realpath_works="guessing yes" ;; + # Guess no on native Windows. + mingw*) gl_cv_func_realpath_works="guessing no" ;; + # If we don't know, obey --enable-cross-guesses. + *) gl_cv_func_realpath_works="$gl_cross_guess_normal" ;; esac ]) rm -rf conftest.a conftest.d diff -Nru gdb-9.1/gnulib/import/m4/chdir-long.m4 gdb-10.2/gnulib/import/m4/chdir-long.m4 --- gdb-9.1/gnulib/import/m4/chdir-long.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/chdir-long.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -#serial 15 +#serial 16 # Use Gnulib's robust chdir function. # It can handle arbitrarily long directory names, which means @@ -6,7 +6,7 @@ # never fails with ENAMETOOLONG. # Arrange to compile chdir-long.c only on systems that define PATH_MAX. -dnl Copyright (C) 2004-2007, 2009-2016 Free Software Foundation, Inc. +dnl Copyright (C) 2004-2007, 2009-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -17,14 +17,14 @@ [ AC_REQUIRE([gl_PATHMAX_SNIPPET_PREREQ]) AC_CACHE_CHECK([whether this system has an arbitrary file name length limit], - gl_cv_have_arbitrary_file_name_length_limit, + [gl_cv_have_arbitrary_file_name_length_limit], [AC_EGREP_CPP([have_arbitrary_file_name_length_limit], gl_PATHMAX_SNIPPET[ #ifdef PATH_MAX have_arbitrary_file_name_length_limit #endif], - gl_cv_have_arbitrary_file_name_length_limit=yes, - gl_cv_have_arbitrary_file_name_length_limit=no)]) + [gl_cv_have_arbitrary_file_name_length_limit=yes], + [gl_cv_have_arbitrary_file_name_length_limit=no])]) ]) AC_DEFUN([gl_PREREQ_CHDIR_LONG], [:]) diff -Nru gdb-9.1/gnulib/import/m4/closedir.m4 gdb-10.2/gnulib/import/m4/closedir.m4 --- gdb-9.1/gnulib/import/m4/closedir.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/closedir.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ -# closedir.m4 serial 5 -dnl Copyright (C) 2011-2016 Free Software Foundation, Inc. +# closedir.m4 serial 6 +dnl Copyright (C) 2011-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -7,6 +7,7 @@ AC_DEFUN([gl_FUNC_CLOSEDIR], [ AC_REQUIRE([gl_DIRENT_H_DEFAULTS]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CHECK_FUNCS([closedir]) if test $ac_cv_func_closedir = no; then diff -Nru gdb-9.1/gnulib/import/m4/close.m4 gdb-10.2/gnulib/import/m4/close.m4 --- gdb-9.1/gnulib/import/m4/close.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/close.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ -# close.m4 serial 8 -dnl Copyright (C) 2008-2016 Free Software Foundation, Inc. +# close.m4 serial 9 +dnl Copyright (C) 2008-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -7,10 +7,12 @@ AC_DEFUN([gl_FUNC_CLOSE], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) - AC_REQUIRE([gl_MSVC_INVAL]) - if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then - REPLACE_CLOSE=1 - fi + m4_ifdef([gl_MSVC_INVAL], [ + AC_REQUIRE([gl_MSVC_INVAL]) + if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then + REPLACE_CLOSE=1 + fi + ]) m4_ifdef([gl_PREREQ_SYS_H_WINSOCK2], [ gl_PREREQ_SYS_H_WINSOCK2 if test $UNISTD_H_HAVE_WINSOCK2_H = 1; then diff -Nru gdb-9.1/gnulib/import/m4/codeset.m4 gdb-10.2/gnulib/import/m4/codeset.m4 --- gdb-9.1/gnulib/import/m4/codeset.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/codeset.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ # codeset.m4 serial 5 (gettext-0.18.2) -dnl Copyright (C) 2000-2002, 2006, 2008-2014, 2016 Free Software Foundation, -dnl Inc. +dnl Copyright (C) 2000-2002, 2006, 2008-2014, 2016, 2019-2020 Free Software +dnl Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. diff -Nru gdb-9.1/gnulib/import/m4/configmake.m4 gdb-10.2/gnulib/import/m4/configmake.m4 --- gdb-9.1/gnulib/import/m4/configmake.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/configmake.m4 1970-01-01 00:00:00.000000000 +0000 @@ -1,55 +0,0 @@ -# configmake.m4 serial 2 -dnl Copyright (C) 2010-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -# gl_CONFIGMAKE_PREP -# ------------------ -# Guarantee all of the standard directory variables, even when used with -# autoconf 2.59 (datarootdir wasn't supported until 2.59c, and runstatedir -# in 2.70) or automake 1.9.6 (pkglibexecdir wasn't supported until 1.10b, -# and runstatedir in 1.14.1). -AC_DEFUN([gl_CONFIGMAKE_PREP], -[ - dnl Technically, datadir should default to datarootdir. But if - dnl autoconf is too old to provide datarootdir, then reversing the - dnl definition is a reasonable compromise. Only AC_SUBST a variable - dnl if it was not already defined earlier by autoconf. - if test "x$datarootdir" = x; then - AC_SUBST([datarootdir], ['${datadir}']) - fi - dnl Copy the approach used in autoconf 2.60. - if test "x$docdir" = x; then - AC_SUBST([docdir], [m4_ifset([AC_PACKAGE_TARNAME], - ['${datarootdir}/doc/${PACKAGE_TARNAME}'], - ['${datarootdir}/doc/${PACKAGE}'])]) - fi - dnl The remaining variables missing from autoconf 2.59 are easier. - if test "x$htmldir" = x; then - AC_SUBST([htmldir], ['${docdir}']) - fi - if test "x$dvidir" = x; then - AC_SUBST([dvidir], ['${docdir}']) - fi - if test "x$pdfdir" = x; then - AC_SUBST([pdfdir], ['${docdir}']) - fi - if test "x$psdir" = x; then - AC_SUBST([psdir], ['${docdir}']) - fi - if test "x$lispdir" = x; then - AC_SUBST([lispdir], ['${datarootdir}/emacs/site-lisp']) - fi - if test "x$localedir" = x; then - AC_SUBST([localedir], ['${datarootdir}/locale']) - fi - dnl Added in autoconf 2.70 - if test "x$runstatedir" = x; then - AC_SUBST([runstatedir], ['${localstatedir}/run']) - fi - - dnl Automake 1.9.6 only lacks pkglibexecdir; and since 1.11 merely - dnl provides it without AC_SUBST, this blind use of AC_SUBST is safe. - AC_SUBST([pkglibexecdir], ['${libexecdir}/${PACKAGE}']) -]) diff -Nru gdb-9.1/gnulib/import/m4/ctype.m4 gdb-10.2/gnulib/import/m4/ctype.m4 --- gdb-9.1/gnulib/import/m4/ctype.m4 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/ctype.m4 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,32 @@ +# ctype_h.m4 serial 6 +dnl Copyright (C) 2009-2020 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_CTYPE_H], +[ + AC_REQUIRE([gl_CTYPE_H_DEFAULTS]) + + dnl <ctype.h> is always overridden, because of GNULIB_POSIXCHECK. + gl_NEXT_HEADERS([ctype.h]) + + dnl Check for declarations of anything we want to poison if the + dnl corresponding gnulib module is not in use. + gl_WARN_ON_USE_PREPARE([[#include <ctype.h> + ]], [isblank]) +]) + +AC_DEFUN([gl_CTYPE_MODULE_INDICATOR], +[ + dnl Use AC_REQUIRE here, so that the default settings are expanded once only. + AC_REQUIRE([gl_CTYPE_H_DEFAULTS]) + gl_MODULE_INDICATOR_SET_VARIABLE([$1]) +]) + +AC_DEFUN([gl_CTYPE_H_DEFAULTS], +[ + GNULIB_ISBLANK=0; AC_SUBST([GNULIB_ISBLANK]) + dnl Assume proper GNU behavior unless another module says otherwise. + HAVE_ISBLANK=1; AC_SUBST([HAVE_ISBLANK]) +]) diff -Nru gdb-9.1/gnulib/import/m4/d-ino.m4 gdb-10.2/gnulib/import/m4/d-ino.m4 --- gdb-9.1/gnulib/import/m4/d-ino.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/d-ino.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,11 +1,11 @@ -# serial 15 +# serial 20 dnl From Jim Meyering. dnl dnl Check whether struct dirent has a member named d_ino. dnl -# Copyright (C) 1997, 1999-2001, 2003-2004, 2006-2007, 2009-2016 Free Software +# Copyright (C) 1997, 1999-2001, 2003-2004, 2006-2007, 2009-2020 Free Software # Foundation, Inc. # This file is free software; the Free Software Foundation @@ -15,7 +15,7 @@ AC_DEFUN([gl_CHECK_TYPE_STRUCT_DIRENT_D_INO], [AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([for d_ino member in directory struct], - gl_cv_struct_dirent_d_ino, + [gl_cv_struct_dirent_d_ino], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <sys/types.h> @@ -29,21 +29,25 @@ return 1; e = readdir (dp); if (! e) - return 2; + { closedir (dp); return 2; } if (lstat (e->d_name, &st) != 0) - return 3; + { closedir (dp); return 3; } if (e->d_ino != st.st_ino) - return 4; + { closedir (dp); return 4; } closedir (dp); return 0; ]])], [gl_cv_struct_dirent_d_ino=yes], [gl_cv_struct_dirent_d_ino=no], [case "$host_os" in - # Guess yes on glibc systems with Linux kernel. - linux*-gnu*) gl_cv_struct_dirent_d_ino="guessing yes" ;; - # If we don't know, assume the worst. - *) gl_cv_struct_dirent_d_ino="guessing no" ;; + # Guess yes on glibc systems with Linux kernel. + linux*-gnu*) gl_cv_struct_dirent_d_ino="guessing yes" ;; + # Guess yes on musl systems with Linux kernel. + linux*-musl*) gl_cv_struct_dirent_d_ino="guessing yes" ;; + # Guess no on native Windows. + mingw*) gl_cv_struct_dirent_d_ino="guessing no" ;; + # If we don't know, obey --enable-cross-guesses. + *) gl_cv_struct_dirent_d_ino="$gl_cross_guess_normal" ;; esac ])]) case "$gl_cv_struct_dirent_d_ino" in diff -Nru gdb-9.1/gnulib/import/m4/dirent_h.m4 gdb-10.2/gnulib/import/m4/dirent_h.m4 --- gdb-9.1/gnulib/import/m4/dirent_h.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/dirent_h.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ # dirent_h.m4 serial 16 -dnl Copyright (C) 2008-2016 Free Software Foundation, Inc. +dnl Copyright (C) 2008-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. diff -Nru gdb-9.1/gnulib/import/m4/dirfd.m4 gdb-10.2/gnulib/import/m4/dirfd.m4 --- gdb-9.1/gnulib/import/m4/dirfd.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/dirfd.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,8 +1,8 @@ -# serial 24 -*- Autoconf -*- +# serial 26 -*- Autoconf -*- dnl Find out how to get the file descriptor associated with an open DIR*. -# Copyright (C) 2001-2006, 2008-2016 Free Software Foundation, Inc. +# Copyright (C) 2001-2006, 2008-2020 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -12,6 +12,7 @@ AC_DEFUN([gl_FUNC_DIRFD], [ AC_REQUIRE([gl_DIRENT_H_DEFAULTS]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl Persuade glibc <dirent.h> to declare dirfd(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) @@ -25,15 +26,15 @@ fi AC_CACHE_CHECK([whether dirfd is a macro], - gl_cv_func_dirfd_macro, + [gl_cv_func_dirfd_macro], [AC_EGREP_CPP([dirent_header_defines_dirfd], [ #include <sys/types.h> #include <dirent.h> #ifdef dirfd dirent_header_defines_dirfd #endif], - gl_cv_func_dirfd_macro=yes, - gl_cv_func_dirfd_macro=no)]) + [gl_cv_func_dirfd_macro=yes], + [gl_cv_func_dirfd_macro=no])]) # Use the replacement if we have no function or macro with that name, # or if OS/2 kLIBC whose dirfd() does not work. diff -Nru gdb-9.1/gnulib/import/m4/dirname.m4 gdb-10.2/gnulib/import/m4/dirname.m4 --- gdb-9.1/gnulib/import/m4/dirname.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/dirname.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ #serial 10 -*- autoconf -*- -dnl Copyright (C) 2002-2006, 2009-2016 Free Software Foundation, Inc. +dnl Copyright (C) 2002-2006, 2009-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. diff -Nru gdb-9.1/gnulib/import/m4/double-slash-root.m4 gdb-10.2/gnulib/import/m4/double-slash-root.m4 --- gdb-9.1/gnulib/import/m4/double-slash-root.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/double-slash-root.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ # double-slash-root.m4 serial 4 -*- Autoconf -*- -dnl Copyright (C) 2006, 2008-2016 Free Software Foundation, Inc. +dnl Copyright (C) 2006, 2008-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. diff -Nru gdb-9.1/gnulib/import/m4/d-type.m4 gdb-10.2/gnulib/import/m4/d-type.m4 --- gdb-9.1/gnulib/import/m4/d-type.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/d-type.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,11 +1,11 @@ -# serial 11 +# serial 12 dnl From Jim Meyering. dnl dnl Check whether struct dirent has a member named d_type. dnl -# Copyright (C) 1997, 1999-2004, 2006, 2009-2016 Free Software Foundation, Inc. +# Copyright (C) 1997, 1999-2004, 2006, 2009-2020 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -13,7 +13,7 @@ AC_DEFUN([gl_CHECK_TYPE_STRUCT_DIRENT_D_TYPE], [AC_CACHE_CHECK([for d_type member in directory struct], - gl_cv_struct_dirent_d_type, + [gl_cv_struct_dirent_d_type], [AC_LINK_IFELSE([AC_LANG_PROGRAM([[ #include <sys/types.h> #include <dirent.h> diff -Nru gdb-9.1/gnulib/import/m4/dup2.m4 gdb-10.2/gnulib/import/m4/dup2.m4 --- gdb-9.1/gnulib/import/m4/dup2.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/dup2.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ #serial 25 -dnl Copyright (C) 2002, 2005, 2007, 2009-2016 Free Software Foundation, Inc. +dnl Copyright (C) 2002, 2005, 2007, 2009-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. diff -Nru gdb-9.1/gnulib/import/m4/dup.m4 gdb-10.2/gnulib/import/m4/dup.m4 --- gdb-9.1/gnulib/import/m4/dup.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/dup.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ -# dup.m4 serial 4 -dnl Copyright (C) 2011-2016 Free Software Foundation, Inc. +# dup.m4 serial 6 +dnl Copyright (C) 2011-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -7,10 +7,13 @@ AC_DEFUN([gl_FUNC_DUP], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) - AC_REQUIRE([gl_MSVC_INVAL]) - if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then - REPLACE_DUP=1 - fi + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + m4_ifdef([gl_MSVC_INVAL], [ + AC_REQUIRE([gl_MSVC_INVAL]) + if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then + REPLACE_DUP=1 + fi + ]) dnl Replace dup() for supporting the gnulib-defined fchdir() function, dnl to keep fchdir's bookkeeping up-to-date. m4_ifdef([gl_FUNC_FCHDIR], [ @@ -31,7 +34,12 @@ ], [gl_cv_func_dup_works=yes], [gl_cv_func_dup_works=no], - [gl_cv_func_dup_works='guessing yes']) + [case "$host_os" in + # Guess no on native Windows. + mingw*) gl_cv_func_dup_works="guessing no" ;; + *) gl_cv_func_dup_works="guessing yes" ;; + esac + ]) ]) case "$gl_cv_func_dup_works" in *yes) ;; diff -Nru gdb-9.1/gnulib/import/m4/eealloc.m4 gdb-10.2/gnulib/import/m4/eealloc.m4 --- gdb-9.1/gnulib/import/m4/eealloc.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/eealloc.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ # eealloc.m4 serial 3 -dnl Copyright (C) 2003, 2009-2016 Free Software Foundation, Inc. +dnl Copyright (C) 2003, 2009-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. diff -Nru gdb-9.1/gnulib/import/m4/environ.m4 gdb-10.2/gnulib/import/m4/environ.m4 --- gdb-9.1/gnulib/import/m4/environ.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/environ.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ -# environ.m4 serial 6 -dnl Copyright (C) 2001-2004, 2006-2016 Free Software Foundation, Inc. +# environ.m4 serial 7 +dnl Copyright (C) 2001-2004, 2006-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -29,16 +29,14 @@ AC_DEFUN([gt_CHECK_VAR_DECL], [ define([gt_cv_var], [gt_cv_var_]$2[_declaration]) - AC_MSG_CHECKING([if $2 is properly declared]) - AC_CACHE_VAL([gt_cv_var], [ - AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[$1 - extern struct { int foo; } $2;]], - [[$2.foo = 1;]])], - [gt_cv_var=no], - [gt_cv_var=yes])]) - AC_MSG_RESULT([$gt_cv_var]) + AC_CACHE_CHECK([if $2 is properly declared], [gt_cv_var], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[$1 + extern struct { int foo; } $2;]], + [[$2.foo = 1;]])], + [gt_cv_var=no], + [gt_cv_var=yes])]) if test $gt_cv_var = yes; then AC_DEFINE([HAVE_]m4_translit($2, [a-z], [A-Z])[_DECL], 1, [Define if you have the declaration of $2.]) diff -Nru gdb-9.1/gnulib/import/m4/errno_h.m4 gdb-10.2/gnulib/import/m4/errno_h.m4 --- gdb-9.1/gnulib/import/m4/errno_h.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/errno_h.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,9 +1,11 @@ -# errno_h.m4 serial 12 -dnl Copyright (C) 2004, 2006, 2008-2016 Free Software Foundation, Inc. +# errno_h.m4 serial 13 +dnl Copyright (C) 2004, 2006, 2008-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. +AC_PREREQ([2.61]) + AC_DEFUN_ONCE([gl_HEADER_ERRNO_H], [ AC_REQUIRE([AC_PROG_CC]) @@ -129,9 +131,3 @@ AC_SUBST($1[_VALUE]) fi ]) - -dnl Autoconf >= 2.61 has AC_COMPUTE_INT built-in. -dnl Remove this when we can assume autoconf >= 2.61. -m4_ifdef([AC_COMPUTE_INT], [], [ - AC_DEFUN([AC_COMPUTE_INT], [_AC_COMPUTE_INT([$2],[$1],[$3],[$4])]) -]) diff -Nru gdb-9.1/gnulib/import/m4/error.m4 gdb-10.2/gnulib/import/m4/error.m4 --- gdb-9.1/gnulib/import/m4/error.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/error.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ #serial 14 -# Copyright (C) 1996-1998, 2001-2004, 2009-2016 Free Software Foundation, Inc. +# Copyright (C) 1996-1998, 2001-2004, 2009-2020 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff -Nru gdb-9.1/gnulib/import/m4/exponentd.m4 gdb-10.2/gnulib/import/m4/exponentd.m4 --- gdb-9.1/gnulib/import/m4/exponentd.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/exponentd.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ # exponentd.m4 serial 3 -dnl Copyright (C) 2007-2008, 2010-2016 Free Software Foundation, Inc. +dnl Copyright (C) 2007-2008, 2010-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. diff -Nru gdb-9.1/gnulib/import/m4/exponentl.m4 gdb-10.2/gnulib/import/m4/exponentl.m4 --- gdb-9.1/gnulib/import/m4/exponentl.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/exponentl.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,11 +1,12 @@ -# exponentl.m4 serial 3 -dnl Copyright (C) 2007-2016 Free Software Foundation, Inc. +# exponentl.m4 serial 5 +dnl Copyright (C) 2007-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_LONG_DOUBLE_EXPONENT_LOCATION], [ AC_REQUIRE([gl_BIGENDIAN]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([where to find the exponent in a 'long double'], [gl_cv_cc_long_double_expbit0], [ @@ -21,14 +22,14 @@ memory_long_double; static unsigned int ored_words[NWORDS]; static unsigned int anded_words[NWORDS]; -static void add_to_ored_words (long double x) +static void add_to_ored_words (long double *x) { memory_long_double m; size_t i; /* Clear it first, in case sizeof (long double) < sizeof (memory_long_double). */ memset (&m, 0, sizeof (memory_long_double)); - m.value = x; + m.value = *x; for (i = 0; i < NWORDS; i++) { ored_words[i] |= m.word[i]; @@ -37,17 +38,15 @@ } int main () { + static long double samples[5] = { 0.25L, 0.5L, 1.0L, 2.0L, 4.0L }; size_t j; FILE *fp = fopen ("conftest.out", "w"); if (fp == NULL) return 1; for (j = 0; j < NWORDS; j++) anded_words[j] = ~ (unsigned int) 0; - add_to_ored_words (0.25L); - add_to_ored_words (0.5L); - add_to_ored_words (1.0L); - add_to_ored_words (2.0L); - add_to_ored_words (4.0L); + for (j = 0; j < 5; j++) + add_to_ored_words (&samples[j]); /* Remove bits that are common (e.g. if representation of the first mantissa bit is explicit). */ for (j = 0; j < NWORDS; j++) @@ -79,9 +78,24 @@ [gl_cv_cc_long_double_expbit0=`cat conftest.out`], [gl_cv_cc_long_double_expbit0="unknown"], [ - dnl When cross-compiling, we don't know. It depends on the + dnl When cross-compiling, in general we don't know. It depends on the dnl ABI and compiler version. There are too many cases. gl_cv_cc_long_double_expbit0="unknown" + case "$host_os" in + mingw*) # On native Windows (little-endian), we know the result + # in two cases: mingw, MSVC. + AC_EGREP_CPP([Known], [ +#ifdef __MINGW32__ + Known +#endif + ], [gl_cv_cc_long_double_expbit0="word 2 bit 0"]) + AC_EGREP_CPP([Known], [ +#ifdef _MSC_VER + Known +#endif + ], [gl_cv_cc_long_double_expbit0="word 1 bit 20"]) + ;; + esac ]) rm -f conftest.out ]) diff -Nru gdb-9.1/gnulib/import/m4/extensions.m4 gdb-10.2/gnulib/import/m4/extensions.m4 --- gdb-9.1/gnulib/import/m4/extensions.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/extensions.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,7 +1,7 @@ -# serial 15 -*- Autoconf -*- +# serial 18 -*- Autoconf -*- # Enable extensions on systems that normally disable them. -# Copyright (C) 2003, 2006-2016 Free Software Foundation, Inc. +# Copyright (C) 2003, 2006-2020 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -68,6 +68,14 @@ #ifndef _GNU_SOURCE # undef _GNU_SOURCE #endif +/* Enable NetBSD extensions on NetBSD. */ +#ifndef _NETBSD_SOURCE +# undef _NETBSD_SOURCE +#endif +/* Enable OpenBSD extensions on NetBSD. */ +#ifndef _OPENBSD_SOURCE +# undef _OPENBSD_SOURCE +#endif /* Enable threading extensions on Solaris. */ #ifndef _POSIX_PTHREAD_SEMANTICS # undef _POSIX_PTHREAD_SEMANTICS @@ -110,6 +118,11 @@ #ifndef _XOPEN_SOURCE # undef _XOPEN_SOURCE #endif +/* Enable X/Open compliant socket functions that do not require linking + with -lxnet on HP-UX 11.11. */ +#ifndef _HPUX_ALT_XOPEN_SOCKET_API +# undef _HPUX_ALT_XOPEN_SOCKET_API +#endif /* Enable general extensions on Solaris. */ #ifndef __EXTENSIONS__ # undef __EXTENSIONS__ @@ -128,6 +141,8 @@ AC_DEFINE([_ALL_SOURCE]) AC_DEFINE([_DARWIN_C_SOURCE]) AC_DEFINE([_GNU_SOURCE]) + AC_DEFINE([_NETBSD_SOURCE]) + AC_DEFINE([_OPENBSD_SOURCE]) AC_DEFINE([_POSIX_PTHREAD_SEMANTICS]) AC_DEFINE([__STDC_WANT_IEC_60559_ATTRIBS_EXT__]) AC_DEFINE([__STDC_WANT_IEC_60559_BFP_EXT__]) @@ -153,6 +168,7 @@ [ac_cv_should_define__xopen_source=yes])])]) test $ac_cv_should_define__xopen_source = yes && AC_DEFINE([_XOPEN_SOURCE], [500]) + AC_DEFINE([_HPUX_ALT_XOPEN_SOCKET_API]) ])# AC_USE_SYSTEM_EXTENSIONS # gl_USE_SYSTEM_EXTENSIONS diff -Nru gdb-9.1/gnulib/import/m4/extern-inline.m4 gdb-10.2/gnulib/import/m4/extern-inline.m4 --- gdb-9.1/gnulib/import/m4/extern-inline.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/extern-inline.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ dnl 'extern inline' a la ISO C99. -dnl Copyright 2012-2016 Free Software Foundation, Inc. +dnl Copyright 2012-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -11,7 +11,7 @@ [/* Please see the Gnulib manual for how to use these macros. Suppress extern inline with HP-UX cc, as it appears to be broken; see - <http://lists.gnu.org/archive/html/bug-texinfo/2013-02/msg00030.html>. + <https://lists.gnu.org/r/bug-texinfo/2013-02/msg00030.html>. Suppress extern inline with Sun C in standards-conformance mode, as it mishandles inline functions that call each other. E.g., for 'inline void f @@ -25,20 +25,32 @@ if isdigit is mistakenly implemented via a static inline function, a program containing an extern inline function that calls isdigit may not work since the C standard prohibits extern inline functions - from calling static functions. This bug is known to occur on: + from calling static functions (ISO C 99 section 6.7.4.(3). + This bug is known to occur on: OS X 10.8 and earlier; see: - http://lists.gnu.org/archive/html/bug-gnulib/2012-12/msg00023.html + https://lists.gnu.org/r/bug-gnulib/2012-12/msg00023.html DragonFly; see - http://muscles.dragonflybsd.org/bulk/bleeding-edge-potential/latest-per-pkg/ah-tty-0.3.12.log + http://muscles.dragonflybsd.org/bulk/clang-master-potential/20141111_102002/logs/ah-tty-0.3.12.log FreeBSD; see: - http://lists.gnu.org/archive/html/bug-gnulib/2014-07/msg00104.html + https://lists.gnu.org/r/bug-gnulib/2014-07/msg00104.html OS X 10.9 has a macro __header_inline indicating the bug is fixed for C and - for clang but remains for g++; see <http://trac.macports.org/ticket/41033>. - Assume DragonFly and FreeBSD will be similar. */ + for clang but remains for g++; see <https://trac.macports.org/ticket/41033>. + Assume DragonFly and FreeBSD will be similar. + + GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99 + inline semantics, unless -fgnu89-inline is used. It defines a macro + __GNUC_STDC_INLINE__ to indicate this situation or a macro + __GNUC_GNU_INLINE__ to indicate the opposite situation. + GCC 4.2 with -std=c99 or -std=gnu99 implements the GNU C inline + semantics but warns, unless -fgnu89-inline is used: + warning: C99 inline functions are not supported; using GNU89 + warning: to disable this warning use -fgnu89-inline or the gnu_inline function attribute + It defines a macro __GNUC_GNU_INLINE__ to indicate this situation. + */ #if (((defined __APPLE__ && defined __MACH__) \ || defined __DragonFly__ || defined __FreeBSD__) \ && (defined __header_inline \ diff -Nru gdb-9.1/gnulib/import/m4/fchdir.m4 gdb-10.2/gnulib/import/m4/fchdir.m4 --- gdb-9.1/gnulib/import/m4/fchdir.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/fchdir.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ -# fchdir.m4 serial 21 -dnl Copyright (C) 2006-2016 Free Software Foundation, Inc. +# fchdir.m4 serial 25 +dnl Copyright (C) 2006-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -31,10 +31,14 @@ [gl_cv_func_open_directory_works=yes], [gl_cv_func_open_directory_works=no], [case "$host_os" in - # Guess yes on glibc systems. - *-gnu*) gl_cv_func_open_directory_works="guessing yes" ;; - # If we don't know, assume the worst. - *) gl_cv_func_open_directory_works="guessing no" ;; + # Guess yes on Linux systems. + linux-* | linux) gl_cv_func_open_directory_works="guessing yes" ;; + # Guess yes on glibc systems. + *-gnu* | gnu*) gl_cv_func_open_directory_works="guessing yes" ;; + # Guess no on native Windows. + mingw*) gl_cv_func_open_directory_works="guessing no" ;; + # If we don't know, obey --enable-cross-guesses. + *) gl_cv_func_open_directory_works="$gl_cross_guess_normal" ;; esac ])]) case "$gl_cv_func_open_directory_works" in diff -Nru gdb-9.1/gnulib/import/m4/fcntl_h.m4 gdb-10.2/gnulib/import/m4/fcntl_h.m4 --- gdb-9.1/gnulib/import/m4/fcntl_h.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/fcntl_h.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ -# serial 15 +# serial 16 # Configure fcntl.h. -dnl Copyright (C) 2006-2007, 2009-2016 Free Software Foundation, Inc. +dnl Copyright (C) 2006-2007, 2009-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -37,6 +37,7 @@ AC_DEFUN([gl_FCNTL_H_DEFAULTS], [ + GNULIB_CREAT=0; AC_SUBST([GNULIB_CREAT]) GNULIB_FCNTL=0; AC_SUBST([GNULIB_FCNTL]) GNULIB_NONBLOCKING=0; AC_SUBST([GNULIB_NONBLOCKING]) GNULIB_OPEN=0; AC_SUBST([GNULIB_OPEN]) @@ -44,6 +45,7 @@ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_FCNTL=1; AC_SUBST([HAVE_FCNTL]) HAVE_OPENAT=1; AC_SUBST([HAVE_OPENAT]) + REPLACE_CREAT=0; AC_SUBST([REPLACE_CREAT]) REPLACE_FCNTL=0; AC_SUBST([REPLACE_FCNTL]) REPLACE_OPEN=0; AC_SUBST([REPLACE_OPEN]) REPLACE_OPENAT=0; AC_SUBST([REPLACE_OPENAT]) diff -Nru gdb-9.1/gnulib/import/m4/fcntl.m4 gdb-10.2/gnulib/import/m4/fcntl.m4 --- gdb-9.1/gnulib/import/m4/fcntl.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/fcntl.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ # fcntl.m4 serial 9 -dnl Copyright (C) 2009-2016 Free Software Foundation, Inc. +dnl Copyright (C) 2009-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. diff -Nru gdb-9.1/gnulib/import/m4/fcntl-o.m4 gdb-10.2/gnulib/import/m4/fcntl-o.m4 --- gdb-9.1/gnulib/import/m4/fcntl-o.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/fcntl-o.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,23 +1,22 @@ -# fcntl-o.m4 serial 4 -dnl Copyright (C) 2006, 2009-2016 Free Software Foundation, Inc. +# fcntl-o.m4 serial 6 +dnl Copyright (C) 2006, 2009-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Written by Paul Eggert. +AC_PREREQ([2.60]) + # Test whether the flags O_NOATIME and O_NOFOLLOW actually work. # Define HAVE_WORKING_O_NOATIME to 1 if O_NOATIME works, or to 0 otherwise. # Define HAVE_WORKING_O_NOFOLLOW to 1 if O_NOFOLLOW works, or to 0 otherwise. AC_DEFUN([gl_FCNTL_O_FLAGS], [ dnl Persuade glibc <fcntl.h> to define O_NOATIME and O_NOFOLLOW. - dnl AC_USE_SYSTEM_EXTENSIONS was introduced in autoconf 2.60 and obsoletes - dnl AC_GNU_SOURCE. - m4_ifdef([AC_USE_SYSTEM_EXTENSIONS], - [AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])], - [AC_REQUIRE([AC_GNU_SOURCE])]) + AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CHECK_HEADERS_ONCE([unistd.h]) AC_CHECK_FUNCS_ONCE([symlink]) AC_CACHE_CHECK([for working fcntl.h], [gl_cv_header_working_fcntl_h], @@ -116,7 +115,13 @@ 68) gl_cv_header_working_fcntl_h='no (bad O_NOATIME, O_NOFOLLOW)';; #( *) gl_cv_header_working_fcntl_h='no';; esac], - [gl_cv_header_working_fcntl_h=cross-compiling])]) + [case "$host_os" in + # Guess 'no' on native Windows. + mingw*) gl_cv_header_working_fcntl_h='no' ;; + *) gl_cv_header_working_fcntl_h=cross-compiling ;; + esac + ]) + ]) case $gl_cv_header_working_fcntl_h in #( *O_NOATIME* | no | cross-compiling) ac_val=0;; #( diff -Nru gdb-9.1/gnulib/import/m4/fdopendir.m4 gdb-10.2/gnulib/import/m4/fdopendir.m4 --- gdb-9.1/gnulib/import/m4/fdopendir.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/fdopendir.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,7 +1,7 @@ -# serial 10 +# serial 12 # See if we need to provide fdopendir. -dnl Copyright (C) 2009-2016 Free Software Foundation, Inc. +dnl Copyright (C) 2009-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -45,10 +45,12 @@ [gl_cv_func_fdopendir_works=yes], [gl_cv_func_fdopendir_works=no], [case "$host_os" in - # Guess yes on glibc systems. - *-gnu*) gl_cv_func_fdopendir_works="guessing yes" ;; - # If we don't know, assume the worst. - *) gl_cv_func_fdopendir_works="guessing no" ;; + # Guess yes on glibc systems. + *-gnu*) gl_cv_func_fdopendir_works="guessing yes" ;; + # Guess yes on musl systems. + *-musl*) gl_cv_func_fdopendir_works="guessing yes" ;; + # If we don't know, obey --enable-cross-guesses. + *) gl_cv_func_fdopendir_works="$gl_cross_guess_normal" ;; esac ])]) case "$gl_cv_func_fdopendir_works" in diff -Nru gdb-9.1/gnulib/import/m4/filenamecat.m4 gdb-10.2/gnulib/import/m4/filenamecat.m4 --- gdb-9.1/gnulib/import/m4/filenamecat.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/filenamecat.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ # filenamecat.m4 serial 11 -dnl Copyright (C) 2002-2006, 2009-2016 Free Software Foundation, Inc. +dnl Copyright (C) 2002-2006, 2009-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. diff -Nru gdb-9.1/gnulib/import/m4/flexmember.m4 gdb-10.2/gnulib/import/m4/flexmember.m4 --- gdb-9.1/gnulib/import/m4/flexmember.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/flexmember.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,7 +1,7 @@ -# serial 4 +# serial 5 # Check for flexible array member support. -# Copyright (C) 2006, 2009-2016 Free Software Foundation, Inc. +# Copyright (C) 2006, 2009-2020 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -17,12 +17,15 @@ [[#include <stdlib.h> #include <stdio.h> #include <stddef.h> - struct s { int n; double d[]; };]], + struct m { struct m *next, **list; char name[]; }; + struct s { struct s *p; struct m *m; int n; double d[]; };]], [[int m = getchar (); size_t nbytes = offsetof (struct s, d) + m * sizeof (double); nbytes += sizeof (struct s) - 1; nbytes -= nbytes % sizeof (struct s); struct s *p = malloc (nbytes); + p->p = p; + p->m = NULL; p->d[0] = 0.0; return p->d != (double *) NULL;]])], [ac_cv_c_flexmember=yes], @@ -31,12 +34,10 @@ AC_DEFINE([FLEXIBLE_ARRAY_MEMBER], [], [Define to nothing if C supports flexible array members, and to 1 if it does not. That way, with a declaration like 'struct s - { int n; double d@<:@FLEXIBLE_ARRAY_MEMBER@:>@; };', the struct hack + { int n; short d@<:@FLEXIBLE_ARRAY_MEMBER@:>@; };', the struct hack can be used with pre-C99 compilers. - When computing the size of such an object, don't use 'sizeof (struct s)' - as it overestimates the size. Use 'offsetof (struct s, d)' instead. - Don't use 'offsetof (struct s, d@<:@0@:>@)', as this doesn't work with - MSVC and with C++ compilers.]) + Use 'FLEXSIZEOF (struct s, d, N * sizeof (short))' to calculate + the size in bytes of such a struct containing an N-element array.]) else AC_DEFINE([FLEXIBLE_ARRAY_MEMBER], [1]) fi diff -Nru gdb-9.1/gnulib/import/m4/float_h.m4 gdb-10.2/gnulib/import/m4/float_h.m4 --- gdb-9.1/gnulib/import/m4/float_h.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/float_h.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ -# float_h.m4 serial 9 -dnl Copyright (C) 2007, 2009-2016 Free Software Foundation, Inc. +# float_h.m4 serial 12 +dnl Copyright (C) 2007, 2009-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -14,7 +14,7 @@ aix* | beos* | openbsd* | mirbsd* | irix*) FLOAT_H=float.h ;; - freebsd*) + freebsd* | dragonfly*) case "$host_cpu" in changequote(,)dnl i[34567]86 ) @@ -24,10 +24,14 @@ x86_64 ) # On x86_64 systems, the C compiler may still be generating # 32-bit code. - AC_EGREP_CPP([yes], - [#if defined __LP64__ || defined __x86_64__ || defined __amd64__ - yes - #endif], + AC_COMPILE_IFELSE( + [AC_LANG_SOURCE( + [[#if defined __LP64__ || defined __x86_64__ || defined __amd64__ + int ok; + #else + error fail + #endif + ]])], [], [FLOAT_H=float.h]) ;; @@ -42,7 +46,7 @@ ;; esac case "$host_os" in - aix* | freebsd* | linux*) + aix* | freebsd* | dragonfly* | linux*) if test -n "$FLOAT_H"; then REPLACE_FLOAT_LDBL=1 fi @@ -69,14 +73,20 @@ [gl_cv_func_itold_works=no], [case "$host" in sparc*-*-linux*) - AC_EGREP_CPP([yes], - [#if defined __LP64__ || defined __arch64__ - yes - #endif], + AC_COMPILE_IFELSE( + [AC_LANG_SOURCE( + [[#if defined __LP64__ || defined __arch64__ + int ok; + #else + error fail + #endif + ]])], [gl_cv_func_itold_works="guessing no"], [gl_cv_func_itold_works="guessing yes"]) ;; - *) gl_cv_func_itold_works="guessing yes" ;; + # Guess yes on native Windows. + mingw*) gl_cv_func_itold_works="guessing yes" ;; + *) gl_cv_func_itold_works="guessing yes" ;; esac ]) ]) diff -Nru gdb-9.1/gnulib/import/m4/fnmatch_h.m4 gdb-10.2/gnulib/import/m4/fnmatch_h.m4 --- gdb-9.1/gnulib/import/m4/fnmatch_h.m4 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/fnmatch_h.m4 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,75 @@ +# fnmatch_h.m4 serial 4 +dnl Copyright (C) 2009-2020 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +AC_DEFUN_ONCE([gl_FNMATCH_H], +[ + AC_REQUIRE([gl_FNMATCH_H_DEFAULTS]) + m4_ifdef([gl_ANSI_CXX], [AC_REQUIRE([gl_ANSI_CXX])]) + AC_CHECK_HEADERS_ONCE([fnmatch.h]) + gl_CHECK_NEXT_HEADERS([fnmatch.h]) + + dnl Persuade glibc <fnmatch.h> to declare FNM_CASEFOLD etc. + dnl This is only needed if gl_fnmatch_required = GNU. It would be possible + dnl to avoid this dependency for gl_FUNC_FNMATCH_POSIX by putting + dnl gl_FUNC_FNMATCH_GNU into a separate .m4 file. + AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) + + if test $ac_cv_header_fnmatch_h = yes; then + HAVE_FNMATCH_H=1 + else + HAVE_FNMATCH_H=0 + fi + AC_SUBST([HAVE_FNMATCH_H]) + + m4_ifdef([gl_POSIXCHECK], + [FNMATCH_H=fnmatch.h], + [FNMATCH_H='' + if m4_ifdef([gl_ANSI_CXX], [test "$CXX" != no], [false]); then + dnl Override <fnmatch.h> always, to support the C++ GNULIB_NAMESPACE. + FNMATCH_H=fnmatch.h + else + if test $ac_cv_header_fnmatch_h != yes; then + dnl Provide a substitute <fnmatch.h> file. + FNMATCH_H=fnmatch.h + fi + fi + ]) + AC_SUBST([FNMATCH_H]) + AM_CONDITIONAL([GL_GENERATE_FNMATCH_H], [test -n "$FNMATCH_H"]) + + dnl Check for declarations of anything we want to poison if the + dnl corresponding gnulib module is not in use. + gl_WARN_ON_USE_PREPARE([[#include <fnmatch.h> + ]], + [fnmatch]) +]) + +dnl Unconditionally enables the replacement of <fnmatch.h>. +AC_DEFUN([gl_REPLACE_FNMATCH_H], +[ + AC_REQUIRE([gl_FNMATCH_H_DEFAULTS]) + FNMATCH_H='fnmatch.h' + AM_CONDITIONAL([GL_GENERATE_FNMATCH_H], [test -n "$FNMATCH_H"]) +]) + +AC_DEFUN([gl_FNMATCH_MODULE_INDICATOR], +[ + dnl Use AC_REQUIRE here, so that the default settings are expanded once only. + AC_REQUIRE([gl_FNMATCH_H_DEFAULTS]) + gl_MODULE_INDICATOR_SET_VARIABLE([$1]) + dnl Define it also as a C macro, for the benefit of the unit tests. + gl_MODULE_INDICATOR_FOR_TESTS([$1]) +]) + +AC_DEFUN([gl_FNMATCH_H_DEFAULTS], +[ + GNULIB_FNMATCH=0; AC_SUBST([GNULIB_FNMATCH]) + dnl Assume POSIX behavior unless another module says otherwise. + HAVE_FNMATCH=1; AC_SUBST([HAVE_FNMATCH]) + REPLACE_FNMATCH=0; AC_SUBST([REPLACE_FNMATCH]) +]) diff -Nru gdb-9.1/gnulib/import/m4/fnmatch.m4 gdb-10.2/gnulib/import/m4/fnmatch.m4 --- gdb-9.1/gnulib/import/m4/fnmatch.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/fnmatch.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ -# Check for fnmatch - serial 9. -*- coding: utf-8 -*- +# Check for fnmatch - serial 15. -*- coding: utf-8 -*- -# Copyright (C) 2000-2007, 2009-2016 Free Software Foundation, Inc. +# Copyright (C) 2000-2007, 2009-2020 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -13,124 +13,128 @@ [ m4_divert_text([DEFAULTS], [gl_fnmatch_required=POSIX]) - dnl Persuade glibc <fnmatch.h> to declare FNM_CASEFOLD etc. - dnl This is only needed if gl_fnmatch_required = GNU. It would be possible - dnl to avoid this dependency for gl_FUNC_FNMATCH_POSIX by putting - dnl gl_FUNC_FNMATCH_GNU into a separate .m4 file. - AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) - - FNMATCH_H= + AC_REQUIRE([gl_FNMATCH_H]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles gl_fnmatch_required_lowercase=` echo $gl_fnmatch_required | LC_ALL=C tr '[[A-Z]]' '[[a-z]]' ` - gl_fnmatch_cache_var="gl_cv_func_fnmatch_${gl_fnmatch_required_lowercase}" - AC_CACHE_CHECK([for working $gl_fnmatch_required fnmatch], - [$gl_fnmatch_cache_var], - [dnl Some versions of Solaris, SCO, and the GNU C Library - dnl have a broken or incompatible fnmatch. - dnl So we run a test program. If we are cross-compiling, take no chance. - dnl Thanks to John Oleynick, François Pinard, and Paul Eggert for this - dnl test. - if test $gl_fnmatch_required = GNU; then - gl_fnmatch_gnu_start= - gl_fnmatch_gnu_end= - else - gl_fnmatch_gnu_start='#if 0' - gl_fnmatch_gnu_end='#endif' - fi - AC_RUN_IFELSE( - [AC_LANG_PROGRAM( - [[#include <fnmatch.h> - static int - y (char const *pattern, char const *string, int flags) - { - return fnmatch (pattern, string, flags) == 0; - } - static int - n (char const *pattern, char const *string, int flags) - { - return fnmatch (pattern, string, flags) == FNM_NOMATCH; - } - ]], - [[char const *Apat = 'A' < '\\\\' ? "[A-\\\\\\\\]" : "[\\\\\\\\-A]"; - char const *apat = 'a' < '\\\\' ? "[a-\\\\\\\\]" : "[\\\\\\\\-a]"; - static char const A_1[] = { 'A' - 1, 0 }; - static char const A01[] = { 'A' + 1, 0 }; - static char const a_1[] = { 'a' - 1, 0 }; - static char const a01[] = { 'a' + 1, 0 }; - static char const bs_1[] = { '\\\\' - 1, 0 }; - static char const bs01[] = { '\\\\' + 1, 0 }; - int result = 0; - if (!n ("a*", "", 0)) - return 1; - if (!y ("a*", "abc", 0)) - return 1; - if (!y ("[/b", "[/b", 0)) /*"]]"*/ /* glibc Bugzilla bug 12378 */ - return 1; - if (!n ("d*/*1", "d/s/1", FNM_PATHNAME)) - return 2; - if (!y ("a\\\\bc", "abc", 0)) - return 3; - if (!n ("a\\\\bc", "abc", FNM_NOESCAPE)) - return 3; - if (!y ("*x", ".x", 0)) - return 4; - if (!n ("*x", ".x", FNM_PERIOD)) - return 4; - if (!y (Apat, "\\\\", 0)) - return 5; - if (!y (Apat, "A", 0)) - return 5; - if (!y (apat, "\\\\", 0)) - return 5; - if (!y (apat, "a", 0)) - return 5; - if (!(n (Apat, A_1, 0) == ('A' < '\\\\'))) - return 5; - if (!(n (apat, a_1, 0) == ('a' < '\\\\'))) - return 5; - if (!(y (Apat, A01, 0) == ('A' < '\\\\'))) - return 5; - if (!(y (apat, a01, 0) == ('a' < '\\\\'))) - return 5; - if (!(y (Apat, bs_1, 0) == ('A' < '\\\\'))) - return 5; - if (!(y (apat, bs_1, 0) == ('a' < '\\\\'))) - return 5; - if (!(n (Apat, bs01, 0) == ('A' < '\\\\'))) - return 5; - if (!(n (apat, bs01, 0) == ('a' < '\\\\'))) - return 5; - $gl_fnmatch_gnu_start - if (!y ("xxXX", "xXxX", FNM_CASEFOLD)) - result |= 8; - if (!y ("a++(x|yy)b", "a+xyyyyxb", FNM_EXTMATCH)) - result |= 16; - if (!n ("d*/*1", "d/s/1", FNM_FILE_NAME)) - result |= 32; - if (!y ("*", "x", FNM_FILE_NAME | FNM_LEADING_DIR)) - result |= 64; - if (!y ("x*", "x/y/z", FNM_FILE_NAME | FNM_LEADING_DIR)) - result |= 64; - if (!y ("*c*", "c/x", FNM_FILE_NAME | FNM_LEADING_DIR)) - result |= 64; - $gl_fnmatch_gnu_end - return result; - ]])], - [eval "$gl_fnmatch_cache_var=yes"], - [eval "$gl_fnmatch_cache_var=no"], - [eval "$gl_fnmatch_cache_var=\"guessing no\""]) - ]) - eval "gl_fnmatch_result=\"\$$gl_fnmatch_cache_var\"" - if test "$gl_fnmatch_result" = yes; then - dnl Not strictly necessary. Only to avoid spurious leftover files if people - dnl don't do "make distclean". - rm -f "$gl_source_base/fnmatch.h" + AC_CHECK_FUNCS_ONCE([fnmatch]) + if test $ac_cv_func_fnmatch = no; then + HAVE_FNMATCH=0 else - FNMATCH_H=fnmatch.h + gl_fnmatch_cache_var="gl_cv_func_fnmatch_${gl_fnmatch_required_lowercase}" + AC_CACHE_CHECK([for working $gl_fnmatch_required fnmatch], + [$gl_fnmatch_cache_var], + [dnl Some versions of Solaris, SCO, and the GNU C Library + dnl have a broken or incompatible fnmatch. + dnl So we run a test program. If we are cross-compiling, take no chance. + dnl Thanks to John Oleynick, François Pinard, and Paul Eggert for this + dnl test. + if test $gl_fnmatch_required = GNU; then + gl_fnmatch_gnu_start= + gl_fnmatch_gnu_end= + else + gl_fnmatch_gnu_start='#if 0' + gl_fnmatch_gnu_end='#endif' + fi + AC_RUN_IFELSE( + [AC_LANG_PROGRAM( + [[#include <fnmatch.h> + static int + y (char const *pattern, char const *string, int flags) + { + return fnmatch (pattern, string, flags) == 0; + } + static int + n (char const *pattern, char const *string, int flags) + { + return fnmatch (pattern, string, flags) == FNM_NOMATCH; + } + ]], + [[char const *Apat = 'A' < '\\\\' ? "[A-\\\\\\\\]" : "[\\\\\\\\-A]"; + char const *apat = 'a' < '\\\\' ? "[a-\\\\\\\\]" : "[\\\\\\\\-a]"; + static char const A_1[] = { 'A' - 1, 0 }; + static char const A01[] = { 'A' + 1, 0 }; + static char const a_1[] = { 'a' - 1, 0 }; + static char const a01[] = { 'a' + 1, 0 }; + static char const bs_1[] = { '\\\\' - 1, 0 }; + static char const bs01[] = { '\\\\' + 1, 0 }; + int result = 0; + if (!n ("a*", "", 0)) + return 1; + if (!y ("a*", "abc", 0)) + return 1; + if (!y ("[/b", "[/b", 0)) /*"]]"*/ /* glibc Bugzilla bug 12378 */ + return 1; + if (!n ("d*/*1", "d/s/1", FNM_PATHNAME)) + return 2; + if (!y ("a\\\\bc", "abc", 0)) + return 3; + if (!n ("a\\\\bc", "abc", FNM_NOESCAPE)) + return 3; + if (!y ("*x", ".x", 0)) + return 4; + if (!n ("*x", ".x", FNM_PERIOD)) + return 4; + if (!y (Apat, "\\\\", 0)) + return 5; + if (!y (Apat, "A", 0)) + return 5; + if (!y (apat, "\\\\", 0)) + return 5; + if (!y (apat, "a", 0)) + return 5; + if (!(n (Apat, A_1, 0) == ('A' < '\\\\'))) + return 5; + if (!(n (apat, a_1, 0) == ('a' < '\\\\'))) + return 5; + if (!(y (Apat, A01, 0) == ('A' < '\\\\'))) + return 5; + if (!(y (apat, a01, 0) == ('a' < '\\\\'))) + return 5; + if (!(y (Apat, bs_1, 0) == ('A' < '\\\\'))) + return 5; + if (!(y (apat, bs_1, 0) == ('a' < '\\\\'))) + return 5; + if (!(n (Apat, bs01, 0) == ('A' < '\\\\'))) + return 5; + if (!(n (apat, bs01, 0) == ('a' < '\\\\'))) + return 5; + $gl_fnmatch_gnu_start + if (!y ("xxXX", "xXxX", FNM_CASEFOLD)) + result |= 8; + if (!y ("a++(x|yy)b", "a+xyyyyxb", FNM_EXTMATCH)) + result |= 16; + if (!n ("d*/*1", "d/s/1", FNM_FILE_NAME)) + result |= 32; + if (!y ("*", "x", FNM_FILE_NAME | FNM_LEADING_DIR)) + result |= 64; + if (!y ("x*", "x/y/z", FNM_FILE_NAME | FNM_LEADING_DIR)) + result |= 64; + if (!y ("*c*", "c/x", FNM_FILE_NAME | FNM_LEADING_DIR)) + result |= 64; + $gl_fnmatch_gnu_end + return result; + ]])], + [eval "$gl_fnmatch_cache_var=yes"], + [eval "$gl_fnmatch_cache_var=no"], + [case "$host_os" in + # Guess yes on musl systems. + *-musl*) eval "$gl_fnmatch_cache_var=\"guessing yes\"" ;; + # Guess no otherwise, even on glibc systems. + *) eval "$gl_fnmatch_cache_var=\"guessing no\"" ;; + esac + ]) + ]) + eval "gl_fnmatch_result=\"\$$gl_fnmatch_cache_var\"" + case "$gl_fnmatch_result" in + *yes) ;; + *) REPLACE_FNMATCH=1 ;; + esac + fi + if test $HAVE_FNMATCH = 0 || test $REPLACE_FNMATCH = 1; then + gl_REPLACE_FNMATCH_H fi - AC_SUBST([FNMATCH_H]) - AM_CONDITIONAL([GL_GENERATE_FNMATCH_H], [test -n "$FNMATCH_H"]) ]) # Request a POSIX compliant fnmatch function with GNU extensions. @@ -143,14 +147,7 @@ AC_DEFUN([gl_PREREQ_FNMATCH], [ - dnl We must choose a different name for our function, since on ELF systems - dnl a broken fnmatch() in libc.so would override our fnmatch() if it is - dnl compiled into a shared library. - AC_DEFINE_UNQUOTED([fnmatch], [${gl_fnmatch_required_lowercase}_fnmatch], - [Define to a replacement function name for fnmatch().]) dnl Prerequisites of lib/fnmatch.c. AC_REQUIRE([AC_TYPE_MBSTATE_T]) - AC_CHECK_DECLS([isblank], [], [], [[#include <ctype.h>]]) - AC_CHECK_FUNCS_ONCE([btowc isblank iswctype mbsrtowcs mempcpy wmemchr wmemcpy wmempcpy]) - AC_CHECK_HEADERS_ONCE([wctype.h]) + AC_CHECK_FUNCS_ONCE([mbsrtowcs]) ]) diff -Nru gdb-9.1/gnulib/import/m4/fpieee.m4 gdb-10.2/gnulib/import/m4/fpieee.m4 --- gdb-9.1/gnulib/import/m4/fpieee.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/fpieee.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ # fpieee.m4 serial 2 -*- coding: utf-8 -*- -dnl Copyright (C) 2007, 2009-2016 Free Software Foundation, Inc. +dnl Copyright (C) 2007, 2009-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -33,7 +33,7 @@ alpha*) # On Alpha systems, a compiler option provides the behaviour. # See the ieee(3) manual page, also available at - # <http://h30097.www3.hp.com/docs/base_doc/DOCUMENTATION/V51B_HTML/MAN/MAN3/0600____.HTM> + # <https://backdrift.org/man/tru64/man3/ieee.3.html> if test -n "$GCC"; then # GCC has the option -mieee. # For full IEEE compliance (rarely needed), use option -mieee-with-inexact. diff -Nru gdb-9.1/gnulib/import/m4/frexpl.m4 gdb-10.2/gnulib/import/m4/frexpl.m4 --- gdb-9.1/gnulib/import/m4/frexpl.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/frexpl.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ -# frexpl.m4 serial 20 -dnl Copyright (C) 2007-2016 Free Software Foundation, Inc. +# frexpl.m4 serial 21 +dnl Copyright (C) 2007-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -131,7 +131,7 @@ # undef LDBL_MIN_EXP # define LDBL_MIN_EXP (-16381) #endif -#if defined __i386__ && defined __FreeBSD__ +#if defined __i386__ && (defined __FreeBSD__ || defined __DragonFly__) # undef LDBL_MIN_EXP # define LDBL_MIN_EXP (-16381) #endif diff -Nru gdb-9.1/gnulib/import/m4/frexp.m4 gdb-10.2/gnulib/import/m4/frexp.m4 --- gdb-9.1/gnulib/import/m4/frexp.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/frexp.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ -# frexp.m4 serial 15 -dnl Copyright (C) 2007-2016 Free Software Foundation, Inc. +# frexp.m4 serial 16 +dnl Copyright (C) 2007-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -164,8 +164,17 @@ [gl_cv_func_frexp_works=yes], [gl_cv_func_frexp_works=no], [case "$host_os" in - netbsd* | irix* | mingw*) gl_cv_func_frexp_works="guessing no";; - *) gl_cv_func_frexp_works="guessing yes";; + netbsd* | irix*) gl_cv_func_frexp_works="guessing no" ;; + mingw*) # Guess yes with MSVC, no with mingw. + AC_EGREP_CPP([Good], [ +#ifdef _MSC_VER + Good +#endif + ], + [gl_cv_func_frexp_works="guessing yes"], + [gl_cv_func_frexp_works="guessing no"]) + ;; + *) gl_cv_func_frexp_works="guessing yes" ;; esac ]) ]) diff -Nru gdb-9.1/gnulib/import/m4/fstatat.m4 gdb-10.2/gnulib/import/m4/fstatat.m4 --- gdb-9.1/gnulib/import/m4/fstatat.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/fstatat.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ -# fstatat.m4 serial 3 -dnl Copyright (C) 2004-2016 Free Software Foundation, Inc. +# fstatat.m4 serial 4 +dnl Copyright (C) 2004-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -13,14 +13,14 @@ AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS]) AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_REQUIRE([AC_CANONICAL_HOST]) AC_CHECK_FUNCS_ONCE([fstatat]) if test $ac_cv_func_fstatat = no; then HAVE_FSTATAT=0 else dnl Test for an AIX 7.1 bug; see - dnl <http://lists.gnu.org/archive/html/bug-tar/2011-09/msg00015.html>. + dnl <https://lists.gnu.org/r/bug-tar/2011-09/msg00015.html>. AC_CACHE_CHECK([whether fstatat (..., 0) works], [gl_cv_func_fstatat_zero_flag], [AC_RUN_IFELSE( @@ -46,15 +46,20 @@ case $gl_cv_func_fstatat_zero_flag+$gl_cv_func_lstat_dereferences_slashed_symlink in *yes+*yes) ;; - *) REPLACE_FSTATAT=1 - case $gl_cv_func_fstatat_zero_flag in - *yes) + *) REPLACE_FSTATAT=1 ;; + esac + + case $host_os in + solaris*) + REPLACE_FSTATAT=1 ;; + esac + + case $REPLACE_FSTATAT,$gl_cv_func_fstatat_zero_flag in + 1,*yes) AC_DEFINE([HAVE_WORKING_FSTATAT_ZERO_FLAG], [1], [Define to 1 if fstatat (..., 0) works. For example, it does not work in AIX 7.1.]) ;; - esac - ;; esac fi ]) diff -Nru gdb-9.1/gnulib/import/m4/fstat.m4 gdb-10.2/gnulib/import/m4/fstat.m4 --- gdb-9.1/gnulib/import/m4/fstat.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/fstat.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,22 +1,22 @@ -# fstat.m4 serial 4 -dnl Copyright (C) 2011-2016 Free Software Foundation, Inc. +# fstat.m4 serial 7 +dnl Copyright (C) 2011-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_FSTAT], [ + AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS]) - AC_REQUIRE([gl_MSVC_INVAL]) - if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then - REPLACE_FSTAT=1 - fi - - AC_REQUIRE([gl_HEADER_SYS_STAT_H]) - if test $WINDOWS_64_BIT_ST_SIZE = 1; then - REPLACE_FSTAT=1 - fi + case "$host_os" in + mingw* | solaris*) + dnl On MinGW, the original stat() returns st_atime, st_mtime, + dnl st_ctime values that are affected by the time zone. + dnl Solaris stat can return a negative tv_nsec. + REPLACE_FSTAT=1 + ;; + esac dnl Replace fstat() for supporting the gnulib-defined open() on directories. m4_ifdef([gl_FUNC_FCHDIR], [ @@ -32,5 +32,9 @@ ]) ]) -# Prerequisites of lib/fstat.c. -AC_DEFUN([gl_PREREQ_FSTAT], [:]) +# Prerequisites of lib/fstat.c and lib/stat-w32.c. +AC_DEFUN([gl_PREREQ_FSTAT], [ + AC_REQUIRE([gl_HEADER_SYS_STAT_H]) + AC_REQUIRE([gl_PREREQ_STAT_W32]) + : +]) diff -Nru gdb-9.1/gnulib/import/m4/getcwd-abort-bug.m4 gdb-10.2/gnulib/import/m4/getcwd-abort-bug.m4 --- gdb-9.1/gnulib/import/m4/getcwd-abort-bug.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/getcwd-abort-bug.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,9 +1,9 @@ -# serial 7 +# serial 11 # Determine whether getcwd aborts when the length of the working directory # name is unusually large. Any length between 4k and 16k trigger the bug # when using glibc-2.4.90-9 or older. -# Copyright (C) 2006, 2009-2016 Free Software Foundation, Inc. +# Copyright (C) 2006, 2009-2020 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -13,12 +13,19 @@ # gl_FUNC_GETCWD_ABORT_BUG([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) AC_DEFUN([gl_FUNC_GETCWD_ABORT_BUG], [ + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CHECK_DECLS_ONCE([getcwd]) AC_CHECK_HEADERS_ONCE([unistd.h]) AC_REQUIRE([gl_PATHMAX_SNIPPET_PREREQ]) - AC_CHECK_FUNCS([getpagesize]) + + gl_CHECK_FUNC_GETPAGESIZE + if test $gl_cv_func_getpagesize = yes; then + AC_DEFINE_UNQUOTED([HAVE_GETPAGESIZE], [1], + [Define to 1 if the system has the 'getpagesize' function.]) + fi + AC_CACHE_CHECK([whether getcwd aborts when 4k < cwd_length < 16k], - gl_cv_func_getcwd_abort_bug, + [gl_cv_func_getcwd_abort_bug], [# Remove any remnants of a previous test. rm -rf confdir-14B--- # Arrange for deletion of the temporary directory this test creates. @@ -121,20 +128,34 @@ return fail; } ]])], - [gl_cv_func_getcwd_abort_bug=no], - [dnl An abort will provoke an exit code of something like 134 (128 + 6). - dnl An exit code of 4 can also occur (in OpenBSD 4.9, NetBSD 5.1 for - dnl example): getcwd (NULL, 0) fails rather than returning a string - dnl longer than PATH_MAX. This may be POSIX compliant (in some - dnl interpretations of POSIX). But gnulib's getcwd module wants to - dnl provide a non-NULL value in this case. - ret=$? - if test $ret -ge 128 || test $ret = 4; then - gl_cv_func_getcwd_abort_bug=yes - else - gl_cv_func_getcwd_abort_bug=no - fi], - [gl_cv_func_getcwd_abort_bug=yes]) - ]) - AS_IF([test $gl_cv_func_getcwd_abort_bug = yes], [$1], [$2]) + [gl_cv_func_getcwd_abort_bug=no], + [dnl An abort will provoke an exit code of something like 134 (128 + 6). + dnl An exit code of 4 can also occur (in OpenBSD 4.9, NetBSD 5.1 for + dnl example): getcwd (NULL, 0) fails rather than returning a string + dnl longer than PATH_MAX. This may be POSIX compliant (in some + dnl interpretations of POSIX). But gnulib's getcwd module wants to + dnl provide a non-NULL value in this case. + ret=$? + if test $ret -ge 128 || test $ret = 4; then + gl_cv_func_getcwd_abort_bug=yes + else + gl_cv_func_getcwd_abort_bug=no + fi + ], + [case "$host_os" in + # Guess no on musl systems. + *-musl*) gl_cv_func_getcwd_abort_bug="guessing no" ;; + # Guess yes otherwise, even on glibc systems. + *) gl_cv_func_getcwd_abort_bug="guessing yes" + esac + ]) + ]) + case "$gl_cv_func_getcwd_abort_bug" in + *yes) + $1 + ;; + *) + $2 + ;; + esac ]) diff -Nru gdb-9.1/gnulib/import/m4/getcwd.m4 gdb-10.2/gnulib/import/m4/getcwd.m4 --- gdb-9.1/gnulib/import/m4/getcwd.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/getcwd.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,12 +1,12 @@ # getcwd.m4 - check for working getcwd that is compatible with glibc -# Copyright (C) 2001, 2003-2007, 2009-2016 Free Software Foundation, Inc. +# Copyright (C) 2001, 2003-2007, 2009-2020 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Written by Paul Eggert. -# serial 13 +# serial 18 AC_DEFUN([gl_FUNC_GETCWD_NULL], [ @@ -25,7 +25,7 @@ char *getcwd (); # endif ]], [[ -#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ +#if defined _WIN32 && ! defined __CYGWIN__ /* mingw cwd does not start with '/', but getcwd does allocate. However, mingw fails to honor non-zero size. */ #else @@ -37,9 +37,9 @@ if (! f) return 2; if (f[0] != '/') - return 3; + { free (f); return 3; } if (f[1] != '\0') - return 4; + { free (f); return 4; } free (f); return 0; } @@ -48,12 +48,14 @@ [gl_cv_func_getcwd_null=yes], [gl_cv_func_getcwd_null=no], [[case "$host_os" in - # Guess yes on glibc systems. - *-gnu*) gl_cv_func_getcwd_null="guessing yes";; - # Guess yes on Cygwin. - cygwin*) gl_cv_func_getcwd_null="guessing yes";; - # If we don't know, assume the worst. - *) gl_cv_func_getcwd_null="guessing no";; + # Guess yes on glibc systems. + *-gnu* | gnu*) gl_cv_func_getcwd_null="guessing yes";; + # Guess yes on musl systems. + *-musl*) gl_cv_func_getcwd_null="guessing yes";; + # Guess yes on Cygwin. + cygwin*) gl_cv_func_getcwd_null="guessing yes";; + # If we don't know, obey --enable-cross-guesses. + *) gl_cv_func_getcwd_null="$gl_cross_guess_normal";; esac ]])]) ]) @@ -125,7 +127,7 @@ dnl Define HAVE_MINIMALLY_WORKING_GETCWD and HAVE_PARTLY_WORKING_GETCWD dnl if appropriate. case "$gl_cv_func_getcwd_path_max" in - "no"|"no, it has the AIX bug") ;; + *"no" | *"no, it has the AIX bug") ;; *) AC_DEFINE([HAVE_MINIMALLY_WORKING_GETCWD], [1], [Define to 1 if getcwd minimally works, that is, its result can be @@ -133,12 +135,12 @@ ;; esac case "$gl_cv_func_getcwd_path_max" in - "no, but it is partly working") + *"no, but it is partly working") AC_DEFINE([HAVE_PARTLY_WORKING_GETCWD], [1], [Define to 1 if getcwd works, except it sometimes fails when it shouldn't, setting errno to ERANGE, ENAMETOOLONG, or ENOENT.]) ;; - "yes, but with shorter paths") + *"yes, but with shorter paths") AC_DEFINE([HAVE_GETCWD_SHORTER], [1], [Define to 1 if getcwd works, but with shorter paths than is generally tested with the replacement.]) diff -Nru gdb-9.1/gnulib/import/m4/getcwd-path-max.m4 gdb-10.2/gnulib/import/m4/getcwd-path-max.m4 --- gdb-9.1/gnulib/import/m4/getcwd-path-max.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/getcwd-path-max.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# serial 19 +# serial 23 # Check for several getcwd bugs with long file names. # If so, arrange to compile the wrapper function. @@ -6,7 +6,7 @@ # I've heard that this is due to a Linux kernel bug, and that it has # been fixed between 2.4.21-pre3 and 2.4.21-pre4. -# Copyright (C) 2003-2007, 2009-2016 Free Software Foundation, Inc. +# Copyright (C) 2003-2007, 2009-2020 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -21,7 +21,7 @@ AC_CHECK_HEADERS_ONCE([unistd.h]) AC_REQUIRE([gl_PATHMAX_SNIPPET_PREREQ]) AC_CACHE_CHECK([whether getcwd handles long file names properly], - gl_cv_func_getcwd_path_max, + [gl_cv_func_getcwd_path_max], [# Arrange for deletion of the temporary directory this test creates. ac_clean_files="$ac_clean_files confdir3" dnl Please keep this in sync with tests/test-getcwd.c. @@ -111,12 +111,20 @@ /* If mkdir or chdir fails, it could be that this system cannot create any file with an absolute name longer than PATH_MAX, such as cygwin. If so, leave fail as 0, because the current working directory can't - be too long for getcwd if it can't even be created. For other - errors, be pessimistic and consider that as a failure, too. */ + be too long for getcwd if it can't even be created. On Linux with + the 9p file system, mkdir fails with error EINVAL when cwd_len gets + too long; ignore this failure because the getcwd() system call + produces good results whereas the gnulib substitute calls getdents64 + which fails with error EPROTO. + For other errors, be pessimistic and consider that as a failure, + too. */ if (mkdir (DIR_NAME, S_IRWXU) < 0 || chdir (DIR_NAME) < 0) { if (! (errno == ERANGE || is_ENAMETOOLONG (errno))) - fail = 20; + #ifdef __linux__ + if (! (errno == EINVAL)) + #endif + fail = 20; break; } @@ -202,28 +210,28 @@ #endif } ]])], - [gl_cv_func_getcwd_path_max=yes], - [case $? in - 10|11|12) gl_cv_func_getcwd_path_max='no, but it is partly working';; - 31) gl_cv_func_getcwd_path_max='no, it has the AIX bug';; - 32) gl_cv_func_getcwd_path_max='yes, but with shorter paths';; - *) gl_cv_func_getcwd_path_max=no;; - esac], - [# Cross-compilation guesses: - case "$host_os" in - aix*) # On AIX, it has the AIX bug. - gl_cv_func_getcwd_path_max='no, it has the AIX bug' ;; - gnu*) # On Hurd, it is 'yes'. - gl_cv_func_getcwd_path_max=yes ;; - linux* | kfreebsd*) - # On older Linux+glibc it's 'no, but it is partly working', - # on newer Linux+glibc it's 'yes'. - # On Linux+musl libc, it's 'no, but it is partly working'. - # On kFreeBSD+glibc, it's 'no, but it is partly working'. - gl_cv_func_getcwd_path_max='no, but it is partly working' ;; - *) # If we don't know, assume the worst. - gl_cv_func_getcwd_path_max=no ;; - esac + [gl_cv_func_getcwd_path_max=yes], + [case $? in + 10|11|12) gl_cv_func_getcwd_path_max='no, but it is partly working';; + 31) gl_cv_func_getcwd_path_max='no, it has the AIX bug';; + 32) gl_cv_func_getcwd_path_max='yes, but with shorter paths';; + *) gl_cv_func_getcwd_path_max=no;; + esac], + [# Cross-compilation guesses: + case "$host_os" in + aix*) # On AIX, it has the AIX bug. + gl_cv_func_getcwd_path_max='guessing no, it has the AIX bug' ;; + gnu*) # On Hurd, it is 'yes'. + gl_cv_func_getcwd_path_max='guessing yes' ;; + linux* | kfreebsd*) + # On older Linux+glibc it's 'no, but it is partly working', + # on newer Linux+glibc it's 'yes'. + # On Linux+musl libc, it's 'no, but it is partly working'. + # On kFreeBSD+glibc, it's 'no, but it is partly working'. + gl_cv_func_getcwd_path_max='guessing no, but it is partly working' ;; + *) # If we don't know, obey --enable-cross-guesses. + gl_cv_func_getcwd_path_max="$gl_cross_guess_normal" ;; + esac + ]) ]) - ]) ]) diff -Nru gdb-9.1/gnulib/import/m4/getdtablesize.m4 gdb-10.2/gnulib/import/m4/getdtablesize.m4 --- gdb-9.1/gnulib/import/m4/getdtablesize.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/getdtablesize.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ -# getdtablesize.m4 serial 6 -dnl Copyright (C) 2008-2016 Free Software Foundation, Inc. +# getdtablesize.m4 serial 7 +dnl Copyright (C) 2008-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -12,29 +12,43 @@ AC_CHECK_DECLS_ONCE([getdtablesize]) if test $ac_cv_func_getdtablesize = yes && test $ac_cv_have_decl_getdtablesize = yes; then - # Cygwin 1.7.25 automatically increases the RLIMIT_NOFILE soft limit - # up to an unchangeable hard limit; all other platforms correctly - # require setrlimit before getdtablesize() can report a larger value. AC_CACHE_CHECK([whether getdtablesize works], [gl_cv_func_getdtablesize_works], - [AC_RUN_IFELSE([ - AC_LANG_PROGRAM([[#include <unistd.h>]], - [int size = getdtablesize(); - if (dup2 (0, getdtablesize()) != -1) - return 1; - if (size != getdtablesize()) - return 2; - ])], - [gl_cv_func_getdtablesize_works=yes], - [gl_cv_func_getdtablesize_works=no], - [case "$host_os" in - cygwin*) # on cygwin 1.5.25, getdtablesize() automatically grows - gl_cv_func_getdtablesize_works="guessing no" ;; - *) gl_cv_func_getdtablesize_works="guessing yes" ;; - esac]) + [dnl There are two concepts: the "maximum possible file descriptor value + 1" + dnl and the "maximum number of open file descriptors in a process". + dnl Per SUSv2 and POSIX, getdtablesize() should return the first one. + dnl On most platforms, the first and the second concept are the same. + dnl On OpenVMS, however, they are different and getdtablesize() returns + dnl the second one; thus the test below fails. But we don't care + dnl because there's no good way to write a replacement getdtablesize(). + case "$host_os" in + vms*) gl_cv_func_getdtablesize_works="no (limitation)" ;; + *) + dnl Cygwin 1.7.25 automatically increases the RLIMIT_NOFILE soft + dnl limit up to an unchangeable hard limit; all other platforms + dnl correctly require setrlimit before getdtablesize() can report + dnl a larger value. + AC_RUN_IFELSE([ + AC_LANG_PROGRAM([[#include <unistd.h>]], + [int size = getdtablesize(); + if (dup2 (0, getdtablesize()) != -1) + return 1; + if (size != getdtablesize()) + return 2; + ])], + [gl_cv_func_getdtablesize_works=yes], + [gl_cv_func_getdtablesize_works=no], + [case "$host_os" in + cygwin*) # on cygwin 1.5.25, getdtablesize() automatically grows + gl_cv_func_getdtablesize_works="guessing no" ;; + *) gl_cv_func_getdtablesize_works="guessing yes" ;; + esac + ]) + ;; + esac ]) case "$gl_cv_func_getdtablesize_works" in - *yes) ;; + *yes | "no (limitation)") ;; *) REPLACE_GETDTABLESIZE=1 ;; esac else diff -Nru gdb-9.1/gnulib/import/m4/getlogin.m4 gdb-10.2/gnulib/import/m4/getlogin.m4 --- gdb-9.1/gnulib/import/m4/getlogin.m4 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/getlogin.m4 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,32 @@ +# getlogin.m4 serial 5 +dnl Copyright (C) 2010-2020 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_GETLOGIN], +[ + AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) + AC_CHECK_DECLS_ONCE([getlogin]) + if test $ac_cv_have_decl_getlogin = no; then + HAVE_DECL_GETLOGIN=0 + fi + AC_CHECK_FUNCS_ONCE([getlogin]) + if test $ac_cv_func_getlogin = no; then + HAVE_GETLOGIN=0 + fi +]) + +dnl Determines the library needed by the implementation of the +dnl getlogin and getlogin_r functions. +AC_DEFUN([gl_LIB_GETLOGIN], +[ + AC_REQUIRE([AC_CANONICAL_HOST]) + case $host_os in + mingw*) + LIB_GETLOGIN='-ladvapi32' ;; + *) + LIB_GETLOGIN= ;; + esac + AC_SUBST([LIB_GETLOGIN]) +]) diff -Nru gdb-9.1/gnulib/import/m4/getlogin_r.m4 gdb-10.2/gnulib/import/m4/getlogin_r.m4 --- gdb-9.1/gnulib/import/m4/getlogin_r.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/getlogin_r.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ -#serial 11 +#serial 12 -# Copyright (C) 2005-2007, 2009-2016 Free Software Foundation, Inc. +# Copyright (C) 2005-2007, 2009-2020 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -30,8 +30,8 @@ HAVE_GETLOGIN_R=0 else HAVE_GETLOGIN_R=1 - dnl On OSF/1 5.1, getlogin_r returns a truncated result if the buffer is - dnl not large enough. + dnl On Mac OS X 10.12 and OSF/1 5.1, getlogin_r returns a truncated result + dnl if the buffer is not large enough. AC_REQUIRE([AC_CANONICAL_HOST]) AC_CACHE_CHECK([whether getlogin_r works with small buffers], [gl_cv_func_getlogin_r_works], @@ -39,15 +39,16 @@ dnl Initial guess, used when cross-compiling. changequote(,)dnl case "$host_os" in - # Guess no on OSF/1. - osf*) gl_cv_func_getlogin_r_works="guessing no" ;; - # Guess yes otherwise. - *) gl_cv_func_getlogin_r_works="guessing yes" ;; + # Guess no on Mac OS X, OSF/1. + darwin* | osf*) gl_cv_func_getlogin_r_works="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_getlogin_r_works="guessing yes" ;; esac changequote([,])dnl AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stddef.h> +#include <string.h> #include <unistd.h> #if !HAVE_DECL_GETLOGIN_R extern @@ -63,16 +64,19 @@ char buf[100]; if (getlogin_r (buf, 0) == 0) - result |= 16; + result |= 1; if (getlogin_r (buf, 1) == 0) - result |= 17; + result |= 2; + if (getlogin_r (buf, 100) == 0) + { + size_t n = strlen (buf); + if (getlogin_r (buf, n) == 0) + result |= 4; + } return result; }]])], [gl_cv_func_getlogin_r_works=yes], - [case $? in - 16 | 17) gl_cv_func_getlogin_r_works=no ;; - esac - ], + [gl_cv_func_getlogin_r_works=no], [:]) ]) case "$gl_cv_func_getlogin_r_works" in diff -Nru gdb-9.1/gnulib/import/m4/getpagesize.m4 gdb-10.2/gnulib/import/m4/getpagesize.m4 --- gdb-9.1/gnulib/import/m4/getpagesize.m4 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/getpagesize.m4 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,49 @@ +# getpagesize.m4 serial 10 +dnl Copyright (C) 2002, 2004-2005, 2007, 2009-2020 Free Software Foundation, +dnl Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_GETPAGESIZE], +[ + AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) + AC_REQUIRE([AC_CANONICAL_HOST]) + gl_CHECK_FUNC_GETPAGESIZE + if test $gl_cv_func_getpagesize = no; then + HAVE_GETPAGESIZE=0 + AC_CHECK_HEADERS([OS.h]) + if test $ac_cv_header_OS_h = yes; then + HAVE_OS_H=1 + fi + AC_CHECK_HEADERS([sys/param.h]) + if test $ac_cv_header_sys_param_h = yes; then + HAVE_SYS_PARAM_H=1 + fi + fi + case "$host_os" in + mingw*) + REPLACE_GETPAGESIZE=1 + ;; + esac + dnl Also check whether it's declared. + dnl mingw has getpagesize() in libgcc.a but doesn't declare it. + AC_CHECK_DECL([getpagesize], , [HAVE_DECL_GETPAGESIZE=0]) +]) + +dnl Tests whether the function getpagesize() exists. +dnl Sets gl_cv_func_getpagesize. +AC_DEFUN([gl_CHECK_FUNC_GETPAGESIZE], +[ + dnl We can't use AC_CHECK_FUNC here, because getpagesize() is defined as a + dnl static inline function when compiling for Android 4.4 or older. + AC_CACHE_CHECK([for getpagesize], [gl_cv_func_getpagesize], + [AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#include <unistd.h>]], + [[return getpagesize();]]) + ], + [gl_cv_func_getpagesize=yes], + [gl_cv_func_getpagesize=no]) + ]) +]) diff -Nru gdb-9.1/gnulib/import/m4/getprogname.m4 gdb-10.2/gnulib/import/m4/getprogname.m4 --- gdb-9.1/gnulib/import/m4/getprogname.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/getprogname.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ # getprogname.m4 - check for getprogname or replacements for it -# Copyright (C) 2016 Free Software Foundation, Inc. +# Copyright (C) 2016-2020 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. diff -Nru gdb-9.1/gnulib/import/m4/getrandom.m4 gdb-10.2/gnulib/import/m4/getrandom.m4 --- gdb-9.1/gnulib/import/m4/getrandom.m4 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/getrandom.m4 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,65 @@ +# getrandom.m4 serial 6 +dnl Copyright 2020 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl Written by Paul Eggert. + +AC_DEFUN([gl_FUNC_GETRANDOM], +[ + AC_REQUIRE([gl_SYS_RANDOM_H_DEFAULTS]) + AC_CHECK_FUNCS_ONCE([getrandom]) + if test "$ac_cv_func_getrandom" != yes; then + HAVE_GETRANDOM=0 + else + dnl On Solaris 11.4 the return type is 'int', not 'ssize_t'. + AC_CACHE_CHECK([whether getrandom is compatible with its GNU+BSD signature], + [gl_cv_func_getrandom_ok], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[/* Additional includes are needed before <sys/random.h> on Mac OS X. */ + #include <sys/types.h> + #include <stdlib.h> + #include <sys/random.h> + ssize_t getrandom (void *, size_t, unsigned int); + ]], + [[]]) + ], + [gl_cv_func_getrandom_ok=yes], + [gl_cv_func_getrandom_ok=no]) + ]) + if test $gl_cv_func_getrandom_ok = no; then + REPLACE_GETRANDOM=1 + fi + fi + + case "$host_os" in + mingw*) + AC_CHECK_HEADERS([bcrypt.h]) + AC_CACHE_CHECK([whether the bcrypt library is guaranteed to be present], + [gl_cv_lib_assume_bcrypt], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[#include <windows.h>]], + [[#if !(_WIN32_WINNT >= _WIN32_WINNT_WIN7) + cannot assume it + #endif + ]]) + ], + [gl_cv_lib_assume_bcrypt=yes], + [gl_cv_lib_assume_bcrypt=no]) + ]) + if test $gl_cv_lib_assume_bcrypt = yes; then + AC_DEFINE([HAVE_LIB_BCRYPT], [1], + [Define to 1 if the bcrypt library is guaranteed to be present.]) + LIB_GETRANDOM='-lbcrypt' + else + LIB_GETRANDOM='-ladvapi32' + fi + ;; + *) + LIB_GETRANDOM= ;; + esac + AC_SUBST([LIB_GETRANDOM]) +]) diff -Nru gdb-9.1/gnulib/import/m4/gettimeofday.m4 gdb-10.2/gnulib/import/m4/gettimeofday.m4 --- gdb-9.1/gnulib/import/m4/gettimeofday.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/gettimeofday.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ -# serial 21 +# serial 27 -# Copyright (C) 2001-2003, 2005, 2007, 2009-2016 Free Software Foundation, Inc. +# Copyright (C) 2001-2003, 2005, 2007, 2009-2020 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -9,9 +9,10 @@ AC_DEFUN([gl_FUNC_GETTIMEOFDAY], [ + AC_REQUIRE([gl_HEADER_SYS_TIME_H_DEFAULTS]) AC_REQUIRE([AC_C_RESTRICT]) + AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([gl_HEADER_SYS_TIME_H]) - AC_REQUIRE([gl_HEADER_SYS_TIME_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([gettimeofday]) gl_gettimeofday_timezone=void @@ -54,19 +55,11 @@ if test $REPLACE_STRUCT_TIMEVAL = 1; then REPLACE_GETTIMEOFDAY=1 fi - m4_ifdef([gl_FUNC_TZSET_CLOBBER], [ - gl_FUNC_TZSET_CLOBBER - case "$gl_cv_func_tzset_clobber" in - *yes) - REPLACE_GETTIMEOFDAY=1 - gl_GETTIMEOFDAY_REPLACE_LOCALTIME - AC_DEFINE([tzset], [rpl_tzset], - [Define to rpl_tzset if the wrapper function should be used.]) - AC_DEFINE([TZSET_CLOBBERS_LOCALTIME], [1], - [Define if tzset clobbers localtime's static buffer.]) - ;; - esac - ]) + dnl On mingw, the original gettimeofday has only a precision of 15.6 + dnl milliseconds. So override it. + case "$host_os" in + mingw*) REPLACE_GETTIMEOFDAY=1 ;; + esac fi AC_DEFINE_UNQUOTED([GETTIMEOFDAY_TIMEZONE], [$gl_gettimeofday_timezone], [Define this to 'void' or 'struct timezone' to match the system's @@ -85,6 +78,7 @@ [ AC_REQUIRE([gl_HEADER_SYS_TIME_H]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_REQUIRE([gl_LOCALTIME_BUFFER_DEFAULTS]) AC_CACHE_CHECK([whether gettimeofday clobbers localtime buffer], [gl_cv_func_gettimeofday_clobber], @@ -109,30 +103,26 @@ [gl_cv_func_gettimeofday_clobber=yes], [# When cross-compiling: case "$host_os" in - # Guess all is fine on glibc systems. - *-gnu*) gl_cv_func_gettimeofday_clobber="guessing no" ;; - # If we don't know, assume the worst. - *) gl_cv_func_gettimeofday_clobber="guessing yes" ;; + # Guess all is fine on glibc systems. + *-gnu* | gnu*) gl_cv_func_gettimeofday_clobber="guessing no" ;; + # Guess all is fine on musl systems. + *-musl*) gl_cv_func_gettimeofday_clobber="guessing no" ;; + # Guess no on native Windows. + mingw*) gl_cv_func_gettimeofday_clobber="guessing no" ;; + # If we don't know, obey --enable-cross-guesses. + *) gl_cv_func_gettimeofday_clobber="$gl_cross_guess_inverted" ;; esac ])]) case "$gl_cv_func_gettimeofday_clobber" in *yes) REPLACE_GETTIMEOFDAY=1 - gl_GETTIMEOFDAY_REPLACE_LOCALTIME AC_DEFINE([GETTIMEOFDAY_CLOBBERS_LOCALTIME], [1], [Define if gettimeofday clobbers the localtime buffer.]) + gl_LOCALTIME_BUFFER_NEEDED ;; esac ]) -AC_DEFUN([gl_GETTIMEOFDAY_REPLACE_LOCALTIME], [ - REPLACE_GMTIME=1 - REPLACE_LOCALTIME=1 -]) - # Prerequisites of lib/gettimeofday.c. -AC_DEFUN([gl_PREREQ_GETTIMEOFDAY], [ - AC_CHECK_HEADERS([sys/timeb.h]) - AC_CHECK_FUNCS([_ftime]) -]) +AC_DEFUN([gl_PREREQ_GETTIMEOFDAY], [:]) diff -Nru gdb-9.1/gnulib/import/m4/glibc21.m4 gdb-10.2/gnulib/import/m4/glibc21.m4 --- gdb-9.1/gnulib/import/m4/glibc21.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/glibc21.m4 1970-01-01 00:00:00.000000000 +0000 @@ -1,34 +0,0 @@ -# glibc21.m4 serial 5 -dnl Copyright (C) 2000-2002, 2004, 2008, 2010-2016 Free Software Foundation, -dnl Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -# Test for the GNU C Library, version 2.1 or newer, or uClibc. -# From Bruno Haible. - -AC_DEFUN([gl_GLIBC21], - [ - AC_CACHE_CHECK([whether we are using the GNU C Library >= 2.1 or uClibc], - [ac_cv_gnu_library_2_1], - [AC_EGREP_CPP([Lucky], - [ -#include <features.h> -#ifdef __GNU_LIBRARY__ - #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2) - Lucky GNU user - #endif -#endif -#ifdef __UCLIBC__ - Lucky user -#endif - ], - [ac_cv_gnu_library_2_1=yes], - [ac_cv_gnu_library_2_1=no]) - ] - ) - AC_SUBST([GLIBC21]) - GLIBC21="$ac_cv_gnu_library_2_1" - ] -) diff -Nru gdb-9.1/gnulib/import/m4/glob_h.m4 gdb-10.2/gnulib/import/m4/glob_h.m4 --- gdb-9.1/gnulib/import/m4/glob_h.m4 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/glob_h.m4 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,72 @@ +# glob_h.m4 serial 5 +dnl Copyright (C) 2018-2020 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +AC_DEFUN_ONCE([gl_GLOB_H], +[ + AC_REQUIRE([gl_GLOB_H_DEFAULTS]) + m4_ifdef([gl_ANSI_CXX], [AC_REQUIRE([gl_ANSI_CXX])]) + AC_REQUIRE([AC_C_RESTRICT]) + AC_CHECK_HEADERS_ONCE([glob.h]) + gl_CHECK_NEXT_HEADERS([glob.h]) + + if test $ac_cv_header_glob_h = yes; then + HAVE_GLOB_H=1 + else + HAVE_GLOB_H=0 + fi + AC_SUBST([HAVE_GLOB_H]) + + m4_ifdef([gl_POSIXCHECK], + [GLOB_H=glob.h], + [GLOB_H='' + if m4_ifdef([gl_ANSI_CXX], [test "$CXX" != no], [false]); then + dnl Override <glob.h> always, to support the C++ GNULIB_NAMESPACE. + GLOB_H=glob.h + else + if test $ac_cv_header_glob_h != yes; then + dnl Provide a substitute <glob.h> file. + GLOB_H=glob.h + fi + fi + ]) + AC_SUBST([GLOB_H]) + AM_CONDITIONAL([GL_GENERATE_GLOB_H], [test -n "$GLOB_H"]) + + dnl Check for declarations of anything we want to poison if the + dnl corresponding gnulib module is not in use. + gl_WARN_ON_USE_PREPARE([[#include <glob.h> + ]], + [glob globfree glob_pattern_p]) +]) + +dnl Unconditionally enables the replacement of <glob.h>. +AC_DEFUN([gl_REPLACE_GLOB_H], +[ + AC_REQUIRE([gl_GLOB_H_DEFAULTS]) + GLOB_H='glob.h' + AM_CONDITIONAL([GL_GENERATE_GLOB_H], [test -n "$GLOB_H"]) +]) + +AC_DEFUN([gl_GLOB_MODULE_INDICATOR], +[ + dnl Use AC_REQUIRE here, so that the default settings are expanded once only. + AC_REQUIRE([gl_GLOB_H_DEFAULTS]) + gl_MODULE_INDICATOR_SET_VARIABLE([$1]) + dnl Define it also as a C macro, for the benefit of the unit tests. + gl_MODULE_INDICATOR_FOR_TESTS([$1]) +]) + +AC_DEFUN([gl_GLOB_H_DEFAULTS], +[ + GNULIB_GLOB=0; AC_SUBST([GNULIB_GLOB]) + dnl Assume POSIX and GNU behavior unless another module says otherwise. + HAVE_GLOB=1; AC_SUBST([HAVE_GLOB]) + HAVE_GLOB_PATTERN_P=1; AC_SUBST([HAVE_GLOB_PATTERN_P]) + REPLACE_GLOB=0; AC_SUBST([REPLACE_GLOB]) + REPLACE_GLOB_PATTERN_P=0; AC_SUBST([REPLACE_GLOB_PATTERN_P]) +]) diff -Nru gdb-9.1/gnulib/import/m4/glob.m4 gdb-10.2/gnulib/import/m4/glob.m4 --- gdb-9.1/gnulib/import/m4/glob.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/glob.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ -# glob.m4 serial 14 -dnl Copyright (C) 2005-2007, 2009-2016 Free Software Foundation, Inc. +# glob.m4 serial 24 +dnl Copyright (C) 2005-2007, 2009-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -9,68 +9,82 @@ # always include <glob.h> for the glob prototypes. AC_DEFUN([gl_GLOB], -[ GLOB_H= - AC_CHECK_HEADERS([glob.h], [], [GLOB_H=glob.h]) +[ + AC_REQUIRE([gl_GLOB_H]) + + AC_CHECK_FUNCS_ONCE([glob glob_pattern_p]) + if test $ac_cv_func_glob = no; then + HAVE_GLOB=0 + else - if test -z "$GLOB_H"; then - AC_CACHE_CHECK([for GNU glob interface version 1], - [gl_cv_gnu_glob_interface_version_1], + AC_CACHE_CHECK([for GNU glob interface version 1 or 2], + [gl_cv_gnu_glob_interface_version_1_2], [ AC_COMPILE_IFELSE([AC_LANG_SOURCE( [[#include <gnu-versions.h> -char a[_GNU_GLOB_INTERFACE_VERSION == 1 ? 1 : -1];]])], - [gl_cv_gnu_glob_interface_version_1=yes], - [gl_cv_gnu_glob_interface_version_1=no])]) +char a[_GNU_GLOB_INTERFACE_VERSION == 1 || _GNU_GLOB_INTERFACE_VERSION == 2 ? 1 : -1];]])], + [gl_cv_gnu_glob_interface_version_1_2=yes], + [gl_cv_gnu_glob_interface_version_1_2=no])]) + if test "$gl_cv_gnu_glob_interface_version_1_2" = "no"; then + REPLACE_GLOB=1 + fi - if test "$gl_cv_gnu_glob_interface_version_1" = "no"; then - GLOB_H=glob.h + if test $REPLACE_GLOB = 0; then + AC_CACHE_CHECK([whether glob lists broken symlinks], + [gl_cv_glob_lists_symlinks], + [if test $cross_compiling != yes; then + if ln -s conf-doesntexist conf$$-globtest 2>/dev/null; then + gl_cv_glob_lists_symlinks=maybe + else + # If we can't make a symlink, then we cannot test this issue. Be + # pessimistic about this. + gl_cv_glob_lists_symlinks=no + fi + if test $gl_cv_glob_lists_symlinks = maybe; then + AC_RUN_IFELSE( + [AC_LANG_PROGRAM( + [[#include <stddef.h> + #include <glob.h>]], + [[glob_t found; + if (glob ("conf*-globtest", 0, NULL, &found) == GLOB_NOMATCH) + return 1; + globfree (&found); + ]])], + [gl_cv_glob_lists_symlinks=yes], + [gl_cv_glob_lists_symlinks=no], + [dnl We don't get here. + : + ]) + fi + rm -f conf$$-globtest + else + gl_cv_glob_lists_symlinks="$gl_cross_guess_normal" + fi + ]) + case "$gl_cv_glob_lists_symlinks" in + *yes) ;; + *) REPLACE_GLOB=1 ;; + esac fi - fi - if test -z "$GLOB_H"; then - AC_CACHE_CHECK([whether glob lists broken symlinks], - [gl_cv_glob_lists_symlinks], -[ if ln -s conf-doesntexist conf$$-globtest 2>/dev/null; then - gl_cv_glob_lists_symlinks=maybe - else - # If we can't make a symlink, then we cannot test this issue. Be - # pessimistic about this. - gl_cv_glob_lists_symlinks=no - fi - - if test $gl_cv_glob_lists_symlinks = maybe; then - AC_RUN_IFELSE([ -AC_LANG_PROGRAM( -[[#include <stddef.h> -#include <glob.h>]], -[[glob_t found; -if (glob ("conf*-globtest", 0, NULL, &found) == GLOB_NOMATCH) return 1;]])], - [gl_cv_glob_lists_symlinks=yes], - [gl_cv_glob_lists_symlinks=no], [gl_cv_glob_lists_symlinks=no]) - fi]) + fi - if test $gl_cv_glob_lists_symlinks = no; then - GLOB_H=glob.h + if test $ac_cv_func_glob_pattern_p = no; then + HAVE_GLOB_PATTERN_P=0 + else + if test $REPLACE_GLOB = 1; then + REPLACE_GLOB_PATTERN_P=1 fi fi - rm -f conf$$-globtest - - AC_SUBST([GLOB_H]) - AM_CONDITIONAL([GL_GENERATE_GLOB_H], [test -n "$GLOB_H"]) + if test $HAVE_GLOB = 0 || test $REPLACE_GLOB = 1; then + gl_REPLACE_GLOB_H + fi ]) -# Prerequisites of lib/glob.*. +# Prerequisites of lib/glob.c and lib/globfree.c. AC_DEFUN([gl_PREREQ_GLOB], [ - AC_REQUIRE([gl_CHECK_TYPE_STRUCT_DIRENT_D_TYPE])dnl - AC_REQUIRE([AC_C_RESTRICT])dnl - AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])dnl - AC_CHECK_HEADERS_ONCE([sys/cdefs.h unistd.h])dnl - if test $ac_cv_header_sys_cdefs_h = yes; then - HAVE_SYS_CDEFS_H=1 - else - HAVE_SYS_CDEFS_H=0 - fi - AC_SUBST([HAVE_SYS_CDEFS_H]) - AC_CHECK_FUNCS_ONCE([fstatat getlogin_r getpwnam_r])dnl + AC_REQUIRE([gl_CHECK_TYPE_STRUCT_DIRENT_D_TYPE]) + AC_CHECK_HEADERS_ONCE([unistd.h]) + AC_CHECK_FUNCS_ONCE([getlogin_r getpwnam_r]) ]) diff -Nru gdb-9.1/gnulib/import/m4/gnulib-cache.m4 gdb-10.2/gnulib/import/m4/gnulib-cache.m4 --- gdb-9.1/gnulib/import/m4/gnulib-cache.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/gnulib-cache.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2016 Free Software Foundation, Inc. +# Copyright (C) 2002-2020 Free Software Foundation, Inc. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -11,7 +11,7 @@ # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License -# along with this file. If not, see <http://www.gnu.org/licenses/>. +# along with this file. If not, see <https://www.gnu.org/licenses/>. # # As a special exception to the GNU General Public License, # this file may be distributed as part of a program that @@ -27,19 +27,68 @@ # Specification in the form of a command-line invocation: -# gnulib-tool --import --lib=libgnu --source-base=import --m4-base=import/m4 --doc-base=doc --tests-base=tests --aux-dir=import/extra --no-conditional-dependencies --no-libtool --macro-prefix=gl --no-vc-files alloca canonicalize-lgpl dirent dirfd errno fnmatch-gnu frexpl getcwd glob inet_ntop inttypes limits-h lstat memchr memmem mkdir mkdtemp mkostemp pathmax rawmemchr readlink rename setenv signal-h strchrnul strerror_r-posix strstr strtok_r sys_stat time_r unistd unsetenv update-copyright wchar wctype-h +# gnulib-tool --import \ +# --lib=libgnu \ +# --source-base=import \ +# --m4-base=import/m4 \ +# --doc-base=doc \ +# --tests-base=tests \ +# --aux-dir=import/extra \ +# --no-conditional-dependencies \ +# --no-libtool \ +# --macro-prefix=gl \ +# --no-vc-files \ +# alloca \ +# canonicalize-lgpl \ +# count-one-bits \ +# dirent \ +# dirfd \ +# errno \ +# fnmatch-gnu \ +# frexpl \ +# getcwd \ +# gettimeofday \ +# glob \ +# inet_ntop \ +# inttypes \ +# limits-h \ +# lstat \ +# memchr \ +# memmem \ +# mkdir \ +# mkdtemp \ +# mkostemp \ +# pathmax \ +# rawmemchr \ +# readlink \ +# rename \ +# setenv \ +# signal-h \ +# strchrnul \ +# strerror_r-posix \ +# strstr \ +# strtok_r \ +# sys_stat \ +# time_r \ +# unistd \ +# unsetenv \ +# update-copyright \ +# wchar \ +# wctype-h # Specification in the form of a few gnulib-tool.m4 macro invocations: gl_LOCAL_DIR([]) gl_MODULES([ alloca canonicalize-lgpl + count-one-bits dirent dirfd errno fnmatch-gnu frexpl getcwd + gettimeofday glob inet_ntop inttypes diff -Nru gdb-9.1/gnulib/import/m4/gnulib-common.m4 gdb-10.2/gnulib/import/m4/gnulib-common.m4 --- gdb-9.1/gnulib/import/m4/gnulib-common.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/gnulib-common.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,25 +1,53 @@ -# gnulib-common.m4 serial 36 -dnl Copyright (C) 2007-2016 Free Software Foundation, Inc. +# gnulib-common.m4 serial 50 +dnl Copyright (C) 2007-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. +AC_PREREQ([2.62]) + # gl_COMMON # is expanded unconditionally through gnulib-tool magic. AC_DEFUN([gl_COMMON], [ dnl Use AC_REQUIRE here, so that the code is expanded once only. AC_REQUIRE([gl_00GNULIB]) AC_REQUIRE([gl_COMMON_BODY]) + AC_REQUIRE([gl_ZZGNULIB]) ]) AC_DEFUN([gl_COMMON_BODY], [ + AH_VERBATIM([_GL_GNUC_PREREQ], +[/* True if the compiler says it groks GNU C version MAJOR.MINOR. */ +#if defined __GNUC__ && defined __GNUC_MINOR__ +# define _GL_GNUC_PREREQ(major, minor) \ + ((major) < __GNUC__ + ((minor) <= __GNUC_MINOR__)) +#else +# define _GL_GNUC_PREREQ(major, minor) 0 +#endif +]) AH_VERBATIM([_Noreturn], [/* The _Noreturn keyword of C11. */ -#if ! (defined _Noreturn \ - || (defined __STDC_VERSION__ && 201112 <= __STDC_VERSION__)) -# if (3 <= __GNUC__ || (__GNUC__ == 2 && 8 <= __GNUC_MINOR__) \ - || 0x5110 <= __SUNPRO_C) +#ifndef _Noreturn +# if (defined __cplusplus \ + && ((201103 <= __cplusplus && !(__GNUC__ == 4 && __GNUC_MINOR__ == 7)) \ + || (defined _MSC_VER && 1900 <= _MSC_VER)) \ + && 0) + /* [[noreturn]] is not practically usable, because with it the syntax + extern _Noreturn void func (...); + would not be valid; such a declaration would only be valid with 'extern' + and '_Noreturn' swapped, or without the 'extern' keyword. However, some + AIX system header files and several gnulib header files use precisely + this syntax with 'extern'. */ +# define _Noreturn [[noreturn]] +# elif ((!defined __cplusplus || defined __clang__) \ + && (201112 <= (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) \ + || _GL_GNUC_PREREQ (4, 7) \ + || (defined __apple_build_version__ \ + ? 6000000 <= __apple_build_version__ \ + : 3 < __clang_major__ + (5 <= __clang_minor__)))) + /* _Noreturn works as-is. */ +# elif _GL_GNUC_PREREQ (2, 8) || 0x5110 <= __SUNPRO_C # define _Noreturn __attribute__ ((__noreturn__)) -# elif defined _MSC_VER && 1200 <= _MSC_VER +# elif 1200 <= (defined _MSC_VER ? _MSC_VER : 0) # define _Noreturn __declspec (noreturn) # else # define _Noreturn @@ -36,43 +64,262 @@ #if defined __APPLE__ && defined __MACH__ && __APPLE_CC__ >= 5465 && !defined __cplusplus && __STDC_VERSION__ >= 199901L && !defined __GNUC_STDC_INLINE__ # define __GNUC_STDC_INLINE__ 1 #endif]) - AH_VERBATIM([unused_parameter], -[/* Define as a marker that can be attached to declarations that might not - be used. This helps to reduce warnings, such as from - GCC -Wunused-parameter. */ -#if __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) -# define _GL_UNUSED __attribute__ ((__unused__)) -#else -# define _GL_UNUSED -#endif -/* The name _UNUSED_PARAMETER_ is an earlier spelling, although the name - is a misnomer outside of parameter lists. */ -#define _UNUSED_PARAMETER_ _GL_UNUSED - -/* gcc supports the "unused" attribute on possibly unused labels, and - g++ has since version 4.5. Note to support C++ as well as C, - _GL_UNUSED_LABEL should be used with a trailing ; */ -#if !defined __cplusplus || __GNUC__ > 4 \ - || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) -# define _GL_UNUSED_LABEL _GL_UNUSED + AH_VERBATIM([attribute], +[/* Attributes. */ +#ifdef __has_attribute +# define _GL_HAS_ATTRIBUTE(attr) __has_attribute (__##attr##__) #else -# define _GL_UNUSED_LABEL +# define _GL_HAS_ATTRIBUTE(attr) _GL_ATTR_##attr +# define _GL_ATTR_alloc_size _GL_GNUC_PREREQ (4, 3) +# define _GL_ATTR_always_inline _GL_GNUC_PREREQ (3, 2) +# define _GL_ATTR_artificial _GL_GNUC_PREREQ (4, 3) +# define _GL_ATTR_cold _GL_GNUC_PREREQ (4, 3) +# define _GL_ATTR_const _GL_GNUC_PREREQ (2, 95) +# define _GL_ATTR_deprecated _GL_GNUC_PREREQ (3, 1) +# define _GL_ATTR_error _GL_GNUC_PREREQ (4, 3) +# define _GL_ATTR_externally_visible _GL_GNUC_PREREQ (4, 1) +# define _GL_ATTR_fallthrough _GL_GNUC_PREREQ (7, 0) +# define _GL_ATTR_format _GL_GNUC_PREREQ (2, 7) +# define _GL_ATTR_leaf _GL_GNUC_PREREQ (4, 6) +# ifdef _ICC +# define _GL_ATTR_may_alias 0 +# else +# define _GL_ATTR_may_alias _GL_GNUC_PREREQ (3, 3) +# endif +# define _GL_ATTR_malloc _GL_GNUC_PREREQ (3, 0) +# define _GL_ATTR_noinline _GL_GNUC_PREREQ (3, 1) +# define _GL_ATTR_nonnull _GL_GNUC_PREREQ (3, 3) +# define _GL_ATTR_nonstring _GL_GNUC_PREREQ (8, 0) +# define _GL_ATTR_nothrow _GL_GNUC_PREREQ (3, 3) +# define _GL_ATTR_packed _GL_GNUC_PREREQ (2, 7) +# define _GL_ATTR_pure _GL_GNUC_PREREQ (2, 96) +# define _GL_ATTR_returns_nonnull _GL_GNUC_PREREQ (4, 9) +# define _GL_ATTR_sentinel _GL_GNUC_PREREQ (4, 0) +# define _GL_ATTR_unused _GL_GNUC_PREREQ (2, 7) +# define _GL_ATTR_warn_unused_result _GL_GNUC_PREREQ (3, 4) #endif -/* The __pure__ attribute was added in gcc 2.96. */ -#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) -# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) +]dnl There is no _GL_ATTRIBUTE_ALIGNED; use stdalign's _Alignas instead. +[ +#if _GL_HAS_ATTRIBUTE (alloc_size) +# define _GL_ATTRIBUTE_ALLOC_SIZE(args) __attribute__ ((__alloc_size__ args)) +#else +# define _GL_ATTRIBUTE_ALLOC_SIZE(args) +#endif + +#if _GL_HAS_ATTRIBUTE (always_inline) +# define _GL_ATTRIBUTE_ALWAYS_INLINE __attribute__ ((__always_inline__)) +#else +# define _GL_ATTRIBUTE_ALWAYS_INLINE +#endif + +#if _GL_HAS_ATTRIBUTE (artificial) +# define _GL_ATTRIBUTE_ARTIFICIAL __attribute__ ((__artificial__)) #else -# define _GL_ATTRIBUTE_PURE /* empty */ +# define _GL_ATTRIBUTE_ARTIFICIAL #endif -/* The __const__ attribute was added in gcc 2.95. */ -#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) +/* Avoid __attribute__ ((cold)) on MinGW; see thread starting at + <https://lists.gnu.org/r/emacs-devel/2019-04/msg01152.html>. */ +#if _GL_HAS_ATTRIBUTE (cold) && !defined __MINGW32__ +# define _GL_ATTRIBUTE_COLD __attribute__ ((__cold__)) +#else +# define _GL_ATTRIBUTE_COLD +#endif + +#if _GL_HAS_ATTRIBUTE (const) # define _GL_ATTRIBUTE_CONST __attribute__ ((__const__)) #else -# define _GL_ATTRIBUTE_CONST /* empty */ +# define _GL_ATTRIBUTE_CONST +#endif + +#if 201710L < __STDC_VERSION__ +# define _GL_ATTRIBUTE_DEPRECATED [[__deprecated__]] +#elif _GL_HAS_ATTRIBUTE (deprecated) +# define _GL_ATTRIBUTE_DEPRECATED __attribute__ ((__deprecated__)) +#else +# define _GL_ATTRIBUTE_DEPRECATED +#endif + +#if _GL_HAS_ATTRIBUTE (error) +# define _GL_ATTRIBUTE_ERROR(msg) __attribute__ ((__error__ (msg))) +# define _GL_ATTRIBUTE_WARNING(msg) __attribute__ ((__warning__ (msg))) +#else +# define _GL_ATTRIBUTE_ERROR(msg) +# define _GL_ATTRIBUTE_WARNING(msg) +#endif + +#if _GL_HAS_ATTRIBUTE (externally_visible) +# define _GL_ATTRIBUTE_EXTERNALLY_VISIBLE __attribute__ ((externally_visible)) +#else +# define _GL_ATTRIBUTE_EXTERNALLY_VISIBLE +#endif + +/* FALLTHROUGH is special, because it always expands to something. */ +#if 201710L < __STDC_VERSION__ +# define _GL_ATTRIBUTE_FALLTHROUGH [[__fallthrough__]] +#elif _GL_HAS_ATTRIBUTE (fallthrough) +# define _GL_ATTRIBUTE_FALLTHROUGH __attribute__ ((__fallthrough__)) +#else +# define _GL_ATTRIBUTE_FALLTHROUGH ((void) 0) +#endif + +#if _GL_HAS_ATTRIBUTE (format) +# define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec)) +#else +# define _GL_ATTRIBUTE_FORMAT(spec) +#endif + +#if _GL_HAS_ATTRIBUTE (leaf) +# define _GL_ATTRIBUTE_LEAF __attribute__ ((__leaf__)) +#else +# define _GL_ATTRIBUTE_LEAF +#endif + +#if _GL_HAS_ATTRIBUTE (may_alias) +# define _GL_ATTRIBUTE_MAY_ALIAS __attribute__ ((__may_alias__)) +#else +# define _GL_ATTRIBUTE_MAY_ALIAS +#endif + +#if 201710L < __STDC_VERSION__ +# define _GL_ATTRIBUTE_MAYBE_UNUSED [[__maybe_unused__]] +#elif _GL_HAS_ATTRIBUTE (unused) +# define _GL_ATTRIBUTE_MAYBE_UNUSED __attribute__ ((__unused__)) +#else +# define _GL_ATTRIBUTE_MAYBE_UNUSED +#endif +/* Earlier spellings of this macro. */ +#define _GL_UNUSED _GL_ATTRIBUTE_MAYBE_UNUSED +#define _UNUSED_PARAMETER_ _GL_ATTRIBUTE_MAYBE_UNUSED + +#if _GL_HAS_ATTRIBUTE (malloc) +# define _GL_ATTRIBUTE_MALLOC __attribute__ ((__malloc__)) +#else +# define _GL_ATTRIBUTE_MALLOC +#endif + +#if 201710L < __STDC_VERSION__ +# define _GL_ATTRIBUTE_NODISCARD [[__nodiscard__]] +#elif _GL_HAS_ATTRIBUTE (warn_unused_result) +# define _GL_ATTRIBUTE_NODISCARD __attribute__ ((__warn_unused_result__)) +#else +# define _GL_ATTRIBUTE_NODISCARD +#endif + +#if _GL_HAS_ATTRIBUTE (noinline) +# define _GL_ATTRIBUTE_NOINLINE __attribute__ ((__noinline__)) +#else +# define _GL_ATTRIBUTE_NOINLINE +#endif + +#if _GL_HAS_ATTRIBUTE (nonnull) +# define _GL_ATTRIBUTE_NONNULL(args) __attribute__ ((__nonnull__ args)) +#else +# define _GL_ATTRIBUTE_NONNULL(args) +#endif + +#if _GL_HAS_ATTRIBUTE (nonstring) +# define _GL_ATTRIBUTE_NONSTRING __attribute__ ((__nonstring__)) +#else +# define _GL_ATTRIBUTE_NONSTRING +#endif + +/* There is no _GL_ATTRIBUTE_NORETURN; use _Noreturn instead. */ + +#if _GL_HAS_ATTRIBUTE (nothrow) && !defined __cplusplus +# define _GL_ATTRIBUTE_NOTHROW __attribute__ ((__nothrow__)) +#else +# define _GL_ATTRIBUTE_NOTHROW +#endif + +#if _GL_HAS_ATTRIBUTE (packed) +# define _GL_ATTRIBUTE_PACKED __attribute__ ((__packed__)) +#else +# define _GL_ATTRIBUTE_PACKED +#endif + +#if _GL_HAS_ATTRIBUTE (pure) +# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) +#else +# define _GL_ATTRIBUTE_PURE +#endif + +#if _GL_HAS_ATTRIBUTE (returns_nonnull) +# define _GL_ATTRIBUTE_RETURNS_NONNULL __attribute__ ((__returns_nonnull__)) +#else +# define _GL_ATTRIBUTE_RETURNS_NONNULL +#endif + +#if _GL_HAS_ATTRIBUTE (sentinel) +# define _GL_ATTRIBUTE_SENTINEL(pos) __attribute__ ((__sentinel__ pos)) +#else +# define _GL_ATTRIBUTE_SENTINEL(pos) +#endif + +]dnl There is no _GL_ATTRIBUTE_VISIBILITY; see m4/visibility.m4 instead. +[ +/* To support C++ as well as C, use _GL_UNUSED_LABEL with trailing ';'. */ +#if !defined __cplusplus || _GL_GNUC_PREREQ (4, 5) +# define _GL_UNUSED_LABEL _GL_ATTRIBUTE_MAYBE_UNUSED +#else +# define _GL_UNUSED_LABEL #endif ]) + AH_VERBATIM([async_safe], +[/* The _GL_ASYNC_SAFE marker should be attached to functions that are + signal handlers (for signals other than SIGABRT, SIGPIPE) or can be + invoked from such signal handlers. Such functions have some restrictions: + * All functions that it calls should be marked _GL_ASYNC_SAFE as well, + or should be listed as async-signal-safe in POSIX + <https://pubs.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html#tag_15_04> + section 2.4.3. Note that malloc(), sprintf(), and fwrite(), in + particular, are NOT async-signal-safe. + * All memory locations (variables and struct fields) that these functions + access must be marked 'volatile'. This holds for both read and write + accesses. Otherwise the compiler might optimize away stores to and + reads from such locations that occur in the program, depending on its + data flow analysis. For example, when the program contains a loop + that is intended to inspect a variable set from within a signal handler + while (!signal_occurred) + ; + the compiler is allowed to transform this into an endless loop if the + variable 'signal_occurred' is not declared 'volatile'. + Additionally, recall that: + * A signal handler should not modify errno (except if it is a handler + for a fatal signal and ends by raising the same signal again, thus + provoking the termination of the process). If it invokes a function + that may clobber errno, it needs to save and restore the value of + errno. */ +#define _GL_ASYNC_SAFE +]) + dnl Hint which direction to take regarding cross-compilation guesses: + dnl When a user installs a program on a platform they are not intimately + dnl familiar with, --enable-cross-guesses=conservative is the appropriate + dnl choice. It implements the "If we don't know, assume the worst" principle. + dnl However, when an operating system developer (on a platform which is not + dnl yet known to gnulib) builds packages for their platform, they want to + dnl expose, not hide, possible platform bugs; in this case, + dnl --enable-cross-guesses=risky is the appropriate choice. + dnl Sets the variables + dnl gl_cross_guess_normal (to be used when 'yes' is good and 'no' is bad), + dnl gl_cross_guess_inverted (to be used when 'no' is good and 'yes' is bad). + AC_ARG_ENABLE([cross-guesses], + [AS_HELP_STRING([--enable-cross-guesses={conservative|risky}], + [specify policy for cross-compilation guesses])], + [if test "x$enableval" != xconservative && test "x$enableval" != xrisky; then + AC_MSG_WARN([invalid argument supplied to --enable-cross-guesses]) + enableval=conservative + fi + gl_cross_guesses="$enableval"], + [gl_cross_guesses=conservative]) + if test $gl_cross_guesses = risky; then + gl_cross_guess_normal="guessing yes" + gl_cross_guess_inverted="guessing no" + else + gl_cross_guess_normal="guessing no" + gl_cross_guess_inverted="guessing yes" + fi dnl Preparation for running test programs: dnl Tell glibc to write diagnostics from -D_FORTIFY_SOURCE=2 to stderr, not dnl to /dev/tty, so they can be redirected to log files. Such diagnostics @@ -207,13 +454,6 @@ AC_SUBST([HAVE_FEATURES_H]) ]) -# m4_foreach_w -# is a backport of autoconf-2.59c's m4_foreach_w. -# Remove this macro when we can assume autoconf >= 2.60. -m4_ifndef([m4_foreach_w], - [m4_define([m4_foreach_w], - [m4_foreach([$1], m4_split(m4_normalize([$2]), [ ]), [$3])])]) - # AS_VAR_IF(VAR, VALUE, [IF-MATCH], [IF-NOT-MATCH]) # ---------------------------------------------------- # Backport of autoconf-2.63b's macro. @@ -226,15 +466,14 @@ # Modifies the value of the shell variable CC in an attempt to make $CC # understand ISO C99 source code. # This is like AC_PROG_CC_C99, except that -# - AC_PROG_CC_C99 did not exist in Autoconf versions < 2.60, # - AC_PROG_CC_C99 does not mix well with AC_PROG_CC_STDC -# <http://lists.gnu.org/archive/html/bug-gnulib/2011-09/msg00367.html>, +# <https://lists.gnu.org/r/bug-gnulib/2011-09/msg00367.html>, # but many more packages use AC_PROG_CC_STDC than AC_PROG_CC_C99 -# <http://lists.gnu.org/archive/html/bug-gnulib/2011-09/msg00441.html>. +# <https://lists.gnu.org/r/bug-gnulib/2011-09/msg00441.html>. # Remaining problems: # - When AC_PROG_CC_STDC is invoked twice, it adds the C99 enabling options # to CC twice -# <http://lists.gnu.org/archive/html/bug-gnulib/2011-09/msg00431.html>. +# <https://lists.gnu.org/r/bug-gnulib/2011-09/msg00431.html>. # - AC_PROG_CC_STDC is likely to change now that C11 is an ISO standard. AC_DEFUN([gl_PROG_CC_C99], [ @@ -256,7 +495,8 @@ dnl library formats. In particular, the GNU binutils programs ar and ranlib dnl produce libraries that work only with gcc, not with cc. AC_REQUIRE([AC_PROG_CC]) - AC_BEFORE([$0], [AM_PROG_AR]) + dnl The '][' hides this use from 'aclocal'. + AC_BEFORE([$0], [A][M_PROG_AR]) AC_CACHE_CHECK([for Minix Amsterdam compiler], [gl_cv_c_amsterdam_compiler], [ AC_EGREP_CPP([Amsterdam], @@ -288,7 +528,9 @@ dnl __ACK__. It may seem like its easier to avoid calling the macro here, dnl but we need to AC_SUBST both AR/ARFLAGS (thus those must have some good dnl default value and automake should usually know them). - m4_ifdef([AM_PROG_AR], [AM_PROG_AR], [:]) + dnl + dnl The '][' hides this use from 'aclocal'. + m4_ifdef([A][M_PROG_AR], [A][M_PROG_AR], [:]) fi dnl In case the code above has not helped with setting AR/ARFLAGS, use @@ -312,25 +554,6 @@ AC_SUBST([RANLIB]) ]) -# AC_PROG_MKDIR_P -# is a backport of autoconf-2.60's AC_PROG_MKDIR_P, with a fix -# for interoperability with automake-1.9.6 from autoconf-2.62. -# Remove this macro when we can assume autoconf >= 2.62 or -# autoconf >= 2.60 && automake >= 1.10. -# AC_AUTOCONF_VERSION was introduced in 2.62, so use that as the witness. -m4_ifndef([AC_AUTOCONF_VERSION],[ -m4_ifdef([AC_PROG_MKDIR_P], [ - dnl For automake-1.9.6 && autoconf < 2.62: Ensure MKDIR_P is AC_SUBSTed. - m4_define([AC_PROG_MKDIR_P], - m4_defn([AC_PROG_MKDIR_P])[ - AC_SUBST([MKDIR_P])])], [ - dnl For autoconf < 2.60: Backport of AC_PROG_MKDIR_P. - AC_DEFUN_ONCE([AC_PROG_MKDIR_P], - [AC_REQUIRE([AM_PROG_MKDIR_P])dnl defined by automake - MKDIR_P='$(mkdir_p)' - AC_SUBST([MKDIR_P])])]) -]) - # AC_C_RESTRICT # This definition is copied from post-2.69 Autoconf and overrides the # AC_C_RESTRICT macro from autoconf 2.60..2.69. It can be removed @@ -344,16 +567,16 @@ for ac_kw in __restrict __restrict__ _Restrict restrict; do AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( - [[typedef int *int_ptr; - int foo (int_ptr $ac_kw ip) { return ip[0]; } - int bar (int [$ac_kw]); /* Catch GCC bug 14050. */ - int bar (int ip[$ac_kw]) { return ip[0]; } - ]], - [[int s[1]; - int *$ac_kw t = s; - t[0] = 0; - return foo (t) + bar (t); - ]])], + [[typedef int *int_ptr; + int foo (int_ptr $ac_kw ip) { return ip[0]; } + int bar (int [$ac_kw]); /* Catch GCC bug 14050. */ + int bar (int ip[$ac_kw]) { return ip[0]; } + ]], + [[int s[1]; + int *$ac_kw t = s; + t[0] = 0; + return foo (t) + bar (t); + ]])], [ac_cv_c_restrict=$ac_kw]) test "$ac_cv_c_restrict" != no && break done @@ -363,12 +586,13 @@ nothing if this is not supported. Do not define if restrict is supported directly. */ #undef restrict -/* Work around a bug in Sun C++: it does not support _Restrict or - __restrict__, even though the corresponding Sun C compiler ends up with - "#define restrict _Restrict" or "#define restrict __restrict__" in the - previous line. Perhaps some future version of Sun C++ will work with - restrict; if so, hopefully it defines __RESTRICT like Sun C does. */ -#if defined __SUNPRO_CC && !defined __RESTRICT +/* Work around a bug in older versions of Sun C++, which did not + #define __restrict__ or support _Restrict or __restrict__ + even though the corresponding Sun C compiler ended up with + "#define restrict _Restrict" or "#define restrict __restrict__" + in the previous line. This workaround can be removed once + we assume Oracle Developer Studio 12.5 (2016) or later. */ +#if defined __SUNPRO_CC && !defined __RESTRICT && !defined __restrict__ # define _Restrict # define __restrict__ #endif]) @@ -404,59 +628,3 @@ # AS_VAR_COPY was added in autoconf 2.63b m4_define_default([AS_VAR_COPY], [AS_LITERAL_IF([$1[]$2], [$1=$$2], [eval $1=\$$2])]) - -# AC_PROG_SED was added in autoconf 2.59b -m4_ifndef([AC_PROG_SED], -[AC_DEFUN([AC_PROG_SED], -[AC_CACHE_CHECK([for a sed that does not truncate output], ac_cv_path_SED, - [dnl ac_script should not contain more than 99 commands (for HP-UX sed), - dnl but more than about 7000 bytes, to catch a limit in Solaris 8 /usr/ucb/sed. - ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ - for ac_i in 1 2 3 4 5 6 7; do - ac_script="$ac_script$as_nl$ac_script" - done - echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed - AS_UNSET([ac_script]) - if test -z "$SED"; then - ac_path_SED_found=false - _AS_PATH_WALK([], [ - for ac_prog in sed gsed; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" - AS_EXECUTABLE_P(["$ac_path_SED"]) || continue - case `"$ac_path_SED" --version 2>&1` in - *GNU*) ac_cv_path_SED=$ac_path_SED ac_path_SED_found=:;; - *) - ac_count=0 - _AS_ECHO_N([0123456789]) >conftest.in - while : - do - cat conftest.in conftest.in >conftest.tmp - mv conftest.tmp conftest.in - cp conftest.in conftest.nl - echo >> conftest.nl - "$ac_path_SED" -f conftest.sed <conftest.nl >conftest.out 2>/dev/null || break - diff conftest.out conftest.nl >/dev/null 2>&1 || break - ac_count=`expr $ac_count + 1` - if test $ac_count -gt ${ac_path_SED_max-0}; then - # Best so far, but keep looking for better - ac_cv_path_SED=$ac_path_SED - ac_path_SED_max=$ac_count - fi - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; - esac - $ac_path_SED_found && break 3 - done - done]) - if test -z "$ac_cv_path_SED"; then - AC_ERROR([no acceptable sed could be found in \$PATH]) - fi - else - ac_cv_path_SED=$SED - fi - SED="$ac_cv_path_SED" - AC_SUBST([SED])dnl - rm -f conftest.sed -])])]) diff -Nru gdb-9.1/gnulib/import/m4/gnulib-comp.m4 gdb-10.2/gnulib/import/m4/gnulib-comp.m4 --- gdb-9.1/gnulib/import/m4/gnulib-comp.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/gnulib-comp.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ # DO NOT EDIT! GENERATED AUTOMATICALLY! -# Copyright (C) 2002-2016 Free Software Foundation, Inc. +# Copyright (C) 2002-2020 Free Software Foundation, Inc. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -12,7 +12,7 @@ # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License -# along with this file. If not, see <http://www.gnu.org/licenses/>. +# along with this file. If not, see <https://www.gnu.org/licenses/>. # # As a special exception to the GNU General Public License, # this file may be distributed as part of a program that @@ -49,19 +49,23 @@ # Code from module arpa_inet: # Code from module assure: # Code from module at-internal: + # Code from module attribute: + # Code from module btowc: + # Code from module builtin-expect: + # Code from module c99: # Code from module canonicalize-lgpl: # Code from module chdir: # Code from module chdir-long: # Code from module cloexec: # Code from module close: # Code from module closedir: - # Code from module configmake: + # Code from module count-one-bits: + # Code from module ctype: # Code from module d-ino: # Code from module d-type: # Code from module dirent: # Code from module dirfd: # Code from module dirname-lgpl: - # Code from module dosname: # Code from module double-slash-root: # Code from module dup: # Code from module dup2: @@ -75,6 +79,7 @@ # Code from module fcntl: # Code from module fcntl-h: # Code from module fd-hook: + # Code from module fd-safer-flag: # Code from module fdopendir: # Code from module filename: # Code from module filenamecat-lgpl: @@ -82,6 +87,7 @@ # Code from module float: # Code from module fnmatch: # Code from module fnmatch-gnu: + # Code from module fnmatch-h: # Code from module fpieee: AC_REQUIRE([gl_FP_IEEE]) # Code from module fpucw: @@ -94,22 +100,27 @@ # Code from module getdtablesize: # Code from module getlogin_r: # Code from module getprogname: + # Code from module getrandom: # Code from module gettext-h: # Code from module gettimeofday: # Code from module glob: + # Code from module glob-h: # Code from module hard-locale: - # Code from module havelib: # Code from module include_next: # Code from module inet_ntop: # Code from module intprops: # Code from module inttypes: # Code from module inttypes-incomplete: + # Code from module isblank: # Code from module isnand-nolibm: # Code from module isnanl-nolibm: # Code from module largefile: AC_REQUIRE([AC_SYS_LARGEFILE]) + # Code from module libc-config: # Code from module limits-h: # Code from module localcharset: + # Code from module locale: + # Code from module localtime-buffer: # Code from module lock: # Code from module lstat: # Code from module malloc-posix: @@ -118,11 +129,13 @@ # Code from module mbrtowc: # Code from module mbsinit: # Code from module mbsrtowcs: + # Code from module mbtowc: # Code from module memchr: # Code from module memmem: # Code from module memmem-simple: # Code from module mempcpy: # Code from module memrchr: + # Code from module minmax: # Code from module mkdir: # Code from module mkdtemp: # Code from module mkostemp: @@ -146,8 +159,9 @@ # Code from module rmdir: # Code from module same-inode: # Code from module save-cwd: - # Code from module secure_getenv: + # Code from module scratch_buffer: # Code from module setenv: + # Code from module setlocale-null: # Code from module signal-h: # Code from module snippet/_Noreturn: # Code from module snippet/arg-nonnull: @@ -156,6 +170,8 @@ # Code from module socklen: # Code from module ssize_t: # Code from module stat: + # Code from module stat-time: + # Code from module std-gnu11: # Code from module stdalign: # Code from module stdbool: # Code from module stddef: @@ -169,10 +185,12 @@ # Code from module strerror-override: # Code from module strerror_r-posix: # Code from module string: + # Code from module strnlen: # Code from module strnlen1: # Code from module strstr: # Code from module strstr-simple: # Code from module strtok_r: + # Code from module sys_random: # Code from module sys_socket: # Code from module sys_stat: # Code from module sys_time: @@ -190,6 +208,13 @@ # Code from module verify: # Code from module wchar: # Code from module wctype-h: + # Code from module windows-mutex: + # Code from module windows-once: + # Code from module windows-recmutex: + # Code from module windows-rwlock: + # Code from module wmemchr: + # Code from module wmempcpy: + # Code from module xalloc-oversized: ]) # This macro should be invoked from ./configure.ac, in the section @@ -211,7 +236,14 @@ gl_FUNC_ALLOCA gl_HEADER_ARPA_INET AC_PROG_MKDIR_P - AC_LIBOBJ([openat-proc]) + AC_REQUIRE([AC_CANONICAL_HOST]) + gl_FUNC_BTOWC + if test $HAVE_BTOWC = 0 || test $REPLACE_BTOWC = 1; then + AC_LIBOBJ([btowc]) + gl_PREREQ_BTOWC + fi + gl_WCHAR_MODULE_INDICATOR([btowc]) + gl___BUILTIN_EXPECT gl_CANONICALIZE_LGPL if test $HAVE_CANONICALIZE_FILE_NAME = 0 || test $REPLACE_CANONICALIZE_FILE_NAME = 1; then AC_LIBOBJ([canonicalize-lgpl]) @@ -236,7 +268,7 @@ AC_LIBOBJ([closedir]) fi gl_DIRENT_MODULE_INDICATOR([closedir]) - gl_CONFIGMAKE_PREP + gl_CTYPE_H gl_CHECK_TYPE_STRUCT_DIRENT_D_INO gl_CHECK_TYPE_STRUCT_DIRENT_D_TYPE gl_DIRENT_H @@ -281,6 +313,7 @@ fi gl_FCNTL_MODULE_INDICATOR([fcntl]) gl_FCNTL_H + gl_MODULE_INDICATOR([fd-safer-flag]) gl_FUNC_FDOPENDIR if test $HAVE_FDOPENDIR = 0 || test $REPLACE_FDOPENDIR = 1; then AC_LIBOBJ([fdopendir]) @@ -297,21 +330,24 @@ AC_LIBOBJ([itold]) fi gl_FUNC_FNMATCH_POSIX - if test -n "$FNMATCH_H"; then + if test $HAVE_FNMATCH = 0 || test $REPLACE_FNMATCH = 1; then AC_LIBOBJ([fnmatch]) gl_PREREQ_FNMATCH fi + gl_FNMATCH_MODULE_INDICATOR([fnmatch]) gl_FUNC_FNMATCH_GNU - if test -n "$FNMATCH_H"; then + if test $HAVE_FNMATCH = 0 || test $REPLACE_FNMATCH = 1; then AC_LIBOBJ([fnmatch]) gl_PREREQ_FNMATCH fi - gl_FUNC_FREXP + gl_MODULE_INDICATOR([fnmatch-gnu]) + gl_FNMATCH_H + AC_REQUIRE([gl_FUNC_FREXP]) if test $gl_func_frexp != yes; then AC_LIBOBJ([frexp]) fi gl_MATH_MODULE_INDICATOR([frexp]) - gl_FUNC_FREXPL + AC_REQUIRE([gl_FUNC_FREXPL]) if test $HAVE_DECL_FREXPL = 0 || test $gl_func_frexpl = no; then AC_LIBOBJ([frexpl]) fi @@ -319,6 +355,11 @@ gl_FUNC_FSTAT if test $REPLACE_FSTAT = 1; then AC_LIBOBJ([fstat]) + case "$host_os" in + mingw*) + AC_LIBOBJ([stat-w32]) + ;; + esac gl_PREREQ_FSTAT fi gl_SYS_STAT_MODULE_INDICATOR([fstat]) @@ -351,7 +392,14 @@ gl_PREREQ_GETLOGIN_R fi gl_UNISTD_MODULE_INDICATOR([getlogin_r]) + AC_REQUIRE([gl_LIB_GETLOGIN]) gl_FUNC_GETPROGNAME + AC_REQUIRE([AC_CANONICAL_HOST]) + gl_FUNC_GETRANDOM + if test $HAVE_GETRANDOM = 0 || test $REPLACE_GETRANDOM = 1; then + AC_LIBOBJ([getrandom]) + fi + gl_SYS_RANDOM_MODULE_INDICATOR([getrandom]) AC_SUBST([LIBINTL]) AC_SUBST([LTLIBINTL]) gl_FUNC_GETTIMEOFDAY @@ -361,11 +409,19 @@ fi gl_SYS_TIME_MODULE_INDICATOR([gettimeofday]) gl_GLOB - if test -n "$GLOB_H"; then + if test $HAVE_GLOB = 0 || test $REPLACE_GLOB = 1; then AC_LIBOBJ([glob]) + AC_LIBOBJ([globfree]) gl_PREREQ_GLOB fi - gl_HARD_LOCALE + if test $HAVE_GLOB_PATTERN_P = 0 || test $REPLACE_GLOB_PATTERN_P = 1; then + AC_LIBOBJ([glob_pattern_p]) + fi + gl_GLOB_MODULE_INDICATOR([glob]) + gl_GLOB_H + AC_REQUIRE([gl_FUNC_SETLOCALE_NULL]) + LIB_HARD_LOCALE="$LIB_SETLOCALE_NULL" + AC_SUBST([LIB_HARD_LOCALE]) gl_FUNC_INET_NTOP if test $HAVE_INET_NTOP = 0 || test $REPLACE_INET_NTOP = 1; then AC_LIBOBJ([inet_ntop]) @@ -374,6 +430,12 @@ gl_ARPA_INET_MODULE_INDICATOR([inet_ntop]) gl_INTTYPES_H gl_INTTYPES_INCOMPLETE + gl_FUNC_ISBLANK + if test $HAVE_ISBLANK = 0; then + AC_LIBOBJ([isblank]) + fi + gl_MODULE_INDICATOR([isblank]) + gl_CTYPE_MODULE_INDICATOR([isblank]) gl_FUNC_ISNAND_NO_LIBM if test $gl_func_isnand_no_libm != yes; then AC_LIBOBJ([isnand]) @@ -385,10 +447,15 @@ gl_PREREQ_ISNANL fi AC_REQUIRE([gl_LARGEFILE]) + gl___INLINE gl_LIMITS_H gl_LOCALCHARSET - LOCALCHARSET_TESTS_ENVIRONMENT="CHARSETALIASDIR=\"\$(abs_top_builddir)/$gl_source_base\"" + dnl For backward compatibility. Some packages still use this. + LOCALCHARSET_TESTS_ENVIRONMENT= AC_SUBST([LOCALCHARSET_TESTS_ENVIRONMENT]) + gl_LOCALE_H + AC_REQUIRE([gl_LOCALTIME_BUFFER_DEFAULTS]) + AC_LIBOBJ([localtime-buffer]) gl_LOCK gl_MODULE_INDICATOR([lock]) gl_FUNC_LSTAT @@ -407,6 +474,11 @@ gl_FUNC_MBRTOWC if test $HAVE_MBRTOWC = 0 || test $REPLACE_MBRTOWC = 1; then AC_LIBOBJ([mbrtowc]) + if test $REPLACE_MBSTATE_T = 1; then + AC_LIBOBJ([lc-charset-dispatch]) + AC_LIBOBJ([mbtowc-lock]) + gl_PREREQ_MBTOWC_LOCK + fi gl_PREREQ_MBRTOWC fi gl_WCHAR_MODULE_INDICATOR([mbrtowc]) @@ -423,6 +495,12 @@ gl_PREREQ_MBSRTOWCS fi gl_WCHAR_MODULE_INDICATOR([mbsrtowcs]) + gl_FUNC_MBTOWC + if test $HAVE_MBTOWC = 0 || test $REPLACE_MBTOWC = 1; then + AC_LIBOBJ([mbtowc]) + gl_PREREQ_MBTOWC + fi + gl_STDLIB_MODULE_INDICATOR([mbtowc]) gl_FUNC_MEMCHR if test $HAVE_MEMCHR = 0 || test $REPLACE_MEMCHR = 1; then AC_LIBOBJ([memchr]) @@ -450,6 +528,7 @@ gl_PREREQ_MEMRCHR fi gl_STRING_MODULE_INDICATOR([memrchr]) + gl_MINMAX gl_FUNC_MKDIR if test $REPLACE_MKDIR = 1; then AC_LIBOBJ([mkdir]) @@ -475,6 +554,7 @@ if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then AC_LIBOBJ([msvc-nothrow]) fi + gl_MODULE_INDICATOR([msvc-nothrow]) gl_MULTIARCH gl_HEADER_NETINET_IN AC_PROG_MKDIR_P @@ -535,26 +615,33 @@ fi gl_UNISTD_MODULE_INDICATOR([rmdir]) gl_SAVE_CWD - gl_FUNC_SECURE_GETENV - if test $HAVE_SECURE_GETENV = 0; then - AC_LIBOBJ([secure_getenv]) - gl_PREREQ_SECURE_GETENV - fi - gl_STDLIB_MODULE_INDICATOR([secure_getenv]) gl_FUNC_SETENV if test $HAVE_SETENV = 0 || test $REPLACE_SETENV = 1; then AC_LIBOBJ([setenv]) fi gl_STDLIB_MODULE_INDICATOR([setenv]) + gl_FUNC_SETLOCALE_NULL + if test $SETLOCALE_NULL_ALL_MTSAFE = 0 || test $SETLOCALE_NULL_ONE_MTSAFE = 0; then + AC_LIBOBJ([setlocale-lock]) + gl_PREREQ_SETLOCALE_LOCK + fi + gl_LOCALE_MODULE_INDICATOR([setlocale_null]) gl_SIGNAL_H gl_TYPE_SOCKLEN_T gt_TYPE_SSIZE_T gl_FUNC_STAT if test $REPLACE_STAT = 1; then AC_LIBOBJ([stat]) + case "$host_os" in + mingw*) + AC_LIBOBJ([stat-w32]) + ;; + esac gl_PREREQ_STAT fi gl_SYS_STAT_MODULE_INDICATOR([stat]) + gl_STAT_TIME + gl_STAT_BIRTHTIME gl_STDALIGN_H AM_STDBOOL_H gl_STDDEF_H @@ -591,7 +678,15 @@ gl_PREREQ_STRERROR_R fi gl_STRING_MODULE_INDICATOR([strerror_r]) + dnl For the modules argp, error. + gl_MODULE_INDICATOR([strerror_r-posix]) gl_HEADER_STRING_H + gl_FUNC_STRNLEN + if test $HAVE_DECL_STRNLEN = 0 || test $REPLACE_STRNLEN = 1; then + AC_LIBOBJ([strnlen]) + gl_PREREQ_STRNLEN + fi + gl_STRING_MODULE_INDICATOR([strnlen]) gl_FUNC_STRSTR if test $REPLACE_STRSTR = 1; then AC_LIBOBJ([strstr]) @@ -607,6 +702,8 @@ gl_PREREQ_STRTOK_R fi gl_STRING_MODULE_INDICATOR([strtok_r]) + gl_HEADER_SYS_RANDOM + AC_PROG_MKDIR_P AC_REQUIRE([gl_HEADER_SYS_SOCKET]) AC_PROG_MKDIR_P gl_HEADER_SYS_STAT_H @@ -618,7 +715,7 @@ gl_HEADER_SYS_UIO AC_PROG_MKDIR_P gl_FUNC_GEN_TEMPNAME - gl_THREADLIB + AC_REQUIRE([gl_THREADLIB]) gl_HEADER_TIME_H gl_TIME_R if test $HAVE_LOCALTIME_R = 0 || test $REPLACE_LOCALTIME_R = 1; then @@ -636,6 +733,40 @@ gl_STDLIB_MODULE_INDICATOR([unsetenv]) gl_WCHAR_H gl_WCTYPE_H + AC_REQUIRE([AC_CANONICAL_HOST]) + case "$host_os" in + mingw*) + AC_LIBOBJ([windows-mutex]) + ;; + esac + AC_REQUIRE([AC_CANONICAL_HOST]) + case "$host_os" in + mingw*) + AC_LIBOBJ([windows-once]) + ;; + esac + AC_REQUIRE([AC_CANONICAL_HOST]) + case "$host_os" in + mingw*) + AC_LIBOBJ([windows-recmutex]) + ;; + esac + AC_REQUIRE([AC_CANONICAL_HOST]) + case "$host_os" in + mingw*) + AC_LIBOBJ([windows-rwlock]) + ;; + esac + gl_FUNC_WMEMCHR + if test $HAVE_WMEMCHR = 0; then + AC_LIBOBJ([wmemchr]) + fi + gl_WCHAR_MODULE_INDICATOR([wmemchr]) + gl_FUNC_WMEMPCPY + if test $HAVE_WMEMPCPY = 0; then + AC_LIBOBJ([wmempcpy]) + fi + gl_WCHAR_MODULE_INDICATOR([wmempcpy]) # End of code from modules m4_ifval(gl_LIBSOURCES_LIST, [ m4_syscmd([test ! -d ]m4_defn([gl_LIBSOURCES_DIR])[ || @@ -776,32 +907,35 @@ # This macro records the list of files which have been installed by # gnulib-tool and may be removed by future gnulib-tool invocations. AC_DEFUN([gl_FILE_LIST], [ - build-aux/config.rpath - build-aux/snippet/_Noreturn.h - build-aux/snippet/arg-nonnull.h - build-aux/snippet/c++defs.h - build-aux/snippet/warn-on-use.h build-aux/update-copyright + lib/_Noreturn.h lib/alloca.c lib/alloca.in.h + lib/arg-nonnull.h lib/arpa_inet.in.h lib/assure.h lib/at-func.c + lib/attribute.h lib/basename-lgpl.c + lib/btowc.c + lib/c++defs.h lib/canonicalize-lgpl.c + lib/cdefs.h lib/chdir-long.c lib/chdir-long.h lib/cloexec.c lib/cloexec.h lib/close.c lib/closedir.c - lib/config.charset + lib/count-one-bits.c + lib/count-one-bits.h + lib/ctype.in.h lib/dirent-private.h lib/dirent.in.h lib/dirfd.c lib/dirname-lgpl.c lib/dirname.h - lib/dosname.h + lib/dup-safer-flag.c lib/dup-safer.c lib/dup.c lib/dup2.c @@ -815,6 +949,7 @@ lib/fcntl.in.h lib/fd-hook.c lib/fd-hook.h + lib/fd-safer-flag.c lib/fd-safer.c lib/fdopendir.c lib/filename.h @@ -838,11 +973,15 @@ lib/getlogin_r.c lib/getprogname.c lib/getprogname.h + lib/getrandom.c lib/gettext.h lib/gettimeofday.c lib/glob-libc.h lib/glob.c lib/glob.in.h + lib/glob_internal.h + lib/glob_pattern_p.c + lib/globfree.c lib/glthread/lock.c lib/glthread/lock.h lib/glthread/threadlib.c @@ -851,32 +990,49 @@ lib/inet_ntop.c lib/intprops.h lib/inttypes.in.h + lib/isblank.c lib/isnan.c lib/isnand-nolibm.h lib/isnand.c lib/isnanl-nolibm.h lib/isnanl.c lib/itold.c + lib/lc-charset-dispatch.c + lib/lc-charset-dispatch.h + lib/libc-config.h lib/limits.in.h lib/localcharset.c lib/localcharset.h + lib/locale.in.h + lib/localtime-buffer.c + lib/localtime-buffer.h lib/lstat.c lib/malloc.c + lib/malloc/scratch_buffer.h + lib/malloc/scratch_buffer_grow.c + lib/malloc/scratch_buffer_grow_preserve.c + lib/malloc/scratch_buffer_set_array_size.c lib/malloca.c lib/malloca.h - lib/malloca.valgrind lib/math.c lib/math.in.h + lib/mbrtowc-impl-utf8.h + lib/mbrtowc-impl.h lib/mbrtowc.c lib/mbsinit.c lib/mbsrtowcs-impl.h lib/mbsrtowcs-state.c lib/mbsrtowcs.c + lib/mbtowc-impl.h + lib/mbtowc-lock.c + lib/mbtowc-lock.h + lib/mbtowc.c lib/memchr.c lib/memchr.valgrind lib/memmem.c lib/mempcpy.c lib/memrchr.c + lib/minmax.h lib/mkdir.c lib/mkdtemp.c lib/mkostemp.c @@ -899,17 +1055,22 @@ lib/readdir.c lib/readlink.c lib/realloc.c - lib/ref-add.sin - lib/ref-del.sin lib/rename.c lib/rewinddir.c lib/rmdir.c lib/same-inode.h lib/save-cwd.c lib/save-cwd.h - lib/secure_getenv.c + lib/scratch_buffer.h lib/setenv.c + lib/setlocale-lock.c + lib/setlocale_null.c + lib/setlocale_null.h lib/signal.in.h + lib/stat-time.c + lib/stat-time.h + lib/stat-w32.c + lib/stat-w32.h lib/stat.c lib/stdalign.in.h lib/stdbool.in.h @@ -928,10 +1089,12 @@ lib/strerror_r.c lib/string.in.h lib/stripslash.c + lib/strnlen.c lib/strnlen1.c lib/strnlen1.h lib/strstr.c lib/strtok_r.c + lib/sys_random.in.h lib/sys_socket.c lib/sys_socket.in.h lib/sys_stat.in.h @@ -948,19 +1111,36 @@ lib/unistd.in.h lib/unsetenv.c lib/verify.h + lib/warn-on-use.h lib/wchar.in.h lib/wctype-h.c lib/wctype.in.h + lib/windows-initguard.h + lib/windows-mutex.c + lib/windows-mutex.h + lib/windows-once.c + lib/windows-once.h + lib/windows-recmutex.c + lib/windows-recmutex.h + lib/windows-rwlock.c + lib/windows-rwlock.h + lib/wmemchr-impl.h + lib/wmemchr.c + lib/wmempcpy.c + lib/xalloc-oversized.h m4/00gnulib.m4 + m4/__inline.m4 m4/absolute-header.m4 m4/alloca.m4 m4/arpa_inet_h.m4 + m4/btowc.m4 + m4/builtin-expect.m4 m4/canonicalize.m4 m4/chdir-long.m4 m4/close.m4 m4/closedir.m4 m4/codeset.m4 - m4/configmake.m4 + m4/ctype.m4 m4/d-ino.m4 m4/d-type.m4 m4/dirent_h.m4 @@ -986,6 +1166,7 @@ m4/flexmember.m4 m4/float_h.m4 m4/fnmatch.m4 + m4/fnmatch_h.m4 m4/fpieee.m4 m4/frexp.m4 m4/frexpl.m4 @@ -995,30 +1176,31 @@ m4/getcwd-path-max.m4 m4/getcwd.m4 m4/getdtablesize.m4 + m4/getlogin.m4 m4/getlogin_r.m4 + m4/getpagesize.m4 m4/getprogname.m4 + m4/getrandom.m4 m4/gettimeofday.m4 - m4/glibc21.m4 m4/glob.m4 + m4/glob_h.m4 m4/gnulib-common.m4 - m4/hard-locale.m4 m4/include_next.m4 m4/inet_ntop.m4 m4/inttypes-pri.m4 m4/inttypes.m4 + m4/isblank.m4 m4/isnand.m4 m4/isnanl.m4 m4/largefile.m4 - m4/lib-ld.m4 - m4/lib-link.m4 - m4/lib-prefix.m4 m4/limits-h.m4 m4/localcharset.m4 m4/locale-fr.m4 m4/locale-ja.m4 m4/locale-zh.m4 + m4/locale_h.m4 + m4/localtime-buffer.m4 m4/lock.m4 - m4/longlong.m4 m4/lstat.m4 m4/malloc.m4 m4/malloca.m4 @@ -1027,10 +1209,12 @@ m4/mbsinit.m4 m4/mbsrtowcs.m4 m4/mbstate_t.m4 + m4/mbtowc.m4 m4/memchr.m4 m4/memmem.m4 m4/mempcpy.m4 m4/memrchr.m4 + m4/minmax.m4 m4/mkdir.m4 m4/mkdtemp.m4 m4/mkostemp.m4 @@ -1042,11 +1226,13 @@ m4/netinet_in_h.m4 m4/nocrash.m4 m4/off_t.m4 - m4/onceonly.m4 + m4/open-cloexec.m4 + m4/open-slash.m4 m4/open.m4 m4/openat.m4 m4/opendir.m4 m4/pathmax.m4 + m4/pthread_rwlock_rdlock.m4 m4/rawmemchr.m4 m4/readdir.m4 m4/readlink.m4 @@ -1055,13 +1241,15 @@ m4/rewinddir.m4 m4/rmdir.m4 m4/save-cwd.m4 - m4/secure_getenv.m4 m4/setenv.m4 + m4/setlocale_null.m4 m4/signal_h.m4 m4/socklen.m4 m4/sockpfaf.m4 m4/ssize_t.m4 + m4/stat-time.m4 m4/stat.m4 + m4/std-gnu11.m4 m4/stdalign.m4 m4/stdbool.m4 m4/stddef_h.m4 @@ -1073,8 +1261,10 @@ m4/strerror.m4 m4/strerror_r.m4 m4/string_h.m4 + m4/strnlen.m4 m4/strstr.m4 m4/strtok_r.m4 + m4/sys_random_h.m4 m4/sys_socket_h.m4 m4/sys_stat_h.m4 m4/sys_time_h.m4 @@ -1086,9 +1276,13 @@ m4/time_r.m4 m4/unistd-safer.m4 m4/unistd_h.m4 + m4/visibility.m4 m4/warn-on-use.m4 m4/wchar_h.m4 m4/wchar_t.m4 m4/wctype_h.m4 m4/wint_t.m4 + m4/wmemchr.m4 + m4/wmempcpy.m4 + m4/zzgnulib.m4 ]) diff -Nru gdb-9.1/gnulib/import/m4/gnulib-tool.m4 gdb-10.2/gnulib/import/m4/gnulib-tool.m4 --- gdb-9.1/gnulib/import/m4/gnulib-tool.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/gnulib-tool.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ # gnulib-tool.m4 serial 2 -dnl Copyright (C) 2004-2005, 2009-2016 Free Software Foundation, Inc. +dnl Copyright (C) 2004-2005, 2009-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. diff -Nru gdb-9.1/gnulib/import/m4/hard-locale.m4 gdb-10.2/gnulib/import/m4/hard-locale.m4 --- gdb-9.1/gnulib/import/m4/hard-locale.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/hard-locale.m4 1970-01-01 00:00:00.000000000 +0000 @@ -1,11 +0,0 @@ -# hard-locale.m4 serial 8 -dnl Copyright (C) 2002-2006, 2009-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl No prerequisites of lib/hard-locale.c. -AC_DEFUN([gl_HARD_LOCALE], -[ - : -]) diff -Nru gdb-9.1/gnulib/import/m4/include_next.m4 gdb-10.2/gnulib/import/m4/include_next.m4 --- gdb-9.1/gnulib/import/m4/include_next.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/include_next.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,12 +1,13 @@ -# include_next.m4 serial 23 -dnl Copyright (C) 2006-2016 Free Software Foundation, Inc. +# include_next.m4 serial 24 +dnl Copyright (C) 2006-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Paul Eggert and Derek Price. -dnl Sets INCLUDE_NEXT and PRAGMA_SYSTEM_HEADER. +dnl Sets INCLUDE_NEXT, INCLUDE_NEXT_AS_FIRST_DIRECTIVE, PRAGMA_SYSTEM_HEADER, +dnl and PRAGMA_COLUMNS. dnl dnl INCLUDE_NEXT expands to 'include_next' if the compiler supports it, or to dnl 'include' otherwise. diff -Nru gdb-9.1/gnulib/import/m4/inet_ntop.m4 gdb-10.2/gnulib/import/m4/inet_ntop.m4 --- gdb-9.1/gnulib/import/m4/inet_ntop.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/inet_ntop.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ -# inet_ntop.m4 serial 19 -dnl Copyright (C) 2005-2006, 2008-2016 Free Software Foundation, Inc. +# inet_ntop.m4 serial 21 +dnl Copyright (C) 2005-2006, 2008-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -16,6 +16,7 @@ dnl Most platforms that provide inet_ntop define it in libc. dnl Solaris 8..10 provide inet_ntop in libnsl instead. dnl Solaris 2.6..7 provide inet_ntop in libresolv instead. + dnl Haiku provides it in -lnetwork. dnl Native Windows provides it in -lws2_32 instead, with a declaration in dnl <ws2tcpip.h>, and it uses stdcall calling convention, not cdecl dnl (hence we cannot use AC_CHECK_FUNCS, AC_SEARCH_LIBS to find it). @@ -23,19 +24,20 @@ INET_NTOP_LIB= gl_PREREQ_SYS_H_WINSOCK2 if test $HAVE_WINSOCK2_H = 1; then + dnl It needs to be overridden, because the stdcall calling convention + dnl is not compliant with POSIX. Set REPLACE_INET_NTOP in order to avoid + dnl a name conflict at the linker level, even though the header file + dnl <ws2tcpip.h> declares inet_ntop only if _WIN32_WINNT >= 0x0600. + REPLACE_INET_NTOP=1 AC_CHECK_DECLS([inet_ntop],,, [[#include <ws2tcpip.h>]]) if test $ac_cv_have_decl_inet_ntop = yes; then - dnl It needs to be overridden, because the stdcall calling convention - dnl is not compliant with POSIX. - REPLACE_INET_NTOP=1 INET_NTOP_LIB="-lws2_32" else HAVE_DECL_INET_NTOP=0 - HAVE_INET_NTOP=0 fi else gl_save_LIBS=$LIBS - AC_SEARCH_LIBS([inet_ntop], [nsl resolv], [], + AC_SEARCH_LIBS([inet_ntop], [nsl resolv network], [], [AC_CHECK_FUNCS([inet_ntop]) if test $ac_cv_func_inet_ntop = no; then HAVE_INET_NTOP=0 diff -Nru gdb-9.1/gnulib/import/m4/__inline.m4 gdb-10.2/gnulib/import/m4/__inline.m4 --- gdb-9.1/gnulib/import/m4/__inline.m4 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/__inline.m4 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,22 @@ +# Test for __inline keyword +dnl Copyright 2017-2020 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl___INLINE], +[ + AC_CACHE_CHECK([whether the compiler supports the __inline keyword], + [gl_cv_c___inline], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[typedef int foo_t; + static __inline foo_t foo (void) { return 0; }]], + [[return foo ();]])], + [gl_cv_c___inline=yes], + [gl_cv_c___inline=no])]) + if test $gl_cv_c___inline = yes; then + AC_DEFINE([HAVE___INLINE], [1], + [Define to 1 if the compiler supports the keyword '__inline'.]) + fi +]) diff -Nru gdb-9.1/gnulib/import/m4/inttypes.m4 gdb-10.2/gnulib/import/m4/inttypes.m4 --- gdb-9.1/gnulib/import/m4/inttypes.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/inttypes.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ -# inttypes.m4 serial 26 -dnl Copyright (C) 2006-2016 Free Software Foundation, Inc. +# inttypes.m4 serial 29 +dnl Copyright (C) 2006-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -28,6 +28,8 @@ dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[#include <inttypes.h> ]], [imaxabs imaxdiv strtoimax strtoumax]) + + AC_REQUIRE([AC_C_RESTRICT]) ]) # Ensure that the PRI* and SCN* macros are defined appropriately. @@ -113,10 +115,8 @@ #if $2 #define CONDITION ($3) - #elif HAVE_LONG_LONG_INT - #define CONDITION ($4) #else - #define CONDITION 0 + #define CONDITION ($4) #endif int test[CONDITION ? 1 : -1];]])], [gl_cv_test_$1=yes], @@ -147,6 +147,7 @@ HAVE_DECL_IMAXDIV=1; AC_SUBST([HAVE_DECL_IMAXDIV]) HAVE_DECL_STRTOIMAX=1; AC_SUBST([HAVE_DECL_STRTOIMAX]) HAVE_DECL_STRTOUMAX=1; AC_SUBST([HAVE_DECL_STRTOUMAX]) + HAVE_IMAXDIV_T=1; AC_SUBST([HAVE_IMAXDIV_T]) REPLACE_STRTOIMAX=0; AC_SUBST([REPLACE_STRTOIMAX]) REPLACE_STRTOUMAX=0; AC_SUBST([REPLACE_STRTOUMAX]) INT32_MAX_LT_INTMAX_MAX=1; AC_SUBST([INT32_MAX_LT_INTMAX_MAX]) diff -Nru gdb-9.1/gnulib/import/m4/inttypes-pri.m4 gdb-10.2/gnulib/import/m4/inttypes-pri.m4 --- gdb-9.1/gnulib/import/m4/inttypes-pri.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/inttypes-pri.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ # inttypes-pri.m4 serial 7 (gettext-0.18.2) -dnl Copyright (C) 1997-2002, 2006, 2008-2016 Free Software Foundation, Inc. +dnl Copyright (C) 1997-2002, 2006, 2008-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. diff -Nru gdb-9.1/gnulib/import/m4/isblank.m4 gdb-10.2/gnulib/import/m4/isblank.m4 --- gdb-9.1/gnulib/import/m4/isblank.m4 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/isblank.m4 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,17 @@ +# isblank.m4 serial 3 +dnl Copyright (C) 2009-2020 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_ISBLANK], +[ + dnl Persuade glibc <ctype.h> to declare isblank(). + AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) + + AC_REQUIRE([gl_CTYPE_H_DEFAULTS]) + AC_CHECK_FUNCS_ONCE([isblank]) + if test $ac_cv_func_isblank = no; then + HAVE_ISBLANK=0 + fi +]) diff -Nru gdb-9.1/gnulib/import/m4/isnand.m4 gdb-10.2/gnulib/import/m4/isnand.m4 --- gdb-9.1/gnulib/import/m4/isnand.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/isnand.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ # isnand.m4 serial 11 -dnl Copyright (C) 2007-2016 Free Software Foundation, Inc. +dnl Copyright (C) 2007-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. diff -Nru gdb-9.1/gnulib/import/m4/isnanl.m4 gdb-10.2/gnulib/import/m4/isnanl.m4 --- gdb-9.1/gnulib/import/m4/isnanl.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/isnanl.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ -# isnanl.m4 serial 19 -dnl Copyright (C) 2007-2016 Free Software Foundation, Inc. +# isnanl.m4 serial 21 +dnl Copyright (C) 2007-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -68,7 +68,10 @@ AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <math.h> - #if __GNUC__ >= 4 + #ifndef __has_builtin + # define __has_builtin(name) 0 + #endif + #if __GNUC__ >= 4 && (!defined __clang__ || __has_builtin (__builtin_isnanl)) # undef isnanl # define isnanl(x) __builtin_isnanl ((long double)(x)) #elif defined isnan @@ -93,7 +96,10 @@ AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <math.h> - #if __GNUC__ >= 4 + #ifndef __has_builtin + # define __has_builtin(name) 0 + #endif + #if __GNUC__ >= 4 && (!defined __clang__ || __has_builtin (__builtin_isnanl)) # undef isnanl # define isnanl(x) __builtin_isnanl ((long double)(x)) #elif defined isnan @@ -123,7 +129,10 @@ #include <float.h> #include <limits.h> #include <math.h> -#if __GNUC__ >= 4 +#ifndef __has_builtin +# define __has_builtin(name) 0 +#endif +#if __GNUC__ >= 4 && (!defined __clang__ || __has_builtin (__builtin_isnanl)) # undef isnanl # define isnanl(x) __builtin_isnanl ((long double)(x)) #elif defined isnan @@ -231,6 +240,18 @@ }]])], [gl_cv_func_isnanl_works=yes], [gl_cv_func_isnanl_works=no], - [gl_cv_func_isnanl_works="guessing yes"]) + [case "$host_os" in + mingw*) # Guess yes on mingw, no on MSVC. + AC_EGREP_CPP([Known], [ +#ifdef __MINGW32__ + Known +#endif + ], + [gl_cv_func_isnanl_works="guessing yes"], + [gl_cv_func_isnanl_works="guessing no"]) + ;; + *) gl_cv_func_isnanl_works="guessing yes" ;; + esac + ]) ]) ]) diff -Nru gdb-9.1/gnulib/import/m4/largefile.m4 gdb-10.2/gnulib/import/m4/largefile.m4 --- gdb-9.1/gnulib/import/m4/largefile.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/largefile.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,10 +1,27 @@ # Enable large files on systems where this is not the default. +# Enable support for files on Linux file systems with 64-bit inode numbers. -# Copyright 1992-1996, 1998-2016 Free Software Foundation, Inc. +# Copyright 1992-1996, 1998-2020 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. +# The following macro works around a problem in Autoconf's AC_FUNC_FSEEKO: +# It does not set _LARGEFILE_SOURCE=1 on HP-UX/ia64 32-bit, although this +# setting of _LARGEFILE_SOURCE is needed so that <stdio.h> declares fseeko +# and ftello in C++ mode as well. +AC_DEFUN([gl_SET_LARGEFILE_SOURCE], +[ + AC_REQUIRE([AC_CANONICAL_HOST]) + AC_FUNC_FSEEKO + case "$host_os" in + hpux*) + AC_DEFINE([_LARGEFILE_SOURCE], [1], + [Define to 1 to make fseeko visible on some hosts (e.g. glibc 2.2).]) + ;; + esac +]) + # The following implementation works around a problem in autoconf <= 2.69; # AC_SYS_LARGEFILE does not configure for large inodes on Mac OS X 10.5, # or configures them incorrectly in some cases. @@ -56,7 +73,10 @@ # By default, many hosts won't let programs access large files; # one must use special compiler options to get large-file access to work. # For more details about this brain damage please see: -# http://www.unix-systems.org/version2/whatsnew/lfs20mar.html +# http://www.unix.org/version2/whatsnew/lfs20mar.html +# Additionally, on Linux file systems with 64-bit inodes a file that happens +# to have a 64-bit inode number cannot be accessed by 32-bit applications on +# Linux x86/x86_64. This can occur with file systems such as XFS and NFS. AC_DEFUN([AC_SYS_LARGEFILE], [AC_ARG_ENABLE(largefile, [ --disable-largefile omit support for large files]) @@ -93,9 +113,6 @@ [Define for large files, on AIX-style hosts.], [_AC_SYS_LARGEFILE_TEST_INCLUDES]) fi - - AC_DEFINE([_DARWIN_USE_64_BIT_INODE], [1], - [Enable large inode numbers on Mac OS X 10.5.]) fi ])# AC_SYS_LARGEFILE ])# m4_version_prereq 2.70 @@ -126,9 +143,24 @@ else WINDOWS_64_BIT_OFF_T=0 fi - dnl But all native Windows platforms (including mingw64) have a 32-bit - dnl st_size member in 'struct stat'. - WINDOWS_64_BIT_ST_SIZE=1 + dnl Some mingw versions define, if _FILE_OFFSET_BITS=64, 'struct stat' + dnl to 'struct _stat32i64' or 'struct _stat64' (depending on + dnl _USE_32BIT_TIME_T), which has a 32-bit st_size member. + AC_CACHE_CHECK([for 64-bit st_size], [gl_cv_member_st_size_64], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[#include <sys/types.h> + struct stat buf; + int verify_st_size_size[sizeof (buf.st_size) >= 8 ? 1 : -1]; + ]], + [[]])], + [gl_cv_member_st_size_64=yes], [gl_cv_member_st_size_64=no]) + ]) + if test $gl_cv_member_st_size_64 = no; then + WINDOWS_64_BIT_ST_SIZE=1 + else + WINDOWS_64_BIT_ST_SIZE=0 + fi ;; *) dnl Nothing to do on gnulib's side. diff -Nru gdb-9.1/gnulib/import/m4/lib-ld.m4 gdb-10.2/gnulib/import/m4/lib-ld.m4 --- gdb-9.1/gnulib/import/m4/lib-ld.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/lib-ld.m4 1970-01-01 00:00:00.000000000 +0000 @@ -1,119 +0,0 @@ -# lib-ld.m4 serial 6 -dnl Copyright (C) 1996-2003, 2009-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl Subroutines of libtool.m4, -dnl with replacements s/_*LT_PATH/AC_LIB_PROG/ and s/lt_/acl_/ to avoid -dnl collision with libtool.m4. - -dnl From libtool-2.4. Sets the variable with_gnu_ld to yes or no. -AC_DEFUN([AC_LIB_PROG_LD_GNU], -[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], [acl_cv_prog_gnu_ld], -[# I'd rather use --version here, but apparently some GNU lds only accept -v. -case `$LD -v 2>&1 </dev/null` in -*GNU* | *'with BFD'*) - acl_cv_prog_gnu_ld=yes - ;; -*) - acl_cv_prog_gnu_ld=no - ;; -esac]) -with_gnu_ld=$acl_cv_prog_gnu_ld -]) - -dnl From libtool-2.4. Sets the variable LD. -AC_DEFUN([AC_LIB_PROG_LD], -[AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([AC_CANONICAL_HOST])dnl - -AC_ARG_WITH([gnu-ld], - [AS_HELP_STRING([--with-gnu-ld], - [assume the C compiler uses GNU ld [default=no]])], - [test "$withval" = no || with_gnu_ld=yes], - [with_gnu_ld=no])dnl - -# Prepare PATH_SEPARATOR. -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which - # contains only /bin. Note that ksh looks also at the FPATH variable, - # so we have to set that as well for the test. - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ - && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ - || PATH_SEPARATOR=';' - } -fi - -ac_prog=ld -if test "$GCC" = yes; then - # Check if gcc -print-prog-name=ld gives a path. - AC_MSG_CHECKING([for ld used by $CC]) - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [[\\/]]* | ?:[[\\/]]*) - re_direlt='/[[^/]][[^/]]*/\.\./' - # Canonicalize the pathname of ld - ac_prog=`echo "$ac_prog"| sed 's%\\\\%/%g'` - while echo "$ac_prog" | grep "$re_direlt" > /dev/null 2>&1; do - ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` - done - test -z "$LD" && LD="$ac_prog" - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test "$with_gnu_ld" = yes; then - AC_MSG_CHECKING([for GNU ld]) -else - AC_MSG_CHECKING([for non-GNU ld]) -fi -AC_CACHE_VAL([acl_cv_path_LD], -[if test -z "$LD"; then - acl_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS="$acl_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - acl_cv_path_LD="$ac_dir/$ac_prog" - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some variants of GNU ld only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$acl_cv_path_LD" -v 2>&1 </dev/null` in - *GNU* | *'with BFD'*) - test "$with_gnu_ld" != no && break - ;; - *) - test "$with_gnu_ld" != yes && break - ;; - esac - fi - done - IFS="$acl_save_ifs" -else - acl_cv_path_LD="$LD" # Let the user override the test with a path. -fi]) -LD="$acl_cv_path_LD" -if test -n "$LD"; then - AC_MSG_RESULT([$LD]) -else - AC_MSG_RESULT([no]) -fi -test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH]) -AC_LIB_PROG_LD_GNU -]) diff -Nru gdb-9.1/gnulib/import/m4/lib-link.m4 gdb-10.2/gnulib/import/m4/lib-link.m4 --- gdb-9.1/gnulib/import/m4/lib-link.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/lib-link.m4 1970-01-01 00:00:00.000000000 +0000 @@ -1,777 +0,0 @@ -# lib-link.m4 serial 26 (gettext-0.18.2) -dnl Copyright (C) 2001-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Bruno Haible. - -AC_PREREQ([2.54]) - -dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and -dnl the libraries corresponding to explicit and implicit dependencies. -dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and -dnl augments the CPPFLAGS variable. -dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname -dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem. -AC_DEFUN([AC_LIB_LINKFLAGS], -[ - AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) - AC_REQUIRE([AC_LIB_RPATH]) - pushdef([Name],[m4_translit([$1],[./+-], [____])]) - pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-], - [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) - AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [ - AC_LIB_LINKFLAGS_BODY([$1], [$2]) - ac_cv_lib[]Name[]_libs="$LIB[]NAME" - ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME" - ac_cv_lib[]Name[]_cppflags="$INC[]NAME" - ac_cv_lib[]Name[]_prefix="$LIB[]NAME[]_PREFIX" - ]) - LIB[]NAME="$ac_cv_lib[]Name[]_libs" - LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs" - INC[]NAME="$ac_cv_lib[]Name[]_cppflags" - LIB[]NAME[]_PREFIX="$ac_cv_lib[]Name[]_prefix" - AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) - AC_SUBST([LIB]NAME) - AC_SUBST([LTLIB]NAME) - AC_SUBST([LIB]NAME[_PREFIX]) - dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the - dnl results of this search when this library appears as a dependency. - HAVE_LIB[]NAME=yes - popdef([NAME]) - popdef([Name]) -]) - -dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode, [missing-message]) -dnl searches for libname and the libraries corresponding to explicit and -dnl implicit dependencies, together with the specified include files and -dnl the ability to compile and link the specified testcode. The missing-message -dnl defaults to 'no' and may contain additional hints for the user. -dnl If found, it sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} -dnl and LTLIB${NAME} variables and augments the CPPFLAGS variable, and -dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs -dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty. -dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname -dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem. -AC_DEFUN([AC_LIB_HAVE_LINKFLAGS], -[ - AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) - AC_REQUIRE([AC_LIB_RPATH]) - pushdef([Name],[m4_translit([$1],[./+-], [____])]) - pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-], - [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) - - dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME - dnl accordingly. - AC_LIB_LINKFLAGS_BODY([$1], [$2]) - - dnl Add $INC[]NAME to CPPFLAGS before performing the following checks, - dnl because if the user has installed lib[]Name and not disabled its use - dnl via --without-lib[]Name-prefix, he wants to use it. - ac_save_CPPFLAGS="$CPPFLAGS" - AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) - - AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [ - ac_save_LIBS="$LIBS" - dnl If $LIB[]NAME contains some -l options, add it to the end of LIBS, - dnl because these -l options might require -L options that are present in - dnl LIBS. -l options benefit only from the -L options listed before it. - dnl Otherwise, add it to the front of LIBS, because it may be a static - dnl library that depends on another static library that is present in LIBS. - dnl Static libraries benefit only from the static libraries listed after - dnl it. - case " $LIB[]NAME" in - *" -l"*) LIBS="$LIBS $LIB[]NAME" ;; - *) LIBS="$LIB[]NAME $LIBS" ;; - esac - AC_LINK_IFELSE( - [AC_LANG_PROGRAM([[$3]], [[$4]])], - [ac_cv_lib[]Name=yes], - [ac_cv_lib[]Name='m4_if([$5], [], [no], [[$5]])']) - LIBS="$ac_save_LIBS" - ]) - if test "$ac_cv_lib[]Name" = yes; then - HAVE_LIB[]NAME=yes - AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the lib][$1 library.]) - AC_MSG_CHECKING([how to link with lib[]$1]) - AC_MSG_RESULT([$LIB[]NAME]) - else - HAVE_LIB[]NAME=no - dnl If $LIB[]NAME didn't lead to a usable library, we don't need - dnl $INC[]NAME either. - CPPFLAGS="$ac_save_CPPFLAGS" - LIB[]NAME= - LTLIB[]NAME= - LIB[]NAME[]_PREFIX= - fi - AC_SUBST([HAVE_LIB]NAME) - AC_SUBST([LIB]NAME) - AC_SUBST([LTLIB]NAME) - AC_SUBST([LIB]NAME[_PREFIX]) - popdef([NAME]) - popdef([Name]) -]) - -dnl Determine the platform dependent parameters needed to use rpath: -dnl acl_libext, -dnl acl_shlibext, -dnl acl_libname_spec, -dnl acl_library_names_spec, -dnl acl_hardcode_libdir_flag_spec, -dnl acl_hardcode_libdir_separator, -dnl acl_hardcode_direct, -dnl acl_hardcode_minus_L. -AC_DEFUN([AC_LIB_RPATH], -[ - dnl Tell automake >= 1.10 to complain if config.rpath is missing. - m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([config.rpath])]) - AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS - AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld - AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host - AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir - AC_CACHE_CHECK([for shared library run path origin], [acl_cv_rpath], [ - CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ - ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh - . ./conftest.sh - rm -f ./conftest.sh - acl_cv_rpath=done - ]) - wl="$acl_cv_wl" - acl_libext="$acl_cv_libext" - acl_shlibext="$acl_cv_shlibext" - acl_libname_spec="$acl_cv_libname_spec" - acl_library_names_spec="$acl_cv_library_names_spec" - acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" - acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" - acl_hardcode_direct="$acl_cv_hardcode_direct" - acl_hardcode_minus_L="$acl_cv_hardcode_minus_L" - dnl Determine whether the user wants rpath handling at all. - AC_ARG_ENABLE([rpath], - [ --disable-rpath do not hardcode runtime library paths], - :, enable_rpath=yes) -]) - -dnl AC_LIB_FROMPACKAGE(name, package) -dnl declares that libname comes from the given package. The configure file -dnl will then not have a --with-libname-prefix option but a -dnl --with-package-prefix option. Several libraries can come from the same -dnl package. This declaration must occur before an AC_LIB_LINKFLAGS or similar -dnl macro call that searches for libname. -AC_DEFUN([AC_LIB_FROMPACKAGE], -[ - pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-], - [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) - define([acl_frompackage_]NAME, [$2]) - popdef([NAME]) - pushdef([PACK],[$2]) - pushdef([PACKUP],[m4_translit(PACK,[abcdefghijklmnopqrstuvwxyz./+-], - [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) - define([acl_libsinpackage_]PACKUP, - m4_ifdef([acl_libsinpackage_]PACKUP, [m4_defn([acl_libsinpackage_]PACKUP)[, ]],)[lib$1]) - popdef([PACKUP]) - popdef([PACK]) -]) - -dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and -dnl the libraries corresponding to explicit and implicit dependencies. -dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables. -dnl Also, sets the LIB${NAME}_PREFIX variable to nonempty if libname was found -dnl in ${LIB${NAME}_PREFIX}/$acl_libdirstem. -AC_DEFUN([AC_LIB_LINKFLAGS_BODY], -[ - AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) - pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-], - [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) - pushdef([PACK],[m4_ifdef([acl_frompackage_]NAME, [acl_frompackage_]NAME, lib[$1])]) - pushdef([PACKUP],[m4_translit(PACK,[abcdefghijklmnopqrstuvwxyz./+-], - [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) - pushdef([PACKLIBS],[m4_ifdef([acl_frompackage_]NAME, [acl_libsinpackage_]PACKUP, lib[$1])]) - dnl Autoconf >= 2.61 supports dots in --with options. - pushdef([P_A_C_K],[m4_if(m4_version_compare(m4_defn([m4_PACKAGE_VERSION]),[2.61]),[-1],[m4_translit(PACK,[.],[_])],PACK)]) - dnl By default, look in $includedir and $libdir. - use_additional=yes - AC_LIB_WITH_FINAL_PREFIX([ - eval additional_includedir=\"$includedir\" - eval additional_libdir=\"$libdir\" - ]) - AC_ARG_WITH(P_A_C_K[-prefix], -[[ --with-]]P_A_C_K[[-prefix[=DIR] search for ]PACKLIBS[ in DIR/include and DIR/lib - --without-]]P_A_C_K[[-prefix don't search for ]PACKLIBS[ in includedir and libdir]], -[ - if test "X$withval" = "Xno"; then - use_additional=no - else - if test "X$withval" = "X"; then - AC_LIB_WITH_FINAL_PREFIX([ - eval additional_includedir=\"$includedir\" - eval additional_libdir=\"$libdir\" - ]) - else - additional_includedir="$withval/include" - additional_libdir="$withval/$acl_libdirstem" - if test "$acl_libdirstem2" != "$acl_libdirstem" \ - && ! test -d "$withval/$acl_libdirstem"; then - additional_libdir="$withval/$acl_libdirstem2" - fi - fi - fi -]) - dnl Search the library and its dependencies in $additional_libdir and - dnl $LDFLAGS. Using breadth-first-seach. - LIB[]NAME= - LTLIB[]NAME= - INC[]NAME= - LIB[]NAME[]_PREFIX= - dnl HAVE_LIB${NAME} is an indicator that LIB${NAME}, LTLIB${NAME} have been - dnl computed. So it has to be reset here. - HAVE_LIB[]NAME= - rpathdirs= - ltrpathdirs= - names_already_handled= - names_next_round='$1 $2' - while test -n "$names_next_round"; do - names_this_round="$names_next_round" - names_next_round= - for name in $names_this_round; do - already_handled= - for n in $names_already_handled; do - if test "$n" = "$name"; then - already_handled=yes - break - fi - done - if test -z "$already_handled"; then - names_already_handled="$names_already_handled $name" - dnl See if it was already located by an earlier AC_LIB_LINKFLAGS - dnl or AC_LIB_HAVE_LINKFLAGS call. - uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'` - eval value=\"\$HAVE_LIB$uppername\" - if test -n "$value"; then - if test "$value" = yes; then - eval value=\"\$LIB$uppername\" - test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value" - eval value=\"\$LTLIB$uppername\" - test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value" - else - dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined - dnl that this library doesn't exist. So just drop it. - : - fi - else - dnl Search the library lib$name in $additional_libdir and $LDFLAGS - dnl and the already constructed $LIBNAME/$LTLIBNAME. - found_dir= - found_la= - found_so= - found_a= - eval libname=\"$acl_libname_spec\" # typically: libname=lib$name - if test -n "$acl_shlibext"; then - shrext=".$acl_shlibext" # typically: shrext=.so - else - shrext= - fi - if test $use_additional = yes; then - dir="$additional_libdir" - dnl The same code as in the loop below: - dnl First look for a shared library. - if test -n "$acl_shlibext"; then - if test -f "$dir/$libname$shrext"; then - found_dir="$dir" - found_so="$dir/$libname$shrext" - else - if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then - ver=`(cd "$dir" && \ - for f in "$libname$shrext".*; do echo "$f"; done \ - | sed -e "s,^$libname$shrext\\\\.,," \ - | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ - | sed 1q ) 2>/dev/null` - if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then - found_dir="$dir" - found_so="$dir/$libname$shrext.$ver" - fi - else - eval library_names=\"$acl_library_names_spec\" - for f in $library_names; do - if test -f "$dir/$f"; then - found_dir="$dir" - found_so="$dir/$f" - break - fi - done - fi - fi - fi - dnl Then look for a static library. - if test "X$found_dir" = "X"; then - if test -f "$dir/$libname.$acl_libext"; then - found_dir="$dir" - found_a="$dir/$libname.$acl_libext" - fi - fi - if test "X$found_dir" != "X"; then - if test -f "$dir/$libname.la"; then - found_la="$dir/$libname.la" - fi - fi - fi - if test "X$found_dir" = "X"; then - for x in $LDFLAGS $LTLIB[]NAME; do - AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) - case "$x" in - -L*) - dir=`echo "X$x" | sed -e 's/^X-L//'` - dnl First look for a shared library. - if test -n "$acl_shlibext"; then - if test -f "$dir/$libname$shrext"; then - found_dir="$dir" - found_so="$dir/$libname$shrext" - else - if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then - ver=`(cd "$dir" && \ - for f in "$libname$shrext".*; do echo "$f"; done \ - | sed -e "s,^$libname$shrext\\\\.,," \ - | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ - | sed 1q ) 2>/dev/null` - if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then - found_dir="$dir" - found_so="$dir/$libname$shrext.$ver" - fi - else - eval library_names=\"$acl_library_names_spec\" - for f in $library_names; do - if test -f "$dir/$f"; then - found_dir="$dir" - found_so="$dir/$f" - break - fi - done - fi - fi - fi - dnl Then look for a static library. - if test "X$found_dir" = "X"; then - if test -f "$dir/$libname.$acl_libext"; then - found_dir="$dir" - found_a="$dir/$libname.$acl_libext" - fi - fi - if test "X$found_dir" != "X"; then - if test -f "$dir/$libname.la"; then - found_la="$dir/$libname.la" - fi - fi - ;; - esac - if test "X$found_dir" != "X"; then - break - fi - done - fi - if test "X$found_dir" != "X"; then - dnl Found the library. - LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name" - if test "X$found_so" != "X"; then - dnl Linking with a shared library. We attempt to hardcode its - dnl directory into the executable's runpath, unless it's the - dnl standard /usr/lib. - if test "$enable_rpath" = no \ - || test "X$found_dir" = "X/usr/$acl_libdirstem" \ - || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then - dnl No hardcoding is needed. - LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" - else - dnl Use an explicit option to hardcode DIR into the resulting - dnl binary. - dnl Potentially add DIR to ltrpathdirs. - dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. - haveit= - for x in $ltrpathdirs; do - if test "X$x" = "X$found_dir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - ltrpathdirs="$ltrpathdirs $found_dir" - fi - dnl The hardcoding into $LIBNAME is system dependent. - if test "$acl_hardcode_direct" = yes; then - dnl Using DIR/libNAME.so during linking hardcodes DIR into the - dnl resulting binary. - LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" - else - if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then - dnl Use an explicit option to hardcode DIR into the resulting - dnl binary. - LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" - dnl Potentially add DIR to rpathdirs. - dnl The rpathdirs will be appended to $LIBNAME at the end. - haveit= - for x in $rpathdirs; do - if test "X$x" = "X$found_dir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - rpathdirs="$rpathdirs $found_dir" - fi - else - dnl Rely on "-L$found_dir". - dnl But don't add it if it's already contained in the LDFLAGS - dnl or the already constructed $LIBNAME - haveit= - for x in $LDFLAGS $LIB[]NAME; do - AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) - if test "X$x" = "X-L$found_dir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir" - fi - if test "$acl_hardcode_minus_L" != no; then - dnl FIXME: Not sure whether we should use - dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" - dnl here. - LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" - else - dnl We cannot use $acl_hardcode_runpath_var and LD_RUN_PATH - dnl here, because this doesn't fit in flags passed to the - dnl compiler. So give up. No hardcoding. This affects only - dnl very old systems. - dnl FIXME: Not sure whether we should use - dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" - dnl here. - LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" - fi - fi - fi - fi - else - if test "X$found_a" != "X"; then - dnl Linking with a static library. - LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a" - else - dnl We shouldn't come here, but anyway it's good to have a - dnl fallback. - LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name" - fi - fi - dnl Assume the include files are nearby. - additional_includedir= - case "$found_dir" in - */$acl_libdirstem | */$acl_libdirstem/) - basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` - if test "$name" = '$1'; then - LIB[]NAME[]_PREFIX="$basedir" - fi - additional_includedir="$basedir/include" - ;; - */$acl_libdirstem2 | */$acl_libdirstem2/) - basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` - if test "$name" = '$1'; then - LIB[]NAME[]_PREFIX="$basedir" - fi - additional_includedir="$basedir/include" - ;; - esac - if test "X$additional_includedir" != "X"; then - dnl Potentially add $additional_includedir to $INCNAME. - dnl But don't add it - dnl 1. if it's the standard /usr/include, - dnl 2. if it's /usr/local/include and we are using GCC on Linux, - dnl 3. if it's already present in $CPPFLAGS or the already - dnl constructed $INCNAME, - dnl 4. if it doesn't exist as a directory. - if test "X$additional_includedir" != "X/usr/include"; then - haveit= - if test "X$additional_includedir" = "X/usr/local/include"; then - if test -n "$GCC"; then - case $host_os in - linux* | gnu* | k*bsd*-gnu) haveit=yes;; - esac - fi - fi - if test -z "$haveit"; then - for x in $CPPFLAGS $INC[]NAME; do - AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) - if test "X$x" = "X-I$additional_includedir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - if test -d "$additional_includedir"; then - dnl Really add $additional_includedir to $INCNAME. - INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir" - fi - fi - fi - fi - fi - dnl Look for dependencies. - if test -n "$found_la"; then - dnl Read the .la file. It defines the variables - dnl dlname, library_names, old_library, dependency_libs, current, - dnl age, revision, installed, dlopen, dlpreopen, libdir. - save_libdir="$libdir" - case "$found_la" in - */* | *\\*) . "$found_la" ;; - *) . "./$found_la" ;; - esac - libdir="$save_libdir" - dnl We use only dependency_libs. - for dep in $dependency_libs; do - case "$dep" in - -L*) - additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` - dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME. - dnl But don't add it - dnl 1. if it's the standard /usr/lib, - dnl 2. if it's /usr/local/lib and we are using GCC on Linux, - dnl 3. if it's already present in $LDFLAGS or the already - dnl constructed $LIBNAME, - dnl 4. if it doesn't exist as a directory. - if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \ - && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then - haveit= - if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ - || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then - if test -n "$GCC"; then - case $host_os in - linux* | gnu* | k*bsd*-gnu) haveit=yes;; - esac - fi - fi - if test -z "$haveit"; then - haveit= - for x in $LDFLAGS $LIB[]NAME; do - AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) - if test "X$x" = "X-L$additional_libdir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - if test -d "$additional_libdir"; then - dnl Really add $additional_libdir to $LIBNAME. - LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir" - fi - fi - haveit= - for x in $LDFLAGS $LTLIB[]NAME; do - AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) - if test "X$x" = "X-L$additional_libdir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - if test -d "$additional_libdir"; then - dnl Really add $additional_libdir to $LTLIBNAME. - LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir" - fi - fi - fi - fi - ;; - -R*) - dir=`echo "X$dep" | sed -e 's/^X-R//'` - if test "$enable_rpath" != no; then - dnl Potentially add DIR to rpathdirs. - dnl The rpathdirs will be appended to $LIBNAME at the end. - haveit= - for x in $rpathdirs; do - if test "X$x" = "X$dir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - rpathdirs="$rpathdirs $dir" - fi - dnl Potentially add DIR to ltrpathdirs. - dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. - haveit= - for x in $ltrpathdirs; do - if test "X$x" = "X$dir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - ltrpathdirs="$ltrpathdirs $dir" - fi - fi - ;; - -l*) - dnl Handle this in the next round. - names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` - ;; - *.la) - dnl Handle this in the next round. Throw away the .la's - dnl directory; it is already contained in a preceding -L - dnl option. - names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` - ;; - *) - dnl Most likely an immediate library name. - LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep" - LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep" - ;; - esac - done - fi - else - dnl Didn't find the library; assume it is in the system directories - dnl known to the linker and runtime loader. (All the system - dnl directories known to the linker should also be known to the - dnl runtime loader, otherwise the system is severely misconfigured.) - LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" - LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name" - fi - fi - fi - done - done - if test "X$rpathdirs" != "X"; then - if test -n "$acl_hardcode_libdir_separator"; then - dnl Weird platform: only the last -rpath option counts, the user must - dnl pass all path elements in one option. We can arrange that for a - dnl single library, but not when more than one $LIBNAMEs are used. - alldirs= - for found_dir in $rpathdirs; do - alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" - done - dnl Note: acl_hardcode_libdir_flag_spec uses $libdir and $wl. - acl_save_libdir="$libdir" - libdir="$alldirs" - eval flag=\"$acl_hardcode_libdir_flag_spec\" - libdir="$acl_save_libdir" - LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" - else - dnl The -rpath options are cumulative. - for found_dir in $rpathdirs; do - acl_save_libdir="$libdir" - libdir="$found_dir" - eval flag=\"$acl_hardcode_libdir_flag_spec\" - libdir="$acl_save_libdir" - LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" - done - fi - fi - if test "X$ltrpathdirs" != "X"; then - dnl When using libtool, the option that works for both libraries and - dnl executables is -R. The -R options are cumulative. - for found_dir in $ltrpathdirs; do - LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir" - done - fi - popdef([P_A_C_K]) - popdef([PACKLIBS]) - popdef([PACKUP]) - popdef([PACK]) - popdef([NAME]) -]) - -dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR, -dnl unless already present in VAR. -dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes -dnl contains two or three consecutive elements that belong together. -AC_DEFUN([AC_LIB_APPENDTOVAR], -[ - for element in [$2]; do - haveit= - for x in $[$1]; do - AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) - if test "X$x" = "X$element"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - [$1]="${[$1]}${[$1]:+ }$element" - fi - done -]) - -dnl For those cases where a variable contains several -L and -l options -dnl referring to unknown libraries and directories, this macro determines the -dnl necessary additional linker options for the runtime path. -dnl AC_LIB_LINKFLAGS_FROM_LIBS([LDADDVAR], [LIBSVALUE], [USE-LIBTOOL]) -dnl sets LDADDVAR to linker options needed together with LIBSVALUE. -dnl If USE-LIBTOOL evaluates to non-empty, linking with libtool is assumed, -dnl otherwise linking without libtool is assumed. -AC_DEFUN([AC_LIB_LINKFLAGS_FROM_LIBS], -[ - AC_REQUIRE([AC_LIB_RPATH]) - AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) - $1= - if test "$enable_rpath" != no; then - if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then - dnl Use an explicit option to hardcode directories into the resulting - dnl binary. - rpathdirs= - next= - for opt in $2; do - if test -n "$next"; then - dir="$next" - dnl No need to hardcode the standard /usr/lib. - if test "X$dir" != "X/usr/$acl_libdirstem" \ - && test "X$dir" != "X/usr/$acl_libdirstem2"; then - rpathdirs="$rpathdirs $dir" - fi - next= - else - case $opt in - -L) next=yes ;; - -L*) dir=`echo "X$opt" | sed -e 's,^X-L,,'` - dnl No need to hardcode the standard /usr/lib. - if test "X$dir" != "X/usr/$acl_libdirstem" \ - && test "X$dir" != "X/usr/$acl_libdirstem2"; then - rpathdirs="$rpathdirs $dir" - fi - next= ;; - *) next= ;; - esac - fi - done - if test "X$rpathdirs" != "X"; then - if test -n ""$3""; then - dnl libtool is used for linking. Use -R options. - for dir in $rpathdirs; do - $1="${$1}${$1:+ }-R$dir" - done - else - dnl The linker is used for linking directly. - if test -n "$acl_hardcode_libdir_separator"; then - dnl Weird platform: only the last -rpath option counts, the user - dnl must pass all path elements in one option. - alldirs= - for dir in $rpathdirs; do - alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$dir" - done - acl_save_libdir="$libdir" - libdir="$alldirs" - eval flag=\"$acl_hardcode_libdir_flag_spec\" - libdir="$acl_save_libdir" - $1="$flag" - else - dnl The -rpath options are cumulative. - for dir in $rpathdirs; do - acl_save_libdir="$libdir" - libdir="$dir" - eval flag=\"$acl_hardcode_libdir_flag_spec\" - libdir="$acl_save_libdir" - $1="${$1}${$1:+ }$flag" - done - fi - fi - fi - fi - fi - AC_SUBST([$1]) -]) diff -Nru gdb-9.1/gnulib/import/m4/lib-prefix.m4 gdb-10.2/gnulib/import/m4/lib-prefix.m4 --- gdb-9.1/gnulib/import/m4/lib-prefix.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/lib-prefix.m4 1970-01-01 00:00:00.000000000 +0000 @@ -1,224 +0,0 @@ -# lib-prefix.m4 serial 7 (gettext-0.18) -dnl Copyright (C) 2001-2005, 2008-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Bruno Haible. - -dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and -dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't -dnl require excessive bracketing. -ifdef([AC_HELP_STRING], -[AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])], -[AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])]) - -dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed -dnl to access previously installed libraries. The basic assumption is that -dnl a user will want packages to use other packages he previously installed -dnl with the same --prefix option. -dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate -dnl libraries, but is otherwise very convenient. -AC_DEFUN([AC_LIB_PREFIX], -[ - AC_BEFORE([$0], [AC_LIB_LINKFLAGS]) - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([AC_CANONICAL_HOST]) - AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) - AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) - dnl By default, look in $includedir and $libdir. - use_additional=yes - AC_LIB_WITH_FINAL_PREFIX([ - eval additional_includedir=\"$includedir\" - eval additional_libdir=\"$libdir\" - ]) - AC_LIB_ARG_WITH([lib-prefix], -[ --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib - --without-lib-prefix don't search for libraries in includedir and libdir], -[ - if test "X$withval" = "Xno"; then - use_additional=no - else - if test "X$withval" = "X"; then - AC_LIB_WITH_FINAL_PREFIX([ - eval additional_includedir=\"$includedir\" - eval additional_libdir=\"$libdir\" - ]) - else - additional_includedir="$withval/include" - additional_libdir="$withval/$acl_libdirstem" - fi - fi -]) - if test $use_additional = yes; then - dnl Potentially add $additional_includedir to $CPPFLAGS. - dnl But don't add it - dnl 1. if it's the standard /usr/include, - dnl 2. if it's already present in $CPPFLAGS, - dnl 3. if it's /usr/local/include and we are using GCC on Linux, - dnl 4. if it doesn't exist as a directory. - if test "X$additional_includedir" != "X/usr/include"; then - haveit= - for x in $CPPFLAGS; do - AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) - if test "X$x" = "X-I$additional_includedir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - if test "X$additional_includedir" = "X/usr/local/include"; then - if test -n "$GCC"; then - case $host_os in - linux* | gnu* | k*bsd*-gnu) haveit=yes;; - esac - fi - fi - if test -z "$haveit"; then - if test -d "$additional_includedir"; then - dnl Really add $additional_includedir to $CPPFLAGS. - CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir" - fi - fi - fi - fi - dnl Potentially add $additional_libdir to $LDFLAGS. - dnl But don't add it - dnl 1. if it's the standard /usr/lib, - dnl 2. if it's already present in $LDFLAGS, - dnl 3. if it's /usr/local/lib and we are using GCC on Linux, - dnl 4. if it doesn't exist as a directory. - if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then - haveit= - for x in $LDFLAGS; do - AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) - if test "X$x" = "X-L$additional_libdir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then - if test -n "$GCC"; then - case $host_os in - linux*) haveit=yes;; - esac - fi - fi - if test -z "$haveit"; then - if test -d "$additional_libdir"; then - dnl Really add $additional_libdir to $LDFLAGS. - LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir" - fi - fi - fi - fi - fi -]) - -dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix, -dnl acl_final_exec_prefix, containing the values to which $prefix and -dnl $exec_prefix will expand at the end of the configure script. -AC_DEFUN([AC_LIB_PREPARE_PREFIX], -[ - dnl Unfortunately, prefix and exec_prefix get only finally determined - dnl at the end of configure. - if test "X$prefix" = "XNONE"; then - acl_final_prefix="$ac_default_prefix" - else - acl_final_prefix="$prefix" - fi - if test "X$exec_prefix" = "XNONE"; then - acl_final_exec_prefix='${prefix}' - else - acl_final_exec_prefix="$exec_prefix" - fi - acl_save_prefix="$prefix" - prefix="$acl_final_prefix" - eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" - prefix="$acl_save_prefix" -]) - -dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the -dnl variables prefix and exec_prefix bound to the values they will have -dnl at the end of the configure script. -AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX], -[ - acl_save_prefix="$prefix" - prefix="$acl_final_prefix" - acl_save_exec_prefix="$exec_prefix" - exec_prefix="$acl_final_exec_prefix" - $1 - exec_prefix="$acl_save_exec_prefix" - prefix="$acl_save_prefix" -]) - -dnl AC_LIB_PREPARE_MULTILIB creates -dnl - a variable acl_libdirstem, containing the basename of the libdir, either -dnl "lib" or "lib64" or "lib/64", -dnl - a variable acl_libdirstem2, as a secondary possible value for -dnl acl_libdirstem, either the same as acl_libdirstem or "lib/sparcv9" or -dnl "lib/amd64". -AC_DEFUN([AC_LIB_PREPARE_MULTILIB], -[ - dnl There is no formal standard regarding lib and lib64. - dnl On glibc systems, the current practice is that on a system supporting - dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under - dnl $prefix/lib64 and 32-bit libraries go under $prefix/lib. We determine - dnl the compiler's default mode by looking at the compiler's library search - dnl path. If at least one of its elements ends in /lib64 or points to a - dnl directory whose absolute pathname ends in /lib64, we assume a 64-bit ABI. - dnl Otherwise we use the default, namely "lib". - dnl On Solaris systems, the current practice is that on a system supporting - dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under - dnl $prefix/lib/64 (which is a symlink to either $prefix/lib/sparcv9 or - dnl $prefix/lib/amd64) and 32-bit libraries go under $prefix/lib. - AC_REQUIRE([AC_CANONICAL_HOST]) - acl_libdirstem=lib - acl_libdirstem2= - case "$host_os" in - solaris*) - dnl See Solaris 10 Software Developer Collection > Solaris 64-bit Developer's Guide > The Development Environment - dnl <http://docs.sun.com/app/docs/doc/816-5138/dev-env?l=en&a=view>. - dnl "Portable Makefiles should refer to any library directories using the 64 symbolic link." - dnl But we want to recognize the sparcv9 or amd64 subdirectory also if the - dnl symlink is missing, so we set acl_libdirstem2 too. - AC_CACHE_CHECK([for 64-bit host], [gl_cv_solaris_64bit], - [AC_EGREP_CPP([sixtyfour bits], [ -#ifdef _LP64 -sixtyfour bits -#endif - ], [gl_cv_solaris_64bit=yes], [gl_cv_solaris_64bit=no]) - ]) - if test $gl_cv_solaris_64bit = yes; then - acl_libdirstem=lib/64 - case "$host_cpu" in - sparc*) acl_libdirstem2=lib/sparcv9 ;; - i*86 | x86_64) acl_libdirstem2=lib/amd64 ;; - esac - fi - ;; - *) - searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` - if test -n "$searchpath"; then - acl_save_IFS="${IFS= }"; IFS=":" - for searchdir in $searchpath; do - if test -d "$searchdir"; then - case "$searchdir" in - */lib64/ | */lib64 ) acl_libdirstem=lib64 ;; - */../ | */.. ) - # Better ignore directories of this form. They are misleading. - ;; - *) searchdir=`cd "$searchdir" && pwd` - case "$searchdir" in - */lib64 ) acl_libdirstem=lib64 ;; - esac ;; - esac - fi - done - IFS="$acl_save_IFS" - fi - ;; - esac - test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem" -]) diff -Nru gdb-9.1/gnulib/import/m4/limits-h.m4 gdb-10.2/gnulib/import/m4/limits-h.m4 --- gdb-9.1/gnulib/import/m4/limits-h.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/limits-h.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ dnl Check whether limits.h has needed features. -dnl Copyright 2016 Free Software Foundation, Inc. +dnl Copyright 2016-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -11,14 +11,18 @@ [ gl_CHECK_NEXT_HEADERS([limits.h]) - AC_CACHE_CHECK([whether limits.h has ULLONG_WIDTH etc.], + AC_CACHE_CHECK([whether limits.h has LLONG_MAX, WORD_BIT, ULLONG_WIDTH etc.], [gl_cv_header_limits_width], [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM([[#ifndef __STDC_WANT_IEC_60559_BFP_EXT__ - #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 - #endif - #include <limits.h> - int ullw = ULLONG_WIDTH;]])], + [AC_LANG_PROGRAM( + [[#ifndef __STDC_WANT_IEC_60559_BFP_EXT__ + #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 + #endif + #include <limits.h> + long long llm = LLONG_MAX; + int wb = WORD_BIT; + int ullw = ULLONG_WIDTH; + ]])], [gl_cv_header_limits_width=yes], [gl_cv_header_limits_width=no])]) if test "$gl_cv_header_limits_width" = yes; then @@ -29,3 +33,11 @@ AC_SUBST([LIMITS_H]) AM_CONDITIONAL([GL_GENERATE_LIMITS_H], [test -n "$LIMITS_H"]) ]) + +dnl Unconditionally enables the replacement of <limits.h>. +AC_DEFUN([gl_REPLACE_LIMITS_H], +[ + AC_REQUIRE([gl_LIMITS_H]) + LIMITS_H='limits.h' + AM_CONDITIONAL([GL_GENERATE_LIMITS_H], [test -n "$LIMITS_H"]) +]) diff -Nru gdb-9.1/gnulib/import/m4/localcharset.m4 gdb-10.2/gnulib/import/m4/localcharset.m4 --- gdb-9.1/gnulib/import/m4/localcharset.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/localcharset.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ -# localcharset.m4 serial 7 -dnl Copyright (C) 2002, 2004, 2006, 2009-2016 Free Software Foundation, Inc. +# localcharset.m4 serial 8 +dnl Copyright (C) 2002, 2004, 2006, 2009-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -8,10 +8,4 @@ [ dnl Prerequisites of lib/localcharset.c. AC_REQUIRE([AM_LANGINFO_CODESET]) - AC_REQUIRE([gl_FCNTL_O_FLAGS]) - AC_CHECK_DECLS_ONCE([getc_unlocked]) - - dnl Prerequisites of the lib/Makefile.am snippet. - AC_REQUIRE([AC_CANONICAL_HOST]) - AC_REQUIRE([gl_GLIBC21]) ]) diff -Nru gdb-9.1/gnulib/import/m4/locale-fr.m4 gdb-10.2/gnulib/import/m4/locale-fr.m4 --- gdb-9.1/gnulib/import/m4/locale-fr.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/locale-fr.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ -# locale-fr.m4 serial 17 -dnl Copyright (C) 2003, 2005-2016 Free Software Foundation, Inc. +# locale-fr.m4 serial 19 +dnl Copyright (C) 2003, 2005-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -24,8 +24,14 @@ struct tm t; char buf[16]; int main () { + /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl + imitates locale dependent behaviour by looking at the environment + variables, and all locales use the UTF-8 encoding. */ +#if defined __BEOS__ || defined __HAIKU__ + return 1; +#else /* Check whether the given locale name is recognized by the system. */ -#if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__ +# if defined _WIN32 && !defined __CYGWIN__ /* On native Windows, setlocale(category, "") looks at the system settings, not at the environment variables. Also, when an encoding suffix such as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE @@ -33,9 +39,9 @@ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) return 1; -#else +# else if (setlocale (LC_ALL, "") == NULL) return 1; -#endif +# endif /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) is empty, and the behaviour of Tcl 8.4 in this locale is not useful. @@ -44,32 +50,33 @@ some unit tests fail. On MirBSD 10, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "UTF-8". */ -#if HAVE_LANGINFO_CODESET +# if HAVE_LANGINFO_CODESET { const char *cs = nl_langinfo (CODESET); if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0 || strcmp (cs, "UTF-8") == 0) return 1; } -#endif -#ifdef __CYGWIN__ +# endif +# ifdef __CYGWIN__ /* On Cygwin, avoid locale names without encoding suffix, because the locale_charset() function relies on the encoding suffix. Note that LC_ALL is set on the command line. */ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; -#endif +# endif /* Check whether in the abbreviation of the second month, the second character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is only one byte long. This excludes the UTF-8 encoding. */ t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; if (strftime (buf, sizeof (buf), "%b", &t) < 3 || buf[2] != 'v') return 1; -#if !defined __BIONIC__ /* Bionic libc's 'struct lconv' is just a dummy. */ +# if !defined __BIONIC__ /* Bionic libc's 'struct lconv' is just a dummy. */ /* Check whether the decimal separator is a comma. On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point are nl_langinfo(RADIXCHAR) are both ".". */ if (localeconv () ->decimal_point[0] != ',') return 1; -#endif +# endif return 0; +#endif } changequote([,])dnl ])]) @@ -153,7 +160,7 @@ variables, and all locales use the UTF-8 encoding. */ #if !(defined __BEOS__ || defined __HAIKU__) /* Check whether the given locale name is recognized by the system. */ -# if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__ +# if defined _WIN32 && !defined __CYGWIN__ /* On native Windows, setlocale(category, "") looks at the system settings, not at the environment variables. Also, when an encoding suffix such as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE diff -Nru gdb-9.1/gnulib/import/m4/locale_h.m4 gdb-10.2/gnulib/import/m4/locale_h.m4 --- gdb-9.1/gnulib/import/m4/locale_h.m4 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/locale_h.m4 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,158 @@ +# locale_h.m4 serial 24 +dnl Copyright (C) 2007, 2009-2020 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_LOCALE_H], +[ + dnl Use AC_REQUIRE here, so that the default behavior below is expanded + dnl once only, before all statements that occur in other macros. + AC_REQUIRE([gl_LOCALE_H_DEFAULTS]) + + dnl Persuade glibc <locale.h> to define locale_t and the int_p_*, int_n_* + dnl members of 'struct lconv'. + AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) + + dnl If <stddef.h> is replaced, then <locale.h> must also be replaced. + AC_REQUIRE([gl_STDDEF_H]) + + AC_REQUIRE([gl_LOCALE_T]) + + dnl Solaris 11.0 defines the int_p_*, int_n_* members of 'struct lconv' + dnl only if _LCONV_C99 is defined. + AC_REQUIRE([AC_CANONICAL_HOST]) + case "$host_os" in + solaris*) + AC_DEFINE([_LCONV_C99], [1], [Define to 1 on Solaris.]) + ;; + esac + + AC_CACHE_CHECK([whether locale.h conforms to POSIX:2001], + [gl_cv_header_locale_h_posix2001], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[#include <locale.h> + int x = LC_MESSAGES; + int y = sizeof (((struct lconv *) 0)->decimal_point);]], + [[]])], + [gl_cv_header_locale_h_posix2001=yes], + [gl_cv_header_locale_h_posix2001=no])]) + + dnl Check whether 'struct lconv' is complete. + dnl Bionic libc's 'struct lconv' is just a dummy. + dnl On OpenBSD 4.9, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 9, Cygwin 1.5.x, + dnl mingw, MSVC 9, it lacks the int_p_* and int_n_* members. + AC_CACHE_CHECK([whether struct lconv is properly defined], + [gl_cv_sys_struct_lconv_ok], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[#include <locale.h> + struct lconv l; + int x = sizeof (l.decimal_point); + int y = sizeof (l.int_p_cs_precedes);]], + [[]])], + [gl_cv_sys_struct_lconv_ok=yes], + [gl_cv_sys_struct_lconv_ok=no]) + ]) + if test $gl_cv_sys_struct_lconv_ok = no; then + dnl On native Windows with MSVC, merely define these member names as macros. + dnl This avoids trouble in C++ mode. + case "$host_os" in + mingw*) + AC_EGREP_CPP([Special], [ +#ifdef _MSC_VER + Special +#endif + ], + [], + [REPLACE_STRUCT_LCONV=1]) + ;; + *) REPLACE_STRUCT_LCONV=1 ;; + esac + fi + + dnl <locale.h> is always overridden, because of GNULIB_POSIXCHECK. + gl_NEXT_HEADERS([locale.h]) + + dnl Check for declarations of anything we want to poison if the + dnl corresponding gnulib module is not in use. + gl_WARN_ON_USE_PREPARE([[#include <locale.h> +/* Some systems provide declarations in a non-standard header. */ +#if HAVE_XLOCALE_H +# include <xlocale.h> +#endif + ]], + [setlocale newlocale duplocale freelocale]) +]) + +dnl Checks to determine whether the system has the locale_t type, +dnl and how to obtain it. +AC_DEFUN([gl_LOCALE_T], +[ + dnl Persuade glibc and Solaris <locale.h> to define locale_t. + AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) + + dnl Check whether use of locale_t requires inclusion of <xlocale.h>, + dnl e.g. on Mac OS X 10.5. If <locale.h> does not define locale_t by + dnl itself, we assume that <xlocale.h> will do so. + AC_CACHE_CHECK([whether locale.h defines locale_t], + [gl_cv_header_locale_has_locale_t], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[#include <locale.h> + locale_t x;]], + [[]])], + [gl_cv_header_locale_has_locale_t=yes], + [gl_cv_header_locale_has_locale_t=no]) + ]) + + dnl Check for <xlocale.h>. + AC_CHECK_HEADERS_ONCE([xlocale.h]) + if test $ac_cv_header_xlocale_h = yes; then + HAVE_XLOCALE_H=1 + if test $gl_cv_header_locale_has_locale_t = yes; then + gl_cv_header_locale_h_needs_xlocale_h=no + else + gl_cv_header_locale_h_needs_xlocale_h=yes + fi + HAVE_LOCALE_T=1 + else + HAVE_XLOCALE_H=0 + gl_cv_header_locale_h_needs_xlocale_h=no + if test $gl_cv_header_locale_has_locale_t = yes; then + HAVE_LOCALE_T=1 + else + HAVE_LOCALE_T=0 + fi + fi + AC_SUBST([HAVE_XLOCALE_H]) +]) + +AC_DEFUN([gl_LOCALE_MODULE_INDICATOR], +[ + dnl Use AC_REQUIRE here, so that the default settings are expanded once only. + AC_REQUIRE([gl_LOCALE_H_DEFAULTS]) + gl_MODULE_INDICATOR_SET_VARIABLE([$1]) + dnl Define it also as a C macro, for the benefit of the unit tests. + gl_MODULE_INDICATOR_FOR_TESTS([$1]) +]) + +AC_DEFUN([gl_LOCALE_H_DEFAULTS], +[ + GNULIB_LOCALECONV=0; AC_SUBST([GNULIB_LOCALECONV]) + GNULIB_SETLOCALE=0; AC_SUBST([GNULIB_SETLOCALE]) + GNULIB_SETLOCALE_NULL=0; AC_SUBST([GNULIB_SETLOCALE_NULL]) + GNULIB_DUPLOCALE=0; AC_SUBST([GNULIB_DUPLOCALE]) + GNULIB_LOCALENAME=0; AC_SUBST([GNULIB_LOCALENAME]) + dnl Assume proper GNU behavior unless another module says otherwise. + HAVE_NEWLOCALE=1; AC_SUBST([HAVE_NEWLOCALE]) + HAVE_DUPLOCALE=1; AC_SUBST([HAVE_DUPLOCALE]) + HAVE_FREELOCALE=1; AC_SUBST([HAVE_FREELOCALE]) + REPLACE_LOCALECONV=0; AC_SUBST([REPLACE_LOCALECONV]) + REPLACE_SETLOCALE=0; AC_SUBST([REPLACE_SETLOCALE]) + REPLACE_NEWLOCALE=0; AC_SUBST([REPLACE_NEWLOCALE]) + REPLACE_DUPLOCALE=0; AC_SUBST([REPLACE_DUPLOCALE]) + REPLACE_FREELOCALE=0; AC_SUBST([REPLACE_FREELOCALE]) + REPLACE_STRUCT_LCONV=0; AC_SUBST([REPLACE_STRUCT_LCONV]) +]) diff -Nru gdb-9.1/gnulib/import/m4/locale-ja.m4 gdb-10.2/gnulib/import/m4/locale-ja.m4 --- gdb-9.1/gnulib/import/m4/locale-ja.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/locale-ja.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ -# locale-ja.m4 serial 12 -dnl Copyright (C) 2003, 2005-2016 Free Software Foundation, Inc. +# locale-ja.m4 serial 14 +dnl Copyright (C) 2003, 2005-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -25,9 +25,14 @@ char buf[16]; int main () { - const char *p; + /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl + imitates locale dependent behaviour by looking at the environment + variables, and all locales use the UTF-8 encoding. */ +#if defined __BEOS__ || defined __HAIKU__ + return 1; +#else /* Check whether the given locale name is recognized by the system. */ -#if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__ +# if defined _WIN32 && !defined __CYGWIN__ /* On native Windows, setlocale(category, "") looks at the system settings, not at the environment variables. Also, when an encoding suffix such as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE @@ -35,9 +40,9 @@ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) return 1; -#else +# else if (setlocale (LC_ALL, "") == NULL) return 1; -#endif +# endif /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) is empty, and the behaviour of Tcl 8.4 in this locale is not useful. @@ -46,32 +51,36 @@ some unit tests fail. On MirBSD 10, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "UTF-8". */ -#if HAVE_LANGINFO_CODESET +# if HAVE_LANGINFO_CODESET { const char *cs = nl_langinfo (CODESET); if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0 || strcmp (cs, "UTF-8") == 0) return 1; } -#endif -#ifdef __CYGWIN__ +# endif +# ifdef __CYGWIN__ /* On Cygwin, avoid locale names without encoding suffix, because the locale_charset() function relies on the encoding suffix. Note that LC_ALL is set on the command line. */ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; -#endif +# endif /* Check whether MB_CUR_MAX is > 1. This excludes the dysfunctional locales on Cygwin 1.5.x. */ if (MB_CUR_MAX == 1) return 1; /* Check whether in a month name, no byte in the range 0x80..0x9F occurs. This excludes the UTF-8 encoding (except on MirBSD). */ - t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; - if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1; - for (p = buf; *p != '\0'; p++) - if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0) - return 1; + { + const char *p; + t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; + if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1; + for (p = buf; *p != '\0'; p++) + if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0) + return 1; + } return 0; +#endif } changequote([,])dnl ])]) diff -Nru gdb-9.1/gnulib/import/m4/locale-zh.m4 gdb-10.2/gnulib/import/m4/locale-zh.m4 --- gdb-9.1/gnulib/import/m4/locale-zh.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/locale-zh.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ -# locale-zh.m4 serial 12 -dnl Copyright (C) 2003, 2005-2016 Free Software Foundation, Inc. +# locale-zh.m4 serial 14 +dnl Copyright (C) 2003, 2005-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -26,9 +26,14 @@ char buf[16]; int main () { - const char *p; + /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl + imitates locale dependent behaviour by looking at the environment + variables, and all locales use the UTF-8 encoding. */ +#if defined __BEOS__ || defined __HAIKU__ + return 1; +#else /* Check whether the given locale name is recognized by the system. */ -#if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__ +# if defined _WIN32 && !defined __CYGWIN__ /* On native Windows, setlocale(category, "") looks at the system settings, not at the environment variables. Also, when an encoding suffix such as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE @@ -36,9 +41,9 @@ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) return 1; -#else +# else if (setlocale (LC_ALL, "") == NULL) return 1; -#endif +# endif /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) is empty, and the behaviour of Tcl 8.4 in this locale is not useful. @@ -47,32 +52,36 @@ some unit tests fail. On MirBSD 10, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "UTF-8". */ -#if HAVE_LANGINFO_CODESET +# if HAVE_LANGINFO_CODESET { const char *cs = nl_langinfo (CODESET); if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0 || strcmp (cs, "UTF-8") == 0) return 1; } -#endif -#ifdef __CYGWIN__ +# endif +# ifdef __CYGWIN__ /* On Cygwin, avoid locale names without encoding suffix, because the locale_charset() function relies on the encoding suffix. Note that LC_ALL is set on the command line. */ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; -#endif +# endif /* Check whether in a month name, no byte in the range 0x80..0x9F occurs. This excludes the UTF-8 encoding (except on MirBSD). */ - t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; - if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1; - for (p = buf; *p != '\0'; p++) - if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0) - return 1; + { + const char *p; + t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; + if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1; + for (p = buf; *p != '\0'; p++) + if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0) + return 1; + } /* Check whether a typical GB18030 multibyte sequence is recognized as a single wide character. This excludes the GB2312 and GBK encodings. */ if (mblen ("\203\062\332\066", 5) != 4) return 1; return 0; +#endif } changequote([,])dnl ])]) diff -Nru gdb-9.1/gnulib/import/m4/localtime-buffer.m4 gdb-10.2/gnulib/import/m4/localtime-buffer.m4 --- gdb-9.1/gnulib/import/m4/localtime-buffer.m4 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/localtime-buffer.m4 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,21 @@ +# localtime-buffer.m4 serial 1 +dnl Copyright (C) 2017-2020 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_LOCALTIME_BUFFER_DEFAULTS], +[ + NEED_LOCALTIME_BUFFER=0 +]) + +dnl Macro invoked from other modules, to signal that the compilation of +dnl module 'localtime-buffer' is needed. +AC_DEFUN([gl_LOCALTIME_BUFFER_NEEDED], +[ + AC_REQUIRE([gl_LOCALTIME_BUFFER_DEFAULTS]) + AC_REQUIRE([gl_HEADER_TIME_H_DEFAULTS]) + NEED_LOCALTIME_BUFFER=1 + REPLACE_GMTIME=1 + REPLACE_LOCALTIME=1 +]) diff -Nru gdb-9.1/gnulib/import/m4/lock.m4 gdb-10.2/gnulib/import/m4/lock.m4 --- gdb-9.1/gnulib/import/m4/lock.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/lock.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ -# lock.m4 serial 13 (gettext-0.18.2) -dnl Copyright (C) 2005-2016 Free Software Foundation, Inc. +# lock.m4 serial 14 +dnl Copyright (C) 2005-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -12,11 +12,16 @@ if test "$gl_threads_api" = posix; then # OSF/1 4.0 and Mac OS X 10.1 lack the pthread_rwlock_t type and the # pthread_rwlock_* functions. + has_rwlock=false AC_CHECK_TYPE([pthread_rwlock_t], - [AC_DEFINE([HAVE_PTHREAD_RWLOCK], [1], + [has_rwlock=true + AC_DEFINE([HAVE_PTHREAD_RWLOCK], [1], [Define if the POSIX multithreading library has read/write locks.])], [], [#include <pthread.h>]) + if $has_rwlock; then + gl_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER + fi # glibc defines PTHREAD_MUTEX_RECURSIVE as enum, not as a macro. AC_COMPILE_IFELSE([ AC_LANG_PROGRAM( diff -Nru gdb-9.1/gnulib/import/m4/longlong.m4 gdb-10.2/gnulib/import/m4/longlong.m4 --- gdb-9.1/gnulib/import/m4/longlong.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/longlong.m4 1970-01-01 00:00:00.000000000 +0000 @@ -1,113 +0,0 @@ -# longlong.m4 serial 17 -dnl Copyright (C) 1999-2007, 2009-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Paul Eggert. - -# Define HAVE_LONG_LONG_INT if 'long long int' works. -# This fixes a bug in Autoconf 2.61, and can be faster -# than what's in Autoconf 2.62 through 2.68. - -# Note: If the type 'long long int' exists but is only 32 bits large -# (as on some very old compilers), HAVE_LONG_LONG_INT will not be -# defined. In this case you can treat 'long long int' like 'long int'. - -AC_DEFUN([AC_TYPE_LONG_LONG_INT], -[ - AC_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT]) - AC_CACHE_CHECK([for long long int], [ac_cv_type_long_long_int], - [ac_cv_type_long_long_int=yes - if test "x${ac_cv_prog_cc_c99-no}" = xno; then - ac_cv_type_long_long_int=$ac_cv_type_unsigned_long_long_int - if test $ac_cv_type_long_long_int = yes; then - dnl Catch a bug in Tandem NonStop Kernel (OSS) cc -O circa 2004. - dnl If cross compiling, assume the bug is not important, since - dnl nobody cross compiles for this platform as far as we know. - AC_RUN_IFELSE( - [AC_LANG_PROGRAM( - [[@%:@include <limits.h> - @%:@ifndef LLONG_MAX - @%:@ define HALF \ - (1LL << (sizeof (long long int) * CHAR_BIT - 2)) - @%:@ define LLONG_MAX (HALF - 1 + HALF) - @%:@endif]], - [[long long int n = 1; - int i; - for (i = 0; ; i++) - { - long long int m = n << i; - if (m >> i != n) - return 1; - if (LLONG_MAX / 2 < m) - break; - } - return 0;]])], - [], - [ac_cv_type_long_long_int=no], - [:]) - fi - fi]) - if test $ac_cv_type_long_long_int = yes; then - AC_DEFINE([HAVE_LONG_LONG_INT], [1], - [Define to 1 if the system has the type 'long long int'.]) - fi -]) - -# Define HAVE_UNSIGNED_LONG_LONG_INT if 'unsigned long long int' works. -# This fixes a bug in Autoconf 2.61, and can be faster -# than what's in Autoconf 2.62 through 2.68. - -# Note: If the type 'unsigned long long int' exists but is only 32 bits -# large (as on some very old compilers), AC_TYPE_UNSIGNED_LONG_LONG_INT -# will not be defined. In this case you can treat 'unsigned long long int' -# like 'unsigned long int'. - -AC_DEFUN([AC_TYPE_UNSIGNED_LONG_LONG_INT], -[ - AC_CACHE_CHECK([for unsigned long long int], - [ac_cv_type_unsigned_long_long_int], - [ac_cv_type_unsigned_long_long_int=yes - if test "x${ac_cv_prog_cc_c99-no}" = xno; then - AC_LINK_IFELSE( - [_AC_TYPE_LONG_LONG_SNIPPET], - [], - [ac_cv_type_unsigned_long_long_int=no]) - fi]) - if test $ac_cv_type_unsigned_long_long_int = yes; then - AC_DEFINE([HAVE_UNSIGNED_LONG_LONG_INT], [1], - [Define to 1 if the system has the type 'unsigned long long int'.]) - fi -]) - -# Expands to a C program that can be used to test for simultaneous support -# of 'long long' and 'unsigned long long'. We don't want to say that -# 'long long' is available if 'unsigned long long' is not, or vice versa, -# because too many programs rely on the symmetry between signed and unsigned -# integer types (excluding 'bool'). -AC_DEFUN([_AC_TYPE_LONG_LONG_SNIPPET], -[ - AC_LANG_PROGRAM( - [[/* For now, do not test the preprocessor; as of 2007 there are too many - implementations with broken preprocessors. Perhaps this can - be revisited in 2012. In the meantime, code should not expect - #if to work with literals wider than 32 bits. */ - /* Test literals. */ - long long int ll = 9223372036854775807ll; - long long int nll = -9223372036854775807LL; - unsigned long long int ull = 18446744073709551615ULL; - /* Test constant expressions. */ - typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll) - ? 1 : -1)]; - typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1 - ? 1 : -1)]; - int i = 63;]], - [[/* Test availability of runtime routines for shift and division. */ - long long int llmax = 9223372036854775807ll; - unsigned long long int ullmax = 18446744073709551615ull; - return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i) - | (llmax / ll) | (llmax % ll) - | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i) - | (ullmax / ull) | (ullmax % ull));]]) -]) diff -Nru gdb-9.1/gnulib/import/m4/lstat.m4 gdb-10.2/gnulib/import/m4/lstat.m4 --- gdb-9.1/gnulib/import/m4/lstat.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/lstat.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ -# serial 27 +# serial 33 -# Copyright (C) 1997-2001, 2003-2016 Free Software Foundation, Inc. +# Copyright (C) 1997-2001, 2003-2020 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -10,14 +10,15 @@ AC_DEFUN([gl_FUNC_LSTAT], [ + AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS]) dnl If lstat does not exist, the replacement <sys/stat.h> does dnl "#define lstat stat", and lstat.c is a no-op. AC_CHECK_FUNCS_ONCE([lstat]) if test $ac_cv_func_lstat = yes; then AC_REQUIRE([gl_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK]) - case "$gl_cv_func_lstat_dereferences_slashed_symlink" in - *no) + case $host_os,$gl_cv_func_lstat_dereferences_slashed_symlink in + solaris* | *no) REPLACE_LSTAT=1 ;; esac @@ -33,6 +34,7 @@ [ dnl We don't use AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK any more, because it dnl is no longer maintained in Autoconf and because it invokes AC_LIBOBJ. + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether lstat correctly handles trailing slash], [gl_cv_func_lstat_dereferences_slashed_symlink], [rm -f conftest.sym conftest.file @@ -51,12 +53,18 @@ [gl_cv_func_lstat_dereferences_slashed_symlink=yes], [gl_cv_func_lstat_dereferences_slashed_symlink=no], [case "$host_os" in - *-gnu*) + linux-* | linux) + # Guess yes on Linux systems. + gl_cv_func_lstat_dereferences_slashed_symlink="guessing yes" ;; + *-gnu* | gnu*) # Guess yes on glibc systems. gl_cv_func_lstat_dereferences_slashed_symlink="guessing yes" ;; - *) - # If we don't know, assume the worst. + mingw*) + # Guess no on native Windows. gl_cv_func_lstat_dereferences_slashed_symlink="guessing no" ;; + *) + # If we don't know, obey --enable-cross-guesses. + gl_cv_func_lstat_dereferences_slashed_symlink="$gl_cross_guess_normal" ;; esac ]) rm -f conftest.sym conftest.file diff -Nru gdb-9.1/gnulib/import/m4/malloca.m4 gdb-10.2/gnulib/import/m4/malloca.m4 --- gdb-9.1/gnulib/import/m4/malloca.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/malloca.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ -# malloca.m4 serial 1 -dnl Copyright (C) 2003-2004, 2006-2007, 2009-2016 Free Software Foundation, +# malloca.m4 serial 2 +dnl Copyright (C) 2003-2004, 2006-2007, 2009-2020 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -11,5 +11,4 @@ dnl @ALLOCA@ and @LTALLOCA@. dnl gl_FUNC_ALLOCA dnl Already brought in by the module dependencies. AC_REQUIRE([gl_EEMALLOC]) - AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) ]) diff -Nru gdb-9.1/gnulib/import/m4/malloc.m4 gdb-10.2/gnulib/import/m4/malloc.m4 --- gdb-9.1/gnulib/import/m4/malloc.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/malloc.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,13 +1,11 @@ -# malloc.m4 serial 15 -dnl Copyright (C) 2007, 2009-2016 Free Software Foundation, Inc. +# malloc.m4 serial 20 +dnl Copyright (C) 2007, 2009-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. -m4_version_prereq([2.70], [] ,[ - # This is adapted with modifications from upstream Autoconf here: -# http://git.savannah.gnu.org/cgit/autoconf.git/commit/?id=04be2b7a29d65d9a08e64e8e56e594c91749598c +# https://git.savannah.gnu.org/cgit/autoconf.git/commit/?id=04be2b7a29d65d9a08e64e8e56e594c91749598c AC_DEFUN([_AC_FUNC_MALLOC_IF], [ AC_REQUIRE([AC_HEADER_STDC])dnl @@ -32,19 +30,24 @@ [ac_cv_func_malloc_0_nonnull=no], [case "$host_os" in # Guess yes on platforms where we know the result. - *-gnu* | freebsd* | netbsd* | openbsd* \ + *-gnu* | gnu* | *-musl* | freebsd* | netbsd* | openbsd* \ | hpux* | solaris* | cygwin* | mingw*) - ac_cv_func_malloc_0_nonnull=yes ;; - # If we don't know, assume the worst. - *) ac_cv_func_malloc_0_nonnull=no ;; + ac_cv_func_malloc_0_nonnull="guessing yes" ;; + # If we don't know, obey --enable-cross-guesses. + *) ac_cv_func_malloc_0_nonnull="$gl_cross_guess_normal" ;; esac ]) ]) - AS_IF([test $ac_cv_func_malloc_0_nonnull = yes], [$1], [$2]) + case "$ac_cv_func_malloc_0_nonnull" in + *yes) + $1 + ;; + *) + $2 + ;; + esac ])# _AC_FUNC_MALLOC_IF -]) - # gl_FUNC_MALLOC_GNU # ------------------ # Test whether 'malloc (0)' is handled like in GNU libc, and replace malloc if @@ -91,7 +94,7 @@ AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[]], - [[#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ + [[#if defined _WIN32 && ! defined __CYGWIN__ choke me #endif ]])], diff -Nru gdb-9.1/gnulib/import/m4/math_h.m4 gdb-10.2/gnulib/import/m4/math_h.m4 --- gdb-9.1/gnulib/import/m4/math_h.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/math_h.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ -# math_h.m4 serial 114 -dnl Copyright (C) 2007-2016 Free Software Foundation, Inc. +# math_h.m4 serial 119 +dnl Copyright (C) 2007-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -256,13 +256,22 @@ HAVE_DECL_TRUNC=1; AC_SUBST([HAVE_DECL_TRUNC]) HAVE_DECL_TRUNCF=1; AC_SUBST([HAVE_DECL_TRUNCF]) HAVE_DECL_TRUNCL=1; AC_SUBST([HAVE_DECL_TRUNCL]) + REPLACE_ACOSF=0; AC_SUBST([REPLACE_ACOSF]) + REPLACE_ASINF=0; AC_SUBST([REPLACE_ASINF]) + REPLACE_ATANF=0; AC_SUBST([REPLACE_ATANF]) + REPLACE_ATAN2F=0; AC_SUBST([REPLACE_ATAN2F]) REPLACE_CBRTF=0; AC_SUBST([REPLACE_CBRTF]) REPLACE_CBRTL=0; AC_SUBST([REPLACE_CBRTL]) REPLACE_CEIL=0; AC_SUBST([REPLACE_CEIL]) REPLACE_CEILF=0; AC_SUBST([REPLACE_CEILF]) REPLACE_CEILL=0; AC_SUBST([REPLACE_CEILL]) + REPLACE_COSF=0; AC_SUBST([REPLACE_COSF]) + REPLACE_COSHF=0; AC_SUBST([REPLACE_COSHF]) + REPLACE_EXPF=0; AC_SUBST([REPLACE_EXPF]) + REPLACE_EXPL=0; AC_SUBST([REPLACE_EXPL]) REPLACE_EXPM1=0; AC_SUBST([REPLACE_EXPM1]) REPLACE_EXPM1F=0; AC_SUBST([REPLACE_EXPM1F]) + REPLACE_EXPM1L=0; AC_SUBST([REPLACE_EXPM1L]) REPLACE_EXP2=0; AC_SUBST([REPLACE_EXP2]) REPLACE_EXP2L=0; AC_SUBST([REPLACE_EXP2L]) REPLACE_FABSL=0; AC_SUBST([REPLACE_FABSL]) @@ -284,6 +293,7 @@ REPLACE_HYPOTL=0; AC_SUBST([REPLACE_HYPOTL]) REPLACE_ILOGB=0; AC_SUBST([REPLACE_ILOGB]) REPLACE_ILOGBF=0; AC_SUBST([REPLACE_ILOGBF]) + REPLACE_ILOGBL=0; AC_SUBST([REPLACE_ILOGBL]) REPLACE_ISFINITE=0; AC_SUBST([REPLACE_ISFINITE]) REPLACE_ISINF=0; AC_SUBST([REPLACE_ISINF]) REPLACE_ISNAN=0; AC_SUBST([REPLACE_ISNAN]) @@ -310,12 +320,18 @@ REPLACE_REMAINDER=0; AC_SUBST([REPLACE_REMAINDER]) REPLACE_REMAINDERF=0; AC_SUBST([REPLACE_REMAINDERF]) REPLACE_REMAINDERL=0; AC_SUBST([REPLACE_REMAINDERL]) + REPLACE_RINTL=0; AC_SUBST([REPLACE_RINTL]) REPLACE_ROUND=0; AC_SUBST([REPLACE_ROUND]) REPLACE_ROUNDF=0; AC_SUBST([REPLACE_ROUNDF]) REPLACE_ROUNDL=0; AC_SUBST([REPLACE_ROUNDL]) REPLACE_SIGNBIT=0; AC_SUBST([REPLACE_SIGNBIT]) REPLACE_SIGNBIT_USING_GCC=0; AC_SUBST([REPLACE_SIGNBIT_USING_GCC]) + REPLACE_SINF=0; AC_SUBST([REPLACE_SINF]) + REPLACE_SINHF=0; AC_SUBST([REPLACE_SINHF]) + REPLACE_SQRTF=0; AC_SUBST([REPLACE_SQRTF]) REPLACE_SQRTL=0; AC_SUBST([REPLACE_SQRTL]) + REPLACE_TANF=0; AC_SUBST([REPLACE_TANF]) + REPLACE_TANHF=0; AC_SUBST([REPLACE_TANHF]) REPLACE_TRUNC=0; AC_SUBST([REPLACE_TRUNC]) REPLACE_TRUNCF=0; AC_SUBST([REPLACE_TRUNCF]) REPLACE_TRUNCL=0; AC_SUBST([REPLACE_TRUNCL]) diff -Nru gdb-9.1/gnulib/import/m4/mbrtowc.m4 gdb-10.2/gnulib/import/m4/mbrtowc.m4 --- gdb-9.1/gnulib/import/m4/mbrtowc.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/mbrtowc.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ -# mbrtowc.m4 serial 27 -*- coding: utf-8 -*- -dnl Copyright (C) 2001-2002, 2004-2005, 2008-2016 Free Software Foundation, +# mbrtowc.m4 serial 37 -*- coding: utf-8 -*- +dnl Copyright (C) 2001-2002, 2004-2005, 2008-2020 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -8,6 +8,8 @@ AC_DEFUN([gl_FUNC_MBRTOWC], [ AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) + AC_REQUIRE([gl_PTHREADLIB]) + AC_CHECK_HEADERS_ONCE([threads.h]) AC_REQUIRE([AC_TYPE_MBSTATE_T]) gl_MBSTATE_T_BROKEN @@ -39,6 +41,7 @@ gl_MBRTOWC_NULL_ARG2 gl_MBRTOWC_RETVAL gl_MBRTOWC_NUL_RETVAL + gl_MBRTOWC_STORES_INCOMPLETE gl_MBRTOWC_EMPTY_INPUT gl_MBRTOWC_C_LOCALE case "$gl_cv_func_mbrtowc_null_arg1" in @@ -69,6 +72,13 @@ REPLACE_MBRTOWC=1 ;; esac + case "$gl_cv_func_mbrtowc_stores_incomplete" in + *no) ;; + *) AC_DEFINE([MBRTOWC_STORES_INCOMPLETE_BUG], [1], + [Define if the mbrtowc function stores a wide character when reporting incomplete input.]) + REPLACE_MBRTOWC=1 + ;; + esac case "$gl_cv_func_mbrtowc_empty_input" in *yes) ;; *) AC_DEFINE([MBRTOWC_EMPTY_INPUT_BUG], [1], @@ -77,15 +87,32 @@ REPLACE_MBRTOWC=1 ;; esac - case $gl_cv_C_locale_sans_EILSEQ in + case "$gl_cv_func_mbrtowc_C_locale_sans_EILSEQ" in *yes) ;; - *) AC_DEFINE([C_LOCALE_MAYBE_EILSEQ], [1], - [Define to 1 if the C locale may have encoding errors.]) + *) AC_DEFINE([MBRTOWC_IN_C_LOCALE_MAYBE_EILSEQ], [1], + [Define if the mbrtowc function may signal encoding errors in the C locale.]) REPLACE_MBRTOWC=1 ;; esac fi fi + if test $REPLACE_MBSTATE_T = 1; then + case "$host_os" in + mingw*) LIB_MBRTOWC= ;; + *) + gl_WEAK_SYMBOLS + case "$gl_cv_have_weak" in + *yes) LIB_MBRTOWC= ;; + *) LIB_MBRTOWC="$LIBPTHREAD" ;; + esac + ;; + esac + else + LIB_MBRTOWC= + fi + dnl LIB_MBRTOWC is expected to be '-pthread' or '-lpthread' on AIX + dnl with gcc or xlc, and empty otherwise. + AC_SUBST([LIB_MBRTOWC]) ]) dnl Test whether mbsinit() and mbrtowc() need to be overridden in a way that @@ -97,11 +124,19 @@ AC_DEFUN([gl_MBSTATE_T_BROKEN], [ AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) + AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AC_TYPE_MBSTATE_T]) AC_CHECK_FUNCS_ONCE([mbsinit]) AC_CHECK_FUNCS_ONCE([mbrtowc]) - if test $ac_cv_func_mbsinit = yes && test $ac_cv_func_mbrtowc = yes; then + dnl On native Windows, we know exactly how mbsinit() behaves and don't need + dnl to override it, even if - like on MSVC - mbsinit() is only defined as + dnl an inline function, not as a global function. + if case "$host_os" in + mingw*) true ;; + *) test $ac_cv_func_mbsinit = yes ;; + esac \ + && test $ac_cv_func_mbrtowc = yes; then gl_MBRTOWC_INCOMPLETE_STATE gl_MBRTOWC_SANITYCHECK REPLACE_MBSTATE_T=0 @@ -126,6 +161,7 @@ [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gt_LOCALE_JA]) + AC_REQUIRE([gt_LOCALE_FR_UTF8]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether mbrtowc handles incomplete characters], [gl_cv_func_mbrtowc_incomplete_state], @@ -164,13 +200,46 @@ memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) if (mbsinit (&state)) - return 1; + return 2; } return 0; }]])], [gl_cv_func_mbrtowc_incomplete_state=yes], [gl_cv_func_mbrtowc_incomplete_state=no], [:]) + else + if test $LOCALE_FR_UTF8 != none; then + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include <locale.h> +#include <string.h> +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> +int main () +{ + if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) + { + const char input[] = "B\303\274\303\237er"; /* "Büßer" */ + mbstate_t state; + wchar_t wc; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) + if (mbsinit (&state)) + return 2; + } + return 0; +}]])], + [gl_cv_func_mbrtowc_incomplete_state=yes], + [gl_cv_func_mbrtowc_incomplete_state=no], + [:]) + fi fi ]) ]) @@ -224,7 +293,7 @@ memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 3, 6, &state) != 4 && mbtowc (&wc, input + 3, 6) == 4) - return 1; + return 2; } return 0; }]])], @@ -352,7 +421,7 @@ mbrtowc (&wc, NULL, 5, &state); /* Check that wc was not modified. */ if (wc != (wchar_t) 0xBADFACE) - return 1; + return 2; } return 0; }]])], @@ -539,7 +608,7 @@ memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, "", 1, &state) != 0) - return 1; + return 2; } return 0; }]])], @@ -550,6 +619,126 @@ ]) ]) +dnl Test whether mbrtowc stores a wide character when reporting incomplete +dnl input. + +AC_DEFUN([gl_MBRTOWC_STORES_INCOMPLETE], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether mbrtowc stores incomplete characters], + [gl_cv_func_mbrtowc_stores_incomplete], + [ + dnl Initial guess, used when cross-compiling or when no suitable locale + dnl is present. +changequote(,)dnl + case "$host_os" in + # Guess yes on native Windows. + mingw*) gl_cv_func_mbrtowc_stores_incomplete="guessing yes" ;; + *) gl_cv_func_mbrtowc_stores_incomplete="guessing no" ;; + esac +changequote([,])dnl + case "$host_os" in + mingw*) + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include <locale.h> +#include <string.h> +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> +int main () +{ + int result = 0; + if (setlocale (LC_ALL, "French_France.65001") != NULL) + { + wchar_t wc = (wchar_t) 0xBADFACE; + mbstate_t state; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, "\303", 1, &state) == (size_t)(-2) + && wc != (wchar_t) 0xBADFACE) + result |= 1; + } + if (setlocale (LC_ALL, "Japanese_Japan.932") != NULL) + { + wchar_t wc = (wchar_t) 0xBADFACE; + mbstate_t state; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, "\226", 1, &state) == (size_t)(-2) + && wc != (wchar_t) 0xBADFACE) + result |= 2; + } + if (setlocale (LC_ALL, "Chinese_Taiwan.950") != NULL) + { + wchar_t wc = (wchar_t) 0xBADFACE; + mbstate_t state; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, "\245", 1, &state) == (size_t)(-2) + && wc != (wchar_t) 0xBADFACE) + result |= 4; + } + if (setlocale (LC_ALL, "Chinese_China.936") != NULL) + { + wchar_t wc = (wchar_t) 0xBADFACE; + mbstate_t state; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, "\261", 1, &state) == (size_t)(-2) + && wc != (wchar_t) 0xBADFACE) + result |= 8; + } + return result; +}]])], + [gl_cv_func_mbrtowc_stores_incomplete=no], + [gl_cv_func_mbrtowc_stores_incomplete=yes], + [:]) + ;; + *) + AC_REQUIRE([gt_LOCALE_FR_UTF8]) + if test $LOCALE_FR_UTF8 != none; then + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include <locale.h> +#include <string.h> +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> +int main () +{ + if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) + { + wchar_t wc = (wchar_t) 0xBADFACE; + mbstate_t state; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, "\303", 1, &state) == (size_t)(-2) + && wc != (wchar_t) 0xBADFACE) + return 1; + } + return 0; +}]])], + [gl_cv_func_mbrtowc_stores_incomplete=no], + [gl_cv_func_mbrtowc_stores_incomplete=yes], + [:]) + fi + ;; + esac + ]) +]) + dnl Test whether mbrtowc returns the correct value on empty input. AC_DEFUN([gl_MBRTOWC_EMPTY_INPUT], @@ -563,10 +752,11 @@ dnl is present. changequote(,)dnl case "$host_os" in - # Guess no on AIX and glibc systems. - aix* | *-gnu*) - gl_cv_func_mbrtowc_empty_input="guessing no" ;; - *) gl_cv_func_mbrtowc_empty_input="guessing yes" ;; + # Guess no on AIX and glibc systems. + aix* | *-gnu* | gnu*) gl_cv_func_mbrtowc_empty_input="guessing no" ;; + # Guess yes on native Windows. + mingw*) gl_cv_func_mbrtowc_empty_input="guessing yes" ;; + *) gl_cv_func_mbrtowc_empty_input="guessing yes" ;; esac changequote([,])dnl AC_RUN_IFELSE( @@ -592,12 +782,13 @@ AC_DEFUN([gl_MBRTOWC_C_LOCALE], [ + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether the C locale is free of encoding errors], - [gl_cv_C_locale_sans_EILSEQ], + [gl_cv_func_mbrtowc_C_locale_sans_EILSEQ], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. - gl_cv_C_locale_sans_EILSEQ="guessing no" + gl_cv_func_mbrtowc_C_locale_sans_EILSEQ="$gl_cross_guess_normal" AC_RUN_IFELSE( [AC_LANG_PROGRAM( @@ -608,7 +799,7 @@ int i; char *locale = setlocale (LC_ALL, "C"); if (! locale) - return 1; + return 2; for (i = CHAR_MIN; i <= CHAR_MAX; i++) { char c = i; @@ -616,20 +807,32 @@ mbstate_t mbs = { 0, }; size_t ss = mbrtowc (&wc, &c, 1, &mbs); if (1 < ss) - return 1; + return 3; } return 0; ]])], - [gl_cv_C_locale_sans_EILSEQ=yes], - [gl_cv_C_locale_sans_EILSEQ=no], - [:])]) + [gl_cv_func_mbrtowc_C_locale_sans_EILSEQ=yes], + [gl_cv_func_mbrtowc_C_locale_sans_EILSEQ=no], + [case "$host_os" in + # Guess yes on native Windows. + mingw*) gl_cv_func_mbrtowc_C_locale_sans_EILSEQ="guessing yes" ;; + esac + ]) + ]) ]) -# Prerequisites of lib/mbrtowc.c. +# Prerequisites of lib/mbrtowc.c and lib/lc-charset-dispatch.c. AC_DEFUN([gl_PREREQ_MBRTOWC], [ + AC_REQUIRE([AC_C_INLINE]) : ]) +# Prerequisites of lib/mbtowc-lock.c. +AC_DEFUN([gl_PREREQ_MBTOWC_LOCK], +[ + gl_VISIBILITY +]) + dnl From Paul Eggert @@ -639,7 +842,7 @@ [ dnl Same as AC_FUNC_MBRTOWC in autoconf-2.60. AC_CACHE_CHECK([whether mbrtowc and mbstate_t are properly declared], - gl_cv_func_mbrtowc, + [gl_cv_func_mbrtowc], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be @@ -655,8 +858,8 @@ size_t n = 1; mbstate_t state; return ! (sizeof state && (mbrtowc) (&wc, s, n, &state));]])], - gl_cv_func_mbrtowc=yes, - gl_cv_func_mbrtowc=no)]) + [gl_cv_func_mbrtowc=yes], + [gl_cv_func_mbrtowc=no])]) if test $gl_cv_func_mbrtowc = yes; then AC_DEFINE([HAVE_MBRTOWC], [1], [Define to 1 if mbrtowc and mbstate_t are properly declared.]) diff -Nru gdb-9.1/gnulib/import/m4/mbsinit.m4 gdb-10.2/gnulib/import/m4/mbsinit.m4 --- gdb-9.1/gnulib/import/m4/mbsinit.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/mbsinit.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ # mbsinit.m4 serial 8 -dnl Copyright (C) 2008, 2010-2016 Free Software Foundation, Inc. +dnl Copyright (C) 2008, 2010-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. diff -Nru gdb-9.1/gnulib/import/m4/mbsrtowcs.m4 gdb-10.2/gnulib/import/m4/mbsrtowcs.m4 --- gdb-9.1/gnulib/import/m4/mbsrtowcs.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/mbsrtowcs.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ # mbsrtowcs.m4 serial 13 -dnl Copyright (C) 2008-2016 Free Software Foundation, Inc. +dnl Copyright (C) 2008-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. diff -Nru gdb-9.1/gnulib/import/m4/mbstate_t.m4 gdb-10.2/gnulib/import/m4/mbstate_t.m4 --- gdb-9.1/gnulib/import/m4/mbstate_t.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/mbstate_t.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ # mbstate_t.m4 serial 13 -dnl Copyright (C) 2000-2002, 2008-2016 Free Software Foundation, Inc. +dnl Copyright (C) 2000-2002, 2008-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. diff -Nru gdb-9.1/gnulib/import/m4/mbtowc.m4 gdb-10.2/gnulib/import/m4/mbtowc.m4 --- gdb-9.1/gnulib/import/m4/mbtowc.m4 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/mbtowc.m4 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,24 @@ +# mbtowc.m4 serial 3 +dnl Copyright (C) 2011-2020 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_MBTOWC], +[ + AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) + + AC_CHECK_FUNCS([mbtowc]) + if test $ac_cv_func_mbtowc = no; then + HAVE_MBTOWC=0 + else + if false; then + REPLACE_MBTOWC=1 + fi + fi +]) + +# Prerequisites of lib/mbtowc.c. +AC_DEFUN([gl_PREREQ_MBTOWC], [ + : +]) diff -Nru gdb-9.1/gnulib/import/m4/memchr.m4 gdb-10.2/gnulib/import/m4/memchr.m4 --- gdb-9.1/gnulib/import/m4/memchr.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/memchr.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,11 +1,13 @@ -# memchr.m4 serial 12 -dnl Copyright (C) 2002-2004, 2009-2016 Free Software Foundation, Inc. +# memchr.m4 serial 15 +dnl Copyright (C) 2002-2004, 2009-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN_ONCE([gl_FUNC_MEMCHR], [ + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + dnl Check for prerequisites for memory fence checks. gl_FUNC_MMAP_ANON AC_CHECK_HEADERS_ONCE([sys/mman.h]) @@ -23,10 +25,12 @@ if test $HAVE_MEMCHR = 1; then # Detect platform-specific bugs in some versions of glibc: # memchr should not dereference anything with length 0 - # http://bugzilla.redhat.com/499689 + # https://bugzilla.redhat.com/show_bug.cgi?id=499689 # memchr should not dereference overestimated length after a match - # http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=521737 - # http://sourceware.org/bugzilla/show_bug.cgi?id=10162 + # https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=521737 + # https://sourceware.org/bugzilla/show_bug.cgi?id=10162 + # memchr should cast the second argument to 'unsigned char'. + # This bug exists in Android 4.3. # Assume that memchr works on platforms that lack mprotect. AC_CACHE_CHECK([whether memchr works], [gl_cv_func_memchr_works], [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ @@ -72,13 +76,33 @@ if (memchr (fence - 1, 0, 3) != fence - 1) result |= 4; } + /* Test against bug on Android 4.3. */ + { + char input[3]; + input[0] = 'a'; + input[1] = 'b'; + input[2] = 'c'; + if (memchr (input, 0x789abc00 | 'b', 3) != input + 1) + result |= 8; + } return result; -]])], [gl_cv_func_memchr_works=yes], [gl_cv_func_memchr_works=no], - [dnl Be pessimistic for now. - gl_cv_func_memchr_works="guessing no"])]) - if test "$gl_cv_func_memchr_works" != yes; then - REPLACE_MEMCHR=1 - fi +]])], + [gl_cv_func_memchr_works=yes], + [gl_cv_func_memchr_works=no], + [case "$host_os" in + # Guess no on Android. + linux*-android*) gl_cv_func_memchr_works="guessing no" ;; + # Guess yes on native Windows. + mingw*) gl_cv_func_memchr_works="guessing yes" ;; + # If we don't know, obey --enable-cross-guesses. + *) gl_cv_func_memchr_works="$gl_cross_guess_normal" ;; + esac + ]) + ]) + case "$gl_cv_func_memchr_works" in + *yes) ;; + *) REPLACE_MEMCHR=1 ;; + esac fi ]) diff -Nru gdb-9.1/gnulib/import/m4/memmem.m4 gdb-10.2/gnulib/import/m4/memmem.m4 --- gdb-9.1/gnulib/import/m4/memmem.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/memmem.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ -# memmem.m4 serial 24 -dnl Copyright (C) 2002-2004, 2007-2016 Free Software Foundation, Inc. +# memmem.m4 serial 27 +dnl Copyright (C) 2002-2004, 2007-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -21,7 +21,7 @@ if test $ac_cv_have_decl_memmem = no; then HAVE_DECL_MEMMEM=0 else - dnl Detect http://sourceware.org/bugzilla/show_bug.cgi?id=12092. + dnl Detect https://sourceware.org/bugzilla/show_bug.cgi?id=12092. dnl Also check that we handle empty needles correctly. AC_CACHE_CHECK([whether memmem works], [gl_cv_func_memmem_works_always], @@ -37,7 +37,7 @@ /* Check for empty needle behavior. */ { const char *haystack = "AAA"; - if (memmem (haystack, 3, NULL, 0) != haystack) + if (memmem (haystack, 3, (const char *) 1, 0) != haystack) result |= 2; } return result; @@ -68,7 +68,7 @@ #endif ], [gl_cv_func_memmem_works_always="guessing yes"], - [gl_cv_func_memmem_works_always="guessing no"]) + [gl_cv_func_memmem_works_always="$gl_cross_guess_normal"]) ]) ]) case "$gl_cv_func_memmem_works_always" in @@ -113,6 +113,9 @@ if (!memmem (haystack, 2 * m + 1, needle, m + 1)) result |= 1; } + /* Free allocated memory, in case some sanitizer is watching. */ + free (haystack); + free (needle); return result; ]])], [gl_cv_func_memmem_works_fast=yes], [gl_cv_func_memmem_works_fast=no], @@ -135,7 +138,7 @@ #endif ], [gl_cv_func_memmem_works_fast="guessing yes"], - [gl_cv_func_memmem_works_fast="guessing no"]) + [gl_cv_func_memmem_works_fast="$gl_cross_guess_normal"]) ]) ]) case "$gl_cv_func_memmem_works_fast" in diff -Nru gdb-9.1/gnulib/import/m4/mempcpy.m4 gdb-10.2/gnulib/import/m4/mempcpy.m4 --- gdb-9.1/gnulib/import/m4/mempcpy.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/mempcpy.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ # mempcpy.m4 serial 11 -dnl Copyright (C) 2003-2004, 2006-2007, 2009-2016 Free Software Foundation, +dnl Copyright (C) 2003-2004, 2006-2007, 2009-2020 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, diff -Nru gdb-9.1/gnulib/import/m4/memrchr.m4 gdb-10.2/gnulib/import/m4/memrchr.m4 --- gdb-9.1/gnulib/import/m4/memrchr.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/memrchr.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ # memrchr.m4 serial 10 -dnl Copyright (C) 2002-2003, 2005-2007, 2009-2016 Free Software Foundation, +dnl Copyright (C) 2002-2003, 2005-2007, 2009-2020 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, diff -Nru gdb-9.1/gnulib/import/m4/minmax.m4 gdb-10.2/gnulib/import/m4/minmax.m4 --- gdb-9.1/gnulib/import/m4/minmax.m4 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/minmax.m4 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,44 @@ +# minmax.m4 serial 4 +dnl Copyright (C) 2005, 2009-2020 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_PREREQ([2.53]) + +AC_DEFUN([gl_MINMAX], +[ + AC_REQUIRE([gl_PREREQ_MINMAX]) +]) + +# Prerequisites of lib/minmax.h. +AC_DEFUN([gl_PREREQ_MINMAX], +[ + gl_MINMAX_IN_HEADER([limits.h]) + gl_MINMAX_IN_HEADER([sys/param.h]) +]) + +dnl gl_MINMAX_IN_HEADER(HEADER) +dnl The parameter has to be a literal header name; it cannot be macro, +dnl nor a shell variable. (Because autoheader collects only AC_DEFINE +dnl invocations with a literal macro name.) +AC_DEFUN([gl_MINMAX_IN_HEADER], +[ + m4_pushdef([header], AS_TR_SH([$1])) + m4_pushdef([HEADER], AS_TR_CPP([$1])) + AC_CACHE_CHECK([whether <$1> defines MIN and MAX], + [gl_cv_minmax_in_]header, + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[#include <$1> + int x = MIN (42, 17);]], + [[]])], + [gl_cv_minmax_in_]header[=yes], + [gl_cv_minmax_in_]header[=no])]) + if test $gl_cv_minmax_in_[]header = yes; then + AC_DEFINE([HAVE_MINMAX_IN_]HEADER, 1, + [Define to 1 if <$1> defines the MIN and MAX macros.]) + fi + m4_popdef([HEADER]) + m4_popdef([header]) +]) diff -Nru gdb-9.1/gnulib/import/m4/mkdir.m4 gdb-10.2/gnulib/import/m4/mkdir.m4 --- gdb-9.1/gnulib/import/m4/mkdir.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/mkdir.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ -# serial 11 +# serial 16 -# Copyright (C) 2001, 2003-2004, 2006, 2008-2016 Free Software Foundation, Inc. +# Copyright (C) 2001, 2003-2004, 2006, 2008-2020 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -23,10 +23,21 @@ [gl_cv_func_mkdir_trailing_slash_works=yes], [gl_cv_func_mkdir_trailing_slash_works=no], [case "$host_os" in - # Guess yes on glibc systems. - *-gnu*) gl_cv_func_mkdir_trailing_slash_works="guessing yes" ;; - # If we don't know, assume the worst. - *) gl_cv_func_mkdir_trailing_slash_works="guessing no" ;; + # Guess yes on Linux systems. + linux-* | linux) gl_cv_func_mkdir_trailing_slash_works="guessing yes" ;; + # Guess yes on glibc systems. + *-gnu* | gnu*) gl_cv_func_mkdir_trailing_slash_works="guessing yes" ;; + # Guess yes on MSVC, no on mingw. + mingw*) AC_EGREP_CPP([Known], [ +#ifdef _MSC_VER + Known +#endif + ], + [gl_cv_func_mkdir_trailing_slash_works="guessing yes"], + [gl_cv_func_mkdir_trailing_slash_works="guessing no"]) + ;; + # If we don't know, obey --enable-cross-guesses. + *) gl_cv_func_mkdir_trailing_slash_works="$gl_cross_guess_normal" ;; esac ]) rm -rf conftest.dir @@ -49,10 +60,14 @@ [gl_cv_func_mkdir_trailing_dot_works=yes], [gl_cv_func_mkdir_trailing_dot_works=no], [case "$host_os" in - # Guess yes on glibc systems. - *-gnu*) gl_cv_func_mkdir_trailing_dot_works="guessing yes" ;; - # If we don't know, assume the worst. - *) gl_cv_func_mkdir_trailing_dot_works="guessing no" ;; + # Guess yes on glibc systems. + *-gnu* | gnu*) gl_cv_func_mkdir_trailing_dot_works="guessing yes" ;; + # Guess yes on musl systems. + *-musl*) gl_cv_func_mkdir_trailing_dot_works="guessing yes" ;; + # Guess no on native Windows. + mingw*) gl_cv_func_mkdir_trailing_dot_works="guessing no" ;; + # If we don't know, obey --enable-cross-guesses. + *) gl_cv_func_mkdir_trailing_dot_works="$gl_cross_guess_normal" ;; esac ]) rm -rf conftest.dir diff -Nru gdb-9.1/gnulib/import/m4/mkdtemp.m4 gdb-10.2/gnulib/import/m4/mkdtemp.m4 --- gdb-9.1/gnulib/import/m4/mkdtemp.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/mkdtemp.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ # mkdtemp.m4 serial 8 -dnl Copyright (C) 2001-2003, 2006-2007, 2009-2016 Free Software Foundation, +dnl Copyright (C) 2001-2003, 2006-2007, 2009-2020 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, diff -Nru gdb-9.1/gnulib/import/m4/mkostemp.m4 gdb-10.2/gnulib/import/m4/mkostemp.m4 --- gdb-9.1/gnulib/import/m4/mkostemp.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/mkostemp.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ # mkostemp.m4 serial 2 -dnl Copyright (C) 2009-2016 Free Software Foundation, Inc. +dnl Copyright (C) 2009-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. diff -Nru gdb-9.1/gnulib/import/m4/mmap-anon.m4 gdb-10.2/gnulib/import/m4/mmap-anon.m4 --- gdb-9.1/gnulib/import/m4/mmap-anon.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/mmap-anon.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ # mmap-anon.m4 serial 10 -dnl Copyright (C) 2005, 2007, 2009-2016 Free Software Foundation, Inc. +dnl Copyright (C) 2005, 2007, 2009-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. diff -Nru gdb-9.1/gnulib/import/m4/mode_t.m4 gdb-10.2/gnulib/import/m4/mode_t.m4 --- gdb-9.1/gnulib/import/m4/mode_t.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/mode_t.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ # mode_t.m4 serial 2 -dnl Copyright (C) 2009-2016 Free Software Foundation, Inc. +dnl Copyright (C) 2009-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. diff -Nru gdb-9.1/gnulib/import/m4/msvc-inval.m4 gdb-10.2/gnulib/import/m4/msvc-inval.m4 --- gdb-9.1/gnulib/import/m4/msvc-inval.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/msvc-inval.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ # msvc-inval.m4 serial 1 -dnl Copyright (C) 2011-2016 Free Software Foundation, Inc. +dnl Copyright (C) 2011-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. diff -Nru gdb-9.1/gnulib/import/m4/msvc-nothrow.m4 gdb-10.2/gnulib/import/m4/msvc-nothrow.m4 --- gdb-9.1/gnulib/import/m4/msvc-nothrow.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/msvc-nothrow.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ # msvc-nothrow.m4 serial 1 -dnl Copyright (C) 2011-2016 Free Software Foundation, Inc. +dnl Copyright (C) 2011-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. diff -Nru gdb-9.1/gnulib/import/m4/multiarch.m4 gdb-10.2/gnulib/import/m4/multiarch.m4 --- gdb-9.1/gnulib/import/m4/multiarch.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/multiarch.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ # multiarch.m4 serial 7 -dnl Copyright (C) 2008-2016 Free Software Foundation, Inc. +dnl Copyright (C) 2008-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. diff -Nru gdb-9.1/gnulib/import/m4/netinet_in_h.m4 gdb-10.2/gnulib/import/m4/netinet_in_h.m4 --- gdb-9.1/gnulib/import/m4/netinet_in_h.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/netinet_in_h.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ # netinet_in_h.m4 serial 5 -dnl Copyright (C) 2006-2016 Free Software Foundation, Inc. +dnl Copyright (C) 2006-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. diff -Nru gdb-9.1/gnulib/import/m4/nocrash.m4 gdb-10.2/gnulib/import/m4/nocrash.m4 --- gdb-9.1/gnulib/import/m4/nocrash.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/nocrash.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ -# nocrash.m4 serial 4 -dnl Copyright (C) 2005, 2009-2016 Free Software Foundation, Inc. +# nocrash.m4 serial 5 +dnl Copyright (C) 2005, 2009-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -53,7 +53,7 @@ /* Allocate a port on which the thread shall listen for exceptions. */ if (mach_port_allocate (self, MACH_PORT_RIGHT_RECEIVE, &our_exception_port) == KERN_SUCCESS) { - /* See http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/mach_port_insert_right.html. */ + /* See https://web.mit.edu/darwin/src/modules/xnu/osfmk/man/mach_port_insert_right.html. */ if (mach_port_insert_right (self, our_exception_port, our_exception_port, MACH_MSG_TYPE_MAKE_SEND) == KERN_SUCCESS) { @@ -72,14 +72,14 @@ for a particular thread. This has the effect that when our exception port gets the message, the thread specific exception port has already been asked, and we don't need to bother about it. - See http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/task_set_exception_ports.html. */ + See https://web.mit.edu/darwin/src/modules/xnu/osfmk/man/task_set_exception_ports.html. */ task_set_exception_ports (self, mask, our_exception_port, EXCEPTION_DEFAULT, MACHINE_THREAD_STATE); } } } } -#elif (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ +#elif defined _WIN32 && ! defined __CYGWIN__ /* Avoid a crash on native Windows. */ #define WIN32_LEAN_AND_MEAN #include <windows.h> diff -Nru gdb-9.1/gnulib/import/m4/off_t.m4 gdb-10.2/gnulib/import/m4/off_t.m4 --- gdb-9.1/gnulib/import/m4/off_t.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/off_t.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ # off_t.m4 serial 1 -dnl Copyright (C) 2012-2016 Free Software Foundation, Inc. +dnl Copyright (C) 2012-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. diff -Nru gdb-9.1/gnulib/import/m4/onceonly.m4 gdb-10.2/gnulib/import/m4/onceonly.m4 --- gdb-9.1/gnulib/import/m4/onceonly.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/onceonly.m4 1970-01-01 00:00:00.000000000 +0000 @@ -1,104 +0,0 @@ -# onceonly.m4 serial 9 -dnl Copyright (C) 2002-2003, 2005-2006, 2008-2016 Free Software Foundation, -dnl Inc. -dnl -dnl This file is free software; you can redistribute it and/or modify -dnl it under the terms of the GNU General Public License as published by -dnl the Free Software Foundation; either version 3 of the License, or -dnl (at your option) any later version. -dnl -dnl This file is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -dnl GNU General Public License for more details. -dnl -dnl You should have received a copy of the GNU General Public License -dnl along with this file. If not, see <http://www.gnu.org/licenses/>. -dnl -dnl As a special exception to the GNU General Public License, -dnl this file may be distributed as part of a program -dnl that contains a configuration script generated by Autoconf, under -dnl the same distribution terms as the rest of that program. - -dnl This file defines some "once only" variants of standard autoconf macros. -dnl AC_CHECK_HEADERS_ONCE like AC_CHECK_HEADERS -dnl AC_CHECK_FUNCS_ONCE like AC_CHECK_FUNCS -dnl AC_CHECK_DECLS_ONCE like AC_CHECK_DECLS -dnl AC_REQUIRE([AC_FUNC_STRCOLL]) like AC_FUNC_STRCOLL -dnl The advantage is that the check for each of the headers/functions/decls -dnl will be put only once into the 'configure' file. It keeps the size of -dnl the 'configure' file down, and avoids redundant output when 'configure' -dnl is run. -dnl The drawback is that the checks cannot be conditionalized. If you write -dnl if some_condition; then gl_CHECK_HEADERS(stdlib.h); fi -dnl inside an AC_DEFUNed function, the gl_CHECK_HEADERS macro call expands to -dnl empty, and the check will be inserted before the body of the AC_DEFUNed -dnl function. - -dnl The original code implemented AC_CHECK_HEADERS_ONCE and AC_CHECK_FUNCS_ONCE -dnl in terms of AC_DEFUN and AC_REQUIRE. This implementation uses diversions to -dnl named sections DEFAULTS and INIT_PREPARE in order to check all requested -dnl headers at once, thus reducing the size of 'configure'. It is known to work -dnl with autoconf 2.57..2.62 at least . The size reduction is ca. 9%. - -dnl Autoconf version 2.59 plus gnulib is required; this file is not needed -dnl with Autoconf 2.60 or greater. But note that autoconf's implementation of -dnl AC_CHECK_DECLS_ONCE expects a comma-separated list of symbols as first -dnl argument! -AC_PREREQ([2.59]) - -# AC_CHECK_HEADERS_ONCE(HEADER1 HEADER2 ...) is a once-only variant of -# AC_CHECK_HEADERS(HEADER1 HEADER2 ...). -AC_DEFUN([AC_CHECK_HEADERS_ONCE], [ - : - m4_foreach_w([gl_HEADER_NAME], [$1], [ - AC_DEFUN([gl_CHECK_HEADER_]m4_quote(m4_translit(gl_HEADER_NAME, - [./-], [___])), [ - m4_divert_text([INIT_PREPARE], - [gl_header_list="$gl_header_list gl_HEADER_NAME"]) - gl_HEADERS_EXPANSION - AH_TEMPLATE(AS_TR_CPP([HAVE_]m4_defn([gl_HEADER_NAME])), - [Define to 1 if you have the <]m4_defn([gl_HEADER_NAME])[> header file.]) - ]) - AC_REQUIRE([gl_CHECK_HEADER_]m4_quote(m4_translit(gl_HEADER_NAME, - [./-], [___]))) - ]) -]) -m4_define([gl_HEADERS_EXPANSION], [ - m4_divert_text([DEFAULTS], [gl_header_list=]) - AC_CHECK_HEADERS([$gl_header_list]) - m4_define([gl_HEADERS_EXPANSION], []) -]) - -# AC_CHECK_FUNCS_ONCE(FUNC1 FUNC2 ...) is a once-only variant of -# AC_CHECK_FUNCS(FUNC1 FUNC2 ...). -AC_DEFUN([AC_CHECK_FUNCS_ONCE], [ - : - m4_foreach_w([gl_FUNC_NAME], [$1], [ - AC_DEFUN([gl_CHECK_FUNC_]m4_defn([gl_FUNC_NAME]), [ - m4_divert_text([INIT_PREPARE], - [gl_func_list="$gl_func_list gl_FUNC_NAME"]) - gl_FUNCS_EXPANSION - AH_TEMPLATE(AS_TR_CPP([HAVE_]m4_defn([gl_FUNC_NAME])), - [Define to 1 if you have the ']m4_defn([gl_FUNC_NAME])[' function.]) - ]) - AC_REQUIRE([gl_CHECK_FUNC_]m4_defn([gl_FUNC_NAME])) - ]) -]) -m4_define([gl_FUNCS_EXPANSION], [ - m4_divert_text([DEFAULTS], [gl_func_list=]) - AC_CHECK_FUNCS([$gl_func_list]) - m4_define([gl_FUNCS_EXPANSION], []) -]) - -# AC_CHECK_DECLS_ONCE(DECL1 DECL2 ...) is a once-only variant of -# AC_CHECK_DECLS(DECL1, DECL2, ...). -AC_DEFUN([AC_CHECK_DECLS_ONCE], [ - : - m4_foreach_w([gl_DECL_NAME], [$1], [ - AC_DEFUN([gl_CHECK_DECL_]m4_defn([gl_DECL_NAME]), [ - AC_CHECK_DECLS(m4_defn([gl_DECL_NAME])) - ]) - AC_REQUIRE([gl_CHECK_DECL_]m4_defn([gl_DECL_NAME])) - ]) -]) diff -Nru gdb-9.1/gnulib/import/m4/openat.m4 gdb-10.2/gnulib/import/m4/openat.m4 --- gdb-9.1/gnulib/import/m4/openat.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/openat.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,7 +1,7 @@ -# serial 45 +# serial 46 # See if we need to use our replacement for Solaris' openat et al functions. -dnl Copyright (C) 2004-2016 Free Software Foundation, Inc. +dnl Copyright (C) 2004-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -14,10 +14,12 @@ AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_CHECK_FUNCS_ONCE([openat]) AC_REQUIRE([gl_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK]) - case $ac_cv_func_openat+$gl_cv_func_lstat_dereferences_slashed_symlink in - yes+*yes) + AC_REQUIRE([gl_PREPROC_O_CLOEXEC]) + case $ac_cv_func_openat+$gl_cv_func_lstat_dereferences_slashed_symlink+$gl_cv_macro_O_CLOEXEC in + yes+*yes+yes) ;; yes+*) + # Solaris 10 lacks O_CLOEXEC. # Solaris 9 has *at functions, but uniformly mishandles trailing # slash in all of them. REPLACE_OPENAT=1 diff -Nru gdb-9.1/gnulib/import/m4/open-cloexec.m4 gdb-10.2/gnulib/import/m4/open-cloexec.m4 --- gdb-9.1/gnulib/import/m4/open-cloexec.m4 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/open-cloexec.m4 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,21 @@ +# Test whether O_CLOEXEC is defined. + +dnl Copyright 2017-2020 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_PREPROC_O_CLOEXEC], +[ + AC_CACHE_CHECK([for O_CLOEXEC], + [gl_cv_macro_O_CLOEXEC], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([[#include <fcntl.h> + #ifndef O_CLOEXEC + choke me; + #endif + ]], + [[return O_CLOEXEC;]])], + [gl_cv_macro_O_CLOEXEC=yes], + [gl_cv_macro_O_CLOEXEC=no])]) +]) diff -Nru gdb-9.1/gnulib/import/m4/opendir.m4 gdb-10.2/gnulib/import/m4/opendir.m4 --- gdb-9.1/gnulib/import/m4/opendir.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/opendir.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ -# opendir.m4 serial 4 -dnl Copyright (C) 2011-2016 Free Software Foundation, Inc. +# opendir.m4 serial 5 +dnl Copyright (C) 2011-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -7,6 +7,7 @@ AC_DEFUN([gl_FUNC_OPENDIR], [ AC_REQUIRE([gl_DIRENT_H_DEFAULTS]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CHECK_FUNCS([opendir]) if test $ac_cv_func_opendir = no; then diff -Nru gdb-9.1/gnulib/import/m4/open.m4 gdb-10.2/gnulib/import/m4/open.m4 --- gdb-9.1/gnulib/import/m4/open.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/open.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ -# open.m4 serial 14 -dnl Copyright (C) 2007-2016 Free Software Foundation, Inc. +# open.m4 serial 15 +dnl Copyright (C) 2007-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -7,6 +7,7 @@ AC_DEFUN([gl_FUNC_OPEN], [ AC_REQUIRE([AC_CANONICAL_HOST]) + AC_REQUIRE([gl_PREPROC_O_CLOEXEC]) case "$host_os" in mingw* | pw*) REPLACE_OPEN=1 @@ -15,48 +16,12 @@ dnl open("foo/") should not create a file when the file name has a dnl trailing slash. FreeBSD only has the problem on symlinks. AC_CHECK_FUNCS_ONCE([lstat]) - AC_CACHE_CHECK([whether open recognizes a trailing slash], - [gl_cv_func_open_slash], - [# Assume that if we have lstat, we can also check symlinks. - if test $ac_cv_func_lstat = yes; then - touch conftest.tmp - ln -s conftest.tmp conftest.lnk - fi - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -#include <fcntl.h> -#if HAVE_UNISTD_H -# include <unistd.h> -#endif -int main () -{ - int result = 0; -#if HAVE_LSTAT - if (open ("conftest.lnk/", O_RDONLY) != -1) - result |= 1; -#endif - if (open ("conftest.sl/", O_CREAT, 0600) >= 0) - result |= 2; - return result; -}]])], - [gl_cv_func_open_slash=yes], - [gl_cv_func_open_slash=no], - [ -changequote(,)dnl - case "$host_os" in - freebsd* | aix* | hpux* | solaris2.[0-9] | solaris2.[0-9].*) - gl_cv_func_open_slash="guessing no" ;; - *) - gl_cv_func_open_slash="guessing yes" ;; - esac -changequote([,])dnl - ]) - rm -f conftest.sl conftest.tmp conftest.lnk - ]) + if test "$gl_cv_macro_O_CLOEXEC" != yes; then + REPLACE_OPEN=1 + fi + gl_OPEN_TRAILING_SLASH_BUG case "$gl_cv_func_open_slash" in *no) - AC_DEFINE([OPEN_TRAILING_SLASH_BUG], [1], - [Define to 1 if open() fails to recognize a trailing slash.]) REPLACE_OPEN=1 ;; esac diff -Nru gdb-9.1/gnulib/import/m4/open-slash.m4 gdb-10.2/gnulib/import/m4/open-slash.m4 --- gdb-9.1/gnulib/import/m4/open-slash.m4 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/open-slash.m4 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,59 @@ +# open-slash.m4 serial 1 +dnl Copyright (C) 2007-2020 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl Tests whether open() and creat() recognize a trailing slash. +dnl Sets gl_cv_func_open_slash. +AC_DEFUN([gl_OPEN_TRAILING_SLASH_BUG], +[ + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + dnl open("foo/") should not create a file when the file name has a + dnl trailing slash. FreeBSD only has the problem on symlinks. + AC_CHECK_FUNCS_ONCE([lstat]) + AC_CACHE_CHECK([whether open recognizes a trailing slash], + [gl_cv_func_open_slash], + [# Assume that if we have lstat, we can also check symlinks. + if test $ac_cv_func_lstat = yes; then + touch conftest.tmp + ln -s conftest.tmp conftest.lnk + fi + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include <fcntl.h> +#if HAVE_UNISTD_H +# include <unistd.h> +#endif +int main () +{ + int result = 0; +#if HAVE_LSTAT + if (open ("conftest.lnk/", O_RDONLY) != -1) + result |= 1; +#endif + if (open ("conftest.sl/", O_CREAT, 0600) >= 0) + result |= 2; + return result; +}]])], + [gl_cv_func_open_slash=yes], + [gl_cv_func_open_slash=no], + [ +changequote(,)dnl + case "$host_os" in + freebsd* | aix* | hpux* | solaris2.[0-9] | solaris2.[0-9].*) + gl_cv_func_open_slash="guessing no" ;; + *) + gl_cv_func_open_slash="guessing yes" ;; + esac +changequote([,])dnl + ]) + rm -f conftest.sl conftest.tmp conftest.lnk + ]) + case "$gl_cv_func_open_slash" in + *no) + AC_DEFINE([OPEN_TRAILING_SLASH_BUG], [1], + [Define to 1 if open() fails to recognize a trailing slash.]) + ;; + esac +]) diff -Nru gdb-9.1/gnulib/import/m4/pathmax.m4 gdb-10.2/gnulib/import/m4/pathmax.m4 --- gdb-9.1/gnulib/import/m4/pathmax.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/pathmax.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ -# pathmax.m4 serial 10 -dnl Copyright (C) 2002-2003, 2005-2006, 2009-2016 Free Software Foundation, +# pathmax.m4 serial 11 +dnl Copyright (C) 2002-2003, 2005-2006, 2009-2020 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -29,7 +29,7 @@ # undef PATH_MAX # define PATH_MAX 1024 #endif -#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ +#if defined _WIN32 && ! defined __CYGWIN__ # undef PATH_MAX # define PATH_MAX 260 #endif diff -Nru gdb-9.1/gnulib/import/m4/pthread_rwlock_rdlock.m4 gdb-10.2/gnulib/import/m4/pthread_rwlock_rdlock.m4 --- gdb-9.1/gnulib/import/m4/pthread_rwlock_rdlock.m4 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/pthread_rwlock_rdlock.m4 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,185 @@ +# pthread_rwlock_rdlock.m4 serial 4 +dnl Copyright (C) 2017-2020 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. +dnl Inspired by +dnl https://github.com/linux-test-project/ltp/blob/master/testcases/open_posix_testsuite/conformance/interfaces/pthread_rwlock_rdlock/2-2.c +dnl by Intel Corporation. + +dnl Test whether in a situation where +dnl - an rwlock is taken by a reader and has a writer waiting, +dnl - an additional reader requests the lock, +dnl - the waiting writer and the requesting reader threads have the same +dnl priority, +dnl the requesting reader thread gets blocked, so that at some point the +dnl waiting writer can acquire the lock. +dnl Without such a guarantee, when there a N readers and each of the readers +dnl spends more than 1/Nth of the time with the lock held, there is a high +dnl probability that the waiting writer will not get the lock in a given finite +dnl time, a phenomenon called "writer starvation". +dnl Without such a guarantee, applications have a hard time avoiding writer +dnl starvation. +dnl +dnl POSIX:2017 makes this requirement only for implementations that support TPS +dnl (Thread Priority Scheduling) and only for the scheduling policies SCHED_FIFO +dnl and SCHED_RR, see +dnl https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_rwlock_rdlock.html +dnl but this test verifies the guarantee regardless of TPS and regardless of +dnl scheduling policy. +dnl Glibc does not provide this guarantee (and never will on Linux), see +dnl https://sourceware.org/bugzilla/show_bug.cgi?id=13701 +dnl https://bugzilla.redhat.com/show_bug.cgi?id=1410052 +AC_DEFUN([gl_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER], +[ + AC_REQUIRE([gl_THREADLIB_EARLY]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether pthread_rwlock_rdlock prefers a writer to a reader], + [gl_cv_pthread_rwlock_rdlock_prefer_writer], + [save_LIBS="$LIBS" + LIBS="$LIBS $LIBMULTITHREAD" + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include <errno.h> +#include <pthread.h> +#include <stdlib.h> +#include <unistd.h> + +#define SUCCEED() exit (0) +#define FAILURE() exit (1) +#define UNEXPECTED(n) (exit (10 + (n))) + +/* The main thread creates the waiting writer and the requesting reader threads + in the default way; this guarantees that they have the same priority. + We can reuse the main thread as first reader thread. */ + +static pthread_rwlock_t lock; +static pthread_t reader1; +static pthread_t writer; +static pthread_t reader2; +static pthread_t timer; +/* Used to pass control from writer to reader2 and from reader2 to timer, + as in a relay race. + Passing control from one running thread to another running thread + is most likely faster than to create the second thread. */ +static pthread_mutex_t baton; + +static void * +timer_func (void *ignored) +{ + /* Step 13 (can be before or after step 12): + The timer thread takes the baton, then waits a moment to make sure + it can tell whether the second reader thread is blocked at step 12. */ + if (pthread_mutex_lock (&baton)) + UNEXPECTED (13); + usleep (100000); + /* By the time we get here, it's clear that the second reader thread is + blocked at step 12. This is the desired behaviour. */ + SUCCEED (); +} + +static void * +reader2_func (void *ignored) +{ + int err; + + /* Step 8 (can be before or after step 7): + The second reader thread takes the baton, then waits a moment to make sure + the writer thread has reached step 7. */ + if (pthread_mutex_lock (&baton)) + UNEXPECTED (8); + usleep (100000); + /* Step 9: The second reader thread requests the lock. */ + err = pthread_rwlock_tryrdlock (&lock); + if (err == 0) + FAILURE (); + else if (err != EBUSY) + UNEXPECTED (9); + /* Step 10: Launch a timer, to test whether the next call blocks. */ + if (pthread_create (&timer, NULL, timer_func, NULL)) + UNEXPECTED (10); + /* Step 11: Release the baton. */ + if (pthread_mutex_unlock (&baton)) + UNEXPECTED (11); + /* Step 12: The second reader thread requests the lock. */ + err = pthread_rwlock_rdlock (&lock); + if (err == 0) + FAILURE (); + else + UNEXPECTED (12); +} + +static void * +writer_func (void *ignored) +{ + /* Step 4: Take the baton, so that the second reader thread does not go ahead + too early. */ + if (pthread_mutex_lock (&baton)) + UNEXPECTED (4); + /* Step 5: Create the second reader thread. */ + if (pthread_create (&reader2, NULL, reader2_func, NULL)) + UNEXPECTED (5); + /* Step 6: Release the baton. */ + if (pthread_mutex_unlock (&baton)) + UNEXPECTED (6); + /* Step 7: The writer thread requests the lock. */ + if (pthread_rwlock_wrlock (&lock)) + UNEXPECTED (7); + return NULL; +} + +int +main () +{ + reader1 = pthread_self (); + + /* Step 1: The main thread initializes the lock and the baton. */ + if (pthread_rwlock_init (&lock, NULL)) + UNEXPECTED (1); + if (pthread_mutex_init (&baton, NULL)) + UNEXPECTED (1); + /* Step 2: The main thread acquires the lock as a reader. */ + if (pthread_rwlock_rdlock (&lock)) + UNEXPECTED (2); + /* Step 3: Create the writer thread. */ + if (pthread_create (&writer, NULL, writer_func, NULL)) + UNEXPECTED (3); + /* Job done. Go to sleep. */ + for (;;) + { + sleep (1); + } +} +]])], + [gl_cv_pthread_rwlock_rdlock_prefer_writer=yes], + [gl_cv_pthread_rwlock_rdlock_prefer_writer=no], + [case "$host_os" in + # Guess no on glibc systems. + *-gnu* | gnu*) gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing no" ;; + # Guess no on musl systems. + *-musl*) gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing no" ;; + # Guess no on bionic systems. + *-android*) gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing no" ;; + # Guess yes on native Windows with the mingw-w64 winpthreads library. + # Guess no on native Windows with the gnulib windows-rwlock module. + mingw*) if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then + gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing yes" + else + gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing no" + fi + ;; + # If we don't know, obey --enable-cross-guesses. + *) gl_cv_pthread_rwlock_rdlock_prefer_writer="$gl_cross_guess_normal" ;; + esac + ]) + LIBS="$save_LIBS" + ]) + case "$gl_cv_pthread_rwlock_rdlock_prefer_writer" in + *yes) + AC_DEFINE([HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER], [1], + [Define if the 'pthread_rwlock_rdlock' function prefers a writer to a reader.]) + ;; + esac +]) diff -Nru gdb-9.1/gnulib/import/m4/rawmemchr.m4 gdb-10.2/gnulib/import/m4/rawmemchr.m4 --- gdb-9.1/gnulib/import/m4/rawmemchr.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/rawmemchr.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ # rawmemchr.m4 serial 2 -dnl Copyright (C) 2003, 2007-2016 Free Software Foundation, Inc. +dnl Copyright (C) 2003, 2007-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. diff -Nru gdb-9.1/gnulib/import/m4/readdir.m4 gdb-10.2/gnulib/import/m4/readdir.m4 --- gdb-9.1/gnulib/import/m4/readdir.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/readdir.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ # readdir.m4 serial 1 -dnl Copyright (C) 2011-2016 Free Software Foundation, Inc. +dnl Copyright (C) 2011-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. diff -Nru gdb-9.1/gnulib/import/m4/readlink.m4 gdb-10.2/gnulib/import/m4/readlink.m4 --- gdb-9.1/gnulib/import/m4/readlink.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/readlink.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ -# readlink.m4 serial 12 -dnl Copyright (C) 2003, 2007, 2009-2016 Free Software Foundation, Inc. +# readlink.m4 serial 15 +dnl Copyright (C) 2003, 2007, 2009-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -34,10 +34,12 @@ return readlink ("conftest.lnk2/", buf, sizeof buf) != -1;]])], [gl_cv_func_readlink_works=yes], [gl_cv_func_readlink_works=no], [case "$host_os" in - # Guess yes on glibc systems. - *-gnu*) gl_cv_func_readlink_works="guessing yes" ;; - # If we don't know, assume the worst. - *) gl_cv_func_readlink_works="guessing no" ;; + # Guess yes on Linux systems. + linux-* | linux) gl_cv_func_readlink_works="guessing yes" ;; + # Guess yes on glibc systems. + *-gnu* | gnu*) gl_cv_func_readlink_works="guessing yes" ;; + # If we don't know, obey --enable-cross-guesses. + *) gl_cv_func_readlink_works="$gl_cross_guess_normal" ;; esac ]) rm -f conftest.link conftest.lnk2]) diff -Nru gdb-9.1/gnulib/import/m4/realloc.m4 gdb-10.2/gnulib/import/m4/realloc.m4 --- gdb-9.1/gnulib/import/m4/realloc.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/realloc.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,13 +1,11 @@ -# realloc.m4 serial 14 -dnl Copyright (C) 2007, 2009-2016 Free Software Foundation, Inc. +# realloc.m4 serial 18 +dnl Copyright (C) 2007, 2009-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. -m4_version_prereq([2.70], [] ,[ - # This is adapted with modifications from upstream Autoconf here: -# http://git.savannah.gnu.org/cgit/autoconf.git/commit/?id=04be2b7a29d65d9a08e64e8e56e594c91749598c +# https://git.savannah.gnu.org/cgit/autoconf.git/commit/?id=04be2b7a29d65d9a08e64e8e56e594c91749598c AC_DEFUN([_AC_FUNC_REALLOC_IF], [ AC_REQUIRE([AC_HEADER_STDC])dnl @@ -32,19 +30,24 @@ [ac_cv_func_realloc_0_nonnull=no], [case "$host_os" in # Guess yes on platforms where we know the result. - *-gnu* | freebsd* | netbsd* | openbsd* \ + *-gnu* | gnu* | *-musl* | freebsd* | netbsd* | openbsd* \ | hpux* | solaris* | cygwin* | mingw*) - ac_cv_func_realloc_0_nonnull=yes ;; - # If we don't know, assume the worst. - *) ac_cv_func_realloc_0_nonnull=no ;; + ac_cv_func_realloc_0_nonnull="guessing yes" ;; + # If we don't know, obey --enable-cross-guesses. + *) ac_cv_func_realloc_0_nonnull="$gl_cross_guess_normal" ;; esac ]) ]) - AS_IF([test $ac_cv_func_realloc_0_nonnull = yes], [$1], [$2]) + case "$ac_cv_func_realloc_0_nonnull" in + *yes) + $1 + ;; + *) + $2 + ;; + esac ])# AC_FUNC_REALLOC -]) - # gl_FUNC_REALLOC_GNU # ------------------- # Test whether 'realloc (0, 0)' is handled like in GNU libc, and replace diff -Nru gdb-9.1/gnulib/import/m4/rename.m4 gdb-10.2/gnulib/import/m4/rename.m4 --- gdb-9.1/gnulib/import/m4/rename.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/rename.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ -# serial 26 +# serial 32 -# Copyright (C) 2001, 2003, 2005-2006, 2009-2016 Free Software Foundation, Inc. +# Copyright (C) 2001, 2003, 2005-2006, 2009-2020 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -19,7 +19,7 @@ AC_REQUIRE([gl_STDIO_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([lstat]) - dnl Solaris 10, AIX 7.1 mistakenly allow rename("file","name/"). + dnl Solaris 11.3, AIX 7.1 mistakenly allow rename("file","name/"). dnl NetBSD 1.6 mistakenly forbids rename("dir","name/"). dnl FreeBSD 7.2 mistakenly allows rename("file","link-to-file/"). dnl The Solaris bug can be worked around without stripping @@ -55,10 +55,14 @@ [gl_cv_func_rename_slash_dst_works=no], dnl When crosscompiling, assume rename is broken. [case "$host_os" in - # Guess yes on glibc systems. - *-gnu*) gl_cv_func_rename_slash_dst_works="guessing yes" ;; - # If we don't know, assume the worst. - *) gl_cv_func_rename_slash_dst_works="guessing no" ;; + # Guess yes on Linux systems. + linux-* | linux) gl_cv_func_rename_slash_dst_works="guessing yes" ;; + # Guess yes on glibc systems. + *-gnu*) gl_cv_func_rename_slash_dst_works="guessing yes" ;; + # Guess no on native Windows. + mingw*) gl_cv_func_rename_slash_dst_works="guessing no" ;; + # If we don't know, obey --enable-cross-guesses. + *) gl_cv_func_rename_slash_dst_works="$gl_cross_guess_normal" ;; esac ]) rm -rf conftest.f conftest.f1 conftest.f2 conftest.d1 conftest.d2 conftest.lnk @@ -69,7 +73,7 @@ REPLACE_RENAME=1 AC_DEFINE([RENAME_TRAILING_SLASH_DEST_BUG], [1], [Define if rename does not correctly handle slashes on the destination - argument, such as on Solaris 10 or NetBSD 1.6.]) + argument, such as on Solaris 11 or NetBSD 1.6.]) ;; esac @@ -107,10 +111,14 @@ [gl_cv_func_rename_slash_src_works=no], dnl When crosscompiling, assume rename is broken. [case "$host_os" in - # Guess yes on glibc systems. - *-gnu*) gl_cv_func_rename_slash_src_works="guessing yes" ;; - # If we don't know, assume the worst. - *) gl_cv_func_rename_slash_src_works="guessing no" ;; + # Guess yes on Linux systems. + linux-* | linux) gl_cv_func_rename_slash_src_works="guessing yes" ;; + # Guess yes on glibc systems. + *-gnu*) gl_cv_func_rename_slash_src_works="guessing yes" ;; + # Guess yes on native Windows. + mingw*) gl_cv_func_rename_slash_src_works="guessing yes" ;; + # If we don't know, obey --enable-cross-guesses. + *) gl_cv_func_rename_slash_src_works="$gl_cross_guess_normal" ;; esac ]) rm -rf conftest.f conftest.f1 conftest.d1 conftest.d2 conftest.d3 conftest.lnk @@ -132,40 +140,58 @@ AC_CACHE_CHECK([whether rename manages hard links correctly], [gl_cv_func_rename_link_works], [if test $ac_cv_func_link = yes; then - rm -rf conftest.f conftest.f1 - if touch conftest.f && ln conftest.f conftest.f1 && - set x `ls -i conftest.f conftest.f1` && test "$2" = "$4"; then - AC_RUN_IFELSE( - [AC_LANG_PROGRAM([[ -# include <stdio.h> -# include <stdlib.h> -# include <unistd.h> - ]], - [[int result = 0; - if (rename ("conftest.f", "conftest.f1")) - result |= 1; - if (unlink ("conftest.f1")) - result |= 2; - if (rename ("conftest.f", "conftest.f")) - result |= 4; - if (rename ("conftest.f1", "conftest.f1") == 0) - result |= 8; - return result; - ]])], - [gl_cv_func_rename_link_works=yes], - [gl_cv_func_rename_link_works=no], - dnl When crosscompiling, assume rename is broken. - [case "$host_os" in - # Guess yes on glibc systems. - *-gnu*) gl_cv_func_rename_link_works="guessing yes" ;; - # If we don't know, assume the worst. - *) gl_cv_func_rename_link_works="guessing no" ;; - esac - ]) + if test $cross_compiling != yes; then + rm -rf conftest.f conftest.f1 conftest.f2 + if touch conftest.f conftest.f2 && ln conftest.f conftest.f1 && + set x `ls -i conftest.f conftest.f1` && test "$2" = "$4"; then + AC_RUN_IFELSE( + [AC_LANG_PROGRAM([[ +# include <errno.h> +# include <stdio.h> +# include <stdlib.h> +# include <unistd.h> + ]], + [[int result = 0; + if (rename ("conftest.f", "conftest.f1")) + result |= 1; + if (unlink ("conftest.f1")) + result |= 2; + + /* Allow either the POSIX-required behavior, where the + previous rename kept conftest.f, or the (better) NetBSD + behavior, where it removed conftest.f. */ + if (rename ("conftest.f", "conftest.f") != 0 + && errno != ENOENT) + result |= 4; + + if (rename ("conftest.f1", "conftest.f1") == 0) + result |= 8; + if (rename ("conftest.f2", "conftest.f2") != 0) + result |= 16; + return result; + ]])], + [gl_cv_func_rename_link_works=yes], + [gl_cv_func_rename_link_works=no], + [dnl We don't get here. + : + ]) + else + gl_cv_func_rename_link_works="guessing no" + fi + rm -rf conftest.f conftest.f1 conftest.f2 else - gl_cv_func_rename_link_works="guessing no" + dnl When crosscompiling, assume rename is broken. + case "$host_os" in + # Guess yes on Linux systems. + linux-* | linux) gl_cv_func_rename_link_works="guessing yes" ;; + # Guess yes on glibc systems. + *-gnu*) gl_cv_func_rename_link_works="guessing yes" ;; + # Guess yes on native Windows. + mingw*) gl_cv_func_rename_link_works="guessing yes" ;; + # If we don't know, obey --enable-cross-guesses. + *) gl_cv_func_rename_link_works="$gl_cross_guess_normal" ;; + esac fi - rm -rf conftest.f conftest.f1 else gl_cv_func_rename_link_works=yes fi @@ -205,10 +231,14 @@ [gl_cv_func_rename_dest_works=no], dnl When crosscompiling, assume rename is broken. [case "$host_os" in - # Guess yes on glibc systems. - *-gnu*) gl_cv_func_rename_dest_works="guessing yes" ;; - # If we don't know, assume the worst. - *) gl_cv_func_rename_dest_works="guessing no" ;; + # Guess yes on Linux systems. + linux-* | linux) gl_cv_func_rename_dest_works="guessing yes" ;; + # Guess yes on glibc systems. + *-gnu*) gl_cv_func_rename_dest_works="guessing yes" ;; + # Guess no on native Windows. + mingw*) gl_cv_func_rename_dest_works="guessing no" ;; + # If we don't know, obey --enable-cross-guesses. + *) gl_cv_func_rename_dest_works="$gl_cross_guess_normal" ;; esac ]) rm -rf conftest.f conftest.d1 conftest.d2 diff -Nru gdb-9.1/gnulib/import/m4/rewinddir.m4 gdb-10.2/gnulib/import/m4/rewinddir.m4 --- gdb-9.1/gnulib/import/m4/rewinddir.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/rewinddir.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ # rewinddir.m4 serial 1 -dnl Copyright (C) 2011-2016 Free Software Foundation, Inc. +dnl Copyright (C) 2011-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. diff -Nru gdb-9.1/gnulib/import/m4/rmdir.m4 gdb-10.2/gnulib/import/m4/rmdir.m4 --- gdb-9.1/gnulib/import/m4/rmdir.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/rmdir.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ -# rmdir.m4 serial 13 -dnl Copyright (C) 2002, 2005, 2009-2016 Free Software Foundation, Inc. +# rmdir.m4 serial 17 +dnl Copyright (C) 2002, 2005, 2009-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -33,10 +33,14 @@ ]])], [gl_cv_func_rmdir_works=yes], [gl_cv_func_rmdir_works=no], [case "$host_os" in - # Guess yes on glibc systems. - *-gnu*) gl_cv_func_rmdir_works="guessing yes" ;; - # If we don't know, assume the worst. - *) gl_cv_func_rmdir_works="guessing no" ;; + # Guess yes on Linux systems. + linux-* | linux) gl_cv_func_rmdir_works="guessing yes" ;; + # Guess yes on glibc systems. + *-gnu* | gnu*) gl_cv_func_rmdir_works="guessing yes" ;; + # Guess no on native Windows. + mingw*) gl_cv_func_rmdir_works="guessing no" ;; + # If we don't know, obey --enable-cross-guesses. + *) gl_cv_func_rmdir_works="$gl_cross_guess_normal" ;; esac ]) rm -rf conftest.dir conftest.file]) diff -Nru gdb-9.1/gnulib/import/m4/save-cwd.m4 gdb-10.2/gnulib/import/m4/save-cwd.m4 --- gdb-9.1/gnulib/import/m4/save-cwd.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/save-cwd.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ # serial 10 -dnl Copyright (C) 2002-2006, 2009-2016 Free Software Foundation, Inc. +dnl Copyright (C) 2002-2006, 2009-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. diff -Nru gdb-9.1/gnulib/import/m4/secure_getenv.m4 gdb-10.2/gnulib/import/m4/secure_getenv.m4 --- gdb-9.1/gnulib/import/m4/secure_getenv.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/secure_getenv.m4 1970-01-01 00:00:00.000000000 +0000 @@ -1,26 +0,0 @@ -# Look up an environment variable more securely. -dnl Copyright 2013-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_FUNC_SECURE_GETENV], -[ - dnl Persuade glibc <stdlib.h> to declare secure_getenv(). - AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) - - AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) - AC_CHECK_FUNCS_ONCE([secure_getenv]) - if test $ac_cv_func_secure_getenv = no; then - HAVE_SECURE_GETENV=0 - fi -]) - -# Prerequisites of lib/secure_getenv.c. -AC_DEFUN([gl_PREREQ_SECURE_GETENV], [ - AC_CHECK_FUNCS([__secure_getenv]) - if test $ac_cv_func___secure_getenv = no; then - AC_CHECK_FUNCS([issetugid]) - fi - AC_CHECK_FUNCS_ONCE([getuid geteuid getgid getegid]) -]) diff -Nru gdb-9.1/gnulib/import/m4/setenv.m4 gdb-10.2/gnulib/import/m4/setenv.m4 --- gdb-9.1/gnulib/import/m4/setenv.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/setenv.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ -# setenv.m4 serial 26 -dnl Copyright (C) 2001-2004, 2006-2016 Free Software Foundation, Inc. +# setenv.m4 serial 29 +dnl Copyright (C) 2001-2004, 2006-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -35,10 +35,12 @@ ]])], [gl_cv_func_setenv_works=yes], [gl_cv_func_setenv_works=no], [case "$host_os" in - # Guess yes on glibc systems. - *-gnu*) gl_cv_func_setenv_works="guessing yes" ;; - # If we don't know, assume the worst. - *) gl_cv_func_setenv_works="guessing no" ;; + # Guess yes on glibc systems. + *-gnu* | gnu*) gl_cv_func_setenv_works="guessing yes" ;; + # Guess yes on musl systems. + *-musl*) gl_cv_func_setenv_works="guessing yes" ;; + # If we don't know, obey --enable-cross-guesses. + *) gl_cv_func_setenv_works="$gl_cross_guess_normal" ;; esac ])]) case "$gl_cv_func_setenv_works" in @@ -129,8 +131,8 @@ [case "$host_os" in # Guess yes on glibc systems. *-gnu*) gl_cv_func_unsetenv_works="guessing yes" ;; - # If we don't know, assume the worst. - *) gl_cv_func_unsetenv_works="guessing no" ;; + # If we don't know, obey --enable-cross-guesses. + *) gl_cv_func_unsetenv_works="$gl_cross_guess_normal" ;; esac ])]) case "$gl_cv_func_unsetenv_works" in diff -Nru gdb-9.1/gnulib/import/m4/setlocale_null.m4 gdb-10.2/gnulib/import/m4/setlocale_null.m4 --- gdb-9.1/gnulib/import/m4/setlocale_null.m4 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/setlocale_null.m4 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,98 @@ +# setlocale_null.m4 serial 2 +dnl Copyright (C) 2019-2020 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_SETLOCALE_NULL], +[ + AC_REQUIRE([AC_CANONICAL_HOST]) + AC_REQUIRE([gl_PTHREADLIB]) + AC_CHECK_HEADERS_ONCE([threads.h]) + + AC_CACHE_CHECK([whether setlocale (LC_ALL, NULL) is multithread-safe], + [gl_cv_func_setlocale_null_all_mtsafe], + [case "$host_os" in + # Guess no on musl libc, macOS, FreeBSD, NetBSD, OpenBSD, AIX, Haiku, Cygwin. + *-musl* | darwin* | freebsd* | netbsd* | openbsd* | aix* | haiku* | cygwin*) + gl_cv_func_setlocale_null_all_mtsafe=no ;; + # Guess yes on glibc, HP-UX, IRIX, Solaris, native Windows. + *-gnu* | gnu* | hpux* | irix* | solaris* | mingw*) + gl_cv_func_setlocale_null_all_mtsafe=yes ;; + # If we don't know, obey --enable-cross-guesses. + *) + gl_cv_func_setlocale_null_all_mtsafe="$gl_cross_guess_normal" ;; + esac + ]) + dnl On platforms without multithreading, there is no issue. + case "$host_os" in + mingw*) ;; + *) + if test $gl_pthread_api = no && test $ac_cv_header_threads_h = no; then + gl_cv_func_setlocale_null_all_mtsafe="trivially yes" + fi + ;; + esac + case "$gl_cv_func_setlocale_null_all_mtsafe" in + *yes) SETLOCALE_NULL_ALL_MTSAFE=1 ;; + *) SETLOCALE_NULL_ALL_MTSAFE=0 ;; + esac + AC_DEFINE_UNQUOTED([SETLOCALE_NULL_ALL_MTSAFE], [$SETLOCALE_NULL_ALL_MTSAFE], + [Define to 1 if setlocale (LC_ALL, NULL) is multithread-safe.]) + + dnl This is about a single category (not LC_ALL). + AC_CACHE_CHECK([whether setlocale (category, NULL) is multithread-safe], + [gl_cv_func_setlocale_null_one_mtsafe], + [case "$host_os" in + # Guess no on OpenBSD, AIX. + openbsd* | aix*) + gl_cv_func_setlocale_null_one_mtsafe=no ;; + # Guess yes on glibc, musl libc, macOS, FreeBSD, NetBSD, HP-UX, IRIX, Solaris, Haiku, Cygwin, native Windows. + *-gnu* | gnu* | *-musl* | darwin* | freebsd* | netbsd* | hpux* | irix* | solaris* | haiku* | cygwin* | mingw*) + gl_cv_func_setlocale_null_one_mtsafe=yes ;; + # If we don't know, obey --enable-cross-guesses. + *) + gl_cv_func_setlocale_null_one_mtsafe="$gl_cross_guess_normal" ;; + esac + ]) + dnl On platforms without multithreading, there is no issue. + case "$host_os" in + mingw*) ;; + *) + if test $gl_pthread_api = no && test $ac_cv_header_threads_h = no; then + gl_cv_func_setlocale_null_one_mtsafe="trivially yes" + fi + ;; + esac + case "$gl_cv_func_setlocale_null_one_mtsafe" in + *yes) SETLOCALE_NULL_ONE_MTSAFE=1 ;; + *) SETLOCALE_NULL_ONE_MTSAFE=0 ;; + esac + AC_DEFINE_UNQUOTED([SETLOCALE_NULL_ONE_MTSAFE], [$SETLOCALE_NULL_ONE_MTSAFE], + [Define to 1 if setlocale (category, NULL) is multithread-safe.]) + + dnl Determine link dependencies of lib/setlocale_null.c and lib/setlocale-lock.c. + if test $SETLOCALE_NULL_ALL_MTSAFE = 0 || test $SETLOCALE_NULL_ONE_MTSAFE = 0; then + case "$host_os" in + mingw*) LIB_SETLOCALE_NULL= ;; + *) + gl_WEAK_SYMBOLS + case "$gl_cv_have_weak" in + *yes) LIB_SETLOCALE_NULL= ;; + *) LIB_SETLOCALE_NULL="$LIBPTHREAD" ;; + esac + ;; + esac + else + LIB_SETLOCALE_NULL= + fi + dnl LIB_SETLOCALE_NULL is expected to be '-pthread' or '-lpthread' on AIX + dnl with gcc or xlc, and empty otherwise. + AC_SUBST([LIB_SETLOCALE_NULL]) +]) + +# Prerequisites of lib/setlocale-lock.c. +AC_DEFUN([gl_PREREQ_SETLOCALE_LOCK], +[ + gl_VISIBILITY +]) diff -Nru gdb-9.1/gnulib/import/m4/signal_h.m4 gdb-10.2/gnulib/import/m4/signal_h.m4 --- gdb-9.1/gnulib/import/m4/signal_h.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/signal_h.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ -# signal_h.m4 serial 18 -dnl Copyright (C) 2007-2016 Free Software Foundation, Inc. +# signal_h.m4 serial 19 +dnl Copyright (C) 2007-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -34,6 +34,8 @@ ]], [pthread_sigmask sigaction sigaddset sigdelset sigemptyset sigfillset sigismember sigpending sigprocmask]) + + AC_REQUIRE([AC_C_RESTRICT]) ]) AC_DEFUN([gl_CHECK_TYPE_SIGSET_T], diff -Nru gdb-9.1/gnulib/import/m4/socklen.m4 gdb-10.2/gnulib/import/m4/socklen.m4 --- gdb-9.1/gnulib/import/m4/socklen.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/socklen.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ -# socklen.m4 serial 10 -dnl Copyright (C) 2005-2007, 2009-2016 Free Software Foundation, Inc. +# socklen.m4 serial 11 +dnl Copyright (C) 2005-2007, 2009-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -15,8 +15,8 @@ AC_DEFUN([gl_TYPE_SOCKLEN_T], [AC_REQUIRE([gl_CHECK_SOCKET_HEADERS])dnl AC_CHECK_TYPE([socklen_t], , - [AC_MSG_CHECKING([for socklen_t equivalent]) - AC_CACHE_VAL([gl_cv_socklen_t_equiv], + [AC_CACHE_CHECK([for socklen_t equivalent], + [gl_cv_socklen_t_equiv], [# Systems have either "struct sockaddr *" or # "void *" as the second argument to getpeername gl_cv_socklen_t_equiv= @@ -34,11 +34,10 @@ done test "$gl_cv_socklen_t_equiv" != "" && break done - ]) - if test "$gl_cv_socklen_t_equiv" = ""; then - AC_MSG_ERROR([Cannot find a type to use in place of socklen_t]) - fi - AC_MSG_RESULT([$gl_cv_socklen_t_equiv]) + if test "$gl_cv_socklen_t_equiv" = ""; then + AC_MSG_ERROR([Cannot find a type to use in place of socklen_t]) + fi + ]) AC_DEFINE_UNQUOTED([socklen_t], [$gl_cv_socklen_t_equiv], [type to use in place of socklen_t if not defined])], [gl_SOCKET_HEADERS])]) diff -Nru gdb-9.1/gnulib/import/m4/sockpfaf.m4 gdb-10.2/gnulib/import/m4/sockpfaf.m4 --- gdb-9.1/gnulib/import/m4/sockpfaf.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/sockpfaf.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ -# sockpfaf.m4 serial 8 -dnl Copyright (C) 2004, 2006, 2009-2016 Free Software Foundation, Inc. +# sockpfaf.m4 serial 9 +dnl Copyright (C) 2004, 2006, 2009-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -16,8 +16,8 @@ AC_REQUIRE([gl_HEADER_SYS_SOCKET]) AC_CHECK_HEADERS_ONCE([netinet/in.h]) - AC_MSG_CHECKING([for IPv4 sockets]) - AC_CACHE_VAL([gl_cv_socket_ipv4], + AC_CACHE_CHECK([for IPv4 sockets], + [gl_cv_socket_ipv4], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h> #ifdef HAVE_SYS_SOCKET_H #include <sys/socket.h> @@ -31,13 +31,12 @@ [[int x = AF_INET; struct in_addr y; struct sockaddr_in z; if (&x && &y && &z) return 0;]])], gl_cv_socket_ipv4=yes, gl_cv_socket_ipv4=no)]) - AC_MSG_RESULT([$gl_cv_socket_ipv4]) if test $gl_cv_socket_ipv4 = yes; then AC_DEFINE([HAVE_IPV4], [1], [Define to 1 if <sys/socket.h> defines AF_INET.]) fi - AC_MSG_CHECKING([for IPv6 sockets]) - AC_CACHE_VAL([gl_cv_socket_ipv6], + AC_CACHE_CHECK([for IPv6 sockets], + [gl_cv_socket_ipv6], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h> #ifdef HAVE_SYS_SOCKET_H #include <sys/socket.h> @@ -54,7 +53,6 @@ [[int x = AF_INET6; struct in6_addr y; struct sockaddr_in6 z; if (&x && &y && &z) return 0;]])], gl_cv_socket_ipv6=yes, gl_cv_socket_ipv6=no)]) - AC_MSG_RESULT([$gl_cv_socket_ipv6]) if test $gl_cv_socket_ipv6 = yes; then AC_DEFINE([HAVE_IPV6], [1], [Define to 1 if <sys/socket.h> defines AF_INET6.]) fi @@ -65,8 +63,8 @@ AC_REQUIRE([gl_HEADER_SYS_SOCKET]) AC_CHECK_HEADERS_ONCE([sys/un.h]) - AC_MSG_CHECKING([for UNIX domain sockets]) - AC_CACHE_VAL([gl_cv_socket_unix], + AC_CACHE_CHECK([for UNIX domain sockets], + [gl_cv_socket_unix], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h> #ifdef HAVE_SYS_SOCKET_H #include <sys/socket.h> @@ -80,7 +78,6 @@ [[int x = AF_UNIX; struct sockaddr_un y; if (&x && &y) return 0;]])], gl_cv_socket_unix=yes, gl_cv_socket_unix=no)]) - AC_MSG_RESULT([$gl_cv_socket_unix]) if test $gl_cv_socket_unix = yes; then AC_DEFINE([HAVE_UNIXSOCKET], [1], [Define to 1 if <sys/socket.h> defines AF_UNIX.]) fi diff -Nru gdb-9.1/gnulib/import/m4/ssize_t.m4 gdb-10.2/gnulib/import/m4/ssize_t.m4 --- gdb-9.1/gnulib/import/m4/ssize_t.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/ssize_t.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ # ssize_t.m4 serial 5 (gettext-0.18.2) -dnl Copyright (C) 2001-2003, 2006, 2010-2016 Free Software Foundation, Inc. +dnl Copyright (C) 2001-2003, 2006, 2010-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. diff -Nru gdb-9.1/gnulib/import/m4/stat.m4 gdb-10.2/gnulib/import/m4/stat.m4 --- gdb-9.1/gnulib/import/m4/stat.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/stat.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ -# serial 11 +# serial 17 -# Copyright (C) 2009-2016 Free Software Foundation, Inc. +# Copyright (C) 2009-2020 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -8,64 +8,78 @@ AC_DEFUN([gl_FUNC_STAT], [ - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([lstat]) - dnl mingw is the only known platform where stat(".") and stat("./") differ - AC_CACHE_CHECK([whether stat handles trailing slashes on directories], - [gl_cv_func_stat_dir_slash], - [AC_RUN_IFELSE( - [AC_LANG_PROGRAM( - [[#include <sys/stat.h> -]], [[struct stat st; return stat (".", &st) != stat ("./", &st);]])], - [gl_cv_func_stat_dir_slash=yes], [gl_cv_func_stat_dir_slash=no], - [case $host_os in - mingw*) gl_cv_func_stat_dir_slash="guessing no";; - *) gl_cv_func_stat_dir_slash="guessing yes";; - esac])]) - dnl AIX 7.1, Solaris 9, mingw64 mistakenly succeed on stat("file/"). - dnl (For mingw, this is due to a broken stat() override in libmingwex.a.) - dnl FreeBSD 7.2 mistakenly succeeds on stat("link-to-file/"). - AC_CACHE_CHECK([whether stat handles trailing slashes on files], - [gl_cv_func_stat_file_slash], - [touch conftest.tmp - # Assume that if we have lstat, we can also check symlinks. - if test $ac_cv_func_lstat = yes; then - ln -s conftest.tmp conftest.lnk - fi - AC_RUN_IFELSE( - [AC_LANG_PROGRAM( - [[#include <sys/stat.h> + case "$host_os" in + mingw*) + dnl On this platform, the original stat() returns st_atime, st_mtime, + dnl st_ctime values that are affected by the time zone. + dnl REPLACE_STAT=1 + ;; + *) + dnl AIX 7.1, Solaris 9, mingw64 mistakenly succeed on stat("file/"). + dnl (For mingw, this is due to a broken stat() override in libmingwex.a.) + dnl FreeBSD 7.2 mistakenly succeeds on stat("link-to-file/"). + AC_CACHE_CHECK([whether stat handles trailing slashes on files], + [gl_cv_func_stat_file_slash], + [touch conftest.tmp + # Assume that if we have lstat, we can also check symlinks. + if test $ac_cv_func_lstat = yes; then + ln -s conftest.tmp conftest.lnk + fi + AC_RUN_IFELSE( + [AC_LANG_PROGRAM( + [[#include <sys/stat.h> ]], [[int result = 0; - struct stat st; - if (!stat ("conftest.tmp/", &st)) - result |= 1; + struct stat st; + if (!stat ("conftest.tmp/", &st)) + result |= 1; #if HAVE_LSTAT - if (!stat ("conftest.lnk/", &st)) - result |= 2; + if (!stat ("conftest.lnk/", &st)) + result |= 2; #endif - return result; - ]])], - [gl_cv_func_stat_file_slash=yes], [gl_cv_func_stat_file_slash=no], - [case "$host_os" in - # Guess yes on glibc systems. - *-gnu*) gl_cv_func_stat_file_slash="guessing yes" ;; - # If we don't know, assume the worst. - *) gl_cv_func_stat_file_slash="guessing no" ;; - esac - ]) - rm -f conftest.tmp conftest.lnk]) - case $gl_cv_func_stat_dir_slash in - *no) REPLACE_STAT=1 - AC_DEFINE([REPLACE_FUNC_STAT_DIR], [1], [Define to 1 if stat needs - help when passed a directory name with a trailing slash]);; - esac - case $gl_cv_func_stat_file_slash in - *no) REPLACE_STAT=1 - AC_DEFINE([REPLACE_FUNC_STAT_FILE], [1], [Define to 1 if stat needs - help when passed a file name with a trailing slash]);; + return result; + ]])], + [gl_cv_func_stat_file_slash=yes], [gl_cv_func_stat_file_slash=no], + [case "$host_os" in + # Guess yes on Linux systems. + linux-* | linux) gl_cv_func_stat_file_slash="guessing yes" ;; + # Guess yes on glibc systems. + *-gnu* | gnu*) gl_cv_func_stat_file_slash="guessing yes" ;; + # If we don't know, obey --enable-cross-guesses. + *) gl_cv_func_stat_file_slash="$gl_cross_guess_normal" ;; + esac + ]) + rm -f conftest.tmp conftest.lnk]) + case $gl_cv_func_stat_file_slash in + *no) + REPLACE_STAT=1 + AC_DEFINE([REPLACE_FUNC_STAT_FILE], [1], [Define to 1 if stat needs + help when passed a file name with a trailing slash]);; + esac + case $host_os in + dnl Solaris stat can return a negative tv_nsec. + solaris*) + REPLACE_FSTAT=1 ;; + esac + ;; esac ]) -# Prerequisites of lib/stat.c. -AC_DEFUN([gl_PREREQ_STAT], [:]) +# Prerequisites of lib/stat.c and lib/stat-w32.c. +AC_DEFUN([gl_PREREQ_STAT], [ + AC_REQUIRE([gl_HEADER_SYS_STAT_H]) + AC_REQUIRE([gl_PREREQ_STAT_W32]) + : +]) + +# Prerequisites of lib/stat-w32.c. +AC_DEFUN([gl_PREREQ_STAT_W32], [ + AC_REQUIRE([AC_CANONICAL_HOST]) + case "$host_os" in + mingw*) + AC_CHECK_HEADERS([sdkddkver.h]) + ;; + esac +]) diff -Nru gdb-9.1/gnulib/import/m4/stat-time.m4 gdb-10.2/gnulib/import/m4/stat-time.m4 --- gdb-9.1/gnulib/import/m4/stat-time.m4 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/stat-time.m4 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,83 @@ +# Checks for stat-related time functions. + +# Copyright (C) 1998-1999, 2001, 2003, 2005-2007, 2009-2020 Free Software +# Foundation, Inc. + +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +dnl From Paul Eggert. + +# st_atim.tv_nsec - Linux, Solaris, Cygwin +# st_atimespec.tv_nsec - FreeBSD, NetBSD, if ! defined _POSIX_SOURCE +# st_atimensec - FreeBSD, NetBSD, if defined _POSIX_SOURCE +# st_atim.st__tim.tv_nsec - UnixWare (at least 2.1.2 through 7.1) + +# st_birthtimespec - FreeBSD, NetBSD (hidden on OpenBSD 3.9, anyway) +# st_birthtim - Cygwin 1.7.0+ + +AC_DEFUN([gl_STAT_TIME], +[ + AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) + AC_CHECK_HEADERS_ONCE([sys/time.h]) + + AC_CHECK_MEMBERS([struct stat.st_atim.tv_nsec], + [AC_CACHE_CHECK([whether struct stat.st_atim is of type struct timespec], + [ac_cv_typeof_struct_stat_st_atim_is_struct_timespec], + [AC_COMPILE_IFELSE([AC_LANG_PROGRAM( + [[ + #include <sys/types.h> + #include <sys/stat.h> + #if HAVE_SYS_TIME_H + # include <sys/time.h> + #endif + #include <time.h> + struct timespec ts; + struct stat st; + ]], + [[ + st.st_atim = ts; + ]])], + [ac_cv_typeof_struct_stat_st_atim_is_struct_timespec=yes], + [ac_cv_typeof_struct_stat_st_atim_is_struct_timespec=no])]) + if test $ac_cv_typeof_struct_stat_st_atim_is_struct_timespec = yes; then + AC_DEFINE([TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC], [1], + [Define to 1 if the type of the st_atim member of a struct stat is + struct timespec.]) + fi], + [AC_CHECK_MEMBERS([struct stat.st_atimespec.tv_nsec], [], + [AC_CHECK_MEMBERS([struct stat.st_atimensec], [], + [AC_CHECK_MEMBERS([struct stat.st_atim.st__tim.tv_nsec], [], [], + [#include <sys/types.h> + #include <sys/stat.h>])], + [#include <sys/types.h> + #include <sys/stat.h>])], + [#include <sys/types.h> + #include <sys/stat.h>])], + [#include <sys/types.h> + #include <sys/stat.h>]) +]) + +# Check for st_birthtime, a feature from UFS2 (FreeBSD, NetBSD, OpenBSD, etc.) +# and NTFS (Cygwin). +# There was a time when this field was named st_createtime (21 June +# 2002 to 16 July 2002) But that window is very small and applied only +# to development code, so systems still using that configuration are +# not supported. See revisions 1.10 and 1.11 of FreeBSD's +# src/sys/ufs/ufs/dinode.h. +# +AC_DEFUN([gl_STAT_BIRTHTIME], +[ + AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) + AC_CHECK_HEADERS_ONCE([sys/time.h]) + AC_CHECK_MEMBERS([struct stat.st_birthtimespec.tv_nsec], [], + [AC_CHECK_MEMBERS([struct stat.st_birthtimensec], [], + [AC_CHECK_MEMBERS([struct stat.st_birthtim.tv_nsec], [], [], + [#include <sys/types.h> + #include <sys/stat.h>])], + [#include <sys/types.h> + #include <sys/stat.h>])], + [#include <sys/types.h> + #include <sys/stat.h>]) +]) diff -Nru gdb-9.1/gnulib/import/m4/stdalign.m4 gdb-10.2/gnulib/import/m4/stdalign.m4 --- gdb-9.1/gnulib/import/m4/stdalign.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/stdalign.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ # Check for stdalign.h that conforms to C11. -dnl Copyright 2011-2016 Free Software Foundation, Inc. +dnl Copyright 2011-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -18,7 +18,7 @@ /* Test that alignof yields a result consistent with offsetof. This catches GCC bug 52023 - <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52023>. */ + <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52023>. */ #ifdef __cplusplus template <class t> struct alignof_helper { char a; t b; }; # define ao(type) offsetof (alignof_helper<type>, b) @@ -35,8 +35,8 @@ || (defined __APPLE__ && defined __MACH__ \ ? 4 < __GNUC__ + (1 <= __GNUC_MINOR__) \ : __GNUC__) \ - || __HP_cc || __HP_aCC || __IBMC__ || __IBMCPP__ \ - || __ICC || 0x5110 <= __SUNPRO_C \ + || (__ia64 && (61200 <= __HP_cc || 61200 <= __HP_aCC)) \ + || __ICC || 0x590 <= __SUNPRO_C || 0x0600 <= __xlC__ \ || 1300 <= _MSC_VER) struct alignas_test { char c; char alignas (8) alignas_8; }; char test_alignas[offsetof (struct alignas_test, alignas_8) == 8 diff -Nru gdb-9.1/gnulib/import/m4/stdbool.m4 gdb-10.2/gnulib/import/m4/stdbool.m4 --- gdb-9.1/gnulib/import/m4/stdbool.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/stdbool.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,22 +1,36 @@ # Check for stdbool.h that conforms to C99. -dnl Copyright (C) 2002-2006, 2009-2016 Free Software Foundation, Inc. +dnl Copyright (C) 2002-2006, 2009-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. -#serial 7 +#serial 8 # Prepare for substituting <stdbool.h> if it is not supported. AC_DEFUN([AM_STDBOOL_H], [ AC_REQUIRE([AC_CHECK_HEADER_STDBOOL]) + AC_REQUIRE([AC_CANONICAL_HOST]) - # Define two additional variables used in the Makefile substitution. - + dnl On some platforms, <stdbool.h> does not exist or does not conform to C99. + dnl On Solaris 10 with CC=cc CXX=CC, <stdbool.h> exists but is not usable + dnl in C++ mode (and no <cstdbool> exists). In this case, we use our + dnl replacement, also in C mode (for binary compatibility between C and C++). if test "$ac_cv_header_stdbool_h" = yes; then - STDBOOL_H='' + case "$host_os" in + solaris*) + if test -z "$GCC"; then + STDBOOL_H='stdbool.h' + else + STDBOOL_H='' + fi + ;; + *) + STDBOOL_H='' + ;; + esac else STDBOOL_H='stdbool.h' fi @@ -87,8 +101,8 @@ char o[sizeof n == m * sizeof n[0] ? 1 : -1]; char p[-1 - (Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1]; /* Catch a bug in an HP-UX C compiler. See - http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html - http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html + https://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html + https://lists.gnu.org/r/bug-coreutils/2005-11/msg00161.html */ Bool q = true; Bool *pq = &q; diff -Nru gdb-9.1/gnulib/import/m4/stddef_h.m4 gdb-10.2/gnulib/import/m4/stddef_h.m4 --- gdb-9.1/gnulib/import/m4/stddef_h.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/stddef_h.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ dnl A placeholder for <stddef.h>, for platforms that have issues. -# stddef_h.m4 serial 5 -dnl Copyright (C) 2009-2016 Free Software Foundation, Inc. +# stddef_h.m4 serial 6 +dnl Copyright (C) 2009-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -10,13 +10,33 @@ AC_REQUIRE([gl_STDDEF_H_DEFAULTS]) AC_REQUIRE([gt_TYPE_WCHAR_T]) STDDEF_H= - AC_CHECK_TYPE([max_align_t], [], [HAVE_MAX_ALIGN_T=0; STDDEF_H=stddef.h], - [[#include <stddef.h> - ]]) + + dnl Test whether the type max_align_t exists and whether its alignment + dnl "is as great as is supported by the implementation in all contexts". + AC_CACHE_CHECK([for good max_align_t], + [gl_cv_type_max_align_t], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[#include <stddef.h> + unsigned int s = sizeof (max_align_t); + #if defined __GNUC__ || defined __IBM__ALIGNOF__ + int check1[2 * (__alignof__ (double) <= __alignof__ (max_align_t)) - 1]; + int check2[2 * (__alignof__ (long double) <= __alignof__ (max_align_t)) - 1]; + #endif + ]])], + [gl_cv_type_max_align_t=yes], + [gl_cv_type_max_align_t=no]) + ]) + if test $gl_cv_type_max_align_t = no; then + HAVE_MAX_ALIGN_T=0 + STDDEF_H=stddef.h + fi + if test $gt_cv_c_wchar_t = no; then HAVE_WCHAR_T=0 STDDEF_H=stddef.h fi + AC_CACHE_CHECK([whether NULL can be used in arbitrary expressions], [gl_cv_decl_null_works], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stddef.h> @@ -28,6 +48,7 @@ REPLACE_NULL=1 STDDEF_H=stddef.h fi + AC_SUBST([STDDEF_H]) AM_CONDITIONAL([GL_GENERATE_STDDEF_H], [test -n "$STDDEF_H"]) if test -n "$STDDEF_H"; then diff -Nru gdb-9.1/gnulib/import/m4/std-gnu11.m4 gdb-10.2/gnulib/import/m4/std-gnu11.m4 --- gdb-9.1/gnulib/import/m4/std-gnu11.m4 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/std-gnu11.m4 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,824 @@ +# Prefer GNU C11 and C++11 to earlier versions. -*- coding: utf-8 -*- + +# This implementation is taken from GNU Autoconf lib/autoconf/c.m4 +# commit 017d5ddd82854911f0119691d91ea8a1438824d6 +# dated Sun Apr 3 13:57:17 2016 -0700 +# This implementation will be obsolete once we can assume Autoconf 2.70 +# or later is installed everywhere a Gnulib program might be developed. + + +# Copyright (C) 2001-2020 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + +# Written by David MacKenzie, with help from +# Akim Demaille, Paul Eggert, +# François Pinard, Karl Berry, Richard Pixley, Ian Lance Taylor, +# Roland McGrath, Noah Friedman, david d zuhn, and many others. + + +# AC_PROG_CC([COMPILER ...]) +# -------------------------- +# COMPILER ... is a space separated list of C compilers to search for. +# This just gives the user an opportunity to specify an alternative +# search list for the C compiler. +AC_DEFUN_ONCE([AC_PROG_CC], +[AC_LANG_PUSH(C)dnl +AC_ARG_VAR([CC], [C compiler command])dnl +AC_ARG_VAR([CFLAGS], [C compiler flags])dnl +_AC_ARG_VAR_LDFLAGS()dnl +_AC_ARG_VAR_LIBS()dnl +_AC_ARG_VAR_CPPFLAGS()dnl +m4_ifval([$1], + [AC_CHECK_TOOLS(CC, [$1])], +[AC_CHECK_TOOL(CC, gcc) +if test -z "$CC"; then + dnl Here we want: + dnl AC_CHECK_TOOL(CC, cc) + dnl but without the check for a tool without the prefix. + dnl Until the check is removed from there, copy the code: + if test -n "$ac_tool_prefix"; then + AC_CHECK_PROG(CC, [${ac_tool_prefix}cc], [${ac_tool_prefix}cc]) + fi +fi +if test -z "$CC"; then + AC_CHECK_PROG(CC, cc, cc, , , /usr/ucb/cc) +fi +if test -z "$CC"; then + AC_CHECK_TOOLS(CC, cl.exe) +fi +if test -z "$CC"; then + AC_CHECK_TOOL(CC, clang) +fi +]) + +test -z "$CC" && AC_MSG_FAILURE([no acceptable C compiler found in \$PATH]) + +# Provide some information about the compiler. +_AS_ECHO_LOG([checking for _AC_LANG compiler version]) +set X $ac_compile +ac_compiler=$[2] +for ac_option in --version -v -V -qversion -version; do + m4_ifdef([_AC_DO_LIMIT],[_AC_DO_LIMIT],[_AC_DO])([$ac_compiler $ac_option >&AS_MESSAGE_LOG_FD]) +done + +m4_expand_once([_AC_COMPILER_EXEEXT])[]dnl +m4_expand_once([_AC_COMPILER_OBJEXT])[]dnl +_AC_LANG_COMPILER_GNU +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +_AC_PROG_CC_G +dnl +dnl Set ac_prog_cc_stdc to the supported C version. +dnl Also set the documented variable ac_cv_prog_cc_stdc; +dnl its name was chosen when it was cached, but it is no longer cached. +_AC_PROG_CC_C11([ac_prog_cc_stdc=c11 + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11], + [_AC_PROG_CC_C99([ac_prog_cc_stdc=c99 + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99], + [_AC_PROG_CC_C89([ac_prog_cc_stdc=c89 + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89], + [ac_prog_cc_stdc=no + ac_cv_prog_cc_stdc=no])])]) +dnl +AC_LANG_POP(C)dnl +])# AC_PROG_CC + + + +# AC_PROG_CXX([LIST-OF-COMPILERS]) +# -------------------------------- +# LIST-OF-COMPILERS is a space separated list of C++ compilers to search +# for (if not specified, a default list is used). This just gives the +# user an opportunity to specify an alternative search list for the C++ +# compiler. +# aCC HP-UX C++ compiler much better than `CC', so test before. +# FCC Fujitsu C++ compiler +# KCC KAI C++ compiler +# RCC Rational C++ +# xlC_r AIX C Set++ (with support for reentrant code) +# xlC AIX C Set++ +AC_DEFUN([AC_PROG_CXX], +[AC_LANG_PUSH(C++)dnl +AC_ARG_VAR([CXX], [C++ compiler command])dnl +AC_ARG_VAR([CXXFLAGS], [C++ compiler flags])dnl +_AC_ARG_VAR_LDFLAGS()dnl +_AC_ARG_VAR_LIBS()dnl +_AC_ARG_VAR_CPPFLAGS()dnl +_AC_ARG_VAR_PRECIOUS([CCC])dnl +if test -z "$CXX"; then + if test -n "$CCC"; then + CXX=$CCC + else + AC_CHECK_TOOLS(CXX, + [m4_default([$1], + [g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC clang++])], + g++) + fi +fi +# Provide some information about the compiler. +_AS_ECHO_LOG([checking for _AC_LANG compiler version]) +set X $ac_compile +ac_compiler=$[2] +for ac_option in --version -v -V -qversion; do + m4_ifdef([_AC_DO_LIMIT],[_AC_DO_LIMIT],[_AC_DO])([$ac_compiler $ac_option >&AS_MESSAGE_LOG_FD]) +done + +m4_expand_once([_AC_COMPILER_EXEEXT])[]dnl +m4_expand_once([_AC_COMPILER_OBJEXT])[]dnl +_AC_LANG_COMPILER_GNU +if test $ac_compiler_gnu = yes; then + GXX=yes +else + GXX= +fi +_AC_PROG_CXX_G +_AC_PROG_CXX_CXX11([ac_prog_cxx_stdcxx=cxx11 + ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx11 + ac_cv_prog_cxx_cxx98=$ac_cv_prog_cxx_cxx11], + [_AC_PROG_CXX_CXX98([ac_prog_cxx_stdcxx=cxx98 + ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx98], + [ac_prog_cxx_stdcxx=no + ac_cv_prog_cxx_stdcxx=no])]) +AC_LANG_POP(C++)dnl +])# AC_PROG_CXX + + +# _AC_C_STD_TRY(STANDARD, TEST-PROLOGUE, TEST-BODY, OPTION-LIST, +# ACTION-IF-AVAILABLE, ACTION-IF-UNAVAILABLE) +# -------------------------------------------------------------- +# Check whether the C compiler accepts features of STANDARD (e.g `c89', `c99') +# by trying to compile a program of TEST-PROLOGUE and TEST-BODY. If this fails, +# try again with each compiler option in the space-separated OPTION-LIST; if one +# helps, append it to CC. If eventually successful, run ACTION-IF-AVAILABLE, +# else ACTION-IF-UNAVAILABLE. +AC_DEFUN([_AC_C_STD_TRY], +[AC_MSG_CHECKING([for $CC option to enable ]m4_translit($1, [c], [C])[ features]) +AC_CACHE_VAL(ac_cv_prog_cc_$1, +[ac_cv_prog_cc_$1=no +ac_save_CC=$CC +AC_LANG_CONFTEST([AC_LANG_PROGRAM([$2], [$3])]) +for ac_arg in '' $4 +do + CC="$ac_save_CC $ac_arg" + _AC_COMPILE_IFELSE([], [ac_cv_prog_cc_$1=$ac_arg]) + test "x$ac_cv_prog_cc_$1" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC +])# AC_CACHE_VAL +ac_prog_cc_stdc_options= +case "x$ac_cv_prog_cc_$1" in + x) + AC_MSG_RESULT([none needed]) ;; + xno) + AC_MSG_RESULT([unsupported]) ;; + *) + ac_prog_cc_stdc_options=" $ac_cv_prog_cc_$1" + CC=$CC$ac_prog_cc_stdc_options + AC_MSG_RESULT([$ac_cv_prog_cc_$1]) ;; +esac +AS_IF([test "x$ac_cv_prog_cc_$1" != xno], [$5], [$6]) +])# _AC_C_STD_TRY + +# _AC_C_C99_TEST_HEADER +# --------------------- +# A C header suitable for testing for C99. +AC_DEFUN([_AC_C_C99_TEST_HEADER], +[[#include <stdarg.h> +#include <stdbool.h> +#include <stddef.h> +#include <stdlib.h> +#include <wchar.h> +#include <stdio.h> + +// Check varargs macros. These examples are taken from C99 6.10.3.5. +#define debug(...) fprintf (stderr, __VA_ARGS__) +#define showlist(...) puts (#__VA_ARGS__) +#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) +static void +test_varargs_macros (void) +{ + int x = 1234; + int y = 5678; + debug ("Flag"); + debug ("X = %d\n", x); + showlist (The first, second, and third items.); + report (x>y, "x is %d but y is %d", x, y); +} + +// Check long long types. +#define BIG64 18446744073709551615ull +#define BIG32 4294967295ul +#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) +#if !BIG_OK + your preprocessor is broken; +#endif +#if BIG_OK +#else + your preprocessor is broken; +#endif +static long long int bignum = -9223372036854775807LL; +static unsigned long long int ubignum = BIG64; + +struct incomplete_array +{ + int datasize; + double data[]; +}; + +struct named_init { + int number; + const wchar_t *name; + double average; +}; + +typedef const char *ccp; + +static inline int +test_restrict (ccp restrict text) +{ + // See if C++-style comments work. + // Iterate through items via the restricted pointer. + // Also check for declarations in for loops. + for (unsigned int i = 0; *(text+i) != '\0'; ++i) + continue; + return 0; +} + +// Check varargs and va_copy. +static bool +test_varargs (const char *format, ...) +{ + va_list args; + va_start (args, format); + va_list args_copy; + va_copy (args_copy, args); + + const char *str = ""; + int number = 0; + float fnumber = 0; + + while (*format) + { + switch (*format++) + { + case 's': // string + str = va_arg (args_copy, const char *); + break; + case 'd': // int + number = va_arg (args_copy, int); + break; + case 'f': // float + fnumber = va_arg (args_copy, double); + break; + default: + break; + } + } + va_end (args_copy); + va_end (args); + + return *str && number && fnumber; +}]])# _AC_C_C99_TEST_HEADER + +# _AC_C_C99_TEST_BODY +# ------------------- +# A C body suitable for testing for C99, assuming the corresponding header. +AC_DEFUN([_AC_C_C99_TEST_BODY], +[[ + // Check bool. + _Bool success = false; + + // Check restrict. + if (test_restrict ("String literal") == 0) + success = true; + char *restrict newvar = "Another string"; + + // Check varargs. + success &= test_varargs ("s, d' f .", "string", 65, 34.234); + test_varargs_macros (); + + // Check flexible array members. + struct incomplete_array *ia = + malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); + ia->datasize = 10; + for (int i = 0; i < ia->datasize; ++i) + ia->data[i] = i * 1.234; + + // Check named initializers. + struct named_init ni = { + .number = 34, + .name = L"Test wide string", + .average = 543.34343, + }; + + ni.number = 58; + + int dynamic_array[ni.number]; + dynamic_array[ni.number - 1] = 543; + + // work around unused variable warnings + return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x' + || dynamic_array[ni.number - 1] != 543); +]]) + +# _AC_PROG_CC_C99 ([ACTION-IF-AVAILABLE], [ACTION-IF-UNAVAILABLE]) +# ---------------------------------------------------------------- +# If the C compiler is not in ISO C99 mode by default, try to add an +# option to output variable CC to make it so. This macro tries +# various options that select ISO C99 on some system or another. It +# considers the compiler to be in ISO C99 mode if it handles _Bool, +# // comments, flexible array members, inline, long long int, mixed +# code and declarations, named initialization of structs, restrict, +# va_copy, varargs macros, variable declarations in for loops and +# variable length arrays. +AC_DEFUN([_AC_PROG_CC_C99], +[_AC_C_STD_TRY([c99], +[_AC_C_C99_TEST_HEADER], +[_AC_C_C99_TEST_BODY], +dnl Try +dnl GCC -std=gnu99 (unused restrictive modes: -std=c99 -std=iso9899:1999) +dnl IBM XL C -qlanglvl=extc1x (V12.1; does not pass C11 test) +dnl IBM XL C -qlanglvl=extc99 +dnl (pre-V12.1; unused restrictive mode: -qlanglvl=stdc99) +dnl HP cc -AC99 +dnl Intel ICC -std=c99, -c99 (deprecated) +dnl IRIX -c99 +dnl Solaris -D_STDC_C99= +dnl cc's -xc99 option uses linker magic to define the external +dnl symbol __xpg4 as if by "int __xpg4 = 1;", which enables C99 +dnl behavior for C library functions. This is not wanted here, +dnl because it means that a single module compiled with -xc99 +dnl alters C runtime behavior for the entire program, not for +dnl just the module. Instead, define the (private) symbol +dnl _STDC_C99, which suppresses a bogus failure in <stdbool.h>. +dnl The resulting compiler passes the test case here, and that's +dnl good enough. For more, please see the thread starting at: +dnl https://lists.gnu.org/r/autoconf/2010-12/msg00059.html +dnl Tru64 -c99 +dnl with extended modes being tried first. +[[-std=gnu99 -std=c99 -c99 -AC99 -D_STDC_C99= -qlanglvl=extc1x -qlanglvl=extc99]], [$1], [$2])[]dnl +])# _AC_PROG_CC_C99 + + +# _AC_PROG_CC_C11 ([ACTION-IF-AVAILABLE], [ACTION-IF-UNAVAILABLE]) +# ---------------------------------------------------------------- +# If the C compiler is not in ISO C11 mode by default, try to add an +# option to output variable CC to make it so. This macro tries +# various options that select ISO C11 on some system or another. It +# considers the compiler to be in ISO C11 mode if it handles _Alignas, +# _Alignof, _Noreturn, _Static_assert, UTF-8 string literals, +# duplicate typedefs, and anonymous structures and unions. +AC_DEFUN([_AC_PROG_CC_C11], +[_AC_C_STD_TRY([c11], +[_AC_C_C99_TEST_HEADER[ +// Check _Alignas. +char _Alignas (double) aligned_as_double; +char _Alignas (0) no_special_alignment; +extern char aligned_as_int; +char _Alignas (0) _Alignas (int) aligned_as_int; + +// Check _Alignof. +enum +{ + int_alignment = _Alignof (int), + int_array_alignment = _Alignof (int[100]), + char_alignment = _Alignof (char) +}; +_Static_assert (0 < -_Alignof (int), "_Alignof is signed"); + +// Check _Noreturn. +int _Noreturn does_not_return (void) { for (;;) continue; } + +// Check _Static_assert. +struct test_static_assert +{ + int x; + _Static_assert (sizeof (int) <= sizeof (long int), + "_Static_assert does not work in struct"); + long int y; +}; + +// Check UTF-8 literals. +#define u8 syntax error! +char const utf8_literal[] = u8"happens to be ASCII" "another string"; + +// Check duplicate typedefs. +typedef long *long_ptr; +typedef long int *long_ptr; +typedef long_ptr long_ptr; + +// Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1. +struct anonymous +{ + union { + struct { int i; int j; }; + struct { int k; long int l; } w; + }; + int m; +} v1; +]], +[_AC_C_C99_TEST_BODY[ + v1.i = 2; + v1.w.k = 5; + _Static_assert ((offsetof (struct anonymous, i) + == offsetof (struct anonymous, w.k)), + "Anonymous union alignment botch"); +]], +dnl Try +dnl GCC -std=gnu11 (unused restrictive mode: -std=c11) +dnl with extended modes being tried first. +dnl +dnl Do not try -qlanglvl=extc1x, because IBM XL C V12.1 (the latest version as +dnl of September 2012) does not pass the C11 test. For now, try extc1x when +dnl compiling the C99 test instead, since it enables _Static_assert and +dnl _Noreturn, which is a win. If -qlanglvl=extc11 or -qlanglvl=extc1x passes +dnl the C11 test in some future version of IBM XL C, we'll add it here, +dnl preferably extc11. +[[-std=gnu11]], [$1], [$2])[]dnl +])# _AC_PROG_CC_C11 + + +# AC_PROG_CC_C89 +# -------------- +# Do not use AU_ALIAS here and in AC_PROG_CC_C99 and AC_PROG_CC_STDC, +# as that'd be incompatible with how Automake redefines AC_PROG_CC. See +# <https://lists.gnu.org/r/autoconf/2012-10/msg00048.html>. +AU_DEFUN([AC_PROG_CC_C89], + [AC_REQUIRE([AC_PROG_CC])], + [$0 is obsolete; use AC_PROG_CC] +) + +# AC_PROG_CC_C99 +# -------------- +AU_DEFUN([AC_PROG_CC_C99], + [AC_REQUIRE([AC_PROG_CC])], + [$0 is obsolete; use AC_PROG_CC] +) + +# AC_PROG_CC_STDC +# --------------- +AU_DEFUN([AC_PROG_CC_STDC], + [AC_REQUIRE([AC_PROG_CC])], + [$0 is obsolete; use AC_PROG_CC] +) + + +# AC_C_PROTOTYPES +# --------------- +# Check if the C compiler supports prototypes, included if it needs +# options. +AC_DEFUN([AC_C_PROTOTYPES], +[AC_REQUIRE([AC_PROG_CC])dnl +if test "$ac_prog_cc_stdc" != no; then + AC_DEFINE(PROTOTYPES, 1, + [Define to 1 if the C compiler supports function prototypes.]) + AC_DEFINE(__PROTOTYPES, 1, + [Define like PROTOTYPES; this can be used by system headers.]) +fi +])# AC_C_PROTOTYPES + + +# _AC_CXX_STD_TRY(STANDARD, TEST-PROLOGUE, TEST-BODY, OPTION-LIST, +# ACTION-IF-AVAILABLE, ACTION-IF-UNAVAILABLE) +# ---------------------------------------------------------------- +# Check whether the C++ compiler accepts features of STANDARD (e.g +# `cxx98', `cxx11') by trying to compile a program of TEST-PROLOGUE +# and TEST-BODY. If this fails, try again with each compiler option +# in the space-separated OPTION-LIST; if one helps, append it to CXX. +# If eventually successful, run ACTION-IF-AVAILABLE, else +# ACTION-IF-UNAVAILABLE. +AC_DEFUN([_AC_CXX_STD_TRY], +[AC_MSG_CHECKING([for $CXX option to enable ]m4_translit(m4_translit($1, [x], [+]), [a-z], [A-Z])[ features]) +AC_LANG_PUSH(C++)dnl +AC_CACHE_VAL(ac_cv_prog_cxx_$1, +[ac_cv_prog_cxx_$1=no +ac_save_CXX=$CXX +AC_LANG_CONFTEST([AC_LANG_PROGRAM([$2], [$3])]) +for ac_arg in '' $4 +do + CXX="$ac_save_CXX $ac_arg" + _AC_COMPILE_IFELSE([], [ac_cv_prog_cxx_$1=$ac_arg]) + test "x$ac_cv_prog_cxx_$1" != "xno" && break +done +rm -f conftest.$ac_ext +CXX=$ac_save_CXX +])# AC_CACHE_VAL +ac_prog_cxx_stdcxx_options= +case "x$ac_cv_prog_cxx_$1" in + x) + AC_MSG_RESULT([none needed]) ;; + xno) + AC_MSG_RESULT([unsupported]) ;; + *) + ac_prog_cxx_stdcxx_options=" $ac_cv_prog_cxx_$1" + CXX=$CXX$ac_prog_cxx_stdcxx_options + AC_MSG_RESULT([$ac_cv_prog_cxx_$1]) ;; +esac +AC_LANG_POP(C++)dnl +AS_IF([test "x$ac_cv_prog_cxx_$1" != xno], [$5], [$6]) +])# _AC_CXX_STD_TRY + +# _AC_CXX_CXX98_TEST_HEADER +# ------------------------- +# A C++ header suitable for testing for CXX98. +AC_DEFUN([_AC_CXX_CXX98_TEST_HEADER], +[[ +#include <algorithm> +#include <cstdlib> +#include <fstream> +#include <iomanip> +#include <iostream> +#include <list> +#include <map> +#include <set> +#include <sstream> +#include <stdexcept> +#include <string> +#include <utility> +#include <vector> + +namespace test { + typedef std::vector<std::string> string_vec; + typedef std::pair<int,bool> map_value; + typedef std::map<std::string,map_value> map_type; + typedef std::set<int> set_type; + + template<typename T> + class printer { + public: + printer(std::ostringstream& os): os(os) {} + void operator() (T elem) { os << elem << std::endl; } + private: + std::ostringstream& os; + }; +} +]])# _AC_CXX_CXX98_TEST_HEADER + +# _AC_CXX_CXX98_TEST_BODY +# ----------------------- +# A C++ body suitable for testing for CXX98, assuming the corresponding header. +AC_DEFUN([_AC_CXX_CXX98_TEST_BODY], +[[ + +try { + // Basic string. + std::string teststr("ASCII text"); + teststr += " string"; + + // Simple vector. + test::string_vec testvec; + testvec.push_back(teststr); + testvec.push_back("foo"); + testvec.push_back("bar"); + if (testvec.size() != 3) { + throw std::runtime_error("vector size is not 1"); + } + + // Dump vector into stringstream and obtain string. + std::ostringstream os; + for (test::string_vec::const_iterator i = testvec.begin(); + i != testvec.end(); ++i) { + if (i + 1 != testvec.end()) { + os << teststr << '\n'; + } + } + // Check algorithms work. + std::for_each(testvec.begin(), testvec.end(), test::printer<std::string>(os)); + std::string os_out = os.str(); + + // Test pair and map. + test::map_type testmap; + testmap.insert(std::make_pair(std::string("key"), + std::make_pair(53,false))); + + // Test set. + int values[] = {9, 7, 13, 15, 4, 18, 12, 10, 5, 3, 14, 19, 17, 8, 6, 20, 16, 2, 11, 1}; + test::set_type testset(values, values + sizeof(values)/sizeof(values[0])); + std::list<int> testlist(testset.begin(), testset.end()); + std::copy(testset.begin(), testset.end(), std::back_inserter(testlist)); +} catch (const std::exception& e) { + std::cerr << "Caught exception: " << e.what() << std::endl; + + // Test fstream + std::ofstream of("test.txt"); + of << "Test ASCII text\n" << std::flush; + of << "N= " << std::hex << std::setw(8) << std::left << 534 << std::endl; + of.close(); +} +std::exit(0); +]]) + +# _AC_CXX_CXX11_TEST_HEADER +# ------------------------- +# A C++ header suitable for testing for CXX11. +AC_DEFUN([_AC_CXX_CXX11_TEST_HEADER], +[[ +#include <deque> +#include <functional> +#include <memory> +#include <tuple> +#include <array> +#include <regex> +#include <iostream> + +namespace cxx11test +{ + typedef std::shared_ptr<std::string> sptr; + typedef std::weak_ptr<std::string> wptr; + + typedef std::tuple<std::string,int,double> tp; + typedef std::array<int, 20> int_array; + + constexpr int get_val() { return 20; } + + struct testinit + { + int i; + double d; + }; + + class delegate { + public: + delegate(int n) : n(n) {} + delegate(): delegate(2354) {} + + virtual int getval() { return this->n; }; + protected: + int n; + }; + + class overridden : public delegate { + public: + overridden(int n): delegate(n) {} + virtual int getval() override final { return this->n * 2; } + }; + + class nocopy { + public: + nocopy(int i): i(i) {} + nocopy() = default; + nocopy(const nocopy&) = delete; + nocopy & operator=(const nocopy&) = delete; + private: + int i; + }; +} +]])# _AC_CXX_CXX11_TEST_HEADER + +# _AC_CXX_CXX11_TEST_BODY +# ----------------------- +# A C++ body suitable for testing for CXX11, assuming the corresponding header. +AC_DEFUN([_AC_CXX_CXX11_TEST_BODY], +[[ +{ + // Test auto and decltype + std::deque<int> d; + d.push_front(43); + d.push_front(484); + d.push_front(3); + d.push_front(844); + int total = 0; + for (auto i = d.begin(); i != d.end(); ++i) { total += *i; } + + auto a1 = 6538; + auto a2 = 48573953.4; + auto a3 = "String literal"; + + decltype(a2) a4 = 34895.034; +} +{ + // Test constexpr + short sa[cxx11test::get_val()] = { 0 }; +} +{ + // Test initializer lists + cxx11test::testinit il = { 4323, 435234.23544 }; +} +{ + // Test range-based for and lambda + cxx11test::int_array array = {9, 7, 13, 15, 4, 18, 12, 10, 5, 3, 14, 19, 17, 8, 6, 20, 16, 2, 11, 1}; + for (int &x : array) { x += 23; } + std::for_each(array.begin(), array.end(), [](int v1){ std::cout << v1; }); +} +{ + using cxx11test::sptr; + using cxx11test::wptr; + + sptr sp(new std::string("ASCII string")); + wptr wp(sp); + sptr sp2(wp); +} +{ + cxx11test::tp tuple("test", 54, 45.53434); + double d = std::get<2>(tuple); + std::string s; + int i; + std::tie(s,i,d) = tuple; +} +{ + static std::regex filename_regex("^_?([a-z0-9_.]+-)+[a-z0-9]+$"); + std::string testmatch("Test if this string matches"); + bool match = std::regex_search(testmatch, filename_regex); +} +{ + cxx11test::int_array array = {9, 7, 13, 15, 4, 18, 12, 10, 5, 3, 14, 19, 17, 8, 6, 20, 16, 2, 11, 1}; + cxx11test::int_array::size_type size = array.size(); +} +{ + // Test constructor delegation + cxx11test::delegate d1; + cxx11test::delegate d2(); + cxx11test::delegate d3(45); +} +{ + // Test override and final + cxx11test::overridden o1(55464); +} +{ + // Test nullptr + char *c = nullptr; +} +{ + // Test template brackets + std::vector<std::pair<int,char*>> v1; +} +{ + // Unicode literals + char const *utf8 = u8"UTF-8 string \u2500"; + char16_t const *utf16 = u"UTF-8 string \u2500"; + char32_t const *utf32 = U"UTF-32 string \u2500"; +} +]]) + +# _AC_PROG_CXX_CXX98 ([ACTION-IF-AVAILABLE], [ACTION-IF-UNAVAILABLE]) +# ------------------------------------------------------------------- + +# If the C++ compiler is not in ISO C++98 mode by default, try to add +# an option to output variable CXX to make it so. This macro tries +# various options that select ISO C++98 on some system or another. It +# considers the compiler to be in ISO C++98 mode if it handles basic +# features of the std namespace including: string, containers (list, +# map, set, vector), streams (fstreams, iostreams, stringstreams, +# iomanip), pair, exceptions and algorithms. + + +AC_DEFUN([_AC_PROG_CXX_CXX98], +[_AC_CXX_STD_TRY([cxx98], +[_AC_CXX_CXX98_TEST_HEADER], +[_AC_CXX_CXX98_TEST_BODY], +dnl Try +dnl GCC -std=gnu++98 (unused restrictive mode: -std=c++98) +dnl IBM XL C -qlanglvl=extended +dnl HP aC++ -AA +dnl Intel ICC -std=gnu++98 +dnl Solaris N/A (default) +dnl Tru64 N/A (default, but -std gnu could be used) +dnl with extended modes being tried first. +[[-std=gnu++98 -std=c++98 -qlanglvl=extended -AA]], [$1], [$2])[]dnl +])# _AC_PROG_CXX_CXX98 + +# _AC_PROG_CXX_CXX11 ([ACTION-IF-AVAILABLE], [ACTION-IF-UNAVAILABLE]) +# ------------------------------------------------------------------- +# If the C++ compiler is not in ISO CXX11 mode by default, try to add +# an option to output variable CXX to make it so. This macro tries +# various options that select ISO C++11 on some system or another. It +# considers the compiler to be in ISO C++11 mode if it handles all the +# tests from the C++98 checks, plus the following: Language features +# (auto, constexpr, decltype, default/deleted constructors, delegate +# constructors, final, initializer lists, lambda functions, nullptr, +# override, range-based for loops, template brackets without spaces, +# unicode literals) and library features (array, memory (shared_ptr, +# weak_ptr), regex and tuple types). +AC_DEFUN([_AC_PROG_CXX_CXX11], +[_AC_CXX_STD_TRY([cxx11], +[_AC_CXX_CXX11_TEST_HEADER +_AC_CXX_CXX98_TEST_HEADER], +[_AC_CXX_CXX11_TEST_BODY +_AC_CXX_CXX98_TEST_BODY], +dnl Try +dnl GCC -std=gnu++11 (unused restrictive mode: -std=c++11) [and 0x variants] +dnl IBM XL C -qlanglvl=extended0x +dnl (pre-V12.1; unused restrictive mode: -qlanglvl=stdcxx11) +dnl HP aC++ -AA +dnl Intel ICC -std=c++11 -std=c++0x +dnl Solaris N/A (no support) +dnl Tru64 N/A (no support) +dnl with extended modes being tried first. +[[-std=gnu++11 -std=c++11 -std=gnu++0x -std=c++0x -qlanglvl=extended0x -AA]], [$1], [$2])[]dnl +])# _AC_PROG_CXX_CXX11 diff -Nru gdb-9.1/gnulib/import/m4/stdint.m4 gdb-10.2/gnulib/import/m4/stdint.m4 --- gdb-9.1/gnulib/import/m4/stdint.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/stdint.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ -# stdint.m4 serial 48 -dnl Copyright (C) 2001-2016 Free Software Foundation, Inc. +# stdint.m4 serial 54 +dnl Copyright (C) 2001-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -7,27 +7,22 @@ dnl From Paul Eggert and Bruno Haible. dnl Test whether <stdint.h> is supported or must be substituted. +AC_PREREQ([2.61]) + AC_DEFUN_ONCE([gl_STDINT_H], [ AC_PREREQ([2.59])dnl + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_REQUIRE([gl_LIMITS_H]) + AC_REQUIRE([gt_TYPE_WINT_T]) - dnl Check for long long int and unsigned long long int. - AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) - if test $ac_cv_type_long_long_int = yes; then - HAVE_LONG_LONG_INT=1 - else - HAVE_LONG_LONG_INT=0 - fi - AC_SUBST([HAVE_LONG_LONG_INT]) - AC_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT]) - if test $ac_cv_type_unsigned_long_long_int = yes; then - HAVE_UNSIGNED_LONG_LONG_INT=1 - else - HAVE_UNSIGNED_LONG_LONG_INT=0 - fi - AC_SUBST([HAVE_UNSIGNED_LONG_LONG_INT]) + dnl For backward compatibility. Some packages may still be testing these + dnl macros. + AC_DEFINE([HAVE_LONG_LONG_INT], [1], + [Define to 1 if the system has the type 'long long int'.]) + AC_DEFINE([HAVE_UNSIGNED_LONG_LONG_INT], [1], + [Define to 1 if the system has the type 'unsigned long long int'.]) dnl Check for <wchar.h>, in the same way as gl_WCHAR_H does. AC_CHECK_HEADERS_ONCE([wchar.h]) @@ -287,8 +282,12 @@ ]])], [gl_cv_header_working_stdint_h=yes], [], - [dnl When cross-compiling, assume it works. - gl_cv_header_working_stdint_h=yes + [case "$host_os" in + # Guess yes on native Windows. + mingw*) gl_cv_header_working_stdint_h="guessing yes" ;; + # In general, assume it works. + *) gl_cv_header_working_stdint_h="guessing yes" ;; + esac ]) ]) ]) @@ -298,15 +297,16 @@ HAVE_SYS_BITYPES_H=0 HAVE_SYS_INTTYPES_H=0 STDINT_H=stdint.h - if test "$gl_cv_header_working_stdint_h" = yes; then - HAVE_C99_STDINT_H=1 - dnl Now see whether the system <stdint.h> works without - dnl __STDC_CONSTANT_MACROS/__STDC_LIMIT_MACROS defined. - AC_CACHE_CHECK([whether stdint.h predates C++11], - [gl_cv_header_stdint_predates_cxx11_h], - [gl_cv_header_stdint_predates_cxx11_h=yes - AC_COMPILE_IFELSE([ - AC_LANG_PROGRAM([[ + case "$gl_cv_header_working_stdint_h" in + *yes) + HAVE_C99_STDINT_H=1 + dnl Now see whether the system <stdint.h> works without + dnl __STDC_CONSTANT_MACROS/__STDC_LIMIT_MACROS defined. + AC_CACHE_CHECK([whether stdint.h predates C++11], + [gl_cv_header_stdint_predates_cxx11_h], + [gl_cv_header_stdint_predates_cxx11_h=yes + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ #include <stdint.h> ] @@ -314,49 +314,50 @@ [ intmax_t im = INTMAX_MAX; int32_t i32 = INT32_C (0x7fffffff); - ]])], - [gl_cv_header_stdint_predates_cxx11_h=no])]) + ]])], + [gl_cv_header_stdint_predates_cxx11_h=no])]) - if test "$gl_cv_header_stdint_predates_cxx11_h" = yes; then - AC_DEFINE([__STDC_CONSTANT_MACROS], [1], - [Define to 1 if the system <stdint.h> predates C++11.]) - AC_DEFINE([__STDC_LIMIT_MACROS], [1], - [Define to 1 if the system <stdint.h> predates C++11.]) - fi - AC_CACHE_CHECK([whether stdint.h has UINTMAX_WIDTH etc.], - [gl_cv_header_stdint_width], - [gl_cv_header_stdint_width=no - AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM([[ - /* Work if build is not clean. */ - #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 - #ifndef __STDC_WANT_IEC_60559_BFP_EXT__ - #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 - #endif - #include <stdint.h> - ]gl_STDINT_INCLUDES[ - int iw = UINTMAX_WIDTH; - ]])], - [gl_cv_header_stdint_width=yes])]) - if test "$gl_cv_header_stdint_width" = yes; then - STDINT_H= - fi - else - dnl Check for <sys/inttypes.h>, and for - dnl <sys/bitypes.h> (used in Linux libc4 >= 4.6.7 and libc5). - AC_CHECK_HEADERS([sys/inttypes.h sys/bitypes.h]) - if test $ac_cv_header_sys_inttypes_h = yes; then - HAVE_SYS_INTTYPES_H=1 - fi - if test $ac_cv_header_sys_bitypes_h = yes; then - HAVE_SYS_BITYPES_H=1 - fi - gl_STDINT_TYPE_PROPERTIES - fi + if test "$gl_cv_header_stdint_predates_cxx11_h" = yes; then + AC_DEFINE([__STDC_CONSTANT_MACROS], [1], + [Define to 1 if the system <stdint.h> predates C++11.]) + AC_DEFINE([__STDC_LIMIT_MACROS], [1], + [Define to 1 if the system <stdint.h> predates C++11.]) + fi + AC_CACHE_CHECK([whether stdint.h has UINTMAX_WIDTH etc.], + [gl_cv_header_stdint_width], + [gl_cv_header_stdint_width=no + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([[ + /* Work if build is not clean. */ + #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 + #ifndef __STDC_WANT_IEC_60559_BFP_EXT__ + #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 + #endif + #include <stdint.h> + ]gl_STDINT_INCLUDES[ + int iw = UINTMAX_WIDTH; + ]])], + [gl_cv_header_stdint_width=yes])]) + if test "$gl_cv_header_stdint_width" = yes; then + STDINT_H= + fi + ;; + *) + dnl Check for <sys/inttypes.h>, and for + dnl <sys/bitypes.h> (used in Linux libc4 >= 4.6.7 and libc5). + AC_CHECK_HEADERS([sys/inttypes.h sys/bitypes.h]) + if test $ac_cv_header_sys_inttypes_h = yes; then + HAVE_SYS_INTTYPES_H=1 + fi + if test $ac_cv_header_sys_bitypes_h = yes; then + HAVE_SYS_BITYPES_H=1 + fi + gl_STDINT_TYPE_PROPERTIES + ;; + esac - # The substitute stdint.h needs the substitute limit.h's _GL_INTEGER_WIDTH. - LIMITS_H=limits.h - AM_CONDITIONAL([GL_GENERATE_LIMITS_H], [test -n "$LIMITS_H"]) + dnl The substitute stdint.h needs the substitute limit.h's _GL_INTEGER_WIDTH. + gl_REPLACE_LIMITS_H AC_SUBST([HAVE_C99_STDINT_H]) AC_SUBST([HAVE_SYS_BITYPES_H]) @@ -528,13 +529,7 @@ dnl requirement that wint_t is "unchanged by default argument promotions". dnl In this case gnulib's <wchar.h> and <wctype.h> override wint_t. dnl Set the variable BITSIZEOF_WINT_T accordingly. - if test $BITSIZEOF_WINT_T -lt 32; then + if test $GNULIB_OVERRIDES_WINT_T = 1; then BITSIZEOF_WINT_T=32 fi ]) - -dnl Autoconf >= 2.61 has AC_COMPUTE_INT built-in. -dnl Remove this when we can assume autoconf >= 2.61. -m4_ifdef([AC_COMPUTE_INT], [], [ - AC_DEFUN([AC_COMPUTE_INT], [_AC_COMPUTE_INT([$2],[$1],[$3],[$4])]) -]) diff -Nru gdb-9.1/gnulib/import/m4/stdio_h.m4 gdb-10.2/gnulib/import/m4/stdio_h.m4 --- gdb-9.1/gnulib/import/m4/stdio_h.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/stdio_h.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ -# stdio_h.m4 serial 48 -dnl Copyright (C) 2007-2016 Free Software Foundation, Inc. +# stdio_h.m4 serial 50 +dnl Copyright (C) 2007-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -28,7 +28,7 @@ /* For non-mingw systems, compilation will trivially succeed. For mingw, compilation will succeed for older mingw (system printf, "I64d") and fail for newer mingw (gnu printf, "lld"). */ - #if ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) && \ + #if (defined _WIN32 && ! defined __CYGWIN__) && \ (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) extern char PRIdMAX_probe[sizeof PRIdMAX == sizeof "I64d" ? 1 : -1]; #endif @@ -107,6 +107,8 @@ gl_WARN_ON_USE_PREPARE([[#include <stdio.h> ]], [dprintf fpurge fseeko ftello getdelim getline gets pclose popen renameat snprintf tmpfile vdprintf vsnprintf]) + + AC_REQUIRE([AC_C_RESTRICT]) ]) AC_DEFUN([gl_STDIO_MODULE_INDICATOR], diff -Nru gdb-9.1/gnulib/import/m4/stdlib_h.m4 gdb-10.2/gnulib/import/m4/stdlib_h.m4 --- gdb-9.1/gnulib/import/m4/stdlib_h.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/stdlib_h.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ -# stdlib_h.m4 serial 43 -dnl Copyright (C) 2007-2016 Free Software Foundation, Inc. +# stdlib_h.m4 serial 49 +dnl Copyright (C) 2007-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -14,16 +14,21 @@ dnl guaranteed by C89. gl_WARN_ON_USE_PREPARE([[#include <stdlib.h> #if HAVE_SYS_LOADAVG_H +/* OpenIndiana has a bug: <sys/time.h> must be included before + <sys/loadavg.h>. */ +# include <sys/time.h> # include <sys/loadavg.h> #endif #if HAVE_RANDOM_H # include <random.h> #endif ]], [_Exit atoll canonicalize_file_name getloadavg getsubopt grantpt - initstate initstate_r mkdtemp mkostemp mkostemps mkstemp mkstemps - posix_openpt ptsname ptsname_r qsort_r random random_r realpath rpmatch - secure_getenv setenv setstate setstate_r srandom srandom_r - strtod strtoll strtoull unlockpt unsetenv]) + initstate initstate_r mbtowc mkdtemp mkostemp mkostemps mkstemp mkstemps + posix_openpt ptsname ptsname_r qsort_r random random_r reallocarray + realpath rpmatch secure_getenv setenv setstate setstate_r srandom + srandom_r strtod strtold strtoll strtoull unlockpt unsetenv]) + + AC_REQUIRE([AC_C_RESTRICT]) ]) AC_DEFUN([gl_STDLIB_MODULE_INDICATOR], @@ -58,12 +63,14 @@ GNULIB_QSORT_R=0; AC_SUBST([GNULIB_QSORT_R]) GNULIB_RANDOM=0; AC_SUBST([GNULIB_RANDOM]) GNULIB_RANDOM_R=0; AC_SUBST([GNULIB_RANDOM_R]) + GNULIB_REALLOCARRAY=0; AC_SUBST([GNULIB_REALLOCARRAY]) GNULIB_REALLOC_POSIX=0; AC_SUBST([GNULIB_REALLOC_POSIX]) GNULIB_REALPATH=0; AC_SUBST([GNULIB_REALPATH]) GNULIB_RPMATCH=0; AC_SUBST([GNULIB_RPMATCH]) GNULIB_SECURE_GETENV=0; AC_SUBST([GNULIB_SECURE_GETENV]) GNULIB_SETENV=0; AC_SUBST([GNULIB_SETENV]) GNULIB_STRTOD=0; AC_SUBST([GNULIB_STRTOD]) + GNULIB_STRTOLD=0; AC_SUBST([GNULIB_STRTOLD]) GNULIB_STRTOLL=0; AC_SUBST([GNULIB_STRTOLL]) GNULIB_STRTOULL=0; AC_SUBST([GNULIB_STRTOULL]) GNULIB_SYSTEM_POSIX=0; AC_SUBST([GNULIB_SYSTEM_POSIX]) @@ -77,6 +84,9 @@ HAVE_DECL_GETLOADAVG=1; AC_SUBST([HAVE_DECL_GETLOADAVG]) HAVE_GETSUBOPT=1; AC_SUBST([HAVE_GETSUBOPT]) HAVE_GRANTPT=1; AC_SUBST([HAVE_GRANTPT]) + HAVE_INITSTATE=1; AC_SUBST([HAVE_INITSTATE]) + HAVE_DECL_INITSTATE=1; AC_SUBST([HAVE_DECL_INITSTATE]) + HAVE_MBTOWC=1; AC_SUBST([HAVE_MBTOWC]) HAVE_MKDTEMP=1; AC_SUBST([HAVE_MKDTEMP]) HAVE_MKOSTEMP=1; AC_SUBST([HAVE_MKOSTEMP]) HAVE_MKOSTEMPS=1; AC_SUBST([HAVE_MKOSTEMPS]) @@ -89,12 +99,16 @@ HAVE_RANDOM=1; AC_SUBST([HAVE_RANDOM]) HAVE_RANDOM_H=1; AC_SUBST([HAVE_RANDOM_H]) HAVE_RANDOM_R=1; AC_SUBST([HAVE_RANDOM_R]) + HAVE_REALLOCARRAY=1; AC_SUBST([HAVE_REALLOCARRAY]) HAVE_REALPATH=1; AC_SUBST([HAVE_REALPATH]) HAVE_RPMATCH=1; AC_SUBST([HAVE_RPMATCH]) HAVE_SECURE_GETENV=1; AC_SUBST([HAVE_SECURE_GETENV]) HAVE_SETENV=1; AC_SUBST([HAVE_SETENV]) HAVE_DECL_SETENV=1; AC_SUBST([HAVE_DECL_SETENV]) + HAVE_SETSTATE=1; AC_SUBST([HAVE_SETSTATE]) + HAVE_DECL_SETSTATE=1; AC_SUBST([HAVE_DECL_SETSTATE]) HAVE_STRTOD=1; AC_SUBST([HAVE_STRTOD]) + HAVE_STRTOLD=1; AC_SUBST([HAVE_STRTOLD]) HAVE_STRTOLL=1; AC_SUBST([HAVE_STRTOLL]) HAVE_STRTOULL=1; AC_SUBST([HAVE_STRTOULL]) HAVE_STRUCT_RANDOM_DATA=1; AC_SUBST([HAVE_STRUCT_RANDOM_DATA]) @@ -103,6 +117,7 @@ HAVE_DECL_UNSETENV=1; AC_SUBST([HAVE_DECL_UNSETENV]) REPLACE_CALLOC=0; AC_SUBST([REPLACE_CALLOC]) REPLACE_CANONICALIZE_FILE_NAME=0; AC_SUBST([REPLACE_CANONICALIZE_FILE_NAME]) + REPLACE_INITSTATE=0; AC_SUBST([REPLACE_INITSTATE]) REPLACE_MALLOC=0; AC_SUBST([REPLACE_MALLOC]) REPLACE_MBTOWC=0; AC_SUBST([REPLACE_MBTOWC]) REPLACE_MKSTEMP=0; AC_SUBST([REPLACE_MKSTEMP]) @@ -110,11 +125,14 @@ REPLACE_PTSNAME_R=0; AC_SUBST([REPLACE_PTSNAME_R]) REPLACE_PUTENV=0; AC_SUBST([REPLACE_PUTENV]) REPLACE_QSORT_R=0; AC_SUBST([REPLACE_QSORT_R]) + REPLACE_RANDOM=0; AC_SUBST([REPLACE_RANDOM]) REPLACE_RANDOM_R=0; AC_SUBST([REPLACE_RANDOM_R]) REPLACE_REALLOC=0; AC_SUBST([REPLACE_REALLOC]) REPLACE_REALPATH=0; AC_SUBST([REPLACE_REALPATH]) REPLACE_SETENV=0; AC_SUBST([REPLACE_SETENV]) + REPLACE_SETSTATE=0; AC_SUBST([REPLACE_SETSTATE]) REPLACE_STRTOD=0; AC_SUBST([REPLACE_STRTOD]) + REPLACE_STRTOLD=0; AC_SUBST([REPLACE_STRTOLD]) REPLACE_UNSETENV=0; AC_SUBST([REPLACE_UNSETENV]) REPLACE_WCTOMB=0; AC_SUBST([REPLACE_WCTOMB]) ]) diff -Nru gdb-9.1/gnulib/import/m4/strchrnul.m4 gdb-10.2/gnulib/import/m4/strchrnul.m4 --- gdb-9.1/gnulib/import/m4/strchrnul.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/strchrnul.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ # strchrnul.m4 serial 9 -dnl Copyright (C) 2003, 2007, 2009-2016 Free Software Foundation, Inc. +dnl Copyright (C) 2003, 2007, 2009-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. diff -Nru gdb-9.1/gnulib/import/m4/strdup.m4 gdb-10.2/gnulib/import/m4/strdup.m4 --- gdb-9.1/gnulib/import/m4/strdup.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/strdup.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ # strdup.m4 serial 13 -dnl Copyright (C) 2002-2016 Free Software Foundation, Inc. +dnl Copyright (C) 2002-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, diff -Nru gdb-9.1/gnulib/import/m4/strerror.m4 gdb-10.2/gnulib/import/m4/strerror.m4 --- gdb-9.1/gnulib/import/m4/strerror.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/strerror.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ -# strerror.m4 serial 17 -dnl Copyright (C) 2002, 2007-2016 Free Software Foundation, Inc. +# strerror.m4 serial 21 +dnl Copyright (C) 2002, 2007-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -24,10 +24,12 @@ [gl_cv_func_working_strerror=yes], [gl_cv_func_working_strerror=no], [case "$host_os" in - # Guess yes on glibc systems. - *-gnu*) gl_cv_func_working_strerror="guessing yes" ;; - # If we don't know, assume the worst. - *) gl_cv_func_working_strerror="guessing no" ;; + # Guess yes on glibc systems. + *-gnu* | gnu*) gl_cv_func_working_strerror="guessing yes" ;; + # Guess yes on musl systems. + *-musl*) gl_cv_func_working_strerror="guessing yes" ;; + # If we don't know, obey --enable-cross-guesses. + *) gl_cv_func_working_strerror="$gl_cross_guess_normal" ;; esac ]) ]) @@ -78,10 +80,14 @@ [gl_cv_func_strerror_0_works=yes], [gl_cv_func_strerror_0_works=no], [case "$host_os" in - # Guess yes on glibc systems. - *-gnu*) gl_cv_func_strerror_0_works="guessing yes" ;; - # If we don't know, assume the worst. - *) gl_cv_func_strerror_0_works="guessing no" ;; + # Guess yes on glibc systems. + *-gnu* | gnu*) gl_cv_func_strerror_0_works="guessing yes" ;; + # Guess yes on musl systems. + *-musl*) gl_cv_func_strerror_0_works="guessing yes" ;; + # Guess yes on native Windows. + mingw*) gl_cv_func_strerror_0_works="guessing yes" ;; + # If we don't know, obey --enable-cross-guesses. + *) gl_cv_func_strerror_0_works="$gl_cross_guess_normal" ;; esac ]) ]) diff -Nru gdb-9.1/gnulib/import/m4/strerror_r.m4 gdb-10.2/gnulib/import/m4/strerror_r.m4 --- gdb-9.1/gnulib/import/m4/strerror_r.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/strerror_r.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ -# strerror_r.m4 serial 18 -dnl Copyright (C) 2002, 2007-2016 Free Software Foundation, Inc. +# strerror_r.m4 serial 20 +dnl Copyright (C) 2002, 2007-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -14,10 +14,10 @@ dnl Some systems don't declare strerror_r() if _THREAD_SAFE and _REENTRANT dnl are not defined. - AC_CHECK_DECL([strerror_r], - [HAVE_DECL_STRERROR_R=1], [HAVE_DECL_STRERROR_R=0]) - AC_DEFINE_UNQUOTED([HAVE_DECL_STRERROR_R_ORIG], [$HAVE_DECL_STRERROR_R], - [Define to 1 if you have the declaration of 'strerror_r' in the system include files, or to 0 otherwise.]) + AC_CHECK_DECLS_ONCE([strerror_r]) + if test $ac_cv_have_decl_strerror_r = no; then + HAVE_DECL_STRERROR_R=0 + fi if test $ac_cv_func_strerror_r = yes; then if test "$ERRNO_H:$REPLACE_STRERROR_0" = :0; then @@ -36,20 +36,6 @@ REPLACE_STRERROR_R=1 fi fi - - # Overwrite the findings of AC_FUNC_STRERROR_R (for code that uses that). - AC_REQUIRE([AC_FUNC_STRERROR_R]) -]) - -# If this module is in use, we unconditionally want POSIX semantics; so -# replace autoconf's macro with a version that does not probe -AC_DEFUN([AC_FUNC_STRERROR_R], [ - AC_DEFINE([HAVE_DECL_STRERROR_R], [1], - [Define to 1, since you should have the declaration of strerror_r.]) - AC_DEFINE([HAVE_STRERROR_R], [1], - [Define to 1, since you should have the function strerror_r.]) - AC_DEFINE([STRERROR_R_CHAR_P], [0], - [Define to 0, since strerror_r should not return char *.]) ]) # Prerequisites of lib/strerror_r.c. @@ -68,7 +54,7 @@ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_REQUIRE([gl_FUNC_STRERROR_0]) - AC_CHECK_FUNC([strerror_r]) + AC_CHECK_FUNCS_ONCE([strerror_r]) if test $ac_cv_func_strerror_r = yes; then if test "$ERRNO_H:$REPLACE_STRERROR_0" = :0; then dnl The POSIX prototype is: int strerror_r (int, char *, size_t); @@ -177,7 +163,7 @@ [gl_cv_func_strerror_r_works=no], [dnl Guess no on all platforms that have __xpg_strerror_r, dnl at least until fixed glibc and cygwin are more common. - gl_cv_func_strerror_r_works="guessing no" + gl_cv_func_strerror_r_works="$gl_cross_guess_normal" ]) ]) fi diff -Nru gdb-9.1/gnulib/import/m4/string_h.m4 gdb-10.2/gnulib/import/m4/string_h.m4 --- gdb-9.1/gnulib/import/m4/string_h.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/string_h.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,11 +1,11 @@ # Configure a GNU-like replacement for <string.h>. -# Copyright (C) 2007-2016 Free Software Foundation, Inc. +# Copyright (C) 2007-2020 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 21 +# serial 23 # Written by Paul Eggert. @@ -18,7 +18,6 @@ AC_DEFUN([gl_HEADER_STRING_H_BODY], [ - AC_REQUIRE([AC_C_RESTRICT]) AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) gl_NEXT_HEADERS([string.h]) @@ -30,6 +29,8 @@ [ffsl ffsll memmem mempcpy memrchr rawmemchr stpcpy stpncpy strchrnul strdup strncat strndup strnlen strpbrk strsep strcasestr strtok_r strerror_r strsignal strverscmp]) + + AC_REQUIRE([AC_C_RESTRICT]) ]) AC_DEFUN([gl_STRING_MODULE_INDICATOR], @@ -43,6 +44,7 @@ AC_DEFUN([gl_HEADER_STRING_H_DEFAULTS], [ + GNULIB_EXPLICIT_BZERO=0; AC_SUBST([GNULIB_EXPLICIT_BZERO]) GNULIB_FFSL=0; AC_SUBST([GNULIB_FFSL]) GNULIB_FFSLL=0; AC_SUBST([GNULIB_FFSLL]) GNULIB_MEMCHR=0; AC_SUBST([GNULIB_MEMCHR]) @@ -82,6 +84,7 @@ GNULIB_STRVERSCMP=0; AC_SUBST([GNULIB_STRVERSCMP]) HAVE_MBSLEN=0; AC_SUBST([HAVE_MBSLEN]) dnl Assume proper GNU behavior unless another module says otherwise. + HAVE_EXPLICIT_BZERO=1; AC_SUBST([HAVE_EXPLICIT_BZERO]) HAVE_FFSL=1; AC_SUBST([HAVE_FFSL]) HAVE_FFSLL=1; AC_SUBST([HAVE_FFSLL]) HAVE_MEMCHR=1; AC_SUBST([HAVE_MEMCHR]) @@ -105,16 +108,16 @@ REPLACE_MEMCHR=0; AC_SUBST([REPLACE_MEMCHR]) REPLACE_MEMMEM=0; AC_SUBST([REPLACE_MEMMEM]) REPLACE_STPNCPY=0; AC_SUBST([REPLACE_STPNCPY]) + REPLACE_STRCHRNUL=0; AC_SUBST([REPLACE_STRCHRNUL]) REPLACE_STRDUP=0; AC_SUBST([REPLACE_STRDUP]) + REPLACE_STRNCAT=0; AC_SUBST([REPLACE_STRNCAT]) + REPLACE_STRNDUP=0; AC_SUBST([REPLACE_STRNDUP]) + REPLACE_STRNLEN=0; AC_SUBST([REPLACE_STRNLEN]) REPLACE_STRSTR=0; AC_SUBST([REPLACE_STRSTR]) REPLACE_STRCASESTR=0; AC_SUBST([REPLACE_STRCASESTR]) - REPLACE_STRCHRNUL=0; AC_SUBST([REPLACE_STRCHRNUL]) + REPLACE_STRTOK_R=0; AC_SUBST([REPLACE_STRTOK_R]) REPLACE_STRERROR=0; AC_SUBST([REPLACE_STRERROR]) REPLACE_STRERROR_R=0; AC_SUBST([REPLACE_STRERROR_R]) - REPLACE_STRNCAT=0; AC_SUBST([REPLACE_STRNCAT]) - REPLACE_STRNDUP=0; AC_SUBST([REPLACE_STRNDUP]) - REPLACE_STRNLEN=0; AC_SUBST([REPLACE_STRNLEN]) REPLACE_STRSIGNAL=0; AC_SUBST([REPLACE_STRSIGNAL]) - REPLACE_STRTOK_R=0; AC_SUBST([REPLACE_STRTOK_R]) UNDEFINE_STRTOK_R=0; AC_SUBST([UNDEFINE_STRTOK_R]) ]) diff -Nru gdb-9.1/gnulib/import/m4/strnlen.m4 gdb-10.2/gnulib/import/m4/strnlen.m4 --- gdb-9.1/gnulib/import/m4/strnlen.m4 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/strnlen.m4 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,30 @@ +# strnlen.m4 serial 13 +dnl Copyright (C) 2002-2003, 2005-2007, 2009-2020 Free Software Foundation, +dnl Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_STRNLEN], +[ + AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) + + dnl Persuade glibc <string.h> to declare strnlen(). + AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) + + AC_CHECK_DECLS_ONCE([strnlen]) + if test $ac_cv_have_decl_strnlen = no; then + HAVE_DECL_STRNLEN=0 + else + m4_pushdef([AC_LIBOBJ], [:]) + dnl Note: AC_FUNC_STRNLEN does AC_LIBOBJ([strnlen]). + AC_FUNC_STRNLEN + m4_popdef([AC_LIBOBJ]) + if test $ac_cv_func_strnlen_working = no; then + REPLACE_STRNLEN=1 + fi + fi +]) + +# Prerequisites of lib/strnlen.c. +AC_DEFUN([gl_PREREQ_STRNLEN], [:]) diff -Nru gdb-9.1/gnulib/import/m4/strstr.m4 gdb-10.2/gnulib/import/m4/strstr.m4 --- gdb-9.1/gnulib/import/m4/strstr.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/strstr.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ -# strstr.m4 serial 17 -dnl Copyright (C) 2008-2016 Free Software Foundation, Inc. +# strstr.m4 serial 21 +dnl Copyright (C) 2008-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -9,28 +9,37 @@ [ AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_MEMCHR]) - if test "$gl_cv_func_memchr_works" != yes; then + if test $HAVE_MEMCHR = 0 || test $REPLACE_MEMCHR = 1; then REPLACE_STRSTR=1 else - dnl Detect http://sourceware.org/bugzilla/show_bug.cgi?id=12092. + dnl Detect https://sourceware.org/bugzilla/show_bug.cgi?id=12092 + dnl and https://sourceware.org/bugzilla/show_bug.cgi?id=23637. AC_CACHE_CHECK([whether strstr works], [gl_cv_func_strstr_works_always], - [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ + [AC_RUN_IFELSE( + [AC_LANG_PROGRAM([[ #include <string.h> /* for strstr */ +#ifdef __GNU_LIBRARY__ + #include <features.h> + #if __GLIBC__ == 2 && __GLIBC_MINOR__ == 28 + Unlucky user + #endif +#endif #define P "_EF_BF_BD" #define HAYSTACK "F_BD_CE_BD" P P P P "_C3_88_20" P P P "_C3_A7_20" P #define NEEDLE P P P P P -]], [[return !!strstr (HAYSTACK, NEEDLE); - ]])], - [gl_cv_func_strstr_works_always=yes], - [gl_cv_func_strstr_works_always=no], - [dnl glibc 2.12 and cygwin 1.7.7 have a known bug. uClibc is not - dnl affected, since it uses different source code for strstr than - dnl glibc. - dnl Assume that it works on all other platforms, even if it is not - dnl linear. - AC_EGREP_CPP([Lucky user], - [ +]], + [[return !!strstr (HAYSTACK, NEEDLE); + ]])], + [gl_cv_func_strstr_works_always=yes], + [gl_cv_func_strstr_works_always=no], + [dnl glibc 2.12 and cygwin 1.7.7 have a known bug. uClibc is not + dnl affected, since it uses different source code for strstr than + dnl glibc. + dnl Assume that it works on all other platforms, even if it is not + dnl linear. + AC_EGREP_CPP([Lucky user], + [ #ifdef __GNU_LIBRARY__ #include <features.h> #if ((__GLIBC__ == 2 && __GLIBC_MINOR__ > 12) || (__GLIBC__ > 2)) \ @@ -45,10 +54,10 @@ #else Lucky user #endif - ], - [gl_cv_func_strstr_works_always="guessing yes"], - [gl_cv_func_strstr_works_always="guessing no"]) - ]) + ], + [gl_cv_func_strstr_works_always="guessing yes"], + [gl_cv_func_strstr_works_always="$gl_cross_guess_normal"]) + ]) ]) case "$gl_cv_func_strstr_works_always" in *yes) ;; @@ -99,6 +108,9 @@ if (!strstr (haystack, needle)) result |= 1; } + /* Free allocated memory, in case some sanitizer is watching. */ + free (haystack); + free (needle); return result; ]])], [gl_cv_func_strstr_linear=yes], [gl_cv_func_strstr_linear=no], @@ -123,7 +135,7 @@ #endif ], [gl_cv_func_strstr_linear="guessing yes"], - [gl_cv_func_strstr_linear="guessing no"]) + [gl_cv_func_strstr_linear="$gl_cross_guess_normal"]) ]) ]) case "$gl_cv_func_strstr_linear" in diff -Nru gdb-9.1/gnulib/import/m4/strtok_r.m4 gdb-10.2/gnulib/import/m4/strtok_r.m4 --- gdb-9.1/gnulib/import/m4/strtok_r.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/strtok_r.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ -# strtok_r.m4 serial 13 -dnl Copyright (C) 2002-2004, 2006-2007, 2009-2016 Free Software Foundation, +# strtok_r.m4 serial 15 +dnl Copyright (C) 2002-2004, 2006-2007, 2009-2020 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -19,7 +19,7 @@ dnl when the second argument to strtok_r is a constant string that has dnl exactly one byte and compiling with optimization. This bug is, for dnl example, present in the glibc 2.7-18 package in Debian "lenny". - dnl See <http://sources.redhat.com/bugzilla/show_bug.cgi?id=5614>. + dnl See <https://sourceware.org/bugzilla/show_bug.cgi?id=5614>. AC_CACHE_CHECK([whether strtok_r works], [gl_cv_func_strtok_r_works], [AC_RUN_IFELSE( [AC_LANG_PROGRAM([[ @@ -41,14 +41,13 @@ ], [gl_cv_func_strtok_r_works=yes], [gl_cv_func_strtok_r_works=no], - [ -changequote(,)dnl - case "$host_os" in - # Guess no on glibc systems. - *-gnu*) gl_cv_func_strtok_r_works="guessing no";; - *) gl_cv_func_strtok_r_works="guessing yes";; + [case "$host_os" in + # Guess no on glibc systems. + *-gnu* | gnu*) gl_cv_func_strtok_r_works="guessing no" ;; + # Guess yes on native Windows. + mingw*) gl_cv_func_strtok_r_works="guessing yes" ;; + *) gl_cv_func_strtok_r_works="guessing yes" ;; esac -changequote([,])dnl ]) ]) case "$gl_cv_func_strtok_r_works" in diff -Nru gdb-9.1/gnulib/import/m4/sys_random_h.m4 gdb-10.2/gnulib/import/m4/sys_random_h.m4 --- gdb-9.1/gnulib/import/m4/sys_random_h.m4 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/sys_random_h.m4 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,52 @@ +# sys_random_h.m4 serial 4 +dnl Copyright (C) 2020 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_HEADER_SYS_RANDOM], +[ + AC_REQUIRE([gl_SYS_RANDOM_H_DEFAULTS]) + dnl <sys/random.h> is always overridden, because of GNULIB_POSIXCHECK. + gl_CHECK_NEXT_HEADERS([sys/random.h]) + if test $ac_cv_header_sys_random_h = yes; then + HAVE_SYS_RANDOM_H=1 + else + HAVE_SYS_RANDOM_H=0 + fi + AC_SUBST([HAVE_SYS_RANDOM_H]) + + m4_ifdef([gl_UNISTD_H_DEFAULTS], [AC_REQUIRE([gl_UNISTD_H_DEFAULTS])]) + if test $ac_cv_header_sys_random_h = yes; then + UNISTD_H_HAVE_SYS_RANDOM_H=1 + fi + + dnl Check for declarations of anything we want to poison if the + dnl corresponding gnulib module is not in use. + gl_WARN_ON_USE_PREPARE([[ +#if HAVE_SYS_RANDOM_H +/* Additional includes are needed before <sys/random.h> on Mac OS X. */ +# include <sys/types.h> +# include <stdlib.h> +# include <sys/random.h> +#endif + ]], + [getrandom]) +]) + +AC_DEFUN([gl_SYS_RANDOM_MODULE_INDICATOR], +[ + dnl Use AC_REQUIRE here, so that the default settings are expanded once only. + AC_REQUIRE([gl_SYS_RANDOM_H_DEFAULTS]) + gl_MODULE_INDICATOR_SET_VARIABLE([$1]) + dnl Define it also as a C macro, for the benefit of the unit tests. + gl_MODULE_INDICATOR_FOR_TESTS([$1]) +]) + +AC_DEFUN([gl_SYS_RANDOM_H_DEFAULTS], +[ + GNULIB_GETRANDOM=0; AC_SUBST([GNULIB_GETRANDOM]) + dnl Assume proper GNU behavior unless another module says otherwise. + HAVE_GETRANDOM=1; AC_SUBST([HAVE_GETRANDOM]) + REPLACE_GETRANDOM=0; AC_SUBST([REPLACE_GETRANDOM]) +]) diff -Nru gdb-9.1/gnulib/import/m4/sys_socket_h.m4 gdb-10.2/gnulib/import/m4/sys_socket_h.m4 --- gdb-9.1/gnulib/import/m4/sys_socket_h.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/sys_socket_h.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ -# sys_socket_h.m4 serial 23 -dnl Copyright (C) 2005-2016 Free Software Foundation, Inc. +# sys_socket_h.m4 serial 25 +dnl Copyright (C) 2005-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -95,6 +95,8 @@ #include <sys/socket.h> ]], [socket connect accept bind getpeername getsockname getsockopt listen recv send recvfrom sendto setsockopt shutdown accept4]) + + AC_REQUIRE([AC_C_RESTRICT]) ]) AC_DEFUN([gl_PREREQ_SYS_H_SOCKET], @@ -104,17 +106,11 @@ gl_CHECK_NEXT_HEADERS([sys/socket.h]) if test $ac_cv_header_sys_socket_h = yes; then HAVE_SYS_SOCKET_H=1 - HAVE_WS2TCPIP_H=0 else HAVE_SYS_SOCKET_H=0 - if test $ac_cv_header_ws2tcpip_h = yes; then - HAVE_WS2TCPIP_H=1 - else - HAVE_WS2TCPIP_H=0 - fi fi AC_SUBST([HAVE_SYS_SOCKET_H]) - AC_SUBST([HAVE_WS2TCPIP_H]) + gl_PREREQ_SYS_H_WS2TCPIP ]) # Common prerequisites of the <sys/socket.h> replacement and of the @@ -142,6 +138,24 @@ AC_SUBST([HAVE_WINSOCK2_H]) ]) +# Common prerequisites of the <sys/socket.h> replacement and of the +# <arpa/inet.h> replacement. +# Sets and substitutes HAVE_WS2TCPIP_H. +AC_DEFUN([gl_PREREQ_SYS_H_WS2TCPIP], +[ + AC_REQUIRE([gl_CHECK_SOCKET_HEADERS]) + if test $ac_cv_header_sys_socket_h = yes; then + HAVE_WS2TCPIP_H=0 + else + if test $ac_cv_header_ws2tcpip_h = yes; then + HAVE_WS2TCPIP_H=1 + else + HAVE_WS2TCPIP_H=0 + fi + fi + AC_SUBST([HAVE_WS2TCPIP_H]) +]) + AC_DEFUN([gl_SYS_SOCKET_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. diff -Nru gdb-9.1/gnulib/import/m4/sys_stat_h.m4 gdb-10.2/gnulib/import/m4/sys_stat_h.m4 --- gdb-9.1/gnulib/import/m4/sys_stat_h.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/sys_stat_h.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ -# sys_stat_h.m4 serial 28 -*- Autoconf -*- -dnl Copyright (C) 2006-2016 Free Software Foundation, Inc. +# sys_stat_h.m4 serial 33 -*- Autoconf -*- +dnl Copyright (C) 2006-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -19,18 +19,21 @@ dnl Ensure the type mode_t gets defined. AC_REQUIRE([AC_TYPE_MODE_T]) - dnl Whether to override 'struct stat'. + dnl Whether to enable precise timestamps in 'struct stat'. + m4_ifdef([gl_WINDOWS_STAT_TIMESPEC], [ + AC_REQUIRE([gl_WINDOWS_STAT_TIMESPEC]) + ], [ + WINDOWS_STAT_TIMESPEC=0 + ]) + AC_SUBST([WINDOWS_STAT_TIMESPEC]) + + dnl Whether to ensure that struct stat.st_size is 64-bit wide. m4_ifdef([gl_LARGEFILE], [ AC_REQUIRE([gl_LARGEFILE]) ], [ WINDOWS_64_BIT_ST_SIZE=0 ]) AC_SUBST([WINDOWS_64_BIT_ST_SIZE]) - if test $WINDOWS_64_BIT_ST_SIZE = 1; then - AC_DEFINE([_GL_WINDOWS_64_BIT_ST_SIZE], [1], - [Define to 1 if Gnulib overrides 'struct stat' on Windows so that - struct stat.st_size becomes 64-bit.]) - fi dnl Define types that are supposed to be defined in <sys/types.h> or dnl <sys/stat.h>. @@ -45,7 +48,9 @@ gl_WARN_ON_USE_PREPARE([[#include <sys/stat.h> ]], [fchmodat fstat fstatat futimens lchmod lstat mkdirat mkfifo mkfifoat mknod mknodat stat utimensat]) -]) # gl_HEADER_SYS_STAT_H + + AC_REQUIRE([AC_C_RESTRICT]) +]) AC_DEFUN([gl_SYS_STAT_MODULE_INDICATOR], [ @@ -72,6 +77,7 @@ GNULIB_MKNODAT=0; AC_SUBST([GNULIB_MKNODAT]) GNULIB_STAT=0; AC_SUBST([GNULIB_STAT]) GNULIB_UTIMENSAT=0; AC_SUBST([GNULIB_UTIMENSAT]) + GNULIB_OVERRIDES_STRUCT_STAT=0; AC_SUBST([GNULIB_OVERRIDES_STRUCT_STAT]) dnl Assume proper GNU behavior unless another module says otherwise. HAVE_FCHMODAT=1; AC_SUBST([HAVE_FCHMODAT]) HAVE_FSTATAT=1; AC_SUBST([HAVE_FSTATAT]) @@ -84,6 +90,7 @@ HAVE_MKNOD=1; AC_SUBST([HAVE_MKNOD]) HAVE_MKNODAT=1; AC_SUBST([HAVE_MKNODAT]) HAVE_UTIMENSAT=1; AC_SUBST([HAVE_UTIMENSAT]) + REPLACE_FCHMODAT=0; AC_SUBST([REPLACE_FCHMODAT]) REPLACE_FSTAT=0; AC_SUBST([REPLACE_FSTAT]) REPLACE_FSTATAT=0; AC_SUBST([REPLACE_FSTATAT]) REPLACE_FUTIMENS=0; AC_SUBST([REPLACE_FUTIMENS]) diff -Nru gdb-9.1/gnulib/import/m4/sys_time_h.m4 gdb-10.2/gnulib/import/m4/sys_time_h.m4 --- gdb-9.1/gnulib/import/m4/sys_time_h.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/sys_time_h.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,7 +1,7 @@ # Configure a replacement for <sys/time.h>. -# serial 8 +# serial 9 -# Copyright (C) 2007, 2009-2016 Free Software Foundation, Inc. +# Copyright (C) 2007, 2009-2020 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -105,7 +105,6 @@ HAVE_GETTIMEOFDAY=1; AC_SUBST([HAVE_GETTIMEOFDAY]) HAVE_STRUCT_TIMEVAL=1; AC_SUBST([HAVE_STRUCT_TIMEVAL]) HAVE_SYS_TIME_H=1; AC_SUBST([HAVE_SYS_TIME_H]) - HAVE_TIMEZONE_T=0; AC_SUBST([HAVE_TIMEZONE_T]) REPLACE_GETTIMEOFDAY=0; AC_SUBST([REPLACE_GETTIMEOFDAY]) REPLACE_STRUCT_TIMEVAL=0; AC_SUBST([REPLACE_STRUCT_TIMEVAL]) ]) diff -Nru gdb-9.1/gnulib/import/m4/sys_types_h.m4 gdb-10.2/gnulib/import/m4/sys_types_h.m4 --- gdb-9.1/gnulib/import/m4/sys_types_h.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/sys_types_h.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,11 +1,14 @@ -# sys_types_h.m4 serial 6 -dnl Copyright (C) 2011-2016 Free Software Foundation, Inc. +# sys_types_h.m4 serial 9 +dnl Copyright (C) 2011-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN_ONCE([gl_SYS_TYPES_H], [ + dnl Use sane struct stat types in OpenVMS 8.2 and later. + AC_DEFINE([_USE_STD_STAT], 1, [For standard stat data types on VMS.]) + AC_REQUIRE([gl_SYS_TYPES_H_DEFAULTS]) gl_NEXT_HEADERS([sys/types.h]) @@ -17,6 +20,14 @@ dnl Whether to override the 'off_t' type. AC_REQUIRE([gl_TYPE_OFF_T]) + + dnl Whether to override the 'dev_t' and 'ino_t' types. + m4_ifdef([gl_WINDOWS_STAT_INODES], [ + AC_REQUIRE([gl_WINDOWS_STAT_INODES]) + ], [ + WINDOWS_STAT_INODES=0 + ]) + AC_SUBST([WINDOWS_STAT_INODES]) ]) AC_DEFUN([gl_SYS_TYPES_H_DEFAULTS], @@ -24,12 +35,12 @@ ]) # This works around a buggy version in autoconf <= 2.69. -# See <https://lists.gnu.org/archive/html/autoconf/2016-08/msg00014.html> +# See <https://lists.gnu.org/r/autoconf/2016-08/msg00014.html> m4_version_prereq([2.70], [], [ # This is taken from the following Autoconf patch: -# http://git.sv.gnu.org/cgit/autoconf.git/commit/?id=e17a30e98 +# https://git.savannah.gnu.org/cgit/autoconf.git/commit/?id=e17a30e987d7ee695fb4294a82d987ec3dc9b974 m4_undefine([AC_HEADER_MAJOR]) AC_DEFUN([AC_HEADER_MAJOR], diff -Nru gdb-9.1/gnulib/import/m4/sys_uio_h.m4 gdb-10.2/gnulib/import/m4/sys_uio_h.m4 --- gdb-9.1/gnulib/import/m4/sys_uio_h.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/sys_uio_h.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ # sys_uio_h.m4 serial 1 -dnl Copyright (C) 2011-2016 Free Software Foundation, Inc. +dnl Copyright (C) 2011-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. diff -Nru gdb-9.1/gnulib/import/m4/tempname.m4 gdb-10.2/gnulib/import/m4/tempname.m4 --- gdb-9.1/gnulib/import/m4/tempname.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/tempname.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ #serial 5 -# Copyright (C) 2006-2007, 2009-2016 Free Software Foundation, Inc. +# Copyright (C) 2006-2007, 2009-2020 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. diff -Nru gdb-9.1/gnulib/import/m4/threadlib.m4 gdb-10.2/gnulib/import/m4/threadlib.m4 --- gdb-9.1/gnulib/import/m4/threadlib.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/threadlib.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,11 +1,351 @@ -# threadlib.m4 serial 11 (gettext-0.18.2) -dnl Copyright (C) 2005-2016 Free Software Foundation, Inc. +# threadlib.m4 serial 27 +dnl Copyright (C) 2005-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. +AC_PREREQ([2.60]) + +dnl The general structure of the multithreading modules in gnulib is that we +dnl have three set of modules: +dnl +dnl * POSIX API: +dnl pthread, which combines +dnl pthread-h +dnl pthread-thread +dnl pthread-once +dnl pthread-mutex +dnl pthread-rwlock +dnl pthread-cond +dnl pthread-tss +dnl pthread-spin +dnl sched_yield +dnl +dnl * ISO C API: +dnl threads, which combines +dnl threads-h +dnl thrd +dnl mtx +dnl cnd +dnl tss +dnl +dnl * Gnulib API, with an implementation that can be chosen at configure +dnl time through the option --enable-threads=... +dnl thread +dnl lock +dnl cond +dnl tls +dnl yield +dnl +dnl They are independent, except for the fact that +dnl - the implementation of the ISO C API may use the POSIX (or some other +dnl platform dependent) API, +dnl - the implementation of the Gnulib API may use the POSIX or ISO C or +dnl some other platform dependent API, depending on the --enable-threads +dnl option. +dnl +dnl This file contains macros for all of these APIs! + +dnl ============================================================================ +dnl Macros for all thread APIs + +AC_DEFUN([gl_ANYTHREADLIB_EARLY], +[ + AC_REQUIRE([AC_CANONICAL_HOST]) + if test -z "$gl_anythreadlib_early_done"; then + case "$host_os" in + osf*) + # On OSF/1, the compiler needs the flag -D_REENTRANT so that it + # groks <pthread.h>. cc also understands the flag -pthread, but + # we don't use it because 1. gcc-2.95 doesn't understand -pthread, + # 2. putting a flag into CPPFLAGS that has an effect on the linker + # causes the AC_LINK_IFELSE test below to succeed unexpectedly, + # leading to wrong values of LIBTHREAD and LTLIBTHREAD. + CPPFLAGS="$CPPFLAGS -D_REENTRANT" + ;; + esac + # Some systems optimize for single-threaded programs by default, and + # need special flags to disable these optimizations. For example, the + # definition of 'errno' in <errno.h>. + case "$host_os" in + aix* | freebsd*) CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE" ;; + solaris*) CPPFLAGS="$CPPFLAGS -D_REENTRANT" ;; + esac + gl_anythreadlib_early_done=done + fi +]) + +dnl Checks whether the compiler and linker support weak declarations of symbols. + +AC_DEFUN([gl_WEAK_SYMBOLS], +[ + AC_REQUIRE([AC_CANONICAL_HOST]) + AC_CACHE_CHECK([whether imported symbols can be declared weak], + [gl_cv_have_weak], + [gl_cv_have_weak=no + dnl First, test whether the compiler accepts it syntactically. + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[extern void xyzzy (); +#pragma weak xyzzy]], + [[xyzzy();]])], + [gl_cv_have_weak=maybe]) + if test $gl_cv_have_weak = maybe; then + dnl Second, test whether it actually works. On Cygwin 1.7.2, with + dnl gcc 4.3, symbols declared weak always evaluate to the address 0. + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include <stdio.h> +#pragma weak fputs +int main () +{ + return (fputs == NULL); +}]])], + [gl_cv_have_weak=yes], + [gl_cv_have_weak=no], + [dnl When cross-compiling, assume that only ELF platforms support + dnl weak symbols. + AC_EGREP_CPP([Extensible Linking Format], + [#ifdef __ELF__ + Extensible Linking Format + #endif + ], + [gl_cv_have_weak="guessing yes"], + [gl_cv_have_weak="guessing no"]) + ]) + fi + dnl But when linking statically, weak symbols don't work. + case " $LDFLAGS " in + *" -static "*) gl_cv_have_weak=no ;; + esac + dnl Test for a bug in FreeBSD 11: A link error occurs when using a weak + dnl symbol and linking against a shared library that has a dependency on + dnl the shared library that defines the symbol. + case "$gl_cv_have_weak" in + *yes) + case "$host_os" in + freebsd* | dragonfly*) + : > conftest1.c + $CC $CPPFLAGS $CFLAGS $LDFLAGS -fPIC -shared -o libempty.so conftest1.c -lpthread >&AS_MESSAGE_LOG_FD 2>&1 + cat <<EOF > conftest2.c +#include <pthread.h> +#pragma weak pthread_mutexattr_gettype +int main () +{ + return (pthread_mutexattr_gettype != NULL); +} +EOF + $CC $CPPFLAGS $CFLAGS $LDFLAGS -o conftest conftest2.c libempty.so >&AS_MESSAGE_LOG_FD 2>&1 \ + || gl_cv_have_weak=no + rm -f conftest1.c libempty.so conftest2.c conftest + ;; + esac + ;; + esac + ]) + case "$gl_cv_have_weak" in + *yes) + AC_DEFINE([HAVE_WEAK_SYMBOLS], [1], + [Define to 1 if the compiler and linker support weak declarations of symbols.]) + ;; + esac +]) + +dnl ============================================================================ +dnl Macros for the POSIX API + +dnl gl_PTHREADLIB +dnl ------------- +dnl Tests for the libraries needs for using the POSIX threads API. +dnl Sets the variable LIBPTHREAD to the linker options for use in a Makefile. +dnl Sets the variable LIBPMULTITHREAD, for programs that really need +dnl multithread functionality. The difference between LIBPTHREAD and +dnl LIBPMULTITHREAD is that on platforms supporting weak symbols, typically +dnl LIBPTHREAD is empty whereas LIBPMULTITHREAD is not. +dnl Sets the variable LIB_SCHED_YIELD to the linker options needed to use the +dnl sched_yield() function. +dnl Adds to CPPFLAGS the flag -D_REENTRANT or -D_THREAD_SAFE if needed for +dnl multithread-safe programs. +dnl Defines the C macro HAVE_PTHREAD_API if (at least parts of) the POSIX +dnl threads API is available. + +dnl The guts of gl_PTHREADLIB. Needs to be expanded only once. + +AC_DEFUN([gl_PTHREADLIB_BODY], +[ + AC_REQUIRE([gl_ANYTHREADLIB_EARLY]) + if test -z "$gl_pthreadlib_body_done"; then + gl_pthread_api=no + LIBPTHREAD= + LIBPMULTITHREAD= + # On OSF/1, the compiler needs the flag -pthread or -D_REENTRANT so that + # it groks <pthread.h>. It's added above, in gl_ANYTHREADLIB_EARLY. + AC_CHECK_HEADER([pthread.h], + [gl_have_pthread_h=yes], [gl_have_pthread_h=no]) + if test "$gl_have_pthread_h" = yes; then + # Other possible tests: + # -lpthreads (FSU threads, PCthreads) + # -lgthreads + # Test whether both pthread_mutex_lock and pthread_mutexattr_init exist + # in libc. IRIX 6.5 has the first one in both libc and libpthread, but + # the second one only in libpthread, and lock.c needs it. + # + # If -pthread works, prefer it to -lpthread, since Ubuntu 14.04 + # needs -pthread for some reason. See: + # https://lists.gnu.org/r/bug-gnulib/2014-09/msg00023.html + save_LIBS=$LIBS + for gl_pthread in '' '-pthread'; do + LIBS="$LIBS $gl_pthread" + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#include <pthread.h> + pthread_mutex_t m; + pthread_mutexattr_t ma; + ]], + [[pthread_mutex_lock (&m); + pthread_mutexattr_init (&ma);]])], + [gl_pthread_api=yes + LIBPTHREAD=$gl_pthread + LIBPMULTITHREAD=$gl_pthread]) + LIBS=$save_LIBS + test $gl_pthread_api = yes && break + done + + # Test for libpthread by looking for pthread_kill. (Not pthread_self, + # since it is defined as a macro on OSF/1.) + if test $gl_pthread_api = yes && test -z "$LIBPTHREAD"; then + # The program links fine without libpthread. But it may actually + # need to link with libpthread in order to create multiple threads. + AC_CHECK_LIB([pthread], [pthread_kill], + [LIBPMULTITHREAD=-lpthread + # On Solaris and HP-UX, most pthread functions exist also in libc. + # Therefore pthread_in_use() needs to actually try to create a + # thread: pthread_create from libc will fail, whereas + # pthread_create will actually create a thread. + # On Solaris 10 or newer, this test is no longer needed, because + # libc contains the fully functional pthread functions. + case "$host_os" in + solaris | solaris2.[1-9] | solaris2.[1-9].* | hpux*) + AC_DEFINE([PTHREAD_IN_USE_DETECTION_HARD], [1], + [Define if the pthread_in_use() detection is hard.]) + esac + ]) + elif test $gl_pthread_api != yes; then + # Some library is needed. Try libpthread and libc_r. + AC_CHECK_LIB([pthread], [pthread_kill], + [gl_pthread_api=yes + LIBPTHREAD=-lpthread + LIBPMULTITHREAD=-lpthread]) + if test $gl_pthread_api != yes; then + # For FreeBSD 4. + AC_CHECK_LIB([c_r], [pthread_kill], + [gl_pthread_api=yes + LIBPTHREAD=-lc_r + LIBPMULTITHREAD=-lc_r]) + fi + fi + fi + AC_MSG_CHECKING([whether POSIX threads API is available]) + AC_MSG_RESULT([$gl_pthread_api]) + AC_SUBST([LIBPTHREAD]) + AC_SUBST([LIBPMULTITHREAD]) + if test $gl_pthread_api = yes; then + AC_DEFINE([HAVE_PTHREAD_API], [1], + [Define if you have the <pthread.h> header and the POSIX threads API.]) + fi + + dnl On some systems, sched_yield is in librt, rather than in libpthread. + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#include <sched.h>]], + [[sched_yield ();]])], + [LIB_SCHED_YIELD= + ], + [dnl Solaris 7...10 has sched_yield in librt, not in libpthread or libc. + AC_CHECK_LIB([rt], [sched_yield], [LIB_SCHED_YIELD=-lrt], + [dnl Solaris 2.5.1, 2.6 has sched_yield in libposix4, not librt. + AC_CHECK_LIB([posix4], [sched_yield], [LIB_SCHED_YIELD=-lposix4])]) + ]) + AC_SUBST([LIB_SCHED_YIELD]) + + gl_pthreadlib_body_done=done + fi +]) + +AC_DEFUN([gl_PTHREADLIB], +[ + AC_REQUIRE([gl_ANYTHREADLIB_EARLY]) + gl_PTHREADLIB_BODY +]) + +dnl ============================================================================ +dnl Macros for the ISO C API + +dnl gl_STDTHREADLIB +dnl --------------- +dnl Tests for the libraries needs for using the ISO C threads API. +dnl Sets the variable LIBSTDTHREAD to the linker options for use in a Makefile. +dnl Adds to CPPFLAGS the flag -D_REENTRANT or -D_THREAD_SAFE if needed for +dnl multithread-safe programs. +dnl Defines the C macro HAVE_THREADS_H if (at least parts of) the ISO C threads +dnl API is available. + +dnl The guts of gl_STDTHREADLIB. Needs to be expanded only once. + +AC_DEFUN([gl_STDTHREADLIB_BODY], +[ + AC_REQUIRE([gl_ANYTHREADLIB_EARLY]) + AC_REQUIRE([AC_CANONICAL_HOST]) + if test -z "$gl_stdthreadlib_body_done"; then + AC_CHECK_HEADERS_ONCE([threads.h]) + + case "$host_os" in + mingw*) + LIBSTDTHREAD= + ;; + *) + gl_PTHREADLIB_BODY + if test $ac_cv_header_threads_h = yes; then + dnl glibc >= 2.29 has thrd_create in libpthread. + dnl FreeBSD >= 10 has thrd_create in libstdthreads; this library depends + dnl on libpthread (for the symbol 'pthread_mutexattr_gettype'). + dnl AIX >= 7.1 and Solaris >= 11.4 have thrd_create in libc. + AC_CHECK_FUNCS([thrd_create]) + if test $ac_cv_func_thrd_create = yes; then + LIBSTDTHREAD= + else + AC_CHECK_LIB([stdthreads], [thrd_create], [ + LIBSTDTHREAD='-lstdthreads -lpthread' + ], [ + dnl Guess that thrd_create is in libpthread. + LIBSTDTHREAD="$LIBPMULTITHREAD" + ]) + fi + else + dnl Libraries needed by thrd.c, mtx.c, cnd.c, tss.c. + LIBSTDTHREAD="$LIBPMULTITHREAD $LIB_SCHED_YIELD" + fi + ;; + esac + AC_SUBST([LIBSTDTHREAD]) + + AC_MSG_CHECKING([whether ISO C threads API is available]) + AC_MSG_RESULT([$ac_cv_header_threads_h]) + gl_stdthreadlib_body_done=done + fi +]) + +AC_DEFUN([gl_STDTHREADLIB], +[ + AC_REQUIRE([gl_ANYTHREADLIB_EARLY]) + gl_STDTHREADLIB_BODY +]) + +dnl ============================================================================ +dnl Macros for the Gnulib API + dnl gl_THREADLIB dnl ------------ dnl Tests for a multithreading library to be used. @@ -14,8 +354,13 @@ dnl default is 'no', otherwise it is system dependent. In both cases, the user dnl can change the choice through the options --enable-threads=choice or dnl --disable-threads. -dnl Defines at most one of the macros USE_POSIX_THREADS, USE_SOLARIS_THREADS, -dnl USE_PTH_THREADS, USE_WINDOWS_THREADS +dnl Defines at most one of the macros USE_ISOC_THREADS, USE_POSIX_THREADS, +dnl USE_ISOC_AND_POSIX_THREADS, USE_WINDOWS_THREADS. +dnl The choice --enable-threads=isoc+posix is available only on platforms that +dnl have both the ISO C and the POSIX threads APIs. It has the effect of using +dnl the ISO C API for most things and the POSIX API only for creating and +dnl controlling threads (because there is no equivalent to pthread_atfork in +dnl the ISO C API). dnl Sets the variables LIBTHREAD and LTLIBTHREAD to the linker options for use dnl in a Makefile (LIBTHREAD for use without libtool, LTLIBTHREAD for use with dnl libtool). @@ -25,6 +370,9 @@ dnl symbols, typically LIBTHREAD is empty whereas LIBMULTITHREAD is not. dnl Adds to CPPFLAGS the flag -D_REENTRANT or -D_THREAD_SAFE if needed for dnl multithread-safe programs. +dnl Since support for GNU pth was removed, $LTLIBTHREAD and $LIBTHREAD have the +dnl same value, and similarly $LTLIBMULTITHREAD and $LIBMULTITHREAD have the +dnl same value. Only system libraries are needed. AC_DEFUN([gl_THREADLIB_EARLY], [ @@ -43,17 +391,14 @@ AC_REQUIRE([AC_CANONICAL_HOST]) dnl _GNU_SOURCE is needed for pthread_rwlock_t on glibc systems. - dnl AC_USE_SYSTEM_EXTENSIONS was introduced in autoconf 2.60 and obsoletes - dnl AC_GNU_SOURCE. - m4_ifdef([AC_USE_SYSTEM_EXTENSIONS], - [AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])], - [AC_REQUIRE([AC_GNU_SOURCE])]) + AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) dnl Check for multithreading. m4_ifdef([gl_THREADLIB_DEFAULT_NO], [m4_divert_text([DEFAULTS], [gl_use_threads_default=no])], [m4_divert_text([DEFAULTS], [gl_use_threads_default=])]) + m4_divert_text([DEFAULTS], [gl_use_winpthreads_default=]) AC_ARG_ENABLE([threads], -AC_HELP_STRING([--enable-threads={posix|solaris|pth|windows}], [specify multithreading API])m4_ifdef([gl_THREADLIB_DEFAULT_NO], [], [ +AC_HELP_STRING([--enable-threads={isoc|posix|isoc+posix|windows}], [specify multithreading API])m4_ifdef([gl_THREADLIB_DEFAULT_NO], [], [ AC_HELP_STRING([--disable-threads], [build without multithread safety])]), [gl_use_threads=$enableval], [if test -n "$gl_use_threads_default"; then @@ -64,41 +409,35 @@ dnl Disable multithreading by default on OSF/1, because it interferes dnl with fork()/exec(): When msgexec is linked with -lpthread, its dnl child process gets an endless segmentation fault inside execvp(). + osf*) gl_use_threads=no ;; dnl Disable multithreading by default on Cygwin 1.5.x, because it has dnl bugs that lead to endless loops or crashes. See - dnl <http://cygwin.com/ml/cygwin/2009-08/msg00283.html>. - osf*) gl_use_threads=no ;; + dnl <https://cygwin.com/ml/cygwin/2009-08/msg00283.html>. cygwin*) case `uname -r` in 1.[0-5].*) gl_use_threads=no ;; *) gl_use_threads=yes ;; esac ;; + dnl Obey gl_AVOID_WINPTHREAD on mingw. + mingw*) + case "$gl_use_winpthreads_default" in + yes) gl_use_threads=posix ;; + no) gl_use_threads=windows ;; + *) gl_use_threads=yes ;; + esac + ;; *) gl_use_threads=yes ;; esac changequote([,])dnl fi ]) - if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then - # For using <pthread.h>: - case "$host_os" in - osf*) - # On OSF/1, the compiler needs the flag -D_REENTRANT so that it - # groks <pthread.h>. cc also understands the flag -pthread, but - # we don't use it because 1. gcc-2.95 doesn't understand -pthread, - # 2. putting a flag into CPPFLAGS that has an effect on the linker - # causes the AC_LINK_IFELSE test below to succeed unexpectedly, - # leading to wrong values of LIBTHREAD and LTLIBTHREAD. - CPPFLAGS="$CPPFLAGS -D_REENTRANT" - ;; - esac - # Some systems optimize for single-threaded programs by default, and - # need special flags to disable these optimizations. For example, the - # definition of 'errno' in <errno.h>. - case "$host_os" in - aix* | freebsd*) CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE" ;; - solaris*) CPPFLAGS="$CPPFLAGS -D_REENTRANT" ;; - esac + if test "$gl_use_threads" = yes \ + || test "$gl_use_threads" = isoc \ + || test "$gl_use_threads" = posix \ + || test "$gl_use_threads" = isoc+posix; then + # For using <threads.h> or <pthread.h>: + gl_ANYTHREADLIB_EARLY fi ]) @@ -114,108 +453,31 @@ LTLIBMULTITHREAD= if test "$gl_use_threads" != no; then dnl Check whether the compiler and linker support weak declarations. - AC_CACHE_CHECK([whether imported symbols can be declared weak], - [gl_cv_have_weak], - [gl_cv_have_weak=no - dnl First, test whether the compiler accepts it syntactically. - AC_LINK_IFELSE( - [AC_LANG_PROGRAM( - [[extern void xyzzy (); -#pragma weak xyzzy]], - [[xyzzy();]])], - [gl_cv_have_weak=maybe]) - if test $gl_cv_have_weak = maybe; then - dnl Second, test whether it actually works. On Cygwin 1.7.2, with - dnl gcc 4.3, symbols declared weak always evaluate to the address 0. - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -#include <stdio.h> -#pragma weak fputs -int main () -{ - return (fputs == NULL); -}]])], - [gl_cv_have_weak=yes], - [gl_cv_have_weak=no], - [dnl When cross-compiling, assume that only ELF platforms support - dnl weak symbols. - AC_EGREP_CPP([Extensible Linking Format], - [#ifdef __ELF__ - Extensible Linking Format - #endif - ], - [gl_cv_have_weak="guessing yes"], - [gl_cv_have_weak="guessing no"]) - ]) - fi - ]) - if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then - # On OSF/1, the compiler needs the flag -pthread or -D_REENTRANT so that - # it groks <pthread.h>. It's added above, in gl_THREADLIB_EARLY_BODY. - AC_CHECK_HEADER([pthread.h], - [gl_have_pthread_h=yes], [gl_have_pthread_h=no]) - if test "$gl_have_pthread_h" = yes; then - # Other possible tests: - # -lpthreads (FSU threads, PCthreads) - # -lgthreads - gl_have_pthread= - # Test whether both pthread_mutex_lock and pthread_mutexattr_init exist - # in libc. IRIX 6.5 has the first one in both libc and libpthread, but - # the second one only in libpthread, and lock.c needs it. - # - # If -pthread works, prefer it to -lpthread, since Ubuntu 14.04 - # needs -pthread for some reason. See: - # http://lists.gnu.org/archive/html/bug-gnulib/2014-09/msg00023.html - save_LIBS=$LIBS - for gl_pthread in '' '-pthread'; do - LIBS="$LIBS $gl_pthread" - AC_LINK_IFELSE( - [AC_LANG_PROGRAM( - [[#include <pthread.h> - pthread_mutex_t m; - pthread_mutexattr_t ma; - ]], - [[pthread_mutex_lock (&m); - pthread_mutexattr_init (&ma);]])], - [gl_have_pthread=yes - LIBTHREAD=$gl_pthread LTLIBTHREAD=$gl_pthread - LIBMULTITHREAD=$gl_pthread LTLIBMULTITHREAD=$gl_pthread]) - LIBS=$save_LIBS - test -n "$gl_have_pthread" && break - done - - # Test for libpthread by looking for pthread_kill. (Not pthread_self, - # since it is defined as a macro on OSF/1.) - if test -n "$gl_have_pthread" && test -z "$LIBTHREAD"; then - # The program links fine without libpthread. But it may actually - # need to link with libpthread in order to create multiple threads. - AC_CHECK_LIB([pthread], [pthread_kill], - [LIBMULTITHREAD=-lpthread LTLIBMULTITHREAD=-lpthread - # On Solaris and HP-UX, most pthread functions exist also in libc. - # Therefore pthread_in_use() needs to actually try to create a - # thread: pthread_create from libc will fail, whereas - # pthread_create will actually create a thread. - case "$host_os" in - solaris* | hpux*) - AC_DEFINE([PTHREAD_IN_USE_DETECTION_HARD], [1], - [Define if the pthread_in_use() detection is hard.]) - esac - ]) - elif test -z "$gl_have_pthread"; then - # Some library is needed. Try libpthread and libc_r. - AC_CHECK_LIB([pthread], [pthread_kill], - [gl_have_pthread=yes - LIBTHREAD=-lpthread LTLIBTHREAD=-lpthread - LIBMULTITHREAD=-lpthread LTLIBMULTITHREAD=-lpthread]) - if test -z "$gl_have_pthread"; then - # For FreeBSD 4. - AC_CHECK_LIB([c_r], [pthread_kill], - [gl_have_pthread=yes - LIBTHREAD=-lc_r LTLIBTHREAD=-lc_r - LIBMULTITHREAD=-lc_r LTLIBMULTITHREAD=-lc_r]) - fi - fi - if test -n "$gl_have_pthread"; then + gl_WEAK_SYMBOLS + if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then + dnl If we use weak symbols to implement pthread_in_use / pth_in_use / + dnl thread_in_use, we also need to test whether the ISO C 11 thrd_create + dnl facility is in use. + AC_CHECK_HEADERS_ONCE([threads.h]) + : + fi + if test "$gl_use_threads" = isoc || test "$gl_use_threads" = isoc+posix; then + AC_CHECK_HEADERS_ONCE([threads.h]) + gl_have_isoc_threads="$ac_cv_header_threads_h" + fi + if test "$gl_use_threads" = yes \ + || test "$gl_use_threads" = posix \ + || test "$gl_use_threads" = isoc+posix; then + gl_PTHREADLIB_BODY + LIBTHREAD=$LIBPTHREAD LTLIBTHREAD=$LIBPTHREAD + LIBMULTITHREAD=$LIBPMULTITHREAD LTLIBMULTITHREAD=$LIBPMULTITHREAD + if test $gl_pthread_api = yes; then + if test "$gl_use_threads" = isoc+posix && test "$gl_have_isoc_threads" = yes; then + gl_threads_api='isoc+posix' + AC_DEFINE([USE_ISOC_AND_POSIX_THREADS], [1], + [Define if the combination of the ISO C and POSIX multithreading APIs can be used.]) + LIBTHREAD= LTLIBTHREAD= + else gl_threads_api=posix AC_DEFINE([USE_POSIX_THREADS], [1], [Define if the POSIX multithreading library can be used.]) @@ -223,75 +485,23 @@ if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then AC_DEFINE([USE_POSIX_THREADS_WEAK], [1], [Define if references to the POSIX multithreading library should be made weak.]) - LIBTHREAD= - LTLIBTHREAD= + LIBTHREAD= LTLIBTHREAD= fi fi fi fi fi - if test -z "$gl_have_pthread"; then - if test "$gl_use_threads" = yes || test "$gl_use_threads" = solaris; then - gl_have_solaristhread= - gl_save_LIBS="$LIBS" - LIBS="$LIBS -lthread" - AC_LINK_IFELSE( - [AC_LANG_PROGRAM( - [[ -#include <thread.h> -#include <synch.h> - ]], - [[thr_self();]])], - [gl_have_solaristhread=yes]) - LIBS="$gl_save_LIBS" - if test -n "$gl_have_solaristhread"; then - gl_threads_api=solaris - LIBTHREAD=-lthread - LTLIBTHREAD=-lthread - LIBMULTITHREAD="$LIBTHREAD" - LTLIBMULTITHREAD="$LTLIBTHREAD" - AC_DEFINE([USE_SOLARIS_THREADS], [1], - [Define if the old Solaris multithreading library can be used.]) - if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then - AC_DEFINE([USE_SOLARIS_THREADS_WEAK], [1], - [Define if references to the old Solaris multithreading library should be made weak.]) - LIBTHREAD= - LTLIBTHREAD= - fi - fi + if test $gl_threads_api = none; then + if test "$gl_use_threads" = isoc && test "$gl_have_isoc_threads" = yes; then + gl_STDTHREADLIB_BODY + LIBTHREAD=$LIBSTDTHREAD LTLIBTHREAD=$LIBSTDTHREAD + LIBMULTITHREAD=$LIBSTDTHREAD LTLIBMULTITHREAD=$LIBSTDTHREAD + gl_threads_api=isoc + AC_DEFINE([USE_ISOC_THREADS], [1], + [Define if the ISO C multithreading library can be used.]) fi fi - if test "$gl_use_threads" = pth; then - gl_save_CPPFLAGS="$CPPFLAGS" - AC_LIB_LINKFLAGS([pth]) - gl_have_pth= - gl_save_LIBS="$LIBS" - LIBS="$LIBS $LIBPTH" - AC_LINK_IFELSE( - [AC_LANG_PROGRAM([[#include <pth.h>]], [[pth_self();]])], - [gl_have_pth=yes]) - LIBS="$gl_save_LIBS" - if test -n "$gl_have_pth"; then - gl_threads_api=pth - LIBTHREAD="$LIBPTH" - LTLIBTHREAD="$LTLIBPTH" - LIBMULTITHREAD="$LIBTHREAD" - LTLIBMULTITHREAD="$LTLIBTHREAD" - AC_DEFINE([USE_PTH_THREADS], [1], - [Define if the GNU Pth multithreading library can be used.]) - if test -n "$LIBMULTITHREAD" || test -n "$LTLIBMULTITHREAD"; then - if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then - AC_DEFINE([USE_PTH_THREADS_WEAK], [1], - [Define if references to the GNU Pth multithreading library should be made weak.]) - LIBTHREAD= - LTLIBTHREAD= - fi - fi - else - CPPFLAGS="$gl_save_CPPFLAGS" - fi - fi - if test -z "$gl_have_pthread"; then + if test $gl_threads_api = none; then case "$gl_use_threads" in yes | windows | win32) # The 'win32' is for backward compatibility. if { case "$host_os" in @@ -333,6 +543,21 @@ ]) +dnl gl_AVOID_WINPTHREAD +dnl ------------------- +dnl Sets the gl_THREADLIB default so that on mingw, a dependency to the +dnl libwinpthread DLL (mingw-w64 winpthreads library) is avoided. +dnl The user can still override it at installation time, by using the +dnl configure option '--enable-threads'. + +AC_DEFUN([gl_AVOID_WINPTHREAD], [ + m4_divert_text([INIT_PREPARE], [gl_use_winpthreads_default=no]) +]) + + +dnl ============================================================================ + + dnl Survey of platforms: dnl dnl Platform Available Compiler Supports test-lock @@ -362,7 +587,6 @@ dnl Mac OS X 10.[123] posix -lpthread Y OK dnl dnl Solaris 7,8,9 posix -lpthread Y Sol 7,8: 0.0; Sol 9: OK -dnl solaris -lthread Y Sol 7,8: 0.0; Sol 9: OK dnl dnl HP-UX 11 posix -lpthread N (cc) OK dnl Y (gcc) @@ -376,8 +600,6 @@ dnl dnl Cygwin posix -lpthread Y OK dnl -dnl Any of the above pth -lpth 0.0 -dnl dnl Mingw windows N OK dnl dnl BeOS 5 -- diff -Nru gdb-9.1/gnulib/import/m4/time_h.m4 gdb-10.2/gnulib/import/m4/time_h.m4 --- gdb-9.1/gnulib/import/m4/time_h.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/time_h.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,8 +1,8 @@ # Configure a more-standard replacement for <time.h>. -# Copyright (C) 2000-2001, 2003-2007, 2009-2016 Free Software Foundation, Inc. +# Copyright (C) 2000-2001, 2003-2007, 2009-2020 Free Software Foundation, Inc. -# serial 9 +# serial 12 # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -19,10 +19,12 @@ AC_DEFUN([gl_HEADER_TIME_H_BODY], [ - AC_REQUIRE([AC_C_RESTRICT]) AC_REQUIRE([gl_HEADER_TIME_H_DEFAULTS]) + gl_NEXT_HEADERS([time.h]) AC_REQUIRE([gl_CHECK_TYPE_STRUCT_TIMESPEC]) + + AC_REQUIRE([AC_C_RESTRICT]) ]) dnl Check whether 'struct timespec' is declared @@ -104,24 +106,34 @@ AC_DEFUN([gl_HEADER_TIME_H_DEFAULTS], [ + GNULIB_CTIME=0; AC_SUBST([GNULIB_CTIME]) GNULIB_MKTIME=0; AC_SUBST([GNULIB_MKTIME]) + GNULIB_LOCALTIME=0; AC_SUBST([GNULIB_LOCALTIME]) GNULIB_NANOSLEEP=0; AC_SUBST([GNULIB_NANOSLEEP]) + GNULIB_STRFTIME=0; AC_SUBST([GNULIB_STRFTIME]) GNULIB_STRPTIME=0; AC_SUBST([GNULIB_STRPTIME]) GNULIB_TIMEGM=0; AC_SUBST([GNULIB_TIMEGM]) GNULIB_TIME_R=0; AC_SUBST([GNULIB_TIME_R]) GNULIB_TIME_RZ=0; AC_SUBST([GNULIB_TIME_RZ]) + GNULIB_TZSET=0; AC_SUBST([GNULIB_TZSET]) dnl Assume proper GNU behavior unless another module says otherwise. HAVE_DECL_LOCALTIME_R=1; AC_SUBST([HAVE_DECL_LOCALTIME_R]) HAVE_NANOSLEEP=1; AC_SUBST([HAVE_NANOSLEEP]) HAVE_STRPTIME=1; AC_SUBST([HAVE_STRPTIME]) HAVE_TIMEGM=1; AC_SUBST([HAVE_TIMEGM]) + HAVE_TZSET=1; AC_SUBST([HAVE_TZSET]) + dnl Even GNU libc does not have timezone_t yet. + HAVE_TIMEZONE_T=0; AC_SUBST([HAVE_TIMEZONE_T]) dnl If another module says to replace or to not replace, do that. dnl Otherwise, replace only if someone compiles with -DGNULIB_PORTCHECK; dnl this lets maintainers check for portability. + REPLACE_CTIME=GNULIB_PORTCHECK; AC_SUBST([REPLACE_CTIME]) REPLACE_LOCALTIME_R=GNULIB_PORTCHECK; AC_SUBST([REPLACE_LOCALTIME_R]) REPLACE_MKTIME=GNULIB_PORTCHECK; AC_SUBST([REPLACE_MKTIME]) REPLACE_NANOSLEEP=GNULIB_PORTCHECK; AC_SUBST([REPLACE_NANOSLEEP]) + REPLACE_STRFTIME=GNULIB_PORTCHECK; AC_SUBST([REPLACE_STRFTIME]) REPLACE_TIMEGM=GNULIB_PORTCHECK; AC_SUBST([REPLACE_TIMEGM]) + REPLACE_TZSET=GNULIB_PORTCHECK; AC_SUBST([REPLACE_TZSET]) dnl Hack so that the time module doesn't depend on the sys_time module. dnl First, default GNULIB_GETTIMEOFDAY to 0 if sys_time is absent. diff -Nru gdb-9.1/gnulib/import/m4/time_r.m4 gdb-10.2/gnulib/import/m4/time_r.m4 --- gdb-9.1/gnulib/import/m4/time_r.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/time_r.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ dnl Reentrant time functions: localtime_r, gmtime_r. -dnl Copyright (C) 2003, 2006-2016 Free Software Foundation, Inc. +dnl Copyright (C) 2003, 2006-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -17,7 +17,15 @@ dnl Some systems don't declare localtime_r() and gmtime_r() if _REENTRANT is dnl not defined. - AC_CHECK_DECLS([localtime_r], [], [], [[#include <time.h>]]) + AC_CHECK_DECLS([localtime_r], [], [], + [[/* mingw's <time.h> provides the functions asctime_r, ctime_r, + gmtime_r, localtime_r only if <unistd.h> or <pthread.h> has + been included before. */ + #if defined __MINGW32__ + # include <unistd.h> + #endif + #include <time.h> + ]]) if test $ac_cv_have_decl_localtime_r = no; then HAVE_DECL_LOCALTIME_R=0 fi @@ -29,7 +37,14 @@ [gl_cv_time_r_posix], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( - [[#include <time.h>]], + [[/* mingw's <time.h> provides the functions asctime_r, ctime_r, + gmtime_r, localtime_r only if <unistd.h> or <pthread.h> has + been included before. */ + #if defined __MINGW32__ + # include <unistd.h> + #endif + #include <time.h> + ]], [[/* We don't need to append 'restrict's to the argument types, even though the POSIX signature has the 'restrict's, since C99 says they can't affect type compatibility. */ @@ -49,6 +64,32 @@ fi else HAVE_LOCALTIME_R=0 + dnl On mingw, localtime_r() is defined as an inline function; use through a + dnl direct function call works but the use as a function pointer leads to a + dnl link error. + AC_CACHE_CHECK([whether localtime_r exists as an inline function], + [gl_cv_func_localtime_r_inline], + [AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[/* mingw's <time.h> provides the functions asctime_r, ctime_r, + gmtime_r, localtime_r only if <unistd.h> or <pthread.h> has + been included before. */ + #if defined __MINGW32__ + # include <unistd.h> + #endif + #include <time.h> + ]], + [[time_t a; + struct tm r; + localtime_r (&a, &r); + ]]) + ], + [gl_cv_func_localtime_r_inline=yes], + [gl_cv_func_localtime_r_inline=no]) + ]) + if test $gl_cv_func_localtime_r_inline = yes; then + REPLACE_LOCALTIME_R=1 + fi fi ]) diff -Nru gdb-9.1/gnulib/import/m4/unistd_h.m4 gdb-10.2/gnulib/import/m4/unistd_h.m4 --- gdb-9.1/gnulib/import/m4/unistd_h.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/unistd_h.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ -# unistd_h.m4 serial 68 -dnl Copyright (C) 2006-2016 Free Software Foundation, Inc. +# unistd_h.m4 serial 80 +dnl Copyright (C) 2006-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -37,17 +37,19 @@ # include <fcntl.h> # include <stdio.h> # include <stdlib.h> -# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ +# if defined _WIN32 && ! defined __CYGWIN__ # include <io.h> # endif #endif - ]], [chdir chown dup dup2 dup3 environ euidaccess faccessat fchdir fchownat - fdatasync fsync ftruncate getcwd getdomainname getdtablesize getgroups - gethostname getlogin getlogin_r getpagesize + ]], [access chdir chown dup dup2 dup3 environ euidaccess faccessat fchdir + fchownat fdatasync fsync ftruncate getcwd getdomainname getdtablesize + getentropy getgroups gethostname getlogin getlogin_r getpagesize getpass getusershell setusershell endusershell group_member isatty lchown link linkat lseek pipe pipe2 pread pwrite - readlink readlinkat rmdir sethostname sleep symlink symlinkat ttyname_r - unlink unlinkat usleep]) + readlink readlinkat rmdir sethostname sleep symlink symlinkat + truncate ttyname_r unlink unlinkat usleep]) + + AC_REQUIRE([AC_C_RESTRICT]) ]) AC_DEFUN([gl_UNISTD_MODULE_INDICATOR], @@ -61,9 +63,11 @@ AC_DEFUN([gl_UNISTD_H_DEFAULTS], [ + GNULIB_ACCESS=0; AC_SUBST([GNULIB_ACCESS]) GNULIB_CHDIR=0; AC_SUBST([GNULIB_CHDIR]) GNULIB_CHOWN=0; AC_SUBST([GNULIB_CHOWN]) GNULIB_CLOSE=0; AC_SUBST([GNULIB_CLOSE]) + GNULIB_COPY_FILE_RANGE=0; AC_SUBST([GNULIB_COPY_FILE_RANGE]) GNULIB_DUP=0; AC_SUBST([GNULIB_DUP]) GNULIB_DUP2=0; AC_SUBST([GNULIB_DUP2]) GNULIB_DUP3=0; AC_SUBST([GNULIB_DUP3]) @@ -78,11 +82,14 @@ GNULIB_GETCWD=0; AC_SUBST([GNULIB_GETCWD]) GNULIB_GETDOMAINNAME=0; AC_SUBST([GNULIB_GETDOMAINNAME]) GNULIB_GETDTABLESIZE=0; AC_SUBST([GNULIB_GETDTABLESIZE]) + GNULIB_GETENTROPY=0; AC_SUBST([GNULIB_GETENTROPY]) GNULIB_GETGROUPS=0; AC_SUBST([GNULIB_GETGROUPS]) GNULIB_GETHOSTNAME=0; AC_SUBST([GNULIB_GETHOSTNAME]) GNULIB_GETLOGIN=0; AC_SUBST([GNULIB_GETLOGIN]) GNULIB_GETLOGIN_R=0; AC_SUBST([GNULIB_GETLOGIN_R]) + GNULIB_GETOPT_POSIX=0; AC_SUBST([GNULIB_GETOPT_POSIX]) GNULIB_GETPAGESIZE=0; AC_SUBST([GNULIB_GETPAGESIZE]) + GNULIB_GETPASS=0; AC_SUBST([GNULIB_GETPASS]) GNULIB_GETUSERSHELL=0; AC_SUBST([GNULIB_GETUSERSHELL]) GNULIB_GROUP_MEMBER=0; AC_SUBST([GNULIB_GROUP_MEMBER]) GNULIB_ISATTY=0; AC_SUBST([GNULIB_ISATTY]) @@ -102,6 +109,7 @@ GNULIB_SLEEP=0; AC_SUBST([GNULIB_SLEEP]) GNULIB_SYMLINK=0; AC_SUBST([GNULIB_SYMLINK]) GNULIB_SYMLINKAT=0; AC_SUBST([GNULIB_SYMLINKAT]) + GNULIB_TRUNCATE=0; AC_SUBST([GNULIB_TRUNCATE]) GNULIB_TTYNAME_R=0; AC_SUBST([GNULIB_TTYNAME_R]) GNULIB_UNISTD_H_NONBLOCKING=0; AC_SUBST([GNULIB_UNISTD_H_NONBLOCKING]) GNULIB_UNISTD_H_SIGPIPE=0; AC_SUBST([GNULIB_UNISTD_H_SIGPIPE]) @@ -111,6 +119,7 @@ GNULIB_WRITE=0; AC_SUBST([GNULIB_WRITE]) dnl Assume proper GNU behavior unless another module says otherwise. HAVE_CHOWN=1; AC_SUBST([HAVE_CHOWN]) + HAVE_COPY_FILE_RANGE=1; AC_SUBST([HAVE_COPY_FILE_RANGE]) HAVE_DUP2=1; AC_SUBST([HAVE_DUP2]) HAVE_DUP3=1; AC_SUBST([HAVE_DUP3]) HAVE_EUIDACCESS=1; AC_SUBST([HAVE_EUIDACCESS]) @@ -121,10 +130,12 @@ HAVE_FSYNC=1; AC_SUBST([HAVE_FSYNC]) HAVE_FTRUNCATE=1; AC_SUBST([HAVE_FTRUNCATE]) HAVE_GETDTABLESIZE=1; AC_SUBST([HAVE_GETDTABLESIZE]) + HAVE_GETENTROPY=1; AC_SUBST([HAVE_GETENTROPY]) HAVE_GETGROUPS=1; AC_SUBST([HAVE_GETGROUPS]) HAVE_GETHOSTNAME=1; AC_SUBST([HAVE_GETHOSTNAME]) HAVE_GETLOGIN=1; AC_SUBST([HAVE_GETLOGIN]) HAVE_GETPAGESIZE=1; AC_SUBST([HAVE_GETPAGESIZE]) + HAVE_GETPASS=1; AC_SUBST([HAVE_GETPASS]) HAVE_GROUP_MEMBER=1; AC_SUBST([HAVE_GROUP_MEMBER]) HAVE_LCHOWN=1; AC_SUBST([HAVE_LCHOWN]) HAVE_LINK=1; AC_SUBST([HAVE_LINK]) @@ -145,17 +156,21 @@ HAVE_DECL_FCHDIR=1; AC_SUBST([HAVE_DECL_FCHDIR]) HAVE_DECL_FDATASYNC=1; AC_SUBST([HAVE_DECL_FDATASYNC]) HAVE_DECL_GETDOMAINNAME=1; AC_SUBST([HAVE_DECL_GETDOMAINNAME]) + HAVE_DECL_GETLOGIN=1; AC_SUBST([HAVE_DECL_GETLOGIN]) HAVE_DECL_GETLOGIN_R=1; AC_SUBST([HAVE_DECL_GETLOGIN_R]) HAVE_DECL_GETPAGESIZE=1; AC_SUBST([HAVE_DECL_GETPAGESIZE]) HAVE_DECL_GETUSERSHELL=1; AC_SUBST([HAVE_DECL_GETUSERSHELL]) HAVE_DECL_SETHOSTNAME=1; AC_SUBST([HAVE_DECL_SETHOSTNAME]) + HAVE_DECL_TRUNCATE=1; AC_SUBST([HAVE_DECL_TRUNCATE]) HAVE_DECL_TTYNAME_R=1; AC_SUBST([HAVE_DECL_TTYNAME_R]) HAVE_OS_H=0; AC_SUBST([HAVE_OS_H]) HAVE_SYS_PARAM_H=0; AC_SUBST([HAVE_SYS_PARAM_H]) + REPLACE_ACCESS=0; AC_SUBST([REPLACE_ACCESS]) REPLACE_CHOWN=0; AC_SUBST([REPLACE_CHOWN]) REPLACE_CLOSE=0; AC_SUBST([REPLACE_CLOSE]) REPLACE_DUP=0; AC_SUBST([REPLACE_DUP]) REPLACE_DUP2=0; AC_SUBST([REPLACE_DUP2]) + REPLACE_FACCESSAT=0; AC_SUBST([REPLACE_FACCESSAT]) REPLACE_FCHOWNAT=0; AC_SUBST([REPLACE_FCHOWNAT]) REPLACE_FTRUNCATE=0; AC_SUBST([REPLACE_FTRUNCATE]) REPLACE_GETCWD=0; AC_SUBST([REPLACE_GETCWD]) @@ -164,6 +179,7 @@ REPLACE_GETLOGIN_R=0; AC_SUBST([REPLACE_GETLOGIN_R]) REPLACE_GETGROUPS=0; AC_SUBST([REPLACE_GETGROUPS]) REPLACE_GETPAGESIZE=0; AC_SUBST([REPLACE_GETPAGESIZE]) + REPLACE_GETPASS=0; AC_SUBST([REPLACE_GETPASS]) REPLACE_ISATTY=0; AC_SUBST([REPLACE_ISATTY]) REPLACE_LCHOWN=0; AC_SUBST([REPLACE_LCHOWN]) REPLACE_LINK=0; AC_SUBST([REPLACE_LINK]) @@ -178,11 +194,13 @@ REPLACE_SLEEP=0; AC_SUBST([REPLACE_SLEEP]) REPLACE_SYMLINK=0; AC_SUBST([REPLACE_SYMLINK]) REPLACE_SYMLINKAT=0; AC_SUBST([REPLACE_SYMLINKAT]) + REPLACE_TRUNCATE=0; AC_SUBST([REPLACE_TRUNCATE]) REPLACE_TTYNAME_R=0; AC_SUBST([REPLACE_TTYNAME_R]) REPLACE_UNLINK=0; AC_SUBST([REPLACE_UNLINK]) REPLACE_UNLINKAT=0; AC_SUBST([REPLACE_UNLINKAT]) REPLACE_USLEEP=0; AC_SUBST([REPLACE_USLEEP]) REPLACE_WRITE=0; AC_SUBST([REPLACE_WRITE]) + UNISTD_H_HAVE_SYS_RANDOM_H=0; AC_SUBST([UNISTD_H_HAVE_SYS_RANDOM_H]) UNISTD_H_HAVE_WINSOCK2_H=0; AC_SUBST([UNISTD_H_HAVE_WINSOCK2_H]) UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS=0; AC_SUBST([UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS]) diff -Nru gdb-9.1/gnulib/import/m4/unistd-safer.m4 gdb-10.2/gnulib/import/m4/unistd-safer.m4 --- gdb-9.1/gnulib/import/m4/unistd-safer.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/unistd-safer.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ #serial 9 -dnl Copyright (C) 2002, 2005-2006, 2009-2016 Free Software Foundation, Inc. +dnl Copyright (C) 2002, 2005-2006, 2009-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. diff -Nru gdb-9.1/gnulib/import/m4/visibility.m4 gdb-10.2/gnulib/import/m4/visibility.m4 --- gdb-9.1/gnulib/import/m4/visibility.m4 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/visibility.m4 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,77 @@ +# visibility.m4 serial 6 +dnl Copyright (C) 2005, 2008, 2010-2020 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +dnl Tests whether the compiler supports the command-line option +dnl -fvisibility=hidden and the function and variable attributes +dnl __attribute__((__visibility__("hidden"))) and +dnl __attribute__((__visibility__("default"))). +dnl Does *not* test for __visibility__("protected") - which has tricky +dnl semantics (see the 'vismain' test in glibc) and does not exist e.g. on +dnl Mac OS X. +dnl Does *not* test for __visibility__("internal") - which has processor +dnl dependent semantics. +dnl Does *not* test for #pragma GCC visibility push(hidden) - which is +dnl "really only recommended for legacy code". +dnl Set the variable CFLAG_VISIBILITY. +dnl Defines and sets the variable HAVE_VISIBILITY. + +AC_DEFUN([gl_VISIBILITY], +[ + AC_REQUIRE([AC_PROG_CC]) + CFLAG_VISIBILITY= + HAVE_VISIBILITY=0 + if test -n "$GCC"; then + dnl First, check whether -Werror can be added to the command line, or + dnl whether it leads to an error because of some other option that the + dnl user has put into $CC $CFLAGS $CPPFLAGS. + AC_CACHE_CHECK([whether the -Werror option is usable], + [gl_cv_cc_vis_werror], + [gl_save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -Werror" + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([[]], [[]])], + [gl_cv_cc_vis_werror=yes], + [gl_cv_cc_vis_werror=no]) + CFLAGS="$gl_save_CFLAGS" + ]) + dnl Now check whether visibility declarations are supported. + AC_CACHE_CHECK([for simple visibility declarations], + [gl_cv_cc_visibility], + [gl_save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -fvisibility=hidden" + dnl We use the option -Werror and a function dummyfunc, because on some + dnl platforms (Cygwin 1.7) the use of -fvisibility triggers a warning + dnl "visibility attribute not supported in this configuration; ignored" + dnl at the first function definition in every compilation unit, and we + dnl don't want to use the option in this case. + if test $gl_cv_cc_vis_werror = yes; then + CFLAGS="$CFLAGS -Werror" + fi + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[extern __attribute__((__visibility__("hidden"))) int hiddenvar; + extern __attribute__((__visibility__("default"))) int exportedvar; + extern __attribute__((__visibility__("hidden"))) int hiddenfunc (void); + extern __attribute__((__visibility__("default"))) int exportedfunc (void); + void dummyfunc (void) {} + ]], + [[]])], + [gl_cv_cc_visibility=yes], + [gl_cv_cc_visibility=no]) + CFLAGS="$gl_save_CFLAGS" + ]) + if test $gl_cv_cc_visibility = yes; then + CFLAG_VISIBILITY="-fvisibility=hidden" + HAVE_VISIBILITY=1 + fi + fi + AC_SUBST([CFLAG_VISIBILITY]) + AC_SUBST([HAVE_VISIBILITY]) + AC_DEFINE_UNQUOTED([HAVE_VISIBILITY], [$HAVE_VISIBILITY], + [Define to 1 or 0, depending whether the compiler supports simple visibility declarations.]) +]) diff -Nru gdb-9.1/gnulib/import/m4/warn-on-use.m4 gdb-10.2/gnulib/import/m4/warn-on-use.m4 --- gdb-9.1/gnulib/import/m4/warn-on-use.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/warn-on-use.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,11 +1,13 @@ -# warn-on-use.m4 serial 5 -dnl Copyright (C) 2010-2016 Free Software Foundation, Inc. +# warn-on-use.m4 serial 6 +dnl Copyright (C) 2010-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # gl_WARN_ON_USE_PREPARE(INCLUDES, NAMES) # --------------------------------------- +# If the module 'posixcheck' is in use: +# # For each whitespace-separated element in the list of NAMES, define # HAVE_RAW_DECL_name if the function has a declaration among INCLUDES # even after being undefined as a macro. @@ -23,25 +25,27 @@ # needing gl_WARN_ON_USE_PREPARE. AC_DEFUN([gl_WARN_ON_USE_PREPARE], [ - m4_foreach_w([gl_decl], [$2], - [AH_TEMPLATE([HAVE_RAW_DECL_]AS_TR_CPP(m4_defn([gl_decl])), - [Define to 1 if ]m4_defn([gl_decl])[ is declared even after - undefining macros.])])dnl + m4_ifdef([gl_POSIXCHECK], + [m4_foreach_w([gl_decl], [$2], + [AH_TEMPLATE([HAVE_RAW_DECL_]AS_TR_CPP(m4_defn([gl_decl])), + [Define to 1 if ]m4_defn([gl_decl])[ is declared even after + undefining macros.])])dnl dnl FIXME: gl_Symbol must be used unquoted until we can assume dnl autoconf 2.64 or newer. - for gl_func in m4_flatten([$2]); do - AS_VAR_PUSHDEF([gl_Symbol], [gl_cv_have_raw_decl_$gl_func])dnl - AC_CACHE_CHECK([whether $gl_func is declared without a macro], - gl_Symbol, - [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([$1], + for gl_func in m4_flatten([$2]); do + AS_VAR_PUSHDEF([gl_Symbol], [gl_cv_have_raw_decl_$gl_func])dnl + AC_CACHE_CHECK([whether $gl_func is declared without a macro], + gl_Symbol, + [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([$1], [@%:@undef $gl_func (void) $gl_func;])], - [AS_VAR_SET(gl_Symbol, [yes])], [AS_VAR_SET(gl_Symbol, [no])])]) - AS_VAR_IF(gl_Symbol, [yes], - [AC_DEFINE_UNQUOTED(AS_TR_CPP([HAVE_RAW_DECL_$gl_func]), [1]) - dnl shortcut - if the raw declaration exists, then set a cache - dnl variable to allow skipping any later AC_CHECK_DECL efforts - eval ac_cv_have_decl_$gl_func=yes]) - AS_VAR_POPDEF([gl_Symbol])dnl - done + [AS_VAR_SET(gl_Symbol, [yes])], [AS_VAR_SET(gl_Symbol, [no])])]) + AS_VAR_IF(gl_Symbol, [yes], + [AC_DEFINE_UNQUOTED(AS_TR_CPP([HAVE_RAW_DECL_$gl_func]), [1]) + dnl shortcut - if the raw declaration exists, then set a cache + dnl variable to allow skipping any later AC_CHECK_DECL efforts + eval ac_cv_have_decl_$gl_func=yes]) + AS_VAR_POPDEF([gl_Symbol])dnl + done + ]) ]) diff -Nru gdb-9.1/gnulib/import/m4/wchar_h.m4 gdb-10.2/gnulib/import/m4/wchar_h.m4 --- gdb-9.1/gnulib/import/m4/wchar_h.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/wchar_h.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,13 +1,13 @@ dnl A placeholder for ISO C99 <wchar.h>, for platforms that have issues. -dnl Copyright (C) 2007-2016 Free Software Foundation, Inc. +dnl Copyright (C) 2007-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Written by Eric Blake. -# wchar_h.m4 serial 40 +# wchar_h.m4 serial 46 AC_DEFUN([gl_WCHAR_H], [ @@ -35,6 +35,8 @@ fi AC_SUBST([HAVE_WINT_T]) + AC_REQUIRE([gl_TYPE_WINT_T_PREREQ]) + dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[ @@ -50,19 +52,22 @@ #include <wchar.h> ]], [btowc wctob mbsinit mbrtowc mbrlen mbsrtowcs mbsnrtowcs wcrtomb - wcsrtombs wcsnrtombs wcwidth wmemchr wmemcmp wmemcpy wmemmove wmemset + wcsrtombs wcsnrtombs wcwidth + wmemchr wmemcmp wmemcpy wmemmove wmempcpy wmemset wcslen wcsnlen wcscpy wcpcpy wcsncpy wcpncpy wcscat wcsncat wcscmp wcsncmp wcscasecmp wcsncasecmp wcscoll wcsxfrm wcsdup wcschr wcsrchr - wcscspn wcsspn wcspbrk wcsstr wcstok wcswidth + wcscspn wcsspn wcspbrk wcsstr wcstok wcswidth wcsftime ]) + + AC_REQUIRE([AC_C_RESTRICT]) ]) dnl Check whether <wchar.h> is usable at all. AC_DEFUN([gl_WCHAR_H_INLINE_OK], [ dnl Test whether <wchar.h> suffers due to the transition from '__inline' to - dnl 'gnu_inline'. See <http://sourceware.org/bugzilla/show_bug.cgi?id=4022> - dnl and <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42440>. In summary, + dnl 'gnu_inline'. See <https://sourceware.org/bugzilla/show_bug.cgi?id=4022> + dnl and <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=42440>. In summary, dnl glibc version 2.5 or older, together with gcc version 4.3 or newer and dnl the option -std=c99 or -std=gnu99, leads to a broken <wchar.h>. AC_CACHE_CHECK([whether <wchar.h> uses 'inline' correctly], @@ -88,7 +93,8 @@ dnl that the object file has the latter name from the start. save_ac_compile="$ac_compile" ac_compile=`echo "$save_ac_compile" | sed s/conftest/conftest1/` - if AC_TRY_EVAL([ac_compile]); then + if echo '#include "conftest.c"' >conftest1.c && + AC_TRY_EVAL([ac_compile]); then AC_LANG_CONFTEST([ AC_LANG_SOURCE([[#define wcstod renamed_wcstod /* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before @@ -103,7 +109,8 @@ ]])]) dnl See note above about renaming object files. ac_compile=`echo "$save_ac_compile" | sed s/conftest/conftest2/` - if AC_TRY_EVAL([ac_compile]); then + if echo '#include "conftest.c"' >conftest2.c && + AC_TRY_EVAL([ac_compile]); then if $CC -o conftest$ac_exeext $CFLAGS $LDFLAGS conftest1.$ac_objext conftest2.$ac_objext $LIBS >&AS_MESSAGE_LOG_FD 2>&1; then : else @@ -112,7 +119,7 @@ fi fi ac_compile="$save_ac_compile" - rm -f conftest1.$ac_objext conftest2.$ac_objext conftest$ac_exeext + rm -f conftest[12].c conftest[12].$ac_objext conftest$ac_exeext ]) if test $gl_cv_header_wchar_h_correct_inline = no; then AC_MSG_ERROR([<wchar.h> cannot be used with this compiler ($CC $CFLAGS $CPPFLAGS). @@ -120,7 +127,7 @@ C99 mode. You have four options: - Add the flag -fgnu89-inline to CC and reconfigure, or - Fix your include files, using parts of - <http://sourceware.org/git/?p=glibc.git;a=commitdiff;h=b037a293a48718af30d706c2e18c929d0e69a621>, or + <https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=b037a293a48718af30d706c2e18c929d0e69a621>, or - Use a gcc version older than 4.3, or - Don't use the flags -std=c99 or -std=gnu99. Configuration aborted.]) @@ -153,6 +160,7 @@ GNULIB_WMEMCMP=0; AC_SUBST([GNULIB_WMEMCMP]) GNULIB_WMEMCPY=0; AC_SUBST([GNULIB_WMEMCPY]) GNULIB_WMEMMOVE=0; AC_SUBST([GNULIB_WMEMMOVE]) + GNULIB_WMEMPCPY=0; AC_SUBST([GNULIB_WMEMPCPY]) GNULIB_WMEMSET=0; AC_SUBST([GNULIB_WMEMSET]) GNULIB_WCSLEN=0; AC_SUBST([GNULIB_WCSLEN]) GNULIB_WCSNLEN=0; AC_SUBST([GNULIB_WCSNLEN]) @@ -177,6 +185,7 @@ GNULIB_WCSSTR=0; AC_SUBST([GNULIB_WCSSTR]) GNULIB_WCSTOK=0; AC_SUBST([GNULIB_WCSTOK]) GNULIB_WCSWIDTH=0; AC_SUBST([GNULIB_WCSWIDTH]) + GNULIB_WCSFTIME=0; AC_SUBST([GNULIB_WCSFTIME]) dnl Assume proper GNU behavior unless another module says otherwise. HAVE_BTOWC=1; AC_SUBST([HAVE_BTOWC]) HAVE_MBSINIT=1; AC_SUBST([HAVE_MBSINIT]) @@ -191,6 +200,7 @@ HAVE_WMEMCMP=1; AC_SUBST([HAVE_WMEMCMP]) HAVE_WMEMCPY=1; AC_SUBST([HAVE_WMEMCPY]) HAVE_WMEMMOVE=1; AC_SUBST([HAVE_WMEMMOVE]) + HAVE_WMEMPCPY=1; AC_SUBST([HAVE_WMEMPCPY]) HAVE_WMEMSET=1; AC_SUBST([HAVE_WMEMSET]) HAVE_WCSLEN=1; AC_SUBST([HAVE_WCSLEN]) HAVE_WCSNLEN=1; AC_SUBST([HAVE_WCSNLEN]) @@ -215,6 +225,7 @@ HAVE_WCSSTR=1; AC_SUBST([HAVE_WCSSTR]) HAVE_WCSTOK=1; AC_SUBST([HAVE_WCSTOK]) HAVE_WCSWIDTH=1; AC_SUBST([HAVE_WCSWIDTH]) + HAVE_WCSFTIME=1; AC_SUBST([HAVE_WCSFTIME]) HAVE_DECL_WCTOB=1; AC_SUBST([HAVE_DECL_WCTOB]) HAVE_DECL_WCWIDTH=1; AC_SUBST([HAVE_DECL_WCWIDTH]) REPLACE_MBSTATE_T=0; AC_SUBST([REPLACE_MBSTATE_T]) @@ -230,4 +241,6 @@ REPLACE_WCSNRTOMBS=0; AC_SUBST([REPLACE_WCSNRTOMBS]) REPLACE_WCWIDTH=0; AC_SUBST([REPLACE_WCWIDTH]) REPLACE_WCSWIDTH=0; AC_SUBST([REPLACE_WCSWIDTH]) + REPLACE_WCSFTIME=0; AC_SUBST([REPLACE_WCSFTIME]) + REPLACE_WCSTOK=0; AC_SUBST([REPLACE_WCSTOK]) ]) diff -Nru gdb-9.1/gnulib/import/m4/wchar_t.m4 gdb-10.2/gnulib/import/m4/wchar_t.m4 --- gdb-9.1/gnulib/import/m4/wchar_t.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/wchar_t.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ # wchar_t.m4 serial 4 (gettext-0.18.2) -dnl Copyright (C) 2002-2003, 2008-2016 Free Software Foundation, Inc. +dnl Copyright (C) 2002-2003, 2008-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. diff -Nru gdb-9.1/gnulib/import/m4/wctype_h.m4 gdb-10.2/gnulib/import/m4/wctype_h.m4 --- gdb-9.1/gnulib/import/m4/wctype_h.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/wctype_h.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,8 +1,8 @@ -# wctype_h.m4 serial 18 +# wctype_h.m4 serial 24 dnl A placeholder for ISO C99 <wctype.h>, for platforms that lack it. -dnl Copyright (C) 2006-2016 Free Software Foundation, Inc. +dnl Copyright (C) 2006-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -30,6 +30,8 @@ fi AC_SUBST([HAVE_WINT_T]) + AC_REQUIRE([gl_TYPE_WINT_T_PREREQ]) + gl_CHECK_NEXT_HEADERS([wctype.h]) if test $ac_cv_header_wctype_h = yes; then if test $ac_cv_func_iswcntrl = yes; then @@ -51,7 +53,8 @@ int main () { return iswprint ('x') == 0; } ]])], [gl_cv_func_iswcntrl_works=yes], [gl_cv_func_iswcntrl_works=no], - [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdlib.h> + [dnl Guess no on Linux libc5, yes otherwise. + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdlib.h> #if __GNU_LIBRARY__ == 1 Linux libc5 i18n is broken. #endif]], [])], @@ -66,10 +69,14 @@ fi AC_SUBST([HAVE_WCTYPE_H]) - case "$gl_cv_func_iswcntrl_works" in - *yes) REPLACE_ISWCNTRL=0 ;; - *) REPLACE_ISWCNTRL=1 ;; - esac + if test $GNULIB_OVERRIDES_WINT_T = 1; then + REPLACE_ISWCNTRL=1 + else + case "$gl_cv_func_iswcntrl_works" in + *yes) REPLACE_ISWCNTRL=0 ;; + *) REPLACE_ISWCNTRL=1 ;; + esac + fi AC_SUBST([REPLACE_ISWCNTRL]) if test $HAVE_ISWCNTRL = 0 || test $REPLACE_ISWCNTRL = 1; then @@ -197,6 +204,8 @@ AC_DEFUN([gl_WCTYPE_H_DEFAULTS], [ GNULIB_ISWBLANK=0; AC_SUBST([GNULIB_ISWBLANK]) + GNULIB_ISWDIGIT=0; AC_SUBST([GNULIB_ISWDIGIT]) + GNULIB_ISWXDIGIT=0; AC_SUBST([GNULIB_ISWXDIGIT]) GNULIB_WCTYPE=0; AC_SUBST([GNULIB_WCTYPE]) GNULIB_ISWCTYPE=0; AC_SUBST([GNULIB_ISWCTYPE]) GNULIB_WCTRANS=0; AC_SUBST([GNULIB_WCTRANS]) @@ -206,4 +215,6 @@ HAVE_WCTYPE_T=1; AC_SUBST([HAVE_WCTYPE_T]) HAVE_WCTRANS_T=1; AC_SUBST([HAVE_WCTRANS_T]) REPLACE_ISWBLANK=0; AC_SUBST([REPLACE_ISWBLANK]) + REPLACE_ISWDIGIT=0; AC_SUBST([REPLACE_ISWDIGIT]) + REPLACE_ISWXDIGIT=0; AC_SUBST([REPLACE_ISWXDIGIT]) ]) diff -Nru gdb-9.1/gnulib/import/m4/wint_t.m4 gdb-10.2/gnulib/import/m4/wint_t.m4 --- gdb-9.1/gnulib/import/m4/wint_t.m4 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/wint_t.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,11 +1,12 @@ -# wint_t.m4 serial 5 (gettext-0.18.2) -dnl Copyright (C) 2003, 2007-2016 Free Software Foundation, Inc. +# wint_t.m4 serial 8 +dnl Copyright (C) 2003, 2007-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. -dnl Test whether <wchar.h> has the 'wint_t' type. +dnl Test whether <wchar.h> has the 'wint_t' type and whether gnulib's +dnl <wchar.h> or <wctype.h> would, if present, override 'wint_t'. dnl Prerequisite: AC_PROG_CC AC_DEFUN([gt_TYPE_WINT_T], @@ -28,5 +29,46 @@ [gt_cv_c_wint_t=no])]) if test $gt_cv_c_wint_t = yes; then AC_DEFINE([HAVE_WINT_T], [1], [Define if you have the 'wint_t' type.]) + + dnl Determine whether gnulib's <wchar.h> or <wctype.h> would, if present, + dnl override 'wint_t'. + AC_CACHE_CHECK([whether wint_t is too small], + [gl_cv_type_wint_t_too_small], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([[ +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +#if !(defined __GLIBC__ && !defined __UCLIBC__) +# include <stddef.h> +# include <stdio.h> +# include <time.h> +#endif +#include <wchar.h> + int verify[sizeof (wint_t) < sizeof (int) ? -1 : 1]; + ]])], + [gl_cv_type_wint_t_too_small=no], + [gl_cv_type_wint_t_too_small=yes])]) + if test $gl_cv_type_wint_t_too_small = yes; then + GNULIB_OVERRIDES_WINT_T=1 + else + GNULIB_OVERRIDES_WINT_T=0 + fi + else + GNULIB_OVERRIDES_WINT_T=0 + fi + AC_SUBST([GNULIB_OVERRIDES_WINT_T]) +]) + +dnl Prerequisites of the 'wint_t' override. +AC_DEFUN([gl_TYPE_WINT_T_PREREQ], +[ + AC_CHECK_HEADERS_ONCE([crtdefs.h]) + if test $ac_cv_header_crtdefs_h = yes; then + HAVE_CRTDEFS_H=1 + else + HAVE_CRTDEFS_H=0 fi + AC_SUBST([HAVE_CRTDEFS_H]) ]) diff -Nru gdb-9.1/gnulib/import/m4/wmemchr.m4 gdb-10.2/gnulib/import/m4/wmemchr.m4 --- gdb-9.1/gnulib/import/m4/wmemchr.m4 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/wmemchr.m4 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,32 @@ +# wmemchr.m4 serial 4 +dnl Copyright (C) 2011-2020 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_WMEMCHR], +[ + AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) + dnl We cannot use AC_CHECK_FUNCS here, because the MSVC 9 header files + dnl provide this function as an inline function definition. + AC_CACHE_CHECK([for wmemchr], [gl_cv_func_wmemchr], + [AC_LINK_IFELSE( + [AC_LANG_PROGRAM([[ +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included + before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> +]], + [[return ! wmemchr ((const wchar_t *) 0, (wchar_t) ' ', 0);]]) + ], + [gl_cv_func_wmemchr=yes], + [gl_cv_func_wmemchr=no]) + ]) + if test $gl_cv_func_wmemchr = no; then + HAVE_WMEMCHR=0 + fi +]) diff -Nru gdb-9.1/gnulib/import/m4/wmempcpy.m4 gdb-10.2/gnulib/import/m4/wmempcpy.m4 --- gdb-9.1/gnulib/import/m4/wmempcpy.m4 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/wmempcpy.m4 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,21 @@ +# wmempcpy.m4 serial 1 +dnl Copyright (C) 2020 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_WMEMPCPY], +[ + AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) + + dnl Persuade glibc <wchar.h> to declare wmempcpy(). + AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) + + dnl The wmempcpy() declaration in lib/wchar.in.h uses 'restrict'. + AC_REQUIRE([AC_C_RESTRICT]) + + AC_CHECK_FUNCS_ONCE([wmempcpy]) + if test $ac_cv_func_wmempcpy = no; then + HAVE_WMEMPCPY=0 + fi +]) diff -Nru gdb-9.1/gnulib/import/m4/zzgnulib.m4 gdb-10.2/gnulib/import/m4/zzgnulib.m4 --- gdb-9.1/gnulib/import/m4/zzgnulib.m4 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/m4/zzgnulib.m4 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,23 @@ +# zzgnulib.m4 serial 1 +dnl Copyright (C) 2020 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl This file must be named something that sorts after all other +dnl package- or gnulib-provided .m4 files - at least for those packages +dnl that redefine AC_PROG_CC. + +dnl Redefine AC_PROG_CC so that it ends with invocations of gl_COMPILER_CLANG +dnl and gl_COMPILER_PREPARE_CHECK_DECL. +m4_define([AC_PROG_CC], + m4_defn([AC_PROG_CC])[ +gl_COMPILER_CLANG +gl_COMPILER_PREPARE_CHECK_DECL +]) + +# gl_ZZGNULIB +# ----------- +# Witness macro that this file has been included. Needed to force +# Automake to include this file after all other gnulib .m4 files. +AC_DEFUN([gl_ZZGNULIB]) diff -Nru gdb-9.1/gnulib/import/Makefile.am gdb-10.2/gnulib/import/Makefile.am --- gdb-9.1/gnulib/import/Makefile.am 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/Makefile.am 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ ## DO NOT EDIT! GENERATED AUTOMATICALLY! ## Process this file with automake to produce Makefile.in. -# Copyright (C) 2002-2016 Free Software Foundation, Inc. +# Copyright (C) 2002-2020 Free Software Foundation, Inc. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -13,7 +13,7 @@ # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License -# along with this file. If not, see <http://www.gnu.org/licenses/>. +# along with this file. If not, see <https://www.gnu.org/licenses/>. # # As a special exception to the GNU General Public License, # this file may be distributed as part of a program that @@ -21,9 +21,57 @@ # the same distribution terms as the rest of that program. # # Generated by gnulib-tool. -# Reproduce by: gnulib-tool --import --lib=libgnu --source-base=import --m4-base=import/m4 --doc-base=doc --tests-base=tests --aux-dir=import/extra --no-conditional-dependencies --no-libtool --macro-prefix=gl --no-vc-files alloca canonicalize-lgpl dirent dirfd errno fnmatch-gnu frexpl getcwd glob inet_ntop inttypes limits-h lstat memchr memmem mkdir mkdtemp mkostemp pathmax rawmemchr readlink rename setenv signal-h strchrnul strerror_r-posix strstr strtok_r sys_stat time_r unistd unsetenv update-copyright wchar wctype-h +# Reproduce by: +# gnulib-tool --import \ +# --lib=libgnu \ +# --source-base=import \ +# --m4-base=import/m4 \ +# --doc-base=doc \ +# --tests-base=tests \ +# --aux-dir=import/extra \ +# --no-conditional-dependencies \ +# --no-libtool \ +# --macro-prefix=gl \ +# --no-vc-files \ +# alloca \ +# canonicalize-lgpl \ +# count-one-bits \ +# dirent \ +# dirfd \ +# errno \ +# fnmatch-gnu \ +# frexpl \ +# getcwd \ +# gettimeofday \ +# glob \ +# inet_ntop \ +# inttypes \ +# limits-h \ +# lstat \ +# memchr \ +# memmem \ +# mkdir \ +# mkdtemp \ +# mkostemp \ +# pathmax \ +# rawmemchr \ +# readlink \ +# rename \ +# setenv \ +# signal-h \ +# strchrnul \ +# strerror_r-posix \ +# strstr \ +# strtok_r \ +# sys_stat \ +# time_r \ +# unistd \ +# unsetenv \ +# update-copyright \ +# wchar \ +# wctype-h -AUTOMAKE_OPTIONS = 1.9.6 gnits subdir-objects +AUTOMAKE_OPTIONS = 1.11 gnits subdir-objects SUBDIRS = noinst_HEADERS = @@ -37,6 +85,7 @@ CLEANFILES = DISTCLEANFILES = MAINTAINERCLEANFILES = +# No GNU Make output. EXTRA_DIST += m4/gnulib-cache.m4 AM_CPPFLAGS = @@ -79,7 +128,7 @@ alloca.h: alloca.in.h $(top_builddir)/config.status $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ - cat $(srcdir)/alloca.in.h; \ + sed -e 's|@''HAVE_ALLOCA_H''@|$(HAVE_ALLOCA_H)|g' < $(srcdir)/alloca.in.h; \ } > $@-t && \ mv -f $@-t $@ else @@ -111,6 +160,7 @@ -e 's|@''HAVE_ARPA_INET_H''@|$(HAVE_ARPA_INET_H)|g' \ -e 's/@''GNULIB_INET_NTOP''@/$(GNULIB_INET_NTOP)/g' \ -e 's/@''GNULIB_INET_PTON''@/$(GNULIB_INET_PTON)/g' \ + -e 's|@''HAVE_WS2TCPIP_H''@|$(HAVE_WS2TCPIP_H)|g' \ -e 's|@''HAVE_DECL_INET_NTOP''@|$(HAVE_DECL_INET_NTOP)|g' \ -e 's|@''HAVE_DECL_INET_PTON''@|$(HAVE_DECL_INET_PTON)|g' \ -e 's|@''REPLACE_INET_NTOP''@|$(REPLACE_INET_NTOP)|g' \ @@ -137,12 +187,25 @@ ## begin gnulib module at-internal +libgnu_a_SOURCES += openat-priv.h openat-proc.c + +## end gnulib module at-internal -EXTRA_DIST += openat-priv.h openat-proc.c +## begin gnulib module attribute -EXTRA_libgnu_a_SOURCES += openat-proc.c -## end gnulib module at-internal +EXTRA_DIST += attribute.h + +## end gnulib module attribute + +## begin gnulib module btowc + + +EXTRA_DIST += btowc.c + +EXTRA_libgnu_a_SOURCES += btowc.c + +## end gnulib module btowc ## begin gnulib module canonicalize-lgpl @@ -188,50 +251,40 @@ ## end gnulib module closedir -## begin gnulib module configmake +## begin gnulib module count-one-bits + +libgnu_a_SOURCES += count-one-bits.c + +EXTRA_DIST += count-one-bits.h + +## end gnulib module count-one-bits + +## begin gnulib module ctype -# Listed in the same order as the GNU makefile conventions, and -# provided by autoconf 2.59c+ or 2.70. -# The Automake-defined pkg* macros are appended, in the order -# listed in the Automake 1.10a+ documentation. -configmake.h: Makefile - $(AM_V_GEN)rm -f $@-t && \ +BUILT_SOURCES += ctype.h + +# We need the following in order to create <ctype.h> when the system +# doesn't have one that works with the given compiler. +ctype.h: ctype.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ - echo '#define PREFIX "$(prefix)"'; \ - echo '#define EXEC_PREFIX "$(exec_prefix)"'; \ - echo '#define BINDIR "$(bindir)"'; \ - echo '#define SBINDIR "$(sbindir)"'; \ - echo '#define LIBEXECDIR "$(libexecdir)"'; \ - echo '#define DATAROOTDIR "$(datarootdir)"'; \ - echo '#define DATADIR "$(datadir)"'; \ - echo '#define SYSCONFDIR "$(sysconfdir)"'; \ - echo '#define SHAREDSTATEDIR "$(sharedstatedir)"'; \ - echo '#define LOCALSTATEDIR "$(localstatedir)"'; \ - echo '#define RUNSTATEDIR "$(runstatedir)"'; \ - echo '#define INCLUDEDIR "$(includedir)"'; \ - echo '#define OLDINCLUDEDIR "$(oldincludedir)"'; \ - echo '#define DOCDIR "$(docdir)"'; \ - echo '#define INFODIR "$(infodir)"'; \ - echo '#define HTMLDIR "$(htmldir)"'; \ - echo '#define DVIDIR "$(dvidir)"'; \ - echo '#define PDFDIR "$(pdfdir)"'; \ - echo '#define PSDIR "$(psdir)"'; \ - echo '#define LIBDIR "$(libdir)"'; \ - echo '#define LISPDIR "$(lispdir)"'; \ - echo '#define LOCALEDIR "$(localedir)"'; \ - echo '#define MANDIR "$(mandir)"'; \ - echo '#define MANEXT "$(manext)"'; \ - echo '#define PKGDATADIR "$(pkgdatadir)"'; \ - echo '#define PKGINCLUDEDIR "$(pkgincludedir)"'; \ - echo '#define PKGLIBDIR "$(pkglibdir)"'; \ - echo '#define PKGLIBEXECDIR "$(pkglibexecdir)"'; \ - } | sed '/""/d' > $@-t && \ - mv -f $@-t $@ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_CTYPE_H''@|$(NEXT_CTYPE_H)|g' \ + -e 's/@''GNULIB_ISBLANK''@/$(GNULIB_ISBLANK)/g' \ + -e 's/@''HAVE_ISBLANK''@/$(HAVE_ISBLANK)/g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ + < $(srcdir)/ctype.in.h; \ + } > $@-t && \ + mv $@-t $@ +MOSTLYCLEANFILES += ctype.h ctype.h-t -BUILT_SOURCES += configmake.h -CLEANFILES += configmake.h configmake.h-t +EXTRA_DIST += ctype.in.h -## end gnulib module configmake +## end gnulib module ctype ## begin gnulib module dirent @@ -298,13 +351,6 @@ ## end gnulib module dirname-lgpl -## begin gnulib module dosname - - -EXTRA_DIST += dosname.h - -## end gnulib module dosname - ## begin gnulib module dup @@ -406,12 +452,14 @@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_FCNTL_H''@|$(NEXT_FCNTL_H)|g' \ + -e 's/@''GNULIB_CREAT''@/$(GNULIB_CREAT)/g' \ -e 's/@''GNULIB_FCNTL''@/$(GNULIB_FCNTL)/g' \ -e 's/@''GNULIB_NONBLOCKING''@/$(GNULIB_NONBLOCKING)/g' \ -e 's/@''GNULIB_OPEN''@/$(GNULIB_OPEN)/g' \ -e 's/@''GNULIB_OPENAT''@/$(GNULIB_OPENAT)/g' \ -e 's|@''HAVE_FCNTL''@|$(HAVE_FCNTL)|g' \ -e 's|@''HAVE_OPENAT''@|$(HAVE_OPENAT)|g' \ + -e 's|@''REPLACE_CREAT''@|$(REPLACE_CREAT)|g' \ -e 's|@''REPLACE_FCNTL''@|$(REPLACE_FCNTL)|g' \ -e 's|@''REPLACE_OPEN''@|$(REPLACE_OPEN)|g' \ -e 's|@''REPLACE_OPENAT''@|$(REPLACE_OPENAT)|g' \ @@ -435,6 +483,12 @@ ## end gnulib module fd-hook +## begin gnulib module fd-safer-flag + +libgnu_a_SOURCES += fd-safer-flag.c dup-safer-flag.c + +## end gnulib module fd-safer-flag + ## begin gnulib module fdopendir @@ -499,29 +553,46 @@ ## begin gnulib module fnmatch + +EXTRA_DIST += fnmatch.c fnmatch_loop.c + +EXTRA_libgnu_a_SOURCES += fnmatch.c fnmatch_loop.c + +## end gnulib module fnmatch + +## begin gnulib module fnmatch-h + BUILT_SOURCES += $(FNMATCH_H) -# We need the following in order to create <fnmatch.h> when the system -# doesn't have one that supports the required API. +# We need the following in order to create <fnmatch.h>. if GL_GENERATE_FNMATCH_H -fnmatch.h: fnmatch.in.h $(top_builddir)/config.status $(ARG_NONNULL_H) +fnmatch.h: fnmatch.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ - { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ - sed -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''HAVE_FNMATCH_H''@|$(HAVE_FNMATCH_H)|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_FNMATCH_H''@|$(NEXT_FNMATCH_H)|g' \ + -e 's/@''GNULIB_FNMATCH''@/$(GNULIB_FNMATCH)/g' \ + -e 's|@''HAVE_FNMATCH''@|$(HAVE_FNMATCH)|g' \ + -e 's|@''REPLACE_FNMATCH''@|$(REPLACE_FNMATCH)|g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ < $(srcdir)/fnmatch.in.h; \ } > $@-t && \ - mv -f $@-t $@ + mv $@-t $@ else fnmatch.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += fnmatch.h fnmatch.h-t -EXTRA_DIST += fnmatch.c fnmatch.in.h fnmatch_loop.c - -EXTRA_libgnu_a_SOURCES += fnmatch.c fnmatch_loop.c +EXTRA_DIST += fnmatch.in.h -## end gnulib module fnmatch +## end gnulib module fnmatch-h ## begin gnulib module fpucw @@ -551,9 +622,9 @@ ## begin gnulib module fstat -EXTRA_DIST += fstat.c +EXTRA_DIST += fstat.c stat-w32.c stat-w32.h -EXTRA_libgnu_a_SOURCES += fstat.c +EXTRA_libgnu_a_SOURCES += fstat.c stat-w32.c ## end gnulib module fstat @@ -608,6 +679,15 @@ ## end gnulib module getprogname +## begin gnulib module getrandom + + +EXTRA_DIST += getrandom.c + +EXTRA_libgnu_a_SOURCES += getrandom.c + +## end gnulib module getrandom + ## begin gnulib module gettext-h libgnu_a_SOURCES += gettext.h @@ -625,32 +705,48 @@ ## begin gnulib module glob + +EXTRA_DIST += glob.c glob_internal.h glob_pattern_p.c globfree.c + +EXTRA_libgnu_a_SOURCES += glob.c glob_pattern_p.c globfree.c + +## end gnulib module glob + +## begin gnulib module glob-h + BUILT_SOURCES += $(GLOB_H) -# We need the following in order to create <glob.h> when the system -# doesn't have one that works with the given compiler. +# We need the following in order to create <glob.h>. if GL_GENERATE_GLOB_H glob.h: glob.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ - { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ - sed -e 's|@''HAVE_SYS_CDEFS_H''@|$(HAVE_SYS_CDEFS_H)|g' \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''HAVE_GLOB_H''@|$(HAVE_GLOB_H)|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_GLOB_H''@|$(NEXT_GLOB_H)|g' \ + -e 's/@''GNULIB_GLOB''@/$(GNULIB_GLOB)/g' \ + -e 's|@''HAVE_GLOB''@|$(HAVE_GLOB)|g' \ + -e 's|@''HAVE_GLOB_PATTERN_P''@|$(HAVE_GLOB_PATTERN_P)|g' \ + -e 's|@''REPLACE_GLOB''@|$(REPLACE_GLOB)|g' \ + -e 's|@''REPLACE_GLOB_PATTERN_P''@|$(REPLACE_GLOB_PATTERN_P)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ < $(srcdir)/glob.in.h; \ } > $@-t && \ - mv -f $@-t $@ + mv $@-t $@ else glob.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += glob.h glob.h-t -EXTRA_DIST += glob-libc.h glob.c glob.in.h +EXTRA_DIST += glob-libc.h glob.in.h -EXTRA_libgnu_a_SOURCES += glob.c - -## end gnulib module glob +## end gnulib module glob-h ## begin gnulib module hard-locale @@ -660,13 +756,6 @@ ## end gnulib module hard-locale -## begin gnulib module havelib - - -EXTRA_DIST += $(top_srcdir)/import/extra/config.rpath - -## end gnulib module havelib - ## begin gnulib module inet_ntop @@ -699,8 +788,6 @@ -e 's|@''NEXT_INTTYPES_H''@|$(NEXT_INTTYPES_H)|g' \ -e 's/@''PRI_MACROS_BROKEN''@/$(PRI_MACROS_BROKEN)/g' \ -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \ - -e 's/@''HAVE_LONG_LONG_INT''@/$(HAVE_LONG_LONG_INT)/g' \ - -e 's/@''HAVE_UNSIGNED_LONG_LONG_INT''@/$(HAVE_UNSIGNED_LONG_LONG_INT)/g' \ -e 's/@''PRIPTR_PREFIX''@/$(PRIPTR_PREFIX)/g' \ -e 's/@''GNULIB_IMAXABS''@/$(GNULIB_IMAXABS)/g' \ -e 's/@''GNULIB_IMAXDIV''@/$(GNULIB_IMAXDIV)/g' \ @@ -710,6 +797,7 @@ -e 's/@''HAVE_DECL_IMAXDIV''@/$(HAVE_DECL_IMAXDIV)/g' \ -e 's/@''HAVE_DECL_STRTOIMAX''@/$(HAVE_DECL_STRTOIMAX)/g' \ -e 's/@''HAVE_DECL_STRTOUMAX''@/$(HAVE_DECL_STRTOUMAX)/g' \ + -e 's/@''HAVE_IMAXDIV_T''@/$(HAVE_IMAXDIV_T)/g' \ -e 's/@''REPLACE_STRTOIMAX''@/$(REPLACE_STRTOIMAX)/g' \ -e 's/@''REPLACE_STRTOUMAX''@/$(REPLACE_STRTOUMAX)/g' \ -e 's/@''INT32_MAX_LT_INTMAX_MAX''@/$(INT32_MAX_LT_INTMAX_MAX)/g' \ @@ -728,6 +816,15 @@ ## end gnulib module inttypes-incomplete +## begin gnulib module isblank + + +EXTRA_DIST += isblank.c + +EXTRA_libgnu_a_SOURCES += isblank.c + +## end gnulib module isblank + ## begin gnulib module isnand-nolibm @@ -746,6 +843,13 @@ ## end gnulib module isnanl-nolibm +## begin gnulib module libc-config + + +EXTRA_DIST += cdefs.h libc-config.h + +## end gnulib module libc-config + ## begin gnulib module limits-h BUILT_SOURCES += $(LIMITS_H) @@ -776,77 +880,61 @@ ## begin gnulib module localcharset -libgnu_a_SOURCES += localcharset.h localcharset.c +libgnu_a_SOURCES += localcharset.c + +EXTRA_DIST += localcharset.h -# We need the following in order to install a simple file in $(libdir) -# which is shared with other installed packages. We use a list of referencing -# packages so that "make uninstall" will remove the file if and only if it -# is not used by another installed package. -# On systems with glibc-2.1 or newer, the file is redundant, therefore we -# avoid installing it. - -all-local: charset.alias ref-add.sed ref-del.sed - -charset_alias = $(DESTDIR)$(libdir)/charset.alias -charset_tmp = $(DESTDIR)$(libdir)/charset.tmp -install-exec-local: install-exec-localcharset -install-exec-localcharset: all-local - if test $(GLIBC21) = no; then \ - case '$(host_os)' in \ - darwin[56]*) \ - need_charset_alias=true ;; \ - darwin* | cygwin* | mingw* | pw32* | cegcc*) \ - need_charset_alias=false ;; \ - *) \ - need_charset_alias=true ;; \ - esac ; \ - else \ - need_charset_alias=false ; \ - fi ; \ - if $$need_charset_alias; then \ - $(mkinstalldirs) $(DESTDIR)$(libdir) ; \ - fi ; \ - if test -f $(charset_alias); then \ - sed -f ref-add.sed $(charset_alias) > $(charset_tmp) ; \ - $(INSTALL_DATA) $(charset_tmp) $(charset_alias) ; \ - rm -f $(charset_tmp) ; \ - else \ - if $$need_charset_alias; then \ - sed -f ref-add.sed charset.alias > $(charset_tmp) ; \ - $(INSTALL_DATA) $(charset_tmp) $(charset_alias) ; \ - rm -f $(charset_tmp) ; \ - fi ; \ - fi - -uninstall-local: uninstall-localcharset -uninstall-localcharset: all-local - if test -f $(charset_alias); then \ - sed -f ref-del.sed $(charset_alias) > $(charset_tmp); \ - if grep '^# Packages using this file: $$' $(charset_tmp) \ - > /dev/null; then \ - rm -f $(charset_alias); \ - else \ - $(INSTALL_DATA) $(charset_tmp) $(charset_alias); \ - fi; \ - rm -f $(charset_tmp); \ - fi - -charset.alias: config.charset - $(AM_V_GEN)rm -f t-$@ $@ && \ - $(SHELL) $(srcdir)/config.charset '$(host)' > t-$@ && \ - mv t-$@ $@ - -SUFFIXES += .sed .sin -.sin.sed: - $(AM_V_GEN)rm -f t-$@ $@ && \ - sed -e '/^#/d' -e 's/@''PACKAGE''@/$(PACKAGE)/g' $< > t-$@ && \ - mv t-$@ $@ +## end gnulib module localcharset -CLEANFILES += charset.alias ref-add.sed ref-del.sed +## begin gnulib module locale -EXTRA_DIST += config.charset ref-add.sin ref-del.sin +BUILT_SOURCES += locale.h -## end gnulib module localcharset +# We need the following in order to create <locale.h> when the system +# doesn't have one that provides all definitions. +locale.h: locale.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_LOCALE_H''@|$(NEXT_LOCALE_H)|g' \ + -e 's/@''GNULIB_LOCALECONV''@/$(GNULIB_LOCALECONV)/g' \ + -e 's/@''GNULIB_SETLOCALE''@/$(GNULIB_SETLOCALE)/g' \ + -e 's/@''GNULIB_SETLOCALE_NULL''@/$(GNULIB_SETLOCALE_NULL)/g' \ + -e 's/@''GNULIB_DUPLOCALE''@/$(GNULIB_DUPLOCALE)/g' \ + -e 's/@''GNULIB_LOCALENAME''@/$(GNULIB_LOCALENAME)/g' \ + -e 's|@''HAVE_NEWLOCALE''@|$(HAVE_NEWLOCALE)|g' \ + -e 's|@''HAVE_DUPLOCALE''@|$(HAVE_DUPLOCALE)|g' \ + -e 's|@''HAVE_FREELOCALE''@|$(HAVE_FREELOCALE)|g' \ + -e 's|@''HAVE_XLOCALE_H''@|$(HAVE_XLOCALE_H)|g' \ + -e 's|@''REPLACE_LOCALECONV''@|$(REPLACE_LOCALECONV)|g' \ + -e 's|@''REPLACE_SETLOCALE''@|$(REPLACE_SETLOCALE)|g' \ + -e 's|@''REPLACE_NEWLOCALE''@|$(REPLACE_NEWLOCALE)|g' \ + -e 's|@''REPLACE_DUPLOCALE''@|$(REPLACE_DUPLOCALE)|g' \ + -e 's|@''REPLACE_FREELOCALE''@|$(REPLACE_FREELOCALE)|g' \ + -e 's|@''REPLACE_STRUCT_LCONV''@|$(REPLACE_STRUCT_LCONV)|g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ + < $(srcdir)/locale.in.h; \ + } > $@-t && \ + mv $@-t $@ +MOSTLYCLEANFILES += locale.h locale.h-t + +EXTRA_DIST += locale.in.h + +## end gnulib module locale + +## begin gnulib module localtime-buffer + + +EXTRA_DIST += localtime-buffer.c localtime-buffer.h + +EXTRA_libgnu_a_SOURCES += localtime-buffer.c + +## end gnulib module localtime-buffer ## begin gnulib module lock @@ -876,7 +964,7 @@ libgnu_a_SOURCES += malloca.c -EXTRA_DIST += malloca.h malloca.valgrind +EXTRA_DIST += malloca.h ## end gnulib module malloca @@ -1089,13 +1177,22 @@ -e 's|@''HAVE_DECL_TRUNCF''@|$(HAVE_DECL_TRUNCF)|g' \ -e 's|@''HAVE_DECL_TRUNCL''@|$(HAVE_DECL_TRUNCL)|g' \ | \ - sed -e 's|@''REPLACE_CBRTF''@|$(REPLACE_CBRTF)|g' \ + sed -e 's|@''REPLACE_ACOSF''@|$(REPLACE_ACOSF)|g' \ + -e 's|@''REPLACE_ASINF''@|$(REPLACE_ASINF)|g' \ + -e 's|@''REPLACE_ATANF''@|$(REPLACE_ATANF)|g' \ + -e 's|@''REPLACE_ATAN2F''@|$(REPLACE_ATAN2F)|g' \ + -e 's|@''REPLACE_CBRTF''@|$(REPLACE_CBRTF)|g' \ -e 's|@''REPLACE_CBRTL''@|$(REPLACE_CBRTL)|g' \ -e 's|@''REPLACE_CEIL''@|$(REPLACE_CEIL)|g' \ -e 's|@''REPLACE_CEILF''@|$(REPLACE_CEILF)|g' \ -e 's|@''REPLACE_CEILL''@|$(REPLACE_CEILL)|g' \ + -e 's|@''REPLACE_COSF''@|$(REPLACE_COSF)|g' \ + -e 's|@''REPLACE_COSHF''@|$(REPLACE_COSHF)|g' \ + -e 's|@''REPLACE_EXPF''@|$(REPLACE_EXPF)|g' \ + -e 's|@''REPLACE_EXPL''@|$(REPLACE_EXPL)|g' \ -e 's|@''REPLACE_EXPM1''@|$(REPLACE_EXPM1)|g' \ -e 's|@''REPLACE_EXPM1F''@|$(REPLACE_EXPM1F)|g' \ + -e 's|@''REPLACE_EXPM1L''@|$(REPLACE_EXPM1L)|g' \ -e 's|@''REPLACE_EXP2''@|$(REPLACE_EXP2)|g' \ -e 's|@''REPLACE_EXP2L''@|$(REPLACE_EXP2L)|g' \ -e 's|@''REPLACE_FABSL''@|$(REPLACE_FABSL)|g' \ @@ -1117,6 +1214,7 @@ -e 's|@''REPLACE_HYPOTL''@|$(REPLACE_HYPOTL)|g' \ -e 's|@''REPLACE_ILOGB''@|$(REPLACE_ILOGB)|g' \ -e 's|@''REPLACE_ILOGBF''@|$(REPLACE_ILOGBF)|g' \ + -e 's|@''REPLACE_ILOGBL''@|$(REPLACE_ILOGBL)|g' \ -e 's|@''REPLACE_ISFINITE''@|$(REPLACE_ISFINITE)|g' \ -e 's|@''REPLACE_ISINF''@|$(REPLACE_ISINF)|g' \ -e 's|@''REPLACE_ISNAN''@|$(REPLACE_ISNAN)|g' \ @@ -1144,12 +1242,18 @@ -e 's|@''REPLACE_REMAINDER''@|$(REPLACE_REMAINDER)|g' \ -e 's|@''REPLACE_REMAINDERF''@|$(REPLACE_REMAINDERF)|g' \ -e 's|@''REPLACE_REMAINDERL''@|$(REPLACE_REMAINDERL)|g' \ + -e 's|@''REPLACE_RINTL''@|$(REPLACE_RINTL)|g' \ -e 's|@''REPLACE_ROUND''@|$(REPLACE_ROUND)|g' \ -e 's|@''REPLACE_ROUNDF''@|$(REPLACE_ROUNDF)|g' \ -e 's|@''REPLACE_ROUNDL''@|$(REPLACE_ROUNDL)|g' \ -e 's|@''REPLACE_SIGNBIT''@|$(REPLACE_SIGNBIT)|g' \ -e 's|@''REPLACE_SIGNBIT_USING_GCC''@|$(REPLACE_SIGNBIT_USING_GCC)|g' \ + -e 's|@''REPLACE_SINF''@|$(REPLACE_SINF)|g' \ + -e 's|@''REPLACE_SINHF''@|$(REPLACE_SINHF)|g' \ + -e 's|@''REPLACE_SQRTF''@|$(REPLACE_SQRTF)|g' \ -e 's|@''REPLACE_SQRTL''@|$(REPLACE_SQRTL)|g' \ + -e 's|@''REPLACE_TANF''@|$(REPLACE_TANF)|g' \ + -e 's|@''REPLACE_TANHF''@|$(REPLACE_TANHF)|g' \ -e 's|@''REPLACE_TRUNC''@|$(REPLACE_TRUNC)|g' \ -e 's|@''REPLACE_TRUNCF''@|$(REPLACE_TRUNCF)|g' \ -e 's|@''REPLACE_TRUNCL''@|$(REPLACE_TRUNCL)|g' \ @@ -1167,9 +1271,9 @@ ## begin gnulib module mbrtowc -EXTRA_DIST += mbrtowc.c +EXTRA_DIST += lc-charset-dispatch.c lc-charset-dispatch.h mbrtowc-impl-utf8.h mbrtowc-impl.h mbrtowc.c mbtowc-lock.c mbtowc-lock.h windows-initguard.h -EXTRA_libgnu_a_SOURCES += mbrtowc.c +EXTRA_libgnu_a_SOURCES += lc-charset-dispatch.c mbrtowc.c mbtowc-lock.c ## end gnulib module mbrtowc @@ -1191,6 +1295,15 @@ ## end gnulib module mbsrtowcs +## begin gnulib module mbtowc + + +EXTRA_DIST += mbtowc-impl.h mbtowc.c + +EXTRA_libgnu_a_SOURCES += mbtowc.c + +## end gnulib module mbtowc + ## begin gnulib module memchr @@ -1227,6 +1340,12 @@ ## end gnulib module memrchr +## begin gnulib module minmax + +libgnu_a_SOURCES += minmax.h + +## end gnulib module minmax + ## begin gnulib module mkdir @@ -1428,14 +1547,13 @@ ## end gnulib module save-cwd -## begin gnulib module secure_getenv - +## begin gnulib module scratch_buffer -EXTRA_DIST += secure_getenv.c +libgnu_a_SOURCES += malloc/scratch_buffer_grow.c malloc/scratch_buffer_grow_preserve.c malloc/scratch_buffer_set_array_size.c -EXTRA_libgnu_a_SOURCES += secure_getenv.c +EXTRA_DIST += malloc/scratch_buffer.h scratch_buffer.h -## end gnulib module secure_getenv +## end gnulib module scratch_buffer ## begin gnulib module setenv @@ -1446,6 +1564,16 @@ ## end gnulib module setenv +## begin gnulib module setlocale-null + +libgnu_a_SOURCES += setlocale_null.c + +EXTRA_DIST += setlocale-lock.c setlocale_null.h windows-initguard.h + +EXTRA_libgnu_a_SOURCES += setlocale-lock.c + +## end gnulib module setlocale-null + ## begin gnulib module signal-h BUILT_SOURCES += signal.h @@ -1460,8 +1588,8 @@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SIGNAL_H''@|$(NEXT_SIGNAL_H)|g' \ - -e 's|@''GNULIB_PTHREAD_SIGMASK''@|$(GNULIB_PTHREAD_SIGMASK)|g' \ - -e 's|@''GNULIB_RAISE''@|$(GNULIB_RAISE)|g' \ + -e 's/@''GNULIB_PTHREAD_SIGMASK''@/$(GNULIB_PTHREAD_SIGMASK)/g' \ + -e 's/@''GNULIB_RAISE''@/$(GNULIB_RAISE)/g' \ -e 's/@''GNULIB_SIGNAL_H_SIGPIPE''@/$(GNULIB_SIGNAL_H_SIGPIPE)/g' \ -e 's/@''GNULIB_SIGPROCMASK''@/$(GNULIB_SIGPROCMASK)/g' \ -e 's/@''GNULIB_SIGACTION''@/$(GNULIB_SIGACTION)/g' \ @@ -1491,93 +1619,68 @@ ## begin gnulib module snippet/_Noreturn # Because this Makefile snippet defines a variable used by other -# gnulib Makefile snippets, it must be present in all Makefile.am that +# gnulib Makefile snippets, it must be present in all makefiles that # need it. This is ensured by the applicability 'all' defined above. -_NORETURN_H=$(top_srcdir)/import/extra/snippet/_Noreturn.h +_NORETURN_H=$(srcdir)/_Noreturn.h -EXTRA_DIST += $(top_srcdir)/import/extra/snippet/_Noreturn.h +EXTRA_DIST += _Noreturn.h ## end gnulib module snippet/_Noreturn ## begin gnulib module snippet/arg-nonnull -# The BUILT_SOURCES created by this Makefile snippet are not used via #include -# statements but through direct file reference. Therefore this snippet must be -# present in all Makefile.am that need it. This is ensured by the applicability -# 'all' defined above. - -BUILT_SOURCES += arg-nonnull.h -# The arg-nonnull.h that gets inserted into generated .h files is the same as -# build-aux/snippet/arg-nonnull.h, except that it has the copyright header cut -# off. -arg-nonnull.h: $(top_srcdir)/import/extra/snippet/arg-nonnull.h - $(AM_V_GEN)rm -f $@-t $@ && \ - sed -n -e '/GL_ARG_NONNULL/,$$p' \ - < $(top_srcdir)/import/extra/snippet/arg-nonnull.h \ - > $@-t && \ - mv $@-t $@ -MOSTLYCLEANFILES += arg-nonnull.h arg-nonnull.h-t +# Because this Makefile snippet defines a variable used by other +# gnulib Makefile snippets, it must be present in all makefiles that +# need it. This is ensured by the applicability 'all' defined above. -ARG_NONNULL_H=arg-nonnull.h +ARG_NONNULL_H=$(srcdir)/arg-nonnull.h -EXTRA_DIST += $(top_srcdir)/import/extra/snippet/arg-nonnull.h +EXTRA_DIST += arg-nonnull.h ## end gnulib module snippet/arg-nonnull ## begin gnulib module snippet/c++defs -# The BUILT_SOURCES created by this Makefile snippet are not used via #include -# statements but through direct file reference. Therefore this snippet must be -# present in all Makefile.am that need it. This is ensured by the applicability -# 'all' defined above. - -BUILT_SOURCES += c++defs.h -# The c++defs.h that gets inserted into generated .h files is the same as -# build-aux/snippet/c++defs.h, except that it has the copyright header cut off. -c++defs.h: $(top_srcdir)/import/extra/snippet/c++defs.h - $(AM_V_GEN)rm -f $@-t $@ && \ - sed -n -e '/_GL_CXXDEFS/,$$p' \ - < $(top_srcdir)/import/extra/snippet/c++defs.h \ - > $@-t && \ - mv $@-t $@ -MOSTLYCLEANFILES += c++defs.h c++defs.h-t +# Because this Makefile snippet defines a variable used by other +# gnulib Makefile snippets, it must be present in all makefiles that +# need it. This is ensured by the applicability 'all' defined above. -CXXDEFS_H=c++defs.h +CXXDEFS_H=$(srcdir)/c++defs.h -EXTRA_DIST += $(top_srcdir)/import/extra/snippet/c++defs.h +EXTRA_DIST += c++defs.h ## end gnulib module snippet/c++defs ## begin gnulib module snippet/warn-on-use -BUILT_SOURCES += warn-on-use.h -# The warn-on-use.h that gets inserted into generated .h files is the same as -# build-aux/snippet/warn-on-use.h, except that it has the copyright header cut -# off. -warn-on-use.h: $(top_srcdir)/import/extra/snippet/warn-on-use.h - $(AM_V_GEN)rm -f $@-t $@ && \ - sed -n -e '/^.ifndef/,$$p' \ - < $(top_srcdir)/import/extra/snippet/warn-on-use.h \ - > $@-t && \ - mv $@-t $@ -MOSTLYCLEANFILES += warn-on-use.h warn-on-use.h-t +# Because this Makefile snippet defines a variable used by other +# gnulib Makefile snippets, it must be present in all makefiles that +# need it. This is ensured by the applicability 'all' defined above. -WARN_ON_USE_H=warn-on-use.h +WARN_ON_USE_H=$(srcdir)/warn-on-use.h -EXTRA_DIST += $(top_srcdir)/import/extra/snippet/warn-on-use.h +EXTRA_DIST += warn-on-use.h ## end gnulib module snippet/warn-on-use ## begin gnulib module stat -EXTRA_DIST += stat.c +EXTRA_DIST += stat-w32.c stat-w32.h stat.c -EXTRA_libgnu_a_SOURCES += stat.c +EXTRA_libgnu_a_SOURCES += stat-w32.c stat.c ## end gnulib module stat +## begin gnulib module stat-time + +libgnu_a_SOURCES += stat-time.c + +EXTRA_DIST += stat-time.h + +## end gnulib module stat-time + ## begin gnulib module stdalign BUILT_SOURCES += $(STDALIGN_H) @@ -1677,8 +1780,6 @@ -e 's/@''HAVE_SYS_INTTYPES_H''@/$(HAVE_SYS_INTTYPES_H)/g' \ -e 's/@''HAVE_SYS_BITYPES_H''@/$(HAVE_SYS_BITYPES_H)/g' \ -e 's/@''HAVE_WCHAR_H''@/$(HAVE_WCHAR_H)/g' \ - -e 's/@''HAVE_LONG_LONG_INT''@/$(HAVE_LONG_LONG_INT)/g' \ - -e 's/@''HAVE_UNSIGNED_LONG_LONG_INT''@/$(HAVE_UNSIGNED_LONG_LONG_INT)/g' \ -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \ -e 's/@''BITSIZEOF_PTRDIFF_T''@/$(BITSIZEOF_PTRDIFF_T)/g' \ -e 's/@''PTRDIFF_T_SUFFIX''@/$(PTRDIFF_T_SUFFIX)/g' \ @@ -1693,6 +1794,7 @@ -e 's/@''BITSIZEOF_WINT_T''@/$(BITSIZEOF_WINT_T)/g' \ -e 's/@''HAVE_SIGNED_WINT_T''@/$(HAVE_SIGNED_WINT_T)/g' \ -e 's/@''WINT_T_SUFFIX''@/$(WINT_T_SUFFIX)/g' \ + -e 's/@''GNULIB_OVERRIDES_WINT_T''@/$(GNULIB_OVERRIDES_WINT_T)/g' \ < $(srcdir)/stdint.in.h; \ } > $@-t && \ mv $@-t $@ @@ -1871,11 +1973,13 @@ -e 's/@''GNULIB_RANDOM''@/$(GNULIB_RANDOM)/g' \ -e 's/@''GNULIB_RANDOM_R''@/$(GNULIB_RANDOM_R)/g' \ -e 's/@''GNULIB_REALLOC_POSIX''@/$(GNULIB_REALLOC_POSIX)/g' \ + -e 's/@''GNULIB_REALLOCARRAY''@/$(GNULIB_REALLOCARRAY)/g' \ -e 's/@''GNULIB_REALPATH''@/$(GNULIB_REALPATH)/g' \ -e 's/@''GNULIB_RPMATCH''@/$(GNULIB_RPMATCH)/g' \ -e 's/@''GNULIB_SECURE_GETENV''@/$(GNULIB_SECURE_GETENV)/g' \ -e 's/@''GNULIB_SETENV''@/$(GNULIB_SETENV)/g' \ -e 's/@''GNULIB_STRTOD''@/$(GNULIB_STRTOD)/g' \ + -e 's/@''GNULIB_STRTOLD''@/$(GNULIB_STRTOLD)/g' \ -e 's/@''GNULIB_STRTOLL''@/$(GNULIB_STRTOLL)/g' \ -e 's/@''GNULIB_STRTOULL''@/$(GNULIB_STRTOULL)/g' \ -e 's/@''GNULIB_SYSTEM_POSIX''@/$(GNULIB_SYSTEM_POSIX)/g' \ @@ -1889,6 +1993,9 @@ -e 's|@''HAVE_DECL_GETLOADAVG''@|$(HAVE_DECL_GETLOADAVG)|g' \ -e 's|@''HAVE_GETSUBOPT''@|$(HAVE_GETSUBOPT)|g' \ -e 's|@''HAVE_GRANTPT''@|$(HAVE_GRANTPT)|g' \ + -e 's|@''HAVE_INITSTATE''@|$(HAVE_INITSTATE)|g' \ + -e 's|@''HAVE_DECL_INITSTATE''@|$(HAVE_DECL_INITSTATE)|g' \ + -e 's|@''HAVE_MBTOWC''@|$(HAVE_MBTOWC)|g' \ -e 's|@''HAVE_MKDTEMP''@|$(HAVE_MKDTEMP)|g' \ -e 's|@''HAVE_MKOSTEMP''@|$(HAVE_MKOSTEMP)|g' \ -e 's|@''HAVE_MKOSTEMPS''@|$(HAVE_MKOSTEMPS)|g' \ @@ -1901,11 +2008,15 @@ -e 's|@''HAVE_RANDOM''@|$(HAVE_RANDOM)|g' \ -e 's|@''HAVE_RANDOM_H''@|$(HAVE_RANDOM_H)|g' \ -e 's|@''HAVE_RANDOM_R''@|$(HAVE_RANDOM_R)|g' \ + -e 's|@''HAVE_REALLOCARRAY''@|$(HAVE_REALLOCARRAY)|g' \ -e 's|@''HAVE_REALPATH''@|$(HAVE_REALPATH)|g' \ -e 's|@''HAVE_RPMATCH''@|$(HAVE_RPMATCH)|g' \ -e 's|@''HAVE_SECURE_GETENV''@|$(HAVE_SECURE_GETENV)|g' \ -e 's|@''HAVE_DECL_SETENV''@|$(HAVE_DECL_SETENV)|g' \ + -e 's|@''HAVE_SETSTATE''@|$(HAVE_SETSTATE)|g' \ + -e 's|@''HAVE_DECL_SETSTATE''@|$(HAVE_DECL_SETSTATE)|g' \ -e 's|@''HAVE_STRTOD''@|$(HAVE_STRTOD)|g' \ + -e 's|@''HAVE_STRTOLD''@|$(HAVE_STRTOLD)|g' \ -e 's|@''HAVE_STRTOLL''@|$(HAVE_STRTOLL)|g' \ -e 's|@''HAVE_STRTOULL''@|$(HAVE_STRTOULL)|g' \ -e 's|@''HAVE_STRUCT_RANDOM_DATA''@|$(HAVE_STRUCT_RANDOM_DATA)|g' \ @@ -1914,6 +2025,7 @@ -e 's|@''HAVE_DECL_UNSETENV''@|$(HAVE_DECL_UNSETENV)|g' \ -e 's|@''REPLACE_CALLOC''@|$(REPLACE_CALLOC)|g' \ -e 's|@''REPLACE_CANONICALIZE_FILE_NAME''@|$(REPLACE_CANONICALIZE_FILE_NAME)|g' \ + -e 's|@''REPLACE_INITSTATE''@|$(REPLACE_INITSTATE)|g' \ -e 's|@''REPLACE_MALLOC''@|$(REPLACE_MALLOC)|g' \ -e 's|@''REPLACE_MBTOWC''@|$(REPLACE_MBTOWC)|g' \ -e 's|@''REPLACE_MKSTEMP''@|$(REPLACE_MKSTEMP)|g' \ @@ -1921,11 +2033,14 @@ -e 's|@''REPLACE_PTSNAME_R''@|$(REPLACE_PTSNAME_R)|g' \ -e 's|@''REPLACE_PUTENV''@|$(REPLACE_PUTENV)|g' \ -e 's|@''REPLACE_QSORT_R''@|$(REPLACE_QSORT_R)|g' \ + -e 's|@''REPLACE_RANDOM''@|$(REPLACE_RANDOM)|g' \ -e 's|@''REPLACE_RANDOM_R''@|$(REPLACE_RANDOM_R)|g' \ -e 's|@''REPLACE_REALLOC''@|$(REPLACE_REALLOC)|g' \ -e 's|@''REPLACE_REALPATH''@|$(REPLACE_REALPATH)|g' \ -e 's|@''REPLACE_SETENV''@|$(REPLACE_SETENV)|g' \ + -e 's|@''REPLACE_SETSTATE''@|$(REPLACE_SETSTATE)|g' \ -e 's|@''REPLACE_STRTOD''@|$(REPLACE_STRTOD)|g' \ + -e 's|@''REPLACE_STRTOLD''@|$(REPLACE_STRTOLD)|g' \ -e 's|@''REPLACE_UNSETENV''@|$(REPLACE_UNSETENV)|g' \ -e 's|@''REPLACE_WCTOMB''@|$(REPLACE_WCTOMB)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ @@ -2006,6 +2121,7 @@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STRING_H''@|$(NEXT_STRING_H)|g' \ + -e 's/@''GNULIB_EXPLICIT_BZERO''@/$(GNULIB_EXPLICIT_BZERO)/g' \ -e 's/@''GNULIB_FFSL''@/$(GNULIB_FFSL)/g' \ -e 's/@''GNULIB_FFSLL''@/$(GNULIB_FFSLL)/g' \ -e 's/@''GNULIB_MBSLEN''@/$(GNULIB_MBSLEN)/g' \ @@ -2044,7 +2160,8 @@ -e 's/@''GNULIB_STRSIGNAL''@/$(GNULIB_STRSIGNAL)/g' \ -e 's/@''GNULIB_STRVERSCMP''@/$(GNULIB_STRVERSCMP)/g' \ < $(srcdir)/string.in.h | \ - sed -e 's|@''HAVE_FFSL''@|$(HAVE_FFSL)|g' \ + sed -e 's|@''HAVE_EXPLICIT_BZERO''@|$(HAVE_EXPLICIT_BZERO)|g' \ + -e 's|@''HAVE_FFSL''@|$(HAVE_FFSL)|g' \ -e 's|@''HAVE_FFSLL''@|$(HAVE_FFSLL)|g' \ -e 's|@''HAVE_MBSLEN''@|$(HAVE_MBSLEN)|g' \ -e 's|@''HAVE_MEMCHR''@|$(HAVE_MEMCHR)|g' \ @@ -2065,20 +2182,20 @@ -e 's|@''HAVE_DECL_STRERROR_R''@|$(HAVE_DECL_STRERROR_R)|g' \ -e 's|@''HAVE_DECL_STRSIGNAL''@|$(HAVE_DECL_STRSIGNAL)|g' \ -e 's|@''HAVE_STRVERSCMP''@|$(HAVE_STRVERSCMP)|g' \ - -e 's|@''REPLACE_STPNCPY''@|$(REPLACE_STPNCPY)|g' \ -e 's|@''REPLACE_MEMCHR''@|$(REPLACE_MEMCHR)|g' \ -e 's|@''REPLACE_MEMMEM''@|$(REPLACE_MEMMEM)|g' \ - -e 's|@''REPLACE_STRCASESTR''@|$(REPLACE_STRCASESTR)|g' \ + -e 's|@''REPLACE_STPNCPY''@|$(REPLACE_STPNCPY)|g' \ -e 's|@''REPLACE_STRCHRNUL''@|$(REPLACE_STRCHRNUL)|g' \ -e 's|@''REPLACE_STRDUP''@|$(REPLACE_STRDUP)|g' \ - -e 's|@''REPLACE_STRSTR''@|$(REPLACE_STRSTR)|g' \ - -e 's|@''REPLACE_STRERROR''@|$(REPLACE_STRERROR)|g' \ - -e 's|@''REPLACE_STRERROR_R''@|$(REPLACE_STRERROR_R)|g' \ -e 's|@''REPLACE_STRNCAT''@|$(REPLACE_STRNCAT)|g' \ -e 's|@''REPLACE_STRNDUP''@|$(REPLACE_STRNDUP)|g' \ -e 's|@''REPLACE_STRNLEN''@|$(REPLACE_STRNLEN)|g' \ - -e 's|@''REPLACE_STRSIGNAL''@|$(REPLACE_STRSIGNAL)|g' \ + -e 's|@''REPLACE_STRSTR''@|$(REPLACE_STRSTR)|g' \ + -e 's|@''REPLACE_STRCASESTR''@|$(REPLACE_STRCASESTR)|g' \ -e 's|@''REPLACE_STRTOK_R''@|$(REPLACE_STRTOK_R)|g' \ + -e 's|@''REPLACE_STRERROR''@|$(REPLACE_STRERROR)|g' \ + -e 's|@''REPLACE_STRERROR_R''@|$(REPLACE_STRERROR_R)|g' \ + -e 's|@''REPLACE_STRSIGNAL''@|$(REPLACE_STRSIGNAL)|g' \ -e 's|@''UNDEFINE_STRTOK_R''@|$(UNDEFINE_STRTOK_R)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ @@ -2092,6 +2209,15 @@ ## end gnulib module string +## begin gnulib module strnlen + + +EXTRA_DIST += strnlen.c + +EXTRA_libgnu_a_SOURCES += strnlen.c + +## end gnulib module strnlen + ## begin gnulib module strnlen1 libgnu_a_SOURCES += strnlen1.h strnlen1.c @@ -2116,6 +2242,38 @@ ## end gnulib module strtok_r +## begin gnulib module sys_random + +BUILT_SOURCES += sys/random.h + +# We need the following in order to create <sys/random.h> when the system +# doesn't have one. +sys/random.h: sys_random.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) + $(AM_V_at)$(MKDIR_P) sys + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_SYS_RANDOM_H''@|$(NEXT_SYS_RANDOM_H)|g' \ + -e 's|@''HAVE_SYS_RANDOM_H''@|$(HAVE_SYS_RANDOM_H)|g' \ + -e 's/@''GNULIB_GETRANDOM''@/$(GNULIB_GETRANDOM)/g' \ + -e 's/@''HAVE_GETRANDOM''@/$(HAVE_GETRANDOM)/g' \ + -e 's/@''REPLACE_GETRANDOM''@/$(REPLACE_GETRANDOM)/g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ + < $(srcdir)/sys_random.in.h; \ + } > $@-t && \ + mv -f $@-t $@ +MOSTLYCLEANFILES += sys/random.h sys/random.h-t +MOSTLYCLEANDIRS += sys + +EXTRA_DIST += sys_random.in.h + +## end gnulib module sys_random + ## begin gnulib module sys_socket BUILT_SOURCES += sys/socket.h @@ -2184,6 +2342,7 @@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SYS_STAT_H''@|$(NEXT_SYS_STAT_H)|g' \ -e 's|@''WINDOWS_64_BIT_ST_SIZE''@|$(WINDOWS_64_BIT_ST_SIZE)|g' \ + -e 's|@''WINDOWS_STAT_TIMESPEC''@|$(WINDOWS_STAT_TIMESPEC)|g' \ -e 's/@''GNULIB_FCHMODAT''@/$(GNULIB_FCHMODAT)/g' \ -e 's/@''GNULIB_FSTAT''@/$(GNULIB_FSTAT)/g' \ -e 's/@''GNULIB_FSTATAT''@/$(GNULIB_FSTATAT)/g' \ @@ -2197,6 +2356,7 @@ -e 's/@''GNULIB_MKNODAT''@/$(GNULIB_MKNODAT)/g' \ -e 's/@''GNULIB_STAT''@/$(GNULIB_STAT)/g' \ -e 's/@''GNULIB_UTIMENSAT''@/$(GNULIB_UTIMENSAT)/g' \ + -e 's/@''GNULIB_OVERRIDES_STRUCT_STAT''@/$(GNULIB_OVERRIDES_STRUCT_STAT)/g' \ -e 's|@''HAVE_FCHMODAT''@|$(HAVE_FCHMODAT)|g' \ -e 's|@''HAVE_FSTATAT''@|$(HAVE_FSTATAT)|g' \ -e 's|@''HAVE_FUTIMENS''@|$(HAVE_FUTIMENS)|g' \ @@ -2208,6 +2368,7 @@ -e 's|@''HAVE_MKNOD''@|$(HAVE_MKNOD)|g' \ -e 's|@''HAVE_MKNODAT''@|$(HAVE_MKNODAT)|g' \ -e 's|@''HAVE_UTIMENSAT''@|$(HAVE_UTIMENSAT)|g' \ + -e 's|@''REPLACE_FCHMODAT''@|$(REPLACE_FCHMODAT)|g' \ -e 's|@''REPLACE_FSTAT''@|$(REPLACE_FSTAT)|g' \ -e 's|@''REPLACE_FSTATAT''@|$(REPLACE_FSTATAT)|g' \ -e 's|@''REPLACE_FUTIMENS''@|$(REPLACE_FUTIMENS)|g' \ @@ -2280,6 +2441,7 @@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SYS_TYPES_H''@|$(NEXT_SYS_TYPES_H)|g' \ -e 's|@''WINDOWS_64_BIT_OFF_T''@|$(WINDOWS_64_BIT_OFF_T)|g' \ + -e 's|@''WINDOWS_STAT_INODES''@|$(WINDOWS_STAT_INODES)|g' \ < $(srcdir)/sys_types.in.h; \ } > $@-t && \ mv $@-t $@ @@ -2327,8 +2489,6 @@ libgnu_a_SOURCES += glthread/threadlib.c -EXTRA_DIST += $(top_srcdir)/import/extra/config.rpath - ## end gnulib module threadlib ## begin gnulib module time @@ -2345,24 +2505,31 @@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_TIME_H''@|$(NEXT_TIME_H)|g' \ - -e 's/@''GNULIB_GETTIMEOFDAY''@/$(GNULIB_GETTIMEOFDAY)/g' \ + -e 's/@''GNULIB_CTIME''@/$(GNULIB_CTIME)/g' \ + -e 's/@''GNULIB_LOCALTIME''@/$(GNULIB_LOCALTIME)/g' \ -e 's/@''GNULIB_MKTIME''@/$(GNULIB_MKTIME)/g' \ -e 's/@''GNULIB_NANOSLEEP''@/$(GNULIB_NANOSLEEP)/g' \ + -e 's/@''GNULIB_STRFTIME''@/$(GNULIB_STRFTIME)/g' \ -e 's/@''GNULIB_STRPTIME''@/$(GNULIB_STRPTIME)/g' \ -e 's/@''GNULIB_TIMEGM''@/$(GNULIB_TIMEGM)/g' \ -e 's/@''GNULIB_TIME_R''@/$(GNULIB_TIME_R)/g' \ -e 's/@''GNULIB_TIME_RZ''@/$(GNULIB_TIME_RZ)/g' \ + -e 's/@''GNULIB_TZSET''@/$(GNULIB_TZSET)/g' \ -e 's|@''HAVE_DECL_LOCALTIME_R''@|$(HAVE_DECL_LOCALTIME_R)|g' \ -e 's|@''HAVE_NANOSLEEP''@|$(HAVE_NANOSLEEP)|g' \ -e 's|@''HAVE_STRPTIME''@|$(HAVE_STRPTIME)|g' \ -e 's|@''HAVE_TIMEGM''@|$(HAVE_TIMEGM)|g' \ -e 's|@''HAVE_TIMEZONE_T''@|$(HAVE_TIMEZONE_T)|g' \ + -e 's|@''HAVE_TZSET''@|$(HAVE_TZSET)|g' \ + -e 's|@''REPLACE_CTIME''@|$(REPLACE_CTIME)|g' \ -e 's|@''REPLACE_GMTIME''@|$(REPLACE_GMTIME)|g' \ -e 's|@''REPLACE_LOCALTIME''@|$(REPLACE_LOCALTIME)|g' \ -e 's|@''REPLACE_LOCALTIME_R''@|$(REPLACE_LOCALTIME_R)|g' \ -e 's|@''REPLACE_MKTIME''@|$(REPLACE_MKTIME)|g' \ -e 's|@''REPLACE_NANOSLEEP''@|$(REPLACE_NANOSLEEP)|g' \ + -e 's|@''REPLACE_STRFTIME''@|$(REPLACE_STRFTIME)|g' \ -e 's|@''REPLACE_TIMEGM''@|$(REPLACE_TIMEGM)|g' \ + -e 's|@''REPLACE_TZSET''@|$(REPLACE_TZSET)|g' \ -e 's|@''PTHREAD_H_DEFINES_STRUCT_TIMESPEC''@|$(PTHREAD_H_DEFINES_STRUCT_TIMESPEC)|g' \ -e 's|@''SYS_TIME_H_DEFINES_STRUCT_TIMESPEC''@|$(SYS_TIME_H_DEFINES_STRUCT_TIMESPEC)|g' \ -e 's|@''TIME_H_DEFINES_STRUCT_TIMESPEC''@|$(TIME_H_DEFINES_STRUCT_TIMESPEC)|g' \ @@ -2405,9 +2572,11 @@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_UNISTD_H''@|$(NEXT_UNISTD_H)|g' \ -e 's|@''WINDOWS_64_BIT_OFF_T''@|$(WINDOWS_64_BIT_OFF_T)|g' \ + -e 's/@''GNULIB_ACCESS''@/$(GNULIB_ACCESS)/g' \ -e 's/@''GNULIB_CHDIR''@/$(GNULIB_CHDIR)/g' \ -e 's/@''GNULIB_CHOWN''@/$(GNULIB_CHOWN)/g' \ -e 's/@''GNULIB_CLOSE''@/$(GNULIB_CLOSE)/g' \ + -e 's/@''GNULIB_COPY_FILE_RANGE''@/$(GNULIB_COPY_FILE_RANGE)/g' \ -e 's/@''GNULIB_DUP''@/$(GNULIB_DUP)/g' \ -e 's/@''GNULIB_DUP2''@/$(GNULIB_DUP2)/g' \ -e 's/@''GNULIB_DUP3''@/$(GNULIB_DUP3)/g' \ @@ -2422,11 +2591,14 @@ -e 's/@''GNULIB_GETCWD''@/$(GNULIB_GETCWD)/g' \ -e 's/@''GNULIB_GETDOMAINNAME''@/$(GNULIB_GETDOMAINNAME)/g' \ -e 's/@''GNULIB_GETDTABLESIZE''@/$(GNULIB_GETDTABLESIZE)/g' \ + -e 's/@''GNULIB_GETENTROPY''@/$(GNULIB_GETENTROPY)/g' \ -e 's/@''GNULIB_GETGROUPS''@/$(GNULIB_GETGROUPS)/g' \ -e 's/@''GNULIB_GETHOSTNAME''@/$(GNULIB_GETHOSTNAME)/g' \ -e 's/@''GNULIB_GETLOGIN''@/$(GNULIB_GETLOGIN)/g' \ -e 's/@''GNULIB_GETLOGIN_R''@/$(GNULIB_GETLOGIN_R)/g' \ + -e 's/@''GNULIB_GETOPT_POSIX''@/$(GNULIB_GETOPT_POSIX)/g' \ -e 's/@''GNULIB_GETPAGESIZE''@/$(GNULIB_GETPAGESIZE)/g' \ + -e 's/@''GNULIB_GETPASS''@/$(GNULIB_GETPASS)/g' \ -e 's/@''GNULIB_GETUSERSHELL''@/$(GNULIB_GETUSERSHELL)/g' \ -e 's/@''GNULIB_GROUP_MEMBER''@/$(GNULIB_GROUP_MEMBER)/g' \ -e 's/@''GNULIB_ISATTY''@/$(GNULIB_ISATTY)/g' \ @@ -2446,6 +2618,7 @@ -e 's/@''GNULIB_SLEEP''@/$(GNULIB_SLEEP)/g' \ -e 's/@''GNULIB_SYMLINK''@/$(GNULIB_SYMLINK)/g' \ -e 's/@''GNULIB_SYMLINKAT''@/$(GNULIB_SYMLINKAT)/g' \ + -e 's/@''GNULIB_TRUNCATE''@/$(GNULIB_TRUNCATE)/g' \ -e 's/@''GNULIB_TTYNAME_R''@/$(GNULIB_TTYNAME_R)/g' \ -e 's/@''GNULIB_UNISTD_H_GETOPT''@/0$(GNULIB_GL_UNISTD_H_GETOPT)/g' \ -e 's/@''GNULIB_UNISTD_H_NONBLOCKING''@/$(GNULIB_UNISTD_H_NONBLOCKING)/g' \ @@ -2456,6 +2629,7 @@ -e 's/@''GNULIB_WRITE''@/$(GNULIB_WRITE)/g' \ < $(srcdir)/unistd.in.h | \ sed -e 's|@''HAVE_CHOWN''@|$(HAVE_CHOWN)|g' \ + -e 's|@''HAVE_COPY_FILE_RANGE''@|$(HAVE_COPY_FILE_RANGE)|g' \ -e 's|@''HAVE_DUP2''@|$(HAVE_DUP2)|g' \ -e 's|@''HAVE_DUP3''@|$(HAVE_DUP3)|g' \ -e 's|@''HAVE_EUIDACCESS''@|$(HAVE_EUIDACCESS)|g' \ @@ -2466,10 +2640,11 @@ -e 's|@''HAVE_FSYNC''@|$(HAVE_FSYNC)|g' \ -e 's|@''HAVE_FTRUNCATE''@|$(HAVE_FTRUNCATE)|g' \ -e 's|@''HAVE_GETDTABLESIZE''@|$(HAVE_GETDTABLESIZE)|g' \ + -e 's|@''HAVE_GETENTROPY''@|$(HAVE_GETENTROPY)|g' \ -e 's|@''HAVE_GETGROUPS''@|$(HAVE_GETGROUPS)|g' \ -e 's|@''HAVE_GETHOSTNAME''@|$(HAVE_GETHOSTNAME)|g' \ - -e 's|@''HAVE_GETLOGIN''@|$(HAVE_GETLOGIN)|g' \ -e 's|@''HAVE_GETPAGESIZE''@|$(HAVE_GETPAGESIZE)|g' \ + -e 's|@''HAVE_GETPASS''@|$(HAVE_GETPASS)|g' \ -e 's|@''HAVE_GROUP_MEMBER''@|$(HAVE_GROUP_MEMBER)|g' \ -e 's|@''HAVE_LCHOWN''@|$(HAVE_LCHOWN)|g' \ -e 's|@''HAVE_LINK''@|$(HAVE_LINK)|g' \ @@ -2490,18 +2665,22 @@ -e 's|@''HAVE_DECL_FCHDIR''@|$(HAVE_DECL_FCHDIR)|g' \ -e 's|@''HAVE_DECL_FDATASYNC''@|$(HAVE_DECL_FDATASYNC)|g' \ -e 's|@''HAVE_DECL_GETDOMAINNAME''@|$(HAVE_DECL_GETDOMAINNAME)|g' \ + -e 's|@''HAVE_DECL_GETLOGIN''@|$(HAVE_DECL_GETLOGIN)|g' \ -e 's|@''HAVE_DECL_GETLOGIN_R''@|$(HAVE_DECL_GETLOGIN_R)|g' \ -e 's|@''HAVE_DECL_GETPAGESIZE''@|$(HAVE_DECL_GETPAGESIZE)|g' \ -e 's|@''HAVE_DECL_GETUSERSHELL''@|$(HAVE_DECL_GETUSERSHELL)|g' \ -e 's|@''HAVE_DECL_SETHOSTNAME''@|$(HAVE_DECL_SETHOSTNAME)|g' \ + -e 's|@''HAVE_DECL_TRUNCATE''@|$(HAVE_DECL_TRUNCATE)|g' \ -e 's|@''HAVE_DECL_TTYNAME_R''@|$(HAVE_DECL_TTYNAME_R)|g' \ -e 's|@''HAVE_OS_H''@|$(HAVE_OS_H)|g' \ -e 's|@''HAVE_SYS_PARAM_H''@|$(HAVE_SYS_PARAM_H)|g' \ | \ - sed -e 's|@''REPLACE_CHOWN''@|$(REPLACE_CHOWN)|g' \ + sed -e 's|@''REPLACE_ACCESS''@|$(REPLACE_ACCESS)|g' \ + -e 's|@''REPLACE_CHOWN''@|$(REPLACE_CHOWN)|g' \ -e 's|@''REPLACE_CLOSE''@|$(REPLACE_CLOSE)|g' \ -e 's|@''REPLACE_DUP''@|$(REPLACE_DUP)|g' \ -e 's|@''REPLACE_DUP2''@|$(REPLACE_DUP2)|g' \ + -e 's|@''REPLACE_FACCESSAT''@|$(REPLACE_FACCESSAT)|g' \ -e 's|@''REPLACE_FCHOWNAT''@|$(REPLACE_FCHOWNAT)|g' \ -e 's|@''REPLACE_FTRUNCATE''@|$(REPLACE_FTRUNCATE)|g' \ -e 's|@''REPLACE_GETCWD''@|$(REPLACE_GETCWD)|g' \ @@ -2510,6 +2689,7 @@ -e 's|@''REPLACE_GETLOGIN_R''@|$(REPLACE_GETLOGIN_R)|g' \ -e 's|@''REPLACE_GETGROUPS''@|$(REPLACE_GETGROUPS)|g' \ -e 's|@''REPLACE_GETPAGESIZE''@|$(REPLACE_GETPAGESIZE)|g' \ + -e 's|@''REPLACE_GETPASS''@|$(REPLACE_GETPASS)|g' \ -e 's|@''REPLACE_ISATTY''@|$(REPLACE_ISATTY)|g' \ -e 's|@''REPLACE_LCHOWN''@|$(REPLACE_LCHOWN)|g' \ -e 's|@''REPLACE_LINK''@|$(REPLACE_LINK)|g' \ @@ -2524,11 +2704,13 @@ -e 's|@''REPLACE_SLEEP''@|$(REPLACE_SLEEP)|g' \ -e 's|@''REPLACE_SYMLINK''@|$(REPLACE_SYMLINK)|g' \ -e 's|@''REPLACE_SYMLINKAT''@|$(REPLACE_SYMLINKAT)|g' \ + -e 's|@''REPLACE_TRUNCATE''@|$(REPLACE_TRUNCATE)|g' \ -e 's|@''REPLACE_TTYNAME_R''@|$(REPLACE_TTYNAME_R)|g' \ -e 's|@''REPLACE_UNLINK''@|$(REPLACE_UNLINK)|g' \ -e 's|@''REPLACE_UNLINKAT''@|$(REPLACE_UNLINKAT)|g' \ -e 's|@''REPLACE_USLEEP''@|$(REPLACE_USLEEP)|g' \ -e 's|@''REPLACE_WRITE''@|$(REPLACE_WRITE)|g' \ + -e 's|@''UNISTD_H_HAVE_SYS_RANDOM_H''@|$(UNISTD_H_HAVE_SYS_RANDOM_H)|g' \ -e 's|@''UNISTD_H_HAVE_WINSOCK2_H''@|$(UNISTD_H_HAVE_WINSOCK2_H)|g' \ -e 's|@''UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS''@|$(UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ @@ -2589,6 +2771,8 @@ -e 's|@''HAVE_FEATURES_H''@|$(HAVE_FEATURES_H)|g' \ -e 's|@''NEXT_WCHAR_H''@|$(NEXT_WCHAR_H)|g' \ -e 's|@''HAVE_WCHAR_H''@|$(HAVE_WCHAR_H)|g' \ + -e 's/@''HAVE_CRTDEFS_H''@/$(HAVE_CRTDEFS_H)/g' \ + -e 's/@''GNULIB_OVERRIDES_WINT_T''@/$(GNULIB_OVERRIDES_WINT_T)/g' \ -e 's/@''GNULIB_BTOWC''@/$(GNULIB_BTOWC)/g' \ -e 's/@''GNULIB_WCTOB''@/$(GNULIB_WCTOB)/g' \ -e 's/@''GNULIB_MBSINIT''@/$(GNULIB_MBSINIT)/g' \ @@ -2604,6 +2788,7 @@ -e 's/@''GNULIB_WMEMCMP''@/$(GNULIB_WMEMCMP)/g' \ -e 's/@''GNULIB_WMEMCPY''@/$(GNULIB_WMEMCPY)/g' \ -e 's/@''GNULIB_WMEMMOVE''@/$(GNULIB_WMEMMOVE)/g' \ + -e 's/@''GNULIB_WMEMPCPY''@/$(GNULIB_WMEMPCPY)/g' \ -e 's/@''GNULIB_WMEMSET''@/$(GNULIB_WMEMSET)/g' \ -e 's/@''GNULIB_WCSLEN''@/$(GNULIB_WCSLEN)/g' \ -e 's/@''GNULIB_WCSNLEN''@/$(GNULIB_WCSNLEN)/g' \ @@ -2628,6 +2813,7 @@ -e 's/@''GNULIB_WCSSTR''@/$(GNULIB_WCSSTR)/g' \ -e 's/@''GNULIB_WCSTOK''@/$(GNULIB_WCSTOK)/g' \ -e 's/@''GNULIB_WCSWIDTH''@/$(GNULIB_WCSWIDTH)/g' \ + -e 's/@''GNULIB_WCSFTIME''@/$(GNULIB_WCSFTIME)/g' \ < $(srcdir)/wchar.in.h | \ sed -e 's|@''HAVE_WINT_T''@|$(HAVE_WINT_T)|g' \ -e 's|@''HAVE_BTOWC''@|$(HAVE_BTOWC)|g' \ @@ -2643,6 +2829,7 @@ -e 's|@''HAVE_WMEMCMP''@|$(HAVE_WMEMCMP)|g' \ -e 's|@''HAVE_WMEMCPY''@|$(HAVE_WMEMCPY)|g' \ -e 's|@''HAVE_WMEMMOVE''@|$(HAVE_WMEMMOVE)|g' \ + -e 's|@''HAVE_WMEMPCPY''@|$(HAVE_WMEMPCPY)|g' \ -e 's|@''HAVE_WMEMSET''@|$(HAVE_WMEMSET)|g' \ -e 's|@''HAVE_WCSLEN''@|$(HAVE_WCSLEN)|g' \ -e 's|@''HAVE_WCSNLEN''@|$(HAVE_WCSNLEN)|g' \ @@ -2667,6 +2854,7 @@ -e 's|@''HAVE_WCSSTR''@|$(HAVE_WCSSTR)|g' \ -e 's|@''HAVE_WCSTOK''@|$(HAVE_WCSTOK)|g' \ -e 's|@''HAVE_WCSWIDTH''@|$(HAVE_WCSWIDTH)|g' \ + -e 's|@''HAVE_WCSFTIME''@|$(HAVE_WCSFTIME)|g' \ -e 's|@''HAVE_DECL_WCTOB''@|$(HAVE_DECL_WCTOB)|g' \ -e 's|@''HAVE_DECL_WCWIDTH''@|$(HAVE_DECL_WCWIDTH)|g' \ | \ @@ -2683,6 +2871,8 @@ -e 's|@''REPLACE_WCSNRTOMBS''@|$(REPLACE_WCSNRTOMBS)|g' \ -e 's|@''REPLACE_WCWIDTH''@|$(REPLACE_WCWIDTH)|g' \ -e 's|@''REPLACE_WCSWIDTH''@|$(REPLACE_WCSWIDTH)|g' \ + -e 's|@''REPLACE_WCSFTIME''@|$(REPLACE_WCSFTIME)|g' \ + -e 's|@''REPLACE_WCSTOK''@|$(REPLACE_WCSTOK)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ @@ -2710,7 +2900,11 @@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_WCTYPE_H''@|$(NEXT_WCTYPE_H)|g' \ + -e 's/@''HAVE_CRTDEFS_H''@/$(HAVE_CRTDEFS_H)/g' \ + -e 's/@''GNULIB_OVERRIDES_WINT_T''@/$(GNULIB_OVERRIDES_WINT_T)/g' \ -e 's/@''GNULIB_ISWBLANK''@/$(GNULIB_ISWBLANK)/g' \ + -e 's/@''GNULIB_ISWDIGIT''@/$(GNULIB_ISWDIGIT)/g' \ + -e 's/@''GNULIB_ISWXDIGIT''@/$(GNULIB_ISWXDIGIT)/g' \ -e 's/@''GNULIB_WCTYPE''@/$(GNULIB_WCTYPE)/g' \ -e 's/@''GNULIB_ISWCTYPE''@/$(GNULIB_ISWCTYPE)/g' \ -e 's/@''GNULIB_WCTRANS''@/$(GNULIB_WCTRANS)/g' \ @@ -2721,6 +2915,8 @@ -e 's/@''HAVE_WCTRANS_T''@/$(HAVE_WCTRANS_T)/g' \ -e 's/@''HAVE_WINT_T''@/$(HAVE_WINT_T)/g' \ -e 's/@''REPLACE_ISWBLANK''@/$(REPLACE_ISWBLANK)/g' \ + -e 's/@''REPLACE_ISWDIGIT''@/$(REPLACE_ISWDIGIT)/g' \ + -e 's/@''REPLACE_ISWXDIGIT''@/$(REPLACE_ISWXDIGIT)/g' \ -e 's/@''REPLACE_ISWCNTRL''@/$(REPLACE_ISWCNTRL)/g' \ -e 's/@''REPLACE_TOWLOWER''@/$(REPLACE_TOWLOWER)/g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ @@ -2734,6 +2930,67 @@ ## end gnulib module wctype-h +## begin gnulib module windows-mutex + + +EXTRA_DIST += windows-initguard.h windows-mutex.c windows-mutex.h + +EXTRA_libgnu_a_SOURCES += windows-mutex.c + +## end gnulib module windows-mutex + +## begin gnulib module windows-once + + +EXTRA_DIST += windows-once.c windows-once.h + +EXTRA_libgnu_a_SOURCES += windows-once.c + +## end gnulib module windows-once + +## begin gnulib module windows-recmutex + + +EXTRA_DIST += windows-initguard.h windows-recmutex.c windows-recmutex.h + +EXTRA_libgnu_a_SOURCES += windows-recmutex.c + +## end gnulib module windows-recmutex + +## begin gnulib module windows-rwlock + + +EXTRA_DIST += windows-initguard.h windows-rwlock.c windows-rwlock.h + +EXTRA_libgnu_a_SOURCES += windows-rwlock.c + +## end gnulib module windows-rwlock + +## begin gnulib module wmemchr + + +EXTRA_DIST += wmemchr-impl.h wmemchr.c + +EXTRA_libgnu_a_SOURCES += wmemchr.c + +## end gnulib module wmemchr + +## begin gnulib module wmempcpy + + +EXTRA_DIST += wmempcpy.c + +EXTRA_libgnu_a_SOURCES += wmempcpy.c + +## end gnulib module wmempcpy + +## begin gnulib module xalloc-oversized + + +EXTRA_DIST += xalloc-oversized.h + +## end gnulib module xalloc-oversized + mostlyclean-local: mostlyclean-generic @for dir in '' $(MOSTLYCLEANDIRS); do \ diff -Nru gdb-9.1/gnulib/import/Makefile.in gdb-10.2/gnulib/import/Makefile.in --- gdb-9.1/gnulib/import/Makefile.in 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/Makefile.in 2021-04-25 04:06:26.000000000 +0000 @@ -14,7 +14,7 @@ @SET_MAKE@ -# Copyright (C) 2002-2016 Free Software Foundation, Inc. +# Copyright (C) 2002-2020 Free Software Foundation, Inc. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -27,7 +27,7 @@ # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License -# along with this file. If not, see <http://www.gnu.org/licenses/>. +# along with this file. If not, see <https://www.gnu.org/licenses/>. # # As a special exception to the GNU General Public License, # this file may be distributed as part of a program that @@ -35,7 +35,55 @@ # the same distribution terms as the rest of that program. # # Generated by gnulib-tool. -# Reproduce by: gnulib-tool --import --lib=libgnu --source-base=import --m4-base=import/m4 --doc-base=doc --tests-base=tests --aux-dir=import/extra --no-conditional-dependencies --no-libtool --macro-prefix=gl --no-vc-files alloca canonicalize-lgpl dirent dirfd errno fnmatch-gnu frexpl getcwd glob inet_ntop inttypes limits-h lstat memchr memmem mkdir mkdtemp mkostemp pathmax rawmemchr readlink rename setenv signal-h strchrnul strerror_r-posix strstr strtok_r sys_stat time_r unistd unsetenv update-copyright wchar wctype-h +# Reproduce by: +# gnulib-tool --import \ +# --lib=libgnu \ +# --source-base=import \ +# --m4-base=import/m4 \ +# --doc-base=doc \ +# --tests-base=tests \ +# --aux-dir=import/extra \ +# --no-conditional-dependencies \ +# --no-libtool \ +# --macro-prefix=gl \ +# --no-vc-files \ +# alloca \ +# canonicalize-lgpl \ +# count-one-bits \ +# dirent \ +# dirfd \ +# errno \ +# fnmatch-gnu \ +# frexpl \ +# getcwd \ +# gettimeofday \ +# glob \ +# inet_ntop \ +# inttypes \ +# limits-h \ +# lstat \ +# memchr \ +# memmem \ +# mkdir \ +# mkdtemp \ +# mkostemp \ +# pathmax \ +# rawmemchr \ +# readlink \ +# rename \ +# setenv \ +# signal-h \ +# strchrnul \ +# strerror_r-posix \ +# strstr \ +# strtok_r \ +# sys_stat \ +# time_r \ +# unistd \ +# unsetenv \ +# update-copyright \ +# wchar \ +# wctype-h @@ -98,6 +146,7 @@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c @@ -121,15 +170,18 @@ $(top_srcdir)/../config/override.m4 \ $(top_srcdir)/../config/plugins.m4 \ $(top_srcdir)/import/m4/00gnulib.m4 \ + $(top_srcdir)/import/m4/__inline.m4 \ $(top_srcdir)/import/m4/absolute-header.m4 \ $(top_srcdir)/import/m4/alloca.m4 \ $(top_srcdir)/import/m4/arpa_inet_h.m4 \ + $(top_srcdir)/import/m4/btowc.m4 \ + $(top_srcdir)/import/m4/builtin-expect.m4 \ $(top_srcdir)/import/m4/canonicalize.m4 \ $(top_srcdir)/import/m4/chdir-long.m4 \ $(top_srcdir)/import/m4/close.m4 \ $(top_srcdir)/import/m4/closedir.m4 \ $(top_srcdir)/import/m4/codeset.m4 \ - $(top_srcdir)/import/m4/configmake.m4 \ + $(top_srcdir)/import/m4/ctype.m4 \ $(top_srcdir)/import/m4/d-ino.m4 \ $(top_srcdir)/import/m4/d-type.m4 \ $(top_srcdir)/import/m4/dirent_h.m4 \ @@ -154,6 +206,7 @@ $(top_srcdir)/import/m4/flexmember.m4 \ $(top_srcdir)/import/m4/float_h.m4 \ $(top_srcdir)/import/m4/fnmatch.m4 \ + $(top_srcdir)/import/m4/fnmatch_h.m4 \ $(top_srcdir)/import/m4/fpieee.m4 \ $(top_srcdir)/import/m4/frexp.m4 \ $(top_srcdir)/import/m4/frexpl.m4 \ @@ -163,31 +216,32 @@ $(top_srcdir)/import/m4/getcwd-path-max.m4 \ $(top_srcdir)/import/m4/getcwd.m4 \ $(top_srcdir)/import/m4/getdtablesize.m4 \ + $(top_srcdir)/import/m4/getlogin.m4 \ $(top_srcdir)/import/m4/getlogin_r.m4 \ + $(top_srcdir)/import/m4/getpagesize.m4 \ $(top_srcdir)/import/m4/getprogname.m4 \ + $(top_srcdir)/import/m4/getrandom.m4 \ $(top_srcdir)/import/m4/gettimeofday.m4 \ - $(top_srcdir)/import/m4/glibc21.m4 \ $(top_srcdir)/import/m4/glob.m4 \ + $(top_srcdir)/import/m4/glob_h.m4 \ $(top_srcdir)/import/m4/gnulib-common.m4 \ $(top_srcdir)/import/m4/gnulib-comp.m4 \ - $(top_srcdir)/import/m4/hard-locale.m4 \ $(top_srcdir)/import/m4/include_next.m4 \ $(top_srcdir)/import/m4/inet_ntop.m4 \ $(top_srcdir)/import/m4/inttypes-pri.m4 \ $(top_srcdir)/import/m4/inttypes.m4 \ + $(top_srcdir)/import/m4/isblank.m4 \ $(top_srcdir)/import/m4/isnand.m4 \ $(top_srcdir)/import/m4/isnanl.m4 \ $(top_srcdir)/import/m4/largefile.m4 \ - $(top_srcdir)/import/m4/lib-ld.m4 \ - $(top_srcdir)/import/m4/lib-link.m4 \ - $(top_srcdir)/import/m4/lib-prefix.m4 \ $(top_srcdir)/import/m4/limits-h.m4 \ $(top_srcdir)/import/m4/localcharset.m4 \ $(top_srcdir)/import/m4/locale-fr.m4 \ $(top_srcdir)/import/m4/locale-ja.m4 \ $(top_srcdir)/import/m4/locale-zh.m4 \ + $(top_srcdir)/import/m4/locale_h.m4 \ + $(top_srcdir)/import/m4/localtime-buffer.m4 \ $(top_srcdir)/import/m4/lock.m4 \ - $(top_srcdir)/import/m4/longlong.m4 \ $(top_srcdir)/import/m4/lstat.m4 \ $(top_srcdir)/import/m4/malloc.m4 \ $(top_srcdir)/import/m4/malloca.m4 \ @@ -196,10 +250,12 @@ $(top_srcdir)/import/m4/mbsinit.m4 \ $(top_srcdir)/import/m4/mbsrtowcs.m4 \ $(top_srcdir)/import/m4/mbstate_t.m4 \ + $(top_srcdir)/import/m4/mbtowc.m4 \ $(top_srcdir)/import/m4/memchr.m4 \ $(top_srcdir)/import/m4/memmem.m4 \ $(top_srcdir)/import/m4/mempcpy.m4 \ $(top_srcdir)/import/m4/memrchr.m4 \ + $(top_srcdir)/import/m4/minmax.m4 \ $(top_srcdir)/import/m4/mkdir.m4 \ $(top_srcdir)/import/m4/mkdtemp.m4 \ $(top_srcdir)/import/m4/mkostemp.m4 \ @@ -211,11 +267,13 @@ $(top_srcdir)/import/m4/netinet_in_h.m4 \ $(top_srcdir)/import/m4/nocrash.m4 \ $(top_srcdir)/import/m4/off_t.m4 \ - $(top_srcdir)/import/m4/onceonly.m4 \ + $(top_srcdir)/import/m4/open-cloexec.m4 \ + $(top_srcdir)/import/m4/open-slash.m4 \ $(top_srcdir)/import/m4/open.m4 \ $(top_srcdir)/import/m4/openat.m4 \ $(top_srcdir)/import/m4/opendir.m4 \ $(top_srcdir)/import/m4/pathmax.m4 \ + $(top_srcdir)/import/m4/pthread_rwlock_rdlock.m4 \ $(top_srcdir)/import/m4/rawmemchr.m4 \ $(top_srcdir)/import/m4/readdir.m4 \ $(top_srcdir)/import/m4/readlink.m4 \ @@ -224,13 +282,15 @@ $(top_srcdir)/import/m4/rewinddir.m4 \ $(top_srcdir)/import/m4/rmdir.m4 \ $(top_srcdir)/import/m4/save-cwd.m4 \ - $(top_srcdir)/import/m4/secure_getenv.m4 \ $(top_srcdir)/import/m4/setenv.m4 \ + $(top_srcdir)/import/m4/setlocale_null.m4 \ $(top_srcdir)/import/m4/signal_h.m4 \ $(top_srcdir)/import/m4/socklen.m4 \ $(top_srcdir)/import/m4/sockpfaf.m4 \ $(top_srcdir)/import/m4/ssize_t.m4 \ + $(top_srcdir)/import/m4/stat-time.m4 \ $(top_srcdir)/import/m4/stat.m4 \ + $(top_srcdir)/import/m4/std-gnu11.m4 \ $(top_srcdir)/import/m4/stdalign.m4 \ $(top_srcdir)/import/m4/stdbool.m4 \ $(top_srcdir)/import/m4/stddef_h.m4 \ @@ -242,8 +302,10 @@ $(top_srcdir)/import/m4/strerror.m4 \ $(top_srcdir)/import/m4/strerror_r.m4 \ $(top_srcdir)/import/m4/string_h.m4 \ + $(top_srcdir)/import/m4/strnlen.m4 \ $(top_srcdir)/import/m4/strstr.m4 \ $(top_srcdir)/import/m4/strtok_r.m4 \ + $(top_srcdir)/import/m4/sys_random_h.m4 \ $(top_srcdir)/import/m4/sys_socket_h.m4 \ $(top_srcdir)/import/m4/sys_stat_h.m4 \ $(top_srcdir)/import/m4/sys_time_h.m4 \ @@ -255,11 +317,15 @@ $(top_srcdir)/import/m4/time_r.m4 \ $(top_srcdir)/import/m4/unistd-safer.m4 \ $(top_srcdir)/import/m4/unistd_h.m4 \ + $(top_srcdir)/import/m4/visibility.m4 \ $(top_srcdir)/import/m4/warn-on-use.m4 \ $(top_srcdir)/import/m4/wchar_h.m4 \ $(top_srcdir)/import/m4/wchar_t.m4 \ $(top_srcdir)/import/m4/wctype_h.m4 \ - $(top_srcdir)/import/m4/wint_t.m4 $(top_srcdir)/configure.ac + $(top_srcdir)/import/m4/wint_t.m4 \ + $(top_srcdir)/import/m4/wmemchr.m4 \ + $(top_srcdir)/import/m4/wmempcpy.m4 \ + $(top_srcdir)/import/m4/zzgnulib.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) @@ -275,14 +341,19 @@ libgnu_a_AR = $(AR) $(ARFLAGS) am__DEPENDENCIES_1 = am__dirstamp = $(am__leading_dot)dirstamp -am_libgnu_a_OBJECTS = cloexec.$(OBJEXT) dirname-lgpl.$(OBJEXT) \ +am_libgnu_a_OBJECTS = openat-proc.$(OBJEXT) cloexec.$(OBJEXT) \ + count-one-bits.$(OBJEXT) dirname-lgpl.$(OBJEXT) \ basename-lgpl.$(OBJEXT) stripslash.$(OBJEXT) \ - exitfail.$(OBJEXT) fd-hook.$(OBJEXT) \ - filenamecat-lgpl.$(OBJEXT) getprogname.$(OBJEXT) \ - hard-locale.$(OBJEXT) localcharset.$(OBJEXT) \ - glthread/lock.$(OBJEXT) malloca.$(OBJEXT) math.$(OBJEXT) \ - openat-die.$(OBJEXT) save-cwd.$(OBJEXT) strnlen1.$(OBJEXT) \ - sys_socket.$(OBJEXT) tempname.$(OBJEXT) \ + exitfail.$(OBJEXT) fd-hook.$(OBJEXT) fd-safer-flag.$(OBJEXT) \ + dup-safer-flag.$(OBJEXT) filenamecat-lgpl.$(OBJEXT) \ + getprogname.$(OBJEXT) hard-locale.$(OBJEXT) \ + localcharset.$(OBJEXT) glthread/lock.$(OBJEXT) \ + malloca.$(OBJEXT) math.$(OBJEXT) openat-die.$(OBJEXT) \ + save-cwd.$(OBJEXT) malloc/scratch_buffer_grow.$(OBJEXT) \ + malloc/scratch_buffer_grow_preserve.$(OBJEXT) \ + malloc/scratch_buffer_set_array_size.$(OBJEXT) \ + setlocale_null.$(OBJEXT) stat-time.$(OBJEXT) \ + strnlen1.$(OBJEXT) sys_socket.$(OBJEXT) tempname.$(OBJEXT) \ glthread/threadlib.$(OBJEXT) unistd.$(OBJEXT) \ dup-safer.$(OBJEXT) fd-safer.$(OBJEXT) pipe-safer.$(OBJEXT) \ wctype-h.$(OBJEXT) @@ -358,7 +429,6 @@ ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) -pkglibexecdir = @pkglibexecdir@ ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALLOCA_H = @ALLOCA_H@ @@ -379,6 +449,7 @@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ +CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ @@ -400,10 +471,10 @@ FNMATCH_H = @FNMATCH_H@ FREXPL_LIBM = @FREXPL_LIBM@ FREXP_LIBM = @FREXP_LIBM@ -GLIBC21 = @GLIBC21@ GLOB_H = @GLOB_H@ GNULIB_ACCEPT = @GNULIB_ACCEPT@ GNULIB_ACCEPT4 = @GNULIB_ACCEPT4@ +GNULIB_ACCESS = @GNULIB_ACCESS@ GNULIB_ACOSF = @GNULIB_ACOSF@ GNULIB_ACOSL = @GNULIB_ACOSL@ GNULIB_ALPHASORT = @GNULIB_ALPHASORT@ @@ -431,14 +502,18 @@ GNULIB_COPYSIGN = @GNULIB_COPYSIGN@ GNULIB_COPYSIGNF = @GNULIB_COPYSIGNF@ GNULIB_COPYSIGNL = @GNULIB_COPYSIGNL@ +GNULIB_COPY_FILE_RANGE = @GNULIB_COPY_FILE_RANGE@ GNULIB_COSF = @GNULIB_COSF@ GNULIB_COSHF = @GNULIB_COSHF@ GNULIB_COSL = @GNULIB_COSL@ +GNULIB_CREAT = @GNULIB_CREAT@ +GNULIB_CTIME = @GNULIB_CTIME@ GNULIB_DIRFD = @GNULIB_DIRFD@ GNULIB_DPRINTF = @GNULIB_DPRINTF@ GNULIB_DUP = @GNULIB_DUP@ GNULIB_DUP2 = @GNULIB_DUP2@ GNULIB_DUP3 = @GNULIB_DUP3@ +GNULIB_DUPLOCALE = @GNULIB_DUPLOCALE@ GNULIB_ENVIRON = @GNULIB_ENVIRON@ GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ GNULIB_EXP2 = @GNULIB_EXP2@ @@ -446,6 +521,7 @@ GNULIB_EXP2L = @GNULIB_EXP2L@ GNULIB_EXPF = @GNULIB_EXPF@ GNULIB_EXPL = @GNULIB_EXPL@ +GNULIB_EXPLICIT_BZERO = @GNULIB_EXPLICIT_BZERO@ GNULIB_EXPM1 = @GNULIB_EXPM1@ GNULIB_EXPM1F = @GNULIB_EXPM1F@ GNULIB_EXPM1L = @GNULIB_EXPM1L@ @@ -474,6 +550,7 @@ GNULIB_FMOD = @GNULIB_FMOD@ GNULIB_FMODF = @GNULIB_FMODF@ GNULIB_FMODL = @GNULIB_FMODL@ +GNULIB_FNMATCH = @GNULIB_FNMATCH@ GNULIB_FOPEN = @GNULIB_FOPEN@ GNULIB_FPRINTF = @GNULIB_FPRINTF@ GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@ @@ -502,19 +579,24 @@ GNULIB_GETDELIM = @GNULIB_GETDELIM@ GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ +GNULIB_GETENTROPY = @GNULIB_GETENTROPY@ GNULIB_GETGROUPS = @GNULIB_GETGROUPS@ GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ GNULIB_GETLINE = @GNULIB_GETLINE@ GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@ GNULIB_GETLOGIN = @GNULIB_GETLOGIN@ GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ +GNULIB_GETOPT_POSIX = @GNULIB_GETOPT_POSIX@ GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ +GNULIB_GETPASS = @GNULIB_GETPASS@ GNULIB_GETPEERNAME = @GNULIB_GETPEERNAME@ +GNULIB_GETRANDOM = @GNULIB_GETRANDOM@ GNULIB_GETSOCKNAME = @GNULIB_GETSOCKNAME@ GNULIB_GETSOCKOPT = @GNULIB_GETSOCKOPT@ GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@ GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@ GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ +GNULIB_GLOB = @GNULIB_GLOB@ GNULIB_GRANTPT = @GNULIB_GRANTPT@ GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@ GNULIB_HYPOT = @GNULIB_HYPOT@ @@ -528,6 +610,7 @@ GNULIB_INET_NTOP = @GNULIB_INET_NTOP@ GNULIB_INET_PTON = @GNULIB_INET_PTON@ GNULIB_ISATTY = @GNULIB_ISATTY@ +GNULIB_ISBLANK = @GNULIB_ISBLANK@ GNULIB_ISFINITE = @GNULIB_ISFINITE@ GNULIB_ISINF = @GNULIB_ISINF@ GNULIB_ISNAN = @GNULIB_ISNAN@ @@ -536,6 +619,8 @@ GNULIB_ISNANL = @GNULIB_ISNANL@ GNULIB_ISWBLANK = @GNULIB_ISWBLANK@ GNULIB_ISWCTYPE = @GNULIB_ISWCTYPE@ +GNULIB_ISWDIGIT = @GNULIB_ISWDIGIT@ +GNULIB_ISWXDIGIT = @GNULIB_ISWXDIGIT@ GNULIB_LCHMOD = @GNULIB_LCHMOD@ GNULIB_LCHOWN = @GNULIB_LCHOWN@ GNULIB_LDEXPF = @GNULIB_LDEXPF@ @@ -543,6 +628,9 @@ GNULIB_LINK = @GNULIB_LINK@ GNULIB_LINKAT = @GNULIB_LINKAT@ GNULIB_LISTEN = @GNULIB_LISTEN@ +GNULIB_LOCALECONV = @GNULIB_LOCALECONV@ +GNULIB_LOCALENAME = @GNULIB_LOCALENAME@ +GNULIB_LOCALTIME = @GNULIB_LOCALTIME@ GNULIB_LOG = @GNULIB_LOG@ GNULIB_LOG10 = @GNULIB_LOG10@ GNULIB_LOG10F = @GNULIB_LOG10F@ @@ -606,6 +694,8 @@ GNULIB_OPEN = @GNULIB_OPEN@ GNULIB_OPENAT = @GNULIB_OPENAT@ GNULIB_OPENDIR = @GNULIB_OPENDIR@ +GNULIB_OVERRIDES_STRUCT_STAT = @GNULIB_OVERRIDES_STRUCT_STAT@ +GNULIB_OVERRIDES_WINT_T = @GNULIB_OVERRIDES_WINT_T@ GNULIB_PCLOSE = @GNULIB_PCLOSE@ GNULIB_PERROR = @GNULIB_PERROR@ GNULIB_PIPE = @GNULIB_PIPE@ @@ -633,6 +723,7 @@ GNULIB_READDIR = @GNULIB_READDIR@ GNULIB_READLINK = @GNULIB_READLINK@ GNULIB_READLINKAT = @GNULIB_READLINKAT@ +GNULIB_REALLOCARRAY = @GNULIB_REALLOCARRAY@ GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@ GNULIB_REALPATH = @GNULIB_REALPATH@ GNULIB_RECV = @GNULIB_RECV@ @@ -659,6 +750,8 @@ GNULIB_SENDTO = @GNULIB_SENDTO@ GNULIB_SETENV = @GNULIB_SETENV@ GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@ +GNULIB_SETLOCALE = @GNULIB_SETLOCALE@ +GNULIB_SETLOCALE_NULL = @GNULIB_SETLOCALE_NULL@ GNULIB_SETSOCKOPT = @GNULIB_SETSOCKOPT@ GNULIB_SHUTDOWN = @GNULIB_SHUTDOWN@ GNULIB_SIGACTION = @GNULIB_SIGACTION@ @@ -684,6 +777,7 @@ GNULIB_STRDUP = @GNULIB_STRDUP@ GNULIB_STRERROR = @GNULIB_STRERROR@ GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ +GNULIB_STRFTIME = @GNULIB_STRFTIME@ GNULIB_STRNCAT = @GNULIB_STRNCAT@ GNULIB_STRNDUP = @GNULIB_STRNDUP@ GNULIB_STRNLEN = @GNULIB_STRNLEN@ @@ -695,6 +789,7 @@ GNULIB_STRTOD = @GNULIB_STRTOD@ GNULIB_STRTOIMAX = @GNULIB_STRTOIMAX@ GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ +GNULIB_STRTOLD = @GNULIB_STRTOLD@ GNULIB_STRTOLL = @GNULIB_STRTOLL@ GNULIB_STRTOULL = @GNULIB_STRTOULL@ GNULIB_STRTOUMAX = @GNULIB_STRTOUMAX@ @@ -711,9 +806,11 @@ GNULIB_TMPFILE = @GNULIB_TMPFILE@ GNULIB_TOWCTRANS = @GNULIB_TOWCTRANS@ GNULIB_TRUNC = @GNULIB_TRUNC@ +GNULIB_TRUNCATE = @GNULIB_TRUNCATE@ GNULIB_TRUNCF = @GNULIB_TRUNCF@ GNULIB_TRUNCL = @GNULIB_TRUNCL@ GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ +GNULIB_TZSET = @GNULIB_TZSET@ GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@ GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ GNULIB_UNLINK = @GNULIB_UNLINK@ @@ -743,6 +840,7 @@ GNULIB_WCSCPY = @GNULIB_WCSCPY@ GNULIB_WCSCSPN = @GNULIB_WCSCSPN@ GNULIB_WCSDUP = @GNULIB_WCSDUP@ +GNULIB_WCSFTIME = @GNULIB_WCSFTIME@ GNULIB_WCSLEN = @GNULIB_WCSLEN@ GNULIB_WCSNCASECMP = @GNULIB_WCSNCASECMP@ GNULIB_WCSNCAT = @GNULIB_WCSNCAT@ @@ -767,6 +865,7 @@ GNULIB_WMEMCMP = @GNULIB_WMEMCMP@ GNULIB_WMEMCPY = @GNULIB_WMEMCPY@ GNULIB_WMEMMOVE = @GNULIB_WMEMMOVE@ +GNULIB_WMEMPCPY = @GNULIB_WMEMPCPY@ GNULIB_WMEMSET = @GNULIB_WMEMSET@ GNULIB_WRITE = @GNULIB_WRITE@ GNULIB__EXIT = @GNULIB__EXIT@ @@ -774,6 +873,7 @@ HAVE_ACCEPT4 = @HAVE_ACCEPT4@ HAVE_ACOSF = @HAVE_ACOSF@ HAVE_ACOSL = @HAVE_ACOSL@ +HAVE_ALLOCA_H = @HAVE_ALLOCA_H@ HAVE_ALPHASORT = @HAVE_ALPHASORT@ HAVE_ARPA_INET_H = @HAVE_ARPA_INET_H@ HAVE_ASINF = @HAVE_ASINF@ @@ -792,9 +892,11 @@ HAVE_CLOSEDIR = @HAVE_CLOSEDIR@ HAVE_COPYSIGN = @HAVE_COPYSIGN@ HAVE_COPYSIGNL = @HAVE_COPYSIGNL@ +HAVE_COPY_FILE_RANGE = @HAVE_COPY_FILE_RANGE@ HAVE_COSF = @HAVE_COSF@ HAVE_COSHF = @HAVE_COSHF@ HAVE_COSL = @HAVE_COSL@ +HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ @@ -824,6 +926,7 @@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ +HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ @@ -831,6 +934,7 @@ HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ HAVE_DECL_INET_NTOP = @HAVE_DECL_INET_NTOP@ HAVE_DECL_INET_PTON = @HAVE_DECL_INET_PTON@ +HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@ @@ -850,6 +954,7 @@ HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@ HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ +HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ HAVE_DECL_SINL = @HAVE_DECL_SINL@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ @@ -863,6 +968,7 @@ HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ HAVE_DECL_TANL = @HAVE_DECL_TANL@ HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ +HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@ HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ @@ -874,9 +980,11 @@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP2 = @HAVE_DUP2@ HAVE_DUP3 = @HAVE_DUP3@ +HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_EXPF = @HAVE_EXPF@ HAVE_EXPL = @HAVE_EXPL@ +HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_EXPM1 = @HAVE_EXPM1@ HAVE_EXPM1F = @HAVE_EXPM1F@ HAVE_FABSF = @HAVE_FABSF@ @@ -896,6 +1004,9 @@ HAVE_FMAL = @HAVE_FMAL@ HAVE_FMODF = @HAVE_FMODF@ HAVE_FMODL = @HAVE_FMODL@ +HAVE_FNMATCH = @HAVE_FNMATCH@ +HAVE_FNMATCH_H = @HAVE_FNMATCH_H@ +HAVE_FREELOCALE = @HAVE_FREELOCALE@ HAVE_FREXPF = @HAVE_FREXPF@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSTATAT = @HAVE_FSTATAT@ @@ -904,12 +1015,18 @@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_FUTIMENS = @HAVE_FUTIMENS@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ +HAVE_GETENTROPY = @HAVE_GETENTROPY@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ +HAVE_GETPASS = @HAVE_GETPASS@ +HAVE_GETRANDOM = @HAVE_GETRANDOM@ HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ +HAVE_GLOB = @HAVE_GLOB@ +HAVE_GLOB_H = @HAVE_GLOB_H@ +HAVE_GLOB_PATTERN_P = @HAVE_GLOB_PATTERN_P@ HAVE_GRANTPT = @HAVE_GRANTPT@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_HYPOTF = @HAVE_HYPOTF@ @@ -917,7 +1034,10 @@ HAVE_ILOGB = @HAVE_ILOGB@ HAVE_ILOGBF = @HAVE_ILOGBF@ HAVE_ILOGBL = @HAVE_ILOGBL@ +HAVE_IMAXDIV_T = @HAVE_IMAXDIV_T@ +HAVE_INITSTATE = @HAVE_INITSTATE@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ +HAVE_ISBLANK = @HAVE_ISBLANK@ HAVE_ISNAND = @HAVE_ISNAND@ HAVE_ISNANF = @HAVE_ISNANF@ HAVE_ISNANL = @HAVE_ISNANL@ @@ -937,7 +1057,6 @@ HAVE_LOGBL = @HAVE_LOGBL@ HAVE_LOGF = @HAVE_LOGF@ HAVE_LOGL = @HAVE_LOGL@ -HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@ HAVE_LSTAT = @HAVE_LSTAT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBRLEN = @HAVE_MBRLEN@ @@ -946,6 +1065,7 @@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ +HAVE_MBTOWC = @HAVE_MBTOWC@ HAVE_MEMCHR = @HAVE_MEMCHR@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MKDIRAT = @HAVE_MKDIRAT@ @@ -963,6 +1083,7 @@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ HAVE_NETINET_IN_H = @HAVE_NETINET_IN_H@ +HAVE_NEWLOCALE = @HAVE_NEWLOCALE@ HAVE_OPENAT = @HAVE_OPENAT@ HAVE_OPENDIR = @HAVE_OPENDIR@ HAVE_OS_H = @HAVE_OS_H@ @@ -987,6 +1108,7 @@ HAVE_READDIR = @HAVE_READDIR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ +HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ HAVE_REALPATH = @HAVE_REALPATH@ HAVE_REMAINDER = @HAVE_REMAINDER@ HAVE_REMAINDERF = @HAVE_REMAINDERF@ @@ -1001,6 +1123,7 @@ HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ HAVE_SETENV = @HAVE_SETENV@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ +HAVE_SETSTATE = @HAVE_SETSTATE@ HAVE_SIGACTION = @HAVE_SIGACTION@ HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@ HAVE_SIGINFO_T = @HAVE_SIGINFO_T@ @@ -1023,6 +1146,7 @@ HAVE_STRPTIME = @HAVE_STRPTIME@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRTOD = @HAVE_STRTOD@ +HAVE_STRTOLD = @HAVE_STRTOLD@ HAVE_STRTOLL = @HAVE_STRTOLL@ HAVE_STRTOULL = @HAVE_STRTOULL@ HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ @@ -1034,10 +1158,10 @@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ -HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ +HAVE_SYS_RANDOM_H = @HAVE_SYS_RANDOM_H@ HAVE_SYS_SOCKET_H = @HAVE_SYS_SOCKET_H@ HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ @@ -1048,14 +1172,15 @@ HAVE_TIMEGM = @HAVE_TIMEGM@ HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ +HAVE_TZSET = @HAVE_TZSET@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ -HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ +HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WCPCPY = @HAVE_WCPCPY@ @@ -1069,6 +1194,7 @@ HAVE_WCSCPY = @HAVE_WCSCPY@ HAVE_WCSCSPN = @HAVE_WCSCSPN@ HAVE_WCSDUP = @HAVE_WCSDUP@ +HAVE_WCSFTIME = @HAVE_WCSFTIME@ HAVE_WCSLEN = @HAVE_WCSLEN@ HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ HAVE_WCSNCAT = @HAVE_WCSNCAT@ @@ -1093,8 +1219,10 @@ HAVE_WMEMCMP = @HAVE_WMEMCMP@ HAVE_WMEMCPY = @HAVE_WMEMCPY@ HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ +HAVE_WMEMPCPY = @HAVE_WMEMPCPY@ HAVE_WMEMSET = @HAVE_WMEMSET@ HAVE_WS2TCPIP_H = @HAVE_WS2TCPIP_H@ +HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ HAVE__BOOL = @HAVE__BOOL@ HAVE__EXIT = @HAVE__EXIT@ INCLUDE_NEXT = @INCLUDE_NEXT@ @@ -1107,16 +1235,24 @@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@ INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@ +LARGEFILE_CPPFLAGS = @LARGEFILE_CPPFLAGS@ LDFLAGS = @LDFLAGS@ LIBGNU_LIBDEPS = @LIBGNU_LIBDEPS@ LIBGNU_LTLIBDEPS = @LIBGNU_LTLIBDEPS@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ -LIBPTH = @LIBPTH@ -LIBPTH_PREFIX = @LIBPTH_PREFIX@ +LIBPMULTITHREAD = @LIBPMULTITHREAD@ +LIBPTHREAD = @LIBPTHREAD@ LIBS = @LIBS@ +LIBSTDTHREAD = @LIBSTDTHREAD@ LIBTHREAD = @LIBTHREAD@ +LIB_GETLOGIN = @LIB_GETLOGIN@ +LIB_GETRANDOM = @LIB_GETRANDOM@ +LIB_HARD_LOCALE = @LIB_HARD_LOCALE@ +LIB_MBRTOWC = @LIB_MBRTOWC@ +LIB_SCHED_YIELD = @LIB_SCHED_YIELD@ +LIB_SETLOCALE_NULL = @LIB_SETLOCALE_NULL@ LIMITS_H = @LIMITS_H@ LN_S = @LN_S@ LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ @@ -1127,7 +1263,6 @@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ -LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ @@ -1135,12 +1270,16 @@ NETINET_IN_H = @NETINET_IN_H@ NEXT_ARPA_INET_H = @NEXT_ARPA_INET_H@ NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H = @NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H@ +NEXT_AS_FIRST_DIRECTIVE_CTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_CTYPE_H@ NEXT_AS_FIRST_DIRECTIVE_DIRENT_H = @NEXT_AS_FIRST_DIRECTIVE_DIRENT_H@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ +NEXT_AS_FIRST_DIRECTIVE_FNMATCH_H = @NEXT_AS_FIRST_DIRECTIVE_FNMATCH_H@ +NEXT_AS_FIRST_DIRECTIVE_GLOB_H = @NEXT_AS_FIRST_DIRECTIVE_GLOB_H@ NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ +NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H = @NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H@ NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@ @@ -1149,6 +1288,7 @@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_RANDOM_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_RANDOM_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@ @@ -1158,12 +1298,16 @@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ +NEXT_CTYPE_H = @NEXT_CTYPE_H@ NEXT_DIRENT_H = @NEXT_DIRENT_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_FCNTL_H = @NEXT_FCNTL_H@ NEXT_FLOAT_H = @NEXT_FLOAT_H@ +NEXT_FNMATCH_H = @NEXT_FNMATCH_H@ +NEXT_GLOB_H = @NEXT_GLOB_H@ NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ +NEXT_LOCALE_H = @NEXT_LOCALE_H@ NEXT_MATH_H = @NEXT_MATH_H@ NEXT_NETINET_IN_H = @NEXT_NETINET_IN_H@ NEXT_SIGNAL_H = @NEXT_SIGNAL_H@ @@ -1172,6 +1316,7 @@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STDLIB_H = @NEXT_STDLIB_H@ NEXT_STRING_H = @NEXT_STRING_H@ +NEXT_SYS_RANDOM_H = @NEXT_SYS_RANDOM_H@ NEXT_SYS_SOCKET_H = @NEXT_SYS_SOCKET_H@ NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ @@ -1197,6 +1342,11 @@ PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ RANLIB = @RANLIB@ +REPLACE_ACCESS = @REPLACE_ACCESS@ +REPLACE_ACOSF = @REPLACE_ACOSF@ +REPLACE_ASINF = @REPLACE_ASINF@ +REPLACE_ATAN2F = @REPLACE_ATAN2F@ +REPLACE_ATANF = @REPLACE_ATANF@ REPLACE_BTOWC = @REPLACE_BTOWC@ REPLACE_CALLOC = @REPLACE_CALLOC@ REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ @@ -1208,15 +1358,25 @@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_CLOSEDIR = @REPLACE_CLOSEDIR@ +REPLACE_COSF = @REPLACE_COSF@ +REPLACE_COSHF = @REPLACE_COSHF@ +REPLACE_CREAT = @REPLACE_CREAT@ +REPLACE_CTIME = @REPLACE_CTIME@ REPLACE_DIRFD = @REPLACE_DIRFD@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ +REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ REPLACE_EXP2 = @REPLACE_EXP2@ REPLACE_EXP2L = @REPLACE_EXP2L@ +REPLACE_EXPF = @REPLACE_EXPF@ +REPLACE_EXPL = @REPLACE_EXPL@ REPLACE_EXPM1 = @REPLACE_EXPM1@ REPLACE_EXPM1F = @REPLACE_EXPM1F@ +REPLACE_EXPM1L = @REPLACE_EXPM1L@ REPLACE_FABSL = @REPLACE_FABSL@ +REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ +REPLACE_FCHMODAT = @REPLACE_FCHMODAT@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FCNTL = @REPLACE_FCNTL@ @@ -1232,9 +1392,11 @@ REPLACE_FMOD = @REPLACE_FMOD@ REPLACE_FMODF = @REPLACE_FMODF@ REPLACE_FMODL = @REPLACE_FMODL@ +REPLACE_FNMATCH = @REPLACE_FNMATCH@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ +REPLACE_FREELOCALE = @REPLACE_FREELOCALE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FREXP = @REPLACE_FREXP@ REPLACE_FREXPF = @REPLACE_FREXPF@ @@ -1255,7 +1417,11 @@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ +REPLACE_GETPASS = @REPLACE_GETPASS@ +REPLACE_GETRANDOM = @REPLACE_GETRANDOM@ REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ +REPLACE_GLOB = @REPLACE_GLOB@ +REPLACE_GLOB_PATTERN_P = @REPLACE_GLOB_PATTERN_P@ REPLACE_GMTIME = @REPLACE_GMTIME@ REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ REPLACE_HYPOT = @REPLACE_HYPOT@ @@ -1263,19 +1429,24 @@ REPLACE_HYPOTL = @REPLACE_HYPOTL@ REPLACE_ILOGB = @REPLACE_ILOGB@ REPLACE_ILOGBF = @REPLACE_ILOGBF@ +REPLACE_ILOGBL = @REPLACE_ILOGBL@ REPLACE_INET_NTOP = @REPLACE_INET_NTOP@ REPLACE_INET_PTON = @REPLACE_INET_PTON@ +REPLACE_INITSTATE = @REPLACE_INITSTATE@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_ISFINITE = @REPLACE_ISFINITE@ REPLACE_ISINF = @REPLACE_ISINF@ REPLACE_ISNAN = @REPLACE_ISNAN@ REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ +REPLACE_ISWDIGIT = @REPLACE_ISWDIGIT@ +REPLACE_ISWXDIGIT = @REPLACE_ISWXDIGIT@ REPLACE_ITOLD = @REPLACE_ITOLD@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LDEXPL = @REPLACE_LDEXPL@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ +REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ REPLACE_LOG = @REPLACE_LOG@ @@ -1315,6 +1486,7 @@ REPLACE_MODFL = @REPLACE_MODFL@ REPLACE_NAN = @REPLACE_NAN@ REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ +REPLACE_NEWLOCALE = @REPLACE_NEWLOCALE@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_OPEN = @REPLACE_OPEN@ @@ -1331,6 +1503,7 @@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_QSORT_R = @REPLACE_QSORT_R@ REPLACE_RAISE = @REPLACE_RAISE@ +REPLACE_RANDOM = @REPLACE_RANDOM@ REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ REPLACE_READ = @REPLACE_READ@ REPLACE_READLINK = @REPLACE_READLINK@ @@ -1343,16 +1516,22 @@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ +REPLACE_RINTL = @REPLACE_RINTL@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_ROUND = @REPLACE_ROUND@ REPLACE_ROUNDF = @REPLACE_ROUNDF@ REPLACE_ROUNDL = @REPLACE_ROUNDL@ REPLACE_SETENV = @REPLACE_SETENV@ +REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ +REPLACE_SETSTATE = @REPLACE_SETSTATE@ REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ REPLACE_SIGNBIT_USING_GCC = @REPLACE_SIGNBIT_USING_GCC@ +REPLACE_SINF = @REPLACE_SINF@ +REPLACE_SINHF = @REPLACE_SINHF@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ +REPLACE_SQRTF = @REPLACE_SQRTF@ REPLACE_SQRTL = @REPLACE_SQRTL@ REPLACE_STAT = @REPLACE_STAT@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ @@ -1363,6 +1542,7 @@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ +REPLACE_STRFTIME = @REPLACE_STRFTIME@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ @@ -1371,17 +1551,23 @@ REPLACE_STRTOD = @REPLACE_STRTOD@ REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ +REPLACE_STRTOLD = @REPLACE_STRTOLD@ REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ +REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ +REPLACE_TANF = @REPLACE_TANF@ +REPLACE_TANHF = @REPLACE_TANHF@ REPLACE_TIMEGM = @REPLACE_TIMEGM@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ REPLACE_TRUNC = @REPLACE_TRUNC@ +REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ REPLACE_TRUNCF = @REPLACE_TRUNCF@ REPLACE_TRUNCL = @REPLACE_TRUNCL@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ +REPLACE_TZSET = @REPLACE_TZSET@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_UNSETENV = @REPLACE_UNSETENV@ @@ -1394,8 +1580,10 @@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ +REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ +REPLACE_WCSTOK = @REPLACE_WCSTOK@ REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ REPLACE_WCTOB = @REPLACE_WCTOB@ REPLACE_WCTOMB = @REPLACE_WCTOMB@ @@ -1416,18 +1604,20 @@ UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ +UNISTD_H_HAVE_SYS_RANDOM_H = @UNISTD_H_HAVE_SYS_RANDOM_H@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ VERSION = @VERSION@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ +WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ +WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ -ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ @@ -1462,7 +1652,6 @@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ -lispdir = @lispdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ @@ -1472,7 +1661,6 @@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ -runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -1485,129 +1673,143 @@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ -AUTOMAKE_OPTIONS = 1.9.6 gnits subdir-objects +AUTOMAKE_OPTIONS = 1.11 gnits subdir-objects SUBDIRS = noinst_HEADERS = noinst_LIBRARIES = libgnu.a noinst_LTLIBRARIES = +# No GNU Make output. EXTRA_DIST = m4/gnulib-cache.m4 alloca.c alloca.in.h arpa_inet.in.h \ - assure.h openat-priv.h openat-proc.c canonicalize-lgpl.c \ - chdir-long.c chdir-long.h cloexec.h close.c closedir.c \ - dirent-private.h dirent.in.h dirfd.c dirname.h dosname.h dup.c \ - dup2.c errno.in.h error.c error.h exitfail.h fchdir.c fcntl.c \ - fcntl.in.h fd-hook.h fdopendir.c filename.h filenamecat.h \ - flexmember.h float.c float.in.h itold.c fnmatch.c fnmatch.in.h \ - fnmatch_loop.c fpucw.h frexp.c frexp.c frexpl.c fstat.c \ - at-func.c fstatat.c getcwd.c getcwd-lgpl.c getdtablesize.c \ - getlogin_r.c gettimeofday.c glob-libc.h glob.c glob.in.h \ - hard-locale.h $(top_srcdir)/import/extra/config.rpath \ - inet_ntop.c intprops.h inttypes.in.h float+.h isnan.c \ - isnand-nolibm.h isnand.c float+.h isnan.c isnanl-nolibm.h \ - isnanl.c limits.in.h config.charset ref-add.sin ref-del.sin \ - lstat.c malloc.c malloca.h malloca.valgrind math.in.h \ - mbrtowc.c mbsinit.c mbsrtowcs-impl.h mbsrtowcs-state.c \ - mbsrtowcs.c memchr.c memchr.valgrind memmem.c str-two-way.h \ - mempcpy.c memrchr.c mkdir.c mkdtemp.c mkostemp.c msvc-inval.c \ - msvc-inval.h msvc-nothrow.c msvc-nothrow.h netinet_in.in.h \ - open.c openat.c openat.h dirent-private.h opendir.c pathmax.h \ - rawmemchr.c rawmemchr.valgrind dirent-private.h readdir.c \ - readlink.c realloc.c rename.c dirent-private.h rewinddir.c \ - rmdir.c same-inode.h save-cwd.h secure_getenv.c setenv.c \ - signal.in.h $(top_srcdir)/import/extra/snippet/_Noreturn.h \ - $(top_srcdir)/import/extra/snippet/arg-nonnull.h \ - $(top_srcdir)/import/extra/snippet/c++defs.h \ - $(top_srcdir)/import/extra/snippet/warn-on-use.h stat.c \ - stdalign.in.h stdbool.in.h stddef.in.h stdint.in.h stdio.in.h \ - stdlib.in.h strchrnul.c strchrnul.valgrind strdup.c streq.h \ - strerror.c strerror-override.c strerror-override.h \ - strerror_r.c string.in.h str-two-way.h strstr.c strtok_r.c \ - sys_socket.in.h sys_stat.in.h sys_time.in.h sys_types.in.h \ - sys_uio.in.h tempname.h \ - $(top_srcdir)/import/extra/config.rpath time.in.h time_r.c \ - unistd.in.h unistd--.h unistd-safer.h unsetenv.c \ + assure.h attribute.h btowc.c canonicalize-lgpl.c chdir-long.c \ + chdir-long.h cloexec.h close.c closedir.c dirent-private.h \ + count-one-bits.h ctype.in.h dirent.in.h dirfd.c dirname.h \ + dup.c dup2.c errno.in.h error.c error.h exitfail.h fchdir.c \ + fcntl.c fcntl.in.h fd-hook.h fdopendir.c filename.h \ + filenamecat.h flexmember.h float.c float.in.h itold.c \ + fnmatch.c fnmatch_loop.c fnmatch.in.h fpucw.h frexp.c frexp.c \ + frexpl.c fstat.c stat-w32.c stat-w32.h at-func.c fstatat.c \ + getcwd.c getcwd-lgpl.c getdtablesize.c getlogin_r.c \ + getrandom.c gettimeofday.c glob.c glob_internal.h \ + glob_pattern_p.c globfree.c glob-libc.h glob.in.h \ + hard-locale.h inet_ntop.c intprops.h inttypes.in.h isblank.c \ + float+.h isnan.c isnand-nolibm.h isnand.c float+.h isnan.c \ + isnanl-nolibm.h isnanl.c cdefs.h libc-config.h limits.in.h \ + localcharset.h locale.in.h localtime-buffer.c \ + localtime-buffer.h lstat.c malloc.c malloca.h math.in.h \ + lc-charset-dispatch.c lc-charset-dispatch.h \ + mbrtowc-impl-utf8.h mbrtowc-impl.h mbrtowc.c mbtowc-lock.c \ + mbtowc-lock.h windows-initguard.h mbsinit.c mbsrtowcs-impl.h \ + mbsrtowcs-state.c mbsrtowcs.c mbtowc-impl.h mbtowc.c memchr.c \ + memchr.valgrind memmem.c str-two-way.h mempcpy.c memrchr.c \ + mkdir.c mkdtemp.c mkostemp.c msvc-inval.c msvc-inval.h \ + msvc-nothrow.c msvc-nothrow.h netinet_in.in.h open.c openat.c \ + openat.h dirent-private.h opendir.c pathmax.h rawmemchr.c \ + rawmemchr.valgrind dirent-private.h readdir.c readlink.c \ + realloc.c rename.c dirent-private.h rewinddir.c rmdir.c \ + same-inode.h save-cwd.h malloc/scratch_buffer.h \ + scratch_buffer.h setenv.c setlocale-lock.c setlocale_null.h \ + windows-initguard.h signal.in.h _Noreturn.h arg-nonnull.h \ + c++defs.h warn-on-use.h stat-w32.c stat-w32.h stat.c \ + stat-time.h stdalign.in.h stdbool.in.h stddef.in.h stdint.in.h \ + stdio.in.h stdlib.in.h strchrnul.c strchrnul.valgrind strdup.c \ + streq.h strerror.c strerror-override.c strerror-override.h \ + strerror_r.c string.in.h strnlen.c str-two-way.h strstr.c \ + strtok_r.c sys_random.in.h sys_socket.in.h sys_stat.in.h \ + sys_time.in.h sys_types.in.h sys_uio.in.h tempname.h time.in.h \ + time_r.c unistd.in.h unistd--.h unistd-safer.h unsetenv.c \ $(top_srcdir)/import/extra/update-copyright verify.h \ - wchar.in.h wctype.in.h - -# The BUILT_SOURCES created by this Makefile snippet are not used via #include -# statements but through direct file reference. Therefore this snippet must be -# present in all Makefile.am that need it. This is ensured by the applicability -# 'all' defined above. - -# The BUILT_SOURCES created by this Makefile snippet are not used via #include -# statements but through direct file reference. Therefore this snippet must be -# present in all Makefile.am that need it. This is ensured by the applicability -# 'all' defined above. -BUILT_SOURCES = $(ALLOCA_H) arpa/inet.h configmake.h dirent.h \ - $(ERRNO_H) fcntl.h $(FLOAT_H) $(FNMATCH_H) $(GLOB_H) \ - inttypes.h $(LIMITS_H) math.h $(NETINET_IN_H) signal.h \ - arg-nonnull.h c++defs.h warn-on-use.h $(STDALIGN_H) \ - $(STDBOOL_H) $(STDDEF_H) $(STDINT_H) stdio.h stdlib.h string.h \ - sys/socket.h sys/stat.h sys/time.h sys/types.h sys/uio.h \ - time.h unistd.h wchar.h wctype.h -SUFFIXES = .sed .sin + wchar.in.h wctype.in.h windows-initguard.h windows-mutex.c \ + windows-mutex.h windows-once.c windows-once.h \ + windows-initguard.h windows-recmutex.c windows-recmutex.h \ + windows-initguard.h windows-rwlock.c windows-rwlock.h \ + wmemchr-impl.h wmemchr.c wmempcpy.c xalloc-oversized.h +BUILT_SOURCES = $(ALLOCA_H) arpa/inet.h ctype.h dirent.h $(ERRNO_H) \ + fcntl.h $(FLOAT_H) $(FNMATCH_H) $(GLOB_H) inttypes.h \ + $(LIMITS_H) locale.h math.h $(NETINET_IN_H) signal.h \ + $(STDALIGN_H) $(STDBOOL_H) $(STDDEF_H) $(STDINT_H) stdio.h \ + stdlib.h string.h sys/random.h sys/socket.h sys/stat.h \ + sys/time.h sys/types.h sys/uio.h time.h unistd.h wchar.h \ + wctype.h +SUFFIXES = MOSTLYCLEANFILES = core *.stackdump alloca.h alloca.h-t arpa/inet.h \ - arpa/inet.h-t dirent.h dirent.h-t errno.h errno.h-t fcntl.h \ - fcntl.h-t float.h float.h-t fnmatch.h fnmatch.h-t glob.h \ - glob.h-t inttypes.h inttypes.h-t limits.h limits.h-t math.h \ - math.h-t netinet/in.h netinet/in.h-t signal.h signal.h-t \ - arg-nonnull.h arg-nonnull.h-t c++defs.h c++defs.h-t \ - warn-on-use.h warn-on-use.h-t stdalign.h stdalign.h-t \ + arpa/inet.h-t ctype.h ctype.h-t dirent.h dirent.h-t errno.h \ + errno.h-t fcntl.h fcntl.h-t float.h float.h-t fnmatch.h \ + fnmatch.h-t glob.h glob.h-t inttypes.h inttypes.h-t limits.h \ + limits.h-t locale.h locale.h-t math.h math.h-t netinet/in.h \ + netinet/in.h-t signal.h signal.h-t stdalign.h stdalign.h-t \ stdbool.h stdbool.h-t stddef.h stddef.h-t stdint.h stdint.h-t \ stdio.h stdio.h-t stdlib.h stdlib.h-t string.h string.h-t \ - sys/socket.h sys/socket.h-t sys/stat.h sys/stat.h-t sys/time.h \ - sys/time.h-t sys/types.h sys/types.h-t sys/uio.h sys/uio.h-t \ - time.h time.h-t unistd.h unistd.h-t wchar.h wchar.h-t wctype.h \ - wctype.h-t -MOSTLYCLEANDIRS = arpa netinet sys sys sys -CLEANFILES = configmake.h configmake.h-t charset.alias ref-add.sed \ - ref-del.sed + sys/random.h sys/random.h-t sys/socket.h sys/socket.h-t \ + sys/stat.h sys/stat.h-t sys/time.h sys/time.h-t sys/types.h \ + sys/types.h-t sys/uio.h sys/uio.h-t time.h time.h-t unistd.h \ + unistd.h-t wchar.h wchar.h-t wctype.h wctype.h-t +MOSTLYCLEANDIRS = arpa netinet sys sys sys sys +CLEANFILES = DISTCLEANFILES = MAINTAINERCLEANFILES = AM_CPPFLAGS = AM_CFLAGS = -libgnu_a_SOURCES = cloexec.c dirname-lgpl.c basename-lgpl.c \ - stripslash.c exitfail.c fd-hook.c filenamecat-lgpl.c \ - getprogname.h getprogname.c gettext.h hard-locale.c \ - localcharset.h localcharset.c glthread/lock.h glthread/lock.c \ - malloca.c math.c openat-die.c save-cwd.c strnlen1.h strnlen1.c \ - sys_socket.c tempname.c glthread/threadlib.c unistd.c \ - dup-safer.c fd-safer.c pipe-safer.c wctype-h.c +libgnu_a_SOURCES = openat-priv.h openat-proc.c cloexec.c \ + count-one-bits.c dirname-lgpl.c basename-lgpl.c stripslash.c \ + exitfail.c fd-hook.c fd-safer-flag.c dup-safer-flag.c \ + filenamecat-lgpl.c getprogname.h getprogname.c gettext.h \ + hard-locale.c localcharset.c glthread/lock.h glthread/lock.c \ + malloca.c math.c minmax.h openat-die.c save-cwd.c \ + malloc/scratch_buffer_grow.c \ + malloc/scratch_buffer_grow_preserve.c \ + malloc/scratch_buffer_set_array_size.c setlocale_null.c \ + stat-time.c strnlen1.h strnlen1.c sys_socket.c tempname.c \ + glthread/threadlib.c unistd.c dup-safer.c fd-safer.c \ + pipe-safer.c wctype-h.c libgnu_a_LIBADD = $(gl_LIBOBJS) @ALLOCA@ libgnu_a_DEPENDENCIES = $(gl_LIBOBJS) @ALLOCA@ -EXTRA_libgnu_a_SOURCES = alloca.c openat-proc.c canonicalize-lgpl.c \ +EXTRA_libgnu_a_SOURCES = alloca.c btowc.c canonicalize-lgpl.c \ chdir-long.c close.c closedir.c dirfd.c dup.c dup2.c error.c \ fchdir.c fcntl.c fdopendir.c float.c itold.c fnmatch.c \ - fnmatch_loop.c frexp.c frexp.c frexpl.c fstat.c at-func.c \ - fstatat.c getcwd.c getcwd-lgpl.c getdtablesize.c getlogin_r.c \ - gettimeofday.c glob.c inet_ntop.c isnan.c isnand.c isnan.c \ - isnanl.c lstat.c malloc.c mbrtowc.c mbsinit.c \ - mbsrtowcs-state.c mbsrtowcs.c memchr.c memmem.c mempcpy.c \ - memrchr.c mkdir.c mkdtemp.c mkostemp.c msvc-inval.c \ + fnmatch_loop.c frexp.c frexp.c frexpl.c fstat.c stat-w32.c \ + at-func.c fstatat.c getcwd.c getcwd-lgpl.c getdtablesize.c \ + getlogin_r.c getrandom.c gettimeofday.c glob.c \ + glob_pattern_p.c globfree.c inet_ntop.c isblank.c isnan.c \ + isnand.c isnan.c isnanl.c localtime-buffer.c lstat.c malloc.c \ + lc-charset-dispatch.c mbrtowc.c mbtowc-lock.c mbsinit.c \ + mbsrtowcs-state.c mbsrtowcs.c mbtowc.c memchr.c memmem.c \ + mempcpy.c memrchr.c mkdir.c mkdtemp.c mkostemp.c msvc-inval.c \ msvc-nothrow.c open.c openat.c opendir.c rawmemchr.c readdir.c \ - readlink.c realloc.c rename.c rewinddir.c rmdir.c \ - secure_getenv.c setenv.c stat.c strchrnul.c strdup.c \ - strerror.c strerror-override.c strerror_r.c strstr.c \ - strtok_r.c time_r.c unsetenv.c + readlink.c realloc.c rename.c rewinddir.c rmdir.c setenv.c \ + setlocale-lock.c stat-w32.c stat.c strchrnul.c strdup.c \ + strerror.c strerror-override.c strerror_r.c strnlen.c strstr.c \ + strtok_r.c time_r.c unsetenv.c windows-mutex.c windows-once.c \ + windows-recmutex.c windows-rwlock.c wmemchr.c wmempcpy.c # Use this preprocessor expression to decide whether #include_next works. # Do not rely on a 'configure'-time test for this, since the expression # might appear in an installed header, which is used by some other compiler. HAVE_INCLUDE_NEXT = (__GNUC__ || 60000000 <= __DECC_VER) -charset_alias = $(DESTDIR)$(libdir)/charset.alias -charset_tmp = $(DESTDIR)$(libdir)/charset.tmp # Because this Makefile snippet defines a variable used by other -# gnulib Makefile snippets, it must be present in all Makefile.am that +# gnulib Makefile snippets, it must be present in all makefiles that # need it. This is ensured by the applicability 'all' defined above. -_NORETURN_H = $(top_srcdir)/import/extra/snippet/_Noreturn.h -ARG_NONNULL_H = arg-nonnull.h -CXXDEFS_H = c++defs.h -WARN_ON_USE_H = warn-on-use.h +_NORETURN_H = $(srcdir)/_Noreturn.h + +# Because this Makefile snippet defines a variable used by other +# gnulib Makefile snippets, it must be present in all makefiles that +# need it. This is ensured by the applicability 'all' defined above. +ARG_NONNULL_H = $(srcdir)/arg-nonnull.h + +# Because this Makefile snippet defines a variable used by other +# gnulib Makefile snippets, it must be present in all makefiles that +# need it. This is ensured by the applicability 'all' defined above. +CXXDEFS_H = $(srcdir)/c++defs.h + +# Because this Makefile snippet defines a variable used by other +# gnulib Makefile snippets, it must be present in all makefiles that +# need it. This is ensured by the applicability 'all' defined above. +WARN_ON_USE_H = $(srcdir)/warn-on-use.h all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: -.SUFFIXES: .sed .sin .c .o .obj +.SUFFIXES: .c .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ @@ -1648,6 +1850,18 @@ @: > glthread/$(DEPDIR)/$(am__dirstamp) glthread/lock.$(OBJEXT): glthread/$(am__dirstamp) \ glthread/$(DEPDIR)/$(am__dirstamp) +malloc/$(am__dirstamp): + @$(MKDIR_P) malloc + @: > malloc/$(am__dirstamp) +malloc/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) malloc/$(DEPDIR) + @: > malloc/$(DEPDIR)/$(am__dirstamp) +malloc/scratch_buffer_grow.$(OBJEXT): malloc/$(am__dirstamp) \ + malloc/$(DEPDIR)/$(am__dirstamp) +malloc/scratch_buffer_grow_preserve.$(OBJEXT): malloc/$(am__dirstamp) \ + malloc/$(DEPDIR)/$(am__dirstamp) +malloc/scratch_buffer_set_array_size.$(OBJEXT): \ + malloc/$(am__dirstamp) malloc/$(DEPDIR)/$(am__dirstamp) glthread/threadlib.$(OBJEXT): glthread/$(am__dirstamp) \ glthread/$(DEPDIR)/$(am__dirstamp) @@ -1670,6 +1884,7 @@ mostlyclean-compile: -rm -f *.$(OBJEXT) -rm -f glthread/*.$(OBJEXT) + -rm -f malloc/*.$(OBJEXT) distclean-compile: -rm -f *.tab.c @@ -1677,13 +1892,16 @@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/alloca.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/at-func.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/basename-lgpl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/btowc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/canonicalize-lgpl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chdir-long.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cloexec.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/close.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/closedir.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/count-one-bits.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dirfd.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dirname-lgpl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dup-safer-flag.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dup-safer.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dup.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dup2.Po@am__quote@ @@ -1692,6 +1910,7 @@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fchdir.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fcntl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fd-hook.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fd-safer-flag.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fd-safer.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fdopendir.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/filenamecat-lgpl.Po@am__quote@ @@ -1707,15 +1926,21 @@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getdtablesize.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getlogin_r.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getprogname.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getrandom.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gettimeofday.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/glob.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/glob_pattern_p.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/globfree.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hard-locale.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/inet_ntop.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/isblank.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/isnan.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/isnand.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/isnanl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/itold.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lc-charset-dispatch.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/localcharset.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/localtime-buffer.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lstat.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/malloc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/malloca.Po@am__quote@ @@ -1724,6 +1949,8 @@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbsinit.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbsrtowcs-state.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbsrtowcs.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbtowc-lock.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbtowc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/memchr.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/memmem.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mempcpy.Po@am__quote@ @@ -1747,8 +1974,11 @@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rewinddir.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rmdir.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/save-cwd.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/secure_getenv.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/setenv.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/setlocale-lock.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/setlocale_null.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stat-time.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stat-w32.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stat.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strchrnul.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strdup.Po@am__quote@ @@ -1756,6 +1986,7 @@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strerror.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strerror_r.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stripslash.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strnlen.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strnlen1.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strstr.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strtok_r.Po@am__quote@ @@ -1765,8 +1996,17 @@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unistd.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unsetenv.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wctype-h.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/windows-mutex.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/windows-once.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/windows-recmutex.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/windows-rwlock.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wmemchr.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wmempcpy.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@glthread/$(DEPDIR)/lock.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@glthread/$(DEPDIR)/threadlib.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@malloc/$(DEPDIR)/scratch_buffer_grow.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@malloc/$(DEPDIR)/scratch_buffer_grow_preserve.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@malloc/$(DEPDIR)/scratch_buffer_set_array_size.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @@ -1885,7 +2125,7 @@ check-am: all-am check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-recursive -all-am: Makefile $(LIBRARIES) $(LTLIBRARIES) $(HEADERS) all-local +all-am: Makefile $(LIBRARIES) $(LTLIBRARIES) $(HEADERS) installdirs: installdirs-recursive installdirs-am: install: $(BUILT_SOURCES) @@ -1919,6 +2159,8 @@ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -rm -f glthread/$(DEPDIR)/$(am__dirstamp) -rm -f glthread/$(am__dirstamp) + -rm -f malloc/$(DEPDIR)/$(am__dirstamp) + -rm -f malloc/$(am__dirstamp) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @@ -1932,7 +2174,7 @@ mostlyclean-am distclean: distclean-recursive - -rm -rf ./$(DEPDIR) glthread/$(DEPDIR) + -rm -rf ./$(DEPDIR) glthread/$(DEPDIR) malloc/$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags @@ -1955,7 +2197,7 @@ install-dvi-am: -install-exec-am: install-exec-local +install-exec-am: install-html: install-html-recursive @@ -1978,7 +2220,7 @@ installcheck-am: maintainer-clean: maintainer-clean-recursive - -rm -rf ./$(DEPDIR) glthread/$(DEPDIR) + -rm -rf ./$(DEPDIR) glthread/$(DEPDIR) malloc/$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic @@ -1995,25 +2237,24 @@ ps-am: -uninstall-am: uninstall-local +uninstall-am: .MAKE: $(am__recursive_targets) all check install install-am \ install-strip -.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am all-local \ - check check-am clean clean-generic clean-noinstLIBRARIES \ +.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ + check-am clean clean-generic clean-noinstLIBRARIES \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-tags dvi dvi-am \ html html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ - install-exec-am install-exec-local install-html \ - install-html-am install-info install-info-am install-man \ - install-pdf install-pdf-am install-ps install-ps-am \ - install-strip installcheck installcheck-am installdirs \ - installdirs-am maintainer-clean maintainer-clean-generic \ - mostlyclean mostlyclean-compile mostlyclean-generic \ - mostlyclean-local pdf pdf-am ps ps-am tags tags-am uninstall \ - uninstall-am uninstall-local + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-local pdf pdf-am ps ps-am tags \ + tags-am uninstall uninstall-am .PRECIOUS: Makefile @@ -2023,7 +2264,7 @@ @GL_GENERATE_ALLOCA_H_TRUE@alloca.h: alloca.in.h $(top_builddir)/config.status @GL_GENERATE_ALLOCA_H_TRUE@ $(AM_V_GEN)rm -f $@-t $@ && \ @GL_GENERATE_ALLOCA_H_TRUE@ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ -@GL_GENERATE_ALLOCA_H_TRUE@ cat $(srcdir)/alloca.in.h; \ +@GL_GENERATE_ALLOCA_H_TRUE@ sed -e 's|@''HAVE_ALLOCA_H''@|$(HAVE_ALLOCA_H)|g' < $(srcdir)/alloca.in.h; \ @GL_GENERATE_ALLOCA_H_TRUE@ } > $@-t && \ @GL_GENERATE_ALLOCA_H_TRUE@ mv -f $@-t $@ @GL_GENERATE_ALLOCA_H_FALSE@alloca.h: $(top_builddir)/config.status @@ -2044,6 +2285,7 @@ -e 's|@''HAVE_ARPA_INET_H''@|$(HAVE_ARPA_INET_H)|g' \ -e 's/@''GNULIB_INET_NTOP''@/$(GNULIB_INET_NTOP)/g' \ -e 's/@''GNULIB_INET_PTON''@/$(GNULIB_INET_PTON)/g' \ + -e 's|@''HAVE_WS2TCPIP_H''@|$(HAVE_WS2TCPIP_H)|g' \ -e 's|@''HAVE_DECL_INET_NTOP''@|$(HAVE_DECL_INET_NTOP)|g' \ -e 's|@''HAVE_DECL_INET_PTON''@|$(HAVE_DECL_INET_PTON)|g' \ -e 's|@''REPLACE_INET_NTOP''@|$(REPLACE_INET_NTOP)|g' \ @@ -2055,43 +2297,23 @@ } > $@-t && \ mv $@-t $@ -# Listed in the same order as the GNU makefile conventions, and -# provided by autoconf 2.59c+ or 2.70. -# The Automake-defined pkg* macros are appended, in the order -# listed in the Automake 1.10a+ documentation. -configmake.h: Makefile - $(AM_V_GEN)rm -f $@-t && \ +# We need the following in order to create <ctype.h> when the system +# doesn't have one that works with the given compiler. +ctype.h: ctype.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ - echo '#define PREFIX "$(prefix)"'; \ - echo '#define EXEC_PREFIX "$(exec_prefix)"'; \ - echo '#define BINDIR "$(bindir)"'; \ - echo '#define SBINDIR "$(sbindir)"'; \ - echo '#define LIBEXECDIR "$(libexecdir)"'; \ - echo '#define DATAROOTDIR "$(datarootdir)"'; \ - echo '#define DATADIR "$(datadir)"'; \ - echo '#define SYSCONFDIR "$(sysconfdir)"'; \ - echo '#define SHAREDSTATEDIR "$(sharedstatedir)"'; \ - echo '#define LOCALSTATEDIR "$(localstatedir)"'; \ - echo '#define RUNSTATEDIR "$(runstatedir)"'; \ - echo '#define INCLUDEDIR "$(includedir)"'; \ - echo '#define OLDINCLUDEDIR "$(oldincludedir)"'; \ - echo '#define DOCDIR "$(docdir)"'; \ - echo '#define INFODIR "$(infodir)"'; \ - echo '#define HTMLDIR "$(htmldir)"'; \ - echo '#define DVIDIR "$(dvidir)"'; \ - echo '#define PDFDIR "$(pdfdir)"'; \ - echo '#define PSDIR "$(psdir)"'; \ - echo '#define LIBDIR "$(libdir)"'; \ - echo '#define LISPDIR "$(lispdir)"'; \ - echo '#define LOCALEDIR "$(localedir)"'; \ - echo '#define MANDIR "$(mandir)"'; \ - echo '#define MANEXT "$(manext)"'; \ - echo '#define PKGDATADIR "$(pkgdatadir)"'; \ - echo '#define PKGINCLUDEDIR "$(pkgincludedir)"'; \ - echo '#define PKGLIBDIR "$(pkglibdir)"'; \ - echo '#define PKGLIBEXECDIR "$(pkglibexecdir)"'; \ - } | sed '/""/d' > $@-t && \ - mv -f $@-t $@ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_CTYPE_H''@|$(NEXT_CTYPE_H)|g' \ + -e 's/@''GNULIB_ISBLANK''@/$(GNULIB_ISBLANK)/g' \ + -e 's/@''HAVE_ISBLANK''@/$(HAVE_ISBLANK)/g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ + < $(srcdir)/ctype.in.h; \ + } > $@-t && \ + mv $@-t $@ # We need the following in order to create <dirent.h> when the system # doesn't have one that works with the given compiler. @@ -2164,12 +2386,14 @@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_FCNTL_H''@|$(NEXT_FCNTL_H)|g' \ + -e 's/@''GNULIB_CREAT''@/$(GNULIB_CREAT)/g' \ -e 's/@''GNULIB_FCNTL''@/$(GNULIB_FCNTL)/g' \ -e 's/@''GNULIB_NONBLOCKING''@/$(GNULIB_NONBLOCKING)/g' \ -e 's/@''GNULIB_OPEN''@/$(GNULIB_OPEN)/g' \ -e 's/@''GNULIB_OPENAT''@/$(GNULIB_OPENAT)/g' \ -e 's|@''HAVE_FCNTL''@|$(HAVE_FCNTL)|g' \ -e 's|@''HAVE_OPENAT''@|$(HAVE_OPENAT)|g' \ + -e 's|@''REPLACE_CREAT''@|$(REPLACE_CREAT)|g' \ -e 's|@''REPLACE_FCNTL''@|$(REPLACE_FCNTL)|g' \ -e 's|@''REPLACE_OPEN''@|$(REPLACE_OPEN)|g' \ -e 's|@''REPLACE_OPENAT''@|$(REPLACE_OPENAT)|g' \ @@ -2197,30 +2421,49 @@ @GL_GENERATE_FLOAT_H_FALSE@float.h: $(top_builddir)/config.status @GL_GENERATE_FLOAT_H_FALSE@ rm -f $@ -# We need the following in order to create <fnmatch.h> when the system -# doesn't have one that supports the required API. -@GL_GENERATE_FNMATCH_H_TRUE@fnmatch.h: fnmatch.in.h $(top_builddir)/config.status $(ARG_NONNULL_H) +# We need the following in order to create <fnmatch.h>. +@GL_GENERATE_FNMATCH_H_TRUE@fnmatch.h: fnmatch.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) @GL_GENERATE_FNMATCH_H_TRUE@ $(AM_V_GEN)rm -f $@-t $@ && \ -@GL_GENERATE_FNMATCH_H_TRUE@ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ -@GL_GENERATE_FNMATCH_H_TRUE@ sed -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ +@GL_GENERATE_FNMATCH_H_TRUE@ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ +@GL_GENERATE_FNMATCH_H_TRUE@ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ +@GL_GENERATE_FNMATCH_H_TRUE@ -e 's|@''HAVE_FNMATCH_H''@|$(HAVE_FNMATCH_H)|g' \ +@GL_GENERATE_FNMATCH_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ +@GL_GENERATE_FNMATCH_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ +@GL_GENERATE_FNMATCH_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ +@GL_GENERATE_FNMATCH_H_TRUE@ -e 's|@''NEXT_FNMATCH_H''@|$(NEXT_FNMATCH_H)|g' \ +@GL_GENERATE_FNMATCH_H_TRUE@ -e 's/@''GNULIB_FNMATCH''@/$(GNULIB_FNMATCH)/g' \ +@GL_GENERATE_FNMATCH_H_TRUE@ -e 's|@''HAVE_FNMATCH''@|$(HAVE_FNMATCH)|g' \ +@GL_GENERATE_FNMATCH_H_TRUE@ -e 's|@''REPLACE_FNMATCH''@|$(REPLACE_FNMATCH)|g' \ +@GL_GENERATE_FNMATCH_H_TRUE@ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ +@GL_GENERATE_FNMATCH_H_TRUE@ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ +@GL_GENERATE_FNMATCH_H_TRUE@ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ @GL_GENERATE_FNMATCH_H_TRUE@ < $(srcdir)/fnmatch.in.h; \ @GL_GENERATE_FNMATCH_H_TRUE@ } > $@-t && \ -@GL_GENERATE_FNMATCH_H_TRUE@ mv -f $@-t $@ +@GL_GENERATE_FNMATCH_H_TRUE@ mv $@-t $@ @GL_GENERATE_FNMATCH_H_FALSE@fnmatch.h: $(top_builddir)/config.status @GL_GENERATE_FNMATCH_H_FALSE@ rm -f $@ -# We need the following in order to create <glob.h> when the system -# doesn't have one that works with the given compiler. +# We need the following in order to create <glob.h>. @GL_GENERATE_GLOB_H_TRUE@glob.h: glob.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) @GL_GENERATE_GLOB_H_TRUE@ $(AM_V_GEN)rm -f $@-t $@ && \ -@GL_GENERATE_GLOB_H_TRUE@ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ -@GL_GENERATE_GLOB_H_TRUE@ sed -e 's|@''HAVE_SYS_CDEFS_H''@|$(HAVE_SYS_CDEFS_H)|g' \ +@GL_GENERATE_GLOB_H_TRUE@ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ +@GL_GENERATE_GLOB_H_TRUE@ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ +@GL_GENERATE_GLOB_H_TRUE@ -e 's|@''HAVE_GLOB_H''@|$(HAVE_GLOB_H)|g' \ +@GL_GENERATE_GLOB_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ +@GL_GENERATE_GLOB_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ +@GL_GENERATE_GLOB_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ +@GL_GENERATE_GLOB_H_TRUE@ -e 's|@''NEXT_GLOB_H''@|$(NEXT_GLOB_H)|g' \ +@GL_GENERATE_GLOB_H_TRUE@ -e 's/@''GNULIB_GLOB''@/$(GNULIB_GLOB)/g' \ +@GL_GENERATE_GLOB_H_TRUE@ -e 's|@''HAVE_GLOB''@|$(HAVE_GLOB)|g' \ +@GL_GENERATE_GLOB_H_TRUE@ -e 's|@''HAVE_GLOB_PATTERN_P''@|$(HAVE_GLOB_PATTERN_P)|g' \ +@GL_GENERATE_GLOB_H_TRUE@ -e 's|@''REPLACE_GLOB''@|$(REPLACE_GLOB)|g' \ +@GL_GENERATE_GLOB_H_TRUE@ -e 's|@''REPLACE_GLOB_PATTERN_P''@|$(REPLACE_GLOB_PATTERN_P)|g' \ @GL_GENERATE_GLOB_H_TRUE@ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ @GL_GENERATE_GLOB_H_TRUE@ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ @GL_GENERATE_GLOB_H_TRUE@ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ @GL_GENERATE_GLOB_H_TRUE@ < $(srcdir)/glob.in.h; \ @GL_GENERATE_GLOB_H_TRUE@ } > $@-t && \ -@GL_GENERATE_GLOB_H_TRUE@ mv -f $@-t $@ +@GL_GENERATE_GLOB_H_TRUE@ mv $@-t $@ @GL_GENERATE_GLOB_H_FALSE@glob.h: $(top_builddir)/config.status @GL_GENERATE_GLOB_H_FALSE@ rm -f $@ @@ -2236,8 +2479,6 @@ -e 's|@''NEXT_INTTYPES_H''@|$(NEXT_INTTYPES_H)|g' \ -e 's/@''PRI_MACROS_BROKEN''@/$(PRI_MACROS_BROKEN)/g' \ -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \ - -e 's/@''HAVE_LONG_LONG_INT''@/$(HAVE_LONG_LONG_INT)/g' \ - -e 's/@''HAVE_UNSIGNED_LONG_LONG_INT''@/$(HAVE_UNSIGNED_LONG_LONG_INT)/g' \ -e 's/@''PRIPTR_PREFIX''@/$(PRIPTR_PREFIX)/g' \ -e 's/@''GNULIB_IMAXABS''@/$(GNULIB_IMAXABS)/g' \ -e 's/@''GNULIB_IMAXDIV''@/$(GNULIB_IMAXDIV)/g' \ @@ -2247,6 +2488,7 @@ -e 's/@''HAVE_DECL_IMAXDIV''@/$(HAVE_DECL_IMAXDIV)/g' \ -e 's/@''HAVE_DECL_STRTOIMAX''@/$(HAVE_DECL_STRTOIMAX)/g' \ -e 's/@''HAVE_DECL_STRTOUMAX''@/$(HAVE_DECL_STRTOUMAX)/g' \ + -e 's/@''HAVE_IMAXDIV_T''@/$(HAVE_IMAXDIV_T)/g' \ -e 's/@''REPLACE_STRTOIMAX''@/$(REPLACE_STRTOIMAX)/g' \ -e 's/@''REPLACE_STRTOUMAX''@/$(REPLACE_STRTOUMAX)/g' \ -e 's/@''INT32_MAX_LT_INTMAX_MAX''@/$(INT32_MAX_LT_INTMAX_MAX)/g' \ @@ -2276,64 +2518,37 @@ @GL_GENERATE_LIMITS_H_FALSE@limits.h: $(top_builddir)/config.status @GL_GENERATE_LIMITS_H_FALSE@ rm -f $@ -# We need the following in order to install a simple file in $(libdir) -# which is shared with other installed packages. We use a list of referencing -# packages so that "make uninstall" will remove the file if and only if it -# is not used by another installed package. -# On systems with glibc-2.1 or newer, the file is redundant, therefore we -# avoid installing it. - -all-local: charset.alias ref-add.sed ref-del.sed -install-exec-local: install-exec-localcharset -install-exec-localcharset: all-local - if test $(GLIBC21) = no; then \ - case '$(host_os)' in \ - darwin[56]*) \ - need_charset_alias=true ;; \ - darwin* | cygwin* | mingw* | pw32* | cegcc*) \ - need_charset_alias=false ;; \ - *) \ - need_charset_alias=true ;; \ - esac ; \ - else \ - need_charset_alias=false ; \ - fi ; \ - if $$need_charset_alias; then \ - $(mkinstalldirs) $(DESTDIR)$(libdir) ; \ - fi ; \ - if test -f $(charset_alias); then \ - sed -f ref-add.sed $(charset_alias) > $(charset_tmp) ; \ - $(INSTALL_DATA) $(charset_tmp) $(charset_alias) ; \ - rm -f $(charset_tmp) ; \ - else \ - if $$need_charset_alias; then \ - sed -f ref-add.sed charset.alias > $(charset_tmp) ; \ - $(INSTALL_DATA) $(charset_tmp) $(charset_alias) ; \ - rm -f $(charset_tmp) ; \ - fi ; \ - fi - -uninstall-local: uninstall-localcharset -uninstall-localcharset: all-local - if test -f $(charset_alias); then \ - sed -f ref-del.sed $(charset_alias) > $(charset_tmp); \ - if grep '^# Packages using this file: $$' $(charset_tmp) \ - > /dev/null; then \ - rm -f $(charset_alias); \ - else \ - $(INSTALL_DATA) $(charset_tmp) $(charset_alias); \ - fi; \ - rm -f $(charset_tmp); \ - fi - -charset.alias: config.charset - $(AM_V_GEN)rm -f t-$@ $@ && \ - $(SHELL) $(srcdir)/config.charset '$(host)' > t-$@ && \ - mv t-$@ $@ -.sin.sed: - $(AM_V_GEN)rm -f t-$@ $@ && \ - sed -e '/^#/d' -e 's/@''PACKAGE''@/$(PACKAGE)/g' $< > t-$@ && \ - mv t-$@ $@ +# We need the following in order to create <locale.h> when the system +# doesn't have one that provides all definitions. +locale.h: locale.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_LOCALE_H''@|$(NEXT_LOCALE_H)|g' \ + -e 's/@''GNULIB_LOCALECONV''@/$(GNULIB_LOCALECONV)/g' \ + -e 's/@''GNULIB_SETLOCALE''@/$(GNULIB_SETLOCALE)/g' \ + -e 's/@''GNULIB_SETLOCALE_NULL''@/$(GNULIB_SETLOCALE_NULL)/g' \ + -e 's/@''GNULIB_DUPLOCALE''@/$(GNULIB_DUPLOCALE)/g' \ + -e 's/@''GNULIB_LOCALENAME''@/$(GNULIB_LOCALENAME)/g' \ + -e 's|@''HAVE_NEWLOCALE''@|$(HAVE_NEWLOCALE)|g' \ + -e 's|@''HAVE_DUPLOCALE''@|$(HAVE_DUPLOCALE)|g' \ + -e 's|@''HAVE_FREELOCALE''@|$(HAVE_FREELOCALE)|g' \ + -e 's|@''HAVE_XLOCALE_H''@|$(HAVE_XLOCALE_H)|g' \ + -e 's|@''REPLACE_LOCALECONV''@|$(REPLACE_LOCALECONV)|g' \ + -e 's|@''REPLACE_SETLOCALE''@|$(REPLACE_SETLOCALE)|g' \ + -e 's|@''REPLACE_NEWLOCALE''@|$(REPLACE_NEWLOCALE)|g' \ + -e 's|@''REPLACE_DUPLOCALE''@|$(REPLACE_DUPLOCALE)|g' \ + -e 's|@''REPLACE_FREELOCALE''@|$(REPLACE_FREELOCALE)|g' \ + -e 's|@''REPLACE_STRUCT_LCONV''@|$(REPLACE_STRUCT_LCONV)|g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ + < $(srcdir)/locale.in.h; \ + } > $@-t && \ + mv $@-t $@ # We need the following in order to create <math.h> when the system # doesn't have one that works with the given compiler. @@ -2539,13 +2754,22 @@ -e 's|@''HAVE_DECL_TRUNCF''@|$(HAVE_DECL_TRUNCF)|g' \ -e 's|@''HAVE_DECL_TRUNCL''@|$(HAVE_DECL_TRUNCL)|g' \ | \ - sed -e 's|@''REPLACE_CBRTF''@|$(REPLACE_CBRTF)|g' \ + sed -e 's|@''REPLACE_ACOSF''@|$(REPLACE_ACOSF)|g' \ + -e 's|@''REPLACE_ASINF''@|$(REPLACE_ASINF)|g' \ + -e 's|@''REPLACE_ATANF''@|$(REPLACE_ATANF)|g' \ + -e 's|@''REPLACE_ATAN2F''@|$(REPLACE_ATAN2F)|g' \ + -e 's|@''REPLACE_CBRTF''@|$(REPLACE_CBRTF)|g' \ -e 's|@''REPLACE_CBRTL''@|$(REPLACE_CBRTL)|g' \ -e 's|@''REPLACE_CEIL''@|$(REPLACE_CEIL)|g' \ -e 's|@''REPLACE_CEILF''@|$(REPLACE_CEILF)|g' \ -e 's|@''REPLACE_CEILL''@|$(REPLACE_CEILL)|g' \ + -e 's|@''REPLACE_COSF''@|$(REPLACE_COSF)|g' \ + -e 's|@''REPLACE_COSHF''@|$(REPLACE_COSHF)|g' \ + -e 's|@''REPLACE_EXPF''@|$(REPLACE_EXPF)|g' \ + -e 's|@''REPLACE_EXPL''@|$(REPLACE_EXPL)|g' \ -e 's|@''REPLACE_EXPM1''@|$(REPLACE_EXPM1)|g' \ -e 's|@''REPLACE_EXPM1F''@|$(REPLACE_EXPM1F)|g' \ + -e 's|@''REPLACE_EXPM1L''@|$(REPLACE_EXPM1L)|g' \ -e 's|@''REPLACE_EXP2''@|$(REPLACE_EXP2)|g' \ -e 's|@''REPLACE_EXP2L''@|$(REPLACE_EXP2L)|g' \ -e 's|@''REPLACE_FABSL''@|$(REPLACE_FABSL)|g' \ @@ -2567,6 +2791,7 @@ -e 's|@''REPLACE_HYPOTL''@|$(REPLACE_HYPOTL)|g' \ -e 's|@''REPLACE_ILOGB''@|$(REPLACE_ILOGB)|g' \ -e 's|@''REPLACE_ILOGBF''@|$(REPLACE_ILOGBF)|g' \ + -e 's|@''REPLACE_ILOGBL''@|$(REPLACE_ILOGBL)|g' \ -e 's|@''REPLACE_ISFINITE''@|$(REPLACE_ISFINITE)|g' \ -e 's|@''REPLACE_ISINF''@|$(REPLACE_ISINF)|g' \ -e 's|@''REPLACE_ISNAN''@|$(REPLACE_ISNAN)|g' \ @@ -2594,12 +2819,18 @@ -e 's|@''REPLACE_REMAINDER''@|$(REPLACE_REMAINDER)|g' \ -e 's|@''REPLACE_REMAINDERF''@|$(REPLACE_REMAINDERF)|g' \ -e 's|@''REPLACE_REMAINDERL''@|$(REPLACE_REMAINDERL)|g' \ + -e 's|@''REPLACE_RINTL''@|$(REPLACE_RINTL)|g' \ -e 's|@''REPLACE_ROUND''@|$(REPLACE_ROUND)|g' \ -e 's|@''REPLACE_ROUNDF''@|$(REPLACE_ROUNDF)|g' \ -e 's|@''REPLACE_ROUNDL''@|$(REPLACE_ROUNDL)|g' \ -e 's|@''REPLACE_SIGNBIT''@|$(REPLACE_SIGNBIT)|g' \ -e 's|@''REPLACE_SIGNBIT_USING_GCC''@|$(REPLACE_SIGNBIT_USING_GCC)|g' \ + -e 's|@''REPLACE_SINF''@|$(REPLACE_SINF)|g' \ + -e 's|@''REPLACE_SINHF''@|$(REPLACE_SINHF)|g' \ + -e 's|@''REPLACE_SQRTF''@|$(REPLACE_SQRTF)|g' \ -e 's|@''REPLACE_SQRTL''@|$(REPLACE_SQRTL)|g' \ + -e 's|@''REPLACE_TANF''@|$(REPLACE_TANF)|g' \ + -e 's|@''REPLACE_TANHF''@|$(REPLACE_TANHF)|g' \ -e 's|@''REPLACE_TRUNC''@|$(REPLACE_TRUNC)|g' \ -e 's|@''REPLACE_TRUNCF''@|$(REPLACE_TRUNCF)|g' \ -e 's|@''REPLACE_TRUNCL''@|$(REPLACE_TRUNCL)|g' \ @@ -2637,8 +2868,8 @@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SIGNAL_H''@|$(NEXT_SIGNAL_H)|g' \ - -e 's|@''GNULIB_PTHREAD_SIGMASK''@|$(GNULIB_PTHREAD_SIGMASK)|g' \ - -e 's|@''GNULIB_RAISE''@|$(GNULIB_RAISE)|g' \ + -e 's/@''GNULIB_PTHREAD_SIGMASK''@/$(GNULIB_PTHREAD_SIGMASK)/g' \ + -e 's/@''GNULIB_RAISE''@/$(GNULIB_RAISE)/g' \ -e 's/@''GNULIB_SIGNAL_H_SIGPIPE''@/$(GNULIB_SIGNAL_H_SIGPIPE)/g' \ -e 's/@''GNULIB_SIGPROCMASK''@/$(GNULIB_SIGPROCMASK)/g' \ -e 's/@''GNULIB_SIGACTION''@/$(GNULIB_SIGACTION)/g' \ @@ -2659,32 +2890,6 @@ < $(srcdir)/signal.in.h; \ } > $@-t && \ mv $@-t $@ -# The arg-nonnull.h that gets inserted into generated .h files is the same as -# build-aux/snippet/arg-nonnull.h, except that it has the copyright header cut -# off. -arg-nonnull.h: $(top_srcdir)/import/extra/snippet/arg-nonnull.h - $(AM_V_GEN)rm -f $@-t $@ && \ - sed -n -e '/GL_ARG_NONNULL/,$$p' \ - < $(top_srcdir)/import/extra/snippet/arg-nonnull.h \ - > $@-t && \ - mv $@-t $@ -# The c++defs.h that gets inserted into generated .h files is the same as -# build-aux/snippet/c++defs.h, except that it has the copyright header cut off. -c++defs.h: $(top_srcdir)/import/extra/snippet/c++defs.h - $(AM_V_GEN)rm -f $@-t $@ && \ - sed -n -e '/_GL_CXXDEFS/,$$p' \ - < $(top_srcdir)/import/extra/snippet/c++defs.h \ - > $@-t && \ - mv $@-t $@ -# The warn-on-use.h that gets inserted into generated .h files is the same as -# build-aux/snippet/warn-on-use.h, except that it has the copyright header cut -# off. -warn-on-use.h: $(top_srcdir)/import/extra/snippet/warn-on-use.h - $(AM_V_GEN)rm -f $@-t $@ && \ - sed -n -e '/^.ifndef/,$$p' \ - < $(top_srcdir)/import/extra/snippet/warn-on-use.h \ - > $@-t && \ - mv $@-t $@ # We need the following in order to create <stdalign.h> when the system # doesn't have one that works. @@ -2744,8 +2949,6 @@ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_SYS_INTTYPES_H''@/$(HAVE_SYS_INTTYPES_H)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_SYS_BITYPES_H''@/$(HAVE_SYS_BITYPES_H)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_WCHAR_H''@/$(HAVE_WCHAR_H)/g' \ -@GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_LONG_LONG_INT''@/$(HAVE_LONG_LONG_INT)/g' \ -@GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_UNSIGNED_LONG_LONG_INT''@/$(HAVE_UNSIGNED_LONG_LONG_INT)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''BITSIZEOF_PTRDIFF_T''@/$(BITSIZEOF_PTRDIFF_T)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''PTRDIFF_T_SUFFIX''@/$(PTRDIFF_T_SUFFIX)/g' \ @@ -2760,6 +2963,7 @@ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''BITSIZEOF_WINT_T''@/$(BITSIZEOF_WINT_T)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_SIGNED_WINT_T''@/$(HAVE_SIGNED_WINT_T)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''WINT_T_SUFFIX''@/$(WINT_T_SUFFIX)/g' \ +@GL_GENERATE_STDINT_H_TRUE@ -e 's/@''GNULIB_OVERRIDES_WINT_T''@/$(GNULIB_OVERRIDES_WINT_T)/g' \ @GL_GENERATE_STDINT_H_TRUE@ < $(srcdir)/stdint.in.h; \ @GL_GENERATE_STDINT_H_TRUE@ } > $@-t && \ @GL_GENERATE_STDINT_H_TRUE@ mv $@-t $@ @@ -2918,11 +3122,13 @@ -e 's/@''GNULIB_RANDOM''@/$(GNULIB_RANDOM)/g' \ -e 's/@''GNULIB_RANDOM_R''@/$(GNULIB_RANDOM_R)/g' \ -e 's/@''GNULIB_REALLOC_POSIX''@/$(GNULIB_REALLOC_POSIX)/g' \ + -e 's/@''GNULIB_REALLOCARRAY''@/$(GNULIB_REALLOCARRAY)/g' \ -e 's/@''GNULIB_REALPATH''@/$(GNULIB_REALPATH)/g' \ -e 's/@''GNULIB_RPMATCH''@/$(GNULIB_RPMATCH)/g' \ -e 's/@''GNULIB_SECURE_GETENV''@/$(GNULIB_SECURE_GETENV)/g' \ -e 's/@''GNULIB_SETENV''@/$(GNULIB_SETENV)/g' \ -e 's/@''GNULIB_STRTOD''@/$(GNULIB_STRTOD)/g' \ + -e 's/@''GNULIB_STRTOLD''@/$(GNULIB_STRTOLD)/g' \ -e 's/@''GNULIB_STRTOLL''@/$(GNULIB_STRTOLL)/g' \ -e 's/@''GNULIB_STRTOULL''@/$(GNULIB_STRTOULL)/g' \ -e 's/@''GNULIB_SYSTEM_POSIX''@/$(GNULIB_SYSTEM_POSIX)/g' \ @@ -2936,6 +3142,9 @@ -e 's|@''HAVE_DECL_GETLOADAVG''@|$(HAVE_DECL_GETLOADAVG)|g' \ -e 's|@''HAVE_GETSUBOPT''@|$(HAVE_GETSUBOPT)|g' \ -e 's|@''HAVE_GRANTPT''@|$(HAVE_GRANTPT)|g' \ + -e 's|@''HAVE_INITSTATE''@|$(HAVE_INITSTATE)|g' \ + -e 's|@''HAVE_DECL_INITSTATE''@|$(HAVE_DECL_INITSTATE)|g' \ + -e 's|@''HAVE_MBTOWC''@|$(HAVE_MBTOWC)|g' \ -e 's|@''HAVE_MKDTEMP''@|$(HAVE_MKDTEMP)|g' \ -e 's|@''HAVE_MKOSTEMP''@|$(HAVE_MKOSTEMP)|g' \ -e 's|@''HAVE_MKOSTEMPS''@|$(HAVE_MKOSTEMPS)|g' \ @@ -2948,11 +3157,15 @@ -e 's|@''HAVE_RANDOM''@|$(HAVE_RANDOM)|g' \ -e 's|@''HAVE_RANDOM_H''@|$(HAVE_RANDOM_H)|g' \ -e 's|@''HAVE_RANDOM_R''@|$(HAVE_RANDOM_R)|g' \ + -e 's|@''HAVE_REALLOCARRAY''@|$(HAVE_REALLOCARRAY)|g' \ -e 's|@''HAVE_REALPATH''@|$(HAVE_REALPATH)|g' \ -e 's|@''HAVE_RPMATCH''@|$(HAVE_RPMATCH)|g' \ -e 's|@''HAVE_SECURE_GETENV''@|$(HAVE_SECURE_GETENV)|g' \ -e 's|@''HAVE_DECL_SETENV''@|$(HAVE_DECL_SETENV)|g' \ + -e 's|@''HAVE_SETSTATE''@|$(HAVE_SETSTATE)|g' \ + -e 's|@''HAVE_DECL_SETSTATE''@|$(HAVE_DECL_SETSTATE)|g' \ -e 's|@''HAVE_STRTOD''@|$(HAVE_STRTOD)|g' \ + -e 's|@''HAVE_STRTOLD''@|$(HAVE_STRTOLD)|g' \ -e 's|@''HAVE_STRTOLL''@|$(HAVE_STRTOLL)|g' \ -e 's|@''HAVE_STRTOULL''@|$(HAVE_STRTOULL)|g' \ -e 's|@''HAVE_STRUCT_RANDOM_DATA''@|$(HAVE_STRUCT_RANDOM_DATA)|g' \ @@ -2961,6 +3174,7 @@ -e 's|@''HAVE_DECL_UNSETENV''@|$(HAVE_DECL_UNSETENV)|g' \ -e 's|@''REPLACE_CALLOC''@|$(REPLACE_CALLOC)|g' \ -e 's|@''REPLACE_CANONICALIZE_FILE_NAME''@|$(REPLACE_CANONICALIZE_FILE_NAME)|g' \ + -e 's|@''REPLACE_INITSTATE''@|$(REPLACE_INITSTATE)|g' \ -e 's|@''REPLACE_MALLOC''@|$(REPLACE_MALLOC)|g' \ -e 's|@''REPLACE_MBTOWC''@|$(REPLACE_MBTOWC)|g' \ -e 's|@''REPLACE_MKSTEMP''@|$(REPLACE_MKSTEMP)|g' \ @@ -2968,11 +3182,14 @@ -e 's|@''REPLACE_PTSNAME_R''@|$(REPLACE_PTSNAME_R)|g' \ -e 's|@''REPLACE_PUTENV''@|$(REPLACE_PUTENV)|g' \ -e 's|@''REPLACE_QSORT_R''@|$(REPLACE_QSORT_R)|g' \ + -e 's|@''REPLACE_RANDOM''@|$(REPLACE_RANDOM)|g' \ -e 's|@''REPLACE_RANDOM_R''@|$(REPLACE_RANDOM_R)|g' \ -e 's|@''REPLACE_REALLOC''@|$(REPLACE_REALLOC)|g' \ -e 's|@''REPLACE_REALPATH''@|$(REPLACE_REALPATH)|g' \ -e 's|@''REPLACE_SETENV''@|$(REPLACE_SETENV)|g' \ + -e 's|@''REPLACE_SETSTATE''@|$(REPLACE_SETSTATE)|g' \ -e 's|@''REPLACE_STRTOD''@|$(REPLACE_STRTOD)|g' \ + -e 's|@''REPLACE_STRTOLD''@|$(REPLACE_STRTOLD)|g' \ -e 's|@''REPLACE_UNSETENV''@|$(REPLACE_UNSETENV)|g' \ -e 's|@''REPLACE_WCTOMB''@|$(REPLACE_WCTOMB)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ @@ -2992,6 +3209,7 @@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STRING_H''@|$(NEXT_STRING_H)|g' \ + -e 's/@''GNULIB_EXPLICIT_BZERO''@/$(GNULIB_EXPLICIT_BZERO)/g' \ -e 's/@''GNULIB_FFSL''@/$(GNULIB_FFSL)/g' \ -e 's/@''GNULIB_FFSLL''@/$(GNULIB_FFSLL)/g' \ -e 's/@''GNULIB_MBSLEN''@/$(GNULIB_MBSLEN)/g' \ @@ -3030,7 +3248,8 @@ -e 's/@''GNULIB_STRSIGNAL''@/$(GNULIB_STRSIGNAL)/g' \ -e 's/@''GNULIB_STRVERSCMP''@/$(GNULIB_STRVERSCMP)/g' \ < $(srcdir)/string.in.h | \ - sed -e 's|@''HAVE_FFSL''@|$(HAVE_FFSL)|g' \ + sed -e 's|@''HAVE_EXPLICIT_BZERO''@|$(HAVE_EXPLICIT_BZERO)|g' \ + -e 's|@''HAVE_FFSL''@|$(HAVE_FFSL)|g' \ -e 's|@''HAVE_FFSLL''@|$(HAVE_FFSLL)|g' \ -e 's|@''HAVE_MBSLEN''@|$(HAVE_MBSLEN)|g' \ -e 's|@''HAVE_MEMCHR''@|$(HAVE_MEMCHR)|g' \ @@ -3051,20 +3270,20 @@ -e 's|@''HAVE_DECL_STRERROR_R''@|$(HAVE_DECL_STRERROR_R)|g' \ -e 's|@''HAVE_DECL_STRSIGNAL''@|$(HAVE_DECL_STRSIGNAL)|g' \ -e 's|@''HAVE_STRVERSCMP''@|$(HAVE_STRVERSCMP)|g' \ - -e 's|@''REPLACE_STPNCPY''@|$(REPLACE_STPNCPY)|g' \ -e 's|@''REPLACE_MEMCHR''@|$(REPLACE_MEMCHR)|g' \ -e 's|@''REPLACE_MEMMEM''@|$(REPLACE_MEMMEM)|g' \ - -e 's|@''REPLACE_STRCASESTR''@|$(REPLACE_STRCASESTR)|g' \ + -e 's|@''REPLACE_STPNCPY''@|$(REPLACE_STPNCPY)|g' \ -e 's|@''REPLACE_STRCHRNUL''@|$(REPLACE_STRCHRNUL)|g' \ -e 's|@''REPLACE_STRDUP''@|$(REPLACE_STRDUP)|g' \ - -e 's|@''REPLACE_STRSTR''@|$(REPLACE_STRSTR)|g' \ - -e 's|@''REPLACE_STRERROR''@|$(REPLACE_STRERROR)|g' \ - -e 's|@''REPLACE_STRERROR_R''@|$(REPLACE_STRERROR_R)|g' \ -e 's|@''REPLACE_STRNCAT''@|$(REPLACE_STRNCAT)|g' \ -e 's|@''REPLACE_STRNDUP''@|$(REPLACE_STRNDUP)|g' \ -e 's|@''REPLACE_STRNLEN''@|$(REPLACE_STRNLEN)|g' \ - -e 's|@''REPLACE_STRSIGNAL''@|$(REPLACE_STRSIGNAL)|g' \ + -e 's|@''REPLACE_STRSTR''@|$(REPLACE_STRSTR)|g' \ + -e 's|@''REPLACE_STRCASESTR''@|$(REPLACE_STRCASESTR)|g' \ -e 's|@''REPLACE_STRTOK_R''@|$(REPLACE_STRTOK_R)|g' \ + -e 's|@''REPLACE_STRERROR''@|$(REPLACE_STRERROR)|g' \ + -e 's|@''REPLACE_STRERROR_R''@|$(REPLACE_STRERROR_R)|g' \ + -e 's|@''REPLACE_STRSIGNAL''@|$(REPLACE_STRSIGNAL)|g' \ -e 's|@''UNDEFINE_STRTOK_R''@|$(UNDEFINE_STRTOK_R)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ @@ -3073,6 +3292,28 @@ } > $@-t && \ mv $@-t $@ +# We need the following in order to create <sys/random.h> when the system +# doesn't have one. +sys/random.h: sys_random.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) + $(AM_V_at)$(MKDIR_P) sys + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_SYS_RANDOM_H''@|$(NEXT_SYS_RANDOM_H)|g' \ + -e 's|@''HAVE_SYS_RANDOM_H''@|$(HAVE_SYS_RANDOM_H)|g' \ + -e 's/@''GNULIB_GETRANDOM''@/$(GNULIB_GETRANDOM)/g' \ + -e 's/@''HAVE_GETRANDOM''@/$(HAVE_GETRANDOM)/g' \ + -e 's/@''REPLACE_GETRANDOM''@/$(REPLACE_GETRANDOM)/g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ + < $(srcdir)/sys_random.in.h; \ + } > $@-t && \ + mv -f $@-t $@ + # We need the following in order to create <sys/socket.h> when the system # doesn't have one that works with the given compiler. sys/socket.h: sys_socket.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(ARG_NONNULL_H) @@ -3126,6 +3367,7 @@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SYS_STAT_H''@|$(NEXT_SYS_STAT_H)|g' \ -e 's|@''WINDOWS_64_BIT_ST_SIZE''@|$(WINDOWS_64_BIT_ST_SIZE)|g' \ + -e 's|@''WINDOWS_STAT_TIMESPEC''@|$(WINDOWS_STAT_TIMESPEC)|g' \ -e 's/@''GNULIB_FCHMODAT''@/$(GNULIB_FCHMODAT)/g' \ -e 's/@''GNULIB_FSTAT''@/$(GNULIB_FSTAT)/g' \ -e 's/@''GNULIB_FSTATAT''@/$(GNULIB_FSTATAT)/g' \ @@ -3139,6 +3381,7 @@ -e 's/@''GNULIB_MKNODAT''@/$(GNULIB_MKNODAT)/g' \ -e 's/@''GNULIB_STAT''@/$(GNULIB_STAT)/g' \ -e 's/@''GNULIB_UTIMENSAT''@/$(GNULIB_UTIMENSAT)/g' \ + -e 's/@''GNULIB_OVERRIDES_STRUCT_STAT''@/$(GNULIB_OVERRIDES_STRUCT_STAT)/g' \ -e 's|@''HAVE_FCHMODAT''@|$(HAVE_FCHMODAT)|g' \ -e 's|@''HAVE_FSTATAT''@|$(HAVE_FSTATAT)|g' \ -e 's|@''HAVE_FUTIMENS''@|$(HAVE_FUTIMENS)|g' \ @@ -3150,6 +3393,7 @@ -e 's|@''HAVE_MKNOD''@|$(HAVE_MKNOD)|g' \ -e 's|@''HAVE_MKNODAT''@|$(HAVE_MKNODAT)|g' \ -e 's|@''HAVE_UTIMENSAT''@|$(HAVE_UTIMENSAT)|g' \ + -e 's|@''REPLACE_FCHMODAT''@|$(REPLACE_FCHMODAT)|g' \ -e 's|@''REPLACE_FSTAT''@|$(REPLACE_FSTAT)|g' \ -e 's|@''REPLACE_FSTATAT''@|$(REPLACE_FSTATAT)|g' \ -e 's|@''REPLACE_FUTIMENS''@|$(REPLACE_FUTIMENS)|g' \ @@ -3203,6 +3447,7 @@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SYS_TYPES_H''@|$(NEXT_SYS_TYPES_H)|g' \ -e 's|@''WINDOWS_64_BIT_OFF_T''@|$(WINDOWS_64_BIT_OFF_T)|g' \ + -e 's|@''WINDOWS_STAT_INODES''@|$(WINDOWS_STAT_INODES)|g' \ < $(srcdir)/sys_types.in.h; \ } > $@-t && \ mv $@-t $@ @@ -3233,24 +3478,31 @@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_TIME_H''@|$(NEXT_TIME_H)|g' \ - -e 's/@''GNULIB_GETTIMEOFDAY''@/$(GNULIB_GETTIMEOFDAY)/g' \ + -e 's/@''GNULIB_CTIME''@/$(GNULIB_CTIME)/g' \ + -e 's/@''GNULIB_LOCALTIME''@/$(GNULIB_LOCALTIME)/g' \ -e 's/@''GNULIB_MKTIME''@/$(GNULIB_MKTIME)/g' \ -e 's/@''GNULIB_NANOSLEEP''@/$(GNULIB_NANOSLEEP)/g' \ + -e 's/@''GNULIB_STRFTIME''@/$(GNULIB_STRFTIME)/g' \ -e 's/@''GNULIB_STRPTIME''@/$(GNULIB_STRPTIME)/g' \ -e 's/@''GNULIB_TIMEGM''@/$(GNULIB_TIMEGM)/g' \ -e 's/@''GNULIB_TIME_R''@/$(GNULIB_TIME_R)/g' \ -e 's/@''GNULIB_TIME_RZ''@/$(GNULIB_TIME_RZ)/g' \ + -e 's/@''GNULIB_TZSET''@/$(GNULIB_TZSET)/g' \ -e 's|@''HAVE_DECL_LOCALTIME_R''@|$(HAVE_DECL_LOCALTIME_R)|g' \ -e 's|@''HAVE_NANOSLEEP''@|$(HAVE_NANOSLEEP)|g' \ -e 's|@''HAVE_STRPTIME''@|$(HAVE_STRPTIME)|g' \ -e 's|@''HAVE_TIMEGM''@|$(HAVE_TIMEGM)|g' \ -e 's|@''HAVE_TIMEZONE_T''@|$(HAVE_TIMEZONE_T)|g' \ + -e 's|@''HAVE_TZSET''@|$(HAVE_TZSET)|g' \ + -e 's|@''REPLACE_CTIME''@|$(REPLACE_CTIME)|g' \ -e 's|@''REPLACE_GMTIME''@|$(REPLACE_GMTIME)|g' \ -e 's|@''REPLACE_LOCALTIME''@|$(REPLACE_LOCALTIME)|g' \ -e 's|@''REPLACE_LOCALTIME_R''@|$(REPLACE_LOCALTIME_R)|g' \ -e 's|@''REPLACE_MKTIME''@|$(REPLACE_MKTIME)|g' \ -e 's|@''REPLACE_NANOSLEEP''@|$(REPLACE_NANOSLEEP)|g' \ + -e 's|@''REPLACE_STRFTIME''@|$(REPLACE_STRFTIME)|g' \ -e 's|@''REPLACE_TIMEGM''@|$(REPLACE_TIMEGM)|g' \ + -e 's|@''REPLACE_TZSET''@|$(REPLACE_TZSET)|g' \ -e 's|@''PTHREAD_H_DEFINES_STRUCT_TIMESPEC''@|$(PTHREAD_H_DEFINES_STRUCT_TIMESPEC)|g' \ -e 's|@''SYS_TIME_H_DEFINES_STRUCT_TIMESPEC''@|$(SYS_TIME_H_DEFINES_STRUCT_TIMESPEC)|g' \ -e 's|@''TIME_H_DEFINES_STRUCT_TIMESPEC''@|$(TIME_H_DEFINES_STRUCT_TIMESPEC)|g' \ @@ -3274,9 +3526,11 @@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_UNISTD_H''@|$(NEXT_UNISTD_H)|g' \ -e 's|@''WINDOWS_64_BIT_OFF_T''@|$(WINDOWS_64_BIT_OFF_T)|g' \ + -e 's/@''GNULIB_ACCESS''@/$(GNULIB_ACCESS)/g' \ -e 's/@''GNULIB_CHDIR''@/$(GNULIB_CHDIR)/g' \ -e 's/@''GNULIB_CHOWN''@/$(GNULIB_CHOWN)/g' \ -e 's/@''GNULIB_CLOSE''@/$(GNULIB_CLOSE)/g' \ + -e 's/@''GNULIB_COPY_FILE_RANGE''@/$(GNULIB_COPY_FILE_RANGE)/g' \ -e 's/@''GNULIB_DUP''@/$(GNULIB_DUP)/g' \ -e 's/@''GNULIB_DUP2''@/$(GNULIB_DUP2)/g' \ -e 's/@''GNULIB_DUP3''@/$(GNULIB_DUP3)/g' \ @@ -3291,11 +3545,14 @@ -e 's/@''GNULIB_GETCWD''@/$(GNULIB_GETCWD)/g' \ -e 's/@''GNULIB_GETDOMAINNAME''@/$(GNULIB_GETDOMAINNAME)/g' \ -e 's/@''GNULIB_GETDTABLESIZE''@/$(GNULIB_GETDTABLESIZE)/g' \ + -e 's/@''GNULIB_GETENTROPY''@/$(GNULIB_GETENTROPY)/g' \ -e 's/@''GNULIB_GETGROUPS''@/$(GNULIB_GETGROUPS)/g' \ -e 's/@''GNULIB_GETHOSTNAME''@/$(GNULIB_GETHOSTNAME)/g' \ -e 's/@''GNULIB_GETLOGIN''@/$(GNULIB_GETLOGIN)/g' \ -e 's/@''GNULIB_GETLOGIN_R''@/$(GNULIB_GETLOGIN_R)/g' \ + -e 's/@''GNULIB_GETOPT_POSIX''@/$(GNULIB_GETOPT_POSIX)/g' \ -e 's/@''GNULIB_GETPAGESIZE''@/$(GNULIB_GETPAGESIZE)/g' \ + -e 's/@''GNULIB_GETPASS''@/$(GNULIB_GETPASS)/g' \ -e 's/@''GNULIB_GETUSERSHELL''@/$(GNULIB_GETUSERSHELL)/g' \ -e 's/@''GNULIB_GROUP_MEMBER''@/$(GNULIB_GROUP_MEMBER)/g' \ -e 's/@''GNULIB_ISATTY''@/$(GNULIB_ISATTY)/g' \ @@ -3315,6 +3572,7 @@ -e 's/@''GNULIB_SLEEP''@/$(GNULIB_SLEEP)/g' \ -e 's/@''GNULIB_SYMLINK''@/$(GNULIB_SYMLINK)/g' \ -e 's/@''GNULIB_SYMLINKAT''@/$(GNULIB_SYMLINKAT)/g' \ + -e 's/@''GNULIB_TRUNCATE''@/$(GNULIB_TRUNCATE)/g' \ -e 's/@''GNULIB_TTYNAME_R''@/$(GNULIB_TTYNAME_R)/g' \ -e 's/@''GNULIB_UNISTD_H_GETOPT''@/0$(GNULIB_GL_UNISTD_H_GETOPT)/g' \ -e 's/@''GNULIB_UNISTD_H_NONBLOCKING''@/$(GNULIB_UNISTD_H_NONBLOCKING)/g' \ @@ -3325,6 +3583,7 @@ -e 's/@''GNULIB_WRITE''@/$(GNULIB_WRITE)/g' \ < $(srcdir)/unistd.in.h | \ sed -e 's|@''HAVE_CHOWN''@|$(HAVE_CHOWN)|g' \ + -e 's|@''HAVE_COPY_FILE_RANGE''@|$(HAVE_COPY_FILE_RANGE)|g' \ -e 's|@''HAVE_DUP2''@|$(HAVE_DUP2)|g' \ -e 's|@''HAVE_DUP3''@|$(HAVE_DUP3)|g' \ -e 's|@''HAVE_EUIDACCESS''@|$(HAVE_EUIDACCESS)|g' \ @@ -3335,10 +3594,11 @@ -e 's|@''HAVE_FSYNC''@|$(HAVE_FSYNC)|g' \ -e 's|@''HAVE_FTRUNCATE''@|$(HAVE_FTRUNCATE)|g' \ -e 's|@''HAVE_GETDTABLESIZE''@|$(HAVE_GETDTABLESIZE)|g' \ + -e 's|@''HAVE_GETENTROPY''@|$(HAVE_GETENTROPY)|g' \ -e 's|@''HAVE_GETGROUPS''@|$(HAVE_GETGROUPS)|g' \ -e 's|@''HAVE_GETHOSTNAME''@|$(HAVE_GETHOSTNAME)|g' \ - -e 's|@''HAVE_GETLOGIN''@|$(HAVE_GETLOGIN)|g' \ -e 's|@''HAVE_GETPAGESIZE''@|$(HAVE_GETPAGESIZE)|g' \ + -e 's|@''HAVE_GETPASS''@|$(HAVE_GETPASS)|g' \ -e 's|@''HAVE_GROUP_MEMBER''@|$(HAVE_GROUP_MEMBER)|g' \ -e 's|@''HAVE_LCHOWN''@|$(HAVE_LCHOWN)|g' \ -e 's|@''HAVE_LINK''@|$(HAVE_LINK)|g' \ @@ -3359,18 +3619,22 @@ -e 's|@''HAVE_DECL_FCHDIR''@|$(HAVE_DECL_FCHDIR)|g' \ -e 's|@''HAVE_DECL_FDATASYNC''@|$(HAVE_DECL_FDATASYNC)|g' \ -e 's|@''HAVE_DECL_GETDOMAINNAME''@|$(HAVE_DECL_GETDOMAINNAME)|g' \ + -e 's|@''HAVE_DECL_GETLOGIN''@|$(HAVE_DECL_GETLOGIN)|g' \ -e 's|@''HAVE_DECL_GETLOGIN_R''@|$(HAVE_DECL_GETLOGIN_R)|g' \ -e 's|@''HAVE_DECL_GETPAGESIZE''@|$(HAVE_DECL_GETPAGESIZE)|g' \ -e 's|@''HAVE_DECL_GETUSERSHELL''@|$(HAVE_DECL_GETUSERSHELL)|g' \ -e 's|@''HAVE_DECL_SETHOSTNAME''@|$(HAVE_DECL_SETHOSTNAME)|g' \ + -e 's|@''HAVE_DECL_TRUNCATE''@|$(HAVE_DECL_TRUNCATE)|g' \ -e 's|@''HAVE_DECL_TTYNAME_R''@|$(HAVE_DECL_TTYNAME_R)|g' \ -e 's|@''HAVE_OS_H''@|$(HAVE_OS_H)|g' \ -e 's|@''HAVE_SYS_PARAM_H''@|$(HAVE_SYS_PARAM_H)|g' \ | \ - sed -e 's|@''REPLACE_CHOWN''@|$(REPLACE_CHOWN)|g' \ + sed -e 's|@''REPLACE_ACCESS''@|$(REPLACE_ACCESS)|g' \ + -e 's|@''REPLACE_CHOWN''@|$(REPLACE_CHOWN)|g' \ -e 's|@''REPLACE_CLOSE''@|$(REPLACE_CLOSE)|g' \ -e 's|@''REPLACE_DUP''@|$(REPLACE_DUP)|g' \ -e 's|@''REPLACE_DUP2''@|$(REPLACE_DUP2)|g' \ + -e 's|@''REPLACE_FACCESSAT''@|$(REPLACE_FACCESSAT)|g' \ -e 's|@''REPLACE_FCHOWNAT''@|$(REPLACE_FCHOWNAT)|g' \ -e 's|@''REPLACE_FTRUNCATE''@|$(REPLACE_FTRUNCATE)|g' \ -e 's|@''REPLACE_GETCWD''@|$(REPLACE_GETCWD)|g' \ @@ -3379,6 +3643,7 @@ -e 's|@''REPLACE_GETLOGIN_R''@|$(REPLACE_GETLOGIN_R)|g' \ -e 's|@''REPLACE_GETGROUPS''@|$(REPLACE_GETGROUPS)|g' \ -e 's|@''REPLACE_GETPAGESIZE''@|$(REPLACE_GETPAGESIZE)|g' \ + -e 's|@''REPLACE_GETPASS''@|$(REPLACE_GETPASS)|g' \ -e 's|@''REPLACE_ISATTY''@|$(REPLACE_ISATTY)|g' \ -e 's|@''REPLACE_LCHOWN''@|$(REPLACE_LCHOWN)|g' \ -e 's|@''REPLACE_LINK''@|$(REPLACE_LINK)|g' \ @@ -3393,11 +3658,13 @@ -e 's|@''REPLACE_SLEEP''@|$(REPLACE_SLEEP)|g' \ -e 's|@''REPLACE_SYMLINK''@|$(REPLACE_SYMLINK)|g' \ -e 's|@''REPLACE_SYMLINKAT''@|$(REPLACE_SYMLINKAT)|g' \ + -e 's|@''REPLACE_TRUNCATE''@|$(REPLACE_TRUNCATE)|g' \ -e 's|@''REPLACE_TTYNAME_R''@|$(REPLACE_TTYNAME_R)|g' \ -e 's|@''REPLACE_UNLINK''@|$(REPLACE_UNLINK)|g' \ -e 's|@''REPLACE_UNLINKAT''@|$(REPLACE_UNLINKAT)|g' \ -e 's|@''REPLACE_USLEEP''@|$(REPLACE_USLEEP)|g' \ -e 's|@''REPLACE_WRITE''@|$(REPLACE_WRITE)|g' \ + -e 's|@''UNISTD_H_HAVE_SYS_RANDOM_H''@|$(UNISTD_H_HAVE_SYS_RANDOM_H)|g' \ -e 's|@''UNISTD_H_HAVE_WINSOCK2_H''@|$(UNISTD_H_HAVE_WINSOCK2_H)|g' \ -e 's|@''UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS''@|$(UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ @@ -3418,6 +3685,8 @@ -e 's|@''HAVE_FEATURES_H''@|$(HAVE_FEATURES_H)|g' \ -e 's|@''NEXT_WCHAR_H''@|$(NEXT_WCHAR_H)|g' \ -e 's|@''HAVE_WCHAR_H''@|$(HAVE_WCHAR_H)|g' \ + -e 's/@''HAVE_CRTDEFS_H''@/$(HAVE_CRTDEFS_H)/g' \ + -e 's/@''GNULIB_OVERRIDES_WINT_T''@/$(GNULIB_OVERRIDES_WINT_T)/g' \ -e 's/@''GNULIB_BTOWC''@/$(GNULIB_BTOWC)/g' \ -e 's/@''GNULIB_WCTOB''@/$(GNULIB_WCTOB)/g' \ -e 's/@''GNULIB_MBSINIT''@/$(GNULIB_MBSINIT)/g' \ @@ -3433,6 +3702,7 @@ -e 's/@''GNULIB_WMEMCMP''@/$(GNULIB_WMEMCMP)/g' \ -e 's/@''GNULIB_WMEMCPY''@/$(GNULIB_WMEMCPY)/g' \ -e 's/@''GNULIB_WMEMMOVE''@/$(GNULIB_WMEMMOVE)/g' \ + -e 's/@''GNULIB_WMEMPCPY''@/$(GNULIB_WMEMPCPY)/g' \ -e 's/@''GNULIB_WMEMSET''@/$(GNULIB_WMEMSET)/g' \ -e 's/@''GNULIB_WCSLEN''@/$(GNULIB_WCSLEN)/g' \ -e 's/@''GNULIB_WCSNLEN''@/$(GNULIB_WCSNLEN)/g' \ @@ -3457,6 +3727,7 @@ -e 's/@''GNULIB_WCSSTR''@/$(GNULIB_WCSSTR)/g' \ -e 's/@''GNULIB_WCSTOK''@/$(GNULIB_WCSTOK)/g' \ -e 's/@''GNULIB_WCSWIDTH''@/$(GNULIB_WCSWIDTH)/g' \ + -e 's/@''GNULIB_WCSFTIME''@/$(GNULIB_WCSFTIME)/g' \ < $(srcdir)/wchar.in.h | \ sed -e 's|@''HAVE_WINT_T''@|$(HAVE_WINT_T)|g' \ -e 's|@''HAVE_BTOWC''@|$(HAVE_BTOWC)|g' \ @@ -3472,6 +3743,7 @@ -e 's|@''HAVE_WMEMCMP''@|$(HAVE_WMEMCMP)|g' \ -e 's|@''HAVE_WMEMCPY''@|$(HAVE_WMEMCPY)|g' \ -e 's|@''HAVE_WMEMMOVE''@|$(HAVE_WMEMMOVE)|g' \ + -e 's|@''HAVE_WMEMPCPY''@|$(HAVE_WMEMPCPY)|g' \ -e 's|@''HAVE_WMEMSET''@|$(HAVE_WMEMSET)|g' \ -e 's|@''HAVE_WCSLEN''@|$(HAVE_WCSLEN)|g' \ -e 's|@''HAVE_WCSNLEN''@|$(HAVE_WCSNLEN)|g' \ @@ -3496,6 +3768,7 @@ -e 's|@''HAVE_WCSSTR''@|$(HAVE_WCSSTR)|g' \ -e 's|@''HAVE_WCSTOK''@|$(HAVE_WCSTOK)|g' \ -e 's|@''HAVE_WCSWIDTH''@|$(HAVE_WCSWIDTH)|g' \ + -e 's|@''HAVE_WCSFTIME''@|$(HAVE_WCSFTIME)|g' \ -e 's|@''HAVE_DECL_WCTOB''@|$(HAVE_DECL_WCTOB)|g' \ -e 's|@''HAVE_DECL_WCWIDTH''@|$(HAVE_DECL_WCWIDTH)|g' \ | \ @@ -3512,6 +3785,8 @@ -e 's|@''REPLACE_WCSNRTOMBS''@|$(REPLACE_WCSNRTOMBS)|g' \ -e 's|@''REPLACE_WCWIDTH''@|$(REPLACE_WCWIDTH)|g' \ -e 's|@''REPLACE_WCSWIDTH''@|$(REPLACE_WCSWIDTH)|g' \ + -e 's|@''REPLACE_WCSFTIME''@|$(REPLACE_WCSFTIME)|g' \ + -e 's|@''REPLACE_WCSTOK''@|$(REPLACE_WCSTOK)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ @@ -3529,7 +3804,11 @@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_WCTYPE_H''@|$(NEXT_WCTYPE_H)|g' \ + -e 's/@''HAVE_CRTDEFS_H''@/$(HAVE_CRTDEFS_H)/g' \ + -e 's/@''GNULIB_OVERRIDES_WINT_T''@/$(GNULIB_OVERRIDES_WINT_T)/g' \ -e 's/@''GNULIB_ISWBLANK''@/$(GNULIB_ISWBLANK)/g' \ + -e 's/@''GNULIB_ISWDIGIT''@/$(GNULIB_ISWDIGIT)/g' \ + -e 's/@''GNULIB_ISWXDIGIT''@/$(GNULIB_ISWXDIGIT)/g' \ -e 's/@''GNULIB_WCTYPE''@/$(GNULIB_WCTYPE)/g' \ -e 's/@''GNULIB_ISWCTYPE''@/$(GNULIB_ISWCTYPE)/g' \ -e 's/@''GNULIB_WCTRANS''@/$(GNULIB_WCTRANS)/g' \ @@ -3540,6 +3819,8 @@ -e 's/@''HAVE_WCTRANS_T''@/$(HAVE_WCTRANS_T)/g' \ -e 's/@''HAVE_WINT_T''@/$(HAVE_WINT_T)/g' \ -e 's/@''REPLACE_ISWBLANK''@/$(REPLACE_ISWBLANK)/g' \ + -e 's/@''REPLACE_ISWDIGIT''@/$(REPLACE_ISWDIGIT)/g' \ + -e 's/@''REPLACE_ISWXDIGIT''@/$(REPLACE_ISWXDIGIT)/g' \ -e 's/@''REPLACE_ISWCNTRL''@/$(REPLACE_ISWCNTRL)/g' \ -e 's/@''REPLACE_TOWLOWER''@/$(REPLACE_TOWLOWER)/g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ diff -Nru gdb-9.1/gnulib/import/malloc/scratch_buffer_grow.c gdb-10.2/gnulib/import/malloc/scratch_buffer_grow.c --- gdb-9.1/gnulib/import/malloc/scratch_buffer_grow.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/malloc/scratch_buffer_grow.c 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,56 @@ +/* Variable-sized buffer with on-stack default allocation. + Copyright (C) 2015-2020 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 3 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#ifndef _LIBC +# include <libc-config.h> +#endif + +#include <scratch_buffer.h> +#include <errno.h> + +bool +__libc_scratch_buffer_grow (struct scratch_buffer *buffer) +{ + void *new_ptr; + size_t new_length = buffer->length * 2; + + /* Discard old buffer. */ + scratch_buffer_free (buffer); + + /* Check for overflow. */ + if (__glibc_likely (new_length >= buffer->length)) + new_ptr = malloc (new_length); + else + { + __set_errno (ENOMEM); + new_ptr = NULL; + } + + if (__glibc_unlikely (new_ptr == NULL)) + { + /* Buffer must remain valid to free. */ + scratch_buffer_init (buffer); + return false; + } + + /* Install new heap-based buffer. */ + buffer->data = new_ptr; + buffer->length = new_length; + return true; +} +libc_hidden_def (__libc_scratch_buffer_grow) diff -Nru gdb-9.1/gnulib/import/malloc/scratch_buffer_grow_preserve.c gdb-10.2/gnulib/import/malloc/scratch_buffer_grow_preserve.c --- gdb-9.1/gnulib/import/malloc/scratch_buffer_grow_preserve.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/malloc/scratch_buffer_grow_preserve.c 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,67 @@ +/* Variable-sized buffer with on-stack default allocation. + Copyright (C) 2015-2020 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 3 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#ifndef _LIBC +# include <libc-config.h> +#endif + +#include <scratch_buffer.h> +#include <errno.h> +#include <string.h> + +bool +__libc_scratch_buffer_grow_preserve (struct scratch_buffer *buffer) +{ + size_t new_length = 2 * buffer->length; + void *new_ptr; + + if (buffer->data == buffer->__space.__c) + { + /* Move buffer to the heap. No overflow is possible because + buffer->length describes a small buffer on the stack. */ + new_ptr = malloc (new_length); + if (new_ptr == NULL) + return false; + memcpy (new_ptr, buffer->__space.__c, buffer->length); + } + else + { + /* Buffer was already on the heap. Check for overflow. */ + if (__glibc_likely (new_length >= buffer->length)) + new_ptr = realloc (buffer->data, new_length); + else + { + __set_errno (ENOMEM); + new_ptr = NULL; + } + + if (__glibc_unlikely (new_ptr == NULL)) + { + /* Deallocate, but buffer must remain valid to free. */ + free (buffer->data); + scratch_buffer_init (buffer); + return false; + } + } + + /* Install new heap-based buffer. */ + buffer->data = new_ptr; + buffer->length = new_length; + return true; +} +libc_hidden_def (__libc_scratch_buffer_grow_preserve) diff -Nru gdb-9.1/gnulib/import/malloc/scratch_buffer.h gdb-10.2/gnulib/import/malloc/scratch_buffer.h --- gdb-9.1/gnulib/import/malloc/scratch_buffer.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/malloc/scratch_buffer.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,135 @@ +/* Variable-sized buffer with on-stack default allocation. + Copyright (C) 2015-2020 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 3 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#ifndef _SCRATCH_BUFFER_H +#define _SCRATCH_BUFFER_H + +/* Scratch buffers with a default stack allocation and fallback to + heap allocation. It is expected that this function is used in this + way: + + struct scratch_buffer tmpbuf; + scratch_buffer_init (&tmpbuf); + + while (!function_that_uses_buffer (tmpbuf.data, tmpbuf.length)) + if (!scratch_buffer_grow (&tmpbuf)) + return -1; + + scratch_buffer_free (&tmpbuf); + return 0; + + The allocation functions (scratch_buffer_grow, + scratch_buffer_grow_preserve, scratch_buffer_set_array_size) make + sure that the heap allocation, if any, is freed, so that the code + above does not have a memory leak. The buffer still remains in a + state that can be deallocated using scratch_buffer_free, so a loop + like this is valid as well: + + struct scratch_buffer tmpbuf; + scratch_buffer_init (&tmpbuf); + + while (!function_that_uses_buffer (tmpbuf.data, tmpbuf.length)) + if (!scratch_buffer_grow (&tmpbuf)) + break; + + scratch_buffer_free (&tmpbuf); + + scratch_buffer_grow and scratch_buffer_grow_preserve are guaranteed + to grow the buffer by at least 512 bytes. This means that when + using the scratch buffer as a backing store for a non-character + array whose element size, in bytes, is 512 or smaller, the scratch + buffer only has to grow once to make room for at least one more + element. +*/ + +#include <stdbool.h> +#include <stddef.h> +#include <stdlib.h> + +/* Scratch buffer. Must be initialized with scratch_buffer_init + before its use. */ +struct scratch_buffer { + void *data; /* Pointer to the beginning of the scratch area. */ + size_t length; /* Allocated space at the data pointer, in bytes. */ + union { max_align_t __align; char __c[1024]; } __space; +}; + +/* Initializes *BUFFER so that BUFFER->data points to BUFFER->__space + and BUFFER->length reflects the available space. */ +static inline void +scratch_buffer_init (struct scratch_buffer *buffer) +{ + buffer->data = buffer->__space.__c; + buffer->length = sizeof (buffer->__space); +} + +/* Deallocates *BUFFER (if it was heap-allocated). */ +static inline void +scratch_buffer_free (struct scratch_buffer *buffer) +{ + if (buffer->data != buffer->__space.__c) + free (buffer->data); +} + +/* Grow *BUFFER by some arbitrary amount. The buffer contents is NOT + preserved. Return true on success, false on allocation failure (in + which case the old buffer is freed). On success, the new buffer is + larger than the previous size. On failure, *BUFFER is deallocated, + but remains in a free-able state, and errno is set. */ +bool __libc_scratch_buffer_grow (struct scratch_buffer *buffer); +libc_hidden_proto (__libc_scratch_buffer_grow) + +/* Alias for __libc_scratch_buffer_grow. */ +static __always_inline bool +scratch_buffer_grow (struct scratch_buffer *buffer) +{ + return __glibc_likely (__libc_scratch_buffer_grow (buffer)); +} + +/* Like __libc_scratch_buffer_grow, but preserve the old buffer + contents on success, as a prefix of the new buffer. */ +bool __libc_scratch_buffer_grow_preserve (struct scratch_buffer *buffer); +libc_hidden_proto (__libc_scratch_buffer_grow_preserve) + +/* Alias for __libc_scratch_buffer_grow_preserve. */ +static __always_inline bool +scratch_buffer_grow_preserve (struct scratch_buffer *buffer) +{ + return __glibc_likely (__libc_scratch_buffer_grow_preserve (buffer)); +} + +/* Grow *BUFFER so that it can store at least NELEM elements of SIZE + bytes. The buffer contents are NOT preserved. Both NELEM and SIZE + can be zero. Return true on success, false on allocation failure + (in which case the old buffer is freed, but *BUFFER remains in a + free-able state, and errno is set). It is unspecified whether this + function can reduce the array size. */ +bool __libc_scratch_buffer_set_array_size (struct scratch_buffer *buffer, + size_t nelem, size_t size); +libc_hidden_proto (__libc_scratch_buffer_set_array_size) + +/* Alias for __libc_scratch_set_array_size. */ +static __always_inline bool +scratch_buffer_set_array_size (struct scratch_buffer *buffer, + size_t nelem, size_t size) +{ + return __glibc_likely (__libc_scratch_buffer_set_array_size + (buffer, nelem, size)); +} + +#endif /* _SCRATCH_BUFFER_H */ diff -Nru gdb-9.1/gnulib/import/malloc/scratch_buffer_set_array_size.c gdb-10.2/gnulib/import/malloc/scratch_buffer_set_array_size.c --- gdb-9.1/gnulib/import/malloc/scratch_buffer_set_array_size.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/malloc/scratch_buffer_set_array_size.c 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,64 @@ +/* Variable-sized buffer with on-stack default allocation. + Copyright (C) 2015-2020 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 3 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#ifndef _LIBC +# include <libc-config.h> +#endif + +#include <scratch_buffer.h> +#include <errno.h> +#include <limits.h> + +bool +__libc_scratch_buffer_set_array_size (struct scratch_buffer *buffer, + size_t nelem, size_t size) +{ + size_t new_length = nelem * size; + + /* Avoid overflow check if both values are small. */ + if ((nelem | size) >> (sizeof (size_t) * CHAR_BIT / 2) != 0 + && nelem != 0 && size != new_length / nelem) + { + /* Overflow. Discard the old buffer, but it must remain valid + to free. */ + scratch_buffer_free (buffer); + scratch_buffer_init (buffer); + __set_errno (ENOMEM); + return false; + } + + if (new_length <= buffer->length) + return true; + + /* Discard old buffer. */ + scratch_buffer_free (buffer); + + char *new_ptr = malloc (new_length); + if (new_ptr == NULL) + { + /* Buffer must remain valid to free. */ + scratch_buffer_init (buffer); + return false; + } + + /* Install new heap-based buffer. */ + buffer->data = new_ptr; + buffer->length = new_length; + return true; +} +libc_hidden_def (__libc_scratch_buffer_set_array_size) diff -Nru gdb-9.1/gnulib/import/malloca.c gdb-10.2/gnulib/import/malloca.c --- gdb-9.1/gnulib/import/malloca.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/malloca.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Safe automatic memory allocation. - Copyright (C) 2003, 2006-2007, 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible <bruno@clisp.org>, 2003. + Copyright (C) 2003, 2006-2007, 2009-2020 Free Software Foundation, Inc. + Written by Bruno Haible <bruno@clisp.org>, 2003, 2018. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -13,7 +13,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, see <http://www.gnu.org/licenses/>. */ + along with this program; if not, see <https://www.gnu.org/licenses/>. */ #define _GL_USE_STDLIB_ALLOC 1 #include <config.h> @@ -21,82 +21,49 @@ /* Specification. */ #include "malloca.h" -#include <stdint.h> - #include "verify.h" /* The speed critical point in this file is freea() applied to an alloca() result: it must be fast, to match the speed of alloca(). The speed of mmalloca() and freea() in the other case are not critical, because they - are only invoked for big memory sizes. */ - -#if HAVE_ALLOCA - -/* Store the mmalloca() results in a hash table. This is needed to reliably - distinguish a mmalloca() result and an alloca() result. - - Although it is possible that the same pointer is returned by alloca() and - by mmalloca() at different times in the same application, it does not lead - to a bug in freea(), because: - - Before a pointer returned by alloca() can point into malloc()ed memory, - the function must return, and once this has happened the programmer must - not call freea() on it anyway. - - Before a pointer returned by mmalloca() can point into the stack, it - must be freed. The only function that can free it is freea(), and - when freea() frees it, it also removes it from the hash table. */ - -#define MAGIC_NUMBER 0x1415fb4a -#define MAGIC_SIZE sizeof (int) -/* This is how the header info would look like without any alignment - considerations. */ -struct preliminary_header { void *next; int magic; }; -/* But the header's size must be a multiple of sa_alignment_max. */ -#define HEADER_SIZE \ - (((sizeof (struct preliminary_header) + sa_alignment_max - 1) / sa_alignment_max) * sa_alignment_max) -union header { - void *next; - struct { - char room[HEADER_SIZE - MAGIC_SIZE]; - int word; - } magic; -}; -verify (HEADER_SIZE == sizeof (union header)); -/* We make the hash table quite big, so that during lookups the probability - of empty hash buckets is quite high. There is no need to make the hash - table resizable, because when the hash table gets filled so much that the - lookup becomes slow, it means that the application has memory leaks. */ -#define HASH_TABLE_SIZE 257 -static void * mmalloca_results[HASH_TABLE_SIZE]; - -#endif + are only invoked for big memory sizes. + Here we use a bit in the address as an indicator, an idea by Ondřej Bílka. + malloca() can return three types of pointers: + - Pointers ≡ 0 mod 2*sa_alignment_max come from stack allocation. + - Pointers ≡ sa_alignment_max mod 2*sa_alignment_max come from heap + allocation. + - NULL comes from a failed heap allocation. */ + +/* Type for holding very small pointer differences. */ +typedef unsigned char small_t; +/* Verify that it is wide enough. */ +verify (2 * sa_alignment_max - 1 <= (small_t) -1); void * mmalloca (size_t n) { #if HAVE_ALLOCA - /* Allocate one more word, that serves as an indicator for malloc()ed - memory, so that freea() of an alloca() result is fast. */ - size_t nplus = n + HEADER_SIZE; + /* Allocate one more word, used to determine the address to pass to freea(), + and room for the alignment ≡ sa_alignment_max mod 2*sa_alignment_max. */ + size_t nplus = n + sizeof (small_t) + 2 * sa_alignment_max - 1; if (nplus >= n) { - void *p = malloc (nplus); + char *mem = (char *) malloc (nplus); - if (p != NULL) + if (mem != NULL) { - size_t slot; - union header *h = p; - - p = h + 1; - - /* Put a magic number into the indicator word. */ - h->magic.word = MAGIC_NUMBER; - - /* Enter p into the hash table. */ - slot = (uintptr_t) p % HASH_TABLE_SIZE; - h->next = mmalloca_results[slot]; - mmalloca_results[slot] = p; - + char *p = + (char *)((((uintptr_t)mem + sizeof (small_t) + sa_alignment_max - 1) + & ~(uintptr_t)(2 * sa_alignment_max - 1)) + + sa_alignment_max); + /* Here p >= mem + sizeof (small_t), + and p <= mem + sizeof (small_t) + 2 * sa_alignment_max - 1 + hence p + n <= mem + nplus. + So, the memory range [p, p+n) lies in the allocated memory range + [mem, mem + nplus). */ + ((small_t *) p)[-1] = p - mem; + /* p ≡ sa_alignment_max mod 2*sa_alignment_max. */ return p; } } @@ -115,35 +82,24 @@ void freea (void *p) { - /* mmalloca() may have returned NULL. */ - if (p != NULL) + /* Check argument. */ + if ((uintptr_t) p & (sa_alignment_max - 1)) { - /* Attempt to quickly distinguish the mmalloca() result - which has - a magic indicator word - and the alloca() result - which has an - uninitialized indicator word. It is for this test that sa_increment - additional bytes are allocated in the alloca() case. */ - if (((int *) p)[-1] == MAGIC_NUMBER) - { - /* Looks like a mmalloca() result. To see whether it really is one, - perform a lookup in the hash table. */ - size_t slot = (uintptr_t) p % HASH_TABLE_SIZE; - void **chain = &mmalloca_results[slot]; - for (; *chain != NULL;) - { - union header *h = p; - if (*chain == p) - { - /* Found it. Remove it from the hash table and free it. */ - union header *p_begin = h - 1; - *chain = p_begin->next; - free (p_begin); - return; - } - h = *chain; - chain = &h[-1].next; - } - } - /* At this point, we know it was not a mmalloca() result. */ + /* p was not the result of a malloca() call. Invalid argument. */ + abort (); + } + /* Determine whether p was a non-NULL pointer returned by mmalloca(). */ + if ((uintptr_t) p & sa_alignment_max) + { + void *mem = (char *) p - ((small_t *) p)[-1]; + free (mem); } } #endif + +/* + * Hey Emacs! + * Local Variables: + * coding: utf-8 + * End: + */ diff -Nru gdb-9.1/gnulib/import/malloca.h gdb-10.2/gnulib/import/malloca.h --- gdb-9.1/gnulib/import/malloca.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/malloca.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Safe automatic memory allocation. - Copyright (C) 2003-2007, 2009-2016 Free Software Foundation, Inc. + Copyright (C) 2003-2007, 2009-2020 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2003. This program is free software; you can redistribute it and/or modify @@ -13,7 +13,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, see <http://www.gnu.org/licenses/>. */ + along with this program; if not, see <https://www.gnu.org/licenses/>. */ #ifndef _MALLOCA_H #define _MALLOCA_H @@ -21,6 +21,9 @@ #include <alloca.h> #include <stddef.h> #include <stdlib.h> +#include <stdint.h> + +#include "xalloc-oversized.h" #ifdef __cplusplus @@ -53,8 +56,10 @@ the function returns. Upon failure, it returns NULL. */ #if HAVE_ALLOCA # define malloca(N) \ - ((N) < 4032 - sa_increment \ - ? (void *) ((char *) alloca ((N) + sa_increment) + sa_increment) \ + ((N) < 4032 - (2 * sa_alignment_max - 1) \ + ? (void *) (((uintptr_t) (char *) alloca ((N) + 2 * sa_alignment_max - 1) \ + + (2 * sa_alignment_max - 1)) \ + & ~(uintptr_t)(2 * sa_alignment_max - 1)) \ : mmalloca (N)) #else # define malloca(N) \ @@ -73,15 +78,7 @@ It allocates an array of N objects, each with S bytes of memory, on the stack. S must be positive and N must be nonnegative. The array must be freed using freea() before the function returns. */ -#if 1 -/* Cf. the definition of xalloc_oversized. */ -# define nmalloca(n, s) \ - ((n) > (size_t) (sizeof (ptrdiff_t) <= sizeof (size_t) ? -1 : -2) / (s) \ - ? NULL \ - : malloca ((n) * (s))) -#else -extern void * nmalloca (size_t n, size_t s); -#endif +#define nmalloca(n, s) (xalloc_oversized (n, s) ? NULL : malloca ((n) * (s))) #ifdef __cplusplus @@ -115,19 +112,12 @@ among all elementary types. */ sa_alignment_long = sa_alignof (long), sa_alignment_double = sa_alignof (double), -#if HAVE_LONG_LONG_INT sa_alignment_longlong = sa_alignof (long long), -#endif sa_alignment_longdouble = sa_alignof (long double), sa_alignment_max = ((sa_alignment_long - 1) | (sa_alignment_double - 1) -#if HAVE_LONG_LONG_INT | (sa_alignment_longlong - 1) -#endif | (sa_alignment_longdouble - 1) - ) + 1, -/* The increment that guarantees room for a magic word must be >= sizeof (int) - and a multiple of sa_alignment_max. */ - sa_increment = ((sizeof (int) + sa_alignment_max - 1) / sa_alignment_max) * sa_alignment_max + ) + 1 }; #endif /* _MALLOCA_H */ diff -Nru gdb-9.1/gnulib/import/malloca.valgrind gdb-10.2/gnulib/import/malloca.valgrind --- gdb-9.1/gnulib/import/malloca.valgrind 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/malloca.valgrind 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -# Suppress a valgrind message about use of uninitialized memory in freea(). -# This use is OK because it provides only a speedup. -{ - freea - Memcheck:Cond - fun:freea -} diff -Nru gdb-9.1/gnulib/import/malloc.c gdb-10.2/gnulib/import/malloc.c --- gdb-9.1/gnulib/import/malloc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/malloc.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* malloc() function that is glibc compatible. - Copyright (C) 1997-1998, 2006-2007, 2009-2016 Free Software Foundation, Inc. + Copyright (C) 1997-1998, 2006-2007, 2009-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -13,7 +13,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, see <http://www.gnu.org/licenses/>. */ + along with this program; if not, see <https://www.gnu.org/licenses/>. */ /* written by Jim Meyering and Bruno Haible */ diff -Nru gdb-9.1/gnulib/import/math.in.h gdb-10.2/gnulib/import/math.in.h --- gdb-9.1/gnulib/import/math.in.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/math.in.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* A GNU-like <math.h>. - Copyright (C) 2002-2003, 2007-2016 Free Software Foundation, Inc. + Copyright (C) 2002-2003, 2007-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -13,7 +13,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _@GUARD_PREFIX@_MATH_H @@ -28,6 +28,11 @@ #ifndef _@GUARD_PREFIX@_MATH_H #define _@GUARD_PREFIX@_MATH_H +/* On OpenVMS, NAN, INFINITY, and HUGEVAL macros are defined in <fp.h>. */ +#if defined __VMS && ! defined NAN +# include <fp.h> +#endif + #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif @@ -62,20 +67,20 @@ { \ return func (l); \ } -# define _GL_MATH_CXX_REAL_FLOATING_DECL_2(func) \ +# define _GL_MATH_CXX_REAL_FLOATING_DECL_2(func,rpl_func,rettype) \ _GL_BEGIN_NAMESPACE \ -inline int \ -func (float f) \ +inline rettype \ +rpl_func (float f) \ { \ return _gl_cxx_ ## func ## f (f); \ } \ -inline int \ -func (double d) \ +inline rettype \ +rpl_func (double d) \ { \ return _gl_cxx_ ## func ## d (d); \ } \ -inline int \ -func (long double l) \ +inline rettype \ +rpl_func (long double l) \ { \ return _gl_cxx_ ## func ## l (l); \ } \ @@ -87,27 +92,27 @@ classification macros with an argument of real-floating (that is, one of float, double, or long double). */ #define _GL_WARN_REAL_FLOATING_DECL(func) \ -_GL_MATH_INLINE int \ -rpl_ ## func ## f (float f) \ -{ \ - return func (f); \ -} \ -_GL_MATH_INLINE int \ -rpl_ ## func ## d (double d) \ -{ \ - return func (d); \ -} \ -_GL_MATH_INLINE int \ -rpl_ ## func ## l (long double l) \ -{ \ - return func (l); \ -} \ -_GL_WARN_ON_USE (rpl_ ## func ## f, #func " is unportable - " \ - "use gnulib module " #func " for portability"); \ -_GL_WARN_ON_USE (rpl_ ## func ## d, #func " is unportable - " \ - "use gnulib module " #func " for portability"); \ -_GL_WARN_ON_USE (rpl_ ## func ## l, #func " is unportable - " \ - "use gnulib module " #func " for portability") +_GL_MATH_INLINE int \ +_GL_WARN_ON_USE_ATTRIBUTE (#func " is unportable - " \ + "use gnulib module " #func " for portability") \ +rpl_ ## func ## f (float f) \ +{ \ + return func (f); \ +} \ +_GL_MATH_INLINE int \ +_GL_WARN_ON_USE_ATTRIBUTE (#func " is unportable - " \ + "use gnulib module " #func " for portability") \ +rpl_ ## func ## d (double d) \ +{ \ + return func (d); \ +} \ +_GL_MATH_INLINE int \ +_GL_WARN_ON_USE_ATTRIBUTE (#func " is unportable - " \ + "use gnulib module " #func " for portability") \ +rpl_ ## func ## l (long double l) \ +{ \ + return func (l); \ +} #define _GL_WARN_REAL_FLOATING_IMPL(func, value) \ (sizeof (value) == sizeof (float) ? rpl_ ## func ## f (value) \ : sizeof (value) == sizeof (double) ? rpl_ ## func ## d (value) \ @@ -122,6 +127,12 @@ #endif +/* For clang: Use __has_builtin to determine whether a builtin is available. */ +#ifndef __has_builtin +# define __has_builtin(name) 0 +#endif + + /* POSIX allows platforms that don't support NAN. But all major machines in the past 15 years have supported something close to IEEE NaN, so we define this unconditionally. We also must define @@ -189,8 +200,17 @@ #endif -/* Ensure FP_ILOGB0 and FP_ILOGBNAN are defined. */ -#if !(defined FP_ILOGB0 && defined FP_ILOGBNAN) +#if defined FP_ILOGB0 && defined FP_ILOGBNAN + /* Ensure FP_ILOGB0 and FP_ILOGBNAN are correct. */ +# if defined __HAIKU__ + /* Haiku: match what ilogb() does */ +# undef FP_ILOGB0 +# undef FP_ILOGBNAN +# define FP_ILOGB0 (- 2147483647 - 1) /* INT_MIN */ +# define FP_ILOGBNAN (- 2147483647 - 1) /* INT_MIN */ +# endif +#else + /* Ensure FP_ILOGB0 and FP_ILOGBNAN are defined. */ # if defined __NetBSD__ || defined __sgi /* NetBSD, IRIX 6.5: match what ilogb() does */ # define FP_ILOGB0 (- 2147483647 - 1) /* INT_MIN */ @@ -212,11 +232,20 @@ #if @GNULIB_ACOSF@ -# if !@HAVE_ACOSF@ -# undef acosf +# if @REPLACE_ACOSF@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef acosf +# define acosf rpl_acosf +# endif +_GL_FUNCDECL_RPL (acosf, float, (float x)); +_GL_CXXALIAS_RPL (acosf, float, (float x)); +# else +# if !@HAVE_ACOSF@ +# undef acosf _GL_FUNCDECL_SYS (acosf, float, (float x)); -# endif +# endif _GL_CXXALIAS_SYS (acosf, float, (float x)); +# endif _GL_CXXALIASWARN (acosf); #elif defined GNULIB_POSIXCHECK # undef acosf @@ -243,11 +272,20 @@ #if @GNULIB_ASINF@ -# if !@HAVE_ASINF@ -# undef asinf +# if @REPLACE_ASINF@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef asinf +# define asinf rpl_asinf +# endif +_GL_FUNCDECL_RPL (asinf, float, (float x)); +_GL_CXXALIAS_RPL (asinf, float, (float x)); +# else +# if !@HAVE_ASINF@ +# undef asinf _GL_FUNCDECL_SYS (asinf, float, (float x)); -# endif +# endif _GL_CXXALIAS_SYS (asinf, float, (float x)); +# endif _GL_CXXALIASWARN (asinf); #elif defined GNULIB_POSIXCHECK # undef asinf @@ -274,11 +312,20 @@ #if @GNULIB_ATANF@ -# if !@HAVE_ATANF@ -# undef atanf +# if @REPLACE_ATANF@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef atanf +# define atanf rpl_atanf +# endif +_GL_FUNCDECL_RPL (atanf, float, (float x)); +_GL_CXXALIAS_RPL (atanf, float, (float x)); +# else +# if !@HAVE_ATANF@ +# undef atanf _GL_FUNCDECL_SYS (atanf, float, (float x)); -# endif +# endif _GL_CXXALIAS_SYS (atanf, float, (float x)); +# endif _GL_CXXALIASWARN (atanf); #elif defined GNULIB_POSIXCHECK # undef atanf @@ -305,11 +352,20 @@ #if @GNULIB_ATAN2F@ -# if !@HAVE_ATAN2F@ -# undef atan2f +# if @REPLACE_ATAN2F@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef atan2f +# define atan2f rpl_atan2f +# endif +_GL_FUNCDECL_RPL (atan2f, float, (float y, float x)); +_GL_CXXALIAS_RPL (atan2f, float, (float y, float x)); +# else +# if !@HAVE_ATAN2F@ +# undef atan2f _GL_FUNCDECL_SYS (atan2f, float, (float y, float x)); -# endif +# endif _GL_CXXALIAS_SYS (atan2f, float, (float y, float x)); +# endif _GL_CXXALIASWARN (atan2f); #elif defined GNULIB_POSIXCHECK # undef atan2f @@ -348,7 +404,9 @@ _GL_FUNCDECL_SYS (cbrt, double, (double x)); # endif _GL_CXXALIAS_SYS (cbrt, double, (double x)); +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (cbrt); +# endif #elif defined GNULIB_POSIXCHECK # undef cbrt # if HAVE_RAW_DECL_CBRT @@ -416,7 +474,9 @@ # else _GL_CXXALIAS_SYS (ceil, double, (double x)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (ceil); +# endif #endif #if @GNULIB_CEILL@ @@ -446,6 +506,7 @@ #if @GNULIB_COPYSIGNF@ # if !@HAVE_DECL_COPYSIGNF@ +# undef copysignf _GL_FUNCDECL_SYS (copysignf, float, (float x, float y)); # endif _GL_CXXALIAS_SYS (copysignf, float, (float x, float y)); @@ -463,7 +524,9 @@ _GL_FUNCDECL_SYS (copysign, double, (double x, double y)); # endif _GL_CXXALIAS_SYS (copysign, double, (double x, double y)); +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (copysign); +# endif #elif defined GNULIB_POSIXCHECK # undef copysign # if HAVE_RAW_DECL_COPYSIGN @@ -488,11 +551,20 @@ #if @GNULIB_COSF@ -# if !@HAVE_COSF@ -# undef cosf +# if @REPLACE_COSF@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef cosf +# define cosf rpl_cosf +# endif +_GL_FUNCDECL_RPL (cosf, float, (float x)); +_GL_CXXALIAS_RPL (cosf, float, (float x)); +# else +# if !@HAVE_COSF@ +# undef cosf _GL_FUNCDECL_SYS (cosf, float, (float x)); -# endif +# endif _GL_CXXALIAS_SYS (cosf, float, (float x)); +# endif _GL_CXXALIASWARN (cosf); #elif defined GNULIB_POSIXCHECK # undef cosf @@ -519,11 +591,20 @@ #if @GNULIB_COSHF@ -# if !@HAVE_COSHF@ -# undef coshf +# if @REPLACE_COSHF@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef coshf +# define coshf rpl_coshf +# endif +_GL_FUNCDECL_RPL (coshf, float, (float x)); +_GL_CXXALIAS_RPL (coshf, float, (float x)); +# else +# if !@HAVE_COSHF@ +# undef coshf _GL_FUNCDECL_SYS (coshf, float, (float x)); -# endif +# endif _GL_CXXALIAS_SYS (coshf, float, (float x)); +# endif _GL_CXXALIASWARN (coshf); #elif defined GNULIB_POSIXCHECK # undef coshf @@ -535,11 +616,20 @@ #if @GNULIB_EXPF@ -# if !@HAVE_EXPF@ -# undef expf +# if @REPLACE_EXPF@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef expf +# define expf rpl_expf +# endif +_GL_FUNCDECL_RPL (expf, float, (float x)); +_GL_CXXALIAS_RPL (expf, float, (float x)); +# else +# if !@HAVE_EXPF@ +# undef expf _GL_FUNCDECL_SYS (expf, float, (float x)); -# endif +# endif _GL_CXXALIAS_SYS (expf, float, (float x)); +# endif _GL_CXXALIASWARN (expf); #elif defined GNULIB_POSIXCHECK # undef expf @@ -550,11 +640,20 @@ #endif #if @GNULIB_EXPL@ -# if !@HAVE_EXPL@ || !@HAVE_DECL_EXPL@ -# undef expl +# if @REPLACE_EXPL@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef expl +# define expl rpl_expl +# endif +_GL_FUNCDECL_RPL (expl, long double, (long double x)); +_GL_CXXALIAS_RPL (expl, long double, (long double x)); +# else +# if !@HAVE_EXPL@ || !@HAVE_DECL_EXPL@ +# undef expl _GL_FUNCDECL_SYS (expl, long double, (long double x)); -# endif +# endif _GL_CXXALIAS_SYS (expl, long double, (long double x)); +# endif _GL_CXXALIASWARN (expl); #elif defined GNULIB_POSIXCHECK # undef expl @@ -593,7 +692,9 @@ # endif _GL_CXXALIAS_SYS (exp2, double, (double x)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (exp2); +# endif #elif defined GNULIB_POSIXCHECK # undef exp2 # if HAVE_RAW_DECL_EXP2 @@ -664,7 +765,9 @@ # endif _GL_CXXALIAS_SYS (expm1, double, (double x)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (expm1); +# endif #elif defined GNULIB_POSIXCHECK # undef expm1 # if HAVE_RAW_DECL_EXPM1 @@ -674,11 +777,22 @@ #endif #if @GNULIB_EXPM1L@ -# if !@HAVE_DECL_EXPM1L@ -# undef expm1l +# if @REPLACE_EXPM1L@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef expm1l +# define expm1l rpl_expm1l +# endif +_GL_FUNCDECL_RPL (expm1l, long double, (long double x)); +_GL_CXXALIAS_RPL (expm1l, long double, (long double x)); +# else +# if !@HAVE_DECL_EXPM1L@ +# undef expm1l +# if !(defined __cplusplus && defined _AIX) _GL_FUNCDECL_SYS (expm1l, long double, (long double x)); -# endif +# endif +# endif _GL_CXXALIAS_SYS (expm1l, long double, (long double x)); +# endif _GL_CXXALIASWARN (expm1l); #elif defined GNULIB_POSIXCHECK # undef expm1l @@ -764,7 +878,9 @@ # else _GL_CXXALIAS_SYS (floor, double, (double x)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (floor); +# endif #endif #if @GNULIB_FLOORL@ @@ -802,6 +918,7 @@ _GL_CXXALIAS_RPL (fmaf, float, (float x, float y, float z)); # else # if !@HAVE_FMAF@ +# undef fmaf _GL_FUNCDECL_SYS (fmaf, float, (float x, float y, float z)); # endif _GL_CXXALIAS_SYS (fmaf, float, (float x, float y, float z)); @@ -825,11 +942,14 @@ _GL_CXXALIAS_RPL (fma, double, (double x, double y, double z)); # else # if !@HAVE_FMA@ +# undef fma _GL_FUNCDECL_SYS (fma, double, (double x, double y, double z)); # endif _GL_CXXALIAS_SYS (fma, double, (double x, double y, double z)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (fma); +# endif #elif defined GNULIB_POSIXCHECK # undef fma # if HAVE_RAW_DECL_FMA @@ -851,8 +971,10 @@ # else # if !@HAVE_FMAL@ # undef fmal +# if !(defined __cplusplus && defined _AIX) _GL_FUNCDECL_SYS (fmal, long double, (long double x, long double y, long double z)); +# endif # endif _GL_CXXALIAS_SYS (fmal, long double, (long double x, long double y, long double z)); @@ -902,7 +1024,9 @@ # else _GL_CXXALIAS_SYS (fmod, double, (double x, double y)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (fmod); +# endif #elif defined GNULIB_POSIXCHECK # undef fmod # if HAVE_RAW_DECL_FMOD @@ -985,7 +1109,9 @@ # else _GL_CXXALIAS_SYS (frexp, double, (double x, int *expptr)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN1 (frexp, double, (double x, int *expptr)); +# endif #elif defined GNULIB_POSIXCHECK # undef frexp /* Assume frexp is always declared. */ @@ -1065,7 +1191,9 @@ # else _GL_CXXALIAS_SYS (hypot, double, (double x, double y)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (hypot); +# endif #elif defined GNULIB_POSIXCHECK # undef hypot # if HAVE_RAW_DECL_HYPOT @@ -1136,7 +1264,9 @@ # endif _GL_CXXALIAS_SYS (ilogb, int, (double x)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (ilogb); +# endif #elif defined GNULIB_POSIXCHECK # undef ilogb # if HAVE_RAW_DECL_ILOGB @@ -1146,10 +1276,19 @@ #endif #if @GNULIB_ILOGBL@ -# if !@HAVE_ILOGBL@ +# if @REPLACE_ILOGBL@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef ilogbl +# define ilogbl rpl_ilogbl +# endif +_GL_FUNCDECL_RPL (ilogbl, int, (long double x)); +_GL_CXXALIAS_RPL (ilogbl, int, (long double x)); +# else +# if !@HAVE_ILOGBL@ _GL_FUNCDECL_SYS (ilogbl, int, (long double x)); -# endif +# endif _GL_CXXALIAS_SYS (ilogbl, int, (long double x)); +# endif _GL_CXXALIASWARN (ilogbl); #elif defined GNULIB_POSIXCHECK # undef ilogbl @@ -1239,7 +1378,9 @@ # else _GL_CXXALIAS_SYS (log, double, (double x)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (log); +# endif #elif defined GNULIB_POSIXCHECK # undef log # if HAVE_RAW_DECL_LOG @@ -1308,7 +1449,9 @@ # else _GL_CXXALIAS_SYS (log10, double, (double x)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (log10); +# endif #elif defined GNULIB_POSIXCHECK # undef log10 # if HAVE_RAW_DECL_LOG10 @@ -1379,7 +1522,9 @@ # endif _GL_CXXALIAS_SYS (log1p, double, (double x)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (log1p); +# endif #elif defined GNULIB_POSIXCHECK # undef log1p # if HAVE_RAW_DECL_LOG1P @@ -1451,7 +1596,9 @@ # endif _GL_CXXALIAS_SYS (log2, double, (double x)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (log2); +# endif #elif defined GNULIB_POSIXCHECK # undef log2 # if HAVE_RAW_DECL_LOG2 @@ -1521,7 +1668,9 @@ # endif _GL_CXXALIAS_SYS (logb, double, (double x)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (logb); +# endif #elif defined GNULIB_POSIXCHECK # undef logb # if HAVE_RAW_DECL_LOGB @@ -1589,7 +1738,9 @@ # else _GL_CXXALIAS_SYS (modf, double, (double x, double *iptr)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (modf); +# endif #elif defined GNULIB_POSIXCHECK # undef modf # if HAVE_RAW_DECL_MODF @@ -1678,7 +1829,9 @@ # endif _GL_CXXALIAS_SYS (remainder, double, (double x, double y)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (remainder); +# endif #elif defined GNULIB_POSIXCHECK # undef remainder # if HAVE_RAW_DECL_REMAINDER @@ -1698,7 +1851,9 @@ # else # if !@HAVE_DECL_REMAINDERL@ # undef remainderl +# if !(defined __cplusplus && defined _AIX) _GL_FUNCDECL_SYS (remainderl, long double, (long double x, long double y)); +# endif # endif _GL_CXXALIAS_SYS (remainderl, long double, (long double x, long double y)); # endif @@ -1731,7 +1886,9 @@ _GL_FUNCDECL_SYS (rint, double, (double x)); # endif _GL_CXXALIAS_SYS (rint, double, (double x)); +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (rint); +# endif #elif defined GNULIB_POSIXCHECK # undef rint # if HAVE_RAW_DECL_RINT @@ -1741,10 +1898,19 @@ #endif #if @GNULIB_RINTL@ -# if !@HAVE_RINTL@ +# if @REPLACE_RINTL@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef rintl +# define rintl rpl_rintl +# endif +_GL_FUNCDECL_RPL (rintl, long double, (long double x)); +_GL_CXXALIAS_RPL (rintl, long double, (long double x)); +# else +# if !@HAVE_RINTL@ _GL_FUNCDECL_SYS (rintl, long double, (long double x)); -# endif +# endif _GL_CXXALIAS_SYS (rintl, long double, (long double x)); +# endif _GL_CXXALIASWARN (rintl); #elif defined GNULIB_POSIXCHECK # undef rintl @@ -1792,7 +1958,9 @@ # endif _GL_CXXALIAS_SYS (round, double, (double x)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (round); +# endif #elif defined GNULIB_POSIXCHECK # undef round # if HAVE_RAW_DECL_ROUND @@ -1812,7 +1980,9 @@ # else # if !@HAVE_DECL_ROUNDL@ # undef roundl +# if !(defined __cplusplus && defined _AIX) _GL_FUNCDECL_SYS (roundl, long double, (long double x)); +# endif # endif _GL_CXXALIAS_SYS (roundl, long double, (long double x)); # endif @@ -1827,11 +1997,20 @@ #if @GNULIB_SINF@ -# if !@HAVE_SINF@ -# undef sinf +# if @REPLACE_SINF@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef sinf +# define sinf rpl_sinf +# endif +_GL_FUNCDECL_RPL (sinf, float, (float x)); +_GL_CXXALIAS_RPL (sinf, float, (float x)); +# else +# if !@HAVE_SINF@ + # undef sinf _GL_FUNCDECL_SYS (sinf, float, (float x)); -# endif +# endif _GL_CXXALIAS_SYS (sinf, float, (float x)); +# endif _GL_CXXALIASWARN (sinf); #elif defined GNULIB_POSIXCHECK # undef sinf @@ -1858,11 +2037,20 @@ #if @GNULIB_SINHF@ -# if !@HAVE_SINHF@ -# undef sinhf +# if @REPLACE_SINHF@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef sinhf +# define sinhf rpl_sinhf +# endif +_GL_FUNCDECL_RPL (sinhf, float, (float x)); +_GL_CXXALIAS_RPL (sinhf, float, (float x)); +# else +# if !@HAVE_SINHF@ +# undef sinhf _GL_FUNCDECL_SYS (sinhf, float, (float x)); -# endif +# endif _GL_CXXALIAS_SYS (sinhf, float, (float x)); +# endif _GL_CXXALIASWARN (sinhf); #elif defined GNULIB_POSIXCHECK # undef sinhf @@ -1874,11 +2062,20 @@ #if @GNULIB_SQRTF@ -# if !@HAVE_SQRTF@ -# undef sqrtf +# if @REPLACE_SQRTF@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef sqrtf +# define sqrtf rpl_sqrtf +# endif +_GL_FUNCDECL_RPL (sqrtf, float, (float x)); +_GL_CXXALIAS_RPL (sqrtf, float, (float x)); +# else +# if !@HAVE_SQRTF@ +# undef sqrtf _GL_FUNCDECL_SYS (sqrtf, float, (float x)); -# endif +# endif _GL_CXXALIAS_SYS (sqrtf, float, (float x)); +# endif _GL_CXXALIASWARN (sqrtf); #elif defined GNULIB_POSIXCHECK # undef sqrtf @@ -1914,11 +2111,20 @@ #if @GNULIB_TANF@ -# if !@HAVE_TANF@ -# undef tanf +# if @REPLACE_TANF@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef tanf +# define tanf rpl_tanf +# endif +_GL_FUNCDECL_RPL (tanf, float, (float x)); +_GL_CXXALIAS_RPL (tanf, float, (float x)); +# else +# if !@HAVE_TANF@ +# undef tanf _GL_FUNCDECL_SYS (tanf, float, (float x)); -# endif +# endif _GL_CXXALIAS_SYS (tanf, float, (float x)); +# endif _GL_CXXALIASWARN (tanf); #elif defined GNULIB_POSIXCHECK # undef tanf @@ -1945,11 +2151,20 @@ #if @GNULIB_TANHF@ -# if !@HAVE_TANHF@ -# undef tanhf +# if @REPLACE_TANHF@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef tanhf +# define tanhf rpl_tanhf +# endif +_GL_FUNCDECL_RPL (tanhf, float, (float x)); +_GL_CXXALIAS_RPL (tanhf, float, (float x)); +# else +# if !@HAVE_TANHF@ +# undef tanhf _GL_FUNCDECL_SYS (tanhf, float, (float x)); -# endif +# endif _GL_CXXALIAS_SYS (tanhf, float, (float x)); +# endif _GL_CXXALIASWARN (tanhf); #elif defined GNULIB_POSIXCHECK # undef tanhf @@ -1997,7 +2212,9 @@ # endif _GL_CXXALIAS_SYS (trunc, double, (double x)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (trunc); +# endif #elif defined GNULIB_POSIXCHECK # undef trunc # if HAVE_RAW_DECL_TRUNC @@ -2049,7 +2266,14 @@ # if defined isfinite || defined GNULIB_NAMESPACE _GL_MATH_CXX_REAL_FLOATING_DECL_1 (isfinite) # undef isfinite -_GL_MATH_CXX_REAL_FLOATING_DECL_2 (isfinite) +# if __GNUC__ >= 6 || (defined __clang__ && !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined _AIX)) + /* This platform's <cmath> possibly defines isfinite through a set of inline + functions. */ +_GL_MATH_CXX_REAL_FLOATING_DECL_2 (isfinite, rpl_isfinite, bool) +# define isfinite rpl_isfinite +# else +_GL_MATH_CXX_REAL_FLOATING_DECL_2 (isfinite, isfinite, bool) +# endif # endif # endif #elif defined GNULIB_POSIXCHECK @@ -2076,7 +2300,14 @@ # if defined isinf || defined GNULIB_NAMESPACE _GL_MATH_CXX_REAL_FLOATING_DECL_1 (isinf) # undef isinf -_GL_MATH_CXX_REAL_FLOATING_DECL_2 (isinf) +# if __GNUC__ >= 6 || (defined __clang__ && !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__)) + /* This platform's <cmath> possibly defines isinf through a set of inline + functions. */ +_GL_MATH_CXX_REAL_FLOATING_DECL_2 (isinf, rpl_isinf, bool) +# define isinf rpl_isinf +# else +_GL_MATH_CXX_REAL_FLOATING_DECL_2 (isinf, isinf, bool) +# endif # endif # endif #elif defined GNULIB_POSIXCHECK @@ -2093,7 +2324,7 @@ # if @HAVE_ISNANF@ /* The original <math.h> included above provides a declaration of isnan macro or (older) isnanf function. */ -# if __GNUC__ >= 4 +# if __GNUC__ >= 4 && (!defined __clang__ || __has_builtin (__builtin_isnanf)) /* GCC 4.0 and newer provides three built-ins for isnan. */ # undef isnanf # define isnanf(x) __builtin_isnanf ((float)(x)) @@ -2137,7 +2368,7 @@ # if @HAVE_ISNANL@ /* The original <math.h> included above provides a declaration of isnan macro or (older) isnanl function. */ -# if __GNUC__ >= 4 +# if __GNUC__ >= 4 && (!defined __clang__ || __has_builtin (__builtin_isnanl)) /* GCC 4.0 and newer provides three built-ins for isnan. */ # undef isnanl # define isnanl(x) __builtin_isnanl ((long double)(x)) @@ -2160,7 +2391,7 @@ isnanf.h (e.g.) here, because those may end up being macros that recursively expand back to isnan. So use the gnulib replacements for them directly. */ -# if @HAVE_ISNANF@ && __GNUC__ >= 4 +# if @HAVE_ISNANF@ && __GNUC__ >= 4 && (!defined __clang__ || __has_builtin (__builtin_isnanf)) # define gl_isnan_f(x) __builtin_isnanf ((float)(x)) # else _GL_EXTERN_C int rpl_isnanf (float x); @@ -2172,7 +2403,7 @@ _GL_EXTERN_C int rpl_isnand (double x); # define gl_isnan_d(x) rpl_isnand (x) # endif -# if @HAVE_ISNANL@ && __GNUC__ >= 4 +# if @HAVE_ISNANL@ && __GNUC__ >= 4 && (!defined __clang__ || __has_builtin (__builtin_isnanl)) # define gl_isnan_l(x) __builtin_isnanl ((long double)(x)) # else _GL_EXTERN_C int rpl_isnanl (long double x) _GL_ATTRIBUTE_CONST; @@ -2183,7 +2414,7 @@ (sizeof (x) == sizeof (long double) ? gl_isnan_l (x) : \ sizeof (x) == sizeof (double) ? gl_isnan_d (x) : \ gl_isnan_f (x)) -# elif __GNUC__ >= 4 +# elif __GNUC__ >= 4 && (!defined __clang__ || (__has_builtin (__builtin_isnanf) && __has_builtin (__builtin_isnanl))) # undef isnan # define isnan(x) \ (sizeof (x) == sizeof (long double) ? __builtin_isnanl ((long double)(x)) : \ @@ -2194,7 +2425,14 @@ # if defined isnan || defined GNULIB_NAMESPACE _GL_MATH_CXX_REAL_FLOATING_DECL_1 (isnan) # undef isnan -_GL_MATH_CXX_REAL_FLOATING_DECL_2 (isnan) +# if __GNUC__ >= 6 || (defined __clang__ && !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__)) + /* This platform's <cmath> possibly defines isnan through a set of inline + functions. */ +_GL_MATH_CXX_REAL_FLOATING_DECL_2 (isnan, rpl_isnan, bool) +# define isnan rpl_isnan +# else +_GL_MATH_CXX_REAL_FLOATING_DECL_2 (isnan, isnan, bool) +# endif # endif # else /* Ensure isnan is a macro. */ @@ -2221,7 +2459,7 @@ sizeof (x) == sizeof (double) ? __builtin_signbit (x) : \ __builtin_signbitf (x)) # endif -# if @REPLACE_SIGNBIT@ +# if @REPLACE_SIGNBIT@ && !GNULIB_defined_signbit # undef signbit _GL_EXTERN_C int gl_signbitf (float arg); _GL_EXTERN_C int gl_signbitd (double arg); @@ -2264,12 +2502,20 @@ (sizeof (x) == sizeof (long double) ? gl_signbitl (x) : \ sizeof (x) == sizeof (double) ? gl_signbitd (x) : \ gl_signbitf (x)) +# define GNULIB_defined_signbit 1 # endif # ifdef __cplusplus # if defined signbit || defined GNULIB_NAMESPACE _GL_MATH_CXX_REAL_FLOATING_DECL_1 (signbit) # undef signbit -_GL_MATH_CXX_REAL_FLOATING_DECL_2 (signbit) +# if __GNUC__ >= 6 || (defined __clang__ && !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined _AIX)) + /* This platform's <cmath> possibly defines signbit through a set of inline + functions. */ +_GL_MATH_CXX_REAL_FLOATING_DECL_2 (signbit, rpl_signbit, bool) +# define signbit rpl_signbit +# else +_GL_MATH_CXX_REAL_FLOATING_DECL_2 (signbit, signbit, bool) +# endif # endif # endif #elif defined GNULIB_POSIXCHECK diff -Nru gdb-9.1/gnulib/import/mbrtowc.c gdb-10.2/gnulib/import/mbrtowc.c --- gdb-9.1/gnulib/import/mbrtowc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/mbrtowc.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Convert multibyte character to wide character. - Copyright (C) 1999-2002, 2005-2016 Free Software Foundation, Inc. + Copyright (C) 1999-2002, 2005-2020 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2008. This program is free software: you can redistribute it and/or modify @@ -13,321 +13,66 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <wchar.h> -#if C_LOCALE_MAYBE_EILSEQ -# include "hard-locale.h" -# include <locale.h> -#endif - #if GNULIB_defined_mbstate_t -/* Implement mbrtowc() on top of mbtowc(). */ +/* Implement mbrtowc() on top of mbtowc() for the non-UTF-8 locales + and directly for the UTF-8 locales. */ # include <errno.h> +# include <stdint.h> # include <stdlib.h> -# include "localcharset.h" -# include "streq.h" -# include "verify.h" - - -verify (sizeof (mbstate_t) >= 4); - -static char internal_state[4]; - -size_t -mbrtowc (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps) -{ - char *pstate = (char *)ps; +# if defined _WIN32 && !defined __CYGWIN__ - if (s == NULL) - { - pwc = NULL; - s = ""; - n = 1; - } +# define WIN32_LEAN_AND_MEAN /* avoid including junk */ +# include <windows.h> - if (n == 0) - return (size_t)(-2); +# elif HAVE_PTHREAD_API - /* Here n > 0. */ +# include <pthread.h> +# if HAVE_THREADS_H && HAVE_WEAK_SYMBOLS +# include <threads.h> +# pragma weak thrd_exit +# define c11_threads_in_use() (thrd_exit != NULL) +# else +# define c11_threads_in_use() 0 +# endif - if (pstate == NULL) - pstate = internal_state; +# elif HAVE_THREADS_H - { - size_t nstate = pstate[0]; - char buf[4]; - const char *p; - size_t m; +# include <threads.h> - switch (nstate) - { - case 0: - p = s; - m = n; - break; - case 3: - buf[2] = pstate[3]; - /*FALLTHROUGH*/ - case 2: - buf[1] = pstate[2]; - /*FALLTHROUGH*/ - case 1: - buf[0] = pstate[1]; - p = buf; - m = nstate; - buf[m++] = s[0]; - if (n >= 2 && m < 4) - { - buf[m++] = s[1]; - if (n >= 3 && m < 4) - buf[m++] = s[2]; - } - break; - default: - errno = EINVAL; - return (size_t)(-1); - } - - /* Here m > 0. */ - -# if __GLIBC__ || defined __UCLIBC__ - /* Work around bug <http://sourceware.org/bugzilla/show_bug.cgi?id=9674> */ - mbtowc (NULL, NULL, 0); # endif - { - int res = mbtowc (pwc, p, m); - - if (res >= 0) - { - if (pwc != NULL && ((*pwc == 0) != (res == 0))) - abort (); - if (nstate >= (res > 0 ? res : 1)) - abort (); - res -= nstate; - pstate[0] = 0; - return res; - } - - /* mbtowc does not distinguish between invalid and incomplete multibyte - sequences. But mbrtowc needs to make this distinction. - There are two possible approaches: - - Use iconv() and its return value. - - Use built-in knowledge about the possible encodings. - Given the low quality of implementation of iconv() on the systems that - lack mbrtowc(), we use the second approach. - The possible encodings are: - - 8-bit encodings, - - EUC-JP, EUC-KR, GB2312, EUC-TW, BIG5, GB18030, SJIS, - - UTF-8. - Use specialized code for each. */ - if (m >= 4 || m >= MB_CUR_MAX) - goto invalid; - /* Here MB_CUR_MAX > 1 and 0 < m < 4. */ - { - const char *encoding = locale_charset (); - - if (STREQ_OPT (encoding, "UTF-8", 'U', 'T', 'F', '-', '8', 0, 0, 0, 0)) - { - /* Cf. unistr/u8-mblen.c. */ - unsigned char c = (unsigned char) p[0]; - - if (c >= 0xc2) - { - if (c < 0xe0) - { - if (m == 1) - goto incomplete; - } - else if (c < 0xf0) - { - if (m == 1) - goto incomplete; - if (m == 2) - { - unsigned char c2 = (unsigned char) p[1]; - - if ((c2 ^ 0x80) < 0x40 - && (c >= 0xe1 || c2 >= 0xa0) - && (c != 0xed || c2 < 0xa0)) - goto incomplete; - } - } - else if (c <= 0xf4) - { - if (m == 1) - goto incomplete; - else /* m == 2 || m == 3 */ - { - unsigned char c2 = (unsigned char) p[1]; - - if ((c2 ^ 0x80) < 0x40 - && (c >= 0xf1 || c2 >= 0x90) - && (c < 0xf4 || (c == 0xf4 && c2 < 0x90))) - { - if (m == 2) - goto incomplete; - else /* m == 3 */ - { - unsigned char c3 = (unsigned char) p[2]; - - if ((c3 ^ 0x80) < 0x40) - goto incomplete; - } - } - } - } - } - goto invalid; - } - - /* As a reference for this code, you can use the GNU libiconv - implementation. Look for uses of the RET_TOOFEW macro. */ - - if (STREQ_OPT (encoding, - "EUC-JP", 'E', 'U', 'C', '-', 'J', 'P', 0, 0, 0)) - { - if (m == 1) - { - unsigned char c = (unsigned char) p[0]; - - if ((c >= 0xa1 && c < 0xff) || c == 0x8e || c == 0x8f) - goto incomplete; - } - if (m == 2) - { - unsigned char c = (unsigned char) p[0]; - - if (c == 0x8f) - { - unsigned char c2 = (unsigned char) p[1]; - - if (c2 >= 0xa1 && c2 < 0xff) - goto incomplete; - } - } - goto invalid; - } - if (STREQ_OPT (encoding, - "EUC-KR", 'E', 'U', 'C', '-', 'K', 'R', 0, 0, 0) - || STREQ_OPT (encoding, - "GB2312", 'G', 'B', '2', '3', '1', '2', 0, 0, 0) - || STREQ_OPT (encoding, - "BIG5", 'B', 'I', 'G', '5', 0, 0, 0, 0, 0)) - { - if (m == 1) - { - unsigned char c = (unsigned char) p[0]; - - if (c >= 0xa1 && c < 0xff) - goto incomplete; - } - goto invalid; - } - if (STREQ_OPT (encoding, - "EUC-TW", 'E', 'U', 'C', '-', 'T', 'W', 0, 0, 0)) - { - if (m == 1) - { - unsigned char c = (unsigned char) p[0]; - - if ((c >= 0xa1 && c < 0xff) || c == 0x8e) - goto incomplete; - } - else /* m == 2 || m == 3 */ - { - unsigned char c = (unsigned char) p[0]; - if (c == 0x8e) - goto incomplete; - } - goto invalid; - } - if (STREQ_OPT (encoding, - "GB18030", 'G', 'B', '1', '8', '0', '3', '0', 0, 0)) - { - if (m == 1) - { - unsigned char c = (unsigned char) p[0]; - - if ((c >= 0x90 && c <= 0xe3) || (c >= 0xf8 && c <= 0xfe)) - goto incomplete; - } - else /* m == 2 || m == 3 */ - { - unsigned char c = (unsigned char) p[0]; - - if (c >= 0x90 && c <= 0xe3) - { - unsigned char c2 = (unsigned char) p[1]; - - if (c2 >= 0x30 && c2 <= 0x39) - { - if (m == 2) - goto incomplete; - else /* m == 3 */ - { - unsigned char c3 = (unsigned char) p[2]; - - if (c3 >= 0x81 && c3 <= 0xfe) - goto incomplete; - } - } - } - } - goto invalid; - } - if (STREQ_OPT (encoding, "SJIS", 'S', 'J', 'I', 'S', 0, 0, 0, 0, 0)) - { - if (m == 1) - { - unsigned char c = (unsigned char) p[0]; - - if ((c >= 0x81 && c <= 0x9f) || (c >= 0xe0 && c <= 0xea) - || (c >= 0xf0 && c <= 0xf9)) - goto incomplete; - } - goto invalid; - } - - /* An unknown multibyte encoding. */ - goto incomplete; - } +# include "attribute.h" +# include "verify.h" +# include "lc-charset-dispatch.h" +# include "mbtowc-lock.h" - incomplete: - { - size_t k = nstate; - /* Here 0 <= k < m < 4. */ - pstate[++k] = s[0]; - if (k < m) - { - pstate[++k] = s[1]; - if (k < m) - pstate[++k] = s[2]; - } - if (k != m) - abort (); - } - pstate[0] = m; - return (size_t)(-2); +verify (sizeof (mbstate_t) >= 4); +static char internal_state[4]; - invalid: - errno = EILSEQ; - /* The conversion state is undefined, says POSIX. */ - return (size_t)(-1); - } - } +size_t +mbrtowc (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps) +{ +# define FITS_IN_CHAR_TYPE(wc) ((wc) <= WCHAR_MAX) +# include "mbrtowc-impl.h" } #else /* Override the system's mbrtowc() function. */ +# if MBRTOWC_IN_C_LOCALE_MAYBE_EILSEQ +# include "hard-locale.h" +# include <locale.h> +# endif + # undef mbrtowc size_t @@ -385,14 +130,20 @@ } # endif +# if MBRTOWC_STORES_INCOMPLETE_BUG + ret = mbrtowc (&wc, s, n, ps); + if (ret < (size_t) -2 && pwc != NULL) + *pwc = wc; +# else ret = mbrtowc (pwc, s, n, ps); +# endif # if MBRTOWC_NUL_RETVAL_BUG if (ret < (size_t) -2 && !*pwc) return 0; # endif -# if C_LOCALE_MAYBE_EILSEQ +# if MBRTOWC_IN_C_LOCALE_MAYBE_EILSEQ if ((size_t) -2 <= ret && n != 0 && ! hard_locale (LC_CTYPE)) { unsigned char uc = *s; diff -Nru gdb-9.1/gnulib/import/mbrtowc-impl.h gdb-10.2/gnulib/import/mbrtowc-impl.h --- gdb-9.1/gnulib/import/mbrtowc-impl.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/mbrtowc-impl.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,262 @@ +/* Convert multibyte character to wide character. + Copyright (C) 1999-2002, 2005-2020 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2008. */ + +/* This file contains the body of the mbrtowc and mbrtoc32 functions, + when GNULIB_defined_mbstate_t is defined. */ + + char *pstate = (char *)ps; + + if (s == NULL) + { + pwc = NULL; + s = ""; + n = 1; + } + + if (n == 0) + return (size_t)(-2); + + /* Here n > 0. */ + + if (pstate == NULL) + pstate = internal_state; + + { + size_t nstate = pstate[0]; + char buf[4]; + const char *p; + size_t m; + enc_t enc; + int res; + + switch (nstate) + { + case 0: + p = s; + m = n; + break; + case 3: + buf[2] = pstate[3]; + FALLTHROUGH; + case 2: + buf[1] = pstate[2]; + FALLTHROUGH; + case 1: + buf[0] = pstate[1]; + p = buf; + m = nstate; + buf[m++] = s[0]; + if (n >= 2 && m < 4) + { + buf[m++] = s[1]; + if (n >= 3 && m < 4) + buf[m++] = s[2]; + } + break; + default: + errno = EINVAL; + return (size_t)(-1); + } + + /* Here m > 0. */ + + enc = locale_encoding_classification (); + + if (enc == enc_utf8) /* UTF-8 */ + { + /* Achieve + - multi-thread safety and + - the ability to produce wide character values > WCHAR_MAX + by not calling mbtowc() at all. */ +#include "mbrtowc-impl-utf8.h" + } + else + { + /* The hidden internal state of mbtowc would make this function not + multi-thread safe. Achieve multi-thread safety through a lock. */ + wchar_t wc; + res = mbtowc_with_lock (&wc, p, m); + + if (res >= 0) + { + if ((wc == 0) != (res == 0)) + abort (); + if (pwc != NULL) + *pwc = wc; + goto success; + } + + /* mbtowc does not distinguish between invalid and incomplete multibyte + sequences. But mbrtowc needs to make this distinction. + There are two possible approaches: + - Use iconv() and its return value. + - Use built-in knowledge about the possible encodings. + Given the low quality of implementation of iconv() on the systems + that lack mbrtowc(), we use the second approach. + The possible encodings are: + - 8-bit encodings, + - EUC-JP, EUC-KR, GB2312, EUC-TW, BIG5, GB18030, SJIS, + - UTF-8 (already handled above). + Use specialized code for each. */ + if (m >= 4 || m >= MB_CUR_MAX) + goto invalid; + /* Here MB_CUR_MAX > 1 and 0 < m < 4. */ + switch (enc) + { + /* As a reference for this code, you can use the GNU libiconv + implementation. Look for uses of the RET_TOOFEW macro. */ + + case enc_eucjp: /* EUC-JP */ + { + if (m == 1) + { + unsigned char c = (unsigned char) p[0]; + + if ((c >= 0xa1 && c < 0xff) || c == 0x8e || c == 0x8f) + goto incomplete; + } + if (m == 2) + { + unsigned char c = (unsigned char) p[0]; + + if (c == 0x8f) + { + unsigned char c2 = (unsigned char) p[1]; + + if (c2 >= 0xa1 && c2 < 0xff) + goto incomplete; + } + } + goto invalid; + } + + case enc_94: /* EUC-KR, GB2312, BIG5 */ + { + if (m == 1) + { + unsigned char c = (unsigned char) p[0]; + + if (c >= 0xa1 && c < 0xff) + goto incomplete; + } + goto invalid; + } + + case enc_euctw: /* EUC-TW */ + { + if (m == 1) + { + unsigned char c = (unsigned char) p[0]; + + if ((c >= 0xa1 && c < 0xff) || c == 0x8e) + goto incomplete; + } + else /* m == 2 || m == 3 */ + { + unsigned char c = (unsigned char) p[0]; + + if (c == 0x8e) + goto incomplete; + } + goto invalid; + } + + case enc_gb18030: /* GB18030 */ + { + if (m == 1) + { + unsigned char c = (unsigned char) p[0]; + + if ((c >= 0x90 && c <= 0xe3) || (c >= 0xf8 && c <= 0xfe)) + goto incomplete; + } + else /* m == 2 || m == 3 */ + { + unsigned char c = (unsigned char) p[0]; + + if (c >= 0x90 && c <= 0xe3) + { + unsigned char c2 = (unsigned char) p[1]; + + if (c2 >= 0x30 && c2 <= 0x39) + { + if (m == 2) + goto incomplete; + else /* m == 3 */ + { + unsigned char c3 = (unsigned char) p[2]; + + if (c3 >= 0x81 && c3 <= 0xfe) + goto incomplete; + } + } + } + } + goto invalid; + } + + case enc_sjis: /* SJIS */ + { + if (m == 1) + { + unsigned char c = (unsigned char) p[0]; + + if ((c >= 0x81 && c <= 0x9f) || (c >= 0xe0 && c <= 0xea) + || (c >= 0xf0 && c <= 0xf9)) + goto incomplete; + } + goto invalid; + } + + default: + /* An unknown multibyte encoding. */ + goto incomplete; + } + } + + success: + /* res >= 0 is the corrected return value of + mbtowc_with_lock (&wc, p, m). */ + if (nstate >= (res > 0 ? res : 1)) + abort (); + res -= nstate; + pstate[0] = 0; + return res; + + incomplete: + { + size_t k = nstate; + /* Here 0 <= k < m < 4. */ + pstate[++k] = s[0]; + if (k < m) + { + pstate[++k] = s[1]; + if (k < m) + pstate[++k] = s[2]; + } + if (k != m) + abort (); + } + pstate[0] = m; + return (size_t)(-2); + + invalid: + errno = EILSEQ; + /* The conversion state is undefined, says POSIX. */ + return (size_t)(-1); + } diff -Nru gdb-9.1/gnulib/import/mbrtowc-impl-utf8.h gdb-10.2/gnulib/import/mbrtowc-impl-utf8.h --- gdb-9.1/gnulib/import/mbrtowc-impl-utf8.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/mbrtowc-impl-utf8.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,138 @@ +/* Convert multibyte character to wide character. + Copyright (C) 1999-2002, 2005-2020 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2008. */ + +/* This file contains the part of the body of the mbrtowc and mbrtoc32 functions + that handles the special case of the UTF-8 encoding. */ + + /* Cf. unistr/u8-mbtouc.c. */ + unsigned char c = (unsigned char) p[0]; + + if (c < 0x80) + { + if (pwc != NULL) + *pwc = c; + res = (c == 0 ? 0 : 1); + goto success; + } + if (c >= 0xc2) + { + if (c < 0xe0) + { + if (m == 1) + goto incomplete; + else /* m >= 2 */ + { + unsigned char c2 = (unsigned char) p[1]; + + if ((c2 ^ 0x80) < 0x40) + { + if (pwc != NULL) + *pwc = ((unsigned int) (c & 0x1f) << 6) + | (unsigned int) (c2 ^ 0x80); + res = 2; + goto success; + } + } + } + else if (c < 0xf0) + { + if (m == 1) + goto incomplete; + else + { + unsigned char c2 = (unsigned char) p[1]; + + if ((c2 ^ 0x80) < 0x40 + && (c >= 0xe1 || c2 >= 0xa0) + && (c != 0xed || c2 < 0xa0)) + { + if (m == 2) + goto incomplete; + else /* m >= 3 */ + { + unsigned char c3 = (unsigned char) p[2]; + + if ((c3 ^ 0x80) < 0x40) + { + unsigned int wc = + (((unsigned int) (c & 0x0f) << 12) + | ((unsigned int) (c2 ^ 0x80) << 6) + | (unsigned int) (c3 ^ 0x80)); + + if (FITS_IN_CHAR_TYPE (wc)) + { + if (pwc != NULL) + *pwc = wc; + res = 3; + goto success; + } + } + } + } + } + } + else if (c <= 0xf4) + { + if (m == 1) + goto incomplete; + else + { + unsigned char c2 = (unsigned char) p[1]; + + if ((c2 ^ 0x80) < 0x40 + && (c >= 0xf1 || c2 >= 0x90) + && (c < 0xf4 || (c == 0xf4 && c2 < 0x90))) + { + if (m == 2) + goto incomplete; + else + { + unsigned char c3 = (unsigned char) p[2]; + + if ((c3 ^ 0x80) < 0x40) + { + if (m == 3) + goto incomplete; + else /* m >= 4 */ + { + unsigned char c4 = (unsigned char) p[3]; + + if ((c4 ^ 0x80) < 0x40) + { + unsigned int wc = + (((unsigned int) (c & 0x07) << 18) + | ((unsigned int) (c2 ^ 0x80) << 12) + | ((unsigned int) (c3 ^ 0x80) << 6) + | (unsigned int) (c4 ^ 0x80)); + + if (FITS_IN_CHAR_TYPE (wc)) + { + if (pwc != NULL) + *pwc = wc; + res = 4; + goto success; + } + } + } + } + } + } + } + } + } + goto invalid; diff -Nru gdb-9.1/gnulib/import/mbsinit.c gdb-10.2/gnulib/import/mbsinit.c --- gdb-9.1/gnulib/import/mbsinit.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/mbsinit.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Test for initial conversion state. - Copyright (C) 2008-2016 Free Software Foundation, Inc. + Copyright (C) 2008-2020 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2008. This program is free software: you can redistribute it and/or modify @@ -13,7 +13,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> @@ -22,17 +22,7 @@ #include "verify.h" -#if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__ - -/* On native Windows, 'mbstate_t' is defined as 'int'. */ - -int -mbsinit (const mbstate_t *ps) -{ - return ps == NULL || *ps == 0; -} - -#else +#if GNULIB_defined_mbstate_t /* Platforms that lack mbsinit() also lack mbrlen(), mbrtowc(), mbsrtowcs() and wcrtomb(), wcsrtombs(). @@ -45,6 +35,7 @@ We define the meaning of mbstate_t as follows: - In mb -> wc direction, mbstate_t's first byte contains the number of buffered bytes (in the range 0..3), followed by up to 3 buffered bytes. + See mbrtowc.c. - In wc -> mb direction, mbstate_t contains no information. In other words, it is always in the initial state. */ @@ -58,4 +49,22 @@ return pstate == NULL || pstate[0] == 0; } +#else + +int +mbsinit (const mbstate_t *ps) +{ +# if defined _WIN32 && !defined __CYGWIN__ + /* Native Windows. */ + /* MSVC defines 'mbstate_t' as an 8-byte struct; the first 4 bytes matter. + On mingw, 'mbstate_t' is sometimes defined as 'int', sometimes defined as + an 8-byte struct, of which the first 4 bytes matter. */ + return ps == NULL || *(const unsigned int *)ps == 0; +# else + /* Minix, HP-UX 11.00, Solaris 2.6, Interix, ... */ + /* Maybe this definition works, maybe not... */ + return ps == NULL || *(const char *)ps == 0; +# endif +} + #endif diff -Nru gdb-9.1/gnulib/import/mbsrtowcs.c gdb-10.2/gnulib/import/mbsrtowcs.c --- gdb-9.1/gnulib/import/mbsrtowcs.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/mbsrtowcs.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Convert string to wide string. - Copyright (C) 2008-2016 Free Software Foundation, Inc. + Copyright (C) 2008-2020 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2008. This program is free software: you can redistribute it and/or modify @@ -13,7 +13,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> @@ -29,4 +29,8 @@ extern mbstate_t _gl_mbsrtowcs_state; +#define FUNC mbsrtowcs +#define DCHAR_T wchar_t +#define INTERNAL_STATE _gl_mbsrtowcs_state +#define MBRTOWC mbrtowc #include "mbsrtowcs-impl.h" diff -Nru gdb-9.1/gnulib/import/mbsrtowcs-impl.h gdb-10.2/gnulib/import/mbsrtowcs-impl.h --- gdb-9.1/gnulib/import/mbsrtowcs-impl.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/mbsrtowcs-impl.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Convert string to wide string. - Copyright (C) 2008-2016 Free Software Foundation, Inc. + Copyright (C) 2008-2020 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2008. This program is free software: you can redistribute it and/or modify @@ -13,19 +13,19 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ size_t -mbsrtowcs (wchar_t *dest, const char **srcp, size_t len, mbstate_t *ps) +FUNC (DCHAR_T *dest, const char **srcp, size_t len, mbstate_t *ps) { if (ps == NULL) - ps = &_gl_mbsrtowcs_state; + ps = &INTERNAL_STATE; { const char *src = *srcp; if (dest != NULL) { - wchar_t *destptr = dest; + DCHAR_T *destptr = dest; for (; len > 0; destptr++, len--) { @@ -46,7 +46,7 @@ src_avail = 4 + strnlen1 (src + 4, MB_LEN_MAX - 4); /* Parse the next multibyte character. */ - ret = mbrtowc (destptr, src, src_avail, ps); + ret = MBRTOWC (destptr, src, src_avail, ps); if (ret == (size_t)(-2)) /* Encountered a multibyte character that extends past a '\0' byte @@ -93,7 +93,7 @@ src_avail = 4 + strnlen1 (src + 4, MB_LEN_MAX - 4); /* Parse the next multibyte character. */ - ret = mbrtowc (NULL, src, src_avail, &state); + ret = MBRTOWC (NULL, src, src_avail, &state); if (ret == (size_t)(-2)) /* Encountered a multibyte character that extends past a '\0' byte diff -Nru gdb-9.1/gnulib/import/mbsrtowcs-state.c gdb-10.2/gnulib/import/mbsrtowcs-state.c --- gdb-9.1/gnulib/import/mbsrtowcs-state.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/mbsrtowcs-state.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Convert string to wide string. - Copyright (C) 2008-2016 Free Software Foundation, Inc. + Copyright (C) 2008-2020 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2008. This program is free software: you can redistribute it and/or modify @@ -13,7 +13,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> @@ -23,7 +23,7 @@ mbstate_t _gl_mbsrtowcs_state /* The state must initially be in the "initial state"; so, zero-initialize it. On most systems, putting it into BSS is sufficient. Not so on Mac OS X 10.3, - see <http://lists.gnu.org/archive/html/bug-gnulib/2009-01/msg00329.html>. + see <https://lists.gnu.org/r/bug-gnulib/2009-01/msg00329.html>. When it needs an initializer, use 0 or {0} as initializer? 0 only works when mbstate_t is a scalar type (such as when gnulib defines it, or on AIX, IRIX, mingw). {0} works as an initializer in all cases: for a struct diff -Nru gdb-9.1/gnulib/import/mbtowc.c gdb-10.2/gnulib/import/mbtowc.c --- gdb-9.1/gnulib/import/mbtowc.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/mbtowc.c 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,26 @@ +/* Convert multibyte character to wide character. + Copyright (C) 2011-2020 Free Software Foundation, Inc. + Written by Bruno Haible <bruno@clisp.org>, 2011. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +#include <stdlib.h> + +#include <errno.h> +#include <string.h> +#include <wchar.h> + +#include "mbtowc-impl.h" diff -Nru gdb-9.1/gnulib/import/mbtowc-impl.h gdb-10.2/gnulib/import/mbtowc-impl.h --- gdb-9.1/gnulib/import/mbtowc-impl.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/mbtowc-impl.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,44 @@ +/* Convert multibyte character to wide character. + Copyright (C) 2011-2020 Free Software Foundation, Inc. + Written by Bruno Haible <bruno@clisp.org>, 2011. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* We don't need a static internal state, because the encoding is not state + dependent, and when mbrtowc returns (size_t)(-2). we throw the result + away. */ + +int +mbtowc (wchar_t *pwc, const char *s, size_t n) +{ + if (s == NULL) + return 0; + else + { + mbstate_t state; + wchar_t wc; + size_t result; + + memset (&state, 0, sizeof (mbstate_t)); + result = mbrtowc (&wc, s, n, &state); + if (result == (size_t)-1 || result == (size_t)-2) + { + errno = EILSEQ; + return -1; + } + if (pwc != NULL) + *pwc = wc; + return (wc == 0 ? 0 : result); + } +} diff -Nru gdb-9.1/gnulib/import/mbtowc-lock.c gdb-10.2/gnulib/import/mbtowc-lock.c --- gdb-9.1/gnulib/import/mbtowc-lock.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/mbtowc-lock.c 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,150 @@ +/* Return the internal lock used by mbrtowc and mbrtoc32. + Copyright (C) 2019-2020 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2019-2020. */ + +#include <config.h> + +/* When it is known that the gl_get_mbtowc_lock function is defined + by a dependency library, it should not be defined here. */ +#if OMIT_MBTOWC_LOCK + +/* This declaration is solely to ensure that after preprocessing + this file is never empty. */ +typedef int dummy; + +#else + +/* This file defines the internal lock used by mbrtowc and mbrtoc32. + It is a separate compilation unit, so that only one copy of it is + present when linking statically. */ + +/* Prohibit renaming this symbol. */ +# undef gl_get_mbtowc_lock + +/* Macro for exporting a symbol (function, not variable) defined in this file, + when compiled into a shared library. */ +# ifndef DLL_EXPORTED +# if HAVE_VISIBILITY + /* Override the effect of the compiler option '-fvisibility=hidden'. */ +# define DLL_EXPORTED __attribute__((__visibility__("default"))) +# elif defined _WIN32 || defined __CYGWIN__ +# define DLL_EXPORTED __declspec(dllexport) +# else +# define DLL_EXPORTED +# endif +# endif + +# if defined _WIN32 && !defined __CYGWIN__ + +# define WIN32_LEAN_AND_MEAN /* avoid including junk */ +# include <windows.h> + +# include "windows-initguard.h" + +/* The return type is a 'CRITICAL_SECTION *', not a 'glwthread_mutex_t *', + because the latter is not guaranteed to be a stable ABI in the future. */ + +/* Make sure the function gets exported from DLLs. */ +DLL_EXPORTED CRITICAL_SECTION *gl_get_mbtowc_lock (void); + +static glwthread_initguard_t guard = GLWTHREAD_INITGUARD_INIT; +static CRITICAL_SECTION lock; + +/* Returns the internal lock used by mbrtowc and mbrtoc32. */ +CRITICAL_SECTION * +gl_get_mbtowc_lock (void) +{ + if (!guard.done) + { + if (InterlockedIncrement (&guard.started) == 0) + { + /* This thread is the first one to need the lock. Initialize it. */ + InitializeCriticalSection (&lock); + guard.done = 1; + } + else + { + /* Don't let guard.started grow and wrap around. */ + InterlockedDecrement (&guard.started); + /* Yield the CPU while waiting for another thread to finish + initializing this mutex. */ + while (!guard.done) + Sleep (0); + } + } + return &lock; +} + +# elif HAVE_PTHREAD_API + +# include <pthread.h> + +static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; + +/* Make sure the function gets exported from shared libraries. */ +DLL_EXPORTED pthread_mutex_t *gl_get_mbtowc_lock (void); + +/* Returns the internal lock used by mbrtowc and mbrtoc32. */ +pthread_mutex_t * +gl_get_mbtowc_lock (void) +{ + return &mutex; +} + +# elif HAVE_THREADS_H + +# include <threads.h> +# include <stdlib.h> + +static int volatile init_needed = 1; +static once_flag init_once = ONCE_FLAG_INIT; +static mtx_t mutex; + +static void +atomic_init (void) +{ + if (mtx_init (&mutex, mtx_plain) != thrd_success) + abort (); + init_needed = 0; +} + +/* Make sure the function gets exported from shared libraries. */ +DLL_EXPORTED mtx_t *gl_get_mbtowc_lock (void); + +/* Returns the internal lock used by mbrtowc and mbrtoc32. */ +mtx_t * +gl_get_mbtowc_lock (void) +{ + if (init_needed) + call_once (&init_once, atomic_init); + return &mutex; +} + +# endif + +# if (defined _WIN32 || defined __CYGWIN__) && !defined _MSC_VER +/* Make sure the '__declspec(dllimport)' in mbrtowc.c and mbrtoc32.c does not + cause a link failure when no DLLs are involved. */ +# if defined _WIN64 || defined _LP64 +# define IMP(x) __imp_##x +# else +# define IMP(x) _imp__##x +# endif +void * IMP(gl_get_mbtowc_lock) = &gl_get_mbtowc_lock; +# endif + +#endif diff -Nru gdb-9.1/gnulib/import/mbtowc-lock.h gdb-10.2/gnulib/import/mbtowc-lock.h --- gdb-9.1/gnulib/import/mbtowc-lock.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/mbtowc-lock.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,115 @@ +/* Use the internal lock used by mbrtowc and mbrtoc32. + Copyright (C) 2019-2020 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2019-2020. */ + +/* Use a lock, so that no two threads can invoke mbtowc at the same time. */ + +static inline int +mbtowc_unlocked (wchar_t *pwc, const char *p, size_t m) +{ + /* Put the hidden internal state of mbtowc into its initial state. + This is needed at least with glibc, uClibc, and MSVC CRT. + See <https://sourceware.org/bugzilla/show_bug.cgi?id=9674>. */ + mbtowc (NULL, NULL, 0); + + return mbtowc (pwc, p, m); +} + +/* Prohibit renaming this symbol. */ +#undef gl_get_mbtowc_lock + +#if defined _WIN32 && !defined __CYGWIN__ + +extern __declspec(dllimport) CRITICAL_SECTION *gl_get_mbtowc_lock (void); + +static int +mbtowc_with_lock (wchar_t *pwc, const char *p, size_t m) +{ + CRITICAL_SECTION *lock = gl_get_mbtowc_lock (); + int ret; + + EnterCriticalSection (lock); + ret = mbtowc_unlocked (pwc, p, m); + LeaveCriticalSection (lock); + + return ret; +} + +#elif HAVE_PTHREAD_API /* AIX, IRIX, Cygwin */ + +extern +# if defined _WIN32 || defined __CYGWIN__ + __declspec(dllimport) +# endif + pthread_mutex_t *gl_get_mbtowc_lock (void); + +# if HAVE_WEAK_SYMBOLS /* IRIX */ + + /* Avoid the need to link with '-lpthread'. */ +# pragma weak pthread_mutex_lock +# pragma weak pthread_mutex_unlock + + /* Determine whether libpthread is in use. */ +# pragma weak pthread_mutexattr_gettype + /* See the comments in lock.h. */ +# define pthread_in_use() \ + (pthread_mutexattr_gettype != NULL || c11_threads_in_use ()) + +# else +# define pthread_in_use() 1 +# endif + +static int +mbtowc_with_lock (wchar_t *pwc, const char *p, size_t m) +{ + if (pthread_in_use()) + { + pthread_mutex_t *lock = gl_get_mbtowc_lock (); + int ret; + + if (pthread_mutex_lock (lock)) + abort (); + ret = mbtowc_unlocked (pwc, p, m); + if (pthread_mutex_unlock (lock)) + abort (); + + return ret; + } + else + return mbtowc_unlocked (pwc, p, m); +} + +#elif HAVE_THREADS_H + +extern mtx_t *gl_get_mbtowc_lock (void); + +static int +mbtowc_with_lock (wchar_t *pwc, const char *p, size_t m) +{ + mtx_t *lock = gl_get_mbtowc_lock (); + int ret; + + if (mtx_lock (lock) != thrd_success) + abort (); + ret = mbtowc_unlocked (pwc, p, m); + if (mtx_unlock (lock) != thrd_success) + abort (); + + return ret; +} + +#endif diff -Nru gdb-9.1/gnulib/import/memchr.c gdb-10.2/gnulib/import/memchr.c --- gdb-9.1/gnulib/import/memchr.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/memchr.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1993, 1996-1997, 1999-2000, 2003-2004, 2006, 2008-2016 +/* Copyright (C) 1991, 1993, 1996-1997, 1999-2000, 2003-2004, 2006, 2008-2020 Free Software Foundation, Inc. Based on strlen implementation by Torbjorn Granlund (tege@sics.se), @@ -21,7 +21,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License -along with this program. If not, see <http://www.gnu.org/licenses/>. */ +along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _LIBC # include <config.h> diff -Nru gdb-9.1/gnulib/import/memchr.valgrind gdb-10.2/gnulib/import/memchr.valgrind --- gdb-9.1/gnulib/import/memchr.valgrind 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/memchr.valgrind 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,20 @@ # Suppress a valgrind message about use of uninitialized memory in memchr(). + +# Copyright (C) 2009-2020 Free Software Foundation, Inc. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + # POSIX states that when the character is found, memchr must not read extra # bytes in an overestimated length (for example, where memchr is used to # implement strnlen). However, we use a safe word read to provide a speedup. diff -Nru gdb-9.1/gnulib/import/memmem.c gdb-10.2/gnulib/import/memmem.c --- gdb-9.1/gnulib/import/memmem.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/memmem.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 1991-1994, 1996-1998, 2000, 2004, 2007-2016 Free Software +/* Copyright (C) 1991-1994, 1996-1998, 2000, 2004, 2007-2020 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -13,7 +13,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along - with this program; if not, see <http://www.gnu.org/licenses/>. */ + with this program; if not, see <https://www.gnu.org/licenses/>. */ /* This particular implementation was written by Eric Blake, 2008. */ @@ -24,10 +24,6 @@ /* Specification of memmem. */ #include <string.h> -#ifndef _LIBC -# define __builtin_expect(expr, val) (expr) -#endif - #define RETURN_TYPE void * #define AVAILABLE(h, h_l, j, n_l) ((j) <= (h_l) - (n_l)) #include "str-two-way.h" diff -Nru gdb-9.1/gnulib/import/mempcpy.c gdb-10.2/gnulib/import/mempcpy.c --- gdb-9.1/gnulib/import/mempcpy.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/mempcpy.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Copy memory area and return pointer after last written byte. - Copyright (C) 2003, 2007, 2009-2016 Free Software Foundation, Inc. + Copyright (C) 2003, 2007, 2009-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -12,7 +12,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, see <http://www.gnu.org/licenses/>. */ + along with this program; if not, see <https://www.gnu.org/licenses/>. */ #include <config.h> diff -Nru gdb-9.1/gnulib/import/memrchr.c gdb-10.2/gnulib/import/memrchr.c --- gdb-9.1/gnulib/import/memrchr.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/memrchr.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* memrchr -- find the last occurrence of a byte in a memory block - Copyright (C) 1991, 1993, 1996-1997, 1999-2000, 2003-2016 Free Software + Copyright (C) 1991, 1993, 1996-1997, 1999-2000, 2003-2020 Free Software Foundation, Inc. Based on strlen implementation by Torbjorn Granlund (tege@sics.se), @@ -20,7 +20,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ #if defined _LIBC # include <memcopy.h> @@ -68,7 +68,7 @@ if (*--char_ptr == c) return (void *) char_ptr; - longword_ptr = (const longword *) char_ptr; + longword_ptr = (const void *) char_ptr; /* All these elucidatory comments refer to 4-byte longwords, but the theory applies equally well to any size longwords. */ diff -Nru gdb-9.1/gnulib/import/minmax.h gdb-10.2/gnulib/import/minmax.h --- gdb-9.1/gnulib/import/minmax.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/minmax.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,60 @@ +/* MIN, MAX macros. + Copyright (C) 1995, 1998, 2001, 2003, 2005, 2009-2020 Free Software + Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +#ifndef _MINMAX_H +#define _MINMAX_H + +/* Note: MIN, MAX are also defined in <sys/param.h> on some systems + (glibc, IRIX, HP-UX, OSF/1). Therefore you might get warnings about + MIN, MAX macro redefinitions on some systems; the workaround is to + #include this file as the last one among the #include list. */ + +/* Before we define the following symbols we get the <limits.h> file + since otherwise we get redefinitions on some systems if <limits.h> is + included after this file. Likewise for <sys/param.h>. + If more than one of these system headers define MIN and MAX, pick just + one of the headers (because the definitions most likely are the same). */ +#if HAVE_MINMAX_IN_LIMITS_H +# include <limits.h> +#elif HAVE_MINMAX_IN_SYS_PARAM_H +# include <sys/param.h> +#endif + +/* Note: MIN and MAX should be used with two arguments of the + same type. They might not return the minimum and maximum of their two + arguments, if the arguments have different types or have unusual + floating-point values. For example, on a typical host with 32-bit 'int', + 64-bit 'long long', and 64-bit IEEE 754 'double' types: + + MAX (-1, 2147483648) returns 4294967295. + MAX (9007199254740992.0, 9007199254740993) returns 9007199254740992.0. + MAX (NaN, 0.0) returns 0.0. + MAX (+0.0, -0.0) returns -0.0. + + and in each case the answer is in some sense bogus. */ + +/* MAX(a,b) returns the maximum of A and B. */ +#ifndef MAX +# define MAX(a,b) ((a) > (b) ? (a) : (b)) +#endif + +/* MIN(a,b) returns the minimum of A and B. */ +#ifndef MIN +# define MIN(a,b) ((a) < (b) ? (a) : (b)) +#endif + +#endif /* _MINMAX_H */ diff -Nru gdb-9.1/gnulib/import/mkdir.c gdb-10.2/gnulib/import/mkdir.c --- gdb-9.1/gnulib/import/mkdir.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/mkdir.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,7 +1,7 @@ /* On some systems, mkdir ("foo/", 0700) fails because of the trailing slash. On those systems, this wrapper removes the trailing slash. - Copyright (C) 2001, 2003, 2006, 2008-2016 Free Software Foundation, Inc. + Copyright (C) 2001, 2003, 2006, 2008-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -14,7 +14,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* written by Jim Meyering */ @@ -38,7 +38,7 @@ Additionally, it declares _mkdir (and depending on compile flags, an alias mkdir), only in the nonstandard includes <direct.h> and <io.h>, which are included in the <sys/stat.h> override. */ -#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ +#if defined _WIN32 && ! defined __CYGWIN__ # define mkdir(name,mode) _mkdir (name) # define maybe_unused _GL_UNUSED #else diff -Nru gdb-9.1/gnulib/import/mkdtemp.c gdb-10.2/gnulib/import/mkdtemp.c --- gdb-9.1/gnulib/import/mkdtemp.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/mkdtemp.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 1999, 2001-2003, 2006-2007, 2009-2016 Free Software +/* Copyright (C) 1999, 2001-2003, 2006-2007, 2009-2020 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -13,7 +13,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Extracted from misc/mkdtemp.c. */ diff -Nru gdb-9.1/gnulib/import/mkostemp.c gdb-10.2/gnulib/import/mkostemp.c --- gdb-9.1/gnulib/import/mkostemp.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/mkostemp.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 1998-1999, 2001, 2005-2007, 2009-2016 Free Software +/* Copyright (C) 1998-1999, 2001, 2005-2007, 2009-2020 Free Software Foundation, Inc. This file is derived from the one in the GNU C Library. @@ -13,7 +13,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ #if !_LIBC # include <config.h> diff -Nru gdb-9.1/gnulib/import/msvc-inval.c gdb-10.2/gnulib/import/msvc-inval.c --- gdb-9.1/gnulib/import/msvc-inval.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/msvc-inval.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Invalid parameter handler for MSVC runtime libraries. - Copyright (C) 2011-2016 Free Software Foundation, Inc. + Copyright (C) 2011-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -12,7 +12,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along - with this program; if not, see <http://www.gnu.org/licenses/>. */ + with this program; if not, see <https://www.gnu.org/licenses/>. */ #include <config.h> diff -Nru gdb-9.1/gnulib/import/msvc-inval.h gdb-10.2/gnulib/import/msvc-inval.h --- gdb-9.1/gnulib/import/msvc-inval.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/msvc-inval.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Invalid parameter handler for MSVC runtime libraries. - Copyright (C) 2011-2016 Free Software Foundation, Inc. + Copyright (C) 2011-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -12,7 +12,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along - with this program; if not, see <http://www.gnu.org/licenses/>. */ + with this program; if not, see <https://www.gnu.org/licenses/>. */ #ifndef _MSVC_INVAL_H #define _MSVC_INVAL_H @@ -95,7 +95,7 @@ /* Gnulib can define its own status codes, as described in the page "Raising Software Exceptions" on microsoft.com - <http://msdn.microsoft.com/en-us/library/het71c37.aspx>. + <https://docs.microsoft.com/en-us/cpp/cpp/raising-software-exceptions>. Our status codes are composed of - 0xE0000000, mandatory for all user-defined status codes, - 0x474E550, a API identifier ("GNU"), @@ -106,7 +106,7 @@ # if defined _MSC_VER /* A compiler that supports __try/__except, as described in the page "try-except statement" on microsoft.com - <http://msdn.microsoft.com/en-us/library/s58ftw19.aspx>. + <https://docs.microsoft.com/en-us/cpp/cpp/try-except-statement>. With __try/__except, we can use the multithread-safe exception handling. */ # ifdef __cplusplus diff -Nru gdb-9.1/gnulib/import/msvc-nothrow.c gdb-10.2/gnulib/import/msvc-nothrow.c --- gdb-9.1/gnulib/import/msvc-nothrow.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/msvc-nothrow.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Wrappers that don't throw invalid parameter notifications with MSVC runtime libraries. - Copyright (C) 2011-2016 Free Software Foundation, Inc. + Copyright (C) 2011-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -13,7 +13,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along - with this program; if not, see <http://www.gnu.org/licenses/>. */ + with this program; if not, see <https://www.gnu.org/licenses/>. */ #include <config.h> @@ -24,7 +24,9 @@ #define WIN32_LEAN_AND_MEAN #include <windows.h> -#include "msvc-inval.h" +#if HAVE_MSVC_INVALID_PARAMETER_HANDLER +# include "msvc-inval.h" +#endif #undef _get_osfhandle diff -Nru gdb-9.1/gnulib/import/msvc-nothrow.h gdb-10.2/gnulib/import/msvc-nothrow.h --- gdb-9.1/gnulib/import/msvc-nothrow.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/msvc-nothrow.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Wrappers that don't throw invalid parameter notifications with MSVC runtime libraries. - Copyright (C) 2011-2016 Free Software Foundation, Inc. + Copyright (C) 2011-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -13,7 +13,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along - with this program; if not, see <http://www.gnu.org/licenses/>. */ + with this program; if not, see <https://www.gnu.org/licenses/>. */ #ifndef _MSVC_NOTHROW_H #define _MSVC_NOTHROW_H @@ -25,7 +25,7 @@ This file defines wrappers that turn such an invalid parameter notification into an error code. */ -#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ +#if defined _WIN32 && ! defined __CYGWIN__ /* Get original declaration of _get_osfhandle. */ # include <io.h> diff -Nru gdb-9.1/gnulib/import/netinet_in.in.h gdb-10.2/gnulib/import/netinet_in.in.h --- gdb-9.1/gnulib/import/netinet_in.in.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/netinet_in.in.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Substitute for <netinet/in.h>. - Copyright (C) 2007-2016 Free Software Foundation, Inc. + Copyright (C) 2007-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -12,7 +12,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, see <http://www.gnu.org/licenses/>. */ + along with this program; if not, see <https://www.gnu.org/licenses/>. */ #ifndef _@GUARD_PREFIX@_NETINET_IN_H diff -Nru gdb-9.1/gnulib/import/_Noreturn.h gdb-10.2/gnulib/import/_Noreturn.h --- gdb-9.1/gnulib/import/_Noreturn.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/_Noreturn.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,43 @@ +/* A C macro for declaring that a function does not return. + Copyright (C) 2011-2020 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#ifndef _Noreturn +# if (defined __cplusplus \ + && ((201103 <= __cplusplus && !(__GNUC__ == 4 && __GNUC_MINOR__ == 7)) \ + || (defined _MSC_VER && 1900 <= _MSC_VER)) \ + && 0) + /* [[noreturn]] is not practically usable, because with it the syntax + extern _Noreturn void func (...); + would not be valid; such a declaration would only be valid with 'extern' + and '_Noreturn' swapped, or without the 'extern' keyword. However, some + AIX system header files and several gnulib header files use precisely + this syntax with 'extern'. */ +# define _Noreturn [[noreturn]] +# elif ((!defined __cplusplus || defined __clang__) \ + && (201112 <= (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) \ + || 4 < __GNUC__ + (7 <= __GNUC_MINOR__) \ + || (defined __apple_build_version__ \ + ? 6000000 <= __apple_build_version__ \ + : 3 < __clang_major__ + (5 <= __clang_minor__)))) + /* _Noreturn works as-is. */ +# elif 2 < __GNUC__ + (8 <= __GNUC_MINOR__) || 0x5110 <= __SUNPRO_C +# define _Noreturn __attribute__ ((__noreturn__)) +# elif 1200 <= (defined _MSC_VER ? _MSC_VER : 0) +# define _Noreturn __declspec (noreturn) +# else +# define _Noreturn +# endif +#endif diff -Nru gdb-9.1/gnulib/import/openat.c gdb-10.2/gnulib/import/openat.c --- gdb-9.1/gnulib/import/openat.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/openat.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* provide a replacement openat function - Copyright (C) 2004-2016 Free Software Foundation, Inc. + Copyright (C) 2004-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -12,7 +12,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* written by Jim Meyering */ @@ -41,19 +41,30 @@ #include "openat.h" +#include "cloexec.h" + #include <stdarg.h> #include <stdbool.h> #include <stddef.h> +#include <stdlib.h> #include <string.h> #include <sys/stat.h> #include <errno.h> #if HAVE_OPENAT -/* Like openat, but work around Solaris 9 bugs with trailing slash. */ +/* Like openat, but support O_CLOEXEC and work around Solaris 9 bugs + with trailing slash. */ int rpl_openat (int dfd, char const *filename, int flags, ...) { + /* 0 = unknown, 1 = yes, -1 = no. */ +#if GNULIB_defined_O_CLOEXEC + int have_cloexec = -1; +#else + static int have_cloexec; +#endif + mode_t mode; int fd; @@ -71,28 +82,27 @@ } # if OPEN_TRAILING_SLASH_BUG - /* If the filename ends in a slash and one of O_CREAT, O_WRONLY, O_RDWR - is specified, then fail. - Rationale: POSIX <http://www.opengroup.org/susv3/basedefs/xbd_chap04.html> - says that - "A pathname that contains at least one non-slash character and that - ends with one or more trailing slashes shall be resolved as if a - single dot character ( '.' ) were appended to the pathname." - and - "The special filename dot shall refer to the directory specified by - its predecessor." + /* Fail if one of O_CREAT, O_WRONLY, O_RDWR is specified and the filename + ends in a slash, as POSIX says such a filename must name a directory + <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_13>: + "A pathname that contains at least one non-<slash> character and that + ends with one or more trailing <slash> characters shall not be resolved + successfully unless the last pathname component before the trailing + <slash> characters names an existing directory" If the named file already exists as a directory, then - if O_CREAT is specified, open() must fail because of the semantics of O_CREAT, - if O_WRONLY or O_RDWR is specified, open() must fail because POSIX - <http://www.opengroup.org/susv3/functions/open.html> says that it - fails with errno = EISDIR in this case. + <https://pubs.opengroup.org/onlinepubs/9699919799/functions/openat.html> + says that it fails with errno = EISDIR in this case. If the named file does not exist or does not name a directory, then - if O_CREAT is specified, open() must fail since open() cannot create directories, - if O_WRONLY or O_RDWR is specified, open() must fail because the file does not contain a '.' directory. */ - if (flags & (O_CREAT | O_WRONLY | O_RDWR)) + if ((flags & O_CREAT) + || (flags & O_ACCMODE) == O_RDWR + || (flags & O_ACCMODE) == O_WRONLY) { size_t len = strlen (filename); if (len > 0 && filename[len - 1] == '/') @@ -103,19 +113,35 @@ } # endif - fd = orig_openat (dfd, filename, flags, mode); + fd = orig_openat (dfd, filename, + flags & ~(have_cloexec < 0 ? O_CLOEXEC : 0), mode); + + if (flags & O_CLOEXEC) + { + if (! have_cloexec) + { + if (0 <= fd) + have_cloexec = 1; + else if (errno == EINVAL) + { + fd = orig_openat (dfd, filename, flags & ~O_CLOEXEC, mode); + have_cloexec = -1; + } + } + if (have_cloexec < 0 && 0 <= fd) + set_cloexec_flag (fd, true); + } + # if OPEN_TRAILING_SLASH_BUG /* If the filename ends in a slash and fd does not refer to a directory, then fail. - Rationale: POSIX <http://www.opengroup.org/susv3/basedefs/xbd_chap04.html> - says that - "A pathname that contains at least one non-slash character and that - ends with one or more trailing slashes shall be resolved as if a - single dot character ( '.' ) were appended to the pathname." - and - "The special filename dot shall refer to the directory specified by - its predecessor." + Rationale: POSIX says such a filename must name a directory + <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_13>: + "A pathname that contains at least one non-<slash> character and that + ends with one or more trailing <slash> characters shall not be resolved + successfully unless the last pathname component before the trailing + <slash> characters names an existing directory" If the named file without the slash is not a directory, open() must fail with ENOTDIR. */ if (fd >= 0) @@ -141,12 +167,12 @@ #else /* !HAVE_OPENAT */ -# include "dosname.h" /* solely for definition of IS_ABSOLUTE_FILE_NAME */ +# include "filename.h" /* solely for definition of IS_ABSOLUTE_FILE_NAME */ # include "openat-priv.h" # include "save-cwd.h" /* Replacement for Solaris' openat function. - <http://www.google.com/search?q=openat+site:docs.sun.com> + <https://www.google.com/search?q=openat+site:docs.oracle.com> First, try to simulate it via open ("/proc/self/fd/FD/FILE"). Failing that, simulate it by doing save_cwd/fchdir/open/restore_cwd. If either the save_cwd or the restore_cwd fails (relatively unlikely), @@ -265,7 +291,7 @@ openat_needs_fchdir (void) { bool needs_fchdir = true; - int fd = open ("/", O_SEARCH); + int fd = open ("/", O_SEARCH | O_CLOEXEC); if (0 <= fd) { diff -Nru gdb-9.1/gnulib/import/openat-die.c gdb-10.2/gnulib/import/openat-die.c --- gdb-9.1/gnulib/import/openat-die.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/openat-die.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Report a save- or restore-cwd failure in our openat replacement and then exit. - Copyright (C) 2005-2006, 2008-2016 Free Software Foundation, Inc. + Copyright (C) 2005-2006, 2008-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -13,7 +13,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> diff -Nru gdb-9.1/gnulib/import/openat.h gdb-10.2/gnulib/import/openat.h --- gdb-9.1/gnulib/import/openat.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/openat.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* provide a replacement openat function - Copyright (C) 2004-2006, 2008-2016 Free Software Foundation, Inc. + Copyright (C) 2004-2006, 2008-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -12,7 +12,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* written by Jim Meyering */ @@ -52,19 +52,19 @@ slightly more readable than it would be with fchownat (..., 0) or fchownat (..., AT_SYMLINK_NOFOLLOW). */ -#if GNULIB_FCHOWNAT +#if GNULIB_CHOWNAT -# ifndef FCHOWNAT_INLINE -# define FCHOWNAT_INLINE _GL_INLINE +# ifndef CHOWNAT_INLINE +# define CHOWNAT_INLINE _GL_INLINE # endif -FCHOWNAT_INLINE int +CHOWNAT_INLINE int chownat (int fd, char const *file, uid_t owner, gid_t group) { return fchownat (fd, file, owner, group, 0); } -FCHOWNAT_INLINE int +CHOWNAT_INLINE int lchownat (int fd, char const *file, uid_t owner, gid_t group) { return fchownat (fd, file, owner, group, AT_SYMLINK_NOFOLLOW); @@ -72,19 +72,19 @@ #endif -#if GNULIB_FCHMODAT +#if GNULIB_CHMODAT -# ifndef FCHMODAT_INLINE -# define FCHMODAT_INLINE _GL_INLINE +# ifndef CHMODAT_INLINE +# define CHMODAT_INLINE _GL_INLINE # endif -FCHMODAT_INLINE int +CHMODAT_INLINE int chmodat (int fd, char const *file, mode_t mode) { return fchmodat (fd, file, mode, 0); } -FCHMODAT_INLINE int +CHMODAT_INLINE int lchmodat (int fd, char const *file, mode_t mode) { return fchmodat (fd, file, mode, AT_SYMLINK_NOFOLLOW); diff -Nru gdb-9.1/gnulib/import/openat-priv.h gdb-10.2/gnulib/import/openat-priv.h --- gdb-9.1/gnulib/import/openat-priv.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/openat-priv.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Internals for openat-like functions. - Copyright (C) 2005-2006, 2009-2016 Free Software Foundation, Inc. + Copyright (C) 2005-2006, 2009-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -13,7 +13,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* written by Jim Meyering */ diff -Nru gdb-9.1/gnulib/import/openat-proc.c gdb-10.2/gnulib/import/openat-proc.c --- gdb-9.1/gnulib/import/openat-proc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/openat-proc.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Create /proc/self/fd-related names for subfiles of open directories. - Copyright (C) 2006, 2009-2016 Free Software Foundation, Inc. + Copyright (C) 2006, 2009-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -13,7 +13,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paul Eggert. */ @@ -73,8 +73,9 @@ problem is exhibited on code that built on Solaris 8 and running on Solaris 10. */ - int proc_self_fd = open ("/proc/self/fd", - O_SEARCH | O_DIRECTORY | O_NOCTTY | O_NONBLOCK); + int proc_self_fd = + open ("/proc/self/fd", + O_SEARCH | O_DIRECTORY | O_NOCTTY | O_NONBLOCK | O_CLOEXEC); if (proc_self_fd < 0) proc_status = -1; else diff -Nru gdb-9.1/gnulib/import/open.c gdb-10.2/gnulib/import/open.c --- gdb-9.1/gnulib/import/open.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/open.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Open a descriptor to a file. - Copyright (C) 2007-2016 Free Software Foundation, Inc. + Copyright (C) 2007-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -12,7 +12,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */ @@ -38,6 +38,8 @@ this include because of the preliminary #include <fcntl.h> above. */ #include "fcntl.h" +#include "cloexec.h" + #include <errno.h> #include <stdarg.h> #include <string.h> @@ -52,6 +54,13 @@ int open (const char *filename, int flags, ...) { + /* 0 = unknown, 1 = yes, -1 = no. */ +#if GNULIB_defined_O_CLOEXEC + int have_cloexec = -1; +#else + static int have_cloexec; +#endif + mode_t mode; int fd; @@ -77,34 +86,33 @@ flags &= ~O_NONBLOCK; #endif -#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ +#if defined _WIN32 && ! defined __CYGWIN__ if (strcmp (filename, "/dev/null") == 0) filename = "NUL"; #endif #if OPEN_TRAILING_SLASH_BUG - /* If the filename ends in a slash and one of O_CREAT, O_WRONLY, O_RDWR - is specified, then fail. - Rationale: POSIX <http://www.opengroup.org/susv3/basedefs/xbd_chap04.html> - says that - "A pathname that contains at least one non-slash character and that - ends with one or more trailing slashes shall be resolved as if a - single dot character ( '.' ) were appended to the pathname." - and - "The special filename dot shall refer to the directory specified by - its predecessor." + /* Fail if one of O_CREAT, O_WRONLY, O_RDWR is specified and the filename + ends in a slash, as POSIX says such a filename must name a directory + <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_13>: + "A pathname that contains at least one non-<slash> character and that + ends with one or more trailing <slash> characters shall not be resolved + successfully unless the last pathname component before the trailing + <slash> characters names an existing directory" If the named file already exists as a directory, then - if O_CREAT is specified, open() must fail because of the semantics of O_CREAT, - if O_WRONLY or O_RDWR is specified, open() must fail because POSIX - <http://www.opengroup.org/susv3/functions/open.html> says that it - fails with errno = EISDIR in this case. + <https://pubs.opengroup.org/onlinepubs/9699919799/functions/open.html> + says that it fails with errno = EISDIR in this case. If the named file does not exist or does not name a directory, then - if O_CREAT is specified, open() must fail since open() cannot create directories, - if O_WRONLY or O_RDWR is specified, open() must fail because the file does not contain a '.' directory. */ - if (flags & (O_CREAT | O_WRONLY | O_RDWR)) + if ((flags & O_CREAT) + || (flags & O_ACCMODE) == O_RDWR + || (flags & O_ACCMODE) == O_WRONLY) { size_t len = strlen (filename); if (len > 0 && filename[len - 1] == '/') @@ -115,7 +123,25 @@ } #endif - fd = orig_open (filename, flags, mode); + fd = orig_open (filename, + flags & ~(have_cloexec < 0 ? O_CLOEXEC : 0), mode); + + if (flags & O_CLOEXEC) + { + if (! have_cloexec) + { + if (0 <= fd) + have_cloexec = 1; + else if (errno == EINVAL) + { + fd = orig_open (filename, flags & ~O_CLOEXEC, mode); + have_cloexec = -1; + } + } + if (have_cloexec < 0 && 0 <= fd) + set_cloexec_flag (fd, true); + } + #if REPLACE_FCHDIR /* Implementing fchdir and fdopendir requires the ability to open a @@ -144,14 +170,12 @@ #if OPEN_TRAILING_SLASH_BUG /* If the filename ends in a slash and fd does not refer to a directory, then fail. - Rationale: POSIX <http://www.opengroup.org/susv3/basedefs/xbd_chap04.html> - says that - "A pathname that contains at least one non-slash character and that - ends with one or more trailing slashes shall be resolved as if a - single dot character ( '.' ) were appended to the pathname." - and - "The special filename dot shall refer to the directory specified by - its predecessor." + Rationale: POSIX says such a filename must name a directory + <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_13>: + "A pathname that contains at least one non-<slash> character and that + ends with one or more trailing <slash> characters shall not be resolved + successfully unless the last pathname component before the trailing + <slash> characters names an existing directory" If the named file without the slash is not a directory, open() must fail with ENOTDIR. */ if (fd >= 0) diff -Nru gdb-9.1/gnulib/import/opendir.c gdb-10.2/gnulib/import/opendir.c --- gdb-9.1/gnulib/import/opendir.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/opendir.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Start reading the entries of a directory. - Copyright (C) 2006-2016 Free Software Foundation, Inc. + Copyright (C) 2006-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -12,7 +12,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> @@ -45,6 +45,16 @@ # include <fcntl.h> #endif +#if defined _WIN32 && ! defined __CYGWIN__ +/* Don't assume that UNICODE is not defined. */ +# undef WIN32_FIND_DATA +# define WIN32_FIND_DATA WIN32_FIND_DATAA +# undef GetFullPathName +# define GetFullPathName GetFullPathNameA +# undef FindFirstFile +# define FindFirstFile FindFirstFileA +#endif + DIR * opendir (const char *dir_name) { diff -Nru gdb-9.1/gnulib/import/pathmax.h gdb-10.2/gnulib/import/pathmax.h --- gdb-9.1/gnulib/import/pathmax.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/pathmax.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Define PATH_MAX somehow. Requires sys/types.h. - Copyright (C) 1992, 1999, 2001, 2003, 2005, 2009-2016 Free Software + Copyright (C) 1992, 1999, 2001, 2003, 2005, 2009-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify @@ -13,14 +13,14 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, see <http://www.gnu.org/licenses/>. */ + along with this program; if not, see <https://www.gnu.org/licenses/>. */ #ifndef _PATHMAX_H # define _PATHMAX_H /* POSIX:2008 defines PATH_MAX to be the maximum number of bytes in a filename, including the terminating NUL byte. - <http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/limits.h.html> + <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/limits.h.html> PATH_MAX is not defined on systems which have no limit on filename length, such as GNU/Hurd. @@ -65,10 +65,10 @@ # define PATH_MAX 1024 # endif -# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ +# if defined _WIN32 && ! defined __CYGWIN__ /* The page "Naming Files, Paths, and Namespaces" on msdn.microsoft.com, section "Maximum Path Length Limitation", - <http://msdn.microsoft.com/en-us/library/aa365247(v=vs.85).aspx#maxpath> + <https://docs.microsoft.com/en-us/windows/desktop/FileIO/naming-a-file#maximum-path-length-limitation> explains that the maximum size of a filename, including the terminating NUL byte, is 260 = 3 + 256 + 1. This is the same value as diff -Nru gdb-9.1/gnulib/import/pipe-safer.c gdb-10.2/gnulib/import/pipe-safer.c --- gdb-9.1/gnulib/import/pipe-safer.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/pipe-safer.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Invoke pipe, but avoid some glitches. - Copyright (C) 2005-2006, 2009-2016 Free Software Foundation, Inc. + Copyright (C) 2005-2006, 2009-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -12,7 +12,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Jim Meyering. */ diff -Nru gdb-9.1/gnulib/import/rawmemchr.c gdb-10.2/gnulib/import/rawmemchr.c --- gdb-9.1/gnulib/import/rawmemchr.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/rawmemchr.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Searching in a string. - Copyright (C) 2008-2016 Free Software Foundation, Inc. + Copyright (C) 2008-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -12,7 +12,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> diff -Nru gdb-9.1/gnulib/import/rawmemchr.valgrind gdb-10.2/gnulib/import/rawmemchr.valgrind --- gdb-9.1/gnulib/import/rawmemchr.valgrind 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/rawmemchr.valgrind 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,20 @@ # Suppress a valgrind message about use of uninitialized memory in rawmemchr(). + +# Copyright (C) 2008-2020 Free Software Foundation, Inc. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + # This use is OK because it provides only a speedup. { rawmemchr-value4 diff -Nru gdb-9.1/gnulib/import/readdir.c gdb-10.2/gnulib/import/readdir.c --- gdb-9.1/gnulib/import/readdir.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/readdir.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Read the next entry of a directory. - Copyright (C) 2011-2016 Free Software Foundation, Inc. + Copyright (C) 2011-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -12,7 +12,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> @@ -24,6 +24,10 @@ #include "dirent-private.h" +/* Don't assume that UNICODE is not defined. */ +#undef FindNextFile +#define FindNextFile FindNextFileA + struct dirent * readdir (DIR *dirp) { @@ -32,7 +36,7 @@ /* There is no need to add code to produce entries for "." and "..". According to the POSIX:2008 section "4.12 Pathname Resolution" - <http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html> + <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html> "." and ".." are syntactic entities. POSIX also says: "If entries for dot or dot-dot exist, one entry shall be returned diff -Nru gdb-9.1/gnulib/import/readlink.c gdb-10.2/gnulib/import/readlink.c --- gdb-9.1/gnulib/import/readlink.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/readlink.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Stub for readlink(). - Copyright (C) 2003-2007, 2009-2016 Free Software Foundation, Inc. + Copyright (C) 2003-2007, 2009-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -12,7 +12,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> diff -Nru gdb-9.1/gnulib/import/realloc.c gdb-10.2/gnulib/import/realloc.c --- gdb-9.1/gnulib/import/realloc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/realloc.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* realloc() function that is glibc compatible. - Copyright (C) 1997, 2003-2004, 2006-2007, 2009-2016 Free Software + Copyright (C) 1997, 2003-2004, 2006-2007, 2009-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify @@ -14,7 +14,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* written by Jim Meyering and Bruno Haible */ diff -Nru gdb-9.1/gnulib/import/ref-add.sin gdb-10.2/gnulib/import/ref-add.sin --- gdb-9.1/gnulib/import/ref-add.sin 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/ref-add.sin 1970-01-01 00:00:00.000000000 +0000 @@ -1,29 +0,0 @@ -# Add this package to a list of references stored in a text file. -# -# Copyright (C) 2000, 2009-2016 Free Software Foundation, Inc. -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3, or (at your option) -# any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, see <http://www.gnu.org/licenses/>. -# -# Written by Bruno Haible <haible@clisp.cons.org>. -# -/^# Packages using this file: / { - s/# Packages using this file:// - ta - :a - s/ @PACKAGE@ / @PACKAGE@ / - tb - s/ $/ @PACKAGE@ / - :b - s/^/# Packages using this file:/ -} diff -Nru gdb-9.1/gnulib/import/ref-del.sin gdb-10.2/gnulib/import/ref-del.sin --- gdb-9.1/gnulib/import/ref-del.sin 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/ref-del.sin 1970-01-01 00:00:00.000000000 +0000 @@ -1,24 +0,0 @@ -# Remove this package from a list of references stored in a text file. -# -# Copyright (C) 2000, 2009-2016 Free Software Foundation, Inc. -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3, or (at your option) -# any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, see <http://www.gnu.org/licenses/>. -# -# Written by Bruno Haible <haible@clisp.cons.org>. -# -/^# Packages using this file: / { - s/# Packages using this file:// - s/ @PACKAGE@ / / - s/^/# Packages using this file:/ -} diff -Nru gdb-9.1/gnulib/import/rename.c gdb-10.2/gnulib/import/rename.c --- gdb-9.1/gnulib/import/rename.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/rename.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Work around rename bugs in some systems. - Copyright (C) 2001-2003, 2005-2006, 2009-2016 Free Software Foundation, Inc. + Copyright (C) 2001-2003, 2005-2006, 2009-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -13,7 +13,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Volker Borchert, Eric Blake. */ @@ -23,7 +23,7 @@ #undef rename -#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ +#if defined _WIN32 && ! defined __CYGWIN__ /* The mingw rename has problems with trailing slashes; it also requires use of native Windows calls to allow atomic renames over existing files. */ @@ -39,6 +39,10 @@ # include "dirname.h" +/* Don't assume that UNICODE is not defined. */ +# undef MoveFileEx +# define MoveFileEx MoveFileExA + /* Rename the file SRC to DST. This replacement is necessary on Windows, on which the system rename function will not replace an existing DST. */ diff -Nru gdb-9.1/gnulib/import/rewinddir.c gdb-10.2/gnulib/import/rewinddir.c --- gdb-9.1/gnulib/import/rewinddir.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/rewinddir.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Restart reading the entries of a directory from the beginning. - Copyright (C) 2011-2016 Free Software Foundation, Inc. + Copyright (C) 2011-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -12,7 +12,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> @@ -23,6 +23,10 @@ #include "dirent-private.h" +/* Don't assume that UNICODE is not defined. */ +#undef FindFirstFile +#define FindFirstFile FindFirstFileA + void rewinddir (DIR *dirp) { diff -Nru gdb-9.1/gnulib/import/rmdir.c gdb-10.2/gnulib/import/rmdir.c --- gdb-9.1/gnulib/import/rmdir.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/rmdir.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Work around rmdir bugs. - Copyright (C) 1988, 1990, 1999, 2003-2006, 2009-2016 Free Software + Copyright (C) 1988, 1990, 1999, 2003-2006, 2009-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify @@ -14,7 +14,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> @@ -23,7 +23,7 @@ #include <errno.h> #include <string.h> -#include "dosname.h" +#include "filename.h" #undef rmdir diff -Nru gdb-9.1/gnulib/import/same-inode.h gdb-10.2/gnulib/import/same-inode.h --- gdb-9.1/gnulib/import/same-inode.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/same-inode.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ -/* Determine whether two stat buffers refer to the same file. +/* Determine whether two stat buffers are known to refer to the same file. - Copyright (C) 2006, 2009-2016 Free Software Foundation, Inc. + Copyright (C) 2006, 2009-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -13,17 +13,31 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef SAME_INODE_H # define SAME_INODE_H 1 -# ifdef __VMS +# include <sys/types.h> + +# if defined __VMS && __CRTL_VER < 80200000 # define SAME_INODE(a, b) \ ((a).st_ino[0] == (b).st_ino[0] \ && (a).st_ino[1] == (b).st_ino[1] \ && (a).st_ino[2] == (b).st_ino[2] \ && (a).st_dev == (b).st_dev) +# elif defined _WIN32 && ! defined __CYGWIN__ + /* Native Windows. */ +# if _GL_WINDOWS_STAT_INODES + /* stat() and fstat() set st_dev and st_ino to 0 if information about + the inode is not available. */ +# define SAME_INODE(a, b) \ + (!((a).st_ino == 0 && (a).st_dev == 0) \ + && (a).st_ino == (b).st_ino && (a).st_dev == (b).st_dev) +# else + /* stat() and fstat() set st_ino to 0 always. */ +# define SAME_INODE(a, b) 0 +# endif # else # define SAME_INODE(a, b) \ ((a).st_ino == (b).st_ino \ diff -Nru gdb-9.1/gnulib/import/save-cwd.c gdb-10.2/gnulib/import/save-cwd.c --- gdb-9.1/gnulib/import/save-cwd.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/save-cwd.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* save-cwd.c -- Save and restore current working directory. - Copyright (C) 1995, 1997-1998, 2003-2006, 2009-2016 Free Software + Copyright (C) 1995, 1997-1998, 2003-2006, 2009-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify @@ -14,7 +14,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Jim Meyering. */ @@ -30,7 +30,6 @@ #include "chdir-long.h" #include "unistd--.h" -#include "cloexec.h" #if GNULIB_FCNTL_SAFER # include "fcntl--.h" @@ -64,16 +63,15 @@ { cwd->name = NULL; - cwd->desc = open (".", O_SEARCH); + cwd->desc = open (".", O_SEARCH | O_CLOEXEC); if (!GNULIB_FCNTL_SAFER) - cwd->desc = fd_safer (cwd->desc); + cwd->desc = fd_safer_flag (cwd->desc, O_CLOEXEC); if (cwd->desc < 0) { cwd->name = getcwd (NULL, 0); return cwd->name ? 0 : -1; } - set_cloexec_flag (cwd->desc, true); return 0; } diff -Nru gdb-9.1/gnulib/import/save-cwd.h gdb-10.2/gnulib/import/save-cwd.h --- gdb-9.1/gnulib/import/save-cwd.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/save-cwd.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Save and restore current working directory. - Copyright (C) 1995, 1997-1998, 2003, 2009-2016 Free Software Foundation, + Copyright (C) 1995, 1997-1998, 2003, 2009-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify @@ -14,7 +14,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Jim Meyering. */ diff -Nru gdb-9.1/gnulib/import/scratch_buffer.h gdb-10.2/gnulib/import/scratch_buffer.h --- gdb-9.1/gnulib/import/scratch_buffer.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/scratch_buffer.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,11 @@ +#ifndef _GL_SCRATCH_BUFFER_H +#define _GL_SCRATCH_BUFFER_H + +#include <libc-config.h> + +#define __libc_scratch_buffer_grow gl_scratch_buffer_grow +#define __libc_scratch_buffer_grow_preserve gl_scratch_buffer_grow_preserve +#define __libc_scratch_buffer_set_array_size gl_scratch_buffer_set_array_size +#include <malloc/scratch_buffer.h> + +#endif /* _GL_SCRATCH_BUFFER_H */ diff -Nru gdb-9.1/gnulib/import/secure_getenv.c gdb-10.2/gnulib/import/secure_getenv.c --- gdb-9.1/gnulib/import/secure_getenv.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/secure_getenv.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,54 +0,0 @@ -/* Look up an environment variable, returning NULL in insecure situations. - - Copyright 2013-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify it - under the terms of the GNU General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ - -#include <config.h> - -#include <stdlib.h> - -#if !HAVE___SECURE_GETENV -# if HAVE_ISSETUGID || (HAVE_GETUID && HAVE_GETEUID && HAVE_GETGID && HAVE_GETEGID) -# include <unistd.h> -# endif -#endif - -char * -secure_getenv (char const *name) -{ -#if HAVE___SECURE_GETENV /* glibc */ - return __secure_getenv (name); -#elif HAVE_ISSETUGID /* OS X, FreeBSD, NetBSD, OpenBSD */ - if (issetugid ()) - return NULL; - return getenv (name); -#elif HAVE_GETUID && HAVE_GETEUID && HAVE_GETGID && HAVE_GETEGID /* other Unix */ - if (geteuid () != getuid () || getegid () != getgid ()) - return NULL; - return getenv (name); -#elif (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* native Windows */ - /* On native Windows, there is no such concept as setuid or setgid binaries. - - Programs launched as system services have high privileges, but they don't - inherit environment variables from a user. - - Programs launched by a user with "Run as Administrator" have high - privileges and use the environment variables, but the user has been asked - whether he agrees. - - Programs launched by a user without "Run as Administrator" cannot gain - high privileges, therefore there is no risk. */ - return getenv (name); -#else - return NULL; -#endif -} diff -Nru gdb-9.1/gnulib/import/setenv.c gdb-10.2/gnulib/import/setenv.c --- gdb-9.1/gnulib/import/setenv.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/setenv.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 1992, 1995-2003, 2005-2016 Free Software Foundation, Inc. +/* Copyright (C) 1992, 1995-2003, 2005-2020 Free Software Foundation, Inc. This file is part of the GNU C Library. This program is free software: you can redistribute it and/or modify @@ -12,7 +12,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ #if !_LIBC /* Don't use __attribute__ __nonnull__ in this compilation unit. Otherwise gcc diff -Nru gdb-9.1/gnulib/import/setlocale-lock.c gdb-10.2/gnulib/import/setlocale-lock.c --- gdb-9.1/gnulib/import/setlocale-lock.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/setlocale-lock.c 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,150 @@ +/* Return the internal lock used by setlocale_null_r. + Copyright (C) 2019-2020 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2019. */ + +#include <config.h> + +/* When it is known that the gl_get_setlocale_null_lock function is defined + by a dependency library, it should not be defined here. */ +#if OMIT_SETLOCALE_LOCK + +/* This declaration is solely to ensure that after preprocessing + this file is never empty. */ +typedef int dummy; + +#else + +/* This file defines the internal lock used by setlocale_null_r. + It is a separate compilation unit, so that only one copy of it is + present when linking statically. */ + +/* Prohibit renaming this symbol. */ +# undef gl_get_setlocale_null_lock + +/* Macro for exporting a symbol (function, not variable) defined in this file, + when compiled into a shared library. */ +# ifndef DLL_EXPORTED +# if HAVE_VISIBILITY + /* Override the effect of the compiler option '-fvisibility=hidden'. */ +# define DLL_EXPORTED __attribute__((__visibility__("default"))) +# elif defined _WIN32 || defined __CYGWIN__ +# define DLL_EXPORTED __declspec(dllexport) +# else +# define DLL_EXPORTED +# endif +# endif + +# if defined _WIN32 && !defined __CYGWIN__ + +# define WIN32_LEAN_AND_MEAN /* avoid including junk */ +# include <windows.h> + +# include "windows-initguard.h" + +/* The return type is a 'CRITICAL_SECTION *', not a 'glwthread_mutex_t *', + because the latter is not guaranteed to be a stable ABI in the future. */ + +/* Make sure the function gets exported from DLLs. */ +DLL_EXPORTED CRITICAL_SECTION *gl_get_setlocale_null_lock (void); + +static glwthread_initguard_t guard = GLWTHREAD_INITGUARD_INIT; +static CRITICAL_SECTION lock; + +/* Returns the internal lock used by setlocale_null_r. */ +CRITICAL_SECTION * +gl_get_setlocale_null_lock (void) +{ + if (!guard.done) + { + if (InterlockedIncrement (&guard.started) == 0) + { + /* This thread is the first one to need the lock. Initialize it. */ + InitializeCriticalSection (&lock); + guard.done = 1; + } + else + { + /* Don't let guard.started grow and wrap around. */ + InterlockedDecrement (&guard.started); + /* Yield the CPU while waiting for another thread to finish + initializing this mutex. */ + while (!guard.done) + Sleep (0); + } + } + return &lock; +} + +# elif HAVE_PTHREAD_API + +# include <pthread.h> + +static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; + +/* Make sure the function gets exported from shared libraries. */ +DLL_EXPORTED pthread_mutex_t *gl_get_setlocale_null_lock (void); + +/* Returns the internal lock used by setlocale_null_r. */ +pthread_mutex_t * +gl_get_setlocale_null_lock (void) +{ + return &mutex; +} + +# elif HAVE_THREADS_H + +# include <threads.h> +# include <stdlib.h> + +static int volatile init_needed = 1; +static once_flag init_once = ONCE_FLAG_INIT; +static mtx_t mutex; + +static void +atomic_init (void) +{ + if (mtx_init (&mutex, mtx_plain) != thrd_success) + abort (); + init_needed = 0; +} + +/* Make sure the function gets exported from shared libraries. */ +DLL_EXPORTED mtx_t *gl_get_setlocale_null_lock (void); + +/* Returns the internal lock used by setlocale_null_r. */ +mtx_t * +gl_get_setlocale_null_lock (void) +{ + if (init_needed) + call_once (&init_once, atomic_init); + return &mutex; +} + +# endif + +# if (defined _WIN32 || defined __CYGWIN__) && !defined _MSC_VER +/* Make sure the '__declspec(dllimport)' in setlocale_null.c does not cause + a link failure when no DLLs are involved. */ +# if defined _WIN64 || defined _LP64 +# define IMP(x) __imp_##x +# else +# define IMP(x) _imp__##x +# endif +void * IMP(gl_get_setlocale_null_lock) = &gl_get_setlocale_null_lock; +# endif + +#endif diff -Nru gdb-9.1/gnulib/import/setlocale_null.c gdb-10.2/gnulib/import/setlocale_null.c --- gdb-9.1/gnulib/import/setlocale_null.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/setlocale_null.c 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,411 @@ +/* Query the name of the current global locale. + Copyright (C) 2019-2020 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2019. */ + +#include <config.h> + +/* Specification. */ +#include "setlocale_null.h" + +#include <errno.h> +#include <locale.h> +#include <stdlib.h> +#include <string.h> +#if defined _WIN32 && !defined __CYGWIN__ +# include <wchar.h> +#endif + +#if !(SETLOCALE_NULL_ALL_MTSAFE && SETLOCALE_NULL_ONE_MTSAFE) +# if defined _WIN32 && !defined __CYGWIN__ + +# define WIN32_LEAN_AND_MEAN /* avoid including junk */ +# include <windows.h> + +# elif HAVE_PTHREAD_API + +# include <pthread.h> +# if HAVE_THREADS_H && HAVE_WEAK_SYMBOLS +# include <threads.h> +# pragma weak thrd_exit +# define c11_threads_in_use() (thrd_exit != NULL) +# else +# define c11_threads_in_use() 0 +# endif + +# elif HAVE_THREADS_H + +# include <threads.h> + +# endif +#endif + +/* Use the system's setlocale() function, not the gnulib override, here. */ +#undef setlocale + +static const char * +setlocale_null_androidfix (int category) +{ + const char *result = setlocale (category, NULL); + +#ifdef __ANDROID__ + if (result == NULL) + switch (category) + { + case LC_CTYPE: + case LC_NUMERIC: + case LC_TIME: + case LC_COLLATE: + case LC_MONETARY: + case LC_MESSAGES: + case LC_ALL: + case LC_PAPER: + case LC_NAME: + case LC_ADDRESS: + case LC_TELEPHONE: + case LC_MEASUREMENT: + result = "C"; + break; + default: + break; + } +#endif + + return result; +} + +static int +setlocale_null_unlocked (int category, char *buf, size_t bufsize) +{ +#if defined _WIN32 && !defined __CYGWIN__ && defined _MSC_VER + /* On native Windows, nowadays, the setlocale() implementation is based + on _wsetlocale() and uses malloc() for the result. We are better off + using _wsetlocale() directly. */ + const wchar_t *result = _wsetlocale (category, NULL); + + if (result == NULL) + { + /* CATEGORY is invalid. */ + if (bufsize > 0) + /* Return an empty string in BUF. + This is a convenience for callers that don't want to write explicit + code for handling EINVAL. */ + buf[0] = '\0'; + return EINVAL; + } + else + { + size_t length = wcslen (result); + if (length < bufsize) + { + size_t i; + + /* Convert wchar_t[] -> char[], assuming plain ASCII. */ + for (i = 0; i <= length; i++) + buf[i] = result[i]; + + return 0; + } + else + { + if (bufsize > 0) + { + /* Return a truncated result in BUF. + This is a convenience for callers that don't want to write + explicit code for handling ERANGE. */ + size_t i; + + /* Convert wchar_t[] -> char[], assuming plain ASCII. */ + for (i = 0; i < bufsize; i++) + buf[i] = result[i]; + buf[bufsize - 1] = '\0'; + } + return ERANGE; + } + } +#else + const char *result = setlocale_null_androidfix (category); + + if (result == NULL) + { + /* CATEGORY is invalid. */ + if (bufsize > 0) + /* Return an empty string in BUF. + This is a convenience for callers that don't want to write explicit + code for handling EINVAL. */ + buf[0] = '\0'; + return EINVAL; + } + else + { + size_t length = strlen (result); + if (length < bufsize) + { + memcpy (buf, result, length + 1); + return 0; + } + else + { + if (bufsize > 0) + { + /* Return a truncated result in BUF. + This is a convenience for callers that don't want to write + explicit code for handling ERANGE. */ + memcpy (buf, result, bufsize - 1); + buf[bufsize - 1] = '\0'; + } + return ERANGE; + } + } +#endif +} + +#if !(SETLOCALE_NULL_ALL_MTSAFE && SETLOCALE_NULL_ONE_MTSAFE) /* musl libc, macOS, FreeBSD, NetBSD, OpenBSD, AIX, Haiku, Cygwin */ + +/* Use a lock, so that no two threads can invoke setlocale_null_unlocked + at the same time. */ + +/* Prohibit renaming this symbol. */ +# undef gl_get_setlocale_null_lock + +# if defined _WIN32 && !defined __CYGWIN__ + +extern __declspec(dllimport) CRITICAL_SECTION *gl_get_setlocale_null_lock (void); + +static int +setlocale_null_with_lock (int category, char *buf, size_t bufsize) +{ + CRITICAL_SECTION *lock = gl_get_setlocale_null_lock (); + int ret; + + EnterCriticalSection (lock); + ret = setlocale_null_unlocked (category, buf, bufsize); + LeaveCriticalSection (lock); + + return ret; +} + +# elif HAVE_PTHREAD_API /* musl libc, macOS, FreeBSD, NetBSD, OpenBSD, AIX, Haiku, Cygwin */ + +extern +# if defined _WIN32 || defined __CYGWIN__ + __declspec(dllimport) +# endif + pthread_mutex_t *gl_get_setlocale_null_lock (void); + +# if HAVE_WEAK_SYMBOLS /* musl libc, FreeBSD, NetBSD, OpenBSD, Haiku */ + + /* Avoid the need to link with '-lpthread'. */ +# pragma weak pthread_mutex_lock +# pragma weak pthread_mutex_unlock + + /* Determine whether libpthread is in use. */ +# pragma weak pthread_mutexattr_gettype + /* See the comments in lock.h. */ +# define pthread_in_use() \ + (pthread_mutexattr_gettype != NULL || c11_threads_in_use ()) + +# else +# define pthread_in_use() 1 +# endif + +static int +setlocale_null_with_lock (int category, char *buf, size_t bufsize) +{ + if (pthread_in_use()) + { + pthread_mutex_t *lock = gl_get_setlocale_null_lock (); + int ret; + + if (pthread_mutex_lock (lock)) + abort (); + ret = setlocale_null_unlocked (category, buf, bufsize); + if (pthread_mutex_unlock (lock)) + abort (); + + return ret; + } + else + return setlocale_null_unlocked (category, buf, bufsize); +} + +# elif HAVE_THREADS_H + +extern mtx_t *gl_get_setlocale_null_lock (void); + +static int +setlocale_null_with_lock (int category, char *buf, size_t bufsize) +{ + mtx_t *lock = gl_get_setlocale_null_lock (); + int ret; + + if (mtx_lock (lock) != thrd_success) + abort (); + ret = setlocale_null_unlocked (category, buf, bufsize); + if (mtx_unlock (lock) != thrd_success) + abort (); + + return ret; +} + +# endif + +#endif + +int +setlocale_null_r (int category, char *buf, size_t bufsize) +{ +#if SETLOCALE_NULL_ALL_MTSAFE +# if SETLOCALE_NULL_ONE_MTSAFE + + return setlocale_null_unlocked (category, buf, bufsize); + +# else + + if (category == LC_ALL) + return setlocale_null_unlocked (category, buf, bufsize); + else + return setlocale_null_with_lock (category, buf, bufsize); + +# endif +#else +# if SETLOCALE_NULL_ONE_MTSAFE + + if (category == LC_ALL) + return setlocale_null_with_lock (category, buf, bufsize); + else + return setlocale_null_unlocked (category, buf, bufsize); + +# else + + return setlocale_null_with_lock (category, buf, bufsize); + +# endif +#endif +} + +const char * +setlocale_null (int category) +{ +#if SETLOCALE_NULL_ALL_MTSAFE && SETLOCALE_NULL_ONE_MTSAFE + return setlocale_null_androidfix (category); +#else + + /* This call must be multithread-safe. To achieve this without using + thread-local storage: + 1. We use a specific static buffer for each possible CATEGORY + argument. So that different threads can call setlocale_mtsafe + with different CATEGORY arguments, without interfering. + 2. We use a simple strcpy or memcpy to fill this static buffer. + Filling it through, for example, strcpy + strcat would not be + guaranteed to leave the buffer's contents intact if another thread + is currently accessing it. If necessary, the contents is first + assembled in a stack-allocated buffer. */ + if (category == LC_ALL) + { +# if SETLOCALE_NULL_ALL_MTSAFE + return setlocale_null_androidfix (LC_ALL); +# else + char buf[SETLOCALE_NULL_ALL_MAX]; + static char resultbuf[SETLOCALE_NULL_ALL_MAX]; + + if (setlocale_null_r (LC_ALL, buf, sizeof (buf))) + return "C"; + strcpy (resultbuf, buf); + return resultbuf; +# endif + } + else + { +# if SETLOCALE_NULL_ONE_MTSAFE + return setlocale_null_androidfix (category); +# else + enum + { + LC_CTYPE_INDEX, + LC_NUMERIC_INDEX, + LC_TIME_INDEX, + LC_COLLATE_INDEX, + LC_MONETARY_INDEX, + LC_MESSAGES_INDEX, +# ifdef LC_PAPER + LC_PAPER_INDEX, +# endif +# ifdef LC_NAME + LC_NAME_INDEX, +# endif +# ifdef LC_ADDRESS + LC_ADDRESS_INDEX, +# endif +# ifdef LC_TELEPHONE + LC_TELEPHONE_INDEX, +# endif +# ifdef LC_MEASUREMENT + LC_MEASUREMENT_INDEX, +# endif +# ifdef LC_IDENTIFICATION + LC_IDENTIFICATION_INDEX, +# endif + LC_INDICES_COUNT + } + i; + char buf[SETLOCALE_NULL_MAX]; + static char resultbuf[LC_INDICES_COUNT][SETLOCALE_NULL_MAX]; + int err; + + err = setlocale_null_r (category, buf, sizeof (buf)); + if (err == EINVAL) + return NULL; + if (err) + return "C"; + + switch (category) + { + case LC_CTYPE: i = LC_CTYPE_INDEX; break; + case LC_NUMERIC: i = LC_NUMERIC_INDEX; break; + case LC_TIME: i = LC_TIME_INDEX; break; + case LC_COLLATE: i = LC_COLLATE_INDEX; break; + case LC_MONETARY: i = LC_MONETARY_INDEX; break; + case LC_MESSAGES: i = LC_MESSAGES_INDEX; break; +# ifdef LC_PAPER + case LC_PAPER: i = LC_PAPER_INDEX; break; +# endif +# ifdef LC_NAME + case LC_NAME: i = LC_NAME_INDEX; break; +# endif +# ifdef LC_ADDRESS + case LC_ADDRESS: i = LC_ADDRESS_INDEX; break; +# endif +# ifdef LC_TELEPHONE + case LC_TELEPHONE: i = LC_TELEPHONE_INDEX; break; +# endif +# ifdef LC_MEASUREMENT + case LC_MEASUREMENT: i = LC_MEASUREMENT_INDEX; break; +# endif +# ifdef LC_IDENTIFICATION + case LC_IDENTIFICATION: i = LC_IDENTIFICATION_INDEX; break; +# endif + default: + /* If you get here, a #ifdef LC_xxx is missing. */ + abort (); + } + + strcpy (resultbuf[i], buf); + return resultbuf[i]; +# endif + } +#endif +} diff -Nru gdb-9.1/gnulib/import/setlocale_null.h gdb-10.2/gnulib/import/setlocale_null.h --- gdb-9.1/gnulib/import/setlocale_null.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/setlocale_null.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,82 @@ +/* Query the name of the current global locale. + Copyright (C) 2019-2020 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2019. */ + +#ifndef _SETLOCALE_NULL_H +#define _SETLOCALE_NULL_H + +#include <stddef.h> + +#include "arg-nonnull.h" + + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Recommended size of a buffer for a locale name for a single category. + On glibc systems, you can have locale names that are relative file names; + assume a maximum length 256. + In native Windows, in 2018 the longest locale name was of length 58 + ("FYRO Macedonian_Former Yugoslav Republic of Macedonia.1251"). */ +#define SETLOCALE_NULL_MAX (256+1) + +/* Recommended size of a buffer for a locale name with all categories. + On glibc systems, you can have locale names that are relative file names; + assume maximum length 256 for each. There are 12 categories; so, the + maximum total length is 148+12*256. + In native Windows, there are 5 categories, and the maximum total length is + 55+5*58. */ +#define SETLOCALE_NULL_ALL_MAX (148+12*256+1) + +/* setlocale_null_r (CATEGORY, BUF, BUFSIZE) is like setlocale (CATEGORY, NULL), + except that + - it is guaranteed to be multithread-safe, + - it returns the resulting locale category name or locale name in the + user-supplied buffer BUF, which must be BUFSIZE bytes long. + The recommended minimum buffer size is + - SETLOCALE_NULL_MAX for CATEGORY != LC_ALL, and + - SETLOCALE_NULL_ALL_MAX for CATEGORY == LC_ALL. + The return value is an error code: 0 if the call is successful, EINVAL if + CATEGORY is invalid, or ERANGE if BUFSIZE is smaller than the length needed + size (including the trailing NUL byte). In the latter case, a truncated + result is returned in BUF, but still NUL-terminated if BUFSIZE > 0. + For this call to be multithread-safe, *all* calls to + setlocale (CATEGORY, NULL) in all other threads must have been converted + to use setlocale_null_r or setlocale_null as well, and the other threads + must not make other setlocale invocations (since changing the global locale + has side effects on all threads). */ +extern int setlocale_null_r (int category, char *buf, size_t bufsize) + _GL_ARG_NONNULL ((2)); + +/* setlocale_null (CATEGORY) is like setlocale (CATEGORY, NULL), except that + it is guaranteed to be multithread-safe. + The return value is NULL if CATEGORY is invalid. + For this call to be multithread-safe, *all* calls to + setlocale (CATEGORY, NULL) in all other threads must have been converted + to use setlocale_null_r or setlocale_null as well, and the other threads + must not make other setlocale invocations (since changing the global locale + has side effects on all threads). */ +extern const char *setlocale_null (int category); + + +#ifdef __cplusplus +} +#endif + +#endif /* _SETLOCALE_NULL_H */ diff -Nru gdb-9.1/gnulib/import/signal.in.h gdb-10.2/gnulib/import/signal.in.h --- gdb-9.1/gnulib/import/signal.in.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/signal.in.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* A GNU-like <signal.h>. - Copyright (C) 2006-2016 Free Software Foundation, Inc. + Copyright (C) 2006-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -13,7 +13,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ @@ -133,18 +133,28 @@ # define pthread_sigmask rpl_pthread_sigmask # endif _GL_FUNCDECL_RPL (pthread_sigmask, int, - (int how, const sigset_t *new_mask, sigset_t *old_mask)); + (int how, + const sigset_t *restrict new_mask, + sigset_t *restrict old_mask)); _GL_CXXALIAS_RPL (pthread_sigmask, int, - (int how, const sigset_t *new_mask, sigset_t *old_mask)); + (int how, + const sigset_t *restrict new_mask, + sigset_t *restrict old_mask)); # else -# if !@HAVE_PTHREAD_SIGMASK@ +# if !(@HAVE_PTHREAD_SIGMASK@ || defined pthread_sigmask) _GL_FUNCDECL_SYS (pthread_sigmask, int, - (int how, const sigset_t *new_mask, sigset_t *old_mask)); + (int how, + const sigset_t *restrict new_mask, + sigset_t *restrict old_mask)); # endif _GL_CXXALIAS_SYS (pthread_sigmask, int, - (int how, const sigset_t *new_mask, sigset_t *old_mask)); + (int how, + const sigset_t *restrict new_mask, + sigset_t *restrict old_mask)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_sigmask); +# endif #elif defined GNULIB_POSIXCHECK # undef pthread_sigmask # if HAVE_RAW_DECL_PTHREAD_SIGMASK @@ -168,7 +178,9 @@ # endif _GL_CXXALIAS_SYS (raise, int, (int sig)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (raise); +# endif #elif defined GNULIB_POSIXCHECK # undef raise /* Assume raise is always declared. */ @@ -200,7 +212,7 @@ /* When also using extern inline, suppress the use of static inline in standard headers of problematic Apple configurations, as Libc at least through Libc-825.26 (2013-04-09) mishandles it; see, e.g., - <http://lists.gnu.org/archive/html/bug-gnulib/2012-12/msg00023.html>. + <https://lists.gnu.org/r/bug-gnulib/2012-12/msg00023.html>. Perhaps Apple will fix this some day. */ #if (defined _GL_EXTERN_INLINE_IN_USE && defined __APPLE__ \ && (defined __i386__ || defined __x86_64__)) @@ -291,10 +303,14 @@ # define SIG_SETMASK 1 /* blocked_set = *set; */ # define SIG_UNBLOCK 2 /* blocked_set = blocked_set & ~*set; */ _GL_FUNCDECL_SYS (sigprocmask, int, - (int operation, const sigset_t *set, sigset_t *old_set)); + (int operation, + const sigset_t *restrict set, + sigset_t *restrict old_set)); # endif _GL_CXXALIAS_SYS (sigprocmask, int, - (int operation, const sigset_t *set, sigset_t *old_set)); + (int operation, + const sigset_t *restrict set, + sigset_t *restrict old_set)); _GL_CXXALIASWARN (sigprocmask); /* Install the handler FUNC for signal SIG, and return the previous @@ -318,10 +334,18 @@ _GL_CXXALIAS_RPL (signal, _gl_function_taking_int_returning_void_t, (int sig, _gl_function_taking_int_returning_void_t func)); # else +/* On OpenBSD, the declaration of 'signal' may not be present at this point, + because it occurs in <sys/signal.h>, not <signal.h> directly. */ +# if defined __OpenBSD__ +_GL_FUNCDECL_SYS (signal, _gl_function_taking_int_returning_void_t, + (int sig, _gl_function_taking_int_returning_void_t func)); +# endif _GL_CXXALIAS_SYS (signal, _gl_function_taking_int_returning_void_t, (int sig, _gl_function_taking_int_returning_void_t func)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (signal); +# endif # if !@HAVE_POSIX_SIGNALBLOCKING@ && GNULIB_defined_SIGPIPE /* Raise signal SIGPIPE. */ diff -Nru gdb-9.1/gnulib/import/stat.c gdb-10.2/gnulib/import/stat.c --- gdb-9.1/gnulib/import/stat.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/stat.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Work around platform bugs in stat. - Copyright (C) 2009-2016 Free Software Foundation, Inc. + Copyright (C) 2009-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -12,9 +12,9 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ -/* written by Eric Blake */ +/* Written by Eric Blake and Bruno Haible. */ /* If the user's config.h happens to include <sys/stat.h>, let it include only the system's <sys/stat.h> here, so that orig_stat doesn't recurse to @@ -27,47 +27,79 @@ #include <sys/stat.h> #undef __need_system_sys_stat_h -#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ -# if _GL_WINDOWS_64_BIT_ST_SIZE -# undef stat /* avoid warning on mingw64 with _FILE_OFFSET_BITS=64 */ -# define stat _stati64 -# define REPLACE_FUNC_STAT_DIR 1 -# undef REPLACE_FUNC_STAT_FILE -# elif REPLACE_FUNC_STAT_FILE -/* mingw64 has a broken stat() function, based on _stat(), in libmingwex.a. - Bypass it. */ -# define stat _stat -# define REPLACE_FUNC_STAT_DIR 1 -# undef REPLACE_FUNC_STAT_FILE -# endif +#if defined _WIN32 && ! defined __CYGWIN__ +# define WINDOWS_NATIVE #endif +#if !defined WINDOWS_NATIVE + static int orig_stat (const char *filename, struct stat *buf) { return stat (filename, buf); } +#endif + /* Specification. */ +#ifdef __osf__ /* Write "sys/stat.h" here, not <sys/stat.h>, otherwise OSF/1 5.1 DTK cc eliminates this include because of the preliminary #include <sys/stat.h> above. */ -#include "sys/stat.h" +# include "sys/stat.h" +#else +# include <sys/stat.h> +#endif + +#include "stat-time.h" #include <errno.h> #include <limits.h> #include <stdbool.h> #include <string.h> -#include "dosname.h" +#include "filename.h" +#include "malloca.h" #include "verify.h" -#if REPLACE_FUNC_STAT_DIR -# include "pathmax.h" - /* The only known systems where REPLACE_FUNC_STAT_DIR is needed also - have a constant PATH_MAX. */ -# ifndef PATH_MAX -# error "Please port this replacement to your platform" -# endif +#ifdef WINDOWS_NATIVE +# define WIN32_LEAN_AND_MEAN +# include <windows.h> +# include "stat-w32.h" +/* Don't assume that UNICODE is not defined. */ +# undef WIN32_FIND_DATA +# define WIN32_FIND_DATA WIN32_FIND_DATAA +# undef CreateFile +# define CreateFile CreateFileA +# undef FindFirstFile +# define FindFirstFile FindFirstFileA +#endif + +#ifdef WINDOWS_NATIVE +/* Return TRUE if the given file name denotes an UNC root. */ +static BOOL +is_unc_root (const char *rname) +{ + /* Test whether it has the syntax '\\server\share'. */ + if (ISSLASH (rname[0]) && ISSLASH (rname[1])) + { + /* It starts with two slashes. Find the next slash. */ + const char *p = rname + 2; + const char *q = p; + while (*q != '\0' && !ISSLASH (*q)) + q++; + if (q > p && *q != '\0') + { + /* Found the next slash at q. */ + q++; + const char *r = q; + while (*r != '\0' && !ISSLASH (*r)) + r++; + if (r > q && *r == '\0') + return TRUE; + } + } + return FALSE; +} #endif /* Store information about NAME into ST. Work around bugs with @@ -77,62 +109,332 @@ correctly. */ int -rpl_stat (char const *name, struct stat *st) +rpl_stat (char const *name, struct stat *buf) { - int result = orig_stat (name, st); -#if REPLACE_FUNC_STAT_FILE - /* Solaris 9 mistakenly succeeds when given a non-directory with a - trailing slash. */ - if (result == 0 && !S_ISDIR (st->st_mode)) +#ifdef WINDOWS_NATIVE + /* Fill the fields ourselves, because the original stat function returns + values for st_atime, st_mtime, st_ctime that depend on the current time + zone. See + <https://lists.gnu.org/r/bug-gnulib/2017-04/msg00134.html> */ + /* XXX Should we convert to wchar_t* and prepend '\\?\', in order to work + around length limitations + <https://docs.microsoft.com/en-us/windows/desktop/FileIO/naming-a-file> ? */ + + /* POSIX <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_13> + specifies: "More than two leading <slash> characters shall be treated as + a single <slash> character." */ + if (ISSLASH (name[0]) && ISSLASH (name[1]) && ISSLASH (name[2])) { - size_t len = strlen (name); - if (ISSLASH (name[len - 1])) + name += 2; + while (ISSLASH (name[1])) + name++; + } + + size_t len = strlen (name); + size_t drive_prefix_len = (HAS_DEVICE (name) ? 2 : 0); + + /* Remove trailing slashes (except the very first one, at position + drive_prefix_len), but remember their presence. */ + size_t rlen; + bool check_dir = false; + + rlen = len; + while (rlen > drive_prefix_len && ISSLASH (name[rlen-1])) + { + check_dir = true; + if (rlen == drive_prefix_len + 1) + break; + rlen--; + } + + /* Handle '' and 'C:'. */ + if (!check_dir && rlen == drive_prefix_len) + { + errno = ENOENT; + return -1; + } + + /* Handle '\\'. */ + if (rlen == 1 && ISSLASH (name[0]) && len >= 2) + { + errno = ENOENT; + return -1; + } + + const char *rname; + char *malloca_rname; + if (rlen == len) + { + rname = name; + malloca_rname = NULL; + } + else + { + malloca_rname = malloca (rlen + 1); + if (malloca_rname == NULL) { - errno = ENOTDIR; + errno = ENOMEM; return -1; } + memcpy (malloca_rname, name, rlen); + malloca_rname[rlen] = '\0'; + rname = malloca_rname; } -#endif /* REPLACE_FUNC_STAT_FILE */ -#if REPLACE_FUNC_STAT_DIR - if (result == -1 && errno == ENOENT) + /* There are two ways to get at the requested information: + - by scanning the parent directory and examining the relevant + directory entry, + - by opening the file directly. + The first approach fails for root directories (e.g. 'C:\') and + UNC root directories (e.g. '\\server\share'). + The second approach fails for some system files (e.g. 'C:\pagefile.sys' + and 'C:\hiberfil.sys'): ERROR_SHARING_VIOLATION. + The second approach gives more information (in particular, correct + st_dev, st_ino, st_nlink fields). + So we use the second approach and, as a fallback except for root and + UNC root directories, also the first approach. */ + { + int ret; + { - /* Due to mingw's oddities, there are some directories (like - c:\) where stat() only succeeds with a trailing slash, and - other directories (like c:\windows) where stat() only - succeeds without a trailing slash. But we want the two to be - synonymous, since chdir() manages either style. Likewise, Mingw also - reports ENOENT for names longer than PATH_MAX, when we want - ENAMETOOLONG, and for stat("file/"), when we want ENOTDIR. - Fortunately, mingw PATH_MAX is small enough for stack - allocation. */ - char fixed_name[PATH_MAX + 1] = {0}; - size_t len = strlen (name); - bool check_dir = false; - verify (PATH_MAX <= 4096); - if (PATH_MAX <= len) - errno = ENAMETOOLONG; - else if (len) + /* Approach based on the file. */ + + /* Open a handle to the file. + CreateFile + <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-createfilea> + <https://docs.microsoft.com/en-us/windows/desktop/FileIO/creating-and-opening-files> */ + HANDLE h = + CreateFile (rname, + FILE_READ_ATTRIBUTES, + FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, + NULL, + OPEN_EXISTING, + /* FILE_FLAG_POSIX_SEMANTICS (treat file names that differ only + in case as different) makes sense only when applied to *all* + filesystem operations. */ + FILE_FLAG_BACKUP_SEMANTICS /* | FILE_FLAG_POSIX_SEMANTICS */, + NULL); + if (h != INVALID_HANDLE_VALUE) { - strcpy (fixed_name, name); - if (ISSLASH (fixed_name[len - 1])) + ret = _gl_fstat_by_handle (h, rname, buf); + CloseHandle (h); + goto done; + } + } + + /* Test for root and UNC root directories. */ + if ((rlen == drive_prefix_len + 1 && ISSLASH (rname[drive_prefix_len])) + || is_unc_root (rname)) + goto failed; + + /* Fallback. */ + { + /* Approach based on the directory entry. */ + + if (strchr (rname, '?') != NULL || strchr (rname, '*') != NULL) + { + /* Other Windows API functions would fail with error + ERROR_INVALID_NAME. */ + if (malloca_rname != NULL) + freea (malloca_rname); + errno = ENOENT; + return -1; + } + + /* Get the details about the directory entry. This can be done through + FindFirstFile + <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-findfirstfilea> + <https://docs.microsoft.com/en-us/windows/desktop/api/minwinbase/ns-minwinbase-_win32_find_dataa> + or through + FindFirstFileEx with argument FindExInfoBasic + <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-findfirstfileexa> + <https://docs.microsoft.com/en-us/windows/desktop/api/minwinbase/ne-minwinbase-findex_info_levels> + <https://docs.microsoft.com/en-us/windows/desktop/api/minwinbase/ns-minwinbase-_win32_find_dataa> */ + WIN32_FIND_DATA info; + HANDLE h = FindFirstFile (rname, &info); + if (h == INVALID_HANDLE_VALUE) + goto failed; + + /* Test for error conditions before starting to fill *buf. */ + if (sizeof (buf->st_size) <= 4 && info.nFileSizeHigh > 0) + { + FindClose (h); + if (malloca_rname != NULL) + freea (malloca_rname); + errno = EOVERFLOW; + return -1; + } + +# if _GL_WINDOWS_STAT_INODES + buf->st_dev = 0; +# if _GL_WINDOWS_STAT_INODES == 2 + buf->st_ino._gl_ino[0] = buf->st_ino._gl_ino[1] = 0; +# else /* _GL_WINDOWS_STAT_INODES == 1 */ + buf->st_ino = 0; +# endif +# else + /* st_ino is not wide enough for identifying a file on a device. + Without st_ino, st_dev is pointless. */ + buf->st_dev = 0; + buf->st_ino = 0; +# endif + + /* st_mode. */ + unsigned int mode = + /* XXX How to handle FILE_ATTRIBUTE_REPARSE_POINT ? */ + ((info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ? _S_IFDIR | S_IEXEC_UGO : _S_IFREG) + | S_IREAD_UGO + | ((info.dwFileAttributes & FILE_ATTRIBUTE_READONLY) ? 0 : S_IWRITE_UGO); + if (!(info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) + { + /* Determine whether the file is executable by looking at the file + name suffix. */ + if (info.nFileSizeHigh > 0 || info.nFileSizeLow > 0) { - check_dir = true; - while (len && ISSLASH (fixed_name[len - 1])) - fixed_name[--len] = '\0'; - if (!len) - fixed_name[0] = '/'; + const char *last_dot = NULL; + const char *p; + for (p = info.cFileName; *p != '\0'; p++) + if (*p == '.') + last_dot = p; + if (last_dot != NULL) + { + const char *suffix = last_dot + 1; + if (_stricmp (suffix, "exe") == 0 + || _stricmp (suffix, "bat") == 0 + || _stricmp (suffix, "cmd") == 0 + || _stricmp (suffix, "com") == 0) + mode |= S_IEXEC_UGO; + } } - else - fixed_name[len++] = '/'; - result = orig_stat (fixed_name, st); - if (result == 0 && check_dir && !S_ISDIR (st->st_mode)) + } + buf->st_mode = mode; + + /* st_nlink. Ignore hard links here. */ + buf->st_nlink = 1; + + /* There's no easy way to map the Windows SID concept to an integer. */ + buf->st_uid = 0; + buf->st_gid = 0; + + /* st_rdev is irrelevant for normal files and directories. */ + buf->st_rdev = 0; + + /* st_size. */ + if (sizeof (buf->st_size) <= 4) + /* Range check already done above. */ + buf->st_size = info.nFileSizeLow; + else + buf->st_size = ((long long) info.nFileSizeHigh << 32) | (long long) info.nFileSizeLow; + + /* st_atime, st_mtime, st_ctime. */ +# if _GL_WINDOWS_STAT_TIMESPEC + buf->st_atim = _gl_convert_FILETIME_to_timespec (&info.ftLastAccessTime); + buf->st_mtim = _gl_convert_FILETIME_to_timespec (&info.ftLastWriteTime); + buf->st_ctim = _gl_convert_FILETIME_to_timespec (&info.ftCreationTime); +# else + buf->st_atime = _gl_convert_FILETIME_to_POSIX (&info.ftLastAccessTime); + buf->st_mtime = _gl_convert_FILETIME_to_POSIX (&info.ftLastWriteTime); + buf->st_ctime = _gl_convert_FILETIME_to_POSIX (&info.ftCreationTime); +# endif + + FindClose (h); + + ret = 0; + } + + done: + if (ret >= 0 && check_dir && !S_ISDIR (buf->st_mode)) + { + errno = ENOTDIR; + ret = -1; + } + if (malloca_rname != NULL) + { + int saved_errno = errno; + freea (malloca_rname); + errno = saved_errno; + } + return ret; + } + + failed: + { + DWORD error = GetLastError (); + #if 0 + fprintf (stderr, "rpl_stat error 0x%x\n", (unsigned int) error); + #endif + + if (malloca_rname != NULL) + freea (malloca_rname); + + switch (error) + { + /* Some of these errors probably cannot happen with the specific flags + that we pass to CreateFile. But who knows... */ + case ERROR_FILE_NOT_FOUND: /* The last component of rname does not exist. */ + case ERROR_PATH_NOT_FOUND: /* Some directory component in rname does not exist. */ + case ERROR_BAD_PATHNAME: /* rname is such as '\\server'. */ + case ERROR_BAD_NET_NAME: /* rname is such as '\\server\nonexistentshare'. */ + case ERROR_INVALID_NAME: /* rname contains wildcards, misplaced colon, etc. */ + case ERROR_DIRECTORY: + errno = ENOENT; + break; + + case ERROR_ACCESS_DENIED: /* rname is such as 'C:\System Volume Information\foo'. */ + case ERROR_SHARING_VIOLATION: /* rname is such as 'C:\pagefile.sys' (second approach only). */ + /* XXX map to EACCES or EPERM? */ + errno = EACCES; + break; + + case ERROR_OUTOFMEMORY: + errno = ENOMEM; + break; + + case ERROR_WRITE_PROTECT: + errno = EROFS; + break; + + case ERROR_WRITE_FAULT: + case ERROR_READ_FAULT: + case ERROR_GEN_FAILURE: + errno = EIO; + break; + + case ERROR_BUFFER_OVERFLOW: + case ERROR_FILENAME_EXCED_RANGE: + errno = ENAMETOOLONG; + break; + + case ERROR_DELETE_PENDING: /* XXX map to EACCES or EPERM? */ + errno = EPERM; + break; + + default: + errno = EINVAL; + break; + } + + return -1; + } +#else + int result = orig_stat (name, buf); + if (result == 0) + { +# if REPLACE_FUNC_STAT_FILE + /* Solaris 9 mistakenly succeeds when given a non-directory with a + trailing slash. */ + if (!S_ISDIR (buf->st_mode)) + { + size_t len = strlen (name); + if (ISSLASH (name[len - 1])) { - result = -1; errno = ENOTDIR; + return -1; } } +# endif /* REPLACE_FUNC_STAT_FILE */ + result = stat_time_normalize (result, buf); } -#endif /* REPLACE_FUNC_STAT_DIR */ return result; +#endif } diff -Nru gdb-9.1/gnulib/import/stat-time.c gdb-10.2/gnulib/import/stat-time.c --- gdb-9.1/gnulib/import/stat-time.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/stat-time.c 2020-09-13 02:33:41.000000000 +0000 @@ -0,0 +1,3 @@ +#include <config.h> +#define _GL_STAT_TIME_INLINE _GL_EXTERN_INLINE +#include "stat-time.h" diff -Nru gdb-9.1/gnulib/import/stat-time.h gdb-10.2/gnulib/import/stat-time.h --- gdb-9.1/gnulib/import/stat-time.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/stat-time.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,252 @@ +/* stat-related time functions. + + Copyright (C) 2005, 2007, 2009-2020 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Paul Eggert. */ + +#ifndef STAT_TIME_H +#define STAT_TIME_H 1 + +#include "intprops.h" + +#include <errno.h> +#include <stddef.h> +#include <sys/stat.h> +#include <time.h> + +#ifndef _GL_INLINE_HEADER_BEGIN + #error "Please include config.h first." +#endif +_GL_INLINE_HEADER_BEGIN +#ifndef _GL_STAT_TIME_INLINE +# define _GL_STAT_TIME_INLINE _GL_INLINE +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* STAT_TIMESPEC (ST, ST_XTIM) is the ST_XTIM member for *ST of type + struct timespec, if available. If not, then STAT_TIMESPEC_NS (ST, + ST_XTIM) is the nanosecond component of the ST_XTIM member for *ST, + if available. ST_XTIM can be st_atim, st_ctim, st_mtim, or st_birthtim + for access, status change, data modification, or birth (creation) + time respectively. + + These macros are private to stat-time.h. */ +#if _GL_WINDOWS_STAT_TIMESPEC || defined HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC +# if _GL_WINDOWS_STAT_TIMESPEC || defined TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC +# define STAT_TIMESPEC(st, st_xtim) ((st)->st_xtim) +# else +# define STAT_TIMESPEC_NS(st, st_xtim) ((st)->st_xtim.tv_nsec) +# endif +#elif defined HAVE_STRUCT_STAT_ST_ATIMESPEC_TV_NSEC +# define STAT_TIMESPEC(st, st_xtim) ((st)->st_xtim##espec) +#elif defined HAVE_STRUCT_STAT_ST_ATIMENSEC +# define STAT_TIMESPEC_NS(st, st_xtim) ((st)->st_xtim##ensec) +#elif defined HAVE_STRUCT_STAT_ST_ATIM_ST__TIM_TV_NSEC +# define STAT_TIMESPEC_NS(st, st_xtim) ((st)->st_xtim.st__tim.tv_nsec) +#endif + +/* Return the nanosecond component of *ST's access time. */ +_GL_STAT_TIME_INLINE long int _GL_ATTRIBUTE_PURE +get_stat_atime_ns (struct stat const *st) +{ +# if defined STAT_TIMESPEC + return STAT_TIMESPEC (st, st_atim).tv_nsec; +# elif defined STAT_TIMESPEC_NS + return STAT_TIMESPEC_NS (st, st_atim); +# else + return 0; +# endif +} + +/* Return the nanosecond component of *ST's status change time. */ +_GL_STAT_TIME_INLINE long int _GL_ATTRIBUTE_PURE +get_stat_ctime_ns (struct stat const *st) +{ +# if defined STAT_TIMESPEC + return STAT_TIMESPEC (st, st_ctim).tv_nsec; +# elif defined STAT_TIMESPEC_NS + return STAT_TIMESPEC_NS (st, st_ctim); +# else + return 0; +# endif +} + +/* Return the nanosecond component of *ST's data modification time. */ +_GL_STAT_TIME_INLINE long int _GL_ATTRIBUTE_PURE +get_stat_mtime_ns (struct stat const *st) +{ +# if defined STAT_TIMESPEC + return STAT_TIMESPEC (st, st_mtim).tv_nsec; +# elif defined STAT_TIMESPEC_NS + return STAT_TIMESPEC_NS (st, st_mtim); +# else + return 0; +# endif +} + +/* Return the nanosecond component of *ST's birth time. */ +_GL_STAT_TIME_INLINE long int _GL_ATTRIBUTE_PURE +get_stat_birthtime_ns (struct stat const *st _GL_UNUSED) +{ +# if defined HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC + return STAT_TIMESPEC (st, st_birthtim).tv_nsec; +# elif defined HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC + return STAT_TIMESPEC_NS (st, st_birthtim); +# else + return 0; +# endif +} + +/* Return *ST's access time. */ +_GL_STAT_TIME_INLINE struct timespec _GL_ATTRIBUTE_PURE +get_stat_atime (struct stat const *st) +{ +#ifdef STAT_TIMESPEC + return STAT_TIMESPEC (st, st_atim); +#else + struct timespec t; + t.tv_sec = st->st_atime; + t.tv_nsec = get_stat_atime_ns (st); + return t; +#endif +} + +/* Return *ST's status change time. */ +_GL_STAT_TIME_INLINE struct timespec _GL_ATTRIBUTE_PURE +get_stat_ctime (struct stat const *st) +{ +#ifdef STAT_TIMESPEC + return STAT_TIMESPEC (st, st_ctim); +#else + struct timespec t; + t.tv_sec = st->st_ctime; + t.tv_nsec = get_stat_ctime_ns (st); + return t; +#endif +} + +/* Return *ST's data modification time. */ +_GL_STAT_TIME_INLINE struct timespec _GL_ATTRIBUTE_PURE +get_stat_mtime (struct stat const *st) +{ +#ifdef STAT_TIMESPEC + return STAT_TIMESPEC (st, st_mtim); +#else + struct timespec t; + t.tv_sec = st->st_mtime; + t.tv_nsec = get_stat_mtime_ns (st); + return t; +#endif +} + +/* Return *ST's birth time, if available; otherwise return a value + with tv_sec and tv_nsec both equal to -1. */ +_GL_STAT_TIME_INLINE struct timespec _GL_ATTRIBUTE_PURE +get_stat_birthtime (struct stat const *st _GL_UNUSED) +{ + struct timespec t; + +#if (defined HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC \ + || defined HAVE_STRUCT_STAT_ST_BIRTHTIM_TV_NSEC) + t = STAT_TIMESPEC (st, st_birthtim); +#elif defined HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC + t.tv_sec = st->st_birthtime; + t.tv_nsec = st->st_birthtimensec; +#elif defined _WIN32 && ! defined __CYGWIN__ + /* Native Windows platforms (but not Cygwin) put the "file creation + time" in st_ctime (!). See + <https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/stat-functions>. */ +# if _GL_WINDOWS_STAT_TIMESPEC + t = st->st_ctim; +# else + t.tv_sec = st->st_ctime; + t.tv_nsec = 0; +# endif +#else + /* Birth time is not supported. */ + t.tv_sec = -1; + t.tv_nsec = -1; +#endif + +#if (defined HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC \ + || defined HAVE_STRUCT_STAT_ST_BIRTHTIM_TV_NSEC \ + || defined HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC) + /* FreeBSD and NetBSD sometimes signal the absence of knowledge by + using zero. Attempt to work around this problem. Alas, this can + report failure even for valid timestamps. Also, NetBSD + sometimes returns junk in the birth time fields; work around this + bug if it is detected. */ + if (! (t.tv_sec && 0 <= t.tv_nsec && t.tv_nsec < 1000000000)) + { + t.tv_sec = -1; + t.tv_nsec = -1; + } +#endif + + return t; +} + +/* If a stat-like function returned RESULT, normalize the timestamps + in *ST, in case this platform suffers from the Solaris 11 bug where + tv_nsec might be negative. Return the adjusted RESULT, setting + errno to EOVERFLOW if normalization overflowed. This function + is intended to be private to this .h file. */ +_GL_STAT_TIME_INLINE int +stat_time_normalize (int result, struct stat *st _GL_UNUSED) +{ +#if defined __sun && defined STAT_TIMESPEC + if (result == 0) + { + long int timespec_hz = 1000000000; + short int const ts_off[] = { offsetof (struct stat, st_atim), + offsetof (struct stat, st_mtim), + offsetof (struct stat, st_ctim) }; + int i; + for (i = 0; i < sizeof ts_off / sizeof *ts_off; i++) + { + struct timespec *ts = (struct timespec *) ((char *) st + ts_off[i]); + long int q = ts->tv_nsec / timespec_hz; + long int r = ts->tv_nsec % timespec_hz; + if (r < 0) + { + r += timespec_hz; + q--; + } + ts->tv_nsec = r; + /* Overflow is possible, as Solaris 11 stat can yield + tv_sec == TYPE_MINIMUM (time_t) && tv_nsec == -1000000000. + INT_ADD_WRAPV is OK, since time_t is signed on Solaris. */ + if (INT_ADD_WRAPV (q, ts->tv_sec, &ts->tv_sec)) + { + errno = EOVERFLOW; + return -1; + } + } + } +#endif + return result; +} + +#ifdef __cplusplus +} +#endif + +_GL_INLINE_HEADER_END + +#endif diff -Nru gdb-9.1/gnulib/import/stat-w32.c gdb-10.2/gnulib/import/stat-w32.c --- gdb-9.1/gnulib/import/stat-w32.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/stat-w32.c 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,461 @@ +/* Core of implementation of fstat and stat for native Windows. + Copyright (C) 2017-2020 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Bruno Haible. */ + +#include <config.h> + +#if defined _WIN32 && ! defined __CYGWIN__ + +/* Attempt to make <windows.h> define FILE_ID_INFO. + But ensure that the redefinition of _WIN32_WINNT does not make us assume + Windows Vista or newer when building for an older version of Windows. */ +#if HAVE_SDKDDKVER_H +# include <sdkddkver.h> +# if _WIN32_WINNT >= _WIN32_WINNT_VISTA +# define WIN32_ASSUME_VISTA 1 +# else +# define WIN32_ASSUME_VISTA 0 +# endif +# if !defined _WIN32_WINNT || (_WIN32_WINNT < _WIN32_WINNT_WIN8) +# undef _WIN32_WINNT +# define _WIN32_WINNT _WIN32_WINNT_WIN8 +# endif +#else +# define WIN32_ASSUME_VISTA (_WIN32_WINNT >= _WIN32_WINNT_VISTA) +#endif + +#include <sys/types.h> +#include <sys/stat.h> +#include <errno.h> +#include <limits.h> +#include <string.h> +#include <unistd.h> +#include <windows.h> + +/* Specification. */ +#include "stat-w32.h" + +#include "pathmax.h" +#include "verify.h" + +/* Don't assume that UNICODE is not defined. */ +#undef LoadLibrary +#define LoadLibrary LoadLibraryA +#undef GetFinalPathNameByHandle +#define GetFinalPathNameByHandle GetFinalPathNameByHandleA + +/* Older mingw headers do not define VOLUME_NAME_NONE. */ +#ifndef VOLUME_NAME_NONE +# define VOLUME_NAME_NONE 4 +#endif + +#if !WIN32_ASSUME_VISTA + +/* Avoid warnings from gcc -Wcast-function-type. */ +# define GetProcAddress \ + (void *) GetProcAddress + +# if _GL_WINDOWS_STAT_INODES == 2 +/* GetFileInformationByHandleEx was introduced only in Windows Vista. */ +typedef DWORD (WINAPI * GetFileInformationByHandleExFuncType) (HANDLE hFile, + FILE_INFO_BY_HANDLE_CLASS fiClass, + LPVOID lpBuffer, + DWORD dwBufferSize); +static GetFileInformationByHandleExFuncType GetFileInformationByHandleExFunc = NULL; +# endif +/* GetFinalPathNameByHandle was introduced only in Windows Vista. */ +typedef DWORD (WINAPI * GetFinalPathNameByHandleFuncType) (HANDLE hFile, + LPSTR lpFilePath, + DWORD lenFilePath, + DWORD dwFlags); +static GetFinalPathNameByHandleFuncType GetFinalPathNameByHandleFunc = NULL; +static BOOL initialized = FALSE; + +static void +initialize (void) +{ + HMODULE kernel32 = LoadLibrary ("kernel32.dll"); + if (kernel32 != NULL) + { +# if _GL_WINDOWS_STAT_INODES == 2 + GetFileInformationByHandleExFunc = + (GetFileInformationByHandleExFuncType) GetProcAddress (kernel32, "GetFileInformationByHandleEx"); +# endif + GetFinalPathNameByHandleFunc = + (GetFinalPathNameByHandleFuncType) GetProcAddress (kernel32, "GetFinalPathNameByHandleA"); + } + initialized = TRUE; +} + +#else + +# define GetFileInformationByHandleExFunc GetFileInformationByHandleEx +# define GetFinalPathNameByHandleFunc GetFinalPathNameByHandle + +#endif + +/* Converts a FILETIME to GMT time since 1970-01-01 00:00:00. */ +#if _GL_WINDOWS_STAT_TIMESPEC +struct timespec +_gl_convert_FILETIME_to_timespec (const FILETIME *ft) +{ + struct timespec result; + /* FILETIME: <https://docs.microsoft.com/en-us/windows/desktop/api/minwinbase/ns-minwinbase-filetime> */ + unsigned long long since_1601 = + ((unsigned long long) ft->dwHighDateTime << 32) + | (unsigned long long) ft->dwLowDateTime; + if (since_1601 == 0) + { + result.tv_sec = 0; + result.tv_nsec = 0; + } + else + { + /* Between 1601-01-01 and 1970-01-01 there were 280 normal years and 89 + leap years, in total 134774 days. */ + unsigned long long since_1970 = + since_1601 - (unsigned long long) 134774 * (unsigned long long) 86400 * (unsigned long long) 10000000; + result.tv_sec = since_1970 / (unsigned long long) 10000000; + result.tv_nsec = (unsigned long) (since_1970 % (unsigned long long) 10000000) * 100; + } + return result; +} +#else +time_t +_gl_convert_FILETIME_to_POSIX (const FILETIME *ft) +{ + /* FILETIME: <https://docs.microsoft.com/en-us/windows/desktop/api/minwinbase/ns-minwinbase-filetime> */ + unsigned long long since_1601 = + ((unsigned long long) ft->dwHighDateTime << 32) + | (unsigned long long) ft->dwLowDateTime; + if (since_1601 == 0) + return 0; + else + { + /* Between 1601-01-01 and 1970-01-01 there were 280 normal years and 89 + leap years, in total 134774 days. */ + unsigned long long since_1970 = + since_1601 - (unsigned long long) 134774 * (unsigned long long) 86400 * (unsigned long long) 10000000; + return since_1970 / (unsigned long long) 10000000; + } +} +#endif + +/* Fill *BUF with information about the file designated by H. + PATH is the file name, if known, otherwise NULL. + Return 0 if successful, or -1 with errno set upon failure. */ +int +_gl_fstat_by_handle (HANDLE h, const char *path, struct stat *buf) +{ + /* GetFileType + <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfiletype> */ + DWORD type = GetFileType (h); + if (type == FILE_TYPE_DISK) + { +#if !WIN32_ASSUME_VISTA + if (!initialized) + initialize (); +#endif + + /* st_mode can be determined through + GetFileAttributesEx + <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfileattributesexa> + <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/ns-fileapi-_win32_file_attribute_data> + or through + GetFileInformationByHandle + <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfileinformationbyhandle> + <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/ns-fileapi-_by_handle_file_information> + or through + GetFileInformationByHandleEx with argument FileBasicInfo + <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/nf-winbase-getfileinformationbyhandleex> + <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/ns-winbase-_file_basic_info> + The latter requires -D_WIN32_WINNT=_WIN32_WINNT_VISTA or higher. */ + BY_HANDLE_FILE_INFORMATION info; + if (! GetFileInformationByHandle (h, &info)) + goto failed; + + /* Test for error conditions before starting to fill *buf. */ + if (sizeof (buf->st_size) <= 4 && info.nFileSizeHigh > 0) + { + errno = EOVERFLOW; + return -1; + } + +#if _GL_WINDOWS_STAT_INODES + /* st_ino can be determined through + GetFileInformationByHandle + <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfileinformationbyhandle> + <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/ns-fileapi-_by_handle_file_information> + as 64 bits, or through + GetFileInformationByHandleEx with argument FileIdInfo + <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/nf-winbase-getfileinformationbyhandleex> + <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/ns-winbase-_file_id_info> + as 128 bits. + The latter requires -D_WIN32_WINNT=_WIN32_WINNT_WIN8 or higher. */ + /* Experiments show that GetFileInformationByHandleEx does not provide + much more information than GetFileInformationByHandle: + * The dwVolumeSerialNumber from GetFileInformationByHandle is equal + to the low 32 bits of the 64-bit VolumeSerialNumber from + GetFileInformationByHandleEx, and is apparently sufficient for + identifying the device. + * The nFileIndex from GetFileInformationByHandle is equal to the low + 64 bits of the 128-bit FileId from GetFileInformationByHandleEx, + and the high 64 bits of this 128-bit FileId are zero. + * On a FAT file system, GetFileInformationByHandleEx fails with error + ERROR_INVALID_PARAMETER, whereas GetFileInformationByHandle + succeeds. + * On a CIFS/SMB file system, GetFileInformationByHandleEx fails with + error ERROR_INVALID_LEVEL, whereas GetFileInformationByHandle + succeeds. */ +# if _GL_WINDOWS_STAT_INODES == 2 + if (GetFileInformationByHandleExFunc != NULL) + { + FILE_ID_INFO id; + if (GetFileInformationByHandleExFunc (h, FileIdInfo, &id, sizeof (id))) + { + buf->st_dev = id.VolumeSerialNumber; + verify (sizeof (ino_t) == sizeof (id.FileId)); + memcpy (&buf->st_ino, &id.FileId, sizeof (ino_t)); + goto ino_done; + } + else + { + switch (GetLastError ()) + { + case ERROR_INVALID_PARAMETER: /* older Windows version, or FAT */ + case ERROR_INVALID_LEVEL: /* CIFS/SMB file system */ + goto fallback; + default: + goto failed; + } + } + } + fallback: ; + /* Fallback for older Windows versions. */ + buf->st_dev = info.dwVolumeSerialNumber; + buf->st_ino._gl_ino[0] = ((ULONGLONG) info.nFileIndexHigh << 32) | (ULONGLONG) info.nFileIndexLow; + buf->st_ino._gl_ino[1] = 0; + ino_done: ; +# else /* _GL_WINDOWS_STAT_INODES == 1 */ + buf->st_dev = info.dwVolumeSerialNumber; + buf->st_ino = ((ULONGLONG) info.nFileIndexHigh << 32) | (ULONGLONG) info.nFileIndexLow; +# endif +#else + /* st_ino is not wide enough for identifying a file on a device. + Without st_ino, st_dev is pointless. */ + buf->st_dev = 0; + buf->st_ino = 0; +#endif + + /* st_mode. */ + unsigned int mode = + /* XXX How to handle FILE_ATTRIBUTE_REPARSE_POINT ? */ + ((info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ? _S_IFDIR | S_IEXEC_UGO : _S_IFREG) + | S_IREAD_UGO + | ((info.dwFileAttributes & FILE_ATTRIBUTE_READONLY) ? 0 : S_IWRITE_UGO); + if (!(info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) + { + /* Determine whether the file is executable by looking at the file + name suffix. + If the file name is already known, use it. Otherwise, for + non-empty files, it can be determined through + GetFinalPathNameByHandle + <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfinalpathnamebyhandlea> + or through + GetFileInformationByHandleEx with argument FileNameInfo + <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/nf-winbase-getfileinformationbyhandleex> + <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/ns-winbase-_file_name_info> + Both require -D_WIN32_WINNT=_WIN32_WINNT_VISTA or higher. */ + if (info.nFileSizeHigh > 0 || info.nFileSizeLow > 0) + { + char fpath[PATH_MAX]; + if (path != NULL + || (GetFinalPathNameByHandleFunc != NULL + && GetFinalPathNameByHandleFunc (h, fpath, sizeof (fpath), VOLUME_NAME_NONE) + < sizeof (fpath) + && (path = fpath, 1))) + { + const char *last_dot = NULL; + const char *p; + for (p = path; *p != '\0'; p++) + if (*p == '.') + last_dot = p; + if (last_dot != NULL) + { + const char *suffix = last_dot + 1; + if (_stricmp (suffix, "exe") == 0 + || _stricmp (suffix, "bat") == 0 + || _stricmp (suffix, "cmd") == 0 + || _stricmp (suffix, "com") == 0) + mode |= S_IEXEC_UGO; + } + } + else + /* Cannot determine file name. Pretend that it is executable. */ + mode |= S_IEXEC_UGO; + } + } + buf->st_mode = mode; + + /* st_nlink can be determined through + GetFileInformationByHandle + <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfileinformationbyhandle> + <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/ns-fileapi-_by_handle_file_information> + or through + GetFileInformationByHandleEx with argument FileStandardInfo + <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/nf-winbase-getfileinformationbyhandleex> + <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/ns-winbase-_file_standard_info> + The latter requires -D_WIN32_WINNT=_WIN32_WINNT_VISTA or higher. */ + buf->st_nlink = (info.nNumberOfLinks > SHRT_MAX ? SHRT_MAX : info.nNumberOfLinks); + + /* There's no easy way to map the Windows SID concept to an integer. */ + buf->st_uid = 0; + buf->st_gid = 0; + + /* st_rdev is irrelevant for normal files and directories. */ + buf->st_rdev = 0; + + /* st_size can be determined through + GetFileSizeEx + <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfilesizeex> + or through + GetFileAttributesEx + <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfileattributesexa> + <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/ns-fileapi-_win32_file_attribute_data> + or through + GetFileInformationByHandle + <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfileinformationbyhandle> + <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/ns-fileapi-_by_handle_file_information> + or through + GetFileInformationByHandleEx with argument FileStandardInfo + <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/nf-winbase-getfileinformationbyhandleex> + <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/ns-winbase-_file_standard_info> + The latter requires -D_WIN32_WINNT=_WIN32_WINNT_VISTA or higher. */ + if (sizeof (buf->st_size) <= 4) + /* Range check already done above. */ + buf->st_size = info.nFileSizeLow; + else + buf->st_size = ((long long) info.nFileSizeHigh << 32) | (long long) info.nFileSizeLow; + + /* st_atime, st_mtime, st_ctime can be determined through + GetFileTime + <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfiletime> + or through + GetFileAttributesEx + <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfileattributesexa> + <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/ns-fileapi-_win32_file_attribute_data> + or through + GetFileInformationByHandle + <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfileinformationbyhandle> + <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/ns-fileapi-_by_handle_file_information> + or through + GetFileInformationByHandleEx with argument FileBasicInfo + <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/nf-winbase-getfileinformationbyhandleex> + <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/ns-winbase-_file_basic_info> + The latter requires -D_WIN32_WINNT=_WIN32_WINNT_VISTA or higher. */ +#if _GL_WINDOWS_STAT_TIMESPEC + buf->st_atim = _gl_convert_FILETIME_to_timespec (&info.ftLastAccessTime); + buf->st_mtim = _gl_convert_FILETIME_to_timespec (&info.ftLastWriteTime); + buf->st_ctim = _gl_convert_FILETIME_to_timespec (&info.ftCreationTime); +#else + buf->st_atime = _gl_convert_FILETIME_to_POSIX (&info.ftLastAccessTime); + buf->st_mtime = _gl_convert_FILETIME_to_POSIX (&info.ftLastWriteTime); + buf->st_ctime = _gl_convert_FILETIME_to_POSIX (&info.ftCreationTime); +#endif + + return 0; + } + else if (type == FILE_TYPE_CHAR || type == FILE_TYPE_PIPE) + { + buf->st_dev = 0; +#if _GL_WINDOWS_STAT_INODES == 2 + buf->st_ino._gl_ino[0] = buf->st_ino._gl_ino[1] = 0; +#else + buf->st_ino = 0; +#endif + buf->st_mode = (type == FILE_TYPE_PIPE ? _S_IFIFO : _S_IFCHR); + buf->st_nlink = 1; + buf->st_uid = 0; + buf->st_gid = 0; + buf->st_rdev = 0; + if (type == FILE_TYPE_PIPE) + { + /* PeekNamedPipe + <https://msdn.microsoft.com/en-us/library/aa365779.aspx> */ + DWORD bytes_available; + if (PeekNamedPipe (h, NULL, 0, NULL, &bytes_available, NULL)) + buf->st_size = bytes_available; + else + buf->st_size = 0; + } + else + buf->st_size = 0; +#if _GL_WINDOWS_STAT_TIMESPEC + buf->st_atim.tv_sec = 0; buf->st_atim.tv_nsec = 0; + buf->st_mtim.tv_sec = 0; buf->st_mtim.tv_nsec = 0; + buf->st_ctim.tv_sec = 0; buf->st_ctim.tv_nsec = 0; +#else + buf->st_atime = 0; + buf->st_mtime = 0; + buf->st_ctime = 0; +#endif + return 0; + } + else + { + errno = ENOENT; + return -1; + } + + failed: + { + DWORD error = GetLastError (); + #if 0 + fprintf (stderr, "_gl_fstat_by_handle error 0x%x\n", (unsigned int) error); + #endif + switch (error) + { + case ERROR_ACCESS_DENIED: + case ERROR_SHARING_VIOLATION: + errno = EACCES; + break; + + case ERROR_OUTOFMEMORY: + errno = ENOMEM; + break; + + case ERROR_WRITE_FAULT: + case ERROR_READ_FAULT: + case ERROR_GEN_FAILURE: + errno = EIO; + break; + + default: + errno = EINVAL; + break; + } + return -1; + } +} + +#else + +/* This declaration is solely to ensure that after preprocessing + this file is never empty. */ +typedef int dummy; + +#endif diff -Nru gdb-9.1/gnulib/import/stat-w32.h gdb-10.2/gnulib/import/stat-w32.h --- gdb-9.1/gnulib/import/stat-w32.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/stat-w32.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,37 @@ +/* Core of implementation of fstat and stat for native Windows. + Copyright (C) 2017-2020 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#ifndef _STAT_W32_H +#define _STAT_W32_H 1 + +/* Converts a FILETIME to GMT time since 1970-01-01 00:00:00. */ +#if _GL_WINDOWS_STAT_TIMESPEC +extern struct timespec _gl_convert_FILETIME_to_timespec (const FILETIME *ft); +#else +extern time_t _gl_convert_FILETIME_to_POSIX (const FILETIME *ft); +#endif + +/* Fill *BUF with information about the file designated by H. + PATH is the file name, if known, otherwise NULL. + Return 0 if successful, or -1 with errno set upon failure. */ +extern int _gl_fstat_by_handle (HANDLE h, const char *path, struct stat *buf); + +/* Bitmasks for st_mode. */ +#define S_IREAD_UGO (_S_IREAD | (_S_IREAD >> 3) | (_S_IREAD >> 6)) +#define S_IWRITE_UGO (_S_IWRITE | (_S_IWRITE >> 3) | (_S_IWRITE >> 6)) +#define S_IEXEC_UGO (_S_IEXEC | (_S_IEXEC >> 3) | (_S_IEXEC >> 6)) + +#endif /* _STAT_W32_H */ diff -Nru gdb-9.1/gnulib/import/stdalign.in.h gdb-10.2/gnulib/import/stdalign.in.h --- gdb-9.1/gnulib/import/stdalign.in.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/stdalign.in.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* A substitute for ISO C11 <stdalign.h>. - Copyright 2011-2016 Free Software Foundation, Inc. + Copyright 2011-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -13,7 +13,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, see <http://www.gnu.org/licenses/>. */ + along with this program; if not, see <https://www.gnu.org/licenses/>. */ /* Written by Paul Eggert and Bruno Haible. */ @@ -53,7 +53,7 @@ #undef _Alignof /* GCC releases before GCC 4.9 had a bug in _Alignof. See GCC bug 52023 - <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52023>. */ + <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52023>. */ #if (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112 \ || (defined __GNUC__ && __GNUC__ < 4 + (__GNUC_MINOR__ < 9))) # ifdef __cplusplus @@ -102,8 +102,8 @@ # define _Alignas(a) alignas (a) # elif ((defined __APPLE__ && defined __MACH__ \ ? 4 < __GNUC__ + (1 <= __GNUC_MINOR__) \ - : __GNUC__) \ - || 061200 <= __HP_cc || 061200 <= __HP_aCC \ + : __GNUC__ && !defined __ibmxl__) \ + || (__ia64 && (61200 <= __HP_cc || 61200 <= __HP_aCC)) \ || __ICC || 0x590 <= __SUNPRO_C || 0x0600 <= __xlC__) # define _Alignas(a) __attribute__ ((__aligned__ (a))) # elif 1300 <= _MSC_VER diff -Nru gdb-9.1/gnulib/import/stdbool.in.h gdb-10.2/gnulib/import/stdbool.in.h --- gdb-9.1/gnulib/import/stdbool.in.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/stdbool.in.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2001-2003, 2006-2016 Free Software Foundation, Inc. +/* Copyright (C) 2001-2003, 2006-2020 Free Software Foundation, Inc. Written by Bruno Haible <haible@clisp.cons.org>, 2001. This program is free software; you can redistribute it and/or modify @@ -12,7 +12,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, see <http://www.gnu.org/licenses/>. */ + along with this program; if not, see <https://www.gnu.org/licenses/>. */ #ifndef _GL_STDBOOL_H #define _GL_STDBOOL_H @@ -82,9 +82,9 @@ /* If @HAVE__BOOL@: Some HP-UX cc and AIX IBM C compiler versions have compiler bugs when the built-in _Bool type is used. See - http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html - http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html - http://lists.gnu.org/archive/html/bug-coreutils/2005-10/msg00086.html + https://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html + https://lists.gnu.org/r/bug-coreutils/2005-11/msg00161.html + https://lists.gnu.org/r/bug-coreutils/2005-10/msg00086.html Similar bugs are likely with other compilers as well; this file wouldn't be used if <stdbool.h> was working. So we override the _Bool type. diff -Nru gdb-9.1/gnulib/import/stddef.in.h gdb-10.2/gnulib/import/stddef.in.h --- gdb-9.1/gnulib/import/stddef.in.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/stddef.in.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* A substitute for POSIX 2008 <stddef.h>, for platforms that have issues. - Copyright (C) 2009-2016 Free Software Foundation, Inc. + Copyright (C) 2009-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -13,13 +13,13 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, see <http://www.gnu.org/licenses/>. */ + along with this program; if not, see <https://www.gnu.org/licenses/>. */ /* Written by Eric Blake. */ /* * POSIX 2008 <stddef.h> for platforms that have issues. - * <http://www.opengroup.org/susv3xbd/stddef.h.html> + * <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/stddef.h.html> */ #if __GNUC__ >= 3 @@ -83,26 +83,37 @@ /* Some platforms lack max_align_t. The check for _GCC_MAX_ALIGN_T is a hack in case the configure-time test was done with g++ even though - we are currently compiling with gcc. */ -#if ! (@HAVE_MAX_ALIGN_T@ || defined _GCC_MAX_ALIGN_T) + we are currently compiling with gcc. + On MSVC, max_align_t is defined only in C++ mode, after <cstddef> was + included. Its definition is good since it has an alignment of 8 (on x86 + and x86_64). */ +#if defined _MSC_VER && defined __cplusplus +# include <cstddef> +#else +# if ! (@HAVE_MAX_ALIGN_T@ || defined _GCC_MAX_ALIGN_T) +# if !GNULIB_defined_max_align_t /* On the x86, the maximum storage alignment of double, long, etc. is 4, but GCC's C11 ABI for x86 says that max_align_t has an alignment of 8, and the C11 standard allows this. Work around this problem by using __alignof__ (which returns 8 for double) rather than _Alignof (which returns 4), and align each union member accordingly. */ -# ifdef __GNUC__ -# define _GL_STDDEF_ALIGNAS(type) \ - __attribute__ ((__aligned__ (__alignof__ (type)))) -# else -# define _GL_STDDEF_ALIGNAS(type) /* */ -# endif +# ifdef __GNUC__ +# define _GL_STDDEF_ALIGNAS(type) \ + __attribute__ ((__aligned__ (__alignof__ (type)))) +# else +# define _GL_STDDEF_ALIGNAS(type) /* */ +# endif typedef union { char *__p _GL_STDDEF_ALIGNAS (char *); double __d _GL_STDDEF_ALIGNAS (double); long double __ld _GL_STDDEF_ALIGNAS (long double); long int __i _GL_STDDEF_ALIGNAS (long int); -} max_align_t; +} rpl_max_align_t; +# define max_align_t rpl_max_align_t +# define GNULIB_defined_max_align_t 1 +# endif +# endif #endif # endif /* _@GUARD_PREFIX@_STDDEF_H */ diff -Nru gdb-9.1/gnulib/import/stdint.in.h gdb-10.2/gnulib/import/stdint.in.h --- gdb-9.1/gnulib/import/stdint.in.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/stdint.in.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2001-2002, 2004-2016 Free Software Foundation, Inc. +/* Copyright (C) 2001-2002, 2004-2020 Free Software Foundation, Inc. Written by Paul Eggert, Bruno Haible, Sam Steingold, Peter Burwood. This file is part of gnulib. @@ -13,11 +13,11 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, see <http://www.gnu.org/licenses/>. */ + along with this program; if not, see <https://www.gnu.org/licenses/>. */ /* * ISO C 99 <stdint.h> for platforms that lack it. - * <http://www.opengroup.org/susv3xbd/stdint.h.html> + * <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/stdint.h.html> */ #ifndef _@GUARD_PREFIX@_STDINT_H @@ -83,6 +83,15 @@ LONG_MIN, LONG_MAX, ULONG_MAX, _GL_INTEGER_WIDTH. */ #include <limits.h> +/* Override WINT_MIN and WINT_MAX if gnulib's <wchar.h> or <wctype.h> overrides + wint_t. */ +#if @GNULIB_OVERRIDES_WINT_T@ +# undef WINT_MIN +# undef WINT_MAX +# define WINT_MIN 0x0U +# define WINT_MAX 0xffffffffU +#endif + #if ! @HAVE_C99_STDINT_H@ /* <sys/types.h> defines some of the stdint.h types as well, on glibc, @@ -119,8 +128,13 @@ Return an unspecified value if BITS == 0, adding a check to pacify picky compilers. */ -# define _STDINT_MIN(signed, bits, zero) \ - ((signed) ? ~ _STDINT_MAX (signed, bits, zero) : (zero)) +/* These are separate macros, because if you try to merge these macros into + a single one, HP-UX cc rejects the resulting expression in constant + expressions. */ +# define _STDINT_UNSIGNED_MIN(bits, zero) \ + (zero) +# define _STDINT_SIGNED_MIN(bits, zero) \ + (~ _STDINT_MAX (1, bits, zero)) # define _STDINT_MAX(signed, bits, zero) \ (((((zero) + 1) << ((bits) ? (bits) - 1 - (signed) : 0)) - 1) * 2 + 1) @@ -174,7 +188,7 @@ typedef __int64 gl_int64_t; # define int64_t gl_int64_t # define GL_INT64_T -# elif @HAVE_LONG_LONG_INT@ +# else # undef int64_t typedef long long int gl_int64_t; # define int64_t gl_int64_t @@ -195,7 +209,7 @@ typedef unsigned __int64 gl_uint64_t; # define uint64_t gl_uint64_t # define GL_UINT64_T -# elif @HAVE_UNSIGNED_LONG_LONG_INT@ +# else # undef uint64_t typedef unsigned long long int gl_uint64_t; # define uint64_t gl_uint64_t @@ -285,16 +299,26 @@ /* 7.18.1.4. Integer types capable of holding object pointers */ -/* kLIBC's stdint.h defines _INTPTR_T_DECLARED and needs its own +/* kLIBC's <stdint.h> defines _INTPTR_T_DECLARED and needs its own definitions of intptr_t and uintptr_t (which use int and unsigned) - to avoid clashes with declarations of system functions like sbrk. */ -# ifndef _INTPTR_T_DECLARED -# undef intptr_t -# undef uintptr_t + to avoid clashes with declarations of system functions like sbrk. + Similarly, mingw 5.22 <crtdefs.h> defines _INTPTR_T_DEFINED and + _UINTPTR_T_DEFINED and needs its own definitions of intptr_t and + uintptr_t to avoid conflicting declarations of system functions like + _findclose in <io.h>. */ +# if !((defined __KLIBC__ && defined _INTPTR_T_DECLARED) \ + || (defined __MINGW32__ && defined _INTPTR_T_DEFINED && defined _UINTPTR_T_DEFINED)) +# undef intptr_t +# undef uintptr_t +# ifdef _WIN64 +typedef long long int gl_intptr_t; +typedef unsigned long long int gl_uintptr_t; +# else typedef long int gl_intptr_t; typedef unsigned long int gl_uintptr_t; -# define intptr_t gl_intptr_t -# define uintptr_t gl_uintptr_t +# endif +# define intptr_t gl_intptr_t +# define uintptr_t gl_uintptr_t # endif /* 7.18.1.5. Greatest-width integer types */ @@ -309,7 +333,7 @@ # ifndef INTMAX_MAX # undef INTMAX_C # undef intmax_t -# if @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1 +# if LONG_MAX >> 30 == 1 typedef long long int gl_intmax_t; # define intmax_t gl_intmax_t # elif defined GL_INT64_T @@ -323,7 +347,7 @@ # ifndef UINTMAX_MAX # undef UINTMAX_C # undef uintmax_t -# if @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1 +# if ULONG_MAX >> 31 == 1 typedef unsigned long long int gl_uintmax_t; # define uintmax_t gl_uintmax_t # elif defined GL_UINT64_T @@ -471,9 +495,15 @@ # undef INTPTR_MIN # undef INTPTR_MAX # undef UINTPTR_MAX -# define INTPTR_MIN LONG_MIN -# define INTPTR_MAX LONG_MAX -# define UINTPTR_MAX ULONG_MAX +# ifdef _WIN64 +# define INTPTR_MIN LLONG_MIN +# define INTPTR_MAX LLONG_MAX +# define UINTPTR_MAX ULLONG_MAX +# else +# define INTPTR_MIN LONG_MIN +# define INTPTR_MAX LONG_MAX +# define UINTPTR_MAX ULONG_MAX +# endif /* 7.18.2.5. Limits of greatest-width integer types */ @@ -503,15 +533,15 @@ # undef PTRDIFF_MAX # if @APPLE_UNIVERSAL_BUILD@ # ifdef _LP64 -# define PTRDIFF_MIN _STDINT_MIN (1, 64, 0l) +# define PTRDIFF_MIN _STDINT_SIGNED_MIN (64, 0l) # define PTRDIFF_MAX _STDINT_MAX (1, 64, 0l) # else -# define PTRDIFF_MIN _STDINT_MIN (1, 32, 0) +# define PTRDIFF_MIN _STDINT_SIGNED_MIN (32, 0) # define PTRDIFF_MAX _STDINT_MAX (1, 32, 0) # endif # else # define PTRDIFF_MIN \ - _STDINT_MIN (1, @BITSIZEOF_PTRDIFF_T@, 0@PTRDIFF_T_SUFFIX@) + _STDINT_SIGNED_MIN (@BITSIZEOF_PTRDIFF_T@, 0@PTRDIFF_T_SUFFIX@) # define PTRDIFF_MAX \ _STDINT_MAX (1, @BITSIZEOF_PTRDIFF_T@, 0@PTRDIFF_T_SUFFIX@) # endif @@ -519,9 +549,13 @@ /* sig_atomic_t limits */ # undef SIG_ATOMIC_MIN # undef SIG_ATOMIC_MAX -# define SIG_ATOMIC_MIN \ - _STDINT_MIN (@HAVE_SIGNED_SIG_ATOMIC_T@, @BITSIZEOF_SIG_ATOMIC_T@, \ - 0@SIG_ATOMIC_T_SUFFIX@) +# if @HAVE_SIGNED_SIG_ATOMIC_T@ +# define SIG_ATOMIC_MIN \ + _STDINT_SIGNED_MIN (@BITSIZEOF_SIG_ATOMIC_T@, 0@SIG_ATOMIC_T_SUFFIX@) +# else +# define SIG_ATOMIC_MIN \ + _STDINT_UNSIGNED_MIN (@BITSIZEOF_SIG_ATOMIC_T@, 0@SIG_ATOMIC_T_SUFFIX@) +# endif # define SIG_ATOMIC_MAX \ _STDINT_MAX (@HAVE_SIGNED_SIG_ATOMIC_T@, @BITSIZEOF_SIG_ATOMIC_T@, \ 0@SIG_ATOMIC_T_SUFFIX@) @@ -557,18 +591,32 @@ # endif # undef WCHAR_MIN # undef WCHAR_MAX -# define WCHAR_MIN \ - _STDINT_MIN (@HAVE_SIGNED_WCHAR_T@, @BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@) +# if @HAVE_SIGNED_WCHAR_T@ +# define WCHAR_MIN \ + _STDINT_SIGNED_MIN (@BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@) +# else +# define WCHAR_MIN \ + _STDINT_UNSIGNED_MIN (@BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@) +# endif # define WCHAR_MAX \ _STDINT_MAX (@HAVE_SIGNED_WCHAR_T@, @BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@) /* wint_t limits */ -# undef WINT_MIN -# undef WINT_MAX -# define WINT_MIN \ - _STDINT_MIN (@HAVE_SIGNED_WINT_T@, @BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@) -# define WINT_MAX \ - _STDINT_MAX (@HAVE_SIGNED_WINT_T@, @BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@) +/* If gnulib's <wchar.h> or <wctype.h> overrides wint_t, @WINT_T_SUFFIX@ is not + accurate, therefore use the definitions from above. */ +# if !@GNULIB_OVERRIDES_WINT_T@ +# undef WINT_MIN +# undef WINT_MAX +# if @HAVE_SIGNED_WINT_T@ +# define WINT_MIN \ + _STDINT_SIGNED_MIN (@BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@) +# else +# define WINT_MIN \ + _STDINT_UNSIGNED_MIN (@BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@) +# endif +# define WINT_MAX \ + _STDINT_MAX (@HAVE_SIGNED_WINT_T@, @BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@) +# endif /* 7.18.4. Macros for integer constants */ @@ -599,21 +647,21 @@ # define INT64_C(x) x##L # elif defined _MSC_VER # define INT64_C(x) x##i64 -# elif @HAVE_LONG_LONG_INT@ +# else # define INT64_C(x) x##LL # endif # if ULONG_MAX >> 31 >> 31 >> 1 == 1 # define UINT64_C(x) x##UL # elif defined _MSC_VER # define UINT64_C(x) x##ui64 -# elif @HAVE_UNSIGNED_LONG_LONG_INT@ +# else # define UINT64_C(x) x##ULL # endif /* 7.18.4.2. Macros for greatest-width integer constants */ # ifndef INTMAX_C -# if @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1 +# if LONG_MAX >> 30 == 1 # define INTMAX_C(x) x##LL # elif defined GL_INT64_T # define INTMAX_C(x) INT64_C(x) @@ -623,7 +671,7 @@ # endif # ifndef UINTMAX_C -# if @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1 +# if ULONG_MAX >> 31 == 1 # define UINTMAX_C(x) x##ULL # elif defined GL_UINT64_T # define UINTMAX_C(x) UINT64_C(x) diff -Nru gdb-9.1/gnulib/import/stdio.in.h gdb-10.2/gnulib/import/stdio.in.h --- gdb-9.1/gnulib/import/stdio.in.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/stdio.in.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* A GNU-like <stdio.h>. - Copyright (C) 2004, 2007-2016 Free Software Foundation, Inc. + Copyright (C) 2004, 2007-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -13,7 +13,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, see <http://www.gnu.org/licenses/>. */ + along with this program; if not, see <https://www.gnu.org/licenses/>. */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ @@ -62,10 +62,12 @@ We enable _GL_ATTRIBUTE_FORMAT only if these are supported too, because gnulib and libintl do '#define printf __printf__' when they override the 'printf' function. */ -#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) -# define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec)) -#else -# define _GL_ATTRIBUTE_FORMAT(spec) /* empty */ +#ifndef _GL_ATTRIBUTE_FORMAT +# if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) +# define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec)) +# else +# define _GL_ATTRIBUTE_FORMAT(spec) /* empty */ +# endif #endif /* _GL_ATTRIBUTE_FORMAT_PRINTF @@ -111,13 +113,40 @@ #define _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM(formatstring_parameter, first_argument) \ _GL_ATTRIBUTE_FORMAT ((__scanf__, formatstring_parameter, first_argument)) -/* Solaris 10 declares renameat in <unistd.h>, not in <stdio.h>. */ +/* Solaris 10 and NetBSD 7.0 declare renameat in <unistd.h>, not in <stdio.h>. */ /* But in any case avoid namespace pollution on glibc systems. */ -#if (@GNULIB_RENAMEAT@ || defined GNULIB_POSIXCHECK) && defined __sun \ +#if (@GNULIB_RENAMEAT@ || defined GNULIB_POSIXCHECK) && (defined __sun || defined __NetBSD__) \ && ! defined __GLIBC__ # include <unistd.h> #endif +/* Android 4.3 declares renameat in <sys/stat.h>, not in <stdio.h>. */ +/* But in any case avoid namespace pollution on glibc systems. */ +#if (@GNULIB_RENAMEAT@ || defined GNULIB_POSIXCHECK) && defined __ANDROID__ \ + && ! defined __GLIBC__ +# include <sys/stat.h> +#endif + +/* MSVC declares 'perror' in <stdlib.h>, not in <stdio.h>. We must include + it before we #define perror rpl_perror. */ +/* But in any case avoid namespace pollution on glibc systems. */ +#if (@GNULIB_PERROR@ || defined GNULIB_POSIXCHECK) \ + && (defined _WIN32 && ! defined __CYGWIN__) \ + && ! defined __GLIBC__ +# include <stdlib.h> +#endif + +/* MSVC declares 'remove' in <io.h>, not in <stdio.h>. We must include + it before we #define remove rpl_remove. */ +/* MSVC declares 'rename' in <io.h>, not in <stdio.h>. We must include + it before we #define rename rpl_rename. */ +/* But in any case avoid namespace pollution on glibc systems. */ +#if (@GNULIB_REMOVE@ || @GNULIB_RENAME@ || defined GNULIB_POSIXCHECK) \ + && (defined _WIN32 && ! defined __CYGWIN__) \ + && ! defined __GLIBC__ +# include <io.h> +#endif + /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ @@ -132,7 +161,7 @@ /* When also using extern inline, suppress the use of static inline in standard headers of problematic Apple configurations, as Libc at least through Libc-825.26 (2013-04-09) mishandles it; see, e.g., - <http://lists.gnu.org/archive/html/bug-gnulib/2012-12/msg00023.html>. + <https://lists.gnu.org/r/bug-gnulib/2012-12/msg00023.html>. Perhaps Apple will fix this some day. */ #if (defined _GL_EXTERN_INLINE_IN_USE && defined __APPLE__ \ && defined __GNUC__ && defined __STDC__) @@ -144,17 +173,17 @@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define dprintf rpl_dprintf # endif -_GL_FUNCDECL_RPL (dprintf, int, (int fd, const char *format, ...) +_GL_FUNCDECL_RPL (dprintf, int, (int fd, const char *restrict format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) _GL_ARG_NONNULL ((2))); -_GL_CXXALIAS_RPL (dprintf, int, (int fd, const char *format, ...)); +_GL_CXXALIAS_RPL (dprintf, int, (int fd, const char *restrict format, ...)); # else # if !@HAVE_DPRINTF@ -_GL_FUNCDECL_SYS (dprintf, int, (int fd, const char *format, ...) +_GL_FUNCDECL_SYS (dprintf, int, (int fd, const char *restrict format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) _GL_ARG_NONNULL ((2))); # endif -_GL_CXXALIAS_SYS (dprintf, int, (int fd, const char *format, ...)); +_GL_CXXALIAS_SYS (dprintf, int, (int fd, const char *restrict format, ...)); # endif _GL_CXXALIASWARN (dprintf); #elif defined GNULIB_POSIXCHECK @@ -176,7 +205,9 @@ # else _GL_CXXALIAS_SYS (fclose, int, (FILE *stream)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (fclose); +# endif #elif defined GNULIB_POSIXCHECK # undef fclose /* Assume fclose is always declared. */ @@ -220,7 +251,9 @@ # else _GL_CXXALIAS_SYS (fflush, int, (FILE *gl_stream)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (fflush); +# endif #elif defined GNULIB_POSIXCHECK # undef fflush /* Assume fflush is always declared. */ @@ -239,7 +272,9 @@ # else _GL_CXXALIAS_SYS (fgetc, int, (FILE *stream)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (fgetc); +# endif #endif #if @GNULIB_FGETS@ @@ -248,13 +283,18 @@ # undef fgets # define fgets rpl_fgets # endif -_GL_FUNCDECL_RPL (fgets, char *, (char *s, int n, FILE *stream) - _GL_ARG_NONNULL ((1, 3))); -_GL_CXXALIAS_RPL (fgets, char *, (char *s, int n, FILE *stream)); +_GL_FUNCDECL_RPL (fgets, char *, + (char *restrict s, int n, FILE *restrict stream) + _GL_ARG_NONNULL ((1, 3))); +_GL_CXXALIAS_RPL (fgets, char *, + (char *restrict s, int n, FILE *restrict stream)); # else -_GL_CXXALIAS_SYS (fgets, char *, (char *s, int n, FILE *stream)); +_GL_CXXALIAS_SYS (fgets, char *, + (char *restrict s, int n, FILE *restrict stream)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (fgets); +# endif #endif #if @GNULIB_FOPEN@ @@ -263,13 +303,18 @@ # undef fopen # define fopen rpl_fopen # endif -_GL_FUNCDECL_RPL (fopen, FILE *, (const char *filename, const char *mode) - _GL_ARG_NONNULL ((1, 2))); -_GL_CXXALIAS_RPL (fopen, FILE *, (const char *filename, const char *mode)); +_GL_FUNCDECL_RPL (fopen, FILE *, + (const char *restrict filename, const char *restrict mode) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (fopen, FILE *, + (const char *restrict filename, const char *restrict mode)); # else -_GL_CXXALIAS_SYS (fopen, FILE *, (const char *filename, const char *mode)); +_GL_CXXALIAS_SYS (fopen, FILE *, + (const char *restrict filename, const char *restrict mode)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (fopen); +# endif #elif defined GNULIB_POSIXCHECK # undef fopen /* Assume fopen is always declared. */ @@ -285,19 +330,25 @@ # endif # define GNULIB_overrides_fprintf 1 # if @GNULIB_FPRINTF_POSIX@ || @GNULIB_VFPRINTF_POSIX@ -_GL_FUNCDECL_RPL (fprintf, int, (FILE *fp, const char *format, ...) - _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) - _GL_ARG_NONNULL ((1, 2))); +_GL_FUNCDECL_RPL (fprintf, int, + (FILE *restrict fp, const char *restrict format, ...) + _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) + _GL_ARG_NONNULL ((1, 2))); # else -_GL_FUNCDECL_RPL (fprintf, int, (FILE *fp, const char *format, ...) - _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (2, 3) - _GL_ARG_NONNULL ((1, 2))); +_GL_FUNCDECL_RPL (fprintf, int, + (FILE *restrict fp, const char *restrict format, ...) + _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (2, 3) + _GL_ARG_NONNULL ((1, 2))); # endif -_GL_CXXALIAS_RPL (fprintf, int, (FILE *fp, const char *format, ...)); +_GL_CXXALIAS_RPL (fprintf, int, + (FILE *restrict fp, const char *restrict format, ...)); # else -_GL_CXXALIAS_SYS (fprintf, int, (FILE *fp, const char *format, ...)); +_GL_CXXALIAS_SYS (fprintf, int, + (FILE *restrict fp, const char *restrict format, ...)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (fprintf); +# endif #endif #if !@GNULIB_FPRINTF_POSIX@ && defined GNULIB_POSIXCHECK # if !GNULIB_overrides_fprintf @@ -348,7 +399,9 @@ # else _GL_CXXALIAS_SYS (fputc, int, (int c, FILE *stream)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (fputc); +# endif #endif #if @GNULIB_FPUTS@ @@ -357,13 +410,18 @@ # undef fputs # define fputs rpl_fputs # endif -_GL_FUNCDECL_RPL (fputs, int, (const char *string, FILE *stream) - _GL_ARG_NONNULL ((1, 2))); -_GL_CXXALIAS_RPL (fputs, int, (const char *string, FILE *stream)); +_GL_FUNCDECL_RPL (fputs, int, + (const char *restrict string, FILE *restrict stream) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (fputs, int, + (const char *restrict string, FILE *restrict stream)); # else -_GL_CXXALIAS_SYS (fputs, int, (const char *string, FILE *stream)); +_GL_CXXALIAS_SYS (fputs, int, + (const char *restrict string, FILE *restrict stream)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (fputs); +# endif #endif #if @GNULIB_FREAD@ @@ -372,13 +430,21 @@ # undef fread # define fread rpl_fread # endif -_GL_FUNCDECL_RPL (fread, size_t, (void *ptr, size_t s, size_t n, FILE *stream) - _GL_ARG_NONNULL ((4))); -_GL_CXXALIAS_RPL (fread, size_t, (void *ptr, size_t s, size_t n, FILE *stream)); -# else -_GL_CXXALIAS_SYS (fread, size_t, (void *ptr, size_t s, size_t n, FILE *stream)); +_GL_FUNCDECL_RPL (fread, size_t, + (void *restrict ptr, size_t s, size_t n, + FILE *restrict stream) + _GL_ARG_NONNULL ((4))); +_GL_CXXALIAS_RPL (fread, size_t, + (void *restrict ptr, size_t s, size_t n, + FILE *restrict stream)); +# else +_GL_CXXALIAS_SYS (fread, size_t, + (void *restrict ptr, size_t s, size_t n, + FILE *restrict stream)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (fread); +# endif #endif #if @GNULIB_FREOPEN@ @@ -388,15 +454,20 @@ # define freopen rpl_freopen # endif _GL_FUNCDECL_RPL (freopen, FILE *, - (const char *filename, const char *mode, FILE *stream) + (const char *restrict filename, const char *restrict mode, + FILE *restrict stream) _GL_ARG_NONNULL ((2, 3))); _GL_CXXALIAS_RPL (freopen, FILE *, - (const char *filename, const char *mode, FILE *stream)); + (const char *restrict filename, const char *restrict mode, + FILE *restrict stream)); # else _GL_CXXALIAS_SYS (freopen, FILE *, - (const char *filename, const char *mode, FILE *stream)); + (const char *restrict filename, const char *restrict mode, + FILE *restrict stream)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (freopen); +# endif #elif defined GNULIB_POSIXCHECK # undef freopen /* Assume freopen is always declared. */ @@ -411,14 +482,19 @@ # undef fscanf # define fscanf rpl_fscanf # endif -_GL_FUNCDECL_RPL (fscanf, int, (FILE *stream, const char *format, ...) - _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (2, 3) - _GL_ARG_NONNULL ((1, 2))); -_GL_CXXALIAS_RPL (fscanf, int, (FILE *stream, const char *format, ...)); +_GL_FUNCDECL_RPL (fscanf, int, + (FILE *restrict stream, const char *restrict format, ...) + _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (2, 3) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (fscanf, int, + (FILE *restrict stream, const char *restrict format, ...)); # else -_GL_CXXALIAS_SYS (fscanf, int, (FILE *stream, const char *format, ...)); +_GL_CXXALIAS_SYS (fscanf, int, + (FILE *restrict stream, const char *restrict format, ...)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (fscanf); +# endif #endif @@ -469,7 +545,9 @@ # else _GL_CXXALIAS_SYS (fseek, int, (FILE *fp, long offset, int whence)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (fseek); +# endif #endif #if @GNULIB_FSEEKO@ @@ -532,7 +610,9 @@ # else _GL_CXXALIAS_SYS (ftell, long, (FILE *fp)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (ftell); +# endif #endif #if @GNULIB_FTELLO@ @@ -581,16 +661,19 @@ # define fwrite rpl_fwrite # endif _GL_FUNCDECL_RPL (fwrite, size_t, - (const void *ptr, size_t s, size_t n, FILE *stream) + (const void *restrict ptr, size_t s, size_t n, + FILE *restrict stream) _GL_ARG_NONNULL ((1, 4))); _GL_CXXALIAS_RPL (fwrite, size_t, - (const void *ptr, size_t s, size_t n, FILE *stream)); + (const void *restrict ptr, size_t s, size_t n, + FILE *restrict stream)); # else _GL_CXXALIAS_SYS (fwrite, size_t, - (const void *ptr, size_t s, size_t n, FILE *stream)); + (const void *restrict ptr, size_t s, size_t n, + FILE *restrict stream)); /* Work around bug 11959 when fortifying glibc 2.4 through 2.15 - <http://sources.redhat.com/bugzilla/show_bug.cgi?id=11959>, + <https://sourceware.org/bugzilla/show_bug.cgi?id=11959>, which sometimes causes an unwanted diagnostic for fwrite calls. This affects only function declaration attributes under certain versions of gcc and clang, and is not needed for C++. */ @@ -612,7 +695,9 @@ # define fwrite_unlocked rpl_fwrite_unlocked # endif # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (fwrite); +# endif #endif #if @GNULIB_GETC@ @@ -626,7 +711,9 @@ # else _GL_CXXALIAS_SYS (getc, int, (FILE *stream)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (getc); +# endif #endif #if @GNULIB_GETCHAR@ @@ -640,7 +727,9 @@ # else _GL_CXXALIAS_SYS (getchar, int, (void)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (getchar); +# endif #endif #if @GNULIB_GETDELIM@ @@ -656,22 +745,26 @@ # define getdelim rpl_getdelim # endif _GL_FUNCDECL_RPL (getdelim, ssize_t, - (char **lineptr, size_t *linesize, int delimiter, - FILE *stream) + (char **restrict lineptr, size_t *restrict linesize, + int delimiter, + FILE *restrict stream) _GL_ARG_NONNULL ((1, 2, 4))); _GL_CXXALIAS_RPL (getdelim, ssize_t, - (char **lineptr, size_t *linesize, int delimiter, - FILE *stream)); + (char **restrict lineptr, size_t *restrict linesize, + int delimiter, + FILE *restrict stream)); # else # if !@HAVE_DECL_GETDELIM@ _GL_FUNCDECL_SYS (getdelim, ssize_t, - (char **lineptr, size_t *linesize, int delimiter, - FILE *stream) + (char **restrict lineptr, size_t *restrict linesize, + int delimiter, + FILE *restrict stream) _GL_ARG_NONNULL ((1, 2, 4))); # endif _GL_CXXALIAS_SYS (getdelim, ssize_t, - (char **lineptr, size_t *linesize, int delimiter, - FILE *stream)); + (char **restrict lineptr, size_t *restrict linesize, + int delimiter, + FILE *restrict stream)); # endif _GL_CXXALIASWARN (getdelim); #elif defined GNULIB_POSIXCHECK @@ -695,18 +788,22 @@ # define getline rpl_getline # endif _GL_FUNCDECL_RPL (getline, ssize_t, - (char **lineptr, size_t *linesize, FILE *stream) + (char **restrict lineptr, size_t *restrict linesize, + FILE *restrict stream) _GL_ARG_NONNULL ((1, 2, 3))); _GL_CXXALIAS_RPL (getline, ssize_t, - (char **lineptr, size_t *linesize, FILE *stream)); + (char **restrict lineptr, size_t *restrict linesize, + FILE *restrict stream)); # else # if !@HAVE_DECL_GETLINE@ _GL_FUNCDECL_SYS (getline, ssize_t, - (char **lineptr, size_t *linesize, FILE *stream) + (char **restrict lineptr, size_t *restrict linesize, + FILE *restrict stream) _GL_ARG_NONNULL ((1, 2, 3))); # endif _GL_CXXALIAS_SYS (getline, ssize_t, - (char **lineptr, size_t *linesize, FILE *stream)); + (char **restrict lineptr, size_t *restrict linesize, + FILE *restrict stream)); # endif # if @HAVE_DECL_GETLINE@ _GL_CXXALIASWARN (getline); @@ -805,7 +902,9 @@ # else _GL_CXXALIAS_SYS (perror, void, (const char *string)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (perror); +# endif #elif defined GNULIB_POSIXCHECK # undef perror /* Assume perror is always declared. */ @@ -848,14 +947,14 @@ # endif # if @GNULIB_PRINTF_POSIX@ || @GNULIB_VFPRINTF_POSIX@ _GL_FUNCDECL_RPL_1 (__printf__, int, - (const char *format, ...) + (const char *restrict format, ...) __asm__ (@ASM_SYMBOL_PREFIX@ _GL_STDIO_MACROEXPAND_AND_STRINGIZE(rpl_printf)) _GL_ATTRIBUTE_FORMAT_PRINTF (1, 2) _GL_ARG_NONNULL ((1))); # else _GL_FUNCDECL_RPL_1 (__printf__, int, - (const char *format, ...) + (const char *restrict format, ...) __asm__ (@ASM_SYMBOL_PREFIX@ _GL_STDIO_MACROEXPAND_AND_STRINGIZE(rpl_printf)) _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (1, 2) @@ -867,16 +966,18 @@ # define printf rpl_printf # endif _GL_FUNCDECL_RPL (printf, int, - (const char *format, ...) + (const char *restrict format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF (1, 2) _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (printf, int, (const char *format, ...)); +_GL_CXXALIAS_RPL (printf, int, (const char *restrict format, ...)); # endif # define GNULIB_overrides_printf 1 # else -_GL_CXXALIAS_SYS (printf, int, (const char *format, ...)); +_GL_CXXALIAS_SYS (printf, int, (const char *restrict format, ...)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (printf); +# endif #endif #if !@GNULIB_PRINTF_POSIX@ && defined GNULIB_POSIXCHECK # if !GNULIB_overrides_printf @@ -899,7 +1000,9 @@ # else _GL_CXXALIAS_SYS (putc, int, (int c, FILE *stream)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (putc); +# endif #endif #if @GNULIB_PUTCHAR@ @@ -913,7 +1016,9 @@ # else _GL_CXXALIAS_SYS (putchar, int, (int c)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (putchar); +# endif #endif #if @GNULIB_PUTS@ @@ -927,7 +1032,9 @@ # else _GL_CXXALIAS_SYS (puts, int, (const char *string)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (puts); +# endif #endif #if @GNULIB_REMOVE@ @@ -941,7 +1048,9 @@ # else _GL_CXXALIAS_SYS (remove, int, (const char *name)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (remove); +# endif #elif defined GNULIB_POSIXCHECK # undef remove /* Assume remove is always declared. */ @@ -964,7 +1073,9 @@ _GL_CXXALIAS_SYS (rename, int, (const char *old_filename, const char *new_filename)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (rename); +# endif #elif defined GNULIB_POSIXCHECK # undef rename /* Assume rename is always declared. */ @@ -1010,26 +1121,28 @@ # define scanf __scanf__ # endif _GL_FUNCDECL_RPL_1 (__scanf__, int, - (const char *format, ...) + (const char *restrict format, ...) __asm__ (@ASM_SYMBOL_PREFIX@ _GL_STDIO_MACROEXPAND_AND_STRINGIZE(rpl_scanf)) _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (1, 2) _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL_1 (scanf, __scanf__, int, (const char *format, ...)); +_GL_CXXALIAS_RPL_1 (scanf, __scanf__, int, (const char *restrict format, ...)); # else # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef scanf # define scanf rpl_scanf # endif -_GL_FUNCDECL_RPL (scanf, int, (const char *format, ...) +_GL_FUNCDECL_RPL (scanf, int, (const char *restrict format, ...) _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (1, 2) _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (scanf, int, (const char *format, ...)); +_GL_CXXALIAS_RPL (scanf, int, (const char *restrict format, ...)); # endif # else -_GL_CXXALIAS_SYS (scanf, int, (const char *format, ...)); +_GL_CXXALIAS_SYS (scanf, int, (const char *restrict format, ...)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (scanf); +# endif #endif #if @GNULIB_SNPRINTF@ @@ -1038,20 +1151,24 @@ # define snprintf rpl_snprintf # endif _GL_FUNCDECL_RPL (snprintf, int, - (char *str, size_t size, const char *format, ...) + (char *restrict str, size_t size, + const char *restrict format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF (3, 4) _GL_ARG_NONNULL ((3))); _GL_CXXALIAS_RPL (snprintf, int, - (char *str, size_t size, const char *format, ...)); + (char *restrict str, size_t size, + const char *restrict format, ...)); # else # if !@HAVE_DECL_SNPRINTF@ _GL_FUNCDECL_SYS (snprintf, int, - (char *str, size_t size, const char *format, ...) + (char *restrict str, size_t size, + const char *restrict format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF (3, 4) _GL_ARG_NONNULL ((3))); # endif _GL_CXXALIAS_SYS (snprintf, int, - (char *str, size_t size, const char *format, ...)); + (char *restrict str, size_t size, + const char *restrict format, ...)); # endif _GL_CXXALIASWARN (snprintf); #elif defined GNULIB_POSIXCHECK @@ -1076,14 +1193,19 @@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define sprintf rpl_sprintf # endif -_GL_FUNCDECL_RPL (sprintf, int, (char *str, const char *format, ...) - _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) - _GL_ARG_NONNULL ((1, 2))); -_GL_CXXALIAS_RPL (sprintf, int, (char *str, const char *format, ...)); +_GL_FUNCDECL_RPL (sprintf, int, + (char *restrict str, const char *restrict format, ...) + _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (sprintf, int, + (char *restrict str, const char *restrict format, ...)); # else -_GL_CXXALIAS_SYS (sprintf, int, (char *str, const char *format, ...)); +_GL_CXXALIAS_SYS (sprintf, int, + (char *restrict str, const char *restrict format, ...)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (sprintf); +# endif #elif defined GNULIB_POSIXCHECK # undef sprintf /* Assume sprintf is always declared. */ @@ -1102,7 +1224,9 @@ # else _GL_CXXALIAS_SYS (tmpfile, FILE *, (void)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (tmpfile); +# endif #elif defined GNULIB_POSIXCHECK # undef tmpfile # if HAVE_RAW_DECL_TMPFILE @@ -1165,22 +1289,27 @@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define vdprintf rpl_vdprintf # endif -_GL_FUNCDECL_RPL (vdprintf, int, (int fd, const char *format, va_list args) - _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) - _GL_ARG_NONNULL ((2))); -_GL_CXXALIAS_RPL (vdprintf, int, (int fd, const char *format, va_list args)); +_GL_FUNCDECL_RPL (vdprintf, int, + (int fd, const char *restrict format, va_list args) + _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (vdprintf, int, + (int fd, const char *restrict format, va_list args)); # else # if !@HAVE_VDPRINTF@ -_GL_FUNCDECL_SYS (vdprintf, int, (int fd, const char *format, va_list args) - _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) - _GL_ARG_NONNULL ((2))); +_GL_FUNCDECL_SYS (vdprintf, int, + (int fd, const char *restrict format, va_list args) + _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) + _GL_ARG_NONNULL ((2))); # endif /* Need to cast, because on Solaris, the third parameter will likely be __va_list args. */ _GL_CXXALIAS_SYS_CAST (vdprintf, int, - (int fd, const char *format, va_list args)); + (int fd, const char *restrict format, va_list args)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (vdprintf); +# endif #elif defined GNULIB_POSIXCHECK # undef vdprintf # if HAVE_RAW_DECL_VDPRINTF @@ -1197,23 +1326,32 @@ # endif # define GNULIB_overrides_vfprintf 1 # if @GNULIB_VFPRINTF_POSIX@ -_GL_FUNCDECL_RPL (vfprintf, int, (FILE *fp, const char *format, va_list args) - _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) - _GL_ARG_NONNULL ((1, 2))); +_GL_FUNCDECL_RPL (vfprintf, int, + (FILE *restrict fp, + const char *restrict format, va_list args) + _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) + _GL_ARG_NONNULL ((1, 2))); # else -_GL_FUNCDECL_RPL (vfprintf, int, (FILE *fp, const char *format, va_list args) - _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (2, 0) - _GL_ARG_NONNULL ((1, 2))); +_GL_FUNCDECL_RPL (vfprintf, int, + (FILE *restrict fp, + const char *restrict format, va_list args) + _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (2, 0) + _GL_ARG_NONNULL ((1, 2))); # endif -_GL_CXXALIAS_RPL (vfprintf, int, (FILE *fp, const char *format, va_list args)); +_GL_CXXALIAS_RPL (vfprintf, int, + (FILE *restrict fp, + const char *restrict format, va_list args)); # else /* Need to cast, because on Solaris, the third parameter is __va_list args and GCC's fixincludes did not change this to __gnuc_va_list. */ _GL_CXXALIAS_SYS_CAST (vfprintf, int, - (FILE *fp, const char *format, va_list args)); + (FILE *restrict fp, + const char *restrict format, va_list args)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (vfprintf); +# endif #endif #if !@GNULIB_VFPRINTF_POSIX@ && defined GNULIB_POSIXCHECK # if !GNULIB_overrides_vfprintf @@ -1232,14 +1370,17 @@ # define vfscanf rpl_vfscanf # endif _GL_FUNCDECL_RPL (vfscanf, int, - (FILE *stream, const char *format, va_list args) + (FILE *restrict stream, + const char *restrict format, va_list args) _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (2, 0) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (vfscanf, int, - (FILE *stream, const char *format, va_list args)); + (FILE *restrict stream, + const char *restrict format, va_list args)); # else _GL_CXXALIAS_SYS (vfscanf, int, - (FILE *stream, const char *format, va_list args)); + (FILE *restrict stream, + const char *restrict format, va_list args)); # endif _GL_CXXALIASWARN (vfscanf); #endif @@ -1252,22 +1393,25 @@ # endif # define GNULIB_overrides_vprintf 1 # if @GNULIB_VPRINTF_POSIX@ || @GNULIB_VFPRINTF_POSIX@ -_GL_FUNCDECL_RPL (vprintf, int, (const char *format, va_list args) +_GL_FUNCDECL_RPL (vprintf, int, (const char *restrict format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF (1, 0) _GL_ARG_NONNULL ((1))); # else -_GL_FUNCDECL_RPL (vprintf, int, (const char *format, va_list args) +_GL_FUNCDECL_RPL (vprintf, int, (const char *restrict format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (1, 0) _GL_ARG_NONNULL ((1))); # endif -_GL_CXXALIAS_RPL (vprintf, int, (const char *format, va_list args)); +_GL_CXXALIAS_RPL (vprintf, int, (const char *restrict format, va_list args)); # else /* Need to cast, because on Solaris, the second parameter is __va_list args and GCC's fixincludes did not change this to __gnuc_va_list. */ -_GL_CXXALIAS_SYS_CAST (vprintf, int, (const char *format, va_list args)); +_GL_CXXALIAS_SYS_CAST (vprintf, int, + (const char *restrict format, va_list args)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (vprintf); +# endif #endif #if !@GNULIB_VPRINTF_POSIX@ && defined GNULIB_POSIXCHECK # if !GNULIB_overrides_vprintf @@ -1285,12 +1429,12 @@ # undef vscanf # define vscanf rpl_vscanf # endif -_GL_FUNCDECL_RPL (vscanf, int, (const char *format, va_list args) +_GL_FUNCDECL_RPL (vscanf, int, (const char *restrict format, va_list args) _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (1, 0) _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (vscanf, int, (const char *format, va_list args)); +_GL_CXXALIAS_RPL (vscanf, int, (const char *restrict format, va_list args)); # else -_GL_CXXALIAS_SYS (vscanf, int, (const char *format, va_list args)); +_GL_CXXALIAS_SYS (vscanf, int, (const char *restrict format, va_list args)); # endif _GL_CXXALIASWARN (vscanf); #endif @@ -1301,20 +1445,24 @@ # define vsnprintf rpl_vsnprintf # endif _GL_FUNCDECL_RPL (vsnprintf, int, - (char *str, size_t size, const char *format, va_list args) + (char *restrict str, size_t size, + const char *restrict format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF (3, 0) _GL_ARG_NONNULL ((3))); _GL_CXXALIAS_RPL (vsnprintf, int, - (char *str, size_t size, const char *format, va_list args)); + (char *restrict str, size_t size, + const char *restrict format, va_list args)); # else # if !@HAVE_DECL_VSNPRINTF@ _GL_FUNCDECL_SYS (vsnprintf, int, - (char *str, size_t size, const char *format, va_list args) + (char *restrict str, size_t size, + const char *restrict format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF (3, 0) _GL_ARG_NONNULL ((3))); # endif _GL_CXXALIAS_SYS (vsnprintf, int, - (char *str, size_t size, const char *format, va_list args)); + (char *restrict str, size_t size, + const char *restrict format, va_list args)); # endif _GL_CXXALIASWARN (vsnprintf); #elif defined GNULIB_POSIXCHECK @@ -1331,19 +1479,24 @@ # define vsprintf rpl_vsprintf # endif _GL_FUNCDECL_RPL (vsprintf, int, - (char *str, const char *format, va_list args) + (char *restrict str, + const char *restrict format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (vsprintf, int, - (char *str, const char *format, va_list args)); + (char *restrict str, + const char *restrict format, va_list args)); # else /* Need to cast, because on Solaris, the third parameter is __va_list args and GCC's fixincludes did not change this to __gnuc_va_list. */ _GL_CXXALIAS_SYS_CAST (vsprintf, int, - (char *str, const char *format, va_list args)); + (char *restrict str, + const char *restrict format, va_list args)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (vsprintf); +# endif #elif defined GNULIB_POSIXCHECK # undef vsprintf /* Assume vsprintf is always declared. */ diff -Nru gdb-9.1/gnulib/import/stdlib.in.h gdb-10.2/gnulib/import/stdlib.in.h --- gdb-9.1/gnulib/import/stdlib.in.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/stdlib.in.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* A GNU-like <stdlib.h>. - Copyright (C) 1995, 2001-2004, 2006-2016 Free Software Foundation, Inc. + Copyright (C) 1995, 2001-2004, 2006-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -13,7 +13,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ @@ -47,11 +47,14 @@ /* Solaris declares getloadavg() in <sys/loadavg.h>. */ #if (@GNULIB_GETLOADAVG@ || defined GNULIB_POSIXCHECK) && @HAVE_SYS_LOADAVG_H@ +/* OpenIndiana has a bug: <sys/time.h> must be included before + <sys/loadavg.h>. */ +# include <sys/time.h> # include <sys/loadavg.h> #endif /* Native Windows platforms declare mktemp() in <io.h>. */ -#if 0 && ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) +#if 0 && (defined _WIN32 && ! defined __CYGWIN__) # include <io.h> #endif @@ -87,7 +90,7 @@ # endif #endif -#if (@GNULIB_MKSTEMP@ || @GNULIB_MKSTEMPS@ || @GNULIB_MKOSTEMP@ || @GNULIB_MKOSTEMPS@ || @GNULIB_GETSUBOPT@ || defined GNULIB_POSIXCHECK) && ! defined __GLIBC__ && !((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) +#if (@GNULIB_MKSTEMP@ || @GNULIB_MKSTEMPS@ || @GNULIB_MKOSTEMP@ || @GNULIB_MKOSTEMPS@ || @GNULIB_GETSUBOPT@ || defined GNULIB_POSIXCHECK) && ! defined __GLIBC__ && !(defined _WIN32 && ! defined __CYGWIN__) /* On Mac OS X 10.3, only <unistd.h> declares mkstemp. */ /* On Mac OS X 10.5, only <unistd.h> declares mkstemps. */ /* On Mac OS X 10.13, only <unistd.h> declares mkostemp and mkostemps. */ @@ -98,10 +101,12 @@ /* The __attribute__ feature is available in gcc versions 2.5 and later. The attribute __pure__ was added in gcc 2.96. */ -#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) -# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) -#else -# define _GL_ATTRIBUTE_PURE /* empty */ +#ifndef _GL_ATTRIBUTE_PURE +# if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) +# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) +# else +# define _GL_ATTRIBUTE_PURE /* empty */ +# endif #endif /* The definition of _Noreturn is copied here. */ @@ -173,7 +178,9 @@ # else _GL_CXXALIAS_SYS (calloc, void *, (size_t nmemb, size_t size)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (calloc); +# endif #elif defined GNULIB_POSIXCHECK # undef calloc /* Assume calloc is always declared. */ @@ -196,6 +203,10 @@ # endif _GL_CXXALIAS_SYS (canonicalize_file_name, char *, (const char *name)); # endif +# ifndef GNULIB_defined_canonicalize_file_name +# define GNULIB_defined_canonicalize_file_name \ + (!@HAVE_CANONICALIZE_FILE_NAME@ || @REPLACE_CANONICALIZE_FILE_NAME@) +# endif _GL_CXXALIASWARN (canonicalize_file_name); #elif defined GNULIB_POSIXCHECK # undef canonicalize_file_name @@ -235,8 +246,8 @@ element (or NULL if it doesn't contain an "=" sign), - It returns the index of the "token" in the given array of tokens. Otherwise it returns -1, and *OPTIONP and *VALUEP are undefined. - For more details see the POSIX:2001 specification. - http://www.opengroup.org/susv3xsh/getsubopt.html */ + For more details see the POSIX specification. + https://pubs.opengroup.org/onlinepubs/9699919799/functions/getsubopt.html */ # if !@HAVE_GETSUBOPT@ _GL_FUNCDECL_SYS (getsubopt, int, (char **optionp, char *const *tokens, char **valuep) @@ -285,7 +296,9 @@ # else _GL_CXXALIAS_SYS (malloc, void *, (size_t size)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (malloc); +# endif #elif defined GNULIB_POSIXCHECK && !_GL_USE_STDLIB_ALLOC # undef malloc /* Assume malloc is always declared. */ @@ -300,12 +313,27 @@ # undef mbtowc # define mbtowc rpl_mbtowc # endif -_GL_FUNCDECL_RPL (mbtowc, int, (wchar_t *pwc, const char *s, size_t n)); -_GL_CXXALIAS_RPL (mbtowc, int, (wchar_t *pwc, const char *s, size_t n)); +_GL_FUNCDECL_RPL (mbtowc, int, + (wchar_t *restrict pwc, const char *restrict s, size_t n)); +_GL_CXXALIAS_RPL (mbtowc, int, + (wchar_t *restrict pwc, const char *restrict s, size_t n)); # else -_GL_CXXALIAS_SYS (mbtowc, int, (wchar_t *pwc, const char *s, size_t n)); +# if !@HAVE_MBTOWC@ +_GL_FUNCDECL_SYS (mbtowc, int, + (wchar_t *restrict pwc, const char *restrict s, size_t n)); +# endif +_GL_CXXALIAS_SYS (mbtowc, int, + (wchar_t *restrict pwc, const char *restrict s, size_t n)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (mbtowc); +# endif +#elif defined GNULIB_POSIXCHECK +# undef mbtowc +# if HAVE_RAW_DECL_MBTOWC +_GL_WARN_ON_USE (mbtowc, "mbtowc is not portable - " + "use gnulib module mbtowc for portability"); +# endif #endif #if @GNULIB_MKDTEMP@ @@ -498,6 +526,9 @@ # endif _GL_CXXALIAS_SYS (ptsname_r, int, (int fd, char *buf, size_t len)); # endif +# ifndef GNULIB_defined_ptsname_r +# define GNULIB_defined_ptsname_r (!@HAVE_PTSNAME_R@ || @REPLACE_PTSNAME_R@) +# endif _GL_CXXALIASWARN (ptsname_r); #elif defined GNULIB_POSIXCHECK # undef ptsname_r @@ -570,10 +601,21 @@ #if @GNULIB_RANDOM@ -# if !@HAVE_RANDOM@ +# if @REPLACE_RANDOM@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef random +# define random rpl_random +# endif +_GL_FUNCDECL_RPL (random, long, (void)); +_GL_CXXALIAS_RPL (random, long, (void)); +# else +# if !@HAVE_RANDOM@ _GL_FUNCDECL_SYS (random, long, (void)); +# endif +/* Need to cast, because on Haiku, the return type is + int. */ +_GL_CXXALIAS_SYS_CAST (random, long, (void)); # endif -_GL_CXXALIAS_SYS (random, long, (void)); _GL_CXXALIASWARN (random); #elif defined GNULIB_POSIXCHECK # undef random @@ -584,10 +626,21 @@ #endif #if @GNULIB_RANDOM@ -# if !@HAVE_RANDOM@ +# if @REPLACE_RANDOM@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef srandom +# define srandom rpl_srandom +# endif +_GL_FUNCDECL_RPL (srandom, void, (unsigned int seed)); +_GL_CXXALIAS_RPL (srandom, void, (unsigned int seed)); +# else +# if !@HAVE_RANDOM@ _GL_FUNCDECL_SYS (srandom, void, (unsigned int seed)); +# endif +/* Need to cast, because on FreeBSD, the first parameter is + unsigned long seed. */ +_GL_CXXALIAS_SYS_CAST (srandom, void, (unsigned int seed)); # endif -_GL_CXXALIAS_SYS (srandom, void, (unsigned int seed)); _GL_CXXALIASWARN (srandom); #elif defined GNULIB_POSIXCHECK # undef srandom @@ -598,31 +651,56 @@ #endif #if @GNULIB_RANDOM@ -# if !@HAVE_RANDOM@ +# if @REPLACE_INITSTATE@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef initstate +# define initstate rpl_initstate +# endif +_GL_FUNCDECL_RPL (initstate, char *, + (unsigned int seed, char *buf, size_t buf_size) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (initstate, char *, + (unsigned int seed, char *buf, size_t buf_size)); +# else +# if !@HAVE_INITSTATE@ || !@HAVE_DECL_INITSTATE@ _GL_FUNCDECL_SYS (initstate, char *, (unsigned int seed, char *buf, size_t buf_size) _GL_ARG_NONNULL ((2))); +# endif +/* Need to cast, because on FreeBSD, the first parameter is + unsigned long seed. */ +_GL_CXXALIAS_SYS_CAST (initstate, char *, + (unsigned int seed, char *buf, size_t buf_size)); # endif -_GL_CXXALIAS_SYS (initstate, char *, - (unsigned int seed, char *buf, size_t buf_size)); _GL_CXXALIASWARN (initstate); #elif defined GNULIB_POSIXCHECK # undef initstate -# if HAVE_RAW_DECL_INITSTATE_R +# if HAVE_RAW_DECL_INITSTATE _GL_WARN_ON_USE (initstate, "initstate is unportable - " "use gnulib module random for portability"); # endif #endif #if @GNULIB_RANDOM@ -# if !@HAVE_RANDOM@ +# if @REPLACE_SETSTATE@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef setstate +# define setstate rpl_setstate +# endif +_GL_FUNCDECL_RPL (setstate, char *, (char *arg_state) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (setstate, char *, (char *arg_state)); +# else +# if !@HAVE_SETSTATE@ || !@HAVE_DECL_SETSTATE@ _GL_FUNCDECL_SYS (setstate, char *, (char *arg_state) _GL_ARG_NONNULL ((1))); +# endif +/* Need to cast, because on Mac OS X 10.13, HP-UX, Solaris the first parameter + is const char *arg_state. */ +_GL_CXXALIAS_SYS_CAST (setstate, char *, (char *arg_state)); # endif -_GL_CXXALIAS_SYS (setstate, char *, (char *arg_state)); _GL_CXXALIASWARN (setstate); #elif defined GNULIB_POSIXCHECK # undef setstate -# if HAVE_RAW_DECL_SETSTATE_R +# if HAVE_RAW_DECL_SETSTATE _GL_WARN_ON_USE (setstate, "setstate is unportable - " "use gnulib module random for portability"); # endif @@ -703,9 +781,11 @@ struct random_data *rand_state) _GL_ARG_NONNULL ((2, 4))); # endif -_GL_CXXALIAS_SYS (initstate_r, int, - (unsigned int seed, char *buf, size_t buf_size, - struct random_data *rand_state)); +/* Need to cast, because on Haiku, the third parameter is + unsigned long buf_size. */ +_GL_CXXALIAS_SYS_CAST (initstate_r, int, + (unsigned int seed, char *buf, size_t buf_size, + struct random_data *rand_state)); # endif _GL_CXXALIASWARN (initstate_r); #elif defined GNULIB_POSIXCHECK @@ -733,8 +813,10 @@ (char *arg_state, struct random_data *rand_state) _GL_ARG_NONNULL ((1, 2))); # endif -_GL_CXXALIAS_SYS (setstate_r, int, - (char *arg_state, struct random_data *rand_state)); +/* Need to cast, because on Haiku, the first parameter is + void *arg_state. */ +_GL_CXXALIAS_SYS_CAST (setstate_r, int, + (char *arg_state, struct random_data *rand_state)); # endif _GL_CXXALIASWARN (setstate_r); #elif defined GNULIB_POSIXCHECK @@ -758,7 +840,9 @@ # else _GL_CXXALIAS_SYS (realloc, void *, (void *ptr, size_t size)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (realloc); +# endif #elif defined GNULIB_POSIXCHECK && !_GL_USE_STDLIB_ALLOC # undef realloc /* Assume realloc is always declared. */ @@ -766,20 +850,41 @@ "use gnulib module realloc-posix for portability"); #endif + +#if @GNULIB_REALLOCARRAY@ +# if ! @HAVE_REALLOCARRAY@ +_GL_FUNCDECL_SYS (reallocarray, void *, + (void *ptr, size_t nmemb, size_t size)); +# endif +_GL_CXXALIAS_SYS (reallocarray, void *, + (void *ptr, size_t nmemb, size_t size)); +_GL_CXXALIASWARN (reallocarray); +#elif defined GNULIB_POSIXCHECK +# undef reallocarray +# if HAVE_RAW_DECL_REALLOCARRAY +_GL_WARN_ON_USE (reallocarray, "reallocarray is not portable - " + "use gnulib module reallocarray for portability"); +# endif +#endif + #if @GNULIB_REALPATH@ # if @REPLACE_REALPATH@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define realpath rpl_realpath # endif -_GL_FUNCDECL_RPL (realpath, char *, (const char *name, char *resolved) - _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (realpath, char *, (const char *name, char *resolved)); +_GL_FUNCDECL_RPL (realpath, char *, + (const char *restrict name, char *restrict resolved) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (realpath, char *, + (const char *restrict name, char *restrict resolved)); # else # if !@HAVE_REALPATH@ -_GL_FUNCDECL_SYS (realpath, char *, (const char *name, char *resolved) - _GL_ARG_NONNULL ((1))); +_GL_FUNCDECL_SYS (realpath, char *, + (const char *restrict name, char *restrict resolved) + _GL_ARG_NONNULL ((1))); # endif -_GL_CXXALIAS_SYS (realpath, char *, (const char *name, char *resolved)); +_GL_CXXALIAS_SYS (realpath, char *, + (const char *restrict name, char *restrict resolved)); # endif _GL_CXXALIASWARN (realpath); #elif defined GNULIB_POSIXCHECK @@ -861,17 +966,24 @@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define strtod rpl_strtod # endif -_GL_FUNCDECL_RPL (strtod, double, (const char *str, char **endp) - _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (strtod, double, (const char *str, char **endp)); +# define GNULIB_defined_strtod_function 1 +_GL_FUNCDECL_RPL (strtod, double, + (const char *restrict str, char **restrict endp) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (strtod, double, + (const char *restrict str, char **restrict endp)); # else # if !@HAVE_STRTOD@ -_GL_FUNCDECL_SYS (strtod, double, (const char *str, char **endp) - _GL_ARG_NONNULL ((1))); +_GL_FUNCDECL_SYS (strtod, double, + (const char *restrict str, char **restrict endp) + _GL_ARG_NONNULL ((1))); # endif -_GL_CXXALIAS_SYS (strtod, double, (const char *str, char **endp)); +_GL_CXXALIAS_SYS (strtod, double, + (const char *restrict str, char **restrict endp)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (strtod); +# endif #elif defined GNULIB_POSIXCHECK # undef strtod # if HAVE_RAW_DECL_STRTOD @@ -880,6 +992,36 @@ # endif #endif +#if @GNULIB_STRTOLD@ + /* Parse a 'long double' from STRING, updating ENDP if appropriate. */ +# if @REPLACE_STRTOLD@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define strtold rpl_strtold +# endif +# define GNULIB_defined_strtold_function 1 +_GL_FUNCDECL_RPL (strtold, long double, + (const char *restrict str, char **restrict endp) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (strtold, long double, + (const char *restrict str, char **restrict endp)); +# else +# if !@HAVE_STRTOLD@ +_GL_FUNCDECL_SYS (strtold, long double, + (const char *restrict str, char **restrict endp) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (strtold, long double, + (const char *restrict str, char **restrict endp)); +# endif +_GL_CXXALIASWARN (strtold); +#elif defined GNULIB_POSIXCHECK +# undef strtold +# if HAVE_RAW_DECL_STRTOLD +_GL_WARN_ON_USE (strtold, "strtold is unportable - " + "use gnulib module strtold for portability"); +# endif +#endif + #if @GNULIB_STRTOLL@ /* Parse a signed integer whose textual representation starts at STRING. The integer is expected to be in base BASE (2 <= BASE <= 36); if BASE == 0, @@ -891,11 +1033,13 @@ to ERANGE. */ # if !@HAVE_STRTOLL@ _GL_FUNCDECL_SYS (strtoll, long long, - (const char *string, char **endptr, int base) + (const char *restrict string, char **restrict endptr, + int base) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (strtoll, long long, - (const char *string, char **endptr, int base)); + (const char *restrict string, char **restrict endptr, + int base)); _GL_CXXALIASWARN (strtoll); #elif defined GNULIB_POSIXCHECK # undef strtoll @@ -916,11 +1060,13 @@ ERANGE. */ # if !@HAVE_STRTOULL@ _GL_FUNCDECL_SYS (strtoull, unsigned long long, - (const char *string, char **endptr, int base) + (const char *restrict string, char **restrict endptr, + int base) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (strtoull, unsigned long long, - (const char *string, char **endptr, int base)); + (const char *restrict string, char **restrict endptr, + int base)); _GL_CXXALIASWARN (strtoull); #elif defined GNULIB_POSIXCHECK # undef strtoull @@ -984,7 +1130,9 @@ # else _GL_CXXALIAS_SYS (wctomb, int, (char *s, wchar_t wc)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (wctomb); +# endif #endif diff -Nru gdb-9.1/gnulib/import/strchrnul.c gdb-10.2/gnulib/import/strchrnul.c --- gdb-9.1/gnulib/import/strchrnul.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/strchrnul.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Searching in a string. - Copyright (C) 2003, 2007-2016 Free Software Foundation, Inc. + Copyright (C) 2003, 2007-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -12,7 +12,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> diff -Nru gdb-9.1/gnulib/import/strchrnul.valgrind gdb-10.2/gnulib/import/strchrnul.valgrind --- gdb-9.1/gnulib/import/strchrnul.valgrind 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/strchrnul.valgrind 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,20 @@ # Suppress a valgrind message about use of uninitialized memory in strchrnul(). + +# Copyright (C) 2008-2020 Free Software Foundation, Inc. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + # This use is OK because it provides only a speedup. { strchrnul-value4 diff -Nru gdb-9.1/gnulib/import/strdup.c gdb-10.2/gnulib/import/strdup.c --- gdb-9.1/gnulib/import/strdup.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/strdup.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1996-1998, 2002-2004, 2006-2007, 2009-2016 Free Software +/* Copyright (C) 1991, 1996-1998, 2002-2004, 2006-2007, 2009-2020 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -14,7 +14,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along - with this program; if not, see <http://www.gnu.org/licenses/>. */ + with this program; if not, see <https://www.gnu.org/licenses/>. */ #ifndef _LIBC # include <config.h> diff -Nru gdb-9.1/gnulib/import/streq.h gdb-10.2/gnulib/import/streq.h --- gdb-9.1/gnulib/import/streq.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/streq.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Optimized string comparison. - Copyright (C) 2001-2002, 2007, 2009-2016 Free Software Foundation, Inc. + Copyright (C) 2001-2002, 2007, 2009-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published @@ -12,7 +12,7 @@ General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>. */ diff -Nru gdb-9.1/gnulib/import/strerror.c gdb-10.2/gnulib/import/strerror.c --- gdb-9.1/gnulib/import/strerror.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/strerror.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* strerror.c --- POSIX compatible system error routine - Copyright (C) 2007-2016 Free Software Foundation, Inc. + Copyright (C) 2007-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -13,7 +13,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> @@ -66,5 +66,6 @@ if (sizeof buf <= len) abort (); - return memcpy (buf, msg, len + 1); + memcpy (buf, msg, len + 1); + return buf; } diff -Nru gdb-9.1/gnulib/import/strerror-override.c gdb-10.2/gnulib/import/strerror-override.c --- gdb-9.1/gnulib/import/strerror-override.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/strerror-override.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* strerror-override.c --- POSIX compatible system error routine - Copyright (C) 2010-2016 Free Software Foundation, Inc. + Copyright (C) 2010-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -13,7 +13,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2010. */ diff -Nru gdb-9.1/gnulib/import/strerror-override.h gdb-10.2/gnulib/import/strerror-override.h --- gdb-9.1/gnulib/import/strerror-override.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/strerror-override.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* strerror-override.h --- POSIX compatible system error routine - Copyright (C) 2010-2016 Free Software Foundation, Inc. + Copyright (C) 2010-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -13,7 +13,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _GL_STRERROR_OVERRIDE_H # define _GL_STRERROR_OVERRIDE_H diff -Nru gdb-9.1/gnulib/import/strerror_r.c gdb-10.2/gnulib/import/strerror_r.c --- gdb-9.1/gnulib/import/strerror_r.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/strerror_r.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* strerror_r.c --- POSIX compatible system error routine - Copyright (C) 2010-2016 Free Software Foundation, Inc. + Copyright (C) 2010-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -13,7 +13,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2010. */ @@ -28,6 +28,9 @@ #include <errno.h> #include <stdio.h> #include <stdlib.h> +#if !HAVE_SNPRINTF +# include <stdarg.h> +#endif #include "strerror-override.h" @@ -40,7 +43,7 @@ #endif int __xpg_strerror_r (int errnum, char *buf, size_t buflen); -#elif HAVE_DECL_STRERROR_R_ORIG && !(__GLIBC__ >= 2 || defined __UCLIBC__ || defined __CYGWIN__) +#elif HAVE_DECL_STRERROR_R && !(__GLIBC__ >= 2 || defined __UCLIBC__ || defined __CYGWIN__) /* The system's strerror_r function is OK, except that its third argument is 'int', not 'size_t', or its return type is wrong. */ @@ -58,7 +61,7 @@ # define USE_SYSTEM_STRERROR 1 -# if defined __NetBSD__ || defined __hpux || ((defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__) || defined __sgi || (defined __sun && !defined _LP64) || defined __CYGWIN__ +# if defined __NetBSD__ || defined __hpux || (defined _WIN32 && !defined __CYGWIN__) || defined __sgi || (defined __sun && !defined _LP64) || defined __CYGWIN__ /* No locking needed. */ @@ -126,22 +129,13 @@ safe_copy (char *buf, size_t buflen, const char *msg) { size_t len = strlen (msg); - int ret; + size_t moved = len < buflen ? len : buflen - 1; - if (len < buflen) - { - /* Although POSIX allows memcpy() to corrupt errno, we don't - know of any implementation where this is a real problem. */ - memcpy (buf, msg, len + 1); - ret = 0; - } - else - { - memcpy (buf, msg, buflen - 1); - buf[buflen - 1] = '\0'; - ret = ERANGE; - } - return ret; + /* Although POSIX lets memmove corrupt errno, we don't + know of any implementation where this is a real problem. */ + memmove (buf, msg, moved); + buf[moved] = '\0'; + return len < buflen ? 0 : ERANGE; } @@ -209,13 +203,16 @@ # else ret = strerror_r (errnum, buf, buflen); - /* Some old implementations may return (-1, EINVAL) instead of EINVAL. */ + /* Some old implementations may return (-1, EINVAL) instead of EINVAL. + But on Haiku, valid error numbers are negative. */ +# if !defined __HAIKU__ if (ret < 0) ret = errno; +# endif # endif -# ifdef _AIX - /* AIX returns 0 rather than ERANGE when truncating strings; try +# if defined _AIX || defined __HAIKU__ + /* AIX and Haiku return 0 rather than ERANGE when truncating strings; try again until we are sure we got the entire string. */ if (!ret && strlen (buf) == buflen - 1) { @@ -252,7 +249,7 @@ /* Try to do what strerror (errnum) does, but without clobbering the buffer used by strerror(). */ -# if defined __NetBSD__ || defined __hpux || ((defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__) || defined __CYGWIN__ /* NetBSD, HP-UX, native Windows, Cygwin */ +# if defined __NetBSD__ || defined __hpux || (defined _WIN32 && !defined __CYGWIN__) || defined __CYGWIN__ /* NetBSD, HP-UX, native Windows, Cygwin */ /* NetBSD: sys_nerr, sys_errlist are declared through _NETBSD_SOURCE and <errno.h> above. @@ -329,8 +326,124 @@ #endif +#if defined _WIN32 && !defined __CYGWIN__ + /* MSVC 14 defines names for many error codes in the range 100..140, + but _sys_errlist contains strings only for the error codes + < _sys_nerr = 43. */ + if (ret == EINVAL) + { + const char *errmsg; + + switch (errnum) + { + case 100 /* EADDRINUSE */: + errmsg = "Address already in use"; + break; + case 101 /* EADDRNOTAVAIL */: + errmsg = "Cannot assign requested address"; + break; + case 102 /* EAFNOSUPPORT */: + errmsg = "Address family not supported by protocol"; + break; + case 103 /* EALREADY */: + errmsg = "Operation already in progress"; + break; + case 105 /* ECANCELED */: + errmsg = "Operation canceled"; + break; + case 106 /* ECONNABORTED */: + errmsg = "Software caused connection abort"; + break; + case 107 /* ECONNREFUSED */: + errmsg = "Connection refused"; + break; + case 108 /* ECONNRESET */: + errmsg = "Connection reset by peer"; + break; + case 109 /* EDESTADDRREQ */: + errmsg = "Destination address required"; + break; + case 110 /* EHOSTUNREACH */: + errmsg = "No route to host"; + break; + case 112 /* EINPROGRESS */: + errmsg = "Operation now in progress"; + break; + case 113 /* EISCONN */: + errmsg = "Transport endpoint is already connected"; + break; + case 114 /* ELOOP */: + errmsg = "Too many levels of symbolic links"; + break; + case 115 /* EMSGSIZE */: + errmsg = "Message too long"; + break; + case 116 /* ENETDOWN */: + errmsg = "Network is down"; + break; + case 117 /* ENETRESET */: + errmsg = "Network dropped connection on reset"; + break; + case 118 /* ENETUNREACH */: + errmsg = "Network is unreachable"; + break; + case 119 /* ENOBUFS */: + errmsg = "No buffer space available"; + break; + case 123 /* ENOPROTOOPT */: + errmsg = "Protocol not available"; + break; + case 126 /* ENOTCONN */: + errmsg = "Transport endpoint is not connected"; + break; + case 128 /* ENOTSOCK */: + errmsg = "Socket operation on non-socket"; + break; + case 129 /* ENOTSUP */: + errmsg = "Not supported"; + break; + case 130 /* EOPNOTSUPP */: + errmsg = "Operation not supported"; + break; + case 132 /* EOVERFLOW */: + errmsg = "Value too large for defined data type"; + break; + case 133 /* EOWNERDEAD */: + errmsg = "Owner died"; + break; + case 134 /* EPROTO */: + errmsg = "Protocol error"; + break; + case 135 /* EPROTONOSUPPORT */: + errmsg = "Protocol not supported"; + break; + case 136 /* EPROTOTYPE */: + errmsg = "Protocol wrong type for socket"; + break; + case 138 /* ETIMEDOUT */: + errmsg = "Connection timed out"; + break; + case 140 /* EWOULDBLOCK */: + errmsg = "Operation would block"; + break; + default: + errmsg = NULL; + break; + } + if (errmsg != NULL) + ret = safe_copy (buf, buflen, errmsg); + } +#endif + if (ret == EINVAL && !*buf) - snprintf (buf, buflen, "Unknown error %d", errnum); + { +#if defined __HAIKU__ + /* For consistency with perror(). */ + snprintf (buf, buflen, "Unknown Application Error (%d)", errnum); +#else + snprintf (buf, buflen, "Unknown error %d", errnum); +#endif + } errno = saved_errno; return ret; diff -Nru gdb-9.1/gnulib/import/string.in.h gdb-10.2/gnulib/import/string.in.h --- gdb-9.1/gnulib/import/string.in.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/string.in.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* A GNU-like <string.h>. - Copyright (C) 1995-1996, 2001-2016 Free Software Foundation, Inc. + Copyright (C) 1995-1996, 2001-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -13,7 +13,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, see <http://www.gnu.org/licenses/>. */ + along with this program; if not, see <https://www.gnu.org/licenses/>. */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ @@ -54,10 +54,12 @@ /* The __attribute__ feature is available in gcc versions 2.5 and later. The attribute __pure__ was added in gcc 2.96. */ -#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) -# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) -#else -# define _GL_ATTRIBUTE_PURE /* empty */ +#ifndef _GL_ATTRIBUTE_PURE +# if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) +# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) +# else +# define _GL_ATTRIBUTE_PURE /* empty */ +# endif #endif /* NetBSD 5.0 declares strsignal in <unistd.h>, not in <string.h>. */ @@ -74,6 +76,23 @@ /* The definition of _GL_WARN_ON_USE is copied here. */ +/* Clear a block of memory. The compiler will not delete a call to + this function, even if the block is dead after the call. */ +#if @GNULIB_EXPLICIT_BZERO@ +# if ! @HAVE_EXPLICIT_BZERO@ +_GL_FUNCDECL_SYS (explicit_bzero, void, + (void *__dest, size_t __n) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (explicit_bzero, void, (void *__dest, size_t __n)); +_GL_CXXALIASWARN (explicit_bzero); +#elif defined GNULIB_POSIXCHECK +# undef explicit_bzero +# if HAVE_RAW_DECL_EXPLICIT_BZERO +_GL_WARN_ON_USE (explicit_bzero, "explicit_bzero is unportable - " + "use gnulib module explicit_bzero for portability"); +# endif +#endif + /* Find the index of the least-significant set bit. */ #if @GNULIB_FFSL@ # if !@HAVE_FFSL@ @@ -132,7 +151,7 @@ _GL_CXXALIASWARN1 (memchr, void *, (void *__s, int __c, size_t __n)); _GL_CXXALIASWARN1 (memchr, void const *, (void const *__s, int __c, size_t __n)); -# else +# elif __GLIBC__ >= 2 _GL_CXXALIASWARN (memchr); # endif #elif defined GNULIB_POSIXCHECK @@ -315,9 +334,10 @@ GB18030 and the character to be searched is a digit. */ # undef strchr /* Assume strchr is always declared. */ -_GL_WARN_ON_USE (strchr, "strchr cannot work correctly on character strings " - "in some multibyte locales - " - "use mbschr if you care about internationalization"); +_GL_WARN_ON_USE_CXX (strchr, const char *, (const char *, int), + "strchr cannot work correctly on character strings " + "in some multibyte locales - " + "use mbschr if you care about internationalization"); #endif /* Find the first occurrence of C in S or the final NUL byte. */ @@ -394,13 +414,18 @@ # undef strncat # define strncat rpl_strncat # endif -_GL_FUNCDECL_RPL (strncat, char *, (char *dest, const char *src, size_t n) - _GL_ARG_NONNULL ((1, 2))); -_GL_CXXALIAS_RPL (strncat, char *, (char *dest, const char *src, size_t n)); +_GL_FUNCDECL_RPL (strncat, char *, + (char *restrict dest, const char *restrict src, size_t n) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (strncat, char *, + (char *restrict dest, const char *restrict src, size_t n)); # else -_GL_CXXALIAS_SYS (strncat, char *, (char *dest, const char *src, size_t n)); +_GL_CXXALIAS_SYS (strncat, char *, + (char *restrict dest, const char *restrict src, size_t n)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (strncat); +# endif #elif defined GNULIB_POSIXCHECK # undef strncat # if HAVE_RAW_DECL_STRNCAT @@ -495,7 +520,7 @@ _GL_CXXALIASWARN1 (strpbrk, char *, (char *__s, char const *__accept)); _GL_CXXALIASWARN1 (strpbrk, char const *, (char const *__s, char const *__accept)); -# else +# elif __GLIBC__ >= 2 _GL_CXXALIASWARN (strpbrk); # endif # if defined GNULIB_POSIXCHECK @@ -504,15 +529,17 @@ locale encoding is GB18030 and one of the characters to be searched is a digit. */ # undef strpbrk -_GL_WARN_ON_USE (strpbrk, "strpbrk cannot work correctly on character strings " - "in multibyte locales - " - "use mbspbrk if you care about internationalization"); +_GL_WARN_ON_USE_CXX (strpbrk, const char *, (const char *, const char *), + "strpbrk cannot work correctly on character strings " + "in multibyte locales - " + "use mbspbrk if you care about internationalization"); # endif #elif defined GNULIB_POSIXCHECK # undef strpbrk # if HAVE_RAW_DECL_STRPBRK -_GL_WARN_ON_USE (strpbrk, "strpbrk is unportable - " - "use gnulib module strpbrk for portability"); +_GL_WARN_ON_USE_CXX (strpbrk, const char *, (const char *, const char *), + "strpbrk is unportable - " + "use gnulib module strpbrk for portability"); # endif #endif @@ -531,9 +558,10 @@ GB18030 and the character to be searched is a digit. */ # undef strrchr /* Assume strrchr is always declared. */ -_GL_WARN_ON_USE (strrchr, "strrchr cannot work correctly on character strings " - "in some multibyte locales - " - "use mbsrchr if you care about internationalization"); +_GL_WARN_ON_USE_CXX (strrchr, const char *, (const char *, int), + "strrchr cannot work correctly on character strings " + "in some multibyte locales - " + "use mbsrchr if you care about internationalization"); #endif /* Search the next delimiter (char listed in DELIM) starting at *STRINGP. @@ -597,7 +625,7 @@ _GL_CXXALIASWARN1 (strstr, char *, (char *haystack, const char *needle)); _GL_CXXALIASWARN1 (strstr, const char *, (const char *haystack, const char *needle)); -# else +# elif __GLIBC__ >= 2 _GL_CXXALIASWARN (strstr); # endif #elif defined GNULIB_POSIXCHECK @@ -676,7 +704,7 @@ This is a variant of strtok() that is multithread-safe. For the POSIX documentation for this function, see: - http://www.opengroup.org/susv3xsh/strtok.html + https://pubs.opengroup.org/onlinepubs/9699919799/functions/strtok.html Caveat: It modifies the original string. Caveat: These functions cannot be used on constant strings. @@ -947,7 +975,8 @@ Caveat: The identity of the delimiting character is lost. See also mbssep(). */ -_GL_EXTERN_C char * mbstok_r (char *string, const char *delim, char **save_ptr) +_GL_EXTERN_C char * mbstok_r (char *restrict string, const char *delim, + char **save_ptr) _GL_ARG_NONNULL ((2, 3)); #endif @@ -963,7 +992,9 @@ # else _GL_CXXALIAS_SYS (strerror, char *, (int)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (strerror); +# endif #elif defined GNULIB_POSIXCHECK # undef strerror /* Assume strerror is always declared. */ diff -Nru gdb-9.1/gnulib/import/stripslash.c gdb-10.2/gnulib/import/stripslash.c --- gdb-9.1/gnulib/import/stripslash.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/stripslash.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* stripslash.c -- remove redundant trailing slashes from a file name - Copyright (C) 1990, 2001, 2003-2006, 2009-2016 Free Software Foundation, + Copyright (C) 1990, 2001, 2003-2006, 2009-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify @@ -14,7 +14,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> diff -Nru gdb-9.1/gnulib/import/strnlen1.c gdb-10.2/gnulib/import/strnlen1.c --- gdb-9.1/gnulib/import/strnlen1.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/strnlen1.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Find the length of STRING + 1, but scan at most MAXLEN bytes. - Copyright (C) 2005-2006, 2009-2016 Free Software Foundation, Inc. + Copyright (C) 2005-2006, 2009-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -12,7 +12,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> diff -Nru gdb-9.1/gnulib/import/strnlen1.h gdb-10.2/gnulib/import/strnlen1.h --- gdb-9.1/gnulib/import/strnlen1.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/strnlen1.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Find the length of STRING + 1, but scan at most MAXLEN bytes. - Copyright (C) 2005, 2009-2016 Free Software Foundation, Inc. + Copyright (C) 2005, 2009-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -12,7 +12,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _STRNLEN1_H #define _STRNLEN1_H diff -Nru gdb-9.1/gnulib/import/strnlen.c gdb-10.2/gnulib/import/strnlen.c --- gdb-9.1/gnulib/import/strnlen.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/strnlen.c 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,30 @@ +/* Find the length of STRING, but scan at most MAXLEN characters. + Copyright (C) 2005-2007, 2009-2020 Free Software Foundation, Inc. + Written by Simon Josefsson. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +#include <string.h> + +/* Find the length of STRING, but scan at most MAXLEN characters. + If no '\0' terminator is found in that many characters, return MAXLEN. */ + +size_t +strnlen (const char *string, size_t maxlen) +{ + const char *end = memchr (string, '\0', maxlen); + return end ? (size_t) (end - string) : maxlen; +} diff -Nru gdb-9.1/gnulib/import/strstr.c gdb-10.2/gnulib/import/strstr.c --- gdb-9.1/gnulib/import/strstr.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/strstr.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 1991-1994, 1996-1998, 2000, 2004, 2007-2016 Free Software +/* Copyright (C) 1991-1994, 1996-1998, 2000, 2004, 2007-2020 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -13,7 +13,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along - with this program; if not, see <http://www.gnu.org/licenses/>. */ + with this program; if not, see <https://www.gnu.org/licenses/>. */ /* This particular implementation was written by Eric Blake, 2008. */ @@ -26,10 +26,6 @@ #include <stdbool.h> -#ifndef _LIBC -# define __builtin_expect(expr, val) (expr) -#endif - #define RETURN_TYPE char * #define AVAILABLE(h, h_l, j, n_l) \ (!memchr ((h) + (h_l), '\0', (j) + (n_l) - (h_l)) \ diff -Nru gdb-9.1/gnulib/import/strtok_r.c gdb-10.2/gnulib/import/strtok_r.c --- gdb-9.1/gnulib/import/strtok_r.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/strtok_r.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Reentrant string tokenizer. Generic version. - Copyright (C) 1991, 1996-1999, 2001, 2004, 2007, 2009-2016 Free Software + Copyright (C) 1991, 1996-1999, 2001, 2004, 2007, 2009-2020 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -14,7 +14,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> diff -Nru gdb-9.1/gnulib/import/str-two-way.h gdb-10.2/gnulib/import/str-two-way.h --- gdb-9.1/gnulib/import/str-two-way.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/str-two-way.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Byte-wise substring search, using the Two-Way algorithm. - Copyright (C) 2008-2016 Free Software Foundation, Inc. + Copyright (C) 2008-2020 Free Software Foundation, Inc. This file is part of the GNU C Library. Written by Eric Blake <ebb9@byu.net>, 2008. @@ -14,11 +14,11 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along - with this program; if not, see <http://www.gnu.org/licenses/>. */ + with this program; if not, see <https://www.gnu.org/licenses/>. */ /* Before including this file, you need to include <config.h> and <string.h>, and define: - RESULT_TYPE A macro that expands to the return type. + RETURN_TYPE A macro that expands to the return type. AVAILABLE(h, h_l, j, n_l) A macro that returns nonzero if there are at least N_L bytes left starting at H[J]. @@ -49,9 +49,9 @@ character shift table similar to the Boyer-Moore algorithm to achieve improved (potentially sub-linear) performance. - See http://www-igm.univ-mlv.fr/~lecroq/string/node26.html#SECTION00260, - http://en.wikipedia.org/wiki/Boyer-Moore_string_search_algorithm, - http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.34.6641&rep=rep1&type=pdf + See https://www-igm.univ-mlv.fr/~lecroq/string/node26.html#SECTION00260, + https://en.wikipedia.org/wiki/Boyer-Moore_string_search_algorithm, + https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.34.6641&rep=rep1&type=pdf */ /* Point at which computing a bad-byte shift table is likely to be diff -Nru gdb-9.1/gnulib/import/sys_random.in.h gdb-10.2/gnulib/import/sys_random.in.h --- gdb-9.1/gnulib/import/sys_random.in.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/sys_random.in.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,92 @@ +/* Substitute for <sys/random.h>. + Copyright (C) 2020 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +# if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +# endif +@PRAGMA_COLUMNS@ + +#ifndef _@GUARD_PREFIX@_SYS_RANDOM_H + +#if @HAVE_SYS_RANDOM_H@ + +/* On Mac OS X 10.5, <sys/random.h> assumes prior inclusion of <sys/types.h>. + On Max OS X 10.13, <sys/random.h> assumes prior inclusion of a file that + includes <Availability.h>, such as <stdlib.h> or <unistd.h>. */ +# if defined __APPLE__ && defined __MACH__ /* Mac OS X */ +# include <sys/types.h> +# include <stdlib.h> +# endif + +/* The include_next requires a split double-inclusion guard. */ +# @INCLUDE_NEXT@ @NEXT_SYS_RANDOM_H@ + +#endif + +#ifndef _@GUARD_PREFIX@_SYS_RANDOM_H +#define _@GUARD_PREFIX@_SYS_RANDOM_H + +#include <sys/types.h> + +/* Define the GRND_* constants. */ +#ifndef GRND_NONBLOCK +# define GRND_NONBLOCK 1 +# define GRND_RANDOM 2 +#endif + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ + +/* The definition of _GL_ARG_NONNULL is copied here. */ + +/* The definition of _GL_WARN_ON_USE is copied here. */ + + +/* Declare overridden functions. */ + + +#if @GNULIB_GETRANDOM@ +/* Fill a buffer with random bytes. */ +# if @REPLACE_GETRANDOM@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef getrandom +# define getrandom rpl_getrandom +# endif +_GL_FUNCDECL_RPL (getrandom, ssize_t, + (void *buffer, size_t length, unsigned int flags) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (getrandom, ssize_t, + (void *buffer, size_t length, unsigned int flags)); +# else +# if !@HAVE_GETRANDOM@ +_GL_FUNCDECL_SYS (getrandom, ssize_t, + (void *buffer, size_t length, unsigned int flags) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (getrandom, ssize_t, + (void *buffer, size_t length, unsigned int flags)); +# endif +_GL_CXXALIASWARN (getrandom); +#elif defined GNULIB_POSIXCHECK +# undef getrandom +# if HAVE_RAW_DECL_GETRANDOM +_GL_WARN_ON_USE (getrandom, "getrandom is unportable - " + "use gnulib module getrandom for portability"); +# endif +#endif + + +#endif /* _@GUARD_PREFIX@_SYS_RANDOM_H */ +#endif /* _@GUARD_PREFIX@_SYS_RANDOM_H */ diff -Nru gdb-9.1/gnulib/import/sys_socket.in.h gdb-10.2/gnulib/import/sys_socket.in.h --- gdb-9.1/gnulib/import/sys_socket.in.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/sys_socket.in.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Provide a sys/socket header file for systems lacking it (read: MinGW) and for systems where it is incomplete. - Copyright (C) 2005-2016 Free Software Foundation, Inc. + Copyright (C) 2005-2020 Free Software Foundation, Inc. Written by Simon Josefsson. This program is free software; you can redistribute it and/or modify @@ -14,7 +14,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, see <http://www.gnu.org/licenses/>. */ + along with this program; if not, see <https://www.gnu.org/licenses/>. */ /* This file is supposed to be used on platforms that lack <sys/socket.h>, on platforms where <sys/socket.h> cannot be included standalone, and on @@ -79,7 +79,12 @@ #if !@HAVE_SA_FAMILY_T@ # if !GNULIB_defined_sa_family_t +/* On OS/2 kLIBC, sa_family_t is unsigned char unless TCPV40HDRS is defined. */ +# if !defined __KLIBC__ || defined TCPV40HDRS typedef unsigned short sa_family_t; +# else +typedef unsigned char sa_family_t; +# endif # define GNULIB_defined_sa_family_t 1 # endif #endif @@ -136,6 +141,15 @@ # define SHUT_RDWR 2 # endif +# ifdef __VMS /* OpenVMS */ +# ifndef CMSG_SPACE +# define CMSG_SPACE(length) _CMSG_SPACE(length) +# endif +# ifndef CMSG_LEN +# define CMSG_LEN(length) _CMSG_LEN(length) +# endif +# endif + #else # ifdef __CYGWIN__ @@ -155,7 +169,7 @@ code may not run on older Windows releases then. My Windows 2000 box was not able to run the code, for example. The situation is slightly confusing because - <http://msdn.microsoft.com/en-us/library/ms738520> + <https://docs.microsoft.com/en-us/windows/desktop/api/ws2tcpip/nf-ws2tcpip-getaddrinfo> suggests that getaddrinfo should be available on all Windows releases. */ @@ -181,12 +195,7 @@ /* Include headers needed by the emulation code. */ # include <sys/types.h> # include <io.h> - -# if !GNULIB_defined_socklen_t -typedef int socklen_t; -# define GNULIB_defined_socklen_t 1 -# endif - +/* If these headers don't define socklen_t, <config.h> does. */ # endif /* Rudimentary 'struct msghdr'; this works as long as you don't try to @@ -201,6 +210,15 @@ #endif +/* Ensure SO_REUSEPORT is defined. */ +/* For the subtle differences between SO_REUSEPORT and SO_REUSEADDR, see + https://stackoverflow.com/questions/14388706/socket-options-so-reuseaddr-and-so-reuseport-how-do-they-differ-do-they-mean-t + and https://lwn.net/Articles/542629/ + */ +#ifndef SO_REUSEPORT +# define SO_REUSEPORT SO_REUSEADDR +#endif + /* Fix some definitions from <winsock2.h>. */ #if @HAVE_WINSOCK2_H@ @@ -323,14 +341,20 @@ # define accept rpl_accept # endif _GL_FUNCDECL_RPL (accept, int, - (int fd, struct sockaddr *addr, socklen_t *addrlen)); + (int fd, + struct sockaddr *restrict addr, + socklen_t *restrict addrlen)); _GL_CXXALIAS_RPL (accept, int, - (int fd, struct sockaddr *addr, socklen_t *addrlen)); + (int fd, + struct sockaddr *restrict addr, + socklen_t *restrict addrlen)); # else /* Need to cast, because on Solaris 10 systems, the third parameter is - void *addrlen. */ + void *addrlen. */ _GL_CXXALIAS_SYS_CAST (accept, int, - (int fd, struct sockaddr *addr, socklen_t *addrlen)); + (int fd, + struct sockaddr *restrict addr, + socklen_t *restrict addrlen)); # endif _GL_CXXALIASWARN (accept); #elif @HAVE_WINSOCK2_H@ @@ -381,15 +405,18 @@ # define getpeername rpl_getpeername # endif _GL_FUNCDECL_RPL (getpeername, int, - (int fd, struct sockaddr *addr, socklen_t *addrlen) + (int fd, struct sockaddr *restrict addr, + socklen_t *restrict addrlen) _GL_ARG_NONNULL ((2, 3))); _GL_CXXALIAS_RPL (getpeername, int, - (int fd, struct sockaddr *addr, socklen_t *addrlen)); + (int fd, struct sockaddr *restrict addr, + socklen_t *restrict addrlen)); # else /* Need to cast, because on Solaris 10 systems, the third parameter is - void *addrlen. */ + void *addrlen. */ _GL_CXXALIAS_SYS_CAST (getpeername, int, - (int fd, struct sockaddr *addr, socklen_t *addrlen)); + (int fd, struct sockaddr *restrict addr, + socklen_t *restrict addrlen)); # endif _GL_CXXALIASWARN (getpeername); #elif @HAVE_WINSOCK2_H@ @@ -410,15 +437,18 @@ # define getsockname rpl_getsockname # endif _GL_FUNCDECL_RPL (getsockname, int, - (int fd, struct sockaddr *addr, socklen_t *addrlen) + (int fd, struct sockaddr *restrict addr, + socklen_t *restrict addrlen) _GL_ARG_NONNULL ((2, 3))); _GL_CXXALIAS_RPL (getsockname, int, - (int fd, struct sockaddr *addr, socklen_t *addrlen)); + (int fd, struct sockaddr *restrict addr, + socklen_t *restrict addrlen)); # else /* Need to cast, because on Solaris 10 systems, the third parameter is - void *addrlen. */ + void *addrlen. */ _GL_CXXALIAS_SYS_CAST (getsockname, int, - (int fd, struct sockaddr *addr, socklen_t *addrlen)); + (int fd, struct sockaddr *restrict addr, + socklen_t *restrict addrlen)); # endif _GL_CXXALIASWARN (getsockname); #elif @HAVE_WINSOCK2_H@ @@ -438,16 +468,19 @@ # undef getsockopt # define getsockopt rpl_getsockopt # endif -_GL_FUNCDECL_RPL (getsockopt, int, (int fd, int level, int optname, - void *optval, socklen_t *optlen) - _GL_ARG_NONNULL ((4, 5))); -_GL_CXXALIAS_RPL (getsockopt, int, (int fd, int level, int optname, - void *optval, socklen_t *optlen)); +_GL_FUNCDECL_RPL (getsockopt, int, + (int fd, int level, int optname, + void *restrict optval, socklen_t *restrict optlen) + _GL_ARG_NONNULL ((4, 5))); +_GL_CXXALIAS_RPL (getsockopt, int, + (int fd, int level, int optname, + void *restrict optval, socklen_t *restrict optlen)); # else /* Need to cast, because on Solaris 10 systems, the fifth parameter is void *optlen. */ -_GL_CXXALIAS_SYS_CAST (getsockopt, int, (int fd, int level, int optname, - void *optval, socklen_t *optlen)); +_GL_CXXALIAS_SYS_CAST (getsockopt, int, + (int fd, int level, int optname, + void *restrict optval, socklen_t *restrict optlen)); # endif _GL_CXXALIASWARN (getsockopt); #elif @HAVE_WINSOCK2_H@ @@ -494,7 +527,10 @@ _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (recv, ssize_t, (int fd, void *buf, size_t len, int flags)); # else -_GL_CXXALIAS_SYS (recv, ssize_t, (int fd, void *buf, size_t len, int flags)); +/* Need to cast, because on HP-UX 11.31 the return type may be + int, + depending on compiler options. */ +_GL_CXXALIAS_SYS_CAST (recv, ssize_t, (int fd, void *buf, size_t len, int flags)); # endif _GL_CXXALIASWARN (recv); #elif @HAVE_WINSOCK2_H@ @@ -520,8 +556,11 @@ _GL_CXXALIAS_RPL (send, ssize_t, (int fd, const void *buf, size_t len, int flags)); # else -_GL_CXXALIAS_SYS (send, ssize_t, - (int fd, const void *buf, size_t len, int flags)); +/* Need to cast, because on HP-UX 11.31 the return type may be + int, + depending on compiler options. */ +_GL_CXXALIAS_SYS_CAST (send, ssize_t, + (int fd, const void *buf, size_t len, int flags)); # endif _GL_CXXALIASWARN (send); #elif @HAVE_WINSOCK2_H@ @@ -542,18 +581,21 @@ # define recvfrom rpl_recvfrom # endif _GL_FUNCDECL_RPL (recvfrom, ssize_t, - (int fd, void *buf, size_t len, int flags, - struct sockaddr *from, socklen_t *fromlen) + (int fd, void *restrict buf, size_t len, int flags, + struct sockaddr *restrict from, + socklen_t *restrict fromlen) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (recvfrom, ssize_t, - (int fd, void *buf, size_t len, int flags, - struct sockaddr *from, socklen_t *fromlen)); + (int fd, void *restrict buf, size_t len, int flags, + struct sockaddr *restrict from, + socklen_t *restrict fromlen)); # else /* Need to cast, because on Solaris 10 systems, the sixth parameter is void *fromlen. */ _GL_CXXALIAS_SYS_CAST (recvfrom, ssize_t, - (int fd, void *buf, size_t len, int flags, - struct sockaddr *from, socklen_t *fromlen)); + (int fd, void *restrict buf, size_t len, int flags, + struct sockaddr *restrict from, + socklen_t *restrict fromlen)); # endif _GL_CXXALIASWARN (recvfrom); #elif @HAVE_WINSOCK2_H@ @@ -657,7 +699,7 @@ The flags are a bitmask, possibly including O_CLOEXEC (defined in <fcntl.h>) and O_TEXT, O_BINARY (defined in "binary-io.h"). See also the Linux man page at - <http://www.kernel.org/doc/man-pages/online/pages/man2/accept4.2.html>. */ + <https://www.kernel.org/doc/man-pages/online/pages/man2/accept4.2.html>. */ # if @HAVE_ACCEPT4@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define accept4 rpl_accept4 diff -Nru gdb-9.1/gnulib/import/sys_stat.in.h gdb-10.2/gnulib/import/sys_stat.in.h --- gdb-9.1/gnulib/import/sys_stat.in.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/sys_stat.in.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ -/* Provide a more complete sys/stat header file. - Copyright (C) 2005-2016 Free Software Foundation, Inc. +/* Provide a more complete sys/stat.h header file. + Copyright (C) 2005-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -12,7 +12,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, see <http://www.gnu.org/licenses/>. */ + along with this program; if not, see <https://www.gnu.org/licenses/>. */ /* Written by Eric Blake, Paul Eggert, and Jim Meyering. */ @@ -54,16 +54,23 @@ /* The definition of _GL_WARN_ON_USE is copied here. */ +/* Before doing "#define mknod rpl_mknod" below, we need to include all + headers that may declare mknod(). OS/2 kLIBC declares mknod() in + <unistd.h>, not in <sys/stat.h>. */ +#ifdef __KLIBC__ +# include <unistd.h> +#endif + /* Before doing "#define mkdir rpl_mkdir" below, we need to include all headers that may declare mkdir(). Native Windows platforms declare mkdir - in <io.h> and/or <direct.h>, not in <unistd.h>. */ -#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ + in <io.h> and/or <direct.h>, not in <sys/stat.h>. */ +#if defined _WIN32 && ! defined __CYGWIN__ # include <io.h> /* mingw32, mingw64 */ # include <direct.h> /* mingw64, MSVC 9 */ #endif /* Native Windows platforms declare umask() in <io.h>. */ -#if 0 && ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) +#if 0 && (defined _WIN32 && ! defined __CYGWIN__) # include <io.h> #endif @@ -72,6 +79,75 @@ # define stat _stati64 #endif +/* Optionally, override 'struct stat' on native Windows. */ +#if @GNULIB_OVERRIDES_STRUCT_STAT@ + +# undef stat +# if @GNULIB_STAT@ +# define stat rpl_stat +# else + /* Provoke a clear link error if stat() is used as a function and + module 'stat' is not in use. */ +# define stat stat_used_without_requesting_gnulib_module_stat +# endif + +# if !GNULIB_defined_struct_stat +struct stat +{ + dev_t st_dev; + ino_t st_ino; + mode_t st_mode; + nlink_t st_nlink; +# if 0 + uid_t st_uid; +# else /* uid_t is not defined by default on native Windows. */ + short st_uid; +# endif +# if 0 + gid_t st_gid; +# else /* gid_t is not defined by default on native Windows. */ + short st_gid; +# endif + dev_t st_rdev; + off_t st_size; +# if 0 + blksize_t st_blksize; + blkcnt_t st_blocks; +# endif + +# if @WINDOWS_STAT_TIMESPEC@ + struct timespec st_atim; + struct timespec st_mtim; + struct timespec st_ctim; +# else + time_t st_atime; + time_t st_mtime; + time_t st_ctime; +# endif +}; +# if @WINDOWS_STAT_TIMESPEC@ +# define st_atime st_atim.tv_sec +# define st_mtime st_mtim.tv_sec +# define st_ctime st_ctim.tv_sec + /* Indicator, for gnulib internal purposes. */ +# define _GL_WINDOWS_STAT_TIMESPEC 1 +# endif +# define GNULIB_defined_struct_stat 1 +# endif + +/* Other possible values of st_mode. */ +# if 0 +# define _S_IFBLK 0x6000 +# endif +# if 0 +# define _S_IFLNK 0xA000 +# endif +# if 0 +# define _S_IFSOCK 0xC000 +# endif + +#endif + #ifndef S_IFIFO # ifdef _S_IFIFO # define S_IFIFO _S_IFIFO @@ -316,13 +392,25 @@ #if @GNULIB_FCHMODAT@ -# if !@HAVE_FCHMODAT@ +# if @REPLACE_FCHMODAT@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fchmodat +# define fchmodat rpl_fchmodat +# endif +_GL_FUNCDECL_RPL (fchmodat, int, + (int fd, char const *file, mode_t mode, int flag) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (fchmodat, int, + (int fd, char const *file, mode_t mode, int flag)); +# else +# if !@HAVE_FCHMODAT@ _GL_FUNCDECL_SYS (fchmodat, int, (int fd, char const *file, mode_t mode, int flag) _GL_ARG_NONNULL ((2))); -# endif +# endif _GL_CXXALIAS_SYS (fchmodat, int, (int fd, char const *file, mode_t mode, int flag)); +# endif _GL_CXXALIASWARN (fchmodat); #elif defined GNULIB_POSIXCHECK # undef fchmodat @@ -345,6 +433,9 @@ _GL_CXXALIAS_SYS (fstat, int, (int fd, struct stat *buf)); # endif _GL_CXXALIASWARN (fstat); +#elif @GNULIB_OVERRIDES_STRUCT_STAT@ +# undef fstat +# define fstat fstat_used_without_requesting_gnulib_module_fstat #elif @WINDOWS_64_BIT_ST_SIZE@ /* Above, we define stat to _stati64. */ # define fstat _fstati64 @@ -364,20 +455,27 @@ # define fstatat rpl_fstatat # endif _GL_FUNCDECL_RPL (fstatat, int, - (int fd, char const *name, struct stat *st, int flags) + (int fd, char const *restrict name, struct stat *restrict st, + int flags) _GL_ARG_NONNULL ((2, 3))); _GL_CXXALIAS_RPL (fstatat, int, - (int fd, char const *name, struct stat *st, int flags)); + (int fd, char const *restrict name, struct stat *restrict st, + int flags)); # else # if !@HAVE_FSTATAT@ _GL_FUNCDECL_SYS (fstatat, int, - (int fd, char const *name, struct stat *st, int flags) + (int fd, char const *restrict name, struct stat *restrict st, + int flags) _GL_ARG_NONNULL ((2, 3))); # endif _GL_CXXALIAS_SYS (fstatat, int, - (int fd, char const *name, struct stat *st, int flags)); + (int fd, char const *restrict name, struct stat *restrict st, + int flags)); # endif _GL_CXXALIASWARN (fstatat); +#elif @GNULIB_OVERRIDES_STRUCT_STAT@ +# undef fstatat +# define fstatat fstatat_used_without_requesting_gnulib_module_fstatat #elif defined GNULIB_POSIXCHECK # undef fstatat # if HAVE_RAW_DECL_FSTATAT @@ -420,31 +518,12 @@ #if @GNULIB_LCHMOD@ /* Change the mode of FILENAME to MODE, without dereferencing it if FILENAME denotes a symbolic link. */ -# if !@HAVE_LCHMOD@ -/* The lchmod replacement follows symbolic links. Callers should take - this into account; lchmod should be applied only to arguments that - are known to not be symbolic links. On hosts that lack lchmod, - this can lead to race conditions between the check and the - invocation of lchmod, but we know of no workarounds that are - reliable in general. You might try requesting support for lchmod - from your operating system supplier. */ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define lchmod chmod -# endif -/* Need to cast, because on mingw, the second parameter of chmod is - int mode. */ -_GL_CXXALIAS_RPL_CAST_1 (lchmod, chmod, int, - (const char *filename, mode_t mode)); -# else -# if 0 /* assume already declared */ +# if !@HAVE_LCHMOD@ || defined __hpux _GL_FUNCDECL_SYS (lchmod, int, (const char *filename, mode_t mode) _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_SYS (lchmod, int, (const char *filename, mode_t mode)); # endif -# if @HAVE_LCHMOD@ +_GL_CXXALIAS_SYS (lchmod, int, (const char *filename, mode_t mode)); _GL_CXXALIASWARN (lchmod); -# endif #elif defined GNULIB_POSIXCHECK # undef lchmod # if HAVE_RAW_DECL_LCHMOD @@ -461,21 +540,28 @@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define lstat stat # endif -_GL_CXXALIAS_RPL_1 (lstat, stat, int, (const char *name, struct stat *buf)); +_GL_CXXALIAS_RPL_1 (lstat, stat, int, + (const char *restrict name, struct stat *restrict buf)); # elif @REPLACE_LSTAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef lstat # define lstat rpl_lstat # endif -_GL_FUNCDECL_RPL (lstat, int, (const char *name, struct stat *buf) - _GL_ARG_NONNULL ((1, 2))); -_GL_CXXALIAS_RPL (lstat, int, (const char *name, struct stat *buf)); +_GL_FUNCDECL_RPL (lstat, int, + (const char *restrict name, struct stat *restrict buf) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (lstat, int, + (const char *restrict name, struct stat *restrict buf)); # else -_GL_CXXALIAS_SYS (lstat, int, (const char *name, struct stat *buf)); +_GL_CXXALIAS_SYS (lstat, int, + (const char *restrict name, struct stat *restrict buf)); # endif # if @HAVE_LSTAT@ _GL_CXXALIASWARN (lstat); # endif +#elif @GNULIB_OVERRIDES_STRUCT_STAT@ +# undef lstat +# define lstat lstat_used_without_requesting_gnulib_module_lstat #elif defined GNULIB_POSIXCHECK # undef lstat # if HAVE_RAW_DECL_LSTAT @@ -498,7 +584,7 @@ Additionally, it declares _mkdir (and depending on compile flags, an alias mkdir), only in the nonstandard includes <direct.h> and <io.h>, which are included above. */ -# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ +# if defined _WIN32 && ! defined __CYGWIN__ # if !GNULIB_defined_rpl_mkdir static int @@ -625,63 +711,69 @@ #if @GNULIB_STAT@ # if @REPLACE_STAT@ -/* We can't use the object-like #define stat rpl_stat, because of - struct stat. This means that rpl_stat will not be used if the user - does (stat)(a,b). Oh well. */ -# if defined _AIX && defined stat && defined _LARGE_FILES - /* With _LARGE_FILES defined, AIX (only) defines stat to stat64, - so we have to replace stat64() instead of stat(). */ -# undef stat64 -# define stat64(name, st) rpl_stat (name, st) -# elif @WINDOWS_64_BIT_ST_SIZE@ - /* Above, we define stat to _stati64. */ -# if defined __MINGW32__ && defined _stati64 -# ifndef _USE_32BIT_TIME_T - /* The system headers define _stati64 to _stat64. */ -# undef _stat64 -# define _stat64(name, st) rpl_stat (name, st) +# if !@GNULIB_OVERRIDES_STRUCT_STAT@ + /* We can't use the object-like #define stat rpl_stat, because of + struct stat. This means that rpl_stat will not be used if the user + does (stat)(a,b). Oh well. */ +# if defined _AIX && defined stat && defined _LARGE_FILES + /* With _LARGE_FILES defined, AIX (only) defines stat to stat64, + so we have to replace stat64() instead of stat(). */ +# undef stat64 +# define stat64(name, st) rpl_stat (name, st) +# elif @WINDOWS_64_BIT_ST_SIZE@ + /* Above, we define stat to _stati64. */ +# if defined __MINGW32__ && defined _stati64 +# ifndef _USE_32BIT_TIME_T + /* The system headers define _stati64 to _stat64. */ +# undef _stat64 +# define _stat64(name, st) rpl_stat (name, st) +# endif +# elif defined _MSC_VER && defined _stati64 +# ifdef _USE_32BIT_TIME_T + /* The system headers define _stati64 to _stat32i64. */ +# undef _stat32i64 +# define _stat32i64(name, st) rpl_stat (name, st) +# else + /* The system headers define _stati64 to _stat64. */ +# undef _stat64 +# define _stat64(name, st) rpl_stat (name, st) +# endif +# else +# undef _stati64 +# define _stati64(name, st) rpl_stat (name, st) # endif -# elif defined _MSC_VER && defined _stati64 +# elif defined __MINGW32__ && defined stat # ifdef _USE_32BIT_TIME_T - /* The system headers define _stati64 to _stat32i64. */ + /* The system headers define stat to _stat32i64. */ # undef _stat32i64 # define _stat32i64(name, st) rpl_stat (name, st) # else - /* The system headers define _stati64 to _stat64. */ + /* The system headers define stat to _stat64. */ # undef _stat64 # define _stat64(name, st) rpl_stat (name, st) # endif -# else -# undef _stati64 -# define _stati64(name, st) rpl_stat (name, st) -# endif -# elif defined __MINGW32__ && defined stat -# ifdef _USE_32BIT_TIME_T - /* The system headers define stat to _stat32i64. */ -# undef _stat32i64 -# define _stat32i64(name, st) rpl_stat (name, st) -# else - /* The system headers define stat to _stat64. */ -# undef _stat64 -# define _stat64(name, st) rpl_stat (name, st) -# endif -# elif defined _MSC_VER && defined stat -# ifdef _USE_32BIT_TIME_T - /* The system headers define stat to _stat32. */ -# undef _stat32 -# define _stat32(name, st) rpl_stat (name, st) -# else - /* The system headers define stat to _stat64i32. */ -# undef _stat64i32 -# define _stat64i32(name, st) rpl_stat (name, st) -# endif -# else /* !(_AIX ||__MINGW32__ || _MSC_VER) */ -# undef stat -# define stat(name, st) rpl_stat (name, st) -# endif /* !_LARGE_FILES */ -_GL_EXTERN_C int stat (const char *name, struct stat *buf) +# elif defined _MSC_VER && defined stat +# ifdef _USE_32BIT_TIME_T + /* The system headers define stat to _stat32. */ +# undef _stat32 +# define _stat32(name, st) rpl_stat (name, st) +# else + /* The system headers define stat to _stat64i32. */ +# undef _stat64i32 +# define _stat64i32(name, st) rpl_stat (name, st) +# endif +# else /* !(_AIX || __MINGW32__ || _MSC_VER) */ +# undef stat +# define stat(name, st) rpl_stat (name, st) +# endif /* !_LARGE_FILES */ +# endif /* !@GNULIB_OVERRIDES_STRUCT_STAT@ */ +_GL_EXTERN_C int stat (const char *restrict name, struct stat *restrict buf) _GL_ARG_NONNULL ((1, 2)); # endif +#elif @GNULIB_OVERRIDES_STRUCT_STAT@ +/* see above: + #define stat stat_used_without_requesting_gnulib_module_stat + */ #elif defined GNULIB_POSIXCHECK # undef stat # if HAVE_RAW_DECL_STAT diff -Nru gdb-9.1/gnulib/import/sys_time.in.h gdb-10.2/gnulib/import/sys_time.in.h --- gdb-9.1/gnulib/import/sys_time.in.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/sys_time.in.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Provide a more complete sys/time.h. - Copyright (C) 2007-2016 Free Software Foundation, Inc. + Copyright (C) 2007-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -13,7 +13,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, see <http://www.gnu.org/licenses/>. */ + along with this program; if not, see <https://www.gnu.org/licenses/>. */ /* Written by Paul Eggert. */ @@ -112,8 +112,12 @@ # if defined __cplusplus && defined GNULIB_NAMESPACE namespace GNULIB_NAMESPACE { typedef ::timeval -#undef timeval +# undef timeval timeval; +# if @REPLACE_STRUCT_TIMEVAL@ +# define timeval rpl_timeval + typedef ::timeval timeval; +# endif } # endif #elif defined GNULIB_POSIXCHECK diff -Nru gdb-9.1/gnulib/import/sys_types.in.h gdb-10.2/gnulib/import/sys_types.in.h --- gdb-9.1/gnulib/import/sys_types.in.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/sys_types.in.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Provide a more complete sys/types.h. - Copyright (C) 2011-2016 Free Software Foundation, Inc. + Copyright (C) 2011-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -13,13 +13,24 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, see <http://www.gnu.org/licenses/>. */ + along with this program; if not, see <https://www.gnu.org/licenses/>. */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ +#if defined _WIN32 && !defined __CYGWIN__ \ + && (defined __need_off_t || defined __need___off64_t \ + || defined __need_ssize_t || defined __need_time_t) + +/* Special invocation convention inside mingw header files. */ + +#@INCLUDE_NEXT@ @NEXT_SYS_TYPES_H@ + +#else +/* Normal invocation convention. */ + #ifndef _@GUARD_PREFIX@_SYS_TYPES_H /* The include_next requires a split double-inclusion guard. */ @@ -42,12 +53,54 @@ # define _GL_WINDOWS_64_BIT_OFF_T 1 #endif +/* Override dev_t and ino_t if distinguishable inodes support is requested + on native Windows. */ +#if @WINDOWS_STAT_INODES@ + +# if @WINDOWS_STAT_INODES@ == 2 +/* Experimental, not useful in Windows 10. */ + +/* Define dev_t to a 64-bit type. */ +# if !defined GNULIB_defined_dev_t +typedef unsigned long long int rpl_dev_t; +# undef dev_t +# define dev_t rpl_dev_t +# define GNULIB_defined_dev_t 1 +# endif + +/* Define ino_t to a 128-bit type. */ +# if !defined GNULIB_defined_ino_t +/* MSVC does not have a 128-bit integer type. + GCC has a 128-bit integer type __int128, but only on 64-bit targets. */ +typedef struct { unsigned long long int _gl_ino[2]; } rpl_ino_t; +# undef ino_t +# define ino_t rpl_ino_t +# define GNULIB_defined_ino_t 1 +# endif + +# else /* @WINDOWS_STAT_INODES@ == 1 */ + +/* Define ino_t to a 64-bit type. */ +# if !defined GNULIB_defined_ino_t +typedef unsigned long long int rpl_ino_t; +# undef ino_t +# define ino_t rpl_ino_t +# define GNULIB_defined_ino_t 1 +# endif + +# endif + +/* Indicator, for gnulib internal purposes. */ +# define _GL_WINDOWS_STAT_INODES @WINDOWS_STAT_INODES@ + +#endif + /* MSVC 9 defines size_t in <stddef.h>, not in <sys/types.h>. */ /* But avoid namespace pollution on glibc systems. */ -#if ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) \ - && ! defined __GLIBC__ +#if (defined _WIN32 && ! defined __CYGWIN__) && ! defined __GLIBC__ # include <stddef.h> #endif #endif /* _@GUARD_PREFIX@_SYS_TYPES_H */ #endif /* _@GUARD_PREFIX@_SYS_TYPES_H */ +#endif /* __need_XXX */ diff -Nru gdb-9.1/gnulib/import/sys_uio.in.h gdb-10.2/gnulib/import/sys_uio.in.h --- gdb-9.1/gnulib/import/sys_uio.in.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/sys_uio.in.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Substitute for <sys/uio.h>. - Copyright (C) 2011-2016 Free Software Foundation, Inc. + Copyright (C) 2011-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -12,7 +12,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, see <http://www.gnu.org/licenses/>. */ + along with this program; if not, see <https://www.gnu.org/licenses/>. */ # if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ diff -Nru gdb-9.1/gnulib/import/tempname.c gdb-10.2/gnulib/import/tempname.c --- gdb-9.1/gnulib/import/tempname.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/tempname.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,24 +1,22 @@ -/* tempname.c - generate the name of a temporary file. +/* Copyright (C) 1991-2020 Free Software Foundation, Inc. + This file is part of the GNU C Library. - Copyright (C) 1991-2003, 2005-2007, 2009-2016 Free Software Foundation, Inc. + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 3 of the License, or (at your option) any later version. - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, + The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. -/* Extracted from glibc sysdeps/posix/tempname.c. See also tmpdir.c. */ + You should have received a copy of the GNU General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ #if !_LIBC -# include <config.h> +# include <libc-config.h> # include "tempname.h" #endif @@ -26,9 +24,6 @@ #include <assert.h> #include <errno.h> -#ifndef __set_errno -# define __set_errno(Val) errno = (Val) -#endif #include <stdio.h> #ifndef P_tmpdir @@ -52,52 +47,39 @@ #include <string.h> #include <fcntl.h> -#include <sys/time.h> #include <stdint.h> -#include <unistd.h> - +#include <sys/random.h> #include <sys/stat.h> #if _LIBC # define struct_stat64 struct stat64 +# define __secure_getenv __libc_secure_getenv #else # define struct_stat64 struct stat -# define __try_tempname try_tempname # define __gen_tempname gen_tempname -# define __getpid getpid -# define __gettimeofday gettimeofday # define __mkdir mkdir # define __open open # define __lxstat64(version, file, buf) lstat (file, buf) -# define __secure_getenv secure_getenv #endif #ifdef _LIBC -# include <hp-timing.h> -# if HP_TIMING_AVAIL -# define RANDOM_BITS(Var) \ - if (__builtin_expect (value == UINT64_C (0), 0)) \ - { \ - /* If this is the first time this function is used initialize \ - the variable we accumulate the value in to some somewhat \ - random value. If we'd not do this programs at startup time \ - might have a reduced set of possible names, at least on slow \ - machines. */ \ - struct timeval tv; \ - __gettimeofday (&tv, NULL); \ - value = ((uint64_t) tv.tv_usec << 16) ^ tv.tv_sec; \ - } \ - HP_TIMING_NOW (Var) -# endif -#endif - -/* Use the widest available unsigned type if uint64_t is not - available. The algorithm below extracts a number less than 62**6 - (approximately 2**35.725) from uint64_t, so ancient hosts where - uintmax_t is only 32 bits lose about 3.725 bits of randomness, - which is better than not having mkstemp at all. */ -#if !defined UINT64_MAX && !defined uint64_t -# define uint64_t uintmax_t +# include <random-bits.h> +# define RANDOM_BITS(Var) ((Var) = random_bits ()) +typedef uint32_t random_value; +# define RANDOM_VALUE_MAX UINT32_MAX +# define BASE_62_DIGITS 5 /* 62**5 < UINT32_MAX */ +# define BASE_62_POWER (62 * 62 * 62 * 62 * 62) /* 2**BASE_62_DIGITS */ +#else +/* Use getrandom if it works, falling back on a 64-bit linear + congruential generator that starts with whatever Var's value + happens to be. */ +# define RANDOM_BITS(Var) \ + ((void) (getrandom (&(Var), sizeof (Var), 0) == sizeof (Var) \ + || ((Var) = 2862933555777941757 * (Var) + 3037000493))) +typedef uint_fast64_t random_value; +# define RANDOM_VALUE_MAX UINT_FAST64_MAX +# define BASE_62_DIGITS 10 /* 62**10 < UINT_FAST64_MAX */ +# define BASE_62_POWER (62LL * 62 * 62 * 62 * 62 * 62 * 62 * 62 * 62 * 62) #endif #if _LIBC @@ -173,18 +155,80 @@ } #endif /* _LIBC */ +#if _LIBC +static int try_tempname_len (char *, int, void *, int (*) (char *, void *), + size_t); +#endif + +static int +try_file (char *tmpl, void *flags) +{ + int *openflags = flags; + return __open (tmpl, + (*openflags & ~O_ACCMODE) + | O_RDWR | O_CREAT | O_EXCL, S_IRUSR | S_IWUSR); +} + +static int +try_dir (char *tmpl, void *flags _GL_UNUSED) +{ + return __mkdir (tmpl, S_IRUSR | S_IWUSR | S_IXUSR); +} + +static int +try_nocreate (char *tmpl, void *flags _GL_UNUSED) +{ + struct_stat64 st; + + if (__lxstat64 (_STAT_VER, tmpl, &st) == 0 || errno == EOVERFLOW) + __set_errno (EEXIST); + return errno == ENOENT ? 0 : -1; +} + /* These are the characters used in temporary file names. */ static const char letters[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; +/* Generate a temporary file name based on TMPL. TMPL must match the + rules for mk[s]temp (i.e., end in at least X_SUFFIX_LEN "X"s, + possibly with a suffix). + The name constructed does not exist at the time of the call to + this function. TMPL is overwritten with the result. + + KIND may be one of: + __GT_NOCREATE: simply verify that the name does not exist + at the time of the call. + __GT_FILE: create the file using open(O_CREAT|O_EXCL) + and return a read-write fd. The file is mode 0600. + __GT_DIR: create a directory, which will be mode 0700. + + We use a clever algorithm to get hard-to-predict names. */ +#ifdef _LIBC +static +#endif int -__try_tempname (char *tmpl, int suffixlen, void *args, - int (*tryfunc) (char *, void *)) +gen_tempname_len (char *tmpl, int suffixlen, int flags, int kind, + size_t x_suffix_len) { - int len; + static int (*const tryfunc[]) (char *, void *) = + { + [__GT_FILE] = try_file, + [__GT_DIR] = try_dir, + [__GT_NOCREATE] = try_nocreate + }; + return try_tempname_len (tmpl, suffixlen, &flags, tryfunc[kind], + x_suffix_len); +} + +#ifdef _LIBC +static +#endif +int +try_tempname_len (char *tmpl, int suffixlen, void *args, + int (*tryfunc) (char *, void *), size_t x_suffix_len) +{ + size_t len; char *XXXXXX; - static uint64_t value; - uint64_t random_time_bits; unsigned int count; int fd = -1; int save_errno = errno; @@ -194,7 +238,8 @@ can exist for a given template is 62**6. It should never be necessary to try all of these combinations. Instead if a reasonable number of names is tried (we define reasonable as 62**3) fail to - give the system administrator the chance to remove the problems. */ + give the system administrator the chance to remove the problems. + This value requires that X_SUFFIX_LEN be at least 3. */ #define ATTEMPTS_MIN (62 * 62 * 62) /* The number of times to attempt to generate a temporary file. To @@ -205,44 +250,45 @@ unsigned int attempts = ATTEMPTS_MIN; #endif + /* A random variable. */ + random_value v; + + /* How many random base-62 digits can currently be extracted from V. */ + int vdigits = 0; + + /* Least unfair value for V. If V is less than this, V can generate + BASE_62_DIGITS digits fairly. Otherwise it might be biased. */ + random_value const unfair_min + = RANDOM_VALUE_MAX - RANDOM_VALUE_MAX % BASE_62_POWER; + len = strlen (tmpl); - if (len < 6 + suffixlen || memcmp (&tmpl[len - 6 - suffixlen], "XXXXXX", 6)) + if (len < x_suffix_len + suffixlen + || strspn (&tmpl[len - x_suffix_len - suffixlen], "X") < x_suffix_len) { __set_errno (EINVAL); return -1; } /* This is where the Xs start. */ - XXXXXX = &tmpl[len - 6 - suffixlen]; - - /* Get some more or less random data. */ -#ifdef RANDOM_BITS - RANDOM_BITS (random_time_bits); -#else - { - struct timeval tv; - __gettimeofday (&tv, NULL); - random_time_bits = ((uint64_t) tv.tv_usec << 16) ^ tv.tv_sec; - } -#endif - value += random_time_bits ^ __getpid (); + XXXXXX = &tmpl[len - x_suffix_len - suffixlen]; - for (count = 0; count < attempts; value += 7777, ++count) + for (count = 0; count < attempts; ++count) { - uint64_t v = value; - - /* Fill in the random bits. */ - XXXXXX[0] = letters[v % 62]; - v /= 62; - XXXXXX[1] = letters[v % 62]; - v /= 62; - XXXXXX[2] = letters[v % 62]; - v /= 62; - XXXXXX[3] = letters[v % 62]; - v /= 62; - XXXXXX[4] = letters[v % 62]; - v /= 62; - XXXXXX[5] = letters[v % 62]; + for (size_t i = 0; i < x_suffix_len; i++) + { + if (vdigits == 0) + { + do + RANDOM_BITS (v); + while (unfair_min <= v); + + vdigits = BASE_62_DIGITS; + } + + XXXXXX[i] = letters[v % 62]; + v /= 62; + vdigits--; + } fd = tryfunc (tmpl, args); if (fd >= 0) @@ -259,66 +305,17 @@ return -1; } -static int -try_file (char *tmpl, void *flags) -{ - int *openflags = flags; - return __open (tmpl, - (*openflags & ~O_ACCMODE) - | O_RDWR | O_CREAT | O_EXCL, S_IRUSR | S_IWUSR); -} - -static int -try_dir (char *tmpl, void *flags _GL_UNUSED) -{ - return __mkdir (tmpl, S_IRUSR | S_IWUSR | S_IXUSR); -} - -static int -try_nocreate (char *tmpl, void *flags _GL_UNUSED) +int +__gen_tempname (char *tmpl, int suffixlen, int flags, int kind) { - struct_stat64 st; - - if (__lxstat64 (_STAT_VER, tmpl, &st) == 0) - __set_errno (EEXIST); - return errno == ENOENT ? 0 : -1; + return gen_tempname_len (tmpl, suffixlen, flags, kind, 6); } -/* Generate a temporary file name based on TMPL. TMPL must match the - rules for mk[s]temp (i.e. end in "XXXXXX", possibly with a suffix). - The name constructed does not exist at the time of the call to - __gen_tempname. TMPL is overwritten with the result. - - KIND may be one of: - __GT_NOCREATE: simply verify that the name does not exist - at the time of the call. - __GT_FILE: create the file using open(O_CREAT|O_EXCL) - and return a read-write fd. The file is mode 0600. - __GT_DIR: create a directory, which will be mode 0700. - - We use a clever algorithm to get hard-to-predict names. */ +#if !_LIBC int -__gen_tempname (char *tmpl, int suffixlen, int flags, int kind) +try_tempname (char *tmpl, int suffixlen, void *args, + int (*tryfunc) (char *, void *)) { - int (*tryfunc) (char *, void *); - - switch (kind) - { - case __GT_FILE: - tryfunc = try_file; - break; - - case __GT_DIR: - tryfunc = try_dir; - break; - - case __GT_NOCREATE: - tryfunc = try_nocreate; - break; - - default: - assert (! "invalid KIND in __gen_tempname"); - abort (); - } - return __try_tempname (tmpl, suffixlen, &flags, tryfunc); + return try_tempname_len (tmpl, suffixlen, args, tryfunc, 6); } +#endif diff -Nru gdb-9.1/gnulib/import/tempname.h gdb-10.2/gnulib/import/tempname.h --- gdb-9.1/gnulib/import/tempname.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/tempname.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Create a temporary file or directory. - Copyright (C) 2006, 2009-2016 Free Software Foundation, Inc. + Copyright (C) 2006, 2009-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -13,7 +13,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* header written by Eric Blake */ @@ -50,6 +50,9 @@ We use a clever algorithm to get hard-to-predict names. */ extern int gen_tempname (char *tmpl, int suffixlen, int flags, int kind); +/* Similar, except X_SUFFIX_LEN gives the number of Xs. */ +extern int gen_tempname_len (char *tmpl, int suffixlen, int flags, int kind, + size_t x_suffix_len); /* Similar to gen_tempname, but TRYFUNC is called for each temporary name to try. If TRYFUNC returns a non-negative number, TRY_GEN_TEMPNAME @@ -57,6 +60,10 @@ name is tried, or else TRY_GEN_TEMPNAME returns -1. */ extern int try_tempname (char *tmpl, int suffixlen, void *args, int (*tryfunc) (char *, void *)); +/* Similar, except X_SUFFIX_LEN gives the number of Xs. */ +extern int try_tempname_len (char *tmpl, int suffixlen, void *args, + int (*tryfunc) (char *, void *), + size_t x_suffix_len); #ifdef __cplusplus } diff -Nru gdb-9.1/gnulib/import/time.in.h gdb-10.2/gnulib/import/time.in.h --- gdb-9.1/gnulib/import/time.in.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/time.in.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* A more-standard <time.h>. - Copyright (C) 2007-2016 Free Software Foundation, Inc. + Copyright (C) 2007-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -13,7 +13,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, see <http://www.gnu.org/licenses/>. */ + along with this program; if not, see <https://www.gnu.org/licenses/>. */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ @@ -37,6 +37,12 @@ # define _@GUARD_PREFIX@_TIME_H +/* mingw's <time.h> provides the functions asctime_r, ctime_r, gmtime_r, + localtime_r only if <unistd.h> or <pthread.h> has been included before. */ +# if defined __MINGW32__ +# include <unistd.h> +# endif + # @INCLUDE_NEXT@ @NEXT_TIME_H@ /* NetBSD 5.0 mis-defines NULL. */ @@ -48,7 +54,7 @@ /* The definition of _GL_WARN_ON_USE is copied here. */ -/* Some systems don't define struct timespec (e.g., AIX 4.1, Ultrix 4.3). +/* Some systems don't define struct timespec (e.g., AIX 4.1). Or they define it with the wrong member names or define it in <sys/time.h> (e.g., FreeBSD circa 1997). Stock Mingw prior to 3.0 does not define it, but the pthreads-win32 library defines it in <pthread.h>. */ @@ -84,8 +90,8 @@ # endif # if !GNULIB_defined_struct_time_t_must_be_integral -/* Per http://austingroupbugs.net/view.php?id=327, POSIX requires - time_t to be an integer type, even though C99 permits floating +/* https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_types.h.html + requires time_t to be an integer type, even though C99 permits floating point. We don't know of any implementation that uses floating point, and it is much easier to write code that doesn't have to worry about that corner case, so we force the issue. */ @@ -97,7 +103,7 @@ /* Sleep for at least RQTP seconds unless interrupted, If interrupted, return -1 and store the remaining time into RMTP. See - <http://www.opengroup.org/susv3xsh/nanosleep.html>. */ + <https://pubs.opengroup.org/onlinepubs/9699919799/functions/nanosleep.html>. */ # if @GNULIB_NANOSLEEP@ # if @REPLACE_NANOSLEEP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) @@ -120,6 +126,24 @@ _GL_CXXALIASWARN (nanosleep); # endif +/* Initialize time conversion information. */ +# if @GNULIB_TZSET@ +# if @REPLACE_TZSET@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef tzset +# define tzset rpl_tzset +# endif +_GL_FUNCDECL_RPL (tzset, void, (void)); +_GL_CXXALIAS_RPL (tzset, void, (void)); +# else +# if ! @HAVE_TZSET@ +_GL_FUNCDECL_SYS (tzset, void, (void)); +# endif +_GL_CXXALIAS_SYS (tzset, void, (void)); +# endif +_GL_CXXALIASWARN (tzset); +# endif + /* Return the 'time_t' representation of TP and normalize TP. */ # if @GNULIB_MKTIME@ # if @REPLACE_MKTIME@ @@ -131,12 +155,14 @@ # else _GL_CXXALIAS_SYS (mktime, time_t, (struct tm *__tp)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (mktime); +# endif # endif /* Convert TIMER to RESULT, assuming local time and UTC respectively. See - <http://www.opengroup.org/susv3xsh/localtime_r.html> and - <http://www.opengroup.org/susv3xsh/gmtime_r.html>. */ + <https://pubs.opengroup.org/onlinepubs/9699919799/functions/localtime_r.html> and + <https://pubs.opengroup.org/onlinepubs/9699919799/functions/gmtime_r.html>. */ # if @GNULIB_TIME_R@ # if @REPLACE_LOCALTIME_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) @@ -185,24 +211,26 @@ # endif /* Convert TIMER to RESULT, assuming local time and UTC respectively. See - <http://www.opengroup.org/susv3xsh/localtime.html> and - <http://www.opengroup.org/susv3xsh/gmtime.html>. */ -# if @GNULIB_GETTIMEOFDAY@ + <https://pubs.opengroup.org/onlinepubs/9699919799/functions/localtime.html> and + <https://pubs.opengroup.org/onlinepubs/9699919799/functions/gmtime.html>. */ +# if @GNULIB_LOCALTIME@ || @REPLACE_LOCALTIME@ # if @REPLACE_LOCALTIME@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef localtime # define localtime rpl_localtime # endif _GL_FUNCDECL_RPL (localtime, struct tm *, (time_t const *__timer) - _GL_ARG_NONNULL ((1))); + _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (localtime, struct tm *, (time_t const *__timer)); # else _GL_CXXALIAS_SYS (localtime, struct tm *, (time_t const *__timer)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (localtime); +# endif # endif -# if @GNULIB_GETTIMEOFDAY@ +# if 0 || @REPLACE_GMTIME@ # if @REPLACE_GMTIME@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef gmtime @@ -217,9 +245,9 @@ _GL_CXXALIASWARN (gmtime); # endif -/* Parse BUF as a time stamp, assuming FORMAT specifies its layout, and store +/* Parse BUF as a timestamp, assuming FORMAT specifies its layout, and store the resulting broken-down time into TM. See - <http://www.opengroup.org/susv3xsh/strptime.html>. */ + <https://pubs.opengroup.org/onlinepubs/9699919799/functions/strptime.html>. */ # if @GNULIB_STRPTIME@ # if ! @HAVE_STRPTIME@ _GL_FUNCDECL_SYS (strptime, char *, (char const *restrict __buf, @@ -233,6 +261,48 @@ _GL_CXXALIASWARN (strptime); # endif +/* Convert *TP to a date and time string. See + <https://pubs.opengroup.org/onlinepubs/9699919799/functions/ctime.html>. */ +# if @GNULIB_CTIME@ +# if @REPLACE_CTIME@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define ctime rpl_ctime +# endif +_GL_FUNCDECL_RPL (ctime, char *, (time_t const *__tp) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (ctime, char *, (time_t const *__tp)); +# else +_GL_CXXALIAS_SYS (ctime, char *, (time_t const *__tp)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (ctime); +# endif +# endif + +/* Convert *TP to a date and time string. See + <https://pubs.opengroup.org/onlinepubs/9699919799/functions/strftime.html>. */ +# if @GNULIB_STRFTIME@ +# if @REPLACE_STRFTIME@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define strftime rpl_strftime +# endif +_GL_FUNCDECL_RPL (strftime, size_t, + (char *restrict __buf, size_t __bufsize, + const char *restrict __fmt, const struct tm *restrict __tp) + _GL_ARG_NONNULL ((1, 3, 4))); +_GL_CXXALIAS_RPL (strftime, size_t, + (char *restrict __buf, size_t __bufsize, + const char *restrict __fmt, const struct tm *restrict __tp)); +# else +_GL_CXXALIAS_SYS (strftime, size_t, + (char *restrict __buf, size_t __bufsize, + const char *restrict __fmt, const struct tm *restrict __tp)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (strftime); +# endif +# endif + # if defined _GNU_SOURCE && @GNULIB_TIME_RZ@ && ! @HAVE_TIMEZONE_T@ typedef struct tm_zone *timezone_t; _GL_FUNCDECL_SYS (tzalloc, timezone_t, (char const *__name)); diff -Nru gdb-9.1/gnulib/import/time_r.c gdb-10.2/gnulib/import/time_r.c --- gdb-9.1/gnulib/import/time_r.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/time_r.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Reentrant time functions like localtime_r. - Copyright (C) 2003, 2006-2007, 2010-2016 Free Software Foundation, Inc. + Copyright (C) 2003, 2006-2007, 2010-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -13,7 +13,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along - with this program; if not, see <http://www.gnu.org/licenses/>. */ + with this program; if not, see <https://www.gnu.org/licenses/>. */ /* Written by Paul Eggert. */ diff -Nru gdb-9.1/gnulib/import/unistd--.h gdb-10.2/gnulib/import/unistd--.h --- gdb-9.1/gnulib/import/unistd--.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/unistd--.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Like unistd.h, but redefine some names to avoid glitches. - Copyright (C) 2005, 2009-2016 Free Software Foundation, Inc. + Copyright (C) 2005, 2009-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -13,7 +13,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paul Eggert. */ diff -Nru gdb-9.1/gnulib/import/unistd.in.h gdb-10.2/gnulib/import/unistd.in.h --- gdb-9.1/gnulib/import/unistd.in.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/unistd.in.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Substitute for and wrapper around <unistd.h>. - Copyright (C) 2003-2016 Free Software Foundation, Inc. + Copyright (C) 2003-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -12,7 +12,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, see <http://www.gnu.org/licenses/>. */ + along with this program; if not, see <https://www.gnu.org/licenses/>. */ #ifndef _@GUARD_PREFIX@_UNISTD_H @@ -21,7 +21,7 @@ #endif @PRAGMA_COLUMNS@ -#ifdef _GL_INCLUDING_UNISTD_H +#if @HAVE_UNISTD_H@ && defined _GL_INCLUDING_UNISTD_H /* Special invocation convention: - On Mac OS X 10.3.9 we have a sequence of nested includes <unistd.h> -> <signal.h> -> <pthread.h> -> <unistd.h> @@ -52,21 +52,30 @@ #define _@GUARD_PREFIX@_UNISTD_H /* NetBSD 5.0 mis-defines NULL. Also get size_t. */ -#include <stddef.h> +/* But avoid namespace pollution on glibc systems. */ +#ifndef __GLIBC__ +# include <stddef.h> +#endif /* mingw doesn't define the SEEK_* or *_FILENO macros in <unistd.h>. */ +/* MSVC declares 'unlink' in <stdio.h>, not in <unistd.h>. We must include + it before we #define unlink rpl_unlink. */ /* Cygwin 1.7.1 declares symlinkat in <stdio.h>, not in <unistd.h>. */ /* But avoid namespace pollution on glibc systems. */ #if (!(defined SEEK_CUR && defined SEEK_END && defined SEEK_SET) \ + || ((@GNULIB_UNLINK@ || defined GNULIB_POSIXCHECK) \ + && (defined _WIN32 && ! defined __CYGWIN__)) \ || ((@GNULIB_SYMLINKAT@ || defined GNULIB_POSIXCHECK) \ && defined __CYGWIN__)) \ && ! defined __GLIBC__ # include <stdio.h> #endif -/* Cygwin 1.7.1 declares unlinkat in <fcntl.h>, not in <unistd.h>. */ +/* Cygwin 1.7.1 and Android 4.3 declare unlinkat in <fcntl.h>, not in + <unistd.h>. */ /* But avoid namespace pollution on glibc systems. */ -#if (@GNULIB_UNLINKAT@ || defined GNULIB_POSIXCHECK) && defined __CYGWIN__ \ +#if (@GNULIB_UNLINKAT@ || defined GNULIB_POSIXCHECK) \ + && (defined __CYGWIN__ || defined __ANDROID__) \ && ! defined __GLIBC__ # include <fcntl.h> #endif @@ -90,13 +99,13 @@ lseek(), read(), unlink(), write() in <io.h>. */ #if ((@GNULIB_CHDIR@ || @GNULIB_GETCWD@ || @GNULIB_RMDIR@ \ || defined GNULIB_POSIXCHECK) \ - && ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__)) + && (defined _WIN32 && ! defined __CYGWIN__)) # include <io.h> /* mingw32, mingw64 */ # include <direct.h> /* mingw64, MSVC 9 */ #elif (@GNULIB_CLOSE@ || @GNULIB_DUP@ || @GNULIB_DUP2@ || @GNULIB_ISATTY@ \ || @GNULIB_LSEEK@ || @GNULIB_READ@ || @GNULIB_UNLINK@ || @GNULIB_WRITE@ \ || defined GNULIB_POSIXCHECK) \ - && ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) + && (defined _WIN32 && ! defined __CYGWIN__) # include <io.h> #endif @@ -109,25 +118,43 @@ # include <netdb.h> #endif +/* Mac OS X 10.13, Solaris 11.4, and Android 9.0 declare getentropy in + <sys/random.h>, not in <unistd.h>. */ +/* But avoid namespace pollution on glibc systems. */ +#if (@GNULIB_GETENTROPY@ || defined GNULIB_POSIXCHECK) \ + && ((defined __APPLE__ && defined __MACH__) || defined __sun \ + || defined __ANDROID__) \ + && @UNISTD_H_HAVE_SYS_RANDOM_H@ \ + && !defined __GLIBC__ +# include <sys/random.h> +#endif + +/* Android 4.3 declares fchownat in <sys/stat.h>, not in <unistd.h>. */ +/* But avoid namespace pollution on glibc systems. */ +#if (@GNULIB_FCHOWNAT@ || defined GNULIB_POSIXCHECK) && defined __ANDROID__ \ + && !defined __GLIBC__ +# include <sys/stat.h> +#endif + /* MSVC defines off_t in <sys/types.h>. May also define off_t to a 64-bit type on native Windows. */ -#if !@HAVE_UNISTD_H@ || @WINDOWS_64_BIT_OFF_T@ -/* Get off_t. */ +/* But avoid namespace pollution on glibc systems. */ +#ifndef __GLIBC__ +/* Get off_t, ssize_t. */ # include <sys/types.h> #endif -#if (@GNULIB_READ@ || @GNULIB_WRITE@ \ - || @GNULIB_READLINK@ || @GNULIB_READLINKAT@ \ - || @GNULIB_PREAD@ || @GNULIB_PWRITE@ || defined GNULIB_POSIXCHECK) -/* Get ssize_t. */ -# include <sys/types.h> -#endif +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ + +/* The definition of _GL_ARG_NONNULL is copied here. */ + +/* The definition of _GL_WARN_ON_USE is copied here. */ -/* Get getopt(), optarg, optind, opterr, optopt. - But avoid namespace pollution on glibc systems. */ -#if @GNULIB_UNISTD_H_GETOPT@ && !defined __GLIBC__ && !defined _GL_SYSTEM_GETOPT -# define __need_getopt -# include <getopt.h> + +/* Get getopt(), optarg, optind, opterr, optopt. */ +#if @GNULIB_GETOPT_POSIX@ && @GNULIB_UNISTD_H_GETOPT@ && !defined _GL_SYSTEM_GETOPT +# include <getopt-cdefs.h> +# include <getopt-pfx-core.h> #endif #ifndef _GL_INLINE_HEADER_BEGIN @@ -138,13 +165,6 @@ # define _GL_UNISTD_INLINE _GL_INLINE #endif -/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ - -/* The definition of _GL_ARG_NONNULL is copied here. */ - -/* The definition of _GL_WARN_ON_USE is copied here. */ - - /* Hide some function declarations from <winsock2.h>. */ #if @GNULIB_GETHOSTNAME@ && @UNISTD_H_HAVE_WINSOCK2_H@ @@ -244,10 +264,28 @@ /* Declare overridden functions. */ -#if defined GNULIB_POSIXCHECK +#if @GNULIB_ACCESS@ +# if @REPLACE_ACCESS@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef access +# define access rpl_access +# endif +_GL_FUNCDECL_RPL (access, int, (const char *file, int mode) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (access, int, (const char *file, int mode)); +# else +_GL_CXXALIAS_SYS (access, int, (const char *file, int mode)); +# endif +_GL_CXXALIASWARN (access); +#elif defined GNULIB_POSIXCHECK +# undef access +# if HAVE_RAW_DECL_ACCESS /* The access() function is a security risk. */ -_GL_WARN_ON_USE (access, "the access function is a security risk - " +_GL_WARN_ON_USE (access, "access does not always support X_OK - " + "use gnulib module access for portability; " + "also, this function is a security risk - " "use the gnulib module faccessat instead"); +# endif #endif @@ -268,7 +306,7 @@ to GID (if GID is not -1). Follow symbolic links. Return 0 if successful, otherwise -1 and errno set. See the POSIX:2008 specification - <http://pubs.opengroup.org/onlinepubs/9699919799/functions/chown.html. */ + <https://pubs.opengroup.org/onlinepubs/9699919799/functions/chown.html. */ # if @REPLACE_CHOWN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef chown @@ -319,6 +357,24 @@ #endif +#if @GNULIB_COPY_FILE_RANGE@ +# if !@HAVE_COPY_FILE_RANGE@ +_GL_FUNCDECL_SYS (copy_file_range, ssize_t, (int ifd, off_t *ipos, + int ofd, off_t *opos, + size_t len, unsigned flags)); +_GL_CXXALIAS_SYS (copy_file_range, ssize_t, (int ifd, off_t *ipos, + int ofd, off_t *opos, + size_t len, unsigned flags)); +# endif +_GL_CXXALIASWARN (copy_file_range); +#elif defined GNULIB_POSIXCHECK +/* Assume copy_file_range is always declared. */ +_GL_WARN_ON_USE (copy_file_range, + "copy_file_range is unportable - " + "use gnulib module copy_file_range for portability"); +#endif + + #if @GNULIB_DUP@ # if @REPLACE_DUP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) @@ -344,7 +400,7 @@ NEWFD = OLDFD, otherwise close NEWFD first if it is open. Return newfd if successful, otherwise -1 and errno set. See the POSIX:2008 specification - <http://pubs.opengroup.org/onlinepubs/9699919799/functions/dup2.html>. */ + <https://pubs.opengroup.org/onlinepubs/9699919799/functions/dup2.html>. */ # if @REPLACE_DUP2@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define dup2 rpl_dup2 @@ -375,7 +431,7 @@ Close NEWFD first if it is open. Return newfd if successful, otherwise -1 and errno set. See the Linux man page at - <http://www.kernel.org/doc/man-pages/online/pages/man2/dup3.2.html>. */ + <https://www.kernel.org/doc/man-pages/online/pages/man2/dup3.2.html>. */ # if @HAVE_DUP3@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define dup3 rpl_dup3 @@ -397,6 +453,13 @@ #if @GNULIB_ENVIRON@ +# if defined __CYGWIN__ && !defined __i386__ +/* The 'environ' variable is defined in a DLL. Therefore its declaration needs + the '__declspec(dllimport)' attribute, but the system's <unistd.h> lacks it. + This leads to a link error on 64-bit Cygwin when the option + -Wl,--disable-auto-import is in use. */ +_GL_EXTERN_C __declspec(dllimport) char **environ; +# endif # if !@HAVE_DECL_ENVIRON@ /* Set of environment variables and values. An array of strings of the form "VARIABLE=VALUE", terminated with a NULL. */ @@ -422,12 +485,12 @@ #elif defined GNULIB_POSIXCHECK # if HAVE_RAW_DECL_ENVIRON _GL_UNISTD_INLINE char *** +_GL_WARN_ON_USE_ATTRIBUTE ("environ is unportable - " + "use gnulib module environ for portability") rpl_environ (void) { return &environ; } -_GL_WARN_ON_USE (rpl_environ, "environ is unportable - " - "use gnulib module environ for portability"); # undef environ # define environ (*rpl_environ ()) # endif @@ -458,13 +521,25 @@ #if @GNULIB_FACCESSAT@ -# if !@HAVE_FACCESSAT@ +# if @REPLACE_FACCESSAT@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef faccessat +# define faccessat rpl_faccessat +# endif +_GL_FUNCDECL_RPL (faccessat, int, + (int fd, char const *name, int mode, int flag) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (faccessat, int, + (int fd, char const *name, int mode, int flag)); +# else +# if !@HAVE_FACCESSAT@ _GL_FUNCDECL_SYS (faccessat, int, (int fd, char const *file, int mode, int flag) _GL_ARG_NONNULL ((2))); -# endif +# endif _GL_CXXALIAS_SYS (faccessat, int, (int fd, char const *file, int mode, int flag)); +# endif _GL_CXXALIASWARN (faccessat); #elif defined GNULIB_POSIXCHECK # undef faccessat @@ -480,7 +555,7 @@ the given file descriptor is open. Return 0 if successful, otherwise -1 and errno set. See the POSIX:2008 specification - <http://pubs.opengroup.org/onlinepubs/9699919799/functions/fchdir.html>. */ + <https://pubs.opengroup.org/onlinepubs/9699919799/functions/fchdir.html>. */ # if ! @HAVE_FCHDIR@ _GL_FUNCDECL_SYS (fchdir, int, (int /*fd*/)); @@ -541,7 +616,7 @@ /* Synchronize changes to a file. Return 0 if successful, otherwise -1 and errno set. See POSIX:2008 specification - <http://pubs.opengroup.org/onlinepubs/9699919799/functions/fdatasync.html>. */ + <https://pubs.opengroup.org/onlinepubs/9699919799/functions/fdatasync.html>. */ # if !@HAVE_FDATASYNC@ || !@HAVE_DECL_FDATASYNC@ _GL_FUNCDECL_SYS (fdatasync, int, (int fd)); # endif @@ -560,7 +635,7 @@ /* Synchronize changes, including metadata, to a file. Return 0 if successful, otherwise -1 and errno set. See POSIX:2008 specification - <http://pubs.opengroup.org/onlinepubs/9699919799/functions/fsync.html>. */ + <https://pubs.opengroup.org/onlinepubs/9699919799/functions/fsync.html>. */ # if !@HAVE_FSYNC@ _GL_FUNCDECL_SYS (fsync, int, (int fd)); # endif @@ -579,7 +654,7 @@ /* Change the size of the file to which FD is opened to become equal to LENGTH. Return 0 if successful, otherwise -1 and errno set. See the POSIX:2008 specification - <http://pubs.opengroup.org/onlinepubs/9699919799/functions/ftruncate.html>. */ + <https://pubs.opengroup.org/onlinepubs/9699919799/functions/ftruncate.html>. */ # if @REPLACE_FTRUNCATE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ftruncate @@ -609,7 +684,7 @@ Return BUF if successful, or NULL if the directory couldn't be determined or SIZE was too small. See the POSIX:2008 specification - <http://pubs.opengroup.org/onlinepubs/9699919799/functions/getcwd.html>. + <https://pubs.opengroup.org/onlinepubs/9699919799/functions/getcwd.html>. Additionally, the gnulib module 'getcwd' guarantees the following GNU extension: If BUF is NULL, an array is allocated with 'malloc'; the array is SIZE bytes long, unless SIZE == 0, in which case it is as big as @@ -685,7 +760,9 @@ # if !@HAVE_GETDTABLESIZE@ _GL_FUNCDECL_SYS (getdtablesize, int, (void)); # endif -_GL_CXXALIAS_SYS (getdtablesize, int, (void)); +/* Need to cast, because on AIX, the parameter list is + (...). */ +_GL_CXXALIAS_SYS_CAST (getdtablesize, int, (void)); # endif _GL_CXXALIASWARN (getdtablesize); #elif defined GNULIB_POSIXCHECK @@ -697,6 +774,22 @@ #endif +#if @GNULIB_GETENTROPY@ +/* Fill a buffer with random bytes. */ +# if !@HAVE_GETENTROPY@ +_GL_FUNCDECL_SYS (getentropy, int, (void *buffer, size_t length)); +# endif +_GL_CXXALIAS_SYS (getentropy, int, (void *buffer, size_t length)); +_GL_CXXALIASWARN (getentropy); +#elif defined GNULIB_POSIXCHECK +# undef getentropy +# if HAVE_RAW_DECL_GETENTROPY +_GL_WARN_ON_USE (getentropy, "getentropy is unportable - " + "use gnulib module getentropy for portability"); +# endif +#endif + + #if @GNULIB_GETGROUPS@ /* Return the supplemental groups that the current process belongs to. It is unspecified whether the effective group id is in the list. @@ -769,14 +862,14 @@ /* Returns the user's login name, or NULL if it cannot be found. Upon error, returns NULL with errno set. - See <http://www.opengroup.org/susv3xsh/getlogin.html>. + See <https://pubs.opengroup.org/onlinepubs/9699919799/functions/getlogin.html>. Most programs don't need to use this function, because the information is available through environment variables: ${LOGNAME-$USER} on Unix platforms, $USERNAME on native Windows platforms. */ -# if !@HAVE_GETLOGIN@ +# if !@HAVE_DECL_GETLOGIN@ _GL_FUNCDECL_SYS (getlogin, char *, (void)); # endif _GL_CXXALIAS_SYS (getlogin, char *, (void)); @@ -798,7 +891,7 @@ the case that the login name cannot be found but no specific error is provided (this case is hopefully rare but is left open by the POSIX spec). - See <http://www.opengroup.org/susv3xsh/getlogin.html>. + See <https://pubs.opengroup.org/onlinepubs/9699919799/functions/getlogin.html>. Most programs don't need to use this function, because the information is available through environment variables: @@ -839,6 +932,11 @@ _GL_FUNCDECL_RPL (getpagesize, int, (void)); _GL_CXXALIAS_RPL (getpagesize, int, (void)); # else +/* On HP-UX, getpagesize exists, but it is not declared in <unistd.h> even if + the compiler options -D_HPUX_SOURCE -D_XOPEN_SOURCE=600 are used. */ +# if defined __hpux +_GL_FUNCDECL_SYS (getpagesize, int, (void)); +# endif # if !@HAVE_GETPAGESIZE@ # if !defined getpagesize /* This is for POSIX systems. */ @@ -913,6 +1011,36 @@ #endif +#if @GNULIB_GETPASS@ +/* Function getpass() from module 'getpass': + Read a password from /dev/tty or stdin. + Function getpass() from module 'getpass-gnu': + Read a password of arbitrary length from /dev/tty or stdin. */ +# if @REPLACE_GETPASS@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef getpass +# define getpass rpl_getpass +# endif +_GL_FUNCDECL_RPL (getpass, char *, (const char *prompt) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (getpass, char *, (const char *prompt)); +# else +# if !@HAVE_GETPASS@ +_GL_FUNCDECL_SYS (getpass, char *, (const char *prompt) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (getpass, char *, (const char *prompt)); +# endif +_GL_CXXALIASWARN (getpass); +#elif defined GNULIB_POSIXCHECK +# undef getpass +# if HAVE_RAW_DECL_GETPASS +_GL_WARN_ON_USE (getpass, "getpass is unportable - " + "use gnulib module getpass or getpass-gnu for portability"); +# endif +#endif + + #if @GNULIB_GETUSERSHELL@ /* Return the next valid login shell on the system, or NULL when the end of the list has been reached. */ @@ -1003,7 +1131,7 @@ to GID (if GID is not -1). Do not follow symbolic links. Return 0 if successful, otherwise -1 and errno set. See the POSIX:2008 specification - <http://pubs.opengroup.org/onlinepubs/9699919799/functions/lchown.html>. */ + <https://pubs.opengroup.org/onlinepubs/9699919799/functions/lchown.html>. */ # if @REPLACE_LCHOWN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef lchown @@ -1033,7 +1161,7 @@ /* Create a new hard link for an existing file. Return 0 if successful, otherwise -1 and errno set. See POSIX:2008 specification - <http://pubs.opengroup.org/onlinepubs/9699919799/functions/link.html>. */ + <https://pubs.opengroup.org/onlinepubs/9699919799/functions/link.html>. */ # if @REPLACE_LINK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define link rpl_link @@ -1099,7 +1227,7 @@ /* Set the offset of FD relative to SEEK_SET, SEEK_CUR, or SEEK_END. Return the new offset if successful, otherwise -1 and errno set. See the POSIX:2008 specification - <http://pubs.opengroup.org/onlinepubs/9699919799/functions/lseek.html>. */ + <https://pubs.opengroup.org/onlinepubs/9699919799/functions/lseek.html>. */ # if @REPLACE_LSEEK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define lseek rpl_lseek @@ -1145,7 +1273,7 @@ Store the read-end as fd[0] and the write-end as fd[1]. Return 0 upon success, or -1 with errno set upon failure. See also the Linux man page at - <http://www.kernel.org/doc/man-pages/online/pages/man2/pipe2.2.html>. */ + <https://www.kernel.org/doc/man-pages/online/pages/man2/pipe2.2.html>. */ # if @HAVE_PIPE2@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define pipe2 rpl_pipe2 @@ -1171,7 +1299,7 @@ Return the number of bytes placed into BUF if successful, otherwise set errno and return -1. 0 indicates EOF. See the POSIX:2008 specification - <http://pubs.opengroup.org/onlinepubs/9699919799/functions/pread.html>. */ + <https://pubs.opengroup.org/onlinepubs/9699919799/functions/pread.html>. */ # if @REPLACE_PREAD@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pread @@ -1206,7 +1334,7 @@ Return the number of bytes written if successful, otherwise set errno and return -1. 0 indicates nothing written. See the POSIX:2008 specification - <http://pubs.opengroup.org/onlinepubs/9699919799/functions/pwrite.html>. */ + <https://pubs.opengroup.org/onlinepubs/9699919799/functions/pwrite.html>. */ # if @REPLACE_PWRITE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pwrite @@ -1239,7 +1367,7 @@ #if @GNULIB_READ@ /* Read up to COUNT bytes from file descriptor FD into the buffer starting at BUF. See the POSIX:2008 specification - <http://pubs.opengroup.org/onlinepubs/9699919799/functions/read.html>. */ + <https://pubs.opengroup.org/onlinepubs/9699919799/functions/read.html>. */ # if @REPLACE_READ@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef read @@ -1263,24 +1391,28 @@ bytes of it into BUF. Return the number of bytes placed into BUF if successful, otherwise -1 and errno set. See the POSIX:2008 specification - <http://pubs.opengroup.org/onlinepubs/9699919799/functions/readlink.html>. */ + <https://pubs.opengroup.org/onlinepubs/9699919799/functions/readlink.html>. */ # if @REPLACE_READLINK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define readlink rpl_readlink # endif _GL_FUNCDECL_RPL (readlink, ssize_t, - (const char *file, char *buf, size_t bufsize) + (const char *restrict file, + char *restrict buf, size_t bufsize) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (readlink, ssize_t, - (const char *file, char *buf, size_t bufsize)); + (const char *restrict file, + char *restrict buf, size_t bufsize)); # else # if !@HAVE_READLINK@ _GL_FUNCDECL_SYS (readlink, ssize_t, - (const char *file, char *buf, size_t bufsize) + (const char *restrict file, + char *restrict buf, size_t bufsize) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (readlink, ssize_t, - (const char *file, char *buf, size_t bufsize)); + (const char *restrict file, + char *restrict buf, size_t bufsize)); # endif _GL_CXXALIASWARN (readlink); #elif defined GNULIB_POSIXCHECK @@ -1298,18 +1430,22 @@ # define readlinkat rpl_readlinkat # endif _GL_FUNCDECL_RPL (readlinkat, ssize_t, - (int fd, char const *file, char *buf, size_t len) + (int fd, char const *restrict file, + char *restrict buf, size_t len) _GL_ARG_NONNULL ((2, 3))); _GL_CXXALIAS_RPL (readlinkat, ssize_t, - (int fd, char const *file, char *buf, size_t len)); + (int fd, char const *restrict file, + char *restrict buf, size_t len)); # else # if !@HAVE_READLINKAT@ _GL_FUNCDECL_SYS (readlinkat, ssize_t, - (int fd, char const *file, char *buf, size_t len) + (int fd, char const *restrict file, + char *restrict buf, size_t len) _GL_ARG_NONNULL ((2, 3))); # endif _GL_CXXALIAS_SYS (readlinkat, ssize_t, - (int fd, char const *file, char *buf, size_t len)); + (int fd, char const *restrict file, + char *restrict buf, size_t len)); # endif _GL_CXXALIASWARN (readlinkat); #elif defined GNULIB_POSIXCHECK @@ -1373,7 +1509,7 @@ /* Pause the execution of the current thread for N seconds. Returns the number of seconds left to sleep. See the POSIX:2008 specification - <http://pubs.opengroup.org/onlinepubs/9699919799/functions/sleep.html>. */ + <https://pubs.opengroup.org/onlinepubs/9699919799/functions/sleep.html>. */ # if @REPLACE_SLEEP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef sleep @@ -1453,6 +1589,36 @@ #endif +#if @GNULIB_TRUNCATE@ +/* Change the size of the file designated by FILENAME to become equal to LENGTH. + Return 0 if successful, otherwise -1 and errno set. + See the POSIX:2008 specification + <https://pubs.opengroup.org/onlinepubs/9699919799/functions/truncate.html>. */ +# if @REPLACE_TRUNCATE@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef truncate +# define truncate rpl_truncate +# endif +_GL_FUNCDECL_RPL (truncate, int, (const char *filename, off_t length) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (truncate, int, (const char *filename, off_t length)); +# else +# if !@HAVE_DECL_TRUNCATE@ +_GL_FUNCDECL_SYS (truncate, int, (const char *filename, off_t length) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (truncate, int, (const char *filename, off_t length)); +# endif +_GL_CXXALIASWARN (truncate); +#elif defined GNULIB_POSIXCHECK +# undef truncate +# if HAVE_RAW_DECL_TRUNCATE +_GL_WARN_ON_USE (truncate, "truncate is unportable - " + "use gnulib module truncate for portability"); +# endif +#endif + + #if @GNULIB_TTYNAME_R@ /* Store at most BUFLEN characters of the pathname of the terminal FD is open on in BUF. Return 0 on success, otherwise an error number. */ @@ -1534,7 +1700,7 @@ /* Pause the execution of the current thread for N microseconds. Returns 0 on completion, or -1 on range error. See the POSIX:2001 specification - <http://www.opengroup.org/susv3xsh/usleep.html>. */ + <https://pubs.opengroup.org/onlinepubs/009695399/functions/usleep.html>. */ # if @REPLACE_USLEEP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef usleep @@ -1546,7 +1712,9 @@ # if !@HAVE_USLEEP@ _GL_FUNCDECL_SYS (usleep, int, (useconds_t n)); # endif -_GL_CXXALIAS_SYS (usleep, int, (useconds_t n)); +/* Need to cast, because on Haiku, the first parameter is + unsigned int n. */ +_GL_CXXALIAS_SYS_CAST (usleep, int, (useconds_t n)); # endif _GL_CXXALIASWARN (usleep); #elif defined GNULIB_POSIXCHECK @@ -1561,7 +1729,7 @@ #if @GNULIB_WRITE@ /* Write up to COUNT bytes starting at BUF to file descriptor FD. See the POSIX:2008 specification - <http://pubs.opengroup.org/onlinepubs/9699919799/functions/write.html>. */ + <https://pubs.opengroup.org/onlinepubs/9699919799/functions/write.html>. */ # if @REPLACE_WRITE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef write diff -Nru gdb-9.1/gnulib/import/unistd-safer.h gdb-10.2/gnulib/import/unistd-safer.h --- gdb-9.1/gnulib/import/unistd-safer.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/unistd-safer.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Invoke unistd-like functions, but avoid some glitches. - Copyright (C) 2001, 2003, 2005, 2009-2016 Free Software Foundation, Inc. + Copyright (C) 2001, 2003, 2005, 2009-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -13,7 +13,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paul Eggert and Eric Blake. */ diff -Nru gdb-9.1/gnulib/import/unsetenv.c gdb-10.2/gnulib/import/unsetenv.c --- gdb-9.1/gnulib/import/unsetenv.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/unsetenv.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 1992, 1995-2002, 2005-2016 Free Software Foundation, Inc. +/* Copyright (C) 1992, 1995-2002, 2005-2020 Free Software Foundation, Inc. This file is part of the GNU C Library. This program is free software: you can redistribute it and/or modify @@ -12,7 +12,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Don't use __attribute__ __nonnull__ in this compilation unit. Otherwise gcc optimizes away the name == NULL test below. */ diff -Nru gdb-9.1/gnulib/import/verify.h gdb-10.2/gnulib/import/verify.h --- gdb-9.1/gnulib/import/verify.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/verify.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Compile-time assert-like macros. - Copyright (C) 2005-2006, 2009-2016 Free Software Foundation, Inc. + Copyright (C) 2005-2006, 2009-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -13,7 +13,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. */ + along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paul Eggert, Bruno Haible, and Jim Meyering. */ @@ -21,31 +21,37 @@ #define _GL_VERIFY_H -/* Define _GL_HAVE__STATIC_ASSERT to 1 if _Static_assert works as per C11. - This is supported by GCC 4.6.0 and later, in C mode, and its use - here generates easier-to-read diagnostics when verify (R) fails. - - Define _GL_HAVE_STATIC_ASSERT to 1 if static_assert works as per C++11. - This will likely be supported by future GCC versions, in C++ mode. - - Use this only with GCC. If we were willing to slow 'configure' - down we could also use it with other compilers, but since this - affects only the quality of diagnostics, why bother? */ -#if (4 < __GNUC__ + (6 <= __GNUC_MINOR__) \ - && (201112L <= __STDC_VERSION__ || !defined __STRICT_ANSI__) \ - && !defined __cplusplus) -# define _GL_HAVE__STATIC_ASSERT 1 -#endif -/* The condition (99 < __GNUC__) is temporary, until we know about the - first G++ release that supports static_assert. */ -#if (99 < __GNUC__) && defined __cplusplus -# define _GL_HAVE_STATIC_ASSERT 1 +/* Define _GL_HAVE__STATIC_ASSERT to 1 if _Static_assert (R, DIAGNOSTIC) + works as per C11. This is supported by GCC 4.6.0 and later, in C + mode. + + Define _GL_HAVE__STATIC_ASSERT1 to 1 if _Static_assert (R) works as + per C2X, and define _GL_HAVE_STATIC_ASSERT1 if static_assert (R) + works as per C++17. This is supported by GCC 9.1 and later. + + Support compilers claiming conformance to the relevant standard, + and also support GCC when not pedantic. If we were willing to slow + 'configure' down we could also use it with other compilers, but + since this affects only the quality of diagnostics, why bother? */ +#ifndef __cplusplus +# if (201112L <= __STDC_VERSION__ \ + || (!defined __STRICT_ANSI__ && 4 < __GNUC__ + (6 <= __GNUC_MINOR__))) +# define _GL_HAVE__STATIC_ASSERT 1 +# endif +# if (202000L <= __STDC_VERSION__ \ + || (!defined __STRICT_ANSI__ && 9 <= __GNUC__)) +# define _GL_HAVE__STATIC_ASSERT1 1 +# endif +#else +# if 201703L <= __cplusplus || 9 <= __GNUC__ +# define _GL_HAVE_STATIC_ASSERT1 1 +# endif #endif /* FreeBSD 9.1 <sys/cdefs.h>, included by <stddef.h> and lots of other system headers, defines a conflicting _Static_assert that is no better than ours; override it. */ -#ifndef _GL_HAVE_STATIC_ASSERT +#ifndef _GL_HAVE__STATIC_ASSERT # include <stddef.h> # undef _Static_assert #endif @@ -143,9 +149,9 @@ which do not support _Static_assert, also do not warn about the last declaration mentioned above. - * GCC warns if -Wnested-externs is enabled and verify() is used + * GCC warns if -Wnested-externs is enabled and 'verify' is used within a function body; but inside a function, you can always - arrange to use verify_expr() instead. + arrange to use verify_expr instead. * In C++, any struct definition inside sizeof is invalid. Use a template type to work around the problem. */ @@ -197,48 +203,61 @@ #endif /* Verify requirement R at compile-time, as a declaration without a - trailing ';'. If R is false, fail at compile-time, preferably - with a diagnostic that includes the string-literal DIAGNOSTIC. + trailing ';'. If R is false, fail at compile-time. + + This macro requires three or more arguments but uses at most the first + two, so that the _Static_assert macro optionally defined below supports + both the C11 two-argument syntax and the C2X one-argument syntax. Unfortunately, unlike C11, this implementation must appear as an ordinary declaration, and cannot appear inside struct { ... }. */ -#ifdef _GL_HAVE__STATIC_ASSERT -# define _GL_VERIFY _Static_assert +#if defined _GL_HAVE__STATIC_ASSERT +# define _GL_VERIFY(R, DIAGNOSTIC, ...) _Static_assert (R, DIAGNOSTIC) #else -# define _GL_VERIFY(R, DIAGNOSTIC) \ +# define _GL_VERIFY(R, DIAGNOSTIC, ...) \ extern int (*_GL_GENSYM (_gl_verify_function) (void)) \ [_GL_VERIFY_TRUE (R, DIAGNOSTIC)] #endif /* _GL_STATIC_ASSERT_H is defined if this code is copied into assert.h. */ #ifdef _GL_STATIC_ASSERT_H -# if !defined _GL_HAVE__STATIC_ASSERT && !defined _Static_assert -# define _Static_assert(R, DIAGNOSTIC) _GL_VERIFY (R, DIAGNOSTIC) +# if !defined _GL_HAVE__STATIC_ASSERT1 && !defined _Static_assert +# define _Static_assert(...) \ + _GL_VERIFY (__VA_ARGS__, "static assertion failed", -) # endif -# if !defined _GL_HAVE_STATIC_ASSERT && !defined static_assert +# if !defined _GL_HAVE_STATIC_ASSERT1 && !defined static_assert # define static_assert _Static_assert /* C11 requires this #define. */ # endif #endif /* @assert.h omit start@ */ +#if 3 < __GNUC__ + (3 < __GNUC_MINOR__ + (4 <= __GNUC_PATCHLEVEL__)) +# define _GL_HAS_BUILTIN_TRAP 1 +#elif defined __has_builtin +# define _GL_HAS_BUILTIN_TRAP __has_builtin (__builtin_trap) +#else +# define _GL_HAS_BUILTIN_TRAP 0 +#endif + +#if 4 < __GNUC__ + (5 <= __GNUC_MINOR__) +# define _GL_HAS_BUILTIN_UNREACHABLE 1 +#elif defined __has_builtin +# define _GL_HAS_BUILTIN_UNREACHABLE __has_builtin (__builtin_unreachable) +#else +# define _GL_HAS_BUILTIN_UNREACHABLE 0 +#endif + /* Each of these macros verifies that its argument R is nonzero. To be portable, R should be an integer constant expression. Unlike assert (R), there is no run-time overhead. There are two macros, since no single macro can be used in all - contexts in C. verify_true (R) is for scalar contexts, including + contexts in C. verify_expr (R, E) is for scalar contexts, including integer constant expression contexts. verify (R) is for declaration contexts, e.g., the top level. */ -/* Verify requirement R at compile-time, as an integer constant expression. - Return 1. This is equivalent to verify_expr (R, 1). - - verify_true is obsolescent; please use verify_expr instead. */ - -#define verify_true(R) _GL_VERIFY_TRUE (R, "verify_true (" #R ")") - /* Verify requirement R at compile-time. Return the value of the expression E. */ @@ -246,32 +265,47 @@ (_GL_VERIFY_TRUE (R, "verify_expr (" #R ", " #E ")") ? (E) : (E)) /* Verify requirement R at compile-time, as a declaration without a - trailing ';'. */ - -#define verify(R) _GL_VERIFY (R, "verify (" #R ")") - -#ifndef __has_builtin -# define __has_builtin(x) 0 + trailing ';'. verify (R) acts like static_assert (R) except that + it is portable to C11/C++14 and earlier, it can issue better + diagnostics, and its name is shorter and may be more convenient. */ + +#ifdef __PGI +/* PGI barfs if R is long. */ +# define verify(R) _GL_VERIFY (R, "verify (...)", -) +#else +# define verify(R) _GL_VERIFY (R, "verify (" #R ")", -) #endif -/* Assume that R always holds. This lets the compiler optimize - accordingly. R should not have side-effects; it may or may not be - evaluated. Behavior is undefined if R is false. */ +/* Assume that R always holds. Behavior is undefined if R is false, + fails to evaluate, or has side effects. + + 'assume (R)' is a directive from the programmer telling the + compiler that R is true so the compiler needn't generate code to + test R. This is why 'assume' is in verify.h: it's related to + static checking (in this case, static checking done by the + programmer), not dynamic checking. + + 'assume (R)' can affect compilation of all the code, not just code + that happens to be executed after the assume (R) is "executed". + For example, if the code mistakenly does 'assert (R); assume (R);' + the compiler is entitled to optimize away the 'assert (R)'. + + Although assuming R can help a compiler generate better code or + diagnostics, performance can suffer if R uses hard-to-optimize + features such as function calls not inlined by the compiler. */ -#if (__has_builtin (__builtin_unreachable) \ - || 4 < __GNUC__ + (5 <= __GNUC_MINOR__)) +#if _GL_HAS_BUILTIN_UNREACHABLE # define assume(R) ((R) ? (void) 0 : __builtin_unreachable ()) #elif 1200 <= _MSC_VER # define assume(R) __assume (R) -#elif ((defined GCC_LINT || defined lint) \ - && (__has_builtin (__builtin_trap) \ - || 3 < __GNUC__ + (3 < __GNUC_MINOR__ + (4 <= __GNUC_PATCHLEVEL__)))) +#elif (defined GCC_LINT || defined lint) && _GL_HAS_BUILTIN_TRAP /* Doing it this way helps various packages when configured with --enable-gcc-warnings, which compiles with -Dlint. It's nicer when 'assume' silences warnings even with older GCCs. */ # define assume(R) ((R) ? (void) 0 : __builtin_trap ()) #else -# define assume(R) ((void) (0 && (R))) + /* Some tools grok NOTREACHED, e.g., Oracle Studio 12.6. */ +# define assume(R) ((R) ? (void) 0 : /*NOTREACHED*/ (void) 0) #endif /* @assert.h omit end@ */ diff -Nru gdb-9.1/gnulib/import/warn-on-use.h gdb-10.2/gnulib/import/warn-on-use.h --- gdb-9.1/gnulib/import/warn-on-use.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/warn-on-use.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,136 @@ +/* A C macro for emitting warnings if a function is used. + Copyright (C) 2010-2020 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* _GL_WARN_ON_USE (function, "literal string") issues a declaration + for FUNCTION which will then trigger a compiler warning containing + the text of "literal string" anywhere that function is called, if + supported by the compiler. If the compiler does not support this + feature, the macro expands to an unused extern declaration. + + _GL_WARN_ON_USE_ATTRIBUTE ("literal string") expands to the + attribute used in _GL_WARN_ON_USE. If the compiler does not support + this feature, it expands to empty. + + These macros are useful for marking a function as a potential + portability trap, with the intent that "literal string" include + instructions on the replacement function that should be used + instead. + _GL_WARN_ON_USE is for functions with 'extern' linkage. + _GL_WARN_ON_USE_ATTRIBUTE is for functions with 'static' or 'inline' + linkage. + + However, one of the reasons that a function is a portability trap is + if it has the wrong signature. Declaring FUNCTION with a different + signature in C is a compilation error, so this macro must use the + same type as any existing declaration so that programs that avoid + the problematic FUNCTION do not fail to compile merely because they + included a header that poisoned the function. But this implies that + _GL_WARN_ON_USE is only safe to use if FUNCTION is known to already + have a declaration. Use of this macro implies that there must not + be any other macro hiding the declaration of FUNCTION; but + undefining FUNCTION first is part of the poisoning process anyway + (although for symbols that are provided only via a macro, the result + is a compilation error rather than a warning containing + "literal string"). Also note that in C++, it is only safe to use if + FUNCTION has no overloads. + + For an example, it is possible to poison 'getline' by: + - adding a call to gl_WARN_ON_USE_PREPARE([[#include <stdio.h>]], + [getline]) in configure.ac, which potentially defines + HAVE_RAW_DECL_GETLINE + - adding this code to a header that wraps the system <stdio.h>: + #undef getline + #if HAVE_RAW_DECL_GETLINE + _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but" + "not universally present; use the gnulib module getline"); + #endif + + It is not possible to directly poison global variables. But it is + possible to write a wrapper accessor function, and poison that + (less common usage, like &environ, will cause a compilation error + rather than issue the nice warning, but the end result of informing + the developer about their portability problem is still achieved): + #if HAVE_RAW_DECL_ENVIRON + static char *** + rpl_environ (void) { return &environ; } + _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared"); + # undef environ + # define environ (*rpl_environ ()) + #endif + or better (avoiding contradictory use of 'static' and 'extern'): + #if HAVE_RAW_DECL_ENVIRON + static char *** + _GL_WARN_ON_USE_ATTRIBUTE ("environ is not always properly declared") + rpl_environ (void) { return &environ; } + # undef environ + # define environ (*rpl_environ ()) + #endif + */ +#ifndef _GL_WARN_ON_USE + +# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE(function, message) \ +extern __typeof__ (function) function __attribute__ ((__warning__ (message))) +# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ + __attribute__ ((__warning__ (message))) +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE(function, message) \ +extern __typeof__ (function) function +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# else /* Unsupported. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# endif +#endif + +/* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string") + is like _GL_WARN_ON_USE (function, "string"), except that in C++ mode the + function is declared with the given prototype, consisting of return type, + parameters, and attributes. + This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does + not work in this case. */ +#ifndef _GL_WARN_ON_USE_CXX +# if !defined __cplusplus +# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ + _GL_WARN_ON_USE (function, msg) +# else +# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) +# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ +extern rettype function parameters_and_attributes \ + __attribute__ ((__warning__ (msg))) +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ +extern rettype function parameters_and_attributes +# else /* Unsupported. */ +# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# endif +# endif +#endif + +/* _GL_WARN_EXTERN_C declaration; + performs the declaration with C linkage. */ +#ifndef _GL_WARN_EXTERN_C +# if defined __cplusplus +# define _GL_WARN_EXTERN_C extern "C" +# else +# define _GL_WARN_EXTERN_C extern +# endif +#endif diff -Nru gdb-9.1/gnulib/import/wchar.in.h gdb-10.2/gnulib/import/wchar.in.h --- gdb-9.1/gnulib/import/wchar.in.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/wchar.in.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* A substitute for ISO C99 <wchar.h>, for platforms that have issues. - Copyright (C) 2007-2016 Free Software Foundation, Inc. + Copyright (C) 2007-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -13,13 +13,13 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, see <http://www.gnu.org/licenses/>. */ + along with this program; if not, see <https://www.gnu.org/licenses/>. */ /* Written by Eric Blake. */ /* * ISO C 99 <wchar.h> for platforms that have issues. - * <http://www.opengroup.org/susv3xbd/wchar.h.html> + * <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/wchar.h.html> * * For now, this just ensures proper prerequisite inclusion order and * the declaration of wcwidth(). @@ -31,9 +31,10 @@ @PRAGMA_COLUMNS@ #if (((defined __need_mbstate_t || defined __need_wint_t) \ - && !defined __MINGW32__ && !defined __KLIBC__) \ + && !defined __MINGW32__) \ || (defined __hpux \ - && ((defined _INTTYPES_INCLUDED && !defined strtoimax) \ + && ((defined _INTTYPES_INCLUDED \ + && !defined _GL_FINISHED_INCLUDING_SYSTEM_INTTYPES_H) \ || defined _GL_JUST_INCLUDE_SYSTEM_WCHAR_H)) \ || (defined __MINGW32__ && defined __STRING_H_SOURCED__) \ || defined _GL_ALREADY_INCLUDING_WCHAR_H) @@ -93,10 +94,12 @@ /* The __attribute__ feature is available in gcc versions 2.5 and later. The attribute __pure__ was added in gcc 2.96. */ -#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) -# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) -#else -# define _GL_ATTRIBUTE_PURE /* empty */ +#ifndef _GL_ATTRIBUTE_PURE +# if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) +# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) +# else +# define _GL_ATTRIBUTE_PURE /* empty */ +# endif #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ @@ -113,12 +116,16 @@ # define WEOF -1 # endif #else -/* MSVC defines wint_t as 'unsigned short' in <crtdefs.h>. - This is too small: ISO C 99 section 7.24.1.(2) says that wint_t must be - "unchanged by default argument promotions". Override it. */ -# if defined _MSC_VER +/* mingw and MSVC define wint_t as 'unsigned short' in <crtdefs.h> or + <stddef.h>. This is too small: ISO C 99 section 7.24.1.(2) says that + wint_t must be "unchanged by default argument promotions". Override it. */ +# if @GNULIB_OVERRIDES_WINT_T@ # if !GNULIB_defined_wint_t -# include <crtdefs.h> +# if @HAVE_CRTDEFS_H@ +# include <crtdefs.h> +# else +# include <stddef.h> +# endif typedef unsigned int rpl_wint_t; # undef wint_t # define wint_t rpl_wint_t @@ -133,12 +140,16 @@ /* Override mbstate_t if it is too small. On IRIX 6.5, sizeof (mbstate_t) == 1, which is not sufficient for - implementing mbrtowc for encodings like UTF-8. */ -#if !(@HAVE_MBSINIT@ && @HAVE_MBRTOWC@) || @REPLACE_MBSTATE_T@ + implementing mbrtowc for encodings like UTF-8. + On AIX and MSVC, mbrtowc needs to be overridden, but mbstate_t exists and is + large enough and overriding it would cause problems in C++ mode. */ +#if !(((defined _WIN32 && !defined __CYGWIN__) || @HAVE_MBSINIT@) && @HAVE_MBRTOWC@) || @REPLACE_MBSTATE_T@ # if !GNULIB_defined_mbstate_t +# if !(defined _AIX || defined _MSC_VER) typedef int rpl_mbstate_t; -# undef mbstate_t -# define mbstate_t rpl_mbstate_t +# undef mbstate_t +# define mbstate_t rpl_mbstate_t +# endif # define GNULIB_defined_mbstate_t 1 # endif #endif @@ -157,9 +168,12 @@ # if !@HAVE_BTOWC@ _GL_FUNCDECL_SYS (btowc, wint_t, (int c) _GL_ATTRIBUTE_PURE); # endif -_GL_CXXALIAS_SYS (btowc, wint_t, (int c)); +/* Need to cast, because on mingw, the return type is 'unsigned short'. */ +_GL_CXXALIAS_SYS_CAST (btowc, wint_t, (int c)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (btowc); +# endif #elif defined GNULIB_POSIXCHECK # undef btowc # if HAVE_RAW_DECL_BTOWC @@ -185,7 +199,9 @@ # endif _GL_CXXALIAS_SYS (wctob, int, (wint_t wc)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (wctob); +# endif #elif defined GNULIB_POSIXCHECK # undef wctob # if HAVE_RAW_DECL_WCTOB @@ -210,7 +226,9 @@ # endif _GL_CXXALIAS_SYS (mbsinit, int, (const mbstate_t *ps)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (mbsinit); +# endif #elif defined GNULIB_POSIXCHECK # undef mbsinit # if HAVE_RAW_DECL_MBSINIT @@ -228,18 +246,24 @@ # define mbrtowc rpl_mbrtowc # endif _GL_FUNCDECL_RPL (mbrtowc, size_t, - (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)); + (wchar_t *restrict pwc, const char *restrict s, size_t n, + mbstate_t *restrict ps)); _GL_CXXALIAS_RPL (mbrtowc, size_t, - (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)); + (wchar_t *restrict pwc, const char *restrict s, size_t n, + mbstate_t *restrict ps)); # else # if !@HAVE_MBRTOWC@ _GL_FUNCDECL_SYS (mbrtowc, size_t, - (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)); + (wchar_t *restrict pwc, const char *restrict s, size_t n, + mbstate_t *restrict ps)); # endif _GL_CXXALIAS_SYS (mbrtowc, size_t, - (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)); + (wchar_t *restrict pwc, const char *restrict s, size_t n, + mbstate_t *restrict ps)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (mbrtowc); +# endif #elif defined GNULIB_POSIXCHECK # undef mbrtowc # if HAVE_RAW_DECL_MBRTOWC @@ -256,15 +280,21 @@ # undef mbrlen # define mbrlen rpl_mbrlen # endif -_GL_FUNCDECL_RPL (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps)); -_GL_CXXALIAS_RPL (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps)); +_GL_FUNCDECL_RPL (mbrlen, size_t, + (const char *restrict s, size_t n, mbstate_t *restrict ps)); +_GL_CXXALIAS_RPL (mbrlen, size_t, + (const char *restrict s, size_t n, mbstate_t *restrict ps)); # else # if !@HAVE_MBRLEN@ -_GL_FUNCDECL_SYS (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps)); +_GL_FUNCDECL_SYS (mbrlen, size_t, + (const char *restrict s, size_t n, mbstate_t *restrict ps)); # endif -_GL_CXXALIAS_SYS (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps)); +_GL_CXXALIAS_SYS (mbrlen, size_t, + (const char *restrict s, size_t n, mbstate_t *restrict ps)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (mbrlen); +# endif #elif defined GNULIB_POSIXCHECK # undef mbrlen # if HAVE_RAW_DECL_MBRLEN @@ -282,22 +312,30 @@ # define mbsrtowcs rpl_mbsrtowcs # endif _GL_FUNCDECL_RPL (mbsrtowcs, size_t, - (wchar_t *dest, const char **srcp, size_t len, mbstate_t *ps) + (wchar_t *restrict dest, + const char **restrict srcp, size_t len, + mbstate_t *restrict ps) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (mbsrtowcs, size_t, - (wchar_t *dest, const char **srcp, size_t len, - mbstate_t *ps)); + (wchar_t *restrict dest, + const char **restrict srcp, size_t len, + mbstate_t *restrict ps)); # else # if !@HAVE_MBSRTOWCS@ _GL_FUNCDECL_SYS (mbsrtowcs, size_t, - (wchar_t *dest, const char **srcp, size_t len, mbstate_t *ps) + (wchar_t *restrict dest, + const char **restrict srcp, size_t len, + mbstate_t *restrict ps) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (mbsrtowcs, size_t, - (wchar_t *dest, const char **srcp, size_t len, - mbstate_t *ps)); + (wchar_t *restrict dest, + const char **restrict srcp, size_t len, + mbstate_t *restrict ps)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (mbsrtowcs); +# endif #elif defined GNULIB_POSIXCHECK # undef mbsrtowcs # if HAVE_RAW_DECL_MBSRTOWCS @@ -315,22 +353,26 @@ # define mbsnrtowcs rpl_mbsnrtowcs # endif _GL_FUNCDECL_RPL (mbsnrtowcs, size_t, - (wchar_t *dest, const char **srcp, size_t srclen, size_t len, - mbstate_t *ps) + (wchar_t *restrict dest, + const char **restrict srcp, size_t srclen, size_t len, + mbstate_t *restrict ps) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (mbsnrtowcs, size_t, - (wchar_t *dest, const char **srcp, size_t srclen, size_t len, - mbstate_t *ps)); + (wchar_t *restrict dest, + const char **restrict srcp, size_t srclen, size_t len, + mbstate_t *restrict ps)); # else # if !@HAVE_MBSNRTOWCS@ _GL_FUNCDECL_SYS (mbsnrtowcs, size_t, - (wchar_t *dest, const char **srcp, size_t srclen, size_t len, - mbstate_t *ps) + (wchar_t *restrict dest, + const char **restrict srcp, size_t srclen, size_t len, + mbstate_t *restrict ps) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (mbsnrtowcs, size_t, - (wchar_t *dest, const char **srcp, size_t srclen, size_t len, - mbstate_t *ps)); + (wchar_t *restrict dest, + const char **restrict srcp, size_t srclen, size_t len, + mbstate_t *restrict ps)); # endif _GL_CXXALIASWARN (mbsnrtowcs); #elif defined GNULIB_POSIXCHECK @@ -349,15 +391,21 @@ # undef wcrtomb # define wcrtomb rpl_wcrtomb # endif -_GL_FUNCDECL_RPL (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps)); -_GL_CXXALIAS_RPL (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps)); +_GL_FUNCDECL_RPL (wcrtomb, size_t, + (char *restrict s, wchar_t wc, mbstate_t *restrict ps)); +_GL_CXXALIAS_RPL (wcrtomb, size_t, + (char *restrict s, wchar_t wc, mbstate_t *restrict ps)); # else # if !@HAVE_WCRTOMB@ -_GL_FUNCDECL_SYS (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps)); +_GL_FUNCDECL_SYS (wcrtomb, size_t, + (char *restrict s, wchar_t wc, mbstate_t *restrict ps)); # endif -_GL_CXXALIAS_SYS (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps)); +_GL_CXXALIAS_SYS (wcrtomb, size_t, + (char *restrict s, wchar_t wc, mbstate_t *restrict ps)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcrtomb); +# endif #elif defined GNULIB_POSIXCHECK # undef wcrtomb # if HAVE_RAW_DECL_WCRTOMB @@ -375,22 +423,30 @@ # define wcsrtombs rpl_wcsrtombs # endif _GL_FUNCDECL_RPL (wcsrtombs, size_t, - (char *dest, const wchar_t **srcp, size_t len, mbstate_t *ps) + (char *restrict dest, const wchar_t **restrict srcp, + size_t len, + mbstate_t *restrict ps) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (wcsrtombs, size_t, - (char *dest, const wchar_t **srcp, size_t len, - mbstate_t *ps)); + (char *restrict dest, const wchar_t **restrict srcp, + size_t len, + mbstate_t *restrict ps)); # else # if !@HAVE_WCSRTOMBS@ _GL_FUNCDECL_SYS (wcsrtombs, size_t, - (char *dest, const wchar_t **srcp, size_t len, mbstate_t *ps) + (char *restrict dest, const wchar_t **restrict srcp, + size_t len, + mbstate_t *restrict ps) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (wcsrtombs, size_t, - (char *dest, const wchar_t **srcp, size_t len, - mbstate_t *ps)); + (char *restrict dest, const wchar_t **restrict srcp, + size_t len, + mbstate_t *restrict ps)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcsrtombs); +# endif #elif defined GNULIB_POSIXCHECK # undef wcsrtombs # if HAVE_RAW_DECL_WCSRTOMBS @@ -408,24 +464,34 @@ # define wcsnrtombs rpl_wcsnrtombs # endif _GL_FUNCDECL_RPL (wcsnrtombs, size_t, - (char *dest, const wchar_t **srcp, size_t srclen, size_t len, - mbstate_t *ps) + (char *restrict dest, + const wchar_t **restrict srcp, size_t srclen, + size_t len, + mbstate_t *restrict ps) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (wcsnrtombs, size_t, - (char *dest, const wchar_t **srcp, size_t srclen, size_t len, - mbstate_t *ps)); + (char *restrict dest, + const wchar_t **restrict srcp, size_t srclen, + size_t len, + mbstate_t *restrict ps)); # else -# if !@HAVE_WCSNRTOMBS@ +# if !@HAVE_WCSNRTOMBS@ || (defined __cplusplus && defined __sun) _GL_FUNCDECL_SYS (wcsnrtombs, size_t, - (char *dest, const wchar_t **srcp, size_t srclen, size_t len, - mbstate_t *ps) + (char *restrict dest, + const wchar_t **restrict srcp, size_t srclen, + size_t len, + mbstate_t *restrict ps) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (wcsnrtombs, size_t, - (char *dest, const wchar_t **srcp, size_t srclen, size_t len, - mbstate_t *ps)); + (char *restrict dest, + const wchar_t **restrict srcp, size_t srclen, + size_t len, + mbstate_t *restrict ps)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcsnrtombs); +# endif #elif defined GNULIB_POSIXCHECK # undef wcsnrtombs # if HAVE_RAW_DECL_WCSNRTOMBS @@ -448,15 +514,12 @@ # if !@HAVE_DECL_WCWIDTH@ /* wcwidth exists but is not declared. */ _GL_FUNCDECL_SYS (wcwidth, int, (wchar_t) _GL_ATTRIBUTE_PURE); -# elif defined __KLIBC__ -/* On OS/2 kLIBC, wcwidth is a macro that expands to the name of a - static inline function. The implementation of wcwidth in wcwidth.c - causes a "conflicting types" error. */ -# undef wcwidth # endif _GL_CXXALIAS_SYS (wcwidth, int, (wchar_t)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcwidth); +# endif #elif defined GNULIB_POSIXCHECK # undef wcwidth # if HAVE_RAW_DECL_WCWIDTH @@ -485,7 +548,7 @@ _GL_CXXALIASWARN1 (wmemchr, wchar_t *, (wchar_t *s, wchar_t c, size_t n)); _GL_CXXALIASWARN1 (wmemchr, const wchar_t *, (const wchar_t *s, wchar_t c, size_t n)); -# else +# elif __GLIBC__ >= 2 _GL_CXXALIASWARN (wmemchr); # endif #elif defined GNULIB_POSIXCHECK @@ -506,7 +569,9 @@ # endif _GL_CXXALIAS_SYS (wmemcmp, int, (const wchar_t *s1, const wchar_t *s2, size_t n)); +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (wmemcmp); +# endif #elif defined GNULIB_POSIXCHECK # undef wmemcmp # if HAVE_RAW_DECL_WMEMCMP @@ -520,11 +585,15 @@ #if @GNULIB_WMEMCPY@ # if !@HAVE_WMEMCPY@ _GL_FUNCDECL_SYS (wmemcpy, wchar_t *, - (wchar_t *dest, const wchar_t *src, size_t n)); + (wchar_t *restrict dest, + const wchar_t *restrict src, size_t n)); # endif _GL_CXXALIAS_SYS (wmemcpy, wchar_t *, - (wchar_t *dest, const wchar_t *src, size_t n)); + (wchar_t *restrict dest, + const wchar_t *restrict src, size_t n)); +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (wmemcpy); +# endif #elif defined GNULIB_POSIXCHECK # undef wmemcpy # if HAVE_RAW_DECL_WMEMCPY @@ -543,7 +612,9 @@ # endif _GL_CXXALIAS_SYS (wmemmove, wchar_t *, (wchar_t *dest, const wchar_t *src, size_t n)); +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (wmemmove); +# endif #elif defined GNULIB_POSIXCHECK # undef wmemmove # if HAVE_RAW_DECL_WMEMMOVE @@ -553,13 +624,38 @@ #endif +/* Copy N wide characters of SRC to DEST. + Return pointer to wide characters after the last written wide character. */ +#if @GNULIB_WMEMPCPY@ +# if !@HAVE_WMEMPCPY@ +_GL_FUNCDECL_SYS (wmempcpy, wchar_t *, + (wchar_t *restrict dest, + const wchar_t *restrict src, size_t n)); +# endif +_GL_CXXALIAS_SYS (wmempcpy, wchar_t *, + (wchar_t *restrict dest, + const wchar_t *restrict src, size_t n)); +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (wmempcpy); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wmempcpy +# if HAVE_RAW_DECL_WMEMPCPY +_GL_WARN_ON_USE (wmempcpy, "wmempcpy is unportable - " + "use gnulib module wmempcpy for portability"); +# endif +#endif + + /* Set N wide characters of S to C. */ #if @GNULIB_WMEMSET@ # if !@HAVE_WMEMSET@ _GL_FUNCDECL_SYS (wmemset, wchar_t *, (wchar_t *s, wchar_t c, size_t n)); # endif _GL_CXXALIAS_SYS (wmemset, wchar_t *, (wchar_t *s, wchar_t c, size_t n)); +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (wmemset); +# endif #elif defined GNULIB_POSIXCHECK # undef wmemset # if HAVE_RAW_DECL_WMEMSET @@ -575,7 +671,9 @@ _GL_FUNCDECL_SYS (wcslen, size_t, (const wchar_t *s) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (wcslen, size_t, (const wchar_t *s)); +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcslen); +# endif #elif defined GNULIB_POSIXCHECK # undef wcslen # if HAVE_RAW_DECL_WCSLEN @@ -605,10 +703,14 @@ /* Copy SRC to DEST. */ #if @GNULIB_WCSCPY@ # if !@HAVE_WCSCPY@ -_GL_FUNCDECL_SYS (wcscpy, wchar_t *, (wchar_t *dest, const wchar_t *src)); +_GL_FUNCDECL_SYS (wcscpy, wchar_t *, + (wchar_t *restrict dest, const wchar_t *restrict src)); # endif -_GL_CXXALIAS_SYS (wcscpy, wchar_t *, (wchar_t *dest, const wchar_t *src)); +_GL_CXXALIAS_SYS (wcscpy, wchar_t *, + (wchar_t *restrict dest, const wchar_t *restrict src)); +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcscpy); +# endif #elif defined GNULIB_POSIXCHECK # undef wcscpy # if HAVE_RAW_DECL_WCSCPY @@ -621,9 +723,11 @@ /* Copy SRC to DEST, returning the address of the terminating L'\0' in DEST. */ #if @GNULIB_WCPCPY@ # if !@HAVE_WCPCPY@ -_GL_FUNCDECL_SYS (wcpcpy, wchar_t *, (wchar_t *dest, const wchar_t *src)); +_GL_FUNCDECL_SYS (wcpcpy, wchar_t *, + (wchar_t *restrict dest, const wchar_t *restrict src)); # endif -_GL_CXXALIAS_SYS (wcpcpy, wchar_t *, (wchar_t *dest, const wchar_t *src)); +_GL_CXXALIAS_SYS (wcpcpy, wchar_t *, + (wchar_t *restrict dest, const wchar_t *restrict src)); _GL_CXXALIASWARN (wcpcpy); #elif defined GNULIB_POSIXCHECK # undef wcpcpy @@ -638,11 +742,15 @@ #if @GNULIB_WCSNCPY@ # if !@HAVE_WCSNCPY@ _GL_FUNCDECL_SYS (wcsncpy, wchar_t *, - (wchar_t *dest, const wchar_t *src, size_t n)); + (wchar_t *restrict dest, + const wchar_t *restrict src, size_t n)); # endif _GL_CXXALIAS_SYS (wcsncpy, wchar_t *, - (wchar_t *dest, const wchar_t *src, size_t n)); + (wchar_t *restrict dest, + const wchar_t *restrict src, size_t n)); +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcsncpy); +# endif #elif defined GNULIB_POSIXCHECK # undef wcsncpy # if HAVE_RAW_DECL_WCSNCPY @@ -657,10 +765,12 @@ #if @GNULIB_WCPNCPY@ # if !@HAVE_WCPNCPY@ _GL_FUNCDECL_SYS (wcpncpy, wchar_t *, - (wchar_t *dest, const wchar_t *src, size_t n)); + (wchar_t *restrict dest, + const wchar_t *restrict src, size_t n)); # endif _GL_CXXALIAS_SYS (wcpncpy, wchar_t *, - (wchar_t *dest, const wchar_t *src, size_t n)); + (wchar_t *restrict dest, + const wchar_t *restrict src, size_t n)); _GL_CXXALIASWARN (wcpncpy); #elif defined GNULIB_POSIXCHECK # undef wcpncpy @@ -674,10 +784,14 @@ /* Append SRC onto DEST. */ #if @GNULIB_WCSCAT@ # if !@HAVE_WCSCAT@ -_GL_FUNCDECL_SYS (wcscat, wchar_t *, (wchar_t *dest, const wchar_t *src)); +_GL_FUNCDECL_SYS (wcscat, wchar_t *, + (wchar_t *restrict dest, const wchar_t *restrict src)); # endif -_GL_CXXALIAS_SYS (wcscat, wchar_t *, (wchar_t *dest, const wchar_t *src)); +_GL_CXXALIAS_SYS (wcscat, wchar_t *, + (wchar_t *restrict dest, const wchar_t *restrict src)); +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcscat); +# endif #elif defined GNULIB_POSIXCHECK # undef wcscat # if HAVE_RAW_DECL_WCSCAT @@ -691,11 +805,15 @@ #if @GNULIB_WCSNCAT@ # if !@HAVE_WCSNCAT@ _GL_FUNCDECL_SYS (wcsncat, wchar_t *, - (wchar_t *dest, const wchar_t *src, size_t n)); + (wchar_t *restrict dest, const wchar_t *restrict src, + size_t n)); # endif _GL_CXXALIAS_SYS (wcsncat, wchar_t *, - (wchar_t *dest, const wchar_t *src, size_t n)); + (wchar_t *restrict dest, const wchar_t *restrict src, + size_t n)); +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcsncat); +# endif #elif defined GNULIB_POSIXCHECK # undef wcsncat # if HAVE_RAW_DECL_WCSNCAT @@ -712,7 +830,9 @@ _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (wcscmp, int, (const wchar_t *s1, const wchar_t *s2)); +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcscmp); +# endif #elif defined GNULIB_POSIXCHECK # undef wcscmp # if HAVE_RAW_DECL_WCSCMP @@ -731,7 +851,9 @@ # endif _GL_CXXALIAS_SYS (wcsncmp, int, (const wchar_t *s1, const wchar_t *s2, size_t n)); +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcsncmp); +# endif #elif defined GNULIB_POSIXCHECK # undef wcsncmp # if HAVE_RAW_DECL_WCSNCMP @@ -784,7 +906,9 @@ _GL_FUNCDECL_SYS (wcscoll, int, (const wchar_t *s1, const wchar_t *s2)); # endif _GL_CXXALIAS_SYS (wcscoll, int, (const wchar_t *s1, const wchar_t *s2)); +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcscoll); +# endif #elif defined GNULIB_POSIXCHECK # undef wcscoll # if HAVE_RAW_DECL_WCSCOLL @@ -799,10 +923,14 @@ original strings. */ #if @GNULIB_WCSXFRM@ # if !@HAVE_WCSXFRM@ -_GL_FUNCDECL_SYS (wcsxfrm, size_t, (wchar_t *s1, const wchar_t *s2, size_t n)); +_GL_FUNCDECL_SYS (wcsxfrm, size_t, + (wchar_t *restrict s1, const wchar_t *restrict s2, size_t n)); # endif -_GL_CXXALIAS_SYS (wcsxfrm, size_t, (wchar_t *s1, const wchar_t *s2, size_t n)); +_GL_CXXALIAS_SYS (wcsxfrm, size_t, + (wchar_t *restrict s1, const wchar_t *restrict s2, size_t n)); +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcsxfrm); +# endif #elif defined GNULIB_POSIXCHECK # undef wcsxfrm # if HAVE_RAW_DECL_WCSXFRM @@ -846,7 +974,7 @@ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (wcschr, wchar_t *, (wchar_t *wcs, wchar_t wc)); _GL_CXXALIASWARN1 (wcschr, const wchar_t *, (const wchar_t *wcs, wchar_t wc)); -# else +# elif __GLIBC__ >= 2 _GL_CXXALIASWARN (wcschr); # endif #elif defined GNULIB_POSIXCHECK @@ -876,7 +1004,7 @@ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (wcsrchr, wchar_t *, (wchar_t *wcs, wchar_t wc)); _GL_CXXALIASWARN1 (wcsrchr, const wchar_t *, (const wchar_t *wcs, wchar_t wc)); -# else +# elif __GLIBC__ >= 2 _GL_CXXALIASWARN (wcsrchr); # endif #elif defined GNULIB_POSIXCHECK @@ -896,7 +1024,9 @@ _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (wcscspn, size_t, (const wchar_t *wcs, const wchar_t *reject)); +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcscspn); +# endif #elif defined GNULIB_POSIXCHECK # undef wcscspn # if HAVE_RAW_DECL_WCSCSPN @@ -914,7 +1044,9 @@ _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (wcsspn, size_t, (const wchar_t *wcs, const wchar_t *accept)); +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcsspn); +# endif #elif defined GNULIB_POSIXCHECK # undef wcsspn # if HAVE_RAW_DECL_WCSSPN @@ -945,7 +1077,7 @@ (wchar_t *wcs, const wchar_t *accept)); _GL_CXXALIASWARN1 (wcspbrk, const wchar_t *, (const wchar_t *wcs, const wchar_t *accept)); -# else +# elif __GLIBC__ >= 2 _GL_CXXALIASWARN (wcspbrk); # endif #elif defined GNULIB_POSIXCHECK @@ -961,7 +1093,8 @@ #if @GNULIB_WCSSTR@ # if !@HAVE_WCSSTR@ _GL_FUNCDECL_SYS (wcsstr, wchar_t *, - (const wchar_t *haystack, const wchar_t *needle) + (const wchar_t *restrict haystack, + const wchar_t *restrict needle) _GL_ATTRIBUTE_PURE); # endif /* On some systems, this function is defined as an overloaded function: @@ -970,15 +1103,19 @@ wchar_t * std::wcsstr (wchar_t *, const wchar_t *); } */ _GL_CXXALIAS_SYS_CAST2 (wcsstr, - wchar_t *, (const wchar_t *, const wchar_t *), - const wchar_t *, (const wchar_t *, const wchar_t *)); + wchar_t *, + (const wchar_t *restrict, const wchar_t *restrict), + const wchar_t *, + (const wchar_t *restrict, const wchar_t *restrict)); # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (wcsstr, wchar_t *, - (wchar_t *haystack, const wchar_t *needle)); + (wchar_t *restrict haystack, + const wchar_t *restrict needle)); _GL_CXXALIASWARN1 (wcsstr, const wchar_t *, - (const wchar_t *haystack, const wchar_t *needle)); -# else + (const wchar_t *restrict haystack, + const wchar_t *restrict needle)); +# elif __GLIBC__ >= 2 _GL_CXXALIASWARN (wcsstr); # endif #elif defined GNULIB_POSIXCHECK @@ -992,13 +1129,30 @@ /* Divide WCS into tokens separated by characters in DELIM. */ #if @GNULIB_WCSTOK@ -# if !@HAVE_WCSTOK@ +# if @REPLACE_WCSTOK@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef wcstok +# define wcstok rpl_wcstok +# endif +_GL_FUNCDECL_RPL (wcstok, wchar_t *, + (wchar_t *restrict wcs, const wchar_t *restrict delim, + wchar_t **restrict ptr)); +_GL_CXXALIAS_RPL (wcstok, wchar_t *, + (wchar_t *restrict wcs, const wchar_t *restrict delim, + wchar_t **restrict ptr)); +# else +# if !@HAVE_WCSTOK@ _GL_FUNCDECL_SYS (wcstok, wchar_t *, - (wchar_t *wcs, const wchar_t *delim, wchar_t **ptr)); -# endif + (wchar_t *restrict wcs, const wchar_t *restrict delim, + wchar_t **restrict ptr)); +# endif _GL_CXXALIAS_SYS (wcstok, wchar_t *, - (wchar_t *wcs, const wchar_t *delim, wchar_t **ptr)); + (wchar_t *restrict wcs, const wchar_t *restrict delim, + wchar_t **restrict ptr)); +# endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcstok); +# endif #elif defined GNULIB_POSIXCHECK # undef wcstok # if HAVE_RAW_DECL_WCSTOK @@ -1026,7 +1180,9 @@ # endif _GL_CXXALIAS_SYS (wcswidth, int, (const wchar_t *s, size_t n)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcswidth); +# endif #elif defined GNULIB_POSIXCHECK # undef wcswidth # if HAVE_RAW_DECL_WCSWIDTH @@ -1035,6 +1191,48 @@ # endif #endif + +/* Convert *TP to a date and time wide string. See + <https://pubs.opengroup.org/onlinepubs/9699919799/functions/wcsftime.html>. */ +#if @GNULIB_WCSFTIME@ +# if @REPLACE_WCSFTIME@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef wcsftime +# define wcsftime rpl_wcsftime +# endif +_GL_FUNCDECL_RPL (wcsftime, size_t, + (wchar_t *restrict __buf, size_t __bufsize, + const wchar_t *restrict __fmt, + const struct tm *restrict __tp) + _GL_ARG_NONNULL ((1, 3, 4))); +_GL_CXXALIAS_RPL (wcsftime, size_t, + (wchar_t *restrict __buf, size_t __bufsize, + const wchar_t *restrict __fmt, + const struct tm *restrict __tp)); +# else +# if !@HAVE_WCSFTIME@ +_GL_FUNCDECL_SYS (wcsftime, size_t, + (wchar_t *restrict __buf, size_t __bufsize, + const wchar_t *restrict __fmt, + const struct tm *restrict __tp) + _GL_ARG_NONNULL ((1, 3, 4))); +# endif +_GL_CXXALIAS_SYS (wcsftime, size_t, + (wchar_t *restrict __buf, size_t __bufsize, + const wchar_t *restrict __fmt, + const struct tm *restrict __tp)); +# endif +# if __GLIBC__ >= 2 +_GL_CXXALIASWARN (wcsftime); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wcsftime +# if HAVE_RAW_DECL_WCSFTIME +_GL_WARN_ON_USE (wcsftime, "wcsftime is unportable - " + "use gnulib module wcsftime for portability"); +# endif +#endif + #endif /* _@GUARD_PREFIX@_WCHAR_H */ #endif /* _@GUARD_PREFIX@_WCHAR_H */ diff -Nru gdb-9.1/gnulib/import/wctype.in.h gdb-10.2/gnulib/import/wctype.in.h --- gdb-9.1/gnulib/import/wctype.in.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/import/wctype.in.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* A substitute for ISO C99 <wctype.h>, for platforms that lack it. - Copyright (C) 2006-2016 Free Software Foundation, Inc. + Copyright (C) 2006-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -13,13 +13,13 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, see <http://www.gnu.org/licenses/>. */ + along with this program; if not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible and Paul Eggert. */ /* * ISO C 99 <wctype.h> for platforms that lack it. - * <http://www.opengroup.org/susv3xbd/wctype.h.html> + * <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/wctype.h.html> * * iswctype, towctrans, towlower, towupper, wctrans, wctype, * wctrans_t, and wctype_t are not yet implemented. @@ -56,11 +56,13 @@ # include <wchar.h> #endif -/* mingw has declarations of towupper and towlower in <ctype.h> as - well <wctype.h>. Include <ctype.h> in advance to avoid rpl_ prefix - being added to the declarations. */ -#ifdef __MINGW32__ +/* Native Windows (mingw, MSVC) have declarations of towupper, towlower, and + isw* functions in <ctype.h>, <wchar.h> as well as in <wctype.h>. Include + <ctype.h>, <wchar.h> in advance to avoid rpl_ prefix being added to the + declarations. */ +#if defined _WIN32 && ! defined __CYGWIN__ # include <ctype.h> +# include <wchar.h> #endif /* Include the original <wctype.h> if it exists. @@ -105,12 +107,16 @@ # define WEOF -1 # endif #else -/* MSVC defines wint_t as 'unsigned short' in <crtdefs.h>. - This is too small: ISO C 99 section 7.24.1.(2) says that wint_t must be - "unchanged by default argument promotions". Override it. */ -# if defined _MSC_VER +/* mingw and MSVC define wint_t as 'unsigned short' in <crtdefs.h> or + <stddef.h>. This is too small: ISO C 99 section 7.24.1.(2) says that + wint_t must be "unchanged by default argument promotions". Override it. */ +# if @GNULIB_OVERRIDES_WINT_T@ # if !GNULIB_defined_wint_t -# include <crtdefs.h> +# if @HAVE_CRTDEFS_H@ +# include <crtdefs.h> +# else +# include <stddef.h> +# endif typedef unsigned int rpl_wint_t; # undef wint_t # define wint_t rpl_wint_t @@ -127,33 +133,116 @@ /* FreeBSD 4.4 to 4.11 has <wctype.h> but lacks the functions. Linux libc5 has <wctype.h> and the functions but they are broken. + mingw and MSVC have <wctype.h> and the functions but they take a wchar_t + as argument, not an rpl_wint_t. Assume all 11 functions (all isw* except iswblank) are implemented the same way, or not at all. */ # if ! @HAVE_ISWCNTRL@ || @REPLACE_ISWCNTRL@ -/* IRIX 5.3 has macros but no functions, its isw* macros refer to an - undefined variable _ctmp_ and to <ctype.h> macros like _P, and they - refer to system functions like _iswctype that are not in the - standard C library. Rather than try to get ancient buggy - implementations like this to work, just disable them. */ -# undef iswalnum -# undef iswalpha -# undef iswblank -# undef iswcntrl -# undef iswdigit -# undef iswgraph -# undef iswlower -# undef iswprint -# undef iswpunct -# undef iswspace -# undef iswupper -# undef iswxdigit -# undef towlower -# undef towupper +# if @GNULIB_OVERRIDES_WINT_T@ /* implies @REPLACE_ISWCNTRL@ */ + +_GL_WCTYPE_INLINE int +rpl_iswalnum (wint_t wc) +{ + return ((wchar_t) wc == wc ? iswalnum ((wchar_t) wc) : 0); +} + +_GL_WCTYPE_INLINE int +rpl_iswalpha (wint_t wc) +{ + return ((wchar_t) wc == wc ? iswalpha ((wchar_t) wc) : 0); +} + +_GL_WCTYPE_INLINE int +rpl_iswblank (wint_t wc) +{ + return ((wchar_t) wc == wc ? iswblank ((wchar_t) wc) : 0); +} + +_GL_WCTYPE_INLINE int +rpl_iswcntrl (wint_t wc) +{ + return ((wchar_t) wc == wc ? iswcntrl ((wchar_t) wc) : 0); +} + +_GL_WCTYPE_INLINE int +rpl_iswdigit (wint_t wc) +{ + return ((wchar_t) wc == wc ? wc >= '0' && wc <= '9' : 0); +} + +_GL_WCTYPE_INLINE int +rpl_iswgraph (wint_t wc) +{ + return ((wchar_t) wc == wc ? iswgraph ((wchar_t) wc) : 0); +} + +_GL_WCTYPE_INLINE int +rpl_iswlower (wint_t wc) +{ + return ((wchar_t) wc == wc ? iswlower ((wchar_t) wc) : 0); +} + +_GL_WCTYPE_INLINE int +rpl_iswprint (wint_t wc) +{ + return ((wchar_t) wc == wc ? iswprint ((wchar_t) wc) : 0); +} + +_GL_WCTYPE_INLINE int +rpl_iswpunct (wint_t wc) +{ + return ((wchar_t) wc == wc ? iswpunct ((wchar_t) wc) : 0); +} + +_GL_WCTYPE_INLINE int +rpl_iswspace (wint_t wc) +{ + return ((wchar_t) wc == wc ? iswspace ((wchar_t) wc) : 0); +} + +_GL_WCTYPE_INLINE int +rpl_iswupper (wint_t wc) +{ + return ((wchar_t) wc == wc ? iswupper ((wchar_t) wc) : 0); +} + +_GL_WCTYPE_INLINE int +rpl_iswxdigit (wint_t wc) +{ + return ((wchar_t) wc == wc + ? (wc >= '0' && wc <= '9') + || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'F') + : 0); +} + +_GL_WCTYPE_INLINE wint_t +rpl_towlower (wint_t wc) +{ + return ((wchar_t) wc == wc ? (wchar_t) towlower ((wchar_t) wc) : wc); +} + +_GL_WCTYPE_INLINE wint_t +rpl_towupper (wint_t wc) +{ + return ((wchar_t) wc == wc ? (wchar_t) towupper ((wchar_t) wc) : wc); +} -/* Linux libc5 has <wctype.h> and the functions but they are broken. */ -# if @REPLACE_ISWCNTRL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef iswalnum +# undef iswalpha +# undef iswblank +# undef iswcntrl +# undef iswdigit +# undef iswgraph +# undef iswlower +# undef iswprint +# undef iswpunct +# undef iswspace +# undef iswupper +# undef iswxdigit +# undef towlower +# undef towupper # define iswalnum rpl_iswalnum # define iswalpha rpl_iswalpha # define iswblank rpl_iswblank @@ -166,21 +255,62 @@ # define iswspace rpl_iswspace # define iswupper rpl_iswupper # define iswxdigit rpl_iswxdigit -# endif -# endif -# if @REPLACE_TOWLOWER@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define towlower rpl_towlower # define towupper rpl_towupper # endif -# endif + +# else + +/* IRIX 5.3 has macros but no functions, its isw* macros refer to an + undefined variable _ctmp_ and to <ctype.h> macros like _P, and they + refer to system functions like _iswctype that are not in the + standard C library. Rather than try to get ancient buggy + implementations like this to work, just disable them. */ +# undef iswalnum +# undef iswalpha +# undef iswblank +# undef iswcntrl +# undef iswdigit +# undef iswgraph +# undef iswlower +# undef iswprint +# undef iswpunct +# undef iswspace +# undef iswupper +# undef iswxdigit +# undef towlower +# undef towupper + +/* Linux libc5 has <wctype.h> and the functions but they are broken. */ +# if @REPLACE_ISWCNTRL@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define iswalnum rpl_iswalnum +# define iswalpha rpl_iswalpha +# define iswblank rpl_iswblank +# define iswcntrl rpl_iswcntrl +# define iswdigit rpl_iswdigit +# define iswgraph rpl_iswgraph +# define iswlower rpl_iswlower +# define iswprint rpl_iswprint +# define iswpunct rpl_iswpunct +# define iswspace rpl_iswspace +# define iswupper rpl_iswupper +# define iswxdigit rpl_iswxdigit +# endif +# endif +# if @REPLACE_TOWLOWER@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define towlower rpl_towlower +# define towupper rpl_towupper +# endif +# endif _GL_WCTYPE_INLINE int -# if @REPLACE_ISWCNTRL@ +# if @REPLACE_ISWCNTRL@ rpl_iswalnum -# else +# else iswalnum -# endif +# endif (wint_t wc) { return ((wc >= '0' && wc <= '9') @@ -188,88 +318,88 @@ } _GL_WCTYPE_INLINE int -# if @REPLACE_ISWCNTRL@ +# if @REPLACE_ISWCNTRL@ rpl_iswalpha -# else +# else iswalpha -# endif +# endif (wint_t wc) { return (wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z'; } _GL_WCTYPE_INLINE int -# if @REPLACE_ISWCNTRL@ +# if @REPLACE_ISWCNTRL@ rpl_iswblank -# else +# else iswblank -# endif +# endif (wint_t wc) { return wc == ' ' || wc == '\t'; } _GL_WCTYPE_INLINE int -# if @REPLACE_ISWCNTRL@ +# if @REPLACE_ISWCNTRL@ rpl_iswcntrl -# else +# else iswcntrl -# endif +# endif (wint_t wc) { return (wc & ~0x1f) == 0 || wc == 0x7f; } _GL_WCTYPE_INLINE int -# if @REPLACE_ISWCNTRL@ +# if @REPLACE_ISWDIGIT@ rpl_iswdigit -# else +# else iswdigit -# endif +# endif (wint_t wc) { return wc >= '0' && wc <= '9'; } _GL_WCTYPE_INLINE int -# if @REPLACE_ISWCNTRL@ +# if @REPLACE_ISWCNTRL@ rpl_iswgraph -# else +# else iswgraph -# endif +# endif (wint_t wc) { return wc >= '!' && wc <= '~'; } _GL_WCTYPE_INLINE int -# if @REPLACE_ISWCNTRL@ +# if @REPLACE_ISWCNTRL@ rpl_iswlower -# else +# else iswlower -# endif +# endif (wint_t wc) { return wc >= 'a' && wc <= 'z'; } _GL_WCTYPE_INLINE int -# if @REPLACE_ISWCNTRL@ +# if @REPLACE_ISWCNTRL@ rpl_iswprint -# else +# else iswprint -# endif +# endif (wint_t wc) { return wc >= ' ' && wc <= '~'; } _GL_WCTYPE_INLINE int -# if @REPLACE_ISWCNTRL@ +# if @REPLACE_ISWCNTRL@ rpl_iswpunct -# else +# else iswpunct -# endif +# endif (wint_t wc) { return (wc >= '!' && wc <= '~' @@ -278,11 +408,11 @@ } _GL_WCTYPE_INLINE int -# if @REPLACE_ISWCNTRL@ +# if @REPLACE_ISWCNTRL@ rpl_iswspace -# else +# else iswspace -# endif +# endif (wint_t wc) { return (wc == ' ' || wc == '\t' @@ -290,22 +420,22 @@ } _GL_WCTYPE_INLINE int -# if @REPLACE_ISWCNTRL@ +# if @REPLACE_ISWCNTRL@ rpl_iswupper -# else +# else iswupper -# endif +# endif (wint_t wc) { return wc >= 'A' && wc <= 'Z'; } _GL_WCTYPE_INLINE int -# if @REPLACE_ISWCNTRL@ +# if @REPLACE_ISWXDIGIT@ rpl_iswxdigit -# else +# else iswxdigit -# endif +# endif (wint_t wc) { return ((wc >= '0' && wc <= '9') @@ -313,42 +443,67 @@ } _GL_WCTYPE_INLINE wint_t -# if @REPLACE_TOWLOWER@ +# if @REPLACE_TOWLOWER@ rpl_towlower -# else +# else towlower -# endif +# endif (wint_t wc) { return (wc >= 'A' && wc <= 'Z' ? wc - 'A' + 'a' : wc); } _GL_WCTYPE_INLINE wint_t -# if @REPLACE_TOWLOWER@ +# if @REPLACE_TOWLOWER@ rpl_towupper -# else +# else towupper -# endif +# endif (wint_t wc) { return (wc >= 'a' && wc <= 'z' ? wc - 'a' + 'A' : wc); } -# elif @GNULIB_ISWBLANK@ && (! @HAVE_ISWBLANK@ || @REPLACE_ISWBLANK@) -/* Only the iswblank function is missing. */ +# endif -# if @REPLACE_ISWBLANK@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define iswblank rpl_iswblank -# endif +# else +/* Only some of the functions are missing or broken. */ + +# if @GNULIB_ISWBLANK@ && (! @HAVE_ISWBLANK@ || @REPLACE_ISWBLANK@) +/* Only the iswblank function is missing. */ +# if @REPLACE_ISWBLANK@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define iswblank rpl_iswblank +# endif _GL_FUNCDECL_RPL (iswblank, int, (wint_t wc)); -# else +# else _GL_FUNCDECL_SYS (iswblank, int, (wint_t wc)); +# endif +# endif + +# if @GNULIB_ISWDIGIT@ +# if @REPLACE_ISWDIGIT@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef iswdigit +# define iswdigit rpl_iswdigit +# endif +_GL_FUNCDECL_RPL (iswdigit, int, (wint_t wc)); +# endif +# endif + +# if @GNULIB_ISWXDIGIT@ +# if @REPLACE_ISWXDIGIT@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef iswxdigit +# define iswxdigit rpl_iswxdigit +# endif +_GL_FUNCDECL_RPL (iswxdigit, int, (wint_t wc)); +# endif # endif # endif -# if defined __MINGW32__ +# if defined __MINGW32__ && !@GNULIB_OVERRIDES_WINT_T@ /* On native Windows, wchar_t is uint16_t, and wint_t is uint32_t. The functions towlower and towupper are implemented in the MSVCRT library @@ -381,36 +536,71 @@ # define towupper rpl_towupper # endif -# endif /* __MINGW32__ */ +# endif /* __MINGW32__ && !@GNULIB_OVERRIDES_WINT_T@ */ # define GNULIB_defined_wctype_functions 1 #endif #if @REPLACE_ISWCNTRL@ _GL_CXXALIAS_RPL (iswalnum, int, (wint_t wc)); -_GL_CXXALIAS_RPL (iswalpha, int, (wint_t wc)); -_GL_CXXALIAS_RPL (iswcntrl, int, (wint_t wc)); -_GL_CXXALIAS_RPL (iswdigit, int, (wint_t wc)); -_GL_CXXALIAS_RPL (iswgraph, int, (wint_t wc)); -_GL_CXXALIAS_RPL (iswlower, int, (wint_t wc)); -_GL_CXXALIAS_RPL (iswprint, int, (wint_t wc)); -_GL_CXXALIAS_RPL (iswpunct, int, (wint_t wc)); -_GL_CXXALIAS_RPL (iswspace, int, (wint_t wc)); -_GL_CXXALIAS_RPL (iswupper, int, (wint_t wc)); -_GL_CXXALIAS_RPL (iswxdigit, int, (wint_t wc)); #else _GL_CXXALIAS_SYS (iswalnum, int, (wint_t wc)); +#endif +#if @REPLACE_ISWCNTRL@ +_GL_CXXALIAS_RPL (iswalpha, int, (wint_t wc)); +#else _GL_CXXALIAS_SYS (iswalpha, int, (wint_t wc)); +#endif +#if @REPLACE_ISWCNTRL@ +_GL_CXXALIAS_RPL (iswcntrl, int, (wint_t wc)); +#else _GL_CXXALIAS_SYS (iswcntrl, int, (wint_t wc)); +#endif +#if @GNULIB_ISWDIGIT@ +# if @REPLACE_ISWDIGIT@ +_GL_CXXALIAS_RPL (iswdigit, int, (wint_t wc)); +# else _GL_CXXALIAS_SYS (iswdigit, int, (wint_t wc)); +# endif +#endif +#if @REPLACE_ISWCNTRL@ +_GL_CXXALIAS_RPL (iswgraph, int, (wint_t wc)); +#else _GL_CXXALIAS_SYS (iswgraph, int, (wint_t wc)); +#endif +#if @REPLACE_ISWCNTRL@ +_GL_CXXALIAS_RPL (iswlower, int, (wint_t wc)); +#else _GL_CXXALIAS_SYS (iswlower, int, (wint_t wc)); +#endif +#if @REPLACE_ISWCNTRL@ +_GL_CXXALIAS_RPL (iswprint, int, (wint_t wc)); +#else _GL_CXXALIAS_SYS (iswprint, int, (wint_t wc)); +#endif +#if @REPLACE_ISWCNTRL@ +_GL_CXXALIAS_RPL (iswpunct, int, (wint_t wc)); +#else _GL_CXXALIAS_SYS (iswpunct, int, (wint_t wc)); +#endif +#if @REPLACE_ISWCNTRL@ +_GL_CXXALIAS_RPL (iswspace, int, (wint_t wc)); +#else _GL_CXXALIAS_SYS (iswspace, int, (wint_t wc)); +#endif +#if @REPLACE_ISWCNTRL@ +_GL_CXXALIAS_RPL (iswupper, int, (wint_t wc)); +#else _GL_CXXALIAS_SYS (iswupper, int, (wint_t wc)); +#endif +#if @GNULIB_ISWXDIGIT@ +# if @REPLACE_ISWXDIGIT@ +_GL_CXXALIAS_RPL (iswxdigit, int, (wint_t wc)); +# else _GL_CXXALIAS_SYS (iswxdigit, int, (wint_t wc)); +# endif #endif +#if __GLIBC__ >= 2 _GL_CXXALIASWARN (iswalnum); _GL_CXXALIASWARN (iswalpha); _GL_CXXALIASWARN (iswcntrl); @@ -422,6 +612,7 @@ _GL_CXXALIASWARN (iswspace); _GL_CXXALIASWARN (iswupper); _GL_CXXALIASWARN (iswxdigit); +#endif #if @GNULIB_ISWBLANK@ # if @REPLACE_ISWCNTRL@ || @REPLACE_ISWBLANK@ @@ -429,7 +620,9 @@ # else _GL_CXXALIAS_SYS (iswblank, int, (wint_t wc)); # endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (iswblank); +# endif #endif #if !@HAVE_WCTYPE_T@ @@ -445,7 +638,9 @@ _GL_FUNCDECL_SYS (wctype, wctype_t, (const char *name)); # endif _GL_CXXALIAS_SYS (wctype, wctype_t, (const char *name)); +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (wctype); +# endif #elif defined GNULIB_POSIXCHECK # undef wctype # if HAVE_RAW_DECL_WCTYPE @@ -458,11 +653,22 @@ The argument WC must be either a wchar_t value or WEOF. The argument DESC must have been returned by the wctype() function. */ #if @GNULIB_ISWCTYPE@ -# if !@HAVE_WCTYPE_T@ +# if @GNULIB_OVERRIDES_WINT_T@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef iswctype +# define iswctype rpl_iswctype +# endif +_GL_FUNCDECL_RPL (iswctype, int, (wint_t wc, wctype_t desc)); +_GL_CXXALIAS_RPL (iswctype, int, (wint_t wc, wctype_t desc)); +# else +# if !@HAVE_WCTYPE_T@ _GL_FUNCDECL_SYS (iswctype, int, (wint_t wc, wctype_t desc)); -# endif +# endif _GL_CXXALIAS_SYS (iswctype, int, (wint_t wc, wctype_t desc)); +# endif +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (iswctype); +# endif #elif defined GNULIB_POSIXCHECK # undef iswctype # if HAVE_RAW_DECL_ISWCTYPE @@ -478,8 +684,10 @@ _GL_CXXALIAS_SYS (towlower, wint_t, (wint_t wc)); _GL_CXXALIAS_SYS (towupper, wint_t, (wint_t wc)); #endif +#if __GLIBC__ >= 2 _GL_CXXALIASWARN (towlower); _GL_CXXALIASWARN (towupper); +#endif #if !@HAVE_WCTRANS_T@ # if !GNULIB_defined_wctrans_t @@ -494,7 +702,9 @@ _GL_FUNCDECL_SYS (wctrans, wctrans_t, (const char *name)); # endif _GL_CXXALIAS_SYS (wctrans, wctrans_t, (const char *name)); +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (wctrans); +# endif #elif defined GNULIB_POSIXCHECK # undef wctrans # if HAVE_RAW_DECL_WCTRANS @@ -511,7 +721,9 @@ _GL_FUNCDECL_SYS (towctrans, wint_t, (wint_t wc, wctrans_t desc)); # endif _GL_CXXALIAS_SYS (towctrans, wint_t, (wint_t wc, wctrans_t desc)); +# if __GLIBC__ >= 2 _GL_CXXALIASWARN (towctrans); +# endif #elif defined GNULIB_POSIXCHECK # undef towctrans # if HAVE_RAW_DECL_TOWCTRANS diff -Nru gdb-9.1/gnulib/import/windows-initguard.h gdb-10.2/gnulib/import/windows-initguard.h --- gdb-9.1/gnulib/import/windows-initguard.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/windows-initguard.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,35 @@ +/* Init guards, somewhat like spinlocks (native Windows implementation). + Copyright (C) 2005-2020 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2005. + Based on GCC's gthr-win32.h. */ + +#ifndef _WINDOWS_INITGUARD_H +#define _WINDOWS_INITGUARD_H + +#define WIN32_LEAN_AND_MEAN /* avoid including junk */ +#include <windows.h> + +typedef struct + { + volatile int done; + volatile LONG started; + } + glwthread_initguard_t; + +#define GLWTHREAD_INITGUARD_INIT { 0, -1 } + +#endif /* _WINDOWS_INITGUARD_H */ diff -Nru gdb-9.1/gnulib/import/windows-mutex.c gdb-10.2/gnulib/import/windows-mutex.c --- gdb-9.1/gnulib/import/windows-mutex.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/windows-mutex.c 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,95 @@ +/* Plain mutexes (native Windows implementation). + Copyright (C) 2005-2020 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2005. + Based on GCC's gthr-win32.h. */ + +#include <config.h> + +/* Specification. */ +#include "windows-mutex.h" + +#include <errno.h> + +void +glwthread_mutex_init (glwthread_mutex_t *mutex) +{ + InitializeCriticalSection (&mutex->lock); + mutex->guard.done = 1; +} + +int +glwthread_mutex_lock (glwthread_mutex_t *mutex) +{ + if (!mutex->guard.done) + { + if (InterlockedIncrement (&mutex->guard.started) == 0) + /* This thread is the first one to need this mutex. Initialize it. */ + glwthread_mutex_init (mutex); + else + { + /* Don't let mutex->guard.started grow and wrap around. */ + InterlockedDecrement (&mutex->guard.started); + /* Yield the CPU while waiting for another thread to finish + initializing this mutex. */ + while (!mutex->guard.done) + Sleep (0); + } + } + EnterCriticalSection (&mutex->lock); + return 0; +} + +int +glwthread_mutex_trylock (glwthread_mutex_t *mutex) +{ + if (!mutex->guard.done) + { + if (InterlockedIncrement (&mutex->guard.started) == 0) + /* This thread is the first one to need this mutex. Initialize it. */ + glwthread_mutex_init (mutex); + else + { + /* Don't let mutex->guard.started grow and wrap around. */ + InterlockedDecrement (&mutex->guard.started); + /* Let another thread finish initializing this mutex, and let it also + lock this mutex. */ + return EBUSY; + } + } + if (!TryEnterCriticalSection (&mutex->lock)) + return EBUSY; + return 0; +} + +int +glwthread_mutex_unlock (glwthread_mutex_t *mutex) +{ + if (!mutex->guard.done) + return EINVAL; + LeaveCriticalSection (&mutex->lock); + return 0; +} + +int +glwthread_mutex_destroy (glwthread_mutex_t *mutex) +{ + if (!mutex->guard.done) + return EINVAL; + DeleteCriticalSection (&mutex->lock); + mutex->guard.done = 0; + return 0; +} diff -Nru gdb-9.1/gnulib/import/windows-mutex.h gdb-10.2/gnulib/import/windows-mutex.h --- gdb-9.1/gnulib/import/windows-mutex.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/windows-mutex.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,51 @@ +/* Plain mutexes (native Windows implementation). + Copyright (C) 2005-2020 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2005. + Based on GCC's gthr-win32.h. */ + +#ifndef _WINDOWS_MUTEX_H +#define _WINDOWS_MUTEX_H + +#define WIN32_LEAN_AND_MEAN /* avoid including junk */ +#include <windows.h> + +#include "windows-initguard.h" + +typedef struct + { + glwthread_initguard_t guard; /* protects the initialization */ + CRITICAL_SECTION lock; + } + glwthread_mutex_t; + +#define GLWTHREAD_MUTEX_INIT { GLWTHREAD_INITGUARD_INIT } + +#ifdef __cplusplus +extern "C" { +#endif + +extern void glwthread_mutex_init (glwthread_mutex_t *mutex); +extern int glwthread_mutex_lock (glwthread_mutex_t *mutex); +extern int glwthread_mutex_trylock (glwthread_mutex_t *mutex); +extern int glwthread_mutex_unlock (glwthread_mutex_t *mutex); +extern int glwthread_mutex_destroy (glwthread_mutex_t *mutex); + +#ifdef __cplusplus +} +#endif + +#endif /* _WINDOWS_MUTEX_H */ diff -Nru gdb-9.1/gnulib/import/windows-once.c gdb-10.2/gnulib/import/windows-once.c --- gdb-9.1/gnulib/import/windows-once.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/windows-once.c 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,62 @@ +/* Once-only control (native Windows implementation). + Copyright (C) 2005-2020 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2005. + Based on GCC's gthr-win32.h. */ + +#include <config.h> + +/* Specification. */ +#include "windows-once.h" + +#include <stdlib.h> + +void +glwthread_once (glwthread_once_t *once_control, void (*initfunction) (void)) +{ + if (once_control->inited <= 0) + { + if (InterlockedIncrement (&once_control->started) == 0) + { + /* This thread is the first one to come to this once_control. */ + InitializeCriticalSection (&once_control->lock); + EnterCriticalSection (&once_control->lock); + once_control->inited = 0; + initfunction (); + once_control->inited = 1; + LeaveCriticalSection (&once_control->lock); + } + else + { + /* Don't let once_control->started grow and wrap around. */ + InterlockedDecrement (&once_control->started); + /* Some other thread has already started the initialization. + Yield the CPU while waiting for the other thread to finish + initializing and taking the lock. */ + while (once_control->inited < 0) + Sleep (0); + if (once_control->inited <= 0) + { + /* Take the lock. This blocks until the other thread has + finished calling the initfunction. */ + EnterCriticalSection (&once_control->lock); + LeaveCriticalSection (&once_control->lock); + if (!(once_control->inited > 0)) + abort (); + } + } + } +} diff -Nru gdb-9.1/gnulib/import/windows-once.h gdb-10.2/gnulib/import/windows-once.h --- gdb-9.1/gnulib/import/windows-once.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/windows-once.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,47 @@ +/* Once-only control (native Windows implementation). + Copyright (C) 2005-2020 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2005. + Based on GCC's gthr-win32.h. */ + +#ifndef _WINDOWS_ONCE_H +#define _WINDOWS_ONCE_H + +#define WIN32_LEAN_AND_MEAN /* avoid including junk */ +#include <windows.h> + +typedef struct + { + volatile int inited; + volatile LONG started; + CRITICAL_SECTION lock; + } + glwthread_once_t; + +#define GLWTHREAD_ONCE_INIT { -1, -1 } + +#ifdef __cplusplus +extern "C" { +#endif + +extern void glwthread_once (glwthread_once_t *once_control, + void (*initfunction) (void)); + +#ifdef __cplusplus +} +#endif + +#endif /* _WINDOWS_ONCE_H */ diff -Nru gdb-9.1/gnulib/import/windows-recmutex.c gdb-10.2/gnulib/import/windows-recmutex.c --- gdb-9.1/gnulib/import/windows-recmutex.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/windows-recmutex.c 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,127 @@ +/* Plain recursive mutexes (native Windows implementation). + Copyright (C) 2005-2020 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2005. + Based on GCC's gthr-win32.h. */ + +#include <config.h> + +/* Specification. */ +#include "windows-recmutex.h" + +#include <errno.h> + +void +glwthread_recmutex_init (glwthread_recmutex_t *mutex) +{ + mutex->owner = 0; + mutex->depth = 0; + InitializeCriticalSection (&mutex->lock); + mutex->guard.done = 1; +} + +int +glwthread_recmutex_lock (glwthread_recmutex_t *mutex) +{ + if (!mutex->guard.done) + { + if (InterlockedIncrement (&mutex->guard.started) == 0) + /* This thread is the first one to need this mutex. Initialize it. */ + glwthread_recmutex_init (mutex); + else + { + /* Don't let mutex->guard.started grow and wrap around. */ + InterlockedDecrement (&mutex->guard.started); + /* Yield the CPU while waiting for another thread to finish + initializing this mutex. */ + while (!mutex->guard.done) + Sleep (0); + } + } + { + DWORD self = GetCurrentThreadId (); + if (mutex->owner != self) + { + EnterCriticalSection (&mutex->lock); + mutex->owner = self; + } + if (++(mutex->depth) == 0) /* wraparound? */ + { + mutex->depth--; + return EAGAIN; + } + } + return 0; +} + +int +glwthread_recmutex_trylock (glwthread_recmutex_t *mutex) +{ + if (!mutex->guard.done) + { + if (InterlockedIncrement (&mutex->guard.started) == 0) + /* This thread is the first one to need this mutex. Initialize it. */ + glwthread_recmutex_init (mutex); + else + { + /* Don't let mutex->guard.started grow and wrap around. */ + InterlockedDecrement (&mutex->guard.started); + /* Let another thread finish initializing this mutex, and let it also + lock this mutex. */ + return EBUSY; + } + } + { + DWORD self = GetCurrentThreadId (); + if (mutex->owner != self) + { + if (!TryEnterCriticalSection (&mutex->lock)) + return EBUSY; + mutex->owner = self; + } + if (++(mutex->depth) == 0) /* wraparound? */ + { + mutex->depth--; + return EAGAIN; + } + } + return 0; +} + +int +glwthread_recmutex_unlock (glwthread_recmutex_t *mutex) +{ + if (mutex->owner != GetCurrentThreadId ()) + return EPERM; + if (mutex->depth == 0) + return EINVAL; + if (--(mutex->depth) == 0) + { + mutex->owner = 0; + LeaveCriticalSection (&mutex->lock); + } + return 0; +} + +int +glwthread_recmutex_destroy (glwthread_recmutex_t *mutex) +{ + if (mutex->owner != 0) + return EBUSY; + DeleteCriticalSection (&mutex->lock); + mutex->guard.done = 0; + return 0; +} diff -Nru gdb-9.1/gnulib/import/windows-recmutex.h gdb-10.2/gnulib/import/windows-recmutex.h --- gdb-9.1/gnulib/import/windows-recmutex.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/windows-recmutex.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,57 @@ +/* Plain recursive mutexes (native Windows implementation). + Copyright (C) 2005-2020 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2005. + Based on GCC's gthr-win32.h. */ + +#ifndef _WINDOWS_RECMUTEX_H +#define _WINDOWS_RECMUTEX_H + +#define WIN32_LEAN_AND_MEAN /* avoid including junk */ +#include <windows.h> + +#include "windows-initguard.h" + +/* The native Windows documentation says that CRITICAL_SECTION already + implements a recursive lock. But we need not rely on it: It's easy to + implement a recursive lock without this assumption. */ + +typedef struct + { + glwthread_initguard_t guard; /* protects the initialization */ + DWORD owner; + unsigned long depth; + CRITICAL_SECTION lock; + } + glwthread_recmutex_t; + +#define GLWTHREAD_RECMUTEX_INIT { GLWTHREAD_INITGUARD_INIT, 0, 0 } + +#ifdef __cplusplus +extern "C" { +#endif + +extern void glwthread_recmutex_init (glwthread_recmutex_t *mutex); +extern int glwthread_recmutex_lock (glwthread_recmutex_t *mutex); +extern int glwthread_recmutex_trylock (glwthread_recmutex_t *mutex); +extern int glwthread_recmutex_unlock (glwthread_recmutex_t *mutex); +extern int glwthread_recmutex_destroy (glwthread_recmutex_t *mutex); + +#ifdef __cplusplus +} +#endif + +#endif /* _WINDOWS_RECMUTEX_H */ diff -Nru gdb-9.1/gnulib/import/windows-rwlock.c gdb-10.2/gnulib/import/windows-rwlock.c --- gdb-9.1/gnulib/import/windows-rwlock.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/windows-rwlock.c 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,377 @@ +/* Read-write locks (native Windows implementation). + Copyright (C) 2005-2020 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2005. + Based on GCC's gthr-win32.h. */ + +#include <config.h> + +/* Specification. */ +#include "windows-rwlock.h" + +#include <errno.h> +#include <stdlib.h> + +/* Don't assume that UNICODE is not defined. */ +#undef CreateEvent +#define CreateEvent CreateEventA + +/* In this file, the waitqueues are implemented as circular arrays. */ +#define glwthread_waitqueue_t glwthread_carray_waitqueue_t + +static void +glwthread_waitqueue_init (glwthread_waitqueue_t *wq) +{ + wq->array = NULL; + wq->count = 0; + wq->alloc = 0; + wq->offset = 0; +} + +/* Enqueues the current thread, represented by an event, in a wait queue. + Returns INVALID_HANDLE_VALUE if an allocation failure occurs. */ +static HANDLE +glwthread_waitqueue_add (glwthread_waitqueue_t *wq) +{ + HANDLE event; + unsigned int index; + + if (wq->count == wq->alloc) + { + unsigned int new_alloc = 2 * wq->alloc + 1; + HANDLE *new_array = + (HANDLE *) realloc (wq->array, new_alloc * sizeof (HANDLE)); + if (new_array == NULL) + /* No more memory. */ + return INVALID_HANDLE_VALUE; + /* Now is a good opportunity to rotate the array so that its contents + starts at offset 0. */ + if (wq->offset > 0) + { + unsigned int old_count = wq->count; + unsigned int old_alloc = wq->alloc; + unsigned int old_offset = wq->offset; + unsigned int i; + if (old_offset + old_count > old_alloc) + { + unsigned int limit = old_offset + old_count - old_alloc; + for (i = 0; i < limit; i++) + new_array[old_alloc + i] = new_array[i]; + } + for (i = 0; i < old_count; i++) + new_array[i] = new_array[old_offset + i]; + wq->offset = 0; + } + wq->array = new_array; + wq->alloc = new_alloc; + } + /* Whether the created event is a manual-reset one or an auto-reset one, + does not matter, since we will wait on it only once. */ + event = CreateEvent (NULL, TRUE, FALSE, NULL); + if (event == INVALID_HANDLE_VALUE) + /* No way to allocate an event. */ + return INVALID_HANDLE_VALUE; + index = wq->offset + wq->count; + if (index >= wq->alloc) + index -= wq->alloc; + wq->array[index] = event; + wq->count++; + return event; +} + +/* Notifies the first thread from a wait queue and dequeues it. */ +static void +glwthread_waitqueue_notify_first (glwthread_waitqueue_t *wq) +{ + SetEvent (wq->array[wq->offset + 0]); + wq->offset++; + wq->count--; + if (wq->count == 0 || wq->offset == wq->alloc) + wq->offset = 0; +} + +/* Notifies all threads from a wait queue and dequeues them all. */ +static void +glwthread_waitqueue_notify_all (glwthread_waitqueue_t *wq) +{ + unsigned int i; + + for (i = 0; i < wq->count; i++) + { + unsigned int index = wq->offset + i; + if (index >= wq->alloc) + index -= wq->alloc; + SetEvent (wq->array[index]); + } + wq->count = 0; + wq->offset = 0; +} + +void +glwthread_rwlock_init (glwthread_rwlock_t *lock) +{ + InitializeCriticalSection (&lock->lock); + glwthread_waitqueue_init (&lock->waiting_readers); + glwthread_waitqueue_init (&lock->waiting_writers); + lock->runcount = 0; + lock->guard.done = 1; +} + +int +glwthread_rwlock_rdlock (glwthread_rwlock_t *lock) +{ + if (!lock->guard.done) + { + if (InterlockedIncrement (&lock->guard.started) == 0) + /* This thread is the first one to need this lock. Initialize it. */ + glwthread_rwlock_init (lock); + else + { + /* Don't let lock->guard.started grow and wrap around. */ + InterlockedDecrement (&lock->guard.started); + /* Yield the CPU while waiting for another thread to finish + initializing this lock. */ + while (!lock->guard.done) + Sleep (0); + } + } + EnterCriticalSection (&lock->lock); + /* Test whether only readers are currently running, and whether the runcount + field will not overflow, and whether no writer is waiting. The latter + condition is because POSIX recommends that "write locks shall take + precedence over read locks", to avoid "writer starvation". */ + if (!(lock->runcount + 1 > 0 && lock->waiting_writers.count == 0)) + { + /* This thread has to wait for a while. Enqueue it among the + waiting_readers. */ + HANDLE event = glwthread_waitqueue_add (&lock->waiting_readers); + if (event != INVALID_HANDLE_VALUE) + { + DWORD result; + LeaveCriticalSection (&lock->lock); + /* Wait until another thread signals this event. */ + result = WaitForSingleObject (event, INFINITE); + if (result == WAIT_FAILED || result == WAIT_TIMEOUT) + abort (); + CloseHandle (event); + /* The thread which signalled the event already did the bookkeeping: + removed us from the waiting_readers, incremented lock->runcount. */ + if (!(lock->runcount > 0)) + abort (); + return 0; + } + else + { + /* Allocation failure. Weird. */ + do + { + LeaveCriticalSection (&lock->lock); + Sleep (1); + EnterCriticalSection (&lock->lock); + } + while (!(lock->runcount + 1 > 0)); + } + } + lock->runcount++; + LeaveCriticalSection (&lock->lock); + return 0; +} + +int +glwthread_rwlock_wrlock (glwthread_rwlock_t *lock) +{ + if (!lock->guard.done) + { + if (InterlockedIncrement (&lock->guard.started) == 0) + /* This thread is the first one to need this lock. Initialize it. */ + glwthread_rwlock_init (lock); + else + { + /* Don't let lock->guard.started grow and wrap around. */ + InterlockedDecrement (&lock->guard.started); + /* Yield the CPU while waiting for another thread to finish + initializing this lock. */ + while (!lock->guard.done) + Sleep (0); + } + } + EnterCriticalSection (&lock->lock); + /* Test whether no readers or writers are currently running. */ + if (!(lock->runcount == 0)) + { + /* This thread has to wait for a while. Enqueue it among the + waiting_writers. */ + HANDLE event = glwthread_waitqueue_add (&lock->waiting_writers); + if (event != INVALID_HANDLE_VALUE) + { + DWORD result; + LeaveCriticalSection (&lock->lock); + /* Wait until another thread signals this event. */ + result = WaitForSingleObject (event, INFINITE); + if (result == WAIT_FAILED || result == WAIT_TIMEOUT) + abort (); + CloseHandle (event); + /* The thread which signalled the event already did the bookkeeping: + removed us from the waiting_writers, set lock->runcount = -1. */ + if (!(lock->runcount == -1)) + abort (); + return 0; + } + else + { + /* Allocation failure. Weird. */ + do + { + LeaveCriticalSection (&lock->lock); + Sleep (1); + EnterCriticalSection (&lock->lock); + } + while (!(lock->runcount == 0)); + } + } + lock->runcount--; /* runcount becomes -1 */ + LeaveCriticalSection (&lock->lock); + return 0; +} + +int +glwthread_rwlock_tryrdlock (glwthread_rwlock_t *lock) +{ + if (!lock->guard.done) + { + if (InterlockedIncrement (&lock->guard.started) == 0) + /* This thread is the first one to need this lock. Initialize it. */ + glwthread_rwlock_init (lock); + else + { + /* Don't let lock->guard.started grow and wrap around. */ + InterlockedDecrement (&lock->guard.started); + /* Yield the CPU while waiting for another thread to finish + initializing this lock. */ + while (!lock->guard.done) + Sleep (0); + } + } + /* It's OK to wait for this critical section, because it is never taken for a + long time. */ + EnterCriticalSection (&lock->lock); + /* Test whether only readers are currently running, and whether the runcount + field will not overflow, and whether no writer is waiting. The latter + condition is because POSIX recommends that "write locks shall take + precedence over read locks", to avoid "writer starvation". */ + if (!(lock->runcount + 1 > 0 && lock->waiting_writers.count == 0)) + { + /* This thread would have to wait for a while. Return instead. */ + LeaveCriticalSection (&lock->lock); + return EBUSY; + } + lock->runcount++; + LeaveCriticalSection (&lock->lock); + return 0; +} + +int +glwthread_rwlock_trywrlock (glwthread_rwlock_t *lock) +{ + if (!lock->guard.done) + { + if (InterlockedIncrement (&lock->guard.started) == 0) + /* This thread is the first one to need this lock. Initialize it. */ + glwthread_rwlock_init (lock); + else + { + /* Don't let lock->guard.started grow and wrap around. */ + InterlockedDecrement (&lock->guard.started); + /* Yield the CPU while waiting for another thread to finish + initializing this lock. */ + while (!lock->guard.done) + Sleep (0); + } + } + /* It's OK to wait for this critical section, because it is never taken for a + long time. */ + EnterCriticalSection (&lock->lock); + /* Test whether no readers or writers are currently running. */ + if (!(lock->runcount == 0)) + { + /* This thread would have to wait for a while. Return instead. */ + LeaveCriticalSection (&lock->lock); + return EBUSY; + } + lock->runcount--; /* runcount becomes -1 */ + LeaveCriticalSection (&lock->lock); + return 0; +} + +int +glwthread_rwlock_unlock (glwthread_rwlock_t *lock) +{ + if (!lock->guard.done) + return EINVAL; + EnterCriticalSection (&lock->lock); + if (lock->runcount < 0) + { + /* Drop a writer lock. */ + if (!(lock->runcount == -1)) + abort (); + lock->runcount = 0; + } + else + { + /* Drop a reader lock. */ + if (!(lock->runcount > 0)) + { + LeaveCriticalSection (&lock->lock); + return EPERM; + } + lock->runcount--; + } + if (lock->runcount == 0) + { + /* POSIX recommends that "write locks shall take precedence over read + locks", to avoid "writer starvation". */ + if (lock->waiting_writers.count > 0) + { + /* Wake up one of the waiting writers. */ + lock->runcount--; + glwthread_waitqueue_notify_first (&lock->waiting_writers); + } + else + { + /* Wake up all waiting readers. */ + lock->runcount += lock->waiting_readers.count; + glwthread_waitqueue_notify_all (&lock->waiting_readers); + } + } + LeaveCriticalSection (&lock->lock); + return 0; +} + +int +glwthread_rwlock_destroy (glwthread_rwlock_t *lock) +{ + if (!lock->guard.done) + return EINVAL; + if (lock->runcount != 0) + return EBUSY; + DeleteCriticalSection (&lock->lock); + if (lock->waiting_readers.array != NULL) + free (lock->waiting_readers.array); + if (lock->waiting_writers.array != NULL) + free (lock->waiting_writers.array); + lock->guard.done = 0; + return 0; +} diff -Nru gdb-9.1/gnulib/import/windows-rwlock.h gdb-10.2/gnulib/import/windows-rwlock.h --- gdb-9.1/gnulib/import/windows-rwlock.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/windows-rwlock.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,68 @@ +/* Read-write locks (native Windows implementation). + Copyright (C) 2005-2020 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2005. + Based on GCC's gthr-win32.h. */ + +#ifndef _WINDOWS_RWLOCK_H +#define _WINDOWS_RWLOCK_H + +#define WIN32_LEAN_AND_MEAN /* avoid including junk */ +#include <windows.h> + +#include "windows-initguard.h" + +/* It is impossible to implement read-write locks using plain locks, without + introducing an extra thread dedicated to managing read-write locks. + Therefore here we need to use the low-level Event type. */ + +typedef struct + { + HANDLE *array; /* array of waiting threads, each represented by an event */ + unsigned int count; /* number of waiting threads */ + unsigned int alloc; /* length of allocated array */ + unsigned int offset; /* index of first waiting thread in array */ + } + glwthread_carray_waitqueue_t; +typedef struct + { + glwthread_initguard_t guard; /* protects the initialization */ + CRITICAL_SECTION lock; /* protects the remaining fields */ + glwthread_carray_waitqueue_t waiting_readers; /* waiting readers */ + glwthread_carray_waitqueue_t waiting_writers; /* waiting writers */ + int runcount; /* number of readers running, or -1 when a writer runs */ + } + glwthread_rwlock_t; + +#define GLWTHREAD_RWLOCK_INIT { GLWTHREAD_INITGUARD_INIT } + +#ifdef __cplusplus +extern "C" { +#endif + +extern void glwthread_rwlock_init (glwthread_rwlock_t *lock); +extern int glwthread_rwlock_rdlock (glwthread_rwlock_t *lock); +extern int glwthread_rwlock_wrlock (glwthread_rwlock_t *lock); +extern int glwthread_rwlock_tryrdlock (glwthread_rwlock_t *lock); +extern int glwthread_rwlock_trywrlock (glwthread_rwlock_t *lock); +extern int glwthread_rwlock_unlock (glwthread_rwlock_t *lock); +extern int glwthread_rwlock_destroy (glwthread_rwlock_t *lock); + +#ifdef __cplusplus +} +#endif + +#endif /* _WINDOWS_RWLOCK_H */ diff -Nru gdb-9.1/gnulib/import/wmemchr.c gdb-10.2/gnulib/import/wmemchr.c --- gdb-9.1/gnulib/import/wmemchr.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/wmemchr.c 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,23 @@ +/* Search wide character array for a wide character. + Copyright (C) 2011-2020 Free Software Foundation, Inc. + Written by Bruno Haible <bruno@clisp.org>, 2011. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include <wchar.h> + +#include "wmemchr-impl.h" diff -Nru gdb-9.1/gnulib/import/wmemchr-impl.h gdb-10.2/gnulib/import/wmemchr-impl.h --- gdb-9.1/gnulib/import/wmemchr-impl.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/wmemchr-impl.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,27 @@ +/* Search wide character array for a wide character. + Copyright (C) 1999, 2011-2020 Free Software Foundation, Inc. + Written by Bruno Haible <bruno@clisp.org>, 1999. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +wchar_t * +wmemchr (const wchar_t *s, wchar_t c, size_t n) +{ + for (; n > 0; s++, n--) + { + if (*s == c) + return (wchar_t *) s; + } + return NULL; +} diff -Nru gdb-9.1/gnulib/import/wmempcpy.c gdb-10.2/gnulib/import/wmempcpy.c --- gdb-9.1/gnulib/import/wmempcpy.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/wmempcpy.c 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,28 @@ +/* Copy wide character array, return pointer after last written wide character. + Copyright (C) 2020 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include <wchar.h> + +/* Copy N wide characters of SRC to DEST. + Return pointer to wide characters after the last written wide character. */ +wchar_t * +wmempcpy (wchar_t *dest, const wchar_t *src, size_t n) +{ + return wmemcpy (dest, src, n) + n; +} diff -Nru gdb-9.1/gnulib/import/xalloc-oversized.h gdb-10.2/gnulib/import/xalloc-oversized.h --- gdb-9.1/gnulib/import/xalloc-oversized.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/import/xalloc-oversized.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,60 @@ +/* xalloc-oversized.h -- memory allocation size checking + + Copyright (C) 1990-2000, 2003-2004, 2006-2020 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#ifndef XALLOC_OVERSIZED_H_ +#define XALLOC_OVERSIZED_H_ + +#include <stddef.h> +#include <stdint.h> + +/* True if N * S would overflow in a size_t calculation, + or would generate a value larger than PTRDIFF_MAX. + This expands to a constant expression if N and S are both constants. + By gnulib convention, SIZE_MAX represents overflow in size + calculations, so the conservative size_t-based dividend to use here + is SIZE_MAX - 1. */ +#define __xalloc_oversized(n, s) \ + ((size_t) (PTRDIFF_MAX < SIZE_MAX ? PTRDIFF_MAX : SIZE_MAX - 1) / (s) < (n)) + +#if PTRDIFF_MAX < SIZE_MAX +typedef ptrdiff_t __xalloc_count_type; +#else +typedef size_t __xalloc_count_type; +#endif + +/* Return 1 if an array of N objects, each of size S, cannot exist + reliably due to size or ptrdiff_t arithmetic overflow. S must be + positive and N must be nonnegative. This is a macro, not a + function, so that it works correctly even when SIZE_MAX < N. */ + +#if 7 <= __GNUC__ +# define xalloc_oversized(n, s) \ + __builtin_mul_overflow_p (n, s, (__xalloc_count_type) 1) +#elif 5 <= __GNUC__ && !defined __ICC && !__STRICT_ANSI__ +# define xalloc_oversized(n, s) \ + (__builtin_constant_p (n) && __builtin_constant_p (s) \ + ? __xalloc_oversized (n, s) \ + : ({ __xalloc_count_type __xalloc_count; \ + __builtin_mul_overflow (n, s, &__xalloc_count); })) + +/* Other compilers use integer division; this may be slower but is + more portable. */ +#else +# define xalloc_oversized(n, s) __xalloc_oversized (n, s) +#endif + +#endif /* !XALLOC_OVERSIZED_H_ */ diff -Nru gdb-9.1/gnulib/Makefile.am gdb-10.2/gnulib/Makefile.am --- gdb-9.1/gnulib/Makefile.am 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/Makefile.am 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2019-2020 Free Software Foundation, Inc. +# Copyright (C) 2019-2021 Free Software Foundation, Inc. # This file is part of GDB. @@ -15,4 +15,14 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. +# The toplevel makefile overrides $(CC) (in EXTRA_HOST_FLAGS) by setting +# it to whatever CC was in the toplevel configure. This breaks in Gnulib with +# older GCCs, because Gnulib's configure uses this variable to store the +# standard-setting switch (e.g. -std=gnu99/-std=gnu11). To fix this, we just +# set MAKEOVERRIDES to empty here so that import/ uses the right $(CC). +# +# This problem is visible with compilers that don't use C99 by default, such +# as GCC 4.8.5 (Centos 7). +MAKEOVERRIDES = + SUBDIRS = import diff -Nru gdb-9.1/gnulib/Makefile.in gdb-10.2/gnulib/Makefile.in --- gdb-9.1/gnulib/Makefile.in 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/Makefile.in 2021-04-25 04:06:26.000000000 +0000 @@ -1,7 +1,7 @@ # Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -14,7 +14,7 @@ @SET_MAKE@ -# Copyright (C) 2019 Free Software Foundation, Inc. +# Copyright (C) 2019-2020 Free Software Foundation, Inc. # This file is part of GDB. @@ -89,6 +89,7 @@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c @@ -112,15 +113,18 @@ $(top_srcdir)/../config/override.m4 \ $(top_srcdir)/../config/plugins.m4 \ $(top_srcdir)/import/m4/00gnulib.m4 \ + $(top_srcdir)/import/m4/__inline.m4 \ $(top_srcdir)/import/m4/absolute-header.m4 \ $(top_srcdir)/import/m4/alloca.m4 \ $(top_srcdir)/import/m4/arpa_inet_h.m4 \ + $(top_srcdir)/import/m4/btowc.m4 \ + $(top_srcdir)/import/m4/builtin-expect.m4 \ $(top_srcdir)/import/m4/canonicalize.m4 \ $(top_srcdir)/import/m4/chdir-long.m4 \ $(top_srcdir)/import/m4/close.m4 \ $(top_srcdir)/import/m4/closedir.m4 \ $(top_srcdir)/import/m4/codeset.m4 \ - $(top_srcdir)/import/m4/configmake.m4 \ + $(top_srcdir)/import/m4/ctype.m4 \ $(top_srcdir)/import/m4/d-ino.m4 \ $(top_srcdir)/import/m4/d-type.m4 \ $(top_srcdir)/import/m4/dirent_h.m4 \ @@ -145,6 +149,7 @@ $(top_srcdir)/import/m4/flexmember.m4 \ $(top_srcdir)/import/m4/float_h.m4 \ $(top_srcdir)/import/m4/fnmatch.m4 \ + $(top_srcdir)/import/m4/fnmatch_h.m4 \ $(top_srcdir)/import/m4/fpieee.m4 \ $(top_srcdir)/import/m4/frexp.m4 \ $(top_srcdir)/import/m4/frexpl.m4 \ @@ -154,31 +159,32 @@ $(top_srcdir)/import/m4/getcwd-path-max.m4 \ $(top_srcdir)/import/m4/getcwd.m4 \ $(top_srcdir)/import/m4/getdtablesize.m4 \ + $(top_srcdir)/import/m4/getlogin.m4 \ $(top_srcdir)/import/m4/getlogin_r.m4 \ + $(top_srcdir)/import/m4/getpagesize.m4 \ $(top_srcdir)/import/m4/getprogname.m4 \ + $(top_srcdir)/import/m4/getrandom.m4 \ $(top_srcdir)/import/m4/gettimeofday.m4 \ - $(top_srcdir)/import/m4/glibc21.m4 \ $(top_srcdir)/import/m4/glob.m4 \ + $(top_srcdir)/import/m4/glob_h.m4 \ $(top_srcdir)/import/m4/gnulib-common.m4 \ $(top_srcdir)/import/m4/gnulib-comp.m4 \ - $(top_srcdir)/import/m4/hard-locale.m4 \ $(top_srcdir)/import/m4/include_next.m4 \ $(top_srcdir)/import/m4/inet_ntop.m4 \ $(top_srcdir)/import/m4/inttypes-pri.m4 \ $(top_srcdir)/import/m4/inttypes.m4 \ + $(top_srcdir)/import/m4/isblank.m4 \ $(top_srcdir)/import/m4/isnand.m4 \ $(top_srcdir)/import/m4/isnanl.m4 \ $(top_srcdir)/import/m4/largefile.m4 \ - $(top_srcdir)/import/m4/lib-ld.m4 \ - $(top_srcdir)/import/m4/lib-link.m4 \ - $(top_srcdir)/import/m4/lib-prefix.m4 \ $(top_srcdir)/import/m4/limits-h.m4 \ $(top_srcdir)/import/m4/localcharset.m4 \ $(top_srcdir)/import/m4/locale-fr.m4 \ $(top_srcdir)/import/m4/locale-ja.m4 \ $(top_srcdir)/import/m4/locale-zh.m4 \ + $(top_srcdir)/import/m4/locale_h.m4 \ + $(top_srcdir)/import/m4/localtime-buffer.m4 \ $(top_srcdir)/import/m4/lock.m4 \ - $(top_srcdir)/import/m4/longlong.m4 \ $(top_srcdir)/import/m4/lstat.m4 \ $(top_srcdir)/import/m4/malloc.m4 \ $(top_srcdir)/import/m4/malloca.m4 \ @@ -187,10 +193,12 @@ $(top_srcdir)/import/m4/mbsinit.m4 \ $(top_srcdir)/import/m4/mbsrtowcs.m4 \ $(top_srcdir)/import/m4/mbstate_t.m4 \ + $(top_srcdir)/import/m4/mbtowc.m4 \ $(top_srcdir)/import/m4/memchr.m4 \ $(top_srcdir)/import/m4/memmem.m4 \ $(top_srcdir)/import/m4/mempcpy.m4 \ $(top_srcdir)/import/m4/memrchr.m4 \ + $(top_srcdir)/import/m4/minmax.m4 \ $(top_srcdir)/import/m4/mkdir.m4 \ $(top_srcdir)/import/m4/mkdtemp.m4 \ $(top_srcdir)/import/m4/mkostemp.m4 \ @@ -202,11 +210,13 @@ $(top_srcdir)/import/m4/netinet_in_h.m4 \ $(top_srcdir)/import/m4/nocrash.m4 \ $(top_srcdir)/import/m4/off_t.m4 \ - $(top_srcdir)/import/m4/onceonly.m4 \ + $(top_srcdir)/import/m4/open-cloexec.m4 \ + $(top_srcdir)/import/m4/open-slash.m4 \ $(top_srcdir)/import/m4/open.m4 \ $(top_srcdir)/import/m4/openat.m4 \ $(top_srcdir)/import/m4/opendir.m4 \ $(top_srcdir)/import/m4/pathmax.m4 \ + $(top_srcdir)/import/m4/pthread_rwlock_rdlock.m4 \ $(top_srcdir)/import/m4/rawmemchr.m4 \ $(top_srcdir)/import/m4/readdir.m4 \ $(top_srcdir)/import/m4/readlink.m4 \ @@ -215,13 +225,15 @@ $(top_srcdir)/import/m4/rewinddir.m4 \ $(top_srcdir)/import/m4/rmdir.m4 \ $(top_srcdir)/import/m4/save-cwd.m4 \ - $(top_srcdir)/import/m4/secure_getenv.m4 \ $(top_srcdir)/import/m4/setenv.m4 \ + $(top_srcdir)/import/m4/setlocale_null.m4 \ $(top_srcdir)/import/m4/signal_h.m4 \ $(top_srcdir)/import/m4/socklen.m4 \ $(top_srcdir)/import/m4/sockpfaf.m4 \ $(top_srcdir)/import/m4/ssize_t.m4 \ + $(top_srcdir)/import/m4/stat-time.m4 \ $(top_srcdir)/import/m4/stat.m4 \ + $(top_srcdir)/import/m4/std-gnu11.m4 \ $(top_srcdir)/import/m4/stdalign.m4 \ $(top_srcdir)/import/m4/stdbool.m4 \ $(top_srcdir)/import/m4/stddef_h.m4 \ @@ -233,8 +245,10 @@ $(top_srcdir)/import/m4/strerror.m4 \ $(top_srcdir)/import/m4/strerror_r.m4 \ $(top_srcdir)/import/m4/string_h.m4 \ + $(top_srcdir)/import/m4/strnlen.m4 \ $(top_srcdir)/import/m4/strstr.m4 \ $(top_srcdir)/import/m4/strtok_r.m4 \ + $(top_srcdir)/import/m4/sys_random_h.m4 \ $(top_srcdir)/import/m4/sys_socket_h.m4 \ $(top_srcdir)/import/m4/sys_stat_h.m4 \ $(top_srcdir)/import/m4/sys_time_h.m4 \ @@ -246,11 +260,15 @@ $(top_srcdir)/import/m4/time_r.m4 \ $(top_srcdir)/import/m4/unistd-safer.m4 \ $(top_srcdir)/import/m4/unistd_h.m4 \ + $(top_srcdir)/import/m4/visibility.m4 \ $(top_srcdir)/import/m4/warn-on-use.m4 \ $(top_srcdir)/import/m4/wchar_h.m4 \ $(top_srcdir)/import/m4/wchar_t.m4 \ $(top_srcdir)/import/m4/wctype_h.m4 \ - $(top_srcdir)/import/m4/wint_t.m4 $(top_srcdir)/configure.ac + $(top_srcdir)/import/m4/wint_t.m4 \ + $(top_srcdir)/import/m4/wmemchr.m4 \ + $(top_srcdir)/import/m4/wmempcpy.m4 \ + $(top_srcdir)/import/m4/zzgnulib.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ @@ -317,7 +335,6 @@ CTAGS = ctags CSCOPE = cscope DIST_SUBDIRS = $(SUBDIRS) -pkglibexecdir = @pkglibexecdir@ ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALLOCA_H = @ALLOCA_H@ @@ -338,6 +355,7 @@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ +CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ @@ -359,10 +377,10 @@ FNMATCH_H = @FNMATCH_H@ FREXPL_LIBM = @FREXPL_LIBM@ FREXP_LIBM = @FREXP_LIBM@ -GLIBC21 = @GLIBC21@ GLOB_H = @GLOB_H@ GNULIB_ACCEPT = @GNULIB_ACCEPT@ GNULIB_ACCEPT4 = @GNULIB_ACCEPT4@ +GNULIB_ACCESS = @GNULIB_ACCESS@ GNULIB_ACOSF = @GNULIB_ACOSF@ GNULIB_ACOSL = @GNULIB_ACOSL@ GNULIB_ALPHASORT = @GNULIB_ALPHASORT@ @@ -390,14 +408,18 @@ GNULIB_COPYSIGN = @GNULIB_COPYSIGN@ GNULIB_COPYSIGNF = @GNULIB_COPYSIGNF@ GNULIB_COPYSIGNL = @GNULIB_COPYSIGNL@ +GNULIB_COPY_FILE_RANGE = @GNULIB_COPY_FILE_RANGE@ GNULIB_COSF = @GNULIB_COSF@ GNULIB_COSHF = @GNULIB_COSHF@ GNULIB_COSL = @GNULIB_COSL@ +GNULIB_CREAT = @GNULIB_CREAT@ +GNULIB_CTIME = @GNULIB_CTIME@ GNULIB_DIRFD = @GNULIB_DIRFD@ GNULIB_DPRINTF = @GNULIB_DPRINTF@ GNULIB_DUP = @GNULIB_DUP@ GNULIB_DUP2 = @GNULIB_DUP2@ GNULIB_DUP3 = @GNULIB_DUP3@ +GNULIB_DUPLOCALE = @GNULIB_DUPLOCALE@ GNULIB_ENVIRON = @GNULIB_ENVIRON@ GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ GNULIB_EXP2 = @GNULIB_EXP2@ @@ -405,6 +427,7 @@ GNULIB_EXP2L = @GNULIB_EXP2L@ GNULIB_EXPF = @GNULIB_EXPF@ GNULIB_EXPL = @GNULIB_EXPL@ +GNULIB_EXPLICIT_BZERO = @GNULIB_EXPLICIT_BZERO@ GNULIB_EXPM1 = @GNULIB_EXPM1@ GNULIB_EXPM1F = @GNULIB_EXPM1F@ GNULIB_EXPM1L = @GNULIB_EXPM1L@ @@ -433,6 +456,7 @@ GNULIB_FMOD = @GNULIB_FMOD@ GNULIB_FMODF = @GNULIB_FMODF@ GNULIB_FMODL = @GNULIB_FMODL@ +GNULIB_FNMATCH = @GNULIB_FNMATCH@ GNULIB_FOPEN = @GNULIB_FOPEN@ GNULIB_FPRINTF = @GNULIB_FPRINTF@ GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@ @@ -461,19 +485,24 @@ GNULIB_GETDELIM = @GNULIB_GETDELIM@ GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ +GNULIB_GETENTROPY = @GNULIB_GETENTROPY@ GNULIB_GETGROUPS = @GNULIB_GETGROUPS@ GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ GNULIB_GETLINE = @GNULIB_GETLINE@ GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@ GNULIB_GETLOGIN = @GNULIB_GETLOGIN@ GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ +GNULIB_GETOPT_POSIX = @GNULIB_GETOPT_POSIX@ GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ +GNULIB_GETPASS = @GNULIB_GETPASS@ GNULIB_GETPEERNAME = @GNULIB_GETPEERNAME@ +GNULIB_GETRANDOM = @GNULIB_GETRANDOM@ GNULIB_GETSOCKNAME = @GNULIB_GETSOCKNAME@ GNULIB_GETSOCKOPT = @GNULIB_GETSOCKOPT@ GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@ GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@ GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ +GNULIB_GLOB = @GNULIB_GLOB@ GNULIB_GRANTPT = @GNULIB_GRANTPT@ GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@ GNULIB_HYPOT = @GNULIB_HYPOT@ @@ -487,6 +516,7 @@ GNULIB_INET_NTOP = @GNULIB_INET_NTOP@ GNULIB_INET_PTON = @GNULIB_INET_PTON@ GNULIB_ISATTY = @GNULIB_ISATTY@ +GNULIB_ISBLANK = @GNULIB_ISBLANK@ GNULIB_ISFINITE = @GNULIB_ISFINITE@ GNULIB_ISINF = @GNULIB_ISINF@ GNULIB_ISNAN = @GNULIB_ISNAN@ @@ -495,6 +525,8 @@ GNULIB_ISNANL = @GNULIB_ISNANL@ GNULIB_ISWBLANK = @GNULIB_ISWBLANK@ GNULIB_ISWCTYPE = @GNULIB_ISWCTYPE@ +GNULIB_ISWDIGIT = @GNULIB_ISWDIGIT@ +GNULIB_ISWXDIGIT = @GNULIB_ISWXDIGIT@ GNULIB_LCHMOD = @GNULIB_LCHMOD@ GNULIB_LCHOWN = @GNULIB_LCHOWN@ GNULIB_LDEXPF = @GNULIB_LDEXPF@ @@ -502,6 +534,9 @@ GNULIB_LINK = @GNULIB_LINK@ GNULIB_LINKAT = @GNULIB_LINKAT@ GNULIB_LISTEN = @GNULIB_LISTEN@ +GNULIB_LOCALECONV = @GNULIB_LOCALECONV@ +GNULIB_LOCALENAME = @GNULIB_LOCALENAME@ +GNULIB_LOCALTIME = @GNULIB_LOCALTIME@ GNULIB_LOG = @GNULIB_LOG@ GNULIB_LOG10 = @GNULIB_LOG10@ GNULIB_LOG10F = @GNULIB_LOG10F@ @@ -565,6 +600,8 @@ GNULIB_OPEN = @GNULIB_OPEN@ GNULIB_OPENAT = @GNULIB_OPENAT@ GNULIB_OPENDIR = @GNULIB_OPENDIR@ +GNULIB_OVERRIDES_STRUCT_STAT = @GNULIB_OVERRIDES_STRUCT_STAT@ +GNULIB_OVERRIDES_WINT_T = @GNULIB_OVERRIDES_WINT_T@ GNULIB_PCLOSE = @GNULIB_PCLOSE@ GNULIB_PERROR = @GNULIB_PERROR@ GNULIB_PIPE = @GNULIB_PIPE@ @@ -592,6 +629,7 @@ GNULIB_READDIR = @GNULIB_READDIR@ GNULIB_READLINK = @GNULIB_READLINK@ GNULIB_READLINKAT = @GNULIB_READLINKAT@ +GNULIB_REALLOCARRAY = @GNULIB_REALLOCARRAY@ GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@ GNULIB_REALPATH = @GNULIB_REALPATH@ GNULIB_RECV = @GNULIB_RECV@ @@ -618,6 +656,8 @@ GNULIB_SENDTO = @GNULIB_SENDTO@ GNULIB_SETENV = @GNULIB_SETENV@ GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@ +GNULIB_SETLOCALE = @GNULIB_SETLOCALE@ +GNULIB_SETLOCALE_NULL = @GNULIB_SETLOCALE_NULL@ GNULIB_SETSOCKOPT = @GNULIB_SETSOCKOPT@ GNULIB_SHUTDOWN = @GNULIB_SHUTDOWN@ GNULIB_SIGACTION = @GNULIB_SIGACTION@ @@ -643,6 +683,7 @@ GNULIB_STRDUP = @GNULIB_STRDUP@ GNULIB_STRERROR = @GNULIB_STRERROR@ GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ +GNULIB_STRFTIME = @GNULIB_STRFTIME@ GNULIB_STRNCAT = @GNULIB_STRNCAT@ GNULIB_STRNDUP = @GNULIB_STRNDUP@ GNULIB_STRNLEN = @GNULIB_STRNLEN@ @@ -654,6 +695,7 @@ GNULIB_STRTOD = @GNULIB_STRTOD@ GNULIB_STRTOIMAX = @GNULIB_STRTOIMAX@ GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ +GNULIB_STRTOLD = @GNULIB_STRTOLD@ GNULIB_STRTOLL = @GNULIB_STRTOLL@ GNULIB_STRTOULL = @GNULIB_STRTOULL@ GNULIB_STRTOUMAX = @GNULIB_STRTOUMAX@ @@ -670,9 +712,11 @@ GNULIB_TMPFILE = @GNULIB_TMPFILE@ GNULIB_TOWCTRANS = @GNULIB_TOWCTRANS@ GNULIB_TRUNC = @GNULIB_TRUNC@ +GNULIB_TRUNCATE = @GNULIB_TRUNCATE@ GNULIB_TRUNCF = @GNULIB_TRUNCF@ GNULIB_TRUNCL = @GNULIB_TRUNCL@ GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ +GNULIB_TZSET = @GNULIB_TZSET@ GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@ GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ GNULIB_UNLINK = @GNULIB_UNLINK@ @@ -702,6 +746,7 @@ GNULIB_WCSCPY = @GNULIB_WCSCPY@ GNULIB_WCSCSPN = @GNULIB_WCSCSPN@ GNULIB_WCSDUP = @GNULIB_WCSDUP@ +GNULIB_WCSFTIME = @GNULIB_WCSFTIME@ GNULIB_WCSLEN = @GNULIB_WCSLEN@ GNULIB_WCSNCASECMP = @GNULIB_WCSNCASECMP@ GNULIB_WCSNCAT = @GNULIB_WCSNCAT@ @@ -726,6 +771,7 @@ GNULIB_WMEMCMP = @GNULIB_WMEMCMP@ GNULIB_WMEMCPY = @GNULIB_WMEMCPY@ GNULIB_WMEMMOVE = @GNULIB_WMEMMOVE@ +GNULIB_WMEMPCPY = @GNULIB_WMEMPCPY@ GNULIB_WMEMSET = @GNULIB_WMEMSET@ GNULIB_WRITE = @GNULIB_WRITE@ GNULIB__EXIT = @GNULIB__EXIT@ @@ -733,6 +779,7 @@ HAVE_ACCEPT4 = @HAVE_ACCEPT4@ HAVE_ACOSF = @HAVE_ACOSF@ HAVE_ACOSL = @HAVE_ACOSL@ +HAVE_ALLOCA_H = @HAVE_ALLOCA_H@ HAVE_ALPHASORT = @HAVE_ALPHASORT@ HAVE_ARPA_INET_H = @HAVE_ARPA_INET_H@ HAVE_ASINF = @HAVE_ASINF@ @@ -751,9 +798,11 @@ HAVE_CLOSEDIR = @HAVE_CLOSEDIR@ HAVE_COPYSIGN = @HAVE_COPYSIGN@ HAVE_COPYSIGNL = @HAVE_COPYSIGNL@ +HAVE_COPY_FILE_RANGE = @HAVE_COPY_FILE_RANGE@ HAVE_COSF = @HAVE_COSF@ HAVE_COSHF = @HAVE_COSHF@ HAVE_COSL = @HAVE_COSL@ +HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ @@ -783,6 +832,7 @@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ +HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ @@ -790,6 +840,7 @@ HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ HAVE_DECL_INET_NTOP = @HAVE_DECL_INET_NTOP@ HAVE_DECL_INET_PTON = @HAVE_DECL_INET_PTON@ +HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@ @@ -809,6 +860,7 @@ HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@ HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ +HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ HAVE_DECL_SINL = @HAVE_DECL_SINL@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ @@ -822,6 +874,7 @@ HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ HAVE_DECL_TANL = @HAVE_DECL_TANL@ HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ +HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@ HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ @@ -833,9 +886,11 @@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP2 = @HAVE_DUP2@ HAVE_DUP3 = @HAVE_DUP3@ +HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_EXPF = @HAVE_EXPF@ HAVE_EXPL = @HAVE_EXPL@ +HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_EXPM1 = @HAVE_EXPM1@ HAVE_EXPM1F = @HAVE_EXPM1F@ HAVE_FABSF = @HAVE_FABSF@ @@ -855,6 +910,9 @@ HAVE_FMAL = @HAVE_FMAL@ HAVE_FMODF = @HAVE_FMODF@ HAVE_FMODL = @HAVE_FMODL@ +HAVE_FNMATCH = @HAVE_FNMATCH@ +HAVE_FNMATCH_H = @HAVE_FNMATCH_H@ +HAVE_FREELOCALE = @HAVE_FREELOCALE@ HAVE_FREXPF = @HAVE_FREXPF@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSTATAT = @HAVE_FSTATAT@ @@ -863,12 +921,18 @@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_FUTIMENS = @HAVE_FUTIMENS@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ +HAVE_GETENTROPY = @HAVE_GETENTROPY@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ +HAVE_GETPASS = @HAVE_GETPASS@ +HAVE_GETRANDOM = @HAVE_GETRANDOM@ HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ +HAVE_GLOB = @HAVE_GLOB@ +HAVE_GLOB_H = @HAVE_GLOB_H@ +HAVE_GLOB_PATTERN_P = @HAVE_GLOB_PATTERN_P@ HAVE_GRANTPT = @HAVE_GRANTPT@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_HYPOTF = @HAVE_HYPOTF@ @@ -876,7 +940,10 @@ HAVE_ILOGB = @HAVE_ILOGB@ HAVE_ILOGBF = @HAVE_ILOGBF@ HAVE_ILOGBL = @HAVE_ILOGBL@ +HAVE_IMAXDIV_T = @HAVE_IMAXDIV_T@ +HAVE_INITSTATE = @HAVE_INITSTATE@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ +HAVE_ISBLANK = @HAVE_ISBLANK@ HAVE_ISNAND = @HAVE_ISNAND@ HAVE_ISNANF = @HAVE_ISNANF@ HAVE_ISNANL = @HAVE_ISNANL@ @@ -896,7 +963,6 @@ HAVE_LOGBL = @HAVE_LOGBL@ HAVE_LOGF = @HAVE_LOGF@ HAVE_LOGL = @HAVE_LOGL@ -HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@ HAVE_LSTAT = @HAVE_LSTAT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBRLEN = @HAVE_MBRLEN@ @@ -905,6 +971,7 @@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ +HAVE_MBTOWC = @HAVE_MBTOWC@ HAVE_MEMCHR = @HAVE_MEMCHR@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MKDIRAT = @HAVE_MKDIRAT@ @@ -922,6 +989,7 @@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ HAVE_NETINET_IN_H = @HAVE_NETINET_IN_H@ +HAVE_NEWLOCALE = @HAVE_NEWLOCALE@ HAVE_OPENAT = @HAVE_OPENAT@ HAVE_OPENDIR = @HAVE_OPENDIR@ HAVE_OS_H = @HAVE_OS_H@ @@ -946,6 +1014,7 @@ HAVE_READDIR = @HAVE_READDIR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ +HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ HAVE_REALPATH = @HAVE_REALPATH@ HAVE_REMAINDER = @HAVE_REMAINDER@ HAVE_REMAINDERF = @HAVE_REMAINDERF@ @@ -960,6 +1029,7 @@ HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ HAVE_SETENV = @HAVE_SETENV@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ +HAVE_SETSTATE = @HAVE_SETSTATE@ HAVE_SIGACTION = @HAVE_SIGACTION@ HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@ HAVE_SIGINFO_T = @HAVE_SIGINFO_T@ @@ -982,6 +1052,7 @@ HAVE_STRPTIME = @HAVE_STRPTIME@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRTOD = @HAVE_STRTOD@ +HAVE_STRTOLD = @HAVE_STRTOLD@ HAVE_STRTOLL = @HAVE_STRTOLL@ HAVE_STRTOULL = @HAVE_STRTOULL@ HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ @@ -993,10 +1064,10 @@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ -HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ +HAVE_SYS_RANDOM_H = @HAVE_SYS_RANDOM_H@ HAVE_SYS_SOCKET_H = @HAVE_SYS_SOCKET_H@ HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ @@ -1007,14 +1078,15 @@ HAVE_TIMEGM = @HAVE_TIMEGM@ HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ +HAVE_TZSET = @HAVE_TZSET@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ -HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ +HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WCPCPY = @HAVE_WCPCPY@ @@ -1028,6 +1100,7 @@ HAVE_WCSCPY = @HAVE_WCSCPY@ HAVE_WCSCSPN = @HAVE_WCSCSPN@ HAVE_WCSDUP = @HAVE_WCSDUP@ +HAVE_WCSFTIME = @HAVE_WCSFTIME@ HAVE_WCSLEN = @HAVE_WCSLEN@ HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ HAVE_WCSNCAT = @HAVE_WCSNCAT@ @@ -1052,8 +1125,10 @@ HAVE_WMEMCMP = @HAVE_WMEMCMP@ HAVE_WMEMCPY = @HAVE_WMEMCPY@ HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ +HAVE_WMEMPCPY = @HAVE_WMEMPCPY@ HAVE_WMEMSET = @HAVE_WMEMSET@ HAVE_WS2TCPIP_H = @HAVE_WS2TCPIP_H@ +HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ HAVE__BOOL = @HAVE__BOOL@ HAVE__EXIT = @HAVE__EXIT@ INCLUDE_NEXT = @INCLUDE_NEXT@ @@ -1066,16 +1141,24 @@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@ INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@ +LARGEFILE_CPPFLAGS = @LARGEFILE_CPPFLAGS@ LDFLAGS = @LDFLAGS@ LIBGNU_LIBDEPS = @LIBGNU_LIBDEPS@ LIBGNU_LTLIBDEPS = @LIBGNU_LTLIBDEPS@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ -LIBPTH = @LIBPTH@ -LIBPTH_PREFIX = @LIBPTH_PREFIX@ +LIBPMULTITHREAD = @LIBPMULTITHREAD@ +LIBPTHREAD = @LIBPTHREAD@ LIBS = @LIBS@ +LIBSTDTHREAD = @LIBSTDTHREAD@ LIBTHREAD = @LIBTHREAD@ +LIB_GETLOGIN = @LIB_GETLOGIN@ +LIB_GETRANDOM = @LIB_GETRANDOM@ +LIB_HARD_LOCALE = @LIB_HARD_LOCALE@ +LIB_MBRTOWC = @LIB_MBRTOWC@ +LIB_SCHED_YIELD = @LIB_SCHED_YIELD@ +LIB_SETLOCALE_NULL = @LIB_SETLOCALE_NULL@ LIMITS_H = @LIMITS_H@ LN_S = @LN_S@ LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ @@ -1086,7 +1169,6 @@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ -LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ @@ -1094,12 +1176,16 @@ NETINET_IN_H = @NETINET_IN_H@ NEXT_ARPA_INET_H = @NEXT_ARPA_INET_H@ NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H = @NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H@ +NEXT_AS_FIRST_DIRECTIVE_CTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_CTYPE_H@ NEXT_AS_FIRST_DIRECTIVE_DIRENT_H = @NEXT_AS_FIRST_DIRECTIVE_DIRENT_H@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ +NEXT_AS_FIRST_DIRECTIVE_FNMATCH_H = @NEXT_AS_FIRST_DIRECTIVE_FNMATCH_H@ +NEXT_AS_FIRST_DIRECTIVE_GLOB_H = @NEXT_AS_FIRST_DIRECTIVE_GLOB_H@ NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ +NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H = @NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H@ NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@ @@ -1108,6 +1194,7 @@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_RANDOM_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_RANDOM_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@ @@ -1117,12 +1204,16 @@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ +NEXT_CTYPE_H = @NEXT_CTYPE_H@ NEXT_DIRENT_H = @NEXT_DIRENT_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_FCNTL_H = @NEXT_FCNTL_H@ NEXT_FLOAT_H = @NEXT_FLOAT_H@ +NEXT_FNMATCH_H = @NEXT_FNMATCH_H@ +NEXT_GLOB_H = @NEXT_GLOB_H@ NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ +NEXT_LOCALE_H = @NEXT_LOCALE_H@ NEXT_MATH_H = @NEXT_MATH_H@ NEXT_NETINET_IN_H = @NEXT_NETINET_IN_H@ NEXT_SIGNAL_H = @NEXT_SIGNAL_H@ @@ -1131,6 +1222,7 @@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STDLIB_H = @NEXT_STDLIB_H@ NEXT_STRING_H = @NEXT_STRING_H@ +NEXT_SYS_RANDOM_H = @NEXT_SYS_RANDOM_H@ NEXT_SYS_SOCKET_H = @NEXT_SYS_SOCKET_H@ NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ @@ -1156,6 +1248,11 @@ PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ RANLIB = @RANLIB@ +REPLACE_ACCESS = @REPLACE_ACCESS@ +REPLACE_ACOSF = @REPLACE_ACOSF@ +REPLACE_ASINF = @REPLACE_ASINF@ +REPLACE_ATAN2F = @REPLACE_ATAN2F@ +REPLACE_ATANF = @REPLACE_ATANF@ REPLACE_BTOWC = @REPLACE_BTOWC@ REPLACE_CALLOC = @REPLACE_CALLOC@ REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ @@ -1167,15 +1264,25 @@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_CLOSEDIR = @REPLACE_CLOSEDIR@ +REPLACE_COSF = @REPLACE_COSF@ +REPLACE_COSHF = @REPLACE_COSHF@ +REPLACE_CREAT = @REPLACE_CREAT@ +REPLACE_CTIME = @REPLACE_CTIME@ REPLACE_DIRFD = @REPLACE_DIRFD@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ +REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ REPLACE_EXP2 = @REPLACE_EXP2@ REPLACE_EXP2L = @REPLACE_EXP2L@ +REPLACE_EXPF = @REPLACE_EXPF@ +REPLACE_EXPL = @REPLACE_EXPL@ REPLACE_EXPM1 = @REPLACE_EXPM1@ REPLACE_EXPM1F = @REPLACE_EXPM1F@ +REPLACE_EXPM1L = @REPLACE_EXPM1L@ REPLACE_FABSL = @REPLACE_FABSL@ +REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ +REPLACE_FCHMODAT = @REPLACE_FCHMODAT@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FCNTL = @REPLACE_FCNTL@ @@ -1191,9 +1298,11 @@ REPLACE_FMOD = @REPLACE_FMOD@ REPLACE_FMODF = @REPLACE_FMODF@ REPLACE_FMODL = @REPLACE_FMODL@ +REPLACE_FNMATCH = @REPLACE_FNMATCH@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ +REPLACE_FREELOCALE = @REPLACE_FREELOCALE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FREXP = @REPLACE_FREXP@ REPLACE_FREXPF = @REPLACE_FREXPF@ @@ -1214,7 +1323,11 @@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ +REPLACE_GETPASS = @REPLACE_GETPASS@ +REPLACE_GETRANDOM = @REPLACE_GETRANDOM@ REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ +REPLACE_GLOB = @REPLACE_GLOB@ +REPLACE_GLOB_PATTERN_P = @REPLACE_GLOB_PATTERN_P@ REPLACE_GMTIME = @REPLACE_GMTIME@ REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ REPLACE_HYPOT = @REPLACE_HYPOT@ @@ -1222,19 +1335,24 @@ REPLACE_HYPOTL = @REPLACE_HYPOTL@ REPLACE_ILOGB = @REPLACE_ILOGB@ REPLACE_ILOGBF = @REPLACE_ILOGBF@ +REPLACE_ILOGBL = @REPLACE_ILOGBL@ REPLACE_INET_NTOP = @REPLACE_INET_NTOP@ REPLACE_INET_PTON = @REPLACE_INET_PTON@ +REPLACE_INITSTATE = @REPLACE_INITSTATE@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_ISFINITE = @REPLACE_ISFINITE@ REPLACE_ISINF = @REPLACE_ISINF@ REPLACE_ISNAN = @REPLACE_ISNAN@ REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ +REPLACE_ISWDIGIT = @REPLACE_ISWDIGIT@ +REPLACE_ISWXDIGIT = @REPLACE_ISWXDIGIT@ REPLACE_ITOLD = @REPLACE_ITOLD@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LDEXPL = @REPLACE_LDEXPL@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ +REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ REPLACE_LOG = @REPLACE_LOG@ @@ -1274,6 +1392,7 @@ REPLACE_MODFL = @REPLACE_MODFL@ REPLACE_NAN = @REPLACE_NAN@ REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ +REPLACE_NEWLOCALE = @REPLACE_NEWLOCALE@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_OPEN = @REPLACE_OPEN@ @@ -1290,6 +1409,7 @@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_QSORT_R = @REPLACE_QSORT_R@ REPLACE_RAISE = @REPLACE_RAISE@ +REPLACE_RANDOM = @REPLACE_RANDOM@ REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ REPLACE_READ = @REPLACE_READ@ REPLACE_READLINK = @REPLACE_READLINK@ @@ -1302,16 +1422,22 @@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ +REPLACE_RINTL = @REPLACE_RINTL@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_ROUND = @REPLACE_ROUND@ REPLACE_ROUNDF = @REPLACE_ROUNDF@ REPLACE_ROUNDL = @REPLACE_ROUNDL@ REPLACE_SETENV = @REPLACE_SETENV@ +REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ +REPLACE_SETSTATE = @REPLACE_SETSTATE@ REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ REPLACE_SIGNBIT_USING_GCC = @REPLACE_SIGNBIT_USING_GCC@ +REPLACE_SINF = @REPLACE_SINF@ +REPLACE_SINHF = @REPLACE_SINHF@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ +REPLACE_SQRTF = @REPLACE_SQRTF@ REPLACE_SQRTL = @REPLACE_SQRTL@ REPLACE_STAT = @REPLACE_STAT@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ @@ -1322,6 +1448,7 @@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ +REPLACE_STRFTIME = @REPLACE_STRFTIME@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ @@ -1330,17 +1457,23 @@ REPLACE_STRTOD = @REPLACE_STRTOD@ REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ +REPLACE_STRTOLD = @REPLACE_STRTOLD@ REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ +REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ +REPLACE_TANF = @REPLACE_TANF@ +REPLACE_TANHF = @REPLACE_TANHF@ REPLACE_TIMEGM = @REPLACE_TIMEGM@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ REPLACE_TRUNC = @REPLACE_TRUNC@ +REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ REPLACE_TRUNCF = @REPLACE_TRUNCF@ REPLACE_TRUNCL = @REPLACE_TRUNCL@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ +REPLACE_TZSET = @REPLACE_TZSET@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_UNSETENV = @REPLACE_UNSETENV@ @@ -1353,8 +1486,10 @@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ +REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ +REPLACE_WCSTOK = @REPLACE_WCSTOK@ REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ REPLACE_WCTOB = @REPLACE_WCTOB@ REPLACE_WCTOMB = @REPLACE_WCTOMB@ @@ -1375,18 +1510,20 @@ UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ +UNISTD_H_HAVE_SYS_RANDOM_H = @UNISTD_H_HAVE_SYS_RANDOM_H@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ VERSION = @VERSION@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ +WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ +WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ -ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ @@ -1421,7 +1558,6 @@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ -lispdir = @lispdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ @@ -1431,7 +1567,6 @@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ -runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -1444,6 +1579,16 @@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ + +# The toplevel makefile overrides $(CC) (in EXTRA_HOST_FLAGS) by setting +# it to whatever CC was in the toplevel configure. This breaks in Gnulib with +# older GCCs, because Gnulib's configure uses this variable to store the +# standard-setting switch (e.g. -std=gnu99/-std=gnu11). To fix this, we just +# set MAKEOVERRIDES to empty here so that import/ uses the right $(CC). +# +# This problem is visible with compilers that don't use C99 by default, such +# as GCC 4.8.5 (Centos 7). +MAKEOVERRIDES = SUBDIRS = import all: config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive diff -Nru gdb-9.1/gnulib/patches/0001-Fix-PR-gdb-23558-Use-system-s-getcwd-when-cross-comp.patch gdb-10.2/gnulib/patches/0001-Fix-PR-gdb-23558-Use-system-s-getcwd-when-cross-comp.patch --- gdb-9.1/gnulib/patches/0001-Fix-PR-gdb-23558-Use-system-s-getcwd-when-cross-comp.patch 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/patches/0001-Fix-PR-gdb-23558-Use-system-s-getcwd-when-cross-comp.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,69 +0,0 @@ -From a7447215cdc492a077732420a3f0db6d48b34d51 Mon Sep 17 00:00:00 2001 -From: Sergio Durigan Junior <sergiodj@redhat.com> -Date: Mon, 10 Sep 2018 12:52:04 -0400 -Subject: [PATCH] Fix PR gdb/23558: Use system's 'getcwd' when cross-compiling - GDB - -This is a backport of a gnulib fix for the following bug: - - https://sourceware.org/bugzilla/show_bug.cgi?id=23558 - -The problem reported there is about the replacement of 'getcwd' when -cross-compiling GDB. With our current gnulib copy, the mechanism for -deciding whether to use the system's 'getcwd' or gnulib's version is -too simplistic and pessimistic, so when cross-compiling we always end -up using gnulib's version, which has a limitation: it cannot handle -the situation when the parent directory doesn't have read permissions. - -The solution is to backport the following gnulib commit: - - commit a96d2e67052c879b1bcc5bc461722beac75fc372 - Author: Bruno Haible <bruno@clisp.org> - Date: Thu Aug 23 21:13:19 2018 +0200 - - getcwd: Add cross-compilation guesses. - -gdb/ChangeLog: -2018-09-10 Sergio Durigan Junior <sergiodj@redhat.com> - - PR gdb/23555 - PR gdb/23558 - * gnulib/import/m4/getcwd-path-max.m4: Add cross-compilation - guesses. ---- - gdb/gnulib/import/m4/getcwd-path-max.m4 | 20 ++++++++++++++++---- - 1 file changed, 16 insertions(+), 4 deletions(-) - -diff --git a/gdb/gnulib/import/m4/getcwd-path-max.m4 b/gdb/gnulib/import/m4/getcwd-path-max.m4 -index 2531ccff65c..90bbc77dea1 100644 ---- a/gdb/gnulib/import/m4/getcwd-path-max.m4 -+++ b/gdb/gnulib/import/m4/getcwd-path-max.m4 -@@ -209,9 +209,21 @@ main () - 32) gl_cv_func_getcwd_path_max='yes, but with shorter paths';; - *) gl_cv_func_getcwd_path_max=no;; - esac], -- [case "$host_os" in -- aix*) gl_cv_func_getcwd_path_max='no, it has the AIX bug';; -- *) gl_cv_func_getcwd_path_max=no;; -- esac]) -+ [# Cross-compilation guesses: -+ case "$host_os" in -+ aix*) # On AIX, it has the AIX bug. -+ gl_cv_func_getcwd_path_max='no, it has the AIX bug' ;; -+ gnu*) # On Hurd, it is 'yes'. -+ gl_cv_func_getcwd_path_max=yes ;; -+ linux* | kfreebsd*) -+ # On older Linux+glibc it's 'no, but it is partly working', -+ # on newer Linux+glibc it's 'yes'. -+ # On Linux+musl libc, it's 'no, but it is partly working'. -+ # On kFreeBSD+glibc, it's 'no, but it is partly working'. -+ gl_cv_func_getcwd_path_max='no, but it is partly working' ;; -+ *) # If we don't know, assume the worst. -+ gl_cv_func_getcwd_path_max=no ;; -+ esac -+ ]) - ]) - ]) --- -2.19.0 - diff -Nru gdb-9.1/gnulib/patches/0001-use-windows-stat gdb-10.2/gnulib/patches/0001-use-windows-stat --- gdb-9.1/gnulib/patches/0001-use-windows-stat 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/patches/0001-use-windows-stat 2020-09-13 02:33:41.000000000 +0000 @@ -0,0 +1,13 @@ +diff --git a/gnulib/import/m4/stat.m4 b/gnulib/import/m4/stat.m4 +index 46e9abceee7..8ef355f9407 100644 +--- a/gnulib/import/m4/stat.m4 ++++ b/gnulib/import/m4/stat.m4 +@@ -15,7 +15,7 @@ AC_DEFUN([gl_FUNC_STAT], + mingw*) + dnl On this platform, the original stat() returns st_atime, st_mtime, + dnl st_ctime values that are affected by the time zone. +- REPLACE_STAT=1 ++ dnl REPLACE_STAT=1 + ;; + *) + dnl AIX 7.1, Solaris 9, mingw64 mistakenly succeed on stat("file/"). diff -Nru gdb-9.1/gnulib/patches/0002-mkostemp-mkostemps-Fix-compilation-error-in-C-mode-o.patch gdb-10.2/gnulib/patches/0002-mkostemp-mkostemps-Fix-compilation-error-in-C-mode-o.patch --- gdb-9.1/gnulib/patches/0002-mkostemp-mkostemps-Fix-compilation-error-in-C-mode-o.patch 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/patches/0002-mkostemp-mkostemps-Fix-compilation-error-in-C-mode-o.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,38 +0,0 @@ -From 6954995dd32ea98a1973df31f411f3996bb47dfb Mon Sep 17 00:00:00 2001 -From: Tom Tromey <tom@tromey.com> -Date: Mon, 1 Oct 2018 14:57:45 -0600 -Subject: [PATCH] mkostemp, mkostemps: Fix compilation error in C++ mode on Mac - OS X. - -Attempting to use the mkostemp module in gdb caused a build failure -when using the C++ namespace feature, because mkostemp was not -declared. On OS X, mkostemp is declared in unistd.h, so this patch -extends the existing special case in stdlib.in.h to cover mkostemp and -mkostemps. - -* lib/stdlib.in.h: Include <unistd.h> for mkostemp and mkostemps -on OS X. ---- - ChangeLog | 6 ++++++ - lib/stdlib.in.h | 3 ++- - 2 files changed, 8 insertions(+), 1 deletion(-) - -diff --git a/gdb/gnulib/import/stdlib.in.h b/gdb/gnulib/import/stdlib.in.h -index db3253bd97..8f803a2ea3 100644 ---- a/gdb/gnulib/import/stdlib.in.h -+++ b/gdb/gnulib/import/stdlib.in.h -@@ -87,9 +87,10 @@ struct random_data - # endif - #endif - --#if (@GNULIB_MKSTEMP@ || @GNULIB_MKSTEMPS@ || @GNULIB_GETSUBOPT@ || defined GNULIB_POSIXCHECK) && ! defined __GLIBC__ && !((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) -+#if (@GNULIB_MKSTEMP@ || @GNULIB_MKSTEMPS@ || @GNULIB_MKOSTEMP@ || @GNULIB_MKOSTEMPS@ || @GNULIB_GETSUBOPT@ || defined GNULIB_POSIXCHECK) && ! defined __GLIBC__ && !((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) - /* On Mac OS X 10.3, only <unistd.h> declares mkstemp. */ - /* On Mac OS X 10.5, only <unistd.h> declares mkstemps. */ -+/* On Mac OS X 10.13, only <unistd.h> declares mkostemp and mkostemps. */ - /* On Cygwin 1.7.1, only <unistd.h> declares getsubopt. */ - /* But avoid namespace pollution on glibc systems and native Windows. */ - # include <unistd.h> --- -2.19.0 - diff -Nru gdb-9.1/gnulib/patches/0002-stat-fstat-windows-older-vista gdb-10.2/gnulib/patches/0002-stat-fstat-windows-older-vista --- gdb-9.1/gnulib/patches/0002-stat-fstat-windows-older-vista 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/patches/0002-stat-fstat-windows-older-vista 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,116 @@ +From 1796cda9975bd459a87222676030b943869c686e Mon Sep 17 00:00:00 2001 +From: Bruno Haible <bruno@clisp.org> +Date: Wed, 16 Sep 2020 23:51:52 +0200 +Subject: [PATCH 1/2] stat, fstat: Fix when compiling for versions older than + Windows Vista. + +Reported by Eli Zaretskii <eliz@gnu.org> in +<https://lists.gnu.org/archive/html/bug-gnulib/2020-09/msg00027.html>. + +* lib/stat-w32.c: Include <sdkddkver.h>. Test the value of _WIN32_WINNT +that was originally set before we redefined it. +* m4/stat.m4 (gl_PREREQ_STAT_W32): New macro. +(gl_PREREQ_STAT): Require it. +* m4/fstat.m4 (gl_PREREQ_FSTAT): Likewise. +--- + stat-w32.c | 24 ++++++++++++++++++------ + m4/fstat.m4 | 3 ++- + m4/stat.m4 | 13 ++++++++++++- + 4 files changed, 43 insertions(+), 8 deletions(-) + +diff --git a/gnulib/import/stat-w32.c b/gnulib/import/stat-w32.c +index 19bdfaa37..72442e933 100644 +--- a/gnulib/import/stat-w32.c ++++ b/gnulib/import/stat-w32.c +@@ -20,10 +20,22 @@ + + #if defined _WIN32 && ! defined __CYGWIN__ + +-/* Ensure that <windows.h> defines FILE_ID_INFO. */ +-#if !defined _WIN32_WINNT || (_WIN32_WINNT < _WIN32_WINNT_WIN8) +-# undef _WIN32_WINNT +-# define _WIN32_WINNT _WIN32_WINNT_WIN8 ++/* Attempt to make <windows.h> define FILE_ID_INFO. ++ But ensure that the redefinition of _WIN32_WINNT does not make us assume ++ Windows Vista or newer when building for an older version of Windows. */ ++#if HAVE_SDKDDKVER_H ++# include <sdkddkver.h> ++# if _WIN32_WINNT >= _WIN32_WINNT_VISTA ++# define WIN32_ASSUME_VISTA 1 ++# else ++# define WIN32_ASSUME_VISTA 0 ++# endif ++# if !defined _WIN32_WINNT || (_WIN32_WINNT < _WIN32_WINNT_WIN8) ++# undef _WIN32_WINNT ++# define _WIN32_WINNT _WIN32_WINNT_WIN8 ++# endif ++#else ++# define WIN32_ASSUME_VISTA (_WIN32_WINNT >= _WIN32_WINNT_VISTA) + #endif + + #include <sys/types.h> +@@ -46,7 +58,7 @@ + #undef GetFinalPathNameByHandle + #define GetFinalPathNameByHandle GetFinalPathNameByHandleA + +-#if !(_WIN32_WINNT >= _WIN32_WINNT_VISTA) ++#if !WIN32_ASSUME_VISTA + + /* Avoid warnings from gcc -Wcast-function-type. */ + # define GetProcAddress \ +@@ -149,7 +161,7 @@ _gl_fstat_by_handle (HANDLE h, const char *path, struct stat *buf) + DWORD type = GetFileType (h); + if (type == FILE_TYPE_DISK) + { +-#if !(_WIN32_WINNT >= _WIN32_WINNT_VISTA) ++#if !WIN32_ASSUME_VISTA + if (!initialized) + initialize (); + #endif +diff --git a/gnulib/import/m4/fstat.m4 b/gnulib/import/m4/fstat.m4 +index 53c089619..bd8cb7966 100644 +--- a/gnulib/import/m4/fstat.m4 ++++ b/gnulib/import/m4/fstat.m4 +@@ -1,4 +1,4 @@ +-# fstat.m4 serial 6 ++# fstat.m4 serial 7 + dnl Copyright (C) 2011-2021 Free Software Foundation, Inc. + dnl This file is free software; the Free Software Foundation + dnl gives unlimited permission to copy and/or distribute it, +@@ -35,5 +35,6 @@ AC_DEFUN([gl_FUNC_FSTAT], + # Prerequisites of lib/fstat.c and lib/stat-w32.c. + AC_DEFUN([gl_PREREQ_FSTAT], [ + AC_REQUIRE([gl_HEADER_SYS_STAT_H]) ++ AC_REQUIRE([gl_PREREQ_STAT_W32]) + : + ]) +diff --git a/gnulib/import/m4/stat.m4 b/gnulib/import/m4/stat.m4 +index 46e9abcee..db2038f63 100644 +--- a/gnulib/import/m4/stat.m4 ++++ b/gnulib/import/m4/stat.m4 +@@ -1,4 +1,4 @@ +-# serial 16 ++# serial 17 + + # Copyright (C) 2009-2020 Free Software Foundation, Inc. + # +@@ -70,5 +70,16 @@ AC_DEFUN([gl_FUNC_STAT], + # Prerequisites of lib/stat.c and lib/stat-w32.c. + AC_DEFUN([gl_PREREQ_STAT], [ + AC_REQUIRE([gl_HEADER_SYS_STAT_H]) ++ AC_REQUIRE([gl_PREREQ_STAT_W32]) + : + ]) ++ ++# Prerequisites of lib/stat-w32.c. ++AC_DEFUN([gl_PREREQ_STAT_W32], [ ++ AC_REQUIRE([AC_CANONICAL_HOST]) ++ case "$host_os" in ++ mingw*) ++ AC_CHECK_HEADERS([sdkddkver.h]) ++ ;; ++ esac ++]) +-- +2.17.1 + diff -Nru gdb-9.1/gnulib/patches/0003-Fix-glob-c-Coverity-issues.patch gdb-10.2/gnulib/patches/0003-Fix-glob-c-Coverity-issues.patch --- gdb-9.1/gnulib/patches/0003-Fix-glob-c-Coverity-issues.patch 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/patches/0003-Fix-glob-c-Coverity-issues.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,279 +0,0 @@ -Coverity discovered a number of resource leaks in Gnulib. -The solution is to backport the following Gnulib commits: - - commit 0eee3ccaae5bb3d0016a0da8b8e5108767c02748 - Author: Bruno Haible <bruno@clisp.org> - Date: Fri Mar 31 22:41:38 2017 +0200 - - glob: Fix memory leaks. - - * lib/glob.c (glob): Free allocated memory before returning. - Reported by Coverity via Tim Rühsen. - - commit b1d7f3165ba1c7a44a29017eb80491094aa240ba - Author: Bruno Haible <bruno@clisp.org> - Date: Fri Mar 31 22:43:35 2017 +0200 - - glob: Fix invalid free() call. - - * lib/glob.c (glob): Reset malloc_home_dir when assigning a pointer to - static storage to home_dir. - Reported by Coverity via Tim Rühsen. - - commit 1540f3441555f756558f3a18e5f68914c0b72227 - Author: Bruno Haible <bruno@clisp.org> - Date: Sat Apr 1 15:15:18 2017 +0200 - - glob: Fix more memory leaks. - - * lib/glob.c (glob): Free allocated memory before returning. - Reported by Coverity via Tim Rühsen. - - commit b19cb256c9a4d3a138c27181cffee5513edb0e81 - Author: Bruno Haible <bruno@clisp.org> - Date: Thu Jul 6 23:21:49 2017 +0200 - - glob: Fix more memory leaks. - - * lib/glob.c (glob): Free dirname before returning. - Reported by Coverity and Tim Rühsen. - - commit 8cb994d1fc4a957359780e1a4187b4f250c1cea5 - Author: Tim Rühsen <tim.ruehsen@gmx.de> - Date: Mon Jul 10 19:02:19 2017 +0200 - - glob: Fix more memory leaks. - - * lib/glob.c (glob): Use 'goto out' in order to free dirname before - returning. - Reported by Tim Rühsen. - -diff --git a/gnulib/import/glob.c b/gnulib/import/glob.c -index 4b04b90..416d210 100644 ---- a/gdb/gnulib/import/glob.c -+++ b/gdb/gnulib/import/glob.c -@@ -734,6 +734,8 @@ glob (const char *pattern, int flags, int (*errfunc) (const char *, int), - pwtmpbuf = malloc (pwbuflen); - if (pwtmpbuf == NULL) - { -+ if (__glibc_unlikely (malloc_name)) -+ free (name); - retval = GLOB_NOSPACE; - goto out; - } -@@ -762,6 +764,8 @@ glob (const char *pattern, int flags, int (*errfunc) (const char *, int), - if (newp == NULL) - { - free (malloc_pwtmpbuf); -+ if (__glibc_unlikely (malloc_name)) -+ free (name); - retval = GLOB_NOSPACE; - goto out; - } -@@ -797,23 +801,30 @@ glob (const char *pattern, int flags, int (*errfunc) (const char *, int), - malloc_home_dir = 1; - } - memcpy (home_dir, p->pw_dir, home_dir_len); -- -- free (pwtmpbuf); - } - } -+ free (malloc_pwtmpbuf); -+ } -+ else -+ { -+ if (__glibc_unlikely (malloc_name)) -+ free (name); - } - } - if (home_dir == NULL || home_dir[0] == '\0') - { -+ if (__glibc_unlikely (malloc_home_dir)) -+ free (home_dir); - if (flags & GLOB_TILDE_CHECK) - { -- if (__glibc_unlikely (malloc_home_dir)) -- free (home_dir); - retval = GLOB_NOMATCH; - goto out; - } - else -- home_dir = (char *) "~"; /* No luck. */ -+ { -+ home_dir = (char *) "~"; /* No luck. */ -+ malloc_home_dir = 0; -+ } - } - # endif /* WINDOWS32 */ - # endif -@@ -855,6 +866,9 @@ glob (const char *pattern, int flags, int (*errfunc) (const char *, int), - dirname = newp; - dirlen += home_len - 1; - malloc_dirname = !use_alloca; -+ -+ if (__glibc_unlikely (malloc_home_dir)) -+ free (home_dir); - } - dirname_modified = 1; - } -@@ -1027,9 +1041,12 @@ glob (const char *pattern, int flags, int (*errfunc) (const char *, int), - free (malloc_pwtmpbuf); - - if (flags & GLOB_TILDE_CHECK) -- /* We have to regard it as an error if we cannot find the -- home directory. */ -- return GLOB_NOMATCH; -+ { -+ /* We have to regard it as an error if we cannot find the -+ home directory. */ -+ retval = GLOB_NOMATCH; -+ goto out; -+ } - } - } - } -@@ -1059,7 +1076,8 @@ glob (const char *pattern, int flags, int (*errfunc) (const char *, int), - free (pglob->gl_pathv); - pglob->gl_pathv = NULL; - pglob->gl_pathc = 0; -- return GLOB_NOSPACE; -+ retval = GLOB_NOSPACE; -+ goto out; - } - - new_gl_pathv = realloc (pglob->gl_pathv, -@@ -1077,12 +1095,19 @@ glob (const char *pattern, int flags, int (*errfunc) (const char *, int), - p = mempcpy (pglob->gl_pathv[newcount], dirname, dirlen); - p[0] = '/'; - p[1] = '\0'; -+ if (__glibc_unlikely (malloc_dirname)) -+ free (dirname); - } - else - { -- pglob->gl_pathv[newcount] = strdup (dirname); -- if (pglob->gl_pathv[newcount] == NULL) -- goto nospace; -+ if (__glibc_unlikely (malloc_dirname)) -+ pglob->gl_pathv[newcount] = dirname; -+ else -+ { -+ pglob->gl_pathv[newcount] = strdup (dirname); -+ if (pglob->gl_pathv[newcount] == NULL) -+ goto nospace; -+ } - } - pglob->gl_pathv[++newcount] = NULL; - ++pglob->gl_pathc; -@@ -1092,7 +1117,8 @@ glob (const char *pattern, int flags, int (*errfunc) (const char *, int), - } - - /* Not found. */ -- return GLOB_NOMATCH; -+ retval = GLOB_NOMATCH; -+ goto out; - } - - meta = __glob_pattern_type (dirname, !(flags & GLOB_NOESCAPE)); -@@ -1138,7 +1164,10 @@ glob (const char *pattern, int flags, int (*errfunc) (const char *, int), - if (status != 0) - { - if ((flags & GLOB_NOCHECK) == 0 || status != GLOB_NOMATCH) -- return status; -+ { -+ retval = status; -+ goto out; -+ } - goto no_matches; - } - -@@ -1157,7 +1186,8 @@ glob (const char *pattern, int flags, int (*errfunc) (const char *, int), - if (interrupt_state) - { - globfree (&dirs); -- return GLOB_ABORTED; -+ retval = GLOB_ABORTED; -+ goto out; - } - } - #endif /* SHELL. */ -@@ -1176,7 +1206,8 @@ glob (const char *pattern, int flags, int (*errfunc) (const char *, int), - globfree (&dirs); - globfree (pglob); - pglob->gl_pathc = 0; -- return status; -+ retval = status; -+ goto out; - } - - /* Stick the directory on the front of each name. */ -@@ -1187,7 +1218,8 @@ glob (const char *pattern, int flags, int (*errfunc) (const char *, int), - globfree (&dirs); - globfree (pglob); - pglob->gl_pathc = 0; -- return GLOB_NOSPACE; -+ retval = GLOB_NOSPACE; -+ goto out; - } - } - -@@ -1209,7 +1241,8 @@ glob (const char *pattern, int flags, int (*errfunc) (const char *, int), - { - nospace2: - globfree (&dirs); -- return GLOB_NOSPACE; -+ retval = GLOB_NOSPACE; -+ goto out; - } - - new_gl_pathv = realloc (pglob->gl_pathv, -@@ -1224,7 +1257,8 @@ glob (const char *pattern, int flags, int (*errfunc) (const char *, int), - globfree (&dirs); - globfree (pglob); - pglob->gl_pathc = 0; -- return GLOB_NOSPACE; -+ retval = GLOB_NOSPACE; -+ goto out; - } - - ++pglob->gl_pathc; -@@ -1236,7 +1270,8 @@ glob (const char *pattern, int flags, int (*errfunc) (const char *, int), - else - { - globfree (&dirs); -- return GLOB_NOMATCH; -+ retval = GLOB_NOMATCH; -+ goto out; - } - } - -@@ -1282,7 +1317,8 @@ glob (const char *pattern, int flags, int (*errfunc) (const char *, int), - flags = orig_flags; - goto no_matches; - } -- return status; -+ retval = status; -+ goto out; - } - - if (dirlen > 0) -@@ -1294,7 +1330,8 @@ glob (const char *pattern, int flags, int (*errfunc) (const char *, int), - { - globfree (pglob); - pglob->gl_pathc = 0; -- return GLOB_NOSPACE; -+ retval = GLOB_NOSPACE; -+ goto out; - } - } - } -@@ -1319,7 +1356,8 @@ glob (const char *pattern, int flags, int (*errfunc) (const char *, int), - { - globfree (pglob); - pglob->gl_pathc = 0; -- return GLOB_NOSPACE; -+ retval = GLOB_NOSPACE; -+ goto out; - } - strcpy (&new[len - 2], "/"); - pglob->gl_pathv[i] = new; diff -Nru gdb-9.1/gnulib/patches/0003-stat-fstat-windows-old-mingw gdb-10.2/gnulib/patches/0003-stat-fstat-windows-old-mingw --- gdb-9.1/gnulib/patches/0003-stat-fstat-windows-old-mingw 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/gnulib/patches/0003-stat-fstat-windows-old-mingw 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,34 @@ +From f8c23f202d11992182e87736e73929bcc369cc75 Mon Sep 17 00:00:00 2001 +From: Bruno Haible <bruno@clisp.org> +Date: Wed, 16 Sep 2020 23:52:44 +0200 +Subject: [PATCH 2/2] stat, fstat: Fix compilation error with old mingw + headers. + +Reported by Eli Zaretskii <eliz@gnu.org> in +<https://lists.gnu.org/archive/html/bug-gnulib/2020-09/msg00027.html>. + +* lib/stat-w32.c (VOLUME_NAME_NONE): Define if the Windows headers don't +define it. +--- + stat-w32.c | 5 +++++ + 2 files changed, 13 insertions(+) + +diff --git a/gnulib/import/stat-w32.c b/gnulib/import/stat-w32.c +index 72442e933..108ce199c 100644 +--- a/gnulib/import/stat-w32.c ++++ b/gnulib/import/stat-w32.c +@@ -58,6 +58,11 @@ + #undef GetFinalPathNameByHandle + #define GetFinalPathNameByHandle GetFinalPathNameByHandleA + ++/* Older mingw headers do not define VOLUME_NAME_NONE. */ ++#ifndef VOLUME_NAME_NONE ++# define VOLUME_NAME_NONE 4 ++#endif ++ + #if !WIN32_ASSUME_VISTA + + /* Avoid warnings from gcc -Wcast-function-type. */ +-- +2.17.1 + diff -Nru gdb-9.1/gnulib/update-gnulib.sh gdb-10.2/gnulib/update-gnulib.sh --- gdb-9.1/gnulib/update-gnulib.sh 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/gnulib/update-gnulib.sh 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ #! /bin/sh -# Copyright (C) 2011-2020 Free Software Foundation, Inc. +# Copyright (C) 2011-2021 Free Software Foundation, Inc. # # This file is part of GDB. # @@ -32,12 +32,14 @@ IMPORTED_GNULIB_MODULES="\ alloca \ canonicalize-lgpl \ + count-one-bits \ dirent \ dirfd \ errno \ fnmatch-gnu \ frexpl \ getcwd \ + gettimeofday \ glob \ inet_ntop inttypes \ @@ -68,7 +70,7 @@ " # The gnulib commit ID to use for the update. -GNULIB_COMMIT_SHA1="38237baf99386101934cd93278023aa4ae523ec0" +GNULIB_COMMIT_SHA1="4e3f2d4cfdba14e1d89479362061a9280f2f22b6" # The expected version number for the various auto tools we will # use after the import. @@ -164,16 +166,20 @@ # Apply our local patches. apply_patches () { - patch -p3 -f -i "$1" + patch -p2 -f -i "$1" if [ $? -ne 0 ]; then echo "Failed to apply some patches. Aborting." exit 1 fi } -apply_patches "patches/0001-Fix-PR-gdb-23558-Use-system-s-getcwd-when-cross-comp.patch" -apply_patches "patches/0002-mkostemp-mkostemps-Fix-compilation-error-in-C-mode-o.patch" -apply_patches "patches/0003-Fix-glob-c-Coverity-issues.patch" +apply_patches "patches/0001-use-windows-stat" +# The following two patches are specific imports of two commits +# already in gnulib's master. We import those patches individually +# because we want to avoid doing a standard gnulib update, which +# would be too disruptive for a release branch. +apply_patches "patches/0002-stat-fstat-windows-older-vista" +apply_patches "patches/0003-stat-fstat-windows-old-mingw" # Regenerate all necessary files... aclocal && diff -Nru gdb-9.1/include/alloca-conf.h gdb-10.2/include/alloca-conf.h --- gdb-9.1/include/alloca-conf.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/alloca-conf.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2012-2019 Free Software Foundation, Inc. +/* Copyright (C) 2012-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/include/ansidecl.h gdb-10.2/include/ansidecl.h --- gdb-9.1/include/ansidecl.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/ansidecl.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* ANSI and traditional C compatability macros - Copyright (C) 1991-2019 Free Software Foundation, Inc. + Copyright (C) 1991-2020 Free Software Foundation, Inc. This file is part of the GNU C Library. This program is free software; you can redistribute it and/or modify @@ -292,6 +292,40 @@ # endif #endif +/* Attribute `alloc_size' was valid as of gcc 4.3. */ +#ifndef ATTRIBUTE_RESULT_SIZE_1 +# if (GCC_VERSION >= 4003) +# define ATTRIBUTE_RESULT_SIZE_1 __attribute__ ((alloc_size (1))) +# else +# define ATTRIBUTE_RESULT_SIZE_1 +#endif +#endif + +#ifndef ATTRIBUTE_RESULT_SIZE_2 +# if (GCC_VERSION >= 4003) +# define ATTRIBUTE_RESULT_SIZE_2 __attribute__ ((alloc_size (2))) +# else +# define ATTRIBUTE_RESULT_SIZE_2 +#endif +#endif + +#ifndef ATTRIBUTE_RESULT_SIZE_1_2 +# if (GCC_VERSION >= 4003) +# define ATTRIBUTE_RESULT_SIZE_1_2 __attribute__ ((alloc_size (1, 2))) +# else +# define ATTRIBUTE_RESULT_SIZE_1_2 +#endif +#endif + +/* Attribute `warn_unused_result' was valid as of gcc 3.3. */ +#ifndef ATTRIBUTE_WARN_UNUSED_RESULT +# if GCC_VERSION >= 3003 +# define ATTRIBUTE_WARN_UNUSED_RESULT __attribute__ ((warn_unused_result)) +# else +# define ATTRIBUTE_WARN_UNUSED_RESULT +# endif +#endif + /* We use __extension__ in some places to suppress -pedantic warnings about GCC extensions. This feature didn't work properly before gcc 2.8. */ diff -Nru gdb-9.1/include/aout/aout64.h gdb-10.2/include/aout/aout64.h --- gdb-9.1/include/aout/aout64.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/aout/aout64.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* `a.out' object-file definitions, including extensions to 64-bit fields - Copyright (C) 1999-2019 Free Software Foundation, Inc. + Copyright (C) 1999-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -56,6 +56,7 @@ #else #define OMAGIC 0407 /* Object file or impure executable. */ #define NMAGIC 0410 /* Code indicating pure executable. */ +#define IMAGIC 0411 /* Separate instruction & data spaces for PDP-11. */ #define ZMAGIC 0413 /* Code indicating demand-paged executable. */ #define BMAGIC 0415 /* Used by a b.out object. */ @@ -211,7 +212,9 @@ up to a N_SEGSIZE boundary for pure or pageable files. */ #ifndef N_DATADDR #define N_DATADDR(x) \ - (N_MAGIC (x) == OMAGIC \ + (N_MAGIC (x) == IMAGIC \ + ? (bfd_vma) 0 \ + : N_MAGIC (x) == OMAGIC \ ? (N_TXTADDR (x) + N_TXTSIZE (x)) \ : (N_SEGSIZE (x) + ((N_TXTADDR (x) + N_TXTSIZE (x) - 1) \ & ~ (bfd_vma) (N_SEGSIZE (x) - 1)))) diff -Nru gdb-9.1/include/aout/ar.h gdb-10.2/include/aout/ar.h --- gdb-9.1/include/aout/ar.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/aout/ar.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* archive file definition for GNU software - Copyright (C) 2001-2019 Free Software Foundation, Inc. + Copyright (C) 2001-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/include/aout/encap.h gdb-10.2/include/aout/encap.h --- gdb-9.1/include/aout/encap.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/aout/encap.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Yet Another Try at encapsulating bfd object files in coff. - Copyright (C) 1988-2019 Free Software Foundation, Inc. + Copyright (C) 1988-2020 Free Software Foundation, Inc. Written by Pace Willisson 12/9/88 This file is obsolete. It needs to be converted to just define a bunch diff -Nru gdb-9.1/include/aout/host.h gdb-10.2/include/aout/host.h --- gdb-9.1/include/aout/host.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/aout/host.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,7 +1,7 @@ /* host.h - Parameters about the a.out format, based on the host system on which the program is compiled. - Copyright (C) 2001-2019 Free Software Foundation, Inc. + Copyright (C) 2001-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/include/aout/hp.h gdb-10.2/include/aout/hp.h --- gdb-9.1/include/aout/hp.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/aout/hp.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Special version of <a.out.h> for use under HP-UX. - Copyright (C) 1988-2019 Free Software Foundation, Inc. + Copyright (C) 1988-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/include/aout/hppa.h gdb-10.2/include/aout/hppa.h --- gdb-9.1/include/aout/hppa.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/aout/hppa.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2012-2019 Free Software Foundation, Inc. +/* Copyright (C) 2012-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/include/aout/ranlib.h gdb-10.2/include/aout/ranlib.h --- gdb-9.1/include/aout/ranlib.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/aout/ranlib.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* ranlib.h -- archive library index member definition for GNU. - Copyright (C) 1990-2019 Free Software Foundation, Inc. + Copyright (C) 1990-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/include/aout/stab.def gdb-10.2/include/aout/stab.def --- gdb-9.1/include/aout/stab.def 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/aout/stab.def 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Table of DBX symbol codes for the GNU system. - Copyright (C) 1988-2019 Free Software Foundation, Inc. + Copyright (C) 1988-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as diff -Nru gdb-9.1/include/aout/stab_gnu.h gdb-10.2/include/aout/stab_gnu.h --- gdb-9.1/include/aout/stab_gnu.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/aout/stab_gnu.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* gnu_stab.h Definitions for GNU extensions to STABS - Copyright (C) 2001-2019 Free Software Foundation, Inc. + Copyright (C) 2001-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/include/aout/sun4.h gdb-10.2/include/aout/sun4.h --- gdb-9.1/include/aout/sun4.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/aout/sun4.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* SPARC-specific values for a.out files - Copyright (C) 2001-2019 Free Software Foundation, Inc. + Copyright (C) 2001-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/include/bfdlink.h gdb-10.2/include/bfdlink.h --- gdb-9.1/include/bfdlink.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/bfdlink.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* bfdlink.h -- header file for BFD link routines - Copyright (C) 1993-2019 Free Software Foundation, Inc. + Copyright (C) 1993-2020 Free Software Foundation, Inc. Written by Steve Chamberlain and Ian Lance Taylor, Cygnus Support. This file is part of BFD, the Binary File Descriptor library. @@ -270,10 +270,21 @@ allowed to set the value. */ RM_NOT_YET_SET = 0, RM_IGNORE, - RM_GENERATE_WARNING, - RM_GENERATE_ERROR + RM_DIAGNOSE, }; +/* How to handle DT_TEXTREL. */ + +enum textrel_check_method +{ + textrel_check_none, + textrel_check_warning, + textrel_check_error +}; + +#define bfd_link_textrel_check(info) \ + (info->textrel_check != textrel_check_none) + typedef enum {with_flags, without_flags} flag_type; /* A section flag list. */ @@ -350,6 +361,9 @@ /* TRUE if the LTO plugin is active. */ unsigned int lto_plugin_active: 1; + /* TRUE if all LTO IR symbols have been read. */ + unsigned int lto_all_symbols_read : 1; + /* TRUE if global symbols in discarded sections should be stripped. */ unsigned int strip_discarded: 1; @@ -373,7 +387,7 @@ ENUM_BITFIELD (bfd_link_elf_stt_common) elf_stt_common : 2; /* Criteria for skipping symbols when determining - whether to include an object from an archive. */ + whether to include an object from an archive. */ ENUM_BITFIELD (bfd_link_common_skip_ar_symbols) common_skip_ar_symbols : 2; /* What to do with unresolved symbols in an object file. @@ -387,6 +401,9 @@ The same defaults apply. */ ENUM_BITFIELD (report_method) unresolved_syms_in_shared_libs : 2; + /* TRUE if unresolved symbols are to be warned, rather than errored. */ + unsigned int warn_unresolved_syms: 1; + /* TRUE if shared objects should be linked directly, not shared. */ unsigned int static_link: 1; @@ -408,11 +425,8 @@ should be created. 1 for DWARF2 tables, 2 for compact tables. */ unsigned int eh_frame_hdr_type: 2; - /* TRUE if we should warn when adding a DT_TEXTREL to a shared object. */ - unsigned int warn_shared_textrel: 1; - - /* TRUE if we should error when adding a DT_TEXTREL. */ - unsigned int error_textrel: 1; + /* What to do with DT_TEXTREL in output. */ + ENUM_BITFIELD (textrel_check_method) textrel_check: 2; /* TRUE if .hash section should be created. */ unsigned int emit_hash: 1; @@ -501,6 +515,17 @@ /* TRUE if "-Map map" is passed to linker. */ unsigned int has_map_file : 1; + /* TRUE if "--enable-non-contiguous-regions" is passed to the + linker. */ + unsigned int non_contiguous_regions : 1; + + /* TRUE if "--enable-non-contiguous-regions-warnings" is passed to + the linker. */ + unsigned int non_contiguous_regions_warnings : 1; + + /* TRUE if all symbol names should be unique. */ + unsigned int unique_symbol : 1; + /* Char that may appear as the first char of a symbol, but should be skipped (like symbol_leading_char) when looking up symbols in wrap_hash. Used by PowerPC Linux for 'dot' symbols. */ @@ -523,10 +548,10 @@ Normally these optimizations are disabled by default but some targets prefer to enable them by default. So this field is a tri-state variable. The values are: - + zero: Enable the optimizations (either from --relax being specified on the command line or the backend's before_allocation emulation function. - + positive: The user has requested that these optimizations be disabled. (Via the --no-relax command line option). @@ -630,6 +655,9 @@ /* May be used to set DT_FLAGS_1 for ELF. */ bfd_vma flags_1; + /* May be used to set ELF visibility for __start_* / __stop_. */ + unsigned int start_stop_visibility; + /* Start and end of RELRO region. */ bfd_vma relro_start, relro_end; @@ -801,9 +829,9 @@ struct bfd_link_order *next; /* Type of link_order. */ enum bfd_link_order_type type; - /* Offset within output section. */ + /* Offset within output section in bytes. */ bfd_vma offset; - /* Size within output section. */ + /* Size within output section in octets. */ bfd_size_type size; /* Type specific information. */ union diff -Nru gdb-9.1/include/binary-io.h gdb-10.2/include/binary-io.h --- gdb-9.1/include/binary-io.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/binary-io.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Binary mode I/O. - Copyright (C) 2001-2019 Free Software Foundation, Inc. + Copyright (C) 2001-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/include/bout.h gdb-10.2/include/bout.h --- gdb-9.1/include/bout.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/bout.h 2021-04-25 04:06:26.000000000 +0000 @@ -2,7 +2,7 @@ GNU tools modified to support the i80960 (or tools that operate on object files created by such tools). - Copyright (C) 2001-2019 Free Software Foundation, Inc. + Copyright (C) 2001-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/include/cgen/basic-modes.h gdb-10.2/include/cgen/basic-modes.h --- gdb-9.1/include/cgen/basic-modes.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/cgen/basic-modes.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Basic CGEN modes. - Copyright (C) 2005-2019 Free Software Foundation, Inc. + Copyright (C) 2005-2020 Free Software Foundation, Inc. Contributed by Red Hat. This file is part of the GNU opcodes library. diff -Nru gdb-9.1/include/cgen/basic-ops.h gdb-10.2/include/cgen/basic-ops.h --- gdb-9.1/include/cgen/basic-ops.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/cgen/basic-ops.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Basic semantics ops support for CGEN. - Copyright (C) 2005-2019 Free Software Foundation, Inc. + Copyright (C) 2005-2020 Free Software Foundation, Inc. Contributed by Red Hat. This file is part of the GNU opcodes library. diff -Nru gdb-9.1/include/cgen/bitset.h gdb-10.2/include/cgen/bitset.h --- gdb-9.1/include/cgen/bitset.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/cgen/bitset.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Header file the type CGEN_BITSET. - Copyright (C) 2002-2019 Free Software Foundation, Inc. + Copyright (C) 2002-2020 Free Software Foundation, Inc. This file is part of the GNU opcodes library. diff -Nru gdb-9.1/include/ChangeLog gdb-10.2/include/ChangeLog --- gdb-9.1/include/ChangeLog 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/ChangeLog 2021-04-25 04:06:26.000000000 +0000 @@ -1,745 +1,790 @@ -2019-12-11 Alan Modra <amodra@gmail.com> +2020-09-12 H.J. Lu <hongjiu.lu@intel.com> - * opcode/mmix.h (PUSHGO_INSN_BYTE): Make unsigned. - (GO_INSN_BYTE, SETL_INSN_BYTE, INCML_INSN_BYTE, INCMH_INSN_BYTE), - (INCH_INSN_BYTE, SWYM_INSN_BYTE, JMP_INSN_BYTE): Likewise. + PR ld/26391 + * bfdlink.h (bfd_link_info): Add unique_symbol. -2019-12-11 Alan Modra <amodra@gmail.com> +2020-09-11 Felix Willgerodt <felix.willgerodt@intel.com> - * dis-asm.h (INSN_HAS_RELOC, DISASSEMBLE_DATA), - (USER_SPECIFIED_MACHINE_TYPE, WIDE_OUTPUT): Make unsigned. - * opcode/tic80.h (TIC80_OPERAND_*): Likewise. + Sync with GCC + 2020-09-08 Felix Willgerodt <felix.willgerodt@intel.com> -2019-12-10 Alan Modra <amodra@gmail.com> + * floatformat.h (floatformat_bfloat16_big): New. + (floatformat_bfloat16_little): New. - PR 24960 - * dis-asm.h (disassemble_free_target): Declare. +2020-09-12 Cooper Qu <cooper.qu@linux.alibaba.com> -2019-12-10 Alan Modra <amodra@gmail.com> + * opcode/csky.h (CSKYV1_ISA_E1): Convert to bfd_uint64_t type. + (CSKYV2_ISA_E1): Likewise. + (CSKYV2_ISA_1E2>): Likewise. + (CSKYV2_ISA_2E3>): Likewise. + (CSKYV2_ISA_3E7>): Likewise. + (CSKYV2_ISA_7E10): Likewise. + (CSKYV2_ISA_3E3R1): Likewise. + (CSKYV2_ISA_3E3R2): Likewise. + (CSKYV2_ISA_10E60): Likewise. + (CSKYV2_ISA_3E3R3): Likewise. + (CSKY_ISA_TRUST): Likewise. + (CSKY_ISA_CACHE): Likewise. + (CSKY_ISA_NVIC): Likewise. + (CSKY_ISA_CP): Likewise. + (CSKY_ISA_MP): Likewise. + (CSKY_ISA_MP_1E2): Likewise. + (CSKY_ISA_JAVA): Likewise. + (CSKY_ISA_MAC): Likewise. + (CSKY_ISA_MAC_DSP): Likewise. + (CSKY_ISA_DSP): Likewise. + (CSKY_ISA_DSP_1E2): Likewise. + (CSKY_ISA_DSP_ENHANCE): Likewise. + (CSKY_ISA_DSPE60): Likewise. + (CSKY_ISA_FLOAT_E1): Likewise. + (CSKY_ISA_FLOAT_1E2): Likewise. + (CSKY_ISA_FLOAT_1E3): Likewise. + (CSKY_ISA_FLOAT_3E4): Likewise. + (CSKY_ISA_FLOAT_7E60): Likewise. + (CSKY_ISA_VDSP): Likewise. + (CSKY_ISA_VDSP_2): Likewise. + (CSKY_ARCH_804): Define. + (CSKY_ARCH_805): Define. + (CSKY_ARCH_800): Define. - * dis-asm.h (struct disassemble_info): Delete insn_sets. - (INIT_DISASSEMBLE_INFO_NO_ARCH): Don't define. +2020-09-11 H.J. Lu <hongjiu.lu@intel.com> -2019-12-05 Jan Beulich <jbeulich@suse.com> + * elf/common.h (NT_X86_CET): New. - * opcode/aarch64.h (AARCH64_FEATURE_CRYPTO): Expand to the - combination of AES and SHA2. +2020-09-10 Cooper Qu <cooper.qu@linux.alibaba.com> -2019-11-25 Alan Modra <amodra@gmail.com> + * opcode/csky.h (CSKY_ARCH_804): Define. + (CSKY_ARCH_805): Define. + (CSKY_ARCH_800): Define. - * coff/ti.h (GET_SCNHDR_SIZE, PUT_SCNHDR_SIZE, GET_SCN_SCNLEN), - (PUT_SCN_SCNLEN): Adjust bfd_octets_per_byte calls. +2020-09-10 Nick Clifton <nickc@redhat.com> -2019-11-22 Mihail Ionescu <mihail.ionescu@arm.com> + * opcode/csky.h (CSKY_ISA_FLOAT_7E60): Use a long long type for + this value. - * opcode/arm.h (ARM_EXT2_CRC): New extension feature - to replace CRC_EXT_ARMV8. - (CRC_EXT_ARMV8): Remove and mark bit as unused. - (ARM_ARCH_V8A_CRC, ARM_ARCH_V8_1A, ARM_ARCH_V8_2A, - ARM_ARCH_V8_3A, ARM_ARCH_V8_4A, ARM_ARCH_V8_5A, - ARM_ARCH_V8_6A): Redefine using ARM_EXT2_CRC instead of - CRC_EXT_ARMV8. +2020-09-07 Cooper Qu <cooper.qu@linux.alibaba.com> -2019-11-18 Andrew Burgess <andrew.burgess@embecosm.com> + * opcode/csky.h (CSKY_ISA_DSPE60): Define. - * dwarf2.h (DW_CIE_VERSION): Delete. +2020-09-07 Cooper Qu <cooper.qu@linux.alibaba.com> -2019-11-07 Mihail Ionescu <mihail.ionescu@arm.com> + * opcode/csky.h (CSKY_ISA_FLOAT_7E60): Define. - * opcode/arm.h (ARM_EXT2_I8MM): New feature macro. +2020-09-08 Jozef Lawrynowicz <jozef.l@mittosystems.com> + Kuan-Lin Chen <kuanlinchentw@gmail.com> -2019-11-07 Mihail Ionescu <mihail.ionescu@arm.com> + * elf/msp430.h (elf_msp430_reloc_type): Add + R_MSP430_GNU_{SET,SUB}_ULEB128. + (elf_msp430x_reloc_type): Add R_MSP430X_GNU_{SET,SUB}_ULEB128. - * opcode/aarch64.h (AARCH64_FEATURE_I8MM): New. - (AARCH64_FEATURE_F32MM): New. - (AARCH64_FEATURE_F64MM): New. - (AARCH64_OPND_SVE_ADDR_RI_S4x32): New. - (enum aarch64_insn_class): Add new instruction class "aarch64_misc" for - instructions that do not require special handling. +2020-09-08 Alex Coplan <alex.coplan@arm.com> -2019-11-07 Mihail Ionescu <mihail.ionescu@arm.com> - Matthew Malcomson <matthew.malcomson@arm.com> + * opcode/aarch64.h (aarch64_sys_ins_reg_supported_p): Also take + system register name in order to simplify validation for v8-R. + (aarch64_print_operand): Also take CPU feature set, as disassembly for + system registers now depends on arch variant. - * opcode/arm.h (ARM_EXT2_V8_6A, ARM_AEXT2_V8_6A, - ARM_ARCH_V8_6A): New. - * opcode/arm.h (ARM_EXT2_BF16): New feature macro. - (ARM_AEXT2_V8_6A): Include above macro in definition. +2020-09-08 Alex Coplan <alex.coplan@arm.com> -2019-11-07 Mihail Ionescu <mihail.ionescu@arm.com> - Matthew Malcomson <matthew.malcomson@arm.com> + * opcode/aarch64.h (AARCH64_FEATURE_V8_A): New. + (AARCH64_FEATURE_V8_R): New. + (AARCH64_ARCH_V8): Include new A-profile feature bit. + (AARCH64_ARCH_V8_R): New. - * opcode/aarch64.h (AARCH64_FEATURE_BFLOAT16): New feature macros. - (AARCH64_ARCH_V8_6): Include BFloat16 feature macros. - (enum aarch64_opnd_qualifier): Introduce new operand qualifier - AARCH64_OPND_QLF_S_2H. - (enum aarch64_insn_class): Introduce new class "bfloat16". - (BFLOAT16_SVE_INSNC): New feature set for bfloat16 - instructions to support the movprfx constraint. +2020-09-02 Alan Modra <amodra@gmail.com> -2019-11-07 Mihail Ionescu <mihail.ionescu@arm.com> - Matthew Malcomson <matthew.malcomson@arm.com> + * opcode/v850.h (struct v850_operand <insert>): Make param op an + unsigned long. + +2020-09-02 Cooper Qu <cooper.qu@linux.alibaba.com> + + * opcode/csky.h (CSKYV2_ISA_3E3R3): Define. + +2020-08-31 Alan Modra <amodra@gmail.com> - * opcode/aarch64.h (AARCH64_FEATURE_V8_6): New. - (AARCH64_ARCH_V8_6): New. + PR 26493 + * opcode/riscv.h (OP_MASK_CSR, OP_MASK_CUSTOM_IMM) + (OP_MASK_FUNCT7, OP_MASK_RS3): Make unsigned. -2019-11-07 Alan Modra <amodra@gmail.com> +2020-08-31 Alan Modra <amodra@gmail.com> - * elf/cr16c.h: Delete. + PR 26457 + * som/aout.h (SOM_SUBSPACE_ACCESS_CONTROL_BITS_MASK): Make unsigned. + (SOM_SUBSPACE_MEMORY_RESIDENT, SOM_SUBSPACE_DUP_COMMON) + (SOM_SUBSPACE_IS_COMMON, SOM_SUBSPACE_IS_LOADABLE) + (SOM_SUBSPACE_QUADRANT_MASK, SOM_SUBSPACE_INITIALLY_FROZEN) + (SOM_SUBSPACE_IS_FIRST, SOM_SUBSPACE_CODE_ONLY) + (SOM_SUBSPACE_SORT_KEY_MASK, SOM_SUBSPACE_REPLICATE_INIT) + (SOM_SUBSPACE_CONTINUATION, SOM_SUBSPACE_IS_TSPECIFIC) + (SOM_SUBSPACE_IS_COMDAT): Likewise. -2019-10-29 Andrew Eikum <aeikum@codeweavers.com> +2020-08-28 Cooper Qu <cooper.qu@linux.alibaba.com> - * coff/internal.h (struct internal_extra_pe_filehdr): Use ints - instead of longs to hold dos_message. + * elf/csky.h (SHT_CSKY_ATTRIBUTES): Define. + (Tag_CSKY_ARCH_NAME): New enum constant. + (Tag_CSKY_CPU_NAME): Likewise. + (Tag_CSKY_ISA_FLAGS): Likewise. + (Tag_CSKY_DSP_VERSION): Likewise. + (Tag_CSKY_VDSP_VERSION): Likewise. + (Tag_CSKY_FPU_VERSION): Likewise. + (Tag_CSKY_FPU_ABI): Likewise. + (Tag_CSKY_FPU_ROUNDING): Likewise. + (Tag_CSKY_FPU_DENORMAL): Likewise. + (Tag_CSKY_FPU_Exception): Likewise. + (Tag_CSKY_FPU_NUMBER_MODULE): Likewise. + (Tag_CSKY_FPU_HARDFP): Likewise. + (Tag_CSKY_MAX): Likewise. + (VAL_CSKY_DSP_VERSION_EXTENSION): Likewise. + (VAL_CSKY_DSP_VERSION_2): Likewise. + (VAL_CSKY_VDSP_VERSION_1): Likewise. + (VAL_CSKY_VDSP_VERSION_2): Likewise. + (VAL_CSKY_FPU_ABI_SOFT): Likewise. + (VAL_CSKY_FPU_ABI_SOFTFP): Likewise. + (VAL_CSKY_FPU_ABI_HARD): Likewise. + (VAL_CSKY_FPU_HARDFP_HALF): Likewise. + (VAL_CSKY_FPU_HARDFP_SINGLE): Likewise. + (VAL_CSKY_FPU_HARDFP_DOUBLE): Likewise. + * opcode/csky.h (CSKY_ISA_VDSP_V2): Define. + CSKYV1_ISA_E1: Change to long constant type. + CSKYV2_ISA_E1: Likewise. + CSKYV2_ISA_1E2: Likewise. + CSKYV2_ISA_2E3: Likewise. + CSKYV2_ISA_3E7: Likewise. + CSKYV2_ISA_7E10: Likewise. + CSKYV2_ISA_3E3R1: Likewise. + CSKYV2_ISA_3E3R2: Likewise. + CSKYV2_ISA_10E60: Likewise. + CSKY_ISA_TRUST: Likewise. + CSKY_ISA_CACHE: Likewise. + CSKY_ISA_NVIC: Likewise. + CSKY_ISA_CP: Likewise. + CSKY_ISA_MP: Likewise. + CSKY_ISA_MP_1E2: Likewise. + CSKY_ISA_JAVA: Likewise. + CSKY_ISA_MAC: Likewise. + CSKY_ISA_MAC_DSP: Likewise. + CSKY_ISA_DSP: Likewise. + CSKY_ISA_DSP_1E2: Likewise. + CSKY_ISA_DSP_ENHANCE: Likewise. + CSKY_ISA_FLOAT_E1: Likewise. + CSKY_ISA_FLOAT_1E2: Likewise. + CSKY_ISA_FLOAT_1E3: Likewise. + CSKY_ISA_FLOAT_3E4: Likewise. + CSKY_ISA_VDSP: Likewise. -2019-10-25 Alan Modra <amodra@gmail.com> +2020-08-27 Nick Alcock <nick.alcock@oracle.com> - PR 4499 - * elf/internal.h (struct elf_segment_map): Delete header_size. - Add no_sort_lma and idx. + * ctf-api.h (ctf_errwarning_next): New err parameter. -2019-10-16 Alan Modra <amodra@gmail.com> +2020-08-26 Nick Clifton <nickc@redhat.com> - PR 13616 - * bfdlink.h (struct bfd_link_info <big_endian>): New field. + PR 26405 + * elf/common.h (PT_OPENBSD_BOOTDATA): Define. + (PT_OPENBSD_RANDOMIZE): Define. + (PT_OPENBSD_WXNEEDED): Define. -2019-10-07 Jozef Lawrynowicz <jozef.l@mittosystems.com> +2020-08-26 Alan Modra <amodra@gmail.com> - * elf/msp430.h: Add enums for MSPABI and GNU object attribute tag - names and values. + PR 26458 + * elf/common.h (ELF32_R_INFO): Cast symbol index to unsigned. -2019-09-23 Nick Alcock <nick.alcock@oracle.com> +2020-08-24 Cooper Qu <cooper.qu@linux.alibaba.com> - * ctf-api.h (ctf_cuname_set): Can now fail, returning int. - (ctf_parent_name_set): Likewise. + * opcode/csky.h (CSKYV2_ISA_10E60): New. + (CSKY_ARCH_860): New. -2019-08-05 Nick Alcock <nick.alcock@oracle.com> +2020-08-21 Cooper Qu <cooper.qu@linux.alibaba.com> - * ctf-api.h (ECTF_NONREPRESENTABLE): New. + * csky.h (CSKYV2_ISA_3E3R2): New. -2019-09-23 Nick Alcock <nick.alcock@oracle.com> +2020-08-21 Mark Wielaard <mark@klomp.org> - * ctf-api.h: Note the instability of the ctf_link interfaces. + * diagnostics.h (DIAGNOSTIC_IGNORE_DEPRECATED_REGISTER): Also define + for GCC 7.0 or higher. -2019-07-13 Nick Alcock <nick.alcock@oracle.com> +2020-08-10 Alex Coplan <alex.coplan@arm.com> - * bfdlink.h (elf_strtab_hash): New forward. - (elf_sym_strtab): Likewise. - (struct bfd_link_callbacks <examine_strtab>): New. - (struct bfd_link_callbacks <emit_ctf>): Likewise. + * opcode/aarch64.h (AARCH64_MAX_SYSREG_NAME_LEN): New. -2019-07-13 Nick Alcock <nick.alcock@oracle.com> +2020-08-10 Przemyslaw Wirkus <przemyslaw.wirkus@arm.com> - * ctf-api.h (includes): No longer include <sys/param.h>. + * opcode/aarch64.h (aarch64_sys_reg_deprecated_p): Functions + paramaters changed. + (aarch64_sys_reg_supported_p): Function removed. + (aarch64_sys_ins_reg_supported_p): Functions paramaters changed. -2019-07-30 Nick Alcock <nick.alcock@oracle.com> +2020-07-28 Caroline Tice <cmtice@google.com> - * ctf-api.h (ctf_link_add_cu_mapping): New. - (ctf_link_memb_name_changer_f): New. - (ctf_link_set_memb_name_changer): New. + * dwarf2.h (enum dwarf_sect_v5): A new enum section for the + sections in a DWARF 5 DWP file (DWP version 5). -2019-07-13 Nick Alcock <nick.alcock@oracle.com> +2020-07-22 Nick Alcock <nick.alcock@oracle.com> - * ctf-api.h (ECTF_INTERNAL): New. + * ctf-api.h (CTF_LINK_NONDEDUP): New, turn off the + deduplicator. -2019-07-13 Nick Alcock <nick.alcock@oracle.com> +2020-07-22 Nick Alcock <nick.alcock@oracle.com> - * ctf-api.h (struct ctf_link_sym): New, a symbol in flight to the - libctf linking machinery. - (CTF_LINK_SHARE_UNCONFLICTED): New. - (CTF_LINK_SHARE_DUPLICATED): New. - (ECTF_LINKADDEDLATE): New, replacing ECTF_UNUSED. - (ECTF_NOTYET): New, a 'not yet implemented' message. - (ctf_link_add_ctf): New, add an input file's CTF to the link. - (ctf_link): New, merge the type and string sections. - (ctf_link_strtab_string_f): New, callback for feeding strtab info. - (ctf_link_iter_symbol_f): New, callback for feeding symtab info. - (ctf_link_add_strtab): New, tell the CTF linker about the ELF - strtab's strings. - (ctf_link_shuffle_syms): New, ask the CTF linker to shuffle its - symbols into symtab order. - (ctf_link_write): New, ask the CTF linker to write the CTF out. + * ctf-api.h (CTF_LINK_OMIT_VARIABLES_SECTION): New. -2019-07-13 Nick Alcock <nick.alcock@oracle.com> +2020-07-22 Nick Alcock <nick.alcock@oracle.com> - * ctf-api.h (ctf_arc_write_fd): New. - (ctf_write_mem): Likewise. - (ctf_gzwrite): Spacing fix. + * ctf-api.h (CTF_LINK_SHARE_DUPLICATED): No longer unimplemented. -2019-07-13 Nick Alcock <nick.alcock@oracle.com> +2020-07-22 Nick Alcock <nick.alcock@oracle.com> - * ctf.h (CTF_SET_STID): New. + * ctf-api.h (ctf_link_variable_filter_t): New. + (ctf_link_set_variable_filter): Likewise. -2019-07-13 Nick Alcock <nick.alcock@oracle.com> +2020-07-22 Nick Alcock <nick.alcock@oracle.com> - * ctf-api.h (ctf_type_all_f): New. - (ctf_type_iter_all): New. + * ctf-api.h (CTF_LINK_EMPTY_CU_MAPPINGS): New. -2019-07-11 Nick Alcock <nick.alcock@oracle.com> +2020-07-22 Nick Alcock <nick.alcock@oracle.com> - * ctf.h: Add object index and function index sections. Describe - them. Improve the description of the variable section and clarify - the constraints on backward-pointing type nodes. - (ctf_header): Add cth_objtidxoff, cth_funcidxoff. + * ctf-api.h (ECTF_NEEDSBFD): New. + (ECTF_NERR): Adjust. + (ctf_link): Rename share_mode arg to flags. -2019-07-06 Nick Alcock <nick.alcock@oracle.com> +2020-07-22 Nick Alcock <nick.alcock@oracle.com> - * ctf-api.h (ctf_cuname): New function. - (ctf_cuname_set): Likewise. - * ctf.h: Improve comment around upgrading, no longer - implying that v2 is the target of upgrades (it is v3 now). - (ctf_header_v2_t): New, old-format header for backward - compatibility. - (ctf_header_t): Add cth_cuname: this is the first of several - header changes in format v3. + * ctf-api.h (ECTF_INTERNAL): Adjust error text. + (ctf_errwarning_next): New. -2019-09-23 Alan Modra <amodra@gmail.com> +2020-07-22 Nick Alcock <nick.alcock@oracle.com> - * bfdlink.h (struct bfd_section_already_linked): Forward declare. - (bfd_section_already_linked_table_init), - (bfd_section_already_linked_table_free), - (_bfd_handle_already_linked, _bfd_nearby_section), - (_bfd_fix_excluded_sec_syms): Declare. + * ctf-api.h (ECTF_FLAGS): New. + (ECTF_NERR): Adjust. + * ctf.h (CTF_F_MAX): New. -2019-09-23 Alan Modra <amodra@gmail.com> +2020-07-22 Nick Alcock <nick.alcock@oracle.com> - * bfdlink.h (enum notice_asneeded_action): Define. + * ctf-api.h (ECTF_NEXT_END): New error. + (ECTF_NEXT_WRONGFUN): Likewise. + (ECTF_NEXT_WRONGFP): Likewise. + (ECTF_NERR): Adjust. + (ctf_next_t): New. + (ctf_next_create): New prototype. + (ctf_next_destroy): Likewise. + (ctf_next_copy): Likewise. + (ctf_member_next): Likewise. + (ctf_enum_next): Likewise. + (ctf_type_next): Likewise. + (ctf_label_next): Likewise. + (ctf_variable_next): Likewise. -2019-09-17 Maxim Blinov <maxim.blinov@embecosm.com> +2020-07-22 Nick Alcock <nick.alcock@oracle.com> - * opcode/riscv.h (riscv_insn_class): New enum. - * opcode/riscv.h (struct riscv_opcode): Change - subset field to insn_class field. + * ctf-api.h (ctf_ref): New. -2019-09-09 Phil Blundell <pb@pbcl.net> +2020-07-22 Nick Alcock <nick.alcock@oracle.com> - binutils 2.33 branch created. + * ctf-api.h (ctf_archive_count): New. -2019-08-30 Claudiu Zissulescu <claziss@gmail.com> +2020-07-22 Nick Alcock <nick.alcock@oracle.com> - * opcode/arc.h (FASTMATH): Move it from insn_class_t to - insn_subclass_t enum. + * ctf-api.h (ctf_member_count): New. -2019-08-22 Alan Modra <amodra@gmail.com> +2020-07-22 Nick Alcock <nick.alcock@oracle.com> - * elf/arm.h (ARM_GET_SYM_CMSE_SPCL, ARM_SET_SYM_CMSE_SPCL): Delete. + * ctf-api.h (ctf_type_kind_forwarded): New. -2019-08-09 Mihailo Stojanovic <mihailo.stojanovic@rt-rk.com> +2020-07-22 Nick Alcock <nick.alcock@oracle.com> - * elf/mips.h (SHT_GNU_XHASH): New define. - (DT_GNU_XHASH): New define. + * ctf-api.c (ctf_type_name_raw): New. -2019-08-08 Yoshinori Sato <ysato@users.sourceforge.jp> +2020-07-22 Nick Alcock <nick.alcock@oracle.com> - * opcode/h8300.h (EXPAND_UNOP_EXTENDED_B): Add MODEL. - (EXPAND_UNOP_EXTENDED_W): Likewise. - (EXPAND_UNOP_EXTENDED_L): Likewise. - (struct h8_opcode h8_opcodes): Likewise. - (struct h8_opcode h8_opcodes): tas / ldm / stm supported H8S or - later. + * ctf-api.h (ECTF_*): Improve comments. + (ECTF_NERR): New. -2019-07-24 Claudiu Zissulescu <claziss@synopsys.com> +2020-07-22 Nick Alcock <nick.alcock@oracle.com> - * opcode/arc.h (FASTMATH): Add. - (SWITCH): Likewise. + * ctf-api.h: Fix typos in comments. -2019-07-24 Alan Modra <amodra@gmail.com> +2020-07-22 H.J. Lu <hongjiu.lu@intel.com> - * elf/internal.h (ELF_SECTION_IN_SEGMENT_1): Exclude non-alloc - sections in GNU_MBIND segments. + PR ld/26262 + PR ld/26267 + * bfdlink.h (bfd_link_info): Add lto_all_symbols_read. -2019-07-23 Omar Majid <omajid@redhat.com> +2020-07-11 H.J. Lu <hongjiu.lu@intel.com> - * coff/i386.h (IMAGE_FILE_MACHINE_NATIVE_APPLE_OVERRIDE): Define. - (IMAGE_FILE_MACHINE_NATIVE_FREEBSD_OVERRIDE): Define. - (IMAGE_FILE_MACHINE_NATIVE_LINUX_OVERRIDE): Define. - (IMAGE_FILE_MACHINE_NATIVE_NETBSD_OVERRIDE): Define. - (I386_APPLE_MAGIC): Define. - (I386_FREEBSD_MAGIC): Define. - (I386_LINUX_MAGIC): Define. - (I386_NETBSD_MAGIC): Define. - (I386BADMAG): Extend macro to allow new magic numbers. - * coff/x86_64.h (IMAGE_FILE_MACHINE_NATIVE_APPLE_OVERRIDE): Define. - (IMAGE_FILE_MACHINE_NATIVE_FREEBSD_OVERRIDE): Define. - (IMAGE_FILE_MACHINE_NATIVE_LINUX_OVERRIDE): Define. - (IMAGE_FILE_MACHINE_NATIVE_NETBSD_OVERRIDE): Define. - (AMD64_APPLE_MAGIC): Define. - (AMD64_FREEBSD_MAGIC): Define. - (AMD64_LINUX_MAGIC): Define. - (AMD64_NETBSD_MAGIC): Define. - (AMD64BADMAG): Extend macro to allow new magic numbers. + * elf/common.h (GNU_PROPERTY_X86_FEATURE_2_TMM): New. -2019-07-19 Alan Modra <amodra@gmail.com> +2020-07-09 John Baldwin <jhb@FreeBSD.org> - * elf/ppc64.h (R_PPC64_TPREL34, R_PPC64_DTPREL34), - (R_PPC64_GOT_TLSGD34, R_PPC64_GOT_TLSLD34), - (R_PPC64_GOT_TPREL34, R_PPC64_GOT_DTPREL34): Define. - (IS_PPC64_TLS_RELOC): Include new tls relocs. + * elf/common.h (AT_FREEBSD_ARGC, AT_FREEBSD_ARGV, AT_FREEBSD_ENVC) + (AT_FREEBSD_ENVV, AT_FREEBSD_PS_STRINGS): Define. -2019-07-18 Nick Alcock <nick.alcock@oracle.com> +2020-07-09 Alan Modra <amodra@gmail.com> - * ctf-api.h (ECTF_NOTFUNC): Fix description. - (ctf_func_type_info): New. - (ctf_func_type_args): Likewise. - (ctf_type_aname_raw): Likewise. + * coff/powerpc.h: Delete. -2019-07-16 Jan Beulich <jbeulich@suse.com> +2020-07-04 Nick Clifton <nickc@redhat.com> - * opcode/i386.h (POP_SEG386_SHORT): New. + Binutils 2.35 branch created. -2019-07-01 Matthew Malcomson <matthew.malcomson@arm.com> +2020-06-30 Nelson Chu <nelson.chu@sifive.com> - * opcode/aarch64.h (enum aarch64_insn_class): sve_size_013 - renamed to sve_size_13. + * opcode/riscv-opc.h: Support the unprivileged CSR. The versions + of the unprivileged CSR should be PRIV_SPEC_CLASS_NONE for now. + * opcode/riscv.h (enum riscv_csr_class): Add CSR_CLASS_DEBUG. -2019-06-19 Nick Alcock <nick.alcock@oracle.com> +2020-06-30 Nelson Chu <nelson.chu@sifive.com> - * ctf.h (ctf_slice_t): Make cts_offset and cts_bits unsigned - short, so following structures are properly aligned. + * opcode/riscv-opc.h: Cleanup and remove the unused macros. -2019-06-14 Szabolcs Nagy <szabolcs.nagy@arm.com> +2020-06-29 Alan Modra <amodra@gmail.com> - * elf/aarch64.h (R_AARCH64_P32_MOVW_PREL_G0): Define. - (R_AARCH64_P32_MOVW_PREL_G0_NC): Define. - (R_AARCH64_P32_MOVW_PREL_G1): Define. + * coff/internal.h: Use C style comments. + * coff/pe.h: Likewise. + * elf/ppc64.h: Likewise. -2019-06-03 Nick Alcock <nick.alcock@oracle.com> +2020-06-26 Nick Alcock <nick.alcock@oracle.com> - * ctf.h (ctf_enum.cte_value): Fix type to int32_t. + * ctf-api.h (ctf_arc_bufopen): New. -2019-05-29 Nick Alcock <nick.alcock@oracle.com> +2020-06-26 Pat Bernardi <bernardi@adacore.com> - * ctf-api.h (ctf_sect_t): Drop cts_type, cts_flags, and cts_offset. - (ctf_id_t): This is now an unsigned type. - (CTF_ERR): Cast it to ctf_id_t. Note that it should only be used - for ctf_id_t-returning functions. + * elf/m68k.h: Add enum for GNU object attribute with floating point + tag name and values. -2019-05-28 Nick Alcock <nick.alcock@oracle.com> +2020-06-25 Nick Clifton <nickc@redhat.com> - * ctf-api.h (ctf_dump_decorate_f): New. - (ctf_dump_state_t): new. - (ctf_dump): New. + * libiberty.h (bsearch_r): Remove use of the register keyword from + the prototype. -2019-05-28 Nick Alcock <nick.alcock@oracle.com> +2020-06-24 H.J. Lu <hongjiu.lu@intel.com> - * ctf-api.h (ctf_label_f): New. - (ctf_label_set): New. - (ctf_label_get): New. - (ctf_label_topmost): New. - (ctf_label_info): New. - (ctf_label_iter): New. + Sync with GCC + 2020-06-23 Nick Alcock <nick.alcock@oracle.com> -2019-05-28 Nick Alcock <nick.alcock@oracle.com> + * libiberty.h (bsearch_r): New. - * ctf-api.h (ctf_version): New. + 2020-04-17 Martin Liska <mliska@suse.cz> + Jonathan Yong <10walls@gmail.com> -2019-05-28 Nick Alcock <nick.alcock@oracle.com> + PR gcov-profile/94570 + * filenames.h (defined): Do not define HAVE_DOS_BASED_FILE_SYSTEM + for CYGWIN. - * ctf-api.h (ctf_func_info): New. - (ctf_func_args): Likewise. - (ctf_lookup_by_symbol): Likewise. - (ctf_lookup_by_symbol): Likewise. - (ctf_lookup_variable): Likewise. +2020-06-22 Alex Coplan <alex.coplan@arm.com> -2019-05-28 Nick Alcock <nick.alcock@oracle.com> + * opcode/aarch64.h (AARCH64_FEATURE_SHA2): Normalize. + (AARCH64_FEATURE_AES): Likewise. + (AARCH64_FEATURE_V8_4): Likewise. + (AARCH64_FEATURE_SM4): Likewise. + (AARCH64_FEATURE_SHA3): Likewise. + (AARCH64_FEATURE_V8): Likewise. + (AARCH64_FEATURE_V8_2): Likewise. + (AARCH64_FEATURE_V8_3): Likewise. + (AARCH64_FEATURE_FP): Likewise. + (AARCH64_FEATURE_SIMD): Likewise. + (AARCH64_FEATURE_CRC): Likewise. + (AARCH64_FEATURE_LSE): Likewise. + (AARCH64_FEATURE_PAN): Likewise. + (AARCH64_FEATURE_LOR): Likewise. + (AARCH64_FEATURE_RDMA): Likewise. + (AARCH64_FEATURE_V8_1): Likewise. + (AARCH64_FEATURE_F16): Likewise. + (AARCH64_FEATURE_RAS): Likewise. + (AARCH64_FEATURE_PROFILE): Likewise. + (AARCH64_FEATURE_SVE): Likewise. + (AARCH64_FEATURE_RCPC): Likewise. + (AARCH64_FEATURE_COMPNUM): Likewise. + (AARCH64_FEATURE_DOTPROD): Likewise. + (AARCH64_FEATURE_F16_FML): Likewise. + (AARCH64_FEATURE_V8_5): Likewise. + (AARCH64_FEATURE_V8_6): Likewise. + (AARCH64_FEATURE_BFLOAT16): Likewise. + (AARCH64_FEATURE_FLAGMANIP): Likewise. + (AARCH64_FEATURE_FRINTTS): Likewise. + (AARCH64_FEATURE_SB): Likewise. + (AARCH64_FEATURE_PREDRES): Likewise. + (AARCH64_FEATURE_CVADP): Likewise. + (AARCH64_FEATURE_RNG): Likewise. + (AARCH64_FEATURE_BTI): Likewise. + (AARCH64_FEATURE_SCXTNUM): Likewise. + (AARCH64_FEATURE_ID_PFR2): Likewise. + (AARCH64_FEATURE_SSBS): Likewise. + (AARCH64_FEATURE_MEMTAG): Likewise. + (AARCH64_FEATURE_TME): Likewise. + (AARCH64_FEATURE_I8MM): Likewise. + (AARCH64_FEATURE_F32MM): Likewise. + (AARCH64_FEATURE_F64MM): Likewise. + (AARCH64_FEATURE_SVE2): Likewise. + (AARCH64_FEATURE_SVE2_AES): Likewise. + (AARCH64_FEATURE_SVE2_BITPERM): Likewise. + (AARCH64_FEATURE_SVE2_SM4): Likewise. + (AARCH64_FEATURE_SVE2_SHA3): Likewise. - * ctf-api.h (ctf_visit_f): New definition. - (ctf_member_f): Likewise. - (ctf_enum_f): Likewise. - (ctf_variable_f): Likewise. - (ctf_type_f): Likewise. - (ctf_type_isparent): Likewise. - (ctf_type_ischild): Likewise. - (ctf_type_resolve): Likewise. - (ctf_type_aname): Likewise. - (ctf_type_lname): Likewise. - (ctf_type_name): Likewise. - (ctf_type_sizee): Likewise. - (ctf_type_align): Likewise. - (ctf_type_kind): Likewise. - (ctf_type_reference): Likewise. - (ctf_type_pointer): Likewise. - (ctf_type_encoding): Likewise. - (ctf_type_visit): Likewise. - (ctf_type_cmp): Likewise. - (ctf_type_compat): Likewise. - (ctf_member_info): Likewise. - (ctf_array_info): Likewise. - (ctf_enum_name): Likewise. - (ctf_enum_value): Likewise. - (ctf_member_iter): Likewise. - (ctf_enum_iter): Likewise. - (ctf_type_iter): Likewise. - (ctf_variable_iter): Likewise. +2020-06-22 Saagar Jha <saagar@saagarjha.com> -2019-05-28 Nick Alcock <nick.alcock@oracle.com> + * mach-o/loader.h: Add declarations of two new Mach-O load + commands. - * ctf-api.h (struct bfd): New forward. - (ctf_fdopen): New. - (ctf_bfdopen): Likewise. - (ctf_open): Likewise. - (ctf_arc_open): Likewise. +2020-06-22 Nelson Chu <nelson.chu@sifive.com> -2019-05-28 Nick Alcock <nick.alcock@oracle.com> + * opcode/riscv.h (riscv_get_priv_spec_class): Move the function + forward declarations to bfd/elfxx-riscv.h. + (riscv_get_priv_spec_name): Likewise. - * ctf.h (CTFA_MAGIC): New. - (struct ctf_archive): New. - (struct ctf_archive_modent): Likewise. - * ctf-api.h (ctf_archive_member_f): New. - (ctf_archive_raw_member_f): Likewise. - (ctf_arc_write): Likewise. - (ctf_arc_close): Likewise. - (ctf_arc_open_by_name): Likewise. - (ctf_archive_iter): Likewise. - (ctf_archive_raw_iter): Likewise. - (ctf_get_arc): Likewise. +2020-06-15 Max Filippov <jcmvbkbc@gmail.com> -2019-05-28 Nick Alcock <nick.alcock@oracle.com> + * elf/xtensa.h (xtensa_abi_choice): New declaration. - * ctf-api.h (ctf_file_close): New declaration. - (ctf_getdatasect): Likewise. - (ctf_parent_file): Likewise. - (ctf_parent_name): Likewise. - (ctf_parent_name_set): Likewise. - (ctf_import): Likewise. - (ctf_setmodel): Likewise. - (ctf_getmodel): Likewise. - (ctf_setspecific): Likewise. - (ctf_getspecific): Likewise. +2020-06-12 Roland McGrath <mcgrathr@google.com> -2019-05-28 Nick Alcock <nick.alcock@oracle.com> + * bfdlink.h (struct bfd_link_info): New field start_stop_visibility. - * ctf-api.h (zlib.h): New include. - (ctf_sect_t): New. - (ctf_sect_names_t): Likewise. - (ctf_encoding_t): Likewise. - (ctf_membinfo_t): Likewise. - (ctf_arinfo_t): Likewise. - (ctf_funcinfo_t): Likewise. - (ctf_lblinfo_t): Likewise. - (ctf_snapshot_id_t): Likewise. - (CTF_FUNC_VARARG): Likewise. - (ctf_simple_open): Likewise. - (ctf_bufopen): Likewise. - (ctf_create): Likewise. - (ctf_add_array): Likewise. - (ctf_add_const): Likewise. - (ctf_add_enum_encoded): Likewise. - (ctf_add_enum): Likewise. - (ctf_add_float): Likewise. - (ctf_add_forward): Likewise. - (ctf_add_function): Likewise. - (ctf_add_integer): Likewise. - (ctf_add_slice): Likewise. - (ctf_add_pointer): Likewise. - (ctf_add_type): Likewise. - (ctf_add_typedef): Likewise. - (ctf_add_restrict): Likewise. - (ctf_add_struct): Likewise. - (ctf_add_union): Likewise. - (ctf_add_struct_sized): Likewise. - (ctf_add_union_sized): Likewise. - (ctf_add_volatile): Likewise. - (ctf_add_enumerator): Likewise. - (ctf_add_member): Likewise. - (ctf_add_member_offset): Likewise. - (ctf_add_member_encoded): Likewise. - (ctf_add_variable): Likewise. - (ctf_set_array): Likewise. - (ctf_update): Likewise. - (ctf_snapshot): Likewise. - (ctf_rollback): Likewise. - (ctf_discard): Likewise. - (ctf_write): Likewise. - (ctf_gzwrite): Likewise. - (ctf_compress_write): Likewise. +2020-06-12 Nelson Chu <nelson.chu@sifive.com> -2019-05-28 Nick Alcock <nick.alcock@oracle.com> + * opcode/riscv-opc.h: Update the defined versions of CSR from + PRIV_SPEC_CLASS_1P9 to PRIV_SPEC_CLASS_1P9P1. Also, drop the + MISA DECLARE_CSR_ALIAS since it's aborted version is v1.9. + * opcode/riscv.h (enum riscv_priv_spec_class): Remove + PRIV_SPEC_CLASS_1P9. - * ctf-api.h (ctf_errno): New declaration. - (ctf_errmsg): Likewise. +2020-06-11 Alex Coplan <alex.coplan@arm.com> -2019-05-28 Nick Alcock <nick.alcock@oracle.com> + * opcode/aarch64.h (aarch64_sys_reg): Add required features to struct + describing system registers. - * ctf-api.h (ctf_setdebug): New. - (ctf_getdebug): Likewise. +2020-06-11 Alan Modra <amodra@gmail.com> -2019-05-28 Nick Alcock <nick.alcock@oracle.com> + * elf/mips.h (Elf32_RegInfo): Use fixed width integer types. + (Elf64_Internal_RegInfo, Elf_Internal_Options): Likewise. - * ctf-api.h: New file. +2020-06-06 Alan Modra <amodra@gmail.com> -2019-05-28 Nick Alcock <nick.alcock@oracle.com> + * elf/ppc64.h (elf_ppc64_reloc_type): Rename + R_PPC64_GOT_TLSGD34 to R_PPC64_GOT_TLSGD_PCREL34, + R_PPC64_GOT_TLSLD34 to R_PPC64_GOT_TLSLD_PCREL34, + R_PPC64_GOT_TPREL34 to R_PPC64_GOT_TPREL_PCREL34, and + R_PPC64_GOT_DTPREL34 to R_PPC64_GOT_DTPREL_PCREL34. - * ctf.h: New file. +2020-06-04 Jose E. Marchesi <jose.marchesi@oracle.com> -2019-05-24 Szabolcs Nagy <szabolcs.nagy@arm.com> + * opcode/cgen.h: Get an `endian' argument in both + cgen_get_insn_value and cgen_put_insn_value. - * elf/aarch64.h (DT_AARCH64_VARIANT_PCS): Define. - (STO_AARCH64_VARIANT_PCS): Define. +2020-06-04 Jose E. Marchesi <jemarch@gnu.org> -2019-05-24 Alan Modra <amodra@gmail.com> + * opcode/cgen.h (enum cgen_cpu_open_arg): New value + CGEN_CPU_OPEN_INSN_ENDIAN. - * elf/ppc64.h (R_PPC64_PLTSEQ_NOTOC, R_PPC64_PLTCALL_NOTOC), - (R_PPC64_PCREL_OPT, R_PPC64_D34, R_PPC64_D34_LO, R_PPC64_D34_HI30), - (R_PPC64_D34_HA30, R_PPC64_PCREL34, R_PPC64_GOT_PCREL34), - (R_PPC64_PLT_PCREL34, R_PPC64_PLT_PCREL34_NOTOC), - (R_PPC64_ADDR16_HIGHER34, R_PPC64_ADDR16_HIGHERA34), - (R_PPC64_ADDR16_HIGHEST34, R_PPC64_ADDR16_HIGHESTA34), - (R_PPC64_REL16_HIGHER34, R_PPC64_REL16_HIGHERA34), - (R_PPC64_REL16_HIGHEST34, R_PPC64_REL16_HIGHESTA34), - (R_PPC64_D28, R_PPC64_PCREL28): Define. +2020-06-03 Nelson Chu <nelson.chu@sifive.com> -2019-05-24 Peter Bergner <bergner@linux.ibm.com> - Alan Modra <amodra@gmail.com> + * opcode/riscv.h: Remove #include "bfd.h". And change the return + types of riscv_get_isa_spec_class and riscv_get_priv_spec_class + from bfd_boolean to int. - * dis-asm.h (WIDE_OUTPUT): Define. - * opcode/ppc.h (prefix_opcodes, prefix_num_opcodes): Declare. - (PPC_OPCODE_POWERXX, PPC_GET_PREFIX, PPC_GET_SUFFIX), - (PPC_PREFIX_P, PPC_PREFIX_SEG): Define. +2020-05-28 Alan Modra <amodra@gmail.com> -2019-05-23 Jose E. Marchesi <jose.marchesi@oracle.com> + PR 26044 + * opcode/tilepro.h (TILEPRO_NUM_PIPELINE_ENCODINGS): Move to + tilepro_pipeline enum. - * elf/bpf.h: New file. +2020-05-27 H.J. Lu <hongjiu.lu@intel.com> -2019-05-16 Andre Vieira <andre.simoesdiasvieira@arm.com> + PR ld/22909 + * bfdlink.h (textrel_check_method): New enum. + (bfd_link_textrel_check): New. + (bfd_link_info): Replace warn_shared_textrel and error_textrel + with textrel_check. - * elf/arm.h (Tag_MVE_arch): Define new enum value. - * opcode/arm.h (FPU_MVE, FPU_MVE_FP): New MACROs for new features. +2020-05-25 H.J. Lu <hongjiu.lu@intel.com> -2019-05-09 Matthew Malcomson <matthew.malcomson@arm.com> + * elf/common.h: Update comments for ET_EXEC and ET_DYN. - * opcode/aarch64.h (enum aarch64_opnd): New SVE_SHLIMM_UNPRED_22 - operand. +2020-05-20 Nelson Chu <nelson.chu@sifive.com> -2019-05-09 Matthew Malcomson <matthew.malcomson@arm.com> + * opcode/riscv.h: Include "bfd.h" to support bfd_boolean. + (enum riscv_isa_spec_class): New enum class. All supported ISA spec + belong to one of the class + (struct riscv_ext_version): New structure holds version information + for the specific ISA. + * opcode/riscv-opc.h (DECLARE_CSR): There are two version information, + define_version and abort_version. The define_version means which + privilege spec is started to define the CSR, and the abort_version + means which privilege spec is started to abort the CSR. If the CSR is + valid for the newest spec, then the abort_version should be + PRIV_SPEC_CLASS_DRAFT. + (DECLARE_CSR_ALIAS): Same as DECLARE_CSR, but only for the obselete CSR. + * opcode/riscv.h (enum riscv_priv_spec_class): New enum class. Define + the current supported privilege spec versions. + (struct riscv_csr_extra): Add new fields to store more information + about the CSR. We use these information to find the suitable CSR + address when user choosing a specific privilege spec. - * opcode/aarch64.h (enum aarch64_insn_class): Add sve_size_tsz_bhs - iclass. +2020-05-19 Alexander Fedotov <alfedotov@gmail.com> -2019-05-09 Matthew Malcomson <matthew.malcomson@arm.com> + PR 25992 + * opcode/arm.h (ARM_EXT2_V8R): Define. Modified ARM_AEXT2_V8R. - * opcode/aarch64.h (enum aarch64_opnd): New SVE_Zm4_11_INDEX operand. +2020-05-11 Alan Modra <amodra@gmail.com> -2019-05-09 Matthew Malcomson <matthew.malcomson@arm.com> + * opcode/ppc.h (PPC_OPERAND_ACC): Define. Renumber following + PPC_OPERAND defines. - * opcode/aarch64.h (enum aarch64_insn_class): Add sve_shift_tsz_bhsd - iclass. +2020-05-11 Alan Modra <amodra@gmail.com> -2019-05-09 Matthew Malcomson <matthew.malcomson@arm.com> + * elf/ppc64.h: Update comment. + * opcode/ppc.h (PPC_OPCODE_POWER10): Rename from PPC_OPCODE_POWERXX. - * opcode/aarch64.h (enum aarch64_opnd): New SVE_SHRIMM_UNPRED_22 - operand. - (enum aarch64_insn_class): Add sve_shift_tsz_hsd iclass. +2020-04-30 Alex Coplan <alex.coplan@arm.com> -2019-05-09 Matthew Malcomson <matthew.malcomson@arm.com> + * opcode/aarch64.h (enum aarch64_opnd): Add + AARCH64_OPND_UNDEFINED. - * opcode/aarch64.h (enum aarch64_insn_class): Add sve_size_013 iclass. +2020-04-23 Anton Kolesov <anton.kolesov@synopsys.com> -2019-05-09 Matthew Malcomson <matthew.malcomson@arm.com> + * elf/common.h (NT_ARC_V2): New macro definitions. - * opcode/aarch64.h (enum aarch64_insn_class): Add sve_size_bh iclass. +2020-04-22 Max Filippov <jcmvbkbc@gmail.com> -2019-05-09 Matthew Malcomson <matthew.malcomson@arm.com> + PR ld/25861 + * elf/xtensa.h (elf_xtensa_reloc_type): New entries for + R_XTENSA_PDIFF{8,16,32} and R_XTENSA_NDIFF{8,16,32}. - * opcode/aarch64.h (enum aarch64_insn_class): Add sve_size_sd2 iclass. +2020-04-21 Alan Modra <amodra@gmail.com> -2019-05-09 Matthew Malcomson <matthew.malcomson@arm.com> + * elf/sh.h (STO_SH5_ISA32, SHF_SH5_ISA32, SHF_SH5_ISA32_MIXED), + (SHT_SH5_CR_SORTED, STT_DATALABEL): Delete. - * opcode/aarch64.h (enum aarch64_opnd): New SVE_ADDR_ZX operand. +2020-04-10 Fangrui Song <maskray@google.com> -2019-05-09 Matthew Malcomson <matthew.malcomson@arm.com> + PR binutils/24613 + * bfdlink.h (enum report_method): Delete RM_GENERATE_WARNING and + RM_GENERATE_ERROR. Add RM_DIAGNOSE. + (struct bfd_link_info): Add warn_unresolved_syms. - * opcode/aarch64.h (enum aarch64_opnd): New SVE_Zm3_11_INDEX operand. +2020-04-14 Stephen Casner <casner@acm.org> -2019-05-09 Matthew Malcomson <matthew.malcomson@arm.com> + PR ld/25677 + * aout/aout64.h (N_DATADDR): Add IMAGIC case. - * opcode/aarch64.h (enum aarch64_insn_class): Add sve_size_hsd2 iclass. +2020-04-02 Jan W. Jagersma <jwjagersma@gmail.com> -2019-05-09 Matthew Malcomson <matthew.malcomson@arm.com> + * coff/go32exe.h: Remove file. + * coff/internal.h (struct internal_filehdr): Remove field + go32stub. Remove flag F_GO32STUB. - * opcode/aarch64.h (enum aarch64_opnd): New SVE_IMM_ROT3 operand. +2020-04-01 Martin Liska <mliska@suse.cz> + Maciej W. Rozycki <macro@linux-mips.org> -2019-05-09 Matthew Malcomson <matthew.malcomson@arm.com> + PR lto/94249 + * plugin-api.h: Fix a typo. - * opcode/aarch64.h (AARCH64_FEATURE_SVE2 - AARCH64_FEATURE_SVE2_AES, AARCH64_FEATURE_SVE2_BITPERM, - AARCH64_FEATURE_SVE2_SM4, AARCH64_FEATURE_SVE2_SHA3): New - feature macros. +2020-03-30 Nelson Chu <nelson.chu@sifive.com> -2019-05-06 Andrew Bennett <andrew.bennett@imgtec.com> - Faraz Shahbazker <fshahbazker@wavecomp.com> + * opcode/riscv-opc.h: Update CSR to 1.11. - * opcode/mips.h (ASE_EVA_R6): New macro. - (M_LLWPE_AB, M_SCWPE_AB): New enum values. +2020-03-26 John Baldwin <jhb@FreeBSD.org> -2019-05-01 Sudakshina Das <sudi.das@arm.com> + * elf/common.h (AT_FREEBSD_BSDFLAGS): Define. - * opcode/aarch64.h (AARCH64_FEATURE_TME): New. - (enum aarch64_opnd): Add AARCH64_OPND_TME_UIMM16. +2020-03-24 Martin Liska <mliska@suse.cz> -2019-04-26 Andrew Bennett <andrew.bennett@imgtec.com> - Faraz Shahbazker <fshahbazker@wavecomp.com> + PR lto/94249 + * plugin-api.h: Add more robust endianess detection. - * opcode/mips.h (M_LLWP_AB, M_LLDP_AB): New enum values. - (M_SCWP_AB, M_SCDP_AB): Likewise. +2020-03-21 Martin Liska <mliska@suse.cz> -2019-04-25 Maciej W. Rozycki <macro@linux-mips.org> + * plugin-api.h (enum ld_plugin_symbol_type): Remove + comma after last value of an enum. + * lto-symtab.h (enum gcc_plugin_symbol_type): Likewise. - * opcode/mips.h: Update comment for MIPS32 CODE20 operand. +2020-03-19 Martin Liska <mliska@suse.cz> -2019-04-15 Sudakshina Das <sudi.das@arm.com> + * lto-symtab.h (enum gcc_plugin_symbol_type): New. + (enum gcc_plugin_symbol_section_kind): Likewise. - * elf/arm.h (START_RELOC_NUMBERS): New entry for R_ARM_THM_BF12. +2020-03-19 Martin Liska <mliska@suse.cz> -2019-04-15 Sudakshina Das <sudi.das@arm.com> + * plugin-api.h (struct ld_plugin_symbol): Split + int def into 4 char fields. + (enum ld_plugin_symbol_type): New. + (enum ld_plugin_symbol_section_kind): New. + (enum ld_plugin_tag): Add LDPT_ADD_SYMBOLS_V2. - * elf/arm.h (START_RELOC_NUMBERS): New entry for R_ARM_THM_BF18. +2020-03-13 Kamil Rytarowski <n54@gmx.com> -2019-04-15 Sudakshina Das <sudi.das@arm.com> + * elf/common.h (NT_NETBSDCORE_LWPSTATUS): New define. - * elf/arm.h (START_RELOC_NUMBERS): New entry for R_ARM_THM_BF16. +2020-03-13 Kamil Rytarowski <n54@gmx.com> -2019-04-15 Thomas Preud'homme <thomas.preudhomme@arm.com> + * elf/common.h (NT_NETBSDCORE_AUXV): New define. - * elf/arm.h (TAG_CPU_ARCH_V8_1M_MAIN): new macro. - (MAX_TAG_CPU_ARCH): Set value to above macro. - * opcode/arm.h (ARM_EXT2_V8_1M_MAIN): New macro. - (ARM_AEXT_V8_1M_MAIN): Likewise. - (ARM_AEXT2_V8_1M_MAIN): Likewise. - (ARM_ARCH_V8_1M_MAIN): Likewise. +2020-03-13 Christophe Lyon <christophe.lyon@linaro.org> -2019-04-11 Sudakshina Das <sudi.das@arm.com> + * bfdlink.h (bfd_link_info): Add non_contiguous_regions and + non_contiguous_regions_warnings fields. - * opcode/aarch64.h (enum aarch64_opnd): Add AARCH64_OPND_Rt_SP. +2020-03-13 Christian Eggers <ceggers@gmx.de> -2019-04-08 H.J. Lu <hongjiu.lu@intel.com> + * bfdlink.h (struct bfd_link_order): Add unit (bytes/octets) to + offset and size members. + * elf/internal.h (struct elf_internal_phdr): Likewise for + p_align member. + (struct elf_segment_map): Likewise for p_paddr and p_size + members - * elf/common.h (GNU_PROPERTY_X86_ISA_1_AVX512_BF16): New. +2020-03-13 Christian Eggers <ceggers@gmx.de> -2019-04-07 Alan Modra <amodra@gmail.com> + * elf/internal.h (struct elf_internal_phdr): Add unit (octets) + to several member field comments. + (Elf_Internal_Shdr): likewise. - Merge from gcc. - 2019-04-03 Vineet Gupta <vgupta@synopsys.com> - PR89877 - * longlong.h [__arc__] (add_ssaaaa): Add cc clobber. - (sub_ddmmss): Likewise. +2020-03-10 Alan Modra <amodra@gmail.com> -2019-04-06 H.J. Lu <hongjiu.lu@intel.com> + * som/aout.h (SOM_AUX_ID_MANDATORY, SOM_SPACE_IS_LOADABLE), + (SOM_SYMBOL_HIDDEN, SOM_SYMBOL_HAS_LONG_RETURN): Use 1u << 31. + * som/lst.h (LST_SYMBOL_HIDDEN): Likewise. - * bfdlink.h (bfd_link_info): Remove x86-specific linker options. +2020-03-03 Luis Machado <luis.machado@linaro.org> -2019-04-01 Andre Vieira <andre.simoesdiasvieira@arm.com> + * elf/common.h (AT_L1I_CACHESIZE, AT_L1I_CACHEGEOMETRY) + (AT_L1D_CACHESIZE, AT_L1D_CACHEGEOMETRY, AT_L2_CACHESIZE) + (AT_L2_CACHEGEOMETRY, AT_L3_CACHESIZE, AT_L3_CACHEGEOMETRY) + (AT_MINSIGSTKSZ): New defines, imported from glibc. - * opcode/arm.h (FPU_NEON_ARMV8_1): New. - (FPU_ARCH_NEON_VFP_ARMV8_1): Use FPU_NEON_ARMV8_1. - (FPU_ARCH_CRYPTO_NEON_VFP_ARMV8_1): Likewise. - (FPU_ARCH_DOTPROD_NEON_VFP_ARMV8): Likewise. - (FPU_ARCH_NEON_VFP_ARMV8_2_FP16): New. - (FPU_ARCH_NEON_VFP_ARMV8_2_FP16FML): New. - (FPU_ARCH_NEON_VFP_ARMV8_4_FP16FML): New. - (FPU_ARCH_CRYPTO_NEON_VFP_ARMV8_4): New. +2020-02-25 Andrew Burgess <andrew.burgess@embecosm.com> + + Import from gcc mainline: + 2020-02-05 Andrew Burgess <andrew.burgess@embecosm.com> + + * hashtab.h (htab_remove_elt): Make a parameter const. + (htab_remove_elt_with_hash): Likewise. + +2020-02-20 Nelson Chu <nelson.chu@sifive.com> + + * opcode/riscv-opc.h: Extend DECLARE_CSR and DECLARE_CSR_ALIAS to + record riscv_csr_class. + +2020-02-10 Stam Markianos-Wright <stam.markianos-wright@arm.com> + Matthew Malcomson <matthew.malcomson@arm.com> -2019-03-28 Alan Modra <amodra@gmail.com> + * opcode/arm.h (ARM_EXT2_CDE): New extension macro. + (ARM_EXT2_CDE0): New extension macro. + (ARM_EXT2_CDE1): New extension macro. + (ARM_EXT2_CDE2): New extension macro. + (ARM_EXT2_CDE3): New extension macro. + (ARM_EXT2_CDE4): New extension macro. + (ARM_EXT2_CDE5): New extension macro. + (ARM_EXT2_CDE6): New extension macro. + (ARM_EXT2_CDE7): New extension macro. - PR 24390 - * opcode/ppc.h (PPC_OPERAND_CR_REG): Comment. +2020-02-07 Sergey Belyashov <sergey.belyashov@gmail.com> -2019-03-25 Tamar Christina <tamar.christina@arm.com> + PR 25469 + * coff/internal.h (R_IMM16BE): Define. + * elf/z80.h (EF_Z80_MACH_Z80N): Define. + (R_Z80_16_BE): New reloc. - * dis-asm.h (struct disassemble_info): Add stop_offset. +2020-02-04 Alan Modra <amodra@gmail.com> -2019-03-13 Sudakshina Das <sudi.das@arm.com> + * opcode/d30v.h (struct pd_reg): Make value field unsigned. - * elf/aarch64.h (DT_AARCH64_PAC_PLT): New. +2020-01-16 Jon Turney <jon.turney@dronecode.org.uk> -2019-03-13 Sudakshina Das <sudi.das@arm.com> - Szabolcs Nagy <szabolcs.nagy@arm.com> + * coff/internal.h (PE_IMAGE_DEBUG_TYPE_VC_FEATURE) + (PE_IMAGE_DEBUG_TYPE_POGO, PE_IMAGE_DEBUG_TYPE_ILTCG) + (PE_IMAGE_DEBUG_TYPE_MPX, PE_IMAGE_DEBUG_TYPE_REPRO): Add. - * elf/aarch64.h (DT_AARCH64_BTI_PLT): New. +2020-01-18 Nick Clifton <nickc@redhat.com> -2019-03-13 Sudakshina Das <sudi.das@arm.com> + Binutils 2.34 branch created. - * elf/common.h (GNU_PROPERTY_AARCH64_FEATURE_1_AND): New. - (GNU_PROPERTY_AARCH64_FEATURE_1_BTI): New. - (GNU_PROPERTY_AARCH64_FEATURE_1_PAC): New. +2020-01-17 Nick Clifton <nickc@redhat.com> -2019-02-20 Alan Hayward <alan.hayward@arm.com> + * Import from gcc mainline: + 2019-06-10 Martin Liska <mliska@suse.cz> - * elf/common.h (NT_ARM_PAC_MASK): Add define. + * ansidecl.h (ATTRIBUTE_WARN_UNUSED_RESULT): New macro. + * libiberty.h (xmalloc): Use it. + (xrealloc): Likewise. + (xcalloc): Likewise. + (xstrdup): Likewise. + (xstrndup): Likewise. + (xmemdup): Likewise. -2019-02-15 Saagar Jha <saagar@saagarjha.com> + 2019-06-10 Martin Liska <mliska@suse.cz> - * mach-o/loader.h: Use new OS names in comments. + * ansidecl.h: + (ATTRIBUTE_RESULT_SIZE_1): Define new macro. + (ATTRIBUTE_RESULT_SIZE_2): Likewise. + (ATTRIBUTE_RESULT_SIZE_1_2): Likewise. + * libiberty.h (xmalloc): Add RESULT_SIZE attribute. + (xrealloc): Likewise. + (xcalloc): Likewise. -2019-02-11 Philippe Waroquiers <philippe.waroquiers@skynet.be> + 2019-11-16 Tim Ruehsen <tim.ruehsen@gmx.de> - * splay-tree.h (splay_tree_delete_key_fn): Update comment. - (splay_tree_delete_value_fn): Likewise. + * demangle.h (struct demangle_component): Add member + d_counting. -2019-01-31 Andreas Krebbel <krebbel@linux.ibm.com> + 2019-11-16 Eduard-Mihai Burtescu <eddyb@lyken.rs> - * opcode/s390.h (enum s390_opcode_cpu_val): Add - S390_OPCODE_ARCH13. + * demangle.h (rust_demangle_callback): Add. -2019-01-25 Sudakshina Das <sudi.das@arm.com> - Ramana Radhakrishnan <ramana.radhakrishnan@arm.com> + 2019-07-18 Eduard-Mihai Burtescu <eddyb@lyken.rs> - * opcode/aarch64.h (enum aarch64_opnd): Remove - AARCH64_OPND_ADDR_SIMPLE_2. - (enum aarch64_insn_class): Remove ldstgv_indexed. + * demangle.h (rust_is_mangled): Move to libiberty/rust-demangle.h. + (rust_demangle_sym): Move to libiberty/rust-demangle.h. -2019-01-22 Tom Tromey <tom@tromey.com> +2020-01-16 Andre Vieira <andre.simoesdiasvieira@arm.com> - * coff/ecoff.h: Include coff/sym.h. + PR 25376 + * opcodes/arm.h (FPU_MVE, FPU_MVE_FPU): Move these features to... + (ARM_EXT2_MVE, ARM_EXT2_MVE_FP): ... the CORE_HIGH space. + (ARM_ANY): Redefine to not include any MVE bits. + (ARM_FEATURE_ALL): Removed. -2018-06-24 Nick Clifton <nickc@redhat.com> +2020-01-15 Jozef Lawrynowicz <jozef.l@mittosystems.com> - 2.32 branch created. + * opcode/msp430.h (enum msp430_expp_e): New. + (struct msp430_operand_s): Add expp member to struct. -2019-01-16 Kito Cheng <kito@andestech.com> +2020-01-13 Claudiu Zissulescu <claziss@gmail.com> - * elf/riscv.h (SHT_RISCV_ATTRIBUTES): Define. - (Tag_RISCV_arch): Likewise. - (Tag_RISCV_priv_spec): Likewise. - (Tag_RISCV_priv_spec_minor): Likewise. - (Tag_RISCV_priv_spec_revision): Likewise. - (Tag_RISCV_unaligned_access): Likewise. - (Tag_RISCV_stack_align): Likewise. + * elf/arc-cpu.def: Update ARC cpu list. -2019-01-14 Pavel I. Kryukov <kryukov@frtk.ru> +2020-01-13 Alan Modra <amodra@gmail.com> - * dis-asm.h: include <string.h> + * opcode/tic4x.h (EXTR): Delete. + (EXTRU, EXTRS, INSERTU, INSERTS): Rewrite without zero/sign + extension using shifts. Do trim INSERTU value to specified bitfield. -2019-01-10 Nick Clifton <nickc@redhat.com> +2020-01-10 Alan Modra <amodra@gmail.com> - * Merge from GCC: - 2018-12-22 Jason Merrill <jason@redhat.com> + * opcode/spu.h: Formatting. + (UNSIGNED_EXTRACT): Use 1u. + (SIGNED_EXTRACT): Don't sign extend with shifts. + (DECODE_INSN_I9a, DECODE_INSN_I9b): Avoid left shift of signed value. + Keep result signed. + (DECODE_INSN_U9a, DECODE_INSN_U9b): Delete. - * demangle.h: Remove support for ancient GNU (pre-3.0), Lucid, - ARM, HP, and EDG demangling styles. +2020-01-07 Shahab Vahedi <shahab@synopsys.com> -2019-01-09 Sandra Loosemore <sandra@codesourcery.com> + * opcode/arc.h (insn_class_t): Add 'LLOCK' and 'SCOND'. - Merge from GCC: - PR other/16615 +2020-01-02 Sergey Belyashov <sergey.belyashov@gmail.com> - * libiberty.h: Mechanically replace "can not" with "cannot". - * plugin-api.h: Likewise. + * coff/internal.h: Add defintions of Z80 reloc names. -2018-12-25 Yoshinori Sato <ysato@users.sourceforge.jp> +2020-01-02 Christian Biesinger <cbiesinger@google.com> - * elf/rx.h (EF_RX_CPU_MASK): Update new bits. - (E_FLAG_RX_V3): New RXv3 type. - * opcode/rx.h (RX_Size): Add double size. - (RX_Operand_Type): Add double FPU registers. - (RX_Opcode_ID): Add new instuctions. + * opcode/s12z.h: Undef REG_Y. -2019-01-01 Alan Modra <amodra@gmail.com> +2020-01-01 Alan Modra <amodra@gmail.com> Update year range in copyright notice of all files. -For older changes see ChangeLog-2018 +For older changes see ChangeLog-2019 -Copyright (C) 2019 Free Software Foundation, Inc. +Copyright (C) 2020 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/include/ChangeLog-2019 gdb-10.2/include/ChangeLog-2019 --- gdb-9.1/include/ChangeLog-2019 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/include/ChangeLog-2019 2020-09-13 02:33:41.000000000 +0000 @@ -0,0 +1,773 @@ +2019-12-17 Alan Modra <amodra@gmail.com> + + * coff/tic80.h: Delete file. + * opcode/tic80.h: Delete file. + +2019-12-16 Alan Modra <amodra@gmail.com> + + * opcode/crx.h (inst <match>): Make unsigned int. + +2019-12-16 Alan Modra <amodra@gmail.com> + + * opcode/nds32.h (N32_BIT): Define using 1u. + (__SEXT): Use __MASK and N32_BIT. + (N32_IMMS): Remove duplicate mask. + +2019-12-12 Luis Machado <luis.machado@linaro.org> + + * diagnostics.h (DIAGNOSTIC_IGNORE_UNUSED_FUNCTION). Remove + definitions. + +2019-12-11 Alan Modra <amodra@gmail.com> + + * opcode/mmix.h (PUSHGO_INSN_BYTE): Make unsigned. + (GO_INSN_BYTE, SETL_INSN_BYTE, INCML_INSN_BYTE, INCMH_INSN_BYTE), + (INCH_INSN_BYTE, SWYM_INSN_BYTE, JMP_INSN_BYTE): Likewise. + +2019-12-11 Alan Modra <amodra@gmail.com> + + * dis-asm.h (INSN_HAS_RELOC, DISASSEMBLE_DATA), + (USER_SPECIFIED_MACHINE_TYPE, WIDE_OUTPUT): Make unsigned. + * opcode/tic80.h (TIC80_OPERAND_*): Likewise. + +2019-12-10 Alan Modra <amodra@gmail.com> + + PR 24960 + * dis-asm.h (disassemble_free_target): Declare. + +2019-12-10 Alan Modra <amodra@gmail.com> + + * dis-asm.h (struct disassemble_info): Delete insn_sets. + (INIT_DISASSEMBLE_INFO_NO_ARCH): Don't define. + +2019-12-05 Jan Beulich <jbeulich@suse.com> + + * opcode/aarch64.h (AARCH64_FEATURE_CRYPTO): Expand to the + combination of AES and SHA2. + +2019-11-25 Alan Modra <amodra@gmail.com> + + * coff/ti.h (GET_SCNHDR_SIZE, PUT_SCNHDR_SIZE, GET_SCN_SCNLEN), + (PUT_SCN_SCNLEN): Adjust bfd_octets_per_byte calls. + +2019-11-22 Mihail Ionescu <mihail.ionescu@arm.com> + + * opcode/arm.h (ARM_EXT2_CRC): New extension feature + to replace CRC_EXT_ARMV8. + (CRC_EXT_ARMV8): Remove and mark bit as unused. + (ARM_ARCH_V8A_CRC, ARM_ARCH_V8_1A, ARM_ARCH_V8_2A, + ARM_ARCH_V8_3A, ARM_ARCH_V8_4A, ARM_ARCH_V8_5A, + ARM_ARCH_V8_6A): Redefine using ARM_EXT2_CRC instead of + CRC_EXT_ARMV8. + +2019-11-18 Andrew Burgess <andrew.burgess@embecosm.com> + + * dwarf2.h (DW_CIE_VERSION): Delete. + +2019-11-07 Mihail Ionescu <mihail.ionescu@arm.com> + + * opcode/arm.h (ARM_EXT2_I8MM): New feature macro. + +2019-11-07 Mihail Ionescu <mihail.ionescu@arm.com> + + * opcode/aarch64.h (AARCH64_FEATURE_I8MM): New. + (AARCH64_FEATURE_F32MM): New. + (AARCH64_FEATURE_F64MM): New. + (AARCH64_OPND_SVE_ADDR_RI_S4x32): New. + (enum aarch64_insn_class): Add new instruction class "aarch64_misc" for + instructions that do not require special handling. + +2019-11-07 Mihail Ionescu <mihail.ionescu@arm.com> + Matthew Malcomson <matthew.malcomson@arm.com> + + * opcode/arm.h (ARM_EXT2_V8_6A, ARM_AEXT2_V8_6A, + ARM_ARCH_V8_6A): New. + * opcode/arm.h (ARM_EXT2_BF16): New feature macro. + (ARM_AEXT2_V8_6A): Include above macro in definition. + +2019-11-07 Mihail Ionescu <mihail.ionescu@arm.com> + Matthew Malcomson <matthew.malcomson@arm.com> + + * opcode/aarch64.h (AARCH64_FEATURE_BFLOAT16): New feature macros. + (AARCH64_ARCH_V8_6): Include BFloat16 feature macros. + (enum aarch64_opnd_qualifier): Introduce new operand qualifier + AARCH64_OPND_QLF_S_2H. + (enum aarch64_insn_class): Introduce new class "bfloat16". + (BFLOAT16_SVE_INSNC): New feature set for bfloat16 + instructions to support the movprfx constraint. + +2019-11-07 Mihail Ionescu <mihail.ionescu@arm.com> + Matthew Malcomson <matthew.malcomson@arm.com> + + * opcode/aarch64.h (AARCH64_FEATURE_V8_6): New. + (AARCH64_ARCH_V8_6): New. + +2019-11-07 Alan Modra <amodra@gmail.com> + + * elf/cr16c.h: Delete. + +2019-10-29 Andrew Eikum <aeikum@codeweavers.com> + + * coff/internal.h (struct internal_extra_pe_filehdr): Use ints + instead of longs to hold dos_message. + +2019-10-25 Alan Modra <amodra@gmail.com> + + PR 4499 + * elf/internal.h (struct elf_segment_map): Delete header_size. + Add no_sort_lma and idx. + +2019-10-16 Alan Modra <amodra@gmail.com> + + PR 13616 + * bfdlink.h (struct bfd_link_info <big_endian>): New field. + +2019-10-07 Jozef Lawrynowicz <jozef.l@mittosystems.com> + + * elf/msp430.h: Add enums for MSPABI and GNU object attribute tag + names and values. + +2019-09-23 Nick Alcock <nick.alcock@oracle.com> + + * ctf-api.h (ctf_cuname_set): Can now fail, returning int. + (ctf_parent_name_set): Likewise. + +2019-08-05 Nick Alcock <nick.alcock@oracle.com> + + * ctf-api.h (ECTF_NONREPRESENTABLE): New. + +2019-09-23 Nick Alcock <nick.alcock@oracle.com> + + * ctf-api.h: Note the instability of the ctf_link interfaces. + +2019-07-13 Nick Alcock <nick.alcock@oracle.com> + + * bfdlink.h (elf_strtab_hash): New forward. + (elf_sym_strtab): Likewise. + (struct bfd_link_callbacks <examine_strtab>): New. + (struct bfd_link_callbacks <emit_ctf>): Likewise. + +2019-07-13 Nick Alcock <nick.alcock@oracle.com> + + * ctf-api.h (includes): No longer include <sys/param.h>. + +2019-07-30 Nick Alcock <nick.alcock@oracle.com> + + * ctf-api.h (ctf_link_add_cu_mapping): New. + (ctf_link_memb_name_changer_f): New. + (ctf_link_set_memb_name_changer): New. + +2019-07-13 Nick Alcock <nick.alcock@oracle.com> + + * ctf-api.h (ECTF_INTERNAL): New. + +2019-07-13 Nick Alcock <nick.alcock@oracle.com> + + * ctf-api.h (struct ctf_link_sym): New, a symbol in flight to the + libctf linking machinery. + (CTF_LINK_SHARE_UNCONFLICTED): New. + (CTF_LINK_SHARE_DUPLICATED): New. + (ECTF_LINKADDEDLATE): New, replacing ECTF_UNUSED. + (ECTF_NOTYET): New, a 'not yet implemented' message. + (ctf_link_add_ctf): New, add an input file's CTF to the link. + (ctf_link): New, merge the type and string sections. + (ctf_link_strtab_string_f): New, callback for feeding strtab info. + (ctf_link_iter_symbol_f): New, callback for feeding symtab info. + (ctf_link_add_strtab): New, tell the CTF linker about the ELF + strtab's strings. + (ctf_link_shuffle_syms): New, ask the CTF linker to shuffle its + symbols into symtab order. + (ctf_link_write): New, ask the CTF linker to write the CTF out. + +2019-07-13 Nick Alcock <nick.alcock@oracle.com> + + * ctf-api.h (ctf_arc_write_fd): New. + (ctf_write_mem): Likewise. + (ctf_gzwrite): Spacing fix. + +2019-07-13 Nick Alcock <nick.alcock@oracle.com> + + * ctf.h (CTF_SET_STID): New. + +2019-07-13 Nick Alcock <nick.alcock@oracle.com> + + * ctf-api.h (ctf_type_all_f): New. + (ctf_type_iter_all): New. + +2019-07-11 Nick Alcock <nick.alcock@oracle.com> + + * ctf.h: Add object index and function index sections. Describe + them. Improve the description of the variable section and clarify + the constraints on backward-pointing type nodes. + (ctf_header): Add cth_objtidxoff, cth_funcidxoff. + +2019-07-06 Nick Alcock <nick.alcock@oracle.com> + + * ctf-api.h (ctf_cuname): New function. + (ctf_cuname_set): Likewise. + * ctf.h: Improve comment around upgrading, no longer + implying that v2 is the target of upgrades (it is v3 now). + (ctf_header_v2_t): New, old-format header for backward + compatibility. + (ctf_header_t): Add cth_cuname: this is the first of several + header changes in format v3. + +2019-09-23 Alan Modra <amodra@gmail.com> + + * bfdlink.h (struct bfd_section_already_linked): Forward declare. + (bfd_section_already_linked_table_init), + (bfd_section_already_linked_table_free), + (_bfd_handle_already_linked, _bfd_nearby_section), + (_bfd_fix_excluded_sec_syms): Declare. + +2019-09-23 Alan Modra <amodra@gmail.com> + + * bfdlink.h (enum notice_asneeded_action): Define. + +2019-09-17 Maxim Blinov <maxim.blinov@embecosm.com> + + * opcode/riscv.h (riscv_insn_class): New enum. + * opcode/riscv.h (struct riscv_opcode): Change + subset field to insn_class field. + +2019-09-09 Phil Blundell <pb@pbcl.net> + + binutils 2.33 branch created. + +2019-08-30 Claudiu Zissulescu <claziss@gmail.com> + + * opcode/arc.h (FASTMATH): Move it from insn_class_t to + insn_subclass_t enum. + +2019-08-22 Alan Modra <amodra@gmail.com> + + * elf/arm.h (ARM_GET_SYM_CMSE_SPCL, ARM_SET_SYM_CMSE_SPCL): Delete. + +2019-08-09 Mihailo Stojanovic <mihailo.stojanovic@rt-rk.com> + + * elf/mips.h (SHT_GNU_XHASH): New define. + (DT_GNU_XHASH): New define. + +2019-08-08 Yoshinori Sato <ysato@users.sourceforge.jp> + + * opcode/h8300.h (EXPAND_UNOP_EXTENDED_B): Add MODEL. + (EXPAND_UNOP_EXTENDED_W): Likewise. + (EXPAND_UNOP_EXTENDED_L): Likewise. + (struct h8_opcode h8_opcodes): Likewise. + (struct h8_opcode h8_opcodes): tas / ldm / stm supported H8S or + later. + +2019-07-24 Claudiu Zissulescu <claziss@synopsys.com> + + * opcode/arc.h (FASTMATH): Add. + (SWITCH): Likewise. + +2019-07-24 Alan Modra <amodra@gmail.com> + + * elf/internal.h (ELF_SECTION_IN_SEGMENT_1): Exclude non-alloc + sections in GNU_MBIND segments. + +2019-07-23 Omar Majid <omajid@redhat.com> + + * coff/i386.h (IMAGE_FILE_MACHINE_NATIVE_APPLE_OVERRIDE): Define. + (IMAGE_FILE_MACHINE_NATIVE_FREEBSD_OVERRIDE): Define. + (IMAGE_FILE_MACHINE_NATIVE_LINUX_OVERRIDE): Define. + (IMAGE_FILE_MACHINE_NATIVE_NETBSD_OVERRIDE): Define. + (I386_APPLE_MAGIC): Define. + (I386_FREEBSD_MAGIC): Define. + (I386_LINUX_MAGIC): Define. + (I386_NETBSD_MAGIC): Define. + (I386BADMAG): Extend macro to allow new magic numbers. + * coff/x86_64.h (IMAGE_FILE_MACHINE_NATIVE_APPLE_OVERRIDE): Define. + (IMAGE_FILE_MACHINE_NATIVE_FREEBSD_OVERRIDE): Define. + (IMAGE_FILE_MACHINE_NATIVE_LINUX_OVERRIDE): Define. + (IMAGE_FILE_MACHINE_NATIVE_NETBSD_OVERRIDE): Define. + (AMD64_APPLE_MAGIC): Define. + (AMD64_FREEBSD_MAGIC): Define. + (AMD64_LINUX_MAGIC): Define. + (AMD64_NETBSD_MAGIC): Define. + (AMD64BADMAG): Extend macro to allow new magic numbers. + +2019-07-19 Alan Modra <amodra@gmail.com> + + * elf/ppc64.h (R_PPC64_TPREL34, R_PPC64_DTPREL34), + (R_PPC64_GOT_TLSGD34, R_PPC64_GOT_TLSLD34), + (R_PPC64_GOT_TPREL34, R_PPC64_GOT_DTPREL34): Define. + (IS_PPC64_TLS_RELOC): Include new tls relocs. + +2019-07-18 Nick Alcock <nick.alcock@oracle.com> + + * ctf-api.h (ECTF_NOTFUNC): Fix description. + (ctf_func_type_info): New. + (ctf_func_type_args): Likewise. + (ctf_type_aname_raw): Likewise. + +2019-07-16 Jan Beulich <jbeulich@suse.com> + + * opcode/i386.h (POP_SEG386_SHORT): New. + +2019-07-01 Matthew Malcomson <matthew.malcomson@arm.com> + + * opcode/aarch64.h (enum aarch64_insn_class): sve_size_013 + renamed to sve_size_13. + +2019-06-19 Nick Alcock <nick.alcock@oracle.com> + + * ctf.h (ctf_slice_t): Make cts_offset and cts_bits unsigned + short, so following structures are properly aligned. + +2019-06-14 Szabolcs Nagy <szabolcs.nagy@arm.com> + + * elf/aarch64.h (R_AARCH64_P32_MOVW_PREL_G0): Define. + (R_AARCH64_P32_MOVW_PREL_G0_NC): Define. + (R_AARCH64_P32_MOVW_PREL_G1): Define. + +2019-06-03 Nick Alcock <nick.alcock@oracle.com> + + * ctf.h (ctf_enum.cte_value): Fix type to int32_t. + +2019-05-29 Nick Alcock <nick.alcock@oracle.com> + + * ctf-api.h (ctf_sect_t): Drop cts_type, cts_flags, and cts_offset. + (ctf_id_t): This is now an unsigned type. + (CTF_ERR): Cast it to ctf_id_t. Note that it should only be used + for ctf_id_t-returning functions. + +2019-05-28 Nick Alcock <nick.alcock@oracle.com> + + * ctf-api.h (ctf_dump_decorate_f): New. + (ctf_dump_state_t): new. + (ctf_dump): New. + +2019-05-28 Nick Alcock <nick.alcock@oracle.com> + + * ctf-api.h (ctf_label_f): New. + (ctf_label_set): New. + (ctf_label_get): New. + (ctf_label_topmost): New. + (ctf_label_info): New. + (ctf_label_iter): New. + +2019-05-28 Nick Alcock <nick.alcock@oracle.com> + + * ctf-api.h (ctf_version): New. + +2019-05-28 Nick Alcock <nick.alcock@oracle.com> + + * ctf-api.h (ctf_func_info): New. + (ctf_func_args): Likewise. + (ctf_lookup_by_symbol): Likewise. + (ctf_lookup_by_symbol): Likewise. + (ctf_lookup_variable): Likewise. + +2019-05-28 Nick Alcock <nick.alcock@oracle.com> + + * ctf-api.h (ctf_visit_f): New definition. + (ctf_member_f): Likewise. + (ctf_enum_f): Likewise. + (ctf_variable_f): Likewise. + (ctf_type_f): Likewise. + (ctf_type_isparent): Likewise. + (ctf_type_ischild): Likewise. + (ctf_type_resolve): Likewise. + (ctf_type_aname): Likewise. + (ctf_type_lname): Likewise. + (ctf_type_name): Likewise. + (ctf_type_sizee): Likewise. + (ctf_type_align): Likewise. + (ctf_type_kind): Likewise. + (ctf_type_reference): Likewise. + (ctf_type_pointer): Likewise. + (ctf_type_encoding): Likewise. + (ctf_type_visit): Likewise. + (ctf_type_cmp): Likewise. + (ctf_type_compat): Likewise. + (ctf_member_info): Likewise. + (ctf_array_info): Likewise. + (ctf_enum_name): Likewise. + (ctf_enum_value): Likewise. + (ctf_member_iter): Likewise. + (ctf_enum_iter): Likewise. + (ctf_type_iter): Likewise. + (ctf_variable_iter): Likewise. + +2019-05-28 Nick Alcock <nick.alcock@oracle.com> + + * ctf-api.h (struct bfd): New forward. + (ctf_fdopen): New. + (ctf_bfdopen): Likewise. + (ctf_open): Likewise. + (ctf_arc_open): Likewise. + +2019-05-28 Nick Alcock <nick.alcock@oracle.com> + + * ctf.h (CTFA_MAGIC): New. + (struct ctf_archive): New. + (struct ctf_archive_modent): Likewise. + * ctf-api.h (ctf_archive_member_f): New. + (ctf_archive_raw_member_f): Likewise. + (ctf_arc_write): Likewise. + (ctf_arc_close): Likewise. + (ctf_arc_open_by_name): Likewise. + (ctf_archive_iter): Likewise. + (ctf_archive_raw_iter): Likewise. + (ctf_get_arc): Likewise. + +2019-05-28 Nick Alcock <nick.alcock@oracle.com> + + * ctf-api.h (ctf_file_close): New declaration. + (ctf_getdatasect): Likewise. + (ctf_parent_file): Likewise. + (ctf_parent_name): Likewise. + (ctf_parent_name_set): Likewise. + (ctf_import): Likewise. + (ctf_setmodel): Likewise. + (ctf_getmodel): Likewise. + (ctf_setspecific): Likewise. + (ctf_getspecific): Likewise. + +2019-05-28 Nick Alcock <nick.alcock@oracle.com> + + * ctf-api.h (zlib.h): New include. + (ctf_sect_t): New. + (ctf_sect_names_t): Likewise. + (ctf_encoding_t): Likewise. + (ctf_membinfo_t): Likewise. + (ctf_arinfo_t): Likewise. + (ctf_funcinfo_t): Likewise. + (ctf_lblinfo_t): Likewise. + (ctf_snapshot_id_t): Likewise. + (CTF_FUNC_VARARG): Likewise. + (ctf_simple_open): Likewise. + (ctf_bufopen): Likewise. + (ctf_create): Likewise. + (ctf_add_array): Likewise. + (ctf_add_const): Likewise. + (ctf_add_enum_encoded): Likewise. + (ctf_add_enum): Likewise. + (ctf_add_float): Likewise. + (ctf_add_forward): Likewise. + (ctf_add_function): Likewise. + (ctf_add_integer): Likewise. + (ctf_add_slice): Likewise. + (ctf_add_pointer): Likewise. + (ctf_add_type): Likewise. + (ctf_add_typedef): Likewise. + (ctf_add_restrict): Likewise. + (ctf_add_struct): Likewise. + (ctf_add_union): Likewise. + (ctf_add_struct_sized): Likewise. + (ctf_add_union_sized): Likewise. + (ctf_add_volatile): Likewise. + (ctf_add_enumerator): Likewise. + (ctf_add_member): Likewise. + (ctf_add_member_offset): Likewise. + (ctf_add_member_encoded): Likewise. + (ctf_add_variable): Likewise. + (ctf_set_array): Likewise. + (ctf_update): Likewise. + (ctf_snapshot): Likewise. + (ctf_rollback): Likewise. + (ctf_discard): Likewise. + (ctf_write): Likewise. + (ctf_gzwrite): Likewise. + (ctf_compress_write): Likewise. + +2019-05-28 Nick Alcock <nick.alcock@oracle.com> + + * ctf-api.h (ctf_errno): New declaration. + (ctf_errmsg): Likewise. + +2019-05-28 Nick Alcock <nick.alcock@oracle.com> + + * ctf-api.h (ctf_setdebug): New. + (ctf_getdebug): Likewise. + +2019-05-28 Nick Alcock <nick.alcock@oracle.com> + + * ctf-api.h: New file. + +2019-05-28 Nick Alcock <nick.alcock@oracle.com> + + * ctf.h: New file. + +2019-05-24 Szabolcs Nagy <szabolcs.nagy@arm.com> + + * elf/aarch64.h (DT_AARCH64_VARIANT_PCS): Define. + (STO_AARCH64_VARIANT_PCS): Define. + +2019-05-24 Alan Modra <amodra@gmail.com> + + * elf/ppc64.h (R_PPC64_PLTSEQ_NOTOC, R_PPC64_PLTCALL_NOTOC), + (R_PPC64_PCREL_OPT, R_PPC64_D34, R_PPC64_D34_LO, R_PPC64_D34_HI30), + (R_PPC64_D34_HA30, R_PPC64_PCREL34, R_PPC64_GOT_PCREL34), + (R_PPC64_PLT_PCREL34, R_PPC64_PLT_PCREL34_NOTOC), + (R_PPC64_ADDR16_HIGHER34, R_PPC64_ADDR16_HIGHERA34), + (R_PPC64_ADDR16_HIGHEST34, R_PPC64_ADDR16_HIGHESTA34), + (R_PPC64_REL16_HIGHER34, R_PPC64_REL16_HIGHERA34), + (R_PPC64_REL16_HIGHEST34, R_PPC64_REL16_HIGHESTA34), + (R_PPC64_D28, R_PPC64_PCREL28): Define. + +2019-05-24 Peter Bergner <bergner@linux.ibm.com> + Alan Modra <amodra@gmail.com> + + * dis-asm.h (WIDE_OUTPUT): Define. + * opcode/ppc.h (prefix_opcodes, prefix_num_opcodes): Declare. + (PPC_OPCODE_POWERXX, PPC_GET_PREFIX, PPC_GET_SUFFIX), + (PPC_PREFIX_P, PPC_PREFIX_SEG): Define. + +2019-05-23 Jose E. Marchesi <jose.marchesi@oracle.com> + + * elf/bpf.h: New file. + +2019-05-16 Andre Vieira <andre.simoesdiasvieira@arm.com> + + * elf/arm.h (Tag_MVE_arch): Define new enum value. + * opcode/arm.h (FPU_MVE, FPU_MVE_FP): New MACROs for new features. + +2019-05-09 Matthew Malcomson <matthew.malcomson@arm.com> + + * opcode/aarch64.h (enum aarch64_opnd): New SVE_SHLIMM_UNPRED_22 + operand. + +2019-05-09 Matthew Malcomson <matthew.malcomson@arm.com> + + * opcode/aarch64.h (enum aarch64_insn_class): Add sve_size_tsz_bhs + iclass. + +2019-05-09 Matthew Malcomson <matthew.malcomson@arm.com> + + * opcode/aarch64.h (enum aarch64_opnd): New SVE_Zm4_11_INDEX operand. + +2019-05-09 Matthew Malcomson <matthew.malcomson@arm.com> + + * opcode/aarch64.h (enum aarch64_insn_class): Add sve_shift_tsz_bhsd + iclass. + +2019-05-09 Matthew Malcomson <matthew.malcomson@arm.com> + + * opcode/aarch64.h (enum aarch64_opnd): New SVE_SHRIMM_UNPRED_22 + operand. + (enum aarch64_insn_class): Add sve_shift_tsz_hsd iclass. + +2019-05-09 Matthew Malcomson <matthew.malcomson@arm.com> + + * opcode/aarch64.h (enum aarch64_insn_class): Add sve_size_013 iclass. + +2019-05-09 Matthew Malcomson <matthew.malcomson@arm.com> + + * opcode/aarch64.h (enum aarch64_insn_class): Add sve_size_bh iclass. + +2019-05-09 Matthew Malcomson <matthew.malcomson@arm.com> + + * opcode/aarch64.h (enum aarch64_insn_class): Add sve_size_sd2 iclass. + +2019-05-09 Matthew Malcomson <matthew.malcomson@arm.com> + + * opcode/aarch64.h (enum aarch64_opnd): New SVE_ADDR_ZX operand. + +2019-05-09 Matthew Malcomson <matthew.malcomson@arm.com> + + * opcode/aarch64.h (enum aarch64_opnd): New SVE_Zm3_11_INDEX operand. + +2019-05-09 Matthew Malcomson <matthew.malcomson@arm.com> + + * opcode/aarch64.h (enum aarch64_insn_class): Add sve_size_hsd2 iclass. + +2019-05-09 Matthew Malcomson <matthew.malcomson@arm.com> + + * opcode/aarch64.h (enum aarch64_opnd): New SVE_IMM_ROT3 operand. + +2019-05-09 Matthew Malcomson <matthew.malcomson@arm.com> + + * opcode/aarch64.h (AARCH64_FEATURE_SVE2 + AARCH64_FEATURE_SVE2_AES, AARCH64_FEATURE_SVE2_BITPERM, + AARCH64_FEATURE_SVE2_SM4, AARCH64_FEATURE_SVE2_SHA3): New + feature macros. + +2019-05-06 Andrew Bennett <andrew.bennett@imgtec.com> + Faraz Shahbazker <fshahbazker@wavecomp.com> + + * opcode/mips.h (ASE_EVA_R6): New macro. + (M_LLWPE_AB, M_SCWPE_AB): New enum values. + +2019-05-01 Sudakshina Das <sudi.das@arm.com> + + * opcode/aarch64.h (AARCH64_FEATURE_TME): New. + (enum aarch64_opnd): Add AARCH64_OPND_TME_UIMM16. + +2019-04-26 Andrew Bennett <andrew.bennett@imgtec.com> + Faraz Shahbazker <fshahbazker@wavecomp.com> + + * opcode/mips.h (M_LLWP_AB, M_LLDP_AB): New enum values. + (M_SCWP_AB, M_SCDP_AB): Likewise. + +2019-04-25 Maciej W. Rozycki <macro@linux-mips.org> + + * opcode/mips.h: Update comment for MIPS32 CODE20 operand. + +2019-04-15 Sudakshina Das <sudi.das@arm.com> + + * elf/arm.h (START_RELOC_NUMBERS): New entry for R_ARM_THM_BF12. + +2019-04-15 Sudakshina Das <sudi.das@arm.com> + + * elf/arm.h (START_RELOC_NUMBERS): New entry for R_ARM_THM_BF18. + +2019-04-15 Sudakshina Das <sudi.das@arm.com> + + * elf/arm.h (START_RELOC_NUMBERS): New entry for R_ARM_THM_BF16. + +2019-04-15 Thomas Preud'homme <thomas.preudhomme@arm.com> + + * elf/arm.h (TAG_CPU_ARCH_V8_1M_MAIN): new macro. + (MAX_TAG_CPU_ARCH): Set value to above macro. + * opcode/arm.h (ARM_EXT2_V8_1M_MAIN): New macro. + (ARM_AEXT_V8_1M_MAIN): Likewise. + (ARM_AEXT2_V8_1M_MAIN): Likewise. + (ARM_ARCH_V8_1M_MAIN): Likewise. + +2019-04-11 Sudakshina Das <sudi.das@arm.com> + + * opcode/aarch64.h (enum aarch64_opnd): Add AARCH64_OPND_Rt_SP. + +2019-04-08 H.J. Lu <hongjiu.lu@intel.com> + + * elf/common.h (GNU_PROPERTY_X86_ISA_1_AVX512_BF16): New. + +2019-04-07 Alan Modra <amodra@gmail.com> + + Merge from gcc. + 2019-04-03 Vineet Gupta <vgupta@synopsys.com> + PR89877 + * longlong.h [__arc__] (add_ssaaaa): Add cc clobber. + (sub_ddmmss): Likewise. + +2019-04-06 H.J. Lu <hongjiu.lu@intel.com> + + * bfdlink.h (bfd_link_info): Remove x86-specific linker options. + +2019-04-01 Andre Vieira <andre.simoesdiasvieira@arm.com> + + * opcode/arm.h (FPU_NEON_ARMV8_1): New. + (FPU_ARCH_NEON_VFP_ARMV8_1): Use FPU_NEON_ARMV8_1. + (FPU_ARCH_CRYPTO_NEON_VFP_ARMV8_1): Likewise. + (FPU_ARCH_DOTPROD_NEON_VFP_ARMV8): Likewise. + (FPU_ARCH_NEON_VFP_ARMV8_2_FP16): New. + (FPU_ARCH_NEON_VFP_ARMV8_2_FP16FML): New. + (FPU_ARCH_NEON_VFP_ARMV8_4_FP16FML): New. + (FPU_ARCH_CRYPTO_NEON_VFP_ARMV8_4): New. + +2019-03-28 Alan Modra <amodra@gmail.com> + + PR 24390 + * opcode/ppc.h (PPC_OPERAND_CR_REG): Comment. + +2019-03-25 Tamar Christina <tamar.christina@arm.com> + + * dis-asm.h (struct disassemble_info): Add stop_offset. + +2019-03-13 Sudakshina Das <sudi.das@arm.com> + + * elf/aarch64.h (DT_AARCH64_PAC_PLT): New. + +2019-03-13 Sudakshina Das <sudi.das@arm.com> + Szabolcs Nagy <szabolcs.nagy@arm.com> + + * elf/aarch64.h (DT_AARCH64_BTI_PLT): New. + +2019-03-13 Sudakshina Das <sudi.das@arm.com> + + * elf/common.h (GNU_PROPERTY_AARCH64_FEATURE_1_AND): New. + (GNU_PROPERTY_AARCH64_FEATURE_1_BTI): New. + (GNU_PROPERTY_AARCH64_FEATURE_1_PAC): New. + +2019-02-20 Alan Hayward <alan.hayward@arm.com> + + * elf/common.h (NT_ARM_PAC_MASK): Add define. + +2019-02-15 Saagar Jha <saagar@saagarjha.com> + + * mach-o/loader.h: Use new OS names in comments. + +2019-02-11 Philippe Waroquiers <philippe.waroquiers@skynet.be> + + * splay-tree.h (splay_tree_delete_key_fn): Update comment. + (splay_tree_delete_value_fn): Likewise. + +2019-01-31 Andreas Krebbel <krebbel@linux.ibm.com> + + * opcode/s390.h (enum s390_opcode_cpu_val): Add + S390_OPCODE_ARCH13. + +2019-01-25 Sudakshina Das <sudi.das@arm.com> + Ramana Radhakrishnan <ramana.radhakrishnan@arm.com> + + * opcode/aarch64.h (enum aarch64_opnd): Remove + AARCH64_OPND_ADDR_SIMPLE_2. + (enum aarch64_insn_class): Remove ldstgv_indexed. + +2019-01-22 Tom Tromey <tom@tromey.com> + + * coff/ecoff.h: Include coff/sym.h. + +2018-06-24 Nick Clifton <nickc@redhat.com> + + 2.32 branch created. + +2019-01-16 Kito Cheng <kito@andestech.com> + + * elf/riscv.h (SHT_RISCV_ATTRIBUTES): Define. + (Tag_RISCV_arch): Likewise. + (Tag_RISCV_priv_spec): Likewise. + (Tag_RISCV_priv_spec_minor): Likewise. + (Tag_RISCV_priv_spec_revision): Likewise. + (Tag_RISCV_unaligned_access): Likewise. + (Tag_RISCV_stack_align): Likewise. + +2019-01-14 Pavel I. Kryukov <kryukov@frtk.ru> + + * dis-asm.h: include <string.h> + +2019-01-10 Nick Clifton <nickc@redhat.com> + + * Merge from GCC: + 2018-12-22 Jason Merrill <jason@redhat.com> + + * demangle.h: Remove support for ancient GNU (pre-3.0), Lucid, + ARM, HP, and EDG demangling styles. + +2019-01-09 Sandra Loosemore <sandra@codesourcery.com> + + Merge from GCC: + PR other/16615 + + * libiberty.h: Mechanically replace "can not" with "cannot". + * plugin-api.h: Likewise. + +2018-12-25 Yoshinori Sato <ysato@users.sourceforge.jp> + + * elf/rx.h (EF_RX_CPU_MASK): Update new bits. + (E_FLAG_RX_V3): New RXv3 type. + * opcode/rx.h (RX_Size): Add double size. + (RX_Operand_Type): Add double FPU registers. + (RX_Opcode_ID): Add new instuctions. + +2019-01-01 Alan Modra <amodra@gmail.com> + + Update year range in copyright notice of all files. + +For older changes see ChangeLog-2018 + +Copyright (C) 2019 Free Software Foundation, Inc. + +Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. + +Local Variables: +mode: change-log +left-margin: 8 +fill-column: 74 +version-control: never +End: diff -Nru gdb-9.1/include/coff/alpha.h gdb-10.2/include/coff/alpha.h --- gdb-9.1/include/coff/alpha.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/coff/alpha.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,7 +1,7 @@ /* ECOFF support on Alpha machines. coff/ecoff.h must be included before this file. - Copyright (C) 2001-2019 Free Software Foundation, Inc. + Copyright (C) 2001-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/include/coff/arm.h gdb-10.2/include/coff/arm.h --- gdb-9.1/include/coff/arm.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/coff/arm.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* ARM COFF support for BFD. - Copyright (C) 1998-2019 Free Software Foundation, Inc. + Copyright (C) 1998-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/coff/ecoff.h gdb-10.2/include/coff/ecoff.h --- gdb-9.1/include/coff/ecoff.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/coff/ecoff.h 2021-04-25 04:06:26.000000000 +0000 @@ -2,7 +2,7 @@ This does not include symbol information, found in sym.h and symconst.h. - Copyright (C) 2001-2019 Free Software Foundation, Inc. + Copyright (C) 2001-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/include/coff/external.h gdb-10.2/include/coff/external.h --- gdb-9.1/include/coff/external.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/coff/external.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* external.h -- External COFF structures - Copyright (C) 2001-2019 Free Software Foundation, Inc. + Copyright (C) 2001-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/include/coff/go32exe.h gdb-10.2/include/coff/go32exe.h --- gdb-9.1/include/coff/go32exe.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/coff/go32exe.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,36 +0,0 @@ -/* COFF information for PC running go32. - - Copyright (C) 2001-2019 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, - MA 02110-1301, USA. */ - -struct external_filehdr_go32_exe - { - char stub[GO32_STUBSIZE]; /* the stub to load the image */ - /* the standard COFF header */ - char f_magic[2]; /* magic number */ - char f_nscns[2]; /* number of sections */ - char f_timdat[4]; /* time & date stamp */ - char f_symptr[4]; /* file pointer to symtab */ - char f_nsyms[4]; /* number of symtab entries */ - char f_opthdr[2]; /* sizeof(optional hdr) */ - char f_flags[2]; /* flags */ - }; - -#undef FILHDR -#define FILHDR struct external_filehdr_go32_exe -#undef FILHSZ -#define FILHSZ GO32_STUBSIZE+20 diff -Nru gdb-9.1/include/coff/i386.h gdb-10.2/include/coff/i386.h --- gdb-9.1/include/coff/i386.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/coff/i386.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* coff information for Intel 386/486. - Copyright (C) 2001-2019 Free Software Foundation, Inc. + Copyright (C) 2001-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/include/coff/ia64.h gdb-10.2/include/coff/ia64.h --- gdb-9.1/include/coff/ia64.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/coff/ia64.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* coff information for HP/Intel IA-64. - Copyright (C) 2000-2019 Free Software Foundation, Inc. + Copyright (C) 2000-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/include/coff/internal.h gdb-10.2/include/coff/internal.h --- gdb-9.1/include/coff/internal.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/coff/internal.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,7 +1,7 @@ /* Internal format of COFF object file data structures, for GNU BFD. This file is part of BFD, the Binary File Descriptor library. - Copyright (C) 1999-2019 Free Software Foundation, Inc. + Copyright (C) 1999-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -58,19 +58,10 @@ bfd_vma nt_signature; /* required NT signature, 0x4550 */ }; -#define GO32_STUBSIZE 2048 - struct internal_filehdr { struct internal_extra_pe_filehdr pe; - /* coff-stgo32 EXE stub header before BFD tdata has been allocated. - Its data is kept in INTERNAL_FILEHDR.GO32STUB afterwards. - - F_GO32STUB is set iff go32stub contains a valid data. Artifical headers - created in BFD have no pre-set go32stub. */ - char go32stub[GO32_STUBSIZE]; - /* Standard coff internal info. */ unsigned short f_magic; /* magic number */ unsigned int f_nscns; /* number of sections */ @@ -93,8 +84,7 @@ F_AR32W file is 32-bit big-endian F_DYNLOAD rs/6000 aix: dynamically loadable w/imports & exports F_SHROBJ rs/6000 aix: file is a shared object - F_DLL PE format DLL - F_GO32STUB Field go32stub contains valid data. */ + F_DLL PE format DLL */ #define F_RELFLG (0x0001) #define F_EXEC (0x0002) @@ -106,7 +96,6 @@ #define F_DYNLOAD (0x1000) #define F_SHROBJ (0x2000) #define F_DLL (0x2000) -#define F_GO32STUB (0x4000) /* Extra structure which is used in the optional header. */ typedef struct _IMAGE_DATA_DIRECTORY @@ -157,6 +146,11 @@ #define PE_IMAGE_DEBUG_TYPE_BORLAND 9 #define PE_IMAGE_DEBUG_TYPE_RESERVED10 10 #define PE_IMAGE_DEBUG_TYPE_CLSID 11 +#define PE_IMAGE_DEBUG_TYPE_VC_FEATURE 12 +#define PE_IMAGE_DEBUG_TYPE_POGO 13 +#define PE_IMAGE_DEBUG_TYPE_ILTCG 14 +#define PE_IMAGE_DEBUG_TYPE_MPX 15 +#define PE_IMAGE_DEBUG_TYPE_REPRO 16 /* Extra structure for a codeview debug record */ #define CV_INFO_SIGNATURE_LENGTH 16 @@ -167,7 +161,7 @@ char Signature[CV_INFO_SIGNATURE_LENGTH]; unsigned int SignatureLength; unsigned long Age; - // char PdbFileName[]; + /* char PdbFileName[]; */ } CODEVIEW_INFO; /* Default image base for NT. */ @@ -807,6 +801,13 @@ /* Z80 modes */ #define R_OFF8 0x32 /* 8 bit signed abs, for (i[xy]+d) */ #define R_IMM24 0x33 /* 24 bit abs */ +#define R_IMM16BE 0x3A /* 16 bit abs, big endian */ /* R_JR, R_IMM8, R_IMM16, R_IMM32 - as for Z8k */ +#define R_BYTE0 0x34 /* first (lowest) 8 bits of multibyte value */ +#define R_BYTE1 0x35 /* second 8 bits of multibyte value */ +#define R_BYTE2 0x36 /* third 8 bits of multibyte value */ +#define R_BYTE3 0x37 /* fourth (highest) 8 bits of multibyte value */ +#define R_WORD0 0x38 /* lowest 16 bits of 32 or 24 bit value */ +#define R_WORD1 0x39 /* highest 16 bits of 32 or 24 bit value */ #endif /* GNU_COFF_INTERNAL_H */ diff -Nru gdb-9.1/include/coff/mcore.h gdb-10.2/include/coff/mcore.h --- gdb-9.1/include/coff/mcore.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/coff/mcore.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Motorola MCore support for BFD. - Copyright (C) 1999-2019 Free Software Foundation, Inc. + Copyright (C) 1999-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/coff/mips.h gdb-10.2/include/coff/mips.h --- gdb-9.1/include/coff/mips.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/coff/mips.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,7 +1,7 @@ /* ECOFF support on MIPS machines. coff/ecoff.h must be included before this file. - Copyright (C) 1999-2019 Free Software Foundation, Inc. + Copyright (C) 1999-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/include/coff/msdos.h gdb-10.2/include/coff/msdos.h --- gdb-9.1/include/coff/msdos.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/coff/msdos.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* msdos.h - MS-DOS and derived executable header information - Copyright (C) 1999-2019 Free Software Foundation, Inc. + Copyright (C) 1999-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/coff/pe.h gdb-10.2/include/coff/pe.h --- gdb-9.1/include/coff/pe.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/coff/pe.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* pe.h - PE COFF header information - Copyright (C) 1999-2019 Free Software Foundation, Inc. + Copyright (C) 1999-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -578,10 +578,10 @@ /* Extra structures used in codeview debug record. */ /* This is not part of the PE specification. */ -#define CVINFO_PDB70_CVSIGNATURE 0x53445352 // "RSDS" -#define CVINFO_PDB20_CVSIGNATURE 0x3031424e // "NB10" -#define CVINFO_CV50_CVSIGNATURE 0x3131424e // "NB11" -#define CVINFO_CV41_CVSIGNATURE 0x3930424e // "NB09" +#define CVINFO_PDB70_CVSIGNATURE 0x53445352 /* "RSDS" */ +#define CVINFO_PDB20_CVSIGNATURE 0x3031424e /* "NB10" */ +#define CVINFO_CV50_CVSIGNATURE 0x3131424e /* "NB11" */ +#define CVINFO_CV41_CVSIGNATURE 0x3930424e /* "NB09" */ typedef struct _CV_INFO_PDB70 { diff -Nru gdb-9.1/include/coff/powerpc.h gdb-10.2/include/coff/powerpc.h --- gdb-9.1/include/coff/powerpc.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/coff/powerpc.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,57 +0,0 @@ -/* Basic coff information for the PowerPC - Based on coff/rs6000.h, coff/i386.h and others. - - Copyright (C) 2001-2019 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, - MA 02110-1301, USA. - - Initial release: Kim Knuttila (krk@cygnus.com) */ -#define L_LNNO_SIZE 2 -#define INCLUDE_COMDAT_FIELDS_IN_AUXENT -#include "coff/external.h" - -/* Bits for f_flags: - F_RELFLG relocation info stripped from file - F_EXEC file is executable (no unresolved external references) - F_LNNO line numbers stripped from file - F_LSYMS local symbols stripped from file - F_AR32WR file has byte ordering of an AR32WR machine (e.g. vax). */ - -#define F_RELFLG (0x0001) -#define F_EXEC (0x0002) -#define F_LNNO (0x0004) -#define F_LSYMS (0x0008) - -/* extra NT defines */ -#define PPCMAGIC 0760 /* peeked on aa PowerPC Windows NT box */ - -/* from winnt.h */ -#define IMAGE_NT_OPTIONAL_HDR_MAGIC 0x10b - -#define PPCBADMAG(x) ((x).f_magic != PPCMAGIC) - -/********************** RELOCATION DIRECTIVES **********************/ - -struct external_reloc -{ - char r_vaddr[4]; - char r_symndx[4]; - char r_type[2]; -}; - -#define RELOC struct external_reloc -#define RELSZ 10 - diff -Nru gdb-9.1/include/coff/rs6000.h gdb-10.2/include/coff/rs6000.h --- gdb-9.1/include/coff/rs6000.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/coff/rs6000.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* IBM RS/6000 "XCOFF" file definitions for BFD. - Copyright (C) 1990-2019 Free Software Foundation, Inc. + Copyright (C) 1990-2020 Free Software Foundation, Inc. Written by Mimi Phuong-Thao Vo of IBM and John Gilmore of Cygnus Support. diff -Nru gdb-9.1/include/coff/rs6k64.h gdb-10.2/include/coff/rs6k64.h --- gdb-9.1/include/coff/rs6k64.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/coff/rs6k64.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* IBM RS/6000 "XCOFF64" file definitions for BFD. - Copyright (C) 2000-2019 Free Software Foundation, Inc. + Copyright (C) 2000-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/include/coff/sh.h gdb-10.2/include/coff/sh.h --- gdb-9.1/include/coff/sh.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/coff/sh.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* coff information for Renesas SH - Copyright (C) 2000-2019 Free Software Foundation, Inc. + Copyright (C) 2000-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/include/coff/tic30.h gdb-10.2/include/coff/tic30.h --- gdb-9.1/include/coff/tic30.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/coff/tic30.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* coff information for Texas Instruments TMS320C3X - Copyright (C) 2001-2019 Free Software Foundation, Inc. + Copyright (C) 2001-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/include/coff/tic4x.h gdb-10.2/include/coff/tic4x.h --- gdb-9.1/include/coff/tic4x.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/coff/tic4x.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,7 +1,7 @@ /* TI COFF information for Texas Instruments TMS320C4X/C3X. This file customizes the settings in coff/ti.h. - Copyright (C) 2002-2019 Free Software Foundation, Inc. + Copyright (C) 2002-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/include/coff/tic54x.h gdb-10.2/include/coff/tic54x.h --- gdb-9.1/include/coff/tic54x.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/coff/tic54x.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,7 +1,7 @@ /* TI COFF information for Texas Instruments TMS320C54X. This file customizes the settings in coff/ti.h. - Copyright (C) 2000-2019 Free Software Foundation, Inc. + Copyright (C) 2000-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/include/coff/tic80.h gdb-10.2/include/coff/tic80.h --- gdb-9.1/include/coff/tic80.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/coff/tic80.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,123 +0,0 @@ -/* coff information for TI TMS320C80 (MVP) - - Copyright (C) 2001-2019 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, - MA 02110-1301, USA. */ - -#define DO_NOT_DEFINE_FILHDR -#define DO_NOT_DEFINE_SCNHDR -#define L_LNNO_SIZE 2 -#include "coff/external.h" - -/********************** FILE HEADER **********************/ - -struct external_filehdr - { - char f_magic[2]; /* magic number */ - char f_nscns[2]; /* number of sections */ - char f_timdat[4]; /* time & date stamp */ - char f_symptr[4]; /* file pointer to symtab */ - char f_nsyms[4]; /* number of symtab entries */ - char f_opthdr[2]; /* sizeof(optional hdr) */ - char f_flags[2]; /* flags */ - char f_target_id[2];/* target id (TIc80 specific) */ -}; - -#define TIC80_ARCH_MAGIC 0x0C1 /* Goes in the file header magic number field */ -#define TIC80_TARGET_ID 0x95 /* Goes in the target id field */ - -#define TIC80BADMAG(x) ((x).f_magic != TIC80_ARCH_MAGIC) - -#define FILHDR struct external_filehdr -#define FILHSZ 22 - -#define TIC80_AOUTHDR_MAGIC 0x108 /* Goes in the optional file header magic number field */ - -/********************** SECTION HEADER **********************/ - -struct external_scnhdr -{ - char s_name[8]; /* section name */ - char s_paddr[4]; /* physical address, aliased s_nlib */ - char s_vaddr[4]; /* virtual address */ - char s_size[4]; /* section size */ - char s_scnptr[4]; /* file ptr to raw data for section */ - char s_relptr[4]; /* file ptr to relocation */ - char s_lnnoptr[4]; /* file ptr to line numbers */ - char s_nreloc[2]; /* number of relocation entries */ - char s_nlnno[2]; /* number of line number entries*/ - char s_flags[2]; /* flags */ - char s_reserved[1]; /* reserved (TIc80 specific) */ - char s_mempage[1]; /* memory page number (TIc80) */ -}; - -/* Names of "special" sections. */ -#define _TEXT ".text" -#define _DATA ".data" -#define _BSS ".bss" -#define _CINIT ".cinit" -#define _CONST ".const" -#define _SWITCH ".switch" -#define _STACK ".stack" -#define _SYSMEM ".sysmem" - -#define SCNHDR struct external_scnhdr -#define SCNHSZ 40 - -/* FIXME - need to correlate external_auxent with - TIc80 Code Generation Tools User's Guide, CG:A-25 */ - -/********************** RELOCATION DIRECTIVES **********************/ - -/* The external reloc has an offset field, because some of the reloc - types on the h8 don't have room in the instruction for the entire - offset - eg the strange jump and high page addressing modes. */ - -struct external_reloc -{ - char r_vaddr[4]; - char r_symndx[4]; - char r_reserved[2]; - char r_type[2]; -}; - -#define RELOC struct external_reloc -#define RELSZ 12 - -/* TIc80 relocation types. */ - -#define R_ABS 0x00 /* Absolute address - no relocation */ -#define R_RELLONGX 0x11 /* PP: 32 bits, direct */ -#define R_PPBASE 0x34 /* PP: Global base address type */ -#define R_PPLBASE 0x35 /* PP: Local base address type */ -#define R_PP15 0x38 /* PP: Global 15 bit offset */ -#define R_PP15W 0x39 /* PP: Global 15 bit offset divided by 4 */ -#define R_PP15H 0x3A /* PP: Global 15 bit offset divided by 2 */ -#define R_PP16B 0x3B /* PP: Global 16 bit offset for bytes */ -#define R_PPL15 0x3C /* PP: Local 15 bit offset */ -#define R_PPL15W 0x3D /* PP: Local 15 bit offset divided by 4 */ -#define R_PPL15H 0x3E /* PP: Local 15 bit offset divided by 2 */ -#define R_PPL16B 0x3F /* PP: Local 16 bit offset for bytes */ -#define R_PPN15 0x40 /* PP: Global 15 bit negative offset */ -#define R_PPN15W 0x41 /* PP: Global 15 bit negative offset divided by 4 */ -#define R_PPN15H 0x42 /* PP: Global 15 bit negative offset divided by 2 */ -#define R_PPN16B 0x43 /* PP: Global 16 bit negative byte offset */ -#define R_PPLN15 0x44 /* PP: Local 15 bit negative offset */ -#define R_PPLN15W 0x45 /* PP: Local 15 bit negative offset divided by 4 */ -#define R_PPLN15H 0x46 /* PP: Local 15 bit negative offset divided by 2 */ -#define R_PPLN16B 0x47 /* PP: Local 16 bit negative byte offset */ -#define R_MPPCR15W 0x4E /* MP: 15 bit PC-relative divided by 4 */ -#define R_MPPCR 0x4F /* MP: 32 bit PC-relative divided by 4 */ diff -Nru gdb-9.1/include/coff/ti.h gdb-10.2/include/coff/ti.h --- gdb-9.1/include/coff/ti.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/coff/ti.h 2021-04-25 04:06:26.000000000 +0000 @@ -2,7 +2,7 @@ customized in a target-specific file, and then this file included (see tic54x.h for an example). - Copyright (C) 2000-2019 Free Software Foundation, Inc. + Copyright (C) 2000-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/include/coff/x86_64.h gdb-10.2/include/coff/x86_64.h --- gdb-9.1/include/coff/x86_64.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/coff/x86_64.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* COFF information for AMD 64. - Copyright (C) 2006-2019 Free Software Foundation, Inc. + Copyright (C) 2006-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/coff/xcoff.h gdb-10.2/include/coff/xcoff.h --- gdb-9.1/include/coff/xcoff.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/coff/xcoff.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Internal format of XCOFF object file data structures for BFD. - Copyright (C) 1995-2019 Free Software Foundation, Inc. + Copyright (C) 1995-2020 Free Software Foundation, Inc. Written by Ian Lance Taylor <ian@cygnus.com>, Cygnus Support. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/coff/z80.h gdb-10.2/include/coff/z80.h --- gdb-9.1/include/coff/z80.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/coff/z80.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* coff information for Zilog Z80 - Copyright (C) 2005-2019 Free Software Foundation, Inc. + Copyright (C) 2005-2020 Free Software Foundation, Inc. Contributed by Arnold Metselaar <arnold_m@operamail.com> This program is free software; you can redistribute it and/or modify diff -Nru gdb-9.1/include/coff/z8k.h gdb-10.2/include/coff/z8k.h --- gdb-9.1/include/coff/z8k.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/coff/z8k.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* coff information for Zilog Z800N - Copyright (C) 2001-2019 Free Software Foundation, Inc. + Copyright (C) 2001-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/include/ctf-api.h gdb-10.2/include/ctf-api.h --- gdb-9.1/include/ctf-api.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/ctf-api.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Public API to libctf. - Copyright (C) 2019 Free Software Foundation, Inc. + Copyright (C) 2019-2020 Free Software Foundation, Inc. This file is part of libctf. @@ -30,7 +30,7 @@ #ifdef __cplusplus extern "C" - { +{ #endif /* Clients can open one or more CTF containers and obtain a pointer to an @@ -78,14 +78,24 @@ uint32_t st_value; } ctf_link_sym_t; -/* Indication of how to share types when linking. */ +/* Flags applying to this specific link. */ -/* Share all types thare are not in conflict. The default. */ +/* Share all types that are not in conflict. The default. */ #define CTF_LINK_SHARE_UNCONFLICTED 0x0 -/* Share only types that are used by multiple inputs. Not implemented yet. */ +/* Share only types that are used by multiple inputs. */ #define CTF_LINK_SHARE_DUPLICATED 0x1 +/* Do a nondeduplicating link. */ +#define CTF_LINK_NONDEDUP 0x2 + +/* Create empty outputs for all registered CU mappings even if no types are + emitted into them. */ +#define CTF_LINK_EMPTY_CU_MAPPINGS 0x4 + +/* Omit the content of the variables section. */ +#define CTF_LINK_OMIT_VARIABLES_SECTION 0x8 + /* Symbolic names for CTF sections. */ typedef enum ctf_sect_names @@ -153,60 +163,67 @@ enum { - ECTF_FMT = ECTF_BASE, /* File is not in CTF or ELF format. */ - ECTF_BFDERR, /* BFD error. */ - ECTF_CTFVERS, /* CTF version is more recent than libctf. */ - ECTF_BFD_AMBIGUOUS, /* Ambiguous BFD target. */ - ECTF_SYMTAB, /* Symbol table uses invalid entry size. */ - ECTF_SYMBAD, /* Symbol table data buffer invalid. */ - ECTF_STRBAD, /* String table data buffer invalid. */ - ECTF_CORRUPT, /* File data corruption detected. */ - ECTF_NOCTFDATA, /* ELF file does not contain CTF data. */ - ECTF_NOCTFBUF, /* Buffer does not contain CTF data. */ - ECTF_NOSYMTAB, /* Symbol table data is not available. */ - ECTF_NOPARENT, /* Parent CTF container is not available. */ - ECTF_DMODEL, /* Data model mismatch. */ - ECTF_LINKADDEDLATE, /* File added to link too late. */ - ECTF_ZALLOC, /* Failed to allocate (de)compression buffer. */ - ECTF_DECOMPRESS, /* Failed to decompress CTF data. */ - ECTF_STRTAB, /* String table for this string is missing. */ - ECTF_BADNAME, /* String offset is corrupt w.r.t. strtab. */ - ECTF_BADID, /* Invalid type ID number. */ - ECTF_NOTSOU, /* Type is not a struct or union. */ - ECTF_NOTENUM, /* Type is not an enum. */ - ECTF_NOTSUE, /* Type is not a struct, union, or enum. */ - ECTF_NOTINTFP, /* Type is not an integer, float, or enum. */ - ECTF_NOTARRAY, /* Type is not an array. */ - ECTF_NOTREF, /* Type does not reference another type. */ - ECTF_NAMELEN, /* Buffer is too small to hold type name. */ - ECTF_NOTYPE, /* No type found corresponding to name. */ - ECTF_SYNTAX, /* Syntax error in type name. */ - ECTF_NOTFUNC, /* Symbol entry or type is not a function. */ - ECTF_NOFUNCDAT, /* No func info available for function. */ - ECTF_NOTDATA, /* Symtab entry does not refer to a data obj. */ - ECTF_NOTYPEDAT, /* No type info available for object. */ - ECTF_NOLABEL, /* No label found corresponding to name. */ - ECTF_NOLABELDATA, /* File does not contain any labels. */ - ECTF_NOTSUP, /* Feature not supported. */ - ECTF_NOENUMNAM, /* Enum element name not found. */ - ECTF_NOMEMBNAM, /* Member name not found. */ - ECTF_RDONLY, /* CTF container is read-only. */ - ECTF_DTFULL, /* CTF type is full (no more members allowed). */ - ECTF_FULL, /* CTF container is full. */ - ECTF_DUPLICATE, /* Duplicate member or variable name. */ - ECTF_CONFLICT, /* Conflicting type definition present. */ - ECTF_OVERROLLBACK, /* Attempt to roll back past a ctf_update. */ - ECTF_COMPRESS, /* Failed to compress CTF data. */ - ECTF_ARCREATE, /* Error creating CTF archive. */ - ECTF_ARNNAME, /* Name not found in CTF archive. */ - ECTF_SLICEOVERFLOW, /* Overflow of type bitness or offset in slice. */ - ECTF_DUMPSECTUNKNOWN, /* Unknown section number in dump. */ - ECTF_DUMPSECTCHANGED, /* Section changed in middle of dump. */ - ECTF_NOTYET, /* Feature not yet implemented. */ - ECTF_INTERNAL, /* Internal error in link. */ - ECTF_NONREPRESENTABLE /* Type not representable in CTF. */ + ECTF_FMT = ECTF_BASE, /* File is not in CTF or ELF format. */ + ECTF_BFDERR, /* BFD error. */ + ECTF_CTFVERS, /* CTF dict version is too new for libctf. */ + ECTF_BFD_AMBIGUOUS, /* Ambiguous BFD target. */ + ECTF_SYMTAB, /* Symbol table uses invalid entry size. */ + ECTF_SYMBAD, /* Symbol table data buffer is not valid. */ + ECTF_STRBAD, /* String table data buffer is not valid. */ + ECTF_CORRUPT, /* File data structure corruption detected. */ + ECTF_NOCTFDATA, /* File does not contain CTF data. */ + ECTF_NOCTFBUF, /* Buffer does not contain CTF data. */ + ECTF_NOSYMTAB, /* Symbol table information is not available. */ + ECTF_NOPARENT, /* The parent CTF dictionary is unavailable. */ + ECTF_DMODEL, /* Data model mismatch. */ + ECTF_LINKADDEDLATE, /* File added to link too late. */ + ECTF_ZALLOC, /* Failed to allocate (de)compression buffer. */ + ECTF_DECOMPRESS, /* Failed to decompress CTF data. */ + ECTF_STRTAB, /* External string table is not available. */ + ECTF_BADNAME, /* String name offset is corrupt. */ + ECTF_BADID, /* Invalid type identifier. */ + ECTF_NOTSOU, /* Type is not a struct or union. */ + ECTF_NOTENUM, /* Type is not an enum. */ + ECTF_NOTSUE, /* Type is not a struct, union, or enum. */ + ECTF_NOTINTFP, /* Type is not an integer, float, or enum. */ + ECTF_NOTARRAY, /* Type is not an array. */ + ECTF_NOTREF, /* Type does not reference another type. */ + ECTF_NAMELEN, /* Buffer is too small to hold type name. */ + ECTF_NOTYPE, /* No type found corresponding to name. */ + ECTF_SYNTAX, /* Syntax error in type name. */ + ECTF_NOTFUNC, /* Symbol table entry or type is not a function. */ + ECTF_NOFUNCDAT, /* No function information available for function. */ + ECTF_NOTDATA, /* Symbol table entry does not refer to a data object. */ + ECTF_NOTYPEDAT, /* No type information available for symbol. */ + ECTF_NOLABEL, /* No label found corresponding to name. */ + ECTF_NOLABELDATA, /* File does not contain any labels. */ + ECTF_NOTSUP, /* Feature not supported. */ + ECTF_NOENUMNAM, /* Enum element name not found. */ + ECTF_NOMEMBNAM, /* Member name not found. */ + ECTF_RDONLY, /* CTF container is read-only. */ + ECTF_DTFULL, /* CTF type is full (no more members allowed). */ + ECTF_FULL, /* CTF container is full. */ + ECTF_DUPLICATE, /* Duplicate member or variable name. */ + ECTF_CONFLICT, /* Conflicting type is already defined. */ + ECTF_OVERROLLBACK, /* Attempt to roll back past a ctf_update. */ + ECTF_COMPRESS, /* Failed to compress CTF data. */ + ECTF_ARCREATE, /* Error creating CTF archive. */ + ECTF_ARNNAME, /* Name not found in CTF archive. */ + ECTF_SLICEOVERFLOW, /* Overflow of type bitness or offset in slice. */ + ECTF_DUMPSECTUNKNOWN, /* Unknown section number in dump. */ + ECTF_DUMPSECTCHANGED, /* Section changed in middle of dump. */ + ECTF_NOTYET, /* Feature not yet implemented. */ + ECTF_INTERNAL, /* Internal error: assertion failure. */ + ECTF_NONREPRESENTABLE, /* Type not representable in CTF. */ + ECTF_NEXT_END, /* End of iteration. */ + ECTF_NEXT_WRONGFUN, /* Wrong iteration function called. */ + ECTF_NEXT_WRONGFP, /* Iteration entity changed in mid-iterate. */ + ECTF_FLAGS, /* CTF header contains flags unknown to libctf. */ + ECTF_NEEDSBFD /* This feature needs a libctf with BFD support. */ }; +#define ECTF_NERR (ECTF_NEEDSBFD - ECTF_BASE + 1) /* Count of CTF errors. */ + /* The CTF data model is inferred to be the caller's data model or the data model of the given object, unless ctf_setmodel() is explicitly called. */ #define CTF_MODEL_ILP32 1 /* Object data model is ILP32. */ @@ -225,8 +242,9 @@ #define CTF_ADD_NONROOT 0 /* Type only visible in nested scope. */ #define CTF_ADD_ROOT 1 /* Type visible at top-level scope. */ -/* These typedefs are used to define the signature for callback functions - that can be used with the iteration and visit functions below. */ +/* These typedefs are used to define the signature for callback functions that + can be used with the iteration and visit functions below. There is also a + family of iteration functions that do not require callbacks. */ typedef int ctf_visit_f (const char *name, ctf_id_t type, unsigned long offset, int depth, void *arg); @@ -246,6 +264,15 @@ typedef struct ctf_dump_state ctf_dump_state_t; +/* Iteration state for the _next() functions, and allocators/copiers/freers for + it. (None of these are needed for the simple case of iterating to the end: + the _next() function allocate and free the iterators for you.) */ + +typedef struct ctf_next ctf_next_t; +extern ctf_next_t *ctf_next_create (void); +extern void ctf_next_destroy (ctf_next_t *); +extern ctf_next_t *ctf_next_copy (ctf_next_t *); + /* Opening. These mostly return an abstraction over both CTF files and CTF archives: so they can be used to open both. CTF files will appear to be an archive with one member named '.ctf'. The low-level functions @@ -263,6 +290,10 @@ extern ctf_sect_t ctf_getdatasect (const ctf_file_t *); extern ctf_archive_t *ctf_get_arc (const ctf_file_t *); extern ctf_archive_t *ctf_arc_open (const char *, int *); +extern ctf_archive_t *ctf_arc_bufopen (const ctf_sect_t *, + const ctf_sect_t *, + const ctf_sect_t *, + int *); extern void ctf_arc_close (ctf_archive_t *); extern ctf_file_t *ctf_arc_open_by_name (const ctf_archive_t *, const char *, int *); @@ -270,6 +301,7 @@ const ctf_sect_t *, const ctf_sect_t *, const char *, int *); +extern size_t ctf_archive_count (const ctf_archive_t *); /* The next functions return or close real CTF files, or write out CTF archives, not opaque containers around either. */ @@ -278,6 +310,7 @@ size_t, const char *, size_t, int *); extern ctf_file_t *ctf_bufopen (const ctf_sect_t *, const ctf_sect_t *, const ctf_sect_t *, int *); +extern void ctf_ref (ctf_file_t *); extern void ctf_file_close (ctf_file_t *); extern int ctf_arc_write (const char *, ctf_file_t **, size_t, @@ -318,9 +351,11 @@ extern char *ctf_type_aname_raw (ctf_file_t *, ctf_id_t); extern ssize_t ctf_type_lname (ctf_file_t *, ctf_id_t, char *, size_t); extern char *ctf_type_name (ctf_file_t *, ctf_id_t, char *, size_t); +extern const char *ctf_type_name_raw (ctf_file_t *, ctf_id_t); extern ssize_t ctf_type_size (ctf_file_t *, ctf_id_t); extern ssize_t ctf_type_align (ctf_file_t *, ctf_id_t); extern int ctf_type_kind (ctf_file_t *, ctf_id_t); +extern int ctf_type_kind_forwarded (ctf_file_t *, ctf_id_t); extern ctf_id_t ctf_type_reference (ctf_file_t *, ctf_id_t); extern ctf_id_t ctf_type_pointer (ctf_file_t *, ctf_id_t); extern int ctf_type_encoding (ctf_file_t *, ctf_id_t, ctf_encoding_t *); @@ -341,14 +376,27 @@ extern const char *ctf_label_topmost (ctf_file_t *); extern int ctf_label_info (ctf_file_t *, const char *, ctf_lblinfo_t *); +extern int ctf_member_count (ctf_file_t *, ctf_id_t); extern int ctf_member_iter (ctf_file_t *, ctf_id_t, ctf_member_f *, void *); +extern ssize_t ctf_member_next (ctf_file_t *, ctf_id_t, ctf_next_t **, + const char **name, ctf_id_t *membtype); extern int ctf_enum_iter (ctf_file_t *, ctf_id_t, ctf_enum_f *, void *); +extern const char *ctf_enum_next (ctf_file_t *, ctf_id_t, ctf_next_t **, + int *); extern int ctf_type_iter (ctf_file_t *, ctf_type_f *, void *); extern int ctf_type_iter_all (ctf_file_t *, ctf_type_all_f *, void *); +extern ctf_id_t ctf_type_next (ctf_file_t *, ctf_next_t **, + int *flag, int want_hidden); extern int ctf_label_iter (ctf_file_t *, ctf_label_f *, void *); +extern int ctf_label_next (ctf_file_t *, ctf_next_t **, const char **); /* TBD */ extern int ctf_variable_iter (ctf_file_t *, ctf_variable_f *, void *); +extern ctf_id_t ctf_variable_next (ctf_file_t *, ctf_next_t **, + const char **); extern int ctf_archive_iter (const ctf_archive_t *, ctf_archive_member_f *, void *); +extern ctf_file_t *ctf_archive_next (const ctf_archive_t *, ctf_next_t **, + const char **, int skip_parent, int *errp); + /* This function alone does not currently operate on CTF files masquerading as archives, and returns -EINVAL: the raw data is no longer available. It is expected to be used only by archiving tools, in any case, which have no need @@ -359,6 +407,12 @@ ctf_sect_names_t sect, ctf_dump_decorate_f *, void *arg); +/* Error-warning reporting: an 'iterator' that returns errors and warnings from + the error/warning list, in order of emission. Errors and warnings are popped + after return: the caller must free the returned error-text pointer. */ +extern char *ctf_errwarning_next (ctf_file_t *, ctf_next_t **, + int *is_warning, int *errp); + extern ctf_id_t ctf_add_array (ctf_file_t *, uint32_t, const ctf_arinfo_t *); extern ctf_id_t ctf_add_const (ctf_file_t *, uint32_t, ctf_id_t); @@ -409,10 +463,14 @@ extern int ctf_compress_write (ctf_file_t * fp, int fd); extern unsigned char *ctf_write_mem (ctf_file_t *, size_t *, size_t threshold); -/* The ctf_link interfaces are not stable yet. No guarantees! */ - extern int ctf_link_add_ctf (ctf_file_t *, ctf_archive_t *, const char *); -extern int ctf_link (ctf_file_t *, int share_mode); +/* The variable filter should return nonzero if a variable should not + appear in the output. */ +typedef int ctf_link_variable_filter_f (ctf_file_t *, const char *, ctf_id_t, + void *); +extern int ctf_link_set_variable_filter (ctf_file_t *, + ctf_link_variable_filter_f *, void *); +extern int ctf_link (ctf_file_t *, int flags); typedef const char *ctf_link_strtab_string_f (uint32_t *offset, void *arg); extern int ctf_link_add_strtab (ctf_file_t *, ctf_link_strtab_string_f *, void *); @@ -424,7 +482,7 @@ size_t threshold); /* Specialist linker functions. These functions are not used by ld, but can be - used by other prgorams making use of the linker machinery for other purposes + used by other programs making use of the linker machinery for other purposes to customize its output. */ extern int ctf_link_add_cu_mapping (ctf_file_t *, const char *from, const char *to); diff -Nru gdb-9.1/include/ctf.h gdb-10.2/include/ctf.h --- gdb-9.1/include/ctf.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/ctf.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* CTF format description. - Copyright (C) 2019 Free Software Foundation, Inc. + Copyright (C) 2019-2020 Free Software Foundation, Inc. This file is part of libctf. @@ -199,7 +199,8 @@ #define CTF_VERSION_3 4 #define CTF_VERSION CTF_VERSION_3 /* Current version. */ -#define CTF_F_COMPRESS 0x1 /* Data buffer is compressed by libctf. */ +#define CTF_F_COMPRESS 0x1 /* Data buffer is compressed by libctf. */ +#define CTF_F_MAX CTF_F_COMPRESS /* The greatest flag value in use. */ typedef struct ctf_lblent { diff -Nru gdb-9.1/include/demangle.h gdb-10.2/include/demangle.h --- gdb-9.1/include/demangle.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/demangle.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Defs for interface to demanglers. - Copyright (C) 1992-2019 Free Software Foundation, Inc. + Copyright (C) 1992-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License @@ -159,24 +159,11 @@ extern char * dlang_demangle (const char *mangled, int options); -/* Returns non-zero iff MANGLED is a rust mangled symbol. MANGLED must - already have been demangled through cplus_demangle_v3. If this function - returns non-zero then MANGLED can be demangled (in-place) using - RUST_DEMANGLE_SYM. */ extern int -rust_is_mangled (const char *mangled); +rust_demangle_callback (const char *mangled, int options, + demangle_callbackref callback, void *opaque); + -/* Demangles SYM (in-place) if RUST_IS_MANGLED returned non-zero for SYM. - If RUST_IS_MANGLED returned zero for SYM then RUST_DEMANGLE_SYM might - replace characters that cannot be demangled with '?' and might truncate - SYM. After calling RUST_DEMANGLE_SYM SYM might be shorter, but never - larger. */ -extern void -rust_demangle_sym (char *sym); - -/* Demangles MANGLED if it was GNU_V3 and then RUST mangled, otherwise - returns NULL. Uses CPLUS_DEMANGLE_V3, RUST_IS_MANGLED and - RUST_DEMANGLE_SYM. Returns a new string that is owned by the caller. */ extern char * rust_demangle (const char *mangled, int options); @@ -481,6 +468,7 @@ Initialize to zero. Private to d_print_comp. All other fields are final after initialization. */ int d_printing; + int d_counting; union { diff -Nru gdb-9.1/include/diagnostics.h gdb-10.2/include/diagnostics.h --- gdb-9.1/include/diagnostics.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/diagnostics.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2017-2019 Free Software Foundation, Inc. +/* Copyright (C) 2017-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -53,8 +53,6 @@ DIAGNOSTIC_IGNORE ("-Wdeprecated-declarations") # define DIAGNOSTIC_IGNORE_DEPRECATED_REGISTER \ DIAGNOSTIC_IGNORE ("-Wdeprecated-register") -# define DIAGNOSTIC_IGNORE_UNUSED_FUNCTION \ - DIAGNOSTIC_IGNORE ("-Wunused-function") # if __has_warning ("-Wenum-compare-switch") # define DIAGNOSTIC_IGNORE_SWITCH_DIFFERENT_ENUM_TYPES \ DIAGNOSTIC_IGNORE ("-Wenum-compare-switch") @@ -65,8 +63,10 @@ #elif defined (__GNUC__) /* GCC */ -# define DIAGNOSTIC_IGNORE_UNUSED_FUNCTION \ - DIAGNOSTIC_IGNORE ("-Wunused-function") +# if __GNUC__ >= 7 +# define DIAGNOSTIC_IGNORE_DEPRECATED_REGISTER \ + DIAGNOSTIC_IGNORE ("-Wregister") +# endif # define DIAGNOSTIC_IGNORE_STRINGOP_TRUNCATION \ DIAGNOSTIC_IGNORE ("-Wstringop-truncation") @@ -88,10 +88,6 @@ # define DIAGNOSTIC_IGNORE_DEPRECATED_REGISTER #endif -#ifndef DIAGNOSTIC_IGNORE_UNUSED_FUNCTION -# define DIAGNOSTIC_IGNORE_UNUSED_FUNCTION -#endif - #ifndef DIAGNOSTIC_IGNORE_SWITCH_DIFFERENT_ENUM_TYPES # define DIAGNOSTIC_IGNORE_SWITCH_DIFFERENT_ENUM_TYPES #endif diff -Nru gdb-9.1/include/dis-asm.h gdb-10.2/include/dis-asm.h --- gdb-9.1/include/dis-asm.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/dis-asm.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Interface between the opcode library and its callers. - Copyright (C) 1999-2019 Free Software Foundation, Inc. + Copyright (C) 1999-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/include/dwarf2.def gdb-10.2/include/dwarf2.def --- gdb-9.1/include/dwarf2.def 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/dwarf2.def 2021-04-25 04:06:26.000000000 +0000 @@ -1,7 +1,7 @@ /* -*- c -*- Declarations and definitions of codes relating to the DWARF2 and DWARF3 symbolic debugging information formats. - Copyright (C) 1992-2019 Free Software Foundation, Inc. + Copyright (C) 1992-2020 Free Software Foundation, Inc. Written by Gary Funck (gary@intrepid.com) The Ada Joint Program Office (AJPO), Florida State University and Silicon Graphics Inc. diff -Nru gdb-9.1/include/dwarf2.h gdb-10.2/include/dwarf2.h --- gdb-9.1/include/dwarf2.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/dwarf2.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Declarations and definitions of codes relating to the DWARF2 and DWARF3 symbolic debugging information formats. - Copyright (C) 1992-2019 Free Software Foundation, Inc. + Copyright (C) 1992-2020 Free Software Foundation, Inc. Written by Gary Funck (gary@intrepid.com) The Ada Joint Program Office (AJPO), Florida State University and Silicon Graphics Inc. @@ -488,19 +488,36 @@ #define DW_EH_PE_indirect 0x80 /* Codes for the debug sections in a dwarf package (.dwp) file. - Extensions for Fission. See http://gcc.gnu.org/wiki/DebugFissionDWP. */ + (From the pre-standard formats Extensions for Fission. + See http://gcc.gnu.org/wiki/DebugFissionDWP). */ enum dwarf_sect - { - DW_SECT_INFO = 1, - DW_SECT_TYPES = 2, - DW_SECT_ABBREV = 3, - DW_SECT_LINE = 4, - DW_SECT_LOC = 5, - DW_SECT_STR_OFFSETS = 6, - DW_SECT_MACINFO = 7, - DW_SECT_MACRO = 8, - DW_SECT_MAX = 8 - }; +{ + DW_SECT_INFO = 1, + DW_SECT_TYPES = 2, + DW_SECT_ABBREV = 3, + DW_SECT_LINE = 4, + DW_SECT_LOC = 5, + DW_SECT_STR_OFFSETS = 6, + DW_SECT_MACINFO = 7, + DW_SECT_MACRO = 8, + DW_SECT_MAX = 8 +}; + +/* Codes for the debug sections in a dwarf package (.dwp) file. + (From the official DWARF v5 spec. + See http://dwarfstd.org/doc/DWARF5.pdf, section 7.3.5). */ +enum dwarf_sect_v5 +{ + DW_SECT_INFO_V5 = 1, + DW_SECT_RESERVED_V5 = 2, + DW_SECT_ABBREV_V5 = 3, + DW_SECT_LINE_V5 = 4, + DW_SECT_LOCLISTS_V5 = 5, + DW_SECT_STR_OFFSETS_V5 = 6, + DW_SECT_MACRO_V5 = 7, + DW_SECT_RNGLISTS_V5 = 8, + DW_SECT_MAX_V5 = 8 +}; #ifdef __cplusplus extern "C" { diff -Nru gdb-9.1/include/dyn-string.h gdb-10.2/include/dyn-string.h --- gdb-9.1/include/dyn-string.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/dyn-string.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* An abstract string datatype. - Copyright (C) 1998-2019 Free Software Foundation, Inc. + Copyright (C) 1998-2020 Free Software Foundation, Inc. Contributed by Mark Mitchell (mark@markmitchell.com). This file is part of GCC. diff -Nru gdb-9.1/include/elf/aarch64.h gdb-10.2/include/elf/aarch64.h --- gdb-9.1/include/elf/aarch64.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/aarch64.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* AArch64 ELF support for BFD. - Copyright (C) 2009-2019 Free Software Foundation, Inc. + Copyright (C) 2009-2020 Free Software Foundation, Inc. Contributed by ARM Ltd. This file is part of GNU Binutils. diff -Nru gdb-9.1/include/elf/alpha.h gdb-10.2/include/elf/alpha.h --- gdb-9.1/include/elf/alpha.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/alpha.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* ALPHA ELF support for BFD. - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. By Eric Youngdale, <eric@aib.com>. No processor supplement available for this platform. diff -Nru gdb-9.1/include/elf/arc-cpu.def gdb-10.2/include/elf/arc-cpu.def --- gdb-9.1/include/elf/arc-cpu.def 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/arc-cpu.def 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* ARC processor types - Copyright (C) 2017-2019 Free Software Foundation, Inc. + Copyright (C) 2017-2020 Free Software Foundation, Inc. This file is part of GAS, the GNU Assembler. @@ -24,6 +24,7 @@ ARC_CPU_TYPE_AV2EM (arcem, 0x00), ARC_CPU_TYPE_AV2EM (em, 0x00), +ARC_CPU_TYPE_AV2EM (em_mini, 0x00), ARC_CPU_TYPE_AV2EM (em4, CD), ARC_CPU_TYPE_AV2EM (em4_dmips, CD), ARC_CPU_TYPE_AV2EM (em4_fpus, CD), @@ -35,6 +36,9 @@ ARC_CPU_TYPE_AV2HS (hs34, CD), ARC_CPU_TYPE_AV2HS (hs38, CD), ARC_CPU_TYPE_AV2HS (hs38_linux, CD), +ARC_CPU_TYPE_AV2HS (hs4x, CD), +ARC_CPU_TYPE_AV2HS (hs4xd, CD), +ARC_CPU_TYPE_AV2HS (hs4x_rel31, CD), ARC_CPU_TYPE_A6xx (arc600, 0x00), ARC_CPU_TYPE_A6xx (arc600_norm, 0x00), diff -Nru gdb-9.1/include/elf/arc.h gdb-10.2/include/elf/arc.h --- gdb-9.1/include/elf/arc.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/arc.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* ARC ELF support for BFD. - Copyright (C) 1995-2019 Free Software Foundation, Inc. + Copyright (C) 1995-2020 Free Software Foundation, Inc. Contributed by Doug Evans, (dje@cygnus.com) This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/elf/arc-reloc.def gdb-10.2/include/elf/arc-reloc.def --- gdb-9.1/include/elf/arc-reloc.def 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/arc-reloc.def 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* ARC relocation types - Copyright (C) 2015-2019 Free Software Foundation, Inc. + Copyright (C) 2015-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/elf/arm.h gdb-10.2/include/elf/arm.h --- gdb-9.1/include/elf/arm.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/arm.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* ARM ELF support for BFD. - Copyright (C) 1998-2019 Free Software Foundation, Inc. + Copyright (C) 1998-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/elf/avr.h gdb-10.2/include/elf/avr.h --- gdb-9.1/include/elf/avr.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/avr.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* AVR ELF support for BFD. - Copyright (C) 1999-2019 Free Software Foundation, Inc. + Copyright (C) 1999-2020 Free Software Foundation, Inc. Contributed by Denis Chertykov <denisc@overta.ru> This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/elf/bfin.h gdb-10.2/include/elf/bfin.h --- gdb-9.1/include/elf/bfin.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/bfin.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Blackfin ELF support for BFD. - Copyright (C) 2005-2019 Free Software Foundation, Inc. + Copyright (C) 2005-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/elf/bpf.h gdb-10.2/include/elf/bpf.h --- gdb-9.1/include/elf/bpf.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/bpf.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Linux eBPF support for BFD. - Copyright (C) 2019 Free Software Foundation, Inc. + Copyright (C) 2019-2020 Free Software Foundation, Inc. Contributed by Oracle, Inc. diff -Nru gdb-9.1/include/elf/common.h gdb-10.2/include/elf/common.h --- gdb-9.1/include/elf/common.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/common.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* ELF support for BFD. - Copyright (C) 1991-2019 Free Software Foundation, Inc. + Copyright (C) 1991-2020 Free Software Foundation, Inc. Written by Fred Fish @ Cygnus Support, from information published in "UNIX System V Release 4, Programmers Guide: ANSI C and @@ -91,8 +91,9 @@ #define ET_NONE 0 /* No file type */ #define ET_REL 1 /* Relocatable file */ -#define ET_EXEC 2 /* Executable file */ -#define ET_DYN 3 /* Shared object file */ +#define ET_EXEC 2 /* Position-dependent executable file */ +#define ET_DYN 3 /* Position-independent executable or + shared object file */ #define ET_CORE 4 /* Core file */ #define ET_LOOS 0xFE00 /* Operating system-specific */ #define ET_HIOS 0xFEFF /* Operating system-specific */ @@ -471,6 +472,11 @@ #define PT_GNU_RELRO (PT_LOOS + 0x474e552) /* Read-only after relocation */ #define PT_GNU_PROPERTY (PT_LOOS + 0x474e553) /* GNU property */ +/* OpenBSD segment types. */ +#define PT_OPENBSD_RANDOMIZE (PT_LOOS + 0x5a3dbe6) /* Fill with random data. */ +#define PT_OPENBSD_WXNEEDED (PT_LOOS + 0x5a3dbe7) /* Program does W^X violations. */ +#define PT_OPENBSD_BOOTDATA (PT_LOOS + 0x5a41be6) /* Section for boot arguments. */ + /* Mbind segments */ #define PT_GNU_MBIND_NUM 4096 #define PT_GNU_MBIND_LO (PT_LOOS + 0x474e555) @@ -613,6 +619,8 @@ /* note name must be "LINUX". */ #define NT_X86_XSTATE 0x202 /* x86 XSAVE extended state */ /* note name must be "LINUX". */ +#define NT_X86_CET 0x203 /* x86 CET state. */ + /* note name must be "LINUX". */ #define NT_S390_HIGH_GPRS 0x300 /* S/390 upper halves of GPRs */ /* note name must be "LINUX". */ #define NT_S390_TIMER 0x301 /* S390 timer */ @@ -652,6 +660,8 @@ /* note name must be "LINUX". */ #define NT_ARM_PAC_MASK 0x406 /* AArch pointer authentication code masks */ /* note name must be "LINUX". */ +#define NT_ARC_V2 0x600 /* ARC HS accumulator/extra registers. */ + /* note name must be "LINUX". */ #define NT_SIGINFO 0x53494749 /* Fields of siginfo_t. */ #define NT_FILE 0x46494c45 /* Description of mapped files. */ @@ -686,6 +696,8 @@ must start with "NetBSD-CORE". */ #define NT_NETBSDCORE_PROCINFO 1 /* Has a struct procinfo */ +#define NT_NETBSDCORE_AUXV 2 /* Has auxv data */ +#define NT_NETBSDCORE_LWPSTATUS 24 /* Has LWPSTATUS data */ #define NT_NETBSDCORE_FIRSTMACH 32 /* start of machdep note types */ @@ -841,6 +853,7 @@ #define GNU_PROPERTY_X86_FEATURE_2_XSAVE (1U << 7) #define GNU_PROPERTY_X86_FEATURE_2_XSAVEOPT (1U << 8) #define GNU_PROPERTY_X86_FEATURE_2_XSAVEC (1U << 9) +#define GNU_PROPERTY_X86_FEATURE_2_TMM (1U << 10) /* AArch64 specific GNU PROPERTY. */ #define GNU_PROPERTY_AARCH64_FEATURE_1_AND 0xc0000000 @@ -936,7 +949,7 @@ #define ELF32_R_SYM(i) ((i) >> 8) #define ELF32_R_TYPE(i) ((i) & 0xff) -#define ELF32_R_INFO(s,t) (((s) << 8) + ((t) & 0xff)) +#define ELF32_R_INFO(s,t) (((unsigned) (s) << 8) + ((t) & 0xff)) #define ELF64_R_SYM(i) ((i) >> 32) #define ELF64_R_TYPE(i) ((i) & 0xffffffff) @@ -1222,6 +1235,21 @@ #define AT_L2_CACHESHAPE 36 #define AT_L3_CACHESHAPE 37 +/* Shapes of the caches, with more room to describe them. + *GEOMETRY are comprised of cache line size in bytes in the bottom 16 bits + and the cache associativity in the next 16 bits. */ +#define AT_L1I_CACHESIZE 40 +#define AT_L1I_CACHEGEOMETRY 41 +#define AT_L1D_CACHESIZE 42 +#define AT_L1D_CACHEGEOMETRY 43 +#define AT_L2_CACHESIZE 44 +#define AT_L2_CACHEGEOMETRY 45 +#define AT_L3_CACHESIZE 46 +#define AT_L3_CACHEGEOMETRY 47 + +#define AT_MINSIGSTKSZ 51 /* Stack needed for signal delivery + (AArch64). */ + #define AT_FREEBSD_EXECPATH 15 /* Path to the executable. */ #define AT_FREEBSD_CANARY 16 /* Canary for SSP. */ #define AT_FREEBSD_CANARYLEN 17 /* Length of the canary. */ @@ -1234,6 +1262,12 @@ #define AT_FREEBSD_EHDRFLAGS 24 /* e_flags field from ELF header. */ #define AT_FREEBSD_HWCAP 25 /* CPU feature flags. */ #define AT_FREEBSD_HWCAP2 26 /* CPU feature flags 2. */ +#define AT_FREEBSD_BSDFLAGS 27 /* ELF BSD Flags. */ +#define AT_FREEBSD_ARGC 28 /* Argument count. */ +#define AT_FREEBSD_ARGV 29 /* Argument vector. */ +#define AT_FREEBSD_ENVC 30 /* Environment count. */ +#define AT_FREEBSD_ENVV 31 /* Environment vvector. */ +#define AT_FREEBSD_PS_STRINGS 32 /* struct ps_strings. */ #define AT_SUN_UID 2000 /* Effective user ID. */ #define AT_SUN_RUID 2001 /* Real user ID. */ diff -Nru gdb-9.1/include/elf/cr16.h gdb-10.2/include/elf/cr16.h --- gdb-9.1/include/elf/cr16.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/cr16.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* CR16 ELF support for BFD. - Copyright (C) 2007-2019 Free Software Foundation, Inc. + Copyright (C) 2007-2020 Free Software Foundation, Inc. Contributed by M R Swami Reddy. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/elf/cris.h gdb-10.2/include/elf/cris.h --- gdb-9.1/include/elf/cris.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/cris.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* CRIS ELF support for BFD. - Copyright (C) 2000-2019 Free Software Foundation, Inc. + Copyright (C) 2000-2020 Free Software Foundation, Inc. Contributed by Axis Communications AB, Lund, Sweden. Written by Hans-Peter Nilsson. diff -Nru gdb-9.1/include/elf/crx.h gdb-10.2/include/elf/crx.h --- gdb-9.1/include/elf/crx.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/crx.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* CRX ELF support for BFD. - Copyright (C) 2004-2019 Free Software Foundation, Inc. + Copyright (C) 2004-2020 Free Software Foundation, Inc. Contributed by Tomer Levi, NSC, Israel. Originally written for GAS 2.12 by Tomer Levi, NSC, Israel. Updates, BFDizing, GNUifying and ELF support by Tomer Levi. diff -Nru gdb-9.1/include/elf/csky.h gdb-10.2/include/elf/csky.h --- gdb-9.1/include/elf/csky.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/csky.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* C-SKY ELF support for BFD. - Copyright (C) 1998-2019 Free Software Foundation, Inc. + Copyright (C) 1998-2020 Free Software Foundation, Inc. Contributed by C-SKY Microsystems and Mentor Graphics. This file is part of BFD, the Binary File Descriptor library. @@ -94,4 +94,79 @@ RELOC_NUMBER (R_CKCORE_PCREL_BLOOP_IMM12BY4, 64) END_RELOC_NUMBERS (R_CKCORE_MAX) +/* Additional section types. */ +#define SHT_CSKY_ATTRIBUTES 0x70000001 /* Section holds attributes. */ + +/* Object attribute tags. */ +enum +{ + /* 0-3 are generic. */ + /* Arch name for this object file. */ + Tag_CSKY_ARCH_NAME = 4, + Tag_CSKY_CPU_NAME = 5, + + /* ISA flags for this object file. */ + Tag_CSKY_ISA_FLAGS, + Tag_CSKY_ISA_EXT_FLAGS, + + /* CSKY DSP version used by this object file. */ + Tag_CSKY_DSP_VERSION, + + /* CSKY VDSP version used by this object file. */ + Tag_CSKY_VDSP_VERSION, + + /* CSKY FPU version used by this object file. */ + Tag_CSKY_FPU_VERSION = 0x10, + /* FPU ABI. params: Soft GR/Hard GR/Hard FR. */ + Tag_CSKY_FPU_ABI, + /* Rounding Support. */ + Tag_CSKY_FPU_ROUNDING, + /* Denormal Support. */ + Tag_CSKY_FPU_DENORMAL, + /* Exeception Support. */ + Tag_CSKY_FPU_Exception, + /* Number Module Support("IEEE 754"). */ + Tag_CSKY_FPU_NUMBER_MODULE, + /* Half/Single/Double. */ + Tag_CSKY_FPU_HARDFP, + + Tag_CSKY_MAX, +}; + +/* Object attribute values. */ +enum +{ + /* Values defined for Tag_CSKY_DSP_VERSION. */ + VAL_CSKY_DSP_VERSION_EXTENSION = 1, /* hi-lo DSP extension. */ + VAL_CSKY_DSP_VERSION_2 = 2, /* CK803s EDSP. */ +}; + +enum +{ + /* Values defined for Tag_CSKY_VDSP_VERSION. */ + VAL_CSKY_VDSP_VERSION_1 = 1, /* VDSP version 1. */ + VAL_CSKY_VDSP_VERSION_2 /* VDSP version 1. */ +}; + +enum +{ + /* Values defined for Tag_CSKY_FPU_VERSION. */ + VAL_CSKY_FPU_VERSION_1 = 1, /* ABIV1 FPU. */ + VAL_CSKY_FPU_VERSION_2, /* ABIV2 FPU. */ +}; + +enum +{ + VAL_CSKY_FPU_ABI_SOFT = 1, + VAL_CSKY_FPU_ABI_SOFTFP, + VAL_CSKY_FPU_ABI_HARD, +}; + +enum +{ + VAL_CSKY_FPU_HARDFP_HALF = 1, + VAL_CSKY_FPU_HARDFP_SINGLE = 2, + VAL_CSKY_FPU_HARDFP_DOUBLE = 4, +}; + #endif /* _ELF_CSKY_H */ diff -Nru gdb-9.1/include/elf/d10v.h gdb-10.2/include/elf/d10v.h --- gdb-9.1/include/elf/d10v.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/d10v.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* d10v ELF support for BFD. - Copyright (C) 1998-2019 Free Software Foundation, Inc. + Copyright (C) 1998-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/elf/d30v.h gdb-10.2/include/elf/d30v.h --- gdb-9.1/include/elf/d30v.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/d30v.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* d30v ELF support for BFD. - Copyright (C) 1998-2019 Free Software Foundation, Inc. + Copyright (C) 1998-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/elf/dlx.h gdb-10.2/include/elf/dlx.h --- gdb-9.1/include/elf/dlx.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/dlx.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* DLX support for BFD. - Copyright (C) 2002-2019 Free Software Foundation, Inc. + Copyright (C) 2002-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/elf/dwarf.h gdb-10.2/include/elf/dwarf.h --- gdb-9.1/include/elf/dwarf.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/dwarf.h 2021-04-25 04:06:26.000000000 +0000 @@ -3,7 +3,7 @@ Written by Ron Guilmette (rfg@netcom.com) - Copyright (C) 1992-2019 Free Software Foundation, Inc. + Copyright (C) 1992-2020 Free Software Foundation, Inc. This file is part of both GCC and the BFD library. diff -Nru gdb-9.1/include/elf/epiphany.h gdb-10.2/include/elf/epiphany.h --- gdb-9.1/include/elf/epiphany.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/epiphany.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Adapteva EPIPHANY ELF support for BFD. - Copyright (C) 2009-2019 Free Software Foundation, Inc. + Copyright (C) 2009-2020 Free Software Foundation, Inc. Contributed by Embecosm on behalf of Adapteva, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/elf/external.h gdb-10.2/include/elf/external.h --- gdb-9.1/include/elf/external.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/external.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* ELF support for BFD. - Copyright (C) 1991-2019 Free Software Foundation, Inc. + Copyright (C) 1991-2020 Free Software Foundation, Inc. Written by Fred Fish @ Cygnus Support, from information published in "UNIX System V Release 4, Programmers Guide: ANSI C and diff -Nru gdb-9.1/include/elf/fr30.h gdb-10.2/include/elf/fr30.h --- gdb-9.1/include/elf/fr30.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/fr30.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* FR30 ELF support for BFD. - Copyright (C) 1998-2019 Free Software Foundation, Inc. + Copyright (C) 1998-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/elf/frv.h gdb-10.2/include/elf/frv.h --- gdb-9.1/include/elf/frv.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/frv.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* FRV ELF support for BFD. - Copyright (C) 2002-2019 Free Software Foundation, Inc. + Copyright (C) 2002-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/elf/ft32.h gdb-10.2/include/elf/ft32.h --- gdb-9.1/include/elf/ft32.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/ft32.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* ft32 ELF support for BFD. - Copyright (C) 2009-2019 Free Software Foundation, Inc. + Copyright (C) 2009-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/elf/h8.h gdb-10.2/include/elf/h8.h --- gdb-9.1/include/elf/h8.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/h8.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* H8300/h8500 ELF support for BFD. - Copyright (C) 2001-2019 Free Software Foundation, Inc. + Copyright (C) 2001-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/elf/hppa.h gdb-10.2/include/elf/hppa.h --- gdb-9.1/include/elf/hppa.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/hppa.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* HPPA ELF support for BFD. - Copyright (C) 1993-2019 Free Software Foundation, Inc. + Copyright (C) 1993-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/elf/i370.h gdb-10.2/include/elf/i370.h --- gdb-9.1/include/elf/i370.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/i370.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* i370 ELF support for BFD. - Copyright (C) 2000-2019 Free Software Foundation, Inc. + Copyright (C) 2000-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/elf/i386.h gdb-10.2/include/elf/i386.h --- gdb-9.1/include/elf/i386.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/i386.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* ix86 ELF support for BFD. - Copyright (C) 1998-2019 Free Software Foundation, Inc. + Copyright (C) 1998-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/elf/i860.h gdb-10.2/include/elf/i860.h --- gdb-9.1/include/elf/i860.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/i860.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* i860 ELF support for BFD. - Copyright (C) 2000-2019 Free Software Foundation, Inc. + Copyright (C) 2000-2020 Free Software Foundation, Inc. Contributed by Jason Eckhardt <jle@cygnus.com>. diff -Nru gdb-9.1/include/elf/i960.h gdb-10.2/include/elf/i960.h --- gdb-9.1/include/elf/i960.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/i960.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Intel 960 ELF support for BFD. - Copyright (C) 1999-2019 Free Software Foundation, Inc. + Copyright (C) 1999-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/elf/ia64.h gdb-10.2/include/elf/ia64.h --- gdb-9.1/include/elf/ia64.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/ia64.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* IA-64 ELF support for BFD. - Copyright (C) 1998-2019 Free Software Foundation, Inc. + Copyright (C) 1998-2020 Free Software Foundation, Inc. Contributed by David Mosberger-Tang <davidm@hpl.hp.com> This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/elf/internal.h gdb-10.2/include/elf/internal.h --- gdb-9.1/include/elf/internal.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/internal.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* ELF support for BFD. - Copyright (C) 1991-2019 Free Software Foundation, Inc. + Copyright (C) 1991-2020 Free Software Foundation, Inc. Written by Fred Fish @ Cygnus Support, from information published in "UNIX System V Release 4, Programmers Guide: ANSI C and @@ -84,14 +84,15 @@ /* Program header */ struct elf_internal_phdr { - unsigned long p_type; /* Identifies program segment type */ - unsigned long p_flags; /* Segment flags */ - bfd_vma p_offset; /* Segment file offset */ - bfd_vma p_vaddr; /* Segment virtual address */ - bfd_vma p_paddr; /* Segment physical address */ - bfd_vma p_filesz; /* Segment size in file */ - bfd_vma p_memsz; /* Segment size in memory */ - bfd_vma p_align; /* Segment alignment, file & memory */ + unsigned long p_type; /* Identifies program segment type. */ + unsigned long p_flags; /* Segment flags. */ + bfd_vma p_offset; /* Segment file offset in octets. */ + bfd_vma p_vaddr; /* Segment virtual address in octets. */ + bfd_vma p_paddr; /* Segment physical address in octets. */ + bfd_vma p_filesz; /* Segment size in file in octets. */ + bfd_vma p_memsz; /* Segment size in memory in octets. */ + bfd_vma p_align; /* Segment alignment in bytes, file + & memory */ }; typedef struct elf_internal_phdr Elf_Internal_Phdr; @@ -102,9 +103,10 @@ unsigned int sh_name; /* Section name, index in string tbl */ unsigned int sh_type; /* Type of section */ bfd_vma sh_flags; /* Miscellaneous section attributes */ - bfd_vma sh_addr; /* Section virtual addr at execution */ - file_ptr sh_offset; /* Section file offset */ - bfd_size_type sh_size; /* Size of section in bytes */ + bfd_vma sh_addr; /* Section virtual addr at execution in + octets. */ + file_ptr sh_offset; /* Section file offset in octets. */ + bfd_size_type sh_size; /* Size of section in octets. */ unsigned int sh_link; /* Index of another section */ unsigned int sh_info; /* Additional section information */ bfd_vma sh_addralign; /* Section alignment */ @@ -265,13 +267,13 @@ unsigned long p_type; /* Program segment flags. */ unsigned long p_flags; - /* Program segment physical address. */ + /* Program segment physical address in octets. */ bfd_vma p_paddr; - /* Program segment virtual address offset from section vma. */ + /* Program segment virtual address offset from section vma in bytes. */ bfd_vma p_vaddr_offset; /* Program segment alignment. */ bfd_vma p_align; - /* Segment size in file and memory */ + /* Segment size in file and memory in octets. */ bfd_vma p_size; /* Whether the p_flags field is valid; if not, the flags are based on the section flags. */ diff -Nru gdb-9.1/include/elf/ip2k.h gdb-10.2/include/elf/ip2k.h --- gdb-9.1/include/elf/ip2k.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/ip2k.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* IP2xxx ELF support for BFD. - Copyright (C) 2000-2019 Free Software Foundation, Inc. + Copyright (C) 2000-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/elf/iq2000.h gdb-10.2/include/elf/iq2000.h --- gdb-9.1/include/elf/iq2000.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/iq2000.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* IQ2000 ELF support for BFD. - Copyright (C) 2002-2019 Free Software Foundation, Inc. + Copyright (C) 2002-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/elf/lm32.h gdb-10.2/include/elf/lm32.h --- gdb-9.1/include/elf/lm32.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/lm32.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Lattice Mico32 ELF support for BFD. - Copyright (C) 2008-2019 Free Software Foundation, Inc. + Copyright (C) 2008-2020 Free Software Foundation, Inc. Contributed by Jon Beniston <jon@beniston.com> This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/elf/m32c.h gdb-10.2/include/elf/m32c.h --- gdb-9.1/include/elf/m32c.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/m32c.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* M32C ELF support for BFD. - Copyright (C) 2004-2019 Free Software Foundation, Inc. + Copyright (C) 2004-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/elf/m32r.h gdb-10.2/include/elf/m32r.h --- gdb-9.1/include/elf/m32r.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/m32r.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* M32R ELF support for BFD. - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/elf/m68hc11.h gdb-10.2/include/elf/m68hc11.h --- gdb-9.1/include/elf/m68hc11.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/m68hc11.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* m68hc11 & m68hc12 ELF support for BFD. - Copyright (C) 1999-2019 Free Software Foundation, Inc. + Copyright (C) 1999-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/elf/m68k.h gdb-10.2/include/elf/m68k.h --- gdb-9.1/include/elf/m68k.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/m68k.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* MC68k ELF support for BFD. - Copyright (C) 1998-2019 Free Software Foundation, Inc. + Copyright (C) 1998-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -97,5 +97,17 @@ #define EF_M68K_CF_EMAC_B 0x30 /* EMAC_B */ #define EF_M68K_CF_FLOAT 0x40 /* Has float insns */ #define EF_M68K_CF_MASK 0xFF - + +/* GNU object attribute tags. */ +enum +{ + /* 0-3 are generic. */ + + /* FP ABI, low 2 bits: + 1 for double precision hard-float, + 2 for soft-float, + 0 for not tagged or not using any ABIs affected by the differences. */ + Tag_GNU_M68K_ABI_FP = 4, +}; + #endif diff -Nru gdb-9.1/include/elf/mcore.h gdb-10.2/include/elf/mcore.h --- gdb-9.1/include/elf/mcore.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/mcore.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Motorola MCore support for BFD. - Copyright (C) 1995-2019 Free Software Foundation, Inc. + Copyright (C) 1995-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/elf/mep.h gdb-10.2/include/elf/mep.h --- gdb-9.1/include/elf/mep.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/mep.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Toshiba MeP ELF support for BFD. - Copyright (C) 2001-2019 Free Software Foundation, Inc. + Copyright (C) 2001-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/elf/metag.h gdb-10.2/include/elf/metag.h --- gdb-9.1/include/elf/metag.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/metag.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Meta ELF support for BFD. - Copyright (C) 2013-2019 Free Software Foundation, Inc. + Copyright (C) 2013-2020 Free Software Foundation, Inc. Contributed by Imagination Technologies Ltd. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/elf/microblaze.h gdb-10.2/include/elf/microblaze.h --- gdb-9.1/include/elf/microblaze.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/microblaze.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Xilinx MicroBlaze support for BFD. - Copyright (C) 2009-2019 Free Software Foundation, Inc. + Copyright (C) 2009-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/elf/mips.h gdb-10.2/include/elf/mips.h --- gdb-9.1/include/elf/mips.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/mips.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* MIPS ELF support for BFD. - Copyright (C) 1993-2019 Free Software Foundation, Inc. + Copyright (C) 1993-2020 Free Software Foundation, Inc. By Ian Lance Taylor, Cygnus Support, <ian@cygnus.com>, from information in the System V Application Binary Interface, MIPS @@ -560,11 +560,11 @@ typedef struct { /* Mask of general purpose registers used. */ - unsigned long ri_gprmask; + uint32_t ri_gprmask; /* Mask of co-processor registers used. */ - unsigned long ri_cprmask[4]; + uint32_t ri_cprmask[4]; /* GP register value for this object file. */ - long ri_gp_value; + uint32_t ri_gp_value; } Elf32_RegInfo; /* The external version of the Elf_RegInfo structure. */ @@ -1008,9 +1008,9 @@ /* Size of option descriptor, including header. */ unsigned char size; /* Section index of affected section, or 0 for global option. */ - unsigned short section; + uint16_t section; /* Information specific to this kind of option. */ - unsigned long info; + uint32_t info; } Elf_Internal_Options; /* MIPS ELF option header swapping routines. */ @@ -1074,13 +1074,13 @@ typedef struct { /* Mask of general purpose registers used. */ - unsigned long ri_gprmask; + uint32_t ri_gprmask; /* Padding. */ - unsigned long ri_pad; + uint32_t ri_pad; /* Mask of co-processor registers used. */ - unsigned long ri_cprmask[4]; + uint32_t ri_cprmask[4]; /* GP register value for this object file. */ - bfd_vma ri_gp_value; + uint64_t ri_gp_value; } Elf64_Internal_RegInfo; /* ABI Flags structure version 0. */ diff -Nru gdb-9.1/include/elf/mmix.h gdb-10.2/include/elf/mmix.h --- gdb-9.1/include/elf/mmix.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/mmix.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* MMIX support for BFD. - Copyright (C) 2001-2019 Free Software Foundation, Inc. + Copyright (C) 2001-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/elf/mn10200.h gdb-10.2/include/elf/mn10200.h --- gdb-9.1/include/elf/mn10200.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/mn10200.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* MN10200 ELF support for BFD. - Copyright (C) 1998-2019 Free Software Foundation, Inc. + Copyright (C) 1998-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/elf/mn10300.h gdb-10.2/include/elf/mn10300.h --- gdb-9.1/include/elf/mn10300.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/mn10300.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* MN10300 ELF support for BFD. - Copyright (C) 1998-2019 Free Software Foundation, Inc. + Copyright (C) 1998-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/elf/moxie.h gdb-10.2/include/elf/moxie.h --- gdb-9.1/include/elf/moxie.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/moxie.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* moxie ELF support for BFD. - Copyright (C) 2009-2019 Free Software Foundation, Inc. + Copyright (C) 2009-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/elf/msp430.h gdb-10.2/include/elf/msp430.h --- gdb-9.1/include/elf/msp430.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/msp430.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* MSP430 ELF support for BFD. - Copyright (C) 2002-2019 Free Software Foundation, Inc. + Copyright (C) 2002-2020 Free Software Foundation, Inc. Contributed by Dmitry Diky <diwil@mail.ru> This file is part of BFD, the Binary File Descriptor library. @@ -113,6 +113,8 @@ RELOC_NUMBER (R_MSP430_RL_PCREL, 8) RELOC_NUMBER (R_MSP430_8, 9) RELOC_NUMBER (R_MSP430_SYM_DIFF, 10) + RELOC_NUMBER (R_MSP430_GNU_SET_ULEB128, 11) /* GNU only. */ + RELOC_NUMBER (R_MSP430_GNU_SUB_ULEB128, 12) /* GNU only. */ END_RELOC_NUMBERS (R_MSP430_max) START_RELOC_NUMBERS (elf_msp430x_reloc_type) @@ -137,6 +139,8 @@ RELOC_NUMBER (R_MSP430X_10_PCREL, 19) /* Red Hat invention. Used for Jump instructions. */ RELOC_NUMBER (R_MSP430X_2X_PCREL, 20) /* Red Hat invention. Used for relaxing jumps. */ RELOC_NUMBER (R_MSP430X_SYM_DIFF, 21) /* Red Hat invention. Used for relaxing debug info. */ + RELOC_NUMBER (R_MSP430X_GNU_SET_ULEB128, 22) /* GNU only. */ + RELOC_NUMBER (R_MSP430X_GNU_SUB_ULEB128, 23) /* GNU only. */ END_RELOC_NUMBERS (R_MSP430x_max) #endif /* _ELF_MSP430_H */ diff -Nru gdb-9.1/include/elf/mt.h gdb-10.2/include/elf/mt.h --- gdb-9.1/include/elf/mt.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/mt.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* MS1 ELF support for BFD. - Copyright (C) 2000-2019 Free Software Foundation, Inc. + Copyright (C) 2000-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/elf/nds32.h gdb-10.2/include/elf/nds32.h --- gdb-9.1/include/elf/nds32.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/nds32.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* NDS32 ELF support for BFD. - Copyright (C) 2012-2019 Free Software Foundation, Inc. + Copyright (C) 2012-2020 Free Software Foundation, Inc. Contributed by Andes Technology Corporation. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/elf/nfp.h gdb-10.2/include/elf/nfp.h --- gdb-9.1/include/elf/nfp.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/nfp.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* NFP ELF support for BFD. - Copyright (C) 2017-2019 Free Software Foundation, Inc. + Copyright (C) 2017-2020 Free Software Foundation, Inc. Contributed by Francois H. Theron <francois.theron@netronome.com> This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/elf/nios2.h gdb-10.2/include/elf/nios2.h --- gdb-9.1/include/elf/nios2.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/nios2.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Altera Nios II ELF support for BFD. - Copyright (C) 2012-2019 Free Software Foundation, Inc. + Copyright (C) 2012-2020 Free Software Foundation, Inc. Contributed by Nigel Gray (ngray@altera.com). Contributed by Mentor Graphics, Inc. diff -Nru gdb-9.1/include/elf/or1k.h gdb-10.2/include/elf/or1k.h --- gdb-9.1/include/elf/or1k.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/or1k.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Or1k ELF support for BFD. - Copyright (C) 2001-2019 Free Software Foundation, Inc. + Copyright (C) 2001-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/elf/pj.h gdb-10.2/include/elf/pj.h --- gdb-9.1/include/elf/pj.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/pj.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* picoJava ELF support for BFD. - Copyright (C) 1999-2019 Free Software Foundation, Inc. + Copyright (C) 1999-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/elf/ppc64.h gdb-10.2/include/elf/ppc64.h --- gdb-9.1/include/elf/ppc64.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/ppc64.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* PPC64 ELF support for BFD. - Copyright (C) 2003-2019 Free Software Foundation, Inc. + Copyright (C) 2003-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -158,7 +158,7 @@ RELOC_NUMBER (R_PPC64_PLTSEQ, 119) RELOC_NUMBER (R_PPC64_PLTCALL, 120) -/* Powerxx support. */ +/* Power10 support. */ RELOC_NUMBER (R_PPC64_PLTSEQ_NOTOC, 121) RELOC_NUMBER (R_PPC64_PLTCALL_NOTOC, 122) RELOC_NUMBER (R_PPC64_PCREL_OPT, 123) @@ -183,10 +183,10 @@ RELOC_NUMBER (R_PPC64_PCREL28, 145) RELOC_NUMBER (R_PPC64_TPREL34, 146) RELOC_NUMBER (R_PPC64_DTPREL34, 147) - RELOC_NUMBER (R_PPC64_GOT_TLSGD34, 148) - RELOC_NUMBER (R_PPC64_GOT_TLSLD34, 149) - RELOC_NUMBER (R_PPC64_GOT_TPREL34, 150) - RELOC_NUMBER (R_PPC64_GOT_DTPREL34, 151) + RELOC_NUMBER (R_PPC64_GOT_TLSGD_PCREL34, 148) + RELOC_NUMBER (R_PPC64_GOT_TLSLD_PCREL34, 149) + RELOC_NUMBER (R_PPC64_GOT_TPREL_PCREL34, 150) + RELOC_NUMBER (R_PPC64_GOT_DTPREL_PCREL34, 151) #ifndef RELOC_MACROS_GEN_FUNC /* Relocation only used internally by gas or ld. If you need to use @@ -225,7 +225,7 @@ #define IS_PPC64_TLS_RELOC(R) \ (((R) >= R_PPC64_TLS && (R) <= R_PPC64_DTPREL16_HIGHESTA) \ || ((R) >= R_PPC64_TPREL16_HIGH && (R) <= R_PPC64_DTPREL16_HIGHA) \ - || ((R) >= R_PPC64_TPREL34 && (R) <= R_PPC64_GOT_DTPREL34)) + || ((R) >= R_PPC64_TPREL34 && (R) <= R_PPC64_GOT_DTPREL_PCREL34)) /* e_flags bits specifying ABI. 1 for original function descriptor using ABI, @@ -256,14 +256,14 @@ #define STO_PPC64_LOCAL_BIT 5 #define STO_PPC64_LOCAL_MASK (7 << STO_PPC64_LOCAL_BIT) -// 3 bit other field to bytes. +/* 3 bit other field to bytes. */ static inline unsigned int ppc64_decode_local_entry(unsigned int other) { return ((1 << other) >> 2) << 2; } -// bytes to field value. +/* bytes to field value. */ static inline unsigned int ppc64_encode_local_entry(unsigned int val) { diff -Nru gdb-9.1/include/elf/ppc.h gdb-10.2/include/elf/ppc.h --- gdb-9.1/include/elf/ppc.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/ppc.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* PPC ELF support for BFD. - Copyright (C) 1995-2019 Free Software Foundation, Inc. + Copyright (C) 1995-2020 Free Software Foundation, Inc. By Michael Meissner, Cygnus Support, <meissner@cygnus.com>, from information in the System V Application Binary Interface, diff -Nru gdb-9.1/include/elf/pru.h gdb-10.2/include/elf/pru.h --- gdb-9.1/include/elf/pru.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/pru.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* TI PRU ELF support for BFD. - Copyright (C) 2014-2019 Free Software Foundation, Inc. + Copyright (C) 2014-2020 Free Software Foundation, Inc. Contributed by Dimitar Dimitrov <dimitar@dinux.eu> This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/elf/reloc-macros.h gdb-10.2/include/elf/reloc-macros.h --- gdb-9.1/include/elf/reloc-macros.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/reloc-macros.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Generic relocation support for BFD. - Copyright (C) 1998-2019 Free Software Foundation, Inc. + Copyright (C) 1998-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/elf/riscv.h gdb-10.2/include/elf/riscv.h --- gdb-9.1/include/elf/riscv.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/riscv.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* RISC-V ELF support for BFD. - Copyright (C) 2011-2019 Free Software Foundation, Inc. + Copyright (C) 2011-2020 Free Software Foundation, Inc. Contributed by Andrew Waterman (andrew@sifive.com). Based on MIPS ELF support for BFD, by Ian Lance Taylor. diff -Nru gdb-9.1/include/elf/rl78.h gdb-10.2/include/elf/rl78.h --- gdb-9.1/include/elf/rl78.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/rl78.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* RL78 ELF support for BFD. - Copyright (C) 2008-2019 Free Software Foundation, Inc. + Copyright (C) 2008-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/elf/rx.h gdb-10.2/include/elf/rx.h --- gdb-9.1/include/elf/rx.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/rx.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* RX ELF support for BFD. - Copyright (C) 2008-2019 Free Software Foundation, Inc. + Copyright (C) 2008-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/elf/s12z.h gdb-10.2/include/elf/s12z.h --- gdb-9.1/include/elf/s12z.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/s12z.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* s12z ELF support for BFD. - Copyright (C) 1999-2019 Free Software Foundation, Inc. + Copyright (C) 1999-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/elf/s390.h gdb-10.2/include/elf/s390.h --- gdb-9.1/include/elf/s390.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/s390.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* 390 ELF support for BFD. - Copyright (C) 2000-2019 Free Software Foundation, Inc. + Copyright (C) 2000-2020 Free Software Foundation, Inc. Contributed by Carl B. Pedersen and Martin Schwidefsky. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/elf/score.h gdb-10.2/include/elf/score.h --- gdb-9.1/include/elf/score.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/score.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Score ELF support for BFD. - Copyright (C) 2006-2019 Free Software Foundation, Inc. + Copyright (C) 2006-2020 Free Software Foundation, Inc. Contributed by Brain.lin (brain.lin@sunplusct.com) Mei Ligang (ligang@sunnorth.com.cn) diff -Nru gdb-9.1/include/elf/sh.h gdb-10.2/include/elf/sh.h --- gdb-9.1/include/elf/sh.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/sh.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* SH ELF support for BFD. - Copyright (C) 1998-2019 Free Software Foundation, Inc. + Copyright (C) 1998-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -95,27 +95,6 @@ be relocated independently. */ #define EF_SH_FDPIC 0x8000 /* Uses the FDPIC ABI. */ -/* Flags for the st_other symbol field. - Keep away from the STV_ visibility flags (bit 0..1). */ - -/* A reference to this symbol should by default add 1. */ -#define STO_SH5_ISA32 (1 << 2) - -/* Section contains only SHmedia code (no SHcompact code). */ -#define SHF_SH5_ISA32 0x40000000 - -/* Section contains both SHmedia and SHcompact code, and possibly also - constants. */ -#define SHF_SH5_ISA32_MIXED 0x20000000 - -/* If applied to a .cranges section, marks that the section is sorted by - increasing cr_addr values. */ -#define SHT_SH5_CR_SORTED 0x80000001 - -/* Symbol should be handled as DataLabel (attached to global SHN_UNDEF - symbols). */ -#define STT_DATALABEL STT_LOPROC - #include "elf/reloc-macros.h" /* Relocations. */ diff -Nru gdb-9.1/include/elf/sparc.h gdb-10.2/include/elf/sparc.h --- gdb-9.1/include/elf/sparc.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/sparc.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* SPARC ELF support for BFD. - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. By Doug Evans, Cygnus Support, <dje@cygnus.com>. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/elf/spu.h gdb-10.2/include/elf/spu.h --- gdb-9.1/include/elf/spu.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/spu.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* SPU ELF support for BFD. - Copyright (C) 2006-2019 Free Software Foundation, Inc. + Copyright (C) 2006-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/elf/tic6x-attrs.h gdb-10.2/include/elf/tic6x-attrs.h --- gdb-9.1/include/elf/tic6x-attrs.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/tic6x-attrs.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* TI C6X ELF attributes. - Copyright (C) 2010-2019 Free Software Foundation, Inc. + Copyright (C) 2010-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/elf/tic6x.h gdb-10.2/include/elf/tic6x.h --- gdb-9.1/include/elf/tic6x.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/tic6x.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* TI C6X ELF support for BFD. - Copyright (C) 2010-2019 Free Software Foundation, Inc. + Copyright (C) 2010-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/elf/tilegx.h gdb-10.2/include/elf/tilegx.h --- gdb-9.1/include/elf/tilegx.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/tilegx.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* TILE-Gx ELF support for BFD. - Copyright (C) 2011-2019 Free Software Foundation, Inc. + Copyright (C) 2011-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/elf/tilepro.h gdb-10.2/include/elf/tilepro.h --- gdb-9.1/include/elf/tilepro.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/tilepro.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* TILEPro ELF support for BFD. - Copyright (C) 2011-2019 Free Software Foundation, Inc. + Copyright (C) 2011-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/elf/v850.h gdb-10.2/include/elf/v850.h --- gdb-9.1/include/elf/v850.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/v850.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* V850 ELF support for BFD. - Copyright (C) 1997-2019 Free Software Foundation, Inc. + Copyright (C) 1997-2020 Free Software Foundation, Inc. Created by Michael Meissner, Cygnus Support <meissner@cygnus.com> This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/elf/vax.h gdb-10.2/include/elf/vax.h --- gdb-9.1/include/elf/vax.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/vax.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* VAX ELF support for BFD. - Copyright (C) 2002-2019 Free Software Foundation, Inc. + Copyright (C) 2002-2020 Free Software Foundation, Inc. Contributed by Matt Thomas <matt@3am-software.com>. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/elf/visium.h gdb-10.2/include/elf/visium.h --- gdb-9.1/include/elf/visium.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/visium.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Visium ELF support for BFD. - Copyright (C) 2002-2019 Free Software Foundation, Inc. + Copyright (C) 2002-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/elf/vxworks.h gdb-10.2/include/elf/vxworks.h --- gdb-9.1/include/elf/vxworks.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/vxworks.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* VxWorks ELF support for BFD. - Copyright (C) 2007-2019 Free Software Foundation, Inc. + Copyright (C) 2007-2020 Free Software Foundation, Inc. Contributed by Nathan Sidwell <nathan@codesourcery.com> diff -Nru gdb-9.1/include/elf/wasm32.h gdb-10.2/include/elf/wasm32.h --- gdb-9.1/include/elf/wasm32.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/wasm32.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* ELF support for BFD for the WebAssembly target - Copyright (C) 2017-2019 Free Software Foundation, Inc. + Copyright (C) 2017-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/include/elf/x86-64.h gdb-10.2/include/elf/x86-64.h --- gdb-9.1/include/elf/x86-64.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/x86-64.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* x86_64 ELF support for BFD. - Copyright (C) 2000-2019 Free Software Foundation, Inc. + Copyright (C) 2000-2020 Free Software Foundation, Inc. Contributed by Jan Hubicka <jh@suse.cz> This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/elf/xc16x.h gdb-10.2/include/elf/xc16x.h --- gdb-9.1/include/elf/xc16x.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/xc16x.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Infineon XC16X ELF support for BFD. - Copyright (C) 2006-2019 Free Software Foundation, Inc. + Copyright (C) 2006-2020 Free Software Foundation, Inc. Contributed by KPIT Cummins Infosystems This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/elf/xgate.h gdb-10.2/include/elf/xgate.h --- gdb-9.1/include/elf/xgate.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/xgate.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* XGATE ELF support for BFD. - Copyright (C) 2010-2019 Free Software Foundation, Inc. + Copyright (C) 2010-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/elf/xstormy16.h gdb-10.2/include/elf/xstormy16.h --- gdb-9.1/include/elf/xstormy16.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/xstormy16.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* XSTORMY16 ELF support for BFD. - Copyright (C) 2001-2019 Free Software Foundation, Inc. + Copyright (C) 2001-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/elf/xtensa.h gdb-10.2/include/elf/xtensa.h --- gdb-9.1/include/elf/xtensa.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/elf/xtensa.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Xtensa ELF support for BFD. - Copyright (C) 2003-2019 Free Software Foundation, Inc. + Copyright (C) 2003-2020 Free Software Foundation, Inc. Contributed by Bob Wilson (bwilson@tensilica.com) at Tensilica. This file is part of BFD, the Binary File Descriptor library. @@ -87,6 +87,12 @@ RELOC_NUMBER (R_XTENSA_TLS_FUNC, 54) RELOC_NUMBER (R_XTENSA_TLS_ARG, 55) RELOC_NUMBER (R_XTENSA_TLS_CALL, 56) + RELOC_NUMBER (R_XTENSA_PDIFF8, 57) + RELOC_NUMBER (R_XTENSA_PDIFF16, 58) + RELOC_NUMBER (R_XTENSA_PDIFF32, 59) + RELOC_NUMBER (R_XTENSA_NDIFF8, 60) + RELOC_NUMBER (R_XTENSA_NDIFF16, 61) + RELOC_NUMBER (R_XTENSA_NDIFF32, 62) END_RELOC_NUMBERS (R_XTENSA_max) /* Processor-specific flags for the ELF header e_flags field. */ @@ -219,6 +225,9 @@ extern int xtensa_compute_fill_extra_space (property_table_entry *entry); +extern int +xtensa_abi_choice (void); + #ifdef __cplusplus } #endif diff -Nru gdb-9.1/include/elf/z80.h gdb-10.2/include/elf/z80.h --- gdb-9.1/include/elf/z80.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/include/elf/z80.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,54 @@ +/* Z80 ELF support for BFD. + Copyright (C) 1999-2019 Free Software Foundation, Inc. + Contributed by Sergey Belyashov <sergey.belyashov@gmail.com> + + This file is part of BFD, the Binary File Descriptor library. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ + +#ifndef _ELF_Z80_H +#define _ELF_Z80_H + +#include "elf/reloc-macros.h" + +/* Processor specific flags for the ELF header e_flags field. */ +#define EF_Z80_MACH_Z80 0x01 +#define EF_Z80_MACH_Z180 0x02 +#define EF_Z80_MACH_R800 0x03 +#define EF_Z80_MACH_EZ80_Z80 0x04 +#define EF_Z80_MACH_EZ80_ADL 0x84 +#define EF_Z80_MACH_GBZ80 0x05 +#define EF_Z80_MACH_Z80N 0x06 +#define EF_Z80_MACH_MSK 0xff + +/* Relocations. */ +START_RELOC_NUMBERS (elf_z80_reloc_type) + RELOC_NUMBER (R_Z80_NONE, 0) + RELOC_NUMBER (R_Z80_8, 1) + RELOC_NUMBER (R_Z80_8_DIS, 2) + RELOC_NUMBER (R_Z80_8_PCREL, 3) + RELOC_NUMBER (R_Z80_16, 4) + RELOC_NUMBER (R_Z80_24, 5) + RELOC_NUMBER (R_Z80_32, 6) + RELOC_NUMBER (R_Z80_BYTE0, 7) + RELOC_NUMBER (R_Z80_BYTE1, 8) + RELOC_NUMBER (R_Z80_BYTE2, 9) + RELOC_NUMBER (R_Z80_BYTE3, 10) + RELOC_NUMBER (R_Z80_WORD0, 11) + RELOC_NUMBER (R_Z80_WORD1, 12) + RELOC_NUMBER (R_Z80_16_BE, 13) +END_RELOC_NUMBERS (R_Z80_max) + +#endif /* _ELF_Z80_H */ diff -Nru gdb-9.1/include/environ.h gdb-10.2/include/environ.h --- gdb-9.1/include/environ.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/environ.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Declare the environ system variable. - Copyright (C) 2015-2019 Free Software Foundation, Inc. + Copyright (C) 2015-2020 Free Software Foundation, Inc. This file is part of the libiberty library. Libiberty is free software; you can redistribute it and/or diff -Nru gdb-9.1/include/fibheap.h gdb-10.2/include/fibheap.h --- gdb-9.1/include/fibheap.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/fibheap.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* A Fibonacci heap datatype. - Copyright (C) 1998-2019 Free Software Foundation, Inc. + Copyright (C) 1998-2020 Free Software Foundation, Inc. Contributed by Daniel Berlin (dan@cgsoftware.com). This file is part of GCC. diff -Nru gdb-9.1/include/filenames.h gdb-10.2/include/filenames.h --- gdb-9.1/include/filenames.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/filenames.h 2021-04-25 04:06:26.000000000 +0000 @@ -5,7 +5,7 @@ use forward- and back-slash in path names interchangeably, and some of them have case-insensitive file names. - Copyright (C) 2000-2019 Free Software Foundation, Inc. + Copyright (C) 2000-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -32,7 +32,8 @@ extern "C" { #endif -#if defined(__MSDOS__) || defined(_WIN32) || defined(__OS2__) || defined (__CYGWIN__) +#if defined(__MSDOS__) || (defined(_WIN32) && ! defined(__CYGWIN__)) || \ + defined(__OS2__) # ifndef HAVE_DOS_BASED_FILE_SYSTEM # define HAVE_DOS_BASED_FILE_SYSTEM 1 # endif diff -Nru gdb-9.1/include/floatformat.h gdb-10.2/include/floatformat.h --- gdb-9.1/include/floatformat.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/floatformat.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* IEEE floating point support declarations, for GDB, the GNU Debugger. - Copyright (C) 1991-2019 Free Software Foundation, Inc. + Copyright (C) 1991-2020 Free Software Foundation, Inc. This file is part of GDB. @@ -133,6 +133,9 @@ /* IBM long double (double+double). */ extern const struct floatformat floatformat_ibm_long_double_big; extern const struct floatformat floatformat_ibm_long_double_little; +/* bfloat16. */ +extern const struct floatformat floatformat_bfloat16_big; +extern const struct floatformat floatformat_bfloat16_little; /* Convert from FMT to a double. FROM is the address of the extended float. diff -Nru gdb-9.1/include/fnmatch.h gdb-10.2/include/fnmatch.h --- gdb-9.1/include/fnmatch.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/fnmatch.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 1991-2019 Free Software Foundation, Inc. +/* Copyright (C) 1991-2020 Free Software Foundation, Inc. NOTE: The canonical source of this file is maintained with the GNU C Library. Bugs can be reported to bug-glibc@prep.ai.mit.edu. diff -Nru gdb-9.1/include/fopen-bin.h gdb-10.2/include/fopen-bin.h --- gdb-9.1/include/fopen-bin.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/fopen-bin.h 2021-04-25 04:06:26.000000000 +0000 @@ -7,7 +7,7 @@ cope with a "b" in the string, indicating binary files, but some reject this (and thereby don't conform to ANSI C, but what else is new?). - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/include/fopen-same.h gdb-10.2/include/fopen-same.h --- gdb-9.1/include/fopen-same.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/fopen-same.h 2021-04-25 04:06:26.000000000 +0000 @@ -7,7 +7,7 @@ "b" to the string, indicating binary files, but some reject this (and thereby don't conform to ANSI C, but what else is new?). - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/include/fopen-vms.h gdb-10.2/include/fopen-vms.h --- gdb-9.1/include/fopen-vms.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/fopen-vms.h 2021-04-25 04:06:26.000000000 +0000 @@ -5,7 +5,7 @@ This version is for VMS systems, where text and binary files are different. - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/include/gcc-c-fe.def gdb-10.2/include/gcc-c-fe.def --- gdb-9.1/include/gcc-c-fe.def 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/gcc-c-fe.def 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Interface between GCC C FE and GDB -*- c -*- - Copyright (C) 2014-2019 Free Software Foundation, Inc. + Copyright (C) 2014-2020 Free Software Foundation, Inc. This file is part of GCC. diff -Nru gdb-9.1/include/gcc-c-interface.h gdb-10.2/include/gcc-c-interface.h --- gdb-9.1/include/gcc-c-interface.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/gcc-c-interface.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Interface between GCC C FE and GDB - Copyright (C) 2014-2019 Free Software Foundation, Inc. + Copyright (C) 2014-2020 Free Software Foundation, Inc. This file is part of GCC. diff -Nru gdb-9.1/include/gcc-cp-fe.def gdb-10.2/include/gcc-cp-fe.def --- gdb-9.1/include/gcc-cp-fe.def 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/gcc-cp-fe.def 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Interface between GCC C++ FE and GDB -*- c -*- - Copyright (C) 2014-2019 Free Software Foundation, Inc. + Copyright (C) 2014-2020 Free Software Foundation, Inc. This file is part of GCC. diff -Nru gdb-9.1/include/gcc-cp-interface.h gdb-10.2/include/gcc-cp-interface.h --- gdb-9.1/include/gcc-cp-interface.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/gcc-cp-interface.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Interface between GCC C++ FE and GDB - Copyright (C) 2014-2019 Free Software Foundation, Inc. + Copyright (C) 2014-2020 Free Software Foundation, Inc. This file is part of GCC. diff -Nru gdb-9.1/include/gcc-interface.h gdb-10.2/include/gcc-interface.h --- gdb-9.1/include/gcc-interface.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/gcc-interface.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Generic interface between GCC and GDB - Copyright (C) 2014-2019 Free Software Foundation, Inc. + Copyright (C) 2014-2020 Free Software Foundation, Inc. This file is part of GCC. diff -Nru gdb-9.1/include/gdb/callback.h gdb-10.2/include/gdb/callback.h --- gdb-9.1/include/gdb/callback.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/include/gdb/callback.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Remote target system call callback support. - Copyright (C) 1997-2020 Free Software Foundation, Inc. + Copyright (C) 1997-2021 Free Software Foundation, Inc. Contributed by Cygnus Solutions. This file is part of GDB. diff -Nru gdb-9.1/include/gdb/ChangeLog gdb-10.2/include/gdb/ChangeLog --- gdb-9.1/include/gdb/ChangeLog 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/include/gdb/ChangeLog 2021-04-25 04:06:26.000000000 +0000 @@ -340,7 +340,7 @@ * signals.h: New file, from gdb/defs.h. -Copyright (C) 2002-2020 Free Software Foundation, Inc. +Copyright (C) 2002-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/include/gdb/fileio.h gdb-10.2/include/gdb/fileio.h --- gdb-9.1/include/gdb/fileio.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/include/gdb/fileio.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Hosted File I/O interface definitions, for GDB, the GNU Debugger. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/include/gdb/gdb-index.h gdb-10.2/include/gdb/gdb-index.h --- gdb-9.1/include/gdb/gdb-index.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/include/gdb/gdb-index.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Public attributes of the .gdb_index section. - Copyright (C) 2012-2020 Free Software Foundation, Inc. + Copyright (C) 2012-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/include/gdb/remote-sim.h gdb-10.2/include/gdb/remote-sim.h --- gdb-9.1/include/gdb/remote-sim.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/include/gdb/remote-sim.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This file defines the interface between the simulator and gdb. - Copyright (C) 1993-2020 Free Software Foundation, Inc. + Copyright (C) 1993-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/include/gdb/section-scripts.h gdb-10.2/include/gdb/section-scripts.h --- gdb-9.1/include/gdb/section-scripts.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/include/gdb/section-scripts.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Definition of kinds of records in section .debug_gdb_scripts. - Copyright (C) 2014-2020 Free Software Foundation, Inc. + Copyright (C) 2014-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/include/gdb/signals.def gdb-10.2/include/gdb/signals.def --- gdb-9.1/include/gdb/signals.def 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/include/gdb/signals.def 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Target signal numbers for GDB and the GDB remote protocol. - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/include/gdb/signals.h gdb-10.2/include/gdb/signals.h --- gdb-9.1/include/gdb/signals.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/include/gdb/signals.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Target signal numbers for GDB and the GDB remote protocol. - Copyright (C) 1986-2020 Free Software Foundation, Inc. + Copyright (C) 1986-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/include/gdb/sim-aarch64.h gdb-10.2/include/gdb/sim-aarch64.h --- gdb-9.1/include/gdb/sim-aarch64.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/include/gdb/sim-aarch64.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* sim-aarch64.h --- interface between AArch64 simulator and GDB. - Copyright (C) 2015-2020 Free Software Foundation, Inc. + Copyright (C) 2015-2021 Free Software Foundation, Inc. Contributed by Red Hat. diff -Nru gdb-9.1/include/gdb/sim-arm.h gdb-10.2/include/gdb/sim-arm.h --- gdb-9.1/include/gdb/sim-arm.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/include/gdb/sim-arm.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This file defines the interface between the Arm simulator and GDB. - Copyright (C) 2002-2020 Free Software Foundation, Inc. + Copyright (C) 2002-2021 Free Software Foundation, Inc. Contributed by Red Hat. diff -Nru gdb-9.1/include/gdb/sim-bfin.h gdb-10.2/include/gdb/sim-bfin.h --- gdb-9.1/include/gdb/sim-bfin.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/include/gdb/sim-bfin.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This file defines the interface between the Blackfin simulator and GDB. - Copyright (C) 2005-2020 Free Software Foundation, Inc. + Copyright (C) 2005-2021 Free Software Foundation, Inc. Contributed by Analog Devices. This file is part of GDB. diff -Nru gdb-9.1/include/gdb/sim-cr16.h gdb-10.2/include/gdb/sim-cr16.h --- gdb-9.1/include/gdb/sim-cr16.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/include/gdb/sim-cr16.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This file defines the interface between the cr16 simulator and gdb. - Copyright (C) 2008-2020 Free Software Foundation, Inc. + Copyright (C) 2008-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/include/gdb/sim-d10v.h gdb-10.2/include/gdb/sim-d10v.h --- gdb-9.1/include/gdb/sim-d10v.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/include/gdb/sim-d10v.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This file defines the interface between the d10v simulator and gdb. - Copyright (C) 1999-2020 Free Software Foundation, Inc. + Copyright (C) 1999-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/include/gdb/sim-frv.h gdb-10.2/include/gdb/sim-frv.h --- gdb-9.1/include/gdb/sim-frv.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/include/gdb/sim-frv.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This file defines the interface between the FR-V simulator and GDB. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. Contributed by Red Hat. diff -Nru gdb-9.1/include/gdb/sim-ft32.h gdb-10.2/include/gdb/sim-ft32.h --- gdb-9.1/include/gdb/sim-ft32.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/include/gdb/sim-ft32.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This file defines the interface between the FT32 simulator and GDB. - Copyright (C) 2005-2020 Free Software Foundation, Inc. + Copyright (C) 2005-2021 Free Software Foundation, Inc. Contributed by FTDI. This file is part of GDB. diff -Nru gdb-9.1/include/gdb/sim-h8300.h gdb-10.2/include/gdb/sim-h8300.h --- gdb-9.1/include/gdb/sim-h8300.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/include/gdb/sim-h8300.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* This file defines the interface between the h8300 simulator and gdb. - Copyright (C) 2002-2020 Free Software Foundation, Inc. + Copyright (C) 2002-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/include/gdb/sim-lm32.h gdb-10.2/include/gdb/sim-lm32.h --- gdb-9.1/include/gdb/sim-lm32.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/include/gdb/sim-lm32.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,7 +1,7 @@ /* This file defines the interface between the LM32 simulator and GDB. Contributed by Jon Beniston <jon@beniston.com> - Copyright (C) 2009-2020 Free Software Foundation, Inc. + Copyright (C) 2009-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/include/gdb/sim-m32c.h gdb-10.2/include/gdb/sim-m32c.h --- gdb-9.1/include/gdb/sim-m32c.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/include/gdb/sim-m32c.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* This file defines the interface between the m32c simulator and gdb. - Copyright (C) 2005-2020 Free Software Foundation, Inc. + Copyright (C) 2005-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/include/gdb/sim-ppc.h gdb-10.2/include/gdb/sim-ppc.h --- gdb-9.1/include/gdb/sim-ppc.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/include/gdb/sim-ppc.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* sim-ppc.h --- interface between PowerPC simulator and GDB. - Copyright (C) 2004-2020 Free Software Foundation, Inc. + Copyright (C) 2004-2021 Free Software Foundation, Inc. Contributed by Red Hat. diff -Nru gdb-9.1/include/gdb/sim-rl78.h gdb-10.2/include/gdb/sim-rl78.h --- gdb-9.1/include/gdb/sim-rl78.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/include/gdb/sim-rl78.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* sim-rx.h --- interface between rl78 simulator and GDB. - Copyright (C) 2011-2020 Free Software Foundation, Inc. + Copyright (C) 2011-2021 Free Software Foundation, Inc. Contributed by Red Hat. diff -Nru gdb-9.1/include/gdb/sim-rx.h gdb-10.2/include/gdb/sim-rx.h --- gdb-9.1/include/gdb/sim-rx.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/include/gdb/sim-rx.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* sim-rx.h --- interface between RX simulator and GDB. - Copyright (C) 2008-2020 Free Software Foundation, Inc. + Copyright (C) 2008-2021 Free Software Foundation, Inc. Contributed by Red Hat. diff -Nru gdb-9.1/include/gdb/sim-sh.h gdb-10.2/include/gdb/sim-sh.h --- gdb-9.1/include/gdb/sim-sh.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/include/gdb/sim-sh.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* This file defines the interface between the sh simulator and gdb. - Copyright (C) 2000-2020 Free Software Foundation, Inc. + Copyright (C) 2000-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/include/getopt.h gdb-10.2/include/getopt.h --- gdb-9.1/include/getopt.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/getopt.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Declarations for getopt. - Copyright (C) 1989-2019 Free Software Foundation, Inc. + Copyright (C) 1989-2020 Free Software Foundation, Inc. NOTE: The canonical source of this file is maintained with the GNU C Library. Bugs can be reported to bug-glibc@gnu.org. diff -Nru gdb-9.1/include/hashtab.h gdb-10.2/include/hashtab.h --- gdb-9.1/include/hashtab.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/hashtab.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* An expandable hash tables datatype. - Copyright (C) 1999-2019 Free Software Foundation, Inc. + Copyright (C) 1999-2020 Free Software Foundation, Inc. Contributed by Vladimir Makarov (vmakarov@cygnus.com). This program is free software; you can redistribute it and/or modify @@ -173,8 +173,8 @@ extern void ** htab_find_slot_with_hash (htab_t, const void *, hashval_t, enum insert_option); extern void htab_clear_slot (htab_t, void **); -extern void htab_remove_elt (htab_t, void *); -extern void htab_remove_elt_with_hash (htab_t, void *, hashval_t); +extern void htab_remove_elt (htab_t, const void *); +extern void htab_remove_elt_with_hash (htab_t, const void *, hashval_t); extern void htab_traverse (htab_t, htab_trav, void *); extern void htab_traverse_noresize (htab_t, htab_trav, void *); diff -Nru gdb-9.1/include/hp-symtab.h gdb-10.2/include/hp-symtab.h --- gdb-9.1/include/hp-symtab.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/hp-symtab.h 2021-04-25 04:06:26.000000000 +0000 @@ -4,7 +4,7 @@ Written by the Center for Software Science at the University of Utah and by Cygnus Support. - Copyright (C) 1994-2019 Free Software Foundation, Inc. + Copyright (C) 1994-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/include/leb128.h gdb-10.2/include/leb128.h --- gdb-9.1/include/leb128.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/leb128.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Utilities for reading leb128 values. - Copyright (C) 2012-2019 Free Software Foundation, Inc. + Copyright (C) 2012-2020 Free Software Foundation, Inc. This file is part of the libiberty library. Libiberty is free software; you can redistribute it and/or diff -Nru gdb-9.1/include/libiberty.h gdb-10.2/include/libiberty.h --- gdb-9.1/include/libiberty.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/libiberty.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Function declarations for libiberty. - Copyright (C) 1997-2019 Free Software Foundation, Inc. + Copyright (C) 1997-2020 Free Software Foundation, Inc. Note - certain prototypes declared in this header file are for functions whoes implementation copyright does not belong to the @@ -137,6 +137,10 @@ extern char *lrealpath (const char *); +/* Return true when FD file descriptor exists. */ + +extern int is_valid_fd (int fd); + /* Concatenate an arbitrary number of strings. You must pass NULL as the last argument of this function, to terminate the list of strings. Allocates memory using xmalloc. */ @@ -310,30 +314,30 @@ message to stderr (using the name set by xmalloc_set_program_name, if any) and then call xexit. */ -extern void *xmalloc (size_t) ATTRIBUTE_MALLOC ATTRIBUTE_RETURNS_NONNULL; +extern void *xmalloc (size_t) ATTRIBUTE_MALLOC ATTRIBUTE_RETURNS_NONNULL ATTRIBUTE_RESULT_SIZE_1 ATTRIBUTE_WARN_UNUSED_RESULT; /* Reallocate memory without fail. This works like xmalloc. Note, realloc type functions are not suitable for attribute malloc since they may return the same address across multiple calls. */ -extern void *xrealloc (void *, size_t) ATTRIBUTE_RETURNS_NONNULL; +extern void *xrealloc (void *, size_t) ATTRIBUTE_RETURNS_NONNULL ATTRIBUTE_RESULT_SIZE_2 ATTRIBUTE_WARN_UNUSED_RESULT; /* Allocate memory without fail and set it to zero. This works like xmalloc. */ -extern void *xcalloc (size_t, size_t) ATTRIBUTE_MALLOC ATTRIBUTE_RETURNS_NONNULL; +extern void *xcalloc (size_t, size_t) ATTRIBUTE_MALLOC ATTRIBUTE_RETURNS_NONNULL ATTRIBUTE_RESULT_SIZE_1_2 ATTRIBUTE_WARN_UNUSED_RESULT; /* Copy a string into a memory buffer without fail. */ -extern char *xstrdup (const char *) ATTRIBUTE_MALLOC ATTRIBUTE_RETURNS_NONNULL; +extern char *xstrdup (const char *) ATTRIBUTE_MALLOC ATTRIBUTE_RETURNS_NONNULL ATTRIBUTE_WARN_UNUSED_RESULT; /* Copy at most N characters from string into a buffer without fail. */ -extern char *xstrndup (const char *, size_t) ATTRIBUTE_MALLOC ATTRIBUTE_RETURNS_NONNULL; +extern char *xstrndup (const char *, size_t) ATTRIBUTE_MALLOC ATTRIBUTE_RETURNS_NONNULL ATTRIBUTE_WARN_UNUSED_RESULT; /* Copy an existing memory buffer to a new memory buffer without fail. */ -extern void *xmemdup (const void *, size_t, size_t) ATTRIBUTE_MALLOC ATTRIBUTE_RETURNS_NONNULL; +extern void *xmemdup (const void *, size_t, size_t) ATTRIBUTE_MALLOC ATTRIBUTE_RETURNS_NONNULL ATTRIBUTE_WARN_UNUSED_RESULT; /* Physical memory routines. Return values are in BYTES. */ extern double physmem_total (void); @@ -637,6 +641,13 @@ extern int pwait (int, int *, int); +/* Like bsearch, but takes and passes on an argument like qsort_r. */ + +extern void *bsearch_r (const void *, const void *, + size_t, size_t, + int (*)(const void *, const void *, void *), + void *); + #if defined(HAVE_DECL_ASPRINTF) && !HAVE_DECL_ASPRINTF /* Like sprintf but provides a pointer to malloc'd storage, which must be freed by the caller. */ @@ -649,7 +660,7 @@ extern char *xasprintf (const char *, ...) ATTRIBUTE_MALLOC ATTRIBUTE_PRINTF_1; -#if !HAVE_DECL_VASPRINTF +#if defined(HAVE_DECL_VASPRINTF) && !HAVE_DECL_VASPRINTF /* Like vsprintf but provides a pointer to malloc'd storage, which must be freed by the caller. */ diff -Nru gdb-9.1/include/longlong.h gdb-10.2/include/longlong.h --- gdb-9.1/include/longlong.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/longlong.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* longlong.h -- definitions for mixed size 32/64 bit arithmetic. - Copyright (C) 1991-2019 Free Software Foundation, Inc. + Copyright (C) 1991-2020 Free Software Foundation, Inc. This file is part of the GNU C Library. diff -Nru gdb-9.1/include/lto-symtab.h gdb-10.2/include/lto-symtab.h --- gdb-9.1/include/lto-symtab.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/lto-symtab.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Data types used in the IL symbol table. - Copyright (C) 2009-2019 Free Software Foundation, Inc. + Copyright (C) 2009-2020 Free Software Foundation, Inc. Contributed by Rafael Espindola <espindola@google.com> This file is part of GCC. @@ -38,4 +38,17 @@ GCCPV_HIDDEN }; +enum gcc_plugin_symbol_type +{ + GCCST_UNKNOWN, + GCCST_FUNCTION, + GCCST_VARIABLE +}; + +enum gcc_plugin_symbol_section_kind +{ + GCCSSK_DEFAULT, + GCCSSK_BSS +}; + #endif /* GCC_LTO_SYMTAB_H */ diff -Nru gdb-9.1/include/mach-o/arm64.h gdb-10.2/include/mach-o/arm64.h --- gdb-9.1/include/mach-o/arm64.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/mach-o/arm64.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Mach-O arm declarations for BFD. - Copyright (C) 2015-2019 Free Software Foundation, Inc. + Copyright (C) 2015-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/mach-o/arm.h gdb-10.2/include/mach-o/arm.h --- gdb-9.1/include/mach-o/arm.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/mach-o/arm.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Mach-O arm declarations for BFD. - Copyright (C) 2012-2019 Free Software Foundation, Inc. + Copyright (C) 2012-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/mach-o/codesign.h gdb-10.2/include/mach-o/codesign.h --- gdb-9.1/include/mach-o/codesign.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/mach-o/codesign.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Mach-O support for BFD. - Copyright (C) 2011-2019 Free Software Foundation, Inc. + Copyright (C) 2011-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/mach-o/external.h gdb-10.2/include/mach-o/external.h --- gdb-9.1/include/mach-o/external.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/mach-o/external.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Mach-O support for BFD. - Copyright (C) 2011-2019 Free Software Foundation, Inc. + Copyright (C) 2011-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/mach-o/loader.h gdb-10.2/include/mach-o/loader.h --- gdb-9.1/include/mach-o/loader.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/mach-o/loader.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Mach-O support for BFD. - Copyright (C) 2011-2019 Free Software Foundation, Inc. + Copyright (C) 2011-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -189,6 +189,8 @@ BFD_MACH_O_LC_VERSION_MIN_WATCHOS = 0x30, /* Minimal watchOS version. */ BFD_MACH_O_LC_NOTE = 0x31, /* Region of arbitrary data. */ BFD_MACH_O_LC_BUILD_VERSION = 0x32, /* Generic build version. */ + BFD_MACH_O_LC_DYLD_EXPORTS_TRIE = 0x33, /* Exports trie. */ + BFD_MACH_O_LC_DYLD_CHAINED_FIXUPS = 0x34, /* Chained fixups. */ } bfd_mach_o_load_command_type; diff -Nru gdb-9.1/include/mach-o/reloc.h gdb-10.2/include/mach-o/reloc.h --- gdb-9.1/include/mach-o/reloc.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/mach-o/reloc.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Mach-O support for BFD. - Copyright (C) 2011-2019 Free Software Foundation, Inc. + Copyright (C) 2011-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/mach-o/unwind.h gdb-10.2/include/mach-o/unwind.h --- gdb-9.1/include/mach-o/unwind.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/mach-o/unwind.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Mach-O compact unwind encoding. - Copyright (C) 2014-2019 Free Software Foundation, Inc. + Copyright (C) 2014-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/mach-o/x86-64.h gdb-10.2/include/mach-o/x86-64.h --- gdb-9.1/include/mach-o/x86-64.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/mach-o/x86-64.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Mach-O support for BFD. - Copyright (C) 2011-2019 Free Software Foundation, Inc. + Copyright (C) 2011-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/MAINTAINERS gdb-10.2/include/MAINTAINERS --- gdb-9.1/include/MAINTAINERS 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/MAINTAINERS 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ See ../binutils/MAINTAINERS -Copyright (C) 2012-2019 Free Software Foundation, Inc. +Copyright (C) 2012-2020 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/include/md5.h gdb-10.2/include/md5.h --- gdb-9.1/include/md5.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/md5.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* md5.h - Declaration of functions and data types used for MD5 sum computing library functions. - Copyright (C) 1995-2019 Free Software Foundation, Inc. + Copyright (C) 1995-2020 Free Software Foundation, Inc. NOTE: The canonical source of this file is maintained with the GNU C Library. Bugs can be reported to bug-glibc@prep.ai.mit.edu. diff -Nru gdb-9.1/include/oasys.h gdb-10.2/include/oasys.h --- gdb-9.1/include/oasys.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/oasys.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Oasys object format header file for BFD. - Copyright (C) 2001-2019 Free Software Foundation, Inc. + Copyright (C) 2001-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/include/objalloc.h gdb-10.2/include/objalloc.h --- gdb-9.1/include/objalloc.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/objalloc.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* objalloc.h -- routines to allocate memory for objects - Copyright (C) 1997-2019 Free Software Foundation, Inc. + Copyright (C) 1997-2020 Free Software Foundation, Inc. Written by Ian Lance Taylor, Cygnus Solutions. This program is free software; you can redistribute it and/or modify it diff -Nru gdb-9.1/include/obstack.h gdb-10.2/include/obstack.h --- gdb-9.1/include/obstack.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/obstack.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* obstack.h - object stack macros - Copyright (C) 1988-2019 Free Software Foundation, Inc. + Copyright (C) 1988-2020 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or diff -Nru gdb-9.1/include/opcode/aarch64.h gdb-10.2/include/opcode/aarch64.h --- gdb-9.1/include/opcode/aarch64.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/opcode/aarch64.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* AArch64 assembler/disassembler support. - Copyright (C) 2009-2019 Free Software Foundation, Inc. + Copyright (C) 2009-2020 Free Software Foundation, Inc. Contributed by ARM Ltd. This file is part of GNU Binutils. @@ -37,77 +37,63 @@ typedef uint32_t aarch64_insn; /* The following bitmasks control CPU features. */ -#define AARCH64_FEATURE_SHA2 0x200000000ULL /* SHA2 instructions. */ -#define AARCH64_FEATURE_AES 0x800000000ULL /* AES instructions. */ -#define AARCH64_FEATURE_V8_4 0x000000800ULL /* ARMv8.4 processors. */ -#define AARCH64_FEATURE_SM4 0x100000000ULL /* SM3 & SM4 instructions. */ -#define AARCH64_FEATURE_SHA3 0x400000000ULL /* SHA3 instructions. */ -#define AARCH64_FEATURE_V8 0x00000001 /* All processors. */ -#define AARCH64_FEATURE_V8_2 0x00000020 /* ARMv8.2 processors. */ -#define AARCH64_FEATURE_V8_3 0x00000040 /* ARMv8.3 processors. */ -#define AARCH64_FEATURE_FP 0x00020000 /* FP instructions. */ -#define AARCH64_FEATURE_SIMD 0x00040000 /* SIMD instructions. */ -#define AARCH64_FEATURE_CRC 0x00080000 /* CRC instructions. */ -#define AARCH64_FEATURE_LSE 0x00100000 /* LSE instructions. */ -#define AARCH64_FEATURE_PAN 0x00200000 /* PAN instructions. */ -#define AARCH64_FEATURE_LOR 0x00400000 /* LOR instructions. */ -#define AARCH64_FEATURE_RDMA 0x00800000 /* v8.1 SIMD instructions. */ -#define AARCH64_FEATURE_V8_1 0x01000000 /* v8.1 features. */ -#define AARCH64_FEATURE_F16 0x02000000 /* v8.2 FP16 instructions. */ -#define AARCH64_FEATURE_RAS 0x04000000 /* RAS Extensions. */ -#define AARCH64_FEATURE_PROFILE 0x08000000 /* Statistical Profiling. */ -#define AARCH64_FEATURE_SVE 0x10000000 /* SVE instructions. */ -#define AARCH64_FEATURE_RCPC 0x20000000 /* RCPC instructions. */ -#define AARCH64_FEATURE_COMPNUM 0x40000000 /* Complex # instructions. */ -#define AARCH64_FEATURE_DOTPROD 0x080000000 /* Dot Product instructions. */ -#define AARCH64_FEATURE_F16_FML 0x1000000000ULL /* v8.2 FP16FML ins. */ -#define AARCH64_FEATURE_V8_5 0x2000000000ULL /* ARMv8.5 processors. */ -#define AARCH64_FEATURE_V8_6 0x00000002 /* ARMv8.6 processors. */ -#define AARCH64_FEATURE_BFLOAT16 0x00000004 /* Bfloat16 insns. */ - -/* Flag Manipulation insns. */ -#define AARCH64_FEATURE_FLAGMANIP 0x4000000000ULL -/* FRINT[32,64][Z,X] insns. */ -#define AARCH64_FEATURE_FRINTTS 0x8000000000ULL -/* SB instruction. */ -#define AARCH64_FEATURE_SB 0x10000000000ULL -/* Execution and Data Prediction Restriction instructions. */ -#define AARCH64_FEATURE_PREDRES 0x20000000000ULL -/* DC CVADP. */ -#define AARCH64_FEATURE_CVADP 0x40000000000ULL -/* Random Number instructions. */ -#define AARCH64_FEATURE_RNG 0x80000000000ULL -/* BTI instructions. */ -#define AARCH64_FEATURE_BTI 0x100000000000ULL -/* SCXTNUM_ELx. */ -#define AARCH64_FEATURE_SCXTNUM 0x200000000000ULL -/* ID_PFR2 instructions. */ -#define AARCH64_FEATURE_ID_PFR2 0x400000000000ULL -/* SSBS mechanism enabled. */ -#define AARCH64_FEATURE_SSBS 0x800000000000ULL -/* Memory Tagging Extension. */ -#define AARCH64_FEATURE_MEMTAG 0x1000000000000ULL -/* Transactional Memory Extension. */ -#define AARCH64_FEATURE_TME 0x2000000000000ULL - -/* Matrix Multiply instructions */ -#define AARCH64_FEATURE_I8MM 0x10000000000000ULL -#define AARCH64_FEATURE_F32MM 0x20000000000000ULL -#define AARCH64_FEATURE_F64MM 0x40000000000000ULL - -/* SVE2 instructions. */ -#define AARCH64_FEATURE_SVE2 0x000000010 -#define AARCH64_FEATURE_SVE2_AES 0x000000080 -#define AARCH64_FEATURE_SVE2_BITPERM 0x000000100 -#define AARCH64_FEATURE_SVE2_SM4 0x000000200 -#define AARCH64_FEATURE_SVE2_SHA3 0x000000400 +#define AARCH64_FEATURE_V8 (1ULL << 0) /* All processors. */ +#define AARCH64_FEATURE_V8_6 (1ULL << 1) /* ARMv8.6 processors. */ +#define AARCH64_FEATURE_BFLOAT16 (1ULL << 2) /* Bfloat16 insns. */ +#define AARCH64_FEATURE_V8_A (1ULL << 3) /* Armv8-A processors. */ +#define AARCH64_FEATURE_SVE2 (1ULL << 4) /* SVE2 instructions. */ +#define AARCH64_FEATURE_V8_2 (1ULL << 5) /* ARMv8.2 processors. */ +#define AARCH64_FEATURE_V8_3 (1ULL << 6) /* ARMv8.3 processors. */ +#define AARCH64_FEATURE_SVE2_AES (1ULL << 7) +#define AARCH64_FEATURE_SVE2_BITPERM (1ULL << 8) +#define AARCH64_FEATURE_SVE2_SM4 (1ULL << 9) +#define AARCH64_FEATURE_SVE2_SHA3 (1ULL << 10) +#define AARCH64_FEATURE_V8_4 (1ULL << 11) /* ARMv8.4 processors. */ +#define AARCH64_FEATURE_V8_R (1ULL << 12) /* Armv8-R processors. */ +#define AARCH64_FEATURE_FP (1ULL << 17) /* FP instructions. */ +#define AARCH64_FEATURE_SIMD (1ULL << 18) /* SIMD instructions. */ +#define AARCH64_FEATURE_CRC (1ULL << 19) /* CRC instructions. */ +#define AARCH64_FEATURE_LSE (1ULL << 20) /* LSE instructions. */ +#define AARCH64_FEATURE_PAN (1ULL << 21) /* PAN instructions. */ +#define AARCH64_FEATURE_LOR (1ULL << 22) /* LOR instructions. */ +#define AARCH64_FEATURE_RDMA (1ULL << 23) /* v8.1 SIMD instructions. */ +#define AARCH64_FEATURE_V8_1 (1ULL << 24) /* v8.1 features. */ +#define AARCH64_FEATURE_F16 (1ULL << 25) /* v8.2 FP16 instructions. */ +#define AARCH64_FEATURE_RAS (1ULL << 26) /* RAS Extensions. */ +#define AARCH64_FEATURE_PROFILE (1ULL << 27) /* Statistical Profiling. */ +#define AARCH64_FEATURE_SVE (1ULL << 28) /* SVE instructions. */ +#define AARCH64_FEATURE_RCPC (1ULL << 29) /* RCPC instructions. */ +#define AARCH64_FEATURE_COMPNUM (1ULL << 30) /* Complex # instructions. */ +#define AARCH64_FEATURE_DOTPROD (1ULL << 31) /* Dot Product instructions. */ +#define AARCH64_FEATURE_SM4 (1ULL << 32) /* SM3 & SM4 instructions. */ +#define AARCH64_FEATURE_SHA2 (1ULL << 33) /* SHA2 instructions. */ +#define AARCH64_FEATURE_SHA3 (1ULL << 34) /* SHA3 instructions. */ +#define AARCH64_FEATURE_AES (1ULL << 35) /* AES instructions. */ +#define AARCH64_FEATURE_F16_FML (1ULL << 36) /* v8.2 FP16FML ins. */ +#define AARCH64_FEATURE_V8_5 (1ULL << 37) /* ARMv8.5 processors. */ +#define AARCH64_FEATURE_FLAGMANIP (1ULL << 38) /* Flag Manipulation insns. */ +#define AARCH64_FEATURE_FRINTTS (1ULL << 39) /* FRINT[32,64][Z,X] insns. */ +#define AARCH64_FEATURE_SB (1ULL << 40) /* SB instruction. */ +#define AARCH64_FEATURE_PREDRES (1ULL << 41) /* Execution and Data Prediction Restriction instructions. */ +#define AARCH64_FEATURE_CVADP (1ULL << 42) /* DC CVADP. */ +#define AARCH64_FEATURE_RNG (1ULL << 43) /* Random Number instructions. */ +#define AARCH64_FEATURE_BTI (1ULL << 44) /* BTI instructions. */ +#define AARCH64_FEATURE_SCXTNUM (1ULL << 45) /* SCXTNUM_ELx. */ +#define AARCH64_FEATURE_ID_PFR2 (1ULL << 46) /* ID_PFR2 instructions. */ +#define AARCH64_FEATURE_SSBS (1ULL << 47) /* SSBS mechanism enabled. */ +#define AARCH64_FEATURE_MEMTAG (1ULL << 48) /* Memory Tagging Extension. */ +#define AARCH64_FEATURE_TME (1ULL << 49) /* Transactional Memory Extension. */ +#define AARCH64_FEATURE_I8MM (1ULL << 52) /* Matrix Multiply instructions. */ +#define AARCH64_FEATURE_F32MM (1ULL << 53) +#define AARCH64_FEATURE_F64MM (1ULL << 54) /* Crypto instructions are the combination of AES and SHA2. */ #define AARCH64_FEATURE_CRYPTO (AARCH64_FEATURE_SHA2 | AARCH64_FEATURE_AES) /* Architectures are the sum of the base and extensions. */ #define AARCH64_ARCH_V8 AARCH64_FEATURE (AARCH64_FEATURE_V8, \ - AARCH64_FEATURE_FP \ + AARCH64_FEATURE_V8_A \ + | AARCH64_FEATURE_FP \ | AARCH64_FEATURE_SIMD) #define AARCH64_ARCH_V8_1 AARCH64_FEATURE (AARCH64_ARCH_V8, \ AARCH64_FEATURE_CRC \ @@ -142,6 +128,9 @@ AARCH64_FEATURE_V8_6 \ | AARCH64_FEATURE_BFLOAT16 \ | AARCH64_FEATURE_I8MM) +#define AARCH64_ARCH_V8_R (AARCH64_FEATURE (AARCH64_ARCH_V8_4, \ + AARCH64_FEATURE_V8_R) \ + & ~(AARCH64_FEATURE_V8_A | AARCH64_FEATURE_LOR)) #define AARCH64_ARCH_NONE AARCH64_FEATURE (0, 0) #define AARCH64_ANY AARCH64_FEATURE (-1, 0) /* Any basic core. */ @@ -272,6 +261,7 @@ AARCH64_OPND_UIMM10, /* Unsigned 10-bit immediate in addg/subg. */ AARCH64_OPND_BIT_NUM, /* Immediate. */ AARCH64_OPND_EXCEPTION,/* imm16 operand in exception instructions. */ + AARCH64_OPND_UNDEFINED,/* imm16 operand in undefined instruction. */ AARCH64_OPND_CCMP_IMM,/* Immediate in conditional compare instructions. */ AARCH64_OPND_SIMM5, /* 5-bit signed immediate in the imm5 field. */ AARCH64_OPND_NZCV, /* Flag bit specifier giving an alternative value for @@ -959,18 +949,22 @@ extern const struct aarch64_name_value_pair aarch64_prfops [32]; extern const struct aarch64_name_value_pair aarch64_hint_options []; +#define AARCH64_MAX_SYSREG_NAME_LEN 32 + typedef struct { const char * name; aarch64_insn value; uint32_t flags; + + /* A set of features, all of which are required for this system register to be + available. */ + aarch64_feature_set features; } aarch64_sys_reg; extern const aarch64_sys_reg aarch64_sys_regs []; extern const aarch64_sys_reg aarch64_pstatefields []; -extern bfd_boolean aarch64_sys_reg_deprecated_p (const aarch64_sys_reg *); -extern bfd_boolean aarch64_sys_reg_supported_p (const aarch64_feature_set, - const aarch64_sys_reg *); +extern bfd_boolean aarch64_sys_reg_deprecated_p (const uint32_t); extern bfd_boolean aarch64_pstatefield_supported_p (const aarch64_feature_set, const aarch64_sys_reg *); @@ -984,7 +978,8 @@ extern bfd_boolean aarch64_sys_ins_reg_has_xt (const aarch64_sys_ins_reg *); extern bfd_boolean aarch64_sys_ins_reg_supported_p (const aarch64_feature_set, - const aarch64_sys_ins_reg *); + const char *reg_name, aarch64_insn, + uint32_t, aarch64_feature_set); extern const aarch64_sys_ins_reg aarch64_sys_regs_ic []; extern const aarch64_sys_ins_reg aarch64_sys_regs_dc []; @@ -1276,7 +1271,8 @@ extern void aarch64_print_operand (char *, size_t, bfd_vma, const aarch64_opcode *, const aarch64_opnd_info *, int, int *, bfd_vma *, - char **); + char **, + aarch64_feature_set features); /* Miscellaneous interface. */ diff -Nru gdb-9.1/include/opcode/alpha.h gdb-10.2/include/opcode/alpha.h --- gdb-9.1/include/opcode/alpha.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/opcode/alpha.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* alpha.h -- Header file for Alpha opcode table - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. Contributed by Richard Henderson <rth@tamu.edu>, patterned after the PPC opcode table written by Ian Lance Taylor. diff -Nru gdb-9.1/include/opcode/arc-attrs.h gdb-10.2/include/opcode/arc-attrs.h --- gdb-9.1/include/opcode/arc-attrs.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/opcode/arc-attrs.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 1994-2019 Free Software Foundation, Inc. +/* Copyright (C) 1994-2020 Free Software Foundation, Inc. Contributed by Claudiu Zissulescu (claziss@synopsys.com) diff -Nru gdb-9.1/include/opcode/arc-func.h gdb-10.2/include/opcode/arc-func.h --- gdb-9.1/include/opcode/arc-func.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/opcode/arc-func.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Replace functions for the ARC relocs. - Copyright (C) 2015-2019 Free Software Foundation, Inc. + Copyright (C) 2015-2020 Free Software Foundation, Inc. This file is part of GAS, the GNU Assembler, GDB, the GNU debugger, and the GNU Binutils. diff -Nru gdb-9.1/include/opcode/arc.h gdb-10.2/include/opcode/arc.h --- gdb-9.1/include/opcode/arc.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/opcode/arc.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Opcode table for the ARC. - Copyright (C) 1994-2019 Free Software Foundation, Inc. + Copyright (C) 1994-2020 Free Software Foundation, Inc. Contributed by Claudiu Zissulescu (claziss@synopsys.com) @@ -64,6 +64,7 @@ JUMP, KERNEL, LEAVE, + LLOCK, LOAD, LOGICAL, LOOP, @@ -76,6 +77,7 @@ PMU, POP, PUSH, + SCOND, SJLI, STORE, SUB, diff -Nru gdb-9.1/include/opcode/arm.h gdb-10.2/include/opcode/arm.h --- gdb-9.1/include/opcode/arm.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/opcode/arm.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* ARM assembler/disassembler support. - Copyright (C) 2004-2019 Free Software Foundation, Inc. + Copyright (C) 2004-2020 Free Software Foundation, Inc. This file is part of GDB and GAS. @@ -77,6 +77,18 @@ #define ARM_EXT2_BF16 0x00020000 /* ARMv8 bfloat16. */ #define ARM_EXT2_I8MM 0x00040000 /* ARMv8.6A i8mm. */ #define ARM_EXT2_CRC 0x00080000 /* ARMv8 CRC32 */ +#define ARM_EXT2_MVE 0x00100000 /* MVE Integer extension. */ +#define ARM_EXT2_MVE_FP 0x00200000 /* MVE Floating Point extension. */ +#define ARM_EXT2_CDE 0x00400000 /* Custom Datapath Extension. */ +#define ARM_EXT2_CDE0 0x00800000 /* Using CDE coproc 0. */ +#define ARM_EXT2_CDE1 0x01000000 /* Using CDE coproc 1. */ +#define ARM_EXT2_CDE2 0x02000000 /* Using CDE coproc 2. */ +#define ARM_EXT2_CDE3 0x04000000 /* Using CDE coproc 3. */ +#define ARM_EXT2_CDE4 0x08000000 /* Using CDE coproc 4. */ +#define ARM_EXT2_CDE5 0x10000000 /* Using CDE coproc 5. */ +#define ARM_EXT2_CDE6 0x20000000 /* Using CDE coproc 6. */ +#define ARM_EXT2_CDE7 0x40000000 /* Using CDE coproc 7. */ +#define ARM_EXT2_V8R 0x80000000 /* Arm V8R. */ /* Co-processor space extensions. */ #define ARM_CEXT_XSCALE 0x00000001 /* Allow MIA etc. */ @@ -107,8 +119,6 @@ #define FPU_VFP_EXT_ARMV8xD 0x00002000 /* Single-precision FP for ARMv8. */ #define FPU_NEON_EXT_RDMA 0x00001000 /* v8.1 Adv.SIMD extensions. */ #define FPU_NEON_EXT_DOTPROD 0x00000800 /* Dot Product extension. */ -#define FPU_MVE 0x00000400 /* MVE Integer extension. */ -#define FPU_MVE_FP 0x00000200 /* MVE Floating Point extension. */ /* Architectures are the sum of the base and extensions. The ARM ARM (rev E) defines the following: ARMv3, ARMv3M, ARMv4xM, ARMv4, ARMv4TxM, ARMv4T, @@ -182,7 +192,7 @@ #define ARM_AEXT2_V8M_MAIN (ARM_AEXT2_V8M_BASE | ARM_EXT2_V8M_MAIN) #define ARM_AEXT2_V8M_MAIN_DSP ARM_AEXT2_V8M_MAIN #define ARM_AEXT_V8R ARM_AEXT_V8A -#define ARM_AEXT2_V8R ARM_AEXT2_V8AR +#define ARM_AEXT2_V8R (ARM_EXT2_V8R | ARM_AEXT2_V8AR) #define ARM_AEXT_V8_1M_MAIN ARM_AEXT_V8M_MAIN #define ARM_AEXT2_V8_1M_MAIN (ARM_AEXT2_V8M_MAIN | ARM_EXT2_V8_1M_MAIN \ | ARM_EXT2_FP16_INST) @@ -372,9 +382,8 @@ /* Some useful combinations: */ #define ARM_ARCH_NONE ARM_FEATURE_LOW (0, 0) #define FPU_NONE ARM_FEATURE_LOW (0, 0) -#define ARM_ANY ARM_FEATURE (-1, -1, 0) /* Any basic core. */ +#define ARM_ANY ARM_FEATURE (-1, -1 & ~ (ARM_EXT2_MVE | ARM_EXT2_MVE_FP), 0) /* Any basic core. */ #define FPU_ANY ARM_FEATURE_COPROC (-1) /* Any FPU. */ -#define ARM_FEATURE_ALL ARM_FEATURE (-1, -1, -1)/* All CPU and FPU features. */ #define FPU_ANY_HARD ARM_FEATURE_COPROC (FPU_FPA | FPU_VFP_HARD | FPU_MAVERICK) /* Extensions containing some Thumb-2 instructions. If any is present, Thumb ISA is Thumb-2. */ diff -Nru gdb-9.1/include/opcode/avr.h gdb-10.2/include/opcode/avr.h --- gdb-9.1/include/opcode/avr.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/opcode/avr.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Opcode table for the Atmel AVR micro controllers. - Copyright (C) 2000-2019 Free Software Foundation, Inc. + Copyright (C) 2000-2020 Free Software Foundation, Inc. Contributed by Denis Chertykov <denisc@overta.ru> This program is free software; you can redistribute it and/or modify diff -Nru gdb-9.1/include/opcode/bfin.h gdb-10.2/include/opcode/bfin.h --- gdb-9.1/include/opcode/bfin.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/opcode/bfin.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* bfin.h -- Header file for ADI Blackfin opcode table - Copyright (C) 2005-2019 Free Software Foundation, Inc. + Copyright (C) 2005-2020 Free Software Foundation, Inc. This file is part of GDB, GAS, and the GNU binutils. diff -Nru gdb-9.1/include/opcode/cgen.h gdb-10.2/include/opcode/cgen.h --- gdb-9.1/include/opcode/cgen.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/opcode/cgen.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Header file for targets using CGEN: Cpu tools GENerator. - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of GDB, the GNU debugger, and the GNU Binutils. @@ -1392,7 +1392,9 @@ Multiple machines can be specified by repeated use. */ CGEN_CPU_OPEN_BFDMACH, /* Select endian, arg is CGEN_ENDIAN_*. */ - CGEN_CPU_OPEN_ENDIAN + CGEN_CPU_OPEN_ENDIAN, + /* Select instruction endian, arg is CGEN_ENDIAN_*. */ + CGEN_CPU_OPEN_INSN_ENDIAN, }; /* Open a cpu descriptor table for use. @@ -1461,8 +1463,13 @@ /* Cover fns to bfd_get/set. */ extern CGEN_INSN_INT cgen_get_insn_value - (CGEN_CPU_DESC, unsigned char *, int); + (CGEN_CPU_DESC, unsigned char *, int, int); extern void cgen_put_insn_value + (CGEN_CPU_DESC, unsigned char *, int, CGEN_INSN_INT, int); + +extern CGEN_INSN_INT cgen_get_base_insn_value + (CGEN_CPU_DESC, unsigned char *, int); +extern void cgen_put_base_insn_value (CGEN_CPU_DESC, unsigned char *, int, CGEN_INSN_INT); /* Read in a cpu description file. diff -Nru gdb-9.1/include/opcode/convex.h gdb-10.2/include/opcode/convex.h --- gdb-9.1/include/opcode/convex.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/opcode/convex.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Information for instruction disassembly on the Convex. - Copyright (C) 1989-2019 Free Software Foundation, Inc. + Copyright (C) 1989-2020 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/include/opcode/cr16.h gdb-10.2/include/opcode/cr16.h --- gdb-9.1/include/opcode/cr16.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/opcode/cr16.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* cr16.h -- Header file for CR16 opcode and register tables. - Copyright (C) 2007-2019 Free Software Foundation, Inc. + Copyright (C) 2007-2020 Free Software Foundation, Inc. Contributed by M R Swami Reddy This file is part of GAS, GDB and the GNU binutils. diff -Nru gdb-9.1/include/opcode/cris.h gdb-10.2/include/opcode/cris.h --- gdb-9.1/include/opcode/cris.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/opcode/cris.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* cris.h -- Header file for CRIS opcode and register tables. - Copyright (C) 2000-2019 Free Software Foundation, Inc. + Copyright (C) 2000-2020 Free Software Foundation, Inc. Contributed by Axis Communications AB, Lund, Sweden. Originally written for GAS 1.38.1 by Mikael Asker. Updated, BFDized and GNUified by Hans-Peter Nilsson. diff -Nru gdb-9.1/include/opcode/crx.h gdb-10.2/include/opcode/crx.h --- gdb-9.1/include/opcode/crx.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/opcode/crx.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* crx.h -- Header file for CRX opcode and register tables. - Copyright (C) 2004-2019 Free Software Foundation, Inc. + Copyright (C) 2004-2020 Free Software Foundation, Inc. Contributed by Tomer Levi, NSC, Israel. Originally written for GAS 2.12 by Tomer Levi, NSC, Israel. Updates, BFDizing, GNUifying and ELF support by Tomer Levi. @@ -260,7 +260,7 @@ /* Size (in words). */ unsigned int size; /* Constant prefix (matched by the disassembler). */ - unsigned long match; + unsigned int match; /* Match size (in bits). */ int match_bits; /* Attributes. */ diff -Nru gdb-9.1/include/opcode/csky.h gdb-10.2/include/opcode/csky.h --- gdb-9.1/include/opcode/csky.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/opcode/csky.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* C-SKY assembler/disassembler support. - Copyright (C) 2004-2019 Free Software Foundation, Inc. + Copyright (C) 2004-2020 Free Software Foundation, Inc. Contributed by C-SKY Microsystems and Mentor Graphics. This file is part of GDB and GAS. @@ -22,39 +22,46 @@ #include "dis-asm.h" /* The following bitmasks control instruction set architecture. */ -#define CSKYV1_ISA_E1 (1 << 0) -#define CSKYV2_ISA_E1 (1 << 1) -#define CSKYV2_ISA_1E2 (1 << 2) -#define CSKYV2_ISA_2E3 (1 << 3) -#define CSKYV2_ISA_3E7 (1 << 4) -#define CSKYV2_ISA_7E10 (1 << 5) -#define CSKYV2_ISA_3E3R1 (1 << 6) - -#define CSKY_ISA_TRUST (1 << 11) -#define CSKY_ISA_CACHE (1 << 12) -#define CSKY_ISA_NVIC (1 << 13) -#define CSKY_ISA_CP (1 << 14) -#define CSKY_ISA_MP (1 << 15) -#define CSKY_ISA_MP_1E2 (1 << 16) -#define CSKY_ISA_JAVA (1 << 17) -#define CSKY_ISA_MAC (1 << 18) -#define CSKY_ISA_MAC_DSP (1 << 19) +#define CSKYV1_ISA_E1 ((bfd_uint64_t)1 << 0) +#define CSKYV2_ISA_E1 ((bfd_uint64_t)1 << 1) +#define CSKYV2_ISA_1E2 ((bfd_uint64_t)1 << 2) +#define CSKYV2_ISA_2E3 ((bfd_uint64_t)1 << 3) +#define CSKYV2_ISA_3E7 ((bfd_uint64_t)1 << 4) +#define CSKYV2_ISA_7E10 ((bfd_uint64_t)1 << 5) +#define CSKYV2_ISA_3E3R1 ((bfd_uint64_t)1 << 6) +#define CSKYV2_ISA_3E3R2 ((bfd_uint64_t)1 << 7) +#define CSKYV2_ISA_10E60 ((bfd_uint64_t)1 << 8) +#define CSKYV2_ISA_3E3R3 ((bfd_uint64_t)1 << 9) + +#define CSKY_ISA_TRUST ((bfd_uint64_t)1 << 11) +#define CSKY_ISA_CACHE ((bfd_uint64_t)1 << 12) +#define CSKY_ISA_NVIC ((bfd_uint64_t)1 << 13) +#define CSKY_ISA_CP ((bfd_uint64_t)1 << 14) +#define CSKY_ISA_MP ((bfd_uint64_t)1 << 15) +#define CSKY_ISA_MP_1E2 ((bfd_uint64_t)1 << 16) +#define CSKY_ISA_JAVA ((bfd_uint64_t)1 << 17) +#define CSKY_ISA_MAC ((bfd_uint64_t)1 << 18) +#define CSKY_ISA_MAC_DSP ((bfd_uint64_t)1 << 19) /* Base ISA for csky v1 and v2. */ -#define CSKY_ISA_DSP (1 << 20) -#define CSKY_ISA_DSP_1E2 (1 << 21) -#define CSKY_ISA_DSP_ENHANCE (1 << 22) +#define CSKY_ISA_DSP ((bfd_uint64_t)1 << 20) +#define CSKY_ISA_DSP_1E2 ((bfd_uint64_t)1 << 21) +#define CSKY_ISA_DSP_ENHANCE ((bfd_uint64_t)1 << 22) +#define CSKY_ISA_DSPE60 ((bfd_uint64_t)1 << 23) /* Base float instruction (803f & 810f). */ -#define CSKY_ISA_FLOAT_E1 (1 << 25) +#define CSKY_ISA_FLOAT_E1 ((bfd_uint64_t)1 << 25) /* M_FLOAT support (810f). */ -#define CSKY_ISA_FLOAT_1E2 (1 << 26) +#define CSKY_ISA_FLOAT_1E2 ((bfd_uint64_t)1 << 26) /* 803 support (803f). */ -#define CSKY_ISA_FLOAT_1E3 (1 << 27) +#define CSKY_ISA_FLOAT_1E3 ((bfd_uint64_t)1 << 27) /* 807 support (803f & 807f). */ -#define CSKY_ISA_FLOAT_3E4 (1 << 28) +#define CSKY_ISA_FLOAT_3E4 ((bfd_uint64_t)1 << 28) +/* 860 support. */ +#define CSKY_ISA_FLOAT_7E60 ((bfd_uint64_t)1 << 36) /* Vector DSP support. */ -#define CSKY_ISA_VDSP (1 << 29) +#define CSKY_ISA_VDSP ((bfd_uint64_t)1 << 29) +#define CSKY_ISA_VDSP_2 ((bfd_uint64_t)1 << 30) /* The following bitmasks control cpu architecture for CSKY. */ #define CSKY_ABI_V1 (1 << 28) @@ -67,8 +74,14 @@ #define CSKY_ARCH_801 0xa #define CSKY_ARCH_802 0x10 #define CSKY_ARCH_803 0x9 +/* 804 use the same arch flag as 803 yet. */ +#define CSKY_ARCH_804 0x9 +#define CSKY_ARCH_805 0x11 #define CSKY_ARCH_807 0x6 #define CSKY_ARCH_810 0x8 +#define CSKY_ARCH_860 0xb +/* 800 is a special arch supporting all instructions for ABIV2. */ +#define CSKY_ARCH_800 0x1f #define CSKY_ARCH_MAC (1 << 15) #define CSKY_ARCH_DSP (1 << 14) diff -Nru gdb-9.1/include/opcode/d10v.h gdb-10.2/include/opcode/d10v.h --- gdb-9.1/include/opcode/d10v.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/opcode/d10v.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* d10v.h -- Header file for D10V opcode table - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. Written by Martin Hunt (hunt@cygnus.com), Cygnus Support This file is part of GDB, GAS, and the GNU binutils. diff -Nru gdb-9.1/include/opcode/d30v.h gdb-10.2/include/opcode/d30v.h --- gdb-9.1/include/opcode/d30v.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/opcode/d30v.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* d30v.h -- Header file for D30V opcode table - Copyright (C) 1997-2019 Free Software Foundation, Inc. + Copyright (C) 1997-2020 Free Software Foundation, Inc. Written by Martin Hunt (hunt@cygnus.com), Cygnus Solutions This file is part of GDB, GAS, and the GNU binutils. @@ -33,7 +33,7 @@ { char *name; /* name to recognize */ char *pname; /* name to print for this register */ - int value; + unsigned int value; }; extern const struct pd_reg pre_defined_registers[]; diff -Nru gdb-9.1/include/opcode/dlx.h gdb-10.2/include/opcode/dlx.h --- gdb-9.1/include/opcode/dlx.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/opcode/dlx.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Table of opcodes for the DLX microprocess. - Copyright (C) 2002-2019 Free Software Foundation, Inc. + Copyright (C) 2002-2020 Free Software Foundation, Inc. This file is part of GDB and GAS. diff -Nru gdb-9.1/include/opcode/ft32.h gdb-10.2/include/opcode/ft32.h --- gdb-9.1/include/opcode/ft32.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/opcode/ft32.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Definitions for decoding the ft32 opcode table. - Copyright (C) 2013-2019 Free Software Foundation, Inc. + Copyright (C) 2013-2020 Free Software Foundation, Inc. Contributed by FTDI (support@ftdichip.com) This program is free software; you can redistribute it and/or modify diff -Nru gdb-9.1/include/opcode/h8300.h gdb-10.2/include/opcode/h8300.h --- gdb-9.1/include/opcode/h8300.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/opcode/h8300.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Opcode table for the H8/300 - Copyright (C) 1991-2019 Free Software Foundation, Inc. + Copyright (C) 1991-2020 Free Software Foundation, Inc. Written by Steve Chamberlain <sac@cygnus.com>. This file is part of GDB, the GNU Debugger and GAS, the GNU Assembler. diff -Nru gdb-9.1/include/opcode/hppa.h gdb-10.2/include/opcode/hppa.h --- gdb-9.1/include/opcode/hppa.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/opcode/hppa.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Table of opcodes for the PA-RISC. - Copyright (C) 1990-2019 Free Software Foundation, Inc. + Copyright (C) 1990-2020 Free Software Foundation, Inc. Contributed by the Center for Software Science at the University of Utah (pa-gdb-bugs@cs.utah.edu). diff -Nru gdb-9.1/include/opcode/i386.h gdb-10.2/include/opcode/i386.h --- gdb-9.1/include/opcode/i386.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/opcode/i386.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* opcode/i386.h -- Intel 80386 opcode macros - Copyright (C) 1989-2019 Free Software Foundation, Inc. + Copyright (C) 1989-2020 Free Software Foundation, Inc. This file is part of GAS, the GNU Assembler, and GDB, the GNU Debugger. diff -Nru gdb-9.1/include/opcode/ia64.h gdb-10.2/include/opcode/ia64.h --- gdb-9.1/include/opcode/ia64.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/opcode/ia64.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* ia64.h -- Header file for ia64 opcode table - Copyright (C) 1998-2019 Free Software Foundation, Inc. + Copyright (C) 1998-2020 Free Software Foundation, Inc. Contributed by David Mosberger-Tang <davidm@hpl.hp.com> This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/opcode/m68hc11.h gdb-10.2/include/opcode/m68hc11.h --- gdb-9.1/include/opcode/m68hc11.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/opcode/m68hc11.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* m68hc11.h -- Header file for Motorola 68HC11 & 68HC12 opcode table - Copyright (C) 1999-2019 Free Software Foundation, Inc. + Copyright (C) 1999-2020 Free Software Foundation, Inc. Written by Stephane Carrez (stcarrez@nerim.fr) This file is part of GDB, GAS, and the GNU binutils. diff -Nru gdb-9.1/include/opcode/m68k.h gdb-10.2/include/opcode/m68k.h --- gdb-9.1/include/opcode/m68k.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/opcode/m68k.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Opcode table header for m680[01234]0/m6888[12]/m68851. - Copyright (C) 1989-2019 Free Software Foundation, Inc. + Copyright (C) 1989-2020 Free Software Foundation, Inc. This file is part of GDB, GAS, and the GNU binutils. diff -Nru gdb-9.1/include/opcode/metag.h gdb-10.2/include/opcode/metag.h --- gdb-9.1/include/opcode/metag.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/opcode/metag.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Imagination Technologies Meta opcode table. - Copyright (C) 2013-2019 Free Software Foundation, Inc. + Copyright (C) 2013-2020 Free Software Foundation, Inc. Contributed by Imagination Technologies Ltd. This file is part of GDB and GAS. diff -Nru gdb-9.1/include/opcode/mips.h gdb-10.2/include/opcode/mips.h --- gdb-9.1/include/opcode/mips.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/opcode/mips.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* mips.h. Mips opcode list for GDB, the GNU debugger. - Copyright (C) 1993-2019 Free Software Foundation, Inc. + Copyright (C) 1993-2020 Free Software Foundation, Inc. Contributed by Ralph Campbell and OSF Commented and modified by Ian Lance Taylor, Cygnus Support diff -Nru gdb-9.1/include/opcode/mmix.h gdb-10.2/include/opcode/mmix.h --- gdb-9.1/include/opcode/mmix.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/opcode/mmix.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* mmix.h -- Header file for MMIX opcode table - Copyright (C) 2001-2019 Free Software Foundation, Inc. + Copyright (C) 2001-2020 Free Software Foundation, Inc. Written by Hans-Peter Nilsson (hp@bitrange.com) This file is part of GDB, GAS, and the GNU binutils. diff -Nru gdb-9.1/include/opcode/mn10200.h gdb-10.2/include/opcode/mn10200.h --- gdb-9.1/include/opcode/mn10200.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/opcode/mn10200.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* mn10200.h -- Header file for Matsushita 10200 opcode table - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. Written by Jeff Law, Cygnus Support This file is part of GDB, GAS, and the GNU binutils. diff -Nru gdb-9.1/include/opcode/mn10300.h gdb-10.2/include/opcode/mn10300.h --- gdb-9.1/include/opcode/mn10300.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/opcode/mn10300.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* mn10300.h -- Header file for Matsushita 10300 opcode table - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. Written by Jeff Law, Cygnus Support This file is part of GDB, GAS, and the GNU binutils. diff -Nru gdb-9.1/include/opcode/moxie.h gdb-10.2/include/opcode/moxie.h --- gdb-9.1/include/opcode/moxie.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/opcode/moxie.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Definitions for decoding the moxie opcode table. - Copyright (C) 2009-2019 Free Software Foundation, Inc. + Copyright (C) 2009-2020 Free Software Foundation, Inc. Contributed by Anthony Green (green@moxielogic.com). This program is free software; you can redistribute it and/or modify diff -Nru gdb-9.1/include/opcode/msp430-decode.h gdb-10.2/include/opcode/msp430-decode.h --- gdb-9.1/include/opcode/msp430-decode.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/opcode/msp430-decode.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Opcode decoder for the TI MSP430 - Copyright (C) 2012-2019 Free Software Foundation, Inc. + Copyright (C) 2012-2020 Free Software Foundation, Inc. Written by DJ Delorie <dj@redhat.com> This file is part of GDB, the GNU Debugger. diff -Nru gdb-9.1/include/opcode/msp430.h gdb-10.2/include/opcode/msp430.h --- gdb-9.1/include/opcode/msp430.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/opcode/msp430.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Opcode table for the TI MSP430 microcontrollers - Copyright (C) 2002-2019 Free Software Foundation, Inc. + Copyright (C) 2002-2020 Free Software Foundation, Inc. Contributed by Dmitry Diky <diwil@mail.ru> This program is free software; you can redistribute it and/or modify @@ -21,6 +21,18 @@ #ifndef __MSP430_H_ #define __MSP430_H_ +enum msp430_expp_e +{ + MSP_EXPP_ALL = 0, /* Use full the value of the expression - default. */ + MSP_EXPP_LO, /* Extract least significant word from expression. */ + MSP_EXPP_HI, /* Extract 2nd word from expression. */ + MSP_EXPP_LLO, /* Extract least significant word from an + immediate value. */ + MSP_EXPP_LHI, /* Extract 2nd word from an immediate value. */ + MSP_EXPP_HLO, /* Extract 3rd word from an immediate value. */ + MSP_EXPP_HHI, /* Extract 4th word from an immediate value. */ +}; + struct msp430_operand_s { int ol; /* Operand length words. */ @@ -28,6 +40,9 @@ int reg; /* Register. */ int mode; /* Operand mode. */ int vshift; /* Number of bytes to shift operand down. */ + enum msp430_expp_e expp; /* For when the operand is a constant + expression, the part of the expression to + extract. */ #define OP_REG 0 #define OP_EXP 1 #ifndef DASM_SECTION diff -Nru gdb-9.1/include/opcode/nds32.h gdb-10.2/include/opcode/nds32.h --- gdb-9.1/include/opcode/nds32.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/opcode/nds32.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* nds32.h -- Header file for nds32 opcode table - Copyright (C) 2012-2019 Free Software Foundation, Inc. + Copyright (C) 2012-2020 Free Software Foundation, Inc. Contributed by Andes Technology Corporation. This program is free software; you can redistribute it and/or modify @@ -51,11 +51,12 @@ -1, -1, -1, -1, -1, -1, -1, -1 }; -#define N32_BIT(n) (1 << (n)) +#define N32_BIT(n) (1u << (n)) #define __MASK(n) (N32_BIT (n) - 1) #define __MF(v, off, bs) (((v) & __MASK (bs)) << (off)) #define __GF(v, off, bs) (((v) >> off) & __MASK (bs)) -#define __SEXT(v, bs) ((((v) & ((1 << (bs)) - 1)) ^ (1 << ((bs) - 1))) - (1 << ((bs) - 1))) +#define __SEXT(v, bs) \ + ((((v) & __MASK ((bs))) ^ N32_BIT ((bs) - 1)) - N32_BIT ((bs) - 1)) /* Make nds32 instructions. */ @@ -150,7 +151,7 @@ #define N32_SUB6(insn) (((insn) >> 0) & 0x3f) #define N32_SWID(insn) (((insn) >> 5) & 0x3ff) #define N32_IMMU(insn, bs) ((insn) & __MASK (bs)) -#define N32_IMMS(insn, bs) ((signed) __SEXT (((insn) & __MASK (bs)), bs)) +#define N32_IMMS(insn, bs) ((signed) __SEXT ((insn), (bs))) #define N32_IMM5U(insn) N32_IMMU (insn, 5) #define N32_IMM12S(insn) N32_IMMS (insn, 12) #define N32_IMM14S(insn) N32_IMMS (insn, 14) diff -Nru gdb-9.1/include/opcode/nfp.h gdb-10.2/include/opcode/nfp.h --- gdb-9.1/include/opcode/nfp.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/opcode/nfp.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* nfp.h. NFP opcode list. - Copyright (C) 2017-2019 Free Software Foundation, Inc. + Copyright (C) 2017-2020 Free Software Foundation, Inc. Contributed by Francois H. Theron <francois.theron@netronome.com> This file is part of the GNU opcodes library. diff -Nru gdb-9.1/include/opcode/nios2.h gdb-10.2/include/opcode/nios2.h --- gdb-9.1/include/opcode/nios2.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/opcode/nios2.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Nios II opcode list for GAS, the GNU assembler. - Copyright (C) 2012-2019 Free Software Foundation, Inc. + Copyright (C) 2012-2020 Free Software Foundation, Inc. Contributed by Nigel Gray (ngray@altera.com). Contributed by Mentor Graphics, Inc. diff -Nru gdb-9.1/include/opcode/nios2r1.h gdb-10.2/include/opcode/nios2r1.h --- gdb-9.1/include/opcode/nios2r1.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/opcode/nios2r1.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Nios II R1 opcode list for GAS, the GNU assembler. - Copyright (C) 2013-2019 Free Software Foundation, Inc. + Copyright (C) 2013-2020 Free Software Foundation, Inc. Contributed by Mentor Graphics, Inc. This file is part of the GNU opcodes library. diff -Nru gdb-9.1/include/opcode/nios2r2.h gdb-10.2/include/opcode/nios2r2.h --- gdb-9.1/include/opcode/nios2r2.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/opcode/nios2r2.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Nios II R2 opcode list for GAS, the GNU assembler. - Copyright (C) 2013-2019 Free Software Foundation, Inc. + Copyright (C) 2013-2020 Free Software Foundation, Inc. Contributed by Mentor Graphics, Inc. This file is part of the GNU opcodes library. diff -Nru gdb-9.1/include/opcode/np1.h gdb-10.2/include/opcode/np1.h --- gdb-9.1/include/opcode/np1.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/opcode/np1.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Print GOULD NPL instructions for GDB, the GNU debugger. - Copyright (C) 1986-2019 Free Software Foundation, Inc. + Copyright (C) 1986-2020 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/include/opcode/ns32k.h gdb-10.2/include/opcode/ns32k.h --- gdb-9.1/include/opcode/ns32k.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/opcode/ns32k.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* ns32k-opcode.h -- Opcode table for National Semi 32k processor - Copyright (C) 1987-2019 Free Software Foundation, Inc. + Copyright (C) 1987-2020 Free Software Foundation, Inc. This file is part of GAS, the GNU Assembler. diff -Nru gdb-9.1/include/opcode/pdp11.h gdb-10.2/include/opcode/pdp11.h --- gdb-9.1/include/opcode/pdp11.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/opcode/pdp11.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* PDP-11 opcde list. - Copyright (C) 2001-2019 Free Software Foundation, Inc. + Copyright (C) 2001-2020 Free Software Foundation, Inc. This file is part of GDB and GAS. diff -Nru gdb-9.1/include/opcode/pj.h gdb-10.2/include/opcode/pj.h --- gdb-9.1/include/opcode/pj.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/opcode/pj.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Definitions for decoding the picoJava opcode table. - Copyright (C) 1999-2019 Free Software Foundation, Inc. + Copyright (C) 1999-2020 Free Software Foundation, Inc. Contributed by Steve Chamberlain of Transmeta (sac@pobox.com). This program is free software; you can redistribute it and/or modify diff -Nru gdb-9.1/include/opcode/pn.h gdb-10.2/include/opcode/pn.h --- gdb-9.1/include/opcode/pn.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/opcode/pn.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Print GOULD PN (PowerNode) instructions for GDB, the GNU debugger. - Copyright (C) 1986-2019 Free Software Foundation, Inc. + Copyright (C) 1986-2020 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/include/opcode/ppc.h gdb-10.2/include/opcode/ppc.h --- gdb-9.1/include/opcode/ppc.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/opcode/ppc.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* ppc.h -- Header file for PowerPC opcode table - Copyright (C) 1994-2019 Free Software Foundation, Inc. + Copyright (C) 1994-2020 Free Software Foundation, Inc. Written by Ian Lance Taylor, Cygnus Support This file is part of GDB, GAS, and the GNU binutils. @@ -228,8 +228,8 @@ /* Opcode is supported by EFS2. */ #define PPC_OPCODE_EFS2 0x200000000000ull -/* Opcode is only supported by powerxx architecture. */ -#define PPC_OPCODE_POWERXX 0x400000000000ull +/* Opcode is only supported by power10 architecture. */ +#define PPC_OPCODE_POWER10 0x400000000000ull /* A macro to extract the major opcode from an instruction. */ #define PPC_OP(i) (((i) >> 26) & 0x3f) @@ -362,6 +362,9 @@ prints these with a leading 'vs'. */ #define PPC_OPERAND_VSR (0x10) +/* This operand names a VSX accumulator. */ +#define PPC_OPERAND_ACC (0x20) + /* This operand may use the symbolic names for the CR fields (even without -mregnames), which are lt 0 gt 1 eq 2 so 3 un 3 @@ -369,60 +372,60 @@ cr4 4 cr5 5 cr6 6 cr7 7 These may be combined arithmetically, as in cr2*4+gt. These are only supported on the PowerPC, not the POWER. */ -#define PPC_OPERAND_CR_BIT (0x20) +#define PPC_OPERAND_CR_BIT (0x40) /* This is a CR FIELD that does not use symbolic names (unless -mregnames is in effect). If both PPC_OPERAND_CR_BIT and PPC_OPERAND_CR_REG are set then treat the field as per PPC_OPERAND_CR_BIT for assembly, but as if neither of these bits are set for disassembly. */ -#define PPC_OPERAND_CR_REG (0x40) +#define PPC_OPERAND_CR_REG (0x80) /* This operand names a special purpose register. */ -#define PPC_OPERAND_SPR (0x80) +#define PPC_OPERAND_SPR (0x100) /* This operand names a paired-single graphics quantization register. */ -#define PPC_OPERAND_GQR (0x100) +#define PPC_OPERAND_GQR (0x200) /* This operand is a relative branch displacement. The disassembler prints these symbolically if possible. */ -#define PPC_OPERAND_RELATIVE (0x200) +#define PPC_OPERAND_RELATIVE (0x400) /* This operand is an absolute branch address. The disassembler prints these symbolically if possible. */ -#define PPC_OPERAND_ABSOLUTE (0x400) +#define PPC_OPERAND_ABSOLUTE (0x800) /* This operand takes signed values. */ -#define PPC_OPERAND_SIGNED (0x800) +#define PPC_OPERAND_SIGNED (0x1000) /* This operand takes signed values, but also accepts a full positive range of values when running in 32 bit mode. That is, if bits is 16, it takes any value from -0x8000 to 0xffff. In 64 bit mode, this flag is ignored. */ -#define PPC_OPERAND_SIGNOPT (0x1000) +#define PPC_OPERAND_SIGNOPT (0x2000) /* The next operand should be wrapped in parentheses rather than separated from this one by a comma. This is used for the load and store instructions which want their operands to look like reg,displacement(reg) */ -#define PPC_OPERAND_PARENS (0x2000) +#define PPC_OPERAND_PARENS (0x4000) /* This operand is for the DS field in a DS form instruction. */ -#define PPC_OPERAND_DS (0x4000) +#define PPC_OPERAND_DS (0x8000) /* This operand is for the DQ field in a DQ form instruction. */ -#define PPC_OPERAND_DQ (0x8000) +#define PPC_OPERAND_DQ (0x10000) /* This operand should be regarded as a negative number for the purposes of overflow checking (i.e., the normal most negative number is disallowed and one more than the normal most positive number is allowed). This flag will only be set for a signed operand. */ -#define PPC_OPERAND_NEGATIVE (0x10000) +#define PPC_OPERAND_NEGATIVE (0x20000) /* Valid range of operand is 0..n rather than 0..n-1. */ -#define PPC_OPERAND_PLUS1 (0x20000) +#define PPC_OPERAND_PLUS1 (0x40000) /* This operand is optional, and is zero if omitted. This is used for example, in the optional BF field in the comparison instructions. The diff -Nru gdb-9.1/include/opcode/pru.h gdb-10.2/include/opcode/pru.h --- gdb-9.1/include/opcode/pru.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/opcode/pru.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* TI PRU opcode list for GAS, the GNU assembler. - Copyright (C) 2014-2019 Free Software Foundation, Inc. + Copyright (C) 2014-2020 Free Software Foundation, Inc. Contributed by Dimitar Dimitrov <dimitar@dinux.eu> This file is part of the GNU opcodes library. diff -Nru gdb-9.1/include/opcode/pyr.h gdb-10.2/include/opcode/pyr.h --- gdb-9.1/include/opcode/pyr.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/opcode/pyr.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* pyramid.opcode.h -- gdb initial attempt. - Copyright (C) 2001-2019 Free Software Foundation, Inc. + Copyright (C) 2001-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/include/opcode/riscv.h gdb-10.2/include/opcode/riscv.h --- gdb-9.1/include/opcode/riscv.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/opcode/riscv.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* riscv.h. RISC-V opcode list for GDB, the GNU debugger. - Copyright (C) 2011-2019 Free Software Foundation, Inc. + Copyright (C) 2011-2020 Free Software Foundation, Inc. Contributed by Andrew Waterman This file is part of GDB, GAS, and the GNU binutils. @@ -204,7 +204,7 @@ #define OP_SH_RS2 20 #define OP_MASK_RS1 0x1f #define OP_SH_RS1 15 -#define OP_MASK_RS3 0x1f +#define OP_MASK_RS3 0x1fU #define OP_SH_RS3 27 #define OP_MASK_RD 0x1f #define OP_SH_RD 7 @@ -223,14 +223,14 @@ #define OP_MASK_RL 0x1 #define OP_SH_RL 25 -#define OP_MASK_CUSTOM_IMM 0x7f +#define OP_MASK_CUSTOM_IMM 0x7fU #define OP_SH_CUSTOM_IMM 25 -#define OP_MASK_CSR 0xfff +#define OP_MASK_CSR 0xfffU #define OP_SH_CSR 20 #define OP_MASK_FUNCT3 0x7 #define OP_SH_FUNCT3 12 -#define OP_MASK_FUNCT7 0x7f +#define OP_MASK_FUNCT7 0x7fU #define OP_SH_FUNCT7 25 #define OP_MASK_FUNCT2 0x3 #define OP_SH_FUNCT2 25 @@ -343,6 +343,73 @@ unsigned long pinfo; }; +/* The current supported ISA spec versions. */ + +enum riscv_isa_spec_class +{ + ISA_SPEC_CLASS_NONE, + + ISA_SPEC_CLASS_2P2, + ISA_SPEC_CLASS_20190608, + ISA_SPEC_CLASS_20191213 +}; + +/* This structure holds version information for specific ISA. */ + +struct riscv_ext_version +{ + const char *name; + enum riscv_isa_spec_class isa_spec_class; + unsigned int major_version; + unsigned int minor_version; +}; + +/* All RISC-V CSR belong to one of these classes. */ + +enum riscv_csr_class +{ + CSR_CLASS_NONE, + + CSR_CLASS_I, + CSR_CLASS_I_32, /* rv32 only */ + CSR_CLASS_F, /* f-ext only */ + CSR_CLASS_DEBUG /* debug CSR */ +}; + +/* The current supported privilege spec versions. */ + +enum riscv_priv_spec_class +{ + PRIV_SPEC_CLASS_NONE, + + PRIV_SPEC_CLASS_1P9P1, + PRIV_SPEC_CLASS_1P10, + PRIV_SPEC_CLASS_1P11, + PRIV_SPEC_CLASS_DRAFT +}; + +/* This structure holds all restricted conditions for a CSR. */ + +struct riscv_csr_extra +{ + /* Class to which this CSR belongs. Used to decide whether or + not this CSR is legal in the current -march context. */ + enum riscv_csr_class csr_class; + + /* CSR may have differnet numbers in the previous priv spec. */ + unsigned address; + + /* Record the CSR is defined/valid in which versions. */ + enum riscv_priv_spec_class define_version; + + /* Record the CSR is aborted/invalid from which versions. If it isn't + aborted in the current version, then it should be CSR_CLASS_VDRAFT. */ + enum riscv_priv_spec_class abort_version; + + /* The CSR may have more than one setting. */ + struct riscv_csr_extra *next; +}; + /* Instruction is a simple alias (e.g. "mv" for "addi"). */ #define INSN_ALIAS 0x00000001 @@ -420,5 +487,9 @@ extern const struct riscv_opcode riscv_opcodes[]; extern const struct riscv_opcode riscv_insn_types[]; +extern const struct riscv_ext_version riscv_ext_version_table[]; + +extern int +riscv_get_isa_spec_class (const char *, enum riscv_isa_spec_class *); #endif /* _RISCV_H_ */ diff -Nru gdb-9.1/include/opcode/riscv-opc.h gdb-10.2/include/opcode/riscv-opc.h --- gdb-9.1/include/opcode/riscv-opc.h 2018-11-07 19:00:24.000000000 +0000 +++ gdb-10.2/include/opcode/riscv-opc.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,26 @@ -/* Automatically generated by parse-opcodes. */ +/* riscv-opc.h. RISC-V instruction opcode and CSR macros. + Copyright (C) 2011-2020 Free Software Foundation, Inc. + Contributed by Andrew Waterman + + This file is part of GDB, GAS, and the GNU binutils. + + GDB, GAS, and the GNU binutils are 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. + + GDB, GAS, and the GNU binutils are distributed in the hope that they + will be useful, but WITHOUT ANY WARRANTY; without even the implied + warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See + the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; see the file COPYING3. If not, + see <http://www.gnu.org/licenses/>. */ + #ifndef RISCV_ENCODING_H #define RISCV_ENCODING_H +/* Instruction opcode macros. */ #define MATCH_SLLI_RV32 0x1013 #define MASK_SLLI_RV32 0xfe00707f #define MATCH_SRLI_RV32 0x5013 @@ -575,6 +595,7 @@ #define MASK_CUSTOM3_RD_RS1 0x707f #define MATCH_CUSTOM3_RD_RS1_RS2 0x707b #define MASK_CUSTOM3_RD_RS1_RS2 0x707f +/* Privileged CSR addresses (v1.11). */ #define CSR_USTATUS 0x0 #define CSR_UIE 0x4 #define CSR_UTVEC 0x5 @@ -583,9 +604,6 @@ #define CSR_UCAUSE 0x42 #define CSR_UTVAL 0x43 #define CSR_UIP 0x44 -#define CSR_FFLAGS 0x1 -#define CSR_FRM 0x2 -#define CSR_FCSR 0x3 #define CSR_CYCLE 0xc00 #define CSR_TIME 0xc01 #define CSR_INSTRET 0xc02 @@ -760,6 +778,7 @@ #define CSR_MHPMCOUNTER29H 0xb9d #define CSR_MHPMCOUNTER30H 0xb9e #define CSR_MHPMCOUNTER31H 0xb9f +#define CSR_MCOUNTINHIBIT 0x320 #define CSR_MHPMEVENT3 0x323 #define CSR_MHPMEVENT4 0x324 #define CSR_MHPMEVENT5 0x325 @@ -789,14 +808,6 @@ #define CSR_MHPMEVENT29 0x33d #define CSR_MHPMEVENT30 0x33e #define CSR_MHPMEVENT31 0x33f -#define CSR_TSELECT 0x7a0 -#define CSR_TDATA1 0x7a1 -#define CSR_TDATA2 0x7a2 -#define CSR_TDATA3 0x7a3 -#define CSR_DCSR 0x7b0 -#define CSR_DPC 0x7b1 -#define CSR_DSCRATCH 0x7b2 -/* These registers are present in priv spec 1.9.1, dropped in 1.10. */ #define CSR_HSTATUS 0x200 #define CSR_HEDELEG 0x202 #define CSR_HIDELEG 0x203 @@ -807,29 +818,31 @@ #define CSR_HCAUSE 0x242 #define CSR_HBADADDR 0x243 #define CSR_HIP 0x244 -/* CSR_MISA is 0xf10 in 1.9, but 0x301 in 1.9.1. */ #define CSR_MBASE 0x380 #define CSR_MBOUND 0x381 #define CSR_MIBASE 0x382 #define CSR_MIBOUND 0x383 #define CSR_MDBASE 0x384 #define CSR_MDBOUND 0x385 -#define CSR_MUCOUNTEREN 0x320 #define CSR_MSCOUNTEREN 0x321 #define CSR_MHCOUNTEREN 0x322 -#define CAUSE_MISALIGNED_FETCH 0x0 -#define CAUSE_FAULT_FETCH 0x1 -#define CAUSE_ILLEGAL_INSTRUCTION 0x2 -#define CAUSE_BREAKPOINT 0x3 -#define CAUSE_MISALIGNED_LOAD 0x4 -#define CAUSE_FAULT_LOAD 0x5 -#define CAUSE_MISALIGNED_STORE 0x6 -#define CAUSE_FAULT_STORE 0x7 -#define CAUSE_USER_ECALL 0x8 -#define CAUSE_SUPERVISOR_ECALL 0x9 -#define CAUSE_HYPERVISOR_ECALL 0xa -#define CAUSE_MACHINE_ECALL 0xb -#endif +/* Unprivileged CSR addresses. */ +#define CSR_FFLAGS 0x1 +#define CSR_FRM 0x2 +#define CSR_FCSR 0x3 +#define CSR_DCSR 0x7b0 +#define CSR_DPC 0x7b1 +#define CSR_DSCRATCH0 0x7b2 +#define CSR_DSCRATCH1 0x7b3 +#define CSR_TSELECT 0x7a0 +#define CSR_TDATA1 0x7a1 +#define CSR_TDATA2 0x7a2 +#define CSR_TDATA3 0x7a3 +#define CSR_TINFO 0x7a4 +#define CSR_TCONTROL 0x7a5 +#define CSR_MCONTEXT 0x7a8 +#define CSR_SCONTEXT 0x7aa +#endif /* RISCV_ENCODING_H. */ #ifdef DECLARE_INSN DECLARE_INSN(slli_rv32, MATCH_SLLI_RV32, MASK_SLLI_RV32) DECLARE_INSN(srli_rv32, MATCH_SRLI_RV32, MASK_SRLI_RV32) @@ -1114,271 +1127,268 @@ DECLARE_INSN(custom3_rd, MATCH_CUSTOM3_RD, MASK_CUSTOM3_RD) DECLARE_INSN(custom3_rd_rs1, MATCH_CUSTOM3_RD_RS1, MASK_CUSTOM3_RD_RS1) DECLARE_INSN(custom3_rd_rs1_rs2, MATCH_CUSTOM3_RD_RS1_RS2, MASK_CUSTOM3_RD_RS1_RS2) -#endif +#endif /* DECLARE_INSN. */ #ifdef DECLARE_CSR -DECLARE_CSR(ustatus, CSR_USTATUS) -DECLARE_CSR(uie, CSR_UIE) -DECLARE_CSR(utvec, CSR_UTVEC) -DECLARE_CSR(uscratch, CSR_USCRATCH) -DECLARE_CSR(uepc, CSR_UEPC) -DECLARE_CSR(ucause, CSR_UCAUSE) -DECLARE_CSR(utval, CSR_UTVAL) -DECLARE_CSR(uip, CSR_UIP) -DECLARE_CSR(fflags, CSR_FFLAGS) -DECLARE_CSR(frm, CSR_FRM) -DECLARE_CSR(fcsr, CSR_FCSR) -DECLARE_CSR(cycle, CSR_CYCLE) -DECLARE_CSR(time, CSR_TIME) -DECLARE_CSR(instret, CSR_INSTRET) -DECLARE_CSR(hpmcounter3, CSR_HPMCOUNTER3) -DECLARE_CSR(hpmcounter4, CSR_HPMCOUNTER4) -DECLARE_CSR(hpmcounter5, CSR_HPMCOUNTER5) -DECLARE_CSR(hpmcounter6, CSR_HPMCOUNTER6) -DECLARE_CSR(hpmcounter7, CSR_HPMCOUNTER7) -DECLARE_CSR(hpmcounter8, CSR_HPMCOUNTER8) -DECLARE_CSR(hpmcounter9, CSR_HPMCOUNTER9) -DECLARE_CSR(hpmcounter10, CSR_HPMCOUNTER10) -DECLARE_CSR(hpmcounter11, CSR_HPMCOUNTER11) -DECLARE_CSR(hpmcounter12, CSR_HPMCOUNTER12) -DECLARE_CSR(hpmcounter13, CSR_HPMCOUNTER13) -DECLARE_CSR(hpmcounter14, CSR_HPMCOUNTER14) -DECLARE_CSR(hpmcounter15, CSR_HPMCOUNTER15) -DECLARE_CSR(hpmcounter16, CSR_HPMCOUNTER16) -DECLARE_CSR(hpmcounter17, CSR_HPMCOUNTER17) -DECLARE_CSR(hpmcounter18, CSR_HPMCOUNTER18) -DECLARE_CSR(hpmcounter19, CSR_HPMCOUNTER19) -DECLARE_CSR(hpmcounter20, CSR_HPMCOUNTER20) -DECLARE_CSR(hpmcounter21, CSR_HPMCOUNTER21) -DECLARE_CSR(hpmcounter22, CSR_HPMCOUNTER22) -DECLARE_CSR(hpmcounter23, CSR_HPMCOUNTER23) -DECLARE_CSR(hpmcounter24, CSR_HPMCOUNTER24) -DECLARE_CSR(hpmcounter25, CSR_HPMCOUNTER25) -DECLARE_CSR(hpmcounter26, CSR_HPMCOUNTER26) -DECLARE_CSR(hpmcounter27, CSR_HPMCOUNTER27) -DECLARE_CSR(hpmcounter28, CSR_HPMCOUNTER28) -DECLARE_CSR(hpmcounter29, CSR_HPMCOUNTER29) -DECLARE_CSR(hpmcounter30, CSR_HPMCOUNTER30) -DECLARE_CSR(hpmcounter31, CSR_HPMCOUNTER31) -DECLARE_CSR(cycleh, CSR_CYCLEH) -DECLARE_CSR(timeh, CSR_TIMEH) -DECLARE_CSR(instreth, CSR_INSTRETH) -DECLARE_CSR(hpmcounter3h, CSR_HPMCOUNTER3H) -DECLARE_CSR(hpmcounter4h, CSR_HPMCOUNTER4H) -DECLARE_CSR(hpmcounter5h, CSR_HPMCOUNTER5H) -DECLARE_CSR(hpmcounter6h, CSR_HPMCOUNTER6H) -DECLARE_CSR(hpmcounter7h, CSR_HPMCOUNTER7H) -DECLARE_CSR(hpmcounter8h, CSR_HPMCOUNTER8H) -DECLARE_CSR(hpmcounter9h, CSR_HPMCOUNTER9H) -DECLARE_CSR(hpmcounter10h, CSR_HPMCOUNTER10H) -DECLARE_CSR(hpmcounter11h, CSR_HPMCOUNTER11H) -DECLARE_CSR(hpmcounter12h, CSR_HPMCOUNTER12H) -DECLARE_CSR(hpmcounter13h, CSR_HPMCOUNTER13H) -DECLARE_CSR(hpmcounter14h, CSR_HPMCOUNTER14H) -DECLARE_CSR(hpmcounter15h, CSR_HPMCOUNTER15H) -DECLARE_CSR(hpmcounter16h, CSR_HPMCOUNTER16H) -DECLARE_CSR(hpmcounter17h, CSR_HPMCOUNTER17H) -DECLARE_CSR(hpmcounter18h, CSR_HPMCOUNTER18H) -DECLARE_CSR(hpmcounter19h, CSR_HPMCOUNTER19H) -DECLARE_CSR(hpmcounter20h, CSR_HPMCOUNTER20H) -DECLARE_CSR(hpmcounter21h, CSR_HPMCOUNTER21H) -DECLARE_CSR(hpmcounter22h, CSR_HPMCOUNTER22H) -DECLARE_CSR(hpmcounter23h, CSR_HPMCOUNTER23H) -DECLARE_CSR(hpmcounter24h, CSR_HPMCOUNTER24H) -DECLARE_CSR(hpmcounter25h, CSR_HPMCOUNTER25H) -DECLARE_CSR(hpmcounter26h, CSR_HPMCOUNTER26H) -DECLARE_CSR(hpmcounter27h, CSR_HPMCOUNTER27H) -DECLARE_CSR(hpmcounter28h, CSR_HPMCOUNTER28H) -DECLARE_CSR(hpmcounter29h, CSR_HPMCOUNTER29H) -DECLARE_CSR(hpmcounter30h, CSR_HPMCOUNTER30H) -DECLARE_CSR(hpmcounter31h, CSR_HPMCOUNTER31H) -DECLARE_CSR(sstatus, CSR_SSTATUS) -DECLARE_CSR(sedeleg, CSR_SEDELEG) -DECLARE_CSR(sideleg, CSR_SIDELEG) -DECLARE_CSR(sie, CSR_SIE) -DECLARE_CSR(stvec, CSR_STVEC) -DECLARE_CSR(scounteren, CSR_SCOUNTEREN) -DECLARE_CSR(sscratch, CSR_SSCRATCH) -DECLARE_CSR(sepc, CSR_SEPC) -DECLARE_CSR(scause, CSR_SCAUSE) -DECLARE_CSR(stval, CSR_STVAL) -DECLARE_CSR(sip, CSR_SIP) -DECLARE_CSR(satp, CSR_SATP) -DECLARE_CSR(mvendorid, CSR_MVENDORID) -DECLARE_CSR(marchid, CSR_MARCHID) -DECLARE_CSR(mimpid, CSR_MIMPID) -DECLARE_CSR(mhartid, CSR_MHARTID) -DECLARE_CSR(mstatus, CSR_MSTATUS) -DECLARE_CSR(misa, CSR_MISA) -DECLARE_CSR(medeleg, CSR_MEDELEG) -DECLARE_CSR(mideleg, CSR_MIDELEG) -DECLARE_CSR(mie, CSR_MIE) -DECLARE_CSR(mtvec, CSR_MTVEC) -DECLARE_CSR(mcounteren, CSR_MCOUNTEREN) -DECLARE_CSR(mscratch, CSR_MSCRATCH) -DECLARE_CSR(mepc, CSR_MEPC) -DECLARE_CSR(mcause, CSR_MCAUSE) -DECLARE_CSR(mtval, CSR_MTVAL) -DECLARE_CSR(mip, CSR_MIP) -DECLARE_CSR(pmpcfg0, CSR_PMPCFG0) -DECLARE_CSR(pmpcfg1, CSR_PMPCFG1) -DECLARE_CSR(pmpcfg2, CSR_PMPCFG2) -DECLARE_CSR(pmpcfg3, CSR_PMPCFG3) -DECLARE_CSR(pmpaddr0, CSR_PMPADDR0) -DECLARE_CSR(pmpaddr1, CSR_PMPADDR1) -DECLARE_CSR(pmpaddr2, CSR_PMPADDR2) -DECLARE_CSR(pmpaddr3, CSR_PMPADDR3) -DECLARE_CSR(pmpaddr4, CSR_PMPADDR4) -DECLARE_CSR(pmpaddr5, CSR_PMPADDR5) -DECLARE_CSR(pmpaddr6, CSR_PMPADDR6) -DECLARE_CSR(pmpaddr7, CSR_PMPADDR7) -DECLARE_CSR(pmpaddr8, CSR_PMPADDR8) -DECLARE_CSR(pmpaddr9, CSR_PMPADDR9) -DECLARE_CSR(pmpaddr10, CSR_PMPADDR10) -DECLARE_CSR(pmpaddr11, CSR_PMPADDR11) -DECLARE_CSR(pmpaddr12, CSR_PMPADDR12) -DECLARE_CSR(pmpaddr13, CSR_PMPADDR13) -DECLARE_CSR(pmpaddr14, CSR_PMPADDR14) -DECLARE_CSR(pmpaddr15, CSR_PMPADDR15) -DECLARE_CSR(mcycle, CSR_MCYCLE) -DECLARE_CSR(minstret, CSR_MINSTRET) -DECLARE_CSR(mhpmcounter3, CSR_MHPMCOUNTER3) -DECLARE_CSR(mhpmcounter4, CSR_MHPMCOUNTER4) -DECLARE_CSR(mhpmcounter5, CSR_MHPMCOUNTER5) -DECLARE_CSR(mhpmcounter6, CSR_MHPMCOUNTER6) -DECLARE_CSR(mhpmcounter7, CSR_MHPMCOUNTER7) -DECLARE_CSR(mhpmcounter8, CSR_MHPMCOUNTER8) -DECLARE_CSR(mhpmcounter9, CSR_MHPMCOUNTER9) -DECLARE_CSR(mhpmcounter10, CSR_MHPMCOUNTER10) -DECLARE_CSR(mhpmcounter11, CSR_MHPMCOUNTER11) -DECLARE_CSR(mhpmcounter12, CSR_MHPMCOUNTER12) -DECLARE_CSR(mhpmcounter13, CSR_MHPMCOUNTER13) -DECLARE_CSR(mhpmcounter14, CSR_MHPMCOUNTER14) -DECLARE_CSR(mhpmcounter15, CSR_MHPMCOUNTER15) -DECLARE_CSR(mhpmcounter16, CSR_MHPMCOUNTER16) -DECLARE_CSR(mhpmcounter17, CSR_MHPMCOUNTER17) -DECLARE_CSR(mhpmcounter18, CSR_MHPMCOUNTER18) -DECLARE_CSR(mhpmcounter19, CSR_MHPMCOUNTER19) -DECLARE_CSR(mhpmcounter20, CSR_MHPMCOUNTER20) -DECLARE_CSR(mhpmcounter21, CSR_MHPMCOUNTER21) -DECLARE_CSR(mhpmcounter22, CSR_MHPMCOUNTER22) -DECLARE_CSR(mhpmcounter23, CSR_MHPMCOUNTER23) -DECLARE_CSR(mhpmcounter24, CSR_MHPMCOUNTER24) -DECLARE_CSR(mhpmcounter25, CSR_MHPMCOUNTER25) -DECLARE_CSR(mhpmcounter26, CSR_MHPMCOUNTER26) -DECLARE_CSR(mhpmcounter27, CSR_MHPMCOUNTER27) -DECLARE_CSR(mhpmcounter28, CSR_MHPMCOUNTER28) -DECLARE_CSR(mhpmcounter29, CSR_MHPMCOUNTER29) -DECLARE_CSR(mhpmcounter30, CSR_MHPMCOUNTER30) -DECLARE_CSR(mhpmcounter31, CSR_MHPMCOUNTER31) -DECLARE_CSR(mcycleh, CSR_MCYCLEH) -DECLARE_CSR(minstreth, CSR_MINSTRETH) -DECLARE_CSR(mhpmcounter3h, CSR_MHPMCOUNTER3H) -DECLARE_CSR(mhpmcounter4h, CSR_MHPMCOUNTER4H) -DECLARE_CSR(mhpmcounter5h, CSR_MHPMCOUNTER5H) -DECLARE_CSR(mhpmcounter6h, CSR_MHPMCOUNTER6H) -DECLARE_CSR(mhpmcounter7h, CSR_MHPMCOUNTER7H) -DECLARE_CSR(mhpmcounter8h, CSR_MHPMCOUNTER8H) -DECLARE_CSR(mhpmcounter9h, CSR_MHPMCOUNTER9H) -DECLARE_CSR(mhpmcounter10h, CSR_MHPMCOUNTER10H) -DECLARE_CSR(mhpmcounter11h, CSR_MHPMCOUNTER11H) -DECLARE_CSR(mhpmcounter12h, CSR_MHPMCOUNTER12H) -DECLARE_CSR(mhpmcounter13h, CSR_MHPMCOUNTER13H) -DECLARE_CSR(mhpmcounter14h, CSR_MHPMCOUNTER14H) -DECLARE_CSR(mhpmcounter15h, CSR_MHPMCOUNTER15H) -DECLARE_CSR(mhpmcounter16h, CSR_MHPMCOUNTER16H) -DECLARE_CSR(mhpmcounter17h, CSR_MHPMCOUNTER17H) -DECLARE_CSR(mhpmcounter18h, CSR_MHPMCOUNTER18H) -DECLARE_CSR(mhpmcounter19h, CSR_MHPMCOUNTER19H) -DECLARE_CSR(mhpmcounter20h, CSR_MHPMCOUNTER20H) -DECLARE_CSR(mhpmcounter21h, CSR_MHPMCOUNTER21H) -DECLARE_CSR(mhpmcounter22h, CSR_MHPMCOUNTER22H) -DECLARE_CSR(mhpmcounter23h, CSR_MHPMCOUNTER23H) -DECLARE_CSR(mhpmcounter24h, CSR_MHPMCOUNTER24H) -DECLARE_CSR(mhpmcounter25h, CSR_MHPMCOUNTER25H) -DECLARE_CSR(mhpmcounter26h, CSR_MHPMCOUNTER26H) -DECLARE_CSR(mhpmcounter27h, CSR_MHPMCOUNTER27H) -DECLARE_CSR(mhpmcounter28h, CSR_MHPMCOUNTER28H) -DECLARE_CSR(mhpmcounter29h, CSR_MHPMCOUNTER29H) -DECLARE_CSR(mhpmcounter30h, CSR_MHPMCOUNTER30H) -DECLARE_CSR(mhpmcounter31h, CSR_MHPMCOUNTER31H) -DECLARE_CSR(mhpmevent3, CSR_MHPMEVENT3) -DECLARE_CSR(mhpmevent4, CSR_MHPMEVENT4) -DECLARE_CSR(mhpmevent5, CSR_MHPMEVENT5) -DECLARE_CSR(mhpmevent6, CSR_MHPMEVENT6) -DECLARE_CSR(mhpmevent7, CSR_MHPMEVENT7) -DECLARE_CSR(mhpmevent8, CSR_MHPMEVENT8) -DECLARE_CSR(mhpmevent9, CSR_MHPMEVENT9) -DECLARE_CSR(mhpmevent10, CSR_MHPMEVENT10) -DECLARE_CSR(mhpmevent11, CSR_MHPMEVENT11) -DECLARE_CSR(mhpmevent12, CSR_MHPMEVENT12) -DECLARE_CSR(mhpmevent13, CSR_MHPMEVENT13) -DECLARE_CSR(mhpmevent14, CSR_MHPMEVENT14) -DECLARE_CSR(mhpmevent15, CSR_MHPMEVENT15) -DECLARE_CSR(mhpmevent16, CSR_MHPMEVENT16) -DECLARE_CSR(mhpmevent17, CSR_MHPMEVENT17) -DECLARE_CSR(mhpmevent18, CSR_MHPMEVENT18) -DECLARE_CSR(mhpmevent19, CSR_MHPMEVENT19) -DECLARE_CSR(mhpmevent20, CSR_MHPMEVENT20) -DECLARE_CSR(mhpmevent21, CSR_MHPMEVENT21) -DECLARE_CSR(mhpmevent22, CSR_MHPMEVENT22) -DECLARE_CSR(mhpmevent23, CSR_MHPMEVENT23) -DECLARE_CSR(mhpmevent24, CSR_MHPMEVENT24) -DECLARE_CSR(mhpmevent25, CSR_MHPMEVENT25) -DECLARE_CSR(mhpmevent26, CSR_MHPMEVENT26) -DECLARE_CSR(mhpmevent27, CSR_MHPMEVENT27) -DECLARE_CSR(mhpmevent28, CSR_MHPMEVENT28) -DECLARE_CSR(mhpmevent29, CSR_MHPMEVENT29) -DECLARE_CSR(mhpmevent30, CSR_MHPMEVENT30) -DECLARE_CSR(mhpmevent31, CSR_MHPMEVENT31) -DECLARE_CSR(tselect, CSR_TSELECT) -DECLARE_CSR(tdata1, CSR_TDATA1) -DECLARE_CSR(tdata2, CSR_TDATA2) -DECLARE_CSR(tdata3, CSR_TDATA3) -DECLARE_CSR(dcsr, CSR_DCSR) -DECLARE_CSR(dpc, CSR_DPC) -DECLARE_CSR(dscratch, CSR_DSCRATCH) -/* These registers are present in priv spec 1.9.1, dropped in 1.10. */ -DECLARE_CSR(hstatus, CSR_HSTATUS) -DECLARE_CSR(hedeleg, CSR_HEDELEG) -DECLARE_CSR(hideleg, CSR_HIDELEG) -DECLARE_CSR(hie, CSR_HIE) -DECLARE_CSR(htvec, CSR_HTVEC) -DECLARE_CSR(hscratch, CSR_HSCRATCH) -DECLARE_CSR(hepc, CSR_HEPC) -DECLARE_CSR(hcause, CSR_HCAUSE) -DECLARE_CSR(hbadaddr, CSR_HBADADDR) -DECLARE_CSR(hip, CSR_HIP) -DECLARE_CSR(mbase, CSR_MBASE) -DECLARE_CSR(mbound, CSR_MBOUND) -DECLARE_CSR(mibase, CSR_MIBASE) -DECLARE_CSR(mibound, CSR_MIBOUND) -DECLARE_CSR(mdbase, CSR_MDBASE) -DECLARE_CSR(mdbound, CSR_MDBOUND) -DECLARE_CSR(mucounteren, CSR_MUCOUNTEREN) -DECLARE_CSR(mscounteren, CSR_MSCOUNTEREN) -DECLARE_CSR(mhcounteren, CSR_MHCOUNTEREN) -#endif +/* Privileged. */ +DECLARE_CSR(ustatus, CSR_USTATUS, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(uie, CSR_UIE, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(utvec, CSR_UTVEC, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(uscratch, CSR_USCRATCH, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(uepc, CSR_UEPC, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(ucause, CSR_UCAUSE, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(utval, CSR_UTVAL, CSR_CLASS_I, PRIV_SPEC_CLASS_1P10, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(uip, CSR_UIP, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(cycle, CSR_CYCLE, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(time, CSR_TIME, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(instret, CSR_INSTRET, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(hpmcounter3, CSR_HPMCOUNTER3, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(hpmcounter4, CSR_HPMCOUNTER4, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(hpmcounter5, CSR_HPMCOUNTER5, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(hpmcounter6, CSR_HPMCOUNTER6, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(hpmcounter7, CSR_HPMCOUNTER7, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(hpmcounter8, CSR_HPMCOUNTER8, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(hpmcounter9, CSR_HPMCOUNTER9, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(hpmcounter10, CSR_HPMCOUNTER10, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(hpmcounter11, CSR_HPMCOUNTER11, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(hpmcounter12, CSR_HPMCOUNTER12, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(hpmcounter13, CSR_HPMCOUNTER13, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(hpmcounter14, CSR_HPMCOUNTER14, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(hpmcounter15, CSR_HPMCOUNTER15, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(hpmcounter16, CSR_HPMCOUNTER16, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(hpmcounter17, CSR_HPMCOUNTER17, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(hpmcounter18, CSR_HPMCOUNTER18, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(hpmcounter19, CSR_HPMCOUNTER19, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(hpmcounter20, CSR_HPMCOUNTER20, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(hpmcounter21, CSR_HPMCOUNTER21, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(hpmcounter22, CSR_HPMCOUNTER22, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(hpmcounter23, CSR_HPMCOUNTER23, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(hpmcounter24, CSR_HPMCOUNTER24, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(hpmcounter25, CSR_HPMCOUNTER25, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(hpmcounter26, CSR_HPMCOUNTER26, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(hpmcounter27, CSR_HPMCOUNTER27, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(hpmcounter28, CSR_HPMCOUNTER28, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(hpmcounter29, CSR_HPMCOUNTER29, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(hpmcounter30, CSR_HPMCOUNTER30, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(hpmcounter31, CSR_HPMCOUNTER31, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(cycleh, CSR_CYCLEH, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(timeh, CSR_TIMEH, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(instreth, CSR_INSTRETH, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(hpmcounter3h, CSR_HPMCOUNTER3H, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(hpmcounter4h, CSR_HPMCOUNTER4H, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(hpmcounter5h, CSR_HPMCOUNTER5H, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(hpmcounter6h, CSR_HPMCOUNTER6H, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(hpmcounter7h, CSR_HPMCOUNTER7H, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(hpmcounter8h, CSR_HPMCOUNTER8H, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(hpmcounter9h, CSR_HPMCOUNTER9H, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(hpmcounter10h, CSR_HPMCOUNTER10H, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(hpmcounter11h, CSR_HPMCOUNTER11H, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(hpmcounter12h, CSR_HPMCOUNTER12H, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(hpmcounter13h, CSR_HPMCOUNTER13H, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(hpmcounter14h, CSR_HPMCOUNTER14H, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(hpmcounter15h, CSR_HPMCOUNTER15H, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(hpmcounter16h, CSR_HPMCOUNTER16H, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(hpmcounter17h, CSR_HPMCOUNTER17H, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(hpmcounter18h, CSR_HPMCOUNTER18H, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(hpmcounter19h, CSR_HPMCOUNTER19H, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(hpmcounter20h, CSR_HPMCOUNTER20H, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(hpmcounter21h, CSR_HPMCOUNTER21H, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(hpmcounter22h, CSR_HPMCOUNTER22H, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(hpmcounter23h, CSR_HPMCOUNTER23H, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(hpmcounter24h, CSR_HPMCOUNTER24H, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(hpmcounter25h, CSR_HPMCOUNTER25H, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(hpmcounter26h, CSR_HPMCOUNTER26H, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(hpmcounter27h, CSR_HPMCOUNTER27H, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(hpmcounter28h, CSR_HPMCOUNTER28H, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(hpmcounter29h, CSR_HPMCOUNTER29H, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(hpmcounter30h, CSR_HPMCOUNTER30H, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(hpmcounter31h, CSR_HPMCOUNTER31H, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(sstatus, CSR_SSTATUS, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(sedeleg, CSR_SEDELEG, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(sideleg, CSR_SIDELEG, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(sie, CSR_SIE, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(stvec, CSR_STVEC, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(scounteren, CSR_SCOUNTEREN, CSR_CLASS_I, PRIV_SPEC_CLASS_1P10, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(sscratch, CSR_SSCRATCH, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(sepc, CSR_SEPC, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(scause, CSR_SCAUSE, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(stval, CSR_STVAL, CSR_CLASS_I, PRIV_SPEC_CLASS_1P10, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(sip, CSR_SIP, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(satp, CSR_SATP, CSR_CLASS_I, PRIV_SPEC_CLASS_1P10, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mvendorid, CSR_MVENDORID, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(marchid, CSR_MARCHID, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mimpid, CSR_MIMPID, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhartid, CSR_MHARTID, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mstatus, CSR_MSTATUS, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(misa, CSR_MISA, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(medeleg, CSR_MEDELEG, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mideleg, CSR_MIDELEG, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mie, CSR_MIE, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mtvec, CSR_MTVEC, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mcounteren, CSR_MCOUNTEREN, CSR_CLASS_I, PRIV_SPEC_CLASS_1P10, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mscratch, CSR_MSCRATCH, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mepc, CSR_MEPC, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mcause, CSR_MCAUSE, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mtval, CSR_MTVAL, CSR_CLASS_I, PRIV_SPEC_CLASS_1P10, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mip, CSR_MIP, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(pmpcfg0, CSR_PMPCFG0, CSR_CLASS_I, PRIV_SPEC_CLASS_1P10, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(pmpcfg1, CSR_PMPCFG1, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P10, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(pmpcfg2, CSR_PMPCFG2, CSR_CLASS_I, PRIV_SPEC_CLASS_1P10, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(pmpcfg3, CSR_PMPCFG3, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P10, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(pmpaddr0, CSR_PMPADDR0, CSR_CLASS_I, PRIV_SPEC_CLASS_1P10, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(pmpaddr1, CSR_PMPADDR1, CSR_CLASS_I, PRIV_SPEC_CLASS_1P10, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(pmpaddr2, CSR_PMPADDR2, CSR_CLASS_I, PRIV_SPEC_CLASS_1P10, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(pmpaddr3, CSR_PMPADDR3, CSR_CLASS_I, PRIV_SPEC_CLASS_1P10, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(pmpaddr4, CSR_PMPADDR4, CSR_CLASS_I, PRIV_SPEC_CLASS_1P10, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(pmpaddr5, CSR_PMPADDR5, CSR_CLASS_I, PRIV_SPEC_CLASS_1P10, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(pmpaddr6, CSR_PMPADDR6, CSR_CLASS_I, PRIV_SPEC_CLASS_1P10, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(pmpaddr7, CSR_PMPADDR7, CSR_CLASS_I, PRIV_SPEC_CLASS_1P10, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(pmpaddr8, CSR_PMPADDR8, CSR_CLASS_I, PRIV_SPEC_CLASS_1P10, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(pmpaddr9, CSR_PMPADDR9, CSR_CLASS_I, PRIV_SPEC_CLASS_1P10, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(pmpaddr10, CSR_PMPADDR10, CSR_CLASS_I, PRIV_SPEC_CLASS_1P10, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(pmpaddr11, CSR_PMPADDR11, CSR_CLASS_I, PRIV_SPEC_CLASS_1P10, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(pmpaddr12, CSR_PMPADDR12, CSR_CLASS_I, PRIV_SPEC_CLASS_1P10, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(pmpaddr13, CSR_PMPADDR13, CSR_CLASS_I, PRIV_SPEC_CLASS_1P10, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(pmpaddr14, CSR_PMPADDR14, CSR_CLASS_I, PRIV_SPEC_CLASS_1P10, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(pmpaddr15, CSR_PMPADDR15, CSR_CLASS_I, PRIV_SPEC_CLASS_1P10, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mcycle, CSR_MCYCLE, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(minstret, CSR_MINSTRET, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmcounter3, CSR_MHPMCOUNTER3, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmcounter4, CSR_MHPMCOUNTER4, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmcounter5, CSR_MHPMCOUNTER5, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmcounter6, CSR_MHPMCOUNTER6, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmcounter7, CSR_MHPMCOUNTER7, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmcounter8, CSR_MHPMCOUNTER8, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmcounter9, CSR_MHPMCOUNTER9, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmcounter10, CSR_MHPMCOUNTER10, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmcounter11, CSR_MHPMCOUNTER11, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmcounter12, CSR_MHPMCOUNTER12, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmcounter13, CSR_MHPMCOUNTER13, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmcounter14, CSR_MHPMCOUNTER14, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmcounter15, CSR_MHPMCOUNTER15, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmcounter16, CSR_MHPMCOUNTER16, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmcounter17, CSR_MHPMCOUNTER17, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmcounter18, CSR_MHPMCOUNTER18, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmcounter19, CSR_MHPMCOUNTER19, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmcounter20, CSR_MHPMCOUNTER20, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmcounter21, CSR_MHPMCOUNTER21, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmcounter22, CSR_MHPMCOUNTER22, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmcounter23, CSR_MHPMCOUNTER23, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmcounter24, CSR_MHPMCOUNTER24, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmcounter25, CSR_MHPMCOUNTER25, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmcounter26, CSR_MHPMCOUNTER26, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmcounter27, CSR_MHPMCOUNTER27, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmcounter28, CSR_MHPMCOUNTER28, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmcounter29, CSR_MHPMCOUNTER29, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmcounter30, CSR_MHPMCOUNTER30, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmcounter31, CSR_MHPMCOUNTER31, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mcycleh, CSR_MCYCLEH, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(minstreth, CSR_MINSTRETH, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmcounter3h, CSR_MHPMCOUNTER3H, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmcounter4h, CSR_MHPMCOUNTER4H, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmcounter5h, CSR_MHPMCOUNTER5H, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmcounter6h, CSR_MHPMCOUNTER6H, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmcounter7h, CSR_MHPMCOUNTER7H, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmcounter8h, CSR_MHPMCOUNTER8H, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmcounter9h, CSR_MHPMCOUNTER9H, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmcounter10h, CSR_MHPMCOUNTER10H, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmcounter11h, CSR_MHPMCOUNTER11H, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmcounter12h, CSR_MHPMCOUNTER12H, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmcounter13h, CSR_MHPMCOUNTER13H, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmcounter14h, CSR_MHPMCOUNTER14H, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmcounter15h, CSR_MHPMCOUNTER15H, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmcounter16h, CSR_MHPMCOUNTER16H, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmcounter17h, CSR_MHPMCOUNTER17H, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmcounter18h, CSR_MHPMCOUNTER18H, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmcounter19h, CSR_MHPMCOUNTER19H, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmcounter20h, CSR_MHPMCOUNTER20H, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmcounter21h, CSR_MHPMCOUNTER21H, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmcounter22h, CSR_MHPMCOUNTER22H, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmcounter23h, CSR_MHPMCOUNTER23H, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmcounter24h, CSR_MHPMCOUNTER24H, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmcounter25h, CSR_MHPMCOUNTER25H, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmcounter26h, CSR_MHPMCOUNTER26H, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmcounter27h, CSR_MHPMCOUNTER27H, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmcounter28h, CSR_MHPMCOUNTER28H, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmcounter29h, CSR_MHPMCOUNTER29H, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmcounter30h, CSR_MHPMCOUNTER30H, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmcounter31h, CSR_MHPMCOUNTER31H, CSR_CLASS_I_32, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mcountinhibit, CSR_MCOUNTINHIBIT, CSR_CLASS_I, PRIV_SPEC_CLASS_1P11, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmevent3, CSR_MHPMEVENT3, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmevent4, CSR_MHPMEVENT4, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmevent5, CSR_MHPMEVENT5, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmevent6, CSR_MHPMEVENT6, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmevent7, CSR_MHPMEVENT7, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmevent8, CSR_MHPMEVENT8, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmevent9, CSR_MHPMEVENT9, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmevent10, CSR_MHPMEVENT10, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmevent11, CSR_MHPMEVENT11, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmevent12, CSR_MHPMEVENT12, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmevent13, CSR_MHPMEVENT13, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmevent14, CSR_MHPMEVENT14, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmevent15, CSR_MHPMEVENT15, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmevent16, CSR_MHPMEVENT16, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmevent17, CSR_MHPMEVENT17, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmevent18, CSR_MHPMEVENT18, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmevent19, CSR_MHPMEVENT19, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmevent20, CSR_MHPMEVENT20, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmevent21, CSR_MHPMEVENT21, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmevent22, CSR_MHPMEVENT22, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmevent23, CSR_MHPMEVENT23, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmevent24, CSR_MHPMEVENT24, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmevent25, CSR_MHPMEVENT25, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmevent26, CSR_MHPMEVENT26, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmevent27, CSR_MHPMEVENT27, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmevent28, CSR_MHPMEVENT28, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmevent29, CSR_MHPMEVENT29, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmevent30, CSR_MHPMEVENT30, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +DECLARE_CSR(mhpmevent31, CSR_MHPMEVENT31, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_DRAFT) +/* Dropped. */ +DECLARE_CSR(hstatus, CSR_HSTATUS, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_1P10) +DECLARE_CSR(hedeleg, CSR_HEDELEG, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_1P10) +DECLARE_CSR(hideleg, CSR_HIDELEG, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_1P10) +DECLARE_CSR(hie, CSR_HIE, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_1P10) +DECLARE_CSR(htvec, CSR_HTVEC, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_1P10) +DECLARE_CSR(hscratch, CSR_HSCRATCH, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_1P10) +DECLARE_CSR(hepc, CSR_HEPC, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_1P10) +DECLARE_CSR(hcause, CSR_HCAUSE, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_1P10) +DECLARE_CSR(hbadaddr, CSR_HBADADDR, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_1P10) +DECLARE_CSR(hip, CSR_HIP, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_1P10) +DECLARE_CSR(mbase, CSR_MBASE, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_1P10) +DECLARE_CSR(mbound, CSR_MBOUND, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_1P10) +DECLARE_CSR(mibase, CSR_MIBASE, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_1P10) +DECLARE_CSR(mibound, CSR_MIBOUND, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_1P10) +DECLARE_CSR(mdbase, CSR_MDBASE, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_1P10) +DECLARE_CSR(mdbound, CSR_MDBOUND, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_1P10) +DECLARE_CSR(mscounteren, CSR_MSCOUNTEREN, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_1P10) +DECLARE_CSR(mhcounteren, CSR_MHCOUNTEREN, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_1P10) +/* Unprivileged. */ +DECLARE_CSR(fflags, CSR_FFLAGS, CSR_CLASS_F, PRIV_SPEC_CLASS_NONE, PRIV_SPEC_CLASS_NONE) +DECLARE_CSR(frm, CSR_FRM, CSR_CLASS_F, PRIV_SPEC_CLASS_NONE, PRIV_SPEC_CLASS_NONE) +DECLARE_CSR(fcsr, CSR_FCSR, CSR_CLASS_F, PRIV_SPEC_CLASS_NONE, PRIV_SPEC_CLASS_NONE) +DECLARE_CSR(dcsr, CSR_DCSR, CSR_CLASS_DEBUG, PRIV_SPEC_CLASS_NONE, PRIV_SPEC_CLASS_NONE) +DECLARE_CSR(dpc, CSR_DPC, CSR_CLASS_DEBUG, PRIV_SPEC_CLASS_NONE, PRIV_SPEC_CLASS_NONE) +DECLARE_CSR(dscratch0, CSR_DSCRATCH0, CSR_CLASS_DEBUG, PRIV_SPEC_CLASS_NONE, PRIV_SPEC_CLASS_NONE) +DECLARE_CSR(dscratch1, CSR_DSCRATCH1, CSR_CLASS_DEBUG, PRIV_SPEC_CLASS_NONE, PRIV_SPEC_CLASS_NONE) +DECLARE_CSR(tselect, CSR_TSELECT, CSR_CLASS_DEBUG, PRIV_SPEC_CLASS_NONE, PRIV_SPEC_CLASS_NONE) +DECLARE_CSR(tdata1, CSR_TDATA1, CSR_CLASS_DEBUG, PRIV_SPEC_CLASS_NONE, PRIV_SPEC_CLASS_NONE) +DECLARE_CSR(tdata2, CSR_TDATA2, CSR_CLASS_DEBUG, PRIV_SPEC_CLASS_NONE, PRIV_SPEC_CLASS_NONE) +DECLARE_CSR(tdata3, CSR_TDATA3, CSR_CLASS_DEBUG, PRIV_SPEC_CLASS_NONE, PRIV_SPEC_CLASS_NONE) +DECLARE_CSR(tinfo, CSR_TINFO, CSR_CLASS_DEBUG, PRIV_SPEC_CLASS_NONE, PRIV_SPEC_CLASS_NONE) +DECLARE_CSR(tcontrol, CSR_TCONTROL, CSR_CLASS_DEBUG, PRIV_SPEC_CLASS_NONE, PRIV_SPEC_CLASS_NONE) +DECLARE_CSR(mcontext, CSR_MCONTEXT, CSR_CLASS_DEBUG, PRIV_SPEC_CLASS_NONE, PRIV_SPEC_CLASS_NONE) +DECLARE_CSR(scontext, CSR_SCONTEXT, CSR_CLASS_DEBUG, PRIV_SPEC_CLASS_NONE, PRIV_SPEC_CLASS_NONE) +#endif /* DECLARE_CSR. */ #ifdef DECLARE_CSR_ALIAS -/* Ubadaddr is 0x043 in 1.9.1, but 0x043 is utval in 1.10. */ -DECLARE_CSR_ALIAS(ubadaddr, CSR_UTVAL) -/* Sbadaddr is 0x143 in 1.9.1, but 0x143 is stval in 1.10. */ -DECLARE_CSR_ALIAS(sbadaddr, CSR_STVAL) -/* Sptbr is 0x180 in 1.9.1, but 0x180 is satp in 1.10. */ -DECLARE_CSR_ALIAS(sptbr, CSR_SATP) -/* Mbadaddr is 0x343 in 1.9.1, but 0x343 is mtval in 1.10. */ -DECLARE_CSR_ALIAS(mbadaddr, CSR_MTVAL) -#endif -#ifdef DECLARE_CAUSE -DECLARE_CAUSE("misaligned fetch", CAUSE_MISALIGNED_FETCH) -DECLARE_CAUSE("fault fetch", CAUSE_FAULT_FETCH) -DECLARE_CAUSE("illegal instruction", CAUSE_ILLEGAL_INSTRUCTION) -DECLARE_CAUSE("breakpoint", CAUSE_BREAKPOINT) -DECLARE_CAUSE("misaligned load", CAUSE_MISALIGNED_LOAD) -DECLARE_CAUSE("fault load", CAUSE_FAULT_LOAD) -DECLARE_CAUSE("misaligned store", CAUSE_MISALIGNED_STORE) -DECLARE_CAUSE("fault store", CAUSE_FAULT_STORE) -DECLARE_CAUSE("user_ecall", CAUSE_USER_ECALL) -DECLARE_CAUSE("supervisor_ecall", CAUSE_SUPERVISOR_ECALL) -DECLARE_CAUSE("hypervisor_ecall", CAUSE_HYPERVISOR_ECALL) -DECLARE_CAUSE("machine_ecall", CAUSE_MACHINE_ECALL) -#endif +DECLARE_CSR_ALIAS(ubadaddr, CSR_UTVAL, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_1P10) +DECLARE_CSR_ALIAS(sbadaddr, CSR_STVAL, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_1P10) +DECLARE_CSR_ALIAS(sptbr, CSR_SATP, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_1P10) +DECLARE_CSR_ALIAS(mbadaddr, CSR_MTVAL, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_1P10) +DECLARE_CSR_ALIAS(mucounteren, CSR_MCOUNTINHIBIT, CSR_CLASS_I, PRIV_SPEC_CLASS_1P9P1, PRIV_SPEC_CLASS_1P10) +DECLARE_CSR_ALIAS(dscratch, CSR_DSCRATCH0, CSR_CLASS_DEBUG, PRIV_SPEC_CLASS_NONE, PRIV_SPEC_CLASS_NONE) +DECLARE_CSR_ALIAS(mcontrol, CSR_TDATA1, CSR_CLASS_DEBUG, PRIV_SPEC_CLASS_NONE, PRIV_SPEC_CLASS_NONE) +DECLARE_CSR_ALIAS(icount, CSR_TDATA1, CSR_CLASS_DEBUG, PRIV_SPEC_CLASS_NONE, PRIV_SPEC_CLASS_NONE) +DECLARE_CSR_ALIAS(itrigger, CSR_TDATA1, CSR_CLASS_DEBUG, PRIV_SPEC_CLASS_NONE, PRIV_SPEC_CLASS_NONE) +DECLARE_CSR_ALIAS(etrigger, CSR_TDATA1, CSR_CLASS_DEBUG, PRIV_SPEC_CLASS_NONE, PRIV_SPEC_CLASS_NONE) +DECLARE_CSR_ALIAS(textra32, CSR_TDATA3, CSR_CLASS_DEBUG, PRIV_SPEC_CLASS_NONE, PRIV_SPEC_CLASS_NONE) +DECLARE_CSR_ALIAS(textra64, CSR_TDATA3, CSR_CLASS_DEBUG, PRIV_SPEC_CLASS_NONE, PRIV_SPEC_CLASS_NONE) +#endif /* DECLARE_CSR_ALIAS. */ diff -Nru gdb-9.1/include/opcode/rl78.h gdb-10.2/include/opcode/rl78.h --- gdb-9.1/include/opcode/rl78.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/opcode/rl78.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Opcode decoder for the Renesas RL78 - Copyright (C) 2011-2019 Free Software Foundation, Inc. + Copyright (C) 2011-2020 Free Software Foundation, Inc. Written by DJ Delorie <dj@redhat.com> This file is part of GDB, the GNU Debugger and GAS, the GNU Assembler. diff -Nru gdb-9.1/include/opcode/rx.h gdb-10.2/include/opcode/rx.h --- gdb-9.1/include/opcode/rx.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/opcode/rx.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Opcode decoder for the Renesas RX - Copyright (C) 2008-2019 Free Software Foundation, Inc. + Copyright (C) 2008-2020 Free Software Foundation, Inc. Written by DJ Delorie <dj@redhat.com> This file is part of GDB, the GNU Debugger and GAS, the GNU Assembler. diff -Nru gdb-9.1/include/opcode/s12z.h gdb-10.2/include/opcode/s12z.h --- gdb-9.1/include/opcode/s12z.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/opcode/s12z.h 2020-09-13 02:33:41.000000000 +0000 @@ -2,25 +2,30 @@ #define S12Z_H /* This byte is used to prefix instructions in "page 2" of the opcode - space */ + space. */ #define PAGE2_PREBYTE (0x1b) struct reg { - char *name; /* The canonical name of the register */ - int bytes; /* its size, in bytes */ + char *name; /* The canonical name of the register. */ + int bytes; /* its size, in bytes. */ }; /* How many registers do we have. Actually there are only 13, because CCL and CCH are the low and high bytes of CCW. But for assemnbly / disassembly purposes they are considered - distinct registers. */ + distinct registers. */ #define S12Z_N_REGISTERS 15 extern const struct reg registers[S12Z_N_REGISTERS]; -enum { +/* Solaris defines REG_Y in sys/regset.h; undef it here to avoid + breaking compilation when this target is enabled. */ +#undef REG_Y + +enum + { REG_D2 = 0, REG_D3, REG_D4, @@ -38,7 +43,7 @@ REG_CCW }; -/* Any of the registers d0, d1, ... d7 */ +/* Any of the registers d0, d1, ... d7. */ #define REG_BIT_Dn \ ((0x1U << REG_D2) | \ (0x1U << REG_D3) | \ @@ -49,23 +54,22 @@ (0x1U << REG_D0) | \ (0x1U << REG_D1)) -/* Any of the registers x, y or z */ +/* Any of the registers x, y or z. */ #define REG_BIT_XYS \ ((0x1U << REG_X) | \ (0x1U << REG_Y) | \ (0x1U << REG_S)) -/* Any of the registers x, y, z or p */ +/* Any of the registers x, y, z or p. */ #define REG_BIT_XYSP \ ((0x1U << REG_X) | \ (0x1U << REG_Y) | \ (0x1U << REG_S) | \ (0x1U << REG_P)) -/* The x register or the y register */ +/* The x register or the y register. */ #define REG_BIT_XY \ ((0x1U << REG_X) | \ (0x1U << REG_Y)) - #endif diff -Nru gdb-9.1/include/opcode/s390.h gdb-10.2/include/opcode/s390.h --- gdb-9.1/include/opcode/s390.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/opcode/s390.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* s390.h -- Header file for S390 opcode table - Copyright (C) 2000-2019 Free Software Foundation, Inc. + Copyright (C) 2000-2020 Free Software Foundation, Inc. Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/opcode/score-datadep.h gdb-10.2/include/opcode/score-datadep.h --- gdb-9.1/include/opcode/score-datadep.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/opcode/score-datadep.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* score-datadep.h -- Score Instructions data dependency table - Copyright (C) 2006-2019 Free Software Foundation, Inc. + Copyright (C) 2006-2020 Free Software Foundation, Inc. Contributed by: Brain.lin (brain.lin@sunplusct.com) Mei Ligang (ligang@sunnorth.com.cn) diff -Nru gdb-9.1/include/opcode/score-inst.h gdb-10.2/include/opcode/score-inst.h --- gdb-9.1/include/opcode/score-inst.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/opcode/score-inst.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* score-inst.h -- Score Instructions Table - Copyright (C) 2006-2019 Free Software Foundation, Inc. + Copyright (C) 2006-2020 Free Software Foundation, Inc. Contributed by: Brain.lin (brain.lin@sunplusct.com) Mei Ligang (ligang@sunnorth.com.cn) diff -Nru gdb-9.1/include/opcode/sparc.h gdb-10.2/include/opcode/sparc.h --- gdb-9.1/include/opcode/sparc.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/opcode/sparc.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Definitions for opcode table for the sparc. - Copyright (C) 1989-2019 Free Software Foundation, Inc. + Copyright (C) 1989-2020 Free Software Foundation, Inc. This file is part of GAS, the GNU Assembler, GDB, the GNU debugger, and the GNU Binutils. diff -Nru gdb-9.1/include/opcode/spu.h gdb-10.2/include/opcode/spu.h --- gdb-9.1/include/opcode/spu.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/opcode/spu.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* SPU ELF support for BFD. - Copyright (C) 2006-2019 Free Software Foundation, Inc. + Copyright (C) 2006-2020 Free Software Foundation, Inc. This file is part of GDB, GAS, and the GNU binutils. @@ -87,39 +87,42 @@ int arg[5]; }; -#define SIGNED_EXTRACT(insn,size,pos) (((int)((insn) << (32-size-pos))) >> (32-size)) -#define UNSIGNED_EXTRACT(insn,size,pos) (((insn) >> pos) & ((1 << size)-1)) +#define UNSIGNED_EXTRACT(insn, size, pos) \ + (((insn) >> (pos)) & ((1u << (size)) - 1)) +#define SIGNED_EXTRACT(insn, size, pos) \ + (((int) UNSIGNED_EXTRACT(insn, size, pos) \ + ^ (1 << ((size) - 1))) - (1 << ((size) - 1))) #define DECODE_INSN_RT(insn) (insn & 0x7f) #define DECODE_INSN_RA(insn) ((insn >> 7) & 0x7f) #define DECODE_INSN_RB(insn) ((insn >> 14) & 0x7f) #define DECODE_INSN_RC(insn) ((insn >> 21) & 0x7f) -#define DECODE_INSN_I10(insn) SIGNED_EXTRACT(insn,10,14) -#define DECODE_INSN_U10(insn) UNSIGNED_EXTRACT(insn,10,14) +#define DECODE_INSN_I10(insn) SIGNED_EXTRACT (insn, 10, 14) +#define DECODE_INSN_U10(insn) UNSIGNED_EXTRACT (insn, 10, 14) /* For branching, immediate loads, hbr and lqa/stqa. */ -#define DECODE_INSN_I16(insn) SIGNED_EXTRACT(insn,16,7) -#define DECODE_INSN_U16(insn) UNSIGNED_EXTRACT(insn,16,7) +#define DECODE_INSN_I16(insn) SIGNED_EXTRACT (insn, 16, 7) +#define DECODE_INSN_U16(insn) UNSIGNED_EXTRACT (insn, 16, 7) /* for stop */ -#define DECODE_INSN_U14(insn) UNSIGNED_EXTRACT(insn,14,0) +#define DECODE_INSN_U14(insn) UNSIGNED_EXTRACT (insn, 14, 0) /* For ila */ -#define DECODE_INSN_I18(insn) SIGNED_EXTRACT(insn,18,7) -#define DECODE_INSN_U18(insn) UNSIGNED_EXTRACT(insn,18,7) +#define DECODE_INSN_I18(insn) SIGNED_EXTRACT (insn, 18, 7) +#define DECODE_INSN_U18(insn) UNSIGNED_EXTRACT (insn, 18, 7) /* For rotate and shift and generate control mask */ -#define DECODE_INSN_I7(insn) SIGNED_EXTRACT(insn,7,14) -#define DECODE_INSN_U7(insn) UNSIGNED_EXTRACT(insn,7,14) +#define DECODE_INSN_I7(insn) SIGNED_EXTRACT (insn, 7, 14) +#define DECODE_INSN_U7(insn) UNSIGNED_EXTRACT (insn, 7, 14) /* For float <-> int conversion */ -#define DECODE_INSN_I8(insn) SIGNED_EXTRACT(insn,8,14) -#define DECODE_INSN_U8(insn) UNSIGNED_EXTRACT(insn,8,14) +#define DECODE_INSN_I8(insn) SIGNED_EXTRACT (insn, 8, 14) +#define DECODE_INSN_U8(insn) UNSIGNED_EXTRACT (insn, 8, 14) /* For hbr */ -#define DECODE_INSN_I9a(insn) ((SIGNED_EXTRACT(insn,2,23) << 7) | UNSIGNED_EXTRACT(insn,7,0)) -#define DECODE_INSN_I9b(insn) ((SIGNED_EXTRACT(insn,2,14) << 7) | UNSIGNED_EXTRACT(insn,7,0)) -#define DECODE_INSN_U9a(insn) ((UNSIGNED_EXTRACT(insn,2,23) << 7) | UNSIGNED_EXTRACT(insn,7,0)) -#define DECODE_INSN_U9b(insn) ((UNSIGNED_EXTRACT(insn,2,14) << 7) | UNSIGNED_EXTRACT(insn,7,0)) +#define DECODE_INSN_I9a(insn) \ + ((SIGNED_EXTRACT (insn, 2, 23) * 128) | (int) UNSIGNED_EXTRACT (insn, 7, 0)) +#define DECODE_INSN_I9b(insn) \ + ((SIGNED_EXTRACT (insn, 2, 14) * 128) | (int) UNSIGNED_EXTRACT (insn, 7, 0)) diff -Nru gdb-9.1/include/opcode/spu-insns.h gdb-10.2/include/opcode/spu-insns.h --- gdb-9.1/include/opcode/spu-insns.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/opcode/spu-insns.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* SPU ELF support for BFD. - Copyright (C) 2006-2019 Free Software Foundation, Inc. + Copyright (C) 2006-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/opcode/tic30.h gdb-10.2/include/opcode/tic30.h --- gdb-9.1/include/opcode/tic30.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/opcode/tic30.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* tic30.h -- Header file for TI TMS320C30 opcode table - Copyright (C) 1998-2019 Free Software Foundation, Inc. + Copyright (C) 1998-2020 Free Software Foundation, Inc. Contributed by Steven Haworth (steve@pm.cse.rmit.edu.au) This file is part of GDB, GAS, and the GNU binutils. diff -Nru gdb-9.1/include/opcode/tic4x.h gdb-10.2/include/opcode/tic4x.h --- gdb-9.1/include/opcode/tic4x.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/opcode/tic4x.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Table of opcodes for the Texas Instruments TMS320C[34]X family. - Copyright (C) 2002-2019 Free Software Foundation, Inc. + Copyright (C) 2002-2020 Free Software Foundation, Inc. Contributed by Michael P. Hayes (m.hayes@elec.canterbury.ac.nz) @@ -23,11 +23,13 @@ #define IS_CPU_TIC4X(v) ((v) == 0 || (v) == 40 || (v) == 44) /* Define some bitfield extraction/insertion macros. */ -#define EXTR(inst, m, l) ((inst) << (31 - (m)) >> (31 - ((m) - (l)))) -#define EXTRU(inst, m, l) EXTR ((unsigned long)(inst), (m), (l)) -#define EXTRS(inst, m, l) EXTR ((long)(inst), (m), (l)) -#define INSERTU(inst, val, m, l) (inst |= ((val) << (l))) -#define INSERTS(inst, val, m, l) INSERTU (inst, ((val) & ((1 << ((m) - (l) + 1)) - 1)), m, l) +#define EXTRU(inst, m, l) \ + (((inst) >> (l)) & ((2u << ((m) - (l))) - 1)) +#define EXTRS(inst, m, l) \ + ((int) ((EXTRU (inst, m, l) ^ (1u << ((m) - (l)))) - (1u << ((m) - (l))))) +#define INSERTU(inst, val, m, l) \ + ((inst) |= ((val) & ((2u << ((m) - (l))) - 1)) << (l)) +#define INSERTS INSERTU /* Define register numbers. */ typedef enum diff -Nru gdb-9.1/include/opcode/tic54x.h gdb-10.2/include/opcode/tic54x.h --- gdb-9.1/include/opcode/tic54x.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/opcode/tic54x.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* tic54x.h -- Header file for TI TMS320C54X opcode table - Copyright (C) 1999-2019 Free Software Foundation, Inc. + Copyright (C) 1999-2020 Free Software Foundation, Inc. Written by Timothy Wall (twall@cygnus.com) This file is part of GDB, GAS, and the GNU binutils. diff -Nru gdb-9.1/include/opcode/tic6x-control-registers.h gdb-10.2/include/opcode/tic6x-control-registers.h --- gdb-9.1/include/opcode/tic6x-control-registers.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/opcode/tic6x-control-registers.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* TI C6X control register information. - Copyright (C) 2010-2019 Free Software Foundation, Inc. + Copyright (C) 2010-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/include/opcode/tic6x.h gdb-10.2/include/opcode/tic6x.h --- gdb-9.1/include/opcode/tic6x.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/opcode/tic6x.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* TI C6X opcode information. - Copyright (C) 2010-2019 Free Software Foundation, Inc. + Copyright (C) 2010-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/include/opcode/tic6x-insn-formats.h gdb-10.2/include/opcode/tic6x-insn-formats.h --- gdb-9.1/include/opcode/tic6x-insn-formats.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/opcode/tic6x-insn-formats.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* TI C6X instruction format information. - Copyright (C) 2010-2019 Free Software Foundation, Inc. + Copyright (C) 2010-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/include/opcode/tic6x-opcode-table.h gdb-10.2/include/opcode/tic6x-opcode-table.h --- gdb-9.1/include/opcode/tic6x-opcode-table.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/opcode/tic6x-opcode-table.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* TI C6X opcode table. - Copyright (C) 2010-2019 Free Software Foundation, Inc. + Copyright (C) 2010-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/include/opcode/tic80.h gdb-10.2/include/opcode/tic80.h --- gdb-9.1/include/opcode/tic80.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/opcode/tic80.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,283 +0,0 @@ -/* tic80.h -- Header file for TI TMS320C80 (MV) opcode table - Copyright (C) 1996-2019 Free Software Foundation, Inc. - Written by Fred Fish (fnf@cygnus.com), Cygnus Support - - This file is part of GDB, GAS, and the GNU binutils. - - GDB, GAS, and the GNU binutils are 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. - - GDB, GAS, and the GNU binutils are distributed in the hope that they - will be useful, but WITHOUT ANY WARRANTY; without even the implied - warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See - the GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this file; see the file COPYING3. If not, write to the Free - Software Foundation, 51 Franklin Street - Fifth Floor, Boston, - MA 02110-1301, USA. */ - -#ifndef TIC80_H -#define TIC80_H - -/* The opcode table is an array of struct tic80_opcode. */ - -struct tic80_opcode -{ - /* The opcode name. */ - - const char *name; - - /* The opcode itself. Those bits which will be filled in with operands - are zeroes. */ - - unsigned long opcode; - - /* The opcode mask. This is used by the disassembler. This is a mask - containing ones indicating those bits which must match the opcode - field, and zeroes indicating those bits which need not match (and are - presumably filled in by operands). */ - - unsigned long mask; - - /* Special purpose flags for this opcode. */ - - unsigned char flags; - - /* An array of operand codes. Each code is an index into the operand - table. They appear in the order which the operands must appear in - assembly code, and are terminated by a zero. FIXME: Adjust size to - match actual requirements when TIc80 support is complete */ - - unsigned char operands[8]; -}; - -/* The table itself is sorted by major opcode number, and is otherwise in - the order in which the disassembler should consider instructions. - FIXME: This isn't currently true. */ - -extern const struct tic80_opcode tic80_opcodes[]; -extern const int tic80_num_opcodes; - - -/* The operands table is an array of struct tic80_operand. */ - -struct tic80_operand -{ - /* The number of bits in the operand. */ - - int bits; - - /* How far the operand is left shifted in the instruction. */ - - int shift; - - /* Insertion function. This is used by the assembler. To insert an - operand value into an instruction, check this field. - - If it is NULL, execute - i |= (op & ((1 << o->bits) - 1)) << o->shift; - (i is the instruction which we are filling in, o is a pointer to - this structure, and op is the opcode value; this assumes twos - complement arithmetic). - - If this field is not NULL, then simply call it with the - instruction and the operand value. It will return the new value - of the instruction. If the ERRMSG argument is not NULL, then if - the operand value is illegal, *ERRMSG will be set to a warning - string (the operand will be inserted in any case). If the - operand value is legal, *ERRMSG will be unchanged (most operands - can accept any value). */ - - unsigned long (*insert) - (unsigned long instruction, long op, const char **errmsg); - - /* Extraction function. This is used by the disassembler. To - extract this operand type from an instruction, check this field. - - If it is NULL, compute - op = ((i) >> o->shift) & ((1 << o->bits) - 1); - if ((o->flags & TIC80_OPERAND_SIGNED) != 0 - && (op & (1 << (o->bits - 1))) != 0) - op -= 1 << o->bits; - (i is the instruction, o is a pointer to this structure, and op - is the result; this assumes twos complement arithmetic). - - If this field is not NULL, then simply call it with the - instruction value. It will return the value of the operand. If - the INVALID argument is not NULL, *INVALID will be set to - non-zero if this operand type can not actually be extracted from - this operand (i.e., the instruction does not match). If the - operand is valid, *INVALID will not be changed. */ - - long (*extract) (unsigned long instruction, int *invalid); - - /* One bit syntax flags. */ - - unsigned long flags; -}; - -/* Elements in the table are retrieved by indexing with values from - the operands field of the tic80_opcodes table. */ - -extern const struct tic80_operand tic80_operands[]; - - -/* Values defined for the flags field of a struct tic80_operand. - - Note that flags for all predefined symbols, such as the general purpose - registers (ex: r10), control registers (ex: FPST), condition codes (ex: - eq0.b), bit numbers (ex: gt.b), etc are large enough that they can be - or'd into an int where the lower bits contain the actual numeric value - that correponds to this predefined symbol. This way a single int can - contain both the value of the symbol and it's type. - */ - -/* This operand must be an even register number. Floating point numbers - for example are stored in even/odd register pairs. */ - -#define TIC80_OPERAND_EVEN (1u << 0) - -/* This operand must be an odd register number and must be one greater than - the register number of the previous operand. I.E. the second register in - an even/odd register pair. */ - -#define TIC80_OPERAND_ODD (1u << 1) - -/* This operand takes signed values. */ - -#define TIC80_OPERAND_SIGNED (1u << 2) - -/* This operand may be either a predefined constant name or a numeric value. - An example would be a condition code like "eq0.b" which has the numeric - value 0x2. */ - -#define TIC80_OPERAND_NUM (1u << 3) - -/* This operand should be wrapped in parentheses rather than separated - from the previous one by a comma. This is used for various - instructions, like the load and store instructions, which want - their operands to look like "displacement(reg)" */ - -#define TIC80_OPERAND_PARENS (1u << 4) - -/* This operand is a PC relative branch offset. The disassembler prints - these symbolically if possible. Note that the offsets are taken as word - offsets. */ - -#define TIC80_OPERAND_PCREL (1u << 5) - -/* This flag is a hint to the disassembler for using hex as the prefered - printing format, even for small positive or negative immediate values. - Normally values in the range -999 to 999 are printed as signed decimal - values and other values are printed in hex. */ - -#define TIC80_OPERAND_BITFIELD (1u << 6) - -/* This operand may have a ":m" modifier specified by bit 17 in a short - immediate form instruction. */ - -#define TIC80_OPERAND_M_SI (1u << 7) - -/* This operand may have a ":m" modifier specified by bit 15 in a long - immediate or register form instruction. */ - -#define TIC80_OPERAND_M_LI (1u << 8) - -/* This operand may have a ":s" modifier specified in bit 11 in a long - immediate or register form instruction. */ - -#define TIC80_OPERAND_SCALED (1u << 9) - -/* This operand is a floating point value */ - -#define TIC80_OPERAND_FLOAT (1u << 10) - -/* This operand is an byte offset from a base relocation. The lower - two bits of the final relocated address are ignored when the value is - written to the program counter. */ - -#define TIC80_OPERAND_BASEREL (1u << 11) - -/* This operand is an "endmask" field for a shift instruction. - It is treated special in that it can have values of 0-32, - where 0 and 32 result in the same instruction. The assembler - must be able to accept both endmask values. This disassembler - has no way of knowing from the instruction which value was - given at assembly time, so it just uses '0'. */ - -#define TIC80_OPERAND_ENDMASK (1u << 12) - -/* This operand is one of the 32 general purpose registers. - The disassembler prints these with a leading 'r'. */ - -#define TIC80_OPERAND_GPR (1u << 27) - -/* This operand is a floating point accumulator register. - The disassembler prints these with a leading 'a'. */ - -#define TIC80_OPERAND_FPA (1u << 28) - -/* This operand is a control register number, either numeric or - symbolic (like "EIF", "EPC", etc). - The disassembler prints these symbolically. */ - -#define TIC80_OPERAND_CR (1u << 29) - -/* This operand is a condition code, either numeric or - symbolic (like "eq0.b", "ne0.w", etc). - The disassembler prints these symbolically. */ - -#define TIC80_OPERAND_CC (1u << 30) - -/* This operand is a bit number, either numeric or - symbolic (like "eq.b", "or.f", etc). - The disassembler prints these symbolically. - Note that they appear in the instruction in 1's complement relative - to the values given in the manual. */ - -#define TIC80_OPERAND_BITNUM (1u << 31) - -/* This mask is used to strip operand bits from an int that contains - both operand bits and a numeric value in the lsbs. */ - -#define TIC80_OPERAND_MASK (TIC80_OPERAND_GPR | TIC80_OPERAND_FPA | TIC80_OPERAND_CR | TIC80_OPERAND_CC | TIC80_OPERAND_BITNUM) - - -/* Flag bits for the struct tic80_opcode flags field. */ - -#define TIC80_VECTOR 01 /* Is a vector instruction */ -#define TIC80_NO_R0_DEST 02 /* Register r0 cannot be a destination register */ - - -/* The opcodes library contains a table that allows translation from predefined - symbol names to numeric values, and vice versa. */ - -/* Structure to hold information about predefined symbols. */ - -struct predefined_symbol -{ - char *name; /* name to recognize */ - int value; -}; - -#define PDS_NAME(pdsp) ((pdsp) -> name) -#define PDS_VALUE(pdsp) ((pdsp) -> value) - -/* Translation array. */ -extern const struct predefined_symbol tic80_predefined_symbols[]; -/* How many members in the array. */ -extern const int tic80_num_predefined_symbols; - -/* Translate value to symbolic name. */ -const char *tic80_value_to_symbol (int val, int class); - -/* Translate symbolic name to value. */ -int tic80_symbol_to_value (char *name, int class); - -const struct predefined_symbol *tic80_next_predefined_symbol - (const struct predefined_symbol *); - -#endif /* TIC80_H */ diff -Nru gdb-9.1/include/opcode/tilegx.h gdb-10.2/include/opcode/tilegx.h --- gdb-9.1/include/opcode/tilegx.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/opcode/tilegx.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* TILE-Gx opcode information. * - * Copyright (C) 2011-2019 Free Software Foundation, Inc. + * Copyright (C) 2011-2020 Free Software Foundation, Inc. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/include/opcode/tilepro.h gdb-10.2/include/opcode/tilepro.h --- gdb-9.1/include/opcode/tilepro.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/opcode/tilepro.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* TILEPro opcode information. * - * Copyright (C) 2011-2019 Free Software Foundation, Inc. + * Copyright (C) 2011-2020 Free Software Foundation, Inc. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -1412,6 +1412,7 @@ TILEPRO_PIPELINE_Y0, TILEPRO_PIPELINE_Y1, TILEPRO_PIPELINE_Y2, + TILEPRO_NUM_PIPELINE_ENCODINGS } tilepro_pipeline; #define tilepro_is_x_pipeline(p) ((int)(p) <= (int)TILEPRO_PIPELINE_X1) @@ -1432,9 +1433,6 @@ /* Maximum number of instructions in a bundle (2 for X, 3 for Y). */ TILEPRO_MAX_INSTRUCTIONS_PER_BUNDLE = 3, - /* How many different pipeline encodings are there? X0, X1, Y0, Y1, Y2. */ - TILEPRO_NUM_PIPELINE_ENCODINGS = 5, - /* Log base 2 of TILEPRO_BUNDLE_SIZE_IN_BYTES. */ TILEPRO_LOG2_BUNDLE_SIZE_IN_BYTES = 3, diff -Nru gdb-9.1/include/opcode/v850.h gdb-10.2/include/opcode/v850.h --- gdb-9.1/include/opcode/v850.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/opcode/v850.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* v850.h -- Header file for NEC V850 opcode table - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. Written by J.T. Conklin, Cygnus Support This file is part of GDB, GAS, and the GNU binutils. @@ -133,7 +133,7 @@ operand value is legal, *ERRMSG will be unchanged (most operands can accept any value). */ unsigned long (* insert) - (unsigned long instruction, long op, const char ** errmsg); + (unsigned long instruction, unsigned long op, const char ** errmsg); /* Extraction function. This is used by the disassembler. To extract this operand type from an instruction, check this field. diff -Nru gdb-9.1/include/opcode/vax.h gdb-10.2/include/opcode/vax.h --- gdb-9.1/include/opcode/vax.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/opcode/vax.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Vax opcde list. - Copyright (C) 1989-2019 Free Software Foundation, Inc. + Copyright (C) 1989-2020 Free Software Foundation, Inc. This file is part of GDB and GAS. diff -Nru gdb-9.1/include/opcode/visium.h gdb-10.2/include/opcode/visium.h --- gdb-9.1/include/opcode/visium.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/opcode/visium.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Opcode table header for Visium. - Copyright (C) 2003-2019 Free Software Foundation, Inc. + Copyright (C) 2003-2020 Free Software Foundation, Inc. This file is part of GDB, GAS, and GNU binutils. diff -Nru gdb-9.1/include/opcode/wasm.h gdb-10.2/include/opcode/wasm.h --- gdb-9.1/include/opcode/wasm.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/opcode/wasm.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* WebAssembly assembler/disassembler support. - Copyright (C) 2017-2019 Free Software Foundation, Inc. + Copyright (C) 2017-2020 Free Software Foundation, Inc. This file is part of GAS, the GNU assembler. diff -Nru gdb-9.1/include/opcode/xgate.h gdb-10.2/include/opcode/xgate.h --- gdb-9.1/include/opcode/xgate.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/opcode/xgate.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* xgate.h -- Freescale XGATE opcode list - Copyright (C) 2010-2019 Free Software Foundation, Inc. + Copyright (C) 2010-2020 Free Software Foundation, Inc. Written by Sean Keys (skeys@ipdatasys.com) This file is part of the GNU opcodes library. diff -Nru gdb-9.1/include/os9k.h gdb-10.2/include/os9k.h --- gdb-9.1/include/os9k.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/os9k.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* os9k.h - OS-9000 i386 module header definitions - Copyright (C) 2000-2019 Free Software Foundation, Inc. + Copyright (C) 2000-2020 Free Software Foundation, Inc. This file is part of GNU CC. diff -Nru gdb-9.1/include/partition.h gdb-10.2/include/partition.h --- gdb-9.1/include/partition.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/partition.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* List implementation of a partition of consecutive integers. - Copyright (C) 2000-2019 Free Software Foundation, Inc. + Copyright (C) 2000-2020 Free Software Foundation, Inc. Contributed by CodeSourcery, LLC. This file is part of GCC. diff -Nru gdb-9.1/include/plugin-api.h gdb-10.2/include/plugin-api.h --- gdb-9.1/include/plugin-api.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/plugin-api.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* plugin-api.h -- External linker plugin API. */ -/* Copyright (C) 2009-2019 Free Software Foundation, Inc. +/* Copyright (C) 2009-2020 Free Software Foundation, Inc. Written by Cary Coutant <ccoutant@google.com>. This file is part of binutils. @@ -37,6 +37,60 @@ #error cannot find uint64_t type #endif +/* Detect endianess based on __BYTE_ORDER__ macro. */ +#if defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__) && \ + defined(__ORDER_LITTLE_ENDIAN__) && defined(__ORDER_PDP_ENDIAN__) +#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ +#define PLUGIN_LITTLE_ENDIAN 1 +#elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ +#define PLUGIN_BIG_ENDIAN 1 +#elif __BYTE_ORDER__ == __ORDER_PDP_ENDIAN__ +#define PLUGIN_PDP_ENDIAN 1 +#endif +#else +/* Older GCC releases (<4.6.0) can make detection from glibc macros. */ +#if defined(__GLIBC__) || defined(__GNU_LIBRARY__) || defined(__ANDROID__) +#include <endian.h> +#ifdef __BYTE_ORDER +#if __BYTE_ORDER == __LITTLE_ENDIAN +#define PLUGIN_LITTLE_ENDIAN 1 +#elif __BYTE_ORDER == __BIG_ENDIAN +#define PLUGIN_BIG_ENDIAN 1 +#endif +#endif +#endif +/* Include all necessary header files based on target. */ +#if defined(__SVR4) && defined(__sun) +#include <sys/byteorder.h> +#endif +#if defined(__FreeBSD__) || defined(__NetBSD__) || \ + defined(__DragonFly__) || defined(__minix) +#include <sys/endian.h> +#endif +#if defined(__OpenBSD__) +#include <machine/endian.h> +#endif +/* Detect endianess based on _BYTE_ORDER. */ +#ifdef _BYTE_ORDER +#if _BYTE_ORDER == _LITTLE_ENDIAN +#define PLUGIN_LITTLE_ENDIAN 1 +#elif _BYTE_ORDER == _BIG_ENDIAN +#define PLUGIN_BIG_ENDIAN 1 +#endif +#endif +/* Detect based on _WIN32. */ +#if defined(_WIN32) +#define PLUGIN_LITTLE_ENDIAN 1 +#endif +/* Detect based on __BIG_ENDIAN__ and __LITTLE_ENDIAN__ */ +#ifdef __LITTLE_ENDIAN__ +#define PLUGIN_LITTLE_ENDIAN 1 +#endif +#ifdef __BIG_ENDIAN__ +#define PLUGIN_BIG_ENDIAN 1 +#endif +#endif + #ifdef __cplusplus extern "C" { @@ -87,7 +141,26 @@ { char *name; char *version; - int def; + /* This is for compatibility with older ABIs. The older ABI defined + only 'def' field. */ +#if PLUGIN_BIG_ENDIAN == 1 + char unused; + char section_kind; + char symbol_type; + char def; +#elif PLUGIN_LITTLE_ENDIAN == 1 + char def; + char symbol_type; + char section_kind; + char unused; +#elif PLUGIN_PDP_ENDIAN == 1 + char symbol_type; + char def; + char unused; + char section_kind; +#else +#error "Could not detect architecture endianess" +#endif int visibility; uint64_t size; char *comdat_key; @@ -123,6 +196,21 @@ LDPV_HIDDEN }; +/* The type of the symbol. */ + +enum ld_plugin_symbol_type +{ + LDST_UNKNOWN, + LDST_FUNCTION, + LDST_VARIABLE +}; + +enum ld_plugin_symbol_section_kind +{ + LDSSK_DEFAULT, + LDSSK_BSS +}; + /* How a symbol is resolved. */ enum ld_plugin_symbol_resolution @@ -431,7 +519,8 @@ LDPT_GET_INPUT_SECTION_ALIGNMENT = 29, LDPT_GET_INPUT_SECTION_SIZE = 30, LDPT_REGISTER_NEW_INPUT_HOOK = 31, - LDPT_GET_WRAP_SYMBOLS = 32 + LDPT_GET_WRAP_SYMBOLS = 32, + LDPT_ADD_SYMBOLS_V2 = 33 }; /* The plugin transfer vector. */ diff -Nru gdb-9.1/include/progress.h gdb-10.2/include/progress.h --- gdb-9.1/include/progress.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/progress.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Default definitions for progress macros. - Copyright (C) 1994-2019 Free Software Foundation, Inc. + Copyright (C) 1994-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/include/safe-ctype.h gdb-10.2/include/safe-ctype.h --- gdb-9.1/include/safe-ctype.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/safe-ctype.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* <ctype.h> replacement macros. - Copyright (C) 2000-2019 Free Software Foundation, Inc. + Copyright (C) 2000-2020 Free Software Foundation, Inc. Contributed by Zack Weinberg <zackw@stanford.edu>. This file is part of the libiberty library. diff -Nru gdb-9.1/include/sha1.h gdb-10.2/include/sha1.h --- gdb-9.1/include/sha1.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/sha1.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Declarations of functions and data types used for SHA1 sum library functions. - Copyright (C) 2000-2019 Free Software Foundation, Inc. + Copyright (C) 2000-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the diff -Nru gdb-9.1/include/simple-object.h gdb-10.2/include/simple-object.h --- gdb-9.1/include/simple-object.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/simple-object.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* simple-object.h -- simple routines to read and write object files - Copyright (C) 2010-2019 Free Software Foundation, Inc. + Copyright (C) 2010-2020 Free Software Foundation, Inc. Written by Ian Lance Taylor, Google. This program is free software; you can redistribute it and/or modify it diff -Nru gdb-9.1/include/som/aout.h gdb-10.2/include/som/aout.h --- gdb-9.1/include/som/aout.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/som/aout.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* SOM a.out definitions for BFD. - Copyright (C) 2010-2019 Free Software Foundation, Inc. + Copyright (C) 2010-2020 Free Software Foundation, Inc. Contributed by Tristan Gingold <gingold@adacore.com>, AdaCore. This file is part of BFD, the Binary File Descriptor library. @@ -86,7 +86,7 @@ #define COPYRIGHT_AUX_ID 9 /* Aux id flags. */ -#define SOM_AUX_ID_MANDATORY (1 << 31) +#define SOM_AUX_ID_MANDATORY (1u << 31) #define SOM_AUX_ID_COPY (1 << 30) #define SOM_AUX_ID_APPEND (1 << 29) #define SOM_AUX_ID_IGNORE (1 << 28) @@ -134,7 +134,7 @@ unsigned char init_pointer_quantity[4]; }; -#define SOM_SPACE_IS_LOADABLE (1 << 31) +#define SOM_SPACE_IS_LOADABLE (1u << 31) #define SOM_SPACE_IS_DEFINED (1 << 30) #define SOM_SPACE_IS_PRIVATE (1 << 29) #define SOM_SPACE_HAS_INTERMEDIATE_CODE (1 << 28) @@ -157,22 +157,22 @@ }; #define SOM_SUBSPACE_ACCESS_CONTROL_BITS_SH 25 -#define SOM_SUBSPACE_ACCESS_CONTROL_BITS_MASK 0x7f -#define SOM_SUBSPACE_MEMORY_RESIDENT (1 << 24) -#define SOM_SUBSPACE_DUP_COMMON (1 << 23) -#define SOM_SUBSPACE_IS_COMMON (1 << 22) -#define SOM_SUBSPACE_IS_LOADABLE (1 << 21) +#define SOM_SUBSPACE_ACCESS_CONTROL_BITS_MASK 0x7fU +#define SOM_SUBSPACE_MEMORY_RESIDENT (1U << 24) +#define SOM_SUBSPACE_DUP_COMMON (1U << 23) +#define SOM_SUBSPACE_IS_COMMON (1U << 22) +#define SOM_SUBSPACE_IS_LOADABLE (1U << 21) #define SOM_SUBSPACE_QUADRANT_SH 19 -#define SOM_SUBSPACE_QUADRANT_MASK 0x3 -#define SOM_SUBSPACE_INITIALLY_FROZEN (1 << 18) -#define SOM_SUBSPACE_IS_FIRST (1 << 17) -#define SOM_SUBSPACE_CODE_ONLY (1 << 16) +#define SOM_SUBSPACE_QUADRANT_MASK 0x3U +#define SOM_SUBSPACE_INITIALLY_FROZEN (1U << 18) +#define SOM_SUBSPACE_IS_FIRST (1U << 17) +#define SOM_SUBSPACE_CODE_ONLY (1U << 16) #define SOM_SUBSPACE_SORT_KEY_SH 8 -#define SOM_SUBSPACE_SORT_KEY_MASK 0xff -#define SOM_SUBSPACE_REPLICATE_INIT (1 << 7) -#define SOM_SUBSPACE_CONTINUATION (1 << 6) -#define SOM_SUBSPACE_IS_TSPECIFIC (1 << 5) -#define SOM_SUBSPACE_IS_COMDAT (1 << 4) +#define SOM_SUBSPACE_SORT_KEY_MASK 0xffU +#define SOM_SUBSPACE_REPLICATE_INIT (1U << 7) +#define SOM_SUBSPACE_CONTINUATION (1U << 6) +#define SOM_SUBSPACE_IS_TSPECIFIC (1U << 5) +#define SOM_SUBSPACE_IS_COMDAT (1U << 4) struct som_external_compilation_unit { @@ -195,7 +195,7 @@ }; /* Flags fields. */ -#define SOM_SYMBOL_HIDDEN (1 << 31) +#define SOM_SYMBOL_HIDDEN (1u << 31) #define SOM_SYMBOL_SECONDARY_DEF (1 << 30) #define SOM_SYMBOL_TYPE_SH 24 #define SOM_SYMBOL_TYPE_MASK 0x3f @@ -214,7 +214,7 @@ #define SOM_SYMBOL_ARG_RELOC_MASK 0x3ff /* Info fields. */ -#define SOM_SYMBOL_HAS_LONG_RETURN (1 << 31) +#define SOM_SYMBOL_HAS_LONG_RETURN (1u << 31) #define SOM_SYMBOL_NO_RELOCATION (1 << 30) #define SOM_SYMBOL_IS_COMDAT (1 << 29) #define SOM_SYMBOL_SYMBOL_INFO_SH 0 diff -Nru gdb-9.1/include/som/clock.h gdb-10.2/include/som/clock.h --- gdb-9.1/include/som/clock.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/som/clock.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* SOM clock definition for BFD. - Copyright (C) 2010-2019 Free Software Foundation, Inc. + Copyright (C) 2010-2020 Free Software Foundation, Inc. Contributed by Tristan Gingold <gingold@adacore.com>, AdaCore. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/som/internal.h gdb-10.2/include/som/internal.h --- gdb-9.1/include/som/internal.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/som/internal.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* SOM internal definitions for BFD. - Copyright (C) 2010-2019 Free Software Foundation, Inc. + Copyright (C) 2010-2020 Free Software Foundation, Inc. Contributed by Tristan Gingold <gingold@adacore.com>, AdaCore. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/som/lst.h gdb-10.2/include/som/lst.h --- gdb-9.1/include/som/lst.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/som/lst.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* SOM lst definitions for BFD. - Copyright (C) 2010-2019 Free Software Foundation, Inc. + Copyright (C) 2010-2020 Free Software Foundation, Inc. Contributed by Tristan Gingold <gingold@adacore.com>, AdaCore. This file is part of BFD, the Binary File Descriptor library. @@ -69,7 +69,7 @@ }; /* Fields of flags. */ -#define LST_SYMBOL_HIDDEN (1 << 31) +#define LST_SYMBOL_HIDDEN (1u << 31) #define LST_SYMBOL_SECONDARY_DEF (1 << 30) #define LST_SYMBOL_SYMBOL_TYPE_SH 24 #define LST_SYMBOL_SYMBOL_SCOPE_SH 20 diff -Nru gdb-9.1/include/som/reloc.h gdb-10.2/include/som/reloc.h --- gdb-9.1/include/som/reloc.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/som/reloc.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* SOM relocation definitions for BFD. - Copyright (C) 2010-2019 Free Software Foundation, Inc. + Copyright (C) 2010-2020 Free Software Foundation, Inc. Contributed by Tristan Gingold <gingold@adacore.com>, AdaCore. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/sort.h gdb-10.2/include/sort.h --- gdb-9.1/include/sort.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/sort.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Sorting algorithms. - Copyright (C) 2000-2019 Free Software Foundation, Inc. + Copyright (C) 2000-2020 Free Software Foundation, Inc. Contributed by Mark Mitchell <mark@codesourcery.com>. This file is part of GCC. diff -Nru gdb-9.1/include/splay-tree.h gdb-10.2/include/splay-tree.h --- gdb-9.1/include/splay-tree.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/splay-tree.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* A splay-tree datatype. - Copyright (C) 1998-2019 Free Software Foundation, Inc. + Copyright (C) 1998-2020 Free Software Foundation, Inc. Contributed by Mark Mitchell (mark@markmitchell.com). This file is part of GCC. diff -Nru gdb-9.1/include/symcat.h gdb-10.2/include/symcat.h --- gdb-9.1/include/symcat.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/symcat.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Symbol concatenation utilities. - Copyright (C) 1998-2019 Free Software Foundation, Inc. + Copyright (C) 1998-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/include/timeval-utils.h gdb-10.2/include/timeval-utils.h --- gdb-9.1/include/timeval-utils.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/timeval-utils.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Basic struct timeval utilities. - Copyright (C) 2011-2019 Free Software Foundation, Inc. + Copyright (C) 2011-2020 Free Software Foundation, Inc. This file is part of the libiberty library. Libiberty is free software; you can redistribute it and/or diff -Nru gdb-9.1/include/vms/dcx.h gdb-10.2/include/vms/dcx.h --- gdb-9.1/include/vms/dcx.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/vms/dcx.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Alpha VMS external format for DeCompression. - Copyright (C) 2010-2019 Free Software Foundation, Inc. + Copyright (C) 2010-2020 Free Software Foundation, Inc. Written by Tristan Gingold <gingold@adacore.com>, AdaCore. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/vms/dmt.h gdb-10.2/include/vms/dmt.h --- gdb-9.1/include/vms/dmt.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/vms/dmt.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Alpha VMS external format of Debug Module Table. - Copyright (C) 2010-2019 Free Software Foundation, Inc. + Copyright (C) 2010-2020 Free Software Foundation, Inc. Written by Tristan Gingold <gingold@adacore.com>, AdaCore. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/vms/dsc.h gdb-10.2/include/vms/dsc.h --- gdb-9.1/include/vms/dsc.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/vms/dsc.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Alpha VMS external format of Descriptors. - Copyright (C) 2010-2019 Free Software Foundation, Inc. + Copyright (C) 2010-2020 Free Software Foundation, Inc. Written by Tristan Gingold <gingold@adacore.com>, AdaCore. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/vms/dst.h gdb-10.2/include/vms/dst.h --- gdb-9.1/include/vms/dst.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/vms/dst.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Alpha VMS external format of Debug Symbol Table. - Copyright (C) 2010-2019 Free Software Foundation, Inc. + Copyright (C) 2010-2020 Free Software Foundation, Inc. Written by Tristan Gingold <gingold@adacore.com>, AdaCore. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/vms/eeom.h gdb-10.2/include/vms/eeom.h --- gdb-9.1/include/vms/eeom.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/vms/eeom.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Alpha VMS external format of Extended End Of Module. - Copyright (C) 2010-2019 Free Software Foundation, Inc. + Copyright (C) 2010-2020 Free Software Foundation, Inc. Written by Tristan Gingold <gingold@adacore.com>, AdaCore. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/vms/egps.h gdb-10.2/include/vms/egps.h --- gdb-9.1/include/vms/egps.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/vms/egps.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Alpha VMS external format of Extended Program Section Definition. - Copyright (C) 2010-2019 Free Software Foundation, Inc. + Copyright (C) 2010-2020 Free Software Foundation, Inc. Written by Tristan Gingold <gingold@adacore.com>, AdaCore. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/vms/egsd.h gdb-10.2/include/vms/egsd.h --- gdb-9.1/include/vms/egsd.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/vms/egsd.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Alpha VMS external format of Extended Global Symbol Directory. - Copyright (C) 2010-2019 Free Software Foundation, Inc. + Copyright (C) 2010-2020 Free Software Foundation, Inc. Written by Tristan Gingold <gingold@adacore.com>, AdaCore. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/vms/egst.h gdb-10.2/include/vms/egst.h --- gdb-9.1/include/vms/egst.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/vms/egst.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Alpha VMS external format of Extended Global Symbol Definition. - Copyright (C) 2010-2019 Free Software Foundation, Inc. + Copyright (C) 2010-2020 Free Software Foundation, Inc. Written by Tristan Gingold <gingold@adacore.com>, AdaCore. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/vms/egsy.h gdb-10.2/include/vms/egsy.h --- gdb-9.1/include/vms/egsy.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/vms/egsy.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Alpha VMS external format of Extended Global Symbol. - Copyright (C) 2010-2019 Free Software Foundation, Inc. + Copyright (C) 2010-2020 Free Software Foundation, Inc. Written by Tristan Gingold <gingold@adacore.com>, AdaCore. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/vms/eiaf.h gdb-10.2/include/vms/eiaf.h --- gdb-9.1/include/vms/eiaf.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/vms/eiaf.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Alpha VMS external format of Extended Image Activator Fixup section. - Copyright (C) 2010-2019 Free Software Foundation, Inc. + Copyright (C) 2010-2020 Free Software Foundation, Inc. Written by Tristan Gingold <gingold@adacore.com>, AdaCore. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/vms/eicp.h gdb-10.2/include/vms/eicp.h --- gdb-9.1/include/vms/eicp.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/vms/eicp.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Alpha VMS external format of Extended Image section Change Protection. - Copyright (C) 2010-2019 Free Software Foundation, Inc. + Copyright (C) 2010-2020 Free Software Foundation, Inc. Written by Tristan Gingold <gingold@adacore.com>, AdaCore. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/vms/eidc.h gdb-10.2/include/vms/eidc.h --- gdb-9.1/include/vms/eidc.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/vms/eidc.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Alpha VMS external format of Ident Consistency check. - Copyright (C) 2010-2019 Free Software Foundation, Inc. + Copyright (C) 2010-2020 Free Software Foundation, Inc. Written by Tristan Gingold <gingold@adacore.com>, AdaCore. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/vms/eiha.h gdb-10.2/include/vms/eiha.h --- gdb-9.1/include/vms/eiha.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/vms/eiha.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Alpha VMS external format of Extended Image Activation. - Copyright (C) 2010-2019 Free Software Foundation, Inc. + Copyright (C) 2010-2020 Free Software Foundation, Inc. Written by Tristan Gingold <gingold@adacore.com>, AdaCore. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/vms/eihd.h gdb-10.2/include/vms/eihd.h --- gdb-9.1/include/vms/eihd.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/vms/eihd.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Alpha VMS external format of Extended Image Header. - Copyright (C) 2010-2019 Free Software Foundation, Inc. + Copyright (C) 2010-2020 Free Software Foundation, Inc. Written by Tristan Gingold <gingold@adacore.com>, AdaCore. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/vms/eihi.h gdb-10.2/include/vms/eihi.h --- gdb-9.1/include/vms/eihi.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/vms/eihi.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Alpha VMS external format of Extended Image Identification. - Copyright (C) 2010-2019 Free Software Foundation, Inc. + Copyright (C) 2010-2020 Free Software Foundation, Inc. Written by Tristan Gingold <gingold@adacore.com>, AdaCore. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/vms/eihs.h gdb-10.2/include/vms/eihs.h --- gdb-9.1/include/vms/eihs.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/vms/eihs.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Alpha VMS external format of Extended Image Symbols and debug table. - Copyright (C) 2010-2019 Free Software Foundation, Inc. + Copyright (C) 2010-2020 Free Software Foundation, Inc. Written by Tristan Gingold <gingold@adacore.com>, AdaCore. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/vms/eihvn.h gdb-10.2/include/vms/eihvn.h --- gdb-9.1/include/vms/eihvn.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/vms/eihvn.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Alpha VMS external format of Extended Image Header Version. - Copyright (C) 2010-2019 Free Software Foundation, Inc. + Copyright (C) 2010-2020 Free Software Foundation, Inc. Written by Tristan Gingold <gingold@adacore.com>, AdaCore. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/vms/eisd.h gdb-10.2/include/vms/eisd.h --- gdb-9.1/include/vms/eisd.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/vms/eisd.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Alpha VMS external format of Extended Image Section Descriptor. - Copyright (C) 2010-2019 Free Software Foundation, Inc. + Copyright (C) 2010-2020 Free Software Foundation, Inc. Written by Tristan Gingold <gingold@adacore.com>, AdaCore. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/vms/emh.h gdb-10.2/include/vms/emh.h --- gdb-9.1/include/vms/emh.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/vms/emh.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Alpha VMS external format of Extended Module Header. - Copyright (C) 2010-2019 Free Software Foundation, Inc. + Copyright (C) 2010-2020 Free Software Foundation, Inc. Written by Tristan Gingold <gingold@adacore.com>, AdaCore. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/vms/eobjrec.h gdb-10.2/include/vms/eobjrec.h --- gdb-9.1/include/vms/eobjrec.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/vms/eobjrec.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Alpha VMS external format of Extended Object Records. - Copyright (C) 2010-2019 Free Software Foundation, Inc. + Copyright (C) 2010-2020 Free Software Foundation, Inc. Written by Tristan Gingold <gingold@adacore.com>, AdaCore. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/vms/esdf.h gdb-10.2/include/vms/esdf.h --- gdb-9.1/include/vms/esdf.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/vms/esdf.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Alpha VMS external format of Extended GSD Global Symbol Definition. - Copyright (C) 2010-2019 Free Software Foundation, Inc. + Copyright (C) 2010-2020 Free Software Foundation, Inc. Written by Tristan Gingold <gingold@adacore.com>, AdaCore. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/vms/esdfm.h gdb-10.2/include/vms/esdfm.h --- gdb-9.1/include/vms/esdfm.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/vms/esdfm.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Alpha VMS external format of Extended Symbol Definition for version Mask. - Copyright (C) 2010-2019 Free Software Foundation, Inc. + Copyright (C) 2010-2020 Free Software Foundation, Inc. Written by Tristan Gingold <gingold@adacore.com>, AdaCore. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/vms/esdfv.h gdb-10.2/include/vms/esdfv.h --- gdb-9.1/include/vms/esdfv.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/vms/esdfv.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Alpha VMS external format of Extended Symbol Def for Vectored symbols. - Copyright (C) 2010-2019 Free Software Foundation, Inc. + Copyright (C) 2010-2020 Free Software Foundation, Inc. Written by Tristan Gingold <gingold@adacore.com>, AdaCore. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/vms/esgps.h gdb-10.2/include/vms/esgps.h --- gdb-9.1/include/vms/esgps.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/vms/esgps.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Alpha VMS external format of Extended Shared Program Section Definition. - Copyright (C) 2010-2019 Free Software Foundation, Inc. + Copyright (C) 2010-2020 Free Software Foundation, Inc. Written by Tristan Gingold <gingold@adacore.com>, AdaCore. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/vms/esrf.h gdb-10.2/include/vms/esrf.h --- gdb-9.1/include/vms/esrf.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/vms/esrf.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Alpha VMS external format of Extended GSD Global Symbol Reference. - Copyright (C) 2010-2019 Free Software Foundation, Inc. + Copyright (C) 2010-2020 Free Software Foundation, Inc. Written by Tristan Gingold <gingold@adacore.com>, AdaCore. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/vms/etir.h gdb-10.2/include/vms/etir.h --- gdb-9.1/include/vms/etir.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/vms/etir.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Alpha VMS external format of Extended Text Information and Relocation. - Copyright (C) 2010-2019 Free Software Foundation, Inc. + Copyright (C) 2010-2020 Free Software Foundation, Inc. Written by Tristan Gingold <gingold@adacore.com>, AdaCore. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/vms/internal.h gdb-10.2/include/vms/internal.h --- gdb-9.1/include/vms/internal.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/vms/internal.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Alpha VMS internal format. - Copyright (C) 2010-2019 Free Software Foundation, Inc. + Copyright (C) 2010-2020 Free Software Foundation, Inc. Written by Tristan Gingold <gingold@adacore.com>, AdaCore. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/vms/lbr.h gdb-10.2/include/vms/lbr.h --- gdb-9.1/include/vms/lbr.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/vms/lbr.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Alpha VMS external format of Libraries. - Copyright (C) 2010-2019 Free Software Foundation, Inc. + Copyright (C) 2010-2020 Free Software Foundation, Inc. Written by Tristan Gingold <gingold@adacore.com>, AdaCore. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/vms/prt.h gdb-10.2/include/vms/prt.h --- gdb-9.1/include/vms/prt.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/vms/prt.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Alpha VMS external format of Protection values. - Copyright (C) 2010-2019 Free Software Foundation, Inc. + Copyright (C) 2010-2020 Free Software Foundation, Inc. Written by Tristan Gingold <gingold@adacore.com>, AdaCore. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/vms/shl.h gdb-10.2/include/vms/shl.h --- gdb-9.1/include/vms/shl.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/vms/shl.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Alpha VMS external format of Shareable image List. - Copyright (C) 2010-2019 Free Software Foundation, Inc. + Copyright (C) 2010-2020 Free Software Foundation, Inc. Written by Tristan Gingold <gingold@adacore.com>, AdaCore. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/vtv-change-permission.h gdb-10.2/include/vtv-change-permission.h --- gdb-9.1/include/vtv-change-permission.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/vtv-change-permission.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2013-2019 Free Software Foundation, Inc. +/* Copyright (C) 2013-2020 Free Software Foundation, Inc. This file is part of GCC. diff -Nru gdb-9.1/include/xregex2.h gdb-10.2/include/xregex2.h --- gdb-9.1/include/xregex2.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/xregex2.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,7 +1,7 @@ /* Definitions for data structures and routines for the regular expression library, version 0.12. - Copyright (C) 1985-2019 Free Software Foundation, Inc. + Copyright (C) 1985-2020 Free Software Foundation, Inc. This file is part of the GNU C Library. Its master source is NOT part of the C library, however. The master source lives in /gd/gnu/lib. diff -Nru gdb-9.1/include/xtensa-config.h gdb-10.2/include/xtensa-config.h --- gdb-9.1/include/xtensa-config.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/xtensa-config.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Xtensa configuration settings. - Copyright (C) 2001-2019 Free Software Foundation, Inc. + Copyright (C) 2001-2020 Free Software Foundation, Inc. Contributed by Bob Wilson (bob.wilson@acm.org) at Tensilica. This program is free software; you can redistribute it and/or modify diff -Nru gdb-9.1/include/xtensa-isa.h gdb-10.2/include/xtensa-isa.h --- gdb-9.1/include/xtensa-isa.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/xtensa-isa.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Interface definition for configurable Xtensa ISA support. - Copyright (C) 2003-2019 Free Software Foundation, Inc. + Copyright (C) 2003-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/include/xtensa-isa-internal.h gdb-10.2/include/xtensa-isa-internal.h --- gdb-9.1/include/xtensa-isa-internal.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/include/xtensa-isa-internal.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Internal definitions for configurable Xtensa ISA support. - Copyright (C) 2003-2019 Free Software Foundation, Inc. + Copyright (C) 2003-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/intl/aclocal.m4 gdb-10.2/intl/aclocal.m4 --- gdb-9.1/intl/aclocal.m4 2019-01-26 06:13:46.000000000 +0000 +++ gdb-10.2/intl/aclocal.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ -# generated automatically by aclocal 1.16.1 -*- Autoconf -*- +# generated automatically by aclocal 1.15.1 -*- Autoconf -*- -# Copyright (C) 1996-2018 Free Software Foundation, Inc. +# Copyright (C) 1996-2017 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff -Nru gdb-9.1/intl/ChangeLog gdb-10.2/intl/ChangeLog --- gdb-9.1/intl/ChangeLog 2019-01-26 06:13:46.000000000 +0000 +++ gdb-10.2/intl/ChangeLog 2021-04-25 04:06:26.000000000 +0000 @@ -1,3 +1,11 @@ +2020-02-20 Alan Modra <amodra@gmail.com> + + * aclocal.m4: Regenerate. + +2020-02-19 Andrew Burgess <andrew.burgess@embecosm.com> + + * configure: Regenerate. + 2019-01-19 Nick Clifton <nickc@redhat.com> * aclocal.m4: Regenerate. diff -Nru gdb-9.1/intl/configure gdb-10.2/intl/configure --- gdb-9.1/intl/configure 2018-12-13 19:20:00.000000000 +0000 +++ gdb-10.2/intl/configure 2021-04-25 04:06:26.000000000 +0000 @@ -719,8 +719,10 @@ with_gnu_ld enable_rpath with_libiconv_prefix +with_libiconv_type with_included_gettext with_libintl_prefix +with_libintl_type enable_maintainer_mode ' ac_precious_vars='build_alias @@ -1353,9 +1355,11 @@ --with-gnu-ld assume the C compiler uses GNU ld default=no --with-libiconv-prefix[=DIR] search for libiconv in DIR/include and DIR/lib --without-libiconv-prefix don't search for libiconv in includedir and libdir + --with-libiconv-type=TYPE type of library to search for (auto/static/shared) --with-included-gettext use the GNU gettext library included here --with-libintl-prefix[=DIR] search for libintl in DIR/include and DIR/lib --without-libintl-prefix don't search for libintl in includedir and libdir + --with-libintl-type=TYPE type of library to search for (auto/static/shared) Some influential environment variables: CC C compiler command @@ -5195,6 +5199,16 @@ fi + +# Check whether --with-libiconv-type was given. +if test "${with_libiconv_type+set}" = set; then : + withval=$with_libiconv_type; with_libiconv_type=$withval +else + with_libiconv_type=auto +fi + + lib_type=`eval echo \$with_libiconv_type` + LIBICONV= LTLIBICONV= INCICONV= @@ -5232,13 +5246,13 @@ found_so= found_a= if test $use_additional = yes; then - if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then + if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext" && test x$lib_type != xstatic; then found_dir="$additional_libdir" found_so="$additional_libdir/lib$name.$shlibext" if test -f "$additional_libdir/lib$name.la"; then found_la="$additional_libdir/lib$name.la" fi - else + elif test x$lib_type != xshared; then if test -f "$additional_libdir/lib$name.$libext"; then found_dir="$additional_libdir" found_a="$additional_libdir/lib$name.$libext" @@ -5262,13 +5276,13 @@ case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` - if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then + if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext" && test x$lib_type != xstatic; then found_dir="$dir" found_so="$dir/lib$name.$shlibext" if test -f "$dir/lib$name.la"; then found_la="$dir/lib$name.la" fi - else + elif test x$lib_type != xshared; then if test -f "$dir/lib$name.$libext"; then found_dir="$dir" found_a="$dir/lib$name.$libext" @@ -5496,8 +5510,13 @@ done fi else - LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" - LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-l$name" + if test "x$lib_type" = "xauto" || test "x$lib_type" = "xshared"; then + LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" + LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-l$name" + else + LIBICONV="${LIBICONV}${LIBICONV:+ }-l:lib$name.$libext" + LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-l:lib$name.$libext" + fi fi fi fi @@ -6026,6 +6045,16 @@ fi + +# Check whether --with-libintl-type was given. +if test "${with_libintl_type+set}" = set; then : + withval=$with_libintl_type; with_libintl_type=$withval +else + with_libintl_type=auto +fi + + lib_type=`eval echo \$with_libintl_type` + LIBINTL= LTLIBINTL= INCINTL= @@ -6063,13 +6092,13 @@ found_so= found_a= if test $use_additional = yes; then - if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then + if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext" && test x$lib_type != xstatic; then found_dir="$additional_libdir" found_so="$additional_libdir/lib$name.$shlibext" if test -f "$additional_libdir/lib$name.la"; then found_la="$additional_libdir/lib$name.la" fi - else + elif test x$lib_type != xshared; then if test -f "$additional_libdir/lib$name.$libext"; then found_dir="$additional_libdir" found_a="$additional_libdir/lib$name.$libext" @@ -6093,13 +6122,13 @@ case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` - if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then + if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext" && test x$lib_type != xstatic; then found_dir="$dir" found_so="$dir/lib$name.$shlibext" if test -f "$dir/lib$name.la"; then found_la="$dir/lib$name.la" fi - else + elif test x$lib_type != xshared; then if test -f "$dir/lib$name.$libext"; then found_dir="$dir" found_a="$dir/lib$name.$libext" @@ -6327,8 +6356,13 @@ done fi else - LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name" - LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-l$name" + if test "x$lib_type" = "xauto" || test "x$lib_type" = "xshared"; then + LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name" + LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-l$name" + else + LIBINTL="${LIBINTL}${LIBINTL:+ }-l:lib$name.$libext" + LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-l:lib$name.$libext" + fi fi fi fi diff -Nru gdb-9.1/libctf/aclocal.m4 gdb-10.2/libctf/aclocal.m4 --- gdb-9.1/libctf/aclocal.m4 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/libctf/aclocal.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1230,6 +1230,8 @@ m4_include([../bfd/acinclude.m4]) m4_include([../config/acx.m4]) m4_include([../config/depstand.m4]) +m4_include([../config/enable.m4]) +m4_include([../config/gettext-sister.m4]) m4_include([../config/lead-dot.m4]) m4_include([../config/override.m4]) m4_include([../config/warnings.m4]) diff -Nru gdb-9.1/libctf/ChangeLog gdb-10.2/libctf/ChangeLog --- gdb-9.1/libctf/ChangeLog 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libctf/ChangeLog 2021-04-25 04:06:26.000000000 +0000 @@ -1,19 +1,734 @@ -2020-02-01 Eli Zaretskii <eliz@gnu.org> +2020-08-27 Nick Alcock <nick.alcock@oracle.com> + + * ctf-subr.c (open_errors): New list. + (ctf_err_warn): Calls with NULL fp append to open_errors. Add err + parameter, and use it to decorate the debug stream with errmsgs. + (ctf_err_warn_to_open): Splice errors from a CTF dict into the + open_errors. + (ctf_errwarning_next): Calls with NULL fp report from open_errors. + New err param to report iteration errors (including end-of-iteration) + when fp is NULL. + (ctf_assert_fail_internal): Adjust ctf_err_warn call for new err + parameter: gettextize. + * ctf-impl.h (ctfo_get_vbytes): Add ctf_file_t parameter. + (LCTF_VBYTES): Adjust. + (ctf_err_warn_to_open): New. + (ctf_err_warn): Adjust. + (ctf_bundle): Used in only one place: move... + * ctf-create.c: ... here. + (enumcmp): Use ctf_err_warn, not ctf_dprintf, passing the err number + down as needed. Don't emit the errmsg. Gettextize. + (membcmp): Likewise. + (ctf_add_type_internal): Likewise. + (ctf_write_mem): Likewise. + (ctf_compress_write): Likewise. Report errors writing the header or + body. + (ctf_write): Likewise. + * ctf-archive.c (ctf_arc_write_fd): Use ctf_err_warn, not + ctf_dprintf, and gettextize, as above. + (ctf_arc_write): Likewise. + (ctf_arc_bufopen): Likewise. + (ctf_arc_open_internal): Likewise. + * ctf-labels.c (ctf_label_iter): Likewise. + * ctf-open-bfd.c (ctf_bfdclose): Likewise. + (ctf_bfdopen): Likewise. + (ctf_bfdopen_ctfsect): Likewise. + (ctf_fdopen): Likewise. + * ctf-string.c (ctf_str_write_strtab): Likewise. + * ctf-types.c (ctf_type_resolve): Likewise. + * ctf-open.c (get_vbytes_common): Likewise. Pass down the ctf dict. + (get_vbytes_v1): Pass down the ctf dict. + (get_vbytes_v2): Likewise. + (flip_ctf): Likewise. + (flip_types): Likewise. Use ctf_err_warn, not ctf_dprintf, and + gettextize, as above. + (upgrade_types_v1): Adjust calls. + (init_types): Use ctf_err_warn, not ctf_dprintf, as above. + (ctf_bufopen_internal): Likewise. Adjust calls. Transplant errors + emitted into individual dicts into the open errors if this turns + out to be a failed open in the end. + * ctf-dump.c (ctf_dump_format_type): Adjust ctf_err_warn for new err + argument. Gettextize. Don't emit the errmsg. + (ctf_dump_funcs): Likewise. Collapse err label into its only case. + (ctf_dump_type): Likewise. + * ctf-link.c (ctf_create_per_cu): Adjust ctf_err_warn for new err + argument. Gettextize. Don't emit the errmsg. + (ctf_link_one_type): Likewise. + (ctf_link_lazy_open): Likewise. + (ctf_link_one_input_archive): Likewise. + (ctf_link_deduplicating_count_inputs): Likewise. + (ctf_link_deduplicating_open_inputs): Likewise. + (ctf_link_deduplicating_close_inputs): Likewise. + (ctf_link_deduplicating): Likewise. + (ctf_link): Likewise. + (ctf_link_deduplicating_per_cu): Likewise. Add some missed + ctf_set_errnos to obscure error cases. + * ctf-dedup.c (ctf_dedup_rhash_type): Adjust ctf_err_warn for new + err argument. Gettextize. Don't emit the errmsg. + (ctf_dedup_populate_mappings): Likewise. + (ctf_dedup_detect_name_ambiguity): Likewise. + (ctf_dedup_init): Likewise. + (ctf_dedup_multiple_input_dicts): Likewise. + (ctf_dedup_conflictify_unshared): Likewise. + (ctf_dedup): Likewise. + (ctf_dedup_rwalk_one_output_mapping): Likewise. + (ctf_dedup_id_to_target): Likewise. + (ctf_dedup_emit_type): Likewise. + (ctf_dedup_emit_struct_members): Likewise. + (ctf_dedup_populate_type_mapping): Likewise. + (ctf_dedup_populate_type_mappings): Likewise. + (ctf_dedup_emit): Likewise. + (ctf_dedup_hash_type): Likewise. Fix a bit of messed-up error + status setting. + (ctf_dedup_rwalk_one_output_mapping): Likewise. Don't hide + unknown-type-kind messages (which signify file corruption). + +2020-08-27 Nick Alcock <nick.alcock@oracle.com> + + * configure.ac: Adjust package name to simply 'libctf': arbitrarily + declare this to be version 1.2.0. + * Makefile.am (AM_CPPFLAGS): Add @INCINTL@. + * Makefile.in: Regenerated. + * configure: Regenerated. + * ctf-intl.h: New file, lightly modified from opcodes/opintl.h. + * ctf-impl.h: Include it. + * ctf-error.r (_ctf_errlist_t): Mark strings as noop-translatable. + (ctf_errmsg): Actually translate them. + +2020-07-26 Eli Zaretskii <eliz@gnu.org> PR binutils/25155: * ctf-create.c (EOVERFLOW): If not defined by system header, redirect to ERANGE as a poor man's substitute. * ctf-subr.c (ENOTSUP): If not defined, use ENOSYS instead. +2020-07-22 Nick Alcock <nick.alcock@oracle.com> + + * ctf-create.c (ctf_dtd_insert): Add uintptr_t casts. + (ctf_dtd_delete): Likewise. + (ctf_dtd_lookup): Likewise. + (ctf_rollback): Likewise. + * ctf-hash.c (ctf_hash_lookup_type): Likewise. + * ctf-types.c (ctf_lookup_by_rawhash): Likewise. + +2020-07-22 Nick Alcock <nick.alcock@oracle.com> + + * ctf-lookup.c (ctf_lookup_by_name): Adjust. + +2020-07-22 Nick Alcock <nick.alcock@oracle.com> + + * ctf-archive.c (ctf_arc_bufopen): Endian-swap the archive magic + number if needed. + +2020-07-22 Nick Alcock <nick.alcock@oracle.com> + + * ctf-impl.h (ctf_list_splice): New. + * ctf-util.h (ctf_list_splice): Likewise. + * ctf-link.c (link_sort_inputs_cb_arg_t): Likewise. + (ctf_link_sort_inputs): Likewise. + (ctf_link_deduplicating_count_inputs): Likewise. + (ctf_link_deduplicating_open_inputs): Likewise. + (ctf_link_deduplicating_close_inputs): Likewise. + (ctf_link_deduplicating_variables): Likewise. + (ctf_link_deduplicating_per_cu): Likewise. + (ctf_link_deduplicating): Likewise. + (ctf_link): Call it. + +2020-07-22 Nick Alcock <nick.alcock@oracle.com> + + * ctf-link.c (ctf_link_one_input_archive_member): Check + CTF_LINK_OMIT_VARIABLES_SECTION. + +2020-07-22 Nick Alcock <nick.alcock@oracle.com> + + * ctf-impl.h (ctf_type_id_key): New, the key in the + cd_id_to_file_t. + (ctf_dedup): New, core deduplicator state. + (ctf_file_t) <ctf_dedup>: New. + <ctf_dedup_atoms>: New. + <ctf_dedup_atoms_alloc>: New. + (ctf_hash_type_id_key): New prototype. + (ctf_hash_eq_type_id_key): Likewise. + (ctf_dedup_atoms_init): Likewise. + * ctf-hash.c (ctf_hash_eq_type_id_key): New. + (ctf_dedup_atoms_init): Likewise. + * ctf-create.c (ctf_serialize): Adjusted. + (ctf_add_encoded): No longer static. + (ctf_add_reftype): Likewise. + * ctf-open.c (ctf_file_close): Destroy the + ctf_dedup_atoms_alloc. + * ctf-dedup.c: New file. + * ctf-decls.h [!HAVE_DECL_STPCPY]: Add prototype. + * configure.ac: Check for stpcpy. + * Makefile.am: Add it. + * Makefile.in: Regenerate. + * config.h.in: Regenerate. + * configure: Regenerate. + +2020-07-22 Nick Alcock <nick.alcock@oracle.com> + + * configure.ac: Add --enable-libctf-hash-debugging. + * aclocal.m4: Pull in enable.m4, for GCC_ENABLE. + * Makefile.in: Regenerated. + * configure: Likewise. + * config.h.in: Likewise. + * ctf-impl.h [ENABLE_LIBCTF_HASH_DEBUGGING] + (ctf_assert): Define to assert. + +2020-07-22 Nick Alcock <nick.alcock@oracle.com> + + * ctf-sha1.h: New, inline wrappers around sha1_init_ctx and + sha1_process_bytes. + * ctf-impl.h: Include it. + (ctf_sha1_init): New. + (ctf_sha1_add): Likewise. + (ctf_sha1_fini): Likewise. + * ctf-sha1.c: New, non-inline wrapper around sha1_finish_ctx + producing strings. + * Makefile.am: Add file. + * Makefile.in: Regenerate. + +2020-07-22 Nick Alcock <nick.alcock@oracle.com> + + * libctf.ver (ctf_link_set_variable_filter): Add. + * ctf-impl.h (ctf_file_t) <ctf_link_variable_filter>: New. + <ctf_link_variable_filter_arg>: Likewise. + * ctf-create.c (ctf_serialize): Adjust. + * ctf-link.c (ctf_link_set_variable_filter): New, set it. + (ctf_link_one_variable): Call it if set. + +2020-07-22 Nick Alcock <nick.alcock@oracle.com> + + * ctf-link.c (ctf_link_one_variable): Check the dst_type for + conflicts, not the source type. + +2020-07-22 Nick Alcock <nick.alcock@oracle.com> + + * ctf-impl.h (ctf_file_t): Improve comments. + <ctf_link_cu_mapping>: Split into... + <ctf_link_in_cu_mapping>: ... this... + <ctf_link_out_cu_mapping>: ... and this. + * ctf-create.c (ctf_serialize): Adjust. + * ctf-open.c (ctf_file_close): Likewise. + * ctf-link.c (ctf_create_per_cu): Look things up in the + in_cu_mapping instead of the cu_mapping. + (ctf_link_add_cu_mapping): The deduplicating link will define + what happens if many FROMs share a TO. + (ctf_link_add_cu_mapping): Create in_cu_mapping and + out_cu_mapping. Do not create ctf_link_outputs here any more, or + create per-CU dicts here: they are already created when needed. + (ctf_link_one_variable): Log a debug message if we skip a + variable due to its type being concealed in a CU-mapped link. + (This is probably too common a case to make into a warning.) + (ctf_link): Create empty per-CU dicts if requested. + +2020-07-22 Nick Alcock <nick.alcock@oracle.com> + + * ctf-link.c (ctf_link_write): Close the fd. + +2020-07-22 Nick Alcock <nick.alcock@oracle.com> + + * Makefile.am: Set -DNOBFD=1 in libctf-nobfd, and =0 elsewhere. + * Makefile.in: Regenerated. + * ctf-impl.h (ctf_link_input_name): New. + (ctf_file_t) <ctf_link_flags>: New. + * ctf-create.c (ctf_serialize): Adjust accordingly. + * ctf-link.c: Define ctf_open as weak when PIC. + (ctf_arc_close_thunk): Remove unnecessary thunk. + (ctf_file_close_thunk): Likewise. + (ctf_link_input_name): New. + (ctf_link_input_t): New value of the ctf_file_t.ctf_link_input. + (ctf_link_input_close): Adjust accordingly. + (ctf_link_add_ctf_internal): New, split from... + (ctf_link_add_ctf): ... here. Return error if lazy loading of + CTF is not possible. Change to just call... + (ctf_link_add): ... this new function. + (ctf_link_add_cu_mapping): Transition to ctf_err_warn. Drop the + ctf_file_close_thunk. + (ctf_link_in_member_cb_arg_t) <file_name> Rename to... + <in_file_name>: ... this. + <arcname>: Drop. + <share_mode>: Likewise (migrated to ctf_link_flags). + <done_main_member>: Rename to... + <done_parent>: ... this. + <main_input_fp>: Rename to... + <in_fp_parent>: ... this. + <cu_mapped>: New. + (ctf_link_one_type): Adjuwt accordingly. Transition to + ctf_err_warn, removing a TODO. + (ctf_link_one_variable): Note a case too common to warn about. + Report in the debug stream if a cu-mapped link prevents addition + of a conflicting variable. + (ctf_link_one_input_archive_member): Adjust. + (ctf_link_lazy_open): New, open a CTF archive for linking when + needed. + (ctf_link_close_one_input_archive): New, close it again. + (ctf_link_one_input_archive): Adjust for lazy opening, member + renames, and ctf_err_warn transition. Move the + empty_link_type_mapping call to... + (ctf_link): ... here. Adjut for renamings and thunk removal. + Don't spuriously fail if some input contains no CTF data. + (ctf_link_write): ctf_err_warn transition. + * libctf.ver: Remove not-yet-stable comment. + +2020-07-22 Nick Alcock <nick.alcock@oracle.com> + + * ctf-impl.h (ctf_strerror): Delete. + * ctf-subr.c (ctf_strerror): Likewise. + * ctf-error.c (ctf_errmsg): Stop using ctf_strerror: just use + strerror directly. + +2020-07-22 Nick Alcock <nick.alcock@oracle.com> + + * ctf-impl.c (ctf_file_t) <ctf_parent_unreffed>: New. + (ctf_import_unref): New. + * ctf-open.c (ctf_file_close) Drop the refcount all the way to + zero. Don't recurse back in if the refcount is already zero. + (ctf_import): Check ctf_parent_unreffed before deciding whether + to close a pre-existing parent. Set it to zero. + (ctf_import_unreffed): New, as above, setting + ctf_parent_unreffed to 1. + * ctf-create.c (ctf_serialize): Do not ctf_import into the new + child: use direct assignment, and set unreffed on the new and + old children. + * ctf-link.c (ctf_create_per_cu): Import the parent using + ctf_import_unreffed. + +2020-07-22 Nick Alcock <nick.alcock@oracle.com> + + * ctf-impl.h (ctf_link_type_mapping_key): Rename to... + (ctf_link_type_key): ... this, adjusting member prefixes to + match. + (ctf_hash_type_mapping_key): Rename to... + (ctf_hash_type_key): ... this. + (ctf_hash_eq_type_mapping_key): Rename to... + (ctf_hash_eq_type_key): ... this. + * ctf-hash.c (ctf_hash_type_mapping_key): Rename to... + (ctf_hash_type_key): ... this, and adjust for member name + changes. + (ctf_hash_eq_type_mapping_key): Rename to... + (ctf_hash_eq_type_key): ... this, and adjust for member name + changes. + * ctf-link.c (ctf_add_type_mapping): Adjust. Note the lack of + need for out-of-memory checking in this code. + (ctf_type_mapping): Adjust. + +2020-07-22 Nick Alcock <nick.alcock@oracle.com> + + configure.ac: Check for vasprintf. + configure: Regenerated. + config.h.in: Likewise. + +2020-07-22 Nick Alcock <nick.alcock@oracle.com> + + * ctf-archive.c (ctf_arc_bufopen): Fix message. + +2020-07-22 Nick Alcock <nick.alcock@oracle.com> + + * ctf-impl.h (struct ctf_archive_internal) <ctfi_free_strsect> + New. + * ctf-open-bfd.c (ctf_bfdopen_ctfsect): Explicitly open a strtab + if the input has no symtab, rather than dividing by + zero. Arrange to free it later via ctfi_free_ctfsect. + * ctf-archive.c (ctf_new_archive_internal): Do not + ctfi_free_strsect by default. + (ctf_arc_close): Possibly free it here. + +2020-07-22 Nick Alcock <nick.alcock@oracle.com> + + * ctf-dump.c (ctf_is_slice): Delete, unnecessary. + (ctf_dump_format_type): improve slice formatting. Always print + the type size, even of slices. + (ctf_dump_member): Print slices (-> bitfields) differently from + non-slices. Failure to format a type is not an OOM. + +2020-07-22 Nick Alcock <nick.alcock@oracle.com> + + * ctf-dump.c (ctf_dump_format_type): Emit a warning. + (ctf_dump_label): Swallow errors from ctf_dump_format_type. + (ctf_dump_objts): Likewise. + (ctf_dump_var): Likewise. + (ctf_dump_type): Do not emit a duplicate message. Move to + ctf_err_warning, and swallow all errors. + +2020-07-22 Nick Alcock <nick.alcock@oracle.com> + + * ctf-decl.c (ctf_decl_fini): Free the cd_buf. + (ctf_decl_buf): Once it escapes, don't try to free it later. + +2020-07-22 Nick Alcock <nick.alcock@oracle.com> + + * ctf-types.c (ctf_type_aname): Print arg types here... + * ctf-dump.c (ctf_dump_funcs): ... not here: but do substitute + in the type name here. + +2020-07-22 Nick Alcock <nick.alcock@oracle.com> + + * ctf-impl.h (ctf_assert): New. + (ctf_err_warning_t): Likewise. + (ctf_file_t) <ctf_errs_warnings>: Likewise. + (ctf_err_warn): New prototype. + (ctf_assert_fail_internal): Likewise. + * ctf-inlines.h (ctf_assert_internal): Likewise. + * ctf-open.c (ctf_file_close): Free ctf_errs_warnings. + * ctf-create.c (ctf_serialize): Copy it on serialization. + * ctf-subr.c (ctf_err_warn): New, add an error/warning. + (ctf_errwarning_next): New iterator, free and pass back + errors/warnings in succession. + * libctf.ver (ctf_errwarning_next): Add. + +2020-07-22 Egeyar Bagcioglu <egeyar.bagcioglu@oracle.com> + + * ctf-types.c (ctf_variable_iter): Fix error return. + +2020-07-22 Nick Alcock <nick.alcock@oracle.com> + + * ctf-open.c (ctf_bufopen_internal): Diagnose invalid flags. + +2020-07-22 Nick Alcock <nick.alcock@oracle.com> + + ctf-decls.h (ctf_qsort_compar_thunk): Fix arg passing. + +2020-07-22 Nick Alcock <nick.alcock@oracle.com> + + * ctf-impl.h (ctf_next_hkv_t): New, kv-pairs passed to + sorting functions. + (ctf_next_t) <u.ctn_sorted_hkv>: New, sorted kv-pairs for + ctf_dynhash_next_sorted. + <cu.ctn_h>: New, pointer to the dynhash under iteration. + <cu.ctn_s>: New, pointer to the dynset under iteration. + (ctf_hash_sort_f): Sorting function passed to... + (ctf_dynhash_next_sorted): ... this new function. + (ctf_dynhash_next): New. + (ctf_dynset_next): New. + * ctf-inlines.h (ctf_dynhash_cnext_sorted): New. + (ctf_dynhash_cnext): New. + (ctf_dynset_cnext): New. + * ctf-hash.c (ctf_dynhash_next_sorted): New. + (ctf_dynhash_next): New. + (ctf_dynset_next): New. + * ctf-util.c (ctf_next_destroy): Free the u.ctn_sorted_hkv if + needed. + (ctf_next_copy): Alloc-and-copy the u.ctn_sorted_hkv if needed. + +2020-07-22 Nick Alcock <nick.alcock@oracle.com> + + * ctf-impl.h (ctf_next): New. + (ctf_get_dict): New prototype. + * ctf-lookup.c (ctf_get_dict): New, split out of... + (ctf_lookup_by_id): ... here. + * ctf-util.c (ctf_next_create): New. + (ctf_next_destroy): New. + (ctf_next_copy): New. + * ctf-types.c (includes): Add <assert.h>. + (ctf_member_next): New. + (ctf_enum_next): New. + (ctf_type_iter): Document the lack of iteration over parent + types. + (ctf_type_next): New. + (ctf_variable_next): New. + * ctf-archive.c (ctf_archive_next): New. + * libctf.ver: Add new public functions. + +2020-07-22 Nick Alcock <nick.alcock@oracle.com> + + * libctf.ver (ctf_ref): New. + * ctf-open.c (ctf_ref): Implement it. + +2020-07-22 Nick Alcock <nick.alcock@oracle.com> + + * ctf-inlines.h (ctf_forwardable_kind): New. + * ctf-create.c (ctf_add_forward): Use it. + +2020-07-22 Nick Alcock <nick.alcock@oracle.com> + + * ctf-impl.h (ctf_get_ctt_size): Move definition from here... + * ctf-inlines.h (ctf_get_ctt_size): ... to here. + +2020-07-22 Nick Alcock <nick.alcock@oracle.com> + + * ctf-hash.c (ctf_dynset_eq_string): New. + (ctf_dynset_create): New. + (DYNSET_EMPTY_ENTRY_REPLACEMENT): New. + (DYNSET_DELETED_ENTRY_REPLACEMENT): New. + (key_to_internal): New. + (internal_to_key): New. + (ctf_dynset_insert): New. + (ctf_dynset_remove): New. + (ctf_dynset_destroy): New. + (ctf_dynset_lookup): New. + (ctf_dynset_exists): New. + (ctf_dynset_lookup_any): New. + (ctf_hash_insert_type): Coding style. + (ctf_hash_define_type): Likewise. + * ctf-impl.h (ctf_dynset_t): New. + (ctf_dynset_eq_string): New. + (ctf_dynset_create): New. + (ctf_dynset_insert): New. + (ctf_dynset_remove): New. + (ctf_dynset_destroy): New. + (ctf_dynset_lookup): New. + (ctf_dynset_exists): New. + (ctf_dynset_lookup_any): New. + * ctf-inlines.h (ctf_dynset_cinsert): New. + +2020-07-22 Nick Alcock <nick.alcock@oracle.com> + + * ctf-hash.c (ctf_helem_t) <key_free>: Remove. + <value_free>: Likewise. + <owner>: New. + (ctf_dynhash_item_free): Indirect through the owner. + (ctf_dynhash_create): Only pass in ctf_dynhash_item_free and + allocate space for the key_free and value_free fields fields + if necessary. + (ctf_hashtab_insert): Likewise. Fix OOM errno value. + (ctf_dynhash_insert): Only access ctf_hashtab's key_free and + value_free if they will exist. Set the slot's owner, but only + if it exists. + (ctf_dynhash_remove): Adjust. + +2020-07-22 Nick Alcock <nick.alcock@oracle.com> + + * ctf-hash.c (ctf_hashtab_insert): Free the key passed in if + there is a key-freeing function and the key already exists. + +2020-07-22 Nick Alcock <nick.alcock@oracle.com> + + * ctf-inlines.h: New file. + * ctf-impl.h: Include it. + (ctf_hash_iter_find_f): New typedef. + (ctf_dynhash_elements): New. + (ctf_dynhash_lookup_kv): New. + (ctf_dynhash_iter_find): New. + * ctf-hash.c (ctf_dynhash_lookup_kv): New. + (ctf_traverse_find_cb_arg_t): New. + (ctf_hashtab_traverse_find): New. + (ctf_dynhash_iter_find): New. + (ctf_dynhash_elements): New. + +2020-07-22 Nick Alcock <nick.alcock@oracle.com> + + * ctf-impl.h [!__GNUC__] (__extension__): Define to nothing. + +2020-07-22 Nick Alcock <nick.alcock@oracle.com> + + * ctf-archive.c (ctf_archive_count): New. + * libctf.ver: New public function. + +2020-07-22 Nick Alcock <nick.alcock@oracle.com> + + * ctf-types.c (ctf_member_count): New. + * libctf.ver: New public function. + +2020-07-22 Nick Alcock <nick.alcock@oracle.com> + + * ctf-types.c (ctf_type_kind_forwarded): New. + +2020-07-22 Nick Alcock <nick.alcock@oracle.com> + + * ctf-types.c (ctf_type_name_raw): New. + (ctf_type_aname_raw): Reimplement accordingly. + +2020-07-22 Nick Alcock <nick.alcock@oracle.com> + + * ctf-subr.c (ctf_dprintf): _libctf_debug is unlikely to be set. + +2020-07-22 Nick Alcock <nick.alcock@oracle.com> + + * ctf-impl.h (struct ctf_archive_internal) + <ctfi_unmap_on_close>: New. + (ctf_new_archive_internal): Adjust. + * ctf-archive.c (ctf_new_archive_internal): Likewise. + Initialize ctfi_unmap_on_close. Adjust error path. + (ctf_arc_bufopen): Adjust ctf_new_archive_internal call + (unmap_on_close is 0). + (ctf_arc_close): Only unmap if ctfi_unmap_on_close. + * ctf-open-bfd.c (ctf_fdopen): Adjust. + +2020-07-22 Nick Alcock <nick.alcock@oracle.com> + + * ctf-types.c (ctf_type_aname): Return ECTF_CORRUPT if + ints, floats or typedefs have no name. Fix comment typo. + +2020-07-22 Nick Alcock <nick.alcock@oracle.com> + + * ctf-create.c (ctf_add_slice): Support slices of any kind that + resolves to an integral type. + * ctf-types.c (ctf_type_encoding): Resolve the type before + fishing its encoding out. + +2020-07-22 Nick Alcock <nick.alcock@oracle.com> + + * ctf-create.c (ctf_create): Mark dirty. + +2020-07-22 Nick Alcock <nick.alcock@oracle.com> + + * ctf-create.c (membcmp) Skip nameless members. + +2020-07-22 Nick Alcock <nick.alcock@oracle.com> + + * ctf-create.c (ctf_add_member_offset): Support names of "" + as if they were the null pointer. + +2020-07-22 Nick Alcock <nick.alcock@oracle.com> + + * ctf-open.c (init_types): Remove typeless CTF_K_FORWARD + special-casing. + +2020-07-22 Nick Alcock <nick.alcock@oracle.com> + + * ctf-types.c (ctf_type_reference): Add support for dynamic slices. + +2020-07-22 Nick Alcock <nick.alcock@oracle.com> + + * ctf-create.c (ctf_serialize): Add cast. + (ctf_add_slice): Likewise. + +2020-07-22 Nick Alcock <nick.alcock@oracle.com> + + * ctf-impl.h (ctf_dtdef_t) <dtu_argv>: Fix type. + * ctf-create.c (ctf_add_function): Check for unimplemented type + and populate at the same time. Populate one-by-one, not via + memcpy. + (ctf_serialize): Remove unnecessary cast. + * ctf-types.c (ctf_func_type_info): Likewise. + (ctf_func_type_args): Likewise. Fix comment typo. + +2020-07-22 Nick Alcock <nick.alcock@oracle.com> + + * ctf-create.c (ctf_add_reftype): Support refs to type zero. + (ctf_add_array): Support array contents of type zero. + (ctf_add_function): Support arguments and return types of + type zero. + (ctf_add_typedef): Support typedefs to type zero. + (ctf_add_member_offset): Support members of type zero, + unless added at unspecified (naturally-aligned) offset. + +2020-07-22 Nick Alcock <nick.alcock@oracle.com> + + * ctf-error.c: Include <stddef.h>, for offsetof. + (_ctf_errlist): Migrate to... + (_ctf_errlist_t): ... this. + (_ctf_erridx): New, indexes into _ctf_errlist_t. + (_ctf_nerr): Remove. + (ctf_errmsg): Adjust accordingly. + * Makefile.am (BUILT_SOURCES): Note... + (ctf-error.h): ... this new rule. + * Makefile.in: Regenerate. + * mkerrors.sed: New, process ctf-api.h to generate ctf-error.h. + * .gitignore: New, ignore ctf-error.h. + +2020-07-22 Nick Alcock <nick.alcock@oracle.com> + + * ctf-impl.h: Fix typos in comments. + +2020-07-22 Nick Clifton <nickc@redhat.com> + + * ctf-archive.c (ctf_arc_write): Avoid calling close twice on the + same file descriptor. + +2020-07-04 Nick Clifton <nickc@redhat.com> + + Binutils 2.35 branch created. + +2020-06-26 Nick Alcock <nick.alcock@oracle.com> + + * aclocal.m4: Add config/gettext-sister.m4: Shuffle into + alphabetical order. + * configure.ac: Add ZW_GNU_GETTEXT_SISTER_DIR. + * config.h.in: Regenerated. + * Makefile.in: Likewise. + * configure: Likewise. + +2020-06-26 Nick Alcock <nick.alcock@oracle.com> + + * ctf-create.c: Include <unistd.h>. + * ctf-open-bfd.c: Likewise. + +2020-06-26 Nick Alcock <nick.alcock@oracle.com> + + PR libctf/25120 + * configure.ac: Check for bswap_16, bswap_32, and bswap_64 decls. + * swap.h (bswap_16): Do not assume that presence of <byteswap.h> + means this is declared. + (bswap_32): Likewise. + (bswap_64): Likewise. + (bswap_identity_64): Remove, unused. + * configure: Regenerated. + * config.h.in: Likewise. + +2020-06-26 Nick Alcock <nick.alcock@oracle.com> + + PR libctf/25120 + * ctf-impl.h (_libctf_printflike_): Add non-GNU-C fallback. + (_libctf_unlikely_): Likewise. + (_libctf_unused): Likewise. + (_libctf_malloc_): Likewise. + +2020-06-26 Nick Alcock <nick.alcock@oracle.com> + + PR libctf/25120 + * ctf-archive.c (search_nametbl): No longer global: declare... + (ctf_arc_open_by_name_internal): ... here. Use bsearch_r. + (search_modent_by_name): Take and use ARG for the nametbl. + +2020-06-26 Nick Alcock <nick.alcock@oracle.com> + + * ctf-impl.h (ctf_new_archive_internal): Declare. + (ctf_arc_bufopen): Remove. + (ctf_archive_internal) <ctfi_free_symsect>: New. + * ctf-archive.c (ctf_arc_close): Use it. + (ctf_arc_bufopen): Fuse into... + (ctf_new_archive_internal): ... this, moved across from... + * ctf-open-bfd.c: ... here. + (ctf_bfdopen_ctfsect): Use ctf_arc_bufopen. + * libctf.ver: Add it. + +2020-06-26 Nick Alcock <nick.alcock@oracle.com> + + * ctf-create.c (ctf_add_forward): Intern in the right namespace. + (ctf_dtd_delete): Remove correspondingly. + (ctf_rollback): Likewise. + +2020-06-26 Nick Alcock <nick.alcock@oracle.com> + + * ctf-create.c (ctf_add_type_internal): Hand back existing types + unchanged. + +2020-06-26 Nick Alcock <nick.alcock@oracle.com> + + * ctf-create.c (ctf_add_forward): Don't add forwards to + types that already exist. + +2020-06-26 Nick Alcock <nick.alcock@oracle.com> + + * ctf-open.c (init_types): Only intern root-visible types. + * ctf-create.c (ctf_dtd_insert): Likewise. + (ctf_dtd_delete): Only remove root-visible types. + (ctf_rollback): Likewise. + (ctf_add_generic): Adjust. + (ctf_add_struct_sized): Adjust comment. + (ctf_add_union_sized): Likewise. + (ctf_add_enum): Likewise. + * ctf-impl.h (ctf_dtd_insert): Adjust prototype. + +2020-03-11 John Baldwin <jhb@FreeBSD.org> + + * swap.h (bswap_identity_64): Make static. + +2020-01-18 Nick Clifton <nickc@redhat.com> + + Binutils 2.34 branch created. + 2020-01-05 Joel Brobecker <brobecker@adacore.com> PR binutils/25155: * configure.ac: Add AC_CHECK_DECLS([asprintf]). * configure, config.h.in: Regenerate. -2020-01-05 Joel Brobecker <brobecker@adacore.com> +2020-01-01 Alan Modra <amodra@gmail.com> - * Makefile.in, aclocal.m4: Regenerate. + Update year range in copyright notice of all files. 2019-10-16 Simon Marchi <simon.marchi@polymtl.ca> diff -Nru gdb-9.1/libctf/config.h.in gdb-10.2/libctf/config.h.in --- gdb-9.1/libctf/config.h.in 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/libctf/config.h.in 2020-09-13 02:33:41.000000000 +0000 @@ -3,6 +3,13 @@ /* Define if building universal (internal helper macro) */ #undef AC_APPLE_UNIVERSAL_BUILD +/* Enable expensive debugging of CTF deduplication type hashing */ +#undef ENABLE_LIBCTF_HASH_DEBUGGING + +/* Define to 1 if translation of program messages to the user's native + language is requested. */ +#undef ENABLE_NLS + /* Whether libbfd was configured for an ELF target. */ #undef HAVE_BFD_ELF @@ -13,6 +20,26 @@ don't. */ #undef HAVE_DECL_ASPRINTF +/* Define to 1 if you have the declaration of `bswap_16', and to 0 if you + don't. */ +#undef HAVE_DECL_BSWAP_16 + +/* Define to 1 if you have the declaration of `bswap_32', and to 0 if you + don't. */ +#undef HAVE_DECL_BSWAP_32 + +/* Define to 1 if you have the declaration of `bswap_64', and to 0 if you + don't. */ +#undef HAVE_DECL_BSWAP_64 + +/* Define to 1 if you have the declaration of `stpcpy', and to 0 if you don't. + */ +#undef HAVE_DECL_STPCPY + +/* Define to 1 if you have the declaration of `vasprintf', and to 0 if you + don't. */ +#undef HAVE_DECL_VASPRINTF + /* Define to 1 if you have the <dlfcn.h> header file. */ #undef HAVE_DLFCN_H diff -Nru gdb-9.1/libctf/configure gdb-10.2/libctf/configure --- gdb-9.1/libctf/configure 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/libctf/configure 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for libctf library 1.2.0-pre. +# Generated by GNU Autoconf 2.69 for libctf 1.2.0. # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. @@ -585,10 +585,10 @@ MAKEFLAGS= # Identity of this package. -PACKAGE_NAME='libctf library' -PACKAGE_TARNAME='libctf-library' -PACKAGE_VERSION='1.2.0-pre' -PACKAGE_STRING='libctf library 1.2.0-pre' +PACKAGE_NAME='libctf' +PACKAGE_TARNAME='libctf' +PACKAGE_VERSION='1.2.0' +PACKAGE_STRING='libctf 1.2.0' PACKAGE_BUGREPORT='' PACKAGE_URL='' @@ -642,6 +642,8 @@ SHARED_LDFLAGS NEED_CTF_QSORT_R_FALSE NEED_CTF_QSORT_R_TRUE +ENABLE_LIBCTF_HASH_DEBUGGING_FALSE +ENABLE_LIBCTF_HASH_DEBUGGING_TRUE zlibinc zlibdir ac_libctf_warn_cflags @@ -680,6 +682,18 @@ build_cpu build LIBTOOL +CATOBJEXT +GENCAT +INSTOBJEXT +DATADIRNAME +CATALOGS +POSUB +GMSGFMT +XGETTEXT +INCINTL +LIBINTL_DEP +LIBINTL +USE_NLS ac_ct_AR AR RANLIB @@ -784,6 +798,7 @@ enable_maintainer_mode enable_install_libbfd with_system_zlib +enable_libctf_hash_debugging ' ac_precious_vars='build_alias host_alias @@ -1334,7 +1349,7 @@ # 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 libctf library 1.2.0-pre to adapt to many kinds of systems. +\`configure' configures libctf 1.2.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1382,7 +1397,7 @@ --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] - --docdir=DIR documentation root [DATAROOTDIR/doc/libctf-library] + --docdir=DIR documentation root [DATAROOTDIR/doc/libctf] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] @@ -1404,7 +1419,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of libctf library 1.2.0-pre:";; + short | recursive ) echo "Configuration of libctf 1.2.0:";; esac cat <<\_ACEOF @@ -1429,6 +1444,9 @@ enable make rules and dependencies not useful (and sometimes confusing) to the casual installer --enable-install-libbfd controls installation of libbfd and related headers + --enable-libctf-hash-debugging + Enable expensive debugging of CTF deduplication type + hashing [default=no] Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] @@ -1514,7 +1532,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -libctf library configure 1.2.0-pre +libctf configure 1.2.0 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -1925,7 +1943,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by libctf library $as_me 1.2.0-pre, which was +It was created by libctf $as_me 1.2.0, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -4167,8 +4185,8 @@ # Define the identity of the package. - PACKAGE='libctf-library' - VERSION='1.2.0-pre' + PACKAGE='libctf' + VERSION='1.2.0' cat >>confdefs.h <<_ACEOF @@ -5283,6 +5301,76 @@ ;; esac +# If we haven't got the data from the intl directory, +# assume NLS is disabled. +USE_NLS=no +LIBINTL= +LIBINTL_DEP= +INCINTL= +XGETTEXT= +GMSGFMT= +POSUB= + +if test -f ../intl/config.intl; then + . ../intl/config.intl +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5 +$as_echo_n "checking whether NLS is requested... " >&6; } +if test x"$USE_NLS" != xyes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define ENABLE_NLS 1" >>confdefs.h + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for catalogs to be installed" >&5 +$as_echo_n "checking for catalogs to be installed... " >&6; } + # Look for .po and .gmo files in the source directory. + CATALOGS= + XLINGUAS= + for cat in $srcdir/po/*.gmo $srcdir/po/*.po; do + # If there aren't any .gmo files the shell will give us the + # literal string "../path/to/srcdir/po/*.gmo" which has to be + # weeded out. + case "$cat" in *\**) + continue;; + esac + # The quadruple backslash is collapsed to a double backslash + # by the backticks, then collapsed again by the double quotes, + # leaving us with one backslash in the sed expression (right + # before the dot that mustn't act as a wildcard). + cat=`echo $cat | sed -e "s!$srcdir/po/!!" -e "s!\\\\.po!.gmo!"` + lang=`echo $cat | sed -e "s!\\\\.gmo!!"` + # The user is allowed to set LINGUAS to a list of languages to + # install catalogs for. If it's empty that means "all of them." + if test "x$LINGUAS" = x; then + CATALOGS="$CATALOGS $cat" + XLINGUAS="$XLINGUAS $lang" + else + case "$LINGUAS" in *$lang*) + CATALOGS="$CATALOGS $cat" + XLINGUAS="$XLINGUAS $lang" + ;; + esac + fi + done + LINGUAS="$XLINGUAS" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LINGUAS" >&5 +$as_echo "$LINGUAS" >&6; } + + + DATADIRNAME=share + + INSTOBJEXT=.mo + + GENCAT=gencat + + CATOBJEXT=.gmo + +fi # Check whether --enable-shared was given. if test "${enable_shared+set}" = set; then : @@ -11431,7 +11519,7 @@ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11434 "configure" +#line 11522 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -11537,7 +11625,7 @@ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11540 "configure" +#line 11628 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -12717,6 +12805,33 @@ + # Check whether --enable-libctf-hash-debugging was given. +if test "${enable_libctf_hash_debugging+set}" = set; then : + enableval=$enable_libctf_hash_debugging; + case "$enableval" in + yes|no) ;; + *) as_fn_error $? "Argument to enable/disable libctf-hash-debugging must be yes or no" "$LINENO" 5 ;; + esac + +else + enable_libctf_hash_debugging=no +fi + + +if test "${enable_libctf_hash_debugging}" = yes; then + +$as_echo "#define ENABLE_LIBCTF_HASH_DEBUGGING 1" >>confdefs.h + +fi + if test "${enable_libctf_hash_debugging}" = yes; then + ENABLE_LIBCTF_HASH_DEBUGGING_TRUE= + ENABLE_LIBCTF_HASH_DEBUGGING_FALSE='#' +else + ENABLE_LIBCTF_HASH_DEBUGGING_TRUE='#' + ENABLE_LIBCTF_HASH_DEBUGGING_FALSE= +fi + + # Similar to GDB_AC_CHECK_BFD. OLD_CFLAGS=$CFLAGS OLD_LDFLAGS=$LDFLAGS @@ -13017,6 +13132,40 @@ done +ac_fn_c_check_decl "$LINENO" "bswap_16" "ac_cv_have_decl_bswap_16" "#include <byteswap.h> +" +if test "x$ac_cv_have_decl_bswap_16" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_BSWAP_16 $ac_have_decl +_ACEOF +ac_fn_c_check_decl "$LINENO" "bswap_32" "ac_cv_have_decl_bswap_32" "#include <byteswap.h> +" +if test "x$ac_cv_have_decl_bswap_32" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_BSWAP_32 $ac_have_decl +_ACEOF +ac_fn_c_check_decl "$LINENO" "bswap_64" "ac_cv_have_decl_bswap_64" "#include <byteswap.h> +" +if test "x$ac_cv_have_decl_bswap_64" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_BSWAP_64 $ac_have_decl +_ACEOF + ac_fn_c_check_decl "$LINENO" "asprintf" "ac_cv_have_decl_asprintf" "$ac_includes_default" if test "x$ac_cv_have_decl_asprintf" = xyes; then : ac_have_decl=1 @@ -13027,6 +13176,26 @@ cat >>confdefs.h <<_ACEOF #define HAVE_DECL_ASPRINTF $ac_have_decl _ACEOF +ac_fn_c_check_decl "$LINENO" "vasprintf" "ac_cv_have_decl_vasprintf" "$ac_includes_default" +if test "x$ac_cv_have_decl_vasprintf" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_VASPRINTF $ac_have_decl +_ACEOF +ac_fn_c_check_decl "$LINENO" "stpcpy" "ac_cv_have_decl_stpcpy" "$ac_includes_default" +if test "x$ac_cv_have_decl_stpcpy" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_STPCPY $ac_have_decl +_ACEOF @@ -13369,6 +13538,10 @@ as_fn_error $? "conditional \"INSTALL_LIBBFD\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi +if test -z "${ENABLE_LIBCTF_HASH_DEBUGGING_TRUE}" && test -z "${ENABLE_LIBCTF_HASH_DEBUGGING_FALSE}"; then + as_fn_error $? "conditional \"ENABLE_LIBCTF_HASH_DEBUGGING\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi if test -z "${NEED_CTF_QSORT_R_TRUE}" && test -z "${NEED_CTF_QSORT_R_FALSE}"; then as_fn_error $? "conditional \"NEED_CTF_QSORT_R\" was never defined. @@ -13771,7 +13944,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by libctf library $as_me 1.2.0-pre, which was +This file was extended by libctf $as_me 1.2.0, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -13837,7 +14010,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -libctf library config.status 1.2.0-pre +libctf config.status 1.2.0 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff -Nru gdb-9.1/libctf/configure.ac gdb-10.2/libctf/configure.ac --- gdb-9.1/libctf/configure.ac 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libctf/configure.ac 2021-04-25 04:06:26.000000000 +0000 @@ -1,7 +1,7 @@ dnl -*- Autoconf -*- dnl Process this file with autoconf to produce a configure script. dnl -dnl Copyright (C) 2019 Free Software Foundation, Inc. +dnl Copyright (C) 2019-2020 Free Software Foundation, Inc. dnl dnl This file is free software; you can redistribute it and/or modify dnl it under the terms of the GNU General Public License as published by @@ -19,7 +19,7 @@ dnl AC_PREREQ(2.64) -AC_INIT([libctf library], 1.2.0-pre) +AC_INIT([libctf], 1.2.0) AC_CONFIG_SRCDIR(ctf-impl.h) AC_CONFIG_MACRO_DIR(../config) AC_CONFIG_MACRO_DIR(../bfd) @@ -31,6 +31,7 @@ AC_PROG_CC AC_PROG_RANLIB AM_PROG_AR +ZW_GNU_GETTEXT_SISTER_DIR dnl Default to a non shared library. This may be overridden by the dnl configure option --enable-shared. @@ -66,6 +67,12 @@ AC_SEARCH_LIBS(dlopen, dl) AM_ZLIB +GCC_ENABLE([libctf-hash-debugging], [no], [], [Enable expensive debugging of CTF deduplication type hashing]) +if test "${enable_libctf_hash_debugging}" = yes; then + AC_DEFINE(ENABLE_LIBCTF_HASH_DEBUGGING, 1, [Enable expensive debugging of CTF deduplication type hashing]) +fi +AM_CONDITIONAL(ENABLE_LIBCTF_HASH_DEBUGGING, test "${enable_libctf_hash_debugging}" = yes) + # Similar to GDB_AC_CHECK_BFD. OLD_CFLAGS=$CFLAGS OLD_LDFLAGS=$LDFLAGS @@ -99,7 +106,9 @@ AC_CHECK_HEADERS(byteswap.h endian.h) AC_CHECK_FUNCS(pread) -AC_CHECK_DECLS([asprintf]) +dnl Check for bswap_{16,32,64} +AC_CHECK_DECLS([bswap_16, bswap_32, bswap_64], [], [], [[#include <byteswap.h>]]) +AC_CHECK_DECLS([asprintf, vasprintf, stpcpy]) dnl Check for qsort_r. (Taken from gnulib.) AC_CHECK_FUNCS_ONCE([qsort_r]) diff -Nru gdb-9.1/libctf/ctf-archive.c gdb-10.2/libctf/ctf-archive.c --- gdb-9.1/libctf/ctf-archive.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libctf/ctf-archive.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* CTF archive files. - Copyright (C) 2019 Free Software Foundation, Inc. + Copyright (C) 2019-2020 Free Software Foundation, Inc. This file is part of libctf. @@ -44,9 +44,6 @@ const char **errmsg); static int arc_mmap_unmap (void *header, size_t headersz, const char **errmsg); -/* bsearch() internal state. */ -static __thread char *search_nametbl; - /* Write out a CTF archive to the start of the file referenced by the passed-in fd. The entries in CTF_FILES are referenced by name: the names are passed in the names array, which must have CTF_FILES entries. @@ -85,19 +82,19 @@ ctf_startoffs = headersz; if (lseek (fd, ctf_startoffs - 1, SEEK_SET) < 0) { - errmsg = "ctf_arc_write(): cannot extend file while writing: %s\n"; + errmsg = N_("ctf_arc_write(): cannot extend file while writing"); goto err; } if (write (fd, &dummy, 1) < 0) { - errmsg = "ctf_arc_write(): cannot extend file while writing: %s\n"; + errmsg = N_("ctf_arc_write(): cannot extend file while writing"); goto err; } if ((archdr = arc_mmap_header (fd, headersz)) == NULL) { - errmsg = "ctf_arc_write(): Cannot mmap(): %s\n"; + errmsg = N_("ctf_arc_write(): cannot mmap"); goto err; } @@ -131,7 +128,7 @@ nametbl = malloc (namesz); if (nametbl == NULL) { - errmsg = "Error writing named CTF to archive: %s\n"; + errmsg = N_("ctf_arc_write(): error writing named CTF to archive"); goto err_unmap; } @@ -147,13 +144,13 @@ off = arc_write_one_ctf (ctf_files[i], fd, threshold); if ((off < 0) && (off > -ECTF_BASE)) { - errmsg = "ctf_arc_write(): Cannot determine file " - "position while writing to archive: %s"; + errmsg = N_("ctf_arc_write(): cannot determine file " + "position while writing to archive"); goto err_free; } if (off < 0) { - errmsg = "ctf_arc_write(): Cannot write CTF file to archive: %s\n"; + errmsg = N_("ctf_arc_write(): cannot write CTF file to archive"); errno = off * -1; goto err_free; } @@ -174,8 +171,8 @@ if ((nameoffs = lseek (fd, 0, SEEK_CUR)) < 0) { - errmsg = "ctf_arc_write(): Cannot get current file position " - "in archive: %s\n"; + errmsg = N_("ctf_arc_write(): cannot get current file position " + "in archive"); goto err_free; } archdr->ctfa_names = htole64 (nameoffs); @@ -185,7 +182,7 @@ ssize_t len; if ((len = write (fd, np, namesz)) < 0) { - errmsg = "ctf_arc_write(): Cannot write name table to archive: %s\n"; + errmsg = N_("ctf_arc_write(): cannot write name table to archive"); goto err_free; } namesz -= len; @@ -204,8 +201,11 @@ err_unmap: arc_mmap_unmap (archdr, headersz, NULL); err: - ctf_dprintf (errmsg, errno < ECTF_BASE ? strerror (errno) : - ctf_errmsg (errno)); + /* We report errors into the first file in the archive, if any: if this is a + zero-file archive, put it in the open-errors stream for lack of anywhere + else for it to go. */ + ctf_err_warn (ctf_file_cnt > 0 ? ctf_files[0] : NULL, 0, errno, "%s", + gettext (errmsg)); return errno; } @@ -216,7 +216,7 @@ Returns 0 on success, or an errno, or an ECTF_* value. */ int -ctf_arc_write (const char *file, ctf_file_t ** ctf_files, size_t ctf_file_cnt, +ctf_arc_write (const char *file, ctf_file_t **ctf_files, size_t ctf_file_cnt, const char **names, size_t threshold) { int err; @@ -224,30 +224,23 @@ if ((fd = open (file, O_RDWR | O_CREAT | O_TRUNC | O_CLOEXEC, 0666)) < 0) { - ctf_dprintf ("ctf_arc_write(): cannot create %s: %s\n", file, - strerror (errno)); + ctf_err_warn (ctf_file_cnt > 0 ? ctf_files[0] : NULL, 0, errno, + _("ctf_arc_write(): cannot create %s"), file); return errno; } err = ctf_arc_write_fd (fd, ctf_files, ctf_file_cnt, names, threshold); if (err) - goto err; + goto err_close; if ((err = close (fd)) < 0) - { - ctf_dprintf ("ctf_arc_write(): Cannot close after writing to archive: " - "%s\n", strerror (errno)); - goto err_close; - } - - err: - close (fd); - if (err < 0) - unlink (file); - - return err; + ctf_err_warn (ctf_file_cnt > 0 ? ctf_files[0] : NULL, 0, errno, + _("ctf_arc_write(): cannot close after writing to archive")); + goto err; err_close: + (void) close (fd); + err: if (err < 0) unlink (file); @@ -332,32 +325,94 @@ &nametbl[le64toh (b->name_offset)]); } -/* bsearch() function to search for a given name in the sorted array of struct +/* bsearch_r() function to search for a given name in the sorted array of struct ctf_archive_modents. */ static int -search_modent_by_name (const void *key, const void *ent) +search_modent_by_name (const void *key, const void *ent, void *arg) { const char *k = key; const struct ctf_archive_modent *v = ent; + const char *search_nametbl = arg; return strcmp (k, &search_nametbl[le64toh (v->name_offset)]); } -/* A trivial wrapper: open a CTF archive, from data in a buffer (which the - caller must preserve until ctf_arc_close() time). Returns the archive, or - NULL and an error in *err (if not NULL). */ -struct ctf_archive * -ctf_arc_bufopen (const void *buf, size_t size _libctf_unused_, int *errp) +/* Make a new struct ctf_archive_internal wrapper for a ctf_archive or a + ctf_file. Closes ARC and/or FP on error. Arrange to free the SYMSECT or + STRSECT, as needed, on close. Possibly do not unmap on close. */ + +struct ctf_archive_internal * +ctf_new_archive_internal (int is_archive, int unmap_on_close, + struct ctf_archive *arc, + ctf_file_t *fp, const ctf_sect_t *symsect, + const ctf_sect_t *strsect, + int *errp) { - struct ctf_archive *arc = (struct ctf_archive *) buf; + struct ctf_archive_internal *arci; - if (le64toh (arc->ctfa_magic) != CTFA_MAGIC) + if ((arci = calloc (1, sizeof (struct ctf_archive_internal))) == NULL) { - if (errp) - *errp = ECTF_FMT; - return NULL; + if (is_archive) + { + if (unmap_on_close) + ctf_arc_close_internal (arc); + } + else + ctf_file_close (fp); + return (ctf_set_open_errno (errp, errno)); + } + arci->ctfi_is_archive = is_archive; + if (is_archive) + arci->ctfi_archive = arc; + else + arci->ctfi_file = fp; + if (symsect) + memcpy (&arci->ctfi_symsect, symsect, sizeof (struct ctf_sect)); + if (strsect) + memcpy (&arci->ctfi_strsect, strsect, sizeof (struct ctf_sect)); + arci->ctfi_free_symsect = 0; + arci->ctfi_free_strsect = 0; + arci->ctfi_unmap_on_close = unmap_on_close; + + return arci; +} + +/* Open a CTF archive or dictionary from data in a buffer (which the caller must + preserve until ctf_arc_close() time). Returns the archive, or NULL and an + error in *err (if not NULL). */ +ctf_archive_t * +ctf_arc_bufopen (const ctf_sect_t *ctfsect, const ctf_sect_t *symsect, + const ctf_sect_t *strsect, int *errp) +{ + struct ctf_archive *arc = NULL; + int is_archive; + ctf_file_t *fp = NULL; + + if (ctfsect->cts_size > sizeof (uint64_t) && + (le64toh ((*(uint64_t *) ctfsect->cts_data)) == CTFA_MAGIC)) + { + /* The archive is mmappable, so this operation is trivial. + + This buffer is nonmodifiable, so the trick involving mmapping only part + of it and storing the length in the magic number is not applicable: so + record this fact in the archive-wrapper header. (We cannot record it + in the archive, because the archive may very well be a read-only + mapping.) */ + + is_archive = 1; + arc = (struct ctf_archive *) ctfsect->cts_data; } - return arc; + else + { + is_archive = 0; + if ((fp = ctf_bufopen (ctfsect, symsect, strsect, errp)) == NULL) + { + ctf_err_warn (NULL, 0, *errp, _("ctf_arc_bufopen(): cannot open CTF")); + return NULL; + } + } + return ctf_new_archive_internal (is_archive, 0, arc, fp, symsect, strsect, + errp); } /* Open a CTF archive. Returns the archive, or NULL and an error in *err (if @@ -373,24 +428,24 @@ libctf_init_debug(); if ((fd = open (filename, O_RDONLY)) < 0) { - errmsg = "ctf_arc_open(): cannot open %s: %s\n"; + errmsg = N_("ctf_arc_open(): cannot open %s"); goto err; } if (fstat (fd, &s) < 0) { - errmsg = "ctf_arc_open(): cannot stat %s: %s\n"; + errmsg = N_("ctf_arc_open(): cannot stat %s"); goto err_close; } if ((arc = arc_mmap_file (fd, s.st_size)) == NULL) { - errmsg = "ctf_arc_open(): Cannot read in %s: %s\n"; + errmsg = N_("ctf_arc_open(): cannot read in %s"); goto err_close; } if (le64toh (arc->ctfa_magic) != CTFA_MAGIC) { - errmsg = "ctf_arc_open(): Invalid magic number"; + errmsg = N_("ctf_arc_open(): %s: invalid magic number"); errno = ECTF_FMT; goto err_unmap; } @@ -409,8 +464,7 @@ err: if (errp) *errp = errno; - ctf_dprintf (errmsg, filename, errno < ECTF_BASE ? strerror (errno) : - ctf_errmsg (errno)); + ctf_err_warn (NULL, 0, errno, gettext (errmsg), filename); return NULL; } @@ -433,11 +487,16 @@ return; if (arc->ctfi_is_archive) - ctf_arc_close_internal (arc->ctfi_archive); + { + if (arc->ctfi_unmap_on_close) + ctf_arc_close_internal (arc->ctfi_archive); + } else ctf_file_close (arc->ctfi_file); - free ((void *) arc->ctfi_symsect.cts_data); - /* Do not free the ctfi_strsect: it is bound to the bfd. */ + if (arc->ctfi_free_symsect) + free ((void *) arc->ctfi_symsect.cts_data); + if (arc->ctfi_free_strsect) + free ((void *) arc->ctfi_strsect.cts_data); free (arc->ctfi_data); if (arc->ctfi_bfd_close) arc->ctfi_bfd_close (arc); @@ -453,6 +512,7 @@ const char *name, int *errp) { struct ctf_archive_modent *modent; + const char *search_nametbl; if (name == NULL) name = _CTF_SECTION; /* The default name. */ @@ -462,10 +522,10 @@ modent = (ctf_archive_modent_t *) ((char *) arc + sizeof (struct ctf_archive)); - search_nametbl = (char *) arc + le64toh (arc->ctfa_names); - modent = bsearch (name, modent, le64toh (arc->ctfa_nfiles), - sizeof (struct ctf_archive_modent), - search_modent_by_name); + search_nametbl = (const char *) arc + le64toh (arc->ctfa_names); + modent = bsearch_r (name, modent, le64toh (arc->ctfa_nfiles), + sizeof (struct ctf_archive_modent), + search_modent_by_name, (void *) search_nametbl); /* This is actually a common case and normal operation: no error debug output. */ @@ -561,6 +621,16 @@ return fp; } +/* Return the number of members in an archive. */ +size_t +ctf_archive_count (const ctf_archive_t *wrapper) +{ + if (!wrapper->ctfi_is_archive) + return 1; + + return wrapper->ctfi_archive->ctfa_nfiles; +} + /* Raw iteration over all CTF files in an archive. We pass the raw data for all CTF files in turn to the specified callback function. */ static int @@ -666,6 +736,113 @@ return func (arc->ctfi_file, _CTF_SECTION, data); } +/* Iterate over all CTF files in an archive, returning each dict in turn as a + ctf_file_t, and NULL on error or end of iteration. It is the caller's + responsibility to close it. Parent dicts may be skipped. Regardless of + whether they are skipped or not, the caller must ctf_import the parent if + need be. + + We identify parents by name rather than by flag value: for now, with the + linker only emitting parents named _CTF_SECTION, this works well enough. */ + +ctf_file_t * +ctf_archive_next (const ctf_archive_t *wrapper, ctf_next_t **it, const char **name, + int skip_parent, int *errp) +{ + ctf_file_t *f; + ctf_next_t *i = *it; + struct ctf_archive *arc; + struct ctf_archive_modent *modent; + const char *nametbl; + const char *name_; + + if (!i) + { + if ((i = ctf_next_create()) == NULL) + { + if (errp) + *errp = ENOMEM; + return NULL; + } + i->cu.ctn_arc = wrapper; + i->ctn_iter_fun = (void (*) (void)) ctf_archive_next; + *it = i; + } + + if ((void (*) (void)) ctf_archive_next != i->ctn_iter_fun) + { + if (errp) + *errp = ECTF_NEXT_WRONGFUN; + return NULL; + } + + if (wrapper != i->cu.ctn_arc) + { + if (errp) + *errp = ECTF_NEXT_WRONGFP; + return NULL; + } + + /* Iteration is made a bit more complex by the need to handle ctf_file_t's + transparently wrapped in a single-member archive. These are parents: if + skip_parent is on, they are skipped and the iterator terminates + immediately. */ + + if (!wrapper->ctfi_is_archive && i->ctn_n == 0) + { + i->ctn_n++; + if (!skip_parent) + { + wrapper->ctfi_file->ctf_refcnt++; + return wrapper->ctfi_file; + } + } + + arc = wrapper->ctfi_archive; + + /* The loop keeps going when skip_parent is on as long as the member we find + is the parent (i.e. at most two iterations, but possibly an early return if + *all* we have is a parent). */ + + const ctf_sect_t *symsect; + const ctf_sect_t *strsect; + + do + { + if ((!wrapper->ctfi_is_archive) || (i->ctn_n >= le64toh (arc->ctfa_nfiles))) + { + ctf_next_destroy (i); + *it = NULL; + if (errp) + *errp = ECTF_NEXT_END; + return NULL; + } + + symsect = &wrapper->ctfi_symsect; + strsect = &wrapper->ctfi_strsect; + + if (symsect->cts_name == NULL) + symsect = NULL; + if (strsect->cts_name == NULL) + strsect = NULL; + + modent = (ctf_archive_modent_t *) ((char *) arc + + sizeof (struct ctf_archive)); + nametbl = (((const char *) arc) + le64toh (arc->ctfa_names)); + + name_ = &nametbl[le64toh (modent[i->ctn_n].name_offset)]; + i->ctn_n++; + } while (skip_parent && strcmp (name_, _CTF_SECTION) == 0); + + if (name) + *name = name_; + + f = ctf_arc_open_by_name_internal (arc, symsect, strsect, + name_, errp); + f->ctf_archive = (ctf_archive_t *) wrapper; + return f; +} + #ifdef HAVE_MMAP /* Map the header in. Only used on new, empty files. */ static void *arc_mmap_header (int fd, size_t headersz) @@ -696,7 +873,8 @@ if (msync (header, headersz, MS_ASYNC) < 0) { if (errmsg) - *errmsg = "arc_mmap_writeout(): Cannot sync after writing to %s: %s\n"; + *errmsg = N_("arc_mmap_writeout(): cannot sync after writing " + "to %s: %s"); return -1; } return 0; @@ -708,7 +886,8 @@ if (munmap (header, headersz) < 0) { if (errmsg) - *errmsg = "arc_mmap_munmap(): Cannot unmap after writing to %s: %s\n"; + *errmsg = N_("arc_mmap_munmap(): cannot unmap after writing " + "to %s: %s"); return -1; } return 0; @@ -752,8 +931,8 @@ if ((lseek (fd, 0, SEEK_SET)) < 0) { if (errmsg) - *errmsg = "arc_mmap_writeout(): Cannot seek while writing header to " - "%s: %s\n"; + *errmsg = N_("arc_mmap_writeout(): cannot seek while writing header to " + "%s: %s"); return -1; } @@ -762,7 +941,7 @@ if ((len = write (fd, data, count)) < 0) { if (errmsg) - *errmsg = "arc_mmap_writeout(): Cannot write header to %s: %s\n"; + *errmsg = N_("arc_mmap_writeout(): cannot write header to %s: %s"); return len; } if (len == EINTR) diff -Nru gdb-9.1/libctf/ctf-create.c gdb-10.2/libctf/ctf-create.c --- gdb-9.1/libctf/ctf-create.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libctf/ctf-create.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* CTF file creation. - Copyright (C) 2019 Free Software Foundation, Inc. + Copyright (C) 2019-2020 Free Software Foundation, Inc. This file is part of libctf. @@ -21,6 +21,7 @@ #include <sys/param.h> #include <assert.h> #include <string.h> +#include <unistd.h> #include <zlib.h> #ifndef EOVERFLOW @@ -129,6 +130,7 @@ fp->ctf_dtoldid = 0; fp->ctf_snapshots = 1; fp->ctf_snapshot_lu = 0; + fp->ctf_flags |= LCTF_DIRTY; ctf_set_ctl_hashes (fp); ctf_setmodel (fp, CTF_MODEL_NATIVE); @@ -376,7 +378,7 @@ ctf_varent_t *var = &dvarents[i]; ctf_str_add_ref (fp, dvd->dvd_name, &var->ctv_name); - var->ctv_type = dvd->dvd_type; + var->ctv_type = (uint32_t) dvd->dvd_type; } assert (i == nvars); @@ -451,7 +453,7 @@ uint32_t argc; for (argc = 0; argc < vlen; argc++) - *argv++ = (uint32_t) dtd->dtd_u.dtu_argv[argc]; + *argv++ = dtd->dtd_u.dtu_argv[argc]; if (vlen & 1) *argv++ = 0; /* Pad to 4-byte boundary. */ @@ -518,8 +520,9 @@ } (void) ctf_setmodel (nfp, ctf_getmodel (fp)); - (void) ctf_import (nfp, fp->ctf_parent); + nfp->ctf_parent = fp->ctf_parent; + nfp->ctf_parent_unreffed = fp->ctf_parent_unreffed; nfp->ctf_refcnt = fp->ctf_refcnt; nfp->ctf_flags |= fp->ctf_flags & ~LCTF_DIRTY; if (nfp->ctf_dynbase == NULL) @@ -536,12 +539,20 @@ nfp->ctf_ptrtab_len = fp->ctf_ptrtab_len; nfp->ctf_link_inputs = fp->ctf_link_inputs; nfp->ctf_link_outputs = fp->ctf_link_outputs; + nfp->ctf_errs_warnings = fp->ctf_errs_warnings; nfp->ctf_str_prov_offset = fp->ctf_str_prov_offset; nfp->ctf_syn_ext_strtab = fp->ctf_syn_ext_strtab; - nfp->ctf_link_cu_mapping = fp->ctf_link_cu_mapping; + nfp->ctf_link_in_cu_mapping = fp->ctf_link_in_cu_mapping; + nfp->ctf_link_out_cu_mapping = fp->ctf_link_out_cu_mapping; nfp->ctf_link_type_mapping = fp->ctf_link_type_mapping; nfp->ctf_link_memb_name_changer = fp->ctf_link_memb_name_changer; nfp->ctf_link_memb_name_changer_arg = fp->ctf_link_memb_name_changer_arg; + nfp->ctf_link_variable_filter = fp->ctf_link_variable_filter; + nfp->ctf_link_variable_filter_arg = fp->ctf_link_variable_filter_arg; + nfp->ctf_link_flags = fp->ctf_link_flags; + nfp->ctf_dedup_atoms = fp->ctf_dedup_atoms; + nfp->ctf_dedup_atoms_alloc = fp->ctf_dedup_atoms_alloc; + memcpy (&nfp->ctf_dedup, &fp->ctf_dedup, sizeof (fp->ctf_dedup)); nfp->ctf_snapshot_lu = fp->ctf_snapshots; @@ -558,17 +569,23 @@ fp->ctf_str_atoms = NULL; fp->ctf_prov_strtab = NULL; memset (&fp->ctf_dtdefs, 0, sizeof (ctf_list_t)); + memset (&fp->ctf_errs_warnings, 0, sizeof (ctf_list_t)); fp->ctf_add_processing = NULL; fp->ctf_ptrtab = NULL; fp->ctf_link_inputs = NULL; fp->ctf_link_outputs = NULL; fp->ctf_syn_ext_strtab = NULL; - fp->ctf_link_cu_mapping = NULL; + fp->ctf_link_in_cu_mapping = NULL; + fp->ctf_link_out_cu_mapping = NULL; fp->ctf_link_type_mapping = NULL; + fp->ctf_dedup_atoms = NULL; + fp->ctf_dedup_atoms_alloc = NULL; + fp->ctf_parent_unreffed = 1; fp->ctf_dvhash = NULL; memset (&fp->ctf_dvdefs, 0, sizeof (ctf_list_t)); memset (fp->ctf_lookups, 0, sizeof (fp->ctf_lookups)); + memset (&fp->ctf_dedup, 0, sizeof (fp->ctf_dedup)); fp->ctf_structs.ctn_writable = NULL; fp->ctf_unions.ctn_writable = NULL; fp->ctf_enums.ctn_writable = NULL; @@ -601,19 +618,22 @@ } int -ctf_dtd_insert (ctf_file_t *fp, ctf_dtdef_t *dtd, int kind) +ctf_dtd_insert (ctf_file_t *fp, ctf_dtdef_t *dtd, int flag, int kind) { const char *name; - if (ctf_dynhash_insert (fp->ctf_dthash, (void *) dtd->dtd_type, dtd) < 0) + if (ctf_dynhash_insert (fp->ctf_dthash, (void *) (uintptr_t) dtd->dtd_type, + dtd) < 0) return -1; - if (dtd->dtd_data.ctt_name + if (flag == CTF_ADD_ROOT && dtd->dtd_data.ctt_name && (name = ctf_strraw (fp, dtd->dtd_data.ctt_name)) != NULL) { if (ctf_dynhash_insert (ctf_name_table (fp, kind)->ctn_writable, - (char *) name, (void *) dtd->dtd_type) < 0) + (char *) name, (void *) (uintptr_t) + dtd->dtd_type) < 0) { - ctf_dynhash_remove (fp->ctf_dthash, (void *) dtd->dtd_type); + ctf_dynhash_remove (fp->ctf_dthash, (void *) (uintptr_t) + dtd->dtd_type); return -1; } } @@ -626,9 +646,10 @@ { ctf_dmdef_t *dmd, *nmd; int kind = LCTF_INFO_KIND (fp, dtd->dtd_data.ctt_info); + int name_kind = kind; const char *name; - ctf_dynhash_remove (fp->ctf_dthash, (void *) dtd->dtd_type); + ctf_dynhash_remove (fp->ctf_dthash, (void *) (uintptr_t) dtd->dtd_type); switch (kind) { @@ -647,12 +668,16 @@ case CTF_K_FUNCTION: free (dtd->dtd_u.dtu_argv); break; + case CTF_K_FORWARD: + name_kind = dtd->dtd_data.ctt_type; + break; } if (dtd->dtd_data.ctt_name - && (name = ctf_strraw (fp, dtd->dtd_data.ctt_name)) != NULL) + && (name = ctf_strraw (fp, dtd->dtd_data.ctt_name)) != NULL + && LCTF_INFO_ISROOT (fp, dtd->dtd_data.ctt_info)) { - ctf_dynhash_remove (ctf_name_table (fp, kind)->ctn_writable, + ctf_dynhash_remove (ctf_name_table (fp, name_kind)->ctn_writable, name); ctf_str_remove_ref (fp, name, &dtd->dtd_data.ctt_name); } @@ -664,7 +689,8 @@ ctf_dtdef_t * ctf_dtd_lookup (const ctf_file_t *fp, ctf_id_t type) { - return (ctf_dtdef_t *) ctf_dynhash_lookup (fp->ctf_dthash, (void *) type); + return (ctf_dtdef_t *) + ctf_dynhash_lookup (fp->ctf_dthash, (void *) (uintptr_t) type); } ctf_dtdef_t * @@ -764,16 +790,19 @@ continue; kind = LCTF_INFO_KIND (fp, dtd->dtd_data.ctt_info); + if (kind == CTF_K_FORWARD) + kind = dtd->dtd_data.ctt_type; if (dtd->dtd_data.ctt_name - && (name = ctf_strraw (fp, dtd->dtd_data.ctt_name)) != NULL) + && (name = ctf_strraw (fp, dtd->dtd_data.ctt_name)) != NULL + && LCTF_INFO_ISROOT (fp, dtd->dtd_data.ctt_info)) { ctf_dynhash_remove (ctf_name_table (fp, kind)->ctn_writable, name); ctf_str_remove_ref (fp, name, &dtd->dtd_data.ctt_name); } - ctf_dynhash_remove (fp->ctf_dthash, (void *) dtd->dtd_type); + ctf_dynhash_remove (fp->ctf_dthash, (void *) (uintptr_t) dtd->dtd_type); ctf_dtd_delete (fp, dtd); } @@ -835,7 +864,7 @@ return (ctf_set_errno (fp, EAGAIN)); } - if (ctf_dtd_insert (fp, dtd, kind) < 0) + if (ctf_dtd_insert (fp, dtd, flag, kind) < 0) { free (dtd); return CTF_ERR; /* errno is set for us. */ @@ -863,7 +892,7 @@ return (x + 1); } -static ctf_id_t +ctf_id_t ctf_add_encoded (ctf_file_t *fp, uint32_t flag, const char *name, const ctf_encoding_t *ep, uint32_t kind) { @@ -884,7 +913,7 @@ return type; } -static ctf_id_t +ctf_id_t ctf_add_reftype (ctf_file_t *fp, uint32_t flag, ctf_id_t ref, uint32_t kind) { ctf_dtdef_t *dtd; @@ -895,7 +924,7 @@ if (ref == CTF_ERR || ref > CTF_MAX_TYPE) return (ctf_set_errno (fp, EINVAL)); - if (ctf_lookup_by_id (&tmp, ref) == NULL) + if (ref != 0 && ctf_lookup_by_id (&tmp, ref) == NULL) return CTF_ERR; /* errno is set for us. */ if ((type = ctf_add_generic (fp, flag, NULL, kind, &dtd)) == CTF_ERR) @@ -938,6 +967,7 @@ const ctf_encoding_t *ep) { ctf_dtdef_t *dtd; + ctf_id_t resolved_ref = ref; ctf_id_t type; int kind; const ctf_type_t *tp; @@ -952,12 +982,19 @@ if (ref == CTF_ERR || ref > CTF_MAX_TYPE) return (ctf_set_errno (fp, EINVAL)); - if ((tp = ctf_lookup_by_id (&tmp, ref)) == NULL) + if (ref != 0 && ((tp = ctf_lookup_by_id (&tmp, ref)) == NULL)) return CTF_ERR; /* errno is set for us. */ - kind = ctf_type_kind_unsliced (tmp, ref); + /* Make sure we ultimately point to an integral type. We also allow slices to + point to the unimplemented type, for now, because the compiler can emit + such slices, though they're not very much use. */ + + resolved_ref = ctf_type_resolve_unsliced (tmp, ref); + kind = ctf_type_kind_unsliced (tmp, resolved_ref); + if ((kind != CTF_K_INTEGER) && (kind != CTF_K_FLOAT) && - (kind != CTF_K_ENUM)) + (kind != CTF_K_ENUM) + && (ref != 0)) return (ctf_set_errno (fp, ECTF_NOTINTFP)); if ((type = ctf_add_generic (fp, flag, NULL, CTF_K_SLICE, &dtd)) == CTF_ERR) @@ -966,7 +1003,7 @@ dtd->dtd_data.ctt_info = CTF_TYPE_INFO (CTF_K_SLICE, flag, 0); dtd->dtd_data.ctt_size = clp2 (P2ROUNDUP (ep->cte_bits, CHAR_BIT) / CHAR_BIT); - dtd->dtd_u.dtu_slice.cts_type = ref; + dtd->dtd_u.dtu_slice.cts_type = (uint32_t) ref; dtd->dtd_u.dtu_slice.cts_bits = ep->cte_bits; dtd->dtd_u.dtu_slice.cts_offset = ep->cte_offset; @@ -1003,7 +1040,8 @@ if (arp == NULL) return (ctf_set_errno (fp, EINVAL)); - if (ctf_lookup_by_id (&tmp, arp->ctr_contents) == NULL) + if (arp->ctr_contents != 0 + && ctf_lookup_by_id (&tmp, arp->ctr_contents) == NULL) return CTF_ERR; /* errno is set for us. */ tmp = fp; @@ -1045,7 +1083,7 @@ ctf_dtdef_t *dtd; ctf_id_t type; uint32_t vlen; - ctf_id_t *vdat = NULL; + uint32_t *vdat = NULL; ctf_file_t *tmp = fp; size_t i; @@ -1057,22 +1095,27 @@ if (ctc->ctc_flags & CTF_FUNC_VARARG) vlen++; /* Add trailing zero to indicate varargs (see below). */ - if (ctf_lookup_by_id (&tmp, ctc->ctc_return) == NULL) + if (ctc->ctc_return != 0 + && ctf_lookup_by_id (&tmp, ctc->ctc_return) == NULL) return CTF_ERR; /* errno is set for us. */ - for (i = 0; i < ctc->ctc_argc; i++) - { - tmp = fp; - if (ctf_lookup_by_id (&tmp, argv[i]) == NULL) - return CTF_ERR; /* errno is set for us. */ - } - if (vlen > CTF_MAX_VLEN) return (ctf_set_errno (fp, EOVERFLOW)); if (vlen != 0 && (vdat = malloc (sizeof (ctf_id_t) * vlen)) == NULL) return (ctf_set_errno (fp, EAGAIN)); + for (i = 0; i < ctc->ctc_argc; i++) + { + tmp = fp; + if (argv[i] != 0 && ctf_lookup_by_id (&tmp, argv[i]) == NULL) + { + free (vdat); + return CTF_ERR; /* errno is set for us. */ + } + vdat[i] = (uint32_t) argv[i]; + } + if ((type = ctf_add_generic (fp, flag, NULL, CTF_K_FUNCTION, &dtd)) == CTF_ERR) { @@ -1083,7 +1126,6 @@ dtd->dtd_data.ctt_info = CTF_TYPE_INFO (CTF_K_FUNCTION, flag, vlen); dtd->dtd_data.ctt_type = (uint32_t) ctc->ctc_return; - memcpy (vdat, argv, sizeof (ctf_id_t) * ctc->ctc_argc); if (ctc->ctc_flags & CTF_FUNC_VARARG) vdat[vlen - 1] = 0; /* Add trailing zero to indicate varargs. */ dtd->dtd_u.dtu_argv = vdat; @@ -1098,8 +1140,7 @@ ctf_dtdef_t *dtd; ctf_id_t type = 0; - /* Promote forwards to structs. */ - + /* Promote root-visible forwards to structs. */ if (name != NULL) type = ctf_lookup_by_rawname (fp, CTF_K_STRUCT, name); @@ -1136,7 +1177,7 @@ ctf_dtdef_t *dtd; ctf_id_t type = 0; - /* Promote forwards to unions. */ + /* Promote root-visible forwards to unions. */ if (name != NULL) type = ctf_lookup_by_rawname (fp, CTF_K_UNION, name); @@ -1172,7 +1213,7 @@ ctf_dtdef_t *dtd; ctf_id_t type = 0; - /* Promote forwards to enums. */ + /* Promote root-visible forwards to enums. */ if (name != NULL) type = ctf_lookup_by_rawname (fp, CTF_K_ENUM, name); @@ -1223,7 +1264,7 @@ ctf_dtdef_t *dtd; ctf_id_t type = 0; - if (kind != CTF_K_STRUCT && kind != CTF_K_UNION && kind != CTF_K_ENUM) + if (!ctf_forwardable_kind (kind)) return (ctf_set_errno (fp, ECTF_NOTSUE)); /* If the type is already defined or exists as a forward tag, just @@ -1232,7 +1273,10 @@ if (name != NULL) type = ctf_lookup_by_rawname (fp, kind, name); - if ((type = ctf_add_generic (fp, flag, name, CTF_K_FORWARD,&dtd)) == CTF_ERR) + if (type) + return type; + + if ((type = ctf_add_generic (fp, flag, name, kind, &dtd)) == CTF_ERR) return CTF_ERR; /* errno is set for us. */ dtd->dtd_data.ctt_info = CTF_TYPE_INFO (CTF_K_FORWARD, flag, 0); @@ -1252,7 +1296,7 @@ if (ref == CTF_ERR || ref > CTF_MAX_TYPE) return (ctf_set_errno (fp, EINVAL)); - if (ctf_lookup_by_id (&tmp, ref) == NULL) + if (ref != 0 && ctf_lookup_by_id (&tmp, ref) == NULL) return CTF_ERR; /* errno is set for us. */ if ((type = ctf_add_generic (fp, flag, name, CTF_K_TYPEDEF, @@ -1358,6 +1402,9 @@ if (dtd == NULL) return (ctf_set_errno (fp, ECTF_BADID)); + if (name != NULL && name[0] == '\0') + name = NULL; + kind = LCTF_INFO_KIND (fp, dtd->dtd_data.ctt_info); root = LCTF_INFO_ISROOT (fp, dtd->dtd_data.ctt_info); vlen = LCTF_INFO_VLEN (fp, dtd->dtd_data.ctt_info); @@ -1380,7 +1427,20 @@ if ((msize = ctf_type_size (fp, type)) < 0 || (malign = ctf_type_align (fp, type)) < 0) - return -1; /* errno is set for us. */ + { + /* The unimplemented type, and any type that resolves to it, has no size + and no alignment: it can correspond to any number of compiler-inserted + types. */ + + if (ctf_errno (fp) == ECTF_NONREPRESENTABLE) + { + msize = 0; + malign = 0; + ctf_set_errno (fp, 0); + } + else + return -1; /* errno is set for us. */ + } if ((dmd = malloc (sizeof (ctf_dmdef_t))) == NULL) return (ctf_set_errno (fp, EAGAIN)); @@ -1408,6 +1468,16 @@ ctf_encoding_t linfo; ssize_t lsize; + /* Propagate any error from ctf_type_resolve. If the last member was + of unimplemented type, this may be -ECTF_NONREPRESENTABLE: we + cannot insert right after such a member without explicit offset + specification, because its alignment and size is not known. */ + if (ltype == CTF_ERR) + { + free (dmd); + return -1; /* errno is set for us. */ + } + if (ctf_type_encoding (fp, ltype, &linfo) == 0) off += linfo.cte_bits; else if ((lsize = ctf_type_size (fp, ltype)) > 0) @@ -1526,6 +1596,13 @@ return 0; } +typedef struct ctf_bundle +{ + ctf_file_t *ctb_file; /* CTF container handle. */ + ctf_id_t ctb_type; /* CTF type identifier. */ + ctf_dtdef_t *ctb_dtd; /* CTF dynamic type definition (if any). */ +} ctf_bundle_t; + static int enumcmp (const char *name, int value, void *arg) { @@ -1534,14 +1611,15 @@ if (ctf_enum_value (ctb->ctb_file, ctb->ctb_type, name, &bvalue) < 0) { - ctf_dprintf ("Conflict due to member %s iteration error: %s.\n", name, - ctf_errmsg (ctf_errno (ctb->ctb_file))); + ctf_err_warn (ctb->ctb_file, 0, 0, + _("conflict due to enum %s iteration error"), name); return 1; } if (value != bvalue) { - ctf_dprintf ("Conflict due to value change: %i versus %i\n", - value, bvalue); + ctf_err_warn (ctb->ctb_file, 1, ECTF_CONFLICT, + _("conflict due to enum value change: %i versus %i"), + value, bvalue); return 1; } return 0; @@ -1563,16 +1641,24 @@ ctf_bundle_t *ctb = arg; ctf_membinfo_t ctm; + /* Don't check nameless members (e.g. anonymous structs/unions) against each + other. */ + if (name[0] == 0) + return 0; + if (ctf_member_info (ctb->ctb_file, ctb->ctb_type, name, &ctm) < 0) { - ctf_dprintf ("Conflict due to member %s iteration error: %s.\n", name, - ctf_errmsg (ctf_errno (ctb->ctb_file))); + ctf_err_warn (ctb->ctb_file, 0, 0, + _("conflict due to struct member %s iteration error"), + name); return 1; } if (ctm.ctm_offset != offset) { - ctf_dprintf ("Conflict due to member %s offset change: " - "%lx versus %lx\n", name, ctm.ctm_offset, offset); + ctf_err_warn (ctb->ctb_file, 1, ECTF_CONFLICT, + _("conflict due to struct member %s offset change: " + "%lx versus %lx"), + name, ctm.ctm_offset, offset); return 1; } return 0; @@ -1665,13 +1751,17 @@ kind and (if a struct or union) has the same number of members, hand it straight back. */ - if ((ctf_type_kind_unsliced (tmp_fp, tmp) == (int) kind) - && (kind == CTF_K_STRUCT || kind == CTF_K_UNION - || kind == CTF_K_ENUM)) - { - if ((dst_tp = ctf_lookup_by_id (&tmp_fp, dst_type)) != NULL) - if (vlen == LCTF_INFO_VLEN (tmp_fp, dst_tp->ctt_info)) - return tmp; + if (ctf_type_kind_unsliced (tmp_fp, tmp) == (int) kind) + { + if (kind == CTF_K_STRUCT || kind == CTF_K_UNION + || kind == CTF_K_ENUM) + { + if ((dst_tp = ctf_lookup_by_id (&tmp_fp, dst_type)) != NULL) + if (vlen == LCTF_INFO_VLEN (tmp_fp, dst_tp->ctt_info)) + return tmp; + } + else + return tmp; } } @@ -1712,8 +1802,10 @@ || (kind != CTF_K_ENUM && kind != CTF_K_STRUCT && kind != CTF_K_UNION)) { - ctf_dprintf ("Conflict for type %s: kinds differ, new: %i; " - "old (ID %lx): %i\n", name, kind, dst_type, dst_kind); + ctf_err_warn (dst_fp, 1, ECTF_CONFLICT, + _("ctf_add_file(): conflict for type %s: " + "kinds differ, new: %i; old (ID %lx): %i"), + name, kind, dst_type, dst_kind); return (ctf_set_errno (dst_fp, ECTF_CONFLICT)); } } @@ -1858,12 +1950,13 @@ if (memcmp (&src_ar, &dst_ar, sizeof (ctf_arinfo_t))) { - ctf_dprintf ("Conflict for type %s against ID %lx: " - "array info differs, old %lx/%lx/%x; " - "new: %lx/%lx/%x\n", name, dst_type, - src_ar.ctr_contents, src_ar.ctr_index, - src_ar.ctr_nelems, dst_ar.ctr_contents, - dst_ar.ctr_index, dst_ar.ctr_nelems); + ctf_err_warn (dst_fp, 1, ECTF_CONFLICT, + _("conflict for type %s against ID %lx: array info " + "differs, old %lx/%lx/%x; new: %lx/%lx/%x"), + name, dst_type, src_ar.ctr_contents, + src_ar.ctr_index, src_ar.ctr_nelems, + dst_ar.ctr_contents, dst_ar.ctr_index, + dst_ar.ctr_nelems); return (ctf_set_errno (dst_fp, ECTF_CONFLICT)); } } @@ -1907,18 +2000,19 @@ if (ctf_type_size (src_fp, src_type) != ctf_type_size (dst_fp, dst_type)) { - ctf_dprintf ("Conflict for type %s against ID %lx: " - "union size differs, old %li, new %li\n", - name, dst_type, - (long) ctf_type_size (src_fp, src_type), - (long) ctf_type_size (dst_fp, dst_type)); + ctf_err_warn (dst_fp, 1, ECTF_CONFLICT, + _("conflict for type %s against ID %lx: union " + "size differs, old %li, new %li"), name, + dst_type, (long) ctf_type_size (src_fp, src_type), + (long) ctf_type_size (dst_fp, dst_type)); return (ctf_set_errno (dst_fp, ECTF_CONFLICT)); } if (ctf_member_iter (src_fp, src_type, membcmp, &dst)) { - ctf_dprintf ("Conflict for type %s against ID %lx: " - "members differ, see above\n", name, dst_type); + ctf_err_warn (dst_fp, 1, ECTF_CONFLICT, + _("conflict for type %s against ID %lx: members " + "differ, see above"), name, dst_type); return (ctf_set_errno (dst_fp, ECTF_CONFLICT)); } @@ -1997,8 +2091,9 @@ if (ctf_enum_iter (src_fp, src_type, enumcmp, &dst) || ctf_enum_iter (dst_fp, dst_type, enumcmp, &src)) { - ctf_dprintf ("Conflict for enum %s against ID %lx: " - "members differ, see above\n", name, dst_type); + ctf_err_warn (dst_fp, 1, ECTF_CONFLICT, + _("conflict for enum %s against ID %lx: members " + "differ, see above"), name, dst_type); return (ctf_set_errno (dst_fp, ECTF_CONFLICT)); } } @@ -2121,13 +2216,17 @@ compress_len = compressBound (fp->ctf_size); if ((buf = malloc (compress_len)) == NULL) - return (ctf_set_errno (fp, ECTF_ZALLOC)); + { + ctf_err_warn (fp, 0, 0, _("ctf_compress_write: cannot allocate %li bytes"), + (unsigned long) compress_len); + return (ctf_set_errno (fp, ECTF_ZALLOC)); + } if ((rc = compress (buf, (uLongf *) &compress_len, fp->ctf_buf, fp->ctf_size)) != Z_OK) { - ctf_dprintf ("zlib deflate err: %s\n", zError (rc)); err = ctf_set_errno (fp, ECTF_COMPRESS); + ctf_err_warn (fp, 0, 0, _("zlib deflate err: %s"), zError (rc)); goto ret; } @@ -2136,6 +2235,7 @@ if ((len = write (fd, hp, header_len)) < 0) { err = ctf_set_errno (fp, errno); + ctf_err_warn (fp, 0, 0, _("ctf_compress_write: error writing header")); goto ret; } header_len -= len; @@ -2148,6 +2248,7 @@ if ((len = write (fd, bp, compress_len)) < 0) { err = ctf_set_errno (fp, errno); + ctf_err_warn (fp, 0, 0, _("ctf_compress_write: error writing")); goto ret; } compress_len -= len; @@ -2181,6 +2282,8 @@ + sizeof (struct ctf_header))) == NULL) { ctf_set_errno (fp, ENOMEM); + ctf_err_warn (fp, 0, 0, _("ctf_write_mem: cannot allocate %li bytes"), + (unsigned long) (compress_len + sizeof (struct ctf_header))); return NULL; } @@ -2201,8 +2304,8 @@ if ((rc = compress (bp, (uLongf *) &compress_len, fp->ctf_buf, fp->ctf_size)) != Z_OK) { - ctf_dprintf ("zlib deflate err: %s\n", zError (rc)); ctf_set_errno (fp, ECTF_COMPRESS); + ctf_err_warn (fp, 0, 0, _("zlib deflate err: %s"), zError (rc)); free (buf); return NULL; } @@ -2227,7 +2330,10 @@ while (resid != 0) { if ((len = write (fd, buf, resid)) <= 0) - return (ctf_set_errno (fp, errno)); + { + ctf_err_warn (fp, 0, errno, _("ctf_write: error writing header")); + return (ctf_set_errno (fp, errno)); + } resid -= len; buf += len; } @@ -2237,7 +2343,10 @@ while (resid != 0) { if ((len = write (fd, buf, resid)) <= 0) - return (ctf_set_errno (fp, errno)); + { + ctf_err_warn (fp, 0, errno, _("ctf_write: error writing")); + return (ctf_set_errno (fp, errno)); + } resid -= len; buf += len; } diff -Nru gdb-9.1/libctf/ctf-decl.c gdb-10.2/libctf/ctf-decl.c --- gdb-9.1/libctf/ctf-decl.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libctf/ctf-decl.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* C declarator syntax glue. - Copyright (C) 2019 Free Software Foundation, Inc. + Copyright (C) 2019-2020 Free Software Foundation, Inc. This file is part of libctf. @@ -68,6 +68,7 @@ free (cdp); } } + free (cd->cd_buf); } void @@ -195,5 +196,7 @@ char *ctf_decl_buf (ctf_decl_t *cd) { - return cd->cd_buf; + char *buf = cd->cd_buf; + cd->cd_buf = NULL; + return buf; } diff -Nru gdb-9.1/libctf/ctf-decls.h gdb-10.2/libctf/ctf-decls.h --- gdb-9.1/libctf/ctf-decls.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libctf/ctf-decls.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Declarations for missing functions. - Copyright (C) 2019 Free Software Foundation, Inc. + Copyright (C) 2019-2020 Free Software Foundation, Inc. This file is part of libctf. @@ -46,7 +46,7 @@ { struct ctf_qsort_arg *qsort_arg = (struct ctf_qsort_arg *) arg; - return qsort_arg->compar (a, b, arg); + return qsort_arg->compar (a, b, qsort_arg->arg); } static inline void @@ -72,4 +72,8 @@ #define MAX(a, b) ((a) > (b) ? (a) : (b)) #define MIN(a, b) ((a) < (b) ? (a) : (b)) +#if !HAVE_DECL_STPCPY +extern char *stpcpy (char *, const char *); +#endif + #endif /* _CTF_DECLS_H */ diff -Nru gdb-9.1/libctf/ctf-dedup.c gdb-10.2/libctf/ctf-dedup.c --- gdb-9.1/libctf/ctf-dedup.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/libctf/ctf-dedup.c 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,3153 @@ +/* CTF type deduplication. + Copyright (C) 2019 Free Software Foundation, Inc. + + This file is part of libctf. + + libctf is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License as published by the Free + Software Foundation; either version 3, or (at your option) any later + version. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; see the file COPYING. If not see + <http://www.gnu.org/licenses/>. */ + +#include <ctf-impl.h> +#include <string.h> +#include <errno.h> +#include <assert.h> +#include "hashtab.h" + +/* (In the below, relevant functions are named in square brackets.) */ + +/* Type deduplication is a three-phase process: + + [ctf_dedup, ctf_dedup_hash_type, ctf_dedup_rhash_type] + 1) come up with unambiguous hash values for all types: no two types may have + the same hash value, and any given type should have only one hash value + (for optimal deduplication). + + [ctf_dedup, ctf_dedup_detect_name_ambiguity, + ctf_dedup_conflictify_unshared, ctf_dedup_mark_conflicting_hash] + 2) mark those distinct types with names that collide (and thus cannot be + declared simultaneously in the same translation unit) as conflicting, and + recursively mark all types that cite one of those types as conflicting as + well. Possibly mark all types cited in only one TU as conflicting, if + the CTF_LINK_SHARE_DUPLICATED link mode is active. + + [ctf_dedup_emit, ctf_dedup_emit_struct_members, ctf_dedup_id_to_target] + 3) emit all the types, one hash value at a time. Types not marked + conflicting are emitted once, into the shared dictionary: types marked + conflicting are emitted once per TU into a dictionary corresponding to + each TU in which they appear. Structs marked conflicting get at the very + least a forward emitted into the shared dict so that other dicts can cite + it if needed. + + [id_to_packed_id] + This all works over an array of inputs (usually in the same order as the + inputs on the link line). We don't use the ctf_link_inputs hash directly + because it is convenient to be able to address specific input types as a + *global type ID* or 'GID', a pair of an array offset and a ctf_id_t. Since + both are already 32 bits or less or can easily be constrained to that range, + we can pack them both into a single 64-bit hash word for easy lookups, which + would be much more annoying to do with a ctf_file_t * and a ctf_id_t. (On + 32-bit platforms, we must do that anyway, since pointers, and thus hash keys + and values, are only 32 bits wide). We track which inputs are parents of + which other inputs so that we can correctly recognize that types we have + traversed in children may cite types in parents, and so that we can process + the parents first.) + + Note that thanks to ld -r, the deduplicator can be fed its own output, so the + inputs may themselves have child dicts. Since we need to support this usage + anyway, we can use it in one other place. If the caller finds translation + units to be too small a unit ambiguous types, links can be 'cu-mapped', where + the caller provides a mapping of input TU names to output child dict names. + This mapping can fuse many child TUs into one potential child dict, so that + ambiguous types in any of those input TUs go into the same child dict. + When a many:1 cu-mapping is detected, the ctf_dedup machinery is called + repeatedly, once for every output name that has more than one input, to fuse + all the input TUs associated with a given output dict into one, and once again + as normal to deduplicate all those intermediate outputs (and any 1:1 inputs) + together. This has much higher memory usage than otherwise, because in the + intermediate state, all the output TUs are in memory at once and cannot be + lazily opened. It also has implications for the emission code: if types + appear ambiguously in multiple input TUs that are all mapped to the same + child dict, we cannot put them in children in the cu-mapping link phase + because this output is meant to *become* a child in the next link stage and + parent/child relationships are only one level deep: so instead, we just hide + all but one of the ambiguous types. + + There are a few other subtleties here that make this more complex than it + seems. Let's go over the steps above in more detail. + + 1) HASHING. + + [ctf_dedup_hash_type, ctf_dedup_rhash_type] + Hashing proceeds recursively, mixing in the properties of each input type + (including its name, if any), and then adding the hash values of every type + cited by that type. The result is stashed in the cd_type_hashes so other + phases can find the hash values of input types given their IDs, and so that + if we encounter this type again while hashing we can just return its hash + value: it is also stashed in the *output mapping*, a mapping from hash value + to the set of GIDs corresponding to that type in all inputs. We also keep + track of the GID of the first appearance of the type in any input (in + cd_output_first_gid), and the GID of structs, unions, and forwards that only + appear in one TU (in cd_struct_origin). See below for where these things are + used. + + Everything in this phase is time-critical, because it is operating over + non-deduplicated types and so may have hundreds or thousands of times the + data volume to deal with than later phases. Trace output is hidden behind + ENABLE_LIBCTF_HASH_DEBUGGING to prevent the sheer number of calls to + ctf_dprintf from slowing things down (tenfold slowdowns are observed purely + from the calls to ctf_dprintf(), even with debugging switched off), and keep + down the volume of output (hundreds of gigabytes of debug output are not + uncommon on larger links). + + We have to do *something* about potential cycles in the type graph. We'd + like to avoid emitting forwards in the final output if possible, because + forwards aren't much use: they have no members. We are mostly saved from + needing to worry about this at emission time by ctf_add_struct*() + automatically replacing newly-created forwards when the real struct/union + comes along. So we only have to avoid getting stuck in cycles during the + hashing phase, while also not confusing types that cite members that are + structs with each other. It is easiest to solve this problem by noting two + things: + + - all cycles in C depend on the presence of tagged structs/unions + - all tagged structs/unions have a unique name they can be disambiguated by + + [ctf_dedup_is_stub] + This means that we can break all cycles by ceasing to hash in cited types at + every tagged struct/union and instead hashing in a stub consisting of the + struct/union's *decorated name*, which is the name preceded by "s " or "u " + depending on the namespace (cached in cd_decorated_names). Forwards are + decorated identically (so a forward to "struct foo" would be represented as + "s foo"): this means that a citation of a forward to a type and a citation of + a concrete definition of a type with the same name ends up getting the same + hash value. + + Of course, it is quite possible to have two TUs with structs with the same + name and different definitions, but that's OK because when we scan for types + with ambiguous names we will identify these and mark them conflicting. + + We populate one thing to help conflictedness marking. No unconflicted type + may cite a conflicted one, but this means that conflictedness marking must + walk from types to the types that cite them, which is the opposite of the + usual order. We can make this easier to do by constructing a *citers* graph + in cd_citers, which points from types to the types that cite them: because we + emit forwards corresponding to every conflicted struct/union, we don't need + to do this for citations of structs/unions by other types. This is very + convenient for us, because that's the only type we don't traverse + recursively: so we can construct the citers graph at the same time as we + hash, rather than needing to add an extra pass. (This graph is a dynhash of + *type hash values*, so it's small: in effect it is automatically + deduplicated.) + + 2) COLLISIONAL MARKING. + + [ctf_dedup_detect_name_ambiguity, ctf_dedup_mark_conflicting_hash] + We identify types whose names collide during the hashing process, and count + the rough number of uses of each name (caching may throw it off a bit: this + doesn't need to be accurate). We then mark the less-frequently-cited types + with each names conflicting: the most-frequently-cited one goes into the + shared type dictionary, while all others are duplicated into per-TU + dictionaries, named after the input TU, that have the shared dictionary as a + parent. For structures and unions this is not quite good enough: we'd like + to have citations of forwards to ambiguously named structures and unions + *stay* as citations of forwards, so that the user can tell that the caller + didn't actually know which structure definition was meant: but if we put one + of those structures into the shared dictionary, it would supplant and replace + the forward, leaving no sign. So structures and unions do not take part in + this popularity contest: if their names are ambiguous, they are just + duplicated, and only a forward appears in the shared dict. + + [ctf_dedup_propagate_conflictedness] + The process of marking types conflicted is itself recursive: we recursively + traverse the cd_citers graph populated in the hashing pass above and mark + everything that we encounter conflicted (without wasting time re-marking + anything that is already marked). This naturally terminates just where we + want it to (at types that are cited by no other types, and at structures and + unions) and suffices to ensure that types that cite conflicted types are + always marked conflicted. + + [ctf_dedup_conflictify_unshared, ctf_dedup_multiple_input_dicts] + When linking in CTF_LINK_SHARE_DUPLICATED mode, we would like all types that + are used in only one TU to end up in a per-CU dict. The easiest way to do + that is to mark them conflicted. ctf_dedup_conflictify_unshared does this, + traversing the output mapping and using ctf_dedup_multiple_input_dicts to + check the number of input dicts each distinct type hash value came from: + types that only came from one get marked conflicted. One caveat here is that + we need to consider both structs and forwards to them: a struct that appears + in one TU and has a dozen citations to an opaque forward in other TUs should + *not* be considered to be used in only one TU, because users would find it + useful to be able to traverse into opaque structures of that sort: so we use + cd_struct_origin to check both structs/unions and the forwards corresponding + to them. + + 3) EMISSION. + + [ctf_dedup_walk_output_mapping, ctf_dedup_rwalk_output_mapping, + ctf_dedup_rwalk_one_output_mapping] + Emission involves another walk of the entire output mapping, this time + traversing everything other than struct members, recursively. Types are + emitted from leaves to trunk, emitting all types a type cites before emitting + the type itself. We sort the output mapping before traversing it, for + reproducibility and also correctness: the input dicts may have parent/child + relationships, so we simply sort all types that first appear in parents + before all children, then sort types that first appear in dicts appearing + earlier on the linker command line before those that appear later, then sort + by input ctf_id_t. (This is where we use cd_output_first_gid, collected + above.) + + The walking is done using a recursive traverser which arranges to not revisit + any type already visited and to call its callback once per input GID for + input GIDs corresponding to conflicted output types. The traverser only + finds input types and calls a callback for them as many times as the output + needs to appear: it doesn't try to figure out anything about where the output + might go. That's done by the callback based on whether the type is + marked conflicted or not. + + [ctf_dedup_emit_type, ctf_dedup_id_to_target, ctf_dedup_synthesize_forward] + ctf_dedup_emit_type is the (sole) callback for ctf_dedup_walk_output_mapping. + Conflicted types have all necessary dictionaries created, and then we emit + the type into each dictionary in turn, working over each input CTF type + corresponding to each hash value and using ctf_dedup_id_to_target to map each + input ctf_id_t into the corresponding type in the output (dealing with input + ctf_id_t's with parents in the process by simply chasing to the parent dict + if the type we're looking up is in there). Emitting structures involves + simply noting that the members of this structure need emission later on: + because you cannot cite a single structure member from another type, we avoid + emitting the members at this stage to keep recursion depths down a bit. + + At this point, if we have by some mischance decided that two different types + with child types that hash to different values have in fact got the same hash + value themselves and *not* marked it conflicting, the type walk will walk + only *one* of them and in all likelihood we'll find that we are trying to + emit a type into some child dictionary that references a type that was never + emitted into that dictionary and assertion-fail. This always indicates a bug + in the conflictedness marking machinery or the hashing code, or both. + + ctf_dedup_id_to_target calls ctf_dedup_synthesize_forward to do one extra + thing, alluded to above: if this is a conflicted tagged structure or union, + and the target is the shared dict (i.e., the type we're being asked to emit + is not itself conflicted so can't just point straight at the conflicted + type), we instead synthesise a forward with the same name, emit it into the + shared dict, record it in cd_output_emission_conflicted_forwards so that we + don't re-emit it, and return it. This means that cycles that contain + conflicts do not cause the entire cycle to be replicated in every child: only + that piece of the cycle which takes you back as far as the closest tagged + struct/union needs to be replicated. This trick means that no part of the + deduplicator needs a cycle detector: every recursive walk can stop at tagged + structures. + + [ctf_dedup_emit_struct_members] + The final stage of emission is to walk over all structures with members + that need emission and emit all of them. Every type has been emitted at + this stage, so emission cannot fail. + + [ctf_dedup_populate_type_mappings, ctf_dedup_populate_type_mapping] + Finally, we update the input -> output type ID mappings used by the ctf-link + machinery to update all the other sections. This is surprisingly expensive + and may be replaced with a scheme which lets the ctf-link machinery extract + the needed info directly from the deduplicator. */ + +/* Possible future optimizations are flagged with 'optimization opportunity' + below. */ + +/* Global optimization opportunity: a GC pass, eliminating types with no direct + or indirect citations from the other sections in the dictionary. */ + +/* Internal flag values for ctf_dedup_hash_type. */ + +/* Child call: consider forwardable types equivalent to forwards or stubs below + this point. */ +#define CTF_DEDUP_HASH_INTERNAL_CHILD 0x01 + +/* Transform references to single ctf_id_ts in passed-in inputs into a number + that will fit in a uint64_t. Needs rethinking if CTF_MAX_TYPE is boosted. + + On 32-bit platforms, we pack things together differently: see the note + above. */ + +#if UINTPTR_MAX < UINT64_MAX +# define IDS_NEED_ALLOCATION 1 +# define CTF_DEDUP_GID(fp, input, type) id_to_packed_id (fp, input, type) +# define CTF_DEDUP_GID_TO_INPUT(id) packed_id_to_input (id) +# define CTF_DEDUP_GID_TO_TYPE(id) packed_id_to_type (id) +#else +# define CTF_DEDUP_GID(fp, input, type) \ + (void *) (((uint64_t) input) << 32 | (type)) +# define CTF_DEDUP_GID_TO_INPUT(id) ((int) (((uint64_t) id) >> 32)) +# define CTF_DEDUP_GID_TO_TYPE(id) (ctf_id_t) (((uint64_t) id) & ~(0xffffffff00000000ULL)) +#endif + +#ifdef IDS_NEED_ALLOCATION + + /* This is the 32-bit path, which stores GIDs in a pool and returns a pointer + into the pool. It is notably less efficient than the 64-bit direct storage + approach, but with a smaller key, this is all we can do. */ + +static void * +id_to_packed_id (ctf_file_t *fp, int input_num, ctf_id_t type) +{ + const void *lookup; + ctf_type_id_key_t *dynkey = NULL; + ctf_type_id_key_t key = { input_num, type }; + + if (!ctf_dynhash_lookup_kv (fp->ctf_dedup.cd_id_to_file_t, + &key, &lookup, NULL)) + { + if ((dynkey = malloc (sizeof (ctf_type_id_key_t))) == NULL) + goto oom; + memcpy (dynkey, &key, sizeof (ctf_type_id_key_t)); + + if (ctf_dynhash_insert (fp->ctf_dedup.cd_id_to_file_t, dynkey, NULL) < 0) + goto oom; + + ctf_dynhash_lookup_kv (fp->ctf_dedup.cd_id_to_file_t, + dynkey, &lookup, NULL); + } + /* We use a raw assert() here because there isn't really a way to get any sort + of error back from this routine without vastly complicating things for the + much more common case of !IDS_NEED_ALLOCATION. */ + assert (lookup); + return (void *) lookup; + + oom: + free (dynkey); + ctf_set_errno (fp, ENOMEM); + return NULL; +} + +static int +packed_id_to_input (const void *id) +{ + const ctf_type_id_key_t *key = (ctf_type_id_key_t *) id; + + return key->ctii_input_num; +} + +static ctf_id_t +packed_id_to_type (const void *id) +{ + const ctf_type_id_key_t *key = (ctf_type_id_key_t *) id; + + return key->ctii_type; +} +#endif + +/* Make an element in a dynhash-of-dynsets, or return it if already present. */ + +static ctf_dynset_t * +make_set_element (ctf_dynhash_t *set, const void *key) +{ + ctf_dynset_t *element; + + if ((element = ctf_dynhash_lookup (set, key)) == NULL) + { + if ((element = ctf_dynset_create (htab_hash_string, + ctf_dynset_eq_string, + NULL)) == NULL) + return NULL; + + if (ctf_dynhash_insert (set, (void *) key, element) < 0) + { + ctf_dynset_destroy (element); + return NULL; + } + } + + return element; +} + +/* Initialize the dedup atoms table. */ +int +ctf_dedup_atoms_init (ctf_file_t *fp) +{ + if (fp->ctf_dedup_atoms) + return 0; + + if (!fp->ctf_dedup_atoms_alloc) + { + if ((fp->ctf_dedup_atoms_alloc + = ctf_dynset_create (htab_hash_string, ctf_dynset_eq_string, + free)) == NULL) + return ctf_set_errno (fp, ENOMEM); + } + fp->ctf_dedup_atoms = fp->ctf_dedup_atoms_alloc; + return 0; +} + +/* Intern things in the dedup atoms table. */ + +static const char * +intern (ctf_file_t *fp, char *atom) +{ + const void *foo; + + if (atom == NULL) + return NULL; + + if (!ctf_dynset_exists (fp->ctf_dedup_atoms, atom, &foo)) + { + if (ctf_dynset_insert (fp->ctf_dedup_atoms, atom) < 0) + { + ctf_set_errno (fp, ENOMEM); + return NULL; + } + foo = atom; + } + else + free (atom); + + return (const char *) foo; +} + +/* Add an indication of the namespace to a type name in a way that is not valid + for C identifiers. Used to maintain hashes of type names to other things + while allowing for the four C namespaces (normal, struct, union, enum). + Return a new dynamically-allocated string. */ +static const char * +ctf_decorate_type_name (ctf_file_t *fp, const char *name, int kind) +{ + ctf_dedup_t *d = &fp->ctf_dedup; + const char *ret; + const char *k; + char *p; + size_t i; + + switch (kind) + { + case CTF_K_STRUCT: + k = "s "; + i = 0; + break; + case CTF_K_UNION: + k = "u "; + i = 1; + break; + case CTF_K_ENUM: + k = "e "; + i = 2; + break; + default: + k = ""; + i = 3; + } + + if ((ret = ctf_dynhash_lookup (d->cd_decorated_names[i], name)) == NULL) + { + char *str; + + if ((str = malloc (strlen (name) + strlen (k) + 1)) == NULL) + goto oom; + + p = stpcpy (str, k); + strcpy (p, name); + ret = intern (fp, str); + if (!ret) + goto oom; + + if (ctf_dynhash_cinsert (d->cd_decorated_names[i], name, ret) < 0) + goto oom; + } + + return ret; + + oom: + ctf_set_errno (fp, ENOMEM); + return NULL; +} + +/* Hash a type, possibly debugging-dumping something about it as well. */ +static inline void +ctf_dedup_sha1_add (ctf_sha1_t *sha1, const void *buf, size_t len, + const char *description _libctf_unused_, + unsigned long depth _libctf_unused_) +{ + ctf_sha1_add (sha1, buf, len); + +#ifdef ENABLE_LIBCTF_HASH_DEBUGGING + ctf_sha1_t tmp; + char tmp_hval[CTF_SHA1_SIZE]; + tmp = *sha1; + ctf_sha1_fini (&tmp, tmp_hval); + ctf_dprintf ("%lu: after hash addition of %s: %s\n", depth, description, + tmp_hval); +#endif +} + +static const char * +ctf_dedup_hash_type (ctf_file_t *fp, ctf_file_t *input, + ctf_file_t **inputs, uint32_t *parents, + int input_num, ctf_id_t type, int flags, + unsigned long depth, + int (*populate_fun) (ctf_file_t *fp, + ctf_file_t *input, + ctf_file_t **inputs, + int input_num, + ctf_id_t type, + void *id, + const char *decorated_name, + const char *hash)); + +/* Determine whether this type is being hashed as a stub (in which case it is + unsafe to cache it). */ +static int +ctf_dedup_is_stub (const char *name, int kind, int fwdkind, int flags) +{ + /* We can cache all types unless we are recursing to children and are hashing + in a tagged struct, union or forward, all of which are replaced with their + decorated name as a stub and will have different hash values when hashed at + the top level. */ + + return ((flags & CTF_DEDUP_HASH_INTERNAL_CHILD) && name + && (kind == CTF_K_STRUCT || kind == CTF_K_UNION + || (kind == CTF_K_FORWARD && (fwdkind == CTF_K_STRUCT + || fwdkind == CTF_K_UNION)))); +} + +/* Populate struct_origin if need be (not already populated, or populated with + a different origin), in which case it must go to -1, "shared".) + + Only called for forwards or forwardable types with names, when the link mode + is CTF_LINK_SHARE_DUPLICATED. */ +static int +ctf_dedup_record_origin (ctf_file_t *fp, int input_num, const char *decorated, + void *id) +{ + ctf_dedup_t *d = &fp->ctf_dedup; + void *origin; + int populate_origin = 0; + + if (ctf_dynhash_lookup_kv (d->cd_struct_origin, decorated, NULL, &origin)) + { + if (CTF_DEDUP_GID_TO_INPUT (origin) != input_num + && CTF_DEDUP_GID_TO_INPUT (origin) != -1) + { + populate_origin = 1; + origin = CTF_DEDUP_GID (fp, -1, -1); + } + } + else + { + populate_origin = 1; + origin = id; + } + + if (populate_origin) + if (ctf_dynhash_cinsert (d->cd_struct_origin, decorated, origin) < 0) + return ctf_set_errno (fp, errno); + return 0; +} + +/* Do the underlying hashing and recursion for ctf_dedup_hash_type (which it + calls, recursively). */ + +static const char * +ctf_dedup_rhash_type (ctf_file_t *fp, ctf_file_t *input, ctf_file_t **inputs, + uint32_t *parents, int input_num, ctf_id_t type, + void *type_id, const ctf_type_t *tp, const char *name, + const char *decorated, int kind, int flags, + unsigned long depth, + int (*populate_fun) (ctf_file_t *fp, + ctf_file_t *input, + ctf_file_t **inputs, + int input_num, + ctf_id_t type, + void *id, + const char *decorated_name, + const char *hash)) +{ + ctf_dedup_t *d = &fp->ctf_dedup; + ctf_next_t *i = NULL; + ctf_sha1_t hash; + ctf_id_t child_type; + char hashbuf[CTF_SHA1_SIZE]; + const char *hval = NULL; + const char *whaterr; + int err; + + const char *citer = NULL; + ctf_dynset_t *citers = NULL; + + /* Add a citer to the citers set. */ +#define ADD_CITER(citers, hval) \ + do \ + { \ + whaterr = N_("error updating citers"); \ + if (!citers) \ + if ((citers = ctf_dynset_create (htab_hash_string, \ + ctf_dynset_eq_string, \ + NULL)) == NULL) \ + goto oom; \ + if (ctf_dynset_cinsert (citers, hval) < 0) \ + goto oom; \ + } while (0) + + /* If this is a named struct or union or a forward to one, and this is a child + traversal, treat this type as if it were a forward -- do not recurse to + children, ignore all content not already hashed in, and hash in the + decorated name of the type instead. */ + + if (ctf_dedup_is_stub (name, kind, tp->ctt_type, flags)) + { +#ifdef ENABLE_LIBCTF_HASH_DEBUGGING + ctf_dprintf ("Struct/union/forward citation: substituting forwarding " + "stub with decorated name %s\n", decorated); + +#endif + ctf_sha1_init (&hash); + ctf_dedup_sha1_add (&hash, decorated, strlen (decorated) + 1, + "decorated struct/union/forward name", depth); + ctf_sha1_fini (&hash, hashbuf); + + if ((hval = intern (fp, strdup (hashbuf))) == NULL) + { + ctf_err_warn (fp, 0, 0, _("%s (%i): out of memory during forwarding-" + "stub hashing for type with GID %p"), + ctf_link_input_name (input), input_num, type_id); + return NULL; /* errno is set for us. */ + } + + /* In share-duplicated link mode, make sure the origin of this type is + recorded, even if this is a type in a parent dict which will not be + directly traversed. */ + if (d->cd_link_flags & CTF_LINK_SHARE_DUPLICATED + && ctf_dedup_record_origin (fp, input_num, decorated, type_id) < 0) + return NULL; /* errno is set for us. */ + + return hval; + } + + /* Now ensure that subsequent recursive calls (but *not* the top-level call) + get this treatment. */ + flags |= CTF_DEDUP_HASH_INTERNAL_CHILD; + + /* If this is a struct, union, or forward with a name, record the unique + originating input TU, if there is one. */ + + if (decorated && (ctf_forwardable_kind (kind) || kind != CTF_K_FORWARD)) + if (d->cd_link_flags & CTF_LINK_SHARE_DUPLICATED + && ctf_dedup_record_origin (fp, input_num, decorated, type_id) < 0) + return NULL; /* errno is set for us. */ + + /* Mix in invariant stuff, transforming the type kind if needed. Note that + the vlen is *not* hashed in: the actual variable-length info is hashed in + instead, piecewise. The vlen is not part of the type, only the + variable-length data is: identical types with distinct vlens are quite + possible. Equally, we do not want to hash in the isroot flag: both the + compiler and the deduplicator set the nonroot flag to indicate clashes with + *other types in the same TU* with the same name: so two types can easily + have distinct nonroot flags, yet be exactly the same type.*/ + +#ifdef ENABLE_LIBCTF_HASH_DEBUGGING + ctf_dprintf ("%lu: hashing thing with ID %i/%lx (kind %i): %s.\n", + depth, input_num, type, kind, name ? name : ""); +#endif + + ctf_sha1_init (&hash); + if (name) + ctf_dedup_sha1_add (&hash, name, strlen (name) + 1, "name", depth); + ctf_dedup_sha1_add (&hash, &kind, sizeof (uint32_t), "kind", depth); + + /* Hash content of this type. */ + switch (kind) + { + case CTF_K_UNKNOWN: + /* No extra state. */ + break; + case CTF_K_FORWARD: + + /* Add the forwarded kind, stored in the ctt_type. */ + ctf_dedup_sha1_add (&hash, &tp->ctt_type, sizeof (tp->ctt_type), + "forwarded kind", depth); + break; + case CTF_K_INTEGER: + case CTF_K_FLOAT: + { + ctf_encoding_t ep; + memset (&ep, 0, sizeof (ctf_encoding_t)); + + ctf_dedup_sha1_add (&hash, &tp->ctt_size, sizeof (uint32_t), "size", + depth); + if (ctf_type_encoding (input, type, &ep) < 0) + { + whaterr = N_("error getting encoding"); + goto err; + } + ctf_dedup_sha1_add (&hash, &ep, sizeof (ctf_encoding_t), "encoding", + depth); + break; + } + /* Types that reference other types. */ + case CTF_K_TYPEDEF: + case CTF_K_VOLATILE: + case CTF_K_CONST: + case CTF_K_RESTRICT: + case CTF_K_POINTER: + /* Hash the referenced type, if not already hashed, and mix it in. */ + child_type = ctf_type_reference (input, type); + if ((hval = ctf_dedup_hash_type (fp, input, inputs, parents, input_num, + child_type, flags, depth, + populate_fun)) == NULL) + { + whaterr = N_("error doing referenced type hashing"); + goto err; + } + ctf_dedup_sha1_add (&hash, hval, strlen (hval) + 1, "referenced type", + depth); + citer = hval; + + break; + + /* The slices of two types hash identically only if the type they overlay + also has the same encoding. This is not ideal, but in practice will work + well enough. We work directly rather than using the CTF API because + we do not want the slice's normal automatically-shine-through + semantics to kick in here. */ + case CTF_K_SLICE: + { + const ctf_slice_t *slice; + const ctf_dtdef_t *dtd; + ssize_t size; + ssize_t increment; + + child_type = ctf_type_reference (input, type); + ctf_get_ctt_size (input, tp, &size, &increment); + ctf_dedup_sha1_add (&hash, &size, sizeof (ssize_t), "size", depth); + + if ((hval = ctf_dedup_hash_type (fp, input, inputs, parents, input_num, + child_type, flags, depth, + populate_fun)) == NULL) + { + whaterr = N_("error doing slice-referenced type hashing"); + goto err; + } + ctf_dedup_sha1_add (&hash, hval, strlen (hval) + 1, "sliced type", + depth); + citer = hval; + + if ((dtd = ctf_dynamic_type (input, type)) != NULL) + slice = &dtd->dtd_u.dtu_slice; + else + slice = (ctf_slice_t *) ((uintptr_t) tp + increment); + + ctf_dedup_sha1_add (&hash, &slice->cts_offset, + sizeof (slice->cts_offset), "slice offset", depth); + ctf_dedup_sha1_add (&hash, &slice->cts_bits, + sizeof (slice->cts_bits), "slice bits", depth); + break; + } + + case CTF_K_ARRAY: + { + ctf_arinfo_t ar; + + if (ctf_array_info (input, type, &ar) < 0) + { + whaterr = N_("error getting array info"); + goto err; + } + + if ((hval = ctf_dedup_hash_type (fp, input, inputs, parents, input_num, + ar.ctr_contents, flags, depth, + populate_fun)) == NULL) + { + whaterr = N_("error doing array contents type hashing"); + goto err; + } + ctf_dedup_sha1_add (&hash, hval, strlen (hval) + 1, "array contents", + depth); + ADD_CITER (citers, hval); + + if ((hval = ctf_dedup_hash_type (fp, input, inputs, parents, input_num, + ar.ctr_index, flags, depth, + populate_fun)) == NULL) + { + whaterr = N_("error doing array index type hashing"); + goto err; + } + ctf_dedup_sha1_add (&hash, hval, strlen (hval) + 1, "array index", + depth); + ctf_dedup_sha1_add (&hash, &ar.ctr_nelems, sizeof (ar.ctr_nelems), + "element count", depth); + ADD_CITER (citers, hval); + + break; + } + case CTF_K_FUNCTION: + { + ctf_funcinfo_t fi; + ctf_id_t *args; + uint32_t j; + + if (ctf_func_type_info (input, type, &fi) < 0) + { + whaterr = N_("error getting func type info"); + goto err; + } + + if ((hval = ctf_dedup_hash_type (fp, input, inputs, parents, input_num, + fi.ctc_return, flags, depth, + populate_fun)) == NULL) + { + whaterr = N_("error getting func return type"); + goto err; + } + ctf_dedup_sha1_add (&hash, hval, strlen (hval) + 1, "func return", + depth); + ctf_dedup_sha1_add (&hash, &fi.ctc_argc, sizeof (fi.ctc_argc), + "func argc", depth); + ctf_dedup_sha1_add (&hash, &fi.ctc_flags, sizeof (fi.ctc_flags), + "func flags", depth); + ADD_CITER (citers, hval); + + if ((args = calloc (fi.ctc_argc, sizeof (ctf_id_t))) == NULL) + { + whaterr = N_("error doing memory allocation"); + goto err; + } + + if (ctf_func_type_args (input, type, fi.ctc_argc, args) < 0) + { + free (args); + whaterr = N_("error getting func arg type"); + goto err; + } + for (j = 0; j < fi.ctc_argc; j++) + { + if ((hval = ctf_dedup_hash_type (fp, input, inputs, parents, + input_num, args[j], flags, depth, + populate_fun)) == NULL) + { + free (args); + whaterr = N_("error doing func arg type hashing"); + goto err; + } + ctf_dedup_sha1_add (&hash, hval, strlen (hval) + 1, "func arg type", + depth); + ADD_CITER (citers, hval); + } + free (args); + break; + } + case CTF_K_ENUM: + { + int val; + const char *ename; + + ctf_dedup_sha1_add (&hash, &tp->ctt_size, sizeof (uint32_t), + "enum size", depth); + while ((ename = ctf_enum_next (input, type, &i, &val)) != NULL) + { + ctf_dedup_sha1_add (&hash, ename, strlen (ename) + 1, "enumerator", + depth); + ctf_dedup_sha1_add (&hash, &val, sizeof (val), "enumerand", depth); + } + if (ctf_errno (input) != ECTF_NEXT_END) + { + whaterr = N_("error doing enum member iteration"); + goto err; + } + break; + } + /* Top-level only. */ + case CTF_K_STRUCT: + case CTF_K_UNION: + { + ssize_t offset; + const char *mname; + ctf_id_t membtype; + ssize_t size; + + ctf_get_ctt_size (input, tp, &size, NULL); + ctf_dedup_sha1_add (&hash, &size, sizeof (ssize_t), "struct size", + depth); + + while ((offset = ctf_member_next (input, type, &i, &mname, + &membtype)) >= 0) + { + if (mname == NULL) + mname = ""; + ctf_dedup_sha1_add (&hash, mname, strlen (mname) + 1, + "member name", depth); + +#ifdef ENABLE_LIBCTF_HASH_DEBUGGING + ctf_dprintf ("%lu: Traversing to member %s\n", depth, mname); +#endif + if ((hval = ctf_dedup_hash_type (fp, input, inputs, parents, + input_num, membtype, flags, depth, + populate_fun)) == NULL) + { + whaterr = N_("error doing struct/union member type hashing"); + goto iterr; + } + + ctf_dedup_sha1_add (&hash, hval, strlen (hval) + 1, "member hash", + depth); + ctf_dedup_sha1_add (&hash, &offset, sizeof (offset), "member offset", + depth); + ADD_CITER (citers, hval); + } + if (ctf_errno (input) != ECTF_NEXT_END) + { + whaterr = N_("error doing struct/union member iteration"); + goto err; + } + break; + } + default: + whaterr = N_("error: unknown type kind"); + goto err; + } + ctf_sha1_fini (&hash, hashbuf); + + if ((hval = intern (fp, strdup (hashbuf))) == NULL) + { + whaterr = N_("cannot intern hash"); + goto oom; + } + + /* Populate the citers for this type's subtypes, now the hash for the type + itself is known. */ + whaterr = N_("error tracking citers"); + + if (citer) + { + ctf_dynset_t *citer_hashes; + + if ((citer_hashes = make_set_element (d->cd_citers, citer)) == NULL) + goto oom; + if (ctf_dynset_cinsert (citer_hashes, hval) < 0) + goto oom; + } + else if (citers) + { + const void *k; + + while ((err = ctf_dynset_cnext (citers, &i, &k)) == 0) + { + ctf_dynset_t *citer_hashes; + citer = (const char *) k; + + if ((citer_hashes = make_set_element (d->cd_citers, citer)) == NULL) + goto oom; + + if (ctf_dynset_exists (citer_hashes, hval, NULL)) + continue; + if (ctf_dynset_cinsert (citer_hashes, hval) < 0) + goto oom; + } + if (err != ECTF_NEXT_END) + goto err; + ctf_dynset_destroy (citers); + } + + return hval; + + iterr: + ctf_next_destroy (i); + err: + ctf_sha1_fini (&hash, NULL); + ctf_err_warn (fp, 0, 0, _("%s (%i): %s: during type hashing for type %lx, " + "kind %i"), ctf_link_input_name (input), + input_num, gettext (whaterr), type, kind); + return NULL; + oom: + ctf_set_errno (fp, errno); + ctf_err_warn (fp, 0, 0, _("%s (%i): %s: during type hashing for type %lx, " + "kind %i"), ctf_link_input_name (input), + input_num, gettext (whaterr), type, kind); + return NULL; +} + +/* Hash a TYPE in the INPUT: FP is the eventual output, where the ctf_dedup + state is stored. INPUT_NUM is the number of this input in the set of inputs. + Record its hash in FP's cd_type_hashes once it is known. PARENTS is + described in the comment above ctf_dedup. + + (The flags argument currently accepts only the flag + CTF_DEDUP_HASH_INTERNAL_CHILD, an implementation detail used to prevent + struct/union hashing in recursive traversals below the TYPE.) + + We use the CTF API rather than direct access wherever possible, because types + that appear identical through the API should be considered identical, with + one exception: slices should only be considered identical to other slices, + not to the corresponding unsliced type. + + The POPULATE_FUN is a mandatory hook that populates other mappings with each + type we see (excepting types that are recursively hashed as stubs). The + caller should not rely on the order of calls to this hook, though it will be + called at least once for every non-stub reference to every type. + + Returns a hash value (an atom), or NULL on error. */ + +static const char * +ctf_dedup_hash_type (ctf_file_t *fp, ctf_file_t *input, + ctf_file_t **inputs, uint32_t *parents, + int input_num, ctf_id_t type, int flags, + unsigned long depth, + int (*populate_fun) (ctf_file_t *fp, + ctf_file_t *input, + ctf_file_t **inputs, + int input_num, + ctf_id_t type, + void *id, + const char *decorated_name, + const char *hash)) +{ + ctf_dedup_t *d = &fp->ctf_dedup; + const ctf_type_t *tp; + void *type_id; + const char *hval = NULL; + const char *name; + const char *whaterr; + const char *decorated = NULL; + uint32_t kind, fwdkind; + + depth++; + +#ifdef ENABLE_LIBCTF_HASH_DEBUGGING + ctf_dprintf ("%lu: ctf_dedup_hash_type (%i, %lx, flags %x)\n", depth, input_num, type, flags); +#endif + + /* The unimplemented type doesn't really exist, but must be noted in parent + hashes: so it gets a fixed, arbitrary hash. */ + if (type == 0) + return "00000000000000000000"; + + /* Possible optimization: if the input type is in the parent type space, just + copy recursively-cited hashes from the parent's types into the output + mapping rather than rehashing them. */ + + type_id = CTF_DEDUP_GID (fp, input_num, type); + + if ((tp = ctf_lookup_by_id (&input, type)) == NULL) + { + ctf_set_errno (fp, ctf_errno (input)); + ctf_err_warn (fp, 0, 0, _("%s (%i): lookup failure for type %lx: " + "flags %x"), ctf_link_input_name (input), + input_num, type, flags); + return NULL; /* errno is set for us. */ + } + + kind = LCTF_INFO_KIND (input, tp->ctt_info); + name = ctf_strraw (input, tp->ctt_name); + + if (tp->ctt_name == 0 || !name || name[0] == '\0') + name = NULL; + + /* Treat the unknown kind just like the unimplemented type. */ + if (kind == CTF_K_UNKNOWN) + return "00000000000000000000"; + + /* Decorate the name appropriately for the namespace it appears in: forwards + appear in the namespace of their referent. */ + + fwdkind = kind; + if (name) + { + if (kind == CTF_K_FORWARD) + fwdkind = tp->ctt_type; + + if ((decorated = ctf_decorate_type_name (fp, name, fwdkind)) == NULL) + return NULL; /* errno is set for us. */ + } + + /* If not hashing a stub, we can rely on various sorts of caches. + + Optimization opportunity: we may be able to avoid calling the populate_fun + sometimes here. */ + + if (!ctf_dedup_is_stub (name, kind, fwdkind, flags)) + { + if ((hval = ctf_dynhash_lookup (d->cd_type_hashes, type_id)) != NULL) + { +#ifdef ENABLE_LIBCTF_HASH_DEBUGGING + ctf_dprintf ("%lu: Known hash for ID %i/%lx: %s\n", depth, input_num, + type, hval); +#endif + populate_fun (fp, input, inputs, input_num, type, type_id, + decorated, hval); + + return hval; + } + } + + /* We have never seen this type before, and must figure out its hash and the + hashes of the types it cites. + + Hash this type, and call ourselves recursively. (The hashing part is + optional, and is disabled if overidden_hval is set.) */ + + if ((hval = ctf_dedup_rhash_type (fp, input, inputs, parents, input_num, + type, type_id, tp, name, decorated, + kind, flags, depth, populate_fun)) == NULL) + return NULL; /* errno is set for us. */ + + /* The hash of this type is now known: record it unless caching is unsafe + because the hash value will change later. This will be the final storage + of this type's hash, so we call the population function on it. */ + + if (!ctf_dedup_is_stub (name, kind, fwdkind, flags)) + { +#ifdef ENABLE_LIBCTF_HASH_DEBUGGING + ctf_dprintf ("Caching %lx, ID %p (%s), %s in final location\n", type, + type_id, name ? name : "", hval); +#endif + + if (ctf_dynhash_cinsert (d->cd_type_hashes, type_id, hval) < 0) + { + whaterr = N_("error hash caching"); + goto oom; + } + + if (populate_fun (fp, input, inputs, input_num, type, type_id, + decorated, hval) < 0) + { + whaterr = N_("error calling population function"); + goto err; /* errno is set for us. */ + } + } + +#ifdef ENABLE_LIBCTF_HASH_DEBUGGING + ctf_dprintf ("%lu: Returning final hash for ID %i/%lx: %s\n", depth, + input_num, type, hval); +#endif + return hval; + + oom: + ctf_set_errno (fp, errno); + err: + ctf_err_warn (fp, 0, 0, _("%s (%i): %s: during type hashing, " + "type %lx, kind %i"), + ctf_link_input_name (input), input_num, + gettext (whaterr), type, kind); + return NULL; +} + +/* Populate a number of useful mappings not directly used by the hashing + machinery: the output mapping, the cd_name_counts mapping from name -> hash + -> count of hashval deduplication state for a given hashed type, and the + cd_output_first_tu mapping. */ + +static int +ctf_dedup_populate_mappings (ctf_file_t *fp, ctf_file_t *input _libctf_unused_, + ctf_file_t **inputs _libctf_unused_, + int input_num _libctf_unused_, + ctf_id_t type _libctf_unused_, void *id, + const char *decorated_name, + const char *hval) +{ + ctf_dedup_t *d = &fp->ctf_dedup; + ctf_dynset_t *type_ids; + ctf_dynhash_t *name_counts; + long int count; + +#ifdef ENABLE_LIBCTF_HASH_DEBUGGING + ctf_dprintf ("Hash %s, %s, into output mapping for %i/%lx @ %s\n", + hval, decorated_name ? decorated_name : "(unnamed)", + input_num, type, ctf_link_input_name (input)); + + const char *orig_hval; + + /* Make sure we never map a single GID to multiple hash values. */ + + if ((orig_hval = ctf_dynhash_lookup (d->cd_output_mapping_guard, id)) != NULL) + { + /* We can rely on pointer identity here, since all hashes are + interned. */ + if (!ctf_assert (fp, orig_hval == hval)) + return -1; + } + else + if (ctf_dynhash_cinsert (d->cd_output_mapping_guard, id, hval) < 0) + return ctf_set_errno (fp, errno); +#endif + + /* Record the type in the output mapping: if this is the first time this type + has been seen, also record it in the cd_output_first_gid. Because we + traverse types in TU order and we do not merge types after the hashing + phase, this will be the lowest TU this type ever appears in. */ + + if ((type_ids = ctf_dynhash_lookup (d->cd_output_mapping, + hval)) == NULL) + { + if (ctf_dynhash_cinsert (d->cd_output_first_gid, hval, id) < 0) + return ctf_set_errno (fp, errno); + + if ((type_ids = ctf_dynset_create (htab_hash_pointer, + htab_eq_pointer, + NULL)) == NULL) + return ctf_set_errno (fp, errno); + if (ctf_dynhash_insert (d->cd_output_mapping, (void *) hval, + type_ids) < 0) + { + ctf_dynset_destroy (type_ids); + return ctf_set_errno (fp, errno); + } + } +#ifdef ENABLE_LIBCTF_HASH_DEBUGGING + { + /* Verify that all types with this hash are of the same kind, and that the + first TU a type was seen in never falls. */ + + int err; + const void *one_id; + ctf_next_t *i = NULL; + int orig_kind = ctf_type_kind_unsliced (input, type); + int orig_first_tu; + + orig_first_tu = CTF_DEDUP_GID_TO_INPUT + (ctf_dynhash_lookup (d->cd_output_first_gid, hval)); + if (!ctf_assert (fp, orig_first_tu <= CTF_DEDUP_GID_TO_INPUT (id))) + return -1; + + while ((err = ctf_dynset_cnext (type_ids, &i, &one_id)) == 0) + { + ctf_file_t *foo = inputs[CTF_DEDUP_GID_TO_INPUT (one_id)]; + ctf_id_t bar = CTF_DEDUP_GID_TO_TYPE (one_id); + if (ctf_type_kind_unsliced (foo, bar) != orig_kind) + { + ctf_err_warn (fp, 1, 0, "added wrong kind to output mapping " + "for hash %s named %s: %p/%lx from %s is " + "kind %i, but newly-added %p/%lx from %s is " + "kind %i", hval, + decorated_name ? decorated_name : "(unnamed)", + (void *) foo, bar, + ctf_link_input_name (foo), + ctf_type_kind_unsliced (foo, bar), + (void *) input, type, + ctf_link_input_name (input), orig_kind); + if (!ctf_assert (fp, ctf_type_kind_unsliced (foo, bar) + == orig_kind)) + return -1; + } + } + if (err != ECTF_NEXT_END) + return ctf_set_errno (fp, err); + } +#endif + + /* This function will be repeatedly called for the same types many times: + don't waste time reinserting the same keys in that case. */ + if (!ctf_dynset_exists (type_ids, id, NULL) + && ctf_dynset_insert (type_ids, id) < 0) + return ctf_set_errno (fp, errno); + + /* The rest only needs to happen for types with names. */ + if (!decorated_name) + return 0; + + /* Count the number of occurrences of the hash value for this GID. */ + + hval = ctf_dynhash_lookup (d->cd_type_hashes, id); + + /* Mapping from name -> hash(hashval, count) not already present? */ + if ((name_counts = ctf_dynhash_lookup (d->cd_name_counts, + decorated_name)) == NULL) + { + if ((name_counts = ctf_dynhash_create (ctf_hash_string, + ctf_hash_eq_string, + NULL, NULL)) == NULL) + return ctf_set_errno (fp, errno); + if (ctf_dynhash_cinsert (d->cd_name_counts, decorated_name, + name_counts) < 0) + { + ctf_dynhash_destroy (name_counts); + return ctf_set_errno (fp, errno); + } + } + + /* This will, conveniently, return NULL (i.e. 0) for a new entry. */ + count = (long int) (uintptr_t) ctf_dynhash_lookup (name_counts, hval); + + if (ctf_dynhash_cinsert (name_counts, hval, + (const void *) (uintptr_t) (count + 1)) < 0) + return ctf_set_errno (fp, errno); + + return 0; +} + +/* Mark a single hash as corresponding to a conflicting type. Mark all types + that cite it as conflicting as well, terminating the recursive walk only when + types that are already conflicted or types do not cite other types are seen. + (Tagged structures and unions do not appear in the cd_citers graph, so the + walk also terminates there, since any reference to a conflicting structure is + just going to reference an unconflicting forward instead: see + ctf_dedup_maybe_synthesize_forward.) */ + +static int +ctf_dedup_mark_conflicting_hash (ctf_file_t *fp, const char *hval) +{ + ctf_dedup_t *d = &fp->ctf_dedup; + ctf_next_t *i = NULL; + int err; + const void *k; + ctf_dynset_t *citers; + + /* Mark conflicted if not already so marked. */ + if (ctf_dynset_exists (d->cd_conflicting_types, hval, NULL)) + return 0; + + ctf_dprintf ("Marking %s as conflicted\n", hval); + + if (ctf_dynset_cinsert (d->cd_conflicting_types, hval) < 0) + { + ctf_dprintf ("Out of memory marking %s as conflicted\n", hval); + ctf_set_errno (fp, errno); + return -1; + } + + /* If any types cite this type, mark them conflicted too. */ + if ((citers = ctf_dynhash_lookup (d->cd_citers, hval)) == NULL) + return 0; + + while ((err = ctf_dynset_cnext (citers, &i, &k)) == 0) + { + const char *hv = (const char *) k; + + if (ctf_dynset_exists (d->cd_conflicting_types, hv, NULL)) + continue; + + if (ctf_dedup_mark_conflicting_hash (fp, hv) < 0) + { + ctf_next_destroy (i); + return -1; /* errno is set for us. */ + } + } + if (err != ECTF_NEXT_END) + return ctf_set_errno (fp, err); + + return 0; +} + +/* Look up a type kind from the output mapping, given a type hash value. */ +static int +ctf_dedup_hash_kind (ctf_file_t *fp, ctf_file_t **inputs, const char *hash) +{ + ctf_dedup_t *d = &fp->ctf_dedup; + void *id; + ctf_dynset_t *type_ids; + + /* Precondition: the output mapping is populated. */ + if (!ctf_assert (fp, ctf_dynhash_elements (d->cd_output_mapping) > 0)) + return -1; + + /* Look up some GID from the output hash for this type. (They are all + identical, so we can pick any). Don't assert if someone calls this + function wrongly, but do assert if the output mapping knows about the hash, + but has nothing associated with it. */ + + type_ids = ctf_dynhash_lookup (d->cd_output_mapping, hash); + if (!type_ids) + { + ctf_dprintf ("Looked up type kind by nonexistent hash %s.\n", hash); + return ctf_set_errno (fp, ECTF_INTERNAL); + } + id = ctf_dynset_lookup_any (type_ids); + if (!ctf_assert (fp, id)) + return -1; + + return ctf_type_kind_unsliced (inputs[CTF_DEDUP_GID_TO_INPUT (id)], + CTF_DEDUP_GID_TO_TYPE (id)); +} + +/* Used to keep a count of types: i.e. distinct type hash values. */ +typedef struct ctf_dedup_type_counter +{ + ctf_file_t *fp; + ctf_file_t **inputs; + int num_non_forwards; +} ctf_dedup_type_counter_t; + +/* Add to the type counter for one name entry from the cd_name_counts. */ +static int +ctf_dedup_count_types (void *key_, void *value _libctf_unused_, void *arg_) +{ + const char *hval = (const char *) key_; + int kind; + ctf_dedup_type_counter_t *arg = (ctf_dedup_type_counter_t *) arg_; + + kind = ctf_dedup_hash_kind (arg->fp, arg->inputs, hval); + + /* We rely on ctf_dedup_hash_kind setting the fp to -ECTF_INTERNAL on error to + smuggle errors out of here. */ + + if (kind != CTF_K_FORWARD) + { + arg->num_non_forwards++; + ctf_dprintf ("Counting hash %s: kind %i: num_non_forwards is %i\n", + hval, kind, arg->num_non_forwards); + } + + /* We only need to know if there is more than one non-forward (an ambiguous + type): don't waste time iterating any more than needed to figure that + out. */ + + if (arg->num_non_forwards > 1) + return 1; + + return 0; +} + +/* Detect name ambiguity and mark ambiguous names as conflicting, other than the + most common. */ +static int +ctf_dedup_detect_name_ambiguity (ctf_file_t *fp, ctf_file_t **inputs) +{ + ctf_dedup_t *d = &fp->ctf_dedup; + ctf_next_t *i = NULL; + void *k; + void *v; + int err; + const char *whaterr; + + /* Go through cd_name_counts for all CTF namespaces in turn. */ + + while ((err = ctf_dynhash_next (d->cd_name_counts, &i, &k, &v)) == 0) + { + const char *decorated = (const char *) k; + ctf_dynhash_t *name_counts = (ctf_dynhash_t *) v; + ctf_next_t *j = NULL; + + /* If this is a forwardable kind or a forward (which we can tell without + consulting the type because its decorated name has a space as its + second character: see ctf_decorate_type_name), we are only interested + in whether this name has many hashes associated with it: any such name + is necessarily ambiguous, and types with that name are conflicting. + Once we know whether this is true, we can skip to the next name: so use + ctf_dynhash_iter_find for efficiency. */ + + if (decorated[0] != '\0' && decorated[1] == ' ') + { + ctf_dedup_type_counter_t counters = { fp, inputs, 0 }; + ctf_dynhash_t *counts = (ctf_dynhash_t *) v; + + ctf_dynhash_iter_find (counts, ctf_dedup_count_types, &counters); + + /* Check for assertion failure and pass it up. */ + if (ctf_errno (fp) == ECTF_INTERNAL) + goto assert_err; + + if (counters.num_non_forwards > 1) + { + const void *hval_; + + while ((err = ctf_dynhash_cnext (counts, &j, &hval_, NULL)) == 0) + { + const char *hval = (const char *) hval_; + ctf_dynset_t *type_ids; + void *id; + int kind; + + /* Dig through the types in this hash to find the non-forwards + and mark them ambiguous. */ + + type_ids = ctf_dynhash_lookup (d->cd_output_mapping, hval); + + /* Nonexistent? Must be a forward with no referent. */ + if (!type_ids) + continue; + + id = ctf_dynset_lookup_any (type_ids); + + kind = ctf_type_kind (inputs[CTF_DEDUP_GID_TO_INPUT (id)], + CTF_DEDUP_GID_TO_TYPE (id)); + + if (kind != CTF_K_FORWARD) + { + ctf_dprintf ("Marking %p, with hash %s, conflicting: one " + "of many non-forward GIDs for %s\n", id, + hval, (char *) k); + ctf_dedup_mark_conflicting_hash (fp, hval); + } + } + if (err != ECTF_NEXT_END) + { + whaterr = N_("error marking conflicting structs/unions"); + goto iterr; + } + } + } + else + { + /* This is an ordinary type. Find the most common type with this + name, and mark it unconflicting: all others are conflicting. (We + cannot do this sort of popularity contest with forwardable types + because any forwards to that type would be immediately unified with + the most-popular type on insertion, and we want conflicting structs + et al to have all forwards left intact, so the user is notified + that this type is conflicting. TODO: improve this in future by + setting such forwards non-root-visible.) */ + + const void *key; + const void *count; + const char *hval; + long max_hcount = -1; + const char *max_hval = NULL; + + if (ctf_dynhash_elements (name_counts) <= 1) + continue; + + /* First find the most common. */ + while ((err = ctf_dynhash_cnext (name_counts, &j, &key, &count)) == 0) + { + hval = (const char *) key; + if ((long int) (uintptr_t) count > max_hcount) + { + max_hcount = (long int) (uintptr_t) count; + max_hval = hval; + } + } + if (err != ECTF_NEXT_END) + { + whaterr = N_("error finding commonest conflicting type"); + goto iterr; + } + + /* Mark all the others as conflicting. */ + while ((err = ctf_dynhash_cnext (name_counts, &j, &key, NULL)) == 0) + { + hval = (const char *) key; + if (strcmp (max_hval, hval) == 0) + continue; + + ctf_dprintf ("Marking %s, an uncommon hash for %s, conflicting\n", + hval, (const char *) k); + if (ctf_dedup_mark_conflicting_hash (fp, hval) < 0) + { + whaterr = N_("error marking hashes as conflicting"); + goto err; + } + } + if (err != ECTF_NEXT_END) + { + whaterr = N_("marking uncommon conflicting types"); + goto iterr; + } + } + } + if (err != ECTF_NEXT_END) + { + whaterr = N_("scanning for ambiguous names"); + goto iterr; + } + + return 0; + + err: + ctf_next_destroy (i); + ctf_err_warn (fp, 0, 0, "%s", gettext (whaterr)); + return -1; /* errno is set for us. */ + + iterr: + ctf_err_warn (fp, 0, err, _("iteration failed: %s"), gettext (whaterr)); + return ctf_set_errno (fp, err); + + assert_err: + ctf_next_destroy (i); + return -1; /* errno is set for us. */ +} + +/* Initialize the deduplication machinery. */ + +static int +ctf_dedup_init (ctf_file_t *fp) +{ + ctf_dedup_t *d = &fp->ctf_dedup; + size_t i; + + if (ctf_dedup_atoms_init (fp) < 0) + goto oom; + +#if IDS_NEED_ALLOCATION + if ((d->cd_id_to_file_t = ctf_dynhash_create (ctf_hash_type_id_key, + ctf_hash_eq_type_id_key, + free, NULL)) == NULL) + goto oom; +#endif + + for (i = 0; i < 4; i++) + { + if ((d->cd_decorated_names[i] = ctf_dynhash_create (ctf_hash_string, + ctf_hash_eq_string, + NULL, NULL)) == NULL) + goto oom; + } + + if ((d->cd_name_counts + = ctf_dynhash_create (ctf_hash_string, + ctf_hash_eq_string, NULL, + (ctf_hash_free_fun) ctf_dynhash_destroy)) == NULL) + goto oom; + + if ((d->cd_type_hashes + = ctf_dynhash_create (ctf_hash_integer, + ctf_hash_eq_integer, + NULL, NULL)) == NULL) + goto oom; + + if ((d->cd_struct_origin + = ctf_dynhash_create (ctf_hash_string, + ctf_hash_eq_string, + NULL, NULL)) == NULL) + goto oom; + + if ((d->cd_citers + = ctf_dynhash_create (ctf_hash_string, + ctf_hash_eq_string, NULL, + (ctf_hash_free_fun) ctf_dynset_destroy)) == NULL) + goto oom; + + if ((d->cd_output_mapping + = ctf_dynhash_create (ctf_hash_string, + ctf_hash_eq_string, NULL, + (ctf_hash_free_fun) ctf_dynset_destroy)) == NULL) + goto oom; + + if ((d->cd_output_first_gid + = ctf_dynhash_create (ctf_hash_string, + ctf_hash_eq_string, + NULL, NULL)) == NULL) + goto oom; + +#ifdef ENABLE_LIBCTF_HASH_DEBUGGING + if ((d->cd_output_mapping_guard + = ctf_dynhash_create (ctf_hash_integer, + ctf_hash_eq_integer, NULL, NULL)) == NULL) + goto oom; +#endif + + if ((d->cd_emission_struct_members + = ctf_dynhash_create (ctf_hash_integer, + ctf_hash_eq_integer, + NULL, NULL)) == NULL) + goto oom; + + if ((d->cd_conflicting_types + = ctf_dynset_create (htab_hash_string, + ctf_dynset_eq_string, NULL)) == NULL) + goto oom; + + return 0; + + oom: + ctf_err_warn (fp, 0, ENOMEM, _("ctf_dedup_init: cannot initialize: " + "out of memory")); + return ctf_set_errno (fp, ENOMEM); +} + +void +ctf_dedup_fini (ctf_file_t *fp, ctf_file_t **outputs, uint32_t noutputs) +{ + ctf_dedup_t *d = &fp->ctf_dedup; + size_t i; + + /* ctf_dedup_atoms is kept across links. */ +#if IDS_NEED_ALLOCATION + ctf_dynhash_destroy (d->cd_id_to_file_t); +#endif + for (i = 0; i < 4; i++) + ctf_dynhash_destroy (d->cd_decorated_names[i]); + ctf_dynhash_destroy (d->cd_name_counts); + ctf_dynhash_destroy (d->cd_type_hashes); + ctf_dynhash_destroy (d->cd_struct_origin); + ctf_dynhash_destroy (d->cd_citers); + ctf_dynhash_destroy (d->cd_output_mapping); + ctf_dynhash_destroy (d->cd_output_first_gid); +#ifdef ENABLE_LIBCTF_HASH_DEBUGGING + ctf_dynhash_destroy (d->cd_output_mapping_guard); +#endif + ctf_dynhash_destroy (d->cd_emission_struct_members); + ctf_dynset_destroy (d->cd_conflicting_types); + + /* Free the per-output state. */ + if (outputs) + { + for (i = 0; i < noutputs; i++) + { + ctf_dedup_t *od = &outputs[i]->ctf_dedup; + ctf_dynhash_destroy (od->cd_output_emission_hashes); + ctf_dynhash_destroy (od->cd_output_emission_conflicted_forwards); + ctf_file_close (od->cd_output); + } + } + memset (d, 0, sizeof (ctf_dedup_t)); +} + +/* Return 1 if this type is cited by multiple input dictionaries. */ + +static int +ctf_dedup_multiple_input_dicts (ctf_file_t *output, ctf_file_t **inputs, + const char *hval) +{ + ctf_dedup_t *d = &output->ctf_dedup; + ctf_dynset_t *type_ids; + ctf_next_t *i = NULL; + void *id; + ctf_file_t *found = NULL, *relative_found = NULL; + const char *type_id; + ctf_file_t *input_fp; + ctf_id_t input_id; + const char *name; + const char *decorated; + int fwdkind; + int multiple = 0; + int err; + + type_ids = ctf_dynhash_lookup (d->cd_output_mapping, hval); + if (!ctf_assert (output, type_ids)) + return -1; + + /* Scan across the IDs until we find proof that two disjoint dictionaries + are referenced. Exit as soon as possible. Optimization opportunity, but + possibly not worth it, given that this is only executed in + CTF_LINK_SHARE_DUPLICATED mode. */ + + while ((err = ctf_dynset_next (type_ids, &i, &id)) == 0) + { + ctf_file_t *fp = inputs[CTF_DEDUP_GID_TO_INPUT (id)]; + + if (fp == found || fp == relative_found) + continue; + + if (!found) + { + found = fp; + continue; + } + + if (!relative_found + && (fp->ctf_parent == found || found->ctf_parent == fp)) + { + relative_found = fp; + continue; + } + + multiple = 1; + ctf_next_destroy (i); + break; + } + if ((err != ECTF_NEXT_END) && (err != 0)) + { + ctf_err_warn (output, 0, err, _("iteration error " + "propagating conflictedness")); + return ctf_set_errno (output, err); + } + + if (multiple) + return multiple; + + /* This type itself does not appear in multiple input dicts: how about another + related type with the same name (e.g. a forward if this is a struct, + etc). */ + + type_id = ctf_dynset_lookup_any (type_ids); + if (!ctf_assert (output, type_id)) + return -1; + + input_fp = inputs[CTF_DEDUP_GID_TO_INPUT (type_id)]; + input_id = CTF_DEDUP_GID_TO_TYPE (type_id); + fwdkind = ctf_type_kind_forwarded (input_fp, input_id); + name = ctf_type_name_raw (input_fp, input_id); + + if ((fwdkind == CTF_K_STRUCT || fwdkind == CTF_K_UNION) + && name && name[0] != '\0') + { + const void *origin; + + if ((decorated = ctf_decorate_type_name (output, name, + fwdkind)) == NULL) + return -1; /* errno is set for us. */ + + origin = ctf_dynhash_lookup (d->cd_struct_origin, decorated); + if ((origin != NULL) && (CTF_DEDUP_GID_TO_INPUT (origin) < 0)) + multiple = 1; + } + + return multiple; +} + +/* Demote unconflicting types which reference only one input, or which reference + two inputs where one input is the parent of the other, into conflicting + types. Only used if the link mode is CTF_LINK_SHARE_DUPLICATED. */ + +static int +ctf_dedup_conflictify_unshared (ctf_file_t *output, ctf_file_t **inputs) +{ + ctf_dedup_t *d = &output->ctf_dedup; + ctf_next_t *i = NULL; + int err; + const void *k; + ctf_dynset_t *to_mark = NULL; + + if ((to_mark = ctf_dynset_create (htab_hash_string, ctf_dynset_eq_string, + NULL)) == NULL) + goto err_no; + + while ((err = ctf_dynhash_cnext (d->cd_output_mapping, &i, &k, NULL)) == 0) + { + const char *hval = (const char *) k; + int conflicting; + + /* Types referenced by only one dict, with no type appearing under that + name elsewhere, are marked conflicting. */ + + conflicting = !ctf_dedup_multiple_input_dicts (output, inputs, hval); + + if (conflicting < 0) + goto err; /* errno is set for us. */ + + if (conflicting) + if (ctf_dynset_cinsert (to_mark, hval) < 0) + goto err; + } + if (err != ECTF_NEXT_END) + goto iterr; + + while ((err = ctf_dynset_cnext (to_mark, &i, &k)) == 0) + { + const char *hval = (const char *) k; + + if (ctf_dedup_mark_conflicting_hash (output, hval) < 0) + goto err; + } + if (err != ECTF_NEXT_END) + goto iterr; + + ctf_dynset_destroy (to_mark); + + return 0; + + err_no: + ctf_set_errno (output, errno); + err: + err = ctf_errno (output); + ctf_next_destroy (i); + iterr: + ctf_dynset_destroy (to_mark); + ctf_err_warn (output, 0, err, _("conflictifying unshared types")); + return ctf_set_errno (output, err); +} + +/* The core deduplicator. Populate cd_output_mapping in the output ctf_dedup + with a mapping of all types that belong in this dictionary and where they + come from, and cd_conflicting_types with an indication of whether each type + is conflicted or not. OUTPUT is the top-level output: INPUTS is the array of + input dicts; NINPUTS is the size of that array; PARENTS is an NINPUTS-element + array with each element corresponding to a input which is a child dict set to + the number in the INPUTS array of that input's parent. + + If CU_MAPPED is set, this is a first pass for a link with a non-empty CU + mapping: only one output will result. + + Only deduplicates: does not emit the types into the output. Call + ctf_dedup_emit afterwards to do that. */ + +int +ctf_dedup (ctf_file_t *output, ctf_file_t **inputs, uint32_t ninputs, + uint32_t *parents, int cu_mapped) +{ + ctf_dedup_t *d = &output->ctf_dedup; + size_t i; + ctf_next_t *it = NULL; + + for (i = 0; i < ninputs; i++) + ctf_dprintf ("Input %i: %s\n", (int) i, ctf_link_input_name (inputs[i])); + + if (ctf_dedup_init (output) < 0) + return -1; /* errno is set for us. */ + + /* Some flags do not apply when CU-mapping: this is not a duplicated link, + because there is only one output and we really don't want to end up marking + all nonconflicting but appears-only-once types as conflicting (which in the + CU-mapped link means we'd mark them all as non-root-visible!). */ + d->cd_link_flags = output->ctf_link_flags; + if (cu_mapped) + d->cd_link_flags &= ~(CTF_LINK_SHARE_DUPLICATED); + + /* Compute hash values for all types, recursively, treating child structures + and unions equivalent to forwards, and hashing in the name of the referent + of each such type into structures, unions, and non-opaque forwards. + Populate a mapping from decorated name (including an indication of + struct/union/enum namespace) to count of type hash values in + cd_name_counts, a mapping from and a mapping from hash values to input type + IDs in cd_output_mapping. */ + + ctf_dprintf ("Computing type hashes\n"); + for (i = 0; i < ninputs; i++) + { + ctf_id_t id; + + while ((id = ctf_type_next (inputs[i], &it, NULL, 1)) != CTF_ERR) + { + ctf_dedup_hash_type (output, inputs[i], inputs, parents, + i, id, 0, 0, ctf_dedup_populate_mappings); + } + if (ctf_errno (inputs[i]) != ECTF_NEXT_END) + { + ctf_set_errno (output, ctf_errno (inputs[i])); + ctf_err_warn (output, 0, 0, _("iteration failure " + "computing type hashes")); + return -1; + } + } + + /* Go through the cd_name_counts name->hash->count mapping for all CTF + namespaces: any name with many hashes associated with it at this stage is + necessarily ambiguous. Mark all the hashes except the most common as + conflicting in the output. */ + + ctf_dprintf ("Detecting type name ambiguity\n"); + if (ctf_dedup_detect_name_ambiguity (output, inputs) < 0) + return -1; /* errno is set for us. */ + + /* If the link mode is CTF_LINK_SHARE_DUPLICATED, we change any unconflicting + types whose output mapping references only one input dict into a + conflicting type, so that they end up in the per-CU dictionaries. */ + + if (d->cd_link_flags & CTF_LINK_SHARE_DUPLICATED) + { + ctf_dprintf ("Conflictifying unshared types\n"); + if (ctf_dedup_conflictify_unshared (output, inputs) < 0) + return -1; /* errno is set for us. */ + } + return 0; +} + +static int +ctf_dedup_rwalk_output_mapping (ctf_file_t *output, ctf_file_t **inputs, + uint32_t ninputs, uint32_t *parents, + ctf_dynset_t *already_visited, + const char *hval, + int (*visit_fun) (const char *hval, + ctf_file_t *output, + ctf_file_t **inputs, + uint32_t ninputs, + uint32_t *parents, + int already_visited, + ctf_file_t *input, + ctf_id_t type, + void *id, + int depth, + void *arg), + void *arg, unsigned long depth); + +/* Like ctf_dedup_rwalk_output_mapping (which see), only takes a single target + type and visits it. */ +static int +ctf_dedup_rwalk_one_output_mapping (ctf_file_t *output, + ctf_file_t **inputs, uint32_t ninputs, + uint32_t *parents, + ctf_dynset_t *already_visited, + int visited, void *type_id, + const char *hval, + int (*visit_fun) (const char *hval, + ctf_file_t *output, + ctf_file_t **inputs, + uint32_t ninputs, + uint32_t *parents, + int already_visited, + ctf_file_t *input, + ctf_id_t type, + void *id, + int depth, + void *arg), + void *arg, unsigned long depth) +{ + ctf_dedup_t *d = &output->ctf_dedup; + ctf_file_t *fp; + int input_num; + ctf_id_t type; + int ret; + const char *whaterr; + + input_num = CTF_DEDUP_GID_TO_INPUT (type_id); + fp = inputs[input_num]; + type = CTF_DEDUP_GID_TO_TYPE (type_id); + + ctf_dprintf ("%lu: Starting walk over type %s, %i/%lx (%p), from %s, " + "kind %i\n", depth, hval, input_num, type, (void *) fp, + ctf_link_input_name (fp), ctf_type_kind_unsliced (fp, type)); + + /* Get the single call we do if this type has already been visited out of the + way. */ + if (visited) + return visit_fun (hval, output, inputs, ninputs, parents, visited, fp, + type, type_id, depth, arg); + + /* This macro is really ugly, but the alternative is repeating this code many + times, which is worse. */ + +#define CTF_TYPE_WALK(type, errlabel, errmsg) \ + do { \ + void *type_id; \ + const char *hashval; \ + int cited_type_input_num = input_num; \ + \ + if ((fp->ctf_flags & LCTF_CHILD) && (LCTF_TYPE_ISPARENT (fp, type))) \ + cited_type_input_num = parents[input_num]; \ + \ + type_id = CTF_DEDUP_GID (output, cited_type_input_num, type); \ + \ + if (type == 0) \ + { \ + ctf_dprintf ("Walking: unimplemented type\n"); \ + break; \ + } \ + \ + ctf_dprintf ("Looking up ID %i/%lx in type hashes\n", \ + cited_type_input_num, type); \ + hashval = ctf_dynhash_lookup (d->cd_type_hashes, type_id); \ + if (!ctf_assert (output, hashval)) \ + { \ + whaterr = N_("error looking up ID in type hashes"); \ + goto errlabel; \ + } \ + ctf_dprintf ("ID %i/%lx has hash %s\n", cited_type_input_num, type, \ + hashval); \ + \ + ret = ctf_dedup_rwalk_output_mapping (output, inputs, ninputs, parents, \ + already_visited, hashval, \ + visit_fun, arg, depth); \ + if (ret < 0) \ + { \ + whaterr = errmsg; \ + goto errlabel; \ + } \ + } while (0) + + switch (ctf_type_kind_unsliced (fp, type)) + { + case CTF_K_UNKNOWN: + /* Just skip things of unknown kind. */ + return 0; + case CTF_K_FORWARD: + case CTF_K_INTEGER: + case CTF_K_FLOAT: + case CTF_K_ENUM: + /* No types referenced. */ + break; + + case CTF_K_TYPEDEF: + case CTF_K_VOLATILE: + case CTF_K_CONST: + case CTF_K_RESTRICT: + case CTF_K_POINTER: + case CTF_K_SLICE: + CTF_TYPE_WALK (ctf_type_reference (fp, type), err, + N_("error during referenced type walk")); + break; + + case CTF_K_ARRAY: + { + ctf_arinfo_t ar; + + if (ctf_array_info (fp, type, &ar) < 0) + { + whaterr = N_("error during array info lookup"); + goto err_msg; + } + + CTF_TYPE_WALK (ar.ctr_contents, err, + N_("error during array contents type walk")); + CTF_TYPE_WALK (ar.ctr_index, err, + N_("error during array index type walk")); + break; + } + + case CTF_K_FUNCTION: + { + ctf_funcinfo_t fi; + ctf_id_t *args; + uint32_t j; + + if (ctf_func_type_info (fp, type, &fi) < 0) + { + whaterr = N_("error during func type info lookup"); + goto err_msg; + } + + CTF_TYPE_WALK (fi.ctc_return, err, + N_("error during func return type walk")); + + if ((args = calloc (fi.ctc_argc, sizeof (ctf_id_t))) == NULL) + { + whaterr = N_("error doing memory allocation"); + goto err_msg; + } + + if (ctf_func_type_args (fp, type, fi.ctc_argc, args) < 0) + { + whaterr = N_("error doing func arg type lookup"); + free (args); + goto err_msg; + } + + for (j = 0; j < fi.ctc_argc; j++) + CTF_TYPE_WALK (args[j], err_free_args, + N_("error during Func arg type walk")); + free (args); + break; + + err_free_args: + free (args); + goto err; + } + case CTF_K_STRUCT: + case CTF_K_UNION: + /* We do not recursively traverse the members of structures: they are + emitted later, in a separate pass. */ + break; + default: + whaterr = N_("CTF dict corruption: unknown type kind"); + goto err_msg; + } + + return visit_fun (hval, output, inputs, ninputs, parents, visited, fp, type, + type_id, depth, arg); + + err_msg: + ctf_set_errno (output, ctf_errno (fp)); + ctf_err_warn (output, 0, 0, _("%s in input file %s at type ID %lx"), + gettext (whaterr), ctf_link_input_name (fp), type); + err: + return -1; +} +/* Recursively traverse the output mapping, and do something with each type + visited, from leaves to root. VISIT_FUN, called as recursion unwinds, + returns a negative error code or zero. Type hashes may be visited more than + once, but are not recursed through repeatedly: ALREADY_VISITED tracks whether + types have already been visited. */ +static int +ctf_dedup_rwalk_output_mapping (ctf_file_t *output, ctf_file_t **inputs, + uint32_t ninputs, uint32_t *parents, + ctf_dynset_t *already_visited, + const char *hval, + int (*visit_fun) (const char *hval, + ctf_file_t *output, + ctf_file_t **inputs, + uint32_t ninputs, + uint32_t *parents, + int already_visited, + ctf_file_t *input, + ctf_id_t type, + void *id, + int depth, + void *arg), + void *arg, unsigned long depth) +{ + ctf_dedup_t *d = &output->ctf_dedup; + ctf_next_t *i = NULL; + int err; + int visited = 1; + ctf_dynset_t *type_ids; + void *id; + + depth++; + + type_ids = ctf_dynhash_lookup (d->cd_output_mapping, hval); + if (!type_ids) + { + ctf_err_warn (output, 0, ECTF_INTERNAL, + _("looked up type kind by nonexistent hash %s"), hval); + return ctf_set_errno (output, ECTF_INTERNAL); + } + + /* Have we seen this type before? */ + + if (!ctf_dynset_exists (already_visited, hval, NULL)) + { + /* Mark as already-visited immediately, to eliminate the possibility of + cycles: but remember we have not actually visited it yet for the + upcoming call to the visit_fun. (All our callers handle cycles + properly themselves, so we can just abort them aggressively as soon as + we find ourselves in one.) */ + + visited = 0; + if (ctf_dynset_cinsert (already_visited, hval) < 0) + { + ctf_err_warn (output, 0, ENOMEM, + _("out of memory tracking already-visited types")); + return ctf_set_errno (output, ENOMEM); + } + } + + /* If this type is marked conflicted, traverse members and call + ctf_dedup_rwalk_output_mapping_once on all the unique ones: otherwise, just + pick a random one and use it. */ + + if (!ctf_dynset_exists (d->cd_conflicting_types, hval, NULL)) + { + id = ctf_dynset_lookup_any (type_ids); + if (!ctf_assert (output, id)) + return -1; + + return ctf_dedup_rwalk_one_output_mapping (output, inputs, ninputs, + parents, already_visited, + visited, id, hval, visit_fun, + arg, depth); + } + + while ((err = ctf_dynset_next (type_ids, &i, &id)) == 0) + { + int ret; + + ret = ctf_dedup_rwalk_one_output_mapping (output, inputs, ninputs, + parents, already_visited, + visited, id, hval, + visit_fun, arg, depth); + if (ret < 0) + { + ctf_next_destroy (i); + return ret; /* errno is set for us. */ + } + } + if (err != ECTF_NEXT_END) + { + ctf_err_warn (output, 0, err, _("cannot walk conflicted type")); + return ctf_set_errno (output, err); + } + + return 0; +} + +typedef struct ctf_sort_om_cb_arg +{ + ctf_file_t **inputs; + uint32_t ninputs; + ctf_dedup_t *d; +} ctf_sort_om_cb_arg_t; + +/* Sort the output mapping into order: types first appearing in earlier inputs + first, parents preceding children: if types first appear in the same input, + sort those with earlier ctf_id_t's first. */ +static int +sort_output_mapping (const ctf_next_hkv_t *one, const ctf_next_hkv_t *two, + void *arg_) +{ + ctf_sort_om_cb_arg_t *arg = (ctf_sort_om_cb_arg_t *) arg_; + ctf_dedup_t *d = arg->d; + const char *one_hval = (const char *) one->hkv_key; + const char *two_hval = (const char *) two->hkv_key; + void *one_gid, *two_gid; + uint32_t one_ninput; + uint32_t two_ninput; + ctf_file_t *one_fp; + ctf_file_t *two_fp; + ctf_id_t one_type; + ctf_id_t two_type; + + one_gid = ctf_dynhash_lookup (d->cd_output_first_gid, one_hval); + two_gid = ctf_dynhash_lookup (d->cd_output_first_gid, two_hval); + + one_ninput = CTF_DEDUP_GID_TO_INPUT (one_gid); + two_ninput = CTF_DEDUP_GID_TO_INPUT (two_gid); + + one_type = CTF_DEDUP_GID_TO_TYPE (one_gid); + two_type = CTF_DEDUP_GID_TO_TYPE (two_gid); + + /* It's kind of hard to smuggle an assertion failure out of here. */ + assert (one_ninput < arg->ninputs && two_ninput < arg->ninputs); + + one_fp = arg->inputs[one_ninput]; + two_fp = arg->inputs[two_ninput]; + + /* Parents before children. */ + + if (!(one_fp->ctf_flags & LCTF_CHILD) + && (two_fp->ctf_flags & LCTF_CHILD)) + return -1; + else if ((one_fp->ctf_flags & LCTF_CHILD) + && !(two_fp->ctf_flags & LCTF_CHILD)) + return 1; + + /* ninput order, types appearing in earlier TUs first. */ + + if (one_ninput < two_ninput) + return -1; + else if (two_ninput < one_ninput) + return 1; + + /* Same TU. Earliest ctf_id_t first. They cannot be the same. */ + + assert (one_type != two_type); + if (one_type < two_type) + return -1; + else + return 1; +} + +/* The public entry point to ctf_dedup_rwalk_output_mapping, above. */ +static int +ctf_dedup_walk_output_mapping (ctf_file_t *output, ctf_file_t **inputs, + uint32_t ninputs, uint32_t *parents, + int (*visit_fun) (const char *hval, + ctf_file_t *output, + ctf_file_t **inputs, + uint32_t ninputs, + uint32_t *parents, + int already_visited, + ctf_file_t *input, + ctf_id_t type, + void *id, + int depth, + void *arg), + void *arg) +{ + ctf_dynset_t *already_visited; + ctf_next_t *i = NULL; + ctf_sort_om_cb_arg_t sort_arg; + int err; + void *k; + + if ((already_visited = ctf_dynset_create (htab_hash_string, + ctf_dynset_eq_string, + NULL)) == NULL) + return ctf_set_errno (output, ENOMEM); + + sort_arg.inputs = inputs; + sort_arg.ninputs = ninputs; + sort_arg.d = &output->ctf_dedup; + + while ((err = ctf_dynhash_next_sorted (output->ctf_dedup.cd_output_mapping, + &i, &k, NULL, sort_output_mapping, + &sort_arg)) == 0) + { + const char *hval = (const char *) k; + + err = ctf_dedup_rwalk_output_mapping (output, inputs, ninputs, parents, + already_visited, hval, visit_fun, + arg, 0); + if (err < 0) + { + ctf_next_destroy (i); + goto err; /* errno is set for us. */ + } + } + if (err != ECTF_NEXT_END) + { + ctf_err_warn (output, 0, err, _("cannot recurse over output mapping")); + ctf_set_errno (output, err); + goto err; + } + ctf_dynset_destroy (already_visited); + + return 0; + err: + ctf_dynset_destroy (already_visited); + return -1; +} + +/* Possibly synthesise a synthetic forward in TARGET to subsitute for a + conflicted per-TU type ID in INPUT with hash HVAL. Return its CTF ID, or 0 + if none was needed. */ +static ctf_id_t +ctf_dedup_maybe_synthesize_forward (ctf_file_t *output, ctf_file_t *target, + ctf_file_t *input, ctf_id_t id, + const char *hval) +{ + ctf_dedup_t *od = &output->ctf_dedup; + ctf_dedup_t *td = &target->ctf_dedup; + int kind; + int fwdkind; + const char *name; + const char *decorated; + void *v; + ctf_id_t emitted_forward; + + if (!ctf_dynset_exists (od->cd_conflicting_types, hval, NULL) + || target->ctf_flags & LCTF_CHILD + || !ctf_type_name_raw (input, id) + || (((kind = ctf_type_kind_unsliced (input, id)) != CTF_K_STRUCT + && kind != CTF_K_UNION && kind != CTF_K_FORWARD))) + return 0; + + fwdkind = ctf_type_kind_forwarded (input, id); + name = ctf_type_name_raw (input, id); + + ctf_dprintf ("Using synthetic forward for conflicted struct/union with " + "hval %s\n", hval); + + if (!ctf_assert (output, name)) + return CTF_ERR; + + if ((decorated = ctf_decorate_type_name (output, name, fwdkind)) == NULL) + return CTF_ERR; + + if (!ctf_dynhash_lookup_kv (td->cd_output_emission_conflicted_forwards, + decorated, NULL, &v)) + { + if ((emitted_forward = ctf_add_forward (target, CTF_ADD_ROOT, name, + fwdkind)) == CTF_ERR) + { + ctf_set_errno (output, ctf_errno (target)); + return CTF_ERR; + } + + if (ctf_dynhash_cinsert (td->cd_output_emission_conflicted_forwards, + decorated, (void *) (uintptr_t) + emitted_forward) < 0) + { + ctf_set_errno (output, ENOMEM); + return CTF_ERR; + } + } + else + emitted_forward = (ctf_id_t) (uintptr_t) v; + + ctf_dprintf ("Cross-TU conflicted struct: passing back forward, %lx\n", + emitted_forward); + + return emitted_forward; +} + +/* Map a GID in some INPUT dict, in the form of an input number and a ctf_id_t, + into a GID in a target output dict. If it returns 0, this is the + unimplemented type, and the input type must have been 0. The OUTPUT dict is + assumed to be the parent of the TARGET, if it is not the TARGET itself. + + Returns CTF_ERR on failure. Responds to an incoming CTF_ERR as an 'id' by + returning CTF_ERR, to simplify callers. Errors are always propagated to the + input, even if they relate to the target, for the same reason. (Target + errors are expected to be very rare.) + + If the type in question is a citation of a conflicted type in a different TU, + emit a forward of the right type in its place (if not already emitted), and + record that forward in cd_output_emission_conflicted_forwards. This avoids + the need to replicate the entire type graph below this point in the current + TU (an appalling waste of space). + + TODO: maybe replace forwards in the same TU with their referents? Might + make usability a bit better. */ + +static ctf_id_t +ctf_dedup_id_to_target (ctf_file_t *output, ctf_file_t *target, + ctf_file_t **inputs, uint32_t ninputs, + uint32_t *parents, ctf_file_t *input, int input_num, + ctf_id_t id) +{ + ctf_dedup_t *od = &output->ctf_dedup; + ctf_dedup_t *td = &target->ctf_dedup; + ctf_file_t *err_fp = input; + const char *hval; + void *target_id; + ctf_id_t emitted_forward; + + /* The target type of an error is an error. */ + if (id == CTF_ERR) + return CTF_ERR; + + /* The unimplemented type's ID never changes. */ + if (!id) + { + ctf_dprintf ("%i/%lx: unimplemented type\n", input_num, id); + return 0; + } + + ctf_dprintf ("Mapping %i/%lx to target %p (%s)\n", input_num, + id, (void *) target, ctf_link_input_name (target)); + + /* If the input type is in the parent type space, and this is a child, reset + the input to the parent (which must already have been emitted, since + emission of parent dicts happens before children). */ + if ((input->ctf_flags & LCTF_CHILD) && (LCTF_TYPE_ISPARENT (input, id))) + { + if (!ctf_assert (output, parents[input_num] <= ninputs)) + return -1; + input = inputs[parents[input_num]]; + input_num = parents[input_num]; + } + + hval = ctf_dynhash_lookup (od->cd_type_hashes, + CTF_DEDUP_GID (output, input_num, id)); + + if (!ctf_assert (output, hval && td->cd_output_emission_hashes)) + return -1; + + /* If this type is a conflicted tagged structure, union, or forward, + substitute a synthetic forward instead, emitting it if need be. Only do + this if the target is in the parent dict: if it's in the child dict, we can + just point straight at the thing itself. Of course, we might be looking in + the child dict right now and not find it and have to look in the parent, so + we have to do this check twice. */ + + emitted_forward = ctf_dedup_maybe_synthesize_forward (output, target, + input, id, hval); + switch (emitted_forward) + { + case 0: /* No forward needed. */ + break; + case -1: + ctf_set_errno (err_fp, ctf_errno (output)); + ctf_err_warn (err_fp, 0, 0, _("cannot add synthetic forward for type " + "%i/%lx"), input_num, id); + return -1; + default: + return emitted_forward; + } + + ctf_dprintf ("Looking up %i/%lx, hash %s, in target\n", input_num, id, hval); + + target_id = ctf_dynhash_lookup (td->cd_output_emission_hashes, hval); + if (!target_id) + { + /* Must be in the parent, so this must be a child, and they must not be + the same dict. */ + ctf_dprintf ("Checking shared parent for target\n"); + if (!ctf_assert (output, (target != output) + && (target->ctf_flags & LCTF_CHILD))) + return -1; + + target_id = ctf_dynhash_lookup (od->cd_output_emission_hashes, hval); + + emitted_forward = ctf_dedup_maybe_synthesize_forward (output, output, + input, id, hval); + switch (emitted_forward) + { + case 0: /* No forward needed. */ + break; + case -1: + ctf_err_warn (err_fp, 0, ctf_errno (output), + _("cannot add synthetic forward for type %i/%lx"), + input_num, id); + return ctf_set_errno (err_fp, ctf_errno (output)); + default: + return emitted_forward; + } + } + if (!ctf_assert (output, target_id)) + return -1; + return (ctf_id_t) (uintptr_t) target_id; +} + +/* Emit a single deduplicated TYPE with the given HVAL, located in a given + INPUT, with the given (G)ID, into the shared OUTPUT or a + possibly-newly-created per-CU dict. All the types this type depends upon + have already been emitted. (This type itself may also have been emitted.) + + If the ARG is 1, this is a CU-mapped deduplication round mapping many + ctf_file_t's into precisely one: conflicting types should be marked + non-root-visible. If the ARG is 0, conflicting types go into per-CU + dictionaries stored in the input's ctf_dedup.cd_output: otherwise, everything + is emitted directly into the output. No struct/union members are emitted. + + Optimization opportunity: trace the ancestry of non-root-visible types and + elide all that neither have a root-visible type somewhere towards their root, + nor have the type visible via any other route (the function info section, + data object section, backtrace section etc). */ + +static int +ctf_dedup_emit_type (const char *hval, ctf_file_t *output, ctf_file_t **inputs, + uint32_t ninputs, uint32_t *parents, int already_visited, + ctf_file_t *input, ctf_id_t type, void *id, int depth, + void *arg) +{ + ctf_dedup_t *d = &output->ctf_dedup; + int kind = ctf_type_kind_unsliced (input, type); + const char *name; + ctf_file_t *target = output; + ctf_file_t *real_input; + const ctf_type_t *tp; + int input_num = CTF_DEDUP_GID_TO_INPUT (id); + int output_num = (uint32_t) -1; /* 'shared' */ + int cu_mapped = *(int *)arg; + int isroot = 1; + int is_conflicting; + + ctf_next_t *i = NULL; + ctf_id_t new_type; + ctf_id_t ref; + ctf_id_t maybe_dup = 0; + ctf_encoding_t ep; + const char *errtype; + int emission_hashed = 0; + + /* We don't want to re-emit something we've already emitted. */ + + if (already_visited) + return 0; + + ctf_dprintf ("%i: Emitting type with hash %s from %s: determining target\n", + depth, hval, ctf_link_input_name (input)); + + /* Conflicting types go into a per-CU output dictionary, unless this is a + CU-mapped run. The import is not refcounted, since it goes into the + ctf_link_outputs dict of the output that is its parent. */ + is_conflicting = ctf_dynset_exists (d->cd_conflicting_types, hval, NULL); + + if (is_conflicting && !cu_mapped) + { + ctf_dprintf ("%i: Type %s in %i/%lx is conflicted: " + "inserting into per-CU target.\n", + depth, hval, input_num, type); + + if (input->ctf_dedup.cd_output) + target = input->ctf_dedup.cd_output; + else + { + int err; + + if ((target = ctf_create (&err)) == NULL) + { + ctf_err_warn (output, 0, err, + _("cannot create per-CU CTF archive for CU %s"), + ctf_link_input_name (input)); + return ctf_set_errno (output, err); + } + + ctf_import_unref (target, output); + if (ctf_cuname (input) != NULL) + ctf_cuname_set (target, ctf_cuname (input)); + else + ctf_cuname_set (target, "unnamed-CU"); + ctf_parent_name_set (target, _CTF_SECTION); + + input->ctf_dedup.cd_output = target; + } + output_num = input_num; + } + + real_input = input; + if ((tp = ctf_lookup_by_id (&real_input, type)) == NULL) + { + ctf_err_warn (output, 0, ctf_errno (input), + _("%s: lookup failure for type %lx"), + ctf_link_input_name (real_input), type); + return ctf_set_errno (output, ctf_errno (input)); + } + + name = ctf_strraw (real_input, tp->ctt_name); + + /* Hide conflicting types, if we were asked to: also hide if a type with this + name already exists and is not a forward. */ + if (cu_mapped && is_conflicting) + isroot = 0; + else if (name + && (maybe_dup = ctf_lookup_by_rawname (target, kind, name)) != 0) + { + if (ctf_type_kind (target, maybe_dup) != CTF_K_FORWARD) + isroot = 0; + } + + ctf_dprintf ("%i: Emitting type with hash %s (%s), into target %i/%p\n", + depth, hval, name ? name : "", input_num, (void *) target); + + if (!target->ctf_dedup.cd_output_emission_hashes) + if ((target->ctf_dedup.cd_output_emission_hashes + = ctf_dynhash_create (ctf_hash_string, ctf_hash_eq_string, + NULL, NULL)) == NULL) + goto oom_hash; + + if (!target->ctf_dedup.cd_output_emission_conflicted_forwards) + if ((target->ctf_dedup.cd_output_emission_conflicted_forwards + = ctf_dynhash_create (ctf_hash_string, ctf_hash_eq_string, + NULL, NULL)) == NULL) + goto oom_hash; + + switch (kind) + { + case CTF_K_UNKNOWN: + /* These are types that CTF cannot encode, marked as such by the compile. + We intentionally do not re-emit these. */ + new_type = 0; + break; + case CTF_K_FORWARD: + /* This will do nothing if the type to which this forwards already exists, + and will be replaced with such a type if it appears later. */ + + errtype = _("forward"); + if ((new_type = ctf_add_forward (target, isroot, name, + ctf_type_kind_forwarded (input, type))) + == CTF_ERR) + goto err_target; + break; + + case CTF_K_FLOAT: + case CTF_K_INTEGER: + errtype = _("float/int"); + if (ctf_type_encoding (input, type, &ep) < 0) + goto err_input; /* errno is set for us. */ + if ((new_type = ctf_add_encoded (target, isroot, name, &ep, kind)) + == CTF_ERR) + goto err_target; + break; + + case CTF_K_ENUM: + { + int val; + errtype = _("enum"); + if ((new_type = ctf_add_enum (target, isroot, name)) == CTF_ERR) + goto err_input; /* errno is set for us. */ + + while ((name = ctf_enum_next (input, type, &i, &val)) != NULL) + { + if (ctf_add_enumerator (target, new_type, name, val) < 0) + { + ctf_err_warn (target, 0, ctf_errno (target), + _("%s (%i): cannot add enumeration value %s " + "from input type %lx"), + ctf_link_input_name (input), input_num, name, + type); + ctf_next_destroy (i); + return ctf_set_errno (output, ctf_errno (target)); + } + } + if (ctf_errno (input) != ECTF_NEXT_END) + goto err_input; + break; + } + + case CTF_K_TYPEDEF: + errtype = _("typedef"); + + ref = ctf_type_reference (input, type); + if ((ref = ctf_dedup_id_to_target (output, target, inputs, ninputs, + parents, input, input_num, + ref)) == CTF_ERR) + goto err_input; /* errno is set for us. */ + + if ((new_type = ctf_add_typedef (target, isroot, name, ref)) == CTF_ERR) + goto err_target; /* errno is set for us. */ + break; + + case CTF_K_VOLATILE: + case CTF_K_CONST: + case CTF_K_RESTRICT: + case CTF_K_POINTER: + errtype = _("pointer or cvr-qual"); + + ref = ctf_type_reference (input, type); + if ((ref = ctf_dedup_id_to_target (output, target, inputs, ninputs, + parents, input, input_num, + ref)) == CTF_ERR) + goto err_input; /* errno is set for us. */ + + if ((new_type = ctf_add_reftype (target, isroot, ref, kind)) == CTF_ERR) + goto err_target; /* errno is set for us. */ + break; + + case CTF_K_SLICE: + errtype = _("slice"); + + if (ctf_type_encoding (input, type, &ep) < 0) + goto err_input; /* errno is set for us. */ + + ref = ctf_type_reference (input, type); + if ((ref = ctf_dedup_id_to_target (output, target, inputs, ninputs, + parents, input, input_num, + ref)) == CTF_ERR) + goto err_input; + + if ((new_type = ctf_add_slice (target, isroot, ref, &ep)) == CTF_ERR) + goto err_target; + break; + + case CTF_K_ARRAY: + { + ctf_arinfo_t ar; + + errtype = _("array info"); + if (ctf_array_info (input, type, &ar) < 0) + goto err_input; + + ar.ctr_contents = ctf_dedup_id_to_target (output, target, inputs, + ninputs, parents, input, + input_num, ar.ctr_contents); + ar.ctr_index = ctf_dedup_id_to_target (output, target, inputs, ninputs, + parents, input, input_num, + ar.ctr_index); + + if (ar.ctr_contents == CTF_ERR || ar.ctr_index == CTF_ERR) + goto err_input; + + if ((new_type = ctf_add_array (target, isroot, &ar)) == CTF_ERR) + goto err_target; + + break; + } + + case CTF_K_FUNCTION: + { + ctf_funcinfo_t fi; + ctf_id_t *args; + uint32_t j; + + errtype = _("function"); + if (ctf_func_type_info (input, type, &fi) < 0) + goto err_input; + + fi.ctc_return = ctf_dedup_id_to_target (output, target, inputs, ninputs, + parents, input, input_num, + fi.ctc_return); + if (fi.ctc_return == CTF_ERR) + goto err_input; + + if ((args = calloc (fi.ctc_argc, sizeof (ctf_id_t))) == NULL) + { + ctf_set_errno (input, ENOMEM); + goto err_input; + } + + errtype = _("function args"); + if (ctf_func_type_args (input, type, fi.ctc_argc, args) < 0) + { + free (args); + goto err_input; + } + + for (j = 0; j < fi.ctc_argc; j++) + { + args[j] = ctf_dedup_id_to_target (output, target, inputs, ninputs, + parents, input, input_num, + args[j]); + if (args[j] == CTF_ERR) + goto err_input; + } + + if ((new_type = ctf_add_function (target, isroot, + &fi, args)) == CTF_ERR) + { + free (args); + goto err_target; + } + free (args); + break; + } + + case CTF_K_STRUCT: + case CTF_K_UNION: + { + size_t size = ctf_type_size (input, type); + void *out_id; + /* Insert the structure itself, so other types can refer to it. */ + + errtype = _("structure/union"); + if (kind == CTF_K_STRUCT) + new_type = ctf_add_struct_sized (target, isroot, name, size); + else + new_type = ctf_add_union_sized (target, isroot, name, size); + + if (new_type == CTF_ERR) + goto err_target; + + out_id = CTF_DEDUP_GID (output, output_num, new_type); + ctf_dprintf ("%i: Noting need to emit members of %p -> %p\n", depth, + id, out_id); + /* Record the need to emit the members of this structure later. */ + if (ctf_dynhash_insert (d->cd_emission_struct_members, id, out_id) < 0) + goto err_target; + break; + } + default: + ctf_err_warn (output, 0, ECTF_CORRUPT, _("%s: unknown type kind for " + "input type %lx"), + ctf_link_input_name (input), type); + return ctf_set_errno (output, ECTF_CORRUPT); + } + + if (!emission_hashed + && new_type != 0 + && ctf_dynhash_cinsert (target->ctf_dedup.cd_output_emission_hashes, + hval, (void *) (uintptr_t) new_type) < 0) + { + ctf_err_warn (output, 0, ENOMEM, _("out of memory tracking deduplicated " + "global type IDs")); + return ctf_set_errno (output, ENOMEM); + } + + if (!emission_hashed && new_type != 0) + ctf_dprintf ("%i: Inserted %s, %i/%lx -> %lx into emission hash for " + "target %p (%s)\n", depth, hval, input_num, type, new_type, + (void *) target, ctf_link_input_name (target)); + + return 0; + + oom_hash: + ctf_err_warn (output, 0, ENOMEM, _("out of memory creating emission-tracking " + "hashes")); + return ctf_set_errno (output, ENOMEM); + + err_input: + ctf_err_warn (output, 0, ctf_errno (input), + _("%s (%i): while emitting deduplicated %s, error getting " + "input type %lx"), ctf_link_input_name (input), + input_num, errtype, type); + return ctf_set_errno (output, ctf_errno (input)); + err_target: + ctf_err_warn (output, 0, ctf_errno (target), + _("%s (%i): while emitting deduplicated %s, error emitting " + "target type from input type %lx"), + ctf_link_input_name (input), input_num, + errtype, type); + return ctf_set_errno (output, ctf_errno (target)); +} + +/* Traverse the cd_emission_struct_members and emit the members of all + structures and unions. All other types are emitted and complete by this + point. */ + +static int +ctf_dedup_emit_struct_members (ctf_file_t *output, ctf_file_t **inputs, + uint32_t ninputs, uint32_t *parents) +{ + ctf_dedup_t *d = &output->ctf_dedup; + ctf_next_t *i = NULL; + void *input_id, *target_id; + int err; + ctf_file_t *err_fp, *input_fp; + int input_num; + ctf_id_t err_type; + + while ((err = ctf_dynhash_next (d->cd_emission_struct_members, &i, + &input_id, &target_id)) == 0) + { + ctf_next_t *j = NULL; + ctf_file_t *target; + uint32_t target_num; + ctf_id_t input_type, target_type; + ssize_t offset; + ctf_id_t membtype; + const char *name; + + input_num = CTF_DEDUP_GID_TO_INPUT (input_id); + input_fp = inputs[input_num]; + input_type = CTF_DEDUP_GID_TO_TYPE (input_id); + + /* The output is either -1 (for the shared, parent output dict) or the + number of the corresponding input. */ + target_num = CTF_DEDUP_GID_TO_INPUT (target_id); + if (target_num == (uint32_t) -1) + target = output; + else + { + target = inputs[target_num]->ctf_dedup.cd_output; + if (!ctf_assert (output, target)) + { + err_fp = output; + err_type = input_type; + goto err_target; + } + } + target_type = CTF_DEDUP_GID_TO_TYPE (target_id); + + while ((offset = ctf_member_next (input_fp, input_type, &j, &name, + &membtype)) >= 0) + { + err_fp = target; + err_type = target_type; + if ((membtype = ctf_dedup_id_to_target (output, target, inputs, + ninputs, parents, input_fp, + input_num, + membtype)) == CTF_ERR) + { + ctf_next_destroy (j); + goto err_target; + } + + if (name == NULL) + name = ""; +#ifdef ENABLE_LIBCTF_HASH_DEBUGGING + ctf_dprintf ("Emitting %s, offset %zi\n", name, offset); +#endif + if (ctf_add_member_offset (target, target_type, name, + membtype, offset) < 0) + { + ctf_next_destroy (j); + goto err_target; + } + } + if (ctf_errno (input_fp) != ECTF_NEXT_END) + { + err = ctf_errno (input_fp); + ctf_next_destroy (i); + goto iterr; + } + } + if (err != ECTF_NEXT_END) + goto iterr; + + return 0; + err_target: + ctf_next_destroy (i); + ctf_err_warn (output, 0, ctf_errno (err_fp), + _("%s (%i): error emitting members for structure type %lx"), + ctf_link_input_name (input_fp), input_num, err_type); + return ctf_set_errno (output, ctf_errno (err_fp)); + iterr: + ctf_err_warn (output, 0, err, _("iteration failure emitting " + "structure members")); + return ctf_set_errno (output, err); +} + +/* Populate the type mapping used by the types in one FP (which must be an input + dict containing a non-null cd_output resulting from a ctf_dedup_emit_type + walk). */ +static int +ctf_dedup_populate_type_mapping (ctf_file_t *shared, ctf_file_t *fp, + ctf_file_t **inputs) +{ + ctf_dedup_t *d = &shared->ctf_dedup; + ctf_file_t *output = fp->ctf_dedup.cd_output; + const void *k, *v; + ctf_next_t *i = NULL; + int err; + + /* The shared dict (the output) stores its types in the fp itself, not in a + separate cd_output dict. */ + if (shared == fp) + output = fp; + + /* There may be no types to emit at all, or all the types in this TU may be + shared. */ + if (!output || !output->ctf_dedup.cd_output_emission_hashes) + return 0; + + while ((err = ctf_dynhash_cnext (output->ctf_dedup.cd_output_emission_hashes, + &i, &k, &v)) == 0) + { + const char *hval = (const char *) k; + ctf_id_t id_out = (ctf_id_t) (uintptr_t) v; + ctf_next_t *j = NULL; + ctf_dynset_t *type_ids; + const void *id; + + type_ids = ctf_dynhash_lookup (d->cd_output_mapping, hval); + if (!ctf_assert (shared, type_ids)) + return -1; +#ifdef ENABLE_LIBCTF_HASH_DEBUGGING + ctf_dprintf ("Traversing emission hash: hval %s\n", hval); +#endif + + while ((err = ctf_dynset_cnext (type_ids, &j, &id)) == 0) + { + ctf_file_t *input = inputs[CTF_DEDUP_GID_TO_INPUT (id)]; + ctf_id_t id_in = CTF_DEDUP_GID_TO_TYPE (id); + +#ifdef ENABLE_LIBCTF_HASH_DEBUGGING + ctf_dprintf ("Adding mapping from %i/%lx to %lx\n", + CTF_DEDUP_GID_TO_INPUT (id), id_in, id_out); +#endif + ctf_add_type_mapping (input, id_in, output, id_out); + } + if (err != ECTF_NEXT_END) + { + ctf_next_destroy (i); + goto err; + } + } + if (err != ECTF_NEXT_END) + goto err; + + return 0; + + err: + ctf_err_warn (shared, 0, err, _("iteration error populating the type mapping")); + return ctf_set_errno (shared, err); +} + +/* Populate the type mapping machinery used by the rest of the linker, + by ctf_add_type, etc. */ +static int +ctf_dedup_populate_type_mappings (ctf_file_t *output, ctf_file_t **inputs, + uint32_t ninputs) +{ + size_t i; + + if (ctf_dedup_populate_type_mapping (output, output, inputs) < 0) + { + ctf_err_warn (output, 0, 0, _("cannot populate type mappings for shared " + "CTF dict")); + return -1; /* errno is set for us. */ + } + + for (i = 0; i < ninputs; i++) + { + if (ctf_dedup_populate_type_mapping (output, inputs[i], inputs) < 0) + { + ctf_err_warn (output, 0, ctf_errno (inputs[i]), + _("cannot populate type mappings for per-CU CTF dict")); + return ctf_set_errno (output, ctf_errno (inputs[i])); + } + } + + return 0; +} + +/* Emit deduplicated types into the outputs. The shared type repository is + OUTPUT, on which the ctf_dedup function must have already been called. The + PARENTS array contains the INPUTS index of the parent dict for every child + dict at the corresponding index in the INPUTS (for non-child dicts, the value + is undefined). + + Return an array of fps with content emitted into them (starting with OUTPUT, + which is the parent of all others, then all the newly-generated outputs). + + If CU_MAPPED is set, this is a first pass for a link with a non-empty CU + mapping: only one output will result. */ + +ctf_file_t ** +ctf_dedup_emit (ctf_file_t *output, ctf_file_t **inputs, uint32_t ninputs, + uint32_t *parents, uint32_t *noutputs, int cu_mapped) +{ + size_t num_outputs = 1; /* Always at least one output: us. */ + ctf_file_t **outputs; + ctf_file_t **walk; + size_t i; + + ctf_dprintf ("Triggering emission.\n"); + if (ctf_dedup_walk_output_mapping (output, inputs, ninputs, parents, + ctf_dedup_emit_type, &cu_mapped) < 0) + return NULL; /* errno is set for us. */ + + ctf_dprintf ("Populating struct members.\n"); + if (ctf_dedup_emit_struct_members (output, inputs, ninputs, parents) < 0) + return NULL; /* errno is set for us. */ + + if (ctf_dedup_populate_type_mappings (output, inputs, ninputs) < 0) + return NULL; /* errno is set for us. */ + + for (i = 0; i < ninputs; i++) + { + if (inputs[i]->ctf_dedup.cd_output) + num_outputs++; + } + + if (!ctf_assert (output, !cu_mapped || (cu_mapped && num_outputs == 1))) + return NULL; + + if ((outputs = calloc (num_outputs, sizeof (ctf_file_t *))) == NULL) + { + ctf_err_warn (output, 0, ENOMEM, + _("out of memory allocating link outputs array")); + ctf_set_errno (output, ENOMEM); + return NULL; + } + *noutputs = num_outputs; + + walk = outputs; + *walk = output; + output->ctf_refcnt++; + walk++; + + for (i = 0; i < ninputs; i++) + { + if (inputs[i]->ctf_dedup.cd_output) + { + *walk = inputs[i]->ctf_dedup.cd_output; + inputs[i]->ctf_dedup.cd_output = NULL; + walk++; + } + } + + ctf_dedup_fini (output, outputs, num_outputs); + return outputs; +} diff -Nru gdb-9.1/libctf/ctf-dump.c gdb-10.2/libctf/ctf-dump.c --- gdb-9.1/libctf/ctf-dump.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libctf/ctf-dump.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Textual dumping of CTF data. - Copyright (C) 2019 Free Software Foundation, Inc. + Copyright (C) 2019-2020 Free Software Foundation, Inc. This file is part of libctf. @@ -79,20 +79,6 @@ } } -/* Slices need special handling to distinguish them from their referenced - type. */ - -static int -ctf_is_slice (ctf_file_t *fp, ctf_id_t id, ctf_encoding_t *enc) -{ - int kind = ctf_type_kind (fp, id); - - return (((kind == CTF_K_INTEGER) || (kind == CTF_K_ENUM) - || (kind == CTF_K_FLOAT)) - && ctf_type_reference (fp, id) != CTF_ERR - && ctf_type_encoding (fp, id, enc) == 0); -} - /* Return a dump for a single type, without member info: but do show the type's references. */ @@ -129,26 +115,45 @@ goto err; } - /* Slices get a different print representation. */ + if (asprintf (&bit, " %s%lx: ", nonroot_leader, id) < 0) + goto oom; + str = str_append (str, bit); + free (bit); + bit = NULL; + + if (buf[0] != '\0') + { + str = str_append (str, buf); + str = str_append (str, " "); + } - if (ctf_is_slice (fp, id, &enc)) + free (buf); + buf = NULL; + + /* Slices get a different print representation. */ + if (ctf_type_kind_unsliced (fp, id) == CTF_K_SLICE) { ctf_type_encoding (fp, id, &enc); - if (asprintf (&bit, " %s%lx: [slice 0x%x:0x%x]%s", - nonroot_leader, id, enc.cte_offset, enc.cte_bits, - nonroot_trailer) < 0) + if (asprintf (&bit, "[slice 0x%x:0x%x] ", + enc.cte_offset, enc.cte_bits) < 0) goto oom; } - else + else if (ctf_type_kind (fp, id) == CTF_K_INTEGER) { - if (asprintf (&bit, " %s%lx: %s (size 0x%lx)%s", nonroot_leader, - id, buf[0] == '\0' ? "(nameless)" : buf, - (unsigned long) ctf_type_size (fp, id), - nonroot_trailer) < 0) + ctf_type_encoding (fp, id, &enc); + if (asprintf (&bit, "[0x%x:0x%x] ", + enc.cte_offset, enc.cte_bits) < 0) goto oom; } - free (buf); - buf = NULL; + str = str_append (str, bit); + free (bit); + bit = NULL; + + if (asprintf (&bit, "(size 0x%lx)%s", + (unsigned long) ctf_type_size (fp, id), + nonroot_trailer) < 0) + goto oom; + str = str_append (str, bit); free (bit); bit = NULL; @@ -169,6 +174,7 @@ oom: ctf_set_errno (fp, errno); err: + ctf_err_warn (fp, 1, 0, _("cannot format name dumping type 0x%lx"), id); free (buf); free (str); free (bit); @@ -318,7 +324,7 @@ CTF_ADD_ROOT)) == NULL) { free (str); - return -1; /* errno is set for us. */ + return 0; /* Swallow the error. */ } str = str_append (str, typestr); @@ -375,7 +381,7 @@ CTF_ADD_ROOT)) == NULL) { free (str); - return -1; /* errno is set for us. */ + return 0; /* Swallow the error. */ } str = str_append (str, typestr); @@ -397,13 +403,10 @@ for (i = 0; i < fp->ctf_nsyms; i++) { char *str; - char *bit; - const char *err; + char *bit = NULL; const char *sym_name; ctf_funcinfo_t fi; ctf_id_t type; - size_t j; - ctf_id_t *args; if ((type = ctf_func_info (state->cds_fp, i, &fi)) == CTF_ERR) switch (ctf_errno (state->cds_fp)) @@ -418,74 +421,61 @@ case ECTF_NOFUNCDAT: continue; } - if ((args = calloc (fi.ctc_argc, sizeof (ctf_id_t))) == NULL) - return (ctf_set_errno (fp, ENOMEM)); - /* Return type. */ - if ((str = ctf_type_aname (state->cds_fp, type)) == NULL) + /* Return type and all args. */ + if ((bit = ctf_type_aname (state->cds_fp, type)) == NULL) { - err = "look up return type"; - goto err; + ctf_err_warn (fp, 1, ctf_errno (state->cds_fp), + _("cannot look up return type dumping function type " + "for symbol 0x%li"), (unsigned long) i); + free (bit); + return -1; /* errno is set for us. */ } - str = str_append (str, " "); - - /* Function name. */ + /* Replace in the returned string, dropping in the function name. */ sym_name = ctf_lookup_symbol_name (fp, i); - if (sym_name[0] == '\0') - { - if (asprintf (&bit, "0x%lx ", (unsigned long) i) < 0) - goto oom; - } - else + if (sym_name[0] != '\0') { - if (asprintf (&bit, "%s (0x%lx) ", sym_name, (unsigned long) i) < 0) - goto oom; - } - str = str_append (str, bit); - str = str_append (str, " ("); - free (bit); + char *retstar; + char *new_bit; + char *walk; - /* Function arguments. */ + new_bit = malloc (strlen (bit) + 1 + strlen (sym_name)); + if (!new_bit) + goto oom; - if (ctf_func_args (state->cds_fp, i, fi.ctc_argc, args) < 0) - { - err = "look up argument type"; - goto err; - } + /* See ctf_type_aname. */ + retstar = strstr (bit, "(*) ("); + if (!ctf_assert (fp, retstar)) + goto assert_err; + retstar += 2; /* After the '*' */ + + /* C is not good at search-and-replace. */ + walk = new_bit; + memcpy (walk, bit, retstar - bit); + walk += (retstar - bit); + strcpy (walk, sym_name); + walk += strlen (sym_name); + strcpy (walk, retstar); - for (j = 0; j < fi.ctc_argc; j++) - { - if ((bit = ctf_type_aname (state->cds_fp, args[j])) == NULL) - { - err = "look up argument type name"; - goto err; - } - str = str_append (str, bit); - if ((j < fi.ctc_argc - 1) || (fi.ctc_flags & CTF_FUNC_VARARG)) - str = str_append (str, ", "); free (bit); + bit = new_bit; } - if (fi.ctc_flags & CTF_FUNC_VARARG) - str = str_append (str, "..."); - str = str_append (str, ")"); + if (asprintf (&str, "Symbol 0x%lx: %s", (unsigned long) i, bit) < 0) + goto oom; + free (bit); - free (args); ctf_dump_append (state, str); continue; oom: - free (args); - free (str); + free (bit); return (ctf_set_errno (fp, errno)); - err: - ctf_dprintf ("Cannot %s dumping function type for symbol 0x%li: %s\n", - err, (unsigned long) i, - ctf_errmsg (ctf_errno (state->cds_fp))); - free (args); - free (str); + + assert_err: + free (bit); return -1; /* errno is set for us. */ } return 0; @@ -506,7 +496,7 @@ CTF_ADD_ROOT)) == NULL) { free (str); - return -1; /* errno is set for us. */ + return 0; /* Swallow the error. */ } str = str_append (str, typestr); @@ -525,6 +515,7 @@ char *typestr = NULL; char *bit = NULL; ctf_encoding_t ep; + int has_encoding = 0; ssize_t i; for (i = 0; i < depth; i++) @@ -544,24 +535,40 @@ return 0; } - goto oom; + return -1; /* errno is set for us. */ + } + + if (ctf_type_encoding (state->cdm_fp, id, &ep) == 0) + { + has_encoding = 1; + ctf_type_encoding (state->cdm_fp, id, &ep); + + if (asprintf (&bit, " [0x%lx] (ID 0x%lx) (kind %i) %s%s%s:%i " + "(aligned at 0x%lx", offset, id, + ctf_type_kind (state->cdm_fp, id), typestr, + (name[0] != 0 && typestr[0] != 0) ? " " : "", name, + ep.cte_bits, (unsigned long) ctf_type_align (state->cdm_fp, + id)) < 0) + goto oom; + } + else + { + if (asprintf (&bit, " [0x%lx] (ID 0x%lx) (kind %i) %s%s%s " + "(aligned at 0x%lx", offset, id, + ctf_type_kind (state->cdm_fp, id), typestr, + (name[0] != 0 && typestr[0] != 0) ? " " : "", name, + (unsigned long) ctf_type_align (state->cdm_fp, id)) < 0) + goto oom; } - if (asprintf (&bit, " [0x%lx] (ID 0x%lx) (kind %i) %s %s (aligned at 0x%lx", - offset, id, ctf_type_kind (state->cdm_fp, id), typestr, name, - (unsigned long) ctf_type_align (state->cdm_fp, id)) < 0) - goto oom; *state->cdm_str = str_append (*state->cdm_str, bit); free (typestr); free (bit); typestr = NULL; bit = NULL; - if ((ctf_type_kind (state->cdm_fp, id) == CTF_K_INTEGER) - || (ctf_type_kind (state->cdm_fp, id) == CTF_K_FLOAT) - || (ctf_is_slice (state->cdm_fp, id, &ep) == CTF_K_ENUM)) + if (has_encoding) { - ctf_type_encoding (state->cdm_fp, id, &ep); if (asprintf (&bit, ", format 0x%x, offset:bits 0x%x:0x%x", ep.cte_format, ep.cte_offset, ep.cte_bits) < 0) goto oom; @@ -584,16 +591,12 @@ ctf_dump_type (ctf_id_t id, int flag, void *arg) { char *str; - const char *err; ctf_dump_state_t *state = arg; ctf_dump_membstate_t membstate = { &str, state->cds_fp }; size_t len; if ((str = ctf_dump_format_type (state->cds_fp, id, flag)) == NULL) - { - err = "format type"; - goto err; - } + goto err; str = str_append (str, "\n"); if ((ctf_type_visit (state->cds_fp, id, ctf_dump_member, &membstate)) < 0) @@ -603,7 +606,8 @@ ctf_dump_append (state, str); return 0; } - err = "visit members"; + ctf_err_warn (state->cds_fp, 1, ctf_errno (state->cds_fp), + _("cannot visit members dumping type 0x%lx"), id); goto err; } @@ -616,10 +620,8 @@ return 0; err: - ctf_dprintf ("Cannot %s dumping type 0x%lx: %s\n", err, id, - ctf_errmsg (ctf_errno (state->cds_fp))); free (str); - return -1; /* errno is set for us. */ + return 0; /* Swallow the error. */ } /* Dump the string table into the cds_items. */ diff -Nru gdb-9.1/libctf/ctf-endian.h gdb-10.2/libctf/ctf-endian.h --- gdb-9.1/libctf/ctf-endian.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libctf/ctf-endian.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Interface to endianness-neutrality functions. - Copyright (C) 2019 Free Software Foundation, Inc. + Copyright (C) 2019-2020 Free Software Foundation, Inc. This file is part of libctf. diff -Nru gdb-9.1/libctf/ctf-error.c gdb-10.2/libctf/ctf-error.c --- gdb-9.1/libctf/ctf-error.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libctf/ctf-error.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Error table. - Copyright (C) 2019 Free Software Foundation, Inc. + Copyright (C) 2019-2020 Free Software Foundation, Inc. This file is part of libctf. @@ -18,75 +18,59 @@ <http://www.gnu.org/licenses/>. */ #include <ctf-impl.h> +#include <stddef.h> +#include <string.h> -static const char *const _ctf_errlist[] = { - "File is not in CTF or ELF format", /* ECTF_FMT */ - "BFD error", /* ECTF_BFDERR */ - "File uses more recent CTF version than libctf", /* ECTF_CTFVERS */ - "Ambiguous BFD target", /* ECTF_BFD_AMBIGUOUS */ - "Symbol table uses invalid entry size", /* ECTF_SYMTAB */ - "Symbol table data buffer is not valid", /* ECTF_SYMBAD */ - "String table data buffer is not valid", /* ECTF_STRBAD */ - "File data structure corruption detected", /* ECTF_CORRUPT */ - "File does not contain CTF data", /* ECTF_NOCTFDATA */ - "Buffer does not contain CTF data", /* ECTF_NOCTFBUF */ - "Symbol table information is not available", /* ECTF_NOSYMTAB */ - "Type information is in parent and unavailable", /* ECTF_NOPARENT */ - "Cannot import types with different data model", /* ECTF_DMODEL */ - "File added to link too late", /* ECTF_LINKADDEDLATE */ - "Failed to allocate (de)compression buffer", /* ECTF_ZALLOC */ - "Failed to decompress CTF data", /* ECTF_DECOMPRESS */ - "External string table is not available", /* ECTF_STRTAB */ - "String name offset is corrupt", /* ECTF_BADNAME */ - "Invalid type identifier", /* ECTF_BADID */ - "Type is not a struct or union", /* ECTF_NOTSOU */ - "Type is not an enum", /* ECTF_NOTENUM */ - "Type is not a struct, union, or enum", /* ECTF_NOTSUE */ - "Type is not an integer, float, or enum", /* ECTF_NOTINTFP */ - "Type is not an array", /* ECTF_NOTARRAY */ - "Type does not reference another type", /* ECTF_NOTREF */ - "Input buffer is too small for type name", /* ECTF_NAMELEN */ - "No type information available for that name", /* ECTF_NOTYPE */ - "Syntax error in type name", /* ECTF_SYNTAX */ - "Symbol table entry or type is not a function", /* ECTF_NOTFUNC */ - "No function information available for symbol", /* ECTF_NOFUNCDAT */ - "Symbol table entry is not a data object", /* ECTF_NOTDATA */ - "No type information available for symbol", /* ECTF_NOTYPEDAT */ - "No label information available for that name", /* ECTF_NOLABEL */ - "File does not contain any labels", /* ECTF_NOLABELDATA */ - "Feature not supported", /* ECTF_NOTSUP */ - "Invalid enum element name", /* ECTF_NOENUMNAM */ - "Invalid member name", /* ECTF_NOMEMBNAM */ - "CTF container is read-only", /* ECTF_RDONLY */ - "Limit on number of dynamic type members reached", /* ECTF_DTFULL */ - "Limit on number of dynamic types reached", /* ECTF_FULL */ - "Duplicate member or variable name", /* ECTF_DUPLICATE */ - "Conflicting type is already defined", /* ECTF_CONFLICT */ - "Attempt to roll back past a ctf_update", /* ECTF_OVERROLLBACK */ - "Failed to compress CTF data", /* ECTF_COMPRESS */ - "Failed to create CTF archive", /* ECTF_ARCREATE */ - "Name not found in CTF archive", /* ECTF_ARNNAME */ - "Overflow of type bitness or offset in slice", /* ECTF_SLICEOVERFLOW */ - "Unknown section number in dump", /* ECTF_DUMPSECTUNKNOWN */ - "Section changed in middle of dump", /* ECTF_DUMPSECTCHANGED */ - "Feature not yet implemented", /* ECTF_NOTYET */ - "Internal error in link", /* ECTF_INTERNAL */ - "Type not representable in CTF" /* ECTF_NONREPRESENTABLE */ -}; +/* This construct is due to Bruno Haible: much thanks. */ -static const int _ctf_nerr = sizeof (_ctf_errlist) / sizeof (_ctf_errlist[0]); +/* Give each structure member a unique name. The name does not matter, so we + use the line number in ctf-error.h to uniquify them. */ + +#define ERRSTRFIELD(line) ERRSTRFIELD1 (line) +#define ERRSTRFIELD1(line) ctf_errstr##line + +/* The error message strings, each in a unique structure member precisely big + enough for that error, plus a str member to access them all as a string + table. */ + +static const union _ctf_errlist_t +{ + __extension__ struct + { +#define _CTF_STR(n, s) char ERRSTRFIELD (__LINE__) [sizeof (s)]; +#include "ctf-error.h" +#undef _CTF_STR + }; + char str[1]; +} _ctf_errlist = + { + { +#define _CTF_STR(n, s) N_(s), +#include "ctf-error.h" +#undef _CTF_STR + } + }; + +/* Offsets to each member in the string table, computed using offsetof. */ + +static const unsigned int _ctf_erridx[] = + { +#define _CTF_STR(n, s) [n - ECTF_BASE] = offsetof (union _ctf_errlist_t, ERRSTRFIELD (__LINE__)), +#include "ctf-error.h" +#undef _CTF_STR + }; const char * ctf_errmsg (int error) { const char *str; - if (error >= ECTF_BASE && (error - ECTF_BASE) < _ctf_nerr) - str = _ctf_errlist[error - ECTF_BASE]; + if (error >= ECTF_BASE && (error - ECTF_BASE) < ECTF_NERR) + str = _ctf_errlist.str + _ctf_erridx[error - ECTF_BASE]; else - str = ctf_strerror (error); + str = (const char *) strerror (error); - return (str ? str : "Unknown error"); + return (str ? gettext (str) : _("Unknown error")); } int diff -Nru gdb-9.1/libctf/ctf-hash.c gdb-10.2/libctf/ctf-hash.c --- gdb-9.1/libctf/ctf-hash.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libctf/ctf-hash.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Interface to hashtable implementations. - Copyright (C) 2006-2019 Free Software Foundation, Inc. + Copyright (C) 2006-2020 Free Software Foundation, Inc. This file is part of libctf. @@ -22,23 +22,35 @@ #include "libiberty.h" #include "hashtab.h" -/* We have two hashtable implementations: one, ctf_dynhash_*(), is an interface to - a dynamically-expanding hash with unknown size that should support addition - of large numbers of items, and removal as well, and is used only at - type-insertion time; the other, ctf_dynhash_*(), is an interface to a - fixed-size hash from const char * -> ctf_id_t with number of elements - specified at creation time, that should support addition of items but need - not support removal. These can be implemented by the same underlying hashmap - if you wish. */ +/* We have three hashtable implementations: + + - ctf_hash_* is an interface to a fixed-size hash from const char * -> + ctf_id_t with number of elements specified at creation time, that should + support addition of items but need not support removal. + + - ctf_dynhash_* is an interface to a dynamically-expanding hash with + unknown size that should support addition of large numbers of items, and + removal as well, and is used only at type-insertion time and during + linking. + + - ctf_dynset_* is an interface to a dynamically-expanding hash that contains + only keys: no values. + + These can be implemented by the same underlying hashmap if you wish. */ + +/* The helem is used for general key/value mappings in both the ctf_hash and + ctf_dynhash: the owner may not have space allocated for it, and will be + garbage (not NULL!) in that case. */ typedef struct ctf_helem { void *key; /* Either a pointer, or a coerced ctf_id_t. */ void *value; /* The value (possibly a coerced int). */ - ctf_hash_free_fun key_free; - ctf_hash_free_fun value_free; + ctf_dynhash_t *owner; /* The hash that owns us. */ } ctf_helem_t; +/* Equally, the key_free and value_free may not exist. */ + struct ctf_dynhash { struct htab *htab; @@ -46,7 +58,7 @@ ctf_hash_free_fun value_free; }; -/* Hash functions. */ +/* Hash and eq functions for the dynhash and hash. */ unsigned int ctf_hash_integer (const void *ptr) @@ -82,41 +94,74 @@ return !strcmp((const char *) hep_a->key, (const char *) hep_b->key); } -/* Hash a type_mapping_key. */ +/* Hash a type_key. */ +unsigned int +ctf_hash_type_key (const void *ptr) +{ + ctf_helem_t *hep = (ctf_helem_t *) ptr; + ctf_link_type_key_t *k = (ctf_link_type_key_t *) hep->key; + + return htab_hash_pointer (k->cltk_fp) + 59 + * htab_hash_pointer ((void *) (uintptr_t) k->cltk_idx); +} + +int +ctf_hash_eq_type_key (const void *a, const void *b) +{ + ctf_helem_t *hep_a = (ctf_helem_t *) a; + ctf_helem_t *hep_b = (ctf_helem_t *) b; + ctf_link_type_key_t *key_a = (ctf_link_type_key_t *) hep_a->key; + ctf_link_type_key_t *key_b = (ctf_link_type_key_t *) hep_b->key; + + return (key_a->cltk_fp == key_b->cltk_fp) + && (key_a->cltk_idx == key_b->cltk_idx); +} + +/* Hash a type_id_key. */ unsigned int -ctf_hash_type_mapping_key (const void *ptr) +ctf_hash_type_id_key (const void *ptr) { ctf_helem_t *hep = (ctf_helem_t *) ptr; - ctf_link_type_mapping_key_t *k = (ctf_link_type_mapping_key_t *) hep->key; + ctf_type_id_key_t *k = (ctf_type_id_key_t *) hep->key; - return htab_hash_pointer (k->cltm_fp) + 59 * htab_hash_pointer ((void *) k->cltm_idx); + return htab_hash_pointer ((void *) (uintptr_t) k->ctii_input_num) + + 59 * htab_hash_pointer ((void *) (uintptr_t) k->ctii_type); } int -ctf_hash_eq_type_mapping_key (const void *a, const void *b) +ctf_hash_eq_type_id_key (const void *a, const void *b) { ctf_helem_t *hep_a = (ctf_helem_t *) a; ctf_helem_t *hep_b = (ctf_helem_t *) b; - ctf_link_type_mapping_key_t *key_a = (ctf_link_type_mapping_key_t *) hep_a->key; - ctf_link_type_mapping_key_t *key_b = (ctf_link_type_mapping_key_t *) hep_b->key; + ctf_type_id_key_t *key_a = (ctf_type_id_key_t *) hep_a->key; + ctf_type_id_key_t *key_b = (ctf_type_id_key_t *) hep_b->key; - return (key_a->cltm_fp == key_b->cltm_fp) - && (key_a->cltm_idx == key_b->cltm_idx); + return (key_a->ctii_input_num == key_b->ctii_input_num) + && (key_a->ctii_type == key_b->ctii_type); +} + +/* Hash and eq functions for the dynset. Most of these can just use the + underlying hashtab functions directly. */ + +int +ctf_dynset_eq_string (const void *a, const void *b) +{ + return !strcmp((const char *) a, (const char *) b); } /* The dynhash, used for hashes whose size is not known at creation time. */ -/* Free a single ctf_helem. */ +/* Free a single ctf_helem with arbitrary key/value functions. */ static void ctf_dynhash_item_free (void *item) { ctf_helem_t *helem = item; - if (helem->key_free && helem->key) - helem->key_free (helem->key); - if (helem->value_free && helem->value) - helem->value_free (helem->value); + if (helem->owner->key_free && helem->key) + helem->owner->key_free (helem->key); + if (helem->owner->value_free && helem->value) + helem->owner->value_free (helem->value); free (helem); } @@ -125,21 +170,31 @@ ctf_hash_free_fun key_free, ctf_hash_free_fun value_free) { ctf_dynhash_t *dynhash; + htab_del del = ctf_dynhash_item_free; - dynhash = malloc (sizeof (ctf_dynhash_t)); + if (key_free || value_free) + dynhash = malloc (sizeof (ctf_dynhash_t)); + else + dynhash = malloc (offsetof (ctf_dynhash_t, key_free)); if (!dynhash) return NULL; - /* 7 is arbitrary and untested for now.. */ + if (key_free == NULL && value_free == NULL) + del = free; + + /* 7 is arbitrary and untested for now. */ if ((dynhash->htab = htab_create_alloc (7, (htab_hash) hash_fun, eq_fun, - ctf_dynhash_item_free, xcalloc, free)) == NULL) + del, xcalloc, free)) == NULL) { free (dynhash); return NULL; } - dynhash->key_free = key_free; - dynhash->value_free = value_free; + if (key_free || value_free) + { + dynhash->key_free = key_free; + dynhash->value_free = value_free; + } return dynhash; } @@ -162,24 +217,29 @@ if (!slot) { - errno = -ENOMEM; + errno = ENOMEM; return NULL; } if (!*slot) { - *slot = malloc (sizeof (ctf_helem_t)); + /* Only spend space on the owner if we're going to use it: if there is a + key or value freeing function. */ + if (key_free || value_free) + *slot = malloc (sizeof (ctf_helem_t)); + else + *slot = malloc (offsetof (ctf_helem_t, owner)); if (!*slot) return NULL; + (*slot)->key = key; } else { if (key_free) - key_free ((*slot)->key); + key_free (key); if (value_free) value_free ((*slot)->value); } - (*slot)->key = key; (*slot)->value = value; return *slot; } @@ -188,19 +248,25 @@ ctf_dynhash_insert (ctf_dynhash_t *hp, void *key, void *value) { ctf_helem_t *slot; + ctf_hash_free_fun key_free = NULL, value_free = NULL; + if (hp->htab->del_f == ctf_dynhash_item_free) + { + key_free = hp->key_free; + value_free = hp->value_free; + } slot = ctf_hashtab_insert (hp->htab, key, value, - hp->key_free, hp->value_free); + key_free, value_free); if (!slot) return errno; - /* We need to keep the key_free and value_free around in each item because the - del function has no visibility into the hash as a whole, only into the - individual items. */ + /* Keep track of the owner, so that the del function can get at the key_free + and value_free functions. Only do this if one of those functions is set: + if not, the owner is not even present in the helem. */ - slot->key_free = hp->key_free; - slot->value_free = hp->value_free; + if (key_free || value_free) + slot->owner = hp; return 0; } @@ -208,7 +274,7 @@ void ctf_dynhash_remove (ctf_dynhash_t *hp, const void *key) { - ctf_helem_t hep = { (void *) key, NULL, NULL, NULL }; + ctf_helem_t hep = { (void *) key, NULL, NULL }; htab_remove_elt (hp->htab, &hep); } @@ -218,6 +284,12 @@ htab_empty (hp->htab); } +size_t +ctf_dynhash_elements (ctf_dynhash_t *hp) +{ + return htab_elements (hp->htab); +} + void * ctf_dynhash_lookup (ctf_dynhash_t *hp, const void *key) { @@ -231,6 +303,26 @@ return NULL; } +/* TRUE/FALSE return. */ +int +ctf_dynhash_lookup_kv (ctf_dynhash_t *hp, const void *key, + const void **orig_key, void **value) +{ + ctf_helem_t **slot; + + slot = ctf_hashtab_lookup (hp->htab, key, NO_INSERT); + + if (slot) + { + if (orig_key) + *orig_key = (*slot)->key; + if (value) + *value = (*slot)->value; + return 1; + } + return 0; +} + typedef struct ctf_traverse_cb_arg { ctf_hash_iter_f fun; @@ -254,6 +346,35 @@ htab_traverse (hp->htab, ctf_hashtab_traverse, &arg); } +typedef struct ctf_traverse_find_cb_arg +{ + ctf_hash_iter_find_f fun; + void *arg; + void *found_key; +} ctf_traverse_find_cb_arg_t; + +static int +ctf_hashtab_traverse_find (void **slot, void *arg_) +{ + ctf_helem_t *helem = *((ctf_helem_t **) slot); + ctf_traverse_find_cb_arg_t *arg = (ctf_traverse_find_cb_arg_t *) arg_; + + if (arg->fun (helem->key, helem->value, arg->arg)) + { + arg->found_key = helem->key; + return 0; + } + return 1; +} + +void * +ctf_dynhash_iter_find (ctf_dynhash_t *hp, ctf_hash_iter_find_f fun, void *arg_) +{ + ctf_traverse_find_cb_arg_t arg = { fun, arg_, NULL }; + htab_traverse (hp->htab, ctf_hashtab_traverse_find, &arg); + return arg.found_key; +} + typedef struct ctf_traverse_remove_cb_arg { struct htab *htab; @@ -280,6 +401,163 @@ htab_traverse (hp->htab, ctf_hashtab_traverse_remove, &arg); } +/* Traverse a dynhash in arbitrary order, in _next iterator form. + + Mutating the dynhash while iterating is not supported (just as it isn't for + htab_traverse). + + Note: unusually, this returns zero on success and a *positive* value on + error, because it does not take an fp, taking an error pointer would be + incredibly clunky, and nearly all error-handling ends up stuffing the result + of this into some sort of errno or ctf_errno, which is invariably + positive. So doing this simplifies essentially all callers. */ +int +ctf_dynhash_next (ctf_dynhash_t *h, ctf_next_t **it, void **key, void **value) +{ + ctf_next_t *i = *it; + ctf_helem_t *slot; + + if (!i) + { + size_t size = htab_size (h->htab); + + /* If the table has too many entries to fit in an ssize_t, just give up. + This might be spurious, but if any type-related hashtable has ever been + nearly as large as that then something very odd is going on. */ + if (((ssize_t) size) < 0) + return EDOM; + + if ((i = ctf_next_create ()) == NULL) + return ENOMEM; + + i->u.ctn_hash_slot = h->htab->entries; + i->cu.ctn_h = h; + i->ctn_n = 0; + i->ctn_size = (ssize_t) size; + i->ctn_iter_fun = (void (*) (void)) ctf_dynhash_next; + *it = i; + } + + if ((void (*) (void)) ctf_dynhash_next != i->ctn_iter_fun) + return ECTF_NEXT_WRONGFUN; + + if (h != i->cu.ctn_h) + return ECTF_NEXT_WRONGFP; + + if ((ssize_t) i->ctn_n == i->ctn_size) + goto hash_end; + + while ((ssize_t) i->ctn_n < i->ctn_size + && (*i->u.ctn_hash_slot == HTAB_EMPTY_ENTRY + || *i->u.ctn_hash_slot == HTAB_DELETED_ENTRY)) + { + i->u.ctn_hash_slot++; + i->ctn_n++; + } + + if ((ssize_t) i->ctn_n == i->ctn_size) + goto hash_end; + + slot = *i->u.ctn_hash_slot; + + if (key) + *key = slot->key; + if (value) + *value = slot->value; + + i->u.ctn_hash_slot++; + i->ctn_n++; + + return 0; + + hash_end: + ctf_next_destroy (i); + *it = NULL; + return ECTF_NEXT_END; +} + +/* Traverse a sorted dynhash, in _next iterator form. + + See ctf_dynhash_next for notes on error returns, etc. + + Sort keys before iterating over them using the SORT_FUN and SORT_ARG. + + If SORT_FUN is null, thunks to ctf_dynhash_next. */ +int +ctf_dynhash_next_sorted (ctf_dynhash_t *h, ctf_next_t **it, void **key, + void **value, ctf_hash_sort_f sort_fun, void *sort_arg) +{ + ctf_next_t *i = *it; + + if (sort_fun == NULL) + return ctf_dynhash_next (h, it, key, value); + + if (!i) + { + size_t els = ctf_dynhash_elements (h); + ctf_next_t *accum_i = NULL; + void *key, *value; + int err; + ctf_next_hkv_t *walk; + + if (((ssize_t) els) < 0) + return EDOM; + + if ((i = ctf_next_create ()) == NULL) + return ENOMEM; + + if ((i->u.ctn_sorted_hkv = calloc (els, sizeof (ctf_next_hkv_t))) == NULL) + { + ctf_next_destroy (i); + return ENOMEM; + } + walk = i->u.ctn_sorted_hkv; + + i->cu.ctn_h = h; + + while ((err = ctf_dynhash_next (h, &accum_i, &key, &value)) == 0) + { + walk->hkv_key = key; + walk->hkv_value = value; + walk++; + } + if (err != ECTF_NEXT_END) + { + ctf_next_destroy (i); + return err; + } + + if (sort_fun) + ctf_qsort_r (i->u.ctn_sorted_hkv, els, sizeof (ctf_next_hkv_t), + (int (*) (const void *, const void *, void *)) sort_fun, + sort_arg); + i->ctn_n = 0; + i->ctn_size = (ssize_t) els; + i->ctn_iter_fun = (void (*) (void)) ctf_dynhash_next_sorted; + *it = i; + } + + if ((void (*) (void)) ctf_dynhash_next_sorted != i->ctn_iter_fun) + return ECTF_NEXT_WRONGFUN; + + if (h != i->cu.ctn_h) + return ECTF_NEXT_WRONGFP; + + if ((ssize_t) i->ctn_n == i->ctn_size) + { + ctf_next_destroy (i); + *it = NULL; + return ECTF_NEXT_END; + } + + if (key) + *key = i->u.ctn_sorted_hkv[i->ctn_n].hkv_key; + if (value) + *value = i->u.ctn_sorted_hkv[i->ctn_n].hkv_value; + i->ctn_n++; + return 0; +} + void ctf_dynhash_destroy (ctf_dynhash_t *hp) { @@ -288,6 +566,203 @@ free (hp); } +/* The dynset, used for sets of keys with no value. The implementation of this + can be much simpler, because without a value the slot can simply be the + stored key, which means we don't need to store the freeing functions and the + dynset itself is just a htab. */ + +ctf_dynset_t * +ctf_dynset_create (htab_hash hash_fun, htab_eq eq_fun, + ctf_hash_free_fun key_free) +{ + /* 7 is arbitrary and untested for now. */ + return (ctf_dynset_t *) htab_create_alloc (7, (htab_hash) hash_fun, eq_fun, + key_free, xcalloc, free); +} + +/* The dynset has one complexity: the underlying implementation reserves two + values for internal hash table implementation details (empty versus deleted + entries). These values are otherwise very useful for pointers cast to ints, + so transform the ctf_dynset_inserted value to allow for it. (This + introduces an ambiguity in that one can no longer store these two values in + the dynset, but if we pick high enough values this is very unlikely to be a + problem.) + + We leak this implementation detail to the freeing functions on the grounds + that any use of these functions is overwhelmingly likely to be in sets using + real pointers, which will be unaffected. */ + +#define DYNSET_EMPTY_ENTRY_REPLACEMENT ((void *) (uintptr_t) -64) +#define DYNSET_DELETED_ENTRY_REPLACEMENT ((void *) (uintptr_t) -63) + +static void * +key_to_internal (const void *key) +{ + if (key == HTAB_EMPTY_ENTRY) + return DYNSET_EMPTY_ENTRY_REPLACEMENT; + else if (key == HTAB_DELETED_ENTRY) + return DYNSET_DELETED_ENTRY_REPLACEMENT; + + return (void *) key; +} + +static void * +internal_to_key (const void *internal) +{ + if (internal == DYNSET_EMPTY_ENTRY_REPLACEMENT) + return HTAB_EMPTY_ENTRY; + else if (internal == DYNSET_DELETED_ENTRY_REPLACEMENT) + return HTAB_DELETED_ENTRY; + return (void *) internal; +} + +int +ctf_dynset_insert (ctf_dynset_t *hp, void *key) +{ + struct htab *htab = (struct htab *) hp; + void **slot; + + slot = htab_find_slot (htab, key, INSERT); + + if (!slot) + { + errno = ENOMEM; + return -errno; + } + + if (*slot) + { + if (htab->del_f) + (*htab->del_f) (*slot); + } + + *slot = key_to_internal (key); + + return 0; +} + +void +ctf_dynset_remove (ctf_dynset_t *hp, const void *key) +{ + htab_remove_elt ((struct htab *) hp, key_to_internal (key)); +} + +void +ctf_dynset_destroy (ctf_dynset_t *hp) +{ + if (hp != NULL) + htab_delete ((struct htab *) hp); +} + +void * +ctf_dynset_lookup (ctf_dynset_t *hp, const void *key) +{ + void **slot = htab_find_slot ((struct htab *) hp, + key_to_internal (key), NO_INSERT); + + if (slot) + return internal_to_key (*slot); + return NULL; +} + +/* TRUE/FALSE return. */ +int +ctf_dynset_exists (ctf_dynset_t *hp, const void *key, const void **orig_key) +{ + void **slot = htab_find_slot ((struct htab *) hp, + key_to_internal (key), NO_INSERT); + + if (orig_key && slot) + *orig_key = internal_to_key (*slot); + return (slot != NULL); +} + +/* Look up a completely random value from the set, if any exist. + Keys with value zero cannot be distinguished from a nonexistent key. */ +void * +ctf_dynset_lookup_any (ctf_dynset_t *hp) +{ + struct htab *htab = (struct htab *) hp; + void **slot = htab->entries; + void **limit = slot + htab_size (htab); + + while (slot < limit + && (*slot == HTAB_EMPTY_ENTRY || *slot == HTAB_DELETED_ENTRY)) + slot++; + + if (slot < limit) + return internal_to_key (*slot); + return NULL; +} + +/* Traverse a dynset in arbitrary order, in _next iterator form. + + Otherwise, just like ctf_dynhash_next. */ +int +ctf_dynset_next (ctf_dynset_t *hp, ctf_next_t **it, void **key) +{ + struct htab *htab = (struct htab *) hp; + ctf_next_t *i = *it; + void *slot; + + if (!i) + { + size_t size = htab_size (htab); + + /* If the table has too many entries to fit in an ssize_t, just give up. + This might be spurious, but if any type-related hashtable has ever been + nearly as large as that then somthing very odd is going on. */ + + if (((ssize_t) size) < 0) + return EDOM; + + if ((i = ctf_next_create ()) == NULL) + return ENOMEM; + + i->u.ctn_hash_slot = htab->entries; + i->cu.ctn_s = hp; + i->ctn_n = 0; + i->ctn_size = (ssize_t) size; + i->ctn_iter_fun = (void (*) (void)) ctf_dynset_next; + *it = i; + } + + if ((void (*) (void)) ctf_dynset_next != i->ctn_iter_fun) + return ECTF_NEXT_WRONGFUN; + + if (hp != i->cu.ctn_s) + return ECTF_NEXT_WRONGFP; + + if ((ssize_t) i->ctn_n == i->ctn_size) + goto set_end; + + while ((ssize_t) i->ctn_n < i->ctn_size + && (*i->u.ctn_hash_slot == HTAB_EMPTY_ENTRY + || *i->u.ctn_hash_slot == HTAB_DELETED_ENTRY)) + { + i->u.ctn_hash_slot++; + i->ctn_n++; + } + + if ((ssize_t) i->ctn_n == i->ctn_size) + goto set_end; + + slot = *i->u.ctn_hash_slot; + + if (key) + *key = internal_to_key (slot); + + i->u.ctn_hash_slot++; + i->ctn_n++; + + return 0; + + set_end: + ctf_next_destroy (i); + *it = NULL; + return ECTF_NEXT_END; +} + /* ctf_hash, used for fixed-size maps from const char * -> ctf_id_t without removal. This is a straight cast of a hashtab. */ @@ -334,12 +809,12 @@ /* if the key is already in the hash, override the previous definition with this new official definition. If the key is not present, then call - ctf_hash_insert_type() and hash it in. */ + ctf_hash_insert_type and hash it in. */ int ctf_hash_define_type (ctf_hash_t *hp, ctf_file_t *fp, uint32_t type, uint32_t name) { - /* This matches the semantics of ctf_hash_insert_type() in this + /* This matches the semantics of ctf_hash_insert_type in this implementation anyway. */ return ctf_hash_insert_type (hp, fp, type, name); @@ -354,7 +829,7 @@ slot = ctf_hashtab_lookup ((struct htab *) hp, key, NO_INSERT); if (slot) - return (ctf_id_t) ((*slot)->value); + return (ctf_id_t) (uintptr_t) ((*slot)->value); return 0; } diff -Nru gdb-9.1/libctf/ctf-impl.h gdb-10.2/libctf/ctf-impl.h --- gdb-9.1/libctf/ctf-impl.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libctf/ctf-impl.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Implementation header. - Copyright (C) 2019 Free Software Foundation, Inc. + Copyright (C) 2019-2020 Free Software Foundation, Inc. This file is part of libctf. @@ -25,6 +25,7 @@ #include <sys/param.h> #include "ctf-decls.h" #include <ctf-api.h> +#include "ctf-sha1.h" #include <sys/types.h> #include <stdlib.h> #include <stdarg.h> @@ -34,10 +35,12 @@ #include <ctype.h> #include <elf.h> #include <bfd.h> +#include "hashtab.h" +#include "ctf-intl.h" #ifdef __cplusplus extern "C" - { +{ #endif /* Compiler attributes. */ @@ -59,12 +62,30 @@ #define _libctf_unused_ __attribute__ ((__unused__)) #define _libctf_malloc_ __attribute__((__malloc__)) +#else + +#define _libctf_printflike_(string_index,first_to_check) +#define _libctf_unlikely_(x) (x) +#define _libctf_unused_ +#define _libctf_malloc_ +#define __extension__ + +#endif + +#if defined (ENABLE_LIBCTF_HASH_DEBUGGING) && !defined (NDEBUG) +#include <assert.h> +#define ctf_assert(fp, expr) (assert (expr), 1) +#else +#define ctf_assert(fp, expr) \ + _libctf_unlikely_ (ctf_assert_internal (fp, __FILE__, __LINE__, \ + #expr, !!(expr))) #endif /* libctf in-memory state. */ typedef struct ctf_fixed_hash ctf_hash_t; /* Private to ctf-hash.c. */ typedef struct ctf_dynhash ctf_dynhash_t; /* Private to ctf-hash.c. */ +typedef struct ctf_dynset ctf_dynset_t; /* Private to ctf-hash.c. */ typedef struct ctf_strs { @@ -109,7 +130,7 @@ uint32_t (*ctfo_get_vlen) (uint32_t); ssize_t (*ctfo_get_ctt_size) (const ctf_file_t *, const ctf_type_t *, ssize_t *, ssize_t *); - ssize_t (*ctfo_get_vbytes) (unsigned short, ssize_t, size_t); + ssize_t (*ctfo_get_vbytes) (ctf_file_t *, unsigned short, ssize_t, size_t); } ctf_fileops_t; typedef struct ctf_list @@ -165,7 +186,7 @@ ctf_list_t dtu_members; /* struct, union, or enum */ ctf_arinfo_t dtu_arr; /* array */ ctf_encoding_t dtu_enc; /* integer or float */ - ctf_id_t *dtu_argv; /* function */ + uint32_t *dtu_argv; /* function */ ctf_slice_t dtu_slice; /* slice */ } dtd_u; } ctf_dtdef_t; @@ -178,12 +199,12 @@ unsigned long dvd_snapshots; /* Snapshot count when inserted. */ } ctf_dvdef_t; -typedef struct ctf_bundle +typedef struct ctf_err_warning { - ctf_file_t *ctb_file; /* CTF container handle. */ - ctf_id_t ctb_type; /* CTF type identifier. */ - ctf_dtdef_t *ctb_dtd; /* CTF dynamic type definition (if any). */ -} ctf_bundle_t; + ctf_list_t cew_list; /* List forward/back pointers. */ + int cew_is_warning; /* 1 if warning, 0 if error. */ + char *cew_text; /* Error/warning text. */ +} ctf_err_warning_t; /* Atoms associate strings with a list of the CTF items that reference that string, so that ctf_update() can instantiate all the strings using the @@ -211,16 +232,115 @@ uint32_t *caf_ref; /* A single ref to this string. */ } ctf_str_atom_ref_t; -/* The structure used as the key in a ctf_link_type_mapping, which lets the - linker machinery determine which type IDs on the input side of a link map to - which types on the output side. (The value is a ctf_id_t: another - index, not a type.) */ - -typedef struct ctf_link_type_mapping_key -{ - ctf_file_t *cltm_fp; - ctf_id_t cltm_idx; -} ctf_link_type_mapping_key_t; +/* The structure used as the key in a ctf_link_type_mapping. The value is a + type index, not a type ID. */ + +typedef struct ctf_link_type_key +{ + ctf_file_t *cltk_fp; + ctf_id_t cltk_idx; +} ctf_link_type_key_t; + +/* The structure used as the key in a cd_id_to_file_t on 32-bit platforms. */ +typedef struct ctf_type_id_key +{ + int ctii_input_num; + ctf_id_t ctii_type; +} ctf_type_id_key_t; + +/* Deduplicator state. + + The dedup state below uses three terms consistently. A "hash" is a + ctf_dynhash_t; a "hash value" is the hash value of a type as returned by + ctf_dedup_hash_type; a "global type ID" or "global ID" is a packed-together + reference to a single ctf_file_t (by array index in an array of inputs) and + ctf_id_t, i.e. a single instance of some hash value in some input. + + The deduplication algorithm takes a bunch of inputs and yields a single + shared "output" and possibly many outputs corresponding to individual inputs + that still contain types after sharing of unconflicted types. Almost all + deduplicator state is stored in the struct ctf_dedup in the output, though a + (very) few things are stored in inputs for simplicity's sake, usually if they + are linking together things within the scope of a single TU. + + Flushed at the end of every ctf_dedup run. */ + +typedef struct ctf_dedup +{ + /* The CTF linker flags in force for this dedup run. */ + int cd_link_flags; + + /* On 32-bit platforms only, a hash of global type IDs, in the form of + a ctf_link_type_id_key_t. */ + ctf_dynhash_t *cd_id_to_file_t; + + /* Atoms tables of decorated names: maps undecorated name to decorated name. + (The actual allocations are in the CTF file for the former and the real + atoms table for the latter). Uses the same namespaces as ctf_lookups, + below, but has no need for null-termination. */ + ctf_dynhash_t *cd_decorated_names[4]; + + /* Map type names to a hash from type hash value -> number of times each value + has appeared. */ + ctf_dynhash_t *cd_name_counts; + + /* Map global type IDs to type hash values. Used to determine if types are + already hashed without having to recompute their hash values again, and to + link types together at later stages. Forwards that are peeked through to + structs and unions are not represented in here, so lookups that might be + such a type (in practice, all lookups) must go via cd_replaced_types first + to take this into account. Discarded before each rehashing. */ + ctf_dynhash_t *cd_type_hashes; + + /* Maps from the names of structs/unions/enums to a a single GID which is the + only appearance of that type in any input: if it appears in more than one + input, a value which is a GID with an input_num of -1 appears. Used in + share-duplicated link mode link modes to determine whether structs/unions + can be cited from multiple TUs. Only populated in that link mode. */ + ctf_dynhash_t *cd_struct_origin; + + /* Maps type hash values to a set of hash values of the types that cite them: + i.e., pointing backwards up the type graph. Used for recursive conflict + marking. Citations from tagged structures, unions, and forwards do not + appear in this graph. */ + ctf_dynhash_t *cd_citers; + + /* Maps type hash values to input global type IDs. The value is a set (a + hash) of global type IDs. Discarded before each rehashing. The result of + the ctf_dedup function. */ + ctf_dynhash_t *cd_output_mapping; + + /* A map giving the GID of the first appearance of each type for each type + hash value. */ + ctf_dynhash_t *cd_output_first_gid; + + /* Used to ensure that we never try to map a single type ID to more than one + hash. */ + ctf_dynhash_t *cd_output_mapping_guard; + + /* Maps the global type IDs of structures in input TUs whose members still + need emission to the global type ID of the already-emitted target type + (which has no members yet) in the appropriate target. Uniquely, the latter + ID represents a *target* ID (i.e. the cd_output_mapping of some specified + input): we encode the shared (parent) dict with an ID of -1. */ + ctf_dynhash_t *cd_emission_struct_members; + + /* A set (a hash) of hash values of conflicting types. */ + ctf_dynset_t *cd_conflicting_types; + + /* Maps type hashes to ctf_id_t's in this dictionary. Populated only at + emission time, in the dictionary where emission is taking place. */ + ctf_dynhash_t *cd_output_emission_hashes; + + /* Maps the decorated names of conflicted cross-TU forwards that were forcibly + emitted in this TU to their emitted ctf_id_ts. Populated only at emission + time, in the dictionary where emission is taking place. */ + ctf_dynhash_t *cd_output_emission_conflicted_forwards; + + /* Points to the output counterpart of this input dictionary, at emission + time. */ + ctf_file_t *cd_output; +} ctf_dedup_t; /* The ctf_file is the structure used to represent a CTF container to library clients, who see it only as an opaque pointer. Modifications can therefore @@ -271,6 +391,7 @@ const char *ctf_cuname; /* Compilation unit name (if any). */ char *ctf_dyncuname; /* Dynamically allocated name of CU. */ struct ctf_file *ctf_parent; /* Parent CTF container (if any). */ + int ctf_parent_unreffed; /* Parent set by ctf_import_unref? */ const char *ctf_parlabel; /* Label in parent container (if any). */ const char *ctf_parname; /* Basename of parent (if any). */ char *ctf_dynparname; /* Dynamically allocated name of parent. */ @@ -287,14 +408,50 @@ unsigned long ctf_snapshots; /* ctf_snapshot() plus ctf_update() count. */ unsigned long ctf_snapshot_lu; /* ctf_snapshot() call count at last update. */ ctf_archive_t *ctf_archive; /* Archive this ctf_file_t came from. */ + ctf_list_t ctf_errs_warnings; /* CTF errors and warnings. */ ctf_dynhash_t *ctf_link_inputs; /* Inputs to this link. */ ctf_dynhash_t *ctf_link_outputs; /* Additional outputs from this link. */ - ctf_dynhash_t *ctf_link_type_mapping; /* Map input types to output types. */ - ctf_dynhash_t *ctf_link_cu_mapping; /* Map CU names to CTF dict names. */ - /* Allow the caller to Change the name of link archive members. */ + + /* Map input types to output types: populated in each output dict. + Key is a ctf_link_type_key_t: value is a type ID. Used by + nondeduplicating links and ad-hoc ctf_add_type calls only. */ + ctf_dynhash_t *ctf_link_type_mapping; + + /* Map input CU names to output CTF dict names: populated in the top-level + output dict. + + Key and value are dynamically-allocated strings. */ + ctf_dynhash_t *ctf_link_in_cu_mapping; + + /* Map output CTF dict names to input CU names: populated in the top-level + output dict. A hash of string to hash (set) of strings. Key and + individual value members are shared with ctf_link_in_cu_mapping. */ + ctf_dynhash_t *ctf_link_out_cu_mapping; + + /* CTF linker flags. */ + int ctf_link_flags; + + /* Allow the caller to change the name of link archive members. */ ctf_link_memb_name_changer_f *ctf_link_memb_name_changer; - void *ctf_link_memb_name_changer_arg; /* Argument for it. */ + void *ctf_link_memb_name_changer_arg; /* Argument for it. */ + + /* Allow the caller to filter out variables they don't care about. */ + ctf_link_variable_filter_f *ctf_link_variable_filter; + void *ctf_link_variable_filter_arg; /* Argument for it. */ + ctf_dynhash_t *ctf_add_processing; /* Types ctf_add_type is working on now. */ + + /* Atoms table for dedup string storage. All strings in the ctf_dedup_t are + stored here. Only the _alloc copy is allocated or freed: the + ctf_dedup_atoms may be pointed to some other CTF dict, to share its atoms. + We keep the atoms table outside the ctf_dedup so that atoms can be + preserved across multiple similar links, such as when doing cu-mapped + links. */ + ctf_dynset_t *ctf_dedup_atoms; + ctf_dynset_t *ctf_dedup_atoms_alloc; + + ctf_dedup_t ctf_dedup; /* Deduplicator state. */ + char *ctf_tmp_typeslice; /* Storage for slicing up type names. */ size_t ctf_tmp_typeslicelen; /* Size of the typeslice. */ void *ctf_specific; /* Data for ctf_get/setspecific(). */ @@ -305,15 +462,59 @@ struct ctf_archive_internal { int ctfi_is_archive; + int ctfi_unmap_on_close; ctf_file_t *ctfi_file; struct ctf_archive *ctfi_archive; ctf_sect_t ctfi_symsect; ctf_sect_t ctfi_strsect; + int ctfi_free_symsect; + int ctfi_free_strsect; void *ctfi_data; bfd *ctfi_abfd; /* Optional source of section data. */ void (*ctfi_bfd_close) (struct ctf_archive_internal *); }; +/* Iterator state for the *_next() functions. */ + +/* A single hash key/value pair. */ +typedef struct ctf_next_hkv +{ + void *hkv_key; + void *hkv_value; +} ctf_next_hkv_t; + +struct ctf_next +{ + void (*ctn_iter_fun) (void); + ctf_id_t ctn_type; + ssize_t ctn_size; + ssize_t ctn_increment; + uint32_t ctn_n; + /* We can save space on this side of things by noting that a container is + either dynamic or not, as a whole, and a given iterator can only iterate + over one kind of thing at once: so we can overlap the DTD and non-DTD + members, and the structure, variable and enum members, etc. */ + union + { + const ctf_member_t *ctn_mp; + const ctf_lmember_t *ctn_lmp; + const ctf_dmdef_t *ctn_dmd; + const ctf_enum_t *ctn_en; + const ctf_dvdef_t *ctn_dvd; + ctf_next_hkv_t *ctn_sorted_hkv; + void **ctn_hash_slot; + } u; + /* This union is of various sorts of container we can iterate over: + currently dictionaries and archives, dynhashes, and dynsets. */ + union + { + const ctf_file_t *ctn_fp; + const ctf_archive_t *ctn_arc; + const ctf_dynhash_t *ctn_h; + const ctf_dynset_t *ctn_s; + } cu; +}; + /* Return x rounded up to an alignment boundary. eg, P2ROUNDUP(0x1234, 0x100) == 0x1300 (0x13*align) eg, P2ROUNDUP(0x5600, 0x100) == 0x5600 (0x56*align) */ @@ -338,15 +539,7 @@ #define LCTF_INFO_ISROOT(fp, info) ((fp)->ctf_fileops->ctfo_get_root(info)) #define LCTF_INFO_VLEN(fp, info) ((fp)->ctf_fileops->ctfo_get_vlen(info)) #define LCTF_VBYTES(fp, kind, size, vlen) \ - ((fp)->ctf_fileops->ctfo_get_vbytes(kind, size, vlen)) - -static inline ssize_t ctf_get_ctt_size (const ctf_file_t *fp, - const ctf_type_t *tp, - ssize_t *sizep, - ssize_t *incrementp) -{ - return (fp->ctf_fileops->ctfo_get_ctt_size (fp, tp, sizep, incrementp)); -} + ((fp)->ctf_fileops->ctfo_get_vbytes(fp, kind, size, vlen)) #define LCTF_CHILD 0x0001 /* CTF container is a child */ #define LCTF_RDWR 0x0002 /* CTF container is writable */ @@ -358,20 +551,29 @@ extern ctf_id_t ctf_lookup_by_rawhash (ctf_file_t *, ctf_names_t *, const char *); extern void ctf_set_ctl_hashes (ctf_file_t *); +extern ctf_file_t *ctf_get_dict (ctf_file_t *fp, ctf_id_t type); + typedef unsigned int (*ctf_hash_fun) (const void *ptr); extern unsigned int ctf_hash_integer (const void *ptr); extern unsigned int ctf_hash_string (const void *ptr); -extern unsigned int ctf_hash_type_mapping_key (const void *ptr); +extern unsigned int ctf_hash_type_key (const void *ptr); +extern unsigned int ctf_hash_type_id_key (const void *ptr); typedef int (*ctf_hash_eq_fun) (const void *, const void *); extern int ctf_hash_eq_integer (const void *, const void *); extern int ctf_hash_eq_string (const void *, const void *); -extern int ctf_hash_eq_type_mapping_key (const void *, const void *); +extern int ctf_hash_eq_type_key (const void *, const void *); +extern int ctf_hash_eq_type_id_key (const void *, const void *); + +extern int ctf_dynset_eq_string (const void *, const void *); typedef void (*ctf_hash_free_fun) (void *); typedef void (*ctf_hash_iter_f) (void *key, void *value, void *arg); typedef int (*ctf_hash_iter_remove_f) (void *key, void *value, void *arg); +typedef int (*ctf_hash_iter_find_f) (void *key, void *value, void *arg); +typedef int (*ctf_hash_sort_f) (const ctf_next_hkv_t *, const ctf_next_hkv_t *, + void *arg); extern ctf_hash_t *ctf_hash_create (unsigned long, ctf_hash_fun, ctf_hash_eq_fun); extern int ctf_hash_insert_type (ctf_hash_t *, ctf_file_t *, uint32_t, uint32_t); @@ -384,12 +586,36 @@ ctf_hash_free_fun, ctf_hash_free_fun); extern int ctf_dynhash_insert (ctf_dynhash_t *, void *, void *); extern void ctf_dynhash_remove (ctf_dynhash_t *, const void *); +extern size_t ctf_dynhash_elements (ctf_dynhash_t *); extern void ctf_dynhash_empty (ctf_dynhash_t *); extern void *ctf_dynhash_lookup (ctf_dynhash_t *, const void *); +extern int ctf_dynhash_lookup_kv (ctf_dynhash_t *, const void *key, + const void **orig_key, void **value); extern void ctf_dynhash_destroy (ctf_dynhash_t *); extern void ctf_dynhash_iter (ctf_dynhash_t *, ctf_hash_iter_f, void *); extern void ctf_dynhash_iter_remove (ctf_dynhash_t *, ctf_hash_iter_remove_f, void *); +extern void *ctf_dynhash_iter_find (ctf_dynhash_t *, ctf_hash_iter_find_f, + void *); +extern int ctf_dynhash_next (ctf_dynhash_t *, ctf_next_t **, + void **key, void **value); +extern int ctf_dynhash_next_sorted (ctf_dynhash_t *, ctf_next_t **, + void **key, void **value, ctf_hash_sort_f, + void *); + +extern ctf_dynset_t *ctf_dynset_create (htab_hash, htab_eq, ctf_hash_free_fun); +extern int ctf_dynset_insert (ctf_dynset_t *, void *); +extern void ctf_dynset_remove (ctf_dynset_t *, const void *); +extern void ctf_dynset_destroy (ctf_dynset_t *); +extern void *ctf_dynset_lookup (ctf_dynset_t *, const void *); +extern int ctf_dynset_exists (ctf_dynset_t *, const void *key, + const void **orig_key); +extern int ctf_dynset_next (ctf_dynset_t *, ctf_next_t **, void **key); +extern void *ctf_dynset_lookup_any (ctf_dynset_t *); + +extern void ctf_sha1_init (ctf_sha1_t *); +extern void ctf_sha1_add (ctf_sha1_t *, const void *, size_t); +extern char *ctf_sha1_fini (ctf_sha1_t *, char *); #define ctf_list_prev(elem) ((void *)(((ctf_list_t *)(elem))->l_prev)) #define ctf_list_next(elem) ((void *)(((ctf_list_t *)(elem))->l_next)) @@ -397,9 +623,10 @@ extern void ctf_list_append (ctf_list_t *, void *); extern void ctf_list_prepend (ctf_list_t *, void *); extern void ctf_list_delete (ctf_list_t *, void *); +extern void ctf_list_splice (ctf_list_t *, ctf_list_t *); extern int ctf_list_empty_p (ctf_list_t *lp); -extern int ctf_dtd_insert (ctf_file_t *, ctf_dtdef_t *, int); +extern int ctf_dtd_insert (ctf_file_t *, ctf_dtdef_t *, int flag, int kind); extern void ctf_dtd_delete (ctf_file_t *, ctf_dtdef_t *); extern ctf_dtdef_t *ctf_dtd_lookup (const ctf_file_t *, ctf_id_t); extern ctf_dtdef_t *ctf_dynamic_type (const ctf_file_t *, ctf_id_t); @@ -408,11 +635,24 @@ extern void ctf_dvd_delete (ctf_file_t *, ctf_dvdef_t *); extern ctf_dvdef_t *ctf_dvd_lookup (const ctf_file_t *, const char *); +extern ctf_id_t ctf_add_encoded (ctf_file_t *, uint32_t, const char *, + const ctf_encoding_t *, uint32_t kind); +extern ctf_id_t ctf_add_reftype (ctf_file_t *, uint32_t, ctf_id_t, + uint32_t kind); + extern void ctf_add_type_mapping (ctf_file_t *src_fp, ctf_id_t src_type, ctf_file_t *dst_fp, ctf_id_t dst_type); extern ctf_id_t ctf_type_mapping (ctf_file_t *src_fp, ctf_id_t src_type, ctf_file_t **dst_fp); +extern int ctf_dedup_atoms_init (ctf_file_t *); +extern int ctf_dedup (ctf_file_t *, ctf_file_t **, uint32_t ninputs, + uint32_t *parents, int cu_mapped); +extern void ctf_dedup_fini (ctf_file_t *, ctf_file_t **, uint32_t); +extern ctf_file_t **ctf_dedup_emit (ctf_file_t *, ctf_file_t **, + uint32_t ninputs, uint32_t *parents, + uint32_t *noutputs, int cu_mapped); + extern void ctf_decl_init (ctf_decl_t *); extern void ctf_decl_fini (ctf_decl_t *); extern void ctf_decl_push (ctf_decl_t *, ctf_file_t *, ctf_id_t); @@ -435,8 +675,12 @@ extern void ctf_str_purge_refs (ctf_file_t *); extern ctf_strs_writable_t ctf_str_write_strtab (ctf_file_t *); +extern struct ctf_archive_internal * +ctf_new_archive_internal (int is_archive, int unmap_on_close, + struct ctf_archive *, ctf_file_t *, + const ctf_sect_t *symsect, + const ctf_sect_t *strsect, int *errp); extern struct ctf_archive *ctf_arc_open_internal (const char *, int *); -extern struct ctf_archive *ctf_arc_bufopen (const void *, size_t, int *); extern void ctf_arc_close_internal (struct ctf_archive *); extern void *ctf_set_open_errno (int *, int); extern unsigned long ctf_set_errno (ctf_file_t *, int); @@ -448,6 +692,7 @@ extern ctf_file_t *ctf_bufopen_internal (const ctf_sect_t *, const ctf_sect_t *, const ctf_sect_t *, ctf_dynhash_t *, int, int *); +extern int ctf_import_unref (ctf_file_t *fp, ctf_file_t *pfp); extern int ctf_serialize (ctf_file_t *); _libctf_malloc_ @@ -458,7 +703,6 @@ extern void *ctf_realloc (ctf_file_t *, void *, size_t); extern char *ctf_str_append (char *, const char *); extern char *ctf_str_append_noerr (char *, const char *); -extern const char *ctf_strerror (int); extern ctf_id_t ctf_type_resolve_unsliced (ctf_file_t *, ctf_id_t); extern int ctf_type_kind_unsliced (ctf_file_t *, ctf_id_t); @@ -467,6 +711,14 @@ extern void ctf_dprintf (const char *, ...); extern void libctf_init_debug (void); +_libctf_printflike_ (4, 5) +extern void ctf_err_warn (ctf_file_t *, int is_warning, int err, + const char *, ...); +extern void ctf_err_warn_to_open (ctf_file_t *); +extern void ctf_assert_fail_internal (ctf_file_t *, const char *, + size_t, const char *); +extern const char *ctf_link_input_name (ctf_file_t *); + extern Elf64_Sym *ctf_sym_to_elf64 (const Elf32_Sym *src, Elf64_Sym *dst); extern const char *ctf_lookup_symbol_name (ctf_file_t *fp, unsigned long symidx); @@ -478,6 +730,8 @@ extern int _libctf_version; /* library client version */ extern int _libctf_debug; /* debugging messages enabled */ +#include "ctf-inlines.h" + #ifdef __cplusplus } #endif diff -Nru gdb-9.1/libctf/ctf-inlines.h gdb-10.2/libctf/ctf-inlines.h --- gdb-9.1/libctf/ctf-inlines.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/libctf/ctf-inlines.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,97 @@ +/* Inline functions. + Copyright (C) 2020 Free Software Foundation, Inc. + + This file is part of libctf. + + libctf is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License as published by the Free + Software Foundation; either version 3, or (at your option) any later + version. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; see the file COPYING. If not see + <http://www.gnu.org/licenses/>. */ + +#ifndef _CTF_INLINES_H +#define _CTF_INLINES_H + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include "config.h" + +#ifndef _libctf_malloc_ +#error "ctf-inlines.h" should not be included directly: include "ctf-impl.h". +#endif + +static inline ssize_t +ctf_get_ctt_size (const ctf_file_t *fp, + const ctf_type_t *tp, + ssize_t *sizep, + ssize_t *incrementp) +{ + return (fp->ctf_fileops->ctfo_get_ctt_size (fp, tp, sizep, incrementp)); +} + +static inline int +ctf_forwardable_kind (int kind) +{ + return (kind == CTF_K_STRUCT || kind == CTF_K_UNION || kind == CTF_K_ENUM); +} + +static inline int +ctf_dynhash_cnext_sorted (ctf_dynhash_t *h, ctf_next_t **i, const void **key, + const void **value, ctf_hash_sort_f sort_fun, + void *sort_arg) +{ + return ctf_dynhash_next_sorted (h, i, (void **) key, (void **) value, + sort_fun, sort_arg); +} + +static inline int +ctf_dynhash_cnext (ctf_dynhash_t *h, ctf_next_t **it, + const void **key, const void **value) +{ + return ctf_dynhash_next (h, it, (void **) key, (void **) value); +} + +static inline int +ctf_dynhash_cinsert (ctf_dynhash_t *h, const void *k, const void *v) +{ + return ctf_dynhash_insert (h, (void *) k, (void *) v); +} + +static inline int +ctf_dynset_cnext (ctf_dynset_t *h, ctf_next_t **it, const void **key) +{ + return ctf_dynset_next (h, it, (void **) key); +} + +static inline int +ctf_dynset_cinsert (ctf_dynset_t *h, const void *k) +{ + return ctf_dynset_insert (h, (void *) k); +} + +static inline int +ctf_assert_internal (ctf_file_t *fp, const char *file, size_t line, + const char *exprstr, int expr) +{ + if (_libctf_unlikely_ (!expr)) + ctf_assert_fail_internal (fp, file, line, exprstr); + + return expr; +} + +#ifdef __cplusplus +} +#endif + +#endif /* _CTF_INLINES_H */ diff -Nru gdb-9.1/libctf/ctf-intl.h gdb-10.2/libctf/ctf-intl.h --- gdb-9.1/libctf/ctf-intl.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/libctf/ctf-intl.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,68 @@ +/* ctf-intl.h - libctf specific header for gettext code. + Copyright (C) 1998-2020 Free Software Foundation, Inc. + + Written by Tom Tromey <tromey@cygnus.com> + + This file is part of libctf. + + 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 + 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. + + You should have received a copy of the GNU General Public License + along with this file; see the file COPYING. If not, write to the + Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston, + MA 02110-1301, USA. */ + +#ifndef _CTF_INTL_H +#define _CTF_INTL_H + +#ifdef ENABLE_NLS +# include <libintl.h> +/* Note the redefinition of gettext and ngettext here to use PACKAGE. + + This is because the code in this directory is used to build a + library which will be linked with code in other directories to form + programs. We want to maintain a separate translation file for this + directory however, rather than being forced to merge it with that + of any program linked to libopcodes. This is a library, so it + cannot depend on the catalog currently loaded. + + In order to do this, we have to make sure that when we extract + messages we use the LIBCTF domain rather than the domain of the + program that included the opcodes library, (eg OBJDUMP). Hence we + use dgettext (PACKAGE, String) and define PACKAGE to be 'libctf'. + (See the code in configure). */ +# undef gettext +# define gettext(Msgid) dgettext (PACKAGE, Msgid) +# undef ngettext +# define ngettext(Msgid1, Msgid2, n) dngettext (PACKAGE, Msgid1, Msgid2, n) +# define _(String) gettext (String) +# ifdef gettext_noop +# define N_(String) gettext_noop (String) +# else +# define N_(String) String +# endif +#else +# define gettext(Msgid) (Msgid) +# define dgettext(Domainname, Msgid) (Msgid) +# define dcgettext(Domainname, Msgid, Category) (Msgid) +# define ngettext(Msgid1, Msgid2, n) \ + (n == 1 ? Msgid1 : Msgid2) +# define dngettext(Domainname, Msgid1, Msgid2, n) \ + (n == 1 ? Msgid1 : Msgid2) +# define dcngettext(Domainname, Msgid1, Msgid2, n, Category) \ + (n == 1 ? Msgid1 : Msgid2) +# define textdomain(Domainname) do {} while (0) +# define bindtextdomain(Domainname, Dirname) do {} while (0) +# define _(String) (String) +# define N_(String) String +#endif + +#endif /* _CTF_INTL_H */ diff -Nru gdb-9.1/libctf/ctf-labels.c gdb-10.2/libctf/ctf-labels.c --- gdb-9.1/libctf/ctf-labels.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libctf/ctf-labels.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Labelled ranges of type IDs. - Copyright (C) 2019 Free Software Foundation, Inc. + Copyright (C) 2019-2020 Free Software Foundation, Inc. This file is part of libctf. @@ -80,8 +80,10 @@ { if ((lname = ctf_strraw (fp, ctlp->ctl_label)) == NULL) { - ctf_dprintf ("failed to decode label %u with " - "type %u\n", ctlp->ctl_label, ctlp->ctl_type); + /* Not marked for translation: label code not used yet. */ + ctf_err_warn (fp, 0, ECTF_CORRUPT, + "failed to decode label %u with type %u", + ctlp->ctl_label, ctlp->ctl_type); return (ctf_set_errno (fp, ECTF_CORRUPT)); } diff -Nru gdb-9.1/libctf/ctf-link.c gdb-10.2/libctf/ctf-link.c --- gdb-9.1/libctf/ctf-link.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libctf/ctf-link.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* CTF linking. - Copyright (C) 2019 Free Software Foundation, Inc. + Copyright (C) 2019-2020 Free Software Foundation, Inc. This file is part of libctf. @@ -20,6 +20,10 @@ #include <ctf-impl.h> #include <string.h> +#if defined (PIC) +#pragma weak ctf_open +#endif + /* Type tracking machinery. */ /* Record the correspondence between a source and ctf_add_type()-added @@ -53,22 +57,25 @@ if (dst_fp->ctf_link_type_mapping == NULL) { - ctf_hash_fun f = ctf_hash_type_mapping_key; - ctf_hash_eq_fun e = ctf_hash_eq_type_mapping_key; + ctf_hash_fun f = ctf_hash_type_key; + ctf_hash_eq_fun e = ctf_hash_eq_type_key; if ((dst_fp->ctf_link_type_mapping = ctf_dynhash_create (f, e, free, NULL)) == NULL) return; } - ctf_link_type_mapping_key_t *key; - key = calloc (1, sizeof (struct ctf_link_type_mapping_key)); + ctf_link_type_key_t *key; + key = calloc (1, sizeof (struct ctf_link_type_key)); if (!key) return; - key->cltm_fp = src_fp; - key->cltm_idx = src_type; + key->cltk_fp = src_fp; + key->cltk_idx = src_type; + /* No OOM checking needed, because if this doesn't work the worst we'll do is + add a few more duplicate types (which will probably run out of memory + anyway). */ ctf_dynhash_insert (dst_fp->ctf_link_type_mapping, key, (void *) (uintptr_t) dst_type); } @@ -78,7 +85,7 @@ ctf_id_t ctf_type_mapping (ctf_file_t *src_fp, ctf_id_t src_type, ctf_file_t **dst_fp) { - ctf_link_type_mapping_key_t key; + ctf_link_type_key_t key; ctf_file_t *target_fp = *dst_fp; ctf_id_t dst_type = 0; @@ -86,8 +93,8 @@ src_fp = src_fp->ctf_parent; src_type = LCTF_TYPE_TO_INDEX(src_fp, src_type); - key.cltm_fp = src_fp; - key.cltm_idx = src_type; + key.cltk_fp = src_fp; + key.cltk_idx = src_type; if (target_fp->ctf_link_type_mapping) dst_type = (uintptr_t) ctf_dynhash_lookup (target_fp->ctf_link_type_mapping, @@ -134,45 +141,143 @@ (otherwise) and returns it, suitable for addition in the .ctf section of the output. */ -/* Add a file to a link. */ +/* Return the name of the compilation unit this CTF dict or its parent applies + to, or a non-null string otherwise: prefer the parent. Used in debugging + output. Sometimes used for outputs too. */ +const char * +ctf_link_input_name (ctf_file_t *fp) +{ + if (fp->ctf_parent && fp->ctf_parent->ctf_cuname) + return fp->ctf_parent->ctf_cuname; + else if (fp->ctf_cuname) + return fp->ctf_cuname; + else + return "(unnamed)"; +} + +/* The linker inputs look like this. clin_fp is used for short-circuited + CU-mapped links that can entirely avoid the first link phase in some + situations in favour of just passing on the contained ctf_file_t: it is + always the sole ctf_file_t inside the corresponding clin_arc. If set, it + gets assigned directly to the final link inputs and freed from there, so it + never gets explicitly freed in the ctf_link_input. */ +typedef struct ctf_link_input +{ + const char *clin_filename; + ctf_archive_t *clin_arc; + ctf_file_t *clin_fp; + int n; +} ctf_link_input_t; -static void ctf_arc_close_thunk (void *arc) +static void +ctf_link_input_close (void *input) { - ctf_arc_close ((ctf_archive_t *) arc); + ctf_link_input_t *i = (ctf_link_input_t *) input; + if (i->clin_arc) + ctf_arc_close (i->clin_arc); + free (i); } -static void ctf_file_close_thunk (void *file) +/* Like ctf_link_add_ctf, below, but with no error-checking, so it can be called + in the middle of an ongoing link. */ +static int +ctf_link_add_ctf_internal (ctf_file_t *fp, ctf_archive_t *ctf, + ctf_file_t *fp_input, const char *name) { - ctf_file_close ((ctf_file_t *) file); + ctf_link_input_t *input = NULL; + char *dupname = NULL; + + if ((input = calloc (1, sizeof (ctf_link_input_t))) == NULL) + goto oom; + + if ((dupname = strdup (name)) == NULL) + goto oom; + + input->clin_arc = ctf; + input->clin_fp = fp_input; + input->clin_filename = dupname; + input->n = ctf_dynhash_elements (fp->ctf_link_inputs); + + if (ctf_dynhash_insert (fp->ctf_link_inputs, dupname, input) < 0) + goto oom; + + return 0; + oom: + free (input); + free (dupname); + return ctf_set_errno (fp, ENOMEM); } -int -ctf_link_add_ctf (ctf_file_t *fp, ctf_archive_t *ctf, const char *name) +/* Add a file, memory buffer, or unopened file (by name) to a link. + + You can call this with: + + CTF and NAME: link the passed ctf_archive_t, with the given NAME. + NAME alone: open NAME as a CTF file when needed. + BUF and NAME: open the BUF (of length N) as CTF, with the given NAME. (Not + yet implemented.) + + Passed in CTF args are owned by the dictionary and will be freed by it. + The BUF arg is *not* owned by the dictionary, and the user should not free + its referent until the link is done. + + The order of calls to this function influences the order of types in the + final link output, but otherwise is not important. + + Private for now, but may in time become public once support for BUF is + implemented. */ + +static int +ctf_link_add (ctf_file_t *fp, ctf_archive_t *ctf, const char *name, + void *buf _libctf_unused_, size_t n _libctf_unused_) { - char *dupname = NULL; + if (buf) + return (ctf_set_errno (fp, ECTF_NOTYET)); + + if (!((ctf && name && !buf) + || (name && !buf && !ctf) + || (buf && name && !ctf))) + return (ctf_set_errno (fp, EINVAL)); + + /* We can only lazily open files if libctf.so is in use rather than + libctf-nobfd.so. This is a little tricky: in shared libraries, we can use + a weak symbol so that -lctf -lctf-nobfd works, but in static libraries we + must distinguish between the two libraries explicitly. */ + +#if defined (PIC) + if (!buf && !ctf && name && !ctf_open) + return (ctf_set_errno (fp, ECTF_NEEDSBFD)); +#elif NOBFD + if (!buf && !ctf && name) + return (ctf_set_errno (fp, ECTF_NEEDSBFD)); +#endif if (fp->ctf_link_outputs) return (ctf_set_errno (fp, ECTF_LINKADDEDLATE)); if (fp->ctf_link_inputs == NULL) fp->ctf_link_inputs = ctf_dynhash_create (ctf_hash_string, ctf_hash_eq_string, free, - ctf_arc_close_thunk); + ctf_link_input_close); if (fp->ctf_link_inputs == NULL) - goto oom; + return (ctf_set_errno (fp, ENOMEM)); - if ((dupname = strdup (name)) == NULL) - goto oom; + return ctf_link_add_ctf_internal (fp, ctf, NULL, name); +} - if (ctf_dynhash_insert (fp->ctf_link_inputs, dupname, ctf) < 0) - goto oom; +/* Add an opened CTF archive or unopened file (by name) to a link. + If CTF is NULL and NAME is non-null, an unopened file is meant: + otherwise, the specified archive is assumed to have the given NAME. - return 0; - oom: - free (fp->ctf_link_inputs); - fp->ctf_link_inputs = NULL; - free (dupname); - return (ctf_set_errno (fp, ENOMEM)); + Passed in CTF args are owned by the dictionary and will be freed by it. + + The order of calls to this function influences the order of types in the + final link output, but otherwise is not important. */ + +int +ctf_link_add_ctf (ctf_file_t *fp, ctf_archive_t *ctf, const char *name) +{ + return ctf_link_add (fp, ctf, name, NULL, 0); } /* Return a per-CU output CTF dictionary suitable for the given CU, creating and @@ -191,10 +296,12 @@ dictionary name. We prefer the filename because this is easier for likely callers to determine. */ - if (fp->ctf_link_cu_mapping) + if (fp->ctf_link_in_cu_mapping) { - if (((ctf_name = ctf_dynhash_lookup (fp->ctf_link_cu_mapping, filename)) == NULL) && - ((ctf_name = ctf_dynhash_lookup (fp->ctf_link_cu_mapping, cuname)) == NULL)) + if (((ctf_name = ctf_dynhash_lookup (fp->ctf_link_in_cu_mapping, + filename)) == NULL) && + ((ctf_name = ctf_dynhash_lookup (fp->ctf_link_in_cu_mapping, + cuname)) == NULL)) ctf_name = filename; } @@ -207,9 +314,9 @@ if ((cu_fp = ctf_create (&err)) == NULL) { - ctf_dprintf ("Cannot create per-CU CTF archive for CU %s from " - "input file %s: %s\n", cuname, filename, - ctf_errmsg (err)); + ctf_err_warn (fp, 0, err, _("cannot create per-CU CTF archive for " + "CU %s from input file %s"), + cuname, filename); ctf_set_errno (fp, err); return NULL; } @@ -219,7 +326,7 @@ if (ctf_dynhash_insert (fp->ctf_link_outputs, dynname, cu_fp) < 0) goto oom; - ctf_import (cu_fp, fp); + ctf_import_unref (cu_fp, fp); ctf_cuname_set (cu_fp, cuname); ctf_parent_name_set (cu_fp, _CTF_SECTION); } @@ -234,10 +341,7 @@ /* Add a mapping directing that the CU named FROM should have its conflicting/non-duplicate types (depending on link mode) go into a container - named TO. Many FROMs can share a TO: in this case, the effect on conflicting - types is not yet defined (but in time an auto-renaming algorithm will be - added: ugly, but there is really no right thing one can do in this - situation). + named TO. Many FROMs can share a TO. We forcibly add a container named TO in every case, even though it may well wind up empty, because clients that use this facility usually expect to find @@ -247,33 +351,63 @@ ctf_link_add_cu_mapping (ctf_file_t *fp, const char *from, const char *to) { int err; - char *f, *t; + char *f = NULL, *t = NULL; + ctf_dynhash_t *one_out; - if (fp->ctf_link_cu_mapping == NULL) - fp->ctf_link_cu_mapping = ctf_dynhash_create (ctf_hash_string, - ctf_hash_eq_string, free, - free); - if (fp->ctf_link_cu_mapping == NULL) - return ctf_set_errno (fp, ENOMEM); + if (fp->ctf_link_in_cu_mapping == NULL) + fp->ctf_link_in_cu_mapping = ctf_dynhash_create (ctf_hash_string, + ctf_hash_eq_string, free, + free); + if (fp->ctf_link_in_cu_mapping == NULL) + goto oom; - if (fp->ctf_link_outputs == NULL) - fp->ctf_link_outputs = ctf_dynhash_create (ctf_hash_string, - ctf_hash_eq_string, free, - ctf_file_close_thunk); + if (fp->ctf_link_out_cu_mapping == NULL) + fp->ctf_link_out_cu_mapping = ctf_dynhash_create (ctf_hash_string, + ctf_hash_eq_string, free, + (ctf_hash_free_fun) + ctf_dynhash_destroy); + if (fp->ctf_link_out_cu_mapping == NULL) + goto oom; - if (fp->ctf_link_outputs == NULL) - return ctf_set_errno (fp, ENOMEM); + f = strdup (from); + t = strdup (to); + if (!f || !t) + goto oom; + /* Track both in a list from FROM to TO and in a list from TO to a list of + FROM. The former is used to create TUs with the mapped-to name at need: + the latter is used in deduplicating links to pull in all input CUs + corresponding to a single output CU. */ + + if ((err = ctf_dynhash_insert (fp->ctf_link_in_cu_mapping, f, t)) < 0) + { + ctf_set_errno (fp, err); + goto oom_noerrno; + } + + /* f and t are now owned by the in_cu_mapping: reallocate them. */ f = strdup (from); t = strdup (to); if (!f || !t) goto oom; - if (ctf_create_per_cu (fp, t, t) == NULL) - goto oom_noerrno; /* Errno is set for us. */ + if ((one_out = ctf_dynhash_lookup (fp->ctf_link_out_cu_mapping, t)) == NULL) + { + if ((one_out = ctf_dynhash_create (ctf_hash_string, ctf_hash_eq_string, + free, NULL)) == NULL) + goto oom; + if ((err = ctf_dynhash_insert (fp->ctf_link_out_cu_mapping, + t, one_out)) < 0) + { + ctf_dynhash_destroy (one_out); + ctf_set_errno (fp, err); + goto oom_noerrno; + } + } + else + free (t); - err = ctf_dynhash_insert (fp->ctf_link_cu_mapping, f, t); - if (err) + if (ctf_dynhash_insert (one_out, f, NULL) < 0) { ctf_set_errno (fp, err); goto oom_noerrno; @@ -307,15 +441,27 @@ typedef struct ctf_link_in_member_cb_arg { + /* The shared output dictionary. */ ctf_file_t *out_fp; - const char *file_name; + + /* The filename of the input file, and an fp to each dictionary in that file + in turn. */ + const char *in_file_name; ctf_file_t *in_fp; - ctf_file_t *main_input_fp; + + /* The CU name of the dict being processed. */ const char *cu_name; - char *arcname; - int done_main_member; - int share_mode; int in_input_cu_file; + + /* The parent dictionary in the input, and whether it's been processed yet. + Not needed by ctf_link_one_type / ctf_link_one_variable, only by higher + layers. */ + ctf_file_t *in_fp_parent; + int done_parent; + + /* If true, this is the CU-mapped portion of a deduplicating link: no child + dictionaries should be created. */ + int cu_mapped; } ctf_link_in_member_cb_arg_t; /* Link one type into the link. We rely on ctf_add_type() to detect @@ -329,9 +475,10 @@ ctf_file_t *per_cu_out_fp; int err; - if (arg->share_mode != CTF_LINK_SHARE_UNCONFLICTED) + if (arg->in_fp->ctf_link_flags != CTF_LINK_SHARE_UNCONFLICTED) { - ctf_dprintf ("Share-duplicated mode not yet implemented.\n"); + ctf_err_warn (arg->out_fp, 0, ECTF_NOTYET, + _("share-duplicated mode not yet implemented")); return ctf_set_errno (arg->out_fp, ECTF_NOTYET); } @@ -349,19 +496,19 @@ if (err != ECTF_CONFLICT) { if (err != ECTF_NONREPRESENTABLE) - ctf_dprintf ("Cannot link type %lx from archive member %s, input file %s " - "into output link: %s\n", type, arg->arcname, arg->file_name, - ctf_errmsg (err)); + ctf_err_warn (arg->out_fp, 1, 0, + _("cannot link type %lx from input file %s, CU %s " + "into output link"), type, arg->cu_name, + arg->in_file_name); /* We must ignore this problem or we end up losing future types, then trying to link the variables in, then exploding. Better to link as - much as possible. XXX when we add a proper link warning - infrastructure, we should report the error here! */ + much as possible. */ return 0; } ctf_set_errno (arg->out_fp, 0); } - if ((per_cu_out_fp = ctf_create_per_cu (arg->out_fp, arg->file_name, + if ((per_cu_out_fp = ctf_create_per_cu (arg->out_fp, arg->in_file_name, arg->cu_name)) == NULL) return -1; /* Errno is set for us. */ @@ -370,10 +517,11 @@ err = ctf_errno (per_cu_out_fp); if (err != ECTF_NONREPRESENTABLE) - ctf_dprintf ("Cannot link type %lx from CTF archive member %s, input file %s " - "into output per-CU CTF archive member %s: %s: skipped\n", type, - arg->arcname, arg->file_name, arg->arcname, - ctf_errmsg (err)); + ctf_err_warn (arg->out_fp, 1, 0, + _("cannot link type %lx from input file %s, CU %s " + "into output per-CU CTF archive member %s: %s: skipped"), + type, ctf_link_input_name (arg->in_fp), arg->in_file_name, + ctf_link_input_name (per_cu_out_fp), ctf_errmsg (err)); if (err == ECTF_CONFLICT) /* Conflicts are possible at this stage only if a non-ld user has combined multiple TUs into a single output dictionary. Even in this case we do not @@ -383,6 +531,16 @@ return 0; /* As above: do not lose types. */ } +/* Set a function which is used to filter out unwanted variables from the link. */ +int +ctf_link_set_variable_filter (ctf_file_t *fp, ctf_link_variable_filter_f *filter, + void *arg) +{ + fp->ctf_link_variable_filter = filter; + fp->ctf_link_variable_filter_arg = arg; + return 0; +} + /* Check if we can safely add a variable with the given type to this container. */ static int @@ -399,8 +557,9 @@ if (dvd->dvd_type != type) { /* Variable here. Wrong type: cannot add. Just skip it, because there is - no way to express this in CTF. (This might be the parent, in which - case we'll try adding in the child first, and only then give up.) */ + no way to express this in CTF. Don't even warn: this case is too + common. (This might be the parent, in which case we'll try adding in + the child first, and only then give up.) */ ctf_dprintf ("Inexpressible duplicate variable %s skipped.\n", name); } @@ -418,6 +577,15 @@ ctf_file_t *check_fp; ctf_dvdef_t *dvd; + /* See if this variable is filtered out. */ + + if (arg->out_fp->ctf_link_variable_filter) + { + void *farg = arg->out_fp->ctf_link_variable_filter_arg; + if (arg->out_fp->ctf_link_variable_filter (arg->in_fp, name, type, farg)) + return 0; + } + /* In unconflicted link mode, if this type is mapped to a type in the parent container, we want to try to add to that first: if it reports a duplicate, or if the type is in a child already, add straight to the child. */ @@ -438,16 +606,25 @@ } /* Already present? Nothing to do. */ - if (dvd && dvd->dvd_type == type) + if (dvd && dvd->dvd_type == dst_type) return 0; } } /* Can't add to the parent due to a name clash, or because it references a type only present in the child. Try adding to the child, creating if need - be. */ + be. If we can't do that, skip it. Don't add to a child if we're doing a + CU-mapped link, since that has only one output. */ + + if (arg->cu_mapped) + { + ctf_dprintf ("Variable %s in input file %s depends on a type %lx hidden " + "due to conflicts: skipped.\n", name, arg->in_file_name, + type); + return 0; + } - if ((per_cu_out_fp = ctf_create_per_cu (arg->out_fp, arg->file_name, + if ((per_cu_out_fp = ctf_create_per_cu (arg->out_fp, arg->in_file_name, arg->cu_name)) == NULL) return -1; /* Errno is set for us. */ @@ -459,8 +636,10 @@ if (dst_type == 0) { - ctf_dprintf ("Type %lx for variable %s in input file %s not " - "found: skipped.\n", type, name, arg->file_name); + ctf_err_warn (arg->out_fp, 1, 0, + _("type %lx for variable %s in input file %s " + "not found: skipped"), type, name, + arg->in_file_name); /* Do not terminate the link: just skip the variable. */ return 0; } @@ -472,11 +651,11 @@ return 0; } -/* Merge every type and variable in this archive member into the link, so we can - relink things that have already had ld run on them. We use the archive - member name, sans any leading '.ctf.', as the CU name for ambiguous types if - there is one and it's not the default: otherwise, we use the name of the - input file. */ +/* Merge every type (and optionally, variable) in this archive member into the + link, so we can relink things that have already had ld run on them. We use + the archive member name, sans any leading '.ctf.', as the CU name for + ambiguous types if there is one and it's not the default: otherwise, we use + the name of the input file. */ static int ctf_link_one_input_archive_member (ctf_file_t *in_fp, const char *name, void *arg_) { @@ -494,42 +673,26 @@ causes the system to erroneously conclude that all types are duplicated and should be shared, even if they are not. */ - if (arg->done_main_member) + if (arg->done_parent) return 0; - arg->arcname = strdup (".ctf."); - if (arg->arcname) - { - char *new_name; - - new_name = ctf_str_append (arg->arcname, arg->file_name); - if (new_name) - arg->arcname = new_name; - else - free (arg->arcname); - } } else { - arg->arcname = strdup (name); - /* Get ambiguous types from our parent. */ - ctf_import (in_fp, arg->main_input_fp); + ctf_import (in_fp, arg->in_fp_parent); arg->in_input_cu_file = 1; } - if (!arg->arcname) - return ctf_set_errno (in_fp, ENOMEM); - arg->cu_name = name; if (strncmp (arg->cu_name, ".ctf.", strlen (".ctf.")) == 0) arg->cu_name += strlen (".ctf."); arg->in_fp = in_fp; if ((err = ctf_type_iter_all (in_fp, ctf_link_one_type, arg)) > -1) - err = ctf_variable_iter (in_fp, ctf_link_one_variable, arg); + if (!(in_fp->ctf_link_flags & CTF_LINK_OMIT_VARIABLES_SECTION)) + err = ctf_variable_iter (in_fp, ctf_link_one_variable, arg); arg->in_input_cu_file = 0; - free (arg->arcname); if (err < 0) return -1; /* Errno is set for us. */ @@ -548,61 +711,783 @@ ctf_dynhash_empty (fp->ctf_link_type_mapping); } +/* Lazily open a CTF archive for linking, if not already open. + + Returns the number of files contained within the opened archive (0 for none), + or -1 on error, as usual. */ +static ssize_t +ctf_link_lazy_open (ctf_file_t *fp, ctf_link_input_t *input) +{ + size_t count; + int err; + + if (input->clin_arc) + return ctf_archive_count (input->clin_arc); + + if (input->clin_fp) + return 1; + + /* See ctf_link_add_ctf. */ +#if defined (PIC) || !NOBFD + input->clin_arc = ctf_open (input->clin_filename, NULL, &err); +#else + ctf_err_warn (fp, 0, ECTF_NEEDSBFD, _("cannot open %s lazily"), + input->clin_filename); + ctf_set_errno (fp, ECTF_NEEDSBFD); + return -1; +#endif + + /* Having no CTF sections is not an error. We just don't need to do + anything. */ + + if (!input->clin_arc) + { + if (err == ECTF_NOCTFDATA) + return 0; + + ctf_err_warn (fp, 0, err, _("opening CTF %s failed"), + input->clin_filename); + ctf_set_errno (fp, err); + return -1; + } + + if ((count = ctf_archive_count (input->clin_arc)) == 0) + ctf_arc_close (input->clin_arc); + + return (ssize_t) count; +} + +/* Close an input, as a ctf_dynhash_iter iterator. */ +static void +ctf_link_close_one_input_archive (void *key _libctf_unused_, void *value, + void *arg _libctf_unused_) +{ + ctf_link_input_t *input = (ctf_link_input_t *) value; + if (input->clin_arc) + ctf_arc_close (input->clin_arc); + input->clin_arc = NULL; +} + /* Link one input file's types into the output file. */ static void ctf_link_one_input_archive (void *key, void *value, void *arg_) { const char *file_name = (const char *) key; - ctf_archive_t *arc = (ctf_archive_t *) value; + ctf_link_input_t *input = (ctf_link_input_t *)value; ctf_link_in_member_cb_arg_t *arg = (ctf_link_in_member_cb_arg_t *) arg_; - int err; + int err = 0; - arg->file_name = file_name; - arg->done_main_member = 0; - if ((arg->main_input_fp = ctf_arc_open_by_name (arc, NULL, &err)) == NULL) + if (!input->clin_arc) + { + err = ctf_link_lazy_open (arg->out_fp, input); + if (err == 0) /* Just no CTF. */ + return; + + if (err < 0) + return; /* errno is set for us. */ + } + + arg->in_file_name = file_name; + arg->done_parent = 0; + if ((arg->in_fp_parent = ctf_arc_open_by_name (input->clin_arc, NULL, + &err)) == NULL) if (err != ECTF_ARNNAME) { - ctf_dprintf ("Cannot open main archive member in input file %s in the " - "link: skipping: %s.\n", arg->file_name, - ctf_errmsg (err)); - return; + ctf_err_warn (arg->out_fp, 1, 0, + _("cannot open main archive member in input file %s " + "in the link: skipping: %s"), arg->in_file_name, + ctf_errmsg (err)); + goto out; } - if (ctf_link_one_input_archive_member (arg->main_input_fp, + if (ctf_link_one_input_archive_member (arg->in_fp_parent, _CTF_SECTION, arg) < 0) { - ctf_file_close (arg->main_input_fp); - return; + ctf_file_close (arg->in_fp_parent); + goto out; } - arg->done_main_member = 1; - if (ctf_archive_iter (arc, ctf_link_one_input_archive_member, arg) < 0) - ctf_dprintf ("Cannot traverse archive in input file %s: link " - "cannot continue: %s.\n", arg->file_name, - ctf_errmsg (ctf_errno (arg->out_fp))); + arg->done_parent = 1; + if (ctf_archive_iter (input->clin_arc, ctf_link_one_input_archive_member, + arg) < 0) + ctf_err_warn (arg->out_fp, 0, 0, _("cannot traverse archive in input file " + "%s: link cannot continue"), + arg->in_file_name); else { /* The only error indication to the caller is the errno: so ensure that it is zero if there was no actual error from the caller. */ ctf_set_errno (arg->out_fp, 0); } - ctf_file_close (arg->main_input_fp); + ctf_file_close (arg->in_fp_parent); + + out: + ctf_link_close_one_input_archive (key, value, NULL); +} + +typedef struct link_sort_inputs_cb_arg +{ + int is_cu_mapped; + ctf_file_t *fp; +} link_sort_inputs_cb_arg_t; + +/* Sort the inputs by N (the link order). For CU-mapped links, this is a + mapping of input to output name, not a mapping of input name to input + ctf_link_input_t: compensate accordingly. */ +static int +ctf_link_sort_inputs (const ctf_next_hkv_t *one, const ctf_next_hkv_t *two, + void *arg) +{ + ctf_link_input_t *input_1; + ctf_link_input_t *input_2; + link_sort_inputs_cb_arg_t *cu_mapped = (link_sort_inputs_cb_arg_t *) arg; + + if (!cu_mapped || !cu_mapped->is_cu_mapped) + { + input_1 = (ctf_link_input_t *) one->hkv_value; + input_2 = (ctf_link_input_t *) two->hkv_value; + } + else + { + const char *name_1 = (const char *) one->hkv_key; + const char *name_2 = (const char *) two->hkv_key; + + input_1 = ctf_dynhash_lookup (cu_mapped->fp->ctf_link_inputs, name_1); + input_2 = ctf_dynhash_lookup (cu_mapped->fp->ctf_link_inputs, name_2); + + /* There is no guarantee that CU-mappings actually have corresponding + inputs: the relative ordering in that case is unimportant. */ + if (!input_1) + return -1; + if (!input_2) + return 1; + } + + if (input_1->n < input_2->n) + return -1; + else if (input_1->n > input_2->n) + return 1; + else + return 0; +} + +/* Count the number of input dicts in the ctf_link_inputs, or that subset of the + ctf_link_inputs given by CU_NAMES if set. Return the number of input dicts, + and optionally the name and ctf_link_input_t of the single input archive if + only one exists (no matter how many dicts it contains). */ +static ssize_t +ctf_link_deduplicating_count_inputs (ctf_file_t *fp, ctf_dynhash_t *cu_names, + ctf_link_input_t **only_one_input) +{ + ctf_dynhash_t *inputs = fp->ctf_link_inputs; + ctf_next_t *i = NULL; + void *name, *input; + ctf_link_input_t *one_input = NULL; + const char *one_name = NULL; + ssize_t count = 0, narcs = 0; + int err; + + if (cu_names) + inputs = cu_names; + + while ((err = ctf_dynhash_next (inputs, &i, &name, &input)) == 0) + { + ssize_t one_count; + + one_name = (const char *) name; + /* If we are processing CU names, get the real input. */ + if (cu_names) + one_input = ctf_dynhash_lookup (fp->ctf_link_inputs, one_name); + else + one_input = (ctf_link_input_t *) input; + + if (!one_input) + continue; + + one_count = ctf_link_lazy_open (fp, one_input); + + if (one_count < 0) + { + ctf_next_destroy (i); + return -1; /* errno is set for us. */ + } + + count += one_count; + narcs++; + } + if (err != ECTF_NEXT_END) + { + ctf_err_warn (fp, 0, err, _("iteration error counting deduplicating " + "CTF link inputs")); + ctf_set_errno (fp, err); + return -1; + } + + if (!count) + return 0; + + if (narcs == 1) + { + if (only_one_input) + *only_one_input = one_input; + } + else if (only_one_input) + *only_one_input = NULL; + + return count; +} + +/* Allocate and populate an inputs array big enough for a given set of inputs: + either a specific set of CU names (those from that set found in the + ctf_link_inputs), or the entire ctf_link_inputs (if cu_names is not set). + The number of inputs (from ctf_link_deduplicating_count_inputs, above) is + passed in NINPUTS: an array of uint32_t containing parent pointers + (corresponding to those members of the inputs that have parents) is allocated + and returned in PARENTS. + + The inputs are *archives*, not files: the archive can have multiple members + if it is the result of a previous incremental link. We want to add every one + in turn, including the shared parent. (The dedup machinery knows that a type + used by a single dictionary and its parent should not be shared in + CTF_LINK_SHARE_DUPLICATED mode.) + + If no inputs exist that correspond to these CUs, return NULL with the errno + set to ECTF_NOCTFDATA. */ +static ctf_file_t ** +ctf_link_deduplicating_open_inputs (ctf_file_t *fp, ctf_dynhash_t *cu_names, + ssize_t ninputs, uint32_t **parents) +{ + ctf_dynhash_t *inputs = fp->ctf_link_inputs; + ctf_next_t *i = NULL; + void *name, *input; + link_sort_inputs_cb_arg_t sort_arg; + ctf_file_t **dedup_inputs = NULL; + ctf_file_t **walk; + uint32_t *parents_ = NULL; + int err; + + if (cu_names) + inputs = cu_names; + + if ((dedup_inputs = calloc (ninputs, sizeof (ctf_file_t *))) == NULL) + goto oom; + + if ((parents_ = calloc (ninputs, sizeof (uint32_t))) == NULL) + goto oom; + + walk = dedup_inputs; + + /* Counting done: push every input into the array, in the order they were + passed to ctf_link_add_ctf (and ultimately ld). */ + + sort_arg.is_cu_mapped = (cu_names != NULL); + sort_arg.fp = fp; + + while ((err = ctf_dynhash_next_sorted (inputs, &i, &name, &input, + ctf_link_sort_inputs, &sort_arg)) == 0) + { + const char *one_name = (const char *) name; + ctf_link_input_t *one_input; + ctf_file_t *one_fp; + ctf_file_t *parent_fp = NULL; + uint32_t parent_i; + ctf_next_t *j = NULL; + + /* If we are processing CU names, get the real input. All the inputs + will have been opened, if they contained any CTF at all. */ + if (cu_names) + one_input = ctf_dynhash_lookup (fp->ctf_link_inputs, one_name); + else + one_input = (ctf_link_input_t *) input; + + if (!one_input || (!one_input->clin_arc && !one_input->clin_fp)) + continue; + + /* Short-circuit: if clin_fp is set, just use it. */ + if (one_input->clin_fp) + { + parents_[walk - dedup_inputs] = walk - dedup_inputs; + *walk = one_input->clin_fp; + walk++; + continue; + } + + /* Get and insert the parent archive (if any), if this archive has + multiple members. We assume, as elsewhere, that the parent is named + _CTF_SECTION. */ + + if ((parent_fp = ctf_arc_open_by_name (one_input->clin_arc, + _CTF_SECTION, &err)) == NULL) + { + if (err != ECTF_NOMEMBNAM) + { + ctf_next_destroy (i); + ctf_set_errno (fp, err); + goto err; + } + } + else + { + *walk = parent_fp; + parent_i = walk - dedup_inputs; + walk++; + } + + /* We disregard the input archive name: either it is the parent (which we + already have), or we want to put everything into one TU sharing the + cuname anyway (if this is a CU-mapped link), or this is the final phase + of a relink with CU-mapping off (i.e. ld -r) in which case the cuname + is correctly set regardless. */ + while ((one_fp = ctf_archive_next (one_input->clin_arc, &j, NULL, + 1, &err)) != NULL) + { + if (one_fp->ctf_flags & LCTF_CHILD) + { + /* The contents of the parents array for elements not + corresponding to children is undefined. If there is no parent + (itself a sign of a likely linker bug or corrupt input), we set + it to itself. */ + + ctf_import (one_fp, parent_fp); + if (parent_fp) + parents_[walk - dedup_inputs] = parent_i; + else + parents_[walk - dedup_inputs] = walk - dedup_inputs; + } + *walk = one_fp; + walk++; + } + if (err != ECTF_NEXT_END) + { + ctf_next_destroy (i); + goto iterr; + } + } + if (err != ECTF_NEXT_END) + goto iterr; + + *parents = parents_; + + return dedup_inputs; + + oom: + err = ENOMEM; + + iterr: + ctf_set_errno (fp, err); + + err: + free (dedup_inputs); + free (parents_); + ctf_err_warn (fp, 0, 0, _("error in deduplicating CTF link " + "input allocation")); + return NULL; +} + +/* Close INPUTS that have already been linked, first the passed array, and then + that subset of the ctf_link_inputs archives they came from cited by the + CU_NAMES. If CU_NAMES is not specified, close all the ctf_link_inputs in one + go, leaving it empty. */ +static int +ctf_link_deduplicating_close_inputs (ctf_file_t *fp, ctf_dynhash_t *cu_names, + ctf_file_t **inputs, ssize_t ninputs) +{ + ctf_next_t *it = NULL; + void *name; + int err; + ssize_t i; + + /* This is the inverse of ctf_link_deduplicating_open_inputs: so first, close + all the individual input dicts, opened by the archive iterator. */ + for (i = 0; i < ninputs; i++) + ctf_file_close (inputs[i]); + + /* Now close the archives they are part of. */ + if (cu_names) + { + while ((err = ctf_dynhash_next (cu_names, &it, &name, NULL)) == 0) + { + /* Remove the input from the linker inputs, if it exists, which also + closes it. */ + + ctf_dynhash_remove (fp->ctf_link_inputs, (const char *) name); + } + if (err != ECTF_NEXT_END) + { + ctf_err_warn (fp, 0, err, _("iteration error in deduplicating link " + "input freeing")); + ctf_set_errno (fp, err); + } + } + else + ctf_dynhash_empty (fp->ctf_link_inputs); + + return 0; +} + +/* Do a deduplicating link of all variables in the inputs. */ +static int +ctf_link_deduplicating_variables (ctf_file_t *fp, ctf_file_t **inputs, + size_t ninputs, int cu_mapped) +{ + ctf_link_in_member_cb_arg_t arg; + size_t i; + + arg.cu_mapped = cu_mapped; + arg.out_fp = fp; + arg.in_input_cu_file = 0; + + for (i = 0; i < ninputs; i++) + { + arg.in_fp = inputs[i]; + if (ctf_cuname (inputs[i]) != NULL) + arg.in_file_name = ctf_cuname (inputs[i]); + else + arg.in_file_name = "unnamed-CU"; + arg.cu_name = arg.in_file_name; + if (ctf_variable_iter (arg.in_fp, ctf_link_one_variable, &arg) < 0) + return ctf_set_errno (fp, ctf_errno (arg.in_fp)); + + /* Outputs > 0 are per-CU. */ + arg.in_input_cu_file = 1; + } + return 0; +} + +/* Do the per-CU part of a deduplicating link. */ +static int +ctf_link_deduplicating_per_cu (ctf_file_t *fp) +{ + ctf_next_t *i = NULL; + int err; + void *out_cu; + void *in_cus; + + /* Links with a per-CU mapping in force get a first pass of deduplication, + dedupping the inputs for a given CU mapping into the output for that + mapping. The outputs from this process get fed back into the final pass + that is carried out even for non-CU links. */ + + while ((err = ctf_dynhash_next (fp->ctf_link_out_cu_mapping, &i, &out_cu, + &in_cus)) == 0) + { + const char *out_name = (const char *) out_cu; + ctf_dynhash_t *in = (ctf_dynhash_t *) in_cus; + ctf_file_t *out = NULL; + ctf_file_t **inputs; + ctf_file_t **outputs; + ctf_archive_t *in_arc; + ssize_t ninputs; + ctf_link_input_t *only_input; + uint32_t noutputs; + uint32_t *parents; + + if ((ninputs = ctf_link_deduplicating_count_inputs (fp, in, + &only_input)) == -1) + goto err_open_inputs; + + /* CU mapping with no inputs? Skip. */ + if (ninputs == 0) + continue; + + if (labs ((long int) ninputs) > 0xfffffffe) + { + ctf_err_warn (fp, 0, EFBIG, _("too many inputs in deduplicating " + "link: %li"), (long int) ninputs); + ctf_set_errno (fp, EFBIG); + goto err_open_inputs; + } + + /* Short-circuit: a cu-mapped link with only one input archive with + unconflicting contents is a do-nothing, and we can just leave the input + in place: we do have to change the cuname, though, so we unwrap it, + change the cuname, then stuff it back in the linker input again, via + the clin_fp short-circuit member. ctf_link_deduplicating_open_inputs + will spot this member and jam it straight into the next link phase, + ignoring the corresponding archive. */ + if (only_input && ninputs == 1) + { + ctf_next_t *ai = NULL; + int err; + + /* We can abuse an archive iterator to get the only member cheaply, no + matter what its name. */ + only_input->clin_fp = ctf_archive_next (only_input->clin_arc, + &ai, NULL, 0, &err); + if (!only_input->clin_fp) + { + ctf_err_warn (fp, 0, err, _("cannot open archive %s in " + "CU-mapped CTF link"), + only_input->clin_filename); + ctf_set_errno (fp, err); + goto err_open_inputs; + } + ctf_next_destroy (ai); + + if (strcmp (only_input->clin_filename, out_name) != 0) + { + /* Renaming. We need to add a new input, then null out the + clin_arc and clin_fp of the old one to stop it being + auto-closed on removal. The new input needs its cuname changed + to out_name, which is doable only because the cuname is a + dynamic property which can be changed even in readonly + dicts. */ + + ctf_cuname_set (only_input->clin_fp, out_name); + if (ctf_link_add_ctf_internal (fp, only_input->clin_arc, + only_input->clin_fp, + out_name) < 0) + { + ctf_err_warn (fp, 0, 0, _("cannot add intermediate files " + "to link")); + goto err_open_inputs; + } + only_input->clin_arc = NULL; + only_input->clin_fp = NULL; + ctf_dynhash_remove (fp->ctf_link_inputs, + only_input->clin_filename); + } + continue; + } + + /* This is a real CU many-to-one mapping: we must dedup the inputs into + a new output to be used in the final link phase. */ + + if ((inputs = ctf_link_deduplicating_open_inputs (fp, in, ninputs, + &parents)) == NULL) + { + ctf_next_destroy (i); + goto err_inputs; + } + + if ((out = ctf_create (&err)) == NULL) + { + ctf_err_warn (fp, 0, err, _("cannot create per-CU CTF archive " + "for %s"), + out_name); + ctf_set_errno (fp, err); + goto err_inputs; + } + + /* Share the atoms table to reduce memory usage. */ + out->ctf_dedup_atoms = fp->ctf_dedup_atoms_alloc; + + /* No ctf_imports at this stage: this per-CU dictionary has no parents. + Parent/child deduplication happens in the link's final pass. However, + the cuname *is* important, as it is propagated into the final + dictionary. */ + ctf_cuname_set (out, out_name); + + if (ctf_dedup (out, inputs, ninputs, parents, 1) < 0) + { + ctf_set_errno (fp, ctf_errno (out)); + ctf_err_warn (fp, 0, 0, _("CU-mapped deduplication failed for %s"), + out_name); + goto err_inputs; + } + + if ((outputs = ctf_dedup_emit (out, inputs, ninputs, parents, + &noutputs, 1)) == NULL) + { + ctf_set_errno (fp, ctf_errno (out)); + ctf_err_warn (fp, 0, 0, _("CU-mapped deduplicating link type emission " + "failed for %s"), out_name); + goto err_inputs; + } + if (!ctf_assert (fp, noutputs == 1)) + goto err_inputs_outputs; + + if (!(fp->ctf_link_flags & CTF_LINK_OMIT_VARIABLES_SECTION) + && ctf_link_deduplicating_variables (out, inputs, ninputs, 1) < 0) + { + ctf_set_errno (fp, ctf_errno (out)); + ctf_err_warn (fp, 0, 0, _("CU-mapped deduplicating link variable " + "emission failed for %s"), out_name); + goto err_inputs_outputs; + } + + if (ctf_link_deduplicating_close_inputs (fp, in, inputs, ninputs) < 0) + { + free (inputs); + free (parents); + goto err_outputs; + } + free (inputs); + free (parents); + + /* Splice any errors or warnings created during this link back into the + dict that the caller knows about. */ + ctf_list_splice (&fp->ctf_errs_warnings, &outputs[0]->ctf_errs_warnings); + + /* This output now becomes an input to the next link phase, with a name + equal to the CU name. We have to wrap it in an archive wrapper + first. */ + + if ((in_arc = ctf_new_archive_internal (0, 0, NULL, outputs[0], NULL, + NULL, &err)) == NULL) + { + ctf_set_errno (fp, err); + goto err_outputs; + } + + if (ctf_link_add_ctf_internal (fp, in_arc, NULL, + ctf_cuname (outputs[0])) < 0) + { + ctf_err_warn (fp, 0, 0, _("cannot add intermediate files to link")); + goto err_outputs; + } + + ctf_file_close (out); + free (outputs); + continue; + + err_inputs_outputs: + ctf_list_splice (&fp->ctf_errs_warnings, &outputs[0]->ctf_errs_warnings); + ctf_file_close (outputs[0]); + free (outputs); + err_inputs: + ctf_link_deduplicating_close_inputs (fp, in, inputs, ninputs); + ctf_file_close (out); + free (inputs); + free (parents); + err_open_inputs: + ctf_next_destroy (i); + return -1; + + err_outputs: + ctf_list_splice (&fp->ctf_errs_warnings, &outputs[0]->ctf_errs_warnings); + ctf_file_close (outputs[0]); + free (outputs); + ctf_next_destroy (i); + return -1; /* Errno is set for us. */ + } + if (err != ECTF_NEXT_END) + { + ctf_err_warn (fp, 0, err, _("iteration error in CU-mapped deduplicating " + "link")); + return ctf_set_errno (fp, err); + } - /* Discard the now-unnecessary mapping table data. */ - if (arg->out_fp->ctf_link_type_mapping) - ctf_dynhash_empty (arg->out_fp->ctf_link_type_mapping); - ctf_dynhash_iter (arg->out_fp->ctf_link_outputs, empty_link_type_mapping, NULL); + return 0; +} + +/* Do a deduplicating link using the ctf-dedup machinery. */ +static void +ctf_link_deduplicating (ctf_file_t *fp) +{ + size_t i; + ctf_file_t **inputs, **outputs = NULL; + ssize_t ninputs; + uint32_t noutputs; + uint32_t *parents; + + if (ctf_dedup_atoms_init (fp) < 0) + { + ctf_err_warn (fp, 0, 0, _("allocating CTF dedup atoms table")); + return; /* Errno is set for us. */ + } + + if (fp->ctf_link_out_cu_mapping + && (ctf_link_deduplicating_per_cu (fp) < 0)) + return; /* Errno is set for us. */ + + if ((ninputs = ctf_link_deduplicating_count_inputs (fp, NULL, NULL)) < 0) + return; /* Errno is set for us. */ + + if ((inputs = ctf_link_deduplicating_open_inputs (fp, NULL, ninputs, + &parents)) == NULL) + return; /* Errno is set for us. */ + + if (ninputs == 1 && ctf_cuname (inputs[0]) != NULL) + ctf_cuname_set (fp, ctf_cuname (inputs[0])); + + if (ctf_dedup (fp, inputs, ninputs, parents, 0) < 0) + { + ctf_err_warn (fp, 0, 0, _("deduplication failed for %s"), + ctf_link_input_name (fp)); + goto err; + } + + if ((outputs = ctf_dedup_emit (fp, inputs, ninputs, parents, &noutputs, + 0)) == NULL) + { + ctf_err_warn (fp, 0, 0, _("deduplicating link type emission failed " + "for %s"), ctf_link_input_name (fp)); + goto err; + } + + if (!ctf_assert (fp, outputs[0] == fp)) + goto err; + + for (i = 0; i < noutputs; i++) + { + char *dynname; + + /* We already have access to this one. Close the duplicate. */ + if (i == 0) + { + ctf_file_close (outputs[0]); + continue; + } + + if ((dynname = strdup (ctf_cuname (outputs[i]))) == NULL) + goto oom_one_output; + + if (ctf_dynhash_insert (fp->ctf_link_outputs, dynname, outputs[i]) < 0) + goto oom_one_output; + + continue; + + oom_one_output: + ctf_set_errno (fp, ENOMEM); + ctf_err_warn (fp, 0, 0, _("out of memory allocating link outputs")); + free (dynname); + + for (; i < noutputs; i++) + ctf_file_close (outputs[i]); + goto err; + } + + if (!(fp->ctf_link_flags & CTF_LINK_OMIT_VARIABLES_SECTION) + && ctf_link_deduplicating_variables (fp, inputs, ninputs, 0) < 0) + { + ctf_err_warn (fp, 0, 0, _("deduplicating link variable emission failed for " + "%s"), ctf_link_input_name (fp)); + for (i = 1; i < noutputs; i++) + ctf_file_close (outputs[i]); + goto err; + } + + /* Now close all the inputs, including per-CU intermediates. */ + + if (ctf_link_deduplicating_close_inputs (fp, NULL, inputs, ninputs) < 0) + return; /* errno is set for us. */ + + ninputs = 0; /* Prevent double-close. */ + ctf_set_errno (fp, 0); + + /* Fall through. */ + + err: + for (i = 0; i < (size_t) ninputs; i++) + ctf_file_close (inputs[i]); + free (inputs); + free (parents); + free (outputs); + return; } /* Merge types and variable sections in all files added to the link - together. */ + together. All the added files are closed. */ int -ctf_link (ctf_file_t *fp, int share_mode) +ctf_link (ctf_file_t *fp, int flags) { ctf_link_in_member_cb_arg_t arg; + ctf_next_t *i = NULL; + int err; memset (&arg, 0, sizeof (struct ctf_link_in_member_cb_arg)); arg.out_fp = fp; - arg.share_mode = share_mode; + fp->ctf_link_flags = flags; if (fp->ctf_link_inputs == NULL) return 0; /* Nothing to do. */ @@ -610,15 +1495,50 @@ if (fp->ctf_link_outputs == NULL) fp->ctf_link_outputs = ctf_dynhash_create (ctf_hash_string, ctf_hash_eq_string, free, - ctf_file_close_thunk); + (ctf_hash_free_fun) + ctf_file_close); if (fp->ctf_link_outputs == NULL) return ctf_set_errno (fp, ENOMEM); - ctf_dynhash_iter (fp->ctf_link_inputs, ctf_link_one_input_archive, - &arg); + /* Create empty CUs if requested. We do not currently claim that multiple + links in succession with CTF_LINK_EMPTY_CU_MAPPINGS set in some calls and + not set in others will do anything especially sensible. */ + + if (fp->ctf_link_out_cu_mapping && (flags & CTF_LINK_EMPTY_CU_MAPPINGS)) + { + void *v; + + while ((err = ctf_dynhash_next (fp->ctf_link_out_cu_mapping, &i, &v, + NULL)) == 0) + { + const char *to = (const char *) v; + if (ctf_create_per_cu (fp, to, to) == NULL) + { + ctf_next_destroy (i); + return -1; /* Errno is set for us. */ + } + } + if (err != ECTF_NEXT_END) + { + ctf_err_warn (fp, 1, err, _("iteration error creating empty CUs")); + ctf_set_errno (fp, err); + return -1; + } + } + + if ((flags & CTF_LINK_NONDEDUP) || (getenv ("LD_NO_CTF_DEDUP"))) + ctf_dynhash_iter (fp->ctf_link_inputs, ctf_link_one_input_archive, + &arg); + else + ctf_link_deduplicating (fp); + + /* Discard the now-unnecessary mapping table data from all the outputs. */ + if (fp->ctf_link_type_mapping) + ctf_dynhash_empty (fp->ctf_link_type_mapping); + ctf_dynhash_iter (fp->ctf_link_outputs, empty_link_type_mapping, NULL); - if (ctf_errno (fp) != 0) + if ((ctf_errno (fp) != 0) && (ctf_errno (fp) != ECTF_NOCTFDATA)) return -1; return 0; } @@ -887,6 +1807,7 @@ free (arg.dynames[i]); free (arg.dynames); } + fclose (f); return buf; err_no: @@ -905,7 +1826,7 @@ free (arg.dynames[i]); free (arg.dynames); } - ctf_dprintf ("Cannot write archive in link: %s failure: %s\n", errloc, - ctf_errmsg (ctf_errno (fp))); + ctf_err_warn (fp, 0, 0, _("cannot write archive in link: %s failure"), + errloc); return NULL; } diff -Nru gdb-9.1/libctf/ctf-lookup.c gdb-10.2/libctf/ctf-lookup.c --- gdb-9.1/libctf/ctf-lookup.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libctf/ctf-lookup.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Symbol, variable and name lookup. - Copyright (C) 2019 Free Software Foundation, Inc. + Copyright (C) 2019-2020 Free Software Foundation, Inc. This file is part of libctf. @@ -83,7 +83,7 @@ for (p = name, end = name + strlen (name); *p != '\0'; p = q) { - while (isspace (*p)) + while (isspace ((int) *p)) p++; /* Skip leading whitespace. */ if (p == end) @@ -133,13 +133,13 @@ strncmp (p, lp->ctl_prefix, (size_t) (q - p)) == 0) && (size_t) (q - p) >= lp->ctl_len) { - for (p += lp->ctl_len; isspace (*p); p++) + for (p += lp->ctl_len; isspace ((int) *p); p++) continue; /* Skip prefix and next whitespace. */ if ((q = strchr (p, '*')) == NULL) q = end; /* Compare until end. */ - while (isspace (q[-1])) + while (isspace ((int) q[-1])) q--; /* Exclude trailing whitespace. */ /* Expand and/or allocate storage for a slice of the name, then @@ -305,6 +305,18 @@ return type; } +/* Return the native dict of a given type: if called on a child and the + type is in the parent, return the parent. Needed if you plan to access + the type directly, without using the API. */ +ctf_file_t * +ctf_get_dict (ctf_file_t *fp, ctf_id_t type) +{ + if ((fp->ctf_flags & LCTF_CHILD) && LCTF_TYPE_ISPARENT (fp, type)) + return fp->ctf_parent; + + return fp; +} + /* Return the pointer to the internal CTF type data corresponding to the given type ID. If the ID is invalid, the function returns NULL. This function is not exported outside of the library. */ @@ -312,17 +324,16 @@ const ctf_type_t * ctf_lookup_by_id (ctf_file_t **fpp, ctf_id_t type) { - ctf_file_t *fp = *fpp; /* Caller passes in starting CTF container. */ + ctf_file_t *fp = *fpp; /* Caller passes in starting CTF dict. */ ctf_id_t idx; - if ((fp->ctf_flags & LCTF_CHILD) && LCTF_TYPE_ISPARENT (fp, type) - && (fp = fp->ctf_parent) == NULL) + if ((fp = ctf_get_dict (fp, type)) == NULL) { (void) ctf_set_errno (*fpp, ECTF_NOPARENT); return NULL; } - /* If this container is writable, check for a dynamic type. */ + /* If this dict is writable, check for a dynamic type. */ if (fp->ctf_flags & LCTF_RDWR) { diff -Nru gdb-9.1/libctf/ctf-open-bfd.c gdb-10.2/libctf/ctf-open-bfd.c --- gdb-9.1/libctf/ctf-open-bfd.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libctf/ctf-open-bfd.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Opening CTF files with BFD. - Copyright (C) 2019 Free Software Foundation, Inc. + Copyright (C) 2019-2020 Free Software Foundation, Inc. This file is part of libctf. @@ -25,6 +25,7 @@ #include <errno.h> #include <string.h> #include <fcntl.h> +#include <unistd.h> #include <elf.h> #include <bfd.h> #include "swap.h" @@ -32,40 +33,6 @@ #include "elf-bfd.h" -/* Make a new struct ctf_archive_internal wrapper for a ctf_archive or a - ctf_file. Closes ARC and/or FP on error. Arrange to free the SYMSECT or - STRSECT, as needed, on close (though the STRSECT interior is bound to the bfd - * and is not actually freed by this machinery). */ - -static struct ctf_archive_internal * -ctf_new_archive_internal (int is_archive, struct ctf_archive *arc, - ctf_file_t *fp, const ctf_sect_t *symsect, - const ctf_sect_t *strsect, - int *errp) -{ - struct ctf_archive_internal *arci; - - if ((arci = calloc (1, sizeof (struct ctf_archive_internal))) == NULL) - { - if (is_archive) - ctf_arc_close_internal (arc); - else - ctf_file_close (fp); - return (ctf_set_open_errno (errp, errno)); - } - arci->ctfi_is_archive = is_archive; - if (is_archive) - arci->ctfi_archive = arc; - else - arci->ctfi_file = fp; - if (symsect) - memcpy (&arci->ctfi_symsect, symsect, sizeof (struct ctf_sect)); - if (strsect) - memcpy (&arci->ctfi_strsect, strsect, sizeof (struct ctf_sect)); - - return arci; -} - /* Free the BFD bits of a CTF file on ctf_arc_close(). */ static void @@ -73,7 +40,8 @@ { if (arci->ctfi_abfd != NULL) if (!bfd_close_all_done (arci->ctfi_abfd)) - ctf_dprintf ("Cannot close BFD: %s\n", bfd_errmsg (bfd_get_error())); + ctf_err_warn (NULL, 0, 0, _("cannot close BFD: %s"), + bfd_errmsg (bfd_get_error ())); } /* Open a CTF file given the specified BFD. */ @@ -95,8 +63,9 @@ if (!bfd_malloc_and_get_section (abfd, ctf_asect, &contents)) { - ctf_dprintf ("ctf_bfdopen(): cannot malloc CTF section: %s\n", - bfd_errmsg (bfd_get_error())); + ctf_err_warn (NULL, 0, 0, _("ctf_bfdopen(): cannot malloc " + "CTF section: %s"), + bfd_errmsg (bfd_get_error ())); return (ctf_set_open_errno (errp, ECTF_FMT)); } @@ -107,6 +76,7 @@ if ((arc = ctf_bfdopen_ctfsect (abfd, &ctfsect, errp)) != NULL) { + /* This frees the cts_data later. */ arc->ctfi_data = (void *) ctfsect.cts_data; return arc; } @@ -116,60 +86,79 @@ } /* Open a CTF file given the specified BFD and CTF section (which may contain a - CTF archive or a file). Takes ownership of the ctfsect, and frees it - later. */ + CTF archive or a file). */ ctf_archive_t * ctf_bfdopen_ctfsect (struct bfd *abfd _libctf_unused_, const ctf_sect_t *ctfsect, int *errp) { - struct ctf_archive *arc = NULL; ctf_archive_t *arci; - ctf_file_t *fp = NULL; ctf_sect_t *symsectp = NULL; ctf_sect_t *strsectp = NULL; const char *bfderrstr = NULL; - int is_archive; + char *strtab_alloc = NULL; #ifdef HAVE_BFD_ELF ctf_sect_t symsect, strsect; - Elf_Internal_Shdr *strhdr; Elf_Internal_Shdr *symhdr = &elf_symtab_hdr (abfd); - size_t symcount = symhdr->sh_size / symhdr->sh_entsize; + size_t symcount; Elf_Internal_Sym *isymbuf; - bfd_byte *symtab; + bfd_byte *symtab = NULL; const char *strtab = NULL; + size_t strsize; /* TODO: handle SYMTAB_SHNDX. */ - if ((symtab = malloc (symhdr->sh_size)) == NULL) + /* Get the symtab, and the strtab associated with it. */ + if (elf_tdata (abfd) && symhdr && symhdr->sh_size && symhdr->sh_entsize) { - bfderrstr = "Cannot malloc symbol table"; - goto err; - } + symcount = symhdr->sh_size / symhdr->sh_entsize; + if ((symtab = malloc (symhdr->sh_size)) == NULL) + { + bfderrstr = N_("cannot malloc symbol table"); + goto err; + } - isymbuf = bfd_elf_get_elf_syms (abfd, symhdr, symcount, 0, - NULL, symtab, NULL); - free (isymbuf); - if (isymbuf == NULL) - { - bfderrstr = "Cannot read symbol table"; - goto err_free_sym; - } + isymbuf = bfd_elf_get_elf_syms (abfd, symhdr, symcount, 0, + NULL, symtab, NULL); + free (isymbuf); + if (isymbuf == NULL) + { + bfderrstr = N_("cannot read symbol table"); + goto err_free_sym; + } + + if (elf_elfsections (abfd) != NULL + && symhdr->sh_link < elf_numsections (abfd)) + { + Elf_Internal_Shdr *strhdr = elf_elfsections (abfd)[symhdr->sh_link]; - if (elf_elfsections (abfd) != NULL - && symhdr->sh_link < elf_numsections (abfd)) + strsize = strhdr->sh_size; + if (strhdr->contents == NULL) + { + if ((strtab = bfd_elf_get_str_section (abfd, symhdr->sh_link)) == NULL) + { + bfderrstr = N_("cannot read string table"); + goto err_free_sym; + } + } + else + strtab = (const char *) strhdr->contents; + } + } + else /* No symtab: just try getting .strtab by name. */ { - strhdr = elf_elfsections (abfd)[symhdr->sh_link]; - if (strhdr->contents == NULL) + bfd_byte *str_bcontents; + asection *str_asect; + + if ((str_asect = bfd_get_section_by_name (abfd, ".strtab")) != NULL) { - if ((strtab = bfd_elf_get_str_section (abfd, symhdr->sh_link)) == NULL) + if (bfd_malloc_and_get_section (abfd, str_asect, &str_bcontents)) { - bfderrstr = "Cannot read string table"; - goto err_free_sym; + strtab = (const char *) str_bcontents; + strtab_alloc = (char *) str_bcontents; + strsize = str_asect->size; } } - else - strtab = (const char *) strhdr->contents; } if (strtab) @@ -180,9 +169,12 @@ strsect.cts_data = strtab; strsect.cts_name = ".strtab"; - strsect.cts_size = strhdr->sh_size; + strsect.cts_size = strsize; strsectp = &strsect; + } + if (symtab) + { assert (symhdr->sh_entsize == get_elf_backend_data (abfd)->s->sizeof_sym); symsect.cts_name = ".symtab"; symsect.cts_entsize = symhdr->sh_entsize; @@ -192,38 +184,24 @@ } #endif - if (ctfsect->cts_size > sizeof (uint64_t) && - ((*(uint64_t *) ctfsect->cts_data) == CTFA_MAGIC)) - { - is_archive = 1; - if ((arc = ctf_arc_bufopen ((void *) ctfsect->cts_data, - ctfsect->cts_size, errp)) == NULL) - goto err_free_str; - } - else + arci = ctf_arc_bufopen (ctfsect, symsectp, strsectp, errp); + if (arci) { - is_archive = 0; - if ((fp = ctf_bufopen (ctfsect, symsectp, strsectp, errp)) == NULL) - { - ctf_dprintf ("ctf_internal_open(): cannot open CTF: %s\n", - ctf_errmsg (*errp)); - goto err_free_str; - } + /* Request freeing of the symsect and possibly the strsect. */ + arci->ctfi_free_symsect = 1; + if (strtab_alloc) + arci->ctfi_free_strsect = 1; + return arci; } - arci = ctf_new_archive_internal (is_archive, arc, fp, symsectp, strsectp, - errp); - - if (arci) - return arci; - err_free_str: ; #ifdef HAVE_BFD_ELF err_free_sym: free (symtab); + free (strtab_alloc); #endif err: _libctf_unused_; if (bfderrstr) { - ctf_dprintf ("ctf_bfdopen(): %s: %s\n", bfderrstr, + ctf_err_warn (NULL, 0, 0, "ctf_bfdopen(): %s: %s", gettext (bfderrstr), bfd_errmsg (bfd_get_error())); ctf_set_open_errno (errp, ECTF_FMT); } @@ -283,7 +261,7 @@ fp->ctf_data_mmapped = data; fp->ctf_data_mmapped_len = (size_t) st.st_size; - return ctf_new_archive_internal (0, NULL, fp, NULL, NULL, errp); + return ctf_new_archive_internal (0, 1, NULL, fp, NULL, NULL, errp); } if ((nbytes = ctf_pread (fd, &arc_magic, sizeof (arc_magic), 0)) <= 0) @@ -296,7 +274,7 @@ if ((arc = ctf_arc_open_internal (filename, errp)) == NULL) return NULL; /* errno is set for us. */ - return ctf_new_archive_internal (1, arc, NULL, NULL, NULL, errp); + return ctf_new_archive_internal (1, 1, arc, NULL, NULL, NULL, errp); } /* Attempt to open the file with BFD. We must dup the fd first, since bfd @@ -307,18 +285,18 @@ if ((abfd = bfd_fdopenr (filename, target, nfd)) == NULL) { - ctf_dprintf ("Cannot open BFD from %s: %s\n", - filename ? filename : "(unknown file)", - bfd_errmsg (bfd_get_error())); + ctf_err_warn (NULL, 0, 0, _("cannot open BFD from %s: %s"), + filename ? filename : _("(unknown file)"), + bfd_errmsg (bfd_get_error ())); return (ctf_set_open_errno (errp, ECTF_FMT)); } bfd_set_cacheable (abfd, 1); if (!bfd_check_format (abfd, bfd_object)) { - ctf_dprintf ("BFD format problem in %s: %s\n", - filename ? filename : "(unknown file)", - bfd_errmsg (bfd_get_error())); + ctf_err_warn (NULL, 0, 0, _("BFD format problem in %s: %s"), + filename ? filename : _("(unknown file)"), + bfd_errmsg (bfd_get_error ())); if (bfd_get_error() == bfd_error_file_ambiguously_recognized) return (ctf_set_open_errno (errp, ECTF_BFD_AMBIGUOUS)); else @@ -328,7 +306,8 @@ if ((arci = ctf_bfdopen (abfd, errp)) == NULL) { if (!bfd_close_all_done (abfd)) - ctf_dprintf ("Cannot close BFD: %s\n", bfd_errmsg (bfd_get_error())); + ctf_err_warn (NULL, 0, 0, _("cannot close BFD: %s"), + bfd_errmsg (bfd_get_error ())); return NULL; /* errno is set for us. */ } arci->ctfi_bfd_close = ctf_bfdclose; diff -Nru gdb-9.1/libctf/ctf-open.c gdb-10.2/libctf/ctf-open.c --- gdb-9.1/libctf/ctf-open.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libctf/ctf-open.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Opening CTF files. - Copyright (C) 2019 Free Software Foundation, Inc. + Copyright (C) 2019-2020 Free Software Foundation, Inc. This file is part of libctf. @@ -141,8 +141,8 @@ } static ssize_t -get_vbytes_common (unsigned short kind, ssize_t size _libctf_unused_, - size_t vlen) +get_vbytes_common (ctf_file_t *fp, unsigned short kind, + ssize_t size _libctf_unused_, size_t vlen) { switch (kind) { @@ -162,13 +162,14 @@ case CTF_K_RESTRICT: return 0; default: - ctf_dprintf ("detected invalid CTF kind -- %x\n", kind); - return ECTF_CORRUPT; + ctf_set_errno (fp, ECTF_CORRUPT); + ctf_err_warn (fp, 0, 0, _("detected invalid CTF kind: %x"), kind); + return -1; } } static ssize_t -get_vbytes_v1 (unsigned short kind, ssize_t size, size_t vlen) +get_vbytes_v1 (ctf_file_t *fp, unsigned short kind, ssize_t size, size_t vlen) { switch (kind) { @@ -184,11 +185,11 @@ return (sizeof (ctf_lmember_v1_t) * vlen); } - return (get_vbytes_common (kind, size, vlen)); + return (get_vbytes_common (fp, kind, size, vlen)); } static ssize_t -get_vbytes_v2 (unsigned short kind, ssize_t size, size_t vlen) +get_vbytes_v2 (ctf_file_t *fp, unsigned short kind, ssize_t size, size_t vlen) { switch (kind) { @@ -204,7 +205,7 @@ return (sizeof (ctf_lmember_t) * vlen); } - return (get_vbytes_common (kind, size, vlen)); + return (get_vbytes_common (fp, kind, size, vlen)); } static const ctf_fileops_t ctf_fileops[] = { @@ -428,11 +429,11 @@ unsigned long vlen = CTF_V1_INFO_VLEN (tp->ctt_info); size = get_ctt_size_v1 (fp, (const ctf_type_t *) tp, NULL, &increment); - vbytes = get_vbytes_v1 (kind, size, vlen); + vbytes = get_vbytes_v1 (fp, kind, size, vlen); get_ctt_size_v2_unconverted (fp, (const ctf_type_t *) tp, NULL, &v2increment); - v2bytes = get_vbytes_v2 (kind, size, vlen); + v2bytes = get_vbytes_v2 (fp, kind, size, vlen); if ((vbytes < 0) || (size < 0)) return ECTF_CORRUPT; @@ -485,7 +486,7 @@ void *vdata, *v2data; size = get_ctt_size_v1 (fp, (const ctf_type_t *) tp, NULL, &increment); - vbytes = get_vbytes_v1 (kind, size, vlen); + vbytes = get_vbytes_v1 (fp, kind, size, vlen); t2p->ctt_name = tp->ctt_name; t2p->ctt_info = CTF_TYPE_INFO (kind, isroot, vlen); @@ -519,7 +520,7 @@ } v2size = get_ctt_size_v2 (fp, t2p, NULL, &v2increment); - v2bytes = get_vbytes_v2 (kind, v2size, vlen); + v2bytes = get_vbytes_v2 (fp, kind, v2size, vlen); /* Catch out-of-sync get_ctt_size_*(). The count goes wrong if these are not identical (and having them different makes no @@ -692,17 +693,11 @@ if (vbytes < 0) return ECTF_CORRUPT; + /* For forward declarations, ctt_type is the CTF_K_* kind for the tag, + so bump that population count too. */ if (kind == CTF_K_FORWARD) - { - /* For forward declarations, ctt_type is the CTF_K_* kind for the tag, - so bump that population count too. If ctt_type is unknown, treat - the tag as a struct. */ + pop[tp->ctt_type]++; - if (tp->ctt_type == CTF_K_UNKNOWN || tp->ctt_type >= CTF_K_MAX) - pop[CTF_K_STRUCT]++; - else - pop[tp->ctt_type]++; - } tp = (ctf_type_t *) ((uintptr_t) tp + increment + vbytes); pop[kind]++; } @@ -765,7 +760,7 @@ for (id = 1, tp = tbuf; tp < tend; xp++, id++) { unsigned short kind = LCTF_INFO_KIND (fp, tp->ctt_info); - unsigned short flag = LCTF_INFO_ISROOT (fp, tp->ctt_info); + unsigned short isroot = LCTF_INFO_ISROOT (fp, tp->ctt_info); unsigned long vlen = LCTF_INFO_VLEN (fp, tp->ctt_info); ssize_t size, increment, vbytes; @@ -773,6 +768,7 @@ (void) ctf_get_ctt_size (fp, tp, &size, &increment); name = ctf_strptr (fp, tp->ctt_name); + /* Cannot fail: shielded by call in loop above. */ vbytes = LCTF_VBYTES (fp, kind, size, vlen); switch (kind) @@ -787,7 +783,7 @@ if (((ctf_hash_lookup_type (fp->ctf_names.ctn_readonly, fp, name)) == 0) - || (flag & CTF_ADD_ROOT)) + || isroot) { err = ctf_hash_define_type (fp->ctf_names.ctn_readonly, fp, LCTF_INDEX_TO_TYPE (fp, id, child), @@ -804,6 +800,9 @@ break; case CTF_K_FUNCTION: + if (!isroot) + break; + err = ctf_hash_insert_type (fp->ctf_names.ctn_readonly, fp, LCTF_INDEX_TO_TYPE (fp, id, child), tp->ctt_name); @@ -812,6 +811,12 @@ break; case CTF_K_STRUCT: + if (size >= CTF_LSTRUCT_THRESH) + nlstructs++; + + if (!isroot) + break; + err = ctf_hash_define_type (fp->ctf_structs.ctn_readonly, fp, LCTF_INDEX_TO_TYPE (fp, id, child), tp->ctt_name); @@ -819,23 +824,27 @@ if (err != 0) return err; - if (size >= CTF_LSTRUCT_THRESH) - nlstructs++; break; case CTF_K_UNION: + if (size >= CTF_LSTRUCT_THRESH) + nlunions++; + + if (!isroot) + break; + err = ctf_hash_define_type (fp->ctf_unions.ctn_readonly, fp, LCTF_INDEX_TO_TYPE (fp, id, child), tp->ctt_name); if (err != 0) return err; - - if (size >= CTF_LSTRUCT_THRESH) - nlunions++; break; case CTF_K_ENUM: + if (!isroot) + break; + err = ctf_hash_define_type (fp->ctf_enums.ctn_readonly, fp, LCTF_INDEX_TO_TYPE (fp, id, child), tp->ctt_name); @@ -845,6 +854,9 @@ break; case CTF_K_TYPEDEF: + if (!isroot) + break; + err = ctf_hash_insert_type (fp->ctf_names.ctn_readonly, fp, LCTF_INDEX_TO_TYPE (fp, id, child), tp->ctt_name); @@ -855,6 +867,10 @@ case CTF_K_FORWARD: { ctf_names_t *np = ctf_name_table (fp, tp->ctt_type); + + if (!isroot) + break; + /* Only insert forward tags into the given hash if the type or tag name is not already present. */ if (ctf_hash_lookup_type (np->ctn_readonly, fp, name) == 0) @@ -881,6 +897,9 @@ case CTF_K_VOLATILE: case CTF_K_CONST: case CTF_K_RESTRICT: + if (!isroot) + break; + err = ctf_hash_insert_type (fp->ctf_names.ctn_readonly, fp, LCTF_INDEX_TO_TYPE (fp, id, child), tp->ctt_name); @@ -888,8 +907,8 @@ return err; break; default: - ctf_dprintf ("unhandled CTF kind in endianness conversion -- %x\n", - kind); + ctf_err_warn (fp, 0, ECTF_CORRUPT, + _("init_types(): unhandled CTF kind: %x"), kind); return ECTF_CORRUPT; } @@ -1026,7 +1045,7 @@ ctf_stype followed by variable data. */ static int -flip_types (void *start, size_t len) +flip_types (ctf_file_t *fp, void *start, size_t len) { ctf_type_t *t = start; @@ -1039,7 +1058,7 @@ uint32_t kind = CTF_V2_INFO_KIND (t->ctt_info); size_t size = t->ctt_size; uint32_t vlen = CTF_V2_INFO_VLEN (t->ctt_info); - size_t vbytes = get_vbytes_v2 (kind, size, vlen); + size_t vbytes = get_vbytes_v2 (fp, kind, size, vlen); if (_libctf_unlikely_ (size == CTF_LSIZE_SENT)) { @@ -1164,8 +1183,9 @@ break; } default: - ctf_dprintf ("unhandled CTF kind in endianness conversion -- %x\n", - kind); + ctf_err_warn (fp, 0, ECTF_CORRUPT, + _("unhandled CTF kind in endianness conversion: %x"), + kind); return ECTF_CORRUPT; } @@ -1183,7 +1203,7 @@ data, this is no real loss. */ static int -flip_ctf (ctf_header_t *cth, unsigned char *buf) +flip_ctf (ctf_file_t *fp, ctf_header_t *cth, unsigned char *buf) { flip_lbls (buf + cth->cth_lbloff, cth->cth_objtoff - cth->cth_lbloff); flip_objts (buf + cth->cth_objtoff, cth->cth_funcoff - cth->cth_objtoff); @@ -1191,7 +1211,7 @@ flip_objts (buf + cth->cth_objtidxoff, cth->cth_funcidxoff - cth->cth_objtidxoff); flip_objts (buf + cth->cth_funcidxoff, cth->cth_varoff - cth->cth_funcidxoff); flip_vars (buf + cth->cth_varoff, cth->cth_typeoff - cth->cth_varoff); - return flip_types (buf + cth->cth_typeoff, cth->cth_stroff - cth->cth_typeoff); + return flip_types (fp, buf + cth->cth_typeoff, cth->cth_stroff - cth->cth_typeoff); } /* Set up the ctl hashes in a ctf_file_t. Called by both writable and @@ -1359,14 +1379,17 @@ info. We do not support dynamically upgrading such entries (none should exist in any case, since dwarf2ctf does not create them). */ - ctf_dprintf ("ctf_bufopen: CTF version %d symsect not " - "supported\n", pp->ctp_version); + ctf_err_warn (NULL, 0, 0, _("ctf_bufopen: CTF version %d symsect not " + "supported"), pp->ctp_version); return (ctf_set_open_errno (errp, ECTF_NOTSUP)); } if (pp->ctp_version < CTF_VERSION_3) hdrsz = sizeof (ctf_header_v2_t); + if (_libctf_unlikely_ (pp->ctp_flags > CTF_F_MAX)) + return (ctf_set_open_errno (errp, ECTF_FLAGS)); + if (ctfsect->cts_size < hdrsz) return (ctf_set_open_errno (errp, ECTF_NOCTFBUF)); @@ -1450,16 +1473,17 @@ if ((rc = uncompress (fp->ctf_base, &dstlen, src, srclen)) != Z_OK) { - ctf_dprintf ("zlib inflate err: %s\n", zError (rc)); + ctf_err_warn (NULL, 0, ECTF_DECOMPRESS, _("zlib inflate err: %s"), + zError (rc)); err = ECTF_DECOMPRESS; goto bad; } if ((size_t) dstlen != fp->ctf_size) { - ctf_dprintf ("zlib inflate short -- got %lu of %lu " - "bytes\n", (unsigned long) dstlen, - (unsigned long) fp->ctf_size); + ctf_err_warn (NULL, 0, ECTF_CORRUPT, + _("zlib inflate short: got %lu of %lu bytes"), + (unsigned long) dstlen, (unsigned long) fp->ctf_size); err = ECTF_CORRUPT; goto bad; } @@ -1539,7 +1563,7 @@ fp->ctf_syn_ext_strtab = syn_strtab; if (foreign_endian && - (err = flip_ctf (hp, fp->ctf_buf)) != 0) + (err = flip_ctf (fp, hp, fp->ctf_buf)) != 0) { /* We can be certain that flip_ctf() will have endian-flipped everything other than the types table when we return. In particular the header @@ -1599,10 +1623,22 @@ bad: ctf_set_open_errno (errp, err); + ctf_err_warn_to_open (fp); ctf_file_close (fp); return NULL; } +/* Bump the refcount on the specified CTF container, to allow export of + ctf_file_t's from iterators that open and close the ctf_file_t around the + loop. (This does not extend their lifetime beyond that of the ctf_archive_t + in which they are contained.) */ + +void +ctf_ref (ctf_file_t *fp) +{ + fp->ctf_refcnt++; +} + /* Close the specified CTF container and free associated data structures. Note that ctf_file_close() is a reference counted operation: if the specified file is the parent of other active containers, its reference count will be greater @@ -1613,6 +1649,7 @@ { ctf_dtdef_t *dtd, *ntd; ctf_dvdef_t *dvd, *nvd; + ctf_err_warning_t *err, *nerr; if (fp == NULL) return; /* Allow ctf_file_close(NULL) to simplify caller code. */ @@ -1625,9 +1662,17 @@ return; } + /* It is possible to recurse back in here, notably if dicts in the + ctf_link_inputs or ctf_link_outputs cite this dict as a parent without + using ctf_import_unref. Do nothing in that case. */ + if (fp->ctf_refcnt == 0) + return; + + fp->ctf_refcnt--; free (fp->ctf_dyncuname); free (fp->ctf_dynparname); - ctf_file_close (fp->ctf_parent); + if (fp->ctf_parent && !fp->ctf_parent_unreffed) + ctf_file_close (fp->ctf_parent); for (dtd = ctf_list_next (&fp->ctf_dtdefs); dtd != NULL; dtd = ntd) { @@ -1676,8 +1721,19 @@ ctf_dynhash_destroy (fp->ctf_link_inputs); ctf_dynhash_destroy (fp->ctf_link_outputs); ctf_dynhash_destroy (fp->ctf_link_type_mapping); - ctf_dynhash_destroy (fp->ctf_link_cu_mapping); + ctf_dynhash_destroy (fp->ctf_link_in_cu_mapping); + ctf_dynhash_destroy (fp->ctf_link_out_cu_mapping); ctf_dynhash_destroy (fp->ctf_add_processing); + ctf_dedup_fini (fp, NULL, 0); + ctf_dynset_destroy (fp->ctf_dedup_atoms_alloc); + + for (err = ctf_list_next (&fp->ctf_errs_warnings); err != NULL; err = nerr) + { + nerr = ctf_list_next (err); + ctf_list_delete (&fp->ctf_errs_warnings, err); + free (err->cew_text); + free (err); + } free (fp->ctf_sxlate); free (fp->ctf_txlate); @@ -1776,13 +1832,44 @@ if (pfp != NULL && pfp->ctf_dmodel != fp->ctf_dmodel) return (ctf_set_errno (fp, ECTF_DMODEL)); - if (fp->ctf_parent != NULL) + if (fp->ctf_parent && !fp->ctf_parent_unreffed) + ctf_file_close (fp->ctf_parent); + fp->ctf_parent = NULL; + + if (pfp != NULL) { - fp->ctf_parent->ctf_refcnt--; - ctf_file_close (fp->ctf_parent); - fp->ctf_parent = NULL; + int err; + + if (fp->ctf_parname == NULL) + if ((err = ctf_parent_name_set (fp, "PARENT")) < 0) + return err; + + fp->ctf_flags |= LCTF_CHILD; + pfp->ctf_refcnt++; + fp->ctf_parent_unreffed = 0; } + fp->ctf_parent = pfp; + return 0; +} + +/* Like ctf_import, but does not increment the refcount on the imported parent + or close it at any point: as a result it can go away at any time and the + caller must do all freeing itself. Used internally to avoid refcount + loops. */ +int +ctf_import_unref (ctf_file_t *fp, ctf_file_t *pfp) +{ + if (fp == NULL || fp == pfp || (pfp != NULL && pfp->ctf_refcnt == 0)) + return (ctf_set_errno (fp, EINVAL)); + + if (pfp != NULL && pfp->ctf_dmodel != fp->ctf_dmodel) + return (ctf_set_errno (fp, ECTF_DMODEL)); + + if (fp->ctf_parent && !fp->ctf_parent_unreffed) + ctf_file_close (fp->ctf_parent); + fp->ctf_parent = NULL; + if (pfp != NULL) { int err; @@ -1792,7 +1879,7 @@ return err; fp->ctf_flags |= LCTF_CHILD; - pfp->ctf_refcnt++; + fp->ctf_parent_unreffed = 1; } fp->ctf_parent = pfp; diff -Nru gdb-9.1/libctf/ctf-qsort_r.c gdb-10.2/libctf/ctf-qsort_r.c --- gdb-9.1/libctf/ctf-qsort_r.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libctf/ctf-qsort_r.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 1991-2019 Free Software Foundation, Inc. +/* Copyright (C) 1991-2020 Free Software Foundation, Inc. This file is part of libctf (imported from Gnulib). Written by Douglas C. Schmidt (schmidt@ics.uci.edu). diff -Nru gdb-9.1/libctf/ctf-sha1.c gdb-10.2/libctf/ctf-sha1.c --- gdb-9.1/libctf/ctf-sha1.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/libctf/ctf-sha1.c 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,50 @@ +/* SHA-1 thunks. + Copyright (C) 2019 Free Software Foundation, Inc. + + This file is part of libctf. + + libctf is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License as published by the Free + Software Foundation; either version 3, or (at your option) any later + version. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; see the file COPYING. If not see + <http://www.gnu.org/licenses/>. */ + +#include <ctf-impl.h> +#include <ctf-sha1.h> + +static const char hex[] = "0123456789abcdef"; + +char * +ctf_sha1_fini (ctf_sha1_t *sha1, char *buf) +{ + size_t i; + + /* Alignment suitable for a uint32_t. */ + union + { + uint32_t align; + unsigned char digest[((CTF_SHA1_SIZE - 1) / 2) + 1]; + } align; + + sha1_finish_ctx (sha1, align.digest); + + if (!buf) + return NULL; + + buf[CTF_SHA1_SIZE - 1] = '\0'; + + for (i = 0; i < (CTF_SHA1_SIZE - 1) / 2; i++) + { + buf[2 * i] = hex[align.digest[i] >> 4]; + buf[2 * i + 1] = hex[align.digest[i] & 0xf]; + } + return buf; +} diff -Nru gdb-9.1/libctf/ctf-sha1.h gdb-10.2/libctf/ctf-sha1.h --- gdb-9.1/libctf/ctf-sha1.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/libctf/ctf-sha1.h 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,41 @@ +/* SHA-1 thunks. + Copyright (C) 2019 Free Software Foundation, Inc. + + This file is part of libctf. + + libctf is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License as published by the Free + Software Foundation; either version 3, or (at your option) any later + version. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; see the file COPYING. If not see + <http://www.gnu.org/licenses/>. */ + +#ifndef _CTF_SHA1_H +#define _CTF_SHA1_H + +#include "config.h" +#include "sha1.h" + +#define CTF_SHA1_SIZE 41 + +typedef struct sha1_ctx ctf_sha1_t; + +static inline void +ctf_sha1_init (ctf_sha1_t *sha1) +{ + sha1_init_ctx (sha1); +} + +static inline void +ctf_sha1_add (ctf_sha1_t *sha1, const void *buf, size_t len) +{ + sha1_process_bytes (buf, len, sha1); +} +#endif diff -Nru gdb-9.1/libctf/ctf-string.c gdb-10.2/libctf/ctf-string.c --- gdb-9.1/libctf/ctf-string.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libctf/ctf-string.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* CTF string table management. - Copyright (C) 2019 Free Software Foundation, Inc. + Copyright (C) 2019-2020 Free Software Foundation, Inc. This file is part of libctf. @@ -427,7 +427,7 @@ nullstr = ctf_dynhash_lookup (fp->ctf_str_atoms, ""); if (!nullstr) { - ctf_dprintf ("Internal error: null string not found in strtab.\n"); + ctf_err_warn (fp, 0, ECTF_INTERNAL, _("null string not found in strtab")); strtab.cts_strs = NULL; return strtab; } diff -Nru gdb-9.1/libctf/ctf-subr.c gdb-10.2/libctf/ctf-subr.c --- gdb-9.1/libctf/ctf-subr.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libctf/ctf-subr.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Simple subrs. - Copyright (C) 2019 Free Software Foundation, Inc. + Copyright (C) 2019-2020 Free Software Foundation, Inc. This file is part of libctf. @@ -126,12 +126,6 @@ return acc; } -const char * -ctf_strerror (int err) -{ - return (const char *) (strerror (err)); -} - /* Set the CTF library client version to the specified version. If version is zero, we just return the default library version number. */ int @@ -187,7 +181,7 @@ _libctf_printflike_ (1, 2) void ctf_dprintf (const char *format, ...) { - if (_libctf_debug) + if (_libctf_unlikely_ (_libctf_debug)) { va_list alist; @@ -198,3 +192,153 @@ va_end (alist); } } + +/* This needs more attention to thread-safety later on. */ +static ctf_list_t open_errors; + +/* Errors and warnings. Report the warning or error to the list in FP (or the + open errors list if NULL): if ERR is nonzero it is the errno to report to the + debug stream instead of that recorded on fp. */ +_libctf_printflike_ (4, 5) +extern void +ctf_err_warn (ctf_file_t *fp, int is_warning, int err, + const char *format, ...) +{ + va_list alist; + ctf_err_warning_t *cew; + + /* Don't bother reporting errors here: we can't do much about them if they + happen. If we're so short of memory that a tiny malloc doesn't work, a + vfprintf isn't going to work either and the caller will have to rely on the + ENOMEM return they'll be getting in short order anyway. */ + + if ((cew = malloc (sizeof (ctf_err_warning_t))) == NULL) + return; + + cew->cew_is_warning = is_warning; + va_start (alist, format); + if (vasprintf (&cew->cew_text, format, alist) < 0) + { + free (cew); + va_end (alist); + return; + } + va_end (alist); + + /* Include the error code only if there is one, and if this is not a warning. + (Warnings may not have a meaningful error code, since the warning may not + lead to unwinding up to the user.) */ + if (!is_warning && (err != 0 || (fp && ctf_errno (fp) != 0))) + ctf_dprintf ("%s: %s (%s)\n", is_warning ? _("error") : _("warning"), + cew->cew_text, err != 0 ? ctf_errmsg (err) + : ctf_errmsg (ctf_errno (fp))); + else + ctf_dprintf ("%s: %s\n", is_warning ? _("error") : _("warning"), + cew->cew_text); + + if (fp != NULL) + ctf_list_append (&fp->ctf_errs_warnings, cew); + else + ctf_list_append (&open_errors, cew); +} + +/* Move all the errors/warnings from an fp into the open_errors. */ +void +ctf_err_warn_to_open (ctf_file_t *fp) +{ + ctf_list_splice (&open_errors, &fp->ctf_errs_warnings); +} + +/* Error-warning reporting: an 'iterator' that returns errors and warnings from + the error/warning list, in order of emission. Errors and warnings are popped + after return: the caller must free the returned error-text pointer. + + An fp of NULL returns CTF-open-time errors from the open_errors variable + above. + + The treatment of errors from this function itself is somewhat unusual: it + will often be called on an error path, so we don't want to overwrite the + ctf_errno unless we have no choice. So, like ctf_bufopen et al, this + function takes an errp pointer where errors are reported. The pointer is + optional: if not set, errors are reported via the fp (if non-NULL). Calls + with neither fp nor errp set are mildly problematic because there is no clear + way to report end-of-iteration: you just have to assume that a NULL return + means the end, and not an iterator error. */ + +char * +ctf_errwarning_next (ctf_file_t *fp, ctf_next_t **it, int *is_warning, + int *errp) +{ + ctf_next_t *i = *it; + char *ret; + ctf_list_t *errlist; + ctf_err_warning_t *cew; + + if (fp) + errlist = &fp->ctf_errs_warnings; + else + errlist = &open_errors; + + if (!i) + { + if ((i = ctf_next_create ()) == NULL) + { + if (errp) + *errp = ENOMEM; + else if (fp) + ctf_set_errno (fp, ENOMEM); + return NULL; + } + + i->cu.ctn_fp = fp; + i->ctn_iter_fun = (void (*) (void)) ctf_errwarning_next; + *it = i; + } + + if ((void (*) (void)) ctf_errwarning_next != i->ctn_iter_fun) + { + if (errp) + *errp = ECTF_NEXT_WRONGFUN; + else if (fp) + ctf_set_errno (fp, ECTF_NEXT_WRONGFUN); + return NULL; + } + + if (fp != i->cu.ctn_fp) + { + if (errp) + *errp = ECTF_NEXT_WRONGFP; + else if (fp) + ctf_set_errno (fp, ECTF_NEXT_WRONGFP); + return NULL; + } + + cew = ctf_list_next (errlist); + + if (!cew) + { + ctf_next_destroy (i); + *it = NULL; + if (errp) + *errp = ECTF_NEXT_END; + else if (fp) + ctf_set_errno (fp, ECTF_NEXT_END); + return NULL; + } + + if (is_warning) + *is_warning = cew->cew_is_warning; + ret = cew->cew_text; + ctf_list_delete (errlist, cew); + free (cew); + return ret; +} + +void +ctf_assert_fail_internal (ctf_file_t *fp, const char *file, size_t line, + const char *exprstr) +{ + ctf_err_warn (fp, 0, ECTF_INTERNAL, _("%s: %lu: libctf assertion failed: %s"), + file, (long unsigned int) line, exprstr); + ctf_set_errno (fp, ECTF_INTERNAL); +} diff -Nru gdb-9.1/libctf/ctf-types.c gdb-10.2/libctf/ctf-types.c --- gdb-9.1/libctf/ctf-types.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libctf/ctf-types.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Type handling functions. - Copyright (C) 2019 Free Software Foundation, Inc. + Copyright (C) 2019-2020 Free Software Foundation, Inc. This file is part of libctf. @@ -18,6 +18,7 @@ <http://www.gnu.org/licenses/>. */ #include <ctf-impl.h> +#include <assert.h> #include <string.h> /* Determine whether a type is a parent or a child. */ @@ -103,6 +104,125 @@ return 0; } +/* Iterate over the members of a STRUCT or UNION, returning each member's + offset and optionally name and member type in turn. On end-of-iteration, + returns -1. */ + +ssize_t +ctf_member_next (ctf_file_t *fp, ctf_id_t type, ctf_next_t **it, + const char **name, ctf_id_t *membtype) +{ + ctf_file_t *ofp = fp; + uint32_t kind; + ssize_t offset; + ctf_next_t *i = *it; + + if (!i) + { + const ctf_type_t *tp; + ctf_dtdef_t *dtd; + + if ((type = ctf_type_resolve (fp, type)) == CTF_ERR) + return -1; /* errno is set for us. */ + + if ((tp = ctf_lookup_by_id (&fp, type)) == NULL) + return -1; /* errno is set for us. */ + + if ((i = ctf_next_create ()) == NULL) + return ctf_set_errno (ofp, ENOMEM); + i->cu.ctn_fp = ofp; + + (void) ctf_get_ctt_size (fp, tp, &i->ctn_size, + &i->ctn_increment); + kind = LCTF_INFO_KIND (fp, tp->ctt_info); + + if (kind != CTF_K_STRUCT && kind != CTF_K_UNION) + { + ctf_next_destroy (i); + return (ctf_set_errno (ofp, ECTF_NOTSOU)); + } + + dtd = ctf_dynamic_type (fp, type); + i->ctn_iter_fun = (void (*) (void)) ctf_member_next; + + /* We depend below on the RDWR state indicating whether the DTD-related + fields or the DMD-related fields have been initialized. */ + + assert ((dtd && (fp->ctf_flags & LCTF_RDWR)) + || (!dtd && (!(fp->ctf_flags & LCTF_RDWR)))); + + if (dtd == NULL) + { + i->ctn_n = LCTF_INFO_VLEN (fp, tp->ctt_info); + + if (i->ctn_size < CTF_LSTRUCT_THRESH) + i->u.ctn_mp = (const ctf_member_t *) ((uintptr_t) tp + + i->ctn_increment); + else + i->u.ctn_lmp = (const ctf_lmember_t *) ((uintptr_t) tp + + i->ctn_increment); + } + else + i->u.ctn_dmd = ctf_list_next (&dtd->dtd_u.dtu_members); + + *it = i; + } + + if ((void (*) (void)) ctf_member_next != i->ctn_iter_fun) + return (ctf_set_errno (ofp, ECTF_NEXT_WRONGFUN)); + + if (ofp != i->cu.ctn_fp) + return (ctf_set_errno (ofp, ECTF_NEXT_WRONGFP)); + + /* Resolve to the native dict of this type. */ + if ((fp = ctf_get_dict (ofp, type)) == NULL) + return (ctf_set_errno (ofp, ECTF_NOPARENT)); + + if (!(fp->ctf_flags & LCTF_RDWR)) + { + if (i->ctn_n == 0) + goto end_iter; + + if (i->ctn_size < CTF_LSTRUCT_THRESH) + { + if (name) + *name = ctf_strptr (fp, i->u.ctn_mp->ctm_name); + if (membtype) + *membtype = i->u.ctn_mp->ctm_type; + offset = i->u.ctn_mp->ctm_offset; + i->u.ctn_mp++; + } + else + { + if (name) + *name = ctf_strptr (fp, i->u.ctn_lmp->ctlm_name); + if (membtype) + *membtype = i->u.ctn_lmp->ctlm_type; + offset = (unsigned long) CTF_LMEM_OFFSET (i->u.ctn_lmp); + i->u.ctn_lmp++; + } + i->ctn_n--; + } + else + { + if (i->u.ctn_dmd == NULL) + goto end_iter; + if (name) + *name = i->u.ctn_dmd->dmd_name; + if (membtype) + *membtype = i->u.ctn_dmd->dmd_type; + offset = i->u.ctn_dmd->dmd_offset; + i->u.ctn_dmd = ctf_list_next (i->u.ctn_dmd); + } + + return offset; + + end_iter: + ctf_next_destroy (i); + *it = NULL; + return ctf_set_errno (ofp, ECTF_NEXT_END); +} + /* Iterate over the members of an ENUM. We pass the string name and associated integer value of each enum element to the specified callback function. */ @@ -154,8 +274,126 @@ return 0; } +/* Iterate over the members of an enum TYPE, returning each enumerand's NAME or + NULL at end of iteration or error, and optionally passing back the + enumerand's integer VALue. */ + +const char * +ctf_enum_next (ctf_file_t *fp, ctf_id_t type, ctf_next_t **it, + int *val) +{ + ctf_file_t *ofp = fp; + uint32_t kind; + const char *name; + ctf_next_t *i = *it; + + if (!i) + { + const ctf_type_t *tp; + ctf_dtdef_t *dtd; + + if ((type = ctf_type_resolve_unsliced (fp, type)) == CTF_ERR) + return NULL; /* errno is set for us. */ + + if ((tp = ctf_lookup_by_id (&fp, type)) == NULL) + return NULL; /* errno is set for us. */ + + if ((i = ctf_next_create ()) == NULL) + { + ctf_set_errno (ofp, ENOMEM); + return NULL; + } + i->cu.ctn_fp = ofp; + + (void) ctf_get_ctt_size (fp, tp, NULL, + &i->ctn_increment); + kind = LCTF_INFO_KIND (fp, tp->ctt_info); + + if (kind != CTF_K_ENUM) + { + ctf_next_destroy (i); + ctf_set_errno (ofp, ECTF_NOTENUM); + return NULL; + } + + dtd = ctf_dynamic_type (fp, type); + i->ctn_iter_fun = (void (*) (void)) ctf_enum_next; + + /* We depend below on the RDWR state indicating whether the DTD-related + fields or the DMD-related fields have been initialized. */ + + assert ((dtd && (fp->ctf_flags & LCTF_RDWR)) + || (!dtd && (!(fp->ctf_flags & LCTF_RDWR)))); + + if (dtd == NULL) + { + i->ctn_n = LCTF_INFO_VLEN (fp, tp->ctt_info); + + i->u.ctn_en = (const ctf_enum_t *) ((uintptr_t) tp + + i->ctn_increment); + } + else + i->u.ctn_dmd = ctf_list_next (&dtd->dtd_u.dtu_members); + + *it = i; + } + + if ((void (*) (void)) ctf_enum_next != i->ctn_iter_fun) + { + ctf_set_errno (ofp, ECTF_NEXT_WRONGFUN); + return NULL; + } + + if (ofp != i->cu.ctn_fp) + { + ctf_set_errno (ofp, ECTF_NEXT_WRONGFP); + return NULL; + } + + /* Resolve to the native dict of this type. */ + if ((fp = ctf_get_dict (ofp, type)) == NULL) + { + ctf_set_errno (ofp, ECTF_NOPARENT); + return NULL; + } + + if (!(fp->ctf_flags & LCTF_RDWR)) + { + if (i->ctn_n == 0) + goto end_iter; + + name = ctf_strptr (fp, i->u.ctn_en->cte_name); + if (val) + *val = i->u.ctn_en->cte_value; + i->u.ctn_en++; + i->ctn_n--; + } + else + { + if (i->u.ctn_dmd == NULL) + goto end_iter; + + name = i->u.ctn_dmd->dmd_name; + if (val) + *val = i->u.ctn_dmd->dmd_value; + i->u.ctn_dmd = ctf_list_next (i->u.ctn_dmd); + } + + return name; + + end_iter: + ctf_next_destroy (i); + *it = NULL; + ctf_set_errno (ofp, ECTF_NEXT_END); + return NULL; +} + /* Iterate over every root (user-visible) type in the given CTF container. - We pass the type ID of each type to the specified callback function. */ + We pass the type ID of each type to the specified callback function. + + Does not traverse parent types: you have to do that explicitly. This is by + design, to avoid traversing them more than once if traversing many children + of a single parent. */ int ctf_type_iter (ctf_file_t *fp, ctf_type_f *func, void *arg) @@ -175,7 +413,11 @@ } /* Iterate over every type in the given CTF container, user-visible or not. - We pass the type ID of each type to the specified callback function. */ + We pass the type ID of each type to the specified callback function. + + Does not traverse parent types: you have to do that explicitly. This is by + design, to avoid traversing them more than once if traversing many children + of a single parent. */ int ctf_type_iter_all (ctf_file_t *fp, ctf_type_all_f *func, void *arg) @@ -195,6 +437,55 @@ return 0; } +/* Iterate over every type in the given CTF container, optionally including + non-user-visible types, returning each type ID and hidden flag in turn. + Returns CTF_ERR on end of iteration or error. + + Does not traverse parent types: you have to do that explicitly. This is by + design, to avoid traversing them more than once if traversing many children + of a single parent. */ + +ctf_id_t +ctf_type_next (ctf_file_t *fp, ctf_next_t **it, int *flag, int want_hidden) +{ + ctf_next_t *i = *it; + + if (!i) + { + if ((i = ctf_next_create ()) == NULL) + return ctf_set_errno (fp, ENOMEM); + + i->cu.ctn_fp = fp; + i->ctn_type = 1; + i->ctn_iter_fun = (void (*) (void)) ctf_type_next; + *it = i; + } + + if ((void (*) (void)) ctf_type_next != i->ctn_iter_fun) + return (ctf_set_errno (fp, ECTF_NEXT_WRONGFUN)); + + if (fp != i->cu.ctn_fp) + return (ctf_set_errno (fp, ECTF_NEXT_WRONGFP)); + + while (i->ctn_type <= fp->ctf_typemax) + { + const ctf_type_t *tp = LCTF_INDEX_TO_TYPEPTR (fp, i->ctn_type); + + if ((!want_hidden) && (!LCTF_INFO_ISROOT (fp, tp->ctt_info))) + { + i->ctn_type++; + continue; + } + + if (flag) + *flag = LCTF_INFO_ISROOT (fp, tp->ctt_info); + return LCTF_INDEX_TO_TYPE (fp, i->ctn_type++, fp->ctf_flags & LCTF_CHILD); + } + ctf_next_destroy (i); + *it = NULL; + return ctf_set_errno (fp, ECTF_NEXT_END); +} + /* Iterate over every variable in the given CTF container, in arbitrary order. We pass the name of each variable to the specified callback function. */ @@ -204,7 +495,7 @@ int rc; if ((fp->ctf_flags & LCTF_CHILD) && (fp->ctf_parent == NULL)) - return ECTF_NOPARENT; + return (ctf_set_errno (fp, ECTF_NOPARENT)); if (!(fp->ctf_flags & LCTF_RDWR)) { @@ -229,6 +520,63 @@ return 0; } +/* Iterate over every variable in the given CTF container, in arbitrary order, + returning the name and type of each variable in turn. The name argument is + not optional. Returns CTF_ERR on end of iteration or error. */ + +ctf_id_t +ctf_variable_next (ctf_file_t *fp, ctf_next_t **it, const char **name) +{ + ctf_next_t *i = *it; + + if ((fp->ctf_flags & LCTF_CHILD) && (fp->ctf_parent == NULL)) + return (ctf_set_errno (fp, ECTF_NOPARENT)); + + if (!i) + { + if ((i = ctf_next_create ()) == NULL) + return ctf_set_errno (fp, ENOMEM); + + i->cu.ctn_fp = fp; + i->ctn_iter_fun = (void (*) (void)) ctf_variable_next; + if (fp->ctf_flags & LCTF_RDWR) + i->u.ctn_dvd = ctf_list_next (&fp->ctf_dvdefs); + *it = i; + } + + if ((void (*) (void)) ctf_variable_next != i->ctn_iter_fun) + return (ctf_set_errno (fp, ECTF_NEXT_WRONGFUN)); + + if (fp != i->cu.ctn_fp) + return (ctf_set_errno (fp, ECTF_NEXT_WRONGFP)); + + if (!(fp->ctf_flags & LCTF_RDWR)) + { + if (i->ctn_n >= fp->ctf_nvars) + goto end_iter; + + *name = ctf_strptr (fp, fp->ctf_vars[i->ctn_n].ctv_name); + return fp->ctf_vars[i->ctn_n++].ctv_type; + } + else + { + ctf_id_t id; + + if (i->u.ctn_dvd == NULL) + goto end_iter; + + *name = i->u.ctn_dvd->dvd_name; + id = i->u.ctn_dvd->dvd_type; + i->u.ctn_dvd = ctf_list_next (i->u.ctn_dvd); + return id; + } + + end_iter: + ctf_next_destroy (i); + *it = NULL; + return ctf_set_errno (fp, ECTF_NEXT_END); +} + /* Follow a given type through the graph for TYPEDEF, VOLATILE, CONST, and RESTRICT nodes until we reach a "base" type node. This is useful when we want to follow a type ID to a node that has members or a size. To guard @@ -258,7 +606,8 @@ if (tp->ctt_type == type || tp->ctt_type == otype || tp->ctt_type == prev) { - ctf_dprintf ("type %ld cycle detected\n", otype); + ctf_err_warn (ofp, 0, ECTF_CORRUPT, _("type %lx cycle detected"), + otype); return (ctf_set_errno (ofp, ECTF_CORRUPT)); } prev = type; @@ -310,13 +659,13 @@ ctf_id_t id; if (fp->ctf_flags & LCTF_RDWR) - id = (ctf_id_t) ctf_dynhash_lookup (np->ctn_writable, name); + id = (ctf_id_t) (uintptr_t) ctf_dynhash_lookup (np->ctn_writable, name); else id = ctf_hash_lookup_type (np->ctn_readonly, fp, name); return id; } -/* Lookup the given type ID and return its name as a new dynamcally-allocated +/* Lookup the given type ID and return its name as a new dynamically-allocated string. */ char * @@ -379,6 +728,15 @@ case CTF_K_INTEGER: case CTF_K_FLOAT: case CTF_K_TYPEDEF: + /* Integers, floats, and typedefs must always be named types. */ + + if (name[0] == '\0') + { + ctf_set_errno (fp, ECTF_CORRUPT); + ctf_decl_fini (&cd); + return NULL; + } + ctf_decl_sprintf (&cd, "%s", name); break; case CTF_K_POINTER: @@ -388,7 +746,51 @@ ctf_decl_sprintf (&cd, "[%u]", cdp->cd_n); break; case CTF_K_FUNCTION: - ctf_decl_sprintf (&cd, "()"); + { + size_t i; + ctf_funcinfo_t fi; + ctf_id_t *argv = NULL; + + if (ctf_func_type_info (rfp, cdp->cd_type, &fi) < 0) + goto err; /* errno is set for us. */ + + if ((argv = calloc (fi.ctc_argc, sizeof (ctf_id_t *))) == NULL) + { + ctf_set_errno (rfp, errno); + goto err; + } + + if (ctf_func_type_args (rfp, cdp->cd_type, + fi.ctc_argc, argv) < 0) + goto err; /* errno is set for us. */ + + ctf_decl_sprintf (&cd, "(*) ("); + for (i = 0; i < fi.ctc_argc; i++) + { + char *arg = ctf_type_aname (rfp, argv[i]); + + if (arg == NULL) + goto err; /* errno is set for us. */ + ctf_decl_sprintf (&cd, "%s", arg); + free (arg); + + if ((i < fi.ctc_argc - 1) + || (fi.ctc_flags & CTF_FUNC_VARARG)) + ctf_decl_sprintf (&cd, ", "); + } + + if (fi.ctc_flags & CTF_FUNC_VARARG) + ctf_decl_sprintf (&cd, "..."); + ctf_decl_sprintf (&cd, ")"); + + free (argv); + break; + + err: + free (argv); + ctf_decl_fini (&cd); + return NULL; + } break; case CTF_K_STRUCT: case CTF_K_FORWARD: @@ -463,19 +865,30 @@ return (rv >= 0 && (size_t) rv < len ? buf : NULL); } -/* Lookup the given type ID and return its raw, unadorned, undecorated name as a - new dynamcally-allocated string. */ +/* Lookup the given type ID and return its raw, unadorned, undecorated name. + The name will live as long as its ctf_file_t does. */ -char * -ctf_type_aname_raw (ctf_file_t *fp, ctf_id_t type) +const char * +ctf_type_name_raw (ctf_file_t *fp, ctf_id_t type) { const ctf_type_t *tp; if ((tp = ctf_lookup_by_id (&fp, type)) == NULL) return NULL; /* errno is set for us. */ - if (ctf_strraw (fp, tp->ctt_name) != NULL) - return strdup (ctf_strraw (fp, tp->ctt_name)); + return ctf_strraw (fp, tp->ctt_name); +} + +/* Lookup the given type ID and return its raw, unadorned, undecorated name as a + new dynamically-allocated string. */ + +char * +ctf_type_aname_raw (ctf_file_t *fp, ctf_id_t type) +{ + const char *name = ctf_type_name_raw (fp, type); + + if (name != NULL) + return strdup (name); return NULL; } @@ -657,6 +1070,26 @@ return kind; } +/* Return the kind of this type, except, for forwards, return the kind of thing + this is a forward to. */ +int +ctf_type_kind_forwarded (ctf_file_t *fp, ctf_id_t type) +{ + int kind; + const ctf_type_t *tp; + + if ((kind = ctf_type_kind (fp, type)) < 0) + return -1; /* errno is set for us. */ + + if (kind != CTF_K_FORWARD) + return kind; + + if ((tp = ctf_lookup_by_id (&fp, type)) == NULL) + return -1; /* errno is set for us. */ + + return tp->ctt_type; +} + /* If the type is one that directly references another type (such as POINTER), then return the ID of the type to which it refers. */ @@ -680,10 +1113,19 @@ /* Slices store their type in an unusual place. */ case CTF_K_SLICE: { + ctf_dtdef_t *dtd; const ctf_slice_t *sp; - ssize_t increment; - (void) ctf_get_ctt_size (fp, tp, NULL, &increment); - sp = (const ctf_slice_t *) ((uintptr_t) tp + increment); + + if ((dtd = ctf_dynamic_type (ofp, type)) == NULL) + { + ssize_t increment; + + (void) ctf_get_ctt_size (fp, tp, NULL, &increment); + sp = (const ctf_slice_t *) ((uintptr_t) tp + increment); + } + else + sp = &dtd->dtd_u.dtu_slice; + return sp->cts_type; } default: @@ -749,9 +1191,12 @@ { const ctf_slice_t *slice; ctf_encoding_t underlying_en; + ctf_id_t underlying; + slice = &dtd->dtd_u.dtu_slice; + underlying = ctf_type_resolve (fp, slice->cts_type); + data = ctf_type_encoding (fp, underlying, &underlying_en); - data = ctf_type_encoding (fp, slice->cts_type, &underlying_en); ep->cte_format = underlying_en.cte_format; ep->cte_offset = slice->cts_offset; ep->cte_bits = slice->cts_bits; @@ -783,9 +1228,11 @@ { const ctf_slice_t *slice; ctf_encoding_t underlying_en; + ctf_id_t underlying; slice = (ctf_slice_t *) ((uintptr_t) tp + increment); - data = ctf_type_encoding (fp, slice->cts_type, &underlying_en); + underlying = ctf_type_resolve (fp, slice->cts_type); + data = ctf_type_encoding (fp, underlying, &underlying_en); ep->cte_format = underlying_en.cte_format; ep->cte_offset = slice->cts_offset; @@ -909,6 +1356,30 @@ } } +/* Return the number of members in a STRUCT or UNION, or the number of + enumerators in an ENUM. */ + +int +ctf_member_count (ctf_file_t *fp, ctf_id_t type) +{ + ctf_file_t *ofp = fp; + const ctf_type_t *tp; + uint32_t kind; + + if ((type = ctf_type_resolve (fp, type)) == CTF_ERR) + return -1; /* errno is set for us. */ + + if ((tp = ctf_lookup_by_id (&fp, type)) == NULL) + return -1; /* errno is set for us. */ + + kind = LCTF_INFO_KIND (fp, tp->ctt_info); + + if (kind != CTF_K_STRUCT && kind != CTF_K_UNION && kind != CTF_K_ENUM) + return (ctf_set_errno (ofp, ECTF_NOTSUE)); + + return LCTF_INFO_VLEN (fp, tp->ctt_info); +} + /* Return the type and offset for a given member of a STRUCT or UNION. */ int @@ -1163,7 +1634,7 @@ if ((dtd = ctf_dynamic_type (fp, type)) == NULL) args = (uint32_t *) ((uintptr_t) tp + increment); else - args = (uint32_t *) dtd->dtd_u.dtu_argv; + args = dtd->dtd_u.dtu_argv; if (fip->ctc_argc != 0 && args[fip->ctc_argc - 1] == 0) { @@ -1174,7 +1645,7 @@ return 0; } -/* Given a type ID relating to a function type,, return the arguments for the +/* Given a type ID relating to a function type, return the arguments for the function. */ int @@ -1200,7 +1671,7 @@ if ((dtd = ctf_dynamic_type (fp, type)) == NULL) args = (uint32_t *) ((uintptr_t) tp + increment); else - args = (uint32_t *) dtd->dtd_u.dtu_argv; + args = dtd->dtd_u.dtu_argv; for (argc = MIN (argc, f.ctc_argc); argc != 0; argc--) *argv++ = *args++; diff -Nru gdb-9.1/libctf/ctf-util.c gdb-10.2/libctf/ctf-util.c --- gdb-9.1/libctf/ctf-util.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libctf/ctf-util.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Miscellaneous utilities. - Copyright (C) 2019 Free Software Foundation, Inc. + Copyright (C) 2019-2020 Free Software Foundation, Inc. This file is part of libctf. @@ -88,6 +88,26 @@ return (lp->l_next == NULL && lp->l_prev == NULL); } +/* Splice one entire list onto the end of another one. The existing list is + emptied. */ + +void +ctf_list_splice (ctf_list_t *lp, ctf_list_t *append) +{ + if (ctf_list_empty_p (append)) + return; + + if (lp->l_prev != NULL) + lp->l_prev->l_next = append->l_next; + else + lp->l_next = append->l_next; + + append->l_next->l_prev = lp->l_prev; + lp->l_prev = append->l_prev; + append->l_next = NULL; + append->l_prev = NULL; +} + /* Convert a 32-bit ELF symbol into Elf64 and return a pointer to it. */ Elf64_Sym * @@ -173,3 +193,49 @@ fp->ctf_errno = err; return CTF_ERR; } + +/* Create a ctf_next_t. */ + +ctf_next_t * +ctf_next_create (void) +{ + return calloc (1, sizeof (struct ctf_next)); +} + +/* Destroy a ctf_next_t, for early exit from iterators. */ + +void +ctf_next_destroy (ctf_next_t *i) +{ + if (i == NULL) + return; + + if (i->ctn_iter_fun == (void (*) (void)) ctf_dynhash_next_sorted) + free (i->u.ctn_sorted_hkv); + free (i); +} + +/* Copy a ctf_next_t. */ + +ctf_next_t * +ctf_next_copy (ctf_next_t *i) +{ + ctf_next_t *i2; + + if ((i2 = ctf_next_create()) == NULL) + return NULL; + memcpy (i2, i, sizeof (struct ctf_next)); + + if (i2->ctn_iter_fun == (void (*) (void)) ctf_dynhash_next_sorted) + { + size_t els = ctf_dynhash_elements ((ctf_dynhash_t *) i->cu.ctn_h); + if ((i2->u.ctn_sorted_hkv = calloc (els, sizeof (ctf_next_hkv_t))) == NULL) + { + free (i2); + return NULL; + } + memcpy (i2->u.ctn_sorted_hkv, i->u.ctn_sorted_hkv, + els * sizeof (ctf_next_hkv_t)); + } + return i2; +} diff -Nru gdb-9.1/libctf/elf.h gdb-10.2/libctf/elf.h --- gdb-9.1/libctf/elf.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libctf/elf.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* This file defines standard ELF types, structures, and macros. - Copyright (C) 1995-2019 Free Software Foundation, Inc. + Copyright (C) 1995-2020 Free Software Foundation, Inc. This file is part of libctf. diff -Nru gdb-9.1/libctf/.gitignore gdb-10.2/libctf/.gitignore --- gdb-9.1/libctf/.gitignore 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/libctf/.gitignore 2020-09-13 02:33:41.000000000 +0000 @@ -0,0 +1 @@ +ctf-error.h diff -Nru gdb-9.1/libctf/libctf.ver gdb-10.2/libctf/libctf.ver --- gdb-9.1/libctf/libctf.ver 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libctf/libctf.ver 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2019 Free Software Foundation, Inc. +/* Copyright (C) 2019-2020 Free Software Foundation, Inc. This file is part of libctf. @@ -24,6 +24,7 @@ ctf_simple_open; ctf_create; ctf_close; + ctf_ref; ctf_file_close; ctf_cuname; @@ -57,11 +58,13 @@ ctf_type_resolve; ctf_type_lname; ctf_type_name; + ctf_type_name_raw; ctf_type_aname; ctf_type_aname_raw; ctf_type_size; ctf_type_align; ctf_type_kind; + ctf_type_kind_forwarded; ctf_type_reference; ctf_type_pointer; ctf_type_encoding; @@ -70,7 +73,9 @@ ctf_type_compat; ctf_member_info; + ctf_member_next; ctf_array_info; + ctf_member_count; ctf_enum_name; ctf_enum_value; @@ -83,10 +88,17 @@ ctf_member_iter; ctf_enum_iter; + ctf_enum_next; ctf_type_iter; + ctf_type_next; ctf_type_iter_all; ctf_label_iter; ctf_variable_iter; + ctf_variable_next; + + ctf_next_create; + ctf_next_destroy; + ctf_next_copy; ctf_add_array; ctf_add_const; @@ -128,10 +140,13 @@ ctf_arc_write; ctf_arc_write_fd; ctf_arc_open; + ctf_arc_bufopen; ctf_arc_close; ctf_arc_open_by_name; ctf_arc_open_by_name_sections; + ctf_archive_count; ctf_archive_iter; + ctf_archive_next; ctf_archive_raw_iter; ctf_get_arc; @@ -139,12 +154,12 @@ ctf_setdebug; ctf_getdebug; - - /* Not yet part of the stable API. */ + ctf_errwarning_next; ctf_link_add_ctf; ctf_link_add_cu_mapping; ctf_link_set_memb_name_changer; + ctf_link_set_variable_filter; ctf_link; ctf_link_add_strtab; ctf_link_shuffle_syms; diff -Nru gdb-9.1/libctf/Makefile.am gdb-10.2/libctf/Makefile.am --- gdb-9.1/libctf/Makefile.am 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libctf/Makefile.am 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ ## Process this file with automake to produce Makefile.in. # -# Copyright (C) 2019 Free Software Foundation, Inc. +# Copyright (C) 2019-2020 Free Software Foundation, Inc. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -28,7 +28,7 @@ ZLIBINC = @zlibinc@ INCDIR = $(srcdir)/../include -AM_CPPFLAGS = -D_GNU_SOURCE -I$(srcdir) -I$(srcdir)/../include -I$(srcdir)/../bfd -I../bfd +AM_CPPFLAGS = -D_GNU_SOURCE -I$(srcdir) -I$(srcdir)/../include -I$(srcdir)/../bfd -I../bfd @INCINTL@ AM_CFLAGS = -std=gnu99 @ac_libctf_warn_cflags@ @warn@ @c_warn@ @WARN_PEDANTIC@ @WERROR@ $(ZLIBINC) if INSTALL_LIBBFD @@ -41,14 +41,22 @@ libctf_nobfd_la_LIBADD = @SHARED_LIBADD@ $(ZLIB) libctf_nobfd_la_LDFLAGS = -version-info 0:0:0 @SHARED_LDFLAGS@ @VERSION_FLAGS@ +libctf_nobfd_la_CPPFLAGS = $(AM_CPPFLAGS) -DNOBFD=1 libctf_nobfd_la_SOURCES = ctf-archive.c ctf-dump.c ctf-create.c ctf-decl.c ctf-error.c \ - ctf-hash.c ctf-labels.c ctf-link.c ctf-lookup.c ctf-open.c \ - ctf-string.c ctf-subr.c ctf-types.c ctf-util.c + ctf-hash.c ctf-labels.c ctf-dedup.c ctf-link.c ctf-lookup.c \ + ctf-open.c ctf-sha1.c ctf-string.c ctf-subr.c ctf-types.c \ + ctf-util.c if NEED_CTF_QSORT_R libctf_nobfd_la_SOURCES += ctf-qsort_r.c endif libctf_la_LIBADD = @BFD_LIBADD@ $(libctf_nobfd_la_LIBADD) +libctf_la_CPPFLAGS = $(AM_CPPFLAGS) -DNOBFD=0 libctf_la_DEPENDENCIES = @BFD_DEPENDENCIES@ libctf_la_LDFLAGS = $(libctf_nobfd_la_LDFLAGS) libctf_la_SOURCES = $(libctf_nobfd_la_SOURCES) ctf-open-bfd.c + +BUILT_SOURCES = ctf-error.h + +ctf-error.h: $(srcdir)/mkerrors.sed $(srcdir)/../include/ctf-api.h + sed -nf $(srcdir)/mkerrors.sed < $(srcdir)/../include/ctf-api.h > $@ diff -Nru gdb-9.1/libctf/Makefile.in gdb-10.2/libctf/Makefile.in --- gdb-9.1/libctf/Makefile.in 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libctf/Makefile.in 2021-04-25 04:06:26.000000000 +0000 @@ -15,7 +15,7 @@ @SET_MAKE@ # -# Copyright (C) 2019 Free Software Foundation, Inc. +# Copyright (C) 2019-2020 Free Software Foundation, Inc. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -113,6 +113,8 @@ am__aclocal_m4_deps = $(top_srcdir)/../bfd/acinclude.m4 \ $(top_srcdir)/../config/acx.m4 \ $(top_srcdir)/../config/depstand.m4 \ + $(top_srcdir)/../config/enable.m4 \ + $(top_srcdir)/../config/gettext-sister.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/override.m4 \ $(top_srcdir)/../config/warnings.m4 \ @@ -164,13 +166,18 @@ libctf_nobfd_la_DEPENDENCIES = $(am__DEPENDENCIES_1) am__libctf_nobfd_la_SOURCES_DIST = ctf-archive.c ctf-dump.c \ ctf-create.c ctf-decl.c ctf-error.c ctf-hash.c ctf-labels.c \ - ctf-link.c ctf-lookup.c ctf-open.c ctf-string.c ctf-subr.c \ - ctf-types.c ctf-util.c ctf-qsort_r.c -@NEED_CTF_QSORT_R_TRUE@am__objects_1 = ctf-qsort_r.lo -am_libctf_nobfd_la_OBJECTS = ctf-archive.lo ctf-dump.lo ctf-create.lo \ - ctf-decl.lo ctf-error.lo ctf-hash.lo ctf-labels.lo ctf-link.lo \ - ctf-lookup.lo ctf-open.lo ctf-string.lo ctf-subr.lo \ - ctf-types.lo ctf-util.lo $(am__objects_1) + ctf-dedup.c ctf-link.c ctf-lookup.c ctf-open.c ctf-sha1.c \ + ctf-string.c ctf-subr.c ctf-types.c ctf-util.c ctf-qsort_r.c +@NEED_CTF_QSORT_R_TRUE@am__objects_1 = libctf_nobfd_la-ctf-qsort_r.lo +am_libctf_nobfd_la_OBJECTS = libctf_nobfd_la-ctf-archive.lo \ + libctf_nobfd_la-ctf-dump.lo libctf_nobfd_la-ctf-create.lo \ + libctf_nobfd_la-ctf-decl.lo libctf_nobfd_la-ctf-error.lo \ + libctf_nobfd_la-ctf-hash.lo libctf_nobfd_la-ctf-labels.lo \ + libctf_nobfd_la-ctf-dedup.lo libctf_nobfd_la-ctf-link.lo \ + libctf_nobfd_la-ctf-lookup.lo libctf_nobfd_la-ctf-open.lo \ + libctf_nobfd_la-ctf-sha1.lo libctf_nobfd_la-ctf-string.lo \ + libctf_nobfd_la-ctf-subr.lo libctf_nobfd_la-ctf-types.lo \ + libctf_nobfd_la-ctf-util.lo $(am__objects_1) libctf_nobfd_la_OBJECTS = $(am_libctf_nobfd_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) @@ -184,14 +191,19 @@ @INSTALL_LIBBFD_TRUE@am_libctf_nobfd_la_rpath = -rpath $(libdir) am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) am__libctf_la_SOURCES_DIST = ctf-archive.c ctf-dump.c ctf-create.c \ - ctf-decl.c ctf-error.c ctf-hash.c ctf-labels.c ctf-link.c \ - ctf-lookup.c ctf-open.c ctf-string.c ctf-subr.c ctf-types.c \ - ctf-util.c ctf-qsort_r.c ctf-open-bfd.c -am__objects_2 = ctf-archive.lo ctf-dump.lo ctf-create.lo ctf-decl.lo \ - ctf-error.lo ctf-hash.lo ctf-labels.lo ctf-link.lo \ - ctf-lookup.lo ctf-open.lo ctf-string.lo ctf-subr.lo \ - ctf-types.lo ctf-util.lo $(am__objects_1) -am_libctf_la_OBJECTS = $(am__objects_2) ctf-open-bfd.lo + ctf-decl.c ctf-error.c ctf-hash.c ctf-labels.c ctf-dedup.c \ + ctf-link.c ctf-lookup.c ctf-open.c ctf-sha1.c ctf-string.c \ + ctf-subr.c ctf-types.c ctf-util.c ctf-qsort_r.c ctf-open-bfd.c +@NEED_CTF_QSORT_R_TRUE@am__objects_2 = libctf_la-ctf-qsort_r.lo +am__objects_3 = libctf_la-ctf-archive.lo libctf_la-ctf-dump.lo \ + libctf_la-ctf-create.lo libctf_la-ctf-decl.lo \ + libctf_la-ctf-error.lo libctf_la-ctf-hash.lo \ + libctf_la-ctf-labels.lo libctf_la-ctf-dedup.lo \ + libctf_la-ctf-link.lo libctf_la-ctf-lookup.lo \ + libctf_la-ctf-open.lo libctf_la-ctf-sha1.lo \ + libctf_la-ctf-string.lo libctf_la-ctf-subr.lo \ + libctf_la-ctf-types.lo libctf_la-ctf-util.lo $(am__objects_2) +am_libctf_la_OBJECTS = $(am__objects_3) libctf_la-ctf-open-bfd.lo libctf_la_OBJECTS = $(am_libctf_la_OBJECTS) libctf_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ @@ -297,12 +309,15 @@ AWK = @AWK@ BFD_DEPENDENCIES = @BFD_DEPENDENCIES@ BFD_LIBADD = @BFD_LIBADD@ +CATALOGS = @CATALOGS@ +CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ +DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DSYMUTIL = @DSYMUTIL@ @@ -313,14 +328,20 @@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ +GENCAT = @GENCAT@ +GMSGFMT = @GMSGFMT@ GREP = @GREP@ +INCINTL = @INCINTL@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INSTOBJEXT = @INSTOBJEXT@ LD = @LD@ LDFLAGS = @LDFLAGS@ +LIBINTL = @LIBINTL@ +LIBINTL_DEP = @LIBINTL_DEP@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ @@ -344,6 +365,7 @@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ +POSUB = @POSUB@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ @@ -351,10 +373,12 @@ SHARED_LIBADD = @SHARED_LIBADD@ SHELL = @SHELL@ STRIP = @STRIP@ +USE_NLS = @USE_NLS@ VERSION = @VERSION@ VERSION_FLAGS = @VERSION_FLAGS@ WARN_PEDANTIC = @WARN_PEDANTIC@ WERROR = @WERROR@ +XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ @@ -423,7 +447,7 @@ ZLIB = @zlibdir@ -lz ZLIBINC = @zlibinc@ INCDIR = $(srcdir)/../include -AM_CPPFLAGS = -D_GNU_SOURCE -I$(srcdir) -I$(srcdir)/../include -I$(srcdir)/../bfd -I../bfd +AM_CPPFLAGS = -D_GNU_SOURCE -I$(srcdir) -I$(srcdir)/../include -I$(srcdir)/../bfd -I../bfd @INCINTL@ AM_CFLAGS = -std=gnu99 @ac_libctf_warn_cflags@ @warn@ @c_warn@ @WARN_PEDANTIC@ @WERROR@ $(ZLIBINC) @INSTALL_LIBBFD_TRUE@lib_LTLIBRARIES = libctf.la libctf-nobfd.la @INSTALL_LIBBFD_FALSE@include_HEADERS = @@ -431,15 +455,18 @@ @INSTALL_LIBBFD_FALSE@noinst_LTLIBRARIES = libctf.la libctf-nobfd.la libctf_nobfd_la_LIBADD = @SHARED_LIBADD@ $(ZLIB) libctf_nobfd_la_LDFLAGS = -version-info 0:0:0 @SHARED_LDFLAGS@ @VERSION_FLAGS@ +libctf_nobfd_la_CPPFLAGS = $(AM_CPPFLAGS) -DNOBFD=1 libctf_nobfd_la_SOURCES = ctf-archive.c ctf-dump.c ctf-create.c \ - ctf-decl.c ctf-error.c ctf-hash.c ctf-labels.c ctf-link.c \ - ctf-lookup.c ctf-open.c ctf-string.c ctf-subr.c ctf-types.c \ - ctf-util.c $(am__append_1) + ctf-decl.c ctf-error.c ctf-hash.c ctf-labels.c ctf-dedup.c \ + ctf-link.c ctf-lookup.c ctf-open.c ctf-sha1.c ctf-string.c \ + ctf-subr.c ctf-types.c ctf-util.c $(am__append_1) libctf_la_LIBADD = @BFD_LIBADD@ $(libctf_nobfd_la_LIBADD) +libctf_la_CPPFLAGS = $(AM_CPPFLAGS) -DNOBFD=0 libctf_la_DEPENDENCIES = @BFD_DEPENDENCIES@ libctf_la_LDFLAGS = $(libctf_nobfd_la_LDFLAGS) libctf_la_SOURCES = $(libctf_nobfd_la_SOURCES) ctf-open-bfd.c -all: config.h +BUILT_SOURCES = ctf-error.h +all: $(BUILT_SOURCES) config.h $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: @@ -551,22 +578,41 @@ distclean-compile: -rm -f *.tab.c -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ctf-archive.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ctf-create.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ctf-decl.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ctf-dump.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ctf-error.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ctf-hash.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ctf-labels.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ctf-link.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ctf-lookup.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ctf-open-bfd.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ctf-open.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ctf-qsort_r.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ctf-string.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ctf-subr.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ctf-types.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ctf-util.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libctf_la-ctf-archive.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libctf_la-ctf-create.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libctf_la-ctf-decl.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libctf_la-ctf-dedup.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libctf_la-ctf-dump.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libctf_la-ctf-error.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libctf_la-ctf-hash.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libctf_la-ctf-labels.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libctf_la-ctf-link.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libctf_la-ctf-lookup.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libctf_la-ctf-open-bfd.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libctf_la-ctf-open.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libctf_la-ctf-qsort_r.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libctf_la-ctf-sha1.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libctf_la-ctf-string.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libctf_la-ctf-subr.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libctf_la-ctf-types.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libctf_la-ctf-util.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libctf_nobfd_la-ctf-archive.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libctf_nobfd_la-ctf-create.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libctf_nobfd_la-ctf-decl.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libctf_nobfd_la-ctf-dedup.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libctf_nobfd_la-ctf-dump.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libctf_nobfd_la-ctf-error.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libctf_nobfd_la-ctf-hash.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libctf_nobfd_la-ctf-labels.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libctf_nobfd_la-ctf-link.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libctf_nobfd_la-ctf-lookup.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libctf_nobfd_la-ctf-open.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libctf_nobfd_la-ctf-qsort_r.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libctf_nobfd_la-ctf-sha1.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libctf_nobfd_la-ctf-string.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libctf_nobfd_la-ctf-subr.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libctf_nobfd_la-ctf-types.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libctf_nobfd_la-ctf-util.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @@ -589,6 +635,251 @@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< +libctf_nobfd_la-ctf-archive.lo: ctf-archive.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libctf_nobfd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libctf_nobfd_la-ctf-archive.lo -MD -MP -MF $(DEPDIR)/libctf_nobfd_la-ctf-archive.Tpo -c -o libctf_nobfd_la-ctf-archive.lo `test -f 'ctf-archive.c' || echo '$(srcdir)/'`ctf-archive.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libctf_nobfd_la-ctf-archive.Tpo $(DEPDIR)/libctf_nobfd_la-ctf-archive.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ctf-archive.c' object='libctf_nobfd_la-ctf-archive.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libctf_nobfd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libctf_nobfd_la-ctf-archive.lo `test -f 'ctf-archive.c' || echo '$(srcdir)/'`ctf-archive.c + +libctf_nobfd_la-ctf-dump.lo: ctf-dump.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libctf_nobfd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libctf_nobfd_la-ctf-dump.lo -MD -MP -MF $(DEPDIR)/libctf_nobfd_la-ctf-dump.Tpo -c -o libctf_nobfd_la-ctf-dump.lo `test -f 'ctf-dump.c' || echo '$(srcdir)/'`ctf-dump.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libctf_nobfd_la-ctf-dump.Tpo $(DEPDIR)/libctf_nobfd_la-ctf-dump.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ctf-dump.c' object='libctf_nobfd_la-ctf-dump.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libctf_nobfd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libctf_nobfd_la-ctf-dump.lo `test -f 'ctf-dump.c' || echo '$(srcdir)/'`ctf-dump.c + +libctf_nobfd_la-ctf-create.lo: ctf-create.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libctf_nobfd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libctf_nobfd_la-ctf-create.lo -MD -MP -MF $(DEPDIR)/libctf_nobfd_la-ctf-create.Tpo -c -o libctf_nobfd_la-ctf-create.lo `test -f 'ctf-create.c' || echo '$(srcdir)/'`ctf-create.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libctf_nobfd_la-ctf-create.Tpo $(DEPDIR)/libctf_nobfd_la-ctf-create.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ctf-create.c' object='libctf_nobfd_la-ctf-create.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libctf_nobfd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libctf_nobfd_la-ctf-create.lo `test -f 'ctf-create.c' || echo '$(srcdir)/'`ctf-create.c + +libctf_nobfd_la-ctf-decl.lo: ctf-decl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libctf_nobfd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libctf_nobfd_la-ctf-decl.lo -MD -MP -MF $(DEPDIR)/libctf_nobfd_la-ctf-decl.Tpo -c -o libctf_nobfd_la-ctf-decl.lo `test -f 'ctf-decl.c' || echo '$(srcdir)/'`ctf-decl.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libctf_nobfd_la-ctf-decl.Tpo $(DEPDIR)/libctf_nobfd_la-ctf-decl.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ctf-decl.c' object='libctf_nobfd_la-ctf-decl.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libctf_nobfd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libctf_nobfd_la-ctf-decl.lo `test -f 'ctf-decl.c' || echo '$(srcdir)/'`ctf-decl.c + +libctf_nobfd_la-ctf-error.lo: ctf-error.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libctf_nobfd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libctf_nobfd_la-ctf-error.lo -MD -MP -MF $(DEPDIR)/libctf_nobfd_la-ctf-error.Tpo -c -o libctf_nobfd_la-ctf-error.lo `test -f 'ctf-error.c' || echo '$(srcdir)/'`ctf-error.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libctf_nobfd_la-ctf-error.Tpo $(DEPDIR)/libctf_nobfd_la-ctf-error.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ctf-error.c' object='libctf_nobfd_la-ctf-error.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libctf_nobfd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libctf_nobfd_la-ctf-error.lo `test -f 'ctf-error.c' || echo '$(srcdir)/'`ctf-error.c + +libctf_nobfd_la-ctf-hash.lo: ctf-hash.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libctf_nobfd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libctf_nobfd_la-ctf-hash.lo -MD -MP -MF $(DEPDIR)/libctf_nobfd_la-ctf-hash.Tpo -c -o libctf_nobfd_la-ctf-hash.lo `test -f 'ctf-hash.c' || echo '$(srcdir)/'`ctf-hash.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libctf_nobfd_la-ctf-hash.Tpo $(DEPDIR)/libctf_nobfd_la-ctf-hash.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ctf-hash.c' object='libctf_nobfd_la-ctf-hash.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libctf_nobfd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libctf_nobfd_la-ctf-hash.lo `test -f 'ctf-hash.c' || echo '$(srcdir)/'`ctf-hash.c + +libctf_nobfd_la-ctf-labels.lo: ctf-labels.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libctf_nobfd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libctf_nobfd_la-ctf-labels.lo -MD -MP -MF $(DEPDIR)/libctf_nobfd_la-ctf-labels.Tpo -c -o libctf_nobfd_la-ctf-labels.lo `test -f 'ctf-labels.c' || echo '$(srcdir)/'`ctf-labels.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libctf_nobfd_la-ctf-labels.Tpo $(DEPDIR)/libctf_nobfd_la-ctf-labels.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ctf-labels.c' object='libctf_nobfd_la-ctf-labels.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libctf_nobfd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libctf_nobfd_la-ctf-labels.lo `test -f 'ctf-labels.c' || echo '$(srcdir)/'`ctf-labels.c + +libctf_nobfd_la-ctf-dedup.lo: ctf-dedup.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libctf_nobfd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libctf_nobfd_la-ctf-dedup.lo -MD -MP -MF $(DEPDIR)/libctf_nobfd_la-ctf-dedup.Tpo -c -o libctf_nobfd_la-ctf-dedup.lo `test -f 'ctf-dedup.c' || echo '$(srcdir)/'`ctf-dedup.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libctf_nobfd_la-ctf-dedup.Tpo $(DEPDIR)/libctf_nobfd_la-ctf-dedup.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ctf-dedup.c' object='libctf_nobfd_la-ctf-dedup.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libctf_nobfd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libctf_nobfd_la-ctf-dedup.lo `test -f 'ctf-dedup.c' || echo '$(srcdir)/'`ctf-dedup.c + +libctf_nobfd_la-ctf-link.lo: ctf-link.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libctf_nobfd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libctf_nobfd_la-ctf-link.lo -MD -MP -MF $(DEPDIR)/libctf_nobfd_la-ctf-link.Tpo -c -o libctf_nobfd_la-ctf-link.lo `test -f 'ctf-link.c' || echo '$(srcdir)/'`ctf-link.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libctf_nobfd_la-ctf-link.Tpo $(DEPDIR)/libctf_nobfd_la-ctf-link.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ctf-link.c' object='libctf_nobfd_la-ctf-link.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libctf_nobfd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libctf_nobfd_la-ctf-link.lo `test -f 'ctf-link.c' || echo '$(srcdir)/'`ctf-link.c + +libctf_nobfd_la-ctf-lookup.lo: ctf-lookup.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libctf_nobfd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libctf_nobfd_la-ctf-lookup.lo -MD -MP -MF $(DEPDIR)/libctf_nobfd_la-ctf-lookup.Tpo -c -o libctf_nobfd_la-ctf-lookup.lo `test -f 'ctf-lookup.c' || echo '$(srcdir)/'`ctf-lookup.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libctf_nobfd_la-ctf-lookup.Tpo $(DEPDIR)/libctf_nobfd_la-ctf-lookup.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ctf-lookup.c' object='libctf_nobfd_la-ctf-lookup.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libctf_nobfd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libctf_nobfd_la-ctf-lookup.lo `test -f 'ctf-lookup.c' || echo '$(srcdir)/'`ctf-lookup.c + +libctf_nobfd_la-ctf-open.lo: ctf-open.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libctf_nobfd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libctf_nobfd_la-ctf-open.lo -MD -MP -MF $(DEPDIR)/libctf_nobfd_la-ctf-open.Tpo -c -o libctf_nobfd_la-ctf-open.lo `test -f 'ctf-open.c' || echo '$(srcdir)/'`ctf-open.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libctf_nobfd_la-ctf-open.Tpo $(DEPDIR)/libctf_nobfd_la-ctf-open.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ctf-open.c' object='libctf_nobfd_la-ctf-open.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libctf_nobfd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libctf_nobfd_la-ctf-open.lo `test -f 'ctf-open.c' || echo '$(srcdir)/'`ctf-open.c + +libctf_nobfd_la-ctf-sha1.lo: ctf-sha1.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libctf_nobfd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libctf_nobfd_la-ctf-sha1.lo -MD -MP -MF $(DEPDIR)/libctf_nobfd_la-ctf-sha1.Tpo -c -o libctf_nobfd_la-ctf-sha1.lo `test -f 'ctf-sha1.c' || echo '$(srcdir)/'`ctf-sha1.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libctf_nobfd_la-ctf-sha1.Tpo $(DEPDIR)/libctf_nobfd_la-ctf-sha1.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ctf-sha1.c' object='libctf_nobfd_la-ctf-sha1.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libctf_nobfd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libctf_nobfd_la-ctf-sha1.lo `test -f 'ctf-sha1.c' || echo '$(srcdir)/'`ctf-sha1.c + +libctf_nobfd_la-ctf-string.lo: ctf-string.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libctf_nobfd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libctf_nobfd_la-ctf-string.lo -MD -MP -MF $(DEPDIR)/libctf_nobfd_la-ctf-string.Tpo -c -o libctf_nobfd_la-ctf-string.lo `test -f 'ctf-string.c' || echo '$(srcdir)/'`ctf-string.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libctf_nobfd_la-ctf-string.Tpo $(DEPDIR)/libctf_nobfd_la-ctf-string.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ctf-string.c' object='libctf_nobfd_la-ctf-string.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libctf_nobfd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libctf_nobfd_la-ctf-string.lo `test -f 'ctf-string.c' || echo '$(srcdir)/'`ctf-string.c + +libctf_nobfd_la-ctf-subr.lo: ctf-subr.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libctf_nobfd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libctf_nobfd_la-ctf-subr.lo -MD -MP -MF $(DEPDIR)/libctf_nobfd_la-ctf-subr.Tpo -c -o libctf_nobfd_la-ctf-subr.lo `test -f 'ctf-subr.c' || echo '$(srcdir)/'`ctf-subr.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libctf_nobfd_la-ctf-subr.Tpo $(DEPDIR)/libctf_nobfd_la-ctf-subr.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ctf-subr.c' object='libctf_nobfd_la-ctf-subr.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libctf_nobfd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libctf_nobfd_la-ctf-subr.lo `test -f 'ctf-subr.c' || echo '$(srcdir)/'`ctf-subr.c + +libctf_nobfd_la-ctf-types.lo: ctf-types.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libctf_nobfd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libctf_nobfd_la-ctf-types.lo -MD -MP -MF $(DEPDIR)/libctf_nobfd_la-ctf-types.Tpo -c -o libctf_nobfd_la-ctf-types.lo `test -f 'ctf-types.c' || echo '$(srcdir)/'`ctf-types.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libctf_nobfd_la-ctf-types.Tpo $(DEPDIR)/libctf_nobfd_la-ctf-types.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ctf-types.c' object='libctf_nobfd_la-ctf-types.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libctf_nobfd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libctf_nobfd_la-ctf-types.lo `test -f 'ctf-types.c' || echo '$(srcdir)/'`ctf-types.c + +libctf_nobfd_la-ctf-util.lo: ctf-util.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libctf_nobfd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libctf_nobfd_la-ctf-util.lo -MD -MP -MF $(DEPDIR)/libctf_nobfd_la-ctf-util.Tpo -c -o libctf_nobfd_la-ctf-util.lo `test -f 'ctf-util.c' || echo '$(srcdir)/'`ctf-util.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libctf_nobfd_la-ctf-util.Tpo $(DEPDIR)/libctf_nobfd_la-ctf-util.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ctf-util.c' object='libctf_nobfd_la-ctf-util.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libctf_nobfd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libctf_nobfd_la-ctf-util.lo `test -f 'ctf-util.c' || echo '$(srcdir)/'`ctf-util.c + +libctf_nobfd_la-ctf-qsort_r.lo: ctf-qsort_r.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libctf_nobfd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libctf_nobfd_la-ctf-qsort_r.lo -MD -MP -MF $(DEPDIR)/libctf_nobfd_la-ctf-qsort_r.Tpo -c -o libctf_nobfd_la-ctf-qsort_r.lo `test -f 'ctf-qsort_r.c' || echo '$(srcdir)/'`ctf-qsort_r.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libctf_nobfd_la-ctf-qsort_r.Tpo $(DEPDIR)/libctf_nobfd_la-ctf-qsort_r.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ctf-qsort_r.c' object='libctf_nobfd_la-ctf-qsort_r.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libctf_nobfd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libctf_nobfd_la-ctf-qsort_r.lo `test -f 'ctf-qsort_r.c' || echo '$(srcdir)/'`ctf-qsort_r.c + +libctf_la-ctf-archive.lo: ctf-archive.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libctf_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libctf_la-ctf-archive.lo -MD -MP -MF $(DEPDIR)/libctf_la-ctf-archive.Tpo -c -o libctf_la-ctf-archive.lo `test -f 'ctf-archive.c' || echo '$(srcdir)/'`ctf-archive.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libctf_la-ctf-archive.Tpo $(DEPDIR)/libctf_la-ctf-archive.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ctf-archive.c' object='libctf_la-ctf-archive.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libctf_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libctf_la-ctf-archive.lo `test -f 'ctf-archive.c' || echo '$(srcdir)/'`ctf-archive.c + +libctf_la-ctf-dump.lo: ctf-dump.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libctf_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libctf_la-ctf-dump.lo -MD -MP -MF $(DEPDIR)/libctf_la-ctf-dump.Tpo -c -o libctf_la-ctf-dump.lo `test -f 'ctf-dump.c' || echo '$(srcdir)/'`ctf-dump.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libctf_la-ctf-dump.Tpo $(DEPDIR)/libctf_la-ctf-dump.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ctf-dump.c' object='libctf_la-ctf-dump.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libctf_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libctf_la-ctf-dump.lo `test -f 'ctf-dump.c' || echo '$(srcdir)/'`ctf-dump.c + +libctf_la-ctf-create.lo: ctf-create.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libctf_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libctf_la-ctf-create.lo -MD -MP -MF $(DEPDIR)/libctf_la-ctf-create.Tpo -c -o libctf_la-ctf-create.lo `test -f 'ctf-create.c' || echo '$(srcdir)/'`ctf-create.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libctf_la-ctf-create.Tpo $(DEPDIR)/libctf_la-ctf-create.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ctf-create.c' object='libctf_la-ctf-create.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libctf_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libctf_la-ctf-create.lo `test -f 'ctf-create.c' || echo '$(srcdir)/'`ctf-create.c + +libctf_la-ctf-decl.lo: ctf-decl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libctf_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libctf_la-ctf-decl.lo -MD -MP -MF $(DEPDIR)/libctf_la-ctf-decl.Tpo -c -o libctf_la-ctf-decl.lo `test -f 'ctf-decl.c' || echo '$(srcdir)/'`ctf-decl.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libctf_la-ctf-decl.Tpo $(DEPDIR)/libctf_la-ctf-decl.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ctf-decl.c' object='libctf_la-ctf-decl.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libctf_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libctf_la-ctf-decl.lo `test -f 'ctf-decl.c' || echo '$(srcdir)/'`ctf-decl.c + +libctf_la-ctf-error.lo: ctf-error.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libctf_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libctf_la-ctf-error.lo -MD -MP -MF $(DEPDIR)/libctf_la-ctf-error.Tpo -c -o libctf_la-ctf-error.lo `test -f 'ctf-error.c' || echo '$(srcdir)/'`ctf-error.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libctf_la-ctf-error.Tpo $(DEPDIR)/libctf_la-ctf-error.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ctf-error.c' object='libctf_la-ctf-error.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libctf_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libctf_la-ctf-error.lo `test -f 'ctf-error.c' || echo '$(srcdir)/'`ctf-error.c + +libctf_la-ctf-hash.lo: ctf-hash.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libctf_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libctf_la-ctf-hash.lo -MD -MP -MF $(DEPDIR)/libctf_la-ctf-hash.Tpo -c -o libctf_la-ctf-hash.lo `test -f 'ctf-hash.c' || echo '$(srcdir)/'`ctf-hash.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libctf_la-ctf-hash.Tpo $(DEPDIR)/libctf_la-ctf-hash.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ctf-hash.c' object='libctf_la-ctf-hash.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libctf_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libctf_la-ctf-hash.lo `test -f 'ctf-hash.c' || echo '$(srcdir)/'`ctf-hash.c + +libctf_la-ctf-labels.lo: ctf-labels.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libctf_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libctf_la-ctf-labels.lo -MD -MP -MF $(DEPDIR)/libctf_la-ctf-labels.Tpo -c -o libctf_la-ctf-labels.lo `test -f 'ctf-labels.c' || echo '$(srcdir)/'`ctf-labels.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libctf_la-ctf-labels.Tpo $(DEPDIR)/libctf_la-ctf-labels.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ctf-labels.c' object='libctf_la-ctf-labels.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libctf_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libctf_la-ctf-labels.lo `test -f 'ctf-labels.c' || echo '$(srcdir)/'`ctf-labels.c + +libctf_la-ctf-dedup.lo: ctf-dedup.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libctf_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libctf_la-ctf-dedup.lo -MD -MP -MF $(DEPDIR)/libctf_la-ctf-dedup.Tpo -c -o libctf_la-ctf-dedup.lo `test -f 'ctf-dedup.c' || echo '$(srcdir)/'`ctf-dedup.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libctf_la-ctf-dedup.Tpo $(DEPDIR)/libctf_la-ctf-dedup.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ctf-dedup.c' object='libctf_la-ctf-dedup.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libctf_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libctf_la-ctf-dedup.lo `test -f 'ctf-dedup.c' || echo '$(srcdir)/'`ctf-dedup.c + +libctf_la-ctf-link.lo: ctf-link.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libctf_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libctf_la-ctf-link.lo -MD -MP -MF $(DEPDIR)/libctf_la-ctf-link.Tpo -c -o libctf_la-ctf-link.lo `test -f 'ctf-link.c' || echo '$(srcdir)/'`ctf-link.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libctf_la-ctf-link.Tpo $(DEPDIR)/libctf_la-ctf-link.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ctf-link.c' object='libctf_la-ctf-link.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libctf_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libctf_la-ctf-link.lo `test -f 'ctf-link.c' || echo '$(srcdir)/'`ctf-link.c + +libctf_la-ctf-lookup.lo: ctf-lookup.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libctf_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libctf_la-ctf-lookup.lo -MD -MP -MF $(DEPDIR)/libctf_la-ctf-lookup.Tpo -c -o libctf_la-ctf-lookup.lo `test -f 'ctf-lookup.c' || echo '$(srcdir)/'`ctf-lookup.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libctf_la-ctf-lookup.Tpo $(DEPDIR)/libctf_la-ctf-lookup.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ctf-lookup.c' object='libctf_la-ctf-lookup.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libctf_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libctf_la-ctf-lookup.lo `test -f 'ctf-lookup.c' || echo '$(srcdir)/'`ctf-lookup.c + +libctf_la-ctf-open.lo: ctf-open.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libctf_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libctf_la-ctf-open.lo -MD -MP -MF $(DEPDIR)/libctf_la-ctf-open.Tpo -c -o libctf_la-ctf-open.lo `test -f 'ctf-open.c' || echo '$(srcdir)/'`ctf-open.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libctf_la-ctf-open.Tpo $(DEPDIR)/libctf_la-ctf-open.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ctf-open.c' object='libctf_la-ctf-open.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libctf_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libctf_la-ctf-open.lo `test -f 'ctf-open.c' || echo '$(srcdir)/'`ctf-open.c + +libctf_la-ctf-sha1.lo: ctf-sha1.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libctf_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libctf_la-ctf-sha1.lo -MD -MP -MF $(DEPDIR)/libctf_la-ctf-sha1.Tpo -c -o libctf_la-ctf-sha1.lo `test -f 'ctf-sha1.c' || echo '$(srcdir)/'`ctf-sha1.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libctf_la-ctf-sha1.Tpo $(DEPDIR)/libctf_la-ctf-sha1.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ctf-sha1.c' object='libctf_la-ctf-sha1.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libctf_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libctf_la-ctf-sha1.lo `test -f 'ctf-sha1.c' || echo '$(srcdir)/'`ctf-sha1.c + +libctf_la-ctf-string.lo: ctf-string.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libctf_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libctf_la-ctf-string.lo -MD -MP -MF $(DEPDIR)/libctf_la-ctf-string.Tpo -c -o libctf_la-ctf-string.lo `test -f 'ctf-string.c' || echo '$(srcdir)/'`ctf-string.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libctf_la-ctf-string.Tpo $(DEPDIR)/libctf_la-ctf-string.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ctf-string.c' object='libctf_la-ctf-string.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libctf_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libctf_la-ctf-string.lo `test -f 'ctf-string.c' || echo '$(srcdir)/'`ctf-string.c + +libctf_la-ctf-subr.lo: ctf-subr.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libctf_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libctf_la-ctf-subr.lo -MD -MP -MF $(DEPDIR)/libctf_la-ctf-subr.Tpo -c -o libctf_la-ctf-subr.lo `test -f 'ctf-subr.c' || echo '$(srcdir)/'`ctf-subr.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libctf_la-ctf-subr.Tpo $(DEPDIR)/libctf_la-ctf-subr.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ctf-subr.c' object='libctf_la-ctf-subr.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libctf_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libctf_la-ctf-subr.lo `test -f 'ctf-subr.c' || echo '$(srcdir)/'`ctf-subr.c + +libctf_la-ctf-types.lo: ctf-types.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libctf_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libctf_la-ctf-types.lo -MD -MP -MF $(DEPDIR)/libctf_la-ctf-types.Tpo -c -o libctf_la-ctf-types.lo `test -f 'ctf-types.c' || echo '$(srcdir)/'`ctf-types.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libctf_la-ctf-types.Tpo $(DEPDIR)/libctf_la-ctf-types.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ctf-types.c' object='libctf_la-ctf-types.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libctf_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libctf_la-ctf-types.lo `test -f 'ctf-types.c' || echo '$(srcdir)/'`ctf-types.c + +libctf_la-ctf-util.lo: ctf-util.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libctf_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libctf_la-ctf-util.lo -MD -MP -MF $(DEPDIR)/libctf_la-ctf-util.Tpo -c -o libctf_la-ctf-util.lo `test -f 'ctf-util.c' || echo '$(srcdir)/'`ctf-util.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libctf_la-ctf-util.Tpo $(DEPDIR)/libctf_la-ctf-util.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ctf-util.c' object='libctf_la-ctf-util.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libctf_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libctf_la-ctf-util.lo `test -f 'ctf-util.c' || echo '$(srcdir)/'`ctf-util.c + +libctf_la-ctf-qsort_r.lo: ctf-qsort_r.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libctf_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libctf_la-ctf-qsort_r.lo -MD -MP -MF $(DEPDIR)/libctf_la-ctf-qsort_r.Tpo -c -o libctf_la-ctf-qsort_r.lo `test -f 'ctf-qsort_r.c' || echo '$(srcdir)/'`ctf-qsort_r.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libctf_la-ctf-qsort_r.Tpo $(DEPDIR)/libctf_la-ctf-qsort_r.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ctf-qsort_r.c' object='libctf_la-ctf-qsort_r.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libctf_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libctf_la-ctf-qsort_r.lo `test -f 'ctf-qsort_r.c' || echo '$(srcdir)/'`ctf-qsort_r.c + +libctf_la-ctf-open-bfd.lo: ctf-open-bfd.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libctf_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libctf_la-ctf-open-bfd.lo -MD -MP -MF $(DEPDIR)/libctf_la-ctf-open-bfd.Tpo -c -o libctf_la-ctf-open-bfd.lo `test -f 'ctf-open-bfd.c' || echo '$(srcdir)/'`ctf-open-bfd.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libctf_la-ctf-open-bfd.Tpo $(DEPDIR)/libctf_la-ctf-open-bfd.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ctf-open-bfd.c' object='libctf_la-ctf-open-bfd.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libctf_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libctf_la-ctf-open-bfd.lo `test -f 'ctf-open-bfd.c' || echo '$(srcdir)/'`ctf-open-bfd.c + mostlyclean-libtool: -rm -f *.lo @@ -842,13 +1133,15 @@ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am -check: check-am +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) config.h installdirs: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done -install: install-am +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am @@ -878,6 +1171,7 @@ maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) clean: clean-am clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ @@ -952,7 +1246,7 @@ uninstall-am: uninstall-includeHEADERS uninstall-libLTLIBRARIES -.MAKE: all install-am install-strip +.MAKE: all check install install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--refresh check check-am clean \ clean-cscope clean-generic clean-libLTLIBRARIES clean-libtool \ @@ -976,6 +1270,9 @@ .PRECIOUS: Makefile +ctf-error.h: $(srcdir)/mkerrors.sed $(srcdir)/../include/ctf-api.h + sed -nf $(srcdir)/mkerrors.sed < $(srcdir)/../include/ctf-api.h > $@ + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff -Nru gdb-9.1/libctf/mkerrors.sed gdb-10.2/libctf/mkerrors.sed --- gdb-9.1/libctf/mkerrors.sed 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/libctf/mkerrors.sed 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,28 @@ +# +# Copyright (C) 2020 Free Software Foundation, Inc. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; see the file COPYING. If not see +# <http://www.gnu.org/licenses/>. +# + +# Only process lines in the error-define block +/= ECTF_BASE/,/ECTF_NERR/ { + # Do not process non-errors (braces, ECTF_NERR, etc). + /^ *ECTF_/!n; + # Strip out the base initializer. + s, = ECTF_BASE,,; + # Transform errors into _STR(...). + s@^ *\(ECTF_[^[:blank:],]*\),\{0,1\}[[:blank:]]*/\* \(.*\). \*/$@_CTF_STR (\1, "\2")@; + p; + } diff -Nru gdb-9.1/libctf/swap.h gdb-10.2/libctf/swap.h --- gdb-9.1/libctf/swap.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libctf/swap.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Interface to byteswapping functions. - Copyright (C) 2006-2019 Free Software Foundation, Inc. + Copyright (C) 2006-2020 Free Software Foundation, Inc. This file is part of libctf. @@ -25,15 +25,19 @@ #ifdef HAVE_BYTESWAP_H #include <byteswap.h> -#else +#endif /* defined(HAVE_BYTESWAP_H) */ /* Provide our own versions of the byteswap functions. */ + +#if !HAVE_DECL_BSWAP_16 static inline uint16_t bswap_16 (uint16_t v) { return ((v >> 8) & 0xff) | ((v & 0xff) << 8); } +#endif /* !HAVE_DECL_BSWAP16 */ +#if !HAVE_DECL_BSWAP_32 static inline uint32_t bswap_32 (uint32_t v) { @@ -42,13 +46,9 @@ | ((v & 0x0000ff00) << 8) | ((v & 0x000000ff) << 24)); } +#endif /* !HAVE_DECL_BSWAP32 */ -inline uint64_t -bswap_identity_64 (uint64_t v) -{ - return v; -} - +#if !HAVE_DECL_BSWAP_64 static inline uint64_t bswap_64 (uint64_t v) { @@ -61,6 +61,6 @@ | ((v & 0x000000000000ff00ULL) << 40) | ((v & 0x00000000000000ffULL) << 56)); } -#endif /* !defined(HAVE_BYTESWAP_H) */ +#endif /* !HAVE_DECL_BSWAP64 */ #endif /* !defined(_CTF_SWAP_H) */ diff -Nru gdb-9.1/libdecnumber/aclocal.m4 gdb-10.2/libdecnumber/aclocal.m4 --- gdb-9.1/libdecnumber/aclocal.m4 2018-06-26 21:37:28.000000000 +0000 +++ gdb-10.2/libdecnumber/aclocal.m4 2020-09-13 02:33:41.000000000 +0000 @@ -13,6 +13,5 @@ m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) m4_include([../config/dfp.m4]) -m4_include([../config/override.m4]) m4_include([../config/stdint.m4]) m4_include([../config/warnings.m4]) diff -Nru gdb-9.1/libdecnumber/ChangeLog gdb-10.2/libdecnumber/ChangeLog --- gdb-9.1/libdecnumber/ChangeLog 2018-11-07 19:00:24.000000000 +0000 +++ gdb-10.2/libdecnumber/ChangeLog 2020-09-13 02:33:41.000000000 +0000 @@ -1,3 +1,7 @@ +2020-07-29 Simon Marchi <simon.marchi@efficios.com> + + * aclocal.m4, configure: Re-generate. + 2018-10-31 Joseph Myers <joseph@codesourcery.com> * configure: Regenerate. diff -Nru gdb-9.1/libdecnumber/configure gdb-10.2/libdecnumber/configure --- gdb-9.1/libdecnumber/configure 2018-11-07 19:00:24.000000000 +0000 +++ gdb-10.2/libdecnumber/configure 2020-09-13 02:33:41.000000000 +0000 @@ -2255,9 +2255,6 @@ - - - ac_aux_dir= for ac_dir in .. "$srcdir"/..; do if test -f "$ac_dir/install-sh"; then diff -Nru gdb-9.1/libiberty/aclocal.m4 gdb-10.2/libiberty/aclocal.m4 --- gdb-9.1/libiberty/aclocal.m4 2013-10-28 03:21:22.000000000 +0000 +++ gdb-10.2/libiberty/aclocal.m4 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,6 @@ sinclude(../config/acx.m4) +sinclude(../config/cet.m4) +sinclude(../config/enable.m4) sinclude(../config/no-executables.m4) sinclude(../config/override.m4) sinclude(../config/picflag.m4) diff -Nru gdb-9.1/libiberty/argv.c gdb-10.2/libiberty/argv.c --- gdb-9.1/libiberty/argv.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/argv.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Create and destroy argument vectors (argv's) - Copyright (C) 1992-2019 Free Software Foundation, Inc. + Copyright (C) 1992-2020 Free Software Foundation, Inc. Written by Fred Fish @ Cygnus Support This file is part of the libiberty library. @@ -327,6 +327,14 @@ arg++; } + /* Write out a pair of quotes for an empty argument. */ + if (arg == *argv) + if (EOF == fputs ("\"\"", f)) + { + status = 1; + goto done; + } + if (EOF == fputc ('\n', f)) { status = 1; diff -Nru gdb-9.1/libiberty/asprintf.c gdb-10.2/libiberty/asprintf.c --- gdb-9.1/libiberty/asprintf.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/asprintf.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Like sprintf but provides a pointer to malloc'd storage, which must be freed by the caller. - Copyright (C) 1997-2019 Free Software Foundation, Inc. + Copyright (C) 1997-2020 Free Software Foundation, Inc. Contributed by Cygnus Solutions. This file is part of the libiberty library. diff -Nru gdb-9.1/libiberty/bsearch.c gdb-10.2/libiberty/bsearch.c --- gdb-9.1/libiberty/bsearch.c 2013-10-28 03:21:22.000000000 +0000 +++ gdb-10.2/libiberty/bsearch.c 2020-09-13 02:33:41.000000000 +0000 @@ -69,13 +69,13 @@ * look at item 3. */ void * -bsearch (register const void *key, const void *base0, - size_t nmemb, register size_t size, - register int (*compar)(const void *, const void *)) +bsearch (const void *key, const void *base0, + size_t nmemb, size_t size, + int (*compar)(const void *, const void *)) { - register const char *base = (const char *) base0; - register int lim, cmp; - register const void *p; + const char *base = (const char *) base0; + int lim, cmp; + const void *p; for (lim = nmemb; lim != 0; lim >>= 1) { p = base + (lim >> 1) * size; diff -Nru gdb-9.1/libiberty/bsearch_r.c gdb-10.2/libiberty/bsearch_r.c --- gdb-9.1/libiberty/bsearch_r.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/libiberty/bsearch_r.c 2020-09-13 02:33:41.000000000 +0000 @@ -0,0 +1,93 @@ +/* + * Copyright (c) 1990 Regents of the University of California. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. [rescinded 22 July 1999] + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +/* + +@deftypefn Supplemental void* bsearch_r (const void *@var{key}, @ + const void *@var{base}, size_t @var{nmemb}, size_t @var{size}, @ + int (*@var{compar})(const void *, const void *, void *), void *@var{arg}) + +Performs a search over an array of @var{nmemb} elements pointed to by +@var{base} for a member that matches the object pointed to by @var{key}. +The size of each member is specified by @var{size}. The array contents +should be sorted in ascending order according to the @var{compar} +comparison function. This routine should take three arguments: the first +two point to the @var{key} and to an array member, and the last is passed +down unchanged from @code{bsearch_r}'s last argument. It should return an +integer less than, equal to, or greater than zero if the @var{key} object +is respectively less than, matching, or greater than the array member. + +@end deftypefn + +*/ + +#include "config.h" +#include "ansidecl.h" +#include <sys/types.h> /* size_t */ +#include <stdio.h> + +/* + * Perform a binary search. + * + * The code below is a bit sneaky. After a comparison fails, we + * divide the work in half by moving either left or right. If lim + * is odd, moving left simply involves halving lim: e.g., when lim + * is 5 we look at item 2, so we change lim to 2 so that we will + * look at items 0 & 1. If lim is even, the same applies. If lim + * is odd, moving right again involes halving lim, this time moving + * the base up one item past p: e.g., when lim is 5 we change base + * to item 3 and make lim 2 so that we will look at items 3 and 4. + * If lim is even, however, we have to shrink it by one before + * halving: e.g., when lim is 4, we still looked at item 2, so we + * have to make lim 3, then halve, obtaining 1, so that we will only + * look at item 3. + */ +void * +bsearch_r (const void *key, const void *base0, + size_t nmemb, size_t size, + int (*compar)(const void *, const void *, void *), + void *arg) +{ + const char *base = (const char *) base0; + int lim, cmp; + const void *p; + + for (lim = nmemb; lim != 0; lim >>= 1) { + p = base + (lim >> 1) * size; + cmp = (*compar)(key, p, arg); + if (cmp == 0) + return (void *)p; + if (cmp > 0) { /* key > p: move right */ + base = (const char *)p + size; + lim--; + } /* else move left */ + } + return (NULL); +} diff -Nru gdb-9.1/libiberty/ChangeLog gdb-10.2/libiberty/ChangeLog --- gdb-9.1/libiberty/ChangeLog 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/ChangeLog 2021-04-25 04:06:26.000000000 +0000 @@ -1,3 +1,308 @@ +2021-01-16 Eduard-Mihai Burtescu <eddyb@lyken.rs> + + * rust-demangle.c (struct rust_demangler): Add + skipping_printing and bound_lifetime_depth fields. + (eat): Add (v0-only). + (parse_integer_62): Add (v0-only). + (parse_opt_integer_62): Add (v0-only). + (parse_disambiguator): Add (v0-only). + (struct rust_mangled_ident): Add punycode{,_len} fields. + (parse_ident): Support v0 identifiers. + (print_str): Respect skipping_printing. + (print_uint64): Add (v0-only). + (print_uint64_hex): Add (v0-only). + (print_ident): Respect skipping_printing, + Support v0 identifiers. + (print_lifetime_from_index): Add (v0-only). + (demangle_binder): Add (v0-only). + (demangle_path): Add (v0-only). + (demangle_generic_arg): Add (v0-only). + (demangle_type): Add (v0-only). + (demangle_path_maybe_open_generics): Add (v0-only). + (demangle_dyn_trait): Add (v0-only). + (demangle_const): Add (v0-only). + (demangle_const_uint): Add (v0-only). + (basic_type): Add (v0-only). + (rust_demangle_callback): Support v0 symbols. + * testsuite/rust-demangle-expected: Add v0 testcases. + +2020-09-11 Felix Willgerodt <felix.willgerodt@intel.com> + + Sync with GCC + 2020-09-08 Felix Willgerodt <felix.willgerodt@intel.com> + + * floatformat.c (floatformat_bfloat16_big): New. + (floatformat_bfloat16_little): New. + +2020-09-08 Alan Modra <amodra@gmail.com> + + * configure: Regenerate. + + Sync from gcc + 2020-09-08 Alan Modra <amodra@gmail.com> + * d-demangle.c: Include limits.h. + (ULONG_MAX, UINT_MAX): Provide fall-back definition. + (dlang_number): Simplify and correct overflow test. Only + write *ret on returning non-NULL. Make "ret" an unsigned long*. + Only succeed for result of [0,UINT_MAX]. + (dlang_decode_backref): Simplify and correct overflow test. + Only write *ret on returning non-NULL. Only succeed for + result [1,MAX_LONG]. + (dlang_backref): Remove now unnecessary range check. + (dlang_symbol_name_p): Likewise. + (string_need): Take a size_t n arg, and use size_t tem. + (string_append): Use size_t n. + (string_appendn, string_prependn): Take a size_t n arg. + (TEMPLATE_LENGTH_UNKNOWN): Define as -1UL. + (dlang_lname, dlang_parse_template): Take an unsigned long len + arg. + (dlang_symbol_backref, dlang_identifier, dlang_parse_integer), + (dlang_parse_integer, dlang_parse_string), + (dlang_parse_arrayliteral, dlang_parse_assocarray), + (dlang_parse_structlit, dlang_parse_tuple), + (dlang_template_symbol_param, dlang_template_args): Use + unsigned long variables. + * testsuite/d-demangle-expected: Add new tests. + + 2020-08-04 Iain Buclaw <ibuclaw@gdcproject.org> + * d-demangle.c (dlang_function_args): Handle 'in' and 'in ref' + parameter storage classes. + (dlang_type): Remove identifier type. + * testsuite/d-demangle-expected: Update tests. + + 2020-08-03 Richard Biener <rguenther@suse.de> + PR lto/96385 + * simple-object-elf.c + (simple_object_elf_copy_lto_debug_sections): Localize global + UNDEFs and reuse the prevailing name. + + 2020-07-10 Ian Lance Taylor <iant@golang.org> + PR demangler/96143 + * cp-demangle.c (d_lambda): Don't add substitution candidate. + * testsuite/demangle-expected: Update a few existing test cases + accordingly, and add a new test case. + + 2020-07-04 Jason Merrill <jason@redhat.com> + * cp-demangle.c (cplus_demangle_operators): Add di, dx, dX. + (d_expression_1): Handle di and dX. + (is_designated_init, d_maybe_print_designated_init): New. + (d_print_comp_inner): Use d_maybe_print_designated_init. + * testsuite/demangle-expected: Add designator tests. + + 2020-06-25 Nick Clifton <nickc@redhat.com> + * bsearch.c (bsearch): Remove use of register keyword. + * bsearch_r.c (bsearch_r): Likewise. + +2020-06-23 Nick Alcock <nick.alcock@oracle.com> + + * bsearch_r.c: New file. + * Makefile.in (CFILES): Add bsearch_r.c. + (REQUIRED_OFILES): Add bsearch_r.o. + * functions.texi: Regenerate. + +2020-05-29 H.J. Lu <hjl.tools@gmail.com> + + PR bootstrap/95413 + * configure: Regenerated. + +2020-05-15 Iain Buclaw <ibuclaw@gdcproject.org> + + * d-demangle.c (dlang_attributes): Add @live attribute. + * testsuite/d-demangle-expected: Add new tests. + +2020-05-14 Rainer Schuetze <r.sagitario@gmx.de> + Iain Buclaw <ibuclaw@gdcproject.org> + + * d-demangle.c (enum dlang_symbol_kinds): Remove enum. + (struct dlang_info): New struct + (dlang_decode_backref): New function. + (dlang_backref): New function. + (dlang_symbol_backref): New function. + (dlang_type_backref): New function. + (dlang_symbol_name_p): New function. + (dlang_function_type_noreturn): New function. + (dlang_function_type): Add 'info' parameter. Decode function type + with dlang_function_type_noreturn. + (dlang_function_args): Add 'info' parameter. + (dlang_type): Add 'info' parameter. Handle back referenced types. + (dlang_identifier): Replace 'kind' parameter with 'info'. Handle back + referenced symbols. Split off decoding of plain identifiers to... + (dlang_lname): ...here. + (dlang_parse_mangle): Replace 'kind' parameter with 'info'. Decode + function type and return with dlang_type. + (dlang_parse_qualified): Replace 'kind' parameter with 'info', add + 'suffix_modifier' parameter. Decode function type with + dlang_function_type_noreturn. + (dlang_parse_tuple): Add 'info' parameter. + (dlang_template_symbol_param): New function. + (dlang_template_args): Add 'info' parameter. Decode symbol parameter + with dlang_template_symbol_param. Handle back referenced values, and + externally mangled parameters. + (dlang_parse_template): Add 'info' parameter. + (dlang_demangle_init_info): New function. + (dlang_demangle): Initialize and pass 'info' parameter. + * testsuite/d-demangle-expected: Add new tests. + +2020-05-12 H.J. Lu <hongjiu.lu@intel.com> + + PR bootstrap/94998 + * configure: Regenerated. + +2020-04-28 H.J. Lu <hongjiu.lu@intel.com> + + PR bootstrap/94739 + * configure: Regenerated. + +2020-04-27 Jakub Jelinek <jakub@redhat.com> + + PR demangler/94797 + * cp-demangle.c (cplus_demangle_operators): Add ss <=> operator. + * testsuite/demangle-expected: Add operator<=> test. + +2020-04-25 H.J. Lu <hongjiu.lu@intel.com> + + PR bootstrap/94739 + * Makefile.in (COMPILE.c): Add @CET_HOST_FLAGS@. + (configure_deps): Add $(srcdir)/../config/cet.m4 and + $(srcdir)/../config/enable.m4. + * aclocal.m4: Include ../config/cet.m4 and ../config/enable.m4. + * configure.ac: Add GCC_CET_HOST_FLAGS(CET_HOST_FLAGS) and + AC_SUBST(CET_HOST_FLAGS). + * configure: Regenerated. + +2020-03-05 Egeyar Bagcioglu <egeyar.bagcioglu@oracle.com> + + * simple-object.c (handle_lto_debug_sections): Name + ".GCC.command.line" among debug sections to be copied over + from lto objects. + +2020-03-02 Nick Clifton <nickc@redhat.com> + + * testsuite/demangle-expected: Update expected demangling of + enable_if pattern. + +2020-03-02 H.J. Lu <hongjiu.lu@intel.com> + + PR lto/93966 + * simple-object.c (handle_lto_debug_sections): Also copy + .note.gnu.property section. + +2020-02-12 Sandra Loosemore <sandra@codesourcery.com> + + PR libstdc++/79193 + PR libstdc++/88999 + + * configure: Regenerated. + +2020-02-05 Andrew Burgess <andrew.burgess@embecosm.com> + + * hashtab.c (htab_remove_elt): Make a parameter const. + (htab_remove_elt_with_hash): Likewise. + +2020-01-23 Alexandre Oliva <oliva@adacore.com> + + * argv.c (writeargv): Output empty args as "". + +2020-01-01 Jakub Jelinek <jakub@redhat.com> + + Update copyright years. + +2019-12-06 Tim Ruehsen <tim.ruehsen@gmx.de> + + * make-relative-prefix.c (split_directories): + Return early on empty 'name' + +2019-11-16 Tim Ruehsen <tim.ruehsen@gmx.de> + + * cp-demangle.c (d_print_init): Remove const from 4th param. + (cplus_demangle_fill_name): Initialize d->d_counting. + (cplus_demangle_fill_extended_operator): Likewise. + (cplus_demangle_fill_ctor): Likewise. + (cplus_demangle_fill_dtor): Likewise. + (d_make_empty): Likewise. + (d_count_templates_scopes): Remobe const from 3rd param, + Return on dc->d_counting > 1, + Increment dc->d_counting. + * cp-demint.c (cplus_demangle_fill_component): Initialize d->d_counting. + (cplus_demangle_fill_builtin_type): Likewise. + (cplus_demangle_fill_operator): Likewise. + +2019-11-16 Eduard-Mihai Burtescu <eddyb@lyken.rs> + + * cplus-dem.c (cplus_demangle): Use rust_demangle directly. + (rust_demangle): Remove. + * rust-demangle.c (is_prefixed_hash): Rename to is_legacy_prefixed_hash. + (parse_lower_hex_nibble): Rename to decode_lower_hex_nibble. + (parse_legacy_escape): Rename to decode_legacy_escape. + (rust_is_mangled): Remove. + (struct rust_demangler): Add. + (peek): Add. + (next): Add. + (struct rust_mangled_ident): Add. + (parse_ident): Add. + (rust_demangle_sym): Remove. + (print_str): Add. + (PRINT): Add. + (print_ident): Add. + (rust_demangle_callback): Add. + (struct str_buf): Add. + (str_buf_reserve): Add. + (str_buf_append): Add. + (str_buf_demangle_callback): Add. + (rust_demangle): Add. + * rust-demangle.h: Remove. + +2019-11-15 Miguel Saldivar <saldivarcher@gmail.com> + + * testsuite/demangle-expected: Fix test. + +2019-11-04 Kamlesh Kumar <kamleshbhalui@gmail.com> + + * cp-demangle.c (d_expr_primary): Handle + nullptr demangling. + * testsuite/demangle-expected: Added test. + +2019-10-29 Paul Pluzhnikov <ppluzhnikov@google.com> + + * cp-demangle.c (d_number): Avoid signed int overflow. + +2019-10-28 Miguel Saldivar <saldivarcher@gmail.com> + + * cp-demangle.c (d_print_mod): Add a space before printing `complex` + and `imaginary`, as opposed to after. + * testsuite/demangle-expected: Adjust test. + +2019-10-03 Eduard-Mihai Burtescu <eddyb@lyken.rs> + + * rust-demangle.c (looks_like_rust): Remove. + (rust_is_mangled): Don't check escapes. + (is_prefixed_hash): Allow 0-9a-f permutations. + (rust_demangle_sym): Don't bail on unknown escapes. + * testsuite/rust-demangle-expected: Update 'main::$99$' test. + +2019-09-03 Eduard-Mihai Burtescu <eddyb@lyken.rs> + + * rust-demangle.c (unescape): Remove. + (parse_lower_hex_nibble): New function. + (parse_legacy_escape): New function. + (is_prefixed_hash): Use parse_lower_hex_nibble. + (looks_like_rust): Use parse_legacy_escape. + (rust_demangle_sym): Use parse_legacy_escape. + * testsuite/rust-demangle-expected: Add 'llv$u6d$' test. + +2019-08-27 Martin Liska <mliska@suse.cz> + + PR lto/91478 + * simple-object-elf.c (simple_object_elf_copy_lto_debug_sections): + First find a WEAK HIDDEN symbol in symbol table that will be + preserved. Later, use the symbol name for all removed symbols. + +2019-08-12 Martin Liska <mliska@suse.cz> + + * Makefile.in: Add filedescriptor.c. + * filedescriptor.c: New file. + * lrealpath.c (is_valid_fd): Remove. + 2019-08-08 Martin Liska <mliska@suse.cz> PR bootstrap/91352 diff -Nru gdb-9.1/libiberty/choose-temp.c gdb-10.2/libiberty/choose-temp.c --- gdb-9.1/libiberty/choose-temp.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/choose-temp.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Utility to pick a temporary filename prefix. - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of the libiberty library. Libiberty is free software; you can redistribute it and/or diff -Nru gdb-9.1/libiberty/clock.c gdb-10.2/libiberty/clock.c --- gdb-9.1/libiberty/clock.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/clock.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* ANSI-compatible clock function. - Copyright (C) 1994-2019 Free Software Foundation, Inc. + Copyright (C) 1994-2020 Free Software Foundation, Inc. This file is part of the libiberty library. This library is free software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/libiberty/concat.c gdb-10.2/libiberty/concat.c --- gdb-9.1/libiberty/concat.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/concat.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Concatenate variable number of strings. - Copyright (C) 1991-2019 Free Software Foundation, Inc. + Copyright (C) 1991-2020 Free Software Foundation, Inc. Written by Fred Fish @ Cygnus Support This file is part of the libiberty library. diff -Nru gdb-9.1/libiberty/configure gdb-10.2/libiberty/configure --- gdb-9.1/libiberty/configure 2018-12-24 02:59:29.000000000 +0000 +++ gdb-10.2/libiberty/configure 2021-04-25 04:06:26.000000000 +0000 @@ -626,6 +626,7 @@ target_header_dir CHECK LIBOBJS +CET_HOST_FLAGS NOASANFLAG PICFLAG INSTALL_DATA @@ -710,6 +711,7 @@ enable_multilib enable_install_libiberty enable_largefile +enable_cet ' ac_precious_vars='build_alias host_alias @@ -1337,6 +1339,7 @@ --enable-multilib build many library versions (default) --enable-install-libiberty Install headers and library for end users --disable-largefile omit support for large files + --enable-cet enable Intel CET in host libraries [default=auto] Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] @@ -1671,6 +1674,52 @@ } # ac_fn_c_check_header_compile +# ac_fn_c_try_link LINENO +# ----------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + test -x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_link + # ac_fn_c_check_header_preproc LINENO HEADER VAR # ---------------------------------------------- # Tests whether HEADER is present, setting the cache variable VAR accordingly. @@ -1937,52 +1986,6 @@ } # ac_fn_c_check_type -# ac_fn_c_try_link LINENO -# ----------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_link () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext conftest$ac_exeext - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && { - test "$cross_compiling" = yes || - test -x conftest$ac_exeext - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information - # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would - # interfere with the next link command; also delete a directory that is - # left behind by Apple's compiler. We do this before executing the actions. - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_link - # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly @@ -3310,11 +3313,11 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ - +#include <stdio.h> int main () { - +printf ("hello world\n"); ; return 0; } @@ -5264,6 +5267,195 @@ esac + # Check whether --enable-cet was given. +if test "${enable_cet+set}" = set; then : + enableval=$enable_cet; + case "$enableval" in + yes|no|auto) ;; + *) as_fn_error $? "Unknown argument to enable/disable cet" "$LINENO" 5 ;; + esac + +else + enable_cet=auto +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for CET support" >&5 +$as_echo_n "checking for CET support... " >&6; } + +case "$host" in + i[34567]86-*-linux* | x86_64-*-linux*) + may_have_cet=yes + cet_save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -fcf-protection" + case "$enable_cet" in + auto) + # Check if target supports multi-byte NOPs + # and if compiler and assembler support CET. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + +#if !defined(__SSE2__) +#error target does not support multi-byte NOPs +#else +asm ("setssbsy"); +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + enable_cet=yes +else + enable_cet=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ;; + yes) + # Check if compiler and assembler support CET. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +asm ("setssbsy"); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + support_cet=yes +else + support_cet=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if test $support_cet = "no"; then + if test x$enable_bootstrap != xno \ + && test -z "${with_build_subdir}" \ + && (test ! -f ../stage_current \ + || test `cat ../stage_current` != "stage1"); then + # Require CET support only for the final GCC build. + as_fn_error $? "compiler and assembler with CET support are required for --enable-cet" "$LINENO" 5 + else + # Don't enable CET without CET support for non-bootstrap + # build, in stage1 nor for build support. + enable_cet=no + fi + fi + ;; + esac + CFLAGS="$cet_save_CFLAGS" + ;; + *) + may_have_cet=no + enable_cet=no + ;; +esac + +cet_save_CFLAGS="$CFLAGS" +CFLAGS="$CFLAGS -fcf-protection=none" +cet_save_LDFLAGS="$LDFLAGS" +LDFLAGS="$LDFLAGS -Wl,-z,ibt,-z,shstk" +if test x$may_have_cet = xyes; then + # Check whether -fcf-protection=none -Wl,-z,ibt,-z,shstk work. + if test x$gcc_no_link = xyes; then + as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5 +fi +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + may_have_cet=yes +else + may_have_cet=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi + +if test x$may_have_cet = xyes; then + if test x$cross_compiling = xno; then + if test "$cross_compiling" = yes; then : + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run test program while cross compiling +See \`config.log' for more details" "$LINENO" 5; } +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +static void +foo (void) +{ +} + +static void +__attribute__ ((noinline, noclone)) +xxx (void (*f) (void)) +{ + f (); +} + +static void +__attribute__ ((noinline, noclone)) +bar (void) +{ + xxx (foo); +} + +int +main () +{ + bar (); + return 0; +} + +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + have_cet=no +else + have_cet=yes +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + if test x$enable_cet = xno -a x$have_cet = xyes; then + as_fn_error $? "Intel CET must be enabled on Intel CET enabled host" "$LINENO" 5 + fi + fi +else + # Enable CET in cross compiler if possible so that it will run on both + # CET and non-CET hosts. + have_cet=yes +fi +if test x$enable_cet = xyes; then + CET_HOST_FLAGS="-fcf-protection" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +CFLAGS="$cet_save_CFLAGS" +LDFLAGS="$cet_save_LDFLAGS" + + + echo "# Warning: this fragment is automatically generated" > temp-frag if [ -n "${frag}" ] && [ -f "${frag}" ]; then diff -Nru gdb-9.1/libiberty/configure.ac gdb-10.2/libiberty/configure.ac --- gdb-9.1/libiberty/configure.ac 2018-12-24 02:59:29.000000000 +0000 +++ gdb-10.2/libiberty/configure.ac 2021-04-25 04:06:26.000000000 +0000 @@ -243,6 +243,9 @@ esac AC_SUBST(NOASANFLAG) +GCC_CET_HOST_FLAGS(CET_HOST_FLAGS) +AC_SUBST(CET_HOST_FLAGS) + echo "# Warning: this fragment is automatically generated" > temp-frag if [[ -n "${frag}" ]] && [[ -f "${frag}" ]]; then diff -Nru gdb-9.1/libiberty/copying-lib.texi gdb-10.2/libiberty/copying-lib.texi --- gdb-9.1/libiberty/copying-lib.texi 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/copying-lib.texi 2021-04-25 04:06:26.000000000 +0000 @@ -5,7 +5,7 @@ @center Version 2.1, February 1999 @display -Copyright @copyright{} 1991-2019 Free Software Foundation, Inc. +Copyright @copyright{} 1991-2020 Free Software Foundation, Inc. 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA Everyone is permitted to copy and distribute verbatim copies diff -Nru gdb-9.1/libiberty/cp-demangle.c gdb-10.2/libiberty/cp-demangle.c --- gdb-9.1/libiberty/cp-demangle.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/cp-demangle.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Demangler for g++ V3 ABI. - Copyright (C) 2003-2019 Free Software Foundation, Inc. + Copyright (C) 2003-2020 Free Software Foundation, Inc. Written by Ian Lance Taylor <ian@wasabisystems.com>. This file is part of the libiberty library, which is part of GCC. @@ -517,7 +517,7 @@ static void d_print_init (struct d_print_info *, demangle_callbackref, void *, - const struct demangle_component *); + struct demangle_component *); static inline void d_print_error (struct d_print_info *); @@ -864,6 +864,7 @@ if (p == NULL || s == NULL || len <= 0) return 0; p->d_printing = 0; + p->d_counting = 0; p->type = DEMANGLE_COMPONENT_NAME; p->u.s_name.s = s; p->u.s_name.len = len; @@ -880,6 +881,7 @@ if (p == NULL || args < 0 || name == NULL) return 0; p->d_printing = 0; + p->d_counting = 0; p->type = DEMANGLE_COMPONENT_EXTENDED_OPERATOR; p->u.s_extended_operator.args = args; p->u.s_extended_operator.name = name; @@ -900,6 +902,7 @@ || (int) kind > gnu_v3_object_ctor_group) return 0; p->d_printing = 0; + p->d_counting = 0; p->type = DEMANGLE_COMPONENT_CTOR; p->u.s_ctor.kind = kind; p->u.s_ctor.name = name; @@ -920,6 +923,7 @@ || (int) kind > gnu_v3_object_dtor_group) return 0; p->d_printing = 0; + p->d_counting = 0; p->type = DEMANGLE_COMPONENT_DTOR; p->u.s_dtor.kind = kind; p->u.s_dtor.name = name; @@ -937,6 +941,7 @@ return NULL; p = &di->comps[di->next_comp]; p->d_printing = 0; + p->d_counting = 0; ++di->next_comp; return p; } @@ -1717,7 +1722,7 @@ } if (ret > ((INT_MAX - (peek - '0')) / 10)) return -1; - ret = ret * 10 + peek - '0'; + ret = ret * 10 + (peek - '0'); d_advance (di, 1); peek = d_peek_char (di); } @@ -1797,19 +1802,23 @@ { "ad", NL ("&"), 1 }, { "an", NL ("&"), 2 }, { "at", NL ("alignof "), 1 }, + { "aw", NL ("co_await "), 1 }, { "az", NL ("alignof "), 1 }, { "cc", NL ("const_cast"), 2 }, { "cl", NL ("()"), 2 }, { "cm", NL (","), 2 }, { "co", NL ("~"), 1 }, { "dV", NL ("/="), 2 }, + { "dX", NL ("[...]="), 3 }, /* [expr...expr] = expr */ { "da", NL ("delete[] "), 1 }, { "dc", NL ("dynamic_cast"), 2 }, { "de", NL ("*"), 1 }, + { "di", NL ("="), 2 }, /* .name = expr */ { "dl", NL ("delete "), 1 }, { "ds", NL (".*"), 2 }, { "dt", NL ("."), 2 }, { "dv", NL ("/"), 2 }, + { "dx", NL ("]="), 2 }, /* [expr] = expr */ { "eO", NL ("^="), 2 }, { "eo", NL ("^"), 2 }, { "eq", NL ("=="), 2 }, @@ -1854,6 +1863,7 @@ { "sP", NL ("sizeof..."), 1 }, { "sZ", NL ("sizeof..."), 1 }, { "sc", NL ("static_cast"), 2 }, + { "ss", NL ("<=>"), 2 }, { "st", NL ("sizeof "), 1 }, { "sz", NL ("sizeof "), 1 }, { "tr", NL ("throw"), 0 }, @@ -3284,6 +3294,12 @@ ::= sr <type> <unqualified-name> ::= sr <type> <unqualified-name> <template-args> ::= <expr-primary> + + <braced-expression> ::= <expression> + ::= di <field source-name> <braced-expression> # .name = expr + ::= dx <index expression> <braced-expression> # [expr] = expr + ::= dX <range begin expression> <range end expression> <braced-expression> + # [expr ... expr] = expr */ static inline struct demangle_component * @@ -3446,6 +3462,8 @@ else if (code[0] == 'f') /* fold-expression. */ left = d_operator_name (di); + else if (!strcmp (code, "di")) + left = d_unqualified_name (di); else left = d_expression_1 (di); if (!strcmp (code, "cl")) @@ -3473,7 +3491,8 @@ if (code == NULL) return NULL; - else if (!strcmp (code, "qu")) + else if (!strcmp (code, "qu") + || !strcmp (code, "dX")) { /* ?: expression. */ first = d_expression_1 (di); @@ -3577,6 +3596,17 @@ && type->u.s_builtin.type->print != D_PRINT_DEFAULT) di->expansion -= type->u.s_builtin.type->len; + if (type->type == DEMANGLE_COMPONENT_BUILTIN_TYPE + && strcmp (type->u.s_builtin.type->name, + cplus_demangle_builtin_types[33].name) == 0) + { + if (d_peek_char (di) == 'E') + { + d_advance (di, 1); + return type; + } + } + /* Rather than try to interpret the literal value, we just collect it as a string. Note that it's possible to have a floating point literal here. The ABI specifies that the @@ -3746,9 +3776,6 @@ ret->u.s_unary_num.num = num; } - if (! d_add_substitution (di, ret)) - return NULL; - return ret; } @@ -4068,11 +4095,13 @@ static void d_count_templates_scopes (struct d_print_info *dpi, - const struct demangle_component *dc) + struct demangle_component *dc) { - if (dc == NULL) + if (dc == NULL || dc->d_counting > 1 || dpi->recursion > MAX_RECURSION_COUNT) return; + ++ dc->d_counting; + switch (dc->type) { case DEMANGLE_COMPONENT_NAME: @@ -4202,7 +4231,7 @@ static void d_print_init (struct d_print_info *dpi, demangle_callbackref callback, - void *opaque, const struct demangle_component *dc) + void *opaque, struct demangle_component *dc) { dpi->len = 0; dpi->last_char = '\0'; @@ -4655,6 +4684,64 @@ return 1; } +/* True iff DC represents a C99-style designated initializer. */ + +static int +is_designated_init (struct demangle_component *dc) +{ + if (dc->type != DEMANGLE_COMPONENT_BINARY + && dc->type != DEMANGLE_COMPONENT_TRINARY) + return 0; + + struct demangle_component *op = d_left (dc); + const char *code = op->u.s_operator.op->code; + return (code[0] == 'd' + && (code[1] == 'i' || code[1] == 'x' || code[1] == 'X')); +} + +/* If DC represents a C99-style designated initializer, print it and return + true; otherwise, return false. */ + +static int +d_maybe_print_designated_init (struct d_print_info *dpi, int options, + struct demangle_component *dc) +{ + if (!is_designated_init (dc)) + return 0; + + const char *code = d_left (dc)->u.s_operator.op->code; + + struct demangle_component *operands = d_right (dc); + struct demangle_component *op1 = d_left (operands); + struct demangle_component *op2 = d_right (operands); + + if (code[1] == 'i') + d_append_char (dpi, '.'); + else + d_append_char (dpi, '['); + + d_print_comp (dpi, options, op1); + if (code[1] == 'X') + { + d_append_string (dpi, " ... "); + d_print_comp (dpi, options, d_left (op2)); + op2 = d_right (op2); + } + if (code[1] != 'i') + d_append_char (dpi, ']'); + if (is_designated_init (op2)) + { + /* Don't put '=' or '(' between chained designators. */ + d_print_comp (dpi, options, op2); + } + else + { + d_append_char (dpi, '='); + d_print_subexpr (dpi, options, op2); + } + return 1; +} + /* Subroutine to handle components. */ static void @@ -5471,6 +5558,9 @@ if (d_maybe_print_fold_expression (dpi, options, dc)) return; + if (d_maybe_print_designated_init (dpi, options, dc)) + return; + /* We wrap an expression which uses the greater-than operator in an extra layer of parens so that it does not get confused with the '>' which ends the template parameters. */ @@ -5528,6 +5618,8 @@ } if (d_maybe_print_fold_expression (dpi, options, dc)) return; + if (d_maybe_print_designated_init (dpi, options, dc)) + return; { struct demangle_component *op = d_left (dc); struct demangle_component *first = d_left (d_right (dc)); @@ -5977,10 +6069,10 @@ d_append_string (dpi, "&&"); return; case DEMANGLE_COMPONENT_COMPLEX: - d_append_string (dpi, "complex "); + d_append_string (dpi, " _Complex"); return; case DEMANGLE_COMPONENT_IMAGINARY: - d_append_string (dpi, "imaginary "); + d_append_string (dpi, " _Imaginary"); return; case DEMANGLE_COMPONENT_PTRMEM_TYPE: if (d_last_char (dpi) != '(') diff -Nru gdb-9.1/libiberty/cp-demangle.h gdb-10.2/libiberty/cp-demangle.h --- gdb-9.1/libiberty/cp-demangle.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/cp-demangle.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Internal demangler interface for g++ V3 ABI. - Copyright (C) 2003-2019 Free Software Foundation, Inc. + Copyright (C) 2003-2020 Free Software Foundation, Inc. Written by Ian Lance Taylor <ian@wasabisystems.com>. This file is part of the libiberty library, which is part of GCC. diff -Nru gdb-9.1/libiberty/cp-demint.c gdb-10.2/libiberty/cp-demint.c --- gdb-9.1/libiberty/cp-demint.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/cp-demint.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Demangler component interface functions. - Copyright (C) 2004-2019 Free Software Foundation, Inc. + Copyright (C) 2004-2020 Free Software Foundation, Inc. Written by Ian Lance Taylor <ian@wasabisystems.com>. This file is part of the libiberty library, which is part of GCC. @@ -125,6 +125,7 @@ p->u.s_binary.left = left; p->u.s_binary.right = right; p->d_printing = 0; + p->d_counting = 0; return 1; } @@ -149,6 +150,7 @@ p->type = DEMANGLE_COMPONENT_BUILTIN_TYPE; p->u.s_builtin.type = &cplus_demangle_builtin_types[i]; p->d_printing = 0; + p->d_counting = 0; return 1; } } @@ -176,6 +178,7 @@ p->type = DEMANGLE_COMPONENT_OPERATOR; p->u.s_operator.op = &cplus_demangle_operators[i]; p->d_printing = 0; + p->d_counting = 0; return 1; } } diff -Nru gdb-9.1/libiberty/cplus-dem.c gdb-10.2/libiberty/cplus-dem.c --- gdb-9.1/libiberty/cplus-dem.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/cplus-dem.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Demangler for GNU C++ - Copyright (C) 1989-2019 Free Software Foundation, Inc. + Copyright (C) 1989-2020 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.uucp) Rewritten by Fred Fish (fnf@cygnus.com) for ARM and Lucid demangling Modified by Satish Pai (pai@apollo.hp.com) for HP demangling @@ -52,7 +52,6 @@ #define CURRENT_DEMANGLING_STYLE options #include "libiberty.h" -#include "rust-demangle.h" enum demangling_styles current_demangling_style = auto_demangling; @@ -160,27 +159,20 @@ if ((options & DMGL_STYLE_MASK) == 0) options |= (int) current_demangling_style & DMGL_STYLE_MASK; + /* The Rust demangling is implemented elsewhere. + Legacy Rust symbols overlap with GNU_V3, so try Rust first. */ + if (RUST_DEMANGLING || AUTO_DEMANGLING) + { + ret = rust_demangle (mangled, options); + if (ret || RUST_DEMANGLING) + return ret; + } + /* The V3 ABI demangling is implemented elsewhere. */ - if (GNU_V3_DEMANGLING || RUST_DEMANGLING || AUTO_DEMANGLING) + if (GNU_V3_DEMANGLING || AUTO_DEMANGLING) { ret = cplus_demangle_v3 (mangled, options); - if (GNU_V3_DEMANGLING) - return ret; - - if (ret) - { - /* Rust symbols are GNU_V3 mangled plus some extra subtitutions. - The subtitutions are always smaller, so do in place changes. */ - if (rust_is_mangled (ret)) - rust_demangle_sym (ret); - else if (RUST_DEMANGLING) - { - free (ret); - ret = NULL; - } - } - - if (ret || RUST_DEMANGLING) + if (ret || GNU_V3_DEMANGLING) return ret; } @@ -204,27 +196,6 @@ return (ret); } -char * -rust_demangle (const char *mangled, int options) -{ - /* Rust symbols are GNU_V3 mangled plus some extra subtitutions. */ - char *ret = cplus_demangle_v3 (mangled, options); - - /* The Rust subtitutions are always smaller, so do in place changes. */ - if (ret != NULL) - { - if (rust_is_mangled (ret)) - rust_demangle_sym (ret); - else - { - free (ret); - ret = NULL; - } - } - - return ret; -} - /* Demangle ada names. The encoding is documented in gcc/ada/exp_dbug.ads. */ char * diff -Nru gdb-9.1/libiberty/crc32.c gdb-10.2/libiberty/crc32.c --- gdb-9.1/libiberty/crc32.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/crc32.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* crc32.c - Copyright (C) 2009-2019 Free Software Foundation, Inc. + Copyright (C) 2009-2020 Free Software Foundation, Inc. This file is part of the libiberty library. diff -Nru gdb-9.1/libiberty/d-demangle.c gdb-10.2/libiberty/d-demangle.c --- gdb-9.1/libiberty/d-demangle.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/d-demangle.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Demangler for the D programming language - Copyright (C) 2014-2019 Free Software Foundation, Inc. + Copyright (C) 2014-2020 Free Software Foundation, Inc. Written by Iain Buclaw (ibuclaw@gdcproject.org) This file is part of the libiberty library. @@ -31,6 +31,9 @@ #ifdef HAVE_CONFIG_H #include "config.h" #endif +#ifdef HAVE_LIMITS_H +#include <limits.h> +#endif #include "safe-ctype.h" @@ -45,6 +48,13 @@ #include <demangle.h> #include "libiberty.h" +#ifndef ULONG_MAX +#define ULONG_MAX (~0UL) +#endif +#ifndef UINT_MAX +#define UINT_MAX (~0U) +#endif + /* A mini string-handling package */ typedef struct string /* Beware: these aren't required to be */ @@ -55,9 +65,9 @@ } string; static void -string_need (string *s, int n) +string_need (string *s, size_t n) { - int tem; + size_t tem; if (s->b == NULL) { @@ -68,7 +78,7 @@ s->p = s->b = XNEWVEC (char, n); s->e = s->b + n; } - else if (s->e - s->p < n) + else if ((size_t) (s->e - s->p) < n) { tem = s->p - s->b; n += tem; @@ -117,14 +127,14 @@ static void string_append (string *p, const char *s) { - int n = strlen (s); + size_t n = strlen (s); string_need (p, n); memcpy (p->p, s, n); p->p += n; } static void -string_appendn (string *p, const char *s, int n) +string_appendn (string *p, const char *s, size_t n) { if (n != 0) { @@ -135,7 +145,7 @@ } static void -string_prependn (string *p, const char *s, int n) +string_prependn (string *p, const char *s, size_t n) { char *q; @@ -160,66 +170,72 @@ } } -/* What kinds of symbol we could be parsing. */ -enum dlang_symbol_kinds +/* Demangle information structure we pass around. */ +struct dlang_info { - /* Top-level symbol, needs it's type checked. */ - dlang_top_level, - /* Function symbol, needs it's type checked. */ - dlang_function, - /* Strongly typed name, such as for classes, structs and enums. */ - dlang_type_name, - /* Template identifier. */ - dlang_template_ident, - /* Template symbol parameter. */ - dlang_template_param + /* The string we are demangling. */ + const char *s; + /* The index of the last back reference. */ + int last_backref; }; +/* Pass as the LEN to dlang_parse_template if symbol length is not known. */ +#define TEMPLATE_LENGTH_UNKNOWN (-1UL) + /* Prototypes for forward referenced functions */ -static const char *dlang_function_args (string *, const char *); +static const char *dlang_function_type (string *, const char *, + struct dlang_info *); -static const char *dlang_type (string *, const char *); +static const char *dlang_function_args (string *, const char *, + struct dlang_info *); + +static const char *dlang_type (string *, const char *, struct dlang_info *); static const char *dlang_value (string *, const char *, const char *, char); static const char *dlang_parse_qualified (string *, const char *, - enum dlang_symbol_kinds); + struct dlang_info *, int); static const char *dlang_parse_mangle (string *, const char *, - enum dlang_symbol_kinds); + struct dlang_info *); + +static const char *dlang_parse_tuple (string *, const char *, + struct dlang_info *); -static const char *dlang_parse_tuple (string *, const char *); +static const char *dlang_parse_template (string *, const char *, + struct dlang_info *, unsigned long); -static const char *dlang_parse_template (string *, const char *, long); +static const char *dlang_lname (string *, const char *, unsigned long); /* Extract the number from MANGLED, and assign the result to RET. - Return the remaining string on success or NULL on failure. */ + Return the remaining string on success or NULL on failure. + A result larger than UINT_MAX is considered a failure. */ static const char * -dlang_number (const char *mangled, long *ret) +dlang_number (const char *mangled, unsigned long *ret) { /* Return NULL if trying to extract something that isn't a digit. */ if (mangled == NULL || !ISDIGIT (*mangled)) return NULL; - (*ret) = 0; + unsigned long val = 0; while (ISDIGIT (*mangled)) { - (*ret) *= 10; + unsigned long digit = mangled[0] - '0'; - /* If an overflow occured when multiplying by ten, the result - will not be a multiple of ten. */ - if ((*ret % 10) != 0) + /* Check for overflow. */ + if (val > (UINT_MAX - digit) / 10) return NULL; - (*ret) += mangled[0] - '0'; + val = val * 10 + digit; mangled++; } - if (*mangled == '\0' || *ret < 0) + if (*mangled == '\0') return NULL; + *ret = val; return mangled; } @@ -267,6 +283,178 @@ } } +/* Extract the back reference position from MANGLED, and assign the result + to RET. Return the remaining string on success or NULL on failure. + A result <= 0 is a failure. */ +static const char * +dlang_decode_backref (const char *mangled, long *ret) +{ + /* Return NULL if trying to extract something that isn't a digit. */ + if (mangled == NULL || !ISALPHA (*mangled)) + return NULL; + + /* Any identifier or non-basic type that has been emitted to the mangled + symbol before will not be emitted again, but is referenced by a special + sequence encoding the relative position of the original occurrence in the + mangled symbol name. + + Numbers in back references are encoded with base 26 by upper case letters + A-Z for higher digits but lower case letters a-z for the last digit. + + NumberBackRef: + [a-z] + [A-Z] NumberBackRef + ^ + */ + unsigned long val = 0; + + while (ISALPHA (*mangled)) + { + /* Check for overflow. */ + if (val > (ULONG_MAX - 25) / 26) + break; + + val *= 26; + + if (mangled[0] >= 'a' && mangled[0] <= 'z') + { + val += mangled[0] - 'a'; + if ((long) val <= 0) + break; + *ret = val; + return mangled + 1; + } + + val += mangled[0] - 'A'; + mangled++; + } + + return NULL; +} + +/* Extract the symbol pointed at by the back reference and assign the result + to RET. Return the remaining string on success or NULL on failure. */ +static const char * +dlang_backref (const char *mangled, const char **ret, struct dlang_info *info) +{ + (*ret) = NULL; + + if (mangled == NULL || *mangled != 'Q') + return NULL; + + /* Position of 'Q'. */ + const char *qpos = mangled; + long refpos; + mangled++; + + mangled = dlang_decode_backref (mangled, &refpos); + if (mangled == NULL) + return NULL; + + if (refpos > qpos - info->s) + return NULL; + + /* Set the position of the back reference. */ + (*ret) = qpos - refpos; + + return mangled; +} + +/* Demangle a back referenced symbol from MANGLED and append it to DECL. + Return the remaining string on success or NULL on failure. */ +static const char * +dlang_symbol_backref (string *decl, const char *mangled, + struct dlang_info *info) +{ + /* An identifier back reference always points to a digit 0 to 9. + + IdentifierBackRef: + Q NumberBackRef + ^ + */ + const char *backref; + unsigned long len; + + /* Get position of the back reference. */ + mangled = dlang_backref (mangled, &backref, info); + + /* Must point to a simple identifier. */ + backref = dlang_number (backref, &len); + if (backref == NULL) + return NULL; + + backref = dlang_lname (decl, backref, len); + if (backref == NULL) + return NULL; + + return mangled; +} + +/* Demangle a back referenced type from MANGLED and append it to DECL. + IS_FUNCTION is 1 if the back referenced type is expected to be a function. + Return the remaining string on success or NULL on failure. */ +static const char * +dlang_type_backref (string *decl, const char *mangled, struct dlang_info *info, + int is_function) +{ + /* A type back reference always points to a letter. + + TypeBackRef: + Q NumberBackRef + ^ + */ + const char *backref; + + /* If we appear to be moving backwards through the mangle string, then + bail as this may be a recursive back reference. */ + if (mangled - info->s >= info->last_backref) + return NULL; + + int save_refpos = info->last_backref; + info->last_backref = mangled - info->s; + + /* Get position of the back reference. */ + mangled = dlang_backref (mangled, &backref, info); + + /* Must point to a type. */ + if (is_function) + backref = dlang_function_type (decl, backref, info); + else + backref = dlang_type (decl, backref, info); + + info->last_backref = save_refpos; + + if (backref == NULL) + return NULL; + + return mangled; +} + +/* Extract the beginning of a symbol name from MANGLED and + return 1 on success or 0 on failure. */ +static int +dlang_symbol_name_p (const char *mangled, struct dlang_info *info) +{ + long ret; + const char *qref = mangled; + + if (ISDIGIT (*mangled)) + return 1; + + if (mangled[0] == '_' && mangled[1] == '_' + && (mangled[2] == 'T' || mangled[2] == 'U')) + return 1; + + if (*mangled != 'Q') + return 0; + + mangled = dlang_decode_backref (mangled + 1, &ret); + if (mangled == NULL || ret > qref - info->s) + return 0; + + return ISDIGIT (qref[-ret]); +} + /* Demangle the calling convention from MANGLED and append it to DECL. Return the remaining string on success or NULL on failure. */ static const char * @@ -404,6 +592,10 @@ mangled++; string_append (decl, "scope "); continue; + case 'm': /* @live */ + mangled++; + string_append (decl, "@live "); + continue; default: /* unknown attribute */ return NULL; @@ -414,13 +606,39 @@ return mangled; } +/* Demangle the function type from MANGLED without the return type. + The arguments are appended to ARGS, the calling convention is appended + to CALL and attributes are appended to ATTR. Any of these can be NULL + to throw the information away. Return the remaining string on success + or NULL on failure. */ +static const char * +dlang_function_type_noreturn (string *args, string *call, string *attr, + const char *mangled, struct dlang_info *info) +{ + string dump; + string_init (&dump); + + /* Skip over calling convention and attributes. */ + mangled = dlang_call_convention (call ? call : &dump, mangled); + mangled = dlang_attributes (attr ? attr : &dump, mangled); + + if (args) + string_append (args, "("); + + mangled = dlang_function_args (args ? args : &dump, mangled, info); + if (args) + string_append (args, ")"); + + string_delete (&dump); + return mangled; +} + /* Demangle the function type from MANGLED and append it to DECL. Return the remaining string on success or NULL on failure. */ static const char * -dlang_function_type (string *decl, const char *mangled) +dlang_function_type (string *decl, const char *mangled, struct dlang_info *info) { string attr, args, type; - size_t szattr, szargs, sztype; if (mangled == NULL || *mangled == '\0') return NULL; @@ -435,27 +653,16 @@ string_init (&args); string_init (&type); - /* Function call convention. */ - mangled = dlang_call_convention (decl, mangled); - - /* Function attributes. */ - mangled = dlang_attributes (&attr, mangled); - szattr = string_length (&attr); - - /* Function arguments. */ - mangled = dlang_function_args (&args, mangled); - szargs = string_length (&args); + mangled = dlang_function_type_noreturn (&args, decl, &attr, mangled, info); /* Function return type. */ - mangled = dlang_type (&type, mangled); - sztype = string_length (&type); + mangled = dlang_type (&type, mangled, info); /* Append to decl in order. */ - string_appendn (decl, type.b, sztype); - string_append (decl, "("); - string_appendn (decl, args.b, szargs); - string_append (decl, ") "); - string_appendn (decl, attr.b, szattr); + string_appendn (decl, type.b, string_length (&type)); + string_appendn (decl, args.b, string_length (&args)); + string_append (decl, " "); + string_appendn (decl, attr.b, string_length (&attr)); string_delete (&attr); string_delete (&args); @@ -466,7 +673,7 @@ /* Demangle the argument list from MANGLED and append it to DECL. Return the remaining string on success or NULL on failure. */ static const char * -dlang_function_args (string *decl, const char *mangled) +dlang_function_args (string *decl, const char *mangled, struct dlang_info *info) { size_t n = 0; @@ -506,6 +713,15 @@ switch (*mangled) { + case 'I': /* in(T) */ + mangled++; + string_append (decl, "in "); + if (*mangled == 'K') /* in ref(T) */ + { + mangled++; + string_append (decl, "ref "); + } + break; case 'J': /* out(T) */ mangled++; string_append (decl, "out "); @@ -519,7 +735,7 @@ string_append (decl, "lazy "); break; } - mangled = dlang_type (decl, mangled); + mangled = dlang_type (decl, mangled, info); } return mangled; @@ -528,7 +744,7 @@ /* Demangle the type from MANGLED and append it to DECL. Return the remaining string on success or NULL on failure. */ static const char * -dlang_type (string *decl, const char *mangled) +dlang_type (string *decl, const char *mangled, struct dlang_info *info) { if (mangled == NULL || *mangled == '\0') return NULL; @@ -538,19 +754,19 @@ case 'O': /* shared(T) */ mangled++; string_append (decl, "shared("); - mangled = dlang_type (decl, mangled); + mangled = dlang_type (decl, mangled, info); string_append (decl, ")"); return mangled; case 'x': /* const(T) */ mangled++; string_append (decl, "const("); - mangled = dlang_type (decl, mangled); + mangled = dlang_type (decl, mangled, info); string_append (decl, ")"); return mangled; case 'y': /* immutable(T) */ mangled++; string_append (decl, "immutable("); - mangled = dlang_type (decl, mangled); + mangled = dlang_type (decl, mangled, info); string_append (decl, ")"); return mangled; case 'N': @@ -559,7 +775,7 @@ { mangled++; string_append (decl, "inout("); - mangled = dlang_type (decl, mangled); + mangled = dlang_type (decl, mangled, info); string_append (decl, ")"); return mangled; } @@ -567,7 +783,7 @@ { mangled++; string_append (decl, "__vector("); - mangled = dlang_type (decl, mangled); + mangled = dlang_type (decl, mangled, info); string_append (decl, ")"); return mangled; } @@ -575,7 +791,7 @@ return NULL; case 'A': /* dynamic array (T[]) */ mangled++; - mangled = dlang_type (decl, mangled); + mangled = dlang_type (decl, mangled, info); string_append (decl, "[]"); return mangled; case 'G': /* static array (T[N]) */ @@ -590,7 +806,7 @@ num++; mangled++; } - mangled = dlang_type (decl, mangled); + mangled = dlang_type (decl, mangled, info); string_append (decl, "["); string_appendn (decl, numptr, num); string_append (decl, "]"); @@ -603,10 +819,10 @@ mangled++; string_init (&type); - mangled = dlang_type (&type, mangled); + mangled = dlang_type (&type, mangled, info); sztype = string_length (&type); - mangled = dlang_type (decl, mangled); + mangled = dlang_type (decl, mangled, info); string_append (decl, "["); string_appendn (decl, type.b, sztype); string_append (decl, "]"); @@ -618,7 +834,7 @@ mangled++; if (!dlang_call_convention_p (mangled)) { - mangled = dlang_type (decl, mangled); + mangled = dlang_type (decl, mangled, info); string_append (decl, "*"); return mangled; } @@ -630,16 +846,15 @@ case 'R': /* function T (C++) */ case 'Y': /* function T (Objective-C) */ /* Function pointer types don't include the trailing asterisk. */ - mangled = dlang_function_type (decl, mangled); + mangled = dlang_function_type (decl, mangled, info); string_append (decl, "function"); return mangled; - case 'I': /* ident T */ case 'C': /* class T */ case 'S': /* struct T */ case 'E': /* enum T */ case 'T': /* typedef T */ mangled++; - return dlang_parse_qualified (decl, mangled, dlang_type_name); + return dlang_parse_qualified (decl, mangled, info, 0); case 'D': /* delegate T */ { string mods; @@ -650,7 +865,12 @@ mangled = dlang_type_modifiers (&mods, mangled); szmods = string_length (&mods); - mangled = dlang_function_type (decl, mangled); + /* Back referenced function type. */ + if (*mangled == 'Q') + mangled = dlang_type_backref (decl, mangled, info, 1); + else + mangled = dlang_function_type (decl, mangled, info); + string_append (decl, "delegate"); string_appendn (decl, mods.b, szmods); @@ -659,7 +879,7 @@ } case 'B': /* tuple T */ mangled++; - return dlang_parse_tuple (decl, mangled); + return dlang_parse_tuple (decl, mangled, info); /* Basic types */ case 'n': @@ -773,6 +993,10 @@ } return NULL; + /* Back referenced type. */ + case 'Q': + return dlang_type_backref (decl, mangled, info, 0); + default: /* unhandled */ return NULL; } @@ -781,152 +1005,127 @@ /* Extract the identifier from MANGLED and append it to DECL. Return the remaining string on success or NULL on failure. */ static const char * -dlang_identifier (string *decl, const char *mangled, - enum dlang_symbol_kinds kind) +dlang_identifier (string *decl, const char *mangled, struct dlang_info *info) { - long len; - const char *endptr = dlang_number (mangled, &len); + unsigned long len; - if (endptr == NULL || len == 0) + if (mangled == NULL || *mangled == '\0') return NULL; - /* In template parameter symbols, the first character of the mangled - name can be a digit. This causes ambiguity issues because the - digits of the two numbers are adjacent. */ - if (kind == dlang_template_param) - { - long psize = len; - const char *pend; - int saved = string_length (decl); - - /* Work backwards until a match is found. */ - for (pend = endptr; endptr != NULL; pend--) - { - mangled = pend; - - /* Reached the beginning of the pointer to the name length, - try parsing the entire symbol. */ - if (psize == 0) - { - psize = len; - pend = endptr; - endptr = NULL; - } + if (*mangled == 'Q') + return dlang_symbol_backref (decl, mangled, info); - /* Check whether template parameter is a function with a valid - return type or an untyped identifier. */ - if (ISDIGIT (*mangled)) - mangled = dlang_parse_qualified (decl, mangled, - dlang_template_ident); - else if (strncmp (mangled, "_D", 2) == 0) - mangled = dlang_parse_mangle (decl, mangled, dlang_function); - - /* Check for name length mismatch. */ - if (mangled && (mangled - pend) == psize) - return mangled; + /* May be a template instance without a length prefix. */ + if (mangled[0] == '_' && mangled[1] == '_' + && (mangled[2] == 'T' || mangled[2] == 'U')) + return dlang_parse_template (decl, mangled, info, TEMPLATE_LENGTH_UNKNOWN); - psize /= 10; - string_setlength (decl, saved); - } + const char *endptr = dlang_number (mangled, &len); - /* No match on any combinations. */ - return NULL; - } - else - { - if (strlen (endptr) < (size_t) len) - return NULL; + if (endptr == NULL || len == 0) + return NULL; - mangled = endptr; + if (strlen (endptr) < len) + return NULL; - /* May be a template instance. */ - if (len >= 5 && mangled[0] == '_' && mangled[1] == '_' - && (mangled[2] == 'T' || mangled[2] == 'U')) - return dlang_parse_template (decl, mangled, len); + mangled = endptr; - switch (len) - { - case 6: - if (strncmp (mangled, "__ctor", len) == 0) - { - /* Constructor symbol for a class/struct. */ - string_append (decl, "this"); - mangled += len; - return mangled; - } - else if (strncmp (mangled, "__dtor", len) == 0) - { - /* Destructor symbol for a class/struct. */ - string_append (decl, "~this"); - mangled += len; - return mangled; - } - else if (strncmp (mangled, "__initZ", len+1) == 0) - { - /* The static initialiser for a given symbol. */ - string_prepend (decl, "initializer for "); - string_setlength (decl, string_length (decl) - 1); - mangled += len; - return mangled; - } - else if (strncmp (mangled, "__vtblZ", len+1) == 0) - { - /* The vtable symbol for a given class. */ - string_prepend (decl, "vtable for "); - string_setlength (decl, string_length (decl) - 1); - mangled += len; - return mangled; - } - break; + /* May be a template instance with a length prefix. */ + if (len >= 5 && mangled[0] == '_' && mangled[1] == '_' + && (mangled[2] == 'T' || mangled[2] == 'U')) + return dlang_parse_template (decl, mangled, info, len); - case 7: - if (strncmp (mangled, "__ClassZ", len+1) == 0) - { - /* The classinfo symbol for a given class. */ - string_prepend (decl, "ClassInfo for "); - string_setlength (decl, string_length (decl) - 1); - mangled += len; - return mangled; - } - break; + return dlang_lname (decl, mangled, len); +} - case 10: - if (strncmp (mangled, "__postblitMFZ", len+3) == 0) - { - /* Postblit symbol for a struct. */ - string_append (decl, "this(this)"); - mangled += len + 3; - return mangled; - } - break; +/* Extract the plain identifier from MANGLED and prepend/append it to DECL + with special treatment for some magic compiler generted symbols. + Return the remaining string on success or NULL on failure. */ +static const char * +dlang_lname (string *decl, const char *mangled, unsigned long len) +{ + switch (len) + { + case 6: + if (strncmp (mangled, "__ctor", len) == 0) + { + /* Constructor symbol for a class/struct. */ + string_append (decl, "this"); + mangled += len; + return mangled; + } + else if (strncmp (mangled, "__dtor", len) == 0) + { + /* Destructor symbol for a class/struct. */ + string_append (decl, "~this"); + mangled += len; + return mangled; + } + else if (strncmp (mangled, "__initZ", len + 1) == 0) + { + /* The static initialiser for a given symbol. */ + string_prepend (decl, "initializer for "); + string_setlength (decl, string_length (decl) - 1); + mangled += len; + return mangled; + } + else if (strncmp (mangled, "__vtblZ", len + 1) == 0) + { + /* The vtable symbol for a given class. */ + string_prepend (decl, "vtable for "); + string_setlength (decl, string_length (decl) - 1); + mangled += len; + return mangled; + } + break; - case 11: - if (strncmp (mangled, "__InterfaceZ", len+1) == 0) - { - /* The interface symbol for a given class. */ - string_prepend (decl, "Interface for "); - string_setlength (decl, string_length (decl) - 1); - mangled += len; - return mangled; - } - break; + case 7: + if (strncmp (mangled, "__ClassZ", len + 1) == 0) + { + /* The classinfo symbol for a given class. */ + string_prepend (decl, "ClassInfo for "); + string_setlength (decl, string_length (decl) - 1); + mangled += len; + return mangled; + } + break; - case 12: - if (strncmp (mangled, "__ModuleInfoZ", len+1) == 0) - { - /* The ModuleInfo symbol for a given module. */ - string_prepend (decl, "ModuleInfo for "); - string_setlength (decl, string_length (decl) - 1); - mangled += len; - return mangled; - } - break; + case 10: + if (strncmp (mangled, "__postblitMFZ", len + 3) == 0) + { + /* Postblit symbol for a struct. */ + string_append (decl, "this(this)"); + mangled += len + 3; + return mangled; } + break; - string_appendn (decl, mangled, len); - mangled += len; + case 11: + if (strncmp (mangled, "__InterfaceZ", len + 1) == 0) + { + /* The interface symbol for a given class. */ + string_prepend (decl, "Interface for "); + string_setlength (decl, string_length (decl) - 1); + mangled += len; + return mangled; + } + break; + + case 12: + if (strncmp (mangled, "__ModuleInfoZ", len + 1) == 0) + { + /* The ModuleInfo symbol for a given module. */ + string_prepend (decl, "ModuleInfo for "); + string_setlength (decl, string_length (decl) - 1); + mangled += len; + return mangled; + } + break; } + string_appendn (decl, mangled, len); + mangled += len; + return mangled; } @@ -942,7 +1141,7 @@ char value[20]; int pos = sizeof(value); int width = 0; - long val; + unsigned long val; mangled = dlang_number (mangled, &val); if (mangled == NULL) @@ -998,7 +1197,7 @@ else if (type == 'b') { /* Parse boolean value. */ - long val; + unsigned long val; mangled = dlang_number (mangled, &val); if (mangled == NULL) @@ -1117,7 +1316,7 @@ dlang_parse_string (string *decl, const char *mangled) { char type = *mangled; - long len; + unsigned long len; mangled++; mangled = dlang_number (mangled, &len); @@ -1181,7 +1380,7 @@ static const char * dlang_parse_arrayliteral (string *decl, const char *mangled) { - long elements; + unsigned long elements; mangled = dlang_number (mangled, &elements); if (mangled == NULL) @@ -1207,7 +1406,7 @@ static const char * dlang_parse_assocarray (string *decl, const char *mangled) { - long elements; + unsigned long elements; mangled = dlang_number (mangled, &elements); if (mangled == NULL) @@ -1238,7 +1437,7 @@ static const char * dlang_parse_structlit (string *decl, const char *mangled, const char *name) { - long args; + unsigned long args; mangled = dlang_number (mangled, &args); if (mangled == NULL) @@ -1347,22 +1546,22 @@ /* Extract and demangle the symbol in MANGLED and append it to DECL. Returns the remaining signature on success or NULL on failure. */ static const char * -dlang_parse_mangle (string *decl, const char *mangled, - enum dlang_symbol_kinds kind) +dlang_parse_mangle (string *decl, const char *mangled, struct dlang_info *info) { /* A D mangled symbol is comprised of both scope and type information. MangleName: _D QualifiedName Type - _D QualifiedName M Type _D QualifiedName Z ^ The caller should have guaranteed that the start pointer is at the above location. + Note that type is never a function type, but only the return type of + a function or the type of a variable. */ mangled += 2; - mangled = dlang_parse_qualified (decl, mangled, dlang_top_level); + mangled = dlang_parse_qualified (decl, mangled, info, 1); if (mangled != NULL) { @@ -1371,68 +1570,40 @@ mangled++; else { - string mods; - int saved; - - /* Skip over 'this' parameter. */ - if (*mangled == 'M') - mangled++; + /* Discard the declaration or return type. */ + string type; - /* Save the type modifiers for appending at the end if needed. */ - string_init (&mods); - mangled = dlang_type_modifiers (&mods, mangled); - - if (mangled && dlang_call_convention_p (mangled)) - { - /* Skip over calling convention and attributes. */ - saved = string_length (decl); - mangled = dlang_call_convention (decl, mangled); - mangled = dlang_attributes (decl, mangled); - string_setlength (decl, saved); - - string_append (decl, "("); - mangled = dlang_function_args (decl, mangled); - string_append (decl, ")"); - - /* Add any const/immutable/shared modifier. */ - string_appendn (decl, mods.b, string_length (&mods)); - } - - /* Consume the decl type of symbol. */ - saved = string_length (decl); - mangled = dlang_type (decl, mangled); - string_setlength (decl, saved); - - string_delete (&mods); + string_init (&type); + mangled = dlang_type (&type, mangled, info); + string_delete (&type); } } - /* Check that the entire symbol was successfully demangled. */ - if (kind == dlang_top_level) - { - if (mangled == NULL || *mangled != '\0') - return NULL; - } - return mangled; } /* Extract and demangle the qualified symbol in MANGLED and append it to DECL. + SUFFIX_MODIFIERS is 1 if we are printing modifiers on this after the symbol. Returns the remaining signature on success or NULL on failure. */ static const char * dlang_parse_qualified (string *decl, const char *mangled, - enum dlang_symbol_kinds kind) + struct dlang_info *info, int suffix_modifiers) { /* Qualified names are identifiers separated by their encoded length. Nested functions also encode their argument types without specifying what they return. QualifiedName: - SymbolName - SymbolName QualifiedName - SymbolName TypeFunctionNoReturn QualifiedName - SymbolName M TypeModifiers TypeFunctionNoReturn QualifiedName + SymbolFunctionName + SymbolFunctionName QualifiedName ^ + + SymbolFunctionName: + SymbolName + SymbolName TypeFunctionNoReturn + SymbolName M TypeFunctionNoReturn + SymbolName M TypeModifiers TypeFunctionNoReturn + The start pointer should be at the above location. */ size_t n = 0; @@ -1445,49 +1616,45 @@ while (*mangled == '0') mangled++; - mangled = dlang_identifier (decl, mangled, kind); + mangled = dlang_identifier (decl, mangled, info); /* Consume the encoded arguments. However if this is not followed by the - next encoded length, then this is not a continuation of a qualified - name, in which case we backtrack and return the current unconsumed - position of the mangled decl. */ + next encoded length or mangle type, then this is not a continuation of + a qualified name, in which case we backtrack and return the current + unconsumed position of the mangled decl. */ if (mangled && (*mangled == 'M' || dlang_call_convention_p (mangled))) { + string mods; const char *start = mangled; int saved = string_length (decl); + /* Save the type modifiers for appending at the end if needed. */ + string_init (&mods); + /* Skip over 'this' parameter and type modifiers. */ if (*mangled == 'M') { mangled++; - mangled = dlang_type_modifiers (decl, mangled); + mangled = dlang_type_modifiers (&mods, mangled); string_setlength (decl, saved); } - /* The rule we expect to match in the mangled string is: - - TypeFunctionNoReturn: - CallConvention FuncAttrs Arguments ArgClose - - The calling convention and function attributes are not included - in the demangled string. */ - mangled = dlang_call_convention (decl, mangled); - mangled = dlang_attributes (decl, mangled); - string_setlength (decl, saved); - - string_append (decl, "("); - mangled = dlang_function_args (decl, mangled); - string_append (decl, ")"); + mangled = dlang_function_type_noreturn (decl, NULL, NULL, + mangled, info); + if (suffix_modifiers) + string_appendn (decl, mods.b, string_length (&mods)); - if (mangled == NULL || !ISDIGIT (*mangled)) + if (mangled == NULL || *mangled == '\0') { /* Did not match the rule we were looking for. */ mangled = start; string_setlength (decl, saved); } + + string_delete (&mods); } } - while (mangled && ISDIGIT (*mangled)); + while (mangled && dlang_symbol_name_p (mangled, info)); return mangled; } @@ -1495,9 +1662,9 @@ /* Demangle the tuple from MANGLED and append it to DECL. Return the remaining string on success or NULL on failure. */ static const char * -dlang_parse_tuple (string *decl, const char *mangled) +dlang_parse_tuple (string *decl, const char *mangled, struct dlang_info *info) { - long elements; + unsigned long elements; mangled = dlang_number (mangled, &elements); if (mangled == NULL) @@ -1507,7 +1674,7 @@ while (elements--) { - mangled = dlang_type (decl, mangled); + mangled = dlang_type (decl, mangled, info); if (mangled == NULL) return NULL; @@ -1519,10 +1686,71 @@ return mangled; } +/* Demangle the template symbol parameter from MANGLED and append it to DECL. + Return the remaining string on success or NULL on failure. */ +static const char * +dlang_template_symbol_param (string *decl, const char *mangled, + struct dlang_info *info) +{ + if (strncmp (mangled, "_D", 2) == 0 + && dlang_symbol_name_p (mangled + 2, info)) + return dlang_parse_mangle (decl, mangled, info); + + if (*mangled == 'Q') + return dlang_parse_qualified (decl, mangled, info, 0); + + unsigned long len; + const char *endptr = dlang_number (mangled, &len); + + if (endptr == NULL || len == 0) + return NULL; + + /* In template parameter symbols generated by the frontend up to 2.076, + the symbol length is encoded and the first character of the mangled + name can be a digit. This causes ambiguity issues because the digits + of the two numbers are adjacent. */ + long psize = len; + const char *pend; + int saved = string_length (decl); + + /* Work backwards until a match is found. */ + for (pend = endptr; endptr != NULL; pend--) + { + mangled = pend; + + /* Reached the beginning of the pointer to the name length, + try parsing the entire symbol. */ + if (psize == 0) + { + psize = len; + pend = endptr; + endptr = NULL; + } + + /* Check whether template parameter is a function with a valid + return type or an untyped identifier. */ + if (dlang_symbol_name_p (mangled, info)) + mangled = dlang_parse_qualified (decl, mangled, info, 0); + else if (strncmp (mangled, "_D", 2) == 0 + && dlang_symbol_name_p (mangled + 2, info)) + mangled = dlang_parse_mangle (decl, mangled, info); + + /* Check for name length mismatch. */ + if (mangled && (endptr == NULL || (mangled - pend) == psize)) + return mangled; + + psize /= 10; + string_setlength (decl, saved); + } + + /* No match on any combinations. */ + return NULL; +} + /* Demangle the argument list from MANGLED and append it to DECL. Return the remaining string on success or NULL on failure. */ static const char * -dlang_template_args (string *decl, const char *mangled) +dlang_template_args (string *decl, const char *mangled, struct dlang_info *info) { size_t n = 0; @@ -1546,11 +1774,11 @@ { case 'S': /* Symbol parameter. */ mangled++; - mangled = dlang_identifier (decl, mangled, dlang_template_param); + mangled = dlang_template_symbol_param (decl, mangled, info); break; case 'T': /* Type parameter. */ mangled++; - mangled = dlang_type (decl, mangled); + mangled = dlang_type (decl, mangled, info); break; case 'V': /* Value parameter. */ { @@ -1561,10 +1789,20 @@ mangled++; type = *mangled; + if (type == 'Q') + { + /* Value type is a back reference, peek at the real type. */ + const char *backref; + if (dlang_backref (mangled, &backref, info) == NULL) + return NULL; + + type = *backref; + } + /* In the few instances where the type is actually desired in the output, it should precede the value from dlang_value. */ string_init (&name); - mangled = dlang_type (&name, mangled); + mangled = dlang_type (&name, mangled, info); string_need (&name, 1); *(name.p) = '\0'; @@ -1572,7 +1810,20 @@ string_delete (&name); break; } + case 'X': /* Externally mangled parameter. */ + { + unsigned long len; + const char *endptr; + mangled++; + endptr = dlang_number (mangled, &len); + if (endptr == NULL || strlen (endptr) < len) + return NULL; + + string_appendn (decl, endptr, len); + mangled = endptr + len; + break; + } default: return NULL; } @@ -1582,12 +1833,14 @@ } /* Extract and demangle the template symbol in MANGLED, expected to - be made up of LEN characters, and append it to DECL. + be made up of LEN characters (-1 if unknown), and append it to DECL. Returns the remaining signature on success or NULL on failure. */ static const char * -dlang_parse_template (string *decl, const char *mangled, long len) +dlang_parse_template (string *decl, const char *mangled, + struct dlang_info *info, unsigned long len) { const char *start = mangled; + string args; /* Template instance names have the types and values of its parameters encoded into it. @@ -1601,26 +1854,42 @@ */ /* Template symbol. */ - if (!ISDIGIT (mangled[3]) || mangled[3] == '0') + if (!dlang_symbol_name_p (mangled + 3, info) || mangled[3] == '0') return NULL; mangled += 3; /* Template identifier. */ - mangled = dlang_identifier (decl, mangled, dlang_template_ident); + mangled = dlang_identifier (decl, mangled, info); /* Template arguments. */ + string_init (&args); + mangled = dlang_template_args (&args, mangled, info); + string_append (decl, "!("); - mangled = dlang_template_args (decl, mangled); + string_appendn (decl, args.b, string_length (&args)); string_append (decl, ")"); + string_delete (&args); + /* Check for template name length mismatch. */ - if (mangled && (mangled - start) != len) + if (len != TEMPLATE_LENGTH_UNKNOWN + && mangled + && (unsigned long) (mangled - start) != len) return NULL; return mangled; } +/* Initialize the information structure we use to pass around information. */ +static void +dlang_demangle_init_info (const char *mangled, int last_backref, + struct dlang_info *info) +{ + info->s = mangled; + info->last_backref = last_backref; +} + /* Extract and demangle the symbol in MANGLED. Returns the demangled signature on success or NULL on failure. */ @@ -1644,7 +1913,13 @@ } else { - if (dlang_parse_mangle (&decl, mangled, dlang_top_level) == NULL) + struct dlang_info info; + + dlang_demangle_init_info (mangled, strlen (mangled), &info); + mangled = dlang_parse_mangle (&decl, mangled, &info); + + /* Check that the entire symbol was successfully demangled. */ + if (mangled == NULL || *mangled != '\0') string_delete (&decl); } diff -Nru gdb-9.1/libiberty/_doprnt.c gdb-10.2/libiberty/_doprnt.c --- gdb-9.1/libiberty/_doprnt.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/_doprnt.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Provide a version of _doprnt in terms of fprintf. - Copyright (C) 1998-2019 Free Software Foundation, Inc. + Copyright (C) 1998-2020 Free Software Foundation, Inc. Contributed by Kaveh Ghazi (ghazi@caip.rutgers.edu) 3/29/98 This program is free software; you can redistribute it and/or modify it diff -Nru gdb-9.1/libiberty/dwarfnames.c gdb-10.2/libiberty/dwarfnames.c --- gdb-9.1/libiberty/dwarfnames.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/dwarfnames.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Names of various DWARF tags. - Copyright (C) 2012-2019 Free Software Foundation, Inc. + Copyright (C) 2012-2020 Free Software Foundation, Inc. This file is part of GNU CC. diff -Nru gdb-9.1/libiberty/dyn-string.c gdb-10.2/libiberty/dyn-string.c --- gdb-9.1/libiberty/dyn-string.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/dyn-string.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* An abstract string datatype. - Copyright (C) 1998-2019 Free Software Foundation, Inc. + Copyright (C) 1998-2020 Free Software Foundation, Inc. Contributed by Mark Mitchell (mark@markmitchell.com). This file is part of GNU CC. diff -Nru gdb-9.1/libiberty/fdmatch.c gdb-10.2/libiberty/fdmatch.c --- gdb-9.1/libiberty/fdmatch.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/fdmatch.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Compare two open file descriptors to see if they refer to the same file. - Copyright (C) 1991-2019 Free Software Foundation, Inc. + Copyright (C) 1991-2020 Free Software Foundation, Inc. This file is part of the libiberty library. Libiberty is free software; you can redistribute it and/or diff -Nru gdb-9.1/libiberty/fibheap.c gdb-10.2/libiberty/fibheap.c --- gdb-9.1/libiberty/fibheap.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/fibheap.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* A Fibonacci heap datatype. - Copyright (C) 1998-2019 Free Software Foundation, Inc. + Copyright (C) 1998-2020 Free Software Foundation, Inc. Contributed by Daniel Berlin (dan@cgsoftware.com). This file is part of GNU CC. diff -Nru gdb-9.1/libiberty/filedescriptor.c gdb-10.2/libiberty/filedescriptor.c --- gdb-9.1/libiberty/filedescriptor.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/libiberty/filedescriptor.c 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,47 @@ +/* File descriptor related functions. + + Copyright (C) 2019-2020 Free Software Foundation, Inc. + + This file is part of the libiberty library. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street - Fifth Floor, + Boston, MA 02110-1301, USA. */ + +#include "config.h" +#include "ansidecl.h" +#include "libiberty.h" + +#ifdef HAVE_FCNTL_H +#include <fcntl.h> +#endif + +#if defined (_WIN32) +#define WIN32_LEAN_AND_MEAN +#include <windows.h> /* for GetFullPathName */ +#endif +/* Return true when FD file descriptor exists. */ + +int +is_valid_fd (int fd) +{ +#if defined(_WIN32) + HANDLE h = (HANDLE) _get_osfhandle (fd); + return h != (HANDLE) -1; +#elif defined(F_GETFD) + return fcntl (fd, F_GETFD) >= 0; +#else + return dup2 (fd, fd) < 0; +#endif +} diff -Nru gdb-9.1/libiberty/filename_cmp.c gdb-10.2/libiberty/filename_cmp.c --- gdb-9.1/libiberty/filename_cmp.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/filename_cmp.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* File name comparison routine. - Copyright (C) 2007-2019 Free Software Foundation, Inc. + Copyright (C) 2007-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/libiberty/floatformat.c gdb-10.2/libiberty/floatformat.c --- gdb-9.1/libiberty/floatformat.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/floatformat.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* IEEE floating point support routines, for GDB, the GNU Debugger. - Copyright (C) 1991-2019 Free Software Foundation, Inc. + Copyright (C) 1991-2020 Free Software Foundation, Inc. This file is part of GDB. @@ -389,7 +389,24 @@ floatformat_ibm_long_double_is_valid, &floatformat_ieee_double_little }; - + +const struct floatformat floatformat_bfloat16_big = +{ + floatformat_big, 16, 0, 1, 8, 127, 255, 9, 7, + floatformat_intbit_no, + "floatformat_bfloat16_big", + floatformat_always_valid, + NULL +}; + +const struct floatformat floatformat_bfloat16_little = +{ + floatformat_little, 16, 0, 1, 8, 127, 255, 9, 7, + floatformat_intbit_no, + "floatformat_bfloat16_little", + floatformat_always_valid, + NULL +}; #ifndef min #define min(a, b) ((a) < (b) ? (a) : (b)) diff -Nru gdb-9.1/libiberty/fnmatch.c gdb-10.2/libiberty/fnmatch.c --- gdb-9.1/libiberty/fnmatch.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/fnmatch.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 1991-2019 Free Software Foundation, Inc. +/* Copyright (C) 1991-2020 Free Software Foundation, Inc. NOTE: This source is derived from an old version taken from the GNU C Library (glibc). diff -Nru gdb-9.1/libiberty/fopen_unlocked.c gdb-10.2/libiberty/fopen_unlocked.c --- gdb-9.1/libiberty/fopen_unlocked.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/fopen_unlocked.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Implement fopen_unlocked and related functions. - Copyright (C) 2005-2019 Free Software Foundation, Inc. + Copyright (C) 2005-2020 Free Software Foundation, Inc. Written by Kaveh R. Ghazi <ghazi@caip.rutgers.edu>. This file is part of the libiberty library. diff -Nru gdb-9.1/libiberty/functions.texi gdb-10.2/libiberty/functions.texi --- gdb-9.1/libiberty/functions.texi 2019-05-07 17:33:58.000000000 +0000 +++ gdb-10.2/libiberty/functions.texi 2020-09-13 02:33:41.000000000 +0000 @@ -84,6 +84,23 @@ @end deftypefn +@c bsearch_r.c:33 +@deftypefn Supplemental void* bsearch_r (const void *@var{key}, @ + const void *@var{base}, size_t @var{nmemb}, size_t @var{size}, @ + int (*@var{compar})(const void *, const void *, void *), void *@var{arg}) + +Performs a search over an array of @var{nmemb} elements pointed to by +@var{base} for a member that matches the object pointed to by @var{key}. +The size of each member is specified by @var{size}. The array contents +should be sorted in ascending order according to the @var{compar} +comparison function. This routine should take three arguments: the first +two point to the @var{key} and to an array member, and the last is passed +down unchanged from @code{bsearch_r}'s last argument. It should return an +integer less than, equal to, or greater than zero if the @var{key} object +is respectively less than, matching, or greater than the array member. + +@end deftypefn + @c argv.c:138 @deftypefn Extension char** buildargv (char *@var{sp}) @@ -175,7 +192,7 @@ @end deftypefn -@c argv.c:487 +@c argv.c:495 @deftypefn Extension int countargv (char * const *@var{argv}) Return the number of elements in @var{argv}. @@ -240,7 +257,7 @@ @end deftypefn -@c argv.c:344 +@c argv.c:352 @deftypefn Extension void expandargv (int *@var{argcp}, char ***@var{argvp}) The @var{argcp} and @code{argvp} arguments are pointers to the usual diff -Nru gdb-9.1/libiberty/gather-docs gdb-10.2/libiberty/gather-docs --- gdb-9.1/libiberty/gather-docs 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/gather-docs 2021-04-25 04:06:26.000000000 +0000 @@ -1,7 +1,7 @@ #!/usr/bin/perl # -*- perl -*- -# Copyright (C) 2001-2019 Free Software Foundation, Inc. +# Copyright (C) 2001-2020 Free Software Foundation, Inc. # # This file is part of the libiberty library. # Libiberty is free software; you can redistribute it and/or diff -Nru gdb-9.1/libiberty/getopt1.c gdb-10.2/libiberty/getopt1.c --- gdb-9.1/libiberty/getopt1.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/getopt1.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* getopt_long and getopt_long_only entry points for GNU getopt. - Copyright (C) 1987-2019 Free Software Foundation, Inc. + Copyright (C) 1987-2020 Free Software Foundation, Inc. NOTE: This source is derived from an old version taken from the GNU C Library (glibc). diff -Nru gdb-9.1/libiberty/getopt.c gdb-10.2/libiberty/getopt.c --- gdb-9.1/libiberty/getopt.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/getopt.c 2021-04-25 04:06:26.000000000 +0000 @@ -3,7 +3,7 @@ "Keep this file name-space clean" means, talk to drepper@gnu.org before changing it! - Copyright (C) 1987-2019 Free Software Foundation, Inc. + Copyright (C) 1987-2020 Free Software Foundation, Inc. NOTE: This source is derived from an old version taken from the GNU C Library (glibc). diff -Nru gdb-9.1/libiberty/getruntime.c gdb-10.2/libiberty/getruntime.c --- gdb-9.1/libiberty/getruntime.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/getruntime.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Return time used so far, in microseconds. - Copyright (C) 1994-2019 Free Software Foundation, Inc. + Copyright (C) 1994-2020 Free Software Foundation, Inc. This file is part of the libiberty library. Libiberty is free software; you can redistribute it and/or diff -Nru gdb-9.1/libiberty/hashtab.c gdb-10.2/libiberty/hashtab.c --- gdb-9.1/libiberty/hashtab.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/hashtab.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* An expandable hash tables datatype. - Copyright (C) 1999-2019 Free Software Foundation, Inc. + Copyright (C) 1999-2020 Free Software Foundation, Inc. Contributed by Vladimir Makarov (vmakarov@cygnus.com). This file is part of the libiberty library. @@ -709,7 +709,7 @@ element in the hash table, this function does nothing. */ void -htab_remove_elt (htab_t htab, PTR element) +htab_remove_elt (htab_t htab, const PTR element) { htab_remove_elt_with_hash (htab, element, (*htab->hash_f) (element)); } @@ -720,7 +720,7 @@ function does nothing. */ void -htab_remove_elt_with_hash (htab_t htab, PTR element, hashval_t hash) +htab_remove_elt_with_hash (htab_t htab, const PTR element, hashval_t hash) { PTR *slot; diff -Nru gdb-9.1/libiberty/hex.c gdb-10.2/libiberty/hex.c --- gdb-9.1/libiberty/hex.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/hex.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Hex character manipulation support. - Copyright (C) 1995-2019 Free Software Foundation, Inc. + Copyright (C) 1995-2020 Free Software Foundation, Inc. This file is part of the libiberty library. Libiberty is free software; you can redistribute it and/or diff -Nru gdb-9.1/libiberty/lbasename.c gdb-10.2/libiberty/lbasename.c --- gdb-9.1/libiberty/lbasename.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/lbasename.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Libiberty basename. Like basename, but is not overridden by the system C library. - Copyright (C) 2001-2019 Free Software Foundation, Inc. + Copyright (C) 2001-2020 Free Software Foundation, Inc. This file is part of the libiberty library. Libiberty is free software; you can redistribute it and/or diff -Nru gdb-9.1/libiberty/libiberty.texi gdb-10.2/libiberty/libiberty.texi --- gdb-9.1/libiberty/libiberty.texi 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/libiberty.texi 2021-04-25 04:06:26.000000000 +0000 @@ -24,7 +24,7 @@ @ifinfo This manual describes the GNU @libib library of utility subroutines. -Copyright @copyright{} 2001-2019 Free Software Foundation, Inc. +Copyright @copyright{} 2001-2020 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 @@ -50,7 +50,7 @@ @vskip 0pt plus 1filll -Copyright @copyright{} 2001-2019 Free Software Foundation, Inc. +Copyright @copyright{} 2001-2020 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 diff -Nru gdb-9.1/libiberty/lrealpath.c gdb-10.2/libiberty/lrealpath.c --- gdb-9.1/libiberty/lrealpath.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/lrealpath.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,7 +1,7 @@ /* Libiberty realpath. Like realpath, but more consistent behavior. Based on gdb_realpath from GDB. - Copyright (C) 2003-2019 Free Software Foundation, Inc. + Copyright (C) 2003-2020 Free Software Foundation, Inc. This file is part of the libiberty library. @@ -49,9 +49,6 @@ #ifdef HAVE_STRING_H #include <string.h> #endif -#ifdef HAVE_FCNTL_H -#include <fcntl.h> -#endif /* On GNU libc systems the declaration is only visible with _GNU_SOURCE. */ #if defined(HAVE_CANONICALIZE_FILE_NAME) \ @@ -158,16 +155,3 @@ /* This system is a lost cause, just duplicate the filename. */ return strdup (filename); } - -/* Return true when FD file descriptor exists. */ - -int -is_valid_fd (int fd) -{ -#if defined(_WIN32) - HANDLE h = (HANDLE) _get_osfhandle (fd); - return h != (HANDLE) -1; -#else - return fcntl (fd, F_GETFD) >= 0; -#endif -} diff -Nru gdb-9.1/libiberty/maint-tool gdb-10.2/libiberty/maint-tool --- gdb-9.1/libiberty/maint-tool 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/maint-tool 2021-04-25 04:06:26.000000000 +0000 @@ -1,7 +1,7 @@ #!/usr/bin/perl # -*- perl -*- -# Copyright (C) 2001-2019 Free Software Foundation, Inc. +# Copyright (C) 2001-2020 Free Software Foundation, Inc. # # This file is part of the libiberty library. # Libiberty is free software; you can redistribute it and/or diff -Nru gdb-9.1/libiberty/Makefile.in gdb-10.2/libiberty/Makefile.in --- gdb-9.1/libiberty/Makefile.in 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/Makefile.in 2021-04-25 04:06:26.000000000 +0000 @@ -1,7 +1,7 @@ # Makefile for the libiberty library. # Originally written by K. Richard Pixley <rich@cygnus.com>. # -# Copyright (C) 1990-2019 Free Software Foundation, Inc. +# Copyright (C) 1990-2020 Free Software Foundation, Inc. # # This file is part of the libiberty library. # Libiberty is free software; you can redistribute it and/or @@ -112,7 +112,8 @@ INCDIR=$(srcdir)/$(MULTISRCTOP)../include COMPILE.c = $(CC) -c @DEFS@ $(CFLAGS) $(CPPFLAGS) -I. -I$(INCDIR) \ - $(HDEFINES) @ac_libiberty_warn_cflags@ -D_GNU_SOURCE + $(HDEFINES) @ac_libiberty_warn_cflags@ -D_GNU_SOURCE \ + @CET_HOST_FLAGS@ # Just to make sure we don't use a built-in rule with VPATH .c.$(objext): @@ -123,11 +124,11 @@ # CONFIGURED_OFILES and funcs in configure.ac. Also run "make maint-deps" # to build the new rules. CFILES = alloca.c argv.c asprintf.c atexit.c \ - basename.c bcmp.c bcopy.c bsearch.c bzero.c \ + basename.c bcmp.c bcopy.c bsearch.c bsearch_r.c bzero.c \ calloc.c choose-temp.c clock.c concat.c cp-demangle.c \ cp-demint.c cplus-dem.c crc32.c \ d-demangle.c dwarfnames.c dyn-string.c \ - fdmatch.c ffs.c fibheap.c filename_cmp.c floatformat.c \ + fdmatch.c ffs.c fibheap.c filedescriptor.c filename_cmp.c floatformat.c \ fnmatch.c fopen_unlocked.c \ getcwd.c getopt.c getopt1.c getpagesize.c getpwd.c getruntime.c \ gettimeofday.c \ @@ -167,10 +168,12 @@ ./regex.$(objext) ./cplus-dem.$(objext) ./cp-demangle.$(objext) \ ./md5.$(objext) ./sha1.$(objext) ./alloca.$(objext) \ ./argv.$(objext) \ + ./bsearch_r.$(objext) \ ./choose-temp.$(objext) ./concat.$(objext) \ ./cp-demint.$(objext) ./crc32.$(objext) ./d-demangle.$(objext) \ ./dwarfnames.$(objext) ./dyn-string.$(objext) \ ./fdmatch.$(objext) ./fibheap.$(objext) \ + ./filedescriptor.$(objext) \ ./filename_cmp.$(objext) ./floatformat.$(objext) \ ./fnmatch.$(objext) ./fopen_unlocked.$(objext) \ ./getopt.$(objext) ./getopt1.$(objext) ./getpwd.$(objext) \ @@ -480,6 +483,8 @@ AUTOCONF = autoconf configure_deps = $(srcdir)/aclocal.m4 \ $(srcdir)/../config/acx.m4 \ + $(srcdir)/../config/cet.m4 \ + $(srcdir)/../config/enable.m4 \ $(srcdir)/../config/no-executables.m4 \ $(srcdir)/../config/override.m4 \ $(srcdir)/../config/picflag.m4 \ @@ -597,6 +602,15 @@ else true; fi $(COMPILE.c) $(srcdir)/bsearch.c $(OUTPUT_OPTION) +./bsearch_r.$(objext): $(srcdir)/bsearch_r.c config.h $(INCDIR)/ansidecl.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/bsearch_r.c -o pic/$@; \ + else true; fi + if [ x"$(NOASANFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/bsearch_r.c -o noasan/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/bsearch_r.c $(OUTPUT_OPTION) + ./bzero.$(objext): $(srcdir)/bzero.c if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/bzero.c -o pic/$@; \ @@ -756,6 +770,17 @@ else true; fi $(COMPILE.c) $(srcdir)/fibheap.c $(OUTPUT_OPTION) +./filedescriptor.$(objext): $(srcdir)/filedescriptor.c config.h $(INCDIR)/ansidecl.h \ + $(INCDIR)/libiberty.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/filedescriptor.c -o pic/$@; \ + else true; fi + if [ x"$(NOASANFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/filedescriptor.c -o noasan/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/filedescriptor.c $(OUTPUT_OPTION) + + ./filename_cmp.$(objext): $(srcdir)/filename_cmp.c config.h $(INCDIR)/ansidecl.h \ $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ $(INCDIR)/safe-ctype.h diff -Nru gdb-9.1/libiberty/make-relative-prefix.c gdb-10.2/libiberty/make-relative-prefix.c --- gdb-9.1/libiberty/make-relative-prefix.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/make-relative-prefix.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Relative (relocatable) prefix support. - Copyright (C) 1987-2019 Free Software Foundation, Inc. + Copyright (C) 1987-2020 Free Software Foundation, Inc. This file is part of libiberty. @@ -122,6 +122,9 @@ const char *p, *q; int ch; + if (!*name) + return NULL; + /* Count the number of directories. Special case MSDOS disk names as part of the initial directory. */ p = name; diff -Nru gdb-9.1/libiberty/make-temp-file.c gdb-10.2/libiberty/make-temp-file.c --- gdb-9.1/libiberty/make-temp-file.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/make-temp-file.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Utility to pick a temporary filename prefix. - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of the libiberty library. Libiberty is free software; you can redistribute it and/or diff -Nru gdb-9.1/libiberty/md5.c gdb-10.2/libiberty/md5.c --- gdb-9.1/libiberty/md5.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/md5.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* md5.c - Functions to compute MD5 message digest of files or memory blocks according to the definition of MD5 in RFC 1321 from April 1992. - Copyright (C) 1995-2019 Free Software Foundation, Inc. + Copyright (C) 1995-2020 Free Software Foundation, Inc. NOTE: This source is derived from an old version taken from the GNU C Library (glibc). diff -Nru gdb-9.1/libiberty/memmem.c gdb-10.2/libiberty/memmem.c --- gdb-9.1/libiberty/memmem.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/memmem.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 1991-2019 Free Software Foundation, Inc. +/* Copyright (C) 1991-2020 Free Software Foundation, Inc. This file is part of the GNU C Library. This program is free software; you can redistribute it and/or modify diff -Nru gdb-9.1/libiberty/mempcpy.c gdb-10.2/libiberty/mempcpy.c --- gdb-9.1/libiberty/mempcpy.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/mempcpy.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Implement the mempcpy function. - Copyright (C) 2003-2019 Free Software Foundation, Inc. + Copyright (C) 2003-2020 Free Software Foundation, Inc. Written by Kaveh R. Ghazi <ghazi@caip.rutgers.edu>. This file is part of the libiberty library. diff -Nru gdb-9.1/libiberty/mkstemps.c gdb-10.2/libiberty/mkstemps.c --- gdb-9.1/libiberty/mkstemps.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/mkstemps.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 1991-2019 Free Software Foundation, Inc. +/* Copyright (C) 1991-2020 Free Software Foundation, Inc. This file is derived from mkstemp.c from the GNU C Library. The GNU C Library is free software; you can redistribute it and/or diff -Nru gdb-9.1/libiberty/objalloc.c gdb-10.2/libiberty/objalloc.c --- gdb-9.1/libiberty/objalloc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/objalloc.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* objalloc.c -- routines to allocate memory for objects - Copyright (C) 1997-2019 Free Software Foundation, Inc. + Copyright (C) 1997-2020 Free Software Foundation, Inc. Written by Ian Lance Taylor, Cygnus Solutions. This program is free software; you can redistribute it and/or modify it diff -Nru gdb-9.1/libiberty/obstack.c gdb-10.2/libiberty/obstack.c --- gdb-9.1/libiberty/obstack.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/obstack.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* obstack.c - subroutines used implicitly by object stack macros - Copyright (C) 1988-2019 Free Software Foundation, Inc. + Copyright (C) 1988-2020 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or diff -Nru gdb-9.1/libiberty/partition.c gdb-10.2/libiberty/partition.c --- gdb-9.1/libiberty/partition.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/partition.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* List implementation of a partition of consecutive integers. - Copyright (C) 2000-2019 Free Software Foundation, Inc. + Copyright (C) 2000-2020 Free Software Foundation, Inc. Contributed by CodeSourcery, LLC. This file is part of GNU CC. diff -Nru gdb-9.1/libiberty/pex-common.c gdb-10.2/libiberty/pex-common.c --- gdb-9.1/libiberty/pex-common.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/pex-common.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Common code for executing a program in a sub-process. - Copyright (C) 2005-2019 Free Software Foundation, Inc. + Copyright (C) 2005-2020 Free Software Foundation, Inc. Written by Ian Lance Taylor <ian@airs.com>. This file is part of the libiberty library. diff -Nru gdb-9.1/libiberty/pex-common.h gdb-10.2/libiberty/pex-common.h --- gdb-9.1/libiberty/pex-common.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/pex-common.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Utilities to execute a program in a subprocess (possibly linked by pipes with other subprocesses), and wait for it. Shared logic. - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of the libiberty library. Libiberty is free software; you can redistribute it and/or diff -Nru gdb-9.1/libiberty/pex-djgpp.c gdb-10.2/libiberty/pex-djgpp.c --- gdb-9.1/libiberty/pex-djgpp.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/pex-djgpp.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Utilities to execute a program in a subprocess (possibly linked by pipes with other subprocesses), and wait for it. DJGPP specialization. - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of the libiberty library. Libiberty is free software; you can redistribute it and/or diff -Nru gdb-9.1/libiberty/pexecute.c gdb-10.2/libiberty/pexecute.c --- gdb-9.1/libiberty/pexecute.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/pexecute.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Utilities to execute a program in a subprocess (possibly linked by pipes with other subprocesses), and wait for it. - Copyright (C) 2004-2019 Free Software Foundation, Inc. + Copyright (C) 2004-2020 Free Software Foundation, Inc. This file is part of the libiberty library. Libiberty is free software; you can redistribute it and/or diff -Nru gdb-9.1/libiberty/pex-msdos.c gdb-10.2/libiberty/pex-msdos.c --- gdb-9.1/libiberty/pex-msdos.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/pex-msdos.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Utilities to execute a program in a subprocess (possibly linked by pipes with other subprocesses), and wait for it. Generic MSDOS specialization. - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of the libiberty library. Libiberty is free software; you can redistribute it and/or diff -Nru gdb-9.1/libiberty/pex-one.c gdb-10.2/libiberty/pex-one.c --- gdb-9.1/libiberty/pex-one.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/pex-one.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Execute a program and wait for a result. - Copyright (C) 2005-2019 Free Software Foundation, Inc. + Copyright (C) 2005-2020 Free Software Foundation, Inc. This file is part of the libiberty library. Libiberty is free software; you can redistribute it and/or diff -Nru gdb-9.1/libiberty/pex-unix.c gdb-10.2/libiberty/pex-unix.c --- gdb-9.1/libiberty/pex-unix.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/pex-unix.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,7 +1,7 @@ /* Utilities to execute a program in a subprocess (possibly linked by pipes with other subprocesses), and wait for it. Generic Unix version (also used for UWIN and VMS). - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of the libiberty library. Libiberty is free software; you can redistribute it and/or diff -Nru gdb-9.1/libiberty/pex-win32.c gdb-10.2/libiberty/pex-win32.c --- gdb-9.1/libiberty/pex-win32.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/pex-win32.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Utilities to execute a program in a subprocess (possibly linked by pipes with other subprocesses), and wait for it. Generic Win32 specialization. - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of the libiberty library. Libiberty is free software; you can redistribute it and/or diff -Nru gdb-9.1/libiberty/physmem.c gdb-10.2/libiberty/physmem.c --- gdb-9.1/libiberty/physmem.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/physmem.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Calculate the size of physical memory. - Copyright (C) 2000-2019 Free Software Foundation, Inc. + Copyright (C) 2000-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/libiberty/putenv.c gdb-10.2/libiberty/putenv.c --- gdb-9.1/libiberty/putenv.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/putenv.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 1991-2019 Free Software Foundation, Inc. +/* Copyright (C) 1991-2020 Free Software Foundation, Inc. This file based on putenv.c in the GNU C Library. The GNU C Library is free software; you can redistribute it and/or diff -Nru gdb-9.1/libiberty/regex.c gdb-10.2/libiberty/regex.c --- gdb-9.1/libiberty/regex.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/regex.c 2021-04-25 04:06:26.000000000 +0000 @@ -3,7 +3,7 @@ (Implements POSIX draft P1003.2/D11.2, except for some of the internationalization features.) - Copyright (C) 1993-2019 Free Software Foundation, Inc. + Copyright (C) 1993-2020 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or diff -Nru gdb-9.1/libiberty/rust-demangle.c gdb-10.2/libiberty/rust-demangle.c --- gdb-9.1/libiberty/rust-demangle.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/rust-demangle.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,7 @@ /* Demangler for the Rust programming language - Copyright (C) 2016-2019 Free Software Foundation, Inc. + Copyright (C) 2016-2020 Free Software Foundation, Inc. Written by David Tolnay (dtolnay@gmail.com). + Rewritten by Eduard-Mihai Burtescu (eddyb@lyken.rs) for v0 support. This file is part of the libiberty library. Libiberty is free software; you can redistribute it and/or @@ -33,9 +34,11 @@ #include "safe-ctype.h" +#include <inttypes.h> #include <sys/types.h> #include <string.h> #include <stdio.h> +#include <stdlib.h> #ifdef HAVE_STRING_H #include <string.h> @@ -47,303 +50,1473 @@ #include <demangle.h> #include "libiberty.h" -#include "rust-demangle.h" +struct rust_demangler +{ + const char *sym; + size_t sym_len; -/* Mangled Rust symbols look like this: - _$LT$std..sys..fd..FileDesc$u20$as$u20$core..ops..Drop$GT$::drop::hc68340e1baa4987a + void *callback_opaque; + demangle_callbackref callback; - The original symbol is: - <std::sys::fd::FileDesc as core::ops::Drop>::drop + /* Position of the next character to read from the symbol. */ + size_t next; - The last component of the path is a 64-bit hash in lowercase hex, - prefixed with "h". Rust does not have a global namespace between - crates, an illusion which Rust maintains by using the hash to - distinguish things that would otherwise have the same symbol. + /* Non-zero if any error occurred. */ + int errored; - Any path component not starting with a XID_Start character is - prefixed with "_". + /* Non-zero if nothing should be printed. */ + int skipping_printing; - The following escape sequences are used: + /* Non-zero if printing should be verbose (e.g. include hashes). */ + int verbose; - "," => $C$ - "@" => $SP$ - "*" => $BP$ - "&" => $RF$ - "<" => $LT$ - ">" => $GT$ - "(" => $LP$ - ")" => $RP$ - " " => $u20$ - "\"" => $u22$ - "'" => $u27$ - "+" => $u2b$ - ";" => $u3b$ - "[" => $u5b$ - "]" => $u5d$ - "{" => $u7b$ - "}" => $u7d$ - "~" => $u7e$ + /* Rust mangling version, with legacy mangling being -1. */ + int version; - A double ".." means "::" and a single "." means "-". + uint64_t bound_lifetime_depth; +}; - The only characters allowed in the mangled symbol are a-zA-Z0-9 and _.:$ */ +/* Parsing functions. */ -static const char *hash_prefix = "::h"; -static const size_t hash_prefix_len = 3; -static const size_t hash_len = 16; +static char +peek (const struct rust_demangler *rdm) +{ + if (rdm->next < rdm->sym_len) + return rdm->sym[rdm->next]; + return 0; +} + +static int +eat (struct rust_demangler *rdm, char c) +{ + if (peek (rdm) == c) + { + rdm->next++; + return 1; + } + else + return 0; +} -static int is_prefixed_hash (const char *start); -static int looks_like_rust (const char *sym, size_t len); -static int unescape (const char **in, char **out, const char *seq, char value); +static char +next (struct rust_demangler *rdm) +{ + char c = peek (rdm); + if (!c) + rdm->errored = 1; + else + rdm->next++; + return c; +} -/* INPUT: sym: symbol that has been through C++ (gnu v3) demangling +static uint64_t +parse_integer_62 (struct rust_demangler *rdm) +{ + char c; + uint64_t x; - This function looks for the following indicators: + if (eat (rdm, '_')) + return 0; - 1. The hash must consist of "h" followed by 16 lowercase hex digits. + x = 0; + while (!eat (rdm, '_')) + { + c = next (rdm); + x *= 62; + if (ISDIGIT (c)) + x += c - '0'; + else if (ISLOWER (c)) + x += 10 + (c - 'a'); + else if (ISUPPER (c)) + x += 10 + 26 + (c - 'A'); + else + { + rdm->errored = 1; + return 0; + } + } + return x + 1; +} - 2. As a sanity check, the hash must use between 5 and 15 of the 16 - possible hex digits. This is true of 99.9998% of hashes so once - in your life you may see a false negative. The point is to - notice path components that could be Rust hashes but are - probably not, like "haaaaaaaaaaaaaaaa". In this case a false - positive (non-Rust symbol has an important path component - removed because it looks like a Rust hash) is worse than a false - negative (the rare Rust symbol is not demangled) so this sets - the balance in favor of false negatives. +static uint64_t +parse_opt_integer_62 (struct rust_demangler *rdm, char tag) +{ + if (!eat (rdm, tag)) + return 0; + return 1 + parse_integer_62 (rdm); +} - 3. There must be no characters other than a-zA-Z0-9 and _.:$ +static uint64_t +parse_disambiguator (struct rust_demangler *rdm) +{ + return parse_opt_integer_62 (rdm, 's'); +} - 4. There must be no unrecognized $-sign sequences. +static size_t +parse_hex_nibbles (struct rust_demangler *rdm, uint64_t *value) +{ + char c; + size_t hex_len; - 5. There must be no sequence of three or more dots in a row ("..."). */ + hex_len = 0; + *value = 0; -int -rust_is_mangled (const char *sym) + while (!eat (rdm, '_')) + { + *value <<= 4; + + c = next (rdm); + if (ISDIGIT (c)) + *value |= c - '0'; + else if (c >= 'a' && c <= 'f') + *value |= 10 + (c - 'a'); + else + { + rdm->errored = 1; + return 0; + } + hex_len++; + } + + return hex_len; +} + +struct rust_mangled_ident { - size_t len, len_without_hash; + /* ASCII part of the identifier. */ + const char *ascii; + size_t ascii_len; + + /* Punycode insertion codes for Unicode codepoints, if any. */ + const char *punycode; + size_t punycode_len; +}; - if (!sym) - return 0; +static struct rust_mangled_ident +parse_ident (struct rust_demangler *rdm) +{ + char c; + size_t start, len; + int is_punycode = 0; + struct rust_mangled_ident ident; + + ident.ascii = NULL; + ident.ascii_len = 0; + ident.punycode = NULL; + ident.punycode_len = 0; + + if (rdm->version != -1) + is_punycode = eat (rdm, 'u'); + + c = next (rdm); + if (!ISDIGIT (c)) + { + rdm->errored = 1; + return ident; + } + len = c - '0'; + + if (c != '0') + while (ISDIGIT (peek (rdm))) + len = len * 10 + (next (rdm) - '0'); + + /* Skip past the optional `_` separator (v0). */ + if (rdm->version != -1) + eat (rdm, '_'); + + start = rdm->next; + rdm->next += len; + /* Check for overflows. */ + if ((start > rdm->next) || (rdm->next > rdm->sym_len)) + { + rdm->errored = 1; + return ident; + } + + ident.ascii = rdm->sym + start; + ident.ascii_len = len; + + if (is_punycode) + { + ident.punycode_len = 0; + while (ident.ascii_len > 0) + { + ident.ascii_len--; + + /* The last '_' is a separator between ascii & punycode. */ + if (ident.ascii[ident.ascii_len] == '_') + break; + + ident.punycode_len++; + } + if (!ident.punycode_len) + { + rdm->errored = 1; + return ident; + } + ident.punycode = ident.ascii + (len - ident.punycode_len); + } - len = strlen (sym); - if (len <= hash_prefix_len + hash_len) - /* Not long enough to contain "::h" + hash + something else */ - return 0; + if (ident.ascii_len == 0) + ident.ascii = NULL; - len_without_hash = len - (hash_prefix_len + hash_len); - if (!is_prefixed_hash (sym + len_without_hash)) - return 0; + return ident; +} + +/* Printing functions. */ + +static void +print_str (struct rust_demangler *rdm, const char *data, size_t len) +{ + if (!rdm->errored && !rdm->skipping_printing) + rdm->callback (data, len, rdm->callback_opaque); +} + +#define PRINT(s) print_str (rdm, s, strlen (s)) - return looks_like_rust (sym, len_without_hash); +static void +print_uint64 (struct rust_demangler *rdm, uint64_t x) +{ + char s[21]; + snprintf (s, 21, "%" PRIu64, x); + PRINT (s); } -/* A hash is the prefix "::h" followed by 16 lowercase hex digits. The - hex digits must comprise between 5 and 15 (inclusive) distinct - digits. */ +static void +print_uint64_hex (struct rust_demangler *rdm, uint64_t x) +{ + char s[17]; + snprintf (s, 17, "%" PRIx64, x); + PRINT (s); +} +/* Return a 0x0-0xf value if the char is 0-9a-f, and -1 otherwise. */ static int -is_prefixed_hash (const char *str) +decode_lower_hex_nibble (char nibble) { - const char *end; - char seen[16]; - size_t i; - int count; + if ('0' <= nibble && nibble <= '9') + return nibble - '0'; + if ('a' <= nibble && nibble <= 'f') + return 0xa + (nibble - 'a'); + return -1; +} - if (strncmp (str, hash_prefix, hash_prefix_len)) +/* Return the unescaped character for a "$...$" escape, or 0 if invalid. */ +static char +decode_legacy_escape (const char *e, size_t len, size_t *out_len) +{ + char c = 0; + size_t escape_len = 0; + int lo_nibble = -1, hi_nibble = -1; + + if (len < 3 || e[0] != '$') return 0; - str += hash_prefix_len; - memset (seen, 0, sizeof(seen)); - for (end = str + hash_len; str < end; str++) - if (*str >= '0' && *str <= '9') - seen[*str - '0'] = 1; - else if (*str >= 'a' && *str <= 'f') - seen[*str - 'a' + 10] = 1; - else - return 0; + e++; + len--; - /* Count how many distinct digits seen */ - count = 0; - for (i = 0; i < 16; i++) - if (seen[i]) - count++; + if (e[0] == 'C') + { + escape_len = 1; + + c = ','; + } + else if (len > 2) + { + escape_len = 2; + + if (e[0] == 'S' && e[1] == 'P') + c = '@'; + else if (e[0] == 'B' && e[1] == 'P') + c = '*'; + else if (e[0] == 'R' && e[1] == 'F') + c = '&'; + else if (e[0] == 'L' && e[1] == 'T') + c = '<'; + else if (e[0] == 'G' && e[1] == 'T') + c = '>'; + else if (e[0] == 'L' && e[1] == 'P') + c = '('; + else if (e[0] == 'R' && e[1] == 'P') + c = ')'; + else if (e[0] == 'u' && len > 3) + { + escape_len = 3; + + hi_nibble = decode_lower_hex_nibble (e[1]); + if (hi_nibble < 0) + return 0; + lo_nibble = decode_lower_hex_nibble (e[2]); + if (lo_nibble < 0) + return 0; + + /* Only allow non-control ASCII characters. */ + if (hi_nibble > 7) + return 0; + c = (hi_nibble << 4) | lo_nibble; + if (c < 0x20) + return 0; + } + } + + if (!c || len <= escape_len || e[escape_len] != '$') + return 0; + + *out_len = 2 + escape_len; + return c; +} + +static void +print_ident (struct rust_demangler *rdm, struct rust_mangled_ident ident) +{ + char unescaped; + uint8_t *out, *p, d; + size_t len, cap, punycode_pos, j; + /* Punycode parameters and state. */ + uint32_t c; + size_t base, t_min, t_max, skew, damp, bias, i; + size_t delta, w, k, t; + + if (rdm->errored || rdm->skipping_printing) + return; + + if (rdm->version == -1) + { + /* Ignore leading underscores preceding escape sequences. + The mangler inserts an underscore to make sure the + identifier begins with a XID_Start character. */ + if (ident.ascii_len >= 2 && ident.ascii[0] == '_' + && ident.ascii[1] == '$') + { + ident.ascii++; + ident.ascii_len--; + } + + while (ident.ascii_len > 0) + { + /* Handle legacy escape sequences ("$...$", ".." or "."). */ + if (ident.ascii[0] == '$') + { + unescaped + = decode_legacy_escape (ident.ascii, ident.ascii_len, &len); + if (unescaped) + print_str (rdm, &unescaped, 1); + else + { + /* Unexpected escape sequence, print the rest verbatim. */ + print_str (rdm, ident.ascii, ident.ascii_len); + return; + } + } + else if (ident.ascii[0] == '.') + { + if (ident.ascii_len >= 2 && ident.ascii[1] == '.') + { + /* ".." becomes "::" */ + PRINT ("::"); + len = 2; + } + else + { + PRINT ("."); + len = 1; + } + } + else + { + /* Print everything before the next escape sequence, at once. */ + for (len = 0; len < ident.ascii_len; len++) + if (ident.ascii[len] == '$' || ident.ascii[len] == '.') + break; + + print_str (rdm, ident.ascii, len); + } + + ident.ascii += len; + ident.ascii_len -= len; + } + + return; + } + + if (!ident.punycode) + { + print_str (rdm, ident.ascii, ident.ascii_len); + return; + } + + len = 0; + cap = 4; + while (cap < ident.ascii_len) + { + cap *= 2; + /* Check for overflows. */ + if ((cap * 4) / 4 != cap) + { + rdm->errored = 1; + return; + } + } + + /* Store the output codepoints as groups of 4 UTF-8 bytes. */ + out = (uint8_t *)malloc (cap * 4); + if (!out) + { + rdm->errored = 1; + return; + } + + /* Populate initial output from ASCII fragment. */ + for (len = 0; len < ident.ascii_len; len++) + { + p = out + 4 * len; + p[0] = 0; + p[1] = 0; + p[2] = 0; + p[3] = ident.ascii[len]; + } + + /* Punycode parameters and initial state. */ + base = 36; + t_min = 1; + t_max = 26; + skew = 38; + damp = 700; + bias = 72; + i = 0; + c = 0x80; + + punycode_pos = 0; + while (punycode_pos < ident.punycode_len) + { + /* Read one delta value. */ + delta = 0; + w = 1; + k = 0; + do + { + k += base; + t = k < bias ? 0 : (k - bias); + if (t < t_min) + t = t_min; + if (t > t_max) + t = t_max; + + if (punycode_pos >= ident.punycode_len) + goto cleanup; + d = ident.punycode[punycode_pos++]; + + if (ISLOWER (d)) + d = d - 'a'; + else if (ISDIGIT (d)) + d = 26 + (d - '0'); + else + { + rdm->errored = 1; + goto cleanup; + } + + delta += d * w; + w *= base - t; + } + while (d >= t); + + /* Compute the new insert position and character. */ + len++; + i += delta; + c += i / len; + i %= len; + + /* Ensure enough space is available. */ + if (cap < len) + { + cap *= 2; + /* Check for overflows. */ + if ((cap * 4) / 4 != cap || cap < len) + { + rdm->errored = 1; + goto cleanup; + } + } + p = (uint8_t *)realloc (out, cap * 4); + if (!p) + { + rdm->errored = 1; + goto cleanup; + } + out = p; + + /* Move the characters after the insert position. */ + p = out + i * 4; + memmove (p + 4, p, (len - i - 1) * 4); + + /* Insert the new character, as UTF-8 bytes. */ + p[0] = c >= 0x10000 ? 0xf0 | (c >> 18) : 0; + p[1] = c >= 0x800 ? (c < 0x10000 ? 0xe0 : 0x80) | ((c >> 12) & 0x3f) : 0; + p[2] = (c < 0x800 ? 0xc0 : 0x80) | ((c >> 6) & 0x3f); + p[3] = 0x80 | (c & 0x3f); + + /* If there are no more deltas, decoding is complete. */ + if (punycode_pos == ident.punycode_len) + break; + + i++; + + /* Perform bias adaptation. */ + delta /= damp; + damp = 2; + + delta += delta / len; + k = 0; + while (delta > ((base - t_min) * t_max) / 2) + { + delta /= base - t_min; + k += base; + } + bias = k + ((base - t_min + 1) * delta) / (delta + skew); + } + + /* Remove all the 0 bytes to leave behind an UTF-8 string. */ + for (i = 0, j = 0; i < len * 4; i++) + if (out[i] != 0) + out[j++] = out[i]; + + print_str (rdm, (const char *)out, j); + +cleanup: + free (out); +} + +/* Print the lifetime according to the previously decoded index. + An index of `0` always refers to `'_`, but starting with `1`, + indices refer to late-bound lifetimes introduced by a binder. */ +static void +print_lifetime_from_index (struct rust_demangler *rdm, uint64_t lt) +{ + char c; + uint64_t depth; + + PRINT ("'"); + if (lt == 0) + { + PRINT ("_"); + return; + } + + depth = rdm->bound_lifetime_depth - lt; + /* Try to print lifetimes alphabetically first. */ + if (depth < 26) + { + c = 'a' + depth; + print_str (rdm, &c, 1); + } + else + { + /* Use `'_123` after running out of letters. */ + PRINT ("_"); + print_uint64 (rdm, depth); + } +} + +/* Demangling functions. */ + +static void demangle_binder (struct rust_demangler *rdm); +static void demangle_path (struct rust_demangler *rdm, int in_value); +static void demangle_generic_arg (struct rust_demangler *rdm); +static void demangle_type (struct rust_demangler *rdm); +static int demangle_path_maybe_open_generics (struct rust_demangler *rdm); +static void demangle_dyn_trait (struct rust_demangler *rdm); +static void demangle_const (struct rust_demangler *rdm); +static void demangle_const_uint (struct rust_demangler *rdm); +static void demangle_const_int (struct rust_demangler *rdm); +static void demangle_const_bool (struct rust_demangler *rdm); +static void demangle_const_char (struct rust_demangler *rdm); + +/* Optionally enter a binder ('G') for late-bound lifetimes, + printing e.g. `for<'a, 'b> `, and make those lifetimes visible + to the caller (via depth level, which the caller should reset). */ +static void +demangle_binder (struct rust_demangler *rdm) +{ + uint64_t i, bound_lifetimes; + + if (rdm->errored) + return; + + bound_lifetimes = parse_opt_integer_62 (rdm, 'G'); + if (bound_lifetimes > 0) + { + PRINT ("for<"); + for (i = 0; i < bound_lifetimes; i++) + { + if (i > 0) + PRINT (", "); + rdm->bound_lifetime_depth++; + print_lifetime_from_index (rdm, 1); + } + PRINT ("> "); + } +} + +static void +demangle_path (struct rust_demangler *rdm, int in_value) +{ + char tag, ns; + int was_skipping_printing; + size_t i, backref, old_next; + uint64_t dis; + struct rust_mangled_ident name; + + if (rdm->errored) + return; + + switch (tag = next (rdm)) + { + case 'C': + dis = parse_disambiguator (rdm); + name = parse_ident (rdm); + + print_ident (rdm, name); + if (rdm->verbose) + { + PRINT ("["); + print_uint64_hex (rdm, dis); + PRINT ("]"); + } + break; + case 'N': + ns = next (rdm); + if (!ISLOWER (ns) && !ISUPPER (ns)) + { + rdm->errored = 1; + return; + } + + demangle_path (rdm, in_value); + + dis = parse_disambiguator (rdm); + name = parse_ident (rdm); + + if (ISUPPER (ns)) + { + /* Special namespaces, like closures and shims. */ + PRINT ("::{"); + switch (ns) + { + case 'C': + PRINT ("closure"); + break; + case 'S': + PRINT ("shim"); + break; + default: + print_str (rdm, &ns, 1); + } + if (name.ascii || name.punycode) + { + PRINT (":"); + print_ident (rdm, name); + } + PRINT ("#"); + print_uint64 (rdm, dis); + PRINT ("}"); + } + else + { + /* Implementation-specific/unspecified namespaces. */ + + if (name.ascii || name.punycode) + { + PRINT ("::"); + print_ident (rdm, name); + } + } + break; + case 'M': + case 'X': + /* Ignore the `impl`'s own path.*/ + parse_disambiguator (rdm); + was_skipping_printing = rdm->skipping_printing; + rdm->skipping_printing = 1; + demangle_path (rdm, in_value); + rdm->skipping_printing = was_skipping_printing; + /* fallthrough */ + case 'Y': + PRINT ("<"); + demangle_type (rdm); + if (tag != 'M') + { + PRINT (" as "); + demangle_path (rdm, 0); + } + PRINT (">"); + break; + case 'I': + demangle_path (rdm, in_value); + if (in_value) + PRINT ("::"); + PRINT ("<"); + for (i = 0; !rdm->errored && !eat (rdm, 'E'); i++) + { + if (i > 0) + PRINT (", "); + demangle_generic_arg (rdm); + } + PRINT (">"); + break; + case 'B': + backref = parse_integer_62 (rdm); + if (!rdm->skipping_printing) + { + old_next = rdm->next; + rdm->next = backref; + demangle_path (rdm, in_value); + rdm->next = old_next; + } + break; + default: + rdm->errored = 1; + return; + } +} - return count >= 5 && count <= 15; +static void +demangle_generic_arg (struct rust_demangler *rdm) +{ + uint64_t lt; + if (eat (rdm, 'L')) + { + lt = parse_integer_62 (rdm); + print_lifetime_from_index (rdm, lt); + } + else if (eat (rdm, 'K')) + demangle_const (rdm); + else + demangle_type (rdm); +} + +static const char * +basic_type (char tag) +{ + switch (tag) + { + case 'b': + return "bool"; + case 'c': + return "char"; + case 'e': + return "str"; + case 'u': + return "()"; + case 'a': + return "i8"; + case 's': + return "i16"; + case 'l': + return "i32"; + case 'x': + return "i64"; + case 'n': + return "i128"; + case 'i': + return "isize"; + case 'h': + return "u8"; + case 't': + return "u16"; + case 'm': + return "u32"; + case 'y': + return "u64"; + case 'o': + return "u128"; + case 'j': + return "usize"; + case 'f': + return "f32"; + case 'd': + return "f64"; + case 'z': + return "!"; + case 'p': + return "_"; + case 'v': + return "..."; + + default: + return NULL; + } } +static void +demangle_type (struct rust_demangler *rdm) +{ + char tag; + size_t i, old_next, backref; + uint64_t lt, old_bound_lifetime_depth; + const char *basic; + struct rust_mangled_ident abi; + + if (rdm->errored) + return; + + tag = next (rdm); + + basic = basic_type (tag); + if (basic) + { + PRINT (basic); + return; + } + + switch (tag) + { + case 'R': + case 'Q': + PRINT ("&"); + if (eat (rdm, 'L')) + { + lt = parse_integer_62 (rdm); + if (lt) + { + print_lifetime_from_index (rdm, lt); + PRINT (" "); + } + } + if (tag != 'R') + PRINT ("mut "); + demangle_type (rdm); + break; + case 'P': + case 'O': + PRINT ("*"); + if (tag != 'P') + PRINT ("mut "); + else + PRINT ("const "); + demangle_type (rdm); + break; + case 'A': + case 'S': + PRINT ("["); + demangle_type (rdm); + if (tag == 'A') + { + PRINT ("; "); + demangle_const (rdm); + } + PRINT ("]"); + break; + case 'T': + PRINT ("("); + for (i = 0; !rdm->errored && !eat (rdm, 'E'); i++) + { + if (i > 0) + PRINT (", "); + demangle_type (rdm); + } + if (i == 1) + PRINT (","); + PRINT (")"); + break; + case 'F': + old_bound_lifetime_depth = rdm->bound_lifetime_depth; + demangle_binder (rdm); + + if (eat (rdm, 'U')) + PRINT ("unsafe "); + + if (eat (rdm, 'K')) + { + if (eat (rdm, 'C')) + { + abi.ascii = "C"; + abi.ascii_len = 1; + } + else + { + abi = parse_ident (rdm); + if (!abi.ascii || abi.punycode) + { + rdm->errored = 1; + goto restore; + } + } + + PRINT ("extern \""); + + /* If the ABI had any `-`, they were replaced with `_`, + so the parts between `_` have to be re-joined with `-`. */ + for (i = 0; i < abi.ascii_len; i++) + { + if (abi.ascii[i] == '_') + { + print_str (rdm, abi.ascii, i); + PRINT ("-"); + abi.ascii += i + 1; + abi.ascii_len -= i + 1; + i = 0; + } + } + print_str (rdm, abi.ascii, abi.ascii_len); + + PRINT ("\" "); + } + + PRINT ("fn("); + for (i = 0; !rdm->errored && !eat (rdm, 'E'); i++) + { + if (i > 0) + PRINT (", "); + demangle_type (rdm); + } + PRINT (")"); + + if (eat (rdm, 'u')) + { + /* Skip printing the return type if it's 'u', i.e. `()`. */ + } + else + { + PRINT (" -> "); + demangle_type (rdm); + } + + /* Restore `bound_lifetime_depth` to outside the binder. */ + restore: + rdm->bound_lifetime_depth = old_bound_lifetime_depth; + break; + case 'D': + PRINT ("dyn "); + + old_bound_lifetime_depth = rdm->bound_lifetime_depth; + demangle_binder (rdm); + + for (i = 0; !rdm->errored && !eat (rdm, 'E'); i++) + { + if (i > 0) + PRINT (" + "); + demangle_dyn_trait (rdm); + } + + /* Restore `bound_lifetime_depth` to outside the binder. */ + rdm->bound_lifetime_depth = old_bound_lifetime_depth; + + if (!eat (rdm, 'L')) + { + rdm->errored = 1; + return; + } + lt = parse_integer_62 (rdm); + if (lt) + { + PRINT (" + "); + print_lifetime_from_index (rdm, lt); + } + break; + case 'B': + backref = parse_integer_62 (rdm); + if (!rdm->skipping_printing) + { + old_next = rdm->next; + rdm->next = backref; + demangle_type (rdm); + rdm->next = old_next; + } + break; + default: + /* Go back to the tag, so `demangle_path` also sees it. */ + rdm->next--; + demangle_path (rdm, 0); + } +} + +/* A trait in a trait object may have some "existential projections" + (i.e. associated type bindings) after it, which should be printed + in the `<...>` of the trait, e.g. `dyn Trait<T, U, Assoc=X>`. + To this end, this method will keep the `<...>` of an 'I' path + open, by omitting the `>`, and return `Ok(true)` in that case. */ static int -looks_like_rust (const char *str, size_t len) +demangle_path_maybe_open_generics (struct rust_demangler *rdm) +{ + int open; + size_t i, old_next, backref; + + open = 0; + + if (rdm->errored) + return open; + + if (eat (rdm, 'B')) + { + backref = parse_integer_62 (rdm); + if (!rdm->skipping_printing) + { + old_next = rdm->next; + rdm->next = backref; + open = demangle_path_maybe_open_generics (rdm); + rdm->next = old_next; + } + } + else if (eat (rdm, 'I')) + { + demangle_path (rdm, 0); + PRINT ("<"); + open = 1; + for (i = 0; !rdm->errored && !eat (rdm, 'E'); i++) + { + if (i > 0) + PRINT (", "); + demangle_generic_arg (rdm); + } + } + else + demangle_path (rdm, 0); + return open; +} + +static void +demangle_dyn_trait (struct rust_demangler *rdm) +{ + int open; + struct rust_mangled_ident name; + + if (rdm->errored) + return; + + open = demangle_path_maybe_open_generics (rdm); + + while (eat (rdm, 'p')) + { + if (!open) + PRINT ("<"); + else + PRINT (", "); + open = 1; + + name = parse_ident (rdm); + print_ident (rdm, name); + PRINT (" = "); + demangle_type (rdm); + } + + if (open) + PRINT (">"); +} + +static void +demangle_const (struct rust_demangler *rdm) +{ + char ty_tag; + size_t old_next, backref; + + if (rdm->errored) + return; + + if (eat (rdm, 'B')) + { + backref = parse_integer_62 (rdm); + if (!rdm->skipping_printing) + { + old_next = rdm->next; + rdm->next = backref; + demangle_const (rdm); + rdm->next = old_next; + } + return; + } + + ty_tag = next (rdm); + switch (ty_tag) + { + /* Placeholder. */ + case 'p': + PRINT ("_"); + return; + + /* Unsigned integer types. */ + case 'h': + case 't': + case 'm': + case 'y': + case 'o': + case 'j': + demangle_const_uint (rdm); + break; + + /* Signed integer types. */ + case 'a': + case 's': + case 'l': + case 'x': + case 'n': + case 'i': + demangle_const_int (rdm); + break; + + /* Boolean. */ + case 'b': + demangle_const_bool (rdm); + break; + + /* Character. */ + case 'c': + demangle_const_char (rdm); + break; + + default: + rdm->errored = 1; + return; + } + + if (rdm->errored) + return; + + if (rdm->verbose) + { + PRINT (": "); + PRINT (basic_type (ty_tag)); + } +} + +static void +demangle_const_uint (struct rust_demangler *rdm) +{ + size_t hex_len; + uint64_t value; + + if (rdm->errored) + return; + + hex_len = parse_hex_nibbles (rdm, &value); + + if (hex_len > 16) + { + /* Print anything that doesn't fit in `uint64_t` verbatim. */ + PRINT ("0x"); + print_str (rdm, rdm->sym + (rdm->next - hex_len), hex_len); + } + else if (hex_len > 0) + print_uint64 (rdm, value); + else + rdm->errored = 1; +} + +static void +demangle_const_int (struct rust_demangler *rdm) +{ + if (eat (rdm, 'n')) + PRINT ("-"); + demangle_const_uint (rdm); +} + +static void +demangle_const_bool (struct rust_demangler *rdm) { - const char *end = str + len; + uint64_t value; + + if (parse_hex_nibbles (rdm, &value) != 1) + { + rdm->errored = 1; + return; + } + + if (value == 0) + PRINT ("false"); + else if (value == 1) + PRINT ("true"); + else + rdm->errored = 1; +} + +static void +demangle_const_char (struct rust_demangler *rdm) +{ + size_t hex_len; + uint64_t value; + + hex_len = parse_hex_nibbles (rdm, &value); - while (str < end) - switch (*str) - { - case '$': - if (!strncmp (str, "$C$", 3)) - str += 3; - else if (!strncmp (str, "$SP$", 4) - || !strncmp (str, "$BP$", 4) - || !strncmp (str, "$RF$", 4) - || !strncmp (str, "$LT$", 4) - || !strncmp (str, "$GT$", 4) - || !strncmp (str, "$LP$", 4) - || !strncmp (str, "$RP$", 4)) - str += 4; - else if (!strncmp (str, "$u20$", 5) - || !strncmp (str, "$u22$", 5) - || !strncmp (str, "$u27$", 5) - || !strncmp (str, "$u2b$", 5) - || !strncmp (str, "$u3b$", 5) - || !strncmp (str, "$u5b$", 5) - || !strncmp (str, "$u5d$", 5) - || !strncmp (str, "$u7b$", 5) - || !strncmp (str, "$u7d$", 5) - || !strncmp (str, "$u7e$", 5)) - str += 5; - else - return 0; - break; - case '.': - /* Do not allow three or more consecutive dots */ - if (!strncmp (str, "...", 3)) - return 0; - /* Fall through */ - case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': - case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': - case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': - case 's': case 't': case 'u': case 'v': case 'w': case 'x': - case 'y': case 'z': - case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': - case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': - case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': - case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': - case 'Y': case 'Z': - case '0': case '1': case '2': case '3': case '4': case '5': - case '6': case '7': case '8': case '9': - case '_': - case ':': - str++; - break; - default: - return 0; - } - - return 1; -} - -/* - INPUT: sym: symbol for which rust_is_mangled(sym) returned 1. - - The input is demangled in-place because the mangled name is always - longer than the demangled one. */ - -void -rust_demangle_sym (char *sym) -{ - const char *in; - char *out; - const char *end; - - if (!sym) - return; - - in = sym; - out = sym; - end = sym + strlen (sym) - (hash_prefix_len + hash_len); - - while (in < end) - switch (*in) - { - case '$': - if (!(unescape (&in, &out, "$C$", ',') - || unescape (&in, &out, "$SP$", '@') - || unescape (&in, &out, "$BP$", '*') - || unescape (&in, &out, "$RF$", '&') - || unescape (&in, &out, "$LT$", '<') - || unescape (&in, &out, "$GT$", '>') - || unescape (&in, &out, "$LP$", '(') - || unescape (&in, &out, "$RP$", ')') - || unescape (&in, &out, "$u20$", ' ') - || unescape (&in, &out, "$u22$", '\"') - || unescape (&in, &out, "$u27$", '\'') - || unescape (&in, &out, "$u2b$", '+') - || unescape (&in, &out, "$u3b$", ';') - || unescape (&in, &out, "$u5b$", '[') - || unescape (&in, &out, "$u5d$", ']') - || unescape (&in, &out, "$u7b$", '{') - || unescape (&in, &out, "$u7d$", '}') - || unescape (&in, &out, "$u7e$", '~'))) { - /* unexpected escape sequence, not looks_like_rust. */ - goto fail; - } - break; - case '_': - /* If this is the start of a path component and the next - character is an escape sequence, ignore the underscore. The - mangler inserts an underscore to make sure the path - component begins with a XID_Start character. */ - if ((in == sym || in[-1] == ':') && in[1] == '$') - in++; - else - *out++ = *in++; - break; - case '.': - if (in[1] == '.') - { - /* ".." becomes "::" */ - *out++ = ':'; - *out++ = ':'; - in += 2; - } - else - { - /* "." becomes "-" */ - *out++ = '-'; - in++; - } - break; - case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': - case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': - case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': - case 's': case 't': case 'u': case 'v': case 'w': case 'x': - case 'y': case 'z': - case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': - case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': - case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': - case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': - case 'Y': case 'Z': - case '0': case '1': case '2': case '3': case '4': case '5': - case '6': case '7': case '8': case '9': - case ':': - *out++ = *in++; - break; - default: - /* unexpected character in symbol, not looks_like_rust. */ - goto fail; - } - goto done; - -fail: - *out++ = '?'; /* This is pretty lame, but it's hard to do better. */ -done: - *out = '\0'; + if (hex_len == 0 || hex_len > 8) + { + rdm->errored = 1; + return; + } + + /* Match Rust's character "debug" output as best as we can. */ + PRINT ("'"); + if (value == '\t') + PRINT ("\\t"); + else if (value == '\r') + PRINT ("\\r"); + else if (value == '\n') + PRINT ("\\n"); + else if (value > ' ' && value < '~') + /* Rust also considers many non-ASCII codepoints to be printable, but + that logic is not easily ported to C. */ + print_str (rdm, (char *) &value, 1); + else + { + PRINT ("\\u{"); + print_uint64_hex (rdm, value); + PRINT ("}"); + } + PRINT ("'"); } +/* A legacy hash is the prefix "h" followed by 16 lowercase hex digits. + The hex digits must contain at least 5 distinct digits. */ static int -unescape (const char **in, char **out, const char *seq, char value) +is_legacy_prefixed_hash (struct rust_mangled_ident ident) { - size_t len = strlen (seq); + uint16_t seen; + int nibble; + size_t i, count; - if (strncmp (*in, seq, len)) + if (ident.ascii_len != 17 || ident.ascii[0] != 'h') return 0; - **out = value; + seen = 0; + for (i = 0; i < 16; i++) + { + nibble = decode_lower_hex_nibble (ident.ascii[1 + i]); + if (nibble < 0) + return 0; + seen |= (uint16_t)1 << nibble; + } + + /* Count how many distinct digits were seen. */ + count = 0; + while (seen) + { + if (seen & 1) + count++; + seen >>= 1; + } + + return count >= 5; +} + +int +rust_demangle_callback (const char *mangled, int options, + demangle_callbackref callback, void *opaque) +{ + const char *p; + struct rust_demangler rdm; + struct rust_mangled_ident ident; + + rdm.sym = mangled; + rdm.sym_len = 0; + + rdm.callback_opaque = opaque; + rdm.callback = callback; + + rdm.next = 0; + rdm.errored = 0; + rdm.skipping_printing = 0; + rdm.verbose = (options & DMGL_VERBOSE) != 0; + rdm.version = 0; + rdm.bound_lifetime_depth = 0; + + /* Rust symbols always start with _R (v0) or _ZN (legacy). */ + if (rdm.sym[0] == '_' && rdm.sym[1] == 'R') + rdm.sym += 2; + else if (rdm.sym[0] == '_' && rdm.sym[1] == 'Z' && rdm.sym[2] == 'N') + { + rdm.sym += 3; + rdm.version = -1; + } + else + return 0; + + /* Paths (v0) always start with uppercase characters. */ + if (rdm.version != -1 && !ISUPPER (rdm.sym[0])) + return 0; + + /* Rust symbols (v0) use only [_0-9a-zA-Z] characters. */ + for (p = rdm.sym; *p; p++) + { + rdm.sym_len++; + + if (*p == '_' || ISALNUM (*p)) + continue; + + /* Legacy Rust symbols can also contain [.:$] characters. */ + if (rdm.version == -1 && (*p == '$' || *p == '.' || *p == ':')) + continue; + + return 0; + } + + /* Legacy Rust symbols need to be handled separately. */ + if (rdm.version == -1) + { + /* Legacy Rust symbols always end with E. */ + if (!(rdm.sym_len > 0 && rdm.sym[rdm.sym_len - 1] == 'E')) + return 0; + rdm.sym_len--; + + /* Legacy Rust symbols also always end with a path segment + that encodes a 16 hex digit hash, i.e. '17h[a-f0-9]{16}'. + This early check, before any parse_ident calls, should + quickly filter out most C++ symbols unrelated to Rust. */ + if (!(rdm.sym_len > 19 + && !memcmp (&rdm.sym[rdm.sym_len - 19], "17h", 3))) + return 0; + + do + { + ident = parse_ident (&rdm); + if (rdm.errored || !ident.ascii) + return 0; + } + while (rdm.next < rdm.sym_len); + + /* The last path segment should be the hash. */ + if (!is_legacy_prefixed_hash (ident)) + return 0; + + /* Reset the state for a second pass, to print the symbol. */ + rdm.next = 0; + if (!rdm.verbose && rdm.sym_len > 19) + { + /* Hide the last segment, containing the hash, if not verbose. */ + rdm.sym_len -= 19; + } + + do + { + if (rdm.next > 0) + print_str (&rdm, "::", 2); + + ident = parse_ident (&rdm); + print_ident (&rdm, ident); + } + while (rdm.next < rdm.sym_len); + } + else + { + demangle_path (&rdm, 1); + + /* Skip instantiating crate. */ + if (!rdm.errored && rdm.next < rdm.sym_len) + { + rdm.skipping_printing = 1; + demangle_path (&rdm, 0); + } + + /* It's an error to not reach the end. */ + rdm.errored |= rdm.next != rdm.sym_len; + } + + return !rdm.errored; +} + +/* Growable string buffers. */ +struct str_buf +{ + char *ptr; + size_t len; + size_t cap; + int errored; +}; + +static void +str_buf_reserve (struct str_buf *buf, size_t extra) +{ + size_t available, min_new_cap, new_cap; + char *new_ptr; + + /* Allocation failed before. */ + if (buf->errored) + return; + + available = buf->cap - buf->len; + + if (extra <= available) + return; + + min_new_cap = buf->cap + (extra - available); + + /* Check for overflows. */ + if (min_new_cap < buf->cap) + { + buf->errored = 1; + return; + } + + new_cap = buf->cap; + + if (new_cap == 0) + new_cap = 4; + + /* Double capacity until sufficiently large. */ + while (new_cap < min_new_cap) + { + new_cap *= 2; + + /* Check for overflows. */ + if (new_cap < buf->cap) + { + buf->errored = 1; + return; + } + } + + new_ptr = (char *)realloc (buf->ptr, new_cap); + if (new_ptr == NULL) + { + free (buf->ptr); + buf->ptr = NULL; + buf->len = 0; + buf->cap = 0; + buf->errored = 1; + } + else + { + buf->ptr = new_ptr; + buf->cap = new_cap; + } +} + +static void +str_buf_append (struct str_buf *buf, const char *data, size_t len) +{ + str_buf_reserve (buf, len); + if (buf->errored) + return; + + memcpy (buf->ptr + buf->len, data, len); + buf->len += len; +} + +static void +str_buf_demangle_callback (const char *data, size_t len, void *opaque) +{ + str_buf_append ((struct str_buf *)opaque, data, len); +} + +char * +rust_demangle (const char *mangled, int options) +{ + struct str_buf out; + int success; - *in += len; - *out += 1; + out.ptr = NULL; + out.len = 0; + out.cap = 0; + out.errored = 0; + + success = rust_demangle_callback (mangled, options, + str_buf_demangle_callback, &out); + + if (!success) + { + free (out.ptr); + return NULL; + } - return 1; + str_buf_append (&out, "\0", 1); + return out.ptr; } diff -Nru gdb-9.1/libiberty/rust-demangle.h gdb-10.2/libiberty/rust-demangle.h --- gdb-9.1/libiberty/rust-demangle.h 2019-09-20 21:58:17.000000000 +0000 +++ gdb-10.2/libiberty/rust-demangle.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,45 +0,0 @@ -/* Internal demangler interface for the Rust programming language. - Copyright (C) 2016-2019 Free Software Foundation, Inc. - Written by David Tolnay (dtolnay@gmail.com). - -This file is part of the libiberty library. -Libiberty is free software; you can redistribute it and/or -modify it under the terms of the GNU Library General Public -License as published by the Free Software Foundation; either -version 2 of the License, or (at your option) any later version. - -In addition to the permissions in the GNU Library General Public -License, the Free Software Foundation gives you unlimited permission -to link the compiled version of this file into combinations with other -programs, and to distribute those combinations without any restriction -coming from the use of this file. (The Library Public License -restrictions do apply in other respects; for example, they cover -modification of the file, and distribution when not linked into a -combined executable.) - -Libiberty is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with libiberty; see the file COPYING.LIB. -If not, see <http://www.gnu.org/licenses/>. */ - -/* This file provides some definitions shared by cplus-dem.c and - rust-demangle.c. It should not be included by any other files. */ - -/* Returns non-zero iff MANGLED is a rust mangled symbol. MANGLED must - already have been demangled through cplus_demangle_v3. If this function - returns non-zero then MANGLED can be demangled (in-place) using - RUST_DEMANGLE_SYM. */ -extern int -rust_is_mangled (const char *mangled); - -/* Demangles SYM (in-place) if RUST_IS_MANGLED returned non-zero for SYM. - If RUST_IS_MANGLED returned zero for SYM then RUST_DEMANGLE_SYM might - replace characters that cannot be demangled with '?' and might truncate - SYM. After calling RUST_DEMANGLE_SYM SYM might be shorter, but never - larger. */ -extern void -rust_demangle_sym (char *sym); diff -Nru gdb-9.1/libiberty/safe-ctype.c gdb-10.2/libiberty/safe-ctype.c --- gdb-9.1/libiberty/safe-ctype.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/safe-ctype.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* <ctype.h> replacement macros. - Copyright (C) 2000-2019 Free Software Foundation, Inc. + Copyright (C) 2000-2020 Free Software Foundation, Inc. Contributed by Zack Weinberg <zackw@stanford.edu>. This file is part of the libiberty library. diff -Nru gdb-9.1/libiberty/setenv.c gdb-10.2/libiberty/setenv.c --- gdb-9.1/libiberty/setenv.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/setenv.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 1992-2019 Free Software Foundation, Inc. +/* Copyright (C) 1992-2020 Free Software Foundation, Inc. This file based on setenv.c in the GNU C Library. The GNU C Library is free software; you can redistribute it and/or diff -Nru gdb-9.1/libiberty/setproctitle.c gdb-10.2/libiberty/setproctitle.c --- gdb-9.1/libiberty/setproctitle.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/setproctitle.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Set the title of a process. - Copyright (C) 2010-2019 Free Software Foundation, Inc. + Copyright (C) 2010-2020 Free Software Foundation, Inc. This file is part of the libiberty library. Libiberty is free software; you can redistribute it and/or diff -Nru gdb-9.1/libiberty/sha1.c gdb-10.2/libiberty/sha1.c --- gdb-9.1/libiberty/sha1.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/sha1.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,7 +1,7 @@ /* sha1.c - Functions to compute SHA1 message digest of files or memory blocks according to the NIST specification FIPS-180-1. - Copyright (C) 2000-2019 Free Software Foundation, Inc. + Copyright (C) 2000-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the diff -Nru gdb-9.1/libiberty/simple-object.c gdb-10.2/libiberty/simple-object.c --- gdb-9.1/libiberty/simple-object.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/simple-object.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* simple-object.c -- simple routines to read and write object files. - Copyright (C) 2010-2019 Free Software Foundation, Inc. + Copyright (C) 2010-2020 Free Software Foundation, Inc. Written by Ian Lance Taylor, Google. This program is free software; you can redistribute it and/or modify it @@ -293,11 +293,17 @@ /* Copy over .note.GNU-stack section under the same name if present. */ else if (strcmp (name, ".note.GNU-stack") == 0) return strcpy (newname, name); + /* Copy over .note.gnu.property section under the same name if present. */ + else if (strcmp (name, ".note.gnu.property") == 0) + return strcpy (newname, name); /* Copy over .comment section under the same name if present. Solaris ld uses them to relax its checking of ELF gABI access rules for COMDAT sections in objects produced by GCC. */ else if (strcmp (name, ".comment") == 0) return strcpy (newname, name); + /* Copy over .GCC.command.line section under the same name if present. */ + else if (strcmp (name, ".GCC.command.line") == 0) + return strcpy (newname, name); free (newname); return NULL; } diff -Nru gdb-9.1/libiberty/simple-object-coff.c gdb-10.2/libiberty/simple-object-coff.c --- gdb-9.1/libiberty/simple-object-coff.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/simple-object-coff.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* simple-object-coff.c -- routines to manipulate COFF object files. - Copyright (C) 2010-2019 Free Software Foundation, Inc. + Copyright (C) 2010-2020 Free Software Foundation, Inc. Written by Ian Lance Taylor, Google. This program is free software; you can redistribute it and/or modify it diff -Nru gdb-9.1/libiberty/simple-object-common.h gdb-10.2/libiberty/simple-object-common.h --- gdb-9.1/libiberty/simple-object-common.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/simple-object-common.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* simple-object-common.h -- common structs for object file manipulation. - Copyright (C) 2010-2019 Free Software Foundation, Inc. + Copyright (C) 2010-2020 Free Software Foundation, Inc. This file is part of the libiberty library. Libiberty is free software; you can redistribute it and/or diff -Nru gdb-9.1/libiberty/simple-object-elf.c gdb-10.2/libiberty/simple-object-elf.c --- gdb-9.1/libiberty/simple-object-elf.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/simple-object-elf.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* simple-object-elf.c -- routines to manipulate ELF object files. - Copyright (C) 2010-2019 Free Software Foundation, Inc. + Copyright (C) 2010-2020 Free Software Foundation, Inc. Written by Ian Lance Taylor, Google. This program is free software; you can redistribute it and/or modify it @@ -1366,30 +1366,17 @@ return errmsg; } - /* If we are processing .symtab purge __gnu_lto_slim symbol - from it and any symbols in discarded sections. */ + /* If we are processing .symtab purge any symbols + in discarded sections. */ if (sh_type == SHT_SYMTAB) { unsigned entsize = ELF_FETCH_FIELD (type_functions, ei_class, Shdr, shdr, sh_entsize, Elf_Addr); unsigned strtab = ELF_FETCH_FIELD (type_functions, ei_class, Shdr, shdr, sh_link, Elf_Word); - unsigned char *strshdr = shdrs + (strtab - 1) * shdr_size; - off_t stroff = ELF_FETCH_FIELD (type_functions, ei_class, Shdr, - strshdr, sh_offset, Elf_Addr); - size_t strsz = ELF_FETCH_FIELD (type_functions, ei_class, Shdr, - strshdr, sh_size, Elf_Addr); - char *strings = XNEWVEC (char, strsz); - char *gnu_lto = strings; + size_t prevailing_name_idx = 0; unsigned char *ent; unsigned *shndx_table = NULL; - simple_object_internal_read (sobj->descriptor, - sobj->offset + stroff, - (unsigned char *)strings, - strsz, &errmsg, err); - /* Find first '\0' in strings. */ - gnu_lto = (char *) memchr (gnu_lto + 1, '\0', - strings + strsz - gnu_lto); /* Read the section index table if present. */ if (symtab_indices_shndx[i - 1] != 0) { @@ -1404,6 +1391,45 @@ (unsigned char *)shndx_table, sidxsz, &errmsg, err); } + + /* Find a WEAK HIDDEN symbol which name we will use for removed + symbols. We know there's a prevailing weak hidden symbol + at the start of the .debug_info section. */ + for (ent = buf; ent < buf + length; ent += entsize) + { + unsigned st_shndx = ELF_FETCH_FIELD (type_functions, ei_class, + Sym, ent, + st_shndx, Elf_Half); + unsigned char *st_info; + unsigned char *st_other; + if (ei_class == ELFCLASS32) + { + st_info = &((Elf32_External_Sym *)ent)->st_info; + st_other = &((Elf32_External_Sym *)ent)->st_other; + } + else + { + st_info = &((Elf64_External_Sym *)ent)->st_info; + st_other = &((Elf64_External_Sym *)ent)->st_other; + } + if (st_shndx == SHN_XINDEX) + st_shndx = type_functions->fetch_Elf_Word + ((unsigned char *)(shndx_table + (ent - buf) / entsize)); + + if (st_shndx != SHN_COMMON + && !(st_shndx != SHN_UNDEF + && st_shndx < shnum + && pfnret[st_shndx - 1] == -1) + && ELF_ST_BIND (*st_info) == STB_WEAK + && *st_other == STV_HIDDEN) + { + prevailing_name_idx = ELF_FETCH_FIELD (type_functions, + ei_class, Sym, ent, + st_name, Elf_Word); + break; + } + } + for (ent = buf; ent < buf + length; ent += entsize) { unsigned st_shndx = ELF_FETCH_FIELD (type_functions, ei_class, @@ -1426,9 +1452,10 @@ if (st_shndx == SHN_XINDEX) st_shndx = type_functions->fetch_Elf_Word ((unsigned char *)(shndx_table + (ent - buf) / entsize)); - /* Eliminate all COMMONs - this includes __gnu_lto_v1 - and __gnu_lto_slim which otherwise cause endless - LTO plugin invocation. */ + /* Eliminate all COMMONs - this includes __gnu_lto_slim + which otherwise cause endless LTO plugin invocation. + FIXME: remove the condition once we remove emission + of __gnu_lto_slim symbol. */ if (st_shndx == SHN_COMMON) discard = 1; /* We also need to remove symbols refering to sections @@ -1440,6 +1467,11 @@ && st_shndx < shnum && pfnret[st_shndx - 1] == -1) discard = 1; + /* We also need to remove global UNDEFs which can + cause link fails later. */ + else if (st_shndx == SHN_UNDEF + && ELF_ST_BIND (*st_info) == STB_GLOBAL) + discard = 1; if (discard) { @@ -1460,12 +1492,13 @@ else { /* Make discarded global symbols hidden weak - undefined and sharing the gnu_lto_ name. */ + undefined and sharing a name of a prevailing + symbol. */ bind = STB_WEAK; other = STV_HIDDEN; ELF_SET_FIELD (type_functions, ei_class, Sym, ent, st_name, Elf_Word, - gnu_lto - strings); + prevailing_name_idx); ELF_SET_FIELD (type_functions, ei_class, Sym, ent, st_shndx, Elf_Half, SHN_UNDEF); } @@ -1482,7 +1515,6 @@ ELF_SET_FIELD (type_functions, ei_class, Sym, ent, st_shndx, Elf_Half, sh_map[st_shndx]); } - XDELETEVEC (strings); XDELETEVEC (shndx_table); } else if (sh_type == SHT_GROUP) diff -Nru gdb-9.1/libiberty/simple-object-mach-o.c gdb-10.2/libiberty/simple-object-mach-o.c --- gdb-9.1/libiberty/simple-object-mach-o.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/simple-object-mach-o.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* simple-object-mach-o.c -- routines to manipulate Mach-O object files. - Copyright (C) 2010-2019 Free Software Foundation, Inc. + Copyright (C) 2010-2020 Free Software Foundation, Inc. Written by Ian Lance Taylor, Google. This program is free software; you can redistribute it and/or modify it diff -Nru gdb-9.1/libiberty/simple-object-xcoff.c gdb-10.2/libiberty/simple-object-xcoff.c --- gdb-9.1/libiberty/simple-object-xcoff.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/simple-object-xcoff.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* simple-object-coff.c -- routines to manipulate XCOFF object files. - Copyright (C) 2013-2019 Free Software Foundation, Inc. + Copyright (C) 2013-2020 Free Software Foundation, Inc. Written by Ian Lance Taylor, Google and David Edelsohn, IBM. This program is free software; you can redistribute it and/or modify it diff -Nru gdb-9.1/libiberty/snprintf.c gdb-10.2/libiberty/snprintf.c --- gdb-9.1/libiberty/snprintf.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/snprintf.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Implement the snprintf function. - Copyright (C) 2003-2019 Free Software Foundation, Inc. + Copyright (C) 2003-2020 Free Software Foundation, Inc. Written by Kaveh R. Ghazi <ghazi@caip.rutgers.edu>. This file is part of the libiberty library. This library is free diff -Nru gdb-9.1/libiberty/sort.c gdb-10.2/libiberty/sort.c --- gdb-9.1/libiberty/sort.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/sort.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Sorting algorithms. - Copyright (C) 2000-2019 Free Software Foundation, Inc. + Copyright (C) 2000-2020 Free Software Foundation, Inc. Contributed by Mark Mitchell <mark@codesourcery.com>. This file is part of GNU CC. diff -Nru gdb-9.1/libiberty/spaces.c gdb-10.2/libiberty/spaces.c --- gdb-9.1/libiberty/spaces.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/spaces.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Allocate memory region filled with spaces. - Copyright (C) 1991-2019 Free Software Foundation, Inc. + Copyright (C) 1991-2020 Free Software Foundation, Inc. This file is part of the libiberty library. Libiberty is free software; you can redistribute it and/or diff -Nru gdb-9.1/libiberty/splay-tree.c gdb-10.2/libiberty/splay-tree.c --- gdb-9.1/libiberty/splay-tree.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/splay-tree.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* A splay-tree datatype. - Copyright (C) 1998-2019 Free Software Foundation, Inc. + Copyright (C) 1998-2020 Free Software Foundation, Inc. Contributed by Mark Mitchell (mark@markmitchell.com). This file is part of GNU CC. diff -Nru gdb-9.1/libiberty/stack-limit.c gdb-10.2/libiberty/stack-limit.c --- gdb-9.1/libiberty/stack-limit.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/stack-limit.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Increase stack size limit if possible. - Copyright (C) 2011-2019 Free Software Foundation, Inc. + Copyright (C) 2011-2020 Free Software Foundation, Inc. This file is part of the libiberty library. This library is free software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/libiberty/stpcpy.c gdb-10.2/libiberty/stpcpy.c --- gdb-9.1/libiberty/stpcpy.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/stpcpy.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Implement the stpcpy function. - Copyright (C) 2003-2019 Free Software Foundation, Inc. + Copyright (C) 2003-2020 Free Software Foundation, Inc. Written by Kaveh R. Ghazi <ghazi@caip.rutgers.edu>. This file is part of the libiberty library. diff -Nru gdb-9.1/libiberty/stpncpy.c gdb-10.2/libiberty/stpncpy.c --- gdb-9.1/libiberty/stpncpy.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/stpncpy.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Implement the stpncpy function. - Copyright (C) 2003-2019 Free Software Foundation, Inc. + Copyright (C) 2003-2020 Free Software Foundation, Inc. Written by Kaveh R. Ghazi <ghazi@caip.rutgers.edu>. This file is part of the libiberty library. diff -Nru gdb-9.1/libiberty/strndup.c gdb-10.2/libiberty/strndup.c --- gdb-9.1/libiberty/strndup.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/strndup.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Implement the strndup function. - Copyright (C) 2005-2019 Free Software Foundation, Inc. + Copyright (C) 2005-2020 Free Software Foundation, Inc. Written by Kaveh R. Ghazi <ghazi@caip.rutgers.edu>. This file is part of the libiberty library. diff -Nru gdb-9.1/libiberty/strtod.c gdb-10.2/libiberty/strtod.c --- gdb-9.1/libiberty/strtod.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/strtod.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Implementation of strtod for systems with atof. - Copyright (C) 1991-2019 Free Software Foundation, Inc. + Copyright (C) 1991-2020 Free Software Foundation, Inc. This file is part of the libiberty library. This library is free software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/libiberty/strverscmp.c gdb-10.2/libiberty/strverscmp.c --- gdb-9.1/libiberty/strverscmp.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/strverscmp.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Compare strings while treating digits characters numerically. - Copyright (C) 1997-2019 Free Software Foundation, Inc. + Copyright (C) 1997-2020 Free Software Foundation, Inc. This file is part of the libiberty library. Contributed by Jean-François Bignolles <bignolle@ecoledoc.ibp.fr>, 1997. diff -Nru gdb-9.1/libiberty/testsuite/d-demangle-expected gdb-10.2/libiberty/testsuite/d-demangle-expected --- gdb-9.1/libiberty/testsuite/d-demangle-expected 2019-09-20 21:58:17.000000000 +0000 +++ gdb-10.2/libiberty/testsuite/d-demangle-expected 2020-09-13 02:33:41.000000000 +0000 @@ -274,14 +274,6 @@ demangle.test(__vector(double[4])) # --format=dlang -_D8demangle4testFI5identZv -demangle.test(ident) -# ---format=dlang -_D8demangle4testFI5ident4testZv -demangle.test(ident.test) -# ---format=dlang _D8demangle4testFC5classZv demangle.test(class) # @@ -314,6 +306,14 @@ demangle.test(typedef.test) # --format=dlang +_D8demangle4testFIaZv +demangle.test(in char) +# +--format=dlang +_D8demangle4testFIKaZv +demangle.test(in ref char) +# +--format=dlang _D8demangle4testFJaZv demangle.test(out char) # @@ -462,6 +462,10 @@ demangle.test(char() @nogc delegate) # --format=dlang +_D8demangle4testFDFNmZaZv +demangle.test(char() @live delegate) +# +--format=dlang _D8demangle4testFDFNaNbZaZv demangle.test(char() pure nothrow delegate) # @@ -538,6 +542,10 @@ demangle.test(char() @nogc function) # --format=dlang +_D8demangle4testFPFNmZaZv +demangle.test(char() @live function) +# +--format=dlang _D8demangle4testFPFNaNbZaZv demangle.test(char() pure nothrow function) # @@ -1132,6 +1140,14 @@ test.bar!("abc"w, "def"d).x # --format=dlang +_D4test21__T3funVwi4294967295Z3funFNaNbNiNfZv +test.fun!('\Uffffffff').fun() +# +--format=dlang +_D4test21__T3funVwi4294967296Z3funFNaNbNiNfZv +_D4test21__T3funVwi4294967296Z3funFNaNbNiNfZv +# +--format=dlang _D6plugin8generateFiiZAya plugin.generate(int, int) # @@ -1326,3 +1342,75 @@ --format=dlang _D5__T1fVHacA6666666666_ _D5__T1fVHacA6666666666_ +# +--format=dlang +_D3std5range15__T4iotaTtTtTtZ4iotaFtttZ6Result7opIndexMNgFNaNbNiNfmZNgt +std.range.iota!(ushort, ushort, ushort).iota(ushort, ushort, ushort).Result.opIndex(ulong) inout +# +--format=dlang +_D3std6format77__T6getNthVAyaa13_696e7465676572207769647468S233std6traits10isIntegralTiTkTkZ6getNthFNaNfkkkZi +std.format.getNth!("integer width", std.traits.isIntegral, int, uint, uint).getNth(uint, uint, uint) +# +--format=dlang +_D3std11parallelism42__T16RoundRobinBufferTDFKAaZvTDxFNaNdNeZbZ16RoundRobinBuffer5primeMFZv +std.parallelism.RoundRobinBuffer!(void(ref char[]) delegate, bool() pure @property @trusted delegate const).RoundRobinBuffer.prime() +# +--format=dlang +_D4core4stdc5errnoQgFZi +core.stdc.errno.errno() +# +--format=dlang +_D4testFS10structnameQnZb +test(structname, structname) +# +--format=dlang +_D3std11parallelism__T4TaskS8unittest3cmpTAyaTQeZQBb6__dtorMFNfZv +std.parallelism.Task!(unittest.cmp, immutable(char)[], immutable(char)[]).Task.~this() +# +--format=dlang +_D13testexpansion44__T1sTS13testexpansion8__T1sTiZ1sFiZ6ResultZ1sFS13testexpansion8__T1sTiZ1sFiZ6ResultZ6Result3fooMFNaNfZv +testexpansion.s!(testexpansion.s!(int).s(int).Result).s(testexpansion.s!(int).s(int).Result).Result.foo() +# +--format=dlang +_D13testexpansion__T1sTSQw__TQjTiZQoFiZ6ResultZQBbFQBcZQq3fooMFNaNfZv +testexpansion.s!(testexpansion.s!(int).s(int).Result).s(testexpansion.s!(int).s(int).Result).Result.foo() +# +--format=dlang +_D3std4conv__T7enumRepTyAaTEQBa12experimental9allocator15building_blocks15stats_collector7OptionsVQCti64ZQDnyQDh +std.conv.enumRep!(immutable(char[]), std.experimental.allocator.building_blocks.stats_collector.Options, 64).enumRep +# +--format=dlang +_D3std12experimental9allocator6common__T10reallocateTSQCaQBzQBo15building_blocks17kernighan_ritchie__T8KRRegionTSQEhQEgQDvQCh14null_allocator13NullAllocatorZQCdZQErFNaNbNiKQEpKAvmZb +std.experimental.allocator.common.reallocate!(std.experimental.allocator.building_blocks.kernighan_ritchie.KRRegion!(std.experimental.allocator.building_blocks.null_allocator.NullAllocator).KRRegion).reallocate(ref std.experimental.allocator.building_blocks.kernighan_ritchie.KRRegion!(std.experimental.allocator.building_blocks.null_allocator.NullAllocator).KRRegion, ref void[], ulong) +# +--format=dlang +_D3std9exception__T11doesPointToTASQBh5regex8internal2ir10NamedGroupTQBkTvZQCeFNaNbNiNeKxASQDlQCeQCbQBvQBvKxQtZb +std.exception.doesPointTo!(std.regex.internal.ir.NamedGroup[], std.regex.internal.ir.NamedGroup[], void).doesPointTo(ref const(std.regex.internal.ir.NamedGroup[]), ref const(std.regex.internal.ir.NamedGroup[])) +# +--format=dlang +_D3std9algorithm9iteration__T14SplitterResultS_DQBu3uni7isWhiteFNaNbNiNfwZbTAyaZQBz9__xtoHashFNbNeKxSQDvQDuQDn__TQDgS_DQEnQCtQCsQCnTQCeZQEdZm +std.algorithm.iteration.SplitterResult!(std.uni.isWhite(dchar), immutable(char)[]).SplitterResult.__xtoHash(ref const(std.algorithm.iteration.SplitterResult!(std.uni.isWhite, immutable(char)[]).SplitterResult)) +# +--format=dlang +_D3std8typecons__T7TypedefTCQBaQz19__unittestL6513_208FNfZ7MyClassVQBonVAyanZQCh6__ctorMFNaNbNcNiNfQCuZSQDyQDx__TQDrTQDmVQDqnVQCcnZQEj +std.typecons.Typedef!(std.typecons.__unittestL6513_208().MyClass, null, null).Typedef.this(std.typecons.__unittestL6513_208().MyClass) +# +--format=dlang +_D3std6getopt__TQkTAyaTDFNaNbNiNfQoZvTQtTDQsZQBnFNfKAQBiQBlQBkQBrQyZSQCpQCo12GetoptResult +std.getopt.getopt!(immutable(char)[], void(immutable(char)[]) pure nothrow @nogc @safe delegate, immutable(char)[], void(immutable(char)[]) pure nothrow @nogc @safe delegate).getopt(ref immutable(char)[][], immutable(char)[], void(immutable(char)[]) pure nothrow @nogc @safe delegate, immutable(char)[], void(immutable(char)[]) pure nothrow @nogc @safe delegate) +# +--format=dlang +_D3std5regex8internal9kickstart__T7ShiftOrTaZQl11ShiftThread__T3setS_DQCqQCpQCmQCg__TQBzTaZQCfQBv10setInvMaskMFNaNbNiNfkkZvZQCjMFNaNfwZv +std.regex.internal.kickstart.ShiftOr!(char).ShiftOr.ShiftThread.set!(std.regex.internal.kickstart.ShiftOr!(char).ShiftOr.ShiftThread.setInvMask(uint, uint)).set(dchar) +# +--format=dlang +_D3std5stdio4File__T8lockImplX10LockFileExTykZQBaMFmmykZi +std.stdio.File.lockImpl!(LockFileEx, immutable(uint)).lockImpl(ulong, ulong, immutable(uint)) +# +--format=dlang +_D3std9algorithm9iteration__T12FilterResultSQBq8typecons__T5TupleTiVAyaa1_61TiVQla1_62TiVQva1_63ZQBm__T6renameVHiQBtA2i0a1_63i2a1_61ZQBeMFNcZ9__lambda1TAiZQEw9__xtoHashFNbNeKxSQGsQGrQGk__TQGdSQHiQFs__TQFmTiVQFja1_61TiVQFua1_62TiVQGfa1_63ZQGx__TQFlVQFhA2i0a1_63i2a1_61ZQGjMFNcZQFfTQEyZQJvZm +std.algorithm.iteration.FilterResult!(std.typecons.Tuple!(int, "a", int, "b", int, "c").Tuple.rename!([0:"c", 2:"a"]).rename().__lambda1, int[]).FilterResult.__xtoHash(ref const(std.algorithm.iteration.FilterResult!(std.typecons.Tuple!(int, "a", int, "b", int, "c").Tuple.rename!([0:"c", 2:"a"]).rename().__lambda1, int[]).FilterResult)) +# +--format=dlang +_D3std3uni__T6toCaseS_DQvQt12toLowerIndexFNaNbNiNewZtVii1043S_DQCjQCi10toLowerTabFNaNbNiNemZwSQDo5ascii7toLowerTAyaZQDzFNaNeQmZ14__foreachbody2MFNaNeKmKwZ14__foreachbody3MFNaNeKwZi +std.uni.toCase!(std.uni.toLowerIndex(dchar), 1043, std.uni.toLowerTab(ulong), std.ascii.toLower, immutable(char)[]).toCase(immutable(char)[]).__foreachbody2(ref ulong, ref dchar).__foreachbody3(ref dchar) diff -Nru gdb-9.1/libiberty/testsuite/demangle-expected gdb-10.2/libiberty/testsuite/demangle-expected --- gdb-9.1/libiberty/testsuite/demangle-expected 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/testsuite/demangle-expected 2021-04-25 04:06:26.000000000 +0000 @@ -1114,7 +1114,7 @@ # http://sourceware.org/bugzilla/show_bug.cgi?id=11572 --format=auto _ZN3Psi7VariantIIcPKcEE5visitIIRZN11VariantTest9TestVisit11test_methodEvEUlS2_E0_RZNS6_11test_methodEvEUlcE1_RZNS6_11test_methodEvEUlNS_4NoneEE_EEENS_13VariantDetail19SelectVisitorResultIIDpT_EE4typeEDpOSG_ -Psi::VariantDetail::SelectVisitorResult<VariantTest::TestVisit::test_method()::{lambda(char const*)#2}&, VariantTest::TestVisit::test_method()::{lambda(char)#3}&, VariantTest::TestVisit::test_method()::{lambda(Psi::None)#1}&>::type Psi::Variant<char, char const*>::visit<VariantTest::TestVisit::test_method()::{lambda(char const*)#2}&, VariantTest::TestVisit::test_method()::{lambda(char)#3}&, VariantTest::TestVisit::test_method()::{lambda(Psi::None)#1}&>((VariantTest::TestVisit::test_method()::{lambda(Psi::None)#1}&)...) +Psi::VariantDetail::SelectVisitorResult<VariantTest::TestVisit::test_method()::{lambda(char const*)#2}&, VariantTest::TestVisit::test_method()::{lambda(char)#3}&, VariantTest::TestVisit::test_method()::{lambda(Psi::None)#1}&>::type Psi::Variant<char, char const*>::visit<VariantTest::TestVisit::test_method()::{lambda(char const*)#2}&, VariantTest::TestVisit::test_method()::{lambda(char)#3}&, VariantTest::TestVisit::test_method()::{lambda(Psi::None)#1}&>(VariantTest::TestVisit::test_method()::{lambda(char const*)#2}&, VariantTest::TestVisit::test_method()::{lambda(char)#3}&, VariantTest::TestVisit::test_method()::{lambda(Psi::None)#1}&) # # Clone suffix tests # @@ -1170,7 +1170,7 @@ # --format=gnu-v3 _ZN4modc6parser8sequenceINS_9astParser13LocatedParserINS0_9ParserRefINS2_UlRNS2_16TokenParserInputEE_EEEEEINS0_14OptionalParserINS2_18ListParserTemplateILNS_6tokens5Token4TypeE4EXadL_ZNSD_Ut_13parenthesizedEEEE6ParserINS4_INS0_6ParserIS5_NS_3ast10ExpressionEEEEEEEEENSA_INS4_INS2_22OneOfKeywordsToTParserINSJ_5StyleEEEEEEENS0_14SequenceParserIS5_INS0_18ExactElementParserIS5_EENSA_ISM_EEEEENS0_14RepeatedParserINS4_INS0_15TransformParserINSU_IS5_INS4_INSP_INSJ_10Annotation12RelationshipEEEEESX_EEENS2_UlNS2_3LocES12_ONS_5MaybeISK_EEE19_EEEEELb0EEEEEENSU_INS0_17ExtractParserTypeIT_E9InputTypeEINS0_8MaybeRefIS1F_E4TypeEDpNS1I_IT0_E4TypeEEEEOS1F_DpOS1L_ -modc::parser::ParserRef<modc::astParser::OneOfKeywordsToTParser<modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::{unnamed type#1}::parenthesized>::Parser::Style> ><modc::parser::ExtractParserType<modc::astParser::LocatedParser<modc::parser::ParserRef<modc::astParser::{lambda(modc::astParser::TokenParserInput&)#1}> > >::InputType, modc::parser::MaybeRef<modc::astParser::{lambda(modc::astParser::Loc, modc::parser::RepeatedParser, modc::Maybe<modc::parser::Parser>&&)#21}>::Type, modc::parser::RepeatedParser<modc::parser::ParserRef<modc::parser::TransformParser<modc::parser::ParserRef<modc::astParser::OneOfKeywordsToTParser<modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::{unnamed type#1}::parenthesized>::Parser::Style> ><modc::astParser::TokenParserInput<modc::parser::ParserRef<modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::{unnamed type#1}::parenthesized>::Parser<modc::parser::ParserRef<modc::parser::Parser<modc::astParser::TokenParserInput, modc::ast::Expression> > ><modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::{unnamed type#1}::parenthesized>::Parser::Annotation::Relationship> >, modc::parser::ExactElementParser> >, modc::astParser::{lambda(modc::astParser::Loc, modc::parser::RepeatedParser, modc::Maybe<modc::parser::Parser>&&)#21}> >, false><modc::parser::OptionalParser<modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::{unnamed type#1}::parenthesized>::Parser<modc::parser::ParserRef<modc::parser::Parser<modc::astParser::TokenParserInput, modc::ast::Expression> > > > >::Type, modc::parser::RepeatedParser<modc::parser::ParserRef<modc::parser::TransformParser<modc::parser::ParserRef<modc::astParser::OneOfKeywordsToTParser<modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::{unnamed type#1}::parenthesized>::Parser::Style> ><modc::astParser::TokenParserInput<modc::parser::ParserRef<modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::{unnamed type#1}::parenthesized>::Parser<modc::parser::ParserRef<modc::parser::Parser<modc::astParser::TokenParserInput, modc::ast::Expression> > ><modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::{unnamed type#1}::parenthesized>::Parser::Annotation::Relationship> >, modc::parser::ExactElementParser> >, modc::astParser::{lambda(modc::astParser::Loc, modc::parser::RepeatedParser, modc::Maybe<modc::parser::Parser>&&)#21}> >, false><modc::astParser::LocatedParser<modc::parser::ParserRef<modc::astParser::{lambda(modc::astParser::TokenParserInput&)#1}> ><modc::parser::ParserRef<modc::astParser::OneOfKeywordsToTParser<modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::{unnamed type#1}::parenthesized>::Parser::Style> > > >::Type, modc::parser::RepeatedParser<modc::parser::ParserRef<modc::parser::TransformParser<modc::parser::ParserRef<modc::astParser::OneOfKeywordsToTParser<modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::{unnamed type#1}::parenthesized>::Parser::Style> ><modc::astParser::TokenParserInput<modc::parser::ParserRef<modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::{unnamed type#1}::parenthesized>::Parser<modc::parser::ParserRef<modc::parser::Parser<modc::astParser::TokenParserInput, modc::ast::Expression> > ><modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::{unnamed type#1}::parenthesized>::Parser::Annotation::Relationship> >, modc::parser::ExactElementParser> >, modc::astParser::{lambda(modc::astParser::Loc, modc::parser::RepeatedParser, modc::Maybe<modc::parser::Parser>&&)#21}> >, false><modc::parser::SequenceParser<modc::astParser::TokenParserInput<modc::parser::ExactElementParser<modc::astParser::TokenParserInput>, modc::astParser::LocatedParser<modc::parser::ParserRef<modc::astParser::{lambda(modc::astParser::TokenParserInput&)#1}> ><modc::ast::Expression> > > >::Type, modc::parser::RepeatedParser<modc::parser::ParserRef<modc::parser::TransformParser<modc::parser::ParserRef<modc::astParser::OneOfKeywordsToTParser<modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::{unnamed type#1}::parenthesized>::Parser::Style> ><modc::astParser::TokenParserInput<modc::parser::ParserRef<modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::{unnamed type#1}::parenthesized>::Parser<modc::parser::ParserRef<modc::parser::Parser<modc::astParser::TokenParserInput, modc::ast::Expression> > ><modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::{unnamed type#1}::parenthesized>::Parser::Annotation::Relationship> >, modc::parser::ExactElementParser> >, modc::astParser::{lambda(modc::astParser::Loc, modc::parser::RepeatedParser, modc::Maybe<modc::parser::Parser>&&)#21}> >, false><modc::parser::RepeatedParser<modc::parser::ParserRef<modc::parser::TransformParser<modc::parser::ParserRef<modc::astParser::OneOfKeywordsToTParser<modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::{unnamed type#1}::parenthesized>::Parser::Style> ><modc::astParser::TokenParserInput<modc::parser::ParserRef<modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::{unnamed type#1}::parenthesized>::Parser<modc::parser::ParserRef<modc::parser::Parser<modc::astParser::TokenParserInput, modc::ast::Expression> > ><modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::{unnamed type#1}::parenthesized>::Parser::Annotation::Relationship> >, modc::parser::ExactElementParser> >, modc::astParser::{lambda(modc::astParser::Loc, modc::parser::RepeatedParser, modc::Maybe<modc::parser::Parser>&&)#21}> >, false> >::Type> modc::parser::sequence<modc::astParser::LocatedParser<modc::parser::ParserRef<modc::astParser::{lambda(modc::astParser::TokenParserInput&)#1}> >, modc::parser::OptionalParser<modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::{unnamed type#1}::parenthesized>::Parser<modc::parser::ParserRef<modc::parser::Parser<modc::astParser::TokenParserInput, modc::ast::Expression> > > >, modc::astParser::LocatedParser<modc::parser::ParserRef<modc::astParser::{lambda(modc::astParser::TokenParserInput&)#1}> ><modc::parser::ParserRef<modc::astParser::OneOfKeywordsToTParser<modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::{unnamed type#1}::parenthesized>::Parser::Style> > >, modc::parser::SequenceParser<modc::astParser::TokenParserInput<modc::parser::ExactElementParser<modc::astParser::TokenParserInput>, modc::astParser::LocatedParser<modc::parser::ParserRef<modc::astParser::{lambda(modc::astParser::TokenParserInput&)#1}> ><modc::ast::Expression> > >, modc::parser::RepeatedParser<modc::parser::ParserRef<modc::parser::TransformParser<modc::parser::ParserRef<modc::astParser::OneOfKeywordsToTParser<modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::{unnamed type#1}::parenthesized>::Parser::Style> ><modc::astParser::TokenParserInput<modc::parser::ParserRef<modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::{unnamed type#1}::parenthesized>::Parser<modc::parser::ParserRef<modc::parser::Parser<modc::astParser::TokenParserInput, modc::ast::Expression> > ><modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::{unnamed type#1}::parenthesized>::Parser::Annotation::Relationship> >, modc::parser::ExactElementParser> >, modc::astParser::{lambda(modc::astParser::Loc, modc::parser::RepeatedParser, modc::Maybe<modc::parser::Parser>&&)#21}> >, false> >(modc::astParser::{lambda(modc::astParser::Loc, modc::parser::RepeatedParser, modc::Maybe<modc::parser::Parser>&&)#21}&&, (modc::parser::ExtractParserType<modc::astParser::LocatedParser<modc::parser::ParserRef<modc::astParser::{lambda(modc::astParser::TokenParserInput&)#1}> > >&&)...) +modc::parser::OptionalParser<modc::parser::ParserRef<modc::astParser::OneOfKeywordsToTParser<modc::parser::Parser::Style> > ><modc::parser::ExtractParserType<modc::astParser::LocatedParser<modc::parser::ParserRef<modc::astParser::{lambda(modc::astParser::TokenParserInput&)#1}> > >::InputType, modc::parser::MaybeRef<modc::parser::ParserRef<modc::parser::TransformParser<modc::parser::OptionalParser<modc::parser::ParserRef<modc::astParser::OneOfKeywordsToTParser<modc::parser::Parser::Style> > ><modc::astParser::TokenParserInput<modc::parser::ParserRef<modc::parser::OptionalParser<modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::Token::{unnamed type#1}::parenthesized>::Parser<modc::parser::ParserRef<modc::parser::Parser<modc::astParser::TokenParserInput, modc::ast::Expression> > > ><modc::parser::Parser::Annotation::Relationship> >, modc::parser::ExactElementParser<modc::astParser::TokenParserInput> > >, modc::astParser::{lambda(modc::astParser::Loc, modc::parser::TransformParser, modc::Maybe<modc::ast>&&)#21}> > >::Type, modc::astParser::LocatedParser<modc::parser::ParserRef<modc::astParser::{lambda(modc::astParser::TokenParserInput&)#1}> ><modc::parser::OptionalParser<modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::Token::{unnamed type#1}::parenthesized>::Parser<modc::parser::ParserRef<modc::parser::Parser<modc::astParser::TokenParserInput, modc::ast::Expression> > > > >::Type, modc::astParser::LocatedParser<modc::parser::ParserRef<modc::astParser::{lambda(modc::astParser::TokenParserInput&)#1}> ><modc::parser::OptionalParser<modc::parser::ParserRef<modc::astParser::OneOfKeywordsToTParser<modc::parser::Parser::Style> > > >::Type, modc::astParser::LocatedParser<modc::parser::ParserRef<modc::astParser::{lambda(modc::astParser::TokenParserInput&)#1}> ><modc::parser::SequenceParser<modc::astParser::TokenParserInput<modc::parser::ExactElementParser<modc::astParser::TokenParserInput>, modc::parser::OptionalParser<modc::parser::Parser<modc::astParser::TokenParserInput, modc::ast::Expression> > > > >::Type, modc::astParser::LocatedParser<modc::parser::ParserRef<modc::astParser::{lambda(modc::astParser::TokenParserInput&)#1}> ><modc::parser::RepeatedParser<modc::parser::ParserRef<modc::parser::TransformParser<modc::parser::OptionalParser<modc::parser::ParserRef<modc::astParser::OneOfKeywordsToTParser<modc::parser::Parser::Style> > ><modc::astParser::TokenParserInput<modc::parser::ParserRef<modc::parser::OptionalParser<modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::Token::{unnamed type#1}::parenthesized>::Parser<modc::parser::ParserRef<modc::parser::Parser<modc::astParser::TokenParserInput, modc::ast::Expression> > > ><modc::parser::Parser::Annotation::Relationship> >, modc::parser::ExactElementParser<modc::astParser::TokenParserInput> > >, modc::astParser::{lambda(modc::astParser::Loc, modc::parser::TransformParser, modc::Maybe<modc::ast>&&)#21}> >, false> >::Type> modc::parser::sequence<modc::astParser::LocatedParser<modc::parser::ParserRef<modc::astParser::{lambda(modc::astParser::TokenParserInput&)#1}> >, modc::parser::OptionalParser<modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::Token::{unnamed type#1}::parenthesized>::Parser<modc::parser::ParserRef<modc::parser::Parser<modc::astParser::TokenParserInput, modc::ast::Expression> > > >, modc::parser::OptionalParser<modc::parser::ParserRef<modc::astParser::OneOfKeywordsToTParser<modc::parser::Parser::Style> > >, modc::parser::SequenceParser<modc::astParser::TokenParserInput<modc::parser::ExactElementParser<modc::astParser::TokenParserInput>, modc::parser::OptionalParser<modc::parser::Parser<modc::astParser::TokenParserInput, modc::ast::Expression> > > >, modc::parser::RepeatedParser<modc::parser::ParserRef<modc::parser::TransformParser<modc::parser::OptionalParser<modc::parser::ParserRef<modc::astParser::OneOfKeywordsToTParser<modc::parser::Parser::Style> > ><modc::astParser::TokenParserInput<modc::parser::ParserRef<modc::parser::OptionalParser<modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::Token::{unnamed type#1}::parenthesized>::Parser<modc::parser::ParserRef<modc::parser::Parser<modc::astParser::TokenParserInput, modc::ast::Expression> > > ><modc::parser::Parser::Annotation::Relationship> >, modc::parser::ExactElementParser<modc::astParser::TokenParserInput> > >, modc::astParser::{lambda(modc::astParser::Loc, modc::parser::TransformParser, modc::Maybe<modc::ast>&&)#21}> >, false> >(modc::parser::ParserRef<modc::parser::TransformParser<modc::parser::OptionalParser<modc::parser::ParserRef<modc::astParser::OneOfKeywordsToTParser<modc::parser::Parser::Style> > ><modc::astParser::TokenParserInput<modc::parser::ParserRef<modc::parser::OptionalParser<modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::Token::{unnamed type#1}::parenthesized>::Parser<modc::parser::ParserRef<modc::parser::Parser<modc::astParser::TokenParserInput, modc::ast::Expression> > > ><modc::parser::Parser::Annotation::Relationship> >, modc::parser::ExactElementParser<modc::astParser::TokenParserInput> > >, modc::astParser::{lambda(modc::astParser::Loc, modc::parser::TransformParser, modc::Maybe<modc::ast>&&)#21}> >&&, (modc::parser::MaybeRef&&)...) --format=gnu-v3 _ZNKR1A1hEv A::h() const & @@ -1189,7 +1189,7 @@ # https://sourceware.org/bugzilla/show_bug.cgi?id=14963#c3 --format=gnu-v3 _ZSt7forwardIRN1x14refobjiteratorINS0_3refINS0_4mime30multipart_section_processorObjIZ15get_body_parserIZZN14mime_processor21make_section_iteratorERKNS2_INS3_10sectionObjENS0_10ptrrefBaseEEEbENKUlvE_clEvEUlSB_bE_ZZNS6_21make_section_iteratorESB_bENKSC_clEvEUlSB_E0_ENS1_INS2_INS0_20outputrefiteratorObjIiEES8_EEEERKSsSB_OT_OT0_EUlmE_NS3_32make_multipart_default_discarderISP_EEEES8_EEEEEOT_RNSt16remove_referenceISW_E4typeE -x::refobjiterator<x::ref<x::mime::multipart_section_processorObj<get_body_parser<mime_processor::make_section_iterator(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)#1}, mime_processor::make_section_iterator(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref<x::mime::sectionObj, x::ptrrefBase> const&)#2}>(std::string const&, x::ref<x::mime::sectionObj, x::ptrrefBase> const&, mime_processor::make_section_iterator(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)#1}&&, mime_processor::make_section_iterator(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref<x::mime::sectionObj, x::ptrrefBase> const&)#2}&&)::{lambda(unsigned long)#1}, x::mime::make_multipart_default_discarder<mime_processor::make_section_iterator(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)#1}&&> >, x::ptrrefBase> >& std::forward<x::refobjiterator<x::ref<x::mime::multipart_section_processorObj<get_body_parser<mime_processor::make_section_iterator(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)#1}, mime_processor::make_section_iterator(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref<x::mime::sectionObj, x::ptrrefBase> const&)#2}>(std::string const&, x::ref<x::mime::sectionObj, x::ptrrefBase> const&, mime_processor::make_section_iterator(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)#1}&&, mime_processor::make_section_iterator(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref<x::mime::sectionObj, x::ptrrefBase> const&)#2}&&)::{lambda(unsigned long)#1}, x::mime::make_multipart_default_discarder<mime_processor::make_section_iterator(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)#1}&&> >, x::ptrrefBase> >&>(std::remove_reference<x::mime::multipart_section_processorObj<get_body_parser<mime_processor::make_section_iterator(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)#1}, mime_processor::make_section_iterator(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref<x::mime::sectionObj, x::ptrrefBase> const&)#2}>(std::string const&, x::ref<x::mime::sectionObj, x::ptrrefBase> const&, mime_processor::make_section_iterator(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)#1}&&, mime_processor::make_section_iterator(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref<x::mime::sectionObj, x::ptrrefBase> const&)#2}&&)::{lambda(unsigned long)#1}, x::mime::make_multipart_default_discarder<mime_processor::make_section_iterator(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)#1}&&> > >::type&) +x::refobjiterator<x::ref<x::mime::multipart_section_processorObj<get_body_parser<mime_processor::make_section_iterator(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)#1}, mime_processor::make_section_iterator(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref<x::mime::sectionObj, x::ptrrefBase> const&)#2}>(std::string const&, x::ref<x::mime::sectionObj, x::ptrrefBase> const&, mime_processor::make_section_iterator(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)#1}&&, mime_processor::make_section_iterator(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref<x::mime::sectionObj, x::ptrrefBase> const&)#2}&&)::{lambda(unsigned long)#1}, x::mime::make_multipart_default_discarder<get_body_parser<mime_processor::make_section_iterator(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)#1}, mime_processor::make_section_iterator(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref<x::mime::sectionObj, x::ptrrefBase> const&)#2}>(std::string const&, x::ref<x::mime::sectionObj, x::ptrrefBase> const&, mime_processor::make_section_iterator(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)#1}&&, mime_processor::make_section_iterator(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref<x::mime::sectionObj, x::ptrrefBase> const&)#2}&&)::{lambda(unsigned long)#1}> >, x::ptrrefBase> >& std::forward<x::refobjiterator<x::ref<x::mime::multipart_section_processorObj<get_body_parser<mime_processor::make_section_iterator(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)#1}, mime_processor::make_section_iterator(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref<x::mime::sectionObj, x::ptrrefBase> const&)#2}>(std::string const&, x::ref<x::mime::sectionObj, x::ptrrefBase> const&, mime_processor::make_section_iterator(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)#1}&&, mime_processor::make_section_iterator(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref<x::mime::sectionObj, x::ptrrefBase> const&)#2}&&)::{lambda(unsigned long)#1}, x::mime::make_multipart_default_discarder<get_body_parser<mime_processor::make_section_iterator(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)#1}, mime_processor::make_section_iterator(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref<x::mime::sectionObj, x::ptrrefBase> const&)#2}>(std::string const&, x::ref<x::mime::sectionObj, x::ptrrefBase> const&, mime_processor::make_section_iterator(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)#1}&&, mime_processor::make_section_iterator(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref<x::mime::sectionObj, x::ptrrefBase> const&)#2}&&)::{lambda(unsigned long)#1}> >, x::ptrrefBase> >&>(std::remove_reference<x::refobjiterator<x::ref<x::mime::multipart_section_processorObj<get_body_parser<mime_processor::make_section_iterator(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)#1}, mime_processor::make_section_iterator(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref<x::mime::sectionObj, x::ptrrefBase> const&)#2}>(std::string const&, x::ref<x::mime::sectionObj, x::ptrrefBase> const&, mime_processor::make_section_iterator(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)#1}&&, mime_processor::make_section_iterator(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref<x::mime::sectionObj, x::ptrrefBase> const&)#2}&&)::{lambda(unsigned long)#1}, x::mime::make_multipart_default_discarder<get_body_parser<mime_processor::make_section_iterator(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)#1}, mime_processor::make_section_iterator(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref<x::mime::sectionObj, x::ptrrefBase> const&)#2}>(std::string const&, x::ref<x::mime::sectionObj, x::ptrrefBase> const&, mime_processor::make_section_iterator(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)#1}&&, mime_processor::make_section_iterator(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref<x::mime::sectionObj, x::ptrrefBase> const&)#2}&&)::{lambda(unsigned long)#1}> >, x::ptrrefBase> >&>::type&) # --format=gnu-v3 --no-params _ZNK7strings8internal8SplitterINS_9delimiter5AnyOfENS_9SkipEmptyEEcvT_ISt6vectorI12basic_stringIcSt11char_traitsIcESaIcEESaISD_EEvEEv @@ -1213,7 +1213,7 @@ # https://sourceware.org/bugzilla/show_bug.cgi?id=14963#c16 --format=gnu-v3 _ZN3mdr16in_cached_threadIRZNK4cudr6GPUSet17parallel_for_eachIZN5tns3d20shape_representation7compute7GPUImpl7executeERKNS_1AINS_7ptr_refIKjEELl3ELl3ENS_8c_strideILl1ELl0EEEEERKNS8_INS9_IjEELl4ELl1ESD_EEEUliRKNS1_7ContextERNS7_5StateEE_JSt6vectorISO_SaISO_EEEEEvOT_DpRT0_EUlSP_E_JSt17reference_wrapperISO_EEEENS_12ScopedFutureIDTclfp_spcl7forwardISW_Efp0_EEEEESV_DpOSW_ -mdr::ScopedFuture<decltype ({parm#1}(((forward<cudr::GPUSet::parallel_for_each<tns3d::shape_representation::compute::GPUImpl::execute(mdr::A<mdr::ptr_ref<unsigned int const>, 3l, 3l, mdr::c_stride<1l, 0l> > const&, mdr::A<mdr::ptr_ref<unsigned int>, 4l, 1l, mdr::c_stride<1l, 0l> > const&)::{lambda(int, cudr::Context const&, tns3d::shape_representation::compute::GPUImpl::State&)#1}, std::vector<tns3d::shape_representation::compute::GPUImpl::State, std::allocator<tns3d::shape_representation::compute::GPUImpl::State> > >(tns3d::shape_representation::compute::GPUImpl::execute(mdr::A<mdr::ptr_ref<unsigned int const>, 3l, 3l, mdr::c_stride<1l, 0l> > const&, mdr::A<mdr::ptr_ref<unsigned int>, 4l, 1l, mdr::c_stride<1l, 0l> > const&)::{lambda(int, cudr::Context const&, tns3d::shape_representation::compute::GPUImpl::State&)#1}&&, std::vector<tns3d::shape_representation::compute::GPUImpl::State, std::allocator<tns3d::shape_representation::compute::GPUImpl::State> >&) const::{lambda(tns3d::shape_representation::compute::GPUImpl::State&)#1}&>)({parm#2}))...))> mdr::in_cached_thread<cudr::GPUSet::parallel_for_each<tns3d::shape_representation::compute::GPUImpl::execute(mdr::A<mdr::ptr_ref<unsigned int const>, 3l, 3l, mdr::c_stride<1l, 0l> > const&, mdr::A<mdr::ptr_ref<unsigned int>, 4l, 1l, mdr::c_stride<1l, 0l> > const&)::{lambda(int, cudr::Context const&, tns3d::shape_representation::compute::GPUImpl::State&)#1}, std::vector<tns3d::shape_representation::compute::GPUImpl::State, std::allocator<tns3d::shape_representation::compute::GPUImpl::State> > >(cudr::GPUSet::parallel_for_each<tns3d::shape_representation::compute::GPUImpl::execute(mdr::A<mdr::ptr_ref<unsigned int const>, 3l, 3l, mdr::c_stride<1l, 0l> > const&, mdr::A<mdr::ptr_ref<unsigned int>, 4l, 1l, mdr::c_stride<1l, 0l> > const&)::{lambda(int, cudr::Context const&, tns3d::shape_representation::compute::GPUImpl::State&)#1}, std::vector<tns3d::shape_representation::compute::GPUImpl::State, std::allocator<tns3d::shape_representation::compute::GPUImpl::State> > >(tns3d::shape_representation::compute::GPUImpl::execute(mdr::A<mdr::ptr_ref<unsigned int const>, 3l, 3l, mdr::c_stride<1l, 0l> > const&, mdr::A<mdr::ptr_ref<unsigned int>, 4l, 1l, mdr::c_stride<1l, 0l> > const&)::{lambda(int, cudr::Context const&, tns3d::shape_representation::compute::GPUImpl::State&)#1}&&, std::vector<tns3d::shape_representation::compute::GPUImpl::State, std::allocator<tns3d::shape_representation::compute::GPUImpl::State> >&) const::{lambda(tns3d::shape_representation::compute::GPUImpl::State&)#1}&, std::vector<tns3d::shape_representation::compute::GPUImpl::State, std::allocator<tns3d::shape_representation::compute::GPUImpl::State> >&) const::{lambda(tns3d::shape_representation::compute::GPUImpl::State&)#1}&, std::reference_wrapper<tns3d::shape_representation::compute::GPUImpl::State> >(cudr::GPUSet::parallel_for_each<tns3d::shape_representation::compute::GPUImpl::execute(mdr::A<mdr::ptr_ref<unsigned int const>, 3l, 3l, mdr::c_stride<1l, 0l> > const&, mdr::A<mdr::ptr_ref<unsigned int>, 4l, 1l, mdr::c_stride<1l, 0l> > const&)::{lambda(int, cudr::Context const&, tns3d::shape_representation::compute::GPUImpl::State&)#1}, std::vector<tns3d::shape_representation::compute::GPUImpl::State, std::allocator<tns3d::shape_representation::compute::GPUImpl::State> > >(tns3d::shape_representation::compute::GPUImpl::execute(mdr::A<mdr::ptr_ref<unsigned int const>, 3l, 3l, mdr::c_stride<1l, 0l> > const&, mdr::A<mdr::ptr_ref<unsigned int>, 4l, 1l, mdr::c_stride<1l, 0l> > const&)::{lambda(int, cudr::Context const&, tns3d::shape_representation::compute::GPUImpl::State&)#1}&&, std::vector<tns3d::shape_representation::compute::GPUImpl::State, std::allocator<tns3d::shape_representation::compute::GPUImpl::State> >&) const::{lambda(tns3d::shape_representation::compute::GPUImpl::State&)#1}&, (cudr::GPUSet::parallel_for_each<tns3d::shape_representation::compute::GPUImpl::execute(mdr::A<mdr::ptr_ref<unsigned int const>, 3l, 3l, mdr::c_stride<1l, 0l> > const&, mdr::A<mdr::ptr_ref<unsigned int>, 4l, 1l, mdr::c_stride<1l, 0l> > const&)::{lambda(int, cudr::Context const&, tns3d::shape_representation::compute::GPUImpl::State&)#1}, std::vector<tns3d::shape_representation::compute::GPUImpl::State, std::allocator<tns3d::shape_representation::compute::GPUImpl::State> > >(tns3d::shape_representation::compute::GPUImpl::execute(mdr::A<mdr::ptr_ref<unsigned int const>, 3l, 3l, mdr::c_stride<1l, 0l> > const&, mdr::A<mdr::ptr_ref<unsigned int>, 4l, 1l, mdr::c_stride<1l, 0l> > const&)::{lambda(int, cudr::Context const&, tns3d::shape_representation::compute::GPUImpl::State&)#1}&&, std::vector<tns3d::shape_representation::compute::GPUImpl::State, std::allocator<tns3d::shape_representation::compute::GPUImpl::State> >&) const::{lambda(tns3d::shape_representation::compute::GPUImpl::State&)#1}&&&)...) +mdr::ScopedFuture<decltype ({parm#1}((forward<std::reference_wrapper<tns3d::shape_representation::compute::GPUImpl::State> >)({parm#2})))> mdr::in_cached_thread<cudr::GPUSet::parallel_for_each<tns3d::shape_representation::compute::GPUImpl::execute(mdr::A<mdr::ptr_ref<unsigned int const>, 3l, 3l, mdr::c_stride<1l, 0l> > const&, mdr::A<mdr::ptr_ref<unsigned int>, 4l, 1l, mdr::c_stride<1l, 0l> > const&)::{lambda(int, cudr::Context const&, tns3d::shape_representation::compute::GPUImpl::State&)#1}, std::vector<tns3d::shape_representation::compute::GPUImpl::State, std::allocator<tns3d::shape_representation::compute::GPUImpl::State> > >(tns3d::shape_representation::compute::GPUImpl::execute(mdr::A<mdr::ptr_ref<unsigned int const>, 3l, 3l, mdr::c_stride<1l, 0l> > const&, mdr::A<mdr::ptr_ref<unsigned int>, 4l, 1l, mdr::c_stride<1l, 0l> > const&)::{lambda(int, cudr::Context const&, tns3d::shape_representation::compute::GPUImpl::State&)#1}&&, std::vector<tns3d::shape_representation::compute::GPUImpl::State, std::allocator<tns3d::shape_representation::compute::GPUImpl::State> >&) const::{lambda(tns3d::shape_representation::compute::GPUImpl::State&)#1}&, std::reference_wrapper<tns3d::shape_representation::compute::GPUImpl::State> >(tns3d::shape_representation::compute::GPUImpl::execute(mdr::A<mdr::ptr_ref<unsigned int const>, 3l, 3l, mdr::c_stride<1l, 0l> > const&, mdr::A<mdr::ptr_ref<unsigned int>, 4l, 1l, mdr::c_stride<1l, 0l> > const&)::{lambda(int, cudr::Context const&, tns3d::shape_representation::compute::GPUImpl::State&)#1}&&, std::vector<tns3d::shape_representation::compute::GPUImpl::State, std::allocator<tns3d::shape_representation::compute::GPUImpl::State> >&&) # https://sourceware.org/bugzilla/show_bug.cgi?id=14963#c18 --format=gnu-v3 _ZNSt9_Any_data9_M_accessIPZN13ThreadManager10futureTaskISt5_BindIFSt7_Mem_fnIM6RunnerFvvEEPS5_EEEEvOT_EUlvE_EERSC_v @@ -1269,7 +1269,7 @@ # --format=gnu-v3 _Z7ZipWithI7QStringS0_5QListZN4oral6detail16AdaptCreateTableI7AccountEES0_RKNS3_16CachedFieldsDataEEUlRKS0_SA_E_ET1_IDTclfp1_cvT__EcvT0__EEEERKT1_ISC_ERKT1_ISD_ET2_ -QList<decltype ({parm#3}((QString)(), (QString)()))> ZipWith<QString, QString, QList, oral::detail::AdaptCreateTable<Account>(oral::detail::CachedFieldsData const&)::{lambda(QString const&, QString const&)#1}>(QList<oral::detail::AdaptCreateTable<Account>(oral::detail::CachedFieldsData const&)::{lambda(QString const&, QString const&)#1}> const&, QList<QList> const&, oral::detail::AdaptCreateTable<Account>(oral::detail::CachedFieldsData const&)::{lambda(QString const&, QString const&)#1}) +QList<decltype ({parm#3}((QString)(), (QString)()))> ZipWith<QString, QString, QList, oral::detail::AdaptCreateTable<Account>(oral::detail::CachedFieldsData const&)::{lambda(QString const&, QString const&)#1}>(QList<QList> const&, QList<QString> const&, oral::detail::AdaptCreateTable<Account>(oral::detail::CachedFieldsData const&)::{lambda(QString const&, QString const&)#1}) # # These three are symbols generated by g++'s testsuite, which triggered the same bug as above. --format=gnu-v3 @@ -1278,7 +1278,7 @@ # --format=gnu-v3 _Z3bazIiEvP1AIXszcl3foocvT__ELCf00000000_00000000EEEE -void baz<int>(A<sizeof (foo((int)(), (floatcomplex )00000000_00000000))>*) +void baz<int>(A<sizeof (foo((int)(), (float _Complex)00000000_00000000))>*) # --format=gnu-v3 _Z3fooI1FEN1XIXszdtcl1PclcvT__EEE5arrayEE4TypeEv @@ -1446,3 +1446,26 @@ _ZZZ3FooIiEfvENKUlT_E_clIcEEDaS0_EN1X2fnEv Foo<int>()::{lambda(auto:1)#1}::operator()<char>(char) const::X::fn() Foo<int>()::{lambda(auto:1)#1}::operator()<char>(char) const::X::fn +#PR91979 demangling nullptr expression + +_Z3fooILPv0EEvPN9enable_ifIXeqT_LDnEEvE4typeE +void foo<(void*)0>(enable_if<((void*)0)==(decltype(nullptr)), void>::type*) + +_ZNK5coro15emptyawEv +coro1::empty::operator co_await() const + +_ZNK3FoossERKS_ +Foo::operator<=>(Foo const&) const + +_Z1f1AIXtl1Udi1iLi0EEEE +f(A<U{.i=(0)}>) + +_Z1f1AIXtl1Xdi1adi1bdxLi3ELi1EEEE +f(A<X{.a.b[3]=(1)}>) + +_Z1f1AIXtl1Xdi1adi1bdXLi3ELi4ELi1EEEE +f(A<X{.a.b[3 ... 4]=(1)}>) + +# PR 96143 +_Z2F2IZ1FvEUlvE_EN1AIT_E1XES2_ +A<F()::{lambda()#1}>::X F2<F()::{lambda()#1}>(F()::{lambda()#1}) diff -Nru gdb-9.1/libiberty/testsuite/demangler-fuzzer.c gdb-10.2/libiberty/testsuite/demangler-fuzzer.c --- gdb-9.1/libiberty/testsuite/demangler-fuzzer.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/testsuite/demangler-fuzzer.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Demangler fuzzer. - Copyright (C) 2014-2019 Free Software Foundation, Inc. + Copyright (C) 2014-2020 Free Software Foundation, Inc. This file is part of GNU libiberty. diff -Nru gdb-9.1/libiberty/testsuite/Makefile.in gdb-10.2/libiberty/testsuite/Makefile.in --- gdb-9.1/libiberty/testsuite/Makefile.in 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/testsuite/Makefile.in 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ # # Makefile -# Copyright (C) 1999-2019 Free Software Foundation, Inc. +# Copyright (C) 1999-2020 Free Software Foundation, Inc. # # This file is part of the libiberty library. # Libiberty is free software; you can redistribute it and/or diff -Nru gdb-9.1/libiberty/testsuite/rust-demangle-expected gdb-10.2/libiberty/testsuite/rust-demangle-expected --- gdb-9.1/libiberty/testsuite/rust-demangle-expected 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/testsuite/rust-demangle-expected 2021-04-25 04:04:35.000000000 +0000 @@ -11,7 +11,7 @@ # ############ # -# Coverage Tests +# Coverage Tests (legacy) # # # Demangles as rust symbol. @@ -41,7 +41,7 @@ # $XX$ substitutions should not contain just numbers. --format=auto _ZN4main4$99$17he714a2e23ed7db23E -main::$99$::he714a2e23ed7db23 +main::$99$ # _ at start of path should be removed. # ".." translates to "::" "$GT$" to ">" and "$LT$" to "<". --format=rust @@ -159,3 +159,139 @@ --format=rust _ZN63_$LT$core..ptr..Unique$LT$T$GT$$u20$as$u20$core..ops..Deref$GT$5deref17h19f2ad4920655e85E <core::ptr::Unique<T> as core::ops::Deref>::deref +# +--format=rust +_ZN11issue_609253foo37Foo$LT$issue_60925..llv$u6d$..Foo$GT$3foo17h059a991a004536adE +issue_60925::foo::Foo<issue_60925::llvm::Foo>::foo +--format=rust +_ZN4core3ops8function6FnOnce40call_once$u7b$$u7b$vtable.shim$u7d$$u7d$17h000b1ad6c4f30bd6E +core::ops::function::FnOnce::call_once{{vtable.shim}} +# +############ +# +# Coverage Tests (v0) +# +# +# Crate with a leading digit. +--format=rust +_RNvC6_123foo3bar +123foo::bar +# UTF-8 identifiers. +--format=rust +_RNqCs4fqI2P2rA04_11utf8_identsu30____7hkackfecea1cbdathfdh9hlq6y +utf8_idents::სáƒáƒ­áƒ›áƒ”ლáƒáƒ“_გემრიელი_სáƒáƒ“ილი +# Closure path elements. +--format=rust +_RNCNCNgCs6DXkGYLi8lr_2cc5spawn00B5_ +cc::spawn::{closure#0}::{closure#0} +# +--format=rust +_RNCINkXs25_NgCsbmNqQUJIY6D_4core5sliceINyB9_4IterhENuNgNoBb_4iter8iterator8Iterator9rpositionNCNgNpB9_6memchr7memrchrs_0E0Bb_ +<core::slice::Iter<u8> as core::iter::iterator::Iterator>::rposition::<core::slice::memchr::memrchr::{closure#1}>::{closure#0} +# dyn Trait ("trait object") types. +--format=rust +_RINbNbCskIICzLVDPPb_5alloc5alloc8box_freeDINbNiB4_5boxed5FnBoxuEp6OutputuEL_ECs1iopQbuBiw2_3std +alloc::alloc::box_free::<dyn alloc::boxed::FnBox<(), Output = ()>> +# Types with const generics parameters. +--format=rust +_RNvMC0INtC8arrayvec8ArrayVechKj7b_E3new +<arrayvec::ArrayVec<u8, 123>>::new +# +--format=rust +_RMCs4fqI2P2rA04_13const_genericINtB0_8UnsignedKhb_E +<const_generic::Unsigned<11>> +# +--format=rust +_RMCs4fqI2P2rA04_13const_genericINtB0_6SignedKs98_E +<const_generic::Signed<152>> +# +--format=rust +_RMCs4fqI2P2rA04_13const_genericINtB0_6SignedKanb_E +<const_generic::Signed<-11>> +# +--format=rust +_RMCs4fqI2P2rA04_13const_genericINtB0_4BoolKb0_E +<const_generic::Bool<false>> +# +--format=rust +_RMCs4fqI2P2rA04_13const_genericINtB0_4BoolKb1_E +<const_generic::Bool<true>> +# +--format=rust +_RMCs4fqI2P2rA04_13const_genericINtB0_4CharKc76_E +<const_generic::Char<'v'>> +# +--format=rust +_RMCs4fqI2P2rA04_13const_genericINtB0_4CharKca_E +<const_generic::Char<'\n'>> +# +--format=rust +_RMCs4fqI2P2rA04_13const_genericINtB0_4CharKc2202_E +<const_generic::Char<'\u{2202}'>> +# +--format=rust +_RNvNvMCs4fqI2P2rA04_13const_genericINtB4_3FooKpE3foo3FOO +<const_generic::Foo<_>>::foo::FOO +# +# All of the tests above but in auto mode instead: +# +# Crate with a leading digit. +--format=auto +_RNvC6_123foo3bar +123foo::bar +# UTF-8 identifiers. +--format=auto +_RNqCs4fqI2P2rA04_11utf8_identsu30____7hkackfecea1cbdathfdh9hlq6y +utf8_idents::სáƒáƒ­áƒ›áƒ”ლáƒáƒ“_გემრიელი_სáƒáƒ“ილი +# Closure path elements. +--format=auto +_RNCNCNgCs6DXkGYLi8lr_2cc5spawn00B5_ +cc::spawn::{closure#0}::{closure#0} +# +--format=auto +_RNCINkXs25_NgCsbmNqQUJIY6D_4core5sliceINyB9_4IterhENuNgNoBb_4iter8iterator8Iterator9rpositionNCNgNpB9_6memchr7memrchrs_0E0Bb_ +<core::slice::Iter<u8> as core::iter::iterator::Iterator>::rposition::<core::slice::memchr::memrchr::{closure#1}>::{closure#0} +# dyn Trait ("trait object") types. +--format=auto +_RINbNbCskIICzLVDPPb_5alloc5alloc8box_freeDINbNiB4_5boxed5FnBoxuEp6OutputuEL_ECs1iopQbuBiw2_3std +alloc::alloc::box_free::<dyn alloc::boxed::FnBox<(), Output = ()>> +# Types with const generics parameters. +--format=auto +_RNvMC0INtC8arrayvec8ArrayVechKj7b_E3new +<arrayvec::ArrayVec<u8, 123>>::new +# +--format=auto +_RMCs4fqI2P2rA04_13const_genericINtB0_8UnsignedKhb_E +<const_generic::Unsigned<11>> +# +--format=auto +_RMCs4fqI2P2rA04_13const_genericINtB0_6SignedKs98_E +<const_generic::Signed<152>> +# +--format=auto +_RMCs4fqI2P2rA04_13const_genericINtB0_6SignedKanb_E +<const_generic::Signed<-11>> +# +--format=auto +_RMCs4fqI2P2rA04_13const_genericINtB0_4BoolKb0_E +<const_generic::Bool<false>> +# +--format=auto +_RMCs4fqI2P2rA04_13const_genericINtB0_4BoolKb1_E +<const_generic::Bool<true>> +# +--format=auto +_RMCs4fqI2P2rA04_13const_genericINtB0_4CharKc76_E +<const_generic::Char<'v'>> +# +--format=auto +_RMCs4fqI2P2rA04_13const_genericINtB0_4CharKca_E +<const_generic::Char<'\n'>> +# +--format=auto +_RMCs4fqI2P2rA04_13const_genericINtB0_4CharKc2202_E +<const_generic::Char<'\u{2202}'>> +# +--format=auto +_RNvNvMCs4fqI2P2rA04_13const_genericINtB4_3FooKpE3foo3FOO +<const_generic::Foo<_>>::foo::FOO diff -Nru gdb-9.1/libiberty/testsuite/test-demangle.c gdb-10.2/libiberty/testsuite/test-demangle.c --- gdb-9.1/libiberty/testsuite/test-demangle.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/testsuite/test-demangle.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Demangler test program, - Copyright (C) 2002-2019 Free Software Foundation, Inc. + Copyright (C) 2002-2020 Free Software Foundation, Inc. Written by Zack Weinberg <zack@codesourcery.com This file is part of GNU libiberty. diff -Nru gdb-9.1/libiberty/testsuite/test-expandargv.c gdb-10.2/libiberty/testsuite/test-expandargv.c --- gdb-9.1/libiberty/testsuite/test-expandargv.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/testsuite/test-expandargv.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* expandargv test program, - Copyright (C) 2006-2019 Free Software Foundation, Inc. + Copyright (C) 2006-2020 Free Software Foundation, Inc. Written by Carlos O'Donell <carlos@codesourcery.com> This file is part of the libiberty library, which is part of GCC. diff -Nru gdb-9.1/libiberty/testsuite/test-pexecute.c gdb-10.2/libiberty/testsuite/test-pexecute.c --- gdb-9.1/libiberty/testsuite/test-pexecute.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/testsuite/test-pexecute.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Pexecute test program, - Copyright (C) 2005-2019 Free Software Foundation, Inc. + Copyright (C) 2005-2020 Free Software Foundation, Inc. Written by Ian Lance Taylor <ian@airs.com>. This file is part of GNU libiberty. diff -Nru gdb-9.1/libiberty/testsuite/test-strtol.c gdb-10.2/libiberty/testsuite/test-strtol.c --- gdb-9.1/libiberty/testsuite/test-strtol.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/testsuite/test-strtol.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Test program for strtol family of funtions, - Copyright (C) 2014-2019 Free Software Foundation, Inc. + Copyright (C) 2014-2020 Free Software Foundation, Inc. Written by Yury Gribov <y.gribov@samsung.com> This file is part of the libiberty library, which is part of GCC. diff -Nru gdb-9.1/libiberty/timeval-utils.c gdb-10.2/libiberty/timeval-utils.c --- gdb-9.1/libiberty/timeval-utils.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/timeval-utils.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Basic struct timeval utilities. - Copyright (C) 2011-2019 Free Software Foundation, Inc. + Copyright (C) 2011-2020 Free Software Foundation, Inc. This file is part of the libiberty library. Libiberty is free software; you can redistribute it and/or diff -Nru gdb-9.1/libiberty/unlink-if-ordinary.c gdb-10.2/libiberty/unlink-if-ordinary.c --- gdb-9.1/libiberty/unlink-if-ordinary.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/unlink-if-ordinary.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* unlink-if-ordinary.c - remove link to a file unless it is special - Copyright (C) 2004-2019 Free Software Foundation, Inc. + Copyright (C) 2004-2020 Free Software Foundation, Inc. This file is part of the libiberty library. This library is free software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/libiberty/vasprintf.c gdb-10.2/libiberty/vasprintf.c --- gdb-9.1/libiberty/vasprintf.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/vasprintf.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Like vsprintf but provides a pointer to malloc'd storage, which must be freed by the caller. - Copyright (C) 1994-2019 Free Software Foundation, Inc. + Copyright (C) 1994-2020 Free Software Foundation, Inc. This file is part of the libiberty library. Libiberty is free software; you can redistribute it and/or diff -Nru gdb-9.1/libiberty/vfprintf.c gdb-10.2/libiberty/vfprintf.c --- gdb-9.1/libiberty/vfprintf.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/vfprintf.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Provide a version vfprintf in terms of _doprnt. By Kaveh Ghazi (ghazi@caip.rutgers.edu) 3/29/98 - Copyright (C) 1998-2019 Free Software Foundation, Inc. + Copyright (C) 1998-2020 Free Software Foundation, Inc. */ #include "ansidecl.h" diff -Nru gdb-9.1/libiberty/vprintf-support.c gdb-10.2/libiberty/vprintf-support.c --- gdb-9.1/libiberty/vprintf-support.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/vprintf-support.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Estimate the length of the string generated by a vprintf-like function. Used by vasprintf and xvasprintf. - Copyright (C) 1994-2019 Free Software Foundation, Inc. + Copyright (C) 1994-2020 Free Software Foundation, Inc. This file is part of the libiberty library. Libiberty is free software; you can redistribute it and/or diff -Nru gdb-9.1/libiberty/vprintf-support.h gdb-10.2/libiberty/vprintf-support.h --- gdb-9.1/libiberty/vprintf-support.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/vprintf-support.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Estimate the length of the string generated by a vprintf-like function. Use by vasprintf and xvasprintf. - Copyright (C) 1994-2019 Free Software Foundation, Inc. + Copyright (C) 1994-2020 Free Software Foundation, Inc. This file is part of the libiberty library. Libiberty is free software; you can redistribute it and/or diff -Nru gdb-9.1/libiberty/vsnprintf.c gdb-10.2/libiberty/vsnprintf.c --- gdb-9.1/libiberty/vsnprintf.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/vsnprintf.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Implement the vsnprintf function. - Copyright (C) 2003-2019 Free Software Foundation, Inc. + Copyright (C) 2003-2020 Free Software Foundation, Inc. Written by Kaveh R. Ghazi <ghazi@caip.rutgers.edu>. This file is part of the libiberty library. This library is free diff -Nru gdb-9.1/libiberty/vsprintf.c gdb-10.2/libiberty/vsprintf.c --- gdb-9.1/libiberty/vsprintf.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/vsprintf.c 2021-04-25 04:06:26.000000000 +0000 @@ -3,7 +3,7 @@ implementations of stdio; newer ones should already have vsprintf. Written by Per Bothner of Cygnus Support. Based on libg++'s "form" (written by Doug Lea; dl@rocky.oswego.edu). - Copyright (C) 1991-2019 Free Software Foundation, Inc. + Copyright (C) 1991-2020 Free Software Foundation, Inc. This file is part of the libiberty library. This library is free software; you can redistribute it and/or modify it under the diff -Nru gdb-9.1/libiberty/xasprintf.c gdb-10.2/libiberty/xasprintf.c --- gdb-9.1/libiberty/xasprintf.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/xasprintf.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Implement the xasprintf function. - Copyright (C) 2014-2019 Free Software Foundation, Inc. + Copyright (C) 2014-2020 Free Software Foundation, Inc. Contributed by Manuel Lopez-Ibanez. This file is part of the libiberty library. diff -Nru gdb-9.1/libiberty/xexit.c gdb-10.2/libiberty/xexit.c --- gdb-9.1/libiberty/xexit.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/xexit.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* xexit.c -- Run any exit handlers, then exit. - Copyright (C) 1994-2019 Free Software Foundation, Inc. + Copyright (C) 1994-2020 Free Software Foundation, Inc. This file is part of the libiberty library. Libiberty is free software; you can redistribute it and/or diff -Nru gdb-9.1/libiberty/xmalloc.c gdb-10.2/libiberty/xmalloc.c --- gdb-9.1/libiberty/xmalloc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/xmalloc.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* memory allocation routines with error checking. - Copyright (C) 1989-2019 Free Software Foundation, Inc. + Copyright (C) 1989-2020 Free Software Foundation, Inc. This file is part of the libiberty library. Libiberty is free software; you can redistribute it and/or diff -Nru gdb-9.1/libiberty/xstrndup.c gdb-10.2/libiberty/xstrndup.c --- gdb-9.1/libiberty/xstrndup.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/xstrndup.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Implement the xstrndup function. - Copyright (C) 2005-2019 Free Software Foundation, Inc. + Copyright (C) 2005-2020 Free Software Foundation, Inc. Written by Kaveh R. Ghazi <ghazi@caip.rutgers.edu>. This file is part of the libiberty library. diff -Nru gdb-9.1/libiberty/xvasprintf.c gdb-10.2/libiberty/xvasprintf.c --- gdb-9.1/libiberty/xvasprintf.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/libiberty/xvasprintf.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Implement the xvasprintf function. - Copyright (C) 2014-2019 Free Software Foundation, Inc. + Copyright (C) 2014-2020 Free Software Foundation, Inc. Contributed by Manuel Lopez-Ibanez. This file is part of the libiberty library. diff -Nru gdb-9.1/MAINTAINERS gdb-10.2/MAINTAINERS --- gdb-9.1/MAINTAINERS 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/MAINTAINERS 2020-09-13 02:33:40.000000000 +0000 @@ -41,7 +41,7 @@ depcomp; mkinstalldirs Send bug reports and patches to bug-automake@gnu.org. -gdb/; gnulib/; readline/; sim/; GDB's part of include/ +gdb/; gdbserver/; gdbsupport/; gnulib/; readline/; sim/; GDB's part of include/ GDB: http://www.gnu.org/software/gdb/ Patches to gdb-patches@sourceware.org. See also gdb/MAINTAINERS and sim/MAINTAINERS. diff -Nru gdb-9.1/Makefile.def gdb-10.2/Makefile.def --- gdb-9.1/Makefile.def 2020-02-08 12:50:13.000000000 +0000 +++ gdb-10.2/Makefile.def 2021-04-25 04:06:26.000000000 +0000 @@ -113,6 +113,8 @@ bootstrap=true; extra_configure_flags='@extra_host_zlib_configure_flags@';}; host_modules= { module= gnulib; }; +host_modules= { module= gdbsupport; }; +host_modules= { module= gdbserver; }; host_modules= { module= gdb; }; host_modules= { module= expect; }; host_modules= { module= guile; }; @@ -392,12 +394,14 @@ dependencies = { module=configure-gdb; on=configure-sim; }; dependencies = { module=configure-gdb; on=all-bfd; }; dependencies = { module=configure-gdb; on=all-gnulib; }; +dependencies = { module=configure-gdb; on=all-gdbsupport; }; // Depend on all-libiconv so that configure checks for iconv // functions will work. dependencies = { module=configure-gdb; on=all-libiconv; }; dependencies = { module=all-gdb; on=all-libiberty; }; dependencies = { module=all-gdb; on=all-libiconv; }; dependencies = { module=all-gdb; on=all-gnulib; }; +dependencies = { module=all-gdb; on=all-gdbsupport; }; dependencies = { module=all-gdb; on=all-opcodes; }; dependencies = { module=all-gdb; on=all-readline; }; dependencies = { module=all-gdb; on=all-build-bison; }; @@ -406,12 +410,23 @@ dependencies = { module=all-gdb; on=all-libtermcap; }; dependencies = { module=all-gdb; on=all-libctf; }; +// Host modules specific to gdbserver. +dependencies = { module=configure-gdbserver; on=all-gnulib; }; +dependencies = { module=all-gdbserver; on=all-gdbsupport; }; +dependencies = { module=all-gdbserver; on=all-gnulib; }; +dependencies = { module=all-gdbserver; on=all-libiberty; }; + dependencies = { module=configure-libgui; on=configure-tcl; }; dependencies = { module=configure-libgui; on=configure-tk; }; dependencies = { module=all-libgui; on=all-tcl; }; dependencies = { module=all-libgui; on=all-tk; }; dependencies = { module=all-libgui; on=all-itcl; }; +dependencies = { module=configure-gdbsupport; on=configure-gnulib; }; +dependencies = { module=configure-gdbsupport; on=configure-intl; }; +dependencies = { module=all-gdbsupport; on=all-gnulib; }; +dependencies = { module=all-gdbsupport; on=all-intl; }; + // Host modules specific to binutils. dependencies = { module=configure-bfd; on=configure-libiberty; hard=true; }; dependencies = { module=configure-bfd; on=configure-intl; }; diff -Nru gdb-9.1/Makefile.in gdb-10.2/Makefile.in --- gdb-9.1/Makefile.in 2020-02-08 12:52:24.000000000 +0000 +++ gdb-10.2/Makefile.in 2021-04-25 04:07:50.000000000 +0000 @@ -943,6 +943,8 @@ maybe-configure-texinfo \ maybe-configure-zlib \ maybe-configure-gnulib \ + maybe-configure-gdbsupport \ + maybe-configure-gdbserver \ maybe-configure-gdb \ maybe-configure-expect \ maybe-configure-guile \ @@ -1097,6 +1099,8 @@ all-host: maybe-all-zlib @endif zlib-no-bootstrap all-host: maybe-all-gnulib +all-host: maybe-all-gdbsupport +all-host: maybe-all-gdbserver all-host: maybe-all-gdb all-host: maybe-all-expect all-host: maybe-all-guile @@ -1205,6 +1209,8 @@ info-host: maybe-info-texinfo info-host: maybe-info-zlib info-host: maybe-info-gnulib +info-host: maybe-info-gdbsupport +info-host: maybe-info-gdbserver info-host: maybe-info-gdb info-host: maybe-info-expect info-host: maybe-info-guile @@ -1292,6 +1298,8 @@ dvi-host: maybe-dvi-texinfo dvi-host: maybe-dvi-zlib dvi-host: maybe-dvi-gnulib +dvi-host: maybe-dvi-gdbsupport +dvi-host: maybe-dvi-gdbserver dvi-host: maybe-dvi-gdb dvi-host: maybe-dvi-expect dvi-host: maybe-dvi-guile @@ -1379,6 +1387,8 @@ pdf-host: maybe-pdf-texinfo pdf-host: maybe-pdf-zlib pdf-host: maybe-pdf-gnulib +pdf-host: maybe-pdf-gdbsupport +pdf-host: maybe-pdf-gdbserver pdf-host: maybe-pdf-gdb pdf-host: maybe-pdf-expect pdf-host: maybe-pdf-guile @@ -1466,6 +1476,8 @@ html-host: maybe-html-texinfo html-host: maybe-html-zlib html-host: maybe-html-gnulib +html-host: maybe-html-gdbsupport +html-host: maybe-html-gdbserver html-host: maybe-html-gdb html-host: maybe-html-expect html-host: maybe-html-guile @@ -1553,6 +1565,8 @@ TAGS-host: maybe-TAGS-texinfo TAGS-host: maybe-TAGS-zlib TAGS-host: maybe-TAGS-gnulib +TAGS-host: maybe-TAGS-gdbsupport +TAGS-host: maybe-TAGS-gdbserver TAGS-host: maybe-TAGS-gdb TAGS-host: maybe-TAGS-expect TAGS-host: maybe-TAGS-guile @@ -1640,6 +1654,8 @@ install-info-host: maybe-install-info-texinfo install-info-host: maybe-install-info-zlib install-info-host: maybe-install-info-gnulib +install-info-host: maybe-install-info-gdbsupport +install-info-host: maybe-install-info-gdbserver install-info-host: maybe-install-info-gdb install-info-host: maybe-install-info-expect install-info-host: maybe-install-info-guile @@ -1727,6 +1743,8 @@ install-pdf-host: maybe-install-pdf-texinfo install-pdf-host: maybe-install-pdf-zlib install-pdf-host: maybe-install-pdf-gnulib +install-pdf-host: maybe-install-pdf-gdbsupport +install-pdf-host: maybe-install-pdf-gdbserver install-pdf-host: maybe-install-pdf-gdb install-pdf-host: maybe-install-pdf-expect install-pdf-host: maybe-install-pdf-guile @@ -1814,6 +1832,8 @@ install-html-host: maybe-install-html-texinfo install-html-host: maybe-install-html-zlib install-html-host: maybe-install-html-gnulib +install-html-host: maybe-install-html-gdbsupport +install-html-host: maybe-install-html-gdbserver install-html-host: maybe-install-html-gdb install-html-host: maybe-install-html-expect install-html-host: maybe-install-html-guile @@ -1901,6 +1921,8 @@ installcheck-host: maybe-installcheck-texinfo installcheck-host: maybe-installcheck-zlib installcheck-host: maybe-installcheck-gnulib +installcheck-host: maybe-installcheck-gdbsupport +installcheck-host: maybe-installcheck-gdbserver installcheck-host: maybe-installcheck-gdb installcheck-host: maybe-installcheck-expect installcheck-host: maybe-installcheck-guile @@ -1988,6 +2010,8 @@ mostlyclean-host: maybe-mostlyclean-texinfo mostlyclean-host: maybe-mostlyclean-zlib mostlyclean-host: maybe-mostlyclean-gnulib +mostlyclean-host: maybe-mostlyclean-gdbsupport +mostlyclean-host: maybe-mostlyclean-gdbserver mostlyclean-host: maybe-mostlyclean-gdb mostlyclean-host: maybe-mostlyclean-expect mostlyclean-host: maybe-mostlyclean-guile @@ -2075,6 +2099,8 @@ clean-host: maybe-clean-texinfo clean-host: maybe-clean-zlib clean-host: maybe-clean-gnulib +clean-host: maybe-clean-gdbsupport +clean-host: maybe-clean-gdbserver clean-host: maybe-clean-gdb clean-host: maybe-clean-expect clean-host: maybe-clean-guile @@ -2162,6 +2188,8 @@ distclean-host: maybe-distclean-texinfo distclean-host: maybe-distclean-zlib distclean-host: maybe-distclean-gnulib +distclean-host: maybe-distclean-gdbsupport +distclean-host: maybe-distclean-gdbserver distclean-host: maybe-distclean-gdb distclean-host: maybe-distclean-expect distclean-host: maybe-distclean-guile @@ -2249,6 +2277,8 @@ maintainer-clean-host: maybe-maintainer-clean-texinfo maintainer-clean-host: maybe-maintainer-clean-zlib maintainer-clean-host: maybe-maintainer-clean-gnulib +maintainer-clean-host: maybe-maintainer-clean-gdbsupport +maintainer-clean-host: maybe-maintainer-clean-gdbserver maintainer-clean-host: maybe-maintainer-clean-gdb maintainer-clean-host: maybe-maintainer-clean-expect maintainer-clean-host: maybe-maintainer-clean-guile @@ -2392,6 +2422,8 @@ maybe-check-texinfo \ maybe-check-zlib \ maybe-check-gnulib \ + maybe-check-gdbsupport \ + maybe-check-gdbserver \ maybe-check-gdb \ maybe-check-expect \ maybe-check-guile \ @@ -2526,6 +2558,8 @@ maybe-install-texinfo \ maybe-install-zlib \ maybe-install-gnulib \ + maybe-install-gdbsupport \ + maybe-install-gdbserver \ maybe-install-gdb \ maybe-install-expect \ maybe-install-guile \ @@ -2577,6 +2611,8 @@ maybe-install-texinfo \ maybe-install-zlib \ maybe-install-gnulib \ + maybe-install-gdbsupport \ + maybe-install-gdbserver \ maybe-install-gdb \ maybe-install-expect \ maybe-install-guile \ @@ -2684,6 +2720,8 @@ maybe-install-strip-texinfo \ maybe-install-strip-zlib \ maybe-install-strip-gnulib \ + maybe-install-strip-gdbsupport \ + maybe-install-strip-gdbserver \ maybe-install-strip-gdb \ maybe-install-strip-expect \ maybe-install-strip-guile \ @@ -28545,6 +28583,888 @@ +.PHONY: configure-gdbsupport maybe-configure-gdbsupport +maybe-configure-gdbsupport: +@if gcc-bootstrap +configure-gdbsupport: stage_current +@endif gcc-bootstrap +@if gdbsupport +maybe-configure-gdbsupport: configure-gdbsupport +configure-gdbsupport: + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + test ! -f $(HOST_SUBDIR)/gdbsupport/Makefile || exit 0; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gdbsupport; \ + $(HOST_EXPORTS) \ + echo Configuring in $(HOST_SUBDIR)/gdbsupport; \ + cd "$(HOST_SUBDIR)/gdbsupport" || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/gdbsupport/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=gdbsupport; \ + $(SHELL) \ + $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + || exit 1 +@endif gdbsupport + + + + + +.PHONY: all-gdbsupport maybe-all-gdbsupport +maybe-all-gdbsupport: +@if gcc-bootstrap +all-gdbsupport: stage_current +@endif gcc-bootstrap +@if gdbsupport +TARGET-gdbsupport=all +maybe-all-gdbsupport: all-gdbsupport +all-gdbsupport: configure-gdbsupport + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + (cd $(HOST_SUBDIR)/gdbsupport && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) $(STAGE1_FLAGS_TO_PASS) \ + $(TARGET-gdbsupport)) +@endif gdbsupport + + + + +.PHONY: check-gdbsupport maybe-check-gdbsupport +maybe-check-gdbsupport: +@if gdbsupport +maybe-check-gdbsupport: check-gdbsupport + +check-gdbsupport: + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + (cd $(HOST_SUBDIR)/gdbsupport && \ + $(MAKE) $(FLAGS_TO_PASS) check) + +@endif gdbsupport + +.PHONY: install-gdbsupport maybe-install-gdbsupport +maybe-install-gdbsupport: +@if gdbsupport +maybe-install-gdbsupport: install-gdbsupport + +install-gdbsupport: installdirs + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + (cd $(HOST_SUBDIR)/gdbsupport && \ + $(MAKE) $(FLAGS_TO_PASS) install) + +@endif gdbsupport + +.PHONY: install-strip-gdbsupport maybe-install-strip-gdbsupport +maybe-install-strip-gdbsupport: +@if gdbsupport +maybe-install-strip-gdbsupport: install-strip-gdbsupport + +install-strip-gdbsupport: installdirs + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + (cd $(HOST_SUBDIR)/gdbsupport && \ + $(MAKE) $(FLAGS_TO_PASS) install-strip) + +@endif gdbsupport + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-gdbsupport info-gdbsupport +maybe-info-gdbsupport: +@if gdbsupport +maybe-info-gdbsupport: info-gdbsupport + +info-gdbsupport: \ + configure-gdbsupport + @: $(MAKE); $(unstage) + @[ -f ./gdbsupport/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing info in gdbsupport"; \ + (cd $(HOST_SUBDIR)/gdbsupport && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + info) \ + || exit 1 + +@endif gdbsupport + +.PHONY: maybe-dvi-gdbsupport dvi-gdbsupport +maybe-dvi-gdbsupport: +@if gdbsupport +maybe-dvi-gdbsupport: dvi-gdbsupport + +dvi-gdbsupport: \ + configure-gdbsupport + @: $(MAKE); $(unstage) + @[ -f ./gdbsupport/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing dvi in gdbsupport"; \ + (cd $(HOST_SUBDIR)/gdbsupport && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + dvi) \ + || exit 1 + +@endif gdbsupport + +.PHONY: maybe-pdf-gdbsupport pdf-gdbsupport +maybe-pdf-gdbsupport: +@if gdbsupport +maybe-pdf-gdbsupport: pdf-gdbsupport + +pdf-gdbsupport: \ + configure-gdbsupport + @: $(MAKE); $(unstage) + @[ -f ./gdbsupport/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing pdf in gdbsupport"; \ + (cd $(HOST_SUBDIR)/gdbsupport && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + pdf) \ + || exit 1 + +@endif gdbsupport + +.PHONY: maybe-html-gdbsupport html-gdbsupport +maybe-html-gdbsupport: +@if gdbsupport +maybe-html-gdbsupport: html-gdbsupport + +html-gdbsupport: \ + configure-gdbsupport + @: $(MAKE); $(unstage) + @[ -f ./gdbsupport/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing html in gdbsupport"; \ + (cd $(HOST_SUBDIR)/gdbsupport && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + html) \ + || exit 1 + +@endif gdbsupport + +.PHONY: maybe-TAGS-gdbsupport TAGS-gdbsupport +maybe-TAGS-gdbsupport: +@if gdbsupport +maybe-TAGS-gdbsupport: TAGS-gdbsupport + +TAGS-gdbsupport: \ + configure-gdbsupport + @: $(MAKE); $(unstage) + @[ -f ./gdbsupport/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing TAGS in gdbsupport"; \ + (cd $(HOST_SUBDIR)/gdbsupport && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + TAGS) \ + || exit 1 + +@endif gdbsupport + +.PHONY: maybe-install-info-gdbsupport install-info-gdbsupport +maybe-install-info-gdbsupport: +@if gdbsupport +maybe-install-info-gdbsupport: install-info-gdbsupport + +install-info-gdbsupport: \ + configure-gdbsupport \ + info-gdbsupport + @: $(MAKE); $(unstage) + @[ -f ./gdbsupport/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing install-info in gdbsupport"; \ + (cd $(HOST_SUBDIR)/gdbsupport && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-info) \ + || exit 1 + +@endif gdbsupport + +.PHONY: maybe-install-pdf-gdbsupport install-pdf-gdbsupport +maybe-install-pdf-gdbsupport: +@if gdbsupport +maybe-install-pdf-gdbsupport: install-pdf-gdbsupport + +install-pdf-gdbsupport: \ + configure-gdbsupport \ + pdf-gdbsupport + @: $(MAKE); $(unstage) + @[ -f ./gdbsupport/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing install-pdf in gdbsupport"; \ + (cd $(HOST_SUBDIR)/gdbsupport && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-pdf) \ + || exit 1 + +@endif gdbsupport + +.PHONY: maybe-install-html-gdbsupport install-html-gdbsupport +maybe-install-html-gdbsupport: +@if gdbsupport +maybe-install-html-gdbsupport: install-html-gdbsupport + +install-html-gdbsupport: \ + configure-gdbsupport \ + html-gdbsupport + @: $(MAKE); $(unstage) + @[ -f ./gdbsupport/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing install-html in gdbsupport"; \ + (cd $(HOST_SUBDIR)/gdbsupport && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-html) \ + || exit 1 + +@endif gdbsupport + +.PHONY: maybe-installcheck-gdbsupport installcheck-gdbsupport +maybe-installcheck-gdbsupport: +@if gdbsupport +maybe-installcheck-gdbsupport: installcheck-gdbsupport + +installcheck-gdbsupport: \ + configure-gdbsupport + @: $(MAKE); $(unstage) + @[ -f ./gdbsupport/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing installcheck in gdbsupport"; \ + (cd $(HOST_SUBDIR)/gdbsupport && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + installcheck) \ + || exit 1 + +@endif gdbsupport + +.PHONY: maybe-mostlyclean-gdbsupport mostlyclean-gdbsupport +maybe-mostlyclean-gdbsupport: +@if gdbsupport +maybe-mostlyclean-gdbsupport: mostlyclean-gdbsupport + +mostlyclean-gdbsupport: + @: $(MAKE); $(unstage) + @[ -f ./gdbsupport/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing mostlyclean in gdbsupport"; \ + (cd $(HOST_SUBDIR)/gdbsupport && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + mostlyclean) \ + || exit 1 + +@endif gdbsupport + +.PHONY: maybe-clean-gdbsupport clean-gdbsupport +maybe-clean-gdbsupport: +@if gdbsupport +maybe-clean-gdbsupport: clean-gdbsupport + +clean-gdbsupport: + @: $(MAKE); $(unstage) + @[ -f ./gdbsupport/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing clean in gdbsupport"; \ + (cd $(HOST_SUBDIR)/gdbsupport && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + clean) \ + || exit 1 + +@endif gdbsupport + +.PHONY: maybe-distclean-gdbsupport distclean-gdbsupport +maybe-distclean-gdbsupport: +@if gdbsupport +maybe-distclean-gdbsupport: distclean-gdbsupport + +distclean-gdbsupport: + @: $(MAKE); $(unstage) + @[ -f ./gdbsupport/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing distclean in gdbsupport"; \ + (cd $(HOST_SUBDIR)/gdbsupport && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + distclean) \ + || exit 1 + +@endif gdbsupport + +.PHONY: maybe-maintainer-clean-gdbsupport maintainer-clean-gdbsupport +maybe-maintainer-clean-gdbsupport: +@if gdbsupport +maybe-maintainer-clean-gdbsupport: maintainer-clean-gdbsupport + +maintainer-clean-gdbsupport: + @: $(MAKE); $(unstage) + @[ -f ./gdbsupport/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing maintainer-clean in gdbsupport"; \ + (cd $(HOST_SUBDIR)/gdbsupport && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + maintainer-clean) \ + || exit 1 + +@endif gdbsupport + + + +.PHONY: configure-gdbserver maybe-configure-gdbserver +maybe-configure-gdbserver: +@if gcc-bootstrap +configure-gdbserver: stage_current +@endif gcc-bootstrap +@if gdbserver +maybe-configure-gdbserver: configure-gdbserver +configure-gdbserver: + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + test ! -f $(HOST_SUBDIR)/gdbserver/Makefile || exit 0; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gdbserver; \ + $(HOST_EXPORTS) \ + echo Configuring in $(HOST_SUBDIR)/gdbserver; \ + cd "$(HOST_SUBDIR)/gdbserver" || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/gdbserver/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + module_srcdir=gdbserver; \ + $(SHELL) \ + $$s/$$module_srcdir/configure \ + --srcdir=$${topdir}/$$module_srcdir \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} \ + || exit 1 +@endif gdbserver + + + + + +.PHONY: all-gdbserver maybe-all-gdbserver +maybe-all-gdbserver: +@if gcc-bootstrap +all-gdbserver: stage_current +@endif gcc-bootstrap +@if gdbserver +TARGET-gdbserver=all +maybe-all-gdbserver: all-gdbserver +all-gdbserver: configure-gdbserver + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + (cd $(HOST_SUBDIR)/gdbserver && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) $(STAGE1_FLAGS_TO_PASS) \ + $(TARGET-gdbserver)) +@endif gdbserver + + + + +.PHONY: check-gdbserver maybe-check-gdbserver +maybe-check-gdbserver: +@if gdbserver +maybe-check-gdbserver: check-gdbserver + +check-gdbserver: + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + (cd $(HOST_SUBDIR)/gdbserver && \ + $(MAKE) $(FLAGS_TO_PASS) check) + +@endif gdbserver + +.PHONY: install-gdbserver maybe-install-gdbserver +maybe-install-gdbserver: +@if gdbserver +maybe-install-gdbserver: install-gdbserver + +install-gdbserver: installdirs + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + (cd $(HOST_SUBDIR)/gdbserver && \ + $(MAKE) $(FLAGS_TO_PASS) install) + +@endif gdbserver + +.PHONY: install-strip-gdbserver maybe-install-strip-gdbserver +maybe-install-strip-gdbserver: +@if gdbserver +maybe-install-strip-gdbserver: install-strip-gdbserver + +install-strip-gdbserver: installdirs + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + (cd $(HOST_SUBDIR)/gdbserver && \ + $(MAKE) $(FLAGS_TO_PASS) install-strip) + +@endif gdbserver + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-gdbserver info-gdbserver +maybe-info-gdbserver: +@if gdbserver +maybe-info-gdbserver: info-gdbserver + +info-gdbserver: \ + configure-gdbserver + @: $(MAKE); $(unstage) + @[ -f ./gdbserver/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing info in gdbserver"; \ + (cd $(HOST_SUBDIR)/gdbserver && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + info) \ + || exit 1 + +@endif gdbserver + +.PHONY: maybe-dvi-gdbserver dvi-gdbserver +maybe-dvi-gdbserver: +@if gdbserver +maybe-dvi-gdbserver: dvi-gdbserver + +dvi-gdbserver: \ + configure-gdbserver + @: $(MAKE); $(unstage) + @[ -f ./gdbserver/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing dvi in gdbserver"; \ + (cd $(HOST_SUBDIR)/gdbserver && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + dvi) \ + || exit 1 + +@endif gdbserver + +.PHONY: maybe-pdf-gdbserver pdf-gdbserver +maybe-pdf-gdbserver: +@if gdbserver +maybe-pdf-gdbserver: pdf-gdbserver + +pdf-gdbserver: \ + configure-gdbserver + @: $(MAKE); $(unstage) + @[ -f ./gdbserver/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing pdf in gdbserver"; \ + (cd $(HOST_SUBDIR)/gdbserver && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + pdf) \ + || exit 1 + +@endif gdbserver + +.PHONY: maybe-html-gdbserver html-gdbserver +maybe-html-gdbserver: +@if gdbserver +maybe-html-gdbserver: html-gdbserver + +html-gdbserver: \ + configure-gdbserver + @: $(MAKE); $(unstage) + @[ -f ./gdbserver/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing html in gdbserver"; \ + (cd $(HOST_SUBDIR)/gdbserver && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + html) \ + || exit 1 + +@endif gdbserver + +.PHONY: maybe-TAGS-gdbserver TAGS-gdbserver +maybe-TAGS-gdbserver: +@if gdbserver +maybe-TAGS-gdbserver: TAGS-gdbserver + +TAGS-gdbserver: \ + configure-gdbserver + @: $(MAKE); $(unstage) + @[ -f ./gdbserver/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing TAGS in gdbserver"; \ + (cd $(HOST_SUBDIR)/gdbserver && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + TAGS) \ + || exit 1 + +@endif gdbserver + +.PHONY: maybe-install-info-gdbserver install-info-gdbserver +maybe-install-info-gdbserver: +@if gdbserver +maybe-install-info-gdbserver: install-info-gdbserver + +install-info-gdbserver: \ + configure-gdbserver \ + info-gdbserver + @: $(MAKE); $(unstage) + @[ -f ./gdbserver/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing install-info in gdbserver"; \ + (cd $(HOST_SUBDIR)/gdbserver && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-info) \ + || exit 1 + +@endif gdbserver + +.PHONY: maybe-install-pdf-gdbserver install-pdf-gdbserver +maybe-install-pdf-gdbserver: +@if gdbserver +maybe-install-pdf-gdbserver: install-pdf-gdbserver + +install-pdf-gdbserver: \ + configure-gdbserver \ + pdf-gdbserver + @: $(MAKE); $(unstage) + @[ -f ./gdbserver/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing install-pdf in gdbserver"; \ + (cd $(HOST_SUBDIR)/gdbserver && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-pdf) \ + || exit 1 + +@endif gdbserver + +.PHONY: maybe-install-html-gdbserver install-html-gdbserver +maybe-install-html-gdbserver: +@if gdbserver +maybe-install-html-gdbserver: install-html-gdbserver + +install-html-gdbserver: \ + configure-gdbserver \ + html-gdbserver + @: $(MAKE); $(unstage) + @[ -f ./gdbserver/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing install-html in gdbserver"; \ + (cd $(HOST_SUBDIR)/gdbserver && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-html) \ + || exit 1 + +@endif gdbserver + +.PHONY: maybe-installcheck-gdbserver installcheck-gdbserver +maybe-installcheck-gdbserver: +@if gdbserver +maybe-installcheck-gdbserver: installcheck-gdbserver + +installcheck-gdbserver: \ + configure-gdbserver + @: $(MAKE); $(unstage) + @[ -f ./gdbserver/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing installcheck in gdbserver"; \ + (cd $(HOST_SUBDIR)/gdbserver && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + installcheck) \ + || exit 1 + +@endif gdbserver + +.PHONY: maybe-mostlyclean-gdbserver mostlyclean-gdbserver +maybe-mostlyclean-gdbserver: +@if gdbserver +maybe-mostlyclean-gdbserver: mostlyclean-gdbserver + +mostlyclean-gdbserver: + @: $(MAKE); $(unstage) + @[ -f ./gdbserver/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing mostlyclean in gdbserver"; \ + (cd $(HOST_SUBDIR)/gdbserver && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + mostlyclean) \ + || exit 1 + +@endif gdbserver + +.PHONY: maybe-clean-gdbserver clean-gdbserver +maybe-clean-gdbserver: +@if gdbserver +maybe-clean-gdbserver: clean-gdbserver + +clean-gdbserver: + @: $(MAKE); $(unstage) + @[ -f ./gdbserver/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing clean in gdbserver"; \ + (cd $(HOST_SUBDIR)/gdbserver && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + clean) \ + || exit 1 + +@endif gdbserver + +.PHONY: maybe-distclean-gdbserver distclean-gdbserver +maybe-distclean-gdbserver: +@if gdbserver +maybe-distclean-gdbserver: distclean-gdbserver + +distclean-gdbserver: + @: $(MAKE); $(unstage) + @[ -f ./gdbserver/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing distclean in gdbserver"; \ + (cd $(HOST_SUBDIR)/gdbserver && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + distclean) \ + || exit 1 + +@endif gdbserver + +.PHONY: maybe-maintainer-clean-gdbserver maintainer-clean-gdbserver +maybe-maintainer-clean-gdbserver: +@if gdbserver +maybe-maintainer-clean-gdbserver: maintainer-clean-gdbserver + +maintainer-clean-gdbserver: + @: $(MAKE); $(unstage) + @[ -f ./gdbserver/Makefile ] || exit 0; \ + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + for flag in $(EXTRA_HOST_FLAGS) ; do \ + eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \ + done; \ + echo "Doing maintainer-clean in gdbserver"; \ + (cd $(HOST_SUBDIR)/gdbserver && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + maintainer-clean) \ + || exit 1 + +@endif gdbserver + + + .PHONY: configure-gdb maybe-configure-gdb maybe-configure-gdb: @if gcc-bootstrap @@ -51049,16 +51969,23 @@ all-stagefeedback-intl: maybe-all-stagefeedback-libiconv configure-gdb: maybe-configure-sim configure-gdb: maybe-all-gnulib +configure-gdb: maybe-all-gdbsupport all-gdb: maybe-all-gnulib +all-gdb: maybe-all-gdbsupport all-gdb: maybe-all-readline all-gdb: maybe-all-build-bison all-gdb: maybe-all-sim all-gdb: maybe-all-libtermcap +configure-gdbserver: maybe-all-gnulib +all-gdbserver: maybe-all-gdbsupport +all-gdbserver: maybe-all-gnulib configure-libgui: maybe-configure-tcl configure-libgui: maybe-configure-tk all-libgui: maybe-all-tcl all-libgui: maybe-all-tk all-libgui: maybe-all-itcl +configure-gdbsupport: maybe-configure-gnulib +all-gdbsupport: maybe-all-gnulib configure-bfd: configure-libiberty configure-stage1-bfd: configure-stage1-libiberty configure-stage2-bfd: configure-stage2-libiberty @@ -51503,6 +52430,8 @@ configure-libcc1: stage_last configure-utils: stage_last configure-gdb: stage_last +configure-gdbserver: stage_last +configure-gdbsupport: stage_last configure-gprof: stage_last configure-sid: stage_last configure-sim: stage_last @@ -51525,6 +52454,9 @@ all-gdb: maybe-all-opcodes all-gdb: maybe-all-libdecnumber all-gdb: maybe-all-libctf +all-gdbserver: maybe-all-libiberty +configure-gdbsupport: maybe-configure-intl +all-gdbsupport: maybe-all-intl configure-gprof: maybe-configure-intl all-gprof: maybe-all-libiberty all-gprof: maybe-all-bfd diff -Nru gdb-9.1/md5.sum gdb-10.2/md5.sum --- gdb-9.1/md5.sum 2020-02-08 12:54:26.000000000 +0000 +++ gdb-10.2/md5.sum 2021-04-25 04:10:51.000000000 +0000 @@ -1,7562 +1,7950 @@ a657821f65bab77f4fbf3a75cdee6da9 ar-lib -d8f435cc08217e1b50108a271efe13bc bfd/mach-o.c -0b76fafe89d70f2ea04f6b9a1e79989f bfd/hppabsd-core.c -b026e9477cdd5d8a19e171c0853e35b3 bfd/i386lynx.c -694111f3c4213b3a169327bff1fcbf97 bfd/elf32-rl78.c -d0db836c13f112e8b7bcfbb58d415567 bfd/pef.h -226b49cf54fe0a6f9be8e45f77eb8fd8 bfd/elf.c -f9da3242250d9511f635bc432f61cca9 bfd/elfxx-target.h -e0db75d136d9b1d6b0ec400f569abd85 bfd/cpu-pj.c -b967a433433ae3829243f460e1dbfa3f bfd/pe-x86_64.c -58bc56d7dd9219f5efdfa1803bcb27aa bfd/libxcoff.h -c2914d571de7834fa23bc64df8250a9e bfd/elf32-visium.c -cbf14399c1158112659f20b19bf639a0 bfd/cpu-bpf.c -76d99d44c1db5ede96089464cf218327 bfd/bfdio.c -b9c061935040919312f55d3cfe40c41a bfd/aix386-core.c -c87a9a389c6b8183619d5ec56fdddf84 bfd/aoutx.h -5886830d17a1bca1023a4adab4a69585 bfd/coffswap.h -f429a221c87ad5751721df36245fba7a bfd/cpu-i386.c -734306dc77344a12f318b9c19b1afd41 bfd/arc-plt.h -3f8878b7beb8fda7df2fedab47c3f6e8 bfd/cpu-tilepro.c -642b99ebed4c6bdaf1004d49db48ebec bfd/xcofflink.c -d4b5744766450e4eae329a6bdeda9f32 bfd/elf32-h8300.c -d9d91776e871b403933bd4b6aabafb14 bfd/pei-sh.c -60e5353a5e95211e247d675985ff9f90 bfd/cpu-alpha.c -56d84c76975f41c74f5d45e7a5b1c8fe bfd/cpu-tic80.c -2b9ea29665f8e4e2f78b646567059733 bfd/ChangeLog-2017 -add328284dfca8cd1321af403d6a725c bfd/archive.c -8f4546a5e1b4bfb7045af3f6a958973e bfd/elf32-xgate.c -4b6373c28b50284b72dc26b4992bd059 bfd/pef.c -d6bd4f6d0c2627b13c05ef7cb49b2d7d bfd/elf32-epiphany.c -663a6979bd331c91d1385445edeca7b0 bfd/go32stub.h -c32be227fcc3dd00493299d20a75828d bfd/pc532-mach.c -92bb96b178a87a60e3782c0e28a4d94e bfd/vms-lib.c -06c8428cc4a55ada8601e8ef4ffb24bd bfd/simple.c -405b1277341558625bcbb847f26623b6 bfd/ecofflink.c -1ae0da80783890f98662b5f92fd0eece bfd/pei-x86_64.c -05c3a18d3b446ed07b05921c490c8b88 bfd/elf32-pj.c -39e5178f33d7ba2d3cf596ff51dd463d bfd/ChangeLog -6ba81570a415f64ae3906377cc5415a8 bfd/cpu-aarch64.h -25e2e179fd9a53a9e7fb260a0bcc4e90 bfd/configure -3419b03546d9c8690ec02c4e0d6e07bb bfd/elf32-wasm32.c -5091492b4902a9a2c325e0327404859e bfd/elf32-fr30.c -278263ab939262f8654d0cdb69be20a2 bfd/cpu-xstormy16.c -265e90e69dc5cf305cb7ab705f227667 bfd/elf64-tilegx.c -8d81cad8a4873c82d17f74172dbbdb62 bfd/elf32-spu.c -5fe07072b4e42cbce08a02876952cb71 bfd/elf32-m68hc12.c -d86e0e4100a7bd9dadceadd1e4d9a175 bfd/hpux-core.c -00372f12a27e2b0bec626dfdf5a2ee9a bfd/pei-i386.c -7c8e48e783711080575ef438683e4be6 bfd/ppcboot.c -9fc873fbf603255dbcaed016ebd095f4 bfd/init.c -bbcba73fa5056239bb44500e9ec00d90 bfd/cisco-core.c -b639c27d91e37fef6304c7e483f9d511 bfd/elf32-ppc.h -9f86d06744b4b49e4c7e008bec516836 bfd/elfxx-sparc.h -b777142b4f150722308522a54b4e1d66 bfd/elf32-ppc.c -cb79ed3edf6c266e9203ed32ddf42582 bfd/elfnn-aarch64.c -12d078caa9c7818876927ef24f3e35fd bfd/cpu-tic4x.c -d32239bcb673463ab874e80d47fae504 bfd/COPYING +0fb69385b649a28329992ec98f491ff6 bfd/coff-ia64.c +6dcfc529b4e75e74ec6d1edcdc43d316 bfd/coff-i386.c +d854a06bbc2dc575b791ab468b614004 bfd/elf32-xtensa.c +310c3b93f6906153c1bf542878874b5b bfd/elf32-lm32.c +94e99855c818b82351a9125fa5ab98a4 bfd/peicode.h +f2c13dab9694865ff7a9eedee5d82e88 bfd/linker.c +7817ce9fa45c93f4e673684f8db13464 bfd/elf32-score.c +4730a96df3fe1a657289c366a4f39344 bfd/ChangeLog-2006 +4af3e83185ee63540e822d74ca0fbe41 bfd/elf64.c +e30d31e2f7d2dd02acd540d16092f10e bfd/elf-vxworks.c +21dc432ee86b6553fb983a5ad4e345d8 bfd/cpu-iamcu.c +1f1d4395e65db3e5a8172510108c07fc bfd/cpu-dlx.c +9547f4c8a698fd109582e8647061f4ee bfd/elfxx-aarch64.h +bcf99df76a4837a1b2d0dfea57bbd6db bfd/ChangeLog-2016 +00cc8a8822a249e656345b2941fabc31 bfd/xcofflink.h +8e4f7bf28f096370e504ffd54cfa2c88 bfd/cpu-or1k.c +bda5dea0fdd8036f4f872999e086bdc1 bfd/coff-mips.c +63df82686467569448edd32f91bd679e bfd/cpu-riscv.c +68a81835972c3e88138d182dbdad8160 bfd/cpu-sh.c +b0773f889d0836aa132adc79bdbc4b35 bfd/archive64.c +2e6867ea8811053d4924d5211fd29846 bfd/elf64-s390.c +6d2be248ad64404a2149fc159ad12968 bfd/elf32-ft32.c +de34b3d1ffe56453c28f6c7a219d019e bfd/dwarf2.c +bc1dc86a61b627316c22276e21e7db32 bfd/elfcode.h +e25cc58e53622408c57a794ffdd3e8c3 bfd/cpu-m9s12xg.c +1326b1d8dc4530011037a5bdb4608681 bfd/cpu-ft32.c +2bb69bf4a5a3b566832e828ffe624b82 bfd/elf32-ppc.c +f7c16031e61b168efd943ed86fb699b2 bfd/pef-traceback.h +05f8e2474024c5bf9c996508e86d4460 bfd/elf32-m68k.h +71a8c27937909d735881fa5bd34cb3c0 bfd/cpu-m10300.c +431d5cf2ba01d830a9a30d679f245da6 bfd/som.c +46eecc7d216ca455d20a14b5199e7682 bfd/pei-arm.c +21a32a12f94f70ec44b2c39fbe93d963 bfd/elf64-tilegx.c +06382ede243716f19b877d7d2681af44 bfd/elfxx-aarch64.c +87a8d40d89447cb411b16012109b4408 bfd/elf32-metag.c +874fde984571b42202d8d3a49bf546ef bfd/elf32-arc.c +a88619b637766470f1f75dfb449d7e47 bfd/ecoff.c +e8de8983da14330546776c4579a15ff2 bfd/mach-o-arm.c +d7aef099193aee45fbcf4c124159c7e4 bfd/cpu-microblaze.c +404653a4f9af131be5de4fd923585548 bfd/elf32-frv.c +bb0d82170cfa7ef1726caeb094966c86 bfd/verilog.c +d359597f7e027264df0e13ccdd2d4b30 bfd/ChangeLog-2015 +2ee7b762c69983fa3cf2f962fece9f6d bfd/elf32-tic6x.c +c19329f940a5877ae339f64b644501d1 bfd/elf32-d30v.c +7e937140c4ce650155d6598b2868aa7d bfd/srec.c +ec05d4be56157df8c9e1fd7108439cc1 bfd/cpu-h8300.c +52fddaa220ece137af508d579758b1d3 bfd/libxcoff.h +d955367c0e69ec5a28bb66c986c44752 bfd/elfxx-tilegx.c +4a6144bc7a8d58e6cf8a886e3b7e8471 bfd/ChangeLog +2d7e2fbdcb117a77fe255946992c6609 bfd/coff-go32.c +50ae7aef95a7ac63c67e7670cced52db bfd/elf32-mt.c +6cf40b579b7f5d5a3b870ba4f257ff5b bfd/binary.c +1e27171a4698f39ccc5d2bbf3826161f bfd/configure +4e3bbf9c738eb7717954bae6589372b9 bfd/cisco-core.c +5e5ffb014bc4f9a7ea19c50ee80cc464 bfd/cpu-ia64.c +8212e4aeb25d24fe5ee3566359b97969 bfd/pe-arm.c +eb07005a20c35f420ae1d86b325d5001 bfd/cpu-mep.c +a101966a4d25c268cbbad43fa2583705 bfd/cpu-ia64-opc.c +a78cc44d89f514bdab8d5d3048b0e437 bfd/config.bfd +8c57f64b6359d72b956599f760fa3184 bfd/netbsd.h +c0f5c01bdb312a1c01b844a226bb0184 bfd/elf64-nfp.c +4cdefc269f36d752f3958984df5f5821 bfd/coff-tic30.c +8a7ff91f39e12b3673ffa355db719012 bfd/elfxx-mips.c +d9f1f0e2ad78660f2090402aa375e45e bfd/cpu-xgate.c +98862cfb5d2351dd60dafbcbd8bc064d bfd/elf-linux-core.h +417aaae836af4c8eec106b8492956db8 bfd/elf-eh-frame.c +eb4c1848f10b6ba66e65c16cb881c110 bfd/elfxx-riscv.h +e04dac1dd1cd9f88f5beb67f7d017dce bfd/elf32-rl78.c +a4653a6c3d04bcace4c346911feac8cf bfd/elf32-sh.c +b09c0ec80efdad4e3ba235b04393d8ff bfd/cpu-vax.c 502da5f655e885f8085c0794f6f0f3a6 bfd/ChangeLog-9193 -4b60565047660a8d775764bc435a4fe7 bfd/cpu-m68k.c -6e2589a26c40f4428f74803c81023c62 bfd/elf32-tic6x.c -94dade1d589be63dd514244716aaab4e bfd/cpu-h8300.c -db81c4d9e9ac0e7436844e1b01a3bd35 bfd/version.h -232bf9daefa89c1d90efc78720719978 bfd/MAINTAINERS -d15f17640f3f202411b963c41cc0e037 bfd/cpu-arm.h -d3bd0a60b47cd43b306af9acd9b32772 bfd/pe-arm-wince.c -daf85abb65bf8fdbc8b9a19c8facd808 bfd/elf32-d10v.c -eefbd6b690ba3052c86693a711df5d4d bfd/cpu-sh.c -7c9b66d0d8f289bd851a12fc0fcee7c2 bfd/cpu-s390.c -0181a9b4b6693bdf84a4fd32e8d485ee bfd/elfxx-mips.h -bed3ebb05c76beb310263894a90540e3 bfd/cpu-lm32.c -37666c1bb94a763d3e885a1b0145e3bf bfd/elf-nacl.h -a840edd00502ae1fb6ad77c6e9aea36d bfd/pe-arm.c -157012687dfb98252c737042f9f2a567 bfd/elf64-x86-64.c -306fba5aea8fc84b37bbc362cd2ebbd9 bfd/cpu-v850.c -640c0e2aa4fdb7104b909561e290a7bf bfd/format.c -dc806684dd47180750f8cf5ff388f622 bfd/elf32-pru.c -a6fa6c331ed0bf323e530e1fa8c9fc30 bfd/coff-arm.c -7d710529ca3fafb2bb57132df24957e3 bfd/ChangeLog-2004 -a6e415e05baf84511c3d62d58056870f bfd/elf32-hppa.h -10dafcfda5f31c10ac58ffdbe6089c19 bfd/coff-arm.h -a8e426a4574de4afff59fd1278cf92b7 bfd/pei-ppc.c -5f531477abaf07cba5168dfea773ba86 bfd/elfxx-tilegx.h -00d953b42aec467dd9741571e2fd4593 bfd/stab-syms.c -f0a62cff931a49bccf00d3d49d81fc03 bfd/elf32-m68hc11.c -968eb947c31825340e4d7b98a8896ec4 bfd/targets.c +408ef1462276b75d3708877103c85eb8 bfd/.gitignore +1be9094cb23dfa4afdbe06a55299905a bfd/elf32-dlx.c +48097790cbee8800147ba96a6dd07fc8 bfd/ChangeLog-0203 +48512e8694502e91d0afd0eb4dbac297 bfd/cpu-score.c +c0571ca909d53969b90ef829dec9a614 bfd/elfxx-sparc.c +15cdfd7b5500a342bb89992c1638f683 bfd/ChangeLog-2007 +25a2c2683eab840a0ceb14ce15667869 bfd/elf32-vax.c +e037a355c6550a8043d8ab6606c64398 bfd/libbfd.c +dad496c68df8395b3cdb8e3187c37eb1 bfd/dep-in.sed +4f683b032796acd7247220b18f5242e9 bfd/MAINTAINERS +22b29fbbcee3cbfd51a89c052cc8a380 bfd/makefile.vms +4a50ddc293e31ccb3695c5807e21d75e bfd/cpu-l1om.c +72b8815f7297b5bd631586f2a4468948 bfd/cpu-tilegx.c +89894646ce3fdca47ec5364136fe4f4a bfd/ecofflink.c +35ed76daa109408c072c740573d69c82 bfd/cpu-xstormy16.c +019eab93973e604600f4c7706c1c2e32 bfd/elf32-csky.h +05b17c12ac5ff7c01672ab6ead75a657 bfd/cpu-m10200.c +638d43af16214fa174e952bfd78f03f9 bfd/elf64-alpha.c +3c1ddcb029195e9fe8307664040741d6 bfd/bfd.c +7e40c57ce0ed5adacd56ca1f21a5bbb6 bfd/section.c +5cc5789a4cae35b7198fc2032c98784c bfd/elf32-iq2000.c +a919bc62dc52ab557832759934e090c4 bfd/coff-tic4x.c +3cafd799c6bef49379cf50e0193b6b9d bfd/elf32-m32c.c +4b5c3ac2eb64b792008f2e9f014e10a8 bfd/cpu-mips.c +a9a41a5bad15cea08fda87dab536ecae bfd/reloc.c +831462926b8e17a139d8d37b7748a23b bfd/elf64-hppa.c +9a359fb239c779ec5fa43ec6bb02b650 bfd/cpu-m32r.c +7ce98117fdca9cb7be61e2a2b1b06914 bfd/irix-core.c +92cad294f8003d7641aae98c2a79477b bfd/elf-linker-x86.h +4b836bcdc0ea291dd37b858f6d156a93 bfd/warning.m4 +ede8c6ad069ce1d9b1c55b080a503d17 bfd/cpu-visium.c +90fd3ada035bf2fe46bd854323d1b125 bfd/libaout.h +1ee06a1cdfacc25b3922c949d4e5ff86 bfd/compress.c +42ef15404112156d03810f3d987a2f69 bfd/elf32-m68k.c +f147cc12eb9e588475ed02b282901dd5 bfd/elf32-xgate.c +a07e867bea8f32a0a437708d4a8f234f bfd/elf32-tilegx.h +6392a0a622160a85a3556ed12a06f6ac bfd/pef.h +8f6163703e8c6076be31d2e427d20105 bfd/elfxx-sparc.h +8ae483e536e27a1cbc449f8feb89d662 bfd/ChangeLog-2018 +cbf5240ee97d88b82e8c0da156265e54 bfd/elf-strtab.c +41b2b7d4314c0d71c295e8fcaeeba355 bfd/elf-hppa.h +d892c12345e94dfa717dbc65e9966bbb bfd/sco5-core.c +8bc63c12acbc73fd0cea101dd647b993 bfd/host-aout.c +6bb7cdaf6a6a2ffedac82ec95f4569ec bfd/config.in +50056123a5acff1bced2297dd684a547 bfd/cpu-mt.c +493373d681df46967180cf1f16352d9c bfd/ns32knetbsd.c +26c2c447e7ef8eb009f82a0852bb1305 bfd/corefile.c +2beb32b071e84e8f66bfbed4e7e2f076 bfd/i386msdos.c +ac26580e531a7b18a8653d0cba189b49 bfd/xtensa-modules.c +22a19c5b4486ca76bcf545b100fcb461 bfd/coff-bfd.h +22419a97d8bb06c9926090e4615ed76d bfd/Makefile.am +74d318e6c9031a036336396ca55c2f94 bfd/sysdep.h +53c0b3869f6eb5bf24cf57eeb958c322 bfd/trad-core.c +6921b6426a2273950ad87d34b1e3da64 bfd/elf32-h8300.c +a4a7b9a0a64704b18225c64fcd109bc8 bfd/cpu-tic4x.c +4c7820f8b984d29ad8cee68bee8cdd18 bfd/i386lynx.c +57620cfff5fd5f95e90afc628d18086b bfd/libecoff.h +b807450c30d4bb4499b0d5a0eb6b12cd bfd/arc-plt.def +61e20ca5fb57eec9b21d45c128cde882 bfd/stab-syms.c +798ec0b1b4b001f3146584d9dbfb3edb bfd/vms-lib.c +2a33d4e27566eafcc444e0a0c583139c bfd/cpu-xc16x.c +9dd7ee9f9a2927bdb9eee45e74ceec5f bfd/plugin.c +e822ebd7348b2b1916f51d7003fe1068 bfd/elf32-arm.c +7e0abcc2cb3987aec4d7689b4ed259c3 bfd/reloc16.c +1066b41f0001fe7d37880adf90ab95fb bfd/xsym.h +652a64ad19857d9126b354f786d37c7f bfd/pei-sh.c +c7cca48aad6ed0c7244b560d335df874 bfd/elf32-d10v.c +ca6cc8728f39ca7e3e952fd23982c5d9 bfd/cpu-v850_rh850.c +50d9bd8d00e1988a3098aff9a05611a9 bfd/ppcboot.c +06621f29e9f29bae58b367098d414c28 bfd/elf-vxworks.h +f5ad372cf681a57b9a43f6975c05e33c bfd/ChangeLog-2012 +acaa274767bbf06cb0a2b362e5481c84 bfd/elfnn-riscv.c +170236edf5ef5aa7e25b491b08d9ef2e bfd/cpu-msp430.c +4158802f2cb0b8c57572aa29e31695a1 bfd/elf64-bpf.c +925e71ca9a25e792ad1d68c1b99f460f bfd/elf64-gen.c +36cf771eed09dee694763419e0992ba2 bfd/aout64.c +b9fa734ffaf15212709c8b85e1dc24ec bfd/cpu-fr30.c +6474afde93f8e964e3d6dddffde3c41e bfd/ChangeLog-0001 +bdc58eec8fff72475dc52e0cd2e8b20a bfd/cpu-bpf.c +505d45edeebfb7de16fc0b82daaf12af bfd/cpu-arm.h +d6d1857cfabf324619bd30da5e8275fc bfd/aix386-core.c +c5748387f9219e7e75e1a859d9415692 bfd/elf32-csky.c +093b68f9a49c4b1e652f7aa8fd22eff2 bfd/elf32-avr.c +1daa739c0a2538c25ffab3cb013c18d5 bfd/elf32-xc16x.c +2c2aa2106679502b986eaba691101b2c bfd/elf64-ppc.c +b15df15dae52aa50e18d288aa71439f3 bfd/cpu-arc.c +1e35ed78a9fdbfb07a6d94d2b441e202 bfd/pei-arm-wince.c +46681a1fb66bb6f79df479290e34994a bfd/coff-rs6000.c +cc346da59cec1b28efad7ffdc05a3aed bfd/cpu-pru.c +d266da5b4043bf3aa6277c178979415c bfd/elf32-m68hc12.c +58ccaa4cc33da296d91b8af0ca144770 bfd/aout32.c +58a3fb1e054b540ef5c1329799b824bb bfd/ChangeLog-2005 +d9e9a97afaf586c770ceb28375f41fce bfd/elf64-sparc.c +ae248950389e4fa172bfc0e826c4560f bfd/cpu-z8k.c +30c5bd2be4a94de5b8151dc3c158a94e bfd/mach-o-target.c +115d84a0b1ff0eda7653be80dd4b6280 bfd/elf64-tilegx.h +c2b2aa2f06bc6af9792315fbdace2df4 bfd/elf32-rx.h +591aa09c5702f10055c6259b1fd6c49e bfd/cofflink.c +297ba6dea91e5ab1ff738e87da3855ad bfd/elf32-mep.c +dc5c93b1674b60cbea453b80f223e805 bfd/cpu-i386.c +c694b1dba21c2a3ace3440e4331e5fc7 bfd/vms-alpha.c +1ded054093de910d9786c62bc4fe8cc6 bfd/stamp-h.in +635a45cb9cad2b1d70918af7cf6047ce bfd/elf-s390.h +b7f70564500f03b50773fcc95e304713 bfd/peXXigen.c bbf88fdf4e23c9cba924526076284b78 bfd/ChangeLog-2010 -fc7c2d6dabf90fa448ca683f950b97d6 bfd/cpu-m32c.c -dc7a1818389db5b1a7be3c8c5f07de9d bfd/cpu-microblaze.c -204f8b7d145d327a40e77cdf5dc04258 bfd/cpu-powerpc.c -2ce8eb2c83eeb75f065e367a233cc087 bfd/elfxx-aarch64.c -252ced00e27e403e8294e3f1aa00b910 bfd/doc/targets.texi -2cbab54168732518540f83c27e8bd625 bfd/doc/bfdint.texi -6dd9da257666139a061d6905349d9614 bfd/doc/core.texi -e0284264a7ec8c5b64e8f78af5df4c12 bfd/doc/bfd.info -8d4219b9950b61d35080cbf5e375cd4d bfd/doc/bfdsumm.texi -f2c7b61a9f7d3edb04f3d566f3389def bfd/doc/reloc.texi -0b2ff8ac8f14dfc46e33e0bf0df9e275 bfd/doc/archures.texi -930173859dab35d4c1c03efd5ddb18e3 bfd/doc/format.texi -072910d553f79906db69fa7c0e956bba bfd/doc/fdl.texi -51139f6af786e74446d01ec49807fc28 bfd/doc/elf.texi +32f673b9912f23f8f169870860a880ac bfd/elfxx-x86.c +87e839b9cde0eb6fca9536d7ead7f816 bfd/elf64-mips.c +3934fb419c07b95179cd890ed031dfdd bfd/cpu-d30v.c +1113bcbba503c0c287c0cbba13cf5065 bfd/arc-plt.h +f5fafef9ffd7f5b5d31f7176befbd194 bfd/som.h +af7ac04a0dea6d92c672a1f9403425a6 bfd/coff-alpha.c +be426e6973a904701d083c503b6fe99a bfd/cpu-m32c.c +9f8a8e7b46542740ce955e915d529e6c bfd/elfxx-mips.h +5c3960c2cf2d78516c5272f363501bdf bfd/cpu-tic6x.c +e17ff18e32f03233d25c4a56cd279629 bfd/configure.ac +3509ec89664d2100e0e4c8f91c277285 bfd/elf32-tilepro.c +0fe5727f6aea4b97ada203c88fd92fc0 bfd/libpei.h +5cdaf80ddb15463873ce74db1d8de3c3 bfd/cpu-iq2000.c +5c0d4dd3f80060bd1e76014828bfc16c bfd/rs6000-core.c +523628026843730936645da2dc283b5c bfd/elfcore.h +cd8294e6c405dd182de9a99be3f35626 bfd/cpu-v850.c +ec62ca4343cbf9fcd19af02b2d640f99 bfd/elfnn-ia64.c +91197b8a464fe1cc618082b23a44ccf0 bfd/bfdwin.c +24a910ef275dfe5a3e448941769b57e9 bfd/hppabsd-core.c +085ba010e5e47811f0023c934fed150a bfd/elf32-hppa.h +e5cb03a7cc4da59f5b85a02680cb8305 bfd/configure.com +ef06508e35303c6837d25efe0d9ee3aa bfd/wasm-module.c +b79ebb3fb278e33a30deb7473afc1559 bfd/cpu-tic54x.c +5483511312504380e1cb9f3ad41a75c0 bfd/pe-i386.c +2b9916e885dc8348dff20641c6d04f32 bfd/coff-bfd.c +5ddd7325e4cba21950fe2d391072cf87 bfd/ChangeLog-2011 +a9d60e6fe41bda47a2088043b66f902f bfd/elf32-m68hc1x.c +e04fe51ec4fa4c1d8c064fdb68aeefa0 bfd/cpu-avr.c +47697a5ebaa97a4468c1f565af5883b2 bfd/pe-arm-wince.c +8aef9f03cd6beddc736133b5c2dd99f0 bfd/cache.c +90092ae6c764231282a1e8b2602ff509 bfd/elf32-ppc.h +e41bf4306979bec62eb8430fb41df6a5 bfd/ChangeLog-2013 +988af930a8e5ea6470e706d1b05ad3ee bfd/cpu-crx.c +ada6443d4ddfec27292e5f92919867d7 bfd/hpux-core.c +a23d329350ba2c172439fc245b3c60a9 bfd/mep-relocs.pl +170c9d0f4685ffb95d3ed0a544cd690a bfd/PORTING +7708df26118e9c010283b29aa3f7604c bfd/elf-s390-common.c +c1250b789832270b38e739ab01f71d47 bfd/elf32-bfin.c +7ca11093463f77822148b53487c2972d bfd/elf32-nds32.c +82acbe51f5f0324e08d8bd37b480d0db bfd/plugin.h +313c33867064a8b3d3a339501a91851f bfd/elf32-msp430.c +e8a96b148c89cc469e32c58288b275e1 bfd/aix5ppc-core.c +e6247086cae581b25711c1cc334c2d3e bfd/pei-i386.c +f3448e3780145b5a929cd51003702096 bfd/format.c +2e32803c97feaa5d1841e3d628f017ad bfd/cpu-pdp11.c +2a30bd3a15953e9bb28a1cfa63159173 bfd/cpu-moxie.c +488c9d25c4d73ed2c59019410946a82f bfd/version.m4 +33ece7d772d36d3a6449b8e50674612d bfd/elf32-am33lin.c +63cee58ce36c8c6ee13db9a793283dab bfd/pe-x86_64.c +2266fbc319f19a30db99241c762f9c0d bfd/mach-o.c +1ab5945c6ebb8304350f99e630b91b47 bfd/TODO +86f496cd17d52d96424d40874acd6ae4 bfd/ChangeLog-2009 +c6d7c8141b4919074bb1bc8b2cddf10f bfd/elf32-z80.c +d32239bcb673463ab874e80d47fae504 bfd/COPYING +e72f1cc732296b962f61526045b1dd90 bfd/wasm-module.h +daec4765a30b877e7acd4ff7eb916e8a bfd/ecoffswap.h +6a65ceb48b34a21900db602d1fd1ad30 bfd/elf-nacl.h +b631378175f860ac42b306b3d3f7bc6f bfd/cpu-d10v.c +fbe1741fa4f99e8df34cd3d44d6b6c07 bfd/pc532-mach.c +186c0502c47b58e12760b3dc3905c62b bfd/elf-nacl.c +40e2570d219f912479c0e3dda4295698 bfd/cpu-csky.c +b10e687bf4b69147b6f63ab7e9d4a842 bfd/elf32-pj.c +fe4390e9711c77373faeb611f61ae279 bfd/cpu-lm32.c +e63f6d01a376008a89e252c7b5cc1f6f bfd/ChangeLog-9899 +9793b630e4385ed2debf5ac61af946ac bfd/elf32-pru.c +8ee5bcc273e0ed9508f8d62cd03ade84 bfd/libhppa.h +ff28850915d7c8b454993af52683c09d bfd/aout-ns32k.c +01af4c8a01683527743c6bc0b3510f19 bfd/elfn32-mips.c +5a4b9ff011f4ee23fa929d80d7dc22af bfd/dwarf1.c +5a31ac9c716b812d08e5c7863664fb6a bfd/cpu-m68k.h +50f9a8a456077fae53b9bf23211442bc bfd/cpu-epiphany.c +23d4e1fbd25515aed583cad0ead037ca bfd/lynx-core.c +e86fc5c55d7ed88e03e1f5991fe1f363 bfd/simple.c +6cd0ab3f5e4bbaad21e2e83ee0c802f1 bfd/opncls.c +aeaa51de3ef4a40d5fffc6709269bd25 bfd/elf32-m68hc11.c +8255eb07543543260bdc56ba3124364f bfd/pei-x86_64.c +0f411e5f5a60d6dea0006721cdfd9108 bfd/coff-stgo32.c +90b96f1cfd000dbc7bfe789f900ed216 bfd/netbsd-core.c +15c63e70b95aeedb46acd4baa15de49c bfd/libbfd-in.h +3ff4407b5e17bf7ac3bfceed3f56758b bfd/elf32-bfin.h +a02b107483859b65c455cf3b31391cbc bfd/arc-got.h +2819d07b82a05e9732ce4e92f91f47ae bfd/coff-sh.c +f49d7385c4a0a957c0b0efca8a740b8d bfd/elf32.c +d45630a9128a8b95d448a21ab42bfefb bfd/coff-arm.c +6c8645ebf8ca520455f3e29383ea5625 bfd/mmo.c +b49acab6e85ec500ddb48333b873ccff bfd/stabs.c +4b1921ae2713e01cdcf1c26f3dee4ba4 bfd/cpu-tic30.c +2546bc2fc2ea423569187535afd56674 bfd/version.h +314aa8c1a6423fe29c820f9b9f1252cc bfd/cpu-metag.c +7b6c919e5f2c37c4ad2c04e163727e59 bfd/cpu-mmix.c +7cdc27460ed0757f34ebface2f963775 bfd/init.c +e1a328fe884cdca911953bdaa1f223f4 bfd/elf32-cris.c +8288e5e2fb7156eb04f22696c92d177f bfd/xtensa-isa.c +8f7b5397a7bb5d502a9997e19d244cea bfd/ChangeLog-2014 +f9032e6437c1b0948d85b38b13c2ea6c bfd/syms.c +bd00b02010578f2f2e7186e67c816848 bfd/coff64-rs6000.c +a4a006efca775382c223e396475c7177 bfd/elf32-fr30.c +ed1787f5dd0f6024e0154a2bb89598a5 bfd/cpu-m68hc12.c +4dddcd4a5a764871f8856f04ac280447 bfd/cpu-mcore.c +e47eff1a7dbcc77ef89f9c58c266ec83 bfd/elfxx-ia64.c +c00a335bf5927add5a9a82eaf1aa6ed5 bfd/elf64-mmix.c +303c00b7f8195afbbb21c06bc73e8c74 bfd/elf32-nios2.c +9a069afd462628b77ee226753bca4dc1 bfd/cpu-s390.c +bbbec8214558c0d8f52ce2b0a3d6ecd6 bfd/coffswap.h +6b9f55f6156afd65cfe669e0d0c7789d bfd/ihex.c +8cb5d5310424764dfee4491167c9a740 bfd/elf32-crx.c +8a02f85fce9045c6d52c8cc172fe12a4 bfd/Makefile.in +20088718e3ecf0cb32a449405b362321 bfd/coffcode.h +c426665f7da2e5264341b518b1ba1153 bfd/vms-misc.c +432638cd5c44185f9f2cc59aaf427f9d bfd/coff-tic54x.c +96ef9dbe7165431f83d821756c0c9e05 bfd/ns32k.h +e79a330a15698ebb169fabb216e79c69 bfd/elf32-moxie.c +917bbe50a85fe1a4498def72c2619c2e bfd/cpu-powerpc.c +248f9fe499ef1513f53415c27d61502e bfd/elf32-score.h +46d29cadec86ab005243b233c9fb9935 bfd/pe-mcore.c +94d20a9a815154a31e9f2eccca7681e5 bfd/elf32-nios2.h +c07cc52f5a64b2222933e27155a26f07 bfd/cpu-m9s12x.c +7407dec4842769ea84c4a7fae0c11d4e bfd/elf32-mips.c 236e856bb13ee47adc5d7d253037640d bfd/doc/bfdwin.texi -84a99eb217f66a88f8897fbca35b0d10 bfd/doc/mmo.texi -f06f2eb2d0f895dc76222fd862da6279 bfd/doc/init.texi -2fcb7fad5bee8e2df5992b3f8505b94b bfd/doc/aoutx.texi +6dd9da257666139a061d6905349d9614 bfd/doc/core.texi 9a6e644c9e94d7b18073f5cc6ef4395a bfd/doc/header.sed -e67d8b07516154c4ddbee2e3bab3d75e bfd/doc/doc.str +a11231531c5c3cd6e7babf06426a657e bfd/doc/ChangeLog-9103 +31452d5f4712520054db9a16944cf4a2 bfd/doc/bfdio.texi fceb179f1a1bc85df44ec0ae3b917c1c bfd/doc/archive.texi +b56c189b6ccabcf5d3a8d02d1cb39cb0 bfd/doc/makefile.vms 4635778e69bcb490e44389e420542276 bfd/doc/syms.texi -7959e3985ba2a5d92e1da3f7ac85a547 bfd/doc/bfdio.texi -ebbebc6e84529ab20d194d3a53c242ae bfd/doc/bfdver.texi +1b417815a4f9109d375eaa02c967e8c8 bfd/doc/Makefile.am +d7a37304ccd7b245f93df4be02797477 bfd/doc/proto.str +84ce8046e015e8dc24b992991cba7eee bfd/doc/bfd.texi d41d8cd98f00b204e9800998ecf8427e bfd/doc/elfcode.texi +d01f9e76a9c61f8ab1515177eda30283 bfd/doc/chew.c +c03c6311c040b2adb6d0db0d4792428d bfd/doc/libbfd.texi +e67d8b07516154c4ddbee2e3bab3d75e bfd/doc/doc.str +3c295464c900b5ba314e8c36ef99e686 bfd/doc/targets.texi +2e5acf5d0f3e6a8d68fc2c52d96fa243 bfd/doc/reloc.texi +51139f6af786e74446d01ec49807fc28 bfd/doc/elf.texi +930173859dab35d4c1c03efd5ddb18e3 bfd/doc/format.texi +d12089e756f4c1ed6e246474dbe05f6d bfd/doc/bfdint.texi +f1f0a1fb0685e6fe0729ea51e733239f bfd/doc/bfdver.texi +d9f7fec3dee69a6c3084e6d4cfd88371 bfd/doc/cache.texi +2fcb7fad5bee8e2df5992b3f8505b94b bfd/doc/aoutx.texi +cd135720de31d84f9bcd353b630224b5 bfd/doc/archures.texi +32e807d8eab3afa2507095fe17ec73b3 bfd/doc/section.texi +f06f2eb2d0f895dc76222fd862da6279 bfd/doc/init.texi +072910d553f79906db69fa7c0e956bba bfd/doc/fdl.texi +37e17a63e8a3a555c152ecf93a0708b6 bfd/doc/bfdsumm.texi 3d524b7e195fb38eb168045e4a2d18aa bfd/doc/coffcode.texi -e6369d24c358e39140f51b3ef04b1120 bfd/doc/bfd.texi +4267b66ff8005d1ebe468ea1ba9c8d7b bfd/doc/Makefile.in +03781f1bee7a1a43cbb471bfc212dc8d bfd/doc/bfdt.texi 0b9681af947fd0895c1aad2ccdead74c bfd/doc/linker.texi -d7a37304ccd7b245f93df4be02797477 bfd/doc/proto.str +f32b11f47b666164ab1aa78183a50b1e bfd/doc/hash.texi +84a99eb217f66a88f8897fbca35b0d10 bfd/doc/mmo.texi 884c457392e56f773fabfa63ccc2d171 bfd/doc/ChangeLog-0415 -d9f7fec3dee69a6c3084e6d4cfd88371 bfd/doc/cache.texi -a11231531c5c3cd6e7babf06426a657e bfd/doc/ChangeLog-9103 -1e4b39926b6a72395a6c9367afe2b435 bfd/doc/chew.c 001da3c839b048ad82102ca4c5598743 bfd/doc/webassembly.texi -2019faf299b9309034abf4eca83590d5 bfd/doc/opncls.texi -0d83f7d997b7dc94f4648637128ae80b bfd/doc/Makefile.am -c7f6a2d7f0c4e0e423a5909819465824 bfd/doc/section.texi -f32b11f47b666164ab1aa78183a50b1e bfd/doc/hash.texi -11ed9773e30ff48eaba6617cf24b1f83 bfd/doc/makefile.vms -a80b1d770cf520f20e91e8a2a324fb79 bfd/doc/libbfd.texi -200d0f8c2248d96fd6c2f88e751b013b bfd/doc/bfdt.texi -f4044f1d530b3c842402863ae056ebc9 bfd/doc/Makefile.in -66f08698bc6287b5a6a1c69f5a004b15 bfd/elf64-alpha.c -f4efa6a5e90889a876f5a804cecb00df bfd/configure.ac -bf3124212f297f533195226f5574c9d1 bfd/elf32-nios2.c -48f832533f64eb19233f7860913e0008 bfd/coff-sh.c -99905e4032c26df877a173a20262acba bfd/xtensa-modules.c -3590c3451d87fa2d6d6ef7b697c43b38 bfd/coff64-rs6000.c -784c80a5abc1b2693d0a0f8438e82545 bfd/elf32-iq2000.c -e05d639087c91b2b9b51f2d49324cdcf bfd/cpu-hppa.c -fcc67a779dcd381af3a557c8e5b3b509 bfd/configure.host -fcb60d90a91ff13356e70c9ea0713ba1 bfd/cpu-cr16.c -3f51eee2da99435ee167fe7e42c1f356 bfd/cpu-ia64-opc.c -b492fefb50386669e07ff028379c2801 bfd/elf-bfd.h -f528f4062ebaa7f218a73b5ab504e069 bfd/elfxx-aarch64.h -8192b508e5ee41b50ea4cb8520e36303 bfd/i386aout.c -a69a7febe17dcd39458f62c09053dbfd bfd/genlink.h -d0e758e112856793cd3a712354f4df7a bfd/elf32-mep.c -68a4c622bb1c6da72efb21da56fc15d3 bfd/cpu-fr30.c -73228b9ddcb1bd9c00ae745b1e3b8015 bfd/cpu-z80.c -63e8e8fa6fb01abae014f2b3cd7f39ca bfd/xtensa-isa.c -7d24d5234169ccacca6614dae1a1082d bfd/config.bfd -e28af36cb79f67521514af0004f56fb6 bfd/coff-tic54x.c -f238056ba921d8d82efe67f75f0e9749 bfd/elf-eh-frame.c -fa56018dee910d5e191b4c0e4beba7a9 bfd/elf32-score.c -e77777cc3a772b06bcade3d5f0c9dc6e bfd/netbsd.h -0f4d5f051a9b724a8eeef5ad589a4adf bfd/libbfd-in.h -f359668de3466771c10381d4b0e29e93 bfd/elf32-mips.c -0d25b3166d9d9b475e3b67576d871749 bfd/elf32-xc16x.c -826d7bd2a8890110d7d56bd51543d605 bfd/cpu-m10200.c -509f476c308d3d5fe7e6e8f2ea678c52 bfd/cpu-arm.c -860010ba2f6c2fd091ab83bdce032d8b bfd/cpu-ns32k.c -ceb9657e68ea3f9d6179773dc75c2276 bfd/mep-relocs.pl -69e4e7b8a5683532aa7137b68c9765a4 bfd/lynx-core.c -f635e95e06957e744083b2160029e168 bfd/cpu-tilegx.c -ef5ce2816e009df3c5babd78e62050c9 bfd/cpu-nfp.c -506e4cf89b13520b65527de435f6e4b4 bfd/arc-plt.def -15ed0a7456c64faec0a6ca51b3670d69 bfd/elf32-gen.c -4730a96df3fe1a657289c366a4f39344 bfd/ChangeLog-2006 -8a5806e0767d56237c8ce8d22274145e bfd/vms-alpha.c -46c2dfc428db1186b5b5d7247435d3ee bfd/vms-misc.c -9341247d2adc42b144ea0fe0221a2e54 bfd/elfxx-ia64.c -f52914ee5b069ff9f38f4b499f5ab379 bfd/coffgen.c -fe1b91398a0374401d981c29a5f2c5d1 bfd/ecoffswap.h -8ae483e536e27a1cbc449f8feb89d662 bfd/ChangeLog-2018 -da3bfcdfa700bc2340bc467012bd56c6 bfd/i386bsd.c -8bcfd53dd7ad3786d490c0fd0540ef94 bfd/cpu-iq2000.c -053e50680ffcbc1e5f6cd139dae37677 bfd/ChangeLog-9495 -4ff8ffbc8b265e9eb8ca7c079a729acc bfd/pe-i386.c -18dbede7fb9605f1ba368096765f7909 bfd/bfd.c -644528a05c3054bb4d3ec45b23afdfa8 bfd/elf32-cris.c -91e371948e4cd5ba274d217d949d0f6c bfd/xcofflink.h -9404e13ea7b152453c548082da92b8da bfd/cpu-pru.c -dbe267b9fc84843c9a43a0a999abf5a6 bfd/elf32-metag.c -46ace5a217a2fa89a0401a624c809d1a bfd/elf32-i386.c -f6c3020c281ee5297cef09822108fd85 bfd/elf32-score.h -5c399f0e20296ccbdc501aaea7455ea7 bfd/elf32-s390.c -6e23cea97986c8894d760f743ea39b65 bfd/coff-z80.c -619da52e4cab3b1e7c4d396bf1e287ea bfd/cpu-vax.c -9cae02eefe2e22422234706b5f9a8892 bfd/cpu-csky.c -3d0b3ef34ef193dc72141dd61969556b bfd/elf64-bpf.c -6be0f669d2bc712770564a394e1900e6 bfd/elf32-v850.c -b51644907c79a3995d7ec5c2568e3864 bfd/elf32-dlx.h +7047cc1f51607d5deaf6aa6611352cf4 bfd/doc/bfd.info +065a5c588b90b2d96cc010c90d4f3ffb bfd/doc/opncls.texi +cf244104c08e3493c0f35a1c52184536 bfd/elf32-m32r.c +2b9ea29665f8e4e2f78b646567059733 bfd/ChangeLog-2017 +039894d68699980ce80986513146defe bfd/elf-ifunc.c +2cd7d3542f318bd6ee35a25aebbbf2ed bfd/elfnn-aarch64.c +db858396c0acebf4078a4d4ff317088d bfd/i386aout.c +4742265d30fed9b2913ddd050b285d63 bfd/elfxx-ia64.h +bcc1e9ca564d3199d2dde1285fe705ed bfd/elf.c +e8b25364d1ad7e7d5b5b6cce78cabb4d bfd/aclocal.m4 +618d0ed031424e297fb8e1ff0530887b bfd/elf32-epiphany.c +e4eae157e25e746cd529ad49c4adf513 bfd/cpu-aarch64.h +aacd4a240e372a73d8327e7af06644d8 bfd/cpu-s12z.c +29cef5147c10e342262f48706859c16a bfd/archures.c +f6ff72898c439c4e08a8b0f4125e2cc0 bfd/cpu-cris.c +276a63726cc267515d3143844d7d88dc bfd/elf32-s12z.c +07ce1fc7b78ec323242e6f21d39dc445 bfd/po/SRC-POTFILES.in +4301533a9f9af510a6519c49094063fe bfd/po/es.po +92b363dde95573bd774c4d075a370d6b bfd/po/sv.gmo +5be26b66a180601b8d01ca75a7462819 bfd/po/ja.gmo +7787d97a62c88c4e64020db70de14831 bfd/po/id.gmo +efeb1686a8060a17b757200b10433713 bfd/po/ru.gmo +e0ea6f92a4d3cff0ba82611c66ba1eb9 bfd/po/da.gmo +27da1f0a8b3615124fe7f2fbdf8e7576 bfd/po/fi.gmo +1c86ec269e042f6e633fee9101616d7b bfd/po/uk.gmo +573e2059bdbc8666215262251b1d6f59 bfd/po/bfd.pot +0df7e50992986ea8a85eb6baa50bd279 bfd/po/da.po +3238e488b33e9d3a61c9e1de199d3f21 bfd/po/rw.gmo +e92e0c0fdb85a3e07602d6d891f3c9f4 bfd/po/fi.po +707a2271e7ae77dc322e9f2977002b3e bfd/po/zh_CN.po +4314f7dc707bdd16e1a3aa6318d52f8a bfd/po/rw.po +09fb9f7d1bc0af455e675be7c3205d23 bfd/po/fr.gmo +1f541d88c9a5a9ab162fd68d3187537a bfd/po/sr.gmo +59c606011b4035b5cf62d5182cb78201 bfd/po/fr.po +2e501eae8e2775bc3326ff506e6ff5b7 bfd/po/ru.po +f3eef30966ed07605f9fb1d870994247 bfd/po/sr.po 0dded802a6d91787da60e29fbb989423 bfd/po/tr.gmo +db9dd4a0b20b67e4ef912c9fd4cda91b bfd/po/vi.po +829c286919c3e58f6d3310fb79252b0b bfd/po/es.gmo 58395b2a0e2f3bb78dc6d29a4a138113 bfd/po/ro.gmo -0df7e50992986ea8a85eb6baa50bd279 bfd/po/da.po -ab504851491bbb4522d5616ffa37b6ac bfd/po/vi.gmo 063bd370058e0656621e835f75f8d0af bfd/po/sv.po -4314f7dc707bdd16e1a3aa6318d52f8a bfd/po/rw.po +74cb3712e1e8c26eda36a992fefc023f bfd/po/ja.po +e60690926d6036874d5976fb892c5c66 bfd/po/zh_CN.gmo +4b07a1755c5b1ffa7ffb3920329b9676 bfd/po/pt.gmo 4d37138c8d35849276f5939f27ee211f bfd/po/BLD-POTFILES.in -f129c08861c468a11c1bf113cb18a1c2 bfd/po/Make-in -5e71bb055f60b7da2285b3637588eb39 bfd/po/sr.gmo -27da1f0a8b3615124fe7f2fbdf8e7576 bfd/po/fi.gmo -f96217cb48c7295fbf39f871f93b2161 bfd/po/fr.po -833d26f463ababd63734c904f545f750 bfd/po/ru.po -707a2271e7ae77dc322e9f2977002b3e bfd/po/zh_CN.po -e92e0c0fdb85a3e07602d6d891f3c9f4 bfd/po/fi.po -26be82657b86dd41d25d1bc5a569c8c5 bfd/po/SRC-POTFILES.in -92b363dde95573bd774c4d075a370d6b bfd/po/sv.gmo -48e869e284c79a7eb5ab3556af296295 bfd/po/fr.gmo -2f6a25e42540d4d2dd6d59b12c6bb3bd bfd/po/sr.po -d136618e5e6a6dcc192e39a77c231f94 bfd/po/pt.po 440d5018fb62b30ff5a819137633e364 bfd/po/ro.po -e60690926d6036874d5976fb892c5c66 bfd/po/zh_CN.gmo -3238e488b33e9d3a61c9e1de199d3f21 bfd/po/rw.gmo -74cb3712e1e8c26eda36a992fefc023f bfd/po/ja.po -84dbf6e05a5a8d4b7b1b82b45673213e bfd/po/hr.gmo 81570d19a349cd683436f77a9c8d13cc bfd/po/tr.po -5be26b66a180601b8d01ca75a7462819 bfd/po/ja.gmo -b271ba30f0331a29bc7f0a159b28786c bfd/po/uk.gmo -d62e4587309d2b9136b69315e52a6522 bfd/po/ru.gmo -4301533a9f9af510a6519c49094063fe bfd/po/es.po -829c286919c3e58f6d3310fb79252b0b bfd/po/es.gmo -98fbc3fab418ff0aa1e5305552230c76 bfd/po/uk.po +01bab36c3c598ef18490b72808da5bf6 bfd/po/pt.po +ab504851491bbb4522d5616ffa37b6ac bfd/po/vi.gmo e19bb962d689621ffdc549c064bda359 bfd/po/hr.po -c740ed6414eb6b0daa754bf798190dd3 bfd/po/bfd.pot +8ec07791735823e26b823098b97db3ba bfd/po/Make-in +84dbf6e05a5a8d4b7b1b82b45673213e bfd/po/hr.gmo c7515f4b454a1fa630412fa279a3164a bfd/po/id.po -db9dd4a0b20b67e4ef912c9fd4cda91b bfd/po/vi.po -e0ea6f92a4d3cff0ba82611c66ba1eb9 bfd/po/da.gmo -43e760e07aaecf67abfdf4017e191620 bfd/po/pt.gmo -7787d97a62c88c4e64020db70de14831 bfd/po/id.gmo -1ded054093de910d9786c62bc4fe8cc6 bfd/stamp-h.in -dad496c68df8395b3cdb8e3187c37eb1 bfd/dep-in.sed -9152c2d8c576e424a1c2f9886a9b980e bfd/elf64-mmix.c -3b3b56d679ef110304d14ccfc2093e0e bfd/elf-properties.c -fdc9d496ce09e8d3f64b0e5df8dfbb28 bfd/elfnn-riscv.c -a1d55ed3f4aa1f53d6c783858a66e382 bfd/elfxx-riscv.c -0dcd615606a2ea2fdc30b601c1e9d7bc bfd/elf-hppa.h -298f150e2045887fc8b3c42fae166954 bfd/xsym.h -7450da4150ff19cb98e15abd7f3acbbd bfd/elf32-csky.c -e99e51200393107a815bd747025b5408 bfd/cpu-crx.c -650c4029e6c1b99375e264917eb8e3c1 bfd/cpu-pdp11.c -7213a571d671caf6edca6fd6d1823843 bfd/stabs.c -688f12bf20d09886e1a29dde1bc64953 bfd/som.c -478adb2deb9af088f46355eb33522c1d bfd/aout-ns32k.c -f2af796af1efd1971472837a26010b6f bfd/coff-mcore.c -e4d2dc1f4dd23b77953636bf0a721cd1 bfd/cpu-tic30.c -7d954b3eb28da5e5bf8feac3d3f19b48 bfd/cpu-xc16x.c -4db64f0fae81c88c910d3ae812208fab bfd/elf64-s390.c -ebb37f96555d788124b48e484f419feb bfd/ns32k.h -97113d65dc129458dfb58f269bc2de29 bfd/elf-attrs.c -3acf2e4513982531aed75645d54b8207 bfd/compress.c -e5f50db9fb5c91581d5e66179fc3ff8c bfd/coff-bfd.c -e2a8cb7e9095058f683fa51648651674 bfd/binary.c -fdec41e5fe2428d1c2d298f3b22d08f1 bfd/coffcode.h -342d96212a400f3ce703643178a1c8bc bfd/archures.c -f43697e33ed8689ee9377f662a9b79a7 bfd/libbfd.c -45037694df23448bf2fd28c2fac03b38 bfd/elf32-arc.c -417ecd118f1a13a4159345560fa26b5c bfd/peXXigen.c -9c15606b52821599556cd6ec225097ef bfd/development.sh -9e1e83753ff70399f18d493a8ae1cc78 bfd/pei-arm.c -2f79a6fd764a90962ec2f13c03168519 bfd/cpu-dlx.c -e41bf4306979bec62eb8430fb41df6a5 bfd/ChangeLog-2013 -8f12cd8d06a62b6c9f80f12acedbef81 bfd/elf32-xstormy16.c -86d298205604be86e5c5820e0d62b350 bfd/cpu-m10300.c -1ef39c7584d54fa2b1fd1bb8046d9339 bfd/elfnn-ia64.c -deb1e042c88dc5c5c2f91eddd848b5a3 bfd/coff-stgo32.c -cf5fa3dd93efb73d781c5cf982c9a01c bfd/gen-aout.c -087d260accbc21c09d3ef6b4660d7fa5 bfd/elf64-tilegx.h -bea46a7e12b2f492b48866c808b191f5 bfd/elf32-mt.c -3a83ad486532ac5a4c93d0f686dc681a bfd/som.h +fa54ff2e8e918caa819a972852d5d58d bfd/po/uk.po +eefad744f217b475755e1492e53fb7a7 bfd/elf32-hppa.c +a03c8ee360e11a56311e3268423e8a32 bfd/acinclude.m4 +dd043c4478e60689bb3215dd6342113c bfd/elf-m10300.c +199f73fe0087304c4dbb7e49520306d6 bfd/elf32-nds32.h +c1059ab81dbefd4559147e29cf75e526 bfd/elf64-ppc.h +3861b42704c65100baf31d2c648609c5 bfd/vms.h +7d710529ca3fafb2bb57132df24957e3 bfd/ChangeLog-2004 +528de6ecd7fcc37a64d8549a09f8612f bfd/elfxx-riscv.c +18cdd8149cca548a586b4a94556b43f1 bfd/coff-z8k.c +309c8ba2581575640bd63488cd6f4f00 bfd/pdp11.c +37b4fc1e8197d73909f5844da0c57bc3 bfd/coff-x86_64.c +f0cc88bb8e4e5e7792d6e3bab2ece904 bfd/elf32-wasm32.c +853f195d97355389189dbfb2a2cd8402 bfd/mach-o-aarch64.c +33dfd087eb1c2ced50227988b4cb77c9 bfd/elf32-cr16.c +f866e01e19d937a80f24f577824fda42 bfd/elf32-microblaze.c +ed4b561a2f3f33631e5fdde6dced2e01 bfd/pe-sh.c +6f09a281be98aad2c9ca6e74ec94efc4 bfd/cpu-tilepro.c +7f531bd4466bb0c2ea013c0c9803c43e bfd/elf64-ia64-vms.c +74be60df0038b1006285d035c304fdef bfd/cpu-frv.c +02d0c0fcfa1ab28173c6542a14f36bc4 bfd/libcoff-in.h +663a6979bd331c91d1385445edeca7b0 bfd/go32stub.h +02d2da679af21fe6596219d32759105c bfd/elf32-gen.c +0be80a770ffd4f01a4d639d6507baa35 bfd/elf32-v850.c +4193b485111b808fda3dd4fb897e482f bfd/elf32-i386.c +30ca9df2d8d4c11347d18ead4e85aa02 bfd/xsym.c +8cb124eb60f00691ad66c23f3e833e0c bfd/cpu-sparc.c +eceb1a683a275d1f0abcb8bf2484cdd3 bfd/cpu-rs6000.c +ba68a99b92a0e480fdfdc095bcb22424 bfd/hosts/dpx2.h +5bf22bb0d3c4062524f40d0c4025ebfa bfd/hosts/news-mips.h +4a2186869588dbfe03060bbae398f83f bfd/hosts/decstation.h +c74ddf35e352dbd5330745a19edba943 bfd/hosts/mipsmach3.h +8299096c4795dab115dc44a43c65ea69 bfd/hosts/pc532mach.h +18627b25355791eae987dd8400ca34a0 bfd/hosts/vaxlinux.h +46bad49e3ed4a2073a5cbf878d817225 bfd/hosts/m68klinux.h +d8243eaa8fdc5181a3995c6b871eccb0 bfd/hosts/symmetry.h +ecca08c871758f81a7a536fe39c9f4f0 bfd/hosts/i386bsd.h +7c3116ebef016dd5b22d389f0dc554da bfd/hosts/x86-64linux.h +d4c29f560cda198a0f43aba69402fe5c bfd/hosts/riscos.h +e48e81b14cf8459db5cc7d849cf64551 bfd/hosts/vaxult.h +cb4e5da91eff304e93b79a047671bf81 bfd/hosts/i386sco.h +31a7889070c4166010ea6b4246b22a63 bfd/hosts/vaxbsd.h +65a33e150b2b9f6f5693beeb53be1b6b bfd/hosts/mipsbsd.h +2f9f4daa87c259918d0e666d97e01b60 bfd/hosts/i386mach3.h +1000153c5f3e5fced7a7614bec2b1887 bfd/hosts/alphavms.h +35ea839fefa88c945c52990e21c34919 bfd/hosts/i386linux.h +b80efc22e2c9e2d688a9a6986191c164 bfd/hosts/alphalinux.h +e48e81b14cf8459db5cc7d849cf64551 bfd/hosts/vaxult2.h +c8546f73138d0f2ea206516f2340a253 bfd/elf32-s390.c +dc9583006e347d7309f0a801cf1dd1e4 bfd/elf32-tilepro.h +7cec9e799073ddce12eaf9130b85530c bfd/elflink.c +bb1a0a8ce8e06f7670dea3d01da6627b bfd/pei-ia64.c +4b053113996aa2aea728794bfdbbc829 bfd/hash.c +101eb302d6840277e6a03b94b72fd4cb bfd/cpu-bfin.c +96139edeba4f7c568637214d7cac3ec2 bfd/gen-aout.c +ad911c832a413608a779df6695fff0f4 bfd/cpu-nios2.c +01cb19ee1e561d16867576f1a2df7371 bfd/ChangeLog-2019 +06f9364cd50d38069928f2e513bbb174 bfd/cpu-m68k.c +baf7c2da9351ac0ac492889967a20f4d bfd/coff-mcore.c +491a624108bad0421d02358399b2da69 bfd/coffgen.c +b21c979f62d62f954f612b63ee99dae5 bfd/bfd-in.h +830a472d5bd92f582d7c17d016990801 bfd/cpu-aarch64.c +e5fca30d1d0786b7c04119b61db8c073 bfd/elf32-or1k.c +01f5231b71311e2638787592a27ac6bb bfd/elf-properties.c +d802369d8f069f2ab1897a2cd69e4c85 bfd/elf-bfd.h +d955353bfb52afe7b966ef7efd9639ce bfd/cpu-cr16.c +59e3d1cedd6b8193c87673e289d7b8c1 bfd/cpu-ip2k.c +3b54738080b2b1df139e29ca243da90a bfd/coff-z80.c +02309436fd23ae833a288329600ff3fb bfd/cpu-wasm32.c +750af593698c973790529b9618b17851 bfd/elf32-spu.c +248d536259aabf7b6c2b9628955b526b bfd/elf32-mcore.c +023cc51b8bbb2a252c204c42c15ebdd1 bfd/elf32-visium.c +74c0cfaf116337b47eadaf8335d3ecc8 bfd/elf32-ip2k.c +ba166819d1ce1d276bccfb2209b99f7f bfd/targets.c +48913714b8acfbfb03bee31bcfcbe299 bfd/pei-mcore.c +7ea14d5e547ef82e922eb8eec8554aeb bfd/aout-target.h +09bbdd431ef1a6e2b89f925c2335baf9 bfd/elfxx-x86.h +f397d851da47cbbcfeb12c64640a6079 bfd/elf32-tilegx.c +a55429ccbb16b2ba06f68b5a229f8a32 bfd/elf32-cr16.h +c0e0a42615ac2ed84eb395e1843c3fa1 bfd/coff-arm.h +d05c89447944223f39f34136cd010732 bfd/tekhex.c +db93b181a2ff11379f18a511967511b8 bfd/vaxnetbsd.c +f6c74d5a005780c3ccacd0f95f8e7bf6 bfd/genlink.h +be331945005ebecaa4ffb5f2983aeb2c bfd/cpu-rx.c +3cf3f2dd32d74c2f74ed9e604b9a7bcc bfd/cpu-m68hc11.c +53357a9b87dd158b90cf790c316fd438 bfd/targmatch.sed +0f72fd4144a3ea4a059868af781d4d5a bfd/archive.c +cf91f12e287c1e025a11157eb9509fdb bfd/elf32-rx.c +84e9cba5d0616ba2ad3575c4ac4b1e07 bfd/elf32-v850.h +c80c16a570853be6bc200abc7426fa83 bfd/cpu-rl78.c +c9ba6dbecf97d21c992843803251c38e bfd/mach-o-i386.c +139261f84ac4b4777184511e1f46b129 bfd/cpu-nds32.c +0fc42c4998ca3e0b8d3cac0c9363e273 bfd/elf64-hppa.h +efeffa26899a194aeba9b98a8b661784 bfd/elfxx-tilegx.h +449bba3e362b43fa9b76788c813d17ba bfd/cpu-alpha.c +bf2d5c4fdc87152491491ca57d9cd9f6 bfd/cpu-h8300.h +8a253804ff39d01b137bf9886ce98449 bfd/elf32-dlx.h +2a7580ba2c7b5fc11b9402e942f9a951 bfd/cpu-ns32k.c +7b95c4de0a5cacd433d57d1ea56b4d82 bfd/elf32-avr.h +74ed321a54dd03a00c51521bcf910371 bfd/i386bsd.c +5b4e14f6fc935479da0e396498dc1da4 bfd/cpu-z80.c +053e50680ffcbc1e5f6cd139dae37677 bfd/ChangeLog-9495 +b0ba9b8a47a1245f4b876104273cce06 bfd/cpu-spu.c +4f8249f21b279414d5bd4f3523fe879d bfd/elf-attrs.c +0153d321f4316068478e5d911efb7c5b bfd/elf64-x86-64.c +fdc44d4a88532e814d846c958785b44f bfd/aoutx.h +9e73aa784242de8fcb648c2cdba8b269 bfd/mach-o.h +f07b547b8a7126d40be9b20682dd2d9a bfd/elf32-arm.h +cf7d7ae4ca42c23b734a73f058f99121 bfd/vax1knetbsd.c ce363ffcdb2993ee84530554d0fb5a78 bfd/ChangeLog-9697 -a0f20c7aaf8a06d11a0e7a01c26c2496 bfd/aix5ppc-core.c -2d517320c32f0f1a701c519338353aee bfd/pe-ppc.c -e0527af04e61f1849e0621367e35d5f6 bfd/elf32-m68hc1x.c -5f7cb33a929a9c4cfaa56adf0a5baf28 bfd/host-aout.c -aadd0e3c552b62ea5231b8f8e1f29c48 bfd/vms.h -f9ff8b13a6fefaac92f65f4255fadeca bfd/cpu-frv.c -3ae6edcb848490dcbc5e109c46039e60 bfd/elf64.c -ed6baa180c313066fcaf71503df9156f bfd/rs6000-core.c -4a5dcdb239f6b29c7a42feb915c73c36 bfd/cpu-rl78.c -bcad77989a3489f28cead1c82231f641 bfd/elf32-tilegx.h -a69a83eb2b13faf3e5a079cb0dd3d5e5 bfd/cpu-wasm32.c -72a78281f3eb7326f7ad5ad599e61635 bfd/ecoff.c -bd53d90e8f59b0fc0d91113809b7ba97 bfd/cpu-k1om.c -fb32050ffb28a5c4858c29991be30938 bfd/vaxnetbsd.c -45cb45921c67b79fa3f6b5ae7d7ea34a bfd/elf32-cr16.c -86fcdbc7c65e00546c15ce49c6b3fc38 bfd/elf-m10200.c -306057d633122a2eac0a314340b49b04 bfd/cpu-xtensa.c -bb9167856dbac0178298a5bb064fe8b7 bfd/plugin.h -91a57dfaa6e0d458e00c4b3eb1c07648 bfd/hosts/news-mips.h -b6e8c1d90b29a1f8c25fd4551be1f988 bfd/hosts/i386sco.h -f79718847472e2da98c28519f4cf798b bfd/hosts/dpx2.h -59527e3809175e8399033e55d476f247 bfd/hosts/vaxult2.h -68b6f737317f0309c65141c52e5f2cb6 bfd/hosts/m68klinux.h -8720272234583c91ea9b2d1dbac1d410 bfd/hosts/mipsmach3.h -de5ff92d2cbc2fe0e91a85139db3b3ea bfd/hosts/i386bsd.h -f4a8632f51afe07f4c9cd1204630ef90 bfd/hosts/vaxlinux.h -f08e0ff000a936b171a17db1b3506380 bfd/hosts/vaxbsd.h -31ae489d1359649fac7e37dab6d135eb bfd/hosts/riscos.h -232e1d3a2ef4667ac8299fe3bbb2f245 bfd/hosts/decstation.h -7c71544216b05dc2121d6304d319be03 bfd/hosts/pc532mach.h -21fdb91eb14835aa98b396fbc1aa9397 bfd/hosts/i386mach3.h -3d38ec3ae2d962c41b117608faca95e1 bfd/hosts/alphavms.h -ebf3980129664a3f2e0f9542209d41da bfd/hosts/alphalinux.h -055931bcdf26d64d593f01588732142c bfd/hosts/i386linux.h -0cc0a56bb26eec684277bcc1bf900a79 bfd/hosts/x86-64linux.h -59527e3809175e8399033e55d476f247 bfd/hosts/vaxult.h -6bea925cb0fabe6501a7badec8703744 bfd/hosts/symmetry.h -f383f3cf840294036ba5cd409e4b3014 bfd/hosts/mipsbsd.h -a8bf329c24203303d1343c3eed58c07b bfd/elfcore.h -db8a6dc9294042cba496c42749b98ef9 bfd/xsym.c -5ddd7325e4cba21950fe2d391072cf87 bfd/ChangeLog-2011 -a3365b24e606b76f00a84e3b3256bbba bfd/ihex.c -ed42f4a928d002f161a0af07e8479c9a bfd/cpu-mmix.c -f4b8c4c6b671f5c3e7351826b04fe06c bfd/cofflink.c -388e029a362018c55d19164385492050 bfd/corefile.c -aad16216ad94dd14c4e0349b231e1acc bfd/TODO -a7383db12dc840ea810427bfef7208af bfd/cpu-metag.c -439a02a9528a2d38ee7bd022637b45a4 bfd/elf-nacl.c -509e906ab77e7a1df4f6ebb206f08649 bfd/coff-go32.c -e505b27a063d4e9fa9a6f59c639e57d0 bfd/ns32knetbsd.c -fadcf2c5cfa64b81de06174f1a298f85 bfd/elf32-csky.h -ebb7a01077109e20a75d6542ab924aee bfd/elf-s390.h -0a7459c02c604d85f758af880d4dbcab bfd/coff-z8k.c -06d4adf1a3d0845ba353c39cb50182a5 bfd/libaout.h -1d28af48d930cf65fe76095eb7259f48 bfd/elf32-rx.c -d5f2b771a1bb5f91cd00db34019c3299 bfd/elf64-ppc.c -e159a7db37a96b86d7e83d385f0ac6ed bfd/cpu-tic6x.c -82604bf0c056c2b0efd67982153bbeda bfd/cpu-mips.c -88588d1f8c22bc72ad5e19b10196723c bfd/i386msdos.c -5cb0eef365977eb8c7430c04738a9e2c bfd/wasm-module.c -76c1478798dcce1938f1af9679b19724 bfd/netbsd-core.c -58a3fb1e054b540ef5c1329799b824bb bfd/ChangeLog-2005 -036b37876b5f49d476fc723d86a09e17 bfd/elf-vxworks.h -0bf40e20d54ba8596e2274c6c5435684 bfd/elf32-msp430.c -a8e93735551a79546434f549b857495b bfd/cpu-z8k.c -fc09e2d477a8cbc01aacecb862594a44 bfd/cpu-m68hc11.c -c50e59518604f040f78c62d4c1dba3a6 bfd/pei-ia64.c -3268b5910b1c33e6455c671ffcd9bd6b bfd/cpu-score.c -710f308772ff4f8ac4d3c701b432363c bfd/irix-core.c -e8b25364d1ad7e7d5b5b6cce78cabb4d bfd/aclocal.m4 -37304b794e3b8b998aaca897b535ead8 bfd/cpu-m68hc12.c -dc0c1b9ca4430dee0a43db8413e4f1ae bfd/elf64-hppa.c -74d448f727b917b3b8ac11efd30df6c8 bfd/coff-i386.c -4f64387cc2f68f7f980105d0a6443858 bfd/elfxx-ia64.h -e63de121021d70eb72f129a7fe901ea0 bfd/configure.com -408ef1462276b75d3708877103c85eb8 bfd/.gitignore -fcefeaa3a9bcc870bfc4b05b2b0f8be6 bfd/coff-x86_64.c -ea3becf9543146e194d9dd435b550f2a bfd/elf32-mcore.c -e138ad26562e544aa3418ddecdd72d34 bfd/aout-tic30.c -a39b56afb128754a2f6008f1baee3032 bfd/coff-tic80.c -edaa4c4a5b377cabf9e17e30762b76a0 bfd/coff-bfd.h -a6cc9df7078aed83a2c9ad0cf21e4425 bfd/hash.c -f6dc4257b12673ac54b6cf79e50e0908 bfd/cpu-ip2k.c -dcb71a648329e371cd77e891c315c485 bfd/vax1knetbsd.c -f8b732eb1fe247a9e3a9b14718cff320 bfd/pef-traceback.h -224c9f8124d7b664bb057554d88b8b94 bfd/cpu-sparc.c -bb2db44e83a1cbe7833da3279d111694 bfd/elfxx-sparc.c -d6c41f04b788bb59cc650297ff8428a7 bfd/pei-mcore.c -e30966ef29fe693c13f459696be4f2c0 bfd/cf-i386lynx.c -7b81e5a6ce6ac6e271413b859ff11eed bfd/cpu-ia64.c -b80fec9a1a6e23f638e22db7a6ebe846 bfd/pdp11.c -cafc2fe0ba8e687f484d189fcb598fff bfd/linker.c -b5e8640617a5f0cff0c7538c9503d3db bfd/elf32-m68hc1x.h -54dc6753ba31d1ba1d4fd92f5fa9e97f bfd/warning.m4 -3c03d91f3448be3458211466de006a1f bfd/elf64-ppc.h -90d4f1ea6077b52dff87a60e7fa0d84e bfd/elf64-ia64-vms.c -45e16c20be3601f601d542d601f9a3a9 bfd/acinclude.m4 -bf2cb9504090f9b98f9846b65acbc38b bfd/README -aef1d85dd6b919750362585cd5e2c76e bfd/elf32-nds32.h -447306e27d9e7adee88b945ae3bf9099 bfd/cpu-m9s12xg.c -42256821899d48ebfa5ed61238a2e94c bfd/elf32-nds32.c -8f36fdc3d5ece457f9525fc91a8a8224 bfd/cpu-iamcu.c -3fc6e232e041cced582e450eb9b23698 bfd/libpei.h -aa0a17d3d300b8e872e4aaf4a06839e1 bfd/elf32-sh.c -bc36f619e3f1f220efe3c5f17a0b38b8 bfd/elf32-arm.c -7f81b244c8305093a105b156d9000f8b bfd/elfxx-x86.h -177bd7b4c84ba5c009fb078257ef06cb bfd/aout64.c -82ee3ab98de753aefddbf322bb89c13b bfd/cpu-m68k.h -c7111da5688d7c20a74b5532cd61310f bfd/cpu-nios2.c -63412ca0a72266eb0ccf3fa83633ec52 bfd/coff-mips.c -85220b55d79d5fdb04ecf76ae4e33d8d bfd/config.in -d409d08248526f735f15722cfc595872 bfd/elf32-tilepro.h -2f4f0e5bdcd60849e8038ac3045b33ec bfd/libbfd.h -2cbd25be1243136c5ddb52a4a6f5cc7b bfd/libecoff.h -1255b8e101e197b9dc9142e4f24daebb bfd/bfd-in2.h -1f1325edeff7aad1ad008630a1bb648e bfd/elf32-sparc.c -8f7b5397a7bb5d502a9997e19d244cea bfd/ChangeLog-2014 -86f496cd17d52d96424d40874acd6ae4 bfd/ChangeLog-2009 -7dfeef54f96f69d4c808b89e4d048605 bfd/elf32-ft32.c -d89df69f99d1232814c609c6e20e51e6 bfd/ecoff-bfd.h -620ebbae8ae4e65362c8e4272103a83c bfd/sysdep.h -07d1c3689bb0c5e5b6d5dfce7aee122e bfd/elf32-lm32.c -b7d5394e489e57d9f335d7c2d7a3af72 bfd/cpu-epiphany.c -1d7409f6ae264c3d82b309caf87f1968 bfd/elf32-m68k.h -b94e8f6e672578f7b5d42acc731230d5 bfd/elf32-tic6x.h -bcf99df76a4837a1b2d0dfea57bbd6db bfd/ChangeLog-2016 -3d59f30f8c6d07e9109d717a6778fa36 bfd/cpu-xgate.c -89637e92fbef834ef0c545805106bcc4 bfd/cpu-avr.c -ac72ac8b81029816c53e7e39767f568c bfd/elf32-spu.h -0dffd8ff7e8c42c17ab131e57dcd0b3e bfd/pei-arm-wince.c -3e8ce0c8b9aa15bae34a0366cd0957fa bfd/coff-ppc.c -b1aadeb5a4365caf0125f7f54ef7c240 bfd/dwarf2.c -007d341f935081dbbbc1696d73a184ad bfd/mach-o.h -a65ccf15e3247dee46695e4bd0e1015f bfd/elf32-m32r.c -c82c9be2b327a90a22ccfef126d1eb3b bfd/elf32-bfin.h -8834af971bbaccff8d1244771c70f839 bfd/cpu-d30v.c -1304eb5ab3399fa008542bc27b4f4798 bfd/cpu-msp430.c -0fd29d153e456262cd9e6847160b1394 bfd/merge.c -447741e3f8791198214f96779cefeabf bfd/mach-o-aarch64.c -0428e46d3051a9991f0ad7e7add905f5 bfd/elf32-dlx.c -1ee0f4acdb7c04719f15fb9cf08676c4 bfd/elf32-cr16.h -5872cf5ca40fd29e9adc03043fa457bf bfd/coff-tic4x.c -cfd3f204743e4d2bb202c590de6e6f95 bfd/cpu-mep.c -13bc94a622c79acc31d4458e0fa47e1f bfd/bfdwin.c -9368e3b21ad2746aae3f3f7da5856f1d bfd/cpu-h8300.h -8a604782f5cc44679f4e350c4ae61e69 bfd/cpu-plugin.c -a42a25cc4b62c32c87574318761ef95c bfd/version.m4 -c91e8d2b513e09475d566fb85d23345b bfd/elf32-moxie.c -6fba40134152e725d86c8894b5ed9630 bfd/libcoff-in.h -5a65560b265e4b8906456875a3d6d96c bfd/elfcode.h -caca36ea8abf0e5da1c1d06e1ece4a12 bfd/pe-sh.c -8f917f82a4133d3b325f960327e3a7ec bfd/elf32-crx.c -0f9b240d8b6c1bdc24d6aef79337f6ff bfd/elf32-m68k.c -5b0977bb4338376d1924620d43c0b4e8 bfd/archive64.c -c6f2335d823903da573f827b8c5d8290 bfd/reloc.c -f0a888c9c67dcd490a8d43be3bf7dc2a bfd/verilog.c -97996874ca7c27a7fc1311616e406158 bfd/elf32-rx.h -86d7d0f64855d60c9576ddb274b84336 bfd/coff-tic30.c -15cdfd7b5500a342bb89992c1638f683 bfd/ChangeLog-2007 -3e1d03e428e6021184e5a7590d6baf1a bfd/elf32-score7.c -fb580cf1eae401fecb692071051b5b67 bfd/cpu-bfin.c -5fd0f436dc56f5b2531b6da609424b0a bfd/aout-cris.c -4aa22c83bf1e15a4f4a59afced9874e0 bfd/osf-core.c -4f4957cc3240fbe693208be2b7258ac9 bfd/cpu-v850_rh850.c -766fa1795cc3b43a978b5a6665adc96a bfd/elf32-ip2k.c -6d89f76305e9a5ee5ae9c2eceeeba54f bfd/elfxx-tilegx.c -372e446f49da372fa75bd5bfa662aa17 bfd/elf32.c -f279e57181c4f1e840aa544b373001b7 bfd/cpu-or1k.c -d0e637d31bb8db88f182f848feae9501 bfd/mach-o-x86-64.c -b33c66a2abdcd15d765e5a3ab5d345b7 bfd/trad-core.c -0f3cd5149b9a8865cd9a596e1455aadd bfd/dwarf1.c -a652e1b7bb38b7c4378e613c12204310 bfd/cpu-moxie.c -c4d082a9c0c27456afe3357c4987b675 bfd/cpu-m9s12x.c -af4db43d12e2cfdaeffb10ef7befa9c4 bfd/elf32-avr.h -d359597f7e027264df0e13ccdd2d4b30 bfd/ChangeLog-2015 -b519d3fd1506aab9a5a8fc08fd693a1d bfd/elf32-v850.h -5ad05866cb82f7459c6a9e9a8ed08e1f bfd/srec.c -b9db2071c7bc32852e81a431ad3aa010 bfd/elf32-tilegx.c -d9c4ce8c578e8ee1229a8491347fae47 bfd/aout32.c -1f4b35b52ee7768f95749d04d733c892 bfd/cache.c -9a2b8c1f2b5d773e73649c2fae1f4ad2 bfd/libhppa.h -26b45c216f273fafbdd686b5ad2e9234 bfd/cpu-visium.c -0a58e5135c9545232bfffd4e30ebb47e bfd/elf32-tilepro.c -c2e18d094c08a71654a7f85db3568d5d bfd/opncls.c -4c332152b46c1beb01a8e4939a286062 bfd/cpu-rs6000.c -60dc4fbde34fca45fd96534cbd0d49f5 bfd/libcoff.h -9c32275c313835ee61d8589d518f660b bfd/section.c -ce11be331333e8ea990d53c22bee8b0b bfd/cpu-mt.c -5dbf7dda55d75e9a4ba95e6e4c9de3ea bfd/cpu-m32r.c -e7453491dcc0635b84ebb5907d25d8e2 bfd/mach-o-i386.c -ce93ef6cd4c0ba0799b9d6d75b36638a bfd/elf64-mips.c -3bf2c55ce6f89df29ab9b579b0b627f5 bfd/coff-rs6000.c -8b8a453da673107291f4754c544a2ebe bfd/cpu-nds32.c -e67cd64ef3f0bd715917161f23c09e0c bfd/arc-got.h -664fbd39f0da81d71ded76661ae067ad bfd/elf32-s12z.c +4f1f230149442a122bcda5ea67877db2 bfd/libbfd.h +a226221ba15cede571a796ce3a1058a3 bfd/cpu-xtensa.c +a64b4b498789b9bd528d09faa43cbe1d bfd/configure.host +c10ad47c7ea060bf613c2abcdf1d9656 bfd/elf32-tic6x.h +7ac546fb0133f746604112bab5b284df bfd/cpu-arm.c +7bbb747b3a53b0a5bf3fb5e50eed15f7 bfd/development.sh 1616089974633cf0fb24b7e9152a7f47 bfd/ChangeLog-2008 -e63f6d01a376008a89e252c7b5cc1f6f bfd/ChangeLog-9899 -2aeedee8927595bec83bf600ce9a405c bfd/mach-o-target.c -48097790cbee8800147ba96a6dd07fc8 bfd/ChangeLog-0203 -bd4dd19da6bf6939c9eb1f53ccbb6274 bfd/mach-o-arm.c -0d7cbe6cd7b24362d5e0d95b5a0405e1 bfd/cpu-aarch64.c -e60551d97475bf322042c33aa6b3b172 bfd/elf-linux-core.h -76cb6c46fc8b0dda19c34c8815ff75b6 bfd/cpu-l1om.c -279608772cc90e04d5477ac96c7c9781 bfd/elf-linker-x86.h -2c466fe0efda71375d6d9827b9e7ce73 bfd/coff-ia64.c -2fddd07f100af0551285d028f9fe8eb0 bfd/elf-s390-common.c -b0ae53bcc2ddea0fd7073bc1efbe4b6e bfd/elf64-nfp.c -d0578eaa5673bacaae79739ea01c5fbc bfd/cpu-d10v.c -80d4a5c65d3b563e8846bdb8bf6ec80f bfd/cpu-ft32.c -896717cfe0195cd4a9252de36607a36e bfd/reloc16.c -f67f8df0c6cb1e6b256a5adf3d6c1aa4 bfd/mmo.c -05cedb42f6a9cc65a191a092e591bf32 bfd/elf32-m32c.c -e81d2b1b3c33bcdf826bba9dded47679 bfd/syms.c -b4d0673436b3645cf04cfba9583bd8c4 bfd/cpu-cris.c -6b145a5c7771eed832bfb873accfdd2d bfd/elf64-sparc.c -72fd73fc0277b8c62634baabecbda132 bfd/elf32-or1k.c -d5e1a602431b0bf7049a07418937d087 bfd/bfd-in.h -cca1c9ee2db37efc6ece90cf29d106a5 bfd/elf32-microblaze.c -b23607d352e1aa6a14fc77338b9c6889 bfd/cpu-spu.c -4917b8ddc154e4eb6c02b7b94e408693 bfd/peicode.h -b7e8aa27ac68ab62ec40e9c8eb2d7b70 bfd/elf32-avr.c -d380bb7436faf3e33529d6b594073a98 bfd/elflink.c -6d282f0e256602a0a8f465611bebb586 bfd/ptrace-core.c -a5847be30208674e1a19ae938073dbae bfd/PORTING -073af6019c66c51374866cc7a39f9073 bfd/elf32-arm.h -c98248cc167eed32cc6ca602077a45c3 bfd/elf64-gen.c -a6233c0e696c8b5bdc8415a7c9cecd6c bfd/coff-alpha.c -4dc9bb41496fac484b0fda17a2f8c865 bfd/Makefile.am -8b31e3f09dc7f5ea410459c61f469a2c bfd/elf-vxworks.c -6474afde93f8e964e3d6dddffde3c41e bfd/ChangeLog-0001 -d18153119cfcc6612a634314ffc3dee8 bfd/aout-target.h -98c057745f0991973c7c857ae1605c31 bfd/elfxx-mips.c -5118f470d1115d196c762d40cad6b7d8 bfd/cpu-mcore.c -9ff7c07063fab364692d99911be11ae0 bfd/cpu-s12z.c -d2fe64a8b492db908855a402c6b975d3 bfd/sco5-core.c -9720f56db01cbda0af2d48a9a4111762 bfd/makefile.vms -b418dc9e0082fd3cd99b74bbe4b21662 bfd/elf32-xtensa.c -d7dc85b82b8542cee78915a90ed427ff bfd/elf32-bfin.c -d97dde7108578eea9417c70f39d97775 bfd/bfd.m4 -c326eafd6d594ebb26df7bdb1441fe35 bfd/elf32-am33lin.c -e44361cc4b7a74e175a87217b3524c45 bfd/elf32-hppa.c -53357a9b87dd158b90cf790c316fd438 bfd/targmatch.sed -bca184954cc2c57197d736dc7f25132f bfd/elf64-hppa.h -f738ded1af56f28e05cf307d4fc00b50 bfd/elf32-d30v.c -a6a10045faa3f4cb9847d86506029762 bfd/elf32-vax.c -3178422f328ae18f3cb23a79cd858a82 bfd/cpu-arc.c -573cf721e4a3e0b182772495388b6774 bfd/cpu-rx.c -7bb4a2b210c82a82a8048fcf1c927c5f bfd/elf-m10300.c -4390b7939ac6a37fc2dd095669a7cb48 bfd/pe-mcore.c -743e286b52ab0d250c6e98f549dbe185 bfd/elf32-metag.h -a373c190fe47abf9ea979688f9a15e5e bfd/cpu-tic54x.c -c3b9a80f7b7b63e87af2f74210ca46cc bfd/elf32-sh-relocs.h -3cab2f542321e9ecadba8f9c65f4b4dd bfd/elfn32-mips.c -40cbaf8a1ebc7495016672b264d9b2b9 bfd/cpu-riscv.c -deb393f679e2cb9d8afcf5d8f94ef4d5 bfd/tekhex.c -ee87609e727ca93f94b2727e062827f8 bfd/elf-ifunc.c -c290f0e5bcbb5bbeb313e253517aa4ad bfd/elf32-frv.c -ea936e5bce59cd5374f4e24460ffe796 bfd/elf32-nios2.h -fcbbbeeb235fcaa81d3253c7000bb0ae bfd/elf-strtab.c -78cd4eabcbdfe5e0a0ff62350b95faea bfd/elfxx-x86.c -f5ad372cf681a57b9a43f6975c05e33c bfd/ChangeLog-2012 -87e4b6d819e83f6523ce04d2b6cc4e0a bfd/wasm-module.h -8800a0bbd44a2f3f5de8ad4bd98327e3 bfd/Makefile.in -90a5c6243e726740d1e347c71798b702 bfd/plugin.c -a4f656b1a62df5078f7f59917ea39b56 bfd/elfxx-riscv.h -38772bbf29598a58e1c620d816cc41bf ChangeLog +53bed5c314b1f2aa8b39be9641f48942 bfd/elfxx-target.h +a7fe983ac68020d4103c7fa7d625de4f bfd/merge.c +124e5acc1479d4626fec3c7dc26adc8f bfd/elf32-metag.h +a130b966d25c37d8d27140f69149d8b8 bfd/README +60405f6c9c517aec9ef1bee7c063eee3 bfd/elf32-sparc.c +40370cf3f366fabe84d45a5456b048b1 bfd/elf32-score7.c +bc27f9505986957531d5dce36ecd4e2e bfd/elf32-spu.h +91d6c55a65a0aa2e507c6e5ca0b874e7 bfd/ecoff-bfd.h +494ff595529b374568c08392cf5e457a bfd/pef.c +3fbb4fe8a35b5dc54320fd34788a581b bfd/cpu-hppa.c +e30a90f432dbf120c9439f524979413a bfd/elf32-xstormy16.c +9747c86fe2b0678d47947d2150b6b5d8 bfd/cpu-k1om.c +aee70ce807564bacdd901a51550b7820 bfd/aout-cris.c +69491b04ef0fb966461bfe2738d7f6fe bfd/bfd-in2.h +98f84b30f106b9962542b65b47d2f9bf bfd/cf-i386lynx.c +6959797f58e19e0188b5f4547e31cbf8 bfd/mach-o-x86-64.c +f78db476d57c7308d883c10501cc021e bfd/cpu-nfp.c +731ada0816bfc5e350445644f3b30514 bfd/xcofflink.c +9a2e6a5915e70b76115bd1a9611a4278 bfd/bfdio.c +d3d4930147919f0140883106171bf2e0 bfd/cpu-pj.c +0396390e4126fad8cc7382de416bf362 bfd/elf32-sh-relocs.h +ebc3e1d6f28edb7f1702b03b368052e7 bfd/ptrace-core.c +9b2bfa09078c48f5f3fb185278be5070 bfd/osf-core.c +b2b1e015ab7accc09affcee72c0e8e85 bfd/bfd.m4 +3170a61834fe04de17244e72acc0f196 bfd/elf32-m68hc1x.h +98b4a3b8739f282b6d99795ac3f4fc06 bfd/libcoff.h +a5f5878c1be8b64d55826fa6eb460606 bfd/elf-m10200.c +4a4f03984fe6b57ecdddb1b1c70d6c7d ChangeLog 500b9244caa7a7ab23ece1db37efa76d compile -596c2296c23cda1b6445427d6c3ce3ad config/bitfields.m4 -b2d511a8a77414eda79bdee0daccfea8 config/proginstall.m4 +6b030f5cf640bdd401ea739f54a667f8 config/asmcfi.m4 +b75e527c5a9b8dcbcfb1ac321fa244eb config/libstdc++-raw-cxx.m4 +c385066b0fe61ef55d44cf2619e79b26 config/gxx-include-dir.m4 +fa1446baa94824d733d33eb615217d23 config/ax_count_cpus.m4 +8f2bd36861dd8e2742bcd719a977271b config/no-executables.m4 +ff3f5b34f517f5f109f233879b690f42 config/ChangeLog +5b51c3ad4e0286a41fe1020cf7e252f0 config/bootstrap-debug-lean.mk +04bdbef77f5fd2e282f7dee0bde60444 config/codeset.m4 +0163b672c888aaf1c8ad3e867a0ec9f1 config/zlib.m4 +96289d06809692c31d71e69c4bedb6d7 config/mt-d30v +120ec56e3aa27739a2945bc1c8a2530a config/nls.m4 +712f68fd585228bcc308a3cb4aa21df1 config/tcl.m4 +c950e3234da1eb9ad5f29bc1c2d2ae74 config/mt-ospace +a155332d4af74bcf3f4c52b4dbadca34 config/plugins.m4 +7cdde9f19fc614304e49342c660e2d47 config/intdiv0.m4 +e32906a3177f3b368bcd56f9e86a620c config/inttypes-pri.m4 +5c6a030699353abe2ff69294a495e4cd config/bootstrap-O1.mk +b5a5c394536a15e50be1998bd341fd02 config/depstand.m4 +abb913a79f307c92b276ddb058600c2b config/bootstrap-lto-lean.mk +612f740b46be9896cc7c4c14c03b5c4e config/mt-sde +77931c860806547ce9fc56097a731c6f config/lib-ld.m4 +1d7419534d43fda437ce0a4f0719ee5f config/mt-mips-elfoabi +507b102116e2550175bb7f42ee3c2958 config/mh-darwin +c68813632d46f086a6b4d48af1b8b6b1 config/stdint.m4 +f466ea6022e6627a2e3d94bb0cc7eeb9 config/bootstrap-time.mk +5cabffc02a90bd9698105b9eef507f11 config/warnings.m4 +e271ffe7b43dfbd759f0195c2c1624dd config/gthr.m4 5886463c7411d3bf8e57fcfa560b904d config/mt-gnu -065f6478cf9a6fdc999f666517cfb8b4 config/bootstrap-ubsan.mk -4c71713860dd1ce1b979e87301631d55 config/ChangeLog +ad4ae2c604a57f5e6f53c9edc33ea1f1 config/math.m4 3be755875df9da02eb4b0a9badd414f1 config/bootstrap-debug-big.mk -534dce34ae221e73e2d67d3ba07f00a3 config/lthostflags.m4 -7ef51b0adb98e5c5f7aba46d2c7293f1 config/weakref.m4 -5cabffc02a90bd9698105b9eef507f11 config/warnings.m4 -46d519a53c628afcbdd8f0bf47500a7f config/bootstrap-lto.mk -01e70ae9c362268b14876c621e650f3d config/mt-nios2-elf -1d7419534d43fda437ce0a4f0719ee5f config/mt-mips-elfoabi -4641658da74a0c3af1b517487876ff0e config/multi.m4 -db111161c56fa9d53a03abfb188ad1d0 config/lcmessage.m4 -6b1c349fb182e74fbc464c50c88fe2ee config/ulonglong.m4 -761497fd3445beb86a90919955d5aa20 config/stdint_h.m4 +0aeb00868c61b9095b7a4553c9637221 config/mt-android +c97b318db8e2775b81a9635ad4ce97e1 config/sjlj.m4 +772abbb55df582cb2630074d944b9f23 config/bootstrap-Og.mk +cd7034dccd04e50150b14c597dd545a5 config/mh-pa f8cc157a22bc4fae23cee0f7da613154 config/isl.m4 +9495055af79ee43819009a4faf0df96b config/gcc-plugin.m4 29c9c3d57667bc9e6f14d625b2cd5894 config/glibc21.m4 -1282ef4331970c26224afd363968e276 config/gettext-sister.m4 -bd6855445bd58ae7e066221ade8cc55d config/mmap.m4 -96289d06809692c31d71e69c4bedb6d7 config/mt-d30v -696b71cc336927f298a69c5b9321910b config/bootstrap-cet.mk -8e54553a2c063659a749e0ef9e5348e4 config/futex.m4 +49305b421244035f19bdccb38a800d5f config/unwind_ipinfo.m4 +e5f16579c830ccc42e238b49e8409e99 config/mt-mips16-compat +0a70244d959a1a5320a786bc0fa37268 config/lib-link.m4 +042203b305962ba9a8f8474ef80edeee config/enable.m4 +db111161c56fa9d53a03abfb188ad1d0 config/lcmessage.m4 +2f2de833dd86bba89d64e5813be81550 config/futex.m4 +d7cfead8c20016c2dab7ea5b65b075d7 config/pkg.m4 +cbcbd9977ef1239ccac0c5c54d214302 config/ld-symbolic.m4 +33768879cdb11bf946d977ab6632d169 config/bootstrap-lto-noplugin.mk +48d5107b991a0cdbe7eb7022b0dfecb2 config/mh-pa-hpux10 625bacc09b9992290d94831bd7506bd0 config/mh-djgpp +07787fd35e89d9397661e5026802e457 config/largefile.m4 +f1139d31b40bd5985bd749e15a83f971 config/cet.m4 321e8bd6894bd9a668af361e89e92e9b config/dfp.m4 -0163b672c888aaf1c8ad3e867a0ec9f1 config/zlib.m4 -612f740b46be9896cc7c4c14c03b5c4e config/mt-sde -76d638a67d840715b2de89afee8ef49a config/mh-ppc-aix -50120e7fff340d87578219756e55a5e3 config/lib-link.m4 -9495055af79ee43819009a4faf0df96b config/gcc-plugin.m4 -15b8d5adf53ad5ec75f055b193a6b1c2 config/extensions.m4 -bce7c97d56a16836e49ff576ffa33089 config/iconv.m4 +1999cda4a81e667104bc146b3968eb4d config/bootstrap-debug-ckovw.mk +dd11d6ddf98d1e2066fa3aef4f8ce966 config/ax_pthread.m4 +babb6167c05386834412652e8b27239e config/bootstrap-debug-lib.mk +b2d511a8a77414eda79bdee0daccfea8 config/proginstall.m4 5413d2cdbde706860854a69f6fc12f81 config/po.m4 -33768879cdb11bf946d977ab6632d169 config/bootstrap-lto-noplugin.mk b7384c06ff3d09212ac04dbab4ce969c config/hwcaps.m4 -c950e3234da1eb9ad5f29bc1c2d2ae74 config/mt-ospace -1cbbc8830601bf43a3c42ee10a01eecd config/lead-dot.m4 -712f68fd585228bcc308a3cb4aa21df1 config/tcl.m4 -c385066b0fe61ef55d44cf2619e79b26 config/gxx-include-dir.m4 -49305b421244035f19bdccb38a800d5f config/unwind_ipinfo.m4 -4d3304310a9b7b17872d6f644e1dd7c8 config/bootstrap-O3.mk -5b51c3ad4e0286a41fe1020cf7e252f0 config/bootstrap-debug-lean.mk -6b030f5cf640bdd401ea739f54a667f8 config/asmcfi.m4 -48d5107b991a0cdbe7eb7022b0dfecb2 config/mh-pa-hpux10 -57534269dac398c79a36036eb35704a1 config/elf.m4 -babb6167c05386834412652e8b27239e config/bootstrap-debug-lib.mk -b17ad59a69316040fae6c3b09187bcbc config/inttypes.m4 -a6bf9c39c62222092ea6d5d8551c077f config/ax_check_define.m4 -9a194b56c06b616528d1e76306aa78e6 config/bootstrap-debug.mk -3fe4a576c2a75736c8da3af1d0824217 config/mh-cygwin -7cdde9f19fc614304e49342c660e2d47 config/intdiv0.m4 -c68813632d46f086a6b4d48af1b8b6b1 config/stdint.m4 -71bf002195846e85b3a96057f72ad530 config/largefile.m4 +6b1c349fb182e74fbc464c50c88fe2ee config/ulonglong.m4 +2ea0edfde0ce5ce69b49317a5650f048 config/acx.m4 +15b8d5adf53ad5ec75f055b193a6b1c2 config/extensions.m4 +4641658da74a0c3af1b517487876ff0e config/multi.m4 +76d638a67d840715b2de89afee8ef49a config/mh-ppc-aix 9af153786999225732c95595da5ebd52 config/mt-spu -a155332d4af74bcf3f4c52b4dbadca34 config/plugins.m4 -1a627bc39dc12ae705bd4136731da428 config/gettext.m4 -5c6a030699353abe2ff69294a495e4cd config/bootstrap-O1.mk -120ec56e3aa27739a2945bc1c8a2530a config/nls.m4 -042203b305962ba9a8f8474ef80edeee config/enable.m4 -1999cda4a81e667104bc146b3968eb4d config/bootstrap-debug-ckovw.mk +b17ad59a69316040fae6c3b09187bcbc config/inttypes.m4 4455537cdae70977a1283180062a2d8d config/lib-prefix.m4 -e5f16579c830ccc42e238b49e8409e99 config/mt-mips16-compat -0fcd4badfe2a2191778bdf5ab94aa40c config/acinclude.m4 -77931c860806547ce9fc56097a731c6f config/lib-ld.m4 -16956754bb073f43a4e0c8077356a5a7 config/gthr.m4 -a0e43b71bb326f55e765be2fab1ac561 config/math.m4 -e2dc6b4fd62b77bff96b7951ef74f78f config/target-posix -5135144630c100a01c62fa64629aafb4 config/override.m4 -c97b318db8e2775b81a9635ad4ce97e1 config/sjlj.m4 -b75e527c5a9b8dcbcfb1ac321fa244eb config/libstdc++-raw-cxx.m4 -59bd17b0aad6631e55578865d5828d70 config/mt-alphaieee -d3cecf02bb97035177818aefbb0e0833 config/progtest.m4 -f466ea6022e6627a2e3d94bb0cc7eeb9 config/bootstrap-time.mk -e10d31316e03a59577fb4ed90a670914 config/mh-alpha-linux -d3eafe382a46e6747e3644cf4a55d5cc config/gc++filt.m4 -b5a5c394536a15e50be1998bd341fd02 config/depstand.m4 -dd11d6ddf98d1e2066fa3aef4f8ce966 config/ax_pthread.m4 +696b71cc336927f298a69c5b9321910b config/bootstrap-cet.mk 8d6647b6e881a11ae46d9bcaeaa0bd0f config/mt-mips-gnu -e32906a3177f3b368bcd56f9e86a620c config/inttypes-pri.m4 +01e70ae9c362268b14876c621e650f3d config/mt-nios2-elf +5135144630c100a01c62fa64629aafb4 config/override.m4 +9a7844d5b1c1cc8c4ed1f1d3e32f8872 config/tls.m4 +0fcd4badfe2a2191778bdf5ab94aa40c config/acinclude.m4 0b63117973333c343e0d0819012b8187 config/inttypes_h.m4 -197020547d9441bc0fed105dd9ad7822 config/cet.m4 -0aeb00868c61b9095b7a4553c9637221 config/mt-android -507b102116e2550175bb7f42ee3c2958 config/mh-darwin -cd7034dccd04e50150b14c597dd545a5 config/mh-pa -683433c6c1f829d4f0aa007dfa29c880 config/mh-mingw -cbcbd9977ef1239ccac0c5c54d214302 config/ld-symbolic.m4 -fa22f7e8f43ef5b6e9ab94ec570c2327 config/no-executables.m4 +1282ef4331970c26224afd363968e276 config/gettext-sister.m4 +4e23c37c70ffc7de37887cd39f1cb870 config/toolexeclibdir.m4 +bd6855445bd58ae7e066221ade8cc55d config/mmap.m4 +d3cecf02bb97035177818aefbb0e0833 config/progtest.m4 +f0d17f3362caa1926e231994168f1e8d config/bootstrap-asan.mk +a6bf9c39c62222092ea6d5d8551c077f config/ax_check_define.m4 +57534269dac398c79a36036eb35704a1 config/elf.m4 +a8801f3e491168787fe2624d07ad1b08 config/mh-mingw +1cbbc8830601bf43a3c42ee10a01eecd config/lead-dot.m4 +59bd17b0aad6631e55578865d5828d70 config/mt-alphaieee d31260ea4a04e5fe935a240278d5d02b config/picflag.m4 -04bdbef77f5fd2e282f7dee0bde60444 config/codeset.m4 -2ea0edfde0ce5ce69b49317a5650f048 config/acx.m4 5e1e75893989d0ae3c0452451cf80280 config/uintmax_t.m4 -84e5632d203c53371e4993d4f64d2a3f config/tls.m4 -f0d17f3362caa1926e231994168f1e8d config/bootstrap-asan.mk -30ffb6800f22e04204301eeeaa0efc31 config.guess +d3eafe382a46e6747e3644cf4a55d5cc config/gc++filt.m4 +4d3304310a9b7b17872d6f644e1dd7c8 config/bootstrap-O3.mk +596c2296c23cda1b6445427d6c3ce3ad config/bitfields.m4 +3fe4a576c2a75736c8da3af1d0824217 config/mh-cygwin +1a627bc39dc12ae705bd4136731da428 config/gettext.m4 +761497fd3445beb86a90919955d5aa20 config/stdint_h.m4 +e10d31316e03a59577fb4ed90a670914 config/mh-alpha-linux +065f6478cf9a6fdc999f666517cfb8b4 config/bootstrap-ubsan.mk +534dce34ae221e73e2d67d3ba07f00a3 config/lthostflags.m4 +bce7c97d56a16836e49ff576ffa33089 config/iconv.m4 +e2dc6b4fd62b77bff96b7951ef74f78f config/target-posix +7ef51b0adb98e5c5f7aba46d2c7293f1 config/weakref.m4 +300f4b357f96bcf7bed569192152a866 config/bootstrap-lto.mk +9a194b56c06b616528d1e76306aa78e6 config/bootstrap-debug.mk +cb6f2f7ab88041bd5286480f02b53398 config/debuginfod.m4 +56c8530a22f26cdae7c9b5e946c06429 config.guess cb74b6c8a93f1e46388212f44c60afed config-ml.in 040359150cf11493f973a46d8a25b06b config.rpath -97894fe508fa6fecc2e85cf2ee1c9445 config.sub -4626d9a311b5aedced28cf4a4a1572e5 configure -5f42a558cefe4d8cb194328cacf868a2 configure.ac -52200558f27abe18c3dcf17f7e3522aa contrib/ChangeLog -599fa78ff6918c41e353990adf0a1ba4 contrib/dg-extract-results.sh -defd641fcdf03f433c3ad5d4b2520e36 contrib/dg-extract-results.py +190c5eaf225abd14513d768efc5073eb config.sub +7ff312170e8839619822bcd5c052e537 configure +c5570ee120b8c2c02c2b83608426922b configure.ac +7642cf6fe3ae8da347751cf241e3ef04 contrib/ChangeLog +514fb178de0ad540660b4552d55a6f84 contrib/dg-extract-results.sh +afd0452908aeb3a24045e5201bcf9d34 contrib/dg-extract-results.py 59530bdf33659b29e73d4adb9f9f6552 COPYING d32239bcb673463ab874e80d47fae504 COPYING3 6a6a8e020838b23406c81b19c1d46df6 COPYING3.LIB 9f604d8a4f8e74f4f5140845a21b6674 COPYING.LIB -3ece2be2b83e4e6d1395514995ef5c8e cpu/ChangeLog -2f1ab20ded619a0fe3b11028c492afce cpu/m32c.cpu -a19fd9e8443a64db1dc14972cac446ab cpu/mep-rhcop.cpu -3fe5de5552242be376bc227337bf95fc cpu/xstormy16.cpu -af81aea42ecf5b05a6177025e94af7d8 cpu/iq2000m.cpu -65ee6179eb425bb10ca3078a08b2a976 cpu/mep-avc2.cpu -d64a929fc5b5c7fc2f29e1911a708435 cpu/or1k.opc -b4ecfabcfae65cc11bf52fd29db940bc cpu/fr30.opc -3e071f0b9c6ed8919fc0cfbd4e2c255a cpu/ip2k.cpu -3935b10637681bb2478258da8908eccf cpu/sh64-media.cpu -42945e544a3ba1dd34a91161aacf9e76 cpu/or1kcommon.cpu -e9533d2b525577101c8331e26c0625ed cpu/mep-avc.cpu -16f51fbd17b7bbe501733bc197b50717 cpu/sh64-compact.cpu -36a3725cfe5376cf5bbe2ba4ba3af92b cpu/iq10.cpu -f3d24c37ae7c5adb6ccd701a977e415a cpu/fr30.cpu -d0c7fefe64d9940a02bb6326b7a7ebec cpu/lm32.cpu 57bb884c7f43b4868dc92a9cdbb51a42 cpu/cris.cpu -6f764872339286a16ad3eee1bead2af7 cpu/bpf.cpu -00de210112af244cc9d8f3ef44203eac cpu/or1korfpx.cpu -36dd0633e45fe6482aff65f67346b345 cpu/mep-fmax.cpu -6af4b3d7ecacad1b05ed60edc5a3462c cpu/epiphany.cpu +636a203b4ddc26fced9d975e95d53416 cpu/mep.opc +8e8037af848f400d0d348e09ebdb4d6e cpu/frv.cpu +1d6c606b614c45650c376305c9a69446 cpu/ChangeLog +489902d19fb758761a771d924f53612a cpu/xc16x.opc 023d83d84f72b748513f5cb78c179bd5 cpu/mep-ext-cop.cpu -5c7ab28f06eca9cd5b0fea1c4a80659e cpu/mep-ivc2.cpu -1a19d96dd536cdcdef47e68d897fe639 cpu/m32r.opc -26e93da00b3bede6107823e06631c0bc cpu/mep-sample-ucidsp.cpu -948e8928f44c21e4e46631023475d4c8 cpu/xc16x.cpu -46bc705e6b0411486ee6e5e29538173e cpu/mep-h1.cpu -8e3b808b3f665daa3a35b5333062ea9e cpu/xstormy16.opc -38fbf7cb411f825e5cee1bd6f7e64680 cpu/lm32.opc -489902d19fb758761a771d924f53612a cpu/xc16x.opc -e28d4c4ced67f70f91462403eb823e08 cpu/mep-c5.cpu +d186b867bf5b1d1468f0db54b209a404 cpu/simplify.inc +2ec6a978ace41c4f6444cd841689b839 cpu/ip2k.opc +032c5fe3ad082f7151efc1c5fed33c1b cpu/iq2000.opc cbeb95243a93647804306f55db1b7362 cpu/bpf.opc -eed39a6c83a0f350dfcf61c0c709249d cpu/frv.opc -4e81508d1d51c5950c2b9a2795a88a88 cpu/or1k.cpu -2ec1c54e8542038a6e1623a6540c6d71 cpu/sh.cpu +2c95a092a2bbf6d00ebdd06e98e9a89b cpu/or1k.cpu +fe53009d6688c899526ec94a9ed8e432 cpu/iq2000.cpu +8e3b808b3f665daa3a35b5333062ea9e cpu/xstormy16.opc +3e071f0b9c6ed8919fc0cfbd4e2c255a cpu/ip2k.cpu +d64a929fc5b5c7fc2f29e1911a708435 cpu/or1k.opc +af81aea42ecf5b05a6177025e94af7d8 cpu/iq2000m.cpu +46bc705e6b0411486ee6e5e29538173e cpu/mep-h1.cpu +b4ecfabcfae65cc11bf52fd29db940bc cpu/fr30.opc +6af4b3d7ecacad1b05ed60edc5a3462c cpu/epiphany.cpu +d534cf9b6b4a7e68f003dcf5d9174cb8 cpu/mep.cpu +a19fd9e8443a64db1dc14972cac446ab cpu/mep-rhcop.cpu +c0374203128bcfa86c5ed10c70c9d83f cpu/mep-core.cpu +051b41a8f22ff0a5dc829da70867b9d6 cpu/mt.opc +9c2945e3977156e41da47617175ac64f cpu/mep-default.cpu +5c651c1f8b45c92288ab037008350870 cpu/or1korbis.cpu +975611174084ddebb7b62937476897d4 cpu/m32c.cpu d131138bbb159cd94a48bbb552beeb1e cpu/mt.cpu -67f8dd95b3154bfecd6153c33f80aa49 cpu/mep.opc e9b8e80ddc3003dd30c422877d4bb767 cpu/sh.opc +513da6c13e7a14ee308348999391d50e cpu/m32r.cpu +38fbf7cb411f825e5cee1bd6f7e64680 cpu/lm32.opc +e9533d2b525577101c8331e26c0625ed cpu/mep-avc.cpu +26e93da00b3bede6107823e06631c0bc cpu/mep-sample-ucidsp.cpu +72f9f0b9ec7e39026db83747293d8f80 cpu/bpf.cpu 4924175b9dd040ba11a00bcbfa1f4be9 cpu/epiphany.opc -032c5fe3ad082f7151efc1c5fed33c1b cpu/iq2000.opc -051b41a8f22ff0a5dc829da70867b9d6 cpu/mt.opc -eb412464e809f0430417d025d6d8cff7 cpu/or1korbis.cpu -9079eaecdbe5e3a0ef3e27e756845a23 cpu/m32r.cpu +16f51fbd17b7bbe501733bc197b50717 cpu/sh64-compact.cpu +36a3725cfe5376cf5bbe2ba4ba3af92b cpu/iq10.cpu +eed39a6c83a0f350dfcf61c0c709249d cpu/frv.opc +1a19d96dd536cdcdef47e68d897fe639 cpu/m32r.opc +5c7ab28f06eca9cd5b0fea1c4a80659e cpu/mep-ivc2.cpu +36dd0633e45fe6482aff65f67346b345 cpu/mep-fmax.cpu +86c1a8413cf75ef53fccfe55001c588e cpu/or1korfpx.cpu +8680841baef5ae06311438e021eb7856 cpu/xstormy16.cpu +3935b10637681bb2478258da8908eccf cpu/sh64-media.cpu +e28d4c4ced67f70f91462403eb823e08 cpu/mep-c5.cpu +2ec1c54e8542038a6e1623a6540c6d71 cpu/sh.cpu +d0c7fefe64d9940a02bb6326b7a7ebec cpu/lm32.cpu +4428746de2d2a73349c363212a3f6686 cpu/or1kcommon.cpu 4695535b420da5ea8f9c3240e742539f cpu/m32c.opc -c9ca560e22cd9a4f6386fa7d81ba9dd1 cpu/iq2000.cpu -9c2945e3977156e41da47617175ac64f cpu/mep-default.cpu -2ec6a978ace41c4f6444cd841689b839 cpu/ip2k.opc -2f25728eb6321969c8b21f7ce4bb9fd2 cpu/frv.cpu -d186b867bf5b1d1468f0db54b209a404 cpu/simplify.inc -d534cf9b6b4a7e68f003dcf5d9174cb8 cpu/mep.cpu -ff87656b73d5b97cf0df1ddae9e105e2 cpu/mep-core.cpu +07de464918d251019f5812a32b97fe7c cpu/fr30.cpu +65ee6179eb425bb10ca3078a08b2a976 cpu/mep-avc2.cpu +948e8928f44c21e4e46631023475d4c8 cpu/xc16x.cpu 8b59f0d0a2dcdced14765c514fbad719 depcomp 48803ea66a5aa68af0c6f226395ddb42 etc/configure.in -9201b6d74d22cb680dc60633857c89f6 etc/ChangeLog +4efa33cb728b66212af816a01e13d389 etc/ChangeLog 8f3269d92dc49ea8063d5a698a466c95 etc/configure -1dead0b29501096ceee0250321499390 etc/texi2pod.pl +81b02842c99f6b10fcfd7379f0faac0f etc/texi2pod.pl eaac0cdd8ac2b8c31194798a65896321 etc/Makefile.in -17d04d8acdeeffbf46bf86f49238266a gdb/dicos-tdep.h -1161c0707f3817fd2861682fed970027 gdb/sparc64-linux-tdep.c -40f5b59112aa422262add7416e914a0f gdb/record.h -fee9d2925c09b91ed26711a287bbe1bb gdb/ft32-tdep.c -f2858e5049fff28b7c7751ae7aa63d82 gdb/progspace.h -e2e36f27fb5c3b29437f717b7aef7ff8 gdb/rs6000-tdep.h -c51345a5a2dc06b0635c5c27be17cbf5 gdb/disable-implicit-rules.mk -460757fbad1e9fe061e344fed679edb3 gdb/auto-load.c -fd9d5cd280ef1e6969c7f9d1a37bbc55 gdb/dcache.h -aef8b3ff524648ce21ae2c1d9ebe6093 gdb/xml-syscall.h -05468347d96e6733fb580533e9c27032 gdb/dwarf2-frame.h -2ee871dd76e632dd2c6b3e09e72f54f4 gdb/darwin-nat.c -8b03d795c832646ea2b2785352b8bd94 gdb/amd64-tdep.h -b28e4bc8218d37fff8fb28f2efb1f20c gdb/build-id.c -e3476e89a7d8c053a79437c1b66f1211 gdb/type-stack.c -36ba4b04b300908964d95e6440686826 gdb/yy-remap.h -9f1d9aef9973b0b84f19365687f8979c gdb/break-catch-syscall.c -e3c1b6dbb68fedf5e2ca6e26eb41b718 gdb/libiberty.m4 -b4058942e77e5af16e3245a4f3398e2d gdb/stack.h -a2ffe585ae76378e299abc1a3fd5824a gdb/record-btrace.c -0a8b4f44ce5c9eac50bd420bc8727fab gdb/gnu-v2-abi.c -be8b85edbb2b454b58aee618c9469221 gdb/gdbarch-selftests.c -72a7c1f66845e992da015b288f747ceb gdb/syscalls/s390x-linux.xml -6f7693ce2f352067c2eea7904603c1bd gdb/syscalls/sparc64-linux.xml -6384e676ca2c74af004dadabdb5442a5 gdb/syscalls/arm-linux.xml.in -261b5ad505906b2e361703223b9900e5 gdb/syscalls/mips-n64-linux.xml.in -51c7c32aabc6b2fb90814e9872303739 gdb/syscalls/s390-linux.xml.in -52ce99f90a4c4013d50cc4418e82c896 gdb/syscalls/aarch64-linux.xml.in -bbf5bb23c7dd6ec006324fd2666ee75b gdb/syscalls/ppc64-linux.xml -dad3272e96de3201fbda2af222c0840b gdb/syscalls/aarch64-linux.xml -fb529d81a7f5d6b0f212ab0d4506171e gdb/syscalls/ppc-linux.xml -0d77ddadd4ed3f43c95716f98f4b528a gdb/syscalls/sparc-linux.xml -1c2e96d147302402c771344d3f8fb978 gdb/syscalls/sparc-linux.xml.in -03a72d03519a858a4a017ba8f26089cd gdb/syscalls/apply-defaults.xsl -8abecb4cc5f76a833f8d4a4aad7b5cdc gdb/syscalls/mips-n32-linux.xml -23a8634ef96bf06ab4be075f6029ff30 gdb/syscalls/sparc64-linux.xml.in -82dc9bdd1c983fa541e4d33498e98b70 gdb/syscalls/mips-n64-linux.xml -4082a241a0216c16e154bc4bad37849f gdb/syscalls/gdb-syscalls.dtd -45850fb7daeb0a31656a1c8468c36250 gdb/syscalls/i386-linux.xml.in -73629bd3c7e4d151233630fd0998dd02 gdb/syscalls/ppc64-linux.xml.in -405cb46c73829940fb44d7ad61df418c gdb/syscalls/ppc-linux.xml.in -ebb21d454b252a03b502b98457fd5b6e gdb/syscalls/bfin-linux.xml.in -4fa4da776413a8f3f98feacdc87276dd gdb/syscalls/s390-linux.xml -4f8095a3d5900875b5bf7b756d562fbc gdb/syscalls/arm-linux.py -32f9c4ed60459672747e168c7f67cb64 gdb/syscalls/linux-defaults.xml.in -52e1743adb1b7329e7f074a65780e509 gdb/syscalls/update-freebsd.sh -b260e4fd2bc7b7690b9d16861d4adfd3 gdb/syscalls/amd64-linux.xml.in -52216f4f434bcf04f8dd140cb8bd00d8 gdb/syscalls/freebsd.xml -7409097abbae285015a0f98e1ca15158 gdb/syscalls/i386-linux.xml -2716fd6614c2edfab4fa08e508402f06 gdb/syscalls/mips-o32-linux.xml.in -4f4a2d25952d84f51dbd5d6c194cbd8b gdb/syscalls/amd64-linux.xml -8f765fc7cd4c47e6571d50396dbe4ab6 gdb/syscalls/arm-linux.xml -c488a40ae032aacae8a101a35d00c35e gdb/syscalls/s390x-linux.xml.in -b94d5a40ecbfba2b9e82b875ae1ba7c8 gdb/syscalls/mips-o32-linux.xml -1d10618bb904f304982bc2978f0e2ae4 gdb/syscalls/mips-n32-linux.xml.in -7bcd810f9efc8b809f65fa3d53a9e68d gdb/arm-linux-nat.c -948c59ada961b696beff648505960b29 gdb/ser-pipe.c -c10fa584d3b9fef83b795d58adfb168f gdb/ppc-obsd-tdep.h -df7aa0b968ee02e6622d6f22196caef2 gdb/symmisc.c -a6bfc79420a075c6d61b8d58397ac58a gdb/psympriv.h -e52272db8b0998805dbceb3a45f53a0c gdb/gdb_obstack.h -c7cd2a0945562eaf27713cadfd87d7b9 gdb/v850-tdep.c -2b75dbdc6a7b5ea0712e191c5420b7f5 gdb/registry.c -b45a2f2ac3a57f350f7476af0550e518 gdb/gdb-stabs.h -4c716efb6f4f75538faef4418ad46056 gdb/c-support.h -a54b1f17aad847baa6dd6f472213e800 gdb/p-lang.c -99af50fa04538b0c3cdee5a33eabe331 gdb/thread.c -853d3afb85c1dcbd990bee219cc24314 gdb/p-valprint.c -055e137ecf61295b127805bb2b9fbd3d gdb/p-exp.y -b97e6d9ff1734909a46620fffc72222e gdb/ppc-sysv-tdep.c -c731d3c3a812aafbecaf98b81bbd10c1 gdb/language.h -8e10bac4c84c5e241e005d5c1ae34b41 gdb/aarch64-linux-tdep.c -c29a09bfd07f055fd8ef2d1696908611 gdb/p-typeprint.c -d7de69b94b0271e7d0cd1b552630892f gdb/ChangeLog-2017 -e70de5a49144616907c6f3cc61b32399 gdb/mips-linux-tdep.h -44f4acca675dd1278736738200626c73 gdb/rust-exp.y -08bd67593db5ad48eba1e46b19861a7e gdb/cp-support.c -94949eee96e19f9ae894490e4a72aa40 gdb/gdb_obstack.c -364fe909df51c403643d5f42dd74b72a gdb/amd64-darwin-tdep.c -6a1b3e5c16de8daf0803a0a253bd0b5c gdb/regset.h -d5a0301e7bfddfe7b850c2dd02855799 gdb/maint-test-settings.c -d85a61a5d562037024f914eeed867551 gdb/top.h -bafac92f764c8d347a31abe439dbff2f gdb/sparc-sol2-nat.c -12f7597a1ddc0572a30b1bfd6a71e364 gdb/gdb-demangle.c -f971d36e35ec0c3fce64b819d7891f15 gdb/ChangeLog-1993 -a5c1ccf56323cd288c0afad8c85e5104 gdb/x86-bsd-nat.c -a4f2bc7b3cdef5165ebc0de4b4fa0267 gdb/nto-tdep.h -256ccb10f336723ee43553e527b6e748 gdb/solib.h -07dbed64593298ea48c750d1809f8c82 gdb/ChangeLog -ea0ccfb2d9958014912adc91e541ec79 gdb/osabi.c -ddc39cb8a413fd206699922fcb6c3905 gdb/infcmd.c -9e7b3478c26a8effc4eb7ad062922586 gdb/addrmap.h -0ab7f7d5c2bd50bd41dcb3b73606779f gdb/ser-base.c -eb0aafd80bc87c0fba53c6c47a6565e6 gdb/hppa-obsd-tdep.c -cfec4087f693ef67d26568f16e17dc04 gdb/frv-tdep.c -76cd06783d7bb9ccd13c09fcb253204d gdb/amd64-obsd-tdep.c -15120a72a04f52d07e2bdd25b4b712e3 gdb/configure -87c06e781a43d01ffc73ffd437a0bdd3 gdb/completer.c -4543501dd5ae69ba69b1f235db55841f gdb/macroscope.c -890082ee741c2abd8f1978b536ad65f1 gdb/xml-builtin.h -af40e7418566ac67ecb8ccd7275d624e gdb/thread-iter.c -eaa23fde2c0f022a78dc5a234b5dcc05 gdb/gnu-nat.c -77d06a2e806ce2a7e8844a42986be50a gdb/inf-ptrace.c -08bec09de27602dbe49836be79e1bb99 gdb/valarith.c -f4c67deda242bc962c0ea951ab9ff3b4 gdb/target-dcache.c -85b5b4418ca317afc261b22d3709ac48 gdb/gdb_expat.h -1f3ff59e2ca24c003ff9508f181b15dc gdb/target/waitstatus.c -d8bd5abacdd2810c62439121166373cc gdb/target/resume.h -ea03eeff83ab4283f0f436167b1b8ac8 gdb/target/target.h -85e7540e4caa0ffe1dd60edfbce5a0ec gdb/target/wait.h -8fe4fee836cba9cb0a753c2fc5adef2a gdb/target/waitstatus.h -77dc51a90cd28aaf727f0855a7a7e463 gdb/riscv-fbsd-tdep.c -5a495521187b110bc4f053550e91f6b1 gdb/sparc64-obsd-nat.c -00a7824d148e416930b6eeb144b749bb gdb/amd64-nbsd-nat.c -4c43478596c29018c4acc9ee04ae827d gdb/i386-gnu-nat.c -4574a7d2bfb5dceec976a31c6a7430fe gdb/btrace.h -12afce0124d26def394ffdc0569af80f gdb/hppa-linux-tdep.c -e5e589fe4f10abb8957a8c2e4cddb7f8 gdb/ChangeLog-1995 -0c389107437b85b15762245df7de4203 gdb/f-exp.y -021b4d3c9bceccafa288a1d373ab16a5 gdb/ppc-fbsd-tdep.c -3b0a9d7cf61f2273a26c4b23b59cec8a gdb/i386-bsd-nat.c -10f14ab83d4f3c442e8bdd9062c91d24 gdb/target-memory.c -2e569128607e6a47122d396f5063c51f gdb/symfile.h -bcf7a346bd4da27f0d0ad89180941fc8 gdb/aarch32-linux-nat.h -8132daa85897bc71eabb365b687366fe gdb/block.h -411ce8802f6e515d7cb1e5d0520a7f09 gdb/m68k-tdep.h -99e16445999ecf2a1bf4f2208cbd3218 gdb/tid-parse.c -e004be78e9bd8205f810f1cab19c454a gdb/xml-syscall.c -97864e83da43d4c90a2837681980263c gdb/fbsd-tdep.h -ef1c687879f1541e0fbac83d9b1802fc gdb/dwarf-index-write.h -3a8cf8c7c452e42bb656fca9ef265749 gdb/ctfread.h -0a2a3a08a50585b9be0b5a6abc63afd6 gdb/darwin-nat-info.c -24803dd26ba8c02cadceb1de03805e43 gdb/gdbcmd.h -2562f95c85a5b3213c5f650e80a9d817 gdb/probe.c -3f7cc4b351f51c52bf5ce4f1edcee27a gdb/filename-seen-cache.h -216e239f25ac9f403401d78f786208de gdb/f-exp.c -0c40c76624be92637c41da7cd666276e gdb/gdbcore.h -8da3fbdcb07ce16e024b71ad3338d1d4 gdb/sparc-ravenscar-thread.c -be2f2991d9c0a74e006bf077ea706b25 gdb/ax_cxx_compile_stdcxx.m4 -978f910cc0629a2b3e6c64d6c893b1c0 gdb/tid-parse.h -d32239bcb673463ab874e80d47fae504 gdb/COPYING -0cdf060c93316dbe184e27f7b5cf4160 gdb/gdb_buildall.sh -9198f7b1807c968098814aa2a3901aee gdb/gdb.gdb -ff6fb80a913b6560e63bc2ca5ac314db gdb/symfile-add-flags.h -a1dcd9f441626005f0210671f504ce22 gdb/obsd-nat.h -0be9dbd1ccd29310cfb641325f1f33e2 gdb/hppa-nbsd-nat.c -e50f659b43728c2bbccc3b289f01591d gdb/alpha-obsd-tdep.c -4222bf19e265fa2cbe238942ae29c790 gdb/go32-nat.c -90858509a2e7cb84281f74349c5b843e gdb/gdb_bfd.h -09507273cd3046a1fac64f76a0dcc5c2 gdb/mipsread.c -0a5815d37cbe811a9db7d84339143bd9 gdb/s12z-tdep.c -571f3e2e55da4606ea9e36275d82a867 gdb/.dir-locals.el -122511fb05506bd3525d6e6bcd975a28 gdb/stack.c -413da4df9897cfbc1a4bfe598cae2f3a gdb/amd64-fbsd-nat.c -8c962c359d8a086dc6dab368555d43d5 gdb/amd64-nat.c -05f203422f970d6d94107aeefe0d211c gdb/c-lang.h -532138b893c8f3aa5f49b702f361ea2f gdb/extension.h -a1b52e538692abfda68b4577328a835d gdb/gdb_wchar.h -38f17429498b0ba6e6467e94c21cbdfb gdb/main.c -0aa646b7c9bb91edf6c6ed1a7416abae gdb/sparc64-linux-nat.c -42ea7b52e70204880174e8d620bcd72b gdb/user-regs.h -35186c0cd568df7551b4a251b5443583 gdb/fork-child.c -c7e6e0b2fb485983c5708a31351cfcfa gdb/frv-tdep.h -9fdafccecd6cd44751141b88f8908bb9 gdb/MAINTAINERS -54c06d2cf20b48fcf16c4ce9f92eb48f gdb/ppc-linux-nat.c -928753e726d63da89f05dd30705996e7 gdb/coff-pe-read.h -c1195e4162e62447ed04521e695af322 gdb/valops.c -0265f9cdbab5ab8cb5861f6c043f46bc gdb/moxie-tdep.h -01bd7ff80ffb7776a95f916bc79c960b gdb/dwarf2-frame-tailcall.c -2fa917359ecda6b8fa660e2323b38bde gdb/linespec.c -4451ea45ce903972340c9a7d33cbdc27 gdb/sparc-ravenscar-thread.h -a85005d99563cda43a65c98f5e19ac59 gdb/moxie-tdep.c -5553b991dbe79375f23560dec70bd9c2 gdb/regcache-dump.c -d7f1651592a4e821dd33eb610229f755 gdb/make-target-delegates -3d5e1deb4cc5a6d96dd8406fb2f8bd16 gdb/alpha-bsd-nat.c -9e0d61961dfe93c247189d0b9fe805d2 gdb/jit.c -d31274fab351314dc4d036fb6ad85bc3 gdb/process-stratum-target.c -f574312b83052ac3892fe7dea90189a8 gdb/riscv-tdep.h -42a8f9bd42a11ca35e8e92a7b803f360 gdb/sparc-sol2-tdep.c -6fe46589f0153467abff58220a26d15f gdb/progspace-and-thread.c -a0f01bd2d2aa0269b299293dd3782474 gdb/disasm.h -13ab729ce1e88c36aaa3bbb606fdb950 gdb/arch-utils.h -0bce7632fc1dcb51fa6bdc6c011b09ec gdb/test-target.c -8570607e9a03cf7e3a872204dee576a4 gdb/buildsym-legacy.c -8231b684b7d88405d04d2bef46a24822 gdb/ChangeLog-2004 -dffc6d27228599f6e18713eaeeb8311e gdb/x86-tdep.c -2c2e70d15a83cf6935b178cd45e389a7 gdb/i386-gnu-tdep.c -aaf00c3883e132ec7d45fe4b50d8b3b8 gdb/interps.h -3250d5a36f334505d0bf537178de51e6 gdb/minsyms.c -523734e6edcd0d89da36482ce91ed29b gdb/mn10300-tdep.c -5616f0a60b8f8e5658c869cb511c04ab gdb/solib-darwin.c -ae83e839bb82ca7983499f1ef8fd9eae gdb/sparc64-sol2-tdep.c -6b27066ec19a2d0ff26b35027744fe5c gdb/complaints.c -d6c5806ee1a3aca3251a010c63d362fe gdb/ppc-fbsd-nat.c -fab795b87817d7a735d95a1a0746f831 gdb/memrange.h -e9bf1263160fee258b6daa52e054f56d gdb/registry.h -44f7b1cb045178c096201f57704b7504 gdb/ser-go32.c -fe50bc2d2a102c1fc8f989a780fb92ae gdb/objc-lang.h -16676b9547f9a7ac95c648ec5962cbc5 gdb/ChangeLog-2010 -f933cbc6f15a524f8c6f27a1a4688635 gdb/arm-nbsd-tdep.c -f7d79352ed5bbc8f05085c964f243f26 gdb/aarch64-tdep.h -097839db449a2fb558c58b841a08f3cd gdb/ada-valprint.c -5ec8a13039f178b86804ff04e7cbdf99 gdb/ChangeLog-1998 -6dc97114939ff2f0f469658eac60f241 gdb/sol2-tdep.c -745943289638fd58aad3063ce7438400 gdb/target-float.c -7176241e542ef33dc3f1495d634ea95d gdb/or1k-tdep.c -6322da50146689f8dd9f6cc47ae2af7d gdb/tracefile.c -69ff162445d368d5df57fc2189f05a8c gdb/i386-linux-nat.c -4ecc861a5ddf637a7f289e35ef636c98 gdb/doc/doxy-index.in -04c82b1da7e894a6555868e4f86225af gdb/doc/filter-for-doxygen -a76b5ab137cd7ce741acdb62860037d8 gdb/doc/ChangeLog -246644e77ee9c0f567e0d12e91d8e4e2 gdb/doc/gdb.info-5 -0126ae877012bc885264c55ed18d489a gdb/doc/Doxyfile-gdb-xref.in -04468c6c53cd54adffe1ac065ce02b3c gdb/doc/gdb.info-3 -664e4084bf33b6edd3bb1dfc7f8557ec gdb/doc/agentexpr.texi -553b7fe1bf4b5d8b96fdb8cd83503de1 gdb/doc/stack_frame.svg -7931d6f69f75edc6afe6326529939196 gdb/doc/annotate.info -8108dd8f906f2654fecc74958cf383db gdb/doc/psrc.sed -5f98f91239aa2353ad6e19be2a39d0d1 gdb/doc/refcard.tex -ab0fe311032294b952da80585b8b90e7 gdb/doc/fdl.texi -0ed2aeced2e763402a6f94235abb7eb3 gdb/doc/Doxyfile-base.in -8082811e570b9486f3f2c3f76972ffa1 gdb/doc/stabs.info -027b716ba566a30c4d6926166ee8b1ad gdb/doc/gdb.info-1 -7bfdb0765c5d050d204fbb30aeeba0d8 gdb/doc/stack_frame.eps -d39233c86ed6a6dc9e853ae6a11fe03e gdb/doc/stack_frame.pdf -0fdae8a4c9b3ad1de02ece722ba78df0 gdb/doc/gdb.info-8 -32479c4813025f089e06f5e224602175 gdb/doc/gdb.info-4 -9bd8bc95666317ab8a4fbe6880325bfc gdb/doc/gcore.1 -d5d06eaf9b4d44aa442a4a281aa9aea4 gdb/doc/a4rc.sed -bf96494e6e4d346175babd5ef9781882 gdb/doc/gpl.texi -833c3c3ad8a43c20bb2139db0600d3c7 gdb/doc/gdb.1 -cd5e3faa9bd1b684a73c7d527cdb4988 gdb/doc/filter-params.pl -ab49212b04797266048093ccfd8351ca gdb/doc/gdb.info -7fbf0e4e134a787eb153a8c936583212 gdb/doc/Doxyfile-gdbserver.in -66674dc351ba95941f422dc18cae24bb gdb/doc/.gitignore -793d4a25f96403d0f000b798db03534f gdb/doc/gdb.texinfo -9b30cff8ae6a9cd135db528758edd2d0 gdb/doc/gdb.info-6 -e2d0e566bf8c600c6471245153974c02 gdb/doc/all-cfg.texi -f73e9c6254948e3a5cc79f34fb89667c gdb/doc/guile.texi -e34c1114679dacb57dd1c1c998f02c41 gdb/doc/Doxyfile-gdb-api.in -bca8c1a2d070e5b7c49a2660de00f7d0 gdb/doc/gdb-add-index.1 -c299223a52bafe025f9132f44f863471 gdb/doc/stabs.texinfo -3e0dfaba82b9a138bcc165fa456584c0 gdb/doc/gdb.info-2 -03916e7c19594e1fe6d92cce5f25feab gdb/doc/annotate.texinfo -6076d300a46651562d4ecd0604442414 gdb/doc/stack_frame.png -64b23786f45994829187ad884d5afb2e gdb/doc/gdbserver.1 -a90b73e9d465dcb06f257edb84295e7f gdb/doc/python.texi -73ec71cd3b2e7f61bc530f19d4b35056 gdb/doc/lpsrc.sed -3ad77267e1a9c6a6030046bcabdaf323 gdb/doc/gdb.info-7 -29469d490a451be1e512b455dc5efd94 gdb/doc/gdbinit.5 -f81a0e00e0cb9e41b078069fb9bedb07 gdb/doc/stack_frame.txt -71c6eae9f2e41b20f7cce98abb0dec5f gdb/doc/Makefile.in -2475a53e22413bea4b66cc3f2a033ea3 gdb/ui-file.c -26fe9c7d2c3f0fd6d7f0931e98cc51bf gdb/arm-symbian-tdep.c -896417d36a42f258705547b55410b4f8 gdb/amd64-nat.h -a3c2f543ea5dcf47754ef42016aae7c7 gdb/language.c -05fb925f6e483d226939d7ad07041c49 gdb/filename-seen-cache.c -bb2ae25799ef51d40a39a0b70c579e55 gdb/m2-lang.c -661188b76e144d8516024d0079051c1b gdb/dwarf-index-cache.c -4dcd885c26674c8e50926ee4aec78a22 gdb/c-exp.y -169139cb37766c5fb1fdee1ecacec217 gdb/configure.ac -5b003cd772fe6658279f6a8184aa9189 gdb/rs6000-aix-tdep.c -c17840667b66395b6ee7e5d4d80c78b5 gdb/gdb.c -64b268d36a8a65689863c2b98d262bca gdb/dicos-tdep.c -0c5242c495faad8e5927689f108c4ab1 gdb/frame-unwind.c -961b47c36e88ae51019ea71773c621e1 gdb/fortran-operator.def -f5706773336a50ab9661908687d7b2dd gdb/mips64-obsd-tdep.c -4dbfdd602dad8e586d15680ebe56f723 gdb/bcache.h -77024b369973b3559102e31fb6c442f0 gdb/mi/mi-common.h -83442bbd8859e8caa1f4cade044b7a88 gdb/mi/mi-cmd-env.c -00ea43ae0c4dd98fd1e3f116f45b3fc4 gdb/mi/mi-interp.h -73fc8c91db1f479099a156866367fbf3 gdb/mi/mi-cmd-break.c -fd1231c2a0827ed96a2d425c59bf5cdb gdb/mi/mi-console.c -5f39d8b91be3c68b9fe5daae21380e14 gdb/mi/mi-getopt.h -67bdf82395cef3e45d5f60faf9a2e91b gdb/mi/mi-parse.h -7c884b871acc24bc5c36b1570c948ff6 gdb/mi/mi-out.c -86c67a8b92baf5dd7ac3953fd4f17663 gdb/mi/mi-cmds.c -75000f7f1417cc7d172940d73b36893d gdb/mi/mi-symbol-cmds.c -f86d313e6651b19e9ec65764a83c553f gdb/mi/mi-cmd-stack.c -ecdb35777188df08a8ee6f66e1523c5e gdb/mi/mi-cmd-break.h -8ee54e8749ff16d20130df778834e25f gdb/mi/mi-cmd-file.c -43a076a7ce4311084fd8d75a4ca898a2 gdb/mi/mi-out.h -90b81f951a2351c88c1b4a1fedbb492f gdb/mi/ChangeLog-1999-2003 -01fdebe24efd1141dfdf71a8d704b817 gdb/mi/mi-cmd-info.c -73bac40c909c9af1f7d02b7ed271f8c5 gdb/mi/mi-cmd-target.c -bf8d612f7889c871f6c85bdf8be42cdb gdb/mi/mi-console.h -99613ab09b835f43d7cc0f06277a7026 gdb/mi/mi-cmd-catch.c -815cbfa62748cff28b13939a512d0913 gdb/mi/mi-interp.c -efdd0d4226b3af49f69337f7f0ca97a6 gdb/mi/mi-cmd-var.c -e9ebe13c2bd90abc42332323223037cf gdb/mi/mi-main.c -e79e6e9c6a7c5a0970f42dd745f6b95f gdb/mi/mi-cmd-disas.c -4450e3d99478f08dea25a7a03553afdd gdb/mi/mi-parse.c -1c42390bec0a0d51bbd0533fc0d2d791 gdb/mi/mi-common.c -fe3680dd0e8abc66bcf359b0542c301f gdb/mi/mi-getopt.c -8154ae3e6c1c6804e06f9e927b0c1395 gdb/mi/mi-main.h -a6a2ff795082b0bcd51332e641314a9f gdb/mi/mi-cmds.h -a43a61061529d12405996b4a4c73ddb6 gdb/source-cache.c -c0d26596531a3f1cfc64ad2d7fdfaba3 gdb/hppa-bsd-tdep.c -087910c040bc999cb6114a33c953f603 gdb/ft32-tdep.h -aa9adb0b9623e0e236157ef550b43662 gdb/record-full.c -aa0a6e756d88ffde87f7fde6b143b292 gdb/configure.host -c546028abc488de571b9fbd37a85c231 gdb/s390-tdep.c -f993c1c682553cac8393f9f3347970a3 gdb/fbsd-nat.h -333bb261ffdfc53f3cf14187b020afc8 gdb/fbsd-tdep.c -85b1b3f5168bb4f62dc35dc2a3780b37 gdb/tramp-frame.c -2956dc832922431ee5c28934d365dbac gdb/d-exp.c -b8e59723960c85ea21e1597d76df5b92 gdb/prologue-value.c -f0ccba308cc50918412b13aa703b58ca gdb/rx-tdep.c -0995979778608fe7203391a85d13e743 gdb/copying.awk -3ab394c20e3d0395ca468c9a59823160 gdb/infrun.h -34116c4afa055d95ecadbb10ce09dfd2 gdb/copying.c -e0b8e22f9241c738b03ed7fd725ad848 gdb/bcache.c -bd3f3cb01a88cb63a49b712bf5364203 gdb/hppa-nbsd-tdep.c -0b02c5415aa3c0f9405a33f1800a73f0 gdb/value.c -90abd47de4f22fe7274bd619e21f491c gdb/ada-lex.c -8e5ba0f31a8ab828cc46a124f32c9e81 gdb/event-top.c -e6393261b81e5c0905777681ae911ab3 gdb/ada-lex.l -6b832516c7c2577baec4aa51c621374e gdb/sparc-nbsd-tdep.c -b2160c5bf2495c0ae49fa675cd49f649 gdb/ui-style.c -e361ab4bc64753001aba12be64a37972 gdb/cris-linux-tdep.c -36d551b0023c45451e4f66b30d78cdca gdb/sparc64-tdep.c -824ea1054c2e0351d91d5d892e0fb1a8 gdb/system-gdbinit/wrs-linux.py -c60ca03892912d9db2d6f6bd5e9e9f10 gdb/system-gdbinit/elinos.py -8b771640b8e9b97ad7ac238470ff02c2 gdb/mep-tdep.c -6883be3d19a75d0824f88b2a3bfc2da6 gdb/sparc-nat.c -3931589d356bf3b55f516400e54f6800 gdb/continuations.c -4b84643930237863f650fd3dd05f602e gdb/producer.h -ae16e4353919ba0bdfa0606198d8f9f3 gdb/avr-tdep.c -2b1c73609f7ee901416165bbf6ad4d92 gdb/charset.h -a48f65367fdfc59ed3fa8eb3b251a380 gdb/windows-nat.c -f03feb0d70e3104a2b991943570882ff gdb/dummy-frame.h -20375105f2b38dc57776f41efd3e69e3 gdb/aix-thread.c -874019931fccbd01d70633ec04f2f65a gdb/build-id.h -b96a8fc159d08f5bb8ae0496e176749d gdb/features/s390-gs-linux64.c -fd68f705a931822666f2fd06d9260610 gdb/features/s390-linux32v1.xml -aff12f1e88c7336fa1fd130e88c52bd7 gdb/features/threads.dtd -b96e39a61ca35bb3d66371571a0af5b1 gdb/features/aarch64-core.c -344651c03e3550054486c97346dbe87e gdb/features/number-regs.xsl -7bde9819e27f9e0ce640498624df82ac gdb/features/s390-linux64.xml -19d3356cc8675e321b08510e54dd129a gdb/features/tic6x-c6xp.c -0a3badabed7e258733913b270b50620c gdb/features/s390x-linux64.c -320892bbd4af6a124f32ef12b8d4e2e6 gdb/features/mips-dsp-linux.c -a24bec7fbd64cbe65c62f7325e010296 gdb/features/arm/arm-vfpv3.c -297603ba66974460cb3faa11817d1c55 gdb/features/arm/xscale-iwmmxt.c -e49d566ded397eba78ad2757850c2294 gdb/features/arm/arm-vfpv3.xml -aa61f8811f13b36af234fb580f33631f gdb/features/arm/arm-core.xml -ae44c2fe75439196b62f684cdeca23eb gdb/features/arm/arm-fpa.c -5b88e4b24f26891884266307cde2fa50 gdb/features/arm/arm-fpa.xml -6898328c432892f2cb22d180c648b846 gdb/features/arm/arm-m-profile-with-fpa.c -7779348f2c214b9f79315a097f0d6a07 gdb/features/arm/arm-m-profile.xml -3c31a83d0768082221ae70bc47c5d91d gdb/features/arm/xscale-iwmmxt.xml -9a97ff374c398ceeda4fc5420078355e gdb/features/arm/arm-vfpv2.xml -7118e5fd5b1dafb52cd2b1f84c8224b3 gdb/features/arm/arm-vfpv2.c -2adea7c414e917bbf64d77866b861b9f gdb/features/arm/arm-m-profile-with-fpa.xml -58754ff44897a326c0ba60dfdc71b6ab gdb/features/arm/arm-m-profile.c -8f74cd657b323772c3f9624b33c187b2 gdb/features/arm/arm-core.c -90c79d02149f06acd9bc66677dc150c8 gdb/features/mips-linux.xml -4866d6cdc7ea3e940516dc91a8a7e8a7 gdb/features/s390-core64.xml -19c536b0645e6037919c0ed181a8bae8 gdb/features/tic6x-c6xp.xml -7f858498e3b882463c1ca8c0ffcc73c6 gdb/features/gdbserver-regs.xsl -d28344362bdda35cc882c251ce93e4c2 gdb/features/nds32-fpu.xml -a365a510ccaef92e03c2933d754adc52 gdb/features/s390-gsbc.xml -568970986dd27fa0fca98f1a89f26fdb gdb/features/btrace-conf.dtd -dc3fce89de434534e8b46832ef6d5785 gdb/features/mips-linux.c -9a110b0e0eb776d9299b801fe3049542 gdb/features/mips-dsp.xml -0eb1f3649782d63f5fe9a33a18c11c24 gdb/features/library-list-svr4.dtd -64656303b595a4ef6cf4938b28a7fc78 gdb/features/aarch64-pauth.c -57efb6eed4e13d458014bfc7ebb3a469 gdb/features/s390x-vx-linux64.xml -be47fb970371482bfd0f1cf51b7903e4 gdb/features/nds32.xml -1a1cb34fc28b8bf3accbeb9281a7738b gdb/features/rx.xml -17c1e6963d6f0b0b529bfaf10bc77e8c gdb/features/s390-vx-linux64.xml -18389b61b6e007a456c8f722ddc22eef gdb/features/microblaze.xml -29f66fb1118634cc34f96b8dad5fecbc gdb/features/sparc/sparc32-cpu.xml -82e8f1b37d6e201b6650490b16eb6b33 gdb/features/sparc/sparc32-fpu.xml -689b843ed11adb364366da7c7a5772c1 gdb/features/sparc/sparc32-solaris.c -4f8d7f7ee74afb6642de798b94464939 gdb/features/sparc/sparc32-cp0.xml -6130f57e76ee152c5ebcebcd812d14ad gdb/features/sparc/sparc32-solaris.xml -84625ebe4e2f8032bc7090ce4e6f577b gdb/features/sparc/sparc64-fpu.xml -620458c6fbfaf4278c65f66cb9407a31 gdb/features/sparc/sparc64-solaris.xml -8b1fb0e674a36bc3fbbffaab65c9a690 gdb/features/sparc/sparc64-solaris.c -292ebcce2f79cdfa594626b7e5fa03cc gdb/features/sparc/sparc64-cpu.xml -57ccc5b1ede8c06d924dd0af8ebedb37 gdb/features/sparc/sparc64-cp0.xml -69701d0a7c97718d55272ce8c4ed07e3 gdb/features/microblaze-with-stack-protect.c -fed5bdefe0ae7fb6ee592f1e8a7e8f2b gdb/features/tic6x-c62x-linux.xml -9689ee51a13b0198d177944412cdc7fd gdb/features/tic6x-core.c -fb912868ba87180f768351391f200327 gdb/features/s390x-tevx-linux64.xml -69e796b90bd9fa05f1f1e25110c34314 gdb/features/or1k.xml -58ea4c6bf30dbffa65ec46708d86e628 gdb/features/gdb-target.dtd -9ea971cd3d5a5c6c3fe2c63aadb12c0e gdb/features/mips-dsp-linux.xml -f73ac267cdc715523064d9cc316a7906 gdb/features/nds32-system.xml -9d1830a2c3e42200ab574d55f1ef01fc gdb/features/s390-tevx-linux64.xml -14e1401897a6a68135718edfc9b902d4 gdb/features/s390-linux64.c -7f786e14ab037194abcc15a81b839212 gdb/features/arc-v2.c -38348967527ee69ba6c1f8475fba0cb5 gdb/features/microblaze-stack-protect.xml -8c34abacd973013d5ea76de6387f85c6 gdb/features/aarch64-pauth.xml -5c1633494ac7a7b83e544614f600cf07 gdb/features/s390x-gs-linux64.c -dbfba528e5f98a85637b05a079afd7f0 gdb/features/s390-te-linux64.xml -d204c4795ade93f0201b6250e11fa1d8 gdb/features/library-list.dtd -2ceff6f88a78940f15fb551e692a71d2 gdb/features/aarch64-core.xml -b08adbfdada01831a8fda096c37e0209 gdb/features/s390-linux64v2.xml -f25f22c310f59d182314cad569df02c1 gdb/features/s390-linux32v2.c -78e4507a4f2c403e86cd9b180b41a77a gdb/features/mips64-cp0.xml -737482bbe0b30a4a0c7b30794b7b4923 gdb/features/arc-v2.xml -04303ea528fcc57e92172bdffb54db2f gdb/features/mips64-linux.c -2faa4557586c6ff6015ca31e693b9da5 gdb/features/m68k-core.xml -9614d6c84ce55daf0fe41dcd8627bde1 gdb/features/s390-vx.xml -32f056f50dd9dbc73de26390f9d8927c gdb/features/s390-core32.xml -2793f7a3322decc42c09d1f3e037aff6 gdb/features/s390x-linux64v2.xml -8086c125c276185c153a06688ccd71f0 gdb/features/nds32.c -489546506823db9e7da861401079193c gdb/features/rs6000/powerpc-860.c -966d5df5526968a1c3d39beabf3e2aad gdb/features/rs6000/powerpc-altivec32.c -83e81a9fda1babdd1b0cb586e1bd55de gdb/features/rs6000/powerpc-isa207-vsx64l.c -fed62c711812b36b8b06e090e897a66b gdb/features/rs6000/power-vsx.xml -084a6f955885616a0520e8cdd9eec298 gdb/features/rs6000/powerpc-altivec64l.xml -813a8a1f643d666a01450bee85fa5290 gdb/features/rs6000/power-core.xml -26129169a2006f886fd91b9523654441 gdb/features/rs6000/power-htm-dscr.xml -2987cce8e7562a62c00d9cce12f9505f gdb/features/rs6000/rs6000.xml -64d9616bbc17826a0240d4846fe431d1 gdb/features/rs6000/power-htm-fpu.xml -4f39c0cf8aa37f3201cc55a106b0127e gdb/features/rs6000/power-htm-spr.xml -7df710e0b4e82be6b07beaecce077505 gdb/features/rs6000/power-fpu-isa205.xml -a121263e41ae69b99095fef00495d233 gdb/features/rs6000/powerpc-altivec64l.c -d1442de3ddc3779df1c3d934d121ca19 gdb/features/rs6000/powerpc-isa207-htm-vsx64l.c -a3aa570d8f82b8aa965c569a9d0471db gdb/features/rs6000/powerpc-64l.c -74677c3027fbd89aea1c32060ada5cf1 gdb/features/rs6000/powerpc-isa205-vsx32l.c -ae78f68b697ba8edf89a05d52df9f36f gdb/features/rs6000/powerpc-403gc.xml -88ba1cbc5145a838292ad33573091abc gdb/features/rs6000/powerpc-isa205-ppr-dscr-vsx64l.xml -7ef5e0ad007c62548c651ffe8d100568 gdb/features/rs6000/powerpc-604.c -0f8fc527a93c3733755b63a2764fc844 gdb/features/rs6000/powerpc-isa205-altivec64l.c -c6ba7764169c57bc238b7db06965068a gdb/features/rs6000/powerpc-e500l.xml -0220c552ae6978670be54083ac4a9d76 gdb/features/rs6000/powerpc-vsx64l.xml -68dbe966ca524429fc45f596343004e0 gdb/features/rs6000/powerpc-isa207-htm-vsx64l.xml -f33726fe2d85b147c1628a7882b17678 gdb/features/rs6000/power-htm-vsx.xml -ab0f691f875592e9e738337ff1142a92 gdb/features/rs6000/power-linux.xml -a267357188d9ecf8aba1451567b61d98 gdb/features/rs6000/powerpc-isa207-htm-vsx32l.c -71c4ae000cd6276fd1ea47fa5db29599 gdb/features/rs6000/powerpc-405.c -7d9311d9efbd5eb398addc4bf2669ee6 gdb/features/rs6000/power64-htm-core.xml -d1887fba14876cca7806c7b6f2545938 gdb/features/rs6000/powerpc-isa205-vsx32l.xml -d62912ef67f0261543ea0f9f02adfd01 gdb/features/rs6000/power-htm-altivec.xml -4bc7440c4cd9f3d3b38291ff1a3dffe5 gdb/features/rs6000/powerpc-64.xml -fd5cfcb0f8da4e9a916d8840c82eb76a gdb/features/rs6000/powerpc-860.xml -1346dfdf5ecbaf8f647ad5f180fc0322 gdb/features/rs6000/powerpc-vsx64l.c -d8e71a6033ca94425b06e54ad0ba2b4c gdb/features/rs6000/power-htm-core.xml -fc0cac1c1f31469ebd3de7078fc5911f gdb/features/rs6000/powerpc-601.xml -9ca55da0d223e5f0fe96f8bba2ecb713 gdb/features/rs6000/powerpc-32l.c -4070b673172a2d2891755c6e6fbfc22b gdb/features/rs6000/power-fpu.xml -ffe396898dcf30b07e7b257d368ab459 gdb/features/rs6000/powerpc-750.c -f3e568d2039f3653b20d7a376669a614 gdb/features/rs6000/powerpc-isa205-vsx64l.xml -5a7b6622b1e531452b16776171ade1b7 gdb/features/rs6000/powerpc-isa207-vsx32l.c -bd6e3d285a7ff47662cb057b218411d2 gdb/features/rs6000/powerpc-505.c -53f4baf7729bada56f15c4ca79e393c0 gdb/features/rs6000/power64-linux.xml -1a829dd68f0dc3ba74c26109e2bcb1d6 gdb/features/rs6000/power-ppr.xml -ae569995ddaf7dd24677a54ab4fc748e gdb/features/rs6000/powerpc-isa205-32l.xml -356354bfd2f92e2cb90521bfc75e7ecb gdb/features/rs6000/powerpc-e500.c -a34d593340026b64ad4e3645bfd6480c gdb/features/rs6000/powerpc-7400.xml -6e787dce9205e4b3d07063caf1766e65 gdb/features/rs6000/power64-core.xml -d0e8a879b6a3728d97a68fd1a6b8fb0c gdb/features/rs6000/power-spe.xml -5f9d0e33ea7efed378966e97cc59d98d gdb/features/rs6000/powerpc-isa205-ppr-dscr-vsx32l.xml -a96e57a5dc0c50be9135b698ecd54dff gdb/features/rs6000/powerpc-vsx32l.xml -25c02285295a72821f41f5c67793e3a5 gdb/features/rs6000/powerpc-isa205-64l.xml -8f0333b4c07a2caa161fcd0c081e9206 gdb/features/rs6000/powerpc-403gc.c -2ccecc7c0b53de13fc3fc4574de01d9d gdb/features/rs6000/power-htm-tar.xml -d988d5eb31f4b1ac8e310df3ae1b5624 gdb/features/rs6000/powerpc-403.xml -0ba581781150c25e0770506f364a3eb7 gdb/features/rs6000/powerpc-e500l.c -2d5a8b87520f508ff51e8cb2e3193c2e gdb/features/rs6000/powerpc-32l.xml -442f467b648ab49cc0676864bfdc0d5c gdb/features/rs6000/power-altivec.xml -787b6cf01284855d66739859f0da683a gdb/features/rs6000/power-ebb.xml -527184503e3102ee93f8d6c93c2121fb gdb/features/rs6000/powerpc-603.c -dd2e3e1f5d0c677d209f24f2b21a4f3a gdb/features/rs6000/power-linux-pmu.xml -9203f1ea7d43f65e52f5ed59e671410f gdb/features/rs6000/powerpc-7400.c -cd3794c7b6bb2c297ea64b986de83a08 gdb/features/rs6000/powerpc-vsx64.xml -3f7b22919291d5c134c220f0359769b4 gdb/features/rs6000/powerpc-vsx32.c -9c18fa71123e59b6d46f2168df8805dc gdb/features/rs6000/powerpc-isa205-ppr-dscr-vsx32l.c -83bdd261deca4fa6ce618cf22dea006f gdb/features/rs6000/powerpc-isa205-altivec64l.xml -12ec213a74911acef060389705631e35 gdb/features/rs6000/power-tar.xml -78d0a5031d5e7fe18151395a6eb8838f gdb/features/rs6000/powerpc-isa205-vsx64l.c -45142ab810c80cb2a81f89e9548272a2 gdb/features/rs6000/powerpc-602.xml -8b7c9217ba5ad89ba6fbf1a0449f214b gdb/features/rs6000/powerpc-405.xml -d920a4d3406db08de3dda5a54854abd0 gdb/features/rs6000/power-htm-ppr.xml -a2b34800ebf0f48aad17e5eb6374d677 gdb/features/rs6000/powerpc-isa207-vsx32l.xml -d625e7cf0678695fae48908ef9cbcd60 gdb/features/rs6000/powerpc-e500.xml -1ea3630e8c53f9fc90d3095e6b2295fe gdb/features/rs6000/powerpc-isa207-vsx64l.xml -76338fb963132e0ad400d4392f5ca5a3 gdb/features/rs6000/powerpc-603.xml -18d9026573f79e14e5b727d039665498 gdb/features/rs6000/powerpc-isa205-64l.c -66fcfacf1ac1141e3a6a685622e022e5 gdb/features/rs6000/powerpc-isa207-htm-vsx32l.xml -eca32b07238bf5560bf7a4b0259a3677 gdb/features/rs6000/powerpc-505.xml -5eb4b85d8597a982f401aca5fa491468 gdb/features/rs6000/powerpc-vsx32l.c -757d11b5a0370cc81cc3469fdc8077a0 gdb/features/rs6000/powerpc-750.xml -579925444d127581596029883f258aa9 gdb/features/rs6000/powerpc-64l.xml -ce92d5b3a3c504017c095c8cf8d7d658 gdb/features/rs6000/powerpc-altivec32l.c -3621fc37f620613eb96a55a639f1042a gdb/features/rs6000/powerpc-64.c -d2c5ea8707d6e8a8aad47cdc24952ca0 gdb/features/rs6000/powerpc-601.c -8def17483de76b071162d222ff2e1f67 gdb/features/rs6000/powerpc-altivec64.xml -c579a6af8a923b13008d5b7ac45f47a8 gdb/features/rs6000/powerpc-isa205-altivec32l.xml -c876953dad8ef7965011f05bc0d3e5ef gdb/features/rs6000/powerpc-32.xml -2a6c192d0c833c615bd38b16b779ec29 gdb/features/rs6000/powerpc-602.c -41bedbaeb114aac9f89df1e221335a02 gdb/features/rs6000/powerpc-isa205-altivec32l.c -a2e72422b410fdd978c3d9b71cce2335 gdb/features/rs6000/rs6000.c -13dcb5a326a697546bd85b42ee06665e gdb/features/rs6000/powerpc-altivec32.xml -5e80fc9aeb15e109f35c372beeb5089a gdb/features/rs6000/power-oea.xml -fd5408b63b9dfcf28cec25cff29615fd gdb/features/rs6000/powerpc-altivec64.c -4378a745a706eee69e4848ccb42b1f1d gdb/features/rs6000/powerpc-32.c -837f26b35be4ff148223685646c9a443 gdb/features/rs6000/powerpc-403.c -e7568b1a1dcd28a65ec560ab365112f9 gdb/features/rs6000/power-dscr.xml -9c8258a8d98ee1e050af6f090e516ed0 gdb/features/rs6000/powerpc-604.xml -6cc3e17574a36a1b1646246e87d665e6 gdb/features/rs6000/powerpc-isa205-ppr-dscr-vsx64l.c -5af98add859bce1730333217a50f3d71 gdb/features/rs6000/powerpc-vsx32.xml -e7fcfe186aad04edb46a155897d694ac gdb/features/rs6000/powerpc-isa205-32l.c -96cd445a7a5290975670d909913f61bc gdb/features/rs6000/powerpc-vsx64.c -6b193d98c3654dc854d799a413851eb4 gdb/features/rs6000/powerpc-altivec32l.xml -26964e4fb479e10da4f14e91414a786a gdb/features/btrace.dtd -48da5623a97411d159346f5c4d9842dc gdb/features/s390-tdb.xml -764f8469ec34c9b310911436fb7f9159 gdb/features/microblaze-with-stack-protect.xml -9adab728d3b6d7f334f08e4f4b5eb2fb gdb/features/mips-fpu.xml -5abc13da94d80c5ed2076a942712880a gdb/features/arc-arcompact.c -f2bf405f94ac6458f4f50b745ee5ee4a gdb/features/mips64-dsp.xml -887015b6caff7ea58aea4d013fbe613c gdb/features/tic6x-gp.xml -17f495407839ac27dfa94d855ba68b74 gdb/features/traceframe-info.dtd -e5914f92da617c648e2b571e04548f2e gdb/features/aarch64-sve.c -ec7a33e08ee16d8d2246dde4a474b131 gdb/features/nios2-cpu.xml -dacbed64e8064a5b4ab20f9b0654bd42 gdb/features/microblaze-core.xml -436bec46fb250942c74fce21d9c891de gdb/features/s390x-gs-linux64.xml -584b2140cb3a6d21d216ae9144426dc1 gdb/features/microblaze.c -6a8d3ca5f52f6b5243847acae42b4fae gdb/features/nios2-linux.xml -77ede633cabcc6622ce298a6834d8ddc gdb/features/tic6x-c64x-linux.xml -8a1b2230f454feaf5d88efe023af06f6 gdb/features/mips64-linux.xml -397a0c9fae9a6e84f5c43fe665ec0033 gdb/features/rx.c -cc1ba7e51a2b6b3edf2d8d6c356e4ad0 gdb/features/or1k.c -a7e8263e26ff0cba5ed305bc4343bea7 gdb/features/mips-cpu.xml -33ed15958757805e9c9e07b42e6862bd gdb/features/s390x-tevx-linux64.c -7d6af6cbeff336b33981b82e94ad1275 gdb/features/tic6x-c64xp-linux.xml -09ec6188b7ea515d7c52bdc709e00a11 gdb/features/s390x-linux64v1.xml -6e767f37455021cdfdec4d61da40fb1b gdb/features/s390x-linux64v1.c -42990d7b0e69d508bdbb0d82c0cc90cb gdb/features/s390-linux64v1.xml -23c2c7604e2825d1a1ac704ff0fea80a gdb/features/s390-acr.xml -a5c83a69c5d5cb6d672e2447fdee59be gdb/features/nios2.c -b03a5698e9630f8dbb4c520d6b59fc8b gdb/features/s390-fpr.xml -6491d741442fa77a1414ebf9416c0eb4 gdb/features/i386/32bit-avx.xml -21caf1d6c3ce7bb9f93067c2e63c8f57 gdb/features/i386/32bit-mpx.xml -59e63c76fe15cb671396e4ac5fbad790 gdb/features/i386/64bit-core.c -2f4fa821b1a34f2f6c7641761ec235a2 gdb/features/i386/64bit-linux.xml -9ee9cce3550d067aa3cd8d81bb94ebf5 gdb/features/i386/64bit-sse.c -d947e5bf1cb92ac4deb8ca09b88ab51a gdb/features/i386/32bit-sse.xml -22b5c41f11c0ca29bbab0c59fcafff2d gdb/features/i386/32bit-sse.c -9efe97b276973adf5c1b936727794d18 gdb/features/i386/64bit-pkeys.xml -586dfad4d8b48fc1e69ea2dcb1265ccd gdb/features/i386/32bit-avx512.xml -d5f0a5e0f10431fc3e934a738c55f7ce gdb/features/i386/32bit-avx512.c -7a521b6961ac9f2176ec50849da82f5d gdb/features/i386/32bit-core.c -11464ff63123b82950da466b4c5a999d gdb/features/i386/64bit-mpx.c -95168f99d5afbf088a63c9bd226d1c88 gdb/features/i386/x32-core.xml -acf56893b309488731f3058feebe5347 gdb/features/i386/32bit-avx.c -0a1d9e2ff2573f46c416bd9a278b471e gdb/features/i386/32bit-linux.xml -b77fe1441cf4552f3a0c0ce4f3ec7510 gdb/features/i386/64bit-mpx.xml -6cc953076b1436ff24f4875021b10062 gdb/features/i386/32bit-segments.xml -95bac6ca35d65618b67c84cb8798179f gdb/features/i386/64bit-avx.xml -954f2808c1b91716b793b406e3ea88f2 gdb/features/i386/64bit-avx512.xml -a15ad1224db032656310162c68725c09 gdb/features/i386/32bit-core.xml -2eafa3a7ff9da69441c0cacb87dde62c gdb/features/i386/64bit-avx512.c -1d85792bd2c6da8e3f6a7f9ba42021ca gdb/features/i386/32bit-linux.c -391d95f17fe41c4394cfb5a70e639c04 gdb/features/i386/32bit-mpx.c -e9f6db50d7838179dff4886f4b9b40ff gdb/features/i386/64bit-sse.xml -c24e1c8c8185c472082babd7db7d7b72 gdb/features/i386/32bit-segments.c -59c5cfa5f89c27c1c9e3f2149143cf5a gdb/features/i386/64bit-segments.c -468acec086b4056081fa6c9f004baada gdb/features/i386/64bit-avx.c -97305e55427d73a585958c584d0d896d gdb/features/i386/64bit-core.xml -a022a813922fda10a80983f5a4cdb0ee gdb/features/i386/64bit-pkeys.c -60d35d4ff2ca24aa3e6b4264ad695f0c gdb/features/i386/x32-core.c -1cd0e1fa58819dd8e9e7e0b907396ad7 gdb/features/i386/32bit-pkeys.c -b37258a94747c0f93bde4febb562e2ed gdb/features/i386/64bit-segments.xml -9efe97b276973adf5c1b936727794d18 gdb/features/i386/32bit-pkeys.xml -2c784e6a964e1f771ce974b99b024294 gdb/features/i386/64bit-linux.c -62ec120688ea008f3e9837ef8b3360d6 gdb/features/s390-vx-linux64.c -90dfff393934e84838701c31cfd08782 gdb/features/s390x-te-linux64.c -63d39c45eef71aea18398946d1d6fe9b gdb/features/s390x-linux64.xml -db97f7667232bf43b1a186a7877e0459 gdb/features/s390x-te-linux64.xml -7c0b2a5ac98e039cd9ead99846c7e210 gdb/features/mips64-fpu.xml -75bcd4b388d85c69ed92487f7405b646 gdb/features/riscv/64bit-fpu.c -69190be71c7bfd24ffb408c2cd89df2e gdb/features/riscv/64bit-cpu.c -7aa98a40d977a6301440011cdc41deb6 gdb/features/riscv/32bit-cpu.xml -653ab81e54d3a09547c07a68830f7599 gdb/features/riscv/rebuild-csr-xml.sh -a37e4cf1f23ca203946d55a86dd1ce4c gdb/features/riscv/32bit-cpu.c -c27785ce49b509f59c71de54399eb6ad gdb/features/riscv/64bit-fpu.xml -cec2619b3c2417192ab8b3787173e30e gdb/features/riscv/64bit-csr.c -8a8dfcce88e5c39027e313c8a1f02c2a gdb/features/riscv/32bit-fpu.xml -656d8ba147bf5818a55fb5dd97cb7e3c gdb/features/riscv/64bit-csr.xml -1169ff86809f7cd49ed8c1d05221a2ed gdb/features/riscv/32bit-fpu.c -2fb0b5b407626d7d8da51d697131fa71 gdb/features/riscv/64bit-cpu.xml -b762d4b32680a2c13a81f355e690f35c gdb/features/riscv/32bit-csr.c -c30454e62bf6ec79893b560d4bc40af8 gdb/features/riscv/32bit-csr.xml -ac0f32ad7e7965a5ff90ba87f8469bd7 gdb/features/s390-te-linux64.c -1c1225eafa5c43e5d3d875d5da90052e gdb/features/arc-arcompact.xml -69febcba8a169f98cdcf218a5c76d6b9 gdb/features/s390x-vx-linux64.c -f1a24c91ddff1d290ccc2ad940c5ff55 gdb/features/s390-tevx-linux64.c -08a70556576a8b634eae39f73843c7f6 gdb/features/library-list-aix.dtd -84c3314740b4d529b0e61cefb0e594cb gdb/features/mips64-dsp-linux.c -a760c461ac94095a364b6edb5d8d778b gdb/features/s390-gs-linux64.xml -e8661aae4aaf05f5216c75526cb50822 gdb/features/s390-linux32.c -f7c2bb1856d17c7a56967e86716887f3 gdb/features/xinclude.dtd -aa4d21a9df8192a059980f5f2867fa65 gdb/features/feature_to_c.sh -cd5dfc6e0476f1bf711801ea22e32247 gdb/features/tic6x-core.xml -bdb8bffea32bdce60d17a5f59a8310fc gdb/features/nds32-core.xml -df5195daa32c7b4fa5ca9ec714a59519 gdb/features/mips64-cpu.xml -8675e544f595132bef3ef1aee76fcea8 gdb/features/s390-linux32v1.c -8246e1241b0386ecacf22a2a3cc31820 gdb/features/or1k-core.xml -d65fa4d514ca967d8224e50f0e34b48d gdb/features/Makefile -88545a160cd2d37a77ebaa1cdb28b41b gdb/features/aarch64-fpu.c -f63938b953f120a73bb787e7b78d03c4 gdb/features/s390-linux32v2.xml -e93fb71b675055324eb5188cba6dc506 gdb/features/s390-linux64v1.c -a74f670e27b892b83c13054809c82473 gdb/features/sort-regs.xsl -d4a41fd60fc618c674109f917645cec1 gdb/features/mips-cp0.xml -0ebbdc5c65d018cabea930d28ab4eb6c gdb/features/s390-linux64v2.c -6f22d38f1220abc571654dabe19d8850 gdb/features/mips64-dsp-linux.xml -f94cc1a666b13c94340a0db60fd9c259 gdb/features/nios2.xml -22e8c1995c9bbe363eef485c6676b615 gdb/features/s390x-linux64v2.c -646d62cbc4cc7a2c13f145446583cc60 gdb/features/s390x-core64.xml -ec02f61f2b8733ebe18f5afc5df5c744 gdb/features/aarch64-fpu.xml -a830190bce7a8c5db7e2603f019eea6e gdb/features/tic6x-gp.c -3ff4b003011a32c976e998a5685463cd gdb/features/osdata.dtd -480638aa407262dd5b2e8728e8be9f94 gdb/features/s390-gs.xml -7cb6342dee6ba6b6b18e2121d701fc8c gdb/features/s390-linux32.xml -988f8eb795b58be61d09c90356dde6e2 gdb/x86-bsd-nat.h -ba5ea42676b2600733aae5b2fa229773 gdb/amd64-bsd-nat.c -eacc258c5a9f7a3995dfe6b17a4587ab gdb/proc-service.list -501d9f33f3e34376aea093de30f8ffb2 gdb/c-exp.c -ac3ef53d0babe23dab59d7b90413f919 gdb/ada-exp.y -4471553fd2a2d3a048d72ca6243f2880 gdb/user-regs.c -6b618bb48d5f134af32ed1596750183f gdb/linux-record.h -40c96d690dbb71c09491aecf04b3a8c0 gdb/linux-tdep.h -14e0e8e1d7185eb1a624abe6b3f71def gdb/ppc-linux-tdep.c -225212d73eb21285fdd540d822fc1afe gdb/procfs.c -d46674423419ff90eea3e5995276aef2 gdb/windows-tdep.h -bc907b173bce51f79db45e614b5099f2 gdb/sh-tdep.h -d87f8f330dda7f736350ea5dcff5b709 gdb/ChangeLog-2006 -642456efd87621529f26497beb505fca gdb/infcall.c -f03d8bcc3d9a7b550e2005aa50eb0a80 gdb/event-top.h -c97a37e6d1031eda279a3be3161a8fb6 gdb/riscv-linux-nat.c -71dffa6ca5d110128a0eda957a0460e9 gdb/score-tdep.h -114ca227236e29e87bf023cbdec994d5 gdb/objfiles.h -a6be0401a178f1870303d510bad5d273 gdb/s390-linux-tdep.h -695314fdd81787b828c240a9c7256046 gdb/ChangeLog-2018 -44cfd3391eeeb97ed1d41d79212e7db0 gdb/trad-frame.c -d4cfc737769f1ebae2f67ad96abea80a gdb/buildsym-legacy.h -f07fdb55b11fef38a8c541e23e391b0f gdb/go-lang.h -30ee09cb0e3cc5566ebef3d0548b783a gdb/breakpoint.c -f1f78654813ca5e66dbb8d8e4d8e0dca gdb/record-full.h -cb7d26ea5dea4f3f70a90ea2dbf20ce5 gdb/go-lang.c -4f914057273ba87328f1a5f95c3378e0 gdb/ada-varobj.c -7e7654cd475d3e53c3e37a8f2745489d gdb/riscv-fbsd-nat.c -41b634a7e631ae8ad704ef7d3e8c71d8 gdb/vax-tdep.h -04c55889c358f6ac6e8d5a486212d984 gdb/arm-obsd-tdep.c -8e15881453360c22173d5d5f928b1119 gdb/ppc-nbsd-nat.c -a1f0e27312389fc41561fa2cac6fa395 gdb/sparc64-nat.c -096355665f24dbd15b92932821b78302 gdb/i386-darwin-nat.c -1f4a0217ff39545b2561cb7da4f62968 gdb/machoread.c -9e6d311d420f16456f3af831112ba596 gdb/corelow.c -3805d4f72c8bf120ff12b076c503bbb8 gdb/m68k-bsd-nat.c -231a8a943a466fcb9b68fc7d08c88392 gdb/varobj.h -6a60217a6c653b718254606085d5d072 gdb/alpha-tdep.c -062443ae9a103f88a1fd4af1ff03d408 gdb/skip.c -6f1a7236c88f2c448a792c2924ffd75b gdb/tic6x-linux-tdep.c -24837ab3d9811ce6512e975c67d97a78 gdb/probe.h -8eef559d5ea63af5fa47c7efcd64b509 gdb/hppa-linux-nat.c -fad362179eab58cec8a81b960ecb81ac gdb/riscv-tdep.c -f5987b9ba9adf6c7570daaeca382e950 gdb/varobj-iter.h -12ce2f68b518ba8b7bc008625e7ee3ac gdb/parser-defs.h -ca9d1d2617f1bf228bb9302dcfc554c6 gdb/mips-nbsd-tdep.h -4e5d1e8ddf42ee36fd5876a39d3ea407 gdb/po/gdb.pot -1851bff0653201a488dcae18dde7efad gdb/po/gdbtext -6d3d4b9a76e7a41bef4c65ccf9adedca gdb/hppa-bsd-tdep.h -0e7880823ac2572d37ba3a54683501c4 gdb/copyright.py -5e34898eefd5fa45c20fc7fb9c9a1641 gdb/vax-nbsd-tdep.c -bc3a9cb15ad86ebb477d6c06e27ae596 gdb/i386-sol2-tdep.c -3056922a497e52e045f8a4c223591937 gdb/gdbarch.h -057a521578c93218ec9e52037d762d40 gdb/cp-name-parser.y -870b2181d4dd11930c2b47ff9f88e5d6 gdb/arm-fbsd-nat.c -9cf045341348b5747a0b9bc51fe5b4be gdb/mem-break.c -a43e4a79cd3363643158bed911e763e3 gdb/proc-why.c -d6d70f928edd9aac6892e37e7d06642f gdb/memory-map.h -31539ce7605ecb623742ea046187523f gdb/osdata.h -38fcf361fdeb6145b2de7eae03cb94a3 gdb/dwarf2loc.c -b6457d1b6e1cae83d438785f6016a440 gdb/selftest-arch.c -c5b4511f94a488349fd0dbf104c741d3 gdb/m68k-tdep.c -030a46be5cae5abab805a460300fdbae gdb/gdb_curses.h -424d2d68c75b09e3b47aa34f0532be87 gdb/macrotab.c -c2ec4858126128483419949fdd8ac646 gdb/h8300-tdep.c -4aadadf84e79b7ea09cb353d69919716 gdb/i387-tdep.c -36876085dcb82743e2d206a5275c7cbf gdb/namespace.c -adaed71281da9146d911b5cbe728706d gdb/completer.h -c627e75a110c56f32fae7ddd3065a34f gdb/reggroups.c -f46ae150916a43118747f99d90c47fce gdb/exec.h -5e194cffb452b0bbd357d92025a50621 gdb/i386-nbsd-nat.c -fdd7055e19598c8a289dc4e5666c46c3 gdb/progspace.c -1e8c3e851c3ee60048d282ec202a715d gdb/symtab.h -42b9f7c51223e595f66c2210064be682 gdb/ChangeLog-1990 -6b450fb76346539d62977813cbfdae91 gdb/dwarf2loc.h -a69e3fb02e01f4226d0458a30c45e4b8 gdb/dwarf2-frame.c -84a6a277fd2a5fbbadbb3b4c7b230dbe gdb/solib-svr4.c -57bd0bcd895a786c16013220ce38d38f gdb/sanitize.m4 -98e1bd2b523305bc424d300224f0a5f3 gdb/sol-thread.c -e075b960f1e3ad889489dded13014fe8 gdb/break-catch-throw.c -47e4a53bc5a5456d79e9b36cfe80b893 gdb/configure.nat -5415e93795e13b89dea7f58dd44a2dcf gdb/alpha-bsd-tdep.h -43604abb02671605cdbfb71940c60e79 gdb/sparc-linux-tdep.c -584eb6fcfd1bb4da8a2cc18b42043c3a gdb/break-catch-sig.c -5d5dafaa4af7ed17675991affe812b02 gdb/stap-probe.c -ea609eef59b5f6ecf74a5599a8efe21b gdb/i386-tdep.h -a8dd3cbca9f5d917bf45bf05c7350fe8 gdb/main.h -6fb2f80f433b670358cbc150dc08a13d gdb/hppa-tdep.c -5f0b86ec813321eede6e9fa4c3c330bd gdb/agent.c -c79637be19d1f30b8a2db0b06f5e5a57 gdb/dummy-frame.c -540ce01c94062d3a58587d896cc24d43 gdb/s390-linux-tdep.c -c5bc74be957407e63eb1f8807eff85dc gdb/ada-lang.h -88b9a0e59f6b3dec9bc94dea6bca601a gdb/stap-probe.h -012642c606fa992b39d63b9160db4ff4 gdb/ada-typeprint.c -1c807553e8d2629af5c1fad184144342 gdb/xtensa-xtregs.c -6dc6467fb4db6ce238093c5849e8542d gdb/microblaze-linux-tdep.c -37b891f6558028d6c81b1402d77be7a3 gdb/ada-exp.c -e5359c7a030959c1daac7ceb3021d899 gdb/sparc64-nbsd-tdep.c -a6680d9bce6c184886a4d80ddfbc4395 gdb/sparc-obsd-tdep.c -014e404639964f6536157f66c652bf6e gdb/maint.h -a8ae2882bb9e56b2844268eddcf94fa0 gdb/inline-frame.h -96193f99a9c6e9cc2fdce863113735ef gdb/ppc-obsd-tdep.c -9542a686e4d75056fa628068f9d9d33a gdb/i386-linux-tdep.h -d6fa06eb365baa1d4afccb8eba2085f4 gdb/target-delegates.c -d77fae758de8eb15204220f67ad5c070 gdb/gcore.h -57c0caca580dda318310ccb6e1837c69 gdb/annotate.c -ef45ad980c90881c0662359aa4dd7150 gdb/ppc-nbsd-tdep.c -f9c6d5940576cd3520d98c7390621924 gdb/or1k-linux-tdep.c -dc718092ae0ddb6f8353d6c1fa85cd01 gdb/mn10300-linux-tdep.c -6a2013c7b4c49b2165fa2a7e25ebf405 gdb/x86-nat.c -191f63ebb2d5aff9f883034531d0d32a gdb/ui-style.h -a2d46ac2d97669b3ff7abc3f11a0035a gdb/amd64-tdep.c -e183c7bb8d2e42f6371485e28b159654 gdb/charset.c -cf7c36f7568be08b50440329e515dfbe gdb/regcache.c -3d08473e29e5cd0673c84acc81ca055f gdb/microblaze-tdep.c -feae7566d74536d7287dda309f94931a gdb/ravenscar-thread.c -a5b8e65d3ac76ed700e9fd03e761376b gdb/sparc64-obsd-tdep.c -ca5bd88177b2b151efff29bb4384c86e gdb/ia64-linux-tdep.c -91b8f46c563b7f2c707497c1631620b2 gdb/go-typeprint.c -52839a58d39a33ec16e4363be65bc18e gdb/objfile-flags.h -a81acecccbed77d398ad3fc71f9c9d3e gdb/aarch64-fbsd-tdep.h -ff845b926f53faf328353563198e9489 gdb/source.h -329d27b18d2bc935faf146442b24a74c gdb/remote-notif.h -f283433ecc9ee9bef053f57f06ac9e08 gdb/typeprint.c -eed64010283df4f9d5c245cd7336d1b9 gdb/nds32-tdep.c -fd601b5312a3f82c5f513f8788d83e9e gdb/ChangeLog-2013 -960c03dfcce0fb2c64288855cec6f035 gdb/btrace.c -b8c3649c843df418b58ef5a6327dbddc gdb/inf-child.h -6e0140b91c63cda9ecb87c40db5e77ae gdb/exceptions.c -150bd2de8664db4374c4e03e1703ad58 gdb/remote-notif.c -f8a2711e4670982e3b8d33076691b691 gdb/xtensa-tdep.h -157c5cf74c09cf18b8e95d516e3cd8a8 gdb/macroexp.c -47dcdce69cd50df06784338cf23a54fa gdb/xtensa-linux-tdep.c -b17d2991fcd7ffd46bad538666371fac gdb/linux-nat-trad.h -d3a2f77b4a9c1f05895fea0951eede05 gdb/jit.h -6af0676670d9793567c926d0f973ce48 gdb/amd64-windows-tdep.c -ca85a44c743264ead57bd8ca7c1cb8a8 gdb/procfs.h +14a839613de70a2bee9bbae84362da83 gdb/mips-nbsd-tdep.h +a2aa53e569f6958c29f0b44b217cd294 gdb/ada-exp.y +72a13dfc330bda7368b1de3cf1246096 gdb/arm-linux-tdep.h +b7e1e26737094d624b46c5ebdf9fe586 gdb/ppc-nbsd-tdep.c +f1d9eb762afc5da46cb1d60e072f9550 gdb/regset.h +b835d3f461bcccec6885cc792353b96c gdb/solib-darwin.c +1ce37cf5f7527f76f279a2f995520a7c gdb/valarith.c +291e968445bbd02809b6fdf3e861506d gdb/xtensa-linux-tdep.c +2af179696c83ee2d2b81e03a311e5c1a gdb/parser-defs.h +39e4337867ebbe545ad1f52b21f101cd gdb/inferior.h +31bea1b8d3dc6553f027a28a26f3dfdb gdb/target-connection.c +068b67516ff4b1e976e5497972d1f5d1 gdb/go-typeprint.c +b871ebbca907e1d20c6c493f19ad7df0 gdb/skip.c +a8d280c4574f3aa4b000c7f0d8e8fafb gdb/ppc-tdep.h +edc227c1ad6f7a88f8f3fb1993113d67 gdb/sanitize.m4 +e1dac13a9dc5b2c61b149fc9321fc17d gdb/riscv-linux-tdep.c +1f68d3272b33b380724fe731f1716f7b gdb/ChangeLog-3.x +d43a0ba68f1707f7bf14dea8d2ede619 gdb/tilegx-linux-tdep.c +04ee4b0aec7e79f70b47800a91000be6 gdb/iq2000-tdep.c +e595f1f9f5d406bcafd2be136c7fb8df gdb/gdbarch.h +a91d420011e98ab27cabe428b634647e gdb/vax-nbsd-tdep.c +64a9b1a73e09f842235f460169590717 gdb/sparc-sol2-tdep.c +84db7b993aa2d9dc5eeddf89a4c02e1d gdb/objfiles.h +75fcfc318eca85bc2e25ef1a00a18ffc gdb/symfile.h +8f58dc7730d8bcb9e3c4d6eebfbf5164 gdb/filename-seen-cache.h +f87e5feee1d9a81de6f8796b5774f1ce gdb/ChangeLog-2006 +ef16ecd6aaed2f99811dbe8379487862 gdb/macroscope.c +074e044ae1a2216739af48a02ea516ff gdb/p-lang.h +602690bde7bb10b791cf06675bb666d7 gdb/ChangeLog-2016 +cb1c872bfae3e902fdda77cccbd8c1dd gdb/d-exp.c +289ae025f2db9970915223cf788da52a gdb/tic6x-tdep.c +acd28c23b1c160a407fb886b74531684 gdb/jit-reader.in +92d5202a998a0f41878bbdf68d06b2b9 gdb/ptrace.m4 +6a072efd2a433b159f94c5e47cc0d4c8 gdb/dcache.h +fe8580f803f10302fbef45d2c6a5a6b9 gdb/darwin-nat.c +1d6296ead4933c36309e1a672049395c gdb/auxv.h +03c42feb11000a86b49e950b60073d1c gdb/nbsd-nat.c +6fe32a2ea6df608bef495ae3d107fab3 gdb/i386-darwin-tdep.h +fac7acde60a740e901ac6155437fb118 gdb/d-lang.c +d15e2783808163b3939033ca4b9de0ba gdb/filename-seen-cache.c +f0d3d1480706997ccb8651366aaa844e gdb/nios2-tdep.h +90e56dea65beb67443d6c83cbc5fed7f gdb/ChangeLog-1997 +0deac693080af9ae37a854025e56d504 gdb/msp430-tdep.c +c8da652eec16d1e60f15814c4a06165c gdb/cris-tdep.h +f9ecee21c961e76a6000ea262a26f047 gdb/eval.c +4f81881235b385749b24f6e692ec8ac4 gdb/cp-valprint.c +8be571a686be76974a330425dd6f98e3 gdb/p-lang.c +2d7554ea207711001fdf26c29847fc11 gdb/varobj.h +5cb7dfb5b71c580312fe6330b0cd5343 gdb/objc-lang.c +f5f174019af45915f76ca39e94578434 gdb/vax-bsd-nat.c +c7c75d2ef9d1ff772741d7e95b44b95b gdb/p-exp.y +a4a2ccd0c4fcae71e200ada720997851 gdb/minidebug.c +68ef203c0cd8bc53b7df1a7ae9c386e0 gdb/configure.nat +1b719c01c8b0f1a905910b4bde35f208 gdb/gregset.h +ac02d68b7b13ce24150bf0fc9dc029ee gdb/mips-tdep.h +097d3d7060719fd6ed8907df658a7ef7 gdb/ChangeLog-1998 +6de389dc065b685c4eb4037d524d94a7 gdb/bsd-kvm.h +3ba6b905ac7c10d19a22a1c64ef5a327 gdb/configure.tgt +96cbcb550b0483672bd984737c3ecf1f gdb/arm-nbsd-nat.c +8fb5ce2fee76c5d1c0ae050b3f9b08fe gdb/async-event.c +a35ec479324968980ea38481590a6fe0 gdb/gdb-demangle.c +887ee11911b36912d7ad18a74b090bfb gdb/target-descriptions.h +b6d3c1a2ce5331be41dabcce684fc55a gdb/f-exp.y +06c8c59bcf5804df31de283287b18870 gdb/riscv-ravenscar-thread.h +d1a8144a8bade22b2a90e026c24a4d41 gdb/extension.h +1189f90e62d3aba5e2063eb19f788728 gdb/language.h +3ee7c1a93e80abce938f5b874483ee02 gdb/findcmd.c +844ec6679a6ea8453199c8546cbe686a gdb/gdb-code-style.el +8470ca5f61661fdfa708e60035af5224 gdb/ChangeLog-2015 +9c9bbfcc16a94a672b41a300b99d48e0 gdb/macroscope.h +4de33331158e9d2a9b41785391a9d2c8 gdb/gdb_regex.c +2b3033354f2983a7f37b7f286ac6a801 gdb/cp-name-parser.c +7f57d81cb82f1ad9a054357e39e210ff gdb/i386-bsd-nat.c +35b14fe68d8251e30de58027533a2b59 gdb/tui/tui-layout.c +0336e9af11c534156700ef5ab13a9dec gdb/tui/tui-io.c +bffa66b7706569c3d52c123771d19ee1 gdb/tui/tui-disasm.c +ff4418c169ab955bba7cd6771a1b95dc gdb/tui/tui-win.c +3204a2904d52e313f926207fe66d4445 gdb/tui/tui-hooks.c +8a98dfd67f49aed6f7ff754f8fefe46b gdb/tui/tui-hooks.h +89dc9ec02831a3befed6ec95671d588f gdb/tui/tui-out.h +56e449dd2b08d6c4f673262336b76958 gdb/tui/tui-source.h +1e48c5e364070d1d11faa0becd56c552 gdb/tui/tui-stack.c +616a35c2f77c196333bed958ca7636e6 gdb/tui/tui-file.c +d61e77a46115202fe106e45dbcd42293 gdb/tui/tui-wingeneral.h +5048aba2a3b92722ba025c4601367bb6 gdb/tui/tui-command.h +80e84a876bcf6641a285f5f55e360dd2 gdb/tui/tui-win.h +dfb03b01f71f0edbf0f37e2bf45097a8 gdb/tui/tui-file.h +ee9fab612b12117637b6c984031928a6 gdb/tui/tui-winsource.c +3533433415427360a02b6636b149f943 gdb/tui/tui-out.c +57eb0045143cad1af5a3a69e1e275a45 gdb/tui/tui-stack.h +2d37a555444fde9768d813f99ba514e7 gdb/tui/tui-data.h +44f188b7dc9f8c72eeebcd3bbb64116c gdb/tui/tui.h +faf6cb0050f0a27ef16cb197b02cb2c4 gdb/tui/tui-layout.h +39dbb24c37549974d19e81360d24c0ba gdb/tui/tui-regs.h +567bea37c4de348af0dfb0d6009f6921 gdb/tui/tui-regs.c +c1e16dc2eae023016e082d207af0bc4e gdb/tui/tui-data.c +a0eee43743c15b08bf31ce712297a473 gdb/tui/tui-winsource.h +5e8625ec7307f304613d09cb17dd5067 gdb/tui/tui-command.c +cefa1a7895c052f11dcd4ee8ae45f889 gdb/tui/tui-io.h +69cb4232521c3953b61c8acfe2494478 gdb/tui/tui-disasm.h +4c0b30aaed26489e045eeb6ce95ef8ae gdb/tui/tui-source.c +0415f3bd7a379430b752618c1e8c7cd4 gdb/tui/ChangeLog-1998-2003 +2766e5cffe957152eba9bf0177e79b54 gdb/tui/tui-interp.c +a8e172f268bbc56e11de350304188207 gdb/tui/tui.c +d9161c367f0c53476f0452d6101e2ab7 gdb/tui/tui-wingeneral.c +6ad523131e7ec7821d41a520acee9ce7 gdb/riscv-fbsd-nat.c +bbd85513f4c244cdfb9c14bfc6208faa gdb/go32-nat.c +b2966d3f97defb535cd6ad1275d76685 gdb/hppa-obsd-nat.c +379cd102821849adf065ba50d949f9c4 gdb/sparc64-tdep.h +6075edb56cd6bb6dce1e06f5ac8b601c gdb/ChangeLog +513ca9885dfc4bcc466a63bc14c7399d gdb/sparc-ravenscar-thread.c +bf90ba63062439ac65c40ce677cffcb0 gdb/dictionary.h +7aa2c1d9ca66457c49d39ac1220a982f gdb/btrace.h +642709710f769a6cc15b7174e5a4749c gdb/configure +76ed4817d3363c933dfe00a380f9529c gdb/selftest-arch.c +ad699c7a72bbf9b56e0c4baa50d2d216 gdb/xstormy16-tdep.c +6ef0d75caf7dd4459950e5617a187d4b gdb/target/waitstatus.c +1185b333f41108821252bd96a1da08f3 gdb/target/wait.h +c12749d09e95e1293c7c77064322bb1f gdb/target/target.h +7eca937acc81374d0452c080281c11a5 gdb/target/resume.h +5c315c841e87905cc6581fdd71d958e8 gdb/target/waitstatus.h +83fbefc285b869288a036da812194d00 gdb/alpha-mdebug-tdep.c +0915663a0be4af4f61e41ee767c3951d gdb/target-memory.c +4ff9da2fd0bd9be51d1fc0d243e5eae3 gdb/symtab.c +ed2fcf2780af91c7a095134bb8b1644f gdb/event-top.c +c504a1fbe0197b9a3ee24d3255743a66 gdb/d-valprint.c +6bcf1151aecb2428ebaf6977e4e87f1f gdb/user-regs.c +01645cc04bd2aaa86e900d9152dff8de gdb/sh-nbsd-tdep.c +db8d3560a6d0b9592a2739809f706812 gdb/osdata.h +036e4251c94a3a1770fa34019f6a5a1b gdb/arch-utils.h +ff987061c7ad938c3fb3950b85a74016 gdb/mep-tdep.c +2e99d39364172a77850a5e61f5f9b84b gdb/exec.h +b699cbb2b2df9d8f79d12dcb153e5546 gdb/i386-linux-nat.c 21b85dc2ed09d1125c8ab4fbdb043c7a gdb/notify.defs -6322fa0564d4d9e77d1bf4bcd98d0bb2 gdb/dwarf2read.c -39970db18881ae841cc45dbae26c4d61 gdb/amd64-darwin-tdep.h -d571c6c3f6b221d6c5498a67777c03b8 gdb/remote.h -1dbeac18702ab6c97bc0c7f5cff7bb74 gdb/i386-cygwin-tdep.c -450420a8e3d03debd4ddf762925594c0 gdb/ser-unix.c -ae9bbe4ce3046401ff12e6b9eaf03414 gdb/dcache.c -11bfac30f076c99b5b83a952edff79a0 gdb/mips-linux-tdep.c -6b5dad608fb2f7450862dc3c28ab6af3 gdb/sentinel-frame.h -c2c7fccf56f7d562a9bb709ca25f1f92 gdb/score-tdep.c -349b188907736d3ac349e30e509f4e37 gdb/ChangeLog-1996 -c30f8f7a7fcbbbc05d8142e6c2efa684 gdb/p-exp.c -a05d91206d7e847405dfcdc0689e90a7 gdb/c-varobj.c -52a3c13ea998f70f5add90a13754a5e5 gdb/bsd-kvm.h -640121227e3aa802f0f2abf4ddb38522 gdb/m68k-linux-nat.c -e6c1c90f218082f6488a2404482534e5 gdb/objc-lang.c -54e55ff57a6b5184c4375785415991b1 gdb/ia64-linux-nat.c -afd833c3851ef27aae05eeb06a53b2bf gdb/defs.h -5107ac5c9d6668c65790208caeeee835 gdb/aarch32-tdep.h -65778d9ba676ef8ca7535bcdd1706fe9 gdb/guile/lib/gdb/iterator.scm -04d7e2f360553fd8783ed8725cd6999b gdb/guile/lib/gdb/types.scm -6d7d8297e284b34f6acc3d128fc9eeba gdb/guile/lib/gdb/boot.scm -7833af3452214e7988896055bdd0823a gdb/guile/lib/gdb/printing.scm -896a78ae784cd4341fe78cb658519b91 gdb/guile/lib/gdb/init.scm -3b9aa5c3b418204d01207589bec85e48 gdb/guile/lib/gdb/experimental.scm -1dc3d95f8981d819ed9cb2f4a693a909 gdb/guile/lib/gdb/support.scm -6881023d6d4cce2cef098d6be6fa2536 gdb/guile/lib/gdb.scm -44237c5201711c3bcebf8256bc2da8a9 gdb/guile/scm-ports.c -34dd7c625127b23de0f6a85426a643cd gdb/guile/scm-cmd.c -417555fb427ed3c4621c1429dc6c82a1 gdb/guile/scm-lazy-string.c -09e0f4732d6279908db0baa56408ecc7 gdb/guile/guile.h -457ee51fdb7e6c82ca2cc3f6fb62bbb9 gdb/guile/scm-utils.c -e20a6c1dfd3d9296f0c64a517607108f gdb/guile/scm-frame.c -efd0d30ce9b4935b7e74440cdb127f5b gdb/guile/scm-disasm.c -0f2a6b6e5b5c146b764c1d3bc0870877 gdb/guile/scm-symtab.c -31d29114000741044b0de7a4ac2d9e62 gdb/guile/scm-block.c -36557a5d0f585cf50a157de5ded88c67 gdb/guile/scm-breakpoint.c +706b55f7eb789fa80f467e0cdbe9983e gdb/tracectf.h +3d2d320c657ac2fca6cadf175b0d1e21 gdb/utils.h +8434761d2fc32a37db6e8c1b44e581da gdb/ax_cxx_compile_stdcxx.m4 +2bb90fbb8ed35a9ddf46e3bcf16909d9 gdb/m68k-linux-nat.c +005184b2979009ae1d7449157bc9c476 gdb/target-dcache.h +74f6ef7c6631bc01d5d78751641bb3a7 gdb/top.h +15cf281627b0927e965f36cd45c48fe2 gdb/arm-nbsd-tdep.h +515956b5f0fec4550ff2b64a158caa89 gdb/c-lang.h +fee5e0d39dd9cda40ea16dcf1a45fba2 gdb/cli-out.c +aced81e112482dcfceb65756af430f92 gdb/dbxread.c +5346266bbdb55c81ef9e8f39ba6703f2 gdb/test-target.c +7e118397b91757f7f12376028696b2b4 gdb/ft32-tdep.c +f7d9fa94a130c291356f905592b74962 gdb/sparc64-tdep.c +1f29e10f7eaec5b60743ddb2566100eb gdb/serial.h +9edf2cc454c195e0b26888121a9c68d1 gdb/bfin-linux-tdep.c +f9e2302e8db0562c2ae0872b0831986e gdb/x86-tdep.c +98038140604140839264cfa749e29019 gdb/i386-fbsd-tdep.h +5abdf2ff947ac22d187bdf787e08ff32 gdb/ax.h +fad303bcf17188fae8b249006e3625ba gdb/rs6000-tdep.h +0995979778608fe7203391a85d13e743 gdb/copying.awk +a665f5409d122bd9b744b517f5107ade gdb/tracepoint.h +e53e6f791d5c8307622d54b9d86b052d gdb/event-top.h +a5c6a276fa65f5d4a47020cc12c189a0 gdb/obsd-nat.c +1da4e9894f1ad578213f47d032fd58b3 gdb/process-stratum-target.h +6102106e189dd06c1528f12c1da39567 gdb/gdb_curses.h +6fbf968fdeb41981cda1617dd89edce4 gdb/copying.c +79e815e5e6f02295f20dffc12d6fad11 gdb/progspace.c +e8982c3404e94852025c3410b9b712f7 gdb/aix-thread.c +46d4d315ccc5bbd3d3c8a7489262aa53 gdb/.gitignore +56889d91afd75d3f40cf03ac1d1e82cd gdb/m68k-tdep.c +2bfeae06f985e95a59b7a1ec95314a71 gdb/amd64-tdep.h +a1b622e95ee0808ef5724bec83a7db81 gdb/infcall.c +db46f58c241f6d9673b75d9373c2e6fe gdb/interps.h +01101d14ad3a580bea2549067d695833 gdb/aarch64-linux-nat.c +76bd30bb7d431ff315593ff5b48a0125 gdb/guile/scm-frame.c +714b5662996976142bbf6a0740271788 gdb/guile/scm-arch.c +e560073f9e4d7d4c552e96e4484ba354 gdb/guile/scm-gsmob.c +21214c243e9f992c2b69f6deeb24f961 gdb/guile/scm-value.c +c62fd84af2baff16c6702496ee0af8eb gdb/guile/scm-lazy-string.c +f30f3b240e83ba698709d5ef3ece7c9f gdb/guile/scm-type.c +94c10df66dec1199de3de7c4db6c040c gdb/guile/scm-ports.c +535467cfa3f2e2b190878e6ccb0a29f4 gdb/guile/guile-internal.h +c2e7f6ef846c32034324495a560c55d2 gdb/guile/scm-disasm.c +e5604836e310adca2fcef4be5d8e011d gdb/guile/scm-objfile.c +dbd2d55cb8bebefda777434aaa06088b gdb/guile/scm-symtab.c +46024c4b1169fa2f1b75a76524e60e39 gdb/guile/scm-block.c +cd80be1948ec4477a3086d04ff05e80f gdb/guile/scm-progspace.c +b09c0ac848c0b17f97e866c29e25a8c9 gdb/guile/scm-utils.c +542498df5b25c5275950b0b4b7b6618a gdb/guile/scm-breakpoint.c +fb57c6928b564b2fde3072f8cac8927a gdb/guile/scm-string.c +d1c86b40ae19626c84dc929b5c7118a7 gdb/guile/scm-math.c +0e71e505210a69a3954524db5bd63aad gdb/guile/scm-param.c +88deb1fb01ce0932b8e1cd91c574cf0c gdb/guile/scm-cmd.c +7eea98c56a49363fd9bbe8029b3e6383 gdb/guile/scm-exception.c +35ccab8c378644b98df343ff7774424c gdb/guile/scm-iterator.c +18640d8562b64c57191aec3ad667b680 gdb/guile/scm-symbol.c +0fba150cd5c777d67990572f146a9962 gdb/guile/guile.c +1abb1ee2eb706bff19749febb0352a74 gdb/guile/scm-safe-call.c +3156980ab6c3898a1ef7426833d77914 gdb/guile/guile.h +a4088a2dd27f77311c752beca03f7301 gdb/guile/scm-auto-load.c 520658d110ac7bd41fbd26e1ac81efa0 gdb/guile/README -b76512a12d183597a9fc26dd2eff3ce1 gdb/guile/scm-value.c -94d0f1b04d1d3260f68bf6afeecf2547 gdb/guile/scm-arch.c -f9e7dc0b1065dda7e7cd70e9e2f54344 gdb/guile/scm-math.c -3c08fcc3c9f65236ec8e533dd8c819e6 gdb/guile/scm-pretty-print.c -e84fd0a4ba6c332b4c88c822b09924f1 gdb/guile/guile.c -79e25f107af6e606e21870be98373241 gdb/guile/scm-exception.c -f7678e6ae4c4a4ac365dea30c0e57caf gdb/guile/scm-type.c -6ded39798edef9e1e0ca4aa4d6a124bb gdb/guile/scm-string.c -2561be1cd014bd50a5713bd1021c1f4e gdb/guile/scm-symbol.c -56462ff7dddb4baaa2245ad4c4de6f6f gdb/guile/scm-iterator.c -211e6ecc658759e6086e97257f179427 gdb/guile/guile-internal.h -7f2de27f088bc470d1a9c4e33a63b992 gdb/guile/scm-safe-call.c -a22fcc470d5c3b6f8f0c72911d006383 gdb/guile/scm-gsmob.c -d8ba180d78cef7b1c5f8e65438a09931 gdb/guile/scm-param.c -0e8d622eca1b185b9a58bb708cc3ab6d gdb/guile/scm-progspace.c -cbfba432f981a1ffddfa6fede035a944 gdb/guile/scm-objfile.c -5eccc439c4f0700390ea3fd5d3296687 gdb/guile/scm-auto-load.c -9c92547a81017c2967cf57d4f805d540 gdb/c-typeprint.c -8837199edb9752371162630b0c10b89c gdb/mingw-hdep.c -fb1ed143d8c51b3ed666a5464ef19a25 gdb/unwind_stop_reasons.def -cada3e283e6c86031789631e04845fdd gdb/bfd-target.c -dc77c6d24461ae33f86795c9a2f45183 gdb/arch-utils.c +93e324499d0eab67f389a90361f12203 gdb/guile/lib/gdb/support.scm +93f9704ea6ea29e2817be54356c60927 gdb/guile/lib/gdb/iterator.scm +7e3140c3b46be681b179d6202c99de61 gdb/guile/lib/gdb/experimental.scm +dc96b7e4ebde816a814efc40f221ce0f gdb/guile/lib/gdb/init.scm +121527b171df9c56cf0fe0bcb9e5cf47 gdb/guile/lib/gdb/types.scm +e56b52c747c7512110ed1a066a9c8a42 gdb/guile/lib/gdb/boot.scm +c67d88a6bcd8257393e7ee363b8a2daf gdb/guile/lib/gdb/printing.scm +29089ddc51263d5b17bb08ea6eccc34c gdb/guile/lib/gdb.scm +45df7b968cc811e0a1fa17fa6ec56aee gdb/guile/scm-pretty-print.c +cf4b53be226454df7e14f43bb1331cbe gdb/arm-bsd-tdep.c +60550b351bad02e484fd71408eb73bab gdb/go-exp.c +93bdec2ee1a5f96d3fc307c1600f50e2 gdb/ChangeLog-2007 +c55a44964fb648549154ce4e171c012c gdb/MAINTAINERS +214a70b627d4c8e06c44efde16b879ef gdb/inf-child.h +bd824ca73b04458255eb94e5a6871b3b gdb/gnu-v3-abi.c +0d2e14e0c65b007195207a20c2df3806 gdb/solib-frv.c +42b9f7c51223e595f66c2210064be682 gdb/ChangeLog-1990 +2061dc6b80def46cd41f7416a5dfb5e6 gdb/ui-out.h +604e48e80a79ae566d447b849e22b333 gdb/progspace-and-thread.c +48019dc4a4e01165549c6cc7cef45780 gdb/solib.c +a128898ae8fb49bab715c9c5c4a9af65 gdb/sentinel-frame.c +e90d1fdc5c4159ad48d72a5df053726a gdb/amd64-nbsd-nat.c +8e1972b7079a6e4caa42c22d9a9d8d22 gdb/amd64-bsd-nat.c +c8f1f518ebe78a31d38ed2b84bc59986 gdb/m32r-tdep.h +21b96dc85f846814d02f545fbfe39205 gdb/hppa-linux-offsets.h +d91d3e10c3029a77a38214d9d7d6b324 gdb/python/py-value.c +09ca5c9182de0ce3b0893d84f12c21a4 gdb/python/py-param.c +16f85961e5ebb42097c1abb7a14ce97e gdb/python/py-continueevent.c +80c0eccb4b2ac0dda68c9c229b33e768 gdb/python/python.c +539293cd02d56d33c1bc62393ea4a81a gdb/python/py-signalevent.c +6d1193c67b1a5107f508806feb6e4361 gdb/python/py-symtab.c +5a2323df2bb5669e0add7b7c73643c4a gdb/python/py-linetable.c +cb121e4d73cb1cb12612b4e2c5db7695 gdb/python/py-arch.c +7fa119e35f577ce4618ecd782b3dba45 gdb/python/py-framefilter.c +c56e70090cc5e8412a8dee428f4de0a3 gdb/python/py-gdb-readline.c +47c2ae72c47034db72b26790720a4226 gdb/python/py-event-types.def +1e0bb620df260d8e316f56ff3bb7e500 gdb/python/py-event.h +7dbeceec8e7b02ec1100ffc9bca7d2e7 gdb/python/py-infevents.c +cf373cae38f1086a93c9705ef03e2bb8 gdb/python/py-bpevent.c +3f9612a1dfcdc734dbf15cf9e3c7ea88 gdb/python/py-progspace.c +f8ccf2ec78ef10a8757a02bee41452d8 gdb/python/py-symbol.c +6074d60f6337bf666db2e8bd2bf28e6c gdb/python/py-record-btrace.h +8e71d6cd566d55c1e66fb4d4f3ae2b4e gdb/python/py-lazy-string.c +9696322b18f87a209773eab622d7f91c gdb/python/py-event.c +cafd480ab61ddc4d3a368caa91e9d207 gdb/python/py-tui.c +675378fba7137120dcb2ab579e26a520 gdb/python/py-type.c +06f1b0cb4daacbbd09a57abfdc5fdd4e gdb/python/python-config.py +338dee7ee519b2fef73fef23c9ed5c35 gdb/python/py-record.c +af727e0333d87c537f9d69fb70ad4dfa gdb/python/py-block.c +229049eb138416c51d7a9151eb2a466d gdb/python/py-newobjfileevent.c +46b4c8a18a8a0a9eb65e8ee98fc3009d gdb/python/py-inferior.c +221380c087f8c9dfd9fe917489f817df gdb/python/py-ref.h +9cf4fa0dcefbc940602584af6041c942 gdb/python/py-unwind.c +f925426327738d905278e244bdbb94be gdb/python/py-utils.c +56e242e6c53ee6f3ecf3167c117063a9 gdb/python/py-record.h +883c938604ac223756f56e3ff5efc3f6 gdb/python/py-auto-load.c +55db2c992da8de8ba792791b0caab9c9 gdb/python/py-instruction.c +7e559c8b7d29363d0269af62d642f676 gdb/python/py-finishbreakpoint.c +09e738ed9c59c8506bb759ef866de982 gdb/python/py-evtregistry.c +2cfde5b5751dc5cfc31fa1d6a79c0e2a gdb/python/py-cmd.c +7b64aa3e1aff91b6f72dcf8630267ca5 gdb/python/py-objfile.c +921c742d0a609afc5529b3c52e9019e6 gdb/python/py-evts.c +7f8d271812f810cc1bffa16e7170ecd9 gdb/python/py-record-full.h +813ea6b12924bc289e9b91d91a6cbe5b gdb/python/python.h +363948eaf3fc7779b1b871eadc558638 gdb/python/py-instruction.h +094363ae1d9fa8fd52d64141f2fb3d69 gdb/python/py-prettyprint.c +4c3f21dbe81177fd5fb0702d388238ec gdb/python/py-record-btrace.c +2808ca4a262f32b94e7c42d3220ec8fa gdb/python/py-events.h +bdaf973c22271ddf4840be1e301022de gdb/python/py-frame.c +2dcb60e7ca34ad21b62fe8e0583c9841 gdb/python/py-threadevent.c +8c34f6ab62314f2a5a431984b4a6d9ba gdb/python/py-xmethods.c +632edf7170ed70a740c775e57b5724fd gdb/python/py-infthread.c +fad6753bcb15f5cbc1ea5a19a663936d gdb/python/python-internal.h +cc52275388ee282adb11da603aeb8fe3 gdb/python/py-stopevent.h +69389a174975ce4460d0a7cd39a9abaa gdb/python/py-exitedevent.c +65905cfdc1c88df71f6db694aa17ea8a gdb/python/py-breakpoint.c +f8306f7329ffb6e5f3287c2735a99712 gdb/python/py-all-events.def +0fdada05945dee31990c189f0770338a gdb/python/py-varobj.c +0d6a53f2ac8abbdf715b83c7d84d2e5d gdb/python/py-record-full.c +e87a77464452a1a129760f1b5d78078d gdb/python/py-registers.c +d2103ff636ea8baf820d9c066962e2e7 gdb/python/py-function.c +b14fa248e4ac4d0a85bebc10fe181643 gdb/python/py-stopevent.c +4be3c6307a396e756a29c16129a7ca3b gdb/python/lib/gdb/xmethod.py +d2ee82dbc79f3a2f6215b7ce5b9933c9 gdb/python/lib/gdb/FrameIterator.py +dc1d7193c8ccdf4efc28367c8759c75b gdb/python/lib/gdb/types.py +ad4bdaf68c0bf0870a5bdf6cee7be827 gdb/python/lib/gdb/function/__init__.py +eec354df9ba885f63b6a214fc0dc161c gdb/python/lib/gdb/function/as_string.py +a17c73a9b213368d8384171001164c80 gdb/python/lib/gdb/function/caller_is.py +c8e7145f9725f2e13cf5308bc0188a1a gdb/python/lib/gdb/function/strfns.py +93d0ebf9d2751e1c310764cc51bd4794 gdb/python/lib/gdb/command/pretty_printers.py +46f78f095f467bd1853999c681eab2d3 gdb/python/lib/gdb/command/explore.py +2536509c30bc19c6d2dd0b5a1b5ddc56 gdb/python/lib/gdb/command/__init__.py +97411c02a398c9de9063e897633994a2 gdb/python/lib/gdb/command/xmethods.py +5cfb37b45f64a00b8b5d70f56b23f197 gdb/python/lib/gdb/command/unwinders.py +4a0cd8f0a70c79eddbfc7b9ca484b8e9 gdb/python/lib/gdb/command/prompt.py +54722ac32441db8acf5583643ba4b963 gdb/python/lib/gdb/command/type_printers.py +980e13b09c568c804d77af666a02de7d gdb/python/lib/gdb/command/frame_filters.py +75d85bd1b45529c06c16b3f26b88c662 gdb/python/lib/gdb/__init__.py +767d6e585995b5c6bfd4874a92982d50 gdb/python/lib/gdb/FrameDecorator.py +e4c0f7f3f95da0307831ca1451fad0c9 gdb/python/lib/gdb/printer/__init__.py +e6672d2ff514f39e5f2bcb3e48da4865 gdb/python/lib/gdb/printer/bound_registers.py +ba493619392ad9c452c3ba515488f6a9 gdb/python/lib/gdb/prompt.py +252959f5e811bfd14a05c2299cdaeac1 gdb/python/lib/gdb/printing.py +c6963f2a73055ea247c6ac66003d58aa gdb/python/lib/gdb/unwinder.py +ea4c96de0d095abdbc854e42b7b845c0 gdb/python/lib/gdb/frames.py +ed50d211be73ec1d575cc58b0326bdcd gdb/make-target-delegates +a69ff935523f095559f63f746b9fa76b gdb/cp-abi.c +8e2a69b2900a304d35603eea1c4352c5 gdb/annotate.c +06443db6847bf774405bd12689c912fe gdb/charset.h +00599c2ec6496644f43f708413a95fa6 gdb/darwin-nat-info.c +7d68447647bf8bbc4a1dd18bfa0e5da2 gdb/ser-go32.c +476e6d1dd65d8d6cdc566319a080f8a0 gdb/microblaze-linux-tdep.c +91d6085061561019d9c4946b4ef9cf8b gdb/gcore.h +e5bd308e6213188b851667ddb390a3f0 gdb/sparc64-linux-tdep.c +807df8428c60d67cb4010066de96b1cf gdb/namespace.h +01cf0508335a4da7b02da6e4c86c35be gdb/amd64-windows-tdep.c +bfca034e228fb887aeb6545ace68b619 gdb/sparc64-fbsd-tdep.c +85dac8d27df62fbb4aecb01f7ade4e80 gdb/unwind_stop_reasons.def +a5b211e5e8da117aeaba2cfd5031d24e gdb/proc-api.c +f916bc43927b1ea235237a091b008cf9 gdb/alpha-tdep.h +ad3c1cb96bfae2b322431cd9507ac7b4 gdb/dummy-frame.c +e210c0897ebcd1ebd49e7570fd3ebe9a gdb/tilegx-tdep.c +31243d2f3b1d7a56b287a819e5b51f75 gdb/glibc-tdep.h +f79b4d8935a61cf5130cc9d98ca29795 gdb/ui-file.c +bfda59d37ece6568c087b2a1901229e6 gdb/frame-base.h +6ae2bb8f72e308df4d164e332fcaed4f gdb/solib-target.h +85b5365243b0e391217b7a3874c1f0c0 gdb/sparc64-obsd-nat.c +839e8b47035f5040416938e69d25e84b gdb/darwin-nat.h +704c1727b0db7f50f9cae726ff3bd8fa gdb/source.h +9fe3f6562bb215f13ac569ec5232ef0e gdb/unittests/child-path-selftests.c +3bb3607648ea824ce4b9b21a3b675c95 gdb/unittests/mkdir-recursive-selftests.c +29d2603501fcdf9347faf2cb87f037c8 gdb/unittests/memrange-selftests.c +bdb7b872c0658340546548ca16babba1 gdb/unittests/main-thread-selftests.c +e9197b893ae4f866ef75568e23ed8a5e gdb/unittests/lookup_name_info-selftests.c +14f294779d715a4b93f7578f1bd26678 gdb/unittests/common-utils-selftests.c +d53ea6ef6d70084484e52c347bd9109b gdb/unittests/rsp-low-selftests.c +d35be084ea37b0c884dfb3da4e3fcd93 gdb/unittests/memory-map-selftests.c +c6a1668abc4a29bd5f56063b15b16e3d gdb/unittests/offset-type-selftests.c +a66beef2d3b2d91d01fb4ca0e1d74601 gdb/unittests/observable-selftests.c +cf1b0ae0ba2c3f2e6dfada43dc8c1d85 gdb/unittests/parse-connection-spec-selftests.c +9a064fbf13a3b4f76dfdefd0a7a13f77 gdb/unittests/string_view-selftests.c +4d8c00180d564fc20cc71547005694d5 gdb/unittests/xml-utils-selftests.c +a5dc19f953bf37f6c2505bdc8f9c11f0 gdb/unittests/optional/observers/2.cc +eef7c0fbb6c3e3a3367f142891f880b8 gdb/unittests/optional/observers/1.cc +0032f68c76a4db80914f0564cbac6da0 gdb/unittests/optional/cons/default.cc +d163477625e6c8b6843a2fa3874f8655 gdb/unittests/optional/cons/move.cc +46e23f0eef37262b7e082e6212c30775 gdb/unittests/optional/cons/copy.cc +b2449b96f68e9ec194d9e277c2a78f22 gdb/unittests/optional/cons/value.cc +c1ebb0cb7b2577732f1873d80fa0cac0 gdb/unittests/optional/in_place.cc +7776dfc7f3c7d0fc04d5a7ff3376cdaf gdb/unittests/optional/assignment/4.cc +1626aac318bae9ac484335f941a36d42 gdb/unittests/optional/assignment/5.cc +dcc5345ee51dad0f38e434bd3beea115 gdb/unittests/optional/assignment/6.cc +075e2d8788a5a9e0c92a27a17e383be6 gdb/unittests/optional/assignment/2.cc +71cf6f2fdb5d4706e957aa2e4b86277c gdb/unittests/optional/assignment/3.cc +c898b3d198c4053933905ef5b5208c78 gdb/unittests/optional/assignment/1.cc +ee7175b3e52c76cbfbbc12199965a295 gdb/unittests/optional/assignment/7.cc +8d24c3eeb6ea4782b97db54974a10c3a gdb/unittests/scoped_restore-selftests.c +eee6262ba26fabddbf7cd40dc4a981e6 gdb/unittests/tui-selftests.c +44cacabb2d9406fc21f63676fc2ddf95 gdb/unittests/utils-selftests.c +932ec89deea10bf0c9eedb19a33276be gdb/unittests/style-selftests.c +7c2201c74b3b6186edd4bab237c227e0 gdb/unittests/unpack-selftests.c +2c40d6b9ee4d3c59262a92eedefb736a gdb/unittests/copy_bitwise-selftests.c +bba517ca1ac50556548bb8370b81cff8 gdb/unittests/optional-selftests.c +efcaf283a931eae985e685eacc03142a gdb/unittests/scoped_fd-selftests.c +7630e8021ada631386a513c1218447ff gdb/unittests/tracepoint-selftests.c +99d48d985ad48cfe6ba46d61ce4ef831 gdb/unittests/command-def-selftests.c +ce8381492a631db3737ee62c71071916 gdb/unittests/format_pieces-selftests.c +e87bb2f6b8baca29b0442471e9f7832d gdb/unittests/filtered_iterator-selftests.c +12638144de1be6137ecde258ad1fae4c gdb/unittests/environ-selftests.c +7aa70693a7a85e30c58c14c06671ee95 gdb/unittests/scoped_mmap-selftests.c +5662e68f9e78dcc3cd1cbdae20caa2dd gdb/unittests/array-view-selftests.c +3d28f78900191fc854ae00d40336e417 gdb/unittests/function-view-selftests.c +84723e754f5ef4777d30bb72e3337312 gdb/unittests/basic_string_view/requirements/typedefs.cc +613485e03298833fd198516817b6ec13 gdb/unittests/basic_string_view/requirements/explicit_instantiation/char32_t/1.cc +c739e0ad5d9e01dd2a8c5ebf13262747 gdb/unittests/basic_string_view/requirements/explicit_instantiation/wchar_t/1.cc +610a5a3d303b06ff1079e237ccc1a201 gdb/unittests/basic_string_view/requirements/explicit_instantiation/1.cc +38699013120f5d7cd0958069e978839e gdb/unittests/basic_string_view/requirements/explicit_instantiation/char16_t/1.cc +beb0f333ea7480dd80976bf4fa0ab196 gdb/unittests/basic_string_view/requirements/explicit_instantiation/char/1.cc +b3e234e000c84bc227058b221d69162c gdb/unittests/basic_string_view/modifiers/swap/wchar_t/1.cc +2a2f688c364b2d86876cc5690763140d gdb/unittests/basic_string_view/modifiers/swap/char/1.cc +4e17e80617a23cf8203b9aebeb193436 gdb/unittests/basic_string_view/modifiers/remove_suffix/wchar_t/1.cc +a03e5ff0ced39dea54cb0524c6c706a3 gdb/unittests/basic_string_view/modifiers/remove_suffix/char/1.cc +5c1d30dd186baa51882aa0930ec082a7 gdb/unittests/basic_string_view/modifiers/remove_prefix/wchar_t/1.cc +93f63f1a8b0a1ee5c7f332353aaa3fa2 gdb/unittests/basic_string_view/modifiers/remove_prefix/char/1.cc +a51ea6abce670049b1d590df49c79df5 gdb/unittests/basic_string_view/operators/wchar_t/2.cc +0b9118c8e0f4ff1ee46cf2771d05ba1b gdb/unittests/basic_string_view/operators/char/2.cc +218dbc5562edc614c015af96ba38ff63 gdb/unittests/basic_string_view/include.cc +e28f1da8c0e08157eb48d9ed6ecc5185 gdb/unittests/basic_string_view/cons/wchar_t/2.cc +63262618b5c761f03a2bcce6b830ff2e gdb/unittests/basic_string_view/cons/wchar_t/3.cc +a240bf2482d9dfa47848a6932c813822 gdb/unittests/basic_string_view/cons/wchar_t/1.cc +9b7470b67796d7ebc5fccf7d8a6f0e73 gdb/unittests/basic_string_view/cons/char/2.cc +59a985f6b9b666786b634cde0fe4a0ae gdb/unittests/basic_string_view/cons/char/3.cc +242cd9df94dfd0501b451387a6e26fc2 gdb/unittests/basic_string_view/cons/char/1.cc +a3c7bbbe8994802eebb65280de71d33f gdb/unittests/basic_string_view/typedefs.cc +838660fb639fbda30ff231ef3e779d75 gdb/unittests/basic_string_view/types/1.cc +a25ad2fb6ef71245f67258b60d752163 gdb/unittests/basic_string_view/inserters/wchar_t/2.cc +5a178196bc1424419761b594d161eb25 gdb/unittests/basic_string_view/inserters/wchar_t/3.cc +fe3acbcc91b12c1dce9488b6383cd74d gdb/unittests/basic_string_view/inserters/wchar_t/1.cc +66066fa3dca307e48981175bbbb03293 gdb/unittests/basic_string_view/inserters/char/2.cc +a201b2864666048f430bc73e1b0965e3 gdb/unittests/basic_string_view/inserters/char/3.cc +6e59420c9c4dd1858c739e8facd81d03 gdb/unittests/basic_string_view/inserters/char/1.cc +ef83763b153cb83af3f980af5c8f9c72 gdb/unittests/basic_string_view/inserters/pod/10081-out.cc +e58fe7cc6c89978b9521f3a46020856d gdb/unittests/basic_string_view/literals/values.cc +72ff1d36b1f9b8db314d9f03795350a1 gdb/unittests/basic_string_view/literals/types.cc +d082b7295001b8cd1437f10edc09a3c5 gdb/unittests/basic_string_view/element_access/wchar_t/empty.cc +0a031a00d41cd91c8adc63249fff5ebe gdb/unittests/basic_string_view/element_access/wchar_t/2.cc +0af88ba32d4307d41132d630dcad47ea gdb/unittests/basic_string_view/element_access/wchar_t/front_back.cc +d1b3828966781b56d836a45359b2c76e gdb/unittests/basic_string_view/element_access/wchar_t/1.cc +f60e32609336c7875befff9f8b17fe07 gdb/unittests/basic_string_view/element_access/char/empty.cc +57a662fda32714fd6b2ee23dc0c8883c gdb/unittests/basic_string_view/element_access/char/2.cc +32bede55cbb4b625965a7044054140cd gdb/unittests/basic_string_view/element_access/char/front_back.cc +6b4eb60c373965d774ceef5082d2bc65 gdb/unittests/basic_string_view/element_access/char/1.cc +04373f4bf01fa08612bba401c4a3be7d gdb/unittests/basic_string_view/range_access/wchar_t/1.cc +a991cb9948b8736fd79d06c414985560 gdb/unittests/basic_string_view/range_access/char/1.cc +01733e2c5ce4ddde82c59ac336df6758 gdb/unittests/basic_string_view/operations/find/wchar_t/4.cc +3f5f15888715bc189f672b7007b95535 gdb/unittests/basic_string_view/operations/find/wchar_t/2.cc +964787ec6d278c23f29523a476a0a083 gdb/unittests/basic_string_view/operations/find/wchar_t/3.cc +e031b04838f08fd8dd17050d525a8fac gdb/unittests/basic_string_view/operations/find/wchar_t/1.cc +d48c63aa898adaccde4600bf623b0e85 gdb/unittests/basic_string_view/operations/find/char/4.cc +49096be272898abe56911d4d74b54eb9 gdb/unittests/basic_string_view/operations/find/char/2.cc +73293d800e90dc24265c252f6ce74c1f gdb/unittests/basic_string_view/operations/find/char/3.cc +0b4b0e50f89aa371cc78ccb23fae3d43 gdb/unittests/basic_string_view/operations/find/char/1.cc +a7165489dbae7893bb248e19a6c3c941 gdb/unittests/basic_string_view/operations/copy/wchar_t/1.cc +edafb37cda34c4f26814bed453b35be9 gdb/unittests/basic_string_view/operations/copy/char/1.cc +3b3dd4346d1f6a5a65123ec915e987a3 gdb/unittests/basic_string_view/operations/data/wchar_t/1.cc +ba7a46432515886effa373d14b724f36 gdb/unittests/basic_string_view/operations/data/char/1.cc +19b49713c318044028b382f712afa0db gdb/unittests/basic_string_view/operations/compare/wchar_t/2.cc +3fae747a2c4ea88cdd6225caa11923f4 gdb/unittests/basic_string_view/operations/compare/wchar_t/1.cc +b4f6458d341ccd0ad0dc9551682a3ae9 gdb/unittests/basic_string_view/operations/compare/wchar_t/13650.cc +9190394ae38d86a6e0bad84c14791dd9 gdb/unittests/basic_string_view/operations/compare/char/2.cc +2c9bead9dae75e4ee4ea5907e65501c5 gdb/unittests/basic_string_view/operations/compare/char/1.cc +8d446fcfc163dd6f521d9d057bd31b7f gdb/unittests/basic_string_view/operations/compare/char/13650.cc +58cf518251a7af1adc39635b01fecf58 gdb/unittests/basic_string_view/operations/compare/char/70483.cc +1e336bb0699297d2461ec509f2dd35dd gdb/unittests/basic_string_view/operations/string_conversion/1.cc +ba8cc7311ad8bb64377fc1d554fd77aa gdb/unittests/basic_string_view/operations/substr/wchar_t/1.cc +f593d9fabdde384d5048200302916db3 gdb/unittests/basic_string_view/operations/substr/char/1.cc +659bc5006eb90be57ce9841370893687 gdb/unittests/basic_string_view/operations/rfind/wchar_t/2.cc +2cbf14d1d0a223a0004bcb42236fc676 gdb/unittests/basic_string_view/operations/rfind/wchar_t/3.cc +31927a709f8fe121c6984b1518808ba1 gdb/unittests/basic_string_view/operations/rfind/wchar_t/1.cc +8f4937639f1bbd928548bafab8068a5b gdb/unittests/basic_string_view/operations/rfind/char/2.cc +0bc9ba0d5379c5fafe07cafe111d6b42 gdb/unittests/basic_string_view/operations/rfind/char/3.cc +ebf45476050958dffd1782cc7b4333d7 gdb/unittests/basic_string_view/operations/rfind/char/1.cc +3e8971419c8d3bf6892300694d5cae3d gdb/unittests/basic_string_view/capacity/1.cc +6dd699bb1d430f8f5f8262b4a22a57bd gdb/unittests/basic_string_view/capacity/empty_neg.cc +ffc73277f443b304ad6f3d1e29ebd78e gdb/unittests/ptid-selftests.c +a1c9f3a8c42628f9d25ed5e554b49424 gdb/unittests/cli-utils-selftests.c +b852f253299730422329b88413f127f1 gdb/unittests/vec-utils-selftests.c +33a193f1e6563e7a5edc9a009d9ecd62 gdb/m68k-tdep.h +4227a8966c2b6d5a33ddba265266e210 gdb/cp-abi.h +844e194cef2e0a1ddc4e608a4e569210 gdb/ravenscar-thread.h +896fa2a88c4289e5588ae170abef974e gdb/macrotab.c +b3453ec6703ab458208ce338d6a62984 gdb/i386-go32-tdep.c +355a08d010d1dff5327d6d1bbdb038c2 gdb/i386-sol2-tdep.c +f267a4ea22e14d926d0728061d21b12f gdb/std-operator.def +783733ddb16111ee7108459f713e2341 gdb/ChangeLog-2018 +3cbb64dad0dbbba6d04f098071e4e534 gdb/psympriv.h +1a182f764dfd4027c2b2a29ecf987ebf gdb/psymtab.c +33838dbd260fe5ebe826c67c1cf65fce gdb/top.c +d6ceaf3b072d26a6a0e8674e70223a58 gdb/symfile-add-flags.h +e6d85761d1db98a2d3a7eace465cabfa gdb/config.in +10f16834576b3a2b2238706a9d2f182f gdb/hppa-bsd-tdep.c +a90cfc71c975f6312a12c65eb5e99918 gdb/corefile.c +577341a8e91052b7e8e824a38c9b049e gdb/stack.c +4b16bd0f7ec5f5eb22b8f88ef8d672f4 gdb/disasm-selftests.c +88341fa21ee2460013ab9dd76ecc25c7 gdb/inf-ptrace.c +a66e8b0f09327975f6ca5441696fe2d2 gdb/progspace.h +06d9d97449e62b73a08c619d20549e36 gdb/hppa-tdep.c +4d1c7fe8a30bec75a17040dd67caabb9 gdb/windows-nat.h +f4d7a6212823080209771e1e830b960c gdb/target-descriptions.c +056b7ada5d93fd281c8d092a40c0b376 gdb/target.h +564f7c17fc8fcff90fb65e5b4981388f gdb/arch-utils.c +9dea20a9ce672cfb3f6f11a294361bd3 gdb/ChangeLog-1999 +bc209b35c1800ed89b3447d0eae84f64 gdb/record.h +f83bee609c4dd380050a7b6316546972 gdb/ser-mingw.c +bfd4770f16af7b22baea3c80bd626e94 gdb/regcache.c +f6a4fdb082c61d07bd1bf09b44dd92a4 gdb/ppc-nbsd-nat.c +303b3cb2b50d1e5e90d59c6be461b113 gdb/sh-nbsd-nat.c +e4af274dde9c53d0bb58e46f8f75d17a gdb/m2-exp.y +014eb8959d1220a8e65e9817d5521856 gdb/xml-syscall.c +b9de1a3dadf00d5d8305bdd1049bd00c gdb/ia64-libunwind-tdep.c +492a895b56e38821f19c002848d5090d gdb/objfiles.c +df79a79eafc2d62ae5d2f2b908b850b3 gdb/x86-nat.h +e0c2f99108c1f9d01fd450064c893c87 gdb/amd64-dicos-tdep.c +85fe3c5f44f6907feac6fa81ea795104 gdb/frame-base.c +ff06deb824122343a6d9b6354b141fd9 gdb/i386-fbsd-nat.c +d40aa151564cc88f372996ccaa150001 gdb/ser-pipe.c +a4ece8bd48d2815e2d0696073aaef237 gdb/contrib/ari/create-web-ari-in-src.sh +cc8d134731adb22e93be3b88541c0bbd gdb/contrib/ari/gdb_find.sh +772cebb3e0665cd453a69f6a432c104f gdb/contrib/ari/update-web-ari.sh +8df308e0477aae6364df6c9c7aa55623 gdb/contrib/ari/gdb_ari.sh +c96750005f9e7204ec10a3a2c3650fdc gdb/contrib/expect-read1.sh +2820e8311661a6a49a22f03809354c02 gdb/contrib/gdb-add-index.sh +1cc7006d0630f4cddc4a4879a35df838 gdb/contrib/expect-read1.c +4e9593de3f4663882beb13af860fb815 gdb/contrib/test_pubnames_and_indexes.py +58aa6b2b3c1179df82f1017e56380ad8 gdb/contrib/words.sh +e417d04698f3aeb8d20decb0c6f7f64c gdb/contrib/cc-with-tweaks.sh +4e7dc647756214d51e2a327b6b832e15 gdb/i387-tdep.h +eb1feabb1140f8eebf3aa414df92d5fa gdb/ada-operator.def +504a3add230dab343fc65ef96c981ea5 gdb/xtensa-config.c +0a3c02ff700ce22b030d1f3ecd125993 gdb/hppa-nbsd-tdep.c +fe82a43dfa010f17b396772c306df367 gdb/maint.h +20aeafd12eb644242b3d543e8e172f9a gdb/solib-target.c +82006391860ef5bac2bc39eba913c2e0 gdb/sparc64-nat.c +9dc26d15cb379299865488c94c485852 gdb/aarch32-tdep.h +5d30e4cc8b1d3c8e7b1e6da4fafb49a9 gdb/amd64-linux-tdep.c +85dbe5a917df5b0cfd0957102b10cc5d gdb/stabsread.c +6895335a0a4aa7380a4b74f7df9485a1 gdb/gdbtypes.c +f55c7114043b5b8c8d9fc7271934d125 gdb/i386-bsd-tdep.c +9fcc181bdec0420b1ab15e0eea587e1b gdb/buildsym.c +e96e5a81d1d4f65e114b96fc27584b61 gdb/mips64-obsd-nat.c +daeeabdf5b7c625be3553c0aeccb6e89 gdb/agent.c +6721e927e3a5c65298a15206de56a38a gdb/arm-fbsd-tdep.h +a13796e2aa9b7e2e5f230ec41bcda9b3 gdb/memory-map.c +f7bbe37ba863fb7ecda1f18c54e93eff gdb/source-cache.h +d8adcfa44185174da5dba8494c3d9d6c gdb/annotate.h +8337d73440b536112d20576693f69a49 gdb/gdbcmd.h +5702fb5e43ec3c7ccb5cacc34e8ad199 gdb/arc-linux-tdep.c +e97b585e1242aa5d3f62492081baca90 gdb/thread-iter.c +c62605d9b5bba06d5147ab825de25271 gdb/gdb_mbuild.sh +37482b828422d82b2a60484a050930da gdb/buildsym.h +ecd86c0cb4b79f3b750b003297d07eb5 gdb/linux-nat.h +9ea7ffaad5aa141864ffbad3fd3c9404 gdb/ia64-linux-tdep.c 1f6b545be0b6822eca215d0b5f1edfc2 gdb/exc_request.defs -5bdd14a729da256eea19b62ebff370a5 gdb/run-on-main-thread.c -c53874119ace7c06845e8db930967768 gdb/ser-unix.h -4d3dfefd090aca1a7d0f93d95f9ee5bf gdb/m2-valprint.c -dce40429160bfb9f6b9469e86aeebfff gdb/ppc-ravenscar-thread.h -8aabaa12b91a49eb2dcf5196899dd19b gdb/i386-linux-tdep.c -c972f75c71cab426b7a2708c2ee81e98 gdb/extension.c -f7852e4648956ef56e617e0627a5e15a gdb/gdbthread.h -1d88343c2c31cbf3a13606c61f6f11c2 gdb/arm-wince-tdep.c -e547d196672ead983cd13fe3b175712d gdb/f-lang.c -11b40438f7645094cdde2369f8940337 gdb/i386-darwin-tdep.h -da71c479b68a4d95a79d36640b93c9c3 gdb/ChangeLog-2000 -ec3834177af40cfcd32abc39c7bb4a29 gdb/inflow.c -0a4365b7f709bd0c8a483814df63a835 gdb/dwarf-index-common.h -2aa08d6b84f87c0ec09be7a632ecb13e gdb/alpha-linux-tdep.c -9cc5d3512fe136205a5928255b3b9509 gdb/frame-base.h -309ed82bf2e83810ee2b29f92c24f7f8 gdb/cli-out.h -5e22574c79b445a7af603f8b2869c7c3 gdb/transform.m4 -b4b9624bcea06b0430a6081d11c32fd1 gdb/obsd-nat.c -94041b925b8960457531cbf7e03a41cf gdb/sparc-linux-nat.c -e48df10b35a05262fb3b2777cc91fd8b gdb/microblaze-tdep.h -74c0397549ad11d681599637c738e6da gdb/prologue-value.h -d24ebd07787899b47777d9ff4d63d442 gdb/proc-flags.c -ae84b0ced9bfee49a05f8b1f7726ac70 gdb/osdata.c -d7105d2530785ab371570d141bcd8617 gdb/mips-tdep.c -2d8fab8700638cde798bf94c7c1c7a28 gdb/i386-obsd-nat.c -9689d342d24db7651be7c60a566c15f8 gdb/auxv.c -7c07923f6528b30d536131edd92f7bbd gdb/gdb_vfork.h -a44800536619f5587e53663a77f934e6 gdb/tic6x-tdep.h -c56c0ab55dfb77188774314f1ef7ac21 gdb/x86-tdep.h -435f8a480887b4268c120069f900ac82 gdb/dbxread.c -614ebd7777b2b4b0f4aeda9f4406b1d4 gdb/ChangeLog-2011 -b53ac4c246ee0a230b7147cae2227f0b gdb/ser-event.c -001337d08686479a0cbefdba6336567e gdb/gnu-nat.h -0c047029b33b426ef42071e84faa01a2 gdb/i386-go32-tdep.c -49356f8f035f9622cd5944c9f3ef51bd gdb/m32c-tdep.c -2533cb264883c1dfe8f18a2dc177d55c gdb/auxv.h -a3a6a33270d5a39e8df943ee8f30b9fb gdb/solib-svr4.h -11d99140180e09c54bd9e74a074d3eb7 gdb/gdb_select.h -79ebe8b3365e184b4d8d1696414c5a97 gdb/linux-thread-db.c -901fc79afc84c32a4cc19f34dc90c608 gdb/bfin-linux-tdep.c -9e82de9fbfc1ef705bb6c7d3593f8f78 gdb/ax-gdb.c -7b753026ddaae3ffc9a6a66bf80f6f57 gdb/corefile.c -086681be1f3a6768fc52dd33a8446716 gdb/s390-linux-nat.c -5ab8558f88a2ca2cc13f7dc5c4cb64a2 gdb/frame-base.c -5052b57de2fd8b3515777bb814bcd394 gdb/ChangeLog-1999 -8c4440e0b4a0379fbda04a2df6c632fe gdb/m32r-linux-tdep.c -fe5c06283bc6776392a5ac3fac2c5282 gdb/tic6x-tdep.c -af0dba132b9e0431fc087647fe88d356 gdb/cp-abi.c -7ab41b16040047a57e61b09a97bf8e14 gdb/infcall.h -c1c61cdfcb214a382508f0642def7ef0 gdb/ia64-libunwind-tdep.c -1e18dba5d8e5b0a956afe31b9935879d gdb/inf-loop.h -16fe75c4d82bcc75dc4c5f39a54861c8 gdb/aarch32-tdep.c -3e8f9db85968c549a0e010eebfe58b4b gdb/gcore.c -e3b4a7d1d33cf02c46abf0f219f76e6c gdb/cli-out.c -101fd2ad9475d6357b0e339bc81a0847 gdb/source-cache.h -77001c43171b94c7a98f3b156ad41a88 gdb/gdb-gdb.py.in -50dc5d56218daa33e2243925affb47e5 gdb/contrib/test_pubnames_and_indexes.py -d886f88b03da49aa53b0bfa1705dc61d gdb/contrib/ari/create-web-ari-in-src.sh -e8acb7cbc9d5cc55f34ab50464a72009 gdb/contrib/ari/gdb_find.sh -75a64d903bf6941075aa037ff29fc9cb gdb/contrib/ari/gdb_ari.sh -b5d2aad17458b4017b288f60efe73836 gdb/contrib/ari/update-web-ari.sh -9abf9755c852572a5f81af1b2761ab57 gdb/contrib/cc-with-tweaks.sh -af5cc746736f501e33222d059a38b28c gdb/contrib/expect-read1.sh -bfc7024571e7ef042f7637380af19851 gdb/contrib/gdb-add-index.sh -d5814b8963b4a62f37b9c876321b3e0b gdb/contrib/expect-read1.c -b16977369fbd62b503cc0b72f8b1e422 gdb/contrib/words.sh -48e4338e40e3a68993c379264e3f2563 gdb/regformats/arm/arm-with-vfpv3.dat -c016ee34079bfc9541a8b1aeb90092d1 gdb/regformats/arm/arm-with-iwmmxt.dat -75c6e70590ff84e05b7853740f417fef gdb/regformats/arm/arm-with-neon.dat -157446984c99867172fcbe0e4b072b36 gdb/regformats/arm/arm-with-vfpv2.dat -48d1a625808e90b1e2f99017b2a1d126 gdb/regformats/s390-linux32v2.dat -40ba412a0b4d6cebeef61c90e6f6629d gdb/regformats/s390-linux64.dat -b7986be86b460d6dcdc745c89639d712 gdb/regformats/s390-linux32v1.dat -f548472e3d5eb277710a2e79e6ec84a1 gdb/regformats/reg-cris.dat -062213141aa7079c5b2c16a610e7abc9 gdb/regformats/tic6x-c62x-linux.dat -005b8fb2229cb88ddcc03a5d3fce3ded gdb/regformats/s390-vx-linux64.dat +f0711870ca7941bdd1ae876f19721106 gdb/ChangeLog-2012 +3f3ea5cf7da5f448fbf97a96c05f9d7d gdb/dcache.c +bc8a0ff6a24a848090cd527b2b978b7a gdb/sh-tdep.c +6d394155ed7fddea2fdcd8a5bb5339d7 gdb/amd64-darwin-tdep.c +6d37be94e9198df4064a1d519726ca59 gdb/reggroups.h +313fa0e4cb893e36a0dc6da98f2077c0 gdb/x86-bsd-nat.c +f7254f629ee55ad95b9a405e9d93a6ec gdb/gdb_obstack.c +db5cb5d17325a1313e6a04a2171700aa gdb/arm-fbsd-nat.c +908c561d5456f81298e2c61fb817c529 gdb/record.c +21cb0bc67b09693334019fafcb44af46 gdb/obsd-tdep.h +20530f7d5cfb364b63e08777ae0a14fc gdb/i386-windows-nat.c +39f1f6873cb52c61e03dccbb373e89c3 gdb/memrange.c +9198f7b1807c968098814aa2a3901aee gdb/gdb.gdb +11de2bdcd691b6a3e1a422aaa2719ebd gdb/gnu-nat.h +998b4a6529288ae4e9ec1246728ab02f gdb/alpha-linux-tdep.c +42caaf7dcd3f939126f3063e17c06161 gdb/ada-lex.l +cbb4bd69b103259fb5f044143d9c4cd6 gdb/fork-child.c +7e11bc7e633fcd0d07803a0a53d0c4b5 gdb/maint-test-settings.c +2e498c6f22ff9650e11de8134da1f3ef gdb/go-lang.c +e7b3140414cd87693be2642774e397ea gdb/progspace-and-thread.h +0a276233d979f67be7a4feb643f27291 gdb/obsd-nat.h +400cf7f8ccb03b259031f57880e07b0e gdb/or1k-linux-tdep.c +4d5c9bf72501613e66483fd68e3869d1 gdb/sparc-tdep.c +93b3468f0d121c37d350a22c1b7e40d3 gdb/proc-flags.c +f78da5338c4737a3ba2c03fcd8ed53b5 gdb/amd64-windows-nat.c +657ed262c66093acacf0ccf85f97c55c gdb/regformats/reg-sh.dat +856d0743c2c4d22c48c9bfd4bee975a9 gdb/regformats/mips-linux.dat c650790932c3ce82d781ba6de87a578e gdb/regformats/reg-sparc64.dat +927dd66f0dbf9a1e01fc93010ad58708 gdb/regformats/tic6x-c64x-linux.dat +40ba412a0b4d6cebeef61c90e6f6629d gdb/regformats/s390-linux64.dat +9762013512fadae6aa4eb1f3a9d25d3d gdb/regformats/s390x-linux64v2.dat 7d521124886bd1a212ec6ac542743020 gdb/regformats/s390x-linux64.dat -7102f1bedd1a2fa9b677437166b92c40 gdb/regformats/s390-te-linux64.dat -804cd0c318f49e2da247a3f965fcb5b6 gdb/regformats/reg-m32r.dat +38e9633f3a9baf91086b22c727663476 gdb/regformats/s390x-linux64v1.dat +a9c638174fdfa3b270bf4560e0667629 gdb/regformats/tic6x-c64xp-linux.dat +e0b6c5c0fdf686a7b6112b6ea216d7cf gdb/regformats/regdat.sh +65d09491384f795e805f9d3e79f6c0e0 gdb/regformats/microblaze-with-stack-protect.dat +57281652c787f8c4c6f5e34e2fd64460 gdb/regformats/s390x-gs-linux64.dat 0d2da26a79c9d2705465a5afe9fdab08 gdb/regformats/s390-linux32.dat -78f28809cf98268afee34d9075813847 gdb/regformats/s390-gs-linux64.dat a1c09888ecf3221afc983f497bf2c032 gdb/regformats/reg-ia64.dat -bef5bf10bd95f895b4c1417232201779 gdb/regformats/reg-tilegx32.dat -767b3762219584b4953a737251b6347f gdb/regformats/reg-m68k.dat -c7c866286a3245c530d00bdf7b7e3116 gdb/regformats/reg-crisv32.dat -57281652c787f8c4c6f5e34e2fd64460 gdb/regformats/s390x-gs-linux64.dat -de9360bc7bc27d3795e5d58de9303f94 gdb/regformats/rs6000/powerpc-isa205-64l.dat +68c2f73b8122d4023738fe69876efc56 gdb/regformats/s390-linux64v2.dat +8bb9cf5ee8795ae00ef520340b067657 gdb/regformats/regdef.h +071369803c3aba386e15e14a3328bf55 gdb/regformats/s390-tevx-linux64.dat +062213141aa7079c5b2c16a610e7abc9 gdb/regformats/tic6x-c62x-linux.dat +d96faffb9bddad65bb6ef42a6e646bab gdb/regformats/mips-dsp-linux.dat +a1f5406c5d581a074d315e288d20d189 gdb/regformats/reg-cf.dat +649dc3a9cda4e6af78d3841bbd6dd87e gdb/regformats/mips64-linux.dat +c67b2b2b626f63872d35e77d7845e9b6 gdb/regformats/mips64-dsp-linux.dat +48d1a625808e90b1e2f99017b2a1d126 gdb/regformats/s390-linux32v2.dat +6c44ad193d2976f1ea8ae411875fdf2d gdb/regformats/s390-linux64v1.dat +824208fa84cc25216d1198884d378642 gdb/regformats/rs6000/powerpc-isa205-ppr-dscr-vsx32l.dat +a3d3acff1d903e7a9e8c012aa4c2b562 gdb/regformats/rs6000/powerpc-altivec32l.dat 0ceb8d8c4de4ec95ac10edbfcbc7b83a gdb/regformats/rs6000/powerpc-e500l.dat -21aeb783caf98f30df5f424e15596f10 gdb/regformats/rs6000/powerpc-32.dat -02740feb3637d2b1dae359a0ec847856 gdb/regformats/rs6000/powerpc-isa207-vsx32l.dat b28373273b7ddc32c30c5a0f9bf94112 gdb/regformats/rs6000/powerpc-isa205-vsx32l.dat +118bb6602132d2af53c9fbdb6e0fd5a1 gdb/regformats/rs6000/powerpc-64l.dat +c1a2013b0acda7beb71a8e8c221ee6c1 gdb/regformats/rs6000/powerpc-vsx32l.dat +94971b6efbfee04cd1635005a1be5bad gdb/regformats/rs6000/powerpc-isa205-vsx64l.dat 2ea607f9ced77ac6a49cd464ae9f1834 gdb/regformats/rs6000/powerpc-altivec64l.dat -248ba0ef3901284f380e6883e189eefd gdb/regformats/rs6000/powerpc-isa207-htm-vsx32l.dat f3fd12ba7974ac3dc18a14246b2d1252 gdb/regformats/rs6000/powerpc-vsx64l.dat +21aeb783caf98f30df5f424e15596f10 gdb/regformats/rs6000/powerpc-32.dat +02740feb3637d2b1dae359a0ec847856 gdb/regformats/rs6000/powerpc-isa207-vsx32l.dat 275eec91bc289c0dd0d2c3776d0a1273 gdb/regformats/rs6000/powerpc-isa205-32l.dat -118bb6602132d2af53c9fbdb6e0fd5a1 gdb/regformats/rs6000/powerpc-64l.dat -a3d3acff1d903e7a9e8c012aa4c2b562 gdb/regformats/rs6000/powerpc-altivec32l.dat -94971b6efbfee04cd1635005a1be5bad gdb/regformats/rs6000/powerpc-isa205-vsx64l.dat -596006b276b01ec86e018e93555f58b0 gdb/regformats/rs6000/powerpc-isa205-altivec32l.dat -09daf25cefb6deea478cb528a48c9d5f gdb/regformats/rs6000/powerpc-isa207-htm-vsx64l.dat 8f7c488f53407420fc266e9561e46097 gdb/regformats/rs6000/powerpc-isa205-ppr-dscr-vsx64l.dat bc486ecca2fd0c52c52b02036289ec3a gdb/regformats/rs6000/powerpc-32l.dat 6d8d9563b1237674548090d3d82db49b gdb/regformats/rs6000/powerpc-isa207-vsx64l.dat -c1a2013b0acda7beb71a8e8c221ee6c1 gdb/regformats/rs6000/powerpc-vsx32l.dat -824208fa84cc25216d1198884d378642 gdb/regformats/rs6000/powerpc-isa205-ppr-dscr-vsx32l.dat +596006b276b01ec86e018e93555f58b0 gdb/regformats/rs6000/powerpc-isa205-altivec32l.dat +09daf25cefb6deea478cb528a48c9d5f gdb/regformats/rs6000/powerpc-isa207-htm-vsx64l.dat +248ba0ef3901284f380e6883e189eefd gdb/regformats/rs6000/powerpc-isa207-htm-vsx32l.dat +de9360bc7bc27d3795e5d58de9303f94 gdb/regformats/rs6000/powerpc-isa205-64l.dat 9964e673bb798f9d2efa90b8455e7e62 gdb/regformats/rs6000/powerpc-isa205-altivec64l.dat -a27f10bdee3fe8f1423eb888c7c16837 gdb/regformats/regdat.sh -6c44ad193d2976f1ea8ae411875fdf2d gdb/regformats/s390-linux64v1.dat -d96faffb9bddad65bb6ef42a6e646bab gdb/regformats/mips-dsp-linux.dat -a1f5406c5d581a074d315e288d20d189 gdb/regformats/reg-cf.dat -657ed262c66093acacf0ccf85f97c55c gdb/regformats/reg-sh.dat -649dc3a9cda4e6af78d3841bbd6dd87e gdb/regformats/mips64-linux.dat -c67b2b2b626f63872d35e77d7845e9b6 gdb/regformats/mips64-dsp-linux.dat -72e3d680eb05c6111d3ad8ac29ef52d8 gdb/regformats/s390x-tevx-linux64.dat -9762013512fadae6aa4eb1f3a9d25d3d gdb/regformats/s390x-linux64v2.dat -af2244f4f4df3b1efe1f188b3b2c78a7 gdb/regformats/reg-arm.dat ccc2e6c9eebe99b681af91142607fb6e gdb/regformats/reg-xtensa.dat -b09b0ee5da44df728eb552f6bf6ed138 gdb/regformats/reg-tilegx.dat -38e9633f3a9baf91086b22c727663476 gdb/regformats/s390x-linux64v1.dat -856d0743c2c4d22c48c9bfd4bee975a9 gdb/regformats/mips-linux.dat -a4c831a178c251888eeb8c4ebbc573fe gdb/regformats/reg-bfin.dat -a9c638174fdfa3b270bf4560e0667629 gdb/regformats/tic6x-c64xp-linux.dat -071369803c3aba386e15e14a3328bf55 gdb/regformats/s390-tevx-linux64.dat -65d09491384f795e805f9d3e79f6c0e0 gdb/regformats/microblaze-with-stack-protect.dat +b7986be86b460d6dcdc745c89639d712 gdb/regformats/s390-linux32v1.dat +7102f1bedd1a2fa9b677437166b92c40 gdb/regformats/s390-te-linux64.dat +3b2476262f56380b7ca4799bf2b32b25 gdb/regformats/s390x-te-linux64.dat +78f28809cf98268afee34d9075813847 gdb/regformats/s390-gs-linux64.dat d33a71319657eba589e8388250ae68a9 gdb/regformats/s390x-vx-linux64.dat +72e3d680eb05c6111d3ad8ac29ef52d8 gdb/regformats/s390x-tevx-linux64.dat 44fa14e15b931dc63422873dc3a5aae1 gdb/regformats/nios2-linux.dat -3b2476262f56380b7ca4799bf2b32b25 gdb/regformats/s390x-te-linux64.dat -68c2f73b8122d4023738fe69876efc56 gdb/regformats/s390-linux64v2.dat -927dd66f0dbf9a1e01fc93010ad58708 gdb/regformats/tic6x-c64x-linux.dat -e646e8b4f07681f8335d61d6aff66e65 gdb/regformats/regdef.h -e6aa62ab99abeee26ecac799ea3721d7 gdb/inferior.h -aa10d32a8e13a4351b93b946709a241c gdb/m68k-linux-tdep.c -008edef9eb52205ad53f92e4ba02fef3 gdb/nbsd-nat.c -d604b6e1a602fe3ef138f24be7eca6ad gdb/f-valprint.c -ef6152a9a9a3a1a90a5571d80374cae1 gdb/addrmap.c -47bb9b28d951cc90075b25372761c057 gdb/cp-abi.h -24e00786c3c31ff4e5287510ad3adf45 gdb/std-regs.c -51ad1ffa2a00003cd2fee6f0e472bb91 gdb/target-dcache.h -396bee04e68b94acf5e77eb18570e899 gdb/x86-nat.h -3e75614b35c05661cb064f452cf0781d gdb/mips-sde-tdep.c -f469bc8f656ebde4beb19750ab6cc497 gdb/i386-obsd-tdep.c -a43c9fccc76b2f43a0006e8fcf2a312a gdb/iq2000-tdep.c -a701f15099419baf1be0c13b9e89e65b gdb/nios2-tdep.c -c923fbcaa47240f82d7ef756c59c87ba gdb/ChangeLog-2001 -9a114505bf24045705882b44fdb344a8 gdb/observable.h -267e29882c4f54cf91ff356ce6beb86f gdb/aarch64-linux-tdep.h -539b33fd1d7eb027343a8d2e58c2640e gdb/arm-pikeos-tdep.c -4f14bf309c45a22774ef54133885349c gdb/config/sparc/nm-sol2.h -3386a7ceb792982f14022f3d27cc5464 gdb/config/nm-nto.h -b3f54062e575060d6506d0d868c10526 gdb/config/nm-linux.h -9b968677b52b8cead46a0f78e3c24932 gdb/config/djgpp/fnchange.lst -19d706bb9dbfa78d44057f8636553582 gdb/config/djgpp/djconfig.sh -cdc11406d9e6e5c91f7643088983ff30 gdb/config/djgpp/config.sed -51f64f0924a8a3df8c2278f506f15c0f gdb/config/djgpp/djcheck.sh -90603de4ee92b3a471aa006c5162ad22 gdb/config/djgpp/nl_types.h -6f77e81e9901631d875f51e72983e548 gdb/config/djgpp/README -c80b9f8ffc015ccecface844edb1bd9a gdb/config/djgpp/langinfo.h -04a5f174d1213f8710bc30fa37333019 gdb/config/i386/nm-i386gnu.h -30492c373724f4f08197599268732b67 gdb/config/i386/i386gnu.mn -10c19fd4e094435d9b8a7b1ed5534bf2 gdb/jit-reader.in -fa503072cfe3b26dc16860e71988fc17 gdb/version.in -aa7980561197459148c1cb3320c6978b gdb/mn10300-tdep.h -ee5f9790b03a16070a41219759a6d966 gdb/minidebug.c -31c83b4bb1c5c9c771fe8e1ec3f1e9ba gdb/msg.defs -36e724dbd8dcd89cea5df611fa055001 gdb/inferior.c -cf991fe14062293c68a2b40840621813 gdb/ia64-vms-tdep.c -1272995fe2860ef8a8b47f98b64e101f gdb/gdb-demangle.h -3b5e6ee2d3df339732a96aa6bcf02747 gdb/dtrace-probe.c -55691070bc898180dd3aaddd2ceff4b1 gdb/target-descriptions.c -8b5c83971cd78a9c1f2662269f989915 gdb/ravenscar-thread.h -7b8a5048cfb6f899a8199897f0864c8f gdb/ChangeLog-2005 -0fe0ffa63644e9c053d7e7db1698f020 gdb/tracepoint.h -3ce54c5301f66a946619fd9265ef8af6 gdb/proc-api.c -99929efb542d75d3cb4e5f172d9ac9cb gdb/nbsd-tdep.h -bddf7a79ee068bc38ca7255a135f4b7d gdb/or1k-tdep.h -9c2a879d0a19e3e74363e0c244a936e9 gdb/xml-support.c -9dab4427eb4f75fecbb65eb31ed0b599 gdb/csky-tdep.c -932326f0e7e6d3fffd1609037828568b gdb/cris-tdep.c -559d975bca7feec1e6a36f791fd65ef0 gdb/gnu-v3-abi.c -c489ea41cfe9ef55f2a2fc4b0763d836 gdb/gdbserver/symbol.c -93e19bc154e38bcd85a57c6a54dd19ad gdb/gdbserver/linux-x86-low.c -16b20cf24a450e7e4165fd76e55b10ad gdb/gdbserver/lynx-i386-low.c -a8e1cfc5a2908c5497180892b10d70e7 gdb/gdbserver/x86-low.h -c5816e75e4dfa65961eada24ba082c71 gdb/gdbserver/lynx-low.h -6b5dfa4e2deffd307e56460f7c1d6923 gdb/gdbserver/nto-low.c -679beb3ec99990b8fede36f43fcf7457 gdb/gdbserver/ChangeLog -2fcb0dd4c2b1fc96dee1c2ee20086fde gdb/gdbserver/configure -3dfff407668b1874af8e92217a0e9321 gdb/gdbserver/remote-utils.c -4d695b2de449cc221740e4b97cbf1857 gdb/gdbserver/linux-aarch32-low.c -2bdfb36c1e5d0dee0f7083c7cea4211e gdb/gdbserver/dll.c -a997df0579af72f63bfcee2f21310ffa gdb/gdbserver/linux-amd64-ipa.c -5a82b601270842edee1eb53bda73a050 gdb/gdbserver/inferiors.h -47219bde6343f4f98efd0261c4d060d8 gdb/gdbserver/notif.c -976f82dc5431f9bc7c8d17407b43e854 gdb/gdbserver/win32-low.h -1c280fb6fa7b0fa76ef113dc5ad060b0 gdb/gdbserver/fork-child.c -6c7b759b702f5ae929b5b73e63dc51b0 gdb/gdbserver/gdbreplay.c -b5c4b027f3f819b39212683ef792e633 gdb/gdbserver/linux-ppc-tdesc-init.h -546e0a65a43068ea89cb37e5eb75a9ed gdb/gdbserver/win32-arm-low.c -7c19c5e85623f8fc6d03354c6b9aede0 gdb/gdbserver/linux-s390-low.c -6e3170899428f181c0446ed07f5427fc gdb/gdbserver/configure.ac -addb01a9df56f2c60c3d8c38f9b527bf gdb/gdbserver/wincecompat.h -fc5fa3f94cfb9d26db5f0b13484e8a09 gdb/gdbserver/inferiors.c -64e4ae23225f14fc0b3d4747949848e6 gdb/gdbserver/server.h -8369094854f09169e31a7072531c2eb5 gdb/gdbserver/lynx-low.c -6e4b3adbd87ebe11e851984f94c9a4d3 gdb/gdbserver/linux-s390-ipa.c -068f24bbd9aed5175aa568d689b1f17b gdb/gdbserver/linux-sh-low.c -c788987dea50b97b615456641fbd335a gdb/gdbserver/proc-service.list -995acb30c8ce0222187bea9645b838c3 gdb/gdbserver/linux-i386-ipa.c -77b07eca0f8608aa3487796f274ca62b gdb/gdbserver/x86-tdesc.h -f3afa8964377df956f52f3d764be23df gdb/gdbserver/debug.h -311faad66a5c3d71928b8e6416bb56a5 gdb/gdbserver/i387-fp.h -bf7f5d2b4447e9035dac161536cb276f gdb/gdbserver/nto-x86-low.c -886ebc6450cc69f74d2fcf7c0af6feaa gdb/gdbserver/mem-break.c -2b642537f86ed693e6bac3a245aa3bd5 gdb/gdbserver/linux-tic6x-low.c -870d6aa5d53adbe07b162c8f1c64cf22 gdb/gdbserver/dll.h -c3283929625fa938b4d42bea830f39fb gdb/gdbserver/linux-ppc-low.c -942cde6f6d4cb62ba2d4a6c00c51127b gdb/gdbserver/linux-x86-tdesc.c -c43ede2ab740e5a3ef5a585dbb714699 gdb/gdbserver/ax.c -92d85a4c1e5bbbd5249299f28db02e8e gdb/gdbserver/xtensa-xtregs.c -602ab3fdde764af53aff8f623c361abe gdb/gdbserver/linux-low.c -d100b7d97dd078769aaea24e1e36ce9d gdb/gdbserver/regcache.c -77d6f5de7ba01a2c731447f9a74d5b01 gdb/gdbserver/linux-low.h -90e9223da8f5e5480537a6b2538b6a33 gdb/gdbserver/wincecompat.c -f5bc14cbf98a4b3ad65d047e29e48927 gdb/gdbserver/x86-low.c -48dc03055a3d464cd69752250460869e gdb/gdbserver/gdbthread.h -5378967e9ac3bd3a6ca98642ec0f6d32 gdb/gdbserver/hostio.h -c67d3e28eef2be615f9c74ca7a36d39e gdb/gdbserver/linux-aarch32-tdesc.h -8c9e2f4aed9d48d2ea8c1b00c1ac2028 gdb/gdbserver/remote-utils.h -a171628cc5df6b5ccabe922b28ed0b8b gdb/gdbserver/linux-xtensa-low.c -d3cdf350397586784bc27a4e6b113a90 gdb/gdbserver/hostio-errno.c -ff9a1d1f6d71d1941a4a1056a90269fb gdb/gdbserver/tracepoint.h -1eb7da3bed9a205653e63f0b56b6aea2 gdb/gdbserver/linux-arm-tdesc.h -14e3f51a1c926c2938db5a287828196b gdb/gdbserver/aclocal.m4 -e061d1902f288e78865ac65e4341315d gdb/gdbserver/linux-aarch64-low.c -2f011bd2755c7874f4b3e9682b516830 gdb/gdbserver/gdb_proc_service.h -161a2bcfdb6bb25228b9df9774585893 gdb/gdbserver/i387-fp.c -117ca7c66926a45a859c23ea406f929d gdb/gdbserver/.gitignore -75d20eca2ef12eba2029f0455b1b93ab gdb/gdbserver/configure.srv -95344f92871456987e04e23a40939c4f gdb/gdbserver/tdesc.h -f52590f2da261d6c0e401d3f871f1886 gdb/gdbserver/linux-m32r-low.c -5bdb59f97aa0f14d415541b1d5e7708a gdb/gdbserver/thread-db.c -66351e0f24c73b78a9cbb29a5d81b2fe gdb/gdbserver/event-loop.h -311d1a5a33d6e0a152b94d29a34744b7 gdb/gdbserver/nto-low.h -b29cb1a6b4540d16ef638034506d5424 gdb/gdbserver/linux-aarch64-tdesc.h -cfea92eaffa19d4a23087bdf20b2e629 gdb/gdbserver/linux-tile-low.c -441e418c6c6515ff9d9f210c18400c2f gdb/gdbserver/acinclude.m4 -edf0022ab85faf3b0bf1fbf64c92de7a gdb/gdbserver/regcache.h -791b58ddf159b59c7d9375e2c2f00a07 gdb/gdbserver/README -2730e84d9cf0bc6904fd8f6862c6f5d4 gdb/gdbserver/notif.h -4e006aa416aeb2dd86ec49532e66b8a5 gdb/gdbserver/config.in -5cd48111858832741d31b18bacb07176 gdb/gdbserver/target.h -68f0b54c8729b12fadbc232b50f1239e gdb/gdbserver/debug.c -f42abbd94b7ddbf6f113346ed7440864 gdb/gdbserver/linux-aarch64-tdesc.c -de1a08e8b6c2a56c89589f58ed34132f gdb/gdbserver/linux-cris-low.c -ba5f802b44e89ab8eb09e65e18b4e4e0 gdb/gdbserver/linux-x86-tdesc.h -a1adbb0c049b46a1922ffe8d6121db43 gdb/gdbserver/linux-aarch32-tdesc.c -f3eb96323e5bf888d8da693f043ca427 gdb/gdbserver/target.c -862fc670df6c28cb8c829ac38c738b4d gdb/gdbserver/linux-bfin-low.c -808f65dd31595112736d2cbb044be3f0 gdb/gdbserver/server.c -b3b520f65036a56864bc401a9449bf45 gdb/gdbserver/utils.h -6bd4a4002ae7f18d8e38a304d7f90ec0 gdb/gdbserver/linux-aarch64-ipa.c -f8a8eae2c039917932eb915e18965f8e gdb/gdbserver/ax.h -8758a54c01f5c39397df3761a8241146 gdb/gdbserver/lynx-ppc-low.c -0899ba18e2ff2140f3d832e1b8a93f0a gdb/gdbserver/event-loop.c -92f3ff243c305b9cb70fd3783a5a42ec gdb/gdbserver/linux-s390-tdesc.h -f9108ff55f81a2314e7ef8433d7cb6fc gdb/gdbserver/linux-arm-tdesc.c -211e5ad9d170578f90ed05631720a98f gdb/gdbserver/linux-aarch32-low.h -b942fc45e0967ce52c9019b4be02a8f8 gdb/gdbserver/win32-i386-low.c -a0d1b3c558fcd0bb52430cb6938fb072 gdb/gdbserver/win32-low.c -c8521dea7e067f1bd552a97255a562ed gdb/gdbserver/linux-m68k-low.c -c1cd72461022425bb2308d843dfecd35 gdb/gdbserver/hostio.c -f4dfc2114da11054159f5f7635ffd124 gdb/gdbserver/linux-nios2-low.c -3f85ce42adc98b9cb81ff0fd4f9d3d1c gdb/gdbserver/linux-arm-low.c -a437e59510c38418d5e48d892bd3d07b gdb/gdbserver/linux-ppc-ipa.c -d8dd542dae016734f206c6830b19a7eb gdb/gdbserver/tdesc.c -eb3f09da660bbff71ea32d076fb49f99 gdb/gdbserver/proc-service.c -2f36550fd8245e2b41936ecd34d2342f gdb/gdbserver/linux-crisv32-low.c -36b1048a507f18f619c2a86039f869db gdb/gdbserver/utils.c -174aedbdab01642189fccdffd673c4da gdb/gdbserver/linux-ia64-low.c -bdd2d24e969956925869d958fab1e837 gdb/gdbserver/tracepoint.c -a1c7b46c489f3e0d17231bf01edeeea4 gdb/gdbserver/linux-mips-low.c -7051bf42ea3c6cd97d6a32ec203a55aa gdb/gdbserver/mem-break.h -4208aa848f4c8c00f4d5d96031b06616 gdb/gdbserver/linux-sparc-low.c -e9825c5cd9623c53072b790d555e2eba gdb/gdbserver/Makefile.in +005b8fb2229cb88ddcc03a5d3fce3ded gdb/regformats/s390-vx-linux64.dat +767b3762219584b4953a737251b6347f gdb/regformats/reg-m68k.dat +7d9f1ed562fb06a3c46f80ad92a360e7 gdb/fbsd-tdep.h +80362db297ff91418a81df0d4ade915b gdb/ppc-obsd-tdep.c 9d9baf6ee79baadc2a660370cb2c1afc gdb/gdb_indent.sh -434fb05f0ab067bc8870f52e3e6c8f76 gdb/c-valprint.c -2ea7cff28a922f84e6a33e423ffe50c1 gdb/aclocal.m4 -73ff81d7ca3612e32f29c6f5fc9bec63 gdb/CONTRIBUTE -d63c270b0dadcd8c5800707df26d26fa gdb/windows-nat.h -2cccadfa577b0ce262c8c012f3e929b9 gdb/arm-fbsd-tdep.c -5a27ff20a356836d82717fc03517b0f6 gdb/sim-regno.h -b9883e14bdc1961b67c10e3d1432f00a gdb/sh-nbsd-nat.c -2681f71f1a2e467751e8d2fa8dac61d1 gdb/i386-bsd-tdep.c -5ecff71a793b659429737d720f231d52 gdb/gdb_proc_service.h -5ee93717a1c314c43af2543250e4b8fb gdb/arc-tdep.c -bc39d6359efd29ad784468f98a8ddd3f gdb/obsd-tdep.h -838d2cd7203a38c1c6e79c22789477fe gdb/memattr.c -6098931a6924b7cdfcc3d58ec0154933 gdb/i386-windows-nat.c -f9feae7f7efbe2125b0a0f19b4559842 gdb/thread-fsm.h -064e526226f5a587ce1b2e1966b84300 gdb/buildsym.h -46d4d315ccc5bbd3d3c8a7489262aa53 gdb/.gitignore -605d9311c97d6ed0796e7e9bc4aad7b1 gdb/dwarf2expr.c -34d9c1aa81f4ef694bf4a8b12484694f gdb/ppc-linux-tdep.h -4da0884ddaad786c53e3962143a17abf gdb/location.c -3d0d9a2b7129100db7dcf42081c83ad7 gdb/cli/cli-utils.c -175b30467c179c4ab70425eabb1526e0 gdb/cli/cli-option.c -57f13ed2f1c387d40b43471b375937fb gdb/cli/cli-cmds.c -6778e6c8d56a50e37bd1bfe60f2ca48c gdb/cli/cli-decode.c -f2957d85ce251a15fbad1ad6cc4975a3 gdb/cli/cli-style.c -0b0d30c74f9d46ef9b586a8f4c29b11c gdb/cli/cli-logging.c -2e16c39d112b607c95a4decd3f4831cf gdb/cli/cli-cmds.h -ff82c945bbad8a58eca236e5c17d7380 gdb/cli/cli-setshow.h -4537246a7c16dd39e2388e290865a560 gdb/cli/cli-script.h -dd35fb8e6bd62851764c3cf30199a446 gdb/cli/cli-utils.h -bc0636d2e06be9ea6f7d5d05acdc42d3 gdb/cli/cli-setshow.c -4d9805a67127c0bac897110dcb184ff0 gdb/cli/cli-decode.h -ed96a12e4592d5a322a8ddc4a4c9a04c gdb/cli/cli-option.h -b3d09159e85d08bd950d7693ce566ccb gdb/cli/cli-dump.c -f92873cbafad931e1b021be1cc53a246 gdb/cli/cli-interp.h -7be005ed6efa53bb163683166c5fdf22 gdb/cli/cli-script.c -0abb51e4b8f0695cf25389bc9a52d7d0 gdb/cli/cli-interp.c -e8a8598b37998e11dcc7235f09aa5e5f gdb/cli/cli-style.h -a7bc508464f5aa7d1ddf9925bdf94ff0 gdb/solib-frv.c -892a5b9f5c385f0829b37ce28548e198 gdb/sentinel-frame.c -767870d23c5af3c27cba1611ef9a67c6 gdb/solib-aix.h -3cd7edf5005c93fb58225a64871bc251 gdb/ppc-ravenscar-thread.c -46995a2e88f6130dcc9c4fdb40e75068 gdb/varobj.c -384ca32e0d8bdf75f817a63f31dc4755 gdb/inf-child.c -d3601e77cae4c653665f901997d2cae9 gdb/psymtab.h -c7e2eced252e18c8be5e27176664ec3d gdb/ser-base.h -50ca826e139a121e3cd365615c34ed58 gdb/cp-support.h -a7c8c3a7ea6b26d55273a1125042b563 gdb/configure.tgt -612efb97b0e06719d3009a9b6aac6a7d gdb/command.h -0dc6371667d53797b815ee6074388dc5 gdb/event-loop.h -9bff16c52d94854b6902b273799eb5bb gdb/amd64-linux-tdep.h -7f31b6ef2b41dabd6229402115d3d181 gdb/bsd-kvm.c -e26b32738adff50ab9e3bf959c0a57e1 gdb/inf-loop.c -32e137af5d77f1219e3083e990915ab1 gdb/csky-tdep.h -9595310e91f84e6c2065110fe22e6b1f gdb/hppa-obsd-nat.c -b466baee4bf5a1d75e0027c1ef7bc725 gdb/xtensa-config.c -395f699eaf2313cf57c4b9bf50bf0ade gdb/gcore -67cf3be540a388b1e8b230876e655a55 gdb/aarch64-newlib-tdep.c -884bc61c3c41fb3d019aa01102e8228c gdb/remote-sim.c -8ada72904d9c4b79d920b7eef5340257 gdb/hppa-linux-offsets.h -8172cee4555fd915c99493dd02eb867c gdb/sh-nbsd-tdep.c -8bfa1ee822a90fd61cfc4a32108e6552 gdb/solib-target.c -452b9115bef315ce925447a1b63117fa gdb/gdb-code-style.el -d381bd4b7de0d87dd31f519c775591c1 gdb/mips64-obsd-nat.c -005ced3d1db15a25b0791e7665f363a9 gdb/hppa-tdep.h -66ba343964734b14c02a3b241633852e gdb/d-lang.c -584fea125ac9e9f4844978e714b0893e gdb/blockframe.c -f9211288da1b5170dc6f672125f6966e gdb/x86-linux-nat.h -27946c7bbac1a8aaf5c93ef5236b2d2b gdb/m32r-tdep.h -263e800810eac2024eae03f66db02c83 gdb/selftest.m4 -219ebb43e94fd9cebe0e7e7959462eb1 gdb/dictionary.c +20440ad04e11f630a8e0812f80d94431 gdb/aarch64-linux-tdep.c +e06eed9d23ddd853f678b6a9fd5811ee gdb/xtensa-tdep.h +ce2a83222c260f65a660bd6a9048ebbb gdb/gdb-gdb.gdb.in +a3e02e90f5d0045b16a4444b419519c0 gdb/expprint.c +8d8abd71aed1eadf2bbf6a2e877d8629 gdb/remote.c +8f99a68eb3aded1e61868df58d371bf9 gdb/ppc-fbsd-nat.c +9e89a466b4ad86dedaec5b59a31c5937 gdb/debug.h +f1eb5a2ae523853aab242ba20da36cbe gdb/xml-support.h +72512df3fcdba041a17e08093e338f04 gdb/namespace.c +5b66060b764e8377904adf5f8a2e251a gdb/arm-tdep.c +d755e9ceafd1b72a52ce98117341207c gdb/ChangeLog-2005 +99295e2461f093b0d336b7caa91f6de4 gdb/ChangeLog-1993 +839801f5d3cbf76c949f3464e86fd3e4 gdb/sparc-sol2-nat.c +8d143c9a30f26ec6b5faf1979317c1ad gdb/gdbcore.h +dfa74c01e8352a86e6cc36ebcb9d3e9b gdb/c-varobj.c +3039d34c8102153ba627112fc63a31cf gdb/linux-tdep.h +dd79e33c5964dfdc1cee4720481b8465 gdb/yy-remap.h 24096aca3294cab3717506c2c69a7272 gdb/msg_reply.defs -84fd2e1487d576818c1ca01c5ea38212 gdb/linespec.h -2943fb137b88cb733c98a7ff3525ad1c gdb/ppc-obsd-nat.c -847c464e5d08f287bf600435f12e7bc0 gdb/solib-target.h -ecc6e30a6a826a4b43f2d09e7d78c39c gdb/sparc-tdep.h -8fa8627bbb1ece828c653236d3fef807 gdb/i386-darwin-tdep.c -8fe365fd4fc24f63b7ea790c7cbdaf1b gdb/dictionary.h -a4d12d51ef31023cda2d49c8ecec5edd gdb/source.c -98c9395cce6ae682f334b3c80977e605 gdb/d-namespace.c -40e772b3bdd2d8e0226a1189174b5158 gdb/riscv-fbsd-tdep.h -430c36061d4a13de6b4dee0b030b5db5 gdb/warning.m4 -08a40c5782047921e28ae852081eb2f5 gdb/cris-tdep.h -fa21770081cc2713317d592743e8e25e gdb/acinclude.m4 -14e1032573175f666daf57b07d34bba2 gdb/amd64-sol2-tdep.c -684574cc21c551192c9304ea6ae7da65 gdb/glibc-tdep.h -9ffcf1cfbd809603b9a8b7621d8ca3d0 gdb/regcache.h -45be36b37684060a76437ccf4e286122 gdb/gregset.h -4db7aebc2da9f03e19f8e8664ad9baee gdb/rust-lang.h -cc4a8d780d09dfb64ad4a3f9e65f97ce gdb/README -314b09215735e5025da03c1d264ce266 gdb/solib-darwin.h -70be01cf2b1d9c6ee5bed71b3d66e82c gdb/remote-fileio.c -99316ea8df74cd2f92e563b0462c9da5 gdb/amd64-windows-nat.c -74b730cfdb3dc8c8db2fe11fb591e3b6 gdb/solib.c -69d3a3c39f92e823645a6019cc12e51d gdb/ax-gdb.h -ba1e2581fc9b0d6e88dc6e7d6d81b523 gdb/coffread.c -96e5276ff6e7538c7215d58b7aa3a466 gdb/target-float.h -fddd169252d0a874e2e04b1bc6fdd6cc gdb/inferior-iter.h -967decb27916cb4046044b999510bd3d gdb/linux-fork.h -6625601478376dd40982d20e5d088cc2 gdb/ui-file.h -3ae307e50682ca200d0c8e0b13440db0 gdb/vax-bsd-nat.c -a78b8226144ed6f7af27ee2fb6004571 gdb/xcoffread.h -4b47bde967c24c382c20fe2eab288677 gdb/parse.c -eac8c24959112013b29df52ab25ec52f gdb/inf-ptrace.h -0f79a8df5643c2f22c026bd8f219be5e gdb/sparc64-tdep.h -3ffcbb2891752512876492b816438d40 gdb/gdbarch.sh -0142e5a46caac9ff4d1cab0cc6e3ecc6 gdb/exec.c -74051a4135f89ce2a1ee899bcb5ef4e2 gdb/ctfread.c -371bdb24a3310fb8006fe75edbe79c9f gdb/amd64-linux-nat.c -9ea6e29a8bc93c790f13a8e1fca34da9 gdb/bfin-tdep.h -ed592d925f0a6b3b239b47970ff16e54 gdb/m2-lang.h -fa84238f1bb7fb5232020d18c9198708 gdb/ax-general.c -82281681405a79febcb76e00c5c6d1e4 gdb/gdb_regex.h -90617e1358ebc3973eb48488dff3914b gdb/valprint.c -e13e3c7271c47f93bf90a07bcd20220c gdb/filesystem.h -3e2f7160ec383dfe447b35eef29b7d6a gdb/mips-fbsd-tdep.c -cd2a4477402e65047a9bdcfd87b994a5 gdb/f-typeprint.c -161121a3a7b68edb7ff41b2866389396 gdb/linux-nat.c -6789b961149a18824eaa3da862358050 gdb/observable.c -102ab06c34ae49c87842ef8a9fc75fec gdb/disasm.c -c0bf3802843f48e83326c3fb70787650 gdb/remote.c -526536cf30b137dcebfaaa604fa55615 gdb/ChangeLog-1994 -336e03ca7e83ae959c68c8c8f9415bfb gdb/type-stack.h -75ad7da594967f0808c5b284aa86c9b4 gdb/gdb_regex.c -4cbfe0522acb190984bc61b44b6fa2af gdb/frame-unwind.h -54ee80125fd1187ba883fcfa877a3759 gdb/i386-fbsd-tdep.c -b31e6483140fe1b84917d3b25a07a092 gdb/ser-tcp.c -4babf859dd57daea8886f3d82d5925cf gdb/nios2-tdep.h -f138d9647816785870ce1c1a81599da8 gdb/config.in -c89cc956fd274817fba012a0ef78a660 gdb/target.h -cbff2791111dd60659e4567e1f08a2bd gdb/buildsym.c -76b02eea4bd899f89ae35205f9b0817f gdb/ada-tasks.c -54a69ba0367b944a12ed34213e3d3da7 gdb/tracefile-tfile.c -b38e03bdc52d31765f11412e70640aff gdb/memrange.c -8f1de0a4dcb30ff5210e424f93987509 gdb/debug.c -1bf594cbf293075e134527d4ad6073ac gdb/sh-linux-tdep.c -cdf198423cee8281aa9599b9a05d44fe gdb/auto-load.h -46103304a4f220bbcdd42c4ad2f3bb56 gdb/ser-event.h -e316b8bb64a4e24a57491e0e5f225b5d gdb/csky-linux-tdep.c -3eea3bcd8be84267800e175439f1161e gdb/linux-nat-trad.c -e8e0ad4d418333ccd4e60b5bec8aa524 gdb/ppc-nbsd-tdep.h -632150a43a00a113c1e97d8cff92099a gdb/inline-frame.c -6717085dd2f58fafd72f10e6112ff254 gdb/bfin-tdep.c -b87a02f178d5f7f1712d954b24f8178f gdb/s390-tdep.h -1213b7edc9ebe3f45ba17686aa4ac640 gdb/m32r-linux-nat.c -d37b202a919a60a159bd90d7a5cadba1 gdb/findvar.c -8ed16730ee1ccc0f65140f4b14928d7f gdb/ChangeLog-2014 -dafe29925d5cc67b50a71bb43b16654f gdb/ChangeLog-2009 -eb184b6d739b67f629fc64519faa194f gdb/gdbtypes.h -2002137f4a8dd5f9eeef44f256f87483 gdb/alpha-mdebug-tdep.c -0484543216ff271ce3aaf0179fb806e2 gdb/d-exp.y -b52b1fe9d0cd385d624693fe53429195 gdb/dwarf2read.h -8c3163fcfc8ad55fd74419025fcdd445 gdb/macrocmd.c -6e6816214f677ddee863da39c3529f9c gdb/cp-valprint.c -62a554554be4f6b96049aaae85c5ea84 gdb/tramp-frame.h -da6763aea9a7a5edd8b18aabf1184658 gdb/reggroups.h -8a3179cb632d4a12180c6cbdd02beac5 gdb/ia64-tdep.c -2654ee6181563ea08e66a81da7ec329a gdb/exceptions.h -25f16548915a378f21b6a3d9984914da gdb/sparc-nat.h -302978e3aa8feaf08c4d03c671315511 gdb/gdbtypes.c -c8d711e40ef2ce2adcfc5aa36c327dfd gdb/ChangeLog-2016 -8f5a03c189727d347a330548f3ea9c98 gdb/ChangeLog-1991 -9bf06754ff8ca2dbd4cbc092d83dd8fd gdb/nat/linux-ptrace.h -a228af5ebe9e4dd59f6714f39fa0c201 gdb/nat/linux-waitpid.h -1203ff1b26abc31feb7071f9813136b6 gdb/nat/x86-linux.c -6ccb6b3a537eeb2d37c6bd54e7ed1903 gdb/nat/x86-gcc-cpuid.h -4a4233dfda12e7300df7cc7a2139280a gdb/nat/x86-cpuid.h -2447f8c8e2cfe41ada5cf57d1a901291 gdb/nat/linux-ptrace.c -192620a67e119eab60a4ba12394f1674 gdb/nat/amd64-linux-siginfo.c -292cbe9e8cd172e10da2189a8a6ed55f gdb/nat/linux-osdata.h -3663295dc2f78a30bf5381e8a2526bae gdb/nat/x86-linux-dregs.h -55180ace5814592da915379dbd611982 gdb/nat/linux-personality.c -274414fd5b1e6c4ecbbe0b3de79de0ee gdb/nat/aarch64-linux.c -f4c767b1743fff232fe039f206b3e486 gdb/nat/aarch64-sve-linux-sigcontext.h -5e882c2a55b99cf6e425e06a7f750fb5 gdb/nat/x86-dregs.c -f42449a84c7a51c80149542b2e2c31b5 gdb/nat/gdb_ptrace.h -24d7e4499c9bb3f888460e9c7f896a64 gdb/nat/mips-linux-watch.h -66931e88bf2963d012d7cd43b055254b gdb/nat/amd64-linux-siginfo.h -a8a10ea73c2163408854f6fe316e744f gdb/nat/aarch64-sve-linux-ptrace.h -484e7d4a6d710eccdc47d87d20160c64 gdb/nat/aarch64-linux-hw-point.c -d0f61e6da7805e1faecfb355bcf2707e gdb/nat/linux-btrace.c -ecca434228b47863356dd7da1a11805c gdb/nat/linux-namespaces.c -4c8788046fec0f032528a93a82c168aa gdb/nat/x86-dregs.h -68dc759bc4f63d0182aa883169ec0b1f gdb/nat/x86-linux-dregs.c -8c863d58ebcd88ea3ea42f987641380f gdb/nat/linux-btrace.h -e13c5f2a71d9c18ff55b871911163d7d gdb/nat/fork-inferior.c -897b0a388680d20302af615c75ea4f53 gdb/nat/x86-linux.h -ea4b9bc0aa585eace1a6834c6d49aa2c gdb/nat/aarch64-sve-linux-ptrace.c -3f87a71f7594ff07f9d5cc4b141ae605 gdb/nat/linux-procfs.c -f0a8447eba98c968b20bcb56de26f32d gdb/nat/mips-linux-watch.c -6a2977aae5df0d82c398db0fdf8da365 gdb/nat/linux-procfs.h -159879437ad67179c412917ccf679b90 gdb/nat/linux-waitpid.c -2028ff4c603505bf966b299e9092a91c gdb/nat/linux-osdata.c -b1c9f0654dac48a1fb2003acc76a28dd gdb/nat/gdb_thread_db.h -8143cf5ee11236a8cfe7d10fa3564cf6 gdb/nat/fork-inferior.h -02cd934766f71192575431544e0e01ed gdb/nat/ppc-linux.h -d39ee56fda4e38cfb76f0430fc73025c gdb/nat/aarch64-linux.h -5b9f312190d07299c1946e70c44f4d67 gdb/nat/ppc-linux.c -3c24dd0fe3871f6f045ef906731fa146 gdb/nat/aarch64-linux-hw-point.h -60b57961ec38e3be527af400f5da3ed4 gdb/nat/glibc_thread_db.h -32c9d5918acf6c380b87bbc935ef9a64 gdb/nat/linux-namespaces.h -869682720009050450706990d27831c1 gdb/nat/linux-nat.h -c348a5ab957ec967ab7055c0ebe8b1a1 gdb/nat/linux-personality.h -3d6b8dc1d5f77f8ff311451bf9e76e31 gdb/python/py-auto-load.c -d6a6c45611037b3592bd7935056ae759 gdb/python/py-signalevent.c -d5b2ff0399bbeed76f1f63df13baced6 gdb/python/py-continueevent.c -63130434d8279510d8733ad1a8a89265 gdb/python/py-lazy-string.c -8858d1d3c1bc45eb463db6b20f1f241d gdb/python/py-value.c -7bb33e771729d4a76199569a2d5e54cc gdb/python/py-record-full.h -ec764c6e51b37c289441f05af227576a gdb/python/py-block.c -b486897231fd3a227d661b097896e844 gdb/python/lib/gdb/__init__.py -9e7aff8f5cee23b200d991c270f0487e gdb/python/lib/gdb/command/__init__.py -12780e5d163e8daf0b72095532e93b44 gdb/python/lib/gdb/command/unwinders.py -2c662d07e90c6449ed0ae2e386c3e83f gdb/python/lib/gdb/command/pretty_printers.py -a864ad215a52769326e06054108e179b gdb/python/lib/gdb/command/type_printers.py -727b08c40c54605733a06914973bd543 gdb/python/lib/gdb/command/prompt.py -cb50e7e50c96c9c69c87e22bc2902d77 gdb/python/lib/gdb/command/xmethods.py -355e0a7185f859cad27d8feee7dec69f gdb/python/lib/gdb/command/explore.py -b5936237548ea5e424f6575c0d3c2a97 gdb/python/lib/gdb/command/frame_filters.py -5d0d59ca86411a286b16a2fe9cae82f4 gdb/python/lib/gdb/FrameIterator.py -74e289faefa1a87a6cff57c1549a013b gdb/python/lib/gdb/printer/__init__.py -a8a6468f63839816eb153107135ef606 gdb/python/lib/gdb/printer/bound_registers.py -e67d067c072f472be3a49b904f9bec54 gdb/python/lib/gdb/prompt.py -b10c79b8f2368dcef56419742b4dda90 gdb/python/lib/gdb/printing.py -f07d841106ee80cfa1760a287b4044a6 gdb/python/lib/gdb/unwinder.py -64ab46f418df2abd14ddc4f7465e5406 gdb/python/lib/gdb/types.py -018a1579cfbf21dc7a57331a66257cc5 gdb/python/lib/gdb/FrameDecorator.py -1b87269c189b1c431dcbfe9a2e9f15e4 gdb/python/lib/gdb/xmethod.py -d01d63c5c14556c87904f164aef2ea0a gdb/python/lib/gdb/frames.py -7f050f6bf4f526d6e0be747d79397c46 gdb/python/lib/gdb/function/__init__.py -897786c59ca7361b2bc3049389d07942 gdb/python/lib/gdb/function/strfns.py -ab0ed99e6bf63b911cb337b0b0e9bde7 gdb/python/lib/gdb/function/as_string.py -32b66330de8f208a65c4743d49bb3baa gdb/python/lib/gdb/function/caller_is.py -be0dc9d4c01167519df110d7bd8bdb4d gdb/python/py-evtregistry.c -ab91262a42c289733471af8bf90d6745 gdb/python/py-stopevent.c -343a08d279fc1aa81d5aa3decdb0d418 gdb/python/py-arch.c -bd8eaa36f4f7787e831391424163c15d gdb/python/py-infevents.c -e02a93da19e04505f02a9229d3a3066d gdb/python/py-evts.c -6e4100036d93604a6ec95cb299b70c49 gdb/python/py-prettyprint.c -ccdd63d1f9b97b079788d95825f59bd1 gdb/python/py-record.c -6751f05f6e0c47b8de9430a377979d87 gdb/python/py-ref.h -46becde83da2def362e89f8254ebbf79 gdb/python/py-event.h -7790914a11645e7343149c87214f4f65 gdb/python/py-objfile.c -13c78912f8b596b3689685a4c923c373 gdb/python/py-record.h -8bd3055e1bcd60c4a077082bf106b7e2 gdb/python/py-events.h -a5c31a5cfdc529a5a38ca9206b43d303 gdb/python/py-framefilter.c -c93c0e5d285bc04e272d5b3db591828b gdb/python/py-stopevent.h -cbeb816c03caa62e70a1e8836ee0b2eb gdb/python/py-param.c -0da7886c35343f9d8538165749763d0e gdb/python/py-instruction.c -0eac09470ec1f234eef39c3851f6b562 gdb/python/py-xmethods.c -86f6816c56b68c2d5179f16415aa98a6 gdb/python/py-unwind.c -6f993a5dafb35508237320be0ab20541 gdb/python/py-breakpoint.c -0d83ae15bca662bad95d3d059b622e17 gdb/python/python-internal.h -785b3db420836b4dad3b2d4f347e7c63 gdb/python/py-linetable.c -ca13397c034395dfcd61501fdd2cef5b gdb/python/py-progspace.c -5f71b2685e47b40babe91e75814bb23a gdb/python/py-frame.c -7bf75a3584cbb28ed0bcc1e005f3fd41 gdb/python/py-event.c -20e9613ae3a3c0cc88af643305801023 gdb/python/python.h -30d1c7b7dd3925a4170bc2813133f1f3 gdb/python/py-threadevent.c -16c07698f2d3b4305667907d730db354 gdb/python/py-inferior.c -8e8ec9b4c704f12905dbecce3fb16dec gdb/python/py-finishbreakpoint.c -6c4b749ff4813f68b6ed9b7885713690 gdb/python/py-cmd.c -709470bb52b6b546a073d6bf8de1a3df gdb/python/py-function.c -604acaeaefbb7b69dc93ba6360eab4c3 gdb/python/py-record-btrace.c -c0612fe3e2436a1f4310fcca295ddca5 gdb/python/py-record-btrace.h -807fa9fc60ee8277bdef7af5973e5d72 gdb/python/py-all-events.def -b5af9df4ad1343fcaa9178c5971e37f8 gdb/python/py-varobj.c -bddb3eb94a890d1dcbc58fe5337db26a gdb/python/py-event-types.def -1f5db609d411088528fa1ecd5708b49a gdb/python/py-instruction.h -b2109d847cb3c29a10ac32b322e228ff gdb/python/py-newobjfileevent.c -6504b3548779a97565f6787f11704e87 gdb/python/py-bpevent.c -5458df54850ceebb924f05c05982b5c3 gdb/python/py-infthread.c -0c1e8c601e09fe908186519ade8a6332 gdb/python/py-record-full.c -21a5143156ed729deb69e58fd3115c93 gdb/python/py-exitedevent.c -06f1b0cb4daacbbd09a57abfdc5fdd4e gdb/python/python-config.py -7faf39826051baf374c94dcd9a8c8965 gdb/python/py-symtab.c -bbae667ea9fc1d5d421a3a0c4e463863 gdb/python/python.c -248f42756886d8956c133d2f667ef014 gdb/python/py-gdb-readline.c -81a222dffded248c357e69302e6d7137 gdb/python/py-symbol.c -c5da7375ffdf1970837f2612c8a50824 gdb/python/py-utils.c -a74eb03c45a5556acc8faad5774f1f75 gdb/python/py-type.c -d59a7ca9ac21c92aa076c4ac1cd4c69c gdb/go-exp.y -47d42cb3d4ab2a11e28c8789be825d24 gdb/stabsread.c -310088ace8ef287113df80a9a6b137c2 gdb/target.c -697712885c1eaaef402e5e9427abf533 gdb/m2-exp.c -e28df7b45590562c09d5f1db41a5ea08 gdb/alloc.c -5670ab5728c6c7ca31d9cf62e62246a0 gdb/arm-fbsd-tdep.h -bc8687ded69127a7ce84f85884bd8143 gdb/i386-linux-nat.h -6585ab2ae134c79a91586b6942500609 gdb/symfile-mem.c -0ccfa4a9f27941a45178155eb67a03be gdb/elfread.c -11896f995452a307bd6d160278bcb3c6 gdb/remote-fileio.h -3bbc2a3577bfa9080344442ce6817654 gdb/m2-exp.y -6dc729bb1b64dbbd92757f65615cffbd gdb/dwarf-index-write.c -2e344d602700c5a90fbdbfcff8fb6d2a gdb/inflow.h -67e350f825f5b84d2087e82220e86f6b gdb/rs6000-nat.c -ab83aea6e53f0f9e23fab8a214b80965 gdb/terminal.h -2243acf3b4739625b5951862165a9c34 gdb/utils.h -4ca89638b2aa511ced3efcd6b48ed50b gdb/ser-uds.c -92d909547ef1304f2b75c94932df3577 gdb/ui-out.h -d9e51ed8afce7b32d740728c3f5b3f1f gdb/test-target.h -094962e0da7d42cce3cb7d4a9593d008 gdb/progspace-and-thread.h -3e2971cf2d68957b44b684b2c5430b81 gdb/nto-tdep.c -a19e18cdd80d1a71fec8e8f9bd89a2e2 gdb/aarch64-linux-nat.c -2062da8383987f6d0b44209a7fcbe904 gdb/tracectf.h -c553c48f13e521c85d389604dfa91af3 gdb/bfd-target.h -7dac9de3f22ce0bfc534258e2c15caf9 gdb/symtab.c -9c468a844bd738a6319e80fe36702037 gdb/windows-tdep.c -b5a2b5ae850f4de94ec3cc5a0864b4aa gdb/dwarf2expr.h -765b0a78c45ffcc6112ce4eb8ac3bb33 gdb/target-debug.h -44fe6b3f34a1b52e2c0155e35ff54732 gdb/frame.c -969e0fda608820632234b7ee9d294bbe gdb/cp-name-parser.c -910a60e5854ff3a001ee1f194f6245a5 gdb/stub-termcap.c -8a85e9a71d0b548a419c5b70586c7533 gdb/tracefile.h -b022e14d01f620f2ce8cd2df0f2fa3b2 gdb/maint-test-options.c -d807ef2540e1b4b9c430da1120010590 gdb/ax.h -ab547fc523d932c710785acb1950e83c gdb/stubs/ChangeLog -8edc014e1b5928dd9761408fa7df0d64 gdb/stubs/sparc-stub.c -04d8700c262b700c2dd2102d86c1d303 gdb/stubs/ia64vms-stub.c -006a9d22be601b34fb652e81981fad59 gdb/stubs/m68k-stub.c -140d077412ae615053b55e8cd29dfee2 gdb/stubs/sh-stub.c -0644af48c77adac296d83d3fe9bc65e3 gdb/stubs/i386-stub.c -8c029d7c656ce4990158901bcf423be1 gdb/stubs/m32r-stub.c -30eabaa649b042e0b281737a58a5d172 gdb/stubs/buildvms.com -7f440abf7f8efa446020a65c315829a6 gdb/d-lang.h -cc12e34cfacbc08eaf789efd97f3a3d7 gdb/posix-hdep.c -5d90bb308578349ec226ffc1070968d8 gdb/alpha-nbsd-tdep.c -2188c93e3d44f5d891f58d071a33c821 gdb/sol2-tdep.h -016b23b58e3c6afa428c6fc31dc8494d gdb/xcoffread.c -57f1971361f93328925a4001a6ac9b7c gdb/sh-tdep.c -39ac7aedbcc068600631386b0e5709c5 gdb/objfiles.c -8d55fbd4079b9ee9139577af6c32ff34 gdb/eval.c -7a84b73aabc0b5c432f66fa451ad500e gdb/xtensa-tdep.c -23a99e5964bce08b488077cd3fb4fd1b gdb/i386-fbsd-nat.c -5fffd8c47764eda70194c34de6e02f2e gdb/ChangeLog-2003 -dc3a848b7fdd2a5f0a5bc77b7b4f1f4b gdb/namespace.h -bdd0b3eaae5abc6b6ea0a5f00c44e897 gdb/reverse.c -4f0b476ffdbe86a8e3b7a90a957abfae gdb/nbsd-tdep.c -e82e1a53dbb63d792fc8645192a4b2cb gdb/gdb-gdb.gdb.in -33e82795b3de28ec33551530ec362c2c gdb/ChangeLog-2007 -1d4e6ef8267e4e4f6bb7246e23522928 gdb/std-operator.def -a9c3bc17892cec689df7b344f7c59c1d gdb/disasm-selftests.c -0451193df303c4176db03cefc269d01a gdb/record.c -d2009d43614594fef6bcbd602307abda gdb/aarch64-ravenscar-thread.h -1a99e0f75e96bbf1a89076035963c81f gdb/m2-typeprint.c -e6fe2856e44ef75f275e754de34179cb gdb/solib-dsbt.c -7e9e4249481e2d3f06ca6f17e1ee9427 gdb/testsuite/gdb.ada/mi_task_arg/task_switch.adb -844bbe70c2e83f993749004c4d07a9cf gdb/testsuite/gdb.ada/print_chars/foo.adb -66bff97bf0c05bce9ead5f0bf0190da6 gdb/testsuite/gdb.ada/print_chars/pck.ads -d21a309840e12968877eae48d8ca5276 gdb/testsuite/gdb.ada/print_chars/pck.adb -2429c7331416d71e055d9621fce87c0f gdb/testsuite/gdb.ada/set_pckd_arr_elt/foo.adb -daa0336a93e48c78f022d4577286ff86 gdb/testsuite/gdb.ada/set_pckd_arr_elt/pck.ads -b141584a851e24491ba29a63c4909d8a gdb/testsuite/gdb.ada/set_pckd_arr_elt/pck.adb -22119c8311eacbbdee289dd8ce98c519 gdb/testsuite/gdb.ada/bp_on_var/foo.adb -7c7e7c0608d1b6a1be87ce24ff8ff72a gdb/testsuite/gdb.ada/bp_on_var/pck.ads -d7304615cd1055fb0373f00043c3c39d gdb/testsuite/gdb.ada/bp_on_var/pck.adb -a5c49b608d58b39699dbf4cef1435929 gdb/testsuite/gdb.ada/arr_arr.exp -36972cace689358c1acea17073a2c1f5 gdb/testsuite/gdb.ada/info_types.c -91f180bc8fad6a5eb37e5d9a70ce6c55 gdb/testsuite/gdb.ada/mi_catch_assert.exp -2b78edacab5a390708fcd06ec97eb84c gdb/testsuite/gdb.ada/array_bounds.exp -422f8f0a70d36ff5e2caf7421058eb3e gdb/testsuite/gdb.ada/fullname_bp.exp -67911a6ab55a9d486b7afacbe912c452 gdb/testsuite/gdb.ada/convvar_comp.exp -decdbee30b340779d952068c4ceac35e gdb/testsuite/gdb.ada/mi_interface/foo.adb -cdf310f32972b0204d721b70588ed513 gdb/testsuite/gdb.ada/mi_interface/pck.ads -bfa977b9d06c563030a8cce886170d09 gdb/testsuite/gdb.ada/mi_interface/pck.adb -ca668e964fab2969fd4d130b483354bd gdb/testsuite/gdb.ada/ptype_field.exp -e4d6ad5fced68322ab020c1233c28c06 gdb/testsuite/gdb.ada/packed_array/pa.adb -d78ad342db85ca827e30c77f151717e7 gdb/testsuite/gdb.ada/packed_array/pck.ads -4483445c432e6bb851712c5d67c6420d gdb/testsuite/gdb.ada/packed_array/pck.adb -8e755124b33cfd367b257e7e58bfc09e gdb/testsuite/gdb.ada/print_pc.exp -d3a9d65fa5963464364b4b6b165a76d6 gdb/testsuite/gdb.ada/tasks.exp -964486239570f2cc2e2bc209d234acd4 gdb/testsuite/gdb.ada/info_auto_lang/some_c.c -b04680319c3630418b451e7294f5fb46 gdb/testsuite/gdb.ada/info_auto_lang/proc_in_ada.adb -20342d91611d875bcf95234a6f417ee4 gdb/testsuite/gdb.ada/info_auto_lang/global_pack.ads -5718bda34088361157adc79f91bf16a1 gdb/testsuite/gdb.ada/packed_tagged.exp -9e1c51e3d333bec25b7927c041cae988 gdb/testsuite/gdb.ada/ref_tick_size.exp -bcb40038b1762897d71b52d9e1828a48 gdb/testsuite/gdb.ada/bp_range_type.exp -83a748aa8eddc3ef60803bd4b376b588 gdb/testsuite/gdb.ada/arrayptr.exp -e2bce8dfa2e11aa5ac5b5a558e09c754 gdb/testsuite/gdb.ada/array_ptr_renaming/foo.adb -96204de2c51cd81fb445af46ee7789d6 gdb/testsuite/gdb.ada/array_ptr_renaming/pack.ads -cb2cab91aa192336868658df94a4a857 gdb/testsuite/gdb.ada/mi_exc_info/foo.adb -3e2fd5867b2883f4a9ddac7201757322 gdb/testsuite/gdb.ada/mi_exc_info/const.ads -09a9681b4f7f81cea00a5e17d83c2497 gdb/testsuite/gdb.ada/fun_addr/foo.adb -1823f05bf624e07516d54d9625d42f4d gdb/testsuite/gdb.ada/tagged_not_init/foo.adb -096c3c2587c7ea58c567f26455e5beca gdb/testsuite/gdb.ada/tagged_not_init/pck.ads -82c93669db65afef942f434d148661d7 gdb/testsuite/gdb.ada/tagged_not_init/pck.adb -29b251994f32c4383a8b639052f72e61 gdb/testsuite/gdb.ada/complete.exp -ed67ab6d7b46b198deaedc7204a190c9 gdb/testsuite/gdb.ada/pp-rec-component.exp -c016dcd181d23edbcbf65be4cebb9c0d gdb/testsuite/gdb.ada/widewide.exp -fbc0d9feae40f04a99229b3acd45c38e gdb/testsuite/gdb.ada/info_auto_lang.exp -4014958d36f3890794549d557adcd913 gdb/testsuite/gdb.ada/null_record.exp -64ca4b707e36fd6323a6eb73a1c4cda6 gdb/testsuite/gdb.ada/rdv_wait/foo.adb -851b3a04fc43efe1b20a63b72a697283 gdb/testsuite/gdb.ada/rdv_wait/pck.ads -37923a7d51f5ddcbe4a60c04662e2c25 gdb/testsuite/gdb.ada/rdv_wait/pck.adb -ae647efd0430bc383074ac2b96e23412 gdb/testsuite/gdb.ada/mi_var_array/bar.adb -15a3774979c26fc6db8c7897c08966f0 gdb/testsuite/gdb.ada/mi_var_array/pck.ads -8e6305bac51a84c65fa16a64ce0cfbb4 gdb/testsuite/gdb.ada/mi_var_array/pck.adb -ee6be1fc5826bf47c408f61974364152 gdb/testsuite/gdb.ada/array_of_variable_length/foo.adb -3fbcb731164958e40c8542a40c052985 gdb/testsuite/gdb.ada/array_of_variable_length/pck.ads -455a8e1ea58886ac2b8b6a5a736e1c03 gdb/testsuite/gdb.ada/array_of_variable_length/pck.adb -e4ebe62e7c6c2b6ea280e829f8be73a7 gdb/testsuite/gdb.ada/funcall_ref.exp -d64b1d9b2ddc86d7f56e1920798f5537 gdb/testsuite/gdb.ada/pkd_arr_elem.exp -4463ebe5f42510f31178cda2ace22356 gdb/testsuite/gdb.ada/catch_ex_std.exp -10ab745c5a1a649c460290e9ecf72992 gdb/testsuite/gdb.ada/catch_assert_if.exp -58a3d5ec0fe77e275322f4a37ff325c3 gdb/testsuite/gdb.ada/bp_enum_homonym.exp -a346128c1eaf9232e9e0867717a96177 gdb/testsuite/gdb.ada/str_uninit.exp -1d09d302fe444b6310af020a4502ffa5 gdb/testsuite/gdb.ada/dot_all/foo.adb -b2cc6b94857cd1688d663721cdc45e05 gdb/testsuite/gdb.ada/dot_all/pck.ads -0a122217e509546102a099eead83a11e gdb/testsuite/gdb.ada/dot_all/pck.adb -05b3bb3c5fd707b23649013777b643b6 gdb/testsuite/gdb.ada/arrayidx.exp -6491e17a00d2d2d965121a1e921c60a4 gdb/testsuite/gdb.ada/bias/bias.adb -f73678db43a9f4b6fe08168feab20199 gdb/testsuite/gdb.ada/bias/pck.ads -f1cb2210d149e3a3734e09b39ef5769b gdb/testsuite/gdb.ada/bias/pck.adb -d1bccd9a654bf4e23882e9980b032c37 gdb/testsuite/gdb.ada/access_to_packed_array/pack.adb -ad2f0ea8c07def67af4eeed03f136af1 gdb/testsuite/gdb.ada/access_to_packed_array/foo.adb -5510a1877e8643a8b08e690457d68d21 gdb/testsuite/gdb.ada/access_to_packed_array/pack.ads -dc3fcbc1585f7a2c0a9718247e047679 gdb/testsuite/gdb.ada/funcall_ptr/foo.adb -7f307e0d4fd158f8f4b7abbf0e4e2f0a gdb/testsuite/gdb.ada/funcall_ptr/pck.ads -74c9102728f2ede6031ad70ae4d796b4 gdb/testsuite/gdb.ada/funcall_ptr/pck.adb -d9827370f72065d83166ef48b3af181d gdb/testsuite/gdb.ada/mod_from_name.exp -430f0fbb66032c864ee5c2ac19d44b81 gdb/testsuite/gdb.ada/unchecked_union.exp -4be9aa048c39ce0c19b5d954251b4623 gdb/testsuite/gdb.ada/vla/vla.adb -d2c2ecb4d43e4039cb668d2f9660f123 gdb/testsuite/gdb.ada/bp_on_var.exp -a49ae9460997703f2fc1afdd92dc2989 gdb/testsuite/gdb.ada/nested/hello.adb -d32ab5440d6befa1a942a64de84d4eec gdb/testsuite/gdb.ada/scoped_watch/foo_p708_025.adb -71ceb8362e645778f111443930417796 gdb/testsuite/gdb.ada/scoped_watch/pck.ads -45c645d7747a474be1e1b664cc02ff41 gdb/testsuite/gdb.ada/scoped_watch/pck.adb -de5794a5a07943b60bca1ed2d9a0d2f4 gdb/testsuite/gdb.ada/var_arr_attrs.exp -6fc6a83b47cab122a35c830f701071ca gdb/testsuite/gdb.ada/arrayptr/foo.adb -d25dd11d7e632c6f4ca203ddffacfd81 gdb/testsuite/gdb.ada/arrayptr/pck.ads -6a1b8616b5634e09f69c813f2739dae7 gdb/testsuite/gdb.ada/arrayptr/pck.adb -b5e3ac35ab20c62cb92d67188bb713df gdb/testsuite/gdb.ada/notcplusplus.exp -67047f213c52c273c13154dc594aa03b gdb/testsuite/gdb.ada/arr_arr/foo.adb -a98b2fbfbd92b0c053e8f25d89f41f80 gdb/testsuite/gdb.ada/arr_arr/pck.ads -bfa977b9d06c563030a8cce886170d09 gdb/testsuite/gdb.ada/arr_arr/pck.adb -a31c4c61a06bf95bfd304827a9b14be1 gdb/testsuite/gdb.ada/bp_reset.exp -baaff9741af7bb8530cb5828bb86b292 gdb/testsuite/gdb.ada/same_component_name.exp -82675ee8f9775a004a01aa040977d1de gdb/testsuite/gdb.ada/out_of_line_in_inlined.exp -a51995e2c6e5566755250520c8f0dc35 gdb/testsuite/gdb.ada/funcall_char/foo.adb -80c10ca7c445eaa81ec348db3749d3f6 gdb/testsuite/gdb.ada/access_to_packed_array.exp -d73ab7a1d96e92fccaaed736016df9e0 gdb/testsuite/gdb.ada/array_return.exp -ae1d4488ed1273ce2cb8b7aa310c6049 gdb/testsuite/gdb.ada/type_coercion/ident.adb -dcd498e49e76b8c7908d6a82c69a47e0 gdb/testsuite/gdb.ada/type_coercion/assign.adb -efbe1472d61e92f3e93877b5d5928090 gdb/testsuite/gdb.ada/n_arr_bound.exp -3609d9d96d06dfb55999773f1b37df94 gdb/testsuite/gdb.ada/type_coercion.exp -bf6593bcb956ac163703d298a7183197 gdb/testsuite/gdb.ada/info_locals_renaming/foo.adb -80bfbadab2f74b0393752ec1b17f5693 gdb/testsuite/gdb.ada/info_locals_renaming/pck.ads -3bc74924636375e6a0221c65bb906f5e gdb/testsuite/gdb.ada/info_locals_renaming/pck.adb -e6da08c9f18656ded13ee09784e9b572 gdb/testsuite/gdb.ada/arrayidx/p.adb -565ff9979ebb2e307abc0073fa73f508 gdb/testsuite/gdb.ada/mi_dyn_arr.exp -547885d27e05b64260a331492f380dc4 gdb/testsuite/gdb.ada/same_component_name/foo.adb -3ed591d4954dc9788251991d63584474 gdb/testsuite/gdb.ada/same_component_name/pck.ads -4db32be622bea624cd12adc383d393b1 gdb/testsuite/gdb.ada/same_component_name/pck.adb -7d0eed40cbdf9bef96ecc94f7bc1d66c gdb/testsuite/gdb.ada/access_tagged_param/foo.adb -4311850ba36fbb72770f06c7e16ac21e gdb/testsuite/gdb.ada/access_tagged_param/pck.ads -48033e19a82b5468b642fa4adbc302ea gdb/testsuite/gdb.ada/access_tagged_param/pck.adb -dfde49f216881ec66bfac907f84e0f72 gdb/testsuite/gdb.ada/access_to_unbounded_array/pack.adb -8cb08c5d6b3e4deac2c8bafeefa4da9a gdb/testsuite/gdb.ada/access_to_unbounded_array/foo.adb -e31375a85fe344ec262fd38ec3dd59f8 gdb/testsuite/gdb.ada/access_to_unbounded_array/pack.ads -132c8153fc74e434efcf9de0e98e9816 gdb/testsuite/gdb.ada/array_subscript_addr.exp -98ad2ebe905a9942a68442482f37d095 gdb/testsuite/gdb.ada/tagged_access.exp -8ac998a581d91ec0574f3861f19d6214 gdb/testsuite/gdb.ada/attr_ref_and_charlit/foo.adb -051345e1d0dfc6f113aaed0e53a85195 gdb/testsuite/gdb.ada/funcall_param.exp -14bb985613b38887a80758e43acd2613 gdb/testsuite/gdb.ada/bp_inlined_func.exp -77b6a6e443da82a481a9baeecca19104 gdb/testsuite/gdb.ada/optim_drec.exp -bd40a0787847539722d0f85d90ddad06 gdb/testsuite/gdb.ada/length_cond.exp -fe9ee6023c85f09feea7eb8ce067d9cf gdb/testsuite/gdb.ada/mi_interface.exp -2c3fc83d557a4fa60353c12e958c05b6 gdb/testsuite/gdb.ada/assign_1.exp -8ef44bb1ccdd5a113f5f8614cc7a0290 gdb/testsuite/gdb.ada/watch_minus_l/foo_ra10_006.adb -c853fe7999d116744aa300ae43b5ecac gdb/testsuite/gdb.ada/watch_minus_l/pck.ads -f661c2fdadbd53fe71c40d1da45bc3bf gdb/testsuite/gdb.ada/watch_minus_l/pck.adb -66797e32ed18538800a6651dbf8fb814 gdb/testsuite/gdb.ada/start/dummy.adb -99f392f1beb3ab315ca3b9c2b178d531 gdb/testsuite/gdb.ada/O2_float_param.exp -0bfb958b95e119d58812a4c8d2b5d733 gdb/testsuite/gdb.ada/expr_delims/foo.adb -ed6fc3fa18313b7c920c58b120da9bc5 gdb/testsuite/gdb.ada/expr_delims/pck.ads -c9f7fc716bdd2cc53ff32e833274eb21 gdb/testsuite/gdb.ada/expr_delims/pck.adb -7e9e4249481e2d3f06ca6f17e1ee9427 gdb/testsuite/gdb.ada/mi_task_info/task_switch.adb -5e2e45763c5864555ecccc7d1f2fa757 gdb/testsuite/gdb.ada/attr_ref_and_charlit.exp -20d974fbb460501d628f22eb5f8c89f2 gdb/testsuite/gdb.ada/widewide/foo.adb -6ce8650c9d44debf3be97a0f9f39ab44 gdb/testsuite/gdb.ada/widewide/pck.ads -ca3da01b183658dd862489ce8e0335db gdb/testsuite/gdb.ada/widewide/pck.adb -2dcbcaa882a2eeb0a045523f3be82abe gdb/testsuite/gdb.ada/str_binop_equal.exp -e19fe57ae2b52077774bb558a9879549 gdb/testsuite/gdb.ada/dyn_arrayidx.exp -044339c66ddec72396e0833845b5f0ae gdb/testsuite/gdb.ada/fixed_points.exp -dcdebc4e6ae0bbb1b79d8398cb8df710 gdb/testsuite/gdb.ada/ptype_union.exp -57d300d3c1d1847178146b421e03f91b gdb/testsuite/gdb.ada/array_return/p.adb -d305b8a0a1f66255996c6adaa1e51b65 gdb/testsuite/gdb.ada/array_return/pck.ads -0a0c8962e57413dcde19577abe3b7f40 gdb/testsuite/gdb.ada/array_return/pck.adb -642a9ed14ec3ca4ac65667eb35707d39 gdb/testsuite/gdb.ada/rename_subscript_param.exp -bd56dff395beadd66960f2ff3ad0ad2a gdb/testsuite/gdb.ada/bp_fun_addr/bp_fun_addr.adb -3b97638a5f74b5d9618702142e656434 gdb/testsuite/gdb.ada/mi_var_union.exp -164178ce392f199ffe6cd590a3362df3 gdb/testsuite/gdb.ada/ref_tick_size/p.adb -d25dd11d7e632c6f4ca203ddffacfd81 gdb/testsuite/gdb.ada/ref_tick_size/pck.ads -7c6bec3ea25abafdc52dfb9759af550a gdb/testsuite/gdb.ada/ref_tick_size/pck.adb -ade0b0199585a0cd8738535018fb47fa gdb/testsuite/gdb.ada/boolean_expr.exp -5082fa9ba941dc978a6f8d88596253e7 gdb/testsuite/gdb.ada/char_param.exp -db388e337cfef8c0c533e2c81e3cd89f gdb/testsuite/gdb.ada/watch_minus_l.exp -be72add5f4919c2de41ff032260cff5e gdb/testsuite/gdb.ada/expr_with_funcall.exp -389945c7fad69fac1a2cf2631c267fe7 gdb/testsuite/gdb.ada/ptr_typedef/foo.adb -6a976024cc196f115269b420d88b2e34 gdb/testsuite/gdb.ada/ptr_typedef/pck.ads -3f772defdb51bc8747f655982ff5ca80 gdb/testsuite/gdb.ada/ptr_typedef/pck.adb -dc62cc7d01b0592a836d7093336a5396 gdb/testsuite/gdb.ada/start.exp -15382665e3bc706a72e13852ea2a31cc gdb/testsuite/gdb.ada/uninitialized_vars.exp -6ef899b745fedd7e6e7661e5d89dd744 gdb/testsuite/gdb.ada/packed_tagged/comp_bug.adb -d57d395b2aadebd72c1d450a7e287636 gdb/testsuite/gdb.ada/bp_range_type/foo.adb -f220578c6459e76bd2cd6940e6e97ff9 gdb/testsuite/gdb.ada/bp_range_type/pck.ads -1cafb207754e62f15238ab6bc70faaa3 gdb/testsuite/gdb.ada/bp_range_type/pck.adb -cfa6d00c7c1f6be15f70a998bcd5c3a0 gdb/testsuite/gdb.ada/fun_in_declare/foo.adb -85a547924072f8d97f17085fa0ae1ac2 gdb/testsuite/gdb.ada/fun_in_declare/pck.ads -aa5984ce008957911504f3c624cb7ef7 gdb/testsuite/gdb.ada/fun_in_declare/pck.adb -065fc05344eb1d407ef6702d1c385bcd gdb/testsuite/gdb.ada/arr_acc_idx_w_gap/enum_with_gap_main.adb -65a3d4802fe8ed10ed7def953688202e gdb/testsuite/gdb.ada/arr_acc_idx_w_gap/enum_with_gap.adb -452cdf3008564c040513f442d86dedf2 gdb/testsuite/gdb.ada/arr_acc_idx_w_gap/enum_with_gap.ads -9ab6cdb5afbdebd42975298154ee26e3 gdb/testsuite/gdb.ada/tagged_access/pack.adb -8906d7ff1f87b7580cd198f95bd51d68 gdb/testsuite/gdb.ada/tagged_access/p.adb -2fc04e648204483a5058fb0a4671b778 gdb/testsuite/gdb.ada/tagged_access/pack.ads -f238463e291a45324fef130aeae11528 gdb/testsuite/gdb.ada/scoped_watch.exp -1adcb4d1bb8265b4409235101f12a9c2 gdb/testsuite/gdb.ada/var_rec_arr.exp -1e18041001f825f935f0944e61f7b134 gdb/testsuite/gdb.ada/iwide.exp -930bb0a6c5e31ab94e06e5491eac73ef gdb/testsuite/gdb.ada/array_char_idx/foo.adb -e3f3046a2c21109f4fea0959dd7c6ba1 gdb/testsuite/gdb.ada/array_char_idx/pck.ads -1cafb207754e62f15238ab6bc70faaa3 gdb/testsuite/gdb.ada/array_char_idx/pck.adb -72dbd5491e11b28d5674bf77f92a01f2 gdb/testsuite/gdb.ada/big_packed_array.exp -6a976024cc196f115269b420d88b2e34 gdb/testsuite/gdb.ada/watch_arg/pck.ads -d8a86bf9dbe8bbaf52c2b511d5da9288 gdb/testsuite/gdb.ada/watch_arg/watch.adb -ca3da01b183658dd862489ce8e0335db gdb/testsuite/gdb.ada/watch_arg/pck.adb -d68d7e394e57c21f787f6d0704c1e534 gdb/testsuite/gdb.ada/packed_array.exp -f6fb597e158e5949e0fb2cc39fee1fb5 gdb/testsuite/gdb.ada/homonym.exp -27724851e8e27de42ff82e24280a2975 gdb/testsuite/gdb.ada/scalar_storage.exp -ac56c7c9a01c0140b275aece29148a74 gdb/testsuite/gdb.ada/optim_drec/foo.adb -85e193b538a6bb652176dfe28b4d60b0 gdb/testsuite/gdb.ada/null_array.exp -1bff0af40880869cc58cd88f61ede3c8 gdb/testsuite/gdb.ada/bp_c_mixed_case/foo_h731_021.adb -9750e1e67963505340ec4522097ea32b gdb/testsuite/gdb.ada/bp_c_mixed_case/qux.c -4ba3564c26dd62c72ed085033ded5a0e gdb/testsuite/gdb.ada/bp_c_mixed_case/bar.c -f220578c6459e76bd2cd6940e6e97ff9 gdb/testsuite/gdb.ada/set_wstr/pck.ads -1cafb207754e62f15238ab6bc70faaa3 gdb/testsuite/gdb.ada/set_wstr/pck.adb -3c2a2d7cf10735ab892bc9eda9a75931 gdb/testsuite/gdb.ada/set_wstr/a.adb -5a0f46215e47235d7a16914c8345146e gdb/testsuite/gdb.ada/str_uninit/pck.ads -88d81e5f18cb005d0e71e6deaeb6e73c gdb/testsuite/gdb.ada/str_uninit/pck.adb -77589c6f4876c2707610b305b591187a gdb/testsuite/gdb.ada/str_uninit/parse.adb -ad6cab5ebc91187d6e45d0a4f1498b22 gdb/testsuite/gdb.ada/tick_last_segv.exp -74c7d69520bb1870141440357b975242 gdb/testsuite/gdb.ada/dyn_loc.exp -f9ee51bef7b34ffee12cb4722a3dfde7 gdb/testsuite/gdb.ada/rename_subscript_param/pkg.adb -1b9c29fa444c5463ed47a25e5aff9402 gdb/testsuite/gdb.ada/rename_subscript_param/pck.ads -75b3bdaa32b6ded526c9a54357d6b3a8 gdb/testsuite/gdb.ada/rename_subscript_param/pkg.ads -b6cf058e73c291505615d26f800cddc4 gdb/testsuite/gdb.ada/rename_subscript_param/pck.adb -dcfbe3e015b60f71a800aa62738dcec8 gdb/testsuite/gdb.ada/rename_subscript_param/pb30_012.adb -811f9390fad3a3767d5ebf52303fa5c8 gdb/testsuite/gdb.ada/expr_with_funcall/expr_r821_013.adb -93c0db268f87cedc5cefd3bfd2af8a08 gdb/testsuite/gdb.ada/expr_with_funcall/pck.ads -ea9d9cdbe8e87505a09b3fbd2320a993 gdb/testsuite/gdb.ada/expr_with_funcall/pck.adb -35f50183e05462cfce40534510fec2be gdb/testsuite/gdb.ada/pckd_neg/pck.ads -01a02522d3660e84c33a7521c034a845 gdb/testsuite/gdb.ada/pckd_neg/pck.adb -9ced6874d284519cba6b6335550501ef gdb/testsuite/gdb.ada/pckd_neg/foo_o508_021.adb -a96a624a8042e87f0c309d99caba8d92 gdb/testsuite/gdb.ada/bias.exp -63003806167d038f50ed548cb1a5ddfb gdb/testsuite/gdb.ada/length_cond/pck.ads -b5829d77ff0c3045d5b1b17074ca10a6 gdb/testsuite/gdb.ada/length_cond/pck.adb -a12ef12c7785e2906898ec4620964844 gdb/testsuite/gdb.ada/length_cond/length_cond.adb -96be62571780a229c37e50b677fe79d7 gdb/testsuite/gdb.ada/catch_ex/foo.adb -7193db0a203c7ee39d4ddce4e020dd69 gdb/testsuite/gdb.ada/assign_arr/main_p324_051.adb -a493f5c43d1a273761053e4025a509c7 gdb/testsuite/gdb.ada/assign_arr/target_wrapper.ads -89af5f9ed3ec8dad0ce2ca87e0566a27 gdb/testsuite/gdb.ada/info_locals_renaming.exp -ff70833dcd0287b66a37020ec3e67dad gdb/testsuite/gdb.ada/info_addr_mixed_case/foo.adb -aae06601ca86b3fb0ee4e8aa63c3e2b3 gdb/testsuite/gdb.ada/info_addr_mixed_case/pck.ads -cd16f3112687aa30dd22be2e4b661f28 gdb/testsuite/gdb.ada/info_addr_mixed_case/pck.adb -6d00540cb804fd2f8c39d017a7d836f2 gdb/testsuite/gdb.ada/info_exc.exp -f7168b64a3c1fe46cfd2159b8fafd3b3 gdb/testsuite/gdb.ada/interface.exp -3bb652ede555706f9431365bf4c79ff2 gdb/testsuite/gdb.ada/repeat_dyn.exp -c0d52c6fae7e4706d0e83d1265f6f3aa gdb/testsuite/gdb.ada/arr_acc_idx_w_gap.exp -7eb6f29ba776cd268a89b02354736afd gdb/testsuite/gdb.ada/var_arr_typedef.exp -3a178d185f9e9807f52872dba376d8cf gdb/testsuite/gdb.ada/cond_lang/mixed.adb -71db69ee4a380d99d7d69d115cf57861 gdb/testsuite/gdb.ada/cond_lang/pck.ads -72254bfdc919bb162d391a45c0e4aceb gdb/testsuite/gdb.ada/cond_lang/pck.adb -e1102a2e44185c9ec90df1cc9417275f gdb/testsuite/gdb.ada/cond_lang/a.adb -7b6554a11116ae5cc352ee7a0b5b1e4a gdb/testsuite/gdb.ada/cond_lang/mixed.ads -eec7e1fcc4717d55ea25ba8881d807b6 gdb/testsuite/gdb.ada/cond_lang/foo.c -f8a9d50baf60ece037d5d883678da366 gdb/testsuite/gdb.ada/fun_addr.exp -6ce8650c9d44debf3be97a0f9f39ab44 gdb/testsuite/gdb.ada/rec_comp/pck.ads -c0b3def35353f84e333e2f9eb5baf07c gdb/testsuite/gdb.ada/rec_comp/bar_o203_012.adb -ca3da01b183658dd862489ce8e0335db gdb/testsuite/gdb.ada/rec_comp/pck.adb -fb3aaf59fb22f30cac224d59682fedc7 gdb/testsuite/gdb.ada/arraydim.exp -57eccc0e9d841031678c7f7ae363884b gdb/testsuite/gdb.ada/mi_var_array.exp -244848ab287a9630f092ef029b0990bb gdb/testsuite/gdb.ada/arrayparam/foo.adb -f2211856ee9b4deac7b172e77e3bd1c3 gdb/testsuite/gdb.ada/arrayparam/pck.ads -a066e4733686538a10b832bda423ec89 gdb/testsuite/gdb.ada/arrayparam/pck.adb -96be62571780a229c37e50b677fe79d7 gdb/testsuite/gdb.ada/mi_catch_ex/foo.adb -b73f84be6b8b164425a64ebaae20b2a8 gdb/testsuite/gdb.ada/task_switch_in_core.exp -edcbcc0554ff9495417b42a7f67d7451 gdb/testsuite/gdb.ada/mi_var_union/bar.adb -229a65253ade3ea7d3852f511bc6a26e gdb/testsuite/gdb.ada/mi_var_union/pck.ads -f661c2fdadbd53fe71c40d1da45bc3bf gdb/testsuite/gdb.ada/mi_var_union/pck.adb -aae09b1e9c65f525428e068bd83b20e0 gdb/testsuite/gdb.ada/atomic_enum.exp -e9a6994f11708b2ed99e5f795a76f35e gdb/testsuite/gdb.ada/str_binop_equal/foo_p211_061.adb -ed3b9c664f53151e383a1117656e174f gdb/testsuite/gdb.ada/str_binop_equal/pck.ads -ae6e946d0adcc38285004b2979aa9618 gdb/testsuite/gdb.ada/str_binop_equal/pck.adb -bd723dd66676e50b06ca114a9ed9de87 gdb/testsuite/gdb.ada/dgopt/x.adb -059b3c51b3d9b605e1f8bd0f580ca2a4 gdb/testsuite/gdb.ada/interface/foo.adb -8aae8d777d000281f273c7ba25fe7d16 gdb/testsuite/gdb.ada/interface/types.ads -7b28e891bdb1c59c424b0e94c109e167 gdb/testsuite/gdb.ada/interface/types.adb -af7226db157f6889dee39ef7fde85f0a gdb/testsuite/gdb.ada/enum_idx_packed.exp -06301ff23654320fc0dfba61032ca7ae gdb/testsuite/gdb.ada/homonym/homonym.ads -79993b292bdaa9b9e4dd0cdc26a2bcd4 gdb/testsuite/gdb.ada/homonym/homonym.adb -6a976024cc196f115269b420d88b2e34 gdb/testsuite/gdb.ada/homonym/pck.ads -0e2f68b69e01074f3f7207d5a9d20ed3 gdb/testsuite/gdb.ada/homonym/homonym_main.adb -3f772defdb51bc8747f655982ff5ca80 gdb/testsuite/gdb.ada/homonym/pck.adb -6b89f8ca84ed1e844088bffd41defe9d gdb/testsuite/gdb.ada/win_fu_syms/foo.adb -e9e3de2d862c508befd9c025974aa1a9 gdb/testsuite/gdb.ada/win_fu_syms/pck.ads -4c895d0738e1611d07b176d8e2fbc439 gdb/testsuite/gdb.ada/win_fu_syms/pck.adb -15a899bbe029b0a5cf649fb2a6b50db4 gdb/testsuite/gdb.ada/int_deref/foo.adb -398ce4b62e69b8a0413bb5e4cb7675ad gdb/testsuite/gdb.ada/int_deref/pck.ads -62cb4201577ac76661c89684ee7771e8 gdb/testsuite/gdb.ada/mi_task_arg.exp -4b590a49b2d84411313511667180923d gdb/testsuite/gdb.ada/exec_changed/first.adb -16ed519b8c21f8fca0e4133ea3a6f9bc gdb/testsuite/gdb.ada/exec_changed/second.adb -9c9732a208afc8e5b11a7791f46d3910 gdb/testsuite/gdb.ada/minsyms.exp -fb38c0fadca6fa2a6bc106e9fd0b8d3b gdb/testsuite/gdb.ada/tick_length_array_enum_idx.exp -ff1f77c390dc8b5f2a625d69d0d4bb53 gdb/testsuite/gdb.ada/convvar_comp/pck.ads -cd3695a61145d349f395632f16230d7b gdb/testsuite/gdb.ada/convvar_comp/pck.adb -f6959b3f28ab3f2552e4037ca0cf04ea gdb/testsuite/gdb.ada/convvar_comp/pb16_063.adb -5ebcbc5af510894618fe013350a783b4 gdb/testsuite/gdb.ada/tagged/foo.adb -79463060ca500fa2c43e24ebea44c54a gdb/testsuite/gdb.ada/tagged/pck.ads -0a122217e509546102a099eead83a11e gdb/testsuite/gdb.ada/tagged/pck.adb -807b4ce73f44d8a505b082eb3f5de7d9 gdb/testsuite/gdb.ada/char_enum.exp -6314bbebcc1c3ea4facce6dc68706617 gdb/testsuite/gdb.ada/taft_type/p.adb -2f63e95c8e4ef3607a7b903b2f97061c gdb/testsuite/gdb.ada/taft_type/pck.ads -fec7f84d82b98cae48587a6573b9125b gdb/testsuite/gdb.ada/taft_type/pck.adb -ddc19c0f32e8f6c161f5a8e4c2373b77 gdb/testsuite/gdb.ada/pckd_arr_ren.exp -44cf6bc40fc15ae9f316f16eec07b257 gdb/testsuite/gdb.ada/iwide/classes.ads -dd9c800429d95bd05fbb62661f2db917 gdb/testsuite/gdb.ada/iwide/p.adb -03b5e64d0f918b79864e885363591190 gdb/testsuite/gdb.ada/iwide/classes.adb -c79e362e27cd3349054152524cad8936 gdb/testsuite/gdb.ada/mi_ex_cond/foo.adb -ff2f131eec4204641ec148ebd6248979 gdb/testsuite/gdb.ada/mi_ex_cond/pck.ads -7170654ccc68ab524aa8d5caad50d57f gdb/testsuite/gdb.ada/scalar_storage/storage.adb -435e56df0e703ce39607b19f51657b35 gdb/testsuite/gdb.ada/scalar_storage/pck.ads -4779024e2daa01e58085ed891f2e0ed6 gdb/testsuite/gdb.ada/scalar_storage/pck.adb -4800dd81684b55d8b1e30f71daa556e5 gdb/testsuite/gdb.ada/pp-rec-component/foo.adb -89b8a4db08eda2b7c1b01f77373e1073 gdb/testsuite/gdb.ada/pp-rec-component/pck.ads -bfa977b9d06c563030a8cce886170d09 gdb/testsuite/gdb.ada/pp-rec-component/pck.adb -b8220d6b628c00cd48965a0f77118f28 gdb/testsuite/gdb.ada/ref_param.exp -f258a8b3801fa8ada42538e0362d3d00 gdb/testsuite/gdb.ada/sym_print_name/foo.adb -a56272b81ebf7bc2a00813e8bd29cec5 gdb/testsuite/gdb.ada/sym_print_name/pck.ads -13cb139f43a24e705deb1b0dc2f140a4 gdb/testsuite/gdb.ada/sym_print_name/pck.adb -894a39499667233dc19a7fba9d733813 gdb/testsuite/gdb.ada/pckd_arr_ren/foo.adb -9380316f9f7774c6b3b78bd94c1cb461 gdb/testsuite/gdb.ada/pckd_arr_ren/pck.ads -7b34a64707d8f04b2d6cc2e138dddb95 gdb/testsuite/gdb.ada/pckd_arr_ren/pck.adb -d5c9b9e5dc9f9d3e314b11968bd926fa gdb/testsuite/gdb.ada/set_pckd_arr_elt.exp -eabb20c03f13bf3a1fa49612628dc73b gdb/testsuite/gdb.ada/cond_lang.exp -f1298bef4df1c4a7f99ac6420dadc6de gdb/testsuite/gdb.ada/rec_return.exp -535d709f6e7cf129e37c6052ef665002 gdb/testsuite/gdb.ada/ptype_tagged_param/foo.adb -747a97e53f197155fc4335e9cb0b4042 gdb/testsuite/gdb.ada/ptype_tagged_param/pck.ads -268daca2ddb1de077984c3a64baec157 gdb/testsuite/gdb.ada/ptype_tagged_param/pck.adb -469a417c4ce4ff304c8a74457be4fdfb gdb/testsuite/gdb.ada/arr_enum_idx_w_gap.exp -686bd5a9639b07e8eb34f361e001115a gdb/testsuite/gdb.ada/mod_from_name/foo.adb -b5d3fdbf7b92f67bb18644428cc2168c gdb/testsuite/gdb.ada/ref_param/foo.adb -93b88c55a55eea90f429fc22d37d8b21 gdb/testsuite/gdb.ada/ref_param/pck.ads -a6d8c123420b2733ca724a2c65271d8b gdb/testsuite/gdb.ada/ref_param/pck.adb -1c4f907f5141a6bde8f6b6db64d83b84 gdb/testsuite/gdb.ada/fin_fun_out/foo_o525_013.adb -fe736547eb050b697855e9bbcaabcd43 gdb/testsuite/gdb.ada/fin_fun_out/bar.adb -95b54259eed301ea569dd45f53c4e48f gdb/testsuite/gdb.ada/fin_fun_out/bar.ads -2fcebfd1f034baef53640f754e3386d4 gdb/testsuite/gdb.ada/funcall_ref/foo.adb -f2074847e3b1f0460bfa8fef63461039 gdb/testsuite/gdb.ada/fixed_points/fixed_points.adb -08074ea24d40bbb62351967cf5218f38 gdb/testsuite/gdb.ada/excep_handle/foo.adb -ff830deb35dba601f75d4c9af3ef74c9 gdb/testsuite/gdb.ada/excep_handle/pck.ads -66bff97bf0c05bce9ead5f0bf0190da6 gdb/testsuite/gdb.ada/fixed_cmp/pck.ads -d21a309840e12968877eae48d8ca5276 gdb/testsuite/gdb.ada/fixed_cmp/pck.adb -7433132ef77a2d651e2bca0bbe7074d9 gdb/testsuite/gdb.ada/fixed_cmp/fixed.adb -81b27594689e14f7ccd5239e65df43db gdb/testsuite/gdb.ada/mi_catch_ex_hand/foo.adb -7ebc415560ac8494ff34c742f5589ed8 gdb/testsuite/gdb.ada/pkd_arr_elem/failure.adb -a98b2fbfbd92b0c053e8f25d89f41f80 gdb/testsuite/gdb.ada/pkd_arr_elem/pck.ads -bfa977b9d06c563030a8cce886170d09 gdb/testsuite/gdb.ada/pkd_arr_elem/pck.adb -6b8b079a9ed8898dbd569dc51fe163f8 gdb/testsuite/gdb.ada/same_enum.exp -9b3883268183a4c7c7373862806e3a9e gdb/testsuite/gdb.ada/ptype_union.c -d4ed9c6ce90434a42052c494d714bfc5 gdb/testsuite/gdb.ada/minsyms/foo_qb07_057.adb -6b3a4a021efbf6d2efabfab4681ade9d gdb/testsuite/gdb.ada/minsyms/pck.ads -19fd14b4e7c0928d791d23455c21157f gdb/testsuite/gdb.ada/minsyms/pck.adb -433f3d25f86f43bd68844f2427b2491e gdb/testsuite/gdb.ada/char_param/foo.adb -782922c99af87f129eb611ebb6a25e4b gdb/testsuite/gdb.ada/char_param/pck.ads -ec196047b1f6bcbe20e22ad3658aa80c gdb/testsuite/gdb.ada/char_param/pck.adb -364c24fce61c5b641b57645747ea0514 gdb/testsuite/gdb.ada/set_wstr.exp -3f967b23aec93794b46ad324f867a926 gdb/testsuite/gdb.ada/whatis_array_val/foo.adb -6a976024cc196f115269b420d88b2e34 gdb/testsuite/gdb.ada/whatis_array_val/pck.ads -ca3da01b183658dd862489ce8e0335db gdb/testsuite/gdb.ada/whatis_array_val/pck.adb -b1ce715201e135879c4d83d414f356b1 gdb/testsuite/gdb.ada/print_chars.exp -868950c2a0fa146adb28e3186c94b8e8 gdb/testsuite/gdb.ada/bad-task-bp-keyword.exp -a212eba7b4d86cf069335087ff8fec49 gdb/testsuite/gdb.ada/fun_renaming/pack.adb -2c011d0a7b569acb3fed791f48ec3c1c gdb/testsuite/gdb.ada/fun_renaming/fun_renaming.adb -52fd314f7d73234117733a1ebeefd898 gdb/testsuite/gdb.ada/fun_renaming/pack.ads -1041f1a82e07e160cea4bc7b8b063931 gdb/testsuite/gdb.ada/notcplusplus/foo.adb -229a65253ade3ea7d3852f511bc6a26e gdb/testsuite/gdb.ada/notcplusplus/pck.ads -f661c2fdadbd53fe71c40d1da45bc3bf gdb/testsuite/gdb.ada/notcplusplus/pck.adb -3f3b8dddd39a1aac9ac00d97be4a861a gdb/testsuite/gdb.ada/notcplusplus/ver.ads -68be0c527a23ee03e4302ac4e149c8e5 gdb/testsuite/gdb.ada/bp_fun_addr.exp -4b46a91c8b37422131c39e91df56ce7e gdb/testsuite/gdb.ada/mi_catch_assert/bla.adb -65833ffdf7ac1da00f691fb63b71a402 gdb/testsuite/gdb.ada/mi_catch_assert/pck.ads -333774572c1b2cdd73bdf3aa944fb15b gdb/testsuite/gdb.ada/ptype_array/foo.adb -941bf1774887ebfac6b7ad78e60fe1a0 gdb/testsuite/gdb.ada/ptype_array/pck.ads -d7d9472e435f72862331842581590302 gdb/testsuite/gdb.ada/ptype_array/pck.adb -8d91d6ab6f4d7fd75326d552f431e133 gdb/testsuite/gdb.ada/bp_reset/foo.adb -ecfaf47c92c3b403c28c8d26e0b18156 gdb/testsuite/gdb.ada/bp_reset/pck.ads -b2a0d20697e65b081593116a9a01741d gdb/testsuite/gdb.ada/bp_reset/pck.adb -9b16e46d1997516904eb56a3df3015b0 gdb/testsuite/gdb.ada/bp_reset/io.ads -b280e688d771e5bf926c700776f75b98 gdb/testsuite/gdb.ada/bp_reset/io.adb -cb2cab91aa192336868658df94a4a857 gdb/testsuite/gdb.ada/info_exc/foo.adb -3e2fd5867b2883f4a9ddac7201757322 gdb/testsuite/gdb.ada/info_exc/const.ads -4a541a1d5fcc3458836f9b5bf5b44208 gdb/testsuite/gdb.ada/py_range.exp -36193cf7285a70afea945a329ea4492a gdb/testsuite/gdb.ada/frame_arg_lang.exp -1f1f535c474728909ece15bcc2194e7c gdb/testsuite/gdb.ada/vla.exp -4a508f942a1fa64aea489c9ddadb3cbd gdb/testsuite/gdb.ada/expr_delims.exp -8dc87ec1feb8010572ec22e64edb09f1 gdb/testsuite/gdb.ada/watch_arg.exp -3e96e693bec8fca1f5cef2dee6176665 gdb/testsuite/gdb.ada/fullname_bp/dn.ads -9a7f854ac0c469ab4ca77816dc379ce6 gdb/testsuite/gdb.ada/fullname_bp/foo.adb -2d45dcb7bc56c2da922a40b231b9ca02 gdb/testsuite/gdb.ada/fullname_bp/pck.ads -7bb190a2ef78f7ad18e972c251bfbcb6 gdb/testsuite/gdb.ada/fullname_bp/pck.adb -51163378b567c92b9707df36bcea91c9 gdb/testsuite/gdb.ada/fullname_bp/dn.adb -e21d83059727e19730912ec1c6a217cb gdb/testsuite/gdb.ada/aliased_array/foo.adb -df6ee09ac44ef196d43c78cae6de5449 gdb/testsuite/gdb.ada/aliased_array/pck.ads -9b039464fd0d055c6e579895a1fd9590 gdb/testsuite/gdb.ada/aliased_array/pck.adb -45b90addbf403a088c7a154cbe0ec6bf gdb/testsuite/gdb.ada/taft_type.exp -c54e37b59a0f400cadccecdd7cada002 gdb/testsuite/gdb.ada/task_bp.exp -e500f43e1cb3fd40800ce19121363caf gdb/testsuite/gdb.ada/py_range/foo.adb -66bff97bf0c05bce9ead5f0bf0190da6 gdb/testsuite/gdb.ada/py_range/pck.ads -d21a309840e12968877eae48d8ca5276 gdb/testsuite/gdb.ada/py_range/pck.adb -e114bc19166d4484b5ff1257527ddb85 gdb/testsuite/gdb.ada/variant_record_packed_array/foo.adb -24a58c4de3aff55c8955e27d20ba9aa7 gdb/testsuite/gdb.ada/variant_record_packed_array/pck.ads -61bc0b0a0023f233e4b3938490e3bbca gdb/testsuite/gdb.ada/variant_record_packed_array/pck.adb -b109aa3bc399c65aa2e1567f21905dca gdb/testsuite/gdb.ada/dyn_loc/pack.adb -b0818782a4f7a7127f29b93d61c4d704 gdb/testsuite/gdb.ada/dyn_loc/p.adb -7391ad7b03d2ad8c6b9c602afe8dfc1c gdb/testsuite/gdb.ada/dyn_loc/pack.ads -f1ac421a0c1ae59515c1e4d174f0fcc9 gdb/testsuite/gdb.ada/mi_task_info.exp -12e241933d5b9567942493e73887bd80 gdb/testsuite/gdb.ada/disc_arr_bound/foo_n612_026.adb -4dba39bc1c526d8e189d1a69aee85123 gdb/testsuite/gdb.ada/disc_arr_bound/pck.ads -4357769a63aa4afd86db411c6246fba3 gdb/testsuite/gdb.ada/disc_arr_bound/pck.adb -34d1d5ff3439a334a1cacf8b4adabf47 gdb/testsuite/gdb.ada/variant_record_packed_array.exp -a4f62fc3672d1b4cf85555c01f52d275 gdb/testsuite/gdb.ada/complete/foo.adb -9986f0abf47c4a2ca35f3d1f472e9b74 gdb/testsuite/gdb.ada/complete/pck.ads -f5152fcdf5b8c654b23a4d073324212b gdb/testsuite/gdb.ada/complete/pck.adb -b6c79c6640728dc692e15305f769e599 gdb/testsuite/gdb.ada/complete/aux_pck.ads -7f67d50113648166183f68fc22abc7c9 gdb/testsuite/gdb.ada/complete/aux_pck.adb -18ecf1f1d24b5a01283ce1b1d831abf7 gdb/testsuite/gdb.ada/addr_arith.exp -61d305878fc8d16192430e45430dadc0 gdb/testsuite/gdb.ada/tagged.exp -b09ba541eeaaefb5d79cfcc17bf93cfa gdb/testsuite/gdb.ada/str_ref_cmp/foo.adb -4543feca9118ffc04f99dca43dd9c9ed gdb/testsuite/gdb.ada/str_ref_cmp/pck.ads -471a69e197962c9c2659fd506c0e8970 gdb/testsuite/gdb.ada/ptype_field/foo.adb -5367745daf0e6bebe5260aeca4b6be4a gdb/testsuite/gdb.ada/ptype_field/pck.ads -a262ccc3e7ba72601c2338f55e4507da gdb/testsuite/gdb.ada/ptype_field/pck.adb -92583dd8b90c113880fb05c26040fb34 gdb/testsuite/gdb.ada/n_arr_bound/foo.adb -a98b2fbfbd92b0c053e8f25d89f41f80 gdb/testsuite/gdb.ada/n_arr_bound/pck.ads -bfa977b9d06c563030a8cce886170d09 gdb/testsuite/gdb.ada/n_arr_bound/pck.adb -7ff0b9e7ed02571475a87de9827730d2 gdb/testsuite/gdb.ada/aliased_array.exp -6f408fda62d7b558b66828dcf7755bdb gdb/testsuite/gdb.ada/task_bp/foo.adb -f2c2bc55e0d27d352dd28ddf5adff2de gdb/testsuite/gdb.ada/task_bp/pck.ads -d23949b8f6eebef016c2c4608d59040f gdb/testsuite/gdb.ada/task_bp/pck.adb -987d264511855438d70b1fc339ded3a3 gdb/testsuite/gdb.ada/dgopt.exp -948bb9209526f06dde1129a8bb8fd144 gdb/testsuite/gdb.ada/pp-rec-component.py -e15328345499b7e153edae8de8455e87 gdb/testsuite/gdb.ada/char_enum/foo.adb -1e088ae1c2b61e788d90c4244459c2ee gdb/testsuite/gdb.ada/char_enum/pck.ads -3bf984c586ff43df5323521532a442be gdb/testsuite/gdb.ada/char_enum/pck.adb -fdd2ff65b240f3a2cd94f8ae89ffd027 gdb/testsuite/gdb.ada/formatted_ref/formatted_ref.adb -a4c3c8f864f2ed25917c859a3ed4ee65 gdb/testsuite/gdb.ada/formatted_ref/defs.adb -b25cd3ef174973174385a8da0972adee gdb/testsuite/gdb.ada/formatted_ref/defs.ads -f5a90ca78b136d97f300afcd6f1e150b gdb/testsuite/gdb.ada/mi_catch_ex.exp -526214e4d8363a7ed4a6759d65498a2e gdb/testsuite/gdb.ada/O2_float_param/callee.adb -cc84723865fef0c8938c99811aa22348 gdb/testsuite/gdb.ada/O2_float_param/caller.adb -a72a76aded1b9429b2539351dc62cf10 gdb/testsuite/gdb.ada/O2_float_param/callee.ads -14bdd798941ecbba1d2e786de0ad9847 gdb/testsuite/gdb.ada/O2_float_param/foo.adb -8b612bb16f1e7655e96208229ffd3b43 gdb/testsuite/gdb.ada/O2_float_param/io.ads -65fc57da37038cd8558e0185f2ebe59e gdb/testsuite/gdb.ada/O2_float_param/caller.ads -6db81fd2152bc909bc70d9bcb0e35137 gdb/testsuite/gdb.ada/O2_float_param/io.adb -4b46a91c8b37422131c39e91df56ce7e gdb/testsuite/gdb.ada/catch_assert_if/bla.adb -65833ffdf7ac1da00f691fb63b71a402 gdb/testsuite/gdb.ada/catch_assert_if/pck.ads -928e180620d823fc1fb20d65c4ccad2f gdb/testsuite/gdb.ada/pckd_neg.exp -ebcbffb4474a54455910684d0ce9efc0 gdb/testsuite/gdb.ada/mi_dyn_arr/foo.adb -954bc57bd7f47fddb97fe077e51cafed gdb/testsuite/gdb.ada/mi_dyn_arr/pck.ads -a0945214779cd2874087ddf4013f1965 gdb/testsuite/gdb.ada/mi_dyn_arr/pck.adb -5d24fabe01776b630a76b67a451643f9 gdb/testsuite/gdb.ada/mi_ref_changeable/foo_rb20_056.adb -9a5cd65c3eebf25436a7d4bf576e1d99 gdb/testsuite/gdb.ada/mi_ref_changeable/pck.ads -a14f6363924e061fdd1b16c121301a4a gdb/testsuite/gdb.ada/mi_ref_changeable/pck.adb -bbbe94410db0dfb8a9988cb6b1e39d3c gdb/testsuite/gdb.ada/whatis_array_val.exp -e687f05c1fe14d4ba0e6362f63146628 gdb/testsuite/gdb.ada/str_ref_cmp.exp -62a4ab2aa83047f920eff1c07d0e4083 gdb/testsuite/gdb.ada/access_tagged_param.exp -7d9a2c2fa653466fe453a1ad180e1658 gdb/testsuite/gdb.ada/sym_print_name.exp -9827dda39767450893fb0727f2a5c1a4 gdb/testsuite/gdb.ada/fixed_cmp.exp -4e6af52d8753a332c723c3eb924fa360 gdb/testsuite/gdb.ada/ptype_tagged_param.exp -673e8db6ce9aab6b734d558d3a4378a1 gdb/testsuite/gdb.ada/array_subscript_addr/p.adb -87a3d04771a9da36ad7c957e881d407d gdb/testsuite/gdb.ada/display_nested/pack.adb -e5bed0eb554efea6735dc89cff1d9077 gdb/testsuite/gdb.ada/display_nested/foo.adb -1726d6b7a76743519360055324d65d0f gdb/testsuite/gdb.ada/display_nested/pack.ads -d26992ae94d1a03c242ab4ad2c06f529 gdb/testsuite/gdb.ada/arrayparam.exp -1b8a1a6b120f26a96a288b2fceb36631 gdb/testsuite/gdb.ada/funcall_param/foo.adb -1ff096d87f45122c70fe4fcd466558e8 gdb/testsuite/gdb.ada/funcall_param/pck.ads -db2fca4c32a458eee4616f992ba0c423 gdb/testsuite/gdb.ada/funcall_param/pck.adb -5f202b431fe767701b29a4f7620e0717 gdb/testsuite/gdb.ada/enum_idx_packed/foo.adb -334c6115448853aad571616f86f49662 gdb/testsuite/gdb.ada/enum_idx_packed/pck.ads -1cafb207754e62f15238ab6bc70faaa3 gdb/testsuite/gdb.ada/enum_idx_packed/pck.adb -330511486e269ab4c28bdd928564f81e gdb/testsuite/gdb.ada/array_of_variable_length.exp -6ff7a700dba7e78c5849f9969886a42c gdb/testsuite/gdb.ada/null_record/null_record.adb -6f7ea009e29f7a1420140c54b82fed35 gdb/testsuite/gdb.ada/null_record/bar.adb -e0d33cc81b9d469727b306caa0159044 gdb/testsuite/gdb.ada/null_record/bar.ads -80c9463d396a39a234fb0d6af9cce024 gdb/testsuite/gdb.ada/call_pn/foo.adb -11f7f10755badcebb3bc64b88a37f9db gdb/testsuite/gdb.ada/call_pn/pck.ads -9fd3bd234adb553be46f8e2cf7bc128e gdb/testsuite/gdb.ada/call_pn/pck.adb -90bec0857ffa0d64c869739a409e3f15 gdb/testsuite/gdb.ada/var_rec_arr/pck.ads -1a5be8808e27c5ba52e34f6517a22dd5 gdb/testsuite/gdb.ada/var_rec_arr/foo_na09_042.adb -af0e66a0087969b7d3762811e8033a0e gdb/testsuite/gdb.ada/var_rec_arr/pck.adb -b89e483c6fb051bc30f90516d606ebe8 gdb/testsuite/gdb.ada/packed_array_assign.exp -d2da32e0ea4ee50c79853930f2305d35 gdb/testsuite/gdb.ada/maint_with_ada/var_arr_typedef.adb -7213d732fcc87c15a0769abd50d4c26c gdb/testsuite/gdb.ada/maint_with_ada/pack.adb -a77fd561ec59026be6464b5073b0cfde gdb/testsuite/gdb.ada/maint_with_ada/pack.ads -4aa4eec098e78c1ee89ca17a53e93aaf gdb/testsuite/gdb.ada/tagged_not_init.exp -8d7461e3b52911d5e7b992d813653bc4 gdb/testsuite/gdb.ada/catch_ex.exp -6d473c8050c2178e27d4dfd7efa484a4 gdb/testsuite/gdb.ada/ptype_array.exp -ea39f12e33e9f4a70062a51671f1f2ee gdb/testsuite/gdb.ada/float_param.exp -82af43a7eb84ba04defbdf221c145f01 gdb/testsuite/gdb.ada/fun_overload_menu.exp -87596bf740a1017377afca2882783d91 gdb/testsuite/gdb.ada/catch_ex_std/foo.adb -009ba00836d121e5ece9a943089f6f98 gdb/testsuite/gdb.ada/catch_ex_std/some_package.ads -075fe7b5dcfc17aabe463b92771965e8 gdb/testsuite/gdb.ada/catch_ex_std/some_package.adb -cb9553ed23379eaa2f87460d30c58932 gdb/testsuite/gdb.ada/excep_handle.exp -072ae21764ce6d22f614a6c35d441b4d gdb/testsuite/gdb.ada/py_taft/main.adb -0039fbe97a106f1c874ad14b89a3d290 gdb/testsuite/gdb.ada/py_taft/pkg.adb -ba2286088da8959eb5b952333056012a gdb/testsuite/gdb.ada/py_taft/pkg.ads -3e6e7f6e977dfdefa2c9e6f3881871ee gdb/testsuite/gdb.ada/rdv_wait.exp -d173f1f725e2cefd06b16a28711e8416 gdb/testsuite/gdb.ada/funcall_ptr.exp -1d5a917d4a69e144ceb69a639d62008f gdb/testsuite/gdb.ada/out_of_line_in_inlined/bar.adb -e8d84260f0ced7d42c0345d8d64f5abf gdb/testsuite/gdb.ada/out_of_line_in_inlined/foo_o224_021.adb -dffa0a6ecfcfd05d3665949b677b86fa gdb/testsuite/gdb.ada/out_of_line_in_inlined/bar.ads -a6c87723261e4f5a98140dd77a1c81cd gdb/testsuite/gdb.ada/mi_ref_changeable.exp -86b9992ceee1beab09a19d6c1797b431 gdb/testsuite/gdb.ada/same_enum/pck.ads -3bf984c586ff43df5323521532a442be gdb/testsuite/gdb.ada/same_enum/pck.adb -e5fa62fd912902527434d118a72145b8 gdb/testsuite/gdb.ada/same_enum/a.adb -92a3f70ee0bb981f38a59d8cb7d8ca60 gdb/testsuite/gdb.ada/lang_switch/lang_switch.adb -bb8e94944e96917ecdb6bc34cc96305e gdb/testsuite/gdb.ada/lang_switch/foo.c -0acdba2f282dfc769f78068a978c0e6a gdb/testsuite/gdb.ada/operator_bp/ops.ads -28c651200687a9878afdf0665a85dfbf gdb/testsuite/gdb.ada/operator_bp/ops.adb -933d1d0f5263eefebb4a0cdb0e440b41 gdb/testsuite/gdb.ada/operator_bp/ops_test.adb -ac76b935233cb74ce4ffe3d5368ebdde gdb/testsuite/gdb.ada/bp_enum_homonym/p.adb -050bc669067fe29e1aa7b3d60f8b5bb8 gdb/testsuite/gdb.ada/bp_enum_homonym/pck.ads -db10b4f1670cb1f4261d686e54f0ec4c gdb/testsuite/gdb.ada/bp_enum_homonym/pck.adb -1668f0ae892094290adcdf86f4860f11 gdb/testsuite/gdb.ada/fun_renaming.exp -563c9b138757b9c4d93e191db39c1fba gdb/testsuite/gdb.ada/unc_arr_ptr_in_var_rec/foo.adb -f220578c6459e76bd2cd6940e6e97ff9 gdb/testsuite/gdb.ada/unc_arr_ptr_in_var_rec/pck.ads -1cafb207754e62f15238ab6bc70faaa3 gdb/testsuite/gdb.ada/unc_arr_ptr_in_var_rec/pck.adb -a46bce579c553fd9e044707d2cdba020 gdb/testsuite/gdb.ada/assign_arr.exp -e9a3dd64b3edf5babca2a8e4954ea93b gdb/testsuite/gdb.ada/tick_length_array_enum_idx/pck.ads -db387236d978c7b49b782ea8d3a4b6e0 gdb/testsuite/gdb.ada/tick_length_array_enum_idx/pck.adb -6dba313ae4d89eeafbb90cb33e4c7f9a gdb/testsuite/gdb.ada/tick_length_array_enum_idx/foo_n207_004.adb -fded5162c59372e845e7d73d6b8f9e43 gdb/testsuite/gdb.ada/big_packed_array/pck.ads -4779024e2daa01e58085ed891f2e0ed6 gdb/testsuite/gdb.ada/big_packed_array/pck.adb -fbc00be790befb6a5e879ababcccbcea gdb/testsuite/gdb.ada/big_packed_array/foo_ra24_010.adb -ed0340179ecfe3b16a42a28dbc391e62 gdb/testsuite/gdb.ada/tick_last_segv/foo.adb -fbeadb46a5a16cc84930c115de6b4eaa gdb/testsuite/gdb.ada/formatted_ref.exp -b441f9301fe6474385f3b84a3ddb7350 gdb/testsuite/gdb.ada/addr_arith/pck.ads -19041d20ba4007def99dde699468ea41 gdb/testsuite/gdb.ada/addr_arith/foo_na07_019.adb -113860ed9c2ad97619d9f058d4716e85 gdb/testsuite/gdb.ada/addr_arith/pck.adb -3cd89b8132843aefe0f6e6e7bc3a2cf3 gdb/testsuite/gdb.ada/int_deref.exp -edbb4f0ff9223d47221542531aa84a81 gdb/testsuite/gdb.ada/unc_arr_ptr_in_var_rec.exp -9d0f357d6ee68d110bf545ab1cf22d39 gdb/testsuite/gdb.ada/small_reg_param.exp -04431d7bec9df08a1f482305c6732174 gdb/testsuite/gdb.ada/frame_arg_lang/bla.adb -9b536964cf4a28d529e85b01f6832fa9 gdb/testsuite/gdb.ada/frame_arg_lang/pck.ads -4d468673e2908635c58eb566722d0aac gdb/testsuite/gdb.ada/frame_arg_lang/pck.adb -26771339b24f6457cf5aa05c29ded152 gdb/testsuite/gdb.ada/frame_arg_lang/foo.c -b284a363c6eb92bc03876e3bd5cd6a58 gdb/testsuite/gdb.ada/varsize_limit.exp -9ff36486e98677802d2d3e48b588f2cf gdb/testsuite/gdb.ada/bp_c_mixed_case.exp -d896623658898ebb24b17e25897fed27 gdb/testsuite/gdb.ada/dot_all.exp -f42961c94dff110c7c73bd47e1651a94 gdb/testsuite/gdb.ada/mi_string_access/bar.adb -229a65253ade3ea7d3852f511bc6a26e gdb/testsuite/gdb.ada/mi_string_access/pck.ads -f661c2fdadbd53fe71c40d1da45bc3bf gdb/testsuite/gdb.ada/mi_string_access/pck.adb -6d059b32f68dafd80e5502c243ce4f38 gdb/testsuite/gdb.ada/exec_changed.exp -41c413c1da218c03220db9538e0c03f0 gdb/testsuite/gdb.ada/win_fu_syms.exp -60aa65a8d5bcedce085d784294653570 gdb/testsuite/gdb.ada/rec_comp.exp -7b0fac1333fb556620cb85d48816c724 gdb/testsuite/gdb.ada/frame_args.exp -963af7b4137a442af2269f77e5120533 gdb/testsuite/gdb.ada/ptr_typedef.exp -6cd66bf35bcd8c9ec822cef781b357e1 gdb/testsuite/gdb.ada/packed_array_assign/tester.adb -3d4d3ca68d1d634fa7be6e69b3f2dee5 gdb/testsuite/gdb.ada/packed_array_assign/pck.ads -ee44c4bed03524f18ff868cee6bb8ccf gdb/testsuite/gdb.ada/packed_array_assign/pck.adb -350500d43764d0c0418fddfb0eb480e7 gdb/testsuite/gdb.ada/packed_array_assign/aggregates.adb -b3eed1f4142fd64550456fb0401fcf99 gdb/testsuite/gdb.ada/packed_array_assign/aggregates.ads -88a840c50e4c60f028ce29f0ec4bf8cd gdb/testsuite/gdb.ada/bp_inlined_func/foo.adb -42303c0c01dc39723a3d13f50bf243d7 gdb/testsuite/gdb.ada/bp_inlined_func/b.ads -9cb0bcfde7f45d1599d0ae09d28f86d4 gdb/testsuite/gdb.ada/bp_inlined_func/c.adb -6ee0434bd1acc6ed8372639637d737d3 gdb/testsuite/gdb.ada/bp_inlined_func/c.ads -a69dbfd344d25eb11cc70bbf443f8294 gdb/testsuite/gdb.ada/bp_inlined_func/b.adb -29c603e4b09083ec25bf3a368af91023 gdb/testsuite/gdb.ada/unchecked_union/unchecked_union.adb -435e56df0e703ce39607b19f51657b35 gdb/testsuite/gdb.ada/unchecked_union/pck.ads -4779024e2daa01e58085ed891f2e0ed6 gdb/testsuite/gdb.ada/unchecked_union/pck.adb -803233d8a9d6d5695723ebbfcc10e105 gdb/testsuite/gdb.ada/mi_string_access.exp -5a498152a487d851c5a0fee099ee08d8 gdb/testsuite/gdb.ada/operator_bp.exp -c3a3b4f23febdbd6bd4711c40bdd7e5d gdb/testsuite/gdb.ada/lang_switch.exp -0f9634e3c0c0f0f7a474cbeb4e0b4b76 gdb/testsuite/gdb.ada/dyn_stride/foo.adb -d114b0b57f0a8c8a347ac31f40c5788f gdb/testsuite/gdb.ada/funcall_char.exp -e7aee24603c3a54f78076e0c95b10ff4 gdb/testsuite/gdb.ada/uninitialized_vars/parse_controlled.ads -d16852d065729d6ab4ec54d1bab9751a gdb/testsuite/gdb.ada/uninitialized_vars/parse.adb -2b19bae3f5a768db0cd3dbb6ca0bc567 gdb/testsuite/gdb.ada/arr_enum_idx_w_gap/foo_q418_043.adb -229615138c76fa3a8ada7a365595aac3 gdb/testsuite/gdb.ada/exprs.exp -dccf2c75bb5117c64aae92e537eac5d7 gdb/testsuite/gdb.ada/info_types.exp -78097163f9498e085220e4c266409028 gdb/testsuite/gdb.ada/info_addr_mixed_case.exp -f30604555f68f0636ace04b19b41616a gdb/testsuite/gdb.ada/ptype_arith_binop.exp -07493acd14a79e129feee41293466487 gdb/testsuite/gdb.ada/fun_in_declare.exp -2bb5162bbd5125a576baa40071098ffb gdb/testsuite/gdb.ada/repeat_dyn/foo_oc22_002.adb -6ca14be2a0b33d63dd7937d37efa76d6 gdb/testsuite/gdb.ada/repeat_dyn/pck.ads -7fa44e494759eb7231a9838d6501a198 gdb/testsuite/gdb.ada/repeat_dyn/pck.adb -79de2aa1b1d3947b8f5dfc567d7c8ce1 gdb/testsuite/gdb.ada/array_bounds/bar.adb -f3b22a9d9649655f09231447f4f49140 gdb/testsuite/gdb.ada/small_reg_param/foo.adb -5cefedab10b342d19386d101475c718e gdb/testsuite/gdb.ada/small_reg_param/pck.ads -42e9f48e47f51534505070b19549baf3 gdb/testsuite/gdb.ada/small_reg_param/pck.adb -270ae0f1e32c07de38f831b1add6a91d gdb/testsuite/gdb.ada/atomic_enum/foo.adb -3f62f19f1de13073a883f85eebac8740 gdb/testsuite/gdb.ada/atomic_enum/pck.ads -21e6828548c91f6e3af214e372d46d31 gdb/testsuite/gdb.ada/atomic_enum/pck.adb -1cc0e2095b60e76341b3d1d0c1e88ce4 gdb/testsuite/gdb.ada/mi_ex_cond.exp -1769d3d8ea172cc4ef4fbe47aea1243c gdb/testsuite/gdb.ada/null_array/foo.adb -c12dcac4443a2a65023099180b9c5f94 gdb/testsuite/gdb.ada/null_array/pck.ads -993e6225a1aba99336b47da9f468c309 gdb/testsuite/gdb.ada/null_array/pck.adb -1978b8a8f99a62a8d24a37f20e36628c gdb/testsuite/gdb.ada/mi_catch_ex_hand.exp -96671fdd9f6be710f7e6bd72d483b5bf gdb/testsuite/gdb.ada/display_nested.exp -e6d2c7e7223d73c9a08e9c06ecbc1cb7 gdb/testsuite/gdb.ada/tasks/foo.adb -f9be3c9e4c323a58ea91e26206e065fa gdb/testsuite/gdb.ada/arraydim/foo.adb -6be43fa713cb48e97678a64f5e410b5f gdb/testsuite/gdb.ada/arraydim/pck.ads -b6862f9bb9add749fbdaf2f57f640e4e gdb/testsuite/gdb.ada/arraydim/pck.adb -7d5e9b3cf2fdfbb8a00ce4ffef368cb8 gdb/testsuite/gdb.ada/arraydim/inc.c -e3f600dd7cd7da008091292c91a6b253 gdb/testsuite/gdb.ada/dyn_stride.exp -3acaaa296939066e0db3d0c2e350de3a gdb/testsuite/gdb.ada/fin_fun_out.exp -8b19519f8b744f3cb719fb2e491f6b0f gdb/testsuite/gdb.ada/mi_exc_info.exp -c24a237af746c6770b6c98856964cc5b gdb/testsuite/gdb.ada/array_char_idx.exp -d2da32e0ea4ee50c79853930f2305d35 gdb/testsuite/gdb.ada/var_arr_typedef/var_arr_typedef.adb -7213d732fcc87c15a0769abd50d4c26c gdb/testsuite/gdb.ada/var_arr_typedef/pack.adb -a77fd561ec59026be6464b5073b0cfde gdb/testsuite/gdb.ada/var_arr_typedef/pack.ads -5c02aea47e71d9a2ee4b8c3197815c0d gdb/testsuite/gdb.ada/array_ptr_renaming.exp -b5a70ee5dbae7e8e733c54c34f8f9c3a gdb/testsuite/gdb.ada/call_pn.exp -18cb083fb09c95498a4fb004efb49c5d gdb/testsuite/gdb.ada/bad-task-bp-keyword/foo.adb -9e110e18422c62241dcd1df6ac4a8cdd gdb/testsuite/gdb.ada/rec_return/foo.adb -e82c2db57d822e4713dc9ef28af646e0 gdb/testsuite/gdb.ada/rec_return/pck.ads -0752b27fe3e7369fade713d2dcd94c75 gdb/testsuite/gdb.ada/rec_return/pck.adb -fc33ef12c5ecbc7e7e78870167eabcfa gdb/testsuite/gdb.ada/var_arr_attrs/pck.ads -8e6305bac51a84c65fa16a64ce0cfbb4 gdb/testsuite/gdb.ada/var_arr_attrs/pck.adb -576a698e751bc52403c361af8a2b0633 gdb/testsuite/gdb.ada/var_arr_attrs/foo_o115_002.adb -551e679ba05fbc4186f0f81815b5e502 gdb/testsuite/gdb.ada/dyn_arrayidx/foo.adb -d85986938d4dd4f75418aea801deeb4c gdb/testsuite/gdb.ada/task_switch_in_core/crash.adb -656621dddd4d4cb3fd849b40f1682557 gdb/testsuite/gdb.ada/nested.exp -870f549328c4464cebc3195731b45739 gdb/testsuite/gdb.ada/varsize_limit/vsizelim.adb -ee6161259786f6344f0655bc15d84752 gdb/testsuite/gdb.ada/varsize_limit/pck.ads -27619e71c2cbc57559ff22cbd2825f0e gdb/testsuite/gdb.ada/varsize_limit/pck.adb -f64f7c16d10d882451a3e8cf902a2545 gdb/testsuite/gdb.ada/frame_args/foo.adb -359d38f647f05a54ad0c59f6491a1b85 gdb/testsuite/gdb.ada/frame_args/pck.ads -f3892ad6789bfeed51a5867a4f595755 gdb/testsuite/gdb.ada/frame_args/pck.adb -c751411f81a536f9689b54eab6f15b2a gdb/testsuite/gdb.ada/byte_packed_arr.exp -9b0043e0509ec4c06fa83c33fe7260fb gdb/testsuite/gdb.ada/exprs/p.adb -5c40882aa0767609dd5463d793789d00 gdb/testsuite/gdb.ada/access_to_unbounded_array.exp -32c471b93883c3e08bccdc20aa68f48b gdb/testsuite/gdb.ada/maint_with_ada.exp -7611f0cce425b923992b1655b3e527c4 gdb/testsuite/gdb.ada/disc_arr_bound.exp -4a01195b3ab36138a8c10d3dc639ef03 gdb/testsuite/gdb.ada/byte_packed_arr/reprod.adb -6e2d83ae4ab14ca5653fb19f69294039 gdb/testsuite/gdb.ada/byte_packed_arr/reprod_main.adb -1ecc1fbb790d1e2bf9de2a5d0e1ce754 gdb/testsuite/gdb.ada/byte_packed_arr/reprod.ads -48bb3ab368f33dcfbf49ee9590dfb5be gdb/testsuite/gdb.ada/byte_packed_arr/array_list_g.ads -53826a84e2db4573d1cb953ddff5a310 gdb/testsuite/gdb.ada/float_param/foo.adb -246b3c9639a2a70cf03493543f197c96 gdb/testsuite/gdb.ada/float_param/pck.ads -baaf0c691f517ada2461b215bbde22b4 gdb/testsuite/gdb.ada/float_param/pck.adb -94217c41ac014229b5c473312bc84f18 gdb/testsuite/gdb.ada/py_taft.exp -867e9dd98643f638903820c733cb0e75 gdb/testsuite/gdb.ada/fun_overload_menu/foo.adb -013ebf562f9a04b05fa9b1e17ccf8680 gdb/testsuite/ChangeLog-1993-2013 -aa1385fbd0f92107b5045e7ca5cae22a gdb/testsuite/lib/selftest-support.exp -0d1b41ff5b5f01c5ae5fd5577b9f7d3b gdb/testsuite/lib/unbuffer_output.c -bcf77f71c101324cb231c7650afc3470 gdb/testsuite/lib/range-stepping-support.exp -7b7295cc00dba2f49506497db79f05d2 gdb/testsuite/lib/valgrind.exp -f015bb09e4bc1e38096b266c99c49e66 gdb/testsuite/lib/sym-info-cmds.exp -8c76dfe19e12deb36894bd3a3db4acb6 gdb/testsuite/lib/perftest.exp -65020c69e52959c1e8b37bd2fd01a6a1 gdb/testsuite/lib/gdb-utils.exp -dbd03885deddeb28983324919b79ddae gdb/testsuite/lib/memory.exp -f4a9e70a03d15e1dbd59d5eb24e52a54 gdb/testsuite/lib/go.exp -8358b61c4aa719b3815501590759227b gdb/testsuite/lib/fortran.exp -023b97ae221e21f5560f56b1e36f0fc9 gdb/testsuite/lib/build-piece.exp -eab2b2ca81a5d73342d4df71d116122c gdb/testsuite/lib/set_unbuffered_mode.c -755ba792bc569b114211d8b3e2579e77 gdb/testsuite/lib/gdb.exp -23b5d285831f0f7ff2bf78306c62a3e0 gdb/testsuite/lib/prelink-support.exp -0bed2e263ee278ff8da08386e132045f gdb/testsuite/lib/read1.c -6c0257502d0ef64c8223ec292a0698bd gdb/testsuite/lib/cl_util.h -757ebca1e64d744fa2306df9b71a8160 gdb/testsuite/lib/trace-support.exp -d15cd6a068eef2866c9eb676719807a3 gdb/testsuite/lib/compile-support.exp -589eb129fff957c7fd44840fefbbab2d gdb/testsuite/lib/dwarf.exp -fde1cf603e9adf86aacd3ab5ba981678 gdb/testsuite/lib/gen-perf-test.exp -5cd31e915bacb4a64a70624ab3b5e163 gdb/testsuite/lib/future.exp -486d822ea0c34e4128e64e31da1dc281 gdb/testsuite/lib/objc.exp -b95dc2a351d65373861d5ccbc6f62d5c gdb/testsuite/lib/opencl_kernel.cl -c4933b0ed0a991f90ef4692cf0288fbe gdb/testsuite/lib/pdtrace -69f25897120261ee06b97561a4e89699 gdb/testsuite/lib/pascal.exp -bb8f05ca283ee3a5aa28bb1dceb879fa gdb/testsuite/lib/opencl.exp -cf12cb8a1a0d752c10b1386a9f99d55c gdb/testsuite/lib/cp-support.exp -dcd36c35689026cecf5ef16c5241d0bd gdb/testsuite/lib/cache.exp -b63314c49bdf02a7d77f6e3450d7582c gdb/testsuite/lib/opencl_hostapp.c -51389ddfc17891fda77c0da1e367f8e0 gdb/testsuite/lib/ada.exp -9301b0f7ae9d41f0bda790aa4dd2e3a8 gdb/testsuite/lib/data-structures.exp -d8f9ff16c2bab91a7a85a182114d6e70 gdb/testsuite/lib/pdtrace.in -0153b533fea11ce4cf7e8b16782d7560 gdb/testsuite/lib/prompt.exp -a4cf9a43188a7314dca50c129aefe47a gdb/testsuite/lib/mi-support.exp -097f249f15d64f8b323aca9be896cecc gdb/testsuite/lib/rust-support.exp -745e18a312274306ac2623a622dedb6d gdb/testsuite/lib/append_gdb_boards_dir.exp -56103ba1472e302d3a05bc548cc5f1d5 gdb/testsuite/lib/dtrace.exp -1d563a03d6ecbd4c261f5bf64bfab2c9 gdb/testsuite/lib/gdbserver-support.exp -da716f9ffcfd7a8af5115d7f6895ef39 gdb/testsuite/lib/d-support.exp -bd74c2c003d22e6107946a7c833c105a gdb/testsuite/lib/gdb-guile.exp -16fa709b2779c5ffbd81cfcf410060bd gdb/testsuite/lib/compiler.cc -0e1bdedb6e706a825ac64cdb128bb95f gdb/testsuite/lib/gdb-python.exp -a16b14b85a2bd95553941f40fa2a187d gdb/testsuite/lib/compiler.c -17659c7847b1b1c4612a367fa6f61b64 gdb/testsuite/lib/cl_util.c -f31ec70496f2b7aa80f59c146fca540c gdb/testsuite/lib/tuiterm.exp -95a4fdd2e56640e008804e8b5c27d2f6 gdb/testsuite/lib/completion-support.exp -a6f591a923aa6d690e8f3af803320569 gdb/testsuite/ChangeLog -ae01e01639532348630f941da606cca7 gdb/testsuite/configure -233edd7cf9d572e1cc18b4123368b003 gdb/testsuite/gdb.btrace/tsx.c -5c935fdb799b5237c6e556f989035435 gdb/testsuite/gdb.btrace/i686-record_goto.S -49e78e8b4f5bb11fa888a54a02531d09 gdb/testsuite/gdb.btrace/exception.exp -26cf5b8c9f8825753c280693983165c7 gdb/testsuite/gdb.btrace/step.exp -7fc0e41de36b69ac1b78a05648934287 gdb/testsuite/gdb.btrace/segv.exp -b39edf028672fbd44f5eea26cd150d92 gdb/testsuite/gdb.btrace/reconnect.c -e1ef0966c98d55ad1f2f39fbb2d0a549 gdb/testsuite/gdb.btrace/dlopen.exp -f12f5b91ad8b921c2fdce9febd817bdb gdb/testsuite/gdb.btrace/segv.c -ef1c996174f0a2d72b5e8ee72e44289f gdb/testsuite/gdb.btrace/stepi.exp -d2abd9dcd4c734a63a09c3e05bf23b63 gdb/testsuite/gdb.btrace/tsx.exp -1239f5c3487212b3b0d11ea2030f9f38 gdb/testsuite/gdb.btrace/record_goto-step.exp -2881281cd742bd018854c513076b3404 gdb/testsuite/gdb.btrace/rn-dl-bind.exp -9126514d046b8b9e49621b93d8f3d443 gdb/testsuite/gdb.btrace/multi-thread-step.c -22c7c8e274606f78bd8436f3ca1b0bee gdb/testsuite/gdb.btrace/vdso.c -f9ac102a347c30332274b8881cb760d8 gdb/testsuite/gdb.btrace/x86_64-tailcall-only.S -ea8494434509eefad52335e558fe7b41 gdb/testsuite/gdb.btrace/delta.exp -8ca5a58534e750824dfd110030e371c5 gdb/testsuite/gdb.btrace/instruction_history.c -a1449f3ca62f03372c6152c754acadb4 gdb/testsuite/gdb.btrace/function_call_history.c -b01e346d78ec7d73ee1972d11c3ac0c2 gdb/testsuite/gdb.btrace/vdso.exp -a7d5b1788798b3430934dcd66e871eb2 gdb/testsuite/gdb.btrace/enable-running.c -9c145bd8081d7849ae30e377bece9239 gdb/testsuite/gdb.btrace/enable.exp -8777076f5c5ba0c010f7192757ac0fbe gdb/testsuite/gdb.btrace/enable.c -93bb27fa66482566b6026bd562f0b4d9 gdb/testsuite/gdb.btrace/i686-tailcall.S -c47b0c54ef777027ddf8b28cb526572d gdb/testsuite/gdb.btrace/unknown_functions.exp -7f1838a3030bc6dc5ec02be3fed87436 gdb/testsuite/gdb.btrace/reconnect.exp -be288cbe42e9f3aaaea205fb1a5ec8f7 gdb/testsuite/gdb.btrace/data.c -f047f60d241a7cafa2d2d58589867099 gdb/testsuite/gdb.btrace/non-stop.exp -5416a85b006b97d78932143bc7a744b6 gdb/testsuite/gdb.btrace/rn-dl-bind.c -8ba854ffe3d5f428413868c113b959a8 gdb/testsuite/gdb.btrace/instruction_history.exp -7ef8aa3b82066056dd9199c21fddac71 gdb/testsuite/gdb.btrace/non-stop.c -f108f36b7ab7d5eed05fb06eb5172dec gdb/testsuite/gdb.btrace/unknown_functions.c -80fa647857170e9476e0948b02d47ab1 gdb/testsuite/gdb.btrace/enable-running.exp -bf5b41dda65d77b0aced7334b0fd361e gdb/testsuite/gdb.btrace/function_call_history.exp -b1df5f65ca3b9fe1b14284909eaffbfc gdb/testsuite/gdb.btrace/x86_64-record_goto.S -ccffddc26f8b2184f93ee5ba709ceed6 gdb/testsuite/gdb.btrace/dlopen-dso.c -c660bea5ab15c582f98a9970647c914c gdb/testsuite/gdb.btrace/cpu.exp -8c64a1700b7c80c99b106d42e3448e6c gdb/testsuite/gdb.btrace/record_goto.exp -25146a6f0c4a2c7c7f20fdf2cddc4e9a gdb/testsuite/gdb.btrace/instruction_history.S -b354a8db73f711bbb0c61a0f35c9f521 gdb/testsuite/gdb.btrace/tailcall.c -b8ce8b88ce426a371aee6447692d9a38 gdb/testsuite/gdb.btrace/gcore.exp -7c268f09f0b190026225e7e6685c24d1 gdb/testsuite/gdb.btrace/x86-tsx.S -4f795a20fa0eb95a3368340390897caa gdb/testsuite/gdb.btrace/nohist.exp -70fd14a766c89c2f92764294226f5ba9 gdb/testsuite/gdb.btrace/exception.cc -9ad22d3d7569d33a6e808adfc1055dc8 gdb/testsuite/gdb.btrace/i686-tailcall-only.S -e629de70d219e6d34684466de9f1202f gdb/testsuite/gdb.btrace/buffer-size.exp -c440dd0f18c9c0496cbde01307c8fdc8 gdb/testsuite/gdb.btrace/x86_64-tailcall.S -d6d2236f9354b65f3b726b9b23d4e8cc gdb/testsuite/gdb.btrace/record_goto.c -36ac1ac51916e624f0c7c760547ebfe5 gdb/testsuite/gdb.btrace/multi-thread-step.exp -c163f82747dd04189c43264e43181a27 gdb/testsuite/gdb.btrace/tailcall.exp -cd47e35e344e465202332aff375c65f1 gdb/testsuite/gdb.btrace/tailcall-only.c -fee8b17486166e6f81b6f2060bea13cc gdb/testsuite/gdb.btrace/data.exp -17dcf44412db8c946cc9372f1c854a19 gdb/testsuite/gdb.btrace/dlopen.c -09c287f5f9e16ee462a8fd36b8c8f9f1 gdb/testsuite/gdb.btrace/tailcall-only.exp -17a5768a41a21df36d345669bf9a5444 gdb/testsuite/gdb.rust/expr.exp -dba79bc4523289b93741f9f0f906bca5 gdb/testsuite/gdb.rust/simple.exp -7d2242564dca8845fd66cd512d24901d gdb/testsuite/gdb.rust/traits.exp -3eb6870368d55fa74cc8d1b42bf4af51 gdb/testsuite/gdb.rust/traits.rs -b1ed775d3b3923b40a5b7856fa5d8f58 gdb/testsuite/gdb.rust/modules.rs -98d087061fbe555d980eca43d5fef02d gdb/testsuite/gdb.rust/methods.exp -8b899c187804bd61ddddfc4ab952c694 gdb/testsuite/gdb.rust/watch.rs -1086e2b5252f8fa5036621f451b0b7be gdb/testsuite/gdb.rust/modules.exp -ab08a08178dd1f089daea8db119c660e gdb/testsuite/gdb.rust/methods.rs -5d5cf0c536a8710bffc01e518e00e1ff gdb/testsuite/gdb.rust/simple.rs -9c40e3eb6d4d285d8f4d5f0110eb6c89 gdb/testsuite/gdb.rust/generics.rs -8a97bbe55729f3cc3bdfa2af8e8919c1 gdb/testsuite/gdb.rust/watch.exp -671f12fa9534bbd0ad7926404af484e2 gdb/testsuite/gdb.rust/unsized.exp -0ba7f52c39fe1479b09fb4f868c90cc9 gdb/testsuite/gdb.rust/generics.exp -23009b3a61dff7a8a035d19b29e9e85f gdb/testsuite/gdb.rust/unsized.rs -afdaa77faebba04d23658dba7719f657 gdb/testsuite/gdb.gdb/selftest.exp -4bc7303fda8ea98a0349e0315329183a gdb/testsuite/gdb.gdb/complaints.exp -2fa818741e884a5c6073fee0dda8c5fc gdb/testsuite/gdb.gdb/python-selftest.exp -fd4e8acfd237012245087f13d3191082 gdb/testsuite/gdb.gdb/python-interrupts.exp -3ea427de4962122358a1fc6eae5157cb gdb/testsuite/gdb.gdb/unittest.exp -a733034b99e44ea2f8443e4303b7c685 gdb/testsuite/gdb.dlang/expression.exp -3b3365f8a7f41f704ba4d881e5138534 gdb/testsuite/gdb.dlang/watch-loc.exp -c22ea1a2360d8b39b2638143d99bc095 gdb/testsuite/gdb.dlang/properties.exp -b8c393d1081ca5fd1e52611d10241048 gdb/testsuite/gdb.dlang/debug-expr.exp -44daeb342772a8a2bc71c994222c6f28 gdb/testsuite/gdb.dlang/watch-loc.c -1b5005ebc2a0bdfee31636a059eaeafd gdb/testsuite/gdb.dlang/circular.exp -9fb51c06b421d6048948d0dda9fd1a42 gdb/testsuite/gdb.dlang/circular.c -95658230ea5aea6c627d3e6211c45865 gdb/testsuite/gdb.dlang/demangle.exp -0f6e6367653fe62d87b4dcdf918b0110 gdb/testsuite/gdb.dlang/primitive-types.exp -9703adab4e77a5903752adbe89cf8ba1 gdb/testsuite/configure.ac -557a10abdf6c30cf5aa42fba6030ec7b gdb/testsuite/gdb.opt/inline-locals.exp -8117d371432abc5ac492e5a81220c2ea gdb/testsuite/gdb.opt/inline-cmds.exp -748726a5da689261a514ed3d75b65492 gdb/testsuite/gdb.opt/solib-intra-step.exp -b9cc87cf077b13c65aed5f7bfd094521 gdb/testsuite/gdb.opt/inline-bt.exp -dec9f3e359496ea4e64d581cc1bc4d1f gdb/testsuite/gdb.opt/solib-intra-step-main.c -34ca25d6fa43fbf5131a914881ae828a gdb/testsuite/gdb.opt/inline-bt.c -e14218424e80933ab0a4a7e3151f088e gdb/testsuite/gdb.opt/inline-cmds.c -b52e42b8241c2394722b9dda7bcd90a0 gdb/testsuite/gdb.opt/clobbered-registers-O2.exp -3f288b1fb7fcaec702feef6cf2ab8414 gdb/testsuite/gdb.opt/inline-locals.c -f2a21ba3e893b7bfacc7d92938524b3a gdb/testsuite/gdb.opt/solib-intra-step-lib.c -12f9777bafcb07d0bf5f88787dfc35e1 gdb/testsuite/gdb.opt/clobbered-registers-O2.c -4f11af599e7e98806dbcce5d69dd85d2 gdb/testsuite/gdb.opt/inline-markers.c -ce5729cc4ff581fd1a943131dd9fd65d gdb/testsuite/gdb.opt/inline-break.exp -54add69cf756211bde1c8f59cd8e9236 gdb/testsuite/gdb.opt/inline-break.c -80b69df2d82fed604d68fe6588d72144 gdb/testsuite/gdb.xml/tdesc-arch.exp -a415e522c1c14eb556ab2b6ff0986ab1 gdb/testsuite/gdb.xml/tdesc-errors.exp +4464a9286a9a1b22b67cc25ff780aac0 gdb/gdb_regex.h +e3eaca81079ce9f1a0e62e650b184aca gdb/reply_mig_hack.awk +f519c6eb721912d1fb902fffb21089b6 gdb/gdb_bfd.c +7e17f5773c209f663f8aac1abfec59d2 gdb/skip.h +dd27b2424331ce3d178a6b3da1653b26 gdb/ravenscar-thread.c +0a01d5738af96aab50cb7b5266c7cce5 gdb/ppc-linux-tdep.c +383eadaa2bff05a3f8a77726b0489857 gdb/extension-priv.h +85ce07c003ae09e1a703b90d7d8ee5f9 gdb/mn10300-tdep.c +513325a24a59448548aa9c9a892d4575 gdb/thread.c +1516e67afa4f560d91de5bec13bfe80f gdb/.dir-locals.el +937edb4edb2df2e4ed1f87c521ebe7d3 gdb/mi/mi-cmd-disas.c +33e0646f76447db7a2d8a8b5d81c3150 gdb/mi/mi-cmds.c +90b81f951a2351c88c1b4a1fedbb492f gdb/mi/ChangeLog-1999-2003 +91bb32f42b1306f46719cc163b0ab1aa gdb/mi/mi-cmd-file.c +99e98a54842909df7309841eee1f759a gdb/mi/mi-cmd-break.h +eeb78a22d6361e7eef6c82045496ecfd gdb/mi/mi-cmd-catch.c +63f864dd3aee4ba83bc3d05a83111ae4 gdb/mi/mi-cmds.h +ebcbcd47915ebb18f3ad35e7136d8f22 gdb/mi/mi-cmd-target.c +e95c1b11511aeb311a6b7defc3d20596 gdb/mi/mi-interp.c +731e8b8a16eff7f4636905ae736203f5 gdb/mi/mi-out.c +a625df13ed4b602c7ee0baf556db0755 gdb/mi/mi-cmd-env.c +1453c0985a0559aafb6a7f6f267548f3 gdb/mi/mi-console.c +2931f3d416011aa308a15bdcaf9c539e gdb/mi/mi-out.h +702254a71ef53f613cd13dafabd835ec gdb/mi/mi-interp.h +8f79264ecffc208c99081f2533e0faf5 gdb/mi/mi-cmd-break.c +134417b31abb8ee682ace2c7c64227bf gdb/mi/mi-common.c +55770c66408580b06496882e86c73a1a gdb/mi/mi-parse.c +5ad42142af17a3e0805b86b26abb6126 gdb/mi/mi-parse.h +0e731dcc1de5b19fa2f9210724a5b365 gdb/mi/mi-getopt.c +e217c768d1ff5b4a568d44927d67eaaa gdb/mi/mi-main.h +3dab0d828409afdf5f69f1c5a7039a72 gdb/mi/mi-cmd-var.c +e123138f37251831ea7d795e712ad3a9 gdb/mi/mi-getopt.h +16f51d07c5394e301cf693ffe5138573 gdb/mi/mi-cmd-stack.c +2dc4fe1e4469a83d3700bd7fb4dd8f0b gdb/mi/mi-symbol-cmds.c +3afecf94d931e5c2a272457a340980b5 gdb/mi/mi-console.h +5e52299491d7a979c2eb17c2c308194a gdb/mi/mi-main.c +640ddcf0e6d8135e7f70cdcc4bcea3eb gdb/mi/mi-common.h +b195328682346850d0c6636d71f6a6eb gdb/mi/mi-cmd-info.c +da61b282cbfc399d015fba5d7c5e1ea9 gdb/glibc-tdep.c +d49276bdb8fb76f6a4fcf84eb8ee8031 gdb/ChangeLog-2002 +4e07ab49091c90817cb4f7073c9d3e81 gdb/solib-svr4.h +edb7f396a388ccfecff3f0a59a656802 gdb/m2-typeprint.c +109b9581317ac734b2218e669f0f4dc7 gdb/nios2-tdep.c +d8c11f699ade1b51f1be8865000b9ea6 gdb/ChangeLog-2010 +40e239884269e1dc78db44c867f1e01e gdb/alpha-bsd-tdep.h +f849f63bbf7a43793977f3dc92c584ca gdb/tic6x-tdep.h +891fffbeb993f012aa0425c725618185 gdb/sol2-tdep.c +60d70177f004ef91dcf24cf5f6eec2d1 gdb/proc-service.list +d7ae8aa4acf8816f3b4806e1afbe04ab gdb/linespec.h +eaf65f62d2e554acaee0c38334521833 gdb/arc-linux-tdep.h +368cd6f0a2139fd8757f53081b446ac6 gdb/microblaze-tdep.h +c8aae08a93071869bd075c147015efc5 gdb/ppc-linux-tdep.h +a3b4348247ed67619a6549bad207301d gdb/aarch64-tdep.c +619fd5c7a2adce3e285cec4d6803b5c8 gdb/build-id.h +5c2f87245520f5baa73854e30fb79c1c gdb/tracepoint.c +0f565097794704c3d24058d8e4335c7f gdb/i386-obsd-nat.c +0a161d60312cc567dfb1313ac3fb8c78 gdb/frv-tdep.h +642dd5430cafb025f9338dd15d7eeeb7 gdb/ada-lang.c +3e2a47770d55129abf3dd5820dc0ef76 gdb/moxie-tdep.c +8a987eae52076edf1fd765b6a03fb30c gdb/m2-lang.h +fef20a924389f85aab655884ae156372 gdb/lm32-tdep.c +eeb4a618da1498704a4be65b084bed2e gdb/mipsread.c +ae85ea10b4751dfd6a64594d73d7285b gdb/expression.h +3f821dbc2e6dbd6fe3a23b36108bafd3 gdb/alpha-obsd-tdep.c +33d28ffa6d9389edc2c8314fff7bd232 gdb/nds32-tdep.h +9ab0274e428e53dad95b281cffa2fa24 gdb/gdbarch.sh +4c148c1e6401c1d508dedf28d318af4d gdb/linux-thread-db.c +4581d90e8b434f46936770d57b30a8bd gdb/thread-iter.h +718fc7eaf6f9b5d829d79f1fb730d72e gdb/sparc-nat.h +409872ae310a476de048cdd18722a405 gdb/run-on-main-thread.h +e183284f5bfc7423034357d672ebed6f gdb/configure.ac +4203e0d2fde5f677a67ce4935cdc0f55 gdb/arm-fbsd-tdep.c +a3fe7d1f4ccdddf63123b36ea878f141 gdb/remote-fileio.c +c8bd2289175ee97d1c1ca62779f9ed34 gdb/disasm.h +d4f314cb44a0b6534c59393c7d1308e4 gdb/osabi.h +e8ef6450f64efd1f5d9afc1bedc5bad6 gdb/f-typeprint.c +ee669c3204cc2ec86a742c5773a6f44a gdb/ser-base.h +e78773b00f8affa2b2576ba49365b401 gdb/amd64-nat.c +27b859d41a9d5adac07a287225855903 gdb/microblaze-tdep.c +4a506a3f75a35ebf9c57ca32c8547b2a gdb/bfin-tdep.c +ea8ad396162225985db869bae3145983 gdb/gdb.c +0acb940cdaa7adbc0b4acb263c2caf37 gdb/fortran-operator.def +f4463ebcb8f0441d1f6b076fa2279c99 gdb/ui-out.c +e33058fb1cc1b4093834894bcb5de9e4 gdb/ada-tasks.c +eec1cde30673577594de7caacc878661 gdb/i386-tdep.h +31bb048db8cb9a2dad6dc896684cd04a gdb/rust-lang.c +981df879d2998048de36b0218a3d0570 gdb/macrocmd.c +ee15cfe84bfae54ec262e6b679334eb0 gdb/nios2-linux-tdep.c +b9572648d1f42d833ed71a1bacedd56e gdb/xml-support.c +1c074129803d8570d6424d089eceb376 gdb/arc-newlib-tdep.c +58aeb0f7d16eed1c73f8bd2a3d641fb3 gdb/ppc64-tdep.c +739f15d891efd641feffdb7a89ad2117 gdb/completer.c +3e0089ee88b298ca33c7bd4b4b07b00a gdb/inflow.h +14d4bc45a5e54766ce96823c6f865192 gdb/mdebugread.h +85f73c11abb04d07a905c81f358cfab1 gdb/ser-tcp.c +dc0680b8b9a42adc2d198aefa49b9a23 gdb/mdebugread.c +5d696c98390cf73d297cd1b2b586b738 gdb/cp-namespace.c +35c796ac1650733295a9f4fa195e6284 gdb/remote-notif.c +57138971d1f21c15548c110f6c48a125 gdb/proc-events.c +80c7108bcd799d75ea00bda5f647eb3c gdb/std-regs.c +b1eeeaa9b52b0d81b8af34b7a40ed77b gdb/posix-hdep.c +ffaae18ff283d24046c280148e025233 gdb/ChangeLog-2011 +d206adfe1f6492b2253c34e9b00887f8 gdb/trad-frame.c +961e8264efcea0dd64634b3a50a4c309 gdb/infrun.h +1f79460f5f77039757c38633bced78cc gdb/inf-child.c +06e7de4239077b6e8abb310c69d0e437 gdb/s390-tdep.h +f92f7e6f440094b8176c848a581ea624 gdb/stack.h +a6aa71257da1ffebaf47a287be8ac526 gdb/sentinel-frame.h +0485019ded74c6a26afcca5131d4bf7f gdb/rs6000-aix-tdep.h +771e3eb9902a4b5f9d12af1b854167fc gdb/ser-unix.h +001e875e06b0d46cdafbcde99adc1e14 gdb/testsuite/gdb.guile/types-module.exp +2201fe232be56f834518596b4f09f9ce gdb/testsuite/gdb.guile/scm-frame.c +fb6e0ef5e9eb5479db05f293f519ad9b gdb/testsuite/gdb.guile/scm-objfile-script.c +5368d791b769be5ee061c741ad647733 gdb/testsuite/gdb.guile/types-module.cc +6bb263d1221bbbaa13eb92dae9f56633 gdb/testsuite/gdb.guile/scm-arch.c +034f10ff80281c232551eb29c4a02cb4 gdb/testsuite/gdb.guile/scm-symtab.exp +969724b731fc3a9b01b61e8c3749106b gdb/testsuite/gdb.guile/scm-iterator.exp +b4fe5c4b91db7ded7742d7fbac75d1c9 gdb/testsuite/gdb.guile/scm-value.c +01ef1ac5cca0caa4923690b522af58db gdb/testsuite/gdb.guile/scm-symbol.exp +fba31fe873f7b0ba5300ea9db8a3cb21 gdb/testsuite/gdb.guile/scm-section-script.c +b2ce4dee8ea8bf179f56cd89372ef7f6 gdb/testsuite/gdb.guile/scm-ports.exp +7a5c612a9d0dc590b6ebef6bce7db094 gdb/testsuite/gdb.guile/scm-objfile.exp +c29e545ba19f9666f99559f4055cdd4b gdb/testsuite/gdb.guile/scm-error-1.scm +2b21e653c31d6271a65aed2899bd62e9 gdb/testsuite/gdb.guile/scm-objfile-script.exp +225f6557822bda541b0626577acfda4c gdb/testsuite/gdb.guile/scm-error.exp +a056e33eccab2cf90e5367eed7bed8e2 gdb/testsuite/gdb.guile/scm-lazy-string.c +029ac1dc69d7aeabfee86018c8b0e0b4 gdb/testsuite/gdb.guile/scm-frame.exp +c5b2e048f6a7c9911b624e7929f836b9 gdb/testsuite/gdb.guile/scm-parameter.exp +f2f94eb3e38654d06590de3a678227bd gdb/testsuite/gdb.guile/scm-type.c +6f94d3fcebddb59de647dfd4d68e7113 gdb/testsuite/gdb.guile/scm-ports.c +22990062df0a8d09430b76c144a9ecf7 gdb/testsuite/gdb.guile/guile.exp +6bb263d1221bbbaa13eb92dae9f56633 gdb/testsuite/gdb.guile/scm-disasm.c +f1797700c0fe50dc6c6903e9579a92af gdb/testsuite/gdb.guile/scm-breakpoint.exp +dc0c043fd4dea287cffc6ca1c048cce5 gdb/testsuite/gdb.guile/scm-disasm.exp +48b4108c6952961473e6f4fabb2c211c gdb/testsuite/gdb.guile/scm-objfile.c +872b9cb134e8684716e660fc9f80adc6 gdb/testsuite/gdb.guile/scm-lazy-string.exp +9a4de88e9654d66698eaa40875e4b138 gdb/testsuite/gdb.guile/scm-gsmob.exp +f22ee38f1a25c4d60bcba33d4c6b3794 gdb/testsuite/gdb.guile/scm-pretty-print.scm +0930f92a8d956125c1bbc7b91d2ec150 gdb/testsuite/gdb.guile/scm-equal.exp +bb60aa102a0ac400efebb752bd2f51d3 gdb/testsuite/gdb.guile/scm-symtab-2.c +0abe9758ffc4a4a7cf892fc0e27638a2 gdb/testsuite/gdb.guile/scm-frame-inline.exp +b50c6c951eb5619bb62066b3493594cf gdb/testsuite/gdb.guile/scm-symtab.c +94e2145497fb7dac4736d0507eb42911 gdb/testsuite/gdb.guile/scm-block.c +6d111084049de99ab173131a45ca3154 gdb/testsuite/gdb.guile/scm-progspace.c +07d00f43068a7fa5a9547fc064593508 gdb/testsuite/gdb.guile/source2.scm +328e16b6f929a83ce1f17729e1a05590 gdb/testsuite/gdb.guile/scm-objfile-script-gdb.in +08c28a3d1f8c27f6e878c47a7bf64f07 gdb/testsuite/gdb.guile/scm-breakpoint.c +f70688212ecc8d5452d82a610821702a gdb/testsuite/gdb.guile/scm-frame-args.scm +7bf50e7625610d5b4e8d131a7017566f gdb/testsuite/gdb.guile/scm-cmd.exp +78b6682156968dc055e6a939d1c01f7b gdb/testsuite/gdb.guile/scm-math.c +3c5592c78feb88c1b975611d030fb69d gdb/testsuite/gdb.guile/scm-pretty-print.exp +293fd37e30bc8237ee8f14f703e379a9 gdb/testsuite/gdb.guile/scm-cmd.c +eaecf8aa41649ba1b73c4be57d5a4c5a gdb/testsuite/gdb.guile/scm-iterator.c +e2cf68a54bacc1a3e76b42640f3a7cca gdb/testsuite/gdb.guile/scm-section-script.exp +f1faf3cba34ebbceb70fc317c1e66697 gdb/testsuite/gdb.guile/scm-symbol.c +59295bf97d900fb85ba21cde449f057d gdb/testsuite/gdb.guile/scm-section-script.scm +1ae2c4202754da7a4740b69831c0e575 gdb/testsuite/gdb.guile/scm-error-2.scm +3716202d35f94ef738c9942ca4c6bd01 gdb/testsuite/gdb.guile/scm-equal.c +d5b7c630712a73130f3945440468d47f gdb/testsuite/gdb.guile/scm-value.exp +71066189f3c410dd0a6238fb57a27d6d gdb/testsuite/gdb.guile/scm-math.exp +78f8c09e4951c74c7b0111641b5d855f gdb/testsuite/gdb.guile/scm-frame-inline.c +34cc0720c859c8a1c3639848206e5686 gdb/testsuite/gdb.guile/scm-arch.exp +97f443196196cea81c7cc88f1de4951b gdb/testsuite/gdb.guile/scm-block.exp +13ae8d0c0b25bb784200e3455a4a74f0 gdb/testsuite/gdb.guile/scm-value-cc.exp +9b4c2f079bd0788a89033b347a3143b4 gdb/testsuite/gdb.guile/scm-frame-args.exp +b2f9488dcf744de25ae856238cefd7f2 gdb/testsuite/gdb.guile/scm-progspace.exp +e761486212910ca683c255c0b1b59b3c gdb/testsuite/gdb.guile/scm-type.exp +34b16cf7a48d0582d9e42ebca7b5d054 gdb/testsuite/gdb.guile/scm-frame-args.c +9f78070d4fbdfe486ac907401a6ee64a gdb/testsuite/gdb.guile/scm-pretty-print.c +2db7615ea844fb220ca0be34fb69b2f3 gdb/testsuite/gdb.guile/scm-value-cc.cc +2edb7f070c4635b22829f275ac58b1d7 gdb/testsuite/gdb.btrace/enable-new-thread.exp +be0d595bb29c3b1da870cb2724323d04 gdb/testsuite/gdb.btrace/function_call_history.c +e83402daf6539c45d0454c5699f0532c gdb/testsuite/gdb.btrace/stepi.exp +01a8fa19de7e185859d3ca46f224caae gdb/testsuite/gdb.btrace/exception.exp +eae6391df07def4de87db40847c3a609 gdb/testsuite/gdb.btrace/data.c +1dc44e82b336861d2ce4b43dc522b0ad gdb/testsuite/gdb.btrace/i686-record_goto.S +a4e33253a7b2ff8afd0be8c0282b4bac gdb/testsuite/gdb.btrace/instruction_history.S +99bd4e3db3a0b763d90c93f68c0ff0e7 gdb/testsuite/gdb.btrace/x86-tsx.S +464ec4001e43b4c2a2c4b5eada160464 gdb/testsuite/gdb.btrace/dlopen-dso.c +fb93df8031c6d9587335b0519cc20858 gdb/testsuite/gdb.btrace/dlopen.exp +676d6ee7b3825dd8498f4e6ee71e5ba1 gdb/testsuite/gdb.btrace/data.exp +008f3c125c21f12eb3c0251ec41c5ed8 gdb/testsuite/gdb.btrace/buffer-size.exp +8c003cbd808e779cb48a91ed66d246a5 gdb/testsuite/gdb.btrace/tailcall.c +e5801b21971af0840209c04cba0df989 gdb/testsuite/gdb.btrace/cpu.exp +54b46449610b3c2b08a5b230b8f76832 gdb/testsuite/gdb.btrace/tailcall.exp +330419bf042c1e69918a5dec145e0755 gdb/testsuite/gdb.btrace/segv.exp +3edb391f2ff2636407119864b87ff1f6 gdb/testsuite/gdb.btrace/rn-dl-bind.exp +b1701bd6389dae57dcc6408d2cefd147 gdb/testsuite/gdb.btrace/x86_64-tailcall.S +c014f68d523391c572129baf1b94d58a gdb/testsuite/gdb.btrace/multi-thread-step.exp +db575f179c32bc88a189d6dfe3267750 gdb/testsuite/gdb.btrace/enable-running.c +80d696488cb7386f2fce7f80924fe2b1 gdb/testsuite/gdb.btrace/gcore.exp +0b0ef17a8bb14b9ae879aa212f68faf2 gdb/testsuite/gdb.btrace/instruction_history.c +6503d162e894306fca23c773f60fabf6 gdb/testsuite/gdb.btrace/tsx.exp +94807159c06fb8b32571ab12340a224a gdb/testsuite/gdb.btrace/enable.c +1be601968e8ee9ed975df070b0170409 gdb/testsuite/gdb.btrace/i686-tailcall.S +af5338bfd76762ef02e10b9aedcdf1cd gdb/testsuite/gdb.btrace/function_call_history.exp +e85a2eaff862a752d07a410fdb83b6d5 gdb/testsuite/gdb.btrace/unknown_functions.exp +2c688d4727e4310aa5336c4120e156e6 gdb/testsuite/gdb.btrace/x86_64-tailcall-only.S +16053202322aa179f4af84df94b4ff2c gdb/testsuite/gdb.btrace/segv.c +a83b3c6dd429148fe4a9cb1220239eb1 gdb/testsuite/gdb.btrace/non-stop.exp +860edaf681b60bffa925575cb6c42a1e gdb/testsuite/gdb.btrace/record_goto-step.exp +52953163380f25a8d6cc3f57ab8154fb gdb/testsuite/gdb.btrace/rn-dl-bind.c +fa969478c2fad95e02c61b8b3c4d8a43 gdb/testsuite/gdb.btrace/multi-inferior.c +b6b73f248d6e7570e3a5b649fc726a26 gdb/testsuite/gdb.btrace/tailcall-only.exp +80b095aa984b2647aec495fc0a60cfc6 gdb/testsuite/gdb.btrace/instruction_history.exp +60b06ed6cee2883c873f8ed9785bc256 gdb/testsuite/gdb.btrace/non-stop.c +a6e5ff89b0181e27073eb8cfad4eef10 gdb/testsuite/gdb.btrace/exception.cc +a130410a987cecfd65db7333c94788d9 gdb/testsuite/gdb.btrace/enable-new-thread.c +81a5af81f4fdb974a7669051b1a3a481 gdb/testsuite/gdb.btrace/multi-inferior.exp +f82e94e53c79855b982ea63e3882f097 gdb/testsuite/gdb.btrace/i686-tailcall-only.S +0b327abffef12a909230829583b1117c gdb/testsuite/gdb.btrace/multi-thread-step.c +83ea157f1f94f9f2b0988cc172604dac gdb/testsuite/gdb.btrace/record_goto.c +37242cdb0fff80720321dbf0f8c1e7ad gdb/testsuite/gdb.btrace/reconnect.c +670aae934851e9c22b80f15ae1e7e185 gdb/testsuite/gdb.btrace/x86_64-record_goto.S +bf60eeb966125007ce73ff220ee4764e gdb/testsuite/gdb.btrace/unknown_functions.c +46ae02e98063284610f956cef73f852f gdb/testsuite/gdb.btrace/enable.exp +62c72a18e854cdd4c14a4983a4371d4e gdb/testsuite/gdb.btrace/step.exp +fb3cbdfa8b9a5f04c51bd5b4149eb126 gdb/testsuite/gdb.btrace/tailcall-only.c +c2ecca38b4b93c52f8fb1d11eb2abe8c gdb/testsuite/gdb.btrace/vdso.c +91c18e778bbffa441dbd49a2ec4b99e5 gdb/testsuite/gdb.btrace/delta.exp +a121075d9daa49f362a3697927326439 gdb/testsuite/gdb.btrace/reconnect.exp +43e5fa9e05d47755b3b5d0f4ba5a3b43 gdb/testsuite/gdb.btrace/record_goto.exp +71787cf3ca67942096b2d34c0cb138a4 gdb/testsuite/gdb.btrace/dlopen.c +8659b815226743fea7aa94c3d701d826 gdb/testsuite/gdb.btrace/nohist.exp +acffb9f667a8ceb006c2cea6ded0b9c1 gdb/testsuite/gdb.btrace/vdso.exp +f47616eecdba0cc05e1ce492b2c66e3b gdb/testsuite/gdb.btrace/enable-running.exp +128d87742dacae7a9b649a68df1e2b6d gdb/testsuite/gdb.btrace/tsx.c +1e5f69c1b7f5b35bfcbab2d114775763 gdb/testsuite/gdb.server/no-thread-db.c +0829330abc109a5fdb0162c6ac90e82c gdb/testsuite/gdb.server/server-run.exp +44f279cc919785e3c7b0e5159acb7b1a gdb/testsuite/gdb.server/ext-attach.exp +28a9c40ce37380f8a3c5d2fbabdd4cb7 gdb/testsuite/gdb.server/unittest.exp +07f017e6df29312f307a1b6306f96174 gdb/testsuite/gdb.server/solib-list-lib.c +2881729e61a287daaf0015af061e9879 gdb/testsuite/gdb.server/server-mon.exp +e276646cc7b3136ce08427b7f20bbaa8 gdb/testsuite/gdb.server/normal.c +a9b841b652a9ddaf4bf90cdadb5f431e gdb/testsuite/gdb.server/exit-multiple-threads.exp +d230bd2a58a5c6afce38f85ee4508b7c gdb/testsuite/gdb.server/reconnect-ctrl-c.c +bb23c823652e67cc82d7308ae491e257 gdb/testsuite/gdb.server/stop-reply-no-thread.exp +75914c1cdd979e998c25f28fa89e31e8 gdb/testsuite/gdb.server/extended-remote-restart.c +aee8c878d3a6bcfa6c20ba57b3277254 gdb/testsuite/gdb.server/wrapper.exp +3d8c9235e4f2a826aea326ab8e95ffcd gdb/testsuite/gdb.server/multi-ui-errors.exp +c47fe4efdd44fd00237d7e5ddd371932 gdb/testsuite/gdb.server/server-exec-info.exp +e9ffb2dec02572695e0bdf4f4ff3f746 gdb/testsuite/gdb.server/ext-run.exp +371fa47e081b7ebbe1b692ece0bf4308 gdb/testsuite/gdb.server/connect-without-multi-process.c +371fa47e081b7ebbe1b692ece0bf4308 gdb/testsuite/gdb.server/connect-stopped-target.c +7161b7356c28d9ac3ead209ed3816ff0 gdb/testsuite/gdb.server/exit-multiple-threads.c +6bf6a3bf675d6cac457734ae0476021e gdb/testsuite/gdb.server/server-kill.exp +c9651544803c3cbc0c6b2a0508095d9b gdb/testsuite/gdb.server/bkpt-other-inferior.exp +b83c8391da68f1e641f679bf1eed5690 gdb/testsuite/gdb.server/transfer.txt +0c24985263e9fb3546f7fb207718432f gdb/testsuite/gdb.server/server.c +a8992f9db1fe7ab678387415aa6f4a2d gdb/testsuite/gdb.server/extended-remote-restart.exp +255bbfd959da59716e7a4fe242b19273 gdb/testsuite/gdb.server/wrapper.c +74c6d4399aab67d80bb261dbfcb8611d gdb/testsuite/gdb.server/connect-without-multi-process.exp +6695be490b0c3ef6b65d5276ccd5ca40 gdb/testsuite/gdb.server/no-thread-db.exp +a06405435433fab67c1dd4811cc2c3f5 gdb/testsuite/gdb.server/ext-restart.exp +fedd162e2b9aa8a226e4d3c240341424 gdb/testsuite/gdb.server/sysroot.exp +f9ee956cdee11273dccb0a0b648fdcf2 gdb/testsuite/gdb.server/stop-reply-no-thread.c +afc3a8bfabc9253598d56a859c36a324 gdb/testsuite/gdb.server/ext-wrapper.exp +d4207cea8a7fd81f83c19ad0e5f6a1b5 gdb/testsuite/gdb.server/multi-ui-errors.c +c023f1dcd9e5354626c41e185976c67f gdb/testsuite/gdb.server/server-kill.c +6d2dd19a1a76eb3cc2c96f040c6f248f gdb/testsuite/gdb.server/connect-with-no-symbol-file.exp +29591bc8f7ca61fccb44242642227b28 gdb/testsuite/gdb.server/server-kill-python.exp +104bdff60e19738cd9ae90027ae3ebc8 gdb/testsuite/gdb.server/solib-list-main.c +bd9d16ff324145ec5e124716c85d7f12 gdb/testsuite/gdb.server/non-existing-program.exp +f18a5bd3df90df7dd92a12e04281adfd gdb/testsuite/gdb.server/abspath.exp +8eac8bae19a54ad8f32da8b1c4768ec3 gdb/testsuite/gdb.server/connect-stopped-target.exp +72c96733c295cf140c7a4281726c08df gdb/testsuite/gdb.server/connect-with-no-symbol-file.c +8f7d2072e980c69ef78f8d1d05a440ae gdb/testsuite/gdb.server/sysroot.c +c4a032b71b2ff24c74745f33d1a62301 gdb/testsuite/gdb.server/ext-attach.c +1ab204263b95f00a8df17ce971981310 gdb/testsuite/gdb.server/run-without-local-binary.exp +23f6b6db2dd053fed63ccb659554886b gdb/testsuite/gdb.server/file-transfer.exp +b05b3c27d98e2b48cf92ec554b95ec35 gdb/testsuite/gdb.server/reconnect-ctrl-c.exp +2e1accae54305257540e621edfa41842 gdb/testsuite/gdb.server/solib-list.exp +418643854af93816afea0368520fb6ba gdb/testsuite/gdb.server/server-connect.exp +9ae95f28f625b69241395bf480ce20ec gdb/testsuite/gdb.pascal/case-insensitive-symbols.pas +d8c35d3522171550dc89136356dcf891 gdb/testsuite/gdb.pascal/stub-method.exp +dd58d1603fc2c316afc1091dab7360c9 gdb/testsuite/gdb.pascal/gdb11492.exp +14d87b8a71710bc4f9116ead14f86319 gdb/testsuite/gdb.pascal/stub-method.pas +19990cb5b198325b185af673b5ee5b4f gdb/testsuite/gdb.pascal/hello.pas +ad48b7e992861b7d459b41ffc840f577 gdb/testsuite/gdb.pascal/print.exp +9c1aa5b03b80b8a1b9cdea78c4671ddb gdb/testsuite/gdb.pascal/hello.exp +bf3f50ce106502c0ec86849640c11e9c gdb/testsuite/gdb.pascal/floats.exp +7e8751d57d996f1ec9946c1acc15eafa gdb/testsuite/gdb.pascal/integers.exp +c1ce1222866c0443ca7c80733e6bbe6d gdb/testsuite/gdb.pascal/floats.pas +7d73ca3197aa63b670046f3d2f423d22 gdb/testsuite/gdb.pascal/integers.pas +598fb3bf731325e2cee503636143878f gdb/testsuite/gdb.pascal/gdb11492.pas +26bb8fc3b5abad36c6e3c0a95d07829d gdb/testsuite/gdb.pascal/types.exp +71e06893c3b4652df04c7556a193eed1 gdb/testsuite/gdb.pascal/case-insensitive-symbols.exp +015356686d8ea195e91b1389814579ee gdb/testsuite/gdb.xml/tdesc-regs.exp +f8e7043a6ec28fe297b2ed7aacd0501b gdb/testsuite/gdb.xml/tdesc-unknown.xml +4f957259a1af66b87b45b94b81dba00d gdb/testsuite/gdb.xml/loop.xml 8eb46c680c302af7d9de78ea3edb52fc gdb/testsuite/gdb.xml/single-reg.xml -8193b640543fc28861d31470b555dbe4 gdb/testsuite/gdb.xml/maint_print_struct.exp -6c996bf1c385bee20eda15b6eb224309 gdb/testsuite/gdb.xml/maint_print_struct.xml +0830e188313a7f3aa52fb758dad00972 gdb/testsuite/gdb.xml/maint_print_struct.exp +0762eff212b3c7e9fe3c7047b5f037d9 gdb/testsuite/gdb.xml/trivial.xml db4894f09a7324b25de6b98a23383a5d gdb/testsuite/gdb.xml/inc-body.xml -0708e0dc5f1e3f6ad3f7ec4f52dbc4d5 gdb/testsuite/gdb.xml/extra-regs.xml -4f957259a1af66b87b45b94b81dba00d gdb/testsuite/gdb.xml/loop.xml -4ccbddf814a749bfde74d549d3c44003 gdb/testsuite/gdb.xml/tdesc-regs.exp -b17141653a2a7f81010b78ba903cfdec gdb/testsuite/gdb.xml/includes.xml -9bbc43406da2744f6c8a7c38b97bb02c gdb/testsuite/gdb.xml/inc-2.xml -217bac7412f8837f007be696d457b70c gdb/testsuite/gdb.xml/tdesc-bogus.xml -f8e7043a6ec28fe297b2ed7aacd0501b gdb/testsuite/gdb.xml/tdesc-unknown.xml +e18fd11ebbb32b60489415c0d8b3608f gdb/testsuite/gdb.xml/maint-xml-dump-02.xml +43b8d2870210502e5310dd7192b1c6ea gdb/testsuite/gdb.xml/maint-xml-dump-01.xml +63c7e3f8b029582345525847724fe33a gdb/testsuite/gdb.xml/tdesc-reload.c +3f4b638ba74b3f4290efdb0e87d111cc gdb/testsuite/gdb.xml/tdesc-reload.exp +225ab570044d6f66e78c1898cbbd3240 gdb/testsuite/gdb.xml/tdesc-arch.exp 6822163e38e7af33a0d81cdac6768ac9 gdb/testsuite/gdb.xml/core-only.xml +217bac7412f8837f007be696d457b70c gdb/testsuite/gdb.xml/tdesc-bogus.xml 4f6f7233919a7b5cbebb97e0d9b9fcf6 gdb/testsuite/gdb.xml/bad-include.xml -0762eff212b3c7e9fe3c7047b5f037d9 gdb/testsuite/gdb.xml/trivial.xml -a6402e07a0b11f892469f30796ba31fb gdb/testsuite/gdb.xml/tdesc-xinclude.exp -8b4a7d876957efe84c9c2c7c05bd44f1 gdb/testsuite/gdb.linespec/thread.c -524029fa042bb0adb5582f6395bdaa73 gdb/testsuite/gdb.linespec/ls-errs.exp -eb0144867c6e226bbd5484042715dc43 gdb/testsuite/gdb.linespec/cpcompletion.exp -e4ef70c3aaa633b4a8d4dfd5d86fe147 gdb/testsuite/gdb.linespec/lspec.cc -6ce594755de5cbdfebc993fa1abc8648 gdb/testsuite/gdb.linespec/cpexplicit.exp -04a2d15f6a6b48fb897f20bcbee1ec68 gdb/testsuite/gdb.linespec/cpls-hyphen.cc -3dc901a94a6e3a70ca8a53b9366d874b gdb/testsuite/gdb.linespec/3explicit.c -f755e8262860966976c093089490d226 gdb/testsuite/gdb.linespec/break-asm-file.c -194071401d279fdc56ee636744d49ff2 gdb/testsuite/gdb.linespec/cpls-abi-tag.cc -7d5744f729ce416a4fc257da9e474f55 gdb/testsuite/gdb.linespec/ls-dollar.cc -eec25b1f738e54f2eee2ae99cf3bc8a6 gdb/testsuite/gdb.linespec/explicit.c -56dde0dc343e1400d90c7988c9992f95 gdb/testsuite/gdb.linespec/keywords.exp -46ba2c09ebdbe83684d4ce854765a1b5 gdb/testsuite/gdb.linespec/macro-relative.exp -b617740aa78ff602d095927deab7f8a9 gdb/testsuite/gdb.linespec/break-asm-file.exp -7e2e4c4debefdefbc746f3d503af8c5e gdb/testsuite/gdb.linespec/cpls2.cc -3676ef34d5594c6ec5a09591d8aad00e gdb/testsuite/gdb.linespec/break-ask.exp -f761bad6b6718f8cb8f904984bb0b9c7 gdb/testsuite/gdb.linespec/cpls-abi-tag.exp -29d521412d583a3733b9bbeb9306f706 gdb/testsuite/gdb.linespec/skip-two.exp -2062022d07da80b614c3b5874af4da87 gdb/testsuite/gdb.linespec/explicit.exp -4064c53d060605541e5aa44021ba36b2 gdb/testsuite/gdb.linespec/linespec.exp -a3bc89e8e4a41a7b5a6c3ddbc1cce14e gdb/testsuite/gdb.linespec/explicit2.c -7722036afd45d5f02edbd660a7d6012e gdb/testsuite/gdb.linespec/cpexplicit.cc -8ce9a284b978283fc01c139afe700294 gdb/testsuite/gdb.linespec/body.h -24c1d8d7c24a2014383f0d3fddecf64e gdb/testsuite/gdb.linespec/ls-errs.c -4d2f48dadb9e2e5e097a7d35dde96cf6 gdb/testsuite/gdb.linespec/break-asm-file1.s -3bdc90bad5eb3128030d592e134846d3 gdb/testsuite/gdb.linespec/macro-relative.c -36f1b5aa370d0a7d404efba9448d92bb gdb/testsuite/gdb.linespec/cpls-ops.exp -df572059395d2bbcbee337884f49c8c3 gdb/testsuite/gdb.linespec/thread.exp -4927832631330e7cf8ec40e02591ad5a gdb/testsuite/gdb.linespec/cpls-ops.cc -22f4bcf03b45c3cca1821c37ee9bf734 gdb/testsuite/gdb.linespec/keywords.c -76efa0be5b547481043ba197cad7a14e gdb/testsuite/gdb.linespec/lspec.h -8316d887f1c1a6e0e42c0510e98fe9eb gdb/testsuite/gdb.linespec/ls-dollar.exp -2ad5a41a627a7c295bdffa6b50dec462 gdb/testsuite/gdb.linespec/break-asm-file0.s -ed9089f9695d1dfe2cf636c3ec85d918 gdb/testsuite/gdb.linespec/cpls.cc -ccb4c8a58a1e1984a826873686972178 gdb/testsuite/gdb.linespec/base/one/thefile.cc -60938af77b15842ab4167d15179b1d6b gdb/testsuite/gdb.linespec/base/one/header.h -2353921c5d41b4575547837a65d062c5 gdb/testsuite/gdb.linespec/base/two/thefile.cc -7e96592bfaaffd7d7010d1ab8556f123 gdb/testsuite/gdb.linespec/base/two/header.h -42e76511d4737feccc1f03335ca36d14 gdb/testsuite/gdb.python/py-as-string.exp -e0d37f47823c8e29bf6ea31dad353e3c gdb/testsuite/gdb.python/py-nested-maps.py -231c30451bfd9d2a82cdcaf180f14378 gdb/testsuite/gdb.python/py-value-cc.cc -4b25173990ccdf170effe98aa0e118df gdb/testsuite/gdb.python/py-lazy-string.c -c3fe8a6ae866445fd9b7684d85f494a9 gdb/testsuite/gdb.python/py-value.c -f986369d32482d1cb2365a2123485aa6 gdb/testsuite/gdb.python/py-framefilter.exp -3b55bb9cd85418fb63898812dddf9bcd gdb/testsuite/gdb.python/py-unwind-maint.c -4232ab6e22fb5f13e05f1c927bd90412 gdb/testsuite/gdb.python/source1 -ac1b0ea9d4f31b5d439e184543a252a6 gdb/testsuite/gdb.python/py-value.exp -aaeff70e3368bc0d22caf0589e56d23b gdb/testsuite/gdb.python/py-bad-printers.c -95f74d1afb82b072d53289e0b259bd5d gdb/testsuite/gdb.python/py-block.c -887d187cdba115042512f91a034fec6a gdb/testsuite/gdb.python/py-frame.exp -e0d093f6c2f2901adb6cc17794876254 gdb/testsuite/gdb.python/py-typeprint.exp -b95b0c01b326fce9f967ff2c1d68df92 gdb/testsuite/gdb.python/py-prettyprint.exp -556c9a3598ebf2d9f7a5986ea212bf04 gdb/testsuite/gdb.python/py-progspace.exp -de2e95431c193c2b597bda91f9b8fc8a gdb/testsuite/gdb.python/py-finish-breakpoint2.exp -ec3fb8a3c6c5080c69c129c7edf97ad1 gdb/testsuite/gdb.python/py-pp-integral.c -f83c30a3153e8d2abfaf648050d18a50 gdb/testsuite/gdb.python/lib-types.cc -dd5be213caa1a56db1fab63d69d964d8 gdb/testsuite/gdb.python/py-evsignal.exp -916d3b2952f68fb5709d964867056cc3 gdb/testsuite/gdb.python/py-explore-cc.exp -1e442dc2dbb0628977e68cd975f3910e gdb/testsuite/gdb.python/py-events.py -c80694c641ce4d3304b8991d7f86adcb gdb/testsuite/gdb.python/py-unwind-maint.exp -d85455ba4c6c1688e5be9aa7b25c30e5 gdb/testsuite/gdb.python/py-symtab.exp -25f86b70627021e382528bceca497ae2 gdb/testsuite/gdb.python/py-mi-var-info-path-expression.py -79c2375ccc6cec390f1ad91859504bb0 gdb/testsuite/gdb.python/py-arch.c -d87e8ebbd9b3a31d89b061de209721fb gdb/testsuite/gdb.python/py-objfile-script.exp -7bb33d20636bc2011f08501301a73d99 gdb/testsuite/gdb.python/py-explore.cc -c26ff78dfc54f8ac1daab0f5629b1d76 gdb/testsuite/gdb.python/py-sync-interp.exp -9e0c2eb7de5178b7f7898edf60dc3f69 gdb/testsuite/gdb.python/py-typeprint.py -bd42321f926d71e70b7e52c3b08769fa gdb/testsuite/gdb.python/lib-types.exp -53ec8a185f77bc4bd2538774c6b2b1d0 gdb/testsuite/gdb.python/py-caller-is.exp -7cf5f27e07f183d2976e865d2da272ba gdb/testsuite/gdb.python/py-recurse-unwind.exp -6aec9c60441ab6f65ac66735e750bd58 gdb/testsuite/gdb.python/py-prettyprint.c -5ba5e03366f43446da1d5083d005a698 gdb/testsuite/gdb.python/py-cmd.exp -5ad08681359af9af3dd3b20345a51839 gdb/testsuite/gdb.python/py-mi.exp -3700d18e81c4ba53aec8795938d696eb gdb/testsuite/gdb.python/py-shared.c -93233ea04c8480aa144b0b83be37b11e gdb/testsuite/gdb.python/py-xmethods.cc -903b54b8f4ffd66af804da851d39ecf4 gdb/testsuite/gdb.python/py-template.cc -01862a725fb111c7b7e2d29bae03c8d0 gdb/testsuite/gdb.python/py-mi-var-info-path-expression.exp -866e3e43a64d77326cea18c826c50236 gdb/testsuite/gdb.python/py-caller-is.c -789afee3757669c98d13cc6f94ed8755 gdb/testsuite/gdb.python/py-objfile.c -7ce213b5b074d86de23bd7d776ce14c5 gdb/testsuite/gdb.python/py-bad-printers.exp -8c544ad5e73abb29f1e203289907f41e gdb/testsuite/gdb.python/python-1.c -acf669bf0c2ac55642494552e9da74dd gdb/testsuite/gdb.python/py-thrhandle.c -7a9c33670d1d77b5427ef57ec320d14b gdb/testsuite/gdb.python/py-record-btrace.exp -aa81532ba6701070453c46b081ae4a31 gdb/testsuite/gdb.python/py-explore.c -83721bf358cbff069df139a307dacd76 gdb/testsuite/gdb.python/py-record-btrace-threads.exp -65c1042f85ce4b712b31c021fa1d16af gdb/testsuite/gdb.python/py-framefilter-mi.c -6acde83d96f3b9d6ceb0b33b1fe5c239 gdb/testsuite/gdb.python/py-framefilter.c -63b4b576c2e77a920cdf67ea84c7452d gdb/testsuite/gdb.python/py-objfile-script-gdb.py -da863ade5d6e132b828dfdcf1401b299 gdb/testsuite/gdb.python/py-recurse-unwind.c -d3c685ab54fb5300a5b538eebd609654 gdb/testsuite/gdb.python/py-format-string.c -79724601ef2574b102c8837b681b31d8 gdb/testsuite/gdb.python/py-events.exp -32936452c6cdc00238a3994ed1bbf9e5 gdb/testsuite/gdb.python/py-framefilter-mi.exp -c483b0aa014dcda1324ef5cc9ef287c6 gdb/testsuite/gdb.python/py-record-full.exp -03b08873f841fd238187d5e53aec3621 gdb/testsuite/gdb.python/py-framefilter.py -f6db666247c2c3c3b4ddfb5d8577261c gdb/testsuite/gdb.python/py-frame-args.c -ef8747e3f9de5c83b8bb96bf38a97a6d gdb/testsuite/gdb.python/py-linetable.S -4e0209ecd8a365ef8df57ccae6455713 gdb/testsuite/gdb.python/py-section-script.c -88afd71e0d93cfcb513778c3b8ae90bf gdb/testsuite/gdb.python/py-pp-integral.py -8007965ddfd106c79ab802606e03319d gdb/testsuite/gdb.python/py-pp-re-notag.exp -76b619f6d1a28e21b995535311f5dec0 gdb/testsuite/gdb.python/py-mi-objfile.c -ef2141701f87ac40dcd7ca7c7e7b93bc gdb/testsuite/gdb.python/py-mi-events.exp -5aaa57ac125cc370b438711155577c5e gdb/testsuite/gdb.python/py-finish-breakpoint2.cc -b352550c75242dccbca544ed3d4eaa8e gdb/testsuite/gdb.python/source2.py -41dd856db57f4cab9ecc7dfeea5c8a96 gdb/testsuite/gdb.python/py-section-script.exp -46dac940ed689e279298487727406172 gdb/testsuite/gdb.python/py-error.py -82757ab01e13f9120336c0c90f64e159 gdb/testsuite/gdb.python/py-breakpoint-create-fail.exp -32ac5b60c4e669c6cc95e551cd125916 gdb/testsuite/gdb.python/py-unwind.c -41330122029799a26b2c595e5fade196 gdb/testsuite/gdb.python/py-breakpoint.c -0e220db4309b978a87a95682a808d7e2 gdb/testsuite/gdb.python/py-finish-breakpoint2.py -bd91efa371399c5981c2e738b6a33b5b gdb/testsuite/gdb.python/py-framefilter-invalidarg-gdb.py.in -d2226d09140238350db6786f0f4c969c gdb/testsuite/gdb.python/py-frame-inline.exp -58bbae51ff72b8ba70adf25824c4435f gdb/testsuite/gdb.python/py-rbreak.exp -22c7dd4c6f7863c5de68365bf97ab412 gdb/testsuite/gdb.python/py-linetable.c -8fcf5e018c2cbfbdffad352897448a29 gdb/testsuite/gdb.python/py-nested-maps.c -6e9dbe6edf81ca86cb1fd08906882237 gdb/testsuite/gdb.python/py-events-shlib.c -01b629cdcf202eaac5f197756176e303 gdb/testsuite/gdb.python/py-progspace.c -07ea298e096d685c27b9a1ccfc944a60 gdb/testsuite/gdb.python/py-pp-maint.py -bd0050988b7710452a075112ce10bbe5 gdb/testsuite/gdb.python/py-unwind.py -85f68e4a713222163c4622d39d5e2ca4 gdb/testsuite/gdb.python/py-lazy-string.exp -2201fe232be56f834518596b4f09f9ce gdb/testsuite/gdb.python/py-frame.c -de2597bfb98089acb31b7edd25fdfa6e gdb/testsuite/gdb.python/py-format-string.py -7dd9c2a4c667fd6f51d453e79a6e081e gdb/testsuite/gdb.python/py-value-cc.exp -74d6682623d201174eb61cf1eab5267a gdb/testsuite/gdb.python/py-symbol-2.c -08af642be75567b8afbb6ac864bdb981 gdb/testsuite/gdb.python/py-prettyprint.py -6b2323f3d4d99519718fea63bec2f6dd gdb/testsuite/gdb.python/py-mi-var-info-path-expression.c -487a4155ece0074df84b6bb220cba616 gdb/testsuite/gdb.python/py-bad-printers.py -198b6c94d564ddbf3e919c7ac798cd84 gdb/testsuite/gdb.python/py-symbol.exp -b86cef97d7babe893d07527c7c7be70d gdb/testsuite/gdb.python/py-frame-inline.c -46518d3f64e823b6c21a91800671a91d gdb/testsuite/gdb.python/py-parameter.exp -1a31eafc63bd5e28091e850e11b80ad3 gdb/testsuite/gdb.python/py-strfns.c -ad9b7c972e6f689ad42e15d59cdb3da3 gdb/testsuite/gdb.python/py-unwind.exp -afa0c8bd05e6f5f0c42130207aad1ab9 gdb/testsuite/gdb.python/py-framefilter-gdb.py.in -fe80bdd1b561c0b453f7199b41415d51 gdb/testsuite/gdb.python/py-pp-maint.c -3ecf72cbc9a871250bde65d2a826e9d9 gdb/testsuite/gdb.python/py-finish-breakpoint.exp -86e22ce37a9ec9c00c030ef7783415de gdb/testsuite/gdb.python/py-pp-registration.exp -991adb76a59312b4f305c6f246078986 gdb/testsuite/gdb.python/amd64-py-framefilter-invalidarg.S -5f2a14106984ed919fa12f9d8cd9d4b8 gdb/testsuite/gdb.python/py-inferior.c -36079687c5c2c053aeb5e5352429e84e gdb/testsuite/gdb.python/py-as-string.c -45548a81eb9290c1317a5d96867f3124 gdb/testsuite/gdb.python/py-cmd.c -5fdb9449c332bf766ff1501af08d248b gdb/testsuite/gdb.python/py-completion.py -4711d670f3e18879defd98a83150d41f gdb/testsuite/gdb.python/py-objfile-script.c -cf5e07fe65f6ecab075da1c218c09a16 gdb/testsuite/gdb.python/py-typeprint.cc -c7ca77949296c57fba071ad980a63a5a gdb/testsuite/gdb.python/py-linetable.exp -16432bef8231740837e0214b866941a0 gdb/testsuite/gdb.python/py-pp-registration.py -d030cc3bc656796f4834d957ed1b77bc gdb/testsuite/gdb.python/py-strfns.exp -ee463f0f92e5133f4197551694451fab gdb/testsuite/gdb.python/py-record-btrace-threads.c -8c544ad5e73abb29f1e203289907f41e gdb/testsuite/gdb.python/py-shared-sl.c -9a58f4c5840a8a43f830db3cc27f27bd gdb/testsuite/gdb.python/py-section-script.py -2e2e54d7655c1ba5b2bdb348e7fc5c21 gdb/testsuite/gdb.python/py-frame-args.exp -9c93a4e346612f1ed45f7b500281290b gdb/testsuite/gdb.python/py-xmethods.exp -2e32d80c21ab230455f845233cf09fa7 gdb/testsuite/gdb.python/py-pp-registration.c -f7cfe0a4686c686aad4d2e9d035658a2 gdb/testsuite/gdb.python/py-events.c -4c5a8f9999aa8d873f8cd8aa5a90c67b gdb/testsuite/gdb.python/py-thrhandle.exp -06b9093a2809f99da104ac40a29df6e1 gdb/testsuite/gdb.python/py-lookup-type.exp -7abca59734b2b1677babd632f816db50 gdb/testsuite/gdb.python/py-record-btrace.c -f41387de04be6d81f05c7636300f6cf2 gdb/testsuite/gdb.python/py-function.exp -ec3fb8a3c6c5080c69c129c7edf97ad1 gdb/testsuite/gdb.python/py-pp-re-notag.c -7cd250e350d52bc3762150d1028e7668 gdb/testsuite/gdb.python/py-block.exp -49a984e6793e820a4ab12ea036ce3f71 gdb/testsuite/gdb.python/py-rvalue-ref-value-cc.exp -1b39550fff3f02462d84ffc6c75e8ba3 gdb/testsuite/gdb.python/python.exp -c372968998e2f7c3b77c247cc63e62fa gdb/testsuite/gdb.python/py-prompt.exp -b84f54ca38e2bf4cacf050be8f95642f gdb/testsuite/gdb.python/py-prompt.c -93aa4d865611fa7abff3ba39f87a94d9 gdb/testsuite/gdb.python/py-breakpoint.exp -3fd0fc78f917c27ddea045e0c03aca75 gdb/testsuite/gdb.python/py-unwind-maint.py -156e34e960b0189aba021e0e8cf884ea gdb/testsuite/gdb.python/py-finish-breakpoint.py -8f60e67d9ddc022256caa728e706d9b6 gdb/testsuite/gdb.python/py-completion.exp -59e90d739913385c6be565cc5db52b63 gdb/testsuite/gdb.python/py-template.exp -dea04e464f80e7d8169977edf3ae2104 gdb/testsuite/gdb.python/py-sync-interp.c -7bd5fd88285db23d178ee779f404f596 gdb/testsuite/gdb.python/py-mi-objfile.exp -cd71427c8da838f9e118c4e88ad4f801 gdb/testsuite/gdb.python/py-infthread.exp -a72a1e6f3ec708c3bab42138ddd8d162 gdb/testsuite/gdb.python/py-inferior.exp -4432e8ec88c1f558fe15040156c12e9c gdb/testsuite/gdb.python/py-mi-events-gdb.py -4a4becfd3016527a9a0a6330325e58ed gdb/testsuite/gdb.python/py-arch.exp -118ba62e2e64320d854874e630de86bb gdb/testsuite/gdb.python/py-framefilter-invalidarg.exp -2fcfb165315ecc04775d03eb660fcb77 gdb/testsuite/gdb.python/py-framefilter-invalidarg.py -7f0ae702dc0378b124f6a39cd530b39a gdb/testsuite/gdb.python/py-mi-objfile-gdb.py -4a103ab410f54643aef37382c705a9a5 gdb/testsuite/gdb.python/py-rbreak-func2.c -eb064cdb14fd51a3fed664808f557466 gdb/testsuite/gdb.python/py-xmethods.py -2ff3ede7e4a52a8a14966ad3211db253 gdb/testsuite/gdb.python/py-evthreads.c -2ba17fca7070f595a547b982a2f4fed7 gdb/testsuite/gdb.python/py-frame-args.py -d33da31e9602c754cd11dcc3f1da1896 gdb/testsuite/gdb.python/py-infthread.c -aebcb22f7e9082afaa43f46d48b8b459 gdb/testsuite/gdb.python/py-mi-events.c -7abca59734b2b1677babd632f816db50 gdb/testsuite/gdb.python/py-record-full.c -7c4e212337cb8486ad6172f51802abb1 gdb/testsuite/gdb.python/py-shared.exp -35a40de91f8b4fb05007286dbb9d5e27 gdb/testsuite/gdb.python/py-type.exp -8fbe1a055b5e9cfd9b893771fd7d342a gdb/testsuite/gdb.python/py-rvalue-ref-value-cc.cc -ec06c3e6d9273e9e1e4a7847eb04ce37 gdb/testsuite/gdb.python/py-nested-maps.exp -89b290614807ac7b886d91ae99bba59a gdb/testsuite/gdb.python/py-finish-breakpoint.c -5531b663749195d2e18af78ccf24c7ea gdb/testsuite/gdb.python/py-explore.exp -4a86463908d46445fc54c96d2b5cff1a gdb/testsuite/gdb.python/py-recurse-unwind.py -8007965ddfd106c79ab802606e03319d gdb/testsuite/gdb.python/py-pp-integral.exp -72e4fcb2978fe5c57a230b8c691456b9 gdb/testsuite/gdb.python/py-pp-maint.exp -132133d902cb1a84ee6f1fbf3f74de4e gdb/testsuite/gdb.python/py-rbreak.c -ce705dff4a9e3864db86d91085aa6d6e gdb/testsuite/gdb.python/py-error.exp -57113f7cac2a41566cbedb7d15d01539 gdb/testsuite/gdb.python/py-breakpoint-create-fail.c -6905b360b493524cc3b5b77555538206 gdb/testsuite/gdb.python/python.c -e1ef4865fe56d2a017adf0b29ee333dd gdb/testsuite/gdb.python/py-format-string.exp -9d644fd744a9bde24269712011444940 gdb/testsuite/gdb.python/py-symbol.c -3cc24a612fc5353f9e76260fdfe2eacc gdb/testsuite/gdb.python/py-breakpoint-create-fail.py -a457b0c6995ec47e8db8414dee56dbca gdb/testsuite/gdb.python/py-pp-re-notag.py -a868dd8664e74eb42a82f2c5c15b844c gdb/testsuite/gdb.python/py-objfile.exp -4e3ad150bfc43b358a5e384abe363382 gdb/testsuite/gdb.python/py-type.c -31c6f5f2538c970572b2c91ceeaf0bb6 gdb/testsuite/gdb.python/py-evthreads.exp -fb4146caec46b65a8bc30f43fb6b383b gdb/testsuite/print-ts.py -1b9bb551736dbc95577c91620b81fb6c gdb/testsuite/TODO -5ae827a5a15ce55ed4cb5adad623d269 gdb/testsuite/gdb.multi/base.exp -5e7a43de5b1a36449f83f86c61b79700 gdb/testsuite/gdb.multi/multi-term-settings.c -bb0da09ad505943fb258f019e0fcda7f gdb/testsuite/gdb.multi/bkpt-multi-exec.exp -7b1137edca9bd3343c23e1b54dcd24b7 gdb/testsuite/gdb.multi/dummy-frame-restore.c -04a67f5e418a9227ae2c7bbfeca66504 gdb/testsuite/gdb.multi/dummy-frame-restore.exp -9a1b844b500aedfc9a97e1491f6dd908 gdb/testsuite/gdb.multi/multi-arch.exp -5f9a959152c7f98e0c49ede4e1a730f0 gdb/testsuite/gdb.multi/hello.c -2e8a7b8dd61d723cb22a5c0a921a90c5 gdb/testsuite/gdb.multi/bkpt-multi-exec.c -fe398428e2f5f7c2406a63bc41c5f30d gdb/testsuite/gdb.multi/multi-term-settings.exp -0a5a420e1cfe426d86b84edddb47fe10 gdb/testsuite/gdb.multi/watchpoint-multi-exit.c -966705979385d6523b6b662339885bdf gdb/testsuite/gdb.multi/hangout.c -d97b7ba80ab825aa5f289308f3328f9e gdb/testsuite/gdb.multi/remove-inferiors.c -ab1f123d52f8d3b293230da3d97b18d3 gdb/testsuite/gdb.multi/info-threads.exp -0e898eb628c5f3a69a165ff426f908d8 gdb/testsuite/gdb.multi/watchpoint-multi.c -fe5789748033c54ec68bd44d95845063 gdb/testsuite/gdb.multi/tids.exp -a678541a68147b25bf4358c1946e5675 gdb/testsuite/gdb.multi/crashme.c -019f6898eac3551c8e9624f31d0979fb gdb/testsuite/gdb.multi/multi-arch-exec.c -57f82aa4e67402e35f816d29ca613318 gdb/testsuite/gdb.multi/remove-inferiors.exp -456e4b4320fd6edeb86d70e3415eeb93 gdb/testsuite/gdb.multi/watchpoint-multi.exp -b3af1b041fd2e0ac7a3a9c43833be33b gdb/testsuite/gdb.multi/watchpoint-multi-exit.exp -1e925e91b1f92db397234ad018363c82 gdb/testsuite/gdb.multi/goodbye.c -dfaf09430cc788e570e04a9933fde492 gdb/testsuite/gdb.multi/tids.c -b3ff360ce37f79eef1aad9d1b769f246 gdb/testsuite/gdb.multi/multi-attach.c -fc64f17798967a4a411cfaea100f0f8e gdb/testsuite/gdb.multi/multi-attach.exp -85ce8bc84a31d89cc2844a2b26d0bf4f gdb/testsuite/gdb.multi/multi-arch-exec.exp -46b6152b8e27386eb6a65f91c62a429c gdb/testsuite/gdb.mi/mi-basics.exp -6e3b52c5a3d4f8a947f60aa1e7b80f38 gdb/testsuite/gdb.mi/mi2-amd64-entry-value.s -13b778c88994126e849bd0cdbd849363 gdb/testsuite/gdb.mi/mi-nsintrall.exp -f22ae5ed28312de126dabd37ca4d050c gdb/testsuite/gdb.mi/solib-lib.c -0e711912c66b09c3bb449ab58b995db5 gdb/testsuite/gdb.mi/mi-dprintf-pendshr.c -1f8c0eed4874cff0993a50d7bdbca498 gdb/testsuite/gdb.mi/pendshr1.c -9c1a83245c1eb1da1b6194240ed0c4c3 gdb/testsuite/gdb.mi/watch-nonstop.c -ed3e8942d294912a1ce1a15487a90c8b gdb/testsuite/gdb.mi/vla.c -723b25b3ebf82ff75461fd45c83353f1 gdb/testsuite/gdb.mi/mi-var-rtti.cc -6070faa6add9be1a4dbacf59732002ac gdb/testsuite/gdb.mi/nsintrall.c -a5198d4f3bc0312ac7479c706c16f614 gdb/testsuite/gdb.mi/mi-break.exp -bc92dae6960520928cd8a629ffb5b85f gdb/testsuite/gdb.mi/user-selected-context-sync.exp -f7fcb7552eab1d4a34688cb51985bdac gdb/testsuite/gdb.mi/mi-sym-info.exp -636b621e7366cfbe71c1e02cf928da87 gdb/testsuite/gdb.mi/mi-start.exp -e2818674edf6b38d4eee129bfb58fad1 gdb/testsuite/gdb.mi/mi-var-block.exp -5075e8862471c4b870384b3829c838f1 gdb/testsuite/gdb.mi/mi-stepn.exp -ecc382e9bd5f96525c6501686245bbb9 gdb/testsuite/gdb.mi/mi-pending.c -15ab9c3d5487762e7ddeb2beafb15853 gdb/testsuite/gdb.mi/mi-async-run.c -a75d82e5a6830dd0e9bf75d09968854e gdb/testsuite/gdb.mi/mi-return.exp -5eda47852e1075b4f3e61b9711603cf6 gdb/testsuite/gdb.mi/mi-fill-memory.exp -072c4ceb1d250ffe3a562dc7081d22b4 gdb/testsuite/gdb.mi/mi-sym-info-1.c -ddd6389add8b90bfae29b667517241b2 gdb/testsuite/gdb.mi/mi-info-os.exp +67289cf9545ed094ca2dce88964a9d8c gdb/testsuite/gdb.xml/tdesc-xinclude.exp +4ff9fac8515773ac22d515ba1b032a1d gdb/testsuite/gdb.xml/maint_print_struct.xml +b17141653a2a7f81010b78ba903cfdec gdb/testsuite/gdb.xml/includes.xml +2f34d06636000809d7307dcf0f0db377 gdb/testsuite/gdb.xml/tdesc-errors.exp +9bbc43406da2744f6c8a7c38b97bb02c gdb/testsuite/gdb.xml/inc-2.xml +0708e0dc5f1e3f6ad3f7ec4f52dbc4d5 gdb/testsuite/gdb.xml/extra-regs.xml +06d966c802a51812715cab03bcfa8eb3 gdb/testsuite/gdb.xml/maint-xml-dump.exp +5b38ca60cd84ebb4b4a960e97e75503b gdb/testsuite/ChangeLog +86c99855b76abf8ba5bc717912583435 gdb/testsuite/configure +c868dae5c144efaa083d6b061b42f691 gdb/testsuite/gdb.go/methods.exp +f33c953800815094e954fde86536776e gdb/testsuite/gdb.go/handcall.go +b4750b0711587f3d593d5df17ba171ac gdb/testsuite/gdb.go/chan.exp +b37534653f0444ffe0e846c979d0b650 gdb/testsuite/gdb.go/global-local-var-shadow.exp +66bf9987363fee09d64b11aedb14f73b gdb/testsuite/gdb.go/print.exp +71b8aec5578bac4bb6be2e0ec4c4aafd gdb/testsuite/gdb.go/hello.exp +3bf59fe4ee125fed62e361a4235f302d gdb/testsuite/gdb.go/integers.go +7af2e1f8852c511f19d96dcb83d512d6 gdb/testsuite/gdb.go/global-local-var-shadow.go +003881ff60ddb4329567f195d565aaba gdb/testsuite/gdb.go/unsafe.exp +3505a1f5314154ddb4150c1a17001257 gdb/testsuite/gdb.go/strings.exp +113f4cb954c18df6f26abddb56a25eda gdb/testsuite/gdb.go/chan.go +4dc04785e5f8e25cafc6d101eef250bd gdb/testsuite/gdb.go/integers.exp +710eb55c40980ff44f412caea4f71ff5 gdb/testsuite/gdb.go/types.go +c1a667800eace9865ec39d0db43ec89d gdb/testsuite/gdb.go/hello.go +1cf9770497f5c55ccfff38c95bac0659 gdb/testsuite/gdb.go/handcall.exp +69f35c30731384498ec7ccd36ccc4517 gdb/testsuite/gdb.go/max-depth.go +b5ba9b36fcd882cadb9a8257d09afdef gdb/testsuite/gdb.go/basic-types.exp +68d17058fa82304a192749f0eadc138d gdb/testsuite/gdb.go/strings.go +04aa20752e3755c17dde60ece18aceab gdb/testsuite/gdb.go/package.exp +355211d7f045282ccb7379cc8ce7bbba gdb/testsuite/gdb.go/max-depth.exp +963c02de7da3fe31926fec771633a373 gdb/testsuite/gdb.go/package1.go +81b7ed6cb92c627d245bd2efc4b953b9 gdb/testsuite/gdb.go/methods.go +a0675d671676c7005ec0fe1162489306 gdb/testsuite/gdb.go/types.exp +3418aeca3a35216b3a4eeb0e72001570 gdb/testsuite/gdb.go/unsafe.go +54037d4dd926eea5d4a2425fa18c0312 gdb/testsuite/gdb.go/package2.go +05c855f57c28678e2ea78e14db48092d gdb/testsuite/gdb.trace/collection.c +f3698f065403482f4d28b5855ffe142a gdb/testsuite/gdb.trace/trace-condition.exp +d9d1738f15c152cab786957537440d55 gdb/testsuite/gdb.trace/actions.exp +efd139128402f8a5109ff8ba669ef831 gdb/testsuite/gdb.trace/disconnected-tracing.c +ee20ada51608d2a536c9c67f93c5ca8b gdb/testsuite/gdb.trace/trace-break.exp +32a7b3ce8bdd278bc08fc9c0201d36ef gdb/testsuite/gdb.trace/trace-common.h +bb8f5fb2c92c8c1cb13c84adcf9b393b gdb/testsuite/gdb.trace/strace.exp +ed21770ef797a47ca1276e37bc63a40c gdb/testsuite/gdb.trace/read-memory.exp +0ce8870284b665172076ca2f7dd8418b gdb/testsuite/gdb.trace/ftrace-lock.exp +6d90a786aec1f7a35ec81909fb3ac668 gdb/testsuite/gdb.trace/tfile.exp +947313d94b53af31759287af7f2d99b7 gdb/testsuite/gdb.trace/backtrace.exp +9b74cf3a4368cf146d6c36edba5cae26 gdb/testsuite/gdb.trace/disconnected-tracing.exp +dbfa01f884a5b9b85669e6ce3b8cd999 gdb/testsuite/gdb.trace/tfile.c +79b81444c2aba32c49e566c97359f62c gdb/testsuite/gdb.trace/mi-trace-unavailable.exp +acd3ff40132eadd71d2e4889615800e1 gdb/testsuite/gdb.trace/tspeed.exp +ee260954af816c230f89bd17ec39bc53 gdb/testsuite/gdb.trace/unavailable.cc +761150228b3a369be3cd33aad630d170 gdb/testsuite/gdb.trace/trace-condition.c +42db7407a3a2ca44937a5b17e98e1635 gdb/testsuite/gdb.trace/packetlen.exp +78f95bb75192b2d98d2d1c30e99d6a93 gdb/testsuite/gdb.trace/pr16508.exp +bc385ca0df52085a6c704826b3661b7d gdb/testsuite/gdb.trace/pendshr1.c +22452a40735335a9b14049e412c75584 gdb/testsuite/gdb.trace/signal.exp +bd6f3491fedd47e6d6195a965eae6dee gdb/testsuite/gdb.trace/mi-trace-save.exp +75ae198dcfeee7e7a5a5d3e2e6f01d72 gdb/testsuite/gdb.trace/strace.c +6317b856571dd6b9f28f3b2dcccdc004 gdb/testsuite/gdb.trace/trace-mt.exp +a309b026268684c834510158f4a0eec2 gdb/testsuite/gdb.trace/unavailable-dwarf-piece.c +99d6deeb555e3aa3fc977e83277c57a8 gdb/testsuite/gdb.trace/change-loc.h +fa9d2806d1b0ac91bda5ad19caddc97b gdb/testsuite/gdb.trace/trace-unavailable.c +4eedd6d1a4e5e45c6bbfa935bc1cef24 gdb/testsuite/gdb.trace/ftrace.c +c289d62775b5eabec3155c053f6c2752 gdb/testsuite/gdb.trace/trace-buffer-size.exp +44d82f3fe8313987cd12182297099546 gdb/testsuite/gdb.trace/mi-tsv-changed.exp +d7370cfc7e632ab318dfaadddd0c37fe gdb/testsuite/gdb.trace/while-dyn.exp +e488d35e34018bf9f5a812dd80f64880 gdb/testsuite/gdb.trace/pendshr2.c +ebf72860337eb41ff03235abf27fc64f gdb/testsuite/gdb.trace/tfind.exp +d6bba72dc1b7af4265ea8db2247345e5 gdb/testsuite/gdb.trace/trace-mt.c +8c5a9085f70b6b2cb788ea6f4a121182 gdb/testsuite/gdb.trace/actions.c +3506ea83818c4a5dff66bc685f9b1b52 gdb/testsuite/gdb.trace/circ.c +3cca6538d870162cedab7fecb325ca26 gdb/testsuite/gdb.trace/pending.c +ca1e406547581d00864d65b50b9040e5 gdb/testsuite/gdb.trace/trace-enable-disable.exp +55cfc1d5a035e1139c192b2afee04e15 gdb/testsuite/gdb.trace/no-attach-trace.c +6c6fa7a2468d8dc6e8146c71a87f4dd6 gdb/testsuite/gdb.trace/unavailable.exp +7268732e7bcb69111d8925bfc080159d gdb/testsuite/gdb.trace/ax.exp +d38643070545b966f3c83f47b5a55cec gdb/testsuite/gdb.trace/change-loc-2.c +74c0aed98c94ef36797eb939e5246a12 gdb/testsuite/gdb.trace/qtro.exp +68a529e4051a00a5f43e7d59b510550c gdb/testsuite/gdb.trace/collection.exp +d03b0d3aed38e87fe6b0e71b4e49c0a8 gdb/testsuite/gdb.trace/change-loc-1.c +33e4f7997fb3aee0e183360fbad94f88 gdb/testsuite/gdb.trace/trace-enable-disable.c +65189ad74559b3b92347bbe6331a9ed2 gdb/testsuite/gdb.trace/entry-values.exp +0f59a10b183c0473163bb59102bc29e7 gdb/testsuite/gdb.trace/mi-traceframe-changed.exp +846564df02eef5928458896ae1306122 gdb/testsuite/gdb.trace/passcount.exp +4651b969b4dd920544d81d1058872eb5 gdb/testsuite/gdb.trace/passc-dyn.exp +b1b2cacf69a6c112b4440be9d4bc09a3 gdb/testsuite/gdb.trace/read-memory.c +b5248d28e83b0dd0661ca18cb330b111 gdb/testsuite/gdb.trace/tracefile-pseudo-reg.c +98c00a2f3e30e5f93b922d1cd7e72e9f gdb/testsuite/gdb.trace/pending.exp +28f52283cbb7bf98589cc90ad2de0416 gdb/testsuite/gdb.trace/signal.c +9bd3bce3c5a5c72906174225b1f1dee8 gdb/testsuite/gdb.trace/mi-trace-frame-collected.exp +15f674b26c298e50356caaf1708494df gdb/testsuite/gdb.trace/status-stop.exp +c95d95ff6b848529229dc40de4bc5d02 gdb/testsuite/gdb.trace/actions-changed.exp +9a9990c3073fc12dee67319ed3a0598f gdb/testsuite/gdb.trace/ftrace-lock.c +d2403146e8c9f6fb03a19362e06dfa9c gdb/testsuite/gdb.trace/tracecmd.exp +3c79943d181320f553f2f33e6c4028ad gdb/testsuite/gdb.trace/deltrace.exp +5d0b195c0760b2b84a147f7758616857 gdb/testsuite/gdb.trace/tstatus.exp +fb012db92cfa2a3a2235083354eef136 gdb/testsuite/gdb.trace/actions-changed.c +d85a3ad9170f2d26044adacd95482fe6 gdb/testsuite/gdb.trace/trace-break.c +c1335325f82c1280917309182b23a0bc gdb/testsuite/gdb.trace/unavailable-dwarf-piece.exp +6a0bf17a8145e7fb0e4e30ac6845aea8 gdb/testsuite/gdb.trace/report.exp +b3d0ac9ecb775e745b7fd0a0e2376990 gdb/testsuite/gdb.trace/tracefile-pseudo-reg.exp +0f23bb48bdde42a506fce310de08c40b gdb/testsuite/gdb.trace/stap-trace.c +cf63f42d4c05ab274127e4b3c600c650 gdb/testsuite/gdb.trace/no-attach-trace.exp +a11022f1d59e46cb8eb53cce9c6ef9f2 gdb/testsuite/gdb.trace/change-loc.exp +f713ba2fd087a93de7d9b10b79666d20 gdb/testsuite/gdb.trace/mi-tracepoint-changed.exp +17c94f9e6105407d56137ed9946448ac gdb/testsuite/gdb.trace/entry-values.c +d3a0af4c60299c3a218555a6c24fd3a1 gdb/testsuite/gdb.trace/change-loc.c +9f8e20336b854d530a9cacf3a97e859e gdb/testsuite/gdb.trace/trace-buffer-size.c +6d49c0cdda8121937a86c24196209923 gdb/testsuite/gdb.trace/infotrace.exp +99051c59d71a066bcad4ec01641151e2 gdb/testsuite/gdb.trace/tspeed.c +86c0c7490700b3bd311a07aeb6f57278 gdb/testsuite/gdb.trace/range-stepping.c +b6e4eebb0231ea8b7f1c4b2b61ef6a91 gdb/testsuite/gdb.trace/range-stepping.exp +24cdc58d3d61bb81b6ccc247821a2da8 gdb/testsuite/gdb.trace/save-trace.exp +1ee53a0baa23e5a4f08e42526f6da6c8 gdb/testsuite/gdb.trace/ftrace.exp +98154e98bf64799525643a2d733f67df gdb/testsuite/gdb.trace/qtro.c +9a8012d8c2661c39c024d37277423914 gdb/testsuite/gdb.trace/status-stop.c +cfb69a2a31025a16324f088f92a78b79 gdb/testsuite/gdb.trace/circ.exp +c43fce2345803c3c4083f915a567a02c gdb/testsuite/gdb.trace/while-stepping.exp +4f63468a9a2fd2a3d7d8da47402e982c gdb/testsuite/gdb.trace/stap-trace.exp +2ff42d8953594cfbe5fbb48fea69302f gdb/testsuite/gdb.trace/tsv.exp +e334341cb8759d642a18e9d78838eb83 gdb/testsuite/gdb.tui/empty.exp +67b5df2626ea2f0f1449e06f81fc650a gdb/testsuite/gdb.tui/new-layout.exp +9a5c2f47ad14c3f86c36622f7f588e67 gdb/testsuite/gdb.tui/basic.exp +7f9f96d3dc3fc643e73363d5c086c5b3 gdb/testsuite/gdb.tui/tui-layout.c +c6c6d3381fb4b9351d0b6c00494d6da3 gdb/testsuite/gdb.tui/main.exp +130eb81f7fb4d7f558a0be36488092ca gdb/testsuite/gdb.tui/tui-missing-src.exp +0e5acfef5e24856168096fa833eb1b3f gdb/testsuite/gdb.tui/tui-disasm-long-lines.exp +3dd3db9eb749ca30d7cb14f2776e7b07 gdb/testsuite/gdb.tui/tui-disasm-long-lines.c +b687eb530000b1bf6989260b5dee73ce gdb/testsuite/gdb.tui/list-before.exp +9c722f4918f721a9535c604b408755bc gdb/testsuite/gdb.tui/tui-layout.exp +6dddb4a9b742304ef0195ad6b778ec46 gdb/testsuite/gdb.tui/tui-layout-asm.exp +7125ed52e572b099865430aeaae7177f gdb/testsuite/gdb.tui/list.exp +a4033b4cd768be281efbb4e5cf34f6c2 gdb/testsuite/gdb.tui/regs.exp +816db07607d57931e348d84321371b28 gdb/testsuite/gdb.tui/completion.exp +c773182877dbb32541ae3eb59aff547f gdb/testsuite/gdb.tui/winheight.exp +b4b1a767567f0bebfa0b47a571b0ecf7 gdb/testsuite/gdb.tui/tui-nl-filtered-output.exp +aad030a58b3b9e42bd4021e4a88f9261 gdb/testsuite/gdb.tui/tui-layout-asm-short-prog.exp +739083b1bb4edb998b1652e210648be6 gdb/testsuite/gdb.tui/corefile-run.exp +7b1f54402a66f5be182e14b410f39651 gdb/testsuite/gdb.tui/tui-layout-asm-short-prog.S +ab6873601064e777bded82a62ae62c51 gdb/testsuite/gdb.tui/resize.exp +bb7dcc7481d0d3204364958c410b3481 gdb/testsuite/gdb.mi/mi-break.exp +8f491dbc9b981d83d2f05f88b9211475 gdb/testsuite/gdb.mi/solib-lib.c +67e48bc51699953b089c1137e15ca044 gdb/testsuite/gdb.mi/mi-until.exp +11a6bef41e1b766d9e10251265fd697d gdb/testsuite/gdb.mi/user-selected-context-sync.exp +fbd8bba962bcfa7a705e76bf957aa1e2 gdb/testsuite/gdb.mi/mi-stepn.c +c907a81b785e2dcebd91ef4553e10d55 gdb/testsuite/gdb.mi/mi-start.c +a91f20c7e221afa3999718c323530d83 gdb/testsuite/gdb.mi/mi-var-invalidate.exp +5634c7d3626f80ad1d5ed73800f72a78 gdb/testsuite/gdb.mi/mi-sym-info-2.c +c2c791bb3ef0faec1c496f924c39d6fb gdb/testsuite/gdb.mi/mi-reg-undefined.exp +1efe6f6402cbf322cd8aa810521f4b17 gdb/testsuite/gdb.mi/ChangeLog-1999-2003 +a9fe6d4689270ece0e37fc3da3e269b0 gdb/testsuite/gdb.mi/mi-solib.exp +49a6bc90bd055224ca187651f2b4e0fa gdb/testsuite/gdb.mi/new-ui-mi-sync.exp +6e92881e6aa7ba96a0997bd6d9e6b48d gdb/testsuite/gdb.mi/mi-nsmoribund.exp +9b4edfa4dfc254cf79f4c28a95d1ca5f gdb/testsuite/gdb.mi/mi-pending.exp +689195baeba6b4b85ad84b97650563c6 gdb/testsuite/gdb.mi/mi-detach.exp +aea0dc1252174351235b79e8ddf5b017 gdb/testsuite/gdb.mi/mi-exec-run.exp +d7978e725dad0a96737a41b73c0ac1ca gdb/testsuite/gdb.mi/mi-condbreak-call-thr-state-st.c +6f634a633fc3a1c69e3f657292065aac gdb/testsuite/gdb.mi/mi-condbreak-call-thr-state-mt.c +f917d1044affeea65f2ae1a2263d157b gdb/testsuite/gdb.mi/mi-hack-cli.exp +1df423c0b637c44c3324ddff1349ef1d gdb/testsuite/gdb.mi/mi-disassemble.exp +d842f3134dbac91b77ca50d320988178 gdb/testsuite/gdb.mi/mi-read-memory.c +3795982b3781ba7a5957cf3b5e53de62 gdb/testsuite/gdb.mi/pr11022.c +31d85c6390ff453be2445902c3256717 gdb/testsuite/gdb.mi/mi-linespec-err-cp.exp +7b2d92db416a260b62827d89f5a53e1f gdb/testsuite/gdb.mi/mi-condbreak-call-thr-state.c +d761e75c50e7cdf123e4c2d63043036f gdb/testsuite/gdb.mi/mi-undefined-cmd.exp +e90dc71de0cee2c6a49eb925d63daffd gdb/testsuite/gdb.mi/mi-catch-load.exp +a251a0ca8b3dd52cd53319259095088c gdb/testsuite/gdb.mi/watch-nonstop.c +af5282506c506f12128d38a2e504c549 gdb/testsuite/gdb.mi/solib-main.c +8a64a9aa3dcdcfb2bbc37fedce88c105 gdb/testsuite/gdb.mi/mi-syn-frame.c +6e71c8c047bf6da71e2926e2d2814bfb gdb/testsuite/gdb.mi/mi-breakpoint-multiple-locations.cc +4f531302a743870f35ecbfd0f8eac083 gdb/testsuite/gdb.mi/mi-threads-interrupt.exp +7903cc45f1aa3652009ca00cda325fe0 gdb/testsuite/gdb.mi/mi-sym-info.exp +a6ced9e0301a4de863c9ab6dddacc99e gdb/testsuite/gdb.mi/list-thread-groups-available.exp +73e4f08597e4f10df6702a225aa032fd gdb/testsuite/gdb.mi/mi2-cli-display.exp +ce62939adf114c2f87eef8bdecc3821e gdb/testsuite/gdb.mi/new-ui-mi-sync.c +1650a0388c6526c98e01bfc1fb8271fa gdb/testsuite/gdb.mi/mi-start.exp +39914d4550bd2b150e2210e9fc61238d gdb/testsuite/gdb.mi/mi-reverse.exp +a57794f9629bee4dc7f3868362e8d4ff gdb/testsuite/gdb.mi/gdb792.cc +18249a56227a5319cdca8d0039acfdef gdb/testsuite/gdb.mi/mi-async-run.c +4eac8226da5a183dbdd36bcde7b2472d gdb/testsuite/gdb.mi/mi-var-cp.exp +752b72debff5636e4831396627c83de2 gdb/testsuite/gdb.mi/mi-basics.exp +b7159e0cf18b2374e78d8821e6a715b3 gdb/testsuite/gdb.mi/mi-breakpoint-multiple-locations.exp +373708d89a18f17dfc3a09cbca5f3b4b gdb/testsuite/gdb.mi/mi-stepi.exp +71450a7cb338d8c9b88b0dfc28827de2 gdb/testsuite/gdb.mi/mi-dprintf-pendshr.c +b77cf7e2992e2fc2da8f246c7a4621ff gdb/testsuite/gdb.mi/mi2-prompt.exp +856d79456813696860eee31e22d7da19 gdb/testsuite/gdb.mi/mi-stack.exp b6356c24ee75e2e014f04332144a1543 gdb/testsuite/gdb.mi/mi-console.c -74883bed8c96b5bdf5ed4f283d607709 gdb/testsuite/gdb.mi/mi-logging.exp -1ec267be0203ca40bf16057e80b2cb31 gdb/testsuite/gdb.mi/gdb792.exp -ea6919bf74d3a680ef08a09f43f87b44 gdb/testsuite/gdb.mi/mi-syn-frame.c -5f93da5db5ebaf4429818956f8a20018 gdb/testsuite/gdb.mi/mi-hack-cli.exp -88282fa7c6276da781bea94c631a7187 gdb/testsuite/gdb.mi/mi-catch-cpp-exceptions.exp -b8fdb3f23662deed76e14829359e7ccf gdb/testsuite/gdb.mi/pending.c -6dc2d07c24013117017ef37daaa8a1a0 gdb/testsuite/gdb.mi/mi-linespec-err-cp.exp -bd914f4792979101c973ad17c9f2a382 gdb/testsuite/gdb.mi/mi-solib.exp -2affdbdd7b4aa9329fe5cd88fd9072c2 gdb/testsuite/gdb.mi/mi-watch-nonstop.exp -98105f2af80bf3788131b5a3c2d11e79 gdb/testsuite/gdb.mi/mi-nonstop.exp -76059dfbbb6d826f380aee5ad01427eb gdb/testsuite/gdb.mi/list-thread-groups-available.exp -7746fb1e65c610ab2428e0646632d04f gdb/testsuite/gdb.mi/mi-eval.exp -74b9fd8c573ff12a997651a34f409b54 gdb/testsuite/gdb.mi/mi-catch-load.exp -9fa383b88c1ddeccd107944882e4108d gdb/testsuite/gdb.mi/mi2-amd64-entry-value.c -26c8b9dcaa6aee1471bef7fe1e15c0ff gdb/testsuite/gdb.mi/mi-nsmoribund.exp -d77d2fc7c03348df62d1b5243a03bfb4 gdb/testsuite/gdb.mi/mi-var-cmd.exp -d50b6a3ad001ddfe138ecb609e73fa22 gdb/testsuite/gdb.mi/basics.c -9fae5df3e6ce619cca1131232b3857e4 gdb/testsuite/gdb.mi/mi-file.exp -c8f49cb14ad2747269d4c42534d6ca6e gdb/testsuite/gdb.mi/mi-linespec-err-cp.cc -1ddc9ea70bcb5884615ee7ea1799865e gdb/testsuite/gdb.mi/mi-console.exp +990907997b394ec868b26b35f1733ad7 gdb/testsuite/gdb.mi/mi-catch-load.c +615059fc5f65d6f0ca6b5bc0e78d49d0 gdb/testsuite/gdb.mi/mi-vla-fortran.exp +d68129b83b341895076ceb1732a49789 gdb/testsuite/gdb.mi/pendshr1.c +960704496df4a5331f77899596615b80 gdb/testsuite/gdb.mi/mi-var-child-f.exp +bc5bcf0ed07e7bcc13748f986ff10cf9 gdb/testsuite/gdb.mi/mi-file-transfer.exp +7e4f955399b9dbc8c8f649636874fd8a gdb/testsuite/gdb.mi/gdb669.exp +c6dff6fd5d368d7ae57577d97bff52fb gdb/testsuite/gdb.mi/mi-var-cp.cc +25b5c362042a01e54f6738f89d532c5e gdb/testsuite/gdb.mi/mi-pendshr.c +d57243bd0e7dc6d4bdbd7d369a090ad9 gdb/testsuite/gdb.mi/mi-var-child.c +4dcfc03b8e4b0fbd0e4d50075dc959b7 gdb/testsuite/gdb.mi/pthreads.c +cbaff0cff49ff7e9df5407041613fced gdb/testsuite/gdb.mi/mi-var-create-rtti.exp +8c5ea435090392db36f2eff5f60e084e gdb/testsuite/gdb.mi/mi-dprintf-pending.exp +b15998c3896f9154d5e080a96ee8e31d gdb/testsuite/gdb.mi/mi-pendshr2.c +5df597a20dd63d19c0cdb9ab1a2fc854 gdb/testsuite/gdb.mi/mi-condbreak-call-thr-state.exp +f43d592fe65ff7115f6a8a5e810718ac gdb/testsuite/gdb.mi/nsintrall.c +25d50698a9805b9d52a0e77d0ddfd3c5 gdb/testsuite/gdb.mi/mi-var-block.exp +2d249a5f05464cee6ee97bc954720631 gdb/testsuite/gdb.mi/dw2-ref-missing-frame-func.c +9f9c7a41eeecc7500b970ab996bf79a1 gdb/testsuite/gdb.mi/mi2-var-child.exp +0407b1d6e60c8e9a0a37348f7aca8aaa gdb/testsuite/gdb.mi/gdb680.exp +bfac67876b22db7c5ec38c04af7cbaf3 gdb/testsuite/gdb.mi/mi-return.exp +09ba8146044209c8805bcb2d753f201d gdb/testsuite/gdb.mi/nsthrexec.c +ebfcdefbfedd606e05f80456f3b1fa11 gdb/testsuite/gdb.mi/mi-fortran-modules.f90 +4ea9158f26148b160ffb76d9e421618e gdb/testsuite/gdb.mi/mi-record-changed.exp +4d71aa4c651587542b26c54b12c0900d gdb/testsuite/gdb.mi/gdb2549.exp +c97263271eec9cfe57b97bf4b0620afb gdb/testsuite/gdb.mi/pendshr2.c +e4345c8f47dc6aecab821476a6b09ee4 gdb/testsuite/gdb.mi/mi-syn-frame.exp +5ee6d4bf97fd51019d6cea43d0f5bb12 gdb/testsuite/gdb.mi/user-selected-context-sync.c +fd0fbb6599b1aa204b58e78562ece790 gdb/testsuite/gdb.mi/mi-exit-code.exp +e8444f390b800e5696bc8a72788a3219 gdb/testsuite/gdb.mi/mi-linespec-err-cp.cc +a9ae52b21aaa0bb790505aaaa2011762 gdb/testsuite/gdb.mi/mi-nsintrall.exp +c0848daa52dd637873d94de4756f65eb gdb/testsuite/gdb.mi/mi-async.exp +e8d71b376092e04b557a3207e1e6bf93 gdb/testsuite/gdb.mi/mi-regs.exp +74a607691f18b20811d7af969681db64 gdb/testsuite/gdb.mi/vla.c +93d8e8dd7cd77d8463f03e59b9ceb2a4 gdb/testsuite/gdb.mi/mi-fill-memory.exp +ea265a57e8fa73728a9aaff257c02fab gdb/testsuite/gdb.mi/mi-fullname-deleted.exp +2217cc8b629014280d9be0366cdc3154 gdb/testsuite/gdb.mi/mi-var-child.exp +45dc216ec4e2df580cee4c6cab8671e0 gdb/testsuite/gdb.mi/mi-vla-c99.exp +2ffd8ad9d2a7c88f8afe0664b275e0f5 gdb/testsuite/gdb.mi/pending.c +72e362946007e86381ca231e5b4841f3 gdb/testsuite/gdb.mi/mi-catch-load-so.c +96f61c69f455573880828221a00959fb gdb/testsuite/gdb.mi/ns-stale-regcache.c +6b58acbe5f1fe573c27b67f2e2a2fee1 gdb/testsuite/gdb.mi/testcmds +c050d35bd007d2796a79817474389913 gdb/testsuite/gdb.mi/mi-complete.cc +394e560e8b3e49c8f9dd9b7cb542bff6 gdb/testsuite/gdb.mi/mi-watch.exp +07e4fa7a2bf6fb3d5c15538540b2acc5 gdb/testsuite/gdb.mi/pr11022.exp +bd9fc42ee2210e6f1e4f2f2de83ffdad gdb/testsuite/gdb.mi/basics.c +c0cebbcc19af1f0a550ccd6d5dcdb761 gdb/testsuite/gdb.mi/mi-language.exp +35629c8f30c8cc8378fbb765c6a62a7e gdb/testsuite/gdb.mi/mi-var-cmd.exp +80fe033379cc45e51a9ff3cc5abbae4b gdb/testsuite/gdb.mi/mi-dprintf-pending.c +839f24d300670eb81cab6c10a8b7062e gdb/testsuite/gdb.mi/dw2-ref-missing-frame-main.c +836430a573c7712493aba8b6a39c007d gdb/testsuite/gdb.mi/mi-breakpoint-changed.exp +c04aa86e1cee7f0cac3044bb78d1c701 gdb/testsuite/gdb.mi/mi-editing.exp +30cba05a163e5e99336ba7dc6808c6df gdb/testsuite/gdb.mi/mi-file.exp +d8f9d43a7570831bddc5608a7514e17a gdb/testsuite/gdb.mi/mi-threads-interrupt.c +c88d443539af015f6d06dc80c0c3097c gdb/testsuite/gdb.mi/mi-logging.exp +21c66f35fd2d69264b3b9f497bf74c84 gdb/testsuite/gdb.mi/mi-info-os.exp +141bc2b7504010d299da095d1bd75f5e gdb/testsuite/gdb.mi/mi-i-cmd.exp +b72e5477607042d274ecf88c04943e9f gdb/testsuite/gdb.mi/non-stop-exit.c +aa3fdae9fe8cd522db629d113d4c5768 gdb/testsuite/gdb.mi/mi-exit-code.c +60bce8120ff57eb16039b62e6c15b11e gdb/testsuite/gdb.mi/mi-simplerun.exp +65ff417ad6ddeab3bb3b6aefa2d9c5c5 gdb/testsuite/gdb.mi/mi-fortran-modules.exp +2dcc565c5b1b72c6d43042b6627a63f5 gdb/testsuite/gdb.mi/mi-ns-stale-regcache.exp +cb0216e840f35499539a199f71548999 gdb/testsuite/gdb.mi/mi-memory-changed.exp +bad7c5257ec7e70cf9b6a6c17f85cec0 gdb/testsuite/gdb.mi/gdb701.exp +4b259eba14cd1488f58f191b0d9df8a9 gdb/testsuite/gdb.mi/list-thread-groups-no-inferior.exp +82ccfe60beb7bf86006eb3623c052618 gdb/testsuite/gdb.mi/mi-var-rtti.cc +cd62d4d71376503bc0609c450be4b1e0 gdb/testsuite/gdb.mi/mi2-cli-display.c bbff496566f190853c0830bf572d6d95 gdb/testsuite/gdb.mi/gdb701.c -805b8d8b5164e7d9da2ea8700e101af7 gdb/testsuite/gdb.mi/mi-dprintf-pending.c -9aae57756b266f3446224baee6ddcc1a gdb/testsuite/gdb.mi/mi-ns-stale-regcache.exp -69843a4ce68af43bef74f97799b429be gdb/testsuite/gdb.mi/mi-var-invalidate.exp -86bfe2eaaa609331bcb22434dbe87a51 gdb/testsuite/gdb.mi/gdb669.exp -698ed5ca18c4c734a91db3ecb78a0cc2 gdb/testsuite/gdb.mi/mi-record-changed.exp -635176256c884b2e42373756423b2578 gdb/testsuite/gdb.mi/mi-syn-frame.exp -eb99b6649b6f384049919ab54272d9cf gdb/testsuite/gdb.mi/gdb701.exp +cccdcb52afe6a1547cc406ec20bc3350 gdb/testsuite/gdb.mi/mi-dprintf.exp 966fb70be9ca0040daab6b55abf50020 gdb/testsuite/gdb.mi/mi-inheritance-syntax-error.cc -f3de782db55b4a0b9a3e36321ac50189 gdb/testsuite/gdb.mi/mi-condbreak-call-thr-state-mt.c -408669b3d671b2888789711558f171d2 gdb/testsuite/gdb.mi/mi-fortran-modules.exp -ee40535d47619765d23e30e73289c1be gdb/testsuite/gdb.mi/mi-var-display.exp -e8e00ae92f53ee4b5c0afed8006a27fe gdb/testsuite/gdb.mi/mi-regs.exp -f71bb4475b5f3de32ef79b1eb74e13cc gdb/testsuite/gdb.mi/list-thread-groups-no-inferior.exp -9b60a98716c820b3fc61f30b7ee77093 gdb/testsuite/gdb.mi/mi-async-run.exp -1125a10fdaecc7f5592c3b9461156690 gdb/testsuite/gdb.mi/mi-dprintf-pending.exp -11e11c6a3686dc4a9cc0ca11bc5a5d23 gdb/testsuite/gdb.mi/mi-frame-regs.exp -431786e9b770fa101039eb4437e0dce5 gdb/testsuite/gdb.mi/mi-condbreak-call-thr-state.exp -6b58acbe5f1fe573c27b67f2e2a2fee1 gdb/testsuite/gdb.mi/testcmds -e31666cf5cb649c5372de79463bddc5b gdb/testsuite/gdb.mi/mi-vla-fortran.exp -29ded1a6ce621bc066c0b69a666cfa08 gdb/testsuite/gdb.mi/mi-sym-info-2.c -20b758a2c5ddaeb3604452c7701b5a8e gdb/testsuite/gdb.mi/mi-simplerun.exp -877ade73be8d01aaddd5d8c40f9b74b9 gdb/testsuite/gdb.mi/dw2-ref-missing-frame-func.c -376454bcc1bfc4f558d5bd6e3c626c15 gdb/testsuite/gdb.mi/mi-i-cmd.exp -aab77c1e8c6c8e14d18a6eb4a7b31196 gdb/testsuite/gdb.mi/mi-var-cp.exp +9202c95b60eee4702aaff4f42da7c026 gdb/testsuite/gdb.mi/mi-reg-undefined.S +8aca88d6310f735c959060d8b4a1b5b5 gdb/testsuite/gdb.mi/non-stop.c +ce76b391f7a4a57d47412d725d3a5009 gdb/testsuite/gdb.mi/mi-var-rtti.exp +538971d2e3a33301351f68ff6e16a83a gdb/testsuite/gdb.mi/gdb792.exp +c3586f920e8ac54a180b170755074bcd gdb/testsuite/gdb.mi/var-cmd.c +b692b3d0610b44a2c792041b0f184d92 gdb/testsuite/gdb.mi/mi-sym-info-1.c +e97b20d586f96f5d4f8e57cacfa81eaa gdb/testsuite/gdb.mi/mi-async-run.exp +e1bae71e3fb94e3b3be44e270f6d09ec gdb/testsuite/gdb.mi/mi-eval.exp +ae746a5e0c011d9f520e55b80c832fac gdb/testsuite/gdb.mi/dw2-ref-missing-frame.S +ba1023b67e88f2943a6c4ffc32c52f65 gdb/testsuite/gdb.mi/mi-catch-cpp-exceptions.exp +3de4a1e1ee213981f21b3078f3137edc gdb/testsuite/gdb.mi/mi-nsthrexec.exp +fd333ef626ba03513590607afe16eade gdb/testsuite/gdb.mi/list-thread-groups-available.c +baa7dc4702f24865d016b240351b8942 gdb/testsuite/gdb.mi/mi2-amd64-entry-value.s +368e8992cb00260db2751f62a1418ab2 gdb/testsuite/gdb.mi/mi-read-memory.exp +294200c63d9c71f08445183eed2750a3 gdb/testsuite/gdb.mi/mi-var-create-rtti.c f66cbc5e80c1115869bb9a14abdcb49a gdb/testsuite/gdb.mi/until.c -ceb342f43989eaa2f3fe4b389381519c gdb/testsuite/gdb.mi/mi-until.exp -6399bb1162db37abf0715c6b5a4d4fbc gdb/testsuite/gdb.mi/mi-vla-c99.exp -71a424be4806c549ff234a0611e86bae gdb/testsuite/gdb.mi/mi-inheritance-syntax-error.exp -a10a931726a364b2548deeef38490c95 gdb/testsuite/gdb.mi/pthreads.c -c16c1b915a6d5038f79404d695efae2e gdb/testsuite/gdb.mi/mi-file-transfer.exp -8c9244ae755d89572ee9a7f0eabbe314 gdb/testsuite/gdb.mi/solib-main.c -6f2f128303288e8107e103978b28fd18 gdb/testsuite/gdb.mi/mi-pthreads.exp -fa054a1e86fc077fb0af7de44a67c86f gdb/testsuite/gdb.mi/mi-var-cp.cc -ad7513ee0206ba42f2a9d89a4ed67fb8 gdb/testsuite/gdb.mi/mi-var-list-children-invalid-grandchild.c -1efe6f6402cbf322cd8aa810521f4b17 gdb/testsuite/gdb.mi/ChangeLog-1999-2003 -14bfd216c4ababfc5e81e5ee2f366ff7 gdb/testsuite/gdb.mi/mi-nonstop-exit.exp -be9a256b71ead071262fc45ec669bcc6 gdb/testsuite/gdb.mi/mi-stack.c -7ef8547128238fbad72ddaa50a2f12c9 gdb/testsuite/gdb.mi/dw2-ref-missing-frame.exp -b305397169f1f10898d0d12f62140724 gdb/testsuite/gdb.mi/mi-reverse.exp -1776421a1381ec283e8e5371711f849a gdb/testsuite/gdb.mi/mi2-cli-display.exp -9c4e2f5ad12172dd3a62decfcf22fe36 gdb/testsuite/gdb.mi/mi-detach.exp -bbe473c2ebadfb89e4bdaac5d12ea9f8 gdb/testsuite/gdb.mi/mi-stepi.exp -fd984a6fe26e7a298eb2a06f8831a43a gdb/testsuite/gdb.mi/mi-var-child-f.exp -97a028b83bd20a51553419382acebc57 gdb/testsuite/gdb.mi/nsthrexec.c -d4a9fc06f829a33292f19cc1fd7c1167 gdb/testsuite/gdb.mi/dw2-ref-missing-frame.S -9fb8a5b212101eb869f9392eea68fa27 gdb/testsuite/gdb.mi/mi-var-create-rtti.exp -e72ab3adb6449eb29edc7bee248e1215 gdb/testsuite/gdb.mi/mi-pendshr2.c -bde2c54ecf0f3ee99d6faa9be9933886 gdb/testsuite/gdb.mi/mi-condbreak-call-thr-state-st.c -8dda0338d5277511ebe6c7b65e4028ed gdb/testsuite/gdb.mi/mi-cli.exp -447550a17ca2f65e04fa5da32549ee14 gdb/testsuite/gdb.mi/mi-read-memory.exp -43c16f4affdee08b1af704dc5701c380 gdb/testsuite/gdb.mi/mi-watch.exp -3ff4c5f0da66128d169f1d26a21c15b9 gdb/testsuite/gdb.mi/non-stop-exit.c -90ac9dc2f25617d61b6c8a63b6f600c8 gdb/testsuite/gdb.mi/mi-var-list-children-invalid-grandchild.exp -a624b5b865d3b07fd2ee57f40a7d6160 gdb/testsuite/gdb.mi/mi-cmd-error.exp -de092542cb8a4b0f2739ee77027f1f31 gdb/testsuite/gdb.mi/gdb680.exp -f33d94484e73d4434c6716b6b3283e6c gdb/testsuite/gdb.mi/new-ui-mi-sync.exp -5759c444bc58ede1358b3ffd5940ebca gdb/testsuite/gdb.mi/mi2-cli-display.c -32b793a0c07b3b7719755363fcc12ea6 gdb/testsuite/gdb.mi/mi2-var-child.exp -b2cf84f46764da186f02144710a10bca gdb/testsuite/gdb.mi/gdb2549.exp -5db6ec165d874ed40b4e9b0327cd284c gdb/testsuite/gdb.mi/vla.f90 -45b0ae90a8a856eee4ffef7db0942b3b gdb/testsuite/gdb.mi/mi-start.c -5c874b0c950b470758f565d0b67811b1 gdb/testsuite/gdb.mi/mi-condbreak-call-thr-state.c -586b8510797d37a6ef2899dc97edc32f gdb/testsuite/gdb.mi/non-stop.c -01e98ee9cbecffe39b25226ffc785024 gdb/testsuite/gdb.mi/mi-dprintf.c -c9f49592f5fa52bec776a638bc7ab1f0 gdb/testsuite/gdb.mi/mi-memory-changed.exp -23dfc334fc6f49704556e302db7a18c2 gdb/testsuite/gdb.mi/mi-dprintf.exp -428ebbace4ee3c3c65c7c311ba0d8028 gdb/testsuite/gdb.mi/mi-threads-interrupt.exp -e7377a9324ca0d8d8e7002ce8635f897 gdb/testsuite/gdb.mi/mi-threads-interrupt.c -60567b4adee6365e9438ffca551f91ec gdb/testsuite/gdb.mi/pendshr2.c -a205abbd3978d199a36e236332343093 gdb/testsuite/gdb.mi/mi-breakpoint-multiple-locations.exp -743836f0293bb08a0d410633494338b7 gdb/testsuite/gdb.mi/mi-var-child.exp -0e4d6e5b8b20a965580d574160fdcd5d gdb/testsuite/gdb.mi/array.f -be54bd1c9855a412e341229677d5b6d2 gdb/testsuite/gdb.mi/mi-catch-load.c -5c2147d4cd54d76b3220efb3fbe9fcad gdb/testsuite/gdb.mi/mi-pendshr.c -0307b92c0d4d7783e272fdbc9ee18e7b gdb/testsuite/gdb.mi/mi-exit-code.exp -d6abeca0023660b864b29c577bad0005 gdb/testsuite/gdb.mi/mi-var-child.c -a57794f9629bee4dc7f3868362e8d4ff gdb/testsuite/gdb.mi/gdb792.cc -d6077c6325df2c8de40b198acab5aca1 gdb/testsuite/gdb.mi/ns-stale-regcache.c -84f59337dca40074291491747015e2de gdb/testsuite/gdb.mi/mi2-prompt.exp -09083726e397e7305dd8205df1a313fc gdb/testsuite/gdb.mi/mi-breakpoint-multiple-locations.cc -af0bfcb92771702af61d02888d0af2c6 gdb/testsuite/gdb.mi/mi-fullname-deleted.exp -242ee8f2180e38ad426807a7fe90c856 gdb/testsuite/gdb.mi/mi-exec-run.exp -6963a9647130a54f7f41122c1116720d gdb/testsuite/gdb.mi/mi-stepn.c -14b804a5e76b53532fcf5af376823eae gdb/testsuite/gdb.mi/mi-nsthrexec.exp -e907a24d45cb6f0257ea75eddfca2a84 gdb/testsuite/gdb.mi/dw2-ref-missing-frame-main.c -629e45143f624036ea9702725f95a563 gdb/testsuite/gdb.mi/mi-var-create-rtti.c -502ba4e4f42d7e71615420a2c9408089 gdb/testsuite/gdb.mi/mi-catch-cpp-exceptions.cc -a9884f14282ef4f9f232e4aa19b35814 gdb/testsuite/gdb.mi/mi-breakpoint-changed.exp -25e16d8d467cf8012b54c73cd58f4eb0 gdb/testsuite/gdb.mi/mi-reg-undefined.c -24c26dea6270c296a85e7787b12f7a41 gdb/testsuite/gdb.mi/mi-disassemble.exp -ec36c5bdf51f0e759ca5591d13b672a0 gdb/testsuite/gdb.mi/mi-cmd-param-changed.exp -7ca3b97122b0034d511120f6185b5453 gdb/testsuite/gdb.mi/mi-reg-undefined.exp -a80f867dbf1a97d5ac68adaf2fe3a4b3 gdb/testsuite/gdb.mi/mi-complete.cc -dfa025d7d4fbee092bbc491ac0015210 gdb/testsuite/gdb.mi/pr11022.exp -22ddad054dadb2d6735e2d4e90a84cb8 gdb/testsuite/gdb.mi/new-ui-mi-sync.c -34e861aa2d5e7c1fab20e03baafcbfb7 gdb/testsuite/gdb.mi/mi-fortran-modules.f90 -181ae00926787c61ff2621c9ab309c9b gdb/testsuite/gdb.mi/mi-stack.exp -98228bf3f488a90ab30be8b14362dab4 gdb/testsuite/gdb.mi/pr11022.c -4b5bf0118b41c29a5ba38f70f4266bf3 gdb/testsuite/gdb.mi/mi-catch-load-so.c -6ccbcceedef9d20cfbcdac39d97dd79b gdb/testsuite/gdb.mi/nsmoribund.c -48d27d274664115e1c29eaa907731bc1 gdb/testsuite/gdb.mi/mi-pending.exp -43108427dede587361c0fe12c5e3852e gdb/testsuite/gdb.mi/mi-reg-undefined.S -d842f3134dbac91b77ca50d320988178 gdb/testsuite/gdb.mi/mi-read-memory.c -684bc901ce232dcc859d36f2b61199da gdb/testsuite/gdb.mi/mi-undefined-cmd.exp -d0e50805f46066aab55f1f43ac3d04d9 gdb/testsuite/gdb.mi/mi2-amd64-entry-value.exp -8f5eb62c5987029963c2311dedc37f77 gdb/testsuite/gdb.mi/mi-language.exp -e4d02b6f6a98420177ea8e69b8f55df9 gdb/testsuite/gdb.mi/list-thread-groups-available.c -157301e7ec1a37f3a318e18d0db61538 gdb/testsuite/gdb.mi/mi-var-rtti.exp -3c66426f35ba3f037d98f96638e3bbb8 gdb/testsuite/gdb.mi/var-cmd.c -c259fd2158377eed7b538c11b99b6973 gdb/testsuite/gdb.mi/mi-complete.exp -53f0796fa3f3bc4f2c917f016403908d gdb/testsuite/gdb.mi/mi-fortran-modules-2.f90 -6a3964eb5cd9f0c62901380dd1e9506b gdb/testsuite/gdb.mi/mi-editing.exp -bbb86dc4fb5710b7f03fdd6d8be0ba3e gdb/testsuite/gdb.mi/mi-exit-code.c -9ad8b230b061e101034d5e7375c6c759 gdb/testsuite/gdb.mi/user-selected-context-sync.c -4a8d792d1aa1f7f31c276474206cd89a gdb/testsuite/gdb.mi/mi-async.exp -7df9d59fc511ad52590b72ab06a508ca gdb/testsuite/gdb.objc/nondebug.m -9ec7df7019ce6e4c044766b0ab81d75f gdb/testsuite/gdb.objc/basicclass.m -41af231578ebf5644664dcb39e358a8c gdb/testsuite/gdb.objc/print.exp -38d6f3d1308c194cbe0303e22e1b2243 gdb/testsuite/gdb.objc/basicclass.exp -60657ea6c4ee6e1298a8cbf9063dc7d9 gdb/testsuite/gdb.objc/nondebug.exp -7b61c62480150a106c17c89dba938963 gdb/testsuite/gdb.objc/objcdecode.m -42faed3da12f6b711cbc7c9169b14b16 gdb/testsuite/gdb.objc/objcdecode.exp -823233acc2801c897b4edcd506b1e769 gdb/testsuite/gdb.go/max-depth.exp -522c289163c27f516c50067b9bab9491 gdb/testsuite/gdb.go/handcall.exp -e5f112d166ab3156a5a265e950d7c727 gdb/testsuite/gdb.go/max-depth.go -3418aeca3a35216b3a4eeb0e72001570 gdb/testsuite/gdb.go/unsafe.go -68d17058fa82304a192749f0eadc138d gdb/testsuite/gdb.go/strings.go -c4825d7aee123712a5d357c619e96772 gdb/testsuite/gdb.go/package.exp -89b1b0e43b78ef36be73d194eb3a17e5 gdb/testsuite/gdb.go/types.exp -54037d4dd926eea5d4a2425fa18c0312 gdb/testsuite/gdb.go/package2.go -7cd9ed5366ca4a6e8e4fafc36ca0b19b gdb/testsuite/gdb.go/chan.exp -710eb55c40980ff44f412caea4f71ff5 gdb/testsuite/gdb.go/types.go -aec2aff2c4f38e743a328bbcd161c228 gdb/testsuite/gdb.go/print.exp -5ceb0e9d54ecdb7208bd3b865e51e576 gdb/testsuite/gdb.go/methods.exp -3edfd5e0151018ad93689561d6b8645b gdb/testsuite/gdb.go/unsafe.exp -cc8c59594d3ed17532a8353cf141b9ee gdb/testsuite/gdb.go/hello.exp -3bf59fe4ee125fed62e361a4235f302d gdb/testsuite/gdb.go/integers.go -963c02de7da3fe31926fec771633a373 gdb/testsuite/gdb.go/package1.go -c5ac89e17837aa703e00d2a9daab60bb gdb/testsuite/gdb.go/basic-types.exp -039a453cac3bf6a4748fe2e4bd372dc0 gdb/testsuite/gdb.go/hello.go -f33c953800815094e954fde86536776e gdb/testsuite/gdb.go/handcall.go -113f4cb954c18df6f26abddb56a25eda gdb/testsuite/gdb.go/chan.go -81b7ed6cb92c627d245bd2efc4b953b9 gdb/testsuite/gdb.go/methods.go -1233aa1a66349bca457ff904046372f7 gdb/testsuite/gdb.go/strings.exp -4d98465c39f12523a50cfe40fdc71d21 gdb/testsuite/gdb.go/integers.exp -680f8e7ea60bfda1a6229fe55290bd5c gdb/testsuite/config/sh.exp -680f8e7ea60bfda1a6229fe55290bd5c gdb/testsuite/config/vr4300.exp -0597c2ca40efda9bcaf7ac11327b3eb0 gdb/testsuite/config/unix.exp -fb45b7ab6bd87bd4c55e5d26a3034a0d gdb/testsuite/config/d10v.exp -80a52fc7fe2853f11c8174966dce38f5 gdb/testsuite/config/mn10300-eval.exp -1b3f65f7d15fdcfb0d775faac5071198 gdb/testsuite/config/sim.exp -25471a8b69b2e8b2086a2b0b96e65fd4 gdb/testsuite/config/slite.exp -680f8e7ea60bfda1a6229fe55290bd5c gdb/testsuite/config/i960.exp -680f8e7ea60bfda1a6229fe55290bd5c gdb/testsuite/config/vr5000.exp -b275a70cd4abf8abd7cff509ef938ec3 gdb/testsuite/config/gdbserver.exp -e4708e4b23e4e6ddd07c7245736d37b3 gdb/testsuite/config/arm-ice.exp -6d748a9b3817155605828616c06ed5fc gdb/testsuite/config/extended-gdbserver.exp -31cd6d232bba18cbebb321f87b79d63a gdb/testsuite/config/default.exp -e4708e4b23e4e6ddd07c7245736d37b3 gdb/testsuite/config/cygmon.exp -680f8e7ea60bfda1a6229fe55290bd5c gdb/testsuite/config/rom68k.exp -18e46b7ed20bddb8be8f072c2ce2c2ca gdb/testsuite/config/sid.exp -b82a933c0cc3355f561e66d03446ebac gdb/testsuite/config/mips.exp -bc5c62d7f656ca920a85e27344122882 gdb/testsuite/config/m32r.exp -80a52fc7fe2853f11c8174966dce38f5 gdb/testsuite/config/dve.exp -e4708e4b23e4e6ddd07c7245736d37b3 gdb/testsuite/config/i386-bozo.exp -b40d6cc028e1ec14ca2c22a6eb55f8ce gdb/testsuite/config/cfdbug.exp -a2e53e7f1f8a688b883a01c3d314294a gdb/testsuite/config/monitor.exp -680f8e7ea60bfda1a6229fe55290bd5c gdb/testsuite/config/proelf.exp -e4708e4b23e4e6ddd07c7245736d37b3 gdb/testsuite/config/h8300.exp -b82a933c0cc3355f561e66d03446ebac gdb/testsuite/config/mips-idt.exp -e4708e4b23e4e6ddd07c7245736d37b3 gdb/testsuite/config/bfin.exp -004e3184dcbd00cdedc9969b1a860626 gdb/testsuite/gdb.asm/sparc.inc -577585273ffc0fef150e7e01df7cebf9 gdb/testsuite/gdb.asm/alpha.inc -84e7dd06d6793d60a4572e6024408f80 gdb/testsuite/gdb.asm/openbsd.inc -561956b7afd2c11c4c23bede641b024d gdb/testsuite/gdb.asm/h8300.inc -c4d2ba6404c6cf567a68a9e710a973a0 gdb/testsuite/gdb.asm/netbsd.inc -c1af33e47ebc93f30c55b5c06d62783a gdb/testsuite/gdb.asm/frv.inc -f7aa57ad2dc302e4d47fcda58eb1c01d gdb/testsuite/gdb.asm/m32c.inc -b3f11b21e5921c419a43f93720dedf85 gdb/testsuite/gdb.asm/empty.inc -f2f66e4e9590af6782690580df003342 gdb/testsuite/gdb.asm/pa64.inc -7d494dacc7230592446747105c6bcec4 gdb/testsuite/gdb.asm/asm-source.exp -3b5b119fd551ea7bb3d99b3025d74699 gdb/testsuite/gdb.asm/i386.inc -7d06fead332c40b8b2b7b7e2e0cda153 gdb/testsuite/gdb.asm/x86_64.inc -cd196557c0510f072d40271da10c33a6 gdb/testsuite/gdb.asm/sh.inc -fda4216255cbfc61e4c5a3f186f45be4 gdb/testsuite/gdb.asm/aarch64.inc -08a59dcdce475e0de4d4e5cd882c3c0a gdb/testsuite/gdb.asm/asmsrc2.s -7450e0fb35df49b1087ec197a4046ac1 gdb/testsuite/gdb.asm/common.inc -ebdbf0ff3c07743179410487fd400598 gdb/testsuite/gdb.asm/iq2000.inc -b3bdc251c6b1eaf09953283df330eb9a gdb/testsuite/gdb.asm/m32r-linux.inc -f1621bbbb2acbec5adef86d7d9549975 gdb/testsuite/gdb.asm/bfin.inc -7acbc0a93ecaf3183a8c43ccb7af5585 gdb/testsuite/gdb.asm/powerpc64.inc -7aab094990e39f5827eb3942d43a8e8e gdb/testsuite/gdb.asm/m32r.inc -bef01819157e0cca7af4ba8058f5eaab gdb/testsuite/gdb.asm/sparc64.inc -e3c5be9e840a34c66a75b0204fe24a05 gdb/testsuite/gdb.asm/v850.inc -6c5e7f66709dbbc4e4fbbdec9be6297f gdb/testsuite/gdb.asm/xstormy16.inc -ab49b7189916586d6f506ed873c9c049 gdb/testsuite/gdb.asm/asmsrc1.s -59ed9adaed6dc7b887446707cf6c2d5f gdb/testsuite/gdb.asm/s390x.inc -b793e4384b8604633bef4c10233557c8 gdb/testsuite/gdb.asm/powerpc.inc -73f28b814430e5f1534678ff549c32cc gdb/testsuite/gdb.asm/arm.inc -cf9905b35d641b6c44fa17870eaf36d7 gdb/testsuite/gdb.asm/mips.inc -bc2f2b56b97a741661cae171ca969cf0 gdb/testsuite/gdb.asm/pa.inc -583de4033345bc72fc5e10e2c913c70d gdb/testsuite/gdb.asm/m68hc11.inc -6d1bba4f6f4e1ea0d1f59dd155016934 gdb/testsuite/gdb.asm/powerpc64le.inc -3ac68989375cc36de41334e4c629f40a gdb/testsuite/gdb.asm/ia64.inc -efc7a21c1c978e155224ad5143df8bd1 gdb/testsuite/gdb.asm/m68k.inc -c2ab6abca2f2009bd9b4b7f2501e8f9a gdb/testsuite/gdb.asm/s390.inc -17aa8d4746ddd1131aa5dbd09e14702d gdb/testsuite/gdb.compile/compile-shlib.c -a2ce5a4e4878f9f0b1cdf683c82f265b gdb/testsuite/gdb.compile/compile-cplus-inherit.exp -97e4c5c912d96cf774bd4d1bb09afeaf gdb/testsuite/gdb.compile/compile-cplus-virtual.cc -498edbbcb6713bf58e3a73770de63e1c gdb/testsuite/gdb.compile/compile-tls.exp -3be3c434689dbff4f0681f48c96e7c19 gdb/testsuite/gdb.compile/compile-cplus.c -8d1cdcc3357bff2ad823f3c1023d954f gdb/testsuite/gdb.compile/compile.c -9f5edf8294167f0659ad9f6d3bf3ef4f gdb/testsuite/gdb.compile/compile-cplus-anonymous.exp -7e417c263e29b2ae36a72664fd7cce1d gdb/testsuite/gdb.compile/compile-cplus-inherit.cc -32859e637fa9d2345156762009799025 gdb/testsuite/gdb.compile/compile-cplus.exp -c048f0435b75d0bbc7d6948e78ae2e30 gdb/testsuite/gdb.compile/compile-cplus-array-decay.cc -a3e9d28c80398644f0c31d708e135ae6 gdb/testsuite/gdb.compile/compile-nodebug.c -4d1d7e250f89d3823b5266090b2fee1c gdb/testsuite/gdb.compile/compile-ifunc.exp -771399ef133d48e22cfb40bff58a4fbf gdb/testsuite/gdb.compile/compile-cplus-virtual.exp -6ae1139bfd6288f3b99c4108980068fb gdb/testsuite/gdb.compile/compile-print.c -64c6028026994f4e270a5ca31f2efb52 gdb/testsuite/gdb.compile/compile-cplus-member.exp -e0dd35c953e21d679867d0be68ca1d5d gdb/testsuite/gdb.compile/compile-cplus-method.exp -af30c9337c75990cec623dbd2e2510e6 gdb/testsuite/gdb.compile/compile-cplus-nested.exp -5600a457b3cffcd3c2671c5e801ee446 gdb/testsuite/gdb.compile/compile-print.exp -41e8d53432bea62fb3161ad0ebc96aa8 gdb/testsuite/gdb.compile/compile-cplus-mod.c -b0f349a38c9a2b83a59dda0572594d82 gdb/testsuite/gdb.compile/compile-setjmp.c -75e2ee7f14a7a088b30bf2f87133d3f6 gdb/testsuite/gdb.compile/compile-mod.c -1d1122edebf7d20aac1968ae95390393 gdb/testsuite/gdb.compile/compile-cplus-nested.cc -d1912c3e4b50d2608c4e828df36d8d6e gdb/testsuite/gdb.compile/compile-tls.c -b358c2093aa3b4684653db0f2dbb6e90 gdb/testsuite/gdb.compile/compile.exp -212520d03b69be1fbd4cc92bba5d778b gdb/testsuite/gdb.compile/compile-ops.c -805c6ef3ac02924accd7e6198e388732 gdb/testsuite/gdb.compile/compile-cplus-method.cc -939c66fbcc4d1383ba6475063cdfbf73 gdb/testsuite/gdb.compile/compile-ifunc.c -ef7c41c4d0361b2f9e5eb2f38785b99d gdb/testsuite/gdb.compile/compile-cplus-namespace.exp -feaf22a28ce95d8af4c1d6db3c283072 gdb/testsuite/gdb.compile/compile-setjmp-mod.c -ffb030e983f982d6c1ab40a7c7a5b63b gdb/testsuite/gdb.compile/compile-cplus-anonymous.cc -7ae07d0c77bc64389ed74ee3b49e516e gdb/testsuite/gdb.compile/compile-constvar.c -8feaf55fc2052a45634825a0d2e9a459 gdb/testsuite/gdb.compile/compile-cplus-print.exp -31b172778f2f76c9eb0eb6f3c84a3210 gdb/testsuite/gdb.compile/compile-cplus-member.cc -1b4d6704a9a78ac205a3ac67617a386f gdb/testsuite/gdb.compile/compile-cplus-namespace.cc -d0afd826473dc6b0ad6aa25ebb91c3c6 gdb/testsuite/gdb.compile/compile-setjmp.exp -130d00c90b04a68d1c039e70fac8e647 gdb/testsuite/gdb.compile/compile-ops.exp -e6ee9764c0a043e7b58c7dd14dc0e37a gdb/testsuite/gdb.compile/compile-cplus-array-decay.exp -b67e89c6baca0a1a1616bd3e53c68f9b gdb/testsuite/gdb.compile/compile-constvar.S -37d383f63bdaf6c6bfa5f1b202eacc44 gdb/testsuite/gdb.compile/compile-cplus-print.c -b67ae027ec2bcf85ce9b31bbc51b3c0b gdb/testsuite/aclocal.m4 +3e7dba5d4399a9c3bc7f6c5fd58fa892 gdb/testsuite/gdb.mi/mi-cmd-error.exp +180ebe0adc9aac5916b53c53b586aa32 gdb/testsuite/gdb.mi/vla.f90 +bf067f0adddfbe15f49837abf9515976 gdb/testsuite/gdb.mi/mi-catch-cpp-exceptions.cc +4e22148ac84061a1fd2cb59ae0c1b377 gdb/testsuite/gdb.mi/mi-cli.exp +6d57768906effaecfa4d7dd27baaaafa gdb/testsuite/gdb.mi/dw2-ref-missing-frame.exp +fa8bf55d1e632709a4ce896fdc84dddd gdb/testsuite/gdb.mi/mi-watch-nonstop.exp +e25ca3a26d327597893857d1e68289bc gdb/testsuite/gdb.mi/mi-pthreads.exp +b1a393d973df56d344b9760b0e6f6364 gdb/testsuite/gdb.mi/array.f +5cf176d324f99f88107804e4004ecc32 gdb/testsuite/gdb.mi/mi-var-list-children-invalid-grandchild.exp +b57f09fafdd535da059968f2450ca4df gdb/testsuite/gdb.mi/mi-frame-regs.exp +ab24257881344e2b8dabfebb417096f6 gdb/testsuite/gdb.mi/mi-nonstop.exp +f3327a4167f075a8c8ffe3c1a1f1ac30 gdb/testsuite/gdb.mi/mi-fortran-modules-2.f90 +118ca9d3360f328b4a09f1dbd7db9170 gdb/testsuite/gdb.mi/mi-inheritance-syntax-error.exp +67bae994241621e07f8b830a54ff77fa gdb/testsuite/gdb.mi/mi-var-list-children-invalid-grandchild.c +2ae444f519c6a622c2c535b8d839e233 gdb/testsuite/gdb.mi/mi-pending.c +5d74800d3faa9d1a6b72242ab4f79011 gdb/testsuite/gdb.mi/mi-var-display.exp +43e67ce8d5c3383dab0241679c0a5e38 gdb/testsuite/gdb.mi/mi-cmd-param-changed.exp +0dd8ab00a6bdc867309cf8c8e9d24e41 gdb/testsuite/gdb.mi/mi2-amd64-entry-value.c +63774879a96aa86bbcb565608a0979e1 gdb/testsuite/gdb.mi/mi2-amd64-entry-value.exp +eed7236742322aa375401a4021eccd94 gdb/testsuite/gdb.mi/mi-complete.exp +a3b9a577f3c6398f45ef8aef056c94e9 gdb/testsuite/gdb.mi/mi-console.exp +545800043dcc6d344c05f2a25abeb8a5 gdb/testsuite/gdb.mi/mi-stepn.exp +2d8349d66c9d9a1cfabafe529d74e31f gdb/testsuite/gdb.mi/mi-dprintf.c +047f8d214fb2ca56b8b6986d42f5e40a gdb/testsuite/gdb.mi/mi-nonstop-exit.exp +4fb53683c8f027e92eaab77c2a20bc46 gdb/testsuite/gdb.mi/mi-reg-undefined.c +0ef31d2719add35fd598f272e2ec648c gdb/testsuite/gdb.mi/nsmoribund.c +b9ecd5aa1fa29bf2d435056f44cdac93 gdb/testsuite/gdb.mi/mi-stack.c 9127093957682c4085b241d725cf4e15 gdb/testsuite/.gitignore -45e7444da84d3a44410914f3dc7e6b33 gdb/testsuite/README -464375c10580a4a9befa4e3005ed3757 gdb/testsuite/gdb.stabs/weird.exp -ee491cec91bb1696fee690a192a3fdf4 gdb/testsuite/gdb.stabs/exclfwd1.c -24cd51afd4311a96fd7256d1ebd3a4b1 gdb/testsuite/gdb.stabs/weird.def -ef0a0ca194e090e3a942606488625f47 gdb/testsuite/gdb.stabs/xcoff.sed -15e57025e5e493d7eafa474391f26a7b gdb/testsuite/gdb.stabs/exclfwd2.c -bc18c7b87ad12b0309357902d8efe9d2 gdb/testsuite/gdb.stabs/gdb11479.c -4a87d0041963c650cbec0bdd23141931 gdb/testsuite/gdb.stabs/aout.sed -024e8d61c1ff36826ad4710d23a368f6 gdb/testsuite/gdb.stabs/gdb11479.exp -6ccb6568656da760d78e154f5be2da02 gdb/testsuite/gdb.stabs/exclfwd.h -16ebc6e814bd3628cce9049f530a0990 gdb/testsuite/gdb.stabs/hppa.sed -cce378fa7f4cefe702eb1edfc9061544 gdb/testsuite/gdb.stabs/exclfwd.exp -6fb5c366d78fe2c47f31555c035ddcb3 gdb/testsuite/gdb.stabs/ecoff.sed -a640da1752a98c70b4dae81fd6dc759b gdb/testsuite/gdb.disasm/t10_and.s -82c2e284f051cc293b39b6ce0741aa89 gdb/testsuite/gdb.disasm/t09_xor.s -c02c125e2e5010129e46e393e2cdef81 gdb/testsuite/gdb.disasm/t07_ari3.s -1dca21db6c031488645a8d5b84325810 gdb/testsuite/gdb.disasm/t11_logs.exp -e546b5aa7eb88708555537439de19900 gdb/testsuite/gdb.disasm/sh3.s -e14e8cc3e96d350310aaac726d4ea5e3 gdb/testsuite/gdb.disasm/t11_logs.s -6980f59860dacc165afe0661df84d910 gdb/testsuite/gdb.disasm/t12_bit.exp -1d004a61f89839db2d1eb8f5c2cdbea5 gdb/testsuite/gdb.disasm/t01_mov.exp -70b15852295559a37b00c60d55167563 gdb/testsuite/gdb.disasm/t04_sub.s -aa08db395d9716d62febaadb26615a98 gdb/testsuite/gdb.disasm/t02_mova.exp -f19fa0fb15660d68ad20e329731926c3 gdb/testsuite/gdb.disasm/disassembler-options.exp -ec9241c34e56cabb8f4eadadad6c69d3 gdb/testsuite/gdb.disasm/t13_otr.s -a5369b02364cbfaf19eafd4e10c92887 gdb/testsuite/gdb.disasm/t09_xor.exp -8df48a7abc7ba3009ba5f49d74d3c8f9 gdb/testsuite/gdb.disasm/mn10200.s -848680ef651bffe067020072db397925 gdb/testsuite/gdb.disasm/t04_sub.exp -a36c2e9f8bf7f9d788db20927e18e921 gdb/testsuite/gdb.disasm/t12_bit.s -44771225e27ffbe042ecbe2a173976ae gdb/testsuite/gdb.disasm/t06_ari2.exp -d20f8c266b73f0682f9b33a40641f923 gdb/testsuite/gdb.disasm/t03_add.s -6ee2d0e24a38ccd27400eb55d1d8046d gdb/testsuite/gdb.disasm/t07_ari3.exp -a83bc66b325f453e33ae51e7695124c1 gdb/testsuite/gdb.disasm/t10_and.exp -d817b85311f340fb3f38db89674851d4 gdb/testsuite/gdb.disasm/h8300s.exp -9d7ec73ab52e55ec1f83ec9e35523702 gdb/testsuite/gdb.disasm/am33.s -44c887d0ccdd511a260d719cb56a2776 gdb/testsuite/gdb.disasm/am33.exp -18cc49f14d50b9e08aab2b7fe930bbef gdb/testsuite/gdb.disasm/t13_otr.exp -d5acba188789b10b9a98b04708a3f53b gdb/testsuite/gdb.disasm/t03_add.exp -fb5aeb0d6e87f625ca58e833ba7c8e01 gdb/testsuite/gdb.disasm/t08_or.exp -dbbb53f76688f2006bfe0b9c14fd4241 gdb/testsuite/gdb.disasm/t08_or.s -b0c212de85c1acb1e14a705f4e40a6e9 gdb/testsuite/gdb.disasm/t01_mov.s -9f2e1d0972a5fdf62643f281a80de560 gdb/testsuite/gdb.disasm/t06_ari2.s -9f357a3040cab4263a2df6b924624670 gdb/testsuite/gdb.disasm/hppa.exp -e02ce2008b0f7cd2c4bd231e78d46c8c gdb/testsuite/gdb.disasm/mn10300.s -cb76fc798d647b1ee8ba82f8ad9a5584 gdb/testsuite/gdb.disasm/h8300s.s -0c1032ab7bdaa642b056b1b22e7adaed gdb/testsuite/gdb.disasm/sh3.exp -97381da44bf91a940dad46ac6bba9fed gdb/testsuite/gdb.disasm/t05_cmp.exp -fa6a2c9c9ae47e840be659d01a4750d8 gdb/testsuite/gdb.disasm/t02_mova.s -a81499ee9f95a72def861f6d0b6f0bb7 gdb/testsuite/gdb.disasm/mn10300.exp -1531e9f2d8c5fe8c476a72c8621ac6f5 gdb/testsuite/gdb.disasm/hppa.s -13d33a0e2d93ee9c30330c55b1f370d1 gdb/testsuite/gdb.disasm/t05_cmp.s -eb79043e8ed67f53f7635e5bb25269cb gdb/testsuite/analyze-racy-logs.py -a2dae39fcb5318abe973b84db4f702d7 gdb/testsuite/gdb.trace/trace-mt.c -213e9e97b4934e7f2d92490fd8cb0e3f gdb/testsuite/gdb.trace/save-trace.exp -97455a2825c123b8c51d26f457e55592 gdb/testsuite/gdb.trace/pendshr1.c -81f9b51bf9de1054afb9bc36196031d3 gdb/testsuite/gdb.trace/status-stop.exp -1a149af32dfad78425e5d5d29796d7f1 gdb/testsuite/gdb.trace/ftrace.c -23ae3acb68f3a416f48c4ee3d192aa66 gdb/testsuite/gdb.trace/ftrace.exp -874e9ba198fd57b2cd70147c4fc91667 gdb/testsuite/gdb.trace/tfile.exp -12449d0fdc2b4738ea60e569abd07c37 gdb/testsuite/gdb.trace/tfind.exp -f480581ad435bd1760893e68dd5301c1 gdb/testsuite/gdb.trace/actions-changed.exp -8d8acae506d09bf436006a4a139b329b gdb/testsuite/gdb.trace/strace.c -ed9d9cc9e2de2189f3711e27329e23ab gdb/testsuite/gdb.trace/trace-condition.c -eb08e20cb29666f785b08d0e72e7570c gdb/testsuite/gdb.trace/backtrace.exp -14d4612380f71b20ffe9c0670a39df8e gdb/testsuite/gdb.trace/tfile.c -7037aa73b273f9bdc766f2c5979b321f gdb/testsuite/gdb.trace/entry-values.c -3f9cbfa0900a0657a99dcdddad015de9 gdb/testsuite/gdb.trace/pending.c -039b1a68fd1fa1797236bda5a0d3990a gdb/testsuite/gdb.trace/trace-mt.exp -c8cd7bac5b85cbbfcd9ec7253179f4a7 gdb/testsuite/gdb.trace/trace-buffer-size.exp -a9c4c874d458d62774603544a549c44b gdb/testsuite/gdb.trace/change-loc-2.c -e2edc16bd53d5fa54f8d0b4f6ae95626 gdb/testsuite/gdb.trace/mi-tracepoint-changed.exp -aa5aa294560751ac3f2b13c3b6389f6d gdb/testsuite/gdb.trace/disconnected-tracing.c -f529091d7f34b241f627b5c367dc489c gdb/testsuite/gdb.trace/signal.c -6b132bde135785126c344895d78a4b26 gdb/testsuite/gdb.trace/tracefile-pseudo-reg.c -af54b710535b4d5d5950985e570f48d7 gdb/testsuite/gdb.trace/trace-enable-disable.c -68c962741138694f2899e5702a3ee4d2 gdb/testsuite/gdb.trace/actions-changed.c -a34958c3b9e8838b13d3008c73f20310 gdb/testsuite/gdb.trace/collection.exp -7a6fde9b581363be51aca0a5f6cc7dda gdb/testsuite/gdb.trace/tstatus.exp -57919df6d69cb3040b030c32db731fe4 gdb/testsuite/gdb.trace/trace-break.c -da5f39b4152e510733d1a1405abf4361 gdb/testsuite/gdb.trace/circ.exp -3b56b34f234b2c79a93782632161a8bf gdb/testsuite/gdb.trace/trace-enable-disable.exp -0e38689f36bfce4f0f91e54a23c7cd8f gdb/testsuite/gdb.trace/passcount.exp -508524fba98139bfd151612701434ca3 gdb/testsuite/gdb.trace/ax.exp -2bf02f5d688c92297ddd7b1289530256 gdb/testsuite/gdb.trace/infotrace.exp -2ebc92a42caafb60843891d15401598e gdb/testsuite/gdb.trace/change-loc-1.c -5f9615cd9fadbf32be8d5636dc5c77e3 gdb/testsuite/gdb.trace/disconnected-tracing.exp -681c09dc09b235174961be03910480df gdb/testsuite/gdb.trace/stap-trace.c -986b02e62daa42c39baafb1204a2d839 gdb/testsuite/gdb.trace/trace-condition.exp -3c39b621f9754ae9889fc3a17c17bc99 gdb/testsuite/gdb.trace/read-memory.c -92fa6ebe8daf0babaa538ae56aeb8ffd gdb/testsuite/gdb.trace/passc-dyn.exp -50a5e10e7ef0173cad46c8c0c94a58e5 gdb/testsuite/gdb.trace/ftrace-lock.exp -1677751933bdfa1054a8f6f1868bfcda gdb/testsuite/gdb.trace/signal.exp -30aee0c1c00e35892e314ebbbcbff300 gdb/testsuite/gdb.trace/no-attach-trace.c -3f09005c72bde06696ebacf735d4e008 gdb/testsuite/gdb.trace/report.exp -839eef6bc78fb7457483d3eec4d43b07 gdb/testsuite/gdb.trace/mi-traceframe-changed.exp -d9a351ad9968da881fa3bf475c988b53 gdb/testsuite/gdb.trace/unavailable-dwarf-piece.c -8b38586a3d32edf8c24a52c765879504 gdb/testsuite/gdb.trace/change-loc.exp -bce68f347e93293ea916cf7581874e0c gdb/testsuite/gdb.trace/while-stepping.exp -aaf4fbdfacf4a62feb5e397f42df14a3 gdb/testsuite/gdb.trace/trace-break.exp -1f15680a7edb5b26b911903b3d02f9f9 gdb/testsuite/gdb.trace/circ.c -4ab35c2d14c884402c64f5c3035ef9f0 gdb/testsuite/gdb.trace/mi-trace-frame-collected.exp -564da1c5f4c0571a9bf1f1ff4ba24778 gdb/testsuite/gdb.trace/collection.c -c85fa817a4fd32cceb14d13e03319efa gdb/testsuite/gdb.trace/pending.exp -f61a6d528b3984ac9d829dd1bb153760 gdb/testsuite/gdb.trace/mi-trace-save.exp -3920e4f6bfacbbabb407f58f2838c613 gdb/testsuite/gdb.trace/range-stepping.c -8590f910ccea893e2fa28ffecc448ba4 gdb/testsuite/gdb.trace/tsv.exp -ea6e8997a6b7bdd53159f41438576e8c gdb/testsuite/gdb.trace/status-stop.c -db61e6b28c4d861c4a5efc5194b39d97 gdb/testsuite/gdb.trace/trace-common.h -e516d6192c7a7edaa67b1866bf2eb17b gdb/testsuite/gdb.trace/qtro.c -6c87897f0610f09500d72071206f967e gdb/testsuite/gdb.trace/pendshr2.c -26be092d31708e6e8988b2399a74702b gdb/testsuite/gdb.trace/qtro.exp -2f7685b5c2576a328ace5c1d16231009 gdb/testsuite/gdb.trace/no-attach-trace.exp -704a5997fe71c0ca426100fb81285b0f gdb/testsuite/gdb.trace/unavailable.exp -be51978fa6d70804f785686033a2b19b gdb/testsuite/gdb.trace/tracecmd.exp -dd0ce6555a651d2cf74eeea64575fe6c gdb/testsuite/gdb.trace/packetlen.exp -cc0ffcfac49fb6e6410a43289ffd1d7a gdb/testsuite/gdb.trace/strace.exp -badded4cec0af1b280668693a2f4218a gdb/testsuite/gdb.trace/actions.exp -f136ac451f193b4fe4b887a0a896542d gdb/testsuite/gdb.trace/mi-trace-unavailable.exp -1d42c1392f4d2b22d832aa0df2fde00d gdb/testsuite/gdb.trace/while-dyn.exp -74406da0fcb50b2546efb28ff3ace274 gdb/testsuite/gdb.trace/stap-trace.exp -21bb520aa2f306f9259e699222ec0a4a gdb/testsuite/gdb.trace/unavailable-dwarf-piece.exp -9ea37f3686858ebb5e7f290f102ad569 gdb/testsuite/gdb.trace/trace-buffer-size.c -665b9dd3558a3231055555f3a2d66756 gdb/testsuite/gdb.trace/tracefile-pseudo-reg.exp -0cd02bc6ae7888541efd8010a5cb2082 gdb/testsuite/gdb.trace/deltrace.exp -508b941fe30b8374a6357574ce4c758c gdb/testsuite/gdb.trace/change-loc.h -c81d960fffeb89c1082c08b8e82b1c5d gdb/testsuite/gdb.trace/trace-unavailable.c -39709b88df3809ee65c2f49f267555af gdb/testsuite/gdb.trace/pr16508.exp -52132ce641ed44b65bfc708592be47b4 gdb/testsuite/gdb.trace/read-memory.exp -23ff40eb333c1c362845137f499ccc28 gdb/testsuite/gdb.trace/range-stepping.exp -39bfc1f3f0e53d440435eae6796feba8 gdb/testsuite/gdb.trace/tspeed.exp -64d7fa6a73a22a51083d3c2735e4f548 gdb/testsuite/gdb.trace/entry-values.exp -30ab86ffb73e12b2bed9bf96803a83b6 gdb/testsuite/gdb.trace/unavailable.cc -17445978144f3f03988fb1bf63e2a5f7 gdb/testsuite/gdb.trace/change-loc.c -53ef4707de4961db27fe0421187a938b gdb/testsuite/gdb.trace/mi-tsv-changed.exp -a8234ca662b27a3c74451adec6ceb2f9 gdb/testsuite/gdb.trace/tspeed.c -b1207de8b57536976052724daa2a0c70 gdb/testsuite/gdb.trace/actions.c -113b4870793f21bfd9415a039cf816e8 gdb/testsuite/gdb.trace/ftrace-lock.c -e1ce6e104e31ea89cdacf3e30fa3b31c gdb/testsuite/gdb.arch/mips16-thunks-sin.c -07927dab656f08c080ebb230c66bd9b6 gdb/testsuite/gdb.arch/i386-gnu-cfi.exp -79e8b5d4e2acf9eae7a6bc567dffc128 gdb/testsuite/gdb.arch/amd64-eval.exp -3ee3a1fb6b9a59d22ee8cf0fe7dd8b67 gdb/testsuite/gdb.arch/arm-single-step-kernel-helper.c -995d755a24466a0c4eb20c3f11643ea6 gdb/testsuite/gdb.arch/i386-stap-eval-lang-ada.exp -f24be175ca4e6e30d24cef8323014723 gdb/testsuite/gdb.arch/aarch64-tagged-pointer.c -80c0100989a246ad5400639f3648ee48 gdb/testsuite/gdb.arch/gdb1291.s -0e9b1ffd059b8a2f7b63ace1d31926d1 gdb/testsuite/gdb.arch/e500-prologue.c -6ce43b47db17c74085554eefdb017d25 gdb/testsuite/gdb.arch/gdb1291.exp -f7878c686b5f8528678a63af3fb5f90a gdb/testsuite/gdb.arch/aarch64-sighandler-regs.exp -bf7682368d2977048405e4fe6d80a102 gdb/testsuite/gdb.arch/powerpc-d128-regs.exp -8cce8bf1f65d4975a0a1628e4e1493d4 gdb/testsuite/gdb.arch/arc-analyze-prologue.S -9bfb86314348602f75debe3c9902ee6f gdb/testsuite/gdb.arch/amd64-tailcall-noret.exp -584ce494d850c298ccbf8e9615fc7099 gdb/testsuite/gdb.arch/ppc64-isa207-atomic-inst.S -7cd591a35ddade957f77e3392c271a1c gdb/testsuite/gdb.arch/aarch64-sighandler-regs.c -58509c9f44957f73977f5aa0c319f6a0 gdb/testsuite/gdb.arch/i386-cfi-notcurrent.exp -0d003e2541e01f8f026e354947fbfb15 gdb/testsuite/gdb.arch/arm-bl-branch-dest.exp -bbcb90bb4c72f8ebbff368fdc1823033 gdb/testsuite/gdb.arch/arc-decode-insn.exp -8e0ae4e1377a766c22e4259d410aa7ee gdb/testsuite/gdb.arch/riscv-unwind-long-insn-6.s -6f9c32988436298a397880c0117b3cec gdb/testsuite/gdb.arch/alpha-step.c -5d76e145aea718e0eb7c7d5eda93eedb gdb/testsuite/gdb.arch/s390-vregs.exp -d6ae533c83fa216342e1dd7593f5e8ce gdb/testsuite/gdb.arch/mips16-thunks-sinfrob.c -1a9e816af71a6611527f5a9dc9f4707d gdb/testsuite/gdb.arch/s390-multiarch.c -21bad3dc05028f1a017324528dc53177 gdb/testsuite/gdb.arch/arm-neon.exp -001761fd6a563285353d0cdaa81db46d gdb/testsuite/gdb.arch/i386-dr3-watch.c -6d3313ab3f7abad203ca47eb700190a5 gdb/testsuite/gdb.arch/amd64-stap-triplet.c -1094abf8f8b99fb837c04223a632f235 gdb/testsuite/gdb.arch/ftrace-insn-reloc.exp -a2687523ba35ad75d081b083a1461355 gdb/testsuite/gdb.arch/gdb1431.exp -4de77ae31add6ad74b89135fb36876c3 gdb/testsuite/gdb.arch/ppc-fp.exp -21c5d8905f8ca5228ac82aea6b0fd72f gdb/testsuite/gdb.arch/amd64-entry-value.cc -a8461833ad29559c292c8f99e00a8f99 gdb/testsuite/gdb.arch/mips16-thunks.exp -efd12b100da42469d659bdc7795f1fa3 gdb/testsuite/gdb.arch/i386-mpx-call.exp -167f4f6d20e204060f18acc340120a43 gdb/testsuite/gdb.arch/sparc64-regs.exp -8c8382673effae7198e42e42e8843811 gdb/testsuite/gdb.arch/ia64-breakpoint-shadow.exp -05e837358b0a5124dc44f236d4543be9 gdb/testsuite/gdb.arch/amd64-entry-value.s -57e11a5ab7185c344df2f7ab71c0490a gdb/testsuite/gdb.arch/amd64-invalid-stack-top.exp -36e4e3178d79f18c310f8830c16a79a8 gdb/testsuite/gdb.arch/powerpc-vsx2.s -a8f61829a51871c97bb2f5c6d56098de gdb/testsuite/gdb.arch/amd64-entry-value-paramref.cc -de3d77f858a01d9a6fc9cfacb8d70d11 gdb/testsuite/gdb.arch/amd64-disp-step-avx.S -a3d5787e7fa508283a371e4418883829 gdb/testsuite/gdb.arch/powerpc-prologue.exp -47e95486846d865c653d4414f3da7945 gdb/testsuite/gdb.arch/ppc64-isa207-atomic-inst.exp -6204cfaf90a1e517715825fc070a485d gdb/testsuite/gdb.arch/ia64-breakpoint-shadow.S -96006339cc90e368d0b77148ed834d42 gdb/testsuite/gdb.arch/aarch64-prologue.c -95f9ae6fa593c8df705d3e286a4eece9 gdb/testsuite/gdb.arch/i386-avx512.exp -33af236b6220019d387a17dc82dfc27c gdb/testsuite/gdb.arch/powerpc-power7.exp -687743e37136e171ce19a8839b3c86f2 gdb/testsuite/gdb.arch/powerpc-ppr-dscr.exp -d6cc564e20291bc1df4bbffb8dd48dc5 gdb/testsuite/gdb.arch/i386-size.c -8b104da8735ab4a659b5aaff3871f779 gdb/testsuite/gdb.arch/i386-mpx-sigsegv.exp -9dd8e729494ca1e7e2758a0399ec3516 gdb/testsuite/gdb.arch/s390-multiarch.exp -4d7dd25713b77d149d56d724f88fab81 gdb/testsuite/gdb.arch/amd64-entry-value-param.exp -d215ece65548ad85903d151e76315563 gdb/testsuite/gdb.arch/s390-stackless.exp -1b9e87583c5260df084d2f15de59eac9 gdb/testsuite/gdb.arch/powerpc-altivec.s -c445cb1d8c9c505c146349650d33dcda gdb/testsuite/gdb.arch/i386-stap-eval-lang-ada.S -36d608adafc4277b115d3bac02c0164b gdb/testsuite/gdb.arch/mips-disassembler-options.exp -a8da042ef954dea971664757f525c1fa gdb/testsuite/gdb.arch/powerpc-altivec2.s -55de0931349aed11040f946db8985632 gdb/testsuite/gdb.arch/riscv-unwind-long-insn.exp -0ba6413ba9defdbc743718c1f1d0feb1 gdb/testsuite/gdb.arch/amd64-tailcall-cxx1.S -317abdc8fda7ecce31bca1998e297d0f gdb/testsuite/gdb.arch/aarch64-pauth.c -1c8ab846ace508241930bb476c1c9b51 gdb/testsuite/gdb.arch/i386-mpx-call.c -89f8b8340d10e9ff87cf2c0a76be0f02 gdb/testsuite/gdb.arch/i386-mpx.exp -7c0813330da47fb73ac5d843ab1771e3 gdb/testsuite/gdb.arch/i386-mpx-simple_segv.c -edff75dd77250c3fa0b17b2dbc182ba1 gdb/testsuite/gdb.arch/e500-abi.exp -a4b44663a9c9d2ac554ea371750489cf gdb/testsuite/gdb.arch/altivec-regs.c -856a0ab8b74b4424ed6a84295ff27daf gdb/testsuite/gdb.arch/i386-permbkpt.S -5aeafc8d82661a8db9c35fe341cdebce gdb/testsuite/gdb.arch/amd64-break-on-asm-line.exp -19d5d7507bce76e9ca88070248830a61 gdb/testsuite/gdb.arch/altivec-abi.c -05f904c485a01ac34bcdaba681b2fb1b gdb/testsuite/gdb.arch/amd64-invalid-stack-middle.exp -5b1038b893b438294f1afd23dc708aaa gdb/testsuite/gdb.arch/gdb1558.c -c6c3259c4e0fe83ba7e34ee7fbcc87ec gdb/testsuite/gdb.arch/powerpc-vsx3.s -93dd678658a638fc11e6f857a0a72563 gdb/testsuite/gdb.arch/amd64-optimout-repeat.c -4507ae9886f9969a7a578c8474d1f054 gdb/testsuite/gdb.arch/amd64-invalid-stack-top.c -7f710bd914389a2b168c58ab871b86ce gdb/testsuite/gdb.arch/riscv-bp-infcall.c -7e15fe36f59b8e04c5fb0265a6950c3e gdb/testsuite/gdb.arch/pa-nullify.s -7fe9214f6f964761093ecdf8cba7a28f gdb/testsuite/gdb.arch/amd64-prologue-skip.S -6199edfdfec18c3321c15da0cc8cbf7f gdb/testsuite/gdb.arch/aix-sighandle.c -fb3bf156daa4b9ce7b69d5c11659dfd7 gdb/testsuite/gdb.arch/powerpc-aix-prologue.exp -3768ea8e8a79fa46c0885fa91c1f8883 gdb/testsuite/gdb.arch/aarch64-dbreg-contents.exp -8a1df68974bd8633c41feb841e67cbab gdb/testsuite/gdb.arch/mips-octeon-bbit.exp -088e94e3847aeb0df5b4f68aea5ec7ab gdb/testsuite/gdb.arch/amd64-entry-value-inline.S -8adb4d90502ea3e67bceb1d7dc229869 gdb/testsuite/gdb.arch/powerpc-tar.c -01eb4389ce9046763a034f63501aaf6e gdb/testsuite/gdb.arch/i386-avx512.c -da534b90fdaadc38a5a742cfa2fb2fe6 gdb/testsuite/gdb.arch/amd64-tailcall-ret.c -875b055d7558f880588599172690e431 gdb/testsuite/gdb.arch/mips-fpregset-core.exp -3f0668253670fec144e3d43b54e813a3 gdb/testsuite/gdb.arch/powerpc-htm-regs.exp -a5be084a27e28f1ed1434918a359e44f gdb/testsuite/gdb.arch/thumb-bx-pc.S -68d2e2121ad5409a75444b32c8500ef0 gdb/testsuite/gdb.arch/riscv-bp-infcall.exp -e965f48923b779f1cbfcdfccdcbac3fd gdb/testsuite/gdb.arch/i386-biarch-core.exp -a587c107ac7017030d2f9cc8b99426d7 gdb/testsuite/gdb.arch/pr25124.S -0953d3617ad779b11f88e2ddf1a1e669 gdb/testsuite/gdb.arch/mips-fpregset-core.c -1b7749aa942d1174ebc6a52fb5e7083a gdb/testsuite/gdb.arch/amd64-invalid-stack-middle.S -3edf581577cdedaff74aa5c01d7c2169 gdb/testsuite/gdb.arch/amd64-stap-optional-prefix.S -36a38b668dcc2da6347c1a4e55af8c26 gdb/testsuite/gdb.arch/arc-tdesc-cpu.exp -f32fb5d1bb49b675aae892c1a77e3d60 gdb/testsuite/gdb.arch/ppc64-isa207-atomic-inst.c -805333d89228dddf243622338edd993d gdb/testsuite/gdb.arch/amd64-entry-value-paramref.exp -f1fbd9bc381d41f6f0137991ca020f75 gdb/testsuite/gdb.arch/amd64-osabi.exp -960fa80dea7effd4baf81ba48a03ac2c gdb/testsuite/gdb.arch/arm-disp-step.exp -09389ade69447944cab3cb6d4e9edd32 gdb/testsuite/gdb.arch/pa-nullify.exp -692d7da77fc59524896fb0ea497d54fa gdb/testsuite/gdb.arch/avr-flash-qualifier.c -9a6bf036b379e4a5e50957e61c28affd gdb/testsuite/gdb.arch/ppc-longdouble.c -35b446694cdfbe351cbbc88e503193d7 gdb/testsuite/gdb.arch/aarch64-fp.exp -2428006f535b03762cd2e621a846d00d gdb/testsuite/gdb.arch/thumb-singlestep.exp -7ad6c63387c25d56f8426255963f0e16 gdb/testsuite/gdb.arch/powerpc-altivec2.exp -3961fe114fb757dd5611f91c12d2756f gdb/testsuite/gdb.arch/ppc-longdouble.exp -50a274ed31698a4dad65be3e7afb0644 gdb/testsuite/gdb.arch/amd64-stap-three-arg-disp.c -10977414ce4a7fe1c66b43b09f006064 gdb/testsuite/gdb.arch/arc-decode-insn.S -61ad538b39af55608ca4da1d1ce92350 gdb/testsuite/gdb.arch/sparc64-regs.S -7fe4eae6278b8fd3898f5ed18bc2f85c gdb/testsuite/gdb.arch/i386-sse-stack-align.S -bec61a79901cb8f0439b91ec19fd0f6a gdb/testsuite/gdb.arch/amd64-stap-wrong-subexp.exp -f00d20af970eece334d2b839bb796b59 gdb/testsuite/gdb.arch/amd64-prologue-xmm.exp -efa3153dc184d876390f8ab2b43e1c1e gdb/testsuite/gdb.arch/powerpc-prologue-frame.exp -6fc5d2df9eca1a533735ff373775e5b1 gdb/testsuite/gdb.arch/iwmmxt-regs.exp -13dcb7e9a3427271b3df3ab5caba0751 gdb/testsuite/gdb.arch/powerpc-power9.exp -e51ddce404959138b671063db8b72ec4 gdb/testsuite/gdb.arch/amd64-eval.cc -d58d0c0ffc327cd3be315a8e5c11665b gdb/testsuite/gdb.arch/arm-cmse-sgstubs.c -437e09bf53c297a4da9ce08bc9feea27 gdb/testsuite/gdb.arch/sparc64-adi.exp -8e86ac1d46ed2d5e90ea54e2927e265e gdb/testsuite/gdb.arch/powerpc-disassembler-options.exp -7824b46b5f19fa15e48e9507e612e0f6 gdb/testsuite/gdb.arch/powerpc-aix-prologue.c -f7ba8f42b8031e99fdbace2110b2e9e3 gdb/testsuite/gdb.arch/i386-word.exp -b7ae069111cf5a87f812367ba20e18f4 gdb/testsuite/gdb.arch/i386-mpx.c -b981806f31c31bde3a7ebc56f8f934e0 gdb/testsuite/gdb.arch/aarch64-dbreg-contents.c -7e1f22e28d60cc3af38822f6f01defad gdb/testsuite/gdb.arch/amd64-tailcall-self.c -d3ef826258123350be7e23cbe07c0a11 gdb/testsuite/gdb.arch/disp-step-insn-reloc.exp -be1b22acc8e69fc65e23e98fdfd57538 gdb/testsuite/gdb.arch/thumb-singlestep.S -caa1f3fa5b7f440e4eee91ab6083a5c2 gdb/testsuite/gdb.arch/powerpc-stackless.S -1908e279abd2a9f8f3c8c2fa4b1eccf7 gdb/testsuite/gdb.arch/i386-gnu-cfi.c -0121518833b6cdd083a298a4251ec6ba gdb/testsuite/gdb.arch/amd64-prologue-skip.exp -3db7fecebfe32fed0e8fcddde9f0c076 gdb/testsuite/gdb.arch/amd64-i386-address.S -899b2bb0857c900c43b2881cfd7b1a94 gdb/testsuite/gdb.arch/mips16-thunks-inmain.c -acc22adad8c8856479af616153b7eefc gdb/testsuite/gdb.arch/amd64-gs_base.exp -3832a68f917e09c743ee9783d662291e gdb/testsuite/gdb.arch/s390-tdbregs.exp -3507a97a8e4f110fc3193cb6ea918afb gdb/testsuite/gdb.arch/aarch64-fp.c -b6024593e8ba84059625b7e87cccf957 gdb/testsuite/gdb.arch/i386-float.exp -a7ac66220836e1be78d86e8967ce9385 gdb/testsuite/gdb.arch/powerpc-tar.exp -98ca3f88516084206349aabc3b7af5fd gdb/testsuite/gdb.arch/i386-float.S -1c8e492f7d917b66917ec3b40ed7f83a gdb/testsuite/gdb.arch/i386-sse-stack-align.exp -f5b01260b9cebfe0780f9ef2b7cfa66a gdb/testsuite/gdb.arch/powerpc-fpscr-gcore.exp -707aac61ad4fb09642d5b9bfea33cd34 gdb/testsuite/gdb.arch/pr25124.exp -9e833d9979b422f5645fd8e724772fd2 gdb/testsuite/gdb.arch/riscv-reg-aliases.c -cca534a8fdc17d52a88c34a46ec6ee14 gdb/testsuite/gdb.arch/amd64-entry-value-param-dwarf5.S -7ec48e22145da924b8442faad0d0aab1 gdb/testsuite/gdb.arch/powerpc-vector-regs.c -5608994e393e0850478a525378b694f4 gdb/testsuite/gdb.arch/i386-mpx-sigsegv.c -6cc03f6c6f5f7b47d97b0492ae0759bc gdb/testsuite/gdb.arch/i386-gnu-cfi-asm.S -e132c0926c0903373d4d24a281ebf554 gdb/testsuite/gdb.arch/powerpc-altivec.exp -8faae8d3793e4682a41bf21761679b73 gdb/testsuite/gdb.arch/i386-mpx-map.c -0003b7530dc4c4e2c6df20b96109dc5f gdb/testsuite/gdb.arch/i386-size-overlap.c -311acbf61930731fd350a72977462103 gdb/testsuite/gdb.arch/amd64-tailcall-ret.exp -459a1d4b6e22673b1cb5d020deedbba4 gdb/testsuite/gdb.arch/mips-fcr.exp -852a2474308994360e0a37ad186c3d04 gdb/testsuite/gdb.arch/i386-dr3-watch.exp -0b56adfce6d812916d3887b0fb0b1ccd gdb/testsuite/gdb.arch/powerpc-prologue-frame.c -8e9bb971ee13be9040257a80dba755d4 gdb/testsuite/gdb.arch/ppc-dfp.c -38b1027eb5558b432981690069392854 gdb/testsuite/gdb.arch/e500-regs.exp -457e558f3b14cc1e79d54b25ae92db23 gdb/testsuite/gdb.arch/amd64-disp-step-avx.exp -99d224488bb86fbf4950e05fc94f311a gdb/testsuite/gdb.arch/riscv-unwind-long-insn.c -c9343903f6f63d09e41468d3b996a1db gdb/testsuite/gdb.arch/s390-vregs.S -b7bc131a3d3277ed57613a905d025cb9 gdb/testsuite/gdb.arch/e500-prologue.exp -25088d663a95e6ef066fe80749b328b6 gdb/testsuite/gdb.arch/powerpc-power8.exp -b371853b5b4b3b90a25d2b6b343fb9e5 gdb/testsuite/gdb.arch/amd64-break-on-asm-line.S -46f71217c8628a257976c1c945d0dfb2 gdb/testsuite/gdb.arch/i386-prologue.c -e09a5e1f228641299ccd164ef2408dcf gdb/testsuite/gdb.arch/powerpc-vsx-gcore.exp -d839d2710093e744afcac59f950554e9 gdb/testsuite/gdb.arch/i386-biarch-core.core.bz2 -4d2698039b12e0164647eb876c144e64 gdb/testsuite/gdb.arch/amd64-entry-value-param.c -093681168ece3c86a4052c00975bc868 gdb/testsuite/gdb.arch/i386-avx.exp -f361304567d60eb02abf3eee92477973 gdb/testsuite/gdb.arch/i386-unwind.c -8ce6e6047453fbfc8a3da074b20e1d36 gdb/testsuite/gdb.arch/i386-pkru.exp -bd7cf5e96e9e308cc39648c6ce20d498 gdb/testsuite/gdb.arch/amd64-stap-three-arg-disp.S -faa863bd384f5950668a307d5c6d2725 gdb/testsuite/gdb.arch/arc-analyze-prologue.exp -2d2132f4e0ccd085cab44532e8f0fced gdb/testsuite/gdb.arch/ppc-fp.c -9a1bd1ba7b4e3f309d060cd649cd73b5 gdb/testsuite/gdb.arch/amd64-tailcall-cxx2.S -02c7222bfd3bb4f33e43f9e5d6c54f07 gdb/testsuite/gdb.arch/powerpc-altivec3.exp -84202288f9b3b368b61273d7eb7977fd gdb/testsuite/gdb.arch/amd64-entry-value-paramref.S -dc8409858f2c518029a857210ad6db64 gdb/testsuite/gdb.arch/amd64-entry-value-param-dwarf5.exp -ac71cf40c9599399f0940557a88f4b9e gdb/testsuite/gdb.arch/i386-prologue.exp -fece77c194844fa0051fba0306c8b9f2 gdb/testsuite/gdb.arch/i386-byte.exp -640a1e54922174a04cf3f16036e9cbb3 gdb/testsuite/gdb.arch/ppc-dfp.exp -278442ba4a9506eea4d650ffb7ce6b4d gdb/testsuite/gdb.arch/mips-octeon-bbit.c -7c53baa54c0c1615e76df880446aad79 gdb/testsuite/gdb.arch/amd64-entry-value-inline.c -2a27674e3c844b9573d12fa0728f944e gdb/testsuite/gdb.arch/powerpc-vsx3.exp -767777e9b334d6dcb15160a2efdd3521 gdb/testsuite/gdb.arch/altivec-regs.exp -3cee50befa662949d64c626e7efc9d6e gdb/testsuite/gdb.arch/amd64-tailcall-noret.S -a3f0163e6ffbf3ff4e6dbf597d022be6 gdb/testsuite/gdb.arch/i386-cfi-notcurrent.S -660e3cfac4fe45348ac562c8ad809110 gdb/testsuite/gdb.arch/sparc-sysstep.exp -904c23670ee560aee95f0a176933fc4e gdb/testsuite/gdb.arch/amd64-prologue-xmm.s -81ff49a75dea3a095ca2db1c08793853 gdb/testsuite/gdb.arch/arm-single-step-kernel-helper.exp -364a957e71cacb3299f3401d80d0d906 gdb/testsuite/gdb.arch/alpha-step.exp -5c6c637da9a995d4b6e86140a360168c gdb/testsuite/gdb.arch/amd64-disp-step.S -3429a9c4fad3d27e74b742b7acf31056 gdb/testsuite/gdb.arch/i386-size-overlap.exp -f18c36d1d4909d2fbb99284f507eee6a gdb/testsuite/gdb.arch/i386-unwind.exp -4ac282e1f40ce1aaad0b50fbe528ac01 gdb/testsuite/gdb.arch/amd64-dword.exp -260035de371690e8726217e61854adfb gdb/testsuite/gdb.arch/amd64-tailcall-cxx1.cc -a328cd26dc1a73c89c3543fc0bc8cbc8 gdb/testsuite/gdb.arch/amd64-disp-step.exp -df4085e7f3686ef64ec76349f23e8e08 gdb/testsuite/gdb.arch/i386-bp_permanent.c -19ca615948f8dff8e8cee9c72d3c1138 gdb/testsuite/gdb.arch/thumb2-it.exp -cb221b507fc294676ada96d8d486a7bd gdb/testsuite/gdb.arch/aix-sighandle.exp -2c52ac9c6e830f4169f46b03ca22838b gdb/testsuite/gdb.arch/altivec-abi.exp -d52c0d47748c949caceb1bc425ec403f gdb/testsuite/gdb.arch/i386-sse.c -67d86b97ac988a70a00d49b1470c60d8 gdb/testsuite/gdb.arch/amd64-tailcall-ret.S -693194fa63789df0260d6f9366f86d5f gdb/testsuite/gdb.arch/aarch64-tagged-pointer.exp -3ba1abb4b2c40a59cd4ccf33826c0b53 gdb/testsuite/gdb.arch/s390-stackless.S -638379aed4e4e456b3cb8a1b3e52bf4f gdb/testsuite/gdb.arch/i386-pseudo.c -e9d756c44d562bc0ebcde17b5ec7f1cb gdb/testsuite/gdb.arch/s390-tdbregs.c -42a191dbbbc7482c42df81e0353d49d6 gdb/testsuite/gdb.arch/ppc64-symtab-cordic.exp -5fb2eaef8fa3678d2f93e1b0c7c65be6 gdb/testsuite/gdb.arch/pa64-nullify.s -7710bcfc9e67931bb4fd033f214fd4ba gdb/testsuite/gdb.arch/amd64-optimout-repeat.exp -88450bdf8f9f6f728d199c7cc5113b13 gdb/testsuite/gdb.arch/mips-fcr.c -1bdeda163a34cb0e18a9b74b09f92f8a gdb/testsuite/gdb.arch/amd64-tailcall-self.exp -0fe6f504cd97937b71dc78b6177d9c16 gdb/testsuite/gdb.arch/amd64-entry-value.exp -275ab341dba07fa6350fc9492c9a0036 gdb/testsuite/gdb.arch/amd64-byte.exp -e5757fe84b47998887b27c473e192eac gdb/testsuite/gdb.arch/thumb-prologue.c -29e44a1d95063ff0b224f04390562e04 gdb/testsuite/gdb.arch/avr-flash-qualifier.exp -c46b1949c8468fd72ae5cb80b3931399 gdb/testsuite/gdb.arch/powerpc-prologue-frame.S -2b8d7e3aa564bcd95f20377541b1e0c4 gdb/testsuite/gdb.arch/amd64-init-x87-values.S -1ffde95fbf0e5dfdd8eb6e3803cf516f gdb/testsuite/gdb.arch/i386-pkru.c -18baad4f0a33182df01d10fcecb4ae53 gdb/testsuite/gdb.arch/ppc64-atomic-inst.exp -328981b9476415db43b38c65f1ad8614 gdb/testsuite/gdb.arch/gdb1558.exp -0483ba4ba1171c66d027f46b1a3455ce gdb/testsuite/gdb.arch/i386-mpx-map.exp -da776d6f26063ecf0a68b6c4c4780b3a gdb/testsuite/gdb.arch/i386-sse-stack-align.c -5f50f9d53ac2dd59578336c71f84112a gdb/testsuite/gdb.arch/amd64-tailcall-cxx2.cc -7d3c8d70d5804d8c4fd78fc2d3cb72dc gdb/testsuite/gdb.arch/sparc64-adi.c -a6cd2a6573a8007cb2486601a13fb3f7 gdb/testsuite/gdb.arch/vsx-regs.exp -ab94a293e4c2e0c03c24af33e0f97993 gdb/testsuite/gdb.arch/amd64-gs_base.c -1f76138f5f55683189a3670e8b6034f8 gdb/testsuite/gdb.arch/thumb-bx-pc.exp -7be4298e8e282be9e6b0579027010d78 gdb/testsuite/gdb.arch/i386-mpx-simple_segv.exp -355c9a7b2d6159546cb260eb458432fe gdb/testsuite/gdb.arch/i386-disp-step.exp -bdb5a334e509cd82b8eab35fa24e67b0 gdb/testsuite/gdb.arch/thumb2-it.S -867bd79199b0be252d0327f86cddc054 gdb/testsuite/gdb.arch/amd64-stap-optional-prefix.exp -be1b0385b5b997b98dbbbcff264489a3 gdb/testsuite/gdb.arch/amd64-i386-address.exp -c5ce8095401d9b52c0d9a7bd95570d77 gdb/testsuite/gdb.arch/powerpc-stackless.exp -f8bca347f8db41d20eb7abff4d4d6670 gdb/testsuite/gdb.arch/amd64-tailcall-noret.c -fcd0dd3432e917999e1b351b9467f52f gdb/testsuite/gdb.arch/e500-regs.c -8e5faa00c4171152bf98daf4fad3171a gdb/testsuite/gdb.arch/powerpc-power9.s -5d29a5c5e1420bcddb96701896e80e1e gdb/testsuite/gdb.arch/amd64-prologue-xmm.c -0c23aa87b2e7695d37e1a639ea78d905 gdb/testsuite/gdb.arch/aarch64-atomic-inst.exp -06440276ddba24fe9e92392f6c2fa1bc gdb/testsuite/gdb.arch/amd64-tailcall-self.S -dc5c9c01d6fb18bb56532576e8b30f05 gdb/testsuite/gdb.arch/i386-stap-eval-lang-ada.c -d09d61d8f80d31dc57a4f003a7012d82 gdb/testsuite/gdb.arch/powerpc-vsx.s -cdbce5599c2d0892df78379fa60ac150 gdb/testsuite/gdb.arch/aarch64-atomic-inst.c -438877262cb745141a78cc8339b9b206 gdb/testsuite/gdb.arch/i386-permbkpt.exp -f4821a3a79003a62f5fc29a2ae36fe5c gdb/testsuite/gdb.arch/mips16-thunks-sinmain.c -0eaba6d3748b943a0a2403b6ffd4a2fe gdb/testsuite/gdb.arch/amd64-pseudo.c -ba2085b2e0a148c9b344890bf5931168 gdb/testsuite/gdb.arch/arm-neon.c -4ac4b0dde8793a7a868bb6cb282d2865 gdb/testsuite/gdb.arch/i386-size.exp -d3d7e13636a6369d8cfc91bf6d236a4d gdb/testsuite/gdb.arch/powerpc-htm-regs.c -274887586436889384f098d94d352a86 gdb/testsuite/gdb.arch/powerpc-altivec3.s -0cf9c602eb250bccbc5a62787ee49915 gdb/testsuite/gdb.arch/s390-disassembler-options.exp -d33aa3d414f3e07b964105cc53ee500d gdb/testsuite/gdb.arch/arm-disassembler-options.exp -1686dd6ab5994fba8098d807fb6b2598 gdb/testsuite/gdb.arch/powerpc-prologue.c -4d2698039b12e0164647eb876c144e64 gdb/testsuite/gdb.arch/amd64-entry-value-param-dwarf5.c -5c027752c29c2524e07d0f243879c405 gdb/testsuite/gdb.arch/i386-sse.exp -12c6a6474c14e8a306146dd1aff39089 gdb/testsuite/gdb.arch/riscv-reg-aliases.exp -5ec5b68a5918a7e72ff695f5544c840a gdb/testsuite/gdb.arch/powerpc-d128-regs.c -daf81fa9e0593a2f811121f2b3270bf5 gdb/testsuite/gdb.arch/i386-bp_permanent.exp -961b5758580c17af88faca5208b08810 gdb/testsuite/gdb.arch/powerpc-power8.s -55d8f9e5c3e234c0132950e7156db20d gdb/testsuite/gdb.arch/amd64-stap-wrong-subexp.S -374de1815b0e21ea8086381ffdcd555c gdb/testsuite/gdb.arch/amd64-stap-special-operands.exp -65f0d26251b988c74cba3ca4ec8f05d0 gdb/testsuite/gdb.arch/mips16-thunks-sinfrob16.c -65a596e36eea56b8562b326956663e9e gdb/testsuite/gdb.arch/mips16-thunks-main.c -9d74d612cd0d87e5d3411e1a931f9d89 gdb/testsuite/gdb.arch/iwmmxt-regs.c -3d59210243b5b8811b386cdba894b522 gdb/testsuite/gdb.arch/vsx-regs.c -1c47c95d986602108d2e447704982c9f gdb/testsuite/gdb.arch/i386-signal.c -e9b63191d4ffc5830eb3419a2f6e232a gdb/testsuite/gdb.arch/amd64-optimout-repeat.S -19761bf86d1cf19f27a8044c2a15a025 gdb/testsuite/gdb.arch/i386-disp-step.S -bba9ab083159279780decfb9293ba1b8 gdb/testsuite/gdb.arch/insn-reloc.c -98a4763b7a4556933c38d08cab02a746 gdb/testsuite/gdb.arch/amd64-word.exp -39c81c52fdde85731c2c73a6fd79f029 gdb/testsuite/gdb.arch/arm-cmse-sgstubs.exp -711cd19dba50b9acbd5c7f7021ad0c9b gdb/testsuite/gdb.arch/gdb1431.s -a3f705887782b4fd2186966c0072c0f2 gdb/testsuite/gdb.arch/amd64-entry-value-param.S -aa3815e585607e4f89042431125d763b gdb/testsuite/gdb.arch/sparc-sysstep.c -1deeff5acef361f5e4013a2656fc612f gdb/testsuite/gdb.arch/powerpc-vsx2.exp -2a31c3e95fa3414aed1d1e10047c5ca4 gdb/testsuite/gdb.arch/arm-bl-branch-dest.c -a4c6302decdd34517f0ea904775529ef gdb/testsuite/gdb.arch/ppc64-atomic-inst.S -72ef6e2d3680e47d47464b35d293413e gdb/testsuite/gdb.arch/riscv-unwind-long-insn-8.s -b5223c3e3faafda24b68d66fe05168c6 gdb/testsuite/gdb.arch/i386-signal.exp -774b589255f802926376c0758845db06 gdb/testsuite/gdb.arch/amd64-tailcall-cxx.exp -b5cfc40295fec3c1b815c6ad79dc539a gdb/testsuite/gdb.arch/arc-tdesc-cpu.xml -11389013dfeba005022a1d910728c9d7 gdb/testsuite/gdb.arch/e500-abi.c -908aaf7a0dc852422b6eff13f2d5f92b gdb/testsuite/gdb.arch/powerpc-ppr-dscr.c -6d7f3aabcb5d50f850cad7830d57c195 gdb/testsuite/gdb.arch/amd64-invalid-stack-middle.c -6940817e4c5175072d2ae7798cef9797 gdb/testsuite/gdb.arch/thumb-prologue.exp -28babd40846fee114bc5a5a95dcee394 gdb/testsuite/gdb.arch/i386-avx.c -a7c895c49a09a68738331dd69f33fe93 gdb/testsuite/gdb.arch/mips16-thunks-sinmips16.c -bec019b4c3904dd995dd48257c613b09 gdb/testsuite/gdb.arch/amd64-init-x87-values.exp -174a9388fd13de789ab39b093828191a gdb/testsuite/gdb.arch/arm-disp-step.S -95994fefa473c3a5f1268727e851739f gdb/testsuite/gdb.arch/cordic.ko.bz2 -f89a863490be57d302e514780855ab63 gdb/testsuite/gdb.arch/aarch64-prologue.exp -55eade449ef917025c85e18ab062b7e1 gdb/testsuite/gdb.arch/amd64-entry-value-inline.exp -d10029f05304145b6519f7e98dd4a183 gdb/testsuite/gdb.arch/powerpc-power7.s -a961ca9ebf6057782276cd401498d82d gdb/testsuite/gdb.arch/powerpc-vsx.exp -c13e2050549b600e55388e3752edc280 gdb/testsuite/gdb.arch/aarch64-pauth.exp -4628e78622df2b949152595fc36d1e40 gdb/testsuite/gdb.arch/mips-disassembler-options.s -47f14df453e063547c4cf2a4963549e0 gdb/testsuite/gdb.arch/cordic.ko.debug.bz2 -a5eac615c008546a1b9e7f84fb124bd1 gdb/testsuite/gdb.arch/amd64-stap-triplet.S -0dadc52c4b8470024468c7057ee0d5fb gdb/testsuite/gdb.arch/powerpc-vector-regs.exp -3152eeb23e6699e9b7fcd59ddfc7edd4 gdb/testsuite/gdb.guile/guile.exp -59b898ba61dbac9ed285911a42e85157 gdb/testsuite/gdb.guile/scm-parameter.exp -806c61e75786b03d9b99a09a8b42b599 gdb/testsuite/gdb.guile/scm-frame-args.exp -1035d925bebdfe8d8858f301c8bad617 gdb/testsuite/gdb.guile/scm-ports.exp -d953a4b11b0ce1b2526aa4cf8f995437 gdb/testsuite/gdb.guile/scm-equal.exp -76b619f6d1a28e21b995535311f5dec0 gdb/testsuite/gdb.guile/scm-ports.c -446027bb04313b45bccb99597e843f84 gdb/testsuite/gdb.guile/scm-frame-inline.c -1914cfd9118ec882a12418deaf0d6c5c gdb/testsuite/gdb.guile/scm-lazy-string.exp -45548a81eb9290c1317a5d96867f3124 gdb/testsuite/gdb.guile/scm-cmd.c -f9e2ba99fa53bea038afd928f6fda524 gdb/testsuite/gdb.guile/scm-disasm.exp -8f4e367b65d55459749eb4a7536ca8b0 gdb/testsuite/gdb.guile/scm-pretty-print.exp -61a7a403f405c596e7c42eed2e9de5cf gdb/testsuite/gdb.guile/scm-frame.exp -3ca2fa44a2490dac0fbc7438e2e118f6 gdb/testsuite/gdb.guile/scm-objfile.exp -fc57e0fdde2f825de3e0c1f54eb95fd3 gdb/testsuite/gdb.guile/scm-symtab.exp -fa6dd7dd49bcd580552f8f5dabcacd87 gdb/testsuite/gdb.guile/source2.scm -01c49cace4f718b8bd36bf484c48be37 gdb/testsuite/gdb.guile/scm-gsmob.exp -7b7563719352e94eef895d0654ed1aab gdb/testsuite/gdb.guile/types-module.cc -f6249062890e9a009964947db6db1d87 gdb/testsuite/gdb.guile/scm-error-1.scm -3c1c5ed307bc1e8b4590bb047bee122f gdb/testsuite/gdb.guile/scm-frame-args.c -b807c642eb7e4c96e2d09403fbfc9e98 gdb/testsuite/gdb.guile/scm-lazy-string.c -b89f87a1be0d0f4e5540087c52127c02 gdb/testsuite/gdb.guile/scm-equal.c -51dd4e32a28e9de59d1d05445edc23d4 gdb/testsuite/gdb.guile/scm-error-2.scm -21538f2f2d055e6b40c148af185f1b1d gdb/testsuite/gdb.guile/scm-value-cc.exp -0f6d30bcf914471aa4d66d504ee7cc27 gdb/testsuite/gdb.guile/scm-progspace.exp -4f7008d67c3993bf741e237de0b00f9c gdb/testsuite/gdb.guile/types-module.exp -1d2debc6a5ae5f825b2d3369fc66c699 gdb/testsuite/gdb.guile/scm-breakpoint.exp -42fa591cfdc60ef573ddcbf1bd612ab1 gdb/testsuite/gdb.guile/scm-arch.exp -b27efb3a0f15ecc368a5d57b19d0d9b3 gdb/testsuite/gdb.guile/scm-math.exp -18a3a9b25d03008d88df41f623811884 gdb/testsuite/gdb.guile/scm-objfile-script-gdb.in -2b266035192679bbca92b0505d070c4c gdb/testsuite/gdb.guile/scm-symbol.exp -4711d670f3e18879defd98a83150d41f gdb/testsuite/gdb.guile/scm-objfile-script.c -21f541ddafa54c9fa7b646ac6f864a5e gdb/testsuite/gdb.guile/scm-frame-args.scm -2201fe232be56f834518596b4f09f9ce gdb/testsuite/gdb.guile/scm-frame.c -8a546bf8bad1b4b129f9b12acd6b59a1 gdb/testsuite/gdb.guile/scm-disasm.c -a39ca3a7cc069cc70abc4670ed7b3aca gdb/testsuite/gdb.guile/scm-symtab.c -95f74d1afb82b072d53289e0b259bd5d gdb/testsuite/gdb.guile/scm-block.c -35b0ce21e82e423b64d5b7239af604ba gdb/testsuite/gdb.guile/scm-block.exp -d1a52d8f9380eae090500b5499e6d9ac gdb/testsuite/gdb.guile/scm-iterator.exp -a1908043e9733e9df083025f09082079 gdb/testsuite/gdb.guile/scm-section-script.scm -0fe5a7ff62f045822dccb465b0e84130 gdb/testsuite/gdb.guile/scm-breakpoint.c -3c502708cfd35741d36f4657a647cd8f gdb/testsuite/gdb.guile/scm-value.c -fb4f2944d9221d2443a4a610289d6994 gdb/testsuite/gdb.guile/scm-objfile-script.exp -8a546bf8bad1b4b129f9b12acd6b59a1 gdb/testsuite/gdb.guile/scm-arch.c -691c0c03967cb623ae998d93755d2255 gdb/testsuite/gdb.guile/scm-math.c -8916bdb0c54425c27402ce27eb8d20a3 gdb/testsuite/gdb.guile/scm-pretty-print.c -363b709402d74093278fae1c08aa7dc0 gdb/testsuite/gdb.guile/scm-section-script.exp -55af3d34f078adf72d8d2954b7ae3ccc gdb/testsuite/gdb.guile/scm-type.c -10acb035efa8fa6b691dd2b9d0bbbaa3 gdb/testsuite/gdb.guile/scm-symbol.c -541e095dbb3bb72b85a98e34391c5f4e gdb/testsuite/gdb.guile/scm-iterator.c -33ebb83b097da5d51064e24ac6ea57a9 gdb/testsuite/gdb.guile/scm-frame-inline.exp -c516a62df1ad423ca1c8e1a7808a3748 gdb/testsuite/gdb.guile/scm-value.exp -28dd95da410c79d2cbb98d65e9bc00bc gdb/testsuite/gdb.guile/scm-pretty-print.scm -f88ad927b1cef2ea996bb12066e80097 gdb/testsuite/gdb.guile/scm-symtab-2.c -eff2cf2b48a667269b7a1f8dbe60525d gdb/testsuite/gdb.guile/scm-error.exp -7d816922ffab1ee93f479a69aa0185e6 gdb/testsuite/gdb.guile/scm-cmd.exp -ce3a4ca2fa329a2405aa1ea0b170bf61 gdb/testsuite/gdb.guile/scm-type.exp -01b629cdcf202eaac5f197756176e303 gdb/testsuite/gdb.guile/scm-progspace.c -437118924ed814c84b18b24affa0d64b gdb/testsuite/gdb.guile/scm-objfile.c -1b188ce93cd5c9379ec696b52a9da8b9 gdb/testsuite/gdb.guile/scm-section-script.c -4a4ef08e83e2e608b4349f79ca178a77 gdb/testsuite/gdb.guile/scm-value-cc.cc -404c78616334d532dfc6ce9de3314c70 gdb/testsuite/gdb.perf/solib.py -3e4b60acc49080a226159660753342de gdb/testsuite/gdb.perf/lib/perftest/__init__.py -587674cde9dc055ad2da68efde370140 gdb/testsuite/gdb.perf/lib/perftest/testresult.py -543b7964c0899a94a1df2280ff263bdc gdb/testsuite/gdb.perf/lib/perftest/measure.py -9dabda3b07e2b7c314f3135f4b0a3edb gdb/testsuite/gdb.perf/lib/perftest/perftest.py -2c5e8dfd83dbee5874994948516f686a gdb/testsuite/gdb.perf/lib/perftest/reporter.py -18b5eef36f97cb11ce5756aef2d70ccc gdb/testsuite/gdb.perf/lib/perftest/utils.py -2d68554a98cb9c9827e962dea51796f0 gdb/testsuite/gdb.perf/gmonster2-null-lookup.exp -548318073df360ddd65e3f3aca043773 gdb/testsuite/gdb.perf/disassemble.py -ff90bab67779057b6cd698a3dbc8c3c9 gdb/testsuite/gdb.perf/skip-command.py -9bc42e4695aeb9fa857a98c576018777 gdb/testsuite/gdb.perf/backtrace.exp -2bbfd7ebfe2459026d77688e57971e76 gdb/testsuite/gdb.perf/gmonster1-select-file.exp -c362e26878e4e34f5bb0ad54b002a7af gdb/testsuite/gdb.perf/gmonster2.cc -cdee5f69d5a49ada8d8a94a1723b9982 gdb/testsuite/gdb.perf/gmonster-null-lookup.py -05668edae135b961a1b111ee8fa5802a gdb/testsuite/gdb.perf/backtrace.c -7d0603ab286473dc47f0ad35e9bf27b7 gdb/testsuite/gdb.perf/disassemble.exp -aa7a62e7e5b135bb2c2fd173fa050944 gdb/testsuite/gdb.perf/gmonster1.exp -eac04344698bf8faee1ec359fcfb4557 gdb/testsuite/gdb.perf/skip-prologue.exp -2d9b03061bb4f9bcfbfb00d72ce13f0f gdb/testsuite/gdb.perf/gmonster2-pervasive-typedef.exp -d9755b436704a37c6c3b77e6842bf957 gdb/testsuite/gdb.perf/single-step.py -ee9d4e88d71149e4f2a1f942cd51530f gdb/testsuite/gdb.perf/gmonster1-ptype-string.exp -a4e7e77fdb7f05cd46a703cca5fd8fe3 gdb/testsuite/gdb.perf/gmonster1-null-lookup.exp -019b313a3c5d58ec8ed1039277014eb7 gdb/testsuite/gdb.perf/template-breakpoints.py -e1a593ef8dbc8961781271450e852937 gdb/testsuite/gdb.perf/gm-std.cc -4514e4c726d5a5dfb86420a065b9359e gdb/testsuite/gdb.perf/single-step.exp -c362e26878e4e34f5bb0ad54b002a7af gdb/testsuite/gdb.perf/gmonster1.cc -c04aca2a8dfe244781ca07229eb22250 gdb/testsuite/gdb.perf/gmonster2-select-file.exp -30d7630adb8a6f91235489635abb75c8 gdb/testsuite/gdb.perf/template-breakpoints.cc -71a8192feaa4d20fc5d2e22517d34096 gdb/testsuite/gdb.perf/skip-prologue.c -004468de8907a580c0ee59525be75588 gdb/testsuite/gdb.perf/gm-pervasive-typedef.h -c22a6b5581635909c1bf3fbf0fd2429c gdb/testsuite/gdb.perf/skip-command.exp -869c3ff8008427f40cf720ce16db7743 gdb/testsuite/gdb.perf/gmonster1-pervasive-typedef.exp -d711b2999a0c556899030be955d9f2c5 gdb/testsuite/gdb.perf/solib.exp -a4c6ce3feb8c33073974bfc82898f0a2 gdb/testsuite/gdb.perf/single-step.c -76511e8c876e89e4cf8d67560f2f6555 gdb/testsuite/gdb.perf/gmonster2-ptype-string.exp -a189c830965a1ee3df6fc8a2adf40500 gdb/testsuite/gdb.perf/gm-pervasive-typedef.cc -c3b5e2809db42302ae17788737aaa833 gdb/testsuite/gdb.perf/gmonster-ptype-string.py -a717e648ae45d3c31d2693aa1ba500eb gdb/testsuite/gdb.perf/skip-prologue.py -c6d1d6ad7f63b697389271c50f7da056 gdb/testsuite/gdb.perf/gmonster-select-file.py -bf3c4eefaaf9a8f5412a06199c2680ba gdb/testsuite/gdb.perf/template-breakpoints.exp -6982282d3c30bb5fb9c970d2a98d5788 gdb/testsuite/gdb.perf/gmonster2-print-cerr.exp -66720c9f5cadacb2ca68020497cab5f3 gdb/testsuite/gdb.perf/gm-std.h -c55e70ef3ea971819cc49547dea2028a gdb/testsuite/gdb.perf/backtrace.py +c88671d4c7f2d696a7af54340989fec3 gdb/testsuite/gdb.perf/disassemble.exp +9a49a2844631747d841200c832eb4e36 gdb/testsuite/gdb.perf/skip-command.cc +d8b8148b80e96b92df0023815190dc04 gdb/testsuite/gdb.perf/gmonster2.exp +a6043a97360626e57fe1ae6b581a28d4 gdb/testsuite/gdb.perf/gmonster-select-file.py +7564035944c36b8020fcd091721f3f48 gdb/testsuite/gdb.perf/gm-std.cc +ba48766a0e5a9418b34f8c98a2ff36a6 gdb/testsuite/gdb.perf/gmonster1.exp +2b5563bb300002041c24a2c302e7d70d gdb/testsuite/gdb.perf/gmonster2-select-file.exp +3ffa9d97c30ffa6edc9fd06c250f1601 gdb/testsuite/gdb.perf/solib.exp +32019701bc7592452db823af9e859348 gdb/testsuite/gdb.perf/gmonster2-runto-main.exp +dbbe35817db41bc9f1b991b0e67c1212 gdb/testsuite/gdb.perf/gm-pervasive-typedef.cc +7b1fdba57309cbf3eb1864d876ba32c6 gdb/testsuite/gdb.perf/solib.c +c3b1b0fc3c9d3f0705061c2742c3a0c8 gdb/testsuite/gdb.perf/gmonster-null-lookup.py +58c70938a1bb235f4434a1e08593dfc2 gdb/testsuite/gdb.perf/single-step.exp +0a5b445f31c80e3aad6596c41af24b39 gdb/testsuite/gdb.perf/gmonster1-print-cerr.exp +352e794647a25f663638a9e80e60a185 gdb/testsuite/gdb.perf/backtrace.exp +fc582f4f29b3c8c1da6da1cc7be75e13 gdb/testsuite/gdb.perf/template-breakpoints.py +9d1f846c75a99d4ec31dcf1b08325490 gdb/testsuite/gdb.perf/backtrace.py +b364053d6c64aa25ff5d3c3d8c2c507c gdb/testsuite/gdb.perf/gm-pervasive-typedef.h +f487af7a014d7338bdb92e07ef05695c gdb/testsuite/gdb.perf/template-breakpoints.exp +24a01fe44d82846553177e7d88b64ecd gdb/testsuite/gdb.perf/disassemble.py +c0061dcef334d15043e186ac4165da24 gdb/testsuite/gdb.perf/gmonster1-select-file.exp +fd3f03c4b4e619e1e8ed68f3c64dd999 gdb/testsuite/gdb.perf/gmonster1-null-lookup.exp +f5989533cb54f14e7a15aba42269c5dc gdb/testsuite/gdb.perf/gm-hello.cc +35a5b8285f0603eed93e18a6b7c1d494 gdb/testsuite/gdb.perf/gmonster1.cc +0cb8b92f827bb8fa2b39ba625a1f0d40 gdb/testsuite/gdb.perf/gmonster1-pervasive-typedef.exp +85697b0b791a94b48d639115144bc219 gdb/testsuite/gdb.perf/gmonster-runto-main.py +66abd6c53bd7a3a6901ab2f13521c81f gdb/testsuite/gdb.perf/gmonster2-ptype-string.exp +1c3ba29694f5212190443ead785480f7 gdb/testsuite/gdb.perf/gmonster2-null-lookup.exp +d7aa5ec5a90d4cdc5bc1e739e67e8007 gdb/testsuite/gdb.perf/solib.py +e8b5bd6de1ad7464f1d9ed8ef3498940 gdb/testsuite/gdb.perf/gm-std.h +a100cdeef08b3e7c67c57313008ed4ab gdb/testsuite/gdb.perf/skip-prologue.py +2648b5818a9644a7fd14558126ca855e gdb/testsuite/gdb.perf/single-step.c +c9470ba17d60ecf8c166755b5b92cf5d gdb/testsuite/gdb.perf/gm-utils.h +35a5b8285f0603eed93e18a6b7c1d494 gdb/testsuite/gdb.perf/gmonster2.cc +db3032bf4258eae80e0a6021562afb1c gdb/testsuite/gdb.perf/template-breakpoints.cc +b436a50c8b89a89cfe5a23871314a1e1 gdb/testsuite/gdb.perf/skip-prologue.c +3023e76876995161ed967d6b0aff1e5d gdb/testsuite/gdb.perf/backtrace.c +27713fa610ff15911ec0a0f312251400 gdb/testsuite/gdb.perf/gmonster-ptype-string.py +05d4998345f2dbab97b9e65257a07c45 gdb/testsuite/gdb.perf/skip-prologue.exp +2bcfe9929d7e7201955edd5764423edb gdb/testsuite/gdb.perf/skip-command.exp +febcd8956749a971ab3a5369179ba1ca gdb/testsuite/gdb.perf/single-step.py +a8ebb0a6bb7d042d327c735fa1ba6cc6 gdb/testsuite/gdb.perf/gmonster1-runto-main.exp +8f50be6b47ce9697e48a1b19fb982753 gdb/testsuite/gdb.perf/gmonster2-pervasive-typedef.exp +d3535033fdbdf475a037cf8bebdcad9f gdb/testsuite/gdb.perf/gmonster-pervasive-typedef.py +2cffc09314214623fd7cfab52b983365 gdb/testsuite/gdb.perf/gmonster-print-cerr.py +5ce6e24ee7d9e7344b2c911e51552322 gdb/testsuite/gdb.perf/gmonster1-ptype-string.exp 722d1c525da87cc21e2d3adfc3dc8c1b gdb/testsuite/gdb.perf/README -5619550f0185a0e7c615b20e41996479 gdb/testsuite/gdb.perf/solib.c -f784a59eafff81a16387b54c6f6c4a83 gdb/testsuite/gdb.perf/gm-hello.cc -62bdd183a7678d846018de35d31df5f2 gdb/testsuite/gdb.perf/gmonster2-runto-main.exp -d4873557251f816a68c38c6395ca66ae gdb/testsuite/gdb.perf/gmonster-pervasive-typedef.py -8fbeb7d0825a4db05544a97392dfed5c gdb/testsuite/gdb.perf/gmonster1-print-cerr.exp -e986922652bdf0406f0b06b139a1e803 gdb/testsuite/gdb.perf/gmonster1-runto-main.exp -e3cca00a1bf06108a4aeef2042a799a0 gdb/testsuite/gdb.perf/gmonster-runto-main.py -3f87057227138c1eb5c12b271b29bdcb gdb/testsuite/gdb.perf/gmonster2.exp -3bb426b65f52fe195f72b55fb5aba968 gdb/testsuite/gdb.perf/gm-use-cerr.cc -5b8a2bdd9d7fa717f720e3f91b240500 gdb/testsuite/gdb.perf/skip-command.cc -d2b116b7add50de27a6d3cdbf10d3f6d gdb/testsuite/gdb.perf/gmonster-print-cerr.py -072ae2365a962379654dada4c3f3c136 gdb/testsuite/gdb.perf/gm-utils.h -9efd7fc4502444e6a5d44cade3370580 gdb/testsuite/gdb.server/extended-remote-restart.exp -d008fa94e33de4d410f9a42349774927 gdb/testsuite/gdb.server/solib-list.exp -b84f54ca38e2bf4cacf050be8f95642f gdb/testsuite/gdb.server/ext-attach.c -0d3af897aa6a8a33327b744d99af2e87 gdb/testsuite/gdb.server/sysroot.exp -814686b6c9f29471f04e4e07a3a3440e gdb/testsuite/gdb.server/solib-list-lib.c -7b5760f552af5fba1ec554760e60f8ee gdb/testsuite/gdb.server/connect-stopped-target.exp -cba39477e871f4109d4c9814492ba689 gdb/testsuite/gdb.server/ext-attach.exp -3110ed29d8a654d7a0d624bb0af71fab gdb/testsuite/gdb.server/non-existing-program.exp -84531a1d1e0fca9ba156e207f484ca58 gdb/testsuite/gdb.server/server-connect.exp -bb7bb1fbed94473fa10c8564fa9eaece gdb/testsuite/gdb.server/stop-reply-no-thread.c -44c35161f4ae23a853628c0d50e7606d gdb/testsuite/gdb.server/ext-run.exp -9a0264862c56ec3a22977879e72a7a05 gdb/testsuite/gdb.server/server-kill.c -303e8fbf7b96c47a9d4252bbffffc679 gdb/testsuite/gdb.server/connect-with-no-symbol-file.exp -04fbe15209422bca9ea44e6aa4764036 gdb/testsuite/gdb.server/sysroot.c -5c1d45a39b83f0980f2a453d92837322 gdb/testsuite/gdb.server/no-thread-db.exp -54ae878317134f1eb75dd5c10004c022 gdb/testsuite/gdb.server/run-without-local-binary.exp -85b3de7c804b54f00f0e2acfd9e3028a gdb/testsuite/gdb.server/ext-restart.exp -f3e9570c33cb5ae776932131eb6a7941 gdb/testsuite/gdb.server/extended-remote-restart.c -91670745329c0cda9d5e2a674f138e3f gdb/testsuite/gdb.server/stop-reply-no-thread.exp -afbef066281a92824dc9865fb9090a6e gdb/testsuite/gdb.server/reconnect-ctrl-c.c -2690735f5078e285d32e923260b65bd4 gdb/testsuite/gdb.server/file-transfer.exp -ebe4da008676b56e4467e51e6bd9a4d0 gdb/testsuite/gdb.server/server-mon.exp -d30fb2375d9f5e9cb6766ba3e80972b9 gdb/testsuite/gdb.server/connect-with-no-symbol-file.c -ebf22344165358b927d93857a1dd7f50 gdb/testsuite/gdb.server/connect-without-multi-process.exp -2aacfe7ae5169178c578d25da1e0c1a8 gdb/testsuite/gdb.server/server.c -b83c8391da68f1e641f679bf1eed5690 gdb/testsuite/gdb.server/transfer.txt -c2c91c4bdf7e9e6b218f8debc532d957 gdb/testsuite/gdb.server/solib-list-main.c -cfbd33d5b6d0d44c40d31b59e393790c gdb/testsuite/gdb.server/server-kill.exp -9edfd9e6af5dedbd53a21117eb3e1473 gdb/testsuite/gdb.server/reconnect-ctrl-c.exp -bae320e2d7c79bd6a8a7896ba336e9fb gdb/testsuite/gdb.server/wrapper.exp -ea9b9cd6e472f83590302fe1f3b09209 gdb/testsuite/gdb.server/no-thread-db.c -f7977ec86492809873f6402e657451f8 gdb/testsuite/gdb.server/server-exec-info.exp -84b43c49c5e5965208a2979746a081a2 gdb/testsuite/gdb.server/unittest.exp -d52a38888b6f4cc6e265ccc773fab984 gdb/testsuite/gdb.server/connect-stopped-target.c -3edb46a87a3a170229b25a7296c8039b gdb/testsuite/gdb.server/normal.c -1aea91012e442d198a2ae515caec0e86 gdb/testsuite/gdb.server/abspath.exp -2cd41658d01321f4891380ebb3448088 gdb/testsuite/gdb.server/wrapper.c -a383cb90bae74a36518d2c88f4f4037c gdb/testsuite/gdb.server/ext-wrapper.exp -d52a38888b6f4cc6e265ccc773fab984 gdb/testsuite/gdb.server/connect-without-multi-process.c -51f3fe2b8b69970a771b0e194ce39473 gdb/testsuite/gdb.server/server-run.exp -58a2dce0eb2f9d3caeb333d3edbaf002 gdb/testsuite/gdb.opencl/operators.cl -512e2a0df904285d4969e403073b1cd1 gdb/testsuite/gdb.opencl/callfuncs.exp -8d9badf0537ac9b7763afda003006fcf gdb/testsuite/gdb.opencl/convs_casts.exp -04e3038309d71ab9555f5fffa45ef32a gdb/testsuite/gdb.opencl/vec_comps.exp -7e18a525d8cdb1f91dd058e83dc9297a gdb/testsuite/gdb.opencl/datatypes.cl -9ef3c58eb44c2a329ea5953bf88367d8 gdb/testsuite/gdb.opencl/datatypes.exp -4be90620184970c1521e8adaee1243a7 gdb/testsuite/gdb.opencl/convs_casts.cl -a9b548b9897015caeeba45ce112f2c10 gdb/testsuite/gdb.opencl/vec_comps.cl -28daa048f9c1d25dd432c9cdbb4f2392 gdb/testsuite/gdb.opencl/operators.exp -6ef4f696e8adaf4294f722ae880a20bc gdb/testsuite/gdb.opencl/callfuncs.cl -8a1ab1d5e6f933c9e702d62e8819d75d gdb/testsuite/gdb.pascal/case-insensitive-symbols.pas -510d021ad8cd69f1124f469bf391db23 gdb/testsuite/gdb.pascal/gdb11492.exp -5eeae1b4b384d5dfb4bc567ade14d9c7 gdb/testsuite/gdb.pascal/floats.exp -ddacb53e38d8bba4e12113f7d4221697 gdb/testsuite/gdb.pascal/case-insensitive-symbols.exp -d00fbdebf2a95625e704d89190def96a gdb/testsuite/gdb.pascal/stub-method.pas -2d915da8d7226313b1b747fb2c9486cd gdb/testsuite/gdb.pascal/types.exp -e6f9ffb684cb93bed8beb4ac461b64f8 gdb/testsuite/gdb.pascal/integers.pas -5255d9aef25f310027e2bc9ce273e866 gdb/testsuite/gdb.pascal/print.exp -6ec16804ee5f8e97caaf74dbdd1b7a14 gdb/testsuite/gdb.pascal/gdb11492.pas -56927b4e8e2565d7b9abfff075552a3b gdb/testsuite/gdb.pascal/hello.exp -fd894a76daa469717149b5a10e2f8ff4 gdb/testsuite/gdb.pascal/floats.pas -a78803c6459af2655b33d9813b9dc3cd gdb/testsuite/gdb.pascal/stub-method.exp -19990cb5b198325b185af673b5ee5b4f gdb/testsuite/gdb.pascal/hello.pas -b36b30287249785466c58e1399b351b4 gdb/testsuite/gdb.pascal/integers.exp -4ae7cdc17af9ee306425135348068338 gdb/testsuite/gdb.modula2/max-depth.c -b94bd76f24d9c85076140d743b6a4474 gdb/testsuite/gdb.modula2/max-depth.exp -629cbf090cdd3edf4cd98f7a65bdea2f gdb/testsuite/gdb.modula2/unbounded1.c -a565a80c1025c7123bde56d04d7fd5e7 gdb/testsuite/gdb.modula2/unbounded-array.exp -85531674cf8d4ebe4963d497f904ba2c gdb/testsuite/gdb.reverse/i387-stack-reverse.exp -25703fa1c9197cec45e0caf8e5db09ec gdb/testsuite/gdb.reverse/time-reverse.c -65a9673a216931db9637cd3c10cd850f gdb/testsuite/gdb.reverse/finish-reverse.c -19e0886e1c07cc60df26765a0bf254b2 gdb/testsuite/gdb.reverse/fstatat-reverse.exp -61a017f4562eeb37b858e2f8f75178ec gdb/testsuite/gdb.reverse/i387-env-reverse.exp -d5660f2500d33ae2e1f56645819244ec gdb/testsuite/gdb.reverse/rerun-prec.c -70ba0f136f8c99f01bc6155352e1fe8f gdb/testsuite/gdb.reverse/until-reverse.exp -7ea013dce77d63bf4e846280babc2343 gdb/testsuite/gdb.reverse/getresuid-reverse.c -816520bb945283da204e926dc0f5855b gdb/testsuite/gdb.reverse/until-precsave.exp -a50efa45d28d10d58e2d3ccbf36effdf gdb/testsuite/gdb.reverse/time-reverse.exp -a6f6dcb919f1331dde7f581a8b716197 gdb/testsuite/gdb.reverse/insn-reverse.c -56f25268ca1c205406b02343d00b4315 gdb/testsuite/gdb.reverse/ms1.c -b499b4a81852191cbc3228cfb5ade09c gdb/testsuite/gdb.reverse/singlejmp-reverse.exp -9dff6a94a88d140a0801145ee72344ff gdb/testsuite/gdb.reverse/machinestate.c -9e1cfe52f1723dab829fa46ea60a6863 gdb/testsuite/gdb.reverse/sigall-precsave.exp -28a9695964eea60dd8d7798d406bfb74 gdb/testsuite/gdb.reverse/machinestate.exp -977d9ce8be69a5102147e66831cecb95 gdb/testsuite/gdb.reverse/singlejmp-reverse-nodebug.S -52d9a2fb244f956093080bad9b4fc3a3 gdb/testsuite/gdb.reverse/consecutive-reverse.c -d9698d4017b8f6fe677ae5ef78ce36da gdb/testsuite/gdb.reverse/watch-precsave.exp -126c06ed6a9becfd39f42f7ed6362e70 gdb/testsuite/gdb.reverse/i386-sse-reverse.exp -29a11bea77b26312efd51647ea21a787 gdb/testsuite/gdb.reverse/ur1.c -29691278101c8c14cd239e7271891ee1 gdb/testsuite/gdb.reverse/amd64-tailcall-reverse.exp -4a6448062ce7e247d686e65337c32efb gdb/testsuite/gdb.reverse/next-reverse-bkpt-over-sr.exp -1a4ae9ed1ad9d382fa7f9708cb1a6d23 gdb/testsuite/gdb.reverse/watch-reverse.exp -4106b64e02cfada0f4f92ad4dcd39a73 gdb/testsuite/gdb.reverse/sigall-reverse.c -4530b989b3a9e6002546aa1e5b7441aa gdb/testsuite/gdb.reverse/solib-precsave.exp -475ab9143fd7ad781d5745e579febd19 gdb/testsuite/gdb.reverse/step-reverse.c -9cfcda94f32fface2126576df7553f01 gdb/testsuite/gdb.reverse/until-reverse.c -8cc87c3f603199d7e6527e241e284709 gdb/testsuite/gdb.reverse/insn-reverse-x86.c -3324e2bb106a9b9279ac3127170de20b gdb/testsuite/gdb.reverse/i387-env-reverse.c -d3f5de2ed5cb67d98a5eda875df39d4a gdb/testsuite/gdb.reverse/readv-reverse.exp -fab00960c47de9459fd6a5c3b699944a gdb/testsuite/gdb.reverse/pipe-reverse.exp -cf77d12cc553f87c1d979001cb02fa7e gdb/testsuite/gdb.reverse/readv-reverse.c -238606669074b8b0ca365b00325ef01f gdb/testsuite/gdb.reverse/step-reverse.exp -a65bded8a245d7396df178620fc5fd0e gdb/testsuite/gdb.reverse/break-precsave.exp -6c81df15f8a6c344ade8ef3b65b3af11 gdb/testsuite/gdb.reverse/recvmsg-reverse.exp -9647d0ec75ba3101c84872d255093b9d gdb/testsuite/gdb.reverse/fstatat-reverse.c -37439bbfb52dba586fa446dab1e703c2 gdb/testsuite/gdb.reverse/i386-reverse.exp -947a1bce1f4b0fe30ccb663c5dd6b86d gdb/testsuite/gdb.reverse/break-reverse.exp -af5a79b85ec52fde2d3f35f469151fac gdb/testsuite/gdb.reverse/shr1.c -7fb2636c45c4a72fb2c11056ba9afa36 gdb/testsuite/gdb.reverse/consecutive-precsave.exp -cf25c73525d62b30aa4731537fe15984 gdb/testsuite/gdb.reverse/finish-reverse.exp -84eddd3fbcd85db0b42e7bfed0044675 gdb/testsuite/gdb.reverse/waitpid-reverse.exp -ee8b8d5e8204c061f72fbaebfaddf906 gdb/testsuite/gdb.reverse/amd64-tailcall-reverse.c -83c04343be99555db9021380359ef6ca gdb/testsuite/gdb.reverse/break-reverse.c -467160b6213fc03773674ec7410941df gdb/testsuite/gdb.reverse/singlejmp-reverse.c -03fc27b23807f3cddc20ea450c01903c gdb/testsuite/gdb.reverse/recvmsg-reverse.c -426fd1a9ffd557b783a5f2b76acf53f3 gdb/testsuite/gdb.reverse/singlejmp-reverse.S -2f03af3d07c05ad87b9763ec8e3d8c9a gdb/testsuite/gdb.reverse/solib-reverse.c -6e02bc47a9a4fefaaca88a34af93ee26 gdb/testsuite/gdb.reverse/shr2.c -3add960edde015d456923d1268ae9433 gdb/testsuite/gdb.reverse/solib-reverse.exp -400af3af36b4edf6352e6e04aba3d7d5 gdb/testsuite/gdb.reverse/s390-mvcle.c -110c0d656a7606b3ca058bf634532246 gdb/testsuite/gdb.reverse/waitpid-reverse.c -3d2b33be8aa17d75c122d9677ea49d5b gdb/testsuite/gdb.reverse/pipe-reverse.c -0d84d84d24b02a5578984edf18057aca gdb/testsuite/gdb.reverse/i386-reverse.c -bc9c0100b72f5b7a91b6e71e50bd33f8 gdb/testsuite/gdb.reverse/step-indirect-call-thunk.exp -58283b3c9d74b4b964f0c4ec5a2f1bfb gdb/testsuite/gdb.reverse/watch-reverse.c -fd7879df9c41b172f4354255e383f6c0 gdb/testsuite/gdb.reverse/rerun-prec.exp -1ba522c0557596eef468a9532968c153 gdb/testsuite/gdb.reverse/machinestate-precsave.exp -fae718e3f2ed98433a0bda989ec788e7 gdb/testsuite/gdb.reverse/shr.h -a1751647c1af460fac67ec6ca224771a gdb/testsuite/gdb.reverse/finish-precsave.exp -1de94c33d1ed3f5ecf92a1d6f0b8f9e4 gdb/testsuite/gdb.reverse/s390-mvcle.exp -9af565195e3e37d660f0bd7b841c95bc gdb/testsuite/gdb.reverse/i387-stack-reverse.c -c3f1477e86215f5c7260d8771f3ca55a gdb/testsuite/gdb.reverse/consecutive-reverse.exp -eefefb40e0e040ced900e312863c038b gdb/testsuite/gdb.reverse/i386-sse-reverse.c -876ff6ff91272f5325862d0652bae5c3 gdb/testsuite/gdb.reverse/insn-reverse.exp -e876486f68fe041a0cc3ea1410101d44 gdb/testsuite/gdb.reverse/amd64-tailcall-reverse.S -8f53934090421029f13539968d70ef3d gdb/testsuite/gdb.reverse/insn-reverse-arm.c -eb8db7cf62ccdd83c84877ca42d07391 gdb/testsuite/gdb.reverse/singlejmp-reverse-nodebug.c -d323d73a243b01b69d5cdc1e45fcc2a6 gdb/testsuite/gdb.reverse/insn-reverse-aarch64.c -f71050bf8d9506cd7185450bcf00ec01 gdb/testsuite/gdb.reverse/step-precsave.exp -d9fac2beaa9a243914bb30eac72f137a gdb/testsuite/gdb.reverse/sigall-reverse.exp -5495b9ec8b6582dffe28a0d74e5fafcb gdb/testsuite/gdb.reverse/finish-reverse-bkpt.exp -79530722bf24c7e238494c2e102543ad gdb/testsuite/gdb.reverse/i386-precsave.exp -a7c9f08d8a69b0943263f246a8e3ac29 gdb/testsuite/gdb.reverse/getresuid-reverse.exp -5e44dba3d2643e7c82c01a0ddce8985f gdb/testsuite/gdb.reverse/step-indirect-call-thunk.c -5505ebca629e96bc838fab4c7d132135 gdb/testsuite/gdb.threads/continue-pending-status.exp -0022fa99bf4b5ead85aa8b92e822f23a gdb/testsuite/gdb.threads/killed.exp -0f4b76347e9ac2d21297dce1509a39dc gdb/testsuite/gdb.threads/thread_check.exp -aeec7c0fc9eef97f6d93b9f1c9524c2d gdb/testsuite/gdb.threads/non-stop-fair-events.c -12ece61ea8b4c2dc380def74bcecb2f4 gdb/testsuite/gdb.threads/watchpoint-fork-st.c -6b3f233587e3706ff8f868e81fe13c23 gdb/testsuite/gdb.threads/attach-into-signal.c -73400545aa71d2b2cae6c630cc4e9c1d gdb/testsuite/gdb.threads/schedlock.exp -a6e7efcbd6562b1ace5b98b793aeb84b gdb/testsuite/gdb.threads/vfork-follow-child-exec.exp -0d2c98131d37fb7450d9a691ae310624 gdb/testsuite/gdb.threads/vfork-follow-child-exit.c -6f8cf5faf5a9097c4d149b862fbf5a10 gdb/testsuite/gdb.threads/queue-signal.exp -18b8c99107beaaea36b0aeaeed6e9b8e gdb/testsuite/gdb.threads/tls-nodebug.exp -0a03e37d63df358f482e20e581201d96 gdb/testsuite/gdb.threads/step-bg-decr-pc-switch-thread.c -f0a599bae9d864d8a240634738f8b966 gdb/testsuite/gdb.threads/tls-core.exp -ec6ddbd89b116331b5fe4027620944ff gdb/testsuite/gdb.threads/threadapply.exp -317c679c29e53d67ba196ed23eebe122 gdb/testsuite/gdb.threads/clone-thread_db.exp -a2eeacbfe988a913bdbb747c1a0877d9 gdb/testsuite/gdb.threads/attach-stopped.c -0b0761fb016e8bcdfefea3dcb870c6a4 gdb/testsuite/gdb.threads/sigthread.c -aa8ff09400647181852d4d926e6aa750 gdb/testsuite/gdb.threads/signal-sigtrap.c -a67106a694abd40da12cf4fddea6d2d4 gdb/testsuite/gdb.threads/sigstep-threads.exp -dfdb792c0d08e654d2bea9f1925b1741 gdb/testsuite/gdb.threads/step-over-trips-on-watchpoint.exp -7712196558e6f54aa5bc18e7739f97ce gdb/testsuite/gdb.threads/kill.c -2f92de1c4c016f78c45140520ff95a1a gdb/testsuite/gdb.threads/watchpoint-fork.exp -c665fe6c365ccb1e852ff19051310e58 gdb/testsuite/gdb.threads/thread_check.c -68887c2310160572bc40c847f58d553b gdb/testsuite/gdb.threads/hand-call-in-threads.c -75afefd504e5914e5d1ea42c061cac09 gdb/testsuite/gdb.threads/linux-dp.c -12ca09168cf475301fd75c6b1eb11a6a gdb/testsuite/gdb.threads/attach-into-signal.exp -7393da7e84e686466408135d087cc68b gdb/testsuite/gdb.threads/watchthreads.exp -a918e5be07dc2f9295aac731172de3f0 gdb/testsuite/gdb.threads/thread-specific-bp.exp -2dc32c5cb640398a020f62fe74d856de gdb/testsuite/gdb.threads/tls-core.c -1d38a45c55afea498500a5303f4325f3 gdb/testsuite/gdb.threads/tls-so_extern.exp -31cd6242ce381b78cbe8f02a1086747c gdb/testsuite/gdb.threads/interrupted-hand-call.exp -b1ac3891e8f72cb26e532c4719e813c8 gdb/testsuite/gdb.threads/dlopen-libpthread.c -d8de136923c925f3118cdaf865a0464c gdb/testsuite/gdb.threads/thread-specific.exp -1fa9ef8d65504eb8f8a351a185f738ed gdb/testsuite/gdb.threads/switch-threads.c -42a9b52bbd57ce3502e293b9f02d3306 gdb/testsuite/gdb.threads/sigthread.exp -3ec7265e440c369ab6431245bf7eba0d gdb/testsuite/gdb.threads/fork-plus-threads.c -8d44459b6d3925cb5c21416c59d0189a gdb/testsuite/gdb.threads/siginfo-threads.exp -ff3406be8bfaf6273336fa029b6309fb gdb/testsuite/gdb.threads/dlopen-libpthread-lib.c -4557097e3c59b2e5518ddd414f7ca081 gdb/testsuite/gdb.threads/interrupt-while-step-over.exp -e143aa2b4a43082ce5331b1822e4be41 gdb/testsuite/gdb.threads/staticthreads.c -27c041cfba56f9c6964ab67dd22142c1 gdb/testsuite/gdb.threads/bp_in_thread.c -46c61a02c600ee031a8afd5d21168b54 gdb/testsuite/gdb.threads/non-ldr-exc-2.c -569d3f60dd3b2090f62d5b37274907b9 gdb/testsuite/gdb.threads/local-watch-wrong-thread.exp -26560f60ac0799c497cbca4c9c21db41 gdb/testsuite/gdb.threads/queue-signal.c -0be64abe14c64c10580cd2443bde6550 gdb/testsuite/gdb.threads/multiple-step-overs.c -4d9f75d0c0b5dbabcf8a72382ef90dfa gdb/testsuite/gdb.threads/manythreads.c -f2d9590be977adf16e235dfb3fca20d2 gdb/testsuite/gdb.threads/process-dies-while-detaching.c -f1a48ac8ee958c86bd08ca91c7d6462e gdb/testsuite/gdb.threads/leader-exit.c -e07f94e00513a4b222ad81e60242371b gdb/testsuite/gdb.threads/vfork-follow-child-exit.exp -d0fe1fc21ba32c4cbb5cec0761a2cc8f gdb/testsuite/gdb.threads/thread-find.exp -df82452f754ef15a81d71f46a0892757 gdb/testsuite/gdb.threads/print-threads.c -e8f51831ce9e1046294c190b8f96b901 gdb/testsuite/gdb.threads/non-ldr-exit.c -74f5f8e5932540b7f9988466c071ab44 gdb/testsuite/gdb.threads/signal-delivered-right-thread.exp -9eaba0dd2266d7d35941eb49845e6072 gdb/testsuite/gdb.threads/tls.c -693bb991091806fc52c609976ec9a751 gdb/testsuite/gdb.threads/step-over-trips-on-watchpoint.c -383e4cd6c04aa8e94e2178c5786907e2 gdb/testsuite/gdb.threads/switch-threads.exp -b9eb55aeb8716a874354e19114a54413 gdb/testsuite/gdb.threads/gcore-stale-thread.exp -7aca25766075bbcb1b7d1c6956c46eab gdb/testsuite/gdb.threads/threxit-hop-specific.c -d41727108f9c2a9af20531cfd158989c gdb/testsuite/gdb.threads/multiple-successive-infcall.exp -5b859ee1662f1258614391d6f859a6c0 gdb/testsuite/gdb.threads/create-fail.exp -4d0418f227c01e507fd3d8c05df88dd9 gdb/testsuite/gdb.threads/clone-attach-detach.c -34f006d42a6da96eaef46c0b3db0616f gdb/testsuite/gdb.threads/watchpoint-fork-parent.c -32021ae7495b356c0ab493ca46e5b36b gdb/testsuite/gdb.threads/thread-specific-bp.c -0a5a22f041ba579a37e10e6447b98501 gdb/testsuite/gdb.threads/non-ldr-exc-2.exp -8aafd297db09af027acaf5f6a22d08cf gdb/testsuite/gdb.threads/non-ldr-exc-4.exp -3c7e6ff818f462777ef88e4b52bc01f2 gdb/testsuite/gdb.threads/manythreads.exp -416fb8797415515ed65827b6aa29dbd4 gdb/testsuite/gdb.threads/gcore-thread.exp -522a165174ae0ed89ee4ab43d544aee4 gdb/testsuite/gdb.threads/pending-step.exp -417c38289da0fd0d5313d0983e8cae5a gdb/testsuite/gdb.threads/break-while-running.exp -7a1842fa894d9c72a1b5d01909319d77 gdb/testsuite/gdb.threads/fork-thread-pending.c -0250e6bbd5084b5381ec4705dab26b9e gdb/testsuite/gdb.threads/signal-command-handle-nopass.c -84c360a8018a1ce20f2cf867f507844d gdb/testsuite/gdb.threads/next-while-other-thread-longjmps.c -cf83f20cc5b512a8205d7d3a1fbc8892 gdb/testsuite/gdb.threads/dlopen-libpthread.exp -8df21a0d59e72fcb8f922c38538a36ae gdb/testsuite/gdb.threads/clone-new-thread-event.exp -391c13fde6077421d125bc6e7288d3d1 gdb/testsuite/gdb.threads/stepi-random-signal.c -a4cf1755ad6c2198d21ccecbfdef8897 gdb/testsuite/gdb.threads/watchpoint-fork-mt.c -b481c31e13be123b7a75bb904c94e53f gdb/testsuite/gdb.threads/tls-so_extern.c -61f6476323206d6fad7cc1c5cb621506 gdb/testsuite/gdb.threads/gcore-stale-thread.c -5e53e15bce6da7cbc6763db6c4b3369d gdb/testsuite/gdb.threads/local-watch-wrong-thread.c -60b6b1597ece22102e9f8546cd7ba33c gdb/testsuite/gdb.threads/non-ldr-exc-1.exp -90842a3e1f1411ec3369380344bccce3 gdb/testsuite/gdb.threads/tid-reuse.exp -6264fcf0121ce45b6ffe14d68149268b gdb/testsuite/gdb.threads/fork-child-threads.c -fd5ccad4000fc2fb07e6e70c7b807724 gdb/testsuite/gdb.threads/watchpoint-fork-child.c -6d69128d38a372ddbbd69c7849a0a952 gdb/testsuite/gdb.threads/pthread_cond_wait.exp -4a9085e18f49fd7d76fbdebeace0fb06 gdb/testsuite/gdb.threads/next-bp-other-thread.exp -6af26a0af746dfbc566b19745c55d690 gdb/testsuite/gdb.threads/tls-shared.exp -514fabd248ba98ee83544e3f4458645e gdb/testsuite/gdb.threads/corethreads.c -c125689bdcfb28318c61db78b4324001 gdb/testsuite/gdb.threads/multi-create.exp -9f1980e50d0b18ecab95050153e4733a gdb/testsuite/gdb.threads/tls-nodebug.c -13b698d58d70ccc4fab0cbaba8842a3c gdb/testsuite/gdb.threads/process-dies-while-detaching.exp -0550d903591c023ee88c942fb2b78f16 gdb/testsuite/gdb.threads/sigstep-threads.c -3316c5a01e26cceb2bfd92cf3a563618 gdb/testsuite/gdb.threads/omp-par-scope.exp -7e918898753f9e8b5142f6c153ad6ff2 gdb/testsuite/gdb.threads/vfork-follow-child-exec.c -cfd7647d21e550e73b6fc3150ea6eafc gdb/testsuite/gdb.threads/info-threads-cur-sal.exp -af56f292233dd6451f9a43a5ae1401f0 gdb/testsuite/gdb.threads/continue-pending-status.c -f5bec50e890399000e34cdb660671bd2 gdb/testsuite/gdb.threads/pthreads.c -ce228e201a89a5618142777bb2afe980 gdb/testsuite/gdb.threads/tls-shared.c -3cee6ab8fb4bc7246fe2171097cb4d80 gdb/testsuite/gdb.threads/killed.c -78147340bbcb2c8cb932a5c469273322 gdb/testsuite/gdb.threads/kill.exp -59b0a0ed2ab6f5c02c43dbecdd62655e gdb/testsuite/gdb.threads/threxit-hop-specific.exp -b7334564c9eb77ee1c6933d2f1c745b7 gdb/testsuite/gdb.threads/info-threads-cur-sal.c -3c7e727da9444a6b6ddd692d63196cb3 gdb/testsuite/gdb.threads/signal-while-stepping-over-bp-other-thread.exp -b5566bcfd15d3c4b681e3290a5003f0b gdb/testsuite/gdb.threads/leader-exit.exp -9343034b6127f8a9b032882eb4c270b6 gdb/testsuite/gdb.threads/signal-delivered-right-thread.c -41278a2162982f5c8d0798e293beefaf gdb/testsuite/gdb.threads/interrupted-hand-call.c -bc02e0b8059834a745517be8df1b0bb6 gdb/testsuite/gdb.threads/watchthreads-reorder.exp -61b8648d2b905d543a53c891612cc409 gdb/testsuite/gdb.threads/execl.c -c20c9129377199a9556a35c89d0be456 gdb/testsuite/gdb.threads/check-libthread-db.exp -18935f047865af0badb35f690b6daa6d gdb/testsuite/gdb.threads/multi-create.c -0c777f4e61f07a4382b153269035dcfa gdb/testsuite/gdb.threads/hand-call-in-threads.exp -372c8d5859ec7922e73ea26e6f7a773f gdb/testsuite/gdb.threads/staticthreads.exp -024262516da0a06ce711c9ee29dc052c gdb/testsuite/gdb.threads/current-lwp-dead.c -b87d998d7ffcd35e583dd640acbb452f gdb/testsuite/gdb.threads/watchthreads-reorder.c -0ac8dd2148abfc806afc4cc18168a9e4 gdb/testsuite/gdb.threads/pthread_cond_wait.c -37c959ed29159eb4cd4bd9128f61f526 gdb/testsuite/gdb.threads/create-fail.c -721a5a9cce46454813c282fc08be2ae4 gdb/testsuite/gdb.threads/continue-pending-after-query.c -eb6f0c769609db18eb8e58c4fa537a9f gdb/testsuite/gdb.threads/non-ldr-exc-3.exp -43ec74948b3f11f0e7c17f75cb19460f gdb/testsuite/gdb.threads/names.exp -187938448712f1eda67badb62b8d95a1 gdb/testsuite/gdb.threads/step-over-lands-on-breakpoint.c -4ced932d9840513d0c240d7eb863fe20 gdb/testsuite/gdb.threads/next-bp-other-thread.c -4d5fd41c348fdfe1d238c2ff640bad56 gdb/testsuite/gdb.threads/interrupt-while-step-over.c -c0daadd0e68b2365a7b213a60d6d0cba gdb/testsuite/gdb.threads/thread-specific.c -37aa27508cda0cdb250d0ac30cfd0013 gdb/testsuite/gdb.threads/non-ldr-exc-3.c -bb3794b8a8a83e6539316850ddda5636 gdb/testsuite/gdb.threads/attach-many-short-lived-threads.c -0e9bae282a62b54838b812d957fc0424 gdb/testsuite/gdb.threads/tid-reuse.c -56a94ffd0b68c941469bd7617dd03ee5 gdb/testsuite/gdb.threads/signal-command-multiple-signals-pending.exp -0b697d147fb327bb7ccee483a505d12a gdb/testsuite/gdb.threads/multi-create-ns-info-thr.exp -3a93a1810604b45817c5e59771090ffc gdb/testsuite/gdb.threads/signal-while-stepping-over-bp-other-thread.c -2b74ae4541ae2e9a2397c5b215d42f12 gdb/testsuite/gdb.threads/tls-nodebug-pie.c -1aaa387e5b77dbb875187d64ec98f435 gdb/testsuite/gdb.threads/hand-call-new-thread.c -6342b68b5a05d8071427070b1c5380e7 gdb/testsuite/gdb.threads/thread-unwindonsignal.exp -4a42939f7eb760687177cff62713d9cb gdb/testsuite/gdb.threads/slow-waitpid.c -74c1b9bc4f963ff638267ec87e21a508 gdb/testsuite/gdb.threads/attach-many-short-lived-threads.exp -29432ec72171af41c67eba9303c6ec56 gdb/testsuite/gdb.threads/non-ldr-exc-4.c -fb9d8dcccbd19c2b9162693cc1dea138 gdb/testsuite/gdb.threads/attach-slow-waitpid.c -4f2207adc5506ba868bae32cf2e316f5 gdb/testsuite/gdb.threads/thread_events.exp -a99f2396ea282f458cee7938b8c0b6fb gdb/testsuite/gdb.threads/pthreads.exp -f9f3dad90778a291539c8ce7eda82a23 gdb/testsuite/gdb.threads/execl.exp -7c4de02fc162a44fec6919c2a0b9013b gdb/testsuite/gdb.threads/execl1.c -88204a917eb9897f6aad78d179922526 gdb/testsuite/gdb.threads/linux-dp.exp -86966f815b9cf415a63755cfeeee56ef gdb/testsuite/gdb.threads/clone-new-thread-event.c -4d0da72d5894a5db056257aa008ad6cc gdb/testsuite/gdb.threads/wp-replication.c -c4913a46c610b204acefafbb3af290ae gdb/testsuite/gdb.threads/signal-command-multiple-signals-pending.c -45e69ee09f190be8813377a305ba4ca9 gdb/testsuite/gdb.threads/hand-call-new-thread.exp -d198f21b18deb9a1b0a59a3b5f0c83ef gdb/testsuite/gdb.threads/stop-with-handle.exp -577ed2e002589dc5fe225cdc141bafcb gdb/testsuite/gdb.threads/fork-thread-pending.exp -06c3b1f1f528c47d4bece1290f21b2e8 gdb/testsuite/gdb.threads/multiple-successive-infcall.c -87d5b6517f51916a06d6ff3e68527da9 gdb/testsuite/gdb.threads/tls.exp -3d399ea783421ca8c4e624da31c7c929 gdb/testsuite/gdb.threads/print-threads.exp -aa25a48386635a6296783f3b307a7d07 gdb/testsuite/gdb.threads/fork-child-threads.exp -5a4dbfa8c8bca190a221a006155c3a33 gdb/testsuite/gdb.threads/bp_in_thread.exp -8b5a2aec5a2b807e33ce1f58b292be05 gdb/testsuite/gdb.threads/tls-main.c -2e25840e2bf439ac4809e014852b033b gdb/testsuite/gdb.threads/non-stop-fair-events.exp -47e8ea422f596f5b9d66583a877c9b44 gdb/testsuite/gdb.threads/current-lwp-dead.exp -99786a9a94dd5b3fff28f75db953c10c gdb/testsuite/gdb.threads/signal-sigtrap.exp -df9f43251f190027497c8ceb79564d56 gdb/testsuite/gdb.threads/tls-var.exp -d3bb9a4a5705bda865e78436d1cf38de gdb/testsuite/gdb.threads/step-bg-decr-pc-switch-thread.exp -ab32410cf007d5c77fdcd69af0256e6e gdb/testsuite/gdb.threads/step-over-lands-on-breakpoint.exp -6868fcb96d2a1c91e4fe2aa9ecfd305f gdb/testsuite/gdb.threads/pending-step.c -4995164d267c00a43d4a90a6994d6b6e gdb/testsuite/gdb.threads/forking-threads-plus-breakpoint.exp -c974a277a7689d70605c6752a19fcae8 gdb/testsuite/gdb.threads/wp-replication.exp -393479c730a9675380cf8798878dc8c8 gdb/testsuite/gdb.threads/stop-with-handle.c -f605860f67e49f75ea1af357a45cac49 gdb/testsuite/gdb.threads/continue-pending-after-query.exp -be5be4cdf1695f0a68a8a74c542dc199 gdb/testsuite/gdb.threads/signal-command-handle-nopass.exp -e458881e5d22c7ad4f3b205340321607 gdb/testsuite/gdb.threads/thread-execl.exp -0ab849127d0ebf15f80dc1b1a0198211 gdb/testsuite/gdb.threads/tls-var.c -c26fdf7b610c351f370bf887b0a2e0f5 gdb/testsuite/gdb.threads/no-unwaited-for-left.c -ca106ca1d91661a7b210022bf3d58387 gdb/testsuite/gdb.threads/tls-var-main.c -86acd1b9688f91cda71b8d4a7832796d gdb/testsuite/gdb.threads/corethreads.exp -2ba04c8c628f5e037f9a3c60c8046665 gdb/testsuite/gdb.threads/process-dies-while-handling-bp.exp -da033f1ec03429b2b1e4bd4da6a0d0fb gdb/testsuite/gdb.threads/omp-par-scope.c -dc16f41f22a3b13126c00613f4358840 gdb/testsuite/gdb.threads/schedlock.c -8f0d5d093c00f218149c64f7f0789241 gdb/testsuite/gdb.threads/watchthreads2.exp -b746f73364312ead7e27959c7105e1dc gdb/testsuite/gdb.threads/check-libthread-db.c -fac4c9390309ce393c2fe6b9362f99cf gdb/testsuite/gdb.threads/thread_events.c -9622a6540133a034fed8a948072e406d gdb/testsuite/gdb.threads/watchthreads.c -cae2adc6b240c5a2df7d45c1afdc10ce gdb/testsuite/gdb.threads/info-threads-cur-sal-2.c -a06d83820c0bab59115e1eb5892e6ad5 gdb/testsuite/gdb.threads/no-unwaited-for-left.exp -c0e6ec8f5a2aa6f36f6c113a36eee196 gdb/testsuite/gdb.threads/tls-nodebug-pie.exp -0761eee7a7e20ce55c45cedaf7ec3868 gdb/testsuite/gdb.threads/watchpoint-fork.h -e3dbb0d96b88cdb6036d494919eef7b5 gdb/testsuite/gdb.threads/attach-slow-waitpid.exp -df6df711c958431d0f8162e9ac3282ac gdb/testsuite/gdb.threads/break-while-running.c -9cb1c46ce86c8ee53fd0636f4bab7906 gdb/testsuite/gdb.threads/reconnect-signal.c -97a028b83bd20a51553419382acebc57 gdb/testsuite/gdb.threads/thread-execl.c -84b16a40786c79920986f31951ea9864 gdb/testsuite/gdb.threads/reconnect-signal.exp -5a06bc20ab0155a31292e03927a63e66 gdb/testsuite/gdb.threads/multiple-step-overs.exp -6619dc1a84660440cf94d873d0809663 gdb/testsuite/gdb.threads/non-ldr-exit.exp -fdd2b992ddd4c9e8ee1099607b54e94b gdb/testsuite/gdb.threads/fork-plus-threads.exp -1a2f91d1a801f83d41f98800d0b26298 gdb/testsuite/gdb.threads/ia64-sigill.exp -eacb658afc691fa5cd2e822ff125ede4 gdb/testsuite/gdb.threads/tls2.c -1fd9f961fb3f6cb60fd7589906780c35 gdb/testsuite/gdb.threads/tls-so_extern_main.c -f8f316fa79d189178bc73313ca6e25de gdb/testsuite/gdb.threads/attach-stopped.exp -150f44cdc15fe57ef4d415e62b99400d gdb/testsuite/gdb.threads/clone-thread_db.c -b3e8aa8f7af2485d51a241f6c6265c57 gdb/testsuite/gdb.threads/forking-threads-plus-breakpoint.c -2bd6b7a3118fb60f4a25523f642165d9 gdb/testsuite/gdb.threads/process-dies-while-handling-bp.c -67828ea580c1c7bb61095a5f4696346c gdb/testsuite/gdb.threads/clone-attach-detach.exp -2e3f88c8d601eb7a8b60ce76ab158814 gdb/testsuite/gdb.threads/threadapply.c -e07d5a3b433f477b146eedcbfeff1a48 gdb/testsuite/gdb.threads/names.c -873781fa9bd688e4bfba052746ddc16c gdb/testsuite/gdb.threads/siginfo-threads.c -81ca4317025ce2267d604432d27045c3 gdb/testsuite/gdb.threads/watchthreads2.c -5ea7edf2d3778dd1611795ef2a910fa7 gdb/testsuite/gdb.threads/stepi-random-signal.exp -3c1363ceb4f56bb600805edf921f6a76 gdb/testsuite/gdb.threads/next-while-other-thread-longjmps.exp -b4acec861d7789e16db15787edc7e127 gdb/testsuite/gdb.threads/ia64-sigill.c -a6d54aebbe12bd0fca2bf1e822b8660a gdb/testsuite/gdb.threads/non-ldr-exc-1.c -a37c366ff58e056babdbd60b4c01559f gdb/testsuite/gdb.cp/scope-err.exp -3a13b4e0c2b7b204eec0bae66432bdbe gdb/testsuite/gdb.cp/derivation2.cc -d1559ae0667403137bfefc12ab7fcfc1 gdb/testsuite/gdb.cp/using-crash.cc -c658b62145027fc807709b282aa1fa20 gdb/testsuite/gdb.cp/namespace-nested-import.exp -12a6f199db5af6329290f4c87e64100e gdb/testsuite/gdb.cp/non-trivial-retval.cc -c4dfd12f928b0a43c84d040a8f350ba4 gdb/testsuite/gdb.cp/call-c-1.c -f33e9ec9e70b8b99ce29c558637c907e gdb/testsuite/gdb.cp/namespace-enum-main.cc +b13e99d445124b04c4dab9b519f5d622 gdb/testsuite/gdb.perf/lib/perftest/__init__.py +5e1cca8ae12d1536aec5295c2799ec91 gdb/testsuite/gdb.perf/lib/perftest/utils.py +ba6150b6d20a6a670897ed2f365801d2 gdb/testsuite/gdb.perf/lib/perftest/reporter.py +c86f5c98d398977d4af4eeaa611fba5a gdb/testsuite/gdb.perf/lib/perftest/testresult.py +bda220688963e52c104fb42db7f4bd40 gdb/testsuite/gdb.perf/lib/perftest/perftest.py +89e6f8b4771f74f146909d19c2eb82a7 gdb/testsuite/gdb.perf/lib/perftest/measure.py +07ad5f61e67526b8e79b883ae67917a9 gdb/testsuite/gdb.perf/skip-command.py +5104da8cb3e28fb5b563156d83c02cb3 gdb/testsuite/gdb.perf/gmonster2-print-cerr.exp +ee42c80873db6b12ec974b25a0a9549e gdb/testsuite/gdb.perf/gm-use-cerr.cc +86cabe4e9de75ccbb723733a707b26a7 gdb/testsuite/gdb.linespec/cpls-hyphen.cc +0db9cabadc1e9f132cd49c128cc9f59f gdb/testsuite/gdb.linespec/explicit.exp +37425c9adab0a1d0e6e7d4a99bc81add gdb/testsuite/gdb.linespec/ls-dollar.cc +a0a5752ee65637750f43dede53307724 gdb/testsuite/gdb.linespec/break-asm-file.c +402be28f5dfc70c9da3c7cbb2b0444d8 gdb/testsuite/gdb.linespec/linespec.exp +524121d99f981556641561e5e38b14a8 gdb/testsuite/gdb.linespec/cpls-ops.exp +ff734f20bcceca96b025b01011003ef9 gdb/testsuite/gdb.linespec/3explicit.c +d87c8e02ed0f861409003c44c0383f31 gdb/testsuite/gdb.linespec/cpls.cc +3ac406834d324a85397f2d8642ab2a0c gdb/testsuite/gdb.linespec/ls-dollar.exp +53e0c591f5382ade40505eec4c64ff29 gdb/testsuite/gdb.linespec/break-ask.exp +3824bb48a54751404b8584f729b60453 gdb/testsuite/gdb.linespec/keywords.exp +234b21cd2797d0a0b35d9142d3143dfd gdb/testsuite/gdb.linespec/cpls2.cc +d6ede9fd7904e04684a8da833631c48a gdb/testsuite/gdb.linespec/break-asm-file.exp +62e03187a744480fbef9a3ab1d9e47ed gdb/testsuite/gdb.linespec/thread.c +b672f3f6d625782a84a5f909539d8da2 gdb/testsuite/gdb.linespec/cpls-abi-tag.exp +b1055995652ee0fe7dfbc1c4cd14b77e gdb/testsuite/gdb.linespec/cpcompletion.exp +9ba670bf59f61ac75bd2e40d8ff93bf9 gdb/testsuite/gdb.linespec/ls-errs.c +5fdfb8ec09eaf0ad1f0bd3ed83de6fce gdb/testsuite/gdb.linespec/macro-relative.exp +93cf1c1430a2fad457e3e40cc04de5dc gdb/testsuite/gdb.linespec/cp-completion-aliases.exp +691cf2f767306929b030b1d8db00a83e gdb/testsuite/gdb.linespec/break-asm-file1.s +2d7500b0393081a262b5cc8bdeb530b0 gdb/testsuite/gdb.linespec/skip-two.exp +694267bc2b569b322aa1f3d7f69be1d6 gdb/testsuite/gdb.linespec/cp-completion-aliases.cc +0e98cab2447d54107e21ee3e53b3be7f gdb/testsuite/gdb.linespec/cpexplicit.cc +eefd36afccf1544e5bd075dfaeaa3493 gdb/testsuite/gdb.linespec/macro-relative.c +6ffc38a093f32f27d5e1495dbd44d744 gdb/testsuite/gdb.linespec/thread.exp +f8b9c6483c4a3f311f8a60979b123898 gdb/testsuite/gdb.linespec/cpexplicit.exp +e4bae60829ce47a126e371b9cac0643c gdb/testsuite/gdb.linespec/cpls-abi-tag.cc +ef44b91cbf0f80460507db04f5475419 gdb/testsuite/gdb.linespec/cp-replace-typedefs-ns-template.exp +c9221c17953f4fc8a4d1a118d5220431 gdb/testsuite/gdb.linespec/explicit2.c +149d856fc61678e12b14a639c9f82b5c gdb/testsuite/gdb.linespec/cpls-ops.cc +8723276ef8c8100de683f11cb522d009 gdb/testsuite/gdb.linespec/ls-errs.exp +8ce9a284b978283fc01c139afe700294 gdb/testsuite/gdb.linespec/body.h +e4ef70c3aaa633b4a8d4dfd5d86fe147 gdb/testsuite/gdb.linespec/lspec.cc +b3915e6e7e4c4f4a352949b16b0e6831 gdb/testsuite/gdb.linespec/explicit.c +bc0f49d4bfbdb5736c82f093d9f80c1f gdb/testsuite/gdb.linespec/keywords.c +32fc5c277b47e7fa01309740581a9796 gdb/testsuite/gdb.linespec/break-asm-file0.s +54aeda01d69ad0e8dd7c67b8fa9b545e gdb/testsuite/gdb.linespec/cp-replace-typedefs-ns-template.cc +2cd234489f775c6244e2a261c5b0ed6f gdb/testsuite/gdb.linespec/base/two/header.h +2353921c5d41b4575547837a65d062c5 gdb/testsuite/gdb.linespec/base/two/thefile.cc +36c28799bb3bdad306605e2076f35632 gdb/testsuite/gdb.linespec/base/one/header.h +ccb4c8a58a1e1984a826873686972178 gdb/testsuite/gdb.linespec/base/one/thefile.cc +76efa0be5b547481043ba197cad7a14e gdb/testsuite/gdb.linespec/lspec.h +4c8106ea5f085381cadabc9d865975d1 gdb/testsuite/print-ts.py +f785b0a78a3bbb9352f0033d58e8cf8a gdb/testsuite/gdb.cp/member-name.cc +224b4e9b154c3cc6a09943b02a47fa04 gdb/testsuite/gdb.cp/cpexprs.exp.tcl +cb2c9aef7d539190f362db47051b467b gdb/testsuite/gdb.cp/mb-inline.exp +3a17c55b6aed065cd39ace940957bc8b gdb/testsuite/gdb.cp/rvalue-ref-params.exp +24ea9c11cbe682b0ced0dd010f148385 gdb/testsuite/gdb.cp/bs15503.cc +585aa80872a595fce32afe33615ffd89 gdb/testsuite/gdb.cp/dispcxx.exp +fa2ddd47c0cf5ed08db4d93aa205769c gdb/testsuite/gdb.cp/member-ptr.cc +c03e661912a38e120986afde0f660815 gdb/testsuite/gdb.cp/using-crash.exp +9c2585a30956ad9e463ea062075b051f gdb/testsuite/gdb.cp/pr17132.cc +7e5b18b28a0ca883aa55da93b86082d8 gdb/testsuite/gdb.cp/oranking.cc +7f701bd4b474845dfb3d5659f29efd91 gdb/testsuite/gdb.cp/rtti2.cc +e2cc5a54c8dddd7c4cba85490a20e31e gdb/testsuite/gdb.cp/extern-c.cc +48b2d9d59908533ade13c6913ed36172 gdb/testsuite/gdb.cp/static-print-quit.cc +de28a705c2ece829611f015aa519e070 gdb/testsuite/gdb.cp/templates.cc +c810e733ce4f571bfb4333e49a434bba gdb/testsuite/gdb.cp/namespace.exp +a924ab0cb4df36cf7dab4ec5d5c7e9dc gdb/testsuite/gdb.cp/iostream.cc +17543b4962d3d36f32c1ae5b030135aa gdb/testsuite/gdb.cp/minsym-fallback.cc aa3b210cfd056b6a8835065c2c6aa791 gdb/testsuite/gdb.cp/destrprint.cc -26a7c6a7e2a956022e7cbd0414354e34 gdb/testsuite/gdb.cp/misc.exp -827bc5253143da4dc98396c88bd6114d gdb/testsuite/gdb.cp/gdb2384.exp -2a46bc1ddbdd59b9fcf6f8419ff5c401 gdb/testsuite/gdb.cp/extern-c.exp -120fc3c1c4660a1b538fbd9ca9591800 gdb/testsuite/gdb.cp/re-set-overloaded.exp -44a13ff06bb3891f7666c49d9f9ee748 gdb/testsuite/gdb.cp/ena-dis-br-range.exp -0acac69ffdda903fd6a002fe06f30b4a gdb/testsuite/gdb.cp/parse-lang.cc -520f2143a8ee8bcc7aa67c5679434a13 gdb/testsuite/gdb.cp/typedef-base.cc -a6397349b7fc8e950709a33dda8769d9 gdb/testsuite/gdb.cp/rvalue-ref-types.exp +e7498dd824e647c98adeeb6fef09757c gdb/testsuite/gdb.cp/destrprint.exp +504955aefa0b8749f76bfd8c87d0fc32 gdb/testsuite/gdb.cp/bs15503.exp +0602e699d2f76993168b00825b495d32 gdb/testsuite/gdb.cp/ovsrch3.cc +99fcc1ae45b6217e61debdd6e9e65d76 gdb/testsuite/gdb.cp/vla-cxx.cc +9e27828cad73aad0b13acb2fcbf84950 gdb/testsuite/gdb.cp/minsym-fallback-main.cc +afed526e8a70c6659b7a40b264e80285 gdb/testsuite/gdb.cp/gdb2384.exp +53ae48a79853338030f199c58af5f268 gdb/testsuite/gdb.cp/nsrecurs.exp +c059c11089bc70ba113cfd64a6f47322 gdb/testsuite/gdb.cp/exception.exp +f4ad7c4ec500b728e2fc73ff3f1a4b82 gdb/testsuite/gdb.cp/static-method.cc +e5c3b3897ac1a8f9458fbffacf245a78 gdb/testsuite/gdb.cp/many-args.cc +38e7f5185e4b0b60eb2778bbe20c0c7f gdb/testsuite/gdb.cp/except-multi-location.exp 274142a2ca86ad72d954a56bd01200c2 gdb/testsuite/gdb.cp/nsrecurs.cc -dede429ab6a72b18f7f91d9af9300e25 gdb/testsuite/gdb.cp/exception.exp -87388e81d17ce79f4dfc4a7d719a7f94 gdb/testsuite/gdb.cp/koenig.exp -78f1f53c25e2fca250159cd15a6470db gdb/testsuite/gdb.cp/pr9067.exp -0d34d2004085eb258050235fcc42b5c3 gdb/testsuite/gdb.cp/iostream.cc -2d11213b4a7e3057a5aa4f88dc711f1e gdb/testsuite/gdb.cp/cpsizeof.exp -e8fea467f00505016e5d311bde3014d9 gdb/testsuite/gdb.cp/abstract-origin.exp -fadd9b307bfc790d96f33e845a971f6c gdb/testsuite/gdb.cp/nextoverthrow.exp -1db970daf9d5e910aab5f5d677cacbcd gdb/testsuite/gdb.cp/rvalue-ref-overload.exp -cf2ed1a33602bd5ece83f929523445e8 gdb/testsuite/gdb.cp/static-typedef-print.cc -c27fdb3d686d1e16037223a1627e745f gdb/testsuite/gdb.cp/expand-sals.cc -5f8e6535b24347a7cbccbb179ed1f983 gdb/testsuite/gdb.cp/var-tag-2.cc -1f88c016a0f19f3675d7ba72c5f2ecdf gdb/testsuite/gdb.cp/ovldbreak.exp -d86ca0f4194304a3ec95c17e7e67d10e gdb/testsuite/gdb.cp/infcall-dlopen-lib.cc -ef9d4f0987460c40a1685da54d1db05c gdb/testsuite/gdb.cp/cplabel.cc -9b5a18bba89efd561b454b04d1b76673 gdb/testsuite/gdb.cp/fpointer.exp -a6a3613d4123d4d4c73b5eccfb2d8c85 gdb/testsuite/gdb.cp/temargs.cc -23e797505cfa5b1b22db50b74a98742d gdb/testsuite/gdb.cp/virtbase2.cc -c37cdca7b22b4f2dfca3d57afaeb989e gdb/testsuite/gdb.cp/ref-params.exp -3adfe8e9fde4c758215e132cac20deac gdb/testsuite/gdb.cp/except-multi-location-main.cc -04e0db21929e7ebdbb8dfd820ea0f224 gdb/testsuite/gdb.cp/anon-union.exp -8e289dff03fa84d40bfff1ca3abca583 gdb/testsuite/gdb.cp/bs15503.cc -37f9aa7b7c93b242406cd773cc5a7f78 gdb/testsuite/gdb.cp/bool.exp -a69fccda046da04bbbcdec9ee6c84ce6 gdb/testsuite/gdb.cp/includefile -7e5b18b28a0ca883aa55da93b86082d8 gdb/testsuite/gdb.cp/oranking.cc -55dbd352044c7c1b1951924443dd762a gdb/testsuite/gdb.cp/chained-calls.exp -ea937ac653fbe759ad35b5e6fabf31a4 gdb/testsuite/gdb.cp/printmethod.cc -d35ad7023fbe864b81f9469bbee7c048 gdb/testsuite/gdb.cp/gdb1355.cc -e0e8bc1811905f105c060838c65bb939 gdb/testsuite/gdb.cp/expand-sals.exp -d88b3193c901c3778b537b1a9946f2d1 gdb/testsuite/gdb.cp/rtti.exp -e40e634d75d44168762c6ffc805fe494 gdb/testsuite/gdb.cp/rvalue-ref-sizeof.cc -67911d748bf5c95cb968da34e1efca9f gdb/testsuite/gdb.cp/pr10728.exp -44f8dfd1114f01388b14366b979f0293 gdb/testsuite/gdb.cp/pr9167.exp -f78534d3f0d2bb593cb77af10363735c gdb/testsuite/gdb.cp/mb-ctor.cc -f0f49b0cd01ae23fab0c1c50cc11831f gdb/testsuite/gdb.cp/noparam.exp -fe2a4b3a0cafa0977f8cc617d907e5d5 gdb/testsuite/gdb.cp/pass-by-ref.exp +2e10d5d6c3d860b2232f98ef83883eea gdb/testsuite/gdb.cp/var-tag-2.cc +115432d2eeda1ba14c75659f5c9cc968 gdb/testsuite/gdb.cp/infcall-dlopen-lib.cc +4fa7d4e84c88a53e26ec3682bff50669 gdb/testsuite/gdb.cp/ptype-cv-cp.cc +fb48ccf41242ce0b7b9562e9c51e20aa gdb/testsuite/gdb.cp/oranking.exp +f6ecc0a400a8d6546007fbc1f2dee6f6 gdb/testsuite/gdb.cp/rvalue-ref-casts.cc +b469609c1bc8930aede342f8db025267 gdb/testsuite/gdb.cp/m-static.h +6e71243736110046c07b13de8f095287 gdb/testsuite/gdb.cp/misc.exp +47c9ba30bb4984b469973cb191a1e22a gdb/testsuite/gdb.cp/pr-1210.exp +0c4127b2a1a2dddb4c5d8353a5a41b04 gdb/testsuite/gdb.cp/ovsrch1.cc +fcbbb43fdb40184b135cfe123c6411eb gdb/testsuite/gdb.cp/includefile +57d8510a53eb8a121c26e4a9b94e3710 gdb/testsuite/gdb.cp/psymtab-parameter.cc +2d5a3f3b8c870b803e657d40ceae038e gdb/testsuite/gdb.cp/pr9167.cc +bec5831953699a0daf2274369c6f1ed1 gdb/testsuite/gdb.cp/hang.H +1e6bc118b18717195a566b341ef63113 gdb/testsuite/gdb.cp/rvalue-ref-params.cc +3769fa30260e415f7fd70be076f1fae4 gdb/testsuite/gdb.cp/abstract-origin.cc +eefc04668b1903c4f640af52f7330bcb gdb/testsuite/gdb.cp/method.exp +2a3bad4510e8dcc068802a1bd505b2f0 gdb/testsuite/gdb.cp/typeid.exp +bae6152639254c190512bc2645b02272 gdb/testsuite/gdb.cp/noparam.cc +77df967cb1aefa2c1f28f88d40672374 gdb/testsuite/gdb.cp/anon-ns.exp +6b38cf782cfa5e70bc3965b594574428 gdb/testsuite/gdb.cp/infcall-dlopen.cc +7d5e83250f4faebd12681c8937715e75 gdb/testsuite/gdb.cp/except-multi-location-main.cc +5c59bbfaf27215c2d724b736f427505b gdb/testsuite/gdb.cp/call-c.exp +87f48eba45ddc43b97e740eb1f3072d3 gdb/testsuite/gdb.cp/nested-types.exp +6af5fa7663678314cf483b9ec01e1335 gdb/testsuite/gdb.cp/no-dmgl-verbose.cc +42a42740e0e9a4428d6763c1584775b3 gdb/testsuite/gdb.cp/userdef.exp +057cb7f7b593ccd432a268d943554dfc gdb/testsuite/gdb.cp/subtypes.exp +2a514ba67bfef2bb493424a4ae7e787e gdb/testsuite/gdb.cp/rvalue-ref-sizeof.cc +65c1410869515b082033ac90bad9e175 gdb/testsuite/gdb.cp/smartp.cc +6efe619280c6ec5bee33ca260768035b gdb/testsuite/gdb.cp/bool.cc +598c459ad803335d79eefc9b13537476 gdb/testsuite/gdb.cp/non-trivial-retval.exp +c5dfb79afbc396d17f84fbb321fc5c15 gdb/testsuite/gdb.cp/parse-lang.cc +f31962826425a9d3e8a54871c97a8ad5 gdb/testsuite/gdb.cp/ref-params.cc +6b767ab2f87bfa5ad42cf896f83d6355 gdb/testsuite/gdb.cp/member-ptr.exp +f07eedb5b968b8ef2a06a368be418279 gdb/testsuite/gdb.cp/var-tag-3.cc +0d6599c8907b2ccccdf662b0908e5c64 gdb/testsuite/gdb.cp/psmang2.cc +fbda44cc1a4bce524713971741018d64 gdb/testsuite/gdb.cp/gdb2495.cc +f68458f83bca5d7f73d928b98e8726c5 gdb/testsuite/gdb.cp/rvalue-ref-types.exp +fe3e3426f68c4c94d43900e342148baf gdb/testsuite/gdb.cp/rtti.h +68b8c1bf3b3827f69e1f3359f9d645bc gdb/testsuite/gdb.cp/ovsrch.exp +ee4d73862a0cb2e8d99e044f98d0cecb gdb/testsuite/gdb.cp/derivation.exp +891b27675617a13676ff9f904faec716 gdb/testsuite/gdb.cp/stub-array-size.h +0c8c330d04c58b1c026ec1e3128c0cc3 gdb/testsuite/gdb.cp/paren-type.cc +023e0d403592538f2a0b678e28569109 gdb/testsuite/gdb.cp/static-typedef-print.exp +2adf8bc7131244b821164c0b5afe5b68 gdb/testsuite/gdb.cp/noparam.exp +129fedae5801402c16697416eb7a33c9 gdb/testsuite/gdb.cp/pr17494.exp +3c1f978716aa1ad555456968f927b8db gdb/testsuite/gdb.cp/infcall-nodebug-lib.c +be29b90cc0cfd3ec86eaabb5f568a29e gdb/testsuite/gdb.cp/infcall-nodebug-c++-d0.exp +30c95e1777d938c82b3d897cec346c3f gdb/testsuite/gdb.cp/disasm-func-name.exp +12571b750a4cde51114397e8244de177 gdb/testsuite/gdb.cp/pr9631.cc +26ff73ceac192f005002066ad8fd0338 gdb/testsuite/gdb.cp/shadow.exp +f33512e1d6a46bb77a35d1c89a615a9c gdb/testsuite/gdb.cp/stub-array-size.cc 2088f98bb23167ea5e0c8b394c560519 gdb/testsuite/gdb.cp/annota3.cc -de3e06ab2a1eb030d0c7d0b706cd8105 gdb/testsuite/gdb.cp/mb-inline1.cc -bbca60ba5a757eca908aaf37d72137ff gdb/testsuite/gdb.cp/local-static.c -60b4cb1480f8ba055c76143ea4b6c8d7 gdb/testsuite/gdb.cp/nsalias.cc -e5b949cf38cb6a762700a38244ff6671 gdb/testsuite/gdb.cp/local-static.cc -89c73825b2f54fe099fbad55b386205f gdb/testsuite/gdb.cp/cttiadd2.cc -d6e69e04853049c699a21daf4bc30549 gdb/testsuite/gdb.cp/cpcompletion.exp +a32fe3cd269662640e70e12dc657d22f gdb/testsuite/gdb.cp/infcall-nodebug-c-d0.exp +1e68ea90b93dc37803becb6113dc9555 gdb/testsuite/gdb.cp/subtypes.h +ff727903b019979e7345e10ddf7630fa gdb/testsuite/gdb.cp/breakpoint-locs-2.cc +27fc2c8f57303c8d5f32a373e701dcb9 gdb/testsuite/gdb.cp/nsusing.exp +6e6ccb38873e45b561cd3764fa5d3852 gdb/testsuite/gdb.cp/ptype-flags.exp +db125ca32a64513737849086eed39b3f gdb/testsuite/gdb.cp/var-tag-4.cc +735b928dcd0a0237809a49e37419ca79 gdb/testsuite/gdb.cp/fpointer.exp +b85f3bd7d2239c03b1a625e51b6719cd gdb/testsuite/gdb.cp/nsalias.cc +91d6507dbb106dd147c7cbdc7952068a gdb/testsuite/gdb.cp/m-static.exp +caa4126a093cd8b669f412892c36ba41 gdb/testsuite/gdb.cp/infcall-nodebug-c++-d1.exp +8a7f7fc1a5dff97f7733ab4723b615ac gdb/testsuite/gdb.cp/try_catch.exp +cea8a52fa5fd395a558dd5adea975210 gdb/testsuite/gdb.cp/meth-typedefs.exp +c2fc49b9073ce12b05569431f9f7b91e gdb/testsuite/gdb.cp/overload-const.exp +2e902d980a259189eabccce1cf8b8fbe gdb/testsuite/gdb.cp/hang2.cc +146a686a7156778b1acdacfd29fe55ad gdb/testsuite/gdb.cp/nsimport.cc +ef6c7e7e5953be9ea23fa49422b039ee gdb/testsuite/gdb.cp/nsusing.cc +78a60ed963d69df1b63439bfeb2e4878 gdb/testsuite/gdb.cp/anon-ns2.cc +30c9322677fedbdbd75576cd6bc111c4 gdb/testsuite/gdb.cp/readnow-language.cc +2089b965770674c018cb3c26503793d6 gdb/testsuite/gdb.cp/vla-cxx.exp +d022e642856b48c06c1e131975f89bb6 gdb/testsuite/gdb.cp/infcall-nodebug.exp.tcl +3e08f0e7f8e9567601433c2fde30c1d1 gdb/testsuite/gdb.cp/non-trivial-retval.cc +e5aa690e27f2ff5a9a3cf4b51e5672f9 gdb/testsuite/gdb.cp/cpexprs-debug-types.exp +b93f2f3a024b60a5179c486e3eb95570 gdb/testsuite/gdb.cp/mb-inline.h +1b0c1154be6a4d6b3c2dbf7793c6cea2 gdb/testsuite/gdb.cp/rvalue-ref-sizeof.exp +7cf1888bb3140b425e34d3010779b252 gdb/testsuite/gdb.cp/temargs.cc +1a58a41f61d2342b8f097630a240edd4 gdb/testsuite/gdb.cp/psymtab-parameter.exp +37f8470a07a59af4e82f26011ed6d25e gdb/testsuite/gdb.cp/formatted-ref.cc +f88217ca3aecd11f61e60e172ea5dd63 gdb/testsuite/gdb.cp/inherit.exp +70341fc0eabab4b5f31c0dbdeec2230c gdb/testsuite/gdb.cp/pr-574.cc +a79dd8792da8eb9d3a41ee95c7924d5d gdb/testsuite/gdb.cp/pr17132.exp +596ac6a4b038d8a8e8c743d5bb75de8d gdb/testsuite/gdb.cp/abstract-origin.exp +895de5b9035c42807e51e6812c92f243 gdb/testsuite/gdb.cp/many-args.exp +f78534d3f0d2bb593cb77af10363735c gdb/testsuite/gdb.cp/mb-ctor.cc +923e8df050d19e1c25a51df276ffd8ae gdb/testsuite/gdb.cp/m-data.cc +77df3107df3b157b84ff642421e15048 gdb/testsuite/gdb.cp/pr10687.cc +08579edc506172b43b670e66e5231bc3 gdb/testsuite/gdb.cp/punctuator.exp +19370fac589548ca0a6010b01190860b gdb/testsuite/gdb.cp/ctti.exp +6e63586d17b3f806e24ce3b2fc0e3742 gdb/testsuite/gdb.cp/try_catch.cc +a6d2ab6f9bcc8cb49be07e8d29841519 gdb/testsuite/gdb.cp/nsdecl.exp +5a96b2ac5ddbc10f4507cbc3c04e43fa gdb/testsuite/gdb.cp/nsstress.exp +9ea81d9884bf2213082ac6f92d10cdf5 gdb/testsuite/gdb.cp/mb-templates.exp +b9accb56435f64f62c8bbba4310bb6c4 gdb/testsuite/gdb.cp/infcall-nodebug-main.c +58805075275999f601dad8aa630eab52 gdb/testsuite/gdb.cp/arg-reference.exp 670802988499deb05309f8f73e62e0d3 gdb/testsuite/gdb.cp/shadow.cc -0b589be93da6b560c26323b93c105d4f gdb/testsuite/gdb.cp/filename.exp -8cca88dd6ac3b15e777253d5a1f36076 gdb/testsuite/gdb.cp/save-bp-qualified.cc -ca02c6d2cb22b6a3c43c7ee56b72e093 gdb/testsuite/gdb.cp/infcall-nodebug.exp -6a3b6448db7498c416c3f8d03f88ca6c gdb/testsuite/gdb.cp/ctti.exp -ae78c05af4c1b5f5198dba5b9e85b981 gdb/testsuite/gdb.cp/cmpd-minsyms.exp -5aa100b253777f14d000cbac2d0a5c31 gdb/testsuite/gdb.cp/namespace-nested-import.cc -3f0ea11c910dff3d2e1dccd59ab38bbc gdb/testsuite/gdb.cp/local-static.exp -ade96973683c37d98e463cc3143d424d gdb/testsuite/gdb.cp/gdb2495.cc -ea78520746262c0755561bb710af465b gdb/testsuite/gdb.cp/rtti1.cc -ff137a188dfac10183f572683a93795b gdb/testsuite/gdb.cp/exceptprint.cc -9606d355e79b33dfcd637e70fbdf3765 gdb/testsuite/gdb.cp/baseenum.cc -e39bda7f929ce7132a6de4b888fa6508 gdb/testsuite/gdb.cp/anon-struct.cc -258422b529f8b15edc2531b573f1f99e gdb/testsuite/gdb.cp/namelessclass.exp -6d9af6805a693aeca7f42d631fe25b09 gdb/testsuite/gdb.cp/paren-type.cc -3c314a9006d790e462481f76174d46b0 gdb/testsuite/gdb.cp/overload-const.cc -8a3e89cef133d79fa4dd072ca3f121f6 gdb/testsuite/gdb.cp/ovsrch.exp -3ac3b18594cc84f1004bf489731fa5d1 gdb/testsuite/gdb.cp/constexpr-field.exp -aebd97c73289884135da76b8bddcb701 gdb/testsuite/gdb.cp/formatted-ref.exp -61e293cd39db4588035377667c7bedf6 gdb/testsuite/gdb.cp/koenig.cc -ef82d5c0d18b70045913c695da6cc6ae gdb/testsuite/gdb.cp/infcall-nodebug-main.c -f48aa197ab77154a8d139b1a19bf7b97 gdb/testsuite/gdb.cp/enum-class.exp -a7f2f965b5bc7a01da3ca46d61916969 gdb/testsuite/gdb.cp/pr9631.exp -7b0ab495adc6d713b685fa238c599c7e gdb/testsuite/gdb.cp/mb-inline.h -9a3489281dbd2351a9afe0c86626c67a gdb/testsuite/gdb.cp/infcall-dlopen.exp +df11cb1835074902da6a4d0ad539ef4a gdb/testsuite/gdb.cp/namespace-enum.cc +feb819b43dbe4b5c8af03a9f050c6d04 gdb/testsuite/gdb.cp/virtbase.cc +2073f045c78990789c6ea8e19affaf33 gdb/testsuite/gdb.cp/pr10728-x.h +149ad9b48a675d0f2102254e9be4432b gdb/testsuite/gdb.cp/formatted-ref.exp +3392b4be32a4c703a94740abf585b834 gdb/testsuite/gdb.cp/cplusfuncs.cc +6793cdb4f72214c497c7eaa9fdbb6534 gdb/testsuite/gdb.cp/cpcompletion.exp +85ed054cce88e5a5a976e539a52ae939 gdb/testsuite/gdb.cp/re-set-overloaded.exp +28c0b566b8e68635771c7263b950eba0 gdb/testsuite/gdb.cp/local-static.c +290ac36ae4b688a9c9ae08d0c7b3c019 gdb/testsuite/gdb.cp/typed-enum.exp +01575cb5475b2514c25d0c4c8daabc95 gdb/testsuite/gdb.cp/ambiguous.exp +86b8e63b77e6ad1e75500a2990f3855a gdb/testsuite/gdb.cp/converts.exp +5221a33cd93ea0eba10ad76e6c55a030 gdb/testsuite/gdb.cp/anon-union.cc +02bbe6390569fe9d97805417ea649e28 gdb/testsuite/gdb.cp/cmpd-minsyms.exp +f3d2bc30e5596702c673ca2a919db468 gdb/testsuite/gdb.cp/cplabel.cc +5849d1552e6fb0c9fe0c56d624947b5a gdb/testsuite/gdb.cp/typeid.cc +63fc5a602f2c4e5e4f25b3de818be781 gdb/testsuite/gdb.cp/ptype-cv-cp.exp +6f81010f0f887c0d2ee25ec49db9c007 gdb/testsuite/gdb.cp/templates.exp +cb71a4e4cddd056fd62dd546cfd3faf6 gdb/testsuite/gdb.cp/namelessclass.cc +7e8a8deb6b6b9ae21913f39bb1df44b4 gdb/testsuite/gdb.cp/cmpd-minsyms.cc +b4e27711f6e1b4b16df591b4acd7bdf1 gdb/testsuite/gdb.cp/hang3.cc +d735c2737237aa3cdaf44118af17689e gdb/testsuite/gdb.cp/ovldbreak.cc +33782eb39a58acb52911d36168723d28 gdb/testsuite/gdb.cp/annota2.exp +a93e118c9c2d64fb7923041625eb61fa gdb/testsuite/gdb.cp/subtypes-2.cc +46236ee5a1274c16f41bea606f7c667f gdb/testsuite/gdb.cp/constexpr-field.exp +09ea11d0a9f57cad95d69ef7fff2170e gdb/testsuite/gdb.cp/pass-by-ref-2.exp +4cc246b8094c87630d03ed67a1cef824 gdb/testsuite/gdb.cp/ena-dis-br-range.cc +e93bcb7f9aa9f1f422142884af94de02 gdb/testsuite/gdb.cp/breakpoint-locs.h +1ec80776c7d131c8e27bf8ff8bc9dbc3 gdb/testsuite/gdb.cp/classes.cc +e8444f390b800e5696bc8a72788a3219 gdb/testsuite/gdb.cp/scope-err.cc +eb31377ac19aeddd41786049067aed21 gdb/testsuite/gdb.cp/pass-by-ref-2.cc +95e275fb175b1ebb9d6645a1627213d7 gdb/testsuite/gdb.cp/namelessclass.S +b2dfb9e20ce2598a29ea70d28e19a2e7 gdb/testsuite/gdb.cp/baseenum.cc +901a903eee4967e3a09671563ce64726 gdb/testsuite/gdb.cp/psmang1.cc +f33e9ec9e70b8b99ce29c558637c907e gdb/testsuite/gdb.cp/namespace-enum-main.cc +36190479a379184a43152441f1512196 gdb/testsuite/gdb.cp/ref-types.exp +b5646b871dc39e76200ee8cb2645a54c gdb/testsuite/gdb.cp/pr10728.exp +d9e3facf203e5f5664c9f309723257db gdb/testsuite/gdb.cp/extern-c.exp +4b1557ca2d2d17c8b4a96bf9fd97960a gdb/testsuite/gdb.cp/mb-templates.cc +33e6d7afd7c318893a5bbe2335a57cd8 gdb/testsuite/gdb.cp/fpointer.cc +b1632d6f052768fc468642012e989f69 gdb/testsuite/gdb.cp/nsnested.cc +1eb5c4c55ff805df71e23ea3e3d4b849 gdb/testsuite/gdb.cp/nextoverthrow.exp +b052792be3791b828efa618c120a63e5 gdb/testsuite/gdb.cp/pr-574.exp +4a157c3eb150d4137733d5ce16da857e gdb/testsuite/gdb.cp/cttiadd.cc +d5541fd9a7e98bf48bc8b2ec71190ed5 gdb/testsuite/gdb.cp/m-data.exp +4decbd64facfa30399eed85e19f643d5 gdb/testsuite/gdb.cp/virtfunc2.cc +764c851333ec947651908b057c3dd3fc gdb/testsuite/gdb.cp/cplusfuncs.exp +191b435485e6b4bb20d0e04fa9a2934e gdb/testsuite/gdb.cp/breakpoint.exp +95b8ba4185ad183c13f92d0dd1023a00 gdb/testsuite/gdb.cp/temargs.exp +67c507c16f065919e5b48bca4df7b9d6 gdb/testsuite/gdb.cp/stub-array-size.exp +acc9f7eded4543c273730ed775d36550 gdb/testsuite/gdb.cp/cpsizeof.exp 584a50069ae4ae90c745978c0bb994db gdb/testsuite/gdb.cp/local.cc -a6cd47de7940e93151bf930ea42516f8 gdb/testsuite/gdb.cp/expand-psymtabs-cxx.exp -2088f98bb23167ea5e0c8b394c560519 gdb/testsuite/gdb.cp/annota2.cc -6b0e92602941881367d6dc49e6801b15 gdb/testsuite/gdb.cp/mb-inline.exp -279ffacff13fb4c389b62b57ddeacf5f gdb/testsuite/gdb.cp/gdb1355.exp -05ce316e8310525d20dd9a47948a6763 gdb/testsuite/gdb.cp/annota2.exp -5a92f72c5fc9d2e4fe688c7899403316 gdb/testsuite/gdb.cp/static-typedef-print.exp -808d6e4176969dc01c969471300063d2 gdb/testsuite/gdb.cp/pr17132.cc -07fa7f618722031893284e4df11fe13e gdb/testsuite/gdb.cp/pr-1210.cc -630d0e1d5401b848d1ba4439c72128c4 gdb/testsuite/gdb.cp/except-multi-location.exp -27218918f3b3cf01616d991a35ccdcbd gdb/testsuite/gdb.cp/cttiadd3.cc -ca3301e2cd7e7214f568e93d48ebb036 gdb/testsuite/gdb.cp/pr17494.exp -c14c2dce9e61743f6879d9d77ade37b4 gdb/testsuite/gdb.cp/formatted-ref.cc -99179476fe2c2959457558786ddfb2c1 gdb/testsuite/gdb.cp/virtfunc2.cc -4195d3718293b642b8ead0ca9e2e1448 gdb/testsuite/gdb.cp/nsusing.cc +fd063d56c7c955d3719817c9cdc8c58b gdb/testsuite/gdb.cp/ovsrch2.cc +c48523ff575c897f58d9c7724ba648f2 gdb/testsuite/gdb.cp/rvalue-ref-types.cc +2f324a2103b7eb8ce878ad02acb64ab4 gdb/testsuite/gdb.cp/misc.cc +d147f29e4035d7ebbaa76dd68918f2dc gdb/testsuite/gdb.cp/m-static.cc +8fbbd52ff7e893070d31489edc231860 gdb/testsuite/gdb.cp/nsimport.exp +bf5dbbc4b126a0f573af8a8baf1bffdc gdb/testsuite/gdb.cp/stub-array-size2.cc +d7c852e30a7c860b86bc0e5eb8559062 gdb/testsuite/gdb.cp/gdb2384-base.h +37447164817fccf4a437525cbcc5ccc7 gdb/testsuite/gdb.cp/paren-type.exp +95dfd1a5fd47be4b2c3b8bb44e507347 gdb/testsuite/gdb.cp/virtbase2.cc +2604c0e8f5be30f61c137e7295a73758 gdb/testsuite/gdb.cp/typedef-base.exp +59b9979d36c3e60330fdbbf6c33ea02a gdb/testsuite/gdb.cp/readnow-language.exp 7356b291b65f3595630313cdf845d8dc gdb/testsuite/gdb.cp/hang1.cc -3836250c89d31b389742ac22eb9e5f55 gdb/testsuite/gdb.cp/impl-this.exp -cebd39fffff21dbe73e922a8fa8d9897 gdb/testsuite/gdb.cp/nsimport.exp -cdcf1ced148e869f1371fbfc9fba2a42 gdb/testsuite/gdb.cp/nsalias.exp -f1109aba253ff3f03e46c492633a074d gdb/testsuite/gdb.cp/call-c.cc -950a3c291555b7c6a15190e6118bcce1 gdb/testsuite/gdb.cp/oranking.exp -837edcf1863eeaf88902858c2bef406b gdb/testsuite/gdb.cp/ovsrch4.cc -b5b693e2536ea23746d2d4d8b8f91131 gdb/testsuite/gdb.cp/inherit.exp -11ef2dae6207cab5d279a113d01c753f gdb/testsuite/gdb.cp/no-dmgl-verbose.cc -a92bfbb5ccd3edfc9f923f3de151dd79 gdb/testsuite/gdb.cp/noparam.cc -d782292814093a87d4b95d70966c1764 gdb/testsuite/gdb.cp/psymtab-parameter.cc -b84b559ed4a20f592208cfaac43b328b gdb/testsuite/gdb.cp/pr-574.exp -77df3107df3b157b84ff642421e15048 gdb/testsuite/gdb.cp/pr10687.cc -072af29982d34f55b0c95e42fb0df3e8 gdb/testsuite/gdb.cp/typeid.exp -d43e02d558d96e7b62660a033ae5c424 gdb/testsuite/gdb.cp/casts03.cc -570b7699aca86a36d601e5bed08e6108 gdb/testsuite/gdb.cp/hang.exp -4bd74921ab65320d14c7f8fcf82a8904 gdb/testsuite/gdb.cp/cp-relocate.cc -e8a7c759b19afa5e685d65683b23aa6f gdb/testsuite/gdb.cp/anon-ns.exp -1d38fd41ac5738126a66772113c86e44 gdb/testsuite/gdb.cp/readnow-language.exp -d5677310df7227521a046160202cd542 gdb/testsuite/gdb.cp/anon-struct.exp -60e4eeb84031577ef13c49f577a61ec2 gdb/testsuite/gdb.cp/pr17494.cc -4ac223d8c10686aa65fcc3bcbd746d23 gdb/testsuite/gdb.cp/typedef-operator.exp -de28a705c2ece829611f015aa519e070 gdb/testsuite/gdb.cp/templates.cc -eb389225d188b0f13900d5616fbd6102 gdb/testsuite/gdb.cp/nsnested.exp -2ed5b7b4afc1f45ac825af56833d9025 gdb/testsuite/gdb.cp/virtfunc.exp -3c9485081f6934e17b1e231513d60ac3 gdb/testsuite/gdb.cp/pr9631.cc -740cd8ee85fe40d756a054d13465f8aa gdb/testsuite/gdb.cp/nested-types.exp -ad033865c5fe1d2b1ced07b0aeddbade gdb/testsuite/gdb.cp/non-trivial-retval.exp -4b1557ca2d2d17c8b4a96bf9fd97960a gdb/testsuite/gdb.cp/mb-templates.cc -fa9e9a53ed6757b635525d7b1297d66d gdb/testsuite/gdb.cp/cplusfuncs.exp -a12de69764e7067d9114638854ff5970 gdb/testsuite/gdb.cp/printmethod.exp -0d42c6437c9e7bde2f025b84860b70d4 gdb/testsuite/gdb.cp/rvalue-ref-overload.cc -3d8a83fd6379efa0e60ec764605213c9 gdb/testsuite/gdb.cp/cp-relocate.exp -60203dd6658f47268f29dd42c6973517 gdb/testsuite/gdb.cp/temargs.exp -bbcbe627005c21d72a542652c07bccf1 gdb/testsuite/gdb.cp/ref-types.cc -739785a0c754c53bfa35210c5bde4578 gdb/testsuite/gdb.cp/virtfunc.cc -8749ef34fd124ef84df91fd9c474a841 gdb/testsuite/gdb.cp/rvalue-ref-casts.exp -b4e27711f6e1b4b16df591b4acd7bdf1 gdb/testsuite/gdb.cp/hang3.cc -e52500a193ba47aca11e4670cfcc8d19 gdb/testsuite/gdb.cp/mb-inline2.cc -feb819b43dbe4b5c8af03a9f050c6d04 gdb/testsuite/gdb.cp/virtbase.cc -bec5831953699a0daf2274369c6f1ed1 gdb/testsuite/gdb.cp/hang.H -5ec30285b47c47113a079bf278a8335b gdb/testsuite/gdb.cp/psymtab-parameter.exp -06a4a6cbdd4b8c453468647978aed84c gdb/testsuite/gdb.cp/pr10728-y.cc -f3de2761c1bc651d18ea64791a730a0d gdb/testsuite/gdb.cp/ptype-flags.cc -bd55b2c0d3910b14411d75e13ca8e301 gdb/testsuite/gdb.cp/namelessclass.S +49100755021ca7c087da8ecb66a5ad40 gdb/testsuite/gdb.cp/nsalias.exp +2d86aec616e85dccfce62d994ffd22c2 gdb/testsuite/gdb.cp/typedef-operator.exp +d35ad7023fbe864b81f9469bbee7c048 gdb/testsuite/gdb.cp/gdb1355.cc +99d29f9d6336bc4efbc71a880e29c047 gdb/testsuite/gdb.cp/typed-enum.cc +b775fab19cefc0349d822fcf7cafb9ee gdb/testsuite/gdb.cp/userdef.cc +4163c90b3b73f571817146d4e6d9156d gdb/testsuite/gdb.cp/debug-expr.exp +467acace9b161cc2dfb7c1f963efa868 gdb/testsuite/gdb.cp/expand-psymtabs-cxx.exp +a56357cf269748a27f00fcf5c7fc2daf gdb/testsuite/gdb.cp/rvalue-ref-overload.exp +0a15a0bc517ee0acca862308c89de14b gdb/testsuite/gdb.cp/pr-1023.cc +a67c530de26c5af165d941150ada6992 gdb/testsuite/gdb.cp/chained-calls.exp +f262a82c3d022af1f1ac4a1174fb838a gdb/testsuite/gdb.cp/parse-lang.exp +6f81b17762ad5010cdc22e8f98148ad9 gdb/testsuite/gdb.cp/derivation.cc +d172360577241af06c3a52cc8e725747 gdb/testsuite/gdb.cp/no-libstdcxx-probe.exp +4e402d8c3d4006f294952831e26242fa gdb/testsuite/gdb.cp/method2.cc +9f2ae711d25b6cbd4fdeccb573b167bb gdb/testsuite/gdb.cp/step-and-next-inline.exp +1b543cda35784febaa281c41fcb6d350 gdb/testsuite/gdb.cp/maint.exp +fa88dcd56730da0447f3d14fe40a5cd0 gdb/testsuite/gdb.cp/ambiguous.cc +eefd2123b07480df41eaa0877ec1217d gdb/testsuite/gdb.cp/expand-sals.exp +83a369138b4ba004bd219689773a618a gdb/testsuite/gdb.cp/dispcxx.cc +a07ab193eac03daa0ebf25fdbc117b99 gdb/testsuite/gdb.cp/pr-1023.exp +8e4b2ec93a4297786a9274577d1d107b gdb/testsuite/gdb.cp/enum-class.exp +326d0d61d12b96a980f38690914453a2 gdb/testsuite/gdb.cp/casts.exp +b9680d7884bccdf746b6799f1b8d0c16 gdb/testsuite/gdb.cp/arg-reference.cc +0bd9696744a79998d4e3fe791b5c82d7 gdb/testsuite/gdb.cp/watch-cp.exp +9778741ff57f1d02bbdb157b4c3de30c gdb/testsuite/gdb.cp/step-and-next-inline.h +2088f98bb23167ea5e0c8b394c560519 gdb/testsuite/gdb.cp/annota2.cc +7bc221229416a598731b310ff3ef6472 gdb/testsuite/gdb.cp/gdb1355.exp +547eb75fb8c08732c3505f115f06bfab gdb/testsuite/gdb.cp/static-method.exp +9a71e4ad46cd645c3b6a95464264d557 gdb/testsuite/gdb.cp/print-demangle.exp +87fb8675ba9878ac2a57466c9060a227 gdb/testsuite/gdb.cp/mb-inline1.cc +e7b22c1d8655bb88f4a8d95e823ee1e3 gdb/testsuite/gdb.cp/gdb2384.cc +30d5c2fdd51d4573cb587e9b9c59c95c gdb/testsuite/gdb.cp/static-print-quit.exp +87d44a92c80587fb49e5eb3a1d4ed13a gdb/testsuite/gdb.cp/wide_char_types.exp +6edd3fc723bcfb995d620b89eab115f4 gdb/testsuite/gdb.cp/ovsrch.h +252b6ef1bb0449bfe38cf338a3d2dc14 gdb/testsuite/gdb.cp/breakpoint.cc +98b481f7f564cc50bdd046685fa445eb gdb/testsuite/gdb.cp/breakpoint-locs.cc +9f098e4f2712a5200f9f1e014e0bc5b4 gdb/testsuite/gdb.cp/pr12028.exp 31b4ca24a68ac8ff4bf148d6a8c8c72c gdb/testsuite/gdb.cp/nsstress.cc +0b448b57839da16197357c883ae4f6bd gdb/testsuite/gdb.cp/exceptprint.exp +ee5b697a168309f087bed8d4e2f620b5 gdb/testsuite/gdb.cp/no-dmgl-verbose.exp +4943ed780f16c0a9197d7fb80d849039 gdb/testsuite/gdb.cp/namespace-enum.exp +5aa100b253777f14d000cbac2d0a5c31 gdb/testsuite/gdb.cp/namespace-nested-import.cc +6406e6ee585a072d5570893572892688 gdb/testsuite/gdb.cp/virtbase2.exp +5b440f50304821cff05393900413b147 gdb/testsuite/gdb.cp/typedef-operator.cc +ec6011082f2dafdddab30f65e167625e gdb/testsuite/gdb.cp/pr17494.cc +024581dbc687bf128e740e0d3d9ee5ad gdb/testsuite/gdb.cp/cpexprs.cc +ea1d00382bdf2d5005a4c5ed38502407 gdb/testsuite/gdb.cp/bool.exp +61e293cd39db4588035377667c7bedf6 gdb/testsuite/gdb.cp/koenig.cc +46fa6742f8b1679cf66c62f2960825ab gdb/testsuite/gdb.cp/cttiadd3.cc +b47079ea6e7b3a5a6900a3663fcf7f5c gdb/testsuite/gdb.cp/ovldbreak.exp +2989a9651802067d7b3b259ac1a416e9 gdb/testsuite/gdb.cp/filename.exp +8dcb90cbb27bddf3e8526cb9010e9ffa gdb/testsuite/gdb.cp/mb-inline2.cc +a9f26b9a3b0f52a35ebb3af1d43a18a4 gdb/testsuite/gdb.cp/nested-types.cc +a5ede23bd42cb38b4dffdb32304d3a7a gdb/testsuite/gdb.cp/local-static.exp +ae7cb23590054d92ff52cae70b91614b gdb/testsuite/gdb.cp/infcall-dlopen.exp +ad66f08fb4af3131a9c88e04f591350f gdb/testsuite/gdb.cp/typedef-base.cc +684c094a1a4ec1d7edc29f2bd3c0e881 gdb/testsuite/gdb.cp/ptype-flags.cc +fa9a6c83308f95819981262ef8b99aae gdb/testsuite/gdb.cp/chained-calls.cc +3caf88d1c36be27749f57e4a62adef6e gdb/testsuite/gdb.cp/derivation2.cc +2cfb40b86367c5e651147f419c05f8c7 gdb/testsuite/gdb.cp/pr9067.cc 53d65c3b49d4d39b7a1c8ff6d68c8a65 gdb/testsuite/gdb.cp/method.cc -0e779e0aeabb75f8924b4434abd5ee59 gdb/testsuite/gdb.cp/rvalue-ref-types.cc -13d9c55027dad310d53a08b8f82d0e37 gdb/testsuite/gdb.cp/no-libstdcxx-probe.exp -57677b266c06366dbf7984c9b1b67bd6 gdb/testsuite/gdb.cp/watch-cp.exp -80c4475d52ab3a6fc68d648d3ea88671 gdb/testsuite/gdb.cp/ptype-cv-cp.cc -c139ae15a03fa899e7d305e3d2cf925e gdb/testsuite/gdb.cp/namespace1.cc -c8f49cb14ad2747269d4c42534d6ca6e gdb/testsuite/gdb.cp/scope-err.cc +052032b2f25059e9882753fdb80b8108 gdb/testsuite/gdb.cp/anon-union.exp +c098e6c182aeec69088189f8640b48e3 gdb/testsuite/gdb.cp/pr10728-x.cc +84ec5c53170e067e4c42c36ddba6f4e9 gdb/testsuite/gdb.cp/subtypes.cc +d20e738c0797b2dc645e16baa9b9cb5b gdb/testsuite/gdb.cp/cplabel.exp +d75b3e4ee1e9f69db8812fb186469241 gdb/testsuite/gdb.cp/exception.cc +9e6eb3154e7add847ac4a84a999f2b2a gdb/testsuite/gdb.cp/cttiadd1.cc +961d78316216bd2da732f482fd697443 gdb/testsuite/gdb.cp/namespace1.cc +6961624ff718bd61366f2f9466cb2e62 gdb/testsuite/gdb.cp/cpexprs.exp +671dcef92c4d1c7bbd5d81faeaaa3870 gdb/testsuite/gdb.cp/step-and-next-inline.cc +57d3eba3d932e2adeeae0697e757c474 gdb/testsuite/gdb.cp/ena-dis-br-range.exp +cb16e6490e5e929f97403c29fb1f5257 gdb/testsuite/gdb.cp/casts03.cc +1f22138d0af0b541d7dd1418b15e133d gdb/testsuite/gdb.cp/anon-ns.cc +d6ed226431adc34de1f41f2c2bc2168a gdb/testsuite/gdb.cp/overload.cc +1b230ab8da1b477237f0e769d5bd1af3 gdb/testsuite/gdb.cp/operator.cc +33d446a0f0e272dad396c2da8012d373 gdb/testsuite/gdb.cp/gdb2495.exp +f5256ab57466501f85c67270618bff0e gdb/testsuite/gdb.cp/wide_char_types.c +47671ea57183a66ab68293a6c65b777d gdb/testsuite/gdb.cp/infcall-nodebug-c-d1.exp +7e5fb50faba17570c292590ee43e5149 gdb/testsuite/gdb.cp/expand-psymtabs-cxx.cc +40669b75695f2153ba1de7372d68775a gdb/testsuite/gdb.cp/operator.exp +7a667af8eb784a58d8a9ac0b78b01b93 gdb/testsuite/gdb.cp/class2.exp +1d3d82048801c3fed7485bd2c34250d6 gdb/testsuite/gdb.cp/ref-types.cc +fd19743f531439b9a94078a0e5f3ed18 gdb/testsuite/gdb.cp/virtfunc.exp +abd3dc80941e0436b2261f337e0155bd gdb/testsuite/gdb.cp/call-c.cc +c860fa0336665394d83481cf8148603e gdb/testsuite/gdb.cp/nsnested.exp +b9e8a4c66447c48f63bdb0fc9f3c9b81 gdb/testsuite/gdb.cp/var-tag.cc +aca9f82f1fa1c459a197c05f99f8e093 gdb/testsuite/gdb.cp/call-c-1.c +d77ec696acc1cb47a79cda7f86fe4ac1 gdb/testsuite/gdb.cp/namespace-nested-import.exp +12ee1b9f2c0f424177624ea104e837d1 gdb/testsuite/gdb.cp/converts.cc +87a27413a5442834e2fb1c631a5e6d29 gdb/testsuite/gdb.cp/anon-struct.exp +264ba639f5bcaa469b1c881d13e7c6fd gdb/testsuite/gdb.cp/using-crash.cc +148e01965e44852814dc67c6d742eca8 gdb/testsuite/gdb.cp/local.exp 55268c22c0ae3a64d769ce8101d70f11 gdb/testsuite/gdb.cp/pr12028.cc -c133f0cea4d86f7c7ae08207102a3ee0 gdb/testsuite/gdb.cp/gdb2384-base.cc -191caa91854353f7d6124a14dcb46c52 gdb/testsuite/gdb.cp/vla-cxx.exp -f29c93d770a2b46a744707e1ac010f92 gdb/testsuite/gdb.cp/ovsrch1.cc -f5f77dec2645193d70450446d3353761 gdb/testsuite/gdb.cp/casts.exp +340808cdc38121e6b44b31fbb05e48cb gdb/testsuite/gdb.cp/overload.exp +5d1e07ca7bb82c2d0c3396853826d33f gdb/testsuite/gdb.cp/baseenum.exp +5d8d242dee89708feb8a89dbf03f3c6b gdb/testsuite/gdb.cp/printmethod.cc +f8e1c2c3148e7207ac7b6b870573241c gdb/testsuite/gdb.cp/class2.cc +e4288b2b06e48c1de150298790b296fa gdb/testsuite/gdb.cp/virtfunc2.exp +9592e4ba6f67527839c1a0910ee82820 gdb/testsuite/gdb.cp/cp-relocate.cc +7c3e855ea8993444826509f88689a15e gdb/testsuite/gdb.cp/cttiadd2.cc +22506159570f8649f32556e2abc91a12 gdb/testsuite/gdb.cp/nsnoimports.exp +95b6dd9dca60fbcb057960b7f5d98825 gdb/testsuite/gdb.cp/minsym-fallback.h +3a51a206797434206a6069ae953367d5 gdb/testsuite/gdb.cp/breakpoint-locs.exp +06a4a6cbdd4b8c453468647978aed84c gdb/testsuite/gdb.cp/pr10728-y.cc +a9f46cf38b3ff15bd0676b437d81ec48 gdb/testsuite/gdb.cp/psmang.exp +b60a383d66ca4a24f9a75927e6aef380 gdb/testsuite/gdb.cp/rvalue-ref-casts.exp +f5af8d3935b0169fd733443150637244 gdb/testsuite/gdb.cp/smartp.exp +e42c5cbca908bfb957d959064a61f367 gdb/testsuite/gdb.cp/rtti.exp +644ab3d8721ea40db03193f767593221 gdb/testsuite/gdb.cp/gdb2384-base.cc +058337db2868a995f2c7739216c33db7 gdb/testsuite/gdb.cp/printmethod.exp +f40156678367d8a8fbcaa2829193a4ba gdb/testsuite/gdb.cp/pass-by-ref.exp +7ea935b17f85a68b44c7c32fe9cd10b0 gdb/testsuite/gdb.cp/watch-cp.cc +5f0daf95673b52593be112f23256d4a6 gdb/testsuite/gdb.cp/align.exp +ed1f6ad5dddfb9e7a2732cdb8a9441e5 gdb/testsuite/gdb.cp/impl-this.cc +eaa3696220c106074f16186d7576f15a gdb/testsuite/gdb.cp/koenig.exp +02e220ce40544fbcedabe4bb11864ac8 gdb/testsuite/gdb.cp/pr9067.exp +07fa7f618722031893284e4df11fe13e gdb/testsuite/gdb.cp/pr-1210.cc +e5b949cf38cb6a762700a38244ff6671 gdb/testsuite/gdb.cp/local-static.cc +96bb26874eb832ef56da96bd8f4ae24e gdb/testsuite/gdb.cp/re-set-overloaded.cc +a1a5859eef3a5f3288144a272e67e145 gdb/testsuite/gdb.cp/impl-this.exp +cfbc596ef4fc6abdaaebdae7591a61c6 gdb/testsuite/gdb.cp/hang.exp +2a43818cf89eebed43b06afcc2d4f8ba gdb/testsuite/gdb.cp/meth-typedefs.cc +0faa404871787b307fc9c0c522615dcb gdb/testsuite/gdb.cp/constexpr-field.cc 0ce32496dc6cd875ca8b8eee51076723 gdb/testsuite/gdb.cp/pr9594.cc -abd431c9bb13951733c5fcfebc55e2b4 gdb/testsuite/gdb.cp/expand-psymtabs-cxx.cc -0523cf50e5acc054e1942ad242c8cc59 gdb/testsuite/gdb.cp/watch-cp.cc -be22cb71dad31a66392dd8efb77da535 gdb/testsuite/gdb.cp/many-args.cc -01e2e57a85da25f0e4365c9fa09b7aa2 gdb/testsuite/gdb.cp/var-tag.cc -ca81f4b612c308c9997548634f889034 gdb/testsuite/gdb.cp/iostream.exp -d29cf1532049c1ac81d946a7fe1b32a8 gdb/testsuite/gdb.cp/pr12028.exp -c4ecb852789813fddc1264edb01b009b gdb/testsuite/gdb.cp/extern-c.cc -75b1693b5dbe6afc245f5a22e70932fd gdb/testsuite/gdb.cp/constexpr-field.cc -9a8d11c560368e58accf599c25d9af54 gdb/testsuite/gdb.cp/minsym-fallback.exp -2898b92beb2a2655abbc1b645e8d5ffc gdb/testsuite/gdb.cp/abstract-origin.cc -f0d7631b482d81260b999c29fc484c9a gdb/testsuite/gdb.cp/nsstress.exp -a73676e467050e6c99c44e4d4d548ca4 gdb/testsuite/gdb.cp/re-set-overloaded.cc -0b00846cb7b7231122620bef3f36ad51 gdb/testsuite/gdb.cp/ovsrch.h -5f1431125d1f4bf8892f762f8a3a5e71 gdb/testsuite/gdb.cp/ambiguous.exp -76fd5d0dd82a329d12410e6b32a6a8c8 gdb/testsuite/gdb.cp/ovsrch2.cc -517915e1bef9c2163edfe73c49f4e488 gdb/testsuite/gdb.cp/minsym-fallback.h -79251d7cd0b8cd9d6ae43985894cb934 gdb/testsuite/gdb.cp/static-print-quit.cc -e3aebbe2903d14cd69b8cb32e3c41e7d gdb/testsuite/gdb.cp/enum-class.cc -1a9838b8cb775655348e3c1bd389c905 gdb/testsuite/gdb.cp/minsym-fallback.cc -2687c01d0e589ae4f85f5e8242b3632c gdb/testsuite/gdb.cp/rtti.h -ea91ae11df292cdc80e8164b3ec66668 gdb/testsuite/gdb.cp/nsusing.exp -1401b666d093c32c0c3ab0d8fa1b2894 gdb/testsuite/gdb.cp/member-ptr.cc -eff5be1e7f93ca9ec0140a2fc66946fe gdb/testsuite/gdb.cp/annota3.exp -24106fbd66d2d099a55c93a01b2bcac6 gdb/testsuite/gdb.cp/many-args.exp -1ce5f21034573cb5878106360a9796d9 gdb/testsuite/gdb.cp/virtbase2.exp -de93b4cb9b214f709471838bc61eccbc gdb/testsuite/gdb.cp/debug-expr.exp -9568ca4dc8562f7bc68a6504dcc323d8 gdb/testsuite/gdb.cp/cttiadd.cc -4e402d8c3d4006f294952831e26242fa gdb/testsuite/gdb.cp/method2.cc -89f70140e72e27531dc4e94ee1e65c3c gdb/testsuite/gdb.cp/casts.cc -a7ff0634a97666e09104ada41f9af6b9 gdb/testsuite/gdb.cp/method.exp -12ee1b9f2c0f424177624ea104e837d1 gdb/testsuite/gdb.cp/converts.cc -0a15a0bc517ee0acca862308c89de14b gdb/testsuite/gdb.cp/pr-1023.cc -2897074fa3ecf361790ffc09c2f40509 gdb/testsuite/gdb.cp/classes.exp -94b5b4589b38dbe1bdda50471850330c gdb/testsuite/gdb.cp/paren-type.exp -2d5a3f3b8c870b803e657d40ceae038e gdb/testsuite/gdb.cp/pr9167.cc -51d120fe471aef66f5fbba6da6ba974a gdb/testsuite/gdb.cp/misc.cc -32626ee3f6731e6648cb2c79ce9bec72 gdb/testsuite/gdb.cp/wide_char_types.exp -d147f29e4035d7ebbaa76dd68918f2dc gdb/testsuite/gdb.cp/m-static.cc -1b230ab8da1b477237f0e769d5bd1af3 gdb/testsuite/gdb.cp/operator.cc -2e902d980a259189eabccce1cf8b8fbe gdb/testsuite/gdb.cp/hang2.cc -8ab43ca0210931b24528cb06a8df4cb7 gdb/testsuite/gdb.cp/dispcxx.exp -ba8f69e3900de71c9bb44acdb7f6cea7 gdb/testsuite/gdb.cp/bool.cc -d8c8c0c6919fcb150ece9ce24fb7e975 gdb/testsuite/gdb.cp/gdb2495.exp -2d4f69013e577f1fb458252e45b208ef gdb/testsuite/gdb.cp/except-multi-location-lib.cc -73454d218020d2f50b69df6440168bff gdb/testsuite/gdb.cp/derivation.cc -ce9b40005ce1341f2704384f3dce6550 gdb/testsuite/gdb.cp/virtbase.exp -dc2aa85b38984d70528b142022724a9f gdb/testsuite/gdb.cp/maint.exp -c50390bc352d2d8f0f4bae724684c338 gdb/testsuite/gdb.cp/overload-const.exp -c098e6c182aeec69088189f8640b48e3 gdb/testsuite/gdb.cp/pr10728-x.cc -7bd50ccee3b6d1f6184f3de1b340a5b3 gdb/testsuite/gdb.cp/mb-templates.exp -6aa7032278aaea92152975c284574474 gdb/testsuite/gdb.cp/impl-this.cc -eceaf31c51463d14f729c422c1bc233f gdb/testsuite/gdb.cp/member-name.exp -cc19eed5c513622b0c6c2f988d0a1b32 gdb/testsuite/gdb.cp/minsym-fallback-main.cc -00f79952993278dfde191ac254fbb227 gdb/testsuite/gdb.cp/static-method.exp -d0a125d133dce8aba59fcc5a0aa51ff9 gdb/testsuite/gdb.cp/namelessclass.cc -fa88dcd56730da0447f3d14fe40a5cd0 gdb/testsuite/gdb.cp/ambiguous.cc -a26d36ca591ded2122493ce83be26bf0 gdb/testsuite/gdb.cp/gdb2384-base.h -eba49b62152adbad215384092b13cfa9 gdb/testsuite/gdb.cp/subtypes.h -b5e99bd82fdbd136f2dc460f5f7695cc gdb/testsuite/gdb.cp/namespace-enum.exp -bad86c2e1afe5fda9d2592b8c4d2753e gdb/testsuite/gdb.cp/rvalue-ref-params.cc -198dee88ddb2c4a051389c0568f9bcef gdb/testsuite/gdb.cp/try_catch.cc -5ba27af4633e8661dbb5b58f54905d85 gdb/testsuite/gdb.cp/pr-1210.exp -c1067c1418a446026fdf3e339489899c gdb/testsuite/gdb.cp/subtypes.exp -c2a1fa9443a23050eb3348261dfb2eb6 gdb/testsuite/gdb.cp/member-name.cc -b469609c1bc8930aede342f8db025267 gdb/testsuite/gdb.cp/m-static.h -a31e8b6f2b3e0bb9fcee8016866b5420 gdb/testsuite/gdb.cp/typedef-base.exp -48ff053e621f5f2808ec771891c52966 gdb/testsuite/gdb.cp/namespace.exp -eb9fa965f2a0524d3aca160496a65b7a gdb/testsuite/gdb.cp/classes.cc -25a298214cb72a0d81b16bbd8f9a032f gdb/testsuite/gdb.cp/try_catch.exp +0eaa624b3f24af465468045c87e11a3b gdb/testsuite/gdb.cp/pr10687.exp e748c1a7bcb32dae45925a92fb033b45 gdb/testsuite/gdb.cp/nsdecl.cc -d6ed226431adc34de1f41f2c2bc2168a gdb/testsuite/gdb.cp/overload.cc -8a56a2598ffa721b56ace36520d6a5a4 gdb/testsuite/gdb.cp/pr-1023.exp -4379638beb76a4ab65a23fa8e7040fee gdb/testsuite/gdb.cp/psmang.exp -ab6103764d2500422fd7f00cd819a303 gdb/testsuite/gdb.cp/rvalue-ref-casts.cc -b3f91295ed2afdafdbfd2870114e5d10 gdb/testsuite/gdb.cp/psmang1.cc -9da7c7ed435aebaf5117c6237bbf50d2 gdb/testsuite/gdb.cp/local.exp -4d83ffab32df1efbc9fb67134c399455 gdb/testsuite/gdb.cp/nsdecl.exp -9c9c866ed64f4e19f2a25f4a834afe4a gdb/testsuite/gdb.cp/overload.exp -5b796da61e4885a5bff422b69ceb3258 gdb/testsuite/gdb.cp/punctuator.exp -9a9d0990d77b9debe847239f0dd31f4e gdb/testsuite/gdb.cp/pass-by-ref.cc -aeab58a38f05838819bcbcd4d260611d gdb/testsuite/gdb.cp/readnow-language.cc -0fabc57cba90325073209a2a0c6f5fc5 gdb/testsuite/gdb.cp/nested-types.cc -b75c50234300f834a69d4bc1aba27680 gdb/testsuite/gdb.cp/subtypes-2.cc -8065b1a91e84056750d372a552c97c51 gdb/testsuite/gdb.cp/subtypes.cc -d896476b6b8bc56887371294736d9e96 gdb/testsuite/gdb.cp/infcall-dlopen.cc -7cb1546f89814f95ce3541c39652eed4 gdb/testsuite/gdb.cp/chained-calls.cc -ee106266457004ab38e609e662ac256a gdb/testsuite/gdb.cp/static-method.cc -e0b3fc6f128f278cd946eaa12ddabc1b gdb/testsuite/gdb.cp/nsnoimports.exp -f99f6c5db06dd0e2504499d1adf8d828 gdb/testsuite/gdb.cp/rvalue-ref-sizeof.exp -42864377115fbfb899742935db1c0b60 gdb/testsuite/gdb.cp/psmang2.cc -8c9e462b3fa07d3802c5b3a84d73f955 gdb/testsuite/gdb.cp/pr10687.exp -961c648cb6ff27bb4d8fc87a4436db4a gdb/testsuite/gdb.cp/var-tag-4.cc -b9078fb531603b52744957a15f36a0fd gdb/testsuite/gdb.cp/baseenum.exp -d7636ce231c2b3d1a7171b03e6b7233f gdb/testsuite/gdb.cp/class2.exp -383cfac4550b6a2f97103d66ba1fc67d gdb/testsuite/gdb.cp/arg-reference.exp -acf0cba87e7929ffae900cb497ec9b78 gdb/testsuite/gdb.cp/using-crash.exp -962005d2b693e188c75c38b829bd2b83 gdb/testsuite/gdb.cp/typeid.cc -29d81b64c76f26627a8787d4ed09f9ba gdb/testsuite/gdb.cp/align.exp -d31c9bb2931b3e816f1c68bb3166e8a7 gdb/testsuite/gdb.cp/converts.exp -0f7272094f6969e779fd8f17b9543806 gdb/testsuite/gdb.cp/member-ptr.exp -16c08511b4feb9a0871ec20a80ee2234 gdb/testsuite/gdb.cp/virtfunc2.exp -fcc9e47c9ee305071590d8add2b59269 gdb/testsuite/gdb.cp/cttiadd1.cc -fed698a7ca08d8059a7418213cd8fd96 gdb/testsuite/gdb.cp/cpexprs.cc -df11cb1835074902da6a4d0ad539ef4a gdb/testsuite/gdb.cp/namespace-enum.cc -33e6d7afd7c318893a5bbe2335a57cd8 gdb/testsuite/gdb.cp/fpointer.cc -248698eaff21afd544e922bf2e1bcccb gdb/testsuite/gdb.cp/var-tag.exp -124e409b3da1a43083d4e2a666543957 gdb/testsuite/gdb.cp/demangle.exp -2c50d667dc58f0dc80bb3f028d19a194 gdb/testsuite/gdb.cp/class2.cc -a1abb84be91ac8b94637a573849beba9 gdb/testsuite/gdb.cp/bs15503.exp -315b521dcde739761fb13b0d7ab837e8 gdb/testsuite/gdb.cp/cmpd-minsyms.cc -6921ba5aff8188d6f501e2532e0c8358 gdb/testsuite/gdb.cp/userdef.exp -0a09714e01b19058437763b1dee5db55 gdb/testsuite/gdb.cp/rtti2.cc -a3c80a0b291239bc5f0921f3168bbe8e gdb/testsuite/gdb.cp/namespace.cc -64a23af88d89799a0e7f2500f5e73183 gdb/testsuite/gdb.cp/mb-ctor.exp -015910fc38b733909d302a9c72d92234 gdb/testsuite/gdb.cp/gdb2384.cc -6ff8095dbfede60920fcc6126be582dc gdb/testsuite/gdb.cp/exceptprint.exp -4a18779b3b6ea53536cd7bb3db0d5fae gdb/testsuite/gdb.cp/m-static.exp -d8d5b69099af7ddd450424115aaee34a gdb/testsuite/gdb.cp/anon-ns2.cc -b57357901e36451b0b3bee820108b82e gdb/testsuite/gdb.cp/m-data.exp -5f7d70f6a52353e59fd64347b666bc50 gdb/testsuite/gdb.cp/pr17132.exp -603451e82955b16483601d48016a5847 gdb/testsuite/gdb.cp/exception.cc -9fb191f9bb8af85413e98fd44099b00e gdb/testsuite/gdb.cp/save-bp-qualified.exp -239f22cc07594d3af08cf0f1b2f79990 gdb/testsuite/gdb.cp/destrprint.exp -f43fc35a8273dd7c61ffd615c25ccb9c gdb/testsuite/gdb.cp/meth-typedefs.cc -2073f045c78990789c6ea8e19affaf33 gdb/testsuite/gdb.cp/pr10728-x.h -3392b4be32a4c703a94740abf585b834 gdb/testsuite/gdb.cp/cplusfuncs.cc -50c04b071b03ead2ec400289f90aa359 gdb/testsuite/gdb.cp/ptype-cv-cp.exp -810f57bdeb764d0c1ae659005496d328 gdb/testsuite/gdb.cp/no-dmgl-verbose.exp -b31280ba304c582ebe289c7bffb25680 gdb/testsuite/gdb.cp/ovsrch3.cc -e1b1f91b754a87cc5296130296b13808 gdb/testsuite/gdb.cp/infcall-nodebug-lib.c -762058858ea620790b222185758c91b1 gdb/testsuite/gdb.cp/arg-reference.cc -3815e6c2b15680f9a54f1831a2a3ef05 gdb/testsuite/gdb.cp/shadow.exp -b2b3bdbd772e880d537b80fd18973b89 gdb/testsuite/gdb.cp/static-print-quit.exp -1a12a56eee1d93bdead22c3ca9edd58e gdb/testsuite/gdb.cp/nsimport.cc +985f4e8e4d4b66df3432b760c2d90daf gdb/testsuite/gdb.cp/rvalue-ref-overload.cc +dbbee5c05ae5d4534c09200762e47088 gdb/testsuite/gdb.cp/namespace.cc +3567ebcf9375e675de808e16fe2f1365 gdb/testsuite/gdb.cp/method2.exp +03d8439034287a3749e696c3435cb025 gdb/testsuite/gdb.cp/mb-ctor.exp +31177ab8f64ee19f8f64f5437d991e6d gdb/testsuite/gdb.cp/iostream.exp +1150673c77ae0f77656fdf90fe90a02f gdb/testsuite/gdb.cp/ref-params.exp +df1fae2825abd211685f5e4ae7b8f0d5 gdb/testsuite/gdb.cp/expand-sals.cc +321225da00b63d88327f083df208038d gdb/testsuite/gdb.cp/except-multi-location-lib.cc +740e08f6be2000077fc18930b4586a76 gdb/testsuite/gdb.cp/virtbase.exp +1b6b25326c7c201e9ff2f03e1ef1d1ad gdb/testsuite/gdb.cp/var-tag.exp +b92f786b59fff39ed4bb7819fe56793d gdb/testsuite/gdb.cp/pr9631.exp +b530fb5a0b28e1f74998ae7d57f7434b gdb/testsuite/gdb.cp/virtfunc.cc +559384dcd0a6e86521e31edfe64b7f88 gdb/testsuite/gdb.cp/ovsrch4.cc +c1777375e9d83bdb524125652576e139 gdb/testsuite/gdb.cp/member-name.exp +69269d741586a6189dd49eb50d427aeb gdb/testsuite/gdb.cp/classes.exp +ded5bd8edfaeec567be1a6bba8a3e1c7 gdb/testsuite/gdb.cp/disasm-func-name.cc +29ce544d97d34088bcd246e19f61af1d gdb/testsuite/gdb.cp/exceptprint.cc +9df313cd4bcb26235746d8955eb5e77a gdb/testsuite/gdb.cp/namelessclass.exp +4471789ae2892ad03a59049da50da070 gdb/testsuite/gdb.cp/nextoverthrow.cc +3c840c618108f235bdcb8f777e2c6bc5 gdb/testsuite/gdb.cp/annota3.exp +69cb6986c135503a9eafef2abdeae166 gdb/testsuite/gdb.cp/enum-class.cc +4d0d493c86492189a64f38a3594d1697 gdb/testsuite/gdb.cp/pr9167.exp +89f70140e72e27531dc4e94ee1e65c3c gdb/testsuite/gdb.cp/casts.cc +6d25857578709a1eaea2e48d4c22aff0 gdb/testsuite/gdb.cp/cpsizeof.cc +2f60bcb09597a9cff05a60ec9aea93fc gdb/testsuite/gdb.cp/rtti1.cc +2e4c7ea866f0fdd572994920edbca396 gdb/testsuite/gdb.cp/filename.cc 7844dbfb63d5ee815db3c14cb769c796 gdb/testsuite/gdb.cp/m-static1.cc -7a7b42c46c421df388b71847b0caff4a gdb/testsuite/gdb.cp/breakpoint.cc -5221a33cd93ea0eba10ad76e6c55a030 gdb/testsuite/gdb.cp/anon-union.cc -13572264b142a30a6af275bf009be658 gdb/testsuite/gdb.cp/call-c.exp -acd7edc00f28316d1505b31f1ecd1dbb gdb/testsuite/gdb.cp/vla-cxx.cc -e6bbc12bae29b83d922b39735265dbfd gdb/testsuite/gdb.cp/nsnoimports.cc -68a879f09c665340bf2afbdc319a5faa gdb/testsuite/gdb.cp/cpsizeof.cc -3d094c7641bf2b429c7b4be4024a111f gdb/testsuite/gdb.cp/nsrecurs.exp -923e8df050d19e1c25a51df276ffd8ae gdb/testsuite/gdb.cp/m-data.cc -dff8c4cd7d9a12a0fdae4bd9f011b26d gdb/testsuite/gdb.cp/rvalue-ref-params.exp -9d95e83c1a5a477d163c15beec218cb5 gdb/testsuite/gdb.cp/nextoverthrow.cc -91b93a1841b06b03ec91d590a88874e9 gdb/testsuite/gdb.cp/smartp.cc -f8448b5616098a93775b988c51bb0e9d gdb/testsuite/gdb.cp/anon-ns.cc -d735c2737237aa3cdaf44118af17689e gdb/testsuite/gdb.cp/ovldbreak.cc -3067991e2c54df5b8a05bf6858c90492 gdb/testsuite/gdb.cp/parse-lang.exp -5fe63cba56c8619b11b010223df49faf gdb/testsuite/gdb.cp/ref-params.cc -c2af93068b8e02afa407ef38d1f3b932 gdb/testsuite/gdb.cp/meth-typedefs.exp -e2e249ea660bac6d205c212022e40789 gdb/testsuite/gdb.cp/typedef-operator.cc -59995b26b273871937a91aba638d82f1 gdb/testsuite/gdb.cp/cpexprs.exp -b560d50a6833004d0abaa4e6d17065e3 gdb/testsuite/gdb.cp/ena-dis-br-range.cc -1784d3cc9e52f7b862e550988cbf2558 gdb/testsuite/gdb.cp/dispcxx.cc -da7bd51e8ca618c2402501947fc631df gdb/testsuite/gdb.cp/filename.cc -2cfb40b86367c5e651147f419c05f8c7 gdb/testsuite/gdb.cp/pr9067.cc -959148c3bb56afbdba0118818c2e3097 gdb/testsuite/gdb.cp/pr-574.cc -71f19e266df241e287887b359bcdace7 gdb/testsuite/gdb.cp/wide_char_types.c -8171ce4fa0ef6f7d6172ce8dd51567ed gdb/testsuite/gdb.cp/ref-types.exp -b47c0d635d8e8e60c23512b38734bede gdb/testsuite/gdb.cp/templates.exp -02d0cc878c364e08bf505f21db29d000 gdb/testsuite/gdb.cp/var-tag-3.cc -7166cff8422b01e5a35a75c8dc0ceac7 gdb/testsuite/gdb.cp/userdef.cc -c9a1e397208c60db57822effd7e9b704 gdb/testsuite/gdb.cp/derivation.exp -29f6b52a4e94c187aaf660090d99bd4f gdb/testsuite/gdb.cp/nsnested.cc -f586d75ae64069574aeb857d96f5b3b4 gdb/testsuite/gdb.cp/breakpoint.exp -6b2566e963923c89fdd72e9a524f6a0d gdb/testsuite/gdb.cp/cplabel.exp -27fa4b6f7e86fa8949c1429c7e485ab5 gdb/testsuite/gdb.cp/method2.exp -5d1b2ae331f76b7508c7e47d434e7a3f gdb/testsuite/gdb.cp/smartp.exp -1ac759e0b4807799bb1d611d92742774 gdb/testsuite/gdb.cp/ptype-flags.exp -04e82282fc3fa314f3ad60d0ec340862 gdb/testsuite/gdb.cp/operator.exp -68bb0bf53dce5538299e5202e3704858 gdb/testsuite/boards/cc-with-dwz-m.exp -9207e32b6ced4fb8f50c97ef85d22194 gdb/testsuite/boards/remote-stdio-gdbserver.exp -71051e10bf49847f88e8943bdeb11e02 gdb/testsuite/boards/stabs.exp -7a1a7e08803fcf618c3bd59d5b45099b gdb/testsuite/boards/cc-with-tweaks.exp -40531c4ee4a65718380024dadf4df032 gdb/testsuite/boards/local-remote-host-native.exp -d0dc125365f068012aeef72f2d2b80cd gdb/testsuite/boards/dwarf4-gdb-index.exp -828f7872e18bdd30e58ee5f66ad3260c gdb/testsuite/boards/fission.exp -e9320e142c0f005b362a1903dff6b94c gdb/testsuite/boards/native-gdbserver.exp -15da54164fbb0714d21404ef3fe03fd9 gdb/testsuite/boards/readnow.exp -03d7fa72f2193169a8bc2802c82866bd gdb/testsuite/boards/remote-gdbserver-on-localhost.exp -6b7429fb8db5c6a5f5e021a39465f022 gdb/testsuite/boards/local-board.exp -eaa42b0fbecff93697dcfb2f1ee20711 gdb/testsuite/boards/cc-with-dwz.exp -fefc90317d3a9b52721d455454c7434f gdb/testsuite/boards/native-extended-gdbserver.exp -4f4df928ccab13a83f671cc2739d0f49 gdb/testsuite/boards/local-remote-host.exp -3d5c8a266bfce0dba5b12c0f15e7a208 gdb/testsuite/boards/stdio-gdbserver-base.exp -02d8de6480215a02aecdcb289fe5e543 gdb/testsuite/boards/cc-with-gdb-index.exp -c645eae8cd37d74bab14d9e4ea1b7790 gdb/testsuite/boards/gdbserver-base.exp -6789c6893168f7dc11451a0464141d18 gdb/testsuite/boards/fission-dwp.exp -3ba1992ba6e41791ba4b4307e076d9a8 gdb/testsuite/boards/native-stdio-gdbserver.exp -bc4c3d134fa33f6b95f9394d31dbc0ed gdb/testsuite/boards/local-remote-host-notty.exp -23f472e4383801097334df2f0b635ede gdb/testsuite/boards/cc-with-debug-names.exp -c1cfaef6ddbaf0604a3c9e205e4400a5 gdb/testsuite/gdb.tui/main.exp -21fae566b38a617befe8f7e74089ef40 gdb/testsuite/gdb.tui/regs.exp -7b2c38f7d1c1224f144d6d2862ad342b gdb/testsuite/gdb.tui/tui-disasm-long-lines.c -a53c0326775ded36f887b7fca45cd624 gdb/testsuite/gdb.tui/corefile-run.exp -5e00bdf9b98c02321fec9a1c3276b94d gdb/testsuite/gdb.tui/basic.exp -405be1ecf8fcc57cb04f8017d057919f gdb/testsuite/gdb.tui/list.exp -b1ee5d3b1bf94de5d8b64bc7680891fd gdb/testsuite/gdb.tui/completion.exp -dc7aa349e013f6a69c9618d453453350 gdb/testsuite/gdb.tui/tui-disasm-long-lines.exp -69ba8a767b533951f7a4d7be59637e6d gdb/testsuite/gdb.tui/resize.exp -3af7eac10bd4f23c79d5b848078e87dc gdb/testsuite/gdb.tui/tui-layout.exp -90b63ebf92eb684a8908897d055b988b gdb/testsuite/gdb.tui/tui-layout.c -23ed20eb4300998c334aeb1060587352 gdb/testsuite/gdb.tui/empty.exp -21f85b4293079c122cac272bb1ce879b gdb/testsuite/gdb.tui/tui-nl-filtered-output.exp -dd21d3006ce0752c75549cccf28d45b0 gdb/testsuite/gdb.tui/winheight.exp -3c8c890002a0b4c738958050fcbdffa5 gdb/testsuite/gdb.testsuite/foreach_with_prefix.exp -eb8ca689fdf91f4d9427e1c4bdc5a9ba gdb/testsuite/gdb.fortran/vla-alloc-assoc.exp -c9e44f09294dc7bb7454f31317bc20c3 gdb/testsuite/gdb.fortran/common-block.exp -9dcb4a8bdd58cc7371fc8b12cfa83ab0 gdb/testsuite/gdb.fortran/vla-value-sub-arbitrary.exp -385e24d1dd3bdfe88a2d1000dbb524aa gdb/testsuite/gdb.fortran/info-modules.exp -5d97b2193920ecee894b7fd02d869d61 gdb/testsuite/gdb.fortran/derived-type-function.exp -530fb9ceedf90eccec6f1c6facbc112f gdb/testsuite/gdb.fortran/vla-ptr-info.exp -68dd2aa660909d7ef99e901e96fdc8af gdb/testsuite/gdb.fortran/type-kinds.exp -e8f98fb70cd6907b59e6320e1105c148 gdb/testsuite/gdb.fortran/max-depth.exp +b3a6773dc624999b477f69faa955cb67 gdb/testsuite/gdb.cp/save-bp-qualified.exp +196c897ad0648ec5c0553495dc2359f6 gdb/testsuite/gdb.cp/save-bp-qualified.cc +5991b94fa645eaa42faabcb8831417d4 gdb/testsuite/gdb.cp/nsnoimports.cc +17f81f00e485506f3c45a1ed8141bef6 gdb/testsuite/gdb.cp/scope-err.exp +52f9b66551f124153816d4ce8b001037 gdb/testsuite/gdb.cp/overload-const.cc +44ecacce3228a16d74272182b7e12da7 gdb/testsuite/gdb.cp/demangle.exp +23cecba931a124b7d37c789861cb9c84 gdb/testsuite/gdb.cp/anon-struct.cc +27716e62db3041c85da04748a67e93dc gdb/testsuite/gdb.cp/cp-relocate.exp +f7411ae9023cbdf29777e2a25f8a6ffc gdb/testsuite/gdb.cp/minsym-fallback.exp +2db372d5783a6e36871ea18a850b6f3d gdb/testsuite/gdb.cp/static-typedef-print.cc +7fb56410007afbdb8c68fce742a56ef8 gdb/testsuite/gdb.arch/amd64-invalid-stack-top.exp +8c157818024a296f944e596d5ea3bebc gdb/testsuite/gdb.arch/amd64-entry-value-paramref.cc +7c507f4dec42814fd0c77965cbaadff5 gdb/testsuite/gdb.arch/i386-mpx-map.exp +80f938abcdca3f255b0abfbedd5c899f gdb/testsuite/gdb.arch/powerpc-altivec2.s +f210acf8af1260a36c8d47344f93a315 gdb/testsuite/gdb.arch/amd64-byte.exp +e92a091784e89ed1ad45dae6fc4907c6 gdb/testsuite/gdb.arch/powerpc-power9.exp +278442ba4a9506eea4d650ffb7ce6b4d gdb/testsuite/gdb.arch/mips-octeon-bbit.c +e67b2303e7632b6af755bde5bb62add6 gdb/testsuite/gdb.arch/pr25124.S +afb32c73cf002edc198cc4a1cbc10e11 gdb/testsuite/gdb.arch/avr-flash-qualifier.exp +d8c8146355d6fde7e1e8495987e8aabc gdb/testsuite/gdb.arch/powerpc-aix-prologue.c +53de1b3db3c63bd3118dec8237ca41d4 gdb/testsuite/gdb.arch/amd64-stap-three-arg-disp.c +ab9fd1e0e8477bfc72bd982140d30a77 gdb/testsuite/gdb.arch/alpha-step.exp +7533c6d797b2d2861142e34011c1b077 gdb/testsuite/gdb.arch/powerpc-altivec.exp +0de8aca1308239916c3be303abc1e8b8 gdb/testsuite/gdb.arch/amd64-invalid-stack-middle.S +76b3fe6fa685467124b2cf30cdd4d0c5 gdb/testsuite/gdb.arch/aarch64-pauth.exp +68d8954043014a4bd46e71b98a117c6b gdb/testsuite/gdb.arch/x86-avx512bf16.exp +ca5b056ffb8b399d2e96b656af7f827c gdb/testsuite/gdb.arch/i386-pkru.c +f5280089d1ccd66f12aca34284dcb53f gdb/testsuite/gdb.arch/mips-octeon-bbit.exp +884c1ac51e631c717e4bb713815501ec gdb/testsuite/gdb.arch/aarch64-prologue.exp +0391963c3744a672d5d5ba3bcab684e9 gdb/testsuite/gdb.arch/i386-size-overlap.c +3454075bb7bdebac99d80645a185d954 gdb/testsuite/gdb.arch/i386-mpx-sigsegv.exp +dff8da09f857f5e43c54b9130e54a956 gdb/testsuite/gdb.arch/riscv-reg-aliases.c +ba3ede5278526b7a20c5c5c8683e5530 gdb/testsuite/gdb.arch/arc-analyze-prologue.S +66c25e1648a1279f671631e75387337d gdb/testsuite/gdb.arch/amd64-tailcall-cxx2.cc +96b91d9b8d277d2bb2b8bfbb5af95804 gdb/testsuite/gdb.arch/amd64-tailcall-noret.exp +246afc0eb0c5b8fafd1323ddd9b13f19 gdb/testsuite/gdb.arch/amd64-tailcall-self.exp +ae7fac87f05fddad07fe1647bc1eb6f4 gdb/testsuite/gdb.arch/powerpc-prologue.c +953fdeadef83f1dc2d07c902507446fa gdb/testsuite/gdb.arch/amd64-disp-step.exp +16146efe5f99566f813c8fe3e2d84695 gdb/testsuite/gdb.arch/riscv-tdesc-regs.exp +d86d9c51e8ccc47ea6d6507ef57cc9c1 gdb/testsuite/gdb.arch/powerpc-prologue-frame.S +963498d809581d3cd22b74614a30b322 gdb/testsuite/gdb.arch/powerpc-power7.s +763313efe7ccb57e39944e215b9ebec8 gdb/testsuite/gdb.arch/thumb2-it.S +91525b94557986d2be9cdf2916a7a059 gdb/testsuite/gdb.arch/ppc-longdouble.c +6b3aabecd4850df8557330df98b458bb gdb/testsuite/gdb.arch/s390-tdbregs.c +05fe6547e9893230ace4c1f4998828f3 gdb/testsuite/gdb.arch/s390-disassembler-options.exp +068e95ed6ae4620bdf31f53b6003a138 gdb/testsuite/gdb.arch/powerpc-power8.exp +ec87602126cdb1c099b1e050a78385e2 gdb/testsuite/gdb.arch/arm-cmse-sgstubs.exp +447d89008f625b60a6ac67cb162c77ca gdb/testsuite/gdb.arch/i386-avx512.exp +9c61341460c04b817f2ac47d960063d9 gdb/testsuite/gdb.arch/riscv-tdesc-regs-32.xml +b24846f8e212ad854aa45788027d4451 gdb/testsuite/gdb.arch/aarch64-fp.c +6d6af35197061867f04ec3a7557f992e gdb/testsuite/gdb.arch/e500-prologue.exp +cfa79e2df869b9a2c8dac8026fcaaa0e gdb/testsuite/gdb.arch/mips16-thunks-sinmain.c +c31e5dd4aa7d6aa5b8fd7398fe7697a8 gdb/testsuite/gdb.arch/riscv-tdesc-loading.exp +341f258c58ef438b7b7176c56ed8d613 gdb/testsuite/gdb.arch/amd64-tailcall-self.c +7e15fe36f59b8e04c5fb0265a6950c3e gdb/testsuite/gdb.arch/pa-nullify.s +0a573700bb139abcb2f4e296d61bdc8d gdb/testsuite/gdb.arch/powerpc-vsx2.s +5e2025787dc740a0f3b1aba8d88e3383 gdb/testsuite/gdb.arch/i386-disp-step.exp +94484554e05d92eb2ae852397227f794 gdb/testsuite/gdb.arch/amd64-entry-value-paramref.exp +53c1109cab7576269e238ec8bc0d487d gdb/testsuite/gdb.arch/i386-mpx-call.exp +aee4d265eb09e1bd806edbdda786ba73 gdb/testsuite/gdb.arch/riscv-tdesc-loading-03.xml +4ae767e2b75901c324db85b99135e4ce gdb/testsuite/gdb.arch/ia64-breakpoint-shadow.S +24d9d16faef0af213f325bb245bb6cd3 gdb/testsuite/gdb.arch/thumb-prologue.exp +9bf1b6293d130644408d561d924cfc1d gdb/testsuite/gdb.arch/riscv-tdesc-loading-04.xml +e99c67382d1f7ca3b57698daef1db876 gdb/testsuite/gdb.arch/i386-gnu-cfi-asm.S +a4b44663a9c9d2ac554ea371750489cf gdb/testsuite/gdb.arch/altivec-regs.c +a793882fbbcf70fccf1eaa65832c459e gdb/testsuite/gdb.arch/aarch64-prologue.c +6b493036b2ab05f5ef055e268e4ade15 gdb/testsuite/gdb.arch/i386-prologue-skip-cf-protection.exp +8fcb925d2d6061733cb8a87d0d556c16 gdb/testsuite/gdb.arch/riscv-unwind-long-insn.exp +9d54690cf6654adbc0859216794712a1 gdb/testsuite/gdb.arch/riscv-tdesc-loading-01.xml +ba3d5bb7d16c7006901eaffa67ef46e4 gdb/testsuite/gdb.arch/altivec-regs.exp +0eaaaff20658c6f8b566330ce38a4bc0 gdb/testsuite/gdb.arch/s390-multiarch.exp +a5a4a921977ef8c2e191596813fba75f gdb/testsuite/gdb.arch/amd64-entry-value-param.c +031dc08c0fd1783577516b4a3e60ca97 gdb/testsuite/gdb.arch/amd64-disp-step-avx.S +a066c1bd2083d9465301a3dd8c981608 gdb/testsuite/gdb.arch/amd64-tailcall-self.S +4ffd707d94173d96555f77447f84d5fe gdb/testsuite/gdb.arch/aarch64-brk-patterns.c +d108c03b0c49d0ad208201f2b9615e18 gdb/testsuite/gdb.arch/s390-multiarch.c +0ca29e4ada95bfeac98a2f7847afab3b gdb/testsuite/gdb.arch/iwmmxt-regs.exp +fcd0dd3432e917999e1b351b9467f52f gdb/testsuite/gdb.arch/e500-regs.c +7b3b6d1b5066fec78fdbe638bfbe15c9 gdb/testsuite/gdb.arch/ppc64-atomic-inst.S +02a2959a04bfed36fc0544fe9f39c2f4 gdb/testsuite/gdb.arch/i386-gnu-cfi.exp +a6fd461adbb02f0bb1f9b19c1635f902 gdb/testsuite/gdb.arch/arc-tdesc-cpu.exp +c74349fe5ddf8bc99431126267b35554 gdb/testsuite/gdb.arch/e500-prologue.c +1ae8e5dda9e75b94e18e3a5b67e321ff gdb/testsuite/gdb.arch/powerpc-vsx3.s +d68b30e2e3a5037fccaa5bfecfbe2435 gdb/testsuite/gdb.arch/gdb1558.c +2935b0bbea693f6439b33637a8c19697 gdb/testsuite/gdb.arch/gdb1431.s +2f26b27bc63497e493cae2a188ceebdd gdb/testsuite/gdb.arch/amd64-entry-value-inline.exp +871f3266fa7dd9ad3f7ca526279d1ee8 gdb/testsuite/gdb.arch/i386-size.c +3f2b9e1d6dfc81afbdb9de5ef1244223 gdb/testsuite/gdb.arch/aarch64-tagged-pointer.exp +57559145b89947ab1ab2f5868bd09606 gdb/testsuite/gdb.arch/amd64-break-on-asm-line.exp +6900b34e9d4212b3939e1b3174a4a6e1 gdb/testsuite/gdb.arch/sparc64-adi.exp +1ff0115c91d40622272791b1ab6958cc gdb/testsuite/gdb.arch/powerpc-power7.exp +468a69f9d5d0af2dbedb104956c4f603 gdb/testsuite/gdb.arch/amd64-entry-value-param-dwarf5.exp +18bd58398a94c09b09dc4685f26f5845 gdb/testsuite/gdb.arch/powerpc-tar.exp +4d89040514750b93eaa4ce527e17ad9d gdb/testsuite/gdb.arch/i386-bp_permanent.exp +22b66a8850694adb9bdb8054809e7882 gdb/testsuite/gdb.arch/i386-float.S +28a4468e68a918902ed3543339a084b4 gdb/testsuite/gdb.arch/arm-single-step-kernel-helper.c +5b2588d329ec601fbe7bb77954925f3b gdb/testsuite/gdb.arch/mips-fpregset-core.exp +21e0952f89a7e8b66e129907a80ee62b gdb/testsuite/gdb.arch/mips16-thunks.exp +ad85bf2a54bfb21156bed996bb5d768b gdb/testsuite/gdb.arch/ppc-fp.c +e395eb71209a5588d82f5cc918945e23 gdb/testsuite/gdb.arch/amd64-tailcall-cxx1.cc +7a9ca18b77df88c1475c58ecf541c4a4 gdb/testsuite/gdb.arch/amd64-optimout-repeat.S +9ba315f972f42264cf91a14a82562384 gdb/testsuite/gdb.arch/ppc-longdouble.exp +1e81131ebcf017ae893cc61858af9d81 gdb/testsuite/gdb.arch/powerpc-fpscr-gcore.exp +0136d259d3e6252fa3653ce51724966d gdb/testsuite/gdb.arch/aix-sighandle.exp +df1e8a57f1e0232fe311abe3a27cbf89 gdb/testsuite/gdb.arch/amd64-disp-step-avx.exp +e2e8ba163a7b0d585ebc4d74b6659c2c gdb/testsuite/gdb.arch/s390-vregs.S +0d6c06ac444773700997fc6d1a706d15 gdb/testsuite/gdb.arch/powerpc-stackless.exp +778904329ee3801c8cceec2e30337e9e gdb/testsuite/gdb.arch/i386-sse-stack-align.S +18af135eb2a689d15efe922b31d08e2a gdb/testsuite/gdb.arch/amd64-prologue-skip.exp +507c39c6aef76961dd6c4df3ff787e98 gdb/testsuite/gdb.arch/aarch64-dbreg-contents.c +7424e2b4ba735ce07d8bde68bc130442 gdb/testsuite/gdb.arch/powerpc-vsx-gcore.exp +b9d0bdc94df4c5183cb4c5342e346876 gdb/testsuite/gdb.arch/s390-vregs.exp +bcb7237fd86b602db0c1c5f2c0b16237 gdb/testsuite/gdb.arch/amd64-tailcall-noret.S +c81854e332406c0b7c03ff3abdba48c4 gdb/testsuite/gdb.arch/powerpc-power9.s +2323b5a33af6bc544b442203d658977e gdb/testsuite/gdb.arch/sparc-sysstep.c +0b90e1d2c9a1147071693cd4b81ace39 gdb/testsuite/gdb.arch/i386-pseudo.c +e0bd57fcec7faf5d436185763384cbdd gdb/testsuite/gdb.arch/sparc64-regs.exp +279006ff2f67e7df331e01628fe18807 gdb/testsuite/gdb.arch/i386-gnu-cfi.c +460b6ba3a91d7b1fdd4abe813ac6f947 gdb/testsuite/gdb.arch/i386-sse-stack-align.c +11389013dfeba005022a1d910728c9d7 gdb/testsuite/gdb.arch/e500-abi.c +5f4abf2ffd1462a4dae0c330f5c19ab4 gdb/testsuite/gdb.arch/amd64-i386-address.S +8334b7b3bfc259e86b60effea9b1e0a2 gdb/testsuite/gdb.arch/gdb1558.exp +ba2b42f569dc56115755704e0eb14374 gdb/testsuite/gdb.arch/i386-mpx-map.c +47f14df453e063547c4cf2a4963549e0 gdb/testsuite/gdb.arch/cordic.ko.debug.bz2 +dab455ee31fb8611d7463ad8393ef33c gdb/testsuite/gdb.arch/i386-biarch-core.exp +14e9e04abca70f0924475a181f3681dd gdb/testsuite/gdb.arch/amd64-entry-value-param.S +c98d02f17c7382d352c5c0fc8b72e30b gdb/testsuite/gdb.arch/amd64-tailcall-cxx.exp +d496d88114de41ea2e582ebdd084ad4f gdb/testsuite/gdb.arch/powerpc-vsx2.exp +e6595f097d4f3b691ee4059f6b777b10 gdb/testsuite/gdb.arch/riscv-unwind-long-insn-6.s +36ffd1e54c2ceb8d45f8b70145c0f113 gdb/testsuite/gdb.arch/i386-prologue.c +7a21df755762c22ddedccf274dd98849 gdb/testsuite/gdb.arch/i386-unwind.c +cf15ac481b20b069256b41bd883bb01c gdb/testsuite/gdb.arch/powerpc-prologue-frame.c +111d8ad651392e05b459db9012d167e7 gdb/testsuite/gdb.arch/s390-stackless.exp +bf69cc1577639fe53986f497888f9841 gdb/testsuite/gdb.arch/arm-disp-step.S +913ecb881a0640a3497e448652de01e8 gdb/testsuite/gdb.arch/altivec-abi.exp +2e9ff02b74c8b5cd750c9816e61fe36f gdb/testsuite/gdb.arch/arm-bl-branch-dest.exp +f4ef8461cf07bd1f8daadea11846e80e gdb/testsuite/gdb.arch/pr25124.exp +b5f70527dc125afd21a413c7fb95323d gdb/testsuite/gdb.arch/mips-disassembler-options.s +cfb3246a56c21b32d670bfa1ea2be277 gdb/testsuite/gdb.arch/aarch64-fp.exp +ccfc35cb4e6525494147ff1e34f7b5f4 gdb/testsuite/gdb.arch/i386-word.exp +f30938e09672d8b3468ecffed3106080 gdb/testsuite/gdb.arch/amd64-init-x87-values.S +f598ecd4382abb7217f16978ffb1458c gdb/testsuite/gdb.arch/powerpc-vsx.exp +d839d2710093e744afcac59f950554e9 gdb/testsuite/gdb.arch/i386-biarch-core.core.bz2 +e5515758ffbcf85ddc17abb7c30bc657 gdb/testsuite/gdb.arch/ppc64-isa207-atomic-inst.exp +1f132feb61c5ff24a354b3cdf1a15834 gdb/testsuite/gdb.arch/avr-flash-qualifier.c +70e670b0c868ca7f9ecec628eaa8b302 gdb/testsuite/gdb.arch/ftrace-insn-reloc.exp +2d9dcd476d2a8926bf61621bf8ae76f5 gdb/testsuite/gdb.arch/aarch64-brk-patterns.exp +3a2e13b38ad0b3bf3155650094834ae6 gdb/testsuite/gdb.arch/arm-single-step-kernel-helper.exp +b1e3b883077cc56d5ff51c241a1be494 gdb/testsuite/gdb.arch/aarch64-atomic-inst.c +2d5e59ba7e9f1db2ccbcd1e1df8bbb7b gdb/testsuite/gdb.arch/insn-reloc.c +26beaab4e8b8c9a73109035083883700 gdb/testsuite/gdb.arch/x86-avx512bf16.c +9344eb9d27f2f561249624265163ed86 gdb/testsuite/gdb.arch/e500-regs.exp +dfa8c263e7f60e06960d626cd7bc9d37 gdb/testsuite/gdb.arch/riscv-unwind-long-insn.c +61a452bd148a840650eeb45386687396 gdb/testsuite/gdb.arch/amd64-optimout-repeat.c +9970a0897b769204b2934a9ed3ebd049 gdb/testsuite/gdb.arch/i386-mpx-sigsegv.c +92b35fef27d42d1162776ec375fced25 gdb/testsuite/gdb.arch/amd64-gs_base.exp +589292ad5adca9899cebd4ec2f72082f gdb/testsuite/gdb.arch/powerpc-altivec2.exp +dee55573b433f36913541abf819b83b6 gdb/testsuite/gdb.arch/amd64-stap-wrong-subexp.S +669e633068c6b0e3716742dda82a2484 gdb/testsuite/gdb.arch/powerpc-altivec3.s +d829887447e4a6509ce3809ad6102741 gdb/testsuite/gdb.arch/amd64-stap-wrong-subexp.exp +71a36e01052908f0f048c580c470c924 gdb/testsuite/gdb.arch/i386-float.exp +2a2b7c5e9489f12d8b92ebabaf2c3968 gdb/testsuite/gdb.arch/mips16-thunks-main.c +ab75d6fe8740cb17a67455af56b8cde7 gdb/testsuite/gdb.arch/mips16-thunks-sin.c +af564c6e3c4564c1fc37e9e07e34a260 gdb/testsuite/gdb.arch/i386-sse.exp +2cd109e2f7ee7883099ec95208b4a11b gdb/testsuite/gdb.arch/mips16-thunks-sinfrob16.c +87c978b53001e8c7081e16982ccd3c98 gdb/testsuite/gdb.arch/i386-cfi-notcurrent.exp +21747d10898d9dcdb3c64d97d1edb1cd gdb/testsuite/gdb.arch/i386-stap-eval-lang-ada.exp +7571e70f2dc237c262f2b58f6afde1e2 gdb/testsuite/gdb.arch/powerpc-vsx3.exp +650f578a326ccbbc067521c11fb62e0d gdb/testsuite/gdb.arch/i386-prologue-skip-cf-protection.c +5fb2eaef8fa3678d2f93e1b0c7c65be6 gdb/testsuite/gdb.arch/pa64-nullify.s +0170163d6f6161e44f17ab602620da52 gdb/testsuite/gdb.arch/amd64-entry-value-inline.S +c4396c31047aa9d8250e8afe72b8ebc9 gdb/testsuite/gdb.arch/thumb-bx-pc.S +6203143515112881fe8e34e1852bd1ab gdb/testsuite/gdb.arch/arc-decode-insn.S +6966bb02b668a5cf0805a4c2993a58a6 gdb/testsuite/gdb.arch/aarch64-tagged-pointer.c +838aeca6c08ea996fad1756019fbcc00 gdb/testsuite/gdb.arch/e500-abi.exp +1bf420433c7b72ee6ca91b2c3ef6036f gdb/testsuite/gdb.arch/i386-sse.c +bd7cf5e96e9e308cc39648c6ce20d498 gdb/testsuite/gdb.arch/amd64-stap-three-arg-disp.S +49368933527ee8fb7946b009671ceffc gdb/testsuite/gdb.arch/arm-neon.c +fca08c66f8a031d661f60f725902080e gdb/testsuite/gdb.arch/s390-tdbregs.exp +5e547e44deaa207e88530f6743861d92 gdb/testsuite/gdb.arch/arc-decode-insn.exp +2bce904008b7d84e0749fe2c931b54a5 gdb/testsuite/gdb.arch/powerpc-tar.c +9e22b44ba989077d5c158cfdbce7318b gdb/testsuite/gdb.arch/amd64-i386-address.exp +d90ecda1f26f866412918895e6f79acf gdb/testsuite/gdb.arch/amd64-invalid-stack-top.c +ae90ad3f1272a33872591d3c6c0214ef gdb/testsuite/gdb.arch/alpha-step.c +c7ff2947e10162b3b0860dafbf173057 gdb/testsuite/gdb.arch/arm-cmse-sgstubs.c +936341a08938ea89fce3a346668b7313 gdb/testsuite/gdb.arch/powerpc-d128-regs.exp +6ef260e707d69c353dc747d0696c3c66 gdb/testsuite/gdb.arch/riscv-tdesc-regs-64.xml +b202857f9a6c8763eff58794f6cf16f3 gdb/testsuite/gdb.arch/powerpc-disassembler-options.exp +fae493189c92eb2573a108d58fea81d7 gdb/testsuite/gdb.arch/amd64-eval.cc +2f6fcdfd67e992981d01b2a3f45a57bb gdb/testsuite/gdb.arch/amd64-stap-triplet.c +36c7c85aafd93378620b62f1a1259ec0 gdb/testsuite/gdb.arch/ppc64-atomic-inst.exp +08f970fadc58c5f2c080de1c4eb694d1 gdb/testsuite/gdb.arch/ia64-breakpoint-shadow.exp +3df3909c7261feb71b61d56d360a314f gdb/testsuite/gdb.arch/ppc64-isa207-atomic-inst.c +a5d4fde947f9db8edd79fc050eb716f2 gdb/testsuite/gdb.arch/amd64-prologue-xmm.s +d4806da3ac8092941be08ca7ceff0038 gdb/testsuite/gdb.arch/mips-disassembler-options.exp +6c3a8360dd781cf23051f2217b2ff6bc gdb/testsuite/gdb.arch/thumb-singlestep.exp +8a71be0a11994678865e45da9e25c424 gdb/testsuite/gdb.arch/powerpc-htm-regs.exp +574512ad6980df22340b80934b340c1d gdb/testsuite/gdb.arch/amd64-stap-special-operands.exp +116c7f1b278d579ab9fa518a1cc98cf9 gdb/testsuite/gdb.arch/i386-avx.c +1f4ad34fb019273d0c3ef8a5a98e8941 gdb/testsuite/gdb.arch/amd64-tailcall-ret.c +56f814887a6638cda42bfc32fb0ee360 gdb/testsuite/gdb.arch/aarch64-atomic-inst.exp +d0c0b587353cadfa1a340b4130040eda gdb/testsuite/gdb.arch/amd64-optimout-repeat.exp +542b5f95f932f2ddd920d243bd429413 gdb/testsuite/gdb.arch/amd64-osabi.exp +aa9dc393afb518b86af3ff1123aeaa91 gdb/testsuite/gdb.arch/arm-bl-branch-dest.c +58554244e3c8360cf90b859e9f77a080 gdb/testsuite/gdb.arch/arm-disp-step.exp +111154dd59206dabd41dce9b15f43943 gdb/testsuite/gdb.arch/sparc64-regs.S +a6ba10d42c413adf71b8d174c4a901e2 gdb/testsuite/gdb.arch/ppc-dfp.c +30d12c1708d1c1dedd92572cd6be2cee gdb/testsuite/gdb.arch/i386-dr3-watch.c +f1c565ef71b747a5bafaa1549ed8c071 gdb/testsuite/gdb.arch/powerpc-vector-regs.c +c20b4258aafb4c49b2efd8ac3fcea5db gdb/testsuite/gdb.arch/thumb-prologue.c +e58e3eebdd29b198be0c5145109e87dd gdb/testsuite/gdb.arch/aarch64-sighandler-regs.c +19d5d7507bce76e9ca88070248830a61 gdb/testsuite/gdb.arch/altivec-abi.c +179dc633504c8e0d47f0f094fe0493d9 gdb/testsuite/gdb.arch/amd64-dword.exp +a5a4a921977ef8c2e191596813fba75f gdb/testsuite/gdb.arch/amd64-entry-value-param-dwarf5.c +c9b9d55dc4da7114ff6a4990ecf1abfe gdb/testsuite/gdb.arch/riscv-reg-aliases.exp +61d8d15b745a41c2cd7190f2da315279 gdb/testsuite/gdb.arch/amd64-disp-step.S +b925cc7248c9eec0d0182982e2b9a060 gdb/testsuite/gdb.arch/amd64-entry-value.s +87748fb940862016db7f20da25d967b1 gdb/testsuite/gdb.arch/powerpc-ppr-dscr.c +bc4167a366ebe74ab41aaf41b3fb9bdb gdb/testsuite/gdb.arch/thumb-singlestep.S +dac8c37a80434aabcff76d7d97a46613 gdb/testsuite/gdb.arch/vsx-regs.exp +4e079de9ed11cfd06427873405915399 gdb/testsuite/gdb.arch/i386-unwind.exp +f7007b57ddaa3d34e8be3700cad56122 gdb/testsuite/gdb.arch/mips-fpregset-core.c +0eff3c149f4bfa609b0f8e6b19560958 gdb/testsuite/gdb.arch/ppc-fp.exp +dce0c59fb0a84284c3c6d2124b63bd68 gdb/testsuite/gdb.arch/amd64-gs_base.c +29f1bff107e8b376dd11e24b47d3b322 gdb/testsuite/gdb.arch/amd64-prologue-skip.S +38e33708e5457a2d68998e56db701062 gdb/testsuite/gdb.arch/ppc-dfp.exp +b06543963fc780ecd84de62cc3174353 gdb/testsuite/gdb.arch/amd64-entry-value.exp +78929f97b24da03b8f309863e28cfb1f gdb/testsuite/gdb.arch/mips-fcr.exp +95994fefa473c3a5f1268727e851739f gdb/testsuite/gdb.arch/cordic.ko.bz2 +c334de4112c5a0c8e3ec29b911ed530c gdb/testsuite/gdb.arch/i386-signal.c +cdfe8f8a9850c07411e897ddee154916 gdb/testsuite/gdb.arch/ppc64-isa207-atomic-inst.S +4404198005e3ad128d0260af0c158f75 gdb/testsuite/gdb.arch/i386-dr3-watch.exp +e031f05284e0e4ce48218fa8a9795c04 gdb/testsuite/gdb.arch/i386-sse-stack-align.exp +444306ceadd1ecfe9af6cdb80d870ecd gdb/testsuite/gdb.arch/amd64-entry-value.cc +cfddeed13f7fb53a698b366514f311e7 gdb/testsuite/gdb.arch/powerpc-stackless.S +e2b6d459c555ff73a7b54eb2a90f757b gdb/testsuite/gdb.arch/riscv-bp-infcall.c +63ed436ec08e97b709d297492d418a21 gdb/testsuite/gdb.arch/powerpc-power8.s +faf26319a5307273196e47f75b640958 gdb/testsuite/gdb.arch/amd64-entry-value-param-dwarf5.S +4e26ee734a1f6fa586506417f902ca94 gdb/testsuite/gdb.arch/i386-mpx-simple_segv.exp +17b97f25963f27611743f135275f33a2 gdb/testsuite/gdb.arch/amd64-pseudo.c +4667e5ddef7a7bd589fd24c24831fa33 gdb/testsuite/gdb.arch/amd64-word.exp +382348ce348078966d6f73b33c4d5aea gdb/testsuite/gdb.arch/i386-prologue.exp +4f0a2918da60e80865c8b5d17474cc51 gdb/testsuite/gdb.arch/gdb1291.exp +a0d2cdc8604158b8fd3f1c525b1f6892 gdb/testsuite/gdb.arch/powerpc-altivec.s +307f0ec8b734ccc5976b20819947d34a gdb/testsuite/gdb.arch/i386-mpx-simple_segv.c +faf7f2f7dcf011733d515451ad207cf9 gdb/testsuite/gdb.arch/gdb1291.s +edabf210f543ad8dbc09f40ffcb80257 gdb/testsuite/gdb.arch/amd64-invalid-stack-middle.c +c1086d19b7df9438cdf7a3de086a8de9 gdb/testsuite/gdb.arch/aarch64-sighandler-regs.exp +5891dbe1bed62d3c0ce9a2b0f1f8c29a gdb/testsuite/gdb.arch/i386-permbkpt.exp +986dcf7d5bbcc0628cacfab086476ce5 gdb/testsuite/gdb.arch/mips-fcr.c +e5b2e8f4090afd407bcfa6af119fea50 gdb/testsuite/gdb.arch/amd64-entry-value-inline.c +e8ed30eb41916a52036eb2f0f3a6eaf5 gdb/testsuite/gdb.arch/aix-sighandle.c +2032004c8c14cf72e71b618d3a1b72d7 gdb/testsuite/gdb.arch/i386-byte.exp +7a36da73c5031b01b099d12d8004c87c gdb/testsuite/gdb.arch/pa-nullify.exp +4093dc4c7e8595670641ec5e035ff0f7 gdb/testsuite/gdb.arch/gdb1431.exp +7c958e6a57b93cf5c71dc0cd63698000 gdb/testsuite/gdb.arch/aarch64-pauth.c +8f68e28f22abb35c81468814e0fd9242 gdb/testsuite/gdb.arch/thumb-bx-pc.exp +77bff342edda20120483db219390ae67 gdb/testsuite/gdb.arch/i386-bp_permanent.c +41235ef60ef34ef5fd05dd5dae2ff1cc gdb/testsuite/gdb.arch/i386-disp-step.S +655ec2b3c01d5579bd697b692fb9d6db gdb/testsuite/gdb.arch/powerpc-prologue.exp +7925ab0a65c3e9cffa4664191dbee480 gdb/testsuite/gdb.arch/mips16-thunks-sinmips16.c +9573c6673d7f91c28cd1c447e9b04390 gdb/testsuite/gdb.arch/amd64-invalid-stack-middle.exp +8621e565321412e375aa6a6a62dcdf51 gdb/testsuite/gdb.arch/i386-signal.exp +5ccd2a0fa2bc0c39be290ed37000e8f5 gdb/testsuite/gdb.arch/riscv-unwind-long-insn-8.s +ff21da4943b4e35a67087ef00e3521da gdb/testsuite/gdb.arch/amd64-prologue-xmm.exp +306d51166bea363b23a8de52858b55fb gdb/testsuite/gdb.arch/i386-mpx.exp +35e6f6e3c9b580fd14eed0133be18248 gdb/testsuite/gdb.arch/amd64-prologue-xmm.c +02620fd297d0f385bb862e3c1d96ac47 gdb/testsuite/gdb.arch/powerpc-altivec3.exp +ed7257143b2296eccc00820636cca6fb gdb/testsuite/gdb.arch/amd64-stap-triplet.S +879fef6898519b699307dd4cbfb5605c gdb/testsuite/gdb.arch/i386-mpx.c +7e45d48ad3d8df01421c179450076734 gdb/testsuite/gdb.arch/i386-permbkpt.S +6194842c8c6266017ccda4563b9b515e gdb/testsuite/gdb.arch/amd64-entry-value-param.exp +2555b44671665fe815cad09ed50c137f gdb/testsuite/gdb.arch/amd64-tailcall-noret.c +5bcdfb03e15d3eafb4ba60bbd0b34a09 gdb/testsuite/gdb.arch/powerpc-htm-regs.c +fb780f0ed7bae85f65eab8463c1f4b75 gdb/testsuite/gdb.arch/mips16-thunks-sinfrob.c +4d12171c9abc0beee95553657329fd14 gdb/testsuite/gdb.arch/amd64-tailcall-cxx2.S +0826907b68d40280d37f85caaf5b4c5b gdb/testsuite/gdb.arch/powerpc-d128-regs.c +44ba633458d963b260e9e9cc167ded20 gdb/testsuite/gdb.arch/amd64-eval.exp +61972c69a6d184d1a2b1ce1c6169731b gdb/testsuite/gdb.arch/powerpc-vsx.s +32349e5a9cd2c81531b7a79fbae460d7 gdb/testsuite/gdb.arch/i386-pkru.exp +3d472de95d68837cc9c59c285636263b gdb/testsuite/gdb.arch/riscv-bp-infcall.exp +afb17f5958639d0fda6b99c599571215 gdb/testsuite/gdb.arch/i386-size.exp +63c7e3f8b029582345525847724fe33a gdb/testsuite/gdb.arch/riscv-tdesc-regs.c +d9211ad137aa10d3c0cf4a663f30c08f gdb/testsuite/gdb.arch/sparc64-adi.c +9e461b9843503fe3ae4de415a666718a gdb/testsuite/gdb.arch/arm-neon.exp +3f2b5b645b9a3d7d2bae066d20a5ef8a gdb/testsuite/gdb.arch/powerpc-prologue-frame.exp +3f623b3b2c43f810b82e48736d4c17ea gdb/testsuite/gdb.arch/i386-cfi-notcurrent.S +ec6a581ccf0c85af7e81b12603d86b90 gdb/testsuite/gdb.arch/arc-tdesc-cpu.xml +51003c6c52853b6fd367659872e344b2 gdb/testsuite/gdb.arch/amd64-stap-optional-prefix.S +1784f4c6ad9218bcf66de5f7077e67ab gdb/testsuite/gdb.arch/powerpc-aix-prologue.exp +9583add858a47e22f4f21683e27f5613 gdb/testsuite/gdb.arch/riscv-tdesc-loading-02.xml +8ecd972b1e4993e0947f4cb24a5cded7 gdb/testsuite/gdb.arch/amd64-stap-optional-prefix.exp +2bfbafe7de9356fc4a271615124d118f gdb/testsuite/gdb.arch/amd64-tailcall-ret.exp +db68bccb647fb0d36e633963a7c38372 gdb/testsuite/gdb.arch/ppc64-symtab-cordic.exp +ef419b931f9c815bb5b495929cc7cc76 gdb/testsuite/gdb.arch/i386-avx512.c +7607c62c75df0b177894227b01ccce3e gdb/testsuite/gdb.arch/mips16-thunks-inmain.c +f5759d132fa6ff829065ee7f7c0dfb62 gdb/testsuite/gdb.arch/aarch64-dbreg-contents.exp +41c5077490c21bcc63b7d553fe1d2ee1 gdb/testsuite/gdb.arch/i386-avx.exp +f7a130123c6aaada8b564ebb2c922db7 gdb/testsuite/gdb.arch/amd64-init-x87-values.exp +62b8ae62f23fcc8cb4a489eb4b34d490 gdb/testsuite/gdb.arch/disp-step-insn-reloc.exp +e4e0790768dfc9e22bedfc15d2900c9f gdb/testsuite/gdb.arch/i386-stap-eval-lang-ada.S +503e2d3e75e404946afa4f2838c5d553 gdb/testsuite/gdb.arch/powerpc-vector-regs.exp +ca5940c12f93bf7a9b6342d5010f36e2 gdb/testsuite/gdb.arch/s390-stackless.S +6ccb2f27f28e7769b0493d6aa9274d2c gdb/testsuite/gdb.arch/arc-analyze-prologue.exp +48cf6f1acca8db116a84666ce8ff0c55 gdb/testsuite/gdb.arch/thumb2-it.exp +f57f9d3341141820e0e398fb2a35462c gdb/testsuite/gdb.arch/powerpc-ppr-dscr.exp +8f359f92c1bc67750f70dd20d6833698 gdb/testsuite/gdb.arch/i386-size-overlap.exp +c25755abe95c244c666a9b3279e3d2c8 gdb/testsuite/gdb.arch/amd64-break-on-asm-line.S +a2c336acadb434d3fae8bfa0d1287f33 gdb/testsuite/gdb.arch/amd64-tailcall-ret.S +d7cc1cbd952b5f33eadc35159cf3dada gdb/testsuite/gdb.arch/amd64-entry-value-paramref.S +2e42b7c7c6829c3ef03afd572a0876ce gdb/testsuite/gdb.arch/i386-stap-eval-lang-ada.c +0e1c995e398f6c975f8d9f4dc1d55f03 gdb/testsuite/gdb.arch/i386-mpx-call.c +5e1b8002c59a93314ad20f51507bc54f gdb/testsuite/gdb.arch/iwmmxt-regs.c +3a79e95fa54f87b0f14b8304d370dec0 gdb/testsuite/gdb.arch/arm-disassembler-options.exp +8c94df7c80edef9b0b6d5ba0b723557a gdb/testsuite/gdb.arch/sparc-sysstep.exp +4e71000e20ead6c406a9a0992e9b62c5 gdb/testsuite/gdb.arch/amd64-tailcall-cxx1.S +3d59210243b5b8811b386cdba894b522 gdb/testsuite/gdb.arch/vsx-regs.c +151bd429b16434888de45e86cbee6822 gdb/testsuite/gdb.fortran/mixed-lang-stack.f90 +ad4ec229e1ccf14ca0db8e5e9ba1a0c0 gdb/testsuite/gdb.fortran/library-module-main.f90 +98b4a26d5fd44e5b429e0d65e8b8f078 gdb/testsuite/gdb.fortran/vla-datatypes.f90 +d5c8d99d5047de0d867efd6ec8d09530 gdb/testsuite/gdb.fortran/multi-dim.f90 +1ba3be9f9887646832a63fef17f577fa gdb/testsuite/gdb.fortran/vla-value-sub-finish.exp +24e89ba26ab3829b10d3a4d8d910887f gdb/testsuite/gdb.fortran/array-bounds-high.exp +5f759b796021ed521fb186718ad3f002 gdb/testsuite/gdb.fortran/vla-value-sub-arbitrary.exp +6bd20d807b15bd1e53b689d9077c4db8 gdb/testsuite/gdb.fortran/nested-funcs.exp 95708d64a7ce14d26ec039f9ec0af921 gdb/testsuite/gdb.fortran/charset.f90 -f0aea94a6983a93edda664bf8bdf9a9a gdb/testsuite/gdb.fortran/derived-type-striding.f90 -7ea240410c45cacd8cf35f7c4fe8f025 gdb/testsuite/gdb.fortran/logical.f90 -fe63b72a7207c3bb08a474843f5beb95 gdb/testsuite/gdb.fortran/vla-sizeof.exp -7e1afd5af2b95f53f4a8c74a8d4cbb51 gdb/testsuite/gdb.fortran/array-element.f -d7c76ec9d07675a1358f2306a8c58bb8 gdb/testsuite/gdb.fortran/multi-dim.exp -741f03250d8f670175dc7318a768f311 gdb/testsuite/gdb.fortran/max-depth.f90 -e2e9dde9ece7f5ad94dd824e40123846 gdb/testsuite/gdb.fortran/nested-funcs.exp -eb9334e31b7802a2a3546680c8ae0aed gdb/testsuite/gdb.fortran/derived-type.f90 -7f82050ca527aa5685df75006b79d30a gdb/testsuite/gdb.fortran/function-calls.exp -9d0b6c89bc77748d0ccd1b744d843892 gdb/testsuite/gdb.fortran/charset.exp -c8a9d1355fd54b8d8d84c219fff653a9 gdb/testsuite/gdb.fortran/derived-type-function.f90 -56d2e0632702b8bc59594b747352118f gdb/testsuite/gdb.fortran/derived-type.exp -f23e426b050253b9c2a27bc2f22e45f4 gdb/testsuite/gdb.fortran/array-slices.f90 -58bd5eae7b1e170f7ce4377b9fb7dc85 gdb/testsuite/gdb.fortran/info-types.exp -60ad989747dc6c41d1cd9758bd85169d gdb/testsuite/gdb.fortran/type.f90 -41a2db54718a3d88a46096ba552627ca gdb/testsuite/gdb.fortran/vla-datatypes.f90 -1e2e517705fa73beefeb2eb12951d1a8 gdb/testsuite/gdb.fortran/array-bounds.exp -e10deba27887ffb57f93bba61dfcecb8 gdb/testsuite/gdb.fortran/types.exp -e996c9ce94c2ff56018c7975cdac2251 gdb/testsuite/gdb.fortran/vla-sub.f90 -70fa55de835563d4da1d5b72f0a4ce8c gdb/testsuite/gdb.fortran/derived-type-striding.exp -f86880f82001f2172a0fd40284738416 gdb/testsuite/gdb.fortran/array-element.exp -df9bfeaa948be992f184a65788706cbf gdb/testsuite/gdb.fortran/library-module-lib.f90 -a1801a748d20616e5a29648a4b17de5f gdb/testsuite/gdb.fortran/print_type.exp -a708e88efacbf58be5104a2ff03dddec gdb/testsuite/gdb.fortran/ptype-on-functions.f90 -1564e81c4f1f4f89f6c25841a194c37d gdb/testsuite/gdb.fortran/block-data.exp -e98614d4bafdbbc1ff5c1176dba06b6f gdb/testsuite/gdb.fortran/ptr-indentation.exp -b8aef0692082d3ea16639df32e1534e0 gdb/testsuite/gdb.fortran/array-slices.exp -1e8114b3944d894ab7a4d7b724291dcf gdb/testsuite/gdb.fortran/vla-value.exp -4b24a7ad043ad526c3aacd5dcc7811e8 gdb/testsuite/gdb.fortran/module.f90 -4a290a2932d1e2d91555a17e97775d55 gdb/testsuite/gdb.fortran/short-circuit-argument-list.f90 -4314f8fd805fe9212530b14c0beef69b gdb/testsuite/gdb.fortran/printing-types.f90 -2dfbc166eb8cb2e8b3ef548786667c8e gdb/testsuite/gdb.fortran/intrinsics.f90 -e9629a073a09da19ca82e7903390cf91 gdb/testsuite/gdb.fortran/nested-funcs-2.exp -82bc503283ca35eb67f7d0712ba72b63 gdb/testsuite/gdb.fortran/print-formatted.exp -b2eac4ba31d07a6065d92a60c84b27fb gdb/testsuite/gdb.fortran/complex.exp -0f27e0d7e15c8b850cfde9d0e269af80 gdb/testsuite/gdb.fortran/module.exp -42f8491b4cdda9a6ac1a79522d1f907d gdb/testsuite/gdb.fortran/vla-type.f90 -9da09770a77f68e7477f5a69972070de gdb/testsuite/gdb.fortran/nested-funcs.f90 -e018668f52cd9265dded35881ca9524c gdb/testsuite/gdb.fortran/vla-history.exp -40a4d7c32cf84b3e9ff1a30f87ea903e gdb/testsuite/gdb.fortran/subarray.f -52b113ef0798577bc3ac61f60c33fb5a gdb/testsuite/gdb.fortran/array-bounds.f90 -464b6f2faf0848ff3ef8f3d7899d2df1 gdb/testsuite/gdb.fortran/intrinsics.exp -df0d0f215842447139293d01e72e7367 gdb/testsuite/gdb.fortran/nested-funcs-2.f90 -affc3de963d669f54aa8b44abbb3ef55 gdb/testsuite/gdb.fortran/complex.f90 -61f5d6237f038b3752fe0fed2aac1e4f gdb/testsuite/gdb.fortran/vla-ptype.exp -13bc709d767b9df08d5c0d056da3a00a gdb/testsuite/gdb.fortran/vla-datatypes.exp -fde32b025257911becde72e0cd35643d gdb/testsuite/gdb.fortran/vla-value-sub.exp -879bccdd53badc3233397d846c70d953 gdb/testsuite/gdb.fortran/library-module.exp -caff8e7807f89e35e3a90fc364f41494 gdb/testsuite/gdb.fortran/info-types.f90 -c08b588faeef67fdf98b9d30d02f4405 gdb/testsuite/gdb.fortran/printing-types.exp -6028fcd1b44733fdee5c299ac44b9aad gdb/testsuite/gdb.fortran/vla.f90 -5f45fda9035ac19c0b59f3457c06f269 gdb/testsuite/gdb.fortran/ptype-on-functions.exp -e57da23a0e9da06ab9b19a42505d261f gdb/testsuite/gdb.fortran/vla-ptype-sub.exp -9a7971f8f7c54cb26b0f7230bb5530b2 gdb/testsuite/gdb.fortran/pointers.f90 -5518861153de44498821a46d12c12faf gdb/testsuite/gdb.fortran/subarray.exp -8241c8235db8d8fab9aff604ec90ed06 gdb/testsuite/gdb.fortran/whatis_type.exp -eeb30063f8f4732c7de3dc88d5231622 gdb/testsuite/gdb.fortran/dot-ops.exp -77bc2a689532191a29098c9db1e0303d gdb/testsuite/gdb.fortran/logical.exp -4fa35bde9b23295b82c2512f487f364c gdb/testsuite/gdb.fortran/function-calls.f90 -2a22819617a5fe562e8d813436cd806e gdb/testsuite/gdb.fortran/short-circuit-argument-list.exp -dcfb07bb8587fba625719d21a8cabcdc gdb/testsuite/gdb.fortran/vla-value-sub-finish.exp -34a340ea9003c1e16405b90ea90bc6e7 gdb/testsuite/gdb.fortran/info-types-2.f90 -14d028d26b7dce38e1ef2e00ca65272a gdb/testsuite/gdb.fortran/vla-type.exp -24803e9f56ac5f067a0ed186265d915f gdb/testsuite/gdb.fortran/ptr-indentation.f90 -4c7349ac3e4d9aa8c4b968fab7677b04 gdb/testsuite/gdb.fortran/exprs.exp -ae8771050095a49f6f71c23488ae1568 gdb/testsuite/gdb.fortran/multi-dim.f90 -fb3c68d33591b99e9c1a4c60e726d2eb gdb/testsuite/gdb.fortran/library-module-main.f90 -6f7643a50f32128ad4bc1a02ddf6b686 gdb/testsuite/gdb.fortran/block-data.f -e6625e562ae3e24c90bbdc2d8d8aef14 gdb/testsuite/gdb.fortran/print-formatted.f90 -8ee39e5be2b719f13a1337e100b65828 gdb/testsuite/gdb.fortran/common-block.f90 -8f906406cf5bb5e0d12f74a998d79146 gdb/testsuite/gdb.base/source-execution.exp -42e1d104803f80490d1272a90ad90264 gdb/testsuite/gdb.base/max-depth.c -88723c3e92f69240a526b5f8411ab20a gdb/testsuite/gdb.base/continue-all-already-running.c -52e74eceb8192887a50b083673869cc5 gdb/testsuite/gdb.base/valgrind-bt.exp -2e8557286819d800a3ad66564316f77e gdb/testsuite/gdb.base/info_sources.exp -30a04fff03433dbd9a343f846c4b33ff gdb/testsuite/gdb.base/watch-cond-infcall.exp -3c2cae96d07c53e69d3fb394d56e1c22 gdb/testsuite/gdb.base/jit-simple.exp -fce2a881e120d7b10ec6453c64259511 gdb/testsuite/gdb.base/auto-load.c -7dd720b7e8f6bfe6656f21ba067e7c97 gdb/testsuite/gdb.base/print-symbol-loading.exp -fe9482a492ef60046adcccf64783f174 gdb/testsuite/gdb.base/ctxobj-m.c -dca611c27c81de3f12b4e20142a641ee gdb/testsuite/gdb.base/type-opaque.exp -0722dc827aa24c7e95139d82528bd484 gdb/testsuite/gdb.base/vla-datatypes.c -405e9d94de3fb841c6c3df9b8ab116fe gdb/testsuite/gdb.base/break1.c -9ffc2cd8e384888785a57bd5ed8168d2 gdb/testsuite/gdb.base/step-test.c -e132a0bda6a789c75e20e8d4eb4ebc02 gdb/testsuite/gdb.base/consecutive.c -10c52951417dfa4a993f270ed7c31683 gdb/testsuite/gdb.base/randomize.c -2d0d3f1b1029b3b47ec9cb438790fa98 gdb/testsuite/gdb.base/recurse.c -ce43bc5867881a81fc67fe254efb3a4b gdb/testsuite/gdb.base/gdb-sigterm-2.exp -fc1464b0e0f26d611cdd91812e5fa1a1 gdb/testsuite/gdb.base/server-del-break.exp -d9e9c31456c3509b904ff53c67820829 gdb/testsuite/gdb.base/source-dir.exp -95c6034d1232aa8f626b5c223ee78549 gdb/testsuite/gdb.base/average.c -3cfca4540568db33f4030ebffae29a89 gdb/testsuite/gdb.base/symbol-without-target_section.c -359d76d1dbb39076ad1fc97f1c44ca59 gdb/testsuite/gdb.base/gdbindex-stabs-dwarf.c -6b3898b60dda63afe5d50fbc1867ddde gdb/testsuite/gdb.base/break-fun-addr2.c -6a12cce54a177a6b40cddded00f1850d gdb/testsuite/gdb.base/fixsectshr.c -8019ca7942fbe4cbe419e29393f68e36 gdb/testsuite/gdb.base/bg-execution-repeat.exp -02f219631cb58a8108a1ce94e3344fdc gdb/testsuite/gdb.base/catch-follow-exec.c -4f9b4600d52657bd5c743bcb922ae3b4 gdb/testsuite/gdb.base/nested-subp1.exp -634be04b69346eb74f3720eaf74a2599 gdb/testsuite/gdb.base/relational.exp -8bb6f5ef799ab702e62a43e4bce5b8f4 gdb/testsuite/gdb.base/long-inferior-output.c -9cf7e6c1b7edb56fd5999d6a9f1cbff0 gdb/testsuite/gdb.base/attach-pie-misread.c -39aa47ade32033afdb3e056e8a3a6d78 gdb/testsuite/gdb.base/disabled-location.c -f1b9e9f6581a4183b97ca9a9b4522c56 gdb/testsuite/gdb.base/set-cwd.exp -3b5c0ca2e2b1bebb713422c0ad7d414f gdb/testsuite/gdb.base/stack-checking.exp -038aabf14dab937ffabc99034792256f gdb/testsuite/gdb.base/foll-fork.exp -0b14d2d4ec73abbb1a357a7af446106d gdb/testsuite/gdb.base/so-impl-ld.exp -6fe37b40d0f7cb70be233fd01abb4fe4 gdb/testsuite/gdb.base/sss-bp-on-user-bp.c -0d5a4386112cd7e9c0d43e6dc6fc7c40 gdb/testsuite/gdb.base/prelink.c -1dae0146d5e4a91a14ca7a61b64171b9 gdb/testsuite/gdb.base/valgrind-infcall.exp -2da0ffa25fe299e8fe5fd4169d1defec gdb/testsuite/gdb.base/break-probes.c -752f7fcb2c9e6b8dba43a55c6913509a gdb/testsuite/gdb.base/info-shared-solib2.c -de30ee7a93e72d7f6a4a1704ae38ba78 gdb/testsuite/gdb.base/term.exp -4a67cae26b0ef9e8de348c50e960b2f9 gdb/testsuite/gdb.base/siginfo-obj.exp -40fce23c51ccec5b5a2495af1d8b2dae gdb/testsuite/gdb.base/longest-types.exp -92ea1f9b732515b48844206c601c1596 gdb/testsuite/gdb.base/branch-to-self.c -62bbf1f10dae79980a3cfd7b98d7f6b4 gdb/testsuite/gdb.base/list-ambiguous.exp -b65c22200bf013f5515c18e1484af4ad gdb/testsuite/gdb.base/disabled-location.exp -fc0fbfe58b3e2ae50f3bbc2c20699284 gdb/testsuite/gdb.base/environ.exp -4a9cff87dcd04b9ab5d7345d30508e43 gdb/testsuite/gdb.base/signals.exp -1483cb533a58f9c433b9b7b6c5742ecd gdb/testsuite/gdb.base/gnu-ifunc.c -64dfdd5efdffb161250e64ea374d7cfc gdb/testsuite/gdb.base/jit.exp -fd0c8d3d031729e574c62a549ed87f9e gdb/testsuite/gdb.base/chng-syms.exp -56bcf693c0eca9ba54dda7fccdeda782 gdb/testsuite/gdb.base/start-cpp.cc -8d23f9338fd8b0bdedea88b509e1e39f gdb/testsuite/gdb.base/ui-redirect.exp -93118b9ce39ba004df39ef35f6a32bb6 gdb/testsuite/gdb.base/printcmds.exp -6c3e69985356d8f482ad32137d637c74 gdb/testsuite/gdb.base/condbreak.exp -b116fbcafc3acbc0b9847ec1def13540 gdb/testsuite/gdb.base/all-architectures-0.exp -ca880b20a47244e08bdbd3f31e5c8344 gdb/testsuite/gdb.base/echo.exp -cde12f0242cfc4ef29b481b7552924ee gdb/testsuite/gdb.base/sigbpt.exp -e45890e98348d264b2b4b2a7abddbdc7 gdb/testsuite/gdb.base/bigcore.c -268c1bff43f49030a948db45273962a7 gdb/testsuite/gdb.base/float.exp -32cc5cfe370ead25d18dbc51cbefa2fe gdb/testsuite/gdb.base/funcargs.exp -613b4eb36f18bf8fe36b02cc784cfd41 gdb/testsuite/gdb.base/gcore-relro-pie.exp -090f62464e4e3f277c5cb298192d4fa4 gdb/testsuite/gdb.base/attach-wait-input.exp -db57ff2b664083fee94582c63ff37481 gdb/testsuite/gdb.base/inferior-died.c -de9a26c26310a81f1a61994c3936b1e2 gdb/testsuite/gdb.base/catch-gdb-caused-signals.exp -2b6522c910f420350f5cb8fe34644945 gdb/testsuite/gdb.base/max-depth.exp -9a0c403e7057a1882335f4b5e72ee6b0 gdb/testsuite/gdb.base/nested-subp1.c -b559d11cda65157a838f5dd45213c0fe gdb/testsuite/gdb.base/solib-overlap-lib.c -364f24f5edee799ae7c787e6c85d0e94 gdb/testsuite/gdb.base/options.c -ea5459accdd047bc2e2458400de95cca gdb/testsuite/gdb.base/dprintf-pending.exp -63afe7b74001f4abf7193bfcf339c33c gdb/testsuite/gdb.base/info-fun.exp -33497ec50935d7ae037ee26e8f1e2202 gdb/testsuite/gdb.base/max-value-size.c -7c1c733a99a0b0de6949e5a7346b3dc8 gdb/testsuite/gdb.base/fullpath-expand-func.c -7ea18a24d9d28cbcb1f4c5fe6442697a gdb/testsuite/gdb.base/macscp1.c -1821a4887fc11a6c34b3364af0db75c2 gdb/testsuite/gdb.base/info_qt.exp -77adecfdb6f4ef700040a8c8ef4cc436 gdb/testsuite/gdb.base/nested-subp2.c -cf7ccde7fb12277f4e36993f2cedbeaf gdb/testsuite/gdb.base/fork-print-inferior-events.exp -4c20ab307c825acdf9aa76d7cc4b8a17 gdb/testsuite/gdb.base/break-include.inc -db0c93cb3c8610249c4542bc792cb77d gdb/testsuite/gdb.base/sep-proc.c -1ecc368d1805a5f7c6910ad3037f88d7 gdb/testsuite/gdb.base/dprintf-pending.c -fa9fef45378839b94c4e84cb08d2d78a gdb/testsuite/gdb.base/new-ui.c -f908b1f05d0f8b019f0f3a236281e99b gdb/testsuite/gdb.base/step-over-exit.exp -ed93377455b40da8a8eddf617b138d8f gdb/testsuite/gdb.base/sym-file-lib.c -e1d2ac864e798e66da96402af5ee9cb7 gdb/testsuite/gdb.base/sep.exp -1ae02bd3c2e13ec111a905839171a754 gdb/testsuite/gdb.base/expand-psymtabs.exp -a9f5fdee1dda78cf812209706eb735ff gdb/testsuite/gdb.base/gnu-debugdata.exp -ba0cdf8fbb5601699a774e1f2a34cb91 gdb/testsuite/gdb.base/siginfo-thread.exp -7f5027cd43e5e38d9f64a82b1122497b gdb/testsuite/gdb.base/jit-so.exp -e12bde8ee350b83b3722b0fc128d54fa gdb/testsuite/gdb.base/ptr-typedef.exp -78e5943d56b5a904e2e29e51749312ed gdb/testsuite/gdb.base/lineinc.c -47a76bc51140984bfad476b71d017f3a gdb/testsuite/gdb.base/ctf-constvars.c -ff85d9ee0c524f6c609c832da0d24ed6 gdb/testsuite/gdb.base/prelink-lib.c -2150e33299462bdf07950da8187b505c gdb/testsuite/gdb.base/filesym.exp -496ce3f5ec1a13f9cdb2fa54e6cb0974 gdb/testsuite/gdb.base/enumval.exp -bb4c229600aa6b27f54bdb86bd342483 gdb/testsuite/gdb.base/interrupt-noterm.c -9d5d8312ff6db37e7c2c916de7261b51 gdb/testsuite/gdb.base/readline.exp -0ce534b4f4cf21c4676ef7fcafed5479 gdb/testsuite/gdb.base/noreturn-finish.c -99d9d79abcc6e2e226da41cad214b719 gdb/testsuite/gdb.base/info-target.exp -634f89ab56ce7b100585a09cf226874e gdb/testsuite/gdb.base/foll-vfork-exit.c -37d19ab7828daf89577273725aece63d gdb/testsuite/gdb.base/valgrind-disp-step.c -65ed7dbea7a354db38ed81941a71361f gdb/testsuite/gdb.base/list-missing-source.exp -183e23efcf23e2ceb2dcae36bb65c041 gdb/testsuite/gdb.base/settings.exp -bc23309fb10d0872e1549854a2bcd4de gdb/testsuite/gdb.base/coredump-filter.exp -b3d9e49bd7eb9786a09c401c00f924a7 gdb/testsuite/gdb.base/break-unload-file.c -ac906430b85f292dc183998f99c80a20 gdb/testsuite/gdb.base/longjmp.c -60b40b5b4a1d3181e300cf59b351bbff gdb/testsuite/gdb.base/vla-sideeffect.c -58547513412fd95d588a05cf192f2b1c gdb/testsuite/gdb.base/pretty-print.c -ed6433f8aebf39931a6fc4b3e038644d gdb/testsuite/gdb.base/return2.exp -4ee04f399cf7f19729eb7df97df3b230 gdb/testsuite/gdb.base/long-inferior-output.exp -a16ffd7956990131ab8db166b8a76651 gdb/testsuite/gdb.base/nested-subp3.exp -6e370ee53581d7cb074ebb74a8680fd1 gdb/testsuite/gdb.base/args.exp -eed30fee321d648c86d375b4ac1aa820 gdb/testsuite/gdb.base/info_sources.c -1e68618af24f934d5de50fb6a3805a9a gdb/testsuite/gdb.base/unwindonsignal.exp -87b34213cef2692b0d8bfa27379d9b58 gdb/testsuite/gdb.base/print-file-var.h -693b625bbf9f68da54eff3d798f07125 gdb/testsuite/gdb.base/vla-stub-define.c -fce2a881e120d7b10ec6453c64259511 gdb/testsuite/gdb.base/vdso-warning.c -d8032a58291d84301397bfdbacc9b538 gdb/testsuite/gdb.base/volatile.exp -e0d407d48555ed5e65c42f458c492086 gdb/testsuite/gdb.base/vla-optimized-out.c -b1e60307edaf4af2c720525057287a04 gdb/testsuite/gdb.base/fork-running-state.exp -88c153d03b0bcdf966f73b28c8bceae8 gdb/testsuite/gdb.base/symbol-alias.exp -faa4a2f7a196caf8e16f26c07ee08bd7 gdb/testsuite/gdb.base/fullpath-expand.c -fcc61b9b8a2e3dc78f20ceadc1085130 gdb/testsuite/gdb.base/gcore-tls-pie.exp -eb1a1ac847358514aaf9455ffd7a30ea gdb/testsuite/gdb.base/constvars.c -fb39fbe51a8bf8da36da84ba0cd2b527 gdb/testsuite/gdb.base/frame-selection.c -7b6c4a7c46ac299ea1bb5d1b6394e419 gdb/testsuite/gdb.base/paginate-after-ctrl-c-running.exp -e2d1889a1dd2a8a94d9317c1d7a9ecb1 gdb/testsuite/gdb.base/interrupt.c -96cbc37baee5cbd8f248ae239e4df3ee gdb/testsuite/gdb.base/watch-cond.c -621050b104eb24c42a12097e775d316d gdb/testsuite/gdb.base/frame-selection.exp -4f879e88f060aa3f443d993ca23301ed gdb/testsuite/gdb.base/attach-non-pgrp-leader.c -9a3db80096b4b0226d3ffaeed206d99e gdb/testsuite/gdb.base/osabi.exp -6fd83c733213035d4bf42ec09ce2ff02 gdb/testsuite/gdb.base/signals-state-child.c -e53642f8bf1e51fef626175941eaa11f gdb/testsuite/gdb.base/arrayidx.exp -6bd7f3de9c8a14693ba0e99282aae2e7 gdb/testsuite/gdb.base/interact.exp -6fa3516a413a089a2bed7b00775ed95b gdb/testsuite/gdb.base/ovlymgr.c -bdc378c1d708d0c7258f86327033a9e2 gdb/testsuite/gdb.base/info-fun.c -7519bdd85b9b40a71ea604c162357560 gdb/testsuite/gdb.base/dfp-test.exp -a706fe8d6ecb51bd2a3d33a879414445 gdb/testsuite/gdb.base/display.c -58c4216d5e568c26d2e9150ae25a2a76 gdb/testsuite/gdb.base/condbreak-call-false.exp -c339c6eeb4af53500fb272af349ecb3a gdb/testsuite/gdb.base/bang.exp -a77c5f8652a63f6b66afabd7485f475a gdb/testsuite/gdb.base/foll-fork.c -091cdd80f9743f22f5f521d3a0e03a34 gdb/testsuite/gdb.base/funcargs.c -292608cae6d28de41897cdc6b2f0ad23 gdb/testsuite/gdb.base/pie-execl.exp -86b7fdcecb9768f5757efa300f939541 gdb/testsuite/gdb.base/fortran-sym-case.exp -79be46d4a02d8eb9f2975f8f2060af12 gdb/testsuite/gdb.base/double-prompt-target-event-error.exp -33bbf0292bfe7850d6f78804d4d96626 gdb/testsuite/gdb.base/info-var.exp -2f2fd50fbcc9df5cc45eb49c8d6acad3 gdb/testsuite/gdb.base/gdb-caching-proc.exp -700c60fa25037b9afb00956019e94edb gdb/testsuite/gdb.base/statistics.exp -4c4019f14581a039582d6a640d3a8032 gdb/testsuite/gdb.base/dprintf-pendshr.c -177b9dbffadece6acf7f4a75f71ea1d1 gdb/testsuite/gdb.base/annota-input-while-running.exp -af6f9e427bb3d09aa6033ec64aec8775 gdb/testsuite/gdb.base/jit-dlmain.c -19808814e11c163050a65897206f343c gdb/testsuite/gdb.base/jit-execd.c -5a41d0b830bd688f77900aa64c5ec0b5 gdb/testsuite/gdb.base/fullname.exp -ea47b28709359808ea59a7ee0fa0f22c gdb/testsuite/gdb.base/attach-pie-noexec.c -5650e966c0091f2fc49b31656a993beb gdb/testsuite/gdb.base/compare-sections.c -121b39b97c30e306b68a9a279af381b7 gdb/testsuite/gdb.base/killed-outside.exp -f083c5ce1859ff58ee3039c8ddcc4d29 gdb/testsuite/gdb.base/watchpoint-hw-attach.c -44017e13dd78e13764e28624311e7162 gdb/testsuite/gdb.base/dbx.exp -cc73eb7951662aabb85954b1f57b055a gdb/testsuite/gdb.base/solib1.c -e513812ecad656c718030990ac3f90f2 gdb/testsuite/gdb.base/watch_thread_num.c -80fb742c6028f138e4ad580d729b403a gdb/testsuite/gdb.base/lineinc3.h -34d5e87a5bfe25e8989857f0059a19cd gdb/testsuite/gdb.base/readnever.exp -2a4aa59203d24147b833015285f9e825 gdb/testsuite/gdb.base/opaque1.c +f76fe5e29662c6f1a1e24f17c5c07cfe gdb/testsuite/gdb.fortran/vla-value.exp +0600a71a69711514038f8a7a88b071c7 gdb/testsuite/gdb.fortran/charset.exp +eb753a9cbdace86c0e5624e6af6e5fb4 gdb/testsuite/gdb.fortran/type.f90 +9211a78eb6d5808d7ee9d90465ce73f2 gdb/testsuite/gdb.fortran/type-kinds.exp +11553615409a381f1f8dd76ea4920259 gdb/testsuite/gdb.fortran/function-calls.exp +660ed58f19070827d028a9b587ecd7ce gdb/testsuite/gdb.fortran/whatis_type.exp +dcdece993a4d8d86c4b2244dd38f068d gdb/testsuite/gdb.fortran/info-types.f90 +edbb0cc55e8e8100226904ecc5e8081d gdb/testsuite/gdb.fortran/print-formatted.f90 +52fe8475be2861952c45a88243c175e9 gdb/testsuite/gdb.fortran/derived-type-striding.f90 +1401b4276eb03e348e92d3a41c556346 gdb/testsuite/gdb.fortran/vla-ptype-sub.exp +a4e34e04719b327f30d15670ff5927ec gdb/testsuite/gdb.fortran/function-calls.f90 +58f55c646c72144df8d0638067f49a37 gdb/testsuite/gdb.fortran/array-element.exp +1e0474d732b6429f6cc4248ceca8ae63 gdb/testsuite/gdb.fortran/pointers.f90 +d275e6a1b0d5968484540f9749e07e1a gdb/testsuite/gdb.fortran/vla-type.f90 +f277728c73e68b84a6c1dbd241559444 gdb/testsuite/gdb.fortran/print-formatted.exp +cc374322e9938b2b30f9ac31c025ad14 gdb/testsuite/gdb.fortran/logical.exp +2b7b0f648e73bd682244cd9180cdc217 gdb/testsuite/gdb.fortran/multi-dim.exp +3180df3d43d79c50140cdfd2479b955a gdb/testsuite/gdb.fortran/subarray.f +aa54b25aa7dd3bcd5ddbec7b1a225851 gdb/testsuite/gdb.fortran/derived-type-function.exp +4e427eb4c450c9185ffb1b2c826f8149 gdb/testsuite/gdb.fortran/printing-types.exp +0ffce9976c755c562442a77941922536 gdb/testsuite/gdb.fortran/vla-sizeof.exp +05f778985bbbda1d13f1c74b8aab2965 gdb/testsuite/gdb.fortran/max-depth.f90 +f9767cb83ded02946e07003f983e638b gdb/testsuite/gdb.fortran/derived-type.exp +534c5554a1840bea9af9892fcfc1aa0a gdb/testsuite/gdb.fortran/mixed-lang-stack.exp +01c0d3db621cf681f9bd4cf654d6b697 gdb/testsuite/gdb.fortran/printing-types.f90 +8062019971c3520862d75b519458ee11 gdb/testsuite/gdb.fortran/block-data.exp +45668f9eaf3591673285fcf548212b9d gdb/testsuite/gdb.fortran/class-allocatable-array.f90 +cb18436e4e260d46a9ab9ec71fab444d gdb/testsuite/gdb.fortran/short-circuit-argument-list.f90 +f69648ec01979271a2a91f7370ea3876 gdb/testsuite/gdb.fortran/mixed-lang-stack.cpp +d7e4a631974b1d80a061a3dc55a030e5 gdb/testsuite/gdb.fortran/pointer-to-pointer.exp +5e21e34ac3356fb530490e4f06857eae gdb/testsuite/gdb.fortran/library-module.exp +cf42ebcd9ab4a339e8733f5d1e578d29 gdb/testsuite/gdb.fortran/pointer-to-pointer.f90 +154f8033a6eadc51f9d1e6a67fa52a20 gdb/testsuite/gdb.fortran/vla-value-sub.exp +8d57cbc683516e4292a5574d304e14f8 gdb/testsuite/gdb.fortran/array-bounds.f90 +736da4f8a6ef0b710c24e3f7b7b3674e gdb/testsuite/gdb.fortran/subarray.exp +bdc31c7d303f24b1573f5619d02ad6b9 gdb/testsuite/gdb.fortran/print_type.exp +8f8059a460ecb4825011bc5d58f970a2 gdb/testsuite/gdb.fortran/derived-type.f90 +7f49ba16824b5219db03aa5c44343515 gdb/testsuite/gdb.fortran/module.f90 +b872907b186b2f34c789a2015583a3d6 gdb/testsuite/gdb.fortran/info-modules.exp +9d93f650856698b6d0ac03147a40b5fb gdb/testsuite/gdb.fortran/array-bounds-high.f90 +320d6d406d3507814a850fbcea912d7e gdb/testsuite/gdb.fortran/ptr-indentation.exp +a0c25513c99c8b43ec5cf3398ef76d32 gdb/testsuite/gdb.fortran/common-block.exp +acb32671be20d06db439f1df97848ecc gdb/testsuite/gdb.fortran/array-slices.exp +465bbe64b0458109f47f28fcb351b446 gdb/testsuite/gdb.fortran/info-types-2.f90 +83bfd7c8f41cf7e5f6be6b21b9c8d101 gdb/testsuite/gdb.fortran/vla-ptype.exp +c10377741215e28f39ad309a4b68b271 gdb/testsuite/gdb.fortran/nested-funcs.f90 +31e5ccdbb634c01412bb4e8f6046d671 gdb/testsuite/gdb.fortran/vla-datatypes.exp +10dfc1f83b3495905964ce2a823c399d gdb/testsuite/gdb.fortran/info-types.exp +129a83b524a0295ec728c884c1786a3b gdb/testsuite/gdb.fortran/logical.f90 +f465c18a0ba48c403a48219a4e900434 gdb/testsuite/gdb.fortran/dot-ops.exp +5d3ddd85aa9bc1d8c20d253953c17939 gdb/testsuite/gdb.fortran/array-bounds.exp +a75b149c7838abf31cda67070b88eb46 gdb/testsuite/gdb.fortran/library-module-lib.f90 +02e2152e54de7e71f834b8d17b3cff6a gdb/testsuite/gdb.fortran/mixed-lang-stack.c +4d3b6a7b332092815ba20e5617c6a710 gdb/testsuite/gdb.fortran/ptr-indentation.f90 +3f4dbdc18553b234cedccd295c57473f gdb/testsuite/gdb.fortran/derived-type-function.f90 +ae21f4c5384fff9d06d8d76a9f5e8d6d gdb/testsuite/gdb.fortran/short-circuit-argument-list.exp +ba3801933fa72ed55f3bf81d3c565d2d gdb/testsuite/gdb.fortran/module.exp +5cd0145e9107b99d143f7e2f50452965 gdb/testsuite/gdb.fortran/vla-alloc-assoc.exp +b356e72c99b1ace50b3fd68b0312f887 gdb/testsuite/gdb.fortran/array-slices.f90 +ea6a80d4bf5ad667e4bc509c0439bbaa gdb/testsuite/gdb.fortran/vla-ptr-info.exp +ce1f029286a2e2371dc731011870348a gdb/testsuite/gdb.fortran/vla-history.exp +d5497406f45b28e1d40b56c2cf86bfee gdb/testsuite/gdb.fortran/common-block.f90 +ed63bee9dadd6a38491cd61b20f52645 gdb/testsuite/gdb.fortran/ptype-on-functions.exp +d383ba3d1b4ea245808cc779788d1641 gdb/testsuite/gdb.fortran/complex.exp +af42131d72a27daad63786c78a913c9a gdb/testsuite/gdb.fortran/vla-type.exp +6959b13d38123634ce95a06a0179bd96 gdb/testsuite/gdb.fortran/complex.f90 +329b88804f0f1c255748e0102d800699 gdb/testsuite/gdb.fortran/intrinsics.exp +71bf9b4596e6c0414d9dbef247c56330 gdb/testsuite/gdb.fortran/class-allocatable-array.exp +29f6c239f6523882359adfeed7e87d1a gdb/testsuite/gdb.fortran/max-depth.exp +6bbd061cbdb0d7669ac0f747e0ea7362 gdb/testsuite/gdb.fortran/block-data.f +c50d839dd5cdd5b89350d6944e4bd489 gdb/testsuite/gdb.fortran/vla.f90 +8ccfcebc75842325a577d91f56542361 gdb/testsuite/gdb.fortran/exprs.exp +93dee6afaa63b62bd4fca7836d52c4d7 gdb/testsuite/gdb.fortran/nested-funcs-2.f90 +9898c666110eebb0a12395b21e2755cd gdb/testsuite/gdb.fortran/vla-sub.f90 +f494b3d25f5c360c2420fbaa9d731c65 gdb/testsuite/gdb.fortran/intrinsics.f90 +e7a116795317bf848c545d4614eb5491 gdb/testsuite/gdb.fortran/ptype-on-functions.f90 +253bd89c927341864c3dbaf24aefadd5 gdb/testsuite/gdb.fortran/array-element.f +f2c9a12527075ec03098db35ccdc1002 gdb/testsuite/gdb.fortran/types.exp +bb22d5b1c542a8b5aaf20b7cd73abeaf gdb/testsuite/gdb.fortran/derived-type-striding.exp +61156d74e6a3d3b632152b615929d93c gdb/testsuite/gdb.fortran/nested-funcs-2.exp +d20f8c266b73f0682f9b33a40641f923 gdb/testsuite/gdb.disasm/t03_add.s +fa6a2c9c9ae47e840be659d01a4750d8 gdb/testsuite/gdb.disasm/t02_mova.s +5ee38b86a7a9e73fa0234b6c18316b6f gdb/testsuite/gdb.disasm/disassembler-options.exp +9c78e970ca913c30b9593111765c2300 gdb/testsuite/gdb.disasm/t10_and.exp +dbbb53f76688f2006bfe0b9c14fd4241 gdb/testsuite/gdb.disasm/t08_or.s +9d7ec73ab52e55ec1f83ec9e35523702 gdb/testsuite/gdb.disasm/am33.s +6cc8ba1f3909a53b183ef3cea86d41de gdb/testsuite/gdb.disasm/t12_bit.exp +601bc29dde7477712d6a40ff16dda2bf gdb/testsuite/gdb.disasm/t02_mova.exp +60f7c6e892f8db826a7bc8dc21a9a96c gdb/testsuite/gdb.disasm/t04_sub.exp +82c2e284f051cc293b39b6ce0741aa89 gdb/testsuite/gdb.disasm/t09_xor.s +d59fd9a85e3f11582d2a6ebbf21f42ca gdb/testsuite/gdb.disasm/t06_ari2.exp +a7f1ca6be44d8c0bcd6efe280adb330d gdb/testsuite/gdb.disasm/t05_cmp.exp +c02c125e2e5010129e46e393e2cdef81 gdb/testsuite/gdb.disasm/t07_ari3.s +a640da1752a98c70b4dae81fd6dc759b gdb/testsuite/gdb.disasm/t10_and.s +d3dab49394eebbb74cb82af52a1c392f gdb/testsuite/gdb.disasm/t11_logs.exp +cb76fc798d647b1ee8ba82f8ad9a5584 gdb/testsuite/gdb.disasm/h8300s.s +8df48a7abc7ba3009ba5f49d74d3c8f9 gdb/testsuite/gdb.disasm/mn10200.s +38c6309188a221a002494f2c38b8b700 gdb/testsuite/gdb.disasm/am33.exp +f2ab84c5668cb37efcf0dd54b01b1ef6 gdb/testsuite/gdb.disasm/t03_add.exp +e14e8cc3e96d350310aaac726d4ea5e3 gdb/testsuite/gdb.disasm/t11_logs.s +e546b5aa7eb88708555537439de19900 gdb/testsuite/gdb.disasm/sh3.s +931a394c56726f3907a94a3fc8324864 gdb/testsuite/gdb.disasm/h8300s.exp +fc7ee867b6421a1088cfd5100f494379 gdb/testsuite/gdb.disasm/sh3.exp +b0c212de85c1acb1e14a705f4e40a6e9 gdb/testsuite/gdb.disasm/t01_mov.s +e02ce2008b0f7cd2c4bd231e78d46c8c gdb/testsuite/gdb.disasm/mn10300.s +5250845d582d3714f1f29b719488e4aa gdb/testsuite/gdb.disasm/mn10300.exp +8c96161d8d71efd89654df8c7290f011 gdb/testsuite/gdb.disasm/t13_otr.exp +13d33a0e2d93ee9c30330c55b1f370d1 gdb/testsuite/gdb.disasm/t05_cmp.s +90270cbc5af778258a742ad48666f264 gdb/testsuite/gdb.disasm/t09_xor.exp +70b15852295559a37b00c60d55167563 gdb/testsuite/gdb.disasm/t04_sub.s +f3648a0398fcca89b9f49332f3a0fa01 gdb/testsuite/gdb.disasm/t01_mov.exp +1531e9f2d8c5fe8c476a72c8621ac6f5 gdb/testsuite/gdb.disasm/hppa.s +a36c2e9f8bf7f9d788db20927e18e921 gdb/testsuite/gdb.disasm/t12_bit.s +9f2e1d0972a5fdf62643f281a80de560 gdb/testsuite/gdb.disasm/t06_ari2.s +c6e4d49403e06174d3a72bd5fdee1f4c gdb/testsuite/gdb.disasm/t08_or.exp +8460c0712acce62511aaa4dff1800b7a gdb/testsuite/gdb.disasm/hppa.exp +037ea8ed46e08f0b5729372f5672c1dc gdb/testsuite/gdb.disasm/t07_ari3.exp +ec9241c34e56cabb8f4eadadad6c69d3 gdb/testsuite/gdb.disasm/t13_otr.s +c807559a17e2dd9534aad7956dc200fa gdb/testsuite/gdb.testsuite/foreach_with_prefix.exp +bd2f111fc39b854e22f14892835d23f1 gdb/testsuite/gdb.opt/inline-break.exp +75de8c561874bd867ddc1f8091fb7db1 gdb/testsuite/gdb.opt/inline-small-func.exp +2c574d3c593b561e5b9f326147ee748f gdb/testsuite/gdb.opt/solib-intra-step.exp +a0fd65d416396eaaee804e39a777a12c gdb/testsuite/gdb.opt/inline-markers.c +9df1df3e4d47abd40ccb6868a395199c gdb/testsuite/gdb.opt/inline-small-func.h +2708858d368a9963585c46d05f42307e gdb/testsuite/gdb.opt/inline-small-func.c +f2f50dcd73c13688d474d7d659cb8a0e gdb/testsuite/gdb.opt/inline-break.c +87b0ab8d393e58ad759600c15badd3fa gdb/testsuite/gdb.opt/inline-bt.c +cb00fcd0e18fd657e24e02cd6b63d907 gdb/testsuite/gdb.opt/solib-intra-step-lib.c +0c3d179f2fcee91f95c71c158cb0c0ee gdb/testsuite/gdb.opt/inline-bt.exp +de8983a1dd68126115bb1adecd88d293 gdb/testsuite/gdb.opt/inline-cmds.c +04d38f11e7b367c297399f15f12db8b7 gdb/testsuite/gdb.opt/clobbered-registers-O2.c +0c6345544dae7d5e6e773932561e4d34 gdb/testsuite/gdb.opt/solib-intra-step-main.c +2257719cdd92b8ce8a3940f8d698ba7f gdb/testsuite/gdb.opt/inline-locals.exp +81ab4f4e9172e2302ff0cce901546890 gdb/testsuite/gdb.opt/inline-locals.c +355ee65173a5ff9b5387aedf51605cac gdb/testsuite/gdb.opt/clobbered-registers-O2.exp +9eb4b28845d97c84d48e5ee5cbcc1fa9 gdb/testsuite/gdb.opt/inline-cmds.exp +752f3e94a980966e2ff8e2a1b7046e1d gdb/testsuite/gdb.gdb/unittest.exp +405190d2400c6453d78c926d7ba35f3b gdb/testsuite/gdb.gdb/selftest.exp +57985430dd6af579cf27803c8776dc5e gdb/testsuite/gdb.gdb/python-selftest.exp +6bf89ddb8cde2d2495c57ffc633a5b1c gdb/testsuite/gdb.gdb/complaints.exp +96b09dec3d833a53f02f05c7e911a30e gdb/testsuite/gdb.gdb/python-interrupts.exp +7c8eb3259375fcf72038c830471151b1 gdb/testsuite/analyze-racy-logs.py +1ffdd66b4b8b0121d67861259120fadf gdb/testsuite/gdb.dwarf2/watch-notconst.exp +46a074a78b94fef31f9385b5f0d98cc9 gdb/testsuite/gdb.dwarf2/dw2-bad-unresolved.exp +4ca9d6983ea4529f9b783bd72e915b60 gdb/testsuite/gdb.dwarf2/fission-base.S +fdef5d59cca66151007e91ae31d3cb57 gdb/testsuite/gdb.dwarf2/dw4-toplevel-types.cc +7700eeadb1cff19a19a03977b61704fc gdb/testsuite/gdb.dwarf2/dw2-undefined-ret-addr.S +ff54edaf4861e939f9729fa9fe1f3a7c gdb/testsuite/gdb.dwarf2/loclists-sec-offset.c +3b9154195b8fb3051231ec212d1e8d53 gdb/testsuite/gdb.dwarf2/dw2-inheritance.S +6b2e2680adac8138f19a8ee2d36c043f gdb/testsuite/gdb.dwarf2/dw2-anonymous-func.S +84273590cc2830b1da8f7b73369f7bc6 gdb/testsuite/gdb.dwarf2/dw2-symtab-includes.exp +bfaa1b8d5442b5189e92ec7aef2a77cb gdb/testsuite/gdb.dwarf2/symtab-producer.exp +bad17e68045e75afbdcd72adf75cc167 gdb/testsuite/gdb.dwarf2/dw2-restrict.c +002e41c903a6c52a67679fb888443acb gdb/testsuite/gdb.dwarf2/dw2-abs-hi-pc-world.c +8c5633461cd6df71d347ddff516aecbb gdb/testsuite/gdb.dwarf2/dw2-bad-parameter-type.exp +0bbd10e53c92ff09e6cf74b8ecdcb93e gdb/testsuite/gdb.dwarf2/comp-unit-lang.c +25cf478ec87cc441666474c2a87a4b5b gdb/testsuite/gdb.dwarf2/dw2-single-line-discriminators.c +ecab7bdee285219b6e0a0e6301a92649 gdb/testsuite/gdb.dwarf2/dwzbuildid.exp +5e35b398339c2ed429656adb08b03942 gdb/testsuite/gdb.dwarf2/loclists-multiple-cus.c +c55750dafb29d415f4519439e97326eb gdb/testsuite/gdb.dwarf2/dw2-bad-elf-other.S +f99f10bef9a00204e3500a22fe87dde3 gdb/testsuite/gdb.dwarf2/implref-global.c +940c3b19b323676966573dd26a6806ff gdb/testsuite/gdb.dwarf2/dw2-restore.S +4b5399faac8baaf52c283071a8f707f0 gdb/testsuite/gdb.dwarf2/dwp-symlink.c +1bcc55efba5feca32cb61a38945ac4fa gdb/testsuite/gdb.dwarf2/dw5-rnglist-test.cc +cf1ce7cde20ba13022e62776984d6961 gdb/testsuite/gdb.dwarf2/rnglists-sec-offset.exp +ac2f4e169dd86f9dfeafb0038ce57d3f gdb/testsuite/gdb.dwarf2/dw2-minsym-in-cu.exp +9b9cbc659e73e8f4a39fe1ef46fdab4f gdb/testsuite/gdb.dwarf2/typedef-void-finish.exp +21e0e0eb126f0995331a2cfcd8d0c025 gdb/testsuite/gdb.dwarf2/member-ptr-forwardref.exp +9df1df3e4d47abd40ccb6868a395199c gdb/testsuite/gdb.dwarf2/dw2-inline-small-func.h +0ce72178a7f413fe772a9e0ea8ae5a31 gdb/testsuite/gdb.dwarf2/dw2-inline-param.S +dba29943717205a12df9d62b6782aa29 gdb/testsuite/gdb.dwarf2/dwp-symlink.exp +8f32efc8524ecbb0cbb1beef18f0b745 gdb/testsuite/gdb.dwarf2/variant.c +395435a9a227eaf615c6e45cc41e256a gdb/testsuite/gdb.dwarf2/bad-regnum.c +5a423197593c5dc80aa4583e997150f2 gdb/testsuite/gdb.dwarf2/dw2-entry-value.exp +8879784a4bfd09476415078a368cf26c gdb/testsuite/gdb.dwarf2/clztest.S +985a5124219d4e5a9407c17e1528a5b6 gdb/testsuite/gdb.dwarf2/dw2-simple-locdesc.exp +443e9b97ae7143336d4167270003ebb6 gdb/testsuite/gdb.dwarf2/dw2-icycle.c +021d27a7e12e71e885199025a1f4fa26 gdb/testsuite/gdb.dwarf2/dw2-modula2-self-type.S +66e0b85949037da0e2d096af54333f68 gdb/testsuite/gdb.dwarf2/pieces-optimized-out.S +d459bc1d4330cf1abecc491cdaa879e7 gdb/testsuite/gdb.dwarf2/implref-struct.c +e57e1e9194918d9e5ecccb39419b8ad2 gdb/testsuite/gdb.dwarf2/fission-multi-cu1.c +f9d816c563ed221768b9e4a1ffe68bce gdb/testsuite/gdb.dwarf2/dw2-reg-undefined.exp +7f8e7e72d1d8641de27bb71a3d527fd4 gdb/testsuite/gdb.dwarf2/dwz.exp +3564e6aab97d70dd363b03b34bf4291f gdb/testsuite/gdb.dwarf2/dw2-entry-value-main.c +bf9704a4a236a1d50e77b1440a748eb9 gdb/testsuite/gdb.dwarf2/dw2-undefined-ret-addr.c +f535d0f355796ab1bde3611e1a543485 gdb/testsuite/gdb.dwarf2/dw2-objfile-overlap-inner.S +a7979b6dc846d9f5a8e38953e9c43924 gdb/testsuite/gdb.dwarf2/dw2-compdir-oldgcc.S +07999ae74f9cb7a550c64d3578948746 gdb/testsuite/gdb.dwarf2/dw2-compdir-oldgcc.exp +8a196c540d72d5e79c263ba5a8c61c56 gdb/testsuite/gdb.dwarf2/dw2-inline-param.exp +d9befa56b97af56dcdaa14adff1aca92 gdb/testsuite/gdb.dwarf2/dw2-cu-size.S +eef2fc461cd9d95a547f40bc566149a5 gdb/testsuite/gdb.dwarf2/dw2-unresolved.exp +6ab892367d4262f55d6cb6aeece8e973 gdb/testsuite/gdb.dwarf2/dw2-bad-parameter-type.S +4397405c763390e937a787affac31a1b gdb/testsuite/gdb.dwarf2/fission-loclists-pie.exp +55492078b75d2f6b7fb87ea9e5482d6a gdb/testsuite/gdb.dwarf2/dw2-bad-mips-linkage-name.exp +1d557c24acbeb51fb654ea07d4554956 gdb/testsuite/gdb.dwarf2/dw2-skip-prologue.exp +554c684b412880a5c9512c510ccb76cf gdb/testsuite/gdb.dwarf2/dw2-single-line-discriminators.S +31d1c76eb003edceed68904b200a3d34 gdb/testsuite/gdb.dwarf2/trace-crash.exp +ac3582d5cb0124583a04a7212ebf09e6 gdb/testsuite/gdb.dwarf2/missing-sig-type.exp +4d8eb18bab48de1405f8a2c6235c7368 gdb/testsuite/gdb.dwarf2/dw2-error.c +9e9643c0e3a674d7dea907440cddb1ad gdb/testsuite/gdb.dwarf2/implptr.exp +29abc1fa3f15a739c507319e5938ead0 gdb/testsuite/gdb.dwarf2/pr13961.S +ee47b39e2cdd6a59b685ded50ea9c818 gdb/testsuite/gdb.dwarf2/dw2-ranges-func-hi-cold.c +304074a2c0db6b1593142d41e57efcd2 gdb/testsuite/gdb.dwarf2/dw2-bad-elf.c +932d9e27668c0bd0365bcce1e67a2272 gdb/testsuite/gdb.dwarf2/dynarr-ptr.exp +b456c05edf29f422ce1fa9e93fdc9243 gdb/testsuite/gdb.dwarf2/watch-notconst.c +b2e299098fd243f806fb3d2266bfff44 gdb/testsuite/gdb.dwarf2/method-ptr.exp +c4dbda1743e35ea16b6745e77b8a7999 gdb/testsuite/gdb.dwarf2/dw2-inline-break.exp +d6347521831c6d7665b7ec2ca5a8c706 gdb/testsuite/gdb.dwarf2/fission-base.exp +6df3d71a798755bff7dc1aaef1500ba1 gdb/testsuite/gdb.dwarf2/fission-mix.h +7198e0c65a1c495871b5ca5e9b96f3e2 gdb/testsuite/gdb.dwarf2/dw2-const.S +668e0aba0e31981ad585a555e0d45c25 gdb/testsuite/gdb.dwarf2/dw2-ranges.c +c7757e408420a39568acf124115dc320 gdb/testsuite/gdb.dwarf2/dw2-ranges-func-lo-cold.c +b634578be3239e2d99b8f98c40f59397 gdb/testsuite/gdb.dwarf2/dw2-case-insensitive.c +70e39bd8bf24a96f97b6eab6afa62ff0 gdb/testsuite/gdb.dwarf2/dw2-dir-file-name.c +d0c228d0fdf8d4f2f715c0bf7766422b gdb/testsuite/gdb.dwarf2/bitfield-parent-optimized-out.exp +3d899c06787cf2541735cc9bff9e670a gdb/testsuite/gdb.dwarf2/dw2-lexical-block-bare.exp +84dfdabac6f10bd8e20f5ddf6e5e20a4 gdb/testsuite/gdb.dwarf2/dw4-sig-types-b.cc +6741e5fd7be918cfc6170bf4ef724991 gdb/testsuite/gdb.dwarf2/dw2-inline-many-frames.exp +5aad3f2c6d783720adb9a845de13f688 gdb/testsuite/gdb.dwarf2/dw2-icycle.exp +e4f79644ce4d6d665a451151a23c14c5 gdb/testsuite/gdb.dwarf2/dw2-op-out-param.S +c464593a3479534e62be75b578afcd03 gdb/testsuite/gdb.dwarf2/formdata16.exp +f8777c5541048ce092250dbdcd66a7eb gdb/testsuite/gdb.dwarf2/dw5-rnglist-test.exp +a69d8e608c4d3392c76b4dc22d959f90 gdb/testsuite/gdb.dwarf2/callframecfa.exp +eb7377fabf920e93c27c1ecd4a7f1572 gdb/testsuite/gdb.dwarf2/dw2-inline-header-1.exp +c0d0f3f8915371096cce819e14a7aa8e gdb/testsuite/gdb.dwarf2/imported-unit.exp +1d1ae9a8eae422d609e9dc86afc6d43b gdb/testsuite/gdb.dwarf2/dw2-ada-ffffffff.S +34c82c43deed36fcfa4899d76006ba56 gdb/testsuite/gdb.dwarf2/data-loc.exp +93de3a3ce44fa976134e577458e77e4d gdb/testsuite/gdb.dwarf2/dw2-vendor-extended-opcode.c +845d6835f90122e832f8066b152d643f gdb/testsuite/gdb.dwarf2/dw2-is-stmt-2.c +8dd07bd36cf6f89fdc390a71a7a7a5fc gdb/testsuite/gdb.dwarf2/dw2-abs-hi-pc-world-dbg.S +b7277be72b746e27ef6769a5824f9a68 gdb/testsuite/gdb.dwarf2/fission-mix2.c +64af0af617f9f6100a78537052230edc gdb/testsuite/gdb.dwarf2/dw2-op-out-param.exp +4914fcb592df1f12315c49a34a10356c gdb/testsuite/gdb.dwarf2/dw2-intermix.exp +39534caad9f4b60104cab081fdd93f14 gdb/testsuite/gdb.dwarf2/implptr-optimized-out.exp +7b1e5e9300e603a9b77b038adb7db5c2 gdb/testsuite/gdb.dwarf2/dw2-abs-hi-pc-hello-dbg.S +eeb9fe242abaa86e179d8a39058b4355 gdb/testsuite/gdb.dwarf2/dw2-var-zero-addr.exp +1fedccfe25c1443f0a6c33ddad0c04e8 gdb/testsuite/gdb.dwarf2/typeddwarf-amd64.S +2757d0b20c3cde94ccebb735a668e3ef gdb/testsuite/gdb.dwarf2/watch-notconst2.S +e94b39eb7b76249b4b88832929440cd1 gdb/testsuite/gdb.dwarf2/nostaticblock.exp +6489206d4146e24bd94a0bc44f1d3a30 gdb/testsuite/gdb.dwarf2/dw2-inline-header-2.exp +feff8734e07ab3b67d2eb77f67828ab6 gdb/testsuite/gdb.dwarf2/dw2-linkage-name-trust.S +25efc2d5d8cf598c85f9f4f7a9299591 gdb/testsuite/gdb.dwarf2/dw2-dup-frame.c +fd6424eecf1fa23e6ec4b37648acd247 gdb/testsuite/gdb.dwarf2/clang-debug-names.c +cad55ab6c551ab9f7c0e594e55a4d0d2 gdb/testsuite/gdb.dwarf2/callframecfa.S +d79971afe56d0cc79b824edafba76917 gdb/testsuite/gdb.dwarf2/dw2-cp-infcall-ref-static.S +9946b6ed30f04fe96d0d44dffed21978 gdb/testsuite/gdb.dwarf2/dw2-inline-header.h +1a9cf722270a54850f726f2990066eae gdb/testsuite/gdb.dwarf2/dw2-icc-opaque.exp +4a12e0fe05c2084d18c8702bbf5481eb gdb/testsuite/gdb.dwarf2/dw2-error.S +927152320f5d916d98b65d8e40300eed gdb/testsuite/gdb.dwarf2/dw2-skip-prologue.S +8d899902d3404a4a85f188cb225ed50d gdb/testsuite/gdb.dwarf2/var-access.c +7ac87cc2b6d954cfd3beb9bd0da9b9e2 gdb/testsuite/gdb.dwarf2/pr10770.exp +1424eda2f4236b1dbaab0daf75b4cb60 gdb/testsuite/gdb.dwarf2/dw2-stack-boundary.exp +075ee4da88be6ff4297e6d6b44b113a1 gdb/testsuite/gdb.dwarf2/pr10770.c +6f1909a1514d6aa12a27723fd067690f gdb/testsuite/gdb.dwarf2/dw2-dummy-cu.S +4029fe7d12928695058cad252eb8ff56 gdb/testsuite/gdb.dwarf2/trace-crash.S +20570b993a83e0b1a79026aaca056a1d gdb/testsuite/gdb.dwarf2/dw2-restore.exp +a8cace5e4de84983e701c17d27efd17d gdb/testsuite/gdb.dwarf2/pr13961.exp +c6361431dc7ff482d2c4d184f68f944b gdb/testsuite/gdb.dwarf2/dw2-is-stmt.exp +86e8017f4dbdfdf7b279aadaab744aeb gdb/testsuite/gdb.dwarf2/pieces.S +cfc35c7bac8f62a0717d69be3c1eb056 gdb/testsuite/gdb.dwarf2/dw2-empty-namespace.exp +5e76b670b98b798172a8870bc2bf772f gdb/testsuite/gdb.dwarf2/arr-stride.exp +daf7dfcc70ee24d11899ab258c93e45a gdb/testsuite/gdb.dwarf2/dw2-stack-boundary.S +fc15e90c825f8287a03ffd6befc1dd1d gdb/testsuite/gdb.dwarf2/atomic.c +dbcef8b955d310b003a2e8c1236d5552 gdb/testsuite/gdb.dwarf2/implref-array.exp +6517629574f2c6d7e58e3b60890d7f73 gdb/testsuite/gdb.dwarf2/inlined_subroutine-inheritance.exp +e20ef61596fcdec742a194839cca3548 gdb/testsuite/gdb.dwarf2/clang-debug-names.exp.tcl +78952f678803200f53f3d2a663cac20c gdb/testsuite/gdb.dwarf2/dw2-opt-structptr.c +2126b0a0f1fc992be22d2976e0619116 gdb/testsuite/gdb.dwarf2/main-subprogram.exp +d4d8849c40789eaa982b35c4b5c061a6 gdb/testsuite/gdb.dwarf2/template-specification-full-name.exp +bdc386005d272173f71c38a4577bb012 gdb/testsuite/gdb.dwarf2/varval.c +a65c58d750adc57161ae8537f6c316a3 gdb/testsuite/gdb.dwarf2/cpp-linkage-name.exp +7b727921788e1923c59c2ecf810f3479 gdb/testsuite/gdb.dwarf2/dw2-line-number-zero.exp +65c0060908527d1e5f30e7e5316c4677 gdb/testsuite/gdb.dwarf2/var-access.exp +dbca390dc6fea8c0965f0da6fc102c6c gdb/testsuite/gdb.dwarf2/dw2-namespaceless-anonymous.c +3cfcf734198d23faf60105b6072d540f gdb/testsuite/gdb.dwarf2/dw2-op-call.S +66dff7abb42a5b191f3df1fb1617237c gdb/testsuite/gdb.dwarf2/dw4-sig-types.h +de54afde34afb303c85b06092a7585f8 gdb/testsuite/gdb.dwarf2/dw2-ranges-psym.exp +dd067b8ab9455d7148440ae37ddcc36b gdb/testsuite/gdb.dwarf2/dw2-dummy-cu.exp +3ed1920f637709d3a975b716531d610f gdb/testsuite/gdb.dwarf2/dw2-bad-unresolved.c +5ed88c268326ae59946286c9ee2efffe gdb/testsuite/gdb.dwarf2/dw2-cp-infcall-ref-static.exp +ba41a3219e7ec14d440401d472ab7e22 gdb/testsuite/gdb.dwarf2/comp-unit-lang.exp +ccf3c6fea1ff2d0cf84d6662a9e35f2a gdb/testsuite/gdb.dwarf2/dw2-inline-header-3.exp +44f19edf5e38a8a0afc80822332a71f3 gdb/testsuite/gdb.dwarf2/main-subprogram.c +ce3d8f0351774f8edfffca4935163062 gdb/testsuite/gdb.dwarf2/dw2-skip-prologue.c +87cfee7ca728856271eabe168bb3279b gdb/testsuite/gdb.dwarf2/dw2-canonicalize-type.S +84889f81788f4f5ab5b16b723fd7c4b0 gdb/testsuite/gdb.dwarf2/dw2-bad-elf.exp +140fc064911371a5238f16166eae4017 gdb/testsuite/gdb.dwarf2/implptr-64bit.exp +ce9350453a42fd2fb6163aa92030e42a gdb/testsuite/gdb.dwarf2/dw2-is-stmt-2.exp +5b0e195cf65d6f35b14d98a2d0b0833f gdb/testsuite/gdb.dwarf2/ada-linkage-name.c +2d4c616476a4a9f838c1ec45a4eab79f gdb/testsuite/gdb.dwarf2/count.exp +c88a9bb7ea35122d7eb2aafd8573e2bc gdb/testsuite/gdb.dwarf2/arr-stride.c +57710a25cb33cb8405324db8780225b4 gdb/testsuite/gdb.dwarf2/dw2-ada-ffffffff.exp +c280abb7b23ee6ec9ddd189362c63218 gdb/testsuite/gdb.dwarf2/method-ptr.cc +a7e9a82c392307032c11724e90de9171 gdb/testsuite/gdb.dwarf2/per-bfd-sharing.c +ae760ca8a63e1418ba5c907ec0e27836 gdb/testsuite/gdb.dwarf2/dynarr-ptr.c +06d6259496654fe83eae1a65b67f6bf5 gdb/testsuite/gdb.dwarf2/arr-subrange.exp +efb9a4d4a87837981b947623c560fcd6 gdb/testsuite/gdb.dwarf2/dup-psym.S +fd339ceca17013d2c4a9c03d9b4a2b33 gdb/testsuite/gdb.dwarf2/gdb-index.exp +b70668e641106e84d45ce40c694677b9 gdb/testsuite/gdb.dwarf2/dw2-ranges.exp +f22f8e4323557b031c8ea2b8257b6153 gdb/testsuite/gdb.dwarf2/dw4-sig-types.exp +cbff2a6253fb8709e750ce7373083499 gdb/testsuite/gdb.dwarf2/dw2-abs-hi-pc.exp +8e721ea079983a8fb447a60a2715859b gdb/testsuite/gdb.dwarf2/pieces-optimized-out.c +33f20903e0cbd712487f7d5959f6c7e3 gdb/testsuite/gdb.dwarf2/dw2-ref-missing-frame-func.c +5129785a20f285b6b06556ed5fae4dfc gdb/testsuite/gdb.dwarf2/dw2-anon-mptr.S +f5ce1f846d127c4ecd6074832efa464e gdb/testsuite/gdb.dwarf2/break-inline-psymtab-2.c +35cf5bd1652ac9c66bd2874ad2744b16 gdb/testsuite/gdb.dwarf2/implref-struct.exp +bbcee1b3971ea086e020a522f263a3ca gdb/testsuite/gdb.dwarf2/dw2-strp.exp +4c6b039ae546c47aabe94a4817d2d518 gdb/testsuite/gdb.dwarf2/fission-multi-cu.exp +ac49f69ff69c2c704a06a6065aeea2e8 gdb/testsuite/gdb.dwarf2/dw2-inline-many-frames.c +24ca079f227b63dcfa7270a7b8de3b04 gdb/testsuite/gdb.dwarf2/imported-unit-runto-main.exp +3564e6aab97d70dd363b03b34bf4291f gdb/testsuite/gdb.dwarf2/dw2-param-error-main.c +41fb93f03986fa4b2224e90ff0dbccea gdb/testsuite/gdb.dwarf2/dup-psym.exp +8f1b91308af078a480c605afad120d77 gdb/testsuite/gdb.dwarf2/void-type.exp +e20e28ec477f4f55f7b476252e04974c gdb/testsuite/gdb.dwarf2/imported-unit-abstract-const-value.exp +dac3b8b22fa51732fe0a4fdd8196cbce gdb/testsuite/gdb.dwarf2/dw2-empty-pc-range.S +a5b4f4febe11b3012133eff65923a80e gdb/testsuite/gdb.dwarf2/gdb-add-index.exp +6e40f93fbdf3e0c3031ba4761af98f3a gdb/testsuite/gdb.dwarf2/dw4-toplevel-types.exp +1e576c18ce0429fa933b85c8cbbe28a2 gdb/testsuite/gdb.dwarf2/dw2-filename.S +c59680c3ade849d685c04171bd251b85 gdb/testsuite/gdb.dwarf2/fission-reread.S +4bf1aa26382912dea35bb3c087e1572b gdb/testsuite/gdb.dwarf2/typeddwarf.exp +8b66522ed29adaf2b06bafe51563a294 gdb/testsuite/gdb.dwarf2/dw2-ranges-func.exp +7073064a7bd4e2c42baa0c6036a7f306 gdb/testsuite/gdb.dwarf2/dw2-compressed.exp +76b1df9a80b60aa2eb021a5eca00bc43 gdb/testsuite/gdb.dwarf2/pr11465.S +77187a64c4bb0cfef6bdad862047559c gdb/testsuite/gdb.dwarf2/imported-unit.c +7c64ee3f1f42a0bf7a98a52026f71dde gdb/testsuite/gdb.dwarf2/dw2-inline-stepping.c +951b7fa7e72a89634541db9c5b7a1507 gdb/testsuite/gdb.dwarf2/dw2-linkage-name-trust-main.cc +fa53f4a39eee12f4d146a73379d675a4 gdb/testsuite/gdb.dwarf2/frame-inlined-in-outer-frame.S +ceac6682045aa1f38ffbb76f529ac4d6 gdb/testsuite/gdb.dwarf2/nonvar-access.exp +dafc26574fe116625fe8fb2504d7cb62 gdb/testsuite/gdb.dwarf2/dw2-dup-frame.S +8f43b71a9c1f8bbeba20426fa0b9d4dc gdb/testsuite/gdb.dwarf2/dwp-sepdebug.exp +302d99e782a68b4a1f8b2640a0afecee gdb/testsuite/gdb.dwarf2/dw2-empty-namespace.S +bd056a69e766c5163ceb689176400d3c gdb/testsuite/gdb.dwarf2/dw2-ifort-parameter.exp +7004dc63713c419a1d0392b86c047f49 gdb/testsuite/gdb.dwarf2/dw2-icycle.S +46dfbe8fc093d778618b9230c91ff7de gdb/testsuite/gdb.dwarf2/dw2-case-insensitive.exp +aadcf71933e84e45ac6d2d370c806567 gdb/testsuite/gdb.dwarf2/dw2-inline-param-main.c +ce39bc213a3e9e0be25c6deea4743979 gdb/testsuite/gdb.dwarf2/per-bfd-sharing.exp +c47a38730a2a6c1f0908eab8078d0e51 gdb/testsuite/gdb.dwarf2/dw2-modula2-self-type.exp +e4f2956c2365c8dfa9abc223b3f338dd gdb/testsuite/gdb.dwarf2/implptr.c +c8017fc7f5e42903c2e790ff0520b53f gdb/testsuite/gdb.dwarf2/dw2-noloc.S +a9d1814e91b1652544cf87629ae7d948 gdb/testsuite/gdb.dwarf2/clztest.c +57ad47777a1fbdbd67632859c24d59ba gdb/testsuite/gdb.dwarf2/fission-base.c +5abd31c7c407b715af5528c6f3b19746 gdb/testsuite/gdb.dwarf2/dw2-objfile-overlap.exp +7d0f7951a0d6bcd5b09cf2d340743472 gdb/testsuite/gdb.dwarf2/dw2-linkage-name-trust.exp +6ac855a66928db1731e71e73694c1937 gdb/testsuite/gdb.dwarf2/dw2-anon-mptr.exp +f0de28b40710cf89da49d0cd784a9d8f gdb/testsuite/gdb.dwarf2/implptrpiece.exp +dc0040c11b5dee6daebe0b2f68ae0157 gdb/testsuite/gdb.dwarf2/dw2-param-error.S +765a944ad7e8188c161c634b392ec4d2 gdb/testsuite/gdb.dwarf2/dw2-objfile-overlap-outer.S +91ac8221a17d604ae36b236630b0da6f gdb/testsuite/gdb.dwarf2/variant.exp +5fe74b3eed39791c0cd1159d81d7801e gdb/testsuite/gdb.dwarf2/dw2-inline-header-lbls.c +dc16a067d9c44021b9230e39cef518d2 gdb/testsuite/gdb.dwarf2/dw4-sig-type-unused.S +33f76bb16f746d72f4aa6d7b9d871c29 gdb/testsuite/gdb.dwarf2/valop.exp +cc1ecc781b73e66c2572ab36cf1ad951 gdb/testsuite/gdb.dwarf2/dw2-op-stack-value.S +f5316048f70c1e92c3dc6b0a25c80bf2 gdb/testsuite/gdb.dwarf2/clztest.exp +3d65f5350f46173970b4cdc491e3c804 gdb/testsuite/gdb.dwarf2/implref-const.exp +35068440e13bf8e159afde1ece565d2f gdb/testsuite/gdb.dwarf2/cpp-linkage-name.c +e52f6c7002a3276ed8991f1c9386b9dd gdb/testsuite/gdb.dwarf2/pieces.exp +96fbf50e88cc312c7fde25a32f8761db gdb/testsuite/gdb.dwarf2/main-foo.c +d5f5f269f8bf7da8d18968dcc22d506a gdb/testsuite/gdb.dwarf2/arr-subrange.c +64e777e7becfaee5d328ad6ffd87eeba gdb/testsuite/gdb.dwarf2/dw2-opt-structptr.exp +d66ae8c2b1fc4f67d350b4b289c69b47 gdb/testsuite/gdb.dwarf2/clang-debug-names-2-foo.c +7e76da4281c7edd1c1daf8fd85669f1d gdb/testsuite/gdb.dwarf2/dw2-ref-missing-frame-main.c +b9941a4af59851c3fcc5b501bde5f879 gdb/testsuite/gdb.dwarf2/dw2-ranges-psym.c +3480318460b2a9ec17a08cc5c4ecae12 gdb/testsuite/gdb.dwarf2/fission-loclists.S +36bc0b5745830c2288591c1a836ae39f gdb/testsuite/gdb.dwarf2/dw2-compressed.S +7ff5e034e5c43c855273fe933f489fc3 gdb/testsuite/gdb.dwarf2/frame-inlined-in-outer-frame.exp +32c50e708ee01556913e50056477ec43 gdb/testsuite/gdb.dwarf2/info-locals-optimized-out.c +9b375cfdeabde7f6e2514d577ed5a2dd gdb/testsuite/gdb.dwarf2/implref-array.c +5b2533d8d36d5acc84aa47619c68d4ea gdb/testsuite/gdb.dwarf2/dw2-simple-locdesc.S +7255d41b7c6cf938fc18d9e188c49529 gdb/testsuite/gdb.dwarf2/dw2-restrict.S +d941dae33b2b6a391df93938a62392cf gdb/testsuite/gdb.dwarf2/dw2-inline-header.c +664f43e7d181f6e63802ecd82af502f5 gdb/testsuite/gdb.dwarf2/dw2-disasm-over-non-stmt.exp +4fc84daa3d1698e5691813492a1743dd gdb/testsuite/gdb.dwarf2/loclists-multiple-cus.exp +a141a8006e15836726aafae910e8d740 gdb/testsuite/gdb.dwarf2/opaque-type-lookup.c +db136c045c473bf9395eb4bccfa252f2 gdb/testsuite/gdb.dwarf2/clang-debug-names.exp +bbeb24cec645431715ac69610579e158 gdb/testsuite/gdb.dwarf2/main.c +075d1d26cc221139e0d04b679eb245da gdb/testsuite/gdb.dwarf2/dw2-empty-pc-range.exp +5dd01e6b0ef02c4f4cf4ba36ac3acea7 gdb/testsuite/gdb.dwarf2/pieces-optimized-out.exp +6c902089e655234367433df5e6d74d35 gdb/testsuite/gdb.dwarf2/dw2-dir-file-name.exp +92b20e3bb13221fffe4ad4dc1c8c98c5 gdb/testsuite/gdb.dwarf2/dw2-dos-drive.S +e10522c391f9b1252bcc3088a8e4f32f gdb/testsuite/gdb.dwarf2/info-locals-optimized-out.exp +6098973fb67e39238a65a4be8fa1663c gdb/testsuite/gdb.dwarf2/dw2-error.exp +3586c767b804f794f6c85a549bccf14b gdb/testsuite/gdb.dwarf2/watch-notconst2.c +519bb285bb1237c41ce701c49dc74e9f gdb/testsuite/gdb.dwarf2/dw2-const.exp +ca5b8904dd710c4c148afa363a6f6fb6 gdb/testsuite/gdb.dwarf2/void-type.c +adac024d8336b6770698bfbc2cf5722d gdb/testsuite/gdb.dwarf2/atomic-type.exp +9ad9351e82786c240d35dd3929932807 gdb/testsuite/gdb.dwarf2/dw2-op-call.exp +ad216e3a09debdd46c2e9f3facd5cf0b gdb/testsuite/gdb.dwarf2/loclists-sec-offset.exp +1142daf4994af6918ab921cb13ca3d0c gdb/testsuite/gdb.dwarf2/dw2-canonicalize-type.exp +7e9145d6afd659b3fa5f440c2889d295 gdb/testsuite/gdb.dwarf2/struct-with-sig.exp +a396d3ed2cdb74607ed48f8e78e91878 gdb/testsuite/gdb.dwarf2/dw2-unusual-field-names.exp +8921e49ceadb3cbd0eb78f687e645f0d gdb/testsuite/gdb.dwarf2/dw2-vendor-extended-opcode.exp +38f7ea597d2d4bff716f1fa6c575f7a2 gdb/testsuite/gdb.dwarf2/bad-regnum.exp +4fef2a111ef028cb0256a38610f80001 gdb/testsuite/gdb.dwarf2/dw2-intercu.S +5879cee5d22f3c08b3b4fe42c1427c19 gdb/testsuite/gdb.dwarf2/ada-valprint-error.exp +9e4ee9e51a8f76cfe03ad2abb054e1cf gdb/testsuite/gdb.dwarf2/valop.S +8ce21cc932a8e24e832d8ed81a5db2ee gdb/testsuite/gdb.dwarf2/dw2-dos-drive.exp +cd35f6cbc3e88c19ab3a2ae39c3c0d89 gdb/testsuite/gdb.dwarf2/dw2-inheritance.exp +df00c553d682807d044929745032a58c gdb/testsuite/gdb.dwarf2/data-loc.c +c5cc64d906d466eacf4141945baec3e6 gdb/testsuite/gdb.dwarf2/dw2-entry-value.S +6a83338744862ff119f4f6560c79634c gdb/testsuite/gdb.dwarf2/dw2-inline-small-func-lbls.c +107f454ae310c93f2f322d337153c832 gdb/testsuite/gdb.dwarf2/dw2-filename.exp +c718f411fcaac052288a4daac51744f3 gdb/testsuite/gdb.dwarf2/fission-loclists-pie.S +e1259f89a92de858f17070f62525277b gdb/testsuite/gdb.dwarf2/fission-mix.exp +be134419b42d19805d96cc568013521d gdb/testsuite/gdb.dwarf2/dw2-producer.exp +cf32007247e78761364a75318a9ce773 gdb/testsuite/gdb.dwarf2/fission-multi-cu.S +cede761d0f56578839a13173c969845f gdb/testsuite/gdb.dwarf2/dw2-unresolved-main.c +456997d83f7466025af745bfd4a14ede gdb/testsuite/gdb.dwarf2/dw4-sig-type-unused.exp +0cd834b3b40f7f7743542217ca59f1ef gdb/testsuite/gdb.dwarf2/dw2-regno-invalid.exp +b2371b7eb371b74024d8fde1aa3b7775 gdb/testsuite/gdb.dwarf2/fission-multi-cu2.c +ab07b9a9a5d4c3133f20b8e7a9597ab0 gdb/testsuite/gdb.dwarf2/pieces.c +96f226f320bded0eb37631510307f76d gdb/testsuite/gdb.dwarf2/dw2-abs-hi-pc.c +6c5ee677185a01010d37a99c559f9680 gdb/testsuite/gdb.dwarf2/ada-valprint-error.c +882a331fba257ca2ce3a40f0ab4e12eb gdb/testsuite/gdb.dwarf2/break-inline-psymtab.exp +d65883c3024bf95915c9cc3053f61554 gdb/testsuite/gdb.dwarf2/fission-mix.c +63595906d6367cebb127294184741687 gdb/testsuite/gdb.dwarf2/dw2-namespaceless-anonymous.exp +46279b892ef838a09a1910cd927b426c gdb/testsuite/gdb.dwarf2/dw2-inline-stepping.exp +54b8a6b0ff52958ee33024c56b9bd2bd gdb/testsuite/gdb.dwarf2/file1.txt +2eac4d53df81148ad3b6b2cdf848cfec gdb/testsuite/gdb.dwarf2/dw2-cu-size.exp +2fc7f56b8c622e229854cf375bb46ca7 gdb/testsuite/gdb.dwarf2/varval.exp +c0134b9b9b871bafde4dda2450c2cd46 gdb/testsuite/gdb.dwarf2/dw2-ref-missing-frame.S +0adab9983b774545e600a279ce20e533 gdb/testsuite/gdb.dwarf2/dw2-bad-mips-linkage-name.c +713a9b72850c56f77d5fa4a9820b9d64 gdb/testsuite/gdb.dwarf2/dw2-inline-small-func.exp +bc1db5762a6283d6893a9c428af7bd05 gdb/testsuite/gdb.dwarf2/break-inline-psymtab.c +d72c1484eca3e1dd0ec3a3ed01300265 gdb/testsuite/gdb.dwarf2/rnglists-multiple-cus.exp +db77bf27a1c793868e21ea514ae06e28 gdb/testsuite/gdb.dwarf2/dw2-strp.S +dcc08459a8f535bc4d5ab8f58476e1fa gdb/testsuite/gdb.dwarf2/dw2-ranges-base.c +0d4f662c78c5fb8c3351724436fc8e79 gdb/testsuite/gdb.dwarf2/dw2-ifort-parameter.c +bda7465c9082a6edd477d5dedc0a8089 gdb/testsuite/gdb.dwarf2/opaque-type-lookup.exp +28dc7c0f523bd2b20a55573cf4a647e6 gdb/testsuite/gdb.dwarf2/dw2-cp-infcall-ref-static-main.c +4bbc3a8340a38d5cdc2daf678bdd1386 gdb/testsuite/gdb.dwarf2/dw2-var-zero-addr.S +184f306ea23bac1a34fad3075f46c65e gdb/testsuite/gdb.dwarf2/dw2-noloc-main.c +860055fdc5068435e42fa20c6136ef61 gdb/testsuite/gdb.dwarf2/enum-type.exp +ba7938a8cdb87667066076554a59da2b gdb/testsuite/gdb.dwarf2/dw2-op-stack-value.exp +6d7d1d8b23740bd95745c065053d746d gdb/testsuite/gdb.dwarf2/dw2-common-block.S +e577de7b10ad5a77dbca98f8607be900 gdb/testsuite/gdb.dwarf2/corrupt.c +5744e2364a80cad1d1bf086c18a30f73 gdb/testsuite/gdb.dwarf2/missing-type-name.exp +daf7275b48424acdfc659414338f304f gdb/testsuite/gdb.dwarf2/dw4-sig-types.cc +3c9bff32b65b6e7b84b68da2b458e8ee gdb/testsuite/gdb.dwarf2/dw2-inline-break.S +c5da36de31179381c4073eb95b1708a4 gdb/testsuite/gdb.dwarf2/dw2-common-block.exp +344f7037ea9bd3f84bd34aafe21e3d0b gdb/testsuite/gdb.dwarf2/dw2-intermix.S +a051c630c51975af3b31b506e56ba1c8 gdb/testsuite/gdb.dwarf2/implref-global.exp +bddb3593e5772156c3c2581674228663 gdb/testsuite/gdb.dwarf2/dw2-ranges-main.c +62cc8a5a2b249b7150bb3fdbbda1f4d1 gdb/testsuite/gdb.dwarf2/dw2-dup-frame.exp +8d61c7a4d3a66512db2cef2254452757 gdb/testsuite/gdb.dwarf2/dw2-line-number-zero.c +3815c039320445c59ef5aee3180d0abb gdb/testsuite/gdb.dwarf2/subrange.exp +7f9f96d3dc3fc643e73363d5c086c5b3 gdb/testsuite/gdb.dwarf2/formdata16.c +ad7e822e50b47cb826325a95ade05193 gdb/testsuite/gdb.dwarf2/dw2-unusual-field-names.c +f288f493fa7bdcee3edb42e8a2b8f7fc gdb/testsuite/gdb.dwarf2/dw2-is-stmt.c +271a778078edef43acaa32ac7b5bb598 gdb/testsuite/gdb.dwarf2/fission-reread.exp +284346f66045a2c3838f8efee61b5e6e gdb/testsuite/gdb.dwarf2/dw2-double-set-die-type.exp +b6bd09e585e96a614bde97ac08b05464 gdb/testsuite/gdb.dwarf2/dw2-basic.S +7b4216d1cdede9a7477261f2ae0f16e1 gdb/testsuite/gdb.dwarf2/dw2-anonymous-func.exp +77f3a8bd35c5ce233e18ca64628246fb gdb/testsuite/gdb.dwarf2/dw2-restrict.exp +79222d101d587a605b5a858b330f9c5a gdb/testsuite/gdb.dwarf2/dw2-reg-undefined.c +c623c8a9f4dfa2d0b1520f91103d06db gdb/testsuite/gdb.dwarf2/dw2-ref-missing-frame.exp +59459a67b5f5b9149c9fb67a9e8b4e1f gdb/testsuite/gdb.dwarf2/clang-debug-names-2.exp +d87450987426f9371a8568f176a6c404 gdb/testsuite/gdb.dwarf2/typeddwarf.S +89293edf76b5a023eb2ceee350e35d7f gdb/testsuite/gdb.dwarf2/dw2-inline-small-func.c +0e8f0ef68fb03632e46aa18ec07ad76c gdb/testsuite/gdb.dwarf2/dw2-align.exp +10a612a624e3e1a7a27a5efcfedd473a gdb/testsuite/gdb.dwarf2/fission-loclists.exp +b3ae5f78d025fecadf6502aa50f24284 gdb/testsuite/gdb.dwarf2/dw2-reg-undefined.S +d1baa26d1ce3be5fe55ad2e737622fb6 gdb/testsuite/gdb.dwarf2/dw2-ranges3.c +876d2ad0506ba085ad5cc24412ad32f7 gdb/testsuite/gdb.dwarf2/dw2-param-error.exp +dda4565a4d78c256b625cd78640d867f gdb/testsuite/gdb.dwarf2/pr11465.exp +b3659494fa8f7ae03f0241c983fd3ef5 gdb/testsuite/gdb.dwarf2/dw2-abs-hi-pc-hello.c +1bb78c7785ffcc8c65e4caf43c1dd2e9 gdb/testsuite/gdb.dwarf2/dw2-case-insensitive-debug.S +e75be049a76372225b922ca193f91900 gdb/testsuite/gdb.dwarf2/implptrconst.c +800804741d1900ecd7a4219207c4133c gdb/testsuite/gdb.dwarf2/multidictionary.exp +c1d326b1595e84f4441f1bc19a0097f9 gdb/testsuite/gdb.dwarf2/dw2-undefined-ret-addr.exp +0c1cac296d9825462dfe00fa9ed44889 gdb/testsuite/gdb.dwarf2/implptr.S +505fef1309e4064b5284ae1a8b391c91 gdb/testsuite/gdb.dwarf2/dw2-double-set-die-type.S +7b4adafb445db619e7417e139c9a2416 gdb/testsuite/gdb.dwarf2/shortpiece.exp +2e5f7de7518b090b87bf5ef2dbeaa4c9 gdb/testsuite/gdb.dwarf2/dw2-ranges-base.exp +70183fb90ad78ab2d702ff48979bbd51 gdb/testsuite/gdb.dwarf2/dw2-single-line-discriminators.exp +acb238a9c738ba1c3a7c7f5f4767f19b gdb/testsuite/gdb.dwarf2/dw2-producer.S +27296b440a58fd251506d7304f530aed gdb/testsuite/gdb.dwarf2/clang-debug-names-2.c +19f05d798e386fd94d98de41fe695b62 gdb/testsuite/gdb.dwarf2/member-ptr-forwardref.S +4079d600c5f8a68f2dadea312c524352 gdb/testsuite/gdb.dwarf2/dw2-noloc.exp +222b0183ae36fde34762ddaf822abf03 gdb/testsuite/gdb.dwarf2/dw2-minsym-in-cu.S +1fd8230ff0f186895208325b115b60f8 gdb/testsuite/gdb.dwarf2/implptrconst.exp +72c96733c295cf140c7a4281726c08df gdb/testsuite/gdb.dwarf2/dwp-sepdebug.c +47dbf6631ca04609e6ea357d389eb8f4 gdb/testsuite/gdb.dwarf2/dw2-unresolved.S +7bc3c0b4d8ecb0ac42206767e4a59a26 gdb/testsuite/gdb.dwarf2/dw2-ranges2.c +97abdaac60a6e54fbfbc80304209faef gdb/testsuite/gdb.dwarf2/dw2-icc-opaque.S +5e449bca3758c1f73cdd143e9945c977 gdb/testsuite/gdb.dwarf2/corrupt.exp +78d98667e1d4bd2148fd3d3aa72573a0 gdb/testsuite/gdb.dwarf2/ada-linkage-name.exp +221371fc128c0ff0bd3ab15a074b243e gdb/testsuite/gdb.dwarf2/typeddwarf.c +7cf58c2326231c3fad8a81eb29d31d1b gdb/testsuite/gdb.dwarf2/mac-fileno.S +539147a410165b6ca43f2dbceb507b86 gdb/testsuite/gdb.dwarf2/opaque-type-lookup-2.c +de5b65f961c6ad3dad681ff4dfda7e19 gdb/testsuite/gdb.dwarf2/dw2-basic.exp +c3cf2506e0eaa2ee2734424d262cf7b2 gdb/testsuite/gdb.dwarf2/mac-fileno.exp +8045a65f57eb925313721e715df179f7 gdb/testsuite/gdb.dwarf2/staticvirtual.exp +eff16f853e709aef2ff25052981f9ed6 gdb/testsuite/gdb.dwarf2/dw2-intercu.exp +c62cbea445ab78a4081392bd4d12c2c1 gdb/testsuite/gdb.opencl/vec_comps.exp +0aa76f313c61392babeb616fdb7f325f gdb/testsuite/gdb.opencl/datatypes.exp +14d3a61fda092661e65d58297c57c491 gdb/testsuite/gdb.opencl/convs_casts.cl +d1361515dd2cfaa2f5ae5c23bc692549 gdb/testsuite/gdb.opencl/convs_casts.exp +e255cae8e3af554c6e0fcafebff633cd gdb/testsuite/gdb.opencl/datatypes.cl +9df23a63cb15e08c5953e77f9d5abc36 gdb/testsuite/gdb.opencl/operators.cl +ddafb41feed32d3726657c745da048dd gdb/testsuite/gdb.opencl/vec_comps.cl +79c546e92fb65334d42d2460f6b37b8d gdb/testsuite/gdb.opencl/operators.exp +454720f86ddc4d72ac25fef0a439dc1b gdb/testsuite/gdb.opencl/callfuncs.cl +9d4cc7066f4cc68aff7379b7b207713a gdb/testsuite/gdb.opencl/callfuncs.exp +3f356d1965929219e27f8f7d1ea01dfe gdb/testsuite/configure.ac +615e586bad9f1616ae40095951ccebff gdb/testsuite/gdb.compile/compile-cplus-print.exp +6e1dd233b514acbe5edf2465ef5fabcb gdb/testsuite/gdb.compile/compile-ifunc.exp +c0793b1935bf05c1b0daf51e39bbe19d gdb/testsuite/gdb.compile/compile-cplus-array-decay.cc +727094ebdea57832e3d24b2f5d265d2d gdb/testsuite/gdb.compile/compile-cplus-method.exp +2b14255c0ac4a5d7aabaded76db5d742 gdb/testsuite/gdb.compile/compile-shlib.c +170a4038498337c34402ccf72e534f9d gdb/testsuite/gdb.compile/compile-cplus-nested.exp +b976c726d999c419fc5eee0b7dfeded5 gdb/testsuite/gdb.compile/compile.exp +32deb4d54e218bc9d1a0f7d3d85a61ec gdb/testsuite/gdb.compile/compile-cplus-inherit.exp +01d22321859bd0611c0010d0aeff010a gdb/testsuite/gdb.compile/compile-setjmp.exp +8b86f194ca03efdbe99e168db549386d gdb/testsuite/gdb.compile/compile-cplus-virtual.cc +391e506aee18a8351a8dd89927446210 gdb/testsuite/gdb.compile/compile-print.c +659254e0e8576022ca1a852670a7063d gdb/testsuite/gdb.compile/compile-setjmp.c +dafd2133c0dc3fc1bbdd3cc60f37ccab gdb/testsuite/gdb.compile/compile-tls.exp +53adc2235c13e2e8373fc92eb79a88c9 gdb/testsuite/gdb.compile/compile-tls.c +ac5d07969a5980e0f21de88b5428b28c gdb/testsuite/gdb.compile/compile-cplus-nested.cc +0ed5f9cac0ae360574746e3b348d2a6e gdb/testsuite/gdb.compile/compile.c +867559b7e3bdf80b8e76e623e514fd8e gdb/testsuite/gdb.compile/compile-ops.exp +db6c55db357beb9d2d5618488e08e396 gdb/testsuite/gdb.compile/compile-cplus-namespace.cc +8a79b4fd8c395512fb14f6da86444d60 gdb/testsuite/gdb.compile/compile-print.exp +f9822fd276b6015a87ae46dff6c7277b gdb/testsuite/gdb.compile/compile-cplus-namespace.exp +378180f2c5f2053bc32fed69c91de989 gdb/testsuite/gdb.compile/compile-nodebug.c +bf49d73949894a35f4f28cadb86f68e3 gdb/testsuite/gdb.compile/compile-cplus-inherit.cc +a8453088611f7ff41aa3e081a6c76ea2 gdb/testsuite/gdb.compile/compile-constvar.S +94f5a4ca3e50b1e0e330857b13f59a41 gdb/testsuite/gdb.compile/compile-cplus-anonymous.cc +3c77da5396cfda6e1c857c0f02a6aa45 gdb/testsuite/gdb.compile/compile-cplus-member.exp +0d888a5988c689c183ee0f1ba66271d4 gdb/testsuite/gdb.compile/compile-mod.c +da9feb5aa33c3e996c7de2ef739ff38b gdb/testsuite/gdb.compile/compile-cplus-mod.c +55a1924d0dfe7ef15a3bc8a6fde3b9f4 gdb/testsuite/gdb.compile/compile-cplus-virtual.exp +fac98222de281ab7845efb6df7f5f77f gdb/testsuite/gdb.compile/compile-cplus-print.c +e9054c0a1d6647c839bb3d13b0b57fec gdb/testsuite/gdb.compile/compile-cplus.exp +5f1edbc1150e0fdb36a6cd44f0f36171 gdb/testsuite/gdb.compile/compile-cplus-method.cc +e7f1b5db5a973859a57962079394ff01 gdb/testsuite/gdb.compile/compile-setjmp-mod.c +d817dd92a09287024a4bc135fa83e9ce gdb/testsuite/gdb.compile/compile-constvar.c +2614238b7663d002bf809a8bc863a903 gdb/testsuite/gdb.compile/compile-cplus-anonymous.exp +fe5e2fda073c174681aea859bc89652c gdb/testsuite/gdb.compile/compile-cplus-array-decay.exp +eb567c34d847eabb0e12d2dcd4d9786b gdb/testsuite/gdb.compile/compile-cplus.c +227309a4198efb69bcb7b7773054f4fc gdb/testsuite/gdb.compile/compile-ops.c +26c23bde845274a4a23d80f13915f0f1 gdb/testsuite/gdb.compile/compile-ifunc.c +cb74065d5449337b741dda5bcd1200f6 gdb/testsuite/gdb.compile/compile-cplus-member.cc +1b9bb551736dbc95577c91620b81fb6c gdb/testsuite/TODO +de698d2f3d2d93faa9bb1b27ed11037e gdb/testsuite/gdb.multi/multi-target-continue.exp +780055c1752e8c739fdb57bfa36b3fd3 gdb/testsuite/gdb.multi/multi-attach.exp +9fe619c4ef7af6ca89ea327f58f62681 gdb/testsuite/gdb.multi/dummy-frame-restore.exp +d572a48bf0bfdffbffbf499543708a36 gdb/testsuite/gdb.multi/tids.exp +c5f8214ea1f9a0a47f471a9af364feff gdb/testsuite/gdb.multi/stop-all-on-exit.c +5878e8c5f7ad308b69d89fb1ab6057c8 gdb/testsuite/gdb.multi/tids-gid-reset.exp +63c7e3f8b029582345525847724fe33a gdb/testsuite/gdb.multi/run-only-second-inf.c +c6fc5fae329d576985f1e97e58e4646e gdb/testsuite/gdb.multi/multi-arch-exec.c +ca37e370a91fe542b68e90752cbccac6 gdb/testsuite/gdb.multi/remove-inferiors.exp +89ea503e1e03ea1d74ac2c736e0e0071 gdb/testsuite/gdb.multi/multi-arch-exec.exp +e86441016c49993c8bc3bc1b4a912740 gdb/testsuite/gdb.multi/info-threads.exp +755001a6a528ffda888aa3ccf8ca0fb5 gdb/testsuite/gdb.multi/multi-target-interrupt.exp +6504c20a494f4f9bf7080e6832739dd6 gdb/testsuite/gdb.multi/tids.c +5b98a31c9ec3254c87099a9bb90dd366 gdb/testsuite/gdb.multi/base.exp +3f7c452861bad14237680c0aaacb65de gdb/testsuite/gdb.multi/remove-inferiors.c +41f4d4a968cc09479999d1ec4aa3f629 gdb/testsuite/gdb.multi/multi-target-thread-find.exp +a03560aba96db82e55f642a9dce943e7 gdb/testsuite/gdb.multi/multi-kill.c +008a1db3ba54ad1cda0a0e2dd992961d gdb/testsuite/gdb.multi/multi-attach.c +c5a741b094ddc78f5d1d7bb9d7a7983e gdb/testsuite/gdb.multi/hangout.c +42a1eee4411c552dc93f25de17cede75 gdb/testsuite/gdb.multi/multi-term-settings.exp +1e95d0c7610b787ad51cbc719ba2b0ad gdb/testsuite/gdb.multi/stop-all-on-exit.exp +9e5b9d91b4a0a4597eb4235f989f056f gdb/testsuite/gdb.multi/multi-re-run-1.c +8628fc80936fdcdbfb1cf85d780d5a68 gdb/testsuite/gdb.multi/multi-re-run.exp +c9e001374303080713ea7d2581db726e gdb/testsuite/gdb.multi/multi-kill.exp +05029998d5856b8465b21c658c3527a3 gdb/testsuite/gdb.multi/watchpoint-multi.c +87cdc560387a8a45e73accc7a7b16d11 gdb/testsuite/gdb.multi/goodbye.c +da36907f5006fd45f460b75a24318a54 gdb/testsuite/gdb.multi/watchpoint-multi-exit.exp +049ec013b4b212a9e5a86f074a5cb7d9 gdb/testsuite/gdb.multi/multi-target-no-resumed.exp +63c7e3f8b029582345525847724fe33a gdb/testsuite/gdb.multi/multi-exit.c +2e8a7b8dd61d723cb22a5c0a921a90c5 gdb/testsuite/gdb.multi/bkpt-multi-exec.c +8f11942e1b49882f96ac853668d399a1 gdb/testsuite/gdb.multi/watchpoint-multi-exit.c +4d1461dbc8f410052bf5dc7fd0a020ab gdb/testsuite/gdb.multi/multi-term-settings.c +51f41a1b9785a8a58515c85e711534a3 gdb/testsuite/gdb.multi/multi-target.exp.tcl +33a68bddc3df1e765997d5b1167967ca gdb/testsuite/gdb.multi/bkpt-multi-exec.exp +4c2b418a744940c2f0a857aba4d25b27 gdb/testsuite/gdb.multi/run-only-second-inf.exp +b3bc209aa7551f7725bc53f64de08b25 gdb/testsuite/gdb.multi/hello.c +152cc98e1e59a4bb1a80ec610bd473c9 gdb/testsuite/gdb.multi/multi-target-ping-pong-next.exp +a678541a68147b25bf4358c1946e5675 gdb/testsuite/gdb.multi/crashme.c +3b8645c6f27aa67def6b6d35bff97ba3 gdb/testsuite/gdb.multi/multi-re-run-2.c +a285afe686e787b6edd96cb036aaf602 gdb/testsuite/gdb.multi/multi-exit.exp +5b765914a2a4bac5b43caf8e1a90c0c4 gdb/testsuite/gdb.multi/multi-arch.exp +33d6b7bb635ddf9fe986721cd18dc1be gdb/testsuite/gdb.multi/multi-target.c +a71cb58d4c4b38f8a3ed3599064f11fe gdb/testsuite/gdb.multi/tids-gid-reset.c +82046a6f9dbbc38f4ced2229777ed384 gdb/testsuite/gdb.multi/dummy-frame-restore.c +60f2abc5f5eb8c4883b34fb47772d762 gdb/testsuite/gdb.multi/multi-target-info-inferiors.exp +d7ad216db9eb24e1b320b5734201701e gdb/testsuite/gdb.multi/watchpoint-multi.exp +3b14b0bea678983f6802543f73eacc43 gdb/testsuite/gdb.debuginfod/main.c +115663452dcf93d8f22192c3738f9b26 gdb/testsuite/gdb.debuginfod/fetch_src_and_symbols.exp +f6951ddcdbd12b81b242feb2406ff4cf gdb/testsuite/gdb.dlang/circular.c +d38e5b1fa07e6e30784bed75b688aaa3 gdb/testsuite/gdb.dlang/expression.exp +b43d2cadb19347b5c6c7bebcf6fe9316 gdb/testsuite/gdb.dlang/circular.exp +af58698bd85f7a78408095ba04526fed gdb/testsuite/gdb.dlang/watch-loc.exp +4fe1d4f4334cf471a578ae7bb7c0929a gdb/testsuite/gdb.dlang/debug-expr.exp +6a99590a31c70c8ff3f13935fa54e688 gdb/testsuite/gdb.dlang/primitive-types.exp +e906a27b820b7d11d1b555ebdb21a130 gdb/testsuite/gdb.dlang/watch-loc.c +5a7f46d45ce38b94f9009d762416e834 gdb/testsuite/gdb.dlang/properties.exp +d868bef1f98277f82bb85c0f91b8686b gdb/testsuite/gdb.dlang/demangle.exp +65a36494fb736c53137140e4a83b8ce5 gdb/testsuite/boards/cc-with-debug-names.exp +605c109a1e76e983a4f82cbc76b3a9bf gdb/testsuite/boards/debug-types.exp +a8cb03cd05b1fda6b858c8dbcc5bbe8c gdb/testsuite/boards/local-remote-host.exp +9bd30d895ec1f95707090b9e584b1539 gdb/testsuite/boards/local-remote-host-notty.exp +d4e99be88c7b757658a4fe7c89044262 gdb/testsuite/boards/cc-with-tweaks.exp +017d4126f2439d03697826f6f265f8aa gdb/testsuite/boards/local-remote-host-native.exp +053c7d92af826a1fff0a20222d3408ec gdb/testsuite/boards/cc-with-dwz-m.exp +5dab840ff7e05f22528e5dcb3f51a221 gdb/testsuite/boards/cc-with-gdb-index.exp +61dec14a7ecc40a5701c51a13282c70a gdb/testsuite/boards/native-stdio-gdbserver.exp +6ae1e516b387917b775745fdd644431e gdb/testsuite/boards/gold.exp +4d98622606beb23714e2ac6ccc6355e0 gdb/testsuite/boards/gold-gdb-index.exp +0327bde7c68efc574ad3f2115fb116ca gdb/testsuite/boards/remote-gdbserver-on-localhost.exp +59b33bae616a55e05ab3b49d6eee566d gdb/testsuite/boards/gdbserver-base.exp +734b64f99b768f5b96ab074c4c832ab7 gdb/testsuite/boards/stabs.exp +b14d53b77110433869e1a1699f959727 gdb/testsuite/boards/native-extended-gdbserver.exp +7cbbf5abe0f22dcdd104862c83be5335 gdb/testsuite/boards/fission.exp +d5aeefaa96435ae95b103e5d9d5b7196 gdb/testsuite/boards/remote-stdio-gdbserver.exp +47eff9ee6d37ebef89d0b3e463f1bed2 gdb/testsuite/boards/simavr.exp +8f8f6f1082be76c94551b58ed388adb5 gdb/testsuite/boards/native-gdbserver.exp +72eb046dc191bfdca5fc25cf03e85fa6 gdb/testsuite/boards/cc-with-dwz.exp +16c728ca79933b86f4df1724e46309ab gdb/testsuite/boards/fission-dwp.exp +630289b6229e17e4e1793492c60a9496 gdb/testsuite/boards/readnow.exp +c6e50d5a1a4214108ad403e0b8b7d9e7 gdb/testsuite/boards/local-board.exp +f8000ab8c7641980d48f1de1cca3d76d gdb/testsuite/boards/dwarf4-gdb-index.exp +6cd5917979b0b4abb900b6c0256c5dd0 gdb/testsuite/boards/stdio-gdbserver-base.exp +e7b6fe7632108b20a30a1ed87110a927 gdb/testsuite/gdb.reverse/consecutive-reverse.c +fc32f947b9acf1bf440122fa81a07230 gdb/testsuite/gdb.reverse/pipe-reverse.c +74e25ceb7cc688f1bad40413f7ffdeeb gdb/testsuite/gdb.reverse/finish-reverse.c +8846b642f09c0d77520ddfd8facccf31 gdb/testsuite/gdb.reverse/ms1.c +d1c3f22dff2fe604162b1f5c6b801c83 gdb/testsuite/gdb.reverse/ur1.c +e6908aeab3228c71ff16f3da85aa5e5d gdb/testsuite/gdb.reverse/machinestate-precsave.exp +b01bad5d8433235763897b24494add13 gdb/testsuite/gdb.reverse/until-reverse.c +3393ea969086839dd66e962fdcac6959 gdb/testsuite/gdb.reverse/next-reverse-bkpt-over-sr.exp +233da2e326acc12b99695f867f66690d gdb/testsuite/gdb.reverse/rerun-prec.c +b092514e3f947bb44997aa929de87cde gdb/testsuite/gdb.reverse/consecutive-precsave.exp +fa1b0dfa1fdb5fee921a5129ff888add gdb/testsuite/gdb.reverse/until-precsave.exp +57c157593902d8b61152993a92be44eb gdb/testsuite/gdb.reverse/amd64-tailcall-reverse.S +24de20a3bbb22b7d4848fbfcc84a5bc3 gdb/testsuite/gdb.reverse/step-reverse.c +f5d638a5bd13b24ac2e2a9599db34c8d gdb/testsuite/gdb.reverse/insn-reverse.c +ef8d28c06dd1e2d558f7d036b09ccce9 gdb/testsuite/gdb.reverse/singlejmp-reverse-nodebug.c +b9b3ae5c0e678a3a651e9917e2af7ee3 gdb/testsuite/gdb.reverse/insn-reverse-aarch64.c +0683477d617d8aab7ae33f6fa58c7721 gdb/testsuite/gdb.reverse/shr2.c +7062b395bb38484dd35251c72acb1d62 gdb/testsuite/gdb.reverse/i386-sse-reverse.c +e6be92ef585f05247554e1259af0f7c1 gdb/testsuite/gdb.reverse/solib-reverse.c +79fdf938bcc3dc5c6ce0af852bd5be19 gdb/testsuite/gdb.reverse/break-reverse.c +2f827eec3402e16bf02df629e1a92176 gdb/testsuite/gdb.reverse/machinestate.exp +86b1eecdc9c77439d83b3f1162db5288 gdb/testsuite/gdb.reverse/consecutive-reverse.exp +bde6353c96f561e8bf014ae91a88a754 gdb/testsuite/gdb.reverse/break-reverse.exp +5610c888677ce79fa22993598a47c6c5 gdb/testsuite/gdb.reverse/shr.h +bfe033baea2557c8f66021d55ce7a14e gdb/testsuite/gdb.reverse/fstatat-reverse.exp +1c6fc2bf920687ec834e211e936272c3 gdb/testsuite/gdb.reverse/waitpid-reverse.c +eefe98650bb5c2454d5a98b4fa3e011e gdb/testsuite/gdb.reverse/singlejmp-reverse.exp +7a59c25e18585d4ca14bcaac918adb3d gdb/testsuite/gdb.reverse/time-reverse.c +71892ab7cf07c05bd987c61adfce3f54 gdb/testsuite/gdb.reverse/recvmsg-reverse.exp +26a93db988aa2785a97cf1f4a4c168f8 gdb/testsuite/gdb.reverse/amd64-tailcall-reverse.exp +3324e2bb106a9b9279ac3127170de20b gdb/testsuite/gdb.reverse/i387-env-reverse.c +232d1427e9e73c50f8a0afef5c42f320 gdb/testsuite/gdb.reverse/watch-reverse.exp +f5fd0ecf81012cd671384ff87a1a7b05 gdb/testsuite/gdb.reverse/finish-reverse-bkpt.exp +4e4499ad19673212fcbc42c491e74bb5 gdb/testsuite/gdb.reverse/watch-reverse.c +df72d12f15dd6269bbce50fdaff764fc gdb/testsuite/gdb.reverse/machinestate.c +c586169aeee188de2ccb7bed654fc20b gdb/testsuite/gdb.reverse/sigall-reverse.c +88e12afc97af1552e925be9e4d38a376 gdb/testsuite/gdb.reverse/s390-mvcle.exp +23284b38ecb5d1f17a9f81a429f156c9 gdb/testsuite/gdb.reverse/break-precsave.exp +01319e28dcb1c6159d55878ff4f87753 gdb/testsuite/gdb.reverse/i386-reverse.exp +9b1964bf3499c0d6a0a650f642ce351f gdb/testsuite/gdb.reverse/step-indirect-call-thunk.exp +f6c41f276242c1c0a145b58671bbfb19 gdb/testsuite/gdb.reverse/insn-reverse-x86.c +4b9d6c6b34bfe0d541a6a8bbacc451cf gdb/testsuite/gdb.reverse/getresuid-reverse.c +e9822e4bd92045e60be473c016c551f5 gdb/testsuite/gdb.reverse/readv-reverse.exp +25aa79a00420a470b4a53fbfdf85903d gdb/testsuite/gdb.reverse/recvmsg-reverse.c +ee9b9bae75af931a0b9d7a36672545e2 gdb/testsuite/gdb.reverse/singlejmp-reverse.c +1e160a00e7b268609d8b0d0bd3bd7fda gdb/testsuite/gdb.reverse/i386-sse-reverse.exp +657cc2759b33066ce41a8e349ebbb9c9 gdb/testsuite/gdb.reverse/insn-reverse.exp +3fbf6262b7fa0352ff7758e24adc56fa gdb/testsuite/gdb.reverse/sigall-reverse.exp +782179af52f00968217c128e65d3571a gdb/testsuite/gdb.reverse/shr1.c +99d2194a8bca6b1a53e82384c3ded2e4 gdb/testsuite/gdb.reverse/pipe-reverse.exp +b37e63bdb41d0916e19898c7d3d50fe3 gdb/testsuite/gdb.reverse/solib-reverse.exp +aaac701eb55d7b3bf250ccea88294147 gdb/testsuite/gdb.reverse/step-reverse.exp +f473faeda799dd9614c1ff3c3cc30fdd gdb/testsuite/gdb.reverse/solib-precsave.exp +c7f7fee9c4ba2ce81ee86c721d9f2434 gdb/testsuite/gdb.reverse/amd64-tailcall-reverse.c +8937d86a99d80299d2b84816b8fdafc6 gdb/testsuite/gdb.reverse/fstatat-reverse.c +d846f87d4da0ded6ccf054f98110b87e gdb/testsuite/gdb.reverse/sigall-precsave.exp +401fefc0e32005cfe3d143c8876cdc9c gdb/testsuite/gdb.reverse/waitpid-reverse.exp +36666e819eb120640dad21159c6ba177 gdb/testsuite/gdb.reverse/getresuid-reverse.exp +9af565195e3e37d660f0bd7b841c95bc gdb/testsuite/gdb.reverse/i387-stack-reverse.c +2a875cddfd2ee7f32a757e459d81febb gdb/testsuite/gdb.reverse/finish-reverse.exp +3cb4f8786e121f45314b5e913588d639 gdb/testsuite/gdb.reverse/time-reverse.exp +a9c090e1d0253aacd607092f15b62015 gdb/testsuite/gdb.reverse/singlejmp-reverse.S +f7880f2e945437c0f126999ab691b7fe gdb/testsuite/gdb.reverse/singlejmp-reverse-nodebug.S +54e635a9698131533c8e6298a0f5fca1 gdb/testsuite/gdb.reverse/readv-reverse.c +906543ea12922d656f9ae7829aedcf6e gdb/testsuite/gdb.reverse/until-reverse.exp +49e0386ba6d1206413c8901de9d68f9a gdb/testsuite/gdb.reverse/s390-mvcle.c +04b3db9a477c4b19518bfc367e1fb343 gdb/testsuite/gdb.reverse/step-indirect-call-thunk.c +250b085bc6e8c3da6d8373fbdbbc10d6 gdb/testsuite/gdb.reverse/i386-precsave.exp +62e04b98cf6b154d920b7cf81df2f872 gdb/testsuite/gdb.reverse/i386-reverse.c +89e1086242a971edfa504b082447e9c1 gdb/testsuite/gdb.reverse/i387-env-reverse.exp +ab045bee1bc954afe3e88465fe209b9a gdb/testsuite/gdb.reverse/rerun-prec.exp +751cd4cfbf82d4e475074a660751f575 gdb/testsuite/gdb.reverse/insn-reverse-arm.c +b10f226685e413629bd7bf9e6f37edd9 gdb/testsuite/gdb.reverse/watch-precsave.exp +96cd83e931d9460344e8b5e14d98de5a gdb/testsuite/gdb.reverse/step-precsave.exp +928c4b0fbf1d48b392661c2e654f2eef gdb/testsuite/gdb.reverse/i387-stack-reverse.exp +2099b3797f36c896c32dabe26f72c042 gdb/testsuite/gdb.reverse/finish-precsave.exp +b793e4384b8604633bef4c10233557c8 gdb/testsuite/gdb.asm/powerpc.inc +cf9905b35d641b6c44fa17870eaf36d7 gdb/testsuite/gdb.asm/mips.inc +c2ab6abca2f2009bd9b4b7f2501e8f9a gdb/testsuite/gdb.asm/s390.inc +004e3184dcbd00cdedc9969b1a860626 gdb/testsuite/gdb.asm/sparc.inc +7d06fead332c40b8b2b7b7e2e0cda153 gdb/testsuite/gdb.asm/x86_64.inc +bc2f2b56b97a741661cae171ca969cf0 gdb/testsuite/gdb.asm/pa.inc +577585273ffc0fef150e7e01df7cebf9 gdb/testsuite/gdb.asm/alpha.inc +08a59dcdce475e0de4d4e5cd882c3c0a gdb/testsuite/gdb.asm/asmsrc2.s +ab49b7189916586d6f506ed873c9c049 gdb/testsuite/gdb.asm/asmsrc1.s +6d1bba4f6f4e1ea0d1f59dd155016934 gdb/testsuite/gdb.asm/powerpc64le.inc +f2f66e4e9590af6782690580df003342 gdb/testsuite/gdb.asm/pa64.inc +b3f11b21e5921c419a43f93720dedf85 gdb/testsuite/gdb.asm/empty.inc +7aab094990e39f5827eb3942d43a8e8e gdb/testsuite/gdb.asm/m32r.inc +59ed9adaed6dc7b887446707cf6c2d5f gdb/testsuite/gdb.asm/s390x.inc +6f4f68a655784172008d60eda52a7324 gdb/testsuite/gdb.asm/asm-source.exp +c1af33e47ebc93f30c55b5c06d62783a gdb/testsuite/gdb.asm/frv.inc +3ac68989375cc36de41334e4c629f40a gdb/testsuite/gdb.asm/ia64.inc +7acbc0a93ecaf3183a8c43ccb7af5585 gdb/testsuite/gdb.asm/powerpc64.inc +cd196557c0510f072d40271da10c33a6 gdb/testsuite/gdb.asm/sh.inc +ebdbf0ff3c07743179410487fd400598 gdb/testsuite/gdb.asm/iq2000.inc +84e7dd06d6793d60a4572e6024408f80 gdb/testsuite/gdb.asm/openbsd.inc +efc7a21c1c978e155224ad5143df8bd1 gdb/testsuite/gdb.asm/m68k.inc +7450e0fb35df49b1087ec197a4046ac1 gdb/testsuite/gdb.asm/common.inc +561956b7afd2c11c4c23bede641b024d gdb/testsuite/gdb.asm/h8300.inc +b3bdc251c6b1eaf09953283df330eb9a gdb/testsuite/gdb.asm/m32r-linux.inc +583de4033345bc72fc5e10e2c913c70d gdb/testsuite/gdb.asm/m68hc11.inc +bef01819157e0cca7af4ba8058f5eaab gdb/testsuite/gdb.asm/sparc64.inc +e3c5be9e840a34c66a75b0204fe24a05 gdb/testsuite/gdb.asm/v850.inc +6c5e7f66709dbbc4e4fbbdec9be6297f gdb/testsuite/gdb.asm/xstormy16.inc +f7aa57ad2dc302e4d47fcda58eb1c01d gdb/testsuite/gdb.asm/m32c.inc +3b5b119fd551ea7bb3d99b3025d74699 gdb/testsuite/gdb.asm/i386.inc +73f28b814430e5f1534678ff549c32cc gdb/testsuite/gdb.asm/arm.inc +fda4216255cbfc61e4c5a3f186f45be4 gdb/testsuite/gdb.asm/aarch64.inc +f1621bbbb2acbec5adef86d7d9549975 gdb/testsuite/gdb.asm/bfin.inc +c4d2ba6404c6cf567a68a9e710a973a0 gdb/testsuite/gdb.asm/netbsd.inc +292947de6be206c3dbcfb0b8a1e2fc2a gdb/testsuite/Makefile.in +c92c41c2d625c477c91588bde251ff42 gdb/testsuite/gdb.ada/unc_arr_ptr_in_var_rec.exp +d725e9035d35a624d4b6c331447b93c0 gdb/testsuite/gdb.ada/task_switch_in_core/crash.adb +eef8de8b2a0e1bc7c2ac9b2b39b1ccde gdb/testsuite/gdb.ada/mi_var_array.exp +68230a7780e4a4c8c0bbfcd9feddfa2d gdb/testsuite/gdb.ada/bp_c_mixed_case.exp +927c0f13ca18ee422083ffc2f9138508 gdb/testsuite/gdb.ada/info_locals_renaming.exp +75b760041ea06ab6f94773007a4d0b71 gdb/testsuite/gdb.ada/arr_enum_idx_w_gap.exp +5b36ef2e710e57f2841e96e4ea568991 gdb/testsuite/gdb.ada/fullname_bp.exp +10fca03495c3251ea11e699db3345bb0 gdb/testsuite/gdb.ada/catch_assert_if.exp +632914c1242417dabef548592a4200ed gdb/testsuite/gdb.ada/tagged_access.exp +65474052212492bb3b210a580d73e1f9 gdb/testsuite/gdb.ada/arrayparam.exp +0e8b1748abd6f3b795690147c36e2de0 gdb/testsuite/gdb.ada/mi_catch_ex_hand/foo.adb +f1019ca3f8841981f389a9602ffa56f8 gdb/testsuite/gdb.ada/optim_drec.exp +27f187e8b75e74b0ca5e240cef36a063 gdb/testsuite/gdb.ada/widewide.exp +581965539f2a7d44ae0b8ae89c0d8d2c gdb/testsuite/gdb.ada/arr_acc_idx_w_gap/enum_with_gap.ads +89167c5b132f4846da128c45eba175ed gdb/testsuite/gdb.ada/arr_acc_idx_w_gap/enum_with_gap_main.adb +2c122b2ea8b9d7f953404d8f9ffc13b5 gdb/testsuite/gdb.ada/arr_acc_idx_w_gap/enum_with_gap.adb +4c095114fbdadf1fa83dc2dc2d6a7b58 gdb/testsuite/gdb.ada/catch_assert_if/bla.adb +bf89c9dad2b6cd3d543a9b612c47c8af gdb/testsuite/gdb.ada/catch_assert_if/pck.ads +6df8f4069b8345e7e9a2dabe2f3720a9 gdb/testsuite/gdb.ada/tagged.exp +039c696c776749a5b4e45cb96ec50cb4 gdb/testsuite/gdb.ada/length_cond.exp +7340e948848d8c57e4851cb1ca85df07 gdb/testsuite/gdb.ada/pp-rec-component.py +a80ec0828845d923d1f64cb04f68ba4f gdb/testsuite/gdb.ada/homonym.exp +10a5b2695b654bc0dd9af9f221dd5bc9 gdb/testsuite/gdb.ada/scoped_watch.exp +7e3534be6ccc90e2cfa0b7b0ce5f0474 gdb/testsuite/gdb.ada/fixed_cmp.exp +f0347642be1a9969c1003b83f45681fc gdb/testsuite/gdb.ada/bp_enum_homonym.exp +8ef2306d03901d579d38f980c5a6b29a gdb/testsuite/gdb.ada/unchecked_union.exp +9a2eb207aa7ace4dbfae98f61f1e1e55 gdb/testsuite/gdb.ada/variant_record_packed_array.exp +8e529226ffd6077449a0ed86e75724c3 gdb/testsuite/gdb.ada/sub_variant/subv.adb +d42b4538149471d9320a41da33a31839 gdb/testsuite/gdb.ada/bp_on_var.exp +581ed761cb621b2306e292863f7d7a7f gdb/testsuite/gdb.ada/set_wstr/a.adb +32ceebb6ff21db0b94b6d4e2cdd9564c gdb/testsuite/gdb.ada/set_wstr/pck.adb +3818daf1f52b90bb201066021278789c gdb/testsuite/gdb.ada/set_wstr/pck.ads +98abb27fd973fee0949814fa99760dcf gdb/testsuite/gdb.ada/attr_ref_and_charlit/foo.adb +8622f59e5d2c0152b03fad439e16ce91 gdb/testsuite/gdb.ada/ptype_arith_binop.exp +60f39ae4b89aac23f3652d70f8a47896 gdb/testsuite/gdb.ada/str_uninit.exp +767add4d9d26487e7720f18f8be3a50d gdb/testsuite/gdb.ada/interface/types.adb +da71d5528093509bd9e57816099bce16 gdb/testsuite/gdb.ada/interface/types.ads +69665d32d3fe90c53740e5fb56372e67 gdb/testsuite/gdb.ada/interface/foo.adb +8630e07e930d2abb147cf373d8318c86 gdb/testsuite/gdb.ada/frame_arg_lang/pck.adb +fb7d034add4500cca4fdf2884adbb079 gdb/testsuite/gdb.ada/frame_arg_lang/bla.adb +214270a1e598d92e77f69aa31c9c15ee gdb/testsuite/gdb.ada/frame_arg_lang/pck.ads +5ba2b32fea6420daa51f957a19778c61 gdb/testsuite/gdb.ada/frame_arg_lang/foo.c +5aaad283d7f8029e972a620af3c752d4 gdb/testsuite/gdb.ada/packed_array/pck.adb +f8236b7fa92076cfa0f842158ff4f269 gdb/testsuite/gdb.ada/packed_array/pck.ads +df03609baa92d11ed49ee528d0cde5f7 gdb/testsuite/gdb.ada/packed_array/pa.adb +538569e386fd70f1b1f741178d841d69 gdb/testsuite/gdb.ada/cond_lang/a.adb +d19ce5b372b19c83c9d9d66047bfbc31 gdb/testsuite/gdb.ada/cond_lang/pck.adb +e94585d2ba9717086a43b6484a35a056 gdb/testsuite/gdb.ada/cond_lang/mixed.ads +b358a9a38a1b67314ffe607facc2d0b5 gdb/testsuite/gdb.ada/cond_lang/mixed.adb +05c0eff96eab1da4af0b20ee9966db59 gdb/testsuite/gdb.ada/cond_lang/pck.ads +2b5c92a5e64bfb15fcb472290842e3b3 gdb/testsuite/gdb.ada/cond_lang/foo.c +4c095114fbdadf1fa83dc2dc2d6a7b58 gdb/testsuite/gdb.ada/mi_catch_assert/bla.adb +bf89c9dad2b6cd3d543a9b612c47c8af gdb/testsuite/gdb.ada/mi_catch_assert/pck.ads +12b691f9b5156f6b219100ff27bbccca gdb/testsuite/gdb.ada/variant-record.exp +8bbf7b8dd6d5f315ff1438144de3426d gdb/testsuite/gdb.ada/fin_fun_out.exp +26c76e23e7819533bf71ea81d7391aa8 gdb/testsuite/gdb.ada/formatted_ref.exp +63b2707bc030487e785a390feaa7ccc0 gdb/testsuite/gdb.ada/mi_task_info.exp +cc36c05da05758739f6f0aa7f3bfd765 gdb/testsuite/gdb.ada/iwide/p.adb +4d910ee16213ae1646e95f7bdd3b445a gdb/testsuite/gdb.ada/iwide/classes.ads +d525774efb40c4d0051dee9f381727a5 gdb/testsuite/gdb.ada/iwide/classes.adb +ac6d374eb83b35a24cafa316adea0558 gdb/testsuite/gdb.ada/fixed_points/fixed_points.adb +bb193b6d6fc1ff187be39e28d3379ac0 gdb/testsuite/gdb.ada/start/dummy.adb +08c81f30e1e18dd4ffc14c4a66acde2b gdb/testsuite/gdb.ada/bp_inlined_func.exp +7b491f36451b977fc74fe9889b446eda gdb/testsuite/gdb.ada/varsize_limit.exp +d5c8369a6f1d5b8668e55d8a3b9c0278 gdb/testsuite/gdb.ada/expr_delims/pck.adb +6d8617f074de199f5cb970908ce78f82 gdb/testsuite/gdb.ada/expr_delims/foo.adb +4dc88b16ac16747982bcd50133c8ee4e gdb/testsuite/gdb.ada/expr_delims/pck.ads +7d64008d37d0c8a131f3145401322c32 gdb/testsuite/gdb.ada/bad-task-bp-keyword/foo.adb +dae8d638174b945711bbc1d331baa52f gdb/testsuite/gdb.ada/interface.exp +7cdc8b95fdffd6acb804c55065e6bc71 gdb/testsuite/gdb.ada/excep_handle.exp +0ca18e97fafdbd782e31dc5915ea828d gdb/testsuite/gdb.ada/taft_type.exp +b93f1f2899ee37b4549b53f6dde31d7b gdb/testsuite/gdb.ada/ref_tick_size/pck.adb +f262363a14f6beb6152439a5d082204f gdb/testsuite/gdb.ada/ref_tick_size/p.adb +14e84f8a643017570b1bcade60cf8a69 gdb/testsuite/gdb.ada/ref_tick_size/pck.ads +a791c47a00efbb0cf344d8437b7dcaca gdb/testsuite/gdb.ada/uninitialized_vars/parse_controlled.ads +69c16578d24ba1070f99a085699dd008 gdb/testsuite/gdb.ada/uninitialized_vars/parse.adb +a3f249c7cca492a0a348b3485cd25d75 gdb/testsuite/gdb.ada/catch_ex.exp +ae87e43bd0aea7098e3ced5b3be6ad97 gdb/testsuite/gdb.ada/disc_arr_bound.exp +bde9a936cd394dd9b5a6f0c93efec628 gdb/testsuite/gdb.ada/vla/vla.adb +153b6e340b5ef7f517882acee93af84f gdb/testsuite/gdb.ada/arr_acc_idx_w_gap.exp +4ed9fe1c65228444e8e834dd20fe87b8 gdb/testsuite/gdb.ada/small_reg_param.exp +6cf45878172eee3dfb4df2b96600c615 gdb/testsuite/gdb.ada/mi_task_info/task_switch.adb +4e6005820ebd59299c8438f7d29563f0 gdb/testsuite/gdb.ada/fun_renaming/pack.adb +1d706183630006f7d20db7bc85977338 gdb/testsuite/gdb.ada/fun_renaming/pack.ads +b9d7db7375e0522e81940febb577ba63 gdb/testsuite/gdb.ada/fun_renaming/fun_renaming.adb +862ba1e6d4ac39d86aa88dcb1829a8a4 gdb/testsuite/gdb.ada/homonym/pck.adb +d23dbb75f4c03d885b011e73f0f3561e gdb/testsuite/gdb.ada/homonym/homonym.ads +2891d70ccb6fffd45ab4d405daaf2e02 gdb/testsuite/gdb.ada/homonym/homonym.adb +b25d3898ca50da0b7491c676078f9d64 gdb/testsuite/gdb.ada/homonym/pck.ads +83aa52b72db7e8440d0227c013088c67 gdb/testsuite/gdb.ada/homonym/homonym_main.adb +8c903af7a26abfd6092fddc8242228a7 gdb/testsuite/gdb.ada/array_subscript_addr/p.adb +9b3674ce47d5bd70be708b8fb6c6bfcd gdb/testsuite/gdb.ada/fullname_bp/pck.adb +5fe0c90f8196ba4cb67de4e6a60d1600 gdb/testsuite/gdb.ada/fullname_bp/dn.adb +ed76bcf60bb8ccf2ac36c753183e532b gdb/testsuite/gdb.ada/fullname_bp/foo.adb +0c16c081d31f7d20bd4f1906779e5c80 gdb/testsuite/gdb.ada/fullname_bp/dn.ads +6c4962d4232d7991a9719e4c85b7825a gdb/testsuite/gdb.ada/fullname_bp/pck.ads +3286b967ebdb8a1bc5d39ec91b9f2a79 gdb/testsuite/gdb.ada/call_pn/pck.adb +0761617e3529e9b37352377769148176 gdb/testsuite/gdb.ada/call_pn/foo.adb +8dbb169678c431ed92271037fc9a700d gdb/testsuite/gdb.ada/call_pn/pck.ads +deae6807f540651fa4490d6c7ba410d3 gdb/testsuite/gdb.ada/funcall_ptr.exp +62eedc276c48179dea7625f22cd0308b gdb/testsuite/gdb.ada/arraydim/inc.c +c68b5ef1b3121a1c524222f6676b8fd2 gdb/testsuite/gdb.ada/arraydim/pck.adb +12ece44506be9f322c77b73789cb7f44 gdb/testsuite/gdb.ada/arraydim/foo.adb +017b579f58d1b5c6c072c06a8878aedf gdb/testsuite/gdb.ada/arraydim/pck.ads +219622d691abb34f27057c90e89da10c gdb/testsuite/gdb.ada/tasks.exp +e97c577d1dda91e0a1bedd492a5022db gdb/testsuite/gdb.ada/funcall_ref/foo.adb +79826b5292b083bf7ff0cd08706ae2b0 gdb/testsuite/gdb.ada/var_arr_typedef.exp +7e7cae385afb6a2c54c1b2d86ae2ca2c gdb/testsuite/gdb.ada/tick_length_array_enum_idx/pck.adb +02e88212db1c5cf108c702a14dc266b2 gdb/testsuite/gdb.ada/tick_length_array_enum_idx/pck.ads +7282c8853b99b9dd280d6078b4ef084b gdb/testsuite/gdb.ada/tick_length_array_enum_idx/foo_n207_004.adb +ce7537ba382f6a02a32c23ff9848f97b gdb/testsuite/gdb.ada/byte_packed_arr.exp +b7ff8110f339b1aa28d49fd1e00e0c67 gdb/testsuite/gdb.ada/mi_exc_info.exp +76d53bbf7baba181bca9e1560c9e8294 gdb/testsuite/gdb.ada/operator_bp.exp +a2a44795b0504a09c02d12fa75196193 gdb/testsuite/gdb.ada/boolean_expr.exp +0a8688e9b6122227eae78228a5efea88 gdb/testsuite/gdb.ada/catch_ex/foo.adb +ca4d0a98ee2670d6e16c124c1414f9c8 gdb/testsuite/gdb.ada/aliased_array/pck.adb +5fba5e9e8b0c0ca1e85f63b47b67f6aa gdb/testsuite/gdb.ada/aliased_array/foo.adb +69bc1927dc3670ad6bb016bb9f960c6e gdb/testsuite/gdb.ada/aliased_array/pck.ads +930572fce3ac13ea09bd6b731ffafbda gdb/testsuite/gdb.ada/variant-record/value.adb +a59f7eaaa94f467e88b1b95a534803ed gdb/testsuite/gdb.ada/variant-record/proc.adb +e056d71adf1f1b8e11f557a8ab239ccc gdb/testsuite/gdb.ada/variant-record/value.ads +1f71dc5b653d3d29fc61591481436d66 gdb/testsuite/gdb.ada/lang_switch/lang_switch.adb +1c6f152cda540046fa158a0a493d2a61 gdb/testsuite/gdb.ada/lang_switch/foo.c +ccc30abeba60ca68b98209ab65832280 gdb/testsuite/gdb.ada/excep_handle/foo.adb +a973f804428708a667de4391e99dfbd1 gdb/testsuite/gdb.ada/excep_handle/pck.ads +32ceebb6ff21db0b94b6d4e2cdd9564c gdb/testsuite/gdb.ada/enum_idx_packed/pck.adb +0da0b7a41e05c1b5b9599df98677542d gdb/testsuite/gdb.ada/enum_idx_packed/foo.adb +d08338aaa99da40a08f6c055fce9034f gdb/testsuite/gdb.ada/enum_idx_packed/pck.ads +9f4a1dc142be5aeb33fe12252b4d8a10 gdb/testsuite/gdb.ada/addr_arith.exp +4bdb7ed0536840b7a047e1b0fb7e5a4c gdb/testsuite/gdb.ada/info_auto_lang/some_c.c +0095d9b8bb8a40970944c4e2296e19b7 gdb/testsuite/gdb.ada/info_auto_lang/proc_in_ada.adb +e7ace3309b7b582f21e1be86afb36567 gdb/testsuite/gdb.ada/info_auto_lang/global_pack.ads +897259b81d5fdd21c0d50378ed802c9b gdb/testsuite/gdb.ada/dgopt.exp +ca12ee6c685b48960a810d460dc505f0 gdb/testsuite/gdb.ada/ptype_union.exp +0dda456cafde0a49b8c376c5053f8a44 gdb/testsuite/gdb.ada/dyn_stride.exp +5accc7f46df3f135a823346e45e0a9f6 gdb/testsuite/gdb.ada/info_auto_lang.exp +1808a781119aa938ef0ea63ee1e82a31 gdb/testsuite/gdb.ada/mi_var_access/mi_access.adb +4407e4b8affc23853d3600ed2cdeb149 gdb/testsuite/gdb.ada/mi_var_access/pck.adb +5cf6306d29fb0bb670ff3e287751b128 gdb/testsuite/gdb.ada/mi_var_access/pck.ads +07d797e40f0839b1ab582fd1961fdd8c gdb/testsuite/gdb.ada/out_of_line_in_inlined.exp +f881fc8b4eabf7d96ce98f89448b1c06 gdb/testsuite/gdb.ada/expr_with_funcall/pck.adb +05e26bc627e9c5b156340bb77cb82e49 gdb/testsuite/gdb.ada/expr_with_funcall/expr_r821_013.adb +8c16dbd729edb39ec8ea8a050f6b6780 gdb/testsuite/gdb.ada/expr_with_funcall/pck.ads +aa5afbc099537ceebe5d715451c8348c gdb/testsuite/gdb.ada/tagged_access/pack.adb +9eeb8da648e0151d3fbd7387e816b2a3 gdb/testsuite/gdb.ada/tagged_access/pack.ads +2edf6e490d8fb9ab2fea10b0f77ff6f2 gdb/testsuite/gdb.ada/tagged_access/p.adb +ff1276815f112854731bd1bb3383c759 gdb/testsuite/gdb.ada/str_binop_equal.exp +1b5a79597bb762fce210ffdcf542313e gdb/testsuite/gdb.ada/frame_args.exp +6358b0fa618fbc0300a6a73a17510210 gdb/testsuite/gdb.ada/rename_subscript_param/pck.adb +9f5e31d779a0439dbf6b7946c3155a04 gdb/testsuite/gdb.ada/rename_subscript_param/pkg.adb +3b8975cde19d149ca5e31e6010b33676 gdb/testsuite/gdb.ada/rename_subscript_param/pck.ads +4822f55fdfa353831ceae773f7d9fe57 gdb/testsuite/gdb.ada/rename_subscript_param/pb30_012.adb +84901e4bd8d11404d7a9701c1efb0140 gdb/testsuite/gdb.ada/rename_subscript_param/pkg.ads +f215109f1951a8fcca4a7bfa9cf5427d gdb/testsuite/gdb.ada/var_rec_arr/pck.adb +3f0fae7fe9a2f426497327551798e395 gdb/testsuite/gdb.ada/var_rec_arr/foo_na09_042.adb +30f30cf2ba2ca457b6f411f1cdc3fd83 gdb/testsuite/gdb.ada/var_rec_arr/pck.ads +4fcd757bbdd1246a9ae64851cbc101dc gdb/testsuite/gdb.ada/mi_var_union/bar.adb +cc4cfc45c416ae2634ebf5dea5abb2ad gdb/testsuite/gdb.ada/mi_var_union/pck.adb +08ae69acb0824614be8f427c338699c2 gdb/testsuite/gdb.ada/mi_var_union/pck.ads +7b870eee174de37d709604169cba1e7d gdb/testsuite/gdb.ada/array_return/pck.adb +87d3d102312ae412de1cb89cfa2c3ef5 gdb/testsuite/gdb.ada/array_return/p.adb +756ed16ea6e1f577df864392c8c33a3a gdb/testsuite/gdb.ada/array_return/pck.ads +5541248bfe93a05f677ac21ba7f6a2aa gdb/testsuite/gdb.ada/mi_ex_cond.exp +9c7e64a64c02c2fde0736c735954ef7d gdb/testsuite/gdb.ada/var_arr_attrs/pck.adb +a1eb3f7e0ef4e738a022e96b4a57c5b4 gdb/testsuite/gdb.ada/var_arr_attrs/foo_o115_002.adb +e0115fd150c4f30318eedd97fdc8c382 gdb/testsuite/gdb.ada/var_arr_attrs/pck.ads +a333cdd36a378bf947efda297cb2412a gdb/testsuite/gdb.ada/array_ptr_renaming.exp +539f35ee81cb7ef5b5e50a52cbe21a21 gdb/testsuite/gdb.ada/tagged_not_init/pck.adb +dfa1b252d0aeb5802ea2cee7855f6073 gdb/testsuite/gdb.ada/tagged_not_init/foo.adb +afe20b94344ee8c4af52a7c168a6d05c gdb/testsuite/gdb.ada/tagged_not_init/pck.ads +f5e958cfcdd54ed5bc3e560cb1ec4a43 gdb/testsuite/gdb.ada/tagged/pck.adb +8bb1021e195c491d33a7258a89356126 gdb/testsuite/gdb.ada/tagged/foo.adb +9551ae61f62dec85c5a87898853963fb gdb/testsuite/gdb.ada/tagged/pck.ads +290b56c9a99f8a9f999fb47956231b59 gdb/testsuite/gdb.ada/O2_float_param.exp +9dd75fe1fdc15488ab4bce2f8e3748c7 gdb/testsuite/gdb.ada/frame_args/pck.adb +b7483dd27a394848f4d3f307c01edf9d gdb/testsuite/gdb.ada/frame_args/foo.adb +77aa8c2594081b247b46011a4e0c236b gdb/testsuite/gdb.ada/frame_args/pck.ads +15086061a72091da722b49f6762dbe47 gdb/testsuite/gdb.ada/big_packed_array.exp +f9624fb2b1349aed5bb79e116d617c06 gdb/testsuite/gdb.ada/arr_arr.exp +71c19469946c851d3f9a255588113f68 gdb/testsuite/gdb.ada/tick_last_segv/foo.adb +b67b3978011d16f2f9be0d526f4ef731 gdb/testsuite/gdb.ada/mi_dyn_arr/pck.adb +3852c2eaa8b4fce0ae07963c1226cb4a gdb/testsuite/gdb.ada/mi_dyn_arr/foo.adb +aa210ef385ee64d9772e1203f0138f87 gdb/testsuite/gdb.ada/mi_dyn_arr/pck.ads +ee4154f95456a8d07b0355601e766adc gdb/testsuite/gdb.ada/maint_with_ada/pack.adb +d94dd27a2537b7a5eba0f276e2771321 gdb/testsuite/gdb.ada/maint_with_ada/pack.ads +c76b318bfb2779a008ba1f8f32f152b1 gdb/testsuite/gdb.ada/maint_with_ada/var_arr_typedef.adb +f98cf8a1d983cdc2a95f0118246caec5 gdb/testsuite/gdb.ada/null_array/pck.adb +a63d6caaa0b08264cd1615b762a609f4 gdb/testsuite/gdb.ada/null_array/foo.adb +27e43a044606c00305bad2c1121e86c3 gdb/testsuite/gdb.ada/null_array/pck.ads +19055d2d4507346ac0ab283467d1db3d gdb/testsuite/gdb.ada/ref_tick_size.exp +55deb952eed4197abb26c806b21dba54 gdb/testsuite/gdb.ada/arrayptr.exp +cc4cfc45c416ae2634ebf5dea5abb2ad gdb/testsuite/gdb.ada/watch_minus_l/pck.adb +f6a8fc243e2a427d8db80cef0ba0a4c2 gdb/testsuite/gdb.ada/watch_minus_l/foo_ra10_006.adb +5c8ac4f32989e03cab9532c7a96a25c9 gdb/testsuite/gdb.ada/watch_minus_l/pck.ads +77b6321e55d8113c17ae59392f424806 gdb/testsuite/gdb.ada/mi_prot/prot.adb +5bca0b1a3ee3fdeb9a14540e944815b0 gdb/testsuite/gdb.ada/mi_prot/pkg.adb +7c4d4baf022b47eb5576c15759888ca3 gdb/testsuite/gdb.ada/mi_prot/pkg.ads +5e75361e5c5ae607414629a9cfec3b34 gdb/testsuite/gdb.ada/mi_var_array/bar.adb +9c7e64a64c02c2fde0736c735954ef7d gdb/testsuite/gdb.ada/mi_var_array/pck.adb +f5cc01ef30004413afad48ac77467595 gdb/testsuite/gdb.ada/mi_var_array/pck.ads +8bbaaccbce8ca0de1ef6373d29e603a4 gdb/testsuite/gdb.ada/print_chars.exp +61d8a33a2adf26b1ccbfa7809ea30db0 gdb/testsuite/gdb.ada/rdv_wait.exp +ecb7c043219cbbd3d5e2c2e83b860188 gdb/testsuite/gdb.ada/assign_arr/target_wrapper.ads +ab8c07da1266e26264920c0ad2b0b792 gdb/testsuite/gdb.ada/assign_arr/main_p324_051.adb +21d8e1fa749e51bd7384af7d8e909b68 gdb/testsuite/gdb.ada/enum_idx_packed.exp +6c18a92ddaaddba8d2502639e69e26a7 gdb/testsuite/gdb.ada/str_binop_equal/pck.adb +c9a262c8f066141e471f0ebc8c1e0c59 gdb/testsuite/gdb.ada/str_binop_equal/foo_p211_061.adb +518342d0af1c568b7f3233d93deb2472 gdb/testsuite/gdb.ada/str_binop_equal/pck.ads +d87422d6e5b494edc6c6063d76d35d7b gdb/testsuite/gdb.ada/assign_1.exp +3b0a948e812aa0cb6c02dd361b2df52f gdb/testsuite/gdb.ada/rec_return.exp +9a4e46fe0487f540844e60eaf99081bc gdb/testsuite/gdb.ada/widewide/pck.adb +d79fc6ea37872ac3f755b4f896090cfe gdb/testsuite/gdb.ada/widewide/foo.adb +f73ecc95f09333653432884614e93443 gdb/testsuite/gdb.ada/widewide/pck.ads +cc4cfc45c416ae2634ebf5dea5abb2ad gdb/testsuite/gdb.ada/notcplusplus/pck.adb +a2e2de9f5d11f57763e931be90b862d4 gdb/testsuite/gdb.ada/notcplusplus/ver.ads +8a2643c850b55ce9e12e4155f0035ded gdb/testsuite/gdb.ada/notcplusplus/foo.adb +08ae69acb0824614be8f427c338699c2 gdb/testsuite/gdb.ada/notcplusplus/pck.ads +3beccdd4d4ac8402d7caecdabf348d86 gdb/testsuite/gdb.ada/mi_string_access.exp +0a9a55a6c576651bc746f1b373782f4f gdb/testsuite/gdb.ada/float_param/pck.adb +0e959ed50f4f3ef1015b6bc5692beffb gdb/testsuite/gdb.ada/float_param/foo.adb +cd63380139230d307726df211432647d gdb/testsuite/gdb.ada/float_param/pck.ads +440c1eaae3200abf330d77542baf6da4 gdb/testsuite/gdb.ada/bp_reset.exp +41f104106f7e0cdfd942f94a92e41a80 gdb/testsuite/gdb.ada/pp-rec-component/pck.adb +0fd3c203fbfdebf64c1f90f9338afaf1 gdb/testsuite/gdb.ada/pp-rec-component/foo.adb +6ce0efebc0a1141efa13aef4f7d07019 gdb/testsuite/gdb.ada/pp-rec-component/pck.ads +5dda64def47f02defdd9f7b9a2748295 gdb/testsuite/gdb.ada/arrayidx/p.adb +606e618313ed90ad59fa45187f7fe561 gdb/testsuite/gdb.ada/display_nested/pack.adb +c3e611c0a3ab28874576b09c075d3bc7 gdb/testsuite/gdb.ada/display_nested/pack.ads +fbfb2a4026f9336d3e7bc8d81eff0c90 gdb/testsuite/gdb.ada/display_nested/foo.adb +399f2eeac24bb7d344d50dbb1171271c gdb/testsuite/gdb.ada/same_component_name.exp +58bb5b1c6e1244816bb4fb02cf4d3b11 gdb/testsuite/gdb.ada/bp_fun_addr/bp_fun_addr.adb +32ceebb6ff21db0b94b6d4e2cdd9564c gdb/testsuite/gdb.ada/array_char_idx/pck.adb +da99e1c7a9bf598f3676c3f68e8b4aa6 gdb/testsuite/gdb.ada/array_char_idx/foo.adb +097f316f325aab3ebfc1844ffac58c80 gdb/testsuite/gdb.ada/array_char_idx/pck.ads +ec65fea2d79701642feb17a30a7817d3 gdb/testsuite/gdb.ada/arrayptr/pck.adb +ea58489da44ca8b223738cd5e343d4f0 gdb/testsuite/gdb.ada/arrayptr/foo.adb +14e84f8a643017570b1bcade60cf8a69 gdb/testsuite/gdb.ada/arrayptr/pck.ads +98924862157cc2f8d688aac3b8f79073 gdb/testsuite/gdb.ada/mi_var_union.exp +b580ef37a530a7896a98fff1eaf815c8 gdb/testsuite/gdb.ada/fun_in_declare/pck.adb +e18379bd918d49c51345c164d38aa3bf gdb/testsuite/gdb.ada/fun_in_declare/foo.adb +b4bec8b8f543b43b933050fe07d3f92a gdb/testsuite/gdb.ada/fun_in_declare/pck.ads +b48041b243f43ec11a1d087c4fe308db gdb/testsuite/gdb.ada/var_rec_arr.exp +d4fe8909ea191c8bd23ba567604899e7 gdb/testsuite/gdb.ada/attr_ref_and_charlit.exp +ddf2a6c8a93ecf56868ea7390e84a958 gdb/testsuite/gdb.ada/py_taft/main.adb +86c6bfdaf37392a6230e32fa2dd9cb88 gdb/testsuite/gdb.ada/py_taft/pkg.adb +7e310d751408d6a8b5d85d82c49a7cd9 gdb/testsuite/gdb.ada/py_taft/pkg.ads +eb92b59dcd3a7c2d27bbe5f89a129301 gdb/testsuite/gdb.ada/aliased_array.exp +3136bda04d21c24fc184b85a8c4047f1 gdb/testsuite/gdb.ada/info_addr_mixed_case.exp +3f1c68b75423a2356ae1064ed4a00c08 gdb/testsuite/gdb.ada/array_bounds/bar.adb +f31fd321cfe6fb8d31e682d9d39b64bc gdb/testsuite/gdb.ada/float_param.exp +26c44955e9da0bb32181f362db77a0ec gdb/testsuite/gdb.ada/type_coercion.exp +65cafcbf7187db82eb8a9e2cfe8d95c8 gdb/testsuite/gdb.ada/sym_print_name/pck.adb +240b94a159886ef9c1955c49e0afff24 gdb/testsuite/gdb.ada/sym_print_name/foo.adb +2cfcfd28b9ec59512959f01cfc06adac gdb/testsuite/gdb.ada/sym_print_name/pck.ads +b194af99776c1b6e14f86f8e2470bcc2 gdb/testsuite/gdb.ada/win_fu_syms/pck.adb +ff324f40857c3983f01b6ce0f70b576e gdb/testsuite/gdb.ada/win_fu_syms/foo.adb +aca612d68ed7223658c0f1c9d12e9a90 gdb/testsuite/gdb.ada/win_fu_syms/pck.ads +1371c3c2944cfa82ef77c9911500b47f gdb/testsuite/gdb.ada/dyn_arrayidx.exp +a3ebc9980cd84fce7f86a4ed1f083dff gdb/testsuite/gdb.ada/minsyms/pck.adb +50f186c70b5c7584fae898942244fa54 gdb/testsuite/gdb.ada/minsyms/pck.ads +bc78ff908eff3dddd18dad1a0940a32a gdb/testsuite/gdb.ada/minsyms/foo_qb07_057.adb +ee5bf734a99dc2c58535dc785626ae80 gdb/testsuite/gdb.ada/small_reg_param/pck.adb +d76541820922fbbb82d04b567f7f1137 gdb/testsuite/gdb.ada/small_reg_param/foo.adb +f078d093bb124110fb69570d3c0c6871 gdb/testsuite/gdb.ada/small_reg_param/pck.ads +b65b9a6ebacfed773bca0280741af21b gdb/testsuite/gdb.ada/pkd_arr_elem/failure.adb +41f104106f7e0cdfd942f94a92e41a80 gdb/testsuite/gdb.ada/pkd_arr_elem/pck.adb +37aac431f1d99232d687b58472702530 gdb/testsuite/gdb.ada/pkd_arr_elem/pck.ads +84785540b65b158b571102c98a6d6d36 gdb/testsuite/gdb.ada/byte_packed_arr/reprod.adb +3e519a59cac8853308fb3656ad6c8913 gdb/testsuite/gdb.ada/byte_packed_arr/reprod.ads +a63d459459bf268d75de8d0091f64e6f gdb/testsuite/gdb.ada/byte_packed_arr/array_list_g.ads +c37a6cc2fa2950087dc64cc9cfa9a5a4 gdb/testsuite/gdb.ada/byte_packed_arr/reprod_main.adb +71b8af55d18e808f5c632895fd94070d gdb/testsuite/gdb.ada/tick_length_array_enum_idx.exp +4ee7fc0e63374492e6acbe595b79c476 gdb/testsuite/gdb.ada/mi_ref_changeable/pck.adb +c250af87f871bd9cf9c7e9234790326b gdb/testsuite/gdb.ada/mi_ref_changeable/foo_rb20_056.adb +d685eac288429c7acdff2a28be069892 gdb/testsuite/gdb.ada/mi_ref_changeable/pck.ads +b440e0cfa181cc6d3d324f0cd00ac34a gdb/testsuite/gdb.ada/int_deref.exp +3d4a4d5afb81b9de33761d8bd8093a1a gdb/testsuite/gdb.ada/packed_tagged.exp +e3cae8b473dd5fe1201b856774a02aff gdb/testsuite/gdb.ada/vla.exp +8c091f875d44d562bbc32a0ebbe8278f gdb/testsuite/gdb.ada/mi_dyn_arr.exp +4fa617e2af99911a1f8b84c3220be153 gdb/testsuite/gdb.ada/ref_param/pck.adb +9b6d9213cfc7a30e59b2e22e22ff9280 gdb/testsuite/gdb.ada/ref_param/foo.adb +5bd7da75c7b9a350b5ee8f2bee8f8d35 gdb/testsuite/gdb.ada/ref_param/pck.ads +8097202ad6251505bad7cce4b0ff5ef1 gdb/testsuite/gdb.ada/same_enum.exp +01c7038d72953be0c4c95346fd7ad454 gdb/testsuite/gdb.ada/int_deref/foo.adb +4211383657e231b43d62a10897075fee gdb/testsuite/gdb.ada/int_deref/pck.ads +5034288cfb4e1141f9df4d0e214378f8 gdb/testsuite/gdb.ada/tagged_not_init.exp +f1a7e912ce8eff2cfbeddc1f41109251 gdb/testsuite/gdb.ada/bp_range_type.exp +3eaa2bc9105359bca96eca68e18ffe6e gdb/testsuite/gdb.ada/mi_interface.exp +8d086dd2e6b7110a51c0bd1fa0b2c63d gdb/testsuite/gdb.ada/exec_changed.exp +b155de6aeb2798022289aa35012158ad gdb/testsuite/gdb.ada/mi_prot.exp +63543f67069debc9b9471e44bf8134f6 gdb/testsuite/gdb.ada/print_chars/pck.adb +bd22b397801224c73867ce75d33f667c gdb/testsuite/gdb.ada/print_chars/foo.adb +b976a9b38aeac937b125a37e554094fd gdb/testsuite/gdb.ada/print_chars/pck.ads +9d1292b33c8b2865da12dc9016b575cc gdb/testsuite/gdb.ada/mi_catch_ex.exp +e4d398f7d73293b96f3c05394be6c367 gdb/testsuite/gdb.ada/addr_arith/foo_na07_019.adb +1ae5156412bcc753bea9c595bb22a36a gdb/testsuite/gdb.ada/addr_arith/pck.adb +0660dba85bd042eec4835f94e1b628cb gdb/testsuite/gdb.ada/addr_arith/pck.ads +0f1c087e5db82973fff74a6d4377a3ef gdb/testsuite/gdb.ada/bp_reset/pck.adb +8d0233f4e32c8e0d2a2b500fcf8e78b8 gdb/testsuite/gdb.ada/bp_reset/foo.adb +c1abd5ae208d64798db676d60ad27a4d gdb/testsuite/gdb.ada/bp_reset/io.adb +a79c6282a1b0e628a0ebc43362be3db9 gdb/testsuite/gdb.ada/bp_reset/pck.ads +326cc4d78f12a859a1d7cca0430067f6 gdb/testsuite/gdb.ada/bp_reset/io.ads +7a3b7bc46cc5839f93d4b91a4d3ec767 gdb/testsuite/gdb.ada/char_enum/pck.adb +1e82ff82bb52f078dcdb336bb8ec9053 gdb/testsuite/gdb.ada/char_enum/foo.adb +5ae90f5c3a510e2f8b5c02c2891be06e gdb/testsuite/gdb.ada/char_enum/pck.ads +b066adc9a11cb774b20923392bf2cec7 gdb/testsuite/gdb.ada/ptype_tagged_param.exp +496291fbaba26cd9ec97176309c50330 gdb/testsuite/gdb.ada/task_bp/pck.adb +cd6b27a771b7e6e31c7259b44d8317b5 gdb/testsuite/gdb.ada/task_bp/foo.adb +085580154d0cd1724edab8cd707e4fec gdb/testsuite/gdb.ada/task_bp/pck.ads +41f104106f7e0cdfd942f94a92e41a80 gdb/testsuite/gdb.ada/mi_interface/pck.adb +6d6b6a8d5a44c905f3516c5cf5cdf216 gdb/testsuite/gdb.ada/mi_interface/foo.adb +eaadbee1bb6415af0e2528268a495cc3 gdb/testsuite/gdb.ada/mi_interface/pck.ads +efb6ac9f782fce95772fa40eb5c27249 gdb/testsuite/gdb.ada/type_coercion/ident.adb +21fe8e5faf61edf23a8e9d34172250d7 gdb/testsuite/gdb.ada/type_coercion/assign.adb +0221ddb4e79c97b72d24240e095f7b49 gdb/testsuite/gdb.ada/packed_array_assign/pck.adb +344292e14995cc3f106f24ac562b97ab gdb/testsuite/gdb.ada/packed_array_assign/aggregates.ads +ff04268a64129406a4f9e4f93f4b2bb2 gdb/testsuite/gdb.ada/packed_array_assign/aggregates.adb +c5233d33a0210f3c327ab6e6f4a8855e gdb/testsuite/gdb.ada/packed_array_assign/tester.adb +16c156db47a6007295dde2ef033c49dd gdb/testsuite/gdb.ada/packed_array_assign/pck.ads +2bdfe85402192e9bfbd1b80356624ea1 gdb/testsuite/gdb.ada/str_ref_cmp/foo.adb +99028ea8e8e59471719b282709305a4d gdb/testsuite/gdb.ada/str_ref_cmp/pck.ads +a07eecdbe0ba8ce27578fa42c14f5296 gdb/testsuite/gdb.ada/mi_variant.exp +c819deecd7e350a7eba78ec744e2e2e7 gdb/testsuite/gdb.ada/n_arr_bound.exp +bc51f71796b4bf51e64c46a4e437e3a9 gdb/testsuite/gdb.ada/optim_drec/foo.adb +ca5a2aae11c5c113b88f38141998dfef gdb/testsuite/gdb.ada/fun_in_declare.exp +120a4c5343867f488c80a46fe1b0bd3d gdb/testsuite/gdb.ada/expr_with_funcall.exp +1f661a24f016a4a28d28c30cb5ef5938 gdb/testsuite/gdb.ada/funcall_char/foo.adb +e00d96f7b618250d6c1a21246bdc3a64 gdb/testsuite/gdb.ada/ref_param.exp +2ee7e3ebd15da18ea2431b404f2a1b1a gdb/testsuite/gdb.ada/atomic_enum/pck.adb +73090c5c56b28dbbe65095f7105b2510 gdb/testsuite/gdb.ada/atomic_enum/foo.adb +f74f3d7d094348b3ce7d8e2f8de980c5 gdb/testsuite/gdb.ada/atomic_enum/pck.ads +ea59e58bcdfe89af1d152aea8422e2e3 gdb/testsuite/gdb.ada/repeat_dyn.exp +2448e8363d1921f3b1ff2f6c743975ea gdb/testsuite/gdb.ada/bias.exp +f80b13643afd5d7460b584755e0f39b1 gdb/testsuite/gdb.ada/frame_arg_lang.exp +1d70bf15f7b11394cf9fe1a18a0300ec gdb/testsuite/gdb.ada/big_packed_array/pck.adb +5b2f635a60fd438283ddd0a52c92f51c gdb/testsuite/gdb.ada/big_packed_array/foo_ra24_010.adb +a87e733cd898c8ec13a1b18707da96dd gdb/testsuite/gdb.ada/big_packed_array/pck.ads +9a4e46fe0487f540844e60eaf99081bc gdb/testsuite/gdb.ada/watch_arg/pck.adb +ce1e334da2a6e6fa40a0726ad7109542 gdb/testsuite/gdb.ada/watch_arg/watch.adb +b25d3898ca50da0b7491c676078f9d64 gdb/testsuite/gdb.ada/watch_arg/pck.ads +c5a9ebf187872ab48a110b9a56999fca gdb/testsuite/gdb.ada/mi_var_access.exp +2bd01d5b2af47a5d6ce37624f09d99c0 gdb/testsuite/gdb.ada/variant_record_packed_array/pck.adb +0419ab6d87e05b9efdec03d6adfa00d9 gdb/testsuite/gdb.ada/variant_record_packed_array/foo.adb +0d0e05119fa0f70df77640c1f4d516be gdb/testsuite/gdb.ada/variant_record_packed_array/pck.ads +40faada19b40ee963ed33b6cf2ef5df5 gdb/testsuite/gdb.ada/access_tagged_param/pck.adb +3373e8f17aa89df98c6fa0e5e001c8c6 gdb/testsuite/gdb.ada/access_tagged_param/foo.adb +5f13427b928caca7e20c132ffcb117b0 gdb/testsuite/gdb.ada/access_tagged_param/pck.ads +829e6f264ac02185d0793e1b659495c3 gdb/testsuite/gdb.ada/disc_arr_bound/foo_n612_026.adb +5bd600846ce6da2738b23c42884213be gdb/testsuite/gdb.ada/disc_arr_bound/pck.adb +a5c6644bf8b0c38a6f452dd3992d2241 gdb/testsuite/gdb.ada/disc_arr_bound/pck.ads +d215a749c0217263af99b37e7fef98ce gdb/testsuite/gdb.ada/access_to_packed_array.exp +fd4b6a7dba5049589a4c5b6fa93df764 gdb/testsuite/gdb.ada/tasks/foo.adb +e8ae8aa5996f67ccaf9b76469517e814 gdb/testsuite/gdb.ada/rec_comp.exp +cc61bed5f11df1ede744f2de0fbc863a gdb/testsuite/gdb.ada/ptype_union.c +4bc70fec616c91a2d3ec49d3dcdeaebd gdb/testsuite/gdb.ada/dot_all.exp +9a4e46fe0487f540844e60eaf99081bc gdb/testsuite/gdb.ada/whatis_array_val/pck.adb +4dd042457d51a008ce5a0e2427dc030f gdb/testsuite/gdb.ada/whatis_array_val/foo.adb +b25d3898ca50da0b7491c676078f9d64 gdb/testsuite/gdb.ada/whatis_array_val/pck.ads +1a2ee5fc9436c3b0fd905ffdbfd16a91 gdb/testsuite/gdb.ada/catch_ex_std.exp +415316b2683734ddca2704c9bc90560e gdb/testsuite/gdb.ada/bp_c_mixed_case/foo_h731_021.adb +0c808a9554cc141c82536567545db4a0 gdb/testsuite/gdb.ada/bp_c_mixed_case/bar.c +5262f600e863903ab0a1325f17fb8987 gdb/testsuite/gdb.ada/bp_c_mixed_case/qux.c +4622d2c8d9f1a0e49ee7be6222256dad gdb/testsuite/gdb.ada/fun_renaming.exp +d64d668d74b6a84672953ab3eab05019 gdb/testsuite/gdb.ada/pckd_arr_ren/pck.adb +185f50dbe91528e28079b51ed8ee6e30 gdb/testsuite/gdb.ada/pckd_arr_ren/foo.adb +d69ddad6caddaa56895dac9597712067 gdb/testsuite/gdb.ada/pckd_arr_ren/pck.ads +24e8259e39ba5bbe742a4a45ea1d8689 gdb/testsuite/gdb.ada/complete/aux_pck.adb +4ab9d78da6b770799a8ec21833c6611f gdb/testsuite/gdb.ada/complete/pck.adb +ed65049b31756efae2b88c7a69cbffa0 gdb/testsuite/gdb.ada/complete/aux_pck.ads +38a0434cad08069766c7d51bdebbd667 gdb/testsuite/gdb.ada/complete/foo.adb +3ba738fe6fb33ff28683f34d6ba75e4d gdb/testsuite/gdb.ada/complete/pck.ads +63543f67069debc9b9471e44bf8134f6 gdb/testsuite/gdb.ada/fixed_cmp/pck.adb +57c710825694575fefe2584c3644c842 gdb/testsuite/gdb.ada/fixed_cmp/fixed.adb +b976a9b38aeac937b125a37e554094fd gdb/testsuite/gdb.ada/fixed_cmp/pck.ads +35aae6ca8c356a88d4011980649814d4 gdb/testsuite/gdb.ada/fun_addr/foo.adb +654cc96b8d1d4368c29d61a6a3765ef1 gdb/testsuite/gdb.ada/access_tagged_param.exp +c782cb874b082784662aa0f224e5ca55 gdb/testsuite/gdb.ada/ptype_tagged_param/pck.adb +343c888fdca3b470368bc626609a4005 gdb/testsuite/gdb.ada/ptype_tagged_param/foo.adb +a551d0876f5115a437c9a1235f47d528 gdb/testsuite/gdb.ada/ptype_tagged_param/pck.ads +675d3e6e898c5147fa7aaca672b310f1 gdb/testsuite/gdb.ada/access_to_unbounded_array.exp +1d70bf15f7b11394cf9fe1a18a0300ec gdb/testsuite/gdb.ada/unchecked_union/pck.adb +245f1092369d5d95199b11909792103e gdb/testsuite/gdb.ada/unchecked_union/unchecked_union.adb +f3ad50d7aabd7795b50b024464ea1920 gdb/testsuite/gdb.ada/unchecked_union/pck.ads +5c89883f2b540411750fffe0f098a09c gdb/testsuite/gdb.ada/array_of_variable_length.exp +d704f13fddfeeaa356eafbb529de6df2 gdb/testsuite/gdb.ada/dyn_loc.exp +860b76c01dd7302f1a8167fd85543990 gdb/testsuite/gdb.ada/display_nested.exp +56b1281b0bcda3c6ec989b115adcdae6 gdb/testsuite/gdb.ada/variant.exp +1db29833b38ae06f756cf8e52cb4e759 gdb/testsuite/gdb.ada/bias/pck.adb +699c269a22a488c4102bb6596485e429 gdb/testsuite/gdb.ada/bias/bias.adb +1c29ec4fbfc586b68fed3a048c8bbc58 gdb/testsuite/gdb.ada/bias/pck.ads +82b0346cebcc116748d9b1d8af469e14 gdb/testsuite/gdb.ada/info_exc.exp +7f2e0aaec728323925a69b98c2278305 gdb/testsuite/gdb.ada/str_uninit/pck.adb +c808fc088de7e4d809f832a93d7574af gdb/testsuite/gdb.ada/str_uninit/pck.ads +91a4c6e5b1fa490c5457e8745cd987c5 gdb/testsuite/gdb.ada/str_uninit/parse.adb +c3fb22022b2e348fd2e35df9ada975a0 gdb/testsuite/gdb.ada/nested.exp +41f104106f7e0cdfd942f94a92e41a80 gdb/testsuite/gdb.ada/n_arr_bound/pck.adb +8d314ba20a213363e22945aa728afc37 gdb/testsuite/gdb.ada/n_arr_bound/foo.adb +37aac431f1d99232d687b58472702530 gdb/testsuite/gdb.ada/n_arr_bound/pck.ads +23422db382ff59f08853113fa7032199 gdb/testsuite/gdb.ada/mod_from_name/foo.adb +03fbb64672a8968e7892966549360767 gdb/testsuite/gdb.ada/access_to_unbounded_array/pack.adb +7e04a7c0bbfe75bd07a85a334d5f673a gdb/testsuite/gdb.ada/access_to_unbounded_array/pack.ads +360bafb1d2f144837931c673e5acc719 gdb/testsuite/gdb.ada/access_to_unbounded_array/foo.adb +0b89a883d616dcd8c3ee21f6c63bd86f gdb/testsuite/gdb.ada/start.exp +84ae0e315431bae479524fb1a4b55973 gdb/testsuite/gdb.ada/packed_tagged/comp_bug.adb +7a48a683201337760fc677947a63fefb gdb/testsuite/gdb.ada/null_array.exp +27bc2a39d063326e62d2ca02de73b92f gdb/testsuite/gdb.ada/array_bounds.exp +1442e718ea87a69fc32db6afc97c085a gdb/testsuite/gdb.ada/arrayparam/pck.adb +a6fc50eae052d64264a20f08693b0f55 gdb/testsuite/gdb.ada/arrayparam/foo.adb +35530224774a11caf22df5dba5905918 gdb/testsuite/gdb.ada/arrayparam/pck.ads +87500781c8e661091664454e2a430c1d gdb/testsuite/gdb.ada/exprs/p.adb +1d27c6ee4a4742d4efc19c8a5b235bf3 gdb/testsuite/gdb.ada/fun_overload_menu.exp +60f88538d4e639272e69a5728dfd3309 gdb/testsuite/gdb.ada/taft_type/pck.adb +acdf3ed5df298f4682b61d906b21d099 gdb/testsuite/gdb.ada/taft_type/p.adb +6410f0b668752108cebe5d9a43b56faa gdb/testsuite/gdb.ada/taft_type/pck.ads +fb4bcc94c5e0754964950695ee3bbb1a gdb/testsuite/gdb.ada/cond_lang.exp +3da052feab2208b4b6f35cdbee2d16b2 gdb/testsuite/gdb.ada/fun_overload_menu/foo.adb +1a7dd7b62cf7f8eb740bef787677b0b8 gdb/testsuite/gdb.ada/scalar_storage.exp +411a0f1846dcca8997a96e39ea70362a gdb/testsuite/gdb.ada/minsyms.exp +d48ba2f1b9753a00282e5a0038f2a0ac gdb/testsuite/gdb.ada/watch_arg.exp +e2df33f0e288757c3b12060367526eb8 gdb/testsuite/gdb.ada/ptype_array/pck.adb +864d3cae0c3435bbbe1132897118abdb gdb/testsuite/gdb.ada/ptype_array/foo.adb +1bd7b1a75dfd277a42a3fb376ff52a26 gdb/testsuite/gdb.ada/ptype_array/pck.ads +5975470e06fd411b7748838de389e030 gdb/testsuite/gdb.ada/ptype_array.exp +3e119361a5fad00b3a0f31b199dd6c5d gdb/testsuite/gdb.ada/mi_catch_assert.exp +5b685b3fce023f5f1b17cd2653ddde8f gdb/testsuite/gdb.ada/pckd_neg/pck.adb +052a158f599e3110f3809907a6361420 gdb/testsuite/gdb.ada/pckd_neg/foo_o508_021.adb +4bbec516fd409ba8ccb0163852b23259 gdb/testsuite/gdb.ada/pckd_neg/pck.ads +5eb753530a2123a092ae92d9de353d5c gdb/testsuite/gdb.ada/sub_variant.exp +3fd2e56cf95e7f19a6fe058e7ba31e17 gdb/testsuite/gdb.ada/str_ref_cmp.exp +54698b41c41fb4797ba9a23ad4560442 gdb/testsuite/gdb.ada/maint_with_ada.exp +b44547affa51733db06aeb26813a0f1c gdb/testsuite/gdb.ada/funcall_param/pck.adb +0ad94a73517004421a23dc6358b25596 gdb/testsuite/gdb.ada/funcall_param/foo.adb +25063d9fa6e34ef1e4251f42d0d4a801 gdb/testsuite/gdb.ada/funcall_param/pck.ads +be64699a730d8cde603aa836af6d7056 gdb/testsuite/gdb.ada/same_component_name/pck.adb +58733fd31efdda30c7910a5520e80f3b gdb/testsuite/gdb.ada/same_component_name/foo.adb +53c74b3a584246b48974a1c17d0ecdeb gdb/testsuite/gdb.ada/same_component_name/pck.ads +1c3ce9f8e7c4c2483127745c2a8ff786 gdb/testsuite/gdb.ada/array_subscript_addr.exp +ee4154f95456a8d07b0355601e766adc gdb/testsuite/gdb.ada/var_arr_typedef/pack.adb +d94dd27a2537b7a5eba0f276e2771321 gdb/testsuite/gdb.ada/var_arr_typedef/pack.ads +c76b318bfb2779a008ba1f8f32f152b1 gdb/testsuite/gdb.ada/var_arr_typedef/var_arr_typedef.adb +99544aa7f3e76d8862599f0315fc4ec9 gdb/testsuite/gdb.ada/mi_catch_ex/foo.adb +74beaa1eb01842fe6cef2920d40f2f98 gdb/testsuite/gdb.ada/mod_from_name.exp +2489420cd2c61872efb9bc52b3a86e8c gdb/testsuite/gdb.ada/exec_changed/second.adb +6ab71b5b0ce45578b6518194e1818143 gdb/testsuite/gdb.ada/exec_changed/first.adb +df0f229dcccea883b0f2035d7f9e2fb6 gdb/testsuite/gdb.ada/dgopt/x.adb +3def4e3f8eb7a160d331e350aa6c1a68 gdb/testsuite/gdb.ada/char_enum.exp +c58efad8f6aafd6684ad243a74965071 gdb/testsuite/gdb.ada/repeat_dyn/pck.adb +db1ee55f54a8d7dd6d5a5bf2e1e17cfd gdb/testsuite/gdb.ada/repeat_dyn/pck.ads +63f29c55ac6cbeba72982990be5e20f4 gdb/testsuite/gdb.ada/repeat_dyn/foo_oc22_002.adb +e632f7bec244ed535b631965270589c5 gdb/testsuite/gdb.ada/var_arr_attrs.exp +ac52ef91d66532f8842c57f93808e8d7 gdb/testsuite/gdb.ada/info_locals_renaming/pck.adb +ae4653345c7137032d9f715ec9210610 gdb/testsuite/gdb.ada/info_locals_renaming/foo.adb +423b7ba277558f486ca5e902dc2e6c7e gdb/testsuite/gdb.ada/info_locals_renaming/pck.ads +f1724e3f3a9c1d8fe84afc726e168635 gdb/testsuite/gdb.ada/fun_addr.exp +32ceebb6ff21db0b94b6d4e2cdd9564c gdb/testsuite/gdb.ada/bp_range_type/pck.adb +15ce86160261652eb20590b6c900b7d5 gdb/testsuite/gdb.ada/bp_range_type/foo.adb +3818daf1f52b90bb201066021278789c gdb/testsuite/gdb.ada/bp_range_type/pck.ads +4a1d31c6ec62e3144cbe8e0c48fafc33 gdb/testsuite/gdb.ada/whatis_array_val.exp +0167f04d3206e9ae19b7bfa0841b925e gdb/testsuite/gdb.ada/O2_float_param/callee.ads +b500a30423ec54e17d72273035922709 gdb/testsuite/gdb.ada/O2_float_param/foo.adb +b817758a6c99a7ec7be533e1e772c93a gdb/testsuite/gdb.ada/O2_float_param/caller.ads +2373589c2810224b9c037c12f87cf2a9 gdb/testsuite/gdb.ada/O2_float_param/caller.adb +9331dd5a20ff82ce747bcc47b104c038 gdb/testsuite/gdb.ada/O2_float_param/callee.adb +63ec7938bee1688134fec4f1db8f9170 gdb/testsuite/gdb.ada/O2_float_param/io.adb +3c8ff5637c99c55d1b116e06a96f8783 gdb/testsuite/gdb.ada/O2_float_param/io.ads +ab12b216bdd99b683eed59017c471d7c gdb/testsuite/gdb.ada/rec_return/pck.adb +9e0ef661cf40f0f4248a8c891955aeb8 gdb/testsuite/gdb.ada/rec_return/foo.adb +11e2bd70c420bf4723dba1ea714340d9 gdb/testsuite/gdb.ada/rec_return/pck.ads +498153644be6f0c07736ce587f4824c4 gdb/testsuite/gdb.ada/mi_ref_changeable.exp +c6835ee158a04047f9d5e3fde79e9d43 gdb/testsuite/gdb.ada/arr_enum_idx_w_gap/foo_q418_043.adb +c422c974f247c6f5a0fd33c9e6be6517 gdb/testsuite/gdb.ada/task_switch_in_core.exp +c836c3870adc049df7bdad513d6e3dcd gdb/testsuite/gdb.ada/ptype_field.exp +b7ab18ebbb39a328e06923ad50c5bcae gdb/testsuite/gdb.ada/packed_array_assign.exp +e2fdcaf9b6c9697246023a54808c127c gdb/testsuite/gdb.ada/complete.exp +2d741a37b1a5ab043c0ce2bbeb120d18 gdb/testsuite/gdb.ada/win_fu_syms.exp +68ab43dc3c45c4c703441df663b139c1 gdb/testsuite/gdb.ada/info_types.exp +82ab2c790bf3073c44101de0460a4d63 gdb/testsuite/gdb.ada/mi_task_arg.exp +7269d3ea6289415c86cd3f7eb40e78ab gdb/testsuite/gdb.ada/call_pn.exp +46181be7c859a263e04099d565e570f5 gdb/testsuite/gdb.ada/tick_last_segv.exp +a9a01edc84a56f81d61fcb57ea41a196 gdb/testsuite/gdb.ada/set_wstr.exp +4739fcc370e3a8bf488210cdf45a15a4 gdb/testsuite/gdb.ada/null_record/bar.adb +8c6efb06546423248fab5dee8e2f0445 gdb/testsuite/gdb.ada/null_record/bar.ads +172693b3ae623309239efadd53b80659 gdb/testsuite/gdb.ada/null_record/null_record.adb +f3d057287929b0d301101c6ce12fad74 gdb/testsuite/gdb.ada/watch_minus_l.exp +9102f7e5a6414fe0a8b533e8a1473286 gdb/testsuite/gdb.ada/bp_enum_homonym/pck.adb +3893e3f42ebd294e51a3723958177b84 gdb/testsuite/gdb.ada/bp_enum_homonym/p.adb +94befb1f3bfcf2bfd596dbd65a9c4d52 gdb/testsuite/gdb.ada/bp_enum_homonym/pck.ads +a706086752a67e8edd0821e957888e89 gdb/testsuite/gdb.ada/same_enum/a.adb +7a3b7bc46cc5839f93d4b91a4d3ec767 gdb/testsuite/gdb.ada/same_enum/pck.adb +9306c0e22ecc363388bd08a7a897de5b gdb/testsuite/gdb.ada/same_enum/pck.ads +96c88d6bfff2f1a433917fdd882b7fe6 gdb/testsuite/gdb.ada/array_of_variable_length/pck.adb +7168c3bc9a7c17b0d1406840e054534a gdb/testsuite/gdb.ada/array_of_variable_length/foo.adb +b0eb30b27d730ef8b6c383974e954985 gdb/testsuite/gdb.ada/array_of_variable_length/pck.ads +66626a63762921f021cd5673880e1ff2 gdb/testsuite/gdb.ada/lang_switch.exp +bc3226a59616b56a6ad83c5a6214bb49 gdb/testsuite/gdb.ada/funcall_ptr/pck.adb +8867c9da46981e65219753d58e75a6d4 gdb/testsuite/gdb.ada/funcall_ptr/foo.adb +3e0ea1c2cc4a47bdc1ef8444bc826f8b gdb/testsuite/gdb.ada/funcall_ptr/pck.ads +9ea0e5de7af56edd0d063d9b0139c9da gdb/testsuite/gdb.ada/mi_string_access/bar.adb +cc4cfc45c416ae2634ebf5dea5abb2ad gdb/testsuite/gdb.ada/mi_string_access/pck.adb +08ae69acb0824614be8f427c338699c2 gdb/testsuite/gdb.ada/mi_string_access/pck.ads +fc98daf4214fc93b4e8b66d00d00be44 gdb/testsuite/gdb.ada/mi_variant/pkg.adb +fa5a8cf5653ab3818eb70dbb5ef04e2e gdb/testsuite/gdb.ada/mi_variant/pck.ads +d0e63f373997f6d3aa1901fbf640871b gdb/testsuite/gdb.ada/py_range.exp +964962d10a0ef038faf8ba5c5de7d5ea gdb/testsuite/gdb.ada/catch_ex_std/some_package.adb +017aea599c1cb105c1a1770319f17371 gdb/testsuite/gdb.ada/catch_ex_std/some_package.ads +63f81bafe5196e3bdb4dbfbbe3e85c86 gdb/testsuite/gdb.ada/catch_ex_std/foo.adb +36f4d0f908223f578372612b60d4f755 gdb/testsuite/gdb.ada/rdv_wait/pck.adb +bd9051d8cd0fec498670e0c169a0e147 gdb/testsuite/gdb.ada/rdv_wait/foo.adb +465aed1543db2c2c7eb98eed15eaeab0 gdb/testsuite/gdb.ada/rdv_wait/pck.ads +567a047519679e3d3d8d889aec2c0807 gdb/testsuite/gdb.ada/dyn_loc/pack.adb +6e911b336cce90986479c64119fbe992 gdb/testsuite/gdb.ada/dyn_loc/pack.ads +cf627b8fce302851355e0a0adf78f6c1 gdb/testsuite/gdb.ada/dyn_loc/p.adb +ef4435e7ffc614ff58978e377833dfed gdb/testsuite/gdb.ada/bp_inlined_func/b.adb +61188106754142f4e7029768e9cfb3b4 gdb/testsuite/gdb.ada/bp_inlined_func/foo.adb +09047cb97a4966e390dad09a2c73d071 gdb/testsuite/gdb.ada/bp_inlined_func/c.adb +8984beb1dc914572877a379886181661 gdb/testsuite/gdb.ada/bp_inlined_func/c.ads +595dbad9a0d98fd07a201ef4d3c1bd69 gdb/testsuite/gdb.ada/bp_inlined_func/b.ads +56566588761026ad0e05b161467c6496 gdb/testsuite/gdb.ada/funcall_ref.exp +cdfb83d551b6069b94235b8db31dc967 gdb/testsuite/gdb.ada/array_char_idx.exp +32ceebb6ff21db0b94b6d4e2cdd9564c gdb/testsuite/gdb.ada/unc_arr_ptr_in_var_rec/pck.adb +c2a3b8544258dac40d6e124d30f571c4 gdb/testsuite/gdb.ada/unc_arr_ptr_in_var_rec/foo.adb +3818daf1f52b90bb201066021278789c gdb/testsuite/gdb.ada/unc_arr_ptr_in_var_rec/pck.ads +cf380354f6d2f9149c3ec61af0d9cf36 gdb/testsuite/gdb.ada/py_taft.exp +6f7dc3b4c0c0e8beda32f7aeecfafaea gdb/testsuite/gdb.ada/iwide.exp +63543f67069debc9b9471e44bf8134f6 gdb/testsuite/gdb.ada/py_range/pck.adb +f80de51affb8bf76c5873794417b6942 gdb/testsuite/gdb.ada/py_range/foo.adb +b976a9b38aeac937b125a37e554094fd gdb/testsuite/gdb.ada/py_range/pck.ads +85145f2cc5a3b0acc1f6a3a5625959a5 gdb/testsuite/gdb.ada/fin_fun_out/bar.adb +9f48dd407ae32fb4314cbf70da8faf8d gdb/testsuite/gdb.ada/fin_fun_out/foo_o525_013.adb +9ec18ebfd80216e4e201d20e3ca5d820 gdb/testsuite/gdb.ada/fin_fun_out/bar.ads +095528f99df004e9062348072a26f855 gdb/testsuite/gdb.ada/bp_fun_addr.exp +27b6e7154bdf39a90065bb788b9c79e7 gdb/testsuite/gdb.ada/set_pckd_arr_elt/pck.adb +9228a2cf63f6eafc716beac37f7b8a81 gdb/testsuite/gdb.ada/set_pckd_arr_elt/foo.adb +d55915e6613065f7b872da4018cfcc8a gdb/testsuite/gdb.ada/set_pckd_arr_elt/pck.ads +936871b848e1795f182a71afef2a58c4 gdb/testsuite/gdb.ada/arrayidx.exp +cb6edd37d3e6e232088492c5150f9076 gdb/testsuite/gdb.ada/notcplusplus.exp +41f104106f7e0cdfd942f94a92e41a80 gdb/testsuite/gdb.ada/arr_arr/pck.adb +b5eeef22165f46e000f761fdbb0a6054 gdb/testsuite/gdb.ada/arr_arr/foo.adb +37aac431f1d99232d687b58472702530 gdb/testsuite/gdb.ada/arr_arr/pck.ads +aaac75308860d1062c43d807315576d7 gdb/testsuite/gdb.ada/atomic_enum.exp +039b07a07bb232dead0c420610ac1899 gdb/testsuite/gdb.ada/exprs.exp +54fc791bec86d1b4b4b0c91dde9e03f5 gdb/testsuite/gdb.ada/info_exc/foo.adb +56b04ad1eb6ec2392182c1e98e2d8524 gdb/testsuite/gdb.ada/info_exc/const.ads +00291a4441405a5f55aec27c656cd6b4 gdb/testsuite/gdb.ada/task_bp.exp +af36d10bf3a34a1e4bbe9b0dad1c7ca6 gdb/testsuite/gdb.ada/nested/hello.adb +5d2b6ff82648c1b27bef02f74ac0e2a7 gdb/testsuite/gdb.ada/pkd_arr_elem.exp +e600f73edec18e193a399afc91d339d4 gdb/testsuite/gdb.ada/formatted_ref/formatted_ref.adb +97c5a8f97b2907b2308e98407eceecd9 gdb/testsuite/gdb.ada/formatted_ref/defs.ads +0ab8d5574f689ce933ffaddf84c21f9b gdb/testsuite/gdb.ada/formatted_ref/defs.adb +81074fbbf9b2dc86209275fce41d4ced gdb/testsuite/gdb.ada/ptr_typedef.exp +cd39f47aa9a1e3c13b106443d39e8a6b gdb/testsuite/gdb.ada/ptype_field/pck.adb +8eb3228867d5e5d3e629593ee96ac2ea gdb/testsuite/gdb.ada/ptype_field/foo.adb +e874d8f33e5a21e8a72bcbabe26baf12 gdb/testsuite/gdb.ada/ptype_field/pck.ads +ee6f93a7179b4c3ff731d1e719e621d5 gdb/testsuite/gdb.ada/set_pckd_arr_elt.exp +bfdbbe2c6b35d95cb80e81517611f231 gdb/testsuite/gdb.ada/pckd_arr_ren.exp +b58466ae92a896a53231b0082dba5ae9 gdb/testsuite/gdb.ada/dyn_arrayidx/foo.adb +2332751dd205c07ac400171c99a1abd1 gdb/testsuite/gdb.ada/null_record.exp +24826524393a13ad6131432e28b4c205 gdb/testsuite/gdb.ada/uninitialized_vars.exp +d6c16287ae55decf31a495521cb59ff7 gdb/testsuite/gdb.ada/array_return.exp +c521f2cdac4282ed743ffbaf28929aaf gdb/testsuite/gdb.ada/print_pc.exp +721d00a9cec5d2804ecc3ef58a449d05 gdb/testsuite/gdb.ada/info_types.c +90cebd0dff93dad72b6755b3603a10a7 gdb/testsuite/gdb.ada/sym_print_name.exp +308038c0ddf47c26c95df5cc828fb8d9 gdb/testsuite/gdb.ada/array_ptr_renaming/pack.ads +273aa420aa69bd0afc6839c2fb1cfaf3 gdb/testsuite/gdb.ada/array_ptr_renaming/foo.adb +1b97579f6d4b030d8e3118403aabb10f gdb/testsuite/gdb.ada/convvar_comp.exp +fa26dc9b11d0403bdbb501d272c11e3c gdb/testsuite/gdb.ada/access_to_packed_array/pack.adb +930188838f9a96c55b74717a8015b3c4 gdb/testsuite/gdb.ada/access_to_packed_array/pack.ads +e973996cf5a2583fe5bacab3a45c06da gdb/testsuite/gdb.ada/access_to_packed_array/foo.adb +d3e0b7da5fb7e853a76ece10d4512731 gdb/testsuite/gdb.ada/info_addr_mixed_case/pck.adb +137c2b689205de57763dd3d8e8e511cd gdb/testsuite/gdb.ada/info_addr_mixed_case/foo.adb +c8bb2503a9fc8cec3c0d6d18a40cdc32 gdb/testsuite/gdb.ada/info_addr_mixed_case/pck.ads +6ee1dbed0407badcd9bdd0e9ed1f29c0 gdb/testsuite/gdb.ada/length_cond/pck.adb +36adaff3a25943031e8bc705def1c4f8 gdb/testsuite/gdb.ada/length_cond/pck.ads +76b6e134cf5f249ce766a3e8fc65cf6c gdb/testsuite/gdb.ada/length_cond/length_cond.adb +e21046e9dbf15482cb4c8a88ad8bfa5e gdb/testsuite/gdb.ada/scoped_watch/pck.adb +48bcb27edf08e257aad7dd10c37425c6 gdb/testsuite/gdb.ada/scoped_watch/foo_p708_025.adb +82c54786dc3df8b61251fd5bdb61c2e3 gdb/testsuite/gdb.ada/scoped_watch/pck.ads +1dfcfc6fa2b0258535e23c9219939097 gdb/testsuite/gdb.ada/varsize_limit/pck.adb +9b57722cb6df3b1e79f99f152e25ad9c gdb/testsuite/gdb.ada/varsize_limit/vsizelim.adb +4bd5b54b4e666ec879f263d51151f9c3 gdb/testsuite/gdb.ada/varsize_limit/pck.ads +b359708044d0d9ddaf87c889fc5ccb28 gdb/testsuite/gdb.ada/pp-rec-component.exp +40cc6ae165fee8bfd57fd8293eb0b049 gdb/testsuite/gdb.ada/dyn_stride/foo.adb +e184bb3ab6b9611bab2e21f5c86130ee gdb/testsuite/gdb.ada/out_of_line_in_inlined/bar.adb +4f5a35b265fa6b979f3cb1ac958c05e2 gdb/testsuite/gdb.ada/out_of_line_in_inlined/bar.ads +dde78373a2c2933a0478ae5947ce1d23 gdb/testsuite/gdb.ada/out_of_line_in_inlined/foo_o224_021.adb +54fc791bec86d1b4b4b0c91dde9e03f5 gdb/testsuite/gdb.ada/mi_exc_info/foo.adb +56b04ad1eb6ec2392182c1e98e2d8524 gdb/testsuite/gdb.ada/mi_exc_info/const.ads +f40501d53e45518ae8398b0367893163 gdb/testsuite/gdb.ada/rename_subscript_param.exp +845d404debba28cc0104751aa2d1aef6 gdb/testsuite/gdb.ada/bp_on_var/pck.adb +c789d1204b30e02d70fa27521e66f2e1 gdb/testsuite/gdb.ada/bp_on_var/foo.adb +1067f065fd49126593e76474d8d9388f gdb/testsuite/gdb.ada/bp_on_var/pck.ads +629e395d50c9436c8f3dd4d14b693e11 gdb/testsuite/gdb.ada/bad-task-bp-keyword.exp +6730d17f7788d2d5e4b53999fc745a05 gdb/testsuite/gdb.ada/scalar_storage/storage.adb +1d70bf15f7b11394cf9fe1a18a0300ec gdb/testsuite/gdb.ada/scalar_storage/pck.adb +f3ad50d7aabd7795b50b024464ea1920 gdb/testsuite/gdb.ada/scalar_storage/pck.ads +780acdcd3631b4271a280c9a2de7faa8 gdb/testsuite/gdb.ada/operator_bp/ops_test.adb +9afd844faa228eb3e0f7ab271a2e47cd gdb/testsuite/gdb.ada/operator_bp/ops.adb +3ab394b009b9d0b8734e4deb0495bdf2 gdb/testsuite/gdb.ada/operator_bp/ops.ads +c9f7d5e8d4c91422255e5e81054754ce gdb/testsuite/gdb.ada/convvar_comp/pck.adb +f519b012552d32d870c05a23adb2dda8 gdb/testsuite/gdb.ada/convvar_comp/pb16_063.adb +a3ec2cff22a96e68c7cf3bcdc0edd9d5 gdb/testsuite/gdb.ada/convvar_comp/pck.ads +e3e6ced2f97bb78673398d8f1af239b2 gdb/testsuite/gdb.ada/fixed_points.exp +14d6c11980b98f5dcd695fae94b3a527 gdb/testsuite/gdb.ada/funcall_param.exp +fac2cd5d9e1c55eade17f0cedcfa147a gdb/testsuite/gdb.ada/mi_catch_ex_hand.exp +9a4e46fe0487f540844e60eaf99081bc gdb/testsuite/gdb.ada/rec_comp/pck.adb +c068d7470f9f6eb466b91598beaabb8c gdb/testsuite/gdb.ada/rec_comp/bar_o203_012.adb +f73ecc95f09333653432884614e93443 gdb/testsuite/gdb.ada/rec_comp/pck.ads +862ba1e6d4ac39d86aa88dcb1829a8a4 gdb/testsuite/gdb.ada/ptr_typedef/pck.adb +228152a24549f4cb28b09d77994945e3 gdb/testsuite/gdb.ada/ptr_typedef/foo.adb +b25d3898ca50da0b7491c676078f9d64 gdb/testsuite/gdb.ada/ptr_typedef/pck.ads +000843dbbffe7ebedafedad536290f4a gdb/testsuite/gdb.ada/expr_delims.exp +801f48bde009cac9412ea77d95f7005d gdb/testsuite/gdb.ada/char_param.exp +6cf45878172eee3dfb4df2b96600c615 gdb/testsuite/gdb.ada/mi_task_arg/task_switch.adb +452d05b639894fcef99ff9c9346d6418 gdb/testsuite/gdb.ada/packed_array.exp +806ec08d2cc542c8835d72e39c995fc8 gdb/testsuite/gdb.ada/pckd_neg.exp +ee70682f674b1f56a070fe9065fbfb70 gdb/testsuite/gdb.ada/assign_arr.exp +c8fff11fc9dffaf5f86235eaa40ecef8 gdb/testsuite/gdb.ada/variant/pkg.adb +fa5a8cf5653ab3818eb70dbb5ef04e2e gdb/testsuite/gdb.ada/variant/pck.ads +247ea22410a021b54ebfc1af0f9e1cd5 gdb/testsuite/gdb.ada/arraydim.exp +c62ef0409ba1e13e404f27c9dfdb0f0d gdb/testsuite/gdb.ada/funcall_char.exp +5c28d11fbd836b52777f81327d9a40a1 gdb/testsuite/gdb.ada/char_param/pck.adb +b82bdbfb81085bac1b03faec78977203 gdb/testsuite/gdb.ada/char_param/foo.adb +b54e0966144273d29fd32860de73e18e gdb/testsuite/gdb.ada/char_param/pck.ads +0adc5e101cfc2b090106183e8b858de4 gdb/testsuite/gdb.ada/mi_ex_cond/foo.adb +d263ef4219154a8e322086962a31a66d gdb/testsuite/gdb.ada/mi_ex_cond/pck.ads +f5e958cfcdd54ed5bc3e560cb1ec4a43 gdb/testsuite/gdb.ada/dot_all/pck.adb +49ee99c606a4011a49a5a80ea4242370 gdb/testsuite/gdb.ada/dot_all/foo.adb +dfb714b7775496b4b67534ca5b531a2a gdb/testsuite/gdb.ada/dot_all/pck.ads +beb0c9bfc60803012d702c5cf8478289 gdb/testsuite/aclocal.m4 +d2df3e783d242aa32d29282027f3f29c gdb/testsuite/gdb.modula2/unbounded-array.exp +fd7721f505d34f7dc6cf5910c8e9f532 gdb/testsuite/gdb.modula2/multidim.exp +43b3e761eacbdfe957a131707133ec8b gdb/testsuite/gdb.modula2/unbounded1.c +943602c42406b418f84240844f816d3a gdb/testsuite/gdb.modula2/max-depth.c +3a853617e67bc2417caf41c63251b550 gdb/testsuite/gdb.modula2/max-depth.exp +dc605f1c69ba58806f921e7fb8897010 gdb/testsuite/gdb.modula2/multidim.c +302a586334dfff9c71a66a799920b00c gdb/testsuite/ChangeLog-1993-2013 +7c806117b10e1a873d9c916c7bcbd2c8 gdb/testsuite/gdb.python/py-linetable.exp +330d9d703122c3e3704164f1db430da2 gdb/testsuite/gdb.python/py-value.c +d6afaf77e37cbda2b34a382793aa0d4e gdb/testsuite/gdb.python/py-explore-cc.exp +8e3b732bd52799d7e800095a5a5f013c gdb/testsuite/gdb.python/py-pp-re-notag.c +92f77b83b36e64e9ed40bbb690576780 gdb/testsuite/gdb.python/py-value-cc.exp +f83ec8563129522f7b56dd2b1ca66839 gdb/testsuite/gdb.python/python.c +e6398b75fb7b25cebcf6585c47604945 gdb/testsuite/gdb.python/py-frame-args.c +25f2bebdbb991ed9af3c883e0e7d32d8 gdb/testsuite/gdb.python/py-section-script.c +a3d23de9e344ccef04ddf902f1d8c9f0 gdb/testsuite/gdb.python/py-pp-registration.c +6c13a5b17964ac45df4edd6df235fb0d gdb/testsuite/gdb.python/py-parameter.exp +c52871d337ff3f9b3ea73455377b69ad gdb/testsuite/gdb.python/py-recurse-unwind.exp +66900d200cdffe3f3f6b774697fca49c gdb/testsuite/gdb.python/py-linetable.c +abacd17bf0a8a75e850102cb80a378a0 gdb/testsuite/gdb.python/py-arch.c +4eadcb7fa1d017c67d36d5a258fd320c gdb/testsuite/gdb.python/py-explore.cc +3cc23728455246db0cd3690f6ebaba4c gdb/testsuite/gdb.python/py-value-cc.cc +18bbdacf9e08eb7a4ca1ae24d691dac4 gdb/testsuite/gdb.python/py-section-script.exp +053b0468e6926b561421fdafa9453c67 gdb/testsuite/gdb.python/py-breakpoint-create-fail.c +4e54df9d93a67d43c7bf6aeed1f3382b gdb/testsuite/gdb.python/py-frame-args.py +5505fc6aa1cce1ceda93651530d518ad gdb/testsuite/gdb.python/py-infthread.exp +55860f6900cef2c236d7a17adbb227ae gdb/testsuite/gdb.python/py-symbol.exp +ce6eb4b38ec864bde62a63a6d179592a gdb/testsuite/gdb.python/py-pp-registration.exp +bc6b89d45b54012f269e449ab40201ec gdb/testsuite/gdb.python/py-lazy-string.exp +a5a6f9f20d721648486184d3afaac2f9 gdb/testsuite/gdb.python/py-framefilter-invalidarg.py +e8091ed30aa4b88886fa69ac30f3305b gdb/testsuite/gdb.python/py-finish-breakpoint2.py +122a421e78abc2dd961b195b7e0fa809 gdb/testsuite/gdb.python/py-unwind-maint.exp +2b1cb584b94279f265dee2cbe1174051 gdb/testsuite/gdb.python/py-bad-printers.c +4b312000bb3ed4e8c642ba1cce369ee6 gdb/testsuite/gdb.python/py-breakpoint.exp +0995f02fb23b3b8fa764629c4744858f gdb/testsuite/gdb.python/py-evsignal.exp +94ff1427f3e0d299de067eb9810d8693 gdb/testsuite/gdb.python/py-framefilter.c +e76deb586c134f055dc679246b266280 gdb/testsuite/gdb.python/flexible-array-member.exp +4a16ae2a6a16bf4996c3e69092ae711a gdb/testsuite/gdb.python/py-error.exp +8db875295b571b54f2cab101f96ebc73 gdb/testsuite/gdb.python/py-pp-re-notag.py +fe18b1928f648b039912bcd47bf2a395 gdb/testsuite/gdb.python/py-unwind-maint.c +7643937b3833a8e6f714ca03ebb72ee3 gdb/testsuite/gdb.python/py-framefilter-mi.exp +d0f9252d0e2a2bfd3fc04ee8c081d805 gdb/testsuite/gdb.python/py-rbreak-func2.c +c4a53e747256f92d10c5d55ca2ddce53 gdb/testsuite/gdb.python/py-evthreads.c +c86f28a40e1bf1d640e206705ea72947 gdb/testsuite/gdb.python/py-mi.exp +9c8b330e9c0e58f6e5290975fb044f49 gdb/testsuite/gdb.python/py-prompt.exp +6d111084049de99ab173131a45ca3154 gdb/testsuite/gdb.python/py-progspace.c +86d92c99e65c19bbb1d654f43538ed63 gdb/testsuite/gdb.python/py-framefilter.exp +f40cbcf43e3927bb405c3ac101913047 gdb/testsuite/gdb.python/py-shared-sl.c +bebc23957ef357cd751d5a26a39f157b gdb/testsuite/gdb.python/py-symbol.c +8b1e754a5cc6e7694fbf576fa29ca535 gdb/testsuite/gdb.python/py-sync-interp.c +2f5e4ca5b31c0126da900ebca179b223 gdb/testsuite/gdb.python/py-lazy-string.c +054f75de6f78b6caef0f4ea54b26a7ff gdb/testsuite/gdb.python/py-nested-maps.c +a17d306d1825b6e8ff034bbe449ed1a9 gdb/testsuite/gdb.python/py-as-string.c +c7d3218b9d71b5d2276fc08c554f471c gdb/testsuite/gdb.python/py-recurse-unwind.py +07e140ad6595e14600b680df02bc7edc gdb/testsuite/gdb.python/py-objfile.exp +781c6460425cf2885407bc0fc8173b54 gdb/testsuite/gdb.python/py-rbreak.exp +5284683fcd7ba78f4e0bdd34a9214634 gdb/testsuite/gdb.python/py-explore.c +42ec5bed4a1e5ec2f0341ac828638001 gdb/testsuite/gdb.python/amd64-py-framefilter-invalidarg.S +fb6e0ef5e9eb5479db05f293f519ad9b gdb/testsuite/gdb.python/py-objfile-script.c +66846bba99fc9ea60b055908e5518c1e gdb/testsuite/gdb.python/py-type.c +ce18b83a8ad4c2bad75ad253bd741442 gdb/testsuite/gdb.python/py-section-script.py +120a106e753d5bfaca1e223fe042732e gdb/testsuite/gdb.python/py-xmethods.py +e8ed7e528524d6c0a1a70dce02a35bca gdb/testsuite/gdb.python/py-as-string.exp +87315ad03f1d6d3c9c04490541116460 gdb/testsuite/gdb.python/py-breakpoint-create-fail.exp +e4f0427008994308bdddffabc6755a59 gdb/testsuite/gdb.python/py-mi-events-gdb.py +752373fa64fa340394b5ff13c96adc58 gdb/testsuite/gdb.python/py-thrhandle.c +f40cbcf43e3927bb405c3ac101913047 gdb/testsuite/gdb.python/python-1.c +0ff93e076672e338632e9561d8d936ba gdb/testsuite/gdb.python/tui-window.exp +6a1aaa868a64553d5b44ac6821180c13 gdb/testsuite/gdb.python/py-prettyprint.exp +62bb32752d056166edf1ec89b12099fa gdb/testsuite/gdb.python/py-linetable.S +ebe975847abfc7097579d72773efc6cd gdb/testsuite/gdb.python/py-typeprint.cc +9237df7283e62f8ff1524746cbcd95c9 gdb/testsuite/gdb.python/lib-types.exp +3f0e175d99be2d882a40d9b95d978bb4 gdb/testsuite/gdb.python/source2.py +36530e4e390957e62ca246fede18eb7f gdb/testsuite/gdb.python/py-nested-maps.exp +114b82a8234c90448b24649c7e3aef4a gdb/testsuite/gdb.python/py-mi-var-info-path-expression.c +3b1fae34ca9a707b3511aa7e2026c06b gdb/testsuite/gdb.python/py-strfns.c +94e2145497fb7dac4736d0507eb42911 gdb/testsuite/gdb.python/py-block.c +0e96e80de21180a43baa7fce91e82014 gdb/testsuite/gdb.python/py-record-btrace-threads.c +9cf47ef083d2bcf04fefb5f53a5d1855 gdb/testsuite/gdb.python/py-progspace.exp +f28aaaabc64c824af9e71ae712a38623 gdb/testsuite/gdb.python/py-pp-integral.exp +9b5f178975d2d181a12a1b5b665e3d04 gdb/testsuite/gdb.python/py-shared.c +a31fefb7b3bbe3b7c76312b1e9d34c0c gdb/testsuite/gdb.python/py-finish-breakpoint.c +60945ce63cd3cbe8ee584fb6cc99149a gdb/testsuite/gdb.python/py-pp-maint.c +2242ead13742bc8df16e92c4e986a841 gdb/testsuite/gdb.python/py-rvalue-ref-value-cc.exp +9879296585b89d1438d791be9b1fb6cb gdb/testsuite/gdb.python/py-xmethods.cc +518d7c1b7020dd69960b20bd51329cc9 gdb/testsuite/gdb.python/py-events-shlib.c +c4a032b71b2ff24c74745f33d1a62301 gdb/testsuite/gdb.python/py-prompt.c +ae315fc675c9265a3d2fc4a30977f123 gdb/testsuite/gdb.python/py-lookup-type.exp +5f2a14106984ed919fa12f9d8cd9d4b8 gdb/testsuite/gdb.python/py-inferior.c +1fd6c721bc0ade5c58292f766b18ba7a gdb/testsuite/gdb.python/py-caller-is.exp +47c315d422b090987f4e7152527cb4d4 gdb/testsuite/gdb.python/py-block.exp +99163df22f676c1b26f6bf982f83b929 gdb/testsuite/gdb.python/py-recurse-unwind.c +23b1772606ae8cdda8eef186b4fe30e9 gdb/testsuite/gdb.python/py-explore.exp +1447a339e357391de53ad36f129ccfd6 gdb/testsuite/gdb.python/py-framefilter-mi.c +76e13daf4007deaa7f7b28795f888811 gdb/testsuite/gdb.python/py-unwind.c +d9d7a6317f665ee420ea3ebe66081551 gdb/testsuite/gdb.python/py-unwind-inline.py +fb40c087d627fdd7c172410f3425e74a gdb/testsuite/gdb.python/py-arch-reg-names.exp +3f12ffa772844edc6ff4f15e31c447fa gdb/testsuite/gdb.python/py-rvalue-ref-value-cc.cc +c386d36eb24e6eb9d25a1d76dddd456a gdb/testsuite/gdb.python/py-typeprint.py +6749b21edb4aab44af85e6351cddc915 gdb/testsuite/gdb.python/py-finish-breakpoint.exp +1126c2146ad169f7e0f57bf854c5906a gdb/testsuite/gdb.python/py-record-btrace.exp +4b7e9f4cc914f1ee4d834442ed45917d gdb/testsuite/gdb.python/py-xmethods.exp +8e6f1763342869cb5ba810a0cb840fd9 gdb/testsuite/gdb.python/py-thrhandle.exp +bb613ecfdb50d312d385cc36c92d68b6 gdb/testsuite/gdb.python/py-symbol-2.c +7a83432a3d89045b5ea46d21b643e28e gdb/testsuite/gdb.python/py-unwind.py +16db56038fe8731522a7e71ccfa9e1e8 gdb/testsuite/gdb.python/py-prettyprint.py +74170f8723965e043d46497a4de7e049 gdb/testsuite/gdb.python/py-sync-interp.exp +1279c704b0cb616b5defeee8816f6d8a gdb/testsuite/gdb.python/py-pp-integral.py +57d8675e2dca682c378c784b55c72edd gdb/testsuite/gdb.python/py-format-string.exp +dbddda720b358365856e715ac03e9e98 gdb/testsuite/gdb.python/py-framefilter-invalidarg-gdb.py.in +293fd37e30bc8237ee8f14f703e379a9 gdb/testsuite/gdb.python/py-cmd.c +a7494b994a5d4e5facf7ebf7d2857103 gdb/testsuite/gdb.python/py-events.c +3b8e97a021e708039194bc080e9dc591 gdb/testsuite/gdb.python/py-function.exp +9f965927c4c3f8dca901ae359ac263dc gdb/testsuite/gdb.python/py-pp-registration.py +09d900b54fe39c575034c45a7ade5d4f gdb/testsuite/gdb.python/py-framefilter-gdb.py.in +89ec34c599cae5f60fc0afdbd8d383cd gdb/testsuite/gdb.python/py-record-btrace-threads.exp +6238bebd6bf4d74b6ca29a47c9492ce4 gdb/testsuite/gdb.python/py-typeprint.exp +3fc7de0fa25494a57248aeec4f350a2a gdb/testsuite/gdb.python/py-objfile.c +af2f72dd49cbd484a4db488e8a61a6b7 gdb/testsuite/gdb.python/py-type.exp +7802e06e535d5f33c0db54495541251a gdb/testsuite/gdb.python/py-mi-objfile.exp +f0d6feb0d76205426367d1488d9dc6a3 gdb/testsuite/gdb.python/py-finish-breakpoint.py +a2cb7c9e2dbe819dc575942c3ca89922 gdb/testsuite/gdb.python/py-bad-printers.py +79e800656235bab974648921e260d1e9 gdb/testsuite/gdb.python/py-record-full.exp +f298e17de72a69912c2d8651c7a863d6 gdb/testsuite/gdb.python/py-symtab.exp +04fb2ea1facddd2b8cbb2b90ac1802c3 gdb/testsuite/gdb.python/py-cmd.exp +31086645f45528aa72f9cd3d83c0a7ff gdb/testsuite/gdb.python/py-prettyprint.c +1ffbe2217105a34b484cda0492cc64cc gdb/testsuite/gdb.python/py-inferior.exp +ef74541ebed18951b34cbf26805ce3fb gdb/testsuite/gdb.python/py-events.py +67d2b73e3c4eca4d2372864ed21bebb1 gdb/testsuite/gdb.python/py-record-btrace.c +0bff0f0d3d9a451e24b196db0de1dc59 gdb/testsuite/gdb.python/py-mi-var-info-path-expression.exp +1034079cf767999fe3e8ec47e5ddb81b gdb/testsuite/gdb.python/py-framefilter-invalidarg.exp +043f64ceb1d625c1ff5776f8d4920c9e gdb/testsuite/gdb.python/source1 +2201fe232be56f834518596b4f09f9ce gdb/testsuite/gdb.python/py-frame.c +466c7572bc68d91b0b3c0c86adedd169 gdb/testsuite/gdb.python/py-unwind.exp +ebdbc29eb19c9dccf10ec97d27ebba36 gdb/testsuite/gdb.python/py-breakpoint-create-fail.py +c085a293d8437c38c40a36e678862455 gdb/testsuite/gdb.python/py-rbreak.c +165007705c9296ea106c25ea077e0c3c gdb/testsuite/gdb.python/py-mi-var-info-path-expression.py +c70c478b8e1e7c2ed07744b1632e2962 gdb/testsuite/gdb.python/py-mi-events.exp +78a7a62ac08af3a5a21c46b3c8ed9e1d gdb/testsuite/gdb.python/py-nested-maps.py +c678b5fa9a5705f6e6623f2273887b3d gdb/testsuite/gdb.python/py-unwind-maint.py +7d6b2fd1b8248316c7e9980cc3b279c9 gdb/testsuite/gdb.python/py-finish-breakpoint2.cc +95c9f62747fe8eebe8160168de139c9a gdb/testsuite/gdb.python/py-arch-reg-groups.exp +ae8b3199b7cc97ee91291322877c1183 gdb/testsuite/gdb.python/py-shared.exp +d33da31e9602c754cd11dcc3f1da1896 gdb/testsuite/gdb.python/py-infthread.c +18f6b8226c8bdf408c2e0c9d435cc16f gdb/testsuite/gdb.python/py-pp-maint.exp +eda4180f5e852046df73d4a9d62c619a gdb/testsuite/gdb.python/py-strfns.exp +fc45217bf65cb7cf0e1a2ebf4301289a gdb/testsuite/gdb.python/py-unwind-inline.c +7851dc492bfb49d2d246a6b79f9e404d gdb/testsuite/gdb.python/py-objfile-script.exp +4ce157cd8df9760a33f4cf5bb5476117 gdb/testsuite/gdb.python/py-objfile-script-gdb.py +be200355b2af139c5aafbf568d356350 gdb/testsuite/gdb.python/py-breakpoint.c +9b46fdf196d3aee471c7b6cb1bc779b2 gdb/testsuite/gdb.python/py-mi-objfile-gdb.py +e0bdb0a63d42c73a06c1b3eedf3d019a gdb/testsuite/gdb.python/tui-window.py +f8c2050c82d935adee8a1ac702a43794 gdb/testsuite/gdb.python/py-frame.exp +fe786589915deccfa3dc48eeeb4eb8f6 gdb/testsuite/gdb.python/py-completion.py +5ad39e7d2f51339ecc48fd99b2263718 gdb/testsuite/gdb.python/py-frame-inline.exp +d570b2d10408fafe7033738265c66272 gdb/testsuite/gdb.python/py-bad-printers.exp +6f94d3fcebddb59de647dfd4d68e7113 gdb/testsuite/gdb.python/py-mi-objfile.c +67d2b73e3c4eca4d2372864ed21bebb1 gdb/testsuite/gdb.python/py-record-full.c +b809d5f402586cab9435e287c9e24cb9 gdb/testsuite/gdb.python/py-format-string.c +851b6cf9acba7516ced6e49143260e50 gdb/testsuite/gdb.python/py-error.py +52b5768df424dfddbdcae935c99ecf6b gdb/testsuite/gdb.python/py-evthreads.exp +1888b76fb36cc3b39f8fa06ddc734149 gdb/testsuite/gdb.python/py-pp-maint.py +b8a3e46fbd1a3d2823d137814864f97b gdb/testsuite/gdb.python/py-arch.exp +6799a8de14b66e45e794e75d181b0ae4 gdb/testsuite/gdb.python/python.exp +0df3281d97ad1bb2c181f5a2c5d05dc4 gdb/testsuite/gdb.python/py-framefilter.py +778410d23b556223c2e98dd6b55aa033 gdb/testsuite/gdb.python/py-unwind-inline.exp +bb4d26465121b75ae7ba50e5f24bc764 gdb/testsuite/gdb.python/lib-types.cc +15894b7dfb38b400945a09540d0f130b gdb/testsuite/gdb.python/py-template.cc +b4fe671fcdef96c62697eb226fb6c709 gdb/testsuite/gdb.python/py-events.exp +84664719a93f368a5cddd9a504bb1084 gdb/testsuite/gdb.python/py-completion.exp +2a2fdd960b9f97b48c8a12dbc738a447 gdb/testsuite/gdb.python/py-finish-breakpoint2.exp +8e3b732bd52799d7e800095a5a5f013c gdb/testsuite/gdb.python/py-pp-integral.c +e91e520cfdf1ec0dd57327c276c6ccfa gdb/testsuite/gdb.python/flexible-array-member.c +907837a5475bae9bdd0c2f85a79cdbea gdb/testsuite/gdb.python/py-caller-is.c +dce2ea30f649202be0817d869a56249a gdb/testsuite/gdb.python/py-value.exp +9fa66d40a2d533c2b144a5520adc9823 gdb/testsuite/gdb.python/py-format-string.py +540b30ff0a0a3e2154e6821807d1552d gdb/testsuite/gdb.python/py-frame-inline.c +2be123f590da7a380a2910cf7488094f gdb/testsuite/gdb.python/py-template.exp +453d618f76c51465a6438573c0fb615c gdb/testsuite/gdb.python/py-frame-args.exp +f28aaaabc64c824af9e71ae712a38623 gdb/testsuite/gdb.python/py-pp-re-notag.exp +38ae29ba8dd0d94f9fbc5c877ba0396b gdb/testsuite/gdb.python/py-mi-events.c +ea2dab641f5bab9c3acbdc98d6bcd3af gdb/testsuite/gdb.threads/hand-call-new-thread.c +7d33ea29bdb7f51ed94f7bc1baca24ca gdb/testsuite/gdb.threads/stepi-random-signal.c +f32d910053f974682054f07833108c65 gdb/testsuite/gdb.threads/gcore-stale-thread.c +528a9322e8ba111cb7790d3cc6a95519 gdb/testsuite/gdb.threads/tid-reuse.exp +75dbe00ad3f519269421a2d4495a7356 gdb/testsuite/gdb.threads/hand-call-in-threads.exp +375cef4a51683131bc08cc1afc7de90f gdb/testsuite/gdb.threads/step-over-trips-on-watchpoint.c +64fd5c758193501b5f798b37f5d94559 gdb/testsuite/gdb.threads/next-bp-other-thread.c +f45c1fa8effcdb0fae4114916a6b00eb gdb/testsuite/gdb.threads/signal-delivered-right-thread.c +385e5ead2ff2e84fd345941b70510065 gdb/testsuite/gdb.threads/watchthreads-reorder.exp +e93614b55d920bf4bc9cfce6b6adbae4 gdb/testsuite/gdb.threads/thread_events.c +d68d795b9d13ba4273030c9acf6c430b gdb/testsuite/gdb.threads/check-libthread-db.c +215f944c35e8e478805d01486f58fdfe gdb/testsuite/gdb.threads/omp-par-scope.exp +a18137fe5ade7f1600c999d90971abfd gdb/testsuite/gdb.threads/threxit-hop-specific.c +9eaba0dd2266d7d35941eb49845e6072 gdb/testsuite/gdb.threads/tls.c +ae8ef3c586b6eabed0e73de905db75d2 gdb/testsuite/gdb.threads/fork-child-threads.c +f91bd07818ace1a9c76cfbcf40741031 gdb/testsuite/gdb.threads/signal-sigtrap.exp +e97fecfb43583465ea8d8a939d9ac535 gdb/testsuite/gdb.threads/tls-shared.exp +3f7b0e455a67e19b2a4d2df43e3dda3b gdb/testsuite/gdb.threads/attach-into-signal.exp +d6c9e4a19c6359275f17dd66ad1f7c07 gdb/testsuite/gdb.threads/watchpoint-fork-mt.c +fe7e35729ceb1d8a124a69a9fa10002d gdb/testsuite/gdb.threads/names.c +d8bb77cc109af61c8ad69ccfacba6f3b gdb/testsuite/gdb.threads/clone-attach-detach.exp +75afefd504e5914e5d1ea42c061cac09 gdb/testsuite/gdb.threads/linux-dp.c +189ff3cf074a847bdd7ef17cdde63e8d gdb/testsuite/gdb.threads/non-ldr-exc-1.exp +177fe06ad252744ffaf653b00f9d0198 gdb/testsuite/gdb.threads/execl.exp +5f9d8a10ca8681b9895fe758b30afdd4 gdb/testsuite/gdb.threads/attach-slow-waitpid.c +63374de4325e97d39d73394e3c761e5b gdb/testsuite/gdb.threads/threadapply.c +3f7fed59207db1e83f58f59b04d76c67 gdb/testsuite/gdb.threads/thread_events.exp +ce228e201a89a5618142777bb2afe980 gdb/testsuite/gdb.threads/tls-shared.c +af051405b509eaa4e02406613f7324d6 gdb/testsuite/gdb.threads/ia64-sigill.exp +b8de121c748572a21affa75544d8ec23 gdb/testsuite/gdb.threads/dlopen-libpthread.c +f5d2ad006858a765e3b65ac53c8852f3 gdb/testsuite/gdb.threads/non-ldr-exc-3.exp +a5fc95c12a3c3c320ca41e63b2d7b9e6 gdb/testsuite/gdb.threads/non-ldr-exc-2.exp +9054ae979c3e7a76d524162694c9bc28 gdb/testsuite/gdb.threads/process-dies-while-detaching.exp +94f1b75dce37cff45bee119601b9570b gdb/testsuite/gdb.threads/tls-so_extern.c +ddfcb6c2eecc5714e3c53ffff8bec7d2 gdb/testsuite/gdb.threads/multiple-successive-infcall.c +8fd84d85e14e317ba50142a58200ac63 gdb/testsuite/gdb.threads/signal-command-multiple-signals-pending.c +d26f558e8d5197ab0425958577bafa4d gdb/testsuite/gdb.threads/siginfo-threads.exp +90319dbd1bb40e3b96c95ad1e6d6748b gdb/testsuite/gdb.threads/watchpoint-fork.exp +233e56e912395048648281623e31e0f5 gdb/testsuite/gdb.threads/continue-pending-status.exp +55cf1afde04b9702551661b802d6f17f gdb/testsuite/gdb.threads/step-over-lands-on-breakpoint.c +b74ddb9f3cc4e40a40e602df2a92ce41 gdb/testsuite/gdb.threads/thread-specific.c +de16d86f4e0d6676c41909e4e4829036 gdb/testsuite/gdb.threads/hand-call-new-thread.exp +71c94310d234780cada2d61630945787 gdb/testsuite/gdb.threads/signal-command-handle-nopass.exp +a89ed25a7f70e8c14b097fbe0fd0840c gdb/testsuite/gdb.threads/forking-threads-plus-breakpoint.c +7f38034287aba3262ff0c311f678f949 gdb/testsuite/gdb.threads/watchthreads2.exp +0f7b24b67a3a0ea08df1026c9e96ea09 gdb/testsuite/gdb.threads/watchpoint-fork-child.c +625028a5148be6cef7cbf1aa4655e462 gdb/testsuite/gdb.threads/tls-var.exp +96f6ea889fa53b0fde49a0bc7485637a gdb/testsuite/gdb.threads/vfork-follow-child-exit.c +a8df0c30d26f16a694492103a249a4bd gdb/testsuite/gdb.threads/forking-threads-plus-breakpoint.exp +6385d530e4dd4981f7f3c73c58f8139e gdb/testsuite/gdb.threads/step-bg-decr-pc-switch-thread.c +d1fb60b09293a9d66d658d092780f007 gdb/testsuite/gdb.threads/process-dies-while-detaching.c +0d262a85502e020eb6bf2d36c0d80e14 gdb/testsuite/gdb.threads/clone-thread_db.c +7ac387be6e12332b68f70d53e5afc9c0 gdb/testsuite/gdb.threads/non-stop-fair-events.exp +b736e58d1c8864e4fa50f8b96be37caa gdb/testsuite/gdb.threads/clone-new-thread-event.c +0fda19b500fcb562887796e4e21a11e9 gdb/testsuite/gdb.threads/kill.exp +7d4718ec65b02c11f176aafbf00e2027 gdb/testsuite/gdb.threads/attach-into-signal.c +a0ba464281d4a06ef9e83964440c57de gdb/testsuite/gdb.threads/leader-exit.c +2d0946d61bc85a21782f9fe339dad06c gdb/testsuite/gdb.threads/staticthreads.exp +4e0997b46d0d82a297e0d25aed1cf685 gdb/testsuite/gdb.threads/clone-thread_db.exp +32c9966527814eee4e2a7d65c768bbeb gdb/testsuite/gdb.threads/info-threads-cur-sal-2.c +3f93f535b83d1d3758a89db0d696dca6 gdb/testsuite/gdb.threads/watchthreads2.c +84248c7546d9a6100ca9d2bc1c919560 gdb/testsuite/gdb.threads/vfork-follow-child-exec.c +2882106b3b9e44597a0a47f4e02f6216 gdb/testsuite/gdb.threads/signal-command-handle-nopass.c +8a9e7b5ead7d4c3d4246c28c14b96ccd gdb/testsuite/gdb.threads/gcore-stale-thread.exp +2478e9c5b3a88fbd6817af0f53c55664 gdb/testsuite/gdb.threads/threxit-hop-specific.exp +285d35a6eb328b995c1cdc3418b26a36 gdb/testsuite/gdb.threads/interrupted-hand-call.c +cbecf4074b64a8e5ab507447200a6409 gdb/testsuite/gdb.threads/attach-slow-waitpid.exp +0567393db54567d4010d7791758a39e3 gdb/testsuite/gdb.threads/execl1.c +1a5f11e25953bb07588733a18f93de77 gdb/testsuite/gdb.threads/killed.exp +bcbbd281b86cb8c9d33238e7007ef049 gdb/testsuite/gdb.threads/wp-replication.exp +4564ae60a014497fc1e1b90db5c92c9f gdb/testsuite/gdb.threads/local-watch-wrong-thread.exp +90b28e3e9807de26e4f348ffc8cca79b gdb/testsuite/gdb.threads/signal-command-multiple-signals-pending.exp +52aa82e9b2657f7a7cca041414023145 gdb/testsuite/gdb.threads/no-unwaited-for-left.c +2e2d975825387e362711f55296a27a92 gdb/testsuite/gdb.threads/next-bp-other-thread.exp +a389e22190fe9466a06d957ede309f1b gdb/testsuite/gdb.threads/continue-pending-after-query.c +f6d662943aef1b3a50a2fdbd3f147a41 gdb/testsuite/gdb.threads/next-while-other-thread-longjmps.exp +4c71e8f5d3e017d07afe8532e4fa121a gdb/testsuite/gdb.threads/schedlock.c +df82452f754ef15a81d71f46a0892757 gdb/testsuite/gdb.threads/print-threads.c +17483c70217b6f271208df965e661d21 gdb/testsuite/gdb.threads/tls-nodebug-pie.exp +4aa748f11a607a0ce32b231ed956d883 gdb/testsuite/gdb.threads/hand-call-in-threads.c +0ec2191df12111fb60f9a873c1fe78e6 gdb/testsuite/gdb.threads/manythreads.c +de33944bbe8201cb92c2cfac73ef7af3 gdb/testsuite/gdb.threads/non-ldr-exc-4.c +5384ea991f36ae16cfa31c4914e1af2e gdb/testsuite/gdb.threads/names.exp +ec36f52ba9a9dcfc404aa9999106e06c gdb/testsuite/gdb.threads/schedlock.exp +008a55c632c551b9abac1b525d61ad95 gdb/testsuite/gdb.threads/tls-var-main.c +97f30c7240fdc071c3afe77ddf166731 gdb/testsuite/gdb.threads/info-threads-cur-sal.exp +16cf65f713d7db8437980ee00ff83aa4 gdb/testsuite/gdb.threads/pthreads.c +9f1980e50d0b18ecab95050153e4733a gdb/testsuite/gdb.threads/tls-nodebug.c +95357f76e47c2caf0702205f9dff2804 gdb/testsuite/gdb.threads/multiple-step-overs.exp +6a7a5015db744548adcaed6ea465948b gdb/testsuite/gdb.threads/interrupt-while-step-over.exp +743504b5494fe81091f0cdc40b8ea286 gdb/testsuite/gdb.threads/tls.exp +6bbfe819d8befdfbdda2b3e058a6edca gdb/testsuite/gdb.threads/stepi-random-signal.exp +5f438f2a3807da80ab56866f5bdef385 gdb/testsuite/gdb.threads/non-ldr-exit.c +a864ec5cb5610f5174399463feb5351b gdb/testsuite/gdb.threads/step-over-lands-on-breakpoint.exp +fb008b18a02ca98c968b88f4870f1cbd gdb/testsuite/gdb.threads/create-fail.c +a86e738f689d3ee2d201f07e62d1689d gdb/testsuite/gdb.threads/thread_check.c +d7c3a70521cbfd638597dbe78015edf2 gdb/testsuite/gdb.threads/thread_check.exp +63c37c61f1e4c7f40e3ad11f74bc0e30 gdb/testsuite/gdb.threads/dlopen-libpthread.exp +493cc314c14cf1361bc721e0c22ef207 gdb/testsuite/gdb.threads/thread-find.exp +09ba8146044209c8805bcb2d753f201d gdb/testsuite/gdb.threads/thread-execl.c +4cbd3dc62de04a584109ddafdd4a8f4f gdb/testsuite/gdb.threads/queue-signal.exp +2457c5daf7195441496cf54a95d5ad42 gdb/testsuite/gdb.threads/sigthread.exp +fcf50ce16e3001f7d2129ccb5c02ea4e gdb/testsuite/gdb.threads/queue-signal.c +d2260b304707a90f052306f38d072774 gdb/testsuite/gdb.threads/info-threads-cur-sal.c +8d1d7e2644618b04f4568ffd9843f18e gdb/testsuite/gdb.threads/multiple-successive-infcall.exp +e2ce6ff7fc47b7ee744c583f2ec5102c gdb/testsuite/gdb.threads/killed-outside.exp +ffad5535b98b93f5e12ceffa0cb26d56 gdb/testsuite/gdb.threads/killed-outside.c +4c10491ab65b8e2e933cb199638f6de5 gdb/testsuite/gdb.threads/next-while-other-thread-longjmps.c +efc43bb8b45277af5f3ee12d3f782a38 gdb/testsuite/gdb.threads/thread-specific.exp +10a06f9836bc508560770f6d57614541 gdb/testsuite/gdb.threads/multiple-step-overs.c +18c7b005ce8b41f852a557a6bd7522a1 gdb/testsuite/gdb.threads/create-fail.exp +ffca463735d58d1ef44038f64b8302ae gdb/testsuite/gdb.threads/fork-child-threads.exp +d12d944747a04a5bc4aa7667cc06149c gdb/testsuite/gdb.threads/watchpoint-fork-st.c +21df3034844e4bacb97907453857b3f4 gdb/testsuite/gdb.threads/slow-waitpid.c +e500c7a319bf756cae599cc426cd6500 gdb/testsuite/gdb.threads/tls-so_extern_main.c +539e1a64ba2b94f280fc5a69de33e6af gdb/testsuite/gdb.threads/attach-many-short-lived-threads.exp +aedb329277da1fdb4681375e5d139d11 gdb/testsuite/gdb.threads/multi-create-ns-info-thr.exp +a1d0b92f7fc8b5c487b015c740275d72 gdb/testsuite/gdb.threads/interrupted-hand-call.exp +d01171ee415d7c946a2a82ce4e65f22c gdb/testsuite/gdb.threads/signal-sigtrap.c +61d702e93d91abac162e14dfaf663917 gdb/testsuite/gdb.threads/tid-reuse.c +a91a4b805b3c3dfdc1edb562611b378b gdb/testsuite/gdb.threads/async.c +d1cfc8415b67006e3cdc7fd40c62e0e8 gdb/testsuite/gdb.threads/pthreads.exp +79e30d4347b8e2cab54f6dc155c16584 gdb/testsuite/gdb.threads/attach-many-short-lived-threads.c +e5eef89311338eb5fcf8dc2632d0d9be gdb/testsuite/gdb.threads/reconnect-signal.exp +4222b85664c062cb4088e4e13c86aa13 gdb/testsuite/gdb.threads/non-stop-fair-events.c +184c35f95d5ff57d5ea51497ccb9aa9f gdb/testsuite/gdb.threads/leader-exit.exp +8b5a2aec5a2b807e33ce1f58b292be05 gdb/testsuite/gdb.threads/tls-main.c +6d9d53cdd03e125ce05924de0488b2e7 gdb/testsuite/gdb.threads/watchthreads.c +68be547860f1299b1606ffcf08488063 gdb/testsuite/gdb.threads/pending-step.c +9125cea5c809f65f6a84e1454d6fd401 gdb/testsuite/gdb.threads/continue-pending-status.c +a3818f722c524a08c7aae043d62c18e8 gdb/testsuite/gdb.threads/corethreads.c +d71887270e9810ef6b6b7df50ec31918 gdb/testsuite/gdb.threads/thread-specific-bp.exp +e92097a137b9c4d86e4b34380fdf5312 gdb/testsuite/gdb.threads/threadapply.exp +7c01d3e2dcc8d8fb701aafa2f8e292af gdb/testsuite/gdb.threads/vfork-follow-child-exec.exp +b3745178a14f995880af559aee6a3c06 gdb/testsuite/gdb.threads/non-ldr-exc-1.c +d6cd97ef409231fc47f495ff25c05837 gdb/testsuite/gdb.threads/staticthreads.c +5b0b4dedb88b8ca8fce7956e50816938 gdb/testsuite/gdb.threads/wp-replication.c +0b0761fb016e8bcdfefea3dcb870c6a4 gdb/testsuite/gdb.threads/sigthread.c +c2454227b6c3a88e416468d538b35109 gdb/testsuite/gdb.threads/clone-attach-detach.c +4101db23c227f61a3f214f2fd7f3d925 gdb/testsuite/gdb.threads/pthread_cond_wait.exp +da35bfc11a563525dcc73eff1c6eb2c3 gdb/testsuite/gdb.threads/break-while-running.c +55a90d4631e94924106b1564297a99d0 gdb/testsuite/gdb.threads/switch-threads.exp +56707d78f8da29bcd6d92e2cad89a7ca gdb/testsuite/gdb.threads/interrupt-while-step-over.c +c703116e86cb546bd8eabcd93c9364f8 gdb/testsuite/gdb.threads/tls-var.c +6b3cc4699ca87c3f548119fb71f1894a gdb/testsuite/gdb.threads/process-dies-while-handling-bp.exp +fa25f2e14b643aa86eb609976da3e781 gdb/testsuite/gdb.threads/tls-core.exp +1d4f5422080a05c84de63edff6ab0e80 gdb/testsuite/gdb.threads/watchpoint-fork-parent.c +08628612a7f5ec4597c0ea5ff4bd9818 gdb/testsuite/gdb.threads/step-over-trips-on-watchpoint.exp +540e83134a14e72063d57b7929d4b353 gdb/testsuite/gdb.threads/reconnect-signal.c +db3274709817b624b1d43d428dfed185 gdb/testsuite/gdb.threads/non-ldr-exc-4.exp +2be1036fc5db22028d93622d8b20887e gdb/testsuite/gdb.threads/vfork-follow-child-exit.exp +1ff407d6cbdb2d25ce7402b7667c7467 gdb/testsuite/gdb.threads/fork-thread-pending.c +3ddeccebd8ab620ef9933361929f05ae gdb/testsuite/gdb.threads/tls-nodebug-pie.c +4967b597a453c8a7483071052d710c74 gdb/testsuite/gdb.threads/attach-stopped.c +483ede91a3ccc9e234bda95fd84b424a gdb/testsuite/gdb.threads/non-ldr-exc-2.c +1090b6d75e321c373826d7d7b067dc2c gdb/testsuite/gdb.threads/multi-create.c +ec5890b1726a8feff745600ebd77241a gdb/testsuite/gdb.threads/ia64-sigill.c +aea77c6c5c6c29f4c4a9c4c409870c13 gdb/testsuite/gdb.threads/non-ldr-exit.exp +918c338803542b821b4b2b3b735e7537 gdb/testsuite/gdb.threads/manythreads.exp +3d4146544c6ae3c3fb9242ccb5c496bf gdb/testsuite/gdb.threads/tls-nodebug.exp +dad472535c85f244d2dc23aa7ca7b247 gdb/testsuite/gdb.threads/thread-specific-bp.c +3e9b03c532c1c0bce7a21beb7bcb96b8 gdb/testsuite/gdb.threads/stop-with-handle.c +e37af059150d013d2148ddcd7005cbcf gdb/testsuite/gdb.threads/non-ldr-exc-3.c +047167b41fbd3c10ba47f082339b9518 gdb/testsuite/gdb.threads/print-threads.exp +7627790a98ef128f33f68d29d71f65ec gdb/testsuite/gdb.threads/pending-step.exp +bb2fe326022d6e2f346dd32666413cac gdb/testsuite/gdb.threads/pthread_cond_wait.c +cd11271693eb68681d49eb7201d970b5 gdb/testsuite/gdb.threads/execl.c +272797a347540ca8d033fdc2017b46a7 gdb/testsuite/gdb.threads/tls-core.c +6c0e8a4553c158f496057cedde2d1dbd gdb/testsuite/gdb.threads/dlopen-libpthread-lib.c +523be62bdb92c09479c66889edaf7992 gdb/testsuite/gdb.threads/siginfo-threads.c +6e1cee0b8c10b7235511b484d99e85df gdb/testsuite/gdb.threads/bp_in_thread.exp +4783852b7d4db870dffe2bbeb805b3a7 gdb/testsuite/gdb.threads/stop-with-handle.exp +08d2e3238287e10678cb133a4aeaf412 gdb/testsuite/gdb.threads/corethreads.exp +1b6f42f030177f1abbc77db895c6be15 gdb/testsuite/gdb.threads/current-lwp-dead.c +04b8ebc10b956c801ead52fd7c9980bb gdb/testsuite/gdb.threads/multi-create.exp +01d6cecfbc639758b16f11b7a4596f89 gdb/testsuite/gdb.threads/tls2.c +51aa4ea6dc7742bff4513b96d9d5b768 gdb/testsuite/gdb.threads/fork-plus-threads.exp +b073cb8da10d9c0de20ec2e3ffaf7dfa gdb/testsuite/gdb.threads/switch-threads.c +963314af360e86e3abdb6803c1d07126 gdb/testsuite/gdb.threads/bp_in_thread.c +a353ab4942ba9e9e3b1c7fc2b56c57ce gdb/testsuite/gdb.threads/continue-pending-after-query.exp +bad35d25e7b0825c6cb3b356e6722f9a gdb/testsuite/gdb.threads/local-watch-wrong-thread.c +c7f3e22534b4c2fc3817d29fe951a8c9 gdb/testsuite/gdb.threads/sigstep-threads.exp +9bb91e4974b9abc560dfb3b9a95c53b4 gdb/testsuite/gdb.threads/async.exp +e40a8ba4413fd046b6f174d1b3fb9c37 gdb/testsuite/gdb.threads/attach-stopped.exp +c5d2446f31983188c74026c519940843 gdb/testsuite/gdb.threads/clone-new-thread-event.exp +8772a79790957cf77018169f58dce8a5 gdb/testsuite/gdb.threads/break-while-running.exp +911acd86604f1c41ba8da280f4758be3 gdb/testsuite/gdb.threads/fork-plus-threads.c +7d2a9f815af287539ca16cf1104564c6 gdb/testsuite/gdb.threads/gcore-thread.exp +027009e860bf3a0f20c4709e74fca707 gdb/testsuite/gdb.threads/omp-par-scope.c +2cd71ac3a85f55ab4459cd5b310a956e gdb/testsuite/gdb.threads/process-dies-while-handling-bp.c +45064a67e91a9099e9d864af1782a50a gdb/testsuite/gdb.threads/killed.c +919d6e54ff72f09478c95a1e8b29c1a4 gdb/testsuite/gdb.threads/signal-delivered-right-thread.exp +577299bb49d0001029a977e24cefb762 gdb/testsuite/gdb.threads/step-bg-decr-pc-switch-thread.exp +53d27d7b5cb0b8e90e9e50d3944fb83c gdb/testsuite/gdb.threads/signal-while-stepping-over-bp-other-thread.exp +dc848879360e6c3a175752d0257e13b1 gdb/testsuite/gdb.threads/watchpoint-fork.h +f33b5297523da110ba14823414bbc1ef gdb/testsuite/gdb.threads/signal-while-stepping-over-bp-other-thread.c +1f01fbcec18678a59d90ee80eef8ae6c gdb/testsuite/gdb.threads/current-lwp-dead.exp +9c010991ecb42706ac8febefd4a30948 gdb/testsuite/gdb.threads/watchthreads.exp +fde0a6b03c69c0d2fed4335e5b324fe9 gdb/testsuite/gdb.threads/linux-dp.exp +f3ffc210279dd20d668044170f044954 gdb/testsuite/gdb.threads/sigstep-threads.c +6cee0c799985cb7a4b01219d1aa367c9 gdb/testsuite/gdb.threads/fork-thread-pending.exp +3509e17f77b13480d522de21cfe91a48 gdb/testsuite/gdb.threads/check-libthread-db.exp +735615749006532ebfdeb9f0a87b43e7 gdb/testsuite/gdb.threads/no-unwaited-for-left.exp +2bb32f4a98a20e290e58815aa4b36d6c gdb/testsuite/gdb.threads/watchthreads-reorder.c +38c021754791e1b19ed4a7d00076da70 gdb/testsuite/gdb.threads/tls-so_extern.exp +bd5f65532c02ef18dfa7b344799f94ef gdb/testsuite/gdb.threads/thread-execl.exp +39fd5bc2bec8ee1fbc864c25f051e247 gdb/testsuite/gdb.threads/thread-unwindonsignal.exp +46fc5652de9ee9094e9a0d1ec7532d11 gdb/testsuite/gdb.threads/kill.c +17155b728fada832a9acb3d4d25aceec gdb/testsuite/gdb.base/exprs.c +813183faa7d8ce0ae48280cd64d1519b gdb/testsuite/gdb.base/continue-all-already-running.exp +7152637e5812dce010fc5063a5d895a5 gdb/testsuite/gdb.base/nested-addr.c +8d138c5746eea78c223c6f7827e4ebda gdb/testsuite/gdb.base/jit-reader-exec.c +a706fe8d6ecb51bd2a3d33a879414445 gdb/testsuite/gdb.base/display.c +b339f08d0cd8dd2d869fffb5fab5b93f gdb/testsuite/gdb.base/quit-live.exp +e17bb70c45b802743c199d0fd5c17084 gdb/testsuite/gdb.base/step-over-fork.c +04063e42be554033c31893e0c9c1e335 gdb/testsuite/gdb.base/break-probes.c +ff109a5f9e2ce2f45b40037279ede34f gdb/testsuite/gdb.base/dup-sect.exp +18136eda25332d7ea5b8278333935878 gdb/testsuite/gdb.base/skip.c +8ac5c7dddcd8bdc277ff617e17d8f144 gdb/testsuite/gdb.base/infcall-exec.exp +02545edd9cb51c34fce73d476c5f2f29 gdb/testsuite/gdb.base/source-execution.gdb +665d257c5c1f64a2a516bd77bef0998b gdb/testsuite/gdb.base/break.exp d89474265b62f35df0c23a47bf1cc11a gdb/testsuite/gdb.base/m32r.ld -2d881d81b2589367496660e2cc921dfb gdb/testsuite/gdb.base/longjmp.exp -f670f4efd77e92d7948e778f76ecc11a gdb/testsuite/gdb.base/info_sources_base.c -f5972cb5cf8c961c77bbc1f4a6bab922 gdb/testsuite/gdb.base/foll-vfork.c -56f3c5e2aca346a18689113b05211897 gdb/testsuite/gdb.base/backtrace.exp -4a1b9d3b9a8da6325a89b30a360d1907 gdb/testsuite/gdb.base/paginate-after-ctrl-c-running.c -dcb1fb60c149fe711460df1c7af83cb7 gdb/testsuite/gdb.base/scope0.c -f8628a253aa87bd97452af67e61bbbf5 gdb/testsuite/gdb.base/call-strs.exp -03e20ee9cb1336166b4cc976fe7c1159 gdb/testsuite/gdb.base/interrupt-daemon.exp -fb1818de8e4d21c09f75c8b0a19aa66f gdb/testsuite/gdb.base/vla-sideeffect.exp -8f36cda84db7c0f869dbb4fbb9bbfb93 gdb/testsuite/gdb.base/jit-simple-dl.c -0853540fc84177452673fb946e7a47e7 gdb/testsuite/gdb.base/infcall-exec.exp -1668cb03ca996713242d4fd544804c4b gdb/testsuite/gdb.base/solib-symbol.exp -c2a645bfc3ad03e9b9873de76cb5fdcb gdb/testsuite/gdb.base/dprintf-bp-same-addr.exp -e9ba89eace9e28b353ae69c449fa007f gdb/testsuite/gdb.base/print-file-var.exp -5ac9c4faa15d56fdd42b1eca3e1db7d6 gdb/testsuite/gdb.base/charset-malloc.c -9283ae8176e1039d22156fe40ce74e43 gdb/testsuite/gdb.base/segv.c -acba9f56dbe806ea4da7fc6119c4c046 gdb/testsuite/gdb.base/watch-non-mem.exp -ea8f71d22cfe8b2cc7e343631fa61697 gdb/testsuite/gdb.base/find.c -9333b98f8a6d0c277ed9216c876c6306 gdb/testsuite/gdb.base/catch-signal-fork.c -0ce534b4f4cf21c4676ef7fcafed5479 gdb/testsuite/gdb.base/noreturn-return.c -c4664cd744f6c117fd4e35a88ed63cd4 gdb/testsuite/gdb.base/nofield.exp -61848b80d1f8ce5f3515b5947b3ce57c gdb/testsuite/gdb.base/valgrind-bt.c -e8c4877b3c93d9679a9656a05bf66e87 gdb/testsuite/gdb.base/pending.c -4be09c1ae8e5427512a4adf988105d5c gdb/testsuite/gdb.base/foll-vfork.exp -68d252b33c4142fe3e40242a4710dbe7 gdb/testsuite/gdb.base/info_minsym.c -dbbf59a47fd34eae5db6bde19a5f01fb gdb/testsuite/gdb.base/recpar.c -6c62ab614a7194ddc42a46309a752fbb gdb/testsuite/gdb.base/gdb1250.exp -ca7821210aa4f6fa5f6466007e0d4c0e gdb/testsuite/gdb.base/catch-fork-kill.c -bbef55e3b88d3ba2daf8f14a383bc379 gdb/testsuite/gdb.base/break-caller-line.c -c8703a2fb40b5b0e2a96d398aec0df61 gdb/testsuite/gdb.base/siginfo-addr.c -5f509d8a0e0c07c84b50d6f1bae705b7 gdb/testsuite/gdb.base/gdb1056.exp -59cf54f1d69df77c0a2379c68b791eeb gdb/testsuite/gdb.base/wchar.c -bbd68c316d4ba5e21f8aac02eb605fa4 gdb/testsuite/gdb.base/macscp3.h -f9479d08f6cf89317f1b6c1223266538 gdb/testsuite/gdb.base/list-ambiguous0.c -181f48bdf9a071975650cc8e8f800838 gdb/testsuite/gdb.base/source.exp -18a49ceae996869f718980356f5f6b45 gdb/testsuite/gdb.base/shreloc1.c -9e6fd464050e5634278c3dbd081ed3b5 gdb/testsuite/gdb.base/start-cpp.exp -275b1c661c9f8bcd2a6bce2725d14a48 gdb/testsuite/gdb.base/consecutive.exp +8e29a57626d13e4c52381d3e7535ea17 gdb/testsuite/gdb.base/realname-expand.c +cca029dea809e531c8a53ba4f7b4f78b gdb/testsuite/gdb.base/ptype-offsets.cc +3e8ea624d1427082527c90940f653cc9 gdb/testsuite/gdb.base/watchpoints.c +536e6b20b0712e3273329011f907938a gdb/testsuite/gdb.base/code_elim.exp +29908d323f417f15f224bc3d43057932 gdb/testsuite/gdb.base/included.c +6acfa7a336465caced9266c322bd7602 gdb/testsuite/gdb.base/pretty-print.exp +3ac3b52e3e5318877f9af6bfcff6d3ba gdb/testsuite/gdb.base/info-shared-solib2.c +98818e303b75b5092a9c807c9fc316ad gdb/testsuite/gdb.base/global-var-nested-by-dso.c +e98eac07dbaa7fdea9657732cb82a7e3 gdb/testsuite/gdb.base/type-opaque.exp +1a8a62182c48f8f98a747d1655f41d80 gdb/testsuite/gdb.base/watchpoint-stops-at-right-insn.c +7492a2814fe2950b7c154b1ee3db3fe7 gdb/testsuite/gdb.base/arrayidx.c +9230e0350136c8ddd9984072fe0b5e0b gdb/testsuite/gdb.base/eu-strip-infcall.c +ca11f55deba81cd0821cb9372f872a97 gdb/testsuite/gdb.base/kill-detach-inferiors-cmd.c +d1caefb25295533ef6faadfe38a7a851 gdb/testsuite/gdb.base/define.exp +6ba1b2949b55a8dbf6b2893c01179c9c gdb/testsuite/gdb.base/coremaker.c +515dc1a6a8a0ffb172b4c5e78442c48e gdb/testsuite/gdb.base/maint-expand-symbols-header-file.exp +c61556efa88aa68ba14eeba3a6ef2216 gdb/testsuite/gdb.base/solib-disc.exp +61d76b1ee40a06adb14f7e1537e1fd96 gdb/testsuite/gdb.base/catch-signal-siginfo-cond.exp +bc7fa0f1c4eb15bb46d218c715bc8bc2 gdb/testsuite/gdb.base/dtrace-probe.exp +a446921595a3232a85a14952460d1889 gdb/testsuite/gdb.base/morestack.exp +9ae310ef129cd33eda0052a3a9fece0f gdb/testsuite/gdb.base/ldbl_e308.exp +6f1eee5f0a18b57e54cf3a9e723b2c84 gdb/testsuite/gdb.base/c-linkage-name.c +d97ea7b25ac107228c645083fc57f537 gdb/testsuite/gdb.base/share-psymtabs-bt.c +3b1256d67c8d4229a2a88f7a3a97098f gdb/testsuite/gdb.base/many-completions.exp +0f03693f87294eceb6250cc4b434a1f3 gdb/testsuite/gdb.base/siginfo-infcall.c +9de4c29c726104e5cb9c69efe10ef4f9 gdb/testsuite/gdb.base/frame-selection.exp +a8aaef16e885f07898211fd48bce2568 gdb/testsuite/gdb.base/enumval.exp +7d0896a78ac2e53dbbcfa297af0b961d gdb/testsuite/gdb.base/float128.c +50d99f96d2530007ea03ed2dcebaef9d gdb/testsuite/gdb.base/until-nodebug.exp +f5e0540a3035bc388dbee35285e89625 gdb/testsuite/gdb.base/checkpoint.c +924c703481b454aa9fa7750d1858255a gdb/testsuite/gdb.base/annota1.exp +0a73c35d0326b96a8890705c87702f0b gdb/testsuite/gdb.base/prelink.c +4cf3887040fe38199ff2bce594a74f25 gdb/testsuite/gdb.base/watchpoint-delete.c +5bda889deb08d0a51226f44edff81261 gdb/testsuite/gdb.base/macscp.exp +63c7e3f8b029582345525847724fe33a gdb/testsuite/gdb.base/bp-cmds-sourced-script.c +71714012471077fdde725aff794698f0 gdb/testsuite/gdb.base/settings.c +528b8760bb948c94ae071d3815703799 gdb/testsuite/gdb.base/disabled-location.c +4b830d87833af8a025649b42c5d605ca gdb/testsuite/gdb.base/jit-reader-simple.c +86994b44dad959641689a015aaf356c7 gdb/testsuite/gdb.base/so-disc-shr.c +8d80bdde4efda0c45212eb2439aa5afe gdb/testsuite/gdb.base/signals-state-child.c +197afd692b0b5a59fba006062213fca8 gdb/testsuite/gdb.base/func-ptrs.c +2bb85d4671f1d2fa0918e1f03a1e954a gdb/testsuite/gdb.base/callexit.c +8ec4e227a296ffb2627d1999a744da86 gdb/testsuite/gdb.base/symbol-without-target_section.c +f5353dc6d24fa8f3478ee5547968b42b gdb/testsuite/gdb.base/solib-overlap-main.c +c985650b9a7c6da97631f4108eaeebbe gdb/testsuite/gdb.base/catch-load.c +c417daab3ddf32a64c091abb9e719f94 gdb/testsuite/gdb.base/valgrind-disp-step.exp +995d3fa909877f39fdb30a0e7e0b8ec8 gdb/testsuite/gdb.base/unload.c +8e730d4cabc338f1f76259d676d7191c gdb/testsuite/gdb.base/ending-run.c +dfe00a1e6e1415caf41c7eab1f9e7e21 gdb/testsuite/gdb.base/frameapply.exp +568439006a8a3323dce3d550bc6ec421 gdb/testsuite/gdb.base/vla-stub-define.c +5c8442c33e9b3ea50a76e06ac6cb8084 gdb/testsuite/gdb.base/infcall-input.c +2681c13b32d82b67784344c2ec99c552 gdb/testsuite/gdb.base/share-psymtabs-bt-2.c +82350e904fb84910e55b02ba6abcd260 gdb/testsuite/gdb.base/run-after-attach.exp +b661cc41947b92db97d77aeb2a82dc74 gdb/testsuite/gdb.base/eval.exp +49102a455fe98a4a91341a8000e3651d gdb/testsuite/gdb.base/foll-exec.c +cc417821cfb5dcc081fa65a039aca2b1 gdb/testsuite/gdb.base/cached-source-file.c +ee41ee6799b51d57478d46e183a42b20 gdb/testsuite/gdb.base/gdbhistsize-history.exp +4ce6fc189493744295726f8540aae451 gdb/testsuite/gdb.base/break-include.c +4636ea885d659ea2326b7df9b444c997 gdb/testsuite/gdb.base/watch-read.exp +2dd6b67d9f3fcd48964c1d118b2da24f gdb/testsuite/gdb.base/foll-exec-mode.c +bb408d946163c0d57e46b3b23f7e807d gdb/testsuite/gdb.base/arithmet.exp +ce791ffb1575ffe5f54aeab548e026c1 gdb/testsuite/gdb.base/solib-overlap-lib.c +900704a7161d99624b75d5213f38d456 gdb/testsuite/gdb.base/condbreak.exp +6abcc4d7e784fc6faab70c0a012b5459 gdb/testsuite/gdb.base/valgrind-infcall-2.c +ccceae32147bf3c8c9f396091243e3a6 gdb/testsuite/gdb.base/readline-ask.exp +de245872dde7c4b0991db9dd9c6df1f1 gdb/testsuite/gdb.base/stack-protector.c +0f0d110f874691fc79f11ad069fa5516 gdb/testsuite/gdb.base/hbreak-unmapped.exp +4abfdc8409e09528405e505f236bbac0 gdb/testsuite/gdb.base/jit-attach-pie.exp +01430d2dabcfe2d501e56f88ecc20589 gdb/testsuite/gdb.base/dmsym.exp +5487f33d5ec3868e521295950632d2f8 gdb/testsuite/gdb.base/func-ptr.exp +935668abc5388a1413e121f20c42af33 gdb/testsuite/gdb.base/huge.c +c277d5a79c6ebfc1f6de8700aef10327 gdb/testsuite/gdb.base/consecutive-step-over.exp +ce50081aaee363bc22af28ae16becd6d gdb/testsuite/gdb.base/call-rt-st.exp +3510a5962c44ec9aeffdf4accdf9a4cb gdb/testsuite/gdb.base/int-type.c +f442d05372c0edd8adc370395f9bc915 gdb/testsuite/gdb.base/run.c +f77e41416cc09163e89d07f7f1f45661 gdb/testsuite/gdb.base/offsets.exp +16031e39a42f1a2335e5217c40c74dc2 gdb/testsuite/gdb.base/float.c +e58ab5560bd494c34427d5eb46ecde0b gdb/testsuite/gdb.base/hw-sw-break-same-address.exp +24bb6d8fa0e679b806a4e3bc6b9f6586 gdb/testsuite/gdb.base/realname-expand.exp +2c7c90d47face7b5af92ff410f8ab984 gdb/testsuite/gdb.base/bt-selected-frame.c +dc7612e5408438b71cc73a64855e07f2 gdb/testsuite/gdb.base/osabi.exp +fccc00c4f86df8b2422cbc90669f2984 gdb/testsuite/gdb.base/jump.c +78e5943d56b5a904e2e29e51749312ed gdb/testsuite/gdb.base/lineinc.c +c2473b76aa326633b18bca50d6556a4e gdb/testsuite/gdb.base/new-ui-echo.c +66d780cc83f8eb9d412fce3a420930da gdb/testsuite/gdb.base/break-on-linker-gcd-function.exp +df7a9319bfaa89534c1818f2d5ee7b3d gdb/testsuite/gdb.base/gdb-sigterm.c +0048f6c16e1751b9dd4e9fd524c10f22 gdb/testsuite/gdb.base/paginate-execution-startup.c +3764973c71d5aa701031b4e66fd276d3 gdb/testsuite/gdb.base/shreloc.c +93fa5b7da1ae48c8cc760423c2d725b2 gdb/testsuite/gdb.base/prologue.c +e32ea6096c866b3f9ff2b70a0cec9850 gdb/testsuite/gdb.base/info-fun-solib.c +bef9645a9666f4861315de2508ae2f58 gdb/testsuite/gdb.base/new-ui.exp +231426790ed3909c02425eb9818f8173 gdb/testsuite/gdb.base/info-target.exp +b72b2df2ad5d84d36794fb41831d8d29 gdb/testsuite/gdb.base/printcmds.exp +d47cf600366a984537fe500bf1b0e33e gdb/testsuite/gdb.base/miscexprs.c +a1439493bfcb2c61ef0dc81b432cb45e gdb/testsuite/gdb.base/assign.exp +9f8a9b5db7bdaabfadcb5db757ead4fe gdb/testsuite/gdb.base/step-over-syscall.exp +72e5d206003a86c19f0b38718a9de11a gdb/testsuite/gdb.base/list-missing-source.exp +4acb2251f39a047e381c88f0df259ae4 gdb/testsuite/gdb.base/func-ptrs.exp +d7042b659f08ea57247ddc0107a9c029 gdb/testsuite/gdb.base/info_sources_base.c +12374427bcafb209721cac83182367ee gdb/testsuite/gdb.base/siginfo-infcall.exp e711a6cfdf17afc08fbd300867145dd6 gdb/testsuite/gdb.base/so-impl-ld.c -e5f3e7ba11c74629e4dd2696465fb7c5 gdb/testsuite/gdb.base/corefile-buildid-shlib-shr.c -fc50da765d1cd5da7a0730e7fb565934 gdb/testsuite/gdb.base/bt-selected-frame.exp -0a2d7b621b4e95961065079a40b8e238 gdb/testsuite/gdb.base/eval-skip.exp -8cbd49a441aa862c38e42e9babe07ffe gdb/testsuite/gdb.base/backtrace.c -d9eb2fac3f1e2cc7445ffd8232feb2cf gdb/testsuite/gdb.base/jit-simple.c -0694237942e6963e06b2a5d4165e3cad gdb/testsuite/gdb.base/argv0-symlink.exp -7cd0a5257f956160c9f4aae889328cc2 gdb/testsuite/gdb.base/langs0.c -61571df093fdd30f0e3e0249bbccd449 gdb/testsuite/gdb.base/watchpoints.c -98427559cc5cf3ce0cefb37f812c64f4 gdb/testsuite/gdb.base/infcall-nested-structs.exp -26f450b4eba4645102c0b6a2c2429b34 gdb/testsuite/gdb.base/random-signal.c -163467a139780f9c651dac65fa042a56 gdb/testsuite/gdb.base/break-interp.exp -e13be3fd7d3e57464ceca1d6681c1e01 gdb/testsuite/gdb.base/return.c -55054b22a6edfb0fc44272fb7f9040f3 gdb/testsuite/gdb.base/list1.c -271e2292a2d5137fd1893fba8c605fd7 gdb/testsuite/gdb.base/nested-addr.exp -7604e299edf2f949c9dddff99f07dd3f gdb/testsuite/gdb.base/callexit.exp -57f9184118e4c735f5fdd92076149d46 gdb/testsuite/gdb.base/watch-non-mem.c -af572105754646d8377e172c280ec677 gdb/testsuite/gdb.base/batch-exit-status.exp -716d0b595a85637512b90f4cf280a450 gdb/testsuite/gdb.base/symbol-without-target_section.exp -9df04b11972be96e9cc78f5b0073b726 gdb/testsuite/gdb.base/catch-signal.c -c7ecb6c31ecde5dda4934e89e5a778cd gdb/testsuite/gdb.base/call-sc.c -e4b207aaa769b847d5aa34ed0c183b53 gdb/testsuite/gdb.base/twice.exp -74e92378e48ba8b58c2c82cdcfca112b gdb/testsuite/gdb.base/corefile.exp -2f7bac522feea5c6edea4e9fdb7f8061 gdb/testsuite/gdb.base/charset.exp -62a0fe4284d613b752bb2f3de762736e gdb/testsuite/gdb.base/return-nodebug1.c -02cac4edac4862beb7783cb7eb13a32b gdb/testsuite/gdb.base/nextoverexit.exp -72814d7a3a555dcc727b17feea4e5626 gdb/testsuite/gdb.base/weaklib1.c -4ee88c5750a749db945cd092c2dc6859 gdb/testsuite/gdb.base/step-line.exp -a46b3179e8994498dd0dbff704d06961 gdb/testsuite/gdb.base/kill-after-signal.c -bb78ea955fbfae5a2a8b494852c4f480 gdb/testsuite/gdb.base/fileio.exp -1a7bdcb28447dc0ced437becc37bcefc gdb/testsuite/gdb.base/comprdebug.exp -917b1c0d4a61d5f2b7f74cb6ca9e2a59 gdb/testsuite/gdb.base/reread2.c -2601f37468b458e1643ce583b8bfd318 gdb/testsuite/gdb.base/disasm-optim.exp -cf60e60fc00972618e3d4774668a581a gdb/testsuite/gdb.base/global-var-nested-by-dso.c -49b5960728f7fb97d1d913078cf6c70b gdb/testsuite/gdb.base/structs2.c -13a3a629d78ed2f5c07b8802264660bb gdb/testsuite/gdb.base/signull.exp -cb3a1e52905ac355a8e0f33f2f2616fb gdb/testsuite/gdb.base/sss-bp-on-user-bp.exp -2da13b31be7dd5d8fa6c8933fe937e1d gdb/testsuite/gdb.base/all-architectures-2.exp -147ad8b288a83cf2d8680fe92cfd04da gdb/testsuite/gdb.base/batch-exit-status.good-commands -51c28755e9cd7289437025077044a922 gdb/testsuite/gdb.base/pr10179-b.c -3131b2ccb95f409c907eabff706d6223 gdb/testsuite/gdb.base/gnu-ifunc-final.c -e461203bbed58ddee5a67118dc5cbf24 gdb/testsuite/gdb.base/vla-stub.exp -6809831b736d8f003f67e35daf4842cf gdb/testsuite/gdb.base/readline-ask.exp -069f759fe331dff14248a48d8ee66812 gdb/testsuite/gdb.base/ptype.c +9f020342c2203dddcb1b881728a74ef3 gdb/testsuite/gdb.base/noreturn-finish.exp +1babdaf09af5c4dca00d50ddcb968222 gdb/testsuite/gdb.base/source-error-1.gdb +0fc65daba87c018d91d322bf53200402 gdb/testsuite/gdb.base/dmsym.c +79061602750496b4ef70515f7fd332b2 gdb/testsuite/gdb.base/ena-dis-br.exp +5c601938ad0d7db8de7c0fd45d32ac01 gdb/testsuite/gdb.base/sepdebug.exp +9b9de44149640e030b2080ee8990b599 gdb/testsuite/gdb.base/flexible-array-member.exp +0e60a2b9992636ade642e4534ac33236 gdb/testsuite/gdb.base/unwindonsignal.exp +c1ab14a5062dcd889db1c7fe72540376 gdb/testsuite/gdb.base/save-bp.c +df6fbc9e49ec905bc0cd7e23c0fa1da5 gdb/testsuite/gdb.base/share-env-with-gdbserver.exp +13dc51f0a6c2c310961b9cb055cf7920 gdb/testsuite/gdb.base/step-bt.c +1bbd5bc32f4f8b1fd1713f542eda08f2 gdb/testsuite/gdb.base/bitfields2.c +bd52c5610a751f4a895de271b79752e6 gdb/testsuite/gdb.base/print-file-var-lib2.c +1ef276736d16f52b6dfa4d0a4bb11c86 gdb/testsuite/gdb.base/pie-fork.exp +ba670b72741d901419e15fa374cb813c gdb/testsuite/gdb.base/setshow.c +3795982b3781ba7a5957cf3b5e53de62 gdb/testsuite/gdb.base/pr11022.c +3d37145f72d121a56cd4d9786e9c0fb0 gdb/testsuite/gdb.base/gdb1555.c +448368ca2b67423012a02463f55ad405 gdb/testsuite/gdb.base/savedregs.c +3263540e669b161a03fd8c9e16ae5d70 gdb/testsuite/gdb.base/kill-after-signal.c +e2d1889a1dd2a8a94d9317c1d7a9ecb1 gdb/testsuite/gdb.base/interrupt.c +0889786c2c5e74e0670a9b4f6393b25c gdb/testsuite/gdb.base/dprintf.c +59526b911f57f5c746c8246f941a5ed7 gdb/testsuite/gdb.base/nodebug.exp +8f8200a7c5ba00c8d0557a1e7a838e87 gdb/testsuite/gdb.base/siginfo-obj.exp +77ae8618c6b67ec3042a8f8ecb7ec9da gdb/testsuite/gdb.base/dprintf-bp-same-addr.exp +a13b1ab6484bb63d752883b588fc7248 gdb/testsuite/gdb.base/unloadshr2.c +4d93f568362870b9bda4faf8751387f0 gdb/testsuite/gdb.base/watch-bitfields.exp +b11deb1435de6310ed598bb6fcf6a251 gdb/testsuite/gdb.base/step-symless.c +583fa6c907f77039e2b86f1b00b9aba1 gdb/testsuite/gdb.base/duplicate-bp.exp +e80cf93c537ebcf20f8b2687ee110527 gdb/testsuite/gdb.base/dmsym_main.c 246912b4a24edf28c2896b2b0581372b gdb/testsuite/gdb.base/args.c -ad2b24b2705bcc1250be2d16483a9c80 gdb/testsuite/gdb.base/prelink.exp -04de8e0857938885b59da378edca4cbb gdb/testsuite/gdb.base/sigchld.c -124da711c51eaf01d908bfd19ebf205d gdb/testsuite/gdb.base/empty_exe.exp -4a37ebeaffe889ac4b3a06288f47c6d7 gdb/testsuite/gdb.base/complex.c -a4ee5f8b6f114af4350ab2c4a700ba51 gdb/testsuite/gdb.base/nodebug.c -e61077d25c72ac8ae1f803250402d94c gdb/testsuite/gdb.base/msym-lang-main.c -0d1a15a85fc5e41668d70390f374ea65 gdb/testsuite/gdb.base/del.exp -3b5e4e6009a5ac6894c3b138014f5c08 gdb/testsuite/gdb.base/batch-exit-status.bad-commands +1c9a484a7fa9870a7eb03e12ce8eca38 gdb/testsuite/gdb.base/condbreak-bad.c +47d8b473e07a0d6562b726fc934f7578 gdb/testsuite/gdb.base/infcall-exec.c +6f5105325a96a7b1a4d5bd5b424a30c0 gdb/testsuite/gdb.base/all-bin.exp +b050331b45379456c52c65476b4e3421 gdb/testsuite/gdb.base/catch-load-so.c +6f8fd0d6c7a063f572c5e848d22db53e gdb/testsuite/gdb.base/continue-after-aborted-step-over.exp +b33d1d6b80c7e1bf1768eac2ce836722 gdb/testsuite/gdb.base/longjmp.exp +71439f12e7ea02a40540ff867c2b5d7a gdb/testsuite/gdb.base/readline-ask.inputrc +e276646cc7b3136ce08427b7f20bbaa8 gdb/testsuite/gdb.base/normal.c +9b249094a36f9f82f60e3dc0a01cb52d gdb/testsuite/gdb.base/gdbinit-history/zero/.gdbinit +f2a43a61ad25b5af403705b7001ff2d7 gdb/testsuite/gdb.base/gdbinit-history/unlimited/.gdbinit +27c18f6075719425b9794f233a3be5b4 gdb/testsuite/gdb.base/corefile-buildid-shlib-shr.c +3d8ac21291106378c303b3cdb0490c68 gdb/testsuite/gdb.base/nextoverexit.c +26fedbe8fc2d55d50f911f05c1e2cf9f gdb/testsuite/gdb.base/batch-preserve-term-settings.exp +6221a1bfd8a9eefd1bb9dc2c020bdca6 gdb/testsuite/gdb.base/ctxobj-f.c +71f6f1a391717d414a1eb51c7f8a31b2 gdb/testsuite/gdb.base/bfp-test.exp +7e39ced28a414ef62a54d6ee4910086b gdb/testsuite/gdb.base/coredump-filter.exp +85ca0852d1f1ac11acb24f5b92af78a0 gdb/testsuite/gdb.base/vla-ptr.exp +60203691624e0e555b700b2864fe5c22 gdb/testsuite/gdb.base/twice.exp +0b5b663cc5c25eed4aea4c46ac223b7c gdb/testsuite/gdb.base/symtab-search-order-1.c +c55c55d6b106f21a6ef8cb62f50876ac gdb/testsuite/gdb.base/overlays.c +911467565e19035d03b40d7429123286 gdb/testsuite/gdb.base/info_sources.exp +23fc8a69ebf0257cd0dd2bbbeebf9bad gdb/testsuite/gdb.base/charset.exp +b9ca8383bdb8bb3412dd8307e8f31c15 gdb/testsuite/gdb.base/solib-corrupted.exp +349106a5719f88a48ff318fc4fdf6566 gdb/testsuite/gdb.base/step-resume-infcall.exp +0005426c745d13e86cfe2993581ebb5f gdb/testsuite/gdb.base/dprintf-pendshr.c +b263e085b920ccae2568157fcc33189f gdb/testsuite/gdb.base/psymtab1.c +7122fb4e17f101c69fa35dc2304f6999 gdb/testsuite/gdb.base/watchpoint-hw.c +4eec4c3980d7bc27198e3298211db164 gdb/testsuite/gdb.base/step-sw-breakpoint-adjust-pc.c +51a058f096834287db3e65e95c935f27 gdb/testsuite/gdb.base/watchpoint-solib-shr.c +cc4761fb606b950992ac1556ac1d867d gdb/testsuite/gdb.base/infoline-reloc-main-from-zero.exp +96183ad7fde5dd9a6539958e0bf29a10 gdb/testsuite/gdb.base/ifelse.exp +2075690e93f56fd5ec6bba69a25b8ddd gdb/testsuite/gdb.base/watchpoint-hw.exp +dd8f97f6c053392742bae8dd2857aa75 gdb/testsuite/gdb.base/new-ui.c +479d0bb425c079b665db0042b02e276b gdb/testsuite/gdb.base/unwindonsignal.c +8963f21afec2e5d41ead44ad5da9b744 gdb/testsuite/gdb.base/set-inferior-tty.exp +93f346aca4f2368e78a3e05c58b3e85d gdb/testsuite/gdb.base/nested-subp2.c +b6e2987cf1c62ee51c7152ae404c1f7b gdb/testsuite/gdb.base/max-depth-c++.exp +8ada14b84f91bfa088d49a84a46d928a gdb/testsuite/gdb.base/sym-file-loader.c +3987b73f9715a88d25841e0e935a7d4a gdb/testsuite/gdb.base/gnu-ifunc-final.c +42e76fbac57877db542db92e91c25355 gdb/testsuite/gdb.base/testenv.exp +ce00668ac1b9dfde38d99325d2e94e07 gdb/testsuite/gdb.base/valgrind-infcall-2.exp +14d5e1d39659ee059e894961a1ab0ba5 gdb/testsuite/gdb.base/signest.c +feb048677335e8ef92579a236ae6ff21 gdb/testsuite/gdb.base/jit-reader-simple.exp +554e44d03eb56e8a36dd99eb71a3d28c gdb/testsuite/gdb.base/fullname.c +0edf4067a23669e12fd2e25b76fba644 gdb/testsuite/gdb.base/break-fun-addr2.c +dea5753cd5e274162b1aa803c4b0320a gdb/testsuite/gdb.base/catch-fork-static.exp +a9ae260f0e18491dabfe532576d8687b gdb/testsuite/gdb.base/with.exp +63f0d07d313f6c95ec951c7e74bca635 gdb/testsuite/gdb.base/ptr-typedef.exp +e937e33a0cc47f4e4dcc57c5a7662c86 gdb/testsuite/gdb.base/dfp-test.c +fbe145294bddba280461658c55e1293d gdb/testsuite/gdb.base/func-ptr.c +c90e022fb5ef3df8a5639df233f9c350 gdb/testsuite/gdb.base/langs2.cxx +5bb8fff1f26b0786238a365f135c62c2 gdb/testsuite/gdb.base/skip.exp +f38ac1d6d25bfa7a70f41403da995aaa gdb/testsuite/gdb.base/siginfo-thread.c +c6d73d686dd6ee0d8280d35c1239e297 gdb/testsuite/gdb.base/sigstep.c +719cffca8f640887f7c0be42923741a7 gdb/testsuite/gdb.base/commands.exp +dab07c840916b9acf2101e0655160199 gdb/testsuite/gdb.base/with-mf.exp +9e92885c7557795109efca77aef21474 gdb/testsuite/gdb.base/moribund-step.exp +5da941f4a28dd04ee7edace4328baf0c gdb/testsuite/gdb.base/long_long.exp +11bcea2b42f197c366a35988ff48d882 gdb/testsuite/gdb.base/info-types-c++.exp +eb5b19284f976005d740b751ac4aee3c gdb/testsuite/gdb.base/share-psymtabs-bt.exp +0ab6e7e067942283733b42991bd05167 gdb/testsuite/gdb.base/jit-reader.exp +3729032951527cc7389d416b8768823d gdb/testsuite/gdb.base/gcore-relro-pie.c +22602f8afcdeb026bdc58f1ba8742200 gdb/testsuite/gdb.base/info_minsym.c +c6ec0f41dc6b103d09171e27458b374d gdb/testsuite/gdb.base/new-ui-pending-input.c +8fd4cc333e365997998df6afa6160b14 gdb/testsuite/gdb.base/set-cwd.c +5ba2f3fd778c72a7dbe113e1962b2b6c gdb/testsuite/gdb.base/langs2.c +8bd7a9b5237d06d6194f65fc6aa6d721 gdb/testsuite/gdb.base/double-prompt-target-event-error.exp +f23bc0ca7fa136769e6805801a508434 gdb/testsuite/gdb.base/jit-elf-main.c +8cdcbd2b63ee851c99d3091fe1636dc3 gdb/testsuite/gdb.base/many-headers.exp +128e33f7f2ff5d6a91ea26016f38ad23 gdb/testsuite/gdb.base/solib-display.exp +a81fbf3fa4bf66a5944930742552fd10 gdb/testsuite/gdb.base/anon.exp +e9886d661aa969ec1ebd5fedb508502a gdb/testsuite/gdb.base/info-locals-unused-static-var.c +5c412b81cb99d4c4deb227ee4b272335 gdb/testsuite/gdb.base/step-break.c +a8749df17433dbbe0c3a192c3ef25db0 gdb/testsuite/gdb.base/quit.exp +81032b4a4f2e512788f3ee788f4d943b gdb/testsuite/gdb.base/step-line.inp +1484c39fbd7a29f47bee1b9d7550223e gdb/testsuite/gdb.base/gdb-caching-proc.exp +983b3c0a0685fd998ab5c25d84dbf296 gdb/testsuite/gdb.base/style.exp +15c7ec89d3cff497b0cc0397dd90dd0a gdb/testsuite/gdb.base/detach.exp +788734e750c2c25b355045146a70267e gdb/testsuite/gdb.base/float.exp +d95a57a70b59a97ea088a2862c0558a1 gdb/testsuite/gdb.base/check-psymtab.c +177a993f3689b49918729c8837f255f6 gdb/testsuite/gdb.base/dprintf-pending.c +444f3ae7f6d4d98034d38c77ba014d6f gdb/testsuite/gdb.base/default.exp +7ad7cdd8e0f86b4503745ae7b4b1a17f gdb/testsuite/gdb.base/auto-connect-native-target.c +f925db04a50058ffca5e462d18e144b5 gdb/testsuite/gdb.base/large-frame.exp +8c8164adc57ff3430e104517b7b4c937 gdb/testsuite/gdb.base/bang.exp +f444d1258b5c1b1f812eda56f4b2fbe5 gdb/testsuite/gdb.base/until.exp +4a85f7a5779807ed270595d4dc8ece50 gdb/testsuite/gdb.base/jit-elf-solib.c +f4b45f043ef653f0f23eeaa8c1f42c2b gdb/testsuite/gdb.base/siginfo.c +e4b0fa9e98082b287b6795ef2d143bfa gdb/testsuite/gdb.base/vla-stub.c +a5dd1a0a67f72b9fbc4ecccf5769099e gdb/testsuite/gdb.base/fixsection.exp +2a4aa59203d24147b833015285f9e825 gdb/testsuite/gdb.base/opaque1.c +9e7ddbc0c3025ba1c271daaca1593974 gdb/testsuite/gdb.base/type-opaque-lib.c +67ceb27bf818d3f6da08eafc5153690d gdb/testsuite/gdb.base/shr2.c +b75e7d1e717a19fb310753f2da06a58d gdb/testsuite/gdb.base/return.c +cd31d1549d7bbc197a5fd2e8ae2c84fe gdb/testsuite/gdb.base/siginfo-addr.c +49384c0095cbe188bc40867612748c41 gdb/testsuite/gdb.base/longjmp.c +567ea781562d36441691b8fb049580e0 gdb/testsuite/gdb.base/step-sw-breakpoint-adjust-pc.exp +15644736c8a9939c56ea94c6a4e5be7b gdb/testsuite/gdb.base/bp-cmds-sourced-script.exp +c7dee87f22b447ba278521b020e31066 gdb/testsuite/gdb.base/all-architectures-0.exp +88eddcf356623704ca7372f1355b74e3 gdb/testsuite/gdb.base/page.exp +1147eb466ae25e502173b774e0ee6956 gdb/testsuite/gdb.base/ctf-constvars.exp +00d586b64311006574a50ac210674e50 gdb/testsuite/gdb.base/solib-search.exp +eeda2106097ac5d70989ce4c82861831 gdb/testsuite/gdb.base/batch-exit-status.exp +c073f5ba0d678c2ca6e6a897f39b99ca gdb/testsuite/gdb.base/corefile-buildid.exp +923dc68423643d06a3ba897845f76103 gdb/testsuite/gdb.base/watch-cond.exp +587aa94d277b6e0a6441f0ea5468d0d7 gdb/testsuite/gdb.base/info-proc.exp +68ad36eb4bae04f616b9d3aa218934d5 gdb/testsuite/gdb.base/morestack.c +4068898e26a489cbfa97b43e84987d17 gdb/testsuite/gdb.base/cvexpr.exp +6a12cce54a177a6b40cddded00f1850d gdb/testsuite/gdb.base/fixsectshr.c +68a027b8b6f720035128f4b4034358e3 gdb/testsuite/gdb.base/index-cache.exp +40fe80d2ce9188496464b17365332748 gdb/testsuite/gdb.base/ctf-ptype.c +6b3af58da0a8f5e4c90e7e8c3954aa34 gdb/testsuite/gdb.base/with-mf-inc.c +6fbaa198ed80c929670c1753bc933cf0 gdb/testsuite/gdb.base/stale-infcall.c +37fe0699949e056f9c0c0cfc3494ef77 gdb/testsuite/gdb.base/signest.exp +78e8de3e90f8757a97abc7bd8a97f9a6 gdb/testsuite/gdb.base/solib-vanish-lib1.c +6bef61f826aca53fc72d88d2897082dd gdb/testsuite/gdb.base/stale-infcall.exp +1f929107a827a0168852e6f15773169b gdb/testsuite/gdb.base/cond-eval-mode.exp +338ea7cc130652318509b65c334cc20a gdb/testsuite/gdb.base/line65535.c +354a8bb44a37ecd8a7263ae7a5646a5c gdb/testsuite/gdb.base/solib-symbol-lib.c +d6413bee94b814011c80a35f63365985 gdb/testsuite/gdb.base/callexit.exp +efabc62bc10fb4d348a5bec6c3f20ce0 gdb/testsuite/gdb.base/gdb1821.exp +6bd3b4bdeb69fd4f3cb889d6d4772b68 gdb/testsuite/gdb.base/trace-commands.exp +94c1f1818c9234b5e8e7669b457865c1 gdb/testsuite/gdb.base/bar.c +563cb518a55c6955c05e25310dc3efed gdb/testsuite/gdb.base/hbreak.exp +d227cd5acdb0fca7bc3bc43b226fcf96 gdb/testsuite/gdb.base/pi.txt +9a2b21b659f74914efac559f66736209 gdb/testsuite/gdb.base/break.c +2bfad05f720649a872182f4b45abc746 gdb/testsuite/gdb.base/foll-vfork.c +ce37dea1607475351f83681a2ba6d7f4 gdb/testsuite/gdb.base/backtrace.exp +fa58b88aa462f28fb597b8ea79f0ab27 gdb/testsuite/gdb.base/frame-args.exp +8e4d9ad08c3fc6519e7495a6b19c18ab gdb/testsuite/gdb.base/wchar.c +ddd21630ee9470888375152d15353ea6 gdb/testsuite/gdb.base/line-symtabs.c +be73407626aebb565e076044ee5178e4 gdb/testsuite/gdb.base/structs2.exp +ea43564ba84cbb1ac7d099554017d429 gdb/testsuite/gdb.base/nested-subp1.exp +febaf1aa8b4f4bc0f582328d279ec77e gdb/testsuite/gdb.base/c-linkage-name.exp +e5b90c26c05a0c8514df708da12fb4cc gdb/testsuite/gdb.base/info_qt.c +0921148d908761b708589c98a2880986 gdb/testsuite/gdb.base/write_mem.c +6821de1e8a91bccb3d33ac16982d4c95 gdb/testsuite/gdb.base/watch-cond.c +7efd9329cd6ec19f4dbec1d613d13374 gdb/testsuite/gdb.base/finish.exp +4c664aa20a95e6ed9eac3ee8fb8c06d7 gdb/testsuite/gdb.base/gdbvars.c +a60947977e51f57070879ffd61ae987f gdb/testsuite/gdb.base/gdb1090.c +946afc32d2f51ba0430700439789e21f gdb/testsuite/gdb.base/watchpoint-reuse-slot.exp +bd288f742b97a681bd68c69ff6d0ef9d gdb/testsuite/gdb.base/all-architectures-2.exp +8f74a85cf677b96a7a4f04dca4eafde0 gdb/testsuite/gdb.base/gold-gdb-index-2.c +e76f41f16c424f1f591dd70a12ec6615 gdb/testsuite/gdb.base/interrupt.exp +0866936e08a99bb0917851e06bc8a9ee gdb/testsuite/gdb.base/signull.c +43d8fe817234f8f99ab19edfb5f03406 gdb/testsuite/gdb.base/disabled-location.exp +b85e0b883c315e855edef1bce45c983f gdb/testsuite/gdb.base/fortran-sym-case.exp +15e792a599d7b47a376019eae3253352 gdb/testsuite/gdb.base/prologue-include.exp +56b2402a88b500f946a1f05ee3716a82 gdb/testsuite/gdb.base/symtab-search-order.exp +2cd294fb35bfa9dacd573453174d778a gdb/testsuite/gdb.base/sym-file-main.c +89c95114a86e4f0338e3bfa3e0e47508 gdb/testsuite/gdb.base/watch_thread_num.c 1ea088b852b87134ad1b9038b0dd2204 gdb/testsuite/gdb.base/store.c -f2d503fe340b2200b124f44944fe779d gdb/testsuite/gdb.base/source-error.gdb -66782f5e81bdeba6427cb5fb3441c9c4 gdb/testsuite/gdb.base/ctxobj-v.c -2cbf5fde26db41ed980303b2e01a9206 gdb/testsuite/gdb.base/step-line.c -501a37604adf14766da0c352b117b2ca gdb/testsuite/gdb.base/frameapply.exp -633127bb55eae76ef966fce18a839a8e gdb/testsuite/gdb.base/detach.exp -9b508f2a1866a8de5022288722a680f2 gdb/testsuite/gdb.base/load-command.exp -4629502f213de348049f7a74a24bd6c1 gdb/testsuite/gdb.base/bp-cmds-execution-x-script.c -34c3e2db783b9b5cff94ee55c380fd1d gdb/testsuite/gdb.base/structs3.exp -bca1ca5ad04a99b2301374d10ed4b920 gdb/testsuite/gdb.base/nested-subp2.exp -1504853bfa78f1651b44c094b7d6ed0c gdb/testsuite/gdb.base/realname-expand.exp -98ee7af4f77cb70e24754123587d0c10 gdb/testsuite/gdb.base/break-inline.exp -3ddd27d776e2a85f56c04060eba388b0 gdb/testsuite/gdb.base/ctf-constvars.exp -a7eec13082c0bf5a6bcf3bea3e8f143c gdb/testsuite/gdb.base/pointers.c -7d9a1cd88cd1da197028840d0f677b5b gdb/testsuite/gdb.base/catch-signal-siginfo-cond.exp -baec86db8c556849a08cb718a27743c6 gdb/testsuite/gdb.base/startup-with-shell.exp -f443b53242e014f3d8d77e0fcc5ef23c gdb/testsuite/gdb.base/structs3.c -b39944494c5bdd5b1b5e2dfef5426cd2 gdb/testsuite/gdb.base/hook-stop.c -0c30ff904d7950c94f46c998f834d0bd gdb/testsuite/gdb.base/call-ar-st.c -efcdc1be33392f7ebc8dc2a5666e5c38 gdb/testsuite/gdb.base/finish.exp -e3798c9d6551abfb6a957c61a756f3f0 gdb/testsuite/gdb.base/jump.exp -1070e89ae3b980dbc4fdee19f9b6ca61 gdb/testsuite/gdb.base/quit-live.exp -0a6cd7e2ca486698e1867fc1bfcbf8cf gdb/testsuite/gdb.base/stale-infcall.c -9abbb202693c949e0470656ba553b178 gdb/testsuite/gdb.base/sum.c -e2a1039f3809795282e1ee26959754c5 gdb/testsuite/gdb.base/value-double-free.c -adc4f000188bad8ceb5330aed3e181cb gdb/testsuite/gdb.base/interrupt-daemon.c -1c8f72fc011f31dacef3529c767aa8a7 gdb/testsuite/gdb.base/disasm-end-cu-1.c -fce2a881e120d7b10ec6453c64259511 gdb/testsuite/gdb.base/hbreak-unmapped.c -f478ccdc8b17c07d0dc827879268a06e gdb/testsuite/gdb.base/watchpoint-cond-gone.c -97b5b29ab63ebbaa7238dde00778ea9e gdb/testsuite/gdb.base/gcore-tls-pie.c -1f1baf9250883f5a0b7c0c35dfc8324b gdb/testsuite/gdb.base/opaque0.c -acbed32f5cda28d6865b419e3e859e37 gdb/testsuite/gdb.base/langs.exp -86ee7dbf55fbc3d72e62fb81643c6d4a gdb/testsuite/gdb.base/gnu-ifunc-lib.c -a480e9f904717722cb161d894d1b21ce gdb/testsuite/gdb.base/dmsym.c +f356ff50643e59000ef3d9f24089698b gdb/testsuite/gdb.base/psymtab2.c +2402c8f2edee89593a25632950e207f2 gdb/testsuite/gdb.base/logical.exp +de14198725eef7ccf5cd4bab113e59ee gdb/testsuite/gdb.base/sym-file-lib.c +f22b3429bc738d21904d8444b358a6c3 gdb/testsuite/gdb.base/all-architectures-1.exp +867b1600d8844ef50dd1cf6bc3172f28 gdb/testsuite/gdb.base/max-value-size.exp +f69f2e0a71cd44b0307289ee7fdf69ab gdb/testsuite/gdb.base/break-caller-line.c +ee0191441300dbb486d9933849a7729b gdb/testsuite/gdb.base/compare-sections.c +304c0e7d5b07e33a57e5283c9c8c8fd3 gdb/testsuite/gdb.base/dprintf.exp +2cf828bbf49091f3143d538daf8e3a57 gdb/testsuite/gdb.base/so-impl-ld.exp +2d350e31b266d2946552537151dc6646 gdb/testsuite/gdb.base/continue-all-already-running.c +15ade77de8bd9eac69fe8815bc764d81 gdb/testsuite/gdb.base/readline.exp +892c6ddc16520205fba47146f430db7f gdb/testsuite/gdb.base/breakpoint-in-ro-region.exp +a52bad26a400693df906e8d623d47336 gdb/testsuite/gdb.base/gdb11530.exp +87ff2860cb0a9b324d7b22b18e051ce8 gdb/testsuite/gdb.base/complete-empty.exp +4ba3be198bad54c5b44ec64b64956043 gdb/testsuite/gdb.base/gcore-tls-pie.exp +a14109684a37f3eca85983a44001baaa gdb/testsuite/gdb.base/sepsymtab.c +bd3bb3b35a86cf2175f108d2b053b5a7 gdb/testsuite/gdb.base/bp-permanent.c +cf764c991b52c4a2dcf747f13febb2cf gdb/testsuite/gdb.base/inferior-args.exp +ad2b4f4ddae1cded433018ca285e0cb0 gdb/testsuite/gdb.base/watchpoint-cond-gone.c +ec7667e3d98aa4dbb1134871bf699d09 gdb/testsuite/gdb.base/volatile.exp +ec8626197e229d401b0884060f646ac2 gdb/testsuite/gdb.base/solib-search-lib2.c +0858132bd8ef55f4ce169ea6993684db gdb/testsuite/gdb.base/interp.c +a545e5928734a6c44359df2b5384862c gdb/testsuite/gdb.base/solib-display-main.c +edccb77c6ef213534f8828c72c641c99 gdb/testsuite/gdb.base/align-c.exp +3afe098fef5ee97436bb45f07f9c62ed gdb/testsuite/gdb.base/a2-run.exp +3e3efeed512868b070c305cf8e8fb8a6 gdb/testsuite/gdb.base/stack-checking.c +66c786a317df846bef91ab54b09e6f13 gdb/testsuite/gdb.base/complex.c a083d8d4881ea947f4ec0a7af80e02e8 gdb/testsuite/gdb.base/return2.c -38e6b730086b6ca25aa84434615bc4c8 gdb/testsuite/gdb.base/call-ar-st.exp -1e26cc7d363d5acffad06104525ee635 gdb/testsuite/gdb.base/signals-state-child.exp -256625bcc48a090ec4e5b85d1affa9bc gdb/testsuite/gdb.base/macscp2.h -cc357c9f5d19cb555338e47b4300008b gdb/testsuite/gdb.base/paginate-execution-startup.c -3510a5962c44ec9aeffdf4accdf9a4cb gdb/testsuite/gdb.base/int-type.c -88df53a7b68e618de3b02131cfa1d5c1 gdb/testsuite/gdb.base/ptype-offsets.exp -3703025da29612af7ad5be093842d9a4 gdb/testsuite/gdb.base/step-over-fork.c -1ca3824971e5221223b1c2b39ec5d6e0 gdb/testsuite/gdb.base/cond-expr.exp -49c33c6c63446cd836210cc745c554f7 gdb/testsuite/gdb.base/whatis-ptype-typedefs.c +463a38cc338219b32bf12747ac1cb349 gdb/testsuite/gdb.base/relocate.c +ee75ab2f4778f605d685a44e85e586af gdb/testsuite/gdb.base/gdbindex-stabs.c +21b1971a550e896a230833ab14dd2924 gdb/testsuite/gdb.base/dprintf-bp-same-addr.c +a7eec13082c0bf5a6bcf3bea3e8f143c gdb/testsuite/gdb.base/pointers.c +977cd97caa26b4dd9b2923bdad56c826 gdb/testsuite/gdb.base/linespecs.exp +e9470f3bf2840a34303f1e6a3dfab6a2 gdb/testsuite/gdb.base/store.exp +de29467a76ae612e8d9d575ce0c24d2e gdb/testsuite/gdb.base/code_elim2.c +408c4ccf5bc72bfda125988e5dc61882 gdb/testsuite/gdb.base/attach3.c +b98e7cf438aeb05c027a4bd495333a5e gdb/testsuite/gdb.base/skip-solib.exp +53323ac0e8a7fa31730523f3d407cd5e gdb/testsuite/gdb.base/bitfields2.exp +987fe0abe6ffa48df0f4cc7e70c06414 gdb/testsuite/gdb.base/random-signal.c +9e961fa6852667c1a7c77bb8bcf66d87 gdb/testsuite/gdb.base/siginfo-addr.exp +003d5765bfecbe3a36e3b97b4d32e92e gdb/testsuite/gdb.base/catch-syscall.exp +cf89ed29d12e59589cba2837fbbd7e22 gdb/testsuite/gdb.base/recpar.c +344f20439d5ef5d7304d80ab7ac2e46d gdb/testsuite/gdb.base/solib-weak.exp +b5a0ea5e8b43de277f7d9fa7e7b901d6 gdb/testsuite/gdb.base/recurse.exp +09ce1dbce67cf3bcb0b5ed101fdc58b9 gdb/testsuite/gdb.base/bigcore.c +9ff3713b2a7d0716fbe319784e9143e6 gdb/testsuite/gdb.base/shreloc.exp +082f599ec28eb739014eb3d54407eed8 gdb/testsuite/gdb.base/long_long.c +69cfc033a5c4715982651e4bfcc58ee3 gdb/testsuite/gdb.base/infnan.exp +3218e8ce36c9401c71134baed47d7b74 gdb/testsuite/gdb.base/display.exp +3d47854d0dc5febd4a61fb70923aea32 gdb/testsuite/gdb.base/solib-probes-nosharedlibrary.c +b29c169c123133c0dd225ebe26b58ea4 gdb/testsuite/gdb.base/solib-search-lib1.c +2aaff51696e0509abd6ec6523220175f gdb/testsuite/gdb.base/info-var.exp +8afb4e33e8319d467a7a012d5319369b gdb/testsuite/gdb.base/unload.exp +c30a34f32caf46acc61b4655eb421f9c gdb/testsuite/gdb.base/sect-cmd.exp +29f59475befb437f961b185cf4a9c3a6 gdb/testsuite/gdb.base/cond-expr.exp +8c95e7c6d057dbb71ec4977a61b2dcfc gdb/testsuite/gdb.base/solib-vanish-main.c +40adeef7f58fb12c8180c8104f341d38 gdb/testsuite/gdb.base/step-over-exit.c +0df0152fde64c183c1e6d82407efbc36 gdb/testsuite/gdb.base/scope.exp +7246641c080ff639908b61ba018b8653 gdb/testsuite/gdb.base/solib-symbol.exp +a50d1b828d250bb1ba53b656e5ae3216 gdb/testsuite/gdb.base/print-file-var.exp +70c7c22e844e22a3f98d5353e4573965 gdb/testsuite/gdb.base/long-inferior-output.c +43ed6d500935e6b3e1f6d60ef7830999 gdb/testsuite/gdb.base/asmlabel.exp 25dd3e940b7f381b4985683b64dff8cf gdb/testsuite/gdb.base/ss.h -adb228a757398e7f19a9360f6c21bac8 gdb/testsuite/gdb.base/signull.c -6817b87146c3a0985d5829cb8a5ea9a0 gdb/testsuite/gdb.base/break-interp-lib.c -15e9766bcac1503e77320d8a92a87867 gdb/testsuite/gdb.base/gcore-buffer-overflow.c -6543062128cf5744fd14a5d0d2525a7f gdb/testsuite/gdb.base/corefile-buildid.exp -020cc4490d045c911bf4ce33847b777d gdb/testsuite/gdb.base/step-bt.c -b67daf551d0b9a08e3fdacbd521df15c gdb/testsuite/gdb.base/step-over-exit.c -17155b728fada832a9acb3d4d25aceec gdb/testsuite/gdb.base/exprs.c -fbbeec2891ea913e85e52602f661a132 gdb/testsuite/gdb.base/bitfields.c -356cbdc50faeea0aeabfa1454073e7a2 gdb/testsuite/gdb.base/watchpoint-hw.exp -b65c7a03c75e9ebbdaaadaaa1a0ede65 gdb/testsuite/gdb.base/relativedebug.exp -9cd4ef136dfbee149a4056477283fa41 gdb/testsuite/gdb.base/grbx.c -5ba0bf47f5becaf0777454afb099df1f gdb/testsuite/gdb.base/return.exp -add890ce8cd81cc9772e57925c685e9b gdb/testsuite/gdb.base/attach-non-pgrp-leader.exp -c607d561877f63541c354784117266dd gdb/testsuite/gdb.base/gdbindex-stabs.c -1bcfc5673e5d039e5a64c291afdf5bb7 gdb/testsuite/gdb.base/info-types.exp -fccc00c4f86df8b2422cbc90669f2984 gdb/testsuite/gdb.base/jump.c -de68967ed409cfe90d92b8085c245f97 gdb/testsuite/gdb.base/infnan.c -9637eaef66535db897025e512d0eff7a gdb/testsuite/gdb.base/start.exp -952bebe12d8fbdf4ea4b9985ff92b6ee gdb/testsuite/gdb.base/bg-execution-repeat.c -65a0ee01df9a4a54fe6a51872b44d569 gdb/testsuite/gdb.base/attach.exp -784311926e57b79f018f0e381ab974b0 gdb/testsuite/gdb.base/restore.exp -441f1b99ce99332c9c58eed71fd92e11 gdb/testsuite/gdb.base/sepdebug.exp -61a55bc6ab6834627a6a7ae842a5346b gdb/testsuite/gdb.base/interrupt.exp -3b5ff1f729c40d9c4a98118ff08a9e6b gdb/testsuite/gdb.base/annota3.c -1d38ffdbb6088780a87b641e2f59974c gdb/testsuite/gdb.base/gdb11531.exp -68cdda6c2ef4ae643485c34020377335 gdb/testsuite/gdb.base/foll-exec.exp -a914f3815519de09ef6b6f5a63101b73 gdb/testsuite/gdb.base/whatis.exp -48f5ddbd295e9886be956eb352866487 gdb/testsuite/gdb.base/code_elim1.c -36b32513d4f80df34648a6542aebdbce gdb/testsuite/gdb.base/solib-weak.exp -612e6a39aee238b755c4ef2b41343a67 gdb/testsuite/gdb.base/comp-dir/subdir/dummy.txt -46c9cdc4fb056764215936fce388cfd9 gdb/testsuite/gdb.base/fullpath-expand.exp -97e29a0c6e94c61adfc698776dc706cf gdb/testsuite/gdb.base/pendshr.c -52df83951651c1ac31eda42f2b12e663 gdb/testsuite/gdb.base/jithost.h -2202ce0a4a1d88d6877708082b25c107 gdb/testsuite/gdb.base/ptype-offsets.cc -0cf3596afd3afb66e3f0e46e7adf86db gdb/testsuite/gdb.base/store.exp -6be076193a94ed54de6355ebdd930f9b gdb/testsuite/gdb.base/all-bin.exp -dea6c38940eb4bf9f03df8a1b75a07f1 gdb/testsuite/gdb.base/symtab-search-order-1.c -1a778050540d7e289738ffa963ae4812 gdb/testsuite/gdb.base/find-unmapped.exp -319bbc90499ecdc9ca4edc8eae301755 gdb/testsuite/gdb.base/infcall-exec.c -f981429bd49a99106703a484cb796b95 gdb/testsuite/gdb.base/prologue.c -895c7a86ac5beb4910b6dd5c2c09f662 gdb/testsuite/gdb.base/sepsymtab.c -b8144a88126ebb1c376cc5a62253a930 gdb/testsuite/gdb.base/hbreak-unmapped.exp -7a988a434e02f71e49fe66e377f79b63 gdb/testsuite/gdb.base/watch-vfork.exp -519cb07ad6a485a085207d4bf2ed892a gdb/testsuite/gdb.base/signest.c -1eb9d76d002a67930abb2e2109eb1ac3 gdb/testsuite/gdb.base/fixsection.c -ed60f94c1bea82a83124ab5785c0f2db gdb/testsuite/gdb.base/gnu-debugdata.c -80e24195e7f3e0b7ff9a3b71bfdc5456 gdb/testsuite/gdb.base/large-frame-2.c -844b03ea8586e94f2fe59e5e569b3f1f gdb/testsuite/gdb.base/dprintf-next.c -6aece486e55beeca01953900559d05be gdb/testsuite/gdb.base/interp.exp -17555e8f290f4aa3c2c9309ec85b1ab7 gdb/testsuite/gdb.base/info-shared.exp -7038960e377c67626aa221ae5ad03a9e gdb/testsuite/gdb.base/interrupt-daemon-attach.c -91244af2b0b2c9a42ffeff2089dd8b2b gdb/testsuite/gdb.base/catch-gdb-caused-signals.c -b69d61e4ff8c68b95fbd803d82a03315 gdb/testsuite/gdb.base/nostdlib.c -a85c5944767753b521e1e979f78c8979 gdb/testsuite/gdb.base/async-shell.c -cdbc9728f0fbf812b2b6dcbc0ef963d1 gdb/testsuite/gdb.base/skip.c -0aa8bdcb1cb4ddc5df56acc228cd1f5a gdb/testsuite/gdb.base/vforked-prog.c -beb7ddd8ac440e541b4ff7458987281f gdb/testsuite/gdb.base/ovlymgr.h -f5e4ec758898124d60b15454cecfa947 gdb/testsuite/gdb.base/included.c -e1839c14e6f1bd94cb6c91302d29a2b2 gdb/testsuite/gdb.base/sym-file-loader.h -f007165a99a63be073cc8e2f0a2aa5ff gdb/testsuite/gdb.base/reread.exp -53fd7c4ae365da80c369f44224670e12 gdb/testsuite/gdb.base/double-prompt-target-event-error.c -4484f33e0bb168ddb483d626a505690e gdb/testsuite/gdb.base/cvexpr.c -f442d05372c0edd8adc370395f9bc915 gdb/testsuite/gdb.base/run.c -968c67206f0d15781abbfa9a920de9c3 gdb/testsuite/gdb.base/break.exp -64764cbe22eb9dfd1935edb89179218e gdb/testsuite/gdb.base/sigaltstack.c -d200f9e4eae55486860de1c0ccf32d9c gdb/testsuite/gdb.base/func-ptrs.exp -7a3a76e3300cb948075d44f8aedb8704 gdb/testsuite/gdb.base/watchpoint-solib.exp -d50bb1e61bd0c9e33719d529192371dc gdb/testsuite/gdb.base/catch-fork-kill.exp -dd6eb6f16f2953cf5315fea9575556a0 gdb/testsuite/gdb.base/solib-nodir.exp -bd0008fe2ef225dda91bf6794ebd8968 gdb/testsuite/gdb.base/printcmds.c -5c20bf2e2a013d80d7aa94f23875cf98 gdb/testsuite/gdb.base/dump.exp -b54baf49dffb040defb97eaac03adc08 gdb/testsuite/gdb.base/multi-line-starts-subshell.exp -53da0c55dac3668bc360957a754f6982 gdb/testsuite/gdb.base/label.exp -4c490ef414eedb136a4d531c51ddb8e8 gdb/testsuite/gdb.base/included.exp -7e41eb6789521ca32a553a72a3931d6c gdb/testsuite/gdb.base/bfp-test.c -9a3ee0508906cf880c832d4d8ea0e976 gdb/testsuite/gdb.base/auto-connect-native-target.c -93e084ab4c5f0d8e8f208ea6cb98cd56 gdb/testsuite/gdb.base/async.c -8542ef70ad13f7d25527ac6211165e55 gdb/testsuite/gdb.base/shell.exp -fab2817079f87af135054309561e3c4a gdb/testsuite/gdb.base/call-rt-st.exp -80869e9a848915a154ae27f2244e0c49 gdb/testsuite/gdb.base/float128.c -dd7e4a1ad317533d2db26a3b9220964a gdb/testsuite/gdb.base/examine-backward.exp -f0ab712448347f7985a22e32bec8627b gdb/testsuite/gdb.base/kill-detach-inferiors-cmd.exp -7bb246b1e1d3f2c26d4a4cede6a8db68 gdb/testsuite/gdb.base/solib-overlap-main.c -99cfc65f2598d2c002db60eec74c5d05 gdb/testsuite/gdb.base/cond-eval-mode.c -04b9d2769e07f74232c1296fc22b12d2 gdb/testsuite/gdb.base/reread-readsym.exp -76152f6abcb788a5663454d363f4d93c gdb/testsuite/gdb.base/dcache-line-read-error.c -0730753853756bdaf0c3d1173f1f0b41 gdb/testsuite/gdb.base/interrupt-daemon-attach.exp -8cf22ed9b17f88c16a4c6fdfa8683a22 gdb/testsuite/gdb.base/step-break.c -5c687bf98ce42ed3a1c9c7d74e90466f gdb/testsuite/gdb.base/gnu-ifunc.exp -41eee294d22c78dca06c25c6b233a784 gdb/testsuite/gdb.base/frame-args.exp -7663957b31094f25f8c3ffde88764c7c gdb/testsuite/gdb.base/step-test.exp -d33c26e7fe91b33a5fbb8a6cacb67baf gdb/testsuite/gdb.base/stap-probe.exp -628edb7fee7fec35e22c8fcff55f82d7 gdb/testsuite/gdb.base/hbreak-in-shr-unsupported-shr.c -2786938824fa523cba9357b8c2c55715 gdb/testsuite/gdb.base/solib-display.exp -d52a38888b6f4cc6e265ccc773fab984 gdb/testsuite/gdb.base/reggroups.c -500d76c3fccaf89cfe1ab24b55e875e8 gdb/testsuite/gdb.base/pointers.exp -dc1c7b2d0d97de5e07f0046fca14d586 gdb/testsuite/gdb.base/macscp4.h -c766caa310bd7ca68f2eb747b3ba6cce gdb/testsuite/gdb.base/miscexprs.exp -813afc082051539daa008df3f1d552ec gdb/testsuite/gdb.base/c-linkage-name.exp -6b9f1f5e01cd8821befa4e6cbd77f525 gdb/testsuite/gdb.base/moribund-step.exp -7bd79d55957456f234758ace199f7f7e gdb/testsuite/gdb.base/eval-avoid-side-effects.exp -366c3cf8b67f704adf5c6e97ed7d312c gdb/testsuite/gdb.base/fork-print-inferior-events.c -8e2d74278b81f1bb7511bffe3cb19cb8 gdb/testsuite/gdb.base/overlays.exp -054e5bab0212496f07abaafa7c27209c gdb/testsuite/gdb.base/signest.exp -4c664aa20a95e6ed9eac3ee8fb8c06d7 gdb/testsuite/gdb.base/gdbvars.c -504c18755f9da613ed2ecfcf59759e04 gdb/testsuite/gdb.base/long_long.exp -d392b79761c11927c152f9a9a75db51d gdb/testsuite/gdb.base/sepsymtab.exp -4bfea6bd7046ffe2a21880b1085158b9 gdb/testsuite/gdb.base/gcore-buffer-overflow.exp -c1f4a973818bb3f978d597c6a982acc9 gdb/testsuite/gdb.base/symbol-alias.c +5e9505c224c5d0240075a006ebd6d555 gdb/testsuite/gdb.base/source-nofile.gdb +5ebc932195fe2c1a384e71146bcaa78c gdb/testsuite/gdb.base/gdbvars.exp +da9e54db92e7aaf1324bd04bd68e236a gdb/testsuite/gdb.base/watchpoint-unaligned.c +1d1d83ef535e5c2128f24d56fcfa1c46 gdb/testsuite/gdb.base/return-nodebug.exp +114dbd4e838cbb17f24fefbf077d1bbd gdb/testsuite/gdb.base/catch-gdb-caused-signals.c +6a5a8f942c77332fc414aa1cc572a628 gdb/testsuite/gdb.base/decl-before-def-def.c +93c5444acdb1fb7d1ed472ec48276fce gdb/testsuite/gdb.base/bad-file.exp 5fd85517a68f7b9882baaae8c10832b3 gdb/testsuite/gdb.base/langs1.c -050269a87805b526188c886bf4534727 gdb/testsuite/gdb.base/watchpoint-stops-at-right-insn.c -4353aa45ddda9e665654d44bf2e21b49 gdb/testsuite/gdb.base/stap-probe.c -188e590f63111cfcab612b8674bbeeba gdb/testsuite/gdb.base/break-idempotent.c -7b6a382c035112bf3da21edf826c9817 gdb/testsuite/gdb.base/offsets.exp -1bf1b33fdbb158d9b4ddbdac6b445770 gdb/testsuite/gdb.base/watchpoint-unaligned.c -e39334cd3895b25c52ce8a336f4117e7 gdb/testsuite/gdb.base/auto-connect-native-target.exp -f7d95e84a3d64ec6b0265b164e0d6eab gdb/testsuite/gdb.base/bp-cmds-continue-ctrl-c.exp -7822191fb73e9fdc877eec782bc5b8f6 gdb/testsuite/gdb.base/list.exp -21a5a3560ed606625fc52cfcfba2c801 gdb/testsuite/gdb.base/break-always.c -5709da556249f2b3a88a59333b7e517b gdb/testsuite/gdb.base/break-inline.c -faf5a6e7169ffb6369f68aab29c4f8b8 gdb/testsuite/gdb.base/dso2dso-dso2.h -1f2d04b9885119ff0e6a5cb65f167ea5 gdb/testsuite/gdb.base/help.exp -a93940ac1dc7a5447eb085e0de67f1e0 gdb/testsuite/gdb.base/gcore-relro.exp -f68ad8a368957bf80729d300aeec74d5 gdb/testsuite/gdb.base/corefile-buildid-shlib.c -f34707e00f796e7b4d80beadc3841eac gdb/testsuite/gdb.base/info-macros.exp -d47cf600366a984537fe500bf1b0e33e gdb/testsuite/gdb.base/miscexprs.c -3a9fc265ee9e43b75e6985d4a440539e gdb/testsuite/gdb.base/enumval.c -aa8728241dcfed640e26055ff104c552 gdb/testsuite/gdb.base/gdbindex-stabs.exp -91bdfac506122ea808b1e5b819a873e6 gdb/testsuite/gdb.base/startup-with-shell.c -735e92fd7240e26d9ff67e3a399505df gdb/testsuite/gdb.base/frameapply.c -8303a9f6dd60098da53ed00cfd4be1d2 gdb/testsuite/gdb.base/included.h -854f10afe4bd9f8244ceb4d4d86802fa gdb/testsuite/gdb.base/sigall.c -26b9788262aa27bd72f35522746b8a46 gdb/testsuite/gdb.base/info-os.exp -249dce02bb9e113f8612e0d1b40e90ff gdb/testsuite/gdb.base/find-unmapped.c -acdd8b569550a43ad098dfb697ae80b3 gdb/testsuite/gdb.base/psymtab.exp -00af3c8101cf6365fdc77e6965d36026 gdb/testsuite/gdb.base/jithost.c -ef1250cc26ac61b2004c6cdb3bafedfc gdb/testsuite/gdb.base/wrong_frame_bt_full-main.c -999216dab71fa15c9497b0dc3b54b56e gdb/testsuite/gdb.base/noreturn-finish.exp -b3e116b8765d819a36b0ecef64c45737 gdb/testsuite/gdb.base/noreturn-return.exp -115bc945f56303a083ad4020a80b5cbe gdb/testsuite/gdb.base/checkpoint-ns.exp -fe0057308e7c0e7ab543e6d3eec7fc82 gdb/testsuite/gdb.base/valgrind-infcall.c -918ed9a1c28c0c3cd7b3a98cee1d1e8b gdb/testsuite/gdb.base/async.exp -9a32bbefb111c5c3198cf248bb5da5b8 gdb/testsuite/gdb.base/charset.c -45d042261536219b5529f4644e536121 gdb/testsuite/gdb.base/start.c -6f4837bae4e626ce4566cce03696ae48 gdb/testsuite/gdb.base/reread1.c -2d7fac390e2ad0c22591b9c269005c48 gdb/testsuite/gdb.base/style.c -1d30b0a35d55c8c2c0d1717fbba33216 gdb/testsuite/gdb.base/catch-syscall.c -9bbe6a3c29591be8afcb8244579b0cd8 gdb/testsuite/gdb.base/vla-ptr.exp -8533b8bfabdff54d9aa61960780ad865 gdb/testsuite/gdb.base/dprintf-detach.exp -3047bb2642827b0275f9d2afcc820157 gdb/testsuite/gdb.base/watchpoint-cond-gone-stripped.c -ae2d732689a73f4dbb76ad62dc7f8849 gdb/testsuite/gdb.base/argv0-symlink.c -a95da9b5cacb77fbcc8a8f466b736177 gdb/testsuite/gdb.base/print-symbol-loading-lib.c -8b61ecca265106dd212afeb32628b69d gdb/testsuite/gdb.base/condbreak-call-false.c -fee2a0575734fd5a9780e80f09e53d4d gdb/testsuite/gdb.base/solib-search-lib1.c -b263e085b920ccae2568157fcc33189f gdb/testsuite/gdb.base/psymtab1.c -32058866957907434cc47febab268a93 gdb/testsuite/gdb.base/longest-types.c -27610589573fd5d624bf4c270d87453a gdb/testsuite/gdb.base/jit-exec.exp -8da82280b0453f29fdd18e8af9368e86 gdb/testsuite/gdb.base/solib-search.exp -cb473f0f836b19ccdb152db9e5e33278 gdb/testsuite/gdb.base/step-break.exp -17d4b4d0b179ce10d66602f4afd36da1 gdb/testsuite/gdb.base/dprintf.c -17165880c7ef8060a191d786503016a5 gdb/testsuite/gdb.base/floatn.exp -3194627f71366ab1afd4bf139ae85327 gdb/testsuite/gdb.base/write_mem.c -20adec1a2db6a70b8733c96e1d9c434c gdb/testsuite/gdb.base/call-signal-resume.exp -9e51f4f6b34f932ef94af868fc59665b gdb/testsuite/gdb.base/dso2dso-dso2.c -6a645cdc832f7cb92410df66b7344ac8 gdb/testsuite/gdb.base/readline-ask.inputrc -fe5009ce8b19b723e7e6deb3c0ca9a0e gdb/testsuite/gdb.base/gdb_history -b9530ca9dfb69a027f295de039e94cb9 gdb/testsuite/gdb.base/restore.c -37ccb653209a876e392cb924f81a983d gdb/testsuite/gdb.base/cursal.exp -dfaa3efaa2e465349675b75c85bd7a4d gdb/testsuite/gdb.base/shmain.c -62134739f4713ae2d6ef9199c2beebe9 gdb/testsuite/gdb.base/display.exp -8c66012ef95b99d4a8d64e00dca5b7ec gdb/testsuite/gdb.base/linespecs.exp -73f290869eede5094c5599a5e749a585 gdb/testsuite/gdb.base/disasm-optim.h -7b792f2c9c7648acd6ad4e57c782dee0 gdb/testsuite/gdb.base/watchpoint-solib-shr.c -8bcd004b3026f1435644e8682900f4b1 gdb/testsuite/gdb.base/savedregs.exp -fb63858acee644c4acf2a0541d08583e gdb/testsuite/gdb.base/hashline1.exp -e12d08c5831f54da9c229ffd8f526508 gdb/testsuite/gdb.base/unloadshr2.c -f864a48f3aaa55b182caf0985f4ed363 gdb/testsuite/gdb.base/foll-exec.c -73e59b5b229074b824f21f0f6c9c805b gdb/testsuite/gdb.base/solib-vanish-lib1.c -3d6a8b2856abad64c0be6c64cf019ffa gdb/testsuite/gdb.base/nofield.c -4972878f0cf9c0e17c69b21246baa336 gdb/testsuite/gdb.base/gdb1821.exp -f356ff50643e59000ef3d9f24089698b gdb/testsuite/gdb.base/psymtab2.c -1cf2350a7aef0cdf74d59c30cf0cdebf gdb/testsuite/gdb.base/testenv.c -01e955fa094345ba4cf798f6ed6ab556 gdb/testsuite/gdb.base/info-os.c -d63c60dae095af6ad6c7b66a5e829110 gdb/testsuite/gdb.base/jit-main.c -08e153541346c6c11893fcafaa269e4f gdb/testsuite/gdb.base/gdb-sigterm.c -32c8b5cf740f596c07b90a8f6124a204 gdb/testsuite/gdb.base/bad-file.exp -d3fee74c1141c2fabf9d484cae2dcabb gdb/testsuite/gdb.base/duplicate-bp.exp -dae887ca564a1f9250b94bf8deaa6c0a gdb/testsuite/gdb.base/global-var-nested-by-dso.exp -61d1d6e44805e40039cda3311c256f3b gdb/testsuite/gdb.base/ptype.exp -f2dc5fd09fde26218bb03ba7bfdaf8d8 gdb/testsuite/gdb.base/sep.c -cf406ae779db3661f71f419832395137 gdb/testsuite/gdb.base/all-architectures-3.exp -77fa94daa0e86e640f9a3978f690ccdf gdb/testsuite/gdb.base/recpar.exp -68951dcab80ca2bcb674b9a0eea2b650 gdb/testsuite/gdb.base/ldbl_e308.c -229fd9eda361df40b1aab818ade03e4b gdb/testsuite/gdb.base/watch_thread_num.exp -61cbf7a59748d370a6aff833487271ac gdb/testsuite/gdb.base/msym-lang.exp -787d9e99d66a846977a956e32162c388 gdb/testsuite/gdb.base/reread-readsym.c -3645f6ea1222e0fd51703e6bf48d5b55 gdb/testsuite/gdb.base/global-var-nested-by-dso-solib2.c -d56e799021816ff00a38acb1d3f5ad2d gdb/testsuite/gdb.base/coredump-filter.c -3f8b5e0d671bb41f8261361c9808db6c gdb/testsuite/gdb.base/kill-detach-inferiors-cmd.c -32e0da9c007cad0b8420dfca6df27447 gdb/testsuite/gdb.base/bp-permanent.exp -0cbdf9037e2e95e7b0ba49ac8d3d2ad5 gdb/testsuite/gdb.base/break-include.c -33fe0a83a1d3211eadede6c806c942af gdb/testsuite/gdb.base/shlib-call.exp -9029c1d09eeceb5ebe7721d283763176 gdb/testsuite/gdb.base/hashline3.exp -300341fe836af37adf2f3064285022aa gdb/testsuite/gdb.base/twice.c -2d61f079ed7f8deb65fcbdb87a907faf gdb/testsuite/gdb.base/killed-outside.c -b9cbbdcb8bbb62483d10107a5b75b780 gdb/testsuite/gdb.base/nextoverexit.c -1d56523ef709d8a038ad295cb2fc978e gdb/testsuite/gdb.base/skip1.c -18783bdd8defc76cf44fafe1844c89e2 gdb/testsuite/gdb.base/unload.c -5c6c88e6c9bdb68bd97e92571cc1bb1d gdb/testsuite/gdb.base/varargs.c -83b4147d5cfab4b94796513c48e2ce03 gdb/testsuite/gdb.base/watchpoint.c -05e78d0cc166ba30c8f5f9e4836b8205 gdb/testsuite/gdb.base/random-signal.exp -2591a845036aaac1a29869d81f63a1dc gdb/testsuite/gdb.base/catch-follow-exec.exp -c52473d5e044fa485081940db027a986 gdb/testsuite/gdb.base/load-command.c -d1c66c4816d224dc4cbf7020bad775ae gdb/testsuite/gdb.base/auxv.c -f56f7342586edaf2858143313d7f06c3 gdb/testsuite/gdb.base/completion.exp -6be7f670953e213bafe7773767de72e2 gdb/testsuite/gdb.base/hbreak2.exp -66a6a6622ea4b4e053e20712dc087fd5 gdb/testsuite/gdb.base/freebpcmd.exp -f1d52d8bc73427590190f15899c5e292 gdb/testsuite/gdb.base/sigstep.exp -935668abc5388a1413e121f20c42af33 gdb/testsuite/gdb.base/huge.c -5ad2cb19c8ffec23b18989ae32ce09ad gdb/testsuite/gdb.base/call-signals.c -bb3457acbf3f36d3cceb9b7ddc7255d5 gdb/testsuite/gdb.base/set-cwd.c -fc8f8d78a9595e4c7f8ed9b29b32f031 gdb/testsuite/gdb.base/watch-bitfields.exp -2467e991a0d6308b6fac5d6bdad529e2 gdb/testsuite/gdb.base/run-after-attach.exp -5ba2f3fd778c72a7dbe113e1962b2b6c gdb/testsuite/gdb.base/langs2.c -b132f64cedc53a235f0cb896de08cd0f gdb/testsuite/gdb.base/stack-protector.exp -0fec50da02e7cd3be0581d9269e8b27b gdb/testsuite/gdb.base/pc-fp.c -e89b1ecf3c678205ba755bf407f25b2a gdb/testsuite/gdb.base/gdbhistsize-history.exp -99915aae3f7ea40d71de723dcabc3743 gdb/testsuite/gdb.base/asmlabel.exp -200ddf0674326a22411149a2be1f651c gdb/testsuite/gdb.base/gdb11530.c -6b993bcc6ef819bdd34f76453e24975e gdb/testsuite/gdb.base/step-bt.exp -537839e9559d43f35f31e9cf67b9d29e gdb/testsuite/gdb.base/watchpoint-hw.c -fca1bdb21dfab864f1d2375dec115db9 gdb/testsuite/gdb.base/info-shared-solib1.c -207ffb1ae8224ba666b332c7133bbaf8 gdb/testsuite/gdb.base/many-headers.exp -0dcab0ddaa950320f8549220b6416544 gdb/testsuite/gdb.base/sigstep.c -730e53c3a828de63df5c6dfc1ead6459 gdb/testsuite/gdb.base/bitfields2.exp -83cfb0bdb4754888f7e7aaab1713e2ab gdb/testsuite/gdb.base/remote.exp -baf4682166adfd5b6d80f670e700ca7e gdb/testsuite/gdb.base/execution-termios.c -72a212c1c2b2a2a7b31c9fe2eac51960 gdb/testsuite/gdb.base/siginfo.c -bb178345808d2f4401ae9f312ab42cfc gdb/testsuite/gdb.base/c-linkage-name.c -8e730d4cabc338f1f76259d676d7191c gdb/testsuite/gdb.base/ending-run.c -2137f7d1a44d8b4205ce9450488a7e00 gdb/testsuite/gdb.base/ena-dis-br.exp -ce86241c3a807f73ac48f28bea0a980c gdb/testsuite/gdb.base/watch-read.c -a3d96ef7990318e5cf9698af2038f4d1 gdb/testsuite/gdb.base/watch-vfork.c -cf948face5ee4ef3649d32bc8c7651dd gdb/testsuite/gdb.base/new-ui.exp -1e8e1d6f77672aa0cf4fa22cfff05a2f gdb/testsuite/gdb.base/info-types.c -17b499867d26457d3e2033dd7a10c02b gdb/testsuite/gdb.base/eval.exp -e9a3a353fc092a7e385908451a1ec1a6 gdb/testsuite/gdb.base/offsets.c -4e8db766c29c897328128f08686e3112 gdb/testsuite/gdb.base/enum_cond.exp -84d5e621248a281815047726cca6d507 gdb/testsuite/gdb.base/step-over-no-symbols.exp -f034f1ca7f9c36fa1b2e0a6a76f42c0b gdb/testsuite/gdb.base/bt-selected-frame.c -c31dae280d372745c71371e5d5e9ad26 gdb/testsuite/gdb.base/hashline2.exp -252b3cb724f0fc4088f841d9bab112e3 gdb/testsuite/gdb.base/share-env-with-gdbserver.exp -efead3e12659a9c703a5a91c66a396d7 gdb/testsuite/gdb.base/exe-lock.exp -f2745640192d313c7326993366b35bd8 gdb/testsuite/gdb.base/gdb1555-main.c -1ebebe342014b0e0e96a05c701c9b0b2 gdb/testsuite/gdb.base/solib-disc.c -3d5b7c81c92ca0272189f0d9bd58c0fe gdb/testsuite/gdb.base/gcore.c -f54ba65953c535fb7077e696ae7a1c58 gdb/testsuite/gdb.base/weaklib2.c -3dd1d768160cdc4ae242deff75e4a22d gdb/testsuite/gdb.base/solib-weak.c -2b866eb6e084c3e6e0cf002297b95d85 gdb/testsuite/gdb.base/pr10179-a.c -feb85c9a7194e0938dc615183ee1762c gdb/testsuite/gdb.base/vdso-warning.exp -1b745365d2eea541c5d345d80fb8d5db gdb/testsuite/gdb.base/sym-file-loader.c -793c073a769c82a427704f14367e00f3 gdb/testsuite/gdb.base/break-probes.exp -39c46df938bc22c798f2a4f44b169982 gdb/testsuite/gdb.base/checkpoint.exp -30a7824f0fc8813c0db0c0efcec9463b gdb/testsuite/gdb.base/info-shared.c -be46c2ce5bb75c1410e6ddd3568603bd gdb/testsuite/gdb.base/signals.c -d9c7a585205316ab489648dd9bc826b6 gdb/testsuite/gdb.base/attach-pie-noexec.exp -d2a84294e81c3f6817a38f51c4543815 gdb/testsuite/gdb.base/gdb1090.exp -82b851ef706acd78f4c33f9a3c2cc7be gdb/testsuite/gdb.base/execl-update-breakpoints.exp -0eeafba5e9fd394aec6989a060c48e8d gdb/testsuite/gdb.base/callfuncs.exp -9c8dc61ea98cb04e5cfe85148b0aca78 gdb/testsuite/gdb.base/infoline.exp -0c181b97b69be9288450900d5e8d2d13 gdb/testsuite/gdb.base/infoline-reloc-main-from-zero.c -d5326119ea468126103e5e54d8e0c1b9 gdb/testsuite/gdb.base/unwindonsignal.c -5a6d1bf067dada153c42924f17fab563 gdb/testsuite/gdb.base/dprintf-non-stop.c -6d5133a93062b927f96e6ba714fc588e gdb/testsuite/gdb.base/dprintf-non-stop.exp -da89fb640f91141fd4e1f77297069461 gdb/testsuite/gdb.base/step-resume-infcall.c -743e9f4a8495c29898caed242e7dd614 gdb/testsuite/gdb.base/savedregs.c -cc19ee1eb79fe010ad5bab989640c407 gdb/testsuite/gdb.base/overlays.c -175e128718761266cfa9cb316efb9a72 gdb/testsuite/gdb.base/breakpoint-shadow.exp -48bb27c9e6e194d4c9198c93d50ff627 gdb/testsuite/gdb.base/step-over-vfork.c -1ec535da27d5c94136da341efc741358 gdb/testsuite/gdb.base/structs.exp -ec994b128de3d1d7d19af797d160ea89 gdb/testsuite/gdb.base/filesym.c -347089260a5a6148aaefc658fecf583b gdb/testsuite/gdb.base/catch-signal.exp -dca1ff2f2182ef7cffb05a3df158ba5f gdb/testsuite/gdb.base/line-symtabs.exp -c2d1f53b0f17dc85776513b999c4533e gdb/testsuite/gdb.base/permissions.exp -0fbc0a9f8dba4b51222b23ec0712d1cb gdb/testsuite/gdb.base/default.exp -b341063cd0628cdfe0eb0dd52cb27741 gdb/testsuite/gdb.base/sect-cmd.exp -3f8b5e0d671bb41f8261361c9808db6c gdb/testsuite/gdb.base/run-after-attach.c -0562d36539f32bd3817642178983cd1f gdb/testsuite/gdb.base/dtrace-probe.c -a40e83a9545a716630831b8a0c0e202e gdb/testsuite/gdb.base/watchpoint-hw-attach.exp -35ce0d1e8a6cc6a278649ec7464d8a1c gdb/testsuite/gdb.base/m32rovly.c -aca8b8e9c2be45f31c8efb51e210ffc6 gdb/testsuite/gdb.base/write_mem.exp -9ef52f83cae41268804fc991b8c1306d gdb/testsuite/gdb.base/endianity.exp -7c1c733a99a0b0de6949e5a7346b3dc8 gdb/testsuite/gdb.base/realname-expand-real.c -339484700b225598fa02a41364327e40 gdb/testsuite/gdb.base/with.c -d737dde4bf7fe921f1e60363780dfc16 gdb/testsuite/gdb.base/checkpoint.c -69512d5e55449a475bba758cdb54bc98 gdb/testsuite/gdb.base/assign.exp -f1fa5a1d4d859cb984f4fc60ea0473d0 gdb/testsuite/gdb.base/all-architectures-5.exp -37f28626d237ebc7f207dd24af19ae1c gdb/testsuite/gdb.base/annota3.exp -d3590e1a3f2e7b39232672e9c559c50b gdb/testsuite/gdb.base/siginfo-obj.c -0dc1001e0dd68c2b47305f9b58b723d8 gdb/testsuite/gdb.base/set-inferior-tty.exp -e97692b1e8aa59fb622c3636e877c35e gdb/testsuite/gdb.base/shr1.c -753418d57b8958d6ac059a23dc8f3cf3 gdb/testsuite/gdb.base/print-file-var-lib2.c -2cc34c1e1bb1765abd9f3044064e92a6 gdb/testsuite/gdb.base/complex.exp -99be6885249635c6255c321f25d1fa51 gdb/testsuite/gdb.base/attach-wait-input.c -f64aafd3e830e8f96d5cec27d1be94ed gdb/testsuite/gdb.base/many-headers.c -cf879c9b16c2096fb4f9d6021bb54eec gdb/testsuite/gdb.base/command-line-input.exp -b43341aeb5e325a48b3f59743054a56a gdb/testsuite/gdb.base/morestack.c -378c678d95a34033bc8bd78b1495dcb7 gdb/testsuite/gdb.base/complex-parts.c -b139e6c22a0313e8bf656fa2869724a2 gdb/testsuite/gdb.base/recurse.exp -8e10bd81c9b44c0cc3f6339eba6969cf gdb/testsuite/gdb.base/coredump-filter-build-id.exp -5417d388520cad2463365c292cacecee gdb/testsuite/gdb.base/debug-expr.exp -450a1da41a5c13ed23211a6f1b9a30bd gdb/testsuite/gdb.base/list0.c -bf8112ff3d374e416b659229b6ead795 gdb/testsuite/gdb.base/consecutive-step-over.exp -da37fccc8ab45a5bc6b456304ccd5a1e gdb/testsuite/gdb.base/nodebug.exp -13993272a987e952500992d94d53a68b gdb/testsuite/gdb.base/arrayidx.c -964eef59030ad45f8e4e9d654e051ae5 gdb/testsuite/gdb.base/sigall.exp -66149264379637711a45fba43b1dc40e gdb/testsuite/gdb.base/siginfo-addr.exp -6a8470bb47b11f4807f85704bc1453c2 gdb/testsuite/gdb.base/dmsym_main.c -9b1d477921df086027c48c23d6d5bc51 gdb/testsuite/gdb.base/prologue-include.c -0a8368a367cbbc9286bcb24457eba451 gdb/testsuite/gdb.base/whatis.c -9f00d388c02dc129828f445f7e5c5076 gdb/testsuite/gdb.base/sigaltstack.exp -4ff3418362056aac5f2fd4ab27806fbb gdb/testsuite/gdb.base/info-macros.c -67794d1454fb26ef6cb9352928434e2c gdb/testsuite/gdb.base/memattr.c -5f24a74b259f5cb99c0a371b9b2772c5 gdb/testsuite/gdb.base/pr10179.exp -1a0f21bf2086cc07f133ef8c96b088c6 gdb/testsuite/gdb.base/fixsection.exp -b6ccb3c80720c6dc7c26437399dd3b49 gdb/testsuite/gdb.base/gdbinit-history.exp -cbb4cfab700a1ee38de230f891ce6166 gdb/testsuite/gdb.base/complete-empty.exp -d87a5f29804dcef9cefa0262f2426215 gdb/testsuite/gdb.base/sepdebug.c -6b272786a4eb5e45714b8287864fd419 gdb/testsuite/gdb.base/large-frame.exp -2d76d5357eeeea6f93fda1adda66e0a5 gdb/testsuite/gdb.base/utf8-identifiers.c -91716d5a85e5bfa3235b6fe7850982f9 gdb/testsuite/gdb.base/annota1.exp -ab198a8709bbda53b4de7f49419f09b6 gdb/testsuite/gdb.base/commands.exp -43b96cf30cb9310b0e1e28682ef51fba gdb/testsuite/gdb.base/catch-load-so.c -524863969a68dd54368639dd7d779398 gdb/testsuite/gdb.base/term.c -3a654282a8c6ca3db9d214e518ae6317 gdb/testsuite/gdb.base/large-frame-1.c -b04711e0193c5fa89b1c66065eb28a78 gdb/testsuite/gdb.base/style.exp -f8138968f8ac3d27c00e45a518f56ac3 gdb/testsuite/gdb.base/watchpoint-reuse-slot.c -8b3aa9dcb73b018bc0e638d01bb82f5f gdb/testsuite/gdb.base/options.exp -45116f80f093464fbcad98579d8d8e74 gdb/testsuite/gdb.base/bitfields.exp -efb0e75b752bd34e74b99d76f098d64b gdb/testsuite/gdb.base/code-expr.exp -ee86e13838df56b9a8a42f2bf5559a6c gdb/testsuite/gdb.base/hook-stop.exp -f86ec32b12ddb08ff633b5cdb7ba7054 gdb/testsuite/gdb.base/label.c -0368073668a9b7ccd98e8cf018535cad gdb/testsuite/gdb.base/utf8-identifiers.exp -3e526abf1fd083a77209abd01fd43034 gdb/testsuite/gdb.base/duplicate-bp.c -3152fd23e90c1c2ef25abb164840eee9 gdb/testsuite/gdb.base/paginate-inferior-exit.exp -3f1823c1a46d4e6b3910c487cb485c51 gdb/testsuite/gdb.base/break-caller-line.exp -dbfb48437b72f1f308fc8bdc219eae78 gdb/testsuite/gdb.base/info_minsym.exp -b5d43b9af96a10f0b6d7e5f6214e3259 gdb/testsuite/gdb.base/macscp.exp -86180be0cb273cf961cb31bbc51ae337 gdb/testsuite/gdb.base/dfp-exprs.exp -20a18670c02dbdc7ad4eaf06d5ddbe07 gdb/testsuite/gdb.base/ldbl_e308.exp -b4406446a3c27c0e68b5d761b4798d4c gdb/testsuite/gdb.base/dso2dso.c -35ff54f4810df7f91ff84485eb5c2917 gdb/testsuite/gdb.base/set-inferior-tty.c -cf619e6a51a990a4f9b582e67826e28f gdb/testsuite/gdb.base/symtab-search-order.c -f5eb3535f16f305ba0a872b5f27909f0 gdb/testsuite/gdb.base/structs2.exp -a47d2104e7b78c2e746e7970ff757432 gdb/testsuite/gdb.base/eu-strip-infcall.c -f484128bf0e68c27c3fcbf758e60baa5 gdb/testsuite/gdb.base/setvar.c -17b7995c99a9d2fc9aae634bbac45c3d gdb/testsuite/gdb.base/info-var.h -19ab93ec83c137229876a60aa1db0a7c gdb/testsuite/gdb.base/break-fun-addr.exp -2406a45b324132cfb73e7e0220325d56 gdb/testsuite/gdb.base/symlink-sourcefile.c -9004dd1f99acb348ff531f91d8d6c818 gdb/testsuite/gdb.base/watchpoint.exp -41346277feb587bdd0ad989a3906edc8 gdb/testsuite/gdb.base/until-nodebug.exp -38e4107fa7645fe12981a087c8f4dbc4 gdb/testsuite/gdb.base/history-duplicates.exp -6ea11a6816e123c2d1576a74d861c8d8 gdb/testsuite/gdb.base/maint.exp -6f896acb8015c0a434b0aa4f3aea83ac gdb/testsuite/gdb.base/pc-fp.exp -d54c153a61458184027a98d0a2f6cc8e gdb/testsuite/gdb.base/hbreak.c -e57306451b92f5d39b3a2a7afb0a2132 gdb/testsuite/gdb.base/batch-preserve-term-settings.exp -0bcdd52d0e17acd21bb1aa14fba1ed67 gdb/testsuite/gdb.base/wrong_frame_bt_full.exp -557ab479777f8fd116499e7621978ea7 gdb/testsuite/gdb.base/sss-bp-on-user-bp-2.exp -0abec426bf3ff52d10c0811a5d4ff057 gdb/testsuite/gdb.base/source-dir.c -e94aa3a4b1a0cfb0b9a49eba2886e54d gdb/testsuite/gdb.base/arithmet.exp -0c1576107a61f601774aab1564fb6e6a gdb/testsuite/gdb.base/fileio.c -7c22c136a4e25b1ee00d8ad1318ec58f gdb/testsuite/gdb.base/bp-cmds-continue-ctrl-c.c -45abd92b489c5fc249984feab5e6b213 gdb/testsuite/gdb.base/foll-exec-mode.exp -80e2701913fc015cc611d9d5f6ca27f7 gdb/testsuite/gdb.base/gcore-relro-main.c -a18fbedf8c94043b548fa7fe145d1154 gdb/testsuite/gdb.base/constvars.exp -4f0f5a09d75c5c71c1376744daf01e66 gdb/testsuite/gdb.base/gdb1821.c -63fa65ba47cb2350b84ddd9a07369fc1 gdb/testsuite/gdb.base/paginate-bg-execution.exp -787d9e99d66a846977a956e32162c388 gdb/testsuite/gdb.base/server-del-break.c -836d1f12aac10661489260e2efa746a1 gdb/testsuite/gdb.base/stack-checking.c -a09a9b0a3de5f84edfdae17074dfddd8 gdb/testsuite/gdb.base/subst.exp -39b622c9a1077a886257e5cbd462b538 gdb/testsuite/gdb.base/setshow.exp -15c07cdf4c057638fb908ed035a47a3f gdb/testsuite/gdb.base/save-bp.exp -aab57c2475c7a68bcbe02aa9ea483f34 gdb/testsuite/gdb.base/new-ui-pending-input.c -04ba6b7153273e3975a12ee7e7dbb341 gdb/testsuite/gdb.base/break-main-file-remove-fail.c -d8054cb60f9f7853d6c9c0feed6a2235 gdb/testsuite/gdb.base/break-idempotent.exp -33c89334912667c4e93fd17325173071 gdb/testsuite/gdb.base/foll-exec-mode.c -dbb902d1e407aeebc26be468e6e5a65e gdb/testsuite/gdb.base/line-symtabs.h -94d00f14e418408e2a5a109c42436202 gdb/testsuite/gdb.base/gdb11530.exp -1f1f22ddba19b0c65e752209d4fcca9e gdb/testsuite/gdb.base/symtab-search-order-shlib-1.c -7f28d73c17701e2c73f1e52b303f8221 gdb/testsuite/gdb.base/exec-invalid-sysroot.exp -5c241c4e8c0ddab241a6761f4b3c5102 gdb/testsuite/gdb.base/endian.exp -f2f015c0202090e6ed8db476e63d4163 gdb/testsuite/gdb.base/continue-after-aborted-step-over.c -4fa533dfe1c0952b0fc6523315563b6d gdb/testsuite/gdb.base/share-env-with-gdbserver.c -1da05ab0fd5acabc8d01aec2de504ac4 gdb/testsuite/gdb.base/jitreader.c -b41f9857be8729f8294c4c881c667991 gdb/testsuite/gdb.base/mips_pro.exp -70a13c7415746f2f1e4f33765514b2cf gdb/testsuite/gdb.base/fortran-sym-case.c -ce787def4e6a5173f5dbd7a283c8be06 gdb/testsuite/gdb.base/vla-datatypes.exp -f4d5ee2d14d5e1f4b9e4807c0357b1d5 gdb/testsuite/gdb.base/watch-cond.exp -5edca9f9334af3e5ee595a686a0da693 gdb/testsuite/gdb.base/all-architectures-6.exp -a95da9b5cacb77fbcc8a8f466b736177 gdb/testsuite/gdb.base/gcore-relro-lib.c -9f1eb24c5e6c855fe3d75d75abc46aa1 gdb/testsuite/gdb.base/advance.c -2f4c03125084bdb7cab30038dd247f7a gdb/testsuite/gdb.base/dup-sect.exp -704e594b7e5bc58319292df2b341da4a gdb/testsuite/gdb.base/jit-solib.c -70b7e14636d74f047da9e4dc7c9ec22f gdb/testsuite/gdb.base/symfile-warn.c -cc357c9f5d19cb555338e47b4300008b gdb/testsuite/gdb.base/paginate-inferior-exit.c +f0b892a3a083e25b33138a2a420df296 gdb/testsuite/gdb.base/startup-with-shell.exp +5523273c130dfa2e9370da33d887d2ee gdb/testsuite/gdb.base/attach2.c 79696e315e518bcff76ca31d67e55856 gdb/testsuite/gdb.base/remote.c -69e6bcc61c69d8ac240651d642049e4c gdb/testsuite/gdb.base/relocate.exp -8424b84e4cb4b75d96aff412fc74991e gdb/testsuite/gdb.base/pending.exp -e72188df91d38170ec1aca98c41f64a7 gdb/testsuite/gdb.base/list0.h -e2939df2c54d70c41da4162645570ab8 gdb/testsuite/gdb.base/info_qt.c -9dad1ba2250f1146131e279dca429fc1 gdb/testsuite/gdb.base/source-nofile.gdb -df92eb66209e6e08253e210469bc27d1 gdb/testsuite/gdb.base/dso2dso.exp -61d1c25b918b9462a9b3cb6e7c7b7e88 gdb/testsuite/gdb.base/range-stepping.c -892f58c328a18b9575793e9f85493abb gdb/testsuite/gdb.base/func-ptrs.c -67ceb27bf818d3f6da08eafc5153690d gdb/testsuite/gdb.base/shr2.c -1eebbd8f900e477ae76397024d9681c8 gdb/testsuite/gdb.base/with.exp -54377ba98fd1f453b43692034a4d6999 gdb/testsuite/gdb.base/jit-reader.exp -7c490296a06e17f0e0f2701aaab773e5 gdb/testsuite/gdb.base/break-probes-solib.c -8359be3b4fc4de51bd4b914f8677a3ad gdb/testsuite/gdb.base/solib-symbol-lib.c -dd7eb1cc9fca1e0e76ea774b01bf4fb6 gdb/testsuite/gdb.base/watchpoint-unaligned.exp -76df1ed56b01b53a5f749822dc5f8428 gdb/testsuite/gdb.base/corefile-buildid.c -0746fe858f93fee89b88b09566563e5f gdb/testsuite/gdb.base/nested-addr.c -ec7513320513846abc809771efc58001 gdb/testsuite/gdb.base/gdbvars.exp -b4fa0e45cf3d0710614ca482c704bb0f gdb/testsuite/gdb.base/execd-prog.c -ddfbf3b4ce90c93feb80efc11b03c4dd gdb/testsuite/gdb.base/save-bp.c -0312e19ba20ac3ff9e0e14fa3ee358a3 gdb/testsuite/gdb.base/endian.c -38f7327ad2a95bf543463ac368bda597 gdb/testsuite/gdb.base/async-shell.exp -b461b64f2c130e357bf0f32b2141a2ea gdb/testsuite/gdb.base/vla-ptr.c -f41a87b49ef688371284957632cabfb0 gdb/testsuite/gdb.base/hbreak.exp -40ea0b637bee041d22c72ad5ce356d17 gdb/testsuite/gdb.base/attach2.c -3f380899829010c7d1fd841c729b7f50 gdb/testsuite/gdb.base/testenv.exp -b3974d9294b13289763d9df69d596bce gdb/testsuite/gdb.base/watch-cond-infcall.c -d854ff7a10856e5baa126b8484bf3b5c gdb/testsuite/gdb.base/del.c -06b549b5504f04d0f57f095d7660a812 gdb/testsuite/gdb.base/readline-ask.c -b83b5c7501385c6b45498c40e25c7bb1 gdb/testsuite/gdb.base/info-var-f2.c -8bf682e9c953d1034336da7e813e6335 gdb/testsuite/gdb.base/gnu_vector.exp -146c4a365c8869bf2989860ad1957809 gdb/testsuite/gdb.base/interrupt-noterm.exp -f0600df5bb9c4ddcdf911c195310a844 gdb/testsuite/gdb.base/solib-vanish-main.c -9cd5f860a53b62563c0a3333a9a2d2c4 gdb/testsuite/gdb.base/wchar.exp -069dc40447199bbb6fff38c95ee4d563 gdb/testsuite/gdb.base/quit.exp -f23c092853b9131fa917961209173ab1 gdb/testsuite/gdb.base/type-opaque-lib.c -32a3248a818e01eecd3c22e1fdb6289c gdb/testsuite/gdb.base/wrong_frame_bt_full-opaque.c -f1f370e997c7a4765b0d681cf655b502 gdb/testsuite/gdb.base/bfp-test.exp -89fc8e689de5d0452cb3454d53b15b86 gdb/testsuite/gdb.base/dtrace-probe.exp -69e5e89bda1ff4f58cb90a2085f9b7a2 gdb/testsuite/gdb.base/paginate-execution-startup.exp +a54158f61b5fb1cf3d5ed8a690c73f50 gdb/testsuite/gdb.base/permissions.exp +39c21ffcb453eb011739f4ad2c07d829 gdb/testsuite/gdb.base/watchpoint-stops-at-right-insn.exp +a4ee5f8b6f114af4350ab2c4a700ba51 gdb/testsuite/gdb.base/nodebug.c +319d3895446c5ed80223d75ba9a2e0d4 gdb/testsuite/gdb.base/break-fun-addr.exp +84f3d18710c495ba7b18a951829d21ac gdb/testsuite/gdb.base/weaklib1.c +51e2791bb0c8b08f60b829b7d218c1ed gdb/testsuite/gdb.base/gcore-buffer-overflow.c +092f52de50c790833f076185ac9c9010 gdb/testsuite/gdb.base/annota-input-while-running.exp +760c70c0de2bf35f127496a241cc12e4 gdb/testsuite/gdb.base/longest-types.c +10f31b3699e3c7a12e8a3efd1d9cee96 gdb/testsuite/gdb.base/sepdebug2.c +5b534fd4c07a65e107b3325870f94c76 gdb/testsuite/gdb.base/gcore.exp +f5bed451c504483a342fc0a10b437a15 gdb/testsuite/gdb.base/breakpoint-shadow.exp +d3470afc3e89d53468db210d0c9ecf23 gdb/testsuite/gdb.base/sss-bp-on-user-bp-2.exp +f6fed82c59ed4df0817a8833e34939fa gdb/testsuite/gdb.base/pretty-array.exp +2597947f6b50a4ae13b9590b036a3ff5 gdb/testsuite/gdb.base/break-probes-solib.c +5e3c7d9e36e2c57877063bc7e5a280c0 gdb/testsuite/gdb.base/all-architectures-7.exp +2430bb37f7cb02463cf7fec9791e533b gdb/testsuite/gdb.base/dso2dso-dso1.h +20f3ca08b4ee5a50b26d9f60b05fddbe gdb/testsuite/gdb.base/jit-protocol.h +1d836960d3b1916cde973313da0022c7 gdb/testsuite/gdb.base/infcall-nested-structs.c +1b320b0aaa583b218b575b2f0e9e8615 gdb/testsuite/gdb.base/sigrepeat.exp +4e6a03820fe43a01bd9327793e971e49 gdb/testsuite/gdb.base/bp-cmds-sourced-script.gdb +5c51ee0e412883caf8a48e5f875567d7 gdb/testsuite/gdb.base/watchpoint.exp +3f9811e9fb149716dca904e61670d700 gdb/testsuite/gdb.base/realname-expand-real.c +7917f3d1ef819aadd582ec98629d7563 gdb/testsuite/gdb.base/debug-expr.c +c005f80d7ff61dc5f5edbedca9abe391 gdb/testsuite/gdb.base/coredump-filter-build-id.exp +e3a68ae8c861f768334df23498215c18 gdb/testsuite/gdb.base/attach.exp +64a2f708a92ef75c62638c9ccdca20ac gdb/testsuite/gdb.base/bfp-test.c +f0a95013997a659aa901d39e95865b1b gdb/testsuite/gdb.base/sigall.exp +4e845baaa73df6fee2bbf4721a364562 gdb/testsuite/gdb.base/gdbindex-stabs-dwarf.c +42882db67c655a179bb7836eda694edb gdb/testsuite/gdb.base/argv0-symlink.c +0064090233866f90cf1125a861f86c99 gdb/testsuite/gdb.base/nested-subp1.c +bfc7932f7eda8d60c658ffae8152b062 gdb/testsuite/gdb.base/corefile.exp +bc4b9ae07a69921b462840bb422534b7 gdb/testsuite/gdb.base/gnu-ifunc.exp +cb4c122d36a9b53af2973e1eeb600997 gdb/testsuite/gdb.base/info-var.h +0b94b4baffb44c3a1b797961786dd482 gdb/testsuite/gdb.base/main-psymtab.exp +71b3de526bd08d8a76cf768c29bf1002 gdb/testsuite/gdb.base/dcache-line-read-error.c +ec2fe657be325fd844de372b951cecce gdb/testsuite/gdb.base/sigchld.c +058426afa3cf813b64f645de38179eab gdb/testsuite/gdb.base/float128.exp +a47a44734fe32022caaa783c87e10052 gdb/testsuite/gdb.base/interrupt-noterm.exp +712cabf199869b8c296f96184cb12aca gdb/testsuite/gdb.base/default-args.c +9605fb2f5b68d32e52d0dfda734db792 gdb/testsuite/gdb.base/sigbpt.c +1eb96d99688cd6bb48da2eda0c9be011 gdb/testsuite/gdb.base/whatis-ptype-typedefs.exp +103887cb365a5847df2b376676e304fd gdb/testsuite/gdb.base/alias.exp +d46e82d4abd1f3ed46455d7bb4ea421a gdb/testsuite/gdb.base/multi-forks.c +2cc23117a800db338bdff3fee7f85b75 gdb/testsuite/gdb.base/inferior-died.exp +be4ea0e7e43222f27136e5dc4891156a gdb/testsuite/gdb.base/whatis.c +dbfcac0e69a636942e22be1a7504cddc gdb/testsuite/gdb.base/sizeof.c +e753d2d45f481d71b2ac16bcfa7b5862 gdb/testsuite/gdb.base/gdb11530.c +97a1daa6193842ec13b6130b85b54c38 gdb/testsuite/gdb.base/sep.exp +fa65ad0944d0f62b2e9ddcce73f6bd74 gdb/testsuite/gdb.base/continue-after-aborted-step-over.c +7cd0a5257f956160c9f4aae889328cc2 gdb/testsuite/gdb.base/langs0.c +07b5637efc4b7e06905d220f07cf4907 gdb/testsuite/gdb.base/vla-optimized-out.exp +5c11c0671736af23d56b6b39e90c2600 gdb/testsuite/gdb.base/sigbpt.exp +45272a42f832bbeb1f3ed4b515021c89 gdb/testsuite/gdb.base/consecutive-step-over.c +f4103b9cff45398dafaa57f26a334f3f gdb/testsuite/gdb.base/define-prefix.exp 5c59f840fd501691072c20cb47bab686 gdb/testsuite/gdb.base/mips_pro.c -ca00ccfc4d87f3aefcbfee4990249160 gdb/testsuite/gdb.base/stack-protector.c -10a7e4c2bba48e357e1da05e6f5297fa gdb/testsuite/gdb.base/freebpcmd.c -50e69dcba3d9a4738e3fbb6f56f2e1ba gdb/testsuite/gdb.base/catch-load.exp -e882fc49011248429f3a9c9781ec54ff gdb/testsuite/gdb.base/vla-stub.c -e36063e1c5968768a8498f808c35d4b2 gdb/testsuite/gdb.base/ctxobj-f.c -5434f81aca70a767331c342c572ef83f gdb/testsuite/gdb.base/dmsym.exp -b0e900aa089e52f101f8cc8a2334f820 gdb/testsuite/gdb.base/asmlabel.c -ff9cba746af5c7998ec0c5da25895fad gdb/testsuite/gdb.base/siginfo.exp -a116b6e9198f896eda9ee72254fc4d5f gdb/testsuite/gdb.base/code_elim.exp -5748a9c791c139a48b0dc3070899bddd gdb/testsuite/gdb.base/break-main-file-remove-fail.exp -d38d419fff3c965e8beb242dce72290c gdb/testsuite/gdb.base/varargs.exp -538b2506c96f8fabaea784b827839106 gdb/testsuite/gdb.base/logical.exp -6935acb0c5167bd10db1a46bd79398f8 gdb/testsuite/gdb.base/call-strs.c -efb45b9d00e4770af1baa4a8006da202 gdb/testsuite/gdb.base/source-execution.c -a27e9c3adf85835fd5ec921e62b1df71 gdb/testsuite/gdb.base/attach.c -8fe64933df4910e9104d95090df9d872 gdb/testsuite/gdb.base/all-architectures-1.exp -b60c5f1f6256302e3179307a0cb601d9 gdb/testsuite/gdb.base/sym-file-main.c -21bbefea51b90a728e832bf420d73805 gdb/testsuite/gdb.base/skip-solib.exp -5095b3f0d8e45626c893c89f825c13f4 gdb/testsuite/gdb.base/bp-permanent.c -8abf806f46ecea4b9e09130fae4d3e6e gdb/testsuite/gdb.base/source-test.gdb -d79d3723435fe43136eb70f9c948e5fc gdb/testsuite/gdb.base/gcore-relro-pie.c -12ef712abd838fac59442270ff3e63e3 gdb/testsuite/gdb.base/source-execution.gdb -3297959a87e8b1a07773f8cd80c9e6c5 gdb/testsuite/gdb.base/source-error-1.gdb -18e9ce5a71570a220e2f62038b5d4257 gdb/testsuite/gdb.base/solib-disc.exp -404545b8d2b31603b34da648c25e64ed gdb/testsuite/gdb.base/dtrace-probe.d -fd11dd88cbebef92676d3a8df479f34c gdb/testsuite/gdb.base/print-file-var-lib1.c -a9ee5244c16001368fa04e3764e7c642 gdb/testsuite/gdb.base/gdb1090.c -040156c85ef5d1f893dcc3dc3687dcf7 gdb/testsuite/gdb.base/watchpoints.exp +bf6addf67e6c2a10170e4f4bae3cbea6 gdb/testsuite/gdb.base/label-without-address.c +f86ec32b12ddb08ff633b5cdb7ba7054 gdb/testsuite/gdb.base/label.c +200ecb832f9ba024b7887c356baabd07 gdb/testsuite/gdb.base/sigstep.exp +5b5c3a54f05b85f18d96e271ed1cd55a gdb/testsuite/gdb.base/info-locals-unused-static-var.exp +1d6454e9de37e856bc16050a84c61ee0 gdb/testsuite/gdb.base/freebpcmd.c +fe77bc26a19b9b4777cc31612b2b93a2 gdb/testsuite/gdb.base/dso2dso.exp +73eaa0a7a97440affe8afc5e892766de gdb/testsuite/gdb.base/settings.exp +cdafa10f582d42835b7ae71cce7b8710 gdb/testsuite/gdb.base/start-cpp.cc +7dba0ecaacea833e7fbdbb3f2e8e8342 gdb/testsuite/gdb.base/return-nodebug1.c +8ee8733347c6e393bf430e0c1e9e4fba gdb/testsuite/gdb.base/gnu-ifunc.c +85841ab3edbf09cf7f3be2b60f9c18c4 gdb/testsuite/gdb.base/dprintf-non-stop.c +d724a709aeb1fed7e483a6db7d8993c7 gdb/testsuite/gdb.base/all-architectures-4.exp +cc73eb7951662aabb85954b1f57b055a gdb/testsuite/gdb.base/solib1.c +edf769a03df28471545e273a9524472b gdb/testsuite/gdb.base/infcall-exec2.c +b7ea6c1ba5e20c2d25c2345c5376d0b7 gdb/testsuite/gdb.base/disasm-end-cu.exp +4b6c798e97edf375086104148a747dbd gdb/testsuite/gdb.base/disasm-optim.c +8a3b0146c8f891421e0ce1862c80247d gdb/testsuite/gdb.base/langs1.f +d14001a8c1f01f93c7986962409c099a gdb/testsuite/gdb.base/symtab-search-order-shlib-1.c +a77c5f8652a63f6b66afabd7485f475a gdb/testsuite/gdb.base/foll-fork.c +ff8aa97c002d388f6cd1c33ffbd83990 gdb/testsuite/gdb.base/set-lang-auto.exp +95609e1c40adf3b0110bd7dec23b27c3 gdb/testsuite/gdb.base/longest-types.exp +3d47854d0dc5febd4a61fb70923aea32 gdb/testsuite/gdb.base/source-dir.c +063b09cb5960939f809b94ddbad149d7 gdb/testsuite/gdb.base/condbreak-call-false.exp 2beca99741280af8a3855954b4e321f4 gdb/testsuite/gdb.base/dump.c -44ae2e345ddfe553b4c0595e8dfd8653 gdb/testsuite/gdb.base/info-fun-solib.c -64f14efba364e1bb340dc1bfae61317f gdb/testsuite/gdb.base/eu-strip-infcall.exp -baf2e5803887010765c66a81a64b9942 gdb/testsuite/gdb.base/settings.c -46b4c46217f2fcdabd1bba7e9afaf4bd gdb/testsuite/gdb.base/ptype1.c -f534dee9af36d409610fc43c0b551916 gdb/testsuite/gdb.base/step-resume-infcall.exp +0830cade3d270e5ceeb4323a4a172fe7 gdb/testsuite/gdb.base/info-fun.exp +4dca29a0360d7bdfa38b3920e888460e gdb/testsuite/gdb.base/return-nodebug.c +71d244adf3a3bd89def94e2bc19efb55 gdb/testsuite/gdb.base/siginfo-obj.c +63c7e3f8b029582345525847724fe33a gdb/testsuite/gdb.base/persistent-lang.cc +f659f6bd0f128a2c0fabc93339293649 gdb/testsuite/gdb.base/dump.exp +be3676bc02439b43bb8f907b91a95cd5 gdb/testsuite/gdb.base/attach-non-pgrp-leader.exp +935cf80f3de0b1ceaa2e43c1a721a091 gdb/testsuite/gdb.base/sep.c +59dc15a06476044c782fc7e0041ac69d gdb/testsuite/gdb.base/multi-forks.exp +ad1109c99746c27d1aeac2a1d16ebcd2 gdb/testsuite/gdb.base/hashline3.exp +f4d7fc4a9eed34d99fb549310b831437 gdb/testsuite/gdb.base/examine-backward.c +57a837a6b753b5ca398d0c8ef371f538 gdb/testsuite/gdb.base/async-shell.exp +f1b7bd968f3d33ab84e584a1d0968c8d gdb/testsuite/gdb.base/skip-inline.c +7bacc81104127075173efbd2d1f91cc8 gdb/testsuite/gdb.base/max-value-size.c +3d6c0475c759f0f1307550cd3ad8fe1e gdb/testsuite/gdb.base/reread-readsym.exp +21cd82515119a19af2095535ed881eae gdb/testsuite/gdb.base/msym-lang-main.c +c097684b09e040a009fd665d509be483 gdb/testsuite/gdb.base/all-architectures.exp.tcl +6efcaf131ae375df505a7c2158d73f13 gdb/testsuite/gdb.base/find-unmapped.exp +2d3396b0412314b18176813901de9af9 gdb/testsuite/gdb.base/frame-selection.c +d2e714c87324d821d9668feed782f4ed gdb/testsuite/gdb.base/watchpoint-hw-attach.c +e5d0d79db73b1a14f5671a3d1875ec3c gdb/testsuite/gdb.base/list.exp +f285b445e44617ac055c6e4e2f628d6c gdb/testsuite/gdb.base/included.h +be28e0e94033ab0c7f2964eb6e6c5ad4 gdb/testsuite/gdb.base/hook-stop.exp +2d35eb8887670c967fd4e2a91fb74557 gdb/testsuite/gdb.base/symlink-sourcefile.c +2c506fa182b43e89cfc49c35d0566d18 gdb/testsuite/gdb.base/ctf-ptype.exp +b2c8ad1148423a3bf0764bfffcd228d0 gdb/testsuite/gdb.base/radix.exp +7b72a67138b49ce3445e17e561bed984 gdb/testsuite/gdb.base/watchpoint-hw-hit-once.c +cc3b265db1337d83ae101a2e8c7601c2 gdb/testsuite/gdb.base/check-psymtab.exp +c49efc2ab8bcda3c7e06fe30afb6bba1 gdb/testsuite/gdb.base/find.c +b3bf43fec665c0bb5222e8699208d8a0 gdb/testsuite/gdb.base/offsets.c +c5607700c81cb6f59aeb270105c4e0de gdb/testsuite/gdb.base/pendshr.c +6e54bc71acd62ace63df028cef8f97be gdb/testsuite/gdb.base/step-resume-infcall.c +9647187cc2bd591a93ab65ae162e5f45 gdb/testsuite/gdb.base/label.exp +cbb292ede11de6ec477a3cdcd400d573 gdb/testsuite/gdb.base/solib-disc.c +59351c9c0fe83725b685560483047a77 gdb/testsuite/gdb.base/info-types.c +069f759fe331dff14248a48d8ee66812 gdb/testsuite/gdb.base/ptype.c +3c19603ef1522e0e8f642b1b630f30a3 gdb/testsuite/gdb.base/prologue.exp +f12fc1d938015631bcf2fff4e38d8656 gdb/testsuite/gdb.base/gold-gdb-index.c +220b2f6434f1022f23402029742c8199 gdb/testsuite/gdb.base/watchpoint-hw-attach.exp +6d2174d6269f57060fa1c7d21b155197 gdb/testsuite/gdb.base/vdso-warning.exp +99947a81371e92dbe4f4842dc1f92dcb gdb/testsuite/gdb.base/watchpoint-delete.exp +3b82c3507b84cb3c1a57ed809457567f gdb/testsuite/gdb.base/global-var-nested-by-dso-solib2.c +7795f27d3493b8a545e87cd368380b65 gdb/testsuite/gdb.base/skip-solib-lib.c +6c9554c0c423bee05bddb6c09d1a8be0 gdb/testsuite/gdb.base/langs.exp +e9daea7ad26ce1995d4766359662aa11 gdb/testsuite/gdb.base/stap-probe.exp +83b4147d5cfab4b94796513c48e2ce03 gdb/testsuite/gdb.base/watchpoint.c +a96fec518616a5bc6eaeb8f965b90eda gdb/testsuite/gdb.base/max-depth-c.exp +ecfebf5b78c6525d4da31cd7843ad080 gdb/testsuite/gdb.base/infoline.c +cf941ef36f7c7bcc1563f8ba20382fb9 gdb/testsuite/gdb.base/break-always.exp +449afe7f5e3a49c89d69fb445a93ddc4 gdb/testsuite/gdb.base/echo.exp +4ff3418362056aac5f2fd4ab27806fbb gdb/testsuite/gdb.base/info-macros.c +8dd912f99ab5b123775a85d094a5370c gdb/testsuite/gdb.base/jit-elf-util.h +3b5ff1f729c40d9c4a98118ff08a9e6b gdb/testsuite/gdb.base/annota1.c +07a3a7d19b0086cca767b92285bc0cb7 gdb/testsuite/gdb.base/fork-print-inferior-events.c +9cebd90f658a6daa8fe47f24e00f2826 gdb/testsuite/gdb.base/killed-outside.exp +174d29f801d09ff33d0ead945d8a363c gdb/testsuite/gdb.base/checkpoint-ns.exp +45520994d032c13f9afdbbbf00f11195 gdb/testsuite/gdb.base/nested-addr.exp +4e57632a89037cc9887ce832a05609c6 gdb/testsuite/gdb.base/ovlymgr.h +9d150adebd9a484ac80cf08aa89bd5e2 gdb/testsuite/gdb.base/decl-before-def.exp +0220985a52528fc1b9b33a26a338beae gdb/testsuite/gdb.base/jit-reader-host.c +ccc7d4be2c54061831c1ddf0b64572fa gdb/testsuite/gdb.base/startup-with-shell.c +431548fd5ab5002b38a8089828af33b2 gdb/testsuite/gdb.base/prelink.exp +ad1e73d20e7205e625ed76809c56d21d gdb/testsuite/gdb.base/sss-bp-on-user-bp.c +7994e8e1cfa3eb3785682b23757e40c2 gdb/testsuite/gdb.base/psym-external-decl.exp +5631a4748b7eb572021d89206c3fd3ae gdb/testsuite/gdb.base/break-entry.exp +55ef011552bf330484f8e26953739cd3 gdb/testsuite/gdb.base/killed-outside.c +df4bf891fa342b9cdd0036b707e65317 gdb/testsuite/gdb.base/async-shell.c +b42b3e7473ece703fc9773f3153f5131 gdb/testsuite/gdb.base/source-dir.exp +f31724ae90e227ad6dff1c0b2b438540 gdb/testsuite/gdb.base/skip1.c +dca528bf59b15d9d734a10615863f3d7 gdb/testsuite/gdb.base/starti.c +9a3c001c37e90976bb1cf751d66bffeb gdb/testsuite/gdb.base/structs.exp +4b5813ef3f938ecaba02f1b0c8d39c3a gdb/testsuite/gdb.base/code-expr.exp +b970672bcbf86c11452b33bcc0322dbb gdb/testsuite/gdb.base/hook-stop.c +f4fbf95fb3da335ee400d05c7d6bb3cd gdb/testsuite/gdb.base/sep-proc.c +2b33bda7417260189c0d03c365a6f5f4 gdb/testsuite/gdb.base/list-ambiguous.exp +eb4ffbd4d1271b6ecbcf1ac083dbfea0 gdb/testsuite/gdb.base/step-break.exp +741c39c2a1d0d4379a0fc289c32361ca gdb/testsuite/gdb.base/readnever.c +063bbfc60e60178a07b6f413501d2f87 gdb/testsuite/gdb.base/remotetimeout.exp +b71bb0364377f0796366b85461b00d5e gdb/testsuite/gdb.base/call-ar-st.exp +7466382376bf49490e99399c0133e8c7 gdb/testsuite/gdb.base/solib-vanish-lib2.c +720f24ea91c1ff106eb76962c377fa1d gdb/testsuite/gdb.base/set-inferior-tty.c +843d94b84ff05641aa2966e09f6ab1dc gdb/testsuite/gdb.base/floatn.c +d3d2d8b71315136cb38b619669393954 gdb/testsuite/gdb.base/bitops.exp +fb227236ea14e50a2cb1b3d91d6c519b gdb/testsuite/gdb.base/advance-until-multiple-locations.exp +bbf6a3905f53442fa76eff0a3b4e8033 gdb/testsuite/gdb.base/info-fun.c +05417c1c0734ec82e22a901309a9cfa3 gdb/testsuite/gdb.base/attach-pie-misread.exp +3b5ff1f729c40d9c4a98118ff08a9e6b gdb/testsuite/gdb.base/annota3.c +616be2c5b79ce561b6b35fcf92e9bebc gdb/testsuite/gdb.base/prologue-include.h +5750a6e777da6aa91ef03035380738ef gdb/testsuite/gdb.base/break-interp.exp +450a1da41a5c13ed23211a6f1b9a30bd gdb/testsuite/gdb.base/list0.c +854f10afe4bd9f8244ceb4d4d86802fa gdb/testsuite/gdb.base/sigall.c +60aabaecbc7542a7e0c982764202622a gdb/testsuite/gdb.base/dso2dso.c +367247eae9604f342e011e31686fa128 gdb/testsuite/gdb.base/gdb1090.exp +5a8a3fba089bf1de6fb187ccdc3e4c75 gdb/testsuite/gdb.base/nostdlib.c +0691d811c30b4d7430f68e78e2abe9aa gdb/testsuite/gdb.base/catch-gdb-caused-signals.exp +3bd639c10cfa1e43b8c0226c0d2d85cf gdb/testsuite/gdb.base/foll-exec-mode.exp +a742e0e58b24b2b85c8d7cb74d306823 gdb/testsuite/gdb.base/jump.exp +cc49c61970f996b075dd6592e8e18b46 gdb/testsuite/gdb.base/huge.exp +19f3ff4e84fa6746ca417bbbaa5ae679 gdb/testsuite/gdb.base/watch-cond-infcall.exp +1a411b7ca5f4ff902a2ee0c598c803e9 gdb/testsuite/gdb.base/completion.exp +68a4b30c062760f6e43f4ed0b266a7b2 gdb/testsuite/gdb.base/gdb1821.c +3d643ecd85c4134e28eeab145c379bf2 gdb/testsuite/gdb.base/kill-detach-inferiors-cmd.exp +4625e2e756d128376b0f0c4fd21f9c37 gdb/testsuite/gdb.base/gcore-relro-pie.exp +0b1bb064e06f7355d013a21f7234c04e gdb/testsuite/gdb.base/psymtab.exp +1e8f4996cb863d3c221ae323bd837507 gdb/testsuite/gdb.base/dso2dso-dso1.c +cf4b8cc6f094a899a404c2da4778b52e gdb/testsuite/gdb.base/jit-reader-simple-dl.c +5afa8837e4abc7ea48c4081ed62f69c9 gdb/testsuite/gdb.base/auto-connect-native-target.exp +9f16a3583353c6e13dd0152edb5051d1 gdb/testsuite/gdb.base/symtab-search-order.c +e561e79f245bbb27e22a8d6aa6456732 gdb/testsuite/gdb.base/info-var-f2.c +428a82a6cd22e6893e311d934777f4ea gdb/testsuite/gdb.base/eu-strip-infcall.exp +2181797015c71e6ef698a131301ad425 gdb/testsuite/gdb.base/watchpoint-solib.exp +4a8ec33c08e619bcbbffff6e4e446a7e gdb/testsuite/gdb.base/line-symtabs.h +2226ecf7a33e22feb830abff16524f74 gdb/testsuite/gdb.base/break1.c +0d937cc44b61cd8fb45ef00ac9b2d3fc gdb/testsuite/gdb.base/bt-selected-frame.exp +175d8fa2452ccaa3dd639463445f405e gdb/testsuite/gdb.base/symlink-sourcefile.exp +263a1fdb9a5ee831f65f8fa874760569 gdb/testsuite/gdb.base/paginate-execution-startup.exp +f6a96ae4d88de9220856194dacc8c9c8 gdb/testsuite/gdb.base/lineinc2.h +94cca81defd3794d3f33982eee8c43ac gdb/testsuite/gdb.base/gdb-sigterm-2.exp +be2e0e87ab3150055f27373b5451c3b1 gdb/testsuite/gdb.base/endianity.exp +0d9d7e14268893c8236afb12098a7080 gdb/testsuite/gdb.base/info-os.c +1f1baf9250883f5a0b7c0c35dfc8324b gdb/testsuite/gdb.base/opaque0.c +0043cb7194e4d204c4955d6914f56de1 gdb/testsuite/gdb.base/sigrepeat.c 0b4e499f872cfeaab21e0b173c718ca9 gdb/testsuite/gdb.base/lineinc1.h -ef4c2037727518211f56989f698a1f4d gdb/testsuite/gdb.base/all-architectures-7.exp -86e0ad127125c35fdf8674da74071799 gdb/testsuite/gdb.base/continue-all-already-running.exp -3f76b7fbfda36e68ce3f00a343a2a4bc gdb/testsuite/gdb.base/unload.exp -fadb717d72b9f5ce2c8efd09ea299b3e gdb/testsuite/gdb.base/skip-solib-main.c -cd164d40792a72cbc27a27f630ac1888 gdb/testsuite/gdb.base/annotate-symlink.exp -381d0292ff89a6ff6b87c4f0c2878b12 gdb/testsuite/gdb.base/watchpoint-hw-hit-once.exp -bd401ce2e2aa516378800a29415e58a7 gdb/testsuite/gdb.base/consecutive-step-over.c -a6906f462c96899a2df66d3063827141 gdb/testsuite/gdb.base/type-opaque-main.c -c96792e1b1021812bda07509dda10ad7 gdb/testsuite/gdb.base/catch-signal-fork.exp -f92f3990466b721e60138c2d39f29d81 gdb/testsuite/gdb.base/morestack.exp -cdfda8dee44144ca8d9dcb54faaaf924 gdb/testsuite/gdb.base/auxv.exp -3a3a9d9a7ec1f3ba5aa868c2c0afa705 gdb/testsuite/gdb.base/endianity.c -88002c69533b4f92298f5b7c881fd854 gdb/testsuite/gdb.base/break-always.exp -952b002fc33390b8d5df38925f3c332a gdb/testsuite/gdb.base/pie-fork.exp -29e67d043086a7bb679b88b96280ba1a gdb/testsuite/gdb.base/code_elim2.c -140a42768f2411b0a93da9966e13aa5a gdb/testsuite/gdb.base/hbreak-in-shr-unsupported.c -81fea5775e25ec9bb7cd2c1d05911194 gdb/testsuite/gdb.base/step-indirect-call-thunk.exp -88450bdf8f9f6f728d199c7cc5113b13 gdb/testsuite/gdb.base/break-fun-addr1.c -1ee1a6bba8c1a5a8927503b672bdb539 gdb/testsuite/gdb.base/align.exp -4454fea50325ed042135f535e88e0635 gdb/testsuite/gdb.base/enum_cond.c -a57cba3b6becc03773cb12faa97d4ced gdb/testsuite/gdb.base/cursal.c -faa4a2f7a196caf8e16f26c07ee08bd7 gdb/testsuite/gdb.base/realname-expand.c -e53cc2a0159923d7a96e82b27eb5dbad gdb/testsuite/gdb.base/sss-bp-on-user-bp-2.c -0629fb065fb40ce5534c9154bc4578cd gdb/testsuite/gdb.base/trace-commands.exp +62e6d1b79d7b6c42eab9017647da4bdd gdb/testsuite/gdb.base/shlib-call.exp +6f4837bae4e626ce4566cce03696ae48 gdb/testsuite/gdb.base/reread1.c +f93efa4c3e8f38652df8a39b115abef3 gdb/testsuite/gdb.base/sepdebug.c +264eecab73ffc0a6fc1c6c8978bafc66 gdb/testsuite/gdb.base/condbreak-call-false.c +4c6d4a0992321b1e43bf8eb58e85f677 gdb/testsuite/gdb.base/info_qt.exp +86918c6dd7ee30fa4b8c0d009700dfce gdb/testsuite/gdb.base/valgrind-infcall.exp +af6f9e427bb3d09aa6033ec64aec8775 gdb/testsuite/gdb.base/jit-elf-dlmain.c +74fd04c8809dfe061c73fe3828844e1b gdb/testsuite/gdb.base/infcall-nested-structs-c++.exp +f69d0af3f7cfbb8a8741e7c699b94170 gdb/testsuite/gdb.base/expand-psymtabs.exp +466f7d1d3b0a0b3e51e9413d4a68fafd gdb/testsuite/gdb.base/gold-gdb-index.exp +dcb1fb60c149fe711460df1c7af83cb7 gdb/testsuite/gdb.base/scope0.c +f2da60dac2f49806f907dc3692c8c2c3 gdb/testsuite/gdb.base/help.exp +bf1348c28dc1c160f1b5dba56ad76cc4 gdb/testsuite/gdb.base/sigchld.exp +a1ebccd19f711c5aef9cd4f840ddb6b9 gdb/testsuite/gdb.base/libsegfault.exp +6e6d7d46fdd07365680d4d04c2dd52f8 gdb/testsuite/gdb.base/fileio.exp +b3544fd511dd0087ba0b76067326646c gdb/testsuite/gdb.base/align.exp.tcl +182f0ce4787c443867da8e34cc7e6911 gdb/testsuite/gdb.base/corefile-buildid-shlib.c +3f86d9647b09124b1990e37f593da185 gdb/testsuite/gdb.base/fileio.c +7e24cd7420b1727cbc765235a68e60a0 gdb/testsuite/gdb.base/unloadshr.c +cda863cfa59575ff11163d5ca80216f3 gdb/testsuite/gdb.base/gdb1555.exp +0dc255a3b7569827f378376d4291a2b0 gdb/testsuite/gdb.base/call-signal-resume.exp +2ed420a4667af609ba2bde3d38f4f12e gdb/testsuite/gdb.base/line65535.exp +c4f26d4ac51b155c9293371e1ad49578 gdb/testsuite/gdb.base/complex-parts.c +cb0654dce6d9372a30a4a2c46faa3115 gdb/testsuite/gdb.base/hbreak-in-shr-unsupported-shr.c +dbea8a81545c2849bbec3b766d25be98 gdb/testsuite/gdb.base/nested-subp2.exp +3415eba20ad3023ec0174ab524e19222 gdb/testsuite/gdb.base/step-indirect-call-thunk.exp ac0b4b74bdc306ec71b88d83a0cd608a gdb/testsuite/gdb.base/scope1.c +93e084ab4c5f0d8e8f208ea6cb98cd56 gdb/testsuite/gdb.base/async.c +ca11f55deba81cd0821cb9372f872a97 gdb/testsuite/gdb.base/run-after-attach.c +82eefe7860096d197eacee0a9e5fc564 gdb/testsuite/gdb.base/decl-before-def-decl.c +835b9e632bbbce1996a2526bcce375c1 gdb/testsuite/gdb.base/callfuncs.c +baf067971d85336e68bc57cdfd26a4ae gdb/testsuite/gdb.base/source.exp +3f9811e9fb149716dca904e61670d700 gdb/testsuite/gdb.base/fullpath-expand-func.c +98ebf844192d81a9e026d74416414c93 gdb/testsuite/gdb.base/gnu-debugdata.exp +6be624dca88671449045a2c28ee77930 gdb/testsuite/gdb.base/printcmds.c +60fe4f175ea431ed5b7dbe8c64a74625 gdb/testsuite/gdb.base/relational.exp +7ea18a24d9d28cbcb1f4c5fe6442697a gdb/testsuite/gdb.base/macscp1.c +fcb5af2a4cdaec31f4763f2586250e7d gdb/testsuite/gdb.base/cached-source-file.exp +fefea9c95a20a3595e6d9d29094df044 gdb/testsuite/gdb.base/info-shared-solib1.c +02a5f377bf1bbcb471aba12b0c8507dc gdb/testsuite/gdb.base/index-cache.c +da48dc334c19a7db95e358b1343c1223 gdb/testsuite/gdb.base/set-cwd.exp +aef29843e38642c732ef75f58b24c833 gdb/testsuite/gdb.base/gcore-buffer-overflow.exp +ff82cb4d0c2fbd72275e424bceab8b9c gdb/testsuite/gdb.base/skip-inline.exp +35464b78377d6c6dc3c05c0c7969f73c gdb/testsuite/gdb.base/catch-load.exp +7eacb6e30b5ea2778842d5338ad9ba50 gdb/testsuite/gdb.base/attach-twice.c +72c0e6f1e40670c94e0bc68798e0ef38 gdb/testsuite/gdb.base/bp-cmds-execution-x-script.c +256625bcc48a090ec4e5b85d1affa9bc gdb/testsuite/gdb.base/macscp2.h +d04f67e51d0ba4b13825b04d3903becb gdb/testsuite/gdb.base/annotate-symlink.exp +eeee2f7272f3980ec0ff42be9eeaeb6c gdb/testsuite/gdb.base/attach-non-pgrp-leader.c +936811d3c73f53c8f50ed5cbcad90c15 gdb/testsuite/gdb.base/charset-malloc.c +f6b741d46c5bfa29622a2365719a5d29 gdb/testsuite/gdb.base/pending.c +9e956fdd1fcdf6d5a4e58feb16613922 gdb/testsuite/gdb.base/pointers.exp +673dfb244d5702e7de5be15b2ee84247 gdb/testsuite/gdb.base/siginfo-thread.exp +56d50daad95f5b758933d430c9aafb18 gdb/testsuite/gdb.base/reread.exp +5a48bbcbfa28877bd6d745f2e39aa6c9 gdb/testsuite/gdb.base/filesym.exp +a9a8b155c1714fd84fe506b93c5704fc gdb/testsuite/gdb.base/ovlymgr.c +0fec50da02e7cd3be0581d9269e8b27b gdb/testsuite/gdb.base/pc-fp.c +1e90edcdfb6f3901115e207f056b10cf gdb/testsuite/gdb.base/jit-attach-pie.c +f7920dfa1945630b9ee6e2043edb1e6c gdb/testsuite/gdb.base/break-interp-main.c +bea3d9f50bb88f89bdc242485d93c16b gdb/testsuite/gdb.base/debug-expr.exp +d2c0e8dffc989d6e2f4145c46cdc6e95 gdb/testsuite/gdb.base/symbol-alias.c +edd5396f14dd51d882efff7700332d0b gdb/testsuite/gdb.base/break-unload-file.c +60e50725ef0f09e4e2cdd31ae3d76003 gdb/testsuite/gdb.base/with-mf-main.c +95ed5b4f8b81eb1bde58d07755d10121 gdb/testsuite/gdb.base/dprintf-non-stop.exp +35ec6d4fa05e73c38a2b7e29c1a98cfb gdb/testsuite/gdb.base/call-signals.c +0efd14a5e24a9f1815d3ba9a874f4a0c gdb/testsuite/gdb.base/branch-to-self.c +9836d598f620c1bd2b0dcbd2b23c302b gdb/testsuite/gdb.base/watchpoint-cond-gone.exp +b8cf649f1e659850a4d34af9940bfebf gdb/testsuite/gdb.base/list-ambiguous0.c +fa7b98cba524d376c64635d98f3060fe gdb/testsuite/gdb.base/inferior-died.c +53a99cebe416626ff58caedd333df221 gdb/testsuite/gdb.base/paginate-after-ctrl-c-running.c +95c6034d1232aa8f626b5c223ee78549 gdb/testsuite/gdb.base/average.c +eb2e23be383b91821c0c71aabf7640af gdb/testsuite/gdb.base/expand-psymtabs.c +395eebdd23c15d15e9d43a1e11fea904 gdb/testsuite/gdb.base/attach.c +24c699cf254950cc56e9f25630b1df28 gdb/testsuite/gdb.base/disasm-optim.h +1c52b652c090c188bdafce92eb1aba29 gdb/testsuite/gdb.base/start.exp +2de357cceba7ac4c1ab75c17bc9622b7 gdb/testsuite/gdb.base/constvars.exp +776c6a992732aa78a212e57258f223b0 gdb/testsuite/gdb.base/floatn.exp +b82a52388d73001811bd71d647c2938b gdb/testsuite/gdb.base/stap-probe.c +a93931ecfb75c05fca2bfd29872fe885 gdb/testsuite/gdb.base/segv.c +73e8b93853be32880e57b875d773c4f9 gdb/testsuite/gdb.base/remote-exec-file.exp +7f0f0b51caf5aea0df21b0a7dcc5dca5 gdb/testsuite/gdb.base/execl-update-breakpoints.exp +9cd4ef136dfbee149a4056477283fa41 gdb/testsuite/gdb.base/grbx.c +161a2c4c6a68d5b8e0674df4607f9e5d gdb/testsuite/gdb.base/breakpoint-shadow.c +e548033332602790bf89397d8a8649fd gdb/testsuite/gdb.base/pr10179-b.c +758f6c6b1b50387b9973aa7ab73503aa gdb/testsuite/gdb.base/source-test.gdb +efa146c9c06e0e3a192f6301a47496e5 gdb/testsuite/gdb.base/dprintf-detach.c +9befbe3a7e4f2a4e07af8a9784edbca0 gdb/testsuite/gdb.base/funcargs.exp a3bbbaaebe1bd4168a37b11c401b3109 gdb/testsuite/gdb.base/call-rt-st.c -3dafa969ef25117125d60a1688e118c9 gdb/testsuite/gdb.base/infcall-input.c -bb861fa17733197cdc828e9f00fe6a7d gdb/testsuite/gdb.base/index-cache.c -5058dfa882e399d79a73f8767a395e24 gdb/testsuite/gdb.base/value-double-free.exp -b8a78e0986de9a174830e64997ab1e86 gdb/testsuite/gdb.base/solib-search.h -de516e13f21e1f1424264891b77df4b0 gdb/testsuite/gdb.base/step-symless.exp -a5d31267f79a5e0e8416e8716228a87b gdb/testsuite/gdb.base/jit-attach-pie.exp -03cafa5cc66f71400c45677585ecd88b gdb/testsuite/gdb.base/symbol-alias2.c -cfce67eb8a2f32532185014186667015 gdb/testsuite/gdb.base/jit-protocol.h -0f1ee58adfcf4276429b0e45c689df37 gdb/testsuite/gdb.base/execution-termios.exp -71b7b44cc5ed1f5f47a7316c445c16a4 gdb/testsuite/gdb.base/solib-search.c -6865b1d9747a18bc075b456a15d494e4 gdb/testsuite/gdb.base/solib-overlap.exp -60839cbfc4caf4ad8d1ce325c7cad4b5 gdb/testsuite/gdb.base/gcore.exp -a8b91727894c75092fd4949d8c92a8a9 gdb/testsuite/gdb.base/execl-update-breakpoints.c +b40b03dd9e93f8b595fca9af8b24cacd gdb/testsuite/gdb.base/pr11022.exp +6dad5e701ab9d3278d6b619de6b3f80e gdb/testsuite/gdb.base/noreturn-finish.c +ebd24df91fc38eecadebb916688af8d3 gdb/testsuite/gdb.base/c-linkage-name-2.c +15c67cfe9c46df658dd3065a14e941cc gdb/testsuite/gdb.base/nofield.c +b2260286c086c1ddcc320925e98b7685 gdb/testsuite/gdb.base/gcore-relro-main.c +78dae31aac2b90f37418d719ad8bcb75 gdb/testsuite/gdb.base/interrupt-daemon-attach.exp +75a452bce55b6e6af636482bee513e9e gdb/testsuite/gdb.base/find-unmapped.c +e24b97c298329a9043f02a24c5a53c87 gdb/testsuite/gdb.base/vla-datatypes.exp +142dd44dd59c7a9f96297cd94bdd91ab gdb/testsuite/gdb.base/msym-lang.exp +d164bba01fd00ea4aaa12b7de9bc811e gdb/testsuite/gdb.base/fullpath-expand.exp +a32e5562727831b8d2633340884a957d gdb/testsuite/gdb.base/kill-after-signal.exp +34f303f1742e1a85ec3936092037bc1d gdb/testsuite/gdb.base/sigaltstack.c +ca3f4f6185329e1a3de0b22b1ab8f98f gdb/testsuite/gdb.base/vforked-prog.c +5d5838b771eb15335b38956bbf9b7936 gdb/testsuite/gdb.base/maint.exp +07636ac16fbb24dd3a83bbe28b7e1dc7 gdb/testsuite/gdb.base/code_elim1.c +b4fa0e45cf3d0710614ca482c704bb0f gdb/testsuite/gdb.base/execd-prog.c +14af894f86cf3a3137d81703fde7a77f gdb/testsuite/gdb.base/maint-expand-symbols-header-file.h +588ffd8fcb0fdaccef7f24d755526e08 gdb/testsuite/gdb.base/breakpoint-in-ro-region.c +3687b6714a3574b48614c71a4c48c0f5 gdb/testsuite/gdb.base/value-double-free.c +c4a90e7e33b9909881b48de7dea8c641 gdb/testsuite/gdb.base/nextoverexit.exp +7b04051ced3811dcf1abc51d69045870 gdb/testsuite/gdb.base/global-var-nested-by-dso-solib1.c +31dca6fbe84152f02799734152a60a12 gdb/testsuite/gdb.base/break-include.exp +4745bab1c0049eb50ca8689ac48a2e4f gdb/testsuite/gdb.base/watch-vfork.c +6c8623e17941ee3b7c521a8ad76e9125 gdb/testsuite/gdb.base/readnever.exp +7bf4ad0da071372a587345e26aadd3fa gdb/testsuite/gdb.base/hbreak-in-shr-unsupported.exp +6b603dfc852dfd16a4b86879b2ed9d14 gdb/testsuite/gdb.base/gdb-sigterm.exp +466ef47ba64de6c198b21b2b902abf73 gdb/testsuite/gdb.base/miscexprs.exp +cc8729d8a560ca2e32bda3a5dba61e93 gdb/testsuite/gdb.base/nested-subp3.c +e4ba645fb7f7a9ffb756880edc74750c gdb/testsuite/gdb.base/cvexpr.c +5618bd2da149074ec9370d8079ebfcd2 gdb/testsuite/gdb.base/empty_exe.exp +a9cf95b91955e7d6c102a3122d76555a gdb/testsuite/gdb.base/foll-vfork-exit.c +e616a48c2fd445383442292ca2a18f82 gdb/testsuite/gdb.base/interrupt-noterm.c +d023c3affabe5f96344c9ed079995b59 gdb/testsuite/gdb.base/options.c +0cde31e85679fb46cb5e325fae918537 gdb/testsuite/gdb.base/sigaltstack.exp +e49a5ef22f2e525b3d309b27222d7676 gdb/testsuite/gdb.base/dtrace-probe.d +5374a5506ec0ec1b093eeb788236c544 gdb/testsuite/gdb.base/ctxobj.exp +1bf4ec6c844fd91835f424b17e698536 gdb/testsuite/gdb.base/start-cpp.exp +5069db7d4861c43854728d63688cb084 gdb/testsuite/gdb.base/vdso-warning.c +a523f295f605822ba719eb1a2e5b55c6 gdb/testsuite/gdb.base/info-types.exp.tcl +dd47338688783a070c83c13cfd8eb540 gdb/testsuite/gdb.base/default-args.exp +973aec296402f2013a580dd6a8660106 gdb/testsuite/gdb.base/interrupt-daemon-attach.c +e44823ffb03c6a629dfebb68a03a9212 gdb/testsuite/gdb.base/break-main-file-remove-fail.exp +5e5c4d456609ed3790571621ffd4a2c1 gdb/testsuite/gdb.base/symbol-alias.exp +e234a43f1219ddfae82672e534bd34a4 gdb/testsuite/gdb.base/advance.c +5d3f79be23c04105f0a286b3dc86ddff gdb/testsuite/gdb.base/psym-external-decl-2.c +cfc70bc0a30b68bab16ece6c8fdb16ba gdb/testsuite/gdb.base/catch-signal-fork.c +965b96ed9ff72949c3feac5d896b2418 gdb/testsuite/gdb.base/info_minsym.exp +264123d65079f9a65de92502cd3bedf0 gdb/testsuite/gdb.base/eval-skip.exp +0eb967d836ad0b6386e500a6447d272d gdb/testsuite/gdb.base/asmlabel.c +1d2a1ec6bac0bc0aa846de3f2ed67bb6 gdb/testsuite/gdb.base/align-c++.exp +98caa0fa8d0fa8f1d464ce3831e30a5a gdb/testsuite/gdb.base/jit-elf-so.exp +c2ee98466354a713597b0351b9a5541e gdb/testsuite/gdb.base/solib-search.c +986dcf7d5bbcc0628cacfab086476ce5 gdb/testsuite/gdb.base/break-fun-addr1.c +dc1c7b2d0d97de5e07f0046fca14d586 gdb/testsuite/gdb.base/macscp4.h +f4d1b827f7d20c8f8f0ed28e78eadcdc gdb/testsuite/gdb.base/chng-syms.exp +e069176da6d06e0a182d7b065ce87c85 gdb/testsuite/gdb.base/comprdebug.exp +3e7c3e7d85fe604700cc6c01e756beac gdb/testsuite/gdb.base/call-sc.exp +9710c6651d22588d6e0d076cdc66f9d1 gdb/testsuite/gdb.base/watch-read.c +ecd3277f19d47adb694db20f31a55d05 gdb/testsuite/gdb.base/sepsymtab.exp +be46c2ce5bb75c1410e6ddd3568603bd gdb/testsuite/gdb.base/signals.c +8f8ae3a974b2478b453ca13d8ef33e2f gdb/testsuite/gdb.base/pr10179.exp +2f05af42e52fd9dda8d0cc0afc88a68d gdb/testsuite/gdb.base/frameapply.c +371fa47e081b7ebbe1b692ece0bf4308 gdb/testsuite/gdb.base/batch-preserve-term-settings.c +0c41a66fba270b1d56db110d0ad18826 gdb/testsuite/gdb.base/info-os.exp +dbc50f939b78fc706983d75818cea04e gdb/testsuite/gdb.base/solib-search.h +604cfe3307546d68b19de91587719866 gdb/testsuite/gdb.base/dfp-test.exp +95ac19a35b26c14326667248b2906b9e gdb/testsuite/gdb.base/corefile2.exp +e97692b1e8aa59fb622c3636e877c35e gdb/testsuite/gdb.base/shr1.c +34a1a28b19ff57727ae020c756fd10c3 gdb/testsuite/gdb.base/pr10179-a.c +cad19925fbef8c966232b96e6a20462b gdb/testsuite/gdb.base/many-headers.c +eaa1c53f37c2eecf269d8e280ecb7a15 gdb/testsuite/gdb.base/auxv.c +9ffc2cd8e384888785a57bd5ed8168d2 gdb/testsuite/gdb.base/step-test.c +c48e20529ec28c0b1927c139b319f927 gdb/testsuite/gdb.base/large-frame.h +f75f9b52e0d8f558369ff7df5e80f9d3 gdb/testsuite/gdb.base/watchpoints.exp +73d608a631bbdd52c5d795ecbb4d97cb gdb/testsuite/gdb.base/readline-ask.c +09eb47495c6e22e181798e6550d697c6 gdb/testsuite/gdb.base/write_mem.exp +503bdc5a1f236a5a11de2515aa3ffc7a gdb/testsuite/gdb.base/interrupt-daemon.exp +59f879d0b003375660886dba6838b158 gdb/testsuite/gdb.base/style.c +6919b1bb987a34f722ff968a612095c5 gdb/testsuite/gdb.base/stack-checking.exp +46b4c46217f2fcdabd1bba7e9afaf4bd gdb/testsuite/gdb.base/ptype1.c +4fdf63972cecdf8f588fd5d0b0f848b5 gdb/testsuite/gdb.base/infcall-nested-structs.exp.tcl +0b52062a0c9e4889c9c1344a9e452ce5 gdb/testsuite/gdb.base/finish-pretty.exp +12000654f3ebe4f0a6801fecf9a13b49 gdb/testsuite/gdb.base/return2.exp +fe5009ce8b19b723e7e6deb3c0ca9a0e gdb/testsuite/gdb.base/gdb_history +eb290f8a5638ce985f7daf88e14a472b gdb/testsuite/gdb.base/watch_thread_num.exp +0c30ff904d7950c94f46c998f834d0bd gdb/testsuite/gdb.base/call-ar-st.c +d71e2f33934adbcceba4549156e58afe gdb/testsuite/gdb.base/siginfo.exp +c6302d2d6df5c27303ce099979e5387b gdb/testsuite/gdb.base/subst.exp +52b277fb7c2b8ffb0dd369d174ed281c gdb/testsuite/gdb.base/structs.c +58901458c0baf5f5ec62a2c27052577e gdb/testsuite/gdb.base/remote.exp +5f69d4d1aca27c473ce07b2bc160f928 gdb/testsuite/gdb.base/disasm-optim.S +49817d18901c93d1995ad97fba25aafb gdb/testsuite/gdb.base/randomize.c +85433db3e3d3b0ef1a8e5564f7470f82 gdb/testsuite/gdb.base/pending.exp +e72188df91d38170ec1aca98c41f64a7 gdb/testsuite/gdb.base/list0.h +519626b2f7ef48e1f8e0772aa3572f8d gdb/testsuite/gdb.base/load-command.c +be88708ea86126d5bd25fa20c396febf gdb/testsuite/gdb.base/symfile-warn.exp +2449f18cde4e944c746e0c1c38079dad gdb/testsuite/gdb.base/disasm-optim.exp +0b36f8085b2fce2448fb28b7368683b9 gdb/testsuite/gdb.base/backtrace.c +84b9e406db6f992245b9645bfe292076 gdb/testsuite/gdb.base/mips_pro.exp +aa3d57bdad56c15d00caef3a44cb8d44 gdb/testsuite/gdb.base/eval-avoid-side-effects.exp +ccd630d3b8ea3f61dd4dea1d527dc8f5 gdb/testsuite/gdb.base/attach-pie-misread.c +e723d22ea2543fd8edf8c791c6c05c93 gdb/testsuite/gdb.base/watch-non-mem.exp +d1b20e0f15b81e76bf62323b27ed1d9c gdb/testsuite/gdb.base/compare-sections.exp +fa969478c2fad95e02c61b8b3c4d8a43 gdb/testsuite/gdb.base/maint-target-async-off.c +752b0be07f1de884ce8d08316bc1882e gdb/testsuite/gdb.base/max-depth.exp.tcl +663175a856dba8ed451d0248636cf935 gdb/testsuite/gdb.base/pretty-print.c +5dea4ca90d5c176370ca7c9ca581857a gdb/testsuite/gdb.base/infcall-input.exp +ea61da37d7d699688e445ee5ea0e67e2 gdb/testsuite/gdb.base/options.exp +53714b02a38f2ef5ceb35cef586cc29d gdb/testsuite/gdb.base/hbreak.c +04708896868ba0c25e1b821cbb6ea6d9 gdb/testsuite/gdb.base/dfp-exprs.exp +6c7c7c6860c8a0c0e3ed7b48fc70467c gdb/testsuite/gdb.base/bg-execution-repeat.c +b9247d585339404f59365be813316222 gdb/testsuite/gdb.base/new-ui-echo.exp +019509966ff6724dc0ba0e0bb7fd4910 gdb/testsuite/gdb.base/double-prompt-target-event-error.c +f2540b97635651522b157ccf014a714c gdb/testsuite/gdb.base/large-frame-1.c +ec7abb0ac43d3538b72d995f83c1209c gdb/testsuite/gdb.base/source-error.gdb +79d9f3f45ffc528a5c0ca85adcf18ebc gdb/testsuite/gdb.base/catch-signal-fork.exp +0b26e122a75f32b919dc2eeb36e22ddf gdb/testsuite/gdb.base/server-del-break.c +b847b77ad78b5377440aba51f6063f03 gdb/testsuite/gdb.base/dbx.exp +3f46aa7ceb77e97ceda2f2af843ba9cb gdb/testsuite/gdb.base/fork-running-state.c +0845a618f12c1a139a2236a250e27218 gdb/testsuite/gdb.base/whatis.exp +ed2c54b50473e1549b87cc5526065c15 gdb/testsuite/gdb.base/duplicate-bp.c +335750b0fba93330a46c5dac049471f8 gdb/testsuite/gdb.base/dtrace-probe.c +5069db7d4861c43854728d63688cb084 gdb/testsuite/gdb.base/hbreak-unmapped.c +371fa47e081b7ebbe1b692ece0bf4308 gdb/testsuite/gdb.base/reggroups.c +3b5e4e6009a5ac6894c3b138014f5c08 gdb/testsuite/gdb.base/batch-exit-status.bad-commands +b27785f7c3bac377b8d6468bd5a447af gdb/testsuite/gdb.base/print-file-var-main.c +5b3c7fb30a2c7b10fca6dccf0e9ec9cd gdb/testsuite/gdb.base/info-types-c.exp +742ee68303d4dd34167d9b3b1f351336 gdb/testsuite/gdb.base/valgrind-bt.c +69607e6578d2be432d5d7bea15ee4f81 gdb/testsuite/gdb.base/step-bt.exp +70218c5306e21a25080da4981dc34ebc gdb/testsuite/gdb.base/signals.exp +dd5481ba8bbd41f2dab096e25554bf28 gdb/testsuite/gdb.base/checkpoint.exp +5ed6aa01aabf1e5deaf6b3e1d805bbd6 gdb/testsuite/gdb.base/restore.c +ddf33c67b92f5fa289c3bc174177e5e0 gdb/testsuite/gdb.base/restore.exp +58d40db15035503ad58dc36680597a7f gdb/testsuite/gdb.base/execl-update-breakpoints.c +a6d81c1118e429dfc03a76169ea846bf gdb/testsuite/gdb.base/fork-print-inferior-events.exp +ec69b5124df7ad72e7c0ee783f16a705 gdb/testsuite/gdb.base/info_sources.c +6bd347e4d0cab46922baa56480045b5a gdb/testsuite/gdb.base/maint-target-async-off.exp +0e226a8327938d5dd00bfeceb1ab05e2 gdb/testsuite/gdb.base/watch-cond-infcall.c +1efa054c96d677dbaffc0b11c5f86562 gdb/testsuite/gdb.base/branch-to-self.exp +7808515fc974a7c09ec15d40954e7db2 gdb/testsuite/gdb.base/ctxobj-m.c +719fe6e06460bbf021474f10fb172bc1 gdb/testsuite/gdb.base/consecutive.exp +b145c4a15a48abffc652b935f54e7fe8 gdb/testsuite/gdb.base/command-line-input.exp +2a299b12fd88116a35a047813db451e1 gdb/testsuite/gdb.base/multi-line-starts-subshell.exp +ac7d56a291c9816ad3ef912080e96dae gdb/testsuite/gdb.base/hbreak-in-shr-unsupported.c +b85bf0797cd4a199a21b63c5bd74ece3 gdb/testsuite/gdb.base/hashline2.exp +e9e6e7f6508b7c466912804ca7f74a03 gdb/testsuite/gdb.base/whatis-ptype-typedefs.c 875a150f7fd4db096ea08b9acd105dae gdb/testsuite/gdb.base/baz.c -8de63f2afbfa020bd52c23090dc0f2ba gdb/testsuite/gdb.base/cond-eval-mode.exp -37fc223acc3e432875ce6b053e8cfa48 gdb/testsuite/gdb.base/ctf-ptype.c -6f82ab6bcc6ffb91e8928937b34670ba gdb/testsuite/gdb.base/structs.c -9ecb81fea2aa1d9b8f598d1c3f5cf23d gdb/testsuite/gdb.base/page.exp -3c983e5b532493666b8472b0bb2b81e9 gdb/testsuite/gdb.base/memattr.exp -b5b847c858c3360e680195a2c943c6c7 gdb/testsuite/gdb.base/whatis-exp.exp -a562b24b22e17f3d0373b96e825a34f7 gdb/testsuite/gdb.base/return-nodebug.exp -d128a256e96547f440954e684dddd306 gdb/testsuite/gdb.base/remotetimeout.exp -c6a16edc9359f0384e9bb01cc216272c gdb/testsuite/gdb.base/foo.c -dc7f550bbb56b83028a6ed71694347af gdb/testsuite/gdb.base/jit-simple-jit.c -e01a6b2ff97dce03471debf15f785815 gdb/testsuite/gdb.base/nested-subp3.c -39bb46df297fb7a806d1257cb76911cf gdb/testsuite/gdb.base/prologue-include.h -d5502c0fe7d8c507c489dc033762f36c gdb/testsuite/gdb.base/breakpoint-in-ro-region.exp -7ae734d2486540ce55f1adedd50bce7c gdb/testsuite/gdb.base/infoline-reloc-main-from-zero.exp -0dea285c4711123f625d6f3efe4bb75f gdb/testsuite/gdb.base/fork-running-state.c -cb6d0c35fe3b8cd0ba06ed9c066590c5 gdb/testsuite/gdb.base/gdb-sigterm.exp -5fcfba85cf3820c20286af88c2544f7a gdb/testsuite/gdb.base/watchpoint-solib.c -26144cc185ca47845efc69889c47a4ac gdb/testsuite/gdb.base/warning.exp -517950e69c2d5491233b57859e1c7df1 gdb/testsuite/gdb.base/sizeof.exp -756305457739913e4aa3a055f36b474d gdb/testsuite/gdb.base/prologue-include.exp -26c281f06f71e0f7979d9866400a5065 gdb/testsuite/gdb.base/long_long.c -94b9bb3d7b78c1da5db33e95af5809b5 gdb/testsuite/gdb.base/ptr-typedef.c -b3d0da7493a5d5508482ab0ead88ac07 gdb/testsuite/gdb.base/info-var-f1.c -3a0e73d0a7940eef4722fa8eb313a463 gdb/testsuite/gdb.base/set-noassign.exp -88d3d798f0edd5a1f8a85ba97a5d2c4c gdb/testsuite/gdb.base/multi-forks.exp -7f7f489c054219f716667f2f9a7d2807 gdb/testsuite/gdb.base/pie-execl.c -0decbf2a323ccc85d520caabd16fe231 gdb/testsuite/gdb.base/solib-symbol-main.c -e0944cd950609c38ce97c8753745a3f3 gdb/testsuite/gdb.base/siginfo-infcall.exp -d9bb1251e093df97647bb270eb48993f gdb/testsuite/gdb.base/ctxobj.exp -4513c15957eacacec9e17761e4c15b8f gdb/testsuite/gdb.base/sigbpt.c -91a9797c36773f25d2961a2478d37c89 gdb/testsuite/gdb.base/chng-syms.c -2544adef87b98ed32ddd4886fcbf91b3 gdb/testsuite/gdb.base/all-architectures-4.exp -7b5791a30273f01373ffe642a9195d6b gdb/testsuite/gdb.base/hbreak-in-shr-unsupported.exp -5585c0a5788c77200332e20acdec999b gdb/testsuite/gdb.base/gdb1555.exp -f783c64a5f66cd51e97ab411a077d283 gdb/testsuite/gdb.base/continue-after-aborted-step-over.exp -8f4f453875f24f074fe9a0b2c86657f7 gdb/testsuite/gdb.base/solib-display-lib.c -35ce0d1e8a6cc6a278649ec7464d8a1c gdb/testsuite/gdb.base/d10vovly.c -e22783a3ab7f5c409f66edd8cc28992e gdb/testsuite/gdb.base/disasm-optim.S -6806d046fc7a9363a5221fb59fcf5516 gdb/testsuite/gdb.base/relocate.c -bee1da8c0d7add9fa77e9532221526d8 gdb/testsuite/gdb.base/dprintf.exp -df70c420b8795cd8abda6f3866803e24 gdb/testsuite/gdb.base/examine-backward.c -fa3dd6acc4c01a4ae867d84f2cc64d2b gdb/testsuite/gdb.base/sigchld.exp -054d654c460ed518e012ab289d237f76 gdb/testsuite/gdb.base/symfile-warn.exp -894440ca776bb370c09d1bc8033b7653 gdb/testsuite/gdb.base/callexit.c -5920e9c5f28b4f8ad84f2982daecd1d8 gdb/testsuite/gdb.base/stale-infcall.exp -fc866c6696f81ba3b1d6ebdae2f9353c gdb/testsuite/gdb.base/valgrind-disp-step.exp -ccdfe603fe10e27357254b4999c4eefd gdb/testsuite/gdb.base/finish-pretty.exp -146af68ed3cb4157c5fcebff4b914613 gdb/testsuite/gdb.base/break-on-linker-gcd-function.exp -ed44de3a1793ecc90e9dd62027e47625 gdb/testsuite/gdb.base/infcall-input.exp -f5dde87a4a20e38eaa73dcfbfa30aa04 gdb/testsuite/gdb.base/break-unload-file.exp -b6c63d4f480dd06579bba69f866ac22c gdb/testsuite/gdb.base/quit-live.c -cc357c9f5d19cb555338e47b4300008b gdb/testsuite/gdb.base/paginate-bg-execution.c -c41b43e77cd5c0fdbba73d55d602683f gdb/testsuite/gdb.base/watchpoint-hw-hit-once.c -c7322c42cf67aca6b4ca88f3b0429c56 gdb/testsuite/gdb.base/complex-parts.exp -3507c1645dfe0e40f83c0f73f751f180 gdb/testsuite/gdb.base/solib-vanish.exp -e6b4ca3dbfef0be1076126fff6f9418c gdb/testsuite/gdb.base/pr11022.exp -4f094a343a8c6df08c47149a1bafb572 gdb/testsuite/gdb.base/step-over-syscall.exp -fee5302d15d9cd8584d441d21a252afb gdb/testsuite/gdb.base/ending-run.exp -f14c7547a35eaf5e1f97f8bed0a3087b gdb/testsuite/gdb.base/func-ptr.c -11d59001e53c374ebac8759bee4602c1 gdb/testsuite/gdb.base/so-disc-shr.c -00ec98df85e25de117bfb7fe589371c0 gdb/testsuite/gdb.base/break-interp-main.c -1bbd5bc32f4f8b1fd1713f542eda08f2 gdb/testsuite/gdb.base/bitfields2.c -6532c7f3b888558a932202461238c5d8 gdb/testsuite/gdb.base/readnever.c -3edb46a87a3a170229b25a7296c8039b gdb/testsuite/gdb.base/normal.c -8e6ecacbb2700b55ce44c67f1d75e0e9 gdb/testsuite/gdb.base/infoline.c -dd6acd59ee8b3f30aa72fd62bc95261d gdb/testsuite/gdb.base/dprintf-detach.c -edcb0259f19ae97032fa7510904f7d28 gdb/testsuite/gdb.base/catch-fork-static.exp -0abec426bf3ff52d10c0811a5d4ff057 gdb/testsuite/gdb.base/solib-probes-nosharedlibrary.c -2d0733cb7234142961e5ed152ac5bbc7 gdb/testsuite/gdb.base/catch-load.c -29634a0ffaf523c2f5c61460f788a41a gdb/testsuite/gdb.base/exprs.exp -6ce8b21e3e5410e96b21f3e06bf8a0ca gdb/testsuite/gdb.base/ifelse.exp -a2e8ffa58da471a5a21c7ed16983fae3 gdb/testsuite/gdb.base/jit-attach-pie.c -3ded04ef7d04df499cb507429f321c91 gdb/testsuite/gdb.base/nostdlib.exp -71543ec3606404e9b08450274928ff72 gdb/testsuite/gdb.base/new-ui-pending-input.exp -662bc2c47d54ebf385e4fe4ee6524f18 gdb/testsuite/gdb.base/dcache-line-read-error.exp +f7930484d19d9886b500ad72119bee91 gdb/testsuite/gdb.base/gold-gdb-index.h +cf504ef7f8f8df4489afbef87d43f18e gdb/testsuite/gdb.base/execution-termios.c +ead28cb94c3c50b23b806d946162ae74 gdb/testsuite/gdb.base/max-depth.c +c09ba3d3741c40d8f88ac8c2042f5de1 gdb/testsuite/gdb.base/environ.exp +79083b4a2263e905fb5c4a7c22882a2d gdb/testsuite/gdb.base/randomize.exp +06c018befb1691dd66bd59d738338ba5 gdb/testsuite/gdb.base/dup-sect.S +54a204a33a946cbfc5373caff972b280 gdb/testsuite/gdb.base/ctf-constvars.c +67aea0c5a9386c1068bb1f2d2aedc642 gdb/testsuite/gdb.base/gdbindex-stabs.exp +0a90a433b6f7efbeaafa6530ae531171 gdb/testsuite/gdb.base/global-var-nested-by-dso.exp +6196fa71669c0a4a41db60cfd5cf291c gdb/testsuite/gdb.base/fortran-sym-case.c +e132a0bda6a789c75e20e8d4eb4ebc02 gdb/testsuite/gdb.base/consecutive.c +578e497371133feac22dd811b2c5a9a2 gdb/testsuite/gdb.base/examine-backward.exp +498434008ca5f6ab79fc516363614dcb gdb/testsuite/gdb.base/watchpoint-cond-gone-stripped.c +b610d65f58a98449ff59f848e26c5020 gdb/testsuite/gdb.base/opaque.exp +ab0d8c45248fe4ab2e67a9f3a5c55589 gdb/testsuite/gdb.base/jit-reader.c +36593ecf1fc7d4367d0df093f3c5159e gdb/testsuite/gdb.base/setshow.exp +96234528e70e477d75125e801c924e13 gdb/testsuite/gdb.base/bp-cmds-continue-ctrl-c.c +ddfcc023c42dee47ccf49be07ac05ea6 gdb/testsuite/gdb.base/inferior-args.c +31d997d11695252d5206005535c15f39 gdb/testsuite/gdb.base/pc-fp.exp +24b746aa1804bdf4b09de3d130f67ef4 gdb/testsuite/gdb.base/solib-symbol-main.c +2d0d3f1b1029b3b47ec9cb438790fa98 gdb/testsuite/gdb.base/recurse.c +e2925c319e2a1ade4fb0b8a142dbf7f1 gdb/testsuite/gdb.base/bg-execution-repeat.exp +79f306c2137bb2b58f121453d3dbab4c gdb/testsuite/gdb.base/ldbl_e308.c +af6192d32f1466917d576a9c2afb06a7 gdb/testsuite/gdb.base/included.exp +6ed90eba0f8bf329443ce67ca256d572 gdb/testsuite/gdb.base/utf8-identifiers.exp +5d46c162213d19bc4b642364d2468d27 gdb/testsuite/gdb.base/catch-fork-kill.c +71ca725f3cd6426027a62f98eb4a463a gdb/testsuite/gdb.base/quit-live.c +97a617d346c3bfafc28cd81304f2433b gdb/testsuite/gdb.base/info-shared.c +f4e500194fbb102aef0b369bb478e604 gdb/testsuite/gdb.base/vla-stub.exp +ac9840063b3d057fbf201a534e1d1503 gdb/testsuite/gdb.base/type-opaque-main.c +61fde2e57b5846cd4666f914e6ecdfda gdb/testsuite/gdb.base/auxv.exp +ae44610936ec435143ee53f0fc1b0fc2 gdb/testsuite/gdb.base/gcore-relro-lib.c +9319c1bf57968ad0f8c8abba6c1c5198 gdb/testsuite/gdb.base/disasm-end-cu-1.c +26066e641f8a3504a38a1abbac7aab54 gdb/testsuite/gdb.base/solib-overlap.exp +a4255819738dab054ac8a8678cc06138 gdb/testsuite/gdb.base/valgrind-bt.exp +32f2f9cf1414a7f35e02d5ebe849f19c gdb/testsuite/gdb.base/all-architectures-5.exp +2c53b0ba4e8f11125356b0f61c524083 gdb/testsuite/gdb.base/call-strs.exp +8c99cdf0fd18e7beb0f18c2bfcbc0695 gdb/testsuite/gdb.base/starti.exp +eb1a1ac847358514aaf9455ffd7a30ea gdb/testsuite/gdb.base/constvars.c +34c5e0aa747756ed3c32f6b53b0a7c5b gdb/testsuite/gdb.base/valgrind-disp-step.c +4ff21a14b7dc1bea57ed572c9d382da3 gdb/testsuite/gdb.base/whatis-exp.exp +fa095e6c63c7a12bc15d2cc7027a8f29 gdb/testsuite/gdb.base/break-main-file-remove-fail.c +ec2bb96c09a5ecce82f6df3fd496f166 gdb/testsuite/gdb.base/gdb11531.exp +460ab88db5ac8ff11b3fff96bec924f8 gdb/testsuite/gdb.base/auto-load.exp +1294bd559135f9419425868c70ce74d4 gdb/testsuite/gdb.base/break-idempotent.exp +661ec6b8c68166767ed0dd56860284ac gdb/testsuite/gdb.base/dprintf-next.exp +9a6c19c9d2d253351e515e22d7e9c400 gdb/testsuite/gdb.base/dprintf-detach.exp +a69cef18f004ad9595efe7e1a3eeff1c gdb/testsuite/gdb.base/relativedebug.exp +f7c39a11221c2d9946c5b9785749358c gdb/testsuite/gdb.base/skipcxx.cc +e92fcefe889e37a5874a925307899fac gdb/testsuite/gdb.base/pie-execl.exp +c2f1f6933f9fba928d68de6aaa4acfe9 gdb/testsuite/gdb.base/paginate-after-ctrl-c-running.exp +9cdc9e1ac8316f0cecbd42f2d24b8caa gdb/testsuite/gdb.base/filesym.c +a19b23e9b24e5202b6e4b0cc1489b4a9 gdb/testsuite/gdb.base/ptype.exp +2636a967ec8cc5e0fa459530c29faf62 gdb/testsuite/gdb.base/find.exp +273ffe80fe832f1f8d778cf866bc166f gdb/testsuite/gdb.base/sizeof.exp +05170b6c4f7242ff3ffd94a87694fbae gdb/testsuite/gdb.base/cursal.c +6f08a1007138995d690f143eb716eef1 gdb/testsuite/gdb.base/pie-fork.c +0b26e122a75f32b919dc2eeb36e22ddf gdb/testsuite/gdb.base/reread-readsym.c +fbf2c395cdf705638db7c41e8192a4f8 gdb/testsuite/gdb.base/attach-pie-noexec.c +363c28455a64798ab36addaa51f03ae3 gdb/testsuite/gdb.base/watchpoint-unaligned.exp +1c9875dd7c883aa403bb4947bd9149f1 gdb/testsuite/gdb.base/source-execution.exp +3bd870897ba30397d6805708f72189d6 gdb/testsuite/gdb.base/break-caller-line.exp +eb57a8b0c7d63e9ceb67b82029b54117 gdb/testsuite/gdb.base/args.exp +6c9997b74cc0a2a08bc608fcdb668659 gdb/testsuite/gdb.base/infcall-nested-structs-c.exp +cfdd2c0bdfd0a905c85ede3a77aafe71 gdb/testsuite/gdb.base/disasm-end-cu-2.c +ddb2cf2d7fb375e92af8d711a7b97a8c gdb/testsuite/gdb.base/foll-exec.exp +50a1dde6b74477cf172969327c2ced22 gdb/testsuite/gdb.base/msym-lang.c +dbf5e788327e99af83ae291cdef4ade8 gdb/testsuite/gdb.base/testenv.c +d0573b65cfb00f49124813f65b36840b gdb/testsuite/gdb.base/term.exp +d534ccb6f8561af80bd43645e3ea5874 gdb/testsuite/gdb.base/complex.exp +332ffa66dd94a88f8ec0debb0744b628 gdb/testsuite/gdb.base/cursal.exp +0a884946370cdcd6aee35c80cd1a480f gdb/testsuite/gdb.base/start.c 06a92d148b60fd5c50de17ed658ab73e gdb/testsuite/gdb.base/shreloc2.c -71050b19f6f36e1c4d41b1eda157e67b gdb/testsuite/gdb.base/siginfo-thread.c -cd27d4c21727c4d8e362dc6ba03130b5 gdb/testsuite/gdb.base/sym-file.exp -af2a573f6cd3ed8447b0ec5a2d8764af gdb/testsuite/gdb.base/gdb1555.c -6a09e28f28c4dd6a7046b96703b80d65 gdb/testsuite/gdb.base/solib-corrupted.exp -cd829786309dd46175d0ab4da32d1c08 gdb/testsuite/gdb.base/radix.exp -8564fa5a89076c145f06d7b7b022d148 gdb/testsuite/gdb.base/shreloc.exp -9dbfcb99af268b2fcca30a7470631206 gdb/testsuite/gdb.base/step-over-clone.c -bc210cb3adc714e78324060316633251 gdb/testsuite/gdb.base/line-symtabs.c -4671c0184d3edd9897735feeceef04e1 gdb/testsuite/gdb.base/bp-cmds-execution-x-script.exp -3ba6a93f4b2cfe0ea5f134bb4cce9d18 gdb/testsuite/gdb.base/langs1.f -7eb46c629e8f0e28ef529ac33e847cca gdb/testsuite/gdb.base/exitsignal.exp -3c3c879ecdbc56a86ddde84479672e59 gdb/testsuite/gdb.base/setvar.exp -56b9422ae13516df279b7e301b198493 gdb/testsuite/gdb.base/symtab-search-order.exp -ee735561730dd6f1ab2f6f9cf205ed34 gdb/testsuite/gdb.base/attach-twice.c -9a964c0185425d2197ab7b08f880a57a gdb/testsuite/gdb.base/call-sc.exp -7764958cea59e7931d42c1aa9b261b2b gdb/testsuite/gdb.base/infcall-exec2.c -48371524127763dd884c31378fa13ffc gdb/testsuite/gdb.base/reggroups.exp -1ee03b2db81fa8e63e59c0efd22c74b0 gdb/testsuite/gdb.base/break-entry.exp -a588070604e01ce61b76dbc461879056 gdb/testsuite/gdb.base/finish-pretty.c -06e344f809c2ea6464d8e72ed2ea6afe gdb/testsuite/gdb.base/watchpoint-delete.exp -1d7dfbb647b6cb44829055a299d2a7be gdb/testsuite/gdb.base/interp.c -f81c5ec74607727a027fc37a125b536c gdb/testsuite/gdb.base/set-lang-auto.exp -58dfa8f97a8d8617999b835cc08e32d0 gdb/testsuite/gdb.base/dfp-test.c -c4184a9a222ca7ebdaa55b7c7137f660 gdb/testsuite/gdb.base/breakpoint-shadow.c -9c2e7d4e881bbcfc34cef5c93c4a2921 gdb/testsuite/gdb.base/find.exp -ba6c1a3aa00d9097d0df97780117b48d gdb/testsuite/gdb.base/unloadshr.c -50108317e42945a5e0e3b3ac4e87134b gdb/testsuite/gdb.base/range-stepping.exp -9810ea754409257ca0ad70291d4d6bdb gdb/testsuite/gdb.base/a2-run.exp -893afcf1fd90a225e328dbdd04a7d306 gdb/testsuite/gdb.base/define-prefix.exp -15f5d24e33edb6d6bf30f991e12481ee gdb/testsuite/gdb.base/dso2dso-dso1.c -7917f3d1ef819aadd582ec98629d7563 gdb/testsuite/gdb.base/debug-expr.c -81cb35708a8c3c5093cacefdcd1cac46 gdb/testsuite/gdb.base/watchpoint-stops-at-right-insn.exp -9cadfc3fb5e7e1a62fd1084e201965f1 gdb/testsuite/gdb.base/float128.exp -18111895890300bcf3d9834c8f1d146f gdb/testsuite/gdb.base/prologue.exp -144010bfb75b63aaad100bb42f15977e gdb/testsuite/gdb.base/return-nodebug.c -81e1450d1e4c67b1ee4e0eeabe7fa869 gdb/testsuite/gdb.base/new-ui-echo.exp -21a8f92cb84b6d26370597a9f1f1e9fa gdb/testsuite/gdb.base/sepdebug2.c -76cfdea5eda0ea58c7bcc6de3cd1e150 gdb/testsuite/gdb.base/dso2dso-dso1.h -1158063950d9f3ba20ec41bab840d0e1 gdb/testsuite/gdb.base/auto-load-script -98228bf3f488a90ab30be8b14362dab4 gdb/testsuite/gdb.base/pr11022.c -f2ccf70de56f3369e14271b6d1e2ee5f gdb/testsuite/gdb.base/step-sw-breakpoint-adjust-pc.c -b64c7d1bb2de6c3849430588f5da919f gdb/testsuite/gdb.base/watch-read.exp -711cb9982dc820d29e55e9893e58d49c gdb/testsuite/gdb.base/step-sw-breakpoint-adjust-pc.exp -d227cd5acdb0fca7bc3bc43b226fcf96 gdb/testsuite/gdb.base/pi.txt -4f292f8a51ae36813180a14f1f9e5b96 gdb/testsuite/gdb.base/solib-search-lib2.c -5cf68afaf21112dbd52a5dc5343eb65c gdb/testsuite/gdb.base/huge.exp -664fa9e239a4e4726e9d8cbc3d1494a6 gdb/testsuite/gdb.base/info-proc.exp -405100b8b7792d7fa6da403ecec45587 gdb/testsuite/gdb.base/bigcore.exp -f8224989d6a594a0c13caa3e07c2c96e gdb/testsuite/gdb.base/watchpoint-reuse-slot.exp -2c6e4f3f1b684c02aa0b054805700ea9 gdb/testsuite/gdb.base/lineinc.exp -a32c7a0eb282bd1f69f6fc80579d4636 gdb/testsuite/gdb.base/float.c -dca1d188872b5db5a305fadb38a6b558 gdb/testsuite/gdb.base/inferior-died.exp -bc0140f370ee266ca9315827a2efc0ea gdb/testsuite/gdb.base/starti.exp -c5ada01e5983193c3a08679c41646c52 gdb/testsuite/gdb.base/sigrepeat.c -6a4a4a482af731b7a8effa3c25285185 gdb/testsuite/gdb.base/all-architectures.exp.in -eda315f0884c68e2b57f266ad9a81c0e gdb/testsuite/gdb.base/ctf-ptype.exp -e33f3eea7d6105e0265ef823ed34ffc7 gdb/testsuite/gdb.base/all-types.c -c90e022fb5ef3df8a5639df233f9c350 gdb/testsuite/gdb.base/langs2.cxx -011f5f5b20ea7e7167352586a4a18b67 gdb/testsuite/gdb.base/dup-sect.S -ffcdcd9c256dff44d0d51cdf8280e73a gdb/testsuite/gdb.base/step-line.inp -51e077ad59c75166685a3fcd668ff0df gdb/testsuite/gdb.base/skip.exp -7ab0f88ca2b0b4eaffa9df47fe0772be gdb/testsuite/gdb.base/dprintf-next.exp -cda40c8409dda501146e1202794fd80b gdb/testsuite/gdb.base/gdb11531.c -9e6f977ea5dde5022a34fd36e2b8b6cd gdb/testsuite/gdb.base/solib-probes-nosharedlibrary.exp -5edc6c5caf0897474b29351e9e3906b7 gdb/testsuite/gdb.base/gdb1250.c -602c39369c2b783ab8b2c5583ee205db gdb/testsuite/gdb.base/break-on-linker-gcd-function.cc -845f42541b42ba5f44ffc196cc0bcac1 gdb/testsuite/gdb.base/large-frame.h -e4a7d2d038ae1adeb227cdaa48b1d2d5 gdb/testsuite/gdb.base/break-include.exp -5134f334765fbe07722d2f5411d92b18 gdb/testsuite/gdb.base/branch-to-self.exp -f50456115ff495897fb0750de285e89c gdb/testsuite/gdb.base/auto-load.exp -316b490b48bde4ca5fa8f6c333b4d1f8 gdb/testsuite/gdb.base/symlink-sourcefile.exp -6756046c5151b97b2260ad166387e6b5 gdb/testsuite/gdb.base/print-file-var-main.c -e315e0bcd3e662af006b204fa08aa79e gdb/testsuite/gdb.base/func-ptr.exp -5cd9ed2a59fad7c3f3de35cb032b6aee gdb/testsuite/gdb.base/advance.exp -ac463902a31f2fc7bf0ba83dbc132964 gdb/testsuite/gdb.base/whatis-ptype-typedefs.exp -9f5eba6262290fab7178547ae872e8fb gdb/testsuite/gdb.base/style-logging.exp -bd60636d59deedb3d54a88c3a0dc8488 gdb/testsuite/gdb.base/randomize.exp -c19b5359afa55c1b6ee38be7ffd3530d gdb/testsuite/gdb.base/disasm-optim.c -972095292e012f9b2c9fb2b44bef31eb gdb/testsuite/gdb.base/infnan.exp -b12fdfb43a362ac49c3ecd3668826fff gdb/testsuite/gdb.base/multi-forks.c -83b48b3a382b9a57e9cbc4439b00a16e gdb/testsuite/gdb.base/fullname.c -e47c59e929c318b20fbe734cd6cc7f27 gdb/testsuite/gdb.base/disasm-end-cu-2.c -dbfcac0e69a636942e22be1a7504cddc gdb/testsuite/gdb.base/sizeof.c -6cf8bf42510dd24a9738a4c7ec1516a3 gdb/testsuite/gdb.base/floatn.c -3764973c71d5aa701031b4e66fd276d3 gdb/testsuite/gdb.base/shreloc.c -eeaa631f1c4acdf04d0be999e8fc21fd gdb/testsuite/gdb.base/callfuncs.c -36e9543b1e4e492b2ecd5d4076b8dcaa gdb/testsuite/gdb.base/libsegfault.exp -0a6ed3bf3df1f804b57d86b7fa1dd8e5 gdb/testsuite/gdb.base/msym-lang.c -8f54cc5ea0ca5e6d9e4eac3194b9edc3 gdb/testsuite/gdb.base/pretty-print.exp -4e846c39a3f6aa39e04b50d7f36ee7d0 gdb/testsuite/gdb.base/watchpoint-cond-gone.exp -676c95a85bf679ef025fcc1de01d2d70 gdb/testsuite/gdb.base/step-symless.c -9b249094a36f9f82f60e3dc0a01cb52d gdb/testsuite/gdb.base/gdbinit-history/zero/.gdbinit -f2a43a61ad25b5af403705b7001ff2d7 gdb/testsuite/gdb.base/gdbinit-history/unlimited/.gdbinit -0f060572d36820ed6b5d7e8efa2d455d gdb/testsuite/gdb.base/alias.exp -ed9436a55d903c73e8e9fceef2bafbc0 gdb/testsuite/gdb.base/anon.exp -c5d6ba05ea1de01b13cf48ebd550b738 gdb/testsuite/gdb.base/pie-fork.c -f21067872a5a995952fcc75251eb8a0f gdb/testsuite/gdb.base/coremaker.c -fbc435f3925c8eb96f0d0e11d04f1d80 gdb/testsuite/gdb.base/infcall-nested-structs.c -02e16ed97087f46e3e5e51db81817cc5 gdb/testsuite/gdb.base/kill-after-signal.exp -3f0e47ae199e5b47d8e86370dc80d37e gdb/testsuite/gdb.base/index-cache.exp -b3b29bca26f5455374c32df0fb7bf9eb gdb/testsuite/gdb.base/attach-twice.exp -b974d4cb1bd3be038c295815e5c2ad0e gdb/testsuite/gdb.base/until.exp -db693e02009ce40817e31d4fb90c09f8 gdb/testsuite/gdb.base/watch-bitfields.c -c4b4439e10bb04f562d78c84840d21cc gdb/testsuite/gdb.base/new-ui-echo.c -39c4c0bf57005e82060d5c30d191ed0d gdb/testsuite/gdb.base/siginfo-infcall.c -a9ea42ee2825174fa94df8484846b35e gdb/testsuite/gdb.base/frame-args.c -7795f27d3493b8a545e87cd368380b65 gdb/testsuite/gdb.base/skip-solib-lib.c -80e2701913fc015cc611d9d5f6ca27f7 gdb/testsuite/gdb.base/print-symbol-loading-main.c -3b5ff1f729c40d9c4a98118ff08a9e6b gdb/testsuite/gdb.base/annota1.c -99ac3aedc68384883f796127ba69f7a9 gdb/testsuite/gdb.base/solib-display-main.c -bbe365e662862df7e4e771e83ee570b4 gdb/testsuite/gdb.base/bp-cmds-execution-x-script.gdb -b56edfdf46acc0a697b92250059fd361 gdb/testsuite/gdb.base/attach-pie-misread.exp -8ec375e4e808961eadb6821fc9cc9ff2 gdb/testsuite/gdb.base/disasm-end-cu.exp -4246873dc7c57a95909de7482886b7ae gdb/testsuite/gdb.base/scope.exp -0327b50c8e7047ca2385e553fc0872b6 gdb/testsuite/gdb.base/catch-signal-siginfo-cond.c -733d52857220139bfc609237f6846643 gdb/testsuite/gdb.base/global-var-nested-by-dso-solib1.c -19831ba54bcb6b954686e98ce69b2970 gdb/testsuite/gdb.base/opaque.exp -52c9f0973b6aa411e5b50eeabab403e7 gdb/testsuite/gdb.base/break.c +80806b58e30410004bb08bdbe7f7ab66 gdb/testsuite/gdb.base/prologue-include.c +74e6a1bd1c06ace5f1e5b7c7c6c4806e gdb/testsuite/gdb.base/interrupt-daemon.c +07d36c00122965056ded12f4612da6e1 gdb/testsuite/gdb.base/watchpoint-hw-hit-once.exp +7ae84fde750c585b7199f9bc517169cb gdb/testsuite/gdb.base/vla-struct-fields.exp +9c3ddce5dd23ff629528723f932a0de0 gdb/testsuite/gdb.base/step-test.exp +fadb717d72b9f5ce2c8efd09ea299b3e gdb/testsuite/gdb.base/skip-solib-main.c +cd24c43d3a148366d913c96d6ea34f8c gdb/testsuite/gdb.base/utf8-identifiers.c +f54a2083422eea1d52f16e3bbc40d549 gdb/testsuite/gdb.base/gdb1250.exp +34606d628233a9c37c11aa70d146bf37 gdb/testsuite/gdb.base/random-signal.exp +20cbef86a0e4b4e1823af72beed65ae1 gdb/testsuite/gdb.base/eh_return.exp +5ce52280b1160335f78ee5bf10050333 gdb/testsuite/gdb.base/enum_cond.c +18a49ceae996869f718980356f5f6b45 gdb/testsuite/gdb.base/shreloc1.c +6cb563fccff5c9e6a5937003cb918ecd gdb/testsuite/gdb.base/maint-expand-symbols-header-file.c +4614b7f78bdb3b83b36d1674419d774e gdb/testsuite/gdb.base/solib-nodir.exp +0e2c9f73694ffcea44fcd6cc7c7c3e31 gdb/testsuite/gdb.base/gdb1250.c +dfaa3efaa2e465349675b75c85bd7a4d gdb/testsuite/gdb.base/shmain.c +291342169e3a7707219cef0342a2e01b gdb/testsuite/gdb.base/wrong_frame_bt_full-opaque.c +9d36a79da45eaf0ba050c5663ed9c2fd gdb/testsuite/gdb.base/new-ui-pending-input.exp +0680aad6c0d9711c442a0fae09d20851 gdb/testsuite/gdb.base/coredump-filter.c +0881a55dae10b102f03d690060836296 gdb/testsuite/gdb.base/ptr-typedef.c +ed768a38eb5e1aa71a57b3e2a43c3433 gdb/testsuite/gdb.base/vla-optimized-out.c +474e7ee497dd22cbc6eaca600dc6a9ea gdb/testsuite/gdb.base/pretty-array.c +f8d7279ed4aca1a8a555f6e310c99a43 gdb/testsuite/gdb.base/step-line.exp +9e216bdf152fa2279be76297719d315d gdb/testsuite/gdb.base/solib-display-lib.c +43012198816e4918dc74f3d5a5d3f634 gdb/testsuite/gdb.base/infnan.c +845fd60a61ef2785752b6f9afd918d87 gdb/testsuite/gdb.base/step-line.c +ba8918a2a7701782a5d69c120aaef93b gdb/testsuite/gdb.base/hbreak2.exp +b6f5778850218f82d539319bac38877b gdb/testsuite/gdb.base/vla-struct-fields.c +c51a6eb496189ca8f090bea8cf95cd58 gdb/testsuite/gdb.base/solib-weak.c +3610f280028c534057d31a005a8bf114 gdb/testsuite/gdb.base/nested-subp3.exp +ef25e201fc9ca3116f05c3e8c2a0a982 gdb/testsuite/gdb.base/catch-follow-exec.c +d9cec06559fe2a3431a51a59814b4aca gdb/testsuite/gdb.base/watchpoint-reuse-slot.c +dbe412dc554097956e91147ab84613aa gdb/testsuite/gdb.base/finish-pretty.c +562ec470703557d1b378705714481b30 gdb/testsuite/gdb.base/fixsection.c +8d4a77c62bb2e16b92ec8d5a5d6a3874 gdb/testsuite/gdb.base/style-logging.exp +aa4a5ade32cd908e1f41151940790268 gdb/testsuite/gdb.base/sss-bp-on-user-bp-2.c +bc9a0aebb240f6708a336758e14db855 gdb/testsuite/gdb.base/shell.exp +59bd6f803659c43873d6a24d29d537b4 gdb/testsuite/gdb.base/attach-pie-noexec.exp +279200f27d47bcaaa83276b54af1fbeb gdb/testsuite/gdb.base/advance.exp +ceaf5030a7ad1a37c6ecd3fb761c8be7 gdb/testsuite/gdb.base/stack-protector.exp +5c6c88e6c9bdb68bd97e92571cc1bb1d gdb/testsuite/gdb.base/varargs.c +91a9797c36773f25d2961a2478d37c89 gdb/testsuite/gdb.base/chng-syms.c +e699970e2c6990ce3ddd8beb52da20e4 gdb/testsuite/gdb.base/varargs.exp +28a2fee819455211250265c529dbf07e gdb/testsuite/gdb.base/large-frame-2.c +a2c44e2737387a7b44ade2cbccea1861 gdb/testsuite/gdb.base/sym-file-loader.h +a67113eccd3972b2b3fe97f6c48fff2a gdb/testsuite/gdb.base/gnu_vector.exp +929fa929f0abd39c9adb5a9be96e7301 gdb/testsuite/gdb.base/step-over-exit.exp +aa1682f40a3db37d1602c5be5c911686 gdb/testsuite/gdb.base/endianity.c +091cdd80f9743f22f5f521d3a0e03a34 gdb/testsuite/gdb.base/funcargs.c +ce678664f6bc00a34eb4534e1cd61e0d gdb/testsuite/gdb.base/recpar.exp +ec373d2cd4929fe4193f8503aa77c48a gdb/testsuite/gdb.base/sym-file.exp +bab08393fc34c90a0f2648aa9c3b90b6 gdb/testsuite/gdb.base/with.c +616800dba798fae34e783f497d317a0f gdb/testsuite/gdb.base/complex-parts.exp +6da949d60adb1604ff947ed605b4c5b5 gdb/testsuite/gdb.base/arrayidx.exp +23b11a21539075403cebeb39ee9a0b92 gdb/testsuite/gdb.base/dcache-line-read-error.exp +7305c5d728bd1bd3208604aad8d3ec2c gdb/testsuite/gdb.base/catch-signal-siginfo-cond.c +6074a840271deb78844bfb5c982f0506 gdb/testsuite/gdb.base/info-macros.exp +0b6b6f12c12dd2786484b46c34cdafe7 gdb/testsuite/gdb.base/info-program.exp +b3714afbc85ddafda053f5ad0671d038 gdb/testsuite/gdb.base/endian.exp +42ad1322b4bd5cd34dd3b4bb84f30e66 gdb/testsuite/gdb.base/solib-vanish.exp +1cc1a38a2e7a32831e3c65e474346f10 gdb/testsuite/gdb.base/auto-load-script +4d614aeead1cc001acd09f1e1aae89db gdb/testsuite/gdb.base/jit-reader-execd.c +8ea96828ffc1bdc88ec32b58fd378eed gdb/testsuite/gdb.base/break-include.inc 419ed3ef1cdc35f550df83f7dcc77f2f gdb/testsuite/gdb.base/anon.c -f6a96ae4d88de9220856194dacc8c9c8 gdb/testsuite/gdb.base/lineinc2.h -f69fbbf4514c7b77f27e6065b2e2729f gdb/testsuite/gdb.base/relativedebug.c -ba670b72741d901419e15fa374cb813c gdb/testsuite/gdb.base/setshow.c -6e7b2781a6f9a3bd30213c608112d88f gdb/testsuite/gdb.base/define.exp -4b53c59a7ff6d1a41cd2e05e72c09b14 gdb/testsuite/gdb.base/breakpoint-in-ro-region.c -2aaeeae8d7cf97b9484b0578f796624b gdb/testsuite/gdb.base/starti.c -b7f916cc668dc86f44a64d9ceb43a50f gdb/testsuite/gdb.base/solib-vanish-lib2.c -542b6919d682cbe3dec4cae3d48b8de2 gdb/testsuite/gdb.base/info-program.exp -ba79b64c69f7aafcd9d3e17704378bf8 gdb/testsuite/gdb.base/compare-sections.exp -2e7c946c8a9fa2d2948e915b6f0b5149 gdb/testsuite/gdb.base/annota-input-while-running.c -a9e07daf780abfa4e780a13a201b3e7c gdb/testsuite/gdb.base/cvexpr.exp -38c7d8e0a8b57af7d2871c8290fececc gdb/testsuite/gdb.base/sigrepeat.exp -d393110d011f419c67aba576d61d3cd8 gdb/testsuite/gdb.base/watchpoint-delete.c -96fc44f37ace303deed026d56d7bbe9d gdb/testsuite/gdb.base/bitops.exp -c9a342cc4875515bbfced95257e231be gdb/testsuite/gdb.base/max-value-size.exp -94c1f1818c9234b5e8e7669b457865c1 gdb/testsuite/gdb.base/bar.c -49f8c276e4a9864513ed77c97829785d gdb/testsuite/gdb.base/list-ambiguous1.c -9db5c7e9953b8d7d5a3731379016f1e2 gdb/testsuite/gdb.base/catch-syscall.exp -7e71171135422c35a6e2f9519ac8a06d gdb/testsuite/gdb.base/gnu_vector.c -b76facafc9c2c5cc16126689ca658ba4 gdb/testsuite/gdb.base/step-indirect-call-thunk.c -201592667519a19b6e9d4d3fac352167 gdb/testsuite/gdb.base/expand-psymtabs.c -d52a38888b6f4cc6e265ccc773fab984 gdb/testsuite/gdb.base/batch-preserve-term-settings.c -4680048366f633d35b5ab8e5f6e2bc72 gdb/testsuite/gdb.base/dprintf-bp-same-addr.c -dad547953a09186bb7683f4f03587341 gdb/testsuite/gdb.base/vla-optimized-out.exp -86ecd811e5fd7136a4e60dfd84a8115c gdb/testsuite/gdb.base/jit-exec.c -c7899e07885553c9208663158ce9e16d gdb/testsuite/gdb.dwarf2/typeddwarf.exp -f3bafc8a50b440ba99844c486865214c gdb/testsuite/gdb.dwarf2/dw2-ada-ffffffff.exp -48ac23efe1761ca0f3435f40d0a157a1 gdb/testsuite/gdb.dwarf2/dw2-op-call.S -62db603030b8344da7273321f9211ff0 gdb/testsuite/gdb.dwarf2/dw2-intermix.S -ddde307bba22525540af095283630502 gdb/testsuite/gdb.dwarf2/typedef-void-finish.exp -04537f0b6a2f89e8015edbed78ab177b gdb/testsuite/gdb.dwarf2/dw2-inline-param.S -2768e08397b3061a75baaa7c7f2bfec3 gdb/testsuite/gdb.dwarf2/watch-notconst.c -221371fc128c0ff0bd3ab15a074b243e gdb/testsuite/gdb.dwarf2/typeddwarf.c -8e08e49bdd2c850b1e2fcd988cbeed84 gdb/testsuite/gdb.dwarf2/dw2-inline-break.exp -296a3c28f51c421fc3b18810cbdd3d72 gdb/testsuite/gdb.dwarf2/dw2-canonicalize-type.S -7889262ad4e57e776f6ff2a5eb181348 gdb/testsuite/gdb.dwarf2/dw2-ranges-psym.exp -44eba03718fe515811941a44ff9c8414 gdb/testsuite/gdb.dwarf2/dw2-compressed.exp -daf7275b48424acdfc659414338f304f gdb/testsuite/gdb.dwarf2/dw4-sig-types.cc -09e7a6b5c9ff594d4475a9c01d4b0f3d gdb/testsuite/gdb.dwarf2/dw2-error.S -931b2bc55047e4d3a3ca28a947e63220 gdb/testsuite/gdb.dwarf2/dwzbuildid.exp -4f177f6cec16f94f7c35c6f1b90f0c31 gdb/testsuite/gdb.dwarf2/dw2-minsym-in-cu.S -7e527a089f23804cb8bc39cebc7c8bd4 gdb/testsuite/gdb.dwarf2/dw2-restrict.exp -26e43db89c3c2c1123b1e1d39d93824f gdb/testsuite/gdb.dwarf2/method-ptr.exp -846bebeb869eec1291a1d840bad85111 gdb/testsuite/gdb.dwarf2/dw2-single-line-discriminators.S -de47ba966ca9d5f3995129760f2d51f4 gdb/testsuite/gdb.dwarf2/dw2-bad-unresolved.c -1f73e2275baa38152b2ba3dc27d8200d gdb/testsuite/gdb.dwarf2/dw2-var-zero-addr.S -3026287d2cac98023b328ddfdb6dd34c gdb/testsuite/gdb.dwarf2/main-subprogram.c -42ea5eaee4f7587411a56de7d79ae678 gdb/testsuite/gdb.dwarf2/var-access.c -f5f8a5fc76bb8800636e0eb96b6233df gdb/testsuite/gdb.dwarf2/dw2-single-line-discriminators.c -dd38fade46f8e7eaefdc534194cc1c6f gdb/testsuite/gdb.dwarf2/pieces.exp -980252384e6db5592b852015d8ca5186 gdb/testsuite/gdb.dwarf2/dw2-namespaceless-anonymous.S -25e828466b9d043c0db4096ea5183528 gdb/testsuite/gdb.dwarf2/varval.exp -a51fc1fae9e84ff18c89b9f32010f232 gdb/testsuite/gdb.dwarf2/dw2-inheritance.exp -f5e59cb2070e73ad8c5b3e0534c17587 gdb/testsuite/gdb.dwarf2/dup-psym.S -f7033d49513eb29f51a1b75bf7dc639b gdb/testsuite/gdb.dwarf2/main-subprogram.exp -fb5cd0228e37986ee4407787ab3348e4 gdb/testsuite/gdb.dwarf2/dw2-dup-frame.c -3c532c1d69bfe7bb4d67ef5ef97563f6 gdb/testsuite/gdb.dwarf2/implref-global.exp -5446fb9530da099320ec717f5dcb705d gdb/testsuite/gdb.dwarf2/pr11465.S -9e3ce06b8629b978318959656789b1ec gdb/testsuite/gdb.dwarf2/dw2-ranges-func.exp -350e0451612be71f2bdd709e9557032e gdb/testsuite/gdb.dwarf2/main.c -2e2787fdfe51f6040f66682540532e73 gdb/testsuite/gdb.dwarf2/dw2-dummy-cu.S -ecdd6768606d9b26bd2882e182c9ba22 gdb/testsuite/gdb.dwarf2/fission-multi-cu.exp -74df0b847f114cda9deb3542213e05fa gdb/testsuite/gdb.dwarf2/dw2-compdir-oldgcc.exp -115f2efff5165020cc98b7db9ee49b5f gdb/testsuite/gdb.dwarf2/mac-fileno.S -91b852bd9256d48251bc1ff5b71e37bd gdb/testsuite/gdb.dwarf2/implref-const.exp -30c9300c21baec2a8dfb710f2f2a2ab3 gdb/testsuite/gdb.dwarf2/pieces-optimized-out.exp -72d3e101d3c449e70f8e3f0f07a5fb07 gdb/testsuite/gdb.dwarf2/dw2-abs-hi-pc-hello-dbg.S -551494211571b3092471e9f9ea1d1273 gdb/testsuite/gdb.dwarf2/fission-multi-cu.S -db6f941f5e37513046dd30328ef2fe1e gdb/testsuite/gdb.dwarf2/dw2-const.S -f79201ef672dd8b5b6b73caa3fed405b gdb/testsuite/gdb.dwarf2/dw2-ranges-func-lo-cold.c -8e6f89c35f6dca800fb26edd5f59cfae gdb/testsuite/gdb.dwarf2/dw2-strp.exp -d0b530efebdb8f0c141f32f8425a575e gdb/testsuite/gdb.dwarf2/dw4-sig-types.exp -71d98dd75d5c22e0e33a139ce0f5b232 gdb/testsuite/gdb.dwarf2/pr13961.S -391c1866f43fbf46394d40223ec3a696 gdb/testsuite/gdb.dwarf2/mac-fileno.exp -cda498700a8047a8110bbcfb5ea11886 gdb/testsuite/gdb.dwarf2/dw2-intercu.exp -0acb63e8327e5e5571aa2f676398b4c1 gdb/testsuite/gdb.dwarf2/dw2-icc-opaque.exp -c900a64424903dff27c3087a251fc6c0 gdb/testsuite/gdb.dwarf2/dw2-undefined-ret-addr.S -79add4e78e69974927bf72f3d3d529cb gdb/testsuite/gdb.dwarf2/dw2-entry-value-main.c -90b63ebf92eb684a8908897d055b988b gdb/testsuite/gdb.dwarf2/formdata16.c -0f65491a6b40f596fb5fc6ed179df682 gdb/testsuite/gdb.dwarf2/dw2-unresolved.S -bfeecd96b383e17c6c016fc31c1b3000 gdb/testsuite/gdb.dwarf2/dw2-single-line-discriminators.exp -b56619ba4f5804b68c7760a75225ef49 gdb/testsuite/gdb.dwarf2/bad-regnum.exp -e64b0cb46ed0e1f592ee5889f6afb394 gdb/testsuite/gdb.dwarf2/bad-regnum.c -4cc6c5c3f000f71ba09dde614d7b539f gdb/testsuite/gdb.dwarf2/dw2-reg-undefined.S -0cfab35c808b92b6cdae727168bc9925 gdb/testsuite/gdb.dwarf2/fission-multi-cu1.c -396bd641e994aaeb626d7af189842511 gdb/testsuite/gdb.dwarf2/dw2-simple-locdesc.exp -370140de091ebf770b163d4862dad53f gdb/testsuite/gdb.dwarf2/dw2-unresolved-main.c -59b664a336c6bf0f935c0d88bd974423 gdb/testsuite/gdb.dwarf2/dw2-error.exp -a3e10739d8f67ccc67aa8e8b0bd54860 gdb/testsuite/gdb.dwarf2/corrupt.exp -04c0c495f091fa932005890a34670eeb gdb/testsuite/gdb.dwarf2/dynarr-ptr.c -3915ce61899272b81af3c320e61151df gdb/testsuite/gdb.dwarf2/member-ptr-forwardref.exp -9a12e0319141fb8d6fc4771501bf79c3 gdb/testsuite/gdb.dwarf2/implref-array.exp -85adf90c966ad582676f7a525ecf6138 gdb/testsuite/gdb.dwarf2/dw2-case-insensitive-debug.S -1f4328dca3a99027453695e603e873cd gdb/testsuite/gdb.dwarf2/variant.c -f57249a7d725804037406c02eeb8d6d2 gdb/testsuite/gdb.dwarf2/typeddwarf.S -bacd95d9908c7e983c682c5b34190022 gdb/testsuite/gdb.dwarf2/fission-mix.c -027faca7002148363f59a0c64ca2a1db gdb/testsuite/gdb.dwarf2/dw2-empty-pc-range.exp -38c0d26f4017b32efc18cb7a28b3feb7 gdb/testsuite/gdb.dwarf2/dw2-anonymous-func.exp -7c86d0fd1e430337c7f9d5cb6f17266a gdb/testsuite/gdb.dwarf2/implptr.exp -39a1f8ebc1aadf21d401e775b0596258 gdb/testsuite/gdb.dwarf2/dw2-stack-boundary.exp -5e264bdb8d0a362e78d39c4fdb1416f5 gdb/testsuite/gdb.dwarf2/comp-unit-lang.c -7c3a530b77a016b5bff019aa8449a995 gdb/testsuite/gdb.dwarf2/variant.exp -d487ad17c1c0448cd319d69bf03b3c40 gdb/testsuite/gdb.dwarf2/gdb-add-index.exp -3baaa25f54542f147697069351380842 gdb/testsuite/gdb.dwarf2/pieces.S -28166e2493f8c492517b72a632b8dd0b gdb/testsuite/gdb.dwarf2/dw2-regno-invalid.exp -f250b257fd6fd1813d3274d2232d6491 gdb/testsuite/gdb.dwarf2/dw2-objfile-overlap-outer.S -24c1fb53cbbda77e314f6e9a2673112f gdb/testsuite/gdb.dwarf2/clztest.S -ba9b6a4c49c17cf005712d045ac995ca gdb/testsuite/gdb.dwarf2/dw2-op-stack-value.exp -31bd6621ffb23fcfcb7dc9126b5554bb gdb/testsuite/gdb.dwarf2/dw2-producer.exp -382997a5e36bdac6e6bceb8e15b4c1f3 gdb/testsuite/gdb.dwarf2/dw2-ifort-parameter.c -fb5825f5414fb3e865f6cec549bb5895 gdb/testsuite/gdb.dwarf2/var-access.exp -2ba39ea4cf117278e7978b8a1acc874c gdb/testsuite/gdb.dwarf2/dw2-ranges-base.c -a945723e5cf89f0800873a3578ee0c2a gdb/testsuite/gdb.dwarf2/dw2-bad-parameter-type.S -68fff86f190c71507e922e8c1e769f8c gdb/testsuite/gdb.dwarf2/imported-unit.exp -b31017962457a5af659f20da4e078dfc gdb/testsuite/gdb.dwarf2/dw2-op-stack-value.S -d4a200e8a7f874a21dce14cb278af3bb gdb/testsuite/gdb.dwarf2/valop.exp -76ad164f7ae70de2fc7eeadfd598b1d9 gdb/testsuite/gdb.dwarf2/implptr.c -7596f500963588cadcbd0336de50eaf4 gdb/testsuite/gdb.dwarf2/dw2-bad-unresolved.exp -a7c552b4bdc15be85d87fe1e0a3b27f0 gdb/testsuite/gdb.dwarf2/dw2-bad-mips-linkage-name.c -a70b7d38eb615861558f49df48254966 gdb/testsuite/gdb.dwarf2/dup-psym.exp -c5bcddd4af4deb12de9b010e9f1b715c gdb/testsuite/gdb.dwarf2/data-loc.exp -0a336a1ab1e71ec865dd06d00ca07f7f gdb/testsuite/gdb.dwarf2/dw2-linkage-name-trust.S -899bc683c45e75790b103e7593babaf2 gdb/testsuite/gdb.dwarf2/dw2-intermix.exp -6517d233c5a88612fd5f5625b322dcaa gdb/testsuite/gdb.dwarf2/dw2-ada-ffffffff.S -97a9e09351f5253a04a8deb8feab5890 gdb/testsuite/gdb.dwarf2/dw2-align.exp -392b55afd33ffbe9410bbb3ec78de777 gdb/testsuite/gdb.dwarf2/watch-notconst2.c -963931241f8fffbd779bde1a7dd6a3b8 gdb/testsuite/gdb.dwarf2/fission-reread.S -8568fdb0235f463a41a78f8ac8f7120a gdb/testsuite/gdb.dwarf2/varval.c -7b01a7982be5260b6b6752ce951cf41e gdb/testsuite/gdb.dwarf2/callframecfa.S -89e4831d66dc803f332fe4f1343f5027 gdb/testsuite/gdb.dwarf2/dw2-anon-mptr.exp -cbe26c3f6ced8c7a25b89e960dc47e44 gdb/testsuite/gdb.dwarf2/dw2-op-out-param.S -01043168d43b5537cf19e3664998f729 gdb/testsuite/gdb.dwarf2/method-ptr.cc -96ff9192ad7aa166076c77cd937c4f9e gdb/testsuite/gdb.dwarf2/dw2-opt-structptr.exp -4c045d08af52acf05a616c275922a780 gdb/testsuite/gdb.dwarf2/fission-base.c -f71295c32ee53b55d9b2fb87e3f52636 gdb/testsuite/gdb.dwarf2/fission-reread.exp -dadf409edae615a6c17d9fa8bcf86767 gdb/testsuite/gdb.dwarf2/dw2-ref-missing-frame-func.c -fedca8a7856f444bb7d9da3becee0850 gdb/testsuite/gdb.dwarf2/dw2-ranges-base.exp -6d87675594a74d1591c97f15f79bfff8 gdb/testsuite/gdb.dwarf2/dw2-objfile-overlap.exp -b68e9d61ef72ab7c8429070aaa037270 gdb/testsuite/gdb.dwarf2/fission-mix2.c -9dc5c2d6da1152c9a55f4fdf16047373 gdb/testsuite/gdb.dwarf2/dw2-inline-param-main.c -2b0cda9d6c65188e1660ac73d09938db gdb/testsuite/gdb.dwarf2/dw2-const.exp -e9f8a31414cf8a6377302227cc10f467 gdb/testsuite/gdb.dwarf2/dw2-param-error.S -83a23f86ad7a9c724923a671475b4f5c gdb/testsuite/gdb.dwarf2/formdata16.exp -38d6eb165fa4f150cf568abfa1b0219b gdb/testsuite/gdb.dwarf2/dw2-dummy-cu.exp -4cd55544071b48f5f9e70f0ad453c7de gdb/testsuite/gdb.dwarf2/dwp-symlink.exp -d758729023798a1c9424eb43dbeb13b7 gdb/testsuite/gdb.dwarf2/dw2-modula2-self-type.exp -bad2629073886a94b82ed607e79e942f gdb/testsuite/gdb.dwarf2/void-type.exp -c8956cf342f832339e070557ca8b6c27 gdb/testsuite/gdb.dwarf2/dw2-skip-prologue.c -6507187e6c58a3a861d3ae0cc0693e0a gdb/testsuite/gdb.dwarf2/arr-subrange.exp -0e321e2e959c498fbf032f8ac548fc0b gdb/testsuite/gdb.dwarf2/dw4-sig-type-unused.S -0a5f631a504613c7a2012d828f3dbd84 gdb/testsuite/gdb.dwarf2/dw2-abs-hi-pc-hello.c -8cfd8bfdbec72b34cfa4097f04d0a366 gdb/testsuite/gdb.dwarf2/dw2-dos-drive.S -75f51731e70b4651a63349ca840c7ea5 gdb/testsuite/gdb.dwarf2/missing-type-name.exp -b7bdea40c7a1192d3c4b7abfa060411e gdb/testsuite/gdb.dwarf2/fission-loclists-pie.S -58a64c53ee6e5b4bf5781ce6a7a83465 gdb/testsuite/gdb.dwarf2/dw2-undefined-ret-addr.c -8fb7e2da956736b54423ffbb8ba4085d gdb/testsuite/gdb.dwarf2/dwp-sepdebug.exp -2f919b80871ac41007d3ef85d4962b83 gdb/testsuite/gdb.dwarf2/enum-type.exp -f381c52eba490ee43a0b39d768c59071 gdb/testsuite/gdb.dwarf2/typeddwarf-amd64.S -f30521989a59d830d522960fe2d729b0 gdb/testsuite/gdb.dwarf2/implptrconst.exp -66dff7abb42a5b191f3df1fb1617237c gdb/testsuite/gdb.dwarf2/dw4-sig-types.h -a9d1814e91b1652544cf87629ae7d948 gdb/testsuite/gdb.dwarf2/clztest.c -e0a854a356971ab59c2f44494a3b44bb gdb/testsuite/gdb.dwarf2/ada-valprint-error.c -748940e631d91c4f80bac39996aae44e gdb/testsuite/gdb.dwarf2/dw2-dup-frame.S -4d561c61461009fa19b3c50621f67e03 gdb/testsuite/gdb.dwarf2/dw2-bad-mips-linkage-name.exp -7282c4ad6955c692c23ee141d8434c0e gdb/testsuite/gdb.dwarf2/dw2-reg-undefined.c -61d672ddc053fa9475e59de87a4ae658 gdb/testsuite/gdb.dwarf2/opaque-type-lookup.exp -195384dbda83a44e20ea6cfba93a1cb8 gdb/testsuite/gdb.dwarf2/implref-struct.c -fe41777266463bd99b4e86d23b9c15b5 gdb/testsuite/gdb.dwarf2/arr-stride.c -d10251456edeebbcd974c1ff96a47651 gdb/testsuite/gdb.dwarf2/dwz.exp -d3832ad70f3aafd8db7bb853620753dd gdb/testsuite/gdb.dwarf2/missing-sig-type.exp -572b079b4e539c2df4471462c7aae331 gdb/testsuite/gdb.dwarf2/dw2-strp.S -899e14169dfde6555db3d05180018d68 gdb/testsuite/gdb.dwarf2/dw2-ref-missing-frame.exp -4c7e26642158b90c602cdf244d61a42c gdb/testsuite/gdb.dwarf2/staticvirtual.exp -eb4610e7076b30023fd92bbd4611f0df gdb/testsuite/gdb.dwarf2/dw2-unresolved.exp -047d5d34fd71fd0aed09e2dd1e071034 gdb/testsuite/gdb.dwarf2/dw2-icc-opaque.S -b1aba8feec009422d43d5cf704cb679b gdb/testsuite/gdb.dwarf2/data-loc.c -84dfdabac6f10bd8e20f5ddf6e5e20a4 gdb/testsuite/gdb.dwarf2/dw4-sig-types-b.cc -45adbc2d116ad23970d0eda60ee9444a gdb/testsuite/gdb.dwarf2/dw2-empty-namespace.S -0c1cac296d9825462dfe00fa9ed44889 gdb/testsuite/gdb.dwarf2/implptr.S -f38ded3f80b1e5ba81ece44b0eec8e23 gdb/testsuite/gdb.dwarf2/dw2-restrict.S -2c5449d3a28238c57b47a13a51da5a18 gdb/testsuite/gdb.dwarf2/comp-unit-lang.exp -1d801b4274c6c29b706984906c339252 gdb/testsuite/gdb.dwarf2/trace-crash.exp -3256fa8c5463f3616f433c1a3c40ac83 gdb/testsuite/gdb.dwarf2/gdb-index.exp -cd4c7f60e07cadc7daa8d470f11f2924 gdb/testsuite/gdb.dwarf2/pr11465.exp -de6f63c0020f0c66817b2cde16c93cc1 gdb/testsuite/gdb.dwarf2/dw2-producer.S -e9806e88120c8041748c18558613eef2 gdb/testsuite/gdb.dwarf2/dw2-ref-missing-frame.S -2270d720b483dda664ab1c91b893aa41 gdb/testsuite/gdb.dwarf2/dw2-abs-hi-pc.exp -baf6d6ee3a70ceee0f8cf8082fdbd1c8 gdb/testsuite/gdb.dwarf2/dw2-cp-infcall-ref-static.S -f13215b6a4c7247ef279317d568781f5 gdb/testsuite/gdb.dwarf2/dw2-undefined-ret-addr.exp -c824298b7a32af47ffabb754dacc2ad3 gdb/testsuite/gdb.dwarf2/dw2-simple-locdesc.S -84f03cf27df47fcddcc9c2165a165a93 gdb/testsuite/gdb.dwarf2/dw2-restore.S -8f6e83e5ce50fe4304fd8a789f076573 gdb/testsuite/gdb.dwarf2/symtab-producer.exp -0bc4720e469a1667b138a796010c74e7 gdb/testsuite/gdb.dwarf2/dw2-ranges.exp -fda0e8c5bcec313b83d758e4f6635396 gdb/testsuite/gdb.dwarf2/member-ptr-forwardref.S -4ce620624d13c39253476cf76e970919 gdb/testsuite/gdb.dwarf2/fission-loclists.exp -cc818214279569c4ec1d0d591617280e gdb/testsuite/gdb.dwarf2/dw2-linkage-name-trust.exp -faf849bc634f30a97db022c729e0e2a6 gdb/testsuite/gdb.dwarf2/dw2-compdir-oldgcc.S -22b54c4ea7da4e84ebc20cd6d78c1e29 gdb/testsuite/gdb.dwarf2/dw2-ranges.c -dd3270f1d8412ef713c2661ef784a76b gdb/testsuite/gdb.dwarf2/fission-mix.exp -9a1f44c74fd501f21eef8fa295fbed2e gdb/testsuite/gdb.dwarf2/dw2-restore.exp -cc494c13660c6cdf68324a9530121869 gdb/testsuite/gdb.dwarf2/dw2-noloc.S -baf16df147bf38037981d96bc4c985da gdb/testsuite/gdb.dwarf2/dw2-ranges3.c -e2804378f67df96298bf2f7f52079c1b gdb/testsuite/gdb.dwarf2/dw2-dos-drive.exp -9f34afa92733752ac8ba5c8b4a2c2f42 gdb/testsuite/gdb.dwarf2/dw2-restrict.c -ff8ba8080aa9ac6d0cd330b6b9f6ed36 gdb/testsuite/gdb.dwarf2/dw2-abs-hi-pc.c -80dcfd6e22148c4448bfd7b80d9fbe09 gdb/testsuite/gdb.dwarf2/dw2-abs-hi-pc-world.c -a09fc8fdcdd46a589d996fbdc9491de5 gdb/testsuite/gdb.dwarf2/dw2-objfile-overlap-inner.S -92c943265845e419af7815b8f4551bed gdb/testsuite/gdb.dwarf2/subrange.exp -0a3ed201caa1a14c00aacb5a240ef377 gdb/testsuite/gdb.dwarf2/ada-linkage-name.exp -e290798c136f7317e32e918033af4e0e gdb/testsuite/gdb.dwarf2/dw2-basic.exp -4029fe7d12928695058cad252eb8ff56 gdb/testsuite/gdb.dwarf2/trace-crash.S -81af2022800b41a7252bdc50070c6339 gdb/testsuite/gdb.dwarf2/dw2-intercu.S -2b4489fe6bc8e77be20546ccacb48bf8 gdb/testsuite/gdb.dwarf2/dw2-error.c -94e82881e51efa4dea329d78019b39d9 gdb/testsuite/gdb.dwarf2/valop.S -a88ac4e93c30dfa8ac4d761c1e467287 gdb/testsuite/gdb.dwarf2/dw2-bad-parameter-type.exp -79ea3693efc0f6bc63c06353d605b020 gdb/testsuite/gdb.dwarf2/opaque-type-lookup-2.c -eb9a86f143d62f44de5fb81f69c67565 gdb/testsuite/gdb.dwarf2/dw2-ifort-parameter.exp -666f466f6f70d677a4c3208fdb3fddb7 gdb/testsuite/gdb.dwarf2/dw2-icycle.c -ab1ae8c4fbb94ea0d6fc85362ff13796 gdb/testsuite/gdb.dwarf2/dw2-anonymous-func.S -578378f2cb60e2e95da2caa530867e6a gdb/testsuite/gdb.dwarf2/dw2-noloc-main.c -7fbebe352a6bb156b220548a37dd89ac gdb/testsuite/gdb.dwarf2/dynarr-ptr.exp -1eda12056d0c426e5c715e3df9f61bd9 gdb/testsuite/gdb.dwarf2/fission-loclists.S -e686b41d2bf8f60ef09655aa5a792c7d gdb/testsuite/gdb.dwarf2/fission-multi-cu2.c -8df23c7c4bbd9b1cdc421a863dd13d74 gdb/testsuite/gdb.dwarf2/info-locals-optimized-out.exp -fecf896366466574011ef48849800e56 gdb/testsuite/gdb.dwarf2/dw2-case-insensitive.c -545eab79d0750d1e3f72fb2ca6168df0 gdb/testsuite/gdb.dwarf2/dw2-icycle.exp -ff15f5e78b44504514c6f15d967e6ffb gdb/testsuite/gdb.dwarf2/dw2-cp-infcall-ref-static-main.c -3aabb7ce1a84ca27cfa57703fc0540bd gdb/testsuite/gdb.dwarf2/dw2-entry-value.S -af03b19fa672d50c337c23242a63b7d2 gdb/testsuite/gdb.dwarf2/dw2-entry-value.exp -df854b64f6613ef501a93a764478819a gdb/testsuite/gdb.dwarf2/dw2-icycle.S -faf6583115692915e7f764b77730e54a gdb/testsuite/gdb.dwarf2/bitfield-parent-optimized-out.exp -5f7ef3a61928b68ca2e3469489e8696c gdb/testsuite/gdb.dwarf2/ada-linkage-name.c -0e44e66d3deb0b563b96dd114cc694be gdb/testsuite/gdb.dwarf2/fission-loclists-pie.exp -0ed327e7ecd3e918c78472517df57a2d gdb/testsuite/gdb.dwarf2/dw2-unusual-field-names.exp -6f3b0e0a673a926359302a91d03bed53 gdb/testsuite/gdb.dwarf2/dw2-ranges-func-hi-cold.c -79add4e78e69974927bf72f3d3d529cb gdb/testsuite/gdb.dwarf2/dw2-param-error-main.c -030934d22101f664965869d0a4a5ec53 gdb/testsuite/gdb.dwarf2/implref-global.c -50aa8755c65f8f5bb95c6048a2712610 gdb/testsuite/gdb.dwarf2/dw2-dir-file-name.exp -5b620a00e9632d63b477d3087adf63cb gdb/testsuite/gdb.dwarf2/nonvar-access.exp -d3b9723b2b6dc9ab677dadc7fd3be5b1 gdb/testsuite/gdb.dwarf2/implptrpiece.exp -f5948a798808820f51e6168eb6708c83 gdb/testsuite/gdb.dwarf2/ada-valprint-error.exp -1a941cd1ebcdc7e86ece7921e3736b95 gdb/testsuite/gdb.dwarf2/fission-mix.h -6de352316948afbb07822bcdc81454d9 gdb/testsuite/gdb.dwarf2/multidictionary.exp -10f8d6dae19cbc37ed5c0ec9ad51a775 gdb/testsuite/gdb.dwarf2/callframecfa.exp -d30fb2375d9f5e9cb6766ba3e80972b9 gdb/testsuite/gdb.dwarf2/dwp-sepdebug.c -5edcbc6138a3453f36d815e6939e7612 gdb/testsuite/gdb.dwarf2/dw2-var-zero-addr.exp -86bee208e108e6d0fca3641de7ed5ea3 gdb/testsuite/gdb.dwarf2/dw2-anon-mptr.S -4cf838c4aa31b1eb94be0e921b47271a gdb/testsuite/gdb.dwarf2/dw2-reg-undefined.exp -abd869f47ab8efc213b947687bd629c7 gdb/testsuite/gdb.dwarf2/pieces-optimized-out.c -e8d54523142bba9cc58adb6f947e033b gdb/testsuite/gdb.dwarf2/dw2-namespaceless-anonymous.exp -db2f447e26cd35aa249f70d7e3ba15f2 gdb/testsuite/gdb.dwarf2/pr10770.exp -f72a2ca170a8d7dc1288eb4218787ea4 gdb/testsuite/gdb.dwarf2/void-type.c -15e12ce7432056a8d0c9b6b814ee90ca gdb/testsuite/gdb.dwarf2/pieces-optimized-out.S -316e456be4b96e6406aafcfe9d7cdb7b gdb/testsuite/gdb.dwarf2/dw2-param-error.exp -fd069a4788cde32a869e1827afb27911 gdb/testsuite/gdb.dwarf2/clztest.exp -7bc6c3e4d8acedabaf68e69fc6678272 gdb/testsuite/gdb.dwarf2/dw2-common-block.exp -79cb41c0ef977e9a240436f6005e8099 gdb/testsuite/gdb.dwarf2/dw2-minsym-in-cu.exp -7ae2a03d846c762d37878517568264c8 gdb/testsuite/gdb.dwarf2/watch-notconst.exp -85a95552e5b56da2ab7d05c5bc025572 gdb/testsuite/gdb.dwarf2/dw2-cu-size.exp -416f5a61ad331802b8e3005f25eb7342 gdb/testsuite/gdb.dwarf2/dw2-stack-boundary.S -c6703d6cba6ca00e3ba004221e9c2aa2 gdb/testsuite/gdb.dwarf2/dw2-ranges-psym.c -dfca4a8a37ab79611c5732f3a43514b1 gdb/testsuite/gdb.dwarf2/dw2-compressed.S -d426a8b8c191ebfd40bb92181a18ac8e gdb/testsuite/gdb.dwarf2/fission-base.exp -7575154cbf6e06e07b144b9648313cb7 gdb/testsuite/gdb.dwarf2/implref-struct.exp -597da8f852edcfb5c386748450aebbaf gdb/testsuite/gdb.dwarf2/dw2-ranges2.c -af6a408e3241b5fae95353ec7b14ca88 gdb/testsuite/gdb.dwarf2/dw2-inheritance.S -83d9b4c5a964583dc7fbdd91067a5846 gdb/testsuite/gdb.dwarf2/dw2-ref-missing-frame-main.c -a32df1b1fa4689651a87ec13b9b28b06 gdb/testsuite/gdb.dwarf2/dw2-cp-infcall-ref-static.exp -73b40dfaa3b1d763530ac1fb1bfe8093 gdb/testsuite/gdb.dwarf2/dw2-case-insensitive.exp -9a12808b0e6e862d6cc4c426bd94e3bb gdb/testsuite/gdb.dwarf2/dw2-op-out-param.exp -9c376046af9ce14126f7ef41b97b03e5 gdb/testsuite/gdb.dwarf2/dwp-symlink.c -598d2fedc0293e3df28bddc64b8800eb gdb/testsuite/gdb.dwarf2/dw4-sig-type-unused.exp -cda8c5ba6cb27dd284e175679df0fc11 gdb/testsuite/gdb.dwarf2/dw2-double-set-die-type.exp -05f4abd8d975eda35680b2374033e0a1 gdb/testsuite/gdb.dwarf2/dw2-basic.S -16295b60e2a36e4db7f7740616528b73 gdb/testsuite/gdb.dwarf2/info-locals-optimized-out.c -4eb54b0441949b369fa60881824ea2c7 gdb/testsuite/gdb.dwarf2/count.exp -097cc62288782cd8e213881ee476c672 gdb/testsuite/gdb.dwarf2/dw2-unusual-field-names.c -d9adab359e21767c975a4afcfa47196b gdb/testsuite/gdb.dwarf2/watch-notconst2.S -b53d403c21a14ff0dc19273711d356d4 gdb/testsuite/gdb.dwarf2/dw2-double-set-die-type.S -378378ce3bb8d8a23c03ddfe9e635fc2 gdb/testsuite/gdb.dwarf2/dw2-common-block.S -adad534a58fb94db58d82992ee515f9f gdb/testsuite/gdb.dwarf2/dw2-filename.S -73a0f6472ba700822ca5a23e3b15bfc6 gdb/testsuite/gdb.dwarf2/dw2-linkage-name-trust-main.cc -e08d7b67be5a8756ebb5140db7b3b6a6 gdb/testsuite/gdb.dwarf2/shortpiece.exp -02aefdc77e9076469dbe852389be3c2b gdb/testsuite/gdb.dwarf2/dw2-canonicalize-type.exp -8c38833007339508d50b3ebdc80b5785 gdb/testsuite/gdb.dwarf2/inlined_subroutine-inheritance.exp -97fe651e39f8d004aa25070a7bd407c8 gdb/testsuite/gdb.dwarf2/dw2-inline-break.S -2a1756a11f0c452e07b59e280833ba3d gdb/testsuite/gdb.dwarf2/dw2-filename.exp -e6acf1deaa037468698d5694a43ae47e gdb/testsuite/gdb.dwarf2/imported-unit.c -988f149f003253269315bddf998e8d01 gdb/testsuite/gdb.dwarf2/fission-base.S -36691097f1164074b42464f85cece546 gdb/testsuite/gdb.dwarf2/dw2-inline-param.exp -3d75241f31ded95d8e74b872129e8059 gdb/testsuite/gdb.dwarf2/corrupt.c -3cdee697f8c156e2ef446d1066d90516 gdb/testsuite/gdb.dwarf2/dw2-skip-prologue.S -4cc01f5be2304951292c039edb547860 gdb/testsuite/gdb.dwarf2/implptr-optimized-out.exp -075ee4da88be6ff4297e6d6b44b113a1 gdb/testsuite/gdb.dwarf2/pr10770.c -098a556c1a15ea18882e362ad9874595 gdb/testsuite/gdb.dwarf2/dw2-noloc.exp -c16008a2d9a2516a438123aac608436b gdb/testsuite/gdb.dwarf2/nostaticblock.exp -ac110436b1acfef278647fcc0fd59246 gdb/testsuite/gdb.dwarf2/dw2-op-call.exp -c9f4e2363bab64d8861bc1c1b28697d1 gdb/testsuite/gdb.dwarf2/dw2-empty-namespace.exp -fe41777266463bd99b4e86d23b9c15b5 gdb/testsuite/gdb.dwarf2/arr-subrange.c -5510c2ad3a4546384b315fadd8ce239c gdb/testsuite/gdb.dwarf2/implptrconst.c -261b9474772c24c51bf9a72f4eb995b3 gdb/testsuite/gdb.dwarf2/dw2-dup-frame.exp -d407108e09bc2957571d1dda87a20b3a gdb/testsuite/gdb.dwarf2/atomic-type.exp -82d17beb86df0ac6cdabd097b538f969 gdb/testsuite/gdb.dwarf2/pieces.c -23e72ea63a628b0e128cbaa753bacfc8 gdb/testsuite/gdb.dwarf2/dw2-skip-prologue.exp -2908d1c80a277fcb28ab5ae4f1e142a6 gdb/testsuite/gdb.dwarf2/implref-array.c -54b8a6b0ff52958ee33024c56b9bd2bd gdb/testsuite/gdb.dwarf2/file1.txt -552806a7098f1a24e88a66cb04bb540d gdb/testsuite/gdb.dwarf2/dw2-modula2-self-type.S -ff9554b415aee7645d565bf5865af823 gdb/testsuite/gdb.dwarf2/dw2-lexical-block-bare.exp -506d0e737b585c7ff75daeba388e3337 gdb/testsuite/gdb.dwarf2/dw2-cu-size.S -2e3e1c884cdeeede57aa30fef7455ecb gdb/testsuite/gdb.dwarf2/opaque-type-lookup.c -786be0b5228d1de91d91543047f26ddf gdb/testsuite/gdb.dwarf2/dw2-abs-hi-pc-world-dbg.S -10ddaad93e3048e111455d018f5d2f26 gdb/testsuite/gdb.dwarf2/dw2-opt-structptr.c -0deec1272c97ce2ad1277f2fc08bae91 gdb/testsuite/gdb.dwarf2/atomic.c -f02d9609bb3d8f69706104f150b857a3 gdb/testsuite/gdb.dwarf2/implptr-64bit.exp -b4934a2a0e259b3fa4024ce0c44b2ba0 gdb/testsuite/gdb.dwarf2/dw2-empty-pc-range.S -c4cf40c68574f1b6986af27baa1ecfa3 gdb/testsuite/gdb.dwarf2/dw2-ranges-main.c -285db883e00920a8f5d38c7f5b39bb6b gdb/testsuite/gdb.dwarf2/dw2-dir-file-name.c -fd5fda780d2a4deff52d6bb39f1d1a9b gdb/testsuite/gdb.dwarf2/pr13961.exp -8b3444e74f68c73f343a2ce4ad21a513 gdb/testsuite/gdb.dwarf2/arr-stride.exp -4b87a20b67c0edab7d6af872ade43562 gdb/testsuite/Makefile.in -c66e67017d093510d18d75fb9f407238 gdb/m68hc11-tdep.c -39280d562a95589acf87046e7fea043f gdb/nios2-linux-tdep.c -f89566f5d64338eb0e7e926a7f163700 gdb/gdbarch.c -540d12feaabd05d9b759fa6f2036beb5 gdb/sparc64-fbsd-tdep.c -6e3ba7ae8176e188b92a31e0b589a0e1 gdb/solib-aix.c -b75e57bafe489ccacea1187ec5514f7c gdb/glibc-tdep.c -a7fa27e0d5877a40d009f99b7f90cc83 gdb/tracectf.c -3f6b41a82ee7fcfc7185cd2a0f3357b9 gdb/amd64-nbsd-tdep.c -9e838b7c11bd20b272d4f59b9ed1bce8 gdb/amd64-dicos-tdep.c -c2c67129071ef0d7056bb35626ce07fa gdb/f-lang.h -2f56f1e4182ebed7744b9818930e1750 gdb/msp430-tdep.c -ef0674e015ab500231c9c3b90db8cdd2 gdb/block.c -34cc524bf86f93d7e4f6cfb014466857 gdb/location.h -1ab7ac4e8e87a16e0af5ae1e908e582b gdb/xstormy16-tdep.c -51c78b46efd9ea43bac4fb503882e391 gdb/linux-record.c -f436422a1de8c157f4b459fd0a2d1088 gdb/ppc-fbsd-tdep.h -64cfcaa1abb765bb93a3d182d40b717c gdb/aarch32-linux-nat.c -df87448a83d9aa2a21c023332f57f136 gdb/i386-nbsd-tdep.c -1f68d3272b33b380724fe731f1716f7b gdb/ChangeLog-3.x -752cc726423f319218ee7048b5dc7d38 gdb/ChangeLog-2015 -1ea87373e73574f1f6305a67bb015ae1 gdb/c-lang.c -5418968f46421764fe77a8b07cfde4bb gdb/charset-list.h -f2535568e39677a3347be4af3abcc192 gdb/symfile.c -da9f2e9d50c5407b3fbf4f552949f016 gdb/rs6000-lynx178-tdep.c -59cec0a33ed8d81721ef389f5ab7502f gdb/proc-events.c -6107982047993ee2de2b540975e3d7c0 gdb/alpha-tdep.h -ed9f25ef26de17a5e8cfed630131f08f gdb/amd64-fbsd-tdep.c -1355291b13c7fdfaa1c0ba98d5196f9d gdb/macroscope.h -d7508a7baa21eec341e4fa052cf79d69 gdb/gcore.in -39f418e4cdd66de23139db89c7d1edcd gdb/printcmd.c -703dd6c09bc89af68c5341df33622864 gdb/linux-fork.c -22bb5fbf82de08ed4cbdd5f5588a370e gdb/typeprint.h -98e1594dee86834ee5ae4e230e0b1b18 gdb/serial.h -db5818707af8cb3f2752349454075048 gdb/rl78-tdep.c -43c636e7176ec158abf9c949320d2df6 gdb/lm32-tdep.c -d9a93aedba71bc431453cc588f553a15 gdb/arm-bsd-tdep.c -f1354081a47fb49af00c9c8d89a75d5e gdb/continuations.h -0f0ecccc4618669aa1585c7c08a69a3a gdb/mips-fbsd-nat.c -fa2ef6050a6ba7a7ee56e299ae242f5c gdb/psymtab.c -4c5007dce0fe94889c805e26558c173d gdb/bsd-uthread.h +c6c53484494c246b76cd9238486e4fa6 gdb/testsuite/gdb.base/break-idempotent.c +f64637f4f6017a49c1bd6edc91715d61 gdb/testsuite/gdb.base/exprs.exp +16c2b56c74fb9bd4187c87f7014f4078 gdb/testsuite/gdb.base/info-shared.exp +1a11a2e9e287bc3b5e4dc03a1d43cf8e gdb/testsuite/gdb.base/vla-datatypes.c +27a989981abc173430e547145419f6cb gdb/testsuite/gdb.base/break-inline.c +1bbf24e5d4f8c9243757cdbac6069f62 gdb/testsuite/gdb.base/vla-ptr.c +34ab386a1e89ec540cd9616e474afc01 gdb/testsuite/gdb.base/step-over-clone.c +f16442963f2e0c55a369f8305306f1b4 gdb/testsuite/gdb.base/structs3.c +b9ae23b8844653272dc203f2c1baa6ec gdb/testsuite/gdb.base/set-noassign.exp +30f24a4a09c5b28604f4798e98f9a769 gdb/testsuite/gdb.base/relativedebug.c +77192002b0d3bb3765945debf56f2a4c gdb/testsuite/gdb.base/enumval.c +6935acb0c5167bd10db1a46bd79398f8 gdb/testsuite/gdb.base/call-strs.c +03d086ac0872ea0f465f2bb026593012 gdb/testsuite/gdb.base/overlays.exp +00e8d2cd6e516e4ff4dc8a7ec84d7897 gdb/testsuite/gdb.base/advance-until-multiple-locations.cc +9790e3f0bb957b096c83258ab2046f1b gdb/testsuite/gdb.base/watchpoint-solib.c +4c953158ab8da8b33e7cee6b249133b6 gdb/testsuite/gdb.base/return.exp +31a277de01b1ca10557f13088d74c6bb gdb/testsuite/gdb.base/attach-wait-input.exp +175a0879d1185530239d5acaf7ed6645 gdb/testsuite/gdb.base/dprintf-pending.exp +7242cc2f26269df756afbf9d71995950 gdb/testsuite/gdb.base/source-execution.c +cdac62d867a601477e3659297d07129b gdb/testsuite/gdb.base/step-indirect-call-thunk.c +7ab88167d7ea96a5e23d90a858d524b7 gdb/testsuite/gdb.base/structs2.c +3c3ada9ef8440c82814e6572648bd5c2 gdb/testsuite/gdb.base/enum_cond.exp +ff5d7f50954a11835da7e03d0a0e4339 gdb/testsuite/gdb.base/noreturn-return.exp +3f9f4f74b2ffad96b854f9e43a92ba46 gdb/testsuite/gdb.base/step-over-vfork.c +fdcd6d405dfe6fbfb05d7d954ae3d5ab gdb/testsuite/gdb.base/catch-fork-kill.exp +48203e08e9661a55c005e849a244e5c8 gdb/testsuite/gdb.base/gcore-tls-pie.c +8aa62042a900f1b7b273ffcd814cbde1 gdb/testsuite/gdb.base/async.exp +14a7a38737b194995d9573aebbe891f2 gdb/testsuite/gdb.base/structs3.exp +cb4e77a672e7b9b27d3816f31ad42f6c gdb/testsuite/gdb.base/jit-reader-host.h +9e9705db99625501cb6e07b1bfe65cbc gdb/testsuite/gdb.base/sss-bp-on-user-bp.exp +3b641ed95ae225b2ec944fcd9f15acda gdb/testsuite/gdb.base/psym-external-decl.c +cc841a43e572768b0269c06d18605330 gdb/testsuite/gdb.base/call-sc.c +f484128bf0e68c27c3fcbf758e60baa5 gdb/testsuite/gdb.base/setvar.c +23402dc6f5215abab4195a86f9feaec9 gdb/testsuite/gdb.base/label-without-address.exp +55054b22a6edfb0fc44272fb7f9040f3 gdb/testsuite/gdb.base/list1.c +2a9343becff07b831559fdc8e3c6e35f gdb/testsuite/gdb.base/argv0-symlink.exp +93c13a1a026547999161e6208fc77071 gdb/testsuite/gdb.base/wrong_frame_bt_full.exp +110b05148d43b4efb6296939faaf0384 gdb/testsuite/gdb.base/annota-input-while-running.c +6aa44124cbaae424cebe775fff68c533 gdb/testsuite/gdb.base/catch-follow-exec.exp +03cbc9d90bc105248feb44c4b3c5b8ae gdb/testsuite/gdb.base/callfuncs.exp +e934f0449add78e75238fcf763a55b2e gdb/testsuite/gdb.base/nofield.exp +f67bb3d8d97f018050c02fd5e7a50d88 gdb/testsuite/gdb.base/charset.c +c263edbe43d6e40fda8cc302de5c7aa2 gdb/testsuite/gdb.base/gnu-debugdata.c +b9506e3be1d30d8b0b6bcb9fa34165ef gdb/testsuite/gdb.base/gnu-ifunc-lib.c +a71a799021a498add467acc5629d3c45 gdb/testsuite/gdb.base/bp-cmds-execution-x-script.exp +ae44610936ec435143ee53f0fc1b0fc2 gdb/testsuite/gdb.base/print-symbol-loading-lib.c +06cfcd8ac7fccb0943b9e1c6c1fd0077 gdb/testsuite/gdb.base/range-stepping.c +9bee342a5693293287655c374b0c3d28 gdb/testsuite/gdb.base/lineinc.exp +850fdd8f277c8283160e7757566df108 gdb/testsuite/gdb.base/fullname.exp +fba572c7c2598d4e8fbb2f202306e33b gdb/testsuite/gdb.base/line-symtabs.exp +3c2692e075ee5b72ba40e2c768df26e6 gdb/testsuite/gdb.base/break-interp-lib.c +3644b284101d7c74ba05fb20102a1fc4 gdb/testsuite/gdb.base/break-on-linker-gcd-function.cc +6dad5e701ab9d3278d6b619de6b3f80e gdb/testsuite/gdb.base/noreturn-return.c +5329c69dcb3f4aaace5b023213301dce gdb/testsuite/gdb.base/range-stepping.exp +76252bda8f31397946e89f9808258bbd gdb/testsuite/gdb.base/list-ambiguous1.c +1fbb4150267d2435438a71d6b4dc35ad gdb/testsuite/gdb.base/paginate-inferior-exit.exp +de534a2faff48904c0c07472bf3e88ac gdb/testsuite/gdb.base/del.c +ecc580dce95f6a1e21ff5e826e794d0b gdb/testsuite/gdb.base/catch-signal.exp +fde8ab341e1dbecf476809aab86ddaf7 gdb/testsuite/gdb.base/savedregs.exp +e8be9bb06f05c358a2f21b4dc6a50484 gdb/testsuite/gdb.base/signull.exp +427bd92245c9cd026ddb1df36900b58e gdb/testsuite/gdb.base/break-inline.exp +484b4bbb465a9983e8b64caf88450070 gdb/testsuite/gdb.base/pie-execl.c +4936f5c8eb7f81dacd9d259f88f78217 gdb/testsuite/gdb.base/interact.exp +0d4633e1f59e575cc275268cc0066114 gdb/testsuite/gdb.base/bigcore.exp +38d1618654c7e55348a5a94623e669a4 gdb/testsuite/gdb.base/value-double-free.exp +2c85672f9ea7c395214c0232b7ab67c9 gdb/testsuite/gdb.base/break-always.c +79423ef42dc465d775edab36f0690d91 gdb/testsuite/gdb.base/bp-cmds-execution-x-script.gdb +2a99656a2a2ad00b5f00a28fad2295b0 gdb/testsuite/gdb.base/gdb11531.c +04ec0f28a6b8d6909ef4454a84293b83 gdb/testsuite/gdb.base/condbreak-bad.exp +2a949bafbc86aa3b21b4a8a727ac75f5 gdb/testsuite/gdb.base/dso2dso-dso2.c +552824440b7a2944afbc3bf0dffb711f gdb/testsuite/gdb.base/watch-vfork.exp +02d428aa4a259040c72b2540657ceb7e gdb/testsuite/gdb.base/attach-twice.exp +6375f34511359966434eee468d6c3892 gdb/testsuite/gdb.base/save-bp.exp +485fac65da83e9b3476f35c43d012665 gdb/testsuite/gdb.base/vla-sideeffect.c +5fff5cda189db7d22f53a963b7d1dffe gdb/testsuite/gdb.base/statistics.exp +0750e8684813f9bd61d25fb84085491f gdb/testsuite/gdb.base/cond-eval-mode.c +ceef3a1494c488c1c73eebd789affbe4 gdb/testsuite/gdb.base/dprintf-next.c +7a87098ba2b7f3fb3b73a4cd57678774 gdb/testsuite/gdb.base/bp-permanent.exp +d2c2b4236768d325f25dd28b92082a4e gdb/testsuite/gdb.base/endian.c +bb5fff81a7680c4bd7d4ece17f2c5008 gdb/testsuite/gdb.base/skipcxx.exp +cdcf7c05f79747bd94e86c7430a8db92 gdb/testsuite/gdb.base/setvar.exp +e1f2fea7d7659d356f9f826b98f5cf11 gdb/testsuite/gdb.base/solib-probes-nosharedlibrary.exp +de0b9bae2cbaa6823ebeffbffc9c7b30 gdb/testsuite/gdb.base/gdb1056.exp +ef156f2b23849dee0cc37135f556cbb0 gdb/testsuite/gdb.base/gcore.c +0048f6c16e1751b9dd4e9fd524c10f22 gdb/testsuite/gdb.base/paginate-inferior-exit.c +5a5d9a4a31e12f310393a1697376ffcd gdb/testsuite/gdb.base/hashline1.exp +e33f3eea7d6105e0265ef823ed34ffc7 gdb/testsuite/gdb.base/all-types.c +13c25e803e4371ae17eebcc8120d95ea gdb/testsuite/gdb.base/dso2dso-dso2.h +a6d8a6d6b67af0bca47b20794b8d4e47 gdb/testsuite/gdb.base/watch-bitfields.c +664d05be7fd1fa3c4764b5d49f3b3acc gdb/testsuite/gdb.base/jit-reader-exec.exp +147ad8b288a83cf2d8680fe92cfd04da gdb/testsuite/gdb.base/batch-exit-status.good-commands +5b534d9231280b946c87f6a3ce20423d gdb/testsuite/gdb.base/del.exp +11e12ac3ef64fa23347b332036b1e841 gdb/testsuite/gdb.base/execution-termios.exp +e3f704bcd86dbfea4679d2e20dc0bf51 gdb/testsuite/gdb.base/infoline-reloc-main-from-zero.c +6d786e62ebbf36b0f13019ece64a9eb2 gdb/testsuite/gdb.base/memattr.c +917b1c0d4a61d5f2b7f74cb6ca9e2a59 gdb/testsuite/gdb.base/reread2.c +f8b3ebbc892a3b76499592ca84abe118 gdb/testsuite/gdb.base/foll-vfork.exp +27768131c9d57c276966fabe0cafe956 gdb/testsuite/gdb.base/eh_return.c +c6a16edc9359f0384e9bb01cc216272c gdb/testsuite/gdb.base/foo.c +52ed631e07886d68c20027f4bd01551a gdb/testsuite/gdb.base/ui-redirect.exp +baf6102f1c2c4b046f4d29fc41a2dd40 gdb/testsuite/gdb.base/term.c +42f73bb0f36abf4a9c1d8c1fdc842f25 gdb/testsuite/gdb.base/catch-signal.c +5ac4388dd50d9a11701f8e4834751fb1 gdb/testsuite/gdb.base/server-del-break.exp +c57b20af661f3e83c48b5d04d4a9d66c gdb/testsuite/gdb.base/symbol-without-target_section.exp +a9d4c4917ac518e90d84aca149d3a069 gdb/testsuite/gdb.base/persistent-lang.exp +5c07fbc9a019156bb074eba40e2052de gdb/testsuite/gdb.base/ending-run.exp +c386054766616dd84b1f3d4e97a0150f gdb/testsuite/gdb.base/weaklib2.c +1b65516143c963484e3f31a4eb5a5f13 gdb/testsuite/gdb.base/corefile-buildid.c +7506ff01705c2a6b3efe3880f0311a2e gdb/testsuite/gdb.base/freebpcmd.exp +4b141ff8e4b4c4a3f24f8628498e00b6 gdb/testsuite/gdb.base/gdbinit-history.exp +e8f91b2e8c1f3a6f5cdbd729802dd0fa gdb/testsuite/gdb.base/watch-non-mem.c +8f6f35f5dc709dc5829f6e083eea9e85 gdb/testsuite/gdb.base/load-command.exp +1d30b0a35d55c8c2c0d1717fbba33216 gdb/testsuite/gdb.base/catch-syscall.c +1897a662818f3dd796a51e7ae785a61f gdb/testsuite/gdb.base/memattr.exp +0e02bc08a27ce41befc3fdeb4e8f4086 gdb/testsuite/gdb.base/long-inferior-output.exp +df9a2f3035a3c7704b622e6686dd68ef gdb/testsuite/gdb.base/step-over-no-symbols.exp +d6d1904b1c46c0077a8544f96d755f9e gdb/testsuite/gdb.base/exec-invalid-sysroot.exp +f50ad4da0462506026ffd2377e5d1ae0 gdb/testsuite/gdb.base/history-duplicates.exp +1307c1d2b8e98b108e6b1c66cda277ca gdb/testsuite/gdb.base/attach-wait-input.c +612e6a39aee238b755c4ef2b41343a67 gdb/testsuite/gdb.base/comp-dir/subdir/dummy.txt +af6dc5b035cff7a9fe836eb92f920da5 gdb/testsuite/gdb.base/wrong_frame_bt_full-main.c +4570880dffa968030dead11592d48906 gdb/testsuite/gdb.base/fork-running-state.exp +cc82a70e33d2daeb1aa9ffb12a33371d gdb/testsuite/gdb.base/reggroups.exp +e91e520cfdf1ec0dd57327c276c6ccfa gdb/testsuite/gdb.base/flexible-array-member.c +b23922382667e3b1fcbe931a74baf594 gdb/testsuite/gdb.base/print-symbol-loading.exp +2b8323867f3ea714340dbabf15812ee5 gdb/testsuite/gdb.base/annota3.exp +3f6af844e73721a41d31d12bbc3f6df5 gdb/testsuite/gdb.base/print-file-var-lib1.c +fbbeec2891ea913e85e52602f661a132 gdb/testsuite/gdb.base/bitfields.c +222689431fc61f6497173d910fc9a010 gdb/testsuite/gdb.base/break-probes.exp +4cb46753f3663e5c51c6fdafed0ae334 gdb/testsuite/gdb.base/gdb1555-main.c +a0263c810e2704b488016ed16519b25e gdb/testsuite/gdb.base/symfile-warn.c +7f712a3828f157901e38d7ac4a00a37d gdb/testsuite/gdb.base/print-file-var.h +9a82b946cade8f833ed16458d70122ac gdb/testsuite/gdb.base/gnu_vector.c +d81114da32e14911205f07c25fb0d574 gdb/testsuite/gdb.base/bp-cmds-continue-ctrl-c.exp +051dff1beefe862e5a41f7cf55491b32 gdb/testsuite/gdb.base/infoline.exp +b2260286c086c1ddcc320925e98b7685 gdb/testsuite/gdb.base/print-symbol-loading-main.c +690f1dc61175645316b7895bdca9b961 gdb/testsuite/gdb.base/signals-state-child.exp +bf24fccbd8cd47c19e1b0c3036ea5b7e gdb/testsuite/gdb.base/paginate-bg-execution.exp +d64954f6d19cc894e5450d05c7dac6bd gdb/testsuite/gdb.base/symbol-alias2.c +fb9e3c256029078c86d12eeebf3abac0 gdb/testsuite/gdb.base/all-architectures-3.exp +7a544758b176d8daf484f4c1c10e4e36 gdb/testsuite/gdb.base/ctxobj-v.c +c57ec5bb4125ef1ae0c15702cc543106 gdb/testsuite/gdb.base/coremaker2.c +4a930f325ad41a624c547b536656dc75 gdb/testsuite/gdb.base/valgrind-infcall.c +984eea02cc37f1d8735fa049f478aab8 gdb/testsuite/gdb.base/info-var-f1.c +ee6379f176ad79e35eee036435be7112 gdb/testsuite/gdb.base/interp.exp +598b50a5f38e6da9122cf0cfac1135f1 gdb/testsuite/gdb.base/bitfields.exp +1300c1d0fc0b4f1d2ef1ced74b505e44 gdb/testsuite/gdb.base/vla-sideeffect.exp +0048f6c16e1751b9dd4e9fd524c10f22 gdb/testsuite/gdb.base/paginate-bg-execution.c +300341fe836af37adf2f3064285022aa gdb/testsuite/gdb.base/twice.c +be572d94671c06053ac762fadef47500 gdb/testsuite/gdb.base/jit-elf.exp +8e29a57626d13e4c52381d3e7535ea17 gdb/testsuite/gdb.base/fullpath-expand.c +283e6013a4a2ab6755487cf5bdc9cc14 gdb/testsuite/gdb.base/all-architectures-6.exp +d80c24aff93401408375a7982f656810 gdb/testsuite/gdb.base/exe-lock.exp +bbd68c316d4ba5e21f8aac02eb605fa4 gdb/testsuite/gdb.base/macscp3.h +5069db7d4861c43854728d63688cb084 gdb/testsuite/gdb.base/auto-load.c +4bed65c0789a0b513644ec6cae748471 gdb/testsuite/gdb.base/frame-args.c +a9e9416cfddd15e34e197e67387067f8 gdb/testsuite/gdb.base/warning.exp +b9586b74f3ae778c33b9168c38919997 gdb/testsuite/gdb.base/share-env-with-gdbserver.c +0097bbd4916684fce8892843716ff161 gdb/testsuite/gdb.base/wchar.exp +ec0385c18655823ab0d8ff263c811084 gdb/testsuite/gdb.base/ptype-offsets.exp +80fb742c6028f138e4ad580d729b403a gdb/testsuite/gdb.base/lineinc3.h +417b5c995d12be92029bc8665ef5a53d gdb/testsuite/gdb.base/exitsignal.exp +e848e1a8aef2125bab17c70bf6dcda36 gdb/testsuite/gdb.base/gcore-relro.exp +807caadf56e34c83d8be3df1c7a583b7 gdb/testsuite/gdb.base/nostdlib.exp +8913a84fb5dee4078aba4a278cb9d60b gdb/testsuite/gdb.base/relocate.exp +c661b846d5b88079c917e4d4b390285c gdb/testsuite/gdb.base/prelink-lib.c +49b312ccc14cd26fdd79844c9f87fb82 gdb/testsuite/gdb.base/break-unload-file.exp +8ca3b7de5f4a17e5b5deeb7c90d3cb2a gdb/testsuite/gdb.base/jit-reader-simple-jit.c +03a75d9b59227e11d0c22dd1f8df3013 gdb/testsuite/gdb.base/step-symless.exp +acbeaaac6640072492ed64455d856a55 gdb/testsuite/gdb.base/foll-fork.exp +9abbb202693c949e0470656ba553b178 gdb/testsuite/gdb.base/sum.c +d79b6eaa96853e838bf11d7ac46a48f1 gdb/testsuite/gdb.rust/simple.exp +fd8b3d8279f4f1b1cd6cefec8b789481 gdb/testsuite/gdb.rust/methods.exp +f4008967d19048077dff0e009bc7dc83 gdb/testsuite/gdb.rust/modules.rs +db70cab96698f58e24859f5ce1523f5a gdb/testsuite/gdb.rust/unsized.exp +ef702d506c3824da76c73cc856ff2d2c gdb/testsuite/gdb.rust/rust-style.rs +b9f8846084191460052edd2a1dfef029 gdb/testsuite/gdb.rust/union.rs +c6c6b17e2c715c5008dd7a939abc3ed6 gdb/testsuite/gdb.rust/unsized.rs +73fccf54bad8c2f17b07b5c88bb1bab2 gdb/testsuite/gdb.rust/union.exp +041242a2dac2fd8cca5223f0a76d2901 gdb/testsuite/gdb.rust/watch.exp +0411c14f9f8167d95150e4d7bb6a3d59 gdb/testsuite/gdb.rust/watch.rs +6391533d0ea18c4e23a87fff88208e8f gdb/testsuite/gdb.rust/traits.exp +57db91bc6045235bc49a81b0d3eb6e5b gdb/testsuite/gdb.rust/rust-style.exp +18e0b773cfb4141dd340b984f971a9b9 gdb/testsuite/gdb.rust/methods.rs +8f9aa6c652e7d55bfaa2edb3ed5d7767 gdb/testsuite/gdb.rust/generics.rs +c5025fc0e784d8113fad09fcbd1f3d0a gdb/testsuite/gdb.rust/traits.rs +73e8a8c713a262569938d23693640fd5 gdb/testsuite/gdb.rust/generics.exp +1c2197ea26cf56e36080a04e76cc3074 gdb/testsuite/gdb.rust/expr.exp +a62e1e87a7b96b87c655f180255986f3 gdb/testsuite/gdb.rust/modules.exp +3568898994e7347884a3451f770c7632 gdb/testsuite/gdb.rust/simple.rs +6fb5c366d78fe2c47f31555c035ddcb3 gdb/testsuite/gdb.stabs/ecoff.sed +16ebc6e814bd3628cce9049f530a0990 gdb/testsuite/gdb.stabs/hppa.sed +13c1c52e5f77412c494a61a42fc5e60e gdb/testsuite/gdb.stabs/exclfwd.exp +4a87d0041963c650cbec0bdd23141931 gdb/testsuite/gdb.stabs/aout.sed +f9bd253d3ceea5b6a3ede0e57ac20cef gdb/testsuite/gdb.stabs/exclfwd1.c +55116cc62748d18c48e865b9e406e970 gdb/testsuite/gdb.stabs/exclfwd.h +bd43974a781c1d0f816fde8f4e399f94 gdb/testsuite/gdb.stabs/weird.exp +24cd51afd4311a96fd7256d1ebd3a4b1 gdb/testsuite/gdb.stabs/weird.def +1bae3b4dfaade2e7e08a5c4cad062497 gdb/testsuite/gdb.stabs/exclfwd2.c +ef0a0ca194e090e3a942606488625f47 gdb/testsuite/gdb.stabs/xcoff.sed +e36062db31c1acf0ea89f90d388c6f40 gdb/testsuite/gdb.stabs/gdb11479.c +96d894b5362c39a8bef3f2964e3804e3 gdb/testsuite/gdb.stabs/gdb11479.exp +b2d343548813ee5d345ff7b24c35434e gdb/testsuite/gdb.objc/basicclass.exp +e56da8a2167ae4268dceaf3f7a700dd0 gdb/testsuite/gdb.objc/print.exp +7df9d59fc511ad52590b72ab06a508ca gdb/testsuite/gdb.objc/nondebug.m +dce8033652a2c770c633378d3a344fb8 gdb/testsuite/gdb.objc/nondebug.exp +20444f48d24711ac9e09a75ce4333f67 gdb/testsuite/gdb.objc/objcdecode.exp +7b61c62480150a106c17c89dba938963 gdb/testsuite/gdb.objc/objcdecode.m +9ec7df7019ce6e4c044766b0ab81d75f gdb/testsuite/gdb.objc/basicclass.m +f9dc437cb133dc503353527ea78c6d41 gdb/testsuite/config/rom68k.exp +c964f56a62d0fc52495302850f9cb949 gdb/testsuite/config/slite.exp +e4708e4b23e4e6ddd07c7245736d37b3 gdb/testsuite/config/cygmon.exp +317a3955ddfd366287bf4864c0793703 gdb/testsuite/config/default.exp +e4708e4b23e4e6ddd07c7245736d37b3 gdb/testsuite/config/bfin.exp +7d8dc7981692cdf9dcd8df5985317cbb gdb/testsuite/config/mn10300-eval.exp +a5fef0612c61bf4f5e7a8c4c361ab26b gdb/testsuite/config/sim.exp +7d8dc7981692cdf9dcd8df5985317cbb gdb/testsuite/config/dve.exp +c6771186b468a38e3732e077f6bd2e82 gdb/testsuite/config/mips.exp +f9dc437cb133dc503353527ea78c6d41 gdb/testsuite/config/sh.exp +4011c104ce1e58655dc195036a1d09f8 gdb/testsuite/config/extended-gdbserver.exp +f9dc437cb133dc503353527ea78c6d41 gdb/testsuite/config/vr4300.exp +2652ef818d549a94ecd75245833998b4 gdb/testsuite/config/d10v.exp +e4708e4b23e4e6ddd07c7245736d37b3 gdb/testsuite/config/arm-ice.exp +486788c7ec5008ceb0f57e7b8b8793b7 gdb/testsuite/config/unix.exp +f9dc437cb133dc503353527ea78c6d41 gdb/testsuite/config/proelf.exp +c6771186b468a38e3732e077f6bd2e82 gdb/testsuite/config/mips-idt.exp +cf0b15ccf57b333d5d590f6b9a61d664 gdb/testsuite/config/gdbserver.exp +f9dc437cb133dc503353527ea78c6d41 gdb/testsuite/config/i960.exp +a8a5cafde0e4341b0f5f5bedec617997 gdb/testsuite/config/monitor.exp +f9dc437cb133dc503353527ea78c6d41 gdb/testsuite/config/vr5000.exp +e4708e4b23e4e6ddd07c7245736d37b3 gdb/testsuite/config/i386-bozo.exp +609319e4105d5cdc50cc18d35a982da4 gdb/testsuite/config/m32r.exp +c8d8a3ce3c0b3a12e6df4847ed308d8e gdb/testsuite/config/sid.exp +20991059fa10002e525207d47e692de2 gdb/testsuite/config/cfdbug.exp +e4708e4b23e4e6ddd07c7245736d37b3 gdb/testsuite/config/h8300.exp +4749304ffe0ebada34e9c197dbc4cd94 gdb/testsuite/README +c0cbd4918c4a6da23d93302c83d3abaf gdb/testsuite/lib/set_unbuffered_mode.c +c0159715713fb293aab73e7d9a04a22a gdb/testsuite/lib/perftest.exp +771e655c1a48b2cc8592726ac41be190 gdb/testsuite/lib/dtrace.exp +fd6165998caab3fae20a05bcc9e5e178 gdb/testsuite/lib/selftest-support.exp +a51b8dff81501e75b9dfad9f8c4dd24b gdb/testsuite/lib/mi-support.exp +fe7b6733d7f839d96a549ea2d24c46c7 gdb/testsuite/lib/opencl_hostapp.c +b95dc2a351d65373861d5ccbc6f62d5c gdb/testsuite/lib/opencl_kernel.cl +123258da1d1d36f16aa1026dae266657 gdb/testsuite/lib/gdb-guile.exp +cec0d3c5f019fbb793ee53245ab669f0 gdb/testsuite/lib/compile-support.exp +aabf26939fc85e2a4200f4d613b647b9 gdb/testsuite/lib/ada.exp +e83afd9fa0144391eada754d04f8abf9 gdb/testsuite/lib/check-test-names.exp +9eddb51c765500d84027e782f60996c5 gdb/testsuite/lib/gdb.exp +b62aaa8d0eb18ad2fc933377ddc20256 gdb/testsuite/lib/d-support.exp +ecfc07bd47114127cad4afa1d33046a1 gdb/testsuite/lib/gen-perf-test.exp +3925ef244d69bc945597cf320b67116a gdb/testsuite/lib/trace-support.exp +a22188fc9683b5b9bb4f17c275991352 gdb/testsuite/lib/pascal.exp +c44fcac1140f21df69579790a8a662b3 gdb/testsuite/lib/prelink-support.exp +64f92fb055729e50c880160067fe70ad gdb/testsuite/lib/build-piece.exp +84132eff612bb8352254b27ca71fecd8 gdb/testsuite/lib/unbuffer_output.c +69dd297cd2ef894156a02e01c53f56e6 gdb/testsuite/lib/gdbserver-support.exp +d957fc2aec717bc370d5a78050ef324a gdb/testsuite/lib/future.exp +2eba5b4e3e93a499ae6414c9b7ddaad0 gdb/testsuite/lib/pdtrace +2d7792863a719f5a8b9cf17728ac8a54 gdb/testsuite/lib/dwarf.exp +3893ca0efbf42cb5c6f48345d1192ec7 gdb/testsuite/lib/rust-support.exp +2b962509b5b291ca0d73be46da1cffc9 gdb/testsuite/lib/sym-info-cmds.exp +c394a8f24997b067ca168778380ddc12 gdb/testsuite/lib/cache.exp +2dbba566729fcd5e85f23680e8690dc3 gdb/testsuite/lib/jit-elf-helpers.exp +6d2ca1fd04015ebc7b502f1d24a62aad gdb/testsuite/lib/range-stepping-support.exp +b6db0ea8a98d0003ca5dda88141b2362 gdb/testsuite/lib/gdb-python.exp +5ba491c09dca77d9a348673e4f6660c6 gdb/testsuite/lib/valgrind.exp +0ab5046664c49047229a2634d405c36e gdb/testsuite/lib/cp-support.exp +ba1ab418a618277e7ff72a9ade9db496 gdb/testsuite/lib/gdb-utils.exp +8e206d30265d5f6f35a7bd863d1504ed gdb/testsuite/lib/pdtrace.in +c77ab7b17376744a53d17a8122bd73b7 gdb/testsuite/lib/compiler.cc +4ff829a5ec77dd8aa1b6d031ff9e9535 gdb/testsuite/lib/data-structures.exp +0b6dfa9fab72ce8119778e985a59505b gdb/testsuite/lib/go.exp +c973077a2720246c1a29bb9ee5b4ab88 gdb/testsuite/lib/cl_util.h +0617c401a0b23a8bd0c991273e5f791d gdb/testsuite/lib/fortran.exp +2d17a01d38cbdd4d94fd12d36ec5e149 gdb/testsuite/lib/memory.exp +a75a51ab4f74c9dbee40e4fde943d6f2 gdb/testsuite/lib/gnat_debug_info_test.adb +5fdb979e40dad8eff794231b1fe36f48 gdb/testsuite/lib/objc.exp +6d623a46c9b8719845d98d31e8285f3e gdb/testsuite/lib/prompt.exp +6f1f73f7061aa51c35989e7061799bc0 gdb/testsuite/lib/tuiterm.exp +e6799be34709cbd54c7dc8614cf4a6d6 gdb/testsuite/lib/append_gdb_boards_dir.exp +02a11f8d90e33dec0998c6dae66989a0 gdb/testsuite/lib/opencl.exp +ab14ed117948c160497b4b37c7b84c7c gdb/testsuite/lib/cl_util.c +be843e1b615795f42da5f0d08df2e19b gdb/testsuite/lib/completion-support.exp +8512816f1c0bf9fc35ec9653f836da0f gdb/testsuite/lib/compiler.c +ec070319082a05ffe0a2445e4f9724bc gdb/testsuite/lib/read1.c +2d48efa454ba770385ff06f496d6c6cb gdb/amd64-nat.h 1de2e2c8bd6fc22a95d8484cbf584e4d gdb/process_reply.defs -0ea60016b5967cf7df680426f8e5a807 gdb/aarch64-ravenscar-thread.c -7c759f993c2cbd8771a89fc478dcc756 gdb/event-loop.c -487f9fd7f93450547c83005f3f23213e gdb/vax-tdep.c -133d4201fe90f8235db4cbae3deb546b gdb/i386-tdep.c -c9226f1c310ff937953acd3b5647f9ef gdb/reply_mig_hack.awk -3c12e3ef39d9ffe3a1809c22d4f6ae39 gdb/ia64-libunwind-tdep.h -64e8d83710d661e5210843e2804fa8f4 gdb/mips-nbsd-nat.c -d9b08842c59e57a7237ce8de35f68a84 gdb/rs6000-aix-tdep.h -153923c85ebc878c3a8393e7e2d3ac81 gdb/infrun.c -3d0c592698c3146a91764f3ddfb03237 gdb/arm-linux-tdep.c -4e582599c358c3c06225082e6341be4e gdb/amd64-obsd-nat.c -dfda3574280aa58b96df18e1024c9242 gdb/skip.h -70a77fd6898743da19391f432f32be37 gdb/ChangeLog-2008 -2fcad9614530e7ad263b0523cdd0feec gdb/process-stratum-target.h -a06b24582f9201d43c226baa846d1a71 gdb/x86-linux-nat.c -5370bf872c5fb03e64235b5cad4c290a gdb/ppc64-tdep.c -733d9f61cf3a4143fc22489c80de1b5e gdb/filesystem.c -715435a1cf99cf0cfbceeb937254fdb0 gdb/ser-mingw.c -9414b0e8b919341c16bff77f3903bfd1 gdb/bsd-uthread.c -691c6a21503d5e628b6151b2d92af0cb gdb/tilegx-tdep.c -94c2a736ba9bc3fe9b4c6728c4d7224d gdb/osabi.h -0c9e8145cfa947216c425c17fb0878b6 gdb/silent-rules.mk -9b665ad5f67e2790e5ae23d4de87fdee gdb/m68k-bsd-tdep.c -26c7cfd310eb308d535866d8b7bd2b8f gdb/xml-support.h -408abed4d410c12c06211a9228f7b6df gdb/dwarf-index-cache.h -51d2fa6ce8618d5c87150c7c576f1f6d gdb/ChangeLog-1992 -d78584df03b2ee5fd98a2d6281bcefde gdb/xml-tdesc.c -9dd70dd6c4f304fd0a3d91a48caa5f98 gdb/compile/compile.c -bc3d240cca682cb40a29a4c1068a8856 gdb/compile/compile-c.h -fb62a07f0817276cda6f88d129cb22d3 gdb/compile/compile-object-load.c -a0942e6bcfd3134df892da00e0147722 gdb/compile/compile-c-symbols.c -4ef74d1bf8bd6dd66dab358da541caa1 gdb/compile/compile-c-types.c -118ee601de80f246e5fd6efecce11dad gdb/compile/compile-object-run.c -3b96a3e264f41431445f5d3ab35e0849 gdb/compile/compile-object-run.h -984723ca21955514fc770bdd5356e13c gdb/compile/gcc-cp-plugin.h -e17f63b6d969e911609a7a4510b1c0cb gdb/compile/compile-cplus-types.c -d5ce5e1950faef4fe8e73beb73512dab gdb/compile/compile-internal.h -ff1b2f9edea956e7d35c8d697344d718 gdb/compile/compile-c-support.c -d5257059c9b27d54b74caaad9173457b gdb/compile/compile-loc2c.c -fa3be871c838f1e85b95ea2ef686ceb4 gdb/compile/compile.h -c029c62ae2ccde77c3f2729bcbeac7f8 gdb/compile/gcc-c-plugin.h -22f1f62fff909207f1a9c43077c0e0e1 gdb/compile/compile-cplus.h -8700208a8eb206445764ed3297a61a89 gdb/compile/compile-cplus-symbols.c -e8046a71f8e7207423310665d631144b gdb/compile/compile-object-load.h -cc8e374d4a4462716b7972812a1105f7 gdb/i386-nto-tdep.c -1b69384ab7f78401c500824d715de628 gdb/fbsd-nat.c -b1a32aba1927baccba1677b759424ea6 gdb/arm-nbsd-nat.c -3752985affd62c868b3fd2da7da309c0 gdb/solist.h -03a0dd730092e12c4c3502868ad33c45 gdb/dwarf2-frame-tailcall.h -c902b420d62293c48a80c655ae57534a gdb/arm-tdep.h +7c81d141b74d5f697c93cf365150b391 gdb/tramp-frame.h +14d3541faf07e3cc9f5b7c5e5ae222a0 gdb/language.c +9eaed1676481ac0008a29319e92b96df gdb/tilegx-tdep.h +2111b82e6a30232fd01d58f3a0935e6a gdb/sparc-linux-tdep.c +4b054e79ca1df8fe1828c65d667a3a90 gdb/gdbtypes.h +dc7a76f6d0c7f7b7eb32854736863501 gdb/inline-frame.c +c797f7bea633375004be3db290be1d9c gdb/objc-lang.h +3046c0607ef442337a6966fea32ebb6d gdb/cris-tdep.c +5ccb31bc8c522884b4f1af2e6da0663c gdb/coff-pe-read.h +45950f2fd5f02889567d3480428f71da gdb/ChangeLog-2013 +0a57dc2abde11ff77cd558d7a2461e37 gdb/xml-tdesc.h +900c72496e79af78a53043e9983abeb8 gdb/source.c +5c6ee7aea0d3f9524c01b4f6d65f9309 gdb/bfd-target.c +562c80643d95f581b9e6dd8d9abef78c gdb/value.c +83a1a21c8dfcdebb206956b2335eebab gdb/mips-linux-tdep.h +40f1ee5cfaf56b166663650839fd78bf gdb/linux-nat-trad.c +39dfa4a8c6be166066c2df3f761d9df5 gdb/osdata.c +9b521e20ff8f6a09e1079d120e95c894 gdb/xtensa-xtregs.c +676ad3da4bf750697cfdba27cdd12841 gdb/symtab.h +5606b28aafc0074988c83df279a8bb93 gdb/build-id.c +a5855d5d038903fe05b5b68f965a9710 gdb/aarch64-fbsd-tdep.h +aa124c26c89213fe84483b3193cd579d gdb/i386-darwin-tdep.c +f13bffd0f6ee405a56e5ed419b551ec2 gdb/i386-dicos-tdep.c +6fffe6b03bf711e29ae4f59d99256fff gdb/test-target.h +f3d8f2e0db10e5da9f37e29750c70b02 gdb/stub-termcap.c +515f1e213eef9a31852efde0388ce25c gdb/aarch64-newlib-tdep.c +6feae45d4130e29d87ef1190f4b3238c gdb/valprint.h +70382722265eec156bdab5a65cc53774 gdb/producer.c +0ec59b9f90e07f361c225d8ee05e87a3 gdb/gdb_bfd.h +e9acf9347a11659b319a093f6575ceb5 gdb/arm-wince-tdep.c +64fb685cf52f3d29cf7355e76b371634 gdb/i386-sol2-nat.c +c5cda428aea379e35dbddbff1584571c gdb/amd64-obsd-nat.c +1ac255a7ea78ac25fcaaa39501f62e4a gdb/d-exp.y +f8251a77666e6af1e5f8c34c3b2bf617 gdb/ia64-linux-nat.c +77644365968470f123f295df7018a6e2 gdb/hppa-linux-tdep.c +fecd370e5dc3d4b5b2de1f39484ace4f gdb/regcache.h +7bcded6c47a97213483767b8895ebe36 gdb/xml-builtin.h +4c86d52e4b6f8c5133bc1e8e3ba89687 gdb/tracefile-tfile.c +25e8df8c6ca3d248cb4bb8e079e741ac gdb/sparc-nbsd-tdep.c +bbb8f8843cf00bfcc8bb02dd4ddbdab1 gdb/trad-frame.h +13afb266603091758597f73d273b9e29 gdb/gcore.in +392d76640b35c20c53c59da650ded8b0 gdb/target-dcache.c +ca1d6973606ee4fa4df4d4ad85a668b6 gdb/symfile.c +b1f615d43d445f7b06b4bd1c64e31472 gdb/gdb_buildall.sh +e4cf530d8ef2b8a671547fa7802fe945 gdb/regcache-dump.c +c881af9108927834b1eb8a93857f6b60 gdb/linux-record.c +9693413eb6a94c9a9c6e081563b7b6b9 gdb/ChangeLog-2009 +4767c456c3308a80a8f3e6d8b372fdd2 gdb/ppc-linux-nat.c +d32239bcb673463ab874e80d47fae504 gdb/COPYING +be7d710aedab72f2924ca0155dc5861d gdb/valprint.c +002fb54e753bd3371284c50738219ce6 gdb/completer.h +66ef2a75917b4e40c950540b88dffb10 gdb/fbsd-tdep.c +107f9d4625f97827bcf9a21ce41efb08 gdb/maint.c +baa33a0e70bca6a3584acb66fa888abf gdb/solib-dsbt.c +2c47f4ced90349ef57169ccb7e578cd6 gdb/ser-base.c +a5c40eddc1d97981acddf4775c58c43a gdb/symfile-mem.c +f33bf31fbbc638e1c99386ee7b361c9c gdb/amd64-obsd-tdep.c +861ff059e833e5cfb8b6d9b8462dbef2 gdb/arm-nbsd-tdep.c +3f647679392c216580c85f40cd34daa7 gdb/ppc-sysv-tdep.c +ecdc34b6949b826f1ff4badc8cdc27f1 gdb/ui-style.h +9fc43fec8415fa06d3509f37fa220bea gdb/tracefile.c +63c8c227706af88b011f823fd077a3fb gdb/ax-gdb.c +3f7ae23e6162432e632b057b475ff484 gdb/d-lang.h +d81c04735543e8d05de30700245a3323 gdb/i386-darwin-nat.c +cc91a7fa02be2a60e23c01f26791b334 gdb/xml-syscall.h +e3323cb240615a194686b877325502c2 gdb/i386-nbsd-nat.c +70e3bf8d38ff8a491a8ccf9817f5cc97 gdb/nbsd-tdep.c +4891a58c0c61c835148ffb9fa652b67d gdb/printcmd.c +3a4284fc84a0956081f88d896d9db03b gdb/p-typeprint.c +3c1ed99d50e6e00938c88d837c169c96 gdb/rl78-tdep.c +bfdbf78a378f38c05bae9f392fb1a277 gdb/macrotab.h +3b67771a5e438e9a2fb76b2e341c0158 gdb/gdb-gdb.py.in +3bfa8be48267b59db815862fedadacff gdb/x86-tdep.h +c96d12d4cd4be3dbca8702f1f9e17936 gdb/gnu-v2-abi.c +ef34fb796665063f89a35029908b8282 gdb/sparc64-nbsd-tdep.c +7b22b815df6c73144a9a57f739deac54 gdb/go-valprint.c +11d8270e8b3404cb2ebf1ce543e5c281 gdb/sparc64-obsd-tdep.c +cc37e98bc4a01614deb3b6611b0d52a3 gdb/command.h +f9df311321940bc5bd621112f3e9b9cd gdb/s390-linux-tdep.h +a1db4c7b94161c9e02343b84e550737e gdb/acx_configure_dir.m4 +edf4a4bc0bb8bb627def9899aa3e1518 gdb/linux-fork.c +95783319ba748f16def425e6f3cb22e6 gdb/target-float.h +9bdc881bccd2ab07f5b388a8d8fffff6 gdb/ser-tcp.h +00d16a076996d1f60a78a79bbb038109 gdb/c-support.h +0c1fc43c42890bacb9b75c9abd5cddaa gdb/mn10300-linux-tdep.c +a1f3e159f43c98b401c2ac2cea7480ea gdb/gdb-demangle.h +93efff6036be900593ad89f43aabe138 gdb/linespec.c +4480cc66caed1ebcb6dee2516c5fd991 gdb/run-on-main-thread.c +c65c5a1756b7fabbeaf5b5c782636cc1 gdb/bfin-tdep.h +852adb28495b867ba576b53d1637be7c gdb/continuations.h +219ea483196da8e31828606dbed8eb4c gdb/ada-varobj.c +da0f37af71e3a9c1a8716d3d1d439d8b gdb/f-lang.c +6330f2cd10e0a1031dd8af6de03eb45d gdb/nbsd-nat.h +c2c29f20fa5c415c01efeaab48d40f50 gdb/vax-tdep.c +1337d85b0e9886b5a4c11d9443f1bf6a gdb/ax-general.c +773d1190dd1afd6f1bb35d6d5378f122 gdb/mips-nbsd-nat.c +9bec4ac3979a18dd59c447915488e073 gdb/alpha-bsd-tdep.c +c0cb4e31f5ab9f48ec4b23becd97a1fd gdb/parse.c +d400379ce784efd1439765f1df692545 gdb/sh-tdep.h +6254d9b92d6ab24ccd00ab17acf92c3e gdb/ppc-fbsd-tdep.h +d8458c523943bd11ecf0adea27e1ac7e gdb/prologue-value.c +ee4d230d222e3c3b464da06976b4269d gdb/frame-unwind.h +32ca6e90724ca2fa37edd8943fbf68b6 gdb/frame.c +c531a3fb1889012084eeaf953444f8be gdb/xcoffread.h +c6c8e46d530d595e11d9f7e8e6561ffc gdb/mips-linux-nat.c +c0fe34a08816f24f868305b6eab4206f gdb/gdb_obstack.h +6b5c39be134380001a7cc9511bc7499c gdb/gdb_vfork.h +4ca76bc22a0fb29a9f5bf206b4449938 gdb/ia64-vms-tdep.c +dd9920aafe39f3f1eebabfbaa55e5eed gdb/score-tdep.h +8d98fbb72e6254480391f9cf5b7981c8 gdb/i386-gnu-nat.c +062b5fb0595ec2ea70d0fe0ec8bcad9f gdb/target.c +7d1fe298122d1f0a4ab959909f230b02 gdb/p-exp.c +19de5c31b3ca45a83b34322868bf5b3f gdb/copyright.py +b512834498e5c39580860b1bf149e7e7 gdb/aarch64-linux-tdep.h +9a6cb7708b1a1585ee09f471dcd3da76 gdb/tid-parse.c +3c8d9323138d37e3ebf9307951515ba8 gdb/symfile-debug.c +49142be1bfadac54c175bab10e2f16b6 gdb/ctfread.h +224f0f8e9ed3b74b745b0566b9f92623 gdb/memattr.h +b94c70d73e82dd717f4424f080fbd936 gdb/aarch32-linux-nat.c +3e2c58185976f85f4364ec42eac4cfdb gdb/amd64-bsd-nat.h +3c00838d9f6eff3d1c75b275cf5052dd gdb/memory-map.h +378b6e904ee107cfb87284b634e5b08b gdb/stap-probe.c +49f5c960d74d15d58daf772cdd815c53 gdb/xtensa-tdep.c +002ae81053d737b9d0d31f419a6a1ac9 gdb/solib-aix.c +15891dbb3775dc5bfe9be712d5bd961f gdb/inf-loop.h +476abc8489c82cbb1590de6328387626 gdb/nds32-tdep.c +01f121ad2fe30ebecee4600e4fb9cd18 gdb/record-btrace.h +5d9a3490a938baa9e8287a89c386e604 gdb/score-tdep.c +4c3187b84bdf7a9f8cc26dee8d05d32a gdb/type-stack.h +03276a4afcac39792f110092b617eb03 gdb/rust-exp.c +794b944c495ab409be9490161e99e048 gdb/remote-sim.c +fdd5684b389a5c2edf999bf441505188 gdb/typeprint.h +e9f15ac1fe1b4fb228779eb5f2f75e25 gdb/linux-nat.c +210de803e8b484373c3c917e6a16ae0c gdb/amd64-nbsd-tdep.c +a4cd103eb80cb437708a35ac767da265 gdb/ChangeLog-2014 +8f9779d3eddf8e577074ca74a3a8194e gdb/proc-utils.h +b0aad88934f9c3d3ac686ed4dda05b7c gdb/charset-list.h +2cd962b08837dcd1d0eb81e9ee0a6b04 gdb/amd64-linux-tdep.h +a34b056891bc08c033dad085c9a0083c gdb/i387-tdep.c +1172960ea56f7f7aeb361bc2264d7d01 gdb/bfd-target.h +8566a3169c2797dbe7003907685ba315 gdb/complaints.c +95f03730cb646ba47f9e94dcfe2c5ae6 gdb/ser-event.h +662186d1211f845cbb3621858a8a120e gdb/nto-tdep.h +7ebcbfd1852c94fa77b755b945971095 gdb/m32c-tdep.c +fbd80b9f2f941f209edda9b0b74c86d8 gdb/procfs.c +7833a0252e501609aaaf50dc041a5270 gdb/ppc-obsd-tdep.h +d916eabb4f8ccefd35ad171545aeeada gdb/objfile-flags.h +a0570c5328840b55768262b2dc5ed9c7 gdb/defs.h +c671bcd9932b9ab237a8c43f70c5819e gdb/tracectf.c +6deb99289c05a2ee8e355e655b45d766 gdb/complaints.h +a3fabb344cfb26c2f949b2ecef8e2f1a gdb/minsyms.h +8bee5d4b0ad17e2af53ed4a36e553383 gdb/addrmap.h +b8888814f09c37a9b5829a366706961b gdb/c-exp.y +b4d26008d5652feb4a7d2e3ebc9436ae gdb/inf-ptrace.h +65bf0aba7c2a60a22e098846c7feb716 gdb/dwarf2/read.c +cb0c53028cd18e4112cb6485aad6eea8 gdb/dwarf2/index-write.h +fc29f1f0bd0804c4dbf46946d7198ec9 gdb/dwarf2/leb.c +60b217b47eb6609b368d8421406ac0dc gdb/dwarf2/attribute.h +08a3f0f22c7650d14e7502ea6fa9d388 gdb/dwarf2/frame-tailcall.h +b169f7b4e9aa0c1a22dc1ecb95045570 gdb/dwarf2/section.c +d90ffcd629e89d6454d8c097868bc3d2 gdb/dwarf2/section.h +05cc2ebf354c651a67e3dd063ead338d gdb/dwarf2/index-write.c +1414d14a3172d8c3d1e5b5f9d59ac147 gdb/dwarf2/abbrev.h +cd77e8669009685d6b4f863c97a0860f gdb/dwarf2/die.h +40558511f4dcc14d79c795b6532d950b gdb/dwarf2/stringify.c +12a250917fc4dadbf6a85989d0e95cd8 gdb/dwarf2/line-header.h +7dfc21b95841ecf3adf5d3bd86c8c8c2 gdb/dwarf2/frame-tailcall.c +8c95120ede1f7ddfc93209009b80a3f7 gdb/dwarf2/expr.c +81a074d5adb0af36f5c723ea592d3e30 gdb/dwarf2/dwz.h +1752cc85dd28d270f5ecc35a3634930b gdb/dwarf2/macro.h +514910a307abe0abe82788033cbcf6dd gdb/dwarf2/dwz.c +eb53665270b9e17e2ab0bd8b1402e1e5 gdb/dwarf2/index-cache.c +3985e604599289c31f7d7634600bace8 gdb/dwarf2/frame.c +21f61a4f3e4e824871f08989569784bc gdb/dwarf2/index-common.c +cb18565f2627239b548c3cd441f292ee gdb/dwarf2/leb.h +b2a620ce106eba92aa1573b389a72bd2 gdb/dwarf2/read.h +de6f210a52ca8955128298432aa6e6d6 gdb/dwarf2/line-header.c +f3ca98db1e98a81e0703b9bbcb08a893 gdb/dwarf2/comp-unit.c +2f0850af68c0ae5254b1467b533af4c6 gdb/dwarf2/loc.c +aab0ad821c8a03f1eed977069e07dc35 gdb/dwarf2/macro.c +f6b08e61eb9730386443ace71d2892ba gdb/dwarf2/loc.h +8de30cad0fe12c32d5c7cc7dcb492b0c gdb/dwarf2/abbrev.c +8b7412a5d7112b095e0c63a3b1f36b4d gdb/dwarf2/index-common.h +e58916586fff2144d9a0eedba4e8f1bf gdb/dwarf2/attribute.c +4a0521166b0c2b99a88e1e05422b2c32 gdb/dwarf2/stringify.h +db2b91696268a1e0d44305dcab178116 gdb/dwarf2/index-cache.h +156d172f8b552cebf61f19910f5df3e2 gdb/dwarf2/expr.h +ed1e33780a19e5053ba5828d1b844acc gdb/dwarf2/frame.h +8c6fab66a341af7e4082a0d8bb680ff3 gdb/dwarf2/comp-unit.h +e2bcba66ab469c2a8e4e10ed2cdb8c09 gdb/solib.h +0e6b74cc93bc6d8acfc30b391a9329fb gdb/s12z-tdep.c +75f94a16bf4293b8a448f2a5e6cb2a07 gdb/ppc-obsd-nat.c +01e250941dc6d27706600d131deab897 gdb/infcall.h +4862e73ad4f99b7e7309d2ecedcc1c64 gdb/solib-aix.h +badbc13ad5fbac590a163e1f37ece963 gdb/ser-event.c +6b8e3339a555b1cea35bdee04e8c4c50 gdb/c-lang.c +d1cec0457bfcf86bfa222f17481f1ed9 gdb/break-catch-throw.c +6085cb070329a0d1fc31e6082ded738c gdb/async-event.h +734f2388f0df6314721cb6c9516fd21b gdb/windows-tdep.c +6112bd1b01e6bda433f95ca5eb04ba15 gdb/riscv-tdep.h +79554f371397293e89ac0d1fb8d72d98 gdb/registry.h +c7909b5d837d6419e16fcfc69c2940ca gdb/debug.c +8b9e1b21384c04c002248f26d964eabc gdb/c-valprint.c +40b894ef1961dd2241c3d095f840ffbc gdb/ia64-libunwind-tdep.h +3de76a22eeacb0a59464725ca9315686 gdb/Makefile.in +2e8cef5df3b38b00d8023dedf6a748b8 gdb/sparc64-linux-nat.c +314ba2766a71eb66a328fc89e78196a4 gdb/filesystem.c +3b708ebb92db8d989ad1eab237d0b66a gdb/prologue-value.h +59355b5a7dad6991391b6aa9614fc367 gdb/gdb_expat.h +34d6197fed70e7f3b459511c47da545a gdb/main.c +420682373005318da661477cd8bc973a gdb/inferior.c +d361331bb3d7a916090b7678d141df16 gdb/hppa-bsd-tdep.h +b57f3849dfefbc0eb6527f0719005d31 gdb/f-valprint.c +fb13486a5c9b8542175870c26eed579d gdb/ppc-nbsd-tdep.h +2d1f2466458d046a65f013717108c58d gdb/block.h +4ca55ed208ce6a12e5466a915385ae03 gdb/sol-thread.c +df9ba3db296e9d6d22f675fab0b39b1a gdb/arm-linux-nat.c +0a56581093d56a13ccd54a009137b348 gdb/hppa-obsd-tdep.c +cf8972c339879d59c88db9076539f689 gdb/remote-fileio.h +71586257f6b2b5ebecb20db52d194ecc gdb/csky-tdep.h +0db74fb80d9a1cd96eb04a06ff3f2544 gdb/nbsd-tdep.h +553246fefb4dab30358c63ce3bc93d72 gdb/mingw-hdep.c +b388965ce3ebd68b7b558dbcffd9d08d gdb/auxv.c +80e1d6166b734a9989692e0e4ca3a5de gdb/alpha-bsd-nat.c +8262aadebdc9c880022cb06bc88d5ad8 gdb/dummy-frame.h ff6f680f23dad45d62b0b88e006cd1da gdb/PROBLEMS -433173791359d1435409cf53ddb1b09d gdb/breakpoint.h -b748c95288244a2f4c5be2d5ab024650 gdb/arch/arm-get-next-pcs.h -a1051f3de602699afc7b4bd0469a0060 gdb/arch/amd64.c -715baad218175bd14f246829deaa1944 gdb/arch/arm-get-next-pcs.c -d83380f9d62504fa6022a9d658e4db1b gdb/arch/aarch32.h -dbf1d09a415941400c7a649f50fc8884 gdb/arch/ppc-linux-tdesc.h -a6a0278e50ab927d07486aa1d2507305 gdb/arch/riscv.h -bd5c54c811696aecc67be198c129149e gdb/arch/arm.c -55710031672a29628f5e66a75c2965dd gdb/arch/ppc-linux-common.c -24ee75c3a47acad247497f243a591e76 gdb/arch/arm-linux.h -fa7028fe36050cc1af7f50fd39bd5755 gdb/arch/riscv.c -440890e0eaec1e0368ae25072c14ce26 gdb/arch/tic6x.c -f35c3eeba588909ad26a9b922fead438 gdb/arch/i386.c -9edf521900646a89457836f2c4f5f09e gdb/arch/xtensa.h -5d9315b8954445601ae41d5210363cac gdb/arch/tic6x.h -bd48f0c39e820309e2b17e90d17378a1 gdb/arch/arm-linux.c -f87981bab5e4ee5e5b086bd940df8751 gdb/arch/aarch64-insn.h -94b7820927d246a487048abd8119f62e gdb/arch/arm.h -265505e5b2776d4f0126420da658c669 gdb/arch/i386.h -9ab3edf3424efa53c9a480a1fb08cf8e gdb/arch/ppc-linux-common.h -d81490fd8a70a81cf76085106a37bce6 gdb/arch/aarch64.h -f21cc171d975d753c41d6d7b561dd49b gdb/arch/aarch32.c -a4e2dbe6f43c36c9724712f044584906 gdb/arch/aarch64.c -8d531acff9d69478f44b693b65f9ab83 gdb/arch/aarch64-insn.c -42c55a3593f239fe547bcbd5712e1102 gdb/arch/amd64.h -047307e6b8777cf3277bd6f00552568c gdb/serial.c -ed5534811bea5bbaa58374dde35743e2 gdb/darwin-nat.h -a32c6b849ba1ef2f35cf4b7418001822 gdb/p-lang.h -ffb9f87d85745cb6d0b8f10eea288a6a gdb/gdb_bfd.c -6305d712bf5d7db7e9a128a25c599781 gdb/ada-operator.def -92361ed94685d5f14ef15391c932f554 gdb/arc-newlib-tdep.c -64686ee43839f57861b27c471abf4294 gdb/i386-dicos-tdep.c -4b6803d314e7ae40336aacd5e11044a7 gdb/proc-utils.h -9843c1f320988ad81a1dc7c19949f763 gdb/memattr.h -afde6db57a17a2b0c89f91829db38eef gdb/go-valprint.c -e9102900e0596f682c529513ae79f7b5 gdb/ppc64-tdep.h -954816c9c90bf5243e7fe5c7672f77d1 gdb/interps.c -e22f35b5178abb745fedd2c57aec4e2c gdb/ui-out.c -f8a0f0aefeba5a34e614398f98abe37f gdb/macrotab.h -3eaccfa2d825669b2c63efe34d8d2135 gdb/d-valprint.c -e0115ef83df6ad0a0b04d3b1d67774ef gdb/i386-sol2-nat.c -b0365f0d6d01c80089a6fbaa1a6d847d gdb/alpha-bsd-tdep.c -3c3e748323f79cd3d1ca18904603a9b6 gdb/arm-tdep.c -e0ffdcb2bd2d3661497168c5ece58e4b gdb/ser-tcp.h -1f41fa5b131a0421ca3ce47fa53d538a gdb/sparc64-fbsd-nat.c -f6cc0c3a5d89edaaf844dc328112d1b1 gdb/expression.h -b054f1764f2cc60a4f5ef038ce6797ff gdb/amd64-bsd-nat.h -8c36070234114404968989cf8eb278ca gdb/cp-namespace.c -ccab680dc75e9907fe4542070329ced7 gdb/target-descriptions.h -983a53e2aa54b770df845da8d00c55be gdb/acx_configure_dir.m4 -36f26edb6d9582720e7414a339f8edc4 gdb/maint.c -9e0cd3bc24e46b01aab42f1191273d43 gdb/NEWS -afe5837834ac6efbd388b2b1a228e93c gdb/go-exp.c -1771c002904d5b735f0d10f38c0ae80d gdb/xtensa-linux-nat.c -64477325300efa865f1fbaadf6f1f2e4 gdb/sparc-nbsd-nat.c -41fb7cc629a470ff38f04beb1d252053 gdb/aarch64-fbsd-nat.c -6baeb63f6ed71694c18248fc97e9b40a gdb/rust-lang.c -b4003b85a10afabf7ce14df551eff376 gdb/mips-fbsd-tdep.h -f5047469c3ac638798d9f2fce55cad76 gdb/nbsd-nat.h -57c95cb35a946e0d581b4a17e9fe454a gdb/thread-iter.h -9840352e8c705706e43c342f87ac0aac gdb/riscv-linux-tdep.c -07727095e1978baa0739fee49533471d gdb/tui/tui-source.c -fd383c9495ddda48d2613e8fafd098a2 gdb/tui/tui-disasm.c -6747d849ae80e4ad1a16326700acb60b gdb/tui/tui-source.h -b4651173f914e64acf6e98e92a7a2ee4 gdb/tui/tui-command.h -7638f27a2a264544c47043588a75c1b4 gdb/tui/tui-regs.h -b3cae5be565478880e5952d07255979e gdb/tui/tui-wingeneral.h -53cdd39460ea3406106b8b839c8aabae gdb/tui/tui-command.c -4c559c82e5899d6668c8edbf41d2c6ee gdb/tui/tui-regs.c -55f79b963f8ac66c2feed01d870921c8 gdb/tui/tui-out.c -a7abfd455b1134ce5ac869d311e700ce gdb/tui/tui-wingeneral.c -a3400058970ea07d5884ab26a610498b gdb/tui/tui-winsource.c -07002f715cfa800ac91c00abf74b9d84 gdb/tui/tui-interp.c -9507da2cb60eb530d4139ce644d8fd2e gdb/tui/tui.h -e88fa5ea6c54a6b9238191c408ae17c5 gdb/tui/tui.c -453d863fce22b034c5be16a609117c84 gdb/tui/tui-win.h -2fd19689e4324135ef57056558ab91be gdb/tui/tui-file.h -f33adeff7cd629843228c648324b3427 gdb/tui/tui-data.h -350cad933ff8b17501ed79f2bba09db7 gdb/tui/tui-layout.h -3a19c495963e50fc015a100c9d39a3d8 gdb/tui/tui-stack.h -32967816aed21230d119e9e9d8206f5c gdb/tui/tui-hooks.c -7f44134666459723fca3dbbf2a7355df gdb/tui/tui-data.c -174fb42d0ce292a87c25b9adb4274e29 gdb/tui/tui-winsource.h -5a43aa572af3ac6b331d1710b9bcb832 gdb/tui/tui-layout.c -ad925eeacaf7773671ec1247a27bba84 gdb/tui/tui-file.c -fb4ceaae7786aa5266746481503ffbb8 gdb/tui/tui-win.c -48d646f7c5f22d067120e8319331a907 gdb/tui/tui-disasm.h -93de770183feec46407d7d819b2d3622 gdb/tui/tui-out.h -6e762608f08c851cf9b130f7a3acdfae gdb/tui/tui-io.c -e8d699a32fb57e5581a326f3b6fde311 gdb/tui/tui-io.h -9aefaa0bf5d5318ed55b2f2d84f7edd3 gdb/tui/tui-stack.c -265819a03e7440d3fbabd36064384a9e gdb/tui/tui-hooks.h -0415f3bd7a379430b752618c1e8c7cd4 gdb/tui/ChangeLog-1998-2003 -e09c1731a388cda4102aae0d9ad17bcf gdb/valprint.h -766272658fe930a271bf0ed9dbeee834 gdb/arc-tdep.h -81cc73a748f607b4c8764cd7ed91a2ec gdb/tilegx-tdep.h -c47cbd6a6c5906127714d5d822b3c0db gdb/macroexp.h -872be449ea0ede048ac193747d131870 gdb/ChangeLog-2002 -2548f2c31fb7ec8feff06f101fe55d25 gdb/alpha-linux-nat.c -f3f2ff000239d036ff01c201f1de5deb gdb/linux-tdep.c -d7f343b5316d5f29be711ec57f7a7bdc gdb/selftest-arch.h -4f286d62a97132a8a97ad2f835050124 gdb/mips-linux-nat.c -de4ebfa06c2953247c9de16abf45fd51 gdb/trad-frame.h -0b26dc15ccbaa5c85eb2ddff2ff7745a gdb/sparc64-nbsd-nat.c -0e2ff60b004e66639de533b2091bfd77 gdb/opencl-lang.c -0369cdefe9d32fddc170b746e1d83b16 gdb/nto-procfs.c -4822521d0a0bcd65c7bf4dc16c22e39e gdb/tilegx-linux-nat.c -b7132265058ac4be53ba34ceeb7c2326 gdb/aarch64-fbsd-tdep.c -63357e69052f85e827bbfa538eb792a4 gdb/proc-service.c -9670fd2ba7c508020ddd98da101b53a3 gdb/linux-nat.h +e7d22e6aadbf2902ebfa2831edd70902 gdb/sparc-obsd-tdep.c +9dfe9136876a764b27fde05233943381 gdb/syscalls/netbsd.xml +b788075a5da12c41251bcc7ad4aad1c8 gdb/syscalls/ppc64-linux.xml.in +24b9de90299450a0c4922521940fad54 gdb/syscalls/sparc-linux.xml +bf21c7f171c220e7408a6396498ebd81 gdb/syscalls/mips-n64-linux.xml.in +e0d6ed6629fa24f1b219b5d7cc618d89 gdb/syscalls/linux-defaults.xml.in +b3a7bf855abbd83f5c282fc0b8d796fe gdb/syscalls/mips-n64-linux.xml +d8c2bdac7c77ec00592368989109de80 gdb/syscalls/s390-linux.xml +acf45db8b3ef5cd5c4acc28e78511726 gdb/syscalls/s390x-linux.xml +3b0dac982e796a12b18a3b55c0dd3265 gdb/syscalls/s390x-linux.xml.in +5a933565ed1a1874411dd527e7241427 gdb/syscalls/sparc64-linux.xml.in +2c2bd8f8e1390a1c8a2203fbeb2d6c59 gdb/syscalls/update-freebsd.sh +84debf94353bf53846b92ef51a084297 gdb/syscalls/amd64-linux.xml +e6382f7c4d73bca2c12286d286005ded gdb/syscalls/sparc-linux.xml.in +536322d90fbe45ab867c9b51570dd491 gdb/syscalls/bfin-linux.xml.in +5060b5c64dcab87913d9a0d36598e546 gdb/syscalls/mips-o32-linux.xml.in +6abbca697d028a8785caffc4ccbe9bc8 gdb/syscalls/arm-linux.py +6d69d9a168d7b6694413182e61c09c5d gdb/syscalls/i386-linux.xml.in +d3a06c2f08a620f41b3c56185f911679 gdb/syscalls/ppc-linux.xml.in +f1a8ad9c7710a0331af46ee9598b812f gdb/syscalls/amd64-linux.xml.in +3e2fc960cf033ec5dc18d606120d8ecc gdb/syscalls/sparc64-linux.xml +091bedced5bbe776ea3e3f75e3255ef9 gdb/syscalls/arm-linux.xml.in +53becbee2f8e9ce8d8ba8c406d50b7f7 gdb/syscalls/aarch64-linux.xml +ec725543c61f76684a97cabae646865a gdb/syscalls/arm-linux.xml +8995c3ea6ca2397eabaf16740bc55d9b gdb/syscalls/mips-o32-linux.xml +d7205a8f652426afff7d871f92420881 gdb/syscalls/update-netbsd.sh +46561747a78f2cb10ee68463a58ce37f gdb/syscalls/mips-n32-linux.xml +cd400f319d93d9dcdacafe3b9c3b0690 gdb/syscalls/i386-linux.xml +dc6ba921a222925c4afbd5b7093dc25f gdb/syscalls/freebsd.xml +26e41c095a4fe781f1da381aa4d8b3f2 gdb/syscalls/s390-linux.xml.in +3de0e8aa4c4897b359f0ac8feebb210d gdb/syscalls/ppc-linux.xml +8e259f13c0c15b52d0b246504b1e8dbf gdb/syscalls/aarch64-linux.xml.in +800837e4eef026a79add0b39f47e7261 gdb/syscalls/ppc64-linux.xml +4199e0333294d59202830e0d1d6acb91 gdb/syscalls/mips-n32-linux.xml.in +c0ed95e3c5480e00189e0aad0b11bd04 gdb/syscalls/gdb-syscalls.dtd +88910c7990e03f5419cbe05e71e4823f gdb/syscalls/apply-defaults.xsl +f5c029e1b88ad97fe66f80098d84aa3d gdb/alpha-nbsd-tdep.c +634dfec2f73e597abe80617b483e4dfa gdb/reverse.c +cd5e3faa9bd1b684a73c7d527cdb4988 gdb/doc/filter-params.pl +9a3cb10858c18eab6772cf10fc0875bf gdb/doc/gdbinit.5 +8a2bf9a51c18efa8c735fc36d3776f3e gdb/doc/gdbserver.1 +e07acf695649c8c4ee993294ae911431 gdb/doc/refcard.tex +9b489fa00ab8f9e674ab45e20c9453ad gdb/doc/Doxyfile-gdbserver.in +8108dd8f906f2654fecc74958cf383db gdb/doc/psrc.sed +6076d300a46651562d4ecd0604442414 gdb/doc/stack_frame.png +402192f947becc3b550414e9c8fcd84f gdb/doc/ChangeLog +d7c38b177ed2f2466eb37cd425ff9ba4 gdb/doc/gdb.info-3 +66674dc351ba95941f422dc18cae24bb gdb/doc/.gitignore +f3924cbf61bb6a2e1077fc4d55e0edb8 gdb/doc/gdb.info-8 +ede7eb432b313415457b33f074c657fd gdb/doc/gcore.1 +41124752551e2c6ca93fdfadc4a9b51f gdb/doc/gdb.info-1 +a6f0e1f0554ddea2d28dfbc242714646 gdb/doc/gdb-add-index.1 +d39233c86ed6a6dc9e853ae6a11fe03e gdb/doc/stack_frame.pdf +479007983e579d63e8c758861c2aeb98 gdb/doc/Doxyfile-gdb-api.in +f291c677b52ce2e3e0e9946ea7879953 gdb/doc/annotate.info +4c5106dea617c266e5647f7829075089 gdb/doc/Doxyfile-gdb-xref.in +7bfdb0765c5d050d204fbb30aeeba0d8 gdb/doc/stack_frame.eps +5bc7bf37dbf6687448d633311377b5d5 gdb/doc/python.texi +918f165e714d8d69ed76432a1dbb6f4c gdb/doc/stabs.texinfo +ab0fe311032294b952da80585b8b90e7 gdb/doc/fdl.texi +c08b0358a9f2862ace7a619f9455c139 gdb/doc/gdb.info-7 +f0b46b1fcaf2706ab8234fe44122a467 gdb/doc/Makefile.in +e91b8ffbaecd0c8b839a36e2fe6b8b2e gdb/doc/annotate.texinfo +fa41ce26c40e480023b4f7e2fd5f0b52 gdb/doc/agentexpr.texi +98ff43ee7f83935ccc3b8e0851df2b62 gdb/doc/doxy-index.in +553b7fe1bf4b5d8b96fdb8cd83503de1 gdb/doc/stack_frame.svg +fda04bcd0c62a8ccd5bf16ac675b324b gdb/doc/guile.texi +f81a0e00e0cb9e41b078069fb9bedb07 gdb/doc/stack_frame.txt +4cb422ad6a929209284be907ac7d2ce7 gdb/doc/gdb.info +af443d0fcbaef55828ba518bedda7913 gdb/doc/stabs.info +04c82b1da7e894a6555868e4f86225af gdb/doc/filter-for-doxygen +0182695d9155e4850ebc1318cbb81c7b gdb/doc/gdb.info-5 +52685bafa1c9fb0800b1623321e40441 gdb/doc/Doxyfile-base.in +73ec71cd3b2e7f61bc530f19d4b35056 gdb/doc/lpsrc.sed +b47aa938f38f1554bad04e3b1b339aa6 gdb/doc/gdb.info-4 +bf96494e6e4d346175babd5ef9781882 gdb/doc/gpl.texi +253a54c29611b18ff944583744362af0 gdb/doc/gdb.info-2 +ee0bbd01744a4c575a2e509e0205beb3 gdb/doc/gdb.info-6 +d5d06eaf9b4d44aa442a4a281aa9aea4 gdb/doc/a4rc.sed +410def3e971fff6b3b46c32210cf17f1 gdb/doc/gdb.1 +71b3a50bf4c6462e8ed1857482311c32 gdb/doc/all-cfg.texi +71004ef73856913014e5df9f4da35e0f gdb/doc/gdb.texinfo +ff0f5c1d69480abfbad2bd43b3e73c94 gdb/inf-loop.c +cb7ad4d6186af92eae1b2c164cf6984f gdb/ChangeLog-2017 +722e77271ffbf8c61136cdf5d276e6be gdb/maint-test-options.c +0b32d76ec7ad8eea83703b522c3c902f gdb/alpha-linux-nat.c +5224cf32386740e7cf3fba472d1f9ac9 gdb/bsd-uthread.h +c8d8e43d168a47029a50618d5565cd0b gdb/auto-load.h +fd29a0095704a3565ad1855cd6fc2800 gdb/frv-linux-tdep.c +ff9910e5c80b64ee0b3b43cb2dc77b74 gdb/h8300-tdep.c +9414204bcb6036614b7246c3302196af gdb/sparc-tdep.h +ee9643bcfaeed406aea217d1dba1439f gdb/record-full.h +c6000dc3d33077c7d5dd88cb844b3a2b gdb/sparc64-nbsd-nat.c +8a67e0353dd22a4026e0c7ac1d344681 gdb/hppa-nbsd-nat.c +2ea7cff28a922f84e6a33e423ffe50c1 gdb/aclocal.m4 +59031da5e1587d1ca2c4ae673e5d1d40 gdb/osabi.c +65438768cab4d838334ea8d0ba7c6bf4 gdb/remote.h +bb1aab67b6fff1f4588917146d479cfb gdb/f-exp.c +0eb83e0bf6f7912d3994450a0e3df00b gdb/location.c +7fabd3ccb5169f4113ade365bf139cc5 gdb/target-connection.h +b52c9c08facc709cef80118ff02a8812 gdb/csky-tdep.c +e3a1f68bb36a3e0b42330fa5e9aeccb4 gdb/rs6000-tdep.c +c3b9f3e94c515ffe2090d87ab5a90fa0 gdb/aarch64-ravenscar-thread.c +97eb01dc14aaf1fa1ff05d97b00ff7a9 gdb/dtrace-probe.c +b89d9f781dad9dad69389c00e6d32685 gdb/reggroups.c +efcba3b85c1c36bf557f18edcf3cdf81 gdb/go-exp.y +d2b7118270d1efcfaaf25399d2c4c607 gdb/.gitattributes +3cf6ba5cbba349b1f621e6db47a788c3 gdb/d-namespace.c +2be21af65b555f979a167fc15e594aae gdb/mips-fbsd-nat.c +8cc264f26f0e6ce2f451388bdbc763eb gdb/minsyms.c +f2fe5bada00bc9e7453d4e5f63f95391 gdb/m32r-linux-tdep.c +0f0394b220b9c98f0a1271cc53b6f44d gdb/ChangeLog-2000 +65099fb1f3ea85c0e32e95910ce0f33a gdb/mips-linux-tdep.c +31bb1262e85b823031266baa0d1560ca gdb/po/gdb.pot +1851bff0653201a488dcae18dde7efad gdb/po/gdbtext +4fbf128dcd43910083173418c94b6715 gdb/m68k-linux-tdep.c +2ee6e3700b6f88de4e6b6e4f4f93f8a2 gdb/i386-bsd-nat.h +861828c46e850128a9cd58d246e3b49c gdb/nto-tdep.c +47b8d0e35a41696ed876365169a79607 gdb/mn10300-tdep.h +798c293e7048402dd5f0f29bbee93d9e gdb/ada-exp.c +36f86537dba9ec3aa7ea5a0521b38b81 gdb/record-btrace.c +860c94dc8e45300cdc31aa33177d966b gdb/i386-linux-tdep.c +33845d1a2a5990de3e5674edc5e30f8e gdb/exceptions.c +d9505202b8d7fef65ec7a812ec8c03d0 gdb/findvar.c +a9425b491611837042979a6b7390b676 gdb/acinclude.m4 +e7ae647675c0544a5910daae2ae1898a gdb/gnu-nat-mig.h +be42983f8e858f2a7be1cc92d9854c04 gdb/valops.c +4a5ed715c3b0120e6c6599ad1069722f gdb/tracefile.h +30271da3b690cbd9bd99d3ea40fa0fec gdb/bsd-uthread.c +6ea0fe6cc9ce9ecabb898abb4b53a6e8 gdb/breakpoint.h +b123c318d7dbd5bd5b4c6b145a0d6496 gdb/gnu-nat.c +6ce6b60ae61a1cd3e732ffbb0c5d0288 gdb/gdb-stabs.h +a9b7b8c05cd850be6ad6443601b8219d gdb/ChangeLog-2004 +aa8c8fb3e553e650b13a0281515306d4 gdb/i386-gnu-tdep.c +435ac9afa81755ad8bdcaf218d76127d gdb/ada-lang.h +9446a81de6d68e1460d25a091805c0ae gdb/compile/gcc-c-plugin.h +47bab3ee8607ac5ce86109ca75d58d58 gdb/compile/compile.h +64bff156e075e18e83e79e68eb0c7c6e gdb/compile/compile-object-run.h +b153a0ab501341ca511c41bd8395fb45 gdb/compile/compile-c-support.c +c729ee33fcbc1b750b94425e0aa97d3e gdb/compile/gcc-cp-plugin.h +0b26514cf2cb43f9ea9aefbaff3b3c33 gdb/compile/compile-object-run.c +22657926cd65bd70dda2fa32efc2fcda gdb/compile/compile-c.h +21f8ae3f9c5f0b94052d483fd37b6d4d gdb/compile/compile-internal.h +d39e23c4d95ccfc45154697f9d85e282 gdb/compile/compile-cplus.h +1ae0d361c1b744a001d97c8525e02341 gdb/compile/compile-cplus-types.c +e798b1efef35bb4756e7b94fc0b00b4f gdb/compile/compile.c +cc0febc212c0d78a8479bf415c1ed509 gdb/compile/compile-object-load.c +6385ba52a9a3a33046947ac88cfb61c1 gdb/compile/compile-c-types.c +592749b4c4c97c1d69f67863e0627fad gdb/compile/compile-c-symbols.c +e61d1df5ec02e68cd65b175febcc788b gdb/compile/compile-loc2c.c +8db62fc610e7b1ac63c061fcbe29ac6b gdb/compile/compile-cplus-symbols.c +1d5dd4c80bfcd503d573450595293ee8 gdb/compile/compile-object-load.h +ed8f09c4d4865f3d26f42d886c95aeae gdb/disasm.c +a90ca793f39fd74b92f7fe32ab342941 gdb/block.c +02ef502db4a5a9f82c56ca55f52e80c4 gdb/go-lang.h +a9e9020a5dceec2fec38ae71bf8b51aa gdb/serial.c +9359e98a845db07cdecca0bd30abf6ad gdb/solib-darwin.h +37bd8fe7039496040a8e06a662c57c1b gdb/utils.c +5998d906308248296eb2b76f3e781e66 gdb/s390-tdep.c +526536cf30b137dcebfaaa604fa55615 gdb/ChangeLog-1994 +1580ff84a1161510396b38c1b079f193 gdb/nat/linux-procfs.c +7d478d87632c2d9c2f4aae576f9c5bba gdb/nat/aarch64-linux.h +02f0037f12e47e908743268cb87e0cdb gdb/nat/x86-linux.c +bcda67416d99aa809875d0bd78870ade gdb/nat/x86-gcc-cpuid.h +30dcd1fe79de8eda86cb79f7e54b93c1 gdb/nat/ppc-linux.c +467bdc27166acd5599325ce3c5ef0f88 gdb/nat/fork-inferior.h +50f38adf8eb4d816a8ccc25e2f62c9f0 gdb/nat/ppc-linux.h +2e68f122a86c41377ae0573668b43cf7 gdb/nat/linux-btrace.c +c4e48f49a16e0e94928c96c883fa516b gdb/nat/linux-namespaces.h +2f2ef0ca295d2de1832a8a0c3907d325 gdb/nat/windows-nat.h +51457cc04ffb1759ca44a97bfca5919b gdb/nat/aarch64-linux-hw-point.c +99e8e1a70de2554fbab86b9b8d4b379e gdb/nat/linux-nat.h +7fa62eebc2bc8a370d3343352c02b8bc gdb/nat/aarch64-sve-linux-ptrace.h +6342a42bf25249ac936783d795ca04d8 gdb/nat/aarch64-sve-linux-ptrace.c +dd4cf8b6a73fb7abbe9263a9f106c593 gdb/nat/linux-osdata.h +ce7826565d0ee31ba195b703c88ed8aa gdb/nat/linux-waitpid.h +ccf5638aff46b3e95b7759729fcbac5c gdb/nat/linux-personality.h +1b34c2841a47f725997296d97b091307 gdb/nat/riscv-linux-tdesc.c +05d21cb743a02be86968fac879e1b647 gdb/nat/linux-personality.c +1e4cfd1b7914e45ee8d6a737f01b15dd gdb/nat/gdb_thread_db.h +4409c0e4757c0cdd5dd6dbe92963f061 gdb/nat/x86-linux-dregs.c +1d0cd32f3b5ed3d4fdb763f8d9693bb1 gdb/nat/mips-linux-watch.h +65277671787a0d5580010f51caf259e2 gdb/nat/linux-waitpid.c +67b7ccb652c991ae75c0f0c04939b5f8 gdb/nat/mips-linux-watch.c +708168a8369478570189379b4dd025b6 gdb/nat/linux-procfs.h +58517e7f19613538553eef444d3a8e1a gdb/nat/x86-cpuid.h +8891ffcd481d5ba9f28954a942d08cc9 gdb/nat/fork-inferior.c +60b57961ec38e3be527af400f5da3ed4 gdb/nat/glibc_thread_db.h +b3a14426fa875848f7348822b5ba8d81 gdb/nat/amd64-linux-siginfo.h +b38262215e05a67ff5c0d0ed17d1688f gdb/nat/linux-ptrace.c +78c897e61abe0d38f453851fee8e3422 gdb/nat/linux-btrace.h +b9a86d15035ab6f84bc687608dca9f47 gdb/nat/riscv-linux-tdesc.h +879d6621b37f77071c9033ee43ae6fa6 gdb/nat/gdb_ptrace.h +8b03ae7a07fa38e289791fab845c6c6b gdb/nat/x86-dregs.c +1d69ca162606575f8d26dd210b218235 gdb/nat/linux-osdata.c +95956ab2770cf1c5b72bbcdc7f39bf79 gdb/nat/aarch64-linux-hw-point.h +a585e26d030a050b6a7a037149fb8fb9 gdb/nat/netbsd-nat.c +0ae384c8a9896f82fa4bb8a20642d35e gdb/nat/netbsd-nat.h +dde6f1949d03d666d69eb3ff63c8ae8b gdb/nat/linux-namespaces.c +e7c2487a725c6c607137d5f0ed7547c0 gdb/nat/linux-ptrace.h +8a60f2c9534d86f33c3611b2880333c9 gdb/nat/x86-linux.h +9316d2e085e001e466b3eee0970245a0 gdb/nat/x86-linux-dregs.h +ab4480c0935d5381769b6a31b8a2152b gdb/nat/windows-nat.c +be475f6ed93d7a15b35c093a498f55c4 gdb/nat/x86-dregs.h +8dd960591062f55c6d02f7ae526535db gdb/nat/aarch64-sve-linux-sigcontext.h +becc63269a0dd75cae28e12a83bdc633 gdb/nat/aarch64-linux.c +45a8fe25095569d821f6b6a26b6b2fc2 gdb/nat/amd64-linux-siginfo.c +e8b093bfe0f4e15b222ed552ab015088 gdb/cris-linux-tdep.c +bc3e0e4bc7099d9f570cb632328d0788 gdb/i386-linux-tdep.h +ef40a1fddee28a7392b3d132d8aebacd gdb/ui-file.h +9818fe4ba4855b4653809f36fc68c796 gdb/gcore +c7e86f87c99492642e100415ff8f9c85 gdb/ChangeLog-1992 +4137a7b18daab5dc4d5b45546e3a78f0 gdb/dicos-tdep.c +e6a417685199351b449551f7cfd7d052 gdb/thread-fsm.h +7630948eb1821166f2d5d24ec2b9cbeb gdb/typeprint.c +811b16f79471a656213752a656834521 gdb/s390-linux-nat.c +537dd47a903ecc4cb9c11d6c5947d241 gdb/ChangeLog-1995 +733ae496b0a5c1acc623b6d017a8901d gdb/bpf-tdep.c +965e4022365061b72fdd283d97f308ea gdb/windows-tdep.h +ffb0b3354688283a6ab2a44d1a8557f6 gdb/gdbarch-selftests.c +0c2c3ffcd1f792fbd2b639c781ca92e8 gdb/coffread.c +33e812ed5a8ce38c5b7f90eddc060e81 gdb/tid-parse.h +bf57ec246fad6ca37a2c00d74f9d0416 gdb/avr-tdep.c +cc9859b785d413dff9d8b20e4bcd35c5 gdb/m68k-bsd-tdep.c +38daf392b9d0374b55771165a6947672 gdb/cp-name-parser.y +5327c3467bc9603df422feb195085e6f gdb/s390-linux-tdep.c +bdf85ffc097f4267a4c9a659d5a4983b gdb/i386-nto-tdep.c +183285ec328ffaabadbb83d2004fb030 gdb/amd64-linux-nat.c +cf476fa2d16b0cc7e029688678e33b5e gdb/m32r-linux-nat.c +6c8c415530da554ecc3fc8fe8b1cce13 gdb/sim-regno.h +c7ddff40da6b03793b824068bdbcb661 gdb/aarch64-ravenscar-thread.h +094c61e840b9ec877130ebbb1a0b27ee gdb/mips64-obsd-tdep.c +d6d786eb284dd28d159db5c5d6f6a67b gdb/riscv-fbsd-tdep.c +4935b794cd937c3452afab4ade42e2c2 gdb/ppc-ravenscar-thread.h +e6c6858c7bb32e550849a1a31de2c736 gdb/csky-linux-tdep.c +d4e1f392fe3bec03a36f89b64be68b57 gdb/obsd-tdep.c +c7210dc90925059b6a596ae96021e45e gdb/mips-nbsd-tdep.c +bf8e17ff3f34531dcd87be2ef90b8cc9 gdb/sh-linux-tdep.c +c80e247699666fde25c0b6c0d39aa0ff gdb/m32r-tdep.c +51037fad9ca7ce54c2e8c766002f6e55 gdb/observable.h +7d13ae714df69627e4b9d7758cbe33d4 gdb/amd64-fbsd-tdep.c +846ceb4756408a1cb82f30b922bae45a gdb/c-exp.c +c354a63096b7489b7ad7ae1fd546cab9 gdb/rust-lang.h +674dff14904326887761680486d6b0d8 gdb/x86-nat.c +f60c0f5056e289d367d2e7ee2aa454cc gdb/libiberty.m4 +1aadac2d115c3dea3f73e85b42db0240 gdb/value.h +74e38156aafe2f2307e911db30a3c61d gdb/linux-record.h +acccd36d3d07d0d0e27fcad4e48495f3 gdb/proc-why.c +b2b6b9c70f7854970086dc0381c41065 gdb/varobj-iter.h +dd190c83666a44c63935ea3c1087b18a gdb/version.in +4a76f9aab72776c6f3cfddb7995f979c gdb/corelow.c +e84e983e11f0327a98b2b306049ea4e0 gdb/aarch64-fbsd-nat.c +bb77de99c93d0955191b4a39afb9bf68 gdb/ada-valprint.c +aebf816c66cd59981e6c608143e37d14 gdb/buildsym-legacy.c +a73a51db5e8cac06a87ead128c1ed392 gdb/ChangeLog-1996 +2cc94593410ee50e5c2c10a051b7bb7f gdb/ChangeLog-2019 +bc770366f99333bfac6e57fadb8acbff gdb/ada-typeprint.c +3d54f4954896ca3458e42f821914c725 gdb/psymtab.h +36ef48051c0d8dd5145e14cf480670b7 gdb/ui-style.c +a3bb217296bd7d20dd21dfb4a45e45b0 gdb/bcache.c +c8af85077d214f795c1cd552237f67ca gdb/source-cache.c +68b3eaeffd289985bf276bd6691765f8 gdb/xml-tdesc.c +3213907491d720932e322c46fec62e63 gdb/xtensa-linux-nat.c +c18f0efa204a677bc4661aadb099501f gdb/ser-unix.c +c32ada9d35316ff4e98630529c6b38b0 gdb/cli/cli-logging.c +3b9541286147f84bb48941c76d0b73f0 gdb/cli/cli-utils.h +3d3870b3039af86d385ef2244cd0914c gdb/cli/cli-option.h +80d7c1a786deed9cf8d154957c8b5a24 gdb/cli/cli-interp.h +6fbf9b606ab10d43cd739f3b627cc564 gdb/cli/cli-setshow.h +773364b608d8078bb1a9be2f607c29e9 gdb/cli/cli-cmds.c +4b92597e666fd8ec32807cd034c99047 gdb/cli/cli-setshow.c +7d1b86b43d11d8eea7ac0cb95175d95b gdb/cli/cli-script.c +28ed5c95e93119c215f7d18a98f813ac gdb/cli/cli-cmds.h +0055da43b5ae6b33a74e658c5fa3ff7a gdb/cli/cli-decode.c +7d5550276f06cb74d67e4732d3072c90 gdb/cli/cli-interp.c +13cc3d6d0f820643f6cf813544feafaa gdb/cli/cli-script.h +9c28a37f146edcdae47d673951bb7ab7 gdb/cli/cli-option.c +e5fa6cf5fb5d1d6e4a0851fcce2f66ac gdb/cli/cli-decode.h +8bc5b087e4062ad45f87f1c187ad6c4f gdb/cli/cli-style.h +8522e0b51fa31a4df6c927d9919bc0dc gdb/cli/cli-dump.c +5390387263d04d6cd6647d8e5342cb04 gdb/cli/cli-utils.c +217c548d2dfe500a8e024785820aef68 gdb/cli/cli-style.c +3fb4a35192cb48590ecaad8b351886b0 gdb/record-full.c +d86b52896d5f3544a2a2e4e25236d23d gdb/ia64-tdep.c +246784bbf6c50a40d5476b41a01fa8e1 gdb/sparc-nat.c +dd46b899fcb2d08fbab027001230f595 gdb/rs6000-nat.c +37cabfc09dafe1c6ff59231ce1b3b41c gdb/sparc-ravenscar-thread.h +fcd3826b402a54983e40f3bf92716c08 gdb/x86-linux-nat.h +9853c2d4d51519c7cf26ba40954e989b gdb/i386-fbsd-tdep.c +73ff81d7ca3612e32f29c6f5fc9bec63 gdb/CONTRIBUTE +c0ba5c927dd19227012fd5a5829309ee gdb/observable.c +b48262f869cf2b43bbfabb4c8cb670d1 gdb/addrmap.c +91857ca33391756e38fe33d9d0c29d17 gdb/inline-frame.h +7d794b03b2f831bea67a2fcfb4eea9c4 gdb/m2-valprint.c +e3cd59a9a10d6e442121cbc0f01a06f1 gdb/terminal.h +9d4da6e93a9d0d74bfc01b8894e12257 gdb/debuginfod-support.c +d43ad2191b2f99509323b9aed2c587b1 gdb/inferior-iter.h +296f78d7fda04e224460dae23ad0d279 gdb/f-lang.h +2b1b0b9d8d6c702cfe661a06f9a9b997 gdb/cp-support.c +eea3175e98c52746058367ff712b358e gdb/stap-probe.h +1d815f70f1eca95e18c5634eee77e290 gdb/aarch32-linux-nat.h +4f57184e13da34e33a495867606992c1 gdb/dicos-tdep.h +10c095b48c99cd636473ca607a69f603 gdb/linux-nat-trad.h +cf2d8a5769247f00ba1a8b18023fa6ab gdb/mips-fbsd-tdep.c +09ec64b80f9a1e9d2b4bebe82139ab68 gdb/remote-notif.h +204977880fab26c8c9e7374309b19eb5 gdb/opencl-lang.c +64ad644a1b0a000ab447601c1699bd71 gdb/main.h +4e7c7e8f4308b119fdf4d050d988cfec gdb/blockframe.c +f83434a193de49da3a616a3db09ccb97 gdb/rs6000-aix-tdep.c +368ce44aaf85c1bc36806d5eeb99c831 gdb/scoped-mock-context.h +bb9930a15f1e8a38016fa7d7893eaa7a gdb/riscv-linux-nat.c +8d550e6af03592708966a4dcd48af43a gdb/fbsd-nat.h +aafa9247fb2f9770e3c4ee0f0aeeac0b gdb/process-stratum-target.c +fd596fa1072885d350cbe8849352de90 gdb/ada-lex.c +7482063cd9786b6f8af2c526aba2a218 gdb/extension.c +8adc25b06c54d8271c907d7bc5478edb gdb/user-regs.h +5d93565ec5469c15669ca39fcf7946f6 gdb/sol2-tdep.h +30b88e1700a4b51b94cd2a9c55a2be0a gdb/linux-fork.h +e2703961d853bb2c2e148e413d008347 gdb/NEWS +62edb3e142b0840bdb4f28742f707481 gdb/ax-gdb.h +2e33a7c12d65aa8a5d353556295aec77 gdb/arm-linux-tdep.c +c224521accfae75f80e2414acb1cb36d gdb/ser-uds.c +a449232c4f8e97750050e2769ded1a4b gdb/amd64-fbsd-nat.c +a441be0804ef7d81df7ac6c3d0f3870f gdb/filesystem.h +829b71c4c0ae3936e6a377a863f6c2a6 gdb/sparc64-fbsd-nat.c +c2fec0eb817cb7461907a707d0305cae gdb/riscv-fbsd-tdep.h +29044097f81f7cfa4687f747aeb11c84 gdb/features/nds32-system.xml +69febcba8a169f98cdcf218a5c76d6b9 gdb/features/s390x-vx-linux64.c +03d2f48c0c2436b8103f18e60763f76a gdb/features/nds32.xml +02fb83fa03bff58c6c673a4faf34a5d3 gdb/features/aarch64-core.xml +88545a160cd2d37a77ebaa1cdb28b41b gdb/features/aarch64-fpu.c +5c664803f8ad377d7206f11a814350f5 gdb/features/s390-linux64.xml +689b843ed11adb364366da7c7a5772c1 gdb/features/sparc/sparc32-solaris.c +bff514f5cad14c3fe51f92285b648049 gdb/features/sparc/sparc32-solaris.xml +8c21af5360be5cf0704217e248b8d2c4 gdb/features/sparc/sparc32-cp0.xml +f35d86bd969a1065f7890376633a2273 gdb/features/sparc/sparc64-solaris.xml +d62b6e33dc7acf90393b244cec9ca410 gdb/features/sparc/sparc64-cp0.xml +8c9303969afbd2cce7fd140e9d090b1e gdb/features/sparc/sparc64-cpu.xml +4b655e9ccf9ccf84158770f974c0e5b2 gdb/features/sparc/sparc64-fpu.xml +224cd4e9e6343115c3a486b86c6e3808 gdb/features/sparc/sparc32-cpu.xml +8b1fb0e674a36bc3fbbffaab65c9a690 gdb/features/sparc/sparc64-solaris.c +90c76df75c8b329b995ca180f71e1fb4 gdb/features/sparc/sparc32-fpu.xml +cfef23e21832a4923bab0d3fe7c43c55 gdb/features/nds32-core.xml +2faa4557586c6ff6015ca31e693b9da5 gdb/features/m68k-core.xml +33ed15958757805e9c9e07b42e6862bd gdb/features/s390x-tevx-linux64.c +62ec120688ea008f3e9837ef8b3360d6 gdb/features/s390-vx-linux64.c +c1066560d1658eebf8784430028b5c5c gdb/features/mips-dsp-linux.xml +04303ea528fcc57e92172bdffb54db2f gdb/features/mips64-linux.c +a5bbf96a393d492a3af9c3e07c955db4 gdb/features/s390-acr.xml +320892bbd4af6a124f32ef12b8d4e2e6 gdb/features/mips-dsp-linux.c +234055e84ad430cf862d982d01607b7a gdb/features/btrace.dtd +6e767f37455021cdfdec4d61da40fb1b gdb/features/s390x-linux64v1.c +8e2eafdf84603ded2746518d43682962 gdb/features/mips-fpu.xml +dc3fce89de434534e8b46832ef6d5785 gdb/features/mips-linux.c +a74f670e27b892b83c13054809c82473 gdb/features/sort-regs.xsl +0ebbdc5c65d018cabea930d28ab4eb6c gdb/features/s390-linux64v2.c +cc1ba7e51a2b6b3edf2d8d6c356e4ad0 gdb/features/or1k.c +f8a07428c4ad2c8b8e3c61e51bec249e gdb/features/or1k.xml +43aff7004e4e181202f9c5a4d5f47fb4 gdb/features/arm/arm-m-profile.xml +beb100982112967f839b2770e53b7a1b gdb/features/arm/xscale-iwmmxt.xml +da8b8e5ceadd5c82110dc0eaa25ef964 gdb/features/arm/arm-fpa.xml +29a63dfe34f925996e515c24eb34a7a1 gdb/features/arm/arm-vfpv3.xml +8f74cd657b323772c3f9624b33c187b2 gdb/features/arm/arm-core.c +b8f7aa35045da6792b7e329faefa2572 gdb/features/arm/arm-core.xml +6898328c432892f2cb22d180c648b846 gdb/features/arm/arm-m-profile-with-fpa.c +4ff78cc5850eb16cb8b6f18ce64214e9 gdb/features/arm/arm-vfpv2.xml +ae44c2fe75439196b62f684cdeca23eb gdb/features/arm/arm-fpa.c +a24bec7fbd64cbe65c62f7325e010296 gdb/features/arm/arm-vfpv3.c +2e97eafab97dbb0dda2f96a845700472 gdb/features/arm/arm-m-profile-with-fpa.xml +58754ff44897a326c0ba60dfdc71b6ab gdb/features/arm/arm-m-profile.c +297603ba66974460cb3faa11817d1c55 gdb/features/arm/xscale-iwmmxt.c +7118e5fd5b1dafb52cd2b1f84c8224b3 gdb/features/arm/arm-vfpv2.c +f1a24c91ddff1d290ccc2ad940c5ff55 gdb/features/s390-tevx-linux64.c +7f858498e3b882463c1ca8c0ffcc73c6 gdb/features/gdbserver-regs.xsl +c5d5250351d06a25a380a215776099e8 gdb/features/microblaze.xml +2947361d54a90f72b56cc853e2a2c503 gdb/features/s390x-core64.xml +2df0da6955f9596ab60981ebf20b8d11 gdb/features/nios2.xml +158caed3a319697228ba6354a2befda7 gdb/features/tic6x-c64xp-linux.xml +584b2140cb3a6d21d216ae9144426dc1 gdb/features/microblaze.c +9689ee51a13b0198d177944412cdc7fd gdb/features/tic6x-core.c +b3fcff10b5f577e14fd117459f7653d8 gdb/features/s390x-linux64v1.xml +079d34b93033eea4a59a84adf9778ca9 gdb/features/xinclude.dtd +77f3e67e2adbc0d03ad9573b0240e735 gdb/features/mips64-dsp.xml +8086c125c276185c153a06688ccd71f0 gdb/features/nds32.c +4cbcad23de50786aca5ee1769070951f gdb/features/s390-gs.xml +d738de78665c21e5c6602e81feb4c1b5 gdb/features/tic6x-c62x-linux.xml +4542d5adc8a536f7cf8cc667074bafb9 gdb/features/aarch64-pauth.xml +0f4a5479f648d865209f25d1d5aaa722 gdb/features/s390-linux64v2.xml +bc2aac776d052586b0eaa34bb099494a gdb/features/aarch64-sve.c +8aad869c751da6385a957ea88c74e198 gdb/features/s390-gsbc.xml +b096a61a0615e1a6380cc5b783ea612f gdb/features/mips64-linux.xml +e25b3d3125c1c4a68e8156215235bf6c gdb/features/feature_to_c.sh +22e8c1995c9bbe363eef485c6676b615 gdb/features/s390x-linux64v2.c +a5c83a69c5d5cb6d672e2447fdee59be gdb/features/nios2.c +123bd43a4e5a72842f08302c969d9add gdb/features/s390-tdb.xml +7ee27a1744bea4ee4de312ee6d1636a8 gdb/features/s390-linux32.xml +16990e1aa244bd5e2733ac4d5e618fc2 gdb/features/osdata.dtd +2e36a5811d36af377dfb5d638b6e6e36 gdb/features/s390x-te-linux64.xml +2c153c9535ca60fee1fa0914e3814b42 gdb/features/library-list.dtd +e666ff1bc4ae6eca7952097756e3ccfe gdb/features/s390-linux32v1.xml +d2f5f90d537008ac0d2e796bb125d767 gdb/features/nds32-fpu.xml +35a37584c76a4b121407e51252ef9d06 gdb/features/mips-linux.xml +e7193a8d0c2696946ab6d57dfa84431a gdb/features/mips-dsp.xml +0ec6c7df3965c9d14a45ffe46bd45608 gdb/features/tic6x-c6xp.xml +4a74f49566bc907483d546e529646d55 gdb/features/s390x-gs-linux64.xml +dbf1b34abb99996c06ff97e35e28eb3c gdb/features/mips64-dsp-linux.xml +35ff3052abfc9e84e23fb03a0631c6a4 gdb/features/microblaze-stack-protect.xml +02a4b95817336c043772f63f198edf61 gdb/features/mips64-cpu.xml +89a9b6a849c7f6d74a6ab0ef3b176e36 gdb/features/Makefile +0a3badabed7e258733913b270b50620c gdb/features/s390x-linux64.c +e8661aae4aaf05f5216c75526cb50822 gdb/features/s390-linux32.c +a830190bce7a8c5db7e2603f019eea6e gdb/features/tic6x-gp.c +98a23387ccb75a1eacfec6d63018bb0a gdb/features/rx.xml +e676a87a0a891af6142e3b05cc1b6c04 gdb/features/library-list-svr4.dtd +0c7b3b839c53a16fd4c133b1c0857676 gdb/features/mips64-fpu.xml +397a0c9fae9a6e84f5c43fe665ec0033 gdb/features/rx.c +7121b2e566b5b9d989ae6d9d4c967692 gdb/features/nios2-linux.xml +ea6ce62e440573e2b06460c0ebc3e720 gdb/features/riscv/32bit-cpu.xml +69190be71c7bfd24ffb408c2cd89df2e gdb/features/riscv/64bit-cpu.c +75bcd4b388d85c69ed92487f7405b646 gdb/features/riscv/64bit-fpu.c +af20920dd95dced5e34f281535fe8941 gdb/features/riscv/32bit-fpu.xml +1169ff86809f7cd49ed8c1d05221a2ed gdb/features/riscv/32bit-fpu.c +2128bccdd560cc394ff7efd20e4127fb gdb/features/riscv/64bit-cpu.xml +c5333bca18f9649f9c0887b338e52b54 gdb/features/riscv/64bit-fpu.xml +a37e4cf1f23ca203946d55a86dd1ce4c gdb/features/riscv/32bit-cpu.c +90dfff393934e84838701c31cfd08782 gdb/features/s390x-te-linux64.c +344651c03e3550054486c97346dbe87e gdb/features/number-regs.xsl +fce8f3550817165a56d3d97ff22c6854 gdb/features/mips64-cp0.xml +b5dfa8bf5906d66b8f97ec9411c22708 gdb/features/s390-gs-linux64.xml +08d6161f2a53105129cfdd491666c94e gdb/features/microblaze-with-stack-protect.xml +dc44fd0b1661ee5b4fcb083318ddc8cb gdb/features/or1k-core.xml +ac0f32ad7e7965a5ff90ba87f8469bd7 gdb/features/s390-te-linux64.c +a9aa6883a219e0915e7f740ef93f1c39 gdb/features/s390-linux32v2.xml +ca1f7629191a0d36b2dc1dc644898e0f gdb/features/rs6000/power-ppr.xml +e7fcfe186aad04edb46a155897d694ac gdb/features/rs6000/powerpc-isa205-32l.c +356354bfd2f92e2cb90521bfc75e7ecb gdb/features/rs6000/powerpc-e500.c +5a7b6622b1e531452b16776171ade1b7 gdb/features/rs6000/powerpc-isa207-vsx32l.c +058639594c76dcc1e09f47a7b0c8942d gdb/features/rs6000/power-ebb.xml +d2c5ea8707d6e8a8aad47cdc24952ca0 gdb/features/rs6000/powerpc-601.c +1c714670e2cbc9633a9dc9d6548c4de5 gdb/features/rs6000/powerpc-isa205-ppr-dscr-vsx64l.xml +47d8291b29786aa8920ea444b4761f4d gdb/features/rs6000/powerpc-isa207-vsx64l.xml +6b2de078d1cef93df8e8c79b27af2fcf gdb/features/rs6000/powerpc-vsx64.xml +9203f1ea7d43f65e52f5ed59e671410f gdb/features/rs6000/powerpc-7400.c +ffe396898dcf30b07e7b257d368ab459 gdb/features/rs6000/powerpc-750.c +bf2744d10adae6b7216eec1587434729 gdb/features/rs6000/powerpc-isa207-vsx32l.xml +5ea0e06ec19e1b50ba66217d8bbfc175 gdb/features/rs6000/powerpc-altivec32l.xml +4378a745a706eee69e4848ccb42b1f1d gdb/features/rs6000/powerpc-32.c +7ef5e0ad007c62548c651ffe8d100568 gdb/features/rs6000/powerpc-604.c +52f421e41b39823fef26e153af770cf5 gdb/features/rs6000/power64-core.xml +5eb4b85d8597a982f401aca5fa491468 gdb/features/rs6000/powerpc-vsx32l.c +be2377f4b494f0d4c25cf3e61ac7a21a gdb/features/rs6000/powerpc-64l.xml +96cd445a7a5290975670d909913f61bc gdb/features/rs6000/powerpc-vsx64.c +56ec243c36447bd19dae6ab248c9a361 gdb/features/rs6000/powerpc-isa207-htm-vsx64l.xml +41bedbaeb114aac9f89df1e221335a02 gdb/features/rs6000/powerpc-isa205-altivec32l.c +1346dfdf5ecbaf8f647ad5f180fc0322 gdb/features/rs6000/powerpc-vsx64l.c +8b99dd46975415aaa619cceff4123cf4 gdb/features/rs6000/power-htm-core.xml +18d9026573f79e14e5b727d039665498 gdb/features/rs6000/powerpc-isa205-64l.c +4d4e200898dece19d341e5b0100d6df7 gdb/features/rs6000/rs6000.xml +a2e72422b410fdd978c3d9b71cce2335 gdb/features/rs6000/rs6000.c +751b1b22fbbfca643a62fd7c5256f02b gdb/features/rs6000/power-spe.xml +66dfe33227e33cb61e441d87f936674e gdb/features/rs6000/power-fpu.xml +78d0a5031d5e7fe18151395a6eb8838f gdb/features/rs6000/powerpc-isa205-vsx64l.c +0ba581781150c25e0770506f364a3eb7 gdb/features/rs6000/powerpc-e500l.c +527184503e3102ee93f8d6c93c2121fb gdb/features/rs6000/powerpc-603.c +beae9bef5c4e8c789bf1b3b60d255a29 gdb/features/rs6000/power64-linux.xml +d1442de3ddc3779df1c3d934d121ca19 gdb/features/rs6000/powerpc-isa207-htm-vsx64l.c +114ad7e75fe70e93a4a28fb469565769 gdb/features/rs6000/powerpc-7400.xml +bd6e3d285a7ff47662cb057b218411d2 gdb/features/rs6000/powerpc-505.c +22617dea396bc44512b6738cc7ed7dba gdb/features/rs6000/power-htm-altivec.xml +8cb4d222e0fef31ce5251ae9554c7ebe gdb/features/rs6000/powerpc-601.xml +9c18fa71123e59b6d46f2168df8805dc gdb/features/rs6000/powerpc-isa205-ppr-dscr-vsx32l.c +167f001fb05f3e69860f61494f424ad0 gdb/features/rs6000/powerpc-403gc.xml +07972cd8df47a5d6754e9118e79a2848 gdb/features/rs6000/powerpc-604.xml +489546506823db9e7da861401079193c gdb/features/rs6000/powerpc-860.c +442eab9d463b533f6a602a826019551d gdb/features/rs6000/power-tar.xml +3621fc37f620613eb96a55a639f1042a gdb/features/rs6000/powerpc-64.c +044ab7e02184a7aa839d5d8bdd1406eb gdb/features/rs6000/powerpc-altivec64.xml +743ae6ca9adb134faec9f661051d27a8 gdb/features/rs6000/powerpc-isa205-altivec64l.xml +0f8fc527a93c3733755b63a2764fc844 gdb/features/rs6000/powerpc-isa205-altivec64l.c +74677c3027fbd89aea1c32060ada5cf1 gdb/features/rs6000/powerpc-isa205-vsx32l.c +83e81a9fda1babdd1b0cb586e1bd55de gdb/features/rs6000/powerpc-isa207-vsx64l.c +49184ef2bbc5e800af01a409f0ceebf8 gdb/features/rs6000/powerpc-isa205-32l.xml +ab9e95e7f1859018afa3fb346aac7c88 gdb/features/rs6000/powerpc-750.xml +7458d58e87035c211deda866df1cce99 gdb/features/rs6000/powerpc-603.xml +2e9f9d13a436d9a50cf41cab52e781c1 gdb/features/rs6000/power-htm-spr.xml +467f0afe65ae227cd6ac5c77100a2d77 gdb/features/rs6000/powerpc-e500.xml +26d60cd84743a8d614d8a4f75a2d438f gdb/features/rs6000/power-linux-pmu.xml +fae9e0212e2d9cc69c1d223969166c7c gdb/features/rs6000/power-htm-fpu.xml +82c6ebe72e135cc0fddc24b2dda4dbe9 gdb/features/rs6000/power-htm-dscr.xml +f0f2d5354e7dd44835ce334c58e279dc gdb/features/rs6000/power-fpu-isa205.xml +3f7b22919291d5c134c220f0359769b4 gdb/features/rs6000/powerpc-vsx32.c +9ca55da0d223e5f0fe96f8bba2ecb713 gdb/features/rs6000/powerpc-32l.c +9bc13ddc98c81e031a7bb369894f1a91 gdb/features/rs6000/powerpc-32l.xml +5c2c248cbee7b6d697757a409d65f233 gdb/features/rs6000/powerpc-vsx64l.xml +6cc3e17574a36a1b1646246e87d665e6 gdb/features/rs6000/powerpc-isa205-ppr-dscr-vsx64l.c +9ccfd621dc372e0c267d18f074474491 gdb/features/rs6000/powerpc-e500l.xml +0e5c9ab35d808982b531ee6e4d75bed9 gdb/features/rs6000/powerpc-602.xml +a3aa570d8f82b8aa965c569a9d0471db gdb/features/rs6000/powerpc-64l.c +ecbd852e2789fbcc35a43c96937c920e gdb/features/rs6000/powerpc-altivec64l.xml +67fb4df6e85666e645a0a70d62e8abc2 gdb/features/rs6000/powerpc-860.xml +a121263e41ae69b99095fef00495d233 gdb/features/rs6000/powerpc-altivec64l.c +7238e69ebc69d618ea7141099121a521 gdb/features/rs6000/powerpc-vsx32l.xml +0460eb4f5b2c0d4d94613ba13960533a gdb/features/rs6000/powerpc-isa205-altivec32l.xml +d053ff04accc30c565c9f7d32ffdea79 gdb/features/rs6000/power-htm-vsx.xml +a32ba20a269681ea1b89e4fb7fc41841 gdb/features/rs6000/power-htm-ppr.xml +fd5408b63b9dfcf28cec25cff29615fd gdb/features/rs6000/powerpc-altivec64.c +ce92d5b3a3c504017c095c8cf8d7d658 gdb/features/rs6000/powerpc-altivec32l.c +ad7427cec6b3d4d87e9771d6c064e89f gdb/features/rs6000/powerpc-32.xml +900f8313ae5206a006b881c7c0425583 gdb/features/rs6000/powerpc-isa205-64l.xml +c5ce4ff5e412b1fcd0c8ea36568ef342 gdb/features/rs6000/powerpc-vsx32.xml +8f0333b4c07a2caa161fcd0c081e9206 gdb/features/rs6000/powerpc-403gc.c +3c01e2080b9ede35b527ea5361c185a5 gdb/features/rs6000/powerpc-64.xml +ece9b95dbafc7114d95f6c95d1007ab2 gdb/features/rs6000/powerpc-isa207-htm-vsx32l.xml +1f4232d82c0e5c890c685dac971d2524 gdb/features/rs6000/powerpc-403.xml +f281c08d0be7e94b106fa89016c8d525 gdb/features/rs6000/powerpc-altivec32.xml +2a6c192d0c833c615bd38b16b779ec29 gdb/features/rs6000/powerpc-602.c +60a07baebba13b08f048a92f2a3e9cc9 gdb/features/rs6000/power-vsx.xml +90414fdf4e4be8d5065d12606ae09945 gdb/features/rs6000/powerpc-isa205-vsx64l.xml +a267357188d9ecf8aba1451567b61d98 gdb/features/rs6000/powerpc-isa207-htm-vsx32l.c +01e835c93a2c097b86a1c8c2489f50de gdb/features/rs6000/power64-htm-core.xml +f3f7171ea3b80335878e2bc2758fdc81 gdb/features/rs6000/powerpc-isa205-ppr-dscr-vsx32l.xml +68ebfe26b38a2c719b3b3c465db6ce75 gdb/features/rs6000/powerpc-505.xml +966d5df5526968a1c3d39beabf3e2aad gdb/features/rs6000/powerpc-altivec32.c +be4fafe87ca3df769d1f7072a7e74747 gdb/features/rs6000/power-linux.xml +ce3c3a37cd9f57007d17dcddd6f35062 gdb/features/rs6000/powerpc-405.xml +e8a3cf905c0e67d4a4b6ba0cf5f87f2a gdb/features/rs6000/power-altivec.xml +00bd940246ff4f2432eb7ded07820b54 gdb/features/rs6000/powerpc-isa205-vsx32l.xml +87ac8cedb135e74c211576c66ab0af28 gdb/features/rs6000/power-dscr.xml +825fc6e41d1a8477031537f4e833108c gdb/features/rs6000/power-htm-tar.xml +69b0488b477c41a79ef479282881e068 gdb/features/rs6000/power-core.xml +837f26b35be4ff148223685646c9a443 gdb/features/rs6000/powerpc-403.c +a9f0e64ce7d7e8e0c354c9c9fd83d2a8 gdb/features/rs6000/power-oea.xml +71c4ae000cd6276fd1ea47fa5db29599 gdb/features/rs6000/powerpc-405.c +1cd0e1fa58819dd8e9e7e0b907396ad7 gdb/features/i386/32bit-pkeys.c +a022a813922fda10a80983f5a4cdb0ee gdb/features/i386/64bit-pkeys.c +a1862533fdff9c4b86eccd44fec0fd8d gdb/features/i386/x32-core.xml +2c784e6a964e1f771ce974b99b024294 gdb/features/i386/64bit-linux.c +ebee27e005f51fa0941407636a88f005 gdb/features/i386/64bit-avx512.xml +11464ff63123b82950da466b4c5a999d gdb/features/i386/64bit-mpx.c +7a521b6961ac9f2176ec50849da82f5d gdb/features/i386/32bit-core.c +d5f0a5e0f10431fc3e934a738c55f7ce gdb/features/i386/32bit-avx512.c +29e41efece2e1a8096b5a33c0b31ed76 gdb/features/i386/64bit-core.xml +1d85792bd2c6da8e3f6a7f9ba42021ca gdb/features/i386/32bit-linux.c +c24e1c8c8185c472082babd7db7d7b72 gdb/features/i386/32bit-segments.c +391d95f17fe41c4394cfb5a70e639c04 gdb/features/i386/32bit-mpx.c +f022337cc7369bda0a58387ba317b10b gdb/features/i386/64bit-avx.xml +50f6ebbc2dce838e499b0431e6753457 gdb/features/i386/32bit-linux.xml +4f79782bba29ac09e98aa376e0c5de98 gdb/features/i386/64bit-pkeys.xml +acf56893b309488731f3058feebe5347 gdb/features/i386/32bit-avx.c +a5ed0d5ed702b542afe681f5a1a1b6c1 gdb/features/i386/32bit-avx.xml +4b8021ed81722f94b71870382cba22d1 gdb/features/i386/64bit-sse.xml +59c5cfa5f89c27c1c9e3f2149143cf5a gdb/features/i386/64bit-segments.c +5cf18405631592a7673447b6bfb73747 gdb/features/i386/32bit-sse.xml +468acec086b4056081fa6c9f004baada gdb/features/i386/64bit-avx.c +4f79782bba29ac09e98aa376e0c5de98 gdb/features/i386/32bit-pkeys.xml +329f1d8d10f458b150d6f344d3de0dbe gdb/features/i386/64bit-segments.xml +3b2cf37bb751b261b4d665476ca956a6 gdb/features/i386/64bit-mpx.xml +22b5c41f11c0ca29bbab0c59fcafff2d gdb/features/i386/32bit-sse.c +26f6f44a0e138400ecc40166175adb7d gdb/features/i386/32bit-core.xml +feb01ace2de7f366f51b744b15fe5192 gdb/features/i386/64bit-linux.xml +2a88ea6cd9936bcbf7574bb22b897531 gdb/features/i386/32bit-mpx.xml +7bd32097f1cc6adaf22bf55ff0597496 gdb/features/i386/64bit-avx512.c +60d35d4ff2ca24aa3e6b4264ad695f0c gdb/features/i386/x32-core.c +b292d4a68025f91b12886d1225d09ecd gdb/features/i386/32bit-avx512.xml +59e63c76fe15cb671396e4ac5fbad790 gdb/features/i386/64bit-core.c +568f57943e2968bcc263ef7c0cca1615 gdb/features/i386/64bit-sse.c +c8c1127e145cb886601c27870b4d0439 gdb/features/i386/32bit-segments.xml +8272df0c6a30f1b660fcfe05f422dd01 gdb/features/gdb-target.dtd +b96e39a61ca35bb3d66371571a0af5b1 gdb/features/aarch64-core.c +8c41a2bde2029b98b77c3d01f0cd62ab gdb/features/s390x-tevx-linux64.xml +84c3314740b4d529b0e61cefb0e594cb gdb/features/mips64-dsp-linux.c +69701d0a7c97718d55272ce8c4ed07e3 gdb/features/microblaze-with-stack-protect.c +9212387df12b21d0bcbc788cddf2b519 gdb/features/arc/v1-core.c +9262ecba3a9c5cee651f452e555768ac gdb/features/arc/v2-core.xml +f2cc8b488cc6e01800466619bf21e7a8 gdb/features/arc/v1-core.xml +f9e6cfac8e9f573ea7a24de8b0a6db6f gdb/features/arc/v2-core.c +4c2f1dfc60470b96b9c70eb806079d2a gdb/features/arc/v1-aux.xml +4e49efa60ffc72c4e178554a9a72e762 gdb/features/arc/v2-aux.c +75415cefa8d510cc01487cff404c0590 gdb/features/arc/v1-aux.c +268a2e872a3ae0dec79f9bc946707534 gdb/features/arc/v2-aux.xml +14e1401897a6a68135718edfc9b902d4 gdb/features/s390-linux64.c +8c8ce0810a4e579db263244859a58f53 gdb/features/mips-cpu.xml +f7d36a5b2b6b4200cdf38f085ac2fd7d gdb/features/library-list-aix.dtd +000ffe21a3ec74e2715e745a0d96f8d1 gdb/features/traceframe-info.dtd +51dc592e981d8b6002a975d43be190f5 gdb/features/aarch64-fpu.xml +a73d5b21919dafd3a1881b41e2090ee5 gdb/features/s390-vx.xml +64656303b595a4ef6cf4938b28a7fc78 gdb/features/aarch64-pauth.c +1938103eb133c5927990fec9712149f3 gdb/features/s390-vx-linux64.xml +077686cc63fa96e0250ca206bb6924d2 gdb/features/s390-core64.xml +e93fb71b675055324eb5188cba6dc506 gdb/features/s390-linux64v1.c +8675e544f595132bef3ef1aee76fcea8 gdb/features/s390-linux32v1.c +2c901de17e1b1488b38d82df7e9e0b8b gdb/features/btrace-conf.dtd +3bd12a139cd63d67c7df1a01d3269260 gdb/features/s390-linux64v1.xml +3cc00d885f70373a957f765a1812f09f gdb/features/tic6x-gp.xml +19d3356cc8675e321b08510e54dd129a gdb/features/tic6x-c6xp.c +f25f22c310f59d182314cad569df02c1 gdb/features/s390-linux32v2.c +5c1633494ac7a7b83e544614f600cf07 gdb/features/s390x-gs-linux64.c +8f465fccee5d5267b95461e7ac5f1483 gdb/features/s390x-vx-linux64.xml +a6eeae8508ef05c896dad65b56ad0af5 gdb/features/nios2-cpu.xml +2dd31873f6fd7dca7b46cd72acffd32f gdb/features/microblaze-core.xml +de5d0f57321f660e36daea67125cc661 gdb/features/s390-core32.xml +0f2c2203d961494f4fd1ec2178d59d18 gdb/features/threads.dtd +b96a8fc159d08f5bb8ae0496e176749d gdb/features/s390-gs-linux64.c +943dfa04813c664add4eadec3018cf2b gdb/features/tic6x-c64x-linux.xml +9ad297b706b474f90c20b7db4229deb9 gdb/features/s390x-linux64.xml +6a5d5a037d2063864b67862cd478a30b gdb/features/s390-fpr.xml +cfb42fcb5d14a67451437a2e8bf657ba gdb/features/s390x-linux64v2.xml +3871ddb066acdb27b0b742a3580f2400 gdb/features/s390-tevx-linux64.xml +353cec24770f3e277e67b6a29c6bc83c gdb/features/mips-cp0.xml +63e26bc5788a002a583f2e7d1c93642f gdb/features/s390-te-linux64.xml +f46393f36607db136226ecdd9d761831 gdb/features/tic6x-core.xml +c914919a950928e9fb316ecc9b6371af gdb/alpha-tdep.c +5cb46562e31af4c734ea50caf1172993 gdb/sparc-nbsd-nat.c +8f5a03c189727d347a330548f3ea9c98 gdb/ChangeLog-1991 +550d2e543643821bfe78d5f6860d3c3d gdb/coff-pe-read.c +8d4be2b92c98196411ddd343340215df gdb/i386-windows-tdep.c +16977db274e5c5d18a1db7b176c4eb46 gdb/mips-sde-tdep.c +fb3f05c7b4d81d805bc7d48f3c88bc8e gdb/arm-pikeos-tdep.c +1d6453c46104d2ff4ce2226ea2e88abf gdb/riscv-tdep.c +55f2aefbf2fb2b87a7561ed7d8d224e8 gdb/cli-out.h +ce7473ff709042a136933f61d31af2d4 gdb/proc-service.c +a6e3ca922f1352f98207338c714be8a4 gdb/i386-linux-nat.h +18571f7e1e21ca237f7b4ba61bac7efe gdb/m2-exp.c +2d74f163fb7be9aff85d12cac9536311 gdb/selftest-arch.h +3968833da9979b5deca07647e7794894 gdb/amd64-tdep.c +474ab25289977680e4dfc520481a8873 gdb/arm-symbian-tdep.c +c59dc9c2deeac1caead1e076fd6a0484 gdb/producer.h +e230536dd52dc508c9162cb6ff0fca9a gdb/tilegx-linux-nat.c +7821d970267b0d0aadf27d5cd4da07e4 gdb/or1k-tdep.c +9af0f35a5b9dea82fc8e1357a2e61d1d gdb/machoread.c +6137e68182d93f0c5b4b03fee7de4642 gdb/frame-unwind.c +b3b55b7fbf3857a26afe0ebe1fc4165b gdb/nto-procfs.c +818b53273e69eacf6540abe5ecabcb95 gdb/i386-nbsd-tdep.c e5e48ebe3b4dffb7c59b8b6ccc42d977 gdb/data-directory/.gitignore -f67392417f1bc4698ff01743edb63cff gdb/data-directory/Makefile.in -257b9c2c3c8351c13e1f01ff7e97db90 gdb/expprint.c -ba5e2e9596f813a34ec9086adeecb681 gdb/gdbsupport/gdb_binary_search.h -cc865bf65329a480b9f25178497bd7ea gdb/gdbsupport/scoped_fd.h -d3dc1250a903bebfd5c41551c4efe161 gdb/gdbsupport/run-time-clock.h -dff74bc195d8db547ac7ea9fa0fc9112 gdb/gdbsupport/job-control.h -e0e6038d3c675435a45008c851e2aa75 gdb/gdbsupport/common-debug.h -28e96eff7495838f03edd8d946f1ef88 gdb/gdbsupport/host-defs.h -bfe0512607fa6cf37d2768ef12dbd70e gdb/gdbsupport/environ.c -e7608406a3c9dc443aa860bcb5a76ad7 gdb/gdbsupport/version.h -65c9d6395eeab50985c622e016ace2b9 gdb/gdbsupport/thread-pool.h -0053f52c27bd4584071f786b8742098a gdb/gdbsupport/format.c -30d3d59446f623512482d68ff87bd812 gdb/gdbsupport/underlying.h -e3df2c18993776776b886e4a6b893044 gdb/gdbsupport/scoped_restore.h -1304a4d5eb2f4386af5e16182082c566 gdb/gdbsupport/gdb_optional.h -858b55e8a06b332be3d723ef14b467c2 gdb/gdbsupport/rsp-low.h -f8ade62bc8dfafc549b7a78f9f920dff gdb/gdbsupport/pathstuff.c -b906e0ded3c6e5cc08920d8401b5296f gdb/gdbsupport/gdb_unlinker.h -53dd8bc0f298648183b01e7ca5818658 gdb/gdbsupport/fileio.h -4de52d4e6f7b7dd7a34538687ce849cc gdb/gdbsupport/gdb_splay_tree.h -5630d39659a93d20cea30084a3ff90ea gdb/gdbsupport/alt-stack.h -904ddf1f1a4c59d0e81f32ac3339a3ff gdb/gdbsupport/gdb_vecs.c -95f18fc9fd8f8b983e041c321c77ed2c gdb/gdbsupport/array-view.h -64408d6b59e58302b64a9b00de79cda5 gdb/gdbsupport/buffer.h -78c0b02b916b040c7f03e4d68a2e3320 gdb/gdbsupport/enum-flags.h -65834ac84fc539b7278027a9edc397d7 gdb/gdbsupport/btrace-common.h -27489340c1e4b2356970d74bc0e2e011 gdb/gdbsupport/run-time-clock.c -8e52b6626f8baeb31100d18ff84d059e gdb/gdbsupport/offset-type.h -e2887b28b47651941364949a0440116f gdb/gdbsupport/scoped_mmap.c -895f61b5402eb1e2e1be0b9dc02b66ac gdb/gdbsupport/common-regcache.c -c6daaa298164ad3a7ce33da0fab40cd7 gdb/gdbsupport/preprocessor.h -5d7331a19731d3377f5877a80d3fc8ee gdb/gdbsupport/signals-state-save-restore.h -11ae77214ce801844d91d0acb45b1f4b gdb/gdbsupport/btrace-common.c -00faee4eaff628eb13ccef3ee121c2e9 gdb/gdbsupport/symbol.h -2242e2c4b9bbeb4b5133f59ffff7f028 gdb/gdbsupport/safe-iterator.h -3b7e7fa7ffbf408212cf3ed05e205a13 gdb/gdbsupport/common-utils.c -66b9012a43c5048735111884e552bdf6 gdb/gdbsupport/gdb_unique_ptr.h -7d327612a72e15ac73bacddc86a5c7eb gdb/gdbsupport/agent.c -364ad8732dc783bf35ebcf76aac2abf3 gdb/gdbsupport/scoped_mmap.h -426ade4b02549100488f496844c49049 gdb/gdbsupport/job-control.c -64487d40616e61b313d96a1bcddcdee3 gdb/gdbsupport/valid-expr.h -78c5df1ffb42c2e869ddc79c0cfbc299 gdb/gdbsupport/new-op.c -c4f9810769dbd94c1212c2a20332881c gdb/gdbsupport/cleanups.h -59bfdbe6e7a99ac9d7995c0fe5552fa6 gdb/gdbsupport/filtered-iterator.h -9361d55adc6dca5f5112350bc6ce042f gdb/gdbsupport/common-regcache.h -7c5f3e84ddc92ebafee8ffd2851027de gdb/gdbsupport/xml-utils.c -122a0a5c0e6e38b781c13d6e20e1f966 gdb/gdbsupport/function-view.h -0c25294ef1d8d4987d51a01bcac2fc55 gdb/gdbsupport/netstuff.h -f3af7f7b426bab32ef34a2a033509035 gdb/gdbsupport/gdb_assert.h -8d65f27fdf5455aaf2bf494c4ed26060 gdb/gdbsupport/gdb_setjmp.h -865015dcdc3735959a84916778116e41 gdb/gdbsupport/ax.def -89a4e6346ea96096705e33853db896a1 gdb/gdbsupport/gdb_wait.h -d9ca7366008202aa2ecf20b47a12b913 gdb/gdbsupport/ptid.h -4c7d21f9ebd6a88627e0d4e520e64f36 gdb/gdbsupport/thread-pool.c -daba91f3965a6f9eaa71778497abde4d gdb/gdbsupport/safe-strerror.c -114ddefd6e8835e2f543f38c6633ae5d gdb/gdbsupport/gdb_string_view.tcc -2c978184863afc3043e19cf8c3fdda14 gdb/gdbsupport/gdb_locale.h -56d64ee4cb7ceb89f92353c48017860c gdb/gdbsupport/buffer.c -d8774f05faa595580f6df79aa9afb03b gdb/gdbsupport/print-utils.c -76fcf79c79fc870760b2b45ce6518e24 gdb/gdbsupport/signals.c -f4d250fb98b37e16a882b2992e423d7f gdb/gdbsupport/refcounted-object.h -7218a4b501f591f1e4cc348ae8493573 gdb/gdbsupport/observable.h -e4bc3244852125b69c1796d7110120eb gdb/gdbsupport/filestuff.h -0b18c88dbe7ccbe19969b914d26fc799 gdb/gdbsupport/scope-exit.h -923db0b4a533a95eb911a68bd5fb7e16 gdb/gdbsupport/gdb-dlfcn.c -53494e23f358dc84ff9b4c53676baabf gdb/gdbsupport/format.h -e7b7e5b9cf1660e9a7866627d5c12120 gdb/gdbsupport/gdb_proc_service.h -9f0bcd6aab497b8447323ab7153a537a gdb/gdbsupport/tdesc.h -b70800ad8d27a05e2b4d066f64618b73 gdb/gdbsupport/gdb-dlfcn.h -578bb00f377ead1af92c6cf75120286a gdb/gdbsupport/x86-xstate.h -dab71c37941b7360568232de2d9c1fb4 gdb/gdbsupport/gdb_sys_time.h -aa902326e2826dbec8f6c1b6fcdd4729 gdb/gdbsupport/common-utils.h -4c8a292831a35f5261a113dab87c9a20 gdb/gdbsupport/block-signals.h -560a6a320d815a25f51df03573e8cd19 gdb/gdbsupport/common-defs.h -89aa4541c0c393972a004cf3c3c805c8 gdb/gdbsupport/fileio.c -06001c64d3d4b1cf540023c517db589f gdb/gdbsupport/filestuff.c -79d4f7bd8e811bff83b8a893d746120c gdb/gdbsupport/def-vector.h -3a5d9b7576a0e8e510e8ee299e32852a gdb/gdbsupport/hash_enum.h -5c91027f1a502ff9f720b85b9b187885 gdb/gdbsupport/gdb_tilde_expand.c -667801a61e21b446b96e048ef0fd83ff gdb/gdbsupport/poison.h -d64eaf1b21e6d119b4e265ea4fa426d4 gdb/gdbsupport/xml-utils.h -d6c3eb7043cf0ca1574e1aa4e2a52366 gdb/gdbsupport/common.m4 -f3e2e2193ca6a05204e835738965595a gdb/gdbsupport/next-iterator.h -40884075e07c21748d4d9641c9cb6c1f gdb/gdbsupport/environ.h -6d640f4f6999a42bdeb6829262a1309c gdb/gdbsupport/gdb_vecs.h -05b6f32a0f849b496b5ee57834a3f9ae gdb/gdbsupport/traits.h -884f695cb5892f254523e06a9eb46ea6 gdb/gdbsupport/pathstuff.h -4ad16cac44a3dc5cb556bb1bf57e705b gdb/gdbsupport/cleanups.c -590644d5586d788edf3e60afbf0854e4 gdb/gdbsupport/common-types.h -9c42e979aed9cbfc66670b84cfe6d405 gdb/gdbsupport/default-init-alloc.h -ef49b9bc3be54f6c50e005cce078b8d4 gdb/gdbsupport/signals-state-save-restore.c -ef0c6a4f0b5263851d315e94c60e24fd gdb/gdbsupport/common-exceptions.h -f19c9b80da8201eeeb0cc7086b15a916 gdb/gdbsupport/common-inferior.c -6ba294d72da74410caad59ce65a8a85b gdb/gdbsupport/gdb_string_view.h -b9e52c6836dfa996e958d3b0a1a82279 gdb/gdbsupport/errors.c -09e6a9bf17afe5f04f361a705820ea25 gdb/gdbsupport/gdb_tilde_expand.h -ab29ff5278785679074034075906f96f gdb/gdbsupport/ptid.c -6981a81724e9f09e6925721ea7bb89bb gdb/gdbsupport/rsp-low.c -0c8c05d0ae7f3e3b5a6cd2ebd2526577 gdb/gdbsupport/common-debug.c -c3f15f09aa5296adef623811ecc3d588 gdb/gdbsupport/common-inferior.h -d943b89a21f13fc28358cdfcfaf8be46 gdb/gdbsupport/create-version.sh -71f496151b1ec46a3bd2642304843a5e gdb/gdbsupport/gdb-sigmask.h -11f954702f85a20a5f421d8b8082b43a gdb/gdbsupport/gdb_ref_ptr.h -7ac253318dc3ca5063e22ce24806ffee gdb/gdbsupport/common-exceptions.c -c7d28c6f64cae5eb8e3df93e31094b3a gdb/gdbsupport/agent.h -3b6684339bbe373eb7c77373f78dcafe gdb/gdbsupport/netstuff.c -3435df3a1088f9c88dcc9ca206b26565 gdb/gdbsupport/selftest.c -10838c2ec221f0a04386e611f94448da gdb/gdbsupport/byte-vector.h -84ef1d98649ba7e322c2422ca74ab922 gdb/gdbsupport/parallel-for.h -798fb2e2f5ea2c38996bf23754699204 gdb/gdbsupport/gdb_signals.h -f12ec73478dd5e87c66c2e025d50a621 gdb/gdbsupport/common-gdbthread.h -a58126481e1aa512c9b4aeca37456c23 gdb/gdbsupport/tdesc.c -2c3af83283551c05f0cfccc1b68cfb3d gdb/gdbsupport/errors.h -3051db41e09388c7171a46195dd5daa6 gdb/gdbsupport/forward-scope-exit.h -5b01d54d86fe0337e96fce96861c49aa gdb/gdbsupport/selftest.h -83e72568960710b485285b167ed4a6e3 gdb/gdbsupport/break-common.h -ed3b8a213ab720b1fdfcc97361a4b878 gdb/gdbsupport/print-utils.h -f1f8eb9e59805ef248fa27f8ef27eb9b gdb/complaints.h -ab9285e1435cb0ca5d3b69226254a551 gdb/unittests/environ-selftests.c -34768279e71ad8ab21f58f8e2902044a gdb/unittests/main-thread-selftests.c -a098261ecac48129a2bf3f370880e0f2 gdb/unittests/optional/cons/value.cc -10fd3aab898c86dba7beb8169989dc8b gdb/unittests/optional/cons/copy.cc -326f01ac6bd1b08357653448fe4353fd gdb/unittests/optional/cons/move.cc -8e7684cd0de3e6f34a2114aa5faa37ee gdb/unittests/optional/cons/default.cc -7b2bec8d74ecb6f3107534b19982ac62 gdb/unittests/optional/observers/1.cc -0efd9c766bfcee357b6a5da234486930 gdb/unittests/optional/observers/2.cc -99e81715caca84da7ce31cc870ee19a8 gdb/unittests/optional/assignment/7.cc -d8344fda9c5a4237558cf4173adae161 gdb/unittests/optional/assignment/5.cc -f1b8656222966a21036c63474f1b59a1 gdb/unittests/optional/assignment/3.cc -6aa49d3d78b0b0e3599749f255af8c6c gdb/unittests/optional/assignment/4.cc -2547f1f9c842a695be65b4065aa36097 gdb/unittests/optional/assignment/1.cc -4bac7ee802144c39d7527e4a777f76d5 gdb/unittests/optional/assignment/2.cc -7aab82997a0c82dee6e96a523287334b gdb/unittests/optional/assignment/6.cc -8ea0b2cc2f265dc189838a7ef6a9dee1 gdb/unittests/optional/in_place.cc -ce7607238f04505109da871db3c18beb gdb/unittests/scoped_restore-selftests.c -ffbe6cefaec9b34b5f89434bdd4dc0af gdb/unittests/ptid-selftests.c -b52e89a4560d614bd64773c0a777bb44 gdb/unittests/style-selftests.c -2150af3c15346743785d2eef26a488a3 gdb/unittests/offset-type-selftests.c -8f589993704f2c594bc3b1865e618971 gdb/unittests/basic_string_view/element_access/char/front_back.cc -a76af215584330adac7432e9cda2429b gdb/unittests/basic_string_view/element_access/char/empty.cc -4d920b91924213519862ad91fd42f506 gdb/unittests/basic_string_view/element_access/char/1.cc -c352204ff45fadfc812f6a14284edba7 gdb/unittests/basic_string_view/element_access/char/2.cc -e789d246232fffc87fe0771d5e7dbe1c gdb/unittests/basic_string_view/element_access/wchar_t/front_back.cc -0c830868f8c4553a086e7fb62947dca3 gdb/unittests/basic_string_view/element_access/wchar_t/empty.cc -ea31e926eada9001c9e57452cf593aa5 gdb/unittests/basic_string_view/element_access/wchar_t/1.cc -559e1ec99cbc94f0f16ffabad68cf292 gdb/unittests/basic_string_view/element_access/wchar_t/2.cc -2f57b1b0d8ada4b51a6e6931b5ca6763 gdb/unittests/basic_string_view/cons/char/3.cc -d7d9dfd0ba4fa851d52b5d07c9952e8b gdb/unittests/basic_string_view/cons/char/1.cc -815ca37f2d885773406ea5a418be87fa gdb/unittests/basic_string_view/cons/char/2.cc -d014e9e009a969a8f733f0d82e75e4d2 gdb/unittests/basic_string_view/cons/wchar_t/3.cc -fdd65953700e57b34ca1e72f80a24b49 gdb/unittests/basic_string_view/cons/wchar_t/1.cc -017a61fc143869aca543f33ca2e0b896 gdb/unittests/basic_string_view/cons/wchar_t/2.cc -e615fb67e3d88e99f516b71c34bdd7ca gdb/unittests/basic_string_view/types/1.cc -b267e8663b885637444760a39b1f41c7 gdb/unittests/basic_string_view/operators/char/2.cc -cefb64063e308acfbd5fbcad597e92e4 gdb/unittests/basic_string_view/operators/wchar_t/2.cc -b086f21be7239540cbbf01d784658be0 gdb/unittests/basic_string_view/operations/data/char/1.cc -338cf19b21f35319b25355462b0c4819 gdb/unittests/basic_string_view/operations/data/wchar_t/1.cc -3ad87769f9c79a1d4820c1ddd960ca98 gdb/unittests/basic_string_view/operations/rfind/char/3.cc -2895ddc885ff4a48e960d638a9955856 gdb/unittests/basic_string_view/operations/rfind/char/1.cc -b62df3d003dcc7deff51db2529bb551f gdb/unittests/basic_string_view/operations/rfind/char/2.cc -53deaccdfd282b3914c13f231fa80843 gdb/unittests/basic_string_view/operations/rfind/wchar_t/3.cc -2415c5446f77b4168ab7f1c97043c074 gdb/unittests/basic_string_view/operations/rfind/wchar_t/1.cc -6c2aedc48350f1ee30b51468789093cf gdb/unittests/basic_string_view/operations/rfind/wchar_t/2.cc -43f90c4014d9147a7d0d1f31aeec035d gdb/unittests/basic_string_view/operations/find/char/3.cc -33af7c66ab64d679bf95f814e9fa2349 gdb/unittests/basic_string_view/operations/find/char/4.cc -d12e568bf46928061aeb2a9a8d38ac4f gdb/unittests/basic_string_view/operations/find/char/1.cc -ddbf50624c50c495935e539e19c9336f gdb/unittests/basic_string_view/operations/find/char/2.cc -231752c8eb816565de95c8503770048c gdb/unittests/basic_string_view/operations/find/wchar_t/3.cc -a5c8e967c1b490c2ad62eb57ecbf5bd1 gdb/unittests/basic_string_view/operations/find/wchar_t/4.cc -72da3a64fec0fc919263d145f4c00646 gdb/unittests/basic_string_view/operations/find/wchar_t/1.cc -05ab003d927b10736ac65352e54611fc gdb/unittests/basic_string_view/operations/find/wchar_t/2.cc -19ad55440ae7ff3b8132f32f437d1107 gdb/unittests/basic_string_view/operations/substr/char/1.cc -8b708c027babea8cbe983355f7eb55ba gdb/unittests/basic_string_view/operations/substr/wchar_t/1.cc -70492cca76a82e735e3aab64bf05ad30 gdb/unittests/basic_string_view/operations/string_conversion/1.cc -62df3a6d702a09bedefeb53f83cdc78c gdb/unittests/basic_string_view/operations/compare/char/70483.cc -ca11efc09fe8902d9d960dd18dc0a590 gdb/unittests/basic_string_view/operations/compare/char/13650.cc -373372cce6df5ca5dcf99a5f38b450d9 gdb/unittests/basic_string_view/operations/compare/char/1.cc -529996ce0841d2f22c7f49124c7e0979 gdb/unittests/basic_string_view/operations/compare/char/2.cc -d6538ea6385e7dd4a6ab240a2ecac922 gdb/unittests/basic_string_view/operations/compare/wchar_t/13650.cc -0ca9fc4eee737bf8a13402a04b3bc8ac gdb/unittests/basic_string_view/operations/compare/wchar_t/1.cc -ace5c937694842cefe6072424387859a gdb/unittests/basic_string_view/operations/compare/wchar_t/2.cc -1112a94d3f5e9b7fb27de76e11a5f1e6 gdb/unittests/basic_string_view/operations/copy/char/1.cc -63eb0c19f5cd64545853cb614116564c gdb/unittests/basic_string_view/operations/copy/wchar_t/1.cc -ce69009106a445a659a7ff6a7715adc0 gdb/unittests/basic_string_view/range_access/char/1.cc -1905f8fe1df7dd4c24b182bd4958248e gdb/unittests/basic_string_view/range_access/wchar_t/1.cc -90d9a6b717b6ea1dd1a745ba28d9dcb3 gdb/unittests/basic_string_view/requirements/explicit_instantiation/char/1.cc -c8b72e11aefc022b6d8a80036f5d77d8 gdb/unittests/basic_string_view/requirements/explicit_instantiation/char16_t/1.cc -60683e7c98be307d8428a5e3bec0b8c5 gdb/unittests/basic_string_view/requirements/explicit_instantiation/wchar_t/1.cc -101c4f0d3131ef9d1510d64cbce948ef gdb/unittests/basic_string_view/requirements/explicit_instantiation/1.cc -5f87088c458f575207797890fb6503a7 gdb/unittests/basic_string_view/requirements/explicit_instantiation/char32_t/1.cc -1d96a1445e9e5df9978296c66517ff50 gdb/unittests/basic_string_view/requirements/typedefs.cc -87210fe5f02bff52664d87280ca366a6 gdb/unittests/basic_string_view/capacity/empty_neg.cc -5922926e5b6b0623f6046f2d9b8e9efc gdb/unittests/basic_string_view/capacity/1.cc -e5e11d121e7354f0534a5c85f769244a gdb/unittests/basic_string_view/literals/types.cc -6eededefcc79e07769fd2659a9c08d9f gdb/unittests/basic_string_view/literals/values.cc -0615a46e68c13a82b2301d8c3096d762 gdb/unittests/basic_string_view/include.cc -4cf028a1349e60f9c1379fc7fafe2a62 gdb/unittests/basic_string_view/inserters/char/3.cc -066ccbbca53dafd0a7b43ec61bb3826e gdb/unittests/basic_string_view/inserters/char/1.cc -3f45370b3e2d3b4ae177f9491c758d78 gdb/unittests/basic_string_view/inserters/char/2.cc -ae3ca1e3b8811ecd7031c2e8f8a9f0c3 gdb/unittests/basic_string_view/inserters/pod/10081-out.cc -9a679b3b8466ebf0d6571264da2a7e3f gdb/unittests/basic_string_view/inserters/wchar_t/3.cc -646cd6e107a09810094f693595e75189 gdb/unittests/basic_string_view/inserters/wchar_t/1.cc -d8742bcb97abc26d33557902a3ef21f3 gdb/unittests/basic_string_view/inserters/wchar_t/2.cc -de52726c693f1d3e5e51fd3186fd0bc3 gdb/unittests/basic_string_view/modifiers/remove_suffix/char/1.cc -0368ba4cb9a601eb5d4417f5fa702a92 gdb/unittests/basic_string_view/modifiers/remove_suffix/wchar_t/1.cc -954a07b2c45260c65dc217c7c8944e10 gdb/unittests/basic_string_view/modifiers/swap/char/1.cc -067f61bf596cb8fcbece321855c0c39a gdb/unittests/basic_string_view/modifiers/swap/wchar_t/1.cc -5e53fc2bd8299153e27b575e6c391238 gdb/unittests/basic_string_view/modifiers/remove_prefix/char/1.cc -e42bef86689461eb6143afb9c14a8cc3 gdb/unittests/basic_string_view/modifiers/remove_prefix/wchar_t/1.cc -4698a4dea4753b9c60d1703cf08d78ce gdb/unittests/basic_string_view/typedefs.cc -09dd7b7ca941064c0c7c429036ccdbe5 gdb/unittests/utils-selftests.c -d8fd07ccd5f8542780c75098e8499651 gdb/unittests/memory-map-selftests.c -26e4d5798564b2445bb92de556ea8afe gdb/unittests/rsp-low-selftests.c -6fb8c6df32d437adab6926029f9123f6 gdb/unittests/cli-utils-selftests.c -eb0bac69945763ea588d0b2b36ccdeb7 gdb/unittests/parse-connection-spec-selftests.c -7b51679af51859c7422ef35d23581434 gdb/unittests/unpack-selftests.c -0ed03480f8070b6c66093be690ef29c4 gdb/unittests/copy_bitwise-selftests.c -c66e2a590fc3a3621483e344ac38ea67 gdb/unittests/tracepoint-selftests.c -80bdad6c62eb0f39c15d6dd858231ada gdb/unittests/lookup_name_info-selftests.c -7f99ff4f0400613efc87bc033e36c291 gdb/unittests/memrange-selftests.c -39176a6e6c8a9bc912d20ebb6b0abadd gdb/unittests/xml-utils-selftests.c -fc656fc3cf092c5aeab6c1eef6578fdd gdb/unittests/common-utils-selftests.c -999461f438789ef1b7fc6b5eb605755d gdb/unittests/filtered_iterator-selftests.c -157ad891469e6473bba27f26fff05818 gdb/unittests/child-path-selftests.c -75707f246d37496bbd66ac09430754b2 gdb/unittests/tui-selftests.c -174032915933f02327bc91525068d6c9 gdb/unittests/string_view-selftests.c -ad1c4bbaa6889980ae71b2f36333d70a gdb/unittests/help-doc-selftests.c -ee1f36ec9e444a3c7e86f3e84c2aa691 gdb/unittests/vec-utils-selftests.c -4a9ba29b78a0994eac893b35324651df gdb/unittests/scoped_fd-selftests.c -9203923ff6f999f0c8fa0ca2b92e208f gdb/unittests/observable-selftests.c -9845da3bb8a98b5474b64604eb0a93f4 gdb/unittests/scoped_mmap-selftests.c -43e65819b28f07227e7c4f65cbe24f94 gdb/unittests/optional-selftests.c -a9fa1c4bfc18cdc37fb4f33d868125bb gdb/unittests/mkdir-recursive-selftests.c -8070494f5a8df36f63346231aefc72d4 gdb/unittests/format_pieces-selftests.c -bfa03eb7ffd5fcece13a56abc5d5909e gdb/unittests/function-view-selftests.c -36bb9a317e0e698f8b17a0f2a40dba9d gdb/unittests/array-view-selftests.c -28638479a89f964658643a743d9d44cc gdb/mips-nbsd-tdep.c -f392d775bd73ac2b0ac136663dae3919 gdb/symfile-debug.c -db753bde406700d4e093bd6318aff1dd gdb/amd64-linux-tdep.c -4dbb5bc4f3761c454f06ab3013fd5232 gdb/ppc-tdep.h -51af3aa3436a1774e3640b85845ed69e gdb/utils.c -89606c5796a5cf5b6f39a32e34e4d3a5 gdb/mdebugread.c -379935926df237671c8c2b5189303b21 gdb/ptrace.m4 -d53da2c27045b2072a3ed31183fbebf2 gdb/ia64-tdep.h -c7c2b1041e711d0b8d8cf9e4404a2511 gdb/memory-map.c -3d17284c3ef56957906c03901534dead gdb/dwarf-index-common.c -f6e9d5cd7a54bc30d69c5159313e94e7 gdb/mips-tdep.h -7c673cd8bf51ce40d027bab2ee1ffee5 gdb/findcmd.c -47e7b75f1665f835082aa36542fd13f0 gdb/tracepoint.c -826af20d09396ccfc584dbd50d51b3c4 gdb/aarch64-tdep.c -ac293ed58a9382ff1542932d597f1f6c gdb/gdb_mbuild.sh -1db7edb096c28be5bb88704a123536a9 gdb/arm-linux-tdep.h -b767b41e70c1b8f839872803a15d24d7 gdb/top.c -ec7ff47f22d570d757c5230cbffb1a4c gdb/extension-priv.h -553ae9932a62bd9b85f070085ac17201 gdb/record-btrace.h -bdbc3ea1bb1e005f14e6aeb78c31c34c gdb/mdebugread.h -9707ccb1a78acaba0b90d004d7a37206 gdb/annotate.h -69242ccc9c3c7213eeb0cd0681d64b98 gdb/nds32-tdep.h -3925d5a88e5467c7ae87d436a3617ea4 gdb/value.h -fe9385d2f4ef6f5e6422f63b8b17b8cf gdb/i386-fbsd-tdep.h -705da089430de2d6f040d043a696d695 gdb/frame.h -fe381d23e43d3b14bef58f3fb32b86d9 gdb/coff-pe-read.c -8513b1694d7160d73c46121d171ff1a1 gdb/stabsread.h -533a5cc4d40497cecf7dddbd41d16088 gdb/sparc-tdep.c -d37fe35df900c63ff449bd1f2e948a31 gdb/rs6000-tdep.c -924e165801e417d1ed279f12d2a8ed30 gdb/i386-bsd-nat.h -53cf114ff5719cd047da9d38dd318599 gdb/ChangeLog-2012 -b524c0c79a877166aa6558a9abc9bce3 gdb/rust-exp.c -748cc74c657098d8c0ffcd86cb3fc549 gdb/run-on-main-thread.h -38211c79d08cbe4e5b9a1430bb8940bc gdb/xml-tdesc.h -0c61a2a1de4f842c5c576eeb2f0bf68e gdb/obsd-tdep.c -90e56dea65beb67443d6c83cbc5fed7f gdb/ChangeLog-1997 -dd542fd374c21d6716474fff70b64a9c gdb/frv-linux-tdep.c -0a3e82c1321a394f2b9ad421e82d743e gdb/Makefile.in -8e3781e8f523f617ef1fcbc5a974a705 gdb/minsyms.h -a16e9d879d30c456af5e508380cc8a0e gdb/tilegx-linux-tdep.c -760ee2a4b1544249d06acbda9c7df4a7 gdb/i387-tdep.h -e375f245c4a0be6bab0fe55cda25559a gdb/producer.c -631d28ba8dbee6108426b719dac7f0a7 gdb/m32r-tdep.c -52f5ef32ae747908ac0ca752ddafd2c7 gdb/ada-lang.c -bcbd2baf4e39e32310bc51d686eb8430 gnulib/ChangeLog -fd0ff0a36f59e0299ce30657cba0761b gnulib/configure -07d804a63dc4e6dd2202f28bc51a347d gnulib/configure.ac -e24389dc089708245c00564f3acb5ebe gnulib/patches/0003-Fix-glob-c-Coverity-issues.patch -f287a8b6ec45ae54ecf50729295be67e gnulib/patches/0001-Fix-PR-gdb-23558-Use-system-s-getcwd-when-cross-comp.patch -cbba73fcf0a05520d863918e46904f0e gnulib/patches/0002-mkostemp-mkostemps-Fix-compilation-error-in-C-mode-o.patch -8e1189874009e4b11081393c82f9c630 gnulib/update-gnulib.sh -0639cf30adf8509cbaa728b589ee35ce gnulib/aclocal.m4 -350741c20c0c184ac1178f805f3a3c1d gnulib/README -e214bc0c605e37efc2bd334462094a8a gnulib/config.in +631ab7fc7711dd8fac7640eda8616527 gdb/data-directory/Makefile.in +741d99f5e3bfd41e81f1876b2e3b8ed8 gdb/m68hc11-tdep.c +2d91cdd0b2971adadb97b9401679ea23 gdb/gdbthread.h +e4181e306c0412a6f7bee3e30da5b174 gdb/windows-nat.c +dd69a1ef55a95c92589a46e939d31313 gdb/rust-exp.y +f93863999fa8f0662123a27f24a8afcd gdb/p-valprint.c +e4bc364ab9930e51347fb54374a15fae gdb/gdbarch.c +e61248564466fd3335a558e0bc077bad gdb/break-catch-sig.c +6307a336859b6f78a2895e2c977d93af gdb/i386-tdep.c +0c0d170a9421ee88ac28de02341637d2 gdb/ChangeLog-2001 +963478570fb4ebcd0f4047f2892173f2 gdb/ppc-fbsd-tdep.c +71515dacd8b88c987325d14538e0c78f gdb/mips-tdep.c +a817ff81cb51104d5eb4514b8e9d9535 gdb/arc-tdep.h +635cb12f70e7c701e450007f72434fdc gdb/probe.c +753be6d90396f7149b47605b2d8edea4 gdb/charset.c +24e10b790fb865f576f2cecdd911f40a gdb/gdb_proc_service.h +7ab967341514804b369167d4c64fe166 gdb/debuginfod-support.h +8091735830f119d8b63b1eb5726b3ae4 gdb/continuations.c +fa321a7c57f5ae311dc94a1d16dcc8fc gdb/solib-svr4.c +31c83b4bb1c5c9c771fe8e1ec3f1e9ba gdb/msg.defs +1ac0b5ebfcdbb8499725096f0ac38fdc gdb/arm-tdep.h +789a354fcb31d656deffc922b1c72d74 gdb/amd64-sol2-tdep.c +713b2523bb67186361cc19d9fa1ee4b2 gdb/moxie-tdep.h +535bed63b05bc9a755925bf4501f3b61 gdb/target-debug.h +a719a355de11f35d96bafcc588e937cf gdb/type-stack.c +ded9183656b0a3405f2a8149803d1de3 gdb/probe.h +83ba327e7f571c4cce789068fc1a7824 gdb/breakpoint.c +ed9c82ba3edf612a5d2156960481700f gdb/xcoffread.c +6988bb42656080fff6981a033dafad82 gdb/symmisc.c +d1e3b4dd2a7b4e73e265394377652d55 gdb/aarch64-fbsd-tdep.c +cbad77b7bcb5f68e9c8c7019bf0f6efe gdb/jit.h +46bb46e2eecf0d3f8a473ca0aa0132a8 gdb/break-catch-syscall.c +1251348e09b2765ff0f87dadf2d3c945 gdb/fbsd-nat.c +5c9e87f0cf7f2ecf3dfff3771bbf9618 gdb/v850-tdep.c +b55f85cf086cf5f82670673a5960fd09 gdb/procfs.h +1fe21b63677d0445c105ace778da861d gdb/amd64-darwin-tdep.h +35b0b26caf1f40f22dae3034c01808e7 gdb/or1k-tdep.h +62db38713fd2132b3c689474784d5380 gdb/aarch32-tdep.c +0c9e8145cfa947216c425c17fb0878b6 gdb/silent-rules.mk +64a270cc782a0f2131f8ec088c5f7c84 gdb/rs6000-lynx178-tdep.c +88599e274d05244fd8d764f53b9a2518 gdb/gcore.c +8a0c23845d35c5f9bd3755556c47b1da gdb/tic6x-linux-tdep.c +71a16dd947dd753319f2efd4fe0b2da8 gdb/cp-support.h +aa0a6e756d88ffde87f7fde6b143b292 gdb/configure.host +caf1a7b0f3d89acbf61a4e780648f9cc gdb/inflow.c +7e0249df8d4c43133af8bad4e5b926a1 gdb/aarch64-tdep.h +d8f0ff2f5f9913d1d7c117c91f899342 gdb/bcache.h +ac1514a0e4215e3cac9ba244135693f2 gdb/hppa-linux-nat.c +192058ae23a2d10f33a5f8820e1e0526 gdb/buildsym-legacy.h +b994593cd5e51bd1e52861b18b5ad514 gdb/sparc-linux-nat.c +caaad37358cd8b60c064c759c4d10df3 gdb/vax-tdep.h +df0953a2c92f3f7692c7f8ee3cdffd1f gdb/memattr.c +4c02deb703dee4488e0f23fef943ae2e gdb/config/sparc/nm-sol2.h +f8cba6f31abeaf698773f089812b09dc gdb/config/djgpp/djcheck.sh +7cd1521272bddfc1096e4f4ee4ab5a79 gdb/config/djgpp/fnchange.lst +cdc11406d9e6e5c91f7643088983ff30 gdb/config/djgpp/config.sed +47d17ee03bbe47a03bf5dd4c51b5911b gdb/config/djgpp/langinfo.h +6b3e5671b59ee7567498a943b1359c88 gdb/config/djgpp/djconfig.sh +6f77e81e9901631d875f51e72983e548 gdb/config/djgpp/README +4c29d8207944cba1cba8fc8760c4e7e5 gdb/config/djgpp/nl_types.h +c06b84d7e6804979263189a70516b16a gdb/config/nm-nto.h +fdf0d3c4695d58299bd991e372d49ccc gdb/config/nm-linux.h +38334cbb16e3498d784d78790c28aa0d gdb/config/i386/i386gnu.mn +a3ab1c4f9bd6eeed100848dc9c114b3d gdb/config/i386/nm-i386gnu.h +40bb00571d8a8c3f12e750612f24d54f gdb/jit.c +f1d0d66af77e67903d063941c3d19555 gdb/interps.c +80092d0fe91ef11144d00635f8ee14fb gdb/ctfread.c +590544a0a33a36c96343ad84fba03c13 gdb/transform.m4 +5cf7a82c04762a3c8205660b503fb068 gdb/system-gdbinit/elinos.py +9beba16bb4496cf2bd9973c069d1881d gdb/system-gdbinit/wrs-linux.py +ab29aa923ae6e8e9081e7e7560bef85b gdb/target-float.c +96ca431e92abcbc53bb0b2e23537f1ba gdb/ChangeLog-2008 +ba42049566eaaf90e6248322e73fee08 gdb/frame.h +ecb901be7bd8bc754c2480ba9c532a78 gdb/elfread.c +6f25045260400b9a86127cbb827d82a5 gdb/README +4366fef13a26eed4ed12b0205f820c57 gdb/m68k-bsd-nat.c +6240b66b3df5dc678c3d10d7cc871c75 gdb/solist.h +304b6c8df9ee869dab7638082bcd05ea gdb/infcmd.c +05d343e871af7efe3c3634cf62a899f2 gdb/exceptions.h +03ef979d26b76b6de023f657762118ba gdb/btrace.c +a44a60e20c89d68830cce7ccde8f7d0f gdb/stabsread.h +0da57dcb83d73d3e0223c36c8abc51be gdb/rx-tdep.c +ce3ca26b4775c64a17b52b43c9ab976a gdb/riscv-ravenscar-thread.c +cd50661cc3b693f26b9b05817354900b gdb/location.h +006a9d22be601b34fb652e81981fad59 gdb/stubs/m68k-stub.c +2dc5069475f1be2271497ed3a83ff6b2 gdb/stubs/ChangeLog +0644af48c77adac296d83d3fe9bc65e3 gdb/stubs/i386-stub.c +140d077412ae615053b55e8cd29dfee2 gdb/stubs/sh-stub.c +8edc014e1b5928dd9761408fa7df0d64 gdb/stubs/sparc-stub.c +e983deb1cdce6ff9db4dc2a13db7b658 gdb/stubs/ia64vms-stub.c +8c029d7c656ce4990158901bcf423be1 gdb/stubs/m32r-stub.c +d2ce0776e71e0656479f597d6fef401b gdb/stubs/buildvms.com +01ce5e25ca13d0a4afc60f30f248fdba gdb/macroexp.h +4b193fb25944090f2f97f52ede9346d0 gdb/ppc64-tdep.h +27a4bd3b673b3be6bde83eba97e43697 gdb/arch/arm-get-next-pcs.h +04b572deac389ab45bdd9158daf462d7 gdb/arch/aarch64.c +cca4dcdc315d1f523927cb3e09ec8fec gdb/arch/i386.h +2f35cef086f8c103bd973b61ef60e088 gdb/arch/riscv.h +e04ba6a0a7312691a99cc392d0b114a2 gdb/arch/aarch32.c +a22455cfcc9930e09de5b51a0da0a119 gdb/arch/amd64.h +fe4d9339d8d8c2d2572dcca7c9bc8e9b gdb/arch/ppc-linux-common.c +7f2836ac7f5a585496bd9418724f1d08 gdb/arch/tic6x.c +4a5f9c819b9ef7bc6165d92a55820322 gdb/arch/aarch64-insn.c +3d4276e5182a8bb9bfb704f06c6da176 gdb/arch/arm-linux.c +a82662fd685b69b480cc5140eba040f5 gdb/arch/xtensa.h +0e632608875b9e8e768bfde2d588e1af gdb/arch/riscv.c +d788e3e8e1fd2faea7301137cfd4a957 gdb/arch/aarch64-insn.h +404b133268c555e9400888246eb96bd1 gdb/arch/i386.c +197aa4c83e79cc655841f3eb6df7b92f gdb/arch/arc.c +19eb65814803498b2d0d18075c35e07a gdb/arch/aarch64.h +044acca81cb24edbbae5131f2825569c gdb/arch/arm.h +911a166907c133093f4bc63f3e36e2ee gdb/arch/arc.h +9707f986dd78b7f85f09bd9fe0d9d06e gdb/arch/arm.c +847286ffabdc0719e333ee72128c5fa3 gdb/arch/amd64.c +441e95e929b56d5bd129f7a5c08a44e3 gdb/arch/arm-linux.h +8b26f518278f215a3d546a0db05a41e8 gdb/arch/arm-get-next-pcs.c +75b46f8335614e360bfe3369939fda53 gdb/arch/ppc-linux-tdesc.h +1edb5a42342b6461673a5cadc94d2d4c gdb/arch/aarch32.h +0500926fd07a78925a3aba902c3e6440 gdb/arch/tic6x.h +33d86f57ce125cab751571d9a8c040f9 gdb/arch/ppc-linux-common.h +f51238d6e1018459be6db0034825fe15 gdb/mips-fbsd-tdep.h +5ca2c007e2ebfb230385c8345d51319c gdb/x86-linux-nat.c +94b414ed38478fc6eb765aa47580ad6f gdb/tramp-frame.c +92b36ae6a2537e146b1038e1ab1eaa29 gdb/frv-tdep.c +e1a9eb7796403574800d61382ebe121c gdb/exec.c +5170ab0af7a985a40c4013f888a076b3 gdb/hppa-tdep.h +faf93d00181edd102f087b94b1360eb2 gdb/memrange.h +c9c5a73dffc1e2d0c4bd39de0a78ad54 gdb/gdb_wchar.h +78798d1f46c04d3fb69038f5edbfcb2c gdb/auto-load.c +605d5b02352fa4d580d08f64f5fb0ab4 gdb/ChangeLog-2003 +512aa76269ab4b954b83129b9e568139 gdb/disable-implicit-rules.mk +86e0c94c417482b4718ae43d8467bace gdb/c-typeprint.c +6fc0247d0bfd67a2019350a0da206226 gdb/macroexp.c +a2d219744867aafc637845fd102a22b7 gdb/ppc-ravenscar-thread.c +7f2dea54bd3fc1328c6936898913ec42 gdb/sparc64-sol2-tdep.c +7d4a9a8a18236dd40d0a9576fcb9ebf5 gdb/ft32-tdep.h +177b224ace95c6fc45cbb3b3a16dbbb0 gdb/registry.c +3d528b586db6390089ac3b3e049b9f7d gdb/infrun.c +351a0400e4435264b627cf780ef00258 gdb/m2-lang.c +f7e3b7ee973b75a54784cfccb203bf85 gdb/i386-obsd-tdep.c +49db75cbe1bd422ba03f5968bef9c904 gdb/arc-tdep.c +8730a5a2f898dc6557e9e90837a1f3c4 gdb/dictionary.c +42214057192e649cf71db41303ce7414 gdb/mem-break.c +ea190ad20d2eb89806467ad0d31e7fa0 gdb/linux-tdep.c +53c0d0ae96a04035fc0a9648569175c6 gdb/ia64-tdep.h +7aae97bce794ce54a34768a2cd88e1af gdb/bsd-kvm.c +7ec3fe90855bc3500133388aa697d3f9 gdb/alloc.c +6e62d83d35b79305ab6f17b259ee069b gdb/varobj.c +d7b69b520844dc2a2b1d9f1a68aaf484 gdb/x86-bsd-nat.h +b5201df6eee8a59654103e513959f780 gdb/arm-obsd-tdep.c +8006831a03238ccc455a2d8e47737cea gdb/target-delegates.c +940132e0c89d20de26db35d3a9816a7d gdbserver/hostio.h +f382d97c34a8545471899ce40051631a gdbserver/gdbreplay.cc +84ce65d1660d5c52f50d52b3cdec4868 gdbserver/netbsd-low.cc +e703e7f13404f5aac11541eb91946b93 gdbserver/linux-ppc-tdesc-init.h +0d56f7b5100e27b68928ced26ff987a8 gdbserver/linux-amd64-ipa.cc +ac71702b830c2b264bdcde34f1afea4f gdbserver/linux-sh-low.cc +ccad2e73a544506de37d642317422316 gdbserver/x86-low.cc +d94e53fd4058864455516554ed63b8a2 gdbserver/x86-tdesc.h +e056232fcbe8ce0f0db07e2683817644 gdbserver/dll.h +51ad831d8077a4ceb194353421390ab7 gdbserver/linux-riscv-low.cc +205e45123afcea118e5f6d5fff1b4bfe gdbserver/configure.srv +8e8cb69c00dc1aad478b8299ff2eb0f6 gdbserver/ChangeLog +b7fa4d6ce0ea48d043fb44fa3112f6b7 gdbserver/configure +2e43db0cff25b0375645028ff9b7c177 gdbserver/utils.h +3b6524afd8b10f5490a871b5b849a123 gdbserver/ax.h +2dcfaf7c9b5923ff12522c13995b3aba gdbserver/tracepoint.h +117ca7c66926a45a859c23ea406f929d gdbserver/.gitignore +67b542f01c7dd3946311a929804e4dbf gdbserver/notif.h +e5eba73c1aed9457226c6656cc99bfde gdbserver/netbsd-amd64-low.cc +a4b7a07f2e417a362cfdadd3f780430f gdbserver/server.h +1d9c481323d9153052ee615e740f7083 gdbserver/linux-s390-low.cc +15784775a8f5874c68875a9e29ffa7c9 gdbserver/fork-child.cc +5838d28651b29849fca06d0a049f56ac gdbserver/config.in +01db97a1b236b5e31a3e6ec81c852fea gdbserver/target.h +2d021b1af57405525849bd1bc1cee477 gdbserver/thread-db.cc +49db75b097d274c32610a276d8c12c52 gdbserver/target.cc +55a166fcbcc5dee07fd116162e9aa7f4 gdbserver/notif.cc +7f6bee1785b855b25c94b3ec99faa5fb gdbserver/linux-arm-low.cc +4c77b07f576790169acaeda620aa6856 gdbserver/linux-nios2-low.cc +bc1c2b9792f0380260f3b48b42646c0c gdbserver/server.cc +013dbd4e05aa946bd7a6e82fde134af7 gdbserver/debug.h +3cf986679bb672f558a3fd05306c16ac gdbserver/hostio-errno.cc +db9d03bf8e3e8b8ad14ae50a68ba3fdb gdbserver/linux-sparc-low.cc +908d9fbf17450121d60f0f19912d0668 gdbserver/tracepoint.cc +1516e67afa4f560d91de5bec13bfe80f gdbserver/.dir-locals.el +fdbf319d5e1f81ceaa5be98ac78177ca gdbserver/linux-ppc-low.cc +7abe1288ea605f4bf418c60e13a8e55e gdbserver/linux-ia64-low.cc +5395a93092b05ab2b126f084293cda1a gdbserver/mem-break.cc +81585879c62c8cf309fbe2cc0b881fff gdbserver/linux-arm-tdesc.h +752bec05406c6b954f0727947c296eb5 gdbserver/proc-service.list +19d7ee096cbaadb5fa8d1ae3de1e29c9 gdbserver/linux-s390-ipa.cc +004716f666e91ce7e357952de4fe1838 gdbserver/configure.ac +5b5a873d17e13a2d5828389354846564 gdbserver/i387-fp.cc +3d74f1163eec824d9cb0f91574176d6b gdbserver/win32-i386-low.cc +b61de05440a80eb6570c1670103fe4ed gdbserver/linux-arm-tdesc.cc +a5471673da8a28c468185367174cb120 gdbserver/regcache.h +cc9f4f0d5739ddea3dfdef97170c616f gdbserver/ax.cc +73b79140f68436f6200634841f98541d gdbserver/utils.cc +abd402ae221d91c87acc15208d9d682e gdbserver/linux-aarch64-low.cc +7c567711b125b12f750d96fa45fe3151 gdbserver/linux-aarch64-tdesc.cc +c4f37098e417d4d363623996eabb4017 gdbserver/debug.cc +c1196845f33bffbdc815172774531be6 gdbserver/linux-s390-tdesc.h +8a225c0d8823a2174783e90aa0b73303 gdbserver/linux-xtensa-low.cc +1a95c1f6cc6b006a1374983678c05099 gdbserver/linux-aarch64-ipa.cc +7fabb7bdd72f17b3d7f2e3e74d61b3bb gdbserver/tdesc.h +f25e3bdc44eef3d49e9ec22fd338ef98 gdbserver/linux-x86-tdesc.cc +d24069303637d5340b73780673e1b303 gdbserver/linux-aarch32-low.h +dae1f57b1bb51d187e9563345ff4c9eb gdbserver/linux-low.cc +e1d0b325800b18fab88cdf57246d959a gdbserver/linux-ppc-ipa.cc +66e14a25c7a47e894dea206fdad83d5b gdbserver/Makefile.in +78390a5ebea3fafcbdaeb650ddab8002 gdbserver/i387-fp.h +ad25b70bf66df9bef5e93f6b84199bbf gdbserver/symbol.cc +9ca687ff81e86df217529bdfa5d12250 gdbserver/win32-low.h +2ea7cff28a922f84e6a33e423ffe50c1 gdbserver/aclocal.m4 +bbfd9a68f514147f42784f729699802c gdbserver/.gitattributes +f7570171842ea008df31d445dd769b02 gdbserver/hostio.cc +cb081cd685c04bba1b3dbb79f29048fd gdbserver/acinclude.m4 +a3704bb76da548abb766c27b36770c74 gdbserver/linux-mips-low.cc +951f62fdbd839545f7e11dc51cfb69a2 gdbserver/inferiors.cc +a6f0239b2a1e63e11aec77222e0fbbbb gdbserver/x86-low.h +b67b100d831b9c60698dd188ee3c7199 gdbserver/linux-i386-ipa.cc +d0b35e91d2d8beaec0dd9e608e4a9cc5 gdbserver/remote-utils.cc +3363b9653ce4c78bbd268f9a94913091 gdbserver/xtensa-xtregs.cc +e8854e452d93771794bab351d0231d0d gdbserver/mem-break.h +dd5d60ab65942fb40b324a44d7f2858e gdbserver/linux-aarch32-tdesc.h +f689ed03f68e0c69877f7ed497742ff2 gdbserver/linux-aarch32-low.cc +ed5bbbd7efce214c1eee4166713bbf0f gdbserver/linux-x86-low.cc +17a3470856fd431f846ae0c693024cc5 gdbserver/linux-aarch64-tdesc.h +f0012a089afc36d5ac5aba1992bfc1de gdbserver/regcache.cc +4764b7d6869aa955f353905b88984572 gdbserver/linux-arc-low.cc +60fb6faca55f230843ed69d87f24cda4 gdbserver/netbsd-low.h +47d6e4accb544a755d3119e0195cd0f1 gdbserver/gdbthread.h +6e5f76d45d9e42120f1a3e2a7a3467f5 gdbserver/linux-aarch32-tdesc.cc +17fd8c005a1052a3464617c83419345d gdbserver/linux-m68k-low.cc +06020a5bb9f8205c32a6ac94223d122d gdbserver/tdesc.cc +9b7de3392733c828f7050de8bba0194d gdbserver/gdb_proc_service.h +133247113cf59c233f1f33664814da9e gdbserver/remote-utils.h +b3a319bca16e0ab80a280e6780c140a7 gdbserver/proc-service.cc +a6b1a3a5e391e9708dd9fa98b64f6307 gdbserver/dll.cc +9be5736dee4cc5fd8e2fe601ab5d2014 gdbserver/inferiors.h +59bc53b3106c727e9ccc5d9b1bb5152b gdbserver/linux-x86-tdesc.h +eb5c544cf2a7cbd037c531d33136d134 gdbserver/README +b2f0e17b730a30bb7bb10e402cff159f gdbserver/win32-low.cc +c1eb893a2a93b7533308ec2997941fec gdbserver/linux-tic6x-low.cc +40656ee533b9d31af67f77332567a969 gdbserver/linux-low.h +f403b7119202c5cfa91adaebc96123d3 gdbsupport/netstuff.cc +f22260e67812ff6c601a577091ee28fa gdbsupport/host-defs.h +577dae04f9724de780fdd4bddfd79123 gdbsupport/enum-flags.h +ea8e060a2d7c1d7034441211597906eb gdbsupport/refcounted-object.h +eff14ad4fbcd45da6b77f0ba0a59e569 gdbsupport/common-regcache.h +9b97a4ce866db8dd0100e1f69a1be0aa gdbsupport/filtered-iterator.h +b8db9345e92361ebd1b2a22794596e61 gdbsupport/gdb-dlfcn.cc +1b1f00f946cfc689982ea6c5b1838964 gdbsupport/gdb_binary_search.h +be79068228543821542676d26d36a588 gdbsupport/ChangeLog +0f874d30eb0b7cfc5734726d56433a5e gdbsupport/configure +f5fa5d94be5c216ff9f6b9d39c367f25 gdbsupport/gdb_splay_tree.h +a07b4556e716ce9df4c550695e40dafd gdbsupport/cleanups.h +5babe5617d115987f722806b53cb05d7 gdbsupport/hash_enum.h +3c8a82010059c9dc50c04f56b83ce429 gdbsupport/gdb_locale.h +2153fb5035c4fbd909db00dfd114bac5 gdbsupport/offset-type.h +b141f8f91c34b3a5f1da2f9930f4a7cd gdbsupport/event-loop.h +28e6d37732b6b39f90351780f493f832 gdbsupport/signals.cc +b3d1afae98f952301bd84c88162009f7 gdbsupport/xml-utils.cc +5166f89b20ca3eed2ece4fe57c1b28a4 gdbsupport/print-utils.h +8344c4eb541323026692680ef659a754 gdbsupport/rsp-low.cc +e93a90c7683a82acfba59608bcd98178 gdbsupport/filestuff.h +b2485395bdb3173c866fcc25b14716db gdbsupport/gdb_string_view.h +236d2b9db5ce7947b572bb7c6340b1c9 gdbsupport/break-common.h +18ec294d2ee599a246e00debf2f3bcfe gdbsupport/format.h +1c5ca6b290d504cb50a64759a794ade3 gdbsupport/next-iterator.h +30c58d3d4d935840ed39515c25121291 gdbsupport/warning.m4 +535c9ce9ad7509a96996d89ad58f0185 gdbsupport/symbol.h +3a5bf25f95ea5556c5b5a811fb179d33 gdbsupport/config.in +b0ed866be9c96d51378d1e474001c415 gdbsupport/block-signals.h +74f7db5037c9cd8ee9677ca1be291ded gdbsupport/gdb_string_view.tcc +8c70dc641a9fea757625445905ff68b7 gdbsupport/common-exceptions.cc +1a331781238364d25768d0ae3de3cc63 gdbsupport/Makefile.am +59767b90dbc4638444aafe60fca75f15 gdbsupport/gdb_vecs.h +a4aa9a3f85591b6608bbe7a85f394cc8 gdbsupport/common-regcache.cc +ecab4b370ad6b69acfd9527f5698233b gdbsupport/function-view.h +ba12be0f82b3de57ae28c6d9464004bd gdbsupport/run-time-clock.h +e6d28c8597d350609fc71634c2c8951a gdbsupport/errors.cc +0e4cec0b45f5d4e8a9b5ec60dc9792de gdbsupport/agent.h +87233c0b542175eae3175c0ee1ef0043 gdbsupport/common-gdbthread.h +7f440c31570c0fcdf6097c045d6c6e2f gdbsupport/thread-pool.h +1516e67afa4f560d91de5bec13bfe80f gdbsupport/.dir-locals.el +b5d966318a2379db877ae59d18bd05a0 gdbsupport/environ.cc +28675270ca88904041673630795f24fe gdbsupport/gdb_optional.h +7279d37126cd8fb4d8a250c8d2b115d2 gdbsupport/event-loop.cc +c63f1aafabfb418edd8f43ab78275559 gdbsupport/gdb_signals.h +920833c399c908d4dfb6d2907fdde5ce gdbsupport/configure.ac +0b7e93305e0cae72f1e92d75ac4c8c2b gdbsupport/selftest.m4 +b9441930197de18fe5d32ede4ffec427 gdbsupport/new-op.cc +a0b4b88f3da403cf6b6ac5a35f4985bb gdbsupport/print-utils.cc +0820753cb78783fd05d1a4d406b7b356 gdbsupport/default-init-alloc.h +e5748be347b8b62abd5fcd63b9575a25 gdbsupport/valid-expr.h +8fc25d591ae9c5e2dd88eebe96f20f71 gdbsupport/gdb_assert.h +207cc6e13da7313bd7e05917699f833d gdbsupport/pathstuff.cc +060be3334f48dee0caffc7c97033aacc gdbsupport/common-debug.cc +416aaf90d8397fe5043c59bb660aa80d gdbsupport/job-control.h +855c7d80ed58d4ddd511bd3c3e0f411f gdbsupport/safe-iterator.h +c6a28bbd972339678d2919b836099df8 gdbsupport/def-vector.h +a5ca29e7490d68c24de52295c9af22d9 gdbsupport/scoped_fd.h +e2996ae8a49b94dfa2d5820e78728fee gdbsupport/common-inferior.h +cc670310fbdf617e4409b34eaf60f210 gdbsupport/rsp-low.h +a7662edc621a26e39043d416c2027ad7 gdbsupport/tdesc.h +bbd0aa87834240909fa7d4fa6dd7f6a1 gdbsupport/eintr.h +25fb0248877e59b7d80dc5ec0c7e8540 gdbsupport/buffer.cc +88843a4701fa9645062234ac0d256ecd gdbsupport/gdb_tilde_expand.cc +d0ac2140487f69dac2faabecb3f6b8d2 gdbsupport/netstuff.h +efd2cbc3599bdfcf2bbab86840e2bf31 gdbsupport/buffer.h +e6c88f39671118c4ddec62b5a4a00f4c gdbsupport/gdb_wait.h +1ad94c8696983ed9d5ab7fefbb6ad94a gdbsupport/common-exceptions.h +24d66d96b9729332a66f52dc11adb37a gdbsupport/version.h +cd19c82b0786e7413ec21fcefaf0a13a gdbsupport/gdb_tilde_expand.h +57137ff0e1d41d91ffcb0cecb9c8f49b gdbsupport/run-time-clock.cc +61e5da14a567ff2b2342e1ff8ec4acba gdbsupport/common-utils.cc +e5de8bf06d229c2cab871cd3eecdeb92 gdbsupport/preprocessor.h +c52f5276951ee0fe9e26830face4e7df gdbsupport/thread-pool.cc +fd2e752ae69d4692dc1bc3f17982d055 gdbsupport/gdb_setjmp.h +93d710fcbff7c76d486605c3139c7b1c gdbsupport/ax.def +1064843ec2408792deef7eea16b929b5 gdbsupport/cleanups.cc +d6c96e9d8103a4b8c0015aa6b589f84b gdbsupport/signals-state-save-restore.h +4f4e6541c4e854001b6a14870ab6d249 gdbsupport/array-view.h +dabd0268836f06084c13aa5a27915ef4 gdbsupport/gdb_unique_ptr.h +724e7193ec5ce95339e3f7a660dd65a3 gdbsupport/Makefile.in +384e8334dcbd549a3ab51a127dded43e gdbsupport/fileio.cc +81cf303ab5921f40f83854b06eaa01af gdbsupport/scoped_mmap.cc +520176fbd0ac80df15ef2c71eefca41e gdbsupport/common-defs.h +d265b320cf67750b46345f1bbd14582b gdbsupport/format.cc +c25fd2efe95cb7812e6d1f3e296cca91 gdbsupport/gdb_wait.cc +7fab14ff13582eafdd2218790e609008 gdbsupport/scoped_restore.h +f5da42cabf517c2cf8fc4b3795cab5c0 gdbsupport/gdb_vecs.cc +3b1fe893d0a379135247bf904471c241 gdbsupport/aclocal.m4 +38bc9c55dea96c1715d92eb8197dd8fe gdbsupport/common-inferior.cc +423254d5caa104ae2703a67b3f02ac30 gdbsupport/forward-scope-exit.h +bbfd9a68f514147f42784f729699802c gdbsupport/.gitattributes +8881fd30f4408bbbb2c1adbd4787fc36 gdbsupport/gdb-safe-ctype.h +892473142600c6c60b5bdf62297e3a26 gdbsupport/agent.cc +266f28ba46e07e5ca0ebc18ea02e5d40 gdbsupport/x86-xstate.h +d71d7f7d08708a86596bf030d61c7d4d gdbsupport/acinclude.m4 +476fbb60ff7ea5e8f25fdbf3c69ffde6 gdbsupport/btrace-common.cc +01369df0062f15b6d39a0ddd2f6b3dc3 gdbsupport/filestuff.cc +936f3440f230585b98e6592d6b63bbb2 gdbsupport/gdb-sigmask.h +8037e3ed3c350b07d287656c4be554c1 gdbsupport/ptid.h +a8eef9ad5b5f44131feeab92831c7aee gdbsupport/pathstuff.h +d5e6e4f48ff1ed4e64a8dca4fd13701a gdbsupport/errors.h +2bcfcfcb230d77129c0cc4d2e070e053 gdbsupport/byte-vector.h +35929f35eed6b919acff6540479e971b gdbsupport/gdb_sys_time.h +91d92f8666425e7f827ac4f7884b6b44 gdbsupport/scoped_mmap.h +2d284117881a015368d032deeea4c9e6 gdbsupport/observable.h +f7fd6614274bdc945f3ce9f5aa0d4cb4 gdbsupport/poison.h +79727322fddbf8c837a1dc0a406c222d gdbsupport/gdb_ref_ptr.h +c7cc6786466f21e5e7492bd0d4dccf38 gdbsupport/scope-exit.h +fced733b644801d7b237bbbee0cad506 gdbsupport/common.m4 +a89327f4088435c722d3f00a61a5e6ba gdbsupport/safe-strerror.cc +81cc7446d1548cf4957448ab71f0d037 gdbsupport/parallel-for.h +d7f08d621a626f8ca4a8c32d7f88b44d gdbsupport/btrace-common.h +ce56a6f347575577b87824804051f654 gdbsupport/selftest.h +330f8246793c9d699a9f0b4862fc13b3 gdbsupport/fileio.h +ec29562583f079eff6cfa2548d5580c0 gdbsupport/signals-state-save-restore.cc +128ca72f9177c029e929d77f832e3dec gdbsupport/gdb_select.h +d2ee280156a18362597f92a8fd43f6fc gdbsupport/traits.h +854eadd1dd639fcb7a77d7d0b6e92b54 gdbsupport/common-debug.h +eefe63be91ebb1d1f934b7a2aec4524a gdbsupport/xml-utils.h +4672f11e8693ce789cc1b4cad2908cee gdbsupport/tdesc.cc +bb6b46193cfb965a24f5431c397d9570 gdbsupport/gdb_proc_service.h +4195af4e9f61e2251aac63704d519f5b gdbsupport/check-defines.el +bcda2ccd5b760386b3dd98f7378f1874 gdbsupport/underlying.h +f62ca985afd75719139d8a62cc01617f gdbsupport/job-control.cc +b7ba882f3d88f87744c7823758088bcd gdbsupport/gdb-dlfcn.h +ae1de6ef033a1a68cbe891956cd1f37a gdbsupport/create-version.sh +6698422b560a01a00967a3f07d8329d4 gdbsupport/ptid.cc +8798e95d6ef98bd4e6720d8b81377eac gdbsupport/alt-stack.h +aab196595d5c354c73daa2f0ba04d56a gdbsupport/common-types.h +6c5d176928ac4cc3df628f9907dcb269 gdbsupport/README +f189ac5e47d4a1f673713045766a235c gdbsupport/common-utils.h +69825fad42bc997248f70ce8f6d917fa gdbsupport/selftest.cc +ea706dfc1db7b5acefaf763f5ead9dbb gdbsupport/environ.h +70eb8deda215ce6dab136ee0f07c5b8d gdbsupport/gdb_unlinker.h +5be162d4520885a8d866e3fa3938e419 gnulib/import/lc-charset-dispatch.h +d0d7418a6c77344d7817a37de04f93ac gnulib/import/at-func.c +c935ba39664d259c65d99b7a168f792e gnulib/import/stdlib.in.h +86692d56f248a02a6df45e35c65f370b gnulib/import/openat-die.c +eab5846850a8d2f7b8c5d25f402d4fa2 gnulib/import/mbrtowc-impl.h +fa8e5e077adad5283250409713162fe3 gnulib/import/openat-priv.h +afb63628e20dddd3d5a261cb5aec9ae3 gnulib/import/fdopendir.c +ce6da22aa6ee599411a12c8f80c3b426 gnulib/import/fnmatch.c +d5458bf61d3b20b8b34550620ea249be gnulib/import/errno.in.h +cd86437ab27c72be1d96631921439474 gnulib/import/unistd.in.h +96a5dcc3a9ae623a5d31c0ee1858ef8d gnulib/import/mbtowc-lock.h +fdf29429fca2a2d746f9bbf1e8fdf7d5 gnulib/import/memrchr.c +0dbe3c93222ec655b3a77d5f2956560c gnulib/import/windows-once.c +eb8cccab748090ac74ddf8e6cd876695 gnulib/import/exitfail.h +2a2b703b2dfeab6ffe7572c9fe78fd1e gnulib/import/float.c +34d2e7fd582a32f6aa915eca48afa513 gnulib/import/fstatat.c +b6f8f2fd6127a60a1f1536d6ac57f593 gnulib/import/gettext.h +30d2c25a5e19b4730b9d660e1d5053c4 gnulib/import/float+.h +5d1d9ab225b3f980bc7d4dd6e8a60889 gnulib/import/getprogname.c +64c8eafdbe43dd54be8def2a6c5ea358 gnulib/import/ctype.in.h +7e5a21a8e9c39fe3dadcdec9c379b3d3 gnulib/import/canonicalize-lgpl.c +2ad767c695e5532919d8660f561e718b gnulib/import/strstr.c +2ce41898c38fb6f4b9d87b76f455664e gnulib/import/cloexec.c +14c5a1b2cfaba020856b9754fcfb221e gnulib/import/arpa_inet.in.h +c683a50c779a035b115c1e29cd5428d0 gnulib/import/openat-proc.c +04ba04b0febcd8120e2d94680148bb5e gnulib/import/fnmatch.in.h +1e73a17507569d2ebfc3cd24b739d4a0 gnulib/import/setlocale-lock.c +4c2175c641094dfbccba323b07ada419 gnulib/import/save-cwd.h +2832bb395f11a798e27770d59858160e gnulib/import/glthread/lock.c +270be4cb5186fde7e666e4deead05edc gnulib/import/glthread/lock.h +58034ff7c82d0313820c5b25a075d375 gnulib/import/glthread/threadlib.c +5af542fde236d1666d26222830d97b04 gnulib/import/same-inode.h +787d6013c41d09bcb1bc35f1863072e6 gnulib/import/glob.c +6b86d52d05ba3613ef452e54d1267186 gnulib/import/mbsrtowcs-impl.h +0c22c0b3282a47b0929a066e41aaf8d8 gnulib/import/strdup.c +ce565caf826854cd78dcdd3dfacbb928 gnulib/import/unistd.c +c74aefe2bb0d922bb5e7edfd61a801d6 gnulib/import/attribute.h +d44833a1a42ace537a02bbf3b5f4f91a gnulib/import/alloca.in.h +5b90f0ab137d8b4585dc9a9ee752cb69 gnulib/import/mkostemp.c +37d4f96d9e9ded8e5ce4a6dc3bbdf87c gnulib/import/stdio.in.h +f2ca9467355da740f544b4b3dd1e61f6 gnulib/import/isnand-nolibm.h +2d138ecd4af5f46f820a4f63784523c6 gnulib/import/libc-config.h +3a6fe32334393f89b38e09e636524040 gnulib/import/btowc.c +347147202c8362c7656dab1371a9f3ba gnulib/import/warn-on-use.h +94f2fb6f76081e0d6af486fa09fc576c gnulib/import/limits.in.h +f9795b8c1c5897c0e4e39626f21325e8 gnulib/import/wctype.in.h +7f643484103b9cc2a545876f32def151 gnulib/import/getlogin_r.c +ad8e8cf8b0ef9ee2f9f70b0322cad9c3 gnulib/import/glob_internal.h +60e87118c4bded933be850069c5bde14 gnulib/import/malloca.h +d7bfe7d989b3b90c61688c03b38b7ca5 gnulib/import/mbsinit.c +c007a602b04de20e715a7416bb91dc8f gnulib/import/inet_ntop.c +59b9e1df6c87f41fe6f3052901130ca6 gnulib/import/strtok_r.c +5462739fb398d38a112bc0f069e2eb09 gnulib/import/unistd--.h +fdc46bda125c674e8ceab841c0ab2170 gnulib/import/Makefile.am +498b5181ff53b388f1552ae47995fff8 gnulib/import/localtime-buffer.c +524e978b841b69ec924c7ad1988ddf2a gnulib/import/chdir-long.c +05802fea2d7b6f4edb6b765c23edd0b1 gnulib/import/lc-charset-dispatch.c +65792a038af8efbd7e7afac0d7a42e0f gnulib/import/mbsrtowcs.c +6361ccd51e2586c9d68ab5e3889305b2 gnulib/import/glob.in.h +b9cd6126c328a650d5738fff462c2344 gnulib/import/error.h +f1d3f07c7fdb0da6bac7cc7702e4342c gnulib/import/localcharset.h +fd4fec7f03f61c6bc10e267c85bd52a3 gnulib/import/tempname.h +0d850aa135b340dfe264aa9a0327cf5a gnulib/import/dup-safer-flag.c +567ca4d0dc5a53e93e110635f4289e58 gnulib/import/windows-initguard.h +ad4fb2d68b84c09acd977d97bf61438c gnulib/import/filename.h +52e3b27f337dd6bee81231bbde3d2244 gnulib/import/wmemchr-impl.h +5a78cf4c60d30befd05a6f8d2ac28a51 gnulib/import/mbtowc-impl.h +af16609d0a38aa7f2babfe122ee8979f gnulib/import/count-one-bits.h +84da594d18a6492875978aac70f5808a gnulib/import/filenamecat-lgpl.c +f893cd1eccb45243b1ff8be8d4877be8 gnulib/import/windows-mutex.c +6141126d1fc9332edd2b9a210ff9f3dc gnulib/import/localcharset.c +45a1a772b253d9809d51189ada22e592 gnulib/import/fd-hook.c +f4fb82bf20a82d2ad89cfc46166a40a4 gnulib/import/stdalign.in.h +96ba6ac45ec5e9d1089864defc4be8cb gnulib/import/frexp.c +858c59b227996355bd71094a2ec4e827 gnulib/import/mbrtowc-impl-utf8.h +908fc1109f1d7e42a03c480a44307764 gnulib/import/dirname-lgpl.c +b23ba7e833349013f37e14bfb17f348a gnulib/import/isnanl.c +9a9a97673cc75e73554dd69e934cd646 gnulib/import/windows-once.h dd1f2c119d494602753afd4bc28ee06c gnulib/import/wctype-h.c -1a9ccbca2f1431d6da07ebdc72864537 gnulib/import/save-cwd.h -daac1e945d7c2fb39b588b34852310cd gnulib/import/ref-del.sin -ac9e0a7095e71a44c703a5faa466351e gnulib/import/hard-locale.c -7eeabe7640a7809822b5bbe7bc02ba91 gnulib/import/rawmemchr.valgrind -9042d9a181733de05f965f9f0b0275f8 gnulib/import/stdbool.in.h -ab69f6df5cd8d130602efacda95cac6b gnulib/import/rawmemchr.c -0645f370358c4559f6fe74555581535c gnulib/import/close.c -e52ddad6ffba2ad9414ac7bb5ffca75a gnulib/import/strerror-override.c -cf0759e0918601de39f9979cac53e141 gnulib/import/rmdir.c -ce979e429a781edfa1f37ac092f2b09e gnulib/import/fd-hook.h -4ff9744a8fb0d845d12d69c4fc4d09cd gnulib/import/isnand.c -2eeb3e4f9cb15b608fb9bd9efcd7122e gnulib/import/assure.h -e2c48b95def8965575213bd58c5e5673 gnulib/import/getdtablesize.c -f01cda1aa6694ee4f70bf8ddb1b216e4 gnulib/import/fcntl.c -7bde6b90768c07eca774586b1b3e5cde gnulib/import/getprogname.h -c1df30b8e116310fb6a5a754acd17706 gnulib/import/m4/stdio_h.m4 -f468c22d7c0b4db63b6cff9a14659492 gnulib/import/m4/readlink.m4 -0a69313b7e648976057b3f6271ab2263 gnulib/import/m4/flexmember.m4 -0642a4989b01e00052fddd053a45695e gnulib/import/m4/memrchr.m4 -900729b31616687830e9be5ce61b1b94 gnulib/import/m4/fcntl.m4 -44531b9f719b4572e7a5cf482e5bccb1 gnulib/import/m4/localcharset.m4 -4bb07b6f1bb9aaca526bc68963cccb5c gnulib/import/m4/strstr.m4 -7cf1ff66cc42dd1edc6b7d307f75f176 gnulib/import/m4/sys_uio_h.m4 -b6d562b723773fa1c9a16a3f5f691680 gnulib/import/m4/wchar_t.m4 -ae24aff8bb432634230ae052a5d917ff gnulib/import/m4/strchrnul.m4 -d75b4149ba72cb5e64632de009a40b0a gnulib/import/m4/d-ino.m4 -7fdf06ebe0a44c64613e54c9c04c1a43 gnulib/import/m4/unistd-safer.m4 -1e20192199dc2f1fd9ecf52862eb682a gnulib/import/m4/strerror_r.m4 -135e80ce68eb32130640639b14a75a11 gnulib/import/m4/chdir-long.m4 -308ea249d5550e3382631280eeb7266b gnulib/import/m4/extern-inline.m4 -1148b6e9eb369d74c538d5fcad97efb9 gnulib/import/m4/stdlib_h.m4 -a466e6c36257b10a059e45c28f3b15d9 gnulib/import/m4/gnulib-cache.m4 -d1fbae44088c563b30b86f6e6fe6128a gnulib/import/m4/alloca.m4 -7c5056b258e44cc99696bd8391b0ef0d gnulib/import/m4/lock.m4 -15cb28a4f2b0489b543504588a5e2906 gnulib/import/m4/sys_time_h.m4 -be2a9984fc055cfe8844f8f0e96b897f gnulib/import/m4/lstat.m4 -053542a2ca4acd60603378c03b9433db gnulib/import/m4/frexp.m4 -c30262529f4a822e5b0cca6a1d58cc50 gnulib/import/m4/exponentd.m4 -b870ad331b9499f5cdf6cbb765b54548 gnulib/import/m4/dup.m4 -b08762ef5be6bf97bd818c9b74629bf8 gnulib/import/m4/fpieee.m4 -beb4613a1145f0bf2da48587665683be gnulib/import/m4/configmake.m4 -3c25fc5054597d0f88057f21e2815b70 gnulib/import/m4/glibc21.m4 -7365ab0b7695bacd8e46e8d8ee8f7959 gnulib/import/m4/signal_h.m4 -faf050ca7bdb3093e5d94497711656ec gnulib/import/m4/pathmax.m4 -f3e661195805aa9297b135361eb88b29 gnulib/import/m4/close.m4 -513ba48373e5262d73df4dd2f9890471 gnulib/import/m4/glob.m4 -bdf4a52b408ba6c22c0645a2a48a211b gnulib/import/m4/frexpl.m4 -661e86f7253a6d4089b805bf046dea92 gnulib/import/m4/mbsrtowcs.m4 -0c1eb1a8750c84ebd9fba3d454a5c54c gnulib/import/m4/mode_t.m4 -3d7e16d512964255854db1ba2cb70e55 gnulib/import/m4/mbstate_t.m4 -de77cdc5745545ccc6e5ca095dfa329a gnulib/import/m4/fchdir.m4 -96aca093486cccc4f72fa3ef1e22c070 gnulib/import/m4/netinet_in_h.m4 -b1ee09676e562c948c905e781ca12530 gnulib/import/m4/math_h.m4 -c5d526869e4bdf5ee8ca1e5ecab4593e gnulib/import/m4/wchar_h.m4 -1ad9725324f89fe13537d003f406e674 gnulib/import/m4/gnulib-common.m4 -7584a85be8746b5912072e494f3707bf gnulib/import/m4/time_h.m4 -ba330b6170539c913439bb7c0687b119 gnulib/import/m4/nocrash.m4 -dc73ea8ca3764b5e6b24b170df964879 gnulib/import/m4/fdopendir.m4 -b59a45ab74bfc44ca8743b147db163d9 gnulib/import/m4/locale-fr.m4 -2d7304478efd29b98f632d4a2d891417 gnulib/import/m4/rmdir.m4 -358a9fe340a0fd24b4458be4b9bcf852 gnulib/import/m4/locale-ja.m4 -b55945d686d97dbe03f9106fb216e51b gnulib/import/m4/socklen.m4 -ecb6fb41e3ef19db4967efe742991bf5 gnulib/import/m4/strtok_r.m4 -f59829d13c03c8c1132686ba6dddca8e gnulib/import/m4/msvc-inval.m4 -3272c133ed6d89896dc8024bbc42b7eb gnulib/import/m4/unistd_h.m4 -0b6d15dcb9bc7f8ed669f476033adc02 gnulib/import/m4/longlong.m4 -d5bfc760545aeef8e41ad3cbb25c7644 gnulib/import/m4/open.m4 -00826ede0e3c000e04682e1f7dcc5fce gnulib/import/m4/wctype_h.m4 -8aab16583abb3ff8543fee178b77f7ef gnulib/import/m4/tempname.m4 -5e3bc820b0ce9ac213f418768a1443f1 gnulib/import/m4/rawmemchr.m4 -aec3a802919e7bbafeb1260f6ea88c1c gnulib/import/m4/lib-link.m4 -332c6c074d2342b32a0212a5c84b9ca5 gnulib/import/m4/mbsinit.m4 -ae31a77af40929cbfda51299d7d95595 gnulib/import/m4/fcntl_h.m4 -81884105f1839ef6cebef995283ac5d4 gnulib/import/m4/multiarch.m4 -8b2c2a2ed50f86c4db39290443d61bf7 gnulib/import/m4/time_r.m4 -78113de5440a6e8c5f79cbbb4a7e687d gnulib/import/m4/ssize_t.m4 -84ce4194f7521bd115febee6a632f8fc gnulib/import/m4/isnand.m4 -798ebdaa936fe374a373a8422b958ef2 gnulib/import/m4/extensions.m4 -fed1bc663f100dfafaf5edd0f578e095 gnulib/import/m4/sys_stat_h.m4 -5adaddf7621ea58b416c859a707b22bf gnulib/import/m4/mkdtemp.m4 -9d0cdfaccbbeb24cd5eb1c969f9a15dc gnulib/import/m4/dirfd.m4 -eca7f4e30ef1087cda72acc5279e8b51 gnulib/import/m4/sys_socket_h.m4 -1752bb7ebffacf32b01e744df8376dcf gnulib/import/m4/getcwd-abort-bug.m4 -2443c5b052ef5e832ff3b45ee27d6aed gnulib/import/m4/malloc.m4 -b0edd9fee71a3b8e82647ce9458e2d03 gnulib/import/m4/sockpfaf.m4 -ceb3ce8eac412f608fa172b0ca473f22 gnulib/import/m4/mmap-anon.m4 -844905dee3381bd917ee7949d4f66736 gnulib/import/m4/gettimeofday.m4 -bf3125da7ed4f91c9343df8eca252e2d gnulib/import/m4/fnmatch.m4 -d9fdbee92da6936a6f03ebb451b3e9e9 gnulib/import/m4/readdir.m4 -d2626471d2ec9c13282efa0c13b40cb4 gnulib/import/m4/fstatat.m4 -1a9714c95709275b148f859914a24fc2 gnulib/import/m4/stdalign.m4 -b7cad800df498737966a3f160432fac0 gnulib/import/m4/include_next.m4 -13e3572f9b6c56f96a53ef7d8220b251 gnulib/import/m4/getdtablesize.m4 -81bee3c19c0d14fad981216cc244c17c gnulib/import/m4/canonicalize.m4 -33e5143a9e30a00defdbe4dc76e02d3e gnulib/import/m4/mkostemp.m4 -2398336af45fbab71d9dc088648f1d33 gnulib/import/m4/fstat.m4 -7cc85e6e5f6fe513c6b5fcb283739ac8 gnulib/import/m4/inttypes.m4 -10a309d2588c00235156519e522c12d3 gnulib/import/m4/exponentl.m4 -16b096286eac2644dafd850b0cc5fa8c gnulib/import/m4/locale-zh.m4 -6c109de510f5f8277c65d5f6fcade63d gnulib/import/m4/isnanl.m4 -bc32620a2c5171274f3d6c76dadfb8ba gnulib/import/m4/stdint.m4 -0b88252de1b4f3e6346e2185f6122647 gnulib/import/m4/largefile.m4 -54633b089e3cf4952b12238a2df1f91b gnulib/import/m4/secure_getenv.m4 -260fc78e0f8c73d375df8d127a28f323 gnulib/import/m4/stdbool.m4 -96e683beae420cc1c8c891264734bea3 gnulib/import/m4/wint_t.m4 -3e663d41da88c7d3cc6c9a06ddabc13c gnulib/import/m4/errno_h.m4 -0cffa8c5e37e9d027edb74185521d877 gnulib/import/m4/fcntl-o.m4 -aea4a6dec3dc2e55e068c9c03db277bc gnulib/import/m4/rename.m4 -667accfc31d0bd3efd23efdccf69f5f3 gnulib/import/m4/lib-prefix.m4 -b952e527d976a6caf0cbedfb4f8c3ebb gnulib/import/m4/gnulib-comp.m4 -dd540f43b95867ce9c190c0f25010f3a gnulib/import/m4/inet_ntop.m4 -f56eed0a1b53a3eefbbf10006802d5d1 gnulib/import/m4/mbrtowc.m4 -7db871be53b5d7972ebef0ffd20c739a gnulib/import/m4/threadlib.m4 -ac8542ecf1de857b71cb11be65c6bd18 gnulib/import/m4/dirname.m4 -07b6485b5a80e254d2b846b9ec68ded8 gnulib/import/m4/lib-ld.m4 -378c7bf96f74eb580ced60d40da78475 gnulib/import/m4/getcwd.m4 -69bf71cc158e53d7c4ade4a78c6623e8 gnulib/import/m4/strerror.m4 -ee6f3ba1af4628dcbf3f447b35066b3a gnulib/import/m4/memmem.m4 -40be24f5e4e7ab8bf63f9771bdd45c6d gnulib/import/m4/00gnulib.m4 -fba32c6c6262307077ffb2cd762bd041 gnulib/import/m4/getprogname.m4 -f53a8b427746ab25f1d8aefe17fbfb50 gnulib/import/m4/strdup.m4 -9d1f896dabb42379c69affe2f3154d5e gnulib/import/m4/stat.m4 -8a0516f5a2d6d19656b371116de611a0 gnulib/import/m4/openat.m4 -890a3049622fcf893fea64c61130eedc gnulib/import/m4/dirent_h.m4 -69b2da2d3a37808ca2e02cc6179212a4 gnulib/import/m4/off_t.m4 -38e165634f9a8d2df55b5707c1e29ff2 gnulib/import/m4/hard-locale.m4 -729ae476cc1267bb23d56266b9010fcd gnulib/import/m4/getlogin_r.m4 -eab6e51c5bc9bdecd18e5bd062c8f2a8 gnulib/import/m4/float_h.m4 -aa053bfb1d4984dae7f04a28b93a30db gnulib/import/m4/error.m4 -a4d6466e13a3057760ce8097e0cb42ff gnulib/import/m4/getcwd-path-max.m4 -317492c97965752b33419d042c21965c gnulib/import/m4/environ.m4 -3f735823cdc25810784bea2fda84445f gnulib/import/m4/setenv.m4 -cac8201b0ba3b84e923e809e18203778 gnulib/import/m4/inttypes-pri.m4 -a32fef5958dca28028b8761b14fe6df9 gnulib/import/m4/gnulib-tool.m4 -3cbc6c95b0625b1c77fdab93f4bf7cb4 gnulib/import/m4/sys_types_h.m4 -9b3a19bb712d27e2472eabf56457de7e gnulib/import/m4/stddef_h.m4 -1792355cc8f65a5b9fe0671a7e2518ee gnulib/import/m4/msvc-nothrow.m4 -f5b1585cddfa4b3176d1d90a264c73ad gnulib/import/m4/limits-h.m4 -f199f67d5ab359e85b8e0238fff4e976 gnulib/import/m4/d-type.m4 -4e888ab2578bc219ae2290a9ce5be0ca gnulib/import/m4/realloc.m4 -e24459aa4ade32d3db2847944f9a2268 gnulib/import/m4/double-slash-root.m4 -51ed83a1d7d6548b1d32d1dc0067bf7c gnulib/import/m4/eealloc.m4 -54dbb9372f71531667058e6cc94b0406 gnulib/import/m4/malloca.m4 -3b63c2ba7f13988a94592ab4663d4522 gnulib/import/m4/closedir.m4 -6e620783945311041ae584f8c6b36288 gnulib/import/m4/string_h.m4 -294a2e020e5a23fde52d776b5d557290 gnulib/import/m4/warn-on-use.m4 -af401f5d730b4d90737e2dcbeac30b10 gnulib/import/m4/onceonly.m4 -a75980da44e6057c33eb3113a355968c gnulib/import/m4/rewinddir.m4 -e5a9078f618b1f17bb0e332890107205 gnulib/import/m4/mkdir.m4 -6e5e548294a2700a0c4f0b4ecb37ed63 gnulib/import/m4/dup2.m4 -c0c75172f42af8dc81ba8f77814b4aa5 gnulib/import/m4/absolute-header.m4 -7efc6ddaa5b36d7eedbc503fdc476cf9 gnulib/import/m4/opendir.m4 -f7289f931e214f6b53d5236125d5393c gnulib/import/m4/arpa_inet_h.m4 -84cf685f519b95e5d5227b9d8c600ba9 gnulib/import/m4/save-cwd.m4 -fb1971c229fdeddeeae6abd72709c071 gnulib/import/m4/codeset.m4 -5ae97a134d9ca6a161e776ab6b064779 gnulib/import/m4/mempcpy.m4 -75323bceb9792027373742f1b0dddee6 gnulib/import/m4/memchr.m4 -cc7829fb333fb09b407cd5e2892450cd gnulib/import/m4/filenamecat.m4 -727beda78bb22ef06cd7efec7b8a3652 gnulib/import/str-two-way.h -4eb29d9617668a937f618d5450388aec gnulib/import/open.c -5b896bc830d568b444ab08bce7dd94f7 gnulib/import/strerror-override.h -4b8d2d5d82097c0ba0e5d14e36e06ecd gnulib/import/gettext.h -6965dd02ea27ad51bc2d2658b49d6b56 gnulib/import/sys_time.in.h -9d4f360fac65d89172c2462ed5d111ba gnulib/import/glob.in.h -1252755afb51f6da2026654534446f1e gnulib/import/getlogin_r.c -b13efa9ffc70f5692978bd2b5c189b6d gnulib/import/stat.c -b0f954b40497b84615faf9483bad4556 gnulib/import/strdup.c -742df2c35947af3f9e33c30af88b9bb5 gnulib/import/fnmatch.in.h -c8b62a8b088f5549f60660250b4d3676 gnulib/import/mbsinit.c -3f028b79b3cb30cf04f174f06c7adbc5 gnulib/import/mkostemp.c -ee2c7c42f943d233eef7250bb7655c0c gnulib/import/at-func.c -2e11259966aa3c8bcd39902d09996b7d gnulib/import/unistd-safer.h -3df15df12b015d7ff5c4d0ef3be5fccb gnulib/import/pipe-safer.c -b0b5e4290ee701fd98fe97da70541cca gnulib/import/memchr.c -4a6fd52abe7760c33f5453778c67e921 gnulib/import/exitfail.c -6111a7b56a5e4cef98e93db80c093e82 gnulib/import/dirent.in.h -9056530feb36c1286170c9220f84e678 gnulib/import/strerror_r.c -724655479f61a366df0089fdf95a293b gnulib/import/strtok_r.c -a80bdc4b90e09496a70a9c94c75f5ef3 gnulib/import/string.in.h -27534336f23d9fc0162c77fb1f40024c gnulib/import/fchdir.c -8bd784ecbd74b6c89e86789884c088ba gnulib/import/fdopendir.c -a4141c0e07b8594e25d09145c679b6ce gnulib/import/dup2.c -855f540edd4e412caa42b2d89b6252a3 gnulib/import/openat-die.c -d0e91be8ff6769f319f2a198c04e6960 gnulib/import/rewinddir.c -6772f9233779dc66aa81db77767a5987 gnulib/import/localcharset.h -f7665965a9e3509fcc824946d3a7da58 gnulib/import/fnmatch.c -6c22a2c007c6fba48298eabeb157956b gnulib/import/filename.h -b5a5e138f3239558a66ab8ac3785a353 gnulib/import/stdalign.in.h -fb0c776de7513cc5597c18eb44ca8ea7 gnulib/import/openat-priv.h -7d8626f86bb6cffc7440e058449030db gnulib/import/verify.h -d05c0e415291b909107c5719f862cd10 gnulib/import/itold.c -0f58b68cade5d12887aab187546e7279 gnulib/import/inet_ntop.c -2ff16aad501316e63f0b85cfddfbc95b gnulib/import/strchrnul.c -b372652ec42a586101ae09aefe90dec3 gnulib/import/stdio.in.h -31ce4705bef8b5927ec869e32578ff6c gnulib/import/malloc.c -148cdfaea630cc693ae92ed681d3ed82 gnulib/import/error.h -b6e5a32fbe330e2d5ad3a8c888e12079 gnulib/import/error.c -699d064ce2e6a221cbf0e2a8da7d95ce gnulib/import/dirfd.c -315be7f511121065f502d868cdc2eff6 gnulib/import/openat-proc.c -2ac8512d774af644f1de9ac46c39ac06 gnulib/import/getcwd-lgpl.c -8724fcd4f64a95fca678f5daa70efebd gnulib/import/unsetenv.c -17a603a5ee428186d103b0b4d7dd011b gnulib/import/fcntl.in.h -b7f661874bacfa66a33c7bf784ffdc8e gnulib/import/memmem.c -b5afee178fd87b7c704ffcd035e416f1 gnulib/import/config.charset -d4972b541587c91ca107b5538c1071fc gnulib/import/localcharset.c -469f8a579b9239ed8098c49c5511b67d gnulib/import/fpucw.h -2d2b83bfc21867fb3315bec49f58aa3b gnulib/import/mbsrtowcs-impl.h -ef66e062f6f0c9c86e5a78611b4277ed gnulib/import/strchrnul.valgrind -2c3f9011ecc492007225cae7b8bcd3a5 gnulib/import/chdir-long.h -691f64c2b6b6166bb570baddce45cc79 gnulib/import/errno.in.h -62e7238d26f56aa0c3126d0c1140da95 gnulib/import/sys_types.in.h -9f02c0d0cbd22de7920a9ee8f140b40d gnulib/import/time_r.c -0aeff67f939d2ff5ee2ce953863e8f1b gnulib/import/frexp.c -2b82c91c0aabb9d085d13905522e0b01 gnulib/import/dirname.h -ffa89c2d84116b05c5e3436967791440 gnulib/import/readdir.c -149055fc0aaa8d4adacdcb610f07f88d gnulib/import/stripslash.c -8894d848210f8842976192ba86c2647b gnulib/import/fstat.c -c28f6b23bd66a3b2d60bfa6e58013816 gnulib/import/mbrtowc.c -39e03b86aafd5adc262177a7aa099c62 gnulib/import/netinet_in.in.h -9f2f8163fc50f2feffe3174287e2f318 gnulib/import/fnmatch_loop.c -eb32661a03cca16a126c855fcada334c gnulib/import/mkdir.c -4fc9f3da43856c846e5e75ec936ea411 gnulib/import/strnlen1.c -312e2794f6e4ae10de3e8b4bce2bd425 gnulib/import/cloexec.c -f6cd10390032401630d230e80c74f06a gnulib/import/openat.c -eb48d94e492a40ab051d07d876743ab5 gnulib/import/float+.h -a022cc28f94e398ee7c5c973ac928f37 gnulib/import/memrchr.c -0c9f0db4c63473c870443f951ab3c403 gnulib/import/malloca.c -4944033525be9c2990e631cef3d52520 gnulib/import/dirent-private.h -bc48b66660f4b5bdaf4d9f27cbd17aa0 gnulib/import/closedir.c -3b8bfe7856bfd6fe45863def4b5b571f gnulib/import/flexmember.h -eba504acf9815f6f21cf19f50d3c0513 gnulib/import/dirname-lgpl.c -59ee5c33a12b24da2046b7f8aa45547f gnulib/import/mkdtemp.c -cc7c8722be81b4b7b560e7c8ed22e3aa gnulib/import/realloc.c -eb710ef1390e0cfafb5aa9e99b86152e gnulib/import/signal.in.h -9cfb0dfe766c5f272fc0c879d4296fb2 gnulib/import/sys_socket.in.h -ff8b3054a12715e0ce62435a802760d9 gnulib/import/wchar.in.h -a0eeaafafde7d0f33021762c4e514171 gnulib/import/dosname.h -6d508ad286f2b7d2e5d78e9d2d5d0372 gnulib/import/mbsrtowcs.c -94ba1e5194088b5946188778e9761445 gnulib/import/mbsrtowcs-state.c +3bffdb4b8458fe89f31448198079d07d gnulib/import/pipe-safer.c +3506285f6366f03e5fc647839df4cc80 gnulib/import/strnlen.c +13518ce0ca6a5128ee20086126bb95b7 gnulib/import/isnand.c +ec6cc89d3f18b4807f35c83cc3065523 gnulib/import/strerror.c +c1cd233152aec3071ca625e00f20c78c gnulib/import/memchr.valgrind +d8a3596bfc6588ec4609621e85474a1a gnulib/import/gettimeofday.c +7c91120a89d4466ad0f62484400a3e83 gnulib/import/getprogname.h +a478871956d9863679d39874dde8a961 gnulib/import/signal.in.h +483f8b82d5bafe052efcacd2797ad90b gnulib/import/intprops.h +2ca5bcc821011090f73cce4d966dc259 gnulib/import/sys_stat.in.h 8de45428948e1901fc916118cafaf373 gnulib/import/math.c -ff87340508c63562abc5b5abfe00c857 gnulib/import/hard-locale.h -aadf8667b8c883e7e9d069e8fde4752b gnulib/import/intprops.h -5a104cb427ffd9600c83285558601d73 gnulib/import/lstat.c -24bee090b4599cd2fa320e890f1359a5 gnulib/import/malloca.h -bc2c32ebb6b0b9d1cebc1cf201890cab gnulib/import/glob-libc.h -037eae846c0b4a23a3a01c0d12cdb300 gnulib/import/isnanl.c -bdeaf786800f05321e5ee32b4a0e36b0 gnulib/import/strnlen1.h -4a0d6f48fa64424c9f2b2469b3e7f6aa gnulib/import/rename.c -8cc8478ea7f581bf45c4f6e38166c9af gnulib/import/basename-lgpl.c -3ddfc05c43b02a6da66b6861a898b921 gnulib/import/filenamecat-lgpl.c -4bf0ce8031eb10b8fd778b6001bd7c2a gnulib/import/openat.h -3fa47c93c0e940627e60a6f3756acfcc gnulib/import/tempname.c -a9cf05943d577406b9028d0676df2ca5 gnulib/import/chdir-long.c -5f33bf56abc62cbc0beea943a70b1a4d gnulib/import/ref-add.sin -ee9342fb654a8291808fa9fb66d4f0e3 gnulib/import/dup.c -7e96ac011152c66a76e1c365871e0ff7 gnulib/import/glob.c -c9803b2587efcd71e6abbd5d1b2f1c38 gnulib/import/unistd--.h -185e5469d8a0e0743d1b7171efe15527 gnulib/import/msvc-inval.c -d9e3445d3dff76a7b9c693341e26cbba gnulib/import/float.in.h -e6445c7afbb0de9cbd6722962f22476a gnulib/import/limits.in.h -58582b4965faf5f52814645a4055c84b gnulib/import/strerror.c +1fe4fb2db3aed4d1231c32e1455fbad5 gnulib/import/dirent-private.h +fc31286e53e4cf9aeeb6cedd72b60eac gnulib/import/windows-recmutex.h +4b09f9ff464881fdbf2eacdc6b0dd7f3 gnulib/import/sys_types.in.h +735b92a5010a60021e9fc8a299daab83 gnulib/import/fpucw.h +b849d1366476c41b6ca89a767a4f75c9 gnulib/import/malloc/scratch_buffer_grow.c +ca7fc4d9693c80cfa8ca4512ee60f6c4 gnulib/import/malloc/scratch_buffer_set_array_size.c +7f5959a601ec8c1e6d95b01678b89450 gnulib/import/malloc/scratch_buffer_grow_preserve.c +17f258f6290bea6c95c55613a127a064 gnulib/import/malloc/scratch_buffer.h +baeece1c95463878de7ddb23ba42d311 gnulib/import/math.in.h +402c0a38ee132818f4e09cdab7e4ea81 gnulib/import/close.c +993b3812d3e3f8c9f5c4e4421a2cb79c gnulib/import/openat.c +d647f0973522c3784074883eb2373ea5 gnulib/import/itold.c +ea56d735d472b4d112caeab51cc7f447 gnulib/import/cdefs.h +edffd73dc27472995e9918d7e7684b21 gnulib/import/verify.h +105bb279a27cb53811d46de6ef1a5242 gnulib/import/time_r.c +6411b6a5c60eae43d6fd8ba0d15f95a4 gnulib/import/count-one-bits.c +7578d2928141c08d78b60bc245fb5ef1 gnulib/import/isnan.c +7e73bc2264c5fc0117c5fa54b02a092f gnulib/import/glob-libc.h +f5d933a3d81dab01e746d96465a012fe gnulib/import/sys_socket.in.h +c1c59cbe2fb38c4728d05e76fd21410d gnulib/import/rawmemchr.c +00b3974208e555b2b3d3e5c9ded245f2 gnulib/import/minmax.h +ef0c05d4d35bcf28c769df9f75f3fa1b gnulib/import/opendir.c +553e8ccfa9363286dfc6bb273a9c8702 gnulib/import/basename-lgpl.c +c496f24a525bdee53d37187a322c8f72 gnulib/import/netinet_in.in.h +ba5b1a84a25423e27813d4522dfce268 gnulib/import/dup2.c +c2b40973fedf25197cff8676ebb70298 gnulib/import/setenv.c +ec4d483d9274ece6908e0c99187645ab gnulib/import/strnlen1.c +c87745063f67f79e4b1e427fa9a330b8 gnulib/import/wmempcpy.c +e114bfffdb5a7b5c6447a4797147e859 gnulib/import/dirent.in.h +cb5c3d13721b2c39bf7c25070515d8e5 gnulib/import/float.in.h +b95e0f9ec44e33165f26d6c3e9d43008 gnulib/import/fcntl.in.h +fe23e59cfd38ebbbf0fac3a53f6ecc3e gnulib/import/streq.h +9a9465f9739bc2c381979805626c6896 gnulib/import/strnlen1.h +9360310f2e3a135ecf77f044f441565b gnulib/import/fcntl.c +7bd1bc3123fbed10c23d58d235139067 gnulib/import/wchar.in.h +043e361eee6eac4eac20a1eaaa0c43e2 gnulib/import/stripslash.c +25227041685b002439cb74fe4c40c30e gnulib/import/rmdir.c +1c21c33d0df2e47c91506737663151ce gnulib/import/xalloc-oversized.h +916e4dd3dd9c2d96c77575540992a52b gnulib/import/strchrnul.valgrind +17ebf986925dae7e30c2f638868d649e gnulib/import/hard-locale.h +1efce2fbe435a0fbe46c14913f940bbc gnulib/import/fnmatch_loop.c +3cd034bfc58b7b2e0bef40767232aa9a gnulib/import/memmem.c +738aa7dd5c8b34356110675da76a2e06 gnulib/import/malloca.c +384eb558e7c3bf423e4eaa8ac5aa6916 gnulib/import/str-two-way.h +8d9f255a26527a6049937ee6a2934cf0 gnulib/import/msvc-nothrow.h +69ee1fc11bcb1d243270e344d5c188b2 gnulib/import/mbrtowc.c +6d4a55893565d92ffe146040731ee58e gnulib/import/msvc-inval.c +60b87ff8be357ece34a15025915d3d6d gnulib/import/lstat.c +24f9e7512a90ea5e48ba42fab3eaeecb gnulib/import/getcwd.c +d3274bc5bf88c1886d1cc27ca6782ffb gnulib/import/mbtowc.c +be8cd3d8bbd0e93942a83a598a594d1c gnulib/import/getrandom.c +1736817598a002f7193e0e3c6393649c gnulib/import/setlocale_null.c +53d961b3fddca2e11179a3019d4e8424 gnulib/import/assure.h +55d3cf9591e8bc7afde6c6b5db475e60 gnulib/import/realloc.c +0642b06abcd5c57288a6b6966a25bdda gnulib/import/open.c +a0752233e8eae86f50a4cfb9fc4e50fa gnulib/import/Makefile.in +8ff75fa26bf907de140aad976e526506 gnulib/import/readlink.c +3cf33fbaf8e9370f780a6d9da017b517 gnulib/import/unistd-safer.h +5365833311bd41469aac85fa40697930 gnulib/import/windows-recmutex.c +f3f65a5201f0ef7cf5a5c1947cc44627 gnulib/import/fd-safer-flag.c +e3151ef989f11c83fd30efd9d0c6956f gnulib/import/string.in.h +1510ed0b4170543107afa95e8a196578 gnulib/import/stdint.in.h +63e448086ea24f8c16955a87227e64fd gnulib/import/chdir-long.h +59eec04c1761dd922625d199c9b12374 gnulib/import/error.c +0329073d3c6b38573794edb5e65b6774 gnulib/import/stat-w32.c +986d67e13d3ee8f61057904013373ac8 gnulib/import/stat-w32.h +49711aeb4d13fec1c2b2d0bc7d37c8d1 gnulib/import/isblank.c +ef9056b65452c3a46890a0eb35b53b1b gnulib/import/stat-time.c +f5759e6c204779996dd92aadb98df332 gnulib/import/wmemchr.c +7300243fadeeba6006b7338d19af4230 gnulib/import/pathmax.h 5aab29558a9eeb739c9f51c11056c3ca gnulib/import/sys_socket.c -32c73d2073d2806b808f237c88b5ea9c gnulib/import/frexpl.c -c19bd94272c5e31a718033da199c5234 gnulib/import/msvc-nothrow.h -1ff3eb53ed7b0323e3abb34b46d24478 gnulib/import/fd-safer.c -d6b89eb2076e04eb9e9d28cfd74c22bf gnulib/import/same-inode.h -5edffd432a27b27476bc33ac5b4cdc78 gnulib/import/time.in.h -f9bc479e2e5639aa330ac767c5afbcc1 gnulib/import/wctype.in.h -ce9dee9557fd9a4284516ae8a238503a gnulib/import/inttypes.in.h -ed975673ab32b875815d047101524618 gnulib/import/stddef.in.h -4afc2077562f87bda203559b54de3d23 gnulib/import/malloca.valgrind -e228064a3c2755b1381df29c0f509c4d gnulib/import/extra/snippet/_Noreturn.h -999bcbc13cd7852e6d69f75d87e27eda gnulib/import/extra/snippet/c++defs.h -1ce0842c3f4fae8f5c955acaa6a7bd44 gnulib/import/extra/snippet/warn-on-use.h -fa46bc4e77e26c6dc445946182922ac8 gnulib/import/extra/snippet/arg-nonnull.h -fb9349f896e65a5759f62488bfb2c70d gnulib/import/extra/config.rpath -c8e03943b65b41846bb6c451b8a63843 gnulib/import/extra/update-copyright -a3859868bd7c904f36041e1d8f1c09b2 gnulib/import/msvc-nothrow.c -ccdf375afd8f7530ce7c61117f718c22 gnulib/import/alloca.c -391c711f4412c21af6eac646224c7b1b gnulib/import/alloca.in.h -f62cf24381607f2f5c4e62cbd45104db gnulib/import/unistd.in.h -fd51dadc8f67a1d41f52327052ecf5e5 gnulib/import/gettimeofday.c -44688f0d19ef0a4c9f3d2cb5398a1020 gnulib/import/tempname.h -466ccf27add111239de5b4faf1b99d41 gnulib/import/dup-safer.c -e7f9eb12ac2bbe257240afa4a4bed91c gnulib/import/isnand-nolibm.h -3443f4dc9dc15c7310fe8abb5fcbda28 gnulib/import/isnanl-nolibm.h -d8305e2fc9da321a00d452b7a7d2b7ff gnulib/import/filenamecat.h -c750a555b4e2f783cf1a3ab599bebdc6 gnulib/import/stdlib.in.h -8a7f374c31d812d63148344d273eba4e gnulib/import/streq.h -bb9cbcd114bda8fc81940f765c42806a gnulib/import/isnan.c -8005605e920358d4a9f5c2f2fb8e9bfd gnulib/import/canonicalize-lgpl.c -d3df76784d80a63e24211f73686a3dc9 gnulib/import/strstr.c -8206a5921b4293107cac9292509715a5 gnulib/import/opendir.c -11db18fc5a887239766a23c91e32626c gnulib/import/readlink.c -84df66f8129186dc3c2a3aea7e758c05 gnulib/import/msvc-inval.h -90f2d2438efde7a7b51386d8aa62c732 gnulib/import/getprogname.c -c874e70bb7beb771f43118d031df34fe gnulib/import/arpa_inet.in.h -420c7c94676c36f2b1b741f75b8bedd6 gnulib/import/secure_getenv.c -50a540f76fdff2cc5080a652cd961db7 gnulib/import/save-cwd.c -cf42adae4916712ba58941e5ca64e2d3 gnulib/import/pathmax.h -ce80de59225450e9de1cff046ec2f0a3 gnulib/import/memchr.valgrind -914c81effa476c65fe1cbbf8766a8edc gnulib/import/math.in.h -f176475c82c60cc72f671ee7daeb4e29 gnulib/import/sys_stat.in.h -4d4174974d0b2fe7d1fac3d75420846e gnulib/import/float.c -7f46d68766ef15cb2ce098f33d0f0082 gnulib/import/Makefile.am -85adfe8316a612246e9b41e71b95d5f3 gnulib/import/mempcpy.c -254f3e23c72c2eb0085da48ab8841a62 gnulib/import/sys_uio.in.h -29afb42d3cb1159935dc370fef259fff gnulib/import/getcwd.c -e6c94afccf7d6c1db57293ab60c65b0c gnulib/import/exitfail.h -2afffc2ef699d6e282aa4393bcad8021 gnulib/import/glthread/threadlib.c -33ae79f9f576257db02d9290c7601e64 gnulib/import/glthread/lock.c -dc4b013392651985f1c7ce481788ec7e gnulib/import/glthread/lock.h -b3c3995c65e3eaa19a995043b7793afb gnulib/import/setenv.c -4eb1e150d2fc8b8f10431f8b8a0014f7 gnulib/import/stdint.in.h -631c8caef8ae54c28ffbf9fdda6f9293 gnulib/import/fstatat.c -92c2c27289ecc60b4ead4300dc4bae1d gnulib/import/fd-hook.c -ce565caf826854cd78dcdd3dfacbb928 gnulib/import/unistd.c -a48eb0bc897054fbfce4b076cb8173a8 gnulib/import/Makefile.in -53edf30adadb6af6715c7353dea3339c gnulib/import/cloexec.h -88d75e3180812f7f31302273acc98029 gnulib/Makefile.am -872ef5eb1ac724839b9fe4a0a3562c5a gnulib/Makefile.in -385d17c5e5ddba0781e61eb1596696f4 include/gdb/sim-frv.h -6dbae6e36c2a9fd1924edfad73a627a3 include/gdb/sim-lm32.h -8799cbb7aaf0b38a110e0d109bfc8520 include/gdb/ChangeLog -043f36ccd98454c91274099b2c0a247b include/gdb/sim-rl78.h -840204e0c570b699a50bcfd0bb68def3 include/gdb/signals.def -35050732505c8f5d342f685cd339988b include/gdb/sim-m32c.h -60f753f20c8d6684fba51a860a8ada0a include/gdb/fileio.h -a50c053cf83562cdd0f22ec5090f3f22 include/gdb/callback.h -5188ccf32ffe8302181e95f64431072d include/gdb/signals.h -6d0c78b7e7b3b7f9a25f7e30114a9889 include/gdb/sim-bfin.h -b9071821fd18dce5b86816d8eae210b5 include/gdb/sim-sh.h -d4f0fc8f707737e22d3f355d7b9c73a8 include/gdb/section-scripts.h -c2fbd1c9d7d096838cb077e4a31a6138 include/gdb/sim-cr16.h -cd73c0180468e5624125e790cb95f6de include/gdb/sim-d10v.h -42d455827527da02d4d2275473472bc9 include/gdb/sim-h8300.h -63375e6c4fccd559dc5435328d0a0a1c include/gdb/sim-arm.h -bc5050da821be6e9ab7fd0731dc9cfdd include/gdb/sim-aarch64.h -f930341d18cd2a1f436f172e816e833e include/gdb/sim-rx.h -6158da9e1dd5368d307a558d6f7e65ed include/gdb/gdb-index.h -86d1856480f65ae0528cb405bce2bc0e include/gdb/sim-ft32.h -d09d6f9097180f1376e63a32e3163780 include/gdb/remote-sim.h -eb219c14c6f2a67562d2f5fc8f536428 include/gdb/sim-ppc.h -067575b6a98904562ecef1f4c24dfc7d include/fibheap.h -5e67f2c2e290a5046b8371b28b41ad3b include/alloca-conf.h -c650e5a63062d4371d80741048292bda include/ChangeLog-2017 -def665a8553c0865c88d58a554d87473 include/xregex2.h -902de1730fd43df318ac39a83995af19 include/ChangeLog -d947ad669709a730d3f627ed1932bf51 include/gcc-c-interface.h -c52c212e7868b7f4ab0c597265a66bfe include/lto-symtab.h -da53d8bc6b0c62a9af02ebe971a6803e include/md5.h -b5e600b24bc59edd61e56c990af976ff include/floatformat.h -10e3d4158ddc973670ed6129581955c6 include/fopen-vms.h -06bcb01486ff590977187ef32b8de87e include/dwarf2.def -2e19107e7906229570c084b790923d48 include/splay-tree.h -59530bdf33659b29e73d4adb9f9f6552 include/COPYING -1abadbbd2d196bff60aaceb7605884ea include/timeval-utils.h -173bea22b3108dc0d46fc8a38d9ae33f include/MAINTAINERS -8617c5fc949175d0aaee0993c55a8de3 include/fopen-bin.h -b8eb13f3bffa85267fcd095e7cfa2a39 include/objalloc.h -22757cd36eca846cfaa24e5671331f61 include/libiberty.h -65ecf90a05f64c8b34d94f258410318f include/oasys.h -75d1ff50f74ca90cf99a952ee5a6cc0d include/diagnostics.h -45288cbfa4b804aed6619bcd96d9b8f0 include/sha1.h +ab16477daf638f52d6d5a522ca2ce541 gnulib/import/inttypes.in.h +c21b74b172e195da77b64eccf43467b4 gnulib/import/getdtablesize.c +8a9e520866132752bf30a220c10a1435 gnulib/import/_Noreturn.h +1125b7cb196b8e109f18e2c443e34ef8 gnulib/import/localtime-buffer.h +0bf75e546e4a38120ecbfc080cce0565 gnulib/import/stat-time.h +8e50a86686b88ecbde221d92416de541 gnulib/import/sys_time.in.h +87f1c7627653c5bd18830a72a56cc056 gnulib/import/dirname.h +909d14c6e98eebe9bf01c1206484c96c gnulib/import/getcwd-lgpl.c +01efe1a52e7f10b51be47c22d663bae3 gnulib/import/msvc-inval.h +3c9a81b795b575ef930eca4a0f6cf9ed gnulib/import/m4/opendir.m4 +f721a53032f2462f0c2b1922a7a2c127 gnulib/import/m4/dirname.m4 +581b0c07c8db66d8059c9c8ecdf117dc gnulib/import/m4/exponentd.m4 +ab13bcb0610771ad1c8d22492d47a6c1 gnulib/import/m4/fcntl_h.m4 +69ab851b738849ae10801d7d15236b59 gnulib/import/m4/mkdtemp.m4 +a78a7ea348daf8a7f795aa9beb72c35d gnulib/import/m4/time_h.m4 +858b73edff956446a8bd1a8527935469 gnulib/import/m4/d-type.m4 +2decd58c2c717ec064e1ab61a348c907 gnulib/import/m4/msvc-nothrow.m4 +b16e8bec79025db9937added64c395fe gnulib/import/m4/socklen.m4 +529f430f89c689b91014ff5804acf04e gnulib/import/m4/sockpfaf.m4 +12cab45784ce306d64cc750a31f97224 gnulib/import/m4/btowc.m4 +d86c116aeb17b57c2818d42f0edfe161 gnulib/import/m4/getcwd-path-max.m4 +493c67908a912154844c4cf14731a8c8 gnulib/import/m4/locale_h.m4 +d50c843616444ca2a002ae7724ce806b gnulib/import/m4/error.m4 +494d0f5b780f44c5ff9496d5ce279a76 gnulib/import/m4/mbtowc.m4 +477b241c72c6545f176ec0736147dc3d gnulib/import/m4/mmap-anon.m4 +37b673a92b211ba14ca60f6ff1015576 gnulib/import/m4/getlogin.m4 +47adaa4476f249a93ad19713a29a4df7 gnulib/import/m4/codeset.m4 +36d7ebcb81ecc7087237cd078c9a8b86 gnulib/import/m4/fchdir.m4 +dcef470eb253e0385063d2afec750913 gnulib/import/m4/float_h.m4 +feb99f59bbd228c7b576ca3f1daa0fbe gnulib/import/m4/fdopendir.m4 +5f0188cc409371e248fc994e4f9c9266 gnulib/import/m4/gnulib-common.m4 +061be4b5adddf7d418ee67b7f32fac7f gnulib/import/m4/sys_time_h.m4 +56ab4d201ff8b238e4fbb01e4767f721 gnulib/import/m4/tempname.m4 +ea73a7a063d1bae64deef16c8f66e0e5 gnulib/import/m4/readlink.m4 +ca77cfea2b3fc6d0326b670273b95a53 gnulib/import/m4/00gnulib.m4 +0f79fe14f187f86c75e663edf3a27384 gnulib/import/m4/inttypes-pri.m4 +4d7ee5cb91d082fbeac3a3c2b5b534e3 gnulib/import/m4/mbsinit.m4 +941cd297450524ecf0aef047f85ebbe9 gnulib/import/m4/gettimeofday.m4 +0b51d5390f4457204af58af1a8f55bf6 gnulib/import/m4/locale-zh.m4 +5ac22ed65797fe382026fe04bae479ac gnulib/import/m4/rawmemchr.m4 +b7bf54ed62cf448b3023308db8d398f8 gnulib/import/m4/include_next.m4 +af38f2ad25ff9de444fc596569190a84 gnulib/import/m4/wchar_h.m4 +a18734fd6f5f272140ac5ea54fd5af3e gnulib/import/m4/locale-ja.m4 +f4d1a337bb300f7f02248352a6fea75b gnulib/import/m4/dup.m4 +175dcaaba8880caa05edb8438780a352 gnulib/import/m4/double-slash-root.m4 +f277e55bb701f164956d0789793336fb gnulib/import/m4/mbrtowc.m4 +513c9613672c14200fb5857701c74695 gnulib/import/m4/stdint.m4 +b3266013ad6b844ce285514c68585038 gnulib/import/m4/open-cloexec.m4 +f5bf7c828ea22b76543cbb1f95f8c80f gnulib/import/m4/unistd_h.m4 +84cc8da0e87687cf63bdf04c623698cf gnulib/import/m4/fpieee.m4 +8239084ca990bcabcb2cde0ebf9ea457 gnulib/import/m4/getcwd-abort-bug.m4 +f6cb6a1550e8707839739a7a10d6a0bb gnulib/import/m4/minmax.m4 +31835e061e766b855a4508b96e728249 gnulib/import/m4/setlocale_null.m4 +00392bf7dce36a6393a3b135df547659 gnulib/import/m4/stat.m4 +398140f3b9eb16835de3b50b0f6f906f gnulib/import/m4/lock.m4 +57d721436faf4f3a6468f2b50c1b24a2 gnulib/import/m4/isnanl.m4 +eee996423ae6b4415e78e63cee97085c gnulib/import/m4/dup2.m4 +182c2014e3da3f1bf31d87eded0a0ae3 gnulib/import/m4/closedir.m4 +70a9cc82735b979ae33598c0348bfa6a gnulib/import/m4/stdlib_h.m4 +6319127b0aa034132ce928740c26f8ac gnulib/import/m4/eealloc.m4 +0885741c93de19c29a18c59e59750682 gnulib/import/m4/gnulib-comp.m4 +5768c1e966a7e26ba4ffd8ddc28f1d0a gnulib/import/m4/memrchr.m4 +d7b36215b567c70c223b5787071f7106 gnulib/import/m4/glob.m4 +d63c9833bbc93f02d4422e1f7a8ad78b gnulib/import/m4/strerror_r.m4 +59ef5960d8d55f1e94e74903be362274 gnulib/import/m4/sys_types_h.m4 +e9ff788b32971e14751f46581d7c642c gnulib/import/m4/std-gnu11.m4 +b789d15374be41c95291592964488920 gnulib/import/m4/builtin-expect.m4 +b7b4679e08647bc4c74f7a4a0715a63a gnulib/import/m4/mempcpy.m4 +d9ca58a2098629f7b976261dedb0c73b gnulib/import/m4/getprogname.m4 +430d53a59f219b9ef305dde5ed06e6ea gnulib/import/m4/getdtablesize.m4 +fff51fa1919e87d5c4c15d9d16abfe10 gnulib/import/m4/wint_t.m4 +19743ad232bc409a344b538be16ca591 gnulib/import/m4/frexp.m4 +f584db83d00ff2e32ce14082e9a431be gnulib/import/m4/chdir-long.m4 +19902e88f7e56a859fddd425af34f739 gnulib/import/m4/flexmember.m4 +9cd35c34f5dfdadd24f5af9bf6a75931 gnulib/import/m4/sys_stat_h.m4 +3a2a66e515e3d963ff0508fccd2a581f gnulib/import/m4/signal_h.m4 +31fc485a4b9675201315ecdbdde6bef4 gnulib/import/m4/extern-inline.m4 +95c93c0093ecd54dddcca2076766174b gnulib/import/m4/open.m4 +17f0fc6f8d0e567a359ad3423c6e74d3 gnulib/import/m4/d-ino.m4 +48ab12fcd1858aa9736e695d1bf68933 gnulib/import/m4/close.m4 +e269474c444fb694869a5ce2f989bb7f gnulib/import/m4/mbstate_t.m4 +3e10fac82c66c1795a7304394547d21b gnulib/import/m4/math_h.m4 +6ffd20bdbdf1dcc73acd448ba6974e03 gnulib/import/m4/mode_t.m4 +ea298a2cb13924ab7987d3b6ae0a23b9 gnulib/import/m4/alloca.m4 +8c097b071b4b67c282195442909255c2 gnulib/import/m4/mkostemp.m4 +1bc19412f3d946593186f80faff0b437 gnulib/import/m4/save-cwd.m4 +41b69d57f11f4c540305c593798a8d72 gnulib/import/m4/exponentl.m4 +9e3d4226b5466bebbcda7a3fabcb33ad gnulib/import/m4/arpa_inet_h.m4 +7ce0bb77539cc7b14cde4edc90dadc7b gnulib/import/m4/dirent_h.m4 +0816c6a681917e63fff20e71bba168f6 gnulib/import/m4/isnand.m4 +f251fc06deab153cfa0df0fd2f90f61c gnulib/import/m4/localcharset.m4 +343689a68352e479c50948bab9cc9187 gnulib/import/m4/frexpl.m4 +fe0525ac42ae6fa19f55032df682a492 gnulib/import/m4/sys_socket_h.m4 +8fd8be5d46636cb9fd2bb32134713691 gnulib/import/m4/__inline.m4 +05c3f1c65c5821ac0dcc9ad26fbaebc3 gnulib/import/m4/multiarch.m4 +47e6b111380e3abd4c90669bde691999 gnulib/import/m4/time_r.m4 +6302aa04de30440d72ad797d4cff9f3a gnulib/import/m4/nocrash.m4 +4db307dbeecbceceb12bb883984ab187 gnulib/import/m4/largefile.m4 +9b8b92c0731fbb8cc23ed2b16c296fee gnulib/import/m4/memmem.m4 +c94f9826db76be35e8fc5f2cf691fdc7 gnulib/import/m4/stat-time.m4 +545306eb42b4da77781fc32b44e70e32 gnulib/import/m4/malloc.m4 +d658cf767fe6d5fc856048067ec84943 gnulib/import/m4/wmempcpy.m4 +d22772f3dffdcef195c1cd087a8d2fd7 gnulib/import/m4/dirfd.m4 +1eff34a75961d69c00226f7f911202f1 gnulib/import/m4/msvc-inval.m4 +0355e42b900c07f4555bb2680f77dfd3 gnulib/import/m4/gnulib-cache.m4 +a1a5fc3af4fb9f7acefb14a6ccf71682 gnulib/import/m4/open-slash.m4 +8ed63b38c39dc333ade5e5c37f807cb4 gnulib/import/m4/fcntl.m4 +66f54536179e771e2fc3f4e1613a0ab9 gnulib/import/m4/fnmatch_h.m4 +475da4ed6d70fe3daa2f76b6cb877d17 gnulib/import/m4/strnlen.m4 +aadf051878d8e251c3d807421f31f6ea gnulib/import/m4/wchar_t.m4 +a63dd4b929f0cde3fef79df9bc35c443 gnulib/import/m4/stdio_h.m4 +0b20e714ac0025addefd24256ca12da3 gnulib/import/m4/extensions.m4 +86cde937cbcae72557c37f0e4553c111 gnulib/import/m4/wctype_h.m4 +6b084c2bf78fcc8cd3e6b78d9c674860 gnulib/import/m4/inttypes.m4 +c449dce02843e63ead8063650103cc8e gnulib/import/m4/netinet_in_h.m4 +ab28e41debcc195dfc3959f6ee802ed5 gnulib/import/m4/readdir.m4 +416cd365524c0effe71b5b5fe871c60b gnulib/import/m4/getrandom.m4 +c8f9b9114dc33e7040cc8f64a630e103 gnulib/import/m4/strtok_r.m4 +eb279a41e7c9e5175c7944e2d2db725f gnulib/import/m4/rmdir.m4 +1a694bf1a9703c058503f98c918f90bd gnulib/import/m4/visibility.m4 +30059e8bf27877917fdbc244d692ef51 gnulib/import/m4/fstat.m4 +888f26dabb09fe94b82dff6e319fe6c6 gnulib/import/m4/setenv.m4 +c4c6c12eeb7454cf6fc40c501c6f2f1c gnulib/import/m4/wmemchr.m4 +532f71b6410cae73d67c7a033c410f52 gnulib/import/m4/sys_uio_h.m4 +e1298b61c7c38305f059151116ef5db9 gnulib/import/m4/rewinddir.m4 +725282b3cc8d02bbc42a9fe84c00b86e gnulib/import/m4/strerror.m4 +a94439f87647347853bd0b85d7dd765d gnulib/import/m4/strchrnul.m4 +cdef4a96d211c17f39fb6d3139caae78 gnulib/import/m4/memchr.m4 +adea650312ebab8f8650e3b7f7ca5dc1 gnulib/import/m4/isblank.m4 +7716eafce1751e6775871e52834c2fc0 gnulib/import/m4/off_t.m4 +9961680f5132474414fa825586879719 gnulib/import/m4/pthread_rwlock_rdlock.m4 +a3ff4b994af343a75d9713c95f8f171b gnulib/import/m4/warn-on-use.m4 +a4f56b6a98a599ef6bbb0904c4e9998c gnulib/import/m4/realloc.m4 +fd5e1500c8ad16656b0acea7559f7551 gnulib/import/m4/getpagesize.m4 +94559e39175a31291ce95b05c225966a gnulib/import/m4/mkdir.m4 +56a2ca9456983cbf1342ae55b928cc42 gnulib/import/m4/zzgnulib.m4 +08a89457614798103daec88625941d47 gnulib/import/m4/glob_h.m4 +e696edb5a1e93d8c460e14007cf7d67c gnulib/import/m4/getcwd.m4 +c134523eb41a86a7a6a789aa5c7310de gnulib/import/m4/rename.m4 +cc36a8baf916f2811c429616356f6f7b gnulib/import/m4/limits-h.m4 +d12335fd8d48db6d8ae60a9c03ff4e99 gnulib/import/m4/ssize_t.m4 +e5e4248a926c11ab576f4989b4a9fe8b gnulib/import/m4/fnmatch.m4 +c65f216effc588a338c46bc919f3476c gnulib/import/m4/absolute-header.m4 +871e66ab0575a22435ad004720d20117 gnulib/import/m4/mbsrtowcs.m4 +81f4a30648b123daf7c32204127f3899 gnulib/import/m4/ctype.m4 +01777ddf3cf3352a9df65f0e2302c396 gnulib/import/m4/pathmax.m4 +86b9167d1cfba0f6b09ae66e1a7d32df gnulib/import/m4/fstatat.m4 +3ed6b284586407c889dfbda573ba2c63 gnulib/import/m4/locale-fr.m4 +f209a7646381e5c8c4de2c497f1c5a25 gnulib/import/m4/stdalign.m4 +6a8cd162eb391a1728253dd33baf28f9 gnulib/import/m4/openat.m4 +01ddb3a92fb7f105553148c37c62bec9 gnulib/import/m4/errno_h.m4 +01a4cd449a79e3990a86c1cf6e575b06 gnulib/import/m4/unistd-safer.m4 +ba429cf844127f81ca014af7d05bb500 gnulib/import/m4/stddef_h.m4 +0dc4edc544d9930730893e5a46063808 gnulib/import/m4/gnulib-tool.m4 +0ef1ad458ae25d03dcebb4323e164de3 gnulib/import/m4/getlogin_r.m4 +5cd5cef01b121b14b96dc39758aff627 gnulib/import/m4/string_h.m4 +a366c2a52e1d770e48d088a95d8c7e38 gnulib/import/m4/malloca.m4 +d17f0910cce99e2ec6d5c676e39d4f57 gnulib/import/m4/strdup.m4 +1efe0da8b3874f8f50146a9ace97a960 gnulib/import/m4/canonicalize.m4 +028fe71914d726fd85c043c2cafd2558 gnulib/import/m4/sys_random_h.m4 +a55734cd0932c3b0d3ba8dd4a79f5a5d gnulib/import/m4/localtime-buffer.m4 +a712d76f765e7086c17e8efe9a5fc1e5 gnulib/import/m4/stdbool.m4 +61754f17569ff0397fb071f798d36a5e gnulib/import/m4/fcntl-o.m4 +5c1ed97573dcaa56b66ff369dac7b38d gnulib/import/m4/inet_ntop.m4 +5ff5e0a7907ede60733521758fba46d6 gnulib/import/m4/filenamecat.m4 +576fe57eb9c6abca1dfdcd45743a8d6e gnulib/import/m4/lstat.m4 +c1fff5698e277bf495b8a420bea170d0 gnulib/import/m4/strstr.m4 +9d26c25604d10782213e58e726d68789 gnulib/import/m4/threadlib.m4 +3d26284b864303c928c889589aed4fc9 gnulib/import/m4/environ.m4 +33d2684f2d48abed916a871adeb734a6 gnulib/import/closedir.c +656ef8b28b1748b89744e1c96b297f5f gnulib/import/exitfail.c +3d310266fa5e25e89be8919b00431378 gnulib/import/dup-safer.c +0cc7811bc053337fa775e4da4844571e gnulib/import/stddef.in.h +1363a4322ad3cb5e0bfec950a82ab23b gnulib/import/strerror-override.h +06dd012083a04d677e00dc4fef07ac12 gnulib/import/fstat.c +c7abab93e69dbf414c6d35a7c2ac0b88 gnulib/import/mbsrtowcs-state.c +030e39e925ac9834c1eff955de90db5a gnulib/import/windows-rwlock.c +bc9f89d673dcd4d7d3c5d82f1c5ae602 gnulib/import/glob_pattern_p.c +06f75edb259a1b6dffaa8cb1d7d92b1f gnulib/import/filenamecat.h +999ac18c6e24c251db031d7d3b5fe076 gnulib/import/fchdir.c +b54c20d0f4d7368669250c6e6b32cae4 gnulib/import/msvc-nothrow.c +b1d80b77a2ce50b22145c150db43ca8d gnulib/import/mkdtemp.c +3a21437f28eaf22303e9029f71ccd993 gnulib/import/strerror-override.c +fb7950a40fba4bc34a8e8b79f2b85c26 gnulib/import/isnanl-nolibm.h +912cfdbe935f3667d54e8acbd5a18298 gnulib/import/unsetenv.c +ec1a335afe3effa10678430b69ec915f gnulib/import/stdbool.in.h +ad9e8eb84eef9b76d184ef1df766225f gnulib/import/readdir.c +7f99a310b7373dee7b6337d2609649dd gnulib/import/arg-nonnull.h +067257b778b3b5994293d73bb131d07e gnulib/import/stat.c +550473fe65badda6f9a83580f01f2206 gnulib/import/dup.c +3bbccec4e998b342f2ef017cde2bb63c gnulib/import/malloc.c +f2ac4cd81cc1da06a47af4a61e4531ce gnulib/import/hard-locale.c +632dc9302f93e24b57d47f417d68d29b gnulib/import/frexpl.c +d0c49357ea9ef1d04cacd6a27418cc6f gnulib/import/setlocale_null.h +d6bcad591a656b33ab2eeb43e11cee36 gnulib/import/windows-rwlock.h +dbca8f886fc824448bf214c4be06a4c6 gnulib/import/memchr.c +7f9d76ce4270a3f31434d702b3db8549 gnulib/import/flexmember.h +1bcba90db2a1c24e1d39fcefd7929e53 gnulib/import/mkdir.c +f9a5e084fa6a5a956462041373ed927f gnulib/import/windows-mutex.h +3f5b340edc5c25d13dbb8b22b8a5f1c5 gnulib/import/extra/update-copyright +4f65a9a90291c2a4c41dd5caaddbba15 gnulib/import/globfree.c +4eb1b7c5b7bbdcc4cd7d89a7d965963f gnulib/import/fd-safer.c +92d2fc0fa8705504f1dd22a217d9236a gnulib/import/strchrnul.c +eb0b0bb21562f1f1ba5fb0d3dec0f688 gnulib/import/openat.h +d4429150cdf18f34b780b4f3fb60fb5c gnulib/import/mempcpy.c +6422a865fd5d262a97f5842586393528 gnulib/import/c++defs.h +c612d1a1b86ff53d55c298f4dafa3bdb gnulib/import/mbtowc-lock.c +de1b28190e307d4e2f169768dce8c49a gnulib/import/cloexec.h +09e9e339df841cb6c9600e51beaafc52 gnulib/import/scratch_buffer.h +a7ca713c7685b5b8f594ec6cbbe3596e gnulib/import/alloca.c +99749f9b1e60b3a5acc68b3daae93aa9 gnulib/import/time.in.h +e6c3857b76dd9bc76360e846ea9118ee gnulib/import/rename.c +3618ca1141cd47dbe0d6a4ece346160b gnulib/import/sys_random.in.h +e75014978e86d82b5594d5c5e571b924 gnulib/import/dirfd.c +2626a85f238cf93c3b5e071d88846d31 gnulib/import/sys_uio.in.h +e8c6fc41187cf256e1a237c1f35a5a9e gnulib/import/save-cwd.c +293561a48494fedea6585eac2831753e gnulib/import/tempname.c +9c0442e0eb47ed1de074f3981dca1d79 gnulib/import/fd-hook.h +8c99bfe4572d132e7056fb2f18bdc1aa gnulib/import/rawmemchr.valgrind +b71caf88a20998473a4dc70d1cc38afe gnulib/import/locale.in.h +5aad7d9cc7035981773ed09154e77df2 gnulib/import/strerror_r.c +d8f0a40aa02e7d71fa266925034e0c14 gnulib/import/rewinddir.c +e37df445dc4e8f8a1de8e82c3c845408 gnulib/ChangeLog +f4ead01b94b75ddd5c99e6a37f1d7074 gnulib/configure +82dbf439502c290ecf53c78410b1df41 gnulib/config.in +59b799a45760214b2606b938d8b31208 gnulib/Makefile.am +0e29ac405aeb92b3f1146e8e4fe6c415 gnulib/configure.ac +7c3a3fd63e3d5bcb64469bc4cc6d7344 gnulib/update-gnulib.sh +b671e813c7d37e4a334a940a38236ff5 gnulib/patches/0002-stat-fstat-windows-older-vista +f9e0c60f6e13c4565c1db1036e519f1f gnulib/patches/0003-stat-fstat-windows-old-mingw +1735888318a169fef98dd1e9f1c4f8b9 gnulib/patches/0001-use-windows-stat +335fbbd4373391bb43e70d677ce8a59e gnulib/Makefile.in +41137bc25059c3b76ac8448d2c280479 gnulib/aclocal.m4 +350741c20c0c184ac1178f805f3a3c1d gnulib/README +82cfbbadc522422bbfcb9c659e421923 include/fibheap.h +be0399077908f086775f1dc9aa63396a include/ChangeLog-2016 +b564b95cf65bbe0873727f68ef98ead1 include/gcc-cp-interface.h +310ea0fd94a113f27f18f0586426fd3b include/safe-ctype.h +c35fd85697ca99926f630df8d7befd26 include/aout/host.h +ce77417f7a6b815c8b1fd23964e17ea3 include/aout/hppa.h +829f824b8730d2969503eaed15c0cf91 include/aout/aout64.h +b21cf2ec557184abd01d41430bf27416 include/aout/stab.def +d648b1263fe90f97b6f56398612f81e5 include/aout/stab_gnu.h +8d8aa9eeec25b25da4bfafcc670162b3 include/aout/ChangeLog-9115 +30129609dee6c787cd9799e902f3bfc0 include/aout/ranlib.h +ac570178b9d67567b0b4576d2304d1d3 include/aout/ar.h +03e2819bdb3231c80f72837f456d1d19 include/aout/encap.h +d0265b9508ff19ed532ad141a490e877 include/aout/hp.h +a0363c7dd3e157ee8baf826c7ae0ba55 include/aout/sun4.h +c1dd00b887426079f96bf85b24d3687c include/bout.h +a3a5a1f20f63044bf9f94c8c02d2c8a2 include/ChangeLog +34e75c87c240012fdefbef7e8ce87647 include/symcat.h +41879305404d3b06773b10ab3fa44539 include/ChangeLog-9103 +b3cac4eeb6f7177f068a362c1990bd50 include/fnmatch.h +abe9186aa2b65b000546c8158085dda8 include/MAINTAINERS +7ac36095c08a8aebdddc160b61e63cf1 include/som/clock.h +5a331f0f3cc8bd5727ca9078ccdd7bf2 include/som/internal.h +b00b231a6cc0b5dbfb828622501e5cfd include/som/aout.h +ebea4fe7aa69a6072cacebe4e6575024 include/som/lst.h +a126860582100dd97b0464c8382b6f36 include/som/reloc.h c8de48c3d7a8de69489757d4a947bb9e include/som/ChangeLog-1015 -2dc12b1ce5f1103e38d9f88589585fd4 include/som/lst.h -26bb7829054e7458c4265f1b72ce7f30 include/som/clock.h -7c5255154d5761541c7bf4f94160ccb3 include/som/reloc.h -16ddc3f312a91395d6b0bc3b13eaf576 include/som/aout.h -a0a94966639af672525c11c3938fa7d7 include/som/internal.h -d750811f265a98ad2dad444683286299 include/gcc-cp-interface.h +ea11197afc87cf9d943c66b6d0535bc0 include/filenames.h +90ff919637002f8360dd6cb04113bd8d include/getopt.h 73d0924b3262c7d67522ec24dc3f1596 include/ChangeLog-2018 -6eae65d423b6de5805d8a743ea5718cc include/gcc-cp-fe.def -f4264fe9131c2274d2a1fb2f125c9ce3 include/binary-io.h -53bdfdb5cd3c0c7831611602041cda52 include/xregex.h -05e2123cabda5b12a8c7d42be99e2a28 include/xtensa-isa-internal.h -9aa303d1f9e66b4bccb4aa692ca0cc47 include/progress.h -3bfff5baa2e12f05c74e4fc99573d5c2 include/elf/i370.h -9a158acadcccf917edc1370b4da173e4 include/elf/sh.h -08c47defffe41a3df6649a913e6a6c7e include/elf/mn10300.h -249de5ed8b6619943344a22d3b5f5d9a include/elf/external.h -747eba1c4121c8e42d08e76a553f7fb5 include/elf/alpha.h -b6a0b385587a850edaec523ecd232aea include/elf/moxie.h -122d3622e85a5a4c2df2a5355dc80a86 include/elf/bfin.h -a81641f59159522213fa8c0b25e29b60 include/elf/arc-cpu.def -b1986f11d3dfa302e1fc88347daa6b29 include/elf/m68hc11.h -6c6bda4e852953b0df02185922d282ab include/elf/avr.h -fc825a42a753236f4d87e58b60a26916 include/elf/dwarf.h -6fb15f36231a4647055b9906775465a5 include/elf/lm32.h -8eb428fe5330763df5d4d828f6008f48 include/elf/ppc.h -bcbeecde92bee1740b4be0532624d758 include/elf/ft32.h -243cdc3b756a9741a3a6c6d1edd0ae77 include/elf/xc16x.h -621575c56912a22acdffd7c78c920cc5 include/elf/mn10200.h -17ac9f5e0236661c2b00cc73d728aa88 include/elf/i960.h -2201ccb54c2db4ebd6ea5d57ab443a3a include/elf/v850.h -9c0cad5b640fc0fa448a27dd604aa03c include/elf/riscv.h -eb0ee0723537d5c81bf78e7a2c4f8f79 include/elf/pj.h -d1f327d47775bb6bd140feec2ad608a9 include/elf/bpf.h -80251284c747e3a323f34bb74514f8c7 include/elf/vax.h -23f16f06a4e32e1902350640ce2ae210 include/elf/arc-reloc.def -d820480dc99d50b4f8a9a3024e10cb3e include/elf/d30v.h -767ee5c974ecaa5ba1b551bb62cc0182 include/elf/tilegx.h -ae1f89c513e2f2876ec813c6539d0a80 include/elf/dlx.h -5c4d843cd4bcee7d7c72e04e1afed807 include/elf/common.h -194da0b669108f784d5fb2f40ff84d9e include/elf/reloc-macros.h -9723f9f1aa12d675a416d39cb481ab02 include/elf/mcore.h -40d2a47e2b714858672c7ab466090a35 include/elf/mep.h -80bae8b82d8a9bfcedb407d5d49e5066 include/elf/metag.h -7ddc831ce4fe4edc5644ad803b367e49 include/elf/pru.h -70487c0aaf48a7589bc9fb3ad8563295 include/elf/s390.h -91207102bf61d16c41c4c9ebef6e80af include/elf/visium.h -b05999cf683d1c770d24e9c0e4519dee include/elf/xtensa.h -1a6622e1f246f91a2d489f2750f21401 include/elf/tic6x.h -53afc67e627a11d1cccd7b9895615dee include/elf/mmix.h -eb6ea09d8e862675e021f85e34464c01 include/elf/wasm32.h -da70b89ee9609d9de06fa8ca253d3dd3 include/elf/d10v.h -93301d8c43c9df817088a28356f4efaa include/elf/msp430.h -247602fd2a4cdea7eef9087adabfea4e include/elf/sparc.h -245c056f42d8f1c4396a8c70a63d9a55 include/elf/iq2000.h -f15ede675afcd269221619c85f135419 include/elf/spu.h -132295c9a2d6b1a20f80fd9a120bb637 include/elf/m32c.h -5b01a2b338e65d1c9080714456749df2 include/elf/tic6x-attrs.h -bf6d491104c0cb3df582578374f01439 include/elf/arm.h -9afd21479e4e30cdfcd8421afb6a382d include/elf/hppa.h -756e5dd76de63c98dbfca5950f3599cf include/elf/frv.h -241bb8a6eaee31dcb4d16d558758f6b2 include/elf/xgate.h -e55ae17629c6f1b521ef3c05a83a7ed1 include/elf/mt.h -06d1c1cff1369670c43997564ce0c26b include/elf/h8.h -6a3c4b5e7e678773c4e139ecb19c3551 include/elf/s12z.h -41da3b7df1363872f9ae1e1feb478e85 include/elf/i386.h -d5c76dc11ccd4876dfd01bc068d1b85e include/elf/vxworks.h -b41638b6e54931a6b08056f8b43d9882 include/elf/x86-64.h -d57333d0a57366a2f9b10bb99a22a141 include/elf/nds32.h -89637f2ade41ea5b6b9f0763b5775446 include/elf/ppc64.h -935147400800af889568203662664cbc include/elf/fr30.h -17adb45b6cb82568767333037699a6bf include/elf/nfp.h -dc4a3ecff9763b8bc15df09db5cd86a1 include/elf/aarch64.h -78dae0920dbd092662d60ce0260ab14a include/elf/ChangeLog-0415 -63ca43d20e405f569d323ba2606685b4 include/elf/or1k.h -0d2dad4588718e014eb4bfb0cc728b48 include/elf/cr16.h -29ef5db8a4d7311e9c49e228dc19e95d include/elf/mips.h -a7f1ef643830c75a1ade997242117a7a include/elf/cris.h +3564b40e823958c8f5512f945cc56b54 include/dwarf2.h +4edf065770486b1b7a5d19a727fb9483 include/dwarf2.def +43f2ad788688cb28d23c2a4b78cc194b include/os9k.h +dcb1773a033208d8841e7aeb934766f1 include/timeval-utils.h +3aacae8185fdd217c5e2d7117841d5f3 include/oasys.h +af93678ef2a3968e8c3cac8a61945fea include/ctf-api.h +6c83d27bff34846af1fad683ef5a77e3 include/xtensa-config.h +d98d97ca92d6e9c1105c49ec6f0caffd include/splay-tree.h +a0fa47aae1246a5d7ab2cafc88f9d340 include/dyn-string.h +ca76b64dc47d03c76721ca95e36c7e3a include/ansidecl.h +bbcb9f48c2a005e0ae11abf31e419627 include/hp-symtab.h +69d8a223d4cf96309621e3138b73eb9d include/opcode/mn10300.h +8fcd4ef5bbfb6cf34db2c48e96d0c7fe include/opcode/nios2r1.h +2b2bb7e76ca9254bafbb744a4f86c2a8 include/opcode/bfin.h +2e9e881d269c82a61ae16f3d371b512c include/opcode/nfp.h +57c4790ed33a4f0de03592add98b5076 include/opcode/spu.h +0e38062ba4db9a0104c35bd9d67f8fac include/opcode/i386.h +fcd02b5a14cd93015e4c2cde6ffb7adb include/opcode/s390.h +b1fcad9e1f3244ff53e092aceebd7710 include/opcode/rl78.h +0b2d03f46294b90d9906f6bc2ef4d224 include/opcode/hppa.h +f0556d8831657559f813d3ceeadae7fa include/opcode/riscv.h +9cc44e8b4a78d30e8aca091b79cfea96 include/opcode/sparc.h +a342d85fea1e2696d1608befe2530137 include/opcode/ChangeLog-9103 +02c54b33aaa9c7a7794f21ef0ffdb940 include/opcode/v850.h +1e1cade9eebedc87d278e845f22629a9 include/opcode/s12z.h +34e10791d53e80ab84e329210755bf5d include/opcode/d30v.h +224a34ced3aa72ff015370e69d5efddb include/opcode/convex.h +2a1373f0d83f09c70f46bba4b902387f include/opcode/csky.h +aaec65598e3400edc3ddfe6ae5d07bfc include/opcode/tilepro.h +c989c5f80f03f078664f437585375860 include/opcode/rx.h +7ea571a4452dc1b5182c1a1c42604371 include/opcode/msp430.h +063f82cb72398f9936ed96846e30313d include/opcode/pru.h +4be8b71de2d31d9ad1be1a161366d253 include/opcode/mn10200.h +dc0a123af29b204266410e9f3abaf569 include/opcode/mmix.h +08d3f1ea4424da322f4c8f3186a82809 include/opcode/xgate.h +5c4089e768d4aaffd773770bd7884f25 include/opcode/h8300.h +9dec7ddebd35985b73364d1373c5768b include/opcode/ppc.h +b25171d2669e90d7532d49ea49e96429 include/opcode/nios2.h +b0663896e043ee3a471190d8de522f61 include/opcode/moxie.h +fcd51ed5d3b91a0421c65b7cb9778bbf include/opcode/wasm.h +8fabaf447310440676a8753a410cd7d3 include/opcode/cr16.h +2085d27b71176dac340f8252d29fc9ca include/opcode/crx.h +62babe8340c05fbbf8e796fdd83087c1 include/opcode/pyr.h +5396581d21d5b31108648a80b6b2804e include/opcode/spu-insns.h +400e390a11f6c95b94c4a859cca088d1 include/opcode/mips.h +4437b65cbcfa2135042f62cf5dfb8111 include/opcode/aarch64.h +ab1eb3205166f3153029643609ca05d3 include/opcode/d10v.h +017c1c2a374a6897dd2c7305b46be399 include/opcode/riscv-opc.h +6330212b0dbcfb128af47516d646b5a4 include/opcode/nds32.h +f2ffc2656fdeba93b0ed6c6247cb78ba include/opcode/arm.h +cbba9457867c42b9ccaf90e2473e0c53 include/opcode/tic6x-opcode-table.h +6676b1e35b277e2af229d45bc777dae5 include/opcode/visium.h +2d6f18c4eb278196d5db31aee4e5673e include/opcode/ft32.h +10ab19bbd3a5b3d67b0694fde0468307 include/opcode/pj.h +9f97073144f46cbef4f1e7c7bcee902b include/opcode/tic4x.h +187a22304443f7b5c23f050a1c3d50b8 include/opcode/tic54x.h +86d72b976dd2b6eb63f177bef9bdd07d include/opcode/ns32k.h +a5503428c5ce70e97539d7cca8c99528 include/opcode/arc.h +37fe9cef8042685698728e6cebb6377f include/opcode/np1.h +3afd4f72a174eb96c35c83d10da635d3 include/opcode/cgen.h +5ee441adf83a0fb05555740f5dbae79f include/opcode/avr.h +0340273c405b2d2f8e519b1b5cc45be5 include/opcode/m68k.h +45e19e485e62ef01ce9f1eae2ade707e include/opcode/tic30.h +94d96a1526676abb38a82238d0455fe4 include/opcode/score-datadep.h +c544e0bbc8d28ca7d5f95369106f9753 include/opcode/metag.h +f316166b55848c28504afb274b781218 include/opcode/vax.h +4b9983f25934a94c09d0cfbf78e53dbc include/opcode/tic6x-control-registers.h +48ab65e4ed14b4fde6f8cdc93b1e875c include/opcode/cris.h +f17e4602fc8fbca40a4aca353123a64a include/opcode/dlx.h +7f56419ac25d563d02d00de1abbe1119 include/opcode/tilegx.h +28c2a23fe2567ca89ea660898f684d06 include/opcode/tic6x-insn-formats.h +a3c145abdbcdfc3200946cf5be812821 include/opcode/pn.h +ac914ce9ce888eb335489b4ab301a5fe include/opcode/ChangeLog-0415 +158669c684b8e2f16cb976af4991a49d include/opcode/nios2r2.h +3345afdf5dd11078780f4bc9bd4b06ab include/opcode/msp430-decode.h +e4c6a7f722c9c0dd6fbfa18f15209164 include/opcode/pdp11.h +e5b33acefbb0e2d9505b2bc2829b0227 include/opcode/tic6x.h +014e59ddf316133c76573496c52fbf2c include/opcode/m68hc11.h +861569f24436c0a9e9c300c81f6d855f include/opcode/arc-func.h +4df81b2927e0e82b51fef885e83aadc5 include/opcode/score-inst.h +324833a15f87543b4e75d7aec2db2623 include/opcode/ia64.h +ae2f83bf9c8ca18865af70ba0201b430 include/opcode/arc-attrs.h +6eabcc97e5f14e7df0b615558f732534 include/opcode/alpha.h +ef561aa9562375a178f750b4fdd4a98c include/alloca-conf.h +6086ba5bfc8fc0313d836fbd5ebbaf62 include/ctf.h +05818513238b7ce854a37f55b18cfb3d include/vtv-change-permission.h +7b85e8b891ca67520ef28e1bce88e702 include/diagnostics.h +047efbb4b6e35d3b6146112e8266e3ae include/elf/mn10300.h +7487b8cc4246aa9a010ff0e2e96d3a90 include/elf/microblaze.h +8b3d4025f8c02b73b0310abcdfcc6843 include/elf/vxworks.h +d8feb776fc6b8389abafd419711b5dfd include/elf/bfin.h +0e550eda408232702b85c8943d45e104 include/elf/nfp.h +62c5d696a86fb3587e40d81db4492a32 include/elf/spu.h +0a715f10365ab4e5e6dcd6dac39464b4 include/elf/z80.h +7c1ea5a6c82974c9d991316e14ddb2d4 include/elf/xstormy16.h +2149464e5c7d4720ee78908d3a1e2212 include/elf/i386.h +a9e6066502995e1c7a671f0cf4efd650 include/elf/s390.h +46d6401088c6b1fff89a3461d9d4e99d include/elf/i960.h +a0decf9e6a5db78398582458d38a369c include/elf/rl78.h +eb99d9ec07cac98dc05a5ba2cede38c3 include/elf/hppa.h +c18945954b72423850336294ccc4b400 include/elf/riscv.h +798df1b04b4601fcb057e99fd0588ccc include/elf/sparc.h 4a26c010ce1159365c425f0df730a09d include/elf/ChangeLog-9103 -705444330baeb008026abaf67b5c64db include/elf/score.h -85a8a6a8e1d558f5fbe74a77d4bc8141 include/elf/rx.h -de4aa5885583650fdfead22fa999d4cc include/elf/i860.h -890b1eff9c65998e1b083ecef4daff39 include/elf/epiphany.h -8e9d1c71900dc7c8980b5708af638459 include/elf/internal.h -e00617bb07b245d8a9ec2f24b9bec5bd include/elf/ip2k.h -f83cde6c43df420ec339a10557499108 include/elf/arc.h -15d0700f93555779ab91f7c541dd29cc include/elf/ia64.h -5afec2e4780af1f6802471c77de0e236 include/elf/tilepro.h -dd3775c74cd403734138289a203ead6c include/elf/microblaze.h -e75afce47994ecc03e6ccf35e655c17c include/elf/rl78.h -c3bbb69c9b893ddb747779d3ef10912f include/elf/m68k.h -46afa87651586c2acc99b5fc45a3c1f0 include/elf/csky.h -db15a571c916d0672d242f6b9b535ee5 include/elf/nios2.h -e0c9e1497b4ad17e61abaa29a2fcb6e1 include/elf/m32r.h -78940ca278d0ac0c782a478d1283646f include/elf/crx.h -0967e625c5a7b41e21ba1e3eff43a4ef include/elf/xstormy16.h -a56532338a8a14c1dd23ce59ec225ca3 include/getopt.h -4bcafdcd91029b5b475f2e8e7b038a61 include/coff/pe.h -71f6330cd48a6ed072ef4dd70e2c6fd5 include/coff/sh.h -5f38b270b2e0c66ba781afdfb25a8653 include/coff/external.h -3bc61976cf0c6ee2ea159572e77f3244 include/coff/alpha.h -58107453a25e4e0f298bac6becfa12b0 include/coff/ecoff.h -52eb233d7a717889894a17b69b64d6ae include/coff/xcoff.h -2e36a9c714328c7ad7c4be00a1783c56 include/coff/tic80.h -49952fda1e759e5aa659f8f78d7e0ba0 include/coff/sym.h -0e8bb67d00a546f611cb0de88d33b4ff include/coff/mcore.h -960b379994c1c37f8c135c5e29a32827 include/coff/tic30.h -3f75296066b7661d07a201895ea3cf24 include/coff/rs6k64.h -5b456c260d05fd34382149e76ea13751 include/coff/tic4x.h -7d1cd09252dc172149940795c6ea7f23 include/coff/go32exe.h -7fa3087df65765a929241de73cca9bec include/coff/x86_64.h -56a2920f2aa6ab7227674812bd3f07df include/coff/tic54x.h -00663df0b35d5b951fd7144f2ac88896 include/coff/arm.h -3464adc662a349d9ed88a2800e37bb65 include/coff/rs6000.h -ea8a44a228eed24e7d5eab08bb58cb6e include/coff/msdos.h -715e0a531c8580416c0ee73aa1fcba1d include/coff/i386.h -81d0a3f38700b7ad696d7e3be2e69aa9 include/coff/z80.h -7f08ff46b875f7e07439aa6a6825a4e3 include/coff/ti.h -4d7646c4b5475559014c76936e6fdeba include/coff/ChangeLog-0415 -e5a794d92fff9ee82154f9d9e8f4fc66 include/coff/mips.h -32d96353a244980cd6b987cb04c17462 include/coff/powerpc.h +966025de6e9ff9e78a4a800a449dee83 include/elf/v850.h +cc1066b8e94d5539d1f58bbfb26112e7 include/elf/bpf.h +f2b91f948bb70f246c56d71cd22abaf3 include/elf/mt.h +a8afd5a0584c6be702f737f36eac62f2 include/elf/xc16x.h +0bbec33989cf9eb0a26061cf2cf9799e include/elf/s12z.h +b62db96d4c9f29fed450c33d7df77e00 include/elf/d30v.h +029bc983686c7e3bae7c66f282c93856 include/elf/csky.h +4049bfbfb38201c0eadacbf290a8e62e include/elf/tilepro.h +b9aa9e386ee8b8a6d854103bf06eff7f include/elf/iq2000.h +01cbe1c11de154636d03f48d6724ddfe include/elf/rx.h +c37ccab3c2a8e7f4dab5f0001baaa36e include/elf/internal.h +1635d2115c15e9dd50257e222b8b9711 include/elf/common.h +d73cbb3234458e58c7c1bc584ac44bac include/elf/msp430.h +26f96c922af11adb8ea93b6965155057 include/elf/tic6x-attrs.h +5161833c4a1922a66b85a7b1e060be25 include/elf/pru.h +e7510108178e2d9a45236d430f8b04ab include/elf/mn10200.h +ba75a6b4e28feb2231868c644daeec46 include/elf/mmix.h +60c2454c5cf41af50758155c447d7986 include/elf/lm32.h +09927a384f90c34ef77251c675a36b02 include/elf/i860.h +b2e49f2bc3e79b6e789d56e620256970 include/elf/mep.h +b9c47b7c64c263ee53c8abd24c059cbe include/elf/reloc-macros.h +5d020c4db36b4b0e1e32fdb4f1d0dab9 include/elf/epiphany.h +72ddab0f4efe3ff71da6c473fb1ea2c4 include/elf/xgate.h +2bc76bafb4a64cc37f4125b345c2cc1d include/elf/or1k.h +76143f2a50e9434e9c9d96830a5c2c24 include/elf/xtensa.h +a00dd5bdba504ed85f2b67ad26fae358 include/elf/m32r.h +0463033bd9bc6409f69e105c4c47ce43 include/elf/external.h +57475bf55591c18efc21b72634eff380 include/elf/h8.h +7a30d2a924e6e720bc29cfd201955900 include/elf/ppc.h +e5e702088c56532b6ed1f17c81ec133d include/elf/nios2.h +731622bef6e57e483029f7653d9edc22 include/elf/x86-64.h +4ee6af616b0e3cd5f41264c10a112715 include/elf/moxie.h +418cfd6e1636ca3fedb98cbc38dce6ac include/elf/cr16.h +1f6a57ed37ad312e98b14b18e64c742f include/elf/crx.h +45220d7941de06a217ee63522830e1ba include/elf/wasm32.h +2050e68b885640b197d02f158c17113b include/elf/i370.h +1b8cbaff4d30ce79f7abbae7ff79d670 include/elf/mips.h +ca7111c82a3b728b1f01c40effb220c8 include/elf/aarch64.h +a944e80d896b004df8fe29b5950dfc6b include/elf/d10v.h +dbf91e1591be5a7612b5b8c9f517df10 include/elf/arc-reloc.def +7c1b69771acd179db39ba95452a95253 include/elf/nds32.h +4c952fa07a6aebc87b019e383c8e7a13 include/elf/arm.h +d0f9ed97c8651ed417976aad68c1afec include/elf/dwarf.h +f6ca7b1eed5bd6f75d7fff39334efcef include/elf/visium.h +4a29b73de310d5177923e826caf2e7b4 include/elf/ft32.h +a3c6635a921e71de5587723f12b0619d include/elf/pj.h +f77f656e6247c339785f90a0ee507c36 include/elf/mcore.h +6c0e392181ed82dcd4422ee3ec2d4237 include/elf/arc.h +68c4c9599cd495668ad4a59bcbdaa955 include/elf/sh.h +80f4dc44672c5bd4b0729467ccb1e93e include/elf/avr.h +570cec8d2d7a748ad09b92e911de09d5 include/elf/m68k.h +898804522d6039bd6825f69f264e385e include/elf/metag.h +46fcb9dc9f686596083bb7acc88c78be include/elf/vax.h +e08a199b7d2052ebd2df85599bc148b7 include/elf/cris.h +d862c553a6854e42f4a476a6f6f65d11 include/elf/dlx.h +f5276e44ba76ef9888723f46437eed17 include/elf/ip2k.h +7d8b48df9e86dd34c28e10624bc75c12 include/elf/tilegx.h +9e55f69f5d755e53172d4c60911e6568 include/elf/frv.h +78dae0920dbd092662d60ce0260ab14a include/elf/ChangeLog-0415 +12ed7ebcc0dddfb657868a9cb26d810a include/elf/tic6x.h +0f4dbac2c3238d80dfd71b0a63e85d28 include/elf/m68hc11.h +2f4c7247eb6cafd4e73a6bc83cc4057b include/elf/m32c.h +7badc8dbb549ae3d61dea390dc1c9d72 include/elf/ia64.h +1ac08d753e9d9e7b7ac8544688d97920 include/elf/ppc64.h +9f514b0d2e0cf7a007fbc5d656b6a222 include/elf/alpha.h +2ba8b4c28329c1775d03fa2d640db98f include/elf/fr30.h +f47ce91e044a10a83ed81a914bd90869 include/elf/arc-cpu.def +1d9f39d18ea900f6e54eeca59c9a843a include/elf/score.h +699b51d3c09b67570bfb5a76665dc536 include/sort.h +70198c8f275dad5b18863af1974bd9a5 include/gcc-c-interface.h +59530bdf33659b29e73d4adb9f9f6552 include/COPYING +f0cdd5fb48621662ecc1681d6fc43ab9 include/dis-asm.h +fe99a5d655c650a18b34e92c4e05f9d0 include/xtensa-isa.h +ca32a1a1a7a3c145b39a44f35b6b103f include/demangle.h +8b8ec029bf92ec21185437b91b921d67 include/hashtab.h +c650e5a63062d4371d80741048292bda include/ChangeLog-2017 +50e100c98a7470f850101e4e6430496b include/sha1.h +911c408325ac421cb11cfac2e3e07624 include/objalloc.h +13e0194dd62a3563ba7c42d3db663f36 include/xregex2.h +03a779c5f526bda453c7dbff250d534d include/fopen-same.h +4cb7a2cc74ed11efe80c826d5ce999e3 include/xtensa-isa-internal.h +81418d6f3620ca052d80e8b80ba761ca include/plugin-api.h +561fbcbf31d734d3cf7a028335bb4407 include/binary-io.h +53bdfdb5cd3c0c7831611602041cda52 include/xregex.h +6fb4f3a2b7a04f5d818c59e3811e04d3 include/vms/eihs.h +0f20c14e9137ea0f62b2860eda19154f include/vms/esrf.h +fd22168a9346a37d05cf61dd93c9ea6f include/vms/esdfv.h +74f0b12635a583f97a3101d46b05fe1f include/vms/esdf.h +a0d0bd1b00e3204f9d3e9daa997675c7 include/vms/dmt.h +621d043d0b78debe017768095379ae9d include/vms/eidc.h +caec7f4e48fb5976c0f09a1737ad7ddf include/vms/internal.h +b762d5a63dc4909da63f42eda14ba620 include/vms/prt.h +db1d426b3869e06ee05c846503b8e32f include/vms/dsc.h +202a2a7b1d6099aa0fae26e1bbd3bf09 include/vms/eisd.h +a26a09c4de28b460dc42e55d35aa7aab include/vms/egsy.h +d06b280a447ab092db22a6e558210ccf include/vms/egst.h +82553b24a90557dd4b1eadb5c2996bad include/vms/egsd.h +dc6657ef5f9f61b961602151045b0339 include/vms/eeom.h +47427d73d1633aa8ff4675ab89157086 include/vms/eihi.h +3e8a1f329a96ae823ed3129882468d12 include/vms/eihvn.h +024bc52881847aca5c5bfe4f32d6dce7 include/vms/esgps.h +c237cee3578b5463a4907dcc40ac85fc include/vms/eiha.h +4817ac011da90347052e283509e1965b include/vms/egps.h +558064f9d8c8551e691035fc53a5810c include/vms/lbr.h +2ade95fb9ff2200b4c96b6b4f31cd915 include/vms/etir.h +3dce499fe6187d7b3cfa50d435b1a505 include/vms/emh.h +670b64b2877d6845cc4da652fc973cbf include/vms/shl.h +6046b0dc7106917e2d322f98aa7184f5 include/vms/eobjrec.h +dd7a1a9d8b5fede03a1f6b7d1ca14fa3 include/vms/eicp.h +1824d951db925c21360401ba1e2e21cf include/vms/dcx.h +6c7f835fb8a267198bdd2c356d500c34 include/vms/dst.h +04bd9ef53b8b98edaa12b87afb82ea5a include/vms/ChangeLog-1015 +068c3c17adb902b461b4fe3f1d3614f1 include/vms/esdfm.h +9b58feab6fc48f89c678be41225c8abb include/vms/eihd.h +407bdbaeef9acebe38e90aa9b2930090 include/vms/eiaf.h +b30c7cc31890b990fc1316cd1afab307 include/lto-symtab.h +aea7ba511246e0783bb91a3c0a72f5a4 include/fopen-bin.h +c09fa4af3984d6862addc1884634488b include/fopen-vms.h +e826605e75fba0e8f5b0005f36d05d91 include/coff/z8k.h +00e3a245789471d764ecb02817eca193 include/coff/z80.h +35e570bbd75ee62e92073492c710b05d include/coff/i386.h 593962175d4ca4386cbbb87fb4fe5e09 include/coff/ChangeLog-9103 -93969b268fdb958c56fb95120881a6bd include/coff/internal.h -e237df9cdda010287636a2321739966f include/coff/z8k.h -d03846327db8e11b60690eb1f315697c include/coff/ia64.h 9548a06f2a9fb6be7f272df74ead65b7 include/coff/symconst.h -b1173c5341297c3edd6f2409764dcf95 include/opcode/score-inst.h -cbbc16a797ea9336258f2e751ef742d6 include/opcode/mn10300.h -51133f070eb6adf52e755eca73f6c8cb include/opcode/alpha.h -2f8f8136b1bd979df964c98519e74dfe include/opcode/moxie.h -11e5a46ecc2b70db52a63966295a0a96 include/opcode/bfin.h -9b46eee7fd6039bb7f6a13c25ba07a68 include/opcode/h8300.h -982574a370a4f4e6a42e81864d190289 include/opcode/m68hc11.h -3754997ebf3399bbe64578a96faa4747 include/opcode/wasm.h -fbc138c2cff4fc32cbce1757d9fad6bf include/opcode/avr.h -e230b20031573fe683d55634f24ac595 include/opcode/ppc.h -3a13dedb608d9e34609db407e66bf055 include/opcode/arc-attrs.h -08b5d98379aac78c177f8dba86fc7a90 include/opcode/ft32.h -8983d6b64ae6440800db8b345a2a3499 include/opcode/mn10200.h -4600cf15cbdfaafff3f9ac30d600b47b include/opcode/v850.h -e45f01b66dda58606c0e8bcd65a23430 include/opcode/tic6x-control-registers.h -68962da4e536e648362eedbe48c3e050 include/opcode/riscv.h -f2b395195246827e2a939054d53282b7 include/opcode/riscv-opc.h -ff4de58fe4da0e466c3ea5dc7ac7e439 include/opcode/pj.h -23f176a58a949c89d674921607001205 include/opcode/tic80.h -aa15011eebc650c52482e7e3614a844e include/opcode/vax.h -b5320505266daf995db611a39584bc7e include/opcode/d30v.h -e38453a7da695e8c260c4adb63388fb8 include/opcode/tilegx.h -89a6322ca5dcd9f84a45ada31255f271 include/opcode/dlx.h -8f9ab0896734b7704a4b5ecafa10769c include/opcode/ns32k.h -074ca1d29c2e8f034122d2f12bb61fe3 include/opcode/spu-insns.h -1e60c5ff051e614ab23613546588daea include/opcode/metag.h -234dcfbc2c5c5c72f3ad2a205bd47531 include/opcode/pru.h -14f74881c049e81692a2c94887ffa98b include/opcode/s390.h -a8451cae07e1c3ddad3dd2d55428aaf9 include/opcode/tic30.h -547082fce2294dd873c498d0978262ef include/opcode/visium.h -7d9073913e7c2363c8d949d31910e9b5 include/opcode/tic4x.h -ee3c6a739c960907d59dabbebb27717e include/opcode/pyr.h -eb183e536473ff40f8c2ddb75926e296 include/opcode/score-datadep.h -e7ef791c6f9c0fbb18fe3384707b1d4c include/opcode/convex.h -33fdf89e62767e24577755b130cb2cd0 include/opcode/tic6x.h -e4aaaed05751869caa2f17657e644168 include/opcode/mmix.h -d9727dfe49b84abfc017b07f0cc48773 include/opcode/tic54x.h -34645fb9704ec1cfa21c2aa3331b2a4e include/opcode/arc-func.h -4b7f602012a67203be00d24a0b0c8dfa include/opcode/d10v.h -c03309c6cd24aa6a702fe9324931e945 include/opcode/cgen.h -e6715179a2e36e7c4c7fd80c0dede6fc include/opcode/msp430.h -a5b9f6daca51a885565701917f39b739 include/opcode/sparc.h -26e9d7d99f846ff8c42e798f2abd2e3a include/opcode/spu.h -1983ee0567df17855c56ca2078d57379 include/opcode/arm.h -db564fde8994756b41a82b425e5baba4 include/opcode/hppa.h -ec660b7d6e8db395dd9203485b28b080 include/opcode/xgate.h -8a2aefad58c4456f06ed14b6d11c5141 include/opcode/np1.h -42b6173dac586010dac4a5853e8ea569 include/opcode/pn.h -4cea83c071dc63f75b973d6846ed9d03 include/opcode/tic6x-insn-formats.h -91892bef65d868299ec34b488b4a171e include/opcode/s12z.h -de8153e4afd7fb2fc1150db576cfca05 include/opcode/i386.h -76d4302b21cee2976323c41ad0091429 include/opcode/nios2r1.h -cf4bc58c72cdd3cc7bc8d514e3f41413 include/opcode/nds32.h -a796ebc0022bb24236b9f3033b9e9b12 include/opcode/nfp.h -631339f59083131a9f6d496d0e4fb613 include/opcode/aarch64.h -ac914ce9ce888eb335489b4ab301a5fe include/opcode/ChangeLog-0415 -bfc592a59cf0cdbc1a4131b602fdd37e include/opcode/cr16.h -1872437a775abb6769374009e02e0223 include/opcode/mips.h -a34ebcadd9ebde14cd94a465c4d69c44 include/opcode/cris.h -a342d85fea1e2696d1608befe2530137 include/opcode/ChangeLog-9103 -c3959f65910b2252ee6437f1d6de1a10 include/opcode/pdp11.h -cd1c32a94c3fff37c729c33f96099aa3 include/opcode/tic6x-opcode-table.h -c5908cd06ef19f2f3fc7c47a1566d724 include/opcode/rx.h -8848834a30a76e2ad18daeead30c2d97 include/opcode/arc.h -5313007fa1136b5ca63cac94f6a4fbf6 include/opcode/ia64.h -c3659577e109e007568da092c16589a8 include/opcode/tilepro.h -a2d7404ced401ad28f5a6cc3f130b317 include/opcode/msp430-decode.h -e812a3073ddd1cd1b48d52f77388bc52 include/opcode/rl78.h -9f07ddffe7b9c8b7cb54be496cddd89d include/opcode/m68k.h -080b2f12b83efcaae8740d3d8037f381 include/opcode/csky.h -cdd088142d15fbae67f78f8aa2258c02 include/opcode/nios2.h -c87404fb2cabbe5d47aaa66f80467771 include/opcode/crx.h -19a4243a780a0f0804dad752fb42450a include/opcode/nios2r2.h -8673aa12a3493cb537f1220aa799b950 include/gcc-interface.h -a8cc89ec2010ea9b41758d16b891cb1c include/sort.h -352ce75976e0a5970298d574ffdf743e include/filenames.h -d3976907c9252ef4d60b9ac80987eafc include/hashtab.h -f36e4d79c0f246bc8ff8d8d8ea8c480e include/safe-ctype.h -eb7ab2f3097121a9154cc0ddecf661b2 include/ansidecl.h -7f9fcc517ea3ab1c28623514c37a0279 include/ctf.h -d157d6cd126bcba2d49c3bab56ebfb78 include/hp-symtab.h -26291ebb362b400e2ada6f03d9a7dde1 include/xtensa-isa.h -7d6bdebcea37593a07dbc83b45f99905 include/obstack.h -eab17a24da6d05ad9082c4c21603502e include/gcc-c-fe.def -c7a910f62f892b661cd127cb3ac63d9e include/dyn-string.h -ba6bafa9651bbef0c2a97111c88a7e0a include/bfdlink.h -97d6ac6fcfc48a9468454e047c530c2d include/mach-o/ChangeLog-1115 -b7d40d1a90119b8a003dfcd1bb52db30 include/mach-o/external.h -44a86a68976a42cd6dcc5d85c77e3755 include/mach-o/reloc.h -8fe9870f515141c6c27b34bd84c212b1 include/mach-o/arm.h -360f7590c683ca74b7dd030b063243cd include/mach-o/loader.h -2ec51dc69c53480c47f3abe0dc8234bc include/mach-o/unwind.h -88cf6d9e27ad951a06b7ed7f1a8d9fa6 include/mach-o/x86-64.h -9eb445f011416a1f28723974d25ab051 include/mach-o/codesign.h -1c47365e8a1179bb5ed903e4ab57686c include/mach-o/arm64.h -d5e3dfd7838fb1cb71e11d4ca1922294 include/dwarf2.h -b5692912b7f639c8285c77fa6ad84449 include/vtv-change-permission.h -54fd80804f45545f96bc5ca82ec2ae2c include/cgen/basic-ops.h -6000862dd91dbb3a0de46225bd5ae915 include/cgen/bitset.h -9fab225bb5729589e564a2e4f4d2372d include/cgen/basic-modes.h -37785f3eed21fc14cdc3a0b12e8b4406 include/cgen/ChangeLog-0915 -88648bd20d46756144795dc87823a8c5 include/environ.h -be0399077908f086775f1dc9aa63396a include/ChangeLog-2016 +f05e6d8d7027aaa0c42bde74c53f490f include/coff/internal.h +7020dada573ff107069db3e9851e4637 include/coff/pe.h +8cd48e6bb4fa2c7a81f797640c0e8b5f include/coff/external.h +f9698919b00c165ff2c03f51f5cb12b6 include/coff/mips.h +bac6dc4291af86ce1dd05a3970b0f5b7 include/coff/arm.h +de2df01dd0bbb2feb67e4a8c0c420e04 include/coff/rs6k64.h +b3543b979750e7e2f28571ceb020d908 include/coff/ti.h +09912489c7d43b66ff0263e636ffaa26 include/coff/tic4x.h +fff73f2e307766a440fff978c7bfdac6 include/coff/tic54x.h +c355c32c19f27d564a4ca487df03a8d3 include/coff/mcore.h +55b300adcc23260d197c56c39e1cfdc6 include/coff/sh.h +b90a32105ecea76969e83fe99390eb06 include/coff/ecoff.h +10bcd596d7b5de3bf8758ef3b2ce6d5d include/coff/tic30.h +7e23cf7eac18129df47ff69fdd460178 include/coff/msdos.h +49952fda1e759e5aa659f8f78d7e0ba0 include/coff/sym.h +4d7646c4b5475559014c76936e6fdeba include/coff/ChangeLog-0415 +f5dd32c0b001345914908064a6ed31f6 include/coff/x86_64.h +149b89596344d9cf2b3216fbbffd07cc include/coff/ia64.h +cfdb001f6197076829a0c03b28dfce48 include/coff/alpha.h +89af51b9504cf0be6e1949315033dc4d include/coff/xcoff.h +70b1a683d7b2c8b1e34d6695da65ee17 include/coff/rs6000.h +6bb3255e68feca49751660a5f62421ff include/obstack.h +61f0640e43aee3087da96c2551608af6 include/ChangeLog-2019 +e0e00bf705b3dde56c3c9343bb875f10 include/bfdlink.h 4881831953711a85f8cc56ce9377d468 include/ChangeLog-0415 -5e7c2e8aca772d2a3ac0791728781298 include/xtensa-config.h -04bd9ef53b8b98edaa12b87afb82ea5a include/vms/ChangeLog-1015 -4a668df797c4360833f16205a9469545 include/vms/eihvn.h -630ff21e3c4c85c239a7b639045c7c62 include/vms/prt.h -f28e93bdd8458fd497271055900426c6 include/vms/dcx.h -50f87ee736116dbff395bb90f91e6b22 include/vms/shl.h -bf61b6e4ad26c8503252f56a0da4fdc0 include/vms/egps.h -1e794b2bc721085c8dc2dbaae29c4843 include/vms/emh.h -dde159ae5b09a28af92a5d50b238fe3f include/vms/egsy.h -eab5eb114455e550c795eb31217cf483 include/vms/dst.h -c01f6fd3a5a0be45502c297bed0f93b4 include/vms/eisd.h -fedc18cc611032a481b7b4a7e6e5d7a0 include/vms/etir.h -667c72c15c153b28cbe146dcd6a540f7 include/vms/esdf.h -ca700077f89147c91e3c1dc4f7bfcada include/vms/dmt.h -007186e9176274650983a0ddc00ed23d include/vms/esdfv.h -1813c119e9d4be484543f9d266397d86 include/vms/eiha.h -e8ec3c8c7e2c2bb08ba224dc77e89fe3 include/vms/eihi.h -348b3b10d84a0b3a399ab615236f436f include/vms/eobjrec.h -05775ecb2aa818c96d90f7c080cdfb5a include/vms/lbr.h -ec7fcc1a419af38dec089da41296a095 include/vms/esgps.h -30d99d7068185aba7537400d2853354e include/vms/eihd.h -55b145e25d3a2eea3fe7e53fb10149b0 include/vms/egsd.h -449954d17ee1ff3c73200c0bd23af38d include/vms/esrf.h -9ede527aca43f09a18282c00ba1c441d include/vms/eicp.h -ac4b1b6e3ccf5d340f5a8fac8600e4d2 include/vms/egst.h -e25ecbd305d0543a7490e040b5fd5c9a include/vms/dsc.h -05adca80c3fec1c4ab6fe97cf7c44903 include/vms/eiaf.h -a3d0612e2296534d6e4b5b9b510dcd37 include/vms/internal.h -0a0e394489128fc42ba014b37440597f include/vms/eeom.h -ed568942eef8e248e7e2cf4adee7ca8d include/vms/eihs.h -305bcb622c25acfb3eb368dface93589 include/vms/esdfm.h -f353c433936141fe0b6e20a60af0af66 include/vms/eidc.h -16a43b00f972676ab7aed849e6921845 include/bout.h -a52df8b7759338542cfe73e56e69de97 include/symcat.h -41879305404d3b06773b10ab3fa44539 include/ChangeLog-9103 -1989009a67d82c2c2ef1e6eb67066aed include/partition.h -e44328bd57b66d8911813206c5463153 include/leb128.h -049859af7edcb8aae938574f874de3a9 include/os9k.h -be159aeb0b1728325991f7321297a3c1 include/fnmatch.h -235acd82509e52cc1f0d363b243a355c include/simple-object.h -79290e3cb1c2966101d314536d58241c include/plugin-api.h -ec3157a4b049b6de0108d774a771d43c include/aout/host.h -f0d148d2a31db15803774c72e31e05f2 include/aout/sun4.h -1be81bbe8d0716e2d13b6126a148f912 include/aout/ranlib.h -ffc5e1236861983af28e2d1058a96c88 include/aout/ar.h -146daab894d0d518c74050752ef9ef8d include/aout/hp.h -6d82898abe4c09f0670e8185d567c941 include/aout/aout64.h -8d8aa9eeec25b25da4bfafcc670162b3 include/aout/ChangeLog-9115 -00513ae3afc71148236be1621abba51c include/aout/hppa.h -b138aadaa04ad19eca30e3dba6f5f677 include/aout/stab.def -b69b57e5b98d9f30a80c6e9739539b30 include/aout/encap.h -c47583540cd8b4e425080b30e796fbf1 include/aout/stab_gnu.h -4594b4ceab79b830168f1594b24fbe34 include/ctf-api.h -2974e6ed9abe9409d54270571146b636 include/fopen-same.h +9aa4def1ea25e62d34df53c35c0a7326 include/gcc-cp-fe.def d32239bcb673463ab874e80d47fae504 include/COPYING3 -6d5c349e2a7e244361b220ca31872ac3 include/longlong.h -df72d70431e61fbed5436c090ca7d172 include/demangle.h -1028b14428da6c6ff2a4b3c41daa807d include/dis-asm.h +a4f4e7dd092b51c8ca5daf32a31f1c79 include/gdb/sim-frv.h +5557ba399531d634f89a76ca1610cd9c include/gdb/signals.h +483ffedf8618608c4395bc9c93647f2f include/gdb/ChangeLog +90a28356e1e48b5111f25446580a9890 include/gdb/section-scripts.h +844255f71e14b09d1480fcc1d62413a8 include/gdb/sim-rx.h +bb7eda7ed296fd29e1918b763efbaa9a include/gdb/sim-ft32.h +76f12a415e388a53a4f895188e8b67ea include/gdb/gdb-index.h +293addf34bf48c23bf3313b7b52995d4 include/gdb/sim-sh.h +669019f2904d9c414f1f7826c3b34b8a include/gdb/sim-arm.h +51fbd761df3791480367c739096ee8ba include/gdb/remote-sim.h +a916f9b341668d3ddf73b957a4dfef9d include/gdb/signals.def +bbffb5b1611a18b7c48c84bbd83736f9 include/gdb/sim-ppc.h +1405c3eb6939313fe51f25cbdec85e9b include/gdb/sim-rl78.h +b575e23d9173f69ae7d2c06d48d4c8e5 include/gdb/sim-aarch64.h +fe2d160820da7261abae524592433ae6 include/gdb/callback.h +d4df8cf356d538ea253b6e43664a6089 include/gdb/sim-bfin.h +6e3fa0792f9d191e027e9e649ec266ea include/gdb/sim-d10v.h +e63f5baea1bc862a2b80f017a858d9d9 include/gdb/sim-h8300.h +401634c3f435bc158ff4d2d4bf13da74 include/gdb/fileio.h +cf9542da1d3654589408c04e90f72252 include/gdb/sim-cr16.h +f21e0de448a5efcc6d493585e90da879 include/gdb/sim-m32c.h +aaf3e0b7b789a8aa0cf7582e7fdb2893 include/gdb/sim-lm32.h +62073819d982d28def6d77eaf8875e99 include/leb128.h +fb6f3aeade2871620084a56caa19722f include/libiberty.h +f06a99379b9e86fa3e274c29e8b08ef6 include/partition.h +8ff14a314a731e90bd030dcdf47034be include/longlong.h +864d7b4dc1b8c170b5a2e9ccc4eee12d include/floatformat.h +5f684cbf6121bb7384d73cb62690fb7d include/gcc-c-fe.def +59a832d2da896043248a5291867a5b9f include/gcc-interface.h +f292f6fc3de5ac0fa419c3c53bcf9ddc include/simple-object.h +37785f3eed21fc14cdc3a0b12e8b4406 include/cgen/ChangeLog-0915 +fe90cf258655934a38ca1b2356c3bad8 include/cgen/bitset.h +499f659902335cbaea98cc225a8820cd include/cgen/basic-modes.h +9ed0881b1f6e0779c56e231138e18869 include/cgen/basic-ops.h +8bf0148b90b091965cbd688ad09e8aad include/environ.h +291b2b82c7a1fc1ff395ca75e6155cb0 include/progress.h +a385bd5684091653efb6fa41a69cbcc6 include/md5.h +5ad51f321019b00fcf0dff7646fe04ff include/mach-o/loader.h +5dff808af411d036cadc5e2e2199e2e3 include/mach-o/external.h +430d8ad095542b39b327cace73674da0 include/mach-o/x86-64.h +97d6ac6fcfc48a9468454e047c530c2d include/mach-o/ChangeLog-1115 +579f44e2c361cbcbebebfa29da865ad2 include/mach-o/unwind.h +403b575a244df4bcf78f2722001e5f94 include/mach-o/arm.h +e375ae7467c44f350c7850cbe7884a2b include/mach-o/codesign.h +a967075cfb8017142397af90ed4dd4df include/mach-o/reloc.h +5d4c225565745cea40a7c2b39ca5433d include/mach-o/arm64.h 361482dd6b5b5eb7090fff3986fba68a install-sh -b4758a0194e3e41362b939911472ce62 intl/relocatable.c 1e4b5d6e86db4708199e0b7b61d06232 intl/explodename.c -6e671cf01cbb93dedaf7b3688062d7b8 intl/eval-plural.h -8179cdac0affac17e1f1ed2087b4595a intl/localename.c -ffcfc91aa0ba807d409cec0542db92f5 intl/ChangeLog -506ef276b14575f52af7a6982d58e666 intl/osdep.c -cae51eb2cc063617de8f52a6e6e6789d intl/configure -d50a8c6c5b41089930accbdce767d3c0 intl/plural.y -89dc78a2384912f37753ac8f3b751b11 intl/configure.ac -76ca170a525d5b84d90f0478fe788931 intl/VERSION 45bd4be597b118d4bbbff6c9c6958e87 intl/dngettext.c -4d8b75dcdafb699870e4133fba5b58f0 intl/localcharset.h -9f41e951f166a5aedcc25268c161d1da intl/l10nflist.c -049ba34a0c8d1fe665e8119e579dce4c intl/hash-string.h -bedade7bcfc3bc5eb09a2c6844f637f3 intl/relocatable.h -0ff7bc241f5ea36688cf8bb6ac801b5d intl/localcharset.c 12ff40e8c89d99dc7b704bac9434124a intl/plural-exp.c -8a751062d7db9b6e8163667e5626fcb5 intl/config.intl.in +e85e47ff9bfb62d9c02b10d57e6c1ae4 intl/ChangeLog +f329370486e2e28f977e3af647418f2e intl/configure +0f3d1bb596252bdacce100082392dedf intl/plural.c 81b58accbd88cd8159471d322723c42d intl/dcigettext.c +c8501675ab40fcf8fe39364ab9de0e42 intl/dgettext.c +43f287d082528203fc85c1d2d81bf30d intl/textdomain.c +8a751062d7db9b6e8163667e5626fcb5 intl/config.intl.in +4d8b75dcdafb699870e4133fba5b58f0 intl/localcharset.h +2740caf6a9b990fac0a884302634e833 intl/libgnuintl.h +d50a8c6c5b41089930accbdce767d3c0 intl/plural.y +0ff7bc241f5ea36688cf8bb6ac801b5d intl/localcharset.c +b4758a0194e3e41362b939911472ce62 intl/relocatable.c +24c6e42d8020a8759b3c8b13e0c37493 intl/gettext.c +89dc78a2384912f37753ac8f3b751b11 intl/configure.ac 27f0efcc3ff8493519140cb36aeead2a intl/gettextP.h -d8e3733cf513bbf862ca090cf6403edf intl/loadmsgcat.c -040acf17db43770b3eeab4337e031fc0 intl/ngettext.c -eb6f0d26b52c7baccc97b62e3aaec582 intl/aclocal.m4 -d4abe82ea322701d2385778a2fcd0804 intl/bindtextdom.c -78672e3784df9ceba75d1d004d6a1f78 intl/log.c +7b5af5c4e777690b9851b3e85603bcc8 intl/intl-compat.c +8179cdac0affac17e1f1ed2087b4595a intl/localename.c +bb9312cab68737125445f5932ae7140a intl/locale.alias 6f008e715086ccfb7e8e44c007fc7bc9 intl/finddomain.c -0f3d1bb596252bdacce100082392dedf intl/plural.c -6ec998bb4716c744bf8185e607f69301 intl/README +049ba34a0c8d1fe665e8119e579dce4c intl/hash-string.h +d8e3733cf513bbf862ca090cf6403edf intl/loadmsgcat.c +bedade7bcfc3bc5eb09a2c6844f637f3 intl/relocatable.h 0ad4083e3b5df1f764bb605dcf657b88 intl/loadinfo.h +9f41e951f166a5aedcc25268c161d1da intl/l10nflist.c +040acf17db43770b3eeab4337e031fc0 intl/ngettext.c +cad1d6fab2274517783de7433c0faa74 intl/Makefile.in +03740a87284033311c5cb780e5c23315 intl/aclocal.m4 +6e671cf01cbb93dedaf7b3688062d7b8 intl/eval-plural.h +0cfc94e602bc20d958f014c77ebf357c intl/dcngettext.c f9a9ff3ee0a9b0465351b384e430bec5 intl/config.h.in -43f287d082528203fc85c1d2d81bf30d intl/textdomain.c -ff5c358b1507e45a2106b23b7e6c70a3 intl/dcgettext.c c6620ffc92d5853137d3ac11300de38a intl/gmo.h -0cfc94e602bc20d958f014c77ebf357c intl/dcngettext.c -c8501675ab40fcf8fe39364ab9de0e42 intl/dgettext.c +78672e3784df9ceba75d1d004d6a1f78 intl/log.c 4109118983200f4aa853bf0cb466c586 intl/plural-exp.h +76ca170a525d5b84d90f0478fe788931 intl/VERSION +ff5c358b1507e45a2106b23b7e6c70a3 intl/dcgettext.c +506ef276b14575f52af7a6982d58e666 intl/osdep.c +d4abe82ea322701d2385778a2fcd0804 intl/bindtextdom.c +6ec998bb4716c744bf8185e607f69301 intl/README bdad874b80d29c70bb040f2ddeb67c5d intl/localealias.c -bb9312cab68737125445f5932ae7140a intl/locale.alias -24c6e42d8020a8759b3c8b13e0c37493 intl/gettext.c -7b5af5c4e777690b9851b3e85603bcc8 intl/intl-compat.c -2740caf6a9b990fac0a884302634e833 intl/libgnuintl.h -cad1d6fab2274517783de7433c0faa74 intl/Makefile.in -6b9eadab873bdb3d7e6f74372111ec46 libctf/ctf-labels.c -d6ae7705193814e0e0a86dab87c8e607 libctf/ChangeLog -e18bb3c082ccf9b2f52e1c15db9c1008 libctf/configure -dca01777725345c8995cdc1b07b086af libctf/ctf-types.c -2bf717f7c482dfa5a3a3838e2e7b37b9 libctf/ctf-lookup.c -40a8508e832d71eaaa1e9e73750ed95a libctf/ctf-decl.c -acf96440046121ea57280c1255dbb7a5 libctf/ctf-create.c -83dfc577a2550f8f84f4f0fb20a37020 libctf/ctf-open-bfd.c -61639b93ba5b19e97478236bbd3e3852 libctf/elf.h -98ed40554a47183918aad0ea4f9a6d18 libctf/configure.ac -b94d48e188afafd7bfb25c123a61508e libctf/ctf-impl.h -f9c6ad710ae8b6356fef0d45b2f3f5a4 libctf/ctf-link.c -11f096047fad369c8aae82f0fc3c146a libctf/ctf-qsort_r.c -fb6ca9f44e48e10cc687d7fc5e0f7f00 libctf/ctf-hash.c -c2646ca5fb7479b261617d943fabb037 libctf/libctf.ver -3e85c47dde54e6a6e4ef6f3e79ca85ef libctf/ctf-subr.c -fa74f7a48bbe43df8a38b811ee15713b libctf/aclocal.m4 -8480e222dbaac231b1048603fc4b21c9 libctf/swap.h -0a31e0ce437f1c8e3097063e7287beed libctf/ctf-util.c -aa8f2dda23e5af45b5ac769d1049b225 libctf/config.h.in -538aecae29fb182aca9d8a584d4ee8d6 libctf/ctf-string.c -907862ab2894048a7c78eca6a63190bb libctf/ctf-open.c -7d808fad4e8afb5c3449f5312b9a4ede libctf/ctf-archive.c -8e8912158809452374b6b90ef7b78ff0 libctf/ctf-decls.h -736b8749343b1b580503ee6b1961012f libctf/ctf-error.c -7d64f6a7def0ba8569de96aa1eee01b2 libctf/ctf-endian.h -08d8944d6846bf8ea2a5a7e707db842f libctf/ctf-dump.c -fef4ad3d709e181ad3751b202dee0b6e libctf/Makefile.am -76f692ffbb0d8d2cccc85f644d9afa24 libctf/Makefile.in -8f3ac08d4cc421cc89035e90c890bb09 libdecnumber/decDPDSymbols.h -3851bae03416db42a85be1c5610f438b libdecnumber/decQuadSymbols.h -53b67627dab6d36fba960317d84c1487 libdecnumber/decContextSymbols.h -3aefeaedab0bbfbde26c572e1e8fb9b0 libdecnumber/ChangeLog -883f6b6d7eac437c2d8d96946bcb2ab6 libdecnumber/configure -1b89a5bc4842fd26ecde038c8a017ad6 libdecnumber/decQuad.h -6768e55c274f86452a2659c2c14117f2 libdecnumber/decQuad.c -7c87617750d1b98dc73651fe5e304779 libdecnumber/decDouble.h -aa51c887f31905ea292407060a6f8a5e libdecnumber/decBasic.c -5425a6733a823197355b8300cbd06524 libdecnumber/decContext.c -575c4471895b1e5f0f571ab4649cc9fb libdecnumber/configure.ac +54bbec753dc43d8b22adb4fdfc69a77d libctf/elf.h +b619dc922b596151dea840e01a647701 libctf/ctf-util.c +d4b4349a8e85c05162978fcf8c5c1dbb libctf/ctf-endian.h +2eb757ca576a408b2494d84330923955 libctf/ChangeLog +cbb77e7a16aeb6bfc60ff5284849f70b libctf/configure +b30d1a911a09fa3c8ad9fba7b741b067 libctf/.gitignore +64012124bfe914b1fbf3a096a5af31bf libctf/ctf-error.c +119d316f2a547ab75b91ec3e9bcdc8aa libctf/mkerrors.sed +fd6ed91104a1b2ae0a4d24d883478f4f libctf/ctf-sha1.h +7566785ac807f21dc014c4fe6b553709 libctf/libctf.ver +cfe08d104ccfff708c9595f57976eae7 libctf/ctf-archive.c +a62db51bb7aff85519ae9017cd3a0246 libctf/Makefile.am +55a067ece055a804fef2ad1cb3fa26e6 libctf/ctf-link.c +984450204c5e1a20fbef7eb267c8cc0d libctf/ctf-lookup.c +a24405bb852b33744698c9512c98faa0 libctf/ctf-open-bfd.c +e82fb0d6a51227a41c86529a5f9d32ec libctf/ctf-labels.c +d781c173a0d5af5235e296070477568d libctf/configure.ac +c0119382f0908dfc0fae26595b5eb745 libctf/ctf-dedup.c +ec3d558610b07b0baaead18612d5ae88 libctf/ctf-impl.h +5274dad564680d81db867ae8c2b2aaa3 libctf/ctf-types.c +c7700c002a14af72a68d7435769fcd8d libctf/ctf-decls.h +8fc49e5250c800791f143f044c76d3bb libctf/Makefile.in +ace20c2e0230351816e43334e331a9ad libctf/aclocal.m4 +b4e98f3f749f82e1a0d1a9cef54a0cb6 libctf/ctf-decl.c +0f53af6b4b43b02546d0af15eb8540e9 libctf/config.h.in +c71c73dac8d312b6eb6e6c0ef3cfe28e libctf/ctf-dump.c +d40e8f2dc494d7464545ccda3fafce75 libctf/ctf-inlines.h +0888189639d0b68c6ee2fa20c324b971 libctf/ctf-string.c +4b3da8f3f9a1952f95e6ad2976866664 libctf/ctf-intl.h +c5039969c614b98ac4fdc2598ee99eab libctf/ctf-subr.c +1b88ed47fbd95d73b792f54fdbbb8765 libctf/swap.h +157a3a9d9b0f3e4a6f336a119ef055d2 libctf/ctf-open.c +6b0608baa0a0b0d5ac0c29ee5859aa1f libctf/ctf-sha1.c +a71513073464eddb39d6cd5ea6858cc4 libctf/ctf-create.c +23fc9d707658ab6a084a26a367ac3f08 libctf/ctf-qsort_r.c +f34c3b8f6ccd6b347fe9131d052b931b libctf/ctf-hash.c +314b39c9bd9c4e7a4a69259ce986c7ee libdecnumber/ChangeLog +5ee9e401f58463e94d9f872584bad1f0 libdecnumber/configure +7491c7795c6c03d7a2a8b278490ca898 libdecnumber/dconfig.h b0edada33cd27ac39d929b258c442adb libdecnumber/decRound.h -22e16083bf3d0b76c4736f7f6382cfb6 libdecnumber/decDoubleSymbols.h +4f847be768ae6810ccfc10b3e07aab89 libdecnumber/decExcept.h +a6c2b3de06c7424706b16f4c206396a1 libdecnumber/.gitignore +3423f460d0273790302c0f9d01790301 libdecnumber/decNumber.h +8c612aadae9886f1a72212f93d8651c0 libdecnumber/bid/decimal64.h +e6d087e338c023920a35188158b74578 libdecnumber/bid/bid2dpd_dpd2bid.h +641724c6fc243fd4d0448f2533401554 libdecnumber/bid/host-ieee32.c +ea69a6d83c0278792d3acc4f6b069c82 libdecnumber/bid/decimal128.c +43b6b2bd872ad984104804b1b20fb10c libdecnumber/bid/decimal32.h +c5864ab84549ca0f34188ce5b057bbee libdecnumber/bid/decimal32Symbols.h +f8df5b96d86c867ad233c6f0d3e2541f libdecnumber/bid/decimal128Local.h +7bf8ced2827725463bd5ae851407043e libdecnumber/bid/host-ieee128.c +510aa882d7973ab728d24af922c5ec67 libdecnumber/bid/host-ieee64.c +9f903ba71afb574bfa3a0f3cd2f9fbc7 libdecnumber/bid/decimal64Symbols.h +728c92a81977f6b1ce57146d7a66076c libdecnumber/bid/bid-dpd.h +70e969f148d8b9fa58b2b78dea3d4e4e libdecnumber/bid/decimal32.c +1639393fa356e435abfd665e376a9bf6 libdecnumber/bid/decimal64.c +eab7eeba10520ab4a805774d42b8f9dd libdecnumber/bid/decimal128Symbols.h +12230c29a88550a7f662f60696680206 libdecnumber/bid/bid2dpd_dpd2bid.c +47afd72790bc284aceb5a23597cc6146 libdecnumber/bid/decimal128.h +6b3d38ddffa7f13ce3215b4d09e9484b libdecnumber/decExcept.c +3851bae03416db42a85be1c5610f438b libdecnumber/decQuadSymbols.h e8c7308ce5716c1c64c6894097ff7bac libdecnumber/decNumber.c 8998c4f3e69ea3d218b574a2defb9a98 libdecnumber/decSingleSymbols.h -287ad6ebf8b8179aa843368e9600a3fb libdecnumber/decPackedSymbols.h +aa51c887f31905ea292407060a6f8a5e libdecnumber/decBasic.c +76d4afd0dd1c0f5e776cbc40cf2e91b3 libdecnumber/config.in +dd054d8a7b37d7c966b69cb9f1de8d4b libdecnumber/decLibrary.c +c2e8e00770012c27928fd039c71f588e libdecnumber/decPacked.c +2f89d012c7a8a2912e7dce02bd4a08dc libdecnumber/decCommonSymbols.h +5425a6733a823197355b8300cbd06524 libdecnumber/decContext.c +575c4471895b1e5f0f571ab4649cc9fb libdecnumber/configure.ac +7d452ade6ccb9a38c45915fe23ff97a2 libdecnumber/decRound.c 2ff776f9e3651435022092b000151422 libdecnumber/decNumberLocal.h +53b67627dab6d36fba960317d84c1487 libdecnumber/decContextSymbols.h +dd46d36cafe0d7dcb669ad059fbed9b6 libdecnumber/decNumberSymbols.h +3dde62830c9325c7752d44584a837d39 libdecnumber/decDPD.h +7c87617750d1b98dc73651fe5e304779 libdecnumber/decDouble.h +14bca761b4ae83667b69345bac5d1613 libdecnumber/decSingle.h 9678f392a5f91876203f26e3c70ef287 libdecnumber/decPacked.h +4ddc06f2c811639fa14beb3e6cc3fa32 libdecnumber/decContext.h +1b89a5bc4842fd26ecde038c8a017ad6 libdecnumber/decQuad.h +c15307b3cd8fabf131a41cbfa4f062d4 libdecnumber/Makefile.in 2bd831b17997584e38305782cebe6948 libdecnumber/ChangeLog.jit -dd054d8a7b37d7c966b69cb9f1de8d4b libdecnumber/decLibrary.c d02a047fb1fa09dfe54ac69489693cd1 libdecnumber/decDouble.c -14bca761b4ae83667b69345bac5d1613 libdecnumber/decSingle.h -a3ee61acc65de663ab3bb4637301d9db libdecnumber/aclocal.m4 -a6c2b3de06c7424706b16f4c206396a1 libdecnumber/.gitignore -2f6da07ba897ca626a4f6d283feeef93 libdecnumber/dpd/decimal128Symbols.h +5f9283b55276ee7e43f1b2d807e0d85f libdecnumber/aclocal.m4 +287ad6ebf8b8179aa843368e9600a3fb libdecnumber/decPackedSymbols.h +e2fdfe70083dbc8a6bec996d90813407 libdecnumber/dpd/decimal64.h 6556faedd7609493dbaf68a58ab9de9f libdecnumber/dpd/decimal128.c -0f6db29710e7075c2fd62bc4478b3b8d libdecnumber/dpd/decimal64Symbols.h -f76b24b61366da5ec859d5d7f2eb169f libdecnumber/dpd/decimal128.h dffdcb83cf14ca1a6f6c7221cb803536 libdecnumber/dpd/decimal32.h -1b3ac8f16152273c87e1f2ec5f887016 libdecnumber/dpd/decimal64.c -32cc0742460198c0a98cd868dbf9f159 libdecnumber/dpd/decimal128Local.h a97c47969dfc92a7666dfe3c2e1e1448 libdecnumber/dpd/decimal32Symbols.h -e2fdfe70083dbc8a6bec996d90813407 libdecnumber/dpd/decimal64.h +32cc0742460198c0a98cd868dbf9f159 libdecnumber/dpd/decimal128Local.h +0f6db29710e7075c2fd62bc4478b3b8d libdecnumber/dpd/decimal64Symbols.h 87d51d3a1bed477f16f6a03d7d12c40a libdecnumber/dpd/decimal32.c -6b3d38ddffa7f13ce3215b4d09e9484b libdecnumber/decExcept.c -c2e8e00770012c27928fd039c71f588e libdecnumber/decPacked.c -4f847be768ae6810ccfc10b3e07aab89 libdecnumber/decExcept.h -3dde62830c9325c7752d44584a837d39 libdecnumber/decDPD.h -2f89d012c7a8a2912e7dce02bd4a08dc libdecnumber/decCommonSymbols.h -76d4afd0dd1c0f5e776cbc40cf2e91b3 libdecnumber/config.in -7491c7795c6c03d7a2a8b278490ca898 libdecnumber/dconfig.h -aef74e5dbc8c3f804d9dd8ed22e9c6c5 libdecnumber/decSingle.c -4ddc06f2c811639fa14beb3e6cc3fa32 libdecnumber/decContext.h -7d452ade6ccb9a38c45915fe23ff97a2 libdecnumber/decRound.c +1b3ac8f16152273c87e1f2ec5f887016 libdecnumber/dpd/decimal64.c +2f6da07ba897ca626a4f6d283feeef93 libdecnumber/dpd/decimal128Symbols.h +f76b24b61366da5ec859d5d7f2eb169f libdecnumber/dpd/decimal128.h +6768e55c274f86452a2659c2c14117f2 libdecnumber/decQuad.c +8f3ac08d4cc421cc89035e90c890bb09 libdecnumber/decDPDSymbols.h +22e16083bf3d0b76c4736f7f6382cfb6 libdecnumber/decDoubleSymbols.h fc0304097041af8de1c67dd83066ea14 libdecnumber/decCommon.c -dd46d36cafe0d7dcb669ad059fbed9b6 libdecnumber/decNumberSymbols.h -3423f460d0273790302c0f9d01790301 libdecnumber/decNumber.h -eab7eeba10520ab4a805774d42b8f9dd libdecnumber/bid/decimal128Symbols.h -ea69a6d83c0278792d3acc4f6b069c82 libdecnumber/bid/decimal128.c -9f903ba71afb574bfa3a0f3cd2f9fbc7 libdecnumber/bid/decimal64Symbols.h -47afd72790bc284aceb5a23597cc6146 libdecnumber/bid/decimal128.h -510aa882d7973ab728d24af922c5ec67 libdecnumber/bid/host-ieee64.c -43b6b2bd872ad984104804b1b20fb10c libdecnumber/bid/decimal32.h -12230c29a88550a7f662f60696680206 libdecnumber/bid/bid2dpd_dpd2bid.c -e6d087e338c023920a35188158b74578 libdecnumber/bid/bid2dpd_dpd2bid.h -7bf8ced2827725463bd5ae851407043e libdecnumber/bid/host-ieee128.c -1639393fa356e435abfd665e376a9bf6 libdecnumber/bid/decimal64.c -f8df5b96d86c867ad233c6f0d3e2541f libdecnumber/bid/decimal128Local.h -c5864ab84549ca0f34188ce5b057bbee libdecnumber/bid/decimal32Symbols.h -8c612aadae9886f1a72212f93d8651c0 libdecnumber/bid/decimal64.h -728c92a81977f6b1ce57146d7a66076c libdecnumber/bid/bid-dpd.h -70e969f148d8b9fa58b2b78dea3d4e4e libdecnumber/bid/decimal32.c -641724c6fc243fd4d0448f2533401554 libdecnumber/bid/host-ieee32.c -c15307b3cd8fabf131a41cbfa4f062d4 libdecnumber/Makefile.in +aef74e5dbc8c3f804d9dd8ed22e9c6c5 libdecnumber/decSingle.c +26ef02d458c958c1599de12b02c559dc libiberty/obstacks.texi +5b0eb0000c746fc4c1854f00bb80b53d libiberty/strrchr.c +9c941f37bb87a884deb0a7d5a17a2aec libiberty/fnmatch.c +e1d75ae780d9c3f5239a74b9414c6a75 libiberty/physmem.c +9e66648d0a72d5c721794ac087a709c0 libiberty/putenv.c +4f75ce2d9c575d2d57c58be929d9f3b9 libiberty/simple-object.c +e2f3721273c7ef1ab0194aad78ffa3aa libiberty/strstr.c +b89abf26a0a5df30dffc8b7c01988119 libiberty/simple-object-coff.c +1623e73198b0b1846c4a8fcfe92da1ae libiberty/ChangeLog +c34119797a13e71989722851c14b711b libiberty/atexit.c +f5d10c38f8751cfeff42fa5e40c1bfd0 libiberty/concat.c +08b71dbfa12258887769aaf51b19938d libiberty/xasprintf.c +b48a9b2d1736802c9733ca61dd3c1b03 libiberty/configure +00ce7121672e7f540abedae54264e8e1 libiberty/xvasprintf.c 9968bbb75dc08ce768389912954f4348 libiberty/strtoll.c -47046ba344011b2f5d569e12d3ac7249 libiberty/spaces.c -9b895fa4d00678f5a549a107fada3a40 libiberty/partition.c -16b660276211003ea5b14381a4ce7f8d libiberty/ChangeLog -8bfde42e37a207251653c194a16be25e libiberty/concat.c -d132d24f15fe05fe3614e69d6dbc65aa libiberty/strtoull.c -e1e339fb7a4124ef3be48e63836de372 libiberty/configure -a16ea056b95fd70c21333db132da14ff libiberty/at-file.texi -da5f132ac5b6c17d4a80b113fa724a27 libiberty/simple-object-mach-o.c -33320d312ab390ca0eb5c43c9e349d57 libiberty/memcmp.c -fe053283d3559af3ec5cac45f8ead009 libiberty/copysign.c -9280d42266b37303b8ecb94c8a286b74 libiberty/md5.c -a916467b91076e631dd8edb7424769c7 libiberty/COPYING.LIB 9f681e91439ac44c9df8e1b1deef33b5 libiberty/strdup.c -b5bc2d067d6161cf54911c08ed31a628 libiberty/strtod.c -8e09675a283c4c96c3c6d4c8367a24d0 libiberty/floatformat.c -2d414e20c053293f373a5306192db8f5 libiberty/strncasecmp.c +addc7ab855be5521caf7f6dd522c47ed libiberty/pexecute.c +6e5cd8de6375c5b1b166a2f6f427b161 libiberty/choose-temp.c +4a0acb9356a52f3bcfd67efa26997b58 libiberty/bzero.c +99c2e5e712b990ee07be10f53e41f3fb libiberty/.gitignore +fe053283d3559af3ec5cac45f8ead009 libiberty/copysign.c +22e750b40503bcb93d1390565b357123 libiberty/pex-msdos.c +80367d734a974bd32e9ebc370dedd2e7 libiberty/makefile.vms +6f774a92661ca4a067f1691a7925524b libiberty/xstrerror.c +7897e43bedd2def4beb6eb73003efa68 libiberty/msdos.c +4746095b1b67693ab6e78ed72ead1235 libiberty/xstrdup.c +b3f503d376697e199d60829e3b46e9f8 libiberty/dwarfnames.c +7ac6268a790477c48405b9acbf4efe3f libiberty/sha1.c +c90c2f09bdcbd65b4732a4be25a56d12 libiberty/memcpy.c a707d2e5daa09d204d4441e8713048ca libiberty/bcopy.c -de9bd20436bf2cb64d8c374c110ce315 libiberty/memchr.c -cd4827f4577f8ef816fc5546fa998371 libiberty/clock.c -67c9e6ff53ed30fbd2fced12aaea503a libiberty/safe-ctype.c -dd535b913fef7fb1e413a0ebc5450ee5 libiberty/vsprintf.c -3648de68e0eb13c0a308c30c79366a4d libiberty/simple-object-xcoff.c -d05d486786bd0ee8a2b483d8da4f01f7 libiberty/configure.ac -f214096086d1747033efa505022dd89c libiberty/strsignal.c -7acf83b44bf6e862751a2f2b7b6455b4 libiberty/strndup.c -62a0ec44a5c4fbcb122d6adccfe85016 libiberty/pex-one.c -6c487795573808ddc36d9820303f8e41 libiberty/pex-common.c -8c47013326b38aa305f2b5aaf3f4459b libiberty/vfprintf.c -b88ec315e46081afa5d8fc67abc9fead libiberty/hashtab.c -26196a9a92fae743a06d65f0e081084b libiberty/strtoul.c -ff8c99db105d020f1a9d710f2e271e5b libiberty/fdmatch.c -f023c21034e049bf0eaebbd29b57330d libiberty/fnmatch.c +c6947259a5fcec022f9cd87afb26b7f6 libiberty/cp-demint.c +3b03f409fd38f9d543870f21e6d7f5c8 libiberty/waitpid.c +1473186080b62646294610c25b02f956 libiberty/make-temp-file.c +42656270a5ae02c493bce5e3a5d51189 libiberty/dyn-string.c +4a030e1b3c4c413acd25fc73265305f4 libiberty/libiberty.texi +c490c2d0e84347da40a272a019f71dd4 libiberty/config.in +4863a11e04a2021af582edf86f156954 libiberty/simple-object.txh +80c9e06bbf3ecf70da5defc750847c77 libiberty/lbasename.c +33320d312ab390ca0eb5c43c9e349d57 libiberty/memcmp.c +3f0c90d1b27d44678f86b2fe6c070618 libiberty/fdmatch.c +d9faf1fdf0d22e76f7a1b9b1134aa334 libiberty/strverscmp.c +83565a31c7f296b3013daf383cd03ee9 libiberty/config.h-vms +67d3ca965a908a112cecfe8c27199abd libiberty/obstack.c +0a8cd2c671b9ba11520ae74d57e6a22b libiberty/vsnprintf.c +59da2afd1d530436660df6d8bdfe6baf libiberty/lrealpath.c +fd1435a5be24d2ed84909540998dd5d7 libiberty/strnlen.c +528cb7fe9ed2020f2ee12de85c28aa1c libiberty/objalloc.c +f3d66c0f81af1c1b4e2e0ea41b022716 libiberty/stack-limit.c 9d0471286f21d9027bbf1b7c67b87856 libiberty/insque.c -c90c2f09bdcbd65b4732a4be25a56d12 libiberty/memcpy.c -28f1b36bc98919c9f529f653c972277b libiberty/cp-demint.c -29552b5efe98c40f780588764aebe665 libiberty/xasprintf.c -22358bfc8f0633087c5846fc752cdad9 libiberty/cp-demangle.h -5bd055836a440051d7c561a9f591ecbb libiberty/calloc.c -f32b581d10bcc500277b6f4b4f923a4e libiberty/xatexit.c -61bb49260cd00a151413566c1e5db241 libiberty/pex-msdos.c -a8d96fbdcfa1956fe46b2025bca12029 libiberty/sha1.c +8f3032c7ec594fb54d8d0a9c912dab3f libiberty/asprintf.c +ccad70af73664dbb198eb66bbea8659a libiberty/strerror.c bb0043d92c716691cc17b80c845c336b libiberty/getpagesize.c -f5825c0385ee27dc0462b316af24dc1f libiberty/xmalloc.c -f480b479f3087310502b92fc895ce7d7 libiberty/xexit.c -4df555673b6888f568560c2654ffe12d libiberty/memmem.c -36c6ef95b6d583dfd1dc7eeb503178b3 libiberty/getopt1.c -fafa8543fac4c61fe4207e7dc6698518 libiberty/vprintf-support.h -7b5c69d4cb9a566ee20fadd1cc6bc14b libiberty/functions.texi -347c31392973de6a4872d540c1718dc1 libiberty/ChangeLog.jit +6cca08f3c95238f56e4a1ea80c2f4d17 libiberty/pex-common.c +0c70ad1e35bb090b52ed593865025741 libiberty/gettimeofday.c +74850488731148a9c9f410042144f37d libiberty/rindex.c +0c900e9180d750a26ac0ddb237151832 libiberty/strcasecmp.c +01fee24260083ad12aeb0c96e55caab3 libiberty/hashtab.c +c34f8049b6d30b9b002ba3f30d51fa35 libiberty/vsprintf.c +495471cdc3b33de416ea63f5dccce55b libiberty/configure.ac +8a7a5e7c6c0be64ba8c847f47a60bacb libiberty/_doprnt.c +a49da50901109322fa446b9d34a94088 libiberty/clock.c +5824bd0f9be9f4fa74bb3bdc7fd9431c libiberty/configure.com +0ce04768d60b33d4951e6542d1bcbdac libiberty/bsearch_r.c +2ce1ef5f8fd7baae7b9b769d61338c94 libiberty/strtod.c +c2803e850764e5da003e01d6d89fbd55 libiberty/testsuite/d-demangle-expected +988d000de7008b950887d70fe39da141 libiberty/testsuite/test-pexecute.c +4905243c45d79ac47619fc7a226c4be0 libiberty/testsuite/demangle-expected +d979995f0dcf2d11fce7fb6d015a1ad4 libiberty/testsuite/rust-demangle-expected +e54cc0119c70794eda4c5dad0aa26d87 libiberty/testsuite/test-strtol.c +a07414830fcafbd78e8496829ada76b4 libiberty/testsuite/Makefile.in +4a3496823ff0be319d313a76aef47b81 libiberty/testsuite/demangler-fuzzer.c +1299666a910d584850e0c68716a91538 libiberty/testsuite/test-demangle.c +8add8b59c49a2c11353bb6639a26a61e libiberty/testsuite/test-expandargv.c +f38926846c412da68ec8ffa6fb1df6a7 libiberty/pex-common.h +b2c289eb14e9197dcad172f3acba12b7 libiberty/xmemdup.c +99bfeaeb76e8e725dd8766f33810ccb1 libiberty/memmove.c +5e520e600636a692f52e62dcfb01921c libiberty/getpwd.c +d72cecd2f491eb8759d5cb9807c4d5a3 libiberty/pex-one.c +3cdd2959ea478cd814da17121ced898e libiberty/pex-win32.c +b94e71c549ffb69f1a8291fc2a5c1506 libiberty/spaces.c +37242127115c9e217cfdcf6034ea0ae3 libiberty/rust-demangle.c +74dcb5b3f5cbaa08ec9e1b225d55a3e6 libiberty/vasprintf.c +ca26ea2c4b1969544df852f68e7d639b libiberty/fopen_unlocked.c +65619c4e962d5590f7506a4dfa999af9 libiberty/regex.c +54aa3c65868ae8a49cbc56f52fd8dd79 libiberty/setenv.c +ff32cfcde62c375120a99ddcaee0f586 libiberty/stpncpy.c +87816b3826177801666e18db75d16c1e libiberty/snprintf.c +b8336e582376d12d78cf1d818d206acf libiberty/cp-demangle.h +1d056dfdb93570ccdfdca2ac5397ef91 libiberty/vfprintf.c +cc534c2ea00ea0b5e49ba8f61c6e467d libiberty/strncmp.c +2d414e20c053293f373a5306192db8f5 libiberty/strncasecmp.c 6b513119d8c36af928821e8ec24265d7 libiberty/tmpnam.c -26ef02d458c958c1599de12b02c559dc libiberty/obstacks.texi -0ad5fc530c5c79f6bdae2bbccd7a76c9 libiberty/libiberty.texi -66c8d9ea7185b46fa442f1232a52a9d0 libiberty/simple-object-common.h -4fc61841525bcbde48438f5de4c413dd libiberty/_doprnt.c -f8d9814bdd828c3d01181d06205819f1 libiberty/argv.c -7897e43bedd2def4beb6eb73003efa68 libiberty/msdos.c -4863a11e04a2021af582edf86f156954 libiberty/simple-object.txh -a6b1581efa83a4072727b38d6fef4230 libiberty/pexecute.txh -3b03f409fd38f9d543870f21e6d7f5c8 libiberty/waitpid.c -6cceca66829fd580ae75d992aca31860 libiberty/maint-tool -3379667ddd424facd96b7c22c28189d6 libiberty/make-temp-file.c -595890330c756bdcbb5fcb4377b412ba libiberty/setproctitle.c -030c7c29c37bf0fecb95aef75d96e1df libiberty/simple-object-elf.c 94f22680349b4ae73ad658495d2eb542 libiberty/random.c +51b1e8181419cedd484651963a38fcc6 libiberty/filedescriptor.c +f69eb31890a283b988064f7061562a90 libiberty/simple-object-mach-o.c c9bd3841bbde6d8ae680f62523f00ab0 libiberty/strtol.c -cc534c2ea00ea0b5e49ba8f61c6e467d libiberty/strncmp.c -99bfeaeb76e8e725dd8766f33810ccb1 libiberty/memmove.c -02fd3d38895f604663fb143c3f9894e6 libiberty/cp-demangle.c -eb728b7cb51c7e00194bd8cfcbf87da3 libiberty/pexecute.c -5b0eb0000c746fc4c1854f00bb80b53d libiberty/strrchr.c +385d92cff72e33b64a6963b9eab5d055 libiberty/xexit.c +284bb7a096480b355b75c337086220a2 libiberty/sigsetmask.c +af10edf4f344047779b1d38bd673f19c libiberty/pex-djgpp.c +0e35aa65bd64892d5cc3d195e1625047 libiberty/memmem.c +13cce636dd9882e42c9fc5d607351f4f libiberty/strchr.c +d132d24f15fe05fe3614e69d6dbc65aa libiberty/strtoull.c +70727c8bde6a817d78570feb0bd4acf9 libiberty/xmalloc.c +754c5ef42440c5d1b62146174a6636e4 libiberty/getcwd.c +67b511e2aad69ace3c4cadda3b2e354f libiberty/getopt.c +f214096086d1747033efa505022dd89c libiberty/strsignal.c +a0e2cfd1ba99afda2b3070a74f5b54f5 libiberty/Makefile.in +347c31392973de6a4872d540c1718dc1 libiberty/ChangeLog.jit +d726857f5eca148ece9f95daa3d91be2 libiberty/gather-docs 17a1f1d7f5acf01ce922d98210067542 libiberty/bcmp.c +a16ea056b95fd70c21333db132da14ff libiberty/at-file.texi +98afb78908d08ccf90f03ff366490a5a libiberty/hex.c +4bce08f9c3170d230e9b6ce841a4f1c7 libiberty/simple-object-xcoff.c +a6b1581efa83a4072727b38d6fef4230 libiberty/pexecute.txh +8e71982d77e91c0e3c57ca86c8a1b548 libiberty/vfork.c +12b384d6fbe8db3b1da132f566043423 libiberty/bsearch.c +15f5c08d41772bbdb89c2fcf0d6afae9 libiberty/aclocal.m4 +499a2bed0b2dd091f0accf34cbdc48fa libiberty/argv.c +40bda10fe095526774b795ad4d8d96f6 libiberty/setproctitle.c +2854fd878740d7ea0f0c5ba34f695362 libiberty/xstrndup.c +68f1ec6282a2e9e4562f75413268ff74 libiberty/simple-object-common.h +ab8d4cd68aa4892e2318d2c71864cc56 libiberty/basename.c +3c79f555e3332331dcfe6db34313d55c libiberty/mkstemps.c +ae9aec19117f62bc9ace36c909d524c9 libiberty/filename_cmp.c +f3b1d5eed16f95badf3412d6e2c2a771 libiberty/crc32.c +c44adc5ac09bdc782a8e13086ffa9367 libiberty/memset.c +d1fbc5ec08be5424ed02c411fdaa9dc4 libiberty/getruntime.c +1dcdc2d3156e635c65727878e5e730ec libiberty/make-relative-prefix.c +34240e1f32e77e729e0890ab6405a971 libiberty/unlink-if-ordinary.c +f066df9ab0cc7a059b28ca01212e9091 libiberty/floatformat.c +a018b867cae1aecf9527466d83b9a3f7 libiberty/maint-tool 28af0a1bf222ed2a5a87d9e170ef4a46 libiberty/vprintf.c -f27fb080c7ac917e55f919b10b3b5bc3 libiberty/dwarfnames.c -fb9e87a55ab3d61b044460efb81625d9 libiberty/filename_cmp.c -909689dfbea33924d44758c5e2f29acd libiberty/mkstemps.c -f5efe43871b6672180256a796a5d4a47 libiberty/pex-djgpp.c -9acdd37de46b645a4ee9bbfac819c317 libiberty/simple-object.c -904bdcd9daf97fa55a9ca8901ffe7435 libiberty/config/mh-openedition +fd7441d68af7274c4052f0b4d0011fd2 libiberty/strndup.c +26196a9a92fae743a06d65f0e081084b libiberty/strtoul.c +32e36ace2011f801ed41c55aafe01dfa libiberty/copying-lib.texi +022a2937ce8bb513d8a23a2e3c757d9a libiberty/timeval-utils.c +cd2f41c11d564ff1394a2bc8e0d39bd9 libiberty/functions.texi +d550f4428dd2571dd6257b8b82d356fc libiberty/pex-unix.c +14c3af0c442fb37b8ce17795bd034dfb libiberty/simple-object-elf.c +f32b581d10bcc500277b6f4b4f923a4e libiberty/xatexit.c +4d485e7735be430b22aea0abb4938e26 libiberty/index.c +e779d54033e7a6cff3e3e9073d696111 libiberty/d-demangle.c +de9bd20436bf2cb64d8c374c110ce315 libiberty/memchr.c +e4704df09ee375ea333f8b846ccd6f04 libiberty/md5.c +7a4217af4feda34b55babe2f557fff68 libiberty/cp-demangle.c +f6c2f4c81a01ea6b153da31ebda0c1d8 libiberty/fibheap.c +8446e21ec9d2833ae495541e07e84069 libiberty/mempcpy.c 044204f5b4bcac5eae2face0602129ae libiberty/config/mh-fbsd21 -4004fdcde347fda58406b4b84a995c66 libiberty/config/mh-aix 7b65854f594c84e80295173de277b3dc libiberty/config/mh-cxux7 +4004fdcde347fda58406b4b84a995c66 libiberty/config/mh-aix 38e76da568ab25260754fdb9d5080513 libiberty/config/mh-windows -9701140ac64d8287849d605f4eff69ac libiberty/stack-limit.c -f6742e961bd5ffc73f4a06ed8eccfcd7 libiberty/vsnprintf.c -f91b8d5d7816eef3e17ef2622beab65e libiberty/simple-object-coff.c -22b53dd8b990133515799dffbda44c8c libiberty/aclocal.m4 -5824bd0f9be9f4fa74bb3bdc7fd9431c libiberty/configure.com -0311107638d227e25ebc5f9fee3048dc libiberty/vprintf-support.c -99c2e5e712b990ee07be10f53e41f3fb libiberty/.gitignore -43c136394d4c12dd8822d63d377ba170 libiberty/dyn-string.c -c6282a5fe5670309308cc2763c014c74 libiberty/lrealpath.c -0f85df16a11aa9c7fc05fde06f8eb636 libiberty/physmem.c -c84f0b2b8384d1b87b194a4aacf3b181 libiberty/pex-common.h -4746095b1b67693ab6e78ed72ead1235 libiberty/xstrdup.c -6f774a92661ca4a067f1691a7925524b libiberty/xstrerror.c -12382423bab8a434922bc4124d64905e libiberty/putenv.c -07676302d01cb1dacee7c00e7e8de416 libiberty/lbasename.c -a9a148be07e234d8b2dba244fe7509aa libiberty/objalloc.c +904bdcd9daf97fa55a9ca8901ffe7435 libiberty/config/mh-openedition +26a3a56b6dc5cc9a99825b4e3067446e libiberty/vprintf-support.c +e60c2e7c5dcdd19510066c13f1a527d3 libiberty/alloca.c c68dbf7834af4281ebd84caa3fd54680 libiberty/README 24eab3d83825c3be13549dc62b6d63d6 libiberty/rename.c -1ddd88585b8ebd50a6c5296bcea51aca libiberty/d-demangle.c -76888d9a6ed315d1e12029016d96672e libiberty/bsearch.c -c34119797a13e71989722851c14b711b libiberty/atexit.c -4cfb356ea37bb6fec3959cafebd69ee6 libiberty/regex.c -ef39d9fbb4aa3f3374c982a291b08973 libiberty/fibheap.c -c490c2d0e84347da40a272a019f71dd4 libiberty/config.in -9569f4744305c6c4269ddb94d6a6146e libiberty/pex-unix.c -0c900e9180d750a26ac0ddb237151832 libiberty/strcasecmp.c -35a833a46d0936234cd0622a0f0bd032 libiberty/rust-demangle.h -4d307a117c0f81fa13bf1aaa6f8f5258 libiberty/strverscmp.c -3e0a20085f944be08efb56c71da8f408 libiberty/timeval-utils.c -2054229c55053f740d3769bd672733f6 libiberty/rust-demangle.c -ccad70af73664dbb198eb66bbea8659a libiberty/strerror.c -0374d397a97e6b34fda97a492b09b7be libiberty/unlink-if-ordinary.c -63f7ab07d8ad714bdf28c9195761d3a3 libiberty/stpncpy.c -15af22b09a45d83765207ece67e25e35 libiberty/obstack.c -9dc48fda00a709b3019aa09eedd3cb6c libiberty/xvasprintf.c 0c2635175b975823b40980974dfc2110 libiberty/ffs.c -13fdce9b60669e32c6bb245bb52dc4b9 libiberty/getopt.c -0e703ef53d7dbc333bf5584f66862eb6 libiberty/asprintf.c +a916467b91076e631dd8edb7424769c7 libiberty/COPYING.LIB +d252eb28fd6e1a00d423ffada3630ce9 libiberty/splay-tree.c +1599d19c91a86e2ea4e8a358bd1499ae libiberty/sort.c +7b91278b283db6f8b01cc41a7199e2f3 libiberty/cplus-dem.c 145debe2f28f470878f95b1255f5537c libiberty/fnmatch.txh -c6f7ab2ab64bc6d2555f5ee10045b339 libiberty/sort.c -61b4aece767895a8647f3bc7f58cec88 libiberty/testsuite/d-demangle-expected -e1aaa2f78279c535dcc564bd9b483499 libiberty/testsuite/test-demangle.c -f36eeaaf1f836e9ab0f69bc3c1fb0d74 libiberty/testsuite/demangle-expected -0c97e6730686ceb026d16fca4fc65e6e libiberty/testsuite/test-expandargv.c -69eab4f4fc70717263ebb0bb1caeb752 libiberty/testsuite/test-strtol.c -f5950020c38e0122e51d2609c8f9554c libiberty/testsuite/demangler-fuzzer.c -3b244903adc10042e540d053c3585245 libiberty/testsuite/rust-demangle-expected -8592035985abb82a23d61bbc08c88a26 libiberty/testsuite/test-pexecute.c -caa45ae2e7bb654256a6af40fec94964 libiberty/testsuite/Makefile.in -e81a566c5256d1bd36b86458ea1c8183 libiberty/fopen_unlocked.c -74850488731148a9c9f410042144f37d libiberty/rindex.c -e60c2e7c5dcdd19510066c13f1a527d3 libiberty/alloca.c -feec14991bd3eb0a142bcf940a4ffdb1 libiberty/getruntime.c -13cce636dd9882e42c9fc5d607351f4f libiberty/strchr.c -0c70ad1e35bb090b52ed593865025741 libiberty/gettimeofday.c -fd1435a5be24d2ed84909540998dd5d7 libiberty/strnlen.c -b2c289eb14e9197dcad172f3acba12b7 libiberty/xmemdup.c -1299671a68d1bf1bd11f8a397e849dfc libiberty/splay-tree.c -fc4ab0803806acfe2e7f357bab711a57 libiberty/gather-docs -c44adc5ac09bdc782a8e13086ffa9367 libiberty/memset.c -5e520e600636a692f52e62dcfb01921c libiberty/getpwd.c -e2f3721273c7ef1ab0194aad78ffa3aa libiberty/strstr.c -284bb7a096480b355b75c337086220a2 libiberty/sigsetmask.c -a3bf17619963639c1c34fc77f4fccca6 libiberty/make-relative-prefix.c -ab8d4cd68aa4892e2318d2c71864cc56 libiberty/basename.c -4d485e7735be430b22aea0abb4938e26 libiberty/index.c -1b6733afe09b126308fec4e4d33ebace libiberty/vasprintf.c -bfc05824922fabccc9414569c51ffa36 libiberty/crc32.c -ad3626eaffd230176312abb2d2f61577 libiberty/snprintf.c -8b13e121335c213b82606e298fca8ed0 libiberty/stpcpy.c -330790942beaa8b41b5bb50ab47c21ec libiberty/hex.c -206167aed7e464b24b5c2c4515675ab2 libiberty/pex-win32.c -620af9326001aeb222c0ece995219fe7 libiberty/mempcpy.c -80367d734a974bd32e9ebc370dedd2e7 libiberty/makefile.vms -754c5ef42440c5d1b62146174a6636e4 libiberty/getcwd.c -e26a566f09d864a0f718b546db39a2e3 libiberty/copying-lib.texi -e95b44bc125ecd9a0030c47bd9ea9944 libiberty/setenv.c -83565a31c7f296b3013daf383cd03ee9 libiberty/config.h-vms -5ab09299113fd88fe42fe0095795e5d9 libiberty/choose-temp.c -8e71982d77e91c0e3c57ca86c8a1b548 libiberty/vfork.c -4a0acb9356a52f3bcfd67efa26997b58 libiberty/bzero.c -d74d8686a340aa633cb9ec4c37bc5033 libiberty/cplus-dem.c -1072110de0e01a526aafb095b6560e58 libiberty/Makefile.in -b401cc074ea4e0b9d4099f3f76045da0 libiberty/xstrndup.c +fd7bff1ad183fda5470a0f03e4569591 libiberty/stpcpy.c +aff91d7b9a881699df694ae4643d01a9 libiberty/safe-ctype.c +82d7a3f0a778bfc2d87741ea555435f1 libiberty/getopt1.c +43a2458d9460f627b292cd793ab926f1 libiberty/vprintf-support.h +f161b1b347835751a363811214f498e7 libiberty/partition.c +5bd055836a440051d7c561a9f591ecbb libiberty/calloc.c 7c4c2e986548cf778a1406eae72c71dd libtool.m4 247597a3fcc5b5aa8bd923351c59d853 ltgcc.m4 4e65f2f6a05f5eca82ba79c6363aa3db ltmain.sh @@ -7564,5143 +7952,5185 @@ dee72a6a60e99528b0d17bf3ff9a1e15 ltoptions.m4 bc2f6032c98896249eadb56177c7d357 ltsugar.m4 c30cd33c496505f13d9fbdb6970c7c33 ltversion.m4 -ff222fca62b56d74a5bc12b9c948fea7 MAINTAINERS -3598aa5fdc1f5504eb2e07fe503577f3 Makefile.def -cd6f547d922c5c3ff6854a11f53b6d8a Makefile.in +5a7a8b591e5c22a7ba9f396c31cb0800 MAINTAINERS +1270647dc798442182dad35bdfc83a0e Makefile.def +6b177a1f0f37f92e237d9a9bdd6c02b2 Makefile.in 300245558cb72436b3dccc48328e3d14 Makefile.tpl 5f2a276ee7b8decec541391229d03591 missing fbe2467afef81c41c166173adeb0ee20 mkdep 82b7b70a9845ee61a01f20b29dd2df2c mkinstalldirs 21b967372b521f607c0a119f425931ec move-if-change -ee20abfece88d59982431a48e66d5554 opcodes/m32c-opc.c -22fad5413c93cf5595cda3875e96cca2 opcodes/fr30-desc.h -4c3520f77e4a1a41121260c17affb3d2 opcodes/ia64-opc-i.c -fcd3b374a58421070f5e71125417b24f opcodes/cr16-dis.c -5b2aa21de3d58c9100b435d8ebbcdf65 opcodes/ia64-opc-a.c -ac3b79f9f3c7075b5efc499b8a62eb62 opcodes/d10v-opc.c -095033162e89f5f710ed6891dae375c7 opcodes/ia64-opc-x.c -43510f6ba01d547fdac54a3c57eec613 opcodes/tic54x-opc.c -0e2a810186dfb997ac2de206e93dbc01 opcodes/arc-dis.c -c96b873dc5757518b7633ab3e4f5896d opcodes/aarch64-dis.h -a2125e11b5dc97a1a70e480b5849bc5c opcodes/msp430-dis.c -b3d7452b4310332b7974b34b09f65a6d opcodes/ia64-war.tbl -2adb7cb7865ac91208f5f94fc4d9f397 opcodes/ChangeLog-9297 -da236cfc93f43ddc58f22d40fe2c4ce6 opcodes/riscv-dis.c -f8975e1d0f00e22b4e1a3d7050dfd172 opcodes/cgen-bitset.c -2616b3d6498b77a7b119c1b8ffc46dd7 opcodes/aarch64-tbl.h -9c968a24038c2668abd53bf8b64de660 opcodes/sh-dis.c -7d9303de6c980502741a1b64a72562e6 opcodes/xc16x-opc.c -b4bb8e280810f57f85d8476362cd0cde opcodes/mep-ibld.c -a0c6719f00408eb6e6075580e4d5a01a opcodes/iq2000-ibld.c -20d54844aca06dbf0637ccca248e96e9 opcodes/ChangeLog-2017 -73db15620f2907676ab2d8923c6421c8 opcodes/rl78-decode.c -7107172dbbdc37fbc0b31805555211d7 opcodes/v850-dis.c -0f9f03077699ca79b328ad137d948a9e opcodes/iq2000-dis.c -259177033fae052791b1ce68442fde53 opcodes/ns32k-dis.c -819dddff257165c1fff009ed9ee7c892 opcodes/ChangeLog -97296566ea48acc07e4bb18906dce6e7 opcodes/cgen-dis.in -2e2a209db97e825ea60f38aa9071979d opcodes/configure -43130c8fdf892ebedbb621b5010cdb56 opcodes/lm32-opc.c -bd8ac41b690a0307774fca1f20bead2d opcodes/lm32-opc.h -aa7514b36d310f0d844b24155fa91b35 opcodes/frv-dis.c -ce914fe9eed08941164781e2be28336b opcodes/lm32-desc.c -9f6f6fed6e29c11dbf824c8d83ba2077 opcodes/aarch64-dis.c -35f4bb359dd04f5f0578381fb60633ad opcodes/ia64-asmtab.h -5eb782e20ab20691354ee292375b85bd opcodes/ppc-opc.c -6ddcbd5446c1c731f798369c87951e2f opcodes/epiphany-desc.c -a1407b2815a7a6150705cf98ab046796 opcodes/moxie-dis.c -a7c330f47b358722154a0314cd539b19 opcodes/tilepro-opc.c -cd7f298ea8c90ece6d6636caa2663922 opcodes/ip2k-opc.h -eb0a2df04ed402a0f1ba972ce6976120 opcodes/bpf-desc.c -0c4c0fd5994667c113805f5fcd37c8c5 opcodes/rx-decode.c -5e7732efc1d5f5762bd367d895552384 opcodes/m68hc11-dis.c -3ae7e4e6aa6aad7a7295627909d37e65 opcodes/disassemble.h -fa2e7775fb32f003537ff547c2d5bc7b opcodes/z80-dis.c -a642984b15fabf9d9045f79129e3f840 opcodes/fr30-ibld.c -5d789141ddec0204dea7e7632b80b7a2 opcodes/mep-desc.h -13c6fd320d91e5f7a9084dd85e76613f opcodes/mt-opc.c -9fd37949da2e80ed4e0a106764fa3727 opcodes/arc-ext-tbl.h -173bea22b3108dc0d46fc8a38d9ae33f opcodes/MAINTAINERS -7e97fdd557f57096066757c05ddd3999 opcodes/mcore-opc.h -76ccb4f56aca9c8f97c43f836d1ed390 opcodes/opintl.h -ddf1082c68964061907b96a2eff672b4 opcodes/i386-dis-evex-prefix.h -84abec4f1a361521641c4c28725a167f opcodes/cgen-asm.c -2a2ab682201ae1707860eab9141afac2 opcodes/m32c-opc.h -5688ac6b9e832e955ef4050ad95953b2 opcodes/xgate-dis.c -af1a51e44ae2f7f4ce80afef79901b90 opcodes/s12z-opc.c -1718b45c678a851d089ec7c4edaa9906 opcodes/ChangeLog-2004 -ccc5938862dbe2a5eec6ea99fd1272f9 opcodes/xc16x-desc.h -a53680ee35ecd26833d0155b16def898 opcodes/ChangeLog-2010 -f0a8ada31841e83a2fdd8ba8296a5fce opcodes/m32c-ibld.c -98b1f31c018802a37dd81fb018e5b3af opcodes/frv-desc.c -8bc1cca2449280a875ba9c0f71149119 opcodes/mt-ibld.c -232e7419ee83a48fbd4052330ddaf7cd opcodes/bpf-opc.c -502b1c9abcd4f4b58887861f878971be opcodes/xtensa-dis.c -b0243b9766948394f97ac7b50b2a9311 opcodes/configure.ac -3de339ed6464a04fa4033ac06b5a4adc opcodes/fr30-dis.c -44b4c920f22fa36202d20614b90889db opcodes/aarch64-gen.c -4c1b7d56ac8129ceadf7029343063048 opcodes/pru-opc.c -9e2ad26272a4439fc4b4134f8ea38a37 opcodes/fr30-asm.c -327cf11f5c08b578f3b0cdb7f3923280 opcodes/ia64-raw.tbl -ecc011ab263450df4c90156515e3e3e3 opcodes/arm-dis.c -d3fae80311eb9500b0d573c5f5f0cf9f opcodes/d30v-dis.c -4dde640cda0b904d04364e9ad3801964 opcodes/frv-asm.c -b1e27678214ec6733c0bacf20a3bb559 opcodes/xc16x-dis.c -b099e64b1e65ba598b0d6ba132cd8427 opcodes/xc16x-ibld.c -e97749da9ab275b1746313452a10c86b opcodes/nfp-dis.c -4541c6ee6156a779c979a2c607307a88 opcodes/mt-desc.c -b41c84843b25f4372466b190704cd255 opcodes/mmix-dis.c -3a7f260636da712c96de42149baef270 opcodes/aarch64-asm-2.c -b2d7028635050b0d6eff188e60a5b5a0 opcodes/m10200-dis.c -5e8e2b3df494b58cdb2e4d31dbba2d02 opcodes/dis-init.c -83840819c9721b9216ef4c562158a539 opcodes/i386-tbl.h -a3f680dc58871bef11469c918b977c8d opcodes/visium-opc.c -7979f0b0633dce05c5a59479d4ef6704 opcodes/s390-opc.txt -ba5c1563d23a0c49f1acf660ebd9d542 opcodes/tilepro-dis.c -4ce9a81f11979dff34df6eb7e9b29cc2 opcodes/mcore-dis.c +30f313f25d531cc960826a2d8ca33704 opcodes/i386-reg.tbl +acc86c27153486d730d766ab891e8016 opcodes/ft32-opc.c +20224388c8ac73b37168954f817890c7 opcodes/ppc-opc.c +41a87a8733f8ab9be50d9f51be1daa2e opcodes/m32c-ibld.c 61596d76325239755b5324e3435bae2d opcodes/ChangeLog-2006 +626c93ed39a405331f47cc6ca576eb00 opcodes/m10200-opc.c +b5c6b8bd0f1a6dd6ce064e362b47fb49 opcodes/ChangeLog-2016 +3d80adda3d2829257777a5163b4b8523 opcodes/lm32-asm.c +585264cc6ffd29d4d0d66938786a5ded opcodes/hppa-dis.c +f7c3d2324c16c3c5450e421d034cef10 opcodes/aarch64-dis.h +cf5ae2f420cbf9374f76c6db9f540126 opcodes/s12z-opc.h +7fe27c9d27cb712c941dbb39711b7e7d opcodes/epiphany-opc.h +0452aeba4e1f72482880701c82952aac opcodes/tic4x-dis.c +2393a29411cabe2d4b2fdf4a90d28bb7 opcodes/riscv-dis.c +7d319bd046659b601928ea3a3ee74e42 opcodes/mips16-opc.c +e57dc38cf727156e3130e6d8a2d12b95 opcodes/pj-opc.c +9696779377706bdb1d40c322ff2bc5a4 opcodes/mt-desc.c +017e34c929406f104004b4d546492998 opcodes/i386-dis-evex.h +3fa36ae8154f7d71d610db1afda5c9ad opcodes/disassemble.c +ae66c5fbea04c29db07e989f13f15025 opcodes/mt-dis.c +147922843e1a41f68d75de620820369d opcodes/dlx-dis.c +56e32a9342ba5f0ba6964319131e59bf opcodes/ip2k-desc.c +759b1ffe22e211f08bc8a0440bca3a6a opcodes/microblaze-opc.h +49b5ff2ba15348adaab7798b44348763 opcodes/ChangeLog-2015 +7f8ddd83caf96cd09c7b807e0571728d opcodes/d10v-opc.c +b7b8bd8a46e4fd70def666cfad96d947 opcodes/micromips-opc.c +1536495143d9d440ae0fa9cb9cd46d90 opcodes/s390-opc.c +b3ea249bbe9f23db0863970529bad97b opcodes/ChangeLog +eff63216f20d4bcfe7608dbd9cd57741 opcodes/nds32-dis.c +43c951fee08343ae1d745728ee6d1f3b opcodes/configure +255e973bda13c09dfd80525e4d9c1d4b opcodes/m32r-dis.c +4d323731047a54e795b10019cadf4d52 opcodes/tilegx-opc.c +ef89774fd336dba6c54213c6f5e3ee7e opcodes/ns32k-dis.c +17ae5257bd1eb92183aad2bac54f7675 opcodes/xstormy16-desc.c +788424e9bf5918aeb921e2e0927c8541 opcodes/mmix-opc.c +2e1545de58090d1272deaab340ae2a60 opcodes/iq2000-opc.c +2b7bf461cb277171aff8004fb29e29b1 opcodes/ia64-opc-a.c +f14cbd8e033eee654ecb9c82c3de9d91 opcodes/aarch64-asm.c +ef6602b963f2a903ab9c81134c6b8d29 opcodes/.gitignore +7d7d28737ff404f709104accbd7b7926 opcodes/ChangeLog-0203 +b7180516f7f49926366588e7697b2236 opcodes/m10200-dis.c +16f3a170d6b704573bfd0788b4d1061e opcodes/ChangeLog-2007 +ebf111eb3ff11a6c15a22ce0f629c4a7 opcodes/rl78-dis.c +574537d9972c9161d297dcfd7eca0282 opcodes/dep-in.sed +abe9186aa2b65b000546c8158085dda8 opcodes/MAINTAINERS +489bed6db47aa142c980ab13537c25a5 opcodes/v850-opc.c +6ea4d846c91a2998ff7f0cf56526a7db opcodes/makefile.vms +2dc169586e4d06c7c260f32cfde8e174 opcodes/cgen-dis.c +c602e0473dbc1be4c9339234b7c5b158 opcodes/moxie-dis.c +b151fd130cbca22f1c1f80a2ed9ec647 opcodes/bpf-opc.h +c5ba9a32c35e494a7f03d2bf0a45892f opcodes/nds32-opc.h +4150ba531cea196335a42a757087a911 opcodes/lm32-opinst.c +a1c46b9577f01e2549b5ada47747d4a5 opcodes/aarch64-opc-2.c +2f195b1cdde3c9f1bfea6eb3a105748d opcodes/s390-mkopc.c +3cca4fa27144ea7fe261926a48e31e9b opcodes/ip2k-ibld.c +17520aefffc8080a644a8447d03bee1c opcodes/iq2000-opc.h +998aefd32d2f13055abd7aa3af0e9d69 opcodes/ia64-asmtab.c +4a69a5642edce7794f2c95c75307a0f3 opcodes/cris-opc.c f7b8b18ab2b5f1cb03ab99b1cca821ef opcodes/ChangeLog-2018 -5d9eaad491c2454a0f4bd8e5e09ccae5 opcodes/pdp11-opc.c -1a36eb144e0789c78921aed8ea6cd612 opcodes/mips16-opc.c -4c9d910c83fdfb016b33e2eaa11009c4 opcodes/i386-gen.c -3b7457facaa7bc03a3d8b08c5d470df2 opcodes/or1k-asm.c -85afb5e9fa15ca375baadf5e1da1d13b opcodes/aarch64-opc.c -6c78cb5fd62c165a8ae2eba0c6f317fc opcodes/alpha-dis.c -435c73db4c63944bdc8fbfeb19338f0a opcodes/ip2k-asm.c -bc9cf729403d92b2815dc9c347b2cfe0 opcodes/mips-formats.h -1c3601137caeb8c899afad7301d087f3 opcodes/mmix-opc.c -88fabb0ac5d44b14804ca51923e7180a opcodes/nios2-opc.c -8582d98be0cbd4f13aacf73c5183c965 opcodes/po/tr.gmo -9fa87849e97f1e412646da4da3e2ded4 opcodes/po/ro.gmo -8e0324d4b31d0efeb55343fba544c8b6 opcodes/po/pt_BR.po -c32c7787ad8c899a3af5ec2e47518888 opcodes/po/da.po -54774a0f3f118df78dec815cdb50ca66 opcodes/po/vi.gmo -ecb903c9a332f2bdc20d610db9cfeada opcodes/po/de.po -2c2bfe49b56cd247b07780e8e7649b9c opcodes/po/sv.po -64163e7952ced31b2cf20dc47968a84e opcodes/po/ga.po -b4d9fc27f3a7df26aad4c435da8f3a83 opcodes/po/Make-in -193d0769d33d34a6555d5e3bcdc1330d opcodes/po/pt_BR.gmo -2ab76e8cfe46964e198234fdeb971fdf opcodes/po/sr.gmo +cc55c33d61982747fa5629a7f90703d3 opcodes/mips-opc.c +3d0fbbb48daf8db305eb45ced854b20e opcodes/bpf-ibld.c +82f85f5946700d6818256ee0b9c5ecc9 opcodes/config.in +507caecfe631b4983f5237ee5ce05dfe opcodes/ia64-opc.c +5f1b93943180613ffee7d373d4e75d7c opcodes/sh-opc.h +557a4042a5ae805cad029ba0ae94576d opcodes/Makefile.am +1cec1ef43ddaf4ab1eb8c8e7ae05e85b opcodes/tic54x-opc.c +e36d4490bbfc6ba48f5f21da7bd8fc65 opcodes/or1k-dis.c +ca16d8a4b504a573594c9f75cb4fbcd5 opcodes/sysdep.h +daa0dbd62773ccdf2dbcacc9b6f47b52 opcodes/m68k-dis.c +3bfa3980c08894a347e1a438990b88e7 opcodes/i386-opc.h +d733ca26821aa222362428960075ea80 opcodes/rx-decode.c +792944c7ffa20e6ae13a607937eebe1d opcodes/cgen-dis.in +de916c6a8faf191134da6701226a626d opcodes/i386-dis-evex-prefix.h +c302af75fad2074ad53e03ad6d5339d2 opcodes/epiphany-asm.c +431bee254a85f27a0c482aed08099a36 opcodes/lm32-dis.c +4a5b2260eddc1c7b76c5a5d94010e23d opcodes/cgen-asm.c +e1925d03d4df08f5424d7d04bfc2b0c4 opcodes/xtensa-dis.c +9d6ffdcc61ea35f7e990b771a66386df opcodes/bfin-dis.c +7d64481e74112585e55481fe0b280258 opcodes/mep-opc.c +a17ebcbeb3753d531b287aaeb69b1f12 opcodes/fr30-opc.c +7169c38209f10d61a02b57965180bc91 opcodes/bpf-asm.c +8001b41c74759976d0beb35bde3d058d opcodes/s390-opc.txt +9a8a8e628ad995251df6ccfa3d7c4adb opcodes/m32r-opc.h +c325a89b389599e79a63ff55e9e7aebc opcodes/ft32-dis.c +90af4b0e966fe86a7b084d5564fa5512 opcodes/epiphany-ibld.c +8d02c591f7889e4a0d6be47c55d4168a opcodes/ChangeLog-2012 +486d43f14a5e1d3738a7103918083b6f opcodes/cris-dis.c +241bfe0cb759f3727586f119055bd2b9 opcodes/pru-dis.c +58e924c52c2bfeef23d22c4f482edcfc opcodes/ChangeLog-0001 +c8629b6c1ce9d49dce4e38d6610802e5 opcodes/mep-desc.h +5bb9171febe92b2971c5874cc395a0e3 opcodes/i386-opc.tbl +80e36ef6c9a32042661aa03a1523c2eb opcodes/alpha-dis.c +782625bfaa8108536c119639c15a21f1 opcodes/mips-dis.c +e8031d215b27ccf2e3b60926e9fd46f3 opcodes/vax-dis.c +3f3b8bf315009653ba5bfede8c0c6047 opcodes/xc16x-opc.c +b4c54078c4debd6e9bd3703033bc7dbd opcodes/d10v-dis.c +267b534cfe4200d6c38399f93f5d1714 opcodes/i386-opc.c +7dff894be3db6b2fa251a627c1bae1e6 opcodes/xc16x-opc.h +c50bd26e6e3c3ff3a86f4f9a47eb7952 opcodes/i386-dis.c +18b8c8993f40bfaf195081a769c50d54 opcodes/sh-dis.c +615bf8dc1c70b14d80be2ae6f31feccf opcodes/ChangeLog-2005 +6073e90b3348e2fc983dd383e44f6ba2 opcodes/lm32-desc.c +b5ff2e34164876d33994c8f11405d6a5 opcodes/xc16x-asm.c +c0349979d5fb7a93a58a6bda351743be opcodes/mt-desc.h +420a9a079aa337cbcc4bb682820e8fa2 opcodes/arc-opc.c +1ded054093de910d9786c62bc4fe8cc6 opcodes/stamp-h.in +a53680ee35ecd26833d0155b16def898 opcodes/ChangeLog-2010 +4576e01f5e9e2d03ecad15cc07a67932 opcodes/iq2000-ibld.c +719589048f678b73cdc5d91e3b918f6d opcodes/metag-dis.c +03ad790084baecf4401c80db3c789883 opcodes/configure.ac +527a778154563106529d9124b76ea941 opcodes/mep-dis.c +7994163b0bbded420e91fdde56e10c15 opcodes/s12z-dis.c +50d260823ae1bb8609b9932e880b6076 opcodes/m32r-desc.c +15377c452ce8292a7717e6c9babe3dff opcodes/ip2k-opc.h +65adbd8591bd944745549800d19f2251 opcodes/arc-dis.h +729ebbe45420bdb745cc2514684dff8f opcodes/alpha-opc.c +3a093f1883238b18a1e2d58d76b495bd opcodes/configure.com +78c202d4fb065e83785cce7637cc159a opcodes/z8k-opc.h +3f39a2bd7d410aa3bbad1215ed8dbd11 opcodes/cgen-asm.in +071abdc26962b09af8011fbd7101ba75 opcodes/frv-asm.c +7fbafe8e291ea7d7a87e346bd0fafe46 opcodes/ip2k-asm.c +c080554e33bc677b1f3b84c7b22073a3 opcodes/spu-dis.c +a9008be5da7d8d71bd91780830aa77bb opcodes/wasm32-dis.c +94ec5422597f22adacb94077e557262d opcodes/lm32-desc.h +1f5acd3452a0a360529d00ef50d69b58 opcodes/ChangeLog-2011 +9dec2ceac940bad6e1870d8ab199429b opcodes/nios2-dis.c +61865d6e65da1312302c99d3b2ec0031 opcodes/fr30-dis.c +1ef4635cd0dc01e3497b7a122b341743 opcodes/m32c-opc.h +b2241084ce22b1be5fffaed5cd762739 opcodes/pj-dis.c +af55cd6aa6b84aa9ebc1d4eb6e9fd825 opcodes/cgen-ibld.in +d360d4af04cf37065c5c7d2bd5955ad9 opcodes/aarch64-asm.h +327e11512bfb9d06f31c4f914f91306e opcodes/sparc-dis.c +3c19092a64b93cdfd1d9f8748867a5d4 opcodes/bpf-dis.c +b969a750db9679c41a9517973294f8a9 opcodes/ChangeLog-2013 +2764aaa1e86ab5310a831a6efbe8475b opcodes/visium-opc.c +a5fa82e7bc64c887bf7deaee7ca5a8ea opcodes/m32r-desc.h +4b6f7823bc20df6b5a5cf45bd0df1af4 opcodes/z8k-dis.c +9bc1ad8173441b292f27656a224d4863 opcodes/aarch64-gen.c +9fade5b4ed006b551889797088e5f2a0 opcodes/moxie-opc.c +b3d7452b4310332b7974b34b09f65a6d opcodes/ia64-war.tbl +6aa2cc7564098a13196f1995b4b560c9 opcodes/ia64-asmtab.h +e041a576fa5d737dfbe4de3e293721ac opcodes/dis-init.c +e263970edd5e90c3aed3ce1c59d16a79 opcodes/m32r-opinst.c +27ae0ccb8b5c28ac1784d62f99a60df0 opcodes/score7-dis.c +6754beccc1802820b3073edc02a6442d opcodes/m32r-opc.c +399bf3df968e852402654d148c185a22 opcodes/xgate-dis.c +392ede8771c780138e4d142882f7650b opcodes/arc-ext-tbl.h +72f2adb53487ba36793252b1adf5cbab opcodes/arc-ext.h +1450c7e1ef4d2671b0e60c7ffc8142b7 opcodes/frv-dis.c +89af6c432f23db4b73512473dc2801b7 opcodes/epiphany-desc.h +b485b32d996d37afc89d2359c1d0c767 opcodes/m32c-desc.c +017161c0ba75fef20d44fedc7fb10f46 opcodes/cgen-opc.c +7e02dd4ecb93935f30fcd4bc160ed635 opcodes/arc-tbl.h +698bc9fc43d40a36e7f9ac195bd12128 opcodes/aarch64-asm-2.c +9978b0ffb15f1ad48bc31816517ef965 opcodes/ChangeLog-2009 +16190d67e11cce10a9c25a027b240523 opcodes/m10300-dis.c +6400c0f21a95401a14cfe1763498eb6d opcodes/or1k-opc.c +14f65395da76ef01d61a99474564ced3 opcodes/ia64-opc-m.c +b81d6610822fbc243bb73ba86e1d5300 opcodes/or1k-desc.c +a36e712b79ef55990eebcb7990afaa58 opcodes/d30v-opc.c +d7e8765bfa133ec7bde185ead91d0e80 opcodes/rx-decode.opc +5cfcd312dee04bef39dc7ec77b54ea97 opcodes/cgen.sh +58fd050bbd00724e0a6eed3fb9033c2b opcodes/iq2000-desc.c +2910a5872f6104b44a197246ad4b11ad opcodes/or1k-desc.h +873feba9ba85c4b5c8d4d1cfc9f96f12 opcodes/i386-dis-evex-reg.h +b192ee206cc807dd92ffe541cb819d6f opcodes/ChangeLog-9899 +62212a9bd5825390d47c6f1216fc638e opcodes/arc-nps400-tbl.h +71734b3b0b339ae16c39c0238933623c opcodes/rx-dis.c +327cf11f5c08b578f3b0cdb7f3923280 opcodes/ia64-raw.tbl +f6b4581a4e0d9b26db378933b5640ac2 opcodes/tilepro-opc.c +4f455ec134ee7515cb8a973c9a7d8416 opcodes/fr30-desc.h +3f38cbb2889f28c7ef9817f88394d06a opcodes/iq2000-dis.c +6a2372aafac384ccbc0f24a08ef502a3 opcodes/i386-tbl.h +964b4afdaaa705bf0b13cb5f061d4734 opcodes/arm-dis.c +59599974e32ff187ec02963c55187fba opcodes/msp430-decode.opc +bf141171fcbacd574ab3b91b1eabb8a7 opcodes/ia64-opc-x.c +3cdcddaba83ebb7e9bcfc9a5f478cc56 opcodes/m32c-dis.c +0bf2aabea004cb40d430909539afcff2 opcodes/frv-ibld.c +f715dc94199e7603cbe1af91b953e20b opcodes/xc16x-desc.h +c149dfa881413ec5b601dfd00647da5c opcodes/m32c-asm.c +d55402a0d18cb54c390889fdc48883c2 opcodes/fr30-asm.c +cd33925b7e287906f7f5e93d23050ccc opcodes/mcore-dis.c +a1e6118005cebebff243f99976b3b4c3 opcodes/avr-dis.c +0f880fe03c100d7c8fb0f15831d3a331 opcodes/arc-dis.c +7a2f7f5e159e4f535c444f6bc2eb9028 opcodes/m68k-opc.c +ad5d5cb27710fb03976c6193c9bc5472 opcodes/fr30-desc.c +00d84600d79ca227ea8b2fdbd1e99c6e opcodes/mep-desc.c +c5cefc6c55710567cc64c0a1a1100b9d opcodes/ChangeLog-2014 +1d5aa948760e7cae39e58f26b58f4cec opcodes/m68hc11-opc.c +5c197b9f327e126a51e7b062815633c6 opcodes/ia64-opc-i.c +48a769304e55eaeba3950b5697686e24 opcodes/ia64-dis.c +83efd9dde6f8f50e9e73c0274180824c opcodes/ip2k-opc.c +98b52ebbcd36bcbde09769c2a19c5e24 opcodes/spu-opc.c +8e3b2b00e754e29a13ae8899ccba72d8 opcodes/disassemble.h +5473938b579cb2cf67a7f4619ee874cb opcodes/cr16-opc.c +819894bb6ac5b7ffe23786c078a7cb22 opcodes/lm32-opc.c +93c5cec39898b9fdfa2c922574c8df63 opcodes/i386-dis-evex-w.h +fa33410b67c1ecb5d33d2a725b32bb55 opcodes/ip2k-dis.c +10f4bbd5302084c3c3c23ad9267e67b6 opcodes/xstormy16-asm.c +d27024ab35283ac5a826095aade69387 opcodes/d30v-dis.c +008443d8c5e5225e40853b9a8840afe7 opcodes/csky-opc.h +f7f3895dfa9bcb467004e3cf58e595c9 opcodes/Makefile.in +7f842a7e6de40fa8c587ab13eba69470 opcodes/microblaze-opcm.h +cb15aa4673f865ca48ac31c38373124e opcodes/ia64-waw.tbl +a78a722ace737ebb1a0b89cd126c61b4 opcodes/ip2k-desc.h +73ba3ea7ecd720370b458f7de1c01b9e opcodes/tic6x-dis.c +503eedd3c1a6abc156cdf73cc790c5e4 opcodes/nds32-asm.h +413859164179ed4b06e5515ebf65b708 opcodes/mep-ibld.c +571ec301c4fe40894165514d3eba71a5 opcodes/or1k-opinst.c +20d54844aca06dbf0637ccca248e96e9 opcodes/ChangeLog-2017 +fd09a328d7e2f13d57d37f8a3890db52 opcodes/arc-regs.h +b325f509f651db2ea38e769dfb9eb12b opcodes/mep-opc.h +8c0a8f09cca04835a5abc4b724d9336d opcodes/xc16x-desc.c +2f4e521a2effd4e25a45fe2f54363579 opcodes/i386-dis-evex-mod.h +c5a0687a151b98191815b8e9594b2681 opcodes/iq2000-asm.c +708e7fcd7763adef8bb27ce859a8e8b9 opcodes/xstormy16-dis.c +753a0533d1493d8eb512218d1186dee1 opcodes/xstormy16-desc.h +520b40c7e8df07d95dac5edc956206f3 opcodes/crx-opc.c +aa3895af184ebb6d935b41fc89922e9e opcodes/aclocal.m4 +55c340b67f22b842236811f4e3963c91 opcodes/dis-buf.c +4d4ed6e7ee85ae130144f172ca19059b opcodes/frv-desc.h +74473586c866618a81c678f1c8972168 opcodes/mmix-dis.c +04dcef9eea263de111df3764fb1a97c9 opcodes/rl78-decode.c +38a6dd92d3fd8f1a2eb2334be22de713 opcodes/po/es.po +a8ee89dd661a7b12af6f36c870d4c4c0 opcodes/po/sv.gmo +d322f2267bd0813da989c4e0e189cbf0 opcodes/po/id.gmo +060c0569db897d17ecc2f3c28415ba9d opcodes/po/da.gmo acdfa8f12e84870793f907b8f963df90 opcodes/po/fi.gmo +e5cdb2e3a54fbf2256ea5dadfc372055 opcodes/po/uk.gmo +a5f63a3c0b77dd9e3d4791d46383dad6 opcodes/po/opcodes.pot +f4cea170d318aa9757faade5a035318a opcodes/po/pt_BR.gmo +64163e7952ced31b2cf20dc47968a84e opcodes/po/ga.po +c32c7787ad8c899a3af5ec2e47518888 opcodes/po/da.po 28fa9a522cdf0eaf64347fa836e25d0c opcodes/po/nl.po -3c5d7ac10fdc3b9c0fdf15d44512d163 opcodes/po/ga.gmo -38f9ee9f5119eb1b9f7c3392994f0c34 opcodes/po/fr.po -18fe115c401c0e1605b2f2e4db52219b opcodes/po/zh_CN.po +79b08e088d990c640efad54c3788ef74 opcodes/po/de.gmo +20ec221c41da2d5e1c3e5b97f7f0e18a opcodes/po/POTFILES.in 785cbecc7f597c1374b732ed3d23282f opcodes/po/fi.po -e4444c7716d7f33ae1586f3d19dc5de1 opcodes/po/it.po +18fe115c401c0e1605b2f2e4db52219b opcodes/po/zh_CN.po +1561b68827f1e1fc6a5f480b34d64542 opcodes/po/fr.gmo +e66456de97b5aafdd2e0d025a20c53e5 opcodes/po/sr.gmo +cf932bb836eca328eebe2f5e4c065855 opcodes/po/fr.po d54ddba4f1ecab20d57ff9452bba3076 opcodes/po/nl.gmo -325ce08e3397bdde7333b4c59b5d6fe3 opcodes/po/sv.gmo -dd66d1d6c487b0dbf96d6e7eaaae99cb opcodes/po/fr.gmo -76cd70440a4d9af37c4f86509a2448d4 opcodes/po/sr.po -076be31a66a76e9a13089a58f2629d1f opcodes/po/ro.po +171ad044cdc6b2707b6094583bb59173 opcodes/po/pt_BR.po +d8f7a299b95a0a3da8643c69829e025b opcodes/po/sr.po +3c5d7ac10fdc3b9c0fdf15d44512d163 opcodes/po/ga.gmo +63cbcc9d5f4f1e1b5912755fd5e2d5cb opcodes/po/it.gmo +8582d98be0cbd4f13aacf73c5183c965 opcodes/po/tr.gmo +ac5bcf32b58e34029b5b004d5a8cd2c7 opcodes/po/vi.po +40c276423529210775c75de444ad94f1 opcodes/po/es.gmo +9fa87849e97f1e412646da4da3e2ded4 opcodes/po/ro.gmo +f4989e54cf95c741a994fdd722b541ee opcodes/po/sv.po 7b57bd6a633669c3e550cfc665872a31 opcodes/po/zh_CN.gmo -3ea8949fae591e0dfdf1c9def503d94e opcodes/po/de.gmo -b1c6531d27e3aacc29106047da0ff03f opcodes/po/POTFILES.in +076be31a66a76e9a13089a58f2629d1f opcodes/po/ro.po +6cab0da7ed0b3051e9f002e359fc8fb4 opcodes/po/de.po fcb127c8f57c6a38f36fe3eb53fe3d3f opcodes/po/tr.po -8d88fbbf8e52d3ddde34fe09fabb5d7f opcodes/po/uk.gmo -ad83d27a32daaae4c0e3ec1b8e210582 opcodes/po/opcodes.pot -38a6dd92d3fd8f1a2eb2334be22de713 opcodes/po/es.po -40c276423529210775c75de444ad94f1 opcodes/po/es.gmo -6945f5a6705f274ee9f4845030b39e24 opcodes/po/uk.po +54774a0f3f118df78dec815cdb50ca66 opcodes/po/vi.gmo +4438b95a4344144658f227bc2fd6865f opcodes/po/Make-in eac8a474e91112124bc872824d26de92 opcodes/po/id.po -ac5bcf32b58e34029b5b004d5a8cd2c7 opcodes/po/vi.po -060c0569db897d17ecc2f3c28415ba9d opcodes/po/da.gmo -d322f2267bd0813da989c4e0e189cbf0 opcodes/po/id.gmo -63cbcc9d5f4f1e1b5912755fd5e2d5cb opcodes/po/it.gmo -1ded054093de910d9786c62bc4fe8cc6 opcodes/stamp-h.in -574537d9972c9161d297dcfd7eca0282 opcodes/dep-in.sed -4f78131246959cfe14f809fc240cc0e9 opcodes/d30v-opc.c -2e626a05dda4b96b9bbab43222079aca opcodes/tic80-opc.c -94f844a6e7ec8d1b7bb50e4282f01dfa opcodes/csky-opc.h -74ffe5f8ffe7786e93729c50f53aa7c1 opcodes/mep-opc.c -da9b0c5070ed70bdf01cec977773dbb1 opcodes/mips-opc.c -22e1f883eb6c3943add344aab182c3e1 opcodes/lm32-desc.h -7450696a255e8752ef86e644bcd2d2a7 opcodes/pru-dis.c -4e6ec2c7f5ac51a0c6accd0d7268507c opcodes/m32r-desc.h -54aecd3167b366ef291169f9c524566c opcodes/m32r-ibld.c -e07f158ef8a4325642192a58478181a8 opcodes/pj-dis.c -566de13991bd0713e9b58e170e197e36 opcodes/xstormy16-desc.h -524d5987e3e34a7f3f0136000e406214 opcodes/disassemble.c -6aa48cbb4ebf7ac297d0957fba8e9043 opcodes/s390-mkopc.c -a800e32a01bd70b5fcd29076b8b50260 opcodes/i386-opc.tbl -9175cac63df61a97e26c780f9d8c46ea opcodes/xstormy16-desc.c -a67036fed328f0516d18b0a9d0060a85 opcodes/visium-dis.c -2faa9fe04112f95c9de3c97193cedabf opcodes/bpf-ibld.c -409815ac07cafe85764258e4569e85b1 opcodes/s12z-opc.h -b969a750db9679c41a9517973294f8a9 opcodes/ChangeLog-2013 -5375b7ee99c1c53b98e45888d2073260 opcodes/or1k-opc.c -16fb6269b9dd9cd946593f5853eacd57 opcodes/frv-opc.c -3ea3e635a3fab1b00949d21151da606a opcodes/m32r-dis.c -f8aaaed8adc918ec92754712370b37a5 opcodes/m32c-dis.c -1b1854422db842d0dfa01c932a5f86ae opcodes/nds32-opc.h -08c1c3f94b2e57654f2ef6a58fc7f5fa opcodes/mt-asm.c -f54be2e715ceb6cebb98fab5bc37e7db opcodes/m32c-desc.h -4175b1cb0aa91c804ef96549151306ea opcodes/ia64-gen.c -491ce2b9d8011e43064bf96d1588e9c7 opcodes/mips-dis.c -98a7172aacc3c26e188d9af1f05987c6 opcodes/arc-tbl.h -d1540a05666d708043672080b9852525 opcodes/ia64-opc.c -27d9c849353433d4e3fd10a76a6bc197 opcodes/frv-opc.h -b798dff4957ae2ffd054c2d9f6abc5de opcodes/rl78-decode.opc -2cd4a17f5984229495651cace665fce3 opcodes/lm32-asm.c -2bbcdade8928649e0cbcc80c04883db9 opcodes/nds32-dis.c -3d439dfaea073141a4f5f66e63597f2c opcodes/cgen.sh -ff759b14d99f00316b5c017dba1f04e5 opcodes/ia64-opc-m.c -7b3ddb120b2849ba762257c6002e032f opcodes/i386-dis-evex-reg.h -c4269744352d0a75be362f62e2ef5ebc opcodes/microblaze-opc.h -58596b9ed5d3d62f2da69749fbfcfd16 opcodes/h8300-dis.c -36bbc95935a66605e53901f5114a74c4 opcodes/micromips-opc.c -622898b6080926b948433c0eec3ae0c6 opcodes/cgen-dis.c -1f5acd3452a0a360529d00ef50d69b58 opcodes/ChangeLog-2011 -3d3ff87bcc177356427ffb9052b11603 opcodes/v850-opc.c -a8ccf732c1ab7a20608752490e0312e6 opcodes/mt-dis.c -2c0e32ad569cb43fc87917b5ab8e201a opcodes/arc-opc.c -2b5a34a6f22860084dbe9ede9406cb6a opcodes/xstormy16-asm.c -630e0cba56f56ebadd30ed09e7b79d46 opcodes/xstormy16-opc.c -e90f5d03a7dd2d3bcf05962da4859f16 opcodes/msp430-decode.opc -8e786067e487eb6a028eeaac6c7ba86f opcodes/i386-opc.c -a71c8f70a407fd65c5ace84627534233 opcodes/iq2000-desc.c -f22a599b9502b56824806a9b77f64921 opcodes/epiphany-opc.h -b79d16649809f0b2320b186a18ec7465 opcodes/frv-ibld.c -3b15094418dae0db7f120b454b9f47ba opcodes/ia64-dis.c -8b3ddd5133e7d6be31561bab3fd8115e opcodes/microblaze-dis.c -b0ce0064c01f5c1a724a5ae70a239229 opcodes/cris-dis.c -c60d2e3877cc0ca4c718bce5411f2dc8 opcodes/z8k-dis.c -cb6e028611eef282823205a2bb78032b opcodes/epiphany-opc.c -f15a55fe8848eff9739f8f1df7e1edfd opcodes/sparc-opc.c -e3ba25efb0c9e410918b839c9b6c62a8 opcodes/i386-opc.h -615bf8dc1c70b14d80be2ae6f31feccf opcodes/ChangeLog-2005 -36815e66b0e3b70beb7066db96ebd6bf opcodes/pdp11-dis.c -f4f7d155f29225a1a39bc5ba991d08f8 opcodes/i386-dis-evex-w.h -8c4e207d21964d28b35af0f5eaa16b36 opcodes/cr16-opc.c -cf82c2e0ba1a939359d940a0ed783091 opcodes/tic80-dis.c -75148b05d124abf1cb8892f0c1bbdb0f opcodes/lm32-dis.c -aa3895af184ebb6d935b41fc89922e9e opcodes/aclocal.m4 -61da68ae5e90b3682937e412f1ba6729 opcodes/m32r-opc.c -7390461b1a9ccc867bccec21fd69121a opcodes/riscv-opc.c -e30b518601a060b7de8762af676d2b0d opcodes/tic6x-dis.c -5de34009ed810a80604bf75f7a4fe086 opcodes/configure.com -ef6602b963f2a903ab9c81134c6b8d29 opcodes/.gitignore -cc2157ffd475204b12be780a1e2683b8 opcodes/arc-ext.h -7a0278302e523c84ba412f8b8000c902 opcodes/arc-fxi.h -bb46b12b0a3b0a94487eb7d70f773827 opcodes/ia64-opc.h -ffd27e33415c11897a2b32d4253f8de3 opcodes/nds32-asm.h -b947e552ac17f019b61cf393dbf5871c opcodes/fr30-desc.c -8e0c52e2f0edc2ae8b0cba30d86d2a74 opcodes/cris-opc.c -bf4a15406c0963e0314a019ac39b10f0 opcodes/sparc-dis.c -baeef46bc999ab931bf2171225bc37bf opcodes/tilegx-dis.c -9d4adf3dfbfe2cfb10b8f2c0e86ebd68 opcodes/ip2k-desc.c -c9ff38e08b4ef3d76db51a561c1d6efa opcodes/tic4x-dis.c -9cfdae46f8255086bca20fbadd8892b0 opcodes/ia64-opc-f.c -f2218edb333177d243444b44a52f1954 opcodes/z8kgen.c -332b132cc624651ca5dba866a879a304 opcodes/ip2k-opc.c -c825caabde2126bbbc946b16fb98e72c opcodes/arc-ext.c -237e54af83f0143bd2a6e7eb1b712eed opcodes/bpf-desc.h -890707f21c8ec208ebdadcdd4315fe67 opcodes/tilegx-opc.c -bfe52955d878be1553a2995beb23e5a9 opcodes/bpf-opc.h -fd90d45321bd491542004915f1f35020 opcodes/i386-dis-evex.h -6a0921003f74fae17304c6b675b73624 opcodes/vax-dis.c -c4a01ac3a7bbcb19fb158d1f55b8632c opcodes/epiphany-dis.c -baccda77a6b627bb2d2914a3dd86da1c opcodes/s390-dis.c -438c4d03003e13dea319f84d29d8ff5a opcodes/iq2000-desc.h -39b7e834f46b8cf1879169b1f12c6ed3 opcodes/arc-regs.h -cb15aa4673f865ca48ac31c38373124e opcodes/ia64-waw.tbl -dbd383d9a8cba4ee07270a0244966e8c opcodes/m68k-opc.c -efef2c4d2914a9253b8617177903292e opcodes/rx-dis.c -435d2d8a6fb0f96af81cc378e0a427ea opcodes/m32r-opinst.c -6e07dc528b2d5182584bd1c077979de3 opcodes/ft32-opc.c -62212a9bd5825390d47c6f1216fc638e opcodes/arc-nps400-tbl.h -8928a562d4675d31fafbecd6f8c601ee opcodes/s12z-dis.c -82f85f5946700d6818256ee0b9c5ecc9 opcodes/config.in -e4686390944c58887736ccc5531a832b opcodes/epiphany-ibld.c -68beecfa8193c6c71ed5816c7be115d5 opcodes/cgen-opc.c -dc4e000a3be6943742b7a914103f6cb2 opcodes/m68k-dis.c -c5cefc6c55710567cc64c0a1a1100b9d opcodes/ChangeLog-2014 -8c02ead48b4cf74ee87db02d2af6f4f7 opcodes/sh-opc.h -9978b0ffb15f1ad48bc31816517ef965 opcodes/ChangeLog-2009 -bdabb101f1d0c544aef4513a77f1c32f opcodes/sysdep.h +e4444c7716d7f33ae1586f3d19dc5de1 opcodes/po/it.po +9d1cae79a25126dc0896dc2e82b5a698 opcodes/po/uk.po +8a60e050a63d738c7e0e40b322cdf939 opcodes/xc16x-ibld.c +e588cff3673701457376d085e099b82d opcodes/mt-ibld.c +88debeca8663074070e453fc6c3c27e8 opcodes/lm32-opc.h +f16ba353286984e5dbc78a47615220fd opcodes/visium-dis.c +7e19cadc0761af942b13cf3fb9dd0b76 opcodes/arc-ext.c +674c405a59885a9f4f11e0967639fd71 opcodes/microblaze-dis.c +1718b45c678a851d089ec7c4edaa9906 opcodes/ChangeLog-2004 +5ca469797578b6704a450efc586af57d opcodes/xgate-opc.c +2f3429ae954afddf10016359e63bd9b1 opcodes/msp430-decode.c +f822cd14af601c588b083207051a8264 opcodes/mcore-opc.h +b691902c75842b6e7b79df2a850f47c8 opcodes/bpf-desc.c +9f3fe6dfd658aaa2c496d012f8183c6a opcodes/bpf-desc.h +c8c969b8116ce886928420e7ce8f6ac2 opcodes/opc2c.c +dd9c0f603529c92bc4934d7ae00d5260 opcodes/m32r-ibld.c 65eb4d967fb92ec8ccadca5b068c4e84 opcodes/ia64-ic.tbl -947c93fc1402eb82fbb7d19a902a7bd4 opcodes/fr30-opc.c -dc024d3b48a1df846b5ba8a9e3298ee9 opcodes/ft32-dis.c -b5c6b8bd0f1a6dd6ce064e362b47fb49 opcodes/ChangeLog-2016 -3ded40e685543e119cddd0c56d5bb728 opcodes/m68hc11-opc.c -adeaeade8ed2f992a18a9f086feb2284 opcodes/iq2000-asm.c -f70ebbc0645dd4d36bcbfc84283e1790 opcodes/metag-dis.c -dfb951b900a189002b3954ccb21c3ac4 opcodes/ia64-opc-d.c -f345d22e618784b582142c4817d7be03 opcodes/or1k-desc.c -713fb26f79662b078390d218dc5d977c opcodes/aarch64-opc.h -430b08acaa3b93fe0b76e7b74f59dbe5 opcodes/msp430-decode.c -331e039f15b7c141e1434ed8fef4263e opcodes/mep-asm.c -4a40d1408d80c57174f7efb38429443d opcodes/rl78-dis.c -d82f778486a2f3dad8ecc96f35afe6ae opcodes/ppc-dis.c -9cfd19453ae2eb2dbba892557f512b50 opcodes/ip2k-dis.c -ba8859bd07937a25f0dc06b68b4033c3 opcodes/frv-desc.h -587cdef323170c70414621044346b1ee opcodes/epiphany-asm.c -ed9dfcb6b0eeecd1d964aee665bfd6f0 opcodes/m32r-asm.c -ec3b79e12fafc6731e6da93a3f4f3a83 opcodes/microblaze-dis.h -617dd34137ace7108dd596f93f088e1c opcodes/mt-opc.h -2e9da4352e621be7ea01ae505437718d opcodes/xgate-opc.c -5d3ea81f85e524bfb47797924091da61 opcodes/microblaze-opcm.h -5c0325665fea6f7ac350c2da238fca33 opcodes/lm32-opinst.c -dfa7512ea9e7047a2415320fda0603a7 opcodes/aarch64-asm.c -5cd79bab2e3be29e79d6391f0be7da35 opcodes/fr30-opc.h -16f3a170d6b704573bfd0788b4d1061e opcodes/ChangeLog-2007 -7386a90f40efe42cfa59414b164e6387 opcodes/cgen-ibld.in -eefb6b283c1f5f324ddc347cb0c1c5e0 opcodes/m32c-asm.c -48bd09ebbb27ea945bcea4aa1d4e8a80 opcodes/rx-decode.opc -8bee8bb82de67545ff6eddb055efac82 opcodes/cgen-asm.in -52e8f95a3c22b8b1bbfa18033ef10751 opcodes/spu-dis.c -db5af979acf8d7c971301b1ad9efaab1 opcodes/aarch64-asm.h -78cbfb6fc5204bc6fac5df6560aad4e6 opcodes/aarch64-dis-2.c -9115c9a6980203954db56c21263d485a opcodes/ia64-opc-b.c -dac3ef6c53b2a3576ef25b740d4a28e3 opcodes/bfin-dis.c -6689549594e4fc4077e392e6c267b499 opcodes/or1k-desc.h -49b5ff2ba15348adaab7798b44348763 opcodes/ChangeLog-2015 -651aca68ebd849e009abd77b4efafc7a opcodes/m32c-desc.c -68f2925f0e8737838745359c2789455f opcodes/i386-reg.tbl -9641b12f59bffc20c6bfbdfa700422ae opcodes/i386-dis-evex-mod.h -d53e6a0bad0618b8e0b6dfe07a024146 opcodes/xstormy16-ibld.c -4d8de938baa92aa43c3a65c1c3c0e25a opcodes/iq2000-opc.c -67d40b59d5df7ffd33d4f9d0787b3a64 opcodes/xc16x-opc.h -27516f861e393d748f8fc2e352eb6b97 opcodes/arc-dis.h -6cbf1fbb631097976d9c0c68bfe90387 opcodes/pj-opc.c -80f77954e03c43da64f82b89d9c3473e opcodes/crx-opc.c -7ea4b60bdfd2f2ecd3d3d68d9903489d opcodes/avr-dis.c -c48dce3bade3935d45022aedf6e5597d opcodes/opc2c.c -d0ee896bdd884bf2aeee011ed6bc6b99 opcodes/nios2-dis.c -0dd1b3cfb652e0fe7672587cf0fefe33 opcodes/bpf-dis.c -c098c5cde9b3dc17ecf3f4f5626dc002 opcodes/score7-dis.c -c5c2b41393a7be2985845e58b6c53467 opcodes/m10200-opc.c -a14b76205ed28ab9fdfbf029da701c93 opcodes/ip2k-ibld.c -cac154290bf824dbd9c8efb3b20ca6de opcodes/m32r-opc.h -23f38d393554e090492f1bdacae99ae6 opcodes/mep-dis.c +8f29603cb2e7744d3e34416133374c1f opcodes/xstormy16-ibld.c +bf28f43729d1aadd3dcad2bd5f22b779 opcodes/m68hc11-dis.c +5ceae53c468516f78f848ad643d83c4a opcodes/riscv-opc.c +9ab4710c399592e870056d4e4d4862fa opcodes/tic30-dis.c +23232c71137fb48f4c964575eb061942 opcodes/score-opc.h +4c6704cb078b69d535c636577896a911 opcodes/v850-dis.c +61115678ea750fe3f2257ec6af730890 opcodes/mt-opc.c +19121a0d4bb91a7b37dd9d3e1aa0fcff opcodes/nfp-dis.c +c47199c7b2025c08296d09dff215714c opcodes/mips-formats.h +019da26da3df4e81ada4b101eb260e6a opcodes/pru-opc.c +442625919c655977107080e8e743c8d3 opcodes/nds32-asm.c +d1b3ffd9b0170d5f44814ecbed7d8426 opcodes/ChangeLog-2019 +0d0b37d02e8777fad6cbce1dd813cd9a opcodes/i386-init.h +688973e8707338a678f61efbb6fdc7a5 opcodes/h8300-dis.c +6bea9f0dd39100777058530653fa5209 opcodes/nios2-opc.c +fabc9734b0ee3722118bc0ac9ecb7a41 opcodes/m10300-opc.c +0f36c6d4c3488da2fc5e526a73e53ceb opcodes/ia64-gen.c +4271f94ecc3134f0e1874890eac2aa2b opcodes/z80-dis.c +d018a0c80e0c081ef345f7b389f788b6 opcodes/cgen-bitset.c +d90e87dc44e3ef9f18b9768584251682 opcodes/fr30-ibld.c +d13d8e3addfc92dfe1f87a2c72c2c65b opcodes/msp430-dis.c +01b4566856a534dcd1ce3ee48e3aff91 opcodes/tilegx-dis.c +8419d129842ef8172ac49a00c8204187 opcodes/opintl.h +eb12ea983f4fa987448703fd9f7a79dc opcodes/xstormy16-opc.c +6b2a6d08045d9b19e6aca8e158394426 opcodes/score-dis.c +d21e139ee101cf2babd89e239a895ecd opcodes/s390-dis.c +cc9d1cbb8ab38a22bcb732a8aa466374 opcodes/z8kgen.c +4bbfb0a08e3e91dde4cc6d1ce7a281a9 opcodes/aarch64-dis-2.c +7ad197ca38ebec699e9ad5b07b639d44 opcodes/m32r-asm.c +469b691de873851445c2883508c1ff98 opcodes/frv-opc.h +33f55ac746315275bc0aadf45733cfd7 opcodes/epiphany-desc.c +75cb7f7a3fba79102efdd48bc1d936e8 opcodes/ia64-opc-f.c +d92c351dc9d327e242f39b6892190aed opcodes/pdp11-dis.c +23078879b255086077eada13147b59eb opcodes/aarch64-dis.c +d2452f7aa434889b8d75a711ab0e785b opcodes/rl78-decode.opc +e64178174fc9f1f48f225a98de7cde3b opcodes/mt-opc.h +fa56ea53b38b700745c4b7c34816a906 opcodes/xstormy16-opc.h +131f8227c9fae1e57f63af3dd75ab7ca opcodes/ia64-opc.h +eb7229fc510538611dcf0ac21ceee4a6 opcodes/sparc-opc.c +526d21bc118010b5b5fd0e6ce2ec7801 opcodes/csky-dis.c +4a05967363c83aa92c150a787061a5d4 opcodes/crx-dis.c +841ced18d86660d504a98bdd8ce33da8 opcodes/microblaze-dis.h +65cb1af1730d1f7f4b4cfc98cf91487b opcodes/aarch64-tbl.h +cc32fbefe05310f974526afb00a541f8 opcodes/epiphany-dis.c +597bf917323c43364ef944e6d8aebc77 opcodes/i386-gen.c +fffa2c5f50218043bf3ea764580e3d09 opcodes/pdp11-opc.c +5f0100ff4cd4f0b110ff7ac9bc1c288a opcodes/ia64-opc-d.c 04f60ce0808d9609bb0bcca4d5d12646 opcodes/ChangeLog-2008 -b192ee206cc807dd92ffe541cb819d6f opcodes/ChangeLog-9899 -7d7d28737ff404f709104accbd7b7926 opcodes/ChangeLog-0203 -04cbfc017d30a4828f33d6f5923ed4c8 opcodes/wasm32-dis.c -dbb0a055a24ca1f303e2f21d58f9b9df opcodes/csky-dis.c -1bffa0774f1aa6079636b5bcefef8530 opcodes/score-opc.h -fffef6cc7a9ae9d8e7ccd4392d63f042 opcodes/score-dis.c -f7df206888f13ed1c31c9a85e739391e opcodes/i386-init.h -36bbdde9c1a96091446ad5966085ef0b opcodes/i386-dis-evex-len.h -d679d499a60c06d7cdb14aa5b211c0ec opcodes/mt-desc.h -e5ec39e14e3253b623ca4cacde699d8a opcodes/tic54x-dis.c -09518e4a82b75266f400e40fb3ce7e84 opcodes/alpha-opc.c -f0aaac36201cb73e620ea4621ab9f210 opcodes/iq2000-opc.h -adc82b6da55150afc85422caac7c70cb opcodes/ia64-asmtab.c -c3d3ebdae6fe5bd33a4c6123bd1483e4 opcodes/d10v-dis.c -ca785717d67af63dca75d5b7d3918d16 opcodes/ip2k-desc.h -62a30cfb1b506ee2c3916ee13e9eda8a opcodes/m10300-dis.c -5873d90c70d423548dfea27569c82865 opcodes/aarch64-opc-2.c -0de342db0b374e59ca6194ec8f3babc7 opcodes/xstormy16-dis.c -c4d4746528ee77d52df99f4fe0e00d72 opcodes/hppa-dis.c -01abbef880e39c4b2f93edc6103a7d90 opcodes/i386-dis.c -91e23bfdf37c646e6c3aec223f321d86 opcodes/or1k-dis.c -a6340db3e90d5c652c8c6e2462c101a0 opcodes/mep-opc.h -5877ba5e080a7c281d631fa730cf3f50 opcodes/spu-opc.c -baa732eb2fbecb56e9e30b737da1afce opcodes/xc16x-asm.c -f5b2c3d266c917c8af5ce44c16e788da opcodes/or1k-opinst.c -3f27e5d03b2bbdae9ace18719d890ee7 opcodes/or1k-ibld.c -e469ca05f8897c09344a3cf2bcbf4088 opcodes/tic30-dis.c -62c60e4cf741ae389a3228881f4a98ba opcodes/Makefile.am -58e924c52c2bfeef23d22c4f482edcfc opcodes/ChangeLog-0001 -1801462a3689707e6089fd618aa7be40 opcodes/m32r-desc.c -72af9ecc4c7cb00bf19fa927daa8a16c opcodes/bpf-asm.c -0a426856e0bd0d7f37be7c6755128a54 opcodes/moxie-opc.c -de5e932dd2f88ac5c2a0f1600bc06467 opcodes/makefile.vms -84a4c3f58f683c8637dc4f0a3145c5e5 opcodes/lm32-ibld.c -9300bcc15a455fea2d4c7de9b64701aa opcodes/or1k-opc.h -1032e877eb777db2261030fc31bf4a0e opcodes/dlx-dis.c -1520dab72c651e105637ea8105b3904f opcodes/m10300-opc.c -9b9843977eee20ed8320e746be879160 opcodes/crx-dis.c -a3b3669c240344adf0664ca0c38cabcf opcodes/epiphany-desc.h -7fb5908340d83b03f60aecd9e38851a5 opcodes/mep-desc.c -3e9de564a7507d1fdf074285f85c60ca opcodes/z8k-opc.h -466aaf368e34323c679a1231a1255815 opcodes/dis-buf.c -8d02c591f7889e4a0d6be47c55d4168a opcodes/ChangeLog-2012 -b0ca98da43e132fb38f0fb04258113e3 opcodes/s390-opc.c -4a4030d4da3dc16f1f677c97b76744b9 opcodes/Makefile.in -cd22e5e1021b0da05d205be492fa4a9e opcodes/nds32-asm.c -1cb0edbae89407a92aac490a78c47de4 opcodes/xstormy16-opc.h -961a51f86de7b48d6121b1d6842b705e opcodes/xc16x-desc.c -54f19ae8cb21c66d39f175be31b498d4 readline/ChangeLog +2adb7cb7865ac91208f5f94fc4d9f397 opcodes/ChangeLog-9297 +8fad83782a16557518e6e1fe9209d681 opcodes/ppc-dis.c +387345812e68e53924155857fc04a0e4 opcodes/m32c-desc.h +4a34ac47c42441faef3328fb7956fd1b opcodes/aarch64-opc.h +2853d9d28d225b56c3b31c90b67f01cc opcodes/m32c-opc.c +2d3688c5394928e352ab201a644a0ad3 opcodes/frv-desc.c +6d5b4d9f1d16af08425c9f535c2bd8c7 opcodes/s12z-opc.c +ebf67e99ddeb874e4c9392cf123776f1 opcodes/frv-opc.c +9b06963656051ef64d6be0e77d9fb6ed opcodes/iq2000-desc.h +8203df8c8c15e7452fe0668da0315e3d opcodes/ia64-opc-b.c +4ea6d0baa1f363b57636ca3dd7034477 opcodes/i386-dis-evex-len.h +5211ecdeded1b28b83b2dc4bf3735fc7 opcodes/xc16x-dis.c +e266f9159d4b7e960a2f563864cd10ce opcodes/or1k-asm.c +814886d88b2647798b07bb42417cd3f1 opcodes/aarch64-opc.c +9a6430380ddbcb6572aca7a87a8b16e5 opcodes/epiphany-opc.c +07a7f07fb61d1f99726057f4938accff opcodes/lm32-ibld.c +00b1f77051fa65b22343c8b47e655519 opcodes/mep-asm.c +3bbc967011d5ed527e98339804e854cc opcodes/mt-asm.c +76565156d6e6c8195e95e48c73e65abc opcodes/or1k-ibld.c +7d4a9b7f7a2f3d4ea981ccade454d0c7 opcodes/cr16-dis.c +34e2a5d51c86cc4b94a35be5eee6bc5e opcodes/or1k-opc.h +5f8b9fdcd2550134a2b196ec646bfb7e opcodes/bpf-opc.c +fbad94073771bc2a5d775bd0c2ab6680 opcodes/fr30-opc.h +99883223782e90968aba0c8f0bd6048c opcodes/arc-fxi.h +19c02d63c663aa6b0653248b1ae1afdb opcodes/tilepro-dis.c +52d3bc5e8206849119b615744c9dcc17 opcodes/tic54x-dis.c +8772f395c60a8f2a0ff1cd1b98462391 readline/ChangeLog f7eff6ff334c3b0c2c3ad342127ab135 readline/configure -f8e5702e65a537e2c230a55b3740c5aa readline/configure.ac -d5d99819ea5000e9ddbb2f0f3bff121b readline/aclocal.m4 -39b5c21aee3d08818acdb4e097717a47 readline/.gitignore -ed5015dd567d0accb7461ab2064f3a02 readline/README -d109ef94402e4db5b3ce76273f0f5136 readline/readline/parse-colors.h -b5fc756b0f152e134278645b689bd27a readline/readline/rlwinsize.h -561a7c459fb18eea663ead0bc26819c2 readline/readline/configure -a646075e19b4d7cacffc803ee50f3603 readline/readline/histfile.c fb775f581f20b33e3e4d976624d2846e readline/readline/display.c -d32239bcb673463ab874e80d47fae504 readline/readline/COPYING -5c79feb71d62b12e3f0c17b9c010c57e readline/readline/terminal.c -cb9d167c3cbb645b1462b49d9f06ed49 readline/readline/kill.c -d446c855fd6306c5e33ead7961966e79 readline/readline/ChangeLog.gdb -4ad4f0207bcb95eecbfd045cc8abd189 readline/readline/complete.c +1f4c5f8ef40d5dca1f522e1825536034 readline/readline/rlprivate.h +5ec5eb2bbd58665ce39d3dc6564ff768 readline/readline/keymaps.c +f9f0bab9b1fe9bec4372062f4e0e5276 readline/readline/compat.c 3a8f83eb361fa8b35ee1c482d13d60f2 readline/readline/readline.h -83c1a52f267a25a5433f38c876516090 readline/readline/macro.c -dffba5c6716eca975a5f5aa4a8981934 readline/readline/doc/rluser.texi -c983fcfd60938d8f7d055cb148e159fd readline/readline/doc/ChangeLog.gdb -14d209347769688c6d9615f6e0b68dc5 readline/readline/doc/readline.info -1f6cfa081d0d09b6f8f29b17c3c53531 readline/readline/doc/readline.3 -f5c89e4fa898ab43617300aa0b0ac090 readline/readline/doc/version.texi -072910d553f79906db69fa7c0e956bba readline/readline/doc/fdl.texi -c2e207604df8d9c03739a53c9c931624 readline/readline/doc/history.3 -b35bf3782935e4487f8dcc9d1c0ff91e readline/readline/doc/rlman.texi -e117b570454dfc1ce5e6b4d6306eef12 readline/readline/doc/hsuser.texi -4e62e55398e7af4d4f8257ab56a72e3c readline/readline/doc/history.texi -5108a779f463207c166dca9d00b3df86 readline/readline/doc/rltech.texi -8dc95bafc6eb5b4ec0bb0e1b7a7f5890 readline/readline/doc/rluserman.texi -bbb438bb25b4bf7cb41c22cd9d11bc0e readline/readline/doc/history.info -78841a9616cd5acd3c009b285b0d7145 readline/readline/doc/hstech.texi -b4dc0e3f79901d4e42b45c3fdf8ebdf7 readline/readline/doc/rluserman.info -2021591f44bcef200cff969ec80fa845 readline/readline/doc/texi2dvi -78cc21ea66df5c5578a77153ab191eb0 readline/readline/doc/texi2html -5893ee4316b9ab57bc9bbb1f71a3f368 readline/readline/doc/Makefile.in -5a71fb717996d2d8c0789217e7ea25c7 readline/readline/colors.c -f23c94c9d1cd34e7c2d9469d5c5651d4 readline/readline/savestring.c -67e89d03a77d9ca8d18514a67f5fb360 readline/readline/configure.ac -5ede70a48f9148ac48441bd7a27d13ff readline/readline/colors.h -5944f232d36d940587fa1096f473de40 readline/readline/undo.c -d8b53cdfd1b47f63cc02b3b1f04f4a29 readline/readline/readline.c -b4e8888ab8ed3a4d84679fd74e1df092 readline/readline/xmalloc.h -3d339d11259f0c40abfd1dd85f5cb151 readline/readline/patchlevel -fc09e12aebf25dcaa5d8bf91b5fac94d readline/readline/input.c -c66c7ac238318948f0cfbd70013bcc20 readline/readline/vi_mode.c -fc7abc510c5fe4fab6b2986ea9ffa48d readline/readline/CHANGES -74d4df5cd77c38604565f89c21fcacc0 readline/readline/rltty.h -f45865f0b716a5dcf04f6dbbe53f10e9 readline/readline/bind.c -c6e7e71d397a1b4575a7c52169bd78af readline/readline/xfree.c -3c9f0c2ffe2e840bcffda7dc99b17097 readline/readline/xmalloc.c -792922784eade1d03ecb1b33ba8bb7c3 readline/readline/support/mkinstalldirs -caa1d2e25f6044427cb2f1e242f8f2b6 readline/readline/support/shlib-install -537c1dfc8ed232c07360d5e5ad8c3443 readline/readline/support/mkdirs -c8c2f1b3cd574b485a1af581d2d0777c readline/readline/support/config.sub -fa8365366c8c43e0a2014bfb37d0f0ed readline/readline/support/mkdist -07a39485e7d7f3a69ac78cec30ebeff7 readline/readline/support/wcwidth.c -67cfa1ca2fed795999906659d8236140 readline/readline/support/config.guess -f01cade8404f87f796fee1a0a296092d readline/readline/support/install.sh -1d68db8aa18dc87c69e52a710da2cd7d readline/readline/support/shobj-conf -e9b837f9f5e88317b7d3e26659778df2 readline/readline/support/config.rpath -ef8c23b97ab30816ccfb986f63b6f137 readline/readline/mbutil.c -809ad68d08ea4fd1457279388c04bb9a readline/readline/rlshell.h -795cf84b0a33051f4f92a249ae08c33d readline/readline/MANIFEST -6cac2a4379545cecf2ad18b3359b3e3f readline/readline/emacs_keymap.c -32e6f8515635f2a21b7ba555742980be readline/readline/misc.c -3c09a65ac02197e7bbb64a5f3c8ed954 readline/readline/shlib/Makefile.in -a5f7a0953b3a2f3744fad2a83b0835c3 readline/readline/tilde.c -9dca22762c44f563e9f7e7ab4471151b readline/readline/search.c -6c992351d092035804f89c04ad706bed readline/readline/rlmbutil.h -3625c171664b540b594b0a80ae9d44fe readline/readline/rltty.c +561a7c459fb18eea663ead0bc26819c2 readline/readline/configure +63ae5cffaddaa5263fbc9114080fc65e readline/readline/history.h +039febb24d380307a9ed96d8e0767092 readline/readline/callback.c +e194e93b2d732981066cafa2f0a47b4f readline/readline/rltypedefs.h 620c7e85b5587e6fb2729b9e9140ba68 readline/readline/posixdir.h -f4081c3556d3c577290e6fae30659557 readline/readline/signals.c -92aa9452d48004f737356608d3ac9151 readline/readline/readline.pc.in -02120f1e3b60238eff5541ba539dc8bc readline/readline/chardefs.h -5ec5eb2bbd58665ce39d3dc6564ff768 readline/readline/keymaps.c -75ad677f6feb3097e69d1431dafd10e6 readline/readline/cross-build/cygwin.cache -ac922dcd0b2c91ee5b68125a7ec17d37 readline/readline/rldefs.h -8458162d94b1f1051a65979b3cd2b511 readline/readline/INSTALL -85bd734b2b01dd160ea4bcec0e1b5cc5 readline/readline/aclocal.m4 -0746f269c36c8aa234ea74cc20fe56cf readline/readline/tcap.h c1742d5a25821afaf1fa4745e79f5a0f readline/readline/.gitignore -194239475ba2a9248f6387e5a35dde43 readline/readline/isearch.c -c33b871fc3378e35ac5d634decad03ee readline/readline/README -4c38bfdf42677c710c270c654d4081f6 readline/readline/parse-colors.c -0bab71b938eb344efbe8916f3d57bc65 readline/readline/ansi_stdlib.h -2b122ab3c1511c7fae2dd186b3e4ce29 readline/readline/vi_keymap.c -f07ae0b355692aa5ec9594fae2e90cf8 readline/readline/histlib.h -43193f028a5cf0fab061b6d1135d41f1 readline/readline/shell.c -8bc979fa21e71ac7064e34c5c3302d05 readline/readline/config.h.in -9f398666c4d5c91d2c756c24a02cbfc4 readline/readline/nls.c -077a15ba01bd498f5b9f0f520e0bf8b3 readline/readline/posixjmp.h -0975e9a02450c59ca63c885f53439ed7 readline/readline/keymaps.h -5433ab5561fd4f71a33cd2de1791bdf4 readline/readline/text.c -f9f0bab9b1fe9bec4372062f4e0e5276 readline/readline/compat.c -d5392892cb3fedafe54dc538d2488fbd readline/readline/examples/ChangeLog.gdb -228fdc869bfde1be5a26e6c274eaf5cc readline/readline/examples/fileman.c -efe0c1e30d496d5ad7626365c2671b39 readline/readline/examples/rl-callbacktest.c -f6a575d672c878a5491d42efe870f6c4 readline/readline/examples/readlinebuf.h -15d2309b5328ca7bf53a0afe531e124b readline/readline/examples/rltest.c -0233379ede3d5cf94bdb860537a76bfe readline/readline/examples/rlversion.c -ea7fe1b44b4a1115732c66c65a73d16e readline/readline/examples/rl-fgets.c +ed0721db877dcb8c7b0230446a13680d readline/readline/CHANGELOG +01d8d2fe1f165f4e16e9b7306511aad1 readline/readline/history.c +d446c855fd6306c5e33ead7961966e79 readline/readline/ChangeLog.gdb +5944f232d36d940587fa1096f473de40 readline/readline/undo.c +8458162d94b1f1051a65979b3cd2b511 readline/readline/INSTALL +f23c94c9d1cd34e7c2d9469d5c5651d4 readline/readline/savestring.c +ef8c23b97ab30816ccfb986f63b6f137 readline/readline/mbutil.c +29f9c14ad5b29d95ee2ab26410f34a56 readline/readline/examples/rlcat.c +54cb67fc97e214be74d098d4d4770678 readline/readline/examples/rlevent.c 67b997d52b98f449099a8f941d056664 readline/readline/examples/rlkeymaps.c -f0432217a808166273a23596fe437323 readline/readline/examples/histexamp.c -d1d82ede8c5e85a0281af2d1c327fa1b readline/readline/examples/manexamp.c -ad94e3f122c53de7554f95f5c1d35b4a readline/readline/examples/autoconf/BASH_CHECK_LIB_TERMCAP +d5392892cb3fedafe54dc538d2488fbd readline/readline/examples/ChangeLog.gdb 263a18b532dba7624197e16c51cbf57e readline/readline/examples/autoconf/RL_LIB_READLINE_VERSION d8cd3622395e9ee7380a04feca3f27f7 readline/readline/examples/autoconf/wi_LIB_READLINE -924e48b05532848733508b21861ddfa0 readline/readline/examples/rlbasic.c +ad94e3f122c53de7554f95f5c1d35b4a readline/readline/examples/autoconf/BASH_CHECK_LIB_TERMCAP +8e8f6b7d96780b61ee38aa2307eca562 readline/readline/examples/hist_purgecmd.c +ea7fe1b44b4a1115732c66c65a73d16e readline/readline/examples/rl-fgets.c +15d2309b5328ca7bf53a0afe531e124b readline/readline/examples/rltest.c +0233379ede3d5cf94bdb860537a76bfe readline/readline/examples/rlversion.c 032c96681caa1f2c3aae6163b9dd89e8 readline/readline/examples/excallback.c -815b7d9952d8c80041115450f7270113 readline/readline/examples/rlfe/os.h +efe0c1e30d496d5ad7626365c2671b39 readline/readline/examples/rl-callbacktest.c +f3235e9449b83cf111d88c55da53a05c readline/readline/examples/rlfe/screen.h +0c164273ca7ac895ad0497aee5f86c5a readline/readline/examples/rlfe/extern.h 63732b13d0f1428e29598791dac9c0b4 readline/readline/examples/rlfe/configure.in 56206cc27202a34914d93b1eb6131d0c readline/readline/examples/rlfe/ChangeLog 52a51b3893dea3f78df1819a4b86d4c3 readline/readline/examples/rlfe/configure a292f6efbed681320b9e2f2abff2d546 readline/readline/examples/rlfe/ChangeLog.gdb -0c164273ca7ac895ad0497aee5f86c5a readline/readline/examples/rlfe/extern.h bb325dbcb1b282cffe14c613753859fc readline/readline/examples/rlfe/rlfe.c -3981e9f1510b5ba899f5bf79aa28b340 readline/readline/examples/rlfe/README -085805a0cbeadd484a889f808242c27a readline/readline/examples/rlfe/config.h.in -f3235e9449b83cf111d88c55da53a05c readline/readline/examples/rlfe/screen.h b3f2a672002c3c8da21d6e5a06c71d6d readline/readline/examples/rlfe/pty.c +815b7d9952d8c80041115450f7270113 readline/readline/examples/rlfe/os.h 89cb907a50ae4155c340e66b33d4e34d readline/readline/examples/rlfe/Makefile.in -05e58ca0def73f34efef5ff4cac6a939 readline/readline/examples/Inputrc -29f9c14ad5b29d95ee2ab26410f34a56 readline/readline/examples/rlcat.c +085805a0cbeadd484a889f808242c27a readline/readline/examples/rlfe/config.h.in +3981e9f1510b5ba899f5bf79aa28b340 readline/readline/examples/rlfe/README +0f4ba652797e7a338d57b3817c4a3aba readline/readline/examples/Makefile.in +d1d82ede8c5e85a0281af2d1c327fa1b readline/readline/examples/manexamp.c +228fdc869bfde1be5a26e6c274eaf5cc readline/readline/examples/fileman.c +924e48b05532848733508b21861ddfa0 readline/readline/examples/rlbasic.c +5b43fe2710d96cb383a4c9d8199ad2ca readline/readline/examples/rl.c 858cc534267df4b98578dce0269f40c2 readline/readline/examples/hist_erasedups.c -8e8f6b7d96780b61ee38aa2307eca562 readline/readline/examples/hist_purgecmd.c -54cb67fc97e214be74d098d4d4770678 readline/readline/examples/rlevent.c +05e58ca0def73f34efef5ff4cac6a939 readline/readline/examples/Inputrc +f6a575d672c878a5491d42efe870f6c4 readline/readline/examples/readlinebuf.h 4e7fff0a8edb1b8e6abe262aa11f971a readline/readline/examples/rlptytest.c -5b43fe2710d96cb383a4c9d8199ad2ca readline/readline/examples/rl.c -0f4ba652797e7a338d57b3817c4a3aba readline/readline/examples/Makefile.in +f0432217a808166273a23596fe437323 readline/readline/examples/histexamp.c d6bbfb3e33fbc3488a10452670d5755e readline/readline/rlconf.h -0cccba199cdfa11bea84fc569e5cee5a readline/readline/histsearch.c -01d8d2fe1f165f4e16e9b7306511aad1 readline/readline/history.c +92aa9452d48004f737356608d3ac9151 readline/readline/readline.pc.in +0975e9a02450c59ca63c885f53439ed7 readline/readline/keymaps.h +296880d57e345fc3e0761d47d3d92329 readline/readline/histfile.c +3c09a65ac02197e7bbb64a5f3c8ed954 readline/readline/shlib/Makefile.in +194239475ba2a9248f6387e5a35dde43 readline/readline/isearch.c 0b20f8e235adfd249d96c341db8b17f6 readline/readline/histexpand.c -039febb24d380307a9ed96d8e0767092 readline/readline/callback.c -ed0721db877dcb8c7b0230446a13680d readline/readline/CHANGELOG -4b810af2c83168d3cd86815a6bbeaaff readline/readline/tilde.h -298f7b579431967fd3d4ee940ca591db readline/readline/NEWS +9f398666c4d5c91d2c756c24a02cbfc4 readline/readline/nls.c +077a15ba01bd498f5b9f0f520e0bf8b3 readline/readline/posixjmp.h +809ad68d08ea4fd1457279388c04bb9a readline/readline/rlshell.h +a5f7a0953b3a2f3744fad2a83b0835c3 readline/readline/tilde.c +67e89d03a77d9ca8d18514a67f5fb360 readline/readline/configure.ac +c6e7e71d397a1b4575a7c52169bd78af readline/readline/xfree.c +6cac2a4379545cecf2ad18b3359b3e3f readline/readline/emacs_keymap.c +0cccba199cdfa11bea84fc569e5cee5a readline/readline/histsearch.c +5433ab5561fd4f71a33cd2de1791bdf4 readline/readline/text.c +d32239bcb673463ab874e80d47fae504 readline/readline/COPYING +795cf84b0a33051f4f92a249ae08c33d readline/readline/MANIFEST +b4e8888ab8ed3a4d84679fd74e1df092 readline/readline/xmalloc.h +ac922dcd0b2c91ee5b68125a7ec17d37 readline/readline/rldefs.h +43193f028a5cf0fab061b6d1135d41f1 readline/readline/shell.c +35aa356fff4f759751b0850c717d9d33 readline/readline/funmap.c +5c79feb71d62b12e3f0c17b9c010c57e readline/readline/terminal.c +e8cf9ce0ae23eb40b5e2b191515ce1e9 readline/readline/posixselect.h +3c9f0c2ffe2e840bcffda7dc99b17097 readline/readline/xmalloc.c +9dca22762c44f563e9f7e7ab4471151b readline/readline/search.c +b5fc756b0f152e134278645b689bd27a readline/readline/rlwinsize.h +d109ef94402e4db5b3ce76273f0f5136 readline/readline/parse-colors.h +7f357b70afac9ba87595c4db8e43126e readline/readline/Makefile.in +f4081c3556d3c577290e6fae30659557 readline/readline/signals.c +58b0af60b0366db7456eb15c96070d3c readline/readline/patchlevel +9fd0744d53760007e2a1eced8a2fe042 readline/readline/misc.c +d59acd0e273609905896546fad6890b4 readline/readline/doc/history.info +1f6cfa081d0d09b6f8f29b17c3c53531 readline/readline/doc/readline.3 +c983fcfd60938d8f7d055cb148e159fd readline/readline/doc/ChangeLog.gdb +8dc95bafc6eb5b4ec0bb0e1b7a7f5890 readline/readline/doc/rluserman.texi +dffba5c6716eca975a5f5aa4a8981934 readline/readline/doc/rluser.texi +78841a9616cd5acd3c009b285b0d7145 readline/readline/doc/hstech.texi +e117b570454dfc1ce5e6b4d6306eef12 readline/readline/doc/hsuser.texi +4e62e55398e7af4d4f8257ab56a72e3c readline/readline/doc/history.texi +bd544d98b50bcf914ab5ab8a02a68560 readline/readline/doc/rluserman.info +b35bf3782935e4487f8dcc9d1c0ff91e readline/readline/doc/rlman.texi +2021591f44bcef200cff969ec80fa845 readline/readline/doc/texi2dvi +c2e207604df8d9c03739a53c9c931624 readline/readline/doc/history.3 +072910d553f79906db69fa7c0e956bba readline/readline/doc/fdl.texi +5108a779f463207c166dca9d00b3df86 readline/readline/doc/rltech.texi +5893ee4316b9ab57bc9bbb1f71a3f368 readline/readline/doc/Makefile.in +f5c89e4fa898ab43617300aa0b0ac090 readline/readline/doc/version.texi +235521cea1651c79af182e25278fe0cf readline/readline/doc/readline.info +78cc21ea66df5c5578a77153ab191eb0 readline/readline/doc/texi2html +0746f269c36c8aa234ea74cc20fe56cf readline/readline/tcap.h bd8ee3335e7c5fa83bbc703152419a13 readline/readline/rlstdc.h -1f4c5f8ef40d5dca1f522e1825536034 readline/readline/rlprivate.h -21b92cf08fe01d11c649e48f867c6067 readline/readline/util.c +85bd734b2b01dd160ea4bcec0e1b5cc5 readline/readline/aclocal.m4 +f45865f0b716a5dcf04f6dbbe53f10e9 readline/readline/bind.c +02120f1e3b60238eff5541ba539dc8bc readline/readline/chardefs.h ca7d2af6879db1adcfec86fcc78b96da readline/readline/posixstat.h +8bc979fa21e71ac7064e34c5c3302d05 readline/readline/config.h.in +6c992351d092035804f89c04ad706bed readline/readline/rlmbutil.h +83c1a52f267a25a5433f38c876516090 readline/readline/macro.c +75ad677f6feb3097e69d1431dafd10e6 readline/readline/cross-build/cygwin.cache +c66c7ac238318948f0cfbd70013bcc20 readline/readline/vi_mode.c +fc7abc510c5fe4fab6b2986ea9ffa48d readline/readline/CHANGES 0dbdfff0400f923228b9faa31b09105d readline/readline/parens.c -e194e93b2d732981066cafa2f0a47b4f readline/readline/rltypedefs.h +2b122ab3c1511c7fae2dd186b3e4ce29 readline/readline/vi_keymap.c +fc09e12aebf25dcaa5d8bf91b5fac94d readline/readline/input.c +298f7b579431967fd3d4ee940ca591db readline/readline/NEWS +07a39485e7d7f3a69ac78cec30ebeff7 readline/readline/support/wcwidth.c +c8c2f1b3cd574b485a1af581d2d0777c readline/readline/support/config.sub +e9b837f9f5e88317b7d3e26659778df2 readline/readline/support/config.rpath +f01cade8404f87f796fee1a0a296092d readline/readline/support/install.sh +67cfa1ca2fed795999906659d8236140 readline/readline/support/config.guess +537c1dfc8ed232c07360d5e5ad8c3443 readline/readline/support/mkdirs +fa8365366c8c43e0a2014bfb37d0f0ed readline/readline/support/mkdist +caa1d2e25f6044427cb2f1e242f8f2b6 readline/readline/support/shlib-install +1d68db8aa18dc87c69e52a710da2cd7d readline/readline/support/shobj-conf +792922784eade1d03ecb1b33ba8bb7c3 readline/readline/support/mkinstalldirs +d8b53cdfd1b47f63cc02b3b1f04f4a29 readline/readline/readline.c +3625c171664b540b594b0a80ae9d44fe readline/readline/rltty.c +0bab71b938eb344efbe8916f3d57bc65 readline/readline/ansi_stdlib.h 0bb4ff5a1ee6f767d0d1b7ded925a8a3 readline/readline/USAGE -63ae5cffaddaa5263fbc9114080fc65e readline/readline/history.h -e8cf9ce0ae23eb40b5e2b191515ce1e9 readline/readline/posixselect.h -35aa356fff4f759751b0850c717d9d33 readline/readline/funmap.c -7f357b70afac9ba87595c4db8e43126e readline/readline/Makefile.in +5a71fb717996d2d8c0789217e7ea25c7 readline/readline/colors.c +f07ae0b355692aa5ec9594fae2e90cf8 readline/readline/histlib.h +74d4df5cd77c38604565f89c21fcacc0 readline/readline/rltty.h +5ede70a48f9148ac48441bd7a27d13ff readline/readline/colors.h +c33b871fc3378e35ac5d634decad03ee readline/readline/README +4c38bfdf42677c710c270c654d4081f6 readline/readline/parse-colors.c +4ad4f0207bcb95eecbfd045cc8abd189 readline/readline/complete.c +21b92cf08fe01d11c649e48f867c6067 readline/readline/util.c +4b810af2c83168d3cd86815a6bbeaaff readline/readline/tilde.h +cb9d167c3cbb645b1462b49d9f06ed49 readline/readline/kill.c +39b5c21aee3d08818acdb4e097717a47 readline/.gitignore 873604aab12a3d4b5434a847a519c15c readline/Makefile.am +f8e5702e65a537e2c230a55b3740c5aa readline/configure.ac e6ff2779c4a5372ae18a4d5a49c31c69 readline/Makefile.in +d5d99819ea5000e9ddbb2f0f3bff121b readline/aclocal.m4 +f4542240ec0f87932039340e21aca86b readline/README 07c33a285703b40cd6f93a478e97e03b README 2786c6bad129ff44b217c1fe6042176a README-maintainer-mode -481d31417ca663efc461356003587ae2 sim/aarch64/simulator.h -3859c31339ae94bcdff8de01d539b357 sim/aarch64/cpustate.h -e02eb45e5812cd47a8c935a12983f5a2 sim/aarch64/simulator.c -37142188e77416e103215989c54e33f5 sim/aarch64/ChangeLog -067d8aa888596a6ee06e0e79244f3331 sim/aarch64/configure -816827e67b8bd1fd1311fe56a349c1cd sim/aarch64/sim-main.h -94498794783414b6e22a6f911bb66e0a sim/aarch64/configure.ac -957f6087f1e53392f0d5012067d7abf1 sim/aarch64/cpustate.c -4ab55a35c7007d58ee370d38587e6907 sim/aarch64/aclocal.m4 -f5365539865031e233857a27ba9f4940 sim/aarch64/memory.c -e5cc3a67b58b52dcda1fb76dde7eb953 sim/aarch64/memory.h -a3781b047142af4fc92c1f665a25956f sim/aarch64/decode.h -79b3f19a4a961715ed1b3fc266e073d6 sim/aarch64/config.in -b589a0aca83a012e7511dc4ba5adcc3c sim/aarch64/interp.c -d8cd6d48ebc978e7460ee7aa913a6d29 sim/aarch64/Makefile.in -2100350d1f971139a81a57f925e70eec sim/m32r/m32rx.c -0d1d89a116cacc58f0e74de8d8cd960c sim/m32r/decode2.c -2b40ae2b97a48a97ef84375e6fce106d sim/m32r/ChangeLog -28ed60b04e3adf0b9e78d243f65d9898 sim/m32r/configure -ad9e2f75a0cdaf0450efc981db126c6e sim/m32r/mloop2.in -52bab6ed33162cda3ff7bfcb01cc4595 sim/m32r/dv-m32r_uart.c -ca4ff601aad0590e2774b723b5b47655 sim/m32r/cpux.h -dc9f5ce67836f277be6d8842dcbe85b7 sim/m32r/sim-main.h -6f246bb0e01ea94f417ce1da794d40c7 sim/m32r/dv-m32r_cache.h -9c86642b177eb1b7f30e2b20b7bdd767 sim/m32r/mloop.in -c5f5acc97a31beaa7d10506c8b45c546 sim/m32r/configure.ac -31dfec376b9311491c34cee080128df0 sim/m32r/dv-m32r_uart.h -103f3b07185750ed080ba3380b89388d sim/m32r/modelx.c -844c598d34af084d9633f61099b4cf05 sim/m32r/model.c -9563c42b3160ed9bdeecf27fbb0740b4 sim/m32r/decode.c -f73c3f77e171e5a74b859a9bfcac00a9 sim/m32r/cpux.c -a64c5ede555fdba9691ed3e6fd537056 sim/m32r/sem2-switch.c -9ea5634b8bfeab03ba5faf23cbfa7c5d sim/m32r/decodex.c -aee5a7c6aaff0857b25b3be354d3e5bb sim/m32r/decodex.h -228c10f2e0575a0c0bdc74cf134063d8 sim/m32r/cpuall.h -5f88070039c2eebf1eccae0f711bdc10 sim/m32r/arch.c -375734b3118da97b932e8218e80e6ed0 sim/m32r/sim-if.c -634c76103feaf16aa6d9fc0a34be3100 sim/m32r/decode2.h -4ab55a35c7007d58ee370d38587e6907 sim/m32r/aclocal.m4 -38eb0d88fe2a4c99752bc9b37b68b254 sim/m32r/model2.c -28ee3b8487cab5b7291cb51bc1c16a92 sim/m32r/traps-linux.c -904d197b0fb915aaba553a9af16d6581 sim/m32r/mloopx.in -8b4ecb2ab4f104ca50400def1f3ed2e5 sim/m32r/m32r.c -756bffb82a4d9cab0ae4dd0d06e3a206 sim/m32r/cpu2.h -696a9afd1eff18018fda88a18ae620e7 sim/m32r/decode.h -23b6e82d29f42c31a097d431b0f73004 sim/m32r/README -5612be8e02af3bf837bf725454d50414 sim/m32r/config.in -e8eac7a258742cf81f6af7ea6078e049 sim/m32r/semx-switch.c -a36eb687de4f9d84fb1d2415e1a00a9e sim/m32r/arch.h -8548fceec369c657ad7f2572f4e47df6 sim/m32r/m32r-sim.h -7cbcd99fd669ba6a6bb6805b15062a10 sim/m32r/traps.c -81aa6b6eb55474111611df28422f49f9 sim/m32r/dv-m32r_cache.c -e401ce81778d171f79151b58eeef8bb0 sim/m32r/syscall.h -505293b260e3457a53f461ec8102de85 sim/m32r/sem-switch.c -14a3536cabf6c50be145ff7a4d42db4f sim/m32r/cpu.h -5d7925f25bf1f0088d1be0433abf5683 sim/m32r/m32r2.c -da25d9ffb2bde1008c268928e451aa59 sim/m32r/cpu2.c -ca6428300a0da423ee20a7a8ba6c9dbe sim/m32r/sem.c -83aade4d2a673e245b7cd320a63c6f58 sim/m32r/cpu.c -625d6f845878b0cb230ea0179cc1a0dd sim/m32r/Makefile.in -a25d80616c54aac2f832b3dfc4b8a37f sim/msp430/ChangeLog +b6e69eedb6360fc61b5d5bb482d202f1 sim/README-HACKING +df830fe3c2195af11d2fc229a4116c92 sim/cr16/ChangeLog +57065c49bc83765d99249de5092446dd sim/cr16/configure +bb8d268126d82901c6e55c3187ce5715 sim/cr16/sim-main.h +79b3f19a4a961715ed1b3fc266e073d6 sim/cr16/config.in +7cee2dd55c998e1d27864c3d37731b30 sim/cr16/interp.c +31ae2cdbe540c8d521de2dd3efa07bfb sim/cr16/simops.c +4933c3663e9942edfa188a89d76955fa sim/cr16/configure.ac +12f68a4b22824dc25b1999a809642149 sim/cr16/gencode.c +647361f007738e248d7231721e88a8d7 sim/cr16/Makefile.in +4ab55a35c7007d58ee370d38587e6907 sim/cr16/aclocal.m4 +ec8ff4a4e79a756b55f6714b7748672e sim/cr16/cr16_sim.h +1d60c38d8ec704b930730f3938fc230f sim/configure.tgt +cd5f547e31253aae41c614a47ad0fa58 sim/ChangeLog +7a0e73387379ebdde16be6e9b67607fc sim/configure +0b93d82585c1ed282c214d03e3b78abe sim/microblaze/microblaze.h +99e92eed2bc88c43cf09ba8b32a53d06 sim/microblaze/ChangeLog +aa86cbc835a69895d241d450d689efbb sim/microblaze/configure +3a97596548a42b5d628febfba3af83f8 sim/microblaze/sim-main.h +79b3f19a4a961715ed1b3fc266e073d6 sim/microblaze/config.in +f55f5f6f922d5ec300823115cd8cdcee sim/microblaze/interp.c +e7dd365f1ca1a58020c813d6e9369075 sim/microblaze/configure.ac +6ed0d81189bc893d4a828c61f4f25e86 sim/microblaze/Makefile.in +4ab55a35c7007d58ee370d38587e6907 sim/microblaze/aclocal.m4 +6eba14d1d8055a78409fe6a95b11ccaf sim/microblaze/microblaze.isa +b55023f01a8f3b01485eddb1ddd1eb91 sim/msp430/ChangeLog 9c754fac265046e384661407eab3183e sim/msp430/configure -0315cea120c20133994a49bb9fd1c476 sim/msp430/sim-main.h -19fa5004fc74544e6e4a78e022d53d49 sim/msp430/configure.ac -08865088c724462d546991d2f59999d5 sim/msp430/msp430-sim.h -4ab55a35c7007d58ee370d38587e6907 sim/msp430/aclocal.m4 +000733157e4be6c73aee560e7b3b10f8 sim/msp430/sim-main.h 09d6a57f399102d2cbc1562433d12aac sim/msp430/config.in -e2434662b75d0e4ea22092339b146dc8 sim/msp430/msp430-sim.c -6219dc3a402f4931c0776ce182802b61 sim/msp430/Makefile.in -260b8586b3154a4f98851342a825f4af sim/ChangeLog -d975f30e912fb10330910163755fe02c sim/configure -68468963c3ef325838864f7216f70da9 sim/arm/armvirt.c -e02360fa81250cf9999bfd87ed24ad9f sim/arm/ChangeLog +abe80d5810d91a741c3f64cf5fc10ad2 sim/msp430/configure.ac +272e416559ed541d0ba2e5f57af30111 sim/msp430/Makefile.in +4ab55a35c7007d58ee370d38587e6907 sim/msp430/aclocal.m4 +f87f7f756eb31d91d5ffca59256a27a5 sim/msp430/msp430-sim.c +acdff0934ab10faaf4d24996da687bc6 sim/msp430/msp430-sim.h +99d3a31d5722462f4c48850882e32d95 sim/bpf/bpf-helpers.h +8605d45ff8efc3ebc8463617170ca635 sim/bpf/cpu.c +b0fa8626bec7c5ed679444de2ec221f2 sim/bpf/configure +8ee1aa5642d933f1dc7ca0ccb1336981 sim/bpf/sim-main.h +79b3f19a4a961715ed1b3fc266e073d6 sim/bpf/config.in +dacdf1f40587e7708ca10c24bc8ba0ea sim/bpf/mloop.in +4994f3d40efa6df00eb3c8cf3e30d9e6 sim/bpf/decode-le.h +15a27942970c310d8ffa002301f044f4 sim/bpf/arch.h +bf6c8fd355d1aff9b290ed95ba864f63 sim/bpf/bpf-helpers.c +022dc6ef1dec9b20fa0f256ffac1f998 sim/bpf/configure.ac +f712c968f054224c486812f8d355b6ab sim/bpf/sim-if.c +84801ee02f47b815e637cbf5f46a53ee sim/bpf/traps.c +5e0d6ef17bad9b5cf1be9f7c4ef96d35 sim/bpf/decode.h +69a2f8d6620380a1096cf54d20fef995 sim/bpf/sem-le.c +8869802170f67303050cf80f1246fc28 sim/bpf/decode-be.c +f2fb81d3379fe252c257d1de16ba82da sim/bpf/Makefile.in +a5366e11e8a1aa47412886409e31abfd sim/bpf/decode-le.c +0b2c2e45d732b897b0029fc010e6249d sim/bpf/bpf-sim.h +ad3233aab3a94488f3c2eac97ccebadd sim/bpf/defs-be.h +4ab55a35c7007d58ee370d38587e6907 sim/bpf/aclocal.m4 +0e322c61f09e402d940b1a1d4ed83f02 sim/bpf/cpu.h +a359696323698299819f4d20385ecb30 sim/bpf/eng.h +0db4f021eed14aa9618e121abd61a33d sim/bpf/bpf.c +621ce6ef43094841c878aea968557065 sim/bpf/sem-be.c +77df99e222e9ec793ae421039800bf53 sim/bpf/arch.c +03a1a96d99aca6a72f608a402292a8ac sim/bpf/defs-le.h +d73972454a747791d6c83b9744949197 sim/bpf/cpuall.h +7c85ef16551f8d536aa034d45cd238a0 sim/bpf/decode-be.h +f2ec3eb90e2fa7df4f576f00179d9ee0 sim/bpf/bpf-helpers.def +e2b1c770fb0b1bd499fe5e728c279b76 sim/.gitignore +29d1ef05d0fd52303b8c689c50bbd006 sim/MAINTAINERS +2eb9b92aaabdb8b2f146718877769042 sim/iq2000/cpu.c +4dd935840fe213f3a981b03036c1b94f sim/iq2000/ChangeLog +aa1b666d2125fbcbe7e66be7669acd6f sim/iq2000/configure +3d783daedf05371ef79982c3944e2d5b sim/iq2000/sim-main.h +f39d2c8d1994ddb57c26cf728e63b52f sim/iq2000/model.c +5612be8e02af3bf837bf725454d50414 sim/iq2000/config.in +90cee7a7914576ac4b943e744d9b8016 sim/iq2000/mloop.in +24ae407a4e4697db776244a838cd18fa sim/iq2000/arch.h +a710e05535a1f9aa7b10046539932424 sim/iq2000/configure.ac +3285e6903871a5e84297890a84f89079 sim/iq2000/iq2000.c +4cc1abbdb20bde7bac6ab00cad452da3 sim/iq2000/sim-if.c +e26c7fd88e7d3474e0c8f70c0ddc4928 sim/iq2000/decode.h +079fe39d154c20d40b7bd061dc50e6de sim/iq2000/decode.c +35069adcbff9f53d42c9f56daf9db5f1 sim/iq2000/Makefile.in +86f27c6fa9fdcea327c0ab21913eca1b sim/iq2000/sem.c +4ab55a35c7007d58ee370d38587e6907 sim/iq2000/aclocal.m4 +0c96f00904d3fbdd4f5f5dfe6a99a654 sim/iq2000/cpu.h +f1136557cc5684d26f8b0893500ae622 sim/iq2000/arch.c +e32b45811a94915e2cab73290b654d75 sim/iq2000/cpuall.h +557dfce206a61950b9eb1c48e5b7669e sim/iq2000/sem-switch.c +45f7109e49ca9fbc7ba02c7380552958 sim/arm/armsupp.c +094764c9d200b64d8715f1d3da494b3f sim/arm/dbg_rdi.h +05c62f0fbc4d5d472de01f50fec5a3a6 sim/arm/ChangeLog aa86cbc835a69895d241d450d689efbb sim/arm/configure -d32239bcb673463ab874e80d47fae504 sim/arm/COPYING -cbd94d3518b173a063cf3489eaf61286 sim/arm/sim-main.h -c4ed795d8dc06d6f8eade00f7540db80 sim/arm/armfpe.h -e8637314048978f70eef7ac7b31aeeca sim/arm/iwmmxt.c -e7dd365f1ca1a58020c813d6e9369075 sim/arm/configure.ac -46cac1156b87b55c6ac594921dba9f82 sim/arm/armos.h -baea1fbca873f544abe03808cf41ebdf sim/arm/armemu.h -142af0162b160c30ebc3c507f93d865b sim/arm/maverick.h -094764c9d200b64d8715f1d3da494b3f sim/arm/dbg_rdi.h -843495b2b85c8316a43a2efeeaa3fb29 sim/arm/armos.c -413128b9e2d0e352cd5fd5d2b01dda89 sim/arm/armcopro.c -4ab55a35c7007d58ee370d38587e6907 sim/arm/aclocal.m4 -a62a77605003de7a8ba75d8247fd77b7 sim/arm/README 11df2e587b349a09a16286de5bbe3c56 sim/arm/thumbemu.c +843495b2b85c8316a43a2efeeaa3fb29 sim/arm/armos.c +30cae1644f49d9f2d76844c6febd684e sim/arm/sim-main.h 79b3f19a4a961715ed1b3fc266e073d6 sim/arm/config.in -2c797d4b3113d20e389d5701dc2621e1 sim/arm/iwmmxt.h -b1239981f20ee64479d05100f1027230 sim/arm/maverick.c abc067aa665bd2d6fce1e375cbdbfeff sim/arm/arminit.c +baea1fbca873f544abe03808cf41ebdf sim/arm/armemu.h +4ebd652ec74d116f37b48c6fe1d8efbb sim/arm/iwmmxt.c +e7dd365f1ca1a58020c813d6e9369075 sim/arm/configure.ac +46cac1156b87b55c6ac594921dba9f82 sim/arm/armos.h 1962b9f2ca398038033e6e62d5fa0905 sim/arm/armdefs.h -f45d91a738fd0ed421827350483a542a sim/arm/wrapper.c -45f7109e49ca9fbc7ba02c7380552958 sim/arm/armsupp.c +68468963c3ef325838864f7216f70da9 sim/arm/armvirt.c +d32239bcb673463ab874e80d47fae504 sim/arm/COPYING +aa9241ffac0c0693aafa939cf0a736c6 sim/arm/wrapper.c +7efe1d9788969f4cb0aa9fde3e9931d3 sim/arm/Makefile.in +4ab55a35c7007d58ee370d38587e6907 sim/arm/aclocal.m4 ec3d54ff8f131a8e1253fbc53b029782 sim/arm/armemu.c -85d09b4fc864814cea52edae2c0f86a9 sim/arm/Makefile.in -18700e132dcb3783878697607d53c05a sim/rx/ChangeLog -1d0ae72f0dbc5477def23f0750cdf686 sim/rx/configure -5d0a80f962ba03d92766b1b21fe74e52 sim/rx/gdb-if.c -729a3f70c4cc6046999b52643358478a sim/rx/mem.c -f670744ba44ffe52c2ba6b3c57930e8a sim/rx/main.c -9729c8d2a3e45bda3f43d44b356ec47c sim/rx/syscalls.c -5ffd0971b8b1ff2df9902de72d9714e0 sim/rx/configure.ac -7232035835259de42fbe8adecbf17397 sim/rx/syscalls.h -f936543043cdee15bfff70aa80ea604f sim/rx/mem.h -e83d675a403a72b959acab3ea15ade0e sim/rx/load.c -ec8abff742dc0b612160f70ad0d0fd8d sim/rx/fpu.c -f68deeb0f0d16728494246f7200e5507 sim/rx/fpu.h -c2337d76b4fd324d2e5fb60f0db7c82f sim/rx/trace.h -d215585559aaf0b373878e451e983d93 sim/rx/misc.c -46b03194c30fd15b16e818e26ecf989d sim/rx/misc.h -4ab55a35c7007d58ee370d38587e6907 sim/rx/aclocal.m4 -58f7a098e08b9ec7d5c1a5a05442f9e0 sim/rx/rx.c -81fd14478e292a9a019b59ceba4bce45 sim/rx/trace.c -e578cd645e2feba9820aad48ab71267d sim/rx/config.in -62af0a9be366e95783f8ae4726bd1d85 sim/rx/err.c -46c8166955984d592a6ca920a90be25e sim/rx/err.h -c1b2c0b2ffef1ba72a8a6e24677c8653 sim/rx/README.txt -70fb6fb21883775af0c13df2005375be sim/rx/load.h -24e2f861da06951620983b5a9ca6efe2 sim/rx/syscall.h -20cee6f779b7d906ad3e6089fbb0ac77 sim/rx/reg.c -0a5c7ade1a254efda1ed2d2dbab89f31 sim/rx/cpu.h -d684e16e537458d87510ee57e78a4a27 sim/rx/Makefile.in -629e128406ad2397987d1481cf36aacb sim/mn10300/op_utils.c -4e06f442e7ebb9bdfacba51dd57bebfb sim/mn10300/ChangeLog -ac0d5957f102d1b56b2cb8f77ae1a8f0 sim/mn10300/configure -ca37d532ba114a9504ebc9f569417a2b sim/mn10300/am33.igen -491e3f99cee96199e62afbee3d77abc4 sim/mn10300/dv-mn103tim.c -0f8560bb0c696f08ea29c3e8fa1033c3 sim/mn10300/sim-main.h -41740729bb4483f1051312c758c83843 sim/mn10300/dv-mn103iop.c -b0b3eee5cbaa12e1a4f4570488449b6a sim/mn10300/configure.ac -a7335227cef936abda2f0c8402e79570 sim/mn10300/mn10300.igen -9560a29b6c94d4955a447290ab5d050a sim/mn10300/sim-main.c -e06d3d5148b90d05798fdeb1671f9b2c sim/mn10300/mn10300_sim.h -c37a8063b25bb881b34e79630d4988b3 sim/mn10300/am33-2.igen -4ab55a35c7007d58ee370d38587e6907 sim/mn10300/aclocal.m4 -f2737183451da654342429dce9b18f20 sim/mn10300/config.in -a02c306411614c8de463bf278aac5d2e sim/mn10300/mn10300.dc -bd023d9fab8152922898fdfd7c983e3b sim/mn10300/interp.c -0cd227ddb2e63f96fb0e7daae933107e sim/mn10300/dv-mn103cpu.c -1c167cd2fb8021b91e030c4935ebece1 sim/mn10300/dv-mn103ser.c -35003931e3be5f8077bdc1bd0c7c2e50 sim/mn10300/dv-mn103int.c -d030b0402fab0f65b1a612574c72850d sim/mn10300/Makefile.in -0465ce5365b6a1ff3b5f5b3e49074496 sim/pru/ChangeLog -6ef545eaa66a20600537024b6bcc93cb sim/pru/configure -ae3038739d881a8e3f4d5fa012b5b4f5 sim/pru/sim-main.h -6a7d7784e9cd6628868f0a84c9474448 sim/pru/configure.ac -b545c78125f840ca18932d4993284f94 sim/pru/pru.isa -e65ce4b2f13bc3bc57b201c9adca67d1 sim/pru/pru.h -4ab55a35c7007d58ee370d38587e6907 sim/pru/aclocal.m4 -79b3f19a4a961715ed1b3fc266e073d6 sim/pru/config.in -c32e87b8868724d1a0d1dfae17103823 sim/pru/interp.c -bc52bfa343d842f1992bed1c66b2e409 sim/pru/Makefile.in -3e8a863fd6280046b96efee9e2b2db10 sim/MAINTAINERS -78a8b3da6c7d67225c37947267c80aa3 sim/configure.ac -617139418aa196e07773acacf9588322 sim/sh64/defs-compact.h +b023d1ee69411ffabd53fc3304143426 sim/arm/iwmmxt.h +cac6a29a4c84fad69e9cc3ad7100d1bb sim/arm/maverick.h +5d6ed72da674dac3dea9b61884c31407 sim/arm/maverick.c +413128b9e2d0e352cd5fd5d2b01dda89 sim/arm/armcopro.c +c4ed795d8dc06d6f8eade00f7540db80 sim/arm/armfpe.h +a62a77605003de7a8ba75d8247fd77b7 sim/arm/README +c0aedb3c47785dab72371bca2953932b sim/sh64/sem-compact-switch.c +f241b7e0f11b279f9304d3cb1ee01102 sim/sh64/cpu.c +c65bdf8ba9333067b3908bb34105f4cc sim/sh64/sh64.c cd7e4b244cccb18e2f1c7a44def64a2a sim/sh64/ChangeLog c3e8fe548196cfbe05268d27c44e726d sim/sh64/configure -6ea7c6883faa874a7ec52af5c5dda6e4 sim/sh64/decode-compact.h 6f0d1da9665b40b4e6e19814d8d2d5fd sim/sh64/sim-main.h +5612be8e02af3bf837bf725454d50414 sim/sh64/config.in +1303c5166661159b200b5657564ca4e5 sim/sh64/sh-opc.h +c38d1bf3de27dac34c98eb5536997191 sim/sh64/arch.h af16208b9fb6b743d32e48a96d6516c9 sim/sh64/configure.ac -14542ca8c0c0e611a3e6fa783929282c sim/sh64/sem-compact-switch.c +289a3f330e940a722855287e53546b06 sim/sh64/sim-if.c +5d324bee9f66166b122b0864f3a90ff7 sim/sh64/decode.h +850fc97d540ab41fc6ecb4ce8d4ce8c4 sim/sh64/sh64-sim.h +2adb6220c0bbc340ae3e4ad2398bdcb6 sim/sh64/decode-compact.c ac213d1c73055fd163b9db0c56963dfd sim/sh64/eng-compact.h -60e1da4ca730ef940a8afa039cd1aa98 sim/sh64/decode-compact.c -adbaac5162470002b83025ae45e56bd2 sim/sh64/mloop-media.c -8fce2cf3613cc9b2f870912bfc11df89 sim/sh64/sh-desc.c -c40b42ddfb8995b24d1a0e5624937ba4 sim/sh64/cpuall.h -4ce835accdd9d19986601394392ceda6 sim/sh64/arch.c -155ed854f591e959308ac917a3a1b3e6 sim/sh64/sem-compact.c -258d528d0a069b8f199c3398a2be0d7b sim/sh64/sim-if.c +f4e77eb531d34de3612443a9741892d4 sim/sh64/sem-media.c +afd9cbd34a7ea99ba02812493e0d6712 sim/sh64/eng-media.h +e6a8b325ff6e479dd3e7a2168ac72b00 sim/sh64/sem-media-switch.c +4143eb5c718b9ca8f25b5d42126f8cde sim/sh64/defs-media.h +146fe17d42169fc9905a9285d3091095 sim/sh64/decode-media.c 71fb49f1b9785b3ace5be10f4aa1e92f sim/sh64/mloop-compact.c +cdffba6c0f95f11e2f27d50db64ac555 sim/sh64/Makefile.in 4ab55a35c7007d58ee370d38587e6907 sim/sh64/aclocal.m4 -8e69367ded75847ea0dfde7ea8320041 sim/sh64/sh-desc.h -5d324bee9f66166b122b0864f3a90ff7 sim/sh64/decode.h -5612be8e02af3bf837bf725454d50414 sim/sh64/config.in -afd9cbd34a7ea99ba02812493e0d6712 sim/sh64/eng-media.h -78dffcff36b83587c5c369ef38b9e6c9 sim/sh64/sh-opc.h -6ca5dbdc399633d82ba877ca36e51ac7 sim/sh64/sem-media.c -abcb64426a0787b18654c8489be54976 sim/sh64/decode-media.h -1e3e0be4fa04f4665bf65141327b1d7e sim/sh64/sh64.c -bf3d2ba9261759481be7f323bc9a1402 sim/sh64/sem-media-switch.c -e2a89e7e218522aa6240a7d7b50eadce sim/sh64/arch.h -33083f9feee714f381beef57b59ef1e2 sim/sh64/defs-media.h -3fd90e1bf36ca60f68d8cc5466d8f0d3 sim/sh64/sh64-sim.h -654bc588e7b980943f1eff7904ab649d sim/sh64/cpu.h -e51fa01c04ce6667a1c80f39fee6415d sim/sh64/decode-media.c -1466387e0c15c2f4ace5ba73acfda68e sim/sh64/eng.h -333a4d326aea4abaeab2a52ea621fcf5 sim/sh64/cpu.c -3ba53bba932298ecc16cac4decfc1edc sim/sh64/Makefile.in -e9c6c6b57764d71012fbe0e3d1754589 sim/h8300/ChangeLog -d41659ad79983b66251513d35a3fe46e sim/h8300/configure -a3aaffcc56fa65b1fa1c3ff4e63eaa6a sim/h8300/compile.c -cfb96073c298b3ef87108655329547d2 sim/h8300/sim-main.h -86e2cd68f928c5e9c9d886955aee7690 sim/h8300/configure.ac -4ab55a35c7007d58ee370d38587e6907 sim/h8300/aclocal.m4 -5a198f6b19aed858570b289330bf44f2 sim/h8300/writecode.c -1acf178f54b723a97a64a19cd969aee0 sim/h8300/config.in -a245ec376bfb0576cc47bfcd6336be7f sim/h8300/Makefile.in -12aa14bdbd4a70e93577fad3b9f30f31 sim/m68hc11/ChangeLog -ffb0ad065e0dd9b8f5cc698ac2f98b90 sim/m68hc11/configure -78becfc7c7972a0ad33fc0856f17d2b5 sim/m68hc11/sim-main.h -182449eddd72b86c80f429bcfa6dcbc1 sim/m68hc11/m68hc11_sim.c -25db879fe7da456e6a213895ebcc1017 sim/m68hc11/configure.ac -8a7a33fb44ef1233e5cecd6e0601f748 sim/m68hc11/dv-m68hc11eepr.c -5f2981589dcec52be1f32e9fdc026dd0 sim/m68hc11/dv-nvram.c -9d5b92464e8295889a00ba9ae6559a7e sim/m68hc11/interrupts.h -b233de8424fe514947c443d6b7819177 sim/m68hc11/dv-m68hc11.c -fa93de4e9a79435b5f779a3e0c5d7744 sim/m68hc11/dv-m68hc11spi.c -95aeaedd6fa3da662888de598ef832f0 sim/m68hc11/dv-m68hc11tim.c -4ab55a35c7007d58ee370d38587e6907 sim/m68hc11/aclocal.m4 -0be67f6931da8910775a751c3e33d231 sim/m68hc11/emulos.c -5612be8e02af3bf837bf725454d50414 sim/m68hc11/config.in -1e6a125f834aa10850711502104802c2 sim/m68hc11/gencode.c -3b36e47996a4d64a031b618046848ccf sim/m68hc11/interrupts.c -5a1a0759f7d03f95a1d27a1128fdaffb sim/m68hc11/dv-m68hc11sio.c -adb657ceb24ffdf01b0f9fe9154196ac sim/m68hc11/interp.c -610d6ee112fc919a50350caf75e78f88 sim/m68hc11/Makefile.in -99e92eed2bc88c43cf09ba8b32a53d06 sim/microblaze/ChangeLog -aa86cbc835a69895d241d450d689efbb sim/microblaze/configure -e0d3cf9ba5dcbe5a4efd49d6164bd6c7 sim/microblaze/sim-main.h -e7dd365f1ca1a58020c813d6e9369075 sim/microblaze/configure.ac -a5500b712eb736119facbf15592007ad sim/microblaze/microblaze.isa -4ab55a35c7007d58ee370d38587e6907 sim/microblaze/aclocal.m4 -79b3f19a4a961715ed1b3fc266e073d6 sim/microblaze/config.in -dac0e51f8e77266ab08e54b309a42dd6 sim/microblaze/interp.c -d51340a1e78d14059ea4b2e6226c3b69 sim/microblaze/microblaze.h -1cdd4938860ac46119dec2dfa92c8016 sim/microblaze/Makefile.in -2115ad47322b3fbe2dd2060da42f8cda sim/erc32/ChangeLog -72d19e020b19d8a492d274bff837b395 sim/erc32/configure -5a359f1f292f0c76ec48fc6f9a2c4de8 sim/erc32/erc32.c -70309754c1ca59ed3395c394d9d8b025 sim/erc32/configure.ac -e5b5aed547b7096e0f6a000be285e536 sim/erc32/interf.c -8d0b5212c0ce4ec7e01d67b407af3ba8 sim/erc32/README.sis -18a67a713edc022fff36d35509f3d555 sim/erc32/func.c -ce58de7fe1b8736ff94d663cb47bcf4a sim/erc32/README.gdb -511fe61900db9aa625acbda0f3fdc44c sim/erc32/help.c -baa7577ac8d0ff5fea87feccf57bf4d8 sim/erc32/startsim -4ab55a35c7007d58ee370d38587e6907 sim/erc32/aclocal.m4 -b3dc1d2052c18445b34aa9bc25592f8f sim/erc32/exec.c -79b3f19a4a961715ed1b3fc266e073d6 sim/erc32/config.in -f8a9a7ef60c2e10231b45dce24faf235 sim/erc32/sis.h -a2fac6c0e9445f95cc2e31115fad0cbc sim/erc32/sis.c -72fececbe452af10d0adb31b037040dc sim/erc32/README.erc32 -9f2cbd625dfef51b3d1162ba9dbb8a4f sim/erc32/NEWS -4d151d33a21838181e509fac60f769c6 sim/erc32/float.c -d3d846c9f5b44c6697fa30a76dc281a3 sim/erc32/Makefile.in +adbaac5162470002b83025ae45e56bd2 sim/sh64/mloop-media.c +d0ae0575aca8b5edf9bd82297f4fe0ac sim/sh64/cpu.h +89e3db05dfac9c3df71418e3dcb3aa17 sim/sh64/eng.h +9816c13c7b440e8b0f5394f7f5a00eb6 sim/sh64/sh-desc.c +7e9d9539ceb0bf2bb9af041a6438d84d sim/sh64/sem-compact.c +822f592a2f16cdaf9b2b74f2cbc41c1c sim/sh64/decode-compact.h +0387166138c14dc48f6f324c7331eadf sim/sh64/arch.c +ef6c76429d5501f1fd42963c7372bf19 sim/sh64/decode-media.h +e913124c5ac1defeb8502b8b891e5578 sim/sh64/cpuall.h +0555c9e101f8ac7a204375720d43d3d4 sim/sh64/defs-compact.h +9d40a2a997e1f38cab5605c4ff69f9dd sim/sh64/sh-desc.h +5d4fe76b00ac39ec837f7a47f0ebd139 sim/common/sim-endian.h +6d95b5ea43a98a8469579b19a1d9df86 sim/common/sim-watch.c +f1f4b7d5e139d33df3e17206edc87fa4 sim/common/sim-io.h +6acb123781842c947e1002b0945d9ecb sim/common/sim-profile.h +4c347e88a4accf0a6dec73d58720d9bc sim/common/sim-fpu.h +a0412417160afeb7b3d61c78f63deab9 sim/common/sim-engine.h +e0f26614c19339ab8001d459243a5a9c sim/common/hw-main.h +669a5eff1db586c0ca3ffbc0e794c71e sim/common/ChangeLog +b072fd649723cd95f44dd9c6c5357d85 sim/common/configure +5ea9ffe28a409457a4d22c893181add2 sim/common/cgen-sim.h +c0d9586f9931e0c77ef9ae72271061c5 sim/common/sim-arange.h +2f899708c815c055e7a064798cda77fd sim/common/dv-pal.c +6ed0c028606a46df030e312bc9a83a8b sim/common/callback.c +10250802e3ea03e5a0049f8fae69b6d8 sim/common/cgen-accfp.c +3282f21bb4b9c202f793c3bee67e4190 sim/common/hw-events.h +ef8746a93ff9753f871d374b96615f11 sim/common/sim-base.h +0e17bd667a89d73ecb2840315b68bcf6 sim/common/cgen-mem.h +60cdec181e481f70ff06c07688b82f53 sim/common/gentmap.c +1b5a06dccb37daac370def6145d9326c sim/common/hw-ports.h +1a900a2e77d448cb3975b364db79d607 sim/common/cgen-par.c +85005efa163c6fc0ad1b0d3a3689b539 sim/common/sim-assert.h +e03e114c7140b5e5d98fc0c2122f961e sim/common/sim-inline.c +3368f1df38a2ca4a85e84bf9c5abdedd sim/common/cgen-trace.h +8931aa1e45f2532aa9c1c8b55568a1ec sim/common/sim-memopt.h +6a333f43d055cc33436048c85e898f64 sim/common/sim-bits.c +3d1865d1db531949b88d48e26e8b7eae sim/common/run.1 +33593d57df882e43282fe791554c4114 sim/common/hw-properties.c +9a7639059cecde2b3b21306e06cd2b73 sim/common/sim-signal.h +ed8b05c07d34977e0e69ce33032d809f sim/common/cgen-fpu.c +5e5d43d6d166032685a74df1ea2544f8 sim/common/sim-reg.c +6d03ba0bed16397f08a129d322113534 sim/common/sim-reason.c +2c0f257990fec9827e60d8457cda33ef sim/common/sim-model.c +8eb561f3ba1a7cba26f2db38c8a119c0 sim/common/sim-trace.c +b13f0f60ed471db8410e4a195968b21c sim/common/hw-tree.c +b127f0413d4da711c10f671fcdd69a9c sim/common/sim-module.h +b7ef8baf05b45d1136c1c5aa8cf57b3b sim/common/hw-device.h +539fe194c7ee5784ba6610f51edec6f1 sim/common/cgen-defs.h +1a8a04791b99f23b4e6f836ab303db12 sim/common/hw-tree.h +b99f5de26be41cbedcf8b3823225a1f8 sim/common/sim-io.c +e47db00df27031aaaa425e472ab5e136 sim/common/sim-memopt.c +fa132ce436ba593279b1eb9d89590862 sim/common/gennltvals.sh +41819d8d7c7bfa3f6b4c86238d691383 sim/common/sim-basics.h +91da0b5776be30169c5d42443a4af0e9 sim/common/configure.ac +882080485ab53deb51a45e875d611110 sim/common/hw-ports.c +b1ad87c4926cbcc8ea2997924a5af57b sim/common/hw-handles.h +fe66bba5fef160be22a213576b92c825 sim/common/hw-alloc.h +997a6b716f8dc83b3e2b8fe60b8dc99d sim/common/sim-signal.c +4ac5f0c84169401962e7498b8e6a3ea1 sim/common/hw-instances.c +38d863b456f943d4155131734da71974 sim/common/syscall.c +472a16f98c1de22f77b933fec92b9dde sim/common/sim-bits.h +71ec2ed21da51c707511fc8d5eae287d sim/common/dv-glue.c +be462de2a884a2436ec6f4870fc2ade9 sim/common/sim-trace.h +e54dba0f60abb42b320cc7f7e7ee6b89 sim/common/sim-events.c +46659df1aa371f503682f49129d076db sim/common/sim-options.h +2cc30bdde755677ce1f4efa1663575eb sim/common/dv-cfi.c +0cd5aec0350eb378abd59b9e9c5050e3 sim/common/gentvals.sh +a792f9d1a7d3a434d6c2edf914ac9039 sim/common/sim-syscall.h +8b876be34128cb7e3e3d2162f350a8a7 sim/common/sim-resume.c +025dcdf5925933a2d0a1b4e1e1c00ce0 sim/common/cgen.sh +ecb36aaaefb3de209eace2b772f3c93d sim/common/cgen-scache.h +262e992d61fe1417eb6edf5aa1604808 sim/common/sim-run.c +1897bbd74a9d932c6f1242e3a0aa3851 sim/common/sim-endian.c +3870fcd7c0d914598ff8ae1d54388c5c sim/common/sim-config.h +4cb0cc4f621db0dc893cee2daeeaab6a sim/common/genmloop.sh +e3cf3e4875a3ae25ffe66e19df6672f1 sim/common/sim-cpu.h +9c6c8a3a2ea07baf80e6465b7c734b44 sim/common/version.h +b49e00f8b610cc279e077a60454a9dbe sim/common/dv-sockser.h +e946b6baac61f34b83cfaad38b181e73 sim/common/sim-syscall.c +159eac530e1ad2acb3806909e3d2acb6 sim/common/dv-sockser.c +79ac6ed6292d293388b38e4d8dfc4efb sim/common/sim-n-endian.h +4ac4de2f5cbaa78e805d696918722ad1 sim/common/gdbinit.in +71a31483a519b47018a2c0ef5beafc0b sim/common/sim-events.h +edb426565da46bfca1415f27a0906062 sim/common/cgen-run.c +f71d06afbdc95b2548338c80b5feb94a sim/common/cgen-trace.c +a240001168b2fa9d132b56f7f0d16728 sim/common/sim-abort.c +b117c4f4c13de9ff256f00640d744531 sim/common/cgen-fpu.h +2378377fce521ea18b75f7be01a925bd sim/common/sim-n-bits.h +9acd2077291465c8999cdc8cf2169397 sim/common/Makefile.in +c25dc798c4443d035cac1a5c5099a713 sim/common/sim-inline.h +4abedfd742b43ce5fcdb106cc67d98bc sim/common/sim-watch.h +6b55bc389dd28f7b6a60b143fdaa5ce0 sim/common/dv-core.c +896f9e3a48c37a721e7dc611cb63b09d sim/common/sim-hload.c +9eeb5de268c71736394be197e1f91271 sim/common/cgen-types.h +f7b12e2a6caa8b656f36313c83c13097 sim/common/aclocal.m4 +6334182fd5fea63a1d66f1fa0156c61c sim/common/sim-model.h +faf1c6e957568d67729d2b5c248de264 sim/common/sim-arange.c +8f1f5573afc30fd1aec3b6a8bfdef90b sim/common/dv-cfi.h +9cb6b48634dbbadcc991da37ed94c298 sim/common/sim-fpu.c +6a3876420db4bea7e757b7c4cac4abd4 sim/common/acinclude.m4 +3e30818e12edf2f0f6aa64fd7d258c5f sim/common/sim-hrw.c +4b758871f612a22ac2654f7964f072b8 sim/common/hw-device.c +0e917359b38cca6df687b82a249ecd02 sim/common/cgen-utils.c +b91ab8f3f08c35620ca07b4c7278753a sim/common/sim-command.c +912b6c4bc53da4a592767e9fa62d3d6e sim/common/sim-load.c +128b95561edd666fdd54d42b205b109c sim/common/sim-profile.c +a2ba21784db65009507da4ef68dd5e22 sim/common/hw-base.c +c9249f8c0f840658ef8b1ab87fd824bb sim/common/sim-close.c +709e08f2831ec3a39e4f6fa69360b9c3 sim/common/sim-n-core.h +12fd201e4f2798ee8542e2a69f4b40d8 sim/common/hw-events.c +d46238c6faca667c26924b4cd36e2d19 sim/common/sim-utils.h +4b5cdcb42fedf5641d5e5b8b47ffe6da sim/common/hw-base.h +727cb8139cf7a7634d8d16bed6e6666b sim/common/sim-utils.c +803067c2cedda90ac759c25a5918e624 sim/common/sim-hw.h +6abf2a7e607f4ead3918cabce2e566f1 sim/common/hw-instances.h +e4f44b9aaa763add0a555421506c2340 sim/common/Make-common.in +04dfcc47faf29be7f849846dca1e99b0 sim/common/cgen-engine.h +1ca73db2e7bb47a58f19c9f169329969 sim/common/sim-alu.h +76cad9ee10fac5ef9c1dd63324f1244e sim/common/sim-core.c +96ca50def6df3c1760cb1462b9175fea sim/common/sim-core.h +2d0d23408bda2da6bbaaa906edaed1d3 sim/common/sim-cpu.c +a97ae88267992580a0ae490e041f9582 sim/common/nltvals.def +9fc66df313c9d1fcb0092fbc2a8d828e sim/common/sim-stop.c +56d11d89148751f68e93a281d643460a sim/common/hw-handles.c +8c01a8ee9d5e0b0c12508a82068ef730 sim/common/sim-types.h +599be4dc5f429de18e2c1b0027ee054e sim/common/nrun.c +4b3457fb963600da2a5c055f68d3bb47 sim/common/create-version.sh +a4aded818978842ece1b932a531e72f6 sim/common/hw-alloc.c +94e31546461892cb20c8a917cec1ed0c sim/common/sim-engine.c +1fc649bbca69388de43496d65e862f2b sim/common/cgen-ops.h +dd39e22578ea983fa009a8f9f9e67014 sim/common/sim-info.c +96104c9a735dc26b83224acf5a17312f sim/common/sim-config.c +30267ef8cc7bcee8b6f88c8560921882 sim/common/sim-options.c +2eeb32e9908feda4b7a2508c125d42b4 sim/common/sim-module.c +ac020d5dd85ce76ea590a04c80b0004a sim/common/cgen-scache.c +dadcf02f20d7912d11c41c2ec4b82c8b sim/common/cgen-par.h +83564fc12ac3792f9bfed141640d869e sim/common/sim-hw.c +17ca42cb8156987ff92d41c5ce32e5ba sim/common/cgen-cpu.h +e13b284673ac259a7c551a4b137b60af sim/common/hw-properties.h 199b9d7620fd06d6fdb11531783d8553 sim/mcore/ChangeLog aa86cbc835a69895d241d450d689efbb sim/mcore/configure -dafeb590f2ddd6e1a4d5ee9fa39fb76d sim/mcore/sim-main.h +11fd708e83e9429923323be9c3ab1c2e sim/mcore/sim-main.h +79b3f19a4a961715ed1b3fc266e073d6 sim/mcore/config.in +334b62b2324cae703a223d7f9b5bdb94 sim/mcore/interp.c e7dd365f1ca1a58020c813d6e9369075 sim/mcore/configure.ac +c9b474308a2c3140e1d68511ea3c5621 sim/mcore/Makefile.in 4ab55a35c7007d58ee370d38587e6907 sim/mcore/aclocal.m4 -79b3f19a4a961715ed1b3fc266e073d6 sim/mcore/config.in -f0d1a9e2b3feae3a6c7df98240b81c2f sim/mcore/interp.c -778b72bdd065181dfcd390727f171de7 sim/mcore/Makefile.in -0f70a274f16673f3c92216579480a7f7 sim/rl78/ChangeLog -2aed1409d14cb35bc0d76d1cfe84caf2 sim/rl78/configure -c6cbdf81a9aa41e2bb42ea1b2ba33708 sim/rl78/gdb-if.c -7d08cb80e292d0a3d501f17d4979b4a0 sim/rl78/mem.c -475ac2fa96a8a1c4fc4cd7303bafb0ff sim/rl78/main.c -ba37fd68d8133e360c8b94c961ea50a6 sim/rl78/rl78.c -9be55bb7cdd71abc7e5bda1e3004a287 sim/rl78/configure.ac -a9ed8d1dab0728259e07e5daa611f2a7 sim/rl78/mem.h -6850726ecb85cf0bb8305344acfe7aed sim/rl78/load.c -e192af447bc9e0ed10fca291e754536f sim/rl78/trace.h -4ab55a35c7007d58ee370d38587e6907 sim/rl78/aclocal.m4 -5c1ecc2b1a38e448c27df3d6c26a2017 sim/rl78/trace.c -09d6a57f399102d2cbc1562433d12aac sim/rl78/config.in -5db88f1054ad6bd99db3a16b7f743df9 sim/rl78/load.h -dd3f39364c4cad393099c158ee769bf6 sim/rl78/cpu.h -e48a90450ad126bc200f5ea5a30f3c40 sim/rl78/cpu.c -4add34d01a98224b8941d758ee558fd7 sim/rl78/Makefile.in -ae58a9bb0a20abc8e81efdfa50cf8a64 sim/cris/modelv10.c -8ee4cb0c2b1a1a3e7151a9cd5396627e sim/cris/cris-opc.h -701e48314e76de78538a1e246a82d9b7 sim/cris/ChangeLog -5bf36bfd361dedf672ac95f9591ca3dd sim/cris/configure -33862b51dda322acd35f675a0b356826 sim/cris/decodev32.c -7fcc3fa226d5d4a9eb78c791c6e35f0c sim/cris/cris-desc.h -4e7cbde46bb9dcf5d431e8514e117ad9 sim/cris/sim-main.h -fbbe4ab5f495df95fb990a75c521fa42 sim/cris/mloop.in -4a86342e3e7cdadb80d8398bcd6b2872 sim/cris/configure.ac -5671bebe50ed0977bf0cb3790e6521b1 sim/cris/decodev32.h -a88e243943e57d0341f4e240c162536d sim/cris/dv-cris.c -443595890e52074d65d35e5f1fa5ae42 sim/cris/crisv10f.c -f143abfc158cad657648bc38eae61863 sim/cris/decodev10.h -92b378fbe234ed5cdf15758342bafe1c sim/cris/semcrisv10f-switch.c -2761c9b0a039d645e94fee37130b60c9 sim/cris/cpuall.h -f0f400cb08ba5e017a92e80a739547cb sim/cris/arch.c -62144c585f62c233c77f73d5c9b9b2fe sim/cris/sim-if.c -e5747abc5202d68f53811125be48c4ab sim/cris/cris-sim.h -22c7a61fb0245b5833b64e3ea7bc2e5f sim/cris/crisv32f.c -517af79aedb873ccd3d1f0a558b1b781 sim/cris/cpuv10.h -b8ff8eda933a2b93f5110cd6ace7102b sim/cris/rvdummy.c -a497de7a7ecf11b11c4a589d345a110b sim/cris/cpuv32.h -4ab55a35c7007d58ee370d38587e6907 sim/cris/aclocal.m4 -e8e75ae1c2fe86a761ad347e150ee93f sim/cris/dv-rv.c -5faedb91833d63b034c4928218aefbc4 sim/cris/cpuv32.c -5bc9e4e28d2319bfe0b2a5e0c6b9d775 sim/cris/dv-cris_900000xx.c -a1fe0c495b0e37492085cd254cc2d878 sim/cris/cris-tmpl.c -ee5ca7dd5e31a1a6cdd415c4e5a98f76 sim/cris/config.in -d790782c01f6a2c9fed86285a2579931 sim/cris/arch.h -0ecdf043f8e2494f037df7e113f7b643 sim/cris/traps.c -0e2a1d33c9dd94e08f683f9ec60a0e25 sim/cris/decodev10.c -04f60dc693a23ad3f59ddf1ea32fed94 sim/cris/semcrisv32f-switch.c -de6c0de7d626843aa578d4e2e42b8fed sim/cris/modelv32.c -f724773cdf74a747d4986fa00513cb17 sim/cris/cpuv10.c -16ea10591ec5c1676beedaf1ea26d71e sim/cris/cris-desc.c -9e3e4df81f09b323d55606cf47d38728 sim/cris/Makefile.in -e2b1c770fb0b1bd499fe5e728c279b76 sim/.gitignore -d85c8c186dbe1aa356ede332cf9f92fb sim/lm32/ChangeLog -4f5108b1dca9758db1b3759d0c3ec61a sim/lm32/configure -b8f3f590fbb3f7f8ef366d4378c24b31 sim/lm32/user.c -e691ba8bcbd983a44608ae56a8e10598 sim/lm32/dv-lm32timer.c -c4c127dce646f377d8471279a0f5df86 sim/lm32/sim-main.h -06c872ecef34e2b9db7fe98547b9adff sim/lm32/mloop.in -1ef7d461a3813915e4b54dda56bf4181 sim/lm32/configure.ac -f9f8fb38943acc8952e51f381547f4f1 sim/lm32/model.c -85de75b75393bfa792469a43a4c6e386 sim/lm32/dv-lm32cpu.c -d94c1d2824667ad0ca3f9e094d468c6e sim/lm32/decode.c -5d9e0f71a733c9e0f06163f83ff321d1 sim/lm32/cpuall.h -ea34278f1515d72e14d7d4af45b60f6f sim/lm32/arch.c -a780bbfe4a727574deafd8b0903c55b1 sim/lm32/dv-lm32uart.c -fd2a3059ef76d67b170fe8411547879e sim/lm32/sim-if.c -623a65a0a1c40a95a4a6f167f17e9425 sim/lm32/lm32-sim.h -4ab55a35c7007d58ee370d38587e6907 sim/lm32/aclocal.m4 -10491b1b23b527cc8d4d09ba89fcee8c sim/lm32/lm32.c -8de82ab3520e7bfb7378b8e635ba7d2a sim/lm32/decode.h -5612be8e02af3bf837bf725454d50414 sim/lm32/config.in -952494d7045d30f78f492b921b8327da sim/lm32/arch.h -05c3ea2468c4983b7389af68f4368c12 sim/lm32/traps.c -4ffb840cb3b8ed22379c878bcf8d5054 sim/lm32/sem-switch.c -4999c55fcf15bd8b64e358d85db1928b sim/lm32/cpu.h -08e970d7c3d591ef67b03283fc1f9a31 sim/lm32/sem.c -eb981b66e05c75e2539a04c466498a63 sim/lm32/cpu.c -902545398d9eb957f15bf82b30b4b50d sim/lm32/Makefile.in -842c11bd44343fe75399cada812a5f38 sim/configure.tgt -4dd935840fe213f3a981b03036c1b94f sim/iq2000/ChangeLog -aa1b666d2125fbcbe7e66be7669acd6f sim/iq2000/configure -3d783daedf05371ef79982c3944e2d5b sim/iq2000/sim-main.h -debcd2240cc68851a35bff78bfe5f3d3 sim/iq2000/mloop.in -a710e05535a1f9aa7b10046539932424 sim/iq2000/configure.ac -bd9b86ad5870fac3ef86440df8586801 sim/iq2000/model.c -b7d721a09dbbff1b4f28a50a7aa4f8a8 sim/iq2000/decode.c -8947c8538fe1c0d22fc7f0d936201584 sim/iq2000/iq2000.c -d603358e7ab066dd409207430e67829a sim/iq2000/cpuall.h -2bfd81d2bca99d4373789b41cdc16319 sim/iq2000/arch.c -b42b77f87370032b14404c011b53c715 sim/iq2000/sim-if.c -4ab55a35c7007d58ee370d38587e6907 sim/iq2000/aclocal.m4 -c4f4254141902368421237b1ac75213a sim/iq2000/decode.h -5612be8e02af3bf837bf725454d50414 sim/iq2000/config.in -8362e242aac36a846b377534128f3e8f sim/iq2000/arch.h -7462fd0f124d794a0b86bc732565f630 sim/iq2000/sem-switch.c -3c4e644da844f211622e2ab9fdfe7c38 sim/iq2000/cpu.h -875cf882596970ac7641f643c81cc608 sim/iq2000/sem.c -2055365cc5e4c158e40d160b506e28bc sim/iq2000/cpu.c -d48183b68236941d2cbf6e6130cf30b5 sim/iq2000/Makefile.in -a77f7e1dfdf3b9871132ad0fc49f9a1e sim/ft32/ft32-sim.h -cca394963a06fdeae736e3575103d984 sim/ft32/ChangeLog -e89310a023370ae3d2cf9f42dc53063b sim/ft32/configure -5afbd0cd8416605a9d651e5912ca02df sim/ft32/sim-main.h -a713808bc827e60d5b5d32c545bd0770 sim/ft32/configure.ac -4ab55a35c7007d58ee370d38587e6907 sim/ft32/aclocal.m4 -79b3f19a4a961715ed1b3fc266e073d6 sim/ft32/config.in -d80c040a41697642622368912f5ec90d sim/ft32/interp.c -2f8bba369ed7590269157e6278e3911e sim/ft32/Makefile.in a1217029552bf4107c9b439c95bec39b sim/sh/ChangeLog aa86cbc835a69895d241d450d689efbb sim/sh/configure -2b9fd7b3833e2044e2c3eca38bb173ec sim/sh/sim-main.h -e7dd365f1ca1a58020c813d6e9369075 sim/sh/configure.ac -4ab55a35c7007d58ee370d38587e6907 sim/sh/aclocal.m4 +cc378fc8b7adc6e4cf4cfeda2d8b9765 sim/sh/sim-main.h 79b3f19a4a961715ed1b3fc266e073d6 sim/sh/config.in +32f5b8f9788e8786980836aa08f81713 sim/sh/interp.c +e7dd365f1ca1a58020c813d6e9369075 sim/sh/configure.ac daa4535a7428b95572256d31c6b7118d sim/sh/gencode.c 485762a39054bcf5bf3a3ee2a4de586f sim/sh/syscall.h -32f5b8f9788e8786980836aa08f81713 sim/sh/interp.c -675a50ff7444d28fe0c8a576c119ceee sim/sh/Makefile.in -b6e69eedb6360fc61b5d5bb482d202f1 sim/README-HACKING -dbfef4c712c7087215cd7f121a3f6fb2 sim/v850/ChangeLog -f192d6509ec6a5269875ba54fbc70e3e sim/v850/configure -26161fca5d747178c7cb1ea21cf3ee39 sim/v850/sim-main.h -80475fe714bbd506495e201900761d40 sim/v850/configure.ac -071749598bc079bfc57c77b17e484809 sim/v850/v850.igen -4ab55a35c7007d58ee370d38587e6907 sim/v850/aclocal.m4 -af2c83244a91504979f6a0b77e9f6219 sim/v850/v850-dc -343bbcec33069e5661e14fc16b9adf16 sim/v850/simops.h -cb3eba25934045ad2ee17717f461372a sim/v850/config.in -5be894a40ad061ddb10cc74af505e506 sim/v850/v850_sim.h -f1c7e4031cb70d8722addad1f2ad8612 sim/v850/interp.c -665d05b23d15bcf1131f13acc3707dd5 sim/v850/simops.c -9ac416b715e1a7faf2130b531def9cdd sim/v850/Makefile.in -d919962ef2a2527ac92ceba8b893fb67 sim/moxie/ChangeLog -242be6f3d7c828cc4f833eef36c83e35 sim/moxie/configure -11760dcb7a880b8480cfc835b499714c sim/moxie/sim-main.h -4e5b996dc62651c7c0bb56df38b83068 sim/moxie/configure.ac -52a9849a86689a7ee1f88ce34bbd60ac sim/moxie/moxie-gdb.dts -4ab55a35c7007d58ee370d38587e6907 sim/moxie/aclocal.m4 -79b3f19a4a961715ed1b3fc266e073d6 sim/moxie/config.in -0b10dc79a503d71d2011e63e03b034bc sim/moxie/interp.c -7c1a5c0d364343cfbc1b2dc08a0f52d9 sim/moxie/Makefile.in -829d71708b7a0314e65527a409e275cc sim/cr16/cr16_sim.h -df830fe3c2195af11d2fc229a4116c92 sim/cr16/ChangeLog -57065c49bc83765d99249de5092446dd sim/cr16/configure -14b113f3d0318aefff80b0b4fe42a130 sim/cr16/sim-main.h -4933c3663e9942edfa188a89d76955fa sim/cr16/configure.ac -4ab55a35c7007d58ee370d38587e6907 sim/cr16/aclocal.m4 -79b3f19a4a961715ed1b3fc266e073d6 sim/cr16/config.in -ca13bd9995e7f520d27d090a99eaa8d3 sim/cr16/gencode.c -b05448fa0d5b230ef6097f82adc1700c sim/cr16/interp.c -a0d17c6e01c507a768549fb8be1b3942 sim/cr16/simops.c -404fe4471b60baabce74f3f822b63c8a sim/cr16/Makefile.in -e3a3ddca8e0e6bfe5bf6c8a37b8f8aa0 sim/or1k/configure -130669379fae29f5560b63644cbcaf75 sim/or1k/sim-main.h -e64a82e80ff888e1ca5627fb7bd1568d sim/or1k/mloop.in -109dfb1364115af9a96e29c830952d47 sim/or1k/configure.ac -40edeaf4fe74de60f35b1c3c74e06715 sim/or1k/model.c -1e511f5e6f8b9ad7d712c5b039e2d0aa sim/or1k/decode.c -922e66122291e84b73303a3028b05e61 sim/or1k/cpuall.h -74e5ed07279f4781727ef2c405a504ec sim/or1k/arch.c -70e016b232d9cf308cf7541c3eeed6c6 sim/or1k/sim-if.c -4ab55a35c7007d58ee370d38587e6907 sim/or1k/aclocal.m4 -8a715c7ebdcf9dab30211de13b7fd79f sim/or1k/decode.h -f4f03b812cdbb239f5a1fd44824e1763 sim/or1k/README -d15b0d40cbd34d26d6c28294056dfd96 sim/or1k/or1k.c -79b3f19a4a961715ed1b3fc266e073d6 sim/or1k/config.in -dbb82a85cfcdff62b9538d48ca460f6f sim/or1k/arch.h -b6433830d7670cc7cf91c66190d94945 sim/or1k/traps.c -60b294d304cc7ec5678041c4880fe832 sim/or1k/or1k-sim.h -72d28ed3bda86b6ae6d7a8063d683f64 sim/or1k/sem-switch.c -1020db88e168ff607d31f27cf089a2ec sim/or1k/cpu.h -9fe83cf9913211264c420f91c4a6b1ed sim/or1k/sem.c -22a982ca6a18f8c2f0472428b7384a48 sim/or1k/cpu.c -e694765e8c14fa53a4936e8d5bb7c532 sim/or1k/Makefile.in -8efb30dc91cfcf7e8b9363a41fb36b77 sim/bfin/dv-bfin_uart2.c -73283bf1b2fd9261a2f0907e670f9847 sim/bfin/dv-bfin_otp.h -d7e141d8e66481500e73c426c5e33d91 sim/bfin/dv-bfin_gpio.h -2e3ebf93959334b5775853429dd2f13a sim/bfin/dv-bfin_wdog.c -935081aef36e14d8f4c2da15e0f1ceaa sim/bfin/ChangeLog -13c69373b01fab46685e2bf5f5789d2c sim/bfin/configure -11db4a1bd648497eea7106d5e0c7b65c sim/bfin/dv-bfin_ebiu_sdc.c -d9a06426668bdae82c582064a66fad90 sim/bfin/dv-bfin_gpio.c -cf6725b40f4756d04056528451166c20 sim/bfin/dv-bfin_uart.h -17f059aedac581acbfb33c818fa08574 sim/bfin/dv-bfin_spi.h -bd640f681c165dc5568cea95e2bacf67 sim/bfin/dv-bfin_rtc.h -b074cc820ab778f6e6be9c28c121096f sim/bfin/dv-bfin_nfc.h -19608ef1c8c1adba4ad0b78da8869826 sim/bfin/dv-bfin_trace.c -a56c82f3999a5d36317e34b6a32e62cd sim/bfin/machs.h -5d959a7b2f790a743a8e3cce24c68b8f sim/bfin/dv-bfin_pfmon.c -2daf288f65243ef70b219137543191ba sim/bfin/sim-main.h -b45fbb6e49d8119653349435cac4ecf4 sim/bfin/dv-bfin_uart2.h -12b138c3dee49b4c8379a75ceb546cba sim/bfin/dv-bfin_jtag.h -9791a85288a66dadcb6b12832480b34e sim/bfin/dv-bfin_otp.c -f28fee9a784beeb739b2bfcb1fb9287a sim/bfin/configure.ac -f300c88767fc78fa9c9eb716368f1a33 sim/bfin/dv-bfin_ebiu_ddrc.h -ed7a2eabdcd0fe52bb310faeff35c949 sim/bfin/dv-bfin_ctimer.c -5a8a0deacc6a3c907b818eafc03cf332 sim/bfin/dv-bfin_emac.c -b9f089a5d22d00dfee13e6633392a5f4 sim/bfin/dv-bfin_pfmon.h -c7e9521d5a1f36ff8f623cabd81555d0 sim/bfin/bfin-sim.c -ebb6318d5e7bdb1078b801992be6836c sim/bfin/dv-bfin_mmu.c -6a257d86a53d6010a79727fc6dbaf95e sim/bfin/dv-bfin_emac.h -63a2b60dae463ba894c4f051ed332c99 sim/bfin/dv-bfin_pint.h -d88f30bca308b66053b9227e9bbd5569 sim/bfin/insn_list.def -10e5b1d75b2d80f8af9cb1e242426401 sim/bfin/dv-bfin_evt.c -f3c93ad7b1d2b64f8fba98603c35f558 sim/bfin/dv-bfin_ebiu_amc.h -8c70060cac77f4f885e0c399b56d462a sim/bfin/proc_list.def -de736adb3f20813c5f521e0814a98895 sim/bfin/dv-bfin_ppi.h -237c0d775368993d98291badd47793e1 sim/bfin/dv-bfin_spi.c -15664bff07d79243e272b5cfb6877d6a sim/bfin/dv-bfin_gpio2.h -3bd17bfdbd0e8c645354d0a13765c121 sim/bfin/dv-bfin_dmac.c -e15fb402b26d88fa91bda91b1dedf3b0 sim/bfin/dv-bfin_ebiu_amc.c -de0f8af61b0fbb45946b0c8123d496e9 sim/bfin/dv-bfin_trace.h -ffb9b463247b259248ab26e86d1e553b sim/bfin/dv-bfin_jtag.c -1aa65faee629d55929e36b57529c48c9 sim/bfin/dv-bfin_rtc.c -2ece0dfdd3ca2d803d644fa27cac7bd9 sim/bfin/dv-eth_phy.c -cbff954aa28ff15888dbfe9a51404291 sim/bfin/dv-bfin_eppi.h -7fbd64747f1f8c2e16db5517dd524ed3 sim/bfin/aclocal.m4 -ca25d9abcf8fa67ac1020ac19356ff28 sim/bfin/dv-bfin_dma.c -3888ce8daebf25b1187f8ba4cbc135f2 sim/bfin/bfroms/bf54x-0.1.h -d192c8113897b222793a89643741c55e sim/bfin/bfroms/bf59x_l1-0.1.h -f6f62da004a077342a5ea0b6d5ff8da4 sim/bfin/bfroms/bf533-0.1.h -66cbeef247c1ae97be55a7c621b2414d sim/bfin/bfroms/bf59x-0.0.h -45e3b4e178a02616165ed00bd3c58df2 sim/bfin/bfroms/bf51x-0.0.h -0615504b7bc5477dcfa61d7b16121bfb sim/bfin/bfroms/bf538-0.0.h -0dc2593a1f4706f08bf3aa71d596c41b sim/bfin/bfroms/bf526-0.1.h -57d038d98c5a8e74ecf201b8b6d4f07a sim/bfin/bfroms/bf51x-0.1.h -e98df0913c38a00af8117b5c288a8a85 sim/bfin/bfroms/bf54x-0.0.h -4f6b611014655449ae9aa6ff733441be sim/bfin/bfroms/bf54x_l1-0.0.h -c67b2baec67606a371bbe00edcc3dce8 sim/bfin/bfroms/bf537-0.0.h -d59c99325a006c9ced53749cf2ef487b sim/bfin/bfroms/bf527-0.0.h -f7c6c0a4c1b26e464277897746c69c64 sim/bfin/bfroms/bf54x_l1-0.1.h -aabc3164901d534355e6a1d3357dcbd1 sim/bfin/bfroms/bf533-0.2.h -c549474a3d8c3650e4125e352a351c74 sim/bfin/bfroms/bf54x_l1-0.2.h -371c061fb393a41d964a6bb34a6ec8e5 sim/bfin/bfroms/bf54x-0.4.h -ffb76dbec098de19fa58d330e4499c7d sim/bfin/bfroms/bf54x_l1-0.4.h -5acfda483a7f0a576bf200e4a3e07e5f sim/bfin/bfroms/bf533-0.3.h -909ea02ecbce474582595dec30940205 sim/bfin/bfroms/bf537-0.1.h -073b919a9cf4d7159a3cfce31bd4a4f5 sim/bfin/bfroms/all.h -1516ba56ad5f33eea71a01c88db27e70 sim/bfin/bfroms/bf526-0.2.h -207c1773441d4c2a58e8cc2e00ac79ce sim/bfin/bfroms/bf537-0.3.h -84f8cbfefb6807dc2d2ffe6244cc7f85 sim/bfin/bfroms/bf50x-0.0.h -c26d6975c6703c392678642d3f6f080f sim/bfin/bfroms/bf527-0.1.h -7c2822269026f83ae214a15f8688694d sim/bfin/bfroms/bf561-0.5.h -74cac990b470c5c5aafbc35aa0a0cc56 sim/bfin/bfroms/bf526-0.0.h -ca350d7cbddc698a48785aa19dac7821 sim/bfin/bfroms/bf527-0.2.h -583206f512c9c90892ef9dc84d789b34 sim/bfin/bfroms/bf54x-0.2.h -1a35368e970c9649dde4cf0e71351082 sim/bfin/bfroms/bf51x-0.2.h -1c5aaa26aace27d24aba882bd24c6279 sim/bfin/dv-bfin_mmu.h -b7c63e463d6d4f10768c19266919ec16 sim/bfin/gui.h -2f1f08751f76e8ca7df54d23aa1e1a78 sim/bfin/machs.c -8b7416c387b4a108964eec5d76330b6d sim/bfin/dv-bfin_eppi.c -fb2dd5e0eaae550fd66e7c9df3733ec9 sim/bfin/dv-bfin_ebiu_sdc.h -ca76017d507da4d0426138add4e0feab sim/bfin/linux-targ-map.h -cc1c61950485f20530deba59218678a6 sim/bfin/devices.h -afda27ed1c224fd391d1c6464a88d9ad sim/bfin/dv-bfin_pll.h -22fc501889c0accaa1da91330c7df3ec sim/bfin/dv-bfin_twi.c -70409bcd4d75a0d9214fd86dc9fce894 sim/bfin/dv-bfin_pll.c -175be671ad8d9b9f191a822662147b10 sim/bfin/config.in -7e208088e88425ad88f951218f243715 sim/bfin/dv-bfin_nfc.c -74d31b4324c7c5298324c22fb903237b sim/bfin/dv-bfin_ctimer.h -c86b0b791a5a2570ebd1aadc5e1f3362 sim/bfin/dv-bfin_ppi.c -17940d057aed5a9f97f7774da19a12bd sim/bfin/dv-bfin_cec.c -8625c5174febbeb5db0190f4ef07e6da sim/bfin/arch.h -19ae30403a0a3492036d4b7e8d0bc1aa sim/bfin/dv-bfin_ebiu_ddrc.c -5359896c51d81868853a6b4ab8f3a798 sim/bfin/dv-bfin_twi.h -387e09e6bc5c5662dde5424a5af4b480 sim/bfin/linux-fixed-code.s -a4526eb9a28c9a34512a007e0ca5b946 sim/bfin/dv-bfin_cec.h -58d1b217c40b5a1ca2f94b05c91a3e97 sim/bfin/dv-bfin_gptimer.c -9de47b06cebe5730d3cc4a03a07b96b6 sim/bfin/dv-bfin_gpio2.c -520c2a18cb3326e52f9aa9f4b27b0f57 sim/bfin/dv-bfin_pint.c -a5feed1d977760a56abacad544908aef sim/bfin/dv-bfin_sic.c -3f91e7dfb753f6fb0ade237df031ba50 sim/bfin/bfin-sim.h -9bae73eb2534f161ca7ee78b0155f49d sim/bfin/dv-bfin_sic.h -492427fc77b38896d10fe0d402d8033b sim/bfin/linux-fixed-code.h -783b59b59f896677bfa68e47242756f5 sim/bfin/interp.c -bc0c0871d64c248e78469bc6f52f5a40 sim/bfin/dv-bfin_wp.h -dadf071327972fd08b60bf27081da436 sim/bfin/dv-bfin_wdog.h -1897f82283b6a9eb46c703c390e3f99c sim/bfin/gui.c -5ff749771303eec2bec1011a7215b842 sim/bfin/devices.c -2d69914ca7b427f58e7233a061cea6ab sim/bfin/dv-bfin_dma.h -ef6301680a576871b81487b65f469c4d sim/bfin/dv-bfin_gptimer.h -c42ddad90f52ba53aacbdd5cb6fe34bb sim/bfin/dv-bfin_evt.h -b69455c1c2d788a8e3e0aa398113ad8d sim/bfin/dv-bfin_uart.c -670a8b38ff17b9b085fc5dfaa7e6a3a2 sim/bfin/dv-bfin_wp.c -00b394d500d89e73800c24929e835967 sim/bfin/dv-bfin_dmac.h -6beccb8041d16c3fc10ef251a6212e25 sim/bfin/Makefile.in -b113c0bd55532c0b2c0000ed9d1ad2e2 sim/testsuite/lib/sim-defs.exp -b2d586e0be32d33bff00c21da82c36db sim/testsuite/ChangeLog -ef26cafa99e7d92b40b300450fc033f5 sim/testsuite/configure -2a7b97cc87ae4dc18b5de861f38c9f4e sim/testsuite/configure.ac -6f85f5b126eda2839d687ef1b5cc9587 sim/testsuite/config/default.exp -0f367d89ae3bfb9857b54ec9c8d5331f sim/testsuite/m32r-elf/ChangeLog -ca5d7345bde4b101f716cc24502fc90b sim/testsuite/m32r-elf/configure -cdfd13107641dc366d7f36ada4f5ad87 sim/testsuite/m32r-elf/configure.ac -61aac381a61d722e21e84faa6146d7be sim/testsuite/m32r-elf/loop.s -d855cd1f7a63aa5913126e4c9cbbdca4 sim/testsuite/m32r-elf/hello.s -3f7d022ea28478930f33d2358ac5421e sim/testsuite/m32r-elf/Makefile.in -fdcd1bf835b2c2a0ce2ec539624e2a6c sim/testsuite/m32r-elf/exit47.s -c3159efacfaf9907b2cd1771fa08d97c sim/testsuite/.gitignore -1b6f6400a8d5a5aad32a6de6700a3bc6 sim/testsuite/sim/aarch64/fcsel.s -ec24554d375f8749003d441f17041e04 sim/testsuite/sim/aarch64/fminnm.s -edac53ddf7bbcdb9dce90e3f897880a7 sim/testsuite/sim/aarch64/ldnr.s -d35efcec3c41929d568952abf56ca787 sim/testsuite/sim/aarch64/ChangeLog -c272478e11f857623422c69c32c347e7 sim/testsuite/sim/aarch64/xtl.s -4edaabc5a3ba4982ab32bea48d0f464a sim/testsuite/sim/aarch64/allinsn.exp -68bbc6b07a27f3b8f9218ef2ec72ed96 sim/testsuite/sim/aarch64/ldn_multiple.s -5671a78df36d1753f5ce753e0e03ab98 sim/testsuite/sim/aarch64/sumulh.s -7109e21c036b925dc3d9d822faa6d47d sim/testsuite/sim/aarch64/bit.s -23807c76116e06c31ecaf6b71ac14338 sim/testsuite/sim/aarch64/testutils.inc -dd93632a4ebde45ccfe85430b63241cd sim/testsuite/sim/aarch64/mul.s -ddead3f07c4c76c4990369055ef6d480 sim/testsuite/sim/aarch64/xtn.s -cb2b29ddb2fdbbc37686649386f70b38 sim/testsuite/sim/aarch64/fstur.s -bec396512149783f9d2330395644573c sim/testsuite/sim/aarch64/stn_multiple.s -a23328e3a895483960b3e5f646ed3f1d sim/testsuite/sim/aarch64/fcvtz.s -d8c2c4227ed84e11b21a51c51ab69190 sim/testsuite/sim/aarch64/uzp.s -4a952ef725e547b3ceaddfc5a5e4b82f sim/testsuite/sim/aarch64/stn_single.s -1136807e5852fa056f6807695cc176da sim/testsuite/sim/aarch64/mls.s -e4bf893b5808655522560a909305f91c sim/testsuite/sim/aarch64/fcmp.s -8d86c2045b41742d36c9f05321d7ee41 sim/testsuite/sim/aarch64/adds.s -22ce20e8ac1596b43d27566fec1d0df3 sim/testsuite/sim/aarch64/cmtst.s -0afd0180ee05670f0859a0cfa85a66f9 sim/testsuite/sim/aarch64/sumov.s -cee852180398487c364c92b459e0c145 sim/testsuite/sim/aarch64/mla.s -bdb357eabb1f4ec8a0dcf656a57e6f54 sim/testsuite/sim/aarch64/fcvtl.s -6c56b6f2a3cd0fd10d27263f129219fc sim/testsuite/sim/aarch64/cnt.s -30f9aadb38fea9605c7184b0bf1a8486 sim/testsuite/sim/aarch64/pass.s -75994af3ed8ae4f86428b1ccb9363b3f sim/testsuite/sim/aarch64/tbnz.s -621f5b3c71738a53ec60c54f5347c2de sim/testsuite/sim/aarch64/fcmXX.s -f1237777b4746501810c730fdf8257a9 sim/testsuite/sim/aarch64/addv.s -a322bda4b01624fe4727f7e73ec0ab2f sim/testsuite/sim/aarch64/ldn_single.s -101e467bd8d9570809bd743b775e657d sim/testsuite/sim/m32r/ldh.cgs -497cfa2e1bc18e2fadb92c99fbcadcab sim/testsuite/sim/m32r/mul.cgs -9c2236dea1f22183f110260aac6e7821 sim/testsuite/sim/m32r/mvfacmi.cgs -34c7f8c3e919f9ba0f0b3c7caa68f237 sim/testsuite/sim/m32r/ld-d.cgs -17924a13af249ae4d0a6df996e622124 sim/testsuite/sim/m32r/misc.exp -518d60a9ec3ed23e3da2aff0b1456ac0 sim/testsuite/sim/m32r/mulwhi.cgs -5422abf5a05ea36c524bac97c177f79a sim/testsuite/sim/m32r/ldub-d.cgs -88d455c342dfa2947283cd4e7b82f3a1 sim/testsuite/sim/m32r/st-minus.cgs -5b9e264b3d7e3e123150e7933e9776bf sim/testsuite/sim/m32r/sth-d.cgs -690ba3d9db8db10a35899c8eac122f65 sim/testsuite/sim/m32r/addx.cgs -7d5b3e41f7f293b573606e13d0a5c301 sim/testsuite/sim/m32r/and.cgs -6b678d4461818ce7834941045cbfcd01 sim/testsuite/sim/m32r/ChangeLog -29dd50ce15ab9c0d67791901e45a791d sim/testsuite/sim/m32r/ldi16.cgs -dcbcafa8b504f5c1750e3a7f33d06b04 sim/testsuite/sim/m32r/ld.cgs -ee8c3058b6a4fc408f0725c7e0027956 sim/testsuite/sim/m32r/mvtachi.cgs -16834904d188192c7fbb15f488c53087 sim/testsuite/sim/m32r/add.cgs -9bd48d851532a2d84c1edf2872c9a66e sim/testsuite/sim/m32r/subx.cgs -30cfed398315d692a3de98e4c67f90af sim/testsuite/sim/m32r/addv3.cgs -787a6f21f2739736e0a79118443e311a sim/testsuite/sim/m32r/allinsn.exp -b30f0ad9c59b0374e5b52f24e549ae36 sim/testsuite/sim/m32r/bltz.cgs -6df2ea19b2030cc2ad6f1631641587a6 sim/testsuite/sim/m32r/uwrite16.ms -e200d0626a3a782b1ba827d77008622c sim/testsuite/sim/m32r/rte.cgs -237457a459b83e66c0a0f95ba0842910 sim/testsuite/sim/m32r/sra3.cgs -1e2a8c3e0cc7b5988cef7334bf2e14bf sim/testsuite/sim/m32r/cmpu.cgs -7d8da1455d2cd44a51707b07b4b00977 sim/testsuite/sim/m32r/cmpi.cgs -606cf06f01516f620ade2833b6f4272f sim/testsuite/sim/m32r/macwlo.cgs -fc14b150efe66c251e584a8490ab411c sim/testsuite/sim/m32r/divu.cgs -ae67e7de7ffee3af12ef63c7770eb6be sim/testsuite/sim/m32r/bnc8.cgs -81e73b1946f04046a562428a766077ec sim/testsuite/sim/m32r/stb-d.cgs -bcd9f3fee3d28ed1096a5ef6514c0538 sim/testsuite/sim/m32r/bgez.cgs -8cf9213ee7ef813787645bc4c9e12727 sim/testsuite/sim/m32r/addi.cgs -aa647bf776c6497768956dd13b1bc0e6 sim/testsuite/sim/m32r/beqz.cgs -45e6e4177ecd2fe6a1ecde8fcb839662 sim/testsuite/sim/m32r/testutils.inc -79728809577a7966c7f6d3e74eeeab11 sim/testsuite/sim/m32r/remu.cgs -37da8b574adf3cb6f65a7119fab322a7 sim/testsuite/sim/m32r/sll3.cgs -42509b9f2bc28c62f815e3094e75f4ea sim/testsuite/sim/m32r/div.cgs -e9adf1458ab377d5d90d1678d2292bd5 sim/testsuite/sim/m32r/add3.cgs -54efa34ea2ee72560aa9d26f7f557879 sim/testsuite/sim/m32r/trap.cgs -8a180be9e21c1fcadb9dbbc751093bb2 sim/testsuite/sim/m32r/subv.cgs -1b3b8a230f2693ae45a566995a0b9775 sim/testsuite/sim/m32r/bnc24.cgs -c86fb3aef80e809c5161380443aec696 sim/testsuite/sim/m32r/srai.cgs -3795134a6b03341f5a6480f66e7c29f1 sim/testsuite/sim/m32r/xor3.cgs -672b4886a81c13ca0bf05d1df568df5f sim/testsuite/sim/m32r/sll.cgs -d0c711109b91fb82235f2c7de6be93e0 sim/testsuite/sim/m32r/lduh.cgs -241464dd5ebda3e9291399db7f07fde6 sim/testsuite/sim/m32r/rem.cgs -cfd913f0a5ee4bd41656b5e4283c96d1 sim/testsuite/sim/m32r/unlock.cgs -b5eba276aa402a66811d04183ae7da9b sim/testsuite/sim/m32r/bc8.cgs -c66238280149c9f42dd1e19852afd136 sim/testsuite/sim/m32r/st-plus.cgs -61391eba2b47c3b035c549673a100135 sim/testsuite/sim/m32r/bgtz.cgs -6f6c3fdb3474157358c545914bf2c510 sim/testsuite/sim/m32r/xor.cgs -fbed9d4fe93ebbb695228b4a94655dd5 sim/testsuite/sim/m32r/mulwlo.cgs -8cfc6346c5ce5f4e7464057b25ec31b7 sim/testsuite/sim/m32r/mvtaclo.cgs -9041e76bd9e52d5245b6485c481ce1e3 sim/testsuite/sim/m32r/bl24.cgs -8f0cac941aa884623e680f3e4ac0c8b1 sim/testsuite/sim/m32r/mvtc.cgs -ecaba0191d387d8875378bf790693bbe sim/testsuite/sim/m32r/mv.cgs -a79a2f93fa80d613b872cc172ef3e9e8 sim/testsuite/sim/m32r/st.cgs -966058aa7f21ef4a7874f1a0d9888543 sim/testsuite/sim/m32r/seth.cgs -0ebb2e3161db55a3203b65392361b6bd sim/testsuite/sim/m32r/bra8.cgs -d863c2fc17c8b7509aa0996e8a3f15b4 sim/testsuite/sim/m32r/cmp.cgs -98c363f615a992eebb741216c4b99238 sim/testsuite/sim/m32r/neg.cgs -8a79f97b82a93537f9d0afd46d1ce63e sim/testsuite/sim/m32r/slli.cgs -3f2b2701b3579de8839bd35d25076d03 sim/testsuite/sim/m32r/jmp.cgs -faf25008374bb5be6c2d003c079b6b62 sim/testsuite/sim/m32r/sub.cgs -e43074ac62cc10354b7a7759fe2fe869 sim/testsuite/sim/m32r/srli.cgs -ddcce0a4e903b1df7a8d3f9d07b133b4 sim/testsuite/sim/m32r/ldi8.cgs -b29c344695a538384d37acf2acf3f974 sim/testsuite/sim/m32r/sra.cgs -a249bb8bdbaad16488d816dbd85eb1a1 sim/testsuite/sim/m32r/machi.cgs -62c53b4fa4929b659e1b8f3dce7ed101 sim/testsuite/sim/m32r/hw-trap.ms -55e96d8c138d454b947b0c627268410a sim/testsuite/sim/m32r/ldh-d.cgs -a38ca2fe69cd52716f929b7be6ee5690 sim/testsuite/sim/m32r/blez.cgs -31a4c374f7d38d4214300cb58342cb7e sim/testsuite/sim/m32r/ldb.cgs -f3f4a05a6d442fdb1a2dbe82fbc22d5e sim/testsuite/sim/m32r/hello.ms -cda1698f1a6d640498ce3e6cd47add4f sim/testsuite/sim/m32r/srl.cgs -43914dad0473cf29fa8ba7483fcc42a1 sim/testsuite/sim/m32r/beq.cgs -a7b10e6f679c84fe5b2db48164037526 sim/testsuite/sim/m32r/addv.cgs -b464f9a46248faed5a856867decd109b sim/testsuite/sim/m32r/ldub.cgs -e0e5a244234e059b9099534cde98fd29 sim/testsuite/sim/m32r/ld-plus.cgs -8e71d37539927768d17f19c43cfe41bf sim/testsuite/sim/m32r/ldb-d.cgs -29e08614d0fde06b6322dad1cc619d93 sim/testsuite/sim/m32r/and3.cgs -a1584b288866f94579bbf2981c7d812e sim/testsuite/sim/m32r/ld24.cgs -951d325ba4e7036401fa243439c0f27f sim/testsuite/sim/m32r/mullo.cgs -ae803eba46d3c6a6aa1c741aec2783be sim/testsuite/sim/m32r/bra24.cgs -ab51940820c840824c1309f87b0c7430 sim/testsuite/sim/m32r/mvfaclo.cgs -42e2898d542715203fac38dbabe95593 sim/testsuite/sim/m32r/macwhi.cgs -806b43d4fd12897c2b02e9b2f876b308 sim/testsuite/sim/m32r/srl3.cgs -faf23b2f12b51357e3e72b13e79ecc7c sim/testsuite/sim/m32r/uread16.ms -ec2520e6aae9332a6671d4c8a8e5b045 sim/testsuite/sim/m32r/rach.cgs -9171592763b85a01ee783cc5c814c696 sim/testsuite/sim/m32r/rac.cgs -f57a1ae6784adef83a83d0fc96e627d3 sim/testsuite/sim/m32r/bc24.cgs -9c7bdcfc3ad3791fa0248573c2307cf9 sim/testsuite/sim/m32r/uread32.ms -17eccc048da153abc362bee34fe42579 sim/testsuite/sim/m32r/lock.cgs -d6a79a79477689d7e9bf45ff48a1d65c sim/testsuite/sim/m32r/stb.cgs -15a9f901cebcbc565c224f6c61c07326 sim/testsuite/sim/m32r/st-d.cgs -aa1ec114448f408800129388f774de40 sim/testsuite/sim/m32r/mvfc.cgs -0e4b1ac17d86c08b1d98e90ee379e7c8 sim/testsuite/sim/m32r/cmpui.cgs -4adb31d9941df9283e7d046457611c97 sim/testsuite/sim/m32r/or3.cgs -cc4e95eb280ae19c0d22b639bc9fc601 sim/testsuite/sim/m32r/sth.cgs -b0703d4f2678b98efa516375d14989d8 sim/testsuite/sim/m32r/not.cgs -2bd489b3cdd376a0a6b2de5f4a26712f sim/testsuite/sim/m32r/bnez.cgs -9778769d1c0af0c0fc330032708ff835 sim/testsuite/sim/m32r/or.cgs -7a9b903b84abb5fead9cdfdde1804492 sim/testsuite/sim/m32r/bne.cgs -7d3d647734fda959f3b1e738c2b90222 sim/testsuite/sim/m32r/maclo.cgs -749a9149d30e113900b3f089779740ed sim/testsuite/sim/m32r/uwrite32.ms -9be91c4daa50b174585b34804fadde45 sim/testsuite/sim/m32r/bl8.cgs -60ce74d2420a29592309f2f3cbf0bb27 sim/testsuite/sim/m32r/mvfachi.cgs -38f45019c0a3b58549b0dba4f6595f20 sim/testsuite/sim/m32r/lduh-d.cgs -72ae1c84434e74d7a53d09e002ab9830 sim/testsuite/sim/m32r/jl.cgs -0ea66074ee25fd61d52074d38b4358e6 sim/testsuite/sim/m32r/mulhi.cgs -57368ba4c4be662e4d7e09c2fbf73007 sim/testsuite/sim/m32r/nop.cgs -93c5e30b5b6e93aa40a74a53118623b8 sim/testsuite/sim/msp430/ChangeLog -9147d179b9aaafa081eb989a0394e3df sim/testsuite/sim/msp430/add.s -568ea34964ec55fe02eba4a5a8ff2534 sim/testsuite/sim/msp430/allinsn.exp -86d4c8f59d17af694070939425d19b95 sim/testsuite/sim/msp430/testutils.inc -0720b66c5b001a3d08c3ba4b9df8a68c sim/testsuite/sim/arm/movw-movt.ms -0ad30943dc3310c090723d102d0c0c72 sim/testsuite/sim/arm/mul.cgs -f732171a10ed701eb2567ef67d88caf7 sim/testsuite/sim/arm/misc.exp -da2138a738648ab058990d5e495fb407 sim/testsuite/sim/arm/umull.cgs -58ac8d4d5ea2fe8c946251b4592629c6 sim/testsuite/sim/arm/and.cgs -a80b83cc80d3d855b61666aa0100e627 sim/testsuite/sim/arm/ChangeLog -1c290ff406eb9de96060785ccfb36a33 sim/testsuite/sim/arm/add.cgs -28a00b5d6dacadae53e6f32c439dd867 sim/testsuite/sim/arm/mvn.cgs -a35d3dd0d1cfca5cd666ab9d23676f5f sim/testsuite/sim/arm/allinsn.exp -d80faf2d614f5b40636508bb03f723ff sim/testsuite/sim/arm/cmn.cgs -93e27d311dd9c978b5fd3238d8a96ff7 sim/testsuite/sim/arm/ldr.cgs -a06bb01624f0127d797df273c0f0ae39 sim/testsuite/sim/arm/umlal.cgs -d8cbbc37fbab2579e37ca9ed2c82d6e3 sim/testsuite/sim/arm/bx.cgs -13116b55efce4632651233f650d7dc78 sim/testsuite/sim/arm/thumb/mul.cgs -7bceba1198328ea2930942d76eca4da4 sim/testsuite/sim/arm/thumb/lda-pc.cgs -ca60a519f04c50e1e8b316b49a7e4e9d sim/testsuite/sim/arm/thumb/strh-imm.cgs -995d38ff3ed038c4f5cbcad2d78e0207 sim/testsuite/sim/arm/thumb/and.cgs -06e7eb2e9fd2173cafaaf5cbd62eac9b sim/testsuite/sim/arm/thumb/strb-imm.cgs -a1eda67b5040ebb08367e07d0624ee8a sim/testsuite/sim/arm/thumb/asr.cgs -65de2dbbc1d1963e22a7ed146018c9cf sim/testsuite/sim/arm/thumb/add-rd-hs.cgs -9679a91ccf07238a1c0161cde847fe85 sim/testsuite/sim/arm/thumb/bcs.cgs -44fc3fa4d4212c68997074146cd2081d sim/testsuite/sim/arm/thumb/add.cgs -70faca670e6c72adda93fb641c480b1f sim/testsuite/sim/arm/thumb/mvn.cgs -b4f45a3bb387a75a6db056bef516b07b sim/testsuite/sim/arm/thumb/mov-rd-hs.cgs -e89c8dd1ff6ae4faa4b4dff6b626a850 sim/testsuite/sim/arm/thumb/stmia.cgs -91148c7f6657e7dd4e227a43f6ec7cfc sim/testsuite/sim/arm/thumb/ldsb.cgs -05d4b004a36c86c46a3ba8f3a485c488 sim/testsuite/sim/arm/thumb/bcc.cgs -a25b0fe3d7a82e5a2f7605f685e15f46 sim/testsuite/sim/arm/thumb/ldmia.cgs -8c2c133f6c72015561ac976d7438ebe9 sim/testsuite/sim/arm/thumb/ror.cgs -2588c865bab15990f4bd3546b3d82fe7 sim/testsuite/sim/arm/thumb/cmn.cgs -4983cedc4b15f2b1ff5dec0e01ec8705 sim/testsuite/sim/arm/thumb/ldrh-imm.cgs -4aebea08153a18c59cb89377cd0cd6e6 sim/testsuite/sim/arm/thumb/ldr.cgs -359c1c1f673e082a73606aea537c22ce sim/testsuite/sim/arm/thumb/bge.cgs -c1a57f0215877e8992c61e54d2446278 sim/testsuite/sim/arm/thumb/sub-sp.cgs -6c4154b82d1b8a3579a0f42b4142aad5 sim/testsuite/sim/arm/thumb/cmp-hd-rs.cgs -6ed6d54faafbb0319c1604112b0c16c4 sim/testsuite/sim/arm/thumb/bl-hi.cgs -a3a364cbdc5b492650e011da6f9c6de2 sim/testsuite/sim/arm/thumb/add-hd-hs.cgs -34994f81445d814b87b6aebce14a53c9 sim/testsuite/sim/arm/thumb/addi.cgs -cd68a29c2b8bdaf0c8aed77438819e18 sim/testsuite/sim/arm/thumb/bvc.cgs -93c6ea09186e29b651ae931a0ba07760 sim/testsuite/sim/arm/thumb/testutils.inc -ec7f950054226d26fe7c00da759b2c4e sim/testsuite/sim/arm/thumb/bmi.cgs -189891b42b0a10d5895c36ed13267a7e sim/testsuite/sim/arm/thumb/cmp-hd-hs.cgs -c45fc39f2f692299fe4bf891668833d8 sim/testsuite/sim/arm/thumb/tst.cgs -4ed486b285f8dd6272168154f0e7df58 sim/testsuite/sim/arm/thumb/subi8.cgs -1e72cd9a9e01d015ac44deadf9a8eb0d sim/testsuite/sim/arm/thumb/subi.cgs -3b1245f3b53f4f2fd1788169d9d1e5a5 sim/testsuite/sim/arm/thumb/add-sp.cgs -6656596a7ff9c3b412deae76b7e38624 sim/testsuite/sim/arm/thumb/push.cgs -fcaed4c8608ce095dc4625f37383b515 sim/testsuite/sim/arm/thumb/bx-hs.cgs -b44832f5d79102e7efeee45f69462a66 sim/testsuite/sim/arm/thumb/eor.cgs -674db4c1215bd277651130d87a64a915 sim/testsuite/sim/arm/thumb/ldrh.cgs -0250cdbde1a106526ec9f3b4861b8d4a sim/testsuite/sim/arm/thumb/pop-pc.cgs -f25edf66e54fa2c53957abc6aa807d00 sim/testsuite/sim/arm/thumb/ble.cgs -5ea6bc2fd59bbd0f3a4bd46fd117a8be sim/testsuite/sim/arm/thumb/bvs.cgs -4dd23bc630fc11c4eca7cbea9fc36231 sim/testsuite/sim/arm/thumb/b.cgs -c5c60347531697a069a2800842ee3902 sim/testsuite/sim/arm/thumb/str-sprel.cgs -15cd5436a6e963ccd32b54e22c7a8b21 sim/testsuite/sim/arm/thumb/lsr.cgs -62c721a2ca73cdae002eba9841199014 sim/testsuite/sim/arm/thumb/strh.cgs -5e5452b3461b69cffd6b8f23f4e7140c sim/testsuite/sim/arm/thumb/mov-hd-hs.cgs -fa00d6fb1a2926732b0eb28ae0c77c47 sim/testsuite/sim/arm/thumb/push-lr.cgs -c41ea1558f80aa2acb0eabcfda617729 sim/testsuite/sim/arm/thumb/ldr-sprel.cgs -f558e4e07d5886e42d8da753f5adc9c2 sim/testsuite/sim/arm/thumb/ldr-pc.cgs -f39dfdec26af7f089c85d0156d96f853 sim/testsuite/sim/arm/thumb/adc.cgs -9e9f7b260681e86c6c0b7e0006cd2154 sim/testsuite/sim/arm/thumb/cmp.cgs -bc1c96814fecd239a7955bc76320fae5 sim/testsuite/sim/arm/thumb/cmp-rd-hs.cgs -03a9889899898201a14082970138178d sim/testsuite/sim/arm/thumb/bpl.cgs -8bcf6d16383ab1c7ef09466857afbc37 sim/testsuite/sim/arm/thumb/neg.cgs -ead31b659b0f0e78ca8054010fc195a9 sim/testsuite/sim/arm/thumb/bls.cgs -56f88f8627fec54cd96656de2828c1f2 sim/testsuite/sim/arm/thumb/sbc.cgs -acb920479677a598ba5544db15addd06 sim/testsuite/sim/arm/thumb/sub.cgs -cc9025ac9679ebfbd9e3fc340edbc697 sim/testsuite/sim/arm/thumb/bgt.cgs -84459a09af60b4a3de23776a8bf0adcc sim/testsuite/sim/arm/thumb/swi.cgs -3896f647e72d591e262a40e5af29adf9 sim/testsuite/sim/arm/thumb/ldr-imm.cgs -e162af7a697a2fa2e10ecc1a56b45be1 sim/testsuite/sim/arm/thumb/beq.cgs -a2f21e7ede5faef4d9cee034a88928ae sim/testsuite/sim/arm/thumb/ldsh.cgs -0c8a4f0432c4d3abeea38a2f31a8fed2 sim/testsuite/sim/arm/thumb/add-hd-rs.cgs -2f5ae83cda2f549b102b57569f78f8d9 sim/testsuite/sim/arm/thumb/pop.cgs -b1866a0b3f4e1244f6f32c7890b4623f sim/testsuite/sim/arm/thumb/blt.cgs -ed9f50e3848ffa46f1f6918df9be8d9e sim/testsuite/sim/arm/thumb/ldrb-imm.cgs -a11035d426ce96b9dd0c5b94664abcc1 sim/testsuite/sim/arm/thumb/mov-hd-rs.cgs -10371b41438911cf843b9cec25c67e1d sim/testsuite/sim/arm/thumb/strb.cgs -b0b760fd79039fbf1125dc0a526be229 sim/testsuite/sim/arm/thumb/lda-sp.cgs -f9d716a1d842d091c8ed298f1b5b1ae9 sim/testsuite/sim/arm/thumb/str.cgs -be66d0c1da07b0c483423dc9b3ef939d sim/testsuite/sim/arm/thumb/allthumb.exp -6cf3e8b7ef426b8914b47d8f7ec0a456 sim/testsuite/sim/arm/thumb/orr.cgs -a8c07a4b4764c4cc4c88cd2633394160 sim/testsuite/sim/arm/thumb/bl-lo.cgs -244babd31dcba228ef3637cbcca9c16b sim/testsuite/sim/arm/thumb/bhi.cgs -5ae8870812f676720ebfc69b48c04ebb sim/testsuite/sim/arm/thumb/bne.cgs -d9a906c124e9554e0980cc53b336b377 sim/testsuite/sim/arm/thumb/addi8.cgs -4a2f10cac1edd904293441d716cad0f1 sim/testsuite/sim/arm/thumb/bic.cgs -23d58ec2e23ff3bed4784642cc48aa06 sim/testsuite/sim/arm/thumb/bx-rs.cgs -8575173ee07cb511f33d4ba01c67152a sim/testsuite/sim/arm/thumb/ldrb.cgs -1d8dd64ff6c23b570bbaa4d7afff968e sim/testsuite/sim/arm/thumb/str-imm.cgs -eb4d0f5b458b6c6e2a847d5c8673e3e6 sim/testsuite/sim/arm/thumb/mov.cgs -0054af714a4db9a939abde5126dabe11 sim/testsuite/sim/arm/thumb/lsl.cgs -5daa27aad0853ba541927ca858d54e0e sim/testsuite/sim/arm/smull.cgs -f0a99de3c5c47c3aa91c95c25879b41f sim/testsuite/sim/arm/testutils.inc -853c04dea43ce219f8fbb2d4dda8f96c sim/testsuite/sim/arm/tst.cgs -b70b6932231ba7b22b55aa6b0dabd2da sim/testsuite/sim/arm/ldrsh.cgs -05ae9969a70c8f236c50630fd2f7d113 sim/testsuite/sim/arm/swp.cgs -61d1b5a430c450fa09d944dac4f6e9e9 sim/testsuite/sim/arm/misaligned3.ms -5b1a485b23f4ada997bc9c482f4b142d sim/testsuite/sim/arm/eor.cgs -3d8cacbe82b517293ac2230f4947d142 sim/testsuite/sim/arm/ldrh.cgs -99933c6f18e0fe8c3cbfeea3222bc270 sim/testsuite/sim/arm/b.cgs -2db4b0c1e930d96e870724d2ecb71ec1 sim/testsuite/sim/arm/rsc.cgs -138b2c1c179325a81f413db374952dda sim/testsuite/sim/arm/mrs.cgs -982a00c19684480239a8d14ca04bd9e5 sim/testsuite/sim/arm/strh.cgs -d3676059d440e43421abe9377b45644e sim/testsuite/sim/arm/bl.cgs -bef5c11ab14ef76a4adf86bdb29f3fa7 sim/testsuite/sim/arm/ldrsb.cgs -5477dc224f249d5d847bb14b5809df81 sim/testsuite/sim/arm/adc.cgs -514c9855ea49dbd189076992160d290a sim/testsuite/sim/arm/cmp.cgs -5f5776bf35261a0924e7314d31bbec74 sim/testsuite/sim/arm/msr.cgs -24953ef6d2f93fbc574722cfeb6f0508 sim/testsuite/sim/arm/sbc.cgs -424eae0aeb212b99a0423296d92432f9 sim/testsuite/sim/arm/smlal.cgs -1be7d9195c233759510ea7aea222287f sim/testsuite/sim/arm/sub.cgs -7853156003daa0909a44ee8c2b159869 sim/testsuite/sim/arm/swi.cgs -e7ed4d8b65d61b3addaa13b237d5d630 sim/testsuite/sim/arm/hello.ms -0b54dec83ea8c2148335d0c9411f827a sim/testsuite/sim/arm/rsb.cgs -f38f5ed68bbf76a6bb802723f8e111ac sim/testsuite/sim/arm/swpb.cgs -0a98c2c1558ae770328e84c180ac3616 sim/testsuite/sim/arm/xscale/mra.cgs -f0a99de3c5c47c3aa91c95c25879b41f sim/testsuite/sim/arm/xscale/testutils.inc -f2c30ed356d350356f1edcb1484c6f57 sim/testsuite/sim/arm/xscale/blx.cgs -64304cffe7caf82616cedaf41498ac45 sim/testsuite/sim/arm/xscale/mia.cgs -ff267c0f1ed5b05d883ec3584f8bb6f9 sim/testsuite/sim/arm/xscale/miaxy.cgs -03c925a228ba4258f15e01eef3fceb5b sim/testsuite/sim/arm/xscale/miaph.cgs -759d4e841201adbf8fe4d48c792139a1 sim/testsuite/sim/arm/xscale/xscale.exp -bb3da4ab25011ccabcc1c8437f907d7d sim/testsuite/sim/arm/strb.cgs -88c71104de87e83e76badb90eee05b15 sim/testsuite/sim/arm/iwmmxt/waligni.cgs -fd328a7cecef16b062706133bd86a185 sim/testsuite/sim/arm/iwmmxt/textrm.cgs -f0f803cfe86027c9376da8bd15d603dc sim/testsuite/sim/arm/iwmmxt/wmac.cgs -3d4113ef895254186382634bb9654300 sim/testsuite/sim/arm/iwmmxt/wmax.cgs -b759e1c2be6dc0fb3b9656e41302b73c sim/testsuite/sim/arm/iwmmxt/wsub.cgs -7f8a6603491a9bdea9261b3aefecd67a sim/testsuite/sim/arm/iwmmxt/wzero.cgs -da03e694abbabd2571357cc9ed058c70 sim/testsuite/sim/arm/iwmmxt/wror.cgs -949b94f7e376c46012141e8332dd28c0 sim/testsuite/sim/arm/iwmmxt/iwmmxt.exp -d4cf1dd1687b956976c326aa10e0da93 sim/testsuite/sim/arm/iwmmxt/wunpckil.cgs -372409901bb2e34b4370c142151e635c sim/testsuite/sim/arm/iwmmxt/wsrl.cgs -648dcf66cfd2ce5849d2cbb42c74e3ef sim/testsuite/sim/arm/iwmmxt/wsra.cgs -f0a99de3c5c47c3aa91c95c25879b41f sim/testsuite/sim/arm/iwmmxt/testutils.inc -b468e9e418a1e1a91063cde9f01a5b65 sim/testsuite/sim/arm/iwmmxt/wavg2.cgs -6f34dbce9217355b0034e980065123b2 sim/testsuite/sim/arm/iwmmxt/wand.cgs -7f91c1c6ee07a5fa069f79687e6d3b18 sim/testsuite/sim/arm/iwmmxt/tmiaxy.cgs -cb91cfc8d87632674bb08655b37257af sim/testsuite/sim/arm/iwmmxt/tbcst.cgs -aade4be67b5af16a82727edd01ff01a5 sim/testsuite/sim/arm/iwmmxt/wadd.cgs -b87db8b330bbfc39e8cc5c193bfd6752 sim/testsuite/sim/arm/iwmmxt/tmiaph.cgs -966e30e2028caa8495f566e530a4e4d2 sim/testsuite/sim/arm/iwmmxt/wunpckeh.cgs -538bf57041e5e509121767d9ead1147e sim/testsuite/sim/arm/iwmmxt/wshufh.cgs -1eeac0b2b5efecd25602ca32932a301e sim/testsuite/sim/arm/iwmmxt/wandn.cgs -154a974a65e03d5b99e084a97aae5048 sim/testsuite/sim/arm/iwmmxt/wmin.cgs -37722d747ac7f2623a99bd2d5d04c319 sim/testsuite/sim/arm/iwmmxt/wxor.cgs -2ece72d7f9fed70851599aeafeb8fd75 sim/testsuite/sim/arm/iwmmxt/wunpckih.cgs -bf292aeb577d786f1a5d93be72786c39 sim/testsuite/sim/arm/iwmmxt/wmadd.cgs -ade7f421e7229ac22b99232d633506d8 sim/testsuite/sim/arm/iwmmxt/wcmpgt.cgs -7cbe9df76667e549020ee9154febcb84 sim/testsuite/sim/arm/iwmmxt/wpack.cgs -23189fcb39a2352d1f2aebd9fa472b86 sim/testsuite/sim/arm/iwmmxt/wcmpeq.cgs -182edb4dbe3c5f16e8bbc90c344f5958 sim/testsuite/sim/arm/iwmmxt/wsll.cgs -e40211a7420484d7931c301a38d87629 sim/testsuite/sim/arm/iwmmxt/walignr.cgs -27a5dff0fce99446ea9b92149fd87aad sim/testsuite/sim/arm/iwmmxt/tmia.cgs -7a8797138da5f79dd25a529ca6aafda9 sim/testsuite/sim/arm/iwmmxt/wacc.cgs -e3314ba0fb5456272846893666ca6076 sim/testsuite/sim/arm/iwmmxt/tmovmsk.cgs -676c13c4e65bd1da95adcdacc048ee0d sim/testsuite/sim/arm/iwmmxt/tinsr.cgs -81f8cb5a71451f972f4e040b980f6606 sim/testsuite/sim/arm/iwmmxt/wsad.cgs -7155fabca12e398a7ae30604e6010df6 sim/testsuite/sim/arm/iwmmxt/wmul.cgs -7f2e2adae5b6face7645ef4d178af158 sim/testsuite/sim/arm/iwmmxt/wmov.cgs -33dad8b13e3c06ffd72fefbae3ae328c sim/testsuite/sim/arm/iwmmxt/wunpckel.cgs -d3866e29becc0eb004bf50d7adcf21bc sim/testsuite/sim/arm/iwmmxt/wor.cgs -248009f835f984c6659530b0d8ac3d6b sim/testsuite/sim/arm/misaligned1.ms -2f52c300639b0dccd15ed3b15bf2949b sim/testsuite/sim/arm/teq.cgs -510262d467a1cf529e9ebf863f5510bc sim/testsuite/sim/arm/str.cgs -e094567de77b483869bfaa906a58c5f0 sim/testsuite/sim/arm/misaligned2.ms -e36fa83cfe6f8c23c2c4a874d15d6bb5 sim/testsuite/sim/arm/orr.cgs -7b279b86516c39f3610fd701192e55da sim/testsuite/sim/arm/ldm.cgs -7caaf16bdd001c1cfdc6d204be0595d5 sim/testsuite/sim/arm/stm.cgs -7c8eb7b1180e26892ff171384548e3df sim/testsuite/sim/arm/mla.cgs -8e130c393453b06b0c4f168915320147 sim/testsuite/sim/arm/bic.cgs -2f129d54e1238525995fbb61345511b6 sim/testsuite/sim/arm/ldrb.cgs -cae028721a4860ba721bb0b6a45e28de sim/testsuite/sim/arm/mov.cgs -c8756b053a5d9e80829d352796598ea4 sim/testsuite/sim/mn10300/ChangeLog -cf7469367f928b2dc14f41c16aa834d2 sim/testsuite/sim/mn10300/allinsn.exp -455a7533e57981681d9784af176de3f6 sim/testsuite/sim/mn10300/testutils.inc -f1008efdebb1fcc26849a07a2bd82016 sim/testsuite/sim/mn10300/pass.s -466993d26fd6df575577debb2f9b2986 sim/testsuite/sim/pru/ChangeLog -94afa896974da5fce02a0fadacb299e4 sim/testsuite/sim/pru/add.s -2e976b869e5a8d22f19e3016a7a13fec sim/testsuite/sim/pru/allinsn.exp -882caaa7e549cbb159c0d561b81f716f sim/testsuite/sim/pru/dmem-zero-trap.s -64de22a6ea38b2234935fb9bd6a2bf85 sim/testsuite/sim/pru/testutils.inc -3712e1bce090a1cd919d3ca14b994b5a sim/testsuite/sim/pru/mul.s -708d8a8c501d0e92839225b1986402c7 sim/testsuite/sim/pru/dmem-zero-pass.s -118560a4f875602914ced5b23d549362 sim/testsuite/sim/pru/subreg.s -86b16aef9e2ab1bb742ad4b6df8776f1 sim/testsuite/sim/pru/loop-reg.s -8a4f0e9f51a10db380e1b6d188975084 sim/testsuite/sim/pru/dram.s -71783657dfb6253e102429ee333df5a1 sim/testsuite/sim/pru/jmp.s -2dc722a4a735e4141e50a0f6f2d7902c sim/testsuite/sim/pru/loop-imm.s -decca393fdfc52cc877634004f343e3a sim/testsuite/sim/sh64/ChangeLog -278918f6f143cad554024e0210cc1bcb sim/testsuite/sim/sh64/media/mabsl.cgs -a010a7dc4864a1d3d16bd18de1cad548 sim/testsuite/sim/sh64/media/stloq.cgs -29a19726c0af365c1c808e54477cdb95 sim/testsuite/sim/sh64/media/fdivs.cgs -b2bdbbe496e858ffc42260510e2dc993 sim/testsuite/sim/sh64/media/getcfg.cgs -ee7b2737ae885b341a7efaf393fc4d79 sim/testsuite/sim/sh64/media/fcmpuns.cgs -f01c762582353e21851eb14c043b3c31 sim/testsuite/sim/sh64/media/floatqd.cgs -31ec08556e5b415245abbadcfabee29e sim/testsuite/sim/sh64/media/icbi.cgs -5d24af2add6ccdc400d0ca6c052ef72e sim/testsuite/sim/sh64/media/fmovd.cgs -6f75489c9cc1d58e403d5af0b1585546 sim/testsuite/sim/sh64/media/fcmpeqs.cgs -a94ff86eb306dfb576126b8b3c0f223c sim/testsuite/sim/sh64/media/fcmpged.cgs -448e41e7a622846e9addd4d68e6dee7b sim/testsuite/sim/sh64/media/ldloq.cgs -1d0b03597f3929efda09843cf25a1921 sim/testsuite/sim/sh64/media/mshardw.cgs -c2b9bf3da80b4223ff83c8c4b2ebca91 sim/testsuite/sim/sh64/media/mabsw.cgs -ce0f10a7cb56824949015bf881061997 sim/testsuite/sim/sh64/media/and.cgs -6a647e424464d48a834d1ef9c048299b sim/testsuite/sim/sh64/media/ChangeLog -9f29c4e3990574afbd44cf2d011e147d sim/testsuite/sim/sh64/media/ftrcsl.cgs -3b5b24ec8e109174b008f3908a2c3607 sim/testsuite/sim/sh64/media/fmovsl.cgs -b55bb3005484f5d786afbad9d233811d sim/testsuite/sim/sh64/media/mshardl.cgs -deead7f9a94cdaa5efca9f477936761a sim/testsuite/sim/sh64/media/maddw.cgs -2d7c997ff0d4c0062704b5553a0eaa6c sim/testsuite/sim/sh64/media/shari.cgs -77b4b0f77af5b81bf2bad3907598356e sim/testsuite/sim/sh64/media/stw.cgs -1ec9b9915f998b1b5527affbb7b1165f sim/testsuite/sim/sh64/media/ldhiq.cgs -e7ca7125935973bb37ffc2a9c6152024 sim/testsuite/sim/sh64/media/fmovqd.cgs -2c0b29bcb551599cf28f6b48000072ae sim/testsuite/sim/sh64/media/add.cgs -0ee1f1d000b8d348aebc3cd0deca0686 sim/testsuite/sim/sh64/media/prefi.cgs -43da021fc1670aff713af73672325c22 sim/testsuite/sim/sh64/media/ldhil.cgs -ba1d30bad41e82950e1ec4da5068a80e sim/testsuite/sim/sh64/media/rte.cgs -e56cbd032ad31c5a525ee3045994d047 sim/testsuite/sim/sh64/media/alloco.cgs -9f1276774332e1c55f90fa3566180d4e sim/testsuite/sim/sh64/media/fmovls.cgs -8223facc3f2040620addb77d76f86d55 sim/testsuite/sim/sh64/media/lduw.cgs -561b1a31d5e4d4e4e0f6a176555fd4df sim/testsuite/sim/sh64/media/ftrcdl.cgs -707d21183c4b9916a479978b34b839d6 sim/testsuite/sim/sh64/media/fsts.cgs -e4a1d1c976a76f6c44da4be44a1a1641 sim/testsuite/sim/sh64/media/fdivd.cgs -8eaa1c1a294f08a0f0cc11704dc6a6c9 sim/testsuite/sim/sh64/media/shlrd.cgs -bb522dd2216512dac666e8a54d932a50 sim/testsuite/sim/sh64/media/sharil.cgs -c4e169c36ce16958d300c0361693e173 sim/testsuite/sim/sh64/media/bge.cgs -3b94178fb469c2f76fcb5943c7be6e35 sim/testsuite/sim/sh64/media/shori.cgs -3e6f232a2c931cb40855a33538905c21 sim/testsuite/sim/sh64/media/fstp.cgs -2bfa24643c3c0250dbde10b3770b7118 sim/testsuite/sim/sh64/media/fstd.cgs -591776a8c46e7ca2b29f29c335b32133 sim/testsuite/sim/sh64/media/fnegs.cgs -482de020e815e2991e183a8e12caa476 sim/testsuite/sim/sh64/media/ocbi.cgs -b0332c26af82f6508597ec86b7043290 sim/testsuite/sim/sh64/media/shlld.cgs -8b62b811fb18205ad65b8ee8b48f952d sim/testsuite/sim/sh64/media/fcnvsd.cgs -c558d2c812f1c91198f6d6068eea2725 sim/testsuite/sim/sh64/media/addi.cgs -ad28f968a1d98c2efb00d8fd9b4bc680 sim/testsuite/sim/sh64/media/testutils.inc -14efb3c2d768492a71c1b73ab45b4b6d sim/testsuite/sim/sh64/media/ldw.cgs -340ee385a6e0296dac7fcfb26d67a1f8 sim/testsuite/sim/sh64/media/stl.cgs -4a6666bfe33a68a30aa8b487c325063f sim/testsuite/sim/sh64/media/fcnvds.cgs -d9d562eac1c48a96eabfeb3312a9be90 sim/testsuite/sim/sh64/media/addil.cgs -3a931dfcf601cfdcc15e178ecc1266df sim/testsuite/sim/sh64/media/mshlrdl.cgs -810a402ce7c0fc8c479ed93abe3f7cc4 sim/testsuite/sim/sh64/media/msubsw.cgs -a67e8dfae6fe1dbbc27e3ff8408aa429 sim/testsuite/sim/sh64/media/msubl.cgs -4435d87997b90b8430843386079f71a7 sim/testsuite/sim/sh64/media/mshlldl.cgs -ef21755ea68237459f25c4316a3a4d16 sim/testsuite/sim/sh64/media/swapq.cgs -88a17b7a509b166a9245dadb200c3318 sim/testsuite/sim/sh64/media/synco.cgs -78774529723f51dfef3452f15cacb32a sim/testsuite/sim/sh64/media/mshaldsw.cgs -1f02888e70c1cd3e489b0353dda7a199 sim/testsuite/sim/sh64/media/mcmpeql.cgs -2d56e3709203765268b33b31906e803f sim/testsuite/sim/sh64/media/floatls.cgs -449078d68b16532a731bd08e9e996205 sim/testsuite/sim/sh64/media/putcon.cgs -643c1e48c75384c5ab4b3f4e291e82e8 sim/testsuite/sim/sh64/media/blink.cgs -07ab156f6646ae2dba70f1c3dafa0bfe sim/testsuite/sim/sh64/media/mmulfxl.cgs -86ec4698affdaef7978529e10ec47617 sim/testsuite/sim/sh64/media/maddsl.cgs -7117be89bbc1032da057d26206ce199b sim/testsuite/sim/sh64/media/fcmpgtd.cgs -46c7c9f0d50e3c8c05193849f0f15ee1 sim/testsuite/sim/sh64/media/mcnvslw.cgs -7b5796c6e56c76eedf4d548bb9379f02 sim/testsuite/sim/sh64/media/mshflob.cgs -23464a5f4245f44835e719135142e31e sim/testsuite/sim/sh64/media/floatld.cgs -0f29f0219eabcc98ab8c3d4eb9050824 sim/testsuite/sim/sh64/media/ori.cgs -b3c90f618cbdfb2c768d43a47849a3f1 sim/testsuite/sim/sh64/media/mshfhil.cgs -e75c17ddd7eead085e92062b91f900d3 sim/testsuite/sim/sh64/media/mmulw.cgs -5ca6131f741869214aa684d39676d3f0 sim/testsuite/sim/sh64/media/maddsub.cgs -9a5ee455cb4fe7cd30c6e6a13940334a sim/testsuite/sim/sh64/media/mshaldsl.cgs -807adf144f3a47e85a751a3fbdf81a4d sim/testsuite/sim/sh64/media/bnei.cgs -7affc0c1042b3480f375846d1088c308 sim/testsuite/sim/sh64/media/fcmpgts.cgs -75952ee791e76e8cda1902983af57c15 sim/testsuite/sim/sh64/media/mmullowl.cgs -f3f39418b846d6c792e447b0f8102c4b sim/testsuite/sim/sh64/media/mcmpgtl.cgs -e5ca6ed82dcec1c3b3b7dec680899688 sim/testsuite/sim/sh64/media/ldxb.cgs -9046090d0a1e4603256bcce96b4cb48f sim/testsuite/sim/sh64/media/mextr3.cgs -a8aeb11eef57d970015fcb23cdc873c9 sim/testsuite/sim/sh64/media/fcmpund.cgs -77310578036150b882882fb79cbc7dda sim/testsuite/sim/sh64/media/fldxp.cgs -f9d1afdf821e290491aff9e12a393afe sim/testsuite/sim/sh64/media/mmulfxrpw.cgs -195734136941d8fb6caf1205014b0897 sim/testsuite/sim/sh64/media/fldp.cgs -ea2ef003c1205b0eaf9616c6fd309583 sim/testsuite/sim/sh64/media/ldxq.cgs -57087427364f7d03b1966470f81ae64c sim/testsuite/sim/sh64/media/stlol.cgs -74ed9f945ee0bcee562f5615646df4d9 sim/testsuite/sim/sh64/media/mshlrdw.cgs -3f15d00cd31419a7ad8c1e08b9f7f5ea sim/testsuite/sim/sh64/media/mshlldw.cgs -1b202c7029eea6ae864dfe5a3526b70f sim/testsuite/sim/sh64/media/floatqs.cgs -43a72115a4c49186f8b57a24c747ada9 sim/testsuite/sim/sh64/media/mcmpgtw.cgs -32ef81f8563b99aa0f92d9b6bce16e51 sim/testsuite/sim/sh64/media/mshfhiw.cgs -f26ca0c3df6a34480e27e9d7f45b5cb4 sim/testsuite/sim/sh64/media/nsb.cgs -2bbc457c0f5aefe554ccba990057dba7 sim/testsuite/sim/sh64/media/bgeu.cgs -00d6a437f0b11e7790cc6597fae337bf sim/testsuite/sim/sh64/media/andc.cgs -facfd3bbc0f3ffa3aa6d48ea038660c6 sim/testsuite/sim/sh64/media/mextr7.cgs -2a329964d8e276bc4a1e463638078929 sim/testsuite/sim/sh64/media/shlldl.cgs -46780ec90276865e100a33aee7da7b91 sim/testsuite/sim/sh64/media/shllil.cgs -3f13e9adb83f9e617c3ae06db46dcf51 sim/testsuite/sim/sh64/media/mcmpeqw.cgs -9ae3b61a99198960f4baf5d7f79eff88 sim/testsuite/sim/sh64/media/fmuls.cgs -6e7e8abec6fdf76c85011c31cec690a7 sim/testsuite/sim/sh64/media/cmpgtu.cgs -30c62b03976f8ab78b8fac6daf4c2fdc sim/testsuite/sim/sh64/media/xor.cgs -a54372d652695a1a6bd199405298e096 sim/testsuite/sim/sh64/media/mulsl.cgs -3efa232854d2fbb0982ebb618ef82f0b sim/testsuite/sim/sh64/media/fstxs.cgs -18cb207fe0e147495b61871bf8a7d6aa sim/testsuite/sim/sh64/media/mmull.cgs -f930d359669ba95252537dc37fceb444 sim/testsuite/sim/sh64/media/fstxp.cgs -b67275a90edc901353d572658789a302 sim/testsuite/sim/sh64/media/fldxd.cgs -c2d384a77172e147e10faa7f98596989 sim/testsuite/sim/sh64/media/mshflol.cgs -f08ebb545f8b741f8182f40123abb0a8 sim/testsuite/sim/sh64/media/stxw.cgs -e0311adbd968c1a70fbb040b187d84f2 sim/testsuite/sim/sh64/media/stq.cgs -fc7b9962b7a23eb5ee130ec9e5b48ffc sim/testsuite/sim/sh64/media/mshardsq.cgs -a87d593dbc890eec83f06331f8d76c8a sim/testsuite/sim/sh64/media/addl.cgs -15b0cc0d16a86186e5b427915152b48e sim/testsuite/sim/sh64/media/trapa.cgs -2a5f3da39bcd6bfafb792116fc4ff2b1 sim/testsuite/sim/sh64/media/fcmpeqd.cgs -c58ca1dc2b7e7397f3f91d84a9c92283 sim/testsuite/sim/sh64/media/msadubq.cgs -bc4ef44f68a9bfaa0027d5a03d5fe2e0 sim/testsuite/sim/sh64/media/msubsl.cgs -c8f57ef77ae3417d83d696eb539b0e46 sim/testsuite/sim/sh64/media/fabss.cgs -4dac27f822f1416c682a23804e448ca4 sim/testsuite/sim/sh64/media/fmacs.cgs -3ed34a15eb4567f07e0d7998bfe6ec44 sim/testsuite/sim/sh64/media/maddsw.cgs -cc6dd7c9f7ffbcc8459556677381b6af sim/testsuite/sim/sh64/media/mextr5.cgs -f497d819ffd67cdb06d419d8c5532b61 sim/testsuite/sim/sh64/media/cmpgt.cgs -ce29ea2284e05c7ce8ec675ef12e6685 sim/testsuite/sim/sh64/media/beqi.cgs -345f5eb194aa5c826b88db7a1de4a0ce sim/testsuite/sim/sh64/media/fldd.cgs -99ea415b174e6031eac2f0ab762b9a33 sim/testsuite/sim/sh64/media/bgtu.cgs -fb4facb88f4269ce1a69e52f4a331022 sim/testsuite/sim/sh64/media/ptabs.cgs -f655bef64291e78aab1635993ffd3079 sim/testsuite/sim/sh64/media/fmuld.cgs -f9c22dc6393acac0d0e20eb95685035b sim/testsuite/sim/sh64/media/fnegd.cgs -602ba68059df6645c442484e37707ccb sim/testsuite/sim/sh64/media/sub.cgs -a4c69037e69000c2bfea4927c16a7730 sim/testsuite/sim/sh64/media/shardl.cgs -9bbc7190782eedf13e1e86c251c73679 sim/testsuite/sim/sh64/media/xori.cgs -37d51372abfbec0fa574f1b6cdc846b0 sim/testsuite/sim/sh64/media/bgt.cgs -bfb8f066c4e3a9fa294d95b1ff5e78b1 sim/testsuite/sim/sh64/media/fsqrtd.cgs -e920fecc1d427f295341a44f501ae32e sim/testsuite/sim/sh64/media/msubsub.cgs -3f17073ba8c0fff8779af811a37c52f9 sim/testsuite/sim/sh64/media/ldxl.cgs -d4bbc2e9533fe235007b502910bbfa3f sim/testsuite/sim/sh64/media/byterev.cgs -50c4325ed80bd0ac6d352c3452716257 sim/testsuite/sim/sh64/media/fgetscr.cgs -ab4d95bbe89732a06b5629d36153ff5c sim/testsuite/sim/sh64/media/mcnvswb.cgs -728ae0c771c2eb97bf7e1ecdb6c77ad8 sim/testsuite/sim/sh64/media/mulul.cgs -4921484170b87924852f0d16d2759c7e sim/testsuite/sim/sh64/media/shlril.cgs -9b68cc2fd9580f39a3658becb2e21782 sim/testsuite/sim/sh64/media/shlri.cgs -8d80fa1d953ab1e454a27359d807595d sim/testsuite/sim/sh64/media/ftrcsq.cgs -0c99b37c2d5eb483c839970bc7ad5700 sim/testsuite/sim/sh64/media/ldb.cgs -8fe5277c40cde0884fb2e6eac0566167 sim/testsuite/sim/sh64/media/ldxw.cgs -a900893a600e8c7b36249f092bd3af97 sim/testsuite/sim/sh64/media/shlli.cgs -0a582efef90b421fe20d1bfdb783f8c7 sim/testsuite/sim/sh64/media/beq.cgs -d681d96dee07b47d57f5ad2bf069957a sim/testsuite/sim/sh64/media/gettr.cgs -98b6d40ed29f302fc82899263174356d sim/testsuite/sim/sh64/media/flds.cgs -2689c29380eaa34c757659ba53238d99 sim/testsuite/sim/sh64/media/ldub.cgs -8a8867591c6f0aa6e52a581f3dc7590e sim/testsuite/sim/sh64/media/fsubd.cgs -3a032628732b41bf067fc8e55428a58f sim/testsuite/sim/sh64/media/cmpeq.cgs -6abc9a1bb9042f67a6ee425481074a31 sim/testsuite/sim/sh64/media/cmveq.cgs -76ce8603b52a63abe0fb9369079ad534 sim/testsuite/sim/sh64/media/addzl.cgs -238e6fb75904bbf9348ee2e178d02018 sim/testsuite/sim/sh64/media/mcnvswub.cgs -3e7645d763248e43608d4c24d001c9de sim/testsuite/sim/sh64/media/fsubs.cgs -3c138bfeb6f5c6f2192ef864881a8efe sim/testsuite/sim/sh64/media/stxb.cgs -24ac3e05cd975a2c74e937d973dfec18 sim/testsuite/sim/sh64/media/mmulhiwl.cgs -47dc7daa584ec04b01ff797dcad4e32a sim/testsuite/sim/sh64/media/fldxs.cgs -acad0b474344fe9bb10aed735b08462a sim/testsuite/sim/sh64/media/shard.cgs -b31ffed1b6c63faace71bae9f2946574 sim/testsuite/sim/sh64/media/shlrdl.cgs -fd0765d429901be2d95147ad6de4d3f4 sim/testsuite/sim/sh64/media/stxq.cgs -5a2c9d43d6603f1d1a15f279726aeabc sim/testsuite/sim/sh64/media/mcmv.cgs -279f2287e09d42fcf95bb6c7c1954668 sim/testsuite/sim/sh64/media/mmulfxw.cgs -35153e02665b95e1a018851d7e198045 sim/testsuite/sim/sh64/media/putcfg.cgs -96720e079b2b534d21eb7f17806d9861 sim/testsuite/sim/sh64/media/mextr4.cgs -060fe31b0b91c1e980dffb585566d27e sim/testsuite/sim/sh64/media/faddd.cgs -a887a2e5c5042c1cbf4ede41a2ad2aa2 sim/testsuite/sim/sh64/media/ldlol.cgs -1b1156080c657abb802fa1d024d698d3 sim/testsuite/sim/sh64/media/mpermw.cgs -2125ef6a28e6c0f847f0f24dbda15562 sim/testsuite/sim/sh64/media/fstxd.cgs -375ad3205c51531607c0be84338a8293 sim/testsuite/sim/sh64/media/fmovdq.cgs -2256ec480546564403fd17e1f7feaf13 sim/testsuite/sim/sh64/media/fabsd.cgs -52fcbfeca5b4d265b2970475cb256d00 sim/testsuite/sim/sh64/media/ftrcdq.cgs -0fff48c19adde0f7cc4bc15a70a8060b sim/testsuite/sim/sh64/media/mcmpgtub.cgs -7a68dce6ffd80eaee6d187d5d580d8ed sim/testsuite/sim/sh64/media/fsqrts.cgs -0d2871b1ddc8be351bde323f7de57d24 sim/testsuite/sim/sh64/media/mextr6.cgs -4e767dee4b103e6b05d871dc1131598b sim/testsuite/sim/sh64/media/synci.cgs -d25a0a7d3f6e6b2b59f5be8b583cec10 sim/testsuite/sim/sh64/media/msubw.cgs -b4187964e5978a86eb1382b481447028 sim/testsuite/sim/sh64/media/maddl.cgs -ab92faebe155f396230755fbbcc7e336 sim/testsuite/sim/sh64/media/mmulsumwq.cgs -879792361ec250133544683585ebc541 sim/testsuite/sim/sh64/media/mextr2.cgs -72202c9df10988ee0ab14e200469e5de sim/testsuite/sim/sh64/media/pta.cgs -318c032459429b25629474531630cee8 sim/testsuite/sim/sh64/media/ldxuw.cgs -8d100290db53ee7eefeaebd1c7b7dd62 sim/testsuite/sim/sh64/media/sthiq.cgs -9739bce3941d9fb8347f1c0c90ae5228 sim/testsuite/sim/sh64/media/ocbwb.cgs -fe5424e3a2ca59f5ad6df0c201b21a4d sim/testsuite/sim/sh64/media/ldxub.cgs -e19406336e30c7c1553789123c77be83 sim/testsuite/sim/sh64/media/mshfhib.cgs -6950be0c56405f87f1baa0cea84bb971 sim/testsuite/sim/sh64/media/stb.cgs -457e3b142accbbc0a3b034e36c8f64e8 sim/testsuite/sim/sh64/media/mmacfxwl.cgs -c5bb9661c37857bd3f7cdfb9179e9fb8 sim/testsuite/sim/sh64/media/cmvne.cgs -136dec63d822deaaa78a52ebdab53d7f sim/testsuite/sim/sh64/media/sthil.cgs -6de85c4710700f4ac394cd6d5dab41ff sim/testsuite/sim/sh64/media/getcon.cgs -baba1b97037672cf15d5541ddb5708fd sim/testsuite/sim/sh64/media/ftrvs.cgs -0f495f99619adbcf8313fdc7ce9380ae sim/testsuite/sim/sh64/media/ocbp.cgs -859954c33155265599f610ff0ec6422e sim/testsuite/sim/sh64/media/fiprs.cgs -dd423bee72982fb8c4827535ac0ab3b3 sim/testsuite/sim/sh64/media/mcmpeqb.cgs -92ae194f7d1cd53869b9afb9028cb10d sim/testsuite/sim/sh64/media/brk.cgs -0ecaa2df7dbd6ac20bbbff648091c1c6 sim/testsuite/sim/sh64/media/ptb.cgs -576279c2b9b6bacac9c42b1b62ff5ff1 sim/testsuite/sim/sh64/media/mmacnfx-wl.cgs -2c84a234f6763a20fe6a6d937974217f sim/testsuite/sim/sh64/media/or.cgs -a21ff91fdfbca28f8b47ffaa5142b0e5 sim/testsuite/sim/sh64/media/sleep.cgs -eafa3e6055c2543e8f65baedc5f32801 sim/testsuite/sim/sh64/media/bne.cgs -ff9be75f4b2823203b287462284b9d23 sim/testsuite/sim/sh64/media/ldl.cgs -e2c9ca9508255faa5208d3cf788fb80d sim/testsuite/sim/sh64/media/mshflow.cgs -66ba4dba51dbcfd5e8ce7d52167b2d5e sim/testsuite/sim/sh64/media/fcmpges.cgs -5f32595b1e5308db437c208779156652 sim/testsuite/sim/sh64/media/subl.cgs -1bdc45e1c74cf1262943cb1902a69f5e sim/testsuite/sim/sh64/media/fmovs.cgs -6a9d2a6855f7661bc838501f1bae5ece sim/testsuite/sim/sh64/media/mextr1.cgs -0a9f54bea7db5d7a96c8479741aae579 sim/testsuite/sim/sh64/media/ldq.cgs -4bb19ac27e630b3ce15dbda8c9757706 sim/testsuite/sim/sh64/media/movi.cgs -7cb6bfcf9b1c8c998133ae9576b408aa sim/testsuite/sim/sh64/media/stxl.cgs -778e7888e0d816fca810990d862c3079 sim/testsuite/sim/sh64/media/andi.cgs -d3dea74ed66e7d66666846d8662d7894 sim/testsuite/sim/sh64/media/fadds.cgs -91bc8cd1e2117278e49fb4369e00a372 sim/testsuite/sim/sh64/media/fputscr.cgs -b726b030a39b5e8d03179506ea8bbed3 sim/testsuite/sim/sh64/media/ptrel.cgs -ea0a6f5053f4682afc6015dcb356b316 sim/testsuite/sim/sh64/media/nop.cgs -afcc64d9020f7a6621b16c166d1822d1 sim/testsuite/sim/sh64/interwork.exp -6bd6f41965a7a151081da4fbde7ad141 sim/testsuite/sim/sh64/compact.exp -c08a7766568f6ff991184037e7b74b3b sim/testsuite/sim/sh64/media.exp -66f3cbc997f2e5c7d7fdddec7391416a sim/testsuite/sim/sh64/misc/fr-dr.s -1da8d79ce7382470915e3d896cf8bb53 sim/testsuite/sim/sh64/compact/lds-fpul.cgs -719b877620e0e6689befdfa41fdbbaa3 sim/testsuite/sim/sh64/compact/sett.cgs -5b1abceab332756d9e7ad22a1e837553 sim/testsuite/sim/sh64/compact/stsl-macl.cgs -db52acf9cd33a8ea5ab7084c31b7a89e sim/testsuite/sim/sh64/compact/rotcr.cgs -9a06f5824ff0496eb4cc281f036d6bf4 sim/testsuite/sim/sh64/compact/shll.cgs -873125ad7311a241f63dc14e6174fd73 sim/testsuite/sim/sh64/compact/movt.cgs -5bff71e04db76173db94a6f710321a3e sim/testsuite/sim/sh64/compact/fmov.cgs -a83b93d213c6ae2251fd3edbcf5b848d sim/testsuite/sim/sh64/compact/div0u.cgs -911a98f008d4dcf1069a3024fce10c86 sim/testsuite/sim/sh64/compact/extub.cgs -0da63009df7cc8ad207a3c904ea3c2fc sim/testsuite/sim/sh64/compact/and.cgs -eaee678fb2a62c462d0ca02f3fec06f0 sim/testsuite/sim/sh64/compact/ChangeLog -ccfa2823c1f548e855ef34f0610c279b sim/testsuite/sim/sh64/compact/pref.cgs -e34dc396e58178682992a585b2ed6b60 sim/testsuite/sim/sh64/compact/fipr.cgs -63d652f8bd1167eebf0a01433061bda0 sim/testsuite/sim/sh64/compact/movb7.cgs -05a733d0240751b80661cfbf8613fe41 sim/testsuite/sim/sh64/compact/lds-macl.cgs -9d7e70aee614865172de0ca2019e009d sim/testsuite/sim/sh64/compact/fadd.cgs -74ca11e119e6ff999a91c28f9dbd9d1a sim/testsuite/sim/sh64/compact/movl4.cgs -ca5039c0a9d247a7ad8a7838814c5a51 sim/testsuite/sim/sh64/compact/add.cgs -d4663e721d8f95bf5d516d8f2bef0e33 sim/testsuite/sim/sh64/compact/cmppz.cgs -690b915e479fd620957e41cc04da0f4f sim/testsuite/sim/sh64/compact/shlr2.cgs -0625b2ce3e218d065741c215122dddf3 sim/testsuite/sim/sh64/compact/cmpstr.cgs -15c13b8d1f8f07f3d8e220b6842cddc3 sim/testsuite/sim/sh64/compact/movw8.cgs -6dab94bfaf722b431ad195a2a4293b3d sim/testsuite/sim/sh64/compact/jsr.cgs -010401013cd6bfc3678a1a3543d3e160 sim/testsuite/sim/sh64/compact/fsts.cgs -41e9f6ee3d74b2de2deae8166453693a sim/testsuite/sim/sh64/compact/ldsl-macl.cgs -b18559b12291b7aaf2d2116f2d9388a4 sim/testsuite/sim/sh64/compact/fcmpeq.cgs -fb3d330172050e46fbd98d776f49aad8 sim/testsuite/sim/sh64/compact/tasb.cgs -3960a7b561d89b9c8bfff49df0d5cb13 sim/testsuite/sim/sh64/compact/dmulul.cgs -cfd6dc4032d03f7f59178e637076b518 sim/testsuite/sim/sh64/compact/shad.cgs -13ac597154fa151e3ce2d17689c7dedc sim/testsuite/sim/sh64/compact/rts.cgs -a6043d2be7b79df9b7a06f2291a17048 sim/testsuite/sim/sh64/compact/div0s.cgs -303f83bd4304f1318482a48817287855 sim/testsuite/sim/sh64/compact/fabs.cgs -b392c69b1d097f321a51487716ca2ac6 sim/testsuite/sim/sh64/compact/dt.cgs -ee9aa5e3458c92acbe9ce8ce0a0a2ca2 sim/testsuite/sim/sh64/compact/frchg.cgs -565e1c190cf53eb313700574bb75c194 sim/testsuite/sim/sh64/compact/movb6.cgs -4ec2161356186cb5b58218ea64478d88 sim/testsuite/sim/sh64/compact/movb5.cgs -ffda35e809cf16b541e191c13caced95 sim/testsuite/sim/sh64/compact/stsl-mach.cgs -f6cc357e0e59745b76d58dbcffe87f5f sim/testsuite/sim/sh64/compact/bfs.cgs -c44d851bd936d59d26ef94833a896ae2 sim/testsuite/sim/sh64/compact/movw5.cgs -f41288943b1c077237eee8b1d8595f32 sim/testsuite/sim/sh64/compact/ocbi.cgs -31122c9a09fb41e1767cb1ec56bf3059 sim/testsuite/sim/sh64/compact/sts-fpscr.cgs -ef60dd63fb8069bba5356daa6add3cf7 sim/testsuite/sim/sh64/compact/fcnvsd.cgs -ac72602f6ed2aa1b241f5c8186b7620b sim/testsuite/sim/sh64/compact/addi.cgs -9a9b6aaff790f813fc1d056ad729961f sim/testsuite/sim/sh64/compact/andb.cgs -c56640f728d4b715e573a22fb5832a81 sim/testsuite/sim/sh64/compact/sts-mach.cgs -3a13e917c1c5044e74793695d101cc04 sim/testsuite/sim/sh64/compact/float.cgs -b6ea8a4bfb234524293e2c0f09ed4d98 sim/testsuite/sim/sh64/compact/testutils.inc -28323bad885035fa8e7bb5709fed8541 sim/testsuite/sim/sh64/compact/fcnvds.cgs -a7d1bbe9c0cd6fc3791104baf80a6c22 sim/testsuite/sim/sh64/compact/ldcl-gbr.cgs -5c71a3bb3ec9f16d0775cd9b7cc745a8 sim/testsuite/sim/sh64/compact/shld.cgs -e6dcbfec9f39d518b57c7a06b972cf10 sim/testsuite/sim/sh64/compact/tst.cgs -552613935856f5613d35b5a4c20b3300 sim/testsuite/sim/sh64/compact/muluw.cgs -55b29cbb9b738f78888fd22e3e8ef172 sim/testsuite/sim/sh64/compact/movcal.cgs -1221053b1727f1610e1c810173d2717b sim/testsuite/sim/sh64/compact/shlr16.cgs -5fd993753cd1d2e5ffa0225b24835161 sim/testsuite/sim/sh64/compact/lds-mach.cgs -8c4ca5484616b0c99faaec2b1a829761 sim/testsuite/sim/sh64/compact/cmphs.cgs -bef3697eee05ff945b53aa5953f833b7 sim/testsuite/sim/sh64/compact/shar.cgs -9db8c4c308050e1a094d14f01e40dea2 sim/testsuite/sim/sh64/compact/movb1.cgs -156851655fea4bdfd6c9677bcdfdb8a6 sim/testsuite/sim/sh64/compact/ldc-gbr.cgs -23e954e4ce42ac0831bb431bc6030795 sim/testsuite/sim/sh64/compact/cmphi.cgs -88aabe91f30a2f4b660ac37395ed8129 sim/testsuite/sim/sh64/compact/ori.cgs -3e0158a19a50735d50721a69c9fab7d2 sim/testsuite/sim/sh64/compact/negc.cgs -aa7790e772f6f7f2ac8a483217e5e7f0 sim/testsuite/sim/sh64/compact/shal.cgs -44310b0f1be5895cbbcb6aadf0c8c432 sim/testsuite/sim/sh64/compact/shll8.cgs -779dc242c637f859b44a3f6b41d3b505 sim/testsuite/sim/sh64/compact/rotcl.cgs -a95f07f642bd3ee43a82fe939e19e639 sim/testsuite/sim/sh64/compact/subv.cgs -d1bf11e1d56f7f101f57e498c318d058 sim/testsuite/sim/sh64/compact/movw4.cgs -c560820cf73971bf5ad8d1c5e6d34bc2 sim/testsuite/sim/sh64/compact/movb2.cgs -1bfff6ec47572335250341667cdcfcca sim/testsuite/sim/sh64/compact/braf.cgs -acf3b37669228c554574f0328cbded2e sim/testsuite/sim/sh64/compact/fdiv.cgs -6b8c97ed1cd766ad0ebddb4cababdc9a sim/testsuite/sim/sh64/compact/movw11.cgs -58a4b01f4f30a9b27b10f1b5e006ad74 sim/testsuite/sim/sh64/compact/fldi1.cgs -e26665c1228526221c579dc239760f0a sim/testsuite/sim/sh64/compact/xtrct.cgs -b79bdae0d7c852932a299b669c623c7e sim/testsuite/sim/sh64/compact/tsti.cgs -b412b8b1cba9c4f12b56e8f6d43addcd sim/testsuite/sim/sh64/compact/movw6.cgs -1230586c0d499ad71af2171d5edefc05 sim/testsuite/sim/sh64/compact/cmpeqi.cgs -40549ff3237f5ddffefea6e712cf1aef sim/testsuite/sim/sh64/compact/movb3.cgs -ce7833e00e1dbffdad8551457da869e9 sim/testsuite/sim/sh64/compact/sts-pr.cgs -1aae0513eb31849efab8069b6bb076ab sim/testsuite/sim/sh64/compact/lds-pr.cgs -f6175c66bb0865e362d80b12d35b4e62 sim/testsuite/sim/sh64/compact/movw7.cgs -02ad979dbb014a39cc96c1d468fb826d sim/testsuite/sim/sh64/compact/movw1.cgs -c117ffebe50a4c564bd752511a72f834 sim/testsuite/sim/sh64/compact/xor.cgs -07eab8ef284eb295f7e90a098eb87cb2 sim/testsuite/sim/sh64/compact/clrs.cgs -f0137811e6c67d782d837b61fbbb3bbe sim/testsuite/sim/sh64/compact/sets.cgs -b5dfa5e1a790085a09620c0c212b66b5 sim/testsuite/sim/sh64/compact/rotl.cgs -4e91b28cf642cde4e656ed0b7e771c26 sim/testsuite/sim/sh64/compact/shll16.cgs -d46aad4277c51016c3e2e655ccb04d68 sim/testsuite/sim/sh64/compact/movb4.cgs -91740f6d0a7b17e738a97aaf664236f6 sim/testsuite/sim/sh64/compact/bf.cgs -736d9c94762c50c4ebb3873c5882ee6d sim/testsuite/sim/sh64/compact/addc.cgs -4ec324a6ea217bdf129f4579e7ac1e15 sim/testsuite/sim/sh64/compact/trapa.cgs -da2ade69bdab794ce3205960172b31bc sim/testsuite/sim/sh64/compact/rotr.cgs -ecd016b2d92587918211793c88ab7f69 sim/testsuite/sim/sh64/compact/bsrf.cgs -e2beb2998f3e748874e58926c9bea9b5 sim/testsuite/sim/sh64/compact/ftrv.cgs -744987cc3e82d9f65bd38dba8b94b722 sim/testsuite/sim/sh64/compact/fmul.cgs -683efdfba958a7fa3cf9f8e8fe4a740a sim/testsuite/sim/sh64/compact/tstb.cgs -ec99ac48e2a44d9ceaee0a42ca9bef65 sim/testsuite/sim/sh64/compact/ldsl-fpul.cgs -295e0ca6bc578ef653c993cab6ac10d7 sim/testsuite/sim/sh64/compact/neg.cgs -3755234f585da186aecb8e5d8283dfa6 sim/testsuite/sim/sh64/compact/extsb.cgs -4021dc4dbbb01ff98d3e4fce1ac56845 sim/testsuite/sim/sh64/compact/cmpgt.cgs -3ff4b89901a61490263925c69da00c1f sim/testsuite/sim/sh64/compact/jmp.cgs -ab062a29839df00af15600e6ec555da0 sim/testsuite/sim/sh64/compact/sub.cgs -d31249cc284a3c3d2a65235745684829 sim/testsuite/sim/sh64/compact/mova.cgs -c4960e4d2e53ddd17aab483fceae60aa sim/testsuite/sim/sh64/compact/xori.cgs -4d88a6bb053bdb9f313cc9e44b3989de sim/testsuite/sim/sh64/compact/movl6.cgs -255d1a9a0a5100e86ddd3be3343fb2d7 sim/testsuite/sim/sh64/compact/movl1.cgs -e368063a7aee2ddb299b3ee59140b22d sim/testsuite/sim/sh64/compact/movl11.cgs -e8172666d081fe5605c35aaad372b337 sim/testsuite/sim/sh64/compact/lds-fpscr.cgs -8715239f27b8d1960ebdb943d4e5d1a2 sim/testsuite/sim/sh64/compact/ldsl-pr.cgs -7c97c36a842284184ed5f0a5bcc23b15 sim/testsuite/sim/sh64/compact/bts.cgs -8bd60c5fdbda0679771e24aa4d119a84 sim/testsuite/sim/sh64/compact/fsqrt.cgs -8ef35680e34836bb65e0930876d5c052 sim/testsuite/sim/sh64/compact/swapb.cgs -6a7e70ef4397a49248108112489c5d6d sim/testsuite/sim/sh64/compact/bt.cgs -6ae8403f0db6b164737220728121de32 sim/testsuite/sim/sh64/compact/movw9.cgs -fc724add45239cd526c1d256bc9b11f6 sim/testsuite/sim/sh64/compact/macl.cgs -440e94cae3b5da94abc9b9d0ffdb8536 sim/testsuite/sim/sh64/compact/dmulsl.cgs -d3accf8ea5099b4dffe8c67a34a5d4a0 sim/testsuite/sim/sh64/compact/movl3.cgs -0750fb0a09062e6e3f445b1b5fae47f3 sim/testsuite/sim/sh64/compact/addv.cgs -9d3c5e66f4dbe4445930df3ffe62e665 sim/testsuite/sim/sh64/compact/mull.cgs -dcc246daa7707392dbeda917c433dfbe sim/testsuite/sim/sh64/compact/div1.cgs -7c0f2ee78bc85215e59468673d92a2d1 sim/testsuite/sim/sh64/compact/flds.cgs -9e9399ae453003f6abca6e2e68613278 sim/testsuite/sim/sh64/compact/sts-macl.cgs -e0053a70b797cc4fe77f657744cc4084 sim/testsuite/sim/sh64/compact/cmpeq.cgs -57e6e7addeb114f34244ed0be0408db6 sim/testsuite/sim/sh64/compact/movb8.cgs -7725779b79cbf00fe9b69189081668b8 sim/testsuite/sim/sh64/compact/movw2.cgs -d5a01716385fce773d06295c1f926f2c sim/testsuite/sim/sh64/compact/swapw.cgs -54ef71450122a228ee56f451b232c8f7 sim/testsuite/sim/sh64/compact/movb10.cgs -3074493d5e04d18b722e379d0cf2a9c8 sim/testsuite/sim/sh64/compact/clrmac.cgs -8c5d3b089d8d6e49fbcc8c985e0123a5 sim/testsuite/sim/sh64/compact/movl5.cgs -819df15c8c0c437365a4a55311a1963d sim/testsuite/sim/sh64/compact/ftrc.cgs -c9e47e035d8047dbf66ceb7ec629ef55 sim/testsuite/sim/sh64/compact/ldsl-fpscr.cgs -2195ebca2557fdb8b9250b6f8119f3c5 sim/testsuite/sim/sh64/compact/cmpge.cgs -549a3e3cd3e0bbc0904ebc8c7d05a627 sim/testsuite/sim/sh64/compact/sts-fpul.cgs -51493b43a58400a838ed217c7603c5e1 sim/testsuite/sim/sh64/compact/shll2.cgs -3098a4bf21b00d4c423b39d02909fcb3 sim/testsuite/sim/sh64/compact/stcl-gbr.cgs -681d0be46e9f8b182c6a0cbdd6d552b8 sim/testsuite/sim/sh64/compact/bra.cgs -650a78db8b345ce1d2bbe46c3f6f1a8b sim/testsuite/sim/sh64/compact/cmppl.cgs -e47937604ee7a5201268ec0803501b03 sim/testsuite/sim/sh64/compact/movl9.cgs -603557da5c50e246d6bc1e557a6c82f9 sim/testsuite/sim/sh64/compact/fsub.cgs -f7e5d3069f0a25c67f9dd87dba675de9 sim/testsuite/sim/sh64/compact/movl8.cgs -a0f6650b39bd08de4cd1725fcd49f868 sim/testsuite/sim/sh64/compact/macw.cgs -fd3ea9fd7e5a18185841283340755b0e sim/testsuite/sim/sh64/compact/stsl-pr.cgs -e07fd593d0da1177a76a264a46e0f41c sim/testsuite/sim/sh64/compact/xorb.cgs -f7765b4706fe2583f09df8ca82774ee0 sim/testsuite/sim/sh64/compact/movl2.cgs -2badb7a543131dacc5223bdc05bd29b0 sim/testsuite/sim/sh64/compact/orb.cgs -237f94b7d82bbe794dec21c82e39ac16 sim/testsuite/sim/sh64/compact/extsw.cgs -ead7f7ae37ed28acb8fe9ca363446640 sim/testsuite/sim/sh64/compact/ocbwb.cgs -e55068ccbd32488af870d2b89de9000f sim/testsuite/sim/sh64/compact/shlr.cgs -3be59f32d1c642776228836b13ddea6d sim/testsuite/sim/sh64/compact/movb9.cgs -c601da6c1ba3e906262c28d268e3a58b sim/testsuite/sim/sh64/compact/bsr.cgs -12e368bfea026db9f75001c7b9a072a6 sim/testsuite/sim/sh64/compact/movw10.cgs -a754ffb66032fcfe09d1d0190470afc6 sim/testsuite/sim/sh64/compact/subc.cgs -9805ed817520267b403266701b0aa2b4 sim/testsuite/sim/sh64/compact/ocbp.cgs -0f56a0c25e45a9de365c44e105bd1481 sim/testsuite/sim/sh64/compact/stsl-fpscr.cgs -46158c951c41f5cc472de87a41b67b3a sim/testsuite/sim/sh64/compact/stc-gbr.cgs -c5ddcb29af919e712d9195de10a38ad9 sim/testsuite/sim/sh64/compact/ldsl-mach.cgs -e0aaf9bc61e49ce27dd4d59aa5028430 sim/testsuite/sim/sh64/compact/movl7.cgs -1039cb01c8b78cceef8ab514b90ea88e sim/testsuite/sim/sh64/compact/fneg.cgs -c27b8d023bea7b97bd4e34e34d234996 sim/testsuite/sim/sh64/compact/not.cgs -02ba94c0c4976e37c371221fece2ddf0 sim/testsuite/sim/sh64/compact/mulsw.cgs -7d7669ca1e8e51c376385782db7e4101 sim/testsuite/sim/sh64/compact/brk.cgs -169370bb1837c9eb0637d793844367ce sim/testsuite/sim/sh64/compact/fschg.cgs -11b9ddea67ef87692cad2ed3786a8b88 sim/testsuite/sim/sh64/compact/or.cgs -3ed23327fc2d63d69658bb695c3d7ff1 sim/testsuite/sim/sh64/compact/fldi0.cgs -cbbb7a0b67cfed8979f2802caba20514 sim/testsuite/sim/sh64/compact/shlr8.cgs -55ac8e9559a7ea47fdca66bef426da42 sim/testsuite/sim/sh64/compact/movi.cgs -210e09801402bfa631991b5694d7e456 sim/testsuite/sim/sh64/compact/fmac.cgs -e7022d3945429974472de5e5f3f64aef sim/testsuite/sim/sh64/compact/andi.cgs -e1f0a305ba67b9bee68e5144a68a62b7 sim/testsuite/sim/sh64/compact/clrt.cgs -c7d45a6557c5fecb06d0953d401ec6e7 sim/testsuite/sim/sh64/compact/movl10.cgs -6cbb4415a81c454139b8dd84d836f5a3 sim/testsuite/sim/sh64/compact/extuw.cgs -b8ee7c280ee7fd98b740210aa179733e sim/testsuite/sim/sh64/compact/fcmpgt.cgs -dcfb8af4205710d4ba72426b92d3c58d sim/testsuite/sim/sh64/compact/stsl-fpul.cgs -760b6752e59d4567ccaa22144cf5bce6 sim/testsuite/sim/sh64/compact/mov.cgs -32da06da3c217fa4db9f558533a350f2 sim/testsuite/sim/sh64/compact/nop.cgs -fc91f77b312fcd436accecf89f6fef0b sim/testsuite/sim/sh64/compact/movw3.cgs -ebd21badf420c5cee8b0d88a08868304 sim/testsuite/sim/h8300/stc.s -a159e301d3202b02c3d6ac416aeedcf6 sim/testsuite/sim/h8300/extw.s -8cbc4afc2f6b11b850e0aec04ed1a473 sim/testsuite/sim/h8300/addx.s -7d8979aa7d14e2ab5d06dda89ca40b5c sim/testsuite/sim/h8300/ChangeLog -c2e57a11d5e455cef19248c2a0fb26b0 sim/testsuite/sim/h8300/xorw.s -7cf771780ab43e6a7a25ed05f8a17ee7 sim/testsuite/sim/h8300/movb.s -2373f3011c78310592feef6fe9432f0a sim/testsuite/sim/h8300/neg.s -1b1082501d2ae954bf8cfe0ef39b83c2 sim/testsuite/sim/h8300/allinsn.exp -5d42a1f9b287e529549796fef4c879c8 sim/testsuite/sim/h8300/orw.s -90637fa47d75134bb5869022a29f120c sim/testsuite/sim/h8300/andb.s -caa5a5b27cbcbfaea63298e864279ae4 sim/testsuite/sim/h8300/extl.s -7038c79de7fb4f02cd5ef969e2cffd30 sim/testsuite/sim/h8300/dec.s -0412ca2321a01a8b7c32897e3f32dd37 sim/testsuite/sim/h8300/bra.s -399b6e09a2ae39da12b2321cd0965b91 sim/testsuite/sim/h8300/addl.s -c0f7ecf275c71ba8ba57b2098887abf4 sim/testsuite/sim/h8300/movmd.s -e889ba6121bfc3b32c11372b6d4c9dcd sim/testsuite/sim/h8300/testutils.inc -3b3ad8e7276c6719c8adfa92951bef0b sim/testsuite/sim/h8300/shlr.s -9649dc0eb3a2346a3ce916dd57eb1b28 sim/testsuite/sim/h8300/mul.s -9766c17a5c5cc1408ada3b9cc437ba28 sim/testsuite/sim/h8300/addw.s -a938731b6a18a4e389d565b373fdb164 sim/testsuite/sim/h8300/orb.s -637fafb5b7e807abbb1f528bca9cc697 sim/testsuite/sim/h8300/movsd.s -388f4ab3999f0a563801fbdec2667f71 sim/testsuite/sim/h8300/inc.s -8ecc998cf6c3e91a5e2f7ca901c6baa2 sim/testsuite/sim/h8300/div.s -8bfd3316d1c16f85273138771fdbbbf0 sim/testsuite/sim/h8300/movw.s -9b63ff9fbde1e63acd708924198b7242 sim/testsuite/sim/h8300/subb.s -4eecc1e3c8c3ef39f35071a0d35c126e sim/testsuite/sim/h8300/rotxr.s -4e839f3223289908cd6e2ba525776dec sim/testsuite/sim/h8300/mova.s -c55d9e46ef6b31eb575f129340b18dce sim/testsuite/sim/h8300/subs.s -16151c89821d742e389f60a77a9c4214 sim/testsuite/sim/h8300/cmpw.s -abfa7675b179fc4254e14cec675be772 sim/testsuite/sim/h8300/movl.s -dd6fabe64292ad56b43ca5532e790417 sim/testsuite/sim/h8300/cmpb.s -db0176e7c9b6cb42862f2377e55312f5 sim/testsuite/sim/h8300/subw.s -e0e2129ddb10014bc62124746c911369 sim/testsuite/sim/h8300/subx.s -63a01cd1ac69acaa0cb441c4f1ef5b89 sim/testsuite/sim/h8300/mac.s -3b4dfe0168e63c6e80583c262c5de759 sim/testsuite/sim/h8300/rotxl.s -e2433fc36981757f93eb5bb4f1b039ac sim/testsuite/sim/h8300/brabc.s -677c2ca0cf5c9c3c593a7a9274859bba sim/testsuite/sim/h8300/ldm.s -5d4de83de24b934dbec418f81b0fbc02 sim/testsuite/sim/h8300/cmpl.s -a537d28284905856ca4b2c9880fb5b0b sim/testsuite/sim/h8300/bset.s -b99bd4670fdfe75f10e37ea480d537f0 sim/testsuite/sim/h8300/rotl.s -fce577f47862442fa9b2da616615c1d2 sim/testsuite/sim/h8300/bfld.s -677b0dc3ede8ba248cb652cab95b9b0c sim/testsuite/sim/h8300/band.s -5745f4f097642a8d3aa1e6f949b20d72 sim/testsuite/sim/h8300/ldc.s -62d2fe5825e86377f04ad0167a214c62 sim/testsuite/sim/h8300/orl.s -307b4b54b70c077beb6b886ed1dadc9d sim/testsuite/sim/h8300/xorb.s -a1ed4f63b96068eaa77495745494ffea sim/testsuite/sim/h8300/not.s -6fdb213d98f348f1c02d48ffcfd806e5 sim/testsuite/sim/h8300/andl.s -7032f158ede5e9c1fe95569152aac2a7 sim/testsuite/sim/h8300/das.s -0b8a477e0fbf76499733fc12811aa4c6 sim/testsuite/sim/h8300/shar.s -e1a2e3252f570905ffbdc48d6a44089d sim/testsuite/sim/h8300/stack.s -2dad02e99bd1422af83cb4353b7e63c0 sim/testsuite/sim/h8300/adds.s -ffef0a19e06ed3716630c870e2c78e97 sim/testsuite/sim/h8300/shal.s -376c12070675b9d7dd2c58e70ee98842 sim/testsuite/sim/h8300/andw.s -893d0b1072d7416e133a80d501b49cd4 sim/testsuite/sim/h8300/biand.s -0f85e20fbab15124e67dde283ee4b159 sim/testsuite/sim/h8300/shll.s -f75f1bed46894927fbb7773bc84081fc sim/testsuite/sim/h8300/rotr.s -ce415b253063a7fe5cf02f17fb48faab sim/testsuite/sim/h8300/addb.s -c5cc1774fded69045dd1d5a31e4eecc7 sim/testsuite/sim/h8300/jmp.s -81e2e460e06fcf47b7ed621287bfbafa sim/testsuite/sim/h8300/tas.s -99f82cb39a007343d1a5bd8c71960fcb sim/testsuite/sim/h8300/nop.s -4c711137a90bb2ba4b2f44ad3ef33ba7 sim/testsuite/sim/h8300/daa.s -a63920fd12f48e551687aacc6bfae557 sim/testsuite/sim/h8300/subl.s -8ea8bfb6cddf05ef11ea7fb068e218e6 sim/testsuite/sim/h8300/xorl.s -c8756b053a5d9e80829d352796598ea4 sim/testsuite/sim/m68hc11/ChangeLog -9499c70edfd7d13dd77c87800191b3cd sim/testsuite/sim/m68hc11/allinsn.exp -d4a4dc202b50cef88186c345fa60f24c sim/testsuite/sim/m68hc11/testutils.inc -531db82ef6fbeb05b9681fd97cf0adf3 sim/testsuite/sim/m68hc11/pass.s -e6e56816b0dcb650c26b46a33cb1ffac sim/testsuite/sim/fr30/mul.cgs -58553f1bced962c2d9f26ff2f53aecfc sim/testsuite/sim/fr30/misc.exp -b3436c5fa08665c3fd9b9d103bbfd4ca sim/testsuite/sim/fr30/bv.cgs -1df39f183df8aeeb7fa41d92384a0ad9 sim/testsuite/sim/fr30/enter.cgs -98f0923dc897604e64e47dd027c2fab1 sim/testsuite/sim/fr30/extsh.cgs -692e2c452c77ecbc6b74405fbfb8764f sim/testsuite/sim/fr30/add.ms -9497d9229865b30c86f4e77508a9a406 sim/testsuite/sim/fr30/div0u.cgs -006acd8b3fbfdfdc9cf751d3551da65b sim/testsuite/sim/fr30/extub.cgs -8987709e3323037c23eb5559a2a05b79 sim/testsuite/sim/fr30/and.cgs -39e04e64c4d19c045c63ea3638083f1e sim/testsuite/sim/fr30/ChangeLog -9d0cb44436f746f3c9888587a0705941 sim/testsuite/sim/fr30/addn.cgs -40b06cc66fd096915a199de617efa043 sim/testsuite/sim/fr30/ldm1.cgs -3daf2597d21b8195e0c0a1650be412df sim/testsuite/sim/fr30/asr.cgs -bd02ed7b7c8470f6853a555a57818cb3 sim/testsuite/sim/fr30/ld.cgs -da584f1cf2dcd0f85046a64bc5d9ba5e sim/testsuite/sim/fr30/subn.cgs -6b9b96096efcac0f5ee86ff1b1327da4 sim/testsuite/sim/fr30/extuh.cgs -c0e8ab52947ed9bccc6646be37f2b82e sim/testsuite/sim/fr30/btstl.cgs -503d6096668d67d46c257e7895d84d31 sim/testsuite/sim/fr30/add.cgs -546a174bd7aa7dfa4f54ba99e5b2d617 sim/testsuite/sim/fr30/stres.cgs -0c254917d1438ef4f7cb6dbd5683cf75 sim/testsuite/sim/fr30/beorl.cgs -78fc35acbc4a167797bd863fd991a785 sim/testsuite/sim/fr30/allinsn.exp -63da4dc66d15a7647a2b0612f35a8564 sim/testsuite/sim/fr30/bandh.cgs -8557874b84d96137c9d2163f29a20473 sim/testsuite/sim/fr30/orh.cgs -92b6ed80cfaf734393514a354f558e12 sim/testsuite/sim/fr30/copld.cgs -d9bcff3a1f3a6885615cb81215deb73d sim/testsuite/sim/fr30/ldi20.cgs -55b2418400196e2f3a85b8e6b696a252 sim/testsuite/sim/fr30/dmovb.cgs -8bca5d07304281074232cf501f58d578 sim/testsuite/sim/fr30/div0s.cgs -528b0bd224d9631b14de438842a363c4 sim/testsuite/sim/fr30/bge.cgs -1a350c8e3f57a176585fc796b07bfc7d sim/testsuite/sim/fr30/dmovh.cgs -8f3d3ac55197c8d27a1bb6022ce7ab9c sim/testsuite/sim/fr30/copsv.cgs -82b175871b9a3802f2b0141fdbd69314 sim/testsuite/sim/fr30/div3.cgs -5948be319fc5808a6b19793d9e5bbc7d sim/testsuite/sim/fr30/andb.cgs -c174cd3fd5b8667dbc7b7741ec7449e3 sim/testsuite/sim/fr30/testutils.inc -201ea7a49f59a0a5e628e9b549bfb5b8 sim/testsuite/sim/fr30/mulu.cgs -291df7a8065e554654d635d4319a6e07 sim/testsuite/sim/fr30/ldm0.cgs -030942418ed8e981370a1d4e1489b9b2 sim/testsuite/sim/fr30/addn2.cgs -5f28ff21c8db4465c66df254b3a6d631 sim/testsuite/sim/fr30/stm1.cgs -78f28bc2aa59a4a6dc4cdd7971e98108 sim/testsuite/sim/fr30/bno.cgs -5e026ff1027b8aa7cb374c51b5c4b9e8 sim/testsuite/sim/fr30/stilm.cgs -2d45aaaebfe96a478d94442f475255dd sim/testsuite/sim/fr30/div2.cgs -6cc8644c6594267688e0cfa178a7bd73 sim/testsuite/sim/fr30/asr2.cgs -d01fa8a22cb8df995a868145d71bbf94 sim/testsuite/sim/fr30/orccr.cgs -bc265d868045395c100b7c74d441979a sim/testsuite/sim/fr30/eor.cgs -825b7df0d31175f17fb30a27a90d6f05 sim/testsuite/sim/fr30/ble.cgs -3838077d837c2b8656d8a398cbf96482 sim/testsuite/sim/fr30/bandl.cgs -7f827594dfa2a9ea9cbdb822808bb96e sim/testsuite/sim/fr30/lduh.cgs -85c3eb5c04a5558fa911df3e30e3679b sim/testsuite/sim/fr30/andccr.cgs -fd0034e39e50a5ad93071dbc6718e3b6 sim/testsuite/sim/fr30/beorh.cgs -8f9d88e4c545aca64898cbd90c3d16a4 sim/testsuite/sim/fr30/addsp.cgs -a447d626d0829c31c4cc72b9aca610bc sim/testsuite/sim/fr30/int.cgs -5c29b0babb4c478e18950a01250bacdf sim/testsuite/sim/fr30/ldi32.cgs -1986f8b31251f3fcfead747f2fbc2067 sim/testsuite/sim/fr30/div.ms -11ca26e18c1fa7c05d9980f28911fc84 sim/testsuite/sim/fr30/bn.cgs -2ae5a90062cafe57f759112f5b2f3b06 sim/testsuite/sim/fr30/div4s.cgs -fac808112158b0d7c9a972b5c1e51ad9 sim/testsuite/sim/fr30/lsr.cgs -fae958eef826c19e4e7640eb0378c0c9 sim/testsuite/sim/fr30/stm0.cgs -f419d8740920121331afb15e71725c80 sim/testsuite/sim/fr30/bnc.cgs -ae7aebd1064ea16900d3b009feddd60d sim/testsuite/sim/fr30/addc.cgs -ae8fa268a41ffb274a7a89b9f7344ac3 sim/testsuite/sim/fr30/st.cgs -63ca215997d767d234ca89fcd3e11968 sim/testsuite/sim/fr30/eorb.cgs -8fb50d3723a8e4fda2cca68f8138fc68 sim/testsuite/sim/fr30/lsr2.cgs -16372b76ce969bd0041202b277ab1aae sim/testsuite/sim/fr30/reti.cgs -d5c3720a8d9a8fa88fb45d97681466d2 sim/testsuite/sim/fr30/cmp.cgs -fa428bc4576d35a4d06fe83db66f1e20 sim/testsuite/sim/fr30/bls.cgs -67ece84ba59ec30e07e99a8dfb888f56 sim/testsuite/sim/fr30/extsb.cgs -a92cc956b699bbdead9c1e8ea21b7d85 sim/testsuite/sim/fr30/jmp.cgs -89bf2353814e13f2d5a94d209ace80f3 sim/testsuite/sim/fr30/ret.cgs -3ad5b0fdc53e83258fadc664f63c6a82 sim/testsuite/sim/fr30/sub.cgs -8656edc8211fb004093f703158a7c9ee sim/testsuite/sim/fr30/bgt.cgs -c2961d1998d0f226e73fb2f0c8b37746 sim/testsuite/sim/fr30/bc.cgs -05c014e0472c8041119ea95bda37df65 sim/testsuite/sim/fr30/ldi8.cgs -76cd07dd7c78722fbbfa49bd94b5c61b sim/testsuite/sim/fr30/hello.ms -00ced4e4a8d48e061be334729bcf9972 sim/testsuite/sim/fr30/bnv.cgs -e76365e82b93ee554e15a75585b0c27c sim/testsuite/sim/fr30/beq.cgs -d82e1c778335479eb3257be5f4027f60 sim/testsuite/sim/fr30/copst.cgs -42628131079d04c855f5e218a162c210 sim/testsuite/sim/fr30/div1.cgs -cd540be2b820c7304d49a2cd4c804ebc sim/testsuite/sim/fr30/ldub.cgs -980de17f49e0206c409122a710bd9660 sim/testsuite/sim/fr30/ldres.cgs -1fb7a6a1cbbdff7ba6882c47dc8b3071 sim/testsuite/sim/fr30/call.cgs -e5b073abade7a63209ab21e8757714e5 sim/testsuite/sim/fr30/lsl2.cgs -68e0c1e7bd73024e03d90e17d1b479e7 sim/testsuite/sim/fr30/copop.cgs -c7f3e31654d7134dfec197a23c612f8d sim/testsuite/sim/fr30/inte.cgs -9d0e5f42019df498994f84948f9de403 sim/testsuite/sim/fr30/xchb.cgs -d33f46c321f6a6972442f4bade06656a sim/testsuite/sim/fr30/andh.cgs -118242b7ecdaa35cdce8a8504e75b4be sim/testsuite/sim/fr30/bra.cgs -5f0977ee9d55754ffceaf3dc2242781d sim/testsuite/sim/fr30/bp.cgs -107058d96ac7c888d901300eb006d5c3 sim/testsuite/sim/fr30/blt.cgs -93d8f4110bc336023847d2e425d27fac sim/testsuite/sim/fr30/borh.cgs -9f77138b83e182472a14212e5bb72352 sim/testsuite/sim/fr30/eorh.cgs -18a90aaef63c891698afe734d2152d18 sim/testsuite/sim/fr30/dmov.cgs -51632bbf7fcc2d274e4b7d4ee75b9786 sim/testsuite/sim/fr30/borl.cgs -50c15ddbc5bfffd5f9b4784313984dd1 sim/testsuite/sim/fr30/btsth.cgs -2cf5b46fe78a0e966c03c134642e61c6 sim/testsuite/sim/fr30/orb.cgs -6c4bf429941803c250acd9ed35221ec8 sim/testsuite/sim/fr30/stb.cgs -f32638a3919a1385e630a7e29518e0ed sim/testsuite/sim/fr30/subc.cgs -29f7caeaad4350f3f89236f16849b148 sim/testsuite/sim/fr30/bhi.cgs -32b42ce0a2b13161bf8e4d8cab413410 sim/testsuite/sim/fr30/sth.cgs -c8347c5b0effef1e42f0249483e5ac6a sim/testsuite/sim/fr30/or.cgs -b4e156196e642664ce263f393a7f53be sim/testsuite/sim/fr30/bne.cgs -4e62467dd71697f7cf6d64cebf2531e8 sim/testsuite/sim/fr30/mulh.cgs -f4b6c297ead375254a31836c88c758db sim/testsuite/sim/fr30/leave.cgs -726473e3a587a7dc454557dc8b4c43db sim/testsuite/sim/fr30/add2.cgs -ee0c0d6979b1682c427b387664c204a8 sim/testsuite/sim/fr30/muluh.cgs -5fc1b6eee6a98d786ad146de39bee17e sim/testsuite/sim/fr30/cmp2.cgs -cd116a2a1dac5e397ecc2f7456053564 sim/testsuite/sim/fr30/mov.cgs -68d1886400abacb8a7f24d72bda2a966 sim/testsuite/sim/fr30/nop.cgs -ff01a6642b097f295e29b8aad506bf20 sim/testsuite/sim/fr30/lsl.cgs -35474b7bedfc80b13c1b0c8e172de7de sim/testsuite/sim/microblaze/ChangeLog -47554daee3ce73d879f549f3fc8397df sim/testsuite/sim/microblaze/allinsn.exp -46ad68c64909bc50c10ce61f0d36d668 sim/testsuite/sim/microblaze/testutils.inc -0174e7e6ceb6e4e39aad3572f156a143 sim/testsuite/sim/microblaze/pass.s -499c38564866481121b0d4804cc2eb44 sim/testsuite/sim/mcore/ChangeLog -178c1ec8ff06957342104c37bde03952 sim/testsuite/sim/mcore/allinsn.exp -a656d826d6556550d52f0a5a7bde9720 sim/testsuite/sim/mcore/fail.s -60ceb9e073a38ea16c95effe15a2cbe4 sim/testsuite/sim/mcore/testutils.inc -aab2411e48af29b33d5327c279cd436e sim/testsuite/sim/mcore/pass.s -23ba554b0573e61de88f5d8845ddea6a sim/testsuite/sim/cris/ChangeLog -d972f2e08c829a759859a71e68b136dd sim/testsuite/sim/cris/asm/movemrv10.ms -785a6bb740608dac717c73e57591deaa sim/testsuite/sim/cris/asm/movscr.ms -30bc829c5021270dec933e8b5fc63d6a sim/testsuite/sim/cris/asm/sfe.ms -ecac755c33794472a9f46c0af5176546 sim/testsuite/sim/cris/asm/pid1.ms -c3a673b686630e75037fd83b792e0311 sim/testsuite/sim/cris/asm/movsmpc.ms -c715f5d22e83bf04003f9fc87087d65b sim/testsuite/sim/cris/asm/movprv32.ms -3afdb4c2ab99cf0d1f8fe3f418a7c207 sim/testsuite/sim/cris/asm/msteppc1.ms -cac8a4df22fecf18b6f4a8a8343dc311 sim/testsuite/sim/cris/asm/jsrmv10.ms -08340e3cd22828a9ea7b39ac3ab76a1a sim/testsuite/sim/cris/asm/x10-v10.ms -d15391935ca4c69dfa85d6c0f888fdeb sim/testsuite/sim/cris/asm/movsrpc.ms -5a3ae2ad101563b150633c2dba49672b sim/testsuite/sim/cris/asm/movempc.ms -823aaac6a92b15ff53557fa9db198a41 sim/testsuite/sim/cris/asm/tjsrcv32.ms -dff4cfde15294bc9a91d3c44534b8793 sim/testsuite/sim/cris/asm/moveq.ms -8cc2f6a46bd1708bb4d93aa2e270c02a sim/testsuite/sim/cris/asm/movurpc.ms -a3f7925f637528a6ed229eefe49fc69e sim/testsuite/sim/cris/asm/lsr.ms -2db17fe6f4defa264e7cde99cffa8044 sim/testsuite/sim/cris/asm/raw16.ms -17dd79fca49908b8c928b404e00814dc sim/testsuite/sim/cris/asm/lsl.ms -fbebe914b0dceaead34d68da0400a6a9 sim/testsuite/sim/cris/asm/opterr2.ms -eaa47e885647f776382ab73a6f5961ec sim/testsuite/sim/cris/asm/addom.ms -28e25ab8991ba77ab89f1821d8133c56 sim/testsuite/sim/cris/asm/raw17.ms -fbdc943a9cb4c111b4847a8c5c14d950 sim/testsuite/sim/cris/asm/raw13.ms -0903b2df7977da882963125e318843d0 sim/testsuite/sim/cris/asm/msteppc2.ms -9549eb00a2575e64da41069b45d66b26 sim/testsuite/sim/cris/asm/ftagi.ms -980dc5105a922cccdbc3260960087e09 sim/testsuite/sim/cris/asm/clrjmp1.ms -d4276914b1dd16998d507727bab55d1e sim/testsuite/sim/cris/asm/x7-v32.ms -fac7339a938456bd828ee00b51c8f648 sim/testsuite/sim/cris/asm/cmpxc.ms -db32e99bf41f9de5768a45b4e9903015 sim/testsuite/sim/cris/asm/x6-v10.ms -3173b88b402a0711ac76f427a87b94b1 sim/testsuite/sim/cris/asm/rfe.ms -14961b2c32c9eba83a0bc5f5fc48eae5 sim/testsuite/sim/cris/asm/swap.ms -11e3f6289d1e6d546f9ad47e4f21820f sim/testsuite/sim/cris/asm/cmpr.ms -9dfa0a22cdc4310a491a61947e6ee18d sim/testsuite/sim/cris/asm/movur.ms -14b8d0c38494b61aab6cf1712bf36c59 sim/testsuite/sim/cris/asm/io7.ms -8827577d2a0e20172dda7213c21a6805 sim/testsuite/sim/cris/asm/option1.ms -78b6bcb1c8e05fee20f391868e884ac1 sim/testsuite/sim/cris/asm/xor.ms -d9cfd2ff023db1a091832b06aeafed46 sim/testsuite/sim/cris/asm/moveqpc.ms -9b14a01d3bbba327dc100d7365b400a2 sim/testsuite/sim/cris/asm/orq.ms -0324485cfaaf9118b075dfe3c7b1e3db sim/testsuite/sim/cris/asm/tmvm1.ms -3cffca323f9415f5a625f5b1242f533b sim/testsuite/sim/cris/asm/tmulv10.ms -750db2caea6a5174fce9f0e83d686cbb sim/testsuite/sim/cris/asm/io2.ms -152588b5fbb59aab4a789c32082baecd sim/testsuite/sim/cris/asm/movecrt32.ms -9f89dec5b8e1258f49b6dca9aaac3d3d sim/testsuite/sim/cris/asm/raw4.ms -f9b13410a674bdf42f84bf2238bfff9f sim/testsuite/sim/cris/asm/raw7.ms -33c03c3be0ae8e449a15c3c9f595fe07 sim/testsuite/sim/cris/asm/btst.ms -7e588bd15391b40da304cf0ac6a12e78 sim/testsuite/sim/cris/asm/tjmpsrv32-2.ms -179a2d91e5cb558001696b20ec54c0d7 sim/testsuite/sim/cris/asm/nopv10t.ms -99f079bf224cebd25f0293326f1056d0 sim/testsuite/sim/cris/asm/bare2.ms -28e718a23838ab030070706b95e0dd52 sim/testsuite/sim/cris/asm/movscpc.ms -5977c357ba7e18ac39e0c31bd47676be sim/testsuite/sim/cris/asm/raw15.ms -745fe5dbcb1bd5a9cf09833d2c60720d sim/testsuite/sim/cris/asm/addcpc.ms -3edb27491dd96dfda8285e7048dc1bb2 sim/testsuite/sim/cris/asm/nopv32t2.ms -9699750e3f1ac479aa04674025cae818 sim/testsuite/sim/cris/asm/bare1.ms -f6627838b1f0dc4f49302fc81d86a887 sim/testsuite/sim/cris/asm/bare3.ms -ad02c5a2ac774bb2d6adc47502962bba sim/testsuite/sim/cris/asm/testutils.inc -d0addaebf3bd486cde166d8095265b67 sim/testsuite/sim/cris/asm/asm.exp -f8f9a2e029aab177abacbbf64522f6da sim/testsuite/sim/cris/asm/rfg.ms -d1a8f7bf8185d66d74bcb7813e215796 sim/testsuite/sim/cris/asm/addm.ms -36af380c716d4cd34eca6173940a89cd sim/testsuite/sim/cris/asm/jumpmp.ms -52063e38d4a4290cb5d64ef44023f8f4 sim/testsuite/sim/cris/asm/lapc.ms -797ca60d36294ec7548da5326ab314fe sim/testsuite/sim/cris/asm/cmpm.ms -2242370394be8c61d84f559201c21c38 sim/testsuite/sim/cris/asm/break.ms -3b9da18c291a6594a818808ab4524114 sim/testsuite/sim/cris/asm/movpmv32.ms -a81626c906efa0bcb8640d2d3dc2a691 sim/testsuite/sim/cris/asm/subq.ms -3c2d6762617530e584961f7630a34d58 sim/testsuite/sim/cris/asm/subxm.ms -251d9c56c1a593339dbd56c764dc6d5e sim/testsuite/sim/cris/asm/orr.ms -272797f68936986d5f91637d3773b3ca sim/testsuite/sim/cris/asm/biap.ms -57d425c5b4b9fef24cb94071a1a2dbde sim/testsuite/sim/cris/asm/ccs-v32.ms -2214b2e2ed7ea02738a11f0b28c7dd4e sim/testsuite/sim/cris/asm/clearfv10.ms -b4c3d4cf958efce78de12dbe055158b1 sim/testsuite/sim/cris/asm/addoq.ms -70712ff7b9b19a93be512af7e15c245b sim/testsuite/sim/cris/asm/bccb.ms -a25d5568923a8a2d7a8a81f5bd557429 sim/testsuite/sim/cris/asm/io8.ms -7d960ca6c9dc4a75b2f202e4743af3fd sim/testsuite/sim/cris/asm/x3-v32.ms -a95ef7879071b9764ea063bf81183262 sim/testsuite/sim/cris/asm/tmvmrv10.ms -2a1f9ceb60a9708ddeb09a021c645189 sim/testsuite/sim/cris/asm/io9.ms -0e4cdcc3d930dbe4bb1960224de30c37 sim/testsuite/sim/cris/asm/addxc.ms -f8a0fd268e1e283ce98a93f08d462c7f sim/testsuite/sim/cris/asm/raw9.ms -234ba9c6ba155a4fd4ad7c04c8725934 sim/testsuite/sim/cris/asm/badarch1.ms -2a56c3fdc58d83482fb410d1f7fab779 sim/testsuite/sim/cris/asm/opterr1.ms -5c135a54385ba1496f41c19577a7d0e0 sim/testsuite/sim/cris/asm/x6-v32.ms -364156f156b8a7a6947d966d6bd74470 sim/testsuite/sim/cris/asm/x5-v32.ms -de59b44165a54822f1e186794fe2ba46 sim/testsuite/sim/cris/asm/bdapm.ms -c243c3ccba34415cd7be10730bf8f849 sim/testsuite/sim/cris/asm/boundmv32.ms -bd42a08cc8373b1308928957194e0fec sim/testsuite/sim/cris/asm/andq.ms -0789486ef7e7e48f0d011b6753e0a61a sim/testsuite/sim/cris/asm/raw12.ms -e4293514637b06706f6dcfe22f8c6548 sim/testsuite/sim/cris/asm/user.ms -5da23c5c235f9234e2f92203712100c4 sim/testsuite/sim/cris/asm/dflags.ms -d29aeee229d1ca94d1ca4f83d292403d sim/testsuite/sim/cris/asm/addcv32r.ms -726b5ab1d6dc49b8f877375c303005a4 sim/testsuite/sim/cris/asm/ret.ms -940a3f2ca5fd86fb564a932cf5861816 sim/testsuite/sim/cris/asm/moverpcb.ms -2dee3459d1adb88a531c1d807414630a sim/testsuite/sim/cris/asm/movmp8.ms -b1fbda4cbc4148fcd1d52e10fac71369 sim/testsuite/sim/cris/asm/movum.ms -655db8f5621d9a019c169c33a538f5b6 sim/testsuite/sim/cris/asm/boundc.ms -ebdf7ba59efa1850437aa3f32a2d17c5 sim/testsuite/sim/cris/asm/movsr.ms -fa784df29314879a4ca90fab8c371c96 sim/testsuite/sim/cris/asm/movucpc.ms -37899e7414d05fdcbf1d760c84613019 sim/testsuite/sim/cris/asm/fidxd.ms -02cf2500b611340a806d5d24828c2ae6 sim/testsuite/sim/cris/asm/test.ms -5118adbb201cb7bf5a37bef5da1c11fa sim/testsuite/sim/cris/asm/moverm.ms -5b1a83a07ae1f436fae2c9afc9e32e0a sim/testsuite/sim/cris/asm/dstep.ms -732a4b2c72c297f341dbba90410b1720 sim/testsuite/sim/cris/asm/raw14.ms -47d66dfd6c2b779644000a0d6c49eda8 sim/testsuite/sim/cris/asm/scc.ms -1cb26c9bde7c3993c284d50c6720f91a sim/testsuite/sim/cris/asm/movepcb.ms -5697dbd11faf9c4ae8d1ac633b1bf571 sim/testsuite/sim/cris/asm/opterr5.ms -2546f493ea0e6e5a6c380ea297355c1a sim/testsuite/sim/cris/asm/cmpq.ms -760e24ee5627c4e168d8870342fecb10 sim/testsuite/sim/cris/asm/movpmv10.ms -1898f9c7f50751789369a3e14d183793 sim/testsuite/sim/cris/asm/io1.ms -fa06e0d70373d18ab8ae7182c42ad155 sim/testsuite/sim/cris/asm/orm.ms -8c2eb325206f4b871171eed08ef84121 sim/testsuite/sim/cris/asm/mulv10.ms -d8ee30b386546c5a4a5ef566f40403a3 sim/testsuite/sim/cris/asm/mulx.ms -4afaec581991cef7a06f93749c270620 sim/testsuite/sim/cris/asm/x7-v10.ms -0027c92c821b64aa99e62a63306c59c4 sim/testsuite/sim/cris/asm/movdelsr1.ms -4afa3ee0acec4592cb0ef423894cd516 sim/testsuite/sim/cris/asm/moverwpc.ms -af31a5dab88b669267a99dfef2f68de1 sim/testsuite/sim/cris/asm/jsr.ms -4afa3ee0acec4592cb0ef423894cd516 sim/testsuite/sim/cris/asm/moverdpc.ms -abb5e89b50f55827e90d50ca04cbc2ed sim/testsuite/sim/cris/asm/movemrv32.ms -c0d5a8770803259746508dc445dd8854 sim/testsuite/sim/cris/asm/boundr.ms -84855c457ddac74d211a8e33ba4e5727 sim/testsuite/sim/cris/asm/movecpc.ms -18838432ce304ca531ba5932926b055c sim/testsuite/sim/cris/asm/tjmpsrv32.ms -e9054d5776e6b5bb2e96b8f759575c48 sim/testsuite/sim/cris/asm/raw3.ms -dd2500a9c794d29818b9b89fbff9899e sim/testsuite/sim/cris/asm/movemr.ms -b42f2d6fa449133e5fe5168860eacb72 sim/testsuite/sim/cris/asm/bdapc.ms -ced76c9fa7ed26ba58076969d2478a47 sim/testsuite/sim/cris/asm/tjsrcv10.ms -c3c61f8d4c0515eeee975292dc0a718f sim/testsuite/sim/cris/asm/movpr.ms -93cfdef83cb844b87a1bf93fdbc705d7 sim/testsuite/sim/cris/asm/subqpc.ms -2910348ebc6b4fbc44558873d0cefd39 sim/testsuite/sim/cris/asm/x2-v10.ms -da50619c2878e9a3e3bda17fbdafa435 sim/testsuite/sim/cris/asm/raw8.ms -a33563a1f08346e7ea9ed16b4ca551af sim/testsuite/sim/cris/asm/subc.ms -63adf223c2a656abb48a0043eb8fdf86 sim/testsuite/sim/cris/asm/rfn.ms -9833d52ddc745d1efcd7fd275647731c sim/testsuite/sim/cris/asm/neg.ms -4a4c657a9d8be8e6567a4b26be9c0b26 sim/testsuite/sim/cris/asm/movecr.ms -1ee7b9da11c1883f071654c33c6f4e3b sim/testsuite/sim/cris/asm/addswpc.ms -fe9ec586c2fc70714864986dcf435482 sim/testsuite/sim/cris/asm/movesmp.ms -2f3c1c7757603ece9b7598297d95260b sim/testsuite/sim/cris/asm/io6.ms -9ef4d5feb8539d6586664b1275112ae3 sim/testsuite/sim/cris/asm/option2.ms -9b1a656bf4b326af7b3a1ea20a2c4189 sim/testsuite/sim/cris/asm/addqpc.ms -67eb34187ea6ebf749c0ade2acb648ec sim/testsuite/sim/cris/asm/ccr-v10.ms -6accf667f81ed8bfb8c56f18e8e844c9 sim/testsuite/sim/cris/asm/addq.ms -caa837951bcc527ba2ca4cf972905162 sim/testsuite/sim/cris/asm/bas.ms -7836790af2b06306d3925d8041bbfd6c sim/testsuite/sim/cris/asm/andr.ms -eb8d64a2df115f7886fbbe471a124360 sim/testsuite/sim/cris/asm/movrss.ms -c74fca6bdce3306512f05cf52ed25d17 sim/testsuite/sim/cris/asm/x1-v32.ms -de067018bde6e6a1ba0c704e9f4a5ff1 sim/testsuite/sim/cris/asm/orc.ms -9488a97f680e48ad7132c79e4cf055cb sim/testsuite/sim/cris/asm/clearfv32.ms -c14bbe5dd88bc327ff41446190b09f35 sim/testsuite/sim/cris/asm/addxr.ms -e1164adb4965589fb668a12b9cabad32 sim/testsuite/sim/cris/asm/addr.ms -78e9293d31b7461d137dc0ff8968f666 sim/testsuite/sim/cris/asm/sbfs.ms -b9ce945a8347f31dbf85d6f3ef69a065 sim/testsuite/sim/cris/asm/nonvcv32.ms -5d9082ffb5e6bbd88f4abe2d31142504 sim/testsuite/sim/cris/asm/x0-v10.ms -b237b59f3cda9ba8783de6f3ec0dc9de sim/testsuite/sim/cris/asm/moverpcd.ms -2cc26138923126bad1f3c0411249801b sim/testsuite/sim/cris/asm/ftagd.ms -30dfac72b8fcf65e759d63135754eb58 sim/testsuite/sim/cris/asm/x5-v10.ms -b393d1cde99dc1e60cfde967e7060507 sim/testsuite/sim/cris/asm/opterr3.ms -6b8b85b69157e96282007e991e0065b4 sim/testsuite/sim/cris/asm/movmp.ms -c173fb572b6df495c772e07f5363d46a sim/testsuite/sim/cris/asm/tmemv10.ms -267cb619594093cb439088e46c9df7ee sim/testsuite/sim/cris/asm/raw5.ms -521f5b458b8acca2fdef5ed414808f63 sim/testsuite/sim/cris/asm/tmvmrv32.ms -3689ac7d53d2b21df32f33b086932b90 sim/testsuite/sim/cris/asm/movssr.ms -1102b074c017814da29cde832273f482 sim/testsuite/sim/cris/asm/addcv32c.ms -dcd6ed83a1a72b9d24b49c47ed34f3b1 sim/testsuite/sim/cris/asm/moverpcw.ms -87aebcbccef1737739b9e1ff3dd2855f sim/testsuite/sim/cris/asm/x8-v10.ms -70731cd0eb6983253223310f3deebf30 sim/testsuite/sim/cris/asm/ba.ms -ecbc0cdebce612428dd2396bfd1ffec8 sim/testsuite/sim/cris/asm/andm.ms -47666f39f5eb8756ba8f49ab48e7d66e sim/testsuite/sim/cris/asm/jumppv32.ms -3fa72767063631d49bf4feaa0f4f6639 sim/testsuite/sim/cris/asm/dip.ms -b121c92d80063306def3d775b9979af3 sim/testsuite/sim/cris/asm/tmulv32.ms -a9438c1d50113d9dd4cd1a1da3878fc4 sim/testsuite/sim/cris/asm/cmpxm.ms -9393cf1098b1bd5dae16cd948ef96f08 sim/testsuite/sim/cris/asm/option4.ms -437759a2c57580b8695a4fcf6c5dd353 sim/testsuite/sim/cris/asm/addi.ms -7d0116d90d1fb2cde17c9aa42dcb2a52 sim/testsuite/sim/cris/asm/option3.ms -a909c3f9eca7ac8afed8e09345f10da2 sim/testsuite/sim/cris/asm/addc.ms -edefc7200870247aa1d8995ba517ba50 sim/testsuite/sim/cris/asm/x9-v10.ms -fbccae3a6f364b56c1d99624f359cd68 sim/testsuite/sim/cris/asm/raw1.ms -0da25d08fc1e025db45507b9c21666d7 sim/testsuite/sim/cris/asm/addoc.ms -a50ba432b1e9caafbf89399c1b308c27 sim/testsuite/sim/cris/asm/raw10.ms -8265c3e5f0cec4ddb884b9740689ce56 sim/testsuite/sim/cris/asm/movei.ms -b7870ec565bcc1c4e6a59cc359e85330 sim/testsuite/sim/cris/asm/mcp.ms -6a41028ccbd191bab8591a495714b7df sim/testsuite/sim/cris/asm/op3.ms -074dc6598e23e28f78546cee905c554b sim/testsuite/sim/cris/asm/io4.ms -503836d16a165ba371e6ab2725a4e249 sim/testsuite/sim/cris/asm/opterr4.ms -90fbd294e25dc0ba8bba226c06d0cb22 sim/testsuite/sim/cris/asm/cmpc.ms -391227b378b00377d2b79839b2c297c0 sim/testsuite/sim/cris/asm/x0-v32.ms -9222bee00f67bbb2bd16ff303efe46b4 sim/testsuite/sim/cris/asm/subxr.ms -97ef65c3f3d9068fb73f9b40eb072c79 sim/testsuite/sim/cris/asm/bdapqpc.ms -442b4a68caf03f8c6144395f140812eb sim/testsuite/sim/cris/asm/addcv32m.ms -dfc9197bbe28a36c018d958bf9542575 sim/testsuite/sim/cris/asm/addiv32.ms -c5edbb044bd6500ea76cca5aa555fa14 sim/testsuite/sim/cris/asm/movepcw.ms -461cec9d6dc84c3e170d3d48e567fca2 sim/testsuite/sim/cris/asm/movprv10.ms -cc72dfe579e0e04d8088491bd81512e1 sim/testsuite/sim/cris/asm/fidxi.ms -25567231e8a01af2321bcb2b171fefb6 sim/testsuite/sim/cris/asm/pcplus.ms -06fedf705fd1d73f7df0f480a1e79110 sim/testsuite/sim/cris/asm/tmvrmv10.ms -96fbb5c40c0c7c3e819ab1beafa25c6e sim/testsuite/sim/cris/asm/addxm.ms -c67e215c008a0948de2968a3ac09b3eb sim/testsuite/sim/cris/asm/movsm.ms -bc3f5069bc4718bbb9ffee12e416bdc6 sim/testsuite/sim/cris/asm/raw2.ms -f618263e1a5fe35414d390c5e698da43 sim/testsuite/sim/cris/asm/movecrt10.ms -7096f57332180f0f76e67be2df346d57 sim/testsuite/sim/cris/asm/mstep.ms -1ab6df2dfb8d3923abfff30ab2a9d321 sim/testsuite/sim/cris/asm/tmvrmv32.ms -22149fe91d725b6543fdcfe3a410c8dd sim/testsuite/sim/cris/asm/tmemv32.ms -eac55b1a5230bf3303fdc49b22a01b58 sim/testsuite/sim/cris/asm/tmvm2.ms -7f4b76ce2acc68884932a32ea46a3e7c sim/testsuite/sim/cris/asm/mulv32.ms -01748fb2e18517d90562bb0e840828da sim/testsuite/sim/cris/asm/abs.ms -565043672daf4f7395eb4efe7c2dc629 sim/testsuite/sim/cris/asm/movect10.ms -f75b29130d9dab5a61f14c36ffb9384a sim/testsuite/sim/cris/asm/raw6.ms -1359413b7986cecedcd94ebe610283d9 sim/testsuite/sim/cris/asm/movepcd.ms -20f91c681dc2609edb3caf20351e4c45 sim/testsuite/sim/cris/asm/bdapq.ms -a0edb51e5a425ccf881203ac68e404ed sim/testsuite/sim/cris/asm/tb.ms -9f9bb997017dd3932826751b6dd361ea sim/testsuite/sim/cris/asm/msteppc3.ms -f2dffb8e24bb84e9340456f16901bd82 sim/testsuite/sim/cris/asm/nopv32t3.ms -347b1a9e1c63a246cfcd0334e0b2011b sim/testsuite/sim/cris/asm/lz.ms -a3c92164147ee43f0b7866106074e567 sim/testsuite/sim/cris/asm/subr.ms -298dc950bcadd5e2cec44bf8f18e91cc sim/testsuite/sim/cris/asm/movppc.ms -1fc031c1da27d1c01da817c0c079ab0b sim/testsuite/sim/cris/asm/subm.ms -e3520c7d04732f9662598a2f73bdaf2e sim/testsuite/sim/cris/asm/andc.ms -57faa30b3f920ee188ce72d0453daee9 sim/testsuite/sim/cris/asm/halt.ms -38cf597a973dd9df4ea28b4872bc73b9 sim/testsuite/sim/cris/asm/nopv32t.ms -9e4218d5ddcfefb5541438b39a0a7e69 sim/testsuite/sim/cris/asm/nopv32t4.ms -4afa3ee0acec4592cb0ef423894cd516 sim/testsuite/sim/cris/asm/moverbpc.ms -6a3998da3b99d4ec714f919324b141d6 sim/testsuite/sim/cris/asm/x2-v32.ms -004bff78fcb41a45ef50dbf3a5c8af62 sim/testsuite/sim/cris/asm/movumpc.ms -562df25c42da35363dd3d75ea3811f37 sim/testsuite/sim/cris/asm/not.ms -d307d3c141635b01f94fa57aad27491d sim/testsuite/sim/cris/asm/raw11.ms -f31c11e9c405d7c29ecfa40d76563afc sim/testsuite/sim/cris/asm/asr.ms -3860abd7038ac35c0dd6b7d8ed864bf4 sim/testsuite/sim/cris/asm/x1-v10.ms -153d9dfda7a2e7408435a4275c6627ec sim/testsuite/sim/cris/asm/x3-v10.ms -72b76cf328e602ac59d0eb6d3828db10 sim/testsuite/sim/cris/asm/boundm.ms -1d44f5e46380b9ef890396e82e843e8b sim/testsuite/sim/cris/asm/io3.ms -5fdad03a8aa07112fd066b9c8feff6f3 sim/testsuite/sim/cris/asm/io5.ms -8c5264009df1ce14f68aa8da0b466fdf sim/testsuite/sim/cris/asm/x4-v32.ms -e1a4ba67d2b7566edb96dbf069c4565e sim/testsuite/sim/cris/asm/subxc.ms -213ed16674863ab8a94a648b4bacce9b sim/testsuite/sim/cris/asm/movucr.ms -c538f86c2d76489f295e6173a1bb8fc2 sim/testsuite/sim/cris/asm/mover.ms -ef064c7b060493a8f7faf78eb0cae219 sim/testsuite/sim/cris/hw/rv-n-cris/trivial3.ms -84d3ac00e10363039e374d6c6f0981ea sim/testsuite/sim/cris/hw/rv-n-cris/irq4.ms -a2452f548d0fe6d247d6a5b6b4d62721 sim/testsuite/sim/cris/hw/rv-n-cris/wd1.ms -3b551095d657c411e3f6ae88d9d00f77 sim/testsuite/sim/cris/hw/rv-n-cris/irq5.ms -d74cffc2804266c55d97d7b03388e421 sim/testsuite/sim/cris/hw/rv-n-cris/trivial1.ms -c9091f1850cd8db0e2d3f3696e91054a sim/testsuite/sim/cris/hw/rv-n-cris/testutils.inc -dbe2031bb4db0e18eb8b262a35576545 sim/testsuite/sim/cris/hw/rv-n-cris/irq1.ms -8a8d262fc5f4bdd1b576f5085dd86b39 sim/testsuite/sim/cris/hw/rv-n-cris/mem2.ms -d7574d3043705abb13a00a2684b5d915 sim/testsuite/sim/cris/hw/rv-n-cris/host1.ms -6332e0f695520a5fd138ddfc5de0dcea sim/testsuite/sim/cris/hw/rv-n-cris/mbox1.ms -4b44b5e187cf10e9a1e097d6d0c785a1 sim/testsuite/sim/cris/hw/rv-n-cris/trivial5.ms -7673098aa15ed428f71f5b22a1f13d0c sim/testsuite/sim/cris/hw/rv-n-cris/trivial4.ms -aa7ad744b0bc60196bdf954177f2cb95 sim/testsuite/sim/cris/hw/rv-n-cris/irq2.ms -16170ceabd6c9848db05b8cfc2eedcf7 sim/testsuite/sim/cris/hw/rv-n-cris/irq3.ms -44e633f375ddc4d5894941c26c1c45f8 sim/testsuite/sim/cris/hw/rv-n-cris/irq6.ms -f6d32608623f87d96663d265b179fb6f sim/testsuite/sim/cris/hw/rv-n-cris/trivial4.r -3073a96241c996d1c0c68974914f74bf sim/testsuite/sim/cris/hw/rv-n-cris/trivial2.ms -c0fec604923080edaf21410c069229b2 sim/testsuite/sim/cris/hw/rv-n-cris/rvc.exp -772a3407fa1e2fc1a810157f58887cde sim/testsuite/sim/cris/hw/rv-n-cris/mem1.ms -ecbeb52370b71fd859dc5f48b2bde71e sim/testsuite/sim/cris/hw/rv-n-cris/quit.s -447863ee59979057a731bd58463fa304 sim/testsuite/sim/cris/hw/rv-n-cris/std.dev -05eff01544466ceb8cc637ae1ed7c96d sim/testsuite/sim/cris/hw/rv-n-cris/poll1.ms -871e76b97d097a594ac69b273cd490ab sim/testsuite/sim/cris/c/rtsigprocmask2.c -3399987136f5aa5a07a144e772b4eb8a sim/testsuite/sim/cris/c/sigreturn3.c -e91673e9386c7e482814039f1fe08e3a sim/testsuite/sim/cris/c/uname1.c -a6d1101c58781140696015731a836765 sim/testsuite/sim/cris/c/pipe6.c -636048f3ba0304af174e7096f70abd17 sim/testsuite/sim/cris/c/fdopen1.c -1a3574caa2bc1a3e97b486486582a550 sim/testsuite/sim/cris/c/rtsigsuspend2.c -f9ab2babd200f7bbd9b679f60c9dc136 sim/testsuite/sim/cris/c/freopen2.c -631048ddb6f9dff670e4a59beaabc81f sim/testsuite/sim/cris/c/openpf2.c -1f8a017092ba6fcbdb63831a6d1fddfc sim/testsuite/sim/cris/c/ftruncate1.c -f6119ae18fa0133c2c9818b18e01ebc6 sim/testsuite/sim/cris/c/kill3.c -e0ff04c2f66d5683806accf52c5a5c85 sim/testsuite/sim/cris/c/sig12.c -bd926ac35b64d187f9466e95e69139be sim/testsuite/sim/cris/c/sig1.c -dc28b3a9345098c89c39ac4c0ef02f86 sim/testsuite/sim/cris/c/seek2.c -05b194a011db8d8c2dd3e918570e3ed8 sim/testsuite/sim/cris/c/c.exp -32afb9e16db589c161e15936615b72d8 sim/testsuite/sim/cris/c/openpf3.c -b8cf5d844a877a014c7e928e17856db0 sim/testsuite/sim/cris/c/time1.c -c43cdb23d79a23f9bc3d8b95b20121e4 sim/testsuite/sim/cris/c/badldso3.c -2d4c2f79ecdb8323bbe9cce4e20c5dd2 sim/testsuite/sim/cris/c/sig3.c -23a35358f6b5397b05295030549fb462 sim/testsuite/sim/cris/c/clone6.c -b1ec63e4c4c81066c2c4ea8b7cba870e sim/testsuite/sim/cris/c/sig5.c -3362bf08ac2ded34da69fabf7165f628 sim/testsuite/sim/cris/c/clone5.c -f1e11f695bb093625be81b8fc324de82 sim/testsuite/sim/cris/c/append1.c -d240d97f980a2b5bf5e50f40cda75cb8 sim/testsuite/sim/cris/c/pipe3.c -17706d61b6ff3a97993baa049383e034 sim/testsuite/sim/cris/c/truncate1.c -aa0cc3e3a6590e21d1422c36e67d46f0 sim/testsuite/sim/cris/c/sig13.c -ded7029b6558766ad174b8ad68e2a6ac sim/testsuite/sim/cris/c/sched9.c -bed307959abae151f8251a2aa94f5fb3 sim/testsuite/sim/cris/c/pipe1.c -88553eaf83703a59cbc8361643680b59 sim/testsuite/sim/cris/c/setrlimit1.c -77d15d167d2e0c72fa21387375cd9dc0 sim/testsuite/sim/cris/c/sysctl2.c -ce16bacf1d60113a5c0e03a1bb070d89 sim/testsuite/sim/cris/c/ftruncate2.c -6309fd9674cb770b4802886a74d9ec04 sim/testsuite/sim/cris/c/exitg2.c -dade7a63298c84d0174ebda71a7fa376 sim/testsuite/sim/cris/c/truncate2.c -be489bb1f78e97b8b3e47474a4b07933 sim/testsuite/sim/cris/c/stat7.c -2606622deb8f7164b7dd52c54e8e0764 sim/testsuite/sim/cris/c/sched7.c -3c1d79499542dc743b4a23ee18c74fd0 sim/testsuite/sim/cris/c/syscall3.c -255e7480e65cb422a35a979131718266 sim/testsuite/sim/cris/c/readlink11.c -5aef57f0aa440d4a2e9cd8ebad961daa sim/testsuite/sim/cris/c/thread5.c -11192685d2e3b68b4da90f7cf68fe582 sim/testsuite/sim/cris/c/syscall8.c -404abc34f36e44bf83f9259d6de84eac sim/testsuite/sim/cris/c/hellodyn3.c -2e9729e3376302b1ef46bde8bc7f88a5 sim/testsuite/sim/cris/c/openpf4.c -96353e6f0e8a0a7e6f52e4d55e03e0db sim/testsuite/sim/cris/c/sigreturn4.c -b1fb5f8eb9f0402708a60ab761e2f767 sim/testsuite/sim/cris/c/seek3.c -754e51048e1a20f21f95d5f5b76e315a sim/testsuite/sim/cris/c/ugetrlimit1.c -e7b41c99814c28b6604c647430917b4e sim/testsuite/sim/cris/c/hellodyn.c -2cc75950d1deb441cd82effb9a01ea94 sim/testsuite/sim/cris/c/sig2.c -16df4a6a8d008acb0db573bbca23bc7a sim/testsuite/sim/cris/c/fcntl1.c -c5dc5fdc3fa43e4e5d6e51a2cda8c297 sim/testsuite/sim/cris/c/writev1.c -f1411b703fcd6badb90f276646d32f24 sim/testsuite/sim/cris/c/syscall7.c -86c2ceb180ebd532b644605f3da83107 sim/testsuite/sim/cris/c/fcntl2.c -3eb9b7f3e6a1a8e35ac66cbf048e5bf4 sim/testsuite/sim/cris/c/hello.c -649916de976212a31beb966c0d9ec21f sim/testsuite/sim/cris/c/rtsigprocmask1.c -2c7ce1214983ff7757a9a3a260675438 sim/testsuite/sim/cris/c/hellodyn2.c -0269530a71d3427dabbb84aeb11f3c0a sim/testsuite/sim/cris/c/clone1.c -b976c33ef4b4a551c903d495708c81c3 sim/testsuite/sim/cris/c/clone3.c -e142f3c102619bb0256f07e0b7eb68aa sim/testsuite/sim/cris/c/badldso2.c -bd5bc121e85df515345f34f12c3c294d sim/testsuite/sim/cris/c/sjlj.c -76252d805935152a8a395d166eb58367 sim/testsuite/sim/cris/c/mapbrk.c -4556ba96585517de2f2eb2d2c898f2a1 sim/testsuite/sim/cris/c/syscall6.c -4a2a61b782a1069557cec29154217082 sim/testsuite/sim/cris/c/mmap1.c -2451f3d36cbfbe0fcac765781a858f0e sim/testsuite/sim/cris/c/sched2.c -94c95ed6ab3d8b1110e1e278063bce03 sim/testsuite/sim/cris/c/access1.c -28acfc17ffb85e9ad08bf03b54364eea sim/testsuite/sim/cris/c/sysctl3.c -15815c6cf12beefc7597f68d9b5148c2 sim/testsuite/sim/cris/c/stat2.c -59b654800ab7895cebfbc7b0f7114045 sim/testsuite/sim/cris/c/openpf5.c -56b085b53eea3eaff52ed3cbd614538f sim/testsuite/sim/cris/c/sched5.c -7a9259e3ec6e9661ccfc9fbf6c2dca1e sim/testsuite/sim/cris/c/settls1.c -76a475d64d7a621fe12d8107b35de203 sim/testsuite/sim/cris/c/openpf1.c -33ec0c3647b169206223f953d4bec850 sim/testsuite/sim/cris/c/mmap7.c -7f8e2cee9aa8074fd03e27007034b38f sim/testsuite/sim/cris/c/ex1.c -565c7444b0cb03669e9e3490df139414 sim/testsuite/sim/cris/c/sig10.c -b370018cab1c72d75c1ea87610fd7773 sim/testsuite/sim/cris/c/sock1.c -6652ae9c1f46ef0e790abe331a413cc2 sim/testsuite/sim/cris/c/pipe4.c -bc53972854656ed53a133834033ebb44 sim/testsuite/sim/cris/c/sig8.c -0c9e2d022ccbfd44ca86687c68f5d67e sim/testsuite/sim/cris/c/thread4.c -2b56dd7467ff0cf466b91d8b0bf253b9 sim/testsuite/sim/cris/c/mprotect1.c -28980e0264ebee5d39ee20d559023cc1 sim/testsuite/sim/cris/c/badldso1.c -749c4a65acd72ed14fa1ac3b2cb21028 sim/testsuite/sim/cris/c/gettod.c -8dee6920379731612e518ab5c1b52129 sim/testsuite/sim/cris/c/mmap5.c -dedbe73fd0801fd79e3926d56d5d3b69 sim/testsuite/sim/cris/c/readlink10.c -cb3173d4abb5e27ab24ff09d049646bd sim/testsuite/sim/cris/c/stat5.c -c5ba8136a099953307e60d97437eeef2 sim/testsuite/sim/cris/c/mmap4.c -c3292b96518cff172bb4d88953f1e85d sim/testsuite/sim/cris/c/rtsigsuspend1.c -58491fc532f3932e426eaea1676f84e1 sim/testsuite/sim/cris/c/kill2.c -93e4cbcae267860da4713824d7ab26fc sim/testsuite/sim/cris/c/sig4.c -8d9ec2d8e98873231644fd2928eedd11 sim/testsuite/sim/cris/c/getcwd1.c -6f9d4d83964d160c93eed9432d507573 sim/testsuite/sim/cris/c/syscall2.c -b6dede668026bc1b3a88551a29d37998 sim/testsuite/sim/cris/c/mprotect2.c -1140f36e946d0721e14b43c17656a6c8 sim/testsuite/sim/cris/c/helloaout.c -48d76b9632e424203cafd7d2a10424fa sim/testsuite/sim/cris/c/thread3.c -b61cf3cca5bf399335c11308f3a8bc52 sim/testsuite/sim/cris/c/clone4.c -d2eebcf4b27d666f115002238a95e9cc sim/testsuite/sim/cris/c/mremap.c -46698027bdeb7ff534bcaae25cfed3ea sim/testsuite/sim/cris/c/pipe2.c -cddeadd523c716f3e065b3db91c6598d sim/testsuite/sim/cris/c/readlink4.c -1394f715c3c3f448462016b2114396e2 sim/testsuite/sim/cris/c/readlink7.c -b002267b24d426d4ae91610f8bea22ad sim/testsuite/sim/cris/c/seek1.c -2dc90db6492c7915acfd9d8c4c4b7fd3 sim/testsuite/sim/cris/c/kill1.c -e726def043e06af10f26f71f05989453 sim/testsuite/sim/cris/c/sched8.c -6991044fcf18c8e5d841e4bd7437ccea sim/testsuite/sim/cris/c/sig6.c -858217cb5c5ddb0c2cffbb7ed06e5fe7 sim/testsuite/sim/cris/c/syscall5.c -29c2f654808c90dbb79584a57bb693bc sim/testsuite/sim/cris/c/sig9.c -2c2a2069d8fcbc006396cfb9ae749a91 sim/testsuite/sim/cris/c/mmap3.c -06b60a56edef9d411652f374749adef1 sim/testsuite/sim/cris/c/mmap8.c -9cef688125999d097b8fab9239621f08 sim/testsuite/sim/cris/c/sysctl1.c -b55556b825ca9d54124a043dc3ed4911 sim/testsuite/sim/cris/c/sched6.c -244728880f7a59ca8197581196366a8e sim/testsuite/sim/cris/c/mmap2.c -f2df9aca537b3f4f4ad3e125a5e60778 sim/testsuite/sim/cris/c/sigreturn2.c -1d9766a687655c334147a81547f4d35b sim/testsuite/sim/cris/c/rename2.c -e691954a7ba7158e83626f4c975a85ed sim/testsuite/sim/cris/c/sigreturn1.c -6dcea03f790840f18ea8fd64127724c5 sim/testsuite/sim/cris/c/sig11.c -9e857c786f649510740550577636fa60 sim/testsuite/sim/cris/c/freopen1.c -6caf43a36fee1de1cd658dd7b9df9f28 sim/testsuite/sim/cris/c/readlink8.c -aa50b7df97a5974860b06781313fefb4 sim/testsuite/sim/cris/c/clone2.c -7b15a3fb928cf2af3a5fdba949623d5d sim/testsuite/sim/cris/c/writev2.c -e522a6433d65d3c0a300178b242b58dd sim/testsuite/sim/cris/c/mmap6.c -f13f3eb93fb037c514f32acce267e780 sim/testsuite/sim/cris/c/readlink3.c -654a16be0a1e70047321ae73a8e34c25 sim/testsuite/sim/cris/c/stat3.c -994f44c9411fbf0f86e3bb31f3b086da sim/testsuite/sim/cris/c/sched3.c -bb365d27eec3e78769965aefa87ecf04 sim/testsuite/sim/cris/c/sched4.c -5c0166471388803f8a87b2e75f8cb540 sim/testsuite/sim/cris/c/pipe5.c -b4406066f629d45fa7a492ad97bb35fb sim/testsuite/sim/cris/c/readlink2.c -1b12a53abdcc110b05a27f86ec82a144 sim/testsuite/sim/cris/c/sched1.c -3b8aa26ae0d326bc2f6c5e7b6b0d97df sim/testsuite/sim/cris/c/readlink5.c -85d07e227f3da16227efd370d4bd98e8 sim/testsuite/sim/cris/c/readlink9.c -c065dec5d6d385dfd55808a041c17ab1 sim/testsuite/sim/cris/c/time2.c -e72c1ba5c42bc26baf3997a515d411dc sim/testsuite/sim/cris/c/seek4.c -537da8824f256e117c4f392687279519 sim/testsuite/sim/cris/c/thread2.c -b3a611ff2914bafc74e5e03c6670ecd6 sim/testsuite/sim/cris/c/syscall1.c -6caec686cea8fd103570f5a11d22103f sim/testsuite/sim/cris/c/pipe7.c -bb344255c26b7ff66ba972f594a52ff9 sim/testsuite/sim/cris/c/readlink6.c -60854fabe3d60fad9fedf210455bd03b sim/testsuite/sim/cris/c/syscall4.c -3855c8a67a930c364dfcdf7fb19e76ea sim/testsuite/sim/cris/c/exitg1.c -01e1821708be4a05ad45a85c900f4daf sim/testsuite/sim/cris/c/stat4.c -67ec38ee427de40a93d1dab24bca2787 sim/testsuite/sim/cris/c/readlink1.c -c0e04f2b9fefcb80eb53e1550116f49f sim/testsuite/sim/cris/c/stat1.c -10eb2f4b61f6908d3cb3a06f0a8f2def sim/testsuite/sim/cris/c/stat8.c -498cda002f91b397e6317146f285ca85 sim/testsuite/sim/cris/c/sig7.c -2e215ceef67a0ea53f763ecc91012fab sim/testsuite/sim/cris/c/fdopen2.c -c8756b053a5d9e80829d352796598ea4 sim/testsuite/sim/lm32/ChangeLog -b195af43fcbb6e4d468afd686cad2663 sim/testsuite/sim/lm32/allinsn.exp -e610985828485bdbf13719029d735879 sim/testsuite/sim/lm32/testutils.inc -2b84eea4ca26523c8377c832bcbd4730 sim/testsuite/sim/lm32/pass.s -c8756b053a5d9e80829d352796598ea4 sim/testsuite/sim/iq2000/ChangeLog -04bfec3fac775b59514ab6d515fca3f7 sim/testsuite/sim/iq2000/allinsn.exp -6db577978145c94da7cbc2f34abd44f1 sim/testsuite/sim/iq2000/testutils.inc -ff987d426548a3efc0d91b4bbafc574e sim/testsuite/sim/iq2000/pass.s -f6b9347ade994720c41449cd3ba58b38 sim/testsuite/sim/ft32/ChangeLog -f55f257cf5a6ca86d8027d0a057a4a2e sim/testsuite/sim/ft32/allinsn.exp -9b05eb7a4d099c690fd3feddc1339a65 sim/testsuite/sim/ft32/testutils.inc -8f22d037e9bcf4a17409a2f387fe4339 sim/testsuite/sim/ft32/basic.s -be1710af076cee30f8262a7bef8685ab sim/testsuite/sim/sh/pand.s -dc3cb25df84ca51ea42371f6a4dec6aa sim/testsuite/sim/sh/prnd.s -8f6a40a17e345540ee1f269d29aa5d9a sim/testsuite/sim/sh/paddc.s -69150191761fac26b8276af2f85efd90 sim/testsuite/sim/sh/dmxy.s -6ee03b6e9943d9a05f82c8206ce794cf sim/testsuite/sim/sh/pinc.s -1c5758102c8fc39d63286d44032ad5a7 sim/testsuite/sim/sh/ChangeLog -282a3539572ea760a8d7a480a27800d4 sim/testsuite/sim/sh/add.s -bd7b8686162d8d1030ccd108eb48f610 sim/testsuite/sim/sh/movi.s -4152aee3945ac6afc68b16dd206f851a sim/testsuite/sim/sh/pdec.s -430ffdb88b8f5c054817526afb4be362 sim/testsuite/sim/sh/allinsn.exp -556a45437699573fa48c643bd8248712 sim/testsuite/sim/sh/bld.s -649dca482464a82f27f31481b2f1c8e0 sim/testsuite/sim/sh/clip.s -0c12a523abb2532f2abb3eeeff95cfce sim/testsuite/sim/sh/movxy.s -f379912c20dda0ba7cd86cecc19eca47 sim/testsuite/sim/sh/shlr16.s -cd42365d5bc0d1bb4979cdfd320ce433 sim/testsuite/sim/sh/fschg.s -2f5a45c653e08f75d00a67577a721db7 sim/testsuite/sim/sh/fail.s -6074ab626f6f749947d90dad804223a8 sim/testsuite/sim/sh/fmov.s -e548ee358487284309e5b5717cabf0f9 sim/testsuite/sim/sh/fneg.s -c56c6a1871d8e035a8eb50e2c1cb89f0 sim/testsuite/sim/sh/shll16.s -d0c8446d0ede1ebe79245b96cb002c8d sim/testsuite/sim/sh/macl.s -5fdca3286426034467b63b36d3a3c5e2 sim/testsuite/sim/sh/fldi1.s -578530fadcb2c9974c7eb490be9a2aa7 sim/testsuite/sim/sh/testutils.inc -9c9f493d16eacff7f4315bd95a0c8b18 sim/testsuite/sim/sh/shlr.s -e8ca39483f9c71cfdb1b1b03069df2bc sim/testsuite/sim/sh/pshai.s -ee7309424adcb28d1aabb8c418ef8930 sim/testsuite/sim/sh/mov.s -12c9ce87dbd160a77d59f6aa29ddd375 sim/testsuite/sim/sh/shll2.s -7fcd022e6881b031f0deee8c6816a79a sim/testsuite/sim/sh/fadd.s -5fb60364b4fd1e6b5d37ccdd4c3f4540 sim/testsuite/sim/sh/swap.s -3150deaa0636676e8347bb114fe1d308 sim/testsuite/sim/sh/div.s -22f8beefa505dc232a3593e167d51b2b sim/testsuite/sim/sh/fcmpeq.s -b1d24d30151886ff5bf5bc86758709b1 sim/testsuite/sim/sh/ldrc.s -40b3372c773573dc611cbd9c64efa162 sim/testsuite/sim/sh/pswap.s -f5d3cc68031f17d500295fbcd18bb1f7 sim/testsuite/sim/sh/fsqrt.s -e7a32d44b0b0d9d4309d241eaf991fcf sim/testsuite/sim/sh/pmuls.s -4a9329e1cb4c8a230a4e050d69c0b717 sim/testsuite/sim/sh/bandor.s -f98492eeeab950ed63e6c2d52a3c57d8 sim/testsuite/sim/sh/fcmpgt.s -81c176582a8667af8f6c72a2728737ab sim/testsuite/sim/sh/pshar.s -47a2df7f664eaff06846045d7e64b5ce sim/testsuite/sim/sh/float.s -ed2aa1abfc2026579333e2253c838294 sim/testsuite/sim/sh/ftrc.s -698d502e8fcf6a8e8193fee2a1274e94 sim/testsuite/sim/sh/psub.s -e4e686dacc645b9fc1114279b13b460b sim/testsuite/sim/sh/fabs.s -73bee7558210c5db604fb0929091597e sim/testsuite/sim/sh/sett.s -1c367b6cd0a26caaab7382c8a4a40578 sim/testsuite/sim/sh/pushpop.s -d8c8b220768728a015ad5b9fbb9d2c90 sim/testsuite/sim/sh/padd.s -954b6cdc60b0808db2732f2f65d65983 sim/testsuite/sim/sh/loop.s -c3726f7efa272c1305bc3a7ad9225e5b sim/testsuite/sim/sh/pdmsb.s -ddfdbd007dc52a5ecc5e1981dc705462 sim/testsuite/sim/sh/shlr2.s -472229ecd10ac8f327137e22183f3e92 sim/testsuite/sim/sh/resbank.s -d292c4a8d61a79c219e38af6dd3c4393 sim/testsuite/sim/sh/bset.s -eed4f3e2827f2bdcff0fd693f4be62d0 sim/testsuite/sim/sh/pshlr.s -bef19f1e4cfc1d6ad2fb8643c0033ca0 sim/testsuite/sim/sh/bldnot.s -92f8a202d1e874f537d74831851dba46 sim/testsuite/sim/sh/fsub.s -45e3b96fa5b2e581805f106c3d99f968 sim/testsuite/sim/sh/fcnvds.s -bd6af3c86e2f58147320c9b2961781cd sim/testsuite/sim/sh/shll8.s -2b09fe70d0d48f4cec2f1bd3d656928f sim/testsuite/sim/sh/fsca.s -b7ea335c1e85ef1fac26f071abdb2fac sim/testsuite/sim/sh/fsrra.s -379168064f95675285708c5eaf92bad2 sim/testsuite/sim/sh/bst.s -c43420d54a7dd81d3ea55fbf72cd8d3e sim/testsuite/sim/sh/mulr.s -055b8ddbb40bf3ffeb7b5eac3057b54b sim/testsuite/sim/sh/bandornot.s -fcad598d555a1a24eaa76710c494e71b sim/testsuite/sim/sh/pabs.s -0b43bcfde07c09c6103965070e9046ae sim/testsuite/sim/sh/fpchg.s -b43309a7445615ae8abafb4900d4f3e7 sim/testsuite/sim/sh/fldi0.s -7f6673539421b7915a57f34826612d75 sim/testsuite/sim/sh/fcnvsd.s -f8dca2ef83e73c5c462ef000c13478bb sim/testsuite/sim/sh/and.s -19200c14eefed0db8e7e3f7b7df9a7da sim/testsuite/sim/sh/shll.s -b07d68ae2523ae371be0b115d5cc9253 sim/testsuite/sim/sh/movli.s -849e99ce0f988f5329a7bf2d582cefd5 sim/testsuite/sim/sh/pass.s -f008ac5e491f8ceab68b9f59056e9b16 sim/testsuite/sim/sh/fipr.s -36e38378e39dd9cceb78c21823b24693 sim/testsuite/sim/sh/bxor.s -532a7fc5abd000fbfcdfa409da20f0fa sim/testsuite/sim/sh/pclr.s -04ba23f9a7e46a261c68dc833abac5a3 sim/testsuite/sim/sh/fmac.s -50beb02380bc81e62c64158672183b61 sim/testsuite/sim/sh/movua.s -48d214fbad43f9efc8c0cc2014239984 sim/testsuite/sim/sh/macw.s -47831a2ea8e21901de14ee85de649e42 sim/testsuite/sim/sh/flds.s -1f420e9b6f74d6d03ae952bdffbd8799 sim/testsuite/sim/sh/pshli.s -ea612dc8f08a57ade93a63b0b6563e5c sim/testsuite/sim/sh/fdiv.s -f72cc94c6e69883b35e7075dbdcbcea3 sim/testsuite/sim/sh/bclr.s -eff7f8091a30f489f6cf9bb2c8aeac8d sim/testsuite/sim/sh/shlr8.s -c3b63bb6fbe1f996d7e66e6ed5ef9f32 sim/testsuite/sim/sh/fmul.s -9b040b83149755d82c2328509c12535e sim/testsuite/sim/sh/frchg.s -b4859f29935e5b217a201e3996ef936e sim/testsuite/sim/v850/shl.cgs -85e815de2abdd4a8e57f976a70d450f2 sim/testsuite/sim/v850/ChangeLog -5e49b4ee9bfac127867261aab49d5301 sim/testsuite/sim/v850/satsubi.cgs -a0299a77158639743570f62da83ce9d5 sim/testsuite/sim/v850/divh.cgs -a7fde5e930bcca4fab473e7e12a4cd30 sim/testsuite/sim/v850/testutils.cgs -4aded6a92b79c4b62204838e8bf43bdb sim/testsuite/sim/v850/divu.cgs -53eb912651c13f0ea8aa537a0e00d398 sim/testsuite/sim/v850/divhu.cgs -c5cadbab939f31f2815550c2e1bc4ff4 sim/testsuite/sim/v850/testutils.inc -176f95658c3cdea072a56a08a40fa988 sim/testsuite/sim/v850/div.cgs -c5f8f5f2c95cb9061411969f8552bd60 sim/testsuite/sim/v850/sar.cgs -cf2074aef14997231161787d82280ce2 sim/testsuite/sim/v850/satsubr.cgs -cdd524c11367ecd095b2fb68cda24cee sim/testsuite/sim/v850/bsh.cgs -d219d0a7ebfd715328670f348f6fc8cc sim/testsuite/sim/v850/satadd.cgs -728bb384853e3de0cd850ba77dbb94f9 sim/testsuite/sim/v850/allinsns.exp -6f74fc62171d7544adce8e548b696d3d sim/testsuite/sim/v850/satsub.cgs -4e33f6ab389381ede55a4ca40ca14064 sim/testsuite/sim/v850/shr.cgs -8c015488bd973b121a5372038ddde9da sim/testsuite/sim/v850/divh_3.cgs -c8756b053a5d9e80829d352796598ea4 sim/testsuite/sim/moxie/ChangeLog -924a8154da0b6d622606be982c2370c0 sim/testsuite/sim/moxie/allinsn.exp -3a75df45b7f573b5f697917a7f99a7cb sim/testsuite/sim/moxie/testutils.inc -45afa6965ba08c8912507f7b858ac267 sim/testsuite/sim/moxie/pass.s -fbe25c82541d0d9b6a0eb9938b378ccf sim/testsuite/sim/cr16/shi.cgs -533824682174da24de679037e9e8a873 sim/testsuite/sim/cr16/misc.exp -44441592132a1541d22ae406a3f70379 sim/testsuite/sim/cr16/xorw.cgs -916b503ad4413ddc2739c40a57c1c4b6 sim/testsuite/sim/cr16/tbitb.cgs -5876fe9c91b632b02c82ae85c0086959 sim/testsuite/sim/cr16/popret1.cgs -63d637d5509970745cf258c67b0836d9 sim/testsuite/sim/cr16/jge.cgs -501b3d8cbeeeea0b1cc4c8e7ab36db77 sim/testsuite/sim/cr16/ChangeLog -c8111773a2e97c47fe497ed78261729b sim/testsuite/sim/cr16/movxw.cgs -157c48c2899a2406b28e3bdf0a92833d sim/testsuite/sim/cr16/loadm.cgs -71151f4dc3a107b3a2bdf22ad69754e3 sim/testsuite/sim/cr16/jal.cgs -e8850b6ee39de9bead4b372be1e79905 sim/testsuite/sim/cr16/movzb.cgs -ac3c3a61a1b068aaf711c3ab802600f9 sim/testsuite/sim/cr16/slt.cgs -b0b4a478f84826c1f234916914dd1b3b sim/testsuite/sim/cr16/bcs.cgs -b015c7b42f553474d21e8d5e3b137852 sim/testsuite/sim/cr16/jgt.cgs -c0c4547e84a33e4c0735e4382d635181 sim/testsuite/sim/cr16/allinsn.exp -30e2d364e27ca89970c1ad9faf8eae53 sim/testsuite/sim/cr16/sbitw.cgs -a275feee7eab597196fbd75269c0ab2d sim/testsuite/sim/cr16/br.cgs -3cf7f3d98134a69a053bfca883b62fa6 sim/testsuite/sim/cr16/popret2.cgs -a7d05ccff2425ac8886a52cb299045b6 sim/testsuite/sim/cr16/andd.cgs -70be2a6fefe803b023f2a81c4082e0f0 sim/testsuite/sim/cr16/beq0b.cgs -450d8884cf466b8af9d7c8be4725c938 sim/testsuite/sim/cr16/pop3.cgs -f17397007a7266533ca9f822adf0c140 sim/testsuite/sim/cr16/sls.cgs -d3f2f5d16ebc37df7f4445d25366928a sim/testsuite/sim/cr16/cmpw_i.cgs -643b5e6f1391539a8e4e33e08fb3a7ac sim/testsuite/sim/cr16/ashuw_i.cgs -eaacfbfb93f90d881165c4b522bd7256 sim/testsuite/sim/cr16/bcc.cgs -c8fd944a81c0ba341a5cc7baeed2fea3 sim/testsuite/sim/cr16/cmpi.cgs -c2dc241b3a86c61e35f841929940384a sim/testsuite/sim/cr16/sge.cgs -3e1811940988176043204b361113bc7a sim/testsuite/sim/cr16/jlo.cgs -7de06c2152fc3699d550123424104505 sim/testsuite/sim/cr16/loadd.cgs -3547de4742bc1c86f120457f804e0094 sim/testsuite/sim/cr16/push1.cgs -328b74314f872ad3a432dcf68398c3c8 sim/testsuite/sim/cr16/slo.cgs -4716cdf47f9002e30af7c2d9ec8b69b7 sim/testsuite/sim/cr16/bge.cgs -25d47da0392c312f3e9a4284935db757 sim/testsuite/sim/cr16/subd.cgs -d85ef31cc98569ce9784749b34cc186e sim/testsuite/sim/cr16/mulb.cgs -c27b3a579bd358b360955398bb1d0438 sim/testsuite/sim/cr16/bne0b.cgs -019175ff8a046e04d5f1c648e53dafd8 sim/testsuite/sim/cr16/addi.cgs -f903a7837d78c8840cdc84d161e51c4c sim/testsuite/sim/cr16/lshw.cgs -0943e0e5372402edda9289083973cb17 sim/testsuite/sim/cr16/andb.cgs -a0701137e0ea9fc16ca421928629456d sim/testsuite/sim/cr16/testutils.inc -96d5b4b7318fc62f1b75a9f705811e99 sim/testsuite/sim/cr16/pop2.cgs -ed482d0504a60f236673315be8c987c3 sim/testsuite/sim/cr16/lshb_i.cgs -3123ba0d7ebc3b678ecba3ceafa314b3 sim/testsuite/sim/cr16/blo.cgs -5a45390a5d9b6641387239beb44c1b1f sim/testsuite/sim/cr16/muluw.cgs -ef8fe77aacd4a1e30c7987497cde11d7 sim/testsuite/sim/cr16/scs.cgs -2c784935291e339edce388193da5ffe8 sim/testsuite/sim/cr16/storw.cgs -ad6daba36078ecb6da21802aecc2efce sim/testsuite/sim/cr16/lshd.cgs -c92fdf5219986bfab80539ebee90103b sim/testsuite/sim/cr16/movb.cgs -2e757424b89a680d5d02460442693d1e sim/testsuite/sim/cr16/sbitb.cgs -bdd1ffa1a75ef8b2cf35c172d7598fcc sim/testsuite/sim/cr16/xord.cgs -ba069329fa0f729e45a28ca6f719f7f0 sim/testsuite/sim/cr16/jcs.cgs -ea11a97c0419f72b2baba5fa9630dc26 sim/testsuite/sim/cr16/bal2_24.cgs -4d3d512dc9a5313e559e0ba4a6240fd9 sim/testsuite/sim/cr16/jhs.cgs -5652ebc54a42ff0f46ef6c6cadf2ab29 sim/testsuite/sim/cr16/subi.cgs -cf3b1d15ca083fa78ec94460c41fd3f8 sim/testsuite/sim/cr16/subb.cgs -008f3be128c730a84f836a84ee86dee8 sim/testsuite/sim/cr16/ord.cgs -43a1454f6528fe65b4d0f41349a6d9bd sim/testsuite/sim/cr16/lprd-sprd.cgs -a83723e26622fe1a64902708ba01d4fe sim/testsuite/sim/cr16/loadmp.cgs -0af7c0efabd8da4be61638e2a7ce7577 sim/testsuite/sim/cr16/cmpb.cgs -295ad1ab34949fad14aafc0bc22c7f09 sim/testsuite/sim/cr16/shs.cgs -30819c9cbff7a629dcc6e07199a5d764 sim/testsuite/sim/cr16/lshb.cgs -9bdae816be0a268534764e94096b55ca sim/testsuite/sim/cr16/cmpd_i.cgs -bb7292335414e908ad9dd1a920d159a4 sim/testsuite/sim/cr16/push3.cgs -52c7a35d25b1145531b66e55abf4b606 sim/testsuite/sim/cr16/mulw.cgs -e25d6fc34ff71f52b4d8a9c5c107ae02 sim/testsuite/sim/cr16/cmpd.cgs -72b592116de1bad5fbbea8fd9598e553 sim/testsuite/sim/cr16/sgt.cgs -dba67156b517dbd97410ad0af832d2f6 sim/testsuite/sim/cr16/cbitb.cgs -d03b4d02b1a08fc383fa61498d8b9c29 sim/testsuite/sim/cr16/jlt.cgs -6d637962866bbb4a37ddc937f9547149 sim/testsuite/sim/cr16/mulsb.cgs -512682fb17daf85af0f66104fc25853d sim/testsuite/sim/cr16/bls.cgs -ae41299f4ad75e3d9ce1ce51a87455ce sim/testsuite/sim/cr16/ashud_i.cgs -3e4c6e72a1108c4e85179c8cbb76a3a2 sim/testsuite/sim/cr16/jls.cgs -e045cd438a9466c00065948123fbe4a6 sim/testsuite/sim/cr16/macqw.cgs -6620ffaabc5a06604c43ece04ef87462 sim/testsuite/sim/cr16/tbit.cgs -b8b05ed881886e699a3e602e59826b20 sim/testsuite/sim/cr16/jcc.cgs -fb79b768cd67d02933b9b8182537f069 sim/testsuite/sim/cr16/loadb.cgs -4716cdf47f9002e30af7c2d9ec8b69b7 sim/testsuite/sim/cr16/bgt.cgs -cb7d77de2be8f1d45d913818ae386a5b sim/testsuite/sim/cr16/ashuw.cgs -94f6e01156f70fdc6d1d53ce168f0096 sim/testsuite/sim/cr16/jfs.cgs -5110af4e2e7578f48a7d3c7ff637042c sim/testsuite/sim/cr16/orw.cgs -2092decdf049d86ef8f49b95a009ef59 sim/testsuite/sim/cr16/scc.cgs -22f0798d086289e0e6b5b13d16a65587 sim/testsuite/sim/cr16/ashud.cgs -c6164027f77e6c5c13a20019fc723077 sim/testsuite/sim/cr16/hw-trap.ms -63a8ef50a12fd55d8534440cbb035c2d sim/testsuite/sim/cr16/pop1.cgs -ef49377fd62c501740e3cdf8760d23ef sim/testsuite/sim/cr16/loadw.cgs -f80200e57ec11e2a0335974cbf362020 sim/testsuite/sim/cr16/hello.ms -36c692b8a3b2fbd2eec3a1466bade12f sim/testsuite/sim/cr16/push2.cgs -fbf7bb0be8fc7b72236625fb3a933b7e sim/testsuite/sim/cr16/lshw_i.cgs -5522701195bf677b1823917fb74d3938 sim/testsuite/sim/cr16/addw.cgs -e6caf390a907493e8e2db7a9edda778a sim/testsuite/sim/cr16/beq.cgs -d2502a9ccfde2a113a16f46f75cdadda sim/testsuite/sim/cr16/bal1_24.cgs -b9c547d7592960afb5b89c06e2d44f16 sim/testsuite/sim/cr16/movw.cgs -f91fa8b0387ba370837c66ef014712ff sim/testsuite/sim/cr16/beq0w.cgs -3d5105d47ec3b2e7f61597d084b6d850 sim/testsuite/sim/cr16/movd.cgs -c04c204fe82125041578eb881c27536e sim/testsuite/sim/cr16/excp.cgs -440b6422a28dde673a9e9326967b0495 sim/testsuite/sim/cr16/jump.cgs -b185c6b6cabab528a1cde30b37dc0215 sim/testsuite/sim/cr16/sfs.cgs -0787123f7af21d0f0e49b67113cea23d sim/testsuite/sim/cr16/jfc.cgs -eeb3624e778291b2e91253e215c38813 sim/testsuite/sim/cr16/macuw.cgs -39b6b4293889825cbc03c152fafbd7c3 sim/testsuite/sim/cr16/ashub.cgs -61fabc9c1749be4ba36b5029a3a0e8fe sim/testsuite/sim/cr16/subw.cgs -e98582301c0019529552df179c1b1c70 sim/testsuite/sim/cr16/addd.cgs -991a1be917e93bb5ff3cd7cdeb93bf2a sim/testsuite/sim/cr16/cbitw.cgs -ac821feb1b424789a398ecad52c2efde sim/testsuite/sim/cr16/cmpb_i.cgs -3123ba0d7ebc3b678ecba3ceafa314b3 sim/testsuite/sim/cr16/blt.cgs -8aeeb78ba63157cc86eb8c3acbb9897d sim/testsuite/sim/cr16/stord.cgs -a273a1c7597cb6dd38b94f3469f449db sim/testsuite/sim/cr16/macsw.cgs -e9f8fb7113699218c0d61e76b9b2916f sim/testsuite/sim/cr16/lpr-spr.cgs -d6b2f7815fe26f69215d43464c590a73 sim/testsuite/sim/cr16/xorb.cgs -70eb0d8740aa24af162ddd5fd9595296 sim/testsuite/sim/cr16/sfc.cgs -247aa154278e43df072100fec63a8a60 sim/testsuite/sim/cr16/uread16.ms -c696cf68bef28a6230b80a0378b116ef sim/testsuite/sim/cr16/storb.cgs -46b9d38dc5bc846a55afda5a6b705f5f sim/testsuite/sim/cr16/lshd_i.cgs -b54aa7885f145cacc2561d20cfbbcc78 sim/testsuite/sim/cr16/movxb.cgs -30f437473e23474a5f0b3430b462dcd6 sim/testsuite/sim/cr16/orb.cgs -b066047a28cc74aecec0251e255c36f0 sim/testsuite/sim/cr16/uread32.ms -0b9158184d2fad7c131ed4e1390dcff6 sim/testsuite/sim/cr16/andw.cgs -674ebdc1e494482ac9715d8f66a8a967 sim/testsuite/sim/cr16/popret3.cgs -8c0f4f4632c999845108bff0a1a9b73d sim/testsuite/sim/cr16/ashub_i.cgs -588a35e7e5a54d2ae0ccc08b767ab0ba sim/testsuite/sim/cr16/tbitw.cgs -55153c68b1f8f80c0222b7f7510256d5 sim/testsuite/sim/cr16/bhi.cgs -006a7b3fcf278e2ddabf5dcf90f33dff sim/testsuite/sim/cr16/jeq.cgs -3b72d29afcc2ce49f75411b677aaa1e4 sim/testsuite/sim/cr16/movzw.cgs -f6b95312ca184181ca12d9b4e17ab54b sim/testsuite/sim/cr16/mulsw.cgs -08a2789d1d00df864e97b1925d7f8871 sim/testsuite/sim/cr16/bhs.cgs -e3f710c8265bd9cfaebed6b71467bf1a sim/testsuite/sim/cr16/sne.cgs -4b59a0fb8b8a13e74965ebe8f76f7fb1 sim/testsuite/sim/cr16/bne.cgs -5bae98f051be5850d85698a51d58fb67 sim/testsuite/sim/cr16/jne.cgs -c5629a0de9aae64954f5e81a4f7f5869 sim/testsuite/sim/cr16/cmpw.cgs -10fd94e47110fab5968e141792e4157a sim/testsuite/sim/cr16/addb.cgs -c7a8eba0b8fd90586225a400b03013b5 sim/testsuite/sim/cr16/seq.cgs -205bbdce635864d5d7a66f41031193e0 sim/testsuite/sim/cr16/jhi.cgs -05072e9357b3abdc3a2f3275b2b8671c sim/testsuite/sim/cr16/bne0w.cgs -3123ba0d7ebc3b678ecba3ceafa314b3 sim/testsuite/sim/cr16/bht.cgs -13bcf33defb1ce0ef021208707db1cea sim/testsuite/sim/cr16/nop.cgs -05a186e7f4ae8f3840516440a2a29e77 sim/testsuite/sim/or1k/ChangeLog -2ef4f6343558b98f90f4eed889c06c53 sim/testsuite/sim/or1k/flag.S -b1ca3eb5dfb9db9f17738d581dbc99c6 sim/testsuite/sim/or1k/ext.S -533b9fa2284d0d24758cd74921549218 sim/testsuite/sim/or1k/fpu64a32.S -d9f56f859672427cab0d5a66349e089f sim/testsuite/sim/or1k/fpu.S -572103e0e5daa0c32e6ca9be24f69cde sim/testsuite/sim/or1k/xor.S -8e1d692b952a2b6b074fee5477dde7b8 sim/testsuite/sim/or1k/add.S -8424f720ef8665857bf2297d25c64f82 sim/testsuite/sim/or1k/fpu-unordered.S -e495b64780af5dd4f1c9e866f3b4338f sim/testsuite/sim/or1k/jump.S -d19869dcdc1ece67ef2ef59fdced9e78 sim/testsuite/sim/or1k/mac.S -68a2dc3390760f4e88598c4563e07d5e sim/testsuite/sim/or1k/spr-defs.h -b37fd34eb01987710468dfa523870076 sim/testsuite/sim/or1k/div.S -c7b5120e37dbe851eb8036da56b6c2dd sim/testsuite/sim/or1k/or1k-test.ld -7b76b1b5c71690910fa6e90775df4968 sim/testsuite/sim/or1k/mul.S -58fa87f08bebbbf645dd9fcc4ffd9385 sim/testsuite/sim/or1k/mfspr.S -c35bc1e418e11b981420a801ff5b115f sim/testsuite/sim/or1k/ror.S -ad533bf38f2c6929137aec4b16e5c99e sim/testsuite/sim/or1k/or1k-asm.h -ffb7f81c02e71a3ddc5eebfc60abc5f6 sim/testsuite/sim/or1k/or1k-asm-test-helpers.h -8e773b30c3b138a44045dce4fc130ccb sim/testsuite/sim/or1k/or1k-asm-test.h -44beb9a6d74ac78ddf80fcc80781e1d8 sim/testsuite/sim/or1k/find.S -39212fc7a01feac4441aa82332374bf1 sim/testsuite/sim/or1k/shift.S -ff3bb1043cf7fce8c9ab4f184c9ba7d9 sim/testsuite/sim/or1k/basic.S -1db638aedf1f66987b23b796ec15fe5e sim/testsuite/sim/or1k/fpu64a32-unordered.S -6eab8e091e2c5944648d4b6a9301fadd sim/testsuite/sim/or1k/sub.S -6a61b16f4ada1d645c4bbae88e5f2955 sim/testsuite/sim/or1k/adrp.S -2dee0f0a7ff99b0c48fd807d720eacc8 sim/testsuite/sim/or1k/or.S -5f03d34de0e93f292ca4b0daacbe1203 sim/testsuite/sim/or1k/load.S -ffac7e64e39df31e931bace6695a371c sim/testsuite/sim/or1k/alltests.exp -d48460a639cfa2f8205ab3766d68c567 sim/testsuite/sim/or1k/and.S -8f936812eec90fd25ab9698ecf223c89 sim/testsuite/sim/or1k/or1k-asm-test-env.h -2b4a49438847727f0608f760789f6146 sim/testsuite/sim/bfin/se_all64bitg0opcodes.S -6ddad68a7da14e67d341bdbc97c65406 sim/testsuite/sim/bfin/c_ldst_st_p_d_pp_h.s -5e2ff48a78227fb512f96eb4c2c144ba sim/testsuite/sim/bfin/c_dsp32mult_dr_t.s -28982cacd534f9f3bca6265b9a08b225 sim/testsuite/sim/bfin/c_ldst_ld_d_p_xh.s -bbae134a19fb73ec195b74b310b01617 sim/testsuite/sim/bfin/se_kill_wbbr.S -2a98f1318efaafaa6fb1f1bb2bdd332c sim/testsuite/sim/bfin/c_dsp32alu_rrppmm_sft.s -d84a2971f3f177539863a792ed1ac453 sim/testsuite/sim/bfin/c_seq_wb_rti_lsmmrj_mvp.S -f0f40a5cf5aa7d602c5c3e75f3c17426 sim/testsuite/sim/bfin/c_compi2opd_flags_2.S -0d771d0cf53aa0ffa79390fd09ce7ebc sim/testsuite/sim/bfin/s13.s -7a821b1429672bfdbefe565e64c5a430 sim/testsuite/sim/bfin/7641.s -182a2c8555a2a8ab7cdc8bf3071f6a37 sim/testsuite/sim/bfin/c_loopsetup_preg_lc1.s -8a97a30aa30bf68d9c91e27ed2c1a062 sim/testsuite/sim/bfin/loop_strncpy.s -9c232654bff3e6e311718b42b69b6f35 sim/testsuite/sim/bfin/c_ldst_ld_d_p_b.s -04fdaa0d8a35b9b81c9fe27c41ae33aa sim/testsuite/sim/bfin/random_0035.S -4fde3f094d4fe1a188d119940560cf10 sim/testsuite/sim/bfin/acp5_4.s -62b0e9ce6191a2fda5ee48b36e399159 sim/testsuite/sim/bfin/m14.s -71d62c6517566aba379f434147d3c053 sim/testsuite/sim/bfin/s20.s -eaf5a39866ba7d126f4cdbf8d9af3490 sim/testsuite/sim/bfin/push-pop-multiple.s -90e5fd3dae567016a251cc4a2b2d2355 sim/testsuite/sim/bfin/c_ldstpmod_st_dr_lo.s -0ad8f9106ff263b61d76a0c7851b70f3 sim/testsuite/sim/bfin/c_dsp32shift_vmaxvmax.s -39b679a3e9713cafc6bc502c8e6b1bd8 sim/testsuite/sim/bfin/s15.s -37161ffa2c8450cb524f2644095567e1 sim/testsuite/sim/bfin/c_loopsetup_preg_stld.s -9569a3c4c968b2967fda3b5817cb3960 sim/testsuite/sim/bfin/cc5.S -7361a2c90f840ddcb9b17b552a4e70ef sim/testsuite/sim/bfin/byteop16p.s -f2429cead7427dae5cbe067ca8fa37d4 sim/testsuite/sim/bfin/c_seq_ex3_ls_mmrj_mvp.S -625d83d4bfb911fac79fe2b8c024ad91 sim/testsuite/sim/bfin/c_interr_loopsetup_stld.S -3c6fc8079791f466392bfe73f7cf04f4 sim/testsuite/sim/bfin/se_cc_kill.S -295dca067762b90984cd238f05525cbf sim/testsuite/sim/bfin/c_regmv_pr_dep_nostall.s -dffa7f7ecfaa5b53a2d90571e7a8644c sim/testsuite/sim/bfin/c_dsp32shift_ahalf_rn_s.s -2685d1900e9210813da78fef823e5042 sim/testsuite/sim/bfin/c_dsp32mult_dr_s.s -87262f9ef78e2dbca89062a0678afbae sim/testsuite/sim/bfin/c_dsp32shiftim_lhalf_rn.s -441a164dc901c29dfb5b4e52066a2ca8 sim/testsuite/sim/bfin/issue121.s -5f2f31aaf7ddcce2d121e9f6a041268d sim/testsuite/sim/bfin/random_0012.S -9121d32c9b7afe1ceed81ab968167761 sim/testsuite/sim/bfin/c_ldimmhalf_lz_ibml.s -ce5d4728ea6293d9c2deb31a5a7dcc4d sim/testsuite/sim/bfin/se_excpt_dagprotviol.S -2b5fddc64d07850e90a973b0826fe23c sim/testsuite/sim/bfin/se_loop_kill_01.S -7cf8f0313c9b134c4b90e8c9743146dc sim/testsuite/sim/bfin/issue126.s -f590d0735e056bd8c590035b957b5826 sim/testsuite/sim/bfin/c_dspldst_st_drlo_ipp.s -84af1902fa132a0e9aa33a511ed5e1db sim/testsuite/sim/bfin/c_dsp32mac_dr_a1a0_iutsh.s -834d47b0a613d23a2cc939c959c9cb0d sim/testsuite/sim/bfin/c_dsp32alu_byteop1ew.s -04598b814b8156f788c4fc8cc6f1d507 sim/testsuite/sim/bfin/c_interr_disable_enable.S -b83e00112b576d488bb4de49ea3c4055 sim/testsuite/sim/bfin/c_mode_user_superivsor.S -4818557583db63a8114e8847eb82cd22 sim/testsuite/sim/bfin/run-tests.sh -4185482fdc6f9496fdf7b2dde3e4a42c sim/testsuite/sim/bfin/ChangeLog -babb584b0d996ce2f1969c48e03b368f sim/testsuite/sim/bfin/c_br_preg_stall_ac.s -58fec93f37ef88d3508dc5fa151acb2b sim/testsuite/sim/bfin/random_0030.S -19bb32ddcf86c61587796617aa545849 sim/testsuite/sim/bfin/loop_snafu.s -8b56d7fe27a4dbdefb839f5bb61c5354 sim/testsuite/sim/bfin/c_ccflag_dr_imm3.s -0fe0644a247738a161cff124d8a1d901 sim/testsuite/sim/bfin/c_dsp32shift_align16.s -fcdcb712779b367c8cc3364878d6feb3 sim/testsuite/sim/bfin/random_0020.S -734dc108e7dcbc6bb9e33fc573d81763 sim/testsuite/sim/bfin/issue89.s -d99a6cd0d548f3c08318baa994f5807a sim/testsuite/sim/bfin/se_bug_ui3.S -d1db4922910d772f8372c30d6608c487 sim/testsuite/sim/bfin/cc1.s -8085a49f7d5fbb3e235180a513e5dcc4 sim/testsuite/sim/bfin/c_dsp32mult_pair_m.s -4a2751b3064589ffee5e7983197979bd sim/testsuite/sim/bfin/d1.s -1e29c62ba11b3ecd84882417712cb6c6 sim/testsuite/sim/bfin/c_dsp32alu_rl_rnd12_p.s -647f2426b7b4c66a90f7f68ea68a446f sim/testsuite/sim/bfin/c_dsp32mult_dr.s -5472c113801fcd378f1a439d228d629c sim/testsuite/sim/bfin/issue113.s -f8a8d0c720a77e9104d4f39e33ceefe0 sim/testsuite/sim/bfin/c_dagmodik_lnz_imgebl.s -b13ea0d7e5e574ce70563cf75607904f sim/testsuite/sim/bfin/random_0028.S -d5c582a5c70c026fb79d585f6bb79f38 sim/testsuite/sim/bfin/hwloop-bits.S -2d030cef9b9adfbb8d7294c7892ddee5 sim/testsuite/sim/bfin/c_alu2op_conv_neg.s -3e2ef8403b643230f67439d89b92a135 sim/testsuite/sim/bfin/c_ldstidxl_st_dreg.s -1b1e4305f5fcfec6e9467953dbcbd1b3 sim/testsuite/sim/bfin/issue144.s -ccf62cffff0ccaf6705ee73c7a5e469b sim/testsuite/sim/bfin/c_ccflag_pr_pr.s -3adadda13773c46b6091d45acd6b26af sim/testsuite/sim/bfin/c_calla_subr.s -c7eb777dc8c72484be0e0535400d3764 sim/testsuite/sim/bfin/c_dsp32mult_dr_m_iutsh.s -06db600415d9d6672602063b7e23e47c sim/testsuite/sim/bfin/random_0019.S -f245e59995410a19938fe55bb800b863 sim/testsuite/sim/bfin/c_br_preg_killed_ac.s -bd3261ca82536780a90e028f20ea8e5c sim/testsuite/sim/bfin/c_ldimmhalf_lz_dr.s -38ee4ebc782b080bdca44a7ad104b367 sim/testsuite/sim/bfin/c_dsp32shiftim_ahh.s -c0343cc533bec4f90bea3ba91e7b248c sim/testsuite/sim/bfin/se_cc2stat_haz.S -a941f2bd95e1a9c6d53c1fc352de3c15 sim/testsuite/sim/bfin/c_pushpopmultiple_dp_pair.s -8e26b9811bbe45c00c5fe9afef3f7413 sim/testsuite/sim/bfin/c_interr_timer.S -350d1676b23584932aceaf29210ae3a6 sim/testsuite/sim/bfin/dbg_tr_simplejp.S -5800fe4095a155e55966cf64e5533eb1 sim/testsuite/sim/bfin/c_loopsetup_nested_prelc.s -15d22beb1d4f5094df6a339068dfa94c sim/testsuite/sim/bfin/c_cc_flagdreg_mvbrsft_s1.s -365a381c30ce0992a71da4ad558cbe08 sim/testsuite/sim/bfin/c_ldst_ld_d_p_pp_xh.s -b5ce410338ea218958f0b3fce782c95e sim/testsuite/sim/bfin/up0.s -b93a919db2b04c1e0d9e925b7fe59142 sim/testsuite/sim/bfin/se_all16bitopcodes.S -92170f5dbb753d5ffd2f8d0610573b4c sim/testsuite/sim/bfin/random_0009.S -3ec1b2c60af24e53ef88912f465d2ee1 sim/testsuite/sim/bfin/c_seq_ex2_mmr_mvpop.S -471ed97f64fa7fd9d05e55bf9255d678 sim/testsuite/sim/bfin/greg2.s -dbb76db3186a5de128e481c322ce5d4c sim/testsuite/sim/bfin/c_dsp32mac_pair_a1a0.s -67f0b5f309fb6d2824e23c755b9ed61c sim/testsuite/sim/bfin/se_loop_kill_dcr_01.S -3827576eb9322edfd6e140922744eea8 sim/testsuite/sim/bfin/c_dsp32alu_rl_p.s -8c059a1d3211227851045baa0e6eaff5 sim/testsuite/sim/bfin/c_dspldst_ld_dr_ippm.s -686eef0bc113ed2f4811db3e57b9a261 sim/testsuite/sim/bfin/c_dsp32alu_rh_rnd12_m.s -4cae16bbcb270516e373926130dfbbcc sim/testsuite/sim/bfin/c_seq_ex1_raise_call_mv_pop.S -ac099c908f9dde66bd1bb8230d20ddff sim/testsuite/sim/bfin/c_dsp32alu_rrpm.s -1a01325faf8cc737f9229e3f53435cd7 sim/testsuite/sim/bfin/c_dsp32shift_lhh.s -07d99dfe7d33971c9bd3df6350b30cdf sim/testsuite/sim/bfin/c_dsp32shift_ahalf_lp.s -575ee0582bb25ac4030d2252146bc81f sim/testsuite/sim/bfin/c_dsp32alu_rl_m.s -ff5db67d71e9f21e9e800ba0afc291fd sim/testsuite/sim/bfin/c_progctrl_except_rtx.S -627b03bd369592577f54ac245a8ba092 sim/testsuite/sim/bfin/issue140.S -c77988b31f4c0e7482b488ac2c284639 sim/testsuite/sim/bfin/c_brcc_brf_brt_nbp.s -cefc6d53981b8baf001253414d81429f sim/testsuite/sim/bfin/c_dsp32mac_pair_a0_is.s -b20d9784f0415f9b173e4d1780949a2f sim/testsuite/sim/bfin/c_ldstidxl_ld_dr_xb.s -8298dd966ef443c974a25289417d7286 sim/testsuite/sim/bfin/c_dsp32shift_expexp_r.s -6d7aa6c56270db5faf3775ee63df12d4 sim/testsuite/sim/bfin/div0.s -4461562f8353df458c20a7a46814ae2c sim/testsuite/sim/bfin/c_seq_ex1_brcc_mv_pop.S -c9a0e9341f21ddaaaf8069d7850d8d3c sim/testsuite/sim/bfin/c_dsp32mac_dr_a1_tu.s -c07455aa5f1e0d9cdfde9e2bac836e37 sim/testsuite/sim/bfin/random_0006.S -c2ce02e4274173b1d0e81b785fc4e606 sim/testsuite/sim/bfin/c_loopsetup_nested_top.s -f7c0c137bdbe3b5206820590db0f69a7 sim/testsuite/sim/bfin/se_undefinedinstruction4.S -37023aee4c8367cdce427875d0eb85b8 sim/testsuite/sim/bfin/se_more_ret_haz.S -4f8f3f40e4aa4163557cd69834565021 sim/testsuite/sim/bfin/c_mmr_interr_ctl.s -3c5db1e3d890b2242c76545c178660ea sim/testsuite/sim/bfin/cec-ifetch.S -1524b06b1f99bcd52f20be40892d9700 sim/testsuite/sim/bfin/c_dsp32alu_rh_p.s -cb19bbd25630689fef53145be992a2e9 sim/testsuite/sim/bfin/c_except_illopcode.S -a89adb3c889ce408733c0e1331c3e307 sim/testsuite/sim/bfin/ashift_left.s -0d14b290360f3cbd3e7d24fd2f4e3b76 sim/testsuite/sim/bfin/c_regmv_imlb_dep_stall.s -2f2a0016829092242198f981ee03e3c7 sim/testsuite/sim/bfin/c_dsp32alu_rrppmm_sft_x.s -10fe3ce0034114415ea5bbc801fb2c2e sim/testsuite/sim/bfin/c_pushpopmultiple_dreg.s -ac7d81780c473f5cc0a49bd0d4a6724b sim/testsuite/sim/bfin/c_dsp32alu_byteunpack.s -7551e26fbd07956de7dfecaa3e2cff17 sim/testsuite/sim/bfin/c_ldimmhalf_lz_pr.s -83e9549c45a78a093180d8a1791a9ebc sim/testsuite/sim/bfin/a2.s -e2b55a8ed7b18d264d2730c2b3226d04 sim/testsuite/sim/bfin/c_seq_wb_rtn_lsmmrj_mvp.S -637674262c3a09a442c56884dd741951 sim/testsuite/sim/bfin/c_dsp32alu_r_negneg.s -d02a22626f5c3398d4ace6cd63548443 sim/testsuite/sim/bfin/c_ccmv_cc_pr_pr.s -6d75130bfde6bbdc97fa7da50009c2ad sim/testsuite/sim/bfin/allinsn.exp -4758444e9e2c1365d5f9280e48aa3685 sim/testsuite/sim/bfin/simple0.s -0ac31074477400190218b76cbfb04081 sim/testsuite/sim/bfin/se_loop_ppm.S -516f48e069742b7f0b2ff3191a0ac453 sim/testsuite/sim/bfin/PN_generator.s -2c924b9de723a5d3eb663ff180a74942 sim/testsuite/sim/bfin/c_linkage.s -f269c9779b55995b9c5bc03a2416c194 sim/testsuite/sim/bfin/c_dsp32mac_dr_a0_ih.s -df164c7c2b53f5d898625e38e68ab67e sim/testsuite/sim/bfin/c_dsp32shift_lhalf_ln.s -baea1b9a5026d2a17dd43213a1c86577 sim/testsuite/sim/bfin/issue103.s -f0945532aa7d584387fcbb7bcf609f0a sim/testsuite/sim/bfin/c_multi_issue_dsp_ld_ld.s -9fdfb5b0bc43ecdd094679e94add9d44 sim/testsuite/sim/bfin/c_seq_ex2_mmrj_mvpop.S -6a7de36567147c29f31fa9767a7d068b sim/testsuite/sim/bfin/dsp_a8.s -b67a4c4143323d9b1f677f5580116904 sim/testsuite/sim/bfin/c_ldstiifp_ld_preg.s -f5cd09beffc541d30299638da6d62608 sim/testsuite/sim/bfin/c_dsp32mac_pair_a1_s.s -dc7132cda4cad096d26f1d56feaee2c1 sim/testsuite/sim/bfin/se_loop_mv2lt_stall.S -61a56e6250041dab497c73a679c28af8 sim/testsuite/sim/bfin/c_compi2opp_pr_eq_i7_n.s -05ee9bca2a0c2d4943e5a01135a6d3a5 sim/testsuite/sim/bfin/c_ldst_ld_p_p.s -1364e677cdfce4df3ea77160bbc9443e sim/testsuite/sim/bfin/c_progctrl_call_pcpr.s -63ae4a9dd3de6ebb8ebfebb5b4f60159 sim/testsuite/sim/bfin/c_dsp32mac_dr_a0_tu.s -0c95999e8f9e67478f9d2918bdd09174 sim/testsuite/sim/bfin/test.h -6ba0a7c6a22e429b03766db06b087120 sim/testsuite/sim/bfin/a7.s -f33d1e11c6407f180e8d0e06cb4f1ac5 sim/testsuite/sim/bfin/cec-multi-pending.S -830873358fa2625f683592e65339855f sim/testsuite/sim/bfin/c_cactrl_iflush_pr.s -904d9ed555aa646cdd0795d27100cd4f sim/testsuite/sim/bfin/c_ldimmhalf_h_ibml.s -86275529be3ea8284b411b5fdaf1ed7e sim/testsuite/sim/bfin/se_loop_lr.S -7901b27f138ae7a3c3b81e09103d0602 sim/testsuite/sim/bfin/cec-non-operating-env.s -ba558e8b3302f629e595d7e28896deba sim/testsuite/sim/bfin/c_dsp32alu_awx.s -503ef3297f246f89609a9948e523dfc0 sim/testsuite/sim/bfin/c_loopsetup_nested.s -3b569cae462dfcbe76b0011e7f849595 sim/testsuite/sim/bfin/c_dsp32mac_pair_mix.s -f08633e18b577594713162f92f5ce388 sim/testsuite/sim/bfin/mult.s -934115caa1ea0fff7998b802b8586468 sim/testsuite/sim/bfin/c_dsp32alu_rmp.s -17a79f063f3cf5a910414807b64979c8 sim/testsuite/sim/bfin/c_dsp32shift_bxor.s -e159310a1ee9029a180827603c0f9221 sim/testsuite/sim/bfin/se_all32bitopcodes.lds -450c1af5ae2224d377b92c15320c8348 sim/testsuite/sim/bfin/c_ldimmhalf_h_pr.s -3c172f995ec6788fd2e9126790a72125 sim/testsuite/sim/bfin/a30.s -8c3168756659fef7681448e4701a014b sim/testsuite/sim/bfin/c_dsp32mult_dr_iu.s -3157145d79f11a6ed11c8a530bee4379 sim/testsuite/sim/bfin/disalnexcpt_implicit.S -ae3f3c5b07428adbffa5ffb814f9f23f sim/testsuite/sim/bfin/dsp_a4.s -b1c66a6b7035bbd06ada32f3dfccdff3 sim/testsuite/sim/bfin/c_dsp32mac_dr_a0_s.s -cfaa8736fe8d99807d6f397352b4906b sim/testsuite/sim/bfin/s10.s -0219e15c85d6cb90dda57448b5dceffd sim/testsuite/sim/bfin/c_ldimmhalf_lzhi_ibml.s -e5b207681d3e6bf5142bf642322e06dc sim/testsuite/sim/bfin/random_0036.S -03666e4218e67913c99a631f4a8256e0 sim/testsuite/sim/bfin/a9.s -8d5e4a024a3f1a0cf5a8479d6c2eb3d5 sim/testsuite/sim/bfin/a25.s -fb8dfcd82a42a477041154f5cdb21293 sim/testsuite/sim/bfin/c_ccmv_ncc_pr_pr.s -8f6669d801bbb787752f99e7fe0045cb sim/testsuite/sim/bfin/c_ldst_st_p_d.s -005cb7b88b95c8b4d1a7437f29ebfce6 sim/testsuite/sim/bfin/issue129.s -ba9ecd1796636d954e6ce0e5720ff570 sim/testsuite/sim/bfin/link.s -823ab6c5b582159ed3156f292e53a616 sim/testsuite/sim/bfin/m4.s -7df9ca737b91d05f1859283b846af842 sim/testsuite/sim/bfin/zcall.s -cfc3f75a497c120ef474dda21f8a2971 sim/testsuite/sim/bfin/c_ldst_ld_d_p_pp_xb.s -e4910af42fd0841b5dcbb4e203a51a35 sim/testsuite/sim/bfin/c_interr_excpt.S -3dc1bfada31aaf5589a657af9d5d1a3e sim/testsuite/sim/bfin/brevadd.s -84e89730ffa6802a3e76571609bdc568 sim/testsuite/sim/bfin/c_dsp32alu_r_lh_a0pa1.s -bbd683221fee36dd2b10592ef11294f6 sim/testsuite/sim/bfin/a6.s -404dce58dfff7836f0e7c84a8b7d5111 sim/testsuite/sim/bfin/se_all32bitopcodes.S -d29b11244798155086d332c208f787a2 sim/testsuite/sim/bfin/issue112.s -cb91774a59feeebea4bb02b35e1d5719 sim/testsuite/sim/bfin/c_ldstii_ld_dreg.s -3b517ffc7a5db6a755ff5b607f5c1e0c sim/testsuite/sim/bfin/issue117.s -80f2a5b5de73ac8a35f74c96f871d3f3 sim/testsuite/sim/bfin/se_excpt_ssstep.S -5f5ba5caa2cf6bde390d9e697a1c2cd5 sim/testsuite/sim/bfin/c_ldstpmod_st_dreg.s -7affee7f40c46eb4efcb8583b70af73c sim/testsuite/sim/bfin/dotproduct.s -cdd6c089fd870842e9b8ba197fd77e6d sim/testsuite/sim/bfin/c_ldst_st_p_d_mm_h.s -f61308b31a81b3d1a2f994c67eb0ffbb sim/testsuite/sim/bfin/c_mmr_ppop_illegal_adr.S -584f585ff41670d4502764116fb815f1 sim/testsuite/sim/bfin/d0.s -41d5d4ae69d3e3852531e74e29de4340 sim/testsuite/sim/bfin/c_alu2op_shadd_1.s -4b8146ec5b307272f328815952257457 sim/testsuite/sim/bfin/c_dsp32shift_signbits_rl.s -045c4438923798b029cab0ea00ff2da9 sim/testsuite/sim/bfin/m10.s -af0ce969a54b27c9fbe478fd50b0069a sim/testsuite/sim/bfin/c_seq_ex3_ls_mmr_mvp.S -e1e4d434780ffcc96f942373c1450cf6 sim/testsuite/sim/bfin/c_mmr_timer.S -63cd27f1844a28caf13ecc40b5c79b76 sim/testsuite/sim/bfin/cec-snen-reti.S -20dac437aaa420e9788ef469519d6dae sim/testsuite/sim/bfin/se_popkill.S -c61cfb3f1fc3a109fe24302831df3637 sim/testsuite/sim/bfin/c_ldimmhalf_pibml.s -325e8de5d4d4df4b865840606dcec369 sim/testsuite/sim/bfin/c_dsp32mac_mix.s -098e516f7c3fb60b5ed988d2f3ebeb72 sim/testsuite/sim/bfin/c_brcc_bp1.s -65dd5572e982aa4d49542d5739db6a74 sim/testsuite/sim/bfin/c_dsp32alu_rpm.s -029753ee740e18b70c858a54631c36c4 sim/testsuite/sim/bfin/msa_acp_5.10.S -2893d6244443a96fff842aee0a9e55c0 sim/testsuite/sim/bfin/issue124.s -b66bf17e8fed9d3a82f42140f530c036 sim/testsuite/sim/bfin/c_logi2op_log_l_shft.s -bef9b2d5ff713ae7b043f454d4760fcf sim/testsuite/sim/bfin/c_ldst_st_p_d_mm_b.s -114ed0e388ff27793cd4e74481956592 sim/testsuite/sim/bfin/c_compi2opd_dr_eq_i7_p.s -c824eaf9f3639660c73fa993d2e49e0c sim/testsuite/sim/bfin/c_brcc_brt_bp.s -05d05d3441ffc3d185eefc9583561629 sim/testsuite/sim/bfin/c_dsp32alu_a_neg_a.s -58b18aebbf082feea045664c382460e7 sim/testsuite/sim/bfin/c_compi2opd_dr_add_i7_n.s -51b976945251aa22434ea679934bded0 sim/testsuite/sim/bfin/unlink.S -375240c9dd7ee875f17f2df8938a1346 sim/testsuite/sim/bfin/10272_small.s -a239662487b4a852239cde8357b2e80b sim/testsuite/sim/bfin/se_mv2lp.S -0405b426a94acf8ad97848462b0c785f sim/testsuite/sim/bfin/c_dsp32alu_rr_lph_a1a0.s -1cfab7609c27f9f3719a9429afc5aad1 sim/testsuite/sim/bfin/s18.s -f3a06cadc1c18f60e13782fce6ddb241 sim/testsuite/sim/bfin/random_0025.S -711a16fc84ffe0a266c85a34a1230914 sim/testsuite/sim/bfin/eu_dsp32mac_s.s -d34141e3c43f76a65719c4a3fab452de sim/testsuite/sim/bfin/max_min_flags.s -464fe897143ce4d3e95b3ff695f30459 sim/testsuite/sim/bfin/c_dsp32shift_amix.s -41d40ebc58dc25668e69e7ac53956008 sim/testsuite/sim/bfin/brcc.s -e693001740ca6011d3c49bae41e4c495 sim/testsuite/sim/bfin/c_dsp32shift_ahh_s.s -e712aa82e9762dad4d50ed13be9d8916 sim/testsuite/sim/bfin/random_0017.S -f274a6ca7d830041c247c576c06de99a sim/testsuite/sim/bfin/c_dsp32shiftim_ahalf_lp.s -32652946f308cb9a4bec20e874425a50 sim/testsuite/sim/bfin/c_ldstidxl_st_preg.s -e19788a0fb2680dfbdac1cfa9c01e10b sim/testsuite/sim/bfin/c_dsp32shift_lmix.s -67b973f750cd072f33dd654d14ad92a4 sim/testsuite/sim/bfin/vec-neg-3.S -28d97c964ff6071dcca06cb394faca82 sim/testsuite/sim/bfin/c_alu2op_conv_xh.s -b1c2d494a90d1cbf2c22808abc6714f3 sim/testsuite/sim/bfin/c_ldst_ld_p_p_mm.s -92c60f8d686dfc9f2a366cad89e7ece3 sim/testsuite/sim/bfin/c_dsp32mult_pair_m_i.s -fa9204d3312af2044a06909f0a690e53 sim/testsuite/sim/bfin/s16.s -df60bcb108c4fb36548c6fa099c75fd0 sim/testsuite/sim/bfin/c_ldst_st_p_d_b.s -f8411086235a72897b1ec70f8f7869ef sim/testsuite/sim/bfin/c_dsp32alu_byteop3.s -bb8cb850942f493ed192d0fdb77f1718 sim/testsuite/sim/bfin/c_ldst_ld_d_p_mm.s -e94a8b2dc5c8bcd7c102e27e9a52f7d6 sim/testsuite/sim/bfin/acc-rot.s -f3aa848548a0432f94d7f21f40799c24 sim/testsuite/sim/bfin/cc0.s -5127752e35d5caffc9284ce295c26609 sim/testsuite/sim/bfin/neg-3.S -fc1687a646ff8d6283c38420f8b8f07f sim/testsuite/sim/bfin/c_seq_ac_regmv_pushpop.S -2972a2bced1d8ea97eff90bd0b44b523 sim/testsuite/sim/bfin/random_0029.S -7009963e29a84ae3a3e971baafa44fd4 sim/testsuite/sim/bfin/random_0018.S -2dd27236ee3531fae815173f9d9878ed sim/testsuite/sim/bfin/c_cc_flagdreg_mvbrsft_sn.s -46b778b02f8d193963516da1040d4c92 sim/testsuite/sim/bfin/se_misaligned_fetch.S -b934faefc613023c349422e9dad71bdf sim/testsuite/sim/bfin/testutils.inc -72341c4026360cabf2d1d012fddb0738 sim/testsuite/sim/bfin/seqstat.s -1c70872dafbaa0a8639030711dfd24e3 sim/testsuite/sim/bfin/lp1.s -18a78f2b94f86ce37423bc99c777d9f1 sim/testsuite/sim/bfin/c_ldimmhalf_l_pr.s -0ac8404b519b41131a6133b75fd25a95 sim/testsuite/sim/bfin/msa_acp_5.12_2.S -652bac9f24d850a393bc19fa5b9bd699 sim/testsuite/sim/bfin/se_lsetup_kill.S -7f326130990513dd873ae854f722ab58 sim/testsuite/sim/bfin/c_dsp32mult_dr_m_u.s -48ad3dfdeec052bce2fc9578ddabce02 sim/testsuite/sim/bfin/c_dspldst_st_drlo_i.s -061025cf44efaa01b0432b19048766c7 sim/testsuite/sim/bfin/mmr-exception.s -c034473bf9ec3a4783e7d90af94cc7ce sim/testsuite/sim/bfin/c_ldstii_st_dreg.s -45f0921754e0a0ee0ac0e5589c1c926b sim/testsuite/sim/bfin/c_dsp32shift_af_s.s -781cd11c4737f6a54e2591e63b548cdb sim/testsuite/sim/bfin/c_brcc_brf_bp.s -ccda738b09f4f5b7b5ed88ec1a023353 sim/testsuite/sim/bfin/se_undefinedinstruction1.S -a4cf102023a9f67c8d85cc7ea314b4b6 sim/testsuite/sim/bfin/c_regmv_dr_acc_acc.s -51b87982f3804bf0e073d8843ec821f7 sim/testsuite/sim/bfin/c_dsp32shiftim_lhalf_rp.s -f5a6a017adac4f59064088a6568e1b59 sim/testsuite/sim/bfin/c_seq_dec_raise_pushpop.S -7d7de3315c2b01fd2a8d24d8b9548c69 sim/testsuite/sim/bfin/se_loop_kill_dcr.S -ff1441f10998e8fa6d051c5a45b2f4a3 sim/testsuite/sim/bfin/c_dsp32mac_pair_a1.s -eb803ed13c6411f17be07d1abc6c0102 sim/testsuite/sim/bfin/c_dsp32shift_align8.s -18a3b8e547c64dbe66c1d7908df98f08 sim/testsuite/sim/bfin/c_dsp32mult_dr_u.s -465cab4122fdeac3ccabbac2a224af40 sim/testsuite/sim/bfin/c_regmv_dag_lz_dep.s -d5cf50ddd7fa86e64250e8159d0177e1 sim/testsuite/sim/bfin/se_illegalcombination.S -bf90d7be3a839a151d3b980c5a568d81 sim/testsuite/sim/bfin/c_dsp32mac_dr_a1a0_m.s -a0cc72d47e1efe638d2f379849fd527c sim/testsuite/sim/bfin/c_dspldst_st_dr_ippm.s -b71ec7e53324bbbd8d2a69f2bd33b847 sim/testsuite/sim/bfin/c_comp3op_dr_xor_dr.s -9733e71fe621ab58e43e16d7f0ce6fdf sim/testsuite/sim/bfin/c_dsp32shiftim_amix.s -05127feee6d3f89cc534357244e065e1 sim/testsuite/sim/bfin/byteunpack.s -cec198042b3ad996c5a36485b753ec05 sim/testsuite/sim/bfin/se_oneins_zoff.S -4e6cb56a2a982999d019a1eda3991f2b sim/testsuite/sim/bfin/a11.S -2c5c4f4bf2fc65f15c19902e17b78d4a sim/testsuite/sim/bfin/c_dsp32shift_ahalf_ln_s.s -3ad676f3d1e6f8e05cac17a1570ebdb8 sim/testsuite/sim/bfin/c_brcc_brf_fbkwd.s -02c62b69a50332d334ef23b26e58035d sim/testsuite/sim/bfin/dbg_tr_tbuf0.S -fbb490ecdabf886e7c4521469222439a sim/testsuite/sim/bfin/c_dspldst_ld_drhi_i.s -504baf81cef0e4d165b39290b3f2cbaf sim/testsuite/sim/bfin/a4.s -1e8e3ca710361ce98d00f0c8acbc0d1f sim/testsuite/sim/bfin/c_br_preg_killed_ex1.s -6c2d919f6fe0d37bd8ed6af6adf81eac sim/testsuite/sim/bfin/m11.s -902c615bf0a946c928824d4fd3c3bb4d sim/testsuite/sim/bfin/random_0023.S -e01849a2a91f6a30da3b9580bd8f40c4 sim/testsuite/sim/bfin/pr.s -78ca768b0de8783d2792150f0674cd90 sim/testsuite/sim/bfin/se_excpt_ifprotviol.S -12d4f0bc92557a882318804a22780c3d sim/testsuite/sim/bfin/c_dsp32mac_a1a0_m.s -5f0c733e9692fbfadcd43244dbaa821c sim/testsuite/sim/bfin/mem3.s -8ddab0e356b42910d03ec36732c74968 sim/testsuite/sim/bfin/c_dsp32mac_a1a0_iuw32.s -924386049344ee96f174ca3b9ee443d8 sim/testsuite/sim/bfin/c_ldst_ld_d_p_mm_xh.s -0411b898f07e561234c3db56de8c8822 sim/testsuite/sim/bfin/c_ptr2op_pr_neg_pr.s -c1151feaf3547817a30d8f15e13a05de sim/testsuite/sim/bfin/e0.s -469596b6f7e73b7f5617d9a0ebf5559b sim/testsuite/sim/bfin/c_dsp32mac_dr_a1_i.s -638fab2f31db7cc4f22f1aba7b6f4c2e sim/testsuite/sim/bfin/c_seq_ex1_raise_j_mv_pop.S -7c1f37bdf46606175ea34bd9878f399e sim/testsuite/sim/bfin/c_mmr_ppopm_illegal_adr.S -6f34eb7fb0f64a932c8a2ba6dfea2e24 sim/testsuite/sim/bfin/c_ptr2op_pr_sft_2_1.s -b8df1721881549647d38a8e0f038f5ee sim/testsuite/sim/bfin/s8.s -2881313baa1b2a527541eb9d1c4ac747 sim/testsuite/sim/bfin/se_ssstep_dagprotviol.S -7101288983cd71a36dec11be2cda2efc sim/testsuite/sim/bfin/c_ldst_ld_d_p.s -4485ff1a29e94883e1e65c727866c5a0 sim/testsuite/sim/bfin/c_dspldst_ld_dr_ipp.s -6abb979d21f0fe10b59dccd2e99253f6 sim/testsuite/sim/bfin/c_ldst_ld_d_p_xb.s -59131d58a67fb8ce8cde4154792f2f9d sim/testsuite/sim/bfin/m1.S -b3e0868d8f297001d2031ef40a624d81 sim/testsuite/sim/bfin/syscfg.s -7738669ec75525c7af430a5a4268fcb9 sim/testsuite/sim/bfin/lmu_excpt_prot0.S -0f0eae59ca7d4f47578a3d5ae55be5be sim/testsuite/sim/bfin/c_dsp32alu_abs.s -acb21f37b3594ec532ca0c04399480da sim/testsuite/sim/bfin/algnbug1.s -a683a817a3fcae70c07fbba61b39e42a sim/testsuite/sim/bfin/push-pop.s -2d368770b42998ab3ab4fddf1a5f42fb sim/testsuite/sim/bfin/c_dsp32mult_pair_m_is.s -d8266badab508a8826f43859dd855659 sim/testsuite/sim/bfin/c_alu2op_divq.s -8d2ef9676f9f11678fcccf00cb310b15 sim/testsuite/sim/bfin/c_compi2opd_dr_add_i7_p.s -a33f3ac5bf0c869421142b7e439ba51b sim/testsuite/sim/bfin/c_ptr2op_pr_shadd_1_2.s -71cd0b24c00b44365c1072496507098d sim/testsuite/sim/bfin/c_dsp32mult_dr_is.s -13a49a550bd64364582dfb2f4c55b8ec sim/testsuite/sim/bfin/b1.s -2d02f1f1b8815fb89e351f4e40136e7b sim/testsuite/sim/bfin/se_loop_mv2lc_stall.S -3a4b3ff73b4c20920fe1343181cb7e72 sim/testsuite/sim/bfin/c_progctrl_nop.s -dd8c7a827d3385442a677da37a5dfd1b sim/testsuite/sim/bfin/c_calla_ljump.s -1294c70a4c3b69f36b5d182a0be170c9 sim/testsuite/sim/bfin/c_mmr_loop_user_except.S -a5953d4ee3bfa471e04729418059ccef sim/testsuite/sim/bfin/c_ldimmhalf_h_dr.s -c5817b5392cfebe63db57d3a3509142e sim/testsuite/sim/bfin/c_dsp32shift_ahalf_ln.s -9194e783f65b9814642224e9f25cbd46 sim/testsuite/sim/bfin/link-2.s -14b590e5d1d86198c3c33ea8c6acab6f sim/testsuite/sim/bfin/c_ldstpmod_ld_h_xh.s -d4d4a320ea31b699bac08cef3ad84301 sim/testsuite/sim/bfin/c_logi2op_bittgl.s -821fa1383e068cb6f04e12bc0711ecc8 sim/testsuite/sim/bfin/c_ldstidxl_ld_dr_xh.s -b88a160929b70861633dd13f81dd0e74 sim/testsuite/sim/bfin/c_dsp32shiftim_ahalf_rp_s.s -9f8c1db3365dd2361fdd698c313a584d sim/testsuite/sim/bfin/s21.s -b51f410dda785219d7eb3608d7cc2232 sim/testsuite/sim/bfin/addsub_flags.S -6a047ec73ccc98946877788c3b088aaf sim/testsuite/sim/bfin/c_ldimmhalf_drlo.s -259e9bd5e7343e0a2caacd00c59a63c7 sim/testsuite/sim/bfin/vec-abs-2.S -3deb12dbde129f057fc97d88a04557e4 sim/testsuite/sim/bfin/byteop1p.s -1f86433991dbc84eae62aded277ae674 sim/testsuite/sim/bfin/c_dsp32mac_dr_a1_ih.s -f77b23556afcd6b2d13fba515c3356d5 sim/testsuite/sim/bfin/c_dspldst_ld_drlo_ipp.s -a26e87ddf562adb7d3557266f87fe694 sim/testsuite/sim/bfin/cli-sti.s -84e50dcefb143e170d9779d65f345148 sim/testsuite/sim/bfin/c_dsp32mac_dr_a0_i.s -9c3473194a6bd5da64b7f8d2069db515 sim/testsuite/sim/bfin/c_dsp32alu_alhwx.s -555d43b2af6912a9113f06247e6aed40 sim/testsuite/sim/bfin/random_0022.S -b73776791393b04c84fc4825f78885a4 sim/testsuite/sim/bfin/c_pushpopmultiple_preg.s -a3a388cff1159655b894a4604c5b0a3c sim/testsuite/sim/bfin/c_dsp32alu_rlh_rnd.s -b610164f6f181911fc4c09870ced8eef sim/testsuite/sim/bfin/c_dsp32alu_mix.s -8e313cc5f4bb8f7ca74b13dbd7866529 sim/testsuite/sim/bfin/random_0005.S -ce17614facd14eec0b020443865dfb5d sim/testsuite/sim/bfin/c_interr_pending_2.S -e08b90fdbfab2444d82784000453c3ca sim/testsuite/sim/bfin/c_ldimmhalf_lzhi_dr.s -cc9497ab5745e5c55cdc73bc1a8f618e sim/testsuite/sim/bfin/se_loop_nest_ppm_2.S -9114d6373e4da52043710b8cd8b5014a sim/testsuite/sim/bfin/c_comp3op_dr_minus_dr.s -1c5f113f562e1f2fa7b221a72de925c3 sim/testsuite/sim/bfin/c_dsp32mult_dr_i.s -a3774f7d75d9d6145968bd38ae123bb9 sim/testsuite/sim/bfin/a0shift.S -81b3ba095218dfad42fa906627155f38 sim/testsuite/sim/bfin/random_0033.S -2693f1cf71e62b52b27706f6c9599fbb sim/testsuite/sim/bfin/stk4.s -cce602f497a322243cde44b5b8609cd9 sim/testsuite/sim/bfin/c_dsp32shift_signbits_rh.s -7d34b4effdf092aace9765e2a9bc1176 sim/testsuite/sim/bfin/se_ssync.S -86fc6e2e2d7d0ed372f3037f6abc1c39 sim/testsuite/sim/bfin/vec-abs.S -926f33599d5e5800568582e2692aa4b0 sim/testsuite/sim/bfin/c_ldst_ld_d_p_h.s -7c9bf61ede5a59c0a69c1fb924a800d6 sim/testsuite/sim/bfin/m3.s -0e342873545172acddca6eb2126bd398 sim/testsuite/sim/bfin/c_regmv_pr_dr.s -b8f865d48d0fccb39946756ee52e7265 sim/testsuite/sim/bfin/c_mode_supervisor.S -860668e810dea360992ffcb9599381f3 sim/testsuite/sim/bfin/neg-2.S -a201145004b398d7f2ba15d27e9150db sim/testsuite/sim/bfin/l2_loop.s -bbbc13c1e29c0c5ff28fb04022f75024 sim/testsuite/sim/bfin/c_dsp32shift_af.s -277f7853aa80208013169a875683f900 sim/testsuite/sim/bfin/c_dsp32alu_byteop2.s -7c80537c314fb07da1f003f0559fd470 sim/testsuite/sim/bfin/a21.s -6d021622389b33a98ca17b46e48155d5 sim/testsuite/sim/bfin/c_progctrl_rts.s -3e72f2d28bb00b208ee1f519aafbfc15 sim/testsuite/sim/bfin/c_cc2stat_cc_av1.S -3150b840387dee73160fec0c13462d5f sim/testsuite/sim/bfin/a3.s -f39fa630ebeff7bd621524ce8656920f sim/testsuite/sim/bfin/ashift.s -7b5e37af9594bb8230a19acd5fd67be3 sim/testsuite/sim/bfin/issue146.S -f62a767ecbabfb368cd1f5d0b20e9d82 sim/testsuite/sim/bfin/cec-exact-exception.S -48802aa20584af92c236d9959d09cb5d sim/testsuite/sim/bfin/c_dsp32mac_pair_a0_s.s -323b57f2e648a4ff1e1db5cbcaae38a6 sim/testsuite/sim/bfin/c_ccflag_dr_dr_uu.s -b8ef7aad562d0134b45e588af59f7e11 sim/testsuite/sim/bfin/c_seq_ex1_j_mv_pop.S -4b9f4dd88333be80e1432c3799061c6e sim/testsuite/sim/bfin/s6.s -4289ee30ca00cc4c1cfe82d23f841f81 sim/testsuite/sim/bfin/issue119.s -f2adb264926e39f3dd2d3e94c2bd4597 sim/testsuite/sim/bfin/m0boundary.s -ceadb7776c5e6a9c2640a50e7580c488 sim/testsuite/sim/bfin/c_dsp32mac_pair_a1a0_m.s -cdc7a150fb4d800fbcfb998b92a143ea sim/testsuite/sim/bfin/stk6.s -2fcaff5c3378e3b1ca3302c8f98ce72c sim/testsuite/sim/bfin/c_ldimmhalf_l_ibml.s -2641773af0a76353ca8ab09699313c4f sim/testsuite/sim/bfin/c_dsp32alu_rrpm_aa.s -1a537e86920e7c20e7b7361e136656e3 sim/testsuite/sim/bfin/c_dsp32alu_search.s -90673b97a790eaa3f2c2ea162cc0a5cf sim/testsuite/sim/bfin/argc.c -f1ef93764ca410b744251c3c4cfc758c sim/testsuite/sim/bfin/c_ldstidxl_st_dr_b.s -ef808ff6b6b675ea0f869e4a6f1b6ea0 sim/testsuite/sim/bfin/c_dsp32alu_rl_rnd20_p.s -bd8789745876281acb3ebcd63a553992 sim/testsuite/sim/bfin/c_dsp32shift_rot_mix.s -05ef8361bfab4c661e8a46367b19c383 sim/testsuite/sim/bfin/c_seq_ex1_call_mv_pop.S -fa94045af9a8b611ac508d0288d5c842 sim/testsuite/sim/bfin/saatest.s -b7de88655a515a59593b40fa9e98054c sim/testsuite/sim/bfin/events.s -44be6a8c0e4da116f1cf04784c7edbaf sim/testsuite/sim/bfin/c_dsp32shiftim_lhh.s -59a3446f9e2fe15e93735bcab1f2ad99 sim/testsuite/sim/bfin/c_dsp32alu_saa.s -7a9860a13de6ba9f477189487d72aaa0 sim/testsuite/sim/bfin/cc-alu.S -0b77a6119cecce1e38bc3c8666dfd6fd sim/testsuite/sim/bfin/c_compi2opd_flags.S -2bccafa22b3d5c105ea31aeb48d6e9ca sim/testsuite/sim/bfin/se_loop_nest_ppm_1.S -ec3ebf4777088920b90901340effa079 sim/testsuite/sim/bfin/fir.s -1b9fe3241a0162e8606c21e6b32bb0c6 sim/testsuite/sim/bfin/c_dsp32alu_sgn.s -96e8946c463d6f506af8dabc3dd6862d sim/testsuite/sim/bfin/d2.s -178233d61233eb1d2d093c4132377ccc sim/testsuite/sim/bfin/c_dsp32mult_dr_tu.s -41270012f56d985144bd1154d27df10a sim/testsuite/sim/bfin/c_mmr_loop.S -eb73255b5cb7562e3b21af332b1d9eab sim/testsuite/sim/bfin/m7.s -bd0cfce88fa75c60cff9abed7747b3b0 sim/testsuite/sim/bfin/c_dsp32shiftim_ahalf_lp_s.s -9d81d781061b56b18755a36cc6d7395f sim/testsuite/sim/bfin/c_ldstpmod_ld_dr_lo.s -2e07c3eb9ee7aa16ae79349a2b952633 sim/testsuite/sim/bfin/cec-no-snen-reti.S -ca8394abcbd2ea4027db0cb2c7d2f7a4 sim/testsuite/sim/bfin/c_dsp32mult_dr_mix.s -9622c83522202d0c177d7b2866cc51e7 sim/testsuite/sim/bfin/issue139.S -c71befedf800a18c8b5bd7a9dabe81f6 sim/testsuite/sim/bfin/c_dsp32alu_absabs.s -dc05bbf198d1b4a4a9ab6c8345b4ee0d sim/testsuite/sim/bfin/testset2.s -a0652d3ee9f479d9d6cca68326690608 sim/testsuite/sim/bfin/c_interr_disable.S -a5d2efb604b8d9871c4994ef920aa3dd sim/testsuite/sim/bfin/m8.s -ee9f4503030fa697020fec9dd3302be7 sim/testsuite/sim/bfin/mdma-32bit-1d.c -9cb710abef2b2ce825bf9452be0a3073 sim/testsuite/sim/bfin/c_seq_ac_raise_mv_ppop.S -a0f707838bceeacc9f19bfa1d3f31159 sim/testsuite/sim/bfin/cec-syscfg-ssstep.S -70380a92e41b3f9868ba6452db8970b2 sim/testsuite/sim/bfin/i0.s -754b06a0434623312fb539f37b44fc97 sim/testsuite/sim/bfin/c_dspldst_st_drhi_i.s -d2c0b5f4198c62c57ba2d5f8bb80b220 sim/testsuite/sim/bfin/lmu_excpt_align.S -ae1fdd9921a16a2ad364eb64aa5e7bc5 sim/testsuite/sim/bfin/c_ldimmhalf_dreg.s -f789479442f4dbad47e9734e0c8cccae sim/testsuite/sim/bfin/c_ldstii_st_preg.s -cd9efea1d64fc7fd2dec07f6adf8925c sim/testsuite/sim/bfin/c_dsp32alu_rrpmmp_sft_x.s -4b3ce618665d13744e95be529606feab sim/testsuite/sim/bfin/c_multi_issue_dsp_ldst_2.s -1ba47174b19763359d9b0f4ea3916727 sim/testsuite/sim/bfin/c_dsp32mult_pair_m_u.s -875b06ceb7b81cff862c5ecff8307680 sim/testsuite/sim/bfin/c_ccmv_ncc_dr_pr.s -9df61aafd07a1e2d95c6a6cbab56cd1e sim/testsuite/sim/bfin/c_dsp32shift_rot.s -22da71a766523dbdca3a44380d538537 sim/testsuite/sim/bfin/c_cc2stat_cc_az.s -9fa455a256613004f98ce360c2cd4a5e sim/testsuite/sim/bfin/msa_acp_5.12_1.S -0f2b4133feb80539da731f1ff18154aa sim/testsuite/sim/bfin/se_usermode_protviol.S -78fd337fd8ad33125ae5f7dd25393315 sim/testsuite/sim/bfin/c_dspldst_ld_drlo_i.s -2d0628bef47dd98f40d5cdad7319948e sim/testsuite/sim/bfin/random_0004.S -a14f5a0acb0c380f671daf117f5d9583 sim/testsuite/sim/bfin/m6.s -e08f027090f78de83b488cbee78372c9 sim/testsuite/sim/bfin/c_dsp32shift_signbits_r.s -f08b71309b7aaed138a565fcdc73a63a sim/testsuite/sim/bfin/mc_s2.s -75fd1c1b8811bb84acccafd0418d51c5 sim/testsuite/sim/bfin/compare.s -3f0b69300bac8ac06bb3b246a090f213 sim/testsuite/sim/bfin/c_brcc_bp4.s -7855445bb4565384616e2a5ef02b96c4 sim/testsuite/sim/bfin/dbg_jmp_src_kill.S -2b4442dacf8c0559919266aef67f3735 sim/testsuite/sim/bfin/c_dsp32mac_pair_a1_is.s -335424886c563252c8fbacda7c416c8d sim/testsuite/sim/bfin/c_loopsetup_preg_div2_lc0.s -418e58f92a8fefd3a0e92ab3737c6706 sim/testsuite/sim/bfin/c_ldstidxl_ld_preg.s -e0694f00bd419889afb9d9a3f11b3b40 sim/testsuite/sim/bfin/c_alu2op_arith_r_sft.s -9c6b9ec5d72ab96fb1898d3b3cd29ffc sim/testsuite/sim/bfin/random_0003.S -1f4af3f5d8e516922500d6b2d3871a36 sim/testsuite/sim/bfin/c_ldstpmod_ld_dreg.s -21e3db50248b4ecd49cb954982280b95 sim/testsuite/sim/bfin/c_dsp32mac_dr_a0_iu.s -c49c68f6d47c5ecc841068e30dbec9a3 sim/testsuite/sim/bfin/c_cactrl_iflush_pr_pp.s -695661d1ee0948c7bc574e94c29782af sim/testsuite/sim/bfin/lp0.s -430f73322109f70643f0409106c40145 sim/testsuite/sim/bfin/move.s -4cbe899245aabaf314047e6bf4c8837b sim/testsuite/sim/bfin/a0.s -03ee83edb056e97c913c4e40592ba18b sim/testsuite/sim/bfin/cec-system-call.S -2614add64a5764e0f13692f2210bf040 sim/testsuite/sim/bfin/c_comp3op_dr_and_dr.s -cc7c53b3456f05c2519fe8d2a4a0aaf5 sim/testsuite/sim/bfin/c_ldst_st_p_d_pp.s -56538f4726d4bcbf69000d597527ff45 sim/testsuite/sim/bfin/a5.s -af104a052ade9d20d83c99d7f6e38383 sim/testsuite/sim/bfin/se_all64bitg2opcodes.S -afa755da6a89148c66fff22cde815553 sim/testsuite/sim/bfin/neg.S -24b64830e7c7f658ac81d619d06e1b0e sim/testsuite/sim/bfin/dsp_d1.s -83b6eec752b17f5610e469837240fa08 sim/testsuite/sim/bfin/cir.s -0d5f069409350d392a1443bde0d3c2ba sim/testsuite/sim/bfin/c_regmv_imlb_imlb.s -b21805b72c36e2b748ce9f593bb4a9df sim/testsuite/sim/bfin/c_compi2opd_dr_eq_i7_n.s -038c89bbbb2a935771544aa4f7aca96f sim/testsuite/sim/bfin/c_cc_regmvlogi_mvbrsft_s1.s -b614d86ddf22a03c4633555ad3009fd1 sim/testsuite/sim/bfin/issue125.s -302e8ddb652151528691224c1e91e98d sim/testsuite/sim/bfin/c_alu2op_conv_h.s -535e3778745d40512402e0689693cc46 sim/testsuite/sim/bfin/c_cc_flag_ccmv_depend.S -884d675ce86f627932b9185faa0ed838 sim/testsuite/sim/bfin/c_regmv_pr_dep_stall.s -636d3e3dd28181577e10f1a377382ed8 sim/testsuite/sim/bfin/c_dsp32alu_aa_negneg.s -3fb07f1d95b1bad24c04ed35ac1a52ac sim/testsuite/sim/bfin/c_ldst_ld_d_p_pp_b.s -01853f1b33357e1065f6947441e5e39c sim/testsuite/sim/bfin/c_interr_timer_tcount.S -8abdfd7a925783362be43d9f82a6d3d0 sim/testsuite/sim/bfin/lmu_excpt_default.S -6a32eb370371776cbeadf39af94397a3 sim/testsuite/sim/bfin/c_interr_timer_reload.S -61213925c07929df9fb92f78b39b0d6e sim/testsuite/sim/bfin/hwloop-branch-in.s -face3a7b6fe2e80168b8091239206040 sim/testsuite/sim/bfin/dsp_neg.S -de87d10b3a1423b38678c91fafa445d2 sim/testsuite/sim/bfin/c_dsp32shiftim_ahalf_rn.s -761f974e29cff6935997bcb265f690b2 sim/testsuite/sim/bfin/c_cc2stat_cc_an.s -abd41902e913228e180f2407a13c36d0 sim/testsuite/sim/bfin/lmu_excpt_prot1.S -ab26e42f455018635583de0c359879f1 sim/testsuite/sim/bfin/c_regmv_pr_pr.s -3427654da4e4eab063771d9a8140aec3 sim/testsuite/sim/bfin/c_dsp32alu_rrpmmp_sft.s -2ded8381fd85e54ead834ff4dc931d37 sim/testsuite/sim/bfin/c_regmv_dr_dr.s -67eef251513ea0a65f8c96ccfcca3885 sim/testsuite/sim/bfin/c_dsp32mac_pair_a0_m.s -6cfa5b42892230220a48a16418b3c3d5 sim/testsuite/sim/bfin/ashift_flags.s -41d8cb77e2c2c895ecf423652d3ab3ab sim/testsuite/sim/bfin/c_dsp32mac_dr_a0_is.s -d86a8f228562dc2021e3c3a97ef58ab4 sim/testsuite/sim/bfin/c_dsp32shift_ones.s -9dc752cfdf40fd3b34af73066cb982e5 sim/testsuite/sim/bfin/c_dsp32shiftim_lhalf_ln.s -b8a00c4885b0dc53d68d7222ebd1f6ab sim/testsuite/sim/bfin/vit_max.s -3ce7a0eff604807b7fa94455af0771a8 sim/testsuite/sim/bfin/lmu_excpt_illaddr.S -292b2e46bbd93ed56f9f07e858d0e6f9 sim/testsuite/sim/bfin/c_ldst_ld_d_p_pp_h.s -4b46b111ae7002639909488f957ef2c0 sim/testsuite/sim/bfin/.gitignore -466ca66e6dbb6e90dcd48a1463bc7334 sim/testsuite/sim/bfin/issue83.s -29afc1fccf6b9388d4776c8c49f4504c sim/testsuite/sim/bfin/algnbug2.s -41fdd5f25693c871cc06fb37ec124088 sim/testsuite/sim/bfin/c_dsp32mult_pair_i.s -c6102e6b089e764bde2cc83307e5cdf3 sim/testsuite/sim/bfin/c_mode_user.S -dce28f3f3eeeae0db0853e53f69ce6e7 sim/testsuite/sim/bfin/m9.s -4066d22018a2beb3021d5b1ea6005a5c sim/testsuite/sim/bfin/vit_max2.s -bcbde9b7a471ab4853444bad249838e7 sim/testsuite/sim/bfin/c_comp3op_pr_plus_pr_sh2.s -d492b75281b396c084734fb6a4773d31 sim/testsuite/sim/bfin/load.s -905359e217984f979eeadbe20d456226 sim/testsuite/sim/bfin/random_0016.S -e3a5af81976ec273432578d8caf8fbcd sim/testsuite/sim/bfin/issue257.s -1d9eab417c0f2bfaa83e6dfc7c386bf9 sim/testsuite/sim/bfin/se_undefinedinstruction3.S -28c8aab15730b6173d0da2f5998f36f3 sim/testsuite/sim/bfin/zeroflagrnd.s -2f609b6e1e1f3ea5496e2a364723bceb sim/testsuite/sim/bfin/c_ldstiifp_st_preg.s -00045a3c374df7c76408334895a311ad sim/testsuite/sim/bfin/c_logi2op_bitset.s -efd317fd9cc11b487e458c384e388304 sim/testsuite/sim/bfin/c_dsp32shift_lhalf_lp.s -aae33653deed7990feb13c09eb443e30 sim/testsuite/sim/bfin/c_dagmodik_lz_inc_dec.s -8644a0ff8a5db78cef4c402db4d1aceb sim/testsuite/sim/bfin/a8.s -4f8a6f204dd652a7a1d47b4831982731 sim/testsuite/sim/bfin/c_ldstidxl_st_dr_h.s -616889f64c1b2ca5cae92d9bdf68c188 sim/testsuite/sim/bfin/s17.s -f9d495db33be7dec4f10e7aa582dc68e sim/testsuite/sim/bfin/lsetup.s -e118f3053f58ec2688b284bd4201b49c sim/testsuite/sim/bfin/c_ldstpmod_ld_dr_hi.s -22dbc2fcb1b2a65fb9751dbe04cf64cc sim/testsuite/sim/bfin/c_ccflag_pr_imm3_uu.s -9ccb935d989a81b04d4ceab4e10f4413 sim/testsuite/sim/bfin/c_dsp32mac_pair_a0.s -71cf641d92dff192c2f749f7925bfe86 sim/testsuite/sim/bfin/c_dspldst_ld_drhi_ipp.s -c598b74a3e43e02cdaa3c0f0454bc488 sim/testsuite/sim/bfin/c_ldstii_ld_dr_xh.s -3ed922295458d8cc65145276fb69d37a sim/testsuite/sim/bfin/c_ldst_st_p_p_pp.s -7c561c7c57307215d807406b9b3114bf sim/testsuite/sim/bfin/c_seq_ex1_raise_brcc_mv_pop.S -2042f6af6a81c43df0f43c51909ea8f9 sim/testsuite/sim/bfin/s2.s -0bb0a422e58ba903e7d2f7af6f49160e sim/testsuite/sim/bfin/math.s -2b9f699a18c13953ab0ffde4fdddf032 sim/testsuite/sim/bfin/double_prec_mult.s -e5ee894fb6f60c25f7c0031c0c617824 sim/testsuite/sim/bfin/c_cc2stat_cc_av0.S -f826d86590c3e73ee7d923ba5f17365e sim/testsuite/sim/bfin/c_dsp32shiftim_ahh_s.s -4dc84b9ef6ab0ec745b5759998154fff sim/testsuite/sim/bfin/c_dagmodim_lnz_imgebl.s -75b0420469584da365a394464db6b89a sim/testsuite/sim/bfin/c_ldst_ld_d_p_mm_b.s -e215c346df0fb80804d90cc3b19c6a11 sim/testsuite/sim/bfin/c_dsp32alu_rrpmmp.s -b3a16ab3a2c0798f1dfeec4518932a10 sim/testsuite/sim/bfin/c_dsp32alu_rh_rnd20_m.s -9febdf1b81f79e26ff69db6936429036 sim/testsuite/sim/bfin/stk.s -39aa5059d14ae39045b683ebe7baac92 sim/testsuite/sim/bfin/c_ldstpmod_ld_lohi.s -0c4e75fba47834d73b3c67a6de2738dd sim/testsuite/sim/bfin/c_dsp32mult_pair_s.s -adb4a45e5b38761e203ab20e11fb974d sim/testsuite/sim/bfin/c_dsp32mac_pair_a0_i.s -4a58de8d4475225098e35fd33ce47653 sim/testsuite/sim/bfin/c_dsp32alu_max.s -552e12c388e236d1aecaa209197f5437 sim/testsuite/sim/bfin/se_rts_rti.S -7b13694e6fc9226e3d6ce052b7b1cb2a sim/testsuite/sim/bfin/s4.s -f7724cb439687f74863ecefa40ce5fb7 sim/testsuite/sim/bfin/cec-raise-reti.S -33c2d37f1f8385abae74c8de03388215 sim/testsuite/sim/bfin/c_dsp32mac_pair_a1a0_is.s -b7c5440603cc7cc1e152a0d3c314df39 sim/testsuite/sim/bfin/c_dsp32shift_pack.s -70dcdf848f906bffa857dc2015575f2b sim/testsuite/sim/bfin/c_multi_issue_dsp_ldst_1.s -14f70cc3025d8b34ad3f20ad353a574c sim/testsuite/sim/bfin/abs-3.S -ee264ec13af3574451d47688fc8e045d sim/testsuite/sim/bfin/c_dsp32mac_pair_a1a0_s.s -a03f34c39c8412197f8e51b848c7db34 sim/testsuite/sim/bfin/nshift.s -e65f27e13032bd70344b5f4ca2f4e3d1 sim/testsuite/sim/bfin/usp.S -db33260146534315ba5d510fe2dcb2ae sim/testsuite/sim/bfin/c_ldst_ld_d_p_mm_xb.s -bdd8697f19e73e79c6205238a40f6675 sim/testsuite/sim/bfin/c_seq_ac_raise_mv.S -b6d0b6f211bef5f69a744768da75a3a9 sim/testsuite/sim/bfin/s11.s -7b7d3fde47800d56c0467840607912e6 sim/testsuite/sim/bfin/c_dagmodim_lz_inc_dec.s -58559c675228662da9b82de11aece697 sim/testsuite/sim/bfin/c_ccflag_dr_imm3_uu.s -6f5b2337dfe7093c79542cdb7ea6996d sim/testsuite/sim/bfin/abs-4.S -25ecaac002a2b3c1b1f10850085222f2 sim/testsuite/sim/bfin/a22.s -0c51ec21092eb2e02382247ad5f3a59e sim/testsuite/sim/bfin/pushpopreg_1.s -75457727294b7dd0694fe41b254f2f66 sim/testsuite/sim/bfin/stk5.s -58254c522cb851429d92d1aa925f7d09 sim/testsuite/sim/bfin/c_loopsetup_preg_div2_lc1.s -27f25e3dfcbcc4e7b03da586777acfb4 sim/testsuite/sim/bfin/abs_acc.s -d6b458f69bce090e99f02a946dbd8924 sim/testsuite/sim/bfin/c_alu2op_conv_toggle.s -4515825db056b9c6481c8547b8f292a6 sim/testsuite/sim/bfin/a23.s -14801ca89c7161fa491f5ccd06c62570 sim/testsuite/sim/bfin/c_ldst_ld_d_p_pp.s -8ad9f6f0f793abb42eabeafb47f543cd sim/testsuite/sim/bfin/s9.s -f8db5917fe683888b621431324d6ef59 sim/testsuite/sim/bfin/vec-abs-3.S -dc280850768a497ef970f73a05ff8419 sim/testsuite/sim/bfin/random_0011.S -7ad1e5ed9f87fe9c333b65ca1cdf8b0b sim/testsuite/sim/bfin/c_regmv_imlb_dep_nostall.s -86090ee34a3fa27f1fb55d8e8d9aa8e9 sim/testsuite/sim/bfin/c_dsp32shiftim_af_s.s -84673e70c29a76ffd74b8532d0c24afd sim/testsuite/sim/bfin/se_bug_ui.S -caca5b6e2138d1b9f7954386104b7fcf sim/testsuite/sim/bfin/c_loopsetup_nested_bot.s -a38a4e8e7c161c39b496111d6dbfb345 sim/testsuite/sim/bfin/c_dsp32mac_a1a0.s -3069ac597b0958fb2982e898eb77b18d sim/testsuite/sim/bfin/issue175.s -1c87b664e3f3279f72643406b4341180 sim/testsuite/sim/bfin/c_dsp32mult_pair_u.s -aedc91ce9acd3f98bf4ae2c3a3b3b17c sim/testsuite/sim/bfin/c_dsp32alu_rh_rnd20_p.s -18e3172d8ad33e233ae2727d86026942 sim/testsuite/sim/bfin/c_dsp32shift_ahalf_rp_s.s -6fd0e5ff86f7dc846047f4db00af5cd9 sim/testsuite/sim/bfin/s12.s -ad0e4399285844ab1bd66509723b7861 sim/testsuite/sim/bfin/c_alu2op_conv_mix.s -5a7cecbb4ee6db24bad8d79bb817971e sim/testsuite/sim/bfin/c_dsp32mac_pair_a1_i.s -95674bff475f3a7d70e51e2b045aea0c sim/testsuite/sim/bfin/c_dsp32shift_expadj_r.s -27aeb2d0d0cc628b62f97d05cad6922f sim/testsuite/sim/bfin/issue123.s -32645fab003ee956b9b7d4c31636c5d9 sim/testsuite/sim/bfin/10799.s -8bd946e6222f132be930da837416d73d sim/testsuite/sim/bfin/se_regmv_usp_sysreg.S -26677d6c22a4bf258143094ea7562ff8 sim/testsuite/sim/bfin/m15.s -5ecaf1006e4538f847fb254c749238d3 sim/testsuite/sim/bfin/mdma-skel.h -25d69367eb66a4f38be9e8e1e1f801b9 sim/testsuite/sim/bfin/vec-neg-2.S -ec2874c803c864b51d032052e83855fe sim/testsuite/sim/bfin/c_dagmodik_lnz_imltbl.s -19b4f5b1ab5013d05fac7b0e0b646a62 sim/testsuite/sim/bfin/c_dsp32shiftim_ahalf_ln.s -f58b8f9806b1e0865796d1fce45f8ad9 sim/testsuite/sim/bfin/abs-2.S -dfd2465416f06504f716df3fb82de552 sim/testsuite/sim/bfin/c_dsp32shiftim_lf.s -fe76fdee471453bf806efcee9c5c02f8 sim/testsuite/sim/bfin/c_dsp32shiftim_ahalf_rn_s.s -2285e4906f3488a812c5f791e8efa6c9 sim/testsuite/sim/bfin/c_ldst_st_p_d_mm.s -239b95c9f12d2e28a754f0877d0aed56 sim/testsuite/sim/bfin/c_br_preg_stall_ex1.s -01a0918b3f3ddcadb276b07fdaa298dd sim/testsuite/sim/bfin/mdma-8bit-1d.c -e08d72dc62d60e2c7fe9ce2cd0d9439b sim/testsuite/sim/bfin/c_dsp32mac_dr_a1_s.s -3d0baa5dcd9c1bfe91dea1be48376051 sim/testsuite/sim/bfin/c_dsp32mult_pair_m_s.s -70a6ddd301261040b2eb05510ae4e0be sim/testsuite/sim/bfin/c_dsp32shift_align24.s -e772b1483023e67a93b19ef33ab55505 sim/testsuite/sim/bfin/c_dspldst_st_dr_ipp.s -4432ed7982dc2829e960c58290b59c78 sim/testsuite/sim/bfin/c_cc2stat_cc_ac.S -c4086f10d7848f8880f0fd6c16448626 sim/testsuite/sim/bfin/dbg_brtkn_nprd_src_kill.S -ffbbf13b250921f57d6a39018f7ae7b4 sim/testsuite/sim/bfin/c_ldstpmod_st_dr_hi.s -eb04ff83aa89893fad9fb420200403b7 sim/testsuite/sim/bfin/c_ldst_ld_d_p_mm_h.s -8def403350e9e29d9b35e166272caa3c sim/testsuite/sim/bfin/c_dsp32shift_lhalf_rn.s -f2ed60841e06a5c61f999277f90132b3 sim/testsuite/sim/bfin/c_dsp32alu_a0a1s.s -f7448b694ba26341c8e503e78011f89e sim/testsuite/sim/bfin/c_comp3op_dr_mix.s -0ff0fe409db92c8d0badf61397879b18 sim/testsuite/sim/bfin/s5.s -0f7d4b5ea357c0150dabca21177b4085 sim/testsuite/sim/bfin/random_0024.S -012fc573c993e3a33fd7b88245fb0472 sim/testsuite/sim/bfin/c_loopsetup_topbotcntr.s -173cb343e29e8f011a2831a31d448331 sim/testsuite/sim/bfin/c_ccmv_cc_dr_pr.s -4c6f559d02b2ea5acbd7ed44df08464c sim/testsuite/sim/bfin/conv_enc_gen.s -2c14e7cc72eaaa089491cb43dc84075a sim/testsuite/sim/bfin/c_ldstiifp_ld_dreg.s -3b5de08e855694df6cddd2c1cbe2fbfb sim/testsuite/sim/bfin/c_dsp32mult_dr_m_t.s -b2205c58c96b5ff5024e3552f71e8bfe sim/testsuite/sim/bfin/c_ldst_st_p_d_h.s -0666f12c82388a805c28ba9679c470ae sim/testsuite/sim/bfin/c_cc_regmvlogi_mvbrsft_sn.S -90d97e84322c3c273aafe652c8e91872 sim/testsuite/sim/bfin/s30.s -2924896e7a9325528c40cdf572c0c988 sim/testsuite/sim/bfin/mdma-32bit-1d-neg-count.c -09b019c3402a7ed10605ee86b09888c2 sim/testsuite/sim/bfin/c_brcc_bp3.s -fab985e0e9679c87d643e16ffee3a5a3 sim/testsuite/sim/bfin/c_dsp32mac_dr_a0_u.s -6fd41f2722d0bfc282ba24571853be6f sim/testsuite/sim/bfin/b2.S -9571957f8ffec21648af949dfae2dfa2 sim/testsuite/sim/bfin/c_ccflag_pr_pr_uu.s -c68e7cc61a6104706788f5e3fd53a19f sim/testsuite/sim/bfin/c_ccflag_dr_dr.s -8252c13fe0e26b5c29077e178357a91c sim/testsuite/sim/bfin/c_ldst_st_p_p.s -8f153b66bb1c033950417364a932e665 sim/testsuite/sim/bfin/c_dsp32alu_rm.s -4fd07b28d259adebc742a51ce7336e56 sim/testsuite/sim/bfin/s1.s -4a2a6504660288612f545d1689c25c86 sim/testsuite/sim/bfin/c_dsp32mac_pair_a1a0_i.s -377ed2dad64de6bcdde8aacc3f48d26a sim/testsuite/sim/bfin/c_dsp32mac_dr_a0.s -a50df60b3582ceeb276eade1d2b8f477 sim/testsuite/sim/bfin/issue205.s -e05eb1aad0fe81a9c3fa95ec4b9ee43c sim/testsuite/sim/bfin/m5.s -bdc8778220ae9030bc95677933be0985 sim/testsuite/sim/bfin/c_dsp32mac_pair_a1_m.s -2ea489b4cb1b207f1081fbea5017ddb4 sim/testsuite/sim/bfin/fact.s -5fb4e1e5101c7bbb45a9016f8a4c4fcd sim/testsuite/sim/bfin/c_ldst_st_p_p_mm.s -d844457313f48c29c6584200c95697eb sim/testsuite/sim/bfin/s14.s -74fc82fda7404bd11707760bc17da82e sim/testsuite/sim/bfin/c_dsp32alu_rpp.s -7a731ee2fe087b1e16b92be5a322a15f sim/testsuite/sim/bfin/hwloop-lt-bits.s -0ef78e2dc1aae6e66ae0d075805625c9 sim/testsuite/sim/bfin/c_cc_flagdreg_mvbrsft.s -90d6859173bbd6dd571ab620ef569212 sim/testsuite/sim/bfin/c_dsp32mac_dr_a0_t.s -6a7bca360b713f72787e3277285ca337 sim/testsuite/sim/bfin/se_all64bitg1opcodes.S -833b4f1e8dc7656ca204c479b56b1f65 sim/testsuite/sim/bfin/c_regmv_imlb_pr.s -d5cdfc180a7d6a20c74063ade297679c sim/testsuite/sim/bfin/10622.s -8c4a4ca64d0f25672fbff1f4b7ce5fce sim/testsuite/sim/bfin/c_ldimmhalf_drhi.s -89eda52cc4dd92c4ae955a972917b0c5 sim/testsuite/sim/bfin/c_dsp32shift_lhalf_rp.s -55d5782f0ddae0e5d0d6a04f81bdd10a sim/testsuite/sim/bfin/stk2.s -6e58cbb2f4cad8aaee4c0d4fe4e1c8a3 sim/testsuite/sim/bfin/cc-astat-bits.s -ef799265fe588c7f3737dace1a1f31de sim/testsuite/sim/bfin/c_ldimmhalf_l_dr.s -abf904e963267fe7adeac1ddffc00433 sim/testsuite/sim/bfin/mac2halfreg.S -5667f67159cf3bceac54043d1456219d sim/testsuite/sim/bfin/c_ldst_ld_d_p_ppmm_hbx.s -3bfef672ab000548fc9e9ca989ab394e sim/testsuite/sim/bfin/c_interr_nested.S -f524cabf8fcc0dc66808d99cccfa61eb sim/testsuite/sim/bfin/c_dsp32mac_pair_a0_u.s -c18325dfd3429b6ce26d5776879acf5d sim/testsuite/sim/bfin/add_imm7.s -63fcd8aa9dd6fc02faf256e75ff5d9e3 sim/testsuite/sim/bfin/divq.s -5c32de9b54888abd2dbd86464a5351c8 sim/testsuite/sim/bfin/c_ldstii_ld_preg.s -7c79d08dcbe4826dbd86bffc27116b69 sim/testsuite/sim/bfin/f221.s -3d6f2cf38746b68dfe62ef453049a560 sim/testsuite/sim/bfin/c_dsp32alu_rl_rnd20_m.s -0045ce79ff1d2a3ceb7b0a9c018fe069 sim/testsuite/sim/bfin/c_brcc_kills_dmiss.s -19a760bf0b488e0a8e5d50718f2aedb2 sim/testsuite/sim/bfin/c_brcc_bp2.s -01602e752a490b7286397676e0589315 sim/testsuite/sim/bfin/c_alu2op_conv_xb.s -2dd92317aa10e2aeeab2f284e84e01fa sim/testsuite/sim/bfin/c_brcc_kills_dhits.s -afc38d644b79ce377b785d12be8ed004 sim/testsuite/sim/bfin/c_alu2op_log_r_sft.s -4119a2caf259d8b2b22b34dd55d2ff53 sim/testsuite/sim/bfin/c_dsp32mult_dr_m.s -4b01c80e5b2cfdc9bbb02c357a74184e sim/testsuite/sim/bfin/random_0007.S -00408bc8a429840740771c769430d46f sim/testsuite/sim/bfin/dsp_a7.s -3aa02ca344a6eb3f225b69e28ccab24b sim/testsuite/sim/bfin/c_logi2op_arith_shft.s -06fea8b22af2030a34ed35ec9e453209 sim/testsuite/sim/bfin/byteop16m.s -4fd049069abba7dd37815855dbcac743 sim/testsuite/sim/bfin/c_dsp32mac_dr_a0_m.s -dc337944dddd47d2cb8b4af548253c6d sim/testsuite/sim/bfin/c_interr_timer_tscale.S -7ec40bae10f95a00687dff3e99626107 sim/testsuite/sim/bfin/c_dsp32alu_aa_absabs.s -e567889fd763c41c603953360216725f sim/testsuite/sim/bfin/c_dsp32shift_a0alr.s -7231e0d400de88be56af046f605e1d01 sim/testsuite/sim/bfin/se_loop_mv2lc.S -8072bda60ba65e3a12e30ef44fe766eb sim/testsuite/sim/bfin/c_alu2op_divs.s -8a31d31b5465c4a06ca4e3d59d9aac64 sim/testsuite/sim/bfin/c_dsp32shiftim_af.s -4398f3953291022bb7a9481896fe92e3 sim/testsuite/sim/bfin/testset.s -94d4074619c9f9c7130895ad3f8db837 sim/testsuite/sim/bfin/add_shift.S -a52cded4efdca5072c44fe9eda94d582 sim/testsuite/sim/bfin/dsp_s1.s -a5eb7e3d534fb050dc64b923525fa227 sim/testsuite/sim/bfin/cir1.s -6f10d0bd1e1af8552ec22b8f0b60a890 sim/testsuite/sim/bfin/a26.s -31b532722133633c988cdbdcad21c889 sim/testsuite/sim/bfin/dbg_tr_umode.S -ce20453df53659708827f31015999c73 sim/testsuite/sim/bfin/se_event_quad.S -9b2b0c6891120209c99c8a4b9872da01 sim/testsuite/sim/bfin/c_dspldst_st_dr_i.s -71f9356b8ffed1f9e97251b068dc2171 sim/testsuite/sim/bfin/mdma-8bit-1d-neg-count.c -64478ad965c272969a99a2e1c551cf96 sim/testsuite/sim/bfin/sri.s -0dd8f3b79fdde6e24b8f3b0dd3bae8a5 sim/testsuite/sim/bfin/c_alu2op_log_l_sft.s -777284035c8b07cb4482758e05f061fc sim/testsuite/sim/bfin/fsm.s -bc43b189627188ec4cae8d67f4893193 sim/testsuite/sim/bfin/c_loopsetup_overlap.s -03e73abe7cfa4be65b424c6ae17dcd08 sim/testsuite/sim/bfin/abs.S -b7b71f0aa7e8dd0ba134ab420d079655 sim/testsuite/sim/bfin/c_ldst_st_p_d_pp_b.s -58f27e5aa0e3ca0414b67c1298f1e4aa sim/testsuite/sim/bfin/c_seq_ex2_raise_mmr_mvpop.S -4e3f3b2317ab7b109a784c6bdf2e7a68 sim/testsuite/sim/bfin/c_progctrl_call_pr.s -36488551776dd1c9bb02634c949388b7 sim/testsuite/sim/bfin/logic.s -b2122d95582d1a7ab7c2d24168ffd279 sim/testsuite/sim/bfin/c_dsp32alu_rl_rnd12_m.s -c5b263008c222c94779326bb6ed293db sim/testsuite/sim/bfin/sign.s -7bf89ae823ebe0defbfe9bd327c7a6c8 sim/testsuite/sim/bfin/c_compi2opp_pr_add_i7_p.s -d25c0b8ff6061f085cfb51f40484fb1e sim/testsuite/sim/bfin/a20.S -76a6179e8196d0f5d4c577da74169eb9 sim/testsuite/sim/bfin/m17.s -93f68c7c8ee94d9b664e0b67063ebbb7 sim/testsuite/sim/bfin/a24.s -cbf0f936bdc235e62125570b35903219 sim/testsuite/sim/bfin/test-dma.h -680c67b3548dff22963d6f6c2fcf5102 sim/testsuite/sim/bfin/l0shift.s -72a0c0a8490db86af44875827d7cc77a sim/testsuite/sim/bfin/c_dsp32shiftim_lhalf_lp.s -ff5e8776979710247e6d4dc60ad22a93 sim/testsuite/sim/bfin/c_dsp32shift_ahalf_rn.s -f44834771977f97e0a37160e864cc237 sim/testsuite/sim/bfin/c_ldstpmod_st_lohi.s -13bd3576f0d5028e00fdec6c2b0da000 sim/testsuite/sim/bfin/c_seq_wb_cs_lsmmrj_mvp.S -da4aedf837292494d3dfa48e60d853b6 sim/testsuite/sim/bfin/issue127.s -918d068c7e3910733ae4d013b5cd4a1d sim/testsuite/sim/bfin/stk3.s -7d38cfafbfa9baf77e821fd03110c55e sim/testsuite/sim/bfin/c_progctrl_excpt.S -bb00a59be022ef27cdf64a1318b544c0 sim/testsuite/sim/bfin/c_dsp32alu_rh_m.s -c69827d917279239ca5eee21ade500d6 sim/testsuite/sim/bfin/c_dsp32shift_bitmux.s -f5471e98a28ce9e997932812221a079e sim/testsuite/sim/bfin/hwloop-branch-out.s -953b5b4f6bad638a52d7e9bff09a767c sim/testsuite/sim/bfin/c_dsp32alu_disalnexcpt.s -4b37b17f8310620e40e5bed04cbf34d0 sim/testsuite/sim/bfin/byteop3p.s -f134410861e1c60f35137b4b1feda370 sim/testsuite/sim/bfin/msa_acp_5_10.s -0d3dfdefad6fbcd95af51959b009736d sim/testsuite/sim/bfin/random_0014.S -ee9e741e55ba73a92588d6d86caadc86 sim/testsuite/sim/bfin/c_dsp32alu_maxmax.s -c65c1dfe2f3640b01035e17a8d1faa1d sim/testsuite/sim/bfin/random_0032.S -ba398a4a19fc48009b81eed9729d2b95 sim/testsuite/sim/bfin/se_loop_ppm_1.S -2bd089dd582cb290ddf0d64fee3d0c9b sim/testsuite/sim/bfin/c_ccmv_cc_dr_dr.s -b40be96b704ea54f53c2e4d5160519a6 sim/testsuite/sim/bfin/c_regmv_dr_imlb.s -2c24a99468d45fc815503ab25453de2c sim/testsuite/sim/bfin/iir.s -68b8dedf8af09307e98df6e4dcbce512 sim/testsuite/sim/bfin/a1.s -845494ca139dbc0c802fcf74a89231f8 sim/testsuite/sim/bfin/c_ldstii_st_dr_h.s -486a2039f7967291fb69c66f229ed256 sim/testsuite/sim/bfin/dsp_d0.s -c972d1bcdc76d3dd83efe358208dcbe5 sim/testsuite/sim/bfin/hwloop-nested.s -b7adbc71de765c9250f2ad39b9fbfe2a sim/testsuite/sim/bfin/c_seq_wb_raisecs_lsmmrj_mvp.S -6b7f4a1c29524d95d78cae8daba07784 sim/testsuite/sim/bfin/random_0001.s -4d574debf12dbfa859a21f5b5ea8525c sim/testsuite/sim/bfin/c_dsp32mult_pair_is.s -27dd8868bd2ead2c54c84619d2608358 sim/testsuite/sim/bfin/c_cc2dreg.s -b8e70271306ab95ce7383385f67c715f sim/testsuite/sim/bfin/cycles.s -02a3deebb7a758e3af2afea1d7eabb4f sim/testsuite/sim/bfin/c_dsp32mac_pair_a1_u.s -6c09e4fafe198fefd215c3b2fa7f79b2 sim/testsuite/sim/bfin/c_dsp32alu_rmm.s -ffbe3eec8e6df01edd5f425dec0d9f6b sim/testsuite/sim/bfin/c_dsp32alu_rp.s -2589820e7ed8dbb5e7051539d61027c1 sim/testsuite/sim/bfin/random_0002.S -dfbd526aaccd4a686ecfea445b1c3c13 sim/testsuite/sim/bfin/c_seq_ex2_brcc_mp_mv_pop.S -85e116d7e9d7f79e5e90fb70a6edf347 sim/testsuite/sim/bfin/c_dsp32shiftim_lmix.s -7fa9020e2c60a38bf342e7b130ae3a68 sim/testsuite/sim/bfin/c_dsp32alu_a0_pm_a1.s -f2428e30f045b3a5eee146ad3516a40d sim/testsuite/sim/bfin/c_loopsetup_prelc.s -988d13d459b44e0719e47d3290983ec9 sim/testsuite/sim/bfin/c_dsp32shift_fdepx.s -8a888d28e26316bfc8c1ba2af85ee252 sim/testsuite/sim/bfin/c_cc2stat_cc_aq.s -0b0eaaaf606184d86057a112c6fc7c9c sim/testsuite/sim/bfin/a10.s -1340100f92473f52a90194ef5ebdc429 sim/testsuite/sim/bfin/se_cof.S -cf16339ed4767c356b48f2d69da1b68c sim/testsuite/sim/bfin/m2.s -cfaa70abc5137db2344ad5771e7fb595 sim/testsuite/sim/bfin/c_alu2op_shadd_2.s -e3870c9fecda7cf9e76042bfa82638ff sim/testsuite/sim/bfin/random_0026.S -013009f48b5833e27dd266090bf8e896 sim/testsuite/sim/bfin/c_logi2op_alshft_mix.s -06fe99cf7afc3bb51c177962be73c4ee sim/testsuite/sim/bfin/c_brcc_brf_brt_bp.s -c87b30fe0f77b64239f6b47131fd85ea sim/testsuite/sim/bfin/c_dspldst_ld_dr_i.s -7cf7f5fc339ff885a2a520a2c4bacd6b sim/testsuite/sim/bfin/c_seq_wb_rtx_lsmmrj_mvp.S -a60989418c9f3db194d882c2143ccd97 sim/testsuite/sim/bfin/c_regmv_dr_pr.s -07371bb2a6d0102e2e177dc1560de422 sim/testsuite/sim/bfin/c_seq_ex3_ls_brcc_mvp.S -501e1fd75909e4170b657cefae77d432 sim/testsuite/sim/bfin/m16.s -35c2893e1734d5f9639e7f89af33b92f sim/testsuite/sim/bfin/se_loop_disable.S -0003c6a6de9ab79f51db98d63a8878fd sim/testsuite/sim/bfin/viterbi2.s -b3880da5b888f56c9a3eb7f19815974c sim/testsuite/sim/bfin/c_ldstii_ld_dr_h.s -c76b1ba6345be810071425c51b272f39 sim/testsuite/sim/bfin/c_loopsetup_preg_lc0.s -23e167a7238a5a1c85568a68a0c5f1bd sim/testsuite/sim/bfin/c_ldimmhalf_lzhi_pr.s -a1debf7cfdde8e7ee17fa6ce00a2f10d sim/testsuite/sim/bfin/c_dsp32mac_dr_a1_iu.s -2ba0fc05c52cf5c16ee0c7724c22ec2f sim/testsuite/sim/bfin/c_compi2opp_pr_eq_i7_p.s -d18090bc223248e21463ae5e53c68e4c sim/testsuite/sim/bfin/c_ldstidxl_ld_dr_b.s -ef39a36b3b64f18de73a0f37e0ccb300 sim/testsuite/sim/bfin/c_dsp32shiftim_ahalf_ln_s.s -057ccb2e2c4511efec2ab3ca4e6953a9 sim/testsuite/sim/bfin/random_0037.S -c12c93fda6fe2eeed8e5d11aeb4ec373 sim/testsuite/sim/bfin/issue109.s -3a88375eb9546ac49baf54ab8e823f98 sim/testsuite/sim/bfin/c_dsp32shift_lf.s -bd12fcd814a00cb1ead93562a6408525 sim/testsuite/sim/bfin/s3.s -8e21d6a9f8648f5755f0c545c603a2ac sim/testsuite/sim/bfin/c_regmv_pr_imlb.s -6e700c117e859345710d81590adf39d2 sim/testsuite/sim/bfin/cmpdreg.S -5503cc42351d439828f47aacfca4a3ba sim/testsuite/sim/bfin/dotproduct2.s -8e7813c161dde9e505a4c716a9f85433 sim/testsuite/sim/bfin/c_brcc_brf_nbp.s -b66136e773f49004230589eb30a8a457 sim/testsuite/sim/bfin/random_0021.S -384eb4f808cafbd9d923abefbb61efb0 sim/testsuite/sim/bfin/se_loop_mv2lb_stall.S -67329277f88dfe86a1ba8f33000b6e2b sim/testsuite/sim/bfin/se_brtarget_stall.S -a6bd29e4a3ebddaaeb02a11972cb28b5 sim/testsuite/sim/bfin/c_except_sys_sstep.S -edf967a6a74902e4d7e03506679b1218 sim/testsuite/sim/bfin/m13.s -906d010b0c347c8f9aae350d6884b647 sim/testsuite/sim/bfin/c_dsp32shiftim_ahalf_rp.s -98a64ce543f2ccc00d2318ef1ed95d8b sim/testsuite/sim/bfin/c_dsp32alu_rh_rnd12_p.s -9b3e5f6ede1bcd4d9beaeedaa98a0ca2 sim/testsuite/sim/bfin/c_dspldst_st_drhi_ipp.s -71a5cb8a4a7efc32e8fd125c4c246478 sim/testsuite/sim/bfin/b0.S -4dbfd6347d36dffa04331cc48dc22823 sim/testsuite/sim/bfin/a12.s -ee12c42104dbcfe9562c57172425c3bc sim/testsuite/sim/bfin/c_progctrl_clisti_interr.S -ba47e8b23399eb887c3a11ab507f43dc sim/testsuite/sim/bfin/c_alu2op_conv_b.s -be9816d7ae154b7210affc9b25c5aa09 sim/testsuite/sim/bfin/c_dsp32mac_dr_a1_m.s -188540971af41b094e50388e253abbdd sim/testsuite/sim/bfin/c_dsp32mac_dr_a1_u.s -dfa06376275772c4bc9ab17ee330e195 sim/testsuite/sim/bfin/c_ldstidxl_ld_dr_h.s -81a9744f66ec0886038aacebbf3cc40a sim/testsuite/sim/bfin/c_dsp32shift_fextx.s -95d67ce953ff9448149a1d0e789530ff sim/testsuite/sim/bfin/c_dsp32mult_dr_m_i.s -e0a8f327005ebf98cfbae855198e673b sim/testsuite/sim/bfin/c_ujump.s -7aa05af7b0cc82119f2b681e8ab98169 sim/testsuite/sim/bfin/s19.s -334d9f600c3135fb4c9b63f9ed8d5ded sim/testsuite/sim/bfin/c_logi2op_log_l_shft_astat.S -3f4dec6249ce30e3bb9a65d653118b1e sim/testsuite/sim/bfin/wtf.s -43c0db052badef4d0234d29d44f355cd sim/testsuite/sim/bfin/c_seq_ex2_raise_mmrj_mvpop.S -2de681208fe0b1b87cd46530ab13c745 sim/testsuite/sim/bfin/vecadd.s -803509c8c316b6803434416a4387b8c3 sim/testsuite/sim/bfin/random_0027.S -f785f5869cbf5940ee18b5aa3a52148a sim/testsuite/sim/bfin/c_dsp32alu_min.s -a2e41091aa23e034a78cae456b73081b sim/testsuite/sim/bfin/c_ldstiifp_st_dreg.s -6f4504ecc18a086047c696128e162283 sim/testsuite/sim/bfin/c_logi2op_bittst.s -a4cf8b2e6f0cdeb88e37967bb1e5b18a sim/testsuite/sim/bfin/issue118.s -87c13a445ebeeafd0560f6bdad2c57f0 sim/testsuite/sim/bfin/tar10622.s -56aaa9fde8d192903ffc383d23e838d6 sim/testsuite/sim/bfin/c_logi2op_log_r_shft.s -63b01f2dacdc587160e4fe49ede0ecef sim/testsuite/sim/bfin/c_comp3op_dr_or_dr.s -e199694da43f67682e6eb282fe956b43 sim/testsuite/sim/bfin/issue142.s -d1eae416a5aee58158d29353848d595d sim/testsuite/sim/bfin/c_dsp32alu_sat_aa.S -807f10cb013d7eaf8173eee2de2e5dcf sim/testsuite/sim/bfin/10742.s -038ae1a6188135762e0473477ee7b6b1 sim/testsuite/sim/bfin/c_except_user_mode.S -beda830ceceae2e090507bd23afc66e7 sim/testsuite/sim/bfin/c_progctrl_jump_pr.s -cf70c006279d347b6a8362785c605ace sim/testsuite/sim/bfin/c_ccflag_pr_imm3.s -aa10645e3c824974c092c7bc94faac0d sim/testsuite/sim/bfin/c_dsp32shift_vmax.s -1c2f680be0856eca64957b27251ec528 sim/testsuite/sim/bfin/c_dsp32mac_dr_a1a0.s -786ea14acabe08433d5e5ded79e8011d sim/testsuite/sim/bfin/se_allopcodes.h -93cd6112d65fa38047b5ec538e165bdf sim/testsuite/sim/bfin/c_ldst_ld_p_p_pp.s -374ba33694b1d3947f6fe225366ea2e2 sim/testsuite/sim/bfin/add_sub_acc.s -29ef7ae2f5926a96d0112a722358537d sim/testsuite/sim/bfin/se_stall_if2.S -208b72a075a321f8e8667de5ee0387f8 sim/testsuite/sim/bfin/s0.s -fb541cdb77bd0c6540a14fe01975c7cb sim/testsuite/sim/bfin/c_compi2opp_pr_add_i7_n.s -5b4b3c8947668b44024f7573aa41a3c0 sim/testsuite/sim/bfin/c_dsp32mult_dr_ih.s -8953c9b3a4a3a73b5e088672ce8deb2c sim/testsuite/sim/bfin/c_logi2op_log_r_shft_astat.S -0feb00720bffa776d70caf97aa04694f sim/testsuite/sim/bfin/c_dsp32alu_bytepack.s -09a42670f0771f52ace58abaea20cb4a sim/testsuite/sim/bfin/c_ccflag_a0a1.S -34ea43c33e3e477d696ac6f4cdf9ba00 sim/testsuite/sim/bfin/c_dsp32shift_ahalf_rp.s -3e5c0d2afb5b636cbed6e0b739854ec5 sim/testsuite/sim/bfin/c_comp3op_pr_plus_pr_sh1.s -725d2cea0a62b886976271d64de41f17 sim/testsuite/sim/bfin/c_dsp32shiftim_rot.s -1935c735f699cd85d12cbf2726cffada sim/testsuite/sim/bfin/cmpacc.s -556eb406eb6f36662b30960e38811be9 sim/testsuite/sim/bfin/c_logi2op_nbittst.s -768f0d6765fff4aa19866a801fd28711 sim/testsuite/sim/bfin/se_loop_ppm_int.S -0ebb89f98059ff6b25e6814ba2ff449c sim/testsuite/sim/bfin/c_dsp32mult_dr_m_s.s -ce3694f491fcc054dca897cc57c3ca6a sim/testsuite/sim/bfin/c_dsp32alu_minmin.s -318af4bbc5c475f84551d104d91bb7ea sim/testsuite/sim/bfin/c_regmv_imlb_dr.s -effb894269e483900b640d1e19dafaaa sim/testsuite/sim/bfin/c_progctrl_jump_pcpr.s -bc1fe58c2bc14bf3cfa813fc2f45fd92 sim/testsuite/sim/bfin/x1.s -480626af3232a6411208fcad0b0687e8 sim/testsuite/sim/bfin/c_dsp32mult_pair.s -b09590158cb4ba15ec32ecb44a251205 sim/testsuite/sim/bfin/se_undefinedinstruction2.S -f90933dbd04b9f8ddc056c02c87143e2 sim/testsuite/sim/bfin/c_regmv_dr_dep_nostall.s -8ac2a6c4e80fd758af687ead01c5e5b8 sim/testsuite/sim/bfin/se_rets_hazard.s -101f93a31646fc206f5e0eca780f551a sim/testsuite/sim/bfin/c_dsp32mac_dr_a1_is.s -526ba8281b1e407cefed889d3fdd2616 sim/testsuite/sim/bfin/c_dsp32shift_ahalf_lp_s.s -86044023b483f65e7f6d32195d7f470f sim/testsuite/sim/bfin/lmu_cplb_multiple0.S -c7c82a82957df8e3c222af4dcb894684 sim/testsuite/sim/bfin/acp5_19.s -8a98945ecba5894f2f51293671d684b5 sim/testsuite/sim/bfin/issue272.S -3f4525667bb9d582cd858325c6a5e5e2 sim/testsuite/sim/bfin/vec-neg.S -5cd9a082f7074be83ea26502adc4fb54 sim/testsuite/sim/bfin/random_0010.S -975e7a2fb1598eb10fd7322ce95935f4 sim/testsuite/sim/bfin/c_regmv_acc_acc.s -d350e9e60e4ec8d6afceb4ef21d5a666 sim/testsuite/sim/bfin/c_ccmv_ncc_dr_dr.s -3efc9149a0e2f9f07ea01fa4ddaedee4 sim/testsuite/sim/bfin/l0.s -0edad0d424279420153e3039fe68eff6 sim/testsuite/sim/bfin/quadaddsub.s -c657ad4c186b6224e353864dafbbb4fe sim/testsuite/sim/bfin/random_0013.S -ce16c8dc5618340ff79b5dd11ded0040 sim/testsuite/sim/bfin/s7.s -c367e567061381b947e716080b35776d sim/testsuite/sim/bfin/c_seq_ex3_raise_ls_mmrj_mvp.S -5b9727fb9b75bc8fdb919715a859e381 sim/testsuite/sim/bfin/random_0034.S -5241bb8f8324e142de91ffc57f1782bb sim/testsuite/sim/bfin/m12.s -91bb0956046070c73b36bdfc61a5d692 sim/testsuite/sim/bfin/c_dsp32shift_expadj_h.s -e357b66625cd9a92afb9aa1bb2b13b35 sim/testsuite/sim/bfin/c_comp3op_dr_plus_dr.s -fb40faee221d3a56d424f0508b51aaa0 sim/testsuite/sim/bfin/c_dsp32alu_rrppmm.s -74f4b10b6c9964b12d3c44b6a341d1d2 sim/testsuite/sim/bfin/c_brcc_brt_nbp.s -079198710777c3cc2cc618d9d1160078 sim/testsuite/sim/bfin/c_cc_regmvlogi_mvbrsft.s -6018cbf6675fed446310ac4aa8e55076 sim/testsuite/sim/bfin/dbg_brprd_ntkn_src_kill.S -ffdcea84476eb75625dcc1993c2e3c98 sim/testsuite/sim/bfin/edn_snafu.s -958ad19045957e69b955aee37ce5b6c0 sim/testsuite/sim/bfin/c_dsp32shiftim_a0alr.s -90f8ad210fc240758e6734d2e492c803 sim/testsuite/sim/bfin/random_0015.S -7e4431ab0a9d02222c01356205d18d02 sim/testsuite/sim/bfin/c_logi2op_bitclr.s -5ec8a64db6b00e60a7b1de82c2d6f62f sim/testsuite/sim/bfin/11080.s -97e5d29e86a168d09dddd1d8611890ff sim/testsuite/sim/bfin/c_interr_pending.S -4abdfcceb08a686a99a7b297868bc064 sim/testsuite/sim/bfin/c_dsp32alu_a_abs_a.s -43e4c93d9d3799f8ea7d7a5794cc0891 sim/testsuite/sim/bfin/c_progctrl_csync_mmr.S -103c5d4573562eb707d0f224bddb079f sim/testsuite/sim/bfin/se_bug_ui2.S -841ba18f69d34dbbef6befb553e6eeeb sim/testsuite/sim/bfin/c_ldstidxl_ld_dreg.s -2aa8a19946018e214cd1564e75f421fb sim/testsuite/sim/bfin/se_loop_nest_ppm.S -30aa9272252e64359cc656b4a65dda30 sim/testsuite/sim/bfin/c_dsp32mac_dr_a1_t.s -28407e3611fb7520c42f65dc14ad9f9f sim/testsuite/sim/bfin/random_0031.S -25e1ec261c1042d7613a31546e807706 sim/testsuite/sim/bfin/se_kills2.S -de0fcb790b43f09dcf45b8469ffef40a sim/testsuite/sim/bfin/c_interr_nmi.S -12e727fc55b386fa906466c244266707 sim/testsuite/sim/bfin/c_dsp32mac_dr_a1.s -02ea7710d7bdd57573b410035304ef77 sim/testsuite/sim/bfin/c_dsp32mac_pair_a1a0_u.s -18baca4faff420cfa71b64d1946390af sim/testsuite/sim/bfin/lmu_cplb_multiple1.S -128c82fe8e69af5da34b25ed0cb5e087 sim/testsuite/sim/bfin/c_dagmodim_lnz_imltbl.s -d976f6ce887a965241d16795343ab2b3 sim/testsuite/sim/bfin/c_dsp32shift_ahh.s -a1c11b6866b46807fda894f1720f91cb sim/testsuite/sim/bfin/se_loop_kill.S -ceca2bed9df225e9fa884a457775800f sim/testsuite/sim/bfin/random_0008.S -e7ea2b38558e7fa707c6d3b22b3af6df sim/testsuite/sim/bfin/c_progctrl_raise_rt_i_n.S -df4ad401b58e03100301ad8b42d6e90f sim/testsuite/sim/bfin/dbg_tr_basic.S -5cdc262c0a44c5047d78b664b8ea4c6b sim/testsuite/sim/bfin/c_pushpopmultiple_dp.s -0676d3413cfefad2f00ffea64028f0d5 sim/testsuite/sim/bfin/c_dsp32shift_expadj_l.s -a3b68914c39ae6c2d721133ff93d2800 sim/testsuite/sim/bfin/byteop2p.s -2a29e110be965db81d9044c135e73eaa sim/testsuite/sim/bfin/10436.s -7b8111a1958ac7ac0609e3ec19946402 sim/testsuite/sim/frv/cfadds.cgs -89a51e07a40a4e8f76ac296cacbb8363 sim/testsuite/sim/frv/smuli.cgs -c606963198b1685341b32e14a3384700 sim/testsuite/sim/frv/csthfu.cgs -6158542e4b6f47593521af161cbefcc4 sim/testsuite/sim/frv/nldqfu.cgs -40115dcc72d0b6f1b5b4701a63e94c83 sim/testsuite/sim/frv/cckne.cgs -475e50c7c92b7357b020583b574726a8 sim/testsuite/sim/frv/msllhi.cgs +4c7248db5cf675429de7783186fb86fe sim/sh/Makefile.in +4ab55a35c7007d58ee370d38587e6907 sim/sh/aclocal.m4 +65b8fa687500f8d7a3dcf284e5a898e5 sim/erc32/interf.c +5befbd2eda72cee6fbccfa9afba225b4 sim/erc32/float.c +5f869bbd123afc431bbd2efd2beadd72 sim/erc32/ChangeLog +13ee613f8d5c0eebd5163382b931abb8 sim/erc32/configure +79b3f19a4a961715ed1b3fc266e073d6 sim/erc32/config.in +ce58de7fe1b8736ff94d663cb47bcf4a sim/erc32/README.gdb +cbf5e46207bafb86563affc722d2353f sim/erc32/startsim +0360a6f97e4477e37b7ba6393307df83 sim/erc32/configure.ac +8d0b5212c0ce4ec7e01d67b407af3ba8 sim/erc32/README.sis +2c79e7e8f844ab6ad55b3dee031398a8 sim/erc32/sis.h +efde652aaaaab61476a6deafe1cedf22 sim/erc32/func.c +82f7f38c01f2f50cd751a05a402cc021 sim/erc32/help.c +96da038ad2d6f294cc0984785e0eac22 sim/erc32/Makefile.in +4ab55a35c7007d58ee370d38587e6907 sim/erc32/aclocal.m4 +72fececbe452af10d0adb31b037040dc sim/erc32/README.erc32 +9f2cbd625dfef51b3d1162ba9dbb8a4f sim/erc32/NEWS +90f8c1092fe8bee7f31ac5124013ba03 sim/erc32/erc32.c +0a81c2b42c8b9c94e093c49284500098 sim/erc32/sis.c +f19f199d5356cb8847fff9a574aa6b43 sim/erc32/exec.c +701e48314e76de78538a1e246a82d9b7 sim/cris/ChangeLog +5bf36bfd361dedf672ac95f9591ca3dd sim/cris/configure +4a141a5aee1e432372b6cb6497870bdb sim/cris/sim-main.h +fffb15accc65900089cb8463c6f36a2e sim/cris/decodev32.h +ee5ca7dd5e31a1a6cdd415c4e5a98f76 sim/cris/config.in +05007fed0b7c3193115bc1d98b88497a sim/cris/semcrisv10f-switch.c +c1a92cd109269792809a90b967d7bf35 sim/cris/cris-sim.h +ea565f2def8356f0f5c4af65acf36c01 sim/cris/mloop.in +028906a833f0cf4dbd6bf05bed2a73f6 sim/cris/decodev32.c +0647173450b3107fa2f38e8a3f3b9423 sim/cris/arch.h +64015d1e01821318089bc161f156176a sim/cris/cpuv10.c +f012a664fce1effd429770b6814a1575 sim/cris/cpuv32.c +4a86342e3e7cdadb80d8398bcd6b2872 sim/cris/configure.ac +04dd71be3bdc89a9ae08385a8f977acc sim/cris/sim-if.c +1d94f098549cac9ba28511767a300f03 sim/cris/traps.c +b7fb6ae11d0c8ac9288b93eac98dae04 sim/cris/cris-desc.c +e18e87390d55e4792aba35a0bbf8998c sim/cris/dv-cris.c +127144caf63db89aeb449005d3b41c23 sim/cris/modelv32.c +64e4925f56d5931f8d7ab7f5994de15d sim/cris/cris-desc.h +73c70bb5fc919899e13081af9e67d99c sim/cris/semcrisv32f-switch.c +1134a20eeb727eb544e2246d2c7be6eb sim/cris/rvdummy.c +f4e12038dacd0486ba249f3264a33fa9 sim/cris/cris-tmpl.c +30a59ca73c1d6ce4e4ce282648afb8f8 sim/cris/dv-rv.c +45a989cbad9fd6c62e4da5ebf737d5cc sim/cris/crisv10f.c +8ff136ca60535194de7456ed6fcc0ba8 sim/cris/Makefile.in +4ab55a35c7007d58ee370d38587e6907 sim/cris/aclocal.m4 +ee69ade92a80ad91c6a25461c6597f0e sim/cris/cpuv10.h +3862fe455668b160c20024a84c377528 sim/cris/cpuv32.h +45c5c8a2c1f1e19a357ea53993942206 sim/cris/arch.c +d4febd063160045cfb6ea21890c9e113 sim/cris/crisv32f.c +5cf8496c2afee3f61deab03fb8531458 sim/cris/decodev10.c +f482ce9b11bcec957bfbd4c1de1d17d3 sim/cris/modelv10.c +1805bc844668e78963f53a66c079ef9b sim/cris/cpuall.h +7aba2b5ef465b42106358e6097e8c37b sim/cris/dv-cris_900000xx.c +ee15635dcdfd010c85d29fd25af69868 sim/cris/decodev10.h +c46d5a2d7b5677a3ded35b45802ae624 sim/cris/cris-opc.h +12aa14bdbd4a70e93577fad3b9f30f31 sim/m68hc11/ChangeLog +ffb0ad065e0dd9b8f5cc698ac2f98b90 sim/m68hc11/configure +ace7f40fce3031098e921cf3605be191 sim/m68hc11/sim-main.h +5612be8e02af3bf837bf725454d50414 sim/m68hc11/config.in +f7c2c15c5a7ed98b81792f4ff4c66da9 sim/m68hc11/dv-m68hc11eepr.c +339a5c2de945764c0a287587ff479a49 sim/m68hc11/dv-m68hc11.c +d47b9b3a4d21feae3f0ce0df4ac597ec sim/m68hc11/emulos.c +e53d5369f7f8acce993d8262559ab84f sim/m68hc11/dv-nvram.c +773ff3202c3af51c9e5e80f3f28addce sim/m68hc11/interp.c +363a6056173b9df8bbd1c15837e51465 sim/m68hc11/dv-m68hc11tim.c +25db879fe7da456e6a213895ebcc1017 sim/m68hc11/configure.ac +b72ae5b15fb4d247d9097757fb12075a sim/m68hc11/dv-m68hc11sio.c +e42e83357676a18090c976833c883867 sim/m68hc11/gencode.c +ca9221b38982779e9edb6ab5478212f5 sim/m68hc11/interrupts.c +904800917fa5fafe907713dd9f40966b sim/m68hc11/Makefile.in +4ab55a35c7007d58ee370d38587e6907 sim/m68hc11/aclocal.m4 +ee5b1190ef55cd97b6498052b3666373 sim/m68hc11/dv-m68hc11spi.c +64cf27bbcbddd4f1a1258a39c9c7f077 sim/m68hc11/interrupts.h +bb66376c828c788ea84b531198013cfd sim/m68hc11/m68hc11_sim.c +f1205db25965eed924a06c3a75d48480 sim/ppc/sim-endian.h +060d2716b0ae998206bce594c507691b sim/ppc/cpu.c +fc7a3358676fc9ff26e3cd503ee1c462 sim/ppc/gen-icache.h +b3bf6caa11a79244273b2f50a3b5a5bc sim/ppc/vm.h +820ecce94ba5cc4b5dedd30bbc07e36b sim/ppc/sim-endian-n.h +01991a6ffa05c90b7f2695e998a9a4fe sim/ppc/psim.h +eab5f7804f4041ff963a48f3e6c67711 sim/ppc/tree.c +4950f8682b5dbfeebd61feff873ca2c6 sim/ppc/sim_callbacks.h +82701b2c4f7fc8528a745be30ccabc6c sim/ppc/gen-idecode.h +0803bec27a88fc019b6b1bfe8dbf9dd2 sim/ppc/dc-test.01 +a730b218d6ccba1672810feeb471dd91 sim/ppc/misc.h +9386f74bff5fd3a25d4cea3f6cb22bda sim/ppc/.gdbinit +9e8810a61d4a6fa162efcf8c18061f26 sim/ppc/emul_generic.h +c9161f846ee1137f57c103c9b50b8010 sim/ppc/ld-decode.h +e20454a4f2176a75ba78cd001bee2026 sim/ppc/hw_phb.h +462e1676a73f1ae21bcb95e1e79fe309 sim/ppc/hw_cpu.c +1eaa5fbb2ef6b2bb40f1c77afd8caa03 sim/ppc/ChangeLog +e1ede2ecda0c3aa6642f0150c3119729 sim/ppc/dp-bit.c +27bb4b315b610c06d3d617036128ea66 sim/ppc/configure +92d51a0cdcad333fb57f115236e935d7 sim/ppc/emul_bugapi.c +64d7358582aa081f81c570e789046b73 sim/ppc/words.h +37c4c3f46ce5a8b41b91577c9aa8f924 sim/ppc/ld-insn.c +b9249eba98032433f10d0f0fb1cbabfa sim/ppc/bits.c +110b14820536fae4ab9af5f5a106b222 sim/ppc/emul_chirp.c +3177c0ec5341f19e21b76f11cbd5a7bd sim/ppc/filter_filename.h +48c6b8643d82c832a08fc5aad6c182c3 sim/ppc/sim-main.h +263388c29a42390fe959614ade29633e sim/ppc/dgen.c +70f65f76fd8dfe5d4b30379d840ee025 sim/ppc/INSTALL +7ef1469cfb0809ffbafba1a6f43cc98b sim/ppc/ppc.mt +71d98d8e0be2632eb25e79bb4f7982b1 sim/ppc/hw_pal.c +ee19c4a4b84cad5f9cd916356307b90b sim/ppc/hw_core.c +e23e8c6cddd60e621d2597fcc485d2c3 sim/ppc/config.in +d23b4930c3ef75827e0479c9eb1e3620 sim/ppc/corefile.c +9b98a3220b34ead882ebd988dec298a4 sim/ppc/RUN +8b9db4f5ac7dc75139c00f152bbe72b3 sim/ppc/e500_expression.h +fd5f1a3237245e88494ee13149097c33 sim/ppc/gen-icache.c +36407106664516616438a622329f6f1c sim/ppc/BUGS +f44995cc946fdb69111742cf3884e567 sim/ppc/altivec_expression.h +d3c236878c5c39d9ea37028e4a51f8ef sim/ppc/corefile-n.h +d853c371650b4299478b6e4dcbc172f6 sim/ppc/dc-stupid +5146ee46bebabf8c97f85f5984cdb349 sim/ppc/bits.h +03204c8094189b8176422cddd9e22af6 sim/ppc/gen-model.c +01edc9a759d4ef4944bfa0c0e6279de4 sim/ppc/debug.h +4cb3d54ea2a86e64c7e2ef3386b46fef sim/ppc/emul_generic.c +a30dd60f7f0d330110eb95f3479c45af sim/ppc/pk_disklabel.c +484234eedfbb69301d0bec4acf47f8db sim/ppc/cap.h +43733f1ee393d4a332adfa4f4cfdeb49 sim/ppc/hw_cpu.h +477642f7d41346704a746fc8c65faa7d sim/ppc/filter_filename.c +7ae2d45d2858087f5f9efc56f6bebca1 sim/ppc/lf.h +bfd43dd96dabce665dfe37a7957fc1a2 sim/ppc/mon.h +032ba1a0336356bc3e534edb0bc85195 sim/ppc/configure.ac +29a6c18565b406e370f5d3fce8278714 sim/ppc/ld-cache.h +b8a327a67a1e3f597b26d3e6c23eaa3c sim/ppc/double.c +df6ce308b6164a82f216e6dc70667ced sim/ppc/gen-model.h +b535b6237143276e69f6f3215e3c1b01 sim/ppc/gen-semantics.h +8e019657ad96f38584486921e012ceee sim/ppc/events.h +37e77a0546a64ed172e6748b4204494b sim/ppc/registers.c +0370bebc8a86e1d18dc5bfcd5c7aaf63 sim/ppc/psim.texinfo +4888acb242b870aa0e825e9e54aa1298 sim/ppc/idecode_fields.h +1c42372728ec198fcf8ab57a40c64bb1 sim/ppc/os_emul.c +c9b315da4a3b61f05e47d495feb68e65 sim/ppc/emul_unix.c +d32239bcb673463ab874e80d47fae504 sim/ppc/COPYING +a9130e86c5f02ec5dfb1862d7dc0fdf0 sim/ppc/device_table.h +832e30475a8bc9b8322b1bc1c7236d87 sim/ppc/gen-semantics.c +305357a3d264db7fa8f2b88bfe07ca74 sim/ppc/hw_glue.c +860c88b34282fc65e8d99dcca5cc7809 sim/ppc/gen-idecode.c +a4d0e23b18c60d2aa8c9624bd59a0d14 sim/ppc/sim-endian.c +ff28ed7f8ae18dca9b6db08f8944d882 sim/ppc/std-config.h +61af03f8b0fc6fa655dc643e3de2552a sim/ppc/device.h +6e2deba755e78892b1c7de99f789346b sim/ppc/filter.c +386b3912ba8b7e2502e9b6a3335dab80 sim/ppc/basics.h +58dd84b3f0e04bfd136e905198d27bd1 sim/ppc/cap.c +e3359547c5ecb3630e3e64bede3a2292 sim/ppc/gen-support.h +49a106de941fa3e628121e58d93b3cc7 sim/ppc/igen.c +35b4efd703cb6ab5cd3fa84f768498ce sim/ppc/os_emul.h +54873606cf06822b22427f389db7f553 sim/ppc/ppc-instructions +b97379b9215f181903e3bf129f977339 sim/ppc/hw_disk.c +cc3fca83551bf130b8eb6a464f875b31 sim/ppc/gen-itable.c +12eb02844c89d0486aafcfdccb6e54e8 sim/ppc/emul_netbsd.c +03187ec858df32e958e52006147225ef sim/ppc/options.c +3d1bcfb1e025467f91084fb8c21c08c8 sim/ppc/interrupts.c +f7974df275da00c2ea7f3b7f0da9da7c sim/ppc/debug.c +1c58559fcfbf348bafd0056552c07b86 sim/ppc/Makefile.in +c030f461bd59ff9d54b1f4d80e0801e9 sim/ppc/main.c +9aa415ff145af3aa296d7cca03eeaf35 sim/ppc/gen-support.c +d632a1f4134488cc306b566a3774b068 sim/ppc/hw_ide.c +6d149d2811d92b3f3d5001f227fc6043 sim/ppc/igen.h +929c1928e4c7e7795c4c223554a7467f sim/ppc/device.c +d048ebe7782c7399621e5fb44e6bef1e sim/ppc/mon.c +e9f6775406bb18b2cce429bcb5a90aae sim/ppc/misc.c +2d0f82b823fe273d046cfc337fe7c148 sim/ppc/vm.c +d41d8cd98f00b204e9800998ecf8427e sim/ppc/aclocal.m4 +cb29959db2f92c8b4323cc8e8d4d53d0 sim/ppc/inline.c +ce94f94481dc7b857345a34aff0491a5 sim/ppc/emul_bugapi.h +585f396f24a29eeae1e0ba6b2102d79c sim/ppc/cpu.h +f6adfdb8a6e224ba5020d428bbc41bae sim/ppc/ld-cache.c +a4cea49135233c5014ef55d082938943 sim/ppc/e500.igen +f998efbd32dfc51a5783d7be645cd31e sim/ppc/idecode_branch.h +d2fb5d6bf9d092f12e1c4d4c7e61f8c5 sim/ppc/hw_nvram.c +6d0e6a220f4c3c56a0417195467ab55e sim/ppc/altivec.igen +01d14e36b64b3d5e9b51a9948526c417 sim/ppc/options.h +359cea2dabc62b66517ee30e75151a7e sim/ppc/inline.h +d245825bb9584ccf2a8300d55d3957a2 sim/ppc/gen-itable.h +9acdbec7116b5f3c0f505b021f497efd sim/ppc/events.c +73ce8143a1371999fba4c23ae6c1b886 sim/ppc/ld-insn.h +4f90dac25651b90137e08d0dc8b280e2 sim/ppc/hw_register.c +794c3a80f3fa09403d954ec1543ea187 sim/ppc/dc-test.02 +d83e9281376698706bead364f2bc0c9e sim/ppc/emul_chirp.h +52a8a7147d93abe4c704f3130b934f5c sim/ppc/hw_shm.c +f7189a246dd42f356375e3fc0fba2c4c sim/ppc/ld-decode.c +92e1f91968d881bd6a34726b5d7ad38c sim/ppc/hw_vm.c +1d48136998451858e9ce0a55d06ff691 sim/ppc/hw_iobus.c +cbc18f080cae61f272af1c475bd6e144 sim/ppc/vm_n.h +919bcf59528202fd52436649b6d82683 sim/ppc/psim.c +23b263bfd0a912a10aaf9d40923b9f0f sim/ppc/hw_init.c +05dcd0542ec8c3b2dfca3a1ad711eeda sim/ppc/gdb-sim.c +7936772f0485b1d307e5d6a7a43d1afa sim/ppc/hw_sem.c +4552751230a67356fbbde89e80dc3aa8 sim/ppc/hw_phb.c +f8f5e5da8189be2628f0770270fe2530 sim/ppc/hw_eeprom.c +adaeff1ea6db4fbb10072a552782ceb2 sim/ppc/hw_opic.c +d29565bbd8523108e19d7da9287dcc62 sim/ppc/hw_trace.c +dc37cdd7e31ba5b4cfb958fa4bdde34b sim/ppc/corefile.h +0df7762c7e912aa8545b9d95310a5959 sim/ppc/e500_registers.h +8d219ea9c96d9d4baa4329926e2f406e sim/ppc/sim_calls.c +fb9be7146f57278cf5dec22d4c5ec909 sim/ppc/device_table.c +eeaed7a804f4ef89fc28d42d86de6aa2 sim/ppc/hw_com.c +dfbacfc1474588e6305d5f3c016d7f10 sim/ppc/interrupts.h +8fcddec95be13d3be8c25f9c3c68dba8 sim/ppc/registers.h +4f8472f889e00629c1b4bfcf88bab21d sim/ppc/hw_memory.c +188e7c8685bdf08ea757ab738f97dacd sim/ppc/filter.h +2ec7edadb9856ea12bb4ecb5ee98fd83 sim/ppc/README +18e4d7309218e49d8a824f9a5d2daf65 sim/ppc/ppc-spr-table +696656812b714297578ffc761fcc81dd sim/ppc/ChangeLog.00 +55ca817ccb7d5b5b66355690e9abc605 sim/ppc/COPYING.LIB +d5f8b9577bda5e425e8a4e197bbb6e70 sim/ppc/tree.h +cc82ede0335a4e5ed3867e1dd5f9dae2 sim/ppc/emul_netbsd.h +672ead91f129cd55c9fcf00cafd71791 sim/ppc/idecode_expression.h +4060774a7eb4ecb48f976edb398ce32f sim/ppc/dc-complex +496f8527ffce7739e15730ff11ada160 sim/ppc/hw_htab.c +84d8880ae315c1aece9fa57567e3851a sim/ppc/dc-simple +47924a670d88e248786278852e0fdec3 sim/ppc/lf.c +4f72a55e0274226351660dfc722eacac sim/ppc/altivec_registers.h +1128a696383d5f5a536d86720b9e3f21 sim/ppc/table.c +ac8af167df5e2cc9c80ab1bb813764bb sim/ppc/emul_unix.h +617c363f63c7bdcfb1a986bad9342b9e sim/ppc/table.h +dbfef4c712c7087215cd7f121a3f6fb2 sim/v850/ChangeLog +f192d6509ec6a5269875ba54fbc70e3e sim/v850/configure +af2c83244a91504979f6a0b77e9f6219 sim/v850/v850-dc +5be894a40ad061ddb10cc74af505e506 sim/v850/v850_sim.h +26161fca5d747178c7cb1ea21cf3ee39 sim/v850/sim-main.h +cb3eba25934045ad2ee17717f461372a sim/v850/config.in +f1c7e4031cb70d8722addad1f2ad8612 sim/v850/interp.c +665d05b23d15bcf1131f13acc3707dd5 sim/v850/simops.c +80475fe714bbd506495e201900761d40 sim/v850/configure.ac +bf412bebbef498475eb7982ac5757251 sim/v850/Makefile.in +4ab55a35c7007d58ee370d38587e6907 sim/v850/aclocal.m4 +071749598bc079bfc57c77b17e484809 sim/v850/v850.igen +343bbcec33069e5661e14fc16b9adf16 sim/v850/simops.h +385fb35f9e477273631f3b9f0bd76935 sim/igen/gen-engine.h +e57b909b7032a40b67c8c69a933aa921 sim/igen/gen-icache.h +be035458033740f8a6acd8a307a09ab4 sim/igen/gen-idecode.h +d9ceff528152d56f4853b788a11c3245 sim/igen/misc.h +e98ae396ff39cc9ce56136b982143583 sim/igen/ld-decode.h +b8c05b598d352f48e006e6ce8c395743 sim/igen/ChangeLog +a8455f5d2b980e9b3eb45b0724691733 sim/igen/configure +2161e295341bb7378ec9f495ffa1247b sim/igen/ld-insn.c +290d600da66bd2846e6b8130844f4f38 sim/igen/config.in +f2049b800c53ab85c3ae866e35f38b42 sim/igen/compare_igen_models +dd860d3a1db1a358a41c5fd54cfd183d sim/igen/gen-icache.c +f2ab4c811e2969c15ab75c863f8bfeea sim/igen/gen-model.c +cb7f97cda54886dac3288cc302432998 sim/igen/lf.h +58f95b59f715bd7cc4444543e6a88fc8 sim/igen/configure.ac +3a2731cd6c58ff47eecdc0d213835cfe sim/igen/ld-cache.h +2787e28b05a6c3de5af346ae19d6779e sim/igen/gen-model.h +35d70459ae8f29ddbba5bf2d6e3c7dbc sim/igen/gen-semantics.h +012d03689f6cd1a317ef8c2acf69f83c sim/igen/gen-semantics.c +3dddef8cd8a4725c75564c665ebe96d4 sim/igen/gen-idecode.c +db45af7d0545bcad95e85aee30266a9e sim/igen/gen.c +9f77a2d1e9845ddbf1b5926667f9dcaf sim/igen/filter.c +c24fa0d1dc34fb4706ebdb03e82a55ea sim/igen/gen-support.h +5f3925030abb46bd3bf530983dfc143f sim/igen/igen.c +ce19d06a85ccfb9aa248f082bf60a2cd sim/igen/gen-itable.c +1c3a76b9c9d28acc49c6dbbdad2d01ae sim/igen/Makefile.in +42497beb3d9cb23da188af3fc345e358 sim/igen/gen.h +d44372eda066151e1c7b225aacd90df3 sim/igen/gen-support.c +0cd75dc26d00b3048d13c16b17406ae8 sim/igen/igen.h +5a85c23e910253ef2c917f25d6e76e4d sim/igen/misc.c +a120a0188758f62a9a158b8705aa99bd sim/igen/ld-cache.c +fb7a61cd7342d3faef17cd373ab3f241 sim/igen/gen-itable.h +b91acd0008fc75d0a2646e930acb6a43 sim/igen/ld-insn.h +e53f122dd73b961f804c9e2823b21fa4 sim/igen/ld-decode.c +89f6a1f14c797c9e34e1d391abeade07 sim/igen/filter_host.c +a31bf1978598a08fd50b5191424ddc07 sim/igen/gen-engine.c +3c7d3d52af0ee396d639edef7334b0f8 sim/igen/filter_host.h +b79909c21c08345dfac0571dcb1728b9 sim/igen/filter.h +88f1b514761dd29aa4612ae35f053dbb sim/igen/lf.c +88e2e51d0af0f0b2961a57a61c91cce4 sim/igen/table.c +c814f4297c2ce9e8016ac58138a36e64 sim/igen/table.h +c1a915881203dfe5dcd3c8ac52943294 sim/lm32/cpu.c +1a02610b0e39780cf6bcc98743695cc3 sim/lm32/dv-lm32timer.c +d85c8c186dbe1aa356ede332cf9f92fb sim/lm32/ChangeLog +4f5108b1dca9758db1b3759d0c3ec61a sim/lm32/configure +f69ac6b260de0c72f4aaf9fa83044aed sim/lm32/sim-main.h +2370a3ee5dbb787379907d7a9ee8086a sim/lm32/lm32-sim.h +dd4c793979e42aeebd86d2d8fc7ba5b3 sim/lm32/dv-lm32uart.c +c92760998c9a0df216e2aa8faee976c8 sim/lm32/model.c +5612be8e02af3bf837bf725454d50414 sim/lm32/config.in +06c872ecef34e2b9db7fe98547b9adff sim/lm32/mloop.in +5ae9ce165b2642cec7d3062465452399 sim/lm32/arch.h +1ef7d461a3813915e4b54dda56bf4181 sim/lm32/configure.ac +d4484ad486030c6917ab9ca1f8aaad66 sim/lm32/sim-if.c +c7ec351dab52fc059a21a54173082068 sim/lm32/traps.c +1a97c9d860c38996ee84ba12a55de7ff sim/lm32/decode.h +ed826f060b1b2ef0ea0a39f3e9f1af7c sim/lm32/dv-lm32cpu.c +7183364b7ff55da1a28a2fa59093fd84 sim/lm32/decode.c +902545398d9eb957f15bf82b30b4b50d sim/lm32/Makefile.in +fd7cef8e8fec9873d34f7b960c8bac21 sim/lm32/sem.c +4ab55a35c7007d58ee370d38587e6907 sim/lm32/aclocal.m4 +9329f5105b3c95b4b4cfdc1afb85d647 sim/lm32/cpu.h +2610ac6caa3dc94de4ed97abe3ba03f8 sim/lm32/arch.c +514e451c0a29b75690cc6aa76f6e32ed sim/lm32/lm32.c +ccfb82eb88d935b10d15a3b63d26e497 sim/lm32/cpuall.h +726372eeb24ae2736af4be6a37d84ddb sim/lm32/sem-switch.c +562322d9bb24bacc867ca8f03fd09bc3 sim/lm32/user.c +87cb8348c5ece766f587859b5df41e96 sim/m32c/syscalls.h +9cfa84aa10624bede52b6960d64c0707 sim/m32c/safe-fgets.h +bdf151eb05e59593f5a8ac7dda44550a sim/m32c/trace.c +c511801f9070900f940358970fed1ed6 sim/m32c/timer_a.h +786a616a32192ae310d8a8272e2cf9c6 sim/m32c/misc.h +4146e62f3c25e0ff26b516001e5cb205 sim/m32c/int.h +29eec8e13a9ab5f77501faa6904d4725 sim/m32c/ChangeLog +6d71443ec6220a5219b2c6c343a20970 sim/m32c/configure +fa4078fcd1900c46e33c0289b63a18cc sim/m32c/reg.c +67c907781e848b132a4bab0cb842a534 sim/m32c/config.in +6a31de45b64d2973eff216f2392f92e3 sim/m32c/r8c.opc +90349ebc59e99c76257f65014cc950e2 sim/m32c/configure.ac +0c28fc6d13bcdf33339a0a4939f5ecf3 sim/m32c/mem.h +69849684d07d22110ce4720bf9b63361 sim/m32c/mem.c +24e2f861da06951620983b5a9ca6efe2 sim/m32c/syscall.h +78756ae620209182266095846da4aa1c sim/m32c/Makefile.in +0f7b7bc793c40412197f89c3872ef28f sim/m32c/main.c +9ba35999a8bf434fa3184a8cb1eabe2d sim/m32c/misc.c +4ab55a35c7007d58ee370d38587e6907 sim/m32c/aclocal.m4 +ffc6bb7209e3bbf3cc07d3016caed91f sim/m32c/srcdest.c +a90511f24315663f84e309f3fd67670c sim/m32c/cpu.h +d0aaa9384726818f6809780c5bb0e4eb sim/m32c/safe-fgets.c +03f36d44d9fed5d9f44ba16a94ac1236 sim/m32c/syscalls.c +d60e6b951aa34c490652aac861a93935 sim/m32c/opc2c.c +642f8b9ebd9960a11773f2b2c83f86a3 sim/m32c/int.c +b57a1004660de327acb29668d62f1c8f sim/m32c/trace.h +3e05c963dc391f1cab11bfdbb35975f2 sim/m32c/m32c.opc +9df3d9a3a0f2def2fa8c0d6536c69472 sim/m32c/load.c +982b51da57568e9e6421e073f8b6f2aa sim/m32c/gdb-if.c +961260edf21829a1d5b1c2aa41754dda sim/m32c/load.h +0465ce5365b6a1ff3b5f5b3e49074496 sim/pru/ChangeLog +6ef545eaa66a20600537024b6bcc93cb sim/pru/configure +f1defdd8155a1ccee36538e10bafbf48 sim/pru/sim-main.h +a8230d56af1a3be05357adf23eb9f7b6 sim/pru/pru.isa +79b3f19a4a961715ed1b3fc266e073d6 sim/pru/config.in +187333ba8305bb0ec8ff62e1abcfa2ff sim/pru/pru.h +31eed4c57f8af958ca3676b3376ad564 sim/pru/interp.c +5b994e69732335393a195c5682c3a532 sim/pru/configure.ac +52373501b57dd039883dfa065be0b1f4 sim/pru/Makefile.in +4ab55a35c7007d58ee370d38587e6907 sim/pru/aclocal.m4 +76b28d34f2fc40093fae245b12772861 sim/frv/cpu.c +cbf58ec3f1ed34e6e10fa4531005d840 sim/frv/profile-fr500.c +21022a00cb758cba835f701876ec9ed1 sim/frv/profile-fr400.c +2c6526691436fb935b9692acf0123625 sim/frv/ChangeLog +1a6cecfbc7de7a52a580e3c9e7a71389 sim/frv/configure +cd9415409ea8bca0f285f55b7c7f4ff8 sim/frv/sim-main.h +4ea18b8449c9c19cb9ad536291f7a743 sim/frv/model.c +5612be8e02af3bf837bf725454d50414 sim/frv/config.in +8668dbfd82a5e44aa50ea2cae84063b2 sim/frv/mloop.in +3cbc5931b6f27b0dfa3c69087f023f13 sim/frv/arch.h +bc899b72a4f2b5d103f87f142a9bd574 sim/frv/profile-fr550.h +7654a87bf1dcae23b22c79e86dea41ef sim/frv/configure.ac +f138b07d5c3039457917a41ffd0d3355 sim/frv/sim-if.c +88d954654c968411467081fd899b59b2 sim/frv/profile-fr550.c +83eac9c90abc0abdf7b9cc2216020233 sim/frv/traps.c +6a7b7b064df4a262e0ea34f867d63a59 sim/frv/cache.c +6778919b59e7466742d5505d312b5918 sim/frv/registers.c +0db0649d3ad2524195d4e4c942a7b75a sim/frv/pipeline.c +398bc983ea826287f9cad4f6f04b86cb sim/frv/decode.h +dd44abe5072c80fd98fbd8ace2d6ec3a sim/frv/reset.c +db9f55ada398e0c99a092a8b57ebde3b sim/frv/options.c +8e4911f58d9b7903647e488f59358455 sim/frv/interrupts.c +efcd29e390c088f1df0c5e8e369ded42 sim/frv/decode.c +1887f19d05acbd315f67afcb4c60b88d sim/frv/Makefile.in +8af459c7a7a65ecbcec0c4551e4f306c sim/frv/sem.c +4ab55a35c7007d58ee370d38587e6907 sim/frv/aclocal.m4 +2fc9962b4f43fbc87ebcc06ffb40cde4 sim/frv/profile-fr500.h +98a08b824b1b2bfa66e930e80657c49c sim/frv/cpu.h +3e5259cad37302e4dc1c65bf17cb6aa2 sim/frv/frv.c +757e397afc6de9d1d9e5773adc6a8e31 sim/frv/profile-fr400.h +2c153bcab3825e6bf2443649599624ef sim/frv/profile.c +8926e23bdd50169b65bf11036a35f0d2 sim/frv/arch.c +2653a750769e2a96e784e958bca9d8aa sim/frv/frv-sim.h +b0f93c502e41bcb090d8464ec50bdb14 sim/frv/profile-fr450.c +7e5dd7cb9f30d943ce1bcc9cbaf7ebf6 sim/frv/cpuall.h +8ccbdd637be7de5f44e4ce6ebfb7fe4c sim/frv/registers.h +91a0031fe632a7f44488824b048dd269 sim/frv/cache.h +1dcb16936dd94db21e5b82f208506a6a sim/frv/README +d13d91cb26cdbd783512c76fe7201602 sim/frv/memory.c +ad6ae9dde6bd8586b6394ec41d1c1937 sim/frv/profile.h +1d25fab75497002d22ddbb0eb09545ff sim/configure.ac +15f854cf1f346586b1ab269aed5b6e3d sim/testsuite/ChangeLog +690ce5d7d5091774e87f11ad21749919 sim/testsuite/configure +c3159efacfaf9907b2cd1771fa08d97c sim/testsuite/.gitignore +874ac49fc37d49f2822c8b409d285004 sim/testsuite/common/fpu-tst.c +2c97e49ca99e657e07ca12a6fd5d6f69 sim/testsuite/common/bits-tst.c +56912c8f1ff672daf4dbab4a0fb12a54 sim/testsuite/common/alu-tst.c +09db0759c17936e2d8cf6dea6eda8fb1 sim/testsuite/common/Makefile.in +9980219e011c42205bbd14e46d21fc8f sim/testsuite/common/alu-n-tst.h +8b1814b871166305ec8fc7a06cc9a84d sim/testsuite/common/Make-common.in +1e65bc4873f7cf366d7ab9afbaab1e54 sim/testsuite/common/bits-gen.c +d855cd1f7a63aa5913126e4c9cbbdca4 sim/testsuite/m32r-elf/hello.s +0f367d89ae3bfb9857b54ec9c8d5331f sim/testsuite/m32r-elf/ChangeLog +ca5d7345bde4b101f716cc24502fc90b sim/testsuite/m32r-elf/configure +cdfd13107641dc366d7f36ada4f5ad87 sim/testsuite/m32r-elf/configure.ac +61aac381a61d722e21e84faa6146d7be sim/testsuite/m32r-elf/loop.s +fdcd1bf835b2c2a0ce2ec539624e2a6c sim/testsuite/m32r-elf/exit47.s +030c7d79c95cef8d90bf68ef014d2019 sim/testsuite/m32r-elf/Makefile.in +2a7b97cc87ae4dc18b5de861f38c9f4e sim/testsuite/configure.ac +cc16675e19f20d246b81ba1aa64e2c05 sim/testsuite/frv-elf/hello.s +b03f73b590c393cd710f753106cd5184 sim/testsuite/frv-elf/ChangeLog +ca5d7345bde4b101f716cc24502fc90b sim/testsuite/frv-elf/configure +cdfd13107641dc366d7f36ada4f5ad87 sim/testsuite/frv-elf/configure.ac +02ebc2d23f1397660d56c21d6a0866c6 sim/testsuite/frv-elf/loop.s +ad3cb74cb4f5e1145c323d436230b3f4 sim/testsuite/frv-elf/cache.s +70ca72190bc26acee97deb6d5974053f sim/testsuite/frv-elf/exit47.s +8d3e0563a857a249930599ea7e489f64 sim/testsuite/frv-elf/Makefile.in +e30b4c8b1165f133ffd45b28034a33a7 sim/testsuite/frv-elf/grloop.s +64f3fd96f3c4dbf0d0f3a6e8e515b6c2 sim/testsuite/Makefile.in +b5b7dcb39e5fe37d20f5fbad5c205b6a sim/testsuite/d10v-elf/t-trap.s +c2989be701fa58229f9d2c51d1d89b9a sim/testsuite/d10v-elf/t-rie-xx.s +df56df219276d06d750e8fb6f6b1581b sim/testsuite/d10v-elf/hello.s +3bf62ddddb5d760ebd4a96790f02efd9 sim/testsuite/d10v-elf/t-sub2w.s +03e85e80ad387361ee238b2b0a1b5a20 sim/testsuite/d10v-elf/ChangeLog +ca5d7345bde4b101f716cc24502fc90b sim/testsuite/d10v-elf/configure +7edbadafb83e173b875ef37b4728d3f9 sim/testsuite/d10v-elf/t-ae-st-is.s +a25febe699e92863dd860f733c9dd22d sim/testsuite/d10v-elf/t-ae-st-im.s +ccf5bb0090436bc56ae6e5ab152f9be6 sim/testsuite/d10v-elf/t-ae-st-d.s +246424eed873ed649d2a32c1de0a12cb sim/testsuite/d10v-elf/t-ae-ld-d.s +655e71f960343e657e230eba7ecb5f61 sim/testsuite/d10v-elf/t-sp.s +be230dfdf2fc8a9548a086fd285ea00e sim/testsuite/d10v-elf/t-mulxu.s +744e0ee2abcec900b154f72ccf20434f sim/testsuite/d10v-elf/t-mvtc.s +ec7bb92d79cec389c2cf4685d0c91150 sim/testsuite/d10v-elf/t-slae.s +d028e41377d7e4afcdc3b979f9e026d7 sim/testsuite/d10v-elf/t-mod-ld-pre.s +cdfd13107641dc366d7f36ada4f5ad87 sim/testsuite/d10v-elf/configure.ac +f9e7c86333f37f05849bb0913d84040e sim/testsuite/d10v-elf/loop.s +d3f2b6a8713945840267c5b38031db57 sim/testsuite/d10v-elf/t-rdt.s +776264e34418e424ca53627692e3170d sim/testsuite/d10v-elf/t-ae-st-id.s +670f5bcbd96246bf460d84b57bea1102 sim/testsuite/d10v-elf/t-ae-st2w-is.s +d35bfeba95637ae41856f6692744cbdb sim/testsuite/d10v-elf/t-ae-ld2w-ip.s +b318831c796a5daf3c008a72a1bcff77 sim/testsuite/d10v-elf/t-rte.s +ba2eb8bb4b43be12c27308bebccab16d sim/testsuite/d10v-elf/t-msbu.s +9324e63160953a8b19ec76988361aa95 sim/testsuite/d10v-elf/t-dbt.s +c61c5fd4a6a85120020dea1782d72d65 sim/testsuite/d10v-elf/t-mvtac.s +24adce9358d8640ca6ae226ecbeb41c7 sim/testsuite/d10v-elf/t-mac.s +2092af64ed30dac7b430156bd2387770 sim/testsuite/d10v-elf/exit47.s +517096aa5ab9c0e44c70c067d41b0536 sim/testsuite/d10v-elf/t-ae-ld-i.s +80cead45f0ac9615df0caece0cf67059 sim/testsuite/d10v-elf/Makefile.in +3b139d94efcc709b303318543337cee4 sim/testsuite/d10v-elf/t-ae-ld2w-id.s +fcab1b7a79a3a82158f92a79f01fc1b6 sim/testsuite/d10v-elf/t-ld-st.s +880e8e02eb0c803c436bfc733723664c sim/testsuite/d10v-elf/t-ae-ld2w-d.s +dd04c4735e06d614b03e76a552d4fcb6 sim/testsuite/d10v-elf/t-subi.s +202b3272059c697b714c5f14d21e8418 sim/testsuite/d10v-elf/t-rac.s +e8c67bf69426a7db6ecb7c2cafcc0a99 sim/testsuite/d10v-elf/t-sadd.s +6a1e686613656c7345b1feb238e31066 sim/testsuite/d10v-elf/t-ae-st-ip.s +1d77729ab41b4cc1ef00c09482ec6715 sim/testsuite/d10v-elf/t-ae-ld-id.s +6e39b3ee1a1f446f2aea2265a13e824e sim/testsuite/d10v-elf/t-ae-st2w-id.s +67a11da95718e0f31001311302fe7743 sim/testsuite/d10v-elf/t-sub.s +2e29d477a767f8c3e7b9806e5061b73a sim/testsuite/d10v-elf/t-sac.s +f831b90857d7d08faa607a4c5d2fc618 sim/testsuite/d10v-elf/t-ae-st2w-d.s +2c65c61ce821576fd7642ae775e053ee sim/testsuite/d10v-elf/t-ae-st2w-i.s +94f087c25d14650e94905d367ac781c8 sim/testsuite/d10v-elf/t-ae-ld2w-im.s +5850459c815d7a2cea95632d02288d93 sim/testsuite/d10v-elf/t-rachi.s +ace81e2c0d0d2ac060e2172d5fc8e655 sim/testsuite/d10v-elf/t-macros.i +e407a9027a51a971d55c14a9deac7d15 sim/testsuite/d10v-elf/t-ae-ld2w-i.s +c52f1cfa2ba8e7eb55aa93e564a0164f sim/testsuite/d10v-elf/t-ae-st-i.s +34070ba49d956128040f988eb91c46b7 sim/testsuite/d10v-elf/t-sachi.s +75cd5a849fb6a73f45b92c5173201ad0 sim/testsuite/d10v-elf/t-ae-ld-ip.s +d68929f5405fbc0fa82b417d61e8389c sim/testsuite/d10v-elf/t-rep.s +44c3061ac426dfdcf4a850fe15376b2f sim/testsuite/d10v-elf/t-ae-st2w-im.s +0492a673d4276924c61d9ce568802546 sim/testsuite/d10v-elf/t-ae-st2w-ip.s +266aa2fe095d30aad29b83c25851971e sim/testsuite/d10v-elf/t-ae-ld-im.s +bdd1ffa1a75ef8b2cf35c172d7598fcc sim/testsuite/sim/cr16/xord.cgs +ad6daba36078ecb6da21802aecc2efce sim/testsuite/sim/cr16/lshd.cgs +44441592132a1541d22ae406a3f70379 sim/testsuite/sim/cr16/xorw.cgs +328b74314f872ad3a432dcf68398c3c8 sim/testsuite/sim/cr16/slo.cgs +70eb0d8740aa24af162ddd5fd9595296 sim/testsuite/sim/cr16/sfc.cgs +ef8fe77aacd4a1e30c7987497cde11d7 sim/testsuite/sim/cr16/scs.cgs +5652ebc54a42ff0f46ef6c6cadf2ab29 sim/testsuite/sim/cr16/subi.cgs +f91fa8b0387ba370837c66ef014712ff sim/testsuite/sim/cr16/beq0w.cgs +fbf7bb0be8fc7b72236625fb3a933b7e sim/testsuite/sim/cr16/lshw_i.cgs +0943e0e5372402edda9289083973cb17 sim/testsuite/sim/cr16/andb.cgs +643b5e6f1391539a8e4e33e08fb3a7ac sim/testsuite/sim/cr16/ashuw_i.cgs +e8850b6ee39de9bead4b372be1e79905 sim/testsuite/sim/cr16/movzb.cgs +533824682174da24de679037e9e8a873 sim/testsuite/sim/cr16/misc.exp +a275feee7eab597196fbd75269c0ab2d sim/testsuite/sim/cr16/br.cgs +501b3d8cbeeeea0b1cc4c8e7ab36db77 sim/testsuite/sim/cr16/ChangeLog +3b72d29afcc2ce49f75411b677aaa1e4 sim/testsuite/sim/cr16/movzw.cgs +5876fe9c91b632b02c82ae85c0086959 sim/testsuite/sim/cr16/popret1.cgs +c8fd944a81c0ba341a5cc7baeed2fea3 sim/testsuite/sim/cr16/cmpi.cgs +3123ba0d7ebc3b678ecba3ceafa314b3 sim/testsuite/sim/cr16/blt.cgs +a83723e26622fe1a64902708ba01d4fe sim/testsuite/sim/cr16/loadmp.cgs +916b503ad4413ddc2739c40a57c1c4b6 sim/testsuite/sim/cr16/tbitb.cgs +6d637962866bbb4a37ddc937f9547149 sim/testsuite/sim/cr16/mulsb.cgs +006a7b3fcf278e2ddabf5dcf90f33dff sim/testsuite/sim/cr16/jeq.cgs +ae41299f4ad75e3d9ce1ce51a87455ce sim/testsuite/sim/cr16/ashud_i.cgs +7de06c2152fc3699d550123424104505 sim/testsuite/sim/cr16/loadd.cgs +991a1be917e93bb5ff3cd7cdeb93bf2a sim/testsuite/sim/cr16/cbitw.cgs +019175ff8a046e04d5f1c648e53dafd8 sim/testsuite/sim/cr16/addi.cgs +ac3c3a61a1b068aaf711c3ab802600f9 sim/testsuite/sim/cr16/slt.cgs +295ad1ab34949fad14aafc0bc22c7f09 sim/testsuite/sim/cr16/shs.cgs +2c784935291e339edce388193da5ffe8 sim/testsuite/sim/cr16/storw.cgs +30f437473e23474a5f0b3430b462dcd6 sim/testsuite/sim/cr16/orb.cgs +55153c68b1f8f80c0222b7f7510256d5 sim/testsuite/sim/cr16/bhi.cgs +96d5b4b7318fc62f1b75a9f705811e99 sim/testsuite/sim/cr16/pop2.cgs +0787123f7af21d0f0e49b67113cea23d sim/testsuite/sim/cr16/jfc.cgs +fb79b768cd67d02933b9b8182537f069 sim/testsuite/sim/cr16/loadb.cgs +61fabc9c1749be4ba36b5029a3a0e8fe sim/testsuite/sim/cr16/subw.cgs +25d47da0392c312f3e9a4284935db757 sim/testsuite/sim/cr16/subd.cgs +ac821feb1b424789a398ecad52c2efde sim/testsuite/sim/cr16/cmpb_i.cgs +9bdae816be0a268534764e94096b55ca sim/testsuite/sim/cr16/cmpd_i.cgs +bb7292335414e908ad9dd1a920d159a4 sim/testsuite/sim/cr16/push3.cgs +157c48c2899a2406b28e3bdf0a92833d sim/testsuite/sim/cr16/loadm.cgs +63d637d5509970745cf258c67b0836d9 sim/testsuite/sim/cr16/jge.cgs +e6caf390a907493e8e2db7a9edda778a sim/testsuite/sim/cr16/beq.cgs +70be2a6fefe803b023f2a81c4082e0f0 sim/testsuite/sim/cr16/beq0b.cgs +05072e9357b3abdc3a2f3275b2b8671c sim/testsuite/sim/cr16/bne0w.cgs +c6164027f77e6c5c13a20019fc723077 sim/testsuite/sim/cr16/hw-trap.ms +dba67156b517dbd97410ad0af832d2f6 sim/testsuite/sim/cr16/cbitb.cgs +5110af4e2e7578f48a7d3c7ff637042c sim/testsuite/sim/cr16/orw.cgs +d03b4d02b1a08fc383fa61498d8b9c29 sim/testsuite/sim/cr16/jlt.cgs +52c7a35d25b1145531b66e55abf4b606 sim/testsuite/sim/cr16/mulw.cgs +440b6422a28dde673a9e9326967b0495 sim/testsuite/sim/cr16/jump.cgs +3e1811940988176043204b361113bc7a sim/testsuite/sim/cr16/jlo.cgs +ed482d0504a60f236673315be8c987c3 sim/testsuite/sim/cr16/lshb_i.cgs +008f3be128c730a84f836a84ee86dee8 sim/testsuite/sim/cr16/ord.cgs +ea11a97c0419f72b2baba5fa9630dc26 sim/testsuite/sim/cr16/bal2_24.cgs +8aeeb78ba63157cc86eb8c3acbb9897d sim/testsuite/sim/cr16/stord.cgs +4b59a0fb8b8a13e74965ebe8f76f7fb1 sim/testsuite/sim/cr16/bne.cgs +cf3b1d15ca083fa78ec94460c41fd3f8 sim/testsuite/sim/cr16/subb.cgs +46b9d38dc5bc846a55afda5a6b705f5f sim/testsuite/sim/cr16/lshd_i.cgs +3547de4742bc1c86f120457f804e0094 sim/testsuite/sim/cr16/push1.cgs +c5629a0de9aae64954f5e81a4f7f5869 sim/testsuite/sim/cr16/cmpw.cgs +450d8884cf466b8af9d7c8be4725c938 sim/testsuite/sim/cr16/pop3.cgs +c7a8eba0b8fd90586225a400b03013b5 sim/testsuite/sim/cr16/seq.cgs +ef49377fd62c501740e3cdf8760d23ef sim/testsuite/sim/cr16/loadw.cgs +d3f2f5d16ebc37df7f4445d25366928a sim/testsuite/sim/cr16/cmpw_i.cgs +e045cd438a9466c00065948123fbe4a6 sim/testsuite/sim/cr16/macqw.cgs +f80200e57ec11e2a0335974cbf362020 sim/testsuite/sim/cr16/hello.ms +c696cf68bef28a6230b80a0378b116ef sim/testsuite/sim/cr16/storb.cgs +30e2d364e27ca89970c1ad9faf8eae53 sim/testsuite/sim/cr16/sbitw.cgs +0b9158184d2fad7c131ed4e1390dcff6 sim/testsuite/sim/cr16/andw.cgs +3123ba0d7ebc3b678ecba3ceafa314b3 sim/testsuite/sim/cr16/bht.cgs +71151f4dc3a107b3a2bdf22ad69754e3 sim/testsuite/sim/cr16/jal.cgs +5522701195bf677b1823917fb74d3938 sim/testsuite/sim/cr16/addw.cgs +c04c204fe82125041578eb881c27536e sim/testsuite/sim/cr16/excp.cgs +b0b4a478f84826c1f234916914dd1b3b sim/testsuite/sim/cr16/bcs.cgs +36c692b8a3b2fbd2eec3a1466bade12f sim/testsuite/sim/cr16/push2.cgs +588a35e7e5a54d2ae0ccc08b767ab0ba sim/testsuite/sim/cr16/tbitw.cgs +c92fdf5219986bfab80539ebee90103b sim/testsuite/sim/cr16/movb.cgs +0af7c0efabd8da4be61638e2a7ce7577 sim/testsuite/sim/cr16/cmpb.cgs +3d5105d47ec3b2e7f61597d084b6d850 sim/testsuite/sim/cr16/movd.cgs +c27b3a579bd358b360955398bb1d0438 sim/testsuite/sim/cr16/bne0b.cgs +30819c9cbff7a629dcc6e07199a5d764 sim/testsuite/sim/cr16/lshb.cgs +eaacfbfb93f90d881165c4b522bd7256 sim/testsuite/sim/cr16/bcc.cgs +3123ba0d7ebc3b678ecba3ceafa314b3 sim/testsuite/sim/cr16/blo.cgs +c0c4547e84a33e4c0735e4382d635181 sim/testsuite/sim/cr16/allinsn.exp +d6b2f7815fe26f69215d43464c590a73 sim/testsuite/sim/cr16/xorb.cgs +a273a1c7597cb6dd38b94f3469f449db sim/testsuite/sim/cr16/macsw.cgs +e98582301c0019529552df179c1b1c70 sim/testsuite/sim/cr16/addd.cgs +eeb3624e778291b2e91253e215c38813 sim/testsuite/sim/cr16/macuw.cgs +b54aa7885f145cacc2561d20cfbbcc78 sim/testsuite/sim/cr16/movxb.cgs +b066047a28cc74aecec0251e255c36f0 sim/testsuite/sim/cr16/uread32.ms +d2502a9ccfde2a113a16f46f75cdadda sim/testsuite/sim/cr16/bal1_24.cgs +10fd94e47110fab5968e141792e4157a sim/testsuite/sim/cr16/addb.cgs +22f0798d086289e0e6b5b13d16a65587 sim/testsuite/sim/cr16/ashud.cgs +e9f8fb7113699218c0d61e76b9b2916f sim/testsuite/sim/cr16/lpr-spr.cgs +674ebdc1e494482ac9715d8f66a8a967 sim/testsuite/sim/cr16/popret3.cgs +fbe25c82541d0d9b6a0eb9938b378ccf sim/testsuite/sim/cr16/shi.cgs +f17397007a7266533ca9f822adf0c140 sim/testsuite/sim/cr16/sls.cgs +43a1454f6528fe65b4d0f41349a6d9bd sim/testsuite/sim/cr16/lprd-sprd.cgs +ba069329fa0f729e45a28ca6f719f7f0 sim/testsuite/sim/cr16/jcs.cgs +b8b05ed881886e699a3e602e59826b20 sim/testsuite/sim/cr16/jcc.cgs +e3f710c8265bd9cfaebed6b71467bf1a sim/testsuite/sim/cr16/sne.cgs +b015c7b42f553474d21e8d5e3b137852 sim/testsuite/sim/cr16/jgt.cgs +3cf7f3d98134a69a053bfca883b62fa6 sim/testsuite/sim/cr16/popret2.cgs +63a8ef50a12fd55d8534440cbb035c2d sim/testsuite/sim/cr16/pop1.cgs +247aa154278e43df072100fec63a8a60 sim/testsuite/sim/cr16/uread16.ms +512682fb17daf85af0f66104fc25853d sim/testsuite/sim/cr16/bls.cgs +205bbdce635864d5d7a66f41031193e0 sim/testsuite/sim/cr16/jhi.cgs +d85ef31cc98569ce9784749b34cc186e sim/testsuite/sim/cr16/mulb.cgs +5a45390a5d9b6641387239beb44c1b1f sim/testsuite/sim/cr16/muluw.cgs +39b6b4293889825cbc03c152fafbd7c3 sim/testsuite/sim/cr16/ashub.cgs +a7d05ccff2425ac8886a52cb299045b6 sim/testsuite/sim/cr16/andd.cgs +c8111773a2e97c47fe497ed78261729b sim/testsuite/sim/cr16/movxw.cgs +08a2789d1d00df864e97b1925d7f8871 sim/testsuite/sim/cr16/bhs.cgs +5bae98f051be5850d85698a51d58fb67 sim/testsuite/sim/cr16/jne.cgs +2e757424b89a680d5d02460442693d1e sim/testsuite/sim/cr16/sbitb.cgs +8c0f4f4632c999845108bff0a1a9b73d sim/testsuite/sim/cr16/ashub_i.cgs +cb7d77de2be8f1d45d913818ae386a5b sim/testsuite/sim/cr16/ashuw.cgs +b9c547d7592960afb5b89c06e2d44f16 sim/testsuite/sim/cr16/movw.cgs +6620ffaabc5a06604c43ece04ef87462 sim/testsuite/sim/cr16/tbit.cgs +f6b95312ca184181ca12d9b4e17ab54b sim/testsuite/sim/cr16/mulsw.cgs +13bcf33defb1ce0ef021208707db1cea sim/testsuite/sim/cr16/nop.cgs +3e4c6e72a1108c4e85179c8cbb76a3a2 sim/testsuite/sim/cr16/jls.cgs +c2dc241b3a86c61e35f841929940384a sim/testsuite/sim/cr16/sge.cgs +4716cdf47f9002e30af7c2d9ec8b69b7 sim/testsuite/sim/cr16/bge.cgs +a0701137e0ea9fc16ca421928629456d sim/testsuite/sim/cr16/testutils.inc +e25d6fc34ff71f52b4d8a9c5c107ae02 sim/testsuite/sim/cr16/cmpd.cgs +4716cdf47f9002e30af7c2d9ec8b69b7 sim/testsuite/sim/cr16/bgt.cgs +72b592116de1bad5fbbea8fd9598e553 sim/testsuite/sim/cr16/sgt.cgs +2092decdf049d86ef8f49b95a009ef59 sim/testsuite/sim/cr16/scc.cgs +b185c6b6cabab528a1cde30b37dc0215 sim/testsuite/sim/cr16/sfs.cgs +94f6e01156f70fdc6d1d53ce168f0096 sim/testsuite/sim/cr16/jfs.cgs +f903a7837d78c8840cdc84d161e51c4c sim/testsuite/sim/cr16/lshw.cgs +4d3d512dc9a5313e559e0ba4a6240fd9 sim/testsuite/sim/cr16/jhs.cgs +35474b7bedfc80b13c1b0c8e172de7de sim/testsuite/sim/microblaze/ChangeLog +0174e7e6ceb6e4e39aad3572f156a143 sim/testsuite/sim/microblaze/pass.s +47554daee3ce73d879f549f3fc8397df sim/testsuite/sim/microblaze/allinsn.exp +46ad68c64909bc50c10ce61f0d36d668 sim/testsuite/sim/microblaze/testutils.inc +9c0772020dff5681e330fd8cd450574a sim/testsuite/sim/msp430/ChangeLog +568ea34964ec55fe02eba4a5a8ff2534 sim/testsuite/sim/msp430/allinsn.exp +804f4fe7803ba2d3b8dbc179c1fab9c0 sim/testsuite/sim/msp430/rrux.s +7d81763dc798f2930385406a469cba29 sim/testsuite/sim/msp430/mpyull_hwmult.s +9147d179b9aaafa081eb989a0394e3df sim/testsuite/sim/msp430/add.s +86d4c8f59d17af694070939425d19b95 sim/testsuite/sim/msp430/testutils.inc +6277242ee79bf6828d9ac411fb6eac95 sim/testsuite/sim/bpf/endle.s +a8423f0b34b09ec6b3ecc921ccc3d9b1 sim/testsuite/sim/bpf/jmp.s +c13e79fd1926f5997e67a95114d62a5b sim/testsuite/sim/bpf/mov.s +9a52e1dabe863d3d759ddfed279ec7cf sim/testsuite/sim/bpf/ldabs.s +b0aeb7367d9e305b15ddb4b63316ba61 sim/testsuite/sim/bpf/mem.s +d953e9b7a8af6d1e5b2e761230f849c9 sim/testsuite/sim/bpf/allinsn.exp +551a74044f63a2effa92c2bc75546672 sim/testsuite/sim/bpf/xadd.s +71ebb1cf2923a5a342d7edcc9e9ead7e sim/testsuite/sim/bpf/endbe.s +9904fcb9a57abbf9c093e36858f896ec sim/testsuite/sim/bpf/jmp32.s +9da2bfb2ad073255be0a6638317cb389 sim/testsuite/sim/bpf/alu32.s +d383fbc6f3ac18cff0627a3ebe35740b sim/testsuite/sim/bpf/testutils.inc +f4f1e0c55273e5e3ff42771ae6c3e485 sim/testsuite/sim/bpf/alu.s +c8756b053a5d9e80829d352796598ea4 sim/testsuite/sim/iq2000/ChangeLog +ff987d426548a3efc0d91b4bbafc574e sim/testsuite/sim/iq2000/pass.s +04bfec3fac775b59514ab6d515fca3f7 sim/testsuite/sim/iq2000/allinsn.exp +6db577978145c94da7cbc2f34abd44f1 sim/testsuite/sim/iq2000/testutils.inc +a06bb01624f0127d797df273c0f0ae39 sim/testsuite/sim/arm/umlal.cgs +1c290ff406eb9de96060785ccfb36a33 sim/testsuite/sim/arm/add.cgs +05ae9969a70c8f236c50630fd2f7d113 sim/testsuite/sim/arm/swp.cgs +d3676059d440e43421abe9377b45644e sim/testsuite/sim/arm/bl.cgs +759d4e841201adbf8fe4d48c792139a1 sim/testsuite/sim/arm/xscale/xscale.exp +ff267c0f1ed5b05d883ec3584f8bb6f9 sim/testsuite/sim/arm/xscale/miaxy.cgs +f2c30ed356d350356f1edcb1484c6f57 sim/testsuite/sim/arm/xscale/blx.cgs +03c925a228ba4258f15e01eef3fceb5b sim/testsuite/sim/arm/xscale/miaph.cgs +64304cffe7caf82616cedaf41498ac45 sim/testsuite/sim/arm/xscale/mia.cgs +f0a99de3c5c47c3aa91c95c25879b41f sim/testsuite/sim/arm/xscale/testutils.inc +0a98c2c1558ae770328e84c180ac3616 sim/testsuite/sim/arm/xscale/mra.cgs +15cd5436a6e963ccd32b54e22c7a8b21 sim/testsuite/sim/arm/thumb/lsr.cgs +44fc3fa4d4212c68997074146cd2081d sim/testsuite/sim/arm/thumb/add.cgs +4ed486b285f8dd6272168154f0e7df58 sim/testsuite/sim/arm/thumb/subi8.cgs +ca60a519f04c50e1e8b316b49a7e4e9d sim/testsuite/sim/arm/thumb/strh-imm.cgs +a25b0fe3d7a82e5a2f7605f685e15f46 sim/testsuite/sim/arm/thumb/ldmia.cgs +1e72cd9a9e01d015ac44deadf9a8eb0d sim/testsuite/sim/arm/thumb/subi.cgs +189891b42b0a10d5895c36ed13267a7e sim/testsuite/sim/arm/thumb/cmp-hd-hs.cgs +5e5452b3461b69cffd6b8f23f4e7140c sim/testsuite/sim/arm/thumb/mov-hd-hs.cgs +0054af714a4db9a939abde5126dabe11 sim/testsuite/sim/arm/thumb/lsl.cgs +eb4d0f5b458b6c6e2a847d5c8673e3e6 sim/testsuite/sim/arm/thumb/mov.cgs +b1866a0b3f4e1244f6f32c7890b4623f sim/testsuite/sim/arm/thumb/blt.cgs +c41ea1558f80aa2acb0eabcfda617729 sim/testsuite/sim/arm/thumb/ldr-sprel.cgs +be66d0c1da07b0c483423dc9b3ef939d sim/testsuite/sim/arm/thumb/allthumb.exp +0c8a4f0432c4d3abeea38a2f31a8fed2 sim/testsuite/sim/arm/thumb/add-hd-rs.cgs +d9a906c124e9554e0980cc53b336b377 sim/testsuite/sim/arm/thumb/addi8.cgs +8bcf6d16383ab1c7ef09466857afbc37 sim/testsuite/sim/arm/thumb/neg.cgs +34994f81445d814b87b6aebce14a53c9 sim/testsuite/sim/arm/thumb/addi.cgs +a11035d426ce96b9dd0c5b94664abcc1 sim/testsuite/sim/arm/thumb/mov-hd-rs.cgs +995d38ff3ed038c4f5cbcad2d78e0207 sim/testsuite/sim/arm/thumb/and.cgs +1d8dd64ff6c23b570bbaa4d7afff968e sim/testsuite/sim/arm/thumb/str-imm.cgs +244babd31dcba228ef3637cbcca9c16b sim/testsuite/sim/arm/thumb/bhi.cgs +4dd23bc630fc11c4eca7cbea9fc36231 sim/testsuite/sim/arm/thumb/b.cgs +65de2dbbc1d1963e22a7ed146018c9cf sim/testsuite/sim/arm/thumb/add-rd-hs.cgs +2f5ae83cda2f549b102b57569f78f8d9 sim/testsuite/sim/arm/thumb/pop.cgs +6c4154b82d1b8a3579a0f42b4142aad5 sim/testsuite/sim/arm/thumb/cmp-hd-rs.cgs +fa00d6fb1a2926732b0eb28ae0c77c47 sim/testsuite/sim/arm/thumb/push-lr.cgs +e162af7a697a2fa2e10ecc1a56b45be1 sim/testsuite/sim/arm/thumb/beq.cgs +8c2c133f6c72015561ac976d7438ebe9 sim/testsuite/sim/arm/thumb/ror.cgs +c45fc39f2f692299fe4bf891668833d8 sim/testsuite/sim/arm/thumb/tst.cgs +6ed6d54faafbb0319c1604112b0c16c4 sim/testsuite/sim/arm/thumb/bl-hi.cgs +f558e4e07d5886e42d8da753f5adc9c2 sim/testsuite/sim/arm/thumb/ldr-pc.cgs +23d58ec2e23ff3bed4784642cc48aa06 sim/testsuite/sim/arm/thumb/bx-rs.cgs +5ae8870812f676720ebfc69b48c04ebb sim/testsuite/sim/arm/thumb/bne.cgs +6656596a7ff9c3b412deae76b7e38624 sim/testsuite/sim/arm/thumb/push.cgs +c5c60347531697a069a2800842ee3902 sim/testsuite/sim/arm/thumb/str-sprel.cgs +fcaed4c8608ce095dc4625f37383b515 sim/testsuite/sim/arm/thumb/bx-hs.cgs +84459a09af60b4a3de23776a8bf0adcc sim/testsuite/sim/arm/thumb/swi.cgs +13116b55efce4632651233f650d7dc78 sim/testsuite/sim/arm/thumb/mul.cgs +c1a57f0215877e8992c61e54d2446278 sim/testsuite/sim/arm/thumb/sub-sp.cgs +a2f21e7ede5faef4d9cee034a88928ae sim/testsuite/sim/arm/thumb/ldsh.cgs +56f88f8627fec54cd96656de2828c1f2 sim/testsuite/sim/arm/thumb/sbc.cgs +6cf3e8b7ef426b8914b47d8f7ec0a456 sim/testsuite/sim/arm/thumb/orr.cgs +ed9f50e3848ffa46f1f6918df9be8d9e sim/testsuite/sim/arm/thumb/ldrb-imm.cgs +f9d716a1d842d091c8ed298f1b5b1ae9 sim/testsuite/sim/arm/thumb/str.cgs +9679a91ccf07238a1c0161cde847fe85 sim/testsuite/sim/arm/thumb/bcs.cgs +f39dfdec26af7f089c85d0156d96f853 sim/testsuite/sim/arm/thumb/adc.cgs +4aebea08153a18c59cb89377cd0cd6e6 sim/testsuite/sim/arm/thumb/ldr.cgs +cd68a29c2b8bdaf0c8aed77438819e18 sim/testsuite/sim/arm/thumb/bvc.cgs +f25edf66e54fa2c53957abc6aa807d00 sim/testsuite/sim/arm/thumb/ble.cgs +05d4b004a36c86c46a3ba8f3a485c488 sim/testsuite/sim/arm/thumb/bcc.cgs +4983cedc4b15f2b1ff5dec0e01ec8705 sim/testsuite/sim/arm/thumb/ldrh-imm.cgs +a8c07a4b4764c4cc4c88cd2633394160 sim/testsuite/sim/arm/thumb/bl-lo.cgs +8575173ee07cb511f33d4ba01c67152a sim/testsuite/sim/arm/thumb/ldrb.cgs +91148c7f6657e7dd4e227a43f6ec7cfc sim/testsuite/sim/arm/thumb/ldsb.cgs +3896f647e72d591e262a40e5af29adf9 sim/testsuite/sim/arm/thumb/ldr-imm.cgs +4a2f10cac1edd904293441d716cad0f1 sim/testsuite/sim/arm/thumb/bic.cgs +70faca670e6c72adda93fb641c480b1f sim/testsuite/sim/arm/thumb/mvn.cgs +10371b41438911cf843b9cec25c67e1d sim/testsuite/sim/arm/thumb/strb.cgs +acb920479677a598ba5544db15addd06 sim/testsuite/sim/arm/thumb/sub.cgs +674db4c1215bd277651130d87a64a915 sim/testsuite/sim/arm/thumb/ldrh.cgs +b44832f5d79102e7efeee45f69462a66 sim/testsuite/sim/arm/thumb/eor.cgs +ec7f950054226d26fe7c00da759b2c4e sim/testsuite/sim/arm/thumb/bmi.cgs +b4f45a3bb387a75a6db056bef516b07b sim/testsuite/sim/arm/thumb/mov-rd-hs.cgs +a3a364cbdc5b492650e011da6f9c6de2 sim/testsuite/sim/arm/thumb/add-hd-hs.cgs +62c721a2ca73cdae002eba9841199014 sim/testsuite/sim/arm/thumb/strh.cgs +06e7eb2e9fd2173cafaaf5cbd62eac9b sim/testsuite/sim/arm/thumb/strb-imm.cgs +ead31b659b0f0e78ca8054010fc195a9 sim/testsuite/sim/arm/thumb/bls.cgs +0250cdbde1a106526ec9f3b4861b8d4a sim/testsuite/sim/arm/thumb/pop-pc.cgs +7bceba1198328ea2930942d76eca4da4 sim/testsuite/sim/arm/thumb/lda-pc.cgs +2588c865bab15990f4bd3546b3d82fe7 sim/testsuite/sim/arm/thumb/cmn.cgs +a1eda67b5040ebb08367e07d0624ee8a sim/testsuite/sim/arm/thumb/asr.cgs +9e9f7b260681e86c6c0b7e0006cd2154 sim/testsuite/sim/arm/thumb/cmp.cgs +03a9889899898201a14082970138178d sim/testsuite/sim/arm/thumb/bpl.cgs +bc1c96814fecd239a7955bc76320fae5 sim/testsuite/sim/arm/thumb/cmp-rd-hs.cgs +359c1c1f673e082a73606aea537c22ce sim/testsuite/sim/arm/thumb/bge.cgs +93c6ea09186e29b651ae931a0ba07760 sim/testsuite/sim/arm/thumb/testutils.inc +3b1245f3b53f4f2fd1788169d9d1e5a5 sim/testsuite/sim/arm/thumb/add-sp.cgs +e89c8dd1ff6ae4faa4b4dff6b626a850 sim/testsuite/sim/arm/thumb/stmia.cgs +cc9025ac9679ebfbd9e3fc340edbc697 sim/testsuite/sim/arm/thumb/bgt.cgs +b0b760fd79039fbf1125dc0a526be229 sim/testsuite/sim/arm/thumb/lda-sp.cgs +5ea6bc2fd59bbd0f3a4bd46fd117a8be sim/testsuite/sim/arm/thumb/bvs.cgs +f732171a10ed701eb2567ef67d88caf7 sim/testsuite/sim/arm/misc.exp +a80b83cc80d3d855b61666aa0100e627 sim/testsuite/sim/arm/ChangeLog +cae028721a4860ba721bb0b6a45e28de sim/testsuite/sim/arm/mov.cgs +7b279b86516c39f3610fd701192e55da sim/testsuite/sim/arm/ldm.cgs +58ac8d4d5ea2fe8c946251b4592629c6 sim/testsuite/sim/arm/and.cgs +d8cbbc37fbab2579e37ca9ed2c82d6e3 sim/testsuite/sim/arm/bx.cgs +99933c6f18e0fe8c3cbfeea3222bc270 sim/testsuite/sim/arm/b.cgs +b70b6932231ba7b22b55aa6b0dabd2da sim/testsuite/sim/arm/ldrsh.cgs +853c04dea43ce219f8fbb2d4dda8f96c sim/testsuite/sim/arm/tst.cgs +2f52c300639b0dccd15ed3b15bf2949b sim/testsuite/sim/arm/teq.cgs +e094567de77b483869bfaa906a58c5f0 sim/testsuite/sim/arm/misaligned2.ms +0720b66c5b001a3d08c3ba4b9df8a68c sim/testsuite/sim/arm/movw-movt.ms +7853156003daa0909a44ee8c2b159869 sim/testsuite/sim/arm/swi.cgs +0ad30943dc3310c090723d102d0c0c72 sim/testsuite/sim/arm/mul.cgs +5f5776bf35261a0924e7314d31bbec74 sim/testsuite/sim/arm/msr.cgs +e7ed4d8b65d61b3addaa13b237d5d630 sim/testsuite/sim/arm/hello.ms +bef5c11ab14ef76a4adf86bdb29f3fa7 sim/testsuite/sim/arm/ldrsb.cgs +24953ef6d2f93fbc574722cfeb6f0508 sim/testsuite/sim/arm/sbc.cgs +0b54dec83ea8c2148335d0c9411f827a sim/testsuite/sim/arm/rsb.cgs +e36fa83cfe6f8c23c2c4a874d15d6bb5 sim/testsuite/sim/arm/orr.cgs +510262d467a1cf529e9ebf863f5510bc sim/testsuite/sim/arm/str.cgs +7caaf16bdd001c1cfdc6d204be0595d5 sim/testsuite/sim/arm/stm.cgs +5477dc224f249d5d847bb14b5809df81 sim/testsuite/sim/arm/adc.cgs +93e27d311dd9c978b5fd3238d8a96ff7 sim/testsuite/sim/arm/ldr.cgs +da2138a738648ab058990d5e495fb407 sim/testsuite/sim/arm/umull.cgs +a35d3dd0d1cfca5cd666ab9d23676f5f sim/testsuite/sim/arm/allinsn.exp +2f129d54e1238525995fbb61345511b6 sim/testsuite/sim/arm/ldrb.cgs +8e130c393453b06b0c4f168915320147 sim/testsuite/sim/arm/bic.cgs +7f91c1c6ee07a5fa069f79687e6d3b18 sim/testsuite/sim/arm/iwmmxt/tmiaxy.cgs +d4cf1dd1687b956976c326aa10e0da93 sim/testsuite/sim/arm/iwmmxt/wunpckil.cgs +7f2e2adae5b6face7645ef4d178af158 sim/testsuite/sim/arm/iwmmxt/wmov.cgs +538bf57041e5e509121767d9ead1147e sim/testsuite/sim/arm/iwmmxt/wshufh.cgs +da03e694abbabd2571357cc9ed058c70 sim/testsuite/sim/arm/iwmmxt/wror.cgs +e40211a7420484d7931c301a38d87629 sim/testsuite/sim/arm/iwmmxt/walignr.cgs +949b94f7e376c46012141e8332dd28c0 sim/testsuite/sim/arm/iwmmxt/iwmmxt.exp +b468e9e418a1e1a91063cde9f01a5b65 sim/testsuite/sim/arm/iwmmxt/wavg2.cgs +182edb4dbe3c5f16e8bbc90c344f5958 sim/testsuite/sim/arm/iwmmxt/wsll.cgs +2ece72d7f9fed70851599aeafeb8fd75 sim/testsuite/sim/arm/iwmmxt/wunpckih.cgs +7155fabca12e398a7ae30604e6010df6 sim/testsuite/sim/arm/iwmmxt/wmul.cgs +3d4113ef895254186382634bb9654300 sim/testsuite/sim/arm/iwmmxt/wmax.cgs +bf292aeb577d786f1a5d93be72786c39 sim/testsuite/sim/arm/iwmmxt/wmadd.cgs +6f34dbce9217355b0034e980065123b2 sim/testsuite/sim/arm/iwmmxt/wand.cgs +aade4be67b5af16a82727edd01ff01a5 sim/testsuite/sim/arm/iwmmxt/wadd.cgs +23189fcb39a2352d1f2aebd9fa472b86 sim/testsuite/sim/arm/iwmmxt/wcmpeq.cgs +966e30e2028caa8495f566e530a4e4d2 sim/testsuite/sim/arm/iwmmxt/wunpckeh.cgs +1eeac0b2b5efecd25602ca32932a301e sim/testsuite/sim/arm/iwmmxt/wandn.cgs +372409901bb2e34b4370c142151e635c sim/testsuite/sim/arm/iwmmxt/wsrl.cgs +81f8cb5a71451f972f4e040b980f6606 sim/testsuite/sim/arm/iwmmxt/wsad.cgs +7f8a6603491a9bdea9261b3aefecd67a sim/testsuite/sim/arm/iwmmxt/wzero.cgs +ade7f421e7229ac22b99232d633506d8 sim/testsuite/sim/arm/iwmmxt/wcmpgt.cgs +37722d747ac7f2623a99bd2d5d04c319 sim/testsuite/sim/arm/iwmmxt/wxor.cgs +27a5dff0fce99446ea9b92149fd87aad sim/testsuite/sim/arm/iwmmxt/tmia.cgs +cb91cfc8d87632674bb08655b37257af sim/testsuite/sim/arm/iwmmxt/tbcst.cgs +676c13c4e65bd1da95adcdacc048ee0d sim/testsuite/sim/arm/iwmmxt/tinsr.cgs +648dcf66cfd2ce5849d2cbb42c74e3ef sim/testsuite/sim/arm/iwmmxt/wsra.cgs +f0f803cfe86027c9376da8bd15d603dc sim/testsuite/sim/arm/iwmmxt/wmac.cgs +7cbe9df76667e549020ee9154febcb84 sim/testsuite/sim/arm/iwmmxt/wpack.cgs +88c71104de87e83e76badb90eee05b15 sim/testsuite/sim/arm/iwmmxt/waligni.cgs +fd328a7cecef16b062706133bd86a185 sim/testsuite/sim/arm/iwmmxt/textrm.cgs +d3866e29becc0eb004bf50d7adcf21bc sim/testsuite/sim/arm/iwmmxt/wor.cgs +7a8797138da5f79dd25a529ca6aafda9 sim/testsuite/sim/arm/iwmmxt/wacc.cgs +33dad8b13e3c06ffd72fefbae3ae328c sim/testsuite/sim/arm/iwmmxt/wunpckel.cgs +154a974a65e03d5b99e084a97aae5048 sim/testsuite/sim/arm/iwmmxt/wmin.cgs +f0a99de3c5c47c3aa91c95c25879b41f sim/testsuite/sim/arm/iwmmxt/testutils.inc +b87db8b330bbfc39e8cc5c193bfd6752 sim/testsuite/sim/arm/iwmmxt/tmiaph.cgs +e3314ba0fb5456272846893666ca6076 sim/testsuite/sim/arm/iwmmxt/tmovmsk.cgs +b759e1c2be6dc0fb3b9656e41302b73c sim/testsuite/sim/arm/iwmmxt/wsub.cgs +28a00b5d6dacadae53e6f32c439dd867 sim/testsuite/sim/arm/mvn.cgs +bb3da4ab25011ccabcc1c8437f907d7d sim/testsuite/sim/arm/strb.cgs +1be7d9195c233759510ea7aea222287f sim/testsuite/sim/arm/sub.cgs +3d8cacbe82b517293ac2230f4947d142 sim/testsuite/sim/arm/ldrh.cgs +248009f835f984c6659530b0d8ac3d6b sim/testsuite/sim/arm/misaligned1.ms +61d1b5a430c450fa09d944dac4f6e9e9 sim/testsuite/sim/arm/misaligned3.ms +5b1a485b23f4ada997bc9c482f4b142d sim/testsuite/sim/arm/eor.cgs +5daa27aad0853ba541927ca858d54e0e sim/testsuite/sim/arm/smull.cgs +2db4b0c1e930d96e870724d2ecb71ec1 sim/testsuite/sim/arm/rsc.cgs +982a00c19684480239a8d14ca04bd9e5 sim/testsuite/sim/arm/strh.cgs +138b2c1c179325a81f413db374952dda sim/testsuite/sim/arm/mrs.cgs +d80faf2d614f5b40636508bb03f723ff sim/testsuite/sim/arm/cmn.cgs +514c9855ea49dbd189076992160d290a sim/testsuite/sim/arm/cmp.cgs +424eae0aeb212b99a0423296d92432f9 sim/testsuite/sim/arm/smlal.cgs +7c8eb7b1180e26892ff171384548e3df sim/testsuite/sim/arm/mla.cgs +f0a99de3c5c47c3aa91c95c25879b41f sim/testsuite/sim/arm/testutils.inc +f38f5ed68bbf76a6bb802723f8e111ac sim/testsuite/sim/arm/swpb.cgs +decca393fdfc52cc877634004f343e3a sim/testsuite/sim/sh64/ChangeLog +4d88a6bb053bdb9f313cc9e44b3989de sim/testsuite/sim/sh64/compact/movl6.cgs +ca5039c0a9d247a7ad8a7838814c5a51 sim/testsuite/sim/sh64/compact/add.cgs +b412b8b1cba9c4f12b56e8f6d43addcd sim/testsuite/sim/sh64/compact/movw6.cgs +0750fb0a09062e6e3f445b1b5fae47f3 sim/testsuite/sim/sh64/compact/addv.cgs +736d9c94762c50c4ebb3873c5882ee6d sim/testsuite/sim/sh64/compact/addc.cgs +f6175c66bb0865e362d80b12d35b4e62 sim/testsuite/sim/sh64/compact/movw7.cgs +2195ebca2557fdb8b9250b6f8119f3c5 sim/testsuite/sim/sh64/compact/cmpge.cgs +13ac597154fa151e3ce2d17689c7dedc sim/testsuite/sim/sh64/compact/rts.cgs +7c97c36a842284184ed5f0a5bcc23b15 sim/testsuite/sim/sh64/compact/bts.cgs +a83b93d213c6ae2251fd3edbcf5b848d sim/testsuite/sim/sh64/compact/div0u.cgs +cfd6dc4032d03f7f59178e637076b518 sim/testsuite/sim/sh64/compact/shad.cgs +b5dfa5e1a790085a09620c0c212b66b5 sim/testsuite/sim/sh64/compact/rotl.cgs +9a9b6aaff790f813fc1d056ad729961f sim/testsuite/sim/sh64/compact/andb.cgs +3ed23327fc2d63d69658bb695c3d7ff1 sim/testsuite/sim/sh64/compact/fldi0.cgs +eaee678fb2a62c462d0ca02f3fec06f0 sim/testsuite/sim/sh64/compact/ChangeLog +8715239f27b8d1960ebdb943d4e5d1a2 sim/testsuite/sim/sh64/compact/ldsl-pr.cgs +210e09801402bfa631991b5694d7e456 sim/testsuite/sim/sh64/compact/fmac.cgs +c560820cf73971bf5ad8d1c5e6d34bc2 sim/testsuite/sim/sh64/compact/movb2.cgs +255d1a9a0a5100e86ddd3be3343fb2d7 sim/testsuite/sim/sh64/compact/movl1.cgs +565e1c190cf53eb313700574bb75c194 sim/testsuite/sim/sh64/compact/movb6.cgs +819df15c8c0c437365a4a55311a1963d sim/testsuite/sim/sh64/compact/ftrc.cgs +74ca11e119e6ff999a91c28f9dbd9d1a sim/testsuite/sim/sh64/compact/movl4.cgs +88aabe91f30a2f4b660ac37395ed8129 sim/testsuite/sim/sh64/compact/ori.cgs +12e368bfea026db9f75001c7b9a072a6 sim/testsuite/sim/sh64/compact/movw10.cgs +760b6752e59d4567ccaa22144cf5bce6 sim/testsuite/sim/sh64/compact/mov.cgs +8c5d3b089d8d6e49fbcc8c985e0123a5 sim/testsuite/sim/sh64/compact/movl5.cgs +d5a01716385fce773d06295c1f926f2c sim/testsuite/sim/sh64/compact/swapw.cgs +c4960e4d2e53ddd17aab483fceae60aa sim/testsuite/sim/sh64/compact/xori.cgs +c9e47e035d8047dbf66ceb7ec629ef55 sim/testsuite/sim/sh64/compact/ldsl-fpscr.cgs +4021dc4dbbb01ff98d3e4fce1ac56845 sim/testsuite/sim/sh64/compact/cmpgt.cgs +db52acf9cd33a8ea5ab7084c31b7a89e sim/testsuite/sim/sh64/compact/rotcr.cgs +ce7833e00e1dbffdad8551457da869e9 sim/testsuite/sim/sh64/compact/sts-pr.cgs +295e0ca6bc578ef653c993cab6ac10d7 sim/testsuite/sim/sh64/compact/neg.cgs +b8ee7c280ee7fd98b740210aa179733e sim/testsuite/sim/sh64/compact/fcmpgt.cgs +5fd993753cd1d2e5ffa0225b24835161 sim/testsuite/sim/sh64/compact/lds-mach.cgs +ac72602f6ed2aa1b241f5c8186b7620b sim/testsuite/sim/sh64/compact/addi.cgs +5b1abceab332756d9e7ad22a1e837553 sim/testsuite/sim/sh64/compact/stsl-macl.cgs +a754ffb66032fcfe09d1d0190470afc6 sim/testsuite/sim/sh64/compact/subc.cgs +b79bdae0d7c852932a299b669c623c7e sim/testsuite/sim/sh64/compact/tsti.cgs +9805ed817520267b403266701b0aa2b4 sim/testsuite/sim/sh64/compact/ocbp.cgs +63d652f8bd1167eebf0a01433061bda0 sim/testsuite/sim/sh64/compact/movb7.cgs +0da63009df7cc8ad207a3c904ea3c2fc sim/testsuite/sim/sh64/compact/and.cgs +57e6e7addeb114f34244ed0be0408db6 sim/testsuite/sim/sh64/compact/movb8.cgs +1aae0513eb31849efab8069b6bb076ab sim/testsuite/sim/sh64/compact/lds-pr.cgs +2badb7a543131dacc5223bdc05bd29b0 sim/testsuite/sim/sh64/compact/orb.cgs +ef60dd63fb8069bba5356daa6add3cf7 sim/testsuite/sim/sh64/compact/fcnvsd.cgs +1230586c0d499ad71af2171d5edefc05 sim/testsuite/sim/sh64/compact/cmpeqi.cgs +f7765b4706fe2583f09df8ca82774ee0 sim/testsuite/sim/sh64/compact/movl2.cgs +91740f6d0a7b17e738a97aaf664236f6 sim/testsuite/sim/sh64/compact/bf.cgs +9e9399ae453003f6abca6e2e68613278 sim/testsuite/sim/sh64/compact/sts-macl.cgs +fd3ea9fd7e5a18185841283340755b0e sim/testsuite/sim/sh64/compact/stsl-pr.cgs +1bfff6ec47572335250341667cdcfcca sim/testsuite/sim/sh64/compact/braf.cgs +156851655fea4bdfd6c9677bcdfdb8a6 sim/testsuite/sim/sh64/compact/ldc-gbr.cgs +911a98f008d4dcf1069a3024fce10c86 sim/testsuite/sim/sh64/compact/extub.cgs +dcfb8af4205710d4ba72426b92d3c58d sim/testsuite/sim/sh64/compact/stsl-fpul.cgs +ccfa2823c1f548e855ef34f0610c279b sim/testsuite/sim/sh64/compact/pref.cgs +e368063a7aee2ddb299b3ee59140b22d sim/testsuite/sim/sh64/compact/movl11.cgs +6a7e70ef4397a49248108112489c5d6d sim/testsuite/sim/sh64/compact/bt.cgs +169370bb1837c9eb0637d793844367ce sim/testsuite/sim/sh64/compact/fschg.cgs +e6dcbfec9f39d518b57c7a06b972cf10 sim/testsuite/sim/sh64/compact/tst.cgs +8ef35680e34836bb65e0930876d5c052 sim/testsuite/sim/sh64/compact/swapb.cgs +e34dc396e58178682992a585b2ed6b60 sim/testsuite/sim/sh64/compact/fipr.cgs +9d3c5e66f4dbe4445930df3ffe62e665 sim/testsuite/sim/sh64/compact/mull.cgs +a6043d2be7b79df9b7a06f2291a17048 sim/testsuite/sim/sh64/compact/div0s.cgs +681d0be46e9f8b182c6a0cbdd6d552b8 sim/testsuite/sim/sh64/compact/bra.cgs +873125ad7311a241f63dc14e6174fd73 sim/testsuite/sim/sh64/compact/movt.cgs +d4663e721d8f95bf5d516d8f2bef0e33 sim/testsuite/sim/sh64/compact/cmppz.cgs +1da8d79ce7382470915e3d896cf8bb53 sim/testsuite/sim/sh64/compact/lds-fpul.cgs +b392c69b1d097f321a51487716ca2ac6 sim/testsuite/sim/sh64/compact/dt.cgs +fc91f77b312fcd436accecf89f6fef0b sim/testsuite/sim/sh64/compact/movw3.cgs +303f83bd4304f1318482a48817287855 sim/testsuite/sim/sh64/compact/fabs.cgs +6b8c97ed1cd766ad0ebddb4cababdc9a sim/testsuite/sim/sh64/compact/movw11.cgs +07eab8ef284eb295f7e90a098eb87cb2 sim/testsuite/sim/sh64/compact/clrs.cgs +690b915e479fd620957e41cc04da0f4f sim/testsuite/sim/sh64/compact/shlr2.cgs +44310b0f1be5895cbbcb6aadf0c8c432 sim/testsuite/sim/sh64/compact/shll8.cgs +1221053b1727f1610e1c810173d2717b sim/testsuite/sim/sh64/compact/shlr16.cgs +d3accf8ea5099b4dffe8c67a34a5d4a0 sim/testsuite/sim/sh64/compact/movl3.cgs +da2ade69bdab794ce3205960172b31bc sim/testsuite/sim/sh64/compact/rotr.cgs +7c0f2ee78bc85215e59468673d92a2d1 sim/testsuite/sim/sh64/compact/flds.cgs +e26665c1228526221c579dc239760f0a sim/testsuite/sim/sh64/compact/xtrct.cgs +3755234f585da186aecb8e5d8283dfa6 sim/testsuite/sim/sh64/compact/extsb.cgs +549a3e3cd3e0bbc0904ebc8c7d05a627 sim/testsuite/sim/sh64/compact/sts-fpul.cgs +3098a4bf21b00d4c423b39d02909fcb3 sim/testsuite/sim/sh64/compact/stcl-gbr.cgs +55ac8e9559a7ea47fdca66bef426da42 sim/testsuite/sim/sh64/compact/movi.cgs +5bff71e04db76173db94a6f710321a3e sim/testsuite/sim/sh64/compact/fmov.cgs +3be59f32d1c642776228836b13ddea6d sim/testsuite/sim/sh64/compact/movb9.cgs +6cbb4415a81c454139b8dd84d836f5a3 sim/testsuite/sim/sh64/compact/extuw.cgs +54ef71450122a228ee56f451b232c8f7 sim/testsuite/sim/sh64/compact/movb10.cgs +7725779b79cbf00fe9b69189081668b8 sim/testsuite/sim/sh64/compact/movw2.cgs +a95f07f642bd3ee43a82fe939e19e639 sim/testsuite/sim/sh64/compact/subv.cgs +a7d1bbe9c0cd6fc3791104baf80a6c22 sim/testsuite/sim/sh64/compact/ldcl-gbr.cgs +c44d851bd936d59d26ef94833a896ae2 sim/testsuite/sim/sh64/compact/movw5.cgs +d46aad4277c51016c3e2e655ccb04d68 sim/testsuite/sim/sh64/compact/movb4.cgs +58a4b01f4f30a9b27b10f1b5e006ad74 sim/testsuite/sim/sh64/compact/fldi1.cgs +9db8c4c308050e1a094d14f01e40dea2 sim/testsuite/sim/sh64/compact/movb1.cgs +5c71a3bb3ec9f16d0775cd9b7cc745a8 sim/testsuite/sim/sh64/compact/shld.cgs +1039cb01c8b78cceef8ab514b90ea88e sim/testsuite/sim/sh64/compact/fneg.cgs +c5ddcb29af919e712d9195de10a38ad9 sim/testsuite/sim/sh64/compact/ldsl-mach.cgs +e07fd593d0da1177a76a264a46e0f41c sim/testsuite/sim/sh64/compact/xorb.cgs +e47937604ee7a5201268ec0803501b03 sim/testsuite/sim/sh64/compact/movl9.cgs +6ae8403f0db6b164737220728121de32 sim/testsuite/sim/sh64/compact/movw9.cgs +ead7f7ae37ed28acb8fe9ca363446640 sim/testsuite/sim/sh64/compact/ocbwb.cgs +c601da6c1ba3e906262c28d268e3a58b sim/testsuite/sim/sh64/compact/bsr.cgs +e1f0a305ba67b9bee68e5144a68a62b7 sim/testsuite/sim/sh64/compact/clrt.cgs +fb3d330172050e46fbd98d776f49aad8 sim/testsuite/sim/sh64/compact/tasb.cgs +3960a7b561d89b9c8bfff49df0d5cb13 sim/testsuite/sim/sh64/compact/dmulul.cgs +f6cc357e0e59745b76d58dbcffe87f5f sim/testsuite/sim/sh64/compact/bfs.cgs +23e954e4ce42ac0831bb431bc6030795 sim/testsuite/sim/sh64/compact/cmphi.cgs +e8172666d081fe5605c35aaad372b337 sim/testsuite/sim/sh64/compact/lds-fpscr.cgs +d1bf11e1d56f7f101f57e498c318d058 sim/testsuite/sim/sh64/compact/movw4.cgs +ab062a29839df00af15600e6ec555da0 sim/testsuite/sim/sh64/compact/sub.cgs +dcc246daa7707392dbeda917c433dfbe sim/testsuite/sim/sh64/compact/div1.cgs +b18559b12291b7aaf2d2116f2d9388a4 sim/testsuite/sim/sh64/compact/fcmpeq.cgs +51493b43a58400a838ed217c7603c5e1 sim/testsuite/sim/sh64/compact/shll2.cgs +d31249cc284a3c3d2a65235745684829 sim/testsuite/sim/sh64/compact/mova.cgs +6dab94bfaf722b431ad195a2a4293b3d sim/testsuite/sim/sh64/compact/jsr.cgs +779dc242c637f859b44a3f6b41d3b505 sim/testsuite/sim/sh64/compact/rotcl.cgs +010401013cd6bfc3678a1a3543d3e160 sim/testsuite/sim/sh64/compact/fsts.cgs +15c13b8d1f8f07f3d8e220b6842cddc3 sim/testsuite/sim/sh64/compact/movw8.cgs +05a733d0240751b80661cfbf8613fe41 sim/testsuite/sim/sh64/compact/lds-macl.cgs +ecd016b2d92587918211793c88ab7f69 sim/testsuite/sim/sh64/compact/bsrf.cgs +683efdfba958a7fa3cf9f8e8fe4a740a sim/testsuite/sim/sh64/compact/tstb.cgs +31122c9a09fb41e1767cb1ec56bf3059 sim/testsuite/sim/sh64/compact/sts-fpscr.cgs +8bd60c5fdbda0679771e24aa4d119a84 sim/testsuite/sim/sh64/compact/fsqrt.cgs +744987cc3e82d9f65bd38dba8b94b722 sim/testsuite/sim/sh64/compact/fmul.cgs +3a13e917c1c5044e74793695d101cc04 sim/testsuite/sim/sh64/compact/float.cgs +e2beb2998f3e748874e58926c9bea9b5 sim/testsuite/sim/sh64/compact/ftrv.cgs +7d7669ca1e8e51c376385782db7e4101 sim/testsuite/sim/sh64/compact/brk.cgs +41e9f6ee3d74b2de2deae8166453693a sim/testsuite/sim/sh64/compact/ldsl-macl.cgs +603557da5c50e246d6bc1e557a6c82f9 sim/testsuite/sim/sh64/compact/fsub.cgs +55b29cbb9b738f78888fd22e3e8ef172 sim/testsuite/sim/sh64/compact/movcal.cgs +552613935856f5613d35b5a4c20b3300 sim/testsuite/sim/sh64/compact/muluw.cgs +237f94b7d82bbe794dec21c82e39ac16 sim/testsuite/sim/sh64/compact/extsw.cgs +719b877620e0e6689befdfa41fdbbaa3 sim/testsuite/sim/sh64/compact/sett.cgs +c56640f728d4b715e573a22fb5832a81 sim/testsuite/sim/sh64/compact/sts-mach.cgs +02ad979dbb014a39cc96c1d468fb826d sim/testsuite/sim/sh64/compact/movw1.cgs +9a06f5824ff0496eb4cc281f036d6bf4 sim/testsuite/sim/sh64/compact/shll.cgs +bef3697eee05ff945b53aa5953f833b7 sim/testsuite/sim/sh64/compact/shar.cgs +c7d45a6557c5fecb06d0953d401ec6e7 sim/testsuite/sim/sh64/compact/movl10.cgs +ee9aa5e3458c92acbe9ce8ce0a0a2ca2 sim/testsuite/sim/sh64/compact/frchg.cgs +650a78db8b345ce1d2bbe46c3f6f1a8b sim/testsuite/sim/sh64/compact/cmppl.cgs +28323bad885035fa8e7bb5709fed8541 sim/testsuite/sim/sh64/compact/fcnvds.cgs +4ec324a6ea217bdf129f4579e7ac1e15 sim/testsuite/sim/sh64/compact/trapa.cgs +aa7790e772f6f7f2ac8a483217e5e7f0 sim/testsuite/sim/sh64/compact/shal.cgs +440e94cae3b5da94abc9b9d0ffdb8536 sim/testsuite/sim/sh64/compact/dmulsl.cgs +e0053a70b797cc4fe77f657744cc4084 sim/testsuite/sim/sh64/compact/cmpeq.cgs +ec99ac48e2a44d9ceaee0a42ca9bef65 sim/testsuite/sim/sh64/compact/ldsl-fpul.cgs +c27b8d023bea7b97bd4e34e34d234996 sim/testsuite/sim/sh64/compact/not.cgs +8c4ca5484616b0c99faaec2b1a829761 sim/testsuite/sim/sh64/compact/cmphs.cgs +0625b2ce3e218d065741c215122dddf3 sim/testsuite/sim/sh64/compact/cmpstr.cgs +3074493d5e04d18b722e379d0cf2a9c8 sim/testsuite/sim/sh64/compact/clrmac.cgs +acf3b37669228c554574f0328cbded2e sim/testsuite/sim/sh64/compact/fdiv.cgs +a0f6650b39bd08de4cd1725fcd49f868 sim/testsuite/sim/sh64/compact/macw.cgs +02ba94c0c4976e37c371221fece2ddf0 sim/testsuite/sim/sh64/compact/mulsw.cgs +9d7e70aee614865172de0ca2019e009d sim/testsuite/sim/sh64/compact/fadd.cgs +32da06da3c217fa4db9f558533a350f2 sim/testsuite/sim/sh64/compact/nop.cgs +c117ffebe50a4c564bd752511a72f834 sim/testsuite/sim/sh64/compact/xor.cgs +40549ff3237f5ddffefea6e712cf1aef sim/testsuite/sim/sh64/compact/movb3.cgs +e0aaf9bc61e49ce27dd4d59aa5028430 sim/testsuite/sim/sh64/compact/movl7.cgs +fc724add45239cd526c1d256bc9b11f6 sim/testsuite/sim/sh64/compact/macl.cgs +0f56a0c25e45a9de365c44e105bd1481 sim/testsuite/sim/sh64/compact/stsl-fpscr.cgs +b6ea8a4bfb234524293e2c0f09ed4d98 sim/testsuite/sim/sh64/compact/testutils.inc +f7e5d3069f0a25c67f9dd87dba675de9 sim/testsuite/sim/sh64/compact/movl8.cgs +3e0158a19a50735d50721a69c9fab7d2 sim/testsuite/sim/sh64/compact/negc.cgs +cbbb7a0b67cfed8979f2802caba20514 sim/testsuite/sim/sh64/compact/shlr8.cgs +4e91b28cf642cde4e656ed0b7e771c26 sim/testsuite/sim/sh64/compact/shll16.cgs +3ff4b89901a61490263925c69da00c1f sim/testsuite/sim/sh64/compact/jmp.cgs +46158c951c41f5cc472de87a41b67b3a sim/testsuite/sim/sh64/compact/stc-gbr.cgs +f0137811e6c67d782d837b61fbbb3bbe sim/testsuite/sim/sh64/compact/sets.cgs +ffda35e809cf16b541e191c13caced95 sim/testsuite/sim/sh64/compact/stsl-mach.cgs +f41288943b1c077237eee8b1d8595f32 sim/testsuite/sim/sh64/compact/ocbi.cgs +11b9ddea67ef87692cad2ed3786a8b88 sim/testsuite/sim/sh64/compact/or.cgs +e7022d3945429974472de5e5f3f64aef sim/testsuite/sim/sh64/compact/andi.cgs +4ec2161356186cb5b58218ea64478d88 sim/testsuite/sim/sh64/compact/movb5.cgs +e55068ccbd32488af870d2b89de9000f sim/testsuite/sim/sh64/compact/shlr.cgs +c08a7766568f6ff991184037e7b74b3b sim/testsuite/sim/sh64/media.exp +6bd6f41965a7a151081da4fbde7ad141 sim/testsuite/sim/sh64/compact.exp +66f3cbc997f2e5c7d7fdddec7391416a sim/testsuite/sim/sh64/misc/fr-dr.s +afcc64d9020f7a6621b16c166d1822d1 sim/testsuite/sim/sh64/interwork.exp +810a402ce7c0fc8c479ed93abe3f7cc4 sim/testsuite/sim/sh64/media/msubsw.cgs +8223facc3f2040620addb77d76f86d55 sim/testsuite/sim/sh64/media/lduw.cgs +0d2871b1ddc8be351bde323f7de57d24 sim/testsuite/sim/sh64/media/mextr6.cgs +23464a5f4245f44835e719135142e31e sim/testsuite/sim/sh64/media/floatld.cgs +2c0b29bcb551599cf28f6b48000072ae sim/testsuite/sim/sh64/media/add.cgs +d681d96dee07b47d57f5ad2bf069957a sim/testsuite/sim/sh64/media/gettr.cgs +2a5f3da39bcd6bfafb792116fc4ff2b1 sim/testsuite/sim/sh64/media/fcmpeqd.cgs +57087427364f7d03b1966470f81ae64c sim/testsuite/sim/sh64/media/stlol.cgs +f9c22dc6393acac0d0e20eb95685035b sim/testsuite/sim/sh64/media/fnegd.cgs +b726b030a39b5e8d03179506ea8bbed3 sim/testsuite/sim/sh64/media/ptrel.cgs +8fe5277c40cde0884fb2e6eac0566167 sim/testsuite/sim/sh64/media/ldxw.cgs +77310578036150b882882fb79cbc7dda sim/testsuite/sim/sh64/media/fldxp.cgs +29a19726c0af365c1c808e54477cdb95 sim/testsuite/sim/sh64/media/fdivs.cgs +14efb3c2d768492a71c1b73ab45b4b6d sim/testsuite/sim/sh64/media/ldw.cgs +b31ffed1b6c63faace71bae9f2946574 sim/testsuite/sim/sh64/media/shlrdl.cgs +fe5424e3a2ca59f5ad6df0c201b21a4d sim/testsuite/sim/sh64/media/ldxub.cgs +deead7f9a94cdaa5efca9f477936761a sim/testsuite/sim/sh64/media/maddw.cgs +6a647e424464d48a834d1ef9c048299b sim/testsuite/sim/sh64/media/ChangeLog +24ac3e05cd975a2c74e937d973dfec18 sim/testsuite/sim/sh64/media/mmulhiwl.cgs +e56cbd032ad31c5a525ee3045994d047 sim/testsuite/sim/sh64/media/alloco.cgs +2256ec480546564403fd17e1f7feaf13 sim/testsuite/sim/sh64/media/fabsd.cgs +f930d359669ba95252537dc37fceb444 sim/testsuite/sim/sh64/media/fstxp.cgs +3e6f232a2c931cb40855a33538905c21 sim/testsuite/sim/sh64/media/fstp.cgs +b67275a90edc901353d572658789a302 sim/testsuite/sim/sh64/media/fldxd.cgs +0f29f0219eabcc98ab8c3d4eb9050824 sim/testsuite/sim/sh64/media/ori.cgs +0a9f54bea7db5d7a96c8479741aae579 sim/testsuite/sim/sh64/media/ldq.cgs +f9d1afdf821e290491aff9e12a393afe sim/testsuite/sim/sh64/media/mmulfxrpw.cgs +d4bbc2e9533fe235007b502910bbfa3f sim/testsuite/sim/sh64/media/byterev.cgs +9bbc7190782eedf13e1e86c251c73679 sim/testsuite/sim/sh64/media/xori.cgs +2d56e3709203765268b33b31906e803f sim/testsuite/sim/sh64/media/floatls.cgs +07ab156f6646ae2dba70f1c3dafa0bfe sim/testsuite/sim/sh64/media/mmulfxl.cgs +f3f39418b846d6c792e447b0f8102c4b sim/testsuite/sim/sh64/media/mcmpgtl.cgs +1b202c7029eea6ae864dfe5a3526b70f sim/testsuite/sim/sh64/media/floatqs.cgs +f497d819ffd67cdb06d419d8c5532b61 sim/testsuite/sim/sh64/media/cmpgt.cgs +99ea415b174e6031eac2f0ab762b9a33 sim/testsuite/sim/sh64/media/bgtu.cgs +a87d593dbc890eec83f06331f8d76c8a sim/testsuite/sim/sh64/media/addl.cgs +7117be89bbc1032da057d26206ce199b sim/testsuite/sim/sh64/media/fcmpgtd.cgs +0ee1f1d000b8d348aebc3cd0deca0686 sim/testsuite/sim/sh64/media/prefi.cgs +00d6a437f0b11e7790cc6597fae337bf sim/testsuite/sim/sh64/media/andc.cgs +c558d2c812f1c91198f6d6068eea2725 sim/testsuite/sim/sh64/media/addi.cgs +c58ca1dc2b7e7397f3f91d84a9c92283 sim/testsuite/sim/sh64/media/msadubq.cgs +2125ef6a28e6c0f847f0f24dbda15562 sim/testsuite/sim/sh64/media/fstxd.cgs +0f495f99619adbcf8313fdc7ce9380ae sim/testsuite/sim/sh64/media/ocbp.cgs +4921484170b87924852f0d16d2759c7e sim/testsuite/sim/sh64/media/shlril.cgs +76ce8603b52a63abe0fb9369079ad534 sim/testsuite/sim/sh64/media/addzl.cgs +ce0f10a7cb56824949015bf881061997 sim/testsuite/sim/sh64/media/and.cgs +c8f57ef77ae3417d83d696eb539b0e46 sim/testsuite/sim/sh64/media/fabss.cgs +591776a8c46e7ca2b29f29c335b32133 sim/testsuite/sim/sh64/media/fnegs.cgs +9a5ee455cb4fe7cd30c6e6a13940334a sim/testsuite/sim/sh64/media/mshaldsl.cgs +dd423bee72982fb8c4827535ac0ab3b3 sim/testsuite/sim/sh64/media/mcmpeqb.cgs +448e41e7a622846e9addd4d68e6dee7b sim/testsuite/sim/sh64/media/ldloq.cgs +2bbc457c0f5aefe554ccba990057dba7 sim/testsuite/sim/sh64/media/bgeu.cgs +8b62b811fb18205ad65b8ee8b48f952d sim/testsuite/sim/sh64/media/fcnvsd.cgs +72202c9df10988ee0ab14e200469e5de sim/testsuite/sim/sh64/media/pta.cgs +2689c29380eaa34c757659ba53238d99 sim/testsuite/sim/sh64/media/ldub.cgs +2d7c997ff0d4c0062704b5553a0eaa6c sim/testsuite/sim/sh64/media/shari.cgs +879792361ec250133544683585ebc541 sim/testsuite/sim/sh64/media/mextr2.cgs +baba1b97037672cf15d5541ddb5708fd sim/testsuite/sim/sh64/media/ftrvs.cgs +4435d87997b90b8430843386079f71a7 sim/testsuite/sim/sh64/media/mshlldl.cgs +d25a0a7d3f6e6b2b59f5be8b583cec10 sim/testsuite/sim/sh64/media/msubw.cgs +f01c762582353e21851eb14c043b3c31 sim/testsuite/sim/sh64/media/floatqd.cgs +8d80fa1d953ab1e454a27359d807595d sim/testsuite/sim/sh64/media/ftrcsq.cgs +ea2ef003c1205b0eaf9616c6fd309583 sim/testsuite/sim/sh64/media/ldxq.cgs +0a582efef90b421fe20d1bfdb783f8c7 sim/testsuite/sim/sh64/media/beq.cgs +136dec63d822deaaa78a52ebdab53d7f sim/testsuite/sim/sh64/media/sthil.cgs +facfd3bbc0f3ffa3aa6d48ea038660c6 sim/testsuite/sim/sh64/media/mextr7.cgs +4e767dee4b103e6b05d871dc1131598b sim/testsuite/sim/sh64/media/synci.cgs +238e6fb75904bbf9348ee2e178d02018 sim/testsuite/sim/sh64/media/mcnvswub.cgs +449078d68b16532a731bd08e9e996205 sim/testsuite/sim/sh64/media/putcon.cgs +7b5796c6e56c76eedf4d548bb9379f02 sim/testsuite/sim/sh64/media/mshflob.cgs +a54372d652695a1a6bd199405298e096 sim/testsuite/sim/sh64/media/mulsl.cgs +1b1156080c657abb802fa1d024d698d3 sim/testsuite/sim/sh64/media/mpermw.cgs +0c99b37c2d5eb483c839970bc7ad5700 sim/testsuite/sim/sh64/media/ldb.cgs +c5bb9661c37857bd3f7cdfb9179e9fb8 sim/testsuite/sim/sh64/media/cmvne.cgs +3c138bfeb6f5c6f2192ef864881a8efe sim/testsuite/sim/sh64/media/stxb.cgs +35153e02665b95e1a018851d7e198045 sim/testsuite/sim/sh64/media/putcfg.cgs +ff9be75f4b2823203b287462284b9d23 sim/testsuite/sim/sh64/media/ldl.cgs +561b1a31d5e4d4e4e0f6a176555fd4df sim/testsuite/sim/sh64/media/ftrcdl.cgs +86ec4698affdaef7978529e10ec47617 sim/testsuite/sim/sh64/media/maddsl.cgs +43da021fc1670aff713af73672325c22 sim/testsuite/sim/sh64/media/ldhil.cgs +3f13e9adb83f9e617c3ae06db46dcf51 sim/testsuite/sim/sh64/media/mcmpeqw.cgs +5d24af2add6ccdc400d0ca6c052ef72e sim/testsuite/sim/sh64/media/fmovd.cgs +eafa3e6055c2543e8f65baedc5f32801 sim/testsuite/sim/sh64/media/bne.cgs +e920fecc1d427f295341a44f501ae32e sim/testsuite/sim/sh64/media/msubsub.cgs +a94ff86eb306dfb576126b8b3c0f223c sim/testsuite/sim/sh64/media/fcmpged.cgs +3efa232854d2fbb0982ebb618ef82f0b sim/testsuite/sim/sh64/media/fstxs.cgs +e7ca7125935973bb37ffc2a9c6152024 sim/testsuite/sim/sh64/media/fmovqd.cgs +2bfa24643c3c0250dbde10b3770b7118 sim/testsuite/sim/sh64/media/fstd.cgs +1d0b03597f3929efda09843cf25a1921 sim/testsuite/sim/sh64/media/mshardw.cgs +98b6d40ed29f302fc82899263174356d sim/testsuite/sim/sh64/media/flds.cgs +3ed34a15eb4567f07e0d7998bfe6ec44 sim/testsuite/sim/sh64/media/maddsw.cgs +807adf144f3a47e85a751a3fbdf81a4d sim/testsuite/sim/sh64/media/bnei.cgs +3e7645d763248e43608d4c24d001c9de sim/testsuite/sim/sh64/media/fsubs.cgs +6de85c4710700f4ac394cd6d5dab41ff sim/testsuite/sim/sh64/media/getcon.cgs +4dac27f822f1416c682a23804e448ca4 sim/testsuite/sim/sh64/media/fmacs.cgs +9046090d0a1e4603256bcce96b4cb48f sim/testsuite/sim/sh64/media/mextr3.cgs +fb4facb88f4269ce1a69e52f4a331022 sim/testsuite/sim/sh64/media/ptabs.cgs +3b94178fb469c2f76fcb5943c7be6e35 sim/testsuite/sim/sh64/media/shori.cgs +fd0765d429901be2d95147ad6de4d3f4 sim/testsuite/sim/sh64/media/stxq.cgs +1f02888e70c1cd3e489b0353dda7a199 sim/testsuite/sim/sh64/media/mcmpeql.cgs +ab4d95bbe89732a06b5629d36153ff5c sim/testsuite/sim/sh64/media/mcnvswb.cgs +0ecaa2df7dbd6ac20bbbff648091c1c6 sim/testsuite/sim/sh64/media/ptb.cgs +77b4b0f77af5b81bf2bad3907598356e sim/testsuite/sim/sh64/media/stw.cgs +4bb19ac27e630b3ce15dbda8c9757706 sim/testsuite/sim/sh64/media/movi.cgs +46780ec90276865e100a33aee7da7b91 sim/testsuite/sim/sh64/media/shllil.cgs +318c032459429b25629474531630cee8 sim/testsuite/sim/sh64/media/ldxuw.cgs +50c4325ed80bd0ac6d352c3452716257 sim/testsuite/sim/sh64/media/fgetscr.cgs +bc4ef44f68a9bfaa0027d5a03d5fe2e0 sim/testsuite/sim/sh64/media/msubsl.cgs +6e7e8abec6fdf76c85011c31cec690a7 sim/testsuite/sim/sh64/media/cmpgtu.cgs +fc7b9962b7a23eb5ee130ec9e5b48ffc sim/testsuite/sim/sh64/media/mshardsq.cgs +74ed9f945ee0bcee562f5615646df4d9 sim/testsuite/sim/sh64/media/mshlrdw.cgs +6a9d2a6855f7661bc838501f1bae5ece sim/testsuite/sim/sh64/media/mextr1.cgs +a900893a600e8c7b36249f092bd3af97 sim/testsuite/sim/sh64/media/shlli.cgs +91bc8cd1e2117278e49fb4369e00a372 sim/testsuite/sim/sh64/media/fputscr.cgs +ab92faebe155f396230755fbbcc7e336 sim/testsuite/sim/sh64/media/mmulsumwq.cgs +ce29ea2284e05c7ce8ec675ef12e6685 sim/testsuite/sim/sh64/media/beqi.cgs +576279c2b9b6bacac9c42b1b62ff5ff1 sim/testsuite/sim/sh64/media/mmacnfx-wl.cgs +f26ca0c3df6a34480e27e9d7f45b5cb4 sim/testsuite/sim/sh64/media/nsb.cgs +375ad3205c51531607c0be84338a8293 sim/testsuite/sim/sh64/media/fmovdq.cgs +8eaa1c1a294f08a0f0cc11704dc6a6c9 sim/testsuite/sim/sh64/media/shlrd.cgs +bfb8f066c4e3a9fa294d95b1ff5e78b1 sim/testsuite/sim/sh64/media/fsqrtd.cgs +279f2287e09d42fcf95bb6c7c1954668 sim/testsuite/sim/sh64/media/mmulfxw.cgs +8d100290db53ee7eefeaebd1c7b7dd62 sim/testsuite/sim/sh64/media/sthiq.cgs +bb522dd2216512dac666e8a54d932a50 sim/testsuite/sim/sh64/media/sharil.cgs +3b5b24ec8e109174b008f3908a2c3607 sim/testsuite/sim/sh64/media/fmovsl.cgs +31ec08556e5b415245abbadcfabee29e sim/testsuite/sim/sh64/media/icbi.cgs +18cb207fe0e147495b61871bf8a7d6aa sim/testsuite/sim/sh64/media/mmull.cgs +ee7b2737ae885b341a7efaf393fc4d79 sim/testsuite/sim/sh64/media/fcmpuns.cgs +b2bdbbe496e858ffc42260510e2dc993 sim/testsuite/sim/sh64/media/getcfg.cgs +278918f6f143cad554024e0210cc1bcb sim/testsuite/sim/sh64/media/mabsl.cgs +643c1e48c75384c5ab4b3f4e291e82e8 sim/testsuite/sim/sh64/media/blink.cgs +3f15d00cd31419a7ad8c1e08b9f7f5ea sim/testsuite/sim/sh64/media/mshlldw.cgs +9739bce3941d9fb8347f1c0c90ae5228 sim/testsuite/sim/sh64/media/ocbwb.cgs +46c7c9f0d50e3c8c05193849f0f15ee1 sim/testsuite/sim/sh64/media/mcnvslw.cgs +47dc7daa584ec04b01ff797dcad4e32a sim/testsuite/sim/sh64/media/fldxs.cgs +b55bb3005484f5d786afbad9d233811d sim/testsuite/sim/sh64/media/mshardl.cgs +ba1d30bad41e82950e1ec4da5068a80e sim/testsuite/sim/sh64/media/rte.cgs +5f32595b1e5308db437c208779156652 sim/testsuite/sim/sh64/media/subl.cgs +e5ca6ed82dcec1c3b3b7dec680899688 sim/testsuite/sim/sh64/media/ldxb.cgs +32ef81f8563b99aa0f92d9b6bce16e51 sim/testsuite/sim/sh64/media/mshfhiw.cgs +ef21755ea68237459f25c4316a3a4d16 sim/testsuite/sim/sh64/media/swapq.cgs +a67e8dfae6fe1dbbc27e3ff8408aa429 sim/testsuite/sim/sh64/media/msubl.cgs +78774529723f51dfef3452f15cacb32a sim/testsuite/sim/sh64/media/mshaldsw.cgs +66ba4dba51dbcfd5e8ce7d52167b2d5e sim/testsuite/sim/sh64/media/fcmpges.cgs +c2b9bf3da80b4223ff83c8c4b2ebca91 sim/testsuite/sim/sh64/media/mabsw.cgs +d3dea74ed66e7d66666846d8662d7894 sim/testsuite/sim/sh64/media/fadds.cgs +a4c69037e69000c2bfea4927c16a7730 sim/testsuite/sim/sh64/media/shardl.cgs +7a68dce6ffd80eaee6d187d5d580d8ed sim/testsuite/sim/sh64/media/fsqrts.cgs +8a8867591c6f0aa6e52a581f3dc7590e sim/testsuite/sim/sh64/media/fsubd.cgs +859954c33155265599f610ff0ec6422e sim/testsuite/sim/sh64/media/fiprs.cgs +b4187964e5978a86eb1382b481447028 sim/testsuite/sim/sh64/media/maddl.cgs +602ba68059df6645c442484e37707ccb sim/testsuite/sim/sh64/media/sub.cgs +e0311adbd968c1a70fbb040b187d84f2 sim/testsuite/sim/sh64/media/stq.cgs +2a329964d8e276bc4a1e463638078929 sim/testsuite/sim/sh64/media/shlldl.cgs +340ee385a6e0296dac7fcfb26d67a1f8 sim/testsuite/sim/sh64/media/stl.cgs +5a2c9d43d6603f1d1a15f279726aeabc sim/testsuite/sim/sh64/media/mcmv.cgs +707d21183c4b9916a479978b34b839d6 sim/testsuite/sim/sh64/media/fsts.cgs +1ec9b9915f998b1b5527affbb7b1165f sim/testsuite/sim/sh64/media/ldhiq.cgs +e75c17ddd7eead085e92062b91f900d3 sim/testsuite/sim/sh64/media/mmulw.cgs +a8aeb11eef57d970015fcb23cdc873c9 sim/testsuite/sim/sh64/media/fcmpund.cgs +cc6dd7c9f7ffbcc8459556677381b6af sim/testsuite/sim/sh64/media/mextr5.cgs +88a17b7a509b166a9245dadb200c3318 sim/testsuite/sim/sh64/media/synco.cgs +728ae0c771c2eb97bf7e1ecdb6c77ad8 sim/testsuite/sim/sh64/media/mulul.cgs +7cb6bfcf9b1c8c998133ae9576b408aa sim/testsuite/sim/sh64/media/stxl.cgs +6f75489c9cc1d58e403d5af0b1585546 sim/testsuite/sim/sh64/media/fcmpeqs.cgs +52fcbfeca5b4d265b2970475cb256d00 sim/testsuite/sim/sh64/media/ftrcdq.cgs +3a931dfcf601cfdcc15e178ecc1266df sim/testsuite/sim/sh64/media/mshlrdl.cgs +0fff48c19adde0f7cc4bc15a70a8060b sim/testsuite/sim/sh64/media/mcmpgtub.cgs +7affc0c1042b3480f375846d1088c308 sim/testsuite/sim/sh64/media/fcmpgts.cgs +9f1276774332e1c55f90fa3566180d4e sim/testsuite/sim/sh64/media/fmovls.cgs +92ae194f7d1cd53869b9afb9028cb10d sim/testsuite/sim/sh64/media/brk.cgs +f08ebb545f8b741f8182f40123abb0a8 sim/testsuite/sim/sh64/media/stxw.cgs +1bdc45e1c74cf1262943cb1902a69f5e sim/testsuite/sim/sh64/media/fmovs.cgs +43a72115a4c49186f8b57a24c747ada9 sim/testsuite/sim/sh64/media/mcmpgtw.cgs +d9d562eac1c48a96eabfeb3312a9be90 sim/testsuite/sim/sh64/media/addil.cgs +a887a2e5c5042c1cbf4ede41a2ad2aa2 sim/testsuite/sim/sh64/media/ldlol.cgs +acad0b474344fe9bb10aed735b08462a sim/testsuite/sim/sh64/media/shard.cgs +96720e079b2b534d21eb7f17806d9861 sim/testsuite/sim/sh64/media/mextr4.cgs +e4a1d1c976a76f6c44da4be44a1a1641 sim/testsuite/sim/sh64/media/fdivd.cgs +195734136941d8fb6caf1205014b0897 sim/testsuite/sim/sh64/media/fldp.cgs +6950be0c56405f87f1baa0cea84bb971 sim/testsuite/sim/sh64/media/stb.cgs +4a6666bfe33a68a30aa8b487c325063f sim/testsuite/sim/sh64/media/fcnvds.cgs +b0332c26af82f6508597ec86b7043290 sim/testsuite/sim/sh64/media/shlld.cgs +15b0cc0d16a86186e5b427915152b48e sim/testsuite/sim/sh64/media/trapa.cgs +9ae3b61a99198960f4baf5d7f79eff88 sim/testsuite/sim/sh64/media/fmuls.cgs +3a032628732b41bf067fc8e55428a58f sim/testsuite/sim/sh64/media/cmpeq.cgs +e19406336e30c7c1553789123c77be83 sim/testsuite/sim/sh64/media/mshfhib.cgs +9b68cc2fd9580f39a3658becb2e21782 sim/testsuite/sim/sh64/media/shlri.cgs +345f5eb194aa5c826b88db7a1de4a0ce sim/testsuite/sim/sh64/media/fldd.cgs +060fe31b0b91c1e980dffb585566d27e sim/testsuite/sim/sh64/media/faddd.cgs +ea0a6f5053f4682afc6015dcb356b316 sim/testsuite/sim/sh64/media/nop.cgs +457e3b142accbbc0a3b034e36c8f64e8 sim/testsuite/sim/sh64/media/mmacfxwl.cgs +30c62b03976f8ab78b8fac6daf4c2fdc sim/testsuite/sim/sh64/media/xor.cgs +c4e169c36ce16958d300c0361693e173 sim/testsuite/sim/sh64/media/bge.cgs +ad28f968a1d98c2efb00d8fd9b4bc680 sim/testsuite/sim/sh64/media/testutils.inc +3f17073ba8c0fff8779af811a37c52f9 sim/testsuite/sim/sh64/media/ldxl.cgs +6abc9a1bb9042f67a6ee425481074a31 sim/testsuite/sim/sh64/media/cmveq.cgs +37d51372abfbec0fa574f1b6cdc846b0 sim/testsuite/sim/sh64/media/bgt.cgs +75952ee791e76e8cda1902983af57c15 sim/testsuite/sim/sh64/media/mmullowl.cgs +a21ff91fdfbca28f8b47ffaa5142b0e5 sim/testsuite/sim/sh64/media/sleep.cgs +e2c9ca9508255faa5208d3cf788fb80d sim/testsuite/sim/sh64/media/mshflow.cgs +a010a7dc4864a1d3d16bd18de1cad548 sim/testsuite/sim/sh64/media/stloq.cgs +9f29c4e3990574afbd44cf2d011e147d sim/testsuite/sim/sh64/media/ftrcsl.cgs +c2d384a77172e147e10faa7f98596989 sim/testsuite/sim/sh64/media/mshflol.cgs +b3c90f618cbdfb2c768d43a47849a3f1 sim/testsuite/sim/sh64/media/mshfhil.cgs +482de020e815e2991e183a8e12caa476 sim/testsuite/sim/sh64/media/ocbi.cgs +2c84a234f6763a20fe6a6d937974217f sim/testsuite/sim/sh64/media/or.cgs +f655bef64291e78aab1635993ffd3079 sim/testsuite/sim/sh64/media/fmuld.cgs +778e7888e0d816fca810990d862c3079 sim/testsuite/sim/sh64/media/andi.cgs +5ca6131f741869214aa684d39676d3f0 sim/testsuite/sim/sh64/media/maddsub.cgs +499c38564866481121b0d4804cc2eb44 sim/testsuite/sim/mcore/ChangeLog +aab2411e48af29b33d5327c279cd436e sim/testsuite/sim/mcore/pass.s +a656d826d6556550d52f0a5a7bde9720 sim/testsuite/sim/mcore/fail.s +178c1ec8ff06957342104c37bde03952 sim/testsuite/sim/mcore/allinsn.exp +60ceb9e073a38ea16c95effe15a2cbe4 sim/testsuite/sim/mcore/testutils.inc +45e3b96fa5b2e581805f106c3d99f968 sim/testsuite/sim/sh/fcnvds.s +e8ca39483f9c71cfdb1b1b03069df2bc sim/testsuite/sim/sh/pshai.s +be1710af076cee30f8262a7bef8685ab sim/testsuite/sim/sh/pand.s +cd42365d5bc0d1bb4979cdfd320ce433 sim/testsuite/sim/sh/fschg.s +d292c4a8d61a79c219e38af6dd3c4393 sim/testsuite/sim/sh/bset.s +e548ee358487284309e5b5717cabf0f9 sim/testsuite/sim/sh/fneg.s +1f420e9b6f74d6d03ae952bdffbd8799 sim/testsuite/sim/sh/pshli.s +d0c8446d0ede1ebe79245b96cb002c8d sim/testsuite/sim/sh/macl.s +bef19f1e4cfc1d6ad2fb8643c0033ca0 sim/testsuite/sim/sh/bldnot.s +1c5758102c8fc39d63286d44032ad5a7 sim/testsuite/sim/sh/ChangeLog +f98492eeeab950ed63e6c2d52a3c57d8 sim/testsuite/sim/sh/fcmpgt.s +4152aee3945ac6afc68b16dd206f851a sim/testsuite/sim/sh/pdec.s +c3726f7efa272c1305bc3a7ad9225e5b sim/testsuite/sim/sh/pdmsb.s +19200c14eefed0db8e7e3f7b7df9a7da sim/testsuite/sim/sh/shll.s +47831a2ea8e21901de14ee85de649e42 sim/testsuite/sim/sh/flds.s +ea612dc8f08a57ade93a63b0b6563e5c sim/testsuite/sim/sh/fdiv.s +472229ecd10ac8f327137e22183f3e92 sim/testsuite/sim/sh/resbank.s +c3b63bb6fbe1f996d7e66e6ed5ef9f32 sim/testsuite/sim/sh/fmul.s +40b3372c773573dc611cbd9c64efa162 sim/testsuite/sim/sh/pswap.s +6ee03b6e9943d9a05f82c8206ce794cf sim/testsuite/sim/sh/pinc.s +649dca482464a82f27f31481b2f1c8e0 sim/testsuite/sim/sh/clip.s +04ba23f9a7e46a261c68dc833abac5a3 sim/testsuite/sim/sh/fmac.s +69150191761fac26b8276af2f85efd90 sim/testsuite/sim/sh/dmxy.s +fcad598d555a1a24eaa76710c494e71b sim/testsuite/sim/sh/pabs.s +2b09fe70d0d48f4cec2f1bd3d656928f sim/testsuite/sim/sh/fsca.s +d8c8b220768728a015ad5b9fbb9d2c90 sim/testsuite/sim/sh/padd.s +c43420d54a7dd81d3ea55fbf72cd8d3e sim/testsuite/sim/sh/mulr.s +f8dca2ef83e73c5c462ef000c13478bb sim/testsuite/sim/sh/and.s +f008ac5e491f8ceab68b9f59056e9b16 sim/testsuite/sim/sh/fipr.s +5fb60364b4fd1e6b5d37ccdd4c3f4540 sim/testsuite/sim/sh/swap.s +0b43bcfde07c09c6103965070e9046ae sim/testsuite/sim/sh/fpchg.s +47a2df7f664eaff06846045d7e64b5ce sim/testsuite/sim/sh/float.s +73bee7558210c5db604fb0929091597e sim/testsuite/sim/sh/sett.s +954b6cdc60b0808db2732f2f65d65983 sim/testsuite/sim/sh/loop.s +81c176582a8667af8f6c72a2728737ab sim/testsuite/sim/sh/pshar.s +bd7b8686162d8d1030ccd108eb48f610 sim/testsuite/sim/sh/movi.s +849e99ce0f988f5329a7bf2d582cefd5 sim/testsuite/sim/sh/pass.s +dc3cb25df84ca51ea42371f6a4dec6aa sim/testsuite/sim/sh/prnd.s +ee7309424adcb28d1aabb8c418ef8930 sim/testsuite/sim/sh/mov.s +eed4f3e2827f2bdcff0fd693f4be62d0 sim/testsuite/sim/sh/pshlr.s +8f6a40a17e345540ee1f269d29aa5d9a sim/testsuite/sim/sh/paddc.s +7fcd022e6881b031f0deee8c6816a79a sim/testsuite/sim/sh/fadd.s +ddfdbd007dc52a5ecc5e1981dc705462 sim/testsuite/sim/sh/shlr2.s +f379912c20dda0ba7cd86cecc19eca47 sim/testsuite/sim/sh/shlr16.s +2f5a45c653e08f75d00a67577a721db7 sim/testsuite/sim/sh/fail.s +7f6673539421b7915a57f34826612d75 sim/testsuite/sim/sh/fcnvsd.s +12c9ce87dbd160a77d59f6aa29ddd375 sim/testsuite/sim/sh/shll2.s +eff7f8091a30f489f6cf9bb2c8aeac8d sim/testsuite/sim/sh/shlr8.s +50beb02380bc81e62c64158672183b61 sim/testsuite/sim/sh/movua.s +0c12a523abb2532f2abb3eeeff95cfce sim/testsuite/sim/sh/movxy.s +9b040b83149755d82c2328509c12535e sim/testsuite/sim/sh/frchg.s +3150deaa0636676e8347bb114fe1d308 sim/testsuite/sim/sh/div.s +9c9f493d16eacff7f4315bd95a0c8b18 sim/testsuite/sim/sh/shlr.s +e7a32d44b0b0d9d4309d241eaf991fcf sim/testsuite/sim/sh/pmuls.s +430ffdb88b8f5c054817526afb4be362 sim/testsuite/sim/sh/allinsn.exp +22f8beefa505dc232a3593e167d51b2b sim/testsuite/sim/sh/fcmpeq.s +b43309a7445615ae8abafb4900d4f3e7 sim/testsuite/sim/sh/fldi0.s +556a45437699573fa48c643bd8248712 sim/testsuite/sim/sh/bld.s +b07d68ae2523ae371be0b115d5cc9253 sim/testsuite/sim/sh/movli.s +698d502e8fcf6a8e8193fee2a1274e94 sim/testsuite/sim/sh/psub.s +5fdca3286426034467b63b36d3a3c5e2 sim/testsuite/sim/sh/fldi1.s +6074ab626f6f749947d90dad804223a8 sim/testsuite/sim/sh/fmov.s +92f8a202d1e874f537d74831851dba46 sim/testsuite/sim/sh/fsub.s +055b8ddbb40bf3ffeb7b5eac3057b54b sim/testsuite/sim/sh/bandornot.s +379168064f95675285708c5eaf92bad2 sim/testsuite/sim/sh/bst.s +f5d3cc68031f17d500295fbcd18bb1f7 sim/testsuite/sim/sh/fsqrt.s +1c367b6cd0a26caaab7382c8a4a40578 sim/testsuite/sim/sh/pushpop.s +36e38378e39dd9cceb78c21823b24693 sim/testsuite/sim/sh/bxor.s +e4e686dacc645b9fc1114279b13b460b sim/testsuite/sim/sh/fabs.s +f72cc94c6e69883b35e7075dbdcbcea3 sim/testsuite/sim/sh/bclr.s +b7ea335c1e85ef1fac26f071abdb2fac sim/testsuite/sim/sh/fsrra.s +4a9329e1cb4c8a230a4e050d69c0b717 sim/testsuite/sim/sh/bandor.s +b1d24d30151886ff5bf5bc86758709b1 sim/testsuite/sim/sh/ldrc.s +282a3539572ea760a8d7a480a27800d4 sim/testsuite/sim/sh/add.s +578530fadcb2c9974c7eb490be9a2aa7 sim/testsuite/sim/sh/testutils.inc +48d214fbad43f9efc8c0cc2014239984 sim/testsuite/sim/sh/macw.s +c56c6a1871d8e035a8eb50e2c1cb89f0 sim/testsuite/sim/sh/shll16.s +ed2aa1abfc2026579333e2253c838294 sim/testsuite/sim/sh/ftrc.s +532a7fc5abd000fbfcdfa409da20f0fa sim/testsuite/sim/sh/pclr.s +bd6af3c86e2f58147320c9b2961781cd sim/testsuite/sim/sh/shll8.s +8a8d262fc5f4bdd1b576f5085dd86b39 sim/testsuite/sim/cris/hw/rv-n-cris/mem2.ms +7673098aa15ed428f71f5b22a1f13d0c sim/testsuite/sim/cris/hw/rv-n-cris/trivial4.ms +447863ee59979057a731bd58463fa304 sim/testsuite/sim/cris/hw/rv-n-cris/std.dev +f6d32608623f87d96663d265b179fb6f sim/testsuite/sim/cris/hw/rv-n-cris/trivial4.r +3073a96241c996d1c0c68974914f74bf sim/testsuite/sim/cris/hw/rv-n-cris/trivial2.ms +3b551095d657c411e3f6ae88d9d00f77 sim/testsuite/sim/cris/hw/rv-n-cris/irq5.ms +dbe2031bb4db0e18eb8b262a35576545 sim/testsuite/sim/cris/hw/rv-n-cris/irq1.ms +d7574d3043705abb13a00a2684b5d915 sim/testsuite/sim/cris/hw/rv-n-cris/host1.ms +4b44b5e187cf10e9a1e097d6d0c785a1 sim/testsuite/sim/cris/hw/rv-n-cris/trivial5.ms +a2452f548d0fe6d247d6a5b6b4d62721 sim/testsuite/sim/cris/hw/rv-n-cris/wd1.ms +44e633f375ddc4d5894941c26c1c45f8 sim/testsuite/sim/cris/hw/rv-n-cris/irq6.ms +6332e0f695520a5fd138ddfc5de0dcea sim/testsuite/sim/cris/hw/rv-n-cris/mbox1.ms +05eff01544466ceb8cc637ae1ed7c96d sim/testsuite/sim/cris/hw/rv-n-cris/poll1.ms +84d3ac00e10363039e374d6c6f0981ea sim/testsuite/sim/cris/hw/rv-n-cris/irq4.ms +ef064c7b060493a8f7faf78eb0cae219 sim/testsuite/sim/cris/hw/rv-n-cris/trivial3.ms +d74cffc2804266c55d97d7b03388e421 sim/testsuite/sim/cris/hw/rv-n-cris/trivial1.ms +ecbeb52370b71fd859dc5f48b2bde71e sim/testsuite/sim/cris/hw/rv-n-cris/quit.s +21fea04d62d6d19416a41a528c5132ff sim/testsuite/sim/cris/hw/rv-n-cris/rvc.exp +772a3407fa1e2fc1a810157f58887cde sim/testsuite/sim/cris/hw/rv-n-cris/mem1.ms +16170ceabd6c9848db05b8cfc2eedcf7 sim/testsuite/sim/cris/hw/rv-n-cris/irq3.ms +c9091f1850cd8db0e2d3f3696e91054a sim/testsuite/sim/cris/hw/rv-n-cris/testutils.inc +aa7ad744b0bc60196bdf954177f2cb95 sim/testsuite/sim/cris/hw/rv-n-cris/irq2.ms +23ba554b0573e61de88f5d8845ddea6a sim/testsuite/sim/cris/ChangeLog +e522a6433d65d3c0a300178b242b58dd sim/testsuite/sim/cris/c/mmap6.c +9e857c786f649510740550577636fa60 sim/testsuite/sim/cris/c/freopen1.c +29c2f654808c90dbb79584a57bb693bc sim/testsuite/sim/cris/c/sig9.c +a6d1101c58781140696015731a836765 sim/testsuite/sim/cris/c/pipe6.c +8d9ec2d8e98873231644fd2928eedd11 sim/testsuite/sim/cris/c/getcwd1.c +404abc34f36e44bf83f9259d6de84eac sim/testsuite/sim/cris/c/hellodyn3.c +c0e04f2b9fefcb80eb53e1550116f49f sim/testsuite/sim/cris/c/stat1.c +654a16be0a1e70047321ae73a8e34c25 sim/testsuite/sim/cris/c/stat3.c +2451f3d36cbfbe0fcac765781a858f0e sim/testsuite/sim/cris/c/sched2.c +67ec38ee427de40a93d1dab24bca2787 sim/testsuite/sim/cris/c/readlink1.c +28acfc17ffb85e9ad08bf03b54364eea sim/testsuite/sim/cris/c/sysctl3.c +59b654800ab7895cebfbc7b0f7114045 sim/testsuite/sim/cris/c/openpf5.c +8dee6920379731612e518ab5c1b52129 sim/testsuite/sim/cris/c/mmap5.c +749c4a65acd72ed14fa1ac3b2cb21028 sim/testsuite/sim/cris/c/gettod.c +bed307959abae151f8251a2aa94f5fb3 sim/testsuite/sim/cris/c/pipe1.c +0269530a71d3427dabbb84aeb11f3c0a sim/testsuite/sim/cris/c/clone1.c +3362bf08ac2ded34da69fabf7165f628 sim/testsuite/sim/cris/c/clone5.c +2d4c2f79ecdb8323bbe9cce4e20c5dd2 sim/testsuite/sim/cris/c/sig3.c +b1fb5f8eb9f0402708a60ab761e2f767 sim/testsuite/sim/cris/c/seek3.c +6dcea03f790840f18ea8fd64127724c5 sim/testsuite/sim/cris/c/sig11.c +565c7444b0cb03669e9e3490df139414 sim/testsuite/sim/cris/c/sig10.c +1d9766a687655c334147a81547f4d35b sim/testsuite/sim/cris/c/rename2.c +b6dede668026bc1b3a88551a29d37998 sim/testsuite/sim/cris/c/mprotect2.c +11192685d2e3b68b4da90f7cf68fe582 sim/testsuite/sim/cris/c/syscall8.c +76252d805935152a8a395d166eb58367 sim/testsuite/sim/cris/c/mapbrk.c +6f9d4d83964d160c93eed9432d507573 sim/testsuite/sim/cris/c/syscall2.c +b002267b24d426d4ae91610f8bea22ad sim/testsuite/sim/cris/c/seek1.c +23a35358f6b5397b05295030549fb462 sim/testsuite/sim/cris/c/clone6.c +3855c8a67a930c364dfcdf7fb19e76ea sim/testsuite/sim/cris/c/exitg1.c +255e7480e65cb422a35a979131718266 sim/testsuite/sim/cris/c/readlink11.c +77d15d167d2e0c72fa21387375cd9dc0 sim/testsuite/sim/cris/c/sysctl2.c +7f8e2cee9aa8074fd03e27007034b38f sim/testsuite/sim/cris/c/ex1.c +2e215ceef67a0ea53f763ecc91012fab sim/testsuite/sim/cris/c/fdopen2.c +dade7a63298c84d0174ebda71a7fa376 sim/testsuite/sim/cris/c/truncate2.c +bc53972854656ed53a133834033ebb44 sim/testsuite/sim/cris/c/sig8.c +e691954a7ba7158e83626f4c975a85ed sim/testsuite/sim/cris/c/sigreturn1.c +f1e11f695bb093625be81b8fc324de82 sim/testsuite/sim/cris/c/append1.c +2c7ce1214983ff7757a9a3a260675438 sim/testsuite/sim/cris/c/hellodyn2.c +93e4cbcae267860da4713824d7ab26fc sim/testsuite/sim/cris/c/sig4.c +46698027bdeb7ff534bcaae25cfed3ea sim/testsuite/sim/cris/c/pipe2.c +2dc90db6492c7915acfd9d8c4c4b7fd3 sim/testsuite/sim/cris/c/kill1.c +56b085b53eea3eaff52ed3cbd614538f sim/testsuite/sim/cris/c/sched5.c +1140f36e946d0721e14b43c17656a6c8 sim/testsuite/sim/cris/c/helloaout.c +dedbe73fd0801fd79e3926d56d5d3b69 sim/testsuite/sim/cris/c/readlink10.c +f9ab2babd200f7bbd9b679f60c9dc136 sim/testsuite/sim/cris/c/freopen2.c +96353e6f0e8a0a7e6f52e4d55e03e0db sim/testsuite/sim/cris/c/sigreturn4.c +b61cf3cca5bf399335c11308f3a8bc52 sim/testsuite/sim/cris/c/clone4.c +858217cb5c5ddb0c2cffbb7ed06e5fe7 sim/testsuite/sim/cris/c/syscall5.c +60854fabe3d60fad9fedf210455bd03b sim/testsuite/sim/cris/c/syscall4.c +33ec0c3647b169206223f953d4bec850 sim/testsuite/sim/cris/c/mmap7.c +e142f3c102619bb0256f07e0b7eb68aa sim/testsuite/sim/cris/c/badldso2.c +dc28b3a9345098c89c39ac4c0ef02f86 sim/testsuite/sim/cris/c/seek2.c +754e51048e1a20f21f95d5f5b76e315a sim/testsuite/sim/cris/c/ugetrlimit1.c +aa50b7df97a5974860b06781313fefb4 sim/testsuite/sim/cris/c/clone2.c +1f8a017092ba6fcbdb63831a6d1fddfc sim/testsuite/sim/cris/c/ftruncate1.c +32afb9e16db589c161e15936615b72d8 sim/testsuite/sim/cris/c/openpf3.c +d2eebcf4b27d666f115002238a95e9cc sim/testsuite/sim/cris/c/mremap.c +3c1d79499542dc743b4a23ee18c74fd0 sim/testsuite/sim/cris/c/syscall3.c +7a9259e3ec6e9661ccfc9fbf6c2dca1e sim/testsuite/sim/cris/c/settls1.c +2e9729e3376302b1ef46bde8bc7f88a5 sim/testsuite/sim/cris/c/openpf4.c +244728880f7a59ca8197581196366a8e sim/testsuite/sim/cris/c/mmap2.c +6caf43a36fee1de1cd658dd7b9df9f28 sim/testsuite/sim/cris/c/readlink8.c +bb344255c26b7ff66ba972f594a52ff9 sim/testsuite/sim/cris/c/readlink6.c +f13f3eb93fb037c514f32acce267e780 sim/testsuite/sim/cris/c/readlink3.c +01e1821708be4a05ad45a85c900f4daf sim/testsuite/sim/cris/c/stat4.c +5c0166471388803f8a87b2e75f8cb540 sim/testsuite/sim/cris/c/pipe5.c +e726def043e06af10f26f71f05989453 sim/testsuite/sim/cris/c/sched8.c +c065dec5d6d385dfd55808a041c17ab1 sim/testsuite/sim/cris/c/time2.c +c5dc5fdc3fa43e4e5d6e51a2cda8c297 sim/testsuite/sim/cris/c/writev1.c +1a3574caa2bc1a3e97b486486582a550 sim/testsuite/sim/cris/c/rtsigsuspend2.c +2b56dd7467ff0cf466b91d8b0bf253b9 sim/testsuite/sim/cris/c/mprotect1.c +c3292b96518cff172bb4d88953f1e85d sim/testsuite/sim/cris/c/rtsigsuspend1.c +146e32cb7a96bfa48d24a8e8206253f8 sim/testsuite/sim/cris/c/c.exp +be489bb1f78e97b8b3e47474a4b07933 sim/testsuite/sim/cris/c/stat7.c +5aef57f0aa440d4a2e9cd8ebad961daa sim/testsuite/sim/cris/c/thread5.c +ce16bacf1d60113a5c0e03a1bb070d89 sim/testsuite/sim/cris/c/ftruncate2.c +6652ae9c1f46ef0e790abe331a413cc2 sim/testsuite/sim/cris/c/pipe4.c +bd926ac35b64d187f9466e95e69139be sim/testsuite/sim/cris/c/sig1.c +94c95ed6ab3d8b1110e1e278063bce03 sim/testsuite/sim/cris/c/access1.c +3b8aa26ae0d326bc2f6c5e7b6b0d97df sim/testsuite/sim/cris/c/readlink5.c +1b12a53abdcc110b05a27f86ec82a144 sim/testsuite/sim/cris/c/sched1.c +28980e0264ebee5d39ee20d559023cc1 sim/testsuite/sim/cris/c/badldso1.c +d240d97f980a2b5bf5e50f40cda75cb8 sim/testsuite/sim/cris/c/pipe3.c +7b15a3fb928cf2af3a5fdba949623d5d sim/testsuite/sim/cris/c/writev2.c +e0ff04c2f66d5683806accf52c5a5c85 sim/testsuite/sim/cris/c/sig12.c +bb365d27eec3e78769965aefa87ecf04 sim/testsuite/sim/cris/c/sched4.c +2cc75950d1deb441cd82effb9a01ea94 sim/testsuite/sim/cris/c/sig2.c +c43cdb23d79a23f9bc3d8b95b20121e4 sim/testsuite/sim/cris/c/badldso3.c +f2df9aca537b3f4f4ad3e125a5e60778 sim/testsuite/sim/cris/c/sigreturn2.c +aa0cc3e3a6590e21d1422c36e67d46f0 sim/testsuite/sim/cris/c/sig13.c +17706d61b6ff3a97993baa049383e034 sim/testsuite/sim/cris/c/truncate1.c +bd5bc121e85df515345f34f12c3c294d sim/testsuite/sim/cris/c/sjlj.c +6309fd9674cb770b4802886a74d9ec04 sim/testsuite/sim/cris/c/exitg2.c +e72c1ba5c42bc26baf3997a515d411dc sim/testsuite/sim/cris/c/seek4.c +15815c6cf12beefc7597f68d9b5148c2 sim/testsuite/sim/cris/c/stat2.c +f1411b703fcd6badb90f276646d32f24 sim/testsuite/sim/cris/c/syscall7.c +b370018cab1c72d75c1ea87610fd7773 sim/testsuite/sim/cris/c/sock1.c +871e76b97d097a594ac69b273cd490ab sim/testsuite/sim/cris/c/rtsigprocmask2.c +e91673e9386c7e482814039f1fe08e3a sim/testsuite/sim/cris/c/uname1.c +88553eaf83703a59cbc8361643680b59 sim/testsuite/sim/cris/c/setrlimit1.c +498cda002f91b397e6317146f285ca85 sim/testsuite/sim/cris/c/sig7.c +f6119ae18fa0133c2c9818b18e01ebc6 sim/testsuite/sim/cris/c/kill3.c +3eb9b7f3e6a1a8e35ac66cbf048e5bf4 sim/testsuite/sim/cris/c/hello.c +636048f3ba0304af174e7096f70abd17 sim/testsuite/sim/cris/c/fdopen1.c +2c2a2069d8fcbc006396cfb9ae749a91 sim/testsuite/sim/cris/c/mmap3.c +631048ddb6f9dff670e4a59beaabc81f sim/testsuite/sim/cris/c/openpf2.c +e7b41c99814c28b6604c647430917b4e sim/testsuite/sim/cris/c/hellodyn.c +1394f715c3c3f448462016b2114396e2 sim/testsuite/sim/cris/c/readlink7.c +b8cf5d844a877a014c7e928e17856db0 sim/testsuite/sim/cris/c/time1.c +3399987136f5aa5a07a144e772b4eb8a sim/testsuite/sim/cris/c/sigreturn3.c +4a2a61b782a1069557cec29154217082 sim/testsuite/sim/cris/c/mmap1.c +649916de976212a31beb966c0d9ec21f sim/testsuite/sim/cris/c/rtsigprocmask1.c +0c9e2d022ccbfd44ca86687c68f5d67e sim/testsuite/sim/cris/c/thread4.c +58491fc532f3932e426eaea1676f84e1 sim/testsuite/sim/cris/c/kill2.c +ded7029b6558766ad174b8ad68e2a6ac sim/testsuite/sim/cris/c/sched9.c +6caec686cea8fd103570f5a11d22103f sim/testsuite/sim/cris/c/pipe7.c +b976c33ef4b4a551c903d495708c81c3 sim/testsuite/sim/cris/c/clone3.c +b1ec63e4c4c81066c2c4ea8b7cba870e sim/testsuite/sim/cris/c/sig5.c +994f44c9411fbf0f86e3bb31f3b086da sim/testsuite/sim/cris/c/sched3.c +b55556b825ca9d54124a043dc3ed4911 sim/testsuite/sim/cris/c/sched6.c +4556ba96585517de2f2eb2d2c898f2a1 sim/testsuite/sim/cris/c/syscall6.c +76a475d64d7a621fe12d8107b35de203 sim/testsuite/sim/cris/c/openpf1.c +48d76b9632e424203cafd7d2a10424fa sim/testsuite/sim/cris/c/thread3.c +2606622deb8f7164b7dd52c54e8e0764 sim/testsuite/sim/cris/c/sched7.c +537da8824f256e117c4f392687279519 sim/testsuite/sim/cris/c/thread2.c +86c2ceb180ebd532b644605f3da83107 sim/testsuite/sim/cris/c/fcntl2.c +b3a611ff2914bafc74e5e03c6670ecd6 sim/testsuite/sim/cris/c/syscall1.c +85d07e227f3da16227efd370d4bd98e8 sim/testsuite/sim/cris/c/readlink9.c +9cef688125999d097b8fab9239621f08 sim/testsuite/sim/cris/c/sysctl1.c +cddeadd523c716f3e065b3db91c6598d sim/testsuite/sim/cris/c/readlink4.c +cb3173d4abb5e27ab24ff09d049646bd sim/testsuite/sim/cris/c/stat5.c +6991044fcf18c8e5d841e4bd7437ccea sim/testsuite/sim/cris/c/sig6.c +b4406066f629d45fa7a492ad97bb35fb sim/testsuite/sim/cris/c/readlink2.c +16df4a6a8d008acb0db573bbca23bc7a sim/testsuite/sim/cris/c/fcntl1.c +c5ba8136a099953307e60d97437eeef2 sim/testsuite/sim/cris/c/mmap4.c +06b60a56edef9d411652f374749adef1 sim/testsuite/sim/cris/c/mmap8.c +10eb2f4b61f6908d3cb3a06f0a8f2def sim/testsuite/sim/cris/c/stat8.c +d15391935ca4c69dfa85d6c0f888fdeb sim/testsuite/sim/cris/asm/movsrpc.ms +70712ff7b9b19a93be512af7e15c245b sim/testsuite/sim/cris/asm/bccb.ms +78e9293d31b7461d137dc0ff8968f666 sim/testsuite/sim/cris/asm/sbfs.ms +152588b5fbb59aab4a789c32082baecd sim/testsuite/sim/cris/asm/movecrt32.ms +9488a97f680e48ad7132c79e4cf055cb sim/testsuite/sim/cris/asm/clearfv32.ms +38cf597a973dd9df4ea28b4872bc73b9 sim/testsuite/sim/cris/asm/nopv32t.ms +9dfa0a22cdc4310a491a61947e6ee18d sim/testsuite/sim/cris/asm/movur.ms +7f4b76ce2acc68884932a32ea46a3e7c sim/testsuite/sim/cris/asm/mulv32.ms +57faa30b3f920ee188ce72d0453daee9 sim/testsuite/sim/cris/asm/halt.ms +c3c61f8d4c0515eeee975292dc0a718f sim/testsuite/sim/cris/asm/movpr.ms +3c2d6762617530e584961f7630a34d58 sim/testsuite/sim/cris/asm/subxm.ms +2cc26138923126bad1f3c0411249801b sim/testsuite/sim/cris/asm/ftagd.ms +b7870ec565bcc1c4e6a59cc359e85330 sim/testsuite/sim/cris/asm/mcp.ms +3173b88b402a0711ac76f427a87b94b1 sim/testsuite/sim/cris/asm/rfe.ms +28e25ab8991ba77ab89f1821d8133c56 sim/testsuite/sim/cris/asm/raw17.ms +fa784df29314879a4ca90fab8c371c96 sim/testsuite/sim/cris/asm/movucpc.ms +47d66dfd6c2b779644000a0d6c49eda8 sim/testsuite/sim/cris/asm/scc.ms +a9438c1d50113d9dd4cd1a1da3878fc4 sim/testsuite/sim/cris/asm/cmpxm.ms +ecac755c33794472a9f46c0af5176546 sim/testsuite/sim/cris/asm/pid1.ms +461cec9d6dc84c3e170d3d48e567fca2 sim/testsuite/sim/cris/asm/movprv10.ms +18838432ce304ca531ba5932926b055c sim/testsuite/sim/cris/asm/tjmpsrv32.ms +503836d16a165ba371e6ab2725a4e249 sim/testsuite/sim/cris/asm/opterr4.ms +6a41028ccbd191bab8591a495714b7df sim/testsuite/sim/cris/asm/op3.ms +70731cd0eb6983253223310f3deebf30 sim/testsuite/sim/cris/asm/ba.ms +5c135a54385ba1496f41c19577a7d0e0 sim/testsuite/sim/cris/asm/x6-v32.ms +25567231e8a01af2321bcb2b171fefb6 sim/testsuite/sim/cris/asm/pcplus.ms +f2dffb8e24bb84e9340456f16901bd82 sim/testsuite/sim/cris/asm/nopv32t3.ms +f8a0fd268e1e283ce98a93f08d462c7f sim/testsuite/sim/cris/asm/raw9.ms +8265c3e5f0cec4ddb884b9740689ce56 sim/testsuite/sim/cris/asm/movei.ms +0e4cdcc3d930dbe4bb1960224de30c37 sim/testsuite/sim/cris/asm/addxc.ms +5b1a83a07ae1f436fae2c9afc9e32e0a sim/testsuite/sim/cris/asm/dstep.ms +8c2eb325206f4b871171eed08ef84121 sim/testsuite/sim/cris/asm/mulv10.ms +e3520c7d04732f9662598a2f73bdaf2e sim/testsuite/sim/cris/asm/andc.ms +c173fb572b6df495c772e07f5363d46a sim/testsuite/sim/cris/asm/tmemv10.ms +fac7339a938456bd828ee00b51c8f648 sim/testsuite/sim/cris/asm/cmpxc.ms +d972f2e08c829a759859a71e68b136dd sim/testsuite/sim/cris/asm/movemrv10.ms +8827577d2a0e20172dda7213c21a6805 sim/testsuite/sim/cris/asm/option1.ms +14b8d0c38494b61aab6cf1712bf36c59 sim/testsuite/sim/cris/asm/io7.ms +267cb619594093cb439088e46c9df7ee sim/testsuite/sim/cris/asm/raw5.ms +fe9ec586c2fc70714864986dcf435482 sim/testsuite/sim/cris/asm/movesmp.ms +f6627838b1f0dc4f49302fc81d86a887 sim/testsuite/sim/cris/asm/bare3.ms +562df25c42da35363dd3d75ea3811f37 sim/testsuite/sim/cris/asm/not.ms +1898f9c7f50751789369a3e14d183793 sim/testsuite/sim/cris/asm/io1.ms +57d425c5b4b9fef24cb94071a1a2dbde sim/testsuite/sim/cris/asm/ccs-v32.ms +17dd79fca49908b8c928b404e00814dc sim/testsuite/sim/cris/asm/lsl.ms +edefc7200870247aa1d8995ba517ba50 sim/testsuite/sim/cris/asm/x9-v10.ms +c5edbb044bd6500ea76cca5aa555fa14 sim/testsuite/sim/cris/asm/movepcw.ms +9b1a656bf4b326af7b3a1ea20a2c4189 sim/testsuite/sim/cris/asm/addqpc.ms +6accf667f81ed8bfb8c56f18e8e844c9 sim/testsuite/sim/cris/asm/addq.ms +c3a673b686630e75037fd83b792e0311 sim/testsuite/sim/cris/asm/movsmpc.ms +b237b59f3cda9ba8783de6f3ec0dc9de sim/testsuite/sim/cris/asm/moverpcd.ms +ebdf7ba59efa1850437aa3f32a2d17c5 sim/testsuite/sim/cris/asm/movsr.ms +b1fbda4cbc4148fcd1d52e10fac71369 sim/testsuite/sim/cris/asm/movum.ms +97ef65c3f3d9068fb73f9b40eb072c79 sim/testsuite/sim/cris/asm/bdapqpc.ms +37899e7414d05fdcbf1d760c84613019 sim/testsuite/sim/cris/asm/fidxd.ms +20f91c681dc2609edb3caf20351e4c45 sim/testsuite/sim/cris/asm/bdapq.ms +4a4c657a9d8be8e6567a4b26be9c0b26 sim/testsuite/sim/cris/asm/movecr.ms +02cf2500b611340a806d5d24828c2ae6 sim/testsuite/sim/cris/asm/test.ms +eaa47e885647f776382ab73a6f5961ec sim/testsuite/sim/cris/asm/addom.ms +a81626c906efa0bcb8640d2d3dc2a691 sim/testsuite/sim/cris/asm/subq.ms +9393cf1098b1bd5dae16cd948ef96f08 sim/testsuite/sim/cris/asm/option4.ms +30bc829c5021270dec933e8b5fc63d6a sim/testsuite/sim/cris/asm/sfe.ms +f75b29130d9dab5a61f14c36ffb9384a sim/testsuite/sim/cris/asm/raw6.ms +4afaec581991cef7a06f93749c270620 sim/testsuite/sim/cris/asm/x7-v10.ms +5d9fc3dddcb759fb2774fbb8f4392de7 sim/testsuite/sim/cris/asm/asm.exp +4afa3ee0acec4592cb0ef423894cd516 sim/testsuite/sim/cris/asm/moverbpc.ms +de067018bde6e6a1ba0c704e9f4a5ff1 sim/testsuite/sim/cris/asm/orc.ms +1359413b7986cecedcd94ebe610283d9 sim/testsuite/sim/cris/asm/movepcd.ms +af31a5dab88b669267a99dfef2f68de1 sim/testsuite/sim/cris/asm/jsr.ms +074dc6598e23e28f78546cee905c554b sim/testsuite/sim/cris/asm/io4.ms +c0d5a8770803259746508dc445dd8854 sim/testsuite/sim/cris/asm/boundr.ms +2a56c3fdc58d83482fb410d1f7fab779 sim/testsuite/sim/cris/asm/opterr1.ms +5697dbd11faf9c4ae8d1ac633b1bf571 sim/testsuite/sim/cris/asm/opterr5.ms +5da23c5c235f9234e2f92203712100c4 sim/testsuite/sim/cris/asm/dflags.ms +d4276914b1dd16998d507727bab55d1e sim/testsuite/sim/cris/asm/x7-v32.ms +797ca60d36294ec7548da5326ab314fe sim/testsuite/sim/cris/asm/cmpm.ms +9549eb00a2575e64da41069b45d66b26 sim/testsuite/sim/cris/asm/ftagi.ms +84855c457ddac74d211a8e33ba4e5727 sim/testsuite/sim/cris/asm/movecpc.ms +06fedf705fd1d73f7df0f480a1e79110 sim/testsuite/sim/cris/asm/tmvrmv10.ms +bc3f5069bc4718bbb9ffee12e416bdc6 sim/testsuite/sim/cris/asm/raw2.ms +e1a4ba67d2b7566edb96dbf069c4565e sim/testsuite/sim/cris/asm/subxc.ms +732a4b2c72c297f341dbba90410b1720 sim/testsuite/sim/cris/asm/raw14.ms +7d0116d90d1fb2cde17c9aa42dcb2a52 sim/testsuite/sim/cris/asm/option3.ms +a909c3f9eca7ac8afed8e09345f10da2 sim/testsuite/sim/cris/asm/addc.ms +9f9bb997017dd3932826751b6dd361ea sim/testsuite/sim/cris/asm/msteppc3.ms +96fbb5c40c0c7c3e819ab1beafa25c6e sim/testsuite/sim/cris/asm/addxm.ms +c74fca6bdce3306512f05cf52ed25d17 sim/testsuite/sim/cris/asm/x1-v32.ms +750db2caea6a5174fce9f0e83d686cbb sim/testsuite/sim/cris/asm/io2.ms +347b1a9e1c63a246cfcd0334e0b2011b sim/testsuite/sim/cris/asm/lz.ms +fbccae3a6f364b56c1d99624f359cd68 sim/testsuite/sim/cris/asm/raw1.ms +179a2d91e5cb558001696b20ec54c0d7 sim/testsuite/sim/cris/asm/nopv10t.ms +47666f39f5eb8756ba8f49ab48e7d66e sim/testsuite/sim/cris/asm/jumppv32.ms +da50619c2878e9a3e3bda17fbdafa435 sim/testsuite/sim/cris/asm/raw8.ms +9e4218d5ddcfefb5541438b39a0a7e69 sim/testsuite/sim/cris/asm/nopv32t4.ms +b9ce945a8347f31dbf85d6f3ef69a065 sim/testsuite/sim/cris/asm/nonvcv32.ms +5118adbb201cb7bf5a37bef5da1c11fa sim/testsuite/sim/cris/asm/moverm.ms +dff4cfde15294bc9a91d3c44534b8793 sim/testsuite/sim/cris/asm/moveq.ms +fbdc943a9cb4c111b4847a8c5c14d950 sim/testsuite/sim/cris/asm/raw13.ms +980dc5105a922cccdbc3260960087e09 sim/testsuite/sim/cris/asm/clrjmp1.ms +2214b2e2ed7ea02738a11f0b28c7dd4e sim/testsuite/sim/cris/asm/clearfv10.ms +9b14a01d3bbba327dc100d7365b400a2 sim/testsuite/sim/cris/asm/orq.ms +d9cfd2ff023db1a091832b06aeafed46 sim/testsuite/sim/cris/asm/moveqpc.ms +2910348ebc6b4fbc44558873d0cefd39 sim/testsuite/sim/cris/asm/x2-v10.ms +0789486ef7e7e48f0d011b6753e0a61a sim/testsuite/sim/cris/asm/raw12.ms +2f3c1c7757603ece9b7598297d95260b sim/testsuite/sim/cris/asm/io6.ms +7d960ca6c9dc4a75b2f202e4743af3fd sim/testsuite/sim/cris/asm/x3-v32.ms +db32e99bf41f9de5768a45b4e9903015 sim/testsuite/sim/cris/asm/x6-v10.ms +90fbd294e25dc0ba8bba226c06d0cb22 sim/testsuite/sim/cris/asm/cmpc.ms +5a3ae2ad101563b150633c2dba49672b sim/testsuite/sim/cris/asm/movempc.ms +1102b074c017814da29cde832273f482 sim/testsuite/sim/cris/asm/addcv32c.ms +cc72dfe579e0e04d8088491bd81512e1 sim/testsuite/sim/cris/asm/fidxi.ms +b393d1cde99dc1e60cfde967e7060507 sim/testsuite/sim/cris/asm/opterr3.ms +b4c3d4cf958efce78de12dbe055158b1 sim/testsuite/sim/cris/asm/addoq.ms +272797f68936986d5f91637d3773b3ca sim/testsuite/sim/cris/asm/biap.ms +5fdad03a8aa07112fd066b9c8feff6f3 sim/testsuite/sim/cris/asm/io5.ms +d8ee30b386546c5a4a5ef566f40403a3 sim/testsuite/sim/cris/asm/mulx.ms +7096f57332180f0f76e67be2df346d57 sim/testsuite/sim/cris/asm/mstep.ms +e1164adb4965589fb668a12b9cabad32 sim/testsuite/sim/cris/asm/addr.ms +5d9082ffb5e6bbd88f4abe2d31142504 sim/testsuite/sim/cris/asm/x0-v10.ms +72b76cf328e602ac59d0eb6d3828db10 sim/testsuite/sim/cris/asm/boundm.ms +c67e215c008a0948de2968a3ac09b3eb sim/testsuite/sim/cris/asm/movsm.ms +760e24ee5627c4e168d8870342fecb10 sim/testsuite/sim/cris/asm/movpmv10.ms +c243c3ccba34415cd7be10730bf8f849 sim/testsuite/sim/cris/asm/boundmv32.ms +52063e38d4a4290cb5d64ef44023f8f4 sim/testsuite/sim/cris/asm/lapc.ms +6b8b85b69157e96282007e991e0065b4 sim/testsuite/sim/cris/asm/movmp.ms +655db8f5621d9a019c169c33a538f5b6 sim/testsuite/sim/cris/asm/boundc.ms +437759a2c57580b8695a4fcf6c5dd353 sim/testsuite/sim/cris/asm/addi.ms +b42f2d6fa449133e5fe5168860eacb72 sim/testsuite/sim/cris/asm/bdapc.ms +726b5ab1d6dc49b8f877375c303005a4 sim/testsuite/sim/cris/asm/ret.ms +f8f9a2e029aab177abacbbf64522f6da sim/testsuite/sim/cris/asm/rfg.ms +cac8a4df22fecf18b6f4a8a8343dc311 sim/testsuite/sim/cris/asm/jsrmv10.ms +a3c92164147ee43f0b7866106074e567 sim/testsuite/sim/cris/asm/subr.ms +eac55b1a5230bf3303fdc49b22a01b58 sim/testsuite/sim/cris/asm/tmvm2.ms +e9054d5776e6b5bb2e96b8f759575c48 sim/testsuite/sim/cris/asm/raw3.ms +33c03c3be0ae8e449a15c3c9f595fe07 sim/testsuite/sim/cris/asm/btst.ms +f31c11e9c405d7c29ecfa40d76563afc sim/testsuite/sim/cris/asm/asr.ms +3689ac7d53d2b21df32f33b086932b90 sim/testsuite/sim/cris/asm/movssr.ms +de59b44165a54822f1e186794fe2ba46 sim/testsuite/sim/cris/asm/bdapm.ms +2242370394be8c61d84f559201c21c38 sim/testsuite/sim/cris/asm/break.ms +14961b2c32c9eba83a0bc5f5fc48eae5 sim/testsuite/sim/cris/asm/swap.ms +565043672daf4f7395eb4efe7c2dc629 sim/testsuite/sim/cris/asm/movect10.ms +08340e3cd22828a9ea7b39ac3ab76a1a sim/testsuite/sim/cris/asm/x10-v10.ms +c14bbe5dd88bc327ff41446190b09f35 sim/testsuite/sim/cris/asm/addxr.ms +6a3998da3b99d4ec714f919324b141d6 sim/testsuite/sim/cris/asm/x2-v32.ms +3edb27491dd96dfda8285e7048dc1bb2 sim/testsuite/sim/cris/asm/nopv32t2.ms +745fe5dbcb1bd5a9cf09833d2c60720d sim/testsuite/sim/cris/asm/addcpc.ms +78b6bcb1c8e05fee20f391868e884ac1 sim/testsuite/sim/cris/asm/xor.ms +0027c92c821b64aa99e62a63306c59c4 sim/testsuite/sim/cris/asm/movdelsr1.ms +2a1f9ceb60a9708ddeb09a021c645189 sim/testsuite/sim/cris/asm/io9.ms +3860abd7038ac35c0dd6b7d8ed864bf4 sim/testsuite/sim/cris/asm/x1-v10.ms +fa06e0d70373d18ab8ae7182c42ad155 sim/testsuite/sim/cris/asm/orm.ms +a0edb51e5a425ccf881203ac68e404ed sim/testsuite/sim/cris/asm/tb.ms +fbebe914b0dceaead34d68da0400a6a9 sim/testsuite/sim/cris/asm/opterr2.ms +a95ef7879071b9764ea063bf81183262 sim/testsuite/sim/cris/asm/tmvmrv10.ms +940a3f2ca5fd86fb564a932cf5861816 sim/testsuite/sim/cris/asm/moverpcb.ms +bd42a08cc8373b1308928957194e0fec sim/testsuite/sim/cris/asm/andq.ms +7836790af2b06306d3925d8041bbfd6c sim/testsuite/sim/cris/asm/andr.ms +a25d5568923a8a2d7a8a81f5bd557429 sim/testsuite/sim/cris/asm/io8.ms +11e3f6289d1e6d546f9ad47e4f21820f sim/testsuite/sim/cris/asm/cmpr.ms +b121c92d80063306def3d775b9979af3 sim/testsuite/sim/cris/asm/tmulv32.ms +364156f156b8a7a6947d966d6bd74470 sim/testsuite/sim/cris/asm/x5-v32.ms +3afdb4c2ab99cf0d1f8fe3f418a7c207 sim/testsuite/sim/cris/asm/msteppc1.ms +442b4a68caf03f8c6144395f140812eb sim/testsuite/sim/cris/asm/addcv32m.ms +e4293514637b06706f6dcfe22f8c6548 sim/testsuite/sim/cris/asm/user.ms +521f5b458b8acca2fdef5ed414808f63 sim/testsuite/sim/cris/asm/tmvmrv32.ms +67eb34187ea6ebf749c0ade2acb648ec sim/testsuite/sim/cris/asm/ccr-v10.ms +abb5e89b50f55827e90d50ca04cbc2ed sim/testsuite/sim/cris/asm/movemrv32.ms +dd2500a9c794d29818b9b89fbff9899e sim/testsuite/sim/cris/asm/movemr.ms +7e588bd15391b40da304cf0ac6a12e78 sim/testsuite/sim/cris/asm/tjmpsrv32-2.ms +2db17fe6f4defa264e7cde99cffa8044 sim/testsuite/sim/cris/asm/raw16.ms +f9b13410a674bdf42f84bf2238bfff9f sim/testsuite/sim/cris/asm/raw7.ms +caa837951bcc527ba2ca4cf972905162 sim/testsuite/sim/cris/asm/bas.ms +2546f493ea0e6e5a6c380ea297355c1a sim/testsuite/sim/cris/asm/cmpq.ms +c715f5d22e83bf04003f9fc87087d65b sim/testsuite/sim/cris/asm/movprv32.ms +1ab6df2dfb8d3923abfff30ab2a9d321 sim/testsuite/sim/cris/asm/tmvrmv32.ms +4afa3ee0acec4592cb0ef423894cd516 sim/testsuite/sim/cris/asm/moverwpc.ms +0903b2df7977da882963125e318843d0 sim/testsuite/sim/cris/asm/msteppc2.ms +9699750e3f1ac479aa04674025cae818 sim/testsuite/sim/cris/asm/bare1.ms +391227b378b00377d2b79839b2c297c0 sim/testsuite/sim/cris/asm/x0-v32.ms +1d44f5e46380b9ef890396e82e843e8b sim/testsuite/sim/cris/asm/io3.ms +251d9c56c1a593339dbd56c764dc6d5e sim/testsuite/sim/cris/asm/orr.ms +2dee3459d1adb88a531c1d807414630a sim/testsuite/sim/cris/asm/movmp8.ms +d29aeee229d1ca94d1ca4f83d292403d sim/testsuite/sim/cris/asm/addcv32r.ms +234ba9c6ba155a4fd4ad7c04c8725934 sim/testsuite/sim/cris/asm/badarch1.ms +213ed16674863ab8a94a648b4bacce9b sim/testsuite/sim/cris/asm/movucr.ms +22149fe91d725b6543fdcfe3a410c8dd sim/testsuite/sim/cris/asm/tmemv32.ms +9ef4d5feb8539d6586664b1275112ae3 sim/testsuite/sim/cris/asm/option2.ms +8c5264009df1ce14f68aa8da0b466fdf sim/testsuite/sim/cris/asm/x4-v32.ms +c538f86c2d76489f295e6173a1bb8fc2 sim/testsuite/sim/cris/asm/mover.ms +a50ba432b1e9caafbf89399c1b308c27 sim/testsuite/sim/cris/asm/raw10.ms +f618263e1a5fe35414d390c5e698da43 sim/testsuite/sim/cris/asm/movecrt10.ms +01748fb2e18517d90562bb0e840828da sim/testsuite/sim/cris/asm/abs.ms +36af380c716d4cd34eca6173940a89cd sim/testsuite/sim/cris/asm/jumpmp.ms +9833d52ddc745d1efcd7fd275647731c sim/testsuite/sim/cris/asm/neg.ms +1fc031c1da27d1c01da817c0c079ab0b sim/testsuite/sim/cris/asm/subm.ms +dcd6ed83a1a72b9d24b49c47ed34f3b1 sim/testsuite/sim/cris/asm/moverpcw.ms +28e718a23838ab030070706b95e0dd52 sim/testsuite/sim/cris/asm/movscpc.ms +1ee7b9da11c1883f071654c33c6f4e3b sim/testsuite/sim/cris/asm/addswpc.ms +1cb26c9bde7c3993c284d50c6720f91a sim/testsuite/sim/cris/asm/movepcb.ms +5977c357ba7e18ac39e0c31bd47676be sim/testsuite/sim/cris/asm/raw15.ms +a33563a1f08346e7ea9ed16b4ca551af sim/testsuite/sim/cris/asm/subc.ms +ced76c9fa7ed26ba58076969d2478a47 sim/testsuite/sim/cris/asm/tjsrcv10.ms +87aebcbccef1737739b9e1ff3dd2855f sim/testsuite/sim/cris/asm/x8-v10.ms +d307d3c141635b01f94fa57aad27491d sim/testsuite/sim/cris/asm/raw11.ms +004bff78fcb41a45ef50dbf3a5c8af62 sim/testsuite/sim/cris/asm/movumpc.ms +63adf223c2a656abb48a0043eb8fdf86 sim/testsuite/sim/cris/asm/rfn.ms +298dc950bcadd5e2cec44bf8f18e91cc sim/testsuite/sim/cris/asm/movppc.ms +ad02c5a2ac774bb2d6adc47502962bba sim/testsuite/sim/cris/asm/testutils.inc +153d9dfda7a2e7408435a4275c6627ec sim/testsuite/sim/cris/asm/x3-v10.ms +785a6bb740608dac717c73e57591deaa sim/testsuite/sim/cris/asm/movscr.ms +eb8d64a2df115f7886fbbe471a124360 sim/testsuite/sim/cris/asm/movrss.ms +a3f7925f637528a6ed229eefe49fc69e sim/testsuite/sim/cris/asm/lsr.ms +30dfac72b8fcf65e759d63135754eb58 sim/testsuite/sim/cris/asm/x5-v10.ms +3fa72767063631d49bf4feaa0f4f6639 sim/testsuite/sim/cris/asm/dip.ms +3cffca323f9415f5a625f5b1242f533b sim/testsuite/sim/cris/asm/tmulv10.ms +dfc9197bbe28a36c018d958bf9542575 sim/testsuite/sim/cris/asm/addiv32.ms +9f89dec5b8e1258f49b6dca9aaac3d3d sim/testsuite/sim/cris/asm/raw4.ms +3b9da18c291a6594a818808ab4524114 sim/testsuite/sim/cris/asm/movpmv32.ms +9222bee00f67bbb2bd16ff303efe46b4 sim/testsuite/sim/cris/asm/subxr.ms +93cfdef83cb844b87a1bf93fdbc705d7 sim/testsuite/sim/cris/asm/subqpc.ms +0324485cfaaf9118b075dfe3c7b1e3db sim/testsuite/sim/cris/asm/tmvm1.ms +d1a8f7bf8185d66d74bcb7813e215796 sim/testsuite/sim/cris/asm/addm.ms +823aaac6a92b15ff53557fa9db198a41 sim/testsuite/sim/cris/asm/tjsrcv32.ms +0da25d08fc1e025db45507b9c21666d7 sim/testsuite/sim/cris/asm/addoc.ms +8cc2f6a46bd1708bb4d93aa2e270c02a sim/testsuite/sim/cris/asm/movurpc.ms +ecbc0cdebce612428dd2396bfd1ffec8 sim/testsuite/sim/cris/asm/andm.ms +4afa3ee0acec4592cb0ef423894cd516 sim/testsuite/sim/cris/asm/moverdpc.ms +99f079bf224cebd25f0293326f1056d0 sim/testsuite/sim/cris/asm/bare2.ms +c8756b053a5d9e80829d352796598ea4 sim/testsuite/sim/m68hc11/ChangeLog +531db82ef6fbeb05b9681fd97cf0adf3 sim/testsuite/sim/m68hc11/pass.s +9499c70edfd7d13dd77c87800191b3cd sim/testsuite/sim/m68hc11/allinsn.exp +d4a4dc202b50cef88186c345fa60f24c sim/testsuite/sim/m68hc11/testutils.inc +b4859f29935e5b217a201e3996ef936e sim/testsuite/sim/v850/shl.cgs +85e815de2abdd4a8e57f976a70d450f2 sim/testsuite/sim/v850/ChangeLog +6f74fc62171d7544adce8e548b696d3d sim/testsuite/sim/v850/satsub.cgs +cdd524c11367ecd095b2fb68cda24cee sim/testsuite/sim/v850/bsh.cgs +8c015488bd973b121a5372038ddde9da sim/testsuite/sim/v850/divh_3.cgs +4e33f6ab389381ede55a4ca40ca14064 sim/testsuite/sim/v850/shr.cgs +a0299a77158639743570f62da83ce9d5 sim/testsuite/sim/v850/divh.cgs +5e49b4ee9bfac127867261aab49d5301 sim/testsuite/sim/v850/satsubi.cgs +c5f8f5f2c95cb9061411969f8552bd60 sim/testsuite/sim/v850/sar.cgs +728bb384853e3de0cd850ba77dbb94f9 sim/testsuite/sim/v850/allinsns.exp +cf2074aef14997231161787d82280ce2 sim/testsuite/sim/v850/satsubr.cgs +176f95658c3cdea072a56a08a40fa988 sim/testsuite/sim/v850/div.cgs +53eb912651c13f0ea8aa537a0e00d398 sim/testsuite/sim/v850/divhu.cgs +d219d0a7ebfd715328670f348f6fc8cc sim/testsuite/sim/v850/satadd.cgs +4aded6a92b79c4b62204838e8bf43bdb sim/testsuite/sim/v850/divu.cgs +a7fde5e930bcca4fab473e7e12a4cd30 sim/testsuite/sim/v850/testutils.cgs +c5cadbab939f31f2815550c2e1bc4ff4 sim/testsuite/sim/v850/testutils.inc +c8756b053a5d9e80829d352796598ea4 sim/testsuite/sim/lm32/ChangeLog +2b84eea4ca26523c8377c832bcbd4730 sim/testsuite/sim/lm32/pass.s +b195af43fcbb6e4d468afd686cad2663 sim/testsuite/sim/lm32/allinsn.exp +e610985828485bdbf13719029d735879 sim/testsuite/sim/lm32/testutils.inc +8462b9b309b80233a69359cd1570f186 sim/testsuite/sim/m32c/ChangeLog +20c6539a7e7b89068eaa9b6966db0ca2 sim/testsuite/sim/m32c/pass.s +d789e5d511725b1d26f262bb1e5f84cd sim/testsuite/sim/m32c/fail.s +a91b563780b0da1df9f75cfdfd6d8932 sim/testsuite/sim/m32c/sample2.c +ee2e2048ad3b20e96eacce714c3eeff8 sim/testsuite/sim/m32c/allinsn.exp +afeee0929829ad164127480f668d3be0 sim/testsuite/sim/m32c/blinky.s +f5698c3d5ffdd39b2bcff7f2035d42ed sim/testsuite/sim/m32c/sample.ld +ca79afd7da0e89716869d14d7a5fc237 sim/testsuite/sim/m32c/gloss.s +d5da75b9447726d7118014b3b979e650 sim/testsuite/sim/m32c/sample.s +b3aa23513fe4ddda7a485917bf44cc88 sim/testsuite/sim/m32c/testutils.inc +8d6123f3c0a8099efadd2bc4789a2b67 sim/testsuite/sim/pru/dmem-zero-pass.s +466993d26fd6df575577debb2f9b2986 sim/testsuite/sim/pru/ChangeLog +6baac49f662ed66e91c7ce2910df1478 sim/testsuite/sim/pru/loop-imm.s +42bb93537cefef4cb8ea85880505000d sim/testsuite/sim/pru/loop-reg.s +f1f7d1345508b59b67a5b429d45625a2 sim/testsuite/sim/pru/jmp.s +fe648aead26ec510e6584e3bfbd8f3e6 sim/testsuite/sim/pru/dmem-zero-trap.s +da0a260c0c815ea5081c3d7f2fcb5b68 sim/testsuite/sim/pru/subreg.s +45c781d94166ffd00a5639f6f4cf3e86 sim/testsuite/sim/pru/dram.s +585d3a696cc5451be0efb4cbc5a74225 sim/testsuite/sim/pru/mul.s +2479694a75b023d371b8fb9a26f51848 sim/testsuite/sim/pru/allinsn.exp +a22c05af5174db6dac0c49a3fa61f173 sim/testsuite/sim/pru/add.s +f529385c8b0a73525128d0568c76fb1f sim/testsuite/sim/pru/testutils.inc +60b73bc5cde0341f993a4d3fa218363f sim/testsuite/sim/frv/nfdsads.cgs +d62ead6b5942f8e2a83a67ef8db006bf sim/testsuite/sim/frv/tic.cgs +100c61ae3fb0dca4723d52d915d79b03 sim/testsuite/sim/frv/tils.cgs +4659f8e9e4a139ab3d797621c23c6adf sim/testsuite/sim/frv/cstfu.cgs +dcdd60cb6a74a2fdf05c27542ce87c00 sim/testsuite/sim/frv/scan.cgs +ebae9cb1aaa0ceb6dbf6976f06d735c7 sim/testsuite/sim/frv/fdabss.cgs +fea6bcd449bfa45bc4f7811913f3bc14 sim/testsuite/sim/frv/cstb.cgs +7351ae1c949d0e80e4c9cac3adb238c0 sim/testsuite/sim/frv/mexpdhd.cgs +f8de97a7353abe4fe732d79898771e06 sim/testsuite/sim/frv/cmexpdhd.cgs +ec7dfbef9d8c3fcfbd2a205998b43499 sim/testsuite/sim/frv/tne.cgs +28b4f2f9ac438caaebbf3d5fe7b8b9f3 sim/testsuite/sim/frv/mwcuti.cgs +dc5c412a280bacbbb5fd6a56a6fe53ff sim/testsuite/sim/frv/mqcpxrs.cgs +8811726c9441dd7b9f70a3bf6f8ab4fb sim/testsuite/sim/frv/fcbolr.cgs +9f35e5c8475a3dce4d3d1f86192b757f sim/testsuite/sim/frv/add.cgs +e77e2e2eb284cae56dede5c4e7b16bbe sim/testsuite/sim/frv/tls.cgs +edb5aa56bcd8e8bca69cf259f36e465f sim/testsuite/sim/frv/mdunpackh.cgs +c458c9df8008e8b3f7761d31df5e912d sim/testsuite/sim/frv/sth.cgs +8700acd6ed03f5cbac0ad536383ed3c8 sim/testsuite/sim/frv/sllicc.cgs +0e6828ab5a28105f1606bfcea5961a53 sim/testsuite/sim/frv/csmul.cgs +12c4a175cb447af16dd27310f13fe496 sim/testsuite/sim/frv/cmmachu.cgs +b12b404167348112b47f3650d80a49a1 sim/testsuite/sim/frv/nldhfi.cgs +889eccff241ad187bd577cfe2fcc0ddc sim/testsuite/sim/frv/mhsetloh.cgs +32066e6265ce0fd1845b4342336d925a sim/testsuite/sim/frv/mqsrahi.cgs +d23dcfb1cdc685b13e28f46e60297128 sim/testsuite/sim/frv/cmor.cgs +ccde36a3a60f282ea7e7581d6ddbe200 sim/testsuite/sim/frv/cfmuls.cgs +9711b61b6a23527c5cde41eaac4eb112 sim/testsuite/sim/frv/nsdiv.cgs +d5e28bf29b3ce725457862f002b4ba2d sim/testsuite/sim/frv/fcbgtlr.cgs +2fd5797e8c20d9d7b340e095633f2ff6 sim/testsuite/sim/frv/fcklt.cgs +9ca0539cd8fde544f4023712395cfce5 sim/testsuite/sim/frv/cxor.cgs +4dbc3bfa2a0abb00d11e913ffe7dbfdf sim/testsuite/sim/frv/nldubi.cgs +8c0c31883700925b3a024a0ef3d6e4db sim/testsuite/sim/frv/subi.cgs +e1e57ef45323b229f0811de476eadaa8 sim/testsuite/sim/frv/oricc.cgs +0e297dc071234a78bd595a57838d5adc sim/testsuite/sim/frv/fbne.cgs +787ba5a828f2060d5163f4dd6493bdfc sim/testsuite/sim/frv/mor.cgs +0553d530d16ef1a9889895d233bd1a23 sim/testsuite/sim/frv/fnegd.cgs +119fa9c79d98e20cd89f8deea6e78dd1 sim/testsuite/sim/frv/fbuelr.cgs +b5a71bd3c822c7000929441e7602c329 sim/testsuite/sim/frv/ftige.cgs +e6cce9c3b04ed7fd801dafb45bcdd866 sim/testsuite/sim/frv/cfsqrts.cgs 444fdecb0192342ea5f61cfd80e48b61 sim/testsuite/sim/frv/fdivs.cgs -606377e169feb767df3ada199efb6756 sim/testsuite/sim/frv/nlduh.cgs -bc2f5ebb5a8ed58952e9c92d80b5e5ea sim/testsuite/sim/frv/cstf.cgs +e470390ff6d0df7541ce5455d765a606 sim/testsuite/sim/frv/lduhu.cgs +34a484991db89cb85939b4735fd01d7d sim/testsuite/sim/frv/cfckle.cgs +b9ae3c5d73a84096df40cbc04f28abbe sim/testsuite/sim/frv/fmadds.cgs +d558b5c8f62773391401afa4258ec585 sim/testsuite/sim/frv/fdmss.cgs +ff1044b90e19b2451b0c3f0233ee3d70 sim/testsuite/sim/frv/fdmas.cgs +bea6c33251489ce5246ed3d6bf5ac702 sim/testsuite/sim/frv/ftiuge.cgs +5970b5e8ca637b383803588fb78206d8 sim/testsuite/sim/frv/mmulxhs.cgs +b69a810fc6f3f907c57797a5721333fd sim/testsuite/sim/frv/cfmovs.cgs +078c55334418476eb782ff3b071fc106 sim/testsuite/sim/frv/bnvlr.cgs +7068101bb16125bf823c54313efc9c88 sim/testsuite/sim/frv/fmss.cgs +4f3c2f0fc2e3ed5b6c87cd135a6bbd00 sim/testsuite/sim/frv/nldhf.cgs +b03ca91fbf4d98089e108f2fe411eecb sim/testsuite/sim/frv/bc.cgs +2e85d413681ca26660d8f9691a5c9ab2 sim/testsuite/sim/frv/mcut.cgs +d3a8b5ed0ad285696200a176e326a55b sim/testsuite/sim/frv/sethilo.pcgs +4a47a184f95cf06b21e2cb960ec207ca sim/testsuite/sim/frv/ChangeLog +117ef9aa94aacbff810bdc764cce2f12 sim/testsuite/sim/frv/lddu.cgs +0511aebe3ab974e7a9e5fdfa895d9aeb sim/testsuite/sim/frv/mcplhi.cgs +9fc100ac9932ce7d023e9d73fe027dd7 sim/testsuite/sim/frv/orncr.cgs +5c07a1afebe94dfc4e0132d66d8c28ea sim/testsuite/sim/frv/mqmulxhs.cgs +f58b45613ae0cc85e07099e0b176a130 sim/testsuite/sim/frv/csllcc.cgs +bd306d227534038e358e212748f86d46 sim/testsuite/sim/frv/ckeq.cgs +8bcf588029874b3f33885374cc496306 sim/testsuite/sim/frv/sthfi.cgs +f91ccc0eb4e839737d94f68601bf130f sim/testsuite/sim/frv/bnclr.cgs +a95c4bac5e72fe8a7d36b1b822acc3c6 sim/testsuite/sim/frv/fabsd.cgs +a4e3dae18838ea83a10018cf243b37d9 sim/testsuite/sim/frv/lddfi.cgs +0328850bbb204540e39224902cea7437 sim/testsuite/sim/frv/addcc.cgs +ce8352f2c405c5128184546ff69e67e3 sim/testsuite/sim/frv/cxorcc.cgs +21793c07586326f7d5b7caeb20faf21b sim/testsuite/sim/frv/cckge.cgs +a861d845633062758e032a27d5fab174 sim/testsuite/sim/frv/mhtob.cgs +258db7edbd93cc7f09cde29e3522194e sim/testsuite/sim/frv/cfmss.cgs +73fa8ef52f05985daec1d8a01dbbc29f sim/testsuite/sim/frv/stqc.pcgs +6833a0f9a6a97eca6ec71259ea075028 sim/testsuite/sim/frv/cand.cgs +67bd729e92a8ccbb0ef66f5053e9c7c9 sim/testsuite/sim/frv/ori.cgs +89a846533bf6d66afa6dc6a610bee4de sim/testsuite/sim/frv/mbtoh.cgs +5f0be0ef1415763840683d1a66cf6b67 sim/testsuite/sim/frv/mwcut.cgs +e15b13b9790cd957ef7c1174a414fc91 sim/testsuite/sim/frv/mov.cgs +8aa28a7f77fd8f94f1f8d4441330d2de sim/testsuite/sim/frv/maddhus.cgs +61d311d36b7dec576d8be1a6a047278d sim/testsuite/sim/frv/cckc.cgs +6c696a162425d51ed1a198eadc9e8ec6 sim/testsuite/sim/frv/callil.cgs +fb274f110b2b0e732c8ab6b0567641da sim/testsuite/sim/frv/cmcpxrs.cgs +16bf5094b2c7a186f0e11fa373625fb8 sim/testsuite/sim/frv/ftieq.cgs +a016768b6c2c21cc9c4354d7cc7f9628 sim/testsuite/sim/frv/mqmachs.cgs +3b2a2c6753bd7ff55bc524a863d3a3cb sim/testsuite/sim/frv/cmpi.cgs +9ac0ca5fc78d29c5cb125f7f0232ab24 sim/testsuite/sim/frv/ftno.cgs 17b1b6dc979b707b15d4d415b6a8c50a sim/testsuite/sim/frv/bcgelr.cgs -a0bc228cfda1d7113cd087bfc0298020 sim/testsuite/sim/frv/sdivi.cgs -8a296ea605f6ea7504e25318c38b44c4 sim/testsuite/sim/frv/stdf.pcgs -38e18b11776fdecb14fcc94311d95b20 sim/testsuite/sim/frv/fmsubd.cgs -a7bdf9822718f81fe29124a9f8da86e6 sim/testsuite/sim/frv/tge.cgs +e7569bf70d9017f69182cfa2622ebfbf sim/testsuite/sim/frv/stqcu.cgs d8ef8851170116f7cc0700416b84aa6a sim/testsuite/sim/frv/udiv.cgs -14194ebf318b1a64b5cbc27e067b5110 sim/testsuite/sim/frv/stdfu.cgs -7acb4d8fcf1961a11eb5f86da60a0804 sim/testsuite/sim/frv/jmpl.cgs -5032a5008a230358b8434e010fa7aa66 sim/testsuite/sim/frv/bcnlr.cgs -b90754c53de9e9744ee927d4993920fc sim/testsuite/sim/frv/fr400/sdivi.cgs -621cd869aa5b032b34294f31f3e4a702 sim/testsuite/sim/frv/fr400/udiv.cgs -d8697f0e1b4ecfee90b75abe2f016aa5 sim/testsuite/sim/frv/fr400/smu.cgs -a1032b0fb6b6923000282a43d3f85a7a sim/testsuite/sim/frv/fr400/movgs.cgs -82bc6562aa51560206e828ae2202ca5f sim/testsuite/sim/frv/fr400/allinsn.exp -4ac0a330e6fa287d0f2f2f8500453afc sim/testsuite/sim/frv/fr400/mclracc.cgs -07bb80901aaaa29c4ef20dbef3debb70 sim/testsuite/sim/frv/fr400/csdiv.cgs -e4644c48c06766cd34578d5ce34680dd sim/testsuite/sim/frv/fr400/msubaccs.cgs -844d78bc2c7fd493b1e1407468de1927 sim/testsuite/sim/frv/fr400/slass.cgs -f158b414d72856611131bd4eb7db62ff sim/testsuite/sim/frv/fr400/addss.cgs -538622163aded8a4e8f1d47d61db8b5c sim/testsuite/sim/frv/fr400/mhsetloh.cgs -417d0b67f6f7ff0d5e58e0178ef7836c sim/testsuite/sim/frv/fr400/scutss.cgs -0f2cd9ab4e36a741a77488033a0ceeb0 sim/testsuite/sim/frv/fr400/movsg.cgs -d23a9bd2315e8430ed038216b2e3e58d sim/testsuite/sim/frv/fr400/subss.cgs -daad245fe005a9a6394bb569733c9aed sim/testsuite/sim/frv/fr400/sdiv.cgs -9bb2a41f38271c359451454b6d2a79dc sim/testsuite/sim/frv/fr400/mhsethih.cgs -4cc9052cb05275a67396e5ea46d54af6 sim/testsuite/sim/frv/fr400/masaccs.cgs -5e1be1e0297eb84b961c6dc29d4cce8c sim/testsuite/sim/frv/fr400/mhdsets.cgs -dac84369f283aabc0e0c8d6188130e92 sim/testsuite/sim/frv/fr400/mhsethis.cgs -67c70214b5e434fb7bbd3519fe1ad576 sim/testsuite/sim/frv/fr400/smass.cgs -feeb130ecb5cf4428f8bccbe30eb476e sim/testsuite/sim/frv/fr400/smsss.cgs -a808c8a95fde4532828d00e281c1322c sim/testsuite/sim/frv/fr400/mhsetlos.cgs -2039d3b5260700c8371efd1a6ab21552 sim/testsuite/sim/frv/fr400/maveh.cgs -285f596d7467307f369b18d453abe1ea sim/testsuite/sim/frv/fr400/mhdseth.cgs -146cea8d68ddb592d231ab14478a8d0b sim/testsuite/sim/frv/fr400/udivi.cgs -dc7862c2d91981e56cddc36314f0c630 sim/testsuite/sim/frv/fr400/maddaccs.cgs +e4ece86a7c055e9d7e99ecec010c71ae sim/testsuite/sim/frv/ldq.cgs +aeccfedc8dc931ff8b70da7c99c2236a sim/testsuite/sim/frv/blt.cgs +3cf41818d7d43998028a6204c6d3d1cc sim/testsuite/sim/frv/nldd.cgs +7f0e3223aefe0347e86016999b785689 sim/testsuite/sim/frv/ftra.cgs +1d754b9b7c803178ecc07bed29a6226c sim/testsuite/sim/frv/norncr.cgs +bee17829c104e8e5901d5218f8da3030 sim/testsuite/sim/frv/fblg.cgs +9afa238bffc2569cab1b6c55a3dc8719 sim/testsuite/sim/frv/fbeqlr.cgs +738a395cb2d18169d1b0c2027636cf1b sim/testsuite/sim/frv/xori.cgs +3a258f66b006c6af176013d28706f114 sim/testsuite/sim/frv/clrgr.cgs +6e3d68aac7b3fc4b6ed2b5e4d847070b sim/testsuite/sim/frv/ldd.cgs +509ea4a10500e161ed7a4c16dca03eed sim/testsuite/sim/frv/cmmulhu.cgs +490b859435e3a616aa2c844b9dbed8d6 sim/testsuite/sim/frv/movgfq.cgs +511bee637d7a77e1f4ead6e790993d68 sim/testsuite/sim/frv/cckgt.cgs +0fcf16c6304ddf56ba06882bf077c739 sim/testsuite/sim/frv/ldu.cgs +038ed75fefa3a9b991855a5b60b5046c sim/testsuite/sim/frv/stbf.cgs +ad6bad34a15a4f2986566b50e2af52b8 sim/testsuite/sim/frv/bcgtlr.cgs +dc65593014b3881fdcff036075e5dad0 sim/testsuite/sim/frv/sll.cgs +80d04d00a7e92cc4c32af000081d5cd4 sim/testsuite/sim/frv/ftilg.cgs +62fbafc1c264ff3ffa2f95d455138a29 sim/testsuite/sim/frv/nldbfu.cgs +e81006aee4bbd0e3671448585ab45d5d sim/testsuite/sim/frv/mdcutssi.cgs +ccb0533eb0f55d739ea829ea6061fd7e sim/testsuite/sim/frv/subxi.cgs +29e215193143b4309c76dec515f0ffb9 sim/testsuite/sim/frv/nlduhi.cgs +40981f85eeb4a396327c4e11f7ca792d sim/testsuite/sim/frv/nfmuls.cgs +c32d71a426bc21b198975069f0bc3503 sim/testsuite/sim/frv/ckgt.cgs +2d6cd85e83c408920463b9e326312c1d sim/testsuite/sim/frv/nfdmadds.cgs +935a9c4cf686aaa2f4c480791181b2c9 sim/testsuite/sim/frv/fckuge.cgs +a0d99a5f1ae6d699d7551ec0c91ad1f9 sim/testsuite/sim/frv/scani.cgs +903edfdf254dfa703f606ad9ccda17ad sim/testsuite/sim/frv/nlddi.cgs +51afec41d7406196f09ae12d2ec0db03 sim/testsuite/sim/frv/tino.cgs +1506bd2f46dbdf8b5580412cc36cc631 sim/testsuite/sim/frv/bvlr.cgs +eedecfb8fe25588cda9c858cec87c9e4 sim/testsuite/sim/frv/cld.cgs +30964df0b57f2b91f67fc38a30d8e814 sim/testsuite/sim/frv/addicc.cgs +2b92477d71c35dbc5340bf6cf73436c4 sim/testsuite/sim/frv/cldub.cgs +c73e0f9186dae498050376d33b40c1c6 sim/testsuite/sim/frv/nfsqrts.cgs +00c2e418966af14d3cc048573279d6fc sim/testsuite/sim/frv/mdrotli.cgs +e82570b7a76dda7f7c8c4c4499b70113 sim/testsuite/sim/frv/fbeq.cgs +43e07345873b79b52184a1785a5ce422 sim/testsuite/sim/frv/stdi.cgs +54e056f54d116cde6e23ee7dee9a9c8b sim/testsuite/sim/frv/andicc.cgs +0d8bd8099d69931cea52745c2fd79b8b sim/testsuite/sim/frv/bgelr.cgs +558c0693de0aa42e5ba756ef35228332 sim/testsuite/sim/frv/andcc.cgs +255041537a2ba5cddbc94a66463c52ab sim/testsuite/sim/frv/cfdivs.cgs +aa46f6b377cfc62824b0be2e6fc1c326 sim/testsuite/sim/frv/stqc.cgs +9bd0746e07695fc69099806146e177fd sim/testsuite/sim/frv/dcei.cgs +2311d8e2e1155bc0747ab69d1d80020c sim/testsuite/sim/frv/cldsbu.cgs +1e7f2deead6fb5c78f146ae3eb2fc6be sim/testsuite/sim/frv/addi.cgs +c466ade998b308dc18869d2a2d2f3ae5 sim/testsuite/sim/frv/clddf.cgs +0772a396d1b99a6fc342b4f3d355d18c sim/testsuite/sim/frv/cmovgfd.cgs +956c2a9363667d599f0ad75bd639805b sim/testsuite/sim/frv/fckeq.cgs +ce965b75b06cd55ef70169b06c863849 sim/testsuite/sim/frv/ftigt.cgs +244caf04384a0a05c44c7299059e0a1e sim/testsuite/sim/frv/stqf.pcgs +e3482ddd50c998096e309469d49bf60f sim/testsuite/sim/frv/ftge.cgs +7844ed84fbc9b4ee3a16338a630a6b99 sim/testsuite/sim/frv/subcc.cgs +dd7b86dd559bc919891c419cc5b9eb45 sim/testsuite/sim/frv/cckp.cgs +59498912961c5a2bfe37d5631fc3802c sim/testsuite/sim/frv/srli.cgs +67b49f46f325d357092e83a5af86ffe8 sim/testsuite/sim/frv/break.cgs +3ddb83bbd7a429a77b68790480613591 sim/testsuite/sim/frv/fbulr.cgs +fe0ecb3cd4f9a5a2a8cd1b994f8e8ae2 sim/testsuite/sim/frv/and.cgs +2a756ad9c98638728516c303deb87eb0 sim/testsuite/sim/frv/ldbf.cgs +26c749327e953defb5a5af911e83e615 sim/testsuite/sim/frv/fabss.cgs +da2ea0628931ee759747b3b1568f9e95 sim/testsuite/sim/frv/cckno.cgs +36024f7e3058972d0b99742ee87119cd sim/testsuite/sim/frv/fnegs.cgs +6dd0a3407bccbe944de3004234e1ee11 sim/testsuite/sim/frv/cfcku.cgs +7e08ead385d09b81452d7e494e24003b sim/testsuite/sim/frv/ftu.cgs +c89a2bf5e53afd9b92868ba2b7233f73 sim/testsuite/sim/frv/fbgelr.cgs +894db98a371eaba135a686990f22f504 sim/testsuite/sim/frv/bhi.cgs +239d171ff012ca3bfc1ea795eb727b3e sim/testsuite/sim/frv/mqsllhi.cgs +5890a645af954362f462a536301ab07a sim/testsuite/sim/frv/mclracc.cgs +cec99b8b35d4fdcdb377d9a66ea62009 sim/testsuite/sim/frv/nldbf.cgs +d0ac23eed64316704af3b22028e3e476 sim/testsuite/sim/frv/cfckue.cgs +f3f08211769783c8fad2413b5f4419a5 sim/testsuite/sim/frv/msubhss.cgs +b6c34d73b6a6bbc7b1547986526a8d60 sim/testsuite/sim/frv/fbule.cgs +c3fbed74046a3c4d5d74af309a283001 sim/testsuite/sim/frv/cfcklt.cgs +e322b79b6193bc8b98fdf7d2164e1242 sim/testsuite/sim/frv/cmcpxis.cgs +475e50c7c92b7357b020583b574726a8 sim/testsuite/sim/frv/msllhi.cgs +bff6dd1636bea003ff556d16f1e3f843 sim/testsuite/sim/frv/cfckno.cgs +94382ca860759734f699db2c4030a586 sim/testsuite/sim/frv/nldsbu.cgs +11bfcfb4b6f70c5075adaa4f37dca943 sim/testsuite/sim/frv/cjmpl.cgs +ce558734ad2bc060917be3c4618d3552 sim/testsuite/sim/frv/tilt.cgs +122ad6f12a5ab84bec5262e1af02c9f1 sim/testsuite/sim/frv/commitga.cgs +697ec5d0eb83f0aa0c438264e7dacf74 sim/testsuite/sim/frv/cfckule.cgs +1abb897f3ac03712dcaf0fa415a85bb3 sim/testsuite/sim/frv/commitgr.cgs +336b596245297750b95b8a77073f7966 sim/testsuite/sim/frv/tihi.cgs +2377457fe2384816953905fda6c3d04b sim/testsuite/sim/frv/ckne.cgs +9be8c0bf0141c153cf179aa9b42ee2d1 sim/testsuite/sim/frv/xorcc.cgs +1162b46f1c6271d41d44fd0376fd0abd sim/testsuite/sim/frv/clrga.cgs +b4281f11b7f00e191f158b23a2115556 sim/testsuite/sim/frv/ldub.cgs +5530ac8f622c5b86676418a439d31062 sim/testsuite/sim/frv/mhdsets.cgs +4741f3d629b91d827c5d340249f452c5 sim/testsuite/sim/frv/lddcu.cgs +5c2413abe5cf30fb4cdd0d5e3c30dbab sim/testsuite/sim/frv/orcc.cgs +4dd6b1d7898b43e9ec3d140c49342862 sim/testsuite/sim/frv/cstdf.cgs +241fa1bef3f4eb4e60aebeaa3a5e5d8e sim/testsuite/sim/frv/cfmadds.cgs +6a708919bfd6e9a6a3b0a1872c48290f sim/testsuite/sim/frv/movgfd.cgs +d34e0187f000a733eaf4b2730118ae03 sim/testsuite/sim/frv/std.pcgs +8be433c05488391e44e6d0fd1a0663a5 sim/testsuite/sim/frv/mexpdhw.cgs +8cb511e7ba50142c3d082aaedf99e2d4 sim/testsuite/sim/frv/udivi.cgs +4a9afe4a49c80157e0738e27bd5f3a52 sim/testsuite/sim/frv/tlt.cgs +b1bfeba9317d62d449126bee0f7fa720 sim/testsuite/sim/frv/corcc.cgs +bf2c13262ac9d57aa021ce80e4dbf5a0 sim/testsuite/sim/frv/fbnelr.cgs +1147cc9e693e642971e9920b10936733 sim/testsuite/sim/frv/cldhfu.cgs +e7c1a6655a0477c4a36ead53e726fb48 sim/testsuite/sim/frv/ldhf.cgs +29bcdb426188a5bb155dbee07ea1e527 sim/testsuite/sim/frv/cstbf.cgs +2bb049f287b76c978273eaf5c312a4d1 sim/testsuite/sim/frv/nlddfi.cgs +1e471deced4a3635b4468bd2d1ff88cb sim/testsuite/sim/frv/mpackh.cgs +0e30127c5ef9ca2d27a6bf7790128b65 sim/testsuite/sim/frv/nfdivs.cgs +798fee14d0226828590f274a847fb587 sim/testsuite/sim/frv/ftug.cgs +5c41b0e945d708f91752456b93ca9c8d sim/testsuite/sim/frv/ckra.cgs +2578eab56c9efe85e875334d9be745a5 sim/testsuite/sim/frv/ldshu.cgs +da93993782224f234cfa217c4c2de3cb sim/testsuite/sim/frv/mcpxrs.cgs +d7a05e22c19ec54237285333c21ab720 sim/testsuite/sim/frv/csthf.cgs +ce189b743a628565f7ae69ef124e050e sim/testsuite/sim/frv/fbolr.cgs +35609b2536c1c21599e2d70a762854f6 sim/testsuite/sim/frv/candcc.cgs +02991b6e743da14fcd82acaa74ad2de3 sim/testsuite/sim/frv/addxicc.cgs +fe34b6bddc9686a443e9025451c3ac88 sim/testsuite/sim/frv/fr500/mqaddhss.cgs +1de69657638007870281ce9da005db7f sim/testsuite/sim/frv/fr500/cmqaddhus.cgs +99e08a053ed3e5abb1c4bf9c6a64fbc1 sim/testsuite/sim/frv/fr500/mclracc.cgs +9fdc5172e86b3be5621a6faf3f07db74 sim/testsuite/sim/frv/fr500/cmqaddhss.cgs +dc65c316119a5c8162d829bbd7c0223a sim/testsuite/sim/frv/fr500/cmqsubhus.cgs +d5b43c22363018a3259eb6849019a024 sim/testsuite/sim/frv/fr500/mqsubhus.cgs +16004a850f6c18d31c7430fbab31f79d sim/testsuite/sim/frv/fr500/dcpl.cgs +35285cc52bbb31d9b25d6144f54fa5b5 sim/testsuite/sim/frv/fr500/mqsubhss.cgs +76820a559b8411a4ae43b6a383d65b0d sim/testsuite/sim/frv/fr500/cmqsubhss.cgs +b113a28c5f41f7ab598d39fab2d5e21f sim/testsuite/sim/frv/fr500/mqaddhus.cgs +54a02614046bab2457214898aff37526 sim/testsuite/sim/frv/fr500/dcul.cgs +bf7e8ae5fa9de937c99e7e09f42bbac5 sim/testsuite/sim/frv/fr500/allinsn.exp +1ff43ea60f446681dd0636f4abf0afaf sim/testsuite/sim/frv/clrfr.cgs +04132b96881a20ec0effc93a6a586ea9 sim/testsuite/sim/frv/xorcr.cgs +eac5267f2219d176a231a4394b8a7dbe sim/testsuite/sim/frv/mcop2.cgs +de42c23dfd886e1e9150e93cfa7a0e30 sim/testsuite/sim/frv/nfmss.cgs +5f883fbcb2224a26bc0e0d7eb91fd2de sim/testsuite/sim/frv/beq.cgs +325a426583fc25d49f02863c763aeb84 sim/testsuite/sim/frv/cklt.cgs +82fe9144d5b80fbfd5b4582ca5246df4 sim/testsuite/sim/frv/fmaddd.cgs +d59526db81b54d2c091ae65e844abba6 sim/testsuite/sim/frv/cswap.cgs +6839b4b27f67afcd7af9dcbeba8e54e6 sim/testsuite/sim/frv/lduhi.cgs +0202236564d839929bc185b5b363483b sim/testsuite/sim/frv/mcmpuh.cgs +f3562f7c11ed638cffff5fb8afd74b8c sim/testsuite/sim/frv/ftio.cgs +4f526f2f27056051f986c47b44c9b1ff sim/testsuite/sim/frv/nfitos.cgs +f5619a1966d02c7c8e4bd23503a40c49 sim/testsuite/sim/frv/fbu.cgs +ed61ab14ca73c4d78de8d0e432820ff6 sim/testsuite/sim/frv/fcbralr.cgs +b813da728e948bf7f3d0a70e28fd56de sim/testsuite/sim/frv/mmulhs.cgs +0eb9d6f24940fa1b3a290ee7f83529e6 sim/testsuite/sim/frv/cfnegs.cgs +0946412ade0a468bd29c482a88af3c60 sim/testsuite/sim/frv/addxcc.cgs +2e3efdb33b16bdf036e34506be43620a sim/testsuite/sim/frv/mcpxru.cgs +c8282a4995f3299c881dda28d1a95fe6 sim/testsuite/sim/frv/swapi.cgs +1de01bb11a8e27d051b6d84fdf37cbff sim/testsuite/sim/frv/movfgd.cgs +a030edea39f27d8535b72eab791a946c sim/testsuite/sim/frv/cmsubhss.cgs +8692050bdf66cc6ad2d401c4a4684cef sim/testsuite/sim/frv/smulcc.cgs +6f29112e0458cbb1fe8d3a0403ed85d7 sim/testsuite/sim/frv/mtrap.cgs +54b2d852374130520e29e72dc46923e0 sim/testsuite/sim/frv/cadd.cgs +47b041b440463afa7c2f9adc16bc48db sim/testsuite/sim/frv/ftne.cgs +32ab332e05431f49f037d528b657d8e5 sim/testsuite/sim/frv/fbgtlr.cgs +b671fcc6ddd6daa079fd31a468749b0e sim/testsuite/sim/frv/movfgq.cgs +9f7ea5df90e576f10d78cdac9cc6ef50 sim/testsuite/sim/frv/commitfr.cgs +4ced60215e6ef89c35488866f38fd3c0 sim/testsuite/sim/frv/mdpackh.cgs +794be640f3ea38845a7fb677c250fe48 sim/testsuite/sim/frv/ccalll.cgs +ccbed047cb7e704f8caefbf30b21d58e sim/testsuite/sim/frv/cfckge.cgs +9fc9892f699a1d3ddc62ae7524e9ce82 sim/testsuite/sim/frv/stbfu.cgs +bb12ea3ce3769e468d058aeacea5e6d6 sim/testsuite/sim/frv/fblt.cgs +2974e1e8788d707888a2c3ff248a0d82 sim/testsuite/sim/frv/cckls.cgs +6f24d372cfa857010330fd99b9ceaa3f sim/testsuite/sim/frv/mcuti.cgs +1f93a0d7fca1cd46156bd7a0c7f3c59f sim/testsuite/sim/frv/movgf.cgs +36d2a277daae79b65a1fe73b38c101ba sim/testsuite/sim/frv/bcclr.cgs +35c7aae3b090f125993fef390d76906f sim/testsuite/sim/frv/slli.cgs +6158542e4b6f47593521af161cbefcc4 sim/testsuite/sim/frv/nldqfu.cgs +7d76bf8128cc9482f2de7d01e2bde23a sim/testsuite/sim/frv/bra.cgs +41358b18cb9bba0fa299b05270c44629 sim/testsuite/sim/frv/tv.cgs +bfc4a4f409782a01b12aafa73820d4a7 sim/testsuite/sim/frv/mhdseth.cgs +7ffb238a56ea272bda7a212d95f41684 sim/testsuite/sim/frv/teq.cgs +e913757697385f676de531dc9055b78d sim/testsuite/sim/frv/ftilt.cgs +747342519c94e5f3d6e4153d144a3774 sim/testsuite/sim/frv/ldqfu.cgs +a7939f361fa8a4d7152833d17bf9242f sim/testsuite/sim/frv/csthu.cgs +da685784eb930e42a55444b9982c35f1 sim/testsuite/sim/frv/fbgt.cgs +326669d1c76ef080e2d2ddf8c2ee6e6f sim/testsuite/sim/frv/msathu.cgs +2145d16c1548268652bcfdc0a032144b sim/testsuite/sim/frv/fbug.cgs +3ba660d7dcfb108e50618445716bb95b sim/testsuite/sim/frv/sraicc.cgs +d025a5adc03c1fa97688e776798e6508 sim/testsuite/sim/frv/fckug.cgs +21e414ff661565b6aa03208928648853 sim/testsuite/sim/frv/nldub.cgs +25805dfe75db053034915ba8a5b33ce2 sim/testsuite/sim/frv/ftgt.cgs +99c4ae4bd4eb760d9274117748672094 sim/testsuite/sim/frv/fbuglr.cgs +6a19cdc6d3c89ca5145cd888160feea0 sim/testsuite/sim/frv/cmaddhss.cgs +6b8470231d2eb04c58135b6a02fd63cb sim/testsuite/sim/frv/ckp.cgs +cc6399ec148be0f20332c2aeadef5990 sim/testsuite/sim/frv/mrdaccg.cgs +d1c296f375a94a01c76d3ab5d7e095e9 sim/testsuite/sim/frv/fblelr.cgs +75f2c544b8e80d583bfc78a32fce7f9f sim/testsuite/sim/frv/mcop1.cgs +4494a0e9c7fd903a3280a5baec16e6db sim/testsuite/sim/frv/clddfu.cgs +d7fefcc42f8ee556fc3e29e07866f54a sim/testsuite/sim/frv/cldf.cgs +32dde2fe5a74ba57fb63ca5a91948b13 sim/testsuite/sim/frv/membar.cgs +f30642deec77165f2dec4409e06fb949 sim/testsuite/sim/frv/lddf.cgs +53d642fd09d91db1bfef8cafa2d8c864 sim/testsuite/sim/frv/fbno.cgs +28f0887ee88db223fdd12b2024131872 sim/testsuite/sim/frv/icul.cgs bb0118ec08792d6499ce7742161f206f sim/testsuite/sim/frv/addxi.cgs -7907b41ac563ea2be426de33f8910f66 sim/testsuite/sim/frv/ldbfi.cgs -999bafc99f41d16b6bd3b925cf296de0 sim/testsuite/sim/frv/ccmp.cgs -2dce4079bac9e873cc2f7466bbdbc0bd sim/testsuite/sim/frv/cfckul.cgs -af01f45076997b2efc4cbed1bfbeb90f sim/testsuite/sim/frv/bplr.cgs f59368c3bae1aa62bdb68b1edf299c9e sim/testsuite/sim/frv/fmovd.cgs -9868adbc8297b59031bb110c1104e524 sim/testsuite/sim/frv/bv.cgs -35609b2536c1c21599e2d70a762854f6 sim/testsuite/sim/frv/candcc.cgs -2e3efdb33b16bdf036e34506be43620a sim/testsuite/sim/frv/mcpxru.cgs -055fa9b5ef1f3c1f955737457b0f3430 sim/testsuite/sim/frv/cfcklg.cgs -0511aebe3ab974e7a9e5fdfa895d9aeb sim/testsuite/sim/frv/mcplhi.cgs -e97d9af6760367447c6863fb5e7fb5b0 sim/testsuite/sim/frv/fbue.cgs -b04e822dac50d26e600e9af54cc86907 sim/testsuite/sim/frv/blslr.cgs +d41729b132c64711d5d230c8be3b4332 sim/testsuite/sim/frv/sracc.cgs +8b544d33708f95c5fe86075bfc046ba3 sim/testsuite/sim/frv/bne.cgs +d0cadfc6114ffc4c49bd0b7cf87984dc sim/testsuite/sim/frv/ckv.cgs +c0fa479773c62b0865cf7f6646562284 sim/testsuite/sim/frv/cstd.cgs +d79cc37be001047a062fd1b16bf5e34e sim/testsuite/sim/frv/mqmulhs.cgs +6f912abf4768c8b66831a8ce4a5ab658 sim/testsuite/sim/frv/nfdcmps.cgs +8335d3357e6e879a7501b1635ce4f821 sim/testsuite/sim/frv/fcklg.cgs +8a3789cf60dd4331ea1a6f6e994b76e8 sim/testsuite/sim/frv/sthf.cgs +2426e56c573364d455e06cf511aa1c1f sim/testsuite/sim/frv/ldfi.cgs +861233cc66075168ec7d72a804bbffae sim/testsuite/sim/frv/lrbranch.pcgs +cc2f98b9ebe473e853c879e903f2f4bd sim/testsuite/sim/frv/st.cgs 57b3c53e5a537bbcdd2bbd8bda51c584 sim/testsuite/sim/frv/ici.cgs -bea6c33251489ce5246ed3d6bf5ac702 sim/testsuite/sim/frv/ftiuge.cgs -239d171ff012ca3bfc1ea795eb727b3e sim/testsuite/sim/frv/mqsllhi.cgs -190947262baf5a431a603a9057bd38a6 sim/testsuite/sim/frv/thi.cgs -d5e28bf29b3ce725457862f002b4ba2d sim/testsuite/sim/frv/fcbgtlr.cgs -59addb4ff5949cfea9664343d9f81a38 sim/testsuite/sim/frv/srlicc.cgs -59af60628ef7e7f6c89aa5b2fa0c34c2 sim/testsuite/sim/frv/cldubu.cgs -74d71e1f6d2aa891e6e9cb32cd44e036 sim/testsuite/sim/frv/stf.cgs -697ec5d0eb83f0aa0c438264e7dacf74 sim/testsuite/sim/frv/cfckule.cgs -73a36ac7ddbc3eb5f02e23e556757534 sim/testsuite/sim/frv/mnop.cgs -9bd0746e07695fc69099806146e177fd sim/testsuite/sim/frv/dcei.cgs -d2ab686875a7fa6635f150cf02ff06f9 sim/testsuite/sim/frv/addx.cgs -8a304334e1341487c78471b20f879ecd sim/testsuite/sim/frv/fbltlr.cgs -5e7cbd14acb0fd1a1bdc89e068e9803d sim/testsuite/sim/frv/msrahi.cgs -f58b45613ae0cc85e07099e0b176a130 sim/testsuite/sim/frv/csllcc.cgs -fe0ecb3cd4f9a5a2a8cd1b994f8e8ae2 sim/testsuite/sim/frv/and.cgs -4a47a184f95cf06b21e2cb960ec207ca sim/testsuite/sim/frv/ChangeLog -ce965b75b06cd55ef70169b06c863849 sim/testsuite/sim/frv/ftigt.cgs -7844ed84fbc9b4ee3a16338a630a6b99 sim/testsuite/sim/frv/subcc.cgs -4fe0320394ce9fd521b0b903b37a44de sim/testsuite/sim/frv/bceqlr.cgs -da932dece8c1932a8e4b322ae96bb5d0 sim/testsuite/sim/frv/fcbltlr.cgs -b4bfdcbeb1d5db33d9166dc9f77da383 sim/testsuite/sim/frv/fdnegs.cgs -53d642fd09d91db1bfef8cafa2d8c864 sim/testsuite/sim/frv/fbno.cgs -58aae8e7b29223770991f01723b7dd98 sim/testsuite/sim/frv/mcutss.cgs -0eb9d6f24940fa1b3a290ee7f83529e6 sim/testsuite/sim/frv/cfnegs.cgs -c133078967d4e2c08e05c0c211483593 sim/testsuite/sim/frv/nfmsubs.cgs -f8de97a7353abe4fe732d79898771e06 sim/testsuite/sim/frv/cmexpdhd.cgs -fb8002b4e6861b77f536c7629c7bf622 sim/testsuite/sim/frv/stbu.cgs -dd7b86dd559bc919891c419cc5b9eb45 sim/testsuite/sim/frv/cckp.cgs -fb274f110b2b0e732c8ab6b0567641da sim/testsuite/sim/frv/cmcpxrs.cgs -98be2afbdc22e83e7ed60607d14d3586 sim/testsuite/sim/frv/tigt.cgs -4f3c2f0fc2e3ed5b6c87cd135a6bbd00 sim/testsuite/sim/frv/nldhf.cgs -f91ccc0eb4e839737d94f68601bf130f sim/testsuite/sim/frv/bnclr.cgs -511bee637d7a77e1f4ead6e790993d68 sim/testsuite/sim/frv/cckgt.cgs -9564e9d1067be24d75f69103b57a85dc sim/testsuite/sim/frv/nfdmulcs.cgs -048a96dcaad276073b908e6c8f4d9189 sim/testsuite/sim/frv/cop2.cgs +fe9af3628dda1a7e0478b27afcb4a903 sim/testsuite/sim/frv/cmnot.cgs +7436eebb11c6129d8a06aa52d0641d19 sim/testsuite/sim/frv/andcr.cgs +b0b3ba45dce79cce5d0db607ed12fbfe sim/testsuite/sim/frv/cckra.cgs +86c530fd6445d3f516387550e7172fa5 sim/testsuite/sim/frv/fcbulr.cgs +7b350a57e6efb69056eeffc36aa0cac4 sim/testsuite/sim/frv/cfckgt.cgs +64efd173f19902d6a2005148cb3d4831 sim/testsuite/sim/frv/stc.cgs +c1916f813f831be331a1dbc2312fd4bb sim/testsuite/sim/frv/stdu.cgs c613f1a55c9e79f62abbd91eee7fde9d sim/testsuite/sim/frv/ldf.cgs -d558b5c8f62773391401afa4258ec585 sim/testsuite/sim/frv/fdmss.cgs -9be8c0bf0141c153cf179aa9b42ee2d1 sim/testsuite/sim/frv/xorcc.cgs -031b21c3201bce5ff37ac1d2087209c8 sim/testsuite/sim/frv/cmhtob.cgs -f6e8f7472bf3297a7b540ebaabc0c1f2 sim/testsuite/sim/frv/umuli.cgs -25805dfe75db053034915ba8a5b33ce2 sim/testsuite/sim/frv/ftgt.cgs -4aabea39aa800e2eab4188a00b9ba7b3 sim/testsuite/sim/frv/fbo.cgs -100c61ae3fb0dca4723d52d915d79b03 sim/testsuite/sim/frv/tils.cgs -b1bfeba9317d62d449126bee0f7fa720 sim/testsuite/sim/frv/corcc.cgs -30964df0b57f2b91f67fc38a30d8e814 sim/testsuite/sim/frv/addicc.cgs -54e056f54d116cde6e23ee7dee9a9c8b sim/testsuite/sim/frv/andicc.cgs -5900af0d1f33281e6a8d166d3cabe74a sim/testsuite/sim/frv/calll.cgs -512f6ab69b17ee51ff97983b35376396 sim/testsuite/sim/frv/nldshi.cgs -8916d2cace8900da8a1d671e9a0ea2b7 sim/testsuite/sim/frv/csra.cgs -fe0935479403ab62bd07f75bc6974752 sim/testsuite/sim/frv/ld.cgs -f72cfcf1db3b542e40ae4d24754a8648 sim/testsuite/sim/frv/nfddivs.cgs -694f1d17123f4bb9c03260c1fe669aac sim/testsuite/sim/frv/fdtoi.cgs -e81006aee4bbd0e3671448585ab45d5d sim/testsuite/sim/frv/mdcutssi.cgs -5c07a1afebe94dfc4e0132d66d8c28ea sim/testsuite/sim/frv/mqmulxhs.cgs +80d2065efb7d0769f11b1c4881e20500 sim/testsuite/sim/frv/munpackh.cgs 50823aeb4369412ff15e1c422ea6d8f7 sim/testsuite/sim/frv/cmovfg.cgs -985bedf1c0cc65d298ccc789ebc69179 sim/testsuite/sim/frv/mmrdhs.cgs -d2a4394753db3dfcbe7e384ee21e2202 sim/testsuite/sim/frv/movgs.cgs -082bcd35a3b7969bc5b37731b9db0243 sim/testsuite/sim/frv/fckne.cgs -d8e85f1e2dfaa87480b812c7c03ee19b sim/testsuite/sim/frv/cfitos.cgs -c1916f813f831be331a1dbc2312fd4bb sim/testsuite/sim/frv/stdu.cgs -9f35e5c8475a3dce4d3d1f86192b757f sim/testsuite/sim/frv/add.cgs -87cef6e1007d13b030a257ac5991b6e0 sim/testsuite/sim/frv/subx.cgs -fa4d51b6701d40a568e60a35d730a09c sim/testsuite/sim/frv/fdmovs.cgs -4a13d5d2947c3543c94581ba88ec7fc4 sim/testsuite/sim/frv/andncr.cgs -40aac5235a3696c45134d86e1e79c5d9 sim/testsuite/sim/frv/mcpxis.cgs -1875ffded69787f7962d216e83812183 sim/testsuite/sim/frv/allinsn.exp -4cf840661cd9ed9ad76e658e996fc2fb sim/testsuite/sim/frv/lddi.cgs -325a426583fc25d49f02863c763aeb84 sim/testsuite/sim/frv/cklt.cgs -891b8ae9013d787e9abf3f3980a93682 sim/testsuite/sim/frv/cmqmachu.cgs -003fcd3e132470d58c6ceb7177806c5b sim/testsuite/sim/frv/ldi.cgs -3de97f087ebc932501f95bc2bd775d5f sim/testsuite/sim/frv/nfmas.cgs -f552807622d2ead6a4c3c72b6ab6ea1c sim/testsuite/sim/frv/cmaddhus.cgs -d7fefcc42f8ee556fc3e29e07866f54a sim/testsuite/sim/frv/cldf.cgs -fdd8bd1799f969d718f27d5140c561e1 sim/testsuite/sim/frv/nfdmas.cgs -c89a2bf5e53afd9b92868ba2b7233f73 sim/testsuite/sim/frv/fbgelr.cgs -32066e6265ce0fd1845b4342336d925a sim/testsuite/sim/frv/mqsrahi.cgs -64a8de42436fc5c8f2d468e70c54e9aa sim/testsuite/sim/frv/fstoi.cgs -d68f7809049059eb9fdbdaef18d03edd sim/testsuite/sim/frv/cop1.cgs -e2bbc311eb90229f9eb63b3ea456aa51 sim/testsuite/sim/frv/ftira.cgs -fcdd282d23082a3f4baf0861979ef5bb sim/testsuite/sim/frv/nldu.cgs -5890a645af954362f462a536301ab07a sim/testsuite/sim/frv/mclracc.cgs -c171d116ab1a2be2bd6fe89d40046466 sim/testsuite/sim/frv/msubhus.cgs -7e182fb1f729214fcc4e500b45b28c67 sim/testsuite/sim/frv/nldq.cgs -e3f8edcf3d2202102c308c006b574282 sim/testsuite/sim/frv/bclslr.cgs -8570296a139952dc9cf976d500d2f827 sim/testsuite/sim/frv/fcbullr.cgs -e6ac3d3a2b75c748d32f1dff04690c18 sim/testsuite/sim/frv/mmulxhu.cgs -7b350a57e6efb69056eeffc36aa0cac4 sim/testsuite/sim/frv/cfckgt.cgs -3664a976c54024aeb5afceea3da50af6 sim/testsuite/sim/frv/stqu.cgs -ce8352f2c405c5128184546ff69e67e3 sim/testsuite/sim/frv/cxorcc.cgs -f7adffe89325460b83af4ef27b83a02e sim/testsuite/sim/frv/clduhu.cgs -9ba5b89fa11ddec7e98787ca73fa0115 sim/testsuite/sim/frv/ldsb.cgs -fbd58be2c1178ffbda7cbe566dda3bb4 sim/testsuite/sim/frv/ftiu.cgs +ed7de1b15d6c5535e9d56ff902749a49 sim/testsuite/sim/frv/cscan.cgs 533ecf4107a99d0372bd32229bb091ae sim/testsuite/sim/frv/tno.cgs -1de01bb11a8e27d051b6d84fdf37cbff sim/testsuite/sim/frv/movfgd.cgs -520e9f58107f1a7407724d2b52bbe214 sim/testsuite/sim/frv/icpl.cgs -ebae9cb1aaa0ceb6dbf6976f06d735c7 sim/testsuite/sim/frv/fdabss.cgs -42cdb4f8bb24ee39032c4c32ca61b709 sim/testsuite/sim/frv/fdsubs.cgs -7174dbd57607dbdc45c4243fb7f02aa7 sim/testsuite/sim/frv/maddhss.cgs -c4fbea8332e5b07b3fd2e18f0fd4fd9f sim/testsuite/sim/frv/lddfu.cgs -7461f81658de5eada83b19dbf47f1c28 sim/testsuite/sim/frv/fdcmps.cgs -b0ae2b6d72c1546e70b77d0f906ca816 sim/testsuite/sim/frv/cmand.cgs -2578eab56c9efe85e875334d9be745a5 sim/testsuite/sim/frv/ldshu.cgs -7a55c30063f85e2d54e1cc2841ee7a63 sim/testsuite/sim/frv/stu.cgs -93142a00f792c55ff26c67e4495c3ee8 sim/testsuite/sim/frv/bctrlr.cgs -7436eebb11c6129d8a06aa52d0641d19 sim/testsuite/sim/frv/andcr.cgs -9b2b24b2080b3778404da0e73b2f4c45 sim/testsuite/sim/frv/icei.cgs -a92e4825d2c41be84a96f2f6db7de29b sim/testsuite/sim/frv/cmovgf.cgs -02991b6e743da14fcd82acaa74ad2de3 sim/testsuite/sim/frv/addxicc.cgs -bee17829c104e8e5901d5218f8da3030 sim/testsuite/sim/frv/fblg.cgs -e3482ddd50c998096e309469d49bf60f sim/testsuite/sim/frv/ftge.cgs +2e537bc555c2ad4796ded84bfd87d976 sim/testsuite/sim/frv/fcbnelr.cgs +7aa4b56189a14f023e26984163cb0b4e sim/testsuite/sim/frv/ftiue.cgs +506b3aaeb2f55f7313b18756c9ea8897 sim/testsuite/sim/frv/cfckug.cgs +20f4895c822bcecaa711c3508043ced9 sim/testsuite/sim/frv/mmulhu.cgs +285195010d47ac9191d9c97aca80f0e6 sim/testsuite/sim/frv/stdcu.cgs +bb9428edb53dbe935f3f5d3295c296f6 sim/testsuite/sim/frv/cstu.cgs +cdb16f4dfab32f15e7a55fba16afd880 sim/testsuite/sim/frv/stdfi.cgs +91e3dc0afab2fdfca7731c7e1f37e33f sim/testsuite/sim/frv/cckn.cgs 7482a3b75fcf89d6eac98c42d36722e9 sim/testsuite/sim/frv/csdiv.cgs -28b4f2f9ac438caaebbf3d5fe7b8b9f3 sim/testsuite/sim/frv/mwcuti.cgs -c75ed78a7566a8628cf0a0339c5dcf21 sim/testsuite/sim/frv/mdaddaccs.cgs -66f358e165d3d3c59afa716dc67d1788 sim/testsuite/sim/frv/fdivd.cgs -903edfdf254dfa703f606ad9ccda17ad sim/testsuite/sim/frv/nlddi.cgs -3b2a2c6753bd7ff55bc524a863d3a3cb sim/testsuite/sim/frv/cmpi.cgs -2fd5797e8c20d9d7b340e095633f2ff6 sim/testsuite/sim/frv/fcklt.cgs -3ddb83bbd7a429a77b68790480613591 sim/testsuite/sim/frv/fbulr.cgs -f60030141346c133b53f259287743291 sim/testsuite/sim/frv/ftiul.cgs -5c7a02887eb56676fc4f267dff41f169 sim/testsuite/sim/frv/nfmadds.cgs -80d04d00a7e92cc4c32af000081d5cd4 sim/testsuite/sim/frv/ftilg.cgs -2a756ad9c98638728516c303deb87eb0 sim/testsuite/sim/frv/ldbf.cgs -dcdd60cb6a74a2fdf05c27542ce87c00 sim/testsuite/sim/frv/scan.cgs -40981f85eeb4a396327c4e11f7ca792d sim/testsuite/sim/frv/nfmuls.cgs -785f29fcfbdef6e93f772f32635daec4 sim/testsuite/sim/frv/cstdfu.cgs -ccf1387db46bf4985328d9b58f89085e sim/testsuite/sim/frv/nfdsqrts.cgs +bfa79960646e1c17eadb4100a422dd9d sim/testsuite/sim/frv/mqlmths.cgs +ffdac6d343d018ba34d4952027680104 sim/testsuite/sim/frv/cfabss.cgs +8c68b4f09d376aac18a160f70bbb24c0 sim/testsuite/sim/frv/stfi.cgs +8a5f013616cf1e6db319200b9db548cd sim/testsuite/sim/frv/ftle.cgs +3de97f087ebc932501f95bc2bd775d5f sim/testsuite/sim/frv/nfmas.cgs +099e806e30801140def329d0fc74d8f3 sim/testsuite/sim/frv/stqfu.cgs +9797e25ce9dc0b46d586cd0d92620735 sim/testsuite/sim/frv/umulicc.cgs +1faedf52637eb93c36507f38fd31fea3 sim/testsuite/sim/frv/branch.pcgs +5761527de2c6413c3f8a07d2189ef92a sim/testsuite/sim/frv/fsubs.cgs +3550e78fee67575b3e364e279299a11e sim/testsuite/sim/frv/fble.cgs +6c26a616dd6fed8bd7e159e371fe4fe4 sim/testsuite/sim/frv/fitos.cgs +09025c57960cb3245c45b229551573d1 sim/testsuite/sim/frv/fcko.cgs +3a29b1dd11046f8f4dd5c27edc2a8d6f sim/testsuite/sim/frv/stq.pcgs +bff2fec4c10ff1cc52f6708fa1cd9e5a sim/testsuite/sim/frv/csracc.cgs +38e18b11776fdecb14fcc94311d95b20 sim/testsuite/sim/frv/fmsubd.cgs +7bff63bb7f11db3619daa65ba575eb4b sim/testsuite/sim/frv/ldsh.cgs +7a14b1a4b9c264ad6fe9fee43a34053c sim/testsuite/sim/frv/nldubu.cgs d3412bc4c0b67f6c78449fd684463b9b sim/testsuite/sim/frv/mrdacc.cgs -3ba660d7dcfb108e50618445716bb95b sim/testsuite/sim/frv/sraicc.cgs -29e215193143b4309c76dec515f0ffb9 sim/testsuite/sim/frv/nlduhi.cgs -cdb16f4dfab32f15e7a55fba16afd880 sim/testsuite/sim/frv/stdfi.cgs -4494a0e9c7fd903a3280a5baec16e6db sim/testsuite/sim/frv/clddfu.cgs -72215397d3a25089fcadc96d0449fa9d sim/testsuite/sim/frv/cmqmachs.cgs -31e7cd50ae42d84c7edbb16ec1824569 sim/testsuite/sim/frv/bnlr.cgs -e50b5ddbb0d1b0554408f8db8f7da8a4 sim/testsuite/sim/frv/fcbgelr.cgs -956c2a9363667d599f0ad75bd639805b sim/testsuite/sim/frv/fckeq.cgs -2521bd2ee748d58fdae65f585b453033 sim/testsuite/sim/frv/commitfa.cgs -a016768b6c2c21cc9c4354d7cc7f9628 sim/testsuite/sim/frv/mqmachs.cgs -46a9440b74727f04cf647f1904d566fd sim/testsuite/sim/frv/csubcc.cgs -0cfc1cccecd9264a187a4fde5a4e1b92 sim/testsuite/sim/frv/fto.cgs -f3f076fc173ea772baff44f55775ca03 sim/testsuite/sim/frv/ldubu.cgs -16bf5094b2c7a186f0e11fa373625fb8 sim/testsuite/sim/frv/ftieq.cgs -8aa28a7f77fd8f94f1f8d4441330d2de sim/testsuite/sim/frv/maddhus.cgs +754cf046515e94f61db9e81c57bbef98 sim/testsuite/sim/frv/mxor.cgs +a913dea5c58bfd33d54ec66ebe5abdf3 sim/testsuite/sim/frv/tieq.cgs +294f97c82070648f417c81cefbf0d68e sim/testsuite/sim/frv/cmovfgd.cgs +94b3e5d6bcfbca96e1d45b116852ee46 sim/testsuite/sim/frv/cstq.cgs +7b8111a1958ac7ac0609e3ec19946402 sim/testsuite/sim/frv/cfadds.cgs +fe0935479403ab62bd07f75bc6974752 sim/testsuite/sim/frv/ld.cgs +8a77e7659d777d6c0d67e89e341cf17c sim/testsuite/sim/frv/bclr.cgs +9d2e37d0bea30c9a00cac2518ddd5947 sim/testsuite/sim/frv/fcmps.cgs +c8327289e084ae64868b9257b8646e11 sim/testsuite/sim/frv/stcu.cgs +484f52adb8fc411974f97082db9d5dbc sim/testsuite/sim/frv/nlddf.cgs +6cb71382953aaa573377ba9365cf47c8 sim/testsuite/sim/frv/nldsbi.cgs +3014022934a14b3431fdacf8e86dd3eb sim/testsuite/sim/frv/bno.cgs +27c8a87945ccd5906ecb831c022a2cae sim/testsuite/sim/frv/nldqu.cgs +c82aab8314691de50e4eb1b4d2deee7f sim/testsuite/sim/frv/norcr.cgs +f8809a99276af73a606645ea3782eaa4 sim/testsuite/sim/frv/fcblelr.cgs +2f2d7f51d4276d8bc6c7a559cf40358f sim/testsuite/sim/frv/ckls.cgs +7a55c30063f85e2d54e1cc2841ee7a63 sim/testsuite/sim/frv/stu.cgs +be7bc8f47af7ec401ae8edc5735ae83f sim/testsuite/sim/frv/mbtohe.cgs +c76e1c140c00dea2137868c13de73686 sim/testsuite/sim/frv/nfdsubs.cgs +26d92ac47d2a85071f1c0c26d721e2cc sim/testsuite/sim/frv/ldhfu.cgs +90d5802ce49387d77932ca25262923af sim/testsuite/sim/frv/fcbuelr.cgs +b32fc8a8e6bba1b163e798c7a6b2998a sim/testsuite/sim/frv/bltlr.cgs +5645677fd61cac055a6989382352af7e sim/testsuite/sim/frv/nfadds.cgs +ddf4ff091a5b6c5cf352c04d236e2fcc sim/testsuite/sim/frv/stbfi.cgs +0bd2bac2e1c8b477c6ca6c96a9c0d2ec sim/testsuite/sim/frv/subxicc.cgs +a05d5c0d7e028af3383c1e9b237ef156 sim/testsuite/sim/frv/mrotri.cgs +fa4d51b6701d40a568e60a35d730a09c sim/testsuite/sim/frv/fdmovs.cgs 358b9c46cd5cb979fdaf717f46764b5a sim/testsuite/sim/frv/mabshs.cgs -d2ca7d2383745ede57de7cf3a71b250b sim/testsuite/sim/frv/bge.cgs -5970b5e8ca637b383803588fb78206d8 sim/testsuite/sim/frv/mmulxhs.cgs -86c530fd6445d3f516387550e7172fa5 sim/testsuite/sim/frv/fcbulr.cgs -a659a5c06a90b61548ad0d23636f740b sim/testsuite/sim/frv/ccknc.cgs -317e00e7d2fc4d994400b3435e38deba sim/testsuite/sim/frv/mqmachu.cgs -a2266c24dffd8d4a696b3619a897269f sim/testsuite/sim/frv/fnop.cgs -0814d3851a44b4bce8357863eec8e600 sim/testsuite/sim/frv/smul.cgs -e34e76144ebb7dd885f027a37c38ae79 sim/testsuite/sim/frv/fcbulelr.cgs -bff2fec4c10ff1cc52f6708fa1cd9e5a sim/testsuite/sim/frv/csracc.cgs -054aeba615c6c341369854f1405d85d8 sim/testsuite/sim/frv/cmbtoh.cgs e7a86181d00e8f0c9684753e86508c74 sim/testsuite/sim/frv/nsdivi.cgs -7b12e32c5f9c78b47dec5eb157449ab8 sim/testsuite/sim/frv/fbralr.cgs -b3a1a12789fd5e052662744d3bd0a912 sim/testsuite/sim/frv/clduh.cgs -18c32597076e6690eca21bdaa9b70083 sim/testsuite/sim/frv/ftul.cgs -a01a5cb5837ff3029820691d608c0fe3 sim/testsuite/sim/frv/tira.cgs -c5163110cf891849bed86c0f453b8e02 sim/testsuite/sim/frv/fitod.cgs -36024f7e3058972d0b99742ee87119cd sim/testsuite/sim/frv/fnegs.cgs -8aa6fce072b5f76aed92908d9cb37534 sim/testsuite/sim/frv/swap.cgs -0e297dc071234a78bd595a57838d5adc sim/testsuite/sim/frv/fbne.cgs -6cb71382953aaa573377ba9365cf47c8 sim/testsuite/sim/frv/nldsbi.cgs -849a1c54f6b7fc29b1fea32e1adffb98 sim/testsuite/sim/frv/nld.cgs -ecca874070d3e9425aeb8088c8a60d30 sim/testsuite/sim/frv/tra.cgs -1e7f2deead6fb5c78f146ae3eb2fc6be sim/testsuite/sim/frv/addi.cgs -8674ff984bcbe2b1460d51e69db27c7b sim/testsuite/sim/frv/mqmulxhu.cgs -9711b61b6a23527c5cde41eaac4eb112 sim/testsuite/sim/frv/nsdiv.cgs -da4a0f53d7d03d30ce9cca0bf34a2ece sim/testsuite/sim/frv/nudivi.cgs -8811726c9441dd7b9f70a3bf6f8ab4fb sim/testsuite/sim/frv/fcbolr.cgs -d62ead6b5942f8e2a83a67ef8db006bf sim/testsuite/sim/frv/tic.cgs -2505dee1a39d2cde6c4c38408239b7c0 sim/testsuite/sim/frv/testutils.inc -cad1a26e6f61be6236cdf19c6f330241 sim/testsuite/sim/frv/tnv.cgs -dcb10a82d61302543652fed0b13575b2 sim/testsuite/sim/frv/ldcu.cgs -ec7dfbef9d8c3fcfbd2a205998b43499 sim/testsuite/sim/frv/tne.cgs -73a5313d89e6d5975be48f3e2522c1a2 sim/testsuite/sim/frv/bcltlr.cgs -ac7e485b7fc2228e78885a3580c40684 sim/testsuite/sim/frv/nfditos.cgs +4aa3a5fba828d2c29dff1b6f57d59678 sim/testsuite/sim/frv/fckra.cgs +7907b41ac563ea2be426de33f8910f66 sim/testsuite/sim/frv/ldbfi.cgs +ad9476d15f761b15a7243c9030efa135 sim/testsuite/sim/frv/cknv.cgs +58aae8e7b29223770991f01723b7dd98 sim/testsuite/sim/frv/mcutss.cgs +23522584d66a3f774c033e074adf7612 sim/testsuite/sim/frv/tc.cgs +9ebd87890c8a7abc680822709889778c sim/testsuite/sim/frv/caddcc.cgs +82952c2b9fbbc99ed421717e4ca1e9be sim/testsuite/sim/frv/cldbf.cgs +b38f99b4027aa8bc54b81cd44830ff0c sim/testsuite/sim/frv/ftule.cgs +2e1fd77e3c7dc410824bb62d86c12fa5 sim/testsuite/sim/frv/mand.cgs +5032a5008a230358b8434e010fa7aa66 sim/testsuite/sim/frv/bcnlr.cgs +98be2afbdc22e83e7ed60607d14d3586 sim/testsuite/sim/frv/tigt.cgs +2caa34c2c4802ea92661e98ac6af667f sim/testsuite/sim/frv/maveh.cgs +f7adffe89325460b83af4ef27b83a02e sim/testsuite/sim/frv/clduhu.cgs +fbd58be2c1178ffbda7cbe566dda3bb4 sim/testsuite/sim/frv/ftiu.cgs +3664a976c54024aeb5afceea3da50af6 sim/testsuite/sim/frv/stqu.cgs +937c6181f24f15a85ce59e24a746f6da sim/testsuite/sim/frv/notcr.cgs +e54bc9be577ed53f98a7256e02292a9f sim/testsuite/sim/frv/blelr.cgs +e92162146f80eacb87cc88e02de63d26 sim/testsuite/sim/frv/mqcpxru.cgs +9bd25bbc9331a8a7a764970163f8a3c2 sim/testsuite/sim/frv/nandncr.cgs +e34e76144ebb7dd885f027a37c38ae79 sim/testsuite/sim/frv/fcbulelr.cgs +8e6934cc5df77f17ded11b0e56344cc1 sim/testsuite/sim/frv/nlduhu.cgs +a96d3d1ca3ffa9a8c975ff08bcf77a2d sim/testsuite/sim/frv/fcbuglr.cgs +301a4bafaa39d4e1ab111b7fd38291e9 sim/testsuite/sim/frv/tine.cgs +00bb5f98862bbebc770fac0fa658bf27 sim/testsuite/sim/frv/cldq.cgs +b04e822dac50d26e600e9af54cc86907 sim/testsuite/sim/frv/blslr.cgs c23d94eb48818d1a8830ea6d0edc3260 sim/testsuite/sim/frv/cmov.cgs -9ac0ca5fc78d29c5cb125f7f0232ab24 sim/testsuite/sim/frv/ftno.cgs -1162b46f1c6271d41d44fd0376fd0abd sim/testsuite/sim/frv/clrga.cgs -e045ac944c8eccc986873c525e9996fc sim/testsuite/sim/frv/dcef.cgs -bbe41f9762adbc1e38c19904af9a4622 sim/testsuite/sim/frv/mdsubaccs.cgs +18c32597076e6690eca21bdaa9b70083 sim/testsuite/sim/frv/ftul.cgs +62439f50d31a64a7d77bfe8d242d68c2 sim/testsuite/sim/frv/bcnclr.cgs +f423c77b0989e36e0e8829e450d94c74 sim/testsuite/sim/frv/fmsd.cgs +dae087e8f55a8ecbfe85b2476c9267e2 sim/testsuite/sim/frv/mcpli.cgs +4a3754ff5d07a1bff25b091c6475abad sim/testsuite/sim/frv/tiv.cgs +e50b5ddbb0d1b0554408f8db8f7da8a4 sim/testsuite/sim/frv/fcbgelr.cgs 1cbff10c95fb9390a7cc4d56fef5f794 sim/testsuite/sim/frv/ckno.cgs -1ff43ea60f446681dd0636f4abf0afaf sim/testsuite/sim/frv/clrfr.cgs -60319f32e98f86da38ff2c3c5212d862 sim/testsuite/sim/frv/fdsqrts.cgs -6f912abf4768c8b66831a8ce4a5ab658 sim/testsuite/sim/frv/nfdcmps.cgs -b813da728e948bf7f3d0a70e28fd56de sim/testsuite/sim/frv/mmulhs.cgs -e9aafacc4f7c85928dd1c32c5c79fc5a sim/testsuite/sim/frv/bcnolr.cgs -11bfcfb4b6f70c5075adaa4f37dca943 sim/testsuite/sim/frv/cjmpl.cgs -7e7ca53ba30cdcc99c94cd76e31edbfd sim/testsuite/sim/frv/cmqmulhs.cgs -de1b6d1ff997e66d64111e7a69c3f749 sim/testsuite/sim/frv/mqcpxis.cgs +1516ca30ed3dda235da364d46c38d2a1 sim/testsuite/sim/frv/ccknv.cgs +ac7e485b7fc2228e78885a3580c40684 sim/testsuite/sim/frv/nfditos.cgs +0dfa108dc10c10107281add62d6ca5ff sim/testsuite/sim/frv/fblglr.cgs +7acb4d8fcf1961a11eb5f86da60a0804 sim/testsuite/sim/frv/jmpl.cgs +8a304334e1341487c78471b20f879ecd sim/testsuite/sim/frv/fbltlr.cgs +bd0fbf9e7faa375603574f1a40665865 sim/testsuite/sim/frv/cmpb.cgs +fdd8bd1799f969d718f27d5140c561e1 sim/testsuite/sim/frv/nfdmas.cgs +ce9abd48c84d1abd4b05d248d4e9067e sim/testsuite/sim/frv/ldubi.cgs +f48f14696dde175e869c7c04abc8573b sim/testsuite/sim/frv/ftine.cgs +8a296ea605f6ea7504e25318c38b44c4 sim/testsuite/sim/frv/stdf.pcgs +2dce4079bac9e873cc2f7466bbdbc0bd sim/testsuite/sim/frv/cfckul.cgs +a7085119fedb3ac3d4e31403309293b1 sim/testsuite/sim/frv/fteq.cgs +182d8d5e906c1fe63b1ec15953fbbf0a sim/testsuite/sim/frv/fbul.cgs +ad1fb24311a078779b253206335fb321 sim/testsuite/sim/frv/nldqfi.cgs +cad1a26e6f61be6236cdf19c6f330241 sim/testsuite/sim/frv/tnv.cgs +3a686d8663268c0def363c90e28b1376 sim/testsuite/sim/frv/subicc.cgs +24091903403ffb172b0b81cfbb3f331e sim/testsuite/sim/frv/add.pcgs +3da93d4f6c18f18193c0441a79758bcc sim/testsuite/sim/frv/ble.cgs +8f07983738e8be6e8f294385e90a83f1 sim/testsuite/sim/frv/bnolr.cgs +a1394d82fbbcdc7278c8ff7b0b749317 sim/testsuite/sim/frv/fsqrtd.cgs 84ffdd51531190b3f7ab0bd433a36036 sim/testsuite/sim/frv/sthi.cgs -4907fd3e32af4b4b10ed57c593639002 sim/testsuite/sim/frv/cmmachs.cgs -3550e78fee67575b3e364e279299a11e sim/testsuite/sim/frv/fble.cgs -9fc9892f699a1d3ddc62ae7524e9ce82 sim/testsuite/sim/frv/stbfu.cgs -244caf04384a0a05c44c7299059e0a1e sim/testsuite/sim/frv/stqf.pcgs -eb2f7e79db41af0b45c8182f92563397 sim/testsuite/sim/frv/csrl.cgs -be2f0506fae9889d33fdeadc7910e5e5 sim/testsuite/sim/frv/fcbnolr.cgs -145a02c3e9ec1831696933a5f22aa31d sim/testsuite/sim/frv/fbnolr.cgs -73fa8ef52f05985daec1d8a01dbbc29f sim/testsuite/sim/frv/stqc.pcgs -9ca0539cd8fde544f4023712395cfce5 sim/testsuite/sim/frv/cxor.cgs -4a3754ff5d07a1bff25b091c6475abad sim/testsuite/sim/frv/tiv.cgs -099e806e30801140def329d0fc74d8f3 sim/testsuite/sim/frv/stqfu.cgs -aa46f6b377cfc62824b0be2e6fc1c326 sim/testsuite/sim/frv/stqc.cgs -5f05aa8ededad20eccd884443cd8ee28 sim/testsuite/sim/frv/fbra.cgs -218e7bf5cef1de12c72a7b41e0734233 sim/testsuite/sim/frv/cldshu.cgs -ee34b84c6bf75a9babe137a04ac4b75a sim/testsuite/sim/frv/sllcc.cgs -8700acd6ed03f5cbac0ad536383ed3c8 sim/testsuite/sim/frv/sllicc.cgs +eb0c622a60c8bb2159d3a20ddaf72563 sim/testsuite/sim/frv/tn.cgs +8ccbca9bbf069a03a4d929333916d88c sim/testsuite/sim/frv/sthu.cgs +bf4cfe49b9af48954b1a4495db0bcb6f sim/testsuite/sim/frv/mqmacxhs.cgs +ea152c37492f744e98208e25538591cc sim/testsuite/sim/frv/nandcr.cgs +054aeba615c6c341369854f1405d85d8 sim/testsuite/sim/frv/cmbtoh.cgs +8674ff984bcbe2b1460d51e69db27c7b sim/testsuite/sim/frv/mqmulxhu.cgs +b3a1a12789fd5e052662744d3bd0a912 sim/testsuite/sim/frv/clduh.cgs +a92e4825d2c41be84a96f2f6db7de29b sim/testsuite/sim/frv/cmovgf.cgs +33411cb293d5fc422c7990104604db74 sim/testsuite/sim/frv/fckul.cgs +8570296a139952dc9cf976d500d2f827 sim/testsuite/sim/frv/fcbullr.cgs +91fd679b72e10313567ecee40d839288 sim/testsuite/sim/frv/cldu.cgs +54abbae4f460a1ac2f0f979b48cff91f sim/testsuite/sim/frv/ret.cgs +f394652f9ebf77a1d90b8a114793c2cb sim/testsuite/sim/frv/cmmulhs.cgs 26a2849fb8c805ffcb118c47ef7bf006 sim/testsuite/sim/frv/fcmpd.cgs -f3f08211769783c8fad2413b5f4419a5 sim/testsuite/sim/frv/msubhss.cgs -285195010d47ac9191d9c97aca80f0e6 sim/testsuite/sim/frv/stdcu.cgs -d94022526f601563a7d06cde8c8461d5 sim/testsuite/sim/frv/mcutssi.cgs -f423c77b0989e36e0e8829e450d94c74 sim/testsuite/sim/frv/fmsd.cgs -078c55334418476eb782ff3b071fc106 sim/testsuite/sim/frv/bnvlr.cgs -935a9c4cf686aaa2f4c480791181b2c9 sim/testsuite/sim/frv/fckuge.cgs -90cebd7ff7dc2106afca60b9a5a26bed sim/testsuite/sim/frv/ldqu.cgs -50daedd569566b5f5fd6030c9c961735 sim/testsuite/sim/frv/cor.cgs -9d2e37d0bea30c9a00cac2518ddd5947 sim/testsuite/sim/frv/fcmps.cgs -4f526f2f27056051f986c47b44c9b1ff sim/testsuite/sim/frv/nfitos.cgs -41358b18cb9bba0fa299b05270c44629 sim/testsuite/sim/frv/tv.cgs +7640dbf388ab7b7e4462b20d93ca0dca sim/testsuite/sim/frv/clrfa.cgs +6cc09cbce0f4709083b896f39eb8788b sim/testsuite/sim/frv/csll.cgs +6eafdd537ba1f28305cee77fe68ff5fd sim/testsuite/sim/frv/setlo.cgs +4907fd3e32af4b4b10ed57c593639002 sim/testsuite/sim/frv/cmmachs.cgs +d8e85f1e2dfaa87480b812c7c03ee19b sim/testsuite/sim/frv/cfitos.cgs +f428dd31a13e708566a12b6eb23e75aa sim/testsuite/sim/frv/mrotli.cgs +1875ffded69787f7962d216e83812183 sim/testsuite/sim/frv/allinsn.exp 58728788baa01be3e6482ab14b5fde4f sim/testsuite/sim/frv/bhilr.cgs -1abb897f3ac03712dcaf0fa415a85bb3 sim/testsuite/sim/frv/commitgr.cgs -3014022934a14b3431fdacf8e86dd3eb sim/testsuite/sim/frv/bno.cgs -fcf411b3b36ddc44d1d61f595d1730f3 sim/testsuite/sim/frv/fckge.cgs -75d93040b8b11cd80e200e83f9c3b423 sim/testsuite/sim/frv/nfdmss.cgs -680e346877ec40599ab486d183890983 sim/testsuite/sim/frv/ftlg.cgs -d0cadfc6114ffc4c49bd0b7cf87984dc sim/testsuite/sim/frv/ckv.cgs -a557f55cfe20662991a594673e5a877b sim/testsuite/sim/frv/cfckeq.cgs -f77f7688f51f87c5e93a3e56bd0fbc96 sim/testsuite/sim/frv/ldbfu.cgs -4f261153dda57be2acd2d50974b2157a sim/testsuite/sim/frv/csub.cgs -34a484991db89cb85939b4735fd01d7d sim/testsuite/sim/frv/cfckle.cgs -7eb6a791ed88c6c8794db6e2d7d1c4cd sim/testsuite/sim/frv/ftue.cgs -b0d3f8840cbd815c5cf1fed7f60b95ac sim/testsuite/sim/frv/bcnvlr.cgs -75f2c544b8e80d583bfc78a32fce7f9f sim/testsuite/sim/frv/mcop1.cgs -67bd729e92a8ccbb0ef66f5053e9c7c9 sim/testsuite/sim/frv/ori.cgs -6f24d372cfa857010330fd99b9ceaa3f sim/testsuite/sim/frv/mcuti.cgs -a5c4254bb5fb67e6553d7b4245facb4d sim/testsuite/sim/frv/fckgt.cgs -318cb22eb343ae2ba7c0a11ec86755f3 sim/testsuite/sim/frv/bcralr.cgs -2eb6969a0c7a4eb4fff85aac9727721a sim/testsuite/sim/frv/smulicc.cgs -56f5fdf1970e4a477ff5bcd70ad6128d sim/testsuite/sim/frv/orcr.cgs +f0900597e5ab5ecf6b5c7a7767e62980 sim/testsuite/sim/frv/nldqf.cgs +9d42de2773bcddcd37eafe1bf37aba97 sim/testsuite/sim/frv/cstbu.cgs +04ebe641dcc2681cb7085e49e4b8787d sim/testsuite/sim/frv/ldshi.cgs +0b2e49d6ce9f4d51307d7a0c0884c357 sim/testsuite/sim/frv/cmpba.cgs +bfc76c12370aafb393d878212832d3e3 sim/testsuite/sim/frv/cldd.cgs +055fa9b5ef1f3c1f955737457b0f3430 sim/testsuite/sim/frv/cfcklg.cgs +9b2a570d81405ae96edd05841a00340c sim/testsuite/sim/frv/bchilr.cgs +250d78cd5a5807bcacccc649f4e5d0ad sim/testsuite/sim/frv/sti.cgs +91548ae1c6a13b8dcdc27ee53cf2c8cd sim/testsuite/sim/frv/ldsbi.cgs +fb8002b4e6861b77f536c7629c7bf622 sim/testsuite/sim/frv/stbu.cgs +9b3fe3689386f452b6a4efa05a509b8c sim/testsuite/sim/frv/umul.cgs +60319f32e98f86da38ff2c3c5212d862 sim/testsuite/sim/frv/fdsqrts.cgs +af01f45076997b2efc4cbed1bfbeb90f sim/testsuite/sim/frv/bplr.cgs +90c1d817bd4dce7d539e4e9dacb35e90 sim/testsuite/sim/frv/msrlhi.cgs 4dcd5dd9170ea1b0782fc5ec7bce6e58 sim/testsuite/sim/frv/tip.cgs -c3fbed74046a3c4d5d74af309a283001 sim/testsuite/sim/frv/cfcklt.cgs -d7a05e22c19ec54237285333c21ab720 sim/testsuite/sim/frv/csthf.cgs -3a29b1dd11046f8f4dd5c27edc2a8d6f sim/testsuite/sim/frv/stq.pcgs -0eaa5642821eed78cc9e2c144fe34a92 sim/testsuite/sim/frv/sethi.cgs -fe18fae6d95afe023a4f3c12ee809a7d sim/testsuite/sim/frv/ldsbu.cgs -ce9abd48c84d1abd4b05d248d4e9067e sim/testsuite/sim/frv/ldubi.cgs -122ad6f12a5ab84bec5262e1af02c9f1 sim/testsuite/sim/frv/commitga.cgs -8c0c31883700925b3a024a0ef3d6e4db sim/testsuite/sim/frv/subi.cgs -4a9afe4a49c80157e0738e27bd5f3a52 sim/testsuite/sim/frv/tlt.cgs -99c4ae4bd4eb760d9274117748672094 sim/testsuite/sim/frv/fbuglr.cgs -01a00c462bcea5bf16545bc7e56ab416 sim/testsuite/sim/frv/stqi.cgs +145a02c3e9ec1831696933a5f22aa31d sim/testsuite/sim/frv/fbnolr.cgs +f3f076fc173ea772baff44f55775ca03 sim/testsuite/sim/frv/ldubu.cgs +a761e98378b236d13867be6741e673bd sim/testsuite/sim/frv/fmsubs.cgs +a5c4254bb5fb67e6553d7b4245facb4d sim/testsuite/sim/frv/fckgt.cgs +b0a584edcb6525f7880b1f45497c9a2e sim/testsuite/sim/frv/ldqcu.cgs +a557f55cfe20662991a594673e5a877b sim/testsuite/sim/frv/cfckeq.cgs +571559015608fda8e86c36266d8aba4c sim/testsuite/sim/frv/cmsubhus.cgs +a1081abe7c71411a62d3f8467141fdbb sim/testsuite/sim/frv/fdadds.cgs +d94022526f601563a7d06cde8c8461d5 sim/testsuite/sim/frv/mcutssi.cgs 195ff710aa1e8652dc42e962e6e4d9ce sim/testsuite/sim/frv/mqlclrhs.cgs -f0900597e5ab5ecf6b5c7a7767e62980 sim/testsuite/sim/frv/nldqf.cgs -6829b406203cc09d6ac699fec2378bad sim/testsuite/sim/frv/ckge.cgs -e470390ff6d0df7541ce5455d765a606 sim/testsuite/sim/frv/lduhu.cgs -a49be0c11999c9c5fe7164a2d478236c sim/testsuite/sim/frv/beqlr.cgs -d3a8b5ed0ad285696200a176e326a55b sim/testsuite/sim/frv/sethilo.pcgs +985bedf1c0cc65d298ccc789ebc69179 sim/testsuite/sim/frv/mmrdhs.cgs +cc345f4d17b80808ee251d600fbbc6b9 sim/testsuite/sim/frv/ftlt.cgs +f6e8f7472bf3297a7b540ebaabc0c1f2 sim/testsuite/sim/frv/umuli.cgs +c75ed78a7566a8628cf0a0339c5dcf21 sim/testsuite/sim/frv/mdaddaccs.cgs +334619e30c816f5a6286de42eff58ebf sim/testsuite/sim/frv/fckule.cgs +e97d9af6760367447c6863fb5e7fb5b0 sim/testsuite/sim/frv/fbue.cgs +0852100fd0d41a5575a5d49b4b43537e sim/testsuite/sim/frv/tle.cgs +a58b7d334a64b2f17d8110d347c1fcbe sim/testsuite/sim/frv/tnc.cgs +91bdb77382d1406d5f98e2331c7a4ff5 sim/testsuite/sim/frv/cstdu.cgs +999bafc99f41d16b6bd3b925cf296de0 sim/testsuite/sim/frv/ccmp.cgs +606377e169feb767df3ada199efb6756 sim/testsuite/sim/frv/nlduh.cgs 27da4c018deec302d0e3d6b8c89c9909 sim/testsuite/sim/frv/stqf.cgs -23dbb5a7d7175564285ef8cbbafdf4d7 sim/testsuite/sim/frv/nldhfu.cgs -2974e1e8788d707888a2c3ff248a0d82 sim/testsuite/sim/frv/cckls.cgs -2ba0a93a9c8332f36a0800263efc0511 sim/testsuite/sim/frv/fcku.cgs -82fe9144d5b80fbfd5b4582ca5246df4 sim/testsuite/sim/frv/fmaddd.cgs -dae087e8f55a8ecbfe85b2476c9267e2 sim/testsuite/sim/frv/mcpli.cgs -d6e2c99d07b9c1a5fb5869dd9aecc1a4 sim/testsuite/sim/frv/cfsubs.cgs -fd10c5f2ffffd0583a7da981ddeca855 sim/testsuite/sim/frv/fckue.cgs -7a14b1a4b9c264ad6fe9fee43a34053c sim/testsuite/sim/frv/nldubu.cgs -67b49f46f325d357092e83a5af86ffe8 sim/testsuite/sim/frv/break.cgs -1d5380689e9dae36a5ab8b5436118c9e sim/testsuite/sim/frv/srai.cgs -8e6934cc5df77f17ded11b0e56344cc1 sim/testsuite/sim/frv/nlduhu.cgs -8335d3357e6e879a7501b1635ce4f821 sim/testsuite/sim/frv/fcklg.cgs -255041537a2ba5cddbc94a66463c52ab sim/testsuite/sim/frv/cfdivs.cgs -cbf21bfce7b3ce694a9a0ffbecdd5edf sim/testsuite/sim/frv/cldqu.cgs -c466ade998b308dc18869d2a2d2f3ae5 sim/testsuite/sim/frv/clddf.cgs -d18c2b792211080ccc434210ebb67ba9 sim/testsuite/sim/frv/csrlcc.cgs +b1b5fbe7e86fcaa6a8cb5246c1105383 sim/testsuite/sim/frv/ftuge.cgs +3a18c58e47703c059520340b1b1c3051 sim/testsuite/sim/frv/ldc.cgs +e7a1ad746f682025747fa48379b5db6f sim/testsuite/sim/frv/cckeq.cgs +20942fb6996945bf7ea82dc541af0991 sim/testsuite/sim/frv/lddc.cgs +50daedd569566b5f5fd6030c9c961735 sim/testsuite/sim/frv/cor.cgs +36d1b5e9f74e8641f51abe8a472c6860 sim/testsuite/sim/frv/nldf.cgs +2521bd2ee748d58fdae65f585b453033 sim/testsuite/sim/frv/commitfa.cgs +6b19d157804a7fa854e78b49a095a638 sim/testsuite/sim/frv/nudiv.cgs +9ba5b89fa11ddec7e98787ca73fa0115 sim/testsuite/sim/frv/ldsb.cgs +6829b406203cc09d6ac699fec2378bad sim/testsuite/sim/frv/ckge.cgs +b1cf84b60cf3a908c49512b100a3cf65 sim/testsuite/sim/frv/mqxmachs.cgs +7f6546bcb393b36f1e1a1f1552c53160 sim/testsuite/sim/frv/ldqi.cgs +01c147956ed40b80f7f01399bd71f33f sim/testsuite/sim/frv/cldfu.cgs +64a8de42436fc5c8f2d468e70c54e9aa sim/testsuite/sim/frv/fstoi.cgs +5f05aa8ededad20eccd884443cd8ee28 sim/testsuite/sim/frv/fbra.cgs +d68f7809049059eb9fdbdaef18d03edd sim/testsuite/sim/frv/cop1.cgs +891b8ae9013d787e9abf3f3980a93682 sim/testsuite/sim/frv/cmqmachu.cgs +ab9fb811cf16eb0998d83984e0cbc430 sim/testsuite/sim/frv/fdstoi.cgs +1f8696a6d62df0c7ee21c40e74d2af30 sim/testsuite/sim/frv/cckle.cgs +bc2783dc8045f8376c62a623d04bc452 sim/testsuite/sim/frv/fbge.cgs +34c1f1091b4c9bebc5fd6e10d045f570 sim/testsuite/sim/frv/bcplr.cgs +37f80752cbc102b0e3eebab206a7e851 sim/testsuite/sim/frv/bcvlr.cgs +c50d08df925d5ebe6235a744f5aa2838 sim/testsuite/sim/frv/fadds.cgs +bd1949fa6a0cbbd0faee3d33a7d2ed7b sim/testsuite/sim/frv/bclelr.cgs +7e182fb1f729214fcc4e500b45b28c67 sim/testsuite/sim/frv/nldq.cgs +2eb6969a0c7a4eb4fff85aac9727721a sim/testsuite/sim/frv/smulicc.cgs +c9e8808a1431699f65ca45e1d96ccb40 sim/testsuite/sim/frv/lduh.cgs +7b12d84395556d02cee66d9a1a5c991a sim/testsuite/sim/frv/fddivs.cgs +09a60ae22f077bfd3491cb02114dc22f sim/testsuite/sim/frv/fsqrts.cgs +8f0dbbf7ad0b329248d951a35e40a01b sim/testsuite/sim/frv/fsubd.cgs +887a01bed2d74acf834781ed7fa9f560 sim/testsuite/sim/frv/xoricc.cgs +358001b036e18ae3c266a2d8f245022e sim/testsuite/sim/frv/ldhfi.cgs +4ae9085c410dd43f5a03a680a8ef06f0 sim/testsuite/sim/frv/cfcmps.cgs +d2a4394753db3dfcbe7e384ee21e2202 sim/testsuite/sim/frv/movgs.cgs +ee34b84c6bf75a9babe137a04ac4b75a sim/testsuite/sim/frv/sllcc.cgs +e038da35c3e2553c4431a03fe542c5dc sim/testsuite/sim/frv/stbi.cgs +003fcd3e132470d58c6ceb7177806c5b sim/testsuite/sim/frv/ldi.cgs +031b21c3201bce5ff37ac1d2087209c8 sim/testsuite/sim/frv/cmhtob.cgs +702fcbc546ef09f48a9809774f8fec26 sim/testsuite/sim/frv/fckle.cgs +fcdd282d23082a3f4baf0861979ef5bb sim/testsuite/sim/frv/nldu.cgs +6ff863c8f3f5b0a6c8d4e2ba179e7b46 sim/testsuite/sim/frv/cudiv.cgs +eb2f7e79db41af0b45c8182f92563397 sim/testsuite/sim/frv/csrl.cgs +4aabea39aa800e2eab4188a00b9ba7b3 sim/testsuite/sim/frv/fbo.cgs bf8b42298ba9d65e9cbfb7f621ede0df sim/testsuite/sim/frv/mcpxiu.cgs +6e5cfae9c6ca85c94d69dd30861553e1 sim/testsuite/sim/frv/fcbeqlr.cgs +a7bdf9822718f81fe29124a9f8da86e6 sim/testsuite/sim/frv/tge.cgs +2faf06039d62d7df322e435075a72433 sim/testsuite/sim/frv/sub.cgs +5e9fe07f66519bb28e80b540c91d7270 sim/testsuite/sim/frv/stq.cgs +59af60628ef7e7f6c89aa5b2fa0c34c2 sim/testsuite/sim/frv/cldubu.cgs +c5163110cf891849bed86c0f453b8e02 sim/testsuite/sim/frv/fitod.cgs +31e7cd50ae42d84c7edbb16ec1824569 sim/testsuite/sim/frv/bnlr.cgs +102c16fad8d7c1990921e4b171f62531 sim/testsuite/sim/frv/rett.cgs +9868adbc8297b59031bb110c1104e524 sim/testsuite/sim/frv/bv.cgs +e3f8edcf3d2202102c308c006b574282 sim/testsuite/sim/frv/bclslr.cgs +da4a0f53d7d03d30ce9cca0bf34a2ece sim/testsuite/sim/frv/nudivi.cgs +2d2b7584e0bb578df1f9589e4e90bce6 sim/testsuite/sim/frv/cmcpxiu.cgs +a26faa5267491071d341abedcc58aa36 sim/testsuite/sim/frv/bnc.cgs +5df092435661dcba49b26ede1ae30c8d sim/testsuite/sim/frv/movsg.cgs +d8c97eebc3c3db0b2962b1d7181cc6c6 sim/testsuite/sim/frv/cfcko.cgs +d2ab686875a7fa6635f150cf02ff06f9 sim/testsuite/sim/frv/addx.cgs 052b5f3d0e3a1fca5894d9655353d7e3 sim/testsuite/sim/frv/mmachu.cgs -6d82b9a4957b0fefdf4b9bd93f868b12 sim/testsuite/sim/frv/jmpil.cgs -05e30ee19e5c52285f897986f1d22634 sim/testsuite/sim/frv/cst.cgs -5efca9c9c6f6785859bd2ed1ab619325 sim/testsuite/sim/frv/ckle.cgs -a1081abe7c71411a62d3f8467141fdbb sim/testsuite/sim/frv/fdadds.cgs -26f559df23ae04f9a1576f793e340163 sim/testsuite/sim/frv/mqmulhu.cgs -dc65593014b3881fdcff036075e5dad0 sim/testsuite/sim/frv/sll.cgs -94382ca860759734f699db2c4030a586 sim/testsuite/sim/frv/nldsbu.cgs -358001b036e18ae3c266a2d8f245022e sim/testsuite/sim/frv/ldhfi.cgs -288041bebf2361e4e1b14d5487134199 sim/testsuite/sim/frv/nldshu.cgs -b21df75a0fc0a38539d562c017b4b670 sim/testsuite/sim/frv/nlddfu.cgs -3da93d4f6c18f18193c0441a79758bcc sim/testsuite/sim/frv/ble.cgs -0bd2bac2e1c8b477c6ca6c96a9c0d2ec sim/testsuite/sim/frv/subxicc.cgs -04aeccbcf90bc8f88178560c2910dfc7 sim/testsuite/sim/frv/tgt.cgs -5f0be0ef1415763840683d1a66cf6b67 sim/testsuite/sim/frv/mwcut.cgs -e7a1ad746f682025747fa48379b5db6f sim/testsuite/sim/frv/cckeq.cgs -8ccbca9bbf069a03a4d929333916d88c sim/testsuite/sim/frv/sthu.cgs -119fa9c79d98e20cd89f8deea6e78dd1 sim/testsuite/sim/frv/fbuelr.cgs -bd0fbf9e7faa375603574f1a40665865 sim/testsuite/sim/frv/cmpb.cgs -7351ae1c949d0e80e4c9cac3adb238c0 sim/testsuite/sim/frv/mexpdhd.cgs +0286e694b02e66084d5fb2649c171379 sim/testsuite/sim/frv/mhsethis.cgs +d1b0b6638a07909bf45f65b454893510 sim/testsuite/sim/frv/fbullr.cgs +aed0b1242d7c5a0eada01cb581ef44ab sim/testsuite/sim/frv/fr550/masaccs.cgs +df6f7d84607830c79a2f338b8b6160f6 sim/testsuite/sim/frv/fr550/cmmachu.cgs +252cdd83e9dd8de140e437bcc84a45a6 sim/testsuite/sim/frv/fr550/mqaddhss.cgs +d20b77015f938e4bcf50ebffae74fc6b sim/testsuite/sim/frv/fr550/cmqaddhus.cgs +ffbb77202774953b6eb98f6329c3221c sim/testsuite/sim/frv/fr550/maddhus.cgs +7ccfed47ea8ad55515dab94b96d6babf sim/testsuite/sim/frv/fr550/mqmachs.cgs 57f7099366dbf0b511896d03b5343808 sim/testsuite/sim/frv/fr550/udiv.cgs +26acdfc92872c06ef0f3750cda5f6f75 sim/testsuite/sim/frv/fr550/msubhss.cgs +dea84ff288f50a75076a9c6df51682c6 sim/testsuite/sim/frv/fr550/cmqaddhss.cgs +b13883bf53e547a18365378a79b4ff9a sim/testsuite/sim/frv/fr550/cmqsubhus.cgs +55cd07e74cc057a786a2a9c43ed5d8dc sim/testsuite/sim/frv/fr550/udivi.cgs +e3ef857df51606a95b919b802bc62434 sim/testsuite/sim/frv/fr550/mqsubhus.cgs +cae62d22839ef1abf864fd44a1087197 sim/testsuite/sim/frv/fr550/cmsubhss.cgs +45902a95cfa0b6432a1cbb6db50830b6 sim/testsuite/sim/frv/fr550/mtrap.cgs +091a034f51a640f3113ea17c26e3b296 sim/testsuite/sim/frv/fr550/cmaddhss.cgs +f564e7d684efbe7a682ba9aa24cf39ab sim/testsuite/sim/frv/fr550/dcpl.cgs a73a09a1e4d5df6332355e6558054066 sim/testsuite/sim/frv/fr550/mqsubhss.cgs -f105b296560b5b75436069679f4d6dfd sim/testsuite/sim/frv/fr550/mmrdhs.cgs -d35335c0a9a7da8ef8224e724dc95c81 sim/testsuite/sim/frv/fr550/allinsn.exp -c28cd342558f4cc6ad9b33d7c80b45aa sim/testsuite/sim/frv/fr550/cmqmachu.cgs -ddaf6b5840f92b8d37a897bac56b86b0 sim/testsuite/sim/frv/fr550/cmaddhus.cgs -90677e8af5e1904d14d9bfd3e562fcbb sim/testsuite/sim/frv/fr550/msubhus.cgs -4938bf73cdf15f5d4a195ccc1bc1a426 sim/testsuite/sim/frv/fr550/mqaddhus.cgs -269e14aaffa3452b360e1f0ddb12df93 sim/testsuite/sim/frv/fr550/maddhss.cgs -594c6a9c3278bcc019e98aa44a86c22a sim/testsuite/sim/frv/fr550/mdaddaccs.cgs -60a0aa6675f9b1d37f0b6b58e04e6aba sim/testsuite/sim/frv/fr550/msubaccs.cgs -d6946f604c4c119692ac621e5cdf0a92 sim/testsuite/sim/frv/fr550/cmqmachs.cgs -7ccfed47ea8ad55515dab94b96d6babf sim/testsuite/sim/frv/fr550/mqmachs.cgs -ffbb77202774953b6eb98f6329c3221c sim/testsuite/sim/frv/fr550/maddhus.cgs +55c8d941be619469d2bf80f7eba5a3cf sim/testsuite/sim/frv/fr550/maddaccs.cgs cd733adfb1ef5d2f7d93d57183587d7a sim/testsuite/sim/frv/fr550/mabshs.cgs -aef3c4befd6509d86b1532ddbf3fb4a9 sim/testsuite/sim/frv/fr550/mqmachu.cgs -14183fbd685848d558ab84952c1271b1 sim/testsuite/sim/frv/fr550/mdsubaccs.cgs +9f27020e63e8992a63456f9092967d34 sim/testsuite/sim/frv/fr550/cmqsubhss.cgs +4938bf73cdf15f5d4a195ccc1bc1a426 sim/testsuite/sim/frv/fr550/mqaddhus.cgs +76e79dccff8084f4921e771c099fdbe0 sim/testsuite/sim/frv/fr550/mqmacxhs.cgs +0bfbdf1314d6a04afa36ce4404a81bf2 sim/testsuite/sim/frv/fr550/dcul.cgs 14be5a3d28703927ea3b168b6140855d sim/testsuite/sim/frv/fr550/cmmachs.cgs -26acdfc92872c06ef0f3750cda5f6f75 sim/testsuite/sim/frv/fr550/msubhss.cgs -dea84ff288f50a75076a9c6df51682c6 sim/testsuite/sim/frv/fr550/cmqaddhss.cgs -7c4ba31a4b54c5449d932fceeeb3aa1d sim/testsuite/sim/frv/fr550/mmachu.cgs +d35335c0a9a7da8ef8224e724dc95c81 sim/testsuite/sim/frv/fr550/allinsn.exp +1b1c3f8892f5ff1108650006f4f2318a sim/testsuite/sim/frv/fr550/cmsubhus.cgs +f105b296560b5b75436069679f4d6dfd sim/testsuite/sim/frv/fr550/mmrdhs.cgs +594c6a9c3278bcc019e98aa44a86c22a sim/testsuite/sim/frv/fr550/mdaddaccs.cgs f7992a1f5e0512afb72f4ea8abf785ed sim/testsuite/sim/frv/fr550/mqxmachs.cgs +c28cd342558f4cc6ad9b33d7c80b45aa sim/testsuite/sim/frv/fr550/cmqmachu.cgs c41c0de91e307c8506c8c5275940f7ea sim/testsuite/sim/frv/fr550/cmcpxiu.cgs -cae62d22839ef1abf864fd44a1087197 sim/testsuite/sim/frv/fr550/cmsubhss.cgs -85c318f9489df3a78af9171868d9e789 sim/testsuite/sim/frv/fr550/mmachs.cgs -0bfbdf1314d6a04afa36ce4404a81bf2 sim/testsuite/sim/frv/fr550/dcul.cgs -7cdef8608795f0ed222e67db1343a635 sim/testsuite/sim/frv/fr550/mdasaccs.cgs -aed0b1242d7c5a0eada01cb581ef44ab sim/testsuite/sim/frv/fr550/masaccs.cgs +7c4ba31a4b54c5449d932fceeeb3aa1d sim/testsuite/sim/frv/fr550/mmachu.cgs 1d35c09a8a300edc364a00ba655ca259 sim/testsuite/sim/frv/fr550/mqxmacxhs.cgs -1b1c3f8892f5ff1108650006f4f2318a sim/testsuite/sim/frv/fr550/cmsubhus.cgs -e3ef857df51606a95b919b802bc62434 sim/testsuite/sim/frv/fr550/mqsubhus.cgs -76e79dccff8084f4921e771c099fdbe0 sim/testsuite/sim/frv/fr550/mqmacxhs.cgs -f564e7d684efbe7a682ba9aa24cf39ab sim/testsuite/sim/frv/fr550/dcpl.cgs +269e14aaffa3452b360e1f0ddb12df93 sim/testsuite/sim/frv/fr550/maddhss.cgs +aef3c4befd6509d86b1532ddbf3fb4a9 sim/testsuite/sim/frv/fr550/mqmachu.cgs +d6946f604c4c119692ac621e5cdf0a92 sim/testsuite/sim/frv/fr550/cmqmachs.cgs 5ade21b6577e4102c74e56fd9ac67d5d sim/testsuite/sim/frv/fr550/mmrdhu.cgs +ddaf6b5840f92b8d37a897bac56b86b0 sim/testsuite/sim/frv/fr550/cmaddhus.cgs +60a0aa6675f9b1d37f0b6b58e04e6aba sim/testsuite/sim/frv/fr550/msubaccs.cgs +7cdef8608795f0ed222e67db1343a635 sim/testsuite/sim/frv/fr550/mdasaccs.cgs +90677e8af5e1904d14d9bfd3e562fcbb sim/testsuite/sim/frv/fr550/msubhus.cgs +14183fbd685848d558ab84952c1271b1 sim/testsuite/sim/frv/fr550/mdsubaccs.cgs 9b75556c75c9bfb61102e93aa0b85be4 sim/testsuite/sim/frv/fr550/cmcpxru.cgs -9f27020e63e8992a63456f9092967d34 sim/testsuite/sim/frv/fr550/cmqsubhss.cgs -b13883bf53e547a18365378a79b4ff9a sim/testsuite/sim/frv/fr550/cmqsubhus.cgs -df6f7d84607830c79a2f338b8b6160f6 sim/testsuite/sim/frv/fr550/cmmachu.cgs -55cd07e74cc057a786a2a9c43ed5d8dc sim/testsuite/sim/frv/fr550/udivi.cgs -252cdd83e9dd8de140e437bcc84a45a6 sim/testsuite/sim/frv/fr550/mqaddhss.cgs -55c8d941be619469d2bf80f7eba5a3cf sim/testsuite/sim/frv/fr550/maddaccs.cgs -d20b77015f938e4bcf50ebffae74fc6b sim/testsuite/sim/frv/fr550/cmqaddhus.cgs -091a034f51a640f3113ea17c26e3b296 sim/testsuite/sim/frv/fr550/cmaddhss.cgs -45902a95cfa0b6432a1cbb6db50830b6 sim/testsuite/sim/frv/fr550/mtrap.cgs -a9c95b2f342640586e4acb9faad49772 sim/testsuite/sim/frv/nfstoi.cgs -c9e8808a1431699f65ca45e1d96ccb40 sim/testsuite/sim/frv/lduh.cgs -91bdb77382d1406d5f98e2331c7a4ff5 sim/testsuite/sim/frv/cstdu.cgs -e038da35c3e2553c4431a03fe542c5dc sim/testsuite/sim/frv/stbi.cgs -e85d17ee566b10c9e3caeea7e430922e sim/testsuite/sim/frv/tinv.cgs -889eccff241ad187bd577cfe2fcc0ddc sim/testsuite/sim/frv/mhsetloh.cgs -ef17532bed029b8034a943091bcc8d3a sim/testsuite/sim/frv/stfu.cgs -8a77e7659d777d6c0d67e89e341cf17c sim/testsuite/sim/frv/bclr.cgs -36ccbee5f8a7659d1403b57bda54a1cf sim/testsuite/sim/frv/bralr.cgs -6b19d157804a7fa854e78b49a095a638 sim/testsuite/sim/frv/nudiv.cgs -96c1cae5bdbbfd68972a26ded76a6653 sim/testsuite/sim/frv/nfdmuls.cgs -b0a584edcb6525f7880b1f45497c9a2e sim/testsuite/sim/frv/ldqcu.cgs -d1b0b6638a07909bf45f65b454893510 sim/testsuite/sim/frv/fbullr.cgs -b1cf84b60cf3a908c49512b100a3cf65 sim/testsuite/sim/frv/mqxmachs.cgs -5aceef24e6a30dc790c1cd482bfa40f8 sim/testsuite/sim/frv/srlcc.cgs -da685784eb930e42a55444b9982c35f1 sim/testsuite/sim/frv/fbgt.cgs -4df2335c339344cb1ab773c28eac7047 sim/testsuite/sim/frv/mcmpsh.cgs -861233cc66075168ec7d72a804bbffae sim/testsuite/sim/frv/lrbranch.pcgs -0946412ade0a468bd29c482a88af3c60 sim/testsuite/sim/frv/addxcc.cgs -7f272aa06c9d1d01570e93ccfc3bed5d sim/testsuite/sim/frv/cldhf.cgs -77681bcd415a24cb17bbdf0f77eb260b sim/testsuite/sim/frv/umulcc.cgs -1faedf52637eb93c36507f38fd31fea3 sim/testsuite/sim/frv/branch.pcgs -2bb049f287b76c978273eaf5c312a4d1 sim/testsuite/sim/frv/nlddfi.cgs -7b549ad8f8a930a4e61411e41d6df7d0 sim/testsuite/sim/frv/fbugelr.cgs -3a18c58e47703c059520340b1b1c3051 sim/testsuite/sim/frv/ldc.cgs -9c00d18bfe2d4a8f3c5221ace6ce38bb sim/testsuite/sim/frv/fbulelr.cgs -da93993782224f234cfa217c4c2de3cb sim/testsuite/sim/frv/mcpxrs.cgs -51afec41d7406196f09ae12d2ec0db03 sim/testsuite/sim/frv/tino.cgs -dc5c412a280bacbbb5fd6a56a6fe53ff sim/testsuite/sim/frv/mqcpxrs.cgs -2d2b7584e0bb578df1f9589e4e90bce6 sim/testsuite/sim/frv/cmcpxiu.cgs -ddd0fdd0602cb85ada820445cf505820 sim/testsuite/sim/frv/mqcpxiu.cgs -a030edea39f27d8535b72eab791a946c sim/testsuite/sim/frv/cmsubhss.cgs -5df092435661dcba49b26ede1ae30c8d sim/testsuite/sim/frv/movsg.cgs -d79cc37be001047a062fd1b16bf5e34e sim/testsuite/sim/frv/mqmulhs.cgs -00c2e418966af14d3cc048573279d6fc sim/testsuite/sim/frv/mdrotli.cgs -3b5c5fa1e5977ed20ec3d4474eb79431 sim/testsuite/sim/frv/fmuls.cgs -2c42865e66cdf52327e926c6430af676 sim/testsuite/sim/frv/nlddu.cgs -4ae9085c410dd43f5a03a680a8ef06f0 sim/testsuite/sim/frv/cfcmps.cgs -0edd78565b6001f524f716ab9d2d96c0 sim/testsuite/sim/frv/xor.cgs -ca0a7cd8b619ec89e936a27126c5809d sim/testsuite/sim/frv/tin.cgs -0ee8af42152ab4d5632be0dba1c8345d sim/testsuite/sim/frv/fdsads.cgs -47f01f4c8f9a72792359daab3c1e9212 sim/testsuite/sim/frv/fmas.cgs -b12b404167348112b47f3650d80a49a1 sim/testsuite/sim/frv/nldhfi.cgs -702fcbc546ef09f48a9809774f8fec26 sim/testsuite/sim/frv/fckle.cgs +85c318f9489df3a78af9171868d9e789 sim/testsuite/sim/frv/fr550/mmachs.cgs 851005c4ef6143a0dc488d4a100b97f7 sim/testsuite/sim/frv/bn.cgs -a05d5c0d7e028af3383c1e9b237ef156 sim/testsuite/sim/frv/mrotri.cgs -f30642deec77165f2dec4409e06fb949 sim/testsuite/sim/frv/lddf.cgs -a1ff6a0459e013e3978913eca23570ca sim/testsuite/sim/frv/dcf.cgs +49bc7107d499c26ff0c4f28999dc36ed sim/testsuite/sim/frv/tinc.cgs d8c6afc2ab9d2f02351d88640635698f sim/testsuite/sim/frv/cnot.cgs -05a1ec4efd6909bce7ced2cff0a0d8c8 sim/testsuite/sim/frv/call.pcgs -ea152c37492f744e98208e25538591cc sim/testsuite/sim/frv/nandcr.cgs -2d6cd85e83c408920463b9e326312c1d sim/testsuite/sim/frv/nfdmadds.cgs -e77e2e2eb284cae56dede5c4e7b16bbe sim/testsuite/sim/frv/tls.cgs -8b11d75d92bff2f80d736079756072af sim/testsuite/sim/frv/cmxor.cgs -ddf4ff091a5b6c5cf352c04d236e2fcc sim/testsuite/sim/frv/stbfi.cgs -edb5aa56bcd8e8bca69cf259f36e465f sim/testsuite/sim/frv/mdunpackh.cgs -e326ecc782170966595a854ea64b2786 sim/testsuite/sim/frv/mmachs.cgs -f48f14696dde175e869c7c04abc8573b sim/testsuite/sim/frv/ftine.cgs -ad1fb24311a078779b253206335fb321 sim/testsuite/sim/frv/nldqfi.cgs -f3562f7c11ed638cffff5fb8afd74b8c sim/testsuite/sim/frv/ftio.cgs -36d2a277daae79b65a1fe73b38c101ba sim/testsuite/sim/frv/bcclr.cgs -27c8a87945ccd5906ecb831c022a2cae sim/testsuite/sim/frv/nldqu.cgs -1b5c559ac60b1eb35f51ca0e4bb70acf sim/testsuite/sim/frv/ldqc.cgs -09025c57960cb3245c45b229551573d1 sim/testsuite/sim/frv/fcko.cgs -4ced60215e6ef89c35488866f38fd3c0 sim/testsuite/sim/frv/mdpackh.cgs -a26faa5267491071d341abedcc58aa36 sim/testsuite/sim/frv/bnc.cgs -0dfa108dc10c10107281add62d6ca5ff sim/testsuite/sim/frv/fblglr.cgs -82952c2b9fbbc99ed421717e4ca1e9be sim/testsuite/sim/frv/cldbf.cgs -9b134f75e539c10de4195ec1e51ee136 sim/testsuite/sim/frv/msaths.cgs -cc345f4d17b80808ee251d600fbbc6b9 sim/testsuite/sim/frv/ftlt.cgs -da2ea0628931ee759747b3b1568f9e95 sim/testsuite/sim/frv/cckno.cgs -1506bd2f46dbdf8b5580412cc36cc631 sim/testsuite/sim/frv/bvlr.cgs -04f8995f9af5c9a6d61eb1ab60b34ba0 sim/testsuite/sim/frv/stdc.cgs -9ebd87890c8a7abc680822709889778c sim/testsuite/sim/frv/caddcc.cgs -32dde2fe5a74ba57fb63ca5a91948b13 sim/testsuite/sim/frv/membar.cgs -cf73edecc782c3ef0b7548f1acb34cd5 sim/testsuite/sim/frv/bar.cgs -c32d71a426bc21b198975069f0bc3503 sim/testsuite/sim/frv/ckgt.cgs -6839b4b27f67afcd7af9dcbeba8e54e6 sim/testsuite/sim/frv/lduhi.cgs -5e9fe07f66519bb28e80b540c91d7270 sim/testsuite/sim/frv/stq.cgs -4fa1060d3ea708c05623eaa8fa23a4fd sim/testsuite/sim/frv/cfmas.cgs -84cacbc7723416a4ab6bd038d71dac9b sim/testsuite/sim/frv/ldqfi.cgs -6e5cfae9c6ca85c94d69dd30861553e1 sim/testsuite/sim/frv/fcbeqlr.cgs -8a3789cf60dd4331ea1a6f6e994b76e8 sim/testsuite/sim/frv/sthf.cgs -bd306d227534038e358e212748f86d46 sim/testsuite/sim/frv/ckeq.cgs -147619970eca1511cbd9f636e8aaeeb7 sim/testsuite/sim/frv/nfsubs.cgs -cc2f98b9ebe473e853c879e903f2f4bd sim/testsuite/sim/frv/st.cgs -6326a374397a88a326f50a1c5bc7ffe2 sim/testsuite/sim/frv/tige.cgs -f428dd31a13e708566a12b6eb23e75aa sim/testsuite/sim/frv/mrotli.cgs -038ed75fefa3a9b991855a5b60b5046c sim/testsuite/sim/frv/stbf.cgs -4dcb6ae1f3af2a946fccc0349454555e sim/testsuite/sim/frv/interrupts/regalign.cgs -9dc2f73112811f25a5a15f53a6be64e2 sim/testsuite/sim/frv/interrupts/illinsn.cgs -3b7c9b823a6bdae97b790110baa1cd1b sim/testsuite/sim/frv/interrupts/data_store_error.cgs -a03ea7e55879465603afc8e54e656577 sim/testsuite/sim/frv/interrupts/reset.cgs -fad5307c32c5fd7792da21d6fa8034a4 sim/testsuite/sim/frv/interrupts/Ipipe-fr500.cgs -bb56d8cd61856a2eceb509be16a37354 sim/testsuite/sim/frv/interrupts/badalign.cgs -d78319cc00e420d2ea14a943bacb5b73 sim/testsuite/sim/frv/interrupts/privileged_instruction.cgs -d3bf79293e8377be411d124f213784e1 sim/testsuite/sim/frv/interrupts/mp_exception.cgs -fec5ed68fd41939cf49c52a4e9869561 sim/testsuite/sim/frv/interrupts/fp_exception-fr550.cgs -c6ab746acfbb43a0b62848e6626307be sim/testsuite/sim/frv/interrupts/Ipipe-fr400.cgs -e7920163cd59bc2dd0f5d977fc7566bd sim/testsuite/sim/frv/interrupts/compound.cgs -2a80a2eee2d47ba494278b13a0eae8e7 sim/testsuite/sim/frv/interrupts/data_store_error-fr550.cgs -1d3d97d97f5d70897bf41786ed0f81a2 sim/testsuite/sim/frv/interrupts/fp_exception.cgs -be93394d8610eb7a13b316901ad8a9b5 sim/testsuite/sim/frv/interrupts/insn_access_error-fr550.cgs -1442aef29a1429ad5b417d6e072f0bed sim/testsuite/sim/frv/interrupts/badalign-fr550.cgs -90377ce05b3a5bfdde34c7349008e3d3 sim/testsuite/sim/frv/interrupts/shadow_regs.cgs -bc6228cbbffde88aba638f1e9ef39ad5 sim/testsuite/sim/frv/interrupts/insn_access_error.cgs -026ab0d2d0845245adbc296619cc9d46 sim/testsuite/sim/frv/interrupts/timer.cgs -ba84baad2c0fbc0fb425f3042fa91e04 sim/testsuite/sim/frv/interrupts/compound-fr550.cgs -0772a396d1b99a6fc342b4f3d355d18c sim/testsuite/sim/frv/cmovgfd.cgs -117ef9aa94aacbff810bdc764cce2f12 sim/testsuite/sim/frv/lddu.cgs -ab9fb811cf16eb0998d83984e0cbc430 sim/testsuite/sim/frv/fdstoi.cgs -23522584d66a3f774c033e074adf7612 sim/testsuite/sim/frv/tc.cgs -a4e3dae18838ea83a10018cf243b37d9 sim/testsuite/sim/frv/lddfi.cgs -41eb8f2c4c39e3f8b7914f9a7910eac7 sim/testsuite/sim/frv/fditos.cgs -0202236564d839929bc185b5b363483b sim/testsuite/sim/frv/mcmpuh.cgs -cec99b8b35d4fdcdb377d9a66ea62009 sim/testsuite/sim/frv/nldbf.cgs -0d8bd8099d69931cea52745c2fd79b8b sim/testsuite/sim/frv/bgelr.cgs -787ba5a828f2060d5163f4dd6493bdfc sim/testsuite/sim/frv/mor.cgs -0fcf16c6304ddf56ba06882bf077c739 sim/testsuite/sim/frv/ldu.cgs -e6cce9c3b04ed7fd801dafb45bcdd866 sim/testsuite/sim/frv/cfsqrts.cgs -1f8696a6d62df0c7ee21c40e74d2af30 sim/testsuite/sim/frv/cckle.cgs -6e3d68aac7b3fc4b6ed2b5e4d847070b sim/testsuite/sim/frv/ldd.cgs -fb9380da5f21f1be28670b94115e7cb2 sim/testsuite/sim/frv/cmp.cgs -34c1f1091b4c9bebc5fd6e10d045f570 sim/testsuite/sim/frv/bcplr.cgs +f6656b60bec315c613ad5092d5bba892 sim/testsuite/sim/frv/nfdadds.cgs +cbf21bfce7b3ce694a9a0ffbecdd5edf sim/testsuite/sim/frv/cldqu.cgs +8b11d75d92bff2f80d736079756072af sim/testsuite/sim/frv/cmxor.cgs +b0d3f8840cbd815c5cf1fed7f60b95ac sim/testsuite/sim/frv/bcnvlr.cgs +8efb2a5d93915406532ba43d46c08545 sim/testsuite/sim/frv/cfmsubs.cgs +c606963198b1685341b32e14a3384700 sim/testsuite/sim/frv/csthfu.cgs +97562af5611f19959e068464c8b152c0 sim/testsuite/sim/frv/csmulcc.cgs +4df2335c339344cb1ab773c28eac7047 sim/testsuite/sim/frv/mcmpsh.cgs +48ee9ffc570edbbfe8169afd5f2bacee sim/testsuite/sim/frv/mqxmacxhs.cgs +73a5313d89e6d5975be48f3e2522c1a2 sim/testsuite/sim/frv/bcltlr.cgs +a0bc228cfda1d7113cd087bfc0298020 sim/testsuite/sim/frv/sdivi.cgs +6e0ed99106e53f1ae7c54bd6a15d2a7d sim/testsuite/sim/frv/bp.cgs +7174dbd57607dbdc45c4243fb7f02aa7 sim/testsuite/sim/frv/maddhss.cgs +05a1ec4efd6909bce7ced2cff0a0d8c8 sim/testsuite/sim/frv/call.pcgs +cf73edecc782c3ef0b7548f1acb34cd5 sim/testsuite/sim/frv/bar.cgs +1b5c559ac60b1eb35f51ca0e4bb70acf sim/testsuite/sim/frv/ldqc.cgs +699c2363b47a8ac1c7fdd3607503f872 sim/testsuite/sim/frv/cstbfu.cgs +5aceef24e6a30dc790c1cd482bfa40f8 sim/testsuite/sim/frv/srlcc.cgs +56f5fdf1970e4a477ff5bcd70ad6128d sim/testsuite/sim/frv/orcr.cgs +04f8995f9af5c9a6d61eb1ab60b34ba0 sim/testsuite/sim/frv/stdc.cgs +317e00e7d2fc4d994400b3435e38deba sim/testsuite/sim/frv/mqmachu.cgs +42cdb4f8bb24ee39032c4c32ca61b709 sim/testsuite/sim/frv/fdsubs.cgs +f60030141346c133b53f259287743291 sim/testsuite/sim/frv/ftiul.cgs +9b2b24b2080b3778404da0e73b2f4c45 sim/testsuite/sim/frv/icei.cgs +f72cfcf1db3b542e40ae4d24754a8648 sim/testsuite/sim/frv/nfddivs.cgs +b4bfdcbeb1d5db33d9166dc9f77da383 sim/testsuite/sim/frv/fdnegs.cgs +323956db2a566de88fcd530490661356 sim/testsuite/sim/frv/nldi.cgs +346e48b77e9a031f3f955ecefbd4019f sim/testsuite/sim/frv/fdmuls.cgs 8cfaaa6f7d9be0c7164bd6b95f781486 sim/testsuite/sim/frv/sdiv.cgs -26c749327e953defb5a5af911e83e615 sim/testsuite/sim/frv/fabss.cgs -0328850bbb204540e39224902cea7437 sim/testsuite/sim/frv/addcc.cgs -36d1b5e9f74e8641f51abe8a472c6860 sim/testsuite/sim/frv/nldf.cgs -26d92ac47d2a85071f1c0c26d721e2cc sim/testsuite/sim/frv/ldhfu.cgs +60dfef5c59d307cd1efd15c4403530ad sim/testsuite/sim/frv/cldsb.cgs +6326a374397a88a326f50a1c5bc7ffe2 sim/testsuite/sim/frv/tige.cgs +849a1c54f6b7fc29b1fea32e1adffb98 sim/testsuite/sim/frv/nld.cgs +fd10c5f2ffffd0583a7da981ddeca855 sim/testsuite/sim/frv/fckue.cgs +89a51e07a40a4e8f76ac296cacbb8363 sim/testsuite/sim/frv/smuli.cgs +4f261153dda57be2acd2d50974b2157a sim/testsuite/sim/frv/csub.cgs +90cebd7ff7dc2106afca60b9a5a26bed sim/testsuite/sim/frv/ldqu.cgs +0814d3851a44b4bce8357863eec8e600 sim/testsuite/sim/frv/smul.cgs +8aa6fce072b5f76aed92908d9cb37534 sim/testsuite/sim/frv/swap.cgs +36ccbee5f8a7659d1403b57bda54a1cf sim/testsuite/sim/frv/bralr.cgs 313bac7f8246cca4710202da37d93d37 sim/testsuite/sim/frv/bls.cgs -04132b96881a20ec0effc93a6a586ea9 sim/testsuite/sim/frv/xorcr.cgs -35c7aae3b090f125993fef390d76906f sim/testsuite/sim/frv/slli.cgs -01c147956ed40b80f7f01399bd71f33f sim/testsuite/sim/frv/cldfu.cgs -ffdac6d343d018ba34d4952027680104 sim/testsuite/sim/frv/cfabss.cgs -5034792548b761b0fe9ad80d44958b6e sim/testsuite/sim/frv/mdasaccs.cgs -46c386b55d7d762b12cf33a832c34e33 sim/testsuite/sim/frv/csth.cgs -6ea38598142f8f6d50283bafdaf0a0f7 sim/testsuite/sim/frv/fmad.cgs -798fee14d0226828590f274a847fb587 sim/testsuite/sim/frv/ftug.cgs -d59526db81b54d2c091ae65e844abba6 sim/testsuite/sim/frv/cswap.cgs +84cacbc7723416a4ab6bd038d71dac9b sim/testsuite/sim/frv/ldqfi.cgs +ef5f527028300499462fd5457798f5f2 sim/testsuite/sim/frv/fcblglr.cgs +654e92ca5c279eff83c44a07b5a4f8bd sim/testsuite/sim/frv/cfstoi.cgs +82d5838a4cbf516a93892bafbf64af95 sim/testsuite/sim/frv/mwtaccg.cgs e05358b9a392f47c2ab2ccebc1dff681 sim/testsuite/sim/frv/fckno.cgs -9f7ea5df90e576f10d78cdac9cc6ef50 sim/testsuite/sim/frv/commitfr.cgs -6b8470231d2eb04c58135b6a02fd63cb sim/testsuite/sim/frv/ckp.cgs -f6656b60bec315c613ad5092d5bba892 sim/testsuite/sim/frv/nfdadds.cgs -719ef7eb905c6a71373cba4137767d8a sim/testsuite/sim/frv/fcbugelr.cgs -258db7edbd93cc7f09cde29e3522194e sim/testsuite/sim/frv/cfmss.cgs -31598ac83baef878c73a4ac875783821 sim/testsuite/sim/frv/stqfi.cgs -8dda215c5c85e94e1a385d685127d850 sim/testsuite/sim/frv/fmuld.cgs -54abbae4f460a1ac2f0f979b48cff91f sim/testsuite/sim/frv/ret.cgs -8bcf588029874b3f33885374cc496306 sim/testsuite/sim/frv/sthfi.cgs -0553d530d16ef1a9889895d233bd1a23 sim/testsuite/sim/frv/fnegd.cgs -2faf06039d62d7df322e435075a72433 sim/testsuite/sim/frv/sub.cgs -821d3e5a5535a52948ced4d48cf4491d sim/testsuite/sim/frv/ftiug.cgs -b9ae3c5d73a84096df40cbc04f28abbe sim/testsuite/sim/frv/fmadds.cgs -e913757697385f676de531dc9055b78d sim/testsuite/sim/frv/ftilt.cgs -738a395cb2d18169d1b0c2027636cf1b sim/testsuite/sim/frv/xori.cgs -df584e46e6bbe3d1636c1fbaa73ca746 sim/testsuite/sim/frv/bgt.cgs -a1394d82fbbcdc7278c8ff7b0b749317 sim/testsuite/sim/frv/fsqrtd.cgs -8f07983738e8be6e8f294385e90a83f1 sim/testsuite/sim/frv/bnolr.cgs -b03ca91fbf4d98089e108f2fe411eecb sim/testsuite/sim/frv/bc.cgs -a0d99a5f1ae6d699d7551ec0c91ad1f9 sim/testsuite/sim/frv/scani.cgs -bb9428edb53dbe935f3f5d3295c296f6 sim/testsuite/sim/frv/cstu.cgs -e7c1a6655a0477c4a36ead53e726fb48 sim/testsuite/sim/frv/ldhf.cgs -29bcdb426188a5bb155dbee07ea1e527 sim/testsuite/sim/frv/cstbf.cgs -2311d8e2e1155bc0747ab69d1d80020c sim/testsuite/sim/frv/cldsbu.cgs -59498912961c5a2bfe37d5631fc3802c sim/testsuite/sim/frv/srli.cgs -20942fb6996945bf7ea82dc541af0991 sim/testsuite/sim/frv/lddc.cgs -e54bc9be577ed53f98a7256e02292a9f sim/testsuite/sim/frv/blelr.cgs -b0b3ba45dce79cce5d0db607ed12fbfe sim/testsuite/sim/frv/cckra.cgs -00bb5f98862bbebc770fac0fa658bf27 sim/testsuite/sim/frv/cldq.cgs -6aa3407819f0ab3db9441490901c1c20 sim/testsuite/sim/frv/parallel.exp -2d31dcb15e8a6877017dd3d148b0bf2b sim/testsuite/sim/frv/sra.cgs -4741f3d629b91d827c5d340249f452c5 sim/testsuite/sim/frv/lddcu.cgs -ce189b743a628565f7ae69ef124e050e sim/testsuite/sim/frv/fbolr.cgs -6a708919bfd6e9a6a3b0a1872c48290f sim/testsuite/sim/frv/movgfd.cgs -9bd25bbc9331a8a7a764970163f8a3c2 sim/testsuite/sim/frv/nandncr.cgs -9b2a570d81405ae96edd05841a00340c sim/testsuite/sim/frv/bchilr.cgs -6e9d7ee79258240c2e9f8490187d2d1b sim/testsuite/sim/frv/mhsethih.cgs -68b4157ad30443488a491d75a0ddc05f sim/testsuite/sim/frv/mwtacc.cgs -f8809a99276af73a606645ea3782eaa4 sim/testsuite/sim/frv/fcblelr.cgs +04aeccbcf90bc8f88178560c2910dfc7 sim/testsuite/sim/frv/tgt.cgs +204db103ce94f9da0c1f28ed0cd60ba0 sim/testsuite/sim/frv/srl.cgs +72215397d3a25089fcadc96d0449fa9d sim/testsuite/sim/frv/cmqmachs.cgs 124ee6149a335aca9a615e6e9e9521ff sim/testsuite/sim/frv/cfckra.cgs -2f2d7f51d4276d8bc6c7a559cf40358f sim/testsuite/sim/frv/ckls.cgs -9797e25ce9dc0b46d586cd0d92620735 sim/testsuite/sim/frv/umulicc.cgs -a761e98378b236d13867be6741e673bd sim/testsuite/sim/frv/fmsubs.cgs -9b3fe3689386f452b6a4efa05a509b8c sim/testsuite/sim/frv/umul.cgs -9afa238bffc2569cab1b6c55a3dc8719 sim/testsuite/sim/frv/fbeqlr.cgs -ca358dddc54a8ba43c916ac2a6b45812 sim/testsuite/sim/frv/stdc.pcgs -7e5adf4d17b96ce4a3b36beea51aadc6 sim/testsuite/sim/frv/bgtlr.cgs -5724440a0342cfb9923003f93f4e9c28 sim/testsuite/sim/frv/ckn.cgs -558c0693de0aa42e5ba756ef35228332 sim/testsuite/sim/frv/andcc.cgs -1147cc9e693e642971e9920b10936733 sim/testsuite/sim/frv/cldhfu.cgs -5530ac8f622c5b86676418a439d31062 sim/testsuite/sim/frv/mhdsets.cgs -509ea4a10500e161ed7a4c16dca03eed sim/testsuite/sim/frv/cmmulhu.cgs -48ee9ffc570edbbfe8169afd5f2bacee sim/testsuite/sim/frv/mqxmacxhs.cgs +ca0a7cd8b619ec89e936a27126c5809d sim/testsuite/sim/frv/tin.cgs +048a96dcaad276073b908e6c8f4d9189 sim/testsuite/sim/frv/cop2.cgs +d18c2b792211080ccc434210ebb67ba9 sim/testsuite/sim/frv/csrlcc.cgs +e9aafacc4f7c85928dd1c32c5c79fc5a sim/testsuite/sim/frv/bcnolr.cgs +2c42865e66cdf52327e926c6430af676 sim/testsuite/sim/frv/nlddu.cgs +0cfc1cccecd9264a187a4fde5a4e1b92 sim/testsuite/sim/frv/fto.cgs +46c386b55d7d762b12cf33a832c34e33 sim/testsuite/sim/frv/csth.cgs +190947262baf5a431a603a9057bd38a6 sim/testsuite/sim/frv/thi.cgs +6f5746330962303a04eb519a4b05fa23 sim/testsuite/sim/frv/fmovs.cgs +c006cffe51ad60e2d97bfe726e6efc27 sim/testsuite/sim/frv/cmbtohe.cgs +94f5c3abf0cf2118f97e0a95f79f9dd5 sim/testsuite/sim/frv/interrupts.exp +719ef7eb905c6a71373cba4137767d8a sim/testsuite/sim/frv/fcbugelr.cgs 42256da6637466abfe0f07b1103c7139 sim/testsuite/sim/frv/cfckne.cgs -d0ac23eed64316704af3b22028e3e476 sim/testsuite/sim/frv/cfckue.cgs -301a4bafaa39d4e1ab111b7fd38291e9 sim/testsuite/sim/frv/tine.cgs -c82aab8314691de50e4eb1b4d2deee7f sim/testsuite/sim/frv/norcr.cgs -204db103ce94f9da0c1f28ed0cd60ba0 sim/testsuite/sim/frv/srl.cgs -bd1949fa6a0cbbd0faee3d33a7d2ed7b sim/testsuite/sim/frv/bclelr.cgs -571559015608fda8e86c36266d8aba4c sim/testsuite/sim/frv/cmsubhus.cgs -a861d845633062758e032a27d5fab174 sim/testsuite/sim/frv/mhtob.cgs -480ed9fb8591ba5cba8c36bbf8fac25b sim/testsuite/sim/frv/bnv.cgs -5f883fbcb2224a26bc0e0d7eb91fd2de sim/testsuite/sim/frv/beq.cgs -a913dea5c58bfd33d54ec66ebe5abdf3 sim/testsuite/sim/frv/tieq.cgs -8efb2a5d93915406532ba43d46c08545 sim/testsuite/sim/frv/cfmsubs.cgs -c8282a4995f3299c881dda28d1a95fe6 sim/testsuite/sim/frv/swapi.cgs -747342519c94e5f3d6e4153d144a3774 sim/testsuite/sim/frv/ldqfu.cgs -ccb0533eb0f55d739ea829ea6061fd7e sim/testsuite/sim/frv/subxi.cgs -b4281f11b7f00e191f158b23a2115556 sim/testsuite/sim/frv/ldub.cgs -a7939f361fa8a4d7152833d17bf9242f sim/testsuite/sim/frv/csthu.cgs -90c1d817bd4dce7d539e4e9dacb35e90 sim/testsuite/sim/frv/msrlhi.cgs -de42c23dfd886e1e9150e93cfa7a0e30 sim/testsuite/sim/frv/nfmss.cgs -2b92477d71c35dbc5340bf6cf73436c4 sim/testsuite/sim/frv/cldub.cgs -e7569bf70d9017f69182cfa2622ebfbf sim/testsuite/sim/frv/stqcu.cgs -da1d1539bcb135ec8ce2fa2df168cd18 sim/testsuite/sim/frv/bnelr.cgs -7bff63bb7f11db3619daa65ba575eb4b sim/testsuite/sim/frv/ldsh.cgs -c8327289e084ae64868b9257b8646e11 sim/testsuite/sim/frv/stcu.cgs -36b77ec6afe8955468cfc59058d7e96a sim/testsuite/sim/frv/call.cgs -8f0dbbf7ad0b329248d951a35e40a01b sim/testsuite/sim/frv/fsubd.cgs -f394652f9ebf77a1d90b8a114793c2cb sim/testsuite/sim/frv/cmmulhs.cgs -ef5f527028300499462fd5457798f5f2 sim/testsuite/sim/frv/fcblglr.cgs -a7085119fedb3ac3d4e31403309293b1 sim/testsuite/sim/frv/fteq.cgs -24091903403ffb172b0b81cfbb3f331e sim/testsuite/sim/frv/add.pcgs -35285cc52bbb31d9b25d6144f54fa5b5 sim/testsuite/sim/frv/fr500/mqsubhss.cgs -bf7e8ae5fa9de937c99e7e09f42bbac5 sim/testsuite/sim/frv/fr500/allinsn.exp -99e08a053ed3e5abb1c4bf9c6a64fbc1 sim/testsuite/sim/frv/fr500/mclracc.cgs -b113a28c5f41f7ab598d39fab2d5e21f sim/testsuite/sim/frv/fr500/mqaddhus.cgs -9fdc5172e86b3be5621a6faf3f07db74 sim/testsuite/sim/frv/fr500/cmqaddhss.cgs -54a02614046bab2457214898aff37526 sim/testsuite/sim/frv/fr500/dcul.cgs -d5b43c22363018a3259eb6849019a024 sim/testsuite/sim/frv/fr500/mqsubhus.cgs -16004a850f6c18d31c7430fbab31f79d sim/testsuite/sim/frv/fr500/dcpl.cgs -76820a559b8411a4ae43b6a383d65b0d sim/testsuite/sim/frv/fr500/cmqsubhss.cgs -dc65c316119a5c8162d829bbd7c0223a sim/testsuite/sim/frv/fr500/cmqsubhus.cgs -fe34b6bddc9686a443e9025451c3ac88 sim/testsuite/sim/frv/fr500/mqaddhss.cgs -1de69657638007870281ce9da005db7f sim/testsuite/sim/frv/fr500/cmqaddhus.cgs -d1c296f375a94a01c76d3ab5d7e095e9 sim/testsuite/sim/frv/fblelr.cgs -0286e694b02e66084d5fb2649c171379 sim/testsuite/sim/frv/mhsethis.cgs -2377457fe2384816953905fda6c3d04b sim/testsuite/sim/frv/ckne.cgs -7f6546bcb393b36f1e1a1f1552c53160 sim/testsuite/sim/frv/ldqi.cgs -f5619a1966d02c7c8e4bd23503a40c49 sim/testsuite/sim/frv/fbu.cgs -6ff863c8f3f5b0a6c8d4e2ba179e7b46 sim/testsuite/sim/frv/cudiv.cgs -3cf41818d7d43998028a6204c6d3d1cc sim/testsuite/sim/frv/nldd.cgs -9a28ed90097013dbe6c10888f811edec sim/testsuite/sim/frv/cmqmulhu.cgs +b0fa5261302915fed6a0abb4165bdb3e sim/testsuite/sim/frv/cknc.cgs +bb74161afeebbd175cc9296446d7ff46 sim/testsuite/sim/frv/setlos.cgs +de1b6d1ff997e66d64111e7a69c3f749 sim/testsuite/sim/frv/mqcpxis.cgs +16483dc53cf562ff67a40716ddad4cee sim/testsuite/sim/frv/dci.cgs +352d41aa9b03ec2820009d90f569a60a sim/testsuite/sim/frv/mqsaths.cgs +e2bbc311eb90229f9eb63b3ea456aa51 sim/testsuite/sim/frv/ftira.cgs 50d1ce458d38dfa7f69fd4f3c0b08419 sim/testsuite/sim/frv/fdmulcs.cgs -37f80752cbc102b0e3eebab206a7e851 sim/testsuite/sim/frv/bcvlr.cgs -5761527de2c6413c3f8a07d2189ef92a sim/testsuite/sim/frv/fsubs.cgs -e322b79b6193bc8b98fdf7d2164e1242 sim/testsuite/sim/frv/cmcpxis.cgs -182d8d5e906c1fe63b1ec15953fbbf0a sim/testsuite/sim/frv/fbul.cgs -be7bc8f47af7ec401ae8edc5735ae83f sim/testsuite/sim/frv/mbtohe.cgs -c73e0f9186dae498050376d33b40c1c6 sim/testsuite/sim/frv/nfsqrts.cgs -ff1044b90e19b2451b0c3f0233ee3d70 sim/testsuite/sim/frv/fdmas.cgs -bf4cfe49b9af48954b1a4495db0bcb6f sim/testsuite/sim/frv/mqmacxhs.cgs -c0fa479773c62b0865cf7f6646562284 sim/testsuite/sim/frv/cstd.cgs -21e414ff661565b6aa03208928648853 sim/testsuite/sim/frv/nldub.cgs -1dbf3b1f587b8fde305387c2a6d7488c sim/testsuite/sim/frv/clddu.cgs -eb0c622a60c8bb2159d3a20ddaf72563 sim/testsuite/sim/frv/tn.cgs -1e471deced4a3635b4468bd2d1ff88cb sim/testsuite/sim/frv/mpackh.cgs -94f5c3abf0cf2118f97e0a95f79f9dd5 sim/testsuite/sim/frv/interrupts.exp -d8c97eebc3c3db0b2962b1d7181cc6c6 sim/testsuite/sim/frv/cfcko.cgs -7d76bf8128cc9482f2de7d01e2bde23a sim/testsuite/sim/frv/bra.cgs -9baf3938276561eaa3ae2cd20fcaef2b sim/testsuite/sim/frv/faddd.cgs -873badad1ba22ab85ceded1032e76d7a sim/testsuite/sim/frv/ldfu.cgs -cf37e0de21739109f45bc6903faef9ff sim/testsuite/sim/frv/mmrdhu.cgs -500ddf7a9ca8ca47e62e62cf4257a675 sim/testsuite/sim/frv/mhsetlos.cgs -a95c4bac5e72fe8a7d36b1b822acc3c6 sim/testsuite/sim/frv/fabsd.cgs -bc2783dc8045f8376c62a623d04bc452 sim/testsuite/sim/frv/fbge.cgs -1516ca30ed3dda235da364d46c38d2a1 sim/testsuite/sim/frv/ccknv.cgs -a58b7d334a64b2f17d8110d347c1fcbe sim/testsuite/sim/frv/tnc.cgs -43e07345873b79b52184a1785a5ce422 sim/testsuite/sim/frv/stdi.cgs -28f0887ee88db223fdd12b2024131872 sim/testsuite/sim/frv/icul.cgs -b61f258f8679789df4df0f96f085ed27 sim/testsuite/sim/frv/cldbfu.cgs -ed61ab14ca73c4d78de8d0e432820ff6 sim/testsuite/sim/frv/fcbralr.cgs -1f93a0d7fca1cd46156bd7a0c7f3c59f sim/testsuite/sim/frv/movgf.cgs -6e0ed99106e53f1ae7c54bd6a15d2a7d sim/testsuite/sim/frv/bp.cgs -aeccfedc8dc931ff8b70da7c99c2236a sim/testsuite/sim/frv/blt.cgs -0e6828ab5a28105f1606bfcea5961a53 sim/testsuite/sim/frv/csmul.cgs -47b041b440463afa7c2f9adc16bc48db sim/testsuite/sim/frv/ftne.cgs -7640dbf388ab7b7e4462b20d93ca0dca sim/testsuite/sim/frv/clrfa.cgs -3a258f66b006c6af176013d28706f114 sim/testsuite/sim/frv/clrgr.cgs -c2b0345fa9da69b5322eaf83e9506cab sim/testsuite/sim/frv/ftino.cgs -09a60ae22f077bfd3491cb02114dc22f sim/testsuite/sim/frv/fsqrts.cgs -8c68b4f09d376aac18a160f70bbb24c0 sim/testsuite/sim/frv/stfi.cgs -5702a40a3528f6faf8e82e13564087ac sim/testsuite/sim/frv/tp.cgs -887a01bed2d74acf834781ed7fa9f560 sim/testsuite/sim/frv/xoricc.cgs -97562af5611f19959e068464c8b152c0 sim/testsuite/sim/frv/csmulcc.cgs -506b3aaeb2f55f7313b18756c9ea8897 sim/testsuite/sim/frv/cfckug.cgs -8496d10703a6df931f2b4ea768c69356 sim/testsuite/sim/frv/ckhi.cgs -e92162146f80eacb87cc88e02de63d26 sim/testsuite/sim/frv/mqcpxru.cgs -2a371679272b85c51ff58344a6870ef8 sim/testsuite/sim/frv/cmcpxru.cgs -7f0e3223aefe0347e86016999b785689 sim/testsuite/sim/frv/ftra.cgs -2145d16c1548268652bcfdc0a032144b sim/testsuite/sim/frv/fbug.cgs -7068101bb16125bf823c54313efc9c88 sim/testsuite/sim/frv/fmss.cgs -4f069f49b6bc39f94f78adf156ce0f43 sim/testsuite/sim/frv/sthfu.cgs +a49be0c11999c9c5fe7164a2d478236c sim/testsuite/sim/frv/beqlr.cgs +9c00d18bfe2d4a8f3c5221ace6ce38bb sim/testsuite/sim/frv/fbulelr.cgs +47f01f4c8f9a72792359daab3c1e9212 sim/testsuite/sim/frv/fmas.cgs +31598ac83baef878c73a4ac875783821 sim/testsuite/sim/frv/stqfi.cgs +5393775815f48e4a5a811b3a06ff8503 sim/testsuite/sim/frv/ccklt.cgs +e85d17ee566b10c9e3caeea7e430922e sim/testsuite/sim/frv/tinv.cgs +c0b5d47d5b02cc1f2017b7642a70d544 sim/testsuite/sim/frv/cmexpdhw.cgs +520e9f58107f1a7407724d2b52bbe214 sim/testsuite/sim/frv/icpl.cgs e267cd40e466ef09766bb5af7f3ea525 sim/testsuite/sim/frv/movfg.cgs -eac5267f2219d176a231a4394b8a7dbe sim/testsuite/sim/frv/mcop2.cgs -ccbed047cb7e704f8caefbf30b21d58e sim/testsuite/sim/frv/cfckge.cgs -102c16fad8d7c1990921e4b171f62531 sim/testsuite/sim/frv/rett.cgs -45750ad0543745a1b21a7b795a774105 sim/testsuite/sim/frv/bcnelr.cgs -20f4895c822bcecaa711c3508043ced9 sim/testsuite/sim/frv/mmulhu.cgs +b21df75a0fc0a38539d562c017b4b670 sim/testsuite/sim/frv/nlddfu.cgs +7b12e32c5f9c78b47dec5eb157449ab8 sim/testsuite/sim/frv/fbralr.cgs +dcb10a82d61302543652fed0b13575b2 sim/testsuite/sim/frv/ldcu.cgs +cf37e0de21739109f45bc6903faef9ff sim/testsuite/sim/frv/mmrdhu.cgs +821d3e5a5535a52948ced4d48cf4491d sim/testsuite/sim/frv/ftiug.cgs +2ba0a93a9c8332f36a0800263efc0511 sim/testsuite/sim/frv/fcku.cgs +e6ac3d3a2b75c748d32f1dff04690c18 sim/testsuite/sim/frv/mmulxhu.cgs +f552807622d2ead6a4c3c72b6ab6ea1c sim/testsuite/sim/frv/cmaddhus.cgs +fe18fae6d95afe023a4f3c12ee809a7d sim/testsuite/sim/frv/ldsbu.cgs +a659a5c06a90b61548ad0d23636f740b sim/testsuite/sim/frv/ccknc.cgs +66f358e165d3d3c59afa716dc67d1788 sim/testsuite/sim/frv/fdivd.cgs +4cf840661cd9ed9ad76e658e996fc2fb sim/testsuite/sim/frv/lddi.cgs +74d71e1f6d2aa891e6e9cb32cd44e036 sim/testsuite/sim/frv/stf.cgs +7da5b6117008820095468c44c991bba7 sim/testsuite/sim/frv/stb.cgs +a01a5cb5837ff3029820691d608c0fe3 sim/testsuite/sim/frv/tira.cgs +218e7bf5cef1de12c72a7b41e0734233 sim/testsuite/sim/frv/cldshu.cgs +40115dcc72d0b6f1b5b4701a63e94c83 sim/testsuite/sim/frv/cckne.cgs +77681bcd415a24cb17bbdf0f77eb260b sim/testsuite/sim/frv/umulcc.cgs +b61f258f8679789df4df0f96f085ed27 sim/testsuite/sim/frv/cldbfu.cgs +694f1d17123f4bb9c03260c1fe669aac sim/testsuite/sim/frv/fdtoi.cgs +05e30ee19e5c52285f897986f1d22634 sim/testsuite/sim/frv/cst.cgs +bc2f5ebb5a8ed58952e9c92d80b5e5ea sim/testsuite/sim/frv/cstf.cgs +b9b610f3e0c8243a5d9e261844251ed7 sim/testsuite/sim/frv/stdf.cgs +fb9380da5f21f1be28670b94115e7cb2 sim/testsuite/sim/frv/cmp.cgs +da1d1539bcb135ec8ce2fa2df168cd18 sim/testsuite/sim/frv/bnelr.cgs +7461f81658de5eada83b19dbf47f1c28 sim/testsuite/sim/frv/fdcmps.cgs +ae737e209ef8a22261025cd8102d7861 sim/testsuite/sim/frv/nldfu.cgs +7eb6a791ed88c6c8794db6e2d7d1c4cd sim/testsuite/sim/frv/ftue.cgs +3b5c5fa1e5977ed20ec3d4474eb79431 sim/testsuite/sim/frv/fmuls.cgs +96c1cae5bdbbfd68972a26ded76a6653 sim/testsuite/sim/frv/nfdmuls.cgs +40aac5235a3696c45134d86e1e79c5d9 sim/testsuite/sim/frv/mcpxis.cgs 5331aae1c37403328b45cbda9aef7b4b sim/testsuite/sim/frv/jmpl.pcgs -d41729b132c64711d5d230c8be3b4332 sim/testsuite/sim/frv/sracc.cgs -60b73bc5cde0341f993a4d3fa218363f sim/testsuite/sim/frv/nfdsads.cgs -294f97c82070648f417c81cefbf0d68e sim/testsuite/sim/frv/cmovfgd.cgs -bb12ea3ce3769e468d058aeacea5e6d6 sim/testsuite/sim/frv/fblt.cgs -699c2363b47a8ac1c7fdd3607503f872 sim/testsuite/sim/frv/cstbfu.cgs -754cf046515e94f61db9e81c57bbef98 sim/testsuite/sim/frv/mxor.cgs -5c2413abe5cf30fb4cdd0d5e3c30dbab sim/testsuite/sim/frv/orcc.cgs -91fd679b72e10313567ecee40d839288 sim/testsuite/sim/frv/cldu.cgs -82d5838a4cbf516a93892bafbf64af95 sim/testsuite/sim/frv/mwtaccg.cgs -62fbafc1c264ff3ffa2f95d455138a29 sim/testsuite/sim/frv/nldbfu.cgs -bf2c13262ac9d57aa021ce80e4dbf5a0 sim/testsuite/sim/frv/fbnelr.cgs -5c41b0e945d708f91752456b93ca9c8d sim/testsuite/sim/frv/ckra.cgs -6eafdd537ba1f28305cee77fe68ff5fd sim/testsuite/sim/frv/setlo.cgs -15b4d16b3eae3485cb76eede88794bbe sim/testsuite/sim/frv/tile.cgs -32ab332e05431f49f037d528b657d8e5 sim/testsuite/sim/frv/fbgtlr.cgs -b38f99b4027aa8bc54b81cd44830ff0c sim/testsuite/sim/frv/ftule.cgs -b0fa5261302915fed6a0abb4165bdb3e sim/testsuite/sim/frv/cknc.cgs -769125b26bae4afc675b0f4ecba3476b sim/testsuite/sim/frv/nldsh.cgs -7ffb238a56ea272bda7a212d95f41684 sim/testsuite/sim/frv/teq.cgs -ad6bad34a15a4f2986566b50e2af52b8 sim/testsuite/sim/frv/bcgtlr.cgs -fe9af3628dda1a7e0478b27afcb4a903 sim/testsuite/sim/frv/cmnot.cgs -90d5802ce49387d77932ca25262923af sim/testsuite/sim/frv/fcbuelr.cgs -21793c07586326f7d5b7caeb20faf21b sim/testsuite/sim/frv/cckge.cgs +ca358dddc54a8ba43c916ac2a6b45812 sim/testsuite/sim/frv/stdc.pcgs +e3edb4635dd416fa50ea0e1628a69aea sim/testsuite/sim/frv/ckc.cgs +ef17532bed029b8034a943091bcc8d3a sim/testsuite/sim/frv/stfu.cgs +6aa3407819f0ab3db9441490901c1c20 sim/testsuite/sim/frv/parallel.exp +41eb8f2c4c39e3f8b7914f9a7910eac7 sim/testsuite/sim/frv/fditos.cgs +d7e3785dd9d822d3c98edf4a7ca1e462 sim/testsuite/sim/frv/mnot.cgs +4fa1060d3ea708c05623eaa8fa23a4fd sim/testsuite/sim/frv/cfmas.cgs +bc6228cbbffde88aba638f1e9ef39ad5 sim/testsuite/sim/frv/interrupts/insn_access_error.cgs +3b7c9b823a6bdae97b790110baa1cd1b sim/testsuite/sim/frv/interrupts/data_store_error.cgs +90377ce05b3a5bfdde34c7349008e3d3 sim/testsuite/sim/frv/interrupts/shadow_regs.cgs +ba84baad2c0fbc0fb425f3042fa91e04 sim/testsuite/sim/frv/interrupts/compound-fr550.cgs +bb56d8cd61856a2eceb509be16a37354 sim/testsuite/sim/frv/interrupts/badalign.cgs +4dcb6ae1f3af2a946fccc0349454555e sim/testsuite/sim/frv/interrupts/regalign.cgs +1442aef29a1429ad5b417d6e072f0bed sim/testsuite/sim/frv/interrupts/badalign-fr550.cgs +fad5307c32c5fd7792da21d6fa8034a4 sim/testsuite/sim/frv/interrupts/Ipipe-fr500.cgs +9dc2f73112811f25a5a15f53a6be64e2 sim/testsuite/sim/frv/interrupts/illinsn.cgs +e7920163cd59bc2dd0f5d977fc7566bd sim/testsuite/sim/frv/interrupts/compound.cgs +c6ab746acfbb43a0b62848e6626307be sim/testsuite/sim/frv/interrupts/Ipipe-fr400.cgs +a03ea7e55879465603afc8e54e656577 sim/testsuite/sim/frv/interrupts/reset.cgs +d3bf79293e8377be411d124f213784e1 sim/testsuite/sim/frv/interrupts/mp_exception.cgs +1d3d97d97f5d70897bf41786ed0f81a2 sim/testsuite/sim/frv/interrupts/fp_exception.cgs +026ab0d2d0845245adbc296619cc9d46 sim/testsuite/sim/frv/interrupts/timer.cgs +2a80a2eee2d47ba494278b13a0eae8e7 sim/testsuite/sim/frv/interrupts/data_store_error-fr550.cgs +fec5ed68fd41939cf49c52a4e9869561 sim/testsuite/sim/frv/interrupts/fp_exception-fr550.cgs +d78319cc00e420d2ea14a943bacb5b73 sim/testsuite/sim/frv/interrupts/privileged_instruction.cgs +be93394d8610eb7a13b316901ad8a9b5 sim/testsuite/sim/frv/interrupts/insn_access_error-fr550.cgs 4ee6d04ba074cd859443fa0bf726dc3f sim/testsuite/sim/frv/nldfi.cgs -4dd6b1d7898b43e9ec3d140c49342862 sim/testsuite/sim/frv/cstdf.cgs -346e48b77e9a031f3f955ecefbd4019f sim/testsuite/sim/frv/fdmuls.cgs -8a5f013616cf1e6db319200b9db548cd sim/testsuite/sim/frv/ftle.cgs -336b596245297750b95b8a77073f7966 sim/testsuite/sim/frv/tihi.cgs -3a686d8663268c0def363c90e28b1376 sim/testsuite/sim/frv/subicc.cgs -7aa4b56189a14f023e26984163cb0b4e sim/testsuite/sim/frv/ftiue.cgs -b5a71bd3c822c7000929441e7602c329 sim/testsuite/sim/frv/ftige.cgs -7da5b6117008820095468c44c991bba7 sim/testsuite/sim/frv/stb.cgs -334619e30c816f5a6286de42eff58ebf sim/testsuite/sim/frv/fckule.cgs -61d311d36b7dec576d8be1a6a047278d sim/testsuite/sim/frv/cckc.cgs -7b12d84395556d02cee66d9a1a5c991a sim/testsuite/sim/frv/fddivs.cgs -0852100fd0d41a5575a5d49b4b43537e sim/testsuite/sim/frv/tle.cgs -bff6dd1636bea003ff556d16f1e3f843 sim/testsuite/sim/frv/cfckno.cgs -4aa3a5fba828d2c29dff1b6f57d59678 sim/testsuite/sim/frv/fckra.cgs -04ebe641dcc2681cb7085e49e4b8787d sim/testsuite/sim/frv/ldshi.cgs -490b859435e3a616aa2c844b9dbed8d6 sim/testsuite/sim/frv/movgfq.cgs -6c696a162425d51ed1a198eadc9e8ec6 sim/testsuite/sim/frv/callil.cgs -b6c34d73b6a6bbc7b1547986526a8d60 sim/testsuite/sim/frv/fbule.cgs -d34e0187f000a733eaf4b2730118ae03 sim/testsuite/sim/frv/std.pcgs -4dbc3bfa2a0abb00d11e913ffe7dbfdf sim/testsuite/sim/frv/nldubi.cgs -8d77d790c0894ddb71a64a0a13e2e106 sim/testsuite/sim/frv/fdmadds.cgs -2e85d413681ca26660d8f9691a5c9ab2 sim/testsuite/sim/frv/mcut.cgs -6833a0f9a6a97eca6ec71259ea075028 sim/testsuite/sim/frv/cand.cgs -0b2e49d6ce9f4d51307d7a0c0884c357 sim/testsuite/sim/frv/cmpba.cgs -8692050bdf66cc6ad2d401c4a4684cef sim/testsuite/sim/frv/smulcc.cgs -b671fcc6ddd6daa079fd31a468749b0e sim/testsuite/sim/frv/movfgq.cgs -2caa34c2c4802ea92661e98ac6af667f sim/testsuite/sim/frv/maveh.cgs -5645677fd61cac055a6989382352af7e sim/testsuite/sim/frv/nfadds.cgs -91548ae1c6a13b8dcdc27ee53cf2c8cd sim/testsuite/sim/frv/ldsbi.cgs -bfc4a4f409782a01b12aafa73820d4a7 sim/testsuite/sim/frv/mhdseth.cgs -4659f8e9e4a139ab3d797621c23c6adf sim/testsuite/sim/frv/cstfu.cgs -76fcbc22cb7f93f51d833bd012609086 sim/testsuite/sim/frv/cldsh.cgs -12c4a175cb447af16dd27310f13fe496 sim/testsuite/sim/frv/cmmachu.cgs -e1e57ef45323b229f0811de476eadaa8 sim/testsuite/sim/frv/oricc.cgs -54b2d852374130520e29e72dc46923e0 sim/testsuite/sim/frv/cadd.cgs -89a846533bf6d66afa6dc6a610bee4de sim/testsuite/sim/frv/mbtoh.cgs -e82570b7a76dda7f7c8c4c4499b70113 sim/testsuite/sim/frv/fbeq.cgs -bb74161afeebbd175cc9296446d7ff46 sim/testsuite/sim/frv/setlos.cgs -bfa79960646e1c17eadb4100a422dd9d sim/testsuite/sim/frv/mqlmths.cgs -8cb511e7ba50142c3d082aaedf99e2d4 sim/testsuite/sim/frv/udivi.cgs -241fa1bef3f4eb4e60aebeaa3a5e5d8e sim/testsuite/sim/frv/cfmadds.cgs -894db98a371eaba135a686990f22f504 sim/testsuite/sim/frv/bhi.cgs -0e30127c5ef9ca2d27a6bf7790128b65 sim/testsuite/sim/frv/nfdivs.cgs -2e1fd77e3c7dc410824bb62d86c12fa5 sim/testsuite/sim/frv/mand.cgs -484f52adb8fc411974f97082db9d5dbc sim/testsuite/sim/frv/nlddf.cgs -326669d1c76ef080e2d2ddf8c2ee6e6f sim/testsuite/sim/frv/msathu.cgs -c458c9df8008e8b3f7761d31df5e912d sim/testsuite/sim/frv/sth.cgs -fea6bcd449bfa45bc4f7811913f3bc14 sim/testsuite/sim/frv/cstb.cgs +785f29fcfbdef6e93f772f32635daec4 sim/testsuite/sim/frv/cstdfu.cgs +c0d65d42e391ceb55e2d6eed4954f643 sim/testsuite/sim/frv/cfckuge.cgs +9a28ed90097013dbe6c10888f811edec sim/testsuite/sim/frv/cmqmulhu.cgs +93142a00f792c55ff26c67e4495c3ee8 sim/testsuite/sim/frv/bctrlr.cgs +26f559df23ae04f9a1576f793e340163 sim/testsuite/sim/frv/mqmulhu.cgs +0ee8af42152ab4d5632be0dba1c8345d sim/testsuite/sim/frv/fdsads.cgs c8dca0748024ed82b9c614ccd0579c61 sim/testsuite/sim/frv/fbuge.cgs +a1ff6a0459e013e3978913eca23570ca sim/testsuite/sim/frv/dcf.cgs +0eaa5642821eed78cc9e2c144fe34a92 sim/testsuite/sim/frv/sethi.cgs +082bcd35a3b7969bc5b37731b9db0243 sim/testsuite/sim/frv/fckne.cgs +a2266c24dffd8d4a696b3619a897269f sim/testsuite/sim/frv/fnop.cgs +b0ae2b6d72c1546e70b77d0f906ca816 sim/testsuite/sim/frv/cmand.cgs 877b1bf25d820494dfcd5c8e060ee0a5 sim/testsuite/sim/frv/not.cgs -6dd0a3407bccbe944de3004234e1ee11 sim/testsuite/sim/frv/cfcku.cgs -c0b5d47d5b02cc1f2017b7642a70d544 sim/testsuite/sim/frv/cmexpdhw.cgs -b1b5fbe7e86fcaa6a8cb5246c1105383 sim/testsuite/sim/frv/ftuge.cgs -5393775815f48e4a5a811b3a06ff8503 sim/testsuite/sim/frv/ccklt.cgs -d7e3785dd9d822d3c98edf4a7ca1e462 sim/testsuite/sim/frv/mnot.cgs -1951d6a3f5242b6e26d9fdb55b1bf1ca sim/testsuite/sim/frv/ftile.cgs -49bc7107d499c26ff0c4f28999dc36ed sim/testsuite/sim/frv/tinc.cgs -6c55773b2d52d6ed53ba61e9150a8c88 sim/testsuite/sim/frv/subxcc.cgs -62439f50d31a64a7d77bfe8d242d68c2 sim/testsuite/sim/frv/bcnclr.cgs -0c3aa7b3b5fd1c05678011c190e83144 sim/testsuite/sim/frv/cckv.cgs -371a4f289d0bc38fee546e49ad327952 sim/testsuite/sim/frv/or.cgs -b32fc8a8e6bba1b163e798c7a6b2998a sim/testsuite/sim/frv/bltlr.cgs -b69a810fc6f3f907c57797a5721333fd sim/testsuite/sim/frv/cfmovs.cgs -352d41aa9b03ec2820009d90f569a60a sim/testsuite/sim/frv/mqsaths.cgs -ae737e209ef8a22261025cd8102d7861 sim/testsuite/sim/frv/nldfu.cgs +5034792548b761b0fe9ad80d44958b6e sim/testsuite/sim/frv/mdasaccs.cgs +9baf3938276561eaa3ae2cd20fcaef2b sim/testsuite/sim/frv/faddd.cgs +fcf411b3b36ddc44d1d61f595d1730f3 sim/testsuite/sim/frv/fckge.cgs +c171d116ab1a2be2bd6fe89d40046466 sim/testsuite/sim/frv/msubhus.cgs +6d82b9a4957b0fefdf4b9bd93f868b12 sim/testsuite/sim/frv/jmpil.cgs +d6e2c99d07b9c1a5fb5869dd9aecc1a4 sim/testsuite/sim/frv/cfsubs.cgs 8c87a49e58f46e85f154cc3871f5aff6 sim/testsuite/sim/frv/ldqf.cgs -8b544d33708f95c5fe86075bfc046ba3 sim/testsuite/sim/frv/bne.cgs -c0d65d42e391ceb55e2d6eed4954f643 sim/testsuite/sim/frv/cfckuge.cgs -1d754b9b7c803178ecc07bed29a6226c sim/testsuite/sim/frv/norncr.cgs -2e537bc555c2ad4796ded84bfd87d976 sim/testsuite/sim/frv/fcbnelr.cgs -94b3e5d6bcfbca96e1d45b116852ee46 sim/testsuite/sim/frv/cstq.cgs -ed7de1b15d6c5535e9d56ff902749a49 sim/testsuite/sim/frv/cscan.cgs -654e92ca5c279eff83c44a07b5a4f8bd sim/testsuite/sim/frv/cfstoi.cgs -64efd173f19902d6a2005148cb3d4831 sim/testsuite/sim/frv/stc.cgs -7e08ead385d09b81452d7e494e24003b sim/testsuite/sim/frv/ftu.cgs -91e3dc0afab2fdfca7731c7e1f37e33f sim/testsuite/sim/frv/cckn.cgs -2426e56c573364d455e06cf511aa1c1f sim/testsuite/sim/frv/ldfi.cgs -6cc09cbce0f4709083b896f39eb8788b sim/testsuite/sim/frv/csll.cgs +5724440a0342cfb9923003f93f4e9c28 sim/testsuite/sim/frv/ckn.cgs +ad7585e6f6dbc249f1e67deba9847034 sim/testsuite/sim/frv/cckhi.cgs +2d31dcb15e8a6877017dd3d148b0bf2b sim/testsuite/sim/frv/sra.cgs +769125b26bae4afc675b0f4ecba3476b sim/testsuite/sim/frv/nldsh.cgs +5efca9c9c6f6785859bd2ed1ab619325 sim/testsuite/sim/frv/ckle.cgs +288041bebf2361e4e1b14d5487134199 sim/testsuite/sim/frv/nldshu.cgs +c2b0345fa9da69b5322eaf83e9506cab sim/testsuite/sim/frv/ftino.cgs +feeb130ecb5cf4428f8bccbe30eb476e sim/testsuite/sim/frv/fr400/smsss.cgs +4cc9052cb05275a67396e5ea46d54af6 sim/testsuite/sim/frv/fr400/masaccs.cgs +538622163aded8a4e8f1d47d61db8b5c sim/testsuite/sim/frv/fr400/mhsetloh.cgs +67c70214b5e434fb7bbd3519fe1ad576 sim/testsuite/sim/frv/fr400/smass.cgs +d8697f0e1b4ecfee90b75abe2f016aa5 sim/testsuite/sim/frv/fr400/smu.cgs +621cd869aa5b032b34294f31f3e4a702 sim/testsuite/sim/frv/fr400/udiv.cgs +4ac0a330e6fa287d0f2f2f8500453afc sim/testsuite/sim/frv/fr400/mclracc.cgs +5e1be1e0297eb84b961c6dc29d4cce8c sim/testsuite/sim/frv/fr400/mhdsets.cgs +417d0b67f6f7ff0d5e58e0178ef7836c sim/testsuite/sim/frv/fr400/scutss.cgs +146cea8d68ddb592d231ab14478a8d0b sim/testsuite/sim/frv/fr400/udivi.cgs +844d78bc2c7fd493b1e1407468de1927 sim/testsuite/sim/frv/fr400/slass.cgs +285f596d7467307f369b18d453abe1ea sim/testsuite/sim/frv/fr400/mhdseth.cgs +07bb80901aaaa29c4ef20dbef3debb70 sim/testsuite/sim/frv/fr400/csdiv.cgs +dc7862c2d91981e56cddc36314f0c630 sim/testsuite/sim/frv/fr400/maddaccs.cgs +2039d3b5260700c8371efd1a6ab21552 sim/testsuite/sim/frv/fr400/maveh.cgs +f158b414d72856611131bd4eb7db62ff sim/testsuite/sim/frv/fr400/addss.cgs +82bc6562aa51560206e828ae2202ca5f sim/testsuite/sim/frv/fr400/allinsn.exp +a1032b0fb6b6923000282a43d3f85a7a sim/testsuite/sim/frv/fr400/movgs.cgs +0f2cd9ab4e36a741a77488033a0ceeb0 sim/testsuite/sim/frv/fr400/movsg.cgs +dac84369f283aabc0e0c8d6188130e92 sim/testsuite/sim/frv/fr400/mhsethis.cgs +b90754c53de9e9744ee927d4993920fc sim/testsuite/sim/frv/fr400/sdivi.cgs +daad245fe005a9a6394bb569733c9aed sim/testsuite/sim/frv/fr400/sdiv.cgs +d23a9bd2315e8430ed038216b2e3e58d sim/testsuite/sim/frv/fr400/subss.cgs +e4644c48c06766cd34578d5ce34680dd sim/testsuite/sim/frv/fr400/msubaccs.cgs +9bb2a41f38271c359451454b6d2a79dc sim/testsuite/sim/frv/fr400/mhsethih.cgs +a808c8a95fde4532828d00e281c1322c sim/testsuite/sim/frv/fr400/mhsetlos.cgs +4fe0320394ce9fd521b0b903b37a44de sim/testsuite/sim/frv/bceqlr.cgs +55a7762fcf4065ee0e1e89c09894296b sim/testsuite/sim/frv/nop.cgs +15b4d16b3eae3485cb76eede88794bbe sim/testsuite/sim/frv/tile.cgs +7f272aa06c9d1d01570e93ccfc3bed5d sim/testsuite/sim/frv/cldhf.cgs +6e9d7ee79258240c2e9f8490187d2d1b sim/testsuite/sim/frv/mhsethih.cgs +480ed9fb8591ba5cba8c36bbf8fac25b sim/testsuite/sim/frv/bnv.cgs +0edd78565b6001f524f716ab9d2d96c0 sim/testsuite/sim/frv/xor.cgs +73a36ac7ddbc3eb5f02e23e556757534 sim/testsuite/sim/frv/mnop.cgs +d2ca7d2383745ede57de7cf3a71b250b sim/testsuite/sim/frv/bge.cgs +14194ebf318b1a64b5cbc27e067b5110 sim/testsuite/sim/frv/stdfu.cgs +4f069f49b6bc39f94f78adf156ce0f43 sim/testsuite/sim/frv/sthfu.cgs +2505dee1a39d2cde6c4c38408239b7c0 sim/testsuite/sim/frv/testutils.inc 86f2d4d2d5077458a84b7b7717ae2841 sim/testsuite/sim/frv/nldsb.cgs -d025a5adc03c1fa97688e776798e6508 sim/testsuite/sim/frv/fckug.cgs -60dfef5c59d307cd1efd15c4403530ad sim/testsuite/sim/frv/cldsb.cgs -16483dc53cf562ff67a40716ddad4cee sim/testsuite/sim/frv/dci.cgs -9d42de2773bcddcd37eafe1bf37aba97 sim/testsuite/sim/frv/cstbu.cgs -cc6399ec148be0f20332c2aeadef5990 sim/testsuite/sim/frv/mrdaccg.cgs -6c26a616dd6fed8bd7e159e371fe4fe4 sim/testsuite/sim/frv/fitos.cgs -eedecfb8fe25588cda9c858cec87c9e4 sim/testsuite/sim/frv/cld.cgs -323956db2a566de88fcd530490661356 sim/testsuite/sim/frv/nldi.cgs -ad9476d15f761b15a7243c9030efa135 sim/testsuite/sim/frv/cknv.cgs -6f5746330962303a04eb519a4b05fa23 sim/testsuite/sim/frv/fmovs.cgs -e4ece86a7c055e9d7e99ecec010c71ae sim/testsuite/sim/frv/ldq.cgs -6a19cdc6d3c89ca5145cd888160feea0 sim/testsuite/sim/frv/cmaddhss.cgs -d23dcfb1cdc685b13e28f46e60297128 sim/testsuite/sim/frv/cmor.cgs -e3edb4635dd416fa50ea0e1628a69aea sim/testsuite/sim/frv/ckc.cgs +ccf1387db46bf4985328d9b58f89085e sim/testsuite/sim/frv/nfdsqrts.cgs +bbe41f9762adbc1e38c19904af9a4622 sim/testsuite/sim/frv/mdsubaccs.cgs +500ddf7a9ca8ca47e62e62cf4257a675 sim/testsuite/sim/frv/mhsetlos.cgs +e045ac944c8eccc986873c525e9996fc sim/testsuite/sim/frv/dcef.cgs +87cef6e1007d13b030a257ac5991b6e0 sim/testsuite/sim/frv/subx.cgs +5e7cbd14acb0fd1a1bdc89e068e9803d sim/testsuite/sim/frv/msrahi.cgs +76fcbc22cb7f93f51d833bd012609086 sim/testsuite/sim/frv/cldsh.cgs +6c55773b2d52d6ed53ba61e9150a8c88 sim/testsuite/sim/frv/subxcc.cgs +df584e46e6bbe3d1636c1fbaa73ca746 sim/testsuite/sim/frv/bgt.cgs +7b549ad8f8a930a4e61411e41d6df7d0 sim/testsuite/sim/frv/fbugelr.cgs +68b4157ad30443488a491d75a0ddc05f sim/testsuite/sim/frv/mwtacc.cgs +01a00c462bcea5bf16545bc7e56ab416 sim/testsuite/sim/frv/stqi.cgs 285f247c378146a1e4a5a8134ab4c06f sim/testsuite/sim/frv/nldbfi.cgs -2fdea54dc1608b57111f0b1d657b3daa sim/testsuite/sim/frv/andi.cgs -794be640f3ea38845a7fb677c250fe48 sim/testsuite/sim/frv/ccalll.cgs -937c6181f24f15a85ce59e24a746f6da sim/testsuite/sim/frv/notcr.cgs -80d2065efb7d0769f11b1c4881e20500 sim/testsuite/sim/frv/munpackh.cgs -ad7585e6f6dbc249f1e67deba9847034 sim/testsuite/sim/frv/cckhi.cgs +ecca874070d3e9425aeb8088c8a60d30 sim/testsuite/sim/frv/tra.cgs +873badad1ba22ab85ceded1032e76d7a sim/testsuite/sim/frv/ldfu.cgs +5702a40a3528f6faf8e82e13564087ac sim/testsuite/sim/frv/tp.cgs +1d5380689e9dae36a5ab8b5436118c9e sim/testsuite/sim/frv/srai.cgs +ddd0fdd0602cb85ada820445cf505820 sim/testsuite/sim/frv/mqcpxiu.cgs +7e5adf4d17b96ce4a3b36beea51aadc6 sim/testsuite/sim/frv/bgtlr.cgs +5c7a02887eb56676fc4f267dff41f169 sim/testsuite/sim/frv/nfmadds.cgs +8916d2cace8900da8a1d671e9a0ea2b7 sim/testsuite/sim/frv/csra.cgs +c4fbea8332e5b07b3fd2e18f0fd4fd9f sim/testsuite/sim/frv/lddfu.cgs +2a371679272b85c51ff58344a6870ef8 sim/testsuite/sim/frv/cmcpxru.cgs +8496d10703a6df931f2b4ea768c69356 sim/testsuite/sim/frv/ckhi.cgs +9b134f75e539c10de4195ec1e51ee136 sim/testsuite/sim/frv/msaths.cgs +318cb22eb343ae2ba7c0a11ec86755f3 sim/testsuite/sim/frv/bcralr.cgs +75d93040b8b11cd80e200e83f9c3b423 sim/testsuite/sim/frv/nfdmss.cgs +6ea38598142f8f6d50283bafdaf0a0f7 sim/testsuite/sim/frv/fmad.cgs +be2f0506fae9889d33fdeadc7910e5e5 sim/testsuite/sim/frv/fcbnolr.cgs +1dbf3b1f587b8fde305387c2a6d7488c sim/testsuite/sim/frv/clddu.cgs +a9c95b2f342640586e4acb9faad49772 sim/testsuite/sim/frv/nfstoi.cgs +680e346877ec40599ab486d183890983 sim/testsuite/sim/frv/ftlg.cgs 08bb1af48f043b2ec22ede0e6a2a63c0 sim/testsuite/sim/frv/nfdstoi.cgs -bfc76c12370aafb393d878212832d3e3 sim/testsuite/sim/frv/cldd.cgs -33411cb293d5fc422c7990104604db74 sim/testsuite/sim/frv/fckul.cgs -9fc100ac9932ce7d023e9d73fe027dd7 sim/testsuite/sim/frv/orncr.cgs -c50d08df925d5ebe6235a744f5aa2838 sim/testsuite/sim/frv/fadds.cgs +45750ad0543745a1b21a7b795a774105 sim/testsuite/sim/frv/bcnelr.cgs +46a9440b74727f04cf647f1904d566fd sim/testsuite/sim/frv/csubcc.cgs +59addb4ff5949cfea9664343d9f81a38 sim/testsuite/sim/frv/srlicc.cgs +512f6ab69b17ee51ff97983b35376396 sim/testsuite/sim/frv/nldshi.cgs +0c3aa7b3b5fd1c05678011c190e83144 sim/testsuite/sim/frv/cckv.cgs +9564e9d1067be24d75f69103b57a85dc sim/testsuite/sim/frv/nfdmulcs.cgs +23dbb5a7d7175564285ef8cbbafdf4d7 sim/testsuite/sim/frv/nldhfu.cgs 791afd243b5e7ed1e6aa29ad1113f218 sim/testsuite/sim/frv/std.cgs -6f29112e0458cbb1fe8d3a0403ed85d7 sim/testsuite/sim/frv/mtrap.cgs -c006cffe51ad60e2d97bfe726e6efc27 sim/testsuite/sim/frv/cmbtohe.cgs -8be433c05488391e44e6d0fd1a0663a5 sim/testsuite/sim/frv/mexpdhw.cgs -c76e1c140c00dea2137868c13de73686 sim/testsuite/sim/frv/nfdsubs.cgs -a96d3d1ca3ffa9a8c975ff08bcf77a2d sim/testsuite/sim/frv/fcbuglr.cgs -e15b13b9790cd957ef7c1174a414fc91 sim/testsuite/sim/frv/mov.cgs -55a7762fcf4065ee0e1e89c09894296b sim/testsuite/sim/frv/nop.cgs -b9b610f3e0c8243a5d9e261844251ed7 sim/testsuite/sim/frv/stdf.cgs -ccde36a3a60f282ea7e7581d6ddbe200 sim/testsuite/sim/frv/cfmuls.cgs -250d78cd5a5807bcacccc649f4e5d0ad sim/testsuite/sim/frv/sti.cgs -ce558734ad2bc060917be3c4618d3552 sim/testsuite/sim/frv/tilt.cgs +8d77d790c0894ddb71a64a0a13e2e106 sim/testsuite/sim/frv/fdmadds.cgs +36b77ec6afe8955468cfc59058d7e96a sim/testsuite/sim/frv/call.cgs +e326ecc782170966595a854ea64b2786 sim/testsuite/sim/frv/mmachs.cgs +7e7ca53ba30cdcc99c94cd76e31edbfd sim/testsuite/sim/frv/cmqmulhs.cgs +da932dece8c1932a8e4b322ae96bb5d0 sim/testsuite/sim/frv/fcbltlr.cgs +371a4f289d0bc38fee546e49ad327952 sim/testsuite/sim/frv/or.cgs +8dda215c5c85e94e1a385d685127d850 sim/testsuite/sim/frv/fmuld.cgs +2fdea54dc1608b57111f0b1d657b3daa sim/testsuite/sim/frv/andi.cgs +4a13d5d2947c3543c94581ba88ec7fc4 sim/testsuite/sim/frv/andncr.cgs +1951d6a3f5242b6e26d9fdb55b1bf1ca sim/testsuite/sim/frv/ftile.cgs +5900af0d1f33281e6a8d166d3cabe74a sim/testsuite/sim/frv/calll.cgs +147619970eca1511cbd9f636e8aaeeb7 sim/testsuite/sim/frv/nfsubs.cgs +f77f7688f51f87c5e93a3e56bd0fbc96 sim/testsuite/sim/frv/ldbfu.cgs +c133078967d4e2c08e05c0c211483593 sim/testsuite/sim/frv/nfmsubs.cgs +02725ea588520413b03083318e76a5ba sim/testsuite/sim/mips/mdmx-ob.s +644244e2904ebf08a75b5b4807896a64 sim/testsuite/sim/mips/basic.exp +e0d825bc919d1cecf677c3a680ae289e sim/testsuite/sim/mips/fpu64-ps-sb1.s +38b28c4bc2a1948a9ca7ba32172f322c sim/testsuite/sim/mips/ChangeLog +6ddeae9c9f6c88c685b7fa379ceed8f2 sim/testsuite/sim/mips/utils-dsp.inc +3390a0dcf40d77780f335e03f8fbd4fa sim/testsuite/sim/mips/mips32-dsp2.s +3a7916908cb8e991fad9b4a81334b8d8 sim/testsuite/sim/mips/mips32-dsp.s +b19e0c53b685c87920887bc87dba4579 sim/testsuite/sim/mips/sanity.s +010a7642804f84eed2c5d95c2e113505 sim/testsuite/sim/mips/hilo-hazard-1.s +4aa93fc70fd147c69b409e8a8cb8e096 sim/testsuite/sim/mips/hilo-hazard-4.s +23824f277c77ae50de4132ab689dc997 sim/testsuite/sim/mips/fpu64-ps.s +47036e22c358ef07c9d036d5976c24d7 sim/testsuite/sim/mips/utils-fpu.inc +a7cc9277eb6ba36b256b2c80492d102d sim/testsuite/sim/mips/hilo-hazard-3.s +94570a8df308d6f6013d2dff22b6225f sim/testsuite/sim/mips/utils-mdmx.inc +4a5328391392623d88e0157152bf5cdc sim/testsuite/sim/mips/hilo-hazard-2.s +f535e37ff22fed8de46db57afce1f650 sim/testsuite/sim/mips/mdmx-ob-sb1.s +d422f90b7c427e549d18119c6ec01e19 sim/testsuite/sim/mips/testutils.inc +3fb07f1d95b1bad24c04ed35ac1a52ac sim/testsuite/sim/bfin/c_ldst_ld_d_p_pp_b.s +208b72a075a321f8e8667de5ee0387f8 sim/testsuite/sim/bfin/s0.s +e215c346df0fb80804d90cc3b19c6a11 sim/testsuite/sim/bfin/c_dsp32alu_rrpmmp.s +4f8f3f40e4aa4163557cd69834565021 sim/testsuite/sim/bfin/c_mmr_interr_ctl.s +ff5db67d71e9f21e9e800ba0afc291fd sim/testsuite/sim/bfin/c_progctrl_except_rtx.S +37023aee4c8367cdce427875d0eb85b8 sim/testsuite/sim/bfin/se_more_ret_haz.S +06fea8b22af2030a34ed35ec9e453209 sim/testsuite/sim/bfin/byteop16m.s +430f73322109f70643f0409106c40145 sim/testsuite/sim/bfin/move.s +fb40faee221d3a56d424f0508b51aaa0 sim/testsuite/sim/bfin/c_dsp32alu_rrppmm.s +725d2cea0a62b886976271d64de41f17 sim/testsuite/sim/bfin/c_dsp32shiftim_rot.s +97e5d29e86a168d09dddd1d8611890ff sim/testsuite/sim/bfin/c_interr_pending.S +83e9549c45a78a093180d8a1791a9ebc sim/testsuite/sim/bfin/a2.s +7df9ca737b91d05f1859283b846af842 sim/testsuite/sim/bfin/zcall.s +15d22beb1d4f5094df6a339068dfa94c sim/testsuite/sim/bfin/c_cc_flagdreg_mvbrsft_s1.s +335424886c563252c8fbacda7c416c8d sim/testsuite/sim/bfin/c_loopsetup_preg_div2_lc0.s +d34141e3c43f76a65719c4a3fab452de sim/testsuite/sim/bfin/max_min_flags.s +90f8ad210fc240758e6734d2e492c803 sim/testsuite/sim/bfin/random_0015.S +45f0921754e0a0ee0ac0e5589c1c926b sim/testsuite/sim/bfin/c_dsp32shift_af_s.s +ef799265fe588c7f3737dace1a1f31de sim/testsuite/sim/bfin/c_ldimmhalf_l_dr.s +3ce7a0eff604807b7fa94455af0771a8 sim/testsuite/sim/bfin/lmu_excpt_illaddr.S +27aeb2d0d0cc628b62f97d05cad6922f sim/testsuite/sim/bfin/issue123.s +2c14e7cc72eaaa089491cb43dc84075a sim/testsuite/sim/bfin/c_ldstiifp_ld_dreg.s +3c6fc8079791f466392bfe73f7cf04f4 sim/testsuite/sim/bfin/se_cc_kill.S +7bf89ae823ebe0defbfe9bd327c7a6c8 sim/testsuite/sim/bfin/c_compi2opp_pr_add_i7_p.s +39b679a3e9713cafc6bc502c8e6b1bd8 sim/testsuite/sim/bfin/s15.s +6abb979d21f0fe10b59dccd2e99253f6 sim/testsuite/sim/bfin/c_ldst_ld_d_p_xb.s +4b01c80e5b2cfdc9bbb02c357a74184e sim/testsuite/sim/bfin/random_0007.S +fe76fdee471453bf806efcee9c5c02f8 sim/testsuite/sim/bfin/c_dsp32shiftim_ahalf_rn_s.s +bdc8778220ae9030bc95677933be0985 sim/testsuite/sim/bfin/c_dsp32mac_pair_a1_m.s +62b0e9ce6191a2fda5ee48b36e399159 sim/testsuite/sim/bfin/m14.s +37161ffa2c8450cb524f2644095567e1 sim/testsuite/sim/bfin/c_loopsetup_preg_stld.s +b6d0b6f211bef5f69a744768da75a3a9 sim/testsuite/sim/bfin/s11.s +63cd27f1844a28caf13ecc40b5c79b76 sim/testsuite/sim/bfin/cec-snen-reti.S +8f6669d801bbb787752f99e7fe0045cb sim/testsuite/sim/bfin/c_ldst_st_p_d.s +012fc573c993e3a33fd7b88245fb0472 sim/testsuite/sim/bfin/c_loopsetup_topbotcntr.s +34ea43c33e3e477d696ac6f4cdf9ba00 sim/testsuite/sim/bfin/c_dsp32shift_ahalf_rp.s +3aa02ca344a6eb3f225b69e28ccab24b sim/testsuite/sim/bfin/c_logi2op_arith_shft.s +75457727294b7dd0694fe41b254f2f66 sim/testsuite/sim/bfin/stk5.s +e199694da43f67682e6eb282fe956b43 sim/testsuite/sim/bfin/issue142.s +d2c0b5f4198c62c57ba2d5f8bb80b220 sim/testsuite/sim/bfin/lmu_excpt_align.S +616889f64c1b2ca5cae92d9bdf68c188 sim/testsuite/sim/bfin/s17.s +4a2751b3064589ffee5e7983197979bd sim/testsuite/sim/bfin/d1.s +860668e810dea360992ffcb9599381f3 sim/testsuite/sim/bfin/neg-2.S +b73776791393b04c84fc4825f78885a4 sim/testsuite/sim/bfin/c_pushpopmultiple_preg.s +b3880da5b888f56c9a3eb7f19815974c sim/testsuite/sim/bfin/c_ldstii_ld_dr_h.s +de87d10b3a1423b38678c91fafa445d2 sim/testsuite/sim/bfin/c_dsp32shiftim_ahalf_rn.s +46b778b02f8d193963516da1040d4c92 sim/testsuite/sim/bfin/se_misaligned_fetch.S +9fdfb5b0bc43ecdd094679e94add9d44 sim/testsuite/sim/bfin/c_seq_ex2_mmrj_mvpop.S +cb91774a59feeebea4bb02b35e1d5719 sim/testsuite/sim/bfin/c_ldstii_ld_dreg.s +b1c2d494a90d1cbf2c22808abc6714f3 sim/testsuite/sim/bfin/c_ldst_ld_p_p_mm.s +48ad3dfdeec052bce2fc9578ddabce02 sim/testsuite/sim/bfin/c_dspldst_st_drlo_i.s +4f8a6f204dd652a7a1d47b4831982731 sim/testsuite/sim/bfin/c_ldstidxl_st_dr_h.s +f134410861e1c60f35137b4b1feda370 sim/testsuite/sim/bfin/msa_acp_5_10.s +686eef0bc113ed2f4811db3e57b9a261 sim/testsuite/sim/bfin/c_dsp32alu_rh_rnd12_m.s +abd41902e913228e180f2407a13c36d0 sim/testsuite/sim/bfin/lmu_excpt_prot1.S +638fab2f31db7cc4f22f1aba7b6f4c2e sim/testsuite/sim/bfin/c_seq_ex1_raise_j_mv_pop.S +8c3168756659fef7681448e4701a014b sim/testsuite/sim/bfin/c_dsp32mult_dr_iu.s +466ca66e6dbb6e90dcd48a1463bc7334 sim/testsuite/sim/bfin/issue83.s +ff5e8776979710247e6d4dc60ad22a93 sim/testsuite/sim/bfin/c_dsp32shift_ahalf_rn.s +9c232654bff3e6e311718b42b69b6f35 sim/testsuite/sim/bfin/c_ldst_ld_d_p_b.s +b7adbc71de765c9250f2ad39b9fbfe2a sim/testsuite/sim/bfin/c_seq_wb_raisecs_lsmmrj_mvp.S +c598b74a3e43e02cdaa3c0f0454bc488 sim/testsuite/sim/bfin/c_ldstii_ld_dr_xh.s +effb894269e483900b640d1e19dafaaa sim/testsuite/sim/bfin/c_progctrl_jump_pcpr.s +81b3ba095218dfad42fa906627155f38 sim/testsuite/sim/bfin/random_0033.S +3a4b3ff73b4c20920fe1343181cb7e72 sim/testsuite/sim/bfin/c_progctrl_nop.s +7fa9020e2c60a38bf342e7b130ae3a68 sim/testsuite/sim/bfin/c_dsp32alu_a0_pm_a1.s +41d8cb77e2c2c895ecf423652d3ab3ab sim/testsuite/sim/bfin/c_dsp32mac_dr_a0_is.s +f8a8d0c720a77e9104d4f39e33ceefe0 sim/testsuite/sim/bfin/c_dagmodik_lnz_imgebl.s +695661d1ee0948c7bc574e94c29782af sim/testsuite/sim/bfin/lp0.s +8def403350e9e29d9b35e166272caa3c sim/testsuite/sim/bfin/c_dsp32shift_lhalf_rn.s +6f34eb7fb0f64a932c8a2ba6dfea2e24 sim/testsuite/sim/bfin/c_ptr2op_pr_sft_2_1.s +63b01f2dacdc587160e4fe49ede0ecef sim/testsuite/sim/bfin/c_comp3op_dr_or_dr.s +f08633e18b577594713162f92f5ce388 sim/testsuite/sim/bfin/mult.s +0ff0fe409db92c8d0badf61397879b18 sim/testsuite/sim/bfin/s5.s +d18090bc223248e21463ae5e53c68e4c sim/testsuite/sim/bfin/c_ldstidxl_ld_dr_b.s +58254c522cb851429d92d1aa925f7d09 sim/testsuite/sim/bfin/c_loopsetup_preg_div2_lc1.s +5800fe4095a155e55966cf64e5533eb1 sim/testsuite/sim/bfin/c_loopsetup_nested_prelc.s +4185482fdc6f9496fdf7b2dde3e4a42c sim/testsuite/sim/bfin/ChangeLog +8a888d28e26316bfc8c1ba2af85ee252 sim/testsuite/sim/bfin/c_cc2stat_cc_aq.s +b614d86ddf22a03c4633555ad3009fd1 sim/testsuite/sim/bfin/issue125.s +0ef78e2dc1aae6e66ae0d075805625c9 sim/testsuite/sim/bfin/c_cc_flagdreg_mvbrsft.s +dfd2465416f06504f716df3fb82de552 sim/testsuite/sim/bfin/c_dsp32shiftim_lf.s +86275529be3ea8284b411b5fdaf1ed7e sim/testsuite/sim/bfin/se_loop_lr.S +1a537e86920e7c20e7b7361e136656e3 sim/testsuite/sim/bfin/c_dsp32alu_search.s +13bd3576f0d5028e00fdec6c2b0da000 sim/testsuite/sim/bfin/c_seq_wb_cs_lsmmrj_mvp.S +8953c9b3a4a3a73b5e088672ce8deb2c sim/testsuite/sim/bfin/c_logi2op_log_r_shft_astat.S +1d9eab417c0f2bfaa83e6dfc7c386bf9 sim/testsuite/sim/bfin/se_undefinedinstruction3.S +803509c8c316b6803434416a4387b8c3 sim/testsuite/sim/bfin/random_0027.S +0bb0a422e58ba903e7d2f7af6f49160e sim/testsuite/sim/bfin/math.s +1b1e4305f5fcfec6e9467953dbcbd1b3 sim/testsuite/sim/bfin/issue144.s +af0ce969a54b27c9fbe478fd50b0069a sim/testsuite/sim/bfin/c_seq_ex3_ls_mmr_mvp.S +b8ef7aad562d0134b45e588af59f7e11 sim/testsuite/sim/bfin/c_seq_ex1_j_mv_pop.S +4b8146ec5b307272f328815952257457 sim/testsuite/sim/bfin/c_dsp32shift_signbits_rl.s +7009963e29a84ae3a3e971baafa44fd4 sim/testsuite/sim/bfin/random_0018.S +781cd11c4737f6a54e2591e63b548cdb sim/testsuite/sim/bfin/c_brcc_brf_bp.s +c71befedf800a18c8b5bd7a9dabe81f6 sim/testsuite/sim/bfin/c_dsp32alu_absabs.s +c61cfb3f1fc3a109fe24302831df3637 sim/testsuite/sim/bfin/c_ldimmhalf_pibml.s +6018cbf6675fed446310ac4aa8e55076 sim/testsuite/sim/bfin/dbg_brprd_ntkn_src_kill.S +9febdf1b81f79e26ff69db6936429036 sim/testsuite/sim/bfin/stk.s +2ba0fc05c52cf5c16ee0c7724c22ec2f sim/testsuite/sim/bfin/c_compi2opp_pr_eq_i7_p.s +01a0918b3f3ddcadb276b07fdaa298dd sim/testsuite/sim/bfin/mdma-8bit-1d.c +19bb32ddcf86c61587796617aa545849 sim/testsuite/sim/bfin/loop_snafu.s +c824eaf9f3639660c73fa993d2e49e0c sim/testsuite/sim/bfin/c_brcc_brt_bp.s +b3a16ab3a2c0798f1dfeec4518932a10 sim/testsuite/sim/bfin/c_dsp32alu_rh_rnd20_m.s +e693001740ca6011d3c49bae41e4c495 sim/testsuite/sim/bfin/c_dsp32shift_ahh_s.s +ccda738b09f4f5b7b5ed88ec1a023353 sim/testsuite/sim/bfin/se_undefinedinstruction1.S +f2adb264926e39f3dd2d3e94c2bd4597 sim/testsuite/sim/bfin/m0boundary.s +a201145004b398d7f2ba15d27e9150db sim/testsuite/sim/bfin/l2_loop.s +0676d3413cfefad2f00ffea64028f0d5 sim/testsuite/sim/bfin/c_dsp32shift_expadj_l.s +a89adb3c889ce408733c0e1331c3e307 sim/testsuite/sim/bfin/ashift_left.s +b7c5440603cc7cc1e152a0d3c314df39 sim/testsuite/sim/bfin/c_dsp32shift_pack.s +4fde3f094d4fe1a188d119940560cf10 sim/testsuite/sim/bfin/acp5_4.s +7d7de3315c2b01fd2a8d24d8b9548c69 sim/testsuite/sim/bfin/se_loop_kill_dcr.S +680c67b3548dff22963d6f6c2fcf5102 sim/testsuite/sim/bfin/l0shift.s +2693f1cf71e62b52b27706f6c9599fbb sim/testsuite/sim/bfin/stk4.s +a5eb7e3d534fb050dc64b923525fa227 sim/testsuite/sim/bfin/cir1.s +079198710777c3cc2cc618d9d1160078 sim/testsuite/sim/bfin/c_cc_regmvlogi_mvbrsft.s +9f8c1db3365dd2361fdd698c313a584d sim/testsuite/sim/bfin/s21.s +821fa1383e068cb6f04e12bc0711ecc8 sim/testsuite/sim/bfin/c_ldstidxl_ld_dr_xh.s +18a3b8e547c64dbe66c1d7908df98f08 sim/testsuite/sim/bfin/c_dsp32mult_dr_u.s +09b019c3402a7ed10605ee86b09888c2 sim/testsuite/sim/bfin/c_brcc_bp3.s +4b46b111ae7002639909488f957ef2c0 sim/testsuite/sim/bfin/.gitignore +cbf0f936bdc235e62125570b35903219 sim/testsuite/sim/bfin/test-dma.h +b40be96b704ea54f53c2e4d5160519a6 sim/testsuite/sim/bfin/c_regmv_dr_imlb.s +2fcaff5c3378e3b1ca3302c8f98ce72c sim/testsuite/sim/bfin/c_ldimmhalf_l_ibml.s +535e3778745d40512402e0689693cc46 sim/testsuite/sim/bfin/c_cc_flag_ccmv_depend.S +d02a22626f5c3398d4ace6cd63548443 sim/testsuite/sim/bfin/c_ccmv_cc_pr_pr.s +e08d72dc62d60e2c7fe9ce2cd0d9439b sim/testsuite/sim/bfin/c_dsp32mac_dr_a1_s.s +0f2b4133feb80539da731f1ff18154aa sim/testsuite/sim/bfin/se_usermode_protviol.S +9622c83522202d0c177d7b2866cc51e7 sim/testsuite/sim/bfin/issue139.S +2972a2bced1d8ea97eff90bd0b44b523 sim/testsuite/sim/bfin/random_0029.S +3f4525667bb9d582cd858325c6a5e5e2 sim/testsuite/sim/bfin/vec-neg.S +0b0eaaaf606184d86057a112c6fc7c9c sim/testsuite/sim/bfin/a10.s +ff1441f10998e8fa6d051c5a45b2f4a3 sim/testsuite/sim/bfin/c_dsp32mac_pair_a1.s +22dbc2fcb1b2a65fb9751dbe04cf64cc sim/testsuite/sim/bfin/c_ccflag_pr_imm3_uu.s +ae3f3c5b07428adbffa5ffb814f9f23f sim/testsuite/sim/bfin/dsp_a4.s +58b18aebbf082feea045664c382460e7 sim/testsuite/sim/bfin/c_compi2opd_dr_add_i7_n.s +0666f12c82388a805c28ba9679c470ae sim/testsuite/sim/bfin/c_cc_regmvlogi_mvbrsft_sn.S +8c059a1d3211227851045baa0e6eaff5 sim/testsuite/sim/bfin/c_dspldst_ld_dr_ippm.s +28d97c964ff6071dcca06cb394faca82 sim/testsuite/sim/bfin/c_alu2op_conv_xh.s +3bfef672ab000548fc9e9ca989ab394e sim/testsuite/sim/bfin/c_interr_nested.S +5503cc42351d439828f47aacfca4a3ba sim/testsuite/sim/bfin/dotproduct2.s +35c2893e1734d5f9639e7f89af33b92f sim/testsuite/sim/bfin/se_loop_disable.S +4dc84b9ef6ab0ec745b5759998154fff sim/testsuite/sim/bfin/c_dagmodim_lnz_imgebl.s +e3a5af81976ec273432578d8caf8fbcd sim/testsuite/sim/bfin/issue257.s +dc337944dddd47d2cb8b4af548253c6d sim/testsuite/sim/bfin/c_interr_timer_tscale.S +3150b840387dee73160fec0c13462d5f sim/testsuite/sim/bfin/a3.s +83b6eec752b17f5610e469837240fa08 sim/testsuite/sim/bfin/cir.s +0b77a6119cecce1e38bc3c8666dfd6fd sim/testsuite/sim/bfin/c_compi2opd_flags.S +b93a919db2b04c1e0d9e925b7fe59142 sim/testsuite/sim/bfin/se_all16bitopcodes.S +cefc6d53981b8baf001253414d81429f sim/testsuite/sim/bfin/c_dsp32mac_pair_a0_is.s +0d5f069409350d392a1443bde0d3c2ba sim/testsuite/sim/bfin/c_regmv_imlb_imlb.s +350d1676b23584932aceaf29210ae3a6 sim/testsuite/sim/bfin/dbg_tr_simplejp.S +318af4bbc5c475f84551d104d91bb7ea sim/testsuite/sim/bfin/c_regmv_imlb_dr.s +3069ac597b0958fb2982e898eb77b18d sim/testsuite/sim/bfin/issue175.s +22da71a766523dbdca3a44380d538537 sim/testsuite/sim/bfin/c_cc2stat_cc_az.s +56aaa9fde8d192903ffc383d23e838d6 sim/testsuite/sim/bfin/c_logi2op_log_r_shft.s +1f86433991dbc84eae62aded277ae674 sim/testsuite/sim/bfin/c_dsp32mac_dr_a1_ih.s +4515825db056b9c6481c8547b8f292a6 sim/testsuite/sim/bfin/a23.s +84673e70c29a76ffd74b8532d0c24afd sim/testsuite/sim/bfin/se_bug_ui.S +bbae134a19fb73ec195b74b310b01617 sim/testsuite/sim/bfin/se_kill_wbbr.S +807f10cb013d7eaf8173eee2de2e5dcf sim/testsuite/sim/bfin/10742.s +e1e4d434780ffcc96f942373c1450cf6 sim/testsuite/sim/bfin/c_mmr_timer.S +dffa7f7ecfaa5b53a2d90571e7a8644c sim/testsuite/sim/bfin/c_dsp32shift_ahalf_rn_s.s +b610164f6f181911fc4c09870ced8eef sim/testsuite/sim/bfin/c_dsp32alu_mix.s +0e342873545172acddca6eb2126bd398 sim/testsuite/sim/bfin/c_regmv_pr_dr.s +95674bff475f3a7d70e51e2b045aea0c sim/testsuite/sim/bfin/c_dsp32shift_expadj_r.s +48802aa20584af92c236d9959d09cb5d sim/testsuite/sim/bfin/c_dsp32mac_pair_a0_s.s +fa9204d3312af2044a06909f0a690e53 sim/testsuite/sim/bfin/s16.s +6b7f4a1c29524d95d78cae8daba07784 sim/testsuite/sim/bfin/random_0001.s +926f33599d5e5800568582e2692aa4b0 sim/testsuite/sim/bfin/c_ldst_ld_d_p_h.s +02c62b69a50332d334ef23b26e58035d sim/testsuite/sim/bfin/dbg_tr_tbuf0.S +71d62c6517566aba379f434147d3c053 sim/testsuite/sim/bfin/s20.s +07d99dfe7d33971c9bd3df6350b30cdf sim/testsuite/sim/bfin/c_dsp32shift_ahalf_lp.s +834d47b0a613d23a2cc939c959c9cb0d sim/testsuite/sim/bfin/c_dsp32alu_byteop1ew.s +72a0c0a8490db86af44875827d7cc77a sim/testsuite/sim/bfin/c_dsp32shiftim_lhalf_lp.s +14801ca89c7161fa491f5ccd06c62570 sim/testsuite/sim/bfin/c_ldst_ld_d_p_pp.s +58fec93f37ef88d3508dc5fa151acb2b sim/testsuite/sim/bfin/random_0030.S +f7724cb439687f74863ecefa40ce5fb7 sim/testsuite/sim/bfin/cec-raise-reti.S +418e58f92a8fefd3a0e92ab3737c6706 sim/testsuite/sim/bfin/c_ldstidxl_ld_preg.s +c77988b31f4c0e7482b488ac2c284639 sim/testsuite/sim/bfin/c_brcc_brf_brt_nbp.s +b13ea0d7e5e574ce70563cf75607904f sim/testsuite/sim/bfin/random_0028.S +2d030cef9b9adfbb8d7294c7892ddee5 sim/testsuite/sim/bfin/c_alu2op_conv_neg.s +d5c582a5c70c026fb79d585f6bb79f38 sim/testsuite/sim/bfin/hwloop-bits.S +14f70cc3025d8b34ad3f20ad353a574c sim/testsuite/sim/bfin/abs-3.S +27f25e3dfcbcc4e7b03da586777acfb4 sim/testsuite/sim/bfin/abs_acc.s +5241bb8f8324e142de91ffc57f1782bb sim/testsuite/sim/bfin/m12.s +bef9b2d5ff713ae7b043f454d4760fcf sim/testsuite/sim/bfin/c_ldst_st_p_d_mm_b.s +67b973f750cd072f33dd654d14ad92a4 sim/testsuite/sim/bfin/vec-neg-3.S +0feb00720bffa776d70caf97aa04694f sim/testsuite/sim/bfin/c_dsp32alu_bytepack.s +a3a388cff1159655b894a4604c5b0a3c sim/testsuite/sim/bfin/c_dsp32alu_rlh_rnd.s +2b4442dacf8c0559919266aef67f3735 sim/testsuite/sim/bfin/c_dsp32mac_pair_a1_is.s +71cd0b24c00b44365c1072496507098d sim/testsuite/sim/bfin/c_dsp32mult_dr_is.s +a33f3ac5bf0c869421142b7e439ba51b sim/testsuite/sim/bfin/c_ptr2op_pr_shadd_1_2.s +8ddab0e356b42910d03ec36732c74968 sim/testsuite/sim/bfin/c_dsp32mac_a1a0_iuw32.s +0003c6a6de9ab79f51db98d63a8878fd sim/testsuite/sim/bfin/viterbi2.s +3ed922295458d8cc65145276fb69d37a sim/testsuite/sim/bfin/c_ldst_st_p_p_pp.s +b51f410dda785219d7eb3608d7cc2232 sim/testsuite/sim/bfin/addsub_flags.S +f7448b694ba26341c8e503e78011f89e sim/testsuite/sim/bfin/c_comp3op_dr_mix.s +3d6f2cf38746b68dfe62ef453049a560 sim/testsuite/sim/bfin/c_dsp32alu_rl_rnd20_m.s +905359e217984f979eeadbe20d456226 sim/testsuite/sim/bfin/random_0016.S +0f7d4b5ea357c0150dabca21177b4085 sim/testsuite/sim/bfin/random_0024.S +4c6f559d02b2ea5acbd7ed44df08464c sim/testsuite/sim/bfin/conv_enc_gen.s +038c89bbbb2a935771544aa4f7aca96f sim/testsuite/sim/bfin/c_cc_regmvlogi_mvbrsft_s1.s +9733e71fe621ab58e43e16d7f0ce6fdf sim/testsuite/sim/bfin/c_dsp32shiftim_amix.s +c1151feaf3547817a30d8f15e13a05de sim/testsuite/sim/bfin/e0.s +3a88375eb9546ac49baf54ab8e823f98 sim/testsuite/sim/bfin/c_dsp32shift_lf.s +d5cdfc180a7d6a20c74063ade297679c sim/testsuite/sim/bfin/10622.s +e7ea2b38558e7fa707c6d3b22b3af6df sim/testsuite/sim/bfin/c_progctrl_raise_rt_i_n.S +7c561c7c57307215d807406b9b3114bf sim/testsuite/sim/bfin/c_seq_ex1_raise_brcc_mv_pop.S +9ccb935d989a81b04d4ceab4e10f4413 sim/testsuite/sim/bfin/c_dsp32mac_pair_a0.s +101f93a31646fc206f5e0eca780f551a sim/testsuite/sim/bfin/c_dsp32mac_dr_a1_is.s +ae1fdd9921a16a2ad364eb64aa5e7bc5 sim/testsuite/sim/bfin/c_ldimmhalf_dreg.s +27dd8868bd2ead2c54c84619d2608358 sim/testsuite/sim/bfin/c_cc2dreg.s +a1c11b6866b46807fda894f1720f91cb sim/testsuite/sim/bfin/se_loop_kill.S +41fdd5f25693c871cc06fb37ec124088 sim/testsuite/sim/bfin/c_dsp32mult_pair_i.s +06fe99cf7afc3bb51c177962be73c4ee sim/testsuite/sim/bfin/c_brcc_brf_brt_bp.s +68b8dedf8af09307e98df6e4dcbce512 sim/testsuite/sim/bfin/a1.s +71cf641d92dff192c2f749f7925bfe86 sim/testsuite/sim/bfin/c_dspldst_ld_drhi_ipp.s +dfa06376275772c4bc9ab17ee330e195 sim/testsuite/sim/bfin/c_ldstidxl_ld_dr_h.s +64478ad965c272969a99a2e1c551cf96 sim/testsuite/sim/bfin/sri.s +9571957f8ffec21648af949dfae2dfa2 sim/testsuite/sim/bfin/c_ccflag_pr_pr_uu.s +384eb4f808cafbd9d923abefbb61efb0 sim/testsuite/sim/bfin/se_loop_mv2lb_stall.S +9dc752cfdf40fd3b34af73066cb982e5 sim/testsuite/sim/bfin/c_dsp32shiftim_lhalf_ln.s +988d13d459b44e0719e47d3290983ec9 sim/testsuite/sim/bfin/c_dsp32shift_fdepx.s +302e8ddb652151528691224c1e91e98d sim/testsuite/sim/bfin/c_alu2op_conv_h.s +a26e87ddf562adb7d3557266f87fe694 sim/testsuite/sim/bfin/cli-sti.s +d86a8f228562dc2021e3c3a97ef58ab4 sim/testsuite/sim/bfin/c_dsp32shift_ones.s +ec2874c803c864b51d032052e83855fe sim/testsuite/sim/bfin/c_dagmodik_lnz_imltbl.s +e94a8b2dc5c8bcd7c102e27e9a52f7d6 sim/testsuite/sim/bfin/acc-rot.s +ec3ebf4777088920b90901340effa079 sim/testsuite/sim/bfin/fir.s +f789479442f4dbad47e9734e0c8cccae sim/testsuite/sim/bfin/c_ldstii_st_preg.s +292b2e46bbd93ed56f9f07e858d0e6f9 sim/testsuite/sim/bfin/c_ldst_ld_d_p_pp_h.s +71f9356b8ffed1f9e97251b068dc2171 sim/testsuite/sim/bfin/mdma-8bit-1d-neg-count.c +bcbde9b7a471ab4853444bad249838e7 sim/testsuite/sim/bfin/c_comp3op_pr_plus_pr_sh2.s +c9a0e9341f21ddaaaf8069d7850d8d3c sim/testsuite/sim/bfin/c_dsp32mac_dr_a1_tu.s +caca5b6e2138d1b9f7954386104b7fcf sim/testsuite/sim/bfin/c_loopsetup_nested_bot.s +0d3dfdefad6fbcd95af51959b009736d sim/testsuite/sim/bfin/random_0014.S +70dcdf848f906bffa857dc2015575f2b sim/testsuite/sim/bfin/c_multi_issue_dsp_ldst_1.s +e08f027090f78de83b488cbee78372c9 sim/testsuite/sim/bfin/c_dsp32shift_signbits_r.s +647f2426b7b4c66a90f7f68ea68a446f sim/testsuite/sim/bfin/c_dsp32mult_dr.s +f3a06cadc1c18f60e13782fce6ddb241 sim/testsuite/sim/bfin/random_0025.S +ccf62cffff0ccaf6705ee73c7a5e469b sim/testsuite/sim/bfin/c_ccflag_pr_pr.s +04fdaa0d8a35b9b81c9fe27c41ae33aa sim/testsuite/sim/bfin/random_0035.S +f5cd09beffc541d30299638da6d62608 sim/testsuite/sim/bfin/c_dsp32mac_pair_a1_s.s +9cb710abef2b2ce825bf9452be0a3073 sim/testsuite/sim/bfin/c_seq_ac_raise_mv_ppop.S +edf967a6a74902e4d7e03506679b1218 sim/testsuite/sim/bfin/m13.s +5fb4e1e5101c7bbb45a9016f8a4c4fcd sim/testsuite/sim/bfin/c_ldst_st_p_p_mm.s +95d67ce953ff9448149a1d0e789530ff sim/testsuite/sim/bfin/c_dsp32mult_dr_m_i.s +cf16339ed4767c356b48f2d69da1b68c sim/testsuite/sim/bfin/m2.s +906d010b0c347c8f9aae350d6884b647 sim/testsuite/sim/bfin/c_dsp32shiftim_ahalf_rp.s +761f974e29cff6935997bcb265f690b2 sim/testsuite/sim/bfin/c_cc2stat_cc_an.s +526ba8281b1e407cefed889d3fdd2616 sim/testsuite/sim/bfin/c_dsp32shift_ahalf_lp_s.s +503ef3297f246f89609a9948e523dfc0 sim/testsuite/sim/bfin/c_loopsetup_nested.s +7affee7f40c46eb4efcb8583b70af73c sim/testsuite/sim/bfin/dotproduct.s +b09590158cb4ba15ec32ecb44a251205 sim/testsuite/sim/bfin/se_undefinedinstruction2.S +0d771d0cf53aa0ffa79390fd09ce7ebc sim/testsuite/sim/bfin/s13.s +4119a2caf259d8b2b22b34dd55d2ff53 sim/testsuite/sim/bfin/c_dsp32mult_dr_m.s +6f10d0bd1e1af8552ec22b8f0b60a890 sim/testsuite/sim/bfin/a26.s +face3a7b6fe2e80168b8091239206040 sim/testsuite/sim/bfin/dsp_neg.S +abf904e963267fe7adeac1ddffc00433 sim/testsuite/sim/bfin/mac2halfreg.S +1cfab7609c27f9f3719a9429afc5aad1 sim/testsuite/sim/bfin/s18.s +7d38cfafbfa9baf77e821fd03110c55e sim/testsuite/sim/bfin/c_progctrl_excpt.S +0ebb89f98059ff6b25e6814ba2ff449c sim/testsuite/sim/bfin/c_dsp32mult_dr_m_s.s +a0652d3ee9f479d9d6cca68326690608 sim/testsuite/sim/bfin/c_interr_disable.S +7b7d3fde47800d56c0467840607912e6 sim/testsuite/sim/bfin/c_dagmodim_lz_inc_dec.s +c18325dfd3429b6ce26d5776879acf5d sim/testsuite/sim/bfin/add_imm7.s +1f4af3f5d8e516922500d6b2d3871a36 sim/testsuite/sim/bfin/c_ldstpmod_ld_dreg.s +31b532722133633c988cdbdcad21c889 sim/testsuite/sim/bfin/dbg_tr_umode.S +1c70872dafbaa0a8639030711dfd24e3 sim/testsuite/sim/bfin/lp1.s +061025cf44efaa01b0432b19048766c7 sim/testsuite/sim/bfin/mmr-exception.s +28407e3611fb7520c42f65dc14ad9f9f sim/testsuite/sim/bfin/random_0031.S +3f4dec6249ce30e3bb9a65d653118b1e sim/testsuite/sim/bfin/wtf.s +0ac8404b519b41131a6133b75fd25a95 sim/testsuite/sim/bfin/msa_acp_5.12_2.S +3deb12dbde129f057fc97d88a04557e4 sim/testsuite/sim/bfin/byteop1p.s +28c8aab15730b6173d0da2f5998f36f3 sim/testsuite/sim/bfin/zeroflagrnd.s +0ad8f9106ff263b61d76a0c7851b70f3 sim/testsuite/sim/bfin/c_dsp32shift_vmaxvmax.s +3d0baa5dcd9c1bfe91dea1be48376051 sim/testsuite/sim/bfin/c_dsp32mult_pair_m_s.s +3dc1bfada31aaf5589a657af9d5d1a3e sim/testsuite/sim/bfin/brevadd.s +7551e26fbd07956de7dfecaa3e2cff17 sim/testsuite/sim/bfin/c_ldimmhalf_lz_pr.s +2bccafa22b3d5c105ea31aeb48d6e9ca sim/testsuite/sim/bfin/se_loop_nest_ppm_1.S +29ef7ae2f5926a96d0112a722358537d sim/testsuite/sim/bfin/se_stall_if2.S +bc43b189627188ec4cae8d67f4893193 sim/testsuite/sim/bfin/c_loopsetup_overlap.s +43c0db052badef4d0234d29d44f355cd sim/testsuite/sim/bfin/c_seq_ex2_raise_mmrj_mvpop.S +3b517ffc7a5db6a755ff5b607f5c1e0c sim/testsuite/sim/bfin/issue117.s +5667f67159cf3bceac54043d1456219d sim/testsuite/sim/bfin/c_ldst_ld_d_p_ppmm_hbx.s +d5cf50ddd7fa86e64250e8159d0177e1 sim/testsuite/sim/bfin/se_illegalcombination.S +f1ef93764ca410b744251c3c4cfc758c sim/testsuite/sim/bfin/c_ldstidxl_st_dr_b.s +beda830ceceae2e090507bd23afc66e7 sim/testsuite/sim/bfin/c_progctrl_jump_pr.s +dce28f3f3eeeae0db0853e53f69ce6e7 sim/testsuite/sim/bfin/m9.s +f39fa630ebeff7bd621524ce8656920f sim/testsuite/sim/bfin/ashift.s +91bb0956046070c73b36bdfc61a5d692 sim/testsuite/sim/bfin/c_dsp32shift_expadj_h.s +de0fcb790b43f09dcf45b8469ffef40a sim/testsuite/sim/bfin/c_interr_nmi.S +8c4a4ca64d0f25672fbff1f4b7ce5fce sim/testsuite/sim/bfin/c_ldimmhalf_drhi.s +05ef8361bfab4c661e8a46367b19c383 sim/testsuite/sim/bfin/c_seq_ex1_call_mv_pop.S +7b13694e6fc9226e3d6ce052b7b1cb2a sim/testsuite/sim/bfin/s4.s +ffbe3eec8e6df01edd5f425dec0d9f6b sim/testsuite/sim/bfin/c_dsp32alu_rp.s +bb8cb850942f493ed192d0fdb77f1718 sim/testsuite/sim/bfin/c_ldst_ld_d_p_mm.s +5f5ba5caa2cf6bde390d9e697a1c2cd5 sim/testsuite/sim/bfin/c_ldstpmod_st_dreg.s +377ed2dad64de6bcdde8aacc3f48d26a sim/testsuite/sim/bfin/c_dsp32mac_dr_a0.s +20dac437aaa420e9788ef469519d6dae sim/testsuite/sim/bfin/se_popkill.S +0405b426a94acf8ad97848462b0c785f sim/testsuite/sim/bfin/c_dsp32alu_rr_lph_a1a0.s +90d6859173bbd6dd571ab620ef569212 sim/testsuite/sim/bfin/c_dsp32mac_dr_a0_t.s +51b87982f3804bf0e073d8843ec821f7 sim/testsuite/sim/bfin/c_dsp32shiftim_lhalf_rp.s +05127feee6d3f89cc534357244e065e1 sim/testsuite/sim/bfin/byteunpack.s +f5471e98a28ce9e997932812221a079e sim/testsuite/sim/bfin/hwloop-branch-out.s +8298dd966ef443c974a25289417d7286 sim/testsuite/sim/bfin/c_dsp32shift_expexp_r.s +4b3ce618665d13744e95be529606feab sim/testsuite/sim/bfin/c_multi_issue_dsp_ldst_2.s +8e26b9811bbe45c00c5fe9afef3f7413 sim/testsuite/sim/bfin/c_interr_timer.S +75fd1c1b8811bb84acccafd0418d51c5 sim/testsuite/sim/bfin/compare.s +af104a052ade9d20d83c99d7f6e38383 sim/testsuite/sim/bfin/se_all64bitg2opcodes.S +d1eae416a5aee58158d29353848d595d sim/testsuite/sim/bfin/c_dsp32alu_sat_aa.S +afa755da6a89148c66fff22cde815553 sim/testsuite/sim/bfin/neg.S +f0f40a5cf5aa7d602c5c3e75f3c17426 sim/testsuite/sim/bfin/c_compi2opd_flags_2.S +df164c7c2b53f5d898625e38e68ab67e sim/testsuite/sim/bfin/c_dsp32shift_lhalf_ln.s +6fd0e5ff86f7dc846047f4db00af5cd9 sim/testsuite/sim/bfin/s12.s +f08b71309b7aaed138a565fcdc73a63a sim/testsuite/sim/bfin/mc_s2.s +734dc108e7dcbc6bb9e33fc573d81763 sim/testsuite/sim/bfin/issue89.s +bd8789745876281acb3ebcd63a553992 sim/testsuite/sim/bfin/c_dsp32shift_rot_mix.s +6e700c117e859345710d81590adf39d2 sim/testsuite/sim/bfin/cmpdreg.S +7aa05af7b0cc82119f2b681e8ab98169 sim/testsuite/sim/bfin/s19.s +c69827d917279239ca5eee21ade500d6 sim/testsuite/sim/bfin/c_dsp32shift_bitmux.s +3c5db1e3d890b2242c76545c178660ea sim/testsuite/sim/bfin/cec-ifetch.S +8072bda60ba65e3a12e30ef44fe766eb sim/testsuite/sim/bfin/c_alu2op_divs.s +bbd683221fee36dd2b10592ef11294f6 sim/testsuite/sim/bfin/a6.s +f77b23556afcd6b2d13fba515c3356d5 sim/testsuite/sim/bfin/c_dspldst_ld_drlo_ipp.s +b8e70271306ab95ce7383385f67c715f sim/testsuite/sim/bfin/cycles.s +b8df1721881549647d38a8e0f038f5ee sim/testsuite/sim/bfin/s8.s +ab26e42f455018635583de0c359879f1 sim/testsuite/sim/bfin/c_regmv_pr_pr.s +24b64830e7c7f658ac81d619d06e1b0e sim/testsuite/sim/bfin/dsp_d1.s +6a047ec73ccc98946877788c3b088aaf sim/testsuite/sim/bfin/c_ldimmhalf_drlo.s +aae33653deed7990feb13c09eb443e30 sim/testsuite/sim/bfin/c_dagmodik_lz_inc_dec.s +8f153b66bb1c033950417364a932e665 sim/testsuite/sim/bfin/c_dsp32alu_rm.s +fab985e0e9679c87d643e16ffee3a5a3 sim/testsuite/sim/bfin/c_dsp32mac_dr_a0_u.s +584f585ff41670d4502764116fb815f1 sim/testsuite/sim/bfin/d0.s +a3b68914c39ae6c2d721133ff93d2800 sim/testsuite/sim/bfin/byteop2p.s +3ad676f3d1e6f8e05cac17a1570ebdb8 sim/testsuite/sim/bfin/c_brcc_brf_fbkwd.s +c034473bf9ec3a4783e7d90af94cc7ce sim/testsuite/sim/bfin/c_ldstii_st_dreg.s +fc1687a646ff8d6283c38420f8b8f07f sim/testsuite/sim/bfin/c_seq_ac_regmv_pushpop.S +12e727fc55b386fa906466c244266707 sim/testsuite/sim/bfin/c_dsp32mac_dr_a1.s +51b976945251aa22434ea679934bded0 sim/testsuite/sim/bfin/unlink.S +2893d6244443a96fff842aee0a9e55c0 sim/testsuite/sim/bfin/issue124.s +e19788a0fb2680dfbdac1cfa9c01e10b sim/testsuite/sim/bfin/c_dsp32shift_lmix.s +013009f48b5833e27dd266090bf8e896 sim/testsuite/sim/bfin/c_logi2op_alshft_mix.s +dc7132cda4cad096d26f1d56feaee2c1 sim/testsuite/sim/bfin/se_loop_mv2lt_stall.S +dfbd526aaccd4a686ecfea445b1c3c13 sim/testsuite/sim/bfin/c_seq_ex2_brcc_mp_mv_pop.S +a2e41091aa23e034a78cae456b73081b sim/testsuite/sim/bfin/c_ldstiifp_st_dreg.s +7cf8f0313c9b134c4b90e8c9743146dc sim/testsuite/sim/bfin/issue126.s +acb21f37b3594ec532ca0c04399480da sim/testsuite/sim/bfin/algnbug1.s +0045ce79ff1d2a3ceb7b0a9c018fe069 sim/testsuite/sim/bfin/c_brcc_kills_dmiss.s +7738669ec75525c7af430a5a4268fcb9 sim/testsuite/sim/bfin/lmu_excpt_prot0.S +295dca067762b90984cd238f05525cbf sim/testsuite/sim/bfin/c_regmv_pr_dep_nostall.s +2589820e7ed8dbb5e7051539d61027c1 sim/testsuite/sim/bfin/random_0002.S +a1debf7cfdde8e7ee17fa6ce00a2f10d sim/testsuite/sim/bfin/c_dsp32mac_dr_a1_iu.s +06db600415d9d6672602063b7e23e47c sim/testsuite/sim/bfin/random_0019.S +918d068c7e3910733ae4d013b5cd4a1d sim/testsuite/sim/bfin/stk3.s +9c6b9ec5d72ab96fb1898d3b3cd29ffc sim/testsuite/sim/bfin/random_0003.S +277f7853aa80208013169a875683f900 sim/testsuite/sim/bfin/c_dsp32alu_byteop2.s +dbb76db3186a5de128e481c322ce5d4c sim/testsuite/sim/bfin/c_dsp32mac_pair_a1a0.s +03e73abe7cfa4be65b424c6ae17dcd08 sim/testsuite/sim/bfin/abs.S +4e6cb56a2a982999d019a1eda3991f2b sim/testsuite/sim/bfin/a11.S +4485ff1a29e94883e1e65c727866c5a0 sim/testsuite/sim/bfin/c_dspldst_ld_dr_ipp.s +a239662487b4a852239cde8357b2e80b sim/testsuite/sim/bfin/se_mv2lp.S +93f68c7c8ee94d9b664e0b67063ebbb7 sim/testsuite/sim/bfin/a24.s +eb73255b5cb7562e3b21af332b1d9eab sim/testsuite/sim/bfin/m7.s +e2b55a8ed7b18d264d2730c2b3226d04 sim/testsuite/sim/bfin/c_seq_wb_rtn_lsmmrj_mvp.S +19b4f5b1ab5013d05fac7b0e0b646a62 sim/testsuite/sim/bfin/c_dsp32shiftim_ahalf_ln.s +e772b1483023e67a93b19ef33ab55505 sim/testsuite/sim/bfin/c_dspldst_st_dr_ipp.s +b8a00c4885b0dc53d68d7222ebd1f6ab sim/testsuite/sim/bfin/vit_max.s +babb584b0d996ce2f1969c48e03b368f sim/testsuite/sim/bfin/c_br_preg_stall_ac.s +a3774f7d75d9d6145968bd38ae123bb9 sim/testsuite/sim/bfin/a0shift.S +65dd5572e982aa4d49542d5739db6a74 sim/testsuite/sim/bfin/c_dsp32alu_rpm.s +6c09e4fafe198fefd215c3b2fa7f79b2 sim/testsuite/sim/bfin/c_dsp32alu_rmm.s +2bd089dd582cb290ddf0d64fee3d0c9b sim/testsuite/sim/bfin/c_ccmv_cc_dr_dr.s +df60bcb108c4fb36548c6fa099c75fd0 sim/testsuite/sim/bfin/c_ldst_st_p_d_b.s +a4cf8b2e6f0cdeb88e37967bb1e5b18a sim/testsuite/sim/bfin/issue118.s +9121d32c9b7afe1ceed81ab968167761 sim/testsuite/sim/bfin/c_ldimmhalf_lz_ibml.s +178233d61233eb1d2d093c4132377ccc sim/testsuite/sim/bfin/c_dsp32mult_dr_tu.s +636d3e3dd28181577e10f1a377382ed8 sim/testsuite/sim/bfin/c_dsp32alu_aa_negneg.s +d1db4922910d772f8372c30d6608c487 sim/testsuite/sim/bfin/cc1.s +cec198042b3ad996c5a36485b753ec05 sim/testsuite/sim/bfin/se_oneins_zoff.S +c5817b5392cfebe63db57d3a3509142e sim/testsuite/sim/bfin/c_dsp32shift_ahalf_ln.s +d844457313f48c29c6584200c95697eb sim/testsuite/sim/bfin/s14.s +61a56e6250041dab497c73a679c28af8 sim/testsuite/sim/bfin/c_compi2opp_pr_eq_i7_n.s +6a7de36567147c29f31fa9767a7d068b sim/testsuite/sim/bfin/dsp_a8.s +552e12c388e236d1aecaa209197f5437 sim/testsuite/sim/bfin/se_rts_rti.S +c7eb777dc8c72484be0e0535400d3764 sim/testsuite/sim/bfin/c_dsp32mult_dr_m_iutsh.s +5f0c733e9692fbfadcd43244dbaa821c sim/testsuite/sim/bfin/mem3.s +b66136e773f49004230589eb30a8a457 sim/testsuite/sim/bfin/random_0021.S +128c82fe8e69af5da34b25ed0cb5e087 sim/testsuite/sim/bfin/c_dagmodim_lnz_imltbl.s +7101288983cd71a36dec11be2cda2efc sim/testsuite/sim/bfin/c_ldst_ld_d_p.s +188540971af41b094e50388e253abbdd sim/testsuite/sim/bfin/c_dsp32mac_dr_a1_u.s +d350e9e60e4ec8d6afceb4ef21d5a666 sim/testsuite/sim/bfin/c_ccmv_ncc_dr_dr.s +9b2b0c6891120209c99c8a4b9872da01 sim/testsuite/sim/bfin/c_dspldst_st_dr_i.s +4b9f4dd88333be80e1432c3799061c6e sim/testsuite/sim/bfin/s6.s +2d368770b42998ab3ab4fddf1a5f42fb sim/testsuite/sim/bfin/c_dsp32mult_pair_m_is.s +0f0eae59ca7d4f47578a3d5ae55be5be sim/testsuite/sim/bfin/c_dsp32alu_abs.s +07371bb2a6d0102e2e177dc1560de422 sim/testsuite/sim/bfin/c_seq_ex3_ls_brcc_mvp.S +0d14b290360f3cbd3e7d24fd2f4e3b76 sim/testsuite/sim/bfin/c_regmv_imlb_dep_stall.s +c657ad4c186b6224e353864dafbbb4fe sim/testsuite/sim/bfin/random_0013.S +029753ee740e18b70c858a54631c36c4 sim/testsuite/sim/bfin/msa_acp_5.10.S +f826d86590c3e73ee7d923ba5f17365e sim/testsuite/sim/bfin/c_dsp32shiftim_ahh_s.s +cf70c006279d347b6a8362785c605ace sim/testsuite/sim/bfin/c_ccflag_pr_imm3.s +8252c13fe0e26b5c29077e178357a91c sim/testsuite/sim/bfin/c_ldst_st_p_p.s +63ae4a9dd3de6ebb8ebfebb5b4f60159 sim/testsuite/sim/bfin/c_dsp32mac_dr_a0_tu.s +711a16fc84ffe0a266c85a34a1230914 sim/testsuite/sim/bfin/eu_dsp32mac_s.s +a6bd29e4a3ebddaaeb02a11972cb28b5 sim/testsuite/sim/bfin/c_except_sys_sstep.S +25e1ec261c1042d7613a31546e807706 sim/testsuite/sim/bfin/se_kills2.S +b20d9784f0415f9b173e4d1780949a2f sim/testsuite/sim/bfin/c_ldstidxl_ld_dr_xb.s +f62a767ecbabfb368cd1f5d0b20e9d82 sim/testsuite/sim/bfin/cec-exact-exception.S +cfaa8736fe8d99807d6f397352b4906b sim/testsuite/sim/bfin/s10.s +7ec40bae10f95a00687dff3e99626107 sim/testsuite/sim/bfin/c_dsp32alu_aa_absabs.s +04598b814b8156f788c4fc8cc6f1d507 sim/testsuite/sim/bfin/c_interr_disable_enable.S +f9d495db33be7dec4f10e7aa582dc68e sim/testsuite/sim/bfin/lsetup.s +85e116d7e9d7f79e5e90fb70a6edf347 sim/testsuite/sim/bfin/c_dsp32shiftim_lmix.s +5b9727fb9b75bc8fdb919715a859e381 sim/testsuite/sim/bfin/random_0034.S +8a97a30aa30bf68d9c91e27ed2c1a062 sim/testsuite/sim/bfin/loop_strncpy.s +84af1902fa132a0e9aa33a511ed5e1db sim/testsuite/sim/bfin/c_dsp32mac_dr_a1a0_iutsh.s +f90933dbd04b9f8ddc056c02c87143e2 sim/testsuite/sim/bfin/c_regmv_dr_dep_nostall.s +2685d1900e9210813da78fef823e5042 sim/testsuite/sim/bfin/c_dsp32mult_dr_s.s +00045a3c374df7c76408334895a311ad sim/testsuite/sim/bfin/c_logi2op_bitset.s +bd12fcd814a00cb1ead93562a6408525 sim/testsuite/sim/bfin/s3.s +2d0628bef47dd98f40d5cdad7319948e sim/testsuite/sim/bfin/random_0004.S +8d5e4a024a3f1a0cf5a8479d6c2eb3d5 sim/testsuite/sim/bfin/a25.s +ba558e8b3302f629e595d7e28896deba sim/testsuite/sim/bfin/c_dsp32alu_awx.s +1a01325faf8cc737f9229e3f53435cd7 sim/testsuite/sim/bfin/c_dsp32shift_lhh.s +2b5fddc64d07850e90a973b0826fe23c sim/testsuite/sim/bfin/se_loop_kill_01.S +4758444e9e2c1365d5f9280e48aa3685 sim/testsuite/sim/bfin/simple0.s +ce16c8dc5618340ff79b5dd11ded0040 sim/testsuite/sim/bfin/s7.s +1c87b664e3f3279f72643406b4341180 sim/testsuite/sim/bfin/c_dsp32mult_pair_u.s +c7c82a82957df8e3c222af4dcb894684 sim/testsuite/sim/bfin/acp5_19.s +d25c0b8ff6061f085cfb51f40484fb1e sim/testsuite/sim/bfin/a20.S +239b95c9f12d2e28a754f0877d0aed56 sim/testsuite/sim/bfin/c_br_preg_stall_ex1.s +ba47e8b23399eb887c3a11ab507f43dc sim/testsuite/sim/bfin/c_alu2op_conv_b.s +173cb343e29e8f011a2831a31d448331 sim/testsuite/sim/bfin/c_ccmv_cc_dr_pr.s +67eef251513ea0a65f8c96ccfcca3885 sim/testsuite/sim/bfin/c_dsp32mac_pair_a0_m.s +03666e4218e67913c99a631f4a8256e0 sim/testsuite/sim/bfin/a9.s +86090ee34a3fa27f1fb55d8e8d9aa8e9 sim/testsuite/sim/bfin/c_dsp32shiftim_af_s.s +b1c66a6b7035bbd06ada32f3dfccdff3 sim/testsuite/sim/bfin/c_dsp32mac_dr_a0_s.s +2b4a49438847727f0608f760789f6146 sim/testsuite/sim/bfin/se_all64bitg0opcodes.S +8e7813c161dde9e505a4c716a9f85433 sim/testsuite/sim/bfin/c_brcc_brf_nbp.s +a0f707838bceeacc9f19bfa1d3f31159 sim/testsuite/sim/bfin/cec-syscfg-ssstep.S +2dd27236ee3531fae815173f9d9878ed sim/testsuite/sim/bfin/c_cc_flagdreg_mvbrsft_sn.s +cfc3f75a497c120ef474dda21f8a2971 sim/testsuite/sim/bfin/c_ldst_ld_d_p_pp_xb.s +884d675ce86f627932b9185faa0ed838 sim/testsuite/sim/bfin/c_regmv_pr_dep_stall.s +c49c68f6d47c5ecc841068e30dbec9a3 sim/testsuite/sim/bfin/c_cactrl_iflush_pr_pp.s +5ecaf1006e4538f847fb254c749238d3 sim/testsuite/sim/bfin/mdma-skel.h +f5a6a017adac4f59064088a6568e1b59 sim/testsuite/sim/bfin/c_seq_dec_raise_pushpop.S +e08b90fdbfab2444d82784000453c3ca sim/testsuite/sim/bfin/c_ldimmhalf_lzhi_dr.s +334d9f600c3135fb4c9b63f9ed8d5ded sim/testsuite/sim/bfin/c_logi2op_log_l_shft_astat.S +f2ed60841e06a5c61f999277f90132b3 sim/testsuite/sim/bfin/c_dsp32alu_a0a1s.s +4818557583db63a8114e8847eb82cd22 sim/testsuite/sim/bfin/run-tests.sh +2f2a0016829092242198f981ee03e3c7 sim/testsuite/sim/bfin/c_dsp32alu_rrppmm_sft_x.s +0411b898f07e561234c3db56de8c8822 sim/testsuite/sim/bfin/c_ptr2op_pr_neg_pr.s +f269c9779b55995b9c5bc03a2416c194 sim/testsuite/sim/bfin/c_dsp32mac_dr_a0_ih.s +b21805b72c36e2b748ce9f593bb4a9df sim/testsuite/sim/bfin/c_compi2opd_dr_eq_i7_n.s +f7c0c137bdbe3b5206820590db0f69a7 sim/testsuite/sim/bfin/se_undefinedinstruction4.S +bd3261ca82536780a90e028f20ea8e5c sim/testsuite/sim/bfin/c_ldimmhalf_lz_dr.s +7a731ee2fe087b1e16b92be5a322a15f sim/testsuite/sim/bfin/hwloop-lt-bits.s +2dd92317aa10e2aeeab2f284e84e01fa sim/testsuite/sim/bfin/c_brcc_kills_dhits.s +9df61aafd07a1e2d95c6a6cbab56cd1e sim/testsuite/sim/bfin/c_dsp32shift_rot.s +32645fab003ee956b9b7d4c31636c5d9 sim/testsuite/sim/bfin/10799.s +ee12c42104dbcfe9562c57172425c3bc sim/testsuite/sim/bfin/c_progctrl_clisti_interr.S +4cae16bbcb270516e373926130dfbbcc sim/testsuite/sim/bfin/c_seq_ex1_raise_call_mv_pop.S +845494ca139dbc0c802fcf74a89231f8 sim/testsuite/sim/bfin/c_ldstii_st_dr_h.s +00408bc8a429840740771c769430d46f sim/testsuite/sim/bfin/dsp_a7.s +cd9efea1d64fc7fd2dec07f6adf8925c sim/testsuite/sim/bfin/c_dsp32alu_rrpmmp_sft_x.s +7c1f37bdf46606175ea34bd9878f399e sim/testsuite/sim/bfin/c_mmr_ppopm_illegal_adr.S +7361a2c90f840ddcb9b17b552a4e70ef sim/testsuite/sim/bfin/byteop16p.s +2614add64a5764e0f13692f2210bf040 sim/testsuite/sim/bfin/c_comp3op_dr_and_dr.s +786ea14acabe08433d5e5ded79e8011d sim/testsuite/sim/bfin/se_allopcodes.h +41d5d4ae69d3e3852531e74e29de4340 sim/testsuite/sim/bfin/c_alu2op_shadd_1.s +e567889fd763c41c603953360216725f sim/testsuite/sim/bfin/c_dsp32shift_a0alr.s +2c5c4f4bf2fc65f15c19902e17b78d4a sim/testsuite/sim/bfin/c_dsp32shift_ahalf_ln_s.s +958ad19045957e69b955aee37ce5b6c0 sim/testsuite/sim/bfin/c_dsp32shiftim_a0alr.s +1c2f680be0856eca64957b27251ec528 sim/testsuite/sim/bfin/c_dsp32mac_dr_a1a0.s +e118f3053f58ec2688b284bd4201b49c sim/testsuite/sim/bfin/c_ldstpmod_ld_dr_hi.s +b8f865d48d0fccb39946756ee52e7265 sim/testsuite/sim/bfin/c_mode_supervisor.S +ffdcea84476eb75625dcc1993c2e3c98 sim/testsuite/sim/bfin/edn_snafu.s +2641773af0a76353ca8ab09699313c4f sim/testsuite/sim/bfin/c_dsp32alu_rrpm_aa.s +ba9ecd1796636d954e6ce0e5720ff570 sim/testsuite/sim/bfin/link.s +70a6ddd301261040b2eb05510ae4e0be sim/testsuite/sim/bfin/c_dsp32shift_align24.s +2f609b6e1e1f3ea5496e2a364723bceb sim/testsuite/sim/bfin/c_ldstiifp_st_preg.s +d976f6ce887a965241d16795343ab2b3 sim/testsuite/sim/bfin/c_dsp32shift_ahh.s +1e8e3ca710361ce98d00f0c8acbc0d1f sim/testsuite/sim/bfin/c_br_preg_killed_ex1.s +ce20453df53659708827f31015999c73 sim/testsuite/sim/bfin/se_event_quad.S +2a98f1318efaafaa6fb1f1bb2bdd332c sim/testsuite/sim/bfin/c_dsp32alu_rrppmm_sft.s +63fcd8aa9dd6fc02faf256e75ff5d9e3 sim/testsuite/sim/bfin/divq.s +e4910af42fd0841b5dcbb4e203a51a35 sim/testsuite/sim/bfin/c_interr_excpt.S +404dce58dfff7836f0e7c84a8b7d5111 sim/testsuite/sim/bfin/se_all32bitopcodes.S +d99a6cd0d548f3c08318baa994f5807a sim/testsuite/sim/bfin/se_bug_ui3.S +fb8dfcd82a42a477041154f5cdb21293 sim/testsuite/sim/bfin/c_ccmv_ncc_pr_pr.s +6d75130bfde6bbdc97fa7da50009c2ad sim/testsuite/sim/bfin/allinsn.exp +78fd337fd8ad33125ae5f7dd25393315 sim/testsuite/sim/bfin/c_dspldst_ld_drlo_i.s +70380a92e41b3f9868ba6452db8970b2 sim/testsuite/sim/bfin/i0.s +cc9497ab5745e5c55cdc73bc1a8f618e sim/testsuite/sim/bfin/se_loop_nest_ppm_2.S +f3aa848548a0432f94d7f21f40799c24 sim/testsuite/sim/bfin/cc0.s +625d83d4bfb911fac79fe2b8c024ad91 sim/testsuite/sim/bfin/c_interr_loopsetup_stld.S +9d81d781061b56b18755a36cc6d7395f sim/testsuite/sim/bfin/c_ldstpmod_ld_dr_lo.s +323b57f2e648a4ff1e1db5cbcaae38a6 sim/testsuite/sim/bfin/c_ccflag_dr_dr_uu.s +ee264ec13af3574451d47688fc8e045d sim/testsuite/sim/bfin/c_dsp32mac_pair_a1a0_s.s +59131d58a67fb8ce8cde4154792f2f9d sim/testsuite/sim/bfin/m1.S +9fa455a256613004f98ce360c2cd4a5e sim/testsuite/sim/bfin/msa_acp_5.12_1.S +ceadb7776c5e6a9c2640a50e7580c488 sim/testsuite/sim/bfin/c_dsp32mac_pair_a1a0_m.s +87c13a445ebeeafd0560f6bdad2c57f0 sim/testsuite/sim/bfin/tar10622.s +182a2c8555a2a8ab7cdc8bf3071f6a37 sim/testsuite/sim/bfin/c_loopsetup_preg_lc1.s +904d9ed555aa646cdd0795d27100cd4f sim/testsuite/sim/bfin/c_ldimmhalf_h_ibml.s +f524cabf8fcc0dc66808d99cccfa61eb sim/testsuite/sim/bfin/c_dsp32mac_pair_a0_u.s +8ad9f6f0f793abb42eabeafb47f543cd sim/testsuite/sim/bfin/s9.s +fb541cdb77bd0c6540a14fe01975c7cb sim/testsuite/sim/bfin/c_compi2opp_pr_add_i7_n.s +2aa8a19946018e214cd1564e75f421fb sim/testsuite/sim/bfin/se_loop_nest_ppm.S +cc7c53b3456f05c2519fe8d2a4a0aaf5 sim/testsuite/sim/bfin/c_ldst_st_p_d_pp.s +86fc6e2e2d7d0ed372f3037f6abc1c39 sim/testsuite/sim/bfin/vec-abs.S +875b06ceb7b81cff862c5ecff8307680 sim/testsuite/sim/bfin/c_ccmv_ncc_dr_pr.s +43e4c93d9d3799f8ea7d7a5794cc0891 sim/testsuite/sim/bfin/c_progctrl_csync_mmr.S +0fe0644a247738a161cff124d8a1d901 sim/testsuite/sim/bfin/c_dsp32shift_align16.s +c65c1dfe2f3640b01035e17a8d1faa1d sim/testsuite/sim/bfin/random_0032.S +d4d4a320ea31b699bac08cef3ad84301 sim/testsuite/sim/bfin/c_logi2op_bittgl.s +7cf7f5fc339ff885a2a520a2c4bacd6b sim/testsuite/sim/bfin/c_seq_wb_rtx_lsmmrj_mvp.S +f2428e30f045b3a5eee146ad3516a40d sim/testsuite/sim/bfin/c_loopsetup_prelc.s +84e50dcefb143e170d9779d65f345148 sim/testsuite/sim/bfin/c_dsp32mac_dr_a0_i.s +b7b71f0aa7e8dd0ba134ab420d079655 sim/testsuite/sim/bfin/c_ldst_st_p_d_pp_b.s +41d40ebc58dc25668e69e7ac53956008 sim/testsuite/sim/bfin/brcc.s +652bac9f24d850a393bc19fa5b9bd699 sim/testsuite/sim/bfin/se_lsetup_kill.S +be9816d7ae154b7210affc9b25c5aa09 sim/testsuite/sim/bfin/c_dsp32mac_dr_a1_m.s +19a760bf0b488e0a8e5d50718f2aedb2 sim/testsuite/sim/bfin/c_brcc_bp2.s +9114d6373e4da52043710b8cd8b5014a sim/testsuite/sim/bfin/c_comp3op_dr_minus_dr.s +0219e15c85d6cb90dda57448b5dceffd sim/testsuite/sim/bfin/c_ldimmhalf_lzhi_ibml.s +1294c70a4c3b69f36b5d182a0be170c9 sim/testsuite/sim/bfin/c_mmr_loop_user_except.S +12d4f0bc92557a882318804a22780c3d sim/testsuite/sim/bfin/c_dsp32mac_a1a0_m.s +375240c9dd7ee875f17f2df8938a1346 sim/testsuite/sim/bfin/10272_small.s +ce5d4728ea6293d9c2deb31a5a7dcc4d sim/testsuite/sim/bfin/se_excpt_dagprotviol.S +cdc7a150fb4d800fbcfb998b92a143ea sim/testsuite/sim/bfin/stk6.s +450c1af5ae2224d377b92c15320c8348 sim/testsuite/sim/bfin/c_ldimmhalf_h_pr.s +28982cacd534f9f3bca6265b9a08b225 sim/testsuite/sim/bfin/c_ldst_ld_d_p_xh.s +4a58de8d4475225098e35fd33ce47653 sim/testsuite/sim/bfin/c_dsp32alu_max.s +b66bf17e8fed9d3a82f42140f530c036 sim/testsuite/sim/bfin/c_logi2op_log_l_shft.s +5cdc262c0a44c5047d78b664b8ea4c6b sim/testsuite/sim/bfin/c_pushpopmultiple_dp.s +78ca768b0de8783d2792150f0674cd90 sim/testsuite/sim/bfin/se_excpt_ifprotviol.S +41270012f56d985144bd1154d27df10a sim/testsuite/sim/bfin/c_mmr_loop.S +3f0b69300bac8ac06bb3b246a090f213 sim/testsuite/sim/bfin/c_brcc_bp4.s +86044023b483f65e7f6d32195d7f470f sim/testsuite/sim/bfin/lmu_cplb_multiple0.S +93cd6112d65fa38047b5ec538e165bdf sim/testsuite/sim/bfin/c_ldst_ld_p_p_pp.s +103c5d4573562eb707d0f224bddb079f sim/testsuite/sim/bfin/se_bug_ui2.S +cfaa70abc5137db2344ad5771e7fb595 sim/testsuite/sim/bfin/c_alu2op_shadd_2.s +902c615bf0a946c928824d4fd3c3bb4d sim/testsuite/sim/bfin/random_0023.S +33c2d37f1f8385abae74c8de03388215 sim/testsuite/sim/bfin/c_dsp32mac_pair_a1a0_is.s +ac099c908f9dde66bd1bb8230d20ddff sim/testsuite/sim/bfin/c_dsp32alu_rrpm.s +7c9bf61ede5a59c0a69c1fb924a800d6 sim/testsuite/sim/bfin/m3.s +768f0d6765fff4aa19866a801fd28711 sim/testsuite/sim/bfin/se_loop_ppm_int.S +365a381c30ce0992a71da4ad558cbe08 sim/testsuite/sim/bfin/c_ldst_ld_d_p_pp_xh.s +3e5c0d2afb5b636cbed6e0b739854ec5 sim/testsuite/sim/bfin/c_comp3op_pr_plus_pr_sh1.s +c07455aa5f1e0d9cdfde9e2bac836e37 sim/testsuite/sim/bfin/random_0006.S +2de681208fe0b1b87cd46530ab13c745 sim/testsuite/sim/bfin/vecadd.s +ceca2bed9df225e9fa884a457775800f sim/testsuite/sim/bfin/random_0008.S +a0cc72d47e1efe638d2f379849fd527c sim/testsuite/sim/bfin/c_dspldst_st_dr_ippm.s +bbbc13c1e29c0c5ff28fb04022f75024 sim/testsuite/sim/bfin/c_dsp32shift_af.s +a50df60b3582ceeb276eade1d2b8f477 sim/testsuite/sim/bfin/issue205.s +7901b27f138ae7a3c3b81e09103d0602 sim/testsuite/sim/bfin/cec-non-operating-env.s +c972d1bcdc76d3dd83efe358208dcbe5 sim/testsuite/sim/bfin/hwloop-nested.s +90d97e84322c3c273aafe652c8e91872 sim/testsuite/sim/bfin/s30.s +0c95999e8f9e67478f9d2918bdd09174 sim/testsuite/sim/bfin/test.h +114ed0e388ff27793cd4e74481956592 sim/testsuite/sim/bfin/c_compi2opd_dr_eq_i7_p.s +09a42670f0771f52ace58abaea20cb4a sim/testsuite/sim/bfin/c_ccflag_a0a1.S +e0694f00bd419889afb9d9a3f11b3b40 sim/testsuite/sim/bfin/c_alu2op_arith_r_sft.s +5cd9a082f7074be83ea26502adc4fb54 sim/testsuite/sim/bfin/random_0010.S +4fd07b28d259adebc742a51ce7336e56 sim/testsuite/sim/bfin/s1.s +1ba47174b19763359d9b0f4ea3916727 sim/testsuite/sim/bfin/c_dsp32mult_pair_m_u.s +471ed97f64fa7fd9d05e55bf9255d678 sim/testsuite/sim/bfin/greg2.s +555d43b2af6912a9113f06247e6aed40 sim/testsuite/sim/bfin/random_0022.S +b88a160929b70861633dd13f81dd0e74 sim/testsuite/sim/bfin/c_dsp32shiftim_ahalf_rp_s.s +841ba18f69d34dbbef6befb553e6eeeb sim/testsuite/sim/bfin/c_ldstidxl_ld_dreg.s +8ac2a6c4e80fd758af687ead01c5e5b8 sim/testsuite/sim/bfin/se_rets_hazard.s +1364e677cdfce4df3ea77160bbc9443e sim/testsuite/sim/bfin/c_progctrl_call_pcpr.s +ee9e741e55ba73a92588d6d86caadc86 sim/testsuite/sim/bfin/c_dsp32alu_maxmax.s +b83e00112b576d488bb4de49ea3c4055 sim/testsuite/sim/bfin/c_mode_user_superivsor.S +953b5b4f6bad638a52d7e9bff09a767c sim/testsuite/sim/bfin/c_dsp32alu_disalnexcpt.s +a03f34c39c8412197f8e51b848c7db34 sim/testsuite/sim/bfin/nshift.s +6a7bca360b713f72787e3277285ca337 sim/testsuite/sim/bfin/se_all64bitg1opcodes.S +db33260146534315ba5d510fe2dcb2ae sim/testsuite/sim/bfin/c_ldst_ld_d_p_mm_xb.s +2285e4906f3488a812c5f791e8efa6c9 sim/testsuite/sim/bfin/c_ldst_st_p_d_mm.s +18a78f2b94f86ce37423bc99c777d9f1 sim/testsuite/sim/bfin/c_ldimmhalf_l_pr.s +02a3deebb7a758e3af2afea1d7eabb4f sim/testsuite/sim/bfin/c_dsp32mac_pair_a1_u.s +6d7aa6c56270db5faf3775ee63df12d4 sim/testsuite/sim/bfin/div0.s +0dd8f3b79fdde6e24b8f3b0dd3bae8a5 sim/testsuite/sim/bfin/c_alu2op_log_l_sft.s +05d05d3441ffc3d185eefc9583561629 sim/testsuite/sim/bfin/c_dsp32alu_a_neg_a.s +ce17614facd14eec0b020443865dfb5d sim/testsuite/sim/bfin/c_interr_pending_2.S +55d5782f0ddae0e5d0d6a04f81bdd10a sim/testsuite/sim/bfin/stk2.s +aa10645e3c824974c092c7bc94faac0d sim/testsuite/sim/bfin/c_dsp32shift_vmax.s +dc280850768a497ef970f73a05ff8419 sim/testsuite/sim/bfin/random_0011.S +8bd946e6222f132be930da837416d73d sim/testsuite/sim/bfin/se_regmv_usp_sysreg.S +5c32de9b54888abd2dbd86464a5351c8 sim/testsuite/sim/bfin/c_ldstii_ld_preg.s +7a821b1429672bfdbefe565e64c5a430 sim/testsuite/sim/bfin/7641.s +05ee9bca2a0c2d4943e5a01135a6d3a5 sim/testsuite/sim/bfin/c_ldst_ld_p_p.s +3427654da4e4eab063771d9a8140aec3 sim/testsuite/sim/bfin/c_dsp32alu_rrpmmp_sft.s +469596b6f7e73b7f5617d9a0ebf5559b sim/testsuite/sim/bfin/c_dsp32mac_dr_a1_i.s +0c4e75fba47834d73b3c67a6de2738dd sim/testsuite/sim/bfin/c_dsp32mult_pair_s.s +03ee83edb056e97c913c4e40592ba18b sim/testsuite/sim/bfin/cec-system-call.S +d29b11244798155086d332c208f787a2 sim/testsuite/sim/bfin/issue112.s +1b9fe3241a0162e8606c21e6b32bb0c6 sim/testsuite/sim/bfin/c_dsp32alu_sgn.s +464fe897143ce4d3e95b3ff695f30459 sim/testsuite/sim/bfin/c_dsp32shift_amix.s +bb00a59be022ef27cdf64a1318b544c0 sim/testsuite/sim/bfin/c_dsp32alu_rh_m.s +a60989418c9f3db194d882c2143ccd97 sim/testsuite/sim/bfin/c_regmv_dr_pr.s +c2ce02e4274173b1d0e81b785fc4e606 sim/testsuite/sim/bfin/c_loopsetup_nested_top.s +a5d2efb604b8d9871c4994ef920aa3dd sim/testsuite/sim/bfin/m8.s +005cb7b88b95c8b4d1a7437f29ebfce6 sim/testsuite/sim/bfin/issue129.s +6e58cbb2f4cad8aaee4c0d4fe4e1c8a3 sim/testsuite/sim/bfin/cc-astat-bits.s +465cab4122fdeac3ccabbac2a224af40 sim/testsuite/sim/bfin/c_regmv_dag_lz_dep.s +f8db5917fe683888b621431324d6ef59 sim/testsuite/sim/bfin/vec-abs-3.S +58559c675228662da9b82de11aece697 sim/testsuite/sim/bfin/c_ccflag_dr_imm3_uu.s +a4cf102023a9f67c8d85cc7ea314b4b6 sim/testsuite/sim/bfin/c_regmv_dr_acc_acc.s +17a79f063f3cf5a910414807b64979c8 sim/testsuite/sim/bfin/c_dsp32shift_bxor.s +c4086f10d7848f8880f0fd6c16448626 sim/testsuite/sim/bfin/dbg_brtkn_nprd_src_kill.S +aedc91ce9acd3f98bf4ae2c3a3b3b17c sim/testsuite/sim/bfin/c_dsp32alu_rh_rnd20_p.s +98a64ce543f2ccc00d2318ef1ed95d8b sim/testsuite/sim/bfin/c_dsp32alu_rh_rnd12_p.s +8d2ef9676f9f11678fcccf00cb310b15 sim/testsuite/sim/bfin/c_compi2opd_dr_add_i7_p.s +8a31d31b5465c4a06ca4e3d59d9aac64 sim/testsuite/sim/bfin/c_dsp32shiftim_af.s +ad0e4399285844ab1bd66509723b7861 sim/testsuite/sim/bfin/c_alu2op_conv_mix.s +6f5b2337dfe7093c79542cdb7ea6996d sim/testsuite/sim/bfin/abs-4.S +3e2ef8403b643230f67439d89b92a135 sim/testsuite/sim/bfin/c_ldstidxl_st_dreg.s +67329277f88dfe86a1ba8f33000b6e2b sim/testsuite/sim/bfin/se_brtarget_stall.S +8644a0ff8a5db78cef4c402db4d1aceb sim/testsuite/sim/bfin/a8.s +480626af3232a6411208fcad0b0687e8 sim/testsuite/sim/bfin/c_dsp32mult_pair.s +501e1fd75909e4170b657cefae77d432 sim/testsuite/sim/bfin/m16.s +4a2a6504660288612f545d1689c25c86 sim/testsuite/sim/bfin/c_dsp32mac_pair_a1a0_i.s +56538f4726d4bcbf69000d597527ff45 sim/testsuite/sim/bfin/a5.s +10fe3ce0034114415ea5bbc801fb2c2e sim/testsuite/sim/bfin/c_pushpopmultiple_dreg.s +2b9f699a18c13953ab0ffde4fdddf032 sim/testsuite/sim/bfin/double_prec_mult.s +59a3446f9e2fe15e93735bcab1f2ad99 sim/testsuite/sim/bfin/c_dsp32alu_saa.s +ca8394abcbd2ea4027db0cb2c7d2f7a4 sim/testsuite/sim/bfin/c_dsp32mult_dr_mix.s +3b5de08e855694df6cddd2c1cbe2fbfb sim/testsuite/sim/bfin/c_dsp32mult_dr_m_t.s +90673b97a790eaa3f2c2ea162cc0a5cf sim/testsuite/sim/bfin/argc.c +2e07c3eb9ee7aa16ae79349a2b952633 sim/testsuite/sim/bfin/cec-no-snen-reti.S +4398f3953291022bb7a9481896fe92e3 sim/testsuite/sim/bfin/testset.s +dc05bbf198d1b4a4a9ab6c8345b4ee0d sim/testsuite/sim/bfin/testset2.s +5472c113801fcd378f1a439d228d629c sim/testsuite/sim/bfin/issue113.s +5ec8a64db6b00e60a7b1de82c2d6f62f sim/testsuite/sim/bfin/11080.s +32652946f308cb9a4bec20e874425a50 sim/testsuite/sim/bfin/c_ldstidxl_st_preg.s +cce602f497a322243cde44b5b8609cd9 sim/testsuite/sim/bfin/c_dsp32shift_signbits_rh.s +9c3473194a6bd5da64b7f8d2069db515 sim/testsuite/sim/bfin/c_dsp32alu_alhwx.s +fcdcb712779b367c8cc3364878d6feb3 sim/testsuite/sim/bfin/random_0020.S +e712aa82e9762dad4d50ed13be9d8916 sim/testsuite/sim/bfin/random_0017.S +9b3e5f6ede1bcd4d9beaeedaa98a0ca2 sim/testsuite/sim/bfin/c_dspldst_st_drhi_ipp.s +637674262c3a09a442c56884dd741951 sim/testsuite/sim/bfin/c_dsp32alu_r_negneg.s +f0945532aa7d584387fcbb7bcf609f0a sim/testsuite/sim/bfin/c_multi_issue_dsp_ld_ld.s +7c79d08dcbe4826dbd86bffc27116b69 sim/testsuite/sim/bfin/f221.s +754b06a0434623312fb539f37b44fc97 sim/testsuite/sim/bfin/c_dspldst_st_drhi_i.s +2d02f1f1b8815fb89e351f4e40136e7b sim/testsuite/sim/bfin/se_loop_mv2lc_stall.S +01602e752a490b7286397676e0589315 sim/testsuite/sim/bfin/c_alu2op_conv_xb.s +3adadda13773c46b6091d45acd6b26af sim/testsuite/sim/bfin/c_calla_subr.s +36488551776dd1c9bb02634c949388b7 sim/testsuite/sim/bfin/logic.s +a5953d4ee3bfa471e04729418059ccef sim/testsuite/sim/bfin/c_ldimmhalf_h_dr.s +e05eb1aad0fe81a9c3fa95ec4b9ee43c sim/testsuite/sim/bfin/m5.s +9569a3c4c968b2967fda3b5817cb3960 sim/testsuite/sim/bfin/cc5.S +8e21d6a9f8648f5755f0c545c603a2ac sim/testsuite/sim/bfin/c_regmv_pr_imlb.s +b7de88655a515a59593b40fa9e98054c sim/testsuite/sim/bfin/events.s +9194e783f65b9814642224e9f25cbd46 sim/testsuite/sim/bfin/link-2.s +7b5e37af9594bb8230a19acd5fd67be3 sim/testsuite/sim/bfin/issue146.S +4dbfd6347d36dffa04331cc48dc22823 sim/testsuite/sim/bfin/a12.s +e65f27e13032bd70344b5f4ca2f4e3d1 sim/testsuite/sim/bfin/usp.S +b71ec7e53324bbbd8d2a69f2bd33b847 sim/testsuite/sim/bfin/c_comp3op_dr_xor_dr.s +b2205c58c96b5ff5024e3552f71e8bfe sim/testsuite/sim/bfin/c_ldst_st_p_d_h.s +84e89730ffa6802a3e76571609bdc568 sim/testsuite/sim/bfin/c_dsp32alu_r_lh_a0pa1.s +823ab6c5b582159ed3156f292e53a616 sim/testsuite/sim/bfin/m4.s +374ba33694b1d3947f6fe225366ea2e2 sim/testsuite/sim/bfin/add_sub_acc.s +02ea7710d7bdd57573b410035304ef77 sim/testsuite/sim/bfin/c_dsp32mac_pair_a1a0_u.s +6a32eb370371776cbeadf39af94397a3 sim/testsuite/sim/bfin/c_interr_timer_reload.S +44be6a8c0e4da116f1cf04784c7edbaf sim/testsuite/sim/bfin/c_dsp32shiftim_lhh.s +4432ed7982dc2829e960c58290b59c78 sim/testsuite/sim/bfin/c_cc2stat_cc_ac.S +dd8c7a827d3385442a677da37a5dfd1b sim/testsuite/sim/bfin/c_calla_ljump.s +18baca4faff420cfa71b64d1946390af sim/testsuite/sim/bfin/lmu_cplb_multiple1.S +bf90d7be3a839a151d3b980c5a568d81 sim/testsuite/sim/bfin/c_dsp32mac_dr_a1a0_m.s +38ee4ebc782b080bdca44a7ad104b367 sim/testsuite/sim/bfin/c_dsp32shiftim_ahh.s +a941f2bd95e1a9c6d53c1fc352de3c15 sim/testsuite/sim/bfin/c_pushpopmultiple_dp_pair.s +d8266badab508a8826f43859dd855659 sim/testsuite/sim/bfin/c_alu2op_divq.s +f590d0735e056bd8c590035b957b5826 sim/testsuite/sim/bfin/c_dspldst_st_drlo_ipp.s +4b37b17f8310620e40e5bed04cbf34d0 sim/testsuite/sim/bfin/byteop3p.s +a683a817a3fcae70c07fbba61b39e42a sim/testsuite/sim/bfin/push-pop.s +23e167a7238a5a1c85568a68a0c5f1bd sim/testsuite/sim/bfin/c_ldimmhalf_lzhi_pr.s +1e29c62ba11b3ecd84882417712cb6c6 sim/testsuite/sim/bfin/c_dsp32alu_rl_rnd12_p.s +c76b1ba6345be810071425c51b272f39 sim/testsuite/sim/bfin/c_loopsetup_preg_lc0.s +71a5cb8a4a7efc32e8fd125c4c246478 sim/testsuite/sim/bfin/b0.S +5a7cecbb4ee6db24bad8d79bb817971e sim/testsuite/sim/bfin/c_dsp32mac_pair_a1_i.s +4066d22018a2beb3021d5b1ea6005a5c sim/testsuite/sim/bfin/vit_max2.s +efd317fd9cc11b487e458c384e388304 sim/testsuite/sim/bfin/c_dsp32shift_lhalf_lp.s +4d574debf12dbfa859a21f5b5ea8525c sim/testsuite/sim/bfin/c_dsp32mult_pair_is.s +6fd41f2722d0bfc282ba24571853be6f sim/testsuite/sim/bfin/b2.S +13a49a550bd64364582dfb2f4c55b8ec sim/testsuite/sim/bfin/b1.s +a38a4e8e7c161c39b496111d6dbfb345 sim/testsuite/sim/bfin/c_dsp32mac_a1a0.s +5b4b3c8947668b44024f7573aa41a3c0 sim/testsuite/sim/bfin/c_dsp32mult_dr_ih.s +adb4a45e5b38761e203ab20e11fb974d sim/testsuite/sim/bfin/c_dsp32mac_pair_a0_i.s +325e8de5d4d4df4b865840606dcec369 sim/testsuite/sim/bfin/c_dsp32mac_mix.s +76a6179e8196d0f5d4c577da74169eb9 sim/testsuite/sim/bfin/m17.s +2042f6af6a81c43df0f43c51909ea8f9 sim/testsuite/sim/bfin/s2.s +c87b30fe0f77b64239f6b47131fd85ea sim/testsuite/sim/bfin/c_dspldst_ld_dr_i.s +0ac31074477400190218b76cbfb04081 sim/testsuite/sim/bfin/se_loop_ppm.S +6d021622389b33a98ca17b46e48155d5 sim/testsuite/sim/bfin/c_progctrl_rts.s +e357b66625cd9a92afb9aa1bb2b13b35 sim/testsuite/sim/bfin/c_comp3op_dr_plus_dr.s +bd0cfce88fa75c60cff9abed7747b3b0 sim/testsuite/sim/bfin/c_dsp32shiftim_ahalf_lp_s.s +8085a49f7d5fbb3e235180a513e5dcc4 sim/testsuite/sim/bfin/c_dsp32mult_pair_m.s +cdd6c089fd870842e9b8ba197fd77e6d sim/testsuite/sim/bfin/c_ldst_st_p_d_mm_h.s +74f4b10b6c9964b12d3c44b6a341d1d2 sim/testsuite/sim/bfin/c_brcc_brt_nbp.s +504baf81cef0e4d165b39290b3f2cbaf sim/testsuite/sim/bfin/a4.s +75b0420469584da365a394464db6b89a sim/testsuite/sim/bfin/c_ldst_ld_d_p_mm_b.s +6ddad68a7da14e67d341bdbc97c65406 sim/testsuite/sim/bfin/c_ldst_st_p_d_pp_h.s +5f2f31aaf7ddcce2d121e9f6a041268d sim/testsuite/sim/bfin/random_0012.S +a14f5a0acb0c380f671daf117f5d9583 sim/testsuite/sim/bfin/m6.s +627b03bd369592577f54ac245a8ba092 sim/testsuite/sim/bfin/issue140.S +830873358fa2625f683592e65339855f sim/testsuite/sim/bfin/c_cactrl_iflush_pr.s +3efc9149a0e2f9f07ea01fa4ddaedee4 sim/testsuite/sim/bfin/l0.s +556eb406eb6f36662b30960e38811be9 sim/testsuite/sim/bfin/c_logi2op_nbittst.s +f58b8f9806b1e0865796d1fce45f8ad9 sim/testsuite/sim/bfin/abs-2.S +3c172f995ec6788fd2e9126790a72125 sim/testsuite/sim/bfin/a30.s +7f326130990513dd873ae854f722ab58 sim/testsuite/sim/bfin/c_dsp32mult_dr_m_u.s +29afc1fccf6b9388d4776c8c49f4504c sim/testsuite/sim/bfin/algnbug2.s +39aa5059d14ae39045b683ebe7baac92 sim/testsuite/sim/bfin/c_ldstpmod_ld_lohi.s +d6b458f69bce090e99f02a946dbd8924 sim/testsuite/sim/bfin/c_alu2op_conv_toggle.s +8a98945ecba5894f2f51293671d684b5 sim/testsuite/sim/bfin/issue272.S +777284035c8b07cb4482758e05f061fc sim/testsuite/sim/bfin/fsm.s +3157145d79f11a6ed11c8a530bee4379 sim/testsuite/sim/bfin/disalnexcpt_implicit.S +21e3db50248b4ecd49cb954982280b95 sim/testsuite/sim/bfin/c_dsp32mac_dr_a0_iu.s +d84a2971f3f177539863a792ed1ac453 sim/testsuite/sim/bfin/c_seq_wb_rti_lsmmrj_mvp.S +486a2039f7967291fb69c66f229ed256 sim/testsuite/sim/bfin/dsp_d0.s +934115caa1ea0fff7998b802b8586468 sim/testsuite/sim/bfin/c_dsp32alu_rmp.s +4289ee30ca00cc4c1cfe82d23f841f81 sim/testsuite/sim/bfin/issue119.s +ef808ff6b6b675ea0f869e4a6f1b6ea0 sim/testsuite/sim/bfin/c_dsp32alu_rl_rnd20_p.s +2c24a99468d45fc815503ab25453de2c sim/testsuite/sim/bfin/iir.s +67f0b5f309fb6d2824e23c755b9ed61c sim/testsuite/sim/bfin/se_loop_kill_dcr_01.S +4e3f3b2317ab7b109a784c6bdf2e7a68 sim/testsuite/sim/bfin/c_progctrl_call_pr.s +e0a8f327005ebf98cfbae855198e673b sim/testsuite/sim/bfin/c_ujump.s +bdd8697f19e73e79c6205238a40f6675 sim/testsuite/sim/bfin/c_seq_ac_raise_mv.S +975e7a2fb1598eb10fd7322ce95935f4 sim/testsuite/sim/bfin/c_regmv_acc_acc.s +25ecaac002a2b3c1b1f10850085222f2 sim/testsuite/sim/bfin/a22.s +ce3694f491fcc054dca897cc57c3ca6a sim/testsuite/sim/bfin/c_dsp32alu_minmin.s +6cfa5b42892230220a48a16418b3c3d5 sim/testsuite/sim/bfin/ashift_flags.s +01853f1b33357e1065f6947441e5e39c sim/testsuite/sim/bfin/c_interr_timer_tcount.S +74fc82fda7404bd11707760bc17da82e sim/testsuite/sim/bfin/c_dsp32alu_rpp.s +72341c4026360cabf2d1d012fddb0738 sim/testsuite/sim/bfin/seqstat.s +2a29e110be965db81d9044c135e73eaa sim/testsuite/sim/bfin/10436.s +fbb490ecdabf886e7c4521469222439a sim/testsuite/sim/bfin/c_dspldst_ld_drhi_i.s +eb04ff83aa89893fad9fb420200403b7 sim/testsuite/sim/bfin/c_ldst_ld_d_p_mm_h.s +f274a6ca7d830041c247c576c06de99a sim/testsuite/sim/bfin/c_dsp32shiftim_ahalf_lp.s +92170f5dbb753d5ffd2f8d0610573b4c sim/testsuite/sim/bfin/random_0009.S +14b590e5d1d86198c3c33ea8c6acab6f sim/testsuite/sim/bfin/c_ldstpmod_ld_h_xh.s +8e313cc5f4bb8f7ca74b13dbd7866529 sim/testsuite/sim/bfin/random_0005.S +7231e0d400de88be56af046f605e1d01 sim/testsuite/sim/bfin/se_loop_mv2lc.S +7e4431ab0a9d02222c01356205d18d02 sim/testsuite/sim/bfin/c_logi2op_bitclr.s +516f48e069742b7f0b2ff3191a0ac453 sim/testsuite/sim/bfin/PN_generator.s +6ba0a7c6a22e429b03766db06b087120 sim/testsuite/sim/bfin/a7.s +575ee0582bb25ac4030d2252146bc81f sim/testsuite/sim/bfin/c_dsp32alu_rl_m.s +4abdfcceb08a686a99a7b297868bc064 sim/testsuite/sim/bfin/c_dsp32alu_a_abs_a.s +441a164dc901c29dfb5b4e52066a2ca8 sim/testsuite/sim/bfin/issue121.s +7d34b4effdf092aace9765e2a9bc1176 sim/testsuite/sim/bfin/se_ssync.S +ac7d81780c473f5cc0a49bd0d4a6724b sim/testsuite/sim/bfin/c_dsp32alu_byteunpack.s +94d4074619c9f9c7130895ad3f8db837 sim/testsuite/sim/bfin/add_shift.S +92c60f8d686dfc9f2a366cad89e7ece3 sim/testsuite/sim/bfin/c_dsp32mult_pair_m_i.s +b2122d95582d1a7ab7c2d24168ffd279 sim/testsuite/sim/bfin/c_dsp32alu_rl_rnd12_m.s +c0343cc533bec4f90bea3ba91e7b248c sim/testsuite/sim/bfin/se_cc2stat_haz.S +c5b263008c222c94779326bb6ed293db sim/testsuite/sim/bfin/sign.s +3e72f2d28bb00b208ee1f519aafbfc15 sim/testsuite/sim/bfin/c_cc2stat_cc_av1.S +1340100f92473f52a90194ef5ebdc429 sim/testsuite/sim/bfin/se_cof.S +4461562f8353df458c20a7a46814ae2c sim/testsuite/sim/bfin/c_seq_ex1_brcc_mv_pop.S +f245e59995410a19938fe55bb800b863 sim/testsuite/sim/bfin/c_br_preg_killed_ac.s +4fd049069abba7dd37815855dbcac743 sim/testsuite/sim/bfin/c_dsp32mac_dr_a0_m.s +b67a4c4143323d9b1f677f5580116904 sim/testsuite/sim/bfin/c_ldstiifp_ld_preg.s +ef39a36b3b64f18de73a0f37e0ccb300 sim/testsuite/sim/bfin/c_dsp32shiftim_ahalf_ln_s.s +2924896e7a9325528c40cdf572c0c988 sim/testsuite/sim/bfin/mdma-32bit-1d-neg-count.c +2c924b9de723a5d3eb663ff180a74942 sim/testsuite/sim/bfin/c_linkage.s +ffbbf13b250921f57d6a39018f7ae7b4 sim/testsuite/sim/bfin/c_ldstpmod_st_dr_hi.s +7855445bb4565384616e2a5ef02b96c4 sim/testsuite/sim/bfin/dbg_jmp_src_kill.S +e159310a1ee9029a180827603c0f9221 sim/testsuite/sim/bfin/se_all32bitopcodes.lds +f8411086235a72897b1ec70f8f7869ef sim/testsuite/sim/bfin/c_dsp32alu_byteop3.s +c367e567061381b947e716080b35776d sim/testsuite/sim/bfin/c_seq_ex3_raise_ls_mmrj_mvp.S +038ae1a6188135762e0473477ee7b6b1 sim/testsuite/sim/bfin/c_except_user_mode.S +30aa9272252e64359cc656b4a65dda30 sim/testsuite/sim/bfin/c_dsp32mac_dr_a1_t.s +2ea489b4cb1b207f1081fbea5017ddb4 sim/testsuite/sim/bfin/fact.s +c12c93fda6fe2eeed8e5d11aeb4ec373 sim/testsuite/sim/bfin/issue109.s +0c51ec21092eb2e02382247ad5f3a59e sim/testsuite/sim/bfin/pushpopreg_1.s +f61308b31a81b3d1a2f994c67eb0ffbb sim/testsuite/sim/bfin/c_mmr_ppop_illegal_adr.S +e5b207681d3e6bf5142bf642322e06dc sim/testsuite/sim/bfin/random_0036.S +c68e7cc61a6104706788f5e3fd53a19f sim/testsuite/sim/bfin/c_ccflag_dr_dr.s +96e8946c463d6f506af8dabc3dd6862d sim/testsuite/sim/bfin/d2.s +8b56d7fe27a4dbdefb839f5bb61c5354 sim/testsuite/sim/bfin/c_ccflag_dr_imm3.s +057ccb2e2c4511efec2ab3ca4e6953a9 sim/testsuite/sim/bfin/random_0037.S +25d69367eb66a4f38be9e8e1e1f801b9 sim/testsuite/sim/bfin/vec-neg-2.S +eb803ed13c6411f17be07d1abc6c0102 sim/testsuite/sim/bfin/c_dsp32shift_align8.s +ee9f4503030fa697020fec9dd3302be7 sim/testsuite/sim/bfin/mdma-32bit-1d.c +ba398a4a19fc48009b81eed9729d2b95 sim/testsuite/sim/bfin/se_loop_ppm_1.S +80f2a5b5de73ac8a35f74c96f871d3f3 sim/testsuite/sim/bfin/se_excpt_ssstep.S +b934faefc613023c349422e9dad71bdf sim/testsuite/sim/bfin/testutils.inc +26677d6c22a4bf258143094ea7562ff8 sim/testsuite/sim/bfin/m15.s +b3e0868d8f297001d2031ef40a624d81 sim/testsuite/sim/bfin/syscfg.s +da4aedf837292494d3dfa48e60d853b6 sim/testsuite/sim/bfin/issue127.s +3ec1b2c60af24e53ef88912f465d2ee1 sim/testsuite/sim/bfin/c_seq_ex2_mmr_mvpop.S +81a9744f66ec0886038aacebbf3cc40a sim/testsuite/sim/bfin/c_dsp32shift_fextx.s +e5ee894fb6f60c25f7c0031c0c617824 sim/testsuite/sim/bfin/c_cc2stat_cc_av0.S +2ded8381fd85e54ead834ff4dc931d37 sim/testsuite/sim/bfin/c_regmv_dr_dr.s +58f27e5aa0e3ca0414b67c1298f1e4aa sim/testsuite/sim/bfin/c_seq_ex2_raise_mmr_mvpop.S +4cbe899245aabaf314047e6bf4c8837b sim/testsuite/sim/bfin/a0.s +baea1b9a5026d2a17dd43213a1c86577 sim/testsuite/sim/bfin/issue103.s +833b4f1e8dc7656ca204c479b56b1f65 sim/testsuite/sim/bfin/c_regmv_imlb_pr.s +f785f5869cbf5940ee18b5aa3a52148a sim/testsuite/sim/bfin/c_dsp32alu_min.s +f44834771977f97e0a37160e864cc237 sim/testsuite/sim/bfin/c_ldstpmod_st_lohi.s +afc38d644b79ce377b785d12be8ed004 sim/testsuite/sim/bfin/c_alu2op_log_r_sft.s +924386049344ee96f174ca3b9ee443d8 sim/testsuite/sim/bfin/c_ldst_ld_d_p_mm_xh.s +7c80537c314fb07da1f003f0559fd470 sim/testsuite/sim/bfin/a21.s +df4ad401b58e03100301ad8b42d6e90f sim/testsuite/sim/bfin/dbg_tr_basic.S +eaf5a39866ba7d126f4cdbf8d9af3490 sim/testsuite/sim/bfin/push-pop-multiple.s +f2429cead7427dae5cbe067ca8fa37d4 sim/testsuite/sim/bfin/c_seq_ex3_ls_mmrj_mvp.S +6f4504ecc18a086047c696128e162283 sim/testsuite/sim/bfin/c_logi2op_bittst.s +2881313baa1b2a527541eb9d1c4ac747 sim/testsuite/sim/bfin/se_ssstep_dagprotviol.S +1c5f113f562e1f2fa7b221a72de925c3 sim/testsuite/sim/bfin/c_dsp32mult_dr_i.s +b5ce410338ea218958f0b3fce782c95e sim/testsuite/sim/bfin/up0.s +3b569cae462dfcbe76b0011e7f849595 sim/testsuite/sim/bfin/c_dsp32mac_pair_mix.s +e3870c9fecda7cf9e76042bfa82638ff sim/testsuite/sim/bfin/random_0026.S +5127752e35d5caffc9284ce295c26609 sim/testsuite/sim/bfin/neg-3.S +fa94045af9a8b611ac508d0288d5c842 sim/testsuite/sim/bfin/saatest.s +89eda52cc4dd92c4ae955a972917b0c5 sim/testsuite/sim/bfin/c_dsp32shift_lhalf_rp.s +259e9bd5e7343e0a2caacd00c59a63c7 sim/testsuite/sim/bfin/vec-abs-2.S +045c4438923798b029cab0ea00ff2da9 sim/testsuite/sim/bfin/m10.s +c6102e6b089e764bde2cc83307e5cdf3 sim/testsuite/sim/bfin/c_mode_user.S +f33d1e11c6407f180e8d0e06cb4f1ac5 sim/testsuite/sim/bfin/cec-multi-pending.S +3827576eb9322edfd6e140922744eea8 sim/testsuite/sim/bfin/c_dsp32alu_rl_p.s +bc1fe58c2bc14bf3cfa813fc2f45fd92 sim/testsuite/sim/bfin/x1.s +5e2ff48a78227fb512f96eb4c2c144ba sim/testsuite/sim/bfin/c_dsp32mult_dr_t.s +61213925c07929df9fb92f78b39b0d6e sim/testsuite/sim/bfin/hwloop-branch-in.s +098e516f7c3fb60b5ed988d2f3ebeb72 sim/testsuite/sim/bfin/c_brcc_bp1.s +8abdfd7a925783362be43d9f82a6d3d0 sim/testsuite/sim/bfin/lmu_excpt_default.S +0edad0d424279420153e3039fe68eff6 sim/testsuite/sim/bfin/quadaddsub.s +87262f9ef78e2dbca89062a0678afbae sim/testsuite/sim/bfin/c_dsp32shiftim_lhalf_rn.s +1524b06b1f99bcd52f20be40892d9700 sim/testsuite/sim/bfin/c_dsp32alu_rh_p.s +d492b75281b396c084734fb6a4773d31 sim/testsuite/sim/bfin/load.s +cb19bbd25630689fef53145be992a2e9 sim/testsuite/sim/bfin/c_except_illopcode.S +18e3172d8ad33e233ae2727d86026942 sim/testsuite/sim/bfin/c_dsp32shift_ahalf_rp_s.s +7a9860a13de6ba9f477189487d72aaa0 sim/testsuite/sim/bfin/cc-alu.S +1935c735f699cd85d12cbf2726cffada sim/testsuite/sim/bfin/cmpacc.s +7ad1e5ed9f87fe9c333b65ca1cdf8b0b sim/testsuite/sim/bfin/c_regmv_imlb_dep_nostall.s +e01849a2a91f6a30da3b9580bd8f40c4 sim/testsuite/sim/bfin/pr.s +a52cded4efdca5072c44fe9eda94d582 sim/testsuite/sim/bfin/dsp_s1.s +90e5fd3dae567016a251cc4a2b2d2355 sim/testsuite/sim/bfin/c_ldstpmod_st_dr_lo.s +6c2d919f6fe0d37bd8ed6af6adf81eac sim/testsuite/sim/bfin/m11.s 90c1608fefd22ad6125d1da24d83e2c7 sim/testsuite/sim/avr/ChangeLog +36ed650ac92cb0cb94abd553604742e7 sim/testsuite/sim/avr/pass.s a6b14341bb166125b02d58f2236cc18c sim/testsuite/sim/avr/allinsn.exp 43a8057ebfdba36d78e2b194390ec762 sim/testsuite/sim/avr/testutils.inc -36ed650ac92cb0cb94abd553604742e7 sim/testsuite/sim/avr/pass.s -e4d7b5f7b79d4c00e59216eb26492217 sim/testsuite/sim/mips/utils-fpu.inc -b19e0c53b685c87920887bc87dba4579 sim/testsuite/sim/mips/sanity.s -38b28c4bc2a1948a9ca7ba32172f322c sim/testsuite/sim/mips/ChangeLog -a03de6a99ffab6c5318c149a099a9892 sim/testsuite/sim/mips/hilo-hazard-4.s -010a7642804f84eed2c5d95c2e113505 sim/testsuite/sim/mips/hilo-hazard-1.s -02725ea588520413b03083318e76a5ba sim/testsuite/sim/mips/mdmx-ob.s -3390a0dcf40d77780f335e03f8fbd4fa sim/testsuite/sim/mips/mips32-dsp2.s -4de7b9b57439859bc4e6cee797146d37 sim/testsuite/sim/mips/testutils.inc -4a5328391392623d88e0157152bf5cdc sim/testsuite/sim/mips/hilo-hazard-2.s -644244e2904ebf08a75b5b4807896a64 sim/testsuite/sim/mips/basic.exp -a7cc9277eb6ba36b256b2c80492d102d sim/testsuite/sim/mips/hilo-hazard-3.s -cd6fe7d366800bc4e5e23dfe6dd54909 sim/testsuite/sim/mips/utils-dsp.inc -d1e815282dd9f91b95235ce2bae81c51 sim/testsuite/sim/mips/mips32-dsp.s -e0d825bc919d1cecf677c3a680ae289e sim/testsuite/sim/mips/fpu64-ps-sb1.s -23824f277c77ae50de4132ab689dc997 sim/testsuite/sim/mips/fpu64-ps.s -f535e37ff22fed8de46db57afce1f650 sim/testsuite/sim/mips/mdmx-ob-sb1.s -5192a99a3e149ac8542048870200ef05 sim/testsuite/sim/mips/utils-mdmx.inc -8462b9b309b80233a69359cd1570f186 sim/testsuite/sim/m32c/ChangeLog -ee2e2048ad3b20e96eacce714c3eeff8 sim/testsuite/sim/m32c/allinsn.exp -d789e5d511725b1d26f262bb1e5f84cd sim/testsuite/sim/m32c/fail.s -b3aa23513fe4ddda7a485917bf44cc88 sim/testsuite/sim/m32c/testutils.inc -7fac97a3c2230d37b7172d2ec6c0c8c2 sim/testsuite/sim/m32c/sample2.c -45baca2987e49bf6be54cb5281cbc847 sim/testsuite/sim/m32c/sample.ld -e586dba31d51bcf7879915783739a85b sim/testsuite/sim/m32c/gloss.s -f9d4b95af2f8da92333976e04d3894fe sim/testsuite/sim/m32c/sample.s -20c6539a7e7b89068eaa9b6966db0ca2 sim/testsuite/sim/m32c/pass.s -b730cf1c18f3bb79c6d1632b2ac4a7e9 sim/testsuite/sim/m32c/blinky.s -b03f73b590c393cd710f753106cd5184 sim/testsuite/frv-elf/ChangeLog -ca5d7345bde4b101f716cc24502fc90b sim/testsuite/frv-elf/configure -e30b4c8b1165f133ffd45b28034a33a7 sim/testsuite/frv-elf/grloop.s -cdfd13107641dc366d7f36ada4f5ad87 sim/testsuite/frv-elf/configure.ac -ad3cb74cb4f5e1145c323d436230b3f4 sim/testsuite/frv-elf/cache.s -02ebc2d23f1397660d56c21d6a0866c6 sim/testsuite/frv-elf/loop.s -cc16675e19f20d246b81ba1aa64e2c05 sim/testsuite/frv-elf/hello.s -308de2bf11afe8d602008840020069d5 sim/testsuite/frv-elf/Makefile.in -70ca72190bc26acee97deb6d5974053f sim/testsuite/frv-elf/exit47.s -8b1814b871166305ec8fc7a06cc9a84d sim/testsuite/common/Make-common.in -9980219e011c42205bbd14e46d21fc8f sim/testsuite/common/alu-n-tst.h -68d1a56b235a7b4b566344f06575f051 sim/testsuite/common/bits-gen.c -2c97e49ca99e657e07ca12a6fd5d6f69 sim/testsuite/common/bits-tst.c -56912c8f1ff672daf4dbab4a0fb12a54 sim/testsuite/common/alu-tst.c -874ac49fc37d49f2822c8b409d285004 sim/testsuite/common/fpu-tst.c -09db0759c17936e2d8cf6dea6eda8fb1 sim/testsuite/common/Makefile.in -c61c5fd4a6a85120020dea1782d72d65 sim/testsuite/d10v-elf/t-mvtac.s -6a1e686613656c7345b1feb238e31066 sim/testsuite/d10v-elf/t-ae-st-ip.s -03e85e80ad387361ee238b2b0a1b5a20 sim/testsuite/d10v-elf/ChangeLog -655e71f960343e657e230eba7ecb5f61 sim/testsuite/d10v-elf/t-sp.s -94f087c25d14650e94905d367ac781c8 sim/testsuite/d10v-elf/t-ae-ld2w-im.s -ca5d7345bde4b101f716cc24502fc90b sim/testsuite/d10v-elf/configure -246424eed873ed649d2a32c1de0a12cb sim/testsuite/d10v-elf/t-ae-ld-d.s -2e29d477a767f8c3e7b9806e5061b73a sim/testsuite/d10v-elf/t-sac.s -e407a9027a51a971d55c14a9deac7d15 sim/testsuite/d10v-elf/t-ae-ld2w-i.s -2c65c61ce821576fd7642ae775e053ee sim/testsuite/d10v-elf/t-ae-st2w-i.s -9324e63160953a8b19ec76988361aa95 sim/testsuite/d10v-elf/t-dbt.s -34070ba49d956128040f988eb91c46b7 sim/testsuite/d10v-elf/t-sachi.s -d68929f5405fbc0fa82b417d61e8389c sim/testsuite/d10v-elf/t-rep.s -b318831c796a5daf3c008a72a1bcff77 sim/testsuite/d10v-elf/t-rte.s -fcab1b7a79a3a82158f92a79f01fc1b6 sim/testsuite/d10v-elf/t-ld-st.s -cdfd13107641dc366d7f36ada4f5ad87 sim/testsuite/d10v-elf/configure.ac -3bf62ddddb5d760ebd4a96790f02efd9 sim/testsuite/d10v-elf/t-sub2w.s -c52f1cfa2ba8e7eb55aa93e564a0164f sim/testsuite/d10v-elf/t-ae-st-i.s -744e0ee2abcec900b154f72ccf20434f sim/testsuite/d10v-elf/t-mvtc.s -ec7bb92d79cec389c2cf4685d0c91150 sim/testsuite/d10v-elf/t-slae.s -dd04c4735e06d614b03e76a552d4fcb6 sim/testsuite/d10v-elf/t-subi.s -ccf5bb0090436bc56ae6e5ab152f9be6 sim/testsuite/d10v-elf/t-ae-st-d.s -75cd5a849fb6a73f45b92c5173201ad0 sim/testsuite/d10v-elf/t-ae-ld-ip.s -44c3061ac426dfdcf4a850fe15376b2f sim/testsuite/d10v-elf/t-ae-st2w-im.s -be230dfdf2fc8a9548a086fd285ea00e sim/testsuite/d10v-elf/t-mulxu.s -670f5bcbd96246bf460d84b57bea1102 sim/testsuite/d10v-elf/t-ae-st2w-is.s -f831b90857d7d08faa607a4c5d2fc618 sim/testsuite/d10v-elf/t-ae-st2w-d.s -0492a673d4276924c61d9ce568802546 sim/testsuite/d10v-elf/t-ae-st2w-ip.s -880e8e02eb0c803c436bfc733723664c sim/testsuite/d10v-elf/t-ae-ld2w-d.s -24adce9358d8640ca6ae226ecbeb41c7 sim/testsuite/d10v-elf/t-mac.s -a25febe699e92863dd860f733c9dd22d sim/testsuite/d10v-elf/t-ae-st-im.s -6e39b3ee1a1f446f2aea2265a13e824e sim/testsuite/d10v-elf/t-ae-st2w-id.s -f9e7c86333f37f05849bb0913d84040e sim/testsuite/d10v-elf/loop.s -e8c67bf69426a7db6ecb7c2cafcc0a99 sim/testsuite/d10v-elf/t-sadd.s -df56df219276d06d750e8fb6f6b1581b sim/testsuite/d10v-elf/hello.s -d35bfeba95637ae41856f6692744cbdb sim/testsuite/d10v-elf/t-ae-ld2w-ip.s -ace81e2c0d0d2ac060e2172d5fc8e655 sim/testsuite/d10v-elf/t-macros.i -ba2eb8bb4b43be12c27308bebccab16d sim/testsuite/d10v-elf/t-msbu.s -d028e41377d7e4afcdc3b979f9e026d7 sim/testsuite/d10v-elf/t-mod-ld-pre.s -202b3272059c697b714c5f14d21e8418 sim/testsuite/d10v-elf/t-rac.s -5850459c815d7a2cea95632d02288d93 sim/testsuite/d10v-elf/t-rachi.s -266aa2fe095d30aad29b83c25851971e sim/testsuite/d10v-elf/t-ae-ld-im.s -d3f2b6a8713945840267c5b38031db57 sim/testsuite/d10v-elf/t-rdt.s -517096aa5ab9c0e44c70c067d41b0536 sim/testsuite/d10v-elf/t-ae-ld-i.s -c2989be701fa58229f9d2c51d1d89b9a sim/testsuite/d10v-elf/t-rie-xx.s -67a11da95718e0f31001311302fe7743 sim/testsuite/d10v-elf/t-sub.s -7edbadafb83e173b875ef37b4728d3f9 sim/testsuite/d10v-elf/t-ae-st-is.s -776264e34418e424ca53627692e3170d sim/testsuite/d10v-elf/t-ae-st-id.s -1d77729ab41b4cc1ef00c09482ec6715 sim/testsuite/d10v-elf/t-ae-ld-id.s -3b139d94efcc709b303318543337cee4 sim/testsuite/d10v-elf/t-ae-ld2w-id.s -b5b7dcb39e5fe37d20f5fbad5c205b6a sim/testsuite/d10v-elf/t-trap.s -266a8118af480d218fccc40328bbdfc7 sim/testsuite/d10v-elf/Makefile.in -2092af64ed30dac7b430156bd2387770 sim/testsuite/d10v-elf/exit47.s -1960370230b8bb2e6258fbcf54b808fc sim/testsuite/Makefile.in +a23328e3a895483960b3e5f646ed3f1d sim/testsuite/sim/aarch64/fcvtz.s +5671a78df36d1753f5ce753e0e03ab98 sim/testsuite/sim/aarch64/sumulh.s +7109e21c036b925dc3d9d822faa6d47d sim/testsuite/sim/aarch64/bit.s +cee852180398487c364c92b459e0c145 sim/testsuite/sim/aarch64/mla.s +4a952ef725e547b3ceaddfc5a5e4b82f sim/testsuite/sim/aarch64/stn_single.s +d35efcec3c41929d568952abf56ca787 sim/testsuite/sim/aarch64/ChangeLog +f1237777b4746501810c730fdf8257a9 sim/testsuite/sim/aarch64/addv.s +ec24554d375f8749003d441f17041e04 sim/testsuite/sim/aarch64/fminnm.s +75994af3ed8ae4f86428b1ccb9363b3f sim/testsuite/sim/aarch64/tbnz.s +e4bf893b5808655522560a909305f91c sim/testsuite/sim/aarch64/fcmp.s +a322bda4b01624fe4727f7e73ec0ab2f sim/testsuite/sim/aarch64/ldn_single.s +30f9aadb38fea9605c7184b0bf1a8486 sim/testsuite/sim/aarch64/pass.s +621f5b3c71738a53ec60c54f5347c2de sim/testsuite/sim/aarch64/fcmXX.s +dd93632a4ebde45ccfe85430b63241cd sim/testsuite/sim/aarch64/mul.s +1136807e5852fa056f6807695cc176da sim/testsuite/sim/aarch64/mls.s +6c56b6f2a3cd0fd10d27263f129219fc sim/testsuite/sim/aarch64/cnt.s +0afd0180ee05670f0859a0cfa85a66f9 sim/testsuite/sim/aarch64/sumov.s +4edaabc5a3ba4982ab32bea48d0f464a sim/testsuite/sim/aarch64/allinsn.exp +bdb357eabb1f4ec8a0dcf656a57e6f54 sim/testsuite/sim/aarch64/fcvtl.s +bec396512149783f9d2330395644573c sim/testsuite/sim/aarch64/stn_multiple.s +8d86c2045b41742d36c9f05321d7ee41 sim/testsuite/sim/aarch64/adds.s +68bbc6b07a27f3b8f9218ef2ec72ed96 sim/testsuite/sim/aarch64/ldn_multiple.s +c272478e11f857623422c69c32c347e7 sim/testsuite/sim/aarch64/xtl.s +cb2b29ddb2fdbbc37686649386f70b38 sim/testsuite/sim/aarch64/fstur.s +1b6f6400a8d5a5aad32a6de6700a3bc6 sim/testsuite/sim/aarch64/fcsel.s +d8c2c4227ed84e11b21a51c51ab69190 sim/testsuite/sim/aarch64/uzp.s +ddead3f07c4c76c4990369055ef6d480 sim/testsuite/sim/aarch64/xtn.s +edac53ddf7bbcdb9dce90e3f897880a7 sim/testsuite/sim/aarch64/ldnr.s +23807c76116e06c31ecaf6b71ac14338 sim/testsuite/sim/aarch64/testutils.inc +22ce20e8ac1596b43d27566fec1d0df3 sim/testsuite/sim/aarch64/cmtst.s +d50525f9a6f81b5f5715621df21fe424 sim/testsuite/sim/or1k/and.S +872c3c7f32b1c0521e7daf2950e7960f sim/testsuite/sim/or1k/div.S +28d4528c9175fb0c138ffaae1c563b64 sim/testsuite/sim/or1k/fpu64a32-unordered.S +05a186e7f4ae8f3840516440a2a29e77 sim/testsuite/sim/or1k/ChangeLog +9b63f9f3e584d24d4e684ac51cd41c42 sim/testsuite/sim/or1k/or1k-asm-test.h +b90e0534e66902632ff8b92b7956b945 sim/testsuite/sim/or1k/or1k-asm-test-helpers.h +f25cc0f52324a2650717e74258e9245f sim/testsuite/sim/or1k/alltests.exp +6ac323b3773a353e7311b61ab8fda455 sim/testsuite/sim/or1k/fpu64a32.S +f87f00bcdba8395630f7ab8cb699d17a sim/testsuite/sim/or1k/or1k-test.ld +067e752c176e504c3b837ff1a2f0829f sim/testsuite/sim/or1k/load.S +c373a1fe3fe1b7c3286bde17d756584e sim/testsuite/sim/or1k/sub.S +d66696a80948bd275e09d939c8f97017 sim/testsuite/sim/or1k/spr-defs.h +e4f43cab69ef02b346be9367befd9636 sim/testsuite/sim/or1k/fpu.S +b56affe390f2c1a746572fd6519b3452 sim/testsuite/sim/or1k/or1k-asm.h +b3aaa4ef81571a5cd361d836eb0124db sim/testsuite/sim/or1k/flag.S +b0140039bef5c7fc753c8612afad5ed8 sim/testsuite/sim/or1k/or1k-asm-test-env.h +0afd94645a667addd307b752728a6f4c sim/testsuite/sim/or1k/fpu-unordered.S +15cb35d177e94ceeb692c33ec99889f8 sim/testsuite/sim/or1k/mfspr.S +47ae156ff0073cd9fd58fd3af9db7b68 sim/testsuite/sim/or1k/add.S +d0b89746f28259e14a602136c2910d54 sim/testsuite/sim/or1k/basic.S +3132e26467a81cc8a9b87b9ab4e09fda sim/testsuite/sim/or1k/adrp.S +23bcef8628f64d8b8a5b01b3deba7782 sim/testsuite/sim/or1k/mul.S +faac85c6a34e37575750f3be9d4aff4f sim/testsuite/sim/or1k/shift.S +e45197087bf304eab2150ab1fe0de825 sim/testsuite/sim/or1k/jump.S +2c1348dc8451e5aea6ed4dfebdab4851 sim/testsuite/sim/or1k/mac.S +2f23222b715b5d55980813d6d3e6f6a0 sim/testsuite/sim/or1k/ror.S +b4cc588e3047d75e8699ec261d71ee84 sim/testsuite/sim/or1k/find.S +aa9e080fd345a8b72b6598ade0d5e969 sim/testsuite/sim/or1k/or.S +84e762c32d17461762a81a16bd2aae1b sim/testsuite/sim/or1k/xor.S +0eeb4d9cc563928458f17f007dd76f90 sim/testsuite/sim/or1k/ext.S +16834904d188192c7fbb15f488c53087 sim/testsuite/sim/m32r/add.cgs +cc4e95eb280ae19c0d22b639bc9fc601 sim/testsuite/sim/m32r/sth.cgs +a7b10e6f679c84fe5b2db48164037526 sim/testsuite/sim/m32r/addv.cgs +0e4b1ac17d86c08b1d98e90ee379e7c8 sim/testsuite/sim/m32r/cmpui.cgs +bcd9f3fee3d28ed1096a5ef6514c0538 sim/testsuite/sim/m32r/bgez.cgs +b5eba276aa402a66811d04183ae7da9b sim/testsuite/sim/m32r/bc8.cgs +c66238280149c9f42dd1e19852afd136 sim/testsuite/sim/m32r/st-plus.cgs +4adb31d9941df9283e7d046457611c97 sim/testsuite/sim/m32r/or3.cgs +17924a13af249ae4d0a6df996e622124 sim/testsuite/sim/m32r/misc.exp +6b678d4461818ce7834941045cbfcd01 sim/testsuite/sim/m32r/ChangeLog +5422abf5a05ea36c524bac97c177f79a sim/testsuite/sim/m32r/ldub-d.cgs +5b9e264b3d7e3e123150e7933e9776bf sim/testsuite/sim/m32r/sth-d.cgs +806b43d4fd12897c2b02e9b2f876b308 sim/testsuite/sim/m32r/srl3.cgs +749a9149d30e113900b3f089779740ed sim/testsuite/sim/m32r/uwrite32.ms +7d8da1455d2cd44a51707b07b4b00977 sim/testsuite/sim/m32r/cmpi.cgs +672b4886a81c13ca0bf05d1df568df5f sim/testsuite/sim/m32r/sll.cgs +2bd489b3cdd376a0a6b2de5f4a26712f sim/testsuite/sim/m32r/bnez.cgs +30cfed398315d692a3de98e4c67f90af sim/testsuite/sim/m32r/addv3.cgs +98c363f615a992eebb741216c4b99238 sim/testsuite/sim/m32r/neg.cgs +8cf9213ee7ef813787645bc4c9e12727 sim/testsuite/sim/m32r/addi.cgs +237457a459b83e66c0a0f95ba0842910 sim/testsuite/sim/m32r/sra3.cgs +34c7f8c3e919f9ba0f0b3c7caa68f237 sim/testsuite/sim/m32r/ld-d.cgs +e43074ac62cc10354b7a7759fe2fe869 sim/testsuite/sim/m32r/srli.cgs +7d5b3e41f7f293b573606e13d0a5c301 sim/testsuite/sim/m32r/and.cgs +29dd50ce15ab9c0d67791901e45a791d sim/testsuite/sim/m32r/ldi16.cgs +61391eba2b47c3b035c549673a100135 sim/testsuite/sim/m32r/bgtz.cgs +15a9f901cebcbc565c224f6c61c07326 sim/testsuite/sim/m32r/st-d.cgs +b464f9a46248faed5a856867decd109b sim/testsuite/sim/m32r/ldub.cgs +101e467bd8d9570809bd743b775e657d sim/testsuite/sim/m32r/ldh.cgs +6df2ea19b2030cc2ad6f1631641587a6 sim/testsuite/sim/m32r/uwrite16.ms +43914dad0473cf29fa8ba7483fcc42a1 sim/testsuite/sim/m32r/beq.cgs +0ebb2e3161db55a3203b65392361b6bd sim/testsuite/sim/m32r/bra8.cgs +55e96d8c138d454b947b0c627268410a sim/testsuite/sim/m32r/ldh-d.cgs +ae803eba46d3c6a6aa1c741aec2783be sim/testsuite/sim/m32r/bra24.cgs +88d455c342dfa2947283cd4e7b82f3a1 sim/testsuite/sim/m32r/st-minus.cgs +0ea66074ee25fd61d52074d38b4358e6 sim/testsuite/sim/m32r/mulhi.cgs +62c53b4fa4929b659e1b8f3dce7ed101 sim/testsuite/sim/m32r/hw-trap.ms +31a4c374f7d38d4214300cb58342cb7e sim/testsuite/sim/m32r/ldb.cgs +fbed9d4fe93ebbb695228b4a94655dd5 sim/testsuite/sim/m32r/mulwlo.cgs +8a79f97b82a93537f9d0afd46d1ce63e sim/testsuite/sim/m32r/slli.cgs +81e73b1946f04046a562428a766077ec sim/testsuite/sim/m32r/stb-d.cgs +7a9b903b84abb5fead9cdfdde1804492 sim/testsuite/sim/m32r/bne.cgs +60ce74d2420a29592309f2f3cbf0bb27 sim/testsuite/sim/m32r/mvfachi.cgs +a79a2f93fa80d613b872cc172ef3e9e8 sim/testsuite/sim/m32r/st.cgs +ec2520e6aae9332a6671d4c8a8e5b045 sim/testsuite/sim/m32r/rach.cgs +497cfa2e1bc18e2fadb92c99fbcadcab sim/testsuite/sim/m32r/mul.cgs +8e71d37539927768d17f19c43cfe41bf sim/testsuite/sim/m32r/ldb-d.cgs +f3f4a05a6d442fdb1a2dbe82fbc22d5e sim/testsuite/sim/m32r/hello.ms +dcbcafa8b504f5c1750e3a7f33d06b04 sim/testsuite/sim/m32r/ld.cgs +ddcce0a4e903b1df7a8d3f9d07b133b4 sim/testsuite/sim/m32r/ldi8.cgs +f57a1ae6784adef83a83d0fc96e627d3 sim/testsuite/sim/m32r/bc24.cgs +37da8b574adf3cb6f65a7119fab322a7 sim/testsuite/sim/m32r/sll3.cgs +8a180be9e21c1fcadb9dbbc751093bb2 sim/testsuite/sim/m32r/subv.cgs +518d60a9ec3ed23e3da2aff0b1456ac0 sim/testsuite/sim/m32r/mulwhi.cgs +a38ca2fe69cd52716f929b7be6ee5690 sim/testsuite/sim/m32r/blez.cgs +9c2236dea1f22183f110260aac6e7821 sim/testsuite/sim/m32r/mvfacmi.cgs +9041e76bd9e52d5245b6485c481ce1e3 sim/testsuite/sim/m32r/bl24.cgs +42e2898d542715203fac38dbabe95593 sim/testsuite/sim/m32r/macwhi.cgs +ab51940820c840824c1309f87b0c7430 sim/testsuite/sim/m32r/mvfaclo.cgs +787a6f21f2739736e0a79118443e311a sim/testsuite/sim/m32r/allinsn.exp +7d3d647734fda959f3b1e738c2b90222 sim/testsuite/sim/m32r/maclo.cgs +9c7bdcfc3ad3791fa0248573c2307cf9 sim/testsuite/sim/m32r/uread32.ms +8cfc6346c5ce5f4e7464057b25ec31b7 sim/testsuite/sim/m32r/mvtaclo.cgs +e200d0626a3a782b1ba827d77008622c sim/testsuite/sim/m32r/rte.cgs +8f0cac941aa884623e680f3e4ac0c8b1 sim/testsuite/sim/m32r/mvtc.cgs +38f45019c0a3b58549b0dba4f6595f20 sim/testsuite/sim/m32r/lduh-d.cgs +1e2a8c3e0cc7b5988cef7334bf2e14bf sim/testsuite/sim/m32r/cmpu.cgs +9171592763b85a01ee783cc5c814c696 sim/testsuite/sim/m32r/rac.cgs +d0c711109b91fb82235f2c7de6be93e0 sim/testsuite/sim/m32r/lduh.cgs +ee8c3058b6a4fc408f0725c7e0027956 sim/testsuite/sim/m32r/mvtachi.cgs +faf25008374bb5be6c2d003c079b6b62 sim/testsuite/sim/m32r/sub.cgs +a1584b288866f94579bbf2981c7d812e sim/testsuite/sim/m32r/ld24.cgs +42509b9f2bc28c62f815e3094e75f4ea sim/testsuite/sim/m32r/div.cgs +54efa34ea2ee72560aa9d26f7f557879 sim/testsuite/sim/m32r/trap.cgs +17eccc048da153abc362bee34fe42579 sim/testsuite/sim/m32r/lock.cgs +72ae1c84434e74d7a53d09e002ab9830 sim/testsuite/sim/m32r/jl.cgs +690ba3d9db8db10a35899c8eac122f65 sim/testsuite/sim/m32r/addx.cgs +a249bb8bdbaad16488d816dbd85eb1a1 sim/testsuite/sim/m32r/machi.cgs +ecaba0191d387d8875378bf790693bbe sim/testsuite/sim/m32r/mv.cgs +3795134a6b03341f5a6480f66e7c29f1 sim/testsuite/sim/m32r/xor3.cgs +aa647bf776c6497768956dd13b1bc0e6 sim/testsuite/sim/m32r/beqz.cgs +9be91c4daa50b174585b34804fadde45 sim/testsuite/sim/m32r/bl8.cgs +faf23b2f12b51357e3e72b13e79ecc7c sim/testsuite/sim/m32r/uread16.ms +1b3b8a230f2693ae45a566995a0b9775 sim/testsuite/sim/m32r/bnc24.cgs +b30f0ad9c59b0374e5b52f24e549ae36 sim/testsuite/sim/m32r/bltz.cgs +cda1698f1a6d640498ce3e6cd47add4f sim/testsuite/sim/m32r/srl.cgs +951d325ba4e7036401fa243439c0f27f sim/testsuite/sim/m32r/mullo.cgs +fc14b150efe66c251e584a8490ab411c sim/testsuite/sim/m32r/divu.cgs +d6a79a79477689d7e9bf45ff48a1d65c sim/testsuite/sim/m32r/stb.cgs +d863c2fc17c8b7509aa0996e8a3f15b4 sim/testsuite/sim/m32r/cmp.cgs +79728809577a7966c7f6d3e74eeeab11 sim/testsuite/sim/m32r/remu.cgs +b0703d4f2678b98efa516375d14989d8 sim/testsuite/sim/m32r/not.cgs +b29c344695a538384d37acf2acf3f974 sim/testsuite/sim/m32r/sra.cgs +57368ba4c4be662e4d7e09c2fbf73007 sim/testsuite/sim/m32r/nop.cgs +ae67e7de7ffee3af12ef63c7770eb6be sim/testsuite/sim/m32r/bnc8.cgs +e0e5a244234e059b9099534cde98fd29 sim/testsuite/sim/m32r/ld-plus.cgs +6f6c3fdb3474157358c545914bf2c510 sim/testsuite/sim/m32r/xor.cgs +45e6e4177ecd2fe6a1ecde8fcb839662 sim/testsuite/sim/m32r/testutils.inc +606cf06f01516f620ade2833b6f4272f sim/testsuite/sim/m32r/macwlo.cgs +9bd48d851532a2d84c1edf2872c9a66e sim/testsuite/sim/m32r/subx.cgs +966058aa7f21ef4a7874f1a0d9888543 sim/testsuite/sim/m32r/seth.cgs +c86fb3aef80e809c5161380443aec696 sim/testsuite/sim/m32r/srai.cgs +cfd913f0a5ee4bd41656b5e4283c96d1 sim/testsuite/sim/m32r/unlock.cgs +aa1ec114448f408800129388f774de40 sim/testsuite/sim/m32r/mvfc.cgs +3f2b2701b3579de8839bd35d25076d03 sim/testsuite/sim/m32r/jmp.cgs +241464dd5ebda3e9291399db7f07fde6 sim/testsuite/sim/m32r/rem.cgs +29e08614d0fde06b6322dad1cc619d93 sim/testsuite/sim/m32r/and3.cgs +9778769d1c0af0c0fc330032708ff835 sim/testsuite/sim/m32r/or.cgs +e9adf1458ab377d5d90d1678d2292bd5 sim/testsuite/sim/m32r/add3.cgs +c8756b053a5d9e80829d352796598ea4 sim/testsuite/sim/moxie/ChangeLog +45afa6965ba08c8912507f7b858ac267 sim/testsuite/sim/moxie/pass.s +924a8154da0b6d622606be982c2370c0 sim/testsuite/sim/moxie/allinsn.exp +3a75df45b7f573b5f697917a7f99a7cb sim/testsuite/sim/moxie/testutils.inc +5745f4f097642a8d3aa1e6f949b20d72 sim/testsuite/sim/h8300/ldc.s +677b0dc3ede8ba248cb652cab95b9b0c sim/testsuite/sim/h8300/band.s +893d0b1072d7416e133a80d501b49cd4 sim/testsuite/sim/h8300/biand.s +a537d28284905856ca4b2c9880fb5b0b sim/testsuite/sim/h8300/bset.s +376c12070675b9d7dd2c58e70ee98842 sim/testsuite/sim/h8300/andw.s +4e839f3223289908cd6e2ba525776dec sim/testsuite/sim/h8300/mova.s +7d8979aa7d14e2ab5d06dda89ca40b5c sim/testsuite/sim/h8300/ChangeLog +e0e2129ddb10014bc62124746c911369 sim/testsuite/sim/h8300/subx.s +caa5a5b27cbcbfaea63298e864279ae4 sim/testsuite/sim/h8300/extl.s +8ea8bfb6cddf05ef11ea7fb068e218e6 sim/testsuite/sim/h8300/xorl.s +0f85e20fbab15124e67dde283ee4b159 sim/testsuite/sim/h8300/shll.s +c5cc1774fded69045dd1d5a31e4eecc7 sim/testsuite/sim/h8300/jmp.s +f75f1bed46894927fbb7773bc84081fc sim/testsuite/sim/h8300/rotr.s +c55d9e46ef6b31eb575f129340b18dce sim/testsuite/sim/h8300/subs.s +7038c79de7fb4f02cd5ef969e2cffd30 sim/testsuite/sim/h8300/dec.s +db0176e7c9b6cb42862f2377e55312f5 sim/testsuite/sim/h8300/subw.s +99f82cb39a007343d1a5bd8c71960fcb sim/testsuite/sim/h8300/nop.s +637fafb5b7e807abbb1f528bca9cc697 sim/testsuite/sim/h8300/movsd.s +0412ca2321a01a8b7c32897e3f32dd37 sim/testsuite/sim/h8300/bra.s +4eecc1e3c8c3ef39f35071a0d35c126e sim/testsuite/sim/h8300/rotxr.s +16151c89821d742e389f60a77a9c4214 sim/testsuite/sim/h8300/cmpw.s +81e2e460e06fcf47b7ed621287bfbafa sim/testsuite/sim/h8300/tas.s +b99bd4670fdfe75f10e37ea480d537f0 sim/testsuite/sim/h8300/rotl.s +6fdb213d98f348f1c02d48ffcfd806e5 sim/testsuite/sim/h8300/andl.s +abfa7675b179fc4254e14cec675be772 sim/testsuite/sim/h8300/movl.s +677c2ca0cf5c9c3c593a7a9274859bba sim/testsuite/sim/h8300/ldm.s +9649dc0eb3a2346a3ce916dd57eb1b28 sim/testsuite/sim/h8300/mul.s +7032f158ede5e9c1fe95569152aac2a7 sim/testsuite/sim/h8300/das.s +63a01cd1ac69acaa0cb441c4f1ef5b89 sim/testsuite/sim/h8300/mac.s +62d2fe5825e86377f04ad0167a214c62 sim/testsuite/sim/h8300/orl.s +8cbc4afc2f6b11b850e0aec04ed1a473 sim/testsuite/sim/h8300/addx.s +9766c17a5c5cc1408ada3b9cc437ba28 sim/testsuite/sim/h8300/addw.s +8bfd3316d1c16f85273138771fdbbbf0 sim/testsuite/sim/h8300/movw.s +8ecc998cf6c3e91a5e2f7ca901c6baa2 sim/testsuite/sim/h8300/div.s +3b3ad8e7276c6719c8adfa92951bef0b sim/testsuite/sim/h8300/shlr.s +1b1082501d2ae954bf8cfe0ef39b83c2 sim/testsuite/sim/h8300/allinsn.exp +a159e301d3202b02c3d6ac416aeedcf6 sim/testsuite/sim/h8300/extw.s +307b4b54b70c077beb6b886ed1dadc9d sim/testsuite/sim/h8300/xorb.s +399b6e09a2ae39da12b2321cd0965b91 sim/testsuite/sim/h8300/addl.s +5d4de83de24b934dbec418f81b0fbc02 sim/testsuite/sim/h8300/cmpl.s +2373f3011c78310592feef6fe9432f0a sim/testsuite/sim/h8300/neg.s +2dad02e99bd1422af83cb4353b7e63c0 sim/testsuite/sim/h8300/adds.s +e2433fc36981757f93eb5bb4f1b039ac sim/testsuite/sim/h8300/brabc.s +7cf771780ab43e6a7a25ed05f8a17ee7 sim/testsuite/sim/h8300/movb.s +c0f7ecf275c71ba8ba57b2098887abf4 sim/testsuite/sim/h8300/movmd.s +388f4ab3999f0a563801fbdec2667f71 sim/testsuite/sim/h8300/inc.s +e1a2e3252f570905ffbdc48d6a44089d sim/testsuite/sim/h8300/stack.s +a1ed4f63b96068eaa77495745494ffea sim/testsuite/sim/h8300/not.s +4c711137a90bb2ba4b2f44ad3ef33ba7 sim/testsuite/sim/h8300/daa.s +a938731b6a18a4e389d565b373fdb164 sim/testsuite/sim/h8300/orb.s +dd6fabe64292ad56b43ca5532e790417 sim/testsuite/sim/h8300/cmpb.s +fce577f47862442fa9b2da616615c1d2 sim/testsuite/sim/h8300/bfld.s +0b8a477e0fbf76499733fc12811aa4c6 sim/testsuite/sim/h8300/shar.s +3b4dfe0168e63c6e80583c262c5de759 sim/testsuite/sim/h8300/rotxl.s +9b63ff9fbde1e63acd708924198b7242 sim/testsuite/sim/h8300/subb.s +5d42a1f9b287e529549796fef4c879c8 sim/testsuite/sim/h8300/orw.s +a63920fd12f48e551687aacc6bfae557 sim/testsuite/sim/h8300/subl.s +ce415b253063a7fe5cf02f17fb48faab sim/testsuite/sim/h8300/addb.s +90637fa47d75134bb5869022a29f120c sim/testsuite/sim/h8300/andb.s +ebd21badf420c5cee8b0d88a08868304 sim/testsuite/sim/h8300/stc.s +e889ba6121bfc3b32c11372b6d4c9dcd sim/testsuite/sim/h8300/testutils.inc +c2e57a11d5e455cef19248c2a0fb26b0 sim/testsuite/sim/h8300/xorw.s +ffef0a19e06ed3716630c870e2c78e97 sim/testsuite/sim/h8300/shal.s +f6b9347ade994720c41449cd3ba58b38 sim/testsuite/sim/ft32/ChangeLog +8f22d037e9bcf4a17409a2f387fe4339 sim/testsuite/sim/ft32/basic.s +f55f257cf5a6ca86d8027d0a057a4a2e sim/testsuite/sim/ft32/allinsn.exp +9b05eb7a4d099c690fd3feddc1339a65 sim/testsuite/sim/ft32/testutils.inc +c8756b053a5d9e80829d352796598ea4 sim/testsuite/sim/mn10300/ChangeLog +f1008efdebb1fcc26849a07a2bd82016 sim/testsuite/sim/mn10300/pass.s +cf7469367f928b2dc14f41c16aa834d2 sim/testsuite/sim/mn10300/allinsn.exp +455a7533e57981681d9784af176de3f6 sim/testsuite/sim/mn10300/testutils.inc +fac808112158b0d7c9a972b5c1e51ad9 sim/testsuite/sim/fr30/lsr.cgs +503d6096668d67d46c257e7895d84d31 sim/testsuite/sim/fr30/add.cgs +32b42ce0a2b13161bf8e4d8cab413410 sim/testsuite/sim/fr30/sth.cgs +ae7aebd1064ea16900d3b009feddd60d sim/testsuite/sim/fr30/addc.cgs +5e026ff1027b8aa7cb374c51b5c4b9e8 sim/testsuite/sim/fr30/stilm.cgs +9497d9229865b30c86f4e77508a9a406 sim/testsuite/sim/fr30/div0u.cgs +2ae5a90062cafe57f759112f5b2f3b06 sim/testsuite/sim/fr30/div4s.cgs +5948be319fc5808a6b19793d9e5bbc7d sim/testsuite/sim/fr30/andb.cgs +ff01a6642b097f295e29b8aad506bf20 sim/testsuite/sim/fr30/lsl.cgs +58553f1bced962c2d9f26ff2f53aecfc sim/testsuite/sim/fr30/misc.exp +c2961d1998d0f226e73fb2f0c8b37746 sim/testsuite/sim/fr30/bc.cgs +39e04e64c4d19c045c63ea3638083f1e sim/testsuite/sim/fr30/ChangeLog +cd116a2a1dac5e397ecc2f7456053564 sim/testsuite/sim/fr30/mov.cgs +107058d96ac7c888d901300eb006d5c3 sim/testsuite/sim/fr30/blt.cgs +85c3eb5c04a5558fa911df3e30e3679b sim/testsuite/sim/fr30/andccr.cgs +1a350c8e3f57a176585fc796b07bfc7d sim/testsuite/sim/fr30/dmovh.cgs +4e62467dd71697f7cf6d64cebf2531e8 sim/testsuite/sim/fr30/mulh.cgs +9f77138b83e182472a14212e5bb72352 sim/testsuite/sim/fr30/eorh.cgs +c0e8ab52947ed9bccc6646be37f2b82e sim/testsuite/sim/fr30/btstl.cgs +f32638a3919a1385e630a7e29518e0ed sim/testsuite/sim/fr30/subc.cgs +55b2418400196e2f3a85b8e6b696a252 sim/testsuite/sim/fr30/dmovb.cgs +3838077d837c2b8656d8a398cbf96482 sim/testsuite/sim/fr30/bandl.cgs +8987709e3323037c23eb5559a2a05b79 sim/testsuite/sim/fr30/and.cgs +2cf5b46fe78a0e966c03c134642e61c6 sim/testsuite/sim/fr30/orb.cgs +29f7caeaad4350f3f89236f16849b148 sim/testsuite/sim/fr30/bhi.cgs +9d0cb44436f746f3c9888587a0705941 sim/testsuite/sim/fr30/addn.cgs +5fc1b6eee6a98d786ad146de39bee17e sim/testsuite/sim/fr30/cmp2.cgs +cd540be2b820c7304d49a2cd4c804ebc sim/testsuite/sim/fr30/ldub.cgs +9d0e5f42019df498994f84948f9de403 sim/testsuite/sim/fr30/xchb.cgs +16372b76ce969bd0041202b277ab1aae sim/testsuite/sim/fr30/reti.cgs +006acd8b3fbfdfdc9cf751d3551da65b sim/testsuite/sim/fr30/extub.cgs +1986f8b31251f3fcfead747f2fbc2067 sim/testsuite/sim/fr30/div.ms +980de17f49e0206c409122a710bd9660 sim/testsuite/sim/fr30/ldres.cgs +e76365e82b93ee554e15a75585b0c27c sim/testsuite/sim/fr30/beq.cgs +6b9b96096efcac0f5ee86ff1b1327da4 sim/testsuite/sim/fr30/extuh.cgs +d9bcff3a1f3a6885615cb81215deb73d sim/testsuite/sim/fr30/ldi20.cgs +da584f1cf2dcd0f85046a64bc5d9ba5e sim/testsuite/sim/fr30/subn.cgs +8bca5d07304281074232cf501f58d578 sim/testsuite/sim/fr30/div0s.cgs +118242b7ecdaa35cdce8a8504e75b4be sim/testsuite/sim/fr30/bra.cgs +63da4dc66d15a7647a2b0612f35a8564 sim/testsuite/sim/fr30/bandh.cgs +6cc8644c6594267688e0cfa178a7bd73 sim/testsuite/sim/fr30/asr2.cgs +726473e3a587a7dc454557dc8b4c43db sim/testsuite/sim/fr30/add2.cgs +b4e156196e642664ce263f393a7f53be sim/testsuite/sim/fr30/bne.cgs +0c254917d1438ef4f7cb6dbd5683cf75 sim/testsuite/sim/fr30/beorl.cgs +ae8fa268a41ffb274a7a89b9f7344ac3 sim/testsuite/sim/fr30/st.cgs +5f28ff21c8db4465c66df254b3a6d631 sim/testsuite/sim/fr30/stm1.cgs +d82e1c778335479eb3257be5f4027f60 sim/testsuite/sim/fr30/copst.cgs +e6e56816b0dcb650c26b46a33cb1ffac sim/testsuite/sim/fr30/mul.cgs +a447d626d0829c31c4cc72b9aca610bc sim/testsuite/sim/fr30/int.cgs +76cd07dd7c78722fbbfa49bd94b5c61b sim/testsuite/sim/fr30/hello.ms +67ece84ba59ec30e07e99a8dfb888f56 sim/testsuite/sim/fr30/extsb.cgs +bd02ed7b7c8470f6853a555a57818cb3 sim/testsuite/sim/fr30/ld.cgs +05c014e0472c8041119ea95bda37df65 sim/testsuite/sim/fr30/ldi8.cgs +78f28bc2aa59a4a6dc4cdd7971e98108 sim/testsuite/sim/fr30/bno.cgs +50c15ddbc5bfffd5f9b4784313984dd1 sim/testsuite/sim/fr30/btsth.cgs +2d45aaaebfe96a478d94442f475255dd sim/testsuite/sim/fr30/div2.cgs +98f0923dc897604e64e47dd027c2fab1 sim/testsuite/sim/fr30/extsh.cgs +1df39f183df8aeeb7fa41d92384a0ad9 sim/testsuite/sim/fr30/enter.cgs +8f3d3ac55197c8d27a1bb6022ce7ab9c sim/testsuite/sim/fr30/copsv.cgs +825b7df0d31175f17fb30a27a90d6f05 sim/testsuite/sim/fr30/ble.cgs +fae958eef826c19e4e7640eb0378c0c9 sim/testsuite/sim/fr30/stm0.cgs +89bf2353814e13f2d5a94d209ace80f3 sim/testsuite/sim/fr30/ret.cgs +78fc35acbc4a167797bd863fd991a785 sim/testsuite/sim/fr30/allinsn.exp +692e2c452c77ecbc6b74405fbfb8764f sim/testsuite/sim/fr30/add.ms +5c29b0babb4c478e18950a01250bacdf sim/testsuite/sim/fr30/ldi32.cgs +18a90aaef63c891698afe734d2152d18 sim/testsuite/sim/fr30/dmov.cgs +f4b6c297ead375254a31836c88c758db sim/testsuite/sim/fr30/leave.cgs +40b06cc66fd096915a199de617efa043 sim/testsuite/sim/fr30/ldm1.cgs +63ca215997d767d234ca89fcd3e11968 sim/testsuite/sim/fr30/eorb.cgs +030942418ed8e981370a1d4e1489b9b2 sim/testsuite/sim/fr30/addn2.cgs +7f827594dfa2a9ea9cbdb822808bb96e sim/testsuite/sim/fr30/lduh.cgs +d01fa8a22cb8df995a868145d71bbf94 sim/testsuite/sim/fr30/orccr.cgs +e5b073abade7a63209ab21e8757714e5 sim/testsuite/sim/fr30/lsl2.cgs +8f9d88e4c545aca64898cbd90c3d16a4 sim/testsuite/sim/fr30/addsp.cgs +3ad5b0fdc53e83258fadc664f63c6a82 sim/testsuite/sim/fr30/sub.cgs +42628131079d04c855f5e218a162c210 sim/testsuite/sim/fr30/div1.cgs +b3436c5fa08665c3fd9b9d103bbfd4ca sim/testsuite/sim/fr30/bv.cgs +f419d8740920121331afb15e71725c80 sim/testsuite/sim/fr30/bnc.cgs +11ca26e18c1fa7c05d9980f28911fc84 sim/testsuite/sim/fr30/bn.cgs +bc265d868045395c100b7c74d441979a sim/testsuite/sim/fr30/eor.cgs +5f0977ee9d55754ffceaf3dc2242781d sim/testsuite/sim/fr30/bp.cgs +d33f46c321f6a6972442f4bade06656a sim/testsuite/sim/fr30/andh.cgs +8557874b84d96137c9d2163f29a20473 sim/testsuite/sim/fr30/orh.cgs +fa428bc4576d35a4d06fe83db66f1e20 sim/testsuite/sim/fr30/bls.cgs +93d8f4110bc336023847d2e425d27fac sim/testsuite/sim/fr30/borh.cgs +51632bbf7fcc2d274e4b7d4ee75b9786 sim/testsuite/sim/fr30/borl.cgs +c7f3e31654d7134dfec197a23c612f8d sim/testsuite/sim/fr30/inte.cgs +3daf2597d21b8195e0c0a1650be412df sim/testsuite/sim/fr30/asr.cgs +6c4bf429941803c250acd9ed35221ec8 sim/testsuite/sim/fr30/stb.cgs +d5c3720a8d9a8fa88fb45d97681466d2 sim/testsuite/sim/fr30/cmp.cgs +68e0c1e7bd73024e03d90e17d1b479e7 sim/testsuite/sim/fr30/copop.cgs +fd0034e39e50a5ad93071dbc6718e3b6 sim/testsuite/sim/fr30/beorh.cgs +ee0c0d6979b1682c427b387664c204a8 sim/testsuite/sim/fr30/muluh.cgs +201ea7a49f59a0a5e628e9b549bfb5b8 sim/testsuite/sim/fr30/mulu.cgs +68d1886400abacb8a7f24d72bda2a966 sim/testsuite/sim/fr30/nop.cgs +00ced4e4a8d48e061be334729bcf9972 sim/testsuite/sim/fr30/bnv.cgs +528b0bd224d9631b14de438842a363c4 sim/testsuite/sim/fr30/bge.cgs +c174cd3fd5b8667dbc7b7741ec7449e3 sim/testsuite/sim/fr30/testutils.inc +291df7a8065e554654d635d4319a6e07 sim/testsuite/sim/fr30/ldm0.cgs +546a174bd7aa7dfa4f54ba99e5b2d617 sim/testsuite/sim/fr30/stres.cgs +8656edc8211fb004093f703158a7c9ee sim/testsuite/sim/fr30/bgt.cgs +8fb50d3723a8e4fda2cca68f8138fc68 sim/testsuite/sim/fr30/lsr2.cgs +a92cc956b699bbdead9c1e8ea21b7d85 sim/testsuite/sim/fr30/jmp.cgs +82b175871b9a3802f2b0141fdbd69314 sim/testsuite/sim/fr30/div3.cgs +92b6ed80cfaf734393514a354f558e12 sim/testsuite/sim/fr30/copld.cgs +1fb7a6a1cbbdff7ba6882c47dc8b3071 sim/testsuite/sim/fr30/call.cgs +c8347c5b0effef1e42f0249483e5ac6a sim/testsuite/sim/fr30/or.cgs +6f85f5b126eda2839d687ef1b5cc9587 sim/testsuite/config/default.exp +b113c0bd55532c0b2c0000ed9d1ad2e2 sim/testsuite/lib/sim-defs.exp 4448a565fade03a70e100fb18519a9bd sim/testsuite/mips64el-elf/ChangeLog ca5d7345bde4b101f716cc24502fc90b sim/testsuite/mips64el-elf/configure cdfd13107641dc366d7f36ada4f5ad87 sim/testsuite/mips64el-elf/configure.ac -a26144cbd017c849def91a5559f34a70 sim/testsuite/mips64el-elf/Makefile.in -587912cfc56a3ad22382cc8f82d7453f sim/d10v/ChangeLog -aa86cbc835a69895d241d450d689efbb sim/d10v/configure -3de29307c7d847c6a4a851e4690fc70f sim/d10v/sim-main.h -e7dd365f1ca1a58020c813d6e9369075 sim/d10v/configure.ac -4ab55a35c7007d58ee370d38587e6907 sim/d10v/aclocal.m4 -0588da5709059f25ef93487a2068a8e7 sim/d10v/d10v_sim.h -79b3f19a4a961715ed1b3fc266e073d6 sim/d10v/config.in -0151d6f631ef5b3834e7d5a43304b55e sim/d10v/endian.c -030a61bc5d67ce1b8a537c7e93b9de11 sim/d10v/gencode.c -486ffceb0ca54037eb52857f2c2be17e sim/d10v/interp.c -2d351f4c1e1ef4458d9303a518f3495d sim/d10v/simops.c -bafb833f141775ea69b5267fb8da51d0 sim/d10v/Makefile.in -d0edaeece23a8a6706c96a0df3f1435b sim/igen/gen-itable.h -efb858fed2f42b409dc04df75156f137 sim/igen/gen-semantics.c -a1c25e3c8d3c24df3fe140ed7dffb8fb sim/igen/ChangeLog -a8455f5d2b980e9b3eb45b0724691733 sim/igen/configure -bd04dfff3cf3f875c61e00a159348f77 sim/igen/filter_host.h -d207c870a41b2b6ac9c1ea79e2c47fc0 sim/igen/gen-icache.h -4a07241f1dd9bf6e2547ea526f0c45ad sim/igen/gen-semantics.h -6722fd13365919453dc892f83c603b87 sim/igen/filter.c -8b5313c9b5a3884aa61790cabdd3b8ad sim/igen/igen.c -01ba98f4bf3f57447f291c1b6ae8d4de sim/igen/gen-support.c -01043ec6d11e1f66e46bb8328af8fee3 sim/igen/ld-cache.c -58f95b59f715bd7cc4444543e6a88fc8 sim/igen/configure.ac -b8881fa4e1412bc3ee48bb707caae9c9 sim/igen/ld-decode.c -3331a781b60c45350b0c66026adc21c1 sim/igen/lf.c -679ab14c09b54b79e5624408655d85c5 sim/igen/gen-support.h -82e6af32033989d5f473008c88fe6e96 sim/igen/gen-model.c -7ea9c5b3373fb58a4aae516c9e38e298 sim/igen/filter.h -d8d1182e02e92e58058323409b6869eb sim/igen/misc.c -2b7280047ff5742f8e3ae25afa373f2e sim/igen/filter_host.c -09a1d350ec5867102519af619b170873 sim/igen/gen.c -d0cabf86b9f5132cc979a29d76b1a1cf sim/igen/igen.h -e0d02ec22ef0ad8db44fdf2ed3e8b821 sim/igen/gen-model.h -cb4a17f6c586d8853a447b314fe5c1b9 sim/igen/misc.h -d58c6c5f64094ae53dba9a98436f815a sim/igen/table.h -211ed7f972fb5c5fecb0c858ab33bd1a sim/igen/gen-engine.h -6730f4ebc77890c006ea12f22d8545c5 sim/igen/ld-insn.h -290d600da66bd2846e6b8130844f4f38 sim/igen/config.in -8feb731e326717c34fb5f055bc7b02cd sim/igen/ld-decode.h -850cdc57d29978aaa1d3e3820c2e6b61 sim/igen/ld-insn.c -444397be905c72f3f9d15f45eb13248c sim/igen/ld-cache.h -578d512984b033d790f574a4cb5fb51e sim/igen/gen.h -436595f8901c3a0b32e8d55be1b4ee99 sim/igen/gen-engine.c -36bcd81c3e7142ad63dfad24f13344ab sim/igen/lf.h -601cf1342d1a6dcdf6ecf9aa03f1b4be sim/igen/gen-itable.c -ac352479d13cb43d87b2db40aea58178 sim/igen/gen-icache.c -d9ad4b809704b735c7377c90572cae8b sim/igen/compare_igen_models -e49eeda8e472334af961a790ae6fb79b sim/igen/gen-idecode.h -c657584c0af51e50ca8f86b23104f53e sim/igen/table.c -20af5867c479e49d742d12389046cfa0 sim/igen/Makefile.in -dbb7a37675fe6c2c91f4d82d6f06d64a sim/igen/gen-idecode.c -ed80475d4977926e592e226be6740dae sim/frv/options.c -2c6526691436fb935b9692acf0123625 sim/frv/ChangeLog -1a6cecfbc7de7a52a580e3c9e7a71389 sim/frv/configure -850ed4b41512c8b5068fe6238e3f173d sim/frv/profile-fr400.c -2bead58df450a5df134cd419731d6111 sim/frv/sim-main.h -bb41b0cabb1154a66ee25ea11a686fe9 sim/frv/mloop.in -7654a87bf1dcae23b22c79e86dea41ef sim/frv/configure.ac -ca6fb43ce7aff95925049df612edc591 sim/frv/model.c -63dc0e05f83a1ce95dbf0556886d3751 sim/frv/cache.h -852ffd41bf972dcc9e835c6b832650e7 sim/frv/decode.c -c75bd8c39868edc067e10de7f0449b1a sim/frv/registers.c -ccf8a08cc92102f9f3d21008f53fffd0 sim/frv/profile-fr500.c -7b13b7a75114ef6fa9a4f071bfc9d3ae sim/frv/cpuall.h -42e5ad94e4f04e9303921d7e30742ffa sim/frv/arch.c -01742cc0407ea20aa3fb219e92d38671 sim/frv/profile-fr550.c -c5ab09f8d65fbae26872c63284958121 sim/frv/frv-sim.h -2acc89f53801a00bf2c71200c3951032 sim/frv/sim-if.c -589a99acdc2bd99025cda1b8003d01a2 sim/frv/profile-fr550.h -cd4b5ed732df5e52dacac25b472f4309 sim/frv/profile-fr400.h -2576d3e17f9a6fcd2e75cec7b4001a08 sim/frv/reset.c -aac6131d81803ee69f1f31fb457def21 sim/frv/profile.h -4ab55a35c7007d58ee370d38587e6907 sim/frv/aclocal.m4 -02b6f8faa323ede14d717f37e1858bb2 sim/frv/memory.c -3a57a35b7b15e3c6c6b1ba67823ec434 sim/frv/decode.h -0cb3caa41eb9d6c4cc4f45e94936a37a sim/frv/profile-fr450.c -1dcb16936dd94db21e5b82f208506a6a sim/frv/README -5612be8e02af3bf837bf725454d50414 sim/frv/config.in -c0fa783d04476047396075f76c4fb43c sim/frv/profile.c -fbee6d3e3bce0ad939c34908a41825f0 sim/frv/arch.h -1ff8fdf0f7986d308933b00e454005dc sim/frv/profile-fr500.h -531efc0336b88accc2bc094878d8f783 sim/frv/traps.c -09522d9d1e12380c95c9b6ece1e28e93 sim/frv/cache.c -827ff52f5762a57acbe3a50e84eb7541 sim/frv/frv.c -4a6432f71e9050b66996366001ad0a6b sim/frv/interrupts.c -21941f132cd968fb9f59fed61af5cd1b sim/frv/pipeline.c -d8d0815437ec037755f67900e05bfcd4 sim/frv/registers.h -065c11a42dd590a2926307d03b4712df sim/frv/cpu.h -2b789b1a03b9fe9ab66709b248824451 sim/frv/sem.c -a33ebc1d900cee52763a41511ae73e36 sim/frv/cpu.c -e2505da5912b427aaec80a1851e65c3c sim/frv/Makefile.in -f7fdcd9476a22c222329703588c3fe52 sim/avr/ChangeLog -6ef545eaa66a20600537024b6bcc93cb sim/avr/configure -6f61cb2fabc4dabe6a3ce716ca63ae82 sim/avr/sim-main.h -9a07b90d62a269c0a08e6fd673cc930b sim/avr/configure.ac -4ab55a35c7007d58ee370d38587e6907 sim/avr/aclocal.m4 -79b3f19a4a961715ed1b3fc266e073d6 sim/avr/config.in -ae1dbf689eddd6296c59198277bcb35f sim/avr/interp.c -5fdde73fca758f44455d473e5ed10899 sim/avr/Makefile.in -ad1dd62bbde38eda63bef32a6b534987 sim/mips/m16run.c -f22dbf1bc6bae60d3ad89661bb2d56f8 sim/mips/ChangeLog -13c24ba27c798d5d210a9067022c3936 sim/mips/configure -47a03f2d59ee890c4d52074cf20c526d sim/mips/cp1.h -7960930e078ae552faccc562009a9097 sim/mips/sim-main.h -77fd3678c0341217f4df190b78d39f9e sim/mips/mdmx.igen -0946161852bf7fa5cceb4685422dfe78 sim/mips/configure.ac -4fb51effe261570727bf10f913449706 sim/mips/mdmx.c -17f6d60be92f61fd29fedd93534f24b4 sim/mips/dv-tx3904irc.c -f7124299dc38e26a5c5b0d6602f42ea5 sim/mips/sim-main.c -ffc585a3b91db1b55953be250cbc6e3a sim/mips/sb1.igen +91fe12df1c40472ba31c783a8259ddd3 sim/testsuite/mips64el-elf/Makefile.in +61566dc2819979301d3d92473a37bbc3 sim/mips/m16.dc +01e35e56c876096ab82da5ac5665d773 sim/mips/dsp2.igen +020f18bdeda7f41293265888fe91a692 sim/mips/ChangeLog +ed3abf68472d521d35c3fdeeaa43d51e sim/mips/configure +58be396e5781d58dee9016bddff3ff38 sim/mips/cp1.h +1c6fac1ac5cdd3cd253d326d6c45c166 sim/mips/dv-tx3904sio.c efe0c6cab20f817cc6575b6052a10ec6 sim/mips/micromips.dc -8e5d00dcf8c3510ef993285006700bf5 sim/mips/m16.igen -185f3d232bc0c16b6c74af81fb471d83 sim/mips/m16e.igen -22beb802e4aa528563dc0b3ef464dc25 sim/mips/micromips16.dc -0479daf5ea9856f113459b0c70abf433 sim/mips/dsp2.igen -90fc4d744f43be353047ff083ddb06f9 sim/mips/dsp.c -c1cf6ea7f2f604cb0b6b22957a6805b9 sim/mips/dv-tx3904cpu.c -4ab55a35c7007d58ee370d38587e6907 sim/mips/aclocal.m4 -065e6707077716facef38d3f18ab0fb0 sim/mips/mips3264r2.igen -09cda15b1b77076dc9b033a03333e7a1 sim/mips/dsp.igen -09e5c425aea226d06d9d22fd2950fd81 sim/mips/smartmips.igen -be1a77beb1cb7658ca9a4bd40a000d42 sim/mips/config.in -e90e73eee445d44f164749dc8d8c0a4d sim/mips/tx.igen -2e898c90a05005467b55f0640b12872d sim/mips/dv-tx3904sio.c -0cc85f54d1aaffc21fa0a619b2e23020 sim/mips/mips.dc -c3da90e9c4a19b5a7dc4116f132c0db8 sim/mips/dv-tx3904tmr.c -1b386853c5462f5b9683b08b182fee03 sim/mips/micromips.igen -8fcf63d8e00abbbafeff654bb5d82b46 sim/mips/mips3d.igen -93a8427e930d8b36c9f15cbf44945b11 sim/mips/micromipsrun.c -18d62ad72041c55f57026419090d858d sim/mips/interp.c +7f9cfb29d65eb64b0da3e9dcb17e62ed sim/mips/sim-main.h +22c3217f55e672b03d34928d98093e24 sim/mips/mdmx.igen b35a5093e668223efdc8aa2ef2d27f8b sim/mips/vr.igen -6918d30dc6b6839795a21574fe5a7199 sim/mips/micromipsdsp.igen -1629c0964bc9843803667d5cda6f298d sim/mips/cp1.c +0cc85f54d1aaffc21fa0a619b2e23020 sim/mips/mips.dc +be1a77beb1cb7658ca9a4bd40a000d42 sim/mips/config.in 10f84bde627b5f18455bf28132e4a971 sim/mips/mips.igen +62a96acf7bdeef7fb805664490cdf2c8 sim/mips/micromipsdsp.igen +d3a9bace996778176b46ea31f90f3d85 sim/mips/micromips.igen +18d62ad72041c55f57026419090d858d sim/mips/interp.c +27d3643d52ef24309b6b0eaa36e71474 sim/mips/mips3264r2.igen +cf1c88cd6be52b2a7d0e922f3b5ad6b1 sim/mips/dsp.c +71ac41d347dc4cacba7a15f1e6a1c5e3 sim/mips/dv-tx3904irc.c +22beb802e4aa528563dc0b3ef464dc25 sim/mips/micromips16.dc +ab4e11edc05d567cef6e76ccb5de2b93 sim/mips/configure.ac +4032504380134a6556bad15d51559ca7 sim/mips/mdmx.c +df98ea34b1c1988d281f1243d725465b sim/mips/cp1.c +a8d09535c20fb552a19c44e4f1204235 sim/mips/m16e.igen +ad1dd62bbde38eda63bef32a6b534987 sim/mips/m16run.c 6af8848f609189134d3a5f2b04d2d4a8 sim/mips/Makefile.in -61566dc2819979301d3d92473a37bbc3 sim/mips/m16.dc -7950e4786bf93f92272b39528748bf93 sim/ppc/e500_expression.h -eeaed7a804f4ef89fc28d42d86de6aa2 sim/ppc/hw_com.c -5146ee46bebabf8c97f85f5984cdb349 sim/ppc/bits.h -929c1928e4c7e7795c4c223554a7467f sim/ppc/device.c -8d219ea9c96d9d4baa4329926e2f406e sim/ppc/sim_calls.c -d245825bb9584ccf2a8300d55d3957a2 sim/ppc/gen-itable.h -c95869c0e177dfc48b51732cf57a34fd sim/ppc/gdb-sim.c -832e30475a8bc9b8322b1bc1c7236d87 sim/ppc/gen-semantics.c -d853c371650b4299478b6e4dcbc172f6 sim/ppc/dc-stupid -03187ec858df32e958e52006147225ef sim/ppc/options.c -f1205db25965eed924a06c3a75d48480 sim/ppc/sim-endian.h -dd700ea0cc8dbc39057f9fe7cba9f44a sim/ppc/ChangeLog -27bb4b315b610c06d3d617036128ea66 sim/ppc/configure -3177c0ec5341f19e21b76f11cbd5a7bd sim/ppc/filter_filename.h -d2fb5d6bf9d092f12e1c4d4c7e61f8c5 sim/ppc/hw_nvram.c -55ca817ccb7d5b5b66355690e9abc605 sim/ppc/COPYING.LIB -4cd0b8026dd941611f66afd359742379 sim/ppc/emul_netbsd.c -fc7a3358676fc9ff26e3cd503ee1c462 sim/ppc/gen-icache.h -d32239bcb673463ab874e80d47fae504 sim/ppc/COPYING -a30dd60f7f0d330110eb95f3479c45af sim/ppc/pk_disklabel.c -b535b6237143276e69f6f3215e3c1b01 sim/ppc/gen-semantics.h -6e2deba755e78892b1c7de99f789346b sim/ppc/filter.c -49a106de941fa3e628121e58d93b3cc7 sim/ppc/igen.c -4950f8682b5dbfeebd61feff873ca2c6 sim/ppc/sim_callbacks.h -c030f461bd59ff9d54b1f4d80e0801e9 sim/ppc/main.c -1d48136998451858e9ce0a55d06ff691 sim/ppc/hw_iobus.c -cbc18f080cae61f272af1c475bd6e144 sim/ppc/vm_n.h -48c6b8643d82c832a08fc5aad6c182c3 sim/ppc/sim-main.h -9aa415ff145af3aa296d7cca03eeaf35 sim/ppc/gen-support.c -b9249eba98032433f10d0f0fb1cbabfa sim/ppc/bits.c -92e1f91968d881bd6a34726b5d7ad38c sim/ppc/hw_vm.c -ce94f94481dc7b857345a34aff0491a5 sim/ppc/emul_bugapi.h -bfd43dd96dabce665dfe37a7957fc1a2 sim/ppc/mon.h -484234eedfbb69301d0bec4acf47f8db sim/ppc/cap.h -7ef1469cfb0809ffbafba1a6f43cc98b sim/ppc/ppc.mt -f998efbd32dfc51a5783d7be645cd31e sim/ppc/idecode_branch.h -c9b315da4a3b61f05e47d495feb68e65 sim/ppc/emul_unix.c -f6adfdb8a6e224ba5020d428bbc41bae sim/ppc/ld-cache.c -032ba1a0336356bc3e534edb0bc85195 sim/ppc/configure.ac -ac8af167df5e2cc9c80ab1bb813764bb sim/ppc/emul_unix.h -8e019657ad96f38584486921e012ceee sim/ppc/events.h -23b263bfd0a912a10aaf9d40923b9f0f sim/ppc/hw_init.c -36407106664516616438a622329f6f1c sim/ppc/BUGS -f7189a246dd42f356375e3fc0fba2c4c sim/ppc/ld-decode.c -9acdbec7116b5f3c0f505b021f497efd sim/ppc/events.c -01edc9a759d4ef4944bfa0c0e6279de4 sim/ppc/debug.h -305357a3d264db7fa8f2b88bfe07ca74 sim/ppc/hw_glue.c -37e77a0546a64ed172e6748b4204494b sim/ppc/registers.c -47924a670d88e248786278852e0fdec3 sim/ppc/lf.c -dfbacfc1474588e6305d5f3c016d7f10 sim/ppc/interrupts.h -e3359547c5ecb3630e3e64bede3a2292 sim/ppc/gen-support.h -03204c8094189b8176422cddd9e22af6 sim/ppc/gen-model.c -adaeff1ea6db4fbb10072a552782ceb2 sim/ppc/hw_opic.c -d048ebe7782c7399621e5fb44e6bef1e sim/ppc/mon.c -64d7358582aa081f81c570e789046b73 sim/ppc/words.h -7936772f0485b1d307e5d6a7a43d1afa sim/ppc/hw_sem.c -188e7c8685bdf08ea757ab738f97dacd sim/ppc/filter.h -52a8a7147d93abe4c704f3130b934f5c sim/ppc/hw_shm.c -39008a23e985c033beeb9858fb7a365b sim/ppc/e500.igen -e9f6775406bb18b2cce429bcb5a90aae sim/ppc/misc.c -a9130e86c5f02ec5dfb1862d7dc0fdf0 sim/ppc/device_table.h -4cb3d54ea2a86e64c7e2ef3386b46fef sim/ppc/emul_generic.c -263388c29a42390fe959614ade29633e sim/ppc/dgen.c -d3c236878c5c39d9ea37028e4a51f8ef sim/ppc/corefile-n.h -f8f5e5da8189be2628f0770270fe2530 sim/ppc/hw_eeprom.c -4f90dac25651b90137e08d0dc8b280e2 sim/ppc/hw_register.c -fb9be7146f57278cf5dec22d4c5ec909 sim/ppc/device_table.c -e20454a4f2176a75ba78cd001bee2026 sim/ppc/hw_phb.h -58dd84b3f0e04bfd136e905198d27bd1 sim/ppc/cap.c -820ecce94ba5cc4b5dedd30bbc07e36b sim/ppc/sim-endian-n.h -6d149d2811d92b3f3d5001f227fc6043 sim/ppc/igen.h -865b63e778a75f379098ce82f5cf2333 sim/ppc/altivec.igen -92d51a0cdcad333fb57f115236e935d7 sim/ppc/emul_bugapi.c -61af03f8b0fc6fa655dc643e3de2552a sim/ppc/device.h -462e1676a73f1ae21bcb95e1e79fe309 sim/ppc/hw_cpu.c -eab5f7804f4041ff963a48f3e6c67711 sim/ppc/tree.c -ff28ed7f8ae18dca9b6db08f8944d882 sim/ppc/std-config.h -df6ce308b6164a82f216e6dc70667ced sim/ppc/gen-model.h -d23b4930c3ef75827e0479c9eb1e3620 sim/ppc/corefile.c -a730b218d6ccba1672810feeb471dd91 sim/ppc/misc.h -d29565bbd8523108e19d7da9287dcc62 sim/ppc/hw_trace.c -4888acb242b870aa0e825e9e54aa1298 sim/ppc/idecode_fields.h -54873606cf06822b22427f389db7f553 sim/ppc/ppc-instructions -4552751230a67356fbbde89e80dc3aa8 sim/ppc/hw_phb.c -672ead91f129cd55c9fcf00cafd71791 sim/ppc/idecode_expression.h -919bcf59528202fd52436649b6d82683 sim/ppc/psim.c -84d8880ae315c1aece9fa57567e3851a sim/ppc/dc-simple -ee19c4a4b84cad5f9cd916356307b90b sim/ppc/hw_core.c -dc37cdd7e31ba5b4cfb958fa4bdde34b sim/ppc/corefile.h -617c363f63c7bdcfb1a986bad9342b9e sim/ppc/table.h -70f65f76fd8dfe5d4b30379d840ee025 sim/ppc/INSTALL -d41d8cd98f00b204e9800998ecf8427e sim/ppc/aclocal.m4 -a787d5efd4433d403f7e9414d1ec4447 sim/ppc/altivec_registers.h -9386f74bff5fd3a25d4cea3f6cb22bda sim/ppc/.gdbinit -01991a6ffa05c90b7f2695e998a9a4fe sim/ppc/psim.h -359cea2dabc62b66517ee30e75151a7e sim/ppc/inline.h -35b4efd703cb6ab5cd3fa84f768498ce sim/ppc/os_emul.h -5ff7cc9635d5e4a02722c6d812df43a2 sim/ppc/ld-insn.h -b3bf6caa11a79244273b2f50a3b5a5bc sim/ppc/vm.h -2ec7edadb9856ea12bb4ecb5ee98fd83 sim/ppc/README -b8a327a67a1e3f597b26d3e6c23eaa3c sim/ppc/double.c -7089edaff7e9f66ca0da2cd1f7965e7f sim/ppc/psim.texinfo -01d14e36b64b3d5e9b51a9948526c417 sim/ppc/options.h -e23e8c6cddd60e621d2597fcc485d2c3 sim/ppc/config.in -71d98d8e0be2632eb25e79bb4f7982b1 sim/ppc/hw_pal.c -f7974df275da00c2ea7f3b7f0da9da7c sim/ppc/debug.c -c9161f846ee1137f57c103c9b50b8010 sim/ppc/ld-decode.h -cc82ede0335a4e5ed3867e1dd5f9dae2 sim/ppc/emul_netbsd.h -ed4f1ea8b58124d79194e8af7ab518b7 sim/ppc/ld-insn.c -29a6c18565b406e370f5d3fce8278714 sim/ppc/ld-cache.h -32925d457e64b3526f8690aaaf0be531 sim/ppc/altivec_expression.h -43733f1ee393d4a332adfa4f4cfdeb49 sim/ppc/hw_cpu.h -cb29959db2f92c8b4323cc8e8d4d53d0 sim/ppc/inline.c -18e4d7309218e49d8a824f9a5d2daf65 sim/ppc/ppc-spr-table -110b14820536fae4ab9af5f5a106b222 sim/ppc/emul_chirp.c -d5f8b9577bda5e425e8a4e197bbb6e70 sim/ppc/tree.h -7ae2d45d2858087f5f9efc56f6bebca1 sim/ppc/lf.h -496f8527ffce7739e15730ff11ada160 sim/ppc/hw_htab.c -cc3fca83551bf130b8eb6a464f875b31 sim/ppc/gen-itable.c -a4d0e23b18c60d2aa8c9624bd59a0d14 sim/ppc/sim-endian.c -fd5f1a3237245e88494ee13149097c33 sim/ppc/gen-icache.c -9e8810a61d4a6fa162efcf8c18061f26 sim/ppc/emul_generic.h -1c42372728ec198fcf8ab57a40c64bb1 sim/ppc/os_emul.c -386b3912ba8b7e2502e9b6a3335dab80 sim/ppc/basics.h -0803bec27a88fc019b6b1bfe8dbf9dd2 sim/ppc/dc-test.01 -3d1bcfb1e025467f91084fb8c21c08c8 sim/ppc/interrupts.c -4060774a7eb4ecb48f976edb398ce32f sim/ppc/dc-complex -2d0f82b823fe273d046cfc337fe7c148 sim/ppc/vm.c -794c3a80f3fa09403d954ec1543ea187 sim/ppc/dc-test.02 -696656812b714297578ffc761fcc81dd sim/ppc/ChangeLog.00 -8fcddec95be13d3be8c25f9c3c68dba8 sim/ppc/registers.h -0e62ffcd2d9556c5fa2d592b4fb3d07e sim/ppc/dp-bit.c -585f396f24a29eeae1e0ba6b2102d79c sim/ppc/cpu.h -d632a1f4134488cc306b566a3774b068 sim/ppc/hw_ide.c -4f8472f889e00629c1b4bfcf88bab21d sim/ppc/hw_memory.c -d83e9281376698706bead364f2bc0c9e sim/ppc/emul_chirp.h -4ebfd1d8f83569ebc879d133a55faa6d sim/ppc/e500_registers.h -9b98a3220b34ead882ebd988dec298a4 sim/ppc/RUN -b97379b9215f181903e3bf129f977339 sim/ppc/hw_disk.c -82701b2c4f7fc8528a745be30ccabc6c sim/ppc/gen-idecode.h -1128a696383d5f5a536d86720b9e3f21 sim/ppc/table.c -060d2716b0ae998206bce594c507691b sim/ppc/cpu.c -477642f7d41346704a746fc8c65faa7d sim/ppc/filter_filename.c -b6746c7a3c249341cad74cde41c43e46 sim/ppc/Makefile.in -860c88b34282fc65e8d99dcca5cc7809 sim/ppc/gen-idecode.c -29eec8e13a9ab5f77501faa6904d4725 sim/m32c/ChangeLog -6d71443ec6220a5219b2c6c343a20970 sim/m32c/configure -5385c6300ecdac5ade262dc4b5ee1687 sim/m32c/gdb-if.c -6bd9c8424d4e1eeece90651d06ad775f sim/m32c/mem.c -d22c4713094f28aad1d817685d3fe855 sim/m32c/main.c -4c7e5c6e4cf32abebaba0f9ba735ae1d sim/m32c/syscalls.c -73351555088bf09401fc77e12ea1680a sim/m32c/configure.ac -cb8d257846074f74c644999d5bf9d73e sim/m32c/syscalls.h -5b68d5f28a14d27280b87cacf2ec15ba sim/m32c/int.c -c613b6b0d4b4cb5f934a292cadf46d09 sim/m32c/r8c.opc -ada579784f182c975a84a3ada445dc34 sim/m32c/int.h -37f236f1979fbc0353a8284f598e9dfb sim/m32c/mem.h -ebe725dfb98024523254d84df5c831db sim/m32c/load.c -dcd7b8dccf2272917f3f285a4618f9a0 sim/m32c/trace.h -f8b86dc007ea569f019f8573d8c90f32 sim/m32c/safe-fgets.c -5c4b065f6bd8d447e7d28cbe9cc4b9c2 sim/m32c/srcdest.c -674ad8f70ee9be6a763dd70b6e9bd6a9 sim/m32c/misc.c -96a90b0a1bf6d3c299f3111aedaae74c sim/m32c/misc.h -4ab55a35c7007d58ee370d38587e6907 sim/m32c/aclocal.m4 -95d8214cede93c57a6990ba29d300f54 sim/m32c/trace.c -67c907781e848b132a4bab0cb842a534 sim/m32c/config.in -c7dfc2d0bdf23b9eee0bbd5731f8cc76 sim/m32c/load.h -3cbcba3a9fcb632c85e91338cf2cf0d4 sim/m32c/opc2c.c -24e2f861da06951620983b5a9ca6efe2 sim/m32c/syscall.h -4d95d40ff397520801ba2b061e9af7f0 sim/m32c/reg.c -8603ba509a25ad67f3d9a7f4cb02ca17 sim/m32c/m32c.opc -37a29c5b3e1a2042b6e759a738c68d61 sim/m32c/safe-fgets.h -8e7efb74cae43bd9c2ff21c190e67d94 sim/m32c/cpu.h -c511801f9070900f940358970fed1ed6 sim/m32c/timer_a.h -6b011d19636104fcec6f4a56da19a77f sim/m32c/Makefile.in -ce22109fb104448537479fd1f4360b24 sim/common/sim-syscall.h -b6b465b85c354f56d0a2779bd648931c sim/common/dv-pal.c -39ad88adcd61ec7a195f88cfb314bd19 sim/common/hw-instances.h -3eeff63f3a5d70e0265362095f502c9d sim/common/dv-cfi.c -1de2618888cbbc5ebb1d42393f562118 sim/common/sim-syscall.c -7d6dd666753dd78bae0fd1cf0b015f61 sim/common/hw-ports.h -131a1027c47d013d0bf260d5d020c368 sim/common/hw-tree.h -5ad90cb33701e174772e7f8bc9c2fcf4 sim/common/sim-n-endian.h -369d78fd80e90e1141f22e9b825bb9fb sim/common/nrun.c -0d7190e670742300898ca654c9ebdba0 sim/common/sim-info.c -79c00d6eb6dcc0fdcb3916f95ca17509 sim/common/sim-endian.h -c5c174c891066fbe117732cd98e29cc4 sim/common/ChangeLog -9f5ff9303daefedfed512d32e62aae39 sim/common/sim-profile.c -b072fd649723cd95f44dd9c6c5357d85 sim/common/configure -605061dc62ba7a94ab94526977f7aae5 sim/common/cgen-utils.c -9eec25bedf73ab0d1276d126f3637286 sim/common/sim-engine.c -6c1e775c8dea401e599edf23dcd20f08 sim/common/cgen-sim.h -ec3aaf587a39d52f32009f62daceaf1f sim/common/cgen-par.h -c2305014467278aa6da1c4aaea8283db sim/common/dv-glue.c -f108d9ba7c8bf48efdba62f4792288c1 sim/common/Make-common.in -321343878dae24b79664467a0368daea sim/common/sim-arange.h -76c6d3847e17f7ebc3e48eef3f31ceaf sim/common/cgen-mem.h -8a5ef0de54717bd40e58ceac2b3111aa sim/common/run.1 -10650f784f051e2a9cfabb36dbca0566 sim/common/sim-hrw.c -bc07d5feb9a65e971395b251909d73c2 sim/common/sim-utils.h -0cd5aec0350eb378abd59b9e9c5050e3 sim/common/gentvals.sh -20de4728bf61c198981f1d358d85e69f sim/common/version.h -a97ae88267992580a0ae490e041f9582 sim/common/nltvals.def -f65cd1dfbf03aec5b41ce8fa43b0a28b sim/common/sim-watch.h -a598c119111fe1d0c03dd12424422e3b sim/common/hw-ports.c -2236191bc476d9e26392510be5700110 sim/common/syscall.c -4a73f4206047961d9d97174189ec93b2 sim/common/hw-device.c -d2154f51fe69d2737a4d6d2e40cb8f10 sim/common/sim-abort.c -91da0b5776be30169c5d42443a4af0e9 sim/common/configure.ac -cf48fe7caa1d75cb7a6de924235b64ab sim/common/sim-events.h -4bb34baf0805410912643086ca6d6893 sim/common/sim-config.h -b37272eb106deba319e817c6a89e7653 sim/common/sim-reg.c -2d1118ba78c753a225c8c32e0f6ff850 sim/common/hw-base.h -23d94ed668662afdb48983783f04f819 sim/common/cgen-par.c -29cbaa168ea440d87de08cf154fcc2ed sim/common/sim-engine.h -06103b31822bd3c70d4eb1d0b2584d5e sim/common/sim-load.c -fae27efba5c4ba468d3354da7de916cd sim/common/sim-hload.c -6615ba8d6ef46099307acf718fd6c17a sim/common/sim-arange.c -f608739b1d21e1510ef6f8d68c68fd18 sim/common/sim-options.c -78079ef68d42c5c3f3545be4b299a829 sim/common/sim-hw.c -87be3bc76a038cb436bcede2179d4e9f sim/common/sim-options.h -1343aaacef1e705acf7d2ed4916e4c8f sim/common/hw-main.h -1b7a4a51ac357b2d0e96702b3343aac9 sim/common/cgen-cpu.h -d20c5194e94fd48054d603d8af42032d sim/common/cgen-engine.h -e68e7e0b9b5b4cbd386f8d5f296d7d45 sim/common/sim-hw.h -e0ee2a1d5bde104d2d11cc1dc641142d sim/common/sim-n-core.h -48f62b03e2dd221d166f7d70eaf39094 sim/common/cgen-trace.h -317287df70822ac1764fd3114cdf57a1 sim/common/sim-basics.h -df71278bf97b6f0dcb3d861c77d12a66 sim/common/sim-signal.h -e30a1106a83c4ff2a8e93c6922f2f481 sim/common/cgen-defs.h -4ad60e8e3afeb73a6441c914485f20e0 sim/common/cgen-types.h -14b4ab60082582b33c82e5db282ea34f sim/common/sim-profile.h -0540c48b3ba200f206b84cec1338c3a9 sim/common/hw-properties.c -66c904ea3eb057e763349ba3a15eba23 sim/common/sim-close.c -55f80ed58f60460d67c1e555b9cf1fc6 sim/common/sim-assert.h -0492340d09491b1650dd97329a58cd85 sim/common/sim-io.c -22fadaba1e4d838582b67eec6e4f7c16 sim/common/hw-events.c -000367ce6e5e75dd9a657fa7e128254b sim/common/sim-watch.c -612a90469a19b9818a0ee85cebb0b896 sim/common/sim-stop.c -d4cb4114a219cf536b4a74d8aa01191d sim/common/cgen-trace.c -8b521948facde0287a746915c5715b34 sim/common/cgen-scache.h -bee575dd830e6f75dd8f9493dbb708ec sim/common/sim-n-bits.h -82c9ea535e100fd4a1f1f67aa8b7bfae sim/common/dv-core.c -619bdc9afb96388edc796a186ed687cb sim/common/sim-alu.h -ee5d3632132bb26957a77a01e74aa8e8 sim/common/sim-resume.c -29921010aa23150b9d2c79fc9ae4296f sim/common/cgen-run.c -93c3299aab05c0bf381143142d327dbe sim/common/sim-cpu.h -025dcdf5925933a2d0a1b4e1e1c00ce0 sim/common/cgen.sh -4bd7387b8e6d2b32875a58562470c60e sim/common/dv-sockser.c -b35c35aacc139af1e9e0790de6791d9b sim/common/sim-trace.h -bab1e99ba112f8e4081d810046792cdc sim/common/sim-trace.c -3492892274bc5de2377e1249be860658 sim/common/sim-model.c -2deb1ba863a5f14721adb2624860447f sim/common/hw-alloc.c -6b8a33bb9b7cc4fb44f3df11089297d7 sim/common/sim-bits.h -1032913c728d7645e0fc0e11c2b25322 sim/common/sim-memopt.h -69fbc4e9c7473ff7da8c53e302ac06f2 sim/common/sim-inline.h -f7b12e2a6caa8b656f36313c83c13097 sim/common/aclocal.m4 -4ac4de2f5cbaa78e805d696918722ad1 sim/common/gdbinit.in -ed8b05c07d34977e0e69ce33032d809f sim/common/cgen-fpu.c -be895f2224a64f5932efa6afef9ab2ca sim/common/sim-utils.c -a91c3726edd8370424100abb9de0088a sim/common/sim-types.h -f8190f7af229410ca8a2f18d322c40bb sim/common/genmloop.sh -535458fd12e42efc04f17dd1486657a8 sim/common/hw-handles.h -6a3876420db4bea7e757b7c4cac4abd4 sim/common/acinclude.m4 -b907d04d5102d92e6bd56a52d1df87af sim/common/sim-cpu.c -c752d4545cf1311dd11837f800016162 sim/common/sim-model.h -cf095956990777547743b39c343ed154 sim/common/sim-reason.c -f36ace5230f33c36ac03f06909a271e3 sim/common/sim-io.h -47fc977a6575c61d3a5e07a65cb37eba sim/common/sim-command.c -63bc59dc3306e6bad111b0e82e42f5b4 sim/common/sim-module.c -b4e0c0f7604d7c85adbfa37f3ceb75d0 sim/common/sim-fpu.c -5ea20d21b4388d31e836bb881f1359d4 sim/common/cgen-ops.h -391ec0679f92477f841197f50cd0def1 sim/common/hw-base.c -c0f358216eb761477deab63b3cefaece sim/common/sim-base.h -10250802e3ea03e5a0049f8fae69b6d8 sim/common/cgen-accfp.c -51eb97f22874d7f7bc82049591c8b2f9 sim/common/sim-signal.c -60cdec181e481f70ff06c07688b82f53 sim/common/gentmap.c -046402c3422e1b45a08f0a3b14c9138e sim/common/dv-sockser.h -1dcd2d6d03ed1126e8b66baa8b5b3632 sim/common/hw-events.h -d93b6f57fbbd68831a2769b64029610f sim/common/sim-endian.c -0ba355b933afd8b67aa82eebde574dc0 sim/common/sim-run.c -6e1486b1b88190110669bdd641b66d1d sim/common/sim-config.c -b3c61b8fd52b2a95eae52f122cb42a4c sim/common/hw-properties.h -07b17672c88a6b6f379153bfb1529662 sim/common/hw-device.h -048f799655b17be5a2393f1d69ffd22e sim/common/sim-module.h -e1f190bb836047a0af81c405d99607f2 sim/common/sim-events.c -947051a1b1f53cdae72ca1826c5f2f50 sim/common/sim-bits.c -3a35dceedc2867328fc827d8549fee44 sim/common/create-version.sh -185dc085add380c855be431bc78ec552 sim/common/callback.c -8f64bf395524e368b6762858727185a1 sim/common/sim-memopt.c -8e14f8d19afb77a47252c5914480161f sim/common/cgen-scache.c -7f3098792f81d2e41a0ef8d6ad6ee698 sim/common/hw-instances.c -95241a81fa7425bc6d838f7119f47620 sim/common/sim-fpu.h -b117c4f4c13de9ff256f00640d744531 sim/common/cgen-fpu.h -175a6237014e412d92fc36d0cf9e0734 sim/common/hw-alloc.h -b294dd2059d0763e6bc7bee12974e3d5 sim/common/sim-core.h -32f528d964cb8e0d507963c221a9d375 sim/common/hw-handles.c -9e5aac6d542d1d608c9be327d1fd98ab sim/common/hw-tree.c -88f1bb3bd3fb57347447875933036c34 sim/common/sim-inline.c -c43dd7affe6c0519e8df524e6c7a5586 sim/common/dv-cfi.h -fa132ce436ba593279b1eb9d89590862 sim/common/gennltvals.sh -fde099e0a97321b106486da70feb5e66 sim/common/Makefile.in -2e568cca2b5c17bef31a6bd0eef61dc0 sim/common/sim-core.c -d25fd0735ece41605e7f27b9d22db98a sim/Makefile.in -11a5517b9f55d40ddb7c674953e732c1 src-release.sh +4ab55a35c7007d58ee370d38587e6907 sim/mips/aclocal.m4 +2ffa50025e49c0fc64dd3445d07ecced sim/mips/dsp.igen +2b8823985ad5690fd6db9824a18d3eb2 sim/mips/dv-tx3904tmr.c +73e14226bae662c341914ef8d735c4af sim/mips/micromipsrun.c +c6755ea45192022d3c8b6fdf3915b68e sim/mips/mips3d.igen +8e5d00dcf8c3510ef993285006700bf5 sim/mips/m16.igen +c0208a9e8a0c85bac2b72bd547095438 sim/mips/dv-tx3904cpu.c +e90e73eee445d44f164749dc8d8c0a4d sim/mips/tx.igen +dd1bcea9b920f7bd3c6d39f4cd0cd011 sim/mips/sb1.igen +f7124299dc38e26a5c5b0d6602f42ea5 sim/mips/sim-main.c +d61e304ee0e767c8f20b4ba98ba8bcaf sim/mips/smartmips.igen +a1ca31dd09395beff23086cc371529d4 sim/rx/syscalls.h +35be0f07596f6d28b9401a647034af41 sim/rx/trace.c +a27d5fbed9adae9cc9b787bf56f2d3f2 sim/rx/fpu.h +9809bb6e617523b00bc8519bc3b3c59f sim/rx/misc.h +18700e132dcb3783878697607d53c05a sim/rx/ChangeLog +1d0ae72f0dbc5477def23f0750cdf686 sim/rx/configure +179f8fa0e092d7f4c253ad1e9cf77e25 sim/rx/err.c +0210072c77722dcd7440ab20ea877a66 sim/rx/reg.c +e578cd645e2feba9820aad48ab71267d sim/rx/config.in +747f0cc8acdb2743e23844c8f2f9eb98 sim/rx/fpu.c +afed9742c02b8d4138bceb479f52782a sim/rx/configure.ac +16575327ce4648bbe5495b3dc3a97ece sim/rx/mem.h +671c0bbd81058c02deab5f491281a4cf sim/rx/rx.c +c1b2c0b2ffef1ba72a8a6e24677c8653 sim/rx/README.txt +737fb10db31d80951e9a52b296794a37 sim/rx/mem.c +24e2f861da06951620983b5a9ca6efe2 sim/rx/syscall.h +67bc6ecdbf5bda6dc10c5f8a1b7306f5 sim/rx/Makefile.in +584ad1bf2dfc30db6790856fae2fb351 sim/rx/main.c +1fd0dbf1e8e0c16d6107ca283384bd34 sim/rx/misc.c +4ab55a35c7007d58ee370d38587e6907 sim/rx/aclocal.m4 +bd6cf8051697a0c50f8ff288bcec29ed sim/rx/cpu.h +c8249b51aa8c0d5f5803e753a3da49b7 sim/rx/syscalls.c +68640471b424a02c3d3b7d719937d3b9 sim/rx/trace.h +f603fe2780acdae36dac30f1614a1035 sim/rx/err.h +25f6eaf08144f10a68096e44104a2bb6 sim/rx/load.c +c0200612cb7abba85d7fe01fabe83c42 sim/rx/gdb-if.c +23d109bf9299f977bd4336490197ed85 sim/rx/load.h +150f9776d22f144032a0e0a114a7a7bc sim/Makefile.in +9d4f9cd1b89778edb2362718a161f12a sim/bfin/dv-bfin_emac.c +b1c3a28c41bd111fee85e0da7740baa1 sim/bfin/dv-bfin_gpio.c +f59e097b60d001e218196ebb9ae87101 sim/bfin/dv-bfin_gpio2.c +b7d76cf18bd0b5fdaf1fb8a2860f61ab sim/bfin/dv-bfin_ctimer.c +ac021f5a00bec5b1a86005a4c2a1630b sim/bfin/dv-bfin_emac.h +ce04947dec4d09fd1631bdc22117d19b sim/bfin/dv-bfin_ebiu_amc.c +c5ea4de308c881be61a746cf4e634122 sim/bfin/dv-bfin_gpio2.h +48dde055c72307e6f530e8b5941f9b35 sim/bfin/dv-bfin_pint.c +e283264f22eaf355cfb0a89a5879f498 sim/bfin/ChangeLog +6f3b918033e4b0d7dff5d74acb14a3a1 sim/bfin/configure +ca76017d507da4d0426138add4e0feab sim/bfin/linux-targ-map.h +504b1c9d6cef25eb731d3dfa59342b6d sim/bfin/dv-bfin_cec.c +5f9ba6206796ffaf8472ae007279ae22 sim/bfin/dv-bfin_dma.h +d505b45802acf08b1ddd27d24d24eeb4 sim/bfin/sim-main.h +547b3cafc877422752bcb1280441eeca sim/bfin/insn_list.def +75203f35f7133aca18b51709db54e459 sim/bfin/dv-bfin_uart.h +c1564cdd051567e83da8f7538af0cc26 sim/bfin/dv-bfin_ebiu_ddrc.c +175be671ad8d9b9f191a822662147b10 sim/bfin/config.in +7e52b4ec0938c00a5fcf86d5043ece7c sim/bfin/dv-bfin_rtc.h +cdfde16bb194c5c5bc906b9976f0e4c7 sim/bfin/dv-bfin_twi.c +6dc30e9cfe08e7c804ea5653cffa8a35 sim/bfin/dv-bfin_ebiu_ddrc.h +12b112260c5a21a3a1068ebf6ed1fc97 sim/bfin/interp.c +62c3b997d5e202fe17e996c18ae2b7b1 sim/bfin/gui.h +5f3765a8f0ac754551f65997323fe224 sim/bfin/dv-bfin_trace.h +35732bb013953dcaef705f81d7fc599c sim/bfin/arch.h +ee4e99da067f6a358c0aa0963cab5395 sim/bfin/dv-bfin_pll.c +832f190c63dd0b86deea5aef63506e7e sim/bfin/dv-bfin_uart.c +7bad4e4de50505c659088d65f9b32a44 sim/bfin/dv-bfin_nfc.c +ca9096caf28657f9f607e42fb6558d26 sim/bfin/configure.ac +e67aa0e3ec4035963cc1dfdae96d414b sim/bfin/dv-bfin_nfc.h +bec947cd733e02ffcbb9269abc434da1 sim/bfin/dv-bfin_dmac.c +175b46b7bbdac028497cc3c6410dddfe sim/bfin/dv-bfin_cec.h +d7d1d506e05f426c0581186e201335d4 sim/bfin/dv-bfin_evt.c +b160c4046ce8ce579eebd1dcc1a6658f sim/bfin/dv-bfin_eppi.c +cf155eabb5e29c8ed5a8d9335a4ef6de sim/bfin/dv-bfin_pfmon.h +181918e55faa3ff9ba34dc12eaab3105 sim/bfin/dv-bfin_ppi.h +1928867e0d7991e8902be473009576ee sim/bfin/dv-bfin_jtag.c +1b9d7e7967c7f36b4e274100cbac5620 sim/bfin/dv-bfin_gptimer.h +e5cb56cb1a1fcafc5cee3dcbac6b341f sim/bfin/dv-bfin_rtc.c +1852dd02bf7f2a4facc0a31797e7a39c sim/bfin/machs.c +fcf2f8b3ec462cbc8e3fed41d83527ef sim/bfin/dv-eth_phy.c +cc8209822b6d89ac0ff41ec175ce64a1 sim/bfin/devices.c +6157eaf7b29a162e2fafc9e052c36b9e sim/bfin/dv-bfin_wdog.c +b2eff1ce1eeaa507b4637de613a1c9cb sim/bfin/dv-bfin_ppi.c +0df8cffd16d9826f2b30e7e23ec301aa sim/bfin/dv-bfin_gpio.h +0b88624db92fee5ffbbfeded0fbb5839 sim/bfin/linux-fixed-code.s +1eb7d72c8c903600cf4973d6c6305315 sim/bfin/dv-bfin_ebiu_sdc.c +cd810a015d0ef908dda36b64a9b908b3 sim/bfin/dv-bfin_wdog.h +ec2f073ac7e4a1747d5606fd8eb73549 sim/bfin/dv-bfin_otp.h +ccd644ed9acf8eb90e2cc8f7b199a2af sim/bfin/dv-bfin_spi.h +3c91f9d8e35498a5ae3a8f0a3891f1fc sim/bfin/devices.h +e5b42b42ef4c00ac2393ed179ddb9a52 sim/bfin/Makefile.in +68f441497cd09a96519372324ef8577f sim/bfin/machs.h +9137d60970317ab704b90fb5c425b3b9 sim/bfin/dv-bfin_jtag.h +f796ad288ebc1b5199012f4d5a467bd3 sim/bfin/gui.c +4ab55a35c7007d58ee370d38587e6907 sim/bfin/aclocal.m4 +a81232a7cff04f4a086f0b57afba1f9f sim/bfin/dv-bfin_spi.c +6b5e661298215211848c22b4f8b589e7 sim/bfin/dv-bfin_mmu.h +2ee52a24c8ef11100e93e74217edaedd sim/bfin/dv-bfin_gptimer.c +7edc53f29e7478abc37db8e53b0c54d1 sim/bfin/dv-bfin_ctimer.h +9d174fa7de7153ef7452284b6274afed sim/bfin/dv-bfin_twi.h +f8cd2e8976d01e6a5ddf758fb6268baf sim/bfin/dv-bfin_ebiu_sdc.h +7df89243025b020a6490d53855b952de sim/bfin/dv-bfin_dma.c +0098bab083b64811f6d492f50ac826ba sim/bfin/dv-bfin_otp.c +6c24c539c50a4802bdfcb8b4ce291cd6 sim/bfin/dv-bfin_uart2.h +30a55d427899b19ff03ff641978336c3 sim/bfin/dv-bfin_sic.h +8c798da33d3ff0724145fad8bf7f2fdb sim/bfin/dv-bfin_mmu.c +a523b2ac7792dfdb2789a6e4a23dce43 sim/bfin/dv-bfin_ebiu_amc.h +934bfaaf38a9d15ebc260de0a277fdb6 sim/bfin/dv-bfin_pll.h +6ebe79a677fb79f45679561e7da3f42c sim/bfin/bfin-sim.c +bddcd13b306b98fe2ac3697b6c951116 sim/bfin/dv-bfin_pfmon.c +96ee2f6060962ee0b9366ae90bd299ed sim/bfin/proc_list.def +8834010276c1c21d148617914773d9b5 sim/bfin/dv-bfin_wp.c +3545e0d508e5ef9fb3b45b7d1c98a346 sim/bfin/dv-bfin_sic.c +8a41a69615d39326dc862322220ec3d2 sim/bfin/dv-bfin_trace.c +3a8dfdbddda920af933bac600544f8a6 sim/bfin/dv-bfin_dmac.h +647ce1ceea5b7cbd647181a833a797b8 sim/bfin/dv-bfin_pint.h +aeeb83b25c05a78df0d5398566f7f756 sim/bfin/dv-bfin_evt.h +492427fc77b38896d10fe0d402d8033b sim/bfin/linux-fixed-code.h +f0f7d19c334c265d262b0b388e7f1d2a sim/bfin/dv-bfin_uart2.c +a3f3a7745eb5eb6cb765af9af9b1945a sim/bfin/dv-bfin_wp.h +c06961cae926346e735ac032a983ca88 sim/bfin/bfin-sim.h +ca350d7cbddc698a48785aa19dac7821 sim/bfin/bfroms/bf527-0.2.h +207c1773441d4c2a58e8cc2e00ac79ce sim/bfin/bfroms/bf537-0.3.h +073b919a9cf4d7159a3cfce31bd4a4f5 sim/bfin/bfroms/all.h +d192c8113897b222793a89643741c55e sim/bfin/bfroms/bf59x_l1-0.1.h +c549474a3d8c3650e4125e352a351c74 sim/bfin/bfroms/bf54x_l1-0.2.h +aabc3164901d534355e6a1d3357dcbd1 sim/bfin/bfroms/bf533-0.2.h +4f6b611014655449ae9aa6ff733441be sim/bfin/bfroms/bf54x_l1-0.0.h +3888ce8daebf25b1187f8ba4cbc135f2 sim/bfin/bfroms/bf54x-0.1.h +583206f512c9c90892ef9dc84d789b34 sim/bfin/bfroms/bf54x-0.2.h +0dc2593a1f4706f08bf3aa71d596c41b sim/bfin/bfroms/bf526-0.1.h +1516ba56ad5f33eea71a01c88db27e70 sim/bfin/bfroms/bf526-0.2.h +0615504b7bc5477dcfa61d7b16121bfb sim/bfin/bfroms/bf538-0.0.h +5acfda483a7f0a576bf200e4a3e07e5f sim/bfin/bfroms/bf533-0.3.h +d59c99325a006c9ced53749cf2ef487b sim/bfin/bfroms/bf527-0.0.h +84f8cbfefb6807dc2d2ffe6244cc7f85 sim/bfin/bfroms/bf50x-0.0.h +ffb76dbec098de19fa58d330e4499c7d sim/bfin/bfroms/bf54x_l1-0.4.h +909ea02ecbce474582595dec30940205 sim/bfin/bfroms/bf537-0.1.h +45e3b4e178a02616165ed00bd3c58df2 sim/bfin/bfroms/bf51x-0.0.h +371c061fb393a41d964a6bb34a6ec8e5 sim/bfin/bfroms/bf54x-0.4.h +7c2822269026f83ae214a15f8688694d sim/bfin/bfroms/bf561-0.5.h +57d038d98c5a8e74ecf201b8b6d4f07a sim/bfin/bfroms/bf51x-0.1.h +74cac990b470c5c5aafbc35aa0a0cc56 sim/bfin/bfroms/bf526-0.0.h +1a35368e970c9649dde4cf0e71351082 sim/bfin/bfroms/bf51x-0.2.h +e98df0913c38a00af8117b5c288a8a85 sim/bfin/bfroms/bf54x-0.0.h +66cbeef247c1ae97be55a7c621b2414d sim/bfin/bfroms/bf59x-0.0.h +c26d6975c6703c392678642d3f6f080f sim/bfin/bfroms/bf527-0.1.h +f7c6c0a4c1b26e464277897746c69c64 sim/bfin/bfroms/bf54x_l1-0.1.h +f6f62da004a077342a5ea0b6d5ff8da4 sim/bfin/bfroms/bf533-0.1.h +c67b2baec67606a371bbe00edcc3dce8 sim/bfin/bfroms/bf537-0.0.h +bb38b617673e8e18c2931c9d8001f115 sim/bfin/dv-bfin_eppi.h +09e4c9b11fbc27ab53cd351ab5f9af57 sim/rl78/trace.c +c349a13a45a3bf9ee72df5b015468dfd sim/rl78/cpu.c +0f70a274f16673f3c92216579480a7f7 sim/rl78/ChangeLog +2aed1409d14cb35bc0d76d1cfe84caf2 sim/rl78/configure +09d6a57f399102d2cbc1562433d12aac sim/rl78/config.in +bde1622571318bfcdf6c5bce65a4b20b sim/rl78/configure.ac +07369e1a4a3abbc20b5ae1a4e767dec4 sim/rl78/mem.h +6934ffc1df5e237bfbefd72f013faf40 sim/rl78/mem.c +adefadbcb02829037a972463b18a8a26 sim/rl78/Makefile.in +76311820b878ff34a194d10a31eb5af9 sim/rl78/main.c +5bf955996e0a1982dd7082b9344c3f54 sim/rl78/rl78.c +4ab55a35c7007d58ee370d38587e6907 sim/rl78/aclocal.m4 +8d8ce220af1f5b718faf56ee1cb2d945 sim/rl78/cpu.h +95b5f7f2c96e9eb6fabeedd26f65397e sim/rl78/trace.h +38ad3e532838ccd3ef7b69e6f282da8a sim/rl78/load.c +4f4876524219c7e7c0473a901201c947 sim/rl78/gdb-if.c +4f535a03e5bbd33826cf1dcd2877631b sim/rl78/load.h +f7fdcd9476a22c222329703588c3fe52 sim/avr/ChangeLog +6ef545eaa66a20600537024b6bcc93cb sim/avr/configure +d8e6e1a81d5138af02f68697ea54bddd sim/avr/sim-main.h +79b3f19a4a961715ed1b3fc266e073d6 sim/avr/config.in +2ceb0f521218a7f8116b2effd82cf3a5 sim/avr/interp.c +9a07b90d62a269c0a08e6fd673cc930b sim/avr/configure.ac +caaa3910bca25b3ed94f8e4f6c77466b sim/avr/Makefile.in +4ab55a35c7007d58ee370d38587e6907 sim/avr/aclocal.m4 +dfb5e61b74302d4b55225504f5946b4c sim/aarch64/ChangeLog +067d8aa888596a6ee06e0e79244f3331 sim/aarch64/configure +2ccd7b132b4cfb9625ca0bdd6a5814a0 sim/aarch64/sim-main.h +79b3f19a4a961715ed1b3fc266e073d6 sim/aarch64/config.in +d8f7606e89a9ab3734f8af01c6af72b6 sim/aarch64/memory.h +a0fb020d8bd5acc8ebc092243eb5738d sim/aarch64/interp.c +18c93ae1963beba75bc2a6912ddf2e78 sim/aarch64/configure.ac +9eb28f94b9ca9ddb47b513b8d8e71f9f sim/aarch64/decode.h +e63f871fbedb2693d07dcaaa82630be3 sim/aarch64/simulator.h +96d6148d81f206a8c1b6199cea75552a sim/aarch64/cpustate.h +565c3985120de322d2a6786bcb3b9418 sim/aarch64/cpustate.c +a50702416c23fecd87e40ee2db20e963 sim/aarch64/Makefile.in +4ab55a35c7007d58ee370d38587e6907 sim/aarch64/aclocal.m4 +f5a80bbefc07cfc7908270ca99f4deec sim/aarch64/simulator.c +1d1f74004fcbfb63fdfc815ab616e433 sim/aarch64/memory.c +949ac516a62b23efe3d40625e86a29c4 sim/or1k/cpu.c +e3a3ddca8e0e6bfe5bf6c8a37b8f8aa0 sim/or1k/configure +61f997a1b06c1b99385e4d901cdfb979 sim/or1k/sim-main.h +94dfb558d8a77880f6d7af611a5b2d9a sim/or1k/or1k.c +09c18d7c4ed6a20c7f248cae2b6442ee sim/or1k/model.c +79b3f19a4a961715ed1b3fc266e073d6 sim/or1k/config.in +6b32506d4d7e4c3b602d7657469946a6 sim/or1k/mloop.in +189f87471a18bb1a55fef839d5afaf98 sim/or1k/or1k-sim.h +bd28f32fec4b2dadc193360ad6026bad sim/or1k/arch.h +109dfb1364115af9a96e29c830952d47 sim/or1k/configure.ac +a5dfca7e4cd323eaeb75d13eea1b1448 sim/or1k/sim-if.c +db5b67902a7c712a30748f6a6c873363 sim/or1k/traps.c +33bd52edf0c3d0ae24c0da0df1aeaa85 sim/or1k/decode.h +d18aa6af5f81437cf21c78e8b326b839 sim/or1k/decode.c +ea90017e76a426c248be481fe48caf08 sim/or1k/Makefile.in +2ccc2bbce46d577fcbcbad9a80af6c17 sim/or1k/sem.c +4ab55a35c7007d58ee370d38587e6907 sim/or1k/aclocal.m4 +0bfe06565e0378f739dd0d51099e08dc sim/or1k/cpu.h +b52a2f4c1be13166487a15c71954abed sim/or1k/arch.c +52800776d68417b4e66bd334dc3ac522 sim/or1k/cpuall.h +f4f03b812cdbb239f5a1fd44824e1763 sim/or1k/README +c32917c0c76e06c2cf132078d4afd26e sim/or1k/sem-switch.c +64b0a9de7bb19a3af8c155536a3e4a6d sim/m32r/decodex.h +ed77102f18c354b66711293a6ce8c7cd sim/m32r/cpu.c +2b40ae2b97a48a97ef84375e6fce106d sim/m32r/ChangeLog +1bd95abe50d0dae25b6431aeed769492 sim/m32r/dv-m32r_uart.c +28ed60b04e3adf0b9e78d243f65d9898 sim/m32r/configure +dc9f5ce67836f277be6d8842dcbe85b7 sim/m32r/sim-main.h +02405570c53c5019e70b5cfb529fd1cf sim/m32r/traps-linux.c +4c2518de88d990377089adb95fce57c1 sim/m32r/model.c +5612be8e02af3bf837bf725454d50414 sim/m32r/config.in +404e78c1f49e6b2ffd54ef42c44bc1b0 sim/m32r/sem2-switch.c +910562b3a5d446e0887fef922679bd09 sim/m32r/mloop.in +982bc42ee03bf0a6ebd5feb93dde99a6 sim/m32r/m32r.c +bbd89bacf23f1645d10c53d3891b95c7 sim/m32r/dv-m32r_uart.h +9e8ba250def9996544d6a3ec55645dc4 sim/m32r/arch.h +ec5293e3fd1192c88ba24e1e46d1dd09 sim/m32r/dv-m32r_cache.c +c5f5acc97a31beaa7d10506c8b45c546 sim/m32r/configure.ac +e67617238092d40e05cc5322154cc0c5 sim/m32r/sim-if.c +b9019f53ce0454af757750c21109d3e6 sim/m32r/traps.c +185399757b650b6419808cfc57227ce0 sim/m32r/m32rx.c +7a9ad19c677db078c4df1589185ef1f9 sim/m32r/mloopx.in +eabf6baa38e8f04131e6c76078662843 sim/m32r/decode2.c +b7862fc5cb089be022646a03e388a199 sim/m32r/decode.h +8eef76ecd82e2889b1e5a0d7ebac5aac sim/m32r/dv-m32r_cache.h +48cc4c70ce0c738f289e90abfd6afc1f sim/m32r/cpu2.h +f1c8f4082395a2f3217c81c59ac5a61c sim/m32r/cpux.c +d704735fa8790394a776e220702f63ed sim/m32r/decode2.h +5e066f619f923d3452967c2773857738 sim/m32r/cpu2.c +e401ce81778d171f79151b58eeef8bb0 sim/m32r/syscall.h +e2ed2ae28587a9e359a249275c27fdbc sim/m32r/model2.c +678cec3abd890c8399f90aa9bea7ce16 sim/m32r/decode.c +8e5948f25402c60be25ad64564bf0921 sim/m32r/Makefile.in +75e5a3e6c02efaf9a506636d92932c3a sim/m32r/sem.c +4ab55a35c7007d58ee370d38587e6907 sim/m32r/aclocal.m4 +8425a762fe3135ad651439788468cb6e sim/m32r/m32r-sim.h +936a19be9a040ccd70e7fb7140e4c379 sim/m32r/cpu.h +8425ff029914792ee7255211e149bfdd sim/m32r/semx-switch.c +eeb693db0b31643ebf1f4216ad030a0a sim/m32r/m32r2.c +bac3e003e7f52ae1a36cbdc12e4fea49 sim/m32r/arch.c +c4ce4bfb793218a0966395a833094384 sim/m32r/decodex.c +acd1f3cfbfe5db3b803cab0411736254 sim/m32r/cpux.h +36fa7aab60b3cd5757915ece366db155 sim/m32r/mloop2.in +fc8a32c942fdcca63ff21b8de73dc5a3 sim/m32r/modelx.c +e3f61faad82696ffdff872d3838b8d5f sim/m32r/cpuall.h +23b6e82d29f42c31a097d431b0f73004 sim/m32r/README +2163b38282e0e944f9a7c0a58aa7b1bd sim/m32r/sem-switch.c +2bfd082009eb29e5608c0e79f0c0a3aa sim/moxie/ChangeLog +242be6f3d7c828cc4f833eef36c83e35 sim/moxie/configure +aab3b8ae3e834f8dff9c3e147b2dca61 sim/moxie/sim-main.h +79b3f19a4a961715ed1b3fc266e073d6 sim/moxie/config.in +52a9849a86689a7ee1f88ce34bbd60ac sim/moxie/moxie-gdb.dts +fdc16cf70c34bea4d0f2c6ee23e62aa6 sim/moxie/interp.c +4e5b996dc62651c7c0bb56df38b83068 sim/moxie/configure.ac +26516538fe9d85d028e068576e89dd67 sim/moxie/Makefile.in +4ab55a35c7007d58ee370d38587e6907 sim/moxie/aclocal.m4 +e9c6c6b57764d71012fbe0e3d1754589 sim/h8300/ChangeLog +d41659ad79983b66251513d35a3fe46e sim/h8300/configure +cfb96073c298b3ef87108655329547d2 sim/h8300/sim-main.h +1acf178f54b723a97a64a19cd969aee0 sim/h8300/config.in +a3aaffcc56fa65b1fa1c3ff4e63eaa6a sim/h8300/compile.c +86e2cd68f928c5e9c9d886955aee7690 sim/h8300/configure.ac +c9a823dd177ee9fd09c667cf526cb6a1 sim/h8300/Makefile.in +4ab55a35c7007d58ee370d38587e6907 sim/h8300/aclocal.m4 +5a198f6b19aed858570b289330bf44f2 sim/h8300/writecode.c +cca394963a06fdeae736e3575103d984 sim/ft32/ChangeLog +e89310a023370ae3d2cf9f42dc53063b sim/ft32/configure +399673bb6a1af7e6c93c80fa3db60d17 sim/ft32/sim-main.h +79b3f19a4a961715ed1b3fc266e073d6 sim/ft32/config.in +85d1ea48f6d37392c040309cf16e0f8a sim/ft32/ft32-sim.h +94fb6624aff547122b7ccc5663401f23 sim/ft32/interp.c +a713808bc827e60d5b5d32c545bd0770 sim/ft32/configure.ac +075e3225fddb452a39583df827684f48 sim/ft32/Makefile.in +4ab55a35c7007d58ee370d38587e6907 sim/ft32/aclocal.m4 +4e06f442e7ebb9bdfacba51dd57bebfb sim/mn10300/ChangeLog +ac0d5957f102d1b56b2cb8f77ae1a8f0 sim/mn10300/configure +629e128406ad2397987d1481cf36aacb sim/mn10300/op_utils.c +e57a264da9c1b665d5cd25c01167f178 sim/mn10300/sim-main.h +3e38876f7468b1e337f51c202c4e1b63 sim/mn10300/dv-mn103cpu.c +f2737183451da654342429dce9b18f20 sim/mn10300/config.in +7ce1ff0fcaa61b7afaf5bf9a4097901c sim/mn10300/dv-mn103ser.c +bd023d9fab8152922898fdfd7c983e3b sim/mn10300/interp.c +95ea32a19aa6c9cad9037387a3180d1b sim/mn10300/dv-mn103tim.c +b0b3eee5cbaa12e1a4f4570488449b6a sim/mn10300/configure.ac +a7335227cef936abda2f0c8402e79570 sim/mn10300/mn10300.igen +1152b6c79ada4c5a3e6d0d5f2aa8b44d sim/mn10300/dv-mn103int.c +fe18b92a57eeca062fa9e762300df877 sim/mn10300/Makefile.in +cfa9b4c67a1f4db32dfb5f3b1fe61e84 sim/mn10300/dv-mn103iop.c +4ab55a35c7007d58ee370d38587e6907 sim/mn10300/aclocal.m4 +ca37d532ba114a9504ebc9f569417a2b sim/mn10300/am33.igen +c37a8063b25bb881b34e79630d4988b3 sim/mn10300/am33-2.igen +a02c306411614c8de463bf278aac5d2e sim/mn10300/mn10300.dc +e06d3d5148b90d05798fdeb1671f9b2c sim/mn10300/mn10300_sim.h +9560a29b6c94d4955a447290ab5d050a sim/mn10300/sim-main.c +587912cfc56a3ad22382cc8f82d7453f sim/d10v/ChangeLog +aa86cbc835a69895d241d450d689efbb sim/d10v/configure +315d2a708a7a356d0eb376e071a8ec49 sim/d10v/sim-main.h +79b3f19a4a961715ed1b3fc266e073d6 sim/d10v/config.in +486ffceb0ca54037eb52857f2c2be17e sim/d10v/interp.c +2d351f4c1e1ef4458d9303a518f3495d sim/d10v/simops.c +e7dd365f1ca1a58020c813d6e9369075 sim/d10v/configure.ac +0588da5709059f25ef93487a2068a8e7 sim/d10v/d10v_sim.h +030a61bc5d67ce1b8a537c7e93b9de11 sim/d10v/gencode.c +eb3a353fbac37291f772d9c097db91ce sim/d10v/Makefile.in +4ab55a35c7007d58ee370d38587e6907 sim/d10v/aclocal.m4 +0151d6f631ef5b3834e7d5a43304b55e sim/d10v/endian.c +e4d3ca86c6c7323728648b4c5e2f603d src-release.sh cf2baa0854f564a7785307e79f155efc symlink-tree 40bb1f4ce4a60a36d1ec50d66aeed4d1 test-driver 6ffd0f415aea2960cac41434e6d904bb texinfo/texinfo.tex cb06c1be6a41d68b0a65e0c1a91752bc ylwrap 65d06f6d5b67a82f5a06c7aee75a67c0 zlib/zconf.h -0e5c38a1ec38448cfc594efc152d32f7 zlib/make_vms.com +9ba95720f7a568bc6894ace309d78ac2 zlib/trees.c +34a634c4c6e1de2e357f18c170e6b96c zlib/inftrees.c ed5c6689a93dab332ccd7fde168492d7 zlib/ChangeLog -86734dafdef3e9a542a7c666a91ac591 zlib/minigzip.c -501032b70daeff30e39017a788b35074 zlib/configure -60674eee456b5cab09b25a4bfd55d533 zlib/zlib.pc.in -18d61f3b741431bbc971340507f413e2 zlib/deflate.c -a018d7e9e40c63ce8e1be3f6fa26e8a7 zlib/treebuild.xml -08310c11af1d0076d133415431f659ef zlib/example.c -26ab763d924e6ffc50701c71a408ce39 zlib/zconf.h.cmakein -088f835e49176d2c289162fe277f1433 zlib/adler32.c +b7a1991f01daea3efe108a215c5514a5 zlib/FAQ +bd5f05274027c5d5653e93ba1d07dede zlib/configure 20d7b26f5ae64f4e8501f846beab550c zlib/inffast.c -315c9e3e7dd1d24aeb9d6bc55b7de5fd zlib/amiga/Makefile.sas -f16cd4621f5561cf147b5e56a8af1946 zlib/amiga/Makefile.pup -fe89c9b2d3b621452c4f868590635c5f zlib/doc/rfc1951.txt -33a7749453d872da575e01c2c62fe877 zlib/doc/txtvsbin.txt -c9680de1a6b8939e16fd5e2a4f4785b8 zlib/doc/rfc1950.txt -7c4ee539faa6c908c3860588df424be1 zlib/doc/rfc1952.txt -63be46f443f80cc9081ed765198d4b8a zlib/doc/algorithm.txt -fd4927df770f466186fef280241eb502 zlib/configure.ac -3b6b6f9e88f2319b75e6ccb8c2823b13 zlib/INDEX -281c9a86ce42a799859a5978bc732cc5 zlib/old/Makefile.riscos -94928575e535e4057290970b885627f0 zlib/old/visual-basic.txt -cbf38eb0d95e0f43faf627cf42a680a7 zlib/old/descrip.mms -52748c82e9464e36daec6caa3f50b7d9 zlib/old/os2/Makefile.os2 -b917eb81b8d4b72931282aeedc167f83 zlib/old/os2/zlib.def -1aeeebbf2e64523db78f02c744dd425d zlib/old/Makefile.emx -bbfa7b4766eb254d816bcd7faf48f0f5 zlib/old/README -9d7ec0d0fe9134c725fc8b688ff673f4 zlib/zlib.pc.cmakein -8e4658ab605826672b98422b973305b6 zlib/zlib.3 -381f96b09b247fbe8f4c329a89bd5bd3 zlib/zlib2ansi -2c08acd5014596272031fdd1a36d0f1c zlib/gzlib.c +18d61f3b741431bbc971340507f413e2 zlib/deflate.c +6f80451b702a08fa8d149161e1d75313 zlib/watcom/watcom_f.mak +f6a102e1a91215f0e249b266053e9956 zlib/watcom/watcom_l.mak 12c1f3adaf005c8a4cfb629f2e266d30 zlib/inflate.h -f2adcadab3504b146be9c4928821f233 zlib/infback.c -34a634c4c6e1de2e357f18c170e6b96c zlib/inftrees.c -c892c303a1be104ed0efb628e18ed85a zlib/inflate.c -0e9a37be8e3b85cc0ccf60504064c297 zlib/ChangeLog.jit +7fa3e91804601b6618c915b76a8dc332 zlib/inffixed.h +2140627edcd840671f03eced0741c520 zlib/examples/gzlog.c +7d497747a90370d3b13320bbf97e65dc zlib/examples/gzlog.h +7d040e322c50440b203bd70b3a448470 zlib/examples/README.examples +cba90a61087e9d9c6bbb45a005543468 zlib/examples/gzappend.c +d6c05757d17814110c93151ab5c1c910 zlib/examples/gzjoin.c +4061e63cf68f479ebbd4bab90178a774 zlib/examples/fitblk.c +b21de2ad7c6a8dd26d58c831970e4efe zlib/examples/zran.c +f4912cf5a1ade2e862e193983c02b3ee zlib/examples/zlib_how.html +2baa24dfcde30e5378ebc823b9546fc5 zlib/examples/zpipe.c +3ae3e8df2161c8d00d586396fc419c2b zlib/examples/gun.c +6ac79bd8913b81b91a5dfbbe372331dc zlib/examples/enough.c 68c4c1f6c737d307d372130351b123a6 zlib/compress.c -2a7a661ce2d463e3876704786fd8dfdd zlib/msdos/Makefile.msc -bcd5df6ee3272ea5a3a17feb90ad148d zlib/msdos/Makefile.emx -80adf0a73c836697ef02cd8cc19733cd zlib/msdos/Makefile.bor -ddcc308923bda1742d6c6638367da0dd zlib/msdos/Makefile.dj2 -b8ec8ac0dac9fe62dd4934fb4b9f772c zlib/msdos/Makefile.tc +29d02cff161bde3e4e717b25a2ab7050 zlib/gzclose.c +a25adb9dd2bbc05710a370e4e17a9ff5 zlib/Makefile.am +f3669099d3f571dbc0426401ed5f50e3 zlib/inffast.h c29c6b92cebd4ce2a599b33325919033 zlib/deflate.h -66c6b3953f574eca8b709dd5f6865745 zlib/zconf.h.in -5ce76383264e69a07708074036832a10 zlib/ChangeLog.bin-gdb -fb6a1f880ef0e3bca0dd9185e6eb283f zlib/zutil.c -e2dee880a39c7781e9902c5db8f36e10 zlib/gzguts.h -041a9be530eca6d4b057404cf1cc9350 zlib/qnx/package.qpg -86f17e0090299a0470d5ee59073406db zlib/contrib/vstudio/vc11/miniunz.vcxproj -33a7b27fe1d9aec556781db0c4ecb5bc zlib/contrib/vstudio/vc11/testzlib.vcxproj -67a8a72530d1797e2f4711115a19b3a2 zlib/contrib/vstudio/vc11/zlibvc.vcxproj -7e770b6d4d11f5a912458d5f5cd8e7b8 zlib/contrib/vstudio/vc11/zlib.rc -68876762bd4a6a95a6caa2a9ea357de8 zlib/contrib/vstudio/vc11/zlibstat.vcxproj -cd0082879b0e215569c605266a8afaa0 zlib/contrib/vstudio/vc11/testzlibdll.vcxproj -6f61e1b1973401a8d09a3883bc1d4ecd zlib/contrib/vstudio/vc11/zlibvc.sln -2271100b7757c4693b11cf0774e4db5e zlib/contrib/vstudio/vc11/zlibvc.def -c4b2a63a1f59196dc1b105c89dcb4816 zlib/contrib/vstudio/vc11/minizip.vcxproj -3fc35fe085a4ebbcb4a30704088074cb zlib/contrib/vstudio/vc14/zlibstat.vcxproj.user -c1bf6aeed421962812df7bc8d9c42632 zlib/contrib/vstudio/vc14/miniunz.vcxproj -3fc35fe085a4ebbcb4a30704088074cb zlib/contrib/vstudio/vc14/miniunz.vcxproj.user -3fc35fe085a4ebbcb4a30704088074cb zlib/contrib/vstudio/vc14/minizip.vcxproj.user -b3fc89a41918b28d8757a1d25f0ce629 zlib/contrib/vstudio/vc14/testzlib.vcxproj -3fc35fe085a4ebbcb4a30704088074cb zlib/contrib/vstudio/vc14/zlibvc.vcxproj.user -68f9d89ce57252e0a4d2975fd1cc862f zlib/contrib/vstudio/vc14/zlibvc.vcxproj -e3255b9ba8a2e6772034a7f2779547dd zlib/contrib/vstudio/vc14/zlib.rc -3fc35fe085a4ebbcb4a30704088074cb zlib/contrib/vstudio/vc14/testzlib.vcxproj.user -3fc35fe085a4ebbcb4a30704088074cb zlib/contrib/vstudio/vc14/testzlibdll.vcxproj.user -efcc2393089500f1776f71fd5db5cc86 zlib/contrib/vstudio/vc14/zlibstat.vcxproj -b0e3975c1939940c9566847afc003a9c zlib/contrib/vstudio/vc14/testzlibdll.vcxproj -5198a1fde5c1e369764dcba9a08ee102 zlib/contrib/vstudio/vc14/zlibvc.sln -2271100b7757c4693b11cf0774e4db5e zlib/contrib/vstudio/vc14/zlibvc.def -1f9392b57090712e57df751932b9cbe6 zlib/contrib/vstudio/vc14/minizip.vcxproj -59ccc97a1d79963cdec10a7005f21133 zlib/contrib/vstudio/readme.txt -fa427177a54ab86e4b126116f34ecf8a zlib/contrib/vstudio/vc10/miniunz.vcxproj -fa684ecb9b7ddd26f01523bce078b18f zlib/contrib/vstudio/vc10/zlibstat.vcxproj.filters -02632e0bdde13c80630d75ad130af599 zlib/contrib/vstudio/vc10/testzlib.vcxproj.filters -0879c03e97afa7051526dd972718b475 zlib/contrib/vstudio/vc10/testzlib.vcxproj -ca5ae9c4b8558f8c4d303b46e694a8f2 zlib/contrib/vstudio/vc10/zlibvc.vcxproj -7e770b6d4d11f5a912458d5f5cd8e7b8 zlib/contrib/vstudio/vc10/zlib.rc -002fa9b3f7f92ca6c8558474d291df19 zlib/contrib/vstudio/vc10/zlibstat.vcxproj -048091db0ef98c95b4674d4d4a46c964 zlib/contrib/vstudio/vc10/miniunz.vcxproj.filters -35e42b8be068e38e6642a3bde8d20299 zlib/contrib/vstudio/vc10/testzlibdll.vcxproj.filters -72131998544b1d1ce5c35fff7ae69db0 zlib/contrib/vstudio/vc10/minizip.vcxproj.filters -e6abb2e275cb6d056b0b49ffca125fc4 zlib/contrib/vstudio/vc10/testzlibdll.vcxproj -0346af46dff2a59b22e51aaf67930201 zlib/contrib/vstudio/vc10/zlibvc.sln -2271100b7757c4693b11cf0774e4db5e zlib/contrib/vstudio/vc10/zlibvc.def -5b6ea18f33d45f32c7c52f9b63c56d73 zlib/contrib/vstudio/vc10/minizip.vcxproj -16267b153514d3f39d1b7c48527372ee zlib/contrib/vstudio/vc10/zlibvc.vcxproj.filters -71cfe0a7366431ef50ac350f898e0a61 zlib/contrib/vstudio/vc12/miniunz.vcxproj -fa8301e3d625a36575542248d14c94e3 zlib/contrib/vstudio/vc12/testzlib.vcxproj -5b779ef8ec6c75419d1fee9a6ebaa954 zlib/contrib/vstudio/vc12/zlibvc.vcxproj -e3255b9ba8a2e6772034a7f2779547dd zlib/contrib/vstudio/vc12/zlib.rc -f34ae747f6d75f8417ffb70a71c102a3 zlib/contrib/vstudio/vc12/zlibstat.vcxproj -d3121fbcce2ad9726a34ab2992c02b18 zlib/contrib/vstudio/vc12/testzlibdll.vcxproj -ab4ae9b904012b1566ee5a307613d2aa zlib/contrib/vstudio/vc12/zlibvc.sln -2271100b7757c4693b11cf0774e4db5e zlib/contrib/vstudio/vc12/zlibvc.def -61959b86fba2f58c84bc9a441ad0cbe0 zlib/contrib/vstudio/vc12/minizip.vcxproj -f3fd4bfc77606539f961b0aee7e57c4f zlib/contrib/vstudio/vc9/zlibvc.vcproj -3bd3847ddb393360355d1012338c638e zlib/contrib/vstudio/vc9/testzlibdll.vcproj -a70e977e002d0df86a123ba7b02bed4d zlib/contrib/vstudio/vc9/minizip.vcproj -7e770b6d4d11f5a912458d5f5cd8e7b8 zlib/contrib/vstudio/vc9/zlib.rc -2324ada784731ab79fd384114d73c727 zlib/contrib/vstudio/vc9/zlibstat.vcproj -39acac8b09fad25c73403d812887cfc9 zlib/contrib/vstudio/vc9/miniunz.vcproj -a2ab8c8ebdca681348ab0d721f4f0ea9 zlib/contrib/vstudio/vc9/testzlib.vcproj -b34a55b36004333a0bec3a5da1ff25a3 zlib/contrib/vstudio/vc9/zlibvc.sln -2271100b7757c4693b11cf0774e4db5e zlib/contrib/vstudio/vc9/zlibvc.def -1ff457742eb3588db60fd059d56a5dd5 zlib/contrib/untgz/untgz.c -d3be2a78c4fd759d1578b6d91f8430c1 zlib/contrib/untgz/Makefile.msc -45070687ecca4a8953f666b91a4b54f4 zlib/contrib/untgz/Makefile -7ecbeeb67e09a843961187673974f86d zlib/contrib/puff/puff.h -b34af8b5903cf6dcd5c9e665cfed84e1 zlib/contrib/puff/puff.c -948659135181da512e6c37dd759d142d zlib/contrib/puff/README -897a1a43df17f320444e8d386fecf1c0 zlib/contrib/puff/pufftest.c -82987a599277217cedc2ff78b2c3a63d zlib/contrib/puff/Makefile -b1319227312f62c24d98d619b417a43b zlib/contrib/puff/zeros.raw -06aaf02bb8b5a73503774d78760b191f zlib/contrib/inflate86/inffas86.c -56cc7e752a85f9d6489892aad226976b zlib/contrib/inflate86/inffast.S -026e00db1f7988e09ba4b6069adc3957 zlib/contrib/pascal/zlibpas.pas -b2cc80e48f2aa69be40b6f52ba3480c4 zlib/contrib/pascal/zlibd32.mak -6e41517081b62c5045e67146c2b5c3ec zlib/contrib/pascal/example.pas -6f8616a2ea8e227457c9f191b4c71018 zlib/contrib/pascal/readme.txt -93f90ecc4d5299d820c3da08f7c7e7d2 zlib/contrib/iostream/zfstream.h -a20e40dae1e8b28ef2ec9ed98fdc8a03 zlib/contrib/iostream/test.cpp -a73c28679044fdf0a8057c5193db8da0 zlib/contrib/iostream/zfstream.cpp -5f6c5b314559290786a59c0320b800d5 zlib/contrib/amd64/amd64-match.S -fc91693deab323a4810a4cbd3c923c4a zlib/contrib/blast/blast.c -f8dd3560a13a68bd15f5ca5a53c94ce9 zlib/contrib/blast/test.pk -b93c34189a9302e6f43c53c7d0277637 zlib/contrib/blast/README -5cd923d6c5e717cdc43180aaa2eeed18 zlib/contrib/blast/Makefile -1201a93782f0542d6fbf5134c1a5a4c6 zlib/contrib/blast/test.txt -aa831d52e70bab6b0319724628e4acce zlib/contrib/blast/blast.h 8049971777ec44ca48f3043d9c4d1192 zlib/contrib/masmx64/gvmat64.obj 9a1aeac37f1a15c0ef1fd68f10d24b3d zlib/contrib/masmx64/inffasx64.asm 81c1080ed3661200c166e00394703f94 zlib/contrib/masmx64/readme.txt -94027d9beeb5a59503ac3978f9999e90 zlib/contrib/masmx64/bld_ml64.bat 35e51e29b6183834943dacbf58a4276c zlib/contrib/masmx64/inffasx64.obj -755094d8835608c4652ca43a44af47ec zlib/contrib/masmx64/inffas8664.c 43cb3b368ada48e0ca4608ddb7df69e6 zlib/contrib/masmx64/gvmat64.asm -46821b590c4a11eab8409b1d3f1c6fca zlib/contrib/dotzlib/DotZLib.sln -6071d8412268ff9765540c491a26de1a zlib/contrib/dotzlib/DotZLib/Inflater.cs -23d0d7c18846fc31655b6aa89b7c8038 zlib/contrib/dotzlib/DotZLib/AssemblyInfo.cs -7bd54b47c37a88cc11c8e92c89be5a66 zlib/contrib/dotzlib/DotZLib/UnitTests.cs -0c83e2409077960456b040ce13fa1fd4 zlib/contrib/dotzlib/DotZLib/GZipStream.cs -24dc08da7a2f4ae283334414effe4342 zlib/contrib/dotzlib/DotZLib/CodecBase.cs -250192c134de2a3c9c1d11eaa490bce1 zlib/contrib/dotzlib/DotZLib/DotZLib.cs -d01b3cb2e75da9b15f05b92b42f6bd33 zlib/contrib/dotzlib/DotZLib/ChecksumImpl.cs -1549ce82a2662e77a22625f68c0a5d36 zlib/contrib/dotzlib/DotZLib/DotZLib.csproj -0f21c8a8e81b9409c3cc82200210b977 zlib/contrib/dotzlib/DotZLib/CircularBuffer.cs -1fdc6f77f6fcf582ab011646db1b8080 zlib/contrib/dotzlib/DotZLib/Deflater.cs -f8b0da2a5ad0018962542d37e28b7e24 zlib/contrib/dotzlib/DotZLib.chm -1f20f3168ee63d90de033edac2ce383c zlib/contrib/dotzlib/readme.txt -81543b22c36f10d20ac9712f8d80ef8d zlib/contrib/dotzlib/LICENSE_1_0.txt -b1aaa7c52472b3cb4bc9ffd50de23c4c zlib/contrib/dotzlib/DotZLib.build -be5cf855a19b76feb28468e5b46145b7 zlib/contrib/infback9/inftree9.h -23ff5edec0817da303cb1294c1e4205c zlib/contrib/infback9/infback9.c -84ff1d06483d3da2af928cddcab88a1b zlib/contrib/infback9/README -1558f49aeca6376b7aa331add59e0e06 zlib/contrib/infback9/inffix9.h -24ad6e3224225202cc5d359440c2f4d9 zlib/contrib/infback9/inftree9.c +94027d9beeb5a59503ac3978f9999e90 zlib/contrib/masmx64/bld_ml64.bat +755094d8835608c4652ca43a44af47ec zlib/contrib/masmx64/inffas8664.c 8a4de1bca6c4182d025ea55062d125d9 zlib/contrib/infback9/inflate9.h 52b1ed99960d3ed7ed60cd20295e64a8 zlib/contrib/infback9/infback9.h +23ff5edec0817da303cb1294c1e4205c zlib/contrib/infback9/infback9.c +be5cf855a19b76feb28468e5b46145b7 zlib/contrib/infback9/inftree9.h +24ad6e3224225202cc5d359440c2f4d9 zlib/contrib/infback9/inftree9.c +1558f49aeca6376b7aa331add59e0e06 zlib/contrib/infback9/inffix9.h +84ff1d06483d3da2af928cddcab88a1b zlib/contrib/infback9/README 417c6b266549b949b958733f95d075ef zlib/contrib/README.contrib -7db484a6aa910e703838859f33867d02 zlib/contrib/minizip/make_vms.com -818e2950cc00d787eaa9b710007dc53f zlib/contrib/minizip/iowin32.h -bcbe781316bdbd05584063176b90d672 zlib/contrib/minizip/minizip.pc.in -ec302a2b5e19af31263ce77260dd49d0 zlib/contrib/minizip/MiniZip64_Changes.txt -e6ee69414e1309f0669ae661ca56a7b3 zlib/contrib/minizip/unzip.c -41b1495a0615dc17dbc5f4c74941fc63 zlib/contrib/minizip/configure.ac -254fe0695464d4cbbaa1fdc0c83c6a3c zlib/contrib/minizip/miniunz.c -174c6f2a32dad5023616fc45855d8c59 zlib/contrib/minizip/mztools.c -e8a6cc43207a37d631d9e90bbec6e6ed zlib/contrib/minizip/ioapi.c -1f4ccb34373f0b46ae4fa7f3c731ae3b zlib/contrib/minizip/miniunzip.1 -7d6c0585719ba47fd356795801befc6d zlib/contrib/minizip/ioapi.h -840ce05a6f75ee1683460b9873b120b6 zlib/contrib/minizip/iowin32.c -e1495f151b00503a64aae7b375cc3b80 zlib/contrib/minizip/zip.h -4fb98be7d5558dd0e8bb210c18f2ba1e zlib/contrib/minizip/zip.c -ab61e7d58c5c7114a6c531ce36ccc3e5 zlib/contrib/minizip/MiniZip64_info.txt -6e72c46776f0db175ec8f15144a3c250 zlib/contrib/minizip/crypt.h -064c9424ffab4af58c685140bb0fc3a0 zlib/contrib/minizip/Makefile -11ae6a9d654c95c47da55fe16772a1e5 zlib/contrib/minizip/unzip.h -e2a4a0c1cad4ceb1f77fb3b7e813bb35 zlib/contrib/minizip/minizip.c -7caac7503f8f002d61e0f0e5b7f33bc6 zlib/contrib/minizip/mztools.h -3a50713bdffd399cba168843314850f4 zlib/contrib/minizip/Makefile.am -c7758789cc7e9e99f07d0e758475ea28 zlib/contrib/minizip/minizip.1 -938f58c179fabf6ff9ffb85395ada81f zlib/contrib/iostream3/zfstream.h -8e843c6f8614b260b153091edf9af3ec zlib/contrib/iostream3/test.cc -06be56f0740f2a8dd9b9e04824709ad8 zlib/contrib/iostream3/TODO -7ec7295bc3b6fe132dba702e0f1f8892 zlib/contrib/iostream3/README -dda5e85498fe3936fabd955b5504c74e zlib/contrib/iostream3/zfstream.cc +9fc09497cd386635010c5b665cac77b4 zlib/contrib/testzlib/testzlib.txt +9e59472f7750d8d727a5cbdf94d8ce2b zlib/contrib/testzlib/testzlib.c +35c8e3cc241cef1605bd108b5319ca63 zlib/contrib/asm686/match.S +c28b5c0d295403ec6c6ba001238ec648 zlib/contrib/asm686/README.686 5e772d7302475e5473d0c4c57b9861e8 zlib/contrib/gcc_gvmat64/gvmat64.S -9e59472f7750d8d727a5cbdf94d8ce2b zlib/contrib/testzlib/testzlib.c -9fc09497cd386635010c5b665cac77b4 zlib/contrib/testzlib/testzlib.txt 5d67ffc3a8cbe706d47d25f8124c72dd zlib/contrib/ada/zlib-streams.adb +d520a330ed13ea54e7b20c8e5de64579 zlib/contrib/ada/zlib-thin.adb 38044e8f5f88e1f70ade036779d56ee8 zlib/contrib/ada/zlib.gpr -71de2670f2e588b51c62e7f6a9046399 zlib/contrib/ada/zlib.ads -a223bf66e23cc79eba08eadd40ee269b zlib/contrib/ada/read.adb -c998583cdc1fe9d7f8f6b92d1a9551a3 zlib/contrib/ada/readme.txt 9659f0be883fe948d584bc969cbd8564 zlib/contrib/ada/zlib-streams.ads -d520a330ed13ea54e7b20c8e5de64579 zlib/contrib/ada/zlib-thin.adb +c998583cdc1fe9d7f8f6b92d1a9551a3 zlib/contrib/ada/readme.txt 8197c8e51a900ed2a1e98d9c1455dba0 zlib/contrib/ada/test.adb -92b08ae0238ed5046f1a84959e6e8a54 zlib/contrib/ada/zlib-thin.ads +cd14a97dd8a0613bb1244a68c0c764d6 zlib/contrib/ada/buffer_demo.adb +a223bf66e23cc79eba08eadd40ee269b zlib/contrib/ada/read.adb f46bd97cccf4719989ee553daa36f8c6 zlib/contrib/ada/zlib.adb +71de2670f2e588b51c62e7f6a9046399 zlib/contrib/ada/zlib.ads +92b08ae0238ed5046f1a84959e6e8a54 zlib/contrib/ada/zlib-thin.ads 20f2b8d64f3507ea0eb67bf4be048599 zlib/contrib/ada/mtest.adb -cd14a97dd8a0613bb1244a68c0c764d6 zlib/contrib/ada/buffer_demo.adb -446f6bce2e16dfd9163982c3701f3e91 zlib/contrib/iostream2/zstream.h d32476bde4e6d5f889092fdff6f8cdb0 zlib/contrib/iostream2/zstream_test.cpp -c28b5c0d295403ec6c6ba001238ec648 zlib/contrib/asm686/README.686 -35c8e3cc241cef1605bd108b5319ca63 zlib/contrib/asm686/match.S +446f6bce2e16dfd9163982c3701f3e91 zlib/contrib/iostream2/zstream.h +93f90ecc4d5299d820c3da08f7c7e7d2 zlib/contrib/iostream/zfstream.h +a73c28679044fdf0a8057c5193db8da0 zlib/contrib/iostream/zfstream.cpp +a20e40dae1e8b28ef2ec9ed98fdc8a03 zlib/contrib/iostream/test.cpp +938f58c179fabf6ff9ffb85395ada81f zlib/contrib/iostream3/zfstream.h +06be56f0740f2a8dd9b9e04824709ad8 zlib/contrib/iostream3/TODO +8e843c6f8614b260b153091edf9af3ec zlib/contrib/iostream3/test.cc +dda5e85498fe3936fabd955b5504c74e zlib/contrib/iostream3/zfstream.cc +7ec7295bc3b6fe132dba702e0f1f8892 zlib/contrib/iostream3/README +84c3c6d7025dfd97ad53b9dd93768f54 zlib/contrib/masmx86/match686.asm 65a7df71a9aa477681e9559c779db941 zlib/contrib/masmx86/inffas32.asm 62490f807440608131632137a4fe96a1 zlib/contrib/masmx86/gvmat32.obj a809d4d52fc0a9d792b0d4e3c557836c zlib/contrib/masmx86/readme.txt -84c3c6d7025dfd97ad53b9dd93768f54 zlib/contrib/masmx86/match686.asm 1ddb7c4061d8a9c96346d0eac2eb5c77 zlib/contrib/masmx86/inffas32.obj b71c12c57e5a63630a759e728e92668e zlib/contrib/masmx86/bld_ml32.bat -b2cc80e48f2aa69be40b6f52ba3480c4 zlib/contrib/delphi/zlibd32.mak -e43e458c50d36075813a1533d05a0bdc zlib/contrib/delphi/readme.txt +06aaf02bb8b5a73503774d78760b191f zlib/contrib/inflate86/inffas86.c +56cc7e752a85f9d6489892aad226976b zlib/contrib/inflate86/inffast.S +5f6c5b314559290786a59c0320b800d5 zlib/contrib/amd64/amd64-match.S +46821b590c4a11eab8409b1d3f1c6fca zlib/contrib/dotzlib/DotZLib.sln +f8b0da2a5ad0018962542d37e28b7e24 zlib/contrib/dotzlib/DotZLib.chm +1f20f3168ee63d90de033edac2ce383c zlib/contrib/dotzlib/readme.txt +250192c134de2a3c9c1d11eaa490bce1 zlib/contrib/dotzlib/DotZLib/DotZLib.cs +7bd54b47c37a88cc11c8e92c89be5a66 zlib/contrib/dotzlib/DotZLib/UnitTests.cs +1549ce82a2662e77a22625f68c0a5d36 zlib/contrib/dotzlib/DotZLib/DotZLib.csproj +0f21c8a8e81b9409c3cc82200210b977 zlib/contrib/dotzlib/DotZLib/CircularBuffer.cs +1fdc6f77f6fcf582ab011646db1b8080 zlib/contrib/dotzlib/DotZLib/Deflater.cs +d01b3cb2e75da9b15f05b92b42f6bd33 zlib/contrib/dotzlib/DotZLib/ChecksumImpl.cs +24dc08da7a2f4ae283334414effe4342 zlib/contrib/dotzlib/DotZLib/CodecBase.cs +0c83e2409077960456b040ce13fa1fd4 zlib/contrib/dotzlib/DotZLib/GZipStream.cs +6071d8412268ff9765540c491a26de1a zlib/contrib/dotzlib/DotZLib/Inflater.cs +23d0d7c18846fc31655b6aa89b7c8038 zlib/contrib/dotzlib/DotZLib/AssemblyInfo.cs +b1aaa7c52472b3cb4bc9ffd50de23c4c zlib/contrib/dotzlib/DotZLib.build +81543b22c36f10d20ac9712f8d80ef8d zlib/contrib/dotzlib/LICENSE_1_0.txt +6e41517081b62c5045e67146c2b5c3ec zlib/contrib/pascal/example.pas +6f8616a2ea8e227457c9f191b4c71018 zlib/contrib/pascal/readme.txt +b2cc80e48f2aa69be40b6f52ba3480c4 zlib/contrib/pascal/zlibd32.mak +026e00db1f7988e09ba4b6069adc3957 zlib/contrib/pascal/zlibpas.pas +7ecbeeb67e09a843961187673974f86d zlib/contrib/puff/puff.h +b1319227312f62c24d98d619b417a43b zlib/contrib/puff/zeros.raw +82987a599277217cedc2ff78b2c3a63d zlib/contrib/puff/Makefile +897a1a43df17f320444e8d386fecf1c0 zlib/contrib/puff/pufftest.c +b34af8b5903cf6dcd5c9e665cfed84e1 zlib/contrib/puff/puff.c +948659135181da512e6c37dd759d142d zlib/contrib/puff/README +d3be2a78c4fd759d1578b6d91f8430c1 zlib/contrib/untgz/Makefile.msc +45070687ecca4a8953f666b91a4b54f4 zlib/contrib/untgz/Makefile +1ff457742eb3588db60fd059d56a5dd5 zlib/contrib/untgz/untgz.c +1201a93782f0542d6fbf5134c1a5a4c6 zlib/contrib/blast/test.txt +fc91693deab323a4810a4cbd3c923c4a zlib/contrib/blast/blast.c +5cd923d6c5e717cdc43180aaa2eeed18 zlib/contrib/blast/Makefile +aa831d52e70bab6b0319724628e4acce zlib/contrib/blast/blast.h +f8dd3560a13a68bd15f5ca5a53c94ce9 zlib/contrib/blast/test.pk +b93c34189a9302e6f43c53c7d0277637 zlib/contrib/blast/README bcc04a52a768c648243ede04a1d417ac zlib/contrib/delphi/ZLib.pas +e43e458c50d36075813a1533d05a0bdc zlib/contrib/delphi/readme.txt b02c46423595bd6358de3b7c5a148a88 zlib/contrib/delphi/ZLibConst.pas -c999b14aab6322655059b2f1146fb935 zlib/gzread.c -8a3caeeacc6135dce18634b7b5da1eac zlib/uncompr.c -7b64b28d6109d665486b10daa1cc5386 zlib/aclocal.m4 -929d15e7fc86ced153a5b0feae168b4e zlib/test/minigzip.c -850825a7e5ddc45e520909406d25bdff zlib/test/example.c -629a048f0edd2a18c6c18a11679628d8 zlib/test/infcover.c -8914872466a77551efb3898272ed98e0 zlib/zlib.map -486dd2758187aaeb071f6a0ad5094fda zlib/nintendods/README +b2cc80e48f2aa69be40b6f52ba3480c4 zlib/contrib/delphi/zlibd32.mak +ca5ae9c4b8558f8c4d303b46e694a8f2 zlib/contrib/vstudio/vc10/zlibvc.vcxproj +2271100b7757c4693b11cf0774e4db5e zlib/contrib/vstudio/vc10/zlibvc.def +35e42b8be068e38e6642a3bde8d20299 zlib/contrib/vstudio/vc10/testzlibdll.vcxproj.filters +5b6ea18f33d45f32c7c52f9b63c56d73 zlib/contrib/vstudio/vc10/minizip.vcxproj +e6abb2e275cb6d056b0b49ffca125fc4 zlib/contrib/vstudio/vc10/testzlibdll.vcxproj +02632e0bdde13c80630d75ad130af599 zlib/contrib/vstudio/vc10/testzlib.vcxproj.filters +048091db0ef98c95b4674d4d4a46c964 zlib/contrib/vstudio/vc10/miniunz.vcxproj.filters +16267b153514d3f39d1b7c48527372ee zlib/contrib/vstudio/vc10/zlibvc.vcxproj.filters +0879c03e97afa7051526dd972718b475 zlib/contrib/vstudio/vc10/testzlib.vcxproj +0346af46dff2a59b22e51aaf67930201 zlib/contrib/vstudio/vc10/zlibvc.sln +002fa9b3f7f92ca6c8558474d291df19 zlib/contrib/vstudio/vc10/zlibstat.vcxproj +7e770b6d4d11f5a912458d5f5cd8e7b8 zlib/contrib/vstudio/vc10/zlib.rc +72131998544b1d1ce5c35fff7ae69db0 zlib/contrib/vstudio/vc10/minizip.vcxproj.filters +fa684ecb9b7ddd26f01523bce078b18f zlib/contrib/vstudio/vc10/zlibstat.vcxproj.filters +fa427177a54ab86e4b126116f34ecf8a zlib/contrib/vstudio/vc10/miniunz.vcxproj +59ccc97a1d79963cdec10a7005f21133 zlib/contrib/vstudio/readme.txt +67a8a72530d1797e2f4711115a19b3a2 zlib/contrib/vstudio/vc11/zlibvc.vcxproj +2271100b7757c4693b11cf0774e4db5e zlib/contrib/vstudio/vc11/zlibvc.def +c4b2a63a1f59196dc1b105c89dcb4816 zlib/contrib/vstudio/vc11/minizip.vcxproj +cd0082879b0e215569c605266a8afaa0 zlib/contrib/vstudio/vc11/testzlibdll.vcxproj +33a7b27fe1d9aec556781db0c4ecb5bc zlib/contrib/vstudio/vc11/testzlib.vcxproj +6f61e1b1973401a8d09a3883bc1d4ecd zlib/contrib/vstudio/vc11/zlibvc.sln +68876762bd4a6a95a6caa2a9ea357de8 zlib/contrib/vstudio/vc11/zlibstat.vcxproj +7e770b6d4d11f5a912458d5f5cd8e7b8 zlib/contrib/vstudio/vc11/zlib.rc +86f17e0090299a0470d5ee59073406db zlib/contrib/vstudio/vc11/miniunz.vcxproj +a70e977e002d0df86a123ba7b02bed4d zlib/contrib/vstudio/vc9/minizip.vcproj +39acac8b09fad25c73403d812887cfc9 zlib/contrib/vstudio/vc9/miniunz.vcproj +2271100b7757c4693b11cf0774e4db5e zlib/contrib/vstudio/vc9/zlibvc.def +2324ada784731ab79fd384114d73c727 zlib/contrib/vstudio/vc9/zlibstat.vcproj +a2ab8c8ebdca681348ab0d721f4f0ea9 zlib/contrib/vstudio/vc9/testzlib.vcproj +3bd3847ddb393360355d1012338c638e zlib/contrib/vstudio/vc9/testzlibdll.vcproj +f3fd4bfc77606539f961b0aee7e57c4f zlib/contrib/vstudio/vc9/zlibvc.vcproj +b34a55b36004333a0bec3a5da1ff25a3 zlib/contrib/vstudio/vc9/zlibvc.sln +7e770b6d4d11f5a912458d5f5cd8e7b8 zlib/contrib/vstudio/vc9/zlib.rc +68f9d89ce57252e0a4d2975fd1cc862f zlib/contrib/vstudio/vc14/zlibvc.vcxproj +2271100b7757c4693b11cf0774e4db5e zlib/contrib/vstudio/vc14/zlibvc.def +1f9392b57090712e57df751932b9cbe6 zlib/contrib/vstudio/vc14/minizip.vcxproj +b0e3975c1939940c9566847afc003a9c zlib/contrib/vstudio/vc14/testzlibdll.vcxproj +3fc35fe085a4ebbcb4a30704088074cb zlib/contrib/vstudio/vc14/testzlib.vcxproj.user +3fc35fe085a4ebbcb4a30704088074cb zlib/contrib/vstudio/vc14/minizip.vcxproj.user +3fc35fe085a4ebbcb4a30704088074cb zlib/contrib/vstudio/vc14/zlibvc.vcxproj.user +b3fc89a41918b28d8757a1d25f0ce629 zlib/contrib/vstudio/vc14/testzlib.vcxproj +5198a1fde5c1e369764dcba9a08ee102 zlib/contrib/vstudio/vc14/zlibvc.sln +3fc35fe085a4ebbcb4a30704088074cb zlib/contrib/vstudio/vc14/testzlibdll.vcxproj.user +efcc2393089500f1776f71fd5db5cc86 zlib/contrib/vstudio/vc14/zlibstat.vcxproj +3fc35fe085a4ebbcb4a30704088074cb zlib/contrib/vstudio/vc14/miniunz.vcxproj.user +3fc35fe085a4ebbcb4a30704088074cb zlib/contrib/vstudio/vc14/zlibstat.vcxproj.user +e3255b9ba8a2e6772034a7f2779547dd zlib/contrib/vstudio/vc14/zlib.rc +c1bf6aeed421962812df7bc8d9c42632 zlib/contrib/vstudio/vc14/miniunz.vcxproj +5b779ef8ec6c75419d1fee9a6ebaa954 zlib/contrib/vstudio/vc12/zlibvc.vcxproj +2271100b7757c4693b11cf0774e4db5e zlib/contrib/vstudio/vc12/zlibvc.def +61959b86fba2f58c84bc9a441ad0cbe0 zlib/contrib/vstudio/vc12/minizip.vcxproj +d3121fbcce2ad9726a34ab2992c02b18 zlib/contrib/vstudio/vc12/testzlibdll.vcxproj +fa8301e3d625a36575542248d14c94e3 zlib/contrib/vstudio/vc12/testzlib.vcxproj +ab4ae9b904012b1566ee5a307613d2aa zlib/contrib/vstudio/vc12/zlibvc.sln +f34ae747f6d75f8417ffb70a71c102a3 zlib/contrib/vstudio/vc12/zlibstat.vcxproj +e3255b9ba8a2e6772034a7f2779547dd zlib/contrib/vstudio/vc12/zlib.rc +71cfe0a7366431ef50ac350f898e0a61 zlib/contrib/vstudio/vc12/miniunz.vcxproj +e1495f151b00503a64aae7b375cc3b80 zlib/contrib/minizip/zip.h +ec302a2b5e19af31263ce77260dd49d0 zlib/contrib/minizip/MiniZip64_Changes.txt +6e72c46776f0db175ec8f15144a3c250 zlib/contrib/minizip/crypt.h +840ce05a6f75ee1683460b9873b120b6 zlib/contrib/minizip/iowin32.c +1f4ccb34373f0b46ae4fa7f3c731ae3b zlib/contrib/minizip/miniunzip.1 +7caac7503f8f002d61e0f0e5b7f33bc6 zlib/contrib/minizip/mztools.h +3a50713bdffd399cba168843314850f4 zlib/contrib/minizip/Makefile.am +254fe0695464d4cbbaa1fdc0c83c6a3c zlib/contrib/minizip/miniunz.c +bcbe781316bdbd05584063176b90d672 zlib/contrib/minizip/minizip.pc.in +e8a6cc43207a37d631d9e90bbec6e6ed zlib/contrib/minizip/ioapi.c +7d6c0585719ba47fd356795801befc6d zlib/contrib/minizip/ioapi.h +818e2950cc00d787eaa9b710007dc53f zlib/contrib/minizip/iowin32.h +174c6f2a32dad5023616fc45855d8c59 zlib/contrib/minizip/mztools.c +41b1495a0615dc17dbc5f4c74941fc63 zlib/contrib/minizip/configure.ac +064c9424ffab4af58c685140bb0fc3a0 zlib/contrib/minizip/Makefile +e2a4a0c1cad4ceb1f77fb3b7e813bb35 zlib/contrib/minizip/minizip.c +11ae6a9d654c95c47da55fe16772a1e5 zlib/contrib/minizip/unzip.h +ab61e7d58c5c7114a6c531ce36ccc3e5 zlib/contrib/minizip/MiniZip64_info.txt +4fb98be7d5558dd0e8bb210c18f2ba1e zlib/contrib/minizip/zip.c +c7758789cc7e9e99f07d0e758475ea28 zlib/contrib/minizip/minizip.1 +e6ee69414e1309f0669ae661ca56a7b3 zlib/contrib/minizip/unzip.c +7db484a6aa910e703838859f33867d02 zlib/contrib/minizip/make_vms.com +041a9be530eca6d4b057404cf1cc9350 zlib/qnx/package.qpg +8e4658ab605826672b98422b973305b6 zlib/zlib.3 +2a7a661ce2d463e3876704786fd8dfdd zlib/msdos/Makefile.msc +ddcc308923bda1742d6c6638367da0dd zlib/msdos/Makefile.dj2 +80adf0a73c836697ef02cd8cc19733cd zlib/msdos/Makefile.bor +bcd5df6ee3272ea5a3a17feb90ad148d zlib/msdos/Makefile.emx +b8ec8ac0dac9fe62dd4934fb4b9f772c zlib/msdos/Makefile.tc 7589c1379ed922ffe60a9963c50ffe64 zlib/nintendods/Makefile -004a8c34eba1b805f836a09dd4759f34 zlib/acinclude.m4 -26a915e4bc7d8d65872c524a4716e51e zlib/README -a407d2308188e881b49c32d586d0da82 zlib/gzwrite.c -7fa3e91804601b6618c915b76a8dc332 zlib/inffixed.h -f3669099d3f571dbc0426401ed5f50e3 zlib/inffast.h +486dd2758187aaeb071f6a0ad5094fda zlib/nintendods/README +60674eee456b5cab09b25a4bfd55d533 zlib/zlib.pc.in +fd4927df770f466186fef280241eb502 zlib/configure.ac f2a2eb9767175a34b816d7b31de0c6dc zlib/zutil.h -ec87be89b9bcca8ced80a70f857e823b zlib/inftrees.h -b7a1991f01daea3efe108a215c5514a5 zlib/FAQ -29d02cff161bde3e4e717b25a2ab7050 zlib/gzclose.c -2effeeacadeab8edd2c3c4ae856f019d zlib/ChangeLog.gcj -41ed01a8629ee4eaf80dfc6562d9598d zlib/zlib.h -b21de2ad7c6a8dd26d58c831970e4efe zlib/examples/zran.c -f4912cf5a1ade2e862e193983c02b3ee zlib/examples/zlib_how.html -2baa24dfcde30e5378ebc823b9546fc5 zlib/examples/zpipe.c -4061e63cf68f479ebbd4bab90178a774 zlib/examples/fitblk.c -cba90a61087e9d9c6bbb45a005543468 zlib/examples/gzappend.c -3ae3e8df2161c8d00d586396fc419c2b zlib/examples/gun.c -d6c05757d17814110c93151ab5c1c910 zlib/examples/gzjoin.c -7d497747a90370d3b13320bbf97e65dc zlib/examples/gzlog.h -7d040e322c50440b203bd70b3a448470 zlib/examples/README.examples -6ac79bd8913b81b91a5dfbbe372331dc zlib/examples/enough.c -2140627edcd840671f03eced0741c520 zlib/examples/gzlog.c -9ba95720f7a568bc6894ace309d78ac2 zlib/trees.c +08310c11af1d0076d133415431f659ef zlib/example.c +cd5db617d9a470452431ef50bcd2d07d zlib/os400/README400 +88375497cf85550425cedb3f1a0a05e8 zlib/os400/zlib.inc +4d8dfda2096227d68f03499480c3740c zlib/os400/make.sh +a60b56782ba1f108b3c1fa232f95fd1a zlib/os400/bndsrc f28d16b67efecdfafa0d816a7d982124 zlib/crc32.h +a018d7e9e40c63ce8e1be3f6fa26e8a7 zlib/treebuild.xml +03bf3ba8089f4bf475ef4035cf316a47 zlib/CMakeLists.txt 257272e4cea1c919fe86edcdf5c2dd57 zlib/win32/Makefile.msc -311d9cf5cbf7538b8b8120f13c6c1385 zlib/win32/zlib1.rc -1d9871d4ffd71645ac3d029d8de0e03a zlib/win32/DLL_FAQ.txt -a71eedd908795ef5794f1d4135654415 zlib/win32/zlib.def bc2d8d3fda87e41e7f3e2536ab6ae806 zlib/win32/Makefile.gcc +0b80cb8a4ec18437ea653c67f466cb5b zlib/win32/README-WIN32.txt +a71eedd908795ef5794f1d4135654415 zlib/win32/zlib.def +1d9871d4ffd71645ac3d029d8de0e03a zlib/win32/DLL_FAQ.txt 41825008c400d365b2a660175bec4ad1 zlib/win32/VisualC.txt fc5b8a38022995608b2a04fb7ebd17d7 zlib/win32/Makefile.bor -0b80cb8a4ec18437ea653c67f466cb5b zlib/win32/README-WIN32.txt -4d8dfda2096227d68f03499480c3740c zlib/os400/make.sh -cd5db617d9a470452431ef50bcd2d07d zlib/os400/README400 -a60b56782ba1f108b3c1fa232f95fd1a zlib/os400/bndsrc -88375497cf85550425cedb3f1a0a05e8 zlib/os400/zlib.inc +311d9cf5cbf7538b8b8120f13c6c1385 zlib/win32/zlib1.rc +850825a7e5ddc45e520909406d25bdff zlib/test/example.c +929d15e7fc86ced153a5b0feae168b4e zlib/test/minigzip.c +629a048f0edd2a18c6c18a11679628d8 zlib/test/infcover.c +26ab763d924e6ffc50701c71a408ce39 zlib/zconf.h.cmakein +f58623b7b8ff68446b8015ea8757f05b zlib/Makefile.in +3b6b6f9e88f2319b75e6ccb8c2823b13 zlib/INDEX +0e9a37be8e3b85cc0ccf60504064c297 zlib/ChangeLog.jit +a407d2308188e881b49c32d586d0da82 zlib/gzwrite.c +7c4ee539faa6c908c3860588df424be1 zlib/doc/rfc1952.txt +c9680de1a6b8939e16fd5e2a4f4785b8 zlib/doc/rfc1950.txt +fe89c9b2d3b621452c4f868590635c5f zlib/doc/rfc1951.txt +33a7749453d872da575e01c2c62fe877 zlib/doc/txtvsbin.txt +63be46f443f80cc9081ed765198d4b8a zlib/doc/algorithm.txt +7b64b28d6109d665486b10daa1cc5386 zlib/aclocal.m4 +41ed01a8629ee4eaf80dfc6562d9598d zlib/zlib.h +004a8c34eba1b805f836a09dd4759f34 zlib/acinclude.m4 +f16cd4621f5561cf147b5e56a8af1946 zlib/amiga/Makefile.pup +315c9e3e7dd1d24aeb9d6bc55b7de5fd zlib/amiga/Makefile.sas 2bcf6a6edf7458057bcce4a84becf33b zlib/crc32.c -03bf3ba8089f4bf475ef4035cf316a47 zlib/CMakeLists.txt -a25adb9dd2bbc05710a370e4e17a9ff5 zlib/Makefile.am -f6a102e1a91215f0e249b266053e9956 zlib/watcom/watcom_l.mak -6f80451b702a08fa8d149161e1d75313 zlib/watcom/watcom_f.mak 51fdcb3e2ccf60ca13c06920c89296a3 zlib/trees.h -f58623b7b8ff68446b8015ea8757f05b zlib/Makefile.in +381f96b09b247fbe8f4c329a89bd5bd3 zlib/zlib2ansi +c892c303a1be104ed0efb628e18ed85a zlib/inflate.c +8a3caeeacc6135dce18634b7b5da1eac zlib/uncompr.c +fb6a1f880ef0e3bca0dd9185e6eb283f zlib/zutil.c +cbf38eb0d95e0f43faf627cf42a680a7 zlib/old/descrip.mms +94928575e535e4057290970b885627f0 zlib/old/visual-basic.txt +b917eb81b8d4b72931282aeedc167f83 zlib/old/os2/zlib.def +52748c82e9464e36daec6caa3f50b7d9 zlib/old/os2/Makefile.os2 +281c9a86ce42a799859a5978bc732cc5 zlib/old/Makefile.riscos +1aeeebbf2e64523db78f02c744dd425d zlib/old/Makefile.emx +bbfa7b4766eb254d816bcd7faf48f0f5 zlib/old/README +d50ff058715b1f4708cdf01b1cb7da22 zlib/ChangeLog.bin-gdb +2c08acd5014596272031fdd1a36d0f1c zlib/gzlib.c +2effeeacadeab8edd2c3c4ae856f019d zlib/ChangeLog.gcj +9d7ec0d0fe9134c725fc8b688ff673f4 zlib/zlib.pc.cmakein +ec87be89b9bcca8ced80a70f857e823b zlib/inftrees.h +0e5c38a1ec38448cfc594efc152d32f7 zlib/make_vms.com +86734dafdef3e9a542a7c666a91ac591 zlib/minigzip.c +e2dee880a39c7781e9902c5db8f36e10 zlib/gzguts.h +088f835e49176d2c289162fe277f1433 zlib/adler32.c +26a915e4bc7d8d65872c524a4716e51e zlib/README +f2adcadab3504b146be9c4928821f233 zlib/infback.c +c999b14aab6322655059b2f1146fb935 zlib/gzread.c +66c6b3953f574eca8b709dd5f6865745 zlib/zconf.h.in +8914872466a77551efb3898272ed98e0 zlib/zlib.map diff -Nru gdb-9.1/opcodes/aarch64-asm-2.c gdb-10.2/opcodes/aarch64-asm-2.c --- gdb-9.1/opcodes/aarch64-asm-2.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/aarch64-asm-2.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* This file is automatically generated by aarch64-gen. Do not edit! */ -/* Copyright (C) 2012-2019 Free Software Foundation, Inc. +/* Copyright (C) 2012-2020 Free Software Foundation, Inc. Contributed by ARM Ltd. This file is part of the GNU opcodes library. @@ -197,394 +197,396 @@ case 746: /* umsubl */ value = 746; /* --> umsubl. */ break; - case 758: /* ror */ - case 757: /* extr */ - value = 757; /* --> extr. */ - break; - case 991: /* bic */ - case 990: /* and */ - value = 990; /* --> and. */ - break; - case 993: /* mov */ - case 992: /* orr */ - value = 992; /* --> orr. */ - break; - case 996: /* tst */ - case 995: /* ands */ - value = 995; /* --> ands. */ - break; - case 1001: /* uxtw */ - case 1000: /* mov */ - case 999: /* orr */ - value = 999; /* --> orr. */ - break; - case 1003: /* mvn */ - case 1002: /* orn */ - value = 1002; /* --> orn. */ - break; - case 1007: /* tst */ - case 1006: /* ands */ - value = 1006; /* --> ands. */ - break; - case 1133: /* staddb */ - case 1037: /* ldaddb */ - value = 1037; /* --> ldaddb. */ - break; - case 1134: /* staddh */ - case 1038: /* ldaddh */ - value = 1038; /* --> ldaddh. */ - break; - case 1135: /* stadd */ - case 1039: /* ldadd */ - value = 1039; /* --> ldadd. */ - break; - case 1136: /* staddlb */ - case 1041: /* ldaddlb */ - value = 1041; /* --> ldaddlb. */ - break; - case 1137: /* staddlh */ - case 1044: /* ldaddlh */ - value = 1044; /* --> ldaddlh. */ - break; - case 1138: /* staddl */ - case 1047: /* ldaddl */ - value = 1047; /* --> ldaddl. */ - break; - case 1139: /* stclrb */ - case 1049: /* ldclrb */ - value = 1049; /* --> ldclrb. */ - break; - case 1140: /* stclrh */ - case 1050: /* ldclrh */ - value = 1050; /* --> ldclrh. */ - break; - case 1141: /* stclr */ - case 1051: /* ldclr */ - value = 1051; /* --> ldclr. */ - break; - case 1142: /* stclrlb */ - case 1053: /* ldclrlb */ - value = 1053; /* --> ldclrlb. */ - break; - case 1143: /* stclrlh */ - case 1056: /* ldclrlh */ - value = 1056; /* --> ldclrlh. */ - break; - case 1144: /* stclrl */ - case 1059: /* ldclrl */ - value = 1059; /* --> ldclrl. */ - break; - case 1145: /* steorb */ - case 1061: /* ldeorb */ - value = 1061; /* --> ldeorb. */ - break; - case 1146: /* steorh */ - case 1062: /* ldeorh */ - value = 1062; /* --> ldeorh. */ - break; - case 1147: /* steor */ - case 1063: /* ldeor */ - value = 1063; /* --> ldeor. */ - break; - case 1148: /* steorlb */ - case 1065: /* ldeorlb */ - value = 1065; /* --> ldeorlb. */ - break; - case 1149: /* steorlh */ - case 1068: /* ldeorlh */ - value = 1068; /* --> ldeorlh. */ - break; - case 1150: /* steorl */ - case 1071: /* ldeorl */ - value = 1071; /* --> ldeorl. */ - break; - case 1151: /* stsetb */ - case 1073: /* ldsetb */ - value = 1073; /* --> ldsetb. */ - break; - case 1152: /* stseth */ - case 1074: /* ldseth */ - value = 1074; /* --> ldseth. */ - break; - case 1153: /* stset */ - case 1075: /* ldset */ - value = 1075; /* --> ldset. */ - break; - case 1154: /* stsetlb */ - case 1077: /* ldsetlb */ - value = 1077; /* --> ldsetlb. */ - break; - case 1155: /* stsetlh */ - case 1080: /* ldsetlh */ - value = 1080; /* --> ldsetlh. */ - break; - case 1156: /* stsetl */ - case 1083: /* ldsetl */ - value = 1083; /* --> ldsetl. */ - break; - case 1157: /* stsmaxb */ - case 1085: /* ldsmaxb */ - value = 1085; /* --> ldsmaxb. */ - break; - case 1158: /* stsmaxh */ - case 1086: /* ldsmaxh */ - value = 1086; /* --> ldsmaxh. */ - break; - case 1159: /* stsmax */ - case 1087: /* ldsmax */ - value = 1087; /* --> ldsmax. */ - break; - case 1160: /* stsmaxlb */ - case 1089: /* ldsmaxlb */ - value = 1089; /* --> ldsmaxlb. */ - break; - case 1161: /* stsmaxlh */ - case 1092: /* ldsmaxlh */ - value = 1092; /* --> ldsmaxlh. */ - break; - case 1162: /* stsmaxl */ - case 1095: /* ldsmaxl */ - value = 1095; /* --> ldsmaxl. */ - break; - case 1163: /* stsminb */ - case 1097: /* ldsminb */ - value = 1097; /* --> ldsminb. */ - break; - case 1164: /* stsminh */ - case 1098: /* ldsminh */ - value = 1098; /* --> ldsminh. */ - break; - case 1165: /* stsmin */ - case 1099: /* ldsmin */ - value = 1099; /* --> ldsmin. */ - break; - case 1166: /* stsminlb */ - case 1101: /* ldsminlb */ - value = 1101; /* --> ldsminlb. */ - break; - case 1167: /* stsminlh */ - case 1104: /* ldsminlh */ - value = 1104; /* --> ldsminlh. */ - break; - case 1168: /* stsminl */ - case 1107: /* ldsminl */ - value = 1107; /* --> ldsminl. */ - break; - case 1169: /* stumaxb */ - case 1109: /* ldumaxb */ - value = 1109; /* --> ldumaxb. */ - break; - case 1170: /* stumaxh */ - case 1110: /* ldumaxh */ - value = 1110; /* --> ldumaxh. */ - break; - case 1171: /* stumax */ - case 1111: /* ldumax */ - value = 1111; /* --> ldumax. */ - break; - case 1172: /* stumaxlb */ - case 1113: /* ldumaxlb */ - value = 1113; /* --> ldumaxlb. */ - break; - case 1173: /* stumaxlh */ - case 1116: /* ldumaxlh */ - value = 1116; /* --> ldumaxlh. */ - break; - case 1174: /* stumaxl */ - case 1119: /* ldumaxl */ - value = 1119; /* --> ldumaxl. */ - break; - case 1175: /* stuminb */ - case 1121: /* lduminb */ - value = 1121; /* --> lduminb. */ - break; - case 1176: /* stuminh */ - case 1122: /* lduminh */ - value = 1122; /* --> lduminh. */ - break; - case 1177: /* stumin */ - case 1123: /* ldumin */ - value = 1123; /* --> ldumin. */ - break; - case 1178: /* stuminlb */ - case 1125: /* lduminlb */ - value = 1125; /* --> lduminlb. */ - break; - case 1179: /* stuminlh */ - case 1128: /* lduminlh */ - value = 1128; /* --> lduminlh. */ - break; - case 1180: /* stuminl */ - case 1131: /* lduminl */ - value = 1131; /* --> lduminl. */ - break; - case 1182: /* mov */ - case 1181: /* movn */ - value = 1181; /* --> movn. */ - break; - case 1184: /* mov */ - case 1183: /* movz */ - value = 1183; /* --> movz. */ - break; - case 1234: /* autibsp */ - case 1233: /* autibz */ - case 1232: /* autiasp */ - case 1231: /* autiaz */ - case 1230: /* pacibsp */ - case 1229: /* pacibz */ - case 1228: /* paciasp */ - case 1227: /* paciaz */ - case 1208: /* psb */ - case 1207: /* esb */ - case 1206: /* autib1716 */ - case 1205: /* autia1716 */ - case 1204: /* pacib1716 */ - case 1203: /* pacia1716 */ - case 1202: /* xpaclri */ - case 1201: /* sevl */ - case 1200: /* sev */ - case 1199: /* wfi */ - case 1198: /* wfe */ - case 1197: /* yield */ - case 1196: /* bti */ - case 1195: /* csdb */ - case 1194: /* nop */ - case 1193: /* hint */ - value = 1193; /* --> hint. */ - break; - case 1212: /* pssbb */ - case 1211: /* ssbb */ - case 1210: /* dsb */ - value = 1210; /* --> dsb. */ - break; - case 1223: /* cpp */ - case 1222: /* dvp */ - case 1221: /* cfp */ - case 1220: /* tlbi */ - case 1219: /* ic */ - case 1218: /* dc */ - case 1217: /* at */ - case 1216: /* sys */ - value = 1216; /* --> sys. */ - break; - case 2032: /* bic */ - case 1282: /* and */ - value = 1282; /* --> and. */ + case 759: /* ror */ + case 758: /* extr */ + value = 758; /* --> extr. */ + break; + case 992: /* bic */ + case 991: /* and */ + value = 991; /* --> and. */ + break; + case 994: /* mov */ + case 993: /* orr */ + value = 993; /* --> orr. */ + break; + case 997: /* tst */ + case 996: /* ands */ + value = 996; /* --> ands. */ + break; + case 1002: /* uxtw */ + case 1001: /* mov */ + case 1000: /* orr */ + value = 1000; /* --> orr. */ + break; + case 1004: /* mvn */ + case 1003: /* orn */ + value = 1003; /* --> orn. */ + break; + case 1008: /* tst */ + case 1007: /* ands */ + value = 1007; /* --> ands. */ + break; + case 1134: /* staddb */ + case 1038: /* ldaddb */ + value = 1038; /* --> ldaddb. */ + break; + case 1135: /* staddh */ + case 1039: /* ldaddh */ + value = 1039; /* --> ldaddh. */ + break; + case 1136: /* stadd */ + case 1040: /* ldadd */ + value = 1040; /* --> ldadd. */ + break; + case 1137: /* staddlb */ + case 1042: /* ldaddlb */ + value = 1042; /* --> ldaddlb. */ + break; + case 1138: /* staddlh */ + case 1045: /* ldaddlh */ + value = 1045; /* --> ldaddlh. */ + break; + case 1139: /* staddl */ + case 1048: /* ldaddl */ + value = 1048; /* --> ldaddl. */ + break; + case 1140: /* stclrb */ + case 1050: /* ldclrb */ + value = 1050; /* --> ldclrb. */ + break; + case 1141: /* stclrh */ + case 1051: /* ldclrh */ + value = 1051; /* --> ldclrh. */ + break; + case 1142: /* stclr */ + case 1052: /* ldclr */ + value = 1052; /* --> ldclr. */ + break; + case 1143: /* stclrlb */ + case 1054: /* ldclrlb */ + value = 1054; /* --> ldclrlb. */ + break; + case 1144: /* stclrlh */ + case 1057: /* ldclrlh */ + value = 1057; /* --> ldclrlh. */ + break; + case 1145: /* stclrl */ + case 1060: /* ldclrl */ + value = 1060; /* --> ldclrl. */ + break; + case 1146: /* steorb */ + case 1062: /* ldeorb */ + value = 1062; /* --> ldeorb. */ + break; + case 1147: /* steorh */ + case 1063: /* ldeorh */ + value = 1063; /* --> ldeorh. */ + break; + case 1148: /* steor */ + case 1064: /* ldeor */ + value = 1064; /* --> ldeor. */ + break; + case 1149: /* steorlb */ + case 1066: /* ldeorlb */ + value = 1066; /* --> ldeorlb. */ + break; + case 1150: /* steorlh */ + case 1069: /* ldeorlh */ + value = 1069; /* --> ldeorlh. */ + break; + case 1151: /* steorl */ + case 1072: /* ldeorl */ + value = 1072; /* --> ldeorl. */ + break; + case 1152: /* stsetb */ + case 1074: /* ldsetb */ + value = 1074; /* --> ldsetb. */ + break; + case 1153: /* stseth */ + case 1075: /* ldseth */ + value = 1075; /* --> ldseth. */ + break; + case 1154: /* stset */ + case 1076: /* ldset */ + value = 1076; /* --> ldset. */ + break; + case 1155: /* stsetlb */ + case 1078: /* ldsetlb */ + value = 1078; /* --> ldsetlb. */ + break; + case 1156: /* stsetlh */ + case 1081: /* ldsetlh */ + value = 1081; /* --> ldsetlh. */ + break; + case 1157: /* stsetl */ + case 1084: /* ldsetl */ + value = 1084; /* --> ldsetl. */ + break; + case 1158: /* stsmaxb */ + case 1086: /* ldsmaxb */ + value = 1086; /* --> ldsmaxb. */ + break; + case 1159: /* stsmaxh */ + case 1087: /* ldsmaxh */ + value = 1087; /* --> ldsmaxh. */ + break; + case 1160: /* stsmax */ + case 1088: /* ldsmax */ + value = 1088; /* --> ldsmax. */ + break; + case 1161: /* stsmaxlb */ + case 1090: /* ldsmaxlb */ + value = 1090; /* --> ldsmaxlb. */ + break; + case 1162: /* stsmaxlh */ + case 1093: /* ldsmaxlh */ + value = 1093; /* --> ldsmaxlh. */ + break; + case 1163: /* stsmaxl */ + case 1096: /* ldsmaxl */ + value = 1096; /* --> ldsmaxl. */ + break; + case 1164: /* stsminb */ + case 1098: /* ldsminb */ + value = 1098; /* --> ldsminb. */ + break; + case 1165: /* stsminh */ + case 1099: /* ldsminh */ + value = 1099; /* --> ldsminh. */ + break; + case 1166: /* stsmin */ + case 1100: /* ldsmin */ + value = 1100; /* --> ldsmin. */ + break; + case 1167: /* stsminlb */ + case 1102: /* ldsminlb */ + value = 1102; /* --> ldsminlb. */ + break; + case 1168: /* stsminlh */ + case 1105: /* ldsminlh */ + value = 1105; /* --> ldsminlh. */ + break; + case 1169: /* stsminl */ + case 1108: /* ldsminl */ + value = 1108; /* --> ldsminl. */ + break; + case 1170: /* stumaxb */ + case 1110: /* ldumaxb */ + value = 1110; /* --> ldumaxb. */ + break; + case 1171: /* stumaxh */ + case 1111: /* ldumaxh */ + value = 1111; /* --> ldumaxh. */ + break; + case 1172: /* stumax */ + case 1112: /* ldumax */ + value = 1112; /* --> ldumax. */ + break; + case 1173: /* stumaxlb */ + case 1114: /* ldumaxlb */ + value = 1114; /* --> ldumaxlb. */ + break; + case 1174: /* stumaxlh */ + case 1117: /* ldumaxlh */ + value = 1117; /* --> ldumaxlh. */ + break; + case 1175: /* stumaxl */ + case 1120: /* ldumaxl */ + value = 1120; /* --> ldumaxl. */ + break; + case 1176: /* stuminb */ + case 1122: /* lduminb */ + value = 1122; /* --> lduminb. */ + break; + case 1177: /* stuminh */ + case 1123: /* lduminh */ + value = 1123; /* --> lduminh. */ + break; + case 1178: /* stumin */ + case 1124: /* ldumin */ + value = 1124; /* --> ldumin. */ + break; + case 1179: /* stuminlb */ + case 1126: /* lduminlb */ + value = 1126; /* --> lduminlb. */ + break; + case 1180: /* stuminlh */ + case 1129: /* lduminlh */ + value = 1129; /* --> lduminlh. */ + break; + case 1181: /* stuminl */ + case 1132: /* lduminl */ + value = 1132; /* --> lduminl. */ + break; + case 1183: /* mov */ + case 1182: /* movn */ + value = 1182; /* --> movn. */ + break; + case 1185: /* mov */ + case 1184: /* movz */ + value = 1184; /* --> movz. */ + break; + case 1239: /* autibsp */ + case 1238: /* autibz */ + case 1237: /* autiasp */ + case 1236: /* autiaz */ + case 1235: /* pacibsp */ + case 1234: /* pacibz */ + case 1233: /* paciasp */ + case 1232: /* paciaz */ + case 1211: /* tsb */ + case 1210: /* psb */ + case 1209: /* esb */ + case 1208: /* autib1716 */ + case 1207: /* autia1716 */ + case 1206: /* pacib1716 */ + case 1205: /* pacia1716 */ + case 1204: /* xpaclri */ + case 1202: /* sevl */ + case 1201: /* sev */ + case 1200: /* wfi */ + case 1199: /* wfe */ + case 1198: /* yield */ + case 1197: /* bti */ + case 1196: /* csdb */ + case 1195: /* nop */ + case 1194: /* hint */ + value = 1194; /* --> hint. */ + break; + case 1216: /* pssbb */ + case 1215: /* ssbb */ + case 1214: /* dfb */ + case 1213: /* dsb */ + value = 1213; /* --> dsb. */ + break; + case 1227: /* cpp */ + case 1226: /* dvp */ + case 1225: /* cfp */ + case 1224: /* tlbi */ + case 1223: /* ic */ + case 1222: /* dc */ + case 1221: /* at */ + case 1220: /* sys */ + value = 1220; /* --> sys. */ + break; + case 2037: /* bic */ + case 1287: /* and */ + value = 1287; /* --> and. */ + break; + case 1270: /* mov */ + case 1289: /* and */ + value = 1289; /* --> and. */ + break; + case 1274: /* movs */ + case 1290: /* ands */ + value = 1290; /* --> ands. */ + break; + case 2038: /* cmple */ + case 1325: /* cmpge */ + value = 1325; /* --> cmpge. */ + break; + case 2041: /* cmplt */ + case 1328: /* cmpgt */ + value = 1328; /* --> cmpgt. */ + break; + case 2039: /* cmplo */ + case 1330: /* cmphi */ + value = 1330; /* --> cmphi. */ + break; + case 2040: /* cmpls */ + case 1333: /* cmphs */ + value = 1333; /* --> cmphs. */ break; - case 1265: /* mov */ - case 1284: /* and */ - value = 1284; /* --> and. */ + case 1267: /* mov */ + case 1355: /* cpy */ + value = 1355; /* --> cpy. */ break; - case 1269: /* movs */ - case 1285: /* ands */ - value = 1285; /* --> ands. */ - break; - case 2033: /* cmple */ - case 1320: /* cmpge */ - value = 1320; /* --> cmpge. */ - break; - case 2036: /* cmplt */ - case 1323: /* cmpgt */ - value = 1323; /* --> cmpgt. */ - break; - case 2034: /* cmplo */ - case 1325: /* cmphi */ - value = 1325; /* --> cmphi. */ - break; - case 2035: /* cmpls */ - case 1328: /* cmphs */ - value = 1328; /* --> cmphs. */ + case 1269: /* mov */ + case 1356: /* cpy */ + value = 1356; /* --> cpy. */ + break; + case 2048: /* fmov */ + case 1272: /* mov */ + case 1357: /* cpy */ + value = 1357; /* --> cpy. */ break; case 1262: /* mov */ - case 1350: /* cpy */ - value = 1350; /* --> cpy. */ + case 1369: /* dup */ + value = 1369; /* --> dup. */ break; case 1264: /* mov */ - case 1351: /* cpy */ - value = 1351; /* --> cpy. */ + case 1261: /* mov */ + case 1370: /* dup */ + value = 1370; /* --> dup. */ break; - case 2043: /* fmov */ - case 1267: /* mov */ - case 1352: /* cpy */ - value = 1352; /* --> cpy. */ + case 2047: /* fmov */ + case 1266: /* mov */ + case 1371: /* dup */ + value = 1371; /* --> dup. */ break; - case 1257: /* mov */ - case 1364: /* dup */ - value = 1364; /* --> dup. */ - break; - case 1259: /* mov */ - case 1256: /* mov */ - case 1365: /* dup */ - value = 1365; /* --> dup. */ + case 1265: /* mov */ + case 1372: /* dupm */ + value = 1372; /* --> dupm. */ break; - case 2042: /* fmov */ - case 1261: /* mov */ - case 1366: /* dup */ - value = 1366; /* --> dup. */ + case 2042: /* eon */ + case 1374: /* eor */ + value = 1374; /* --> eor. */ + break; + case 1275: /* not */ + case 1376: /* eor */ + value = 1376; /* --> eor. */ + break; + case 1276: /* nots */ + case 1377: /* eors */ + value = 1377; /* --> eors. */ + break; + case 2043: /* facle */ + case 1382: /* facge */ + value = 1382; /* --> facge. */ + break; + case 2044: /* faclt */ + case 1383: /* facgt */ + value = 1383; /* --> facgt. */ + break; + case 2045: /* fcmle */ + case 1396: /* fcmge */ + value = 1396; /* --> fcmge. */ + break; + case 2046: /* fcmlt */ + case 1398: /* fcmgt */ + value = 1398; /* --> fcmgt. */ + break; + case 1259: /* fmov */ + case 1404: /* fcpy */ + value = 1404; /* --> fcpy. */ + break; + case 1258: /* fmov */ + case 1427: /* fdup */ + value = 1427; /* --> fdup. */ break; case 1260: /* mov */ - case 1367: /* dupm */ - value = 1367; /* --> dupm. */ + case 1758: /* orr */ + value = 1758; /* --> orr. */ break; - case 2037: /* eon */ - case 1369: /* eor */ - value = 1369; /* --> eor. */ - break; - case 1270: /* not */ - case 1371: /* eor */ - value = 1371; /* --> eor. */ - break; - case 1271: /* nots */ - case 1372: /* eors */ - value = 1372; /* --> eors. */ - break; - case 2038: /* facle */ - case 1377: /* facge */ - value = 1377; /* --> facge. */ - break; - case 2039: /* faclt */ - case 1378: /* facgt */ - value = 1378; /* --> facgt. */ - break; - case 2040: /* fcmle */ - case 1391: /* fcmge */ - value = 1391; /* --> fcmge. */ - break; - case 2041: /* fcmlt */ - case 1393: /* fcmgt */ - value = 1393; /* --> fcmgt. */ - break; - case 1254: /* fmov */ - case 1399: /* fcpy */ - value = 1399; /* --> fcpy. */ - break; - case 1253: /* fmov */ - case 1422: /* fdup */ - value = 1422; /* --> fdup. */ - break; - case 1255: /* mov */ - case 1753: /* orr */ - value = 1753; /* --> orr. */ - break; - case 2044: /* orn */ - case 1754: /* orr */ - value = 1754; /* --> orr. */ - break; - case 1258: /* mov */ - case 1756: /* orr */ - value = 1756; /* --> orr. */ - break; - case 1268: /* movs */ - case 1757: /* orrs */ - value = 1757; /* --> orrs. */ + case 2049: /* orn */ + case 1759: /* orr */ + value = 1759; /* --> orr. */ break; case 1263: /* mov */ - case 1819: /* sel */ - value = 1819; /* --> sel. */ + case 1761: /* orr */ + value = 1761; /* --> orr. */ break; - case 1266: /* mov */ - case 1820: /* sel */ - value = 1820; /* --> sel. */ + case 1273: /* movs */ + case 1762: /* orrs */ + value = 1762; /* --> orrs. */ + break; + case 1268: /* mov */ + case 1824: /* sel */ + value = 1824; /* --> sel. */ + break; + case 1271: /* mov */ + case 1825: /* sel */ + value = 1825; /* --> sel. */ break; default: return NULL; } @@ -628,7 +630,6 @@ case 28: case 29: case 30: - case 163: case 164: case 165: case 166: @@ -638,7 +639,7 @@ case 170: case 171: case 172: - case 187: + case 173: case 188: case 189: case 190: @@ -647,8 +648,9 @@ case 193: case 194: case 195: - case 201: - case 204: + case 196: + case 202: + case 205: return aarch64_ins_regno (self, info, code, inst, errors); case 14: return aarch64_ins_reg_extended (self, info, code, inst, errors); @@ -660,7 +662,7 @@ case 32: case 33: case 34: - case 207: + case 208: return aarch64_ins_reglane (self, info, code, inst, errors); case 35: return aarch64_ins_reglist (self, info, code, inst, errors); @@ -690,13 +692,13 @@ case 65: case 66: case 67: - case 79: + case 68: case 80: case 81: case 82: - case 160: - case 162: - case 179: + case 83: + case 161: + case 163: case 180: case 181: case 182: @@ -704,7 +706,8 @@ case 184: case 185: case 186: - case 206: + case 187: + case 207: return aarch64_ins_imm (self, info, code, inst, errors); case 43: case 44: @@ -714,83 +717,83 @@ case 47: return aarch64_ins_advsimd_imm_modified (self, info, code, inst, errors); case 51: - case 150: + case 151: return aarch64_ins_fpimm (self, info, code, inst, errors); - case 68: - case 158: - return aarch64_ins_limm (self, info, code, inst, errors); case 69: - return aarch64_ins_aimm (self, info, code, inst, errors); + case 159: + return aarch64_ins_limm (self, info, code, inst, errors); case 70: - return aarch64_ins_imm_half (self, info, code, inst, errors); + return aarch64_ins_aimm (self, info, code, inst, errors); case 71: + return aarch64_ins_imm_half (self, info, code, inst, errors); + case 72: return aarch64_ins_fbits (self, info, code, inst, errors); - case 73: case 74: - case 155: - return aarch64_ins_imm_rotate2 (self, info, code, inst, errors); case 75: - case 154: case 156: - return aarch64_ins_imm_rotate1 (self, info, code, inst, errors); + return aarch64_ins_imm_rotate2 (self, info, code, inst, errors); case 76: + case 155: + case 157: + return aarch64_ins_imm_rotate1 (self, info, code, inst, errors); case 77: + case 78: return aarch64_ins_cond (self, info, code, inst, errors); - case 83: - case 92: - return aarch64_ins_addr_simple (self, info, code, inst, errors); case 84: - return aarch64_ins_addr_regoff (self, info, code, inst, errors); + case 93: + return aarch64_ins_addr_simple (self, info, code, inst, errors); case 85: + return aarch64_ins_addr_regoff (self, info, code, inst, errors); case 86: case 87: - case 89: - case 91: - return aarch64_ins_addr_simm (self, info, code, inst, errors); case 88: - return aarch64_ins_addr_simm10 (self, info, code, inst, errors); case 90: + case 92: + return aarch64_ins_addr_simm (self, info, code, inst, errors); + case 89: + return aarch64_ins_addr_simm10 (self, info, code, inst, errors); + case 91: return aarch64_ins_addr_uimm12 (self, info, code, inst, errors); - case 93: - return aarch64_ins_addr_offset (self, info, code, inst, errors); case 94: - return aarch64_ins_simd_addr_post (self, info, code, inst, errors); + return aarch64_ins_addr_offset (self, info, code, inst, errors); case 95: - return aarch64_ins_sysreg (self, info, code, inst, errors); + return aarch64_ins_simd_addr_post (self, info, code, inst, errors); case 96: - return aarch64_ins_pstatefield (self, info, code, inst, errors); + return aarch64_ins_sysreg (self, info, code, inst, errors); case 97: + return aarch64_ins_pstatefield (self, info, code, inst, errors); case 98: case 99: case 100: case 101: - return aarch64_ins_sysins_op (self, info, code, inst, errors); case 102: + return aarch64_ins_sysins_op (self, info, code, inst, errors); case 103: - return aarch64_ins_barrier (self, info, code, inst, errors); case 104: - return aarch64_ins_prfop (self, info, code, inst, errors); + return aarch64_ins_barrier (self, info, code, inst, errors); case 105: + return aarch64_ins_prfop (self, info, code, inst, errors); case 106: - return aarch64_ins_hint (self, info, code, inst, errors); + return aarch64_ins_none (self, info, code, inst, errors); case 107: + return aarch64_ins_hint (self, info, code, inst, errors); case 108: - return aarch64_ins_sve_addr_ri_s4 (self, info, code, inst, errors); case 109: + return aarch64_ins_sve_addr_ri_s4 (self, info, code, inst, errors); case 110: case 111: case 112: - return aarch64_ins_sve_addr_ri_s4xvl (self, info, code, inst, errors); case 113: - return aarch64_ins_sve_addr_ri_s6xvl (self, info, code, inst, errors); + return aarch64_ins_sve_addr_ri_s4xvl (self, info, code, inst, errors); case 114: - return aarch64_ins_sve_addr_ri_s9xvl (self, info, code, inst, errors); + return aarch64_ins_sve_addr_ri_s6xvl (self, info, code, inst, errors); case 115: + return aarch64_ins_sve_addr_ri_s9xvl (self, info, code, inst, errors); case 116: case 117: case 118: - return aarch64_ins_sve_addr_ri_u6 (self, info, code, inst, errors); case 119: + return aarch64_ins_sve_addr_ri_u6 (self, info, code, inst, errors); case 120: case 121: case 122: @@ -804,8 +807,8 @@ case 130: case 131: case 132: - return aarch64_ins_sve_addr_rr_lsl (self, info, code, inst, errors); case 133: + return aarch64_ins_sve_addr_rr_lsl (self, info, code, inst, errors); case 134: case 135: case 136: @@ -813,52 +816,53 @@ case 138: case 139: case 140: - return aarch64_ins_sve_addr_rz_xtw (self, info, code, inst, errors); case 141: + return aarch64_ins_sve_addr_rz_xtw (self, info, code, inst, errors); case 142: case 143: case 144: - return aarch64_ins_sve_addr_zi_u5 (self, info, code, inst, errors); case 145: - return aarch64_ins_sve_addr_zz_lsl (self, info, code, inst, errors); + return aarch64_ins_sve_addr_zi_u5 (self, info, code, inst, errors); case 146: - return aarch64_ins_sve_addr_zz_sxtw (self, info, code, inst, errors); + return aarch64_ins_sve_addr_zz_lsl (self, info, code, inst, errors); case 147: - return aarch64_ins_sve_addr_zz_uxtw (self, info, code, inst, errors); + return aarch64_ins_sve_addr_zz_sxtw (self, info, code, inst, errors); case 148: - return aarch64_ins_sve_aimm (self, info, code, inst, errors); + return aarch64_ins_sve_addr_zz_uxtw (self, info, code, inst, errors); case 149: + return aarch64_ins_sve_aimm (self, info, code, inst, errors); + case 150: return aarch64_ins_sve_asimm (self, info, code, inst, errors); - case 151: - return aarch64_ins_sve_float_half_one (self, info, code, inst, errors); case 152: - return aarch64_ins_sve_float_half_two (self, info, code, inst, errors); + return aarch64_ins_sve_float_half_one (self, info, code, inst, errors); case 153: + return aarch64_ins_sve_float_half_two (self, info, code, inst, errors); + case 154: return aarch64_ins_sve_float_zero_one (self, info, code, inst, errors); - case 157: + case 158: return aarch64_ins_inv_limm (self, info, code, inst, errors); - case 159: + case 160: return aarch64_ins_sve_limm_mov (self, info, code, inst, errors); - case 161: + case 162: return aarch64_ins_sve_scale (self, info, code, inst, errors); - case 173: case 174: case 175: - return aarch64_ins_sve_shlimm (self, info, code, inst, errors); case 176: + return aarch64_ins_sve_shlimm (self, info, code, inst, errors); case 177: case 178: + case 179: return aarch64_ins_sve_shrimm (self, info, code, inst, errors); - case 196: case 197: case 198: case 199: case 200: + case 201: return aarch64_ins_sve_quad_index (self, info, code, inst, errors); - case 202: - return aarch64_ins_sve_index (self, info, code, inst, errors); case 203: - case 205: + return aarch64_ins_sve_index (self, info, code, inst, errors); + case 204: + case 206: return aarch64_ins_sve_reglist (self, info, code, inst, errors); default: assert (0); abort (); } diff -Nru gdb-9.1/opcodes/aarch64-asm.c gdb-10.2/opcodes/aarch64-asm.c --- gdb-9.1/opcodes/aarch64-asm.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/aarch64-asm.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* aarch64-asm.c -- AArch64 assembler support. - Copyright (C) 2012-2019 Free Software Foundation, Inc. + Copyright (C) 2012-2020 Free Software Foundation, Inc. Contributed by ARM Ltd. This file is part of the GNU opcodes library. @@ -78,6 +78,17 @@ /* Operand inserters. */ +/* Insert nothing. */ +bfd_boolean +aarch64_ins_none (const aarch64_operand *self ATTRIBUTE_UNUSED, + const aarch64_opnd_info *info ATTRIBUTE_UNUSED, + aarch64_insn *code ATTRIBUTE_UNUSED, + const aarch64_inst *inst ATTRIBUTE_UNUSED, + aarch64_operand_error *errors ATTRIBUTE_UNUSED) +{ + return TRUE; +} + /* Insert register number. */ bfd_boolean aarch64_ins_regno (const aarch64_operand *self, const aarch64_opnd_info *info, @@ -1967,7 +1978,7 @@ break; } -convert_to_real_return: + convert_to_real_return: aarch64_replace_opcode (inst, real); } @@ -2099,7 +2110,7 @@ } -encoding_exit: + encoding_exit: DEBUG_TRACE ("exit with %s", opcode->name); *code = inst->value; diff -Nru gdb-9.1/opcodes/aarch64-asm.h gdb-10.2/opcodes/aarch64-asm.h --- gdb-9.1/opcodes/aarch64-asm.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/aarch64-asm.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* aarch64-asm.h -- Header file for aarch64-asm.c and aarch64-asm-2.c. - Copyright (C) 2012-2019 Free Software Foundation, Inc. + Copyright (C) 2012-2020 Free Software Foundation, Inc. Contributed by ARM Ltd. This file is part of the GNU opcodes library. @@ -42,6 +42,7 @@ aarch64_insn *, const aarch64_inst *, \ aarch64_operand_error *) +AARCH64_DECL_OPD_INSERTER (ins_none); AARCH64_DECL_OPD_INSERTER (ins_regno); AARCH64_DECL_OPD_INSERTER (ins_reglane); AARCH64_DECL_OPD_INSERTER (ins_reglist); diff -Nru gdb-9.1/opcodes/aarch64-dis-2.c gdb-10.2/opcodes/aarch64-dis-2.c --- gdb-9.1/opcodes/aarch64-dis-2.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/aarch64-dis-2.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* This file is automatically generated by aarch64-gen. Do not edit! */ -/* Copyright (C) 2012-2019 Free Software Foundation, Inc. +/* Copyright (C) 2012-2020 Free Software Foundation, Inc. Contributed by ARM Ltd. This file is part of the GNU opcodes library. @@ -34,21 +34,32 @@ { if (((word >> 24) & 0x1) == 0) { - if (((word >> 31) & 0x1) == 0) + if (((word >> 28) & 0x1) == 0) { /* 33222222222211111111110000000000 10987654321098765432109876543210 - 0xxx0000xxxxxxxxxxxxxxxxxxxxxxxx - adr. */ - return 1186; + xxx00000xxxxxxxxxxxxxxxxxxxxxxxx + udf. */ + return 754; } else { - /* 33222222222211111111110000000000 - 10987654321098765432109876543210 - 1xxx0000xxxxxxxxxxxxxxxxxxxxxxxx - adrp. */ - return 1187; + if (((word >> 31) & 0x1) == 0) + { + /* 33222222222211111111110000000000 + 10987654321098765432109876543210 + 0xx10000xxxxxxxxxxxxxxxxxxxxxxxx + adr. */ + return 1187; + } + else + { + /* 33222222222211111111110000000000 + 10987654321098765432109876543210 + 1xx10000xxxxxxxxxxxxxxxxxxxxxxxx + adrp. */ + return 1188; + } } } else @@ -115,7 +126,7 @@ 10987654321098765432109876543210 0000100x000xxxxx0xxxxxxxxxxxxxxx stxrb. */ - return 936; + return 937; } else { @@ -123,7 +134,7 @@ 10987654321098765432109876543210 0100100x000xxxxx0xxxxxxxxxxxxxxx stxrh. */ - return 942; + return 943; } } else @@ -132,7 +143,7 @@ 10987654321098765432109876543210 1x00100x000xxxxx0xxxxxxxxxxxxxxx stxr. */ - return 948; + return 949; } } else @@ -143,7 +154,7 @@ 10987654321098765432109876543210 0x00100x001xxxxx0xxxxxxxxxxxxxxx casp. */ - return 1021; + return 1022; } else { @@ -151,7 +162,7 @@ 10987654321098765432109876543210 1x00100x001xxxxx0xxxxxxxxxxxxxxx stxp. */ - return 950; + return 951; } } } @@ -167,7 +178,7 @@ 10987654321098765432109876543210 0000100x000xxxxx1xxxxxxxxxxxxxxx stlxrb. */ - return 937; + return 938; } else { @@ -175,7 +186,7 @@ 10987654321098765432109876543210 0100100x000xxxxx1xxxxxxxxxxxxxxx stlxrh. */ - return 943; + return 944; } } else @@ -184,7 +195,7 @@ 10987654321098765432109876543210 1x00100x000xxxxx1xxxxxxxxxxxxxxx stlxr. */ - return 949; + return 950; } } else @@ -195,7 +206,7 @@ 10987654321098765432109876543210 0x00100x001xxxxx1xxxxxxxxxxxxxxx caspl. */ - return 1023; + return 1024; } else { @@ -203,7 +214,7 @@ 10987654321098765432109876543210 1x00100x001xxxxx1xxxxxxxxxxxxxxx stlxp. */ - return 951; + return 952; } } } @@ -216,7 +227,7 @@ 10987654321098765432109876543210 x010100x00xxxxxxxxxxxxxxxxxxxxxx stnp. */ - return 970; + return 971; } else { @@ -224,7 +235,7 @@ 10987654321098765432109876543210 x110100x00xxxxxxxxxxxxxxxxxxxxxx stgp. */ - return 979; + return 980; } } } @@ -242,7 +253,7 @@ 10987654321098765432109876543210 0x00100x100xxxxx0xxxxxxxxxxxxxxx stllrb. */ - return 968; + return 969; } else { @@ -250,7 +261,7 @@ 10987654321098765432109876543210 1x00100x100xxxxx0xxxxxxxxxxxxxxx stllr. */ - return 967; + return 968; } } else @@ -263,7 +274,7 @@ 10987654321098765432109876543210 0000100x101xxxxx0xxxxxxxxxxxxxxx casb. */ - return 1009; + return 1010; } else { @@ -271,7 +282,7 @@ 10987654321098765432109876543210 0100100x101xxxxx0xxxxxxxxxxxxxxx cash. */ - return 1010; + return 1011; } } else @@ -280,7 +291,7 @@ 10987654321098765432109876543210 1x00100x101xxxxx0xxxxxxxxxxxxxxx cas. */ - return 1011; + return 1012; } } } @@ -296,7 +307,7 @@ 10987654321098765432109876543210 0000100x100xxxxx1xxxxxxxxxxxxxxx stlrb. */ - return 940; + return 941; } else { @@ -304,7 +315,7 @@ 10987654321098765432109876543210 0100100x100xxxxx1xxxxxxxxxxxxxxx stlrh. */ - return 946; + return 947; } } else @@ -313,7 +324,7 @@ 10987654321098765432109876543210 1x00100x100xxxxx1xxxxxxxxxxxxxxx stlr. */ - return 956; + return 957; } } else @@ -326,7 +337,7 @@ 10987654321098765432109876543210 0000100x101xxxxx1xxxxxxxxxxxxxxx caslb. */ - return 1013; + return 1014; } else { @@ -334,7 +345,7 @@ 10987654321098765432109876543210 0100100x101xxxxx1xxxxxxxxxxxxxxx caslh. */ - return 1016; + return 1017; } } else @@ -343,7 +354,7 @@ 10987654321098765432109876543210 1x00100x101xxxxx1xxxxxxxxxxxxxxx casl. */ - return 1019; + return 1020; } } } @@ -356,7 +367,7 @@ 10987654321098765432109876543210 x010100x10xxxxxxxxxxxxxxxxxxxxxx stp. */ - return 980; + return 981; } else { @@ -364,7 +375,7 @@ 10987654321098765432109876543210 x110100x10xxxxxxxxxxxxxxxxxxxxxx stgp. */ - return 985; + return 986; } } } @@ -387,7 +398,7 @@ 10987654321098765432109876543210 0000100x010xxxxx0xxxxxxxxxxxxxxx ldxrb. */ - return 938; + return 939; } else { @@ -395,7 +406,7 @@ 10987654321098765432109876543210 0100100x010xxxxx0xxxxxxxxxxxxxxx ldxrh. */ - return 944; + return 945; } } else @@ -404,7 +415,7 @@ 10987654321098765432109876543210 1x00100x010xxxxx0xxxxxxxxxxxxxxx ldxr. */ - return 952; + return 953; } } else @@ -415,7 +426,7 @@ 10987654321098765432109876543210 0x00100x011xxxxx0xxxxxxxxxxxxxxx caspa. */ - return 1022; + return 1023; } else { @@ -423,7 +434,7 @@ 10987654321098765432109876543210 1x00100x011xxxxx0xxxxxxxxxxxxxxx ldxp. */ - return 954; + return 955; } } } @@ -439,7 +450,7 @@ 10987654321098765432109876543210 0000100x010xxxxx1xxxxxxxxxxxxxxx ldaxrb. */ - return 939; + return 940; } else { @@ -447,7 +458,7 @@ 10987654321098765432109876543210 0100100x010xxxxx1xxxxxxxxxxxxxxx ldaxrh. */ - return 945; + return 946; } } else @@ -456,7 +467,7 @@ 10987654321098765432109876543210 1x00100x010xxxxx1xxxxxxxxxxxxxxx ldaxr. */ - return 953; + return 954; } } else @@ -467,7 +478,7 @@ 10987654321098765432109876543210 0x00100x011xxxxx1xxxxxxxxxxxxxxx caspal. */ - return 1024; + return 1025; } else { @@ -475,7 +486,7 @@ 10987654321098765432109876543210 1x00100x011xxxxx1xxxxxxxxxxxxxxx ldaxp. */ - return 955; + return 956; } } } @@ -488,7 +499,7 @@ 10987654321098765432109876543210 x010100x01xxxxxxxxxxxxxxxxxxxxxx ldnp. */ - return 971; + return 972; } else { @@ -496,7 +507,7 @@ 10987654321098765432109876543210 x110100x01xxxxxxxxxxxxxxxxxxxxxx ldpsw. */ - return 978; + return 979; } } } @@ -516,7 +527,7 @@ 10987654321098765432109876543210 0000100x110xxxxx0xxxxxxxxxxxxxxx ldlarb. */ - return 965; + return 966; } else { @@ -524,7 +535,7 @@ 10987654321098765432109876543210 0100100x110xxxxx0xxxxxxxxxxxxxxx ldlarh. */ - return 966; + return 967; } } else @@ -533,7 +544,7 @@ 10987654321098765432109876543210 1x00100x110xxxxx0xxxxxxxxxxxxxxx ldlar. */ - return 964; + return 965; } } else @@ -546,7 +557,7 @@ 10987654321098765432109876543210 0000100x111xxxxx0xxxxxxxxxxxxxxx casab. */ - return 1012; + return 1013; } else { @@ -554,7 +565,7 @@ 10987654321098765432109876543210 0100100x111xxxxx0xxxxxxxxxxxxxxx casah. */ - return 1015; + return 1016; } } else @@ -563,7 +574,7 @@ 10987654321098765432109876543210 1x00100x111xxxxx0xxxxxxxxxxxxxxx casa. */ - return 1018; + return 1019; } } } @@ -579,7 +590,7 @@ 10987654321098765432109876543210 0000100x110xxxxx1xxxxxxxxxxxxxxx ldarb. */ - return 941; + return 942; } else { @@ -587,7 +598,7 @@ 10987654321098765432109876543210 0100100x110xxxxx1xxxxxxxxxxxxxxx ldarh. */ - return 947; + return 948; } } else @@ -596,7 +607,7 @@ 10987654321098765432109876543210 1x00100x110xxxxx1xxxxxxxxxxxxxxx ldar. */ - return 957; + return 958; } } else @@ -609,7 +620,7 @@ 10987654321098765432109876543210 0000100x111xxxxx1xxxxxxxxxxxxxxx casalb. */ - return 1014; + return 1015; } else { @@ -617,7 +628,7 @@ 10987654321098765432109876543210 0100100x111xxxxx1xxxxxxxxxxxxxxx casalh. */ - return 1017; + return 1018; } } else @@ -626,7 +637,7 @@ 10987654321098765432109876543210 1x00100x111xxxxx1xxxxxxxxxxxxxxx casal. */ - return 1020; + return 1021; } } } @@ -639,7 +650,7 @@ 10987654321098765432109876543210 x010100x11xxxxxxxxxxxxxxxxxxxxxx ldp. */ - return 981; + return 982; } else { @@ -647,7 +658,7 @@ 10987654321098765432109876543210 x110100x11xxxxxxxxxxxxxxxxxxxxxx ldpsw. */ - return 984; + return 985; } } } @@ -665,7 +676,7 @@ 10987654321098765432109876543210 0x011000xxxxxxxxxxxxxxxxxxxxxxxx ldr. */ - return 986; + return 987; } else { @@ -675,7 +686,7 @@ 10987654321098765432109876543210 10011000xxxxxxxxxxxxxxxxxxxxxxxx ldrsw. */ - return 988; + return 989; } else { @@ -683,7 +694,7 @@ 10987654321098765432109876543210 11011000xxxxxxxxxxxxxxxxxxxxxxxx prfm. */ - return 989; + return 990; } } } @@ -707,7 +718,7 @@ 10987654321098765432109876543210 00111000000xxxxxxxxx00xxxxxxxxxx sturb. */ - return 921; + return 922; } else { @@ -715,7 +726,7 @@ 10987654321098765432109876543210 01111000000xxxxxxxxx00xxxxxxxxxx sturh. */ - return 926; + return 927; } } else @@ -724,7 +735,7 @@ 10987654321098765432109876543210 1x111000000xxxxxxxxx00xxxxxxxxxx stur. */ - return 929; + return 930; } } else @@ -737,7 +748,7 @@ 10987654321098765432109876543210 00111000010xxxxxxxxx00xxxxxxxxxx ldurb. */ - return 922; + return 923; } else { @@ -745,7 +756,7 @@ 10987654321098765432109876543210 01111000010xxxxxxxxx00xxxxxxxxxx ldurh. */ - return 927; + return 928; } } else @@ -754,7 +765,7 @@ 10987654321098765432109876543210 1x111000010xxxxxxxxx00xxxxxxxxxx ldur. */ - return 930; + return 931; } } } @@ -768,7 +779,7 @@ 10987654321098765432109876543210 001110001x0xxxxxxxxx00xxxxxxxxxx ldursb. */ - return 923; + return 924; } else { @@ -776,7 +787,7 @@ 10987654321098765432109876543210 101110001x0xxxxxxxxx00xxxxxxxxxx ldursw. */ - return 931; + return 932; } } else @@ -787,7 +798,7 @@ 10987654321098765432109876543210 011110001x0xxxxxxxxx00xxxxxxxxxx ldursh. */ - return 928; + return 929; } else { @@ -795,7 +806,7 @@ 10987654321098765432109876543210 111110001x0xxxxxxxxx00xxxxxxxxxx prfum. */ - return 932; + return 933; } } } @@ -822,7 +833,7 @@ 10987654321098765432109876543210 00111000001xxxxx000000xxxxxxxxxx ldaddb. */ - return 1037; + return 1038; } else { @@ -830,7 +841,7 @@ 10987654321098765432109876543210 01111000001xxxxx000000xxxxxxxxxx ldaddh. */ - return 1038; + return 1039; } } else @@ -839,7 +850,7 @@ 10987654321098765432109876543210 1x111000001xxxxx000000xxxxxxxxxx ldadd. */ - return 1039; + return 1040; } } else @@ -852,7 +863,7 @@ 10987654321098765432109876543210 00111000101xxxxx000000xxxxxxxxxx ldaddab. */ - return 1040; + return 1041; } else { @@ -860,7 +871,7 @@ 10987654321098765432109876543210 01111000101xxxxx000000xxxxxxxxxx ldaddah. */ - return 1043; + return 1044; } } else @@ -869,7 +880,7 @@ 10987654321098765432109876543210 1x111000101xxxxx000000xxxxxxxxxx ldadda. */ - return 1046; + return 1047; } } } @@ -885,7 +896,7 @@ 10987654321098765432109876543210 00111000011xxxxx000000xxxxxxxxxx ldaddlb. */ - return 1041; + return 1042; } else { @@ -893,7 +904,7 @@ 10987654321098765432109876543210 01111000011xxxxx000000xxxxxxxxxx ldaddlh. */ - return 1044; + return 1045; } } else @@ -902,7 +913,7 @@ 10987654321098765432109876543210 1x111000011xxxxx000000xxxxxxxxxx ldaddl. */ - return 1047; + return 1048; } } else @@ -915,7 +926,7 @@ 10987654321098765432109876543210 00111000111xxxxx000000xxxxxxxxxx ldaddalb. */ - return 1042; + return 1043; } else { @@ -923,7 +934,7 @@ 10987654321098765432109876543210 01111000111xxxxx000000xxxxxxxxxx ldaddalh. */ - return 1045; + return 1046; } } else @@ -932,7 +943,7 @@ 10987654321098765432109876543210 1x111000111xxxxx000000xxxxxxxxxx ldaddal. */ - return 1048; + return 1049; } } } @@ -951,7 +962,7 @@ 10987654321098765432109876543210 00111000001xxxxx100000xxxxxxxxxx swpb. */ - return 1025; + return 1026; } else { @@ -959,7 +970,7 @@ 10987654321098765432109876543210 01111000001xxxxx100000xxxxxxxxxx swph. */ - return 1026; + return 1027; } } else @@ -968,7 +979,7 @@ 10987654321098765432109876543210 1x111000001xxxxx100000xxxxxxxxxx swp. */ - return 1027; + return 1028; } } else @@ -981,7 +992,7 @@ 10987654321098765432109876543210 00111000101xxxxx100000xxxxxxxxxx swpab. */ - return 1028; + return 1029; } else { @@ -989,7 +1000,7 @@ 10987654321098765432109876543210 01111000101xxxxx100000xxxxxxxxxx swpah. */ - return 1031; + return 1032; } } else @@ -998,7 +1009,7 @@ 10987654321098765432109876543210 1x111000101xxxxx100000xxxxxxxxxx swpa. */ - return 1034; + return 1035; } } } @@ -1014,7 +1025,7 @@ 10987654321098765432109876543210 00111000011xxxxx100000xxxxxxxxxx swplb. */ - return 1029; + return 1030; } else { @@ -1022,7 +1033,7 @@ 10987654321098765432109876543210 01111000011xxxxx100000xxxxxxxxxx swplh. */ - return 1032; + return 1033; } } else @@ -1031,7 +1042,7 @@ 10987654321098765432109876543210 1x111000011xxxxx100000xxxxxxxxxx swpl. */ - return 1035; + return 1036; } } else @@ -1044,7 +1055,7 @@ 10987654321098765432109876543210 00111000111xxxxx100000xxxxxxxxxx swpalb. */ - return 1030; + return 1031; } else { @@ -1052,7 +1063,7 @@ 10987654321098765432109876543210 01111000111xxxxx100000xxxxxxxxxx swpalh. */ - return 1033; + return 1034; } } else @@ -1061,7 +1072,7 @@ 10987654321098765432109876543210 1x111000111xxxxx100000xxxxxxxxxx swpal. */ - return 1036; + return 1037; } } } @@ -1083,7 +1094,7 @@ 10987654321098765432109876543210 00111000001xxxxx010000xxxxxxxxxx ldsmaxb. */ - return 1085; + return 1086; } else { @@ -1091,7 +1102,7 @@ 10987654321098765432109876543210 01111000001xxxxx010000xxxxxxxxxx ldsmaxh. */ - return 1086; + return 1087; } } else @@ -1100,7 +1111,7 @@ 10987654321098765432109876543210 1x111000001xxxxx010000xxxxxxxxxx ldsmax. */ - return 1087; + return 1088; } } else @@ -1113,7 +1124,7 @@ 10987654321098765432109876543210 00111000101xxxxx010000xxxxxxxxxx ldsmaxab. */ - return 1088; + return 1089; } else { @@ -1121,7 +1132,7 @@ 10987654321098765432109876543210 01111000101xxxxx010000xxxxxxxxxx ldsmaxah. */ - return 1091; + return 1092; } } else @@ -1130,7 +1141,7 @@ 10987654321098765432109876543210 1x111000101xxxxx010000xxxxxxxxxx ldsmaxa. */ - return 1094; + return 1095; } } } @@ -1146,7 +1157,7 @@ 10987654321098765432109876543210 00111000011xxxxx010000xxxxxxxxxx ldsmaxlb. */ - return 1089; + return 1090; } else { @@ -1154,7 +1165,7 @@ 10987654321098765432109876543210 01111000011xxxxx010000xxxxxxxxxx ldsmaxlh. */ - return 1092; + return 1093; } } else @@ -1163,7 +1174,7 @@ 10987654321098765432109876543210 1x111000011xxxxx010000xxxxxxxxxx ldsmaxl. */ - return 1095; + return 1096; } } else @@ -1176,7 +1187,7 @@ 10987654321098765432109876543210 00111000111xxxxx010000xxxxxxxxxx ldsmaxalb. */ - return 1090; + return 1091; } else { @@ -1184,7 +1195,7 @@ 10987654321098765432109876543210 01111000111xxxxx010000xxxxxxxxxx ldsmaxalh. */ - return 1093; + return 1094; } } else @@ -1193,7 +1204,7 @@ 10987654321098765432109876543210 1x111000111xxxxx010000xxxxxxxxxx ldsmaxal. */ - return 1096; + return 1097; } } } @@ -1208,7 +1219,7 @@ 10987654321098765432109876543210 00111000xx1xxxxx110000xxxxxxxxxx ldaprb. */ - return 958; + return 959; } else { @@ -1216,7 +1227,7 @@ 10987654321098765432109876543210 01111000xx1xxxxx110000xxxxxxxxxx ldaprh. */ - return 959; + return 960; } } else @@ -1225,7 +1236,7 @@ 10987654321098765432109876543210 1x111000xx1xxxxx110000xxxxxxxxxx ldapr. */ - return 960; + return 961; } } } @@ -1246,7 +1257,7 @@ 10987654321098765432109876543210 00111000001xxxxxx01000xxxxxxxxxx ldeorb. */ - return 1061; + return 1062; } else { @@ -1254,7 +1265,7 @@ 10987654321098765432109876543210 01111000001xxxxxx01000xxxxxxxxxx ldeorh. */ - return 1062; + return 1063; } } else @@ -1263,7 +1274,7 @@ 10987654321098765432109876543210 1x111000001xxxxxx01000xxxxxxxxxx ldeor. */ - return 1063; + return 1064; } } else @@ -1276,7 +1287,7 @@ 10987654321098765432109876543210 00111000101xxxxxx01000xxxxxxxxxx ldeorab. */ - return 1064; + return 1065; } else { @@ -1284,7 +1295,7 @@ 10987654321098765432109876543210 01111000101xxxxxx01000xxxxxxxxxx ldeorah. */ - return 1067; + return 1068; } } else @@ -1293,7 +1304,7 @@ 10987654321098765432109876543210 1x111000101xxxxxx01000xxxxxxxxxx ldeora. */ - return 1070; + return 1071; } } } @@ -1309,7 +1320,7 @@ 10987654321098765432109876543210 00111000011xxxxxx01000xxxxxxxxxx ldeorlb. */ - return 1065; + return 1066; } else { @@ -1317,7 +1328,7 @@ 10987654321098765432109876543210 01111000011xxxxxx01000xxxxxxxxxx ldeorlh. */ - return 1068; + return 1069; } } else @@ -1326,7 +1337,7 @@ 10987654321098765432109876543210 1x111000011xxxxxx01000xxxxxxxxxx ldeorl. */ - return 1071; + return 1072; } } else @@ -1339,7 +1350,7 @@ 10987654321098765432109876543210 00111000111xxxxxx01000xxxxxxxxxx ldeoralb. */ - return 1066; + return 1067; } else { @@ -1347,7 +1358,7 @@ 10987654321098765432109876543210 01111000111xxxxxx01000xxxxxxxxxx ldeoralh. */ - return 1069; + return 1070; } } else @@ -1356,7 +1367,7 @@ 10987654321098765432109876543210 1x111000111xxxxxx01000xxxxxxxxxx ldeoral. */ - return 1072; + return 1073; } } } @@ -1375,7 +1386,7 @@ 10987654321098765432109876543210 00111000001xxxxxx11000xxxxxxxxxx ldumaxb. */ - return 1109; + return 1110; } else { @@ -1383,7 +1394,7 @@ 10987654321098765432109876543210 01111000001xxxxxx11000xxxxxxxxxx ldumaxh. */ - return 1110; + return 1111; } } else @@ -1392,7 +1403,7 @@ 10987654321098765432109876543210 1x111000001xxxxxx11000xxxxxxxxxx ldumax. */ - return 1111; + return 1112; } } else @@ -1405,7 +1416,7 @@ 10987654321098765432109876543210 00111000101xxxxxx11000xxxxxxxxxx ldumaxab. */ - return 1112; + return 1113; } else { @@ -1413,7 +1424,7 @@ 10987654321098765432109876543210 01111000101xxxxxx11000xxxxxxxxxx ldumaxah. */ - return 1115; + return 1116; } } else @@ -1422,7 +1433,7 @@ 10987654321098765432109876543210 1x111000101xxxxxx11000xxxxxxxxxx ldumaxa. */ - return 1118; + return 1119; } } } @@ -1438,7 +1449,7 @@ 10987654321098765432109876543210 00111000011xxxxxx11000xxxxxxxxxx ldumaxlb. */ - return 1113; + return 1114; } else { @@ -1446,7 +1457,7 @@ 10987654321098765432109876543210 01111000011xxxxxx11000xxxxxxxxxx ldumaxlh. */ - return 1116; + return 1117; } } else @@ -1455,7 +1466,7 @@ 10987654321098765432109876543210 1x111000011xxxxxx11000xxxxxxxxxx ldumaxl. */ - return 1119; + return 1120; } } else @@ -1468,7 +1479,7 @@ 10987654321098765432109876543210 00111000111xxxxxx11000xxxxxxxxxx ldumaxalb. */ - return 1114; + return 1115; } else { @@ -1476,7 +1487,7 @@ 10987654321098765432109876543210 01111000111xxxxxx11000xxxxxxxxxx ldumaxalh. */ - return 1117; + return 1118; } } else @@ -1485,7 +1496,7 @@ 10987654321098765432109876543210 1x111000111xxxxxx11000xxxxxxxxxx ldumaxal. */ - return 1120; + return 1121; } } } @@ -1510,7 +1521,7 @@ 10987654321098765432109876543210 00111000001xxxxxx00100xxxxxxxxxx ldclrb. */ - return 1049; + return 1050; } else { @@ -1518,7 +1529,7 @@ 10987654321098765432109876543210 01111000001xxxxxx00100xxxxxxxxxx ldclrh. */ - return 1050; + return 1051; } } else @@ -1527,7 +1538,7 @@ 10987654321098765432109876543210 1x111000001xxxxxx00100xxxxxxxxxx ldclr. */ - return 1051; + return 1052; } } else @@ -1540,7 +1551,7 @@ 10987654321098765432109876543210 00111000101xxxxxx00100xxxxxxxxxx ldclrab. */ - return 1052; + return 1053; } else { @@ -1548,7 +1559,7 @@ 10987654321098765432109876543210 01111000101xxxxxx00100xxxxxxxxxx ldclrah. */ - return 1055; + return 1056; } } else @@ -1557,7 +1568,7 @@ 10987654321098765432109876543210 1x111000101xxxxxx00100xxxxxxxxxx ldclra. */ - return 1058; + return 1059; } } } @@ -1573,7 +1584,7 @@ 10987654321098765432109876543210 00111000011xxxxxx00100xxxxxxxxxx ldclrlb. */ - return 1053; + return 1054; } else { @@ -1581,7 +1592,7 @@ 10987654321098765432109876543210 01111000011xxxxxx00100xxxxxxxxxx ldclrlh. */ - return 1056; + return 1057; } } else @@ -1590,7 +1601,7 @@ 10987654321098765432109876543210 1x111000011xxxxxx00100xxxxxxxxxx ldclrl. */ - return 1059; + return 1060; } } else @@ -1603,7 +1614,7 @@ 10987654321098765432109876543210 00111000111xxxxxx00100xxxxxxxxxx ldclralb. */ - return 1054; + return 1055; } else { @@ -1611,7 +1622,7 @@ 10987654321098765432109876543210 01111000111xxxxxx00100xxxxxxxxxx ldclralh. */ - return 1057; + return 1058; } } else @@ -1620,7 +1631,7 @@ 10987654321098765432109876543210 1x111000111xxxxxx00100xxxxxxxxxx ldclral. */ - return 1060; + return 1061; } } } @@ -1639,7 +1650,7 @@ 10987654321098765432109876543210 00111000001xxxxxx10100xxxxxxxxxx ldsminb. */ - return 1097; + return 1098; } else { @@ -1647,7 +1658,7 @@ 10987654321098765432109876543210 01111000001xxxxxx10100xxxxxxxxxx ldsminh. */ - return 1098; + return 1099; } } else @@ -1656,7 +1667,7 @@ 10987654321098765432109876543210 1x111000001xxxxxx10100xxxxxxxxxx ldsmin. */ - return 1099; + return 1100; } } else @@ -1669,7 +1680,7 @@ 10987654321098765432109876543210 00111000101xxxxxx10100xxxxxxxxxx ldsminab. */ - return 1100; + return 1101; } else { @@ -1677,7 +1688,7 @@ 10987654321098765432109876543210 01111000101xxxxxx10100xxxxxxxxxx ldsminah. */ - return 1103; + return 1104; } } else @@ -1686,7 +1697,7 @@ 10987654321098765432109876543210 1x111000101xxxxxx10100xxxxxxxxxx ldsmina. */ - return 1106; + return 1107; } } } @@ -1702,7 +1713,7 @@ 10987654321098765432109876543210 00111000011xxxxxx10100xxxxxxxxxx ldsminlb. */ - return 1101; + return 1102; } else { @@ -1710,7 +1721,7 @@ 10987654321098765432109876543210 01111000011xxxxxx10100xxxxxxxxxx ldsminlh. */ - return 1104; + return 1105; } } else @@ -1719,7 +1730,7 @@ 10987654321098765432109876543210 1x111000011xxxxxx10100xxxxxxxxxx ldsminl. */ - return 1107; + return 1108; } } else @@ -1732,7 +1743,7 @@ 10987654321098765432109876543210 00111000111xxxxxx10100xxxxxxxxxx ldsminalb. */ - return 1102; + return 1103; } else { @@ -1740,7 +1751,7 @@ 10987654321098765432109876543210 01111000111xxxxxx10100xxxxxxxxxx ldsminalh. */ - return 1105; + return 1106; } } else @@ -1749,7 +1760,7 @@ 10987654321098765432109876543210 1x111000111xxxxxx10100xxxxxxxxxx ldsminal. */ - return 1108; + return 1109; } } } @@ -1771,7 +1782,7 @@ 10987654321098765432109876543210 00111000001xxxxxx01100xxxxxxxxxx ldsetb. */ - return 1073; + return 1074; } else { @@ -1779,7 +1790,7 @@ 10987654321098765432109876543210 01111000001xxxxxx01100xxxxxxxxxx ldseth. */ - return 1074; + return 1075; } } else @@ -1788,7 +1799,7 @@ 10987654321098765432109876543210 1x111000001xxxxxx01100xxxxxxxxxx ldset. */ - return 1075; + return 1076; } } else @@ -1801,7 +1812,7 @@ 10987654321098765432109876543210 00111000101xxxxxx01100xxxxxxxxxx ldsetab. */ - return 1076; + return 1077; } else { @@ -1809,7 +1820,7 @@ 10987654321098765432109876543210 01111000101xxxxxx01100xxxxxxxxxx ldsetah. */ - return 1079; + return 1080; } } else @@ -1818,7 +1829,7 @@ 10987654321098765432109876543210 1x111000101xxxxxx01100xxxxxxxxxx ldseta. */ - return 1082; + return 1083; } } } @@ -1834,7 +1845,7 @@ 10987654321098765432109876543210 00111000011xxxxxx01100xxxxxxxxxx ldsetlb. */ - return 1077; + return 1078; } else { @@ -1842,7 +1853,7 @@ 10987654321098765432109876543210 01111000011xxxxxx01100xxxxxxxxxx ldsetlh. */ - return 1080; + return 1081; } } else @@ -1851,7 +1862,7 @@ 10987654321098765432109876543210 1x111000011xxxxxx01100xxxxxxxxxx ldsetl. */ - return 1083; + return 1084; } } else @@ -1864,7 +1875,7 @@ 10987654321098765432109876543210 00111000111xxxxxx01100xxxxxxxxxx ldsetalb. */ - return 1078; + return 1079; } else { @@ -1872,7 +1883,7 @@ 10987654321098765432109876543210 01111000111xxxxxx01100xxxxxxxxxx ldsetalh. */ - return 1081; + return 1082; } } else @@ -1881,7 +1892,7 @@ 10987654321098765432109876543210 1x111000111xxxxxx01100xxxxxxxxxx ldsetal. */ - return 1084; + return 1085; } } } @@ -1900,7 +1911,7 @@ 10987654321098765432109876543210 00111000001xxxxxx11100xxxxxxxxxx lduminb. */ - return 1121; + return 1122; } else { @@ -1908,7 +1919,7 @@ 10987654321098765432109876543210 01111000001xxxxxx11100xxxxxxxxxx lduminh. */ - return 1122; + return 1123; } } else @@ -1917,7 +1928,7 @@ 10987654321098765432109876543210 1x111000001xxxxxx11100xxxxxxxxxx ldumin. */ - return 1123; + return 1124; } } else @@ -1930,7 +1941,7 @@ 10987654321098765432109876543210 00111000101xxxxxx11100xxxxxxxxxx lduminab. */ - return 1124; + return 1125; } else { @@ -1938,7 +1949,7 @@ 10987654321098765432109876543210 01111000101xxxxxx11100xxxxxxxxxx lduminah. */ - return 1127; + return 1128; } } else @@ -1947,7 +1958,7 @@ 10987654321098765432109876543210 1x111000101xxxxxx11100xxxxxxxxxx ldumina. */ - return 1130; + return 1131; } } } @@ -1963,7 +1974,7 @@ 10987654321098765432109876543210 00111000011xxxxxx11100xxxxxxxxxx lduminlb. */ - return 1125; + return 1126; } else { @@ -1971,7 +1982,7 @@ 10987654321098765432109876543210 01111000011xxxxxx11100xxxxxxxxxx lduminlh. */ - return 1128; + return 1129; } } else @@ -1980,7 +1991,7 @@ 10987654321098765432109876543210 1x111000011xxxxxx11100xxxxxxxxxx lduminl. */ - return 1131; + return 1132; } } else @@ -1993,7 +2004,7 @@ 10987654321098765432109876543210 00111000111xxxxxx11100xxxxxxxxxx lduminalb. */ - return 1126; + return 1127; } else { @@ -2001,7 +2012,7 @@ 10987654321098765432109876543210 01111000111xxxxxx11100xxxxxxxxxx lduminalh. */ - return 1129; + return 1130; } } else @@ -2010,7 +2021,7 @@ 10987654321098765432109876543210 1x111000111xxxxxx11100xxxxxxxxxx lduminal. */ - return 1132; + return 1133; } } } @@ -2035,7 +2046,7 @@ 10987654321098765432109876543210 00111000000xxxxxxxxx10xxxxxxxxxx sttrb. */ - return 912; + return 913; } else { @@ -2043,7 +2054,7 @@ 10987654321098765432109876543210 01111000000xxxxxxxxx10xxxxxxxxxx sttrh. */ - return 915; + return 916; } } else @@ -2052,7 +2063,7 @@ 10987654321098765432109876543210 1x111000000xxxxxxxxx10xxxxxxxxxx sttr. */ - return 918; + return 919; } } else @@ -2065,7 +2076,7 @@ 10987654321098765432109876543210 00111000010xxxxxxxxx10xxxxxxxxxx ldtrb. */ - return 913; + return 914; } else { @@ -2073,7 +2084,7 @@ 10987654321098765432109876543210 01111000010xxxxxxxxx10xxxxxxxxxx ldtrh. */ - return 916; + return 917; } } else @@ -2082,7 +2093,7 @@ 10987654321098765432109876543210 1x111000010xxxxxxxxx10xxxxxxxxxx ldtr. */ - return 919; + return 920; } } } @@ -2096,7 +2107,7 @@ 10987654321098765432109876543210 001110001x0xxxxxxxxx10xxxxxxxxxx ldtrsb. */ - return 914; + return 915; } else { @@ -2104,7 +2115,7 @@ 10987654321098765432109876543210 101110001x0xxxxxxxxx10xxxxxxxxxx ldtrsw. */ - return 920; + return 921; } } else @@ -2113,7 +2124,7 @@ 10987654321098765432109876543210 x11110001x0xxxxxxxxx10xxxxxxxxxx ldtrsh. */ - return 917; + return 918; } } } @@ -2131,7 +2142,7 @@ 10987654321098765432109876543210 00111000001xxxxxxxxx10xxxxxxxxxx strb. */ - return 900; + return 901; } else { @@ -2139,7 +2150,7 @@ 10987654321098765432109876543210 01111000001xxxxxxxxx10xxxxxxxxxx strh. */ - return 905; + return 906; } } else @@ -2148,7 +2159,7 @@ 10987654321098765432109876543210 1x111000001xxxxxxxxx10xxxxxxxxxx str. */ - return 908; + return 909; } } else @@ -2161,7 +2172,7 @@ 10987654321098765432109876543210 00111000011xxxxxxxxx10xxxxxxxxxx ldrb. */ - return 901; + return 902; } else { @@ -2169,7 +2180,7 @@ 10987654321098765432109876543210 01111000011xxxxxxxxx10xxxxxxxxxx ldrh. */ - return 906; + return 907; } } else @@ -2178,7 +2189,7 @@ 10987654321098765432109876543210 1x111000011xxxxxxxxx10xxxxxxxxxx ldr. */ - return 909; + return 910; } } } @@ -2192,7 +2203,7 @@ 10987654321098765432109876543210 001110001x1xxxxxxxxx10xxxxxxxxxx ldrsb. */ - return 902; + return 903; } else { @@ -2200,7 +2211,7 @@ 10987654321098765432109876543210 101110001x1xxxxxxxxx10xxxxxxxxxx ldrsw. */ - return 910; + return 911; } } else @@ -2211,7 +2222,7 @@ 10987654321098765432109876543210 011110001x1xxxxxxxxx10xxxxxxxxxx ldrsh. */ - return 907; + return 908; } else { @@ -2219,7 +2230,7 @@ 10987654321098765432109876543210 111110001x1xxxxxxxxx10xxxxxxxxxx prfm. */ - return 911; + return 912; } } } @@ -2242,7 +2253,7 @@ 10987654321098765432109876543210 00111000000xxxxxxxxxx1xxxxxxxxxx strb. */ - return 869; + return 870; } else { @@ -2250,7 +2261,7 @@ 10987654321098765432109876543210 01111000000xxxxxxxxxx1xxxxxxxxxx strh. */ - return 874; + return 875; } } else @@ -2259,7 +2270,7 @@ 10987654321098765432109876543210 1x111000000xxxxxxxxxx1xxxxxxxxxx str. */ - return 877; + return 878; } } else @@ -2272,7 +2283,7 @@ 10987654321098765432109876543210 00111000010xxxxxxxxxx1xxxxxxxxxx ldrb. */ - return 870; + return 871; } else { @@ -2280,7 +2291,7 @@ 10987654321098765432109876543210 01111000010xxxxxxxxxx1xxxxxxxxxx ldrh. */ - return 875; + return 876; } } else @@ -2289,7 +2300,7 @@ 10987654321098765432109876543210 1x111000010xxxxxxxxxx1xxxxxxxxxx ldr. */ - return 878; + return 879; } } } @@ -2303,7 +2314,7 @@ 10987654321098765432109876543210 001110001x0xxxxxxxxxx1xxxxxxxxxx ldrsb. */ - return 871; + return 872; } else { @@ -2311,7 +2322,7 @@ 10987654321098765432109876543210 101110001x0xxxxxxxxxx1xxxxxxxxxx ldrsw. */ - return 879; + return 880; } } else @@ -2320,7 +2331,7 @@ 10987654321098765432109876543210 x11110001x0xxxxxxxxxx1xxxxxxxxxx ldrsh. */ - return 876; + return 877; } } } @@ -2332,7 +2343,7 @@ 10987654321098765432109876543210 xx1110000x1xxxxxxxxxx1xxxxxxxxxx ldraa. */ - return 934; + return 935; } else { @@ -2340,7 +2351,7 @@ 10987654321098765432109876543210 xx1110001x1xxxxxxxxxx1xxxxxxxxxx ldrab. */ - return 935; + return 936; } } } @@ -2368,7 +2379,7 @@ 10987654321098765432109876543210 00011001000xxxxxxxxx00xxxxxxxxxx stlurb. */ - return 2377; + return 2381; } else { @@ -2376,7 +2387,7 @@ 10987654321098765432109876543210 10011001000xxxxxxxxx00xxxxxxxxxx stlur. */ - return 2385; + return 2389; } } else @@ -2387,7 +2398,7 @@ 10987654321098765432109876543210 01011001000xxxxxxxxx00xxxxxxxxxx stlurh. */ - return 2381; + return 2385; } else { @@ -2395,7 +2406,7 @@ 10987654321098765432109876543210 11011001000xxxxxxxxx00xxxxxxxxxx stlur. */ - return 2388; + return 2392; } } } @@ -2405,7 +2416,7 @@ 10987654321098765432109876543210 xx011001001xxxxxxxxx00xxxxxxxxxx stzgm. */ - return 963; + return 964; } } else @@ -2414,7 +2425,7 @@ 10987654321098765432109876543210 xx01100100xxxxxxxxxx10xxxxxxxxxx stg. */ - return 880; + return 881; } } else @@ -2423,7 +2434,7 @@ 10987654321098765432109876543210 xx01100100xxxxxxxxxxx1xxxxxxxxxx stg. */ - return 884; + return 885; } } else @@ -2436,7 +2447,7 @@ 10987654321098765432109876543210 0011100100xxxxxxxxxxxxxxxxxxxxxx strb. */ - return 888; + return 889; } else { @@ -2444,7 +2455,7 @@ 10987654321098765432109876543210 0111100100xxxxxxxxxxxxxxxxxxxxxx strh. */ - return 893; + return 894; } } else @@ -2453,7 +2464,7 @@ 10987654321098765432109876543210 1x11100100xxxxxxxxxxxxxxxxxxxxxx str. */ - return 896; + return 897; } } } @@ -2475,7 +2486,7 @@ 10987654321098765432109876543210 00011001010xxxxxxxxx00xxxxxxxxxx ldapurb. */ - return 2378; + return 2382; } else { @@ -2483,7 +2494,7 @@ 10987654321098765432109876543210 10011001010xxxxxxxxx00xxxxxxxxxx ldapur. */ - return 2386; + return 2390; } } else @@ -2494,7 +2505,7 @@ 10987654321098765432109876543210 01011001010xxxxxxxxx00xxxxxxxxxx ldapurh. */ - return 2382; + return 2386; } else { @@ -2502,7 +2513,7 @@ 10987654321098765432109876543210 11011001010xxxxxxxxx00xxxxxxxxxx ldapur. */ - return 2389; + return 2393; } } } @@ -2512,7 +2523,7 @@ 10987654321098765432109876543210 xx011001011xxxxxxxxx00xxxxxxxxxx ldg. */ - return 933; + return 934; } } else @@ -2521,7 +2532,7 @@ 10987654321098765432109876543210 xx01100101xxxxxxxxxx10xxxxxxxxxx stzg. */ - return 881; + return 882; } } else @@ -2530,7 +2541,7 @@ 10987654321098765432109876543210 xx01100101xxxxxxxxxxx1xxxxxxxxxx stzg. */ - return 885; + return 886; } } else @@ -2543,7 +2554,7 @@ 10987654321098765432109876543210 0011100101xxxxxxxxxxxxxxxxxxxxxx ldrb. */ - return 889; + return 890; } else { @@ -2551,7 +2562,7 @@ 10987654321098765432109876543210 0111100101xxxxxxxxxxxxxxxxxxxxxx ldrh. */ - return 894; + return 895; } } else @@ -2560,7 +2571,7 @@ 10987654321098765432109876543210 1x11100101xxxxxxxxxxxxxxxxxxxxxx ldr. */ - return 897; + return 898; } } } @@ -2585,7 +2596,7 @@ 10987654321098765432109876543210 00011001100xxxxxxxxx00xxxxxxxxxx ldapursb. */ - return 2380; + return 2384; } else { @@ -2593,7 +2604,7 @@ 10987654321098765432109876543210 10011001100xxxxxxxxx00xxxxxxxxxx ldapursw. */ - return 2387; + return 2391; } } else @@ -2602,7 +2613,7 @@ 10987654321098765432109876543210 x1011001100xxxxxxxxx00xxxxxxxxxx ldapursh. */ - return 2384; + return 2388; } } else @@ -2613,7 +2624,7 @@ 10987654321098765432109876543210 x0011001110xxxxxxxxx00xxxxxxxxxx ldapursb. */ - return 2379; + return 2383; } else { @@ -2621,7 +2632,7 @@ 10987654321098765432109876543210 x1011001110xxxxxxxxx00xxxxxxxxxx ldapursh. */ - return 2383; + return 2387; } } } @@ -2633,7 +2644,7 @@ 10987654321098765432109876543210 xx011001101xxxxxxxxx00xxxxxxxxxx stgm. */ - return 962; + return 963; } else { @@ -2641,7 +2652,7 @@ 10987654321098765432109876543210 xx011001111xxxxxxxxx00xxxxxxxxxx ldgm. */ - return 961; + return 962; } } } @@ -2653,7 +2664,7 @@ 10987654321098765432109876543210 xx01100110xxxxxxxxxx10xxxxxxxxxx st2g. */ - return 882; + return 883; } else { @@ -2661,7 +2672,7 @@ 10987654321098765432109876543210 xx01100111xxxxxxxxxx10xxxxxxxxxx stz2g. */ - return 883; + return 884; } } } @@ -2673,7 +2684,7 @@ 10987654321098765432109876543210 xx01100110xxxxxxxxxxx1xxxxxxxxxx st2g. */ - return 886; + return 887; } else { @@ -2681,7 +2692,7 @@ 10987654321098765432109876543210 xx01100111xxxxxxxxxxx1xxxxxxxxxx stz2g. */ - return 887; + return 888; } } } @@ -2695,7 +2706,7 @@ 10987654321098765432109876543210 001110011xxxxxxxxxxxxxxxxxxxxxxx ldrsb. */ - return 890; + return 891; } else { @@ -2703,7 +2714,7 @@ 10987654321098765432109876543210 101110011xxxxxxxxxxxxxxxxxxxxxxx ldrsw. */ - return 898; + return 899; } } else @@ -2714,7 +2725,7 @@ 10987654321098765432109876543210 011110011xxxxxxxxxxxxxxxxxxxxxxx ldrsh. */ - return 895; + return 896; } else { @@ -2722,7 +2733,7 @@ 10987654321098765432109876543210 111110011xxxxxxxxxxxxxxxxxxxxxxx prfm. */ - return 899; + return 900; } } } @@ -2747,7 +2758,7 @@ 10987654321098765432109876543210 x00x00100xxxxxxxxxxxxxxxxxxxxxxx and. */ - return 990; + return 991; } else { @@ -2755,7 +2766,7 @@ 10987654321098765432109876543210 x10x00100xxxxxxxxxxxxxxxxxxxxxxx eor. */ - return 994; + return 995; } } else @@ -2766,7 +2777,7 @@ 10987654321098765432109876543210 x01x00100xxxxxxxxxxxxxxxxxxxxxxx orr. */ - return 992; + return 993; } else { @@ -2774,7 +2785,7 @@ 10987654321098765432109876543210 x11x00100xxxxxxxxxxxxxxxxxxxxxxx ands. */ - return 995; + return 996; } } } @@ -2788,7 +2799,7 @@ 10987654321098765432109876543210 x00x00101xxxxxxxxxxxxxxxxxxxxxxx movn. */ - return 1181; + return 1182; } else { @@ -2796,7 +2807,7 @@ 10987654321098765432109876543210 x10x00101xxxxxxxxxxxxxxxxxxxxxxx movz. */ - return 1183; + return 1184; } } else @@ -2805,7 +2816,7 @@ 10987654321098765432109876543210 xx1x00101xxxxxxxxxxxxxxxxxxxxxxx movk. */ - return 1185; + return 1186; } } } @@ -2823,7 +2834,7 @@ 10987654321098765432109876543210 x0001010xx0xxxxxxxxxxxxxxxxxxxxx and. */ - return 997; + return 998; } else { @@ -2831,7 +2842,7 @@ 10987654321098765432109876543210 x1001010xx0xxxxxxxxxxxxxxxxxxxxx eor. */ - return 1004; + return 1005; } } else @@ -2842,7 +2853,7 @@ 10987654321098765432109876543210 x0101010xx0xxxxxxxxxxxxxxxxxxxxx orr. */ - return 999; + return 1000; } else { @@ -2850,7 +2861,7 @@ 10987654321098765432109876543210 x1101010xx0xxxxxxxxxxxxxxxxxxxxx ands. */ - return 1006; + return 1007; } } } @@ -3107,7 +3118,7 @@ 10987654321098765432109876543210 xxx11010x00xxxxxx0xx10xxxxxxxxxx setf8. */ - return 2375; + return 2379; } else { @@ -3115,7 +3126,7 @@ 10987654321098765432109876543210 xxx11010x00xxxxxx1xx10xxxxxxxxxx setf16. */ - return 2376; + return 2380; } } else @@ -3261,7 +3272,7 @@ 10987654321098765432109876543210 xxx11010000xxxxxxxxx01xxxxxxxxxx rmif. */ - return 2374; + return 2378; } else { @@ -3511,7 +3522,7 @@ 10987654321098765432109876543210 x00x1010xx1xxxxxxxxxxxxxxxxxxxxx bic. */ - return 998; + return 999; } else { @@ -3519,7 +3530,7 @@ 10987654321098765432109876543210 x10x1010xx1xxxxxxxxxxxxxxxxxxxxx eon. */ - return 1005; + return 1006; } } else @@ -3530,7 +3541,7 @@ 10987654321098765432109876543210 x01x1010xx1xxxxxxxxxxxxxxxxxxxxx orn. */ - return 1002; + return 1003; } else { @@ -3538,7 +3549,7 @@ 10987654321098765432109876543210 x11x1010xx1xxxxxxxxxxxxxxxxxxxxx bics. */ - return 1008; + return 1009; } } } @@ -3584,7 +3595,7 @@ 10987654321098765432109876543210 xxxx00111xxxxxxxxxxxxxxxxxxxxxxx extr. */ - return 757; + return 758; } } else @@ -3799,7 +3810,7 @@ 10987654321098765432109876543210 000001x0xx000000000xxxxxxxxxxxxx add. */ - return 1275; + return 1280; } else { @@ -3807,7 +3818,7 @@ 10987654321098765432109876543210 000001x0xx010000000xxxxxxxxxxxxx mul. */ - return 1744; + return 1749; } } else @@ -3818,7 +3829,7 @@ 10987654321098765432109876543210 000001x0xx001000000xxxxxxxxxxxxx smax. */ - return 1823; + return 1828; } else { @@ -3826,7 +3837,7 @@ 10987654321098765432109876543210 000001x0xx011000000xxxxxxxxxxxxx orr. */ - return 1755; + return 1760; } } } @@ -3838,7 +3849,7 @@ 10987654321098765432109876543210 000001x0xx0x0100000xxxxxxxxxxxxx sdiv. */ - return 1814; + return 1819; } else { @@ -3846,7 +3857,7 @@ 10987654321098765432109876543210 000001x0xx0x1100000xxxxxxxxxxxxx sabd. */ - return 1805; + return 1810; } } } @@ -3860,7 +3871,7 @@ 10987654321098765432109876543210 000001x0xx0x0010000xxxxxxxxxxxxx smulh. */ - return 1828; + return 1833; } else { @@ -3870,7 +3881,7 @@ 10987654321098765432109876543210 000001x0xx001010000xxxxxxxxxxxxx smin. */ - return 1826; + return 1831; } else { @@ -3878,7 +3889,7 @@ 10987654321098765432109876543210 000001x0xx011010000xxxxxxxxxxxxx and. */ - return 1283; + return 1288; } } } @@ -3888,7 +3899,7 @@ 10987654321098765432109876543210 000001x0xx0xx110000xxxxxxxxxxxxx sdivr. */ - return 1815; + return 1820; } } } @@ -3904,7 +3915,7 @@ 10987654321098765432109876543210 000001x0xx0x0001000xxxxxxxxxxxxx sub. */ - return 1944; + return 1949; } else { @@ -3914,7 +3925,7 @@ 10987654321098765432109876543210 000001x0xx001001000xxxxxxxxxxxxx umax. */ - return 1972; + return 1977; } else { @@ -3922,7 +3933,7 @@ 10987654321098765432109876543210 000001x0xx011001000xxxxxxxxxxxxx eor. */ - return 1370; + return 1375; } } } @@ -3934,7 +3945,7 @@ 10987654321098765432109876543210 000001x0xx0x0101000xxxxxxxxxxxxx udiv. */ - return 1966; + return 1971; } else { @@ -3942,7 +3953,7 @@ 10987654321098765432109876543210 000001x0xx0x1101000xxxxxxxxxxxxx uabd. */ - return 1957; + return 1962; } } } @@ -3958,7 +3969,7 @@ 10987654321098765432109876543210 000001x0xx000011000xxxxxxxxxxxxx subr. */ - return 1946; + return 1951; } else { @@ -3966,7 +3977,7 @@ 10987654321098765432109876543210 000001x0xx010011000xxxxxxxxxxxxx umulh. */ - return 1977; + return 1982; } } else @@ -3977,7 +3988,7 @@ 10987654321098765432109876543210 000001x0xx001011000xxxxxxxxxxxxx umin. */ - return 1975; + return 1980; } else { @@ -3985,7 +3996,7 @@ 10987654321098765432109876543210 000001x0xx011011000xxxxxxxxxxxxx bic. */ - return 1295; + return 1300; } } } @@ -3995,7 +4006,7 @@ 10987654321098765432109876543210 000001x0xx0xx111000xxxxxxxxxxxxx udivr. */ - return 1967; + return 1972; } } } @@ -4008,7 +4019,7 @@ 10987654321098765432109876543210 100001x00x0xxxxx000xxxxxxxxxxxxx ld1sb. */ - return 1557; + return 1562; } else { @@ -4016,7 +4027,7 @@ 10987654321098765432109876543210 100001x01x0xxxxx000xxxxxxxxxxxxx ld1sh. */ - return 1568; + return 1573; } } } @@ -4034,7 +4045,7 @@ 10987654321098765432109876543210 010001x0xx0xxxxx000000xxxxxxxxxx sdot. */ - return 1816; + return 1821; } else { @@ -4042,7 +4053,7 @@ 10987654321098765432109876543210 010001x0xx0xxxxx000010xxxxxxxxxx sqdmlalbt. */ - return 2166; + return 2171; } } else @@ -4053,7 +4064,7 @@ 10987654321098765432109876543210 010001x0xx0xxxxx000001xxxxxxxxxx udot. */ - return 1968; + return 1973; } else { @@ -4061,7 +4072,7 @@ 10987654321098765432109876543210 010001x0xx0xxxxx000011xxxxxxxxxx sqdmlslbt. */ - return 2173; + return 2178; } } } @@ -4071,7 +4082,7 @@ 10987654321098765432109876543210 010001x0xx0xxxxx0001xxxxxxxxxxxx cdot. */ - return 2055; + return 2060; } } else @@ -4082,7 +4093,7 @@ 10987654321098765432109876543210 110001x00x0xxxxx000xxxxxxxxxxxxx ld1sb. */ - return 1561; + return 1566; } else { @@ -4090,7 +4101,7 @@ 10987654321098765432109876543210 110001x01x0xxxxx000xxxxxxxxxxxxx ld1sh. */ - return 1572; + return 1577; } } } @@ -4111,7 +4122,7 @@ 10987654321098765432109876543210 000001x0xx1xxxxx000000xxxxxxxxxx add. */ - return 1273; + return 1278; } else { @@ -4119,7 +4130,7 @@ 10987654321098765432109876543210 000001x0xx1xxxxx000100xxxxxxxxxx sqadd. */ - return 1830; + return 1835; } } else @@ -4128,7 +4139,7 @@ 10987654321098765432109876543210 000001x0xx1xxxxx000x10xxxxxxxxxx sqsub. */ - return 1860; + return 1865; } } else @@ -4141,7 +4152,7 @@ 10987654321098765432109876543210 000001x0xx1xxxxx000001xxxxxxxxxx sub. */ - return 1942; + return 1947; } else { @@ -4149,7 +4160,7 @@ 10987654321098765432109876543210 000001x0xx1xxxxx000101xxxxxxxxxx uqadd. */ - return 1978; + return 1983; } } else @@ -4158,7 +4169,7 @@ 10987654321098765432109876543210 000001x0xx1xxxxx000x11xxxxxxxxxx uqsub. */ - return 2008; + return 2013; } } } @@ -4170,7 +4181,7 @@ 10987654321098765432109876543210 100001x00x1xxxxx000xxxxxxxxxxxxx prfb. */ - return 1763; + return 1768; } else { @@ -4178,7 +4189,7 @@ 10987654321098765432109876543210 100001x01x1xxxxx000xxxxxxxxxxxxx ld1sh. */ - return 1569; + return 1574; } } } @@ -4196,7 +4207,7 @@ 10987654321098765432109876543210 010001x00x1xxxxx000x00xxxxxxxxxx sqrdmlah. */ - return 2191; + return 2196; } else { @@ -4204,7 +4215,7 @@ 10987654321098765432109876543210 010001x00x1xxxxx000x10xxxxxxxxxx mla. */ - return 2098; + return 2103; } } else @@ -4215,7 +4226,7 @@ 10987654321098765432109876543210 010001x00x1xxxxx000x01xxxxxxxxxx sqrdmlsh. */ - return 2195; + return 2200; } else { @@ -4223,7 +4234,7 @@ 10987654321098765432109876543210 010001x00x1xxxxx000x11xxxxxxxxxx mls. */ - return 2101; + return 2106; } } } @@ -4233,7 +4244,7 @@ 10987654321098765432109876543210 110001x00x1xxxxx000xxxxxxxxxxxxx prfb. */ - return 1764; + return 1769; } } else @@ -4252,7 +4263,7 @@ 10987654321098765432109876543210 010001x0101xxxxx000000xxxxxxxxxx sdot. */ - return 1817; + return 1822; } else { @@ -4260,7 +4271,7 @@ 10987654321098765432109876543210 010001x0111xxxxx000000xxxxxxxxxx sdot. */ - return 1818; + return 1823; } } else @@ -4271,7 +4282,7 @@ 10987654321098765432109876543210 010001x0101xxxxx000100xxxxxxxxxx sqrdmlah. */ - return 2192; + return 2197; } else { @@ -4279,7 +4290,7 @@ 10987654321098765432109876543210 010001x0111xxxxx000100xxxxxxxxxx sqrdmlah. */ - return 2193; + return 2198; } } } @@ -4293,7 +4304,7 @@ 10987654321098765432109876543210 010001x0101xxxxx000010xxxxxxxxxx mla. */ - return 2099; + return 2104; } else { @@ -4301,7 +4312,7 @@ 10987654321098765432109876543210 010001x0111xxxxx000010xxxxxxxxxx mla. */ - return 2100; + return 2105; } } else @@ -4310,7 +4321,7 @@ 10987654321098765432109876543210 010001x01x1xxxxx000110xxxxxxxxxx usdot. */ - return 2395; + return 2398; } } } @@ -4326,7 +4337,7 @@ 10987654321098765432109876543210 010001x0101xxxxx000001xxxxxxxxxx udot. */ - return 1969; + return 1974; } else { @@ -4334,7 +4345,7 @@ 10987654321098765432109876543210 010001x0111xxxxx000001xxxxxxxxxx udot. */ - return 1970; + return 1975; } } else @@ -4345,7 +4356,7 @@ 10987654321098765432109876543210 010001x0101xxxxx000101xxxxxxxxxx sqrdmlsh. */ - return 2196; + return 2201; } else { @@ -4353,7 +4364,7 @@ 10987654321098765432109876543210 010001x0111xxxxx000101xxxxxxxxxx sqrdmlsh. */ - return 2197; + return 2202; } } } @@ -4367,7 +4378,7 @@ 10987654321098765432109876543210 010001x0101xxxxx000011xxxxxxxxxx mls. */ - return 2102; + return 2107; } else { @@ -4375,7 +4386,7 @@ 10987654321098765432109876543210 010001x0111xxxxx000011xxxxxxxxxx mls. */ - return 2103; + return 2108; } } else @@ -4384,7 +4395,7 @@ 10987654321098765432109876543210 010001x01x1xxxxx000111xxxxxxxxxx sudot. */ - return 2396; + return 2399; } } } @@ -4395,7 +4406,7 @@ 10987654321098765432109876543210 110001x01x1xxxxx000xxxxxxxxxxxxx ld1sh. */ - return 1573; + return 1578; } } } @@ -4421,7 +4432,7 @@ 10987654321098765432109876543210 0x0001x0xx000000100xxxxxxxxxxxxx asr. */ - return 1291; + return 1296; } else { @@ -4431,7 +4442,7 @@ 10987654321098765432109876543210 000001x0xx010000100xxxxxxxxxxxxx asr. */ - return 1289; + return 1294; } else { @@ -4439,7 +4450,7 @@ 10987654321098765432109876543210 010001x0xx010000100xxxxxxxxxxxxx shadd. */ - return 2132; + return 2137; } } } @@ -4451,7 +4462,7 @@ 10987654321098765432109876543210 0x0001x0xx001000100xxxxxxxxxxxxx sqshl. */ - return 2210; + return 2215; } else { @@ -4461,7 +4472,7 @@ 10987654321098765432109876543210 000001x0xx011000100xxxxxxxxxxxxx asr. */ - return 1290; + return 1295; } else { @@ -4469,7 +4480,7 @@ 10987654321098765432109876543210 010001x0xx011000100xxxxxxxxxxxxx sqadd. */ - return 2161; + return 2166; } } } @@ -4484,7 +4495,7 @@ 10987654321098765432109876543210 0x0001x0xx000100100xxxxxxxxxxxxx asrd. */ - return 1292; + return 1297; } else { @@ -4494,7 +4505,7 @@ 10987654321098765432109876543210 000001x0xx010100100xxxxxxxxxxxxx asrr. */ - return 1293; + return 1298; } else { @@ -4502,7 +4513,7 @@ 10987654321098765432109876543210 010001x0xx010100100xxxxxxxxxxxxx srhadd. */ - return 2223; + return 2228; } } } @@ -4516,7 +4527,7 @@ 10987654321098765432109876543210 000001x0xx001100100xxxxxxxxxxxxx srshr. */ - return 2227; + return 2232; } else { @@ -4524,7 +4535,7 @@ 10987654321098765432109876543210 010001x0xx001100100xxxxxxxxxxxxx sqshlr. */ - return 2211; + return 2216; } } else @@ -4533,7 +4544,7 @@ 10987654321098765432109876543210 0x0001x0xx011100100xxxxxxxxxxxxx suqadd. */ - return 2247; + return 2252; } } } @@ -4550,7 +4561,7 @@ 10987654321098765432109876543210 0x0001x0xx000010100xxxxxxxxxxxxx srshl. */ - return 2225; + return 2230; } else { @@ -4558,7 +4569,7 @@ 10987654321098765432109876543210 0x0001x0xx010010100xxxxxxxxxxxxx shsub. */ - return 2135; + return 2140; } } else @@ -4569,7 +4580,7 @@ 10987654321098765432109876543210 0x0001x0xx001010100xxxxxxxxxxxxx sqrshl. */ - return 2203; + return 2208; } else { @@ -4577,7 +4588,7 @@ 10987654321098765432109876543210 0x0001x0xx011010100xxxxxxxxxxxxx sqsub. */ - return 2217; + return 2222; } } } @@ -4593,7 +4604,7 @@ 10987654321098765432109876543210 000001x0xx000110100xxxxxxxxxxxxx sqshl. */ - return 2209; + return 2214; } else { @@ -4601,7 +4612,7 @@ 10987654321098765432109876543210 010001x0xx000110100xxxxxxxxxxxxx srshlr. */ - return 2226; + return 2231; } } else @@ -4610,7 +4621,7 @@ 10987654321098765432109876543210 0x0001x0xx010110100xxxxxxxxxxxxx shsubr. */ - return 2136; + return 2141; } } else @@ -4621,7 +4632,7 @@ 10987654321098765432109876543210 0x0001x0xx001110100xxxxxxxxxxxxx sqrshlr. */ - return 2204; + return 2209; } else { @@ -4629,7 +4640,7 @@ 10987654321098765432109876543210 0x0001x0xx011110100xxxxxxxxxxxxx sqsubr. */ - return 2218; + return 2223; } } } @@ -4649,7 +4660,7 @@ 10987654321098765432109876543210 0x0001x0xx000001100xxxxxxxxxxxxx lsr. */ - return 1735; + return 1740; } else { @@ -4659,7 +4670,7 @@ 10987654321098765432109876543210 000001x0xx010001100xxxxxxxxxxxxx lsr. */ - return 1733; + return 1738; } else { @@ -4667,7 +4678,7 @@ 10987654321098765432109876543210 010001x0xx010001100xxxxxxxxxxxxx uhadd. */ - return 2260; + return 2265; } } } @@ -4679,7 +4690,7 @@ 10987654321098765432109876543210 0x0001x0xx001001100xxxxxxxxxxxxx uqshl. */ - return 2290; + return 2295; } else { @@ -4689,7 +4700,7 @@ 10987654321098765432109876543210 000001x0xx011001100xxxxxxxxxxxxx lsr. */ - return 1734; + return 1739; } else { @@ -4697,7 +4708,7 @@ 10987654321098765432109876543210 010001x0xx011001100xxxxxxxxxxxxx uqadd. */ - return 2284; + return 2289; } } } @@ -4712,7 +4723,7 @@ 10987654321098765432109876543210 000001x0xx0x0101100xxxxxxxxxxxxx lsrr. */ - return 1736; + return 1741; } else { @@ -4720,7 +4731,7 @@ 10987654321098765432109876543210 010001x0xx0x0101100xxxxxxxxxxxxx urhadd. */ - return 2299; + return 2304; } } else @@ -4733,7 +4744,7 @@ 10987654321098765432109876543210 000001x0xx001101100xxxxxxxxxxxxx urshr. */ - return 2302; + return 2307; } else { @@ -4741,7 +4752,7 @@ 10987654321098765432109876543210 010001x0xx001101100xxxxxxxxxxxxx uqshlr. */ - return 2291; + return 2296; } } else @@ -4750,7 +4761,7 @@ 10987654321098765432109876543210 0x0001x0xx011101100xxxxxxxxxxxxx usqadd. */ - return 2307; + return 2312; } } } @@ -4769,7 +4780,7 @@ 10987654321098765432109876543210 000001x0xx000011100xxxxxxxxxxxxx lsl. */ - return 1729; + return 1734; } else { @@ -4777,7 +4788,7 @@ 10987654321098765432109876543210 010001x0xx000011100xxxxxxxxxxxxx urshl. */ - return 2300; + return 2305; } } else @@ -4788,7 +4799,7 @@ 10987654321098765432109876543210 000001x0xx010011100xxxxxxxxxxxxx lsl. */ - return 1727; + return 1732; } else { @@ -4796,7 +4807,7 @@ 10987654321098765432109876543210 010001x0xx010011100xxxxxxxxxxxxx uhsub. */ - return 2261; + return 2266; } } } @@ -4808,7 +4819,7 @@ 10987654321098765432109876543210 0x0001x0xx001011100xxxxxxxxxxxxx uqrshl. */ - return 2285; + return 2290; } else { @@ -4818,7 +4829,7 @@ 10987654321098765432109876543210 000001x0xx011011100xxxxxxxxxxxxx lsl. */ - return 1728; + return 1733; } else { @@ -4826,7 +4837,7 @@ 10987654321098765432109876543210 010001x0xx011011100xxxxxxxxxxxxx uqsub. */ - return 2294; + return 2299; } } } @@ -4843,7 +4854,7 @@ 10987654321098765432109876543210 000001x0xx000111100xxxxxxxxxxxxx uqshl. */ - return 2289; + return 2294; } else { @@ -4851,7 +4862,7 @@ 10987654321098765432109876543210 010001x0xx000111100xxxxxxxxxxxxx urshlr. */ - return 2301; + return 2306; } } else @@ -4862,7 +4873,7 @@ 10987654321098765432109876543210 000001x0xx010111100xxxxxxxxxxxxx lslr. */ - return 1730; + return 1735; } else { @@ -4870,7 +4881,7 @@ 10987654321098765432109876543210 010001x0xx010111100xxxxxxxxxxxxx uhsubr. */ - return 2262; + return 2267; } } } @@ -4884,7 +4895,7 @@ 10987654321098765432109876543210 000001x0xx001111100xxxxxxxxxxxxx sqshlu. */ - return 2212; + return 2217; } else { @@ -4892,7 +4903,7 @@ 10987654321098765432109876543210 010001x0xx001111100xxxxxxxxxxxxx uqrshlr. */ - return 2286; + return 2291; } } else @@ -4901,7 +4912,7 @@ 10987654321098765432109876543210 0x0001x0xx011111100xxxxxxxxxxxxx uqsubr. */ - return 2295; + return 2300; } } } @@ -4920,7 +4931,7 @@ 10987654321098765432109876543210 000001x0xx1xxxxx1000x0xxxxxxxxxx asr. */ - return 1287; + return 1292; } else { @@ -4930,7 +4941,7 @@ 10987654321098765432109876543210 010001x0x01xxxxx1000x0xxxxxxxxxx smlalb. */ - return 2140; + return 2145; } else { @@ -4938,7 +4949,7 @@ 10987654321098765432109876543210 010001x0x11xxxxx1000x0xxxxxxxxxx smlalb. */ - return 2141; + return 2146; } } } @@ -4950,7 +4961,7 @@ 10987654321098765432109876543210 000001x0xx1xxxxx1001x0xxxxxxxxxx asr. */ - return 1288; + return 1293; } else { @@ -4960,7 +4971,7 @@ 10987654321098765432109876543210 010001x0x01xxxxx1001x0xxxxxxxxxx umlalb. */ - return 2265; + return 2270; } else { @@ -4968,7 +4979,7 @@ 10987654321098765432109876543210 010001x0x11xxxxx1001x0xxxxxxxxxx umlalb. */ - return 2266; + return 2271; } } } @@ -4985,7 +4996,7 @@ 10987654321098765432109876543210 000001x0xx1xxxxx100001xxxxxxxxxx lsr. */ - return 1731; + return 1736; } else { @@ -4993,7 +5004,7 @@ 10987654321098765432109876543210 000001x0xx1xxxxx100011xxxxxxxxxx lsl. */ - return 1725; + return 1730; } } else @@ -5004,7 +5015,7 @@ 10987654321098765432109876543210 010001x0x01xxxxx1000x1xxxxxxxxxx smlalt. */ - return 2143; + return 2148; } else { @@ -5012,7 +5023,7 @@ 10987654321098765432109876543210 010001x0x11xxxxx1000x1xxxxxxxxxx smlalt. */ - return 2144; + return 2149; } } } @@ -5026,7 +5037,7 @@ 10987654321098765432109876543210 000001x0xx1xxxxx100101xxxxxxxxxx lsr. */ - return 1732; + return 1737; } else { @@ -5034,7 +5045,7 @@ 10987654321098765432109876543210 000001x0xx1xxxxx100111xxxxxxxxxx lsl. */ - return 1726; + return 1731; } } else @@ -5045,7 +5056,7 @@ 10987654321098765432109876543210 010001x0x01xxxxx1001x1xxxxxxxxxx umlalt. */ - return 2268; + return 2273; } else { @@ -5053,7 +5064,7 @@ 10987654321098765432109876543210 010001x0x11xxxxx1001x1xxxxxxxxxx umlalt. */ - return 2269; + return 2274; } } } @@ -5072,7 +5083,7 @@ 10987654321098765432109876543210 1x0001x0000xxxxx100xxxxxxxxxxxxx ldnt1sb. */ - return 2092; + return 2097; } else { @@ -5080,7 +5091,7 @@ 10987654321098765432109876543210 1x0001x0100xxxxx100xxxxxxxxxxxxx ldnt1sh. */ - return 2093; + return 2098; } } else @@ -5093,7 +5104,7 @@ 10987654321098765432109876543210 100001x0001xxxxx100xxxxxxxxxxxxx ld1sb. */ - return 1563; + return 1568; } else { @@ -5101,7 +5112,7 @@ 10987654321098765432109876543210 110001x0001xxxxx100xxxxxxxxxxxxx ld1sb. */ - return 1567; + return 1572; } } else @@ -5112,7 +5123,7 @@ 10987654321098765432109876543210 100001x0101xxxxx100xxxxxxxxxxxxx ld1sh. */ - return 1576; + return 1581; } else { @@ -5120,7 +5131,7 @@ 10987654321098765432109876543210 110001x0101xxxxx100xxxxxxxxxxxxx ld1sh. */ - return 1579; + return 1584; } } } @@ -5135,7 +5146,7 @@ 10987654321098765432109876543210 100001x001xxxxxx100xxxxxxxxxxxxx ld1rb. */ - return 1533; + return 1538; } else { @@ -5145,7 +5156,7 @@ 10987654321098765432109876543210 110001x0010xxxxx100xxxxxxxxxxxxx ld1sb. */ - return 1562; + return 1567; } else { @@ -5153,7 +5164,7 @@ 10987654321098765432109876543210 110001x0011xxxxx100xxxxxxxxxxxxx prfb. */ - return 1765; + return 1770; } } } @@ -5165,7 +5176,7 @@ 10987654321098765432109876543210 100001x011xxxxxx100xxxxxxxxxxxxx ld1rsw. */ - return 1554; + return 1559; } else { @@ -5175,7 +5186,7 @@ 10987654321098765432109876543210 110001x0110xxxxx100xxxxxxxxxxxxx ld1sh. */ - return 1574; + return 1579; } else { @@ -5183,7 +5194,7 @@ 10987654321098765432109876543210 110001x0111xxxxx100xxxxxxxxxxxxx ld1sh. */ - return 1575; + return 1580; } } } @@ -5205,7 +5216,7 @@ 10987654321098765432109876543210 000001x0xx0xxxxx010xxxxxxxxxxxxx mla. */ - return 1738; + return 1743; } else { @@ -5215,7 +5226,7 @@ 10987654321098765432109876543210 100001x00x0xxxxx010xxxxxxxxxxxxx ld1b. */ - return 1499; + return 1504; } else { @@ -5223,7 +5234,7 @@ 10987654321098765432109876543210 100001x01x0xxxxx010xxxxxxxxxxxxx ld1h. */ - return 1519; + return 1524; } } } @@ -5241,7 +5252,7 @@ 10987654321098765432109876543210 010001x0xx0xxxxx010000xxxxxxxxxx smlalb. */ - return 2142; + return 2147; } else { @@ -5249,7 +5260,7 @@ 10987654321098765432109876543210 010001x0xx0xxxxx010100xxxxxxxxxx smlslb. */ - return 2148; + return 2153; } } else @@ -5260,7 +5271,7 @@ 10987654321098765432109876543210 010001x0xx0xxxxx010010xxxxxxxxxx umlalb. */ - return 2267; + return 2272; } else { @@ -5268,7 +5279,7 @@ 10987654321098765432109876543210 010001x0xx0xxxxx010110xxxxxxxxxx umlslb. */ - return 2273; + return 2278; } } } @@ -5282,7 +5293,7 @@ 10987654321098765432109876543210 010001x0xx0xxxxx010001xxxxxxxxxx smlalt. */ - return 2145; + return 2150; } else { @@ -5290,7 +5301,7 @@ 10987654321098765432109876543210 010001x0xx0xxxxx010101xxxxxxxxxx smlslt. */ - return 2151; + return 2156; } } else @@ -5301,7 +5312,7 @@ 10987654321098765432109876543210 010001x0xx0xxxxx010011xxxxxxxxxx umlalt. */ - return 2270; + return 2275; } else { @@ -5309,7 +5320,7 @@ 10987654321098765432109876543210 010001x0xx0xxxxx010111xxxxxxxxxx umlslt. */ - return 2276; + return 2281; } } } @@ -5322,7 +5333,7 @@ 10987654321098765432109876543210 110001x00x0xxxxx010xxxxxxxxxxxxx ld1b. */ - return 1504; + return 1509; } else { @@ -5330,7 +5341,7 @@ 10987654321098765432109876543210 110001x01x0xxxxx010xxxxxxxxxxxxx ld1h. */ - return 1524; + return 1529; } } } @@ -5351,7 +5362,7 @@ 10987654321098765432109876543210 000001x0xx1xxxxx010000xxxxxxxxxx index. */ - return 1490; + return 1495; } else { @@ -5359,7 +5370,7 @@ 10987654321098765432109876543210 000001x0xx1xxxxx010001xxxxxxxxxx index. */ - return 1491; + return 1496; } } else @@ -5372,7 +5383,7 @@ 10987654321098765432109876543210 000001x0001xxxxx01010xxxxxxxxxxx addvl. */ - return 1277; + return 1282; } else { @@ -5380,7 +5391,7 @@ 10987654321098765432109876543210 000001x0101xxxxx01010xxxxxxxxxxx rdvl. */ - return 1799; + return 1804; } } else @@ -5389,7 +5400,7 @@ 10987654321098765432109876543210 000001x0x11xxxxx01010xxxxxxxxxxx addpl. */ - return 1276; + return 1281; } } } @@ -5401,7 +5412,7 @@ 10987654321098765432109876543210 000001x0xx1xxxxx010x10xxxxxxxxxx index. */ - return 1492; + return 1497; } else { @@ -5409,7 +5420,7 @@ 10987654321098765432109876543210 000001x0xx1xxxxx010x11xxxxxxxxxx index. */ - return 1489; + return 1494; } } } @@ -5421,7 +5432,7 @@ 10987654321098765432109876543210 100001x00x1xxxxx010xxxxxxxxxxxxx prfw. */ - return 1783; + return 1788; } else { @@ -5429,7 +5440,7 @@ 10987654321098765432109876543210 100001x01x1xxxxx010xxxxxxxxxxxxx ld1h. */ - return 1520; + return 1525; } } } @@ -5441,7 +5452,7 @@ 10987654321098765432109876543210 x10001x00x1xxxxx010xxxxxxxxxxxxx prfw. */ - return 1785; + return 1790; } else { @@ -5453,7 +5464,7 @@ 10987654321098765432109876543210 010001x0101xxxxx010xxxxxxxxxxxxx cdot. */ - return 2057; + return 2062; } else { @@ -5461,7 +5472,7 @@ 10987654321098765432109876543210 010001x0111xxxxx010xxxxxxxxxxxxx cdot. */ - return 2056; + return 2061; } } else @@ -5470,7 +5481,7 @@ 10987654321098765432109876543210 110001x01x1xxxxx010xxxxxxxxxxxxx ld1h. */ - return 1525; + return 1530; } } } @@ -5488,7 +5499,7 @@ 10987654321098765432109876543210 000001x0xx0xxxxx110xxxxxxxxxxxxx mad. */ - return 1737; + return 1742; } else { @@ -5504,7 +5515,7 @@ 10987654321098765432109876543210 000001x0x010xxxx110x00xxxxxxxxxx sqincw. */ - return 1857; + return 1862; } else { @@ -5514,7 +5525,7 @@ 10987654321098765432109876543210 000001x00110xxxx110x00xxxxxxxxxx sqinch. */ - return 1851; + return 1856; } else { @@ -5522,7 +5533,7 @@ 10987654321098765432109876543210 000001x01110xxxx110x00xxxxxxxxxx sqincd. */ - return 1848; + return 1853; } } } @@ -5534,7 +5545,7 @@ 10987654321098765432109876543210 000001x0x011xxxx110x00xxxxxxxxxx incw. */ - return 1487; + return 1492; } else { @@ -5544,7 +5555,7 @@ 10987654321098765432109876543210 000001x00111xxxx110x00xxxxxxxxxx inch. */ - return 1483; + return 1488; } else { @@ -5552,7 +5563,7 @@ 10987654321098765432109876543210 000001x01111xxxx110x00xxxxxxxxxx incd. */ - return 1481; + return 1486; } } } @@ -5565,7 +5576,7 @@ 10987654321098765432109876543210 000001x0x01xxxxx110x10xxxxxxxxxx sqdecw. */ - return 1843; + return 1848; } else { @@ -5575,7 +5586,7 @@ 10987654321098765432109876543210 000001x0011xxxxx110x10xxxxxxxxxx sqdech. */ - return 1837; + return 1842; } else { @@ -5583,7 +5594,7 @@ 10987654321098765432109876543210 000001x0111xxxxx110x10xxxxxxxxxx sqdecd. */ - return 1834; + return 1839; } } } @@ -5600,7 +5611,7 @@ 10987654321098765432109876543210 000001x0x010xxxx110x01xxxxxxxxxx uqincw. */ - return 2005; + return 2010; } else { @@ -5610,7 +5621,7 @@ 10987654321098765432109876543210 000001x00110xxxx110x01xxxxxxxxxx uqinch. */ - return 1999; + return 2004; } else { @@ -5618,7 +5629,7 @@ 10987654321098765432109876543210 000001x01110xxxx110x01xxxxxxxxxx uqincd. */ - return 1996; + return 2001; } } } @@ -5630,7 +5641,7 @@ 10987654321098765432109876543210 000001x0x011xxxx110x01xxxxxxxxxx decw. */ - return 1362; + return 1367; } else { @@ -5640,7 +5651,7 @@ 10987654321098765432109876543210 000001x00111xxxx110x01xxxxxxxxxx dech. */ - return 1358; + return 1363; } else { @@ -5648,7 +5659,7 @@ 10987654321098765432109876543210 000001x01111xxxx110x01xxxxxxxxxx decd. */ - return 1356; + return 1361; } } } @@ -5661,7 +5672,7 @@ 10987654321098765432109876543210 000001x0x01xxxxx110x11xxxxxxxxxx uqdecw. */ - return 1991; + return 1996; } else { @@ -5671,7 +5682,7 @@ 10987654321098765432109876543210 000001x0011xxxxx110x11xxxxxxxxxx uqdech. */ - return 1985; + return 1990; } else { @@ -5679,7 +5690,7 @@ 10987654321098765432109876543210 000001x0111xxxxx110x11xxxxxxxxxx uqdecd. */ - return 1982; + return 1987; } } } @@ -5698,7 +5709,7 @@ 10987654321098765432109876543210 100001x0000xxxxx110xxxxxxxxxxxxx prfb. */ - return 1762; + return 1767; } else { @@ -5706,7 +5717,7 @@ 10987654321098765432109876543210 100001x0100xxxxx110xxxxxxxxxxxxx prfh. */ - return 1777; + return 1782; } } else @@ -5717,7 +5728,7 @@ 10987654321098765432109876543210 100001x0001xxxxx110xxxxxxxxxxxxx ld1b. */ - return 1506; + return 1511; } else { @@ -5725,7 +5736,7 @@ 10987654321098765432109876543210 100001x0101xxxxx110xxxxxxxxxxxxx ld1h. */ - return 1528; + return 1533; } } } @@ -5737,7 +5748,7 @@ 10987654321098765432109876543210 100001x001xxxxxx110xxxxxxxxxxxxx ld1rb. */ - return 1535; + return 1540; } else { @@ -5745,7 +5756,7 @@ 10987654321098765432109876543210 100001x011xxxxxx110xxxxxxxxxxxxx ld1rh. */ - return 1539; + return 1544; } } } @@ -5762,7 +5773,7 @@ 10987654321098765432109876543210 x10001x0000xxxxx110xxxxxxxxxxxxx ldnt1b. */ - return 2088; + return 2093; } else { @@ -5770,7 +5781,7 @@ 10987654321098765432109876543210 x10001x0100xxxxx110xxxxxxxxxxxxx ldnt1h. */ - return 2091; + return 2096; } } else @@ -5781,7 +5792,7 @@ 10987654321098765432109876543210 x10001x0010xxxxx110xxxxxxxxxxxxx ld1b. */ - return 1505; + return 1510; } else { @@ -5789,7 +5800,7 @@ 10987654321098765432109876543210 x10001x0110xxxxx110xxxxxxxxxxxxx ld1h. */ - return 1526; + return 1531; } } } @@ -5803,7 +5814,7 @@ 10987654321098765432109876543210 x10001x0001xxxxx110xxxxxxxxxxxxx ld1b. */ - return 1511; + return 1516; } else { @@ -5817,7 +5828,7 @@ 10987654321098765432109876543210 010001x0101xxxxx1100x0xxxxxxxxxx smullb. */ - return 2153; + return 2158; } else { @@ -5825,7 +5836,7 @@ 10987654321098765432109876543210 010001x0101xxxxx1101x0xxxxxxxxxx umullb. */ - return 2278; + return 2283; } } else @@ -5836,7 +5847,7 @@ 10987654321098765432109876543210 010001x0101xxxxx1100x1xxxxxxxxxx smullt. */ - return 2156; + return 2161; } else { @@ -5844,7 +5855,7 @@ 10987654321098765432109876543210 010001x0101xxxxx1101x1xxxxxxxxxx umullt. */ - return 2281; + return 2286; } } } @@ -5854,7 +5865,7 @@ 10987654321098765432109876543210 110001x0101xxxxx110xxxxxxxxxxxxx ld1h. */ - return 1532; + return 1537; } } } @@ -5866,7 +5877,7 @@ 10987654321098765432109876543210 x10001x0011xxxxx110xxxxxxxxxxxxx prfw. */ - return 1786; + return 1791; } else { @@ -5880,7 +5891,7 @@ 10987654321098765432109876543210 010001x0111xxxxx1100x0xxxxxxxxxx smullb. */ - return 2154; + return 2159; } else { @@ -5888,7 +5899,7 @@ 10987654321098765432109876543210 010001x0111xxxxx1101x0xxxxxxxxxx umullb. */ - return 2279; + return 2284; } } else @@ -5899,7 +5910,7 @@ 10987654321098765432109876543210 010001x0111xxxxx1100x1xxxxxxxxxx smullt. */ - return 2157; + return 2162; } else { @@ -5907,7 +5918,7 @@ 10987654321098765432109876543210 010001x0111xxxxx1101x1xxxxxxxxxx umullt. */ - return 2282; + return 2287; } } } @@ -5917,7 +5928,7 @@ 10987654321098765432109876543210 110001x0111xxxxx110xxxxxxxxxxxxx ld1h. */ - return 1527; + return 1532; } } } @@ -5950,7 +5961,7 @@ 10987654321098765432109876543210 000001x0xx000x00001xxxxxxxxxxxxx saddv. */ - return 1806; + return 1811; } else { @@ -5958,7 +5969,7 @@ 10987654321098765432109876543210 000001x0xx000x01001xxxxxxxxxxxxx uaddv. */ - return 1958; + return 1963; } } else @@ -5967,7 +5978,7 @@ 10987654321098765432109876543210 000001x0xx010x0x001xxxxxxxxxxxxx movprfx. */ - return 1741; + return 1746; } } else @@ -5980,7 +5991,7 @@ 10987654321098765432109876543210 000001x0xx001x00001xxxxxxxxxxxxx smaxv. */ - return 1824; + return 1829; } else { @@ -5988,7 +5999,7 @@ 10987654321098765432109876543210 000001x0xx011x00001xxxxxxxxxxxxx orv. */ - return 1758; + return 1763; } } else @@ -5999,7 +6010,7 @@ 10987654321098765432109876543210 000001x0xx001x01001xxxxxxxxxxxxx umaxv. */ - return 1973; + return 1978; } else { @@ -6007,7 +6018,7 @@ 10987654321098765432109876543210 000001x0xx011x01001xxxxxxxxxxxxx eorv. */ - return 1373; + return 1378; } } } @@ -6022,7 +6033,7 @@ 10987654321098765432109876543210 000001x0xx00xx10001xxxxxxxxxxxxx sminv. */ - return 1827; + return 1832; } else { @@ -6030,7 +6041,7 @@ 10987654321098765432109876543210 000001x0xx01xx10001xxxxxxxxxxxxx andv. */ - return 1286; + return 1291; } } else @@ -6039,7 +6050,7 @@ 10987654321098765432109876543210 000001x0xx0xxx11001xxxxxxxxxxxxx uminv. */ - return 1976; + return 1981; } } } @@ -6051,7 +6062,7 @@ 10987654321098765432109876543210 100001x00x0xxxxx001xxxxxxxxxxxxx ldff1sb. */ - return 1657; + return 1662; } else { @@ -6059,7 +6070,7 @@ 10987654321098765432109876543210 100001x01x0xxxxx001xxxxxxxxxxxxx ldff1sh. */ - return 1668; + return 1673; } } } @@ -6073,7 +6084,7 @@ 10987654321098765432109876543210 010001x0xx0xxxxx0010xxxxxxxxxxxx cmla. */ - return 2058; + return 2063; } else { @@ -6081,7 +6092,7 @@ 10987654321098765432109876543210 010001x0xx0xxxxx0011xxxxxxxxxxxx sqrdcmlah. */ - return 2190; + return 2195; } } else @@ -6092,7 +6103,7 @@ 10987654321098765432109876543210 110001x00x0xxxxx001xxxxxxxxxxxxx ldff1sb. */ - return 1664; + return 1669; } else { @@ -6100,7 +6111,7 @@ 10987654321098765432109876543210 110001x01x0xxxxx001xxxxxxxxxxxxx ldff1sh. */ - return 1674; + return 1679; } } } @@ -6123,7 +6134,7 @@ 10987654321098765432109876543210 000001x0001xxxxx001x00xxxxxxxxxx and. */ - return 1281; + return 1286; } else { @@ -6131,7 +6142,7 @@ 10987654321098765432109876543210 000001x0101xxxxx001x00xxxxxxxxxx eor. */ - return 1368; + return 1373; } } else @@ -6142,7 +6153,7 @@ 10987654321098765432109876543210 000001x0011xxxxx001x00xxxxxxxxxx orr. */ - return 1753; + return 1758; } else { @@ -6150,7 +6161,7 @@ 10987654321098765432109876543210 000001x0111xxxxx001x00xxxxxxxxxx bic. */ - return 1294; + return 1299; } } } @@ -6162,7 +6173,7 @@ 10987654321098765432109876543210 000001x0x01xxxxx001x10xxxxxxxxxx eor3. */ - return 2061; + return 2066; } else { @@ -6170,7 +6181,7 @@ 10987654321098765432109876543210 000001x0x11xxxxx001x10xxxxxxxxxx bcax. */ - return 2050; + return 2055; } } } @@ -6182,7 +6193,7 @@ 10987654321098765432109876543210 000001x0xx1xxxxx001x01xxxxxxxxxx xar. */ - return 2323; + return 2328; } else { @@ -6194,7 +6205,7 @@ 10987654321098765432109876543210 000001x0001xxxxx001x11xxxxxxxxxx bsl. */ - return 2051; + return 2056; } else { @@ -6202,7 +6213,7 @@ 10987654321098765432109876543210 000001x0101xxxxx001x11xxxxxxxxxx bsl2n. */ - return 2053; + return 2058; } } else @@ -6213,7 +6224,7 @@ 10987654321098765432109876543210 000001x0011xxxxx001x11xxxxxxxxxx bsl1n. */ - return 2052; + return 2057; } else { @@ -6221,7 +6232,7 @@ 10987654321098765432109876543210 000001x0111xxxxx001x11xxxxxxxxxx nbsl. */ - return 2108; + return 2113; } } } @@ -6235,7 +6246,7 @@ 10987654321098765432109876543210 100001x00x1xxxxx001xxxxxxxxxxxxx prfh. */ - return 1776; + return 1781; } else { @@ -6243,7 +6254,7 @@ 10987654321098765432109876543210 100001x01x1xxxxx001xxxxxxxxxxxxx ldff1sh. */ - return 1669; + return 1674; } } } @@ -6255,7 +6266,7 @@ 10987654321098765432109876543210 x10001x00x1xxxxx001xxxxxxxxxxxxx prfh. */ - return 1778; + return 1783; } else { @@ -6271,7 +6282,7 @@ 10987654321098765432109876543210 010001x0101xxxxx0010x0xxxxxxxxxx sqdmlalb. */ - return 2163; + return 2168; } else { @@ -6279,7 +6290,7 @@ 10987654321098765432109876543210 010001x0111xxxxx0010x0xxxxxxxxxx sqdmlalb. */ - return 2164; + return 2169; } } else @@ -6290,7 +6301,7 @@ 10987654321098765432109876543210 010001x0101xxxxx0011x0xxxxxxxxxx sqdmlslb. */ - return 2170; + return 2175; } else { @@ -6298,7 +6309,7 @@ 10987654321098765432109876543210 010001x0111xxxxx0011x0xxxxxxxxxx sqdmlslb. */ - return 2171; + return 2176; } } } @@ -6312,7 +6323,7 @@ 10987654321098765432109876543210 010001x0101xxxxx0010x1xxxxxxxxxx sqdmlalt. */ - return 2167; + return 2172; } else { @@ -6320,7 +6331,7 @@ 10987654321098765432109876543210 010001x0111xxxxx0010x1xxxxxxxxxx sqdmlalt. */ - return 2168; + return 2173; } } else @@ -6331,7 +6342,7 @@ 10987654321098765432109876543210 010001x0101xxxxx0011x1xxxxxxxxxx sqdmlslt. */ - return 2174; + return 2179; } else { @@ -6339,7 +6350,7 @@ 10987654321098765432109876543210 010001x0111xxxxx0011x1xxxxxxxxxx sqdmlslt. */ - return 2175; + return 2180; } } } @@ -6350,7 +6361,7 @@ 10987654321098765432109876543210 110001x01x1xxxxx001xxxxxxxxxxxxx ldff1sh. */ - return 1675; + return 1680; } } } @@ -6376,7 +6387,7 @@ 10987654321098765432109876543210 000001x0xx0x0000101xxxxxxxxxxxxx sxtb. */ - return 1949; + return 1954; } else { @@ -6384,7 +6395,7 @@ 10987654321098765432109876543210 000001x0xx0x1000101xxxxxxxxxxxxx cls. */ - return 1314; + return 1319; } } else @@ -6395,7 +6406,7 @@ 10987654321098765432109876543210 000001x0xx0x0100101xxxxxxxxxxxxx sxtw. */ - return 1951; + return 1956; } else { @@ -6403,7 +6414,7 @@ 10987654321098765432109876543210 000001x0xx0x1100101xxxxxxxxxxxxx fabs. */ - return 1376; + return 1381; } } } @@ -6417,7 +6428,7 @@ 10987654321098765432109876543210 000001x0xx0x0010101xxxxxxxxxxxxx sxth. */ - return 1950; + return 1955; } else { @@ -6425,7 +6436,7 @@ 10987654321098765432109876543210 000001x0xx0x1010101xxxxxxxxxxxxx cnt. */ - return 1343; + return 1348; } } else @@ -6436,7 +6447,7 @@ 10987654321098765432109876543210 000001x0xx0x0110101xxxxxxxxxxxxx abs. */ - return 1272; + return 1277; } else { @@ -6444,7 +6455,7 @@ 10987654321098765432109876543210 000001x0xx0x1110101xxxxxxxxxxxxx not. */ - return 1750; + return 1755; } } } @@ -6461,7 +6472,7 @@ 10987654321098765432109876543210 000001x0xx0x0001101xxxxxxxxxxxxx uxtb. */ - return 2012; + return 2017; } else { @@ -6469,7 +6480,7 @@ 10987654321098765432109876543210 000001x0xx0x1001101xxxxxxxxxxxxx clz. */ - return 1315; + return 1320; } } else @@ -6480,7 +6491,7 @@ 10987654321098765432109876543210 000001x0xx0x0101101xxxxxxxxxxxxx uxtw. */ - return 2014; + return 2019; } else { @@ -6488,7 +6499,7 @@ 10987654321098765432109876543210 000001x0xx0x1101101xxxxxxxxxxxxx fneg. */ - return 1453; + return 1458; } } } @@ -6502,7 +6513,7 @@ 10987654321098765432109876543210 000001x0xx0x0011101xxxxxxxxxxxxx uxth. */ - return 2013; + return 2018; } else { @@ -6510,7 +6521,7 @@ 10987654321098765432109876543210 000001x0xx0x1011101xxxxxxxxxxxxx cnot. */ - return 1342; + return 1347; } } else @@ -6519,7 +6530,7 @@ 10987654321098765432109876543210 000001x0xx0xx111101xxxxxxxxxxxxx neg. */ - return 1747; + return 1752; } } } @@ -6536,7 +6547,7 @@ 10987654321098765432109876543210 000001x0001xxxxx1010xxxxxxxxxxxx adr. */ - return 1278; + return 1283; } else { @@ -6544,7 +6555,7 @@ 10987654321098765432109876543210 000001x0011xxxxx1010xxxxxxxxxxxx adr. */ - return 1279; + return 1284; } } else @@ -6553,7 +6564,7 @@ 10987654321098765432109876543210 000001x01x1xxxxx1010xxxxxxxxxxxx adr. */ - return 1280; + return 1285; } } else @@ -6566,7 +6577,7 @@ 10987654321098765432109876543210 000001x0xx1xxxxx101100xxxxxxxxxx ftssel. */ - return 1479; + return 1484; } else { @@ -6574,7 +6585,7 @@ 10987654321098765432109876543210 000001x0xx1xxxxx101110xxxxxxxxxx fexpa. */ - return 1423; + return 1428; } } else @@ -6583,7 +6594,7 @@ 10987654321098765432109876543210 000001x0xx1xxxxx1011x1xxxxxxxxxx movprfx. */ - return 1740; + return 1745; } } } @@ -6600,7 +6611,7 @@ 10987654321098765432109876543210 100001x0000xxxxx101xxxxxxxxxxxxx ldnt1b. */ - return 2087; + return 2092; } else { @@ -6608,7 +6619,7 @@ 10987654321098765432109876543210 100001x0100xxxxx101xxxxxxxxxxxxx ldnt1h. */ - return 2090; + return 2095; } } else @@ -6619,7 +6630,7 @@ 10987654321098765432109876543210 100001x0001xxxxx101xxxxxxxxxxxxx ldff1sb. */ - return 1666; + return 1671; } else { @@ -6627,7 +6638,7 @@ 10987654321098765432109876543210 100001x0101xxxxx101xxxxxxxxxxxxx ldff1sh. */ - return 1678; + return 1683; } } } @@ -6639,7 +6650,7 @@ 10987654321098765432109876543210 100001x001xxxxxx101xxxxxxxxxxxxx ld1rb. */ - return 1534; + return 1539; } else { @@ -6647,7 +6658,7 @@ 10987654321098765432109876543210 100001x011xxxxxx101xxxxxxxxxxxxx ld1rh. */ - return 1538; + return 1543; } } } @@ -6670,7 +6681,7 @@ 10987654321098765432109876543210 010001x0xx0x0000101xxxxxxxxxxxxx urecpe. */ - return 2298; + return 2303; } else { @@ -6678,7 +6689,7 @@ 10987654321098765432109876543210 010001x0xx0x1000101xxxxxxxxxxxxx sqabs. */ - return 2160; + return 2165; } } else @@ -6689,7 +6700,7 @@ 10987654321098765432109876543210 010001x0xx00x100101xxxxxxxxxxxxx sadalp. */ - return 2124; + return 2129; } else { @@ -6697,7 +6708,7 @@ 10987654321098765432109876543210 010001x0xx01x100101xxxxxxxxxxxxx smaxp. */ - return 2138; + return 2143; } } } @@ -6707,7 +6718,7 @@ 10987654321098765432109876543210 010001x0xx0xxx10101xxxxxxxxxxxxx sminp. */ - return 2139; + return 2144; } } else @@ -6724,7 +6735,7 @@ 10987654321098765432109876543210 010001x0xx000001101xxxxxxxxxxxxx ursqrte. */ - return 2303; + return 2308; } else { @@ -6732,7 +6743,7 @@ 10987654321098765432109876543210 010001x0xx010001101xxxxxxxxxxxxx addp. */ - return 2049; + return 2054; } } else @@ -6741,7 +6752,7 @@ 10987654321098765432109876543210 010001x0xx0x1001101xxxxxxxxxxxxx sqneg. */ - return 2187; + return 2192; } } else @@ -6752,7 +6763,7 @@ 10987654321098765432109876543210 010001x0xx00x101101xxxxxxxxxxxxx uadalp. */ - return 2255; + return 2260; } else { @@ -6760,7 +6771,7 @@ 10987654321098765432109876543210 010001x0xx01x101101xxxxxxxxxxxxx umaxp. */ - return 2263; + return 2268; } } } @@ -6770,7 +6781,7 @@ 10987654321098765432109876543210 010001x0xx0xxx11101xxxxxxxxxxxxx uminp. */ - return 2264; + return 2269; } } } @@ -6782,7 +6793,7 @@ 10987654321098765432109876543210 110001x00x0xxxxx101xxxxxxxxxxxxx ldff1sb. */ - return 1665; + return 1670; } else { @@ -6790,7 +6801,7 @@ 10987654321098765432109876543210 110001x01x0xxxxx101xxxxxxxxxxxxx ldff1sh. */ - return 1676; + return 1681; } } } @@ -6804,7 +6815,7 @@ 10987654321098765432109876543210 x10001x0001xxxxx101xxxxxxxxxxxxx ldff1sb. */ - return 1667; + return 1672; } else { @@ -6818,7 +6829,7 @@ 10987654321098765432109876543210 010001x0101xxxxx1010x0xxxxxxxxxx smlslb. */ - return 2146; + return 2151; } else { @@ -6826,7 +6837,7 @@ 10987654321098765432109876543210 010001x0101xxxxx1011x0xxxxxxxxxx umlslb. */ - return 2271; + return 2276; } } else @@ -6837,7 +6848,7 @@ 10987654321098765432109876543210 010001x0101xxxxx1010x1xxxxxxxxxx smlslt. */ - return 2149; + return 2154; } else { @@ -6845,7 +6856,7 @@ 10987654321098765432109876543210 010001x0101xxxxx1011x1xxxxxxxxxx umlslt. */ - return 2274; + return 2279; } } } @@ -6855,7 +6866,7 @@ 10987654321098765432109876543210 110001x0101xxxxx101xxxxxxxxxxxxx ldff1sh. */ - return 1679; + return 1684; } } } @@ -6867,7 +6878,7 @@ 10987654321098765432109876543210 x10001x0011xxxxx101xxxxxxxxxxxxx prfh. */ - return 1779; + return 1784; } else { @@ -6881,7 +6892,7 @@ 10987654321098765432109876543210 010001x0111xxxxx1010x0xxxxxxxxxx smlslb. */ - return 2147; + return 2152; } else { @@ -6889,7 +6900,7 @@ 10987654321098765432109876543210 010001x0111xxxxx1011x0xxxxxxxxxx umlslb. */ - return 2272; + return 2277; } } else @@ -6900,7 +6911,7 @@ 10987654321098765432109876543210 010001x0111xxxxx1010x1xxxxxxxxxx smlslt. */ - return 2150; + return 2155; } else { @@ -6908,7 +6919,7 @@ 10987654321098765432109876543210 010001x0111xxxxx1011x1xxxxxxxxxx umlslt. */ - return 2275; + return 2280; } } } @@ -6918,7 +6929,7 @@ 10987654321098765432109876543210 110001x0111xxxxx101xxxxxxxxxxxxx ldff1sh. */ - return 1677; + return 1682; } } } @@ -6940,7 +6951,7 @@ 10987654321098765432109876543210 000001x0xx0xxxxx011xxxxxxxxxxxxx mls. */ - return 1739; + return 1744; } else { @@ -6950,7 +6961,7 @@ 10987654321098765432109876543210 100001x00x0xxxxx011xxxxxxxxxxxxx ldff1b. */ - return 1623; + return 1628; } else { @@ -6958,7 +6969,7 @@ 10987654321098765432109876543210 100001x01x0xxxxx011xxxxxxxxxxxxx ldff1h. */ - return 1643; + return 1648; } } } @@ -6976,7 +6987,7 @@ 10987654321098765432109876543210 010001x0xx0xxxxx011000xxxxxxxxxx sqdmlalb. */ - return 2165; + return 2170; } else { @@ -6984,7 +6995,7 @@ 10987654321098765432109876543210 010001x0xx0xxxxx011100xxxxxxxxxx sqrdmlah. */ - return 2194; + return 2199; } } else @@ -6995,7 +7006,7 @@ 10987654321098765432109876543210 010001x0xx0xxxxx011010xxxxxxxxxx sqdmlslb. */ - return 2172; + return 2177; } else { @@ -7003,7 +7014,7 @@ 10987654321098765432109876543210 010001x0xx0xxxxx011110xxxxxxxxxx usdot. */ - return 2394; + return 2397; } } } @@ -7017,7 +7028,7 @@ 10987654321098765432109876543210 010001x0xx0xxxxx011001xxxxxxxxxx sqdmlalt. */ - return 2169; + return 2174; } else { @@ -7025,7 +7036,7 @@ 10987654321098765432109876543210 010001x0xx0xxxxx011101xxxxxxxxxx sqrdmlsh. */ - return 2198; + return 2203; } } else @@ -7034,7 +7045,7 @@ 10987654321098765432109876543210 010001x0xx0xxxxx011x11xxxxxxxxxx sqdmlslt. */ - return 2176; + return 2181; } } } @@ -7046,7 +7057,7 @@ 10987654321098765432109876543210 110001x00x0xxxxx011xxxxxxxxxxxxx ldff1b. */ - return 1632; + return 1637; } else { @@ -7054,7 +7065,7 @@ 10987654321098765432109876543210 110001x01x0xxxxx011xxxxxxxxxxxxx ldff1h. */ - return 1651; + return 1656; } } } @@ -7075,7 +7086,7 @@ 10987654321098765432109876543210 000001x0xx1xxxxx011000xxxxxxxxxx mul. */ - return 2107; + return 2112; } else { @@ -7083,7 +7094,7 @@ 10987654321098765432109876543210 000001x0xx1xxxxx011100xxxxxxxxxx sqdmulh. */ - return 2180; + return 2185; } } else @@ -7092,7 +7103,7 @@ 10987654321098765432109876543210 000001x0xx1xxxxx011x10xxxxxxxxxx smulh. */ - return 2152; + return 2157; } } else @@ -7105,7 +7116,7 @@ 10987654321098765432109876543210 000001x0xx1xxxxx011001xxxxxxxxxx pmul. */ - return 2110; + return 2115; } else { @@ -7113,7 +7124,7 @@ 10987654321098765432109876543210 000001x0xx1xxxxx011101xxxxxxxxxx sqrdmulh. */ - return 2202; + return 2207; } } else @@ -7122,7 +7133,7 @@ 10987654321098765432109876543210 000001x0xx1xxxxx011x11xxxxxxxxxx umulh. */ - return 2277; + return 2282; } } } @@ -7134,7 +7145,7 @@ 10987654321098765432109876543210 100001x00x1xxxxx011xxxxxxxxxxxxx prfd. */ - return 1769; + return 1774; } else { @@ -7142,7 +7153,7 @@ 10987654321098765432109876543210 100001x01x1xxxxx011xxxxxxxxxxxxx ldff1h. */ - return 1644; + return 1649; } } } @@ -7154,7 +7165,7 @@ 10987654321098765432109876543210 x10001x00x1xxxxx011xxxxxxxxxxxxx prfd. */ - return 1771; + return 1776; } else { @@ -7168,7 +7179,7 @@ 10987654321098765432109876543210 010001x0101xxxxx0110xxxxxxxxxxxx cmla. */ - return 2059; + return 2064; } else { @@ -7176,7 +7187,7 @@ 10987654321098765432109876543210 010001x0111xxxxx0110xxxxxxxxxxxx cmla. */ - return 2060; + return 2065; } } else @@ -7187,7 +7198,7 @@ 10987654321098765432109876543210 010001x0101xxxxx0111xxxxxxxxxxxx sqrdcmlah. */ - return 2188; + return 2193; } else { @@ -7195,7 +7206,7 @@ 10987654321098765432109876543210 010001x0111xxxxx0111xxxxxxxxxxxx sqrdcmlah. */ - return 2189; + return 2194; } } } @@ -7205,7 +7216,7 @@ 10987654321098765432109876543210 110001x01x1xxxxx011xxxxxxxxxxxxx ldff1h. */ - return 1652; + return 1657; } } } @@ -7223,7 +7234,7 @@ 10987654321098765432109876543210 000001x0xx0xxxxx111xxxxxxxxxxxxx msb. */ - return 1742; + return 1747; } else { @@ -7243,7 +7254,7 @@ 10987654321098765432109876543210 000001x00010xxxx111000xxxxxxxxxx cntb. */ - return 1344; + return 1349; } else { @@ -7251,7 +7262,7 @@ 10987654321098765432109876543210 000001x01010xxxx111000xxxxxxxxxx cntw. */ - return 1348; + return 1353; } } else @@ -7262,7 +7273,7 @@ 10987654321098765432109876543210 000001x00110xxxx111000xxxxxxxxxx cnth. */ - return 1346; + return 1351; } else { @@ -7270,7 +7281,7 @@ 10987654321098765432109876543210 000001x01110xxxx111000xxxxxxxxxx cntd. */ - return 1345; + return 1350; } } } @@ -7284,7 +7295,7 @@ 10987654321098765432109876543210 000001x00011xxxx111000xxxxxxxxxx incb. */ - return 1480; + return 1485; } else { @@ -7292,7 +7303,7 @@ 10987654321098765432109876543210 000001x01011xxxx111000xxxxxxxxxx incw. */ - return 1488; + return 1493; } } else @@ -7303,7 +7314,7 @@ 10987654321098765432109876543210 000001x00111xxxx111000xxxxxxxxxx inch. */ - return 1484; + return 1489; } else { @@ -7311,7 +7322,7 @@ 10987654321098765432109876543210 000001x01111xxxx111000xxxxxxxxxx incd. */ - return 1482; + return 1487; } } } @@ -7328,7 +7339,7 @@ 10987654321098765432109876543210 000001x00010xxxx111100xxxxxxxxxx sqincb. */ - return 1847; + return 1852; } else { @@ -7336,7 +7347,7 @@ 10987654321098765432109876543210 000001x01010xxxx111100xxxxxxxxxx sqincw. */ - return 1859; + return 1864; } } else @@ -7347,7 +7358,7 @@ 10987654321098765432109876543210 000001x00110xxxx111100xxxxxxxxxx sqinch. */ - return 1853; + return 1858; } else { @@ -7355,7 +7366,7 @@ 10987654321098765432109876543210 000001x01110xxxx111100xxxxxxxxxx sqincd. */ - return 1850; + return 1855; } } } @@ -7369,7 +7380,7 @@ 10987654321098765432109876543210 000001x00011xxxx111100xxxxxxxxxx sqincb. */ - return 1846; + return 1851; } else { @@ -7377,7 +7388,7 @@ 10987654321098765432109876543210 000001x01011xxxx111100xxxxxxxxxx sqincw. */ - return 1858; + return 1863; } } else @@ -7388,7 +7399,7 @@ 10987654321098765432109876543210 000001x00111xxxx111100xxxxxxxxxx sqinch. */ - return 1852; + return 1857; } else { @@ -7396,7 +7407,7 @@ 10987654321098765432109876543210 000001x01111xxxx111100xxxxxxxxxx sqincd. */ - return 1849; + return 1854; } } } @@ -7414,7 +7425,7 @@ 10987654321098765432109876543210 000001x00010xxxx111x10xxxxxxxxxx sqdecb. */ - return 1833; + return 1838; } else { @@ -7422,7 +7433,7 @@ 10987654321098765432109876543210 000001x01010xxxx111x10xxxxxxxxxx sqdecw. */ - return 1845; + return 1850; } } else @@ -7433,7 +7444,7 @@ 10987654321098765432109876543210 000001x00110xxxx111x10xxxxxxxxxx sqdech. */ - return 1839; + return 1844; } else { @@ -7441,7 +7452,7 @@ 10987654321098765432109876543210 000001x01110xxxx111x10xxxxxxxxxx sqdecd. */ - return 1836; + return 1841; } } } @@ -7455,7 +7466,7 @@ 10987654321098765432109876543210 000001x00011xxxx111x10xxxxxxxxxx sqdecb. */ - return 1832; + return 1837; } else { @@ -7463,7 +7474,7 @@ 10987654321098765432109876543210 000001x01011xxxx111x10xxxxxxxxxx sqdecw. */ - return 1844; + return 1849; } } else @@ -7474,7 +7485,7 @@ 10987654321098765432109876543210 000001x00111xxxx111x10xxxxxxxxxx sqdech. */ - return 1838; + return 1843; } else { @@ -7482,7 +7493,7 @@ 10987654321098765432109876543210 000001x01111xxxx111x10xxxxxxxxxx sqdecd. */ - return 1835; + return 1840; } } } @@ -7502,7 +7513,7 @@ 10987654321098765432109876543210 000001x0001xxxxx111001xxxxxxxxxx decb. */ - return 1355; + return 1360; } else { @@ -7510,7 +7521,7 @@ 10987654321098765432109876543210 000001x0101xxxxx111001xxxxxxxxxx decw. */ - return 1363; + return 1368; } } else @@ -7521,7 +7532,7 @@ 10987654321098765432109876543210 000001x0011xxxxx111001xxxxxxxxxx dech. */ - return 1359; + return 1364; } else { @@ -7529,7 +7540,7 @@ 10987654321098765432109876543210 000001x0111xxxxx111001xxxxxxxxxx decd. */ - return 1357; + return 1362; } } } @@ -7545,7 +7556,7 @@ 10987654321098765432109876543210 000001x00010xxxx111101xxxxxxxxxx uqincb. */ - return 1994; + return 1999; } else { @@ -7553,7 +7564,7 @@ 10987654321098765432109876543210 000001x01010xxxx111101xxxxxxxxxx uqincw. */ - return 2006; + return 2011; } } else @@ -7564,7 +7575,7 @@ 10987654321098765432109876543210 000001x00110xxxx111101xxxxxxxxxx uqinch. */ - return 2000; + return 2005; } else { @@ -7572,7 +7583,7 @@ 10987654321098765432109876543210 000001x01110xxxx111101xxxxxxxxxx uqincd. */ - return 1997; + return 2002; } } } @@ -7586,7 +7597,7 @@ 10987654321098765432109876543210 000001x00011xxxx111101xxxxxxxxxx uqincb. */ - return 1995; + return 2000; } else { @@ -7594,7 +7605,7 @@ 10987654321098765432109876543210 000001x01011xxxx111101xxxxxxxxxx uqincw. */ - return 2007; + return 2012; } } else @@ -7605,7 +7616,7 @@ 10987654321098765432109876543210 000001x00111xxxx111101xxxxxxxxxx uqinch. */ - return 2001; + return 2006; } else { @@ -7613,7 +7624,7 @@ 10987654321098765432109876543210 000001x01111xxxx111101xxxxxxxxxx uqincd. */ - return 1998; + return 2003; } } } @@ -7631,7 +7642,7 @@ 10987654321098765432109876543210 000001x00010xxxx111x11xxxxxxxxxx uqdecb. */ - return 1980; + return 1985; } else { @@ -7639,7 +7650,7 @@ 10987654321098765432109876543210 000001x01010xxxx111x11xxxxxxxxxx uqdecw. */ - return 1992; + return 1997; } } else @@ -7650,7 +7661,7 @@ 10987654321098765432109876543210 000001x00110xxxx111x11xxxxxxxxxx uqdech. */ - return 1986; + return 1991; } else { @@ -7658,7 +7669,7 @@ 10987654321098765432109876543210 000001x01110xxxx111x11xxxxxxxxxx uqdecd. */ - return 1983; + return 1988; } } } @@ -7672,7 +7683,7 @@ 10987654321098765432109876543210 000001x00011xxxx111x11xxxxxxxxxx uqdecb. */ - return 1981; + return 1986; } else { @@ -7680,7 +7691,7 @@ 10987654321098765432109876543210 000001x01011xxxx111x11xxxxxxxxxx uqdecw. */ - return 1993; + return 1998; } } else @@ -7691,7 +7702,7 @@ 10987654321098765432109876543210 000001x00111xxxx111x11xxxxxxxxxx uqdech. */ - return 1987; + return 1992; } else { @@ -7699,7 +7710,7 @@ 10987654321098765432109876543210 000001x01111xxxx111x11xxxxxxxxxx uqdecd. */ - return 1984; + return 1989; } } } @@ -7719,7 +7730,7 @@ 10987654321098765432109876543210 100001x0000xxxxx111xxxxxxxxxxxxx prfb. */ - return 1766; + return 1771; } else { @@ -7727,7 +7738,7 @@ 10987654321098765432109876543210 100001x0100xxxxx111xxxxxxxxxxxxx prfh. */ - return 1780; + return 1785; } } else @@ -7738,7 +7749,7 @@ 10987654321098765432109876543210 100001x0001xxxxx111xxxxxxxxxxxxx ldff1b. */ - return 1634; + return 1639; } else { @@ -7746,7 +7757,7 @@ 10987654321098765432109876543210 100001x0101xxxxx111xxxxxxxxxxxxx ldff1h. */ - return 1655; + return 1660; } } } @@ -7758,7 +7769,7 @@ 10987654321098765432109876543210 100001x001xxxxxx111xxxxxxxxxxxxx ld1rb. */ - return 1536; + return 1541; } else { @@ -7766,7 +7777,7 @@ 10987654321098765432109876543210 100001x011xxxxxx111xxxxxxxxxxxxx ld1rh. */ - return 1540; + return 1545; } } } @@ -7783,7 +7794,7 @@ 10987654321098765432109876543210 x10001x0000xxxxx111xxxxxxxxxxxxx prfb. */ - return 1768; + return 1773; } else { @@ -7791,7 +7802,7 @@ 10987654321098765432109876543210 x10001x0100xxxxx111xxxxxxxxxxxxx prfh. */ - return 1782; + return 1787; } } else @@ -7802,7 +7813,7 @@ 10987654321098765432109876543210 x10001x0010xxxxx111xxxxxxxxxxxxx ldff1b. */ - return 1633; + return 1638; } else { @@ -7810,7 +7821,7 @@ 10987654321098765432109876543210 x10001x0110xxxxx111xxxxxxxxxxxxx ldff1h. */ - return 1653; + return 1658; } } } @@ -7828,7 +7839,7 @@ 10987654321098765432109876543210 010001x00x1xxxxx111x00xxxxxxxxxx sqdmulh. */ - return 2177; + return 2182; } else { @@ -7836,7 +7847,7 @@ 10987654321098765432109876543210 010001x00x1xxxxx111x10xxxxxxxxxx mul. */ - return 2104; + return 2109; } } else @@ -7845,7 +7856,7 @@ 10987654321098765432109876543210 010001x00x1xxxxx111xx1xxxxxxxxxx sqrdmulh. */ - return 2199; + return 2204; } } else @@ -7856,7 +7867,7 @@ 10987654321098765432109876543210 110001x0001xxxxx111xxxxxxxxxxxxx ldff1b. */ - return 1635; + return 1640; } else { @@ -7864,7 +7875,7 @@ 10987654321098765432109876543210 110001x0011xxxxx111xxxxxxxxxxxxx prfd. */ - return 1772; + return 1777; } } } @@ -7882,7 +7893,7 @@ 10987654321098765432109876543210 010001x0101xxxxx1110x0xxxxxxxxxx sqdmullb. */ - return 2181; + return 2186; } else { @@ -7892,7 +7903,7 @@ 10987654321098765432109876543210 010001x0101xxxxx111100xxxxxxxxxx sqdmulh. */ - return 2178; + return 2183; } else { @@ -7900,7 +7911,7 @@ 10987654321098765432109876543210 010001x0101xxxxx111110xxxxxxxxxx mul. */ - return 2105; + return 2110; } } } @@ -7912,7 +7923,7 @@ 10987654321098765432109876543210 010001x0101xxxxx1110x1xxxxxxxxxx sqdmullt. */ - return 2184; + return 2189; } else { @@ -7920,7 +7931,7 @@ 10987654321098765432109876543210 010001x0101xxxxx1111x1xxxxxxxxxx sqrdmulh. */ - return 2200; + return 2205; } } } @@ -7930,7 +7941,7 @@ 10987654321098765432109876543210 110001x0101xxxxx111xxxxxxxxxxxxx ldff1h. */ - return 1656; + return 1661; } } else @@ -7945,7 +7956,7 @@ 10987654321098765432109876543210 010001x0111xxxxx1110x0xxxxxxxxxx sqdmullb. */ - return 2182; + return 2187; } else { @@ -7955,7 +7966,7 @@ 10987654321098765432109876543210 010001x0111xxxxx111100xxxxxxxxxx sqdmulh. */ - return 2179; + return 2184; } else { @@ -7963,7 +7974,7 @@ 10987654321098765432109876543210 010001x0111xxxxx111110xxxxxxxxxx mul. */ - return 2106; + return 2111; } } } @@ -7975,7 +7986,7 @@ 10987654321098765432109876543210 010001x0111xxxxx1110x1xxxxxxxxxx sqdmullt. */ - return 2185; + return 2190; } else { @@ -7983,7 +7994,7 @@ 10987654321098765432109876543210 010001x0111xxxxx1111x1xxxxxxxxxx sqrdmulh. */ - return 2201; + return 2206; } } } @@ -7993,7 +8004,7 @@ 10987654321098765432109876543210 110001x0111xxxxx111xxxxxxxxxxxxx ldff1h. */ - return 1654; + return 1659; } } } @@ -8023,7 +8034,7 @@ 10987654321098765432109876543210 001001x0xx0xxxxx000xxxxxxxx0xxxx cmphs. */ - return 1328; + return 1333; } else { @@ -8031,7 +8042,7 @@ 10987654321098765432109876543210 001001x0xx0xxxxx000xxxxxxxx1xxxx cmphi. */ - return 1325; + return 1330; } } else @@ -8042,7 +8053,7 @@ 10987654321098765432109876543210 101001x00x0xxxxx000xxxxxxxxxxxxx ld1rqb. */ - return 1542; + return 1547; } else { @@ -8050,7 +8061,7 @@ 10987654321098765432109876543210 101001x01x0xxxxx000xxxxxxxxxxxxx ld1rqh. */ - return 1546; + return 1551; } } } @@ -8064,7 +8075,7 @@ 10987654321098765432109876543210 001001x0xx0xxxxx010xxxxxxxx0xxxx cmpge. */ - return 1319; + return 1324; } else { @@ -8072,7 +8083,7 @@ 10987654321098765432109876543210 001001x0xx0xxxxx010xxxxxxxx1xxxx cmpgt. */ - return 1322; + return 1327; } } else @@ -8085,7 +8096,7 @@ 10987654321098765432109876543210 101001x0000xxxxx010xxxxxxxxxxxxx ld1b. */ - return 1500; + return 1505; } else { @@ -8093,7 +8104,7 @@ 10987654321098765432109876543210 101001x0100xxxxx010xxxxxxxxxxxxx ld1sw. */ - return 1580; + return 1585; } } else @@ -8104,7 +8115,7 @@ 10987654321098765432109876543210 101001x0010xxxxx010xxxxxxxxxxxxx ld1b. */ - return 1502; + return 1507; } else { @@ -8112,7 +8123,7 @@ 10987654321098765432109876543210 101001x0110xxxxx010xxxxxxxxxxxxx ld1h. */ - return 1522; + return 1527; } } } @@ -8130,7 +8141,7 @@ 10987654321098765432109876543210 001001x0xx0xxxxx001xxxxxxxx0xxxx cmpeq. */ - return 1316; + return 1321; } else { @@ -8138,7 +8149,7 @@ 10987654321098765432109876543210 001001x0xx0xxxxx001xxxxxxxx1xxxx cmpne. */ - return 1339; + return 1344; } } else @@ -8149,7 +8160,7 @@ 10987654321098765432109876543210 101001x00x0xxxxx001xxxxxxxxxxxxx ld1rqb. */ - return 1541; + return 1546; } else { @@ -8157,7 +8168,7 @@ 10987654321098765432109876543210 101001x01x0xxxxx001xxxxxxxxxxxxx ld1rqh. */ - return 1545; + return 1550; } } } @@ -8171,7 +8182,7 @@ 10987654321098765432109876543210 001001x0xx0xxxxx011xxxxxxxx0xxxx cmplt. */ - return 1337; + return 1342; } else { @@ -8179,7 +8190,7 @@ 10987654321098765432109876543210 001001x0xx0xxxxx011xxxxxxxx1xxxx cmple. */ - return 1331; + return 1336; } } else @@ -8192,7 +8203,7 @@ 10987654321098765432109876543210 101001x0000xxxxx011xxxxxxxxxxxxx ldff1b. */ - return 1624; + return 1629; } else { @@ -8200,7 +8211,7 @@ 10987654321098765432109876543210 101001x0100xxxxx011xxxxxxxxxxxxx ldff1sw. */ - return 1680; + return 1685; } } else @@ -8211,7 +8222,7 @@ 10987654321098765432109876543210 101001x0010xxxxx011xxxxxxxxxxxxx ldff1b. */ - return 1628; + return 1633; } else { @@ -8219,7 +8230,7 @@ 10987654321098765432109876543210 101001x0110xxxxx011xxxxxxxxxxxxx ldff1h. */ - return 1647; + return 1652; } } } @@ -8234,7 +8245,7 @@ 10987654321098765432109876543210 011001x0xx0xxxxx0xxxxxxxxxxxxxxx fcmla. */ - return 1385; + return 1390; } else { @@ -8246,7 +8257,7 @@ 10987654321098765432109876543210 111001x0x00xxxxx0x0xxxxxxxxxxxxx st1b. */ - return 1862; + return 1867; } else { @@ -8256,7 +8267,7 @@ 10987654321098765432109876543210 111001x0010xxxxx0x0xxxxxxxxxxxxx st1b. */ - return 1866; + return 1871; } else { @@ -8264,7 +8275,7 @@ 10987654321098765432109876543210 111001x0110xxxxx0x0xxxxxxxxxxxxx st1h. */ - return 1887; + return 1892; } } } @@ -8280,7 +8291,7 @@ 10987654321098765432109876543210 111001x0000xxxxx001xxxxxxxxxxxxx stnt1b. */ - return 2239; + return 2244; } else { @@ -8288,7 +8299,7 @@ 10987654321098765432109876543210 111001x0100xxxxx001xxxxxxxxxxxxx stnt1h. */ - return 2242; + return 2247; } } else @@ -8299,7 +8310,7 @@ 10987654321098765432109876543210 111001x0010xxxxx001xxxxxxxxxxxxx stnt1b. */ - return 2238; + return 2243; } else { @@ -8307,7 +8318,7 @@ 10987654321098765432109876543210 111001x0110xxxxx001xxxxxxxxxxxxx stnt1h. */ - return 2241; + return 2246; } } } @@ -8321,7 +8332,7 @@ 10987654321098765432109876543210 111001x0000xxxxx011xxxxxxxxxxxxx stnt1b. */ - return 1932; + return 1937; } else { @@ -8329,7 +8340,7 @@ 10987654321098765432109876543210 111001x0100xxxxx011xxxxxxxxxxxxx stnt1h. */ - return 1936; + return 1941; } } else @@ -8340,7 +8351,7 @@ 10987654321098765432109876543210 111001x0010xxxxx011xxxxxxxxxxxxx st3b. */ - return 1916; + return 1921; } else { @@ -8348,7 +8359,7 @@ 10987654321098765432109876543210 111001x0110xxxxx011xxxxxxxxxxxxx st3h. */ - return 1920; + return 1925; } } } @@ -8370,7 +8381,7 @@ 10987654321098765432109876543210 x01001x0xx0xxxxx100xxxxxxxx0xxxx cmpge. */ - return 1320; + return 1325; } else { @@ -8378,7 +8389,7 @@ 10987654321098765432109876543210 x01001x0xx0xxxxx100xxxxxxxx1xxxx cmpgt. */ - return 1323; + return 1328; } } else @@ -8391,7 +8402,7 @@ 10987654321098765432109876543210 001001x0xx0xxxxx110xxxxxxxx0xxxx cmphs. */ - return 1329; + return 1334; } else { @@ -8399,7 +8410,7 @@ 10987654321098765432109876543210 001001x0xx0xxxxx110xxxxxxxx1xxxx cmphi. */ - return 1326; + return 1331; } } else @@ -8412,7 +8423,7 @@ 10987654321098765432109876543210 101001x0000xxxxx110xxxxxxxxxxxxx ldnt1b. */ - return 1715; + return 1720; } else { @@ -8420,7 +8431,7 @@ 10987654321098765432109876543210 101001x0100xxxxx110xxxxxxxxxxxxx ldnt1h. */ - return 1719; + return 1724; } } else @@ -8431,7 +8442,7 @@ 10987654321098765432109876543210 101001x0010xxxxx110xxxxxxxxxxxxx ld3b. */ - return 1607; + return 1612; } else { @@ -8439,7 +8450,7 @@ 10987654321098765432109876543210 101001x0110xxxxx110xxxxxxxxxxxxx ld3h. */ - return 1611; + return 1616; } } } @@ -8459,7 +8470,7 @@ 10987654321098765432109876543210 011001x0xx00x00x1x0xxxxxxxxxxxxx fcadd. */ - return 1384; + return 1389; } else { @@ -8467,7 +8478,7 @@ 10987654321098765432109876543210 011001x0xx01x00x1x0xxxxxxxxxxxxx faddp. */ - return 2065; + return 2070; } } else @@ -8478,7 +8489,7 @@ 10987654321098765432109876543210 011001x0xx0xx1001x0xxxxxxxxxxxxx fmaxnmp. */ - return 2073; + return 2078; } else { @@ -8486,7 +8497,7 @@ 10987654321098765432109876543210 011001x0xx0xx1011x0xxxxxxxxxxxxx fminnmp. */ - return 2075; + return 2080; } } } @@ -8498,7 +8509,7 @@ 10987654321098765432109876543210 011001x0xx0xxx101x0xxxxxxxxxxxxx fmaxp. */ - return 2074; + return 2079; } else { @@ -8506,7 +8517,7 @@ 10987654321098765432109876543210 011001x0xx0xxx111x0xxxxxxxxxxxxx fminp. */ - return 2076; + return 2081; } } } @@ -8520,7 +8531,7 @@ 10987654321098765432109876543210 111001x0000xxxxx1x0xxxxxxxxxxxxx st1b. */ - return 1863; + return 1868; } else { @@ -8528,7 +8539,7 @@ 10987654321098765432109876543210 111001x0100xxxxx1x0xxxxxxxxxxxxx st1h. */ - return 1882; + return 1887; } } else @@ -8539,7 +8550,7 @@ 10987654321098765432109876543210 111001x0010xxxxx1x0xxxxxxxxxxxxx st1b. */ - return 1867; + return 1872; } else { @@ -8547,7 +8558,7 @@ 10987654321098765432109876543210 111001x0110xxxxx1x0xxxxxxxxxxxxx st1h. */ - return 1888; + return 1893; } } } @@ -8567,7 +8578,7 @@ 10987654321098765432109876543210 001001x0xx0xxxxx101xxxxxxxx0xxxx cmpeq. */ - return 1317; + return 1322; } else { @@ -8575,7 +8586,7 @@ 10987654321098765432109876543210 001001x0xx0xxxxx101xxxxxxxx1xxxx cmpne. */ - return 1340; + return 1345; } } else @@ -8590,7 +8601,7 @@ 10987654321098765432109876543210 101001x00000xxxx101xxxxxxxxxxxxx ld1b. */ - return 1507; + return 1512; } else { @@ -8598,7 +8609,7 @@ 10987654321098765432109876543210 101001x01000xxxx101xxxxxxxxxxxxx ld1sw. */ - return 1585; + return 1590; } } else @@ -8609,7 +8620,7 @@ 10987654321098765432109876543210 101001x00100xxxx101xxxxxxxxxxxxx ld1b. */ - return 1509; + return 1514; } else { @@ -8617,7 +8628,7 @@ 10987654321098765432109876543210 101001x01100xxxx101xxxxxxxxxxxxx ld1h. */ - return 1530; + return 1535; } } } @@ -8631,7 +8642,7 @@ 10987654321098765432109876543210 101001x00001xxxx101xxxxxxxxxxxxx ldnf1b. */ - return 1699; + return 1704; } else { @@ -8639,7 +8650,7 @@ 10987654321098765432109876543210 101001x01001xxxx101xxxxxxxxxxxxx ldnf1sw. */ - return 1712; + return 1717; } } else @@ -8650,7 +8661,7 @@ 10987654321098765432109876543210 101001x00101xxxx101xxxxxxxxxxxxx ldnf1b. */ - return 1701; + return 1706; } else { @@ -8658,7 +8669,7 @@ 10987654321098765432109876543210 101001x01101xxxx101xxxxxxxxxxxxx ldnf1h. */ - return 1705; + return 1710; } } } @@ -8676,7 +8687,7 @@ 10987654321098765432109876543210 011001x0000xxxxx101xxxxxxxxxxxxx fcvtxnt. */ - return 2071; + return 2076; } else { @@ -8684,7 +8695,7 @@ 10987654321098765432109876543210 111001x0000xxxxx101xxxxxxxxxxxxx st1b. */ - return 1864; + return 1869; } } else @@ -8699,7 +8710,7 @@ 10987654321098765432109876543210 011001x0100xxx00101xxxxxxxxxxxxx fcvtnt. */ - return 2068; + return 2073; } else { @@ -8707,7 +8718,7 @@ 10987654321098765432109876543210 011001x0100xxx10101xxxxxxxxxxxxx bfcvtnt. */ - return 2423; + return 2426; } } else @@ -8716,7 +8727,7 @@ 10987654321098765432109876543210 011001x0100xxxx1101xxxxxxxxxxxxx fcvtlt. */ - return 2066; + return 2071; } } else @@ -8725,7 +8736,7 @@ 10987654321098765432109876543210 111001x0100xxxxx101xxxxxxxxxxxxx st1h. */ - return 1883; + return 1888; } } } @@ -8737,7 +8748,7 @@ 10987654321098765432109876543210 x11001x0010xxxxx101xxxxxxxxxxxxx st1b. */ - return 1871; + return 1876; } else { @@ -8749,7 +8760,7 @@ 10987654321098765432109876543210 011001x0110xxxx0101xxxxxxxxxxxxx fcvtnt. */ - return 2069; + return 2074; } else { @@ -8757,7 +8768,7 @@ 10987654321098765432109876543210 011001x0110xxxx1101xxxxxxxxxxxxx fcvtlt. */ - return 2067; + return 2072; } } else @@ -8766,7 +8777,7 @@ 10987654321098765432109876543210 111001x0110xxxxx101xxxxxxxxxxxxx st1h. */ - return 1892; + return 1897; } } } @@ -8784,7 +8795,7 @@ 10987654321098765432109876543210 001001x0xx0xxxxx111xxxxxxxx0xxxx cmplo. */ - return 1333; + return 1338; } else { @@ -8792,7 +8803,7 @@ 10987654321098765432109876543210 001001x0xx0xxxxx111xxxxxxxx1xxxx cmpls. */ - return 1335; + return 1340; } } else @@ -8805,7 +8816,7 @@ 10987654321098765432109876543210 101001x0000xxxxx111xxxxxxxxxxxxx ldnt1b. */ - return 1716; + return 1721; } else { @@ -8813,7 +8824,7 @@ 10987654321098765432109876543210 101001x0100xxxxx111xxxxxxxxxxxxx ldnt1h. */ - return 1720; + return 1725; } } else @@ -8824,7 +8835,7 @@ 10987654321098765432109876543210 101001x0010xxxxx111xxxxxxxxxxxxx ld3b. */ - return 1608; + return 1613; } else { @@ -8832,22 +8843,22 @@ 10987654321098765432109876543210 101001x0110xxxxx111xxxxxxxxxxxxx ld3h. */ - return 1612; + return 1617; } } } } else { - if (((word >> 22) & 0x1) == 0) + if (((word >> 20) & 0x1) == 0) { - if (((word >> 20) & 0x1) == 0) + if (((word >> 22) & 0x1) == 0) { /* 33222222222211111111110000000000 10987654321098765432109876543210 x11001x0x000xxxx111xxxxxxxxxxxxx st1b. */ - return 1869; + return 1874; } else { @@ -8855,69 +8866,58 @@ { /* 33222222222211111111110000000000 10987654321098765432109876543210 - x11001x00001xxxx111xxxxxxxxxxxxx - stnt1b. */ - return 1933; + x11001x00100xxxx111xxxxxxxxxxxxx + st1b. */ + return 1877; } else { /* 33222222222211111111110000000000 10987654321098765432109876543210 - x11001x01001xxxx111xxxxxxxxxxxxx - stnt1h. */ - return 1937; + x11001x01100xxxx111xxxxxxxxxxxxx + st1h. */ + return 1898; } } } else { - if (((word >> 23) & 0x1) == 0) + if (((word >> 22) & 0x1) == 0) { - if (((word >> 20) & 0x1) == 0) + if (((word >> 23) & 0x1) == 0) { /* 33222222222211111111110000000000 10987654321098765432109876543210 - x11001x00100xxxx111xxxxxxxxxxxxx - st1b. */ - return 1872; + x11001x00001xxxx111xxxxxxxxxxxxx + stnt1b. */ + return 1938; } else { /* 33222222222211111111110000000000 10987654321098765432109876543210 - x11001x00101xxxx111xxxxxxxxxxxxx - st3b. */ - return 1917; + x11001x01001xxxx111xxxxxxxxxxxxx + stnt1h. */ + return 1942; } } else { - if (((word >> 31) & 0x1) == 0) + if (((word >> 23) & 0x1) == 0) { /* 33222222222211111111110000000000 10987654321098765432109876543210 - 011001x0110xxxxx111xxxxxxxxxxxxx - fmmla. */ - return 2398; + x11001x00101xxxx111xxxxxxxxxxxxx + st3b. */ + return 1922; } else { - if (((word >> 20) & 0x1) == 0) - { - /* 33222222222211111111110000000000 - 10987654321098765432109876543210 - 111001x01100xxxx111xxxxxxxxxxxxx - st1h. */ - return 1893; - } - else - { - /* 33222222222211111111110000000000 - 10987654321098765432109876543210 - 111001x01101xxxx111xxxxxxxxxxxxx - st3h. */ - return 1921; - } + /* 33222222222211111111110000000000 + 10987654321098765432109876543210 + x11001x01101xxxx111xxxxxxxxxxxxx + st3h. */ + return 1926; } } } @@ -8940,7 +8940,7 @@ 10987654321098765432109876543210 001001x0xx1xxxxxxx0xxxxxxxx0xxxx cmphs. */ - return 1330; + return 1335; } else { @@ -8948,7 +8948,7 @@ 10987654321098765432109876543210 001001x0xx1xxxxxxx0xxxxxxxx1xxxx cmphi. */ - return 1327; + return 1332; } } else @@ -8961,7 +8961,7 @@ 10987654321098765432109876543210 101001x00x1xxxxxx00xxxxxxxxxxxxx ld1rob. */ - return 2399; + return 2402; } else { @@ -8969,7 +8969,7 @@ 10987654321098765432109876543210 101001x01x1xxxxxx00xxxxxxxxxxxxx ld1roh. */ - return 2400; + return 2403; } } else @@ -8984,7 +8984,7 @@ 10987654321098765432109876543210 101001x0001xxxxx010xxxxxxxxxxxxx ld1b. */ - return 1501; + return 1506; } else { @@ -8992,7 +8992,7 @@ 10987654321098765432109876543210 101001x0101xxxxx010xxxxxxxxxxxxx ld1h. */ - return 1521; + return 1526; } } else @@ -9003,7 +9003,7 @@ 10987654321098765432109876543210 101001x0011xxxxx010xxxxxxxxxxxxx ld1b. */ - return 1503; + return 1508; } else { @@ -9011,7 +9011,7 @@ 10987654321098765432109876543210 101001x0111xxxxx010xxxxxxxxxxxxx ld1h. */ - return 1523; + return 1528; } } } @@ -9025,7 +9025,7 @@ 10987654321098765432109876543210 101001x0001xxxxx110xxxxxxxxxxxxx ld2b. */ - return 1599; + return 1604; } else { @@ -9033,7 +9033,7 @@ 10987654321098765432109876543210 101001x0101xxxxx110xxxxxxxxxxxxx ld2h. */ - return 1603; + return 1608; } } else @@ -9044,7 +9044,7 @@ 10987654321098765432109876543210 101001x0011xxxxx110xxxxxxxxxxxxx ld4b. */ - return 1615; + return 1620; } else { @@ -9052,7 +9052,7 @@ 10987654321098765432109876543210 101001x0111xxxxx110xxxxxxxxxxxxx ld4h. */ - return 1619; + return 1624; } } } @@ -9075,7 +9075,7 @@ 10987654321098765432109876543210 x11001x00x1xxxxx0000x0xxxxxxxxxx fmla. */ - return 1438; + return 1443; } else { @@ -9085,7 +9085,7 @@ 10987654321098765432109876543210 x11001x0101xxxxx0000x0xxxxxxxxxx fmla. */ - return 1439; + return 1444; } else { @@ -9093,7 +9093,7 @@ 10987654321098765432109876543210 x11001x0111xxxxx0000x0xxxxxxxxxx fmla. */ - return 1440; + return 1445; } } } @@ -9105,7 +9105,7 @@ 10987654321098765432109876543210 x11001x00x1xxxxx0000x1xxxxxxxxxx fmls. */ - return 1442; + return 1447; } else { @@ -9115,7 +9115,7 @@ 10987654321098765432109876543210 x11001x0101xxxxx0000x1xxxxxxxxxx fmls. */ - return 1443; + return 1448; } else { @@ -9123,7 +9123,7 @@ 10987654321098765432109876543210 x11001x0111xxxxx0000x1xxxxxxxxxx fmls. */ - return 1444; + return 1449; } } } @@ -9136,7 +9136,7 @@ 10987654321098765432109876543210 x11001x0x01xxxxx0001xxxxxxxxxxxx fcmla. */ - return 1386; + return 1391; } else { @@ -9144,7 +9144,7 @@ 10987654321098765432109876543210 x11001x0x11xxxxx0001xxxxxxxxxxxx fcmla. */ - return 1387; + return 1392; } } } @@ -9158,7 +9158,7 @@ 10987654321098765432109876543210 x11001x0001xxxxx010xxxxxxxxxxxxx st1b. */ - return 1865; + return 1870; } else { @@ -9170,7 +9170,7 @@ 10987654321098765432109876543210 011001x0101xxxxx010xx0xxxxxxxxxx fmlalb. */ - return 2077; + return 2082; } else { @@ -9178,7 +9178,7 @@ 10987654321098765432109876543210 011001x0101xxxxx010xx1xxxxxxxxxx fmlalt. */ - return 2079; + return 2084; } } else @@ -9187,7 +9187,7 @@ 10987654321098765432109876543210 111001x0101xxxxx010xxxxxxxxxxxxx st1h. */ - return 1884; + return 1889; } } } @@ -9201,7 +9201,7 @@ 10987654321098765432109876543210 011001x0011xxxxx010xxxxxxxxxxxxx bfdot. */ - return 2420; + return 2423; } else { @@ -9209,7 +9209,7 @@ 10987654321098765432109876543210 111001x0011xxxxx010xxxxxxxxxxxxx st1b. */ - return 1868; + return 1873; } } else @@ -9222,7 +9222,7 @@ 10987654321098765432109876543210 011001x0111xxxxx010xx0xxxxxxxxxx bfmlalb. */ - return 2427; + return 2430; } else { @@ -9230,7 +9230,7 @@ 10987654321098765432109876543210 011001x0111xxxxx010xx1xxxxxxxxxx bfmlalt. */ - return 2426; + return 2429; } } else @@ -9239,7 +9239,7 @@ 10987654321098765432109876543210 111001x0111xxxxx010xxxxxxxxxxxxx st1h. */ - return 1889; + return 1894; } } } @@ -9257,7 +9257,7 @@ 10987654321098765432109876543210 011001x0x01xxxxx1x0xx0xxxxxxxxxx fmlalb. */ - return 2078; + return 2083; } else { @@ -9265,7 +9265,7 @@ 10987654321098765432109876543210 011001x0x01xxxxx1x0xx1xxxxxxxxxx fmlalt. */ - return 2080; + return 2085; } } else @@ -9274,7 +9274,7 @@ 10987654321098765432109876543210 111001x0x01xxxxx1x0xxxxxxxxxxxxx st1h. */ - return 1885; + return 1890; } } else @@ -9285,7 +9285,7 @@ 10987654321098765432109876543210 x11001x0011xxxxx1x0xxxxxxxxxxxxx bfdot. */ - return 2419; + return 2422; } else { @@ -9297,7 +9297,7 @@ 10987654321098765432109876543210 011001x0111xxxxx1x0xx0xxxxxxxxxx bfmlalb. */ - return 2425; + return 2428; } else { @@ -9305,7 +9305,7 @@ 10987654321098765432109876543210 011001x0111xxxxx1x0xx1xxxxxxxxxx bfmlalt. */ - return 2424; + return 2427; } } else @@ -9314,7 +9314,7 @@ 10987654321098765432109876543210 111001x0111xxxxx1x0xxxxxxxxxxxxx st1h. */ - return 1890; + return 1895; } } } @@ -9333,7 +9333,7 @@ 10987654321098765432109876543210 001001x0xx1xxxxxxx1xxxxxxxx0xxxx cmplo. */ - return 1334; + return 1339; } else { @@ -9341,7 +9341,7 @@ 10987654321098765432109876543210 001001x0xx1xxxxxxx1xxxxxxxx1xxxx cmpls. */ - return 1336; + return 1341; } } else @@ -9356,7 +9356,7 @@ 10987654321098765432109876543210 101001x00x1xxxxx001xxxxxxxxxxxxx ld1rob. */ - return 2403; + return 2406; } else { @@ -9364,7 +9364,7 @@ 10987654321098765432109876543210 101001x01x1xxxxx001xxxxxxxxxxxxx ld1roh. */ - return 2404; + return 2407; } } else @@ -9379,7 +9379,7 @@ 10987654321098765432109876543210 101001x00010xxxx101xxxxxxxxxxxxx ld1b. */ - return 1508; + return 1513; } else { @@ -9387,7 +9387,7 @@ 10987654321098765432109876543210 101001x01010xxxx101xxxxxxxxxxxxx ld1h. */ - return 1529; + return 1534; } } else @@ -9398,7 +9398,7 @@ 10987654321098765432109876543210 101001x00110xxxx101xxxxxxxxxxxxx ld1b. */ - return 1510; + return 1515; } else { @@ -9406,7 +9406,7 @@ 10987654321098765432109876543210 101001x01110xxxx101xxxxxxxxxxxxx ld1h. */ - return 1531; + return 1536; } } } @@ -9420,7 +9420,7 @@ 10987654321098765432109876543210 101001x00011xxxx101xxxxxxxxxxxxx ldnf1b. */ - return 1700; + return 1705; } else { @@ -9428,7 +9428,7 @@ 10987654321098765432109876543210 101001x01011xxxx101xxxxxxxxxxxxx ldnf1h. */ - return 1704; + return 1709; } } else @@ -9439,7 +9439,7 @@ 10987654321098765432109876543210 101001x00111xxxx101xxxxxxxxxxxxx ldnf1b. */ - return 1702; + return 1707; } else { @@ -9447,7 +9447,7 @@ 10987654321098765432109876543210 101001x01111xxxx101xxxxxxxxxxxxx ldnf1h. */ - return 1706; + return 1711; } } } @@ -9465,7 +9465,7 @@ 10987654321098765432109876543210 101001x0001xxxxx011xxxxxxxxxxxxx ldff1b. */ - return 1626; + return 1631; } else { @@ -9473,7 +9473,7 @@ 10987654321098765432109876543210 101001x0101xxxxx011xxxxxxxxxxxxx ldff1h. */ - return 1645; + return 1650; } } else @@ -9484,7 +9484,7 @@ 10987654321098765432109876543210 101001x0011xxxxx011xxxxxxxxxxxxx ldff1b. */ - return 1630; + return 1635; } else { @@ -9492,7 +9492,7 @@ 10987654321098765432109876543210 101001x0111xxxxx011xxxxxxxxxxxxx ldff1h. */ - return 1649; + return 1654; } } } @@ -9506,7 +9506,7 @@ 10987654321098765432109876543210 101001x0001xxxxx111xxxxxxxxxxxxx ld2b. */ - return 1600; + return 1605; } else { @@ -9514,7 +9514,7 @@ 10987654321098765432109876543210 101001x0101xxxxx111xxxxxxxxxxxxx ld2h. */ - return 1604; + return 1609; } } else @@ -9525,7 +9525,7 @@ 10987654321098765432109876543210 101001x0011xxxxx111xxxxxxxxxxxxx ld4b. */ - return 1616; + return 1621; } else { @@ -9533,7 +9533,7 @@ 10987654321098765432109876543210 101001x0111xxxxx111xxxxxxxxxxxxx ld4h. */ - return 1620; + return 1625; } } } @@ -9552,7 +9552,7 @@ 10987654321098765432109876543210 x11001x00x1xxxxx001xxxxxxxxxxxxx fmul. */ - return 1449; + return 1454; } else { @@ -9562,7 +9562,7 @@ 10987654321098765432109876543210 x11001x0101xxxxx001xxxxxxxxxxxxx fmul. */ - return 1450; + return 1455; } else { @@ -9570,7 +9570,7 @@ 10987654321098765432109876543210 x11001x0111xxxxx001xxxxxxxxxxxxx fmul. */ - return 1451; + return 1456; } } } @@ -9586,7 +9586,7 @@ 10987654321098765432109876543210 011001x0x01xxxxx101xx0xxxxxxxxxx fmlslb. */ - return 2082; + return 2087; } else { @@ -9594,7 +9594,7 @@ 10987654321098765432109876543210 011001x0x01xxxxx101xx1xxxxxxxxxx fmlslt. */ - return 2084; + return 2089; } } else @@ -9603,7 +9603,7 @@ 10987654321098765432109876543210 111001x0x01xxxxx101xxxxxxxxxxxxx st1h. */ - return 1886; + return 1891; } } else @@ -9614,7 +9614,7 @@ 10987654321098765432109876543210 x11001x0011xxxxx101xxxxxxxxxxxxx st1b. */ - return 1873; + return 1878; } else { @@ -9622,7 +9622,7 @@ 10987654321098765432109876543210 x11001x0111xxxxx101xxxxxxxxxxxxx st1h. */ - return 1894; + return 1899; } } } @@ -9639,7 +9639,7 @@ 10987654321098765432109876543210 x11001x0001xxxxx011xxxxxxxxxxxxx st2b. */ - return 1908; + return 1913; } else { @@ -9651,7 +9651,7 @@ 10987654321098765432109876543210 011001x0101xxxxx011xx0xxxxxxxxxx fmlslb. */ - return 2081; + return 2086; } else { @@ -9659,7 +9659,7 @@ 10987654321098765432109876543210 011001x0101xxxxx011xx1xxxxxxxxxx fmlslt. */ - return 2083; + return 2088; } } else @@ -9668,7 +9668,7 @@ 10987654321098765432109876543210 111001x0101xxxxx011xxxxxxxxxxxxx st2h. */ - return 1912; + return 1917; } } } @@ -9680,7 +9680,7 @@ 10987654321098765432109876543210 x11001x0011xxxxx011xxxxxxxxxxxxx st4b. */ - return 1924; + return 1929; } else { @@ -9688,7 +9688,7 @@ 10987654321098765432109876543210 x11001x0111xxxxx011xxxxxxxxxxxxx st4h. */ - return 1928; + return 1933; } } } @@ -9704,7 +9704,7 @@ 10987654321098765432109876543210 x11001x00010xxxx111xxxxxxxxxxxxx st1b. */ - return 1870; + return 1875; } else { @@ -9712,7 +9712,7 @@ 10987654321098765432109876543210 x11001x00011xxxx111xxxxxxxxxxxxx st2b. */ - return 1909; + return 1914; } } else @@ -9723,7 +9723,7 @@ 10987654321098765432109876543210 011001x0101xxxxx111xxxxxxxxxxxxx fmmla. */ - return 2397; + return 2400; } else { @@ -9733,7 +9733,7 @@ 10987654321098765432109876543210 111001x01010xxxx111xxxxxxxxxxxxx st1h. */ - return 1891; + return 1896; } else { @@ -9741,7 +9741,7 @@ 10987654321098765432109876543210 111001x01011xxxx111xxxxxxxxxxxxx st2h. */ - return 1913; + return 1918; } } } @@ -9756,7 +9756,7 @@ 10987654321098765432109876543210 011001x0011xxxxx111xxxxxxxxxxxxx bfmmla. */ - return 2421; + return 2424; } else { @@ -9766,7 +9766,7 @@ 10987654321098765432109876543210 111001x00110xxxx111xxxxxxxxxxxxx st1b. */ - return 1874; + return 1879; } else { @@ -9774,27 +9774,38 @@ 10987654321098765432109876543210 111001x00111xxxx111xxxxxxxxxxxxx st4b. */ - return 1925; + return 1930; } } } else { - if (((word >> 20) & 0x1) == 0) + if (((word >> 31) & 0x1) == 0) { /* 33222222222211111111110000000000 10987654321098765432109876543210 - x11001x01110xxxx111xxxxxxxxxxxxx - st1h. */ - return 1895; + 011001x0111xxxxx111xxxxxxxxxxxxx + fmmla. */ + return 2401; } else { - /* 33222222222211111111110000000000 - 10987654321098765432109876543210 - x11001x01111xxxx111xxxxxxxxxxxxx - st4h. */ - return 1929; + if (((word >> 20) & 0x1) == 0) + { + /* 33222222222211111111110000000000 + 10987654321098765432109876543210 + 111001x01110xxxx111xxxxxxxxxxxxx + st1h. */ + return 1900; + } + else + { + /* 33222222222211111111110000000000 + 10987654321098765432109876543210 + 111001x01111xxxx111xxxxxxxxxxxxx + st4h. */ + return 1934; + } } } } @@ -9825,7 +9836,7 @@ 10987654321098765432109876543210 000001x10000xxxxxxxxxxxxxxxxxxxx orr. */ - return 1754; + return 1759; } else { @@ -9833,7 +9844,7 @@ 10987654321098765432109876543210 000001x11000xxxxxxxxxxxxxxxxxxxx and. */ - return 1282; + return 1287; } } else @@ -9844,7 +9855,7 @@ 10987654321098765432109876543210 000001x10100xxxxxxxxxxxxxxxxxxxx eor. */ - return 1369; + return 1374; } else { @@ -9852,7 +9863,7 @@ 10987654321098765432109876543210 000001x11100xxxxxxxxxxxxxxxxxxxx dupm. */ - return 1367; + return 1372; } } } @@ -9864,7 +9875,7 @@ 10987654321098765432109876543210 000001x1xx01xxxx0xxxxxxxxxxxxxxx cpy. */ - return 1352; + return 1357; } else { @@ -9872,7 +9883,7 @@ 10987654321098765432109876543210 000001x1xx01xxxx1xxxxxxxxxxxxxxx fcpy. */ - return 1399; + return 1404; } } } @@ -9892,7 +9903,7 @@ 10987654321098765432109876543210 000001x1001xxxxx000xxxxxxxxxxxxx ext. */ - return 1374; + return 1379; } else { @@ -9904,7 +9915,7 @@ 10987654321098765432109876543210 000001x1101xxxxx000x00xxxxxxxxxx zip1. */ - return 2407; + return 2410; } else { @@ -9913,8 +9924,8 @@ /* 33222222222211111111110000000000 10987654321098765432109876543210 000001x1101xxxxx000010xxxxxxxxxx - uzip1. */ - return 2409; + uzp1. */ + return 2412; } else { @@ -9922,7 +9933,7 @@ 10987654321098765432109876543210 000001x1101xxxxx000110xxxxxxxxxx trn1. */ - return 2411; + return 2414; } } } @@ -9934,7 +9945,7 @@ 10987654321098765432109876543210 000001x1101xxxxx000x01xxxxxxxxxx zip2. */ - return 2408; + return 2411; } else { @@ -9943,8 +9954,8 @@ /* 33222222222211111111110000000000 10987654321098765432109876543210 000001x1101xxxxx000011xxxxxxxxxx - uzip2. */ - return 2410; + uzp2. */ + return 2413; } else { @@ -9952,7 +9963,7 @@ 10987654321098765432109876543210 000001x1101xxxxx000111xxxxxxxxxx trn2. */ - return 2412; + return 2415; } } } @@ -9964,7 +9975,7 @@ 10987654321098765432109876543210 000001x1x11xxxxx000xxxxxxxxxxxxx ext. */ - return 2064; + return 2069; } } else @@ -9981,7 +9992,7 @@ 10987654321098765432109876543210 000001x1xx1x0000100xxxxxxxxxxxxx cpy. */ - return 1350; + return 1355; } else { @@ -9989,7 +10000,7 @@ 10987654321098765432109876543210 000001x1xx1x1000100xxxxxxxxxxxxx clasta. */ - return 1308; + return 1313; } } else @@ -10000,7 +10011,7 @@ 10987654321098765432109876543210 000001x1xx1x0100100xxxxxxxxxxxxx revb. */ - return 1802; + return 1807; } else { @@ -10008,7 +10019,7 @@ 10987654321098765432109876543210 000001x1xx1x1100100xxxxxxxxxxxxx splice. */ - return 1829; + return 1834; } } } @@ -10022,7 +10033,7 @@ 10987654321098765432109876543210 000001x1xx1x0010100xxxxxxxxxxxxx lasta. */ - return 1496; + return 1501; } else { @@ -10030,7 +10041,7 @@ 10987654321098765432109876543210 000001x1xx1x1010100xxxxxxxxxxxxx clasta. */ - return 1309; + return 1314; } } else @@ -10039,7 +10050,7 @@ 10987654321098765432109876543210 000001x1xx1xx110100xxxxxxxxxxxxx revw. */ - return 1804; + return 1809; } } } @@ -10055,7 +10066,7 @@ 10987654321098765432109876543210 000001x1xx1x0001100xxxxxxxxxxxxx compact. */ - return 1349; + return 1354; } else { @@ -10063,7 +10074,7 @@ 10987654321098765432109876543210 000001x1xx1x1001100xxxxxxxxxxxxx clastb. */ - return 1311; + return 1316; } } else @@ -10074,7 +10085,7 @@ 10987654321098765432109876543210 000001x1xx1x0101100xxxxxxxxxxxxx revh. */ - return 1803; + return 1808; } else { @@ -10082,7 +10093,7 @@ 10987654321098765432109876543210 000001x1xx1x1101100xxxxxxxxxxxxx splice. */ - return 2159; + return 2164; } } } @@ -10096,7 +10107,7 @@ 10987654321098765432109876543210 000001x1xx1x0011100xxxxxxxxxxxxx lastb. */ - return 1498; + return 1503; } else { @@ -10104,7 +10115,7 @@ 10987654321098765432109876543210 000001x1xx1x1011100xxxxxxxxxxxxx clastb. */ - return 1312; + return 1317; } } else @@ -10113,7 +10124,7 @@ 10987654321098765432109876543210 000001x1xx1xx111100xxxxxxxxxxxxx rbit. */ - return 1795; + return 1800; } } } @@ -10133,7 +10144,7 @@ 10987654321098765432109876543210 000001x1xx1xxxxx001000xxxxxxxxxx dup. */ - return 1365; + return 1370; } else { @@ -10141,7 +10152,7 @@ 10987654321098765432109876543210 000001x1xx1xxxxx001100xxxxxxxxxx tbl. */ - return 1952; + return 1957; } } else @@ -10152,7 +10163,7 @@ 10987654321098765432109876543210 000001x1xx1xxxxx001010xxxxxxxxxx tbl. */ - return 2248; + return 2253; } else { @@ -10170,7 +10181,7 @@ 10987654321098765432109876543210 000001x1xx100000001110xxxxxxxxxx dup. */ - return 1364; + return 1369; } else { @@ -10178,7 +10189,7 @@ 10987654321098765432109876543210 000001x1xx110000001110xxxxxxxxxx sunpklo. */ - return 1948; + return 1953; } } else @@ -10187,7 +10198,7 @@ 10987654321098765432109876543210 000001x1xx1x1000001110xxxxxxxxxx rev. */ - return 1801; + return 1806; } } else @@ -10198,7 +10209,7 @@ 10987654321098765432109876543210 000001x1xx10x100001110xxxxxxxxxx insr. */ - return 1493; + return 1498; } else { @@ -10206,7 +10217,7 @@ 10987654321098765432109876543210 000001x1xx11x100001110xxxxxxxxxx insr. */ - return 1494; + return 1499; } } } @@ -10216,7 +10227,7 @@ 10987654321098765432109876543210 000001x1xx1xxx10001110xxxxxxxxxx uunpklo. */ - return 2011; + return 2016; } } else @@ -10227,7 +10238,7 @@ 10987654321098765432109876543210 000001x1xx1xxx01001110xxxxxxxxxx sunpkhi. */ - return 1947; + return 1952; } else { @@ -10235,7 +10246,7 @@ 10987654321098765432109876543210 000001x1xx1xxx11001110xxxxxxxxxx uunpkhi. */ - return 2010; + return 2015; } } } @@ -10247,7 +10258,7 @@ 10987654321098765432109876543210 000001x1xx1xxxxx001xx1xxxxxxxxxx tbx. */ - return 2249; + return 2254; } } else @@ -10262,7 +10273,7 @@ 10987654321098765432109876543210 000001x1xx100xx0101xxxxxxxxxxxxx lasta. */ - return 1495; + return 1500; } else { @@ -10270,7 +10281,7 @@ 10987654321098765432109876543210 000001x1xx110xx0101xxxxxxxxxxxxx clasta. */ - return 1310; + return 1315; } } else @@ -10279,7 +10290,7 @@ 10987654321098765432109876543210 000001x1xx1x1xx0101xxxxxxxxxxxxx cpy. */ - return 1351; + return 1356; } } else @@ -10290,7 +10301,7 @@ 10987654321098765432109876543210 000001x1xx10xxx1101xxxxxxxxxxxxx lastb. */ - return 1497; + return 1502; } else { @@ -10298,7 +10309,7 @@ 10987654321098765432109876543210 000001x1xx11xxx1101xxxxxxxxxxxxx clastb. */ - return 1313; + return 1318; } } } @@ -10322,7 +10333,7 @@ 10987654321098765432109876543210 000001x1xx10xxxx010000xxxxxxxxxx zip1. */ - return 2028; + return 2033; } else { @@ -10334,7 +10345,7 @@ 10987654321098765432109876543210 000001x1xx11x0x0010000xxxxxxxxxx punpklo. */ - return 1794; + return 1799; } else { @@ -10342,7 +10353,7 @@ 10987654321098765432109876543210 000001x1xx11x1x0010000xxxxxxxxxx rev. */ - return 1800; + return 1805; } } else @@ -10351,7 +10362,7 @@ 10987654321098765432109876543210 000001x1xx11xxx1010000xxxxxxxxxx punpkhi. */ - return 1793; + return 1798; } } } @@ -10361,7 +10372,7 @@ 10987654321098765432109876543210 000001x1xx1xxxxx011000xxxxxxxxxx zip1. */ - return 2029; + return 2034; } } else @@ -10372,7 +10383,7 @@ 10987654321098765432109876543210 000001x1xx1xxxxx010100xxxxxxxxxx trn1. */ - return 1953; + return 1958; } else { @@ -10380,7 +10391,7 @@ 10987654321098765432109876543210 000001x1xx1xxxxx011100xxxxxxxxxx trn1. */ - return 1954; + return 1959; } } } @@ -10392,7 +10403,7 @@ 10987654321098765432109876543210 000001x1xx1xxxxx010x10xxxxxxxxxx uzp1. */ - return 2015; + return 2020; } else { @@ -10400,7 +10411,7 @@ 10987654321098765432109876543210 000001x1xx1xxxxx011x10xxxxxxxxxx uzp1. */ - return 2016; + return 2021; } } } @@ -10416,7 +10427,7 @@ 10987654321098765432109876543210 000001x1xx1xxxxx010001xxxxxxxxxx zip2. */ - return 2030; + return 2035; } else { @@ -10424,7 +10435,7 @@ 10987654321098765432109876543210 000001x1xx1xxxxx011001xxxxxxxxxx zip2. */ - return 2031; + return 2036; } } else @@ -10435,7 +10446,7 @@ 10987654321098765432109876543210 000001x1xx1xxxxx010101xxxxxxxxxx trn2. */ - return 1955; + return 1960; } else { @@ -10443,7 +10454,7 @@ 10987654321098765432109876543210 000001x1xx1xxxxx011101xxxxxxxxxx trn2. */ - return 1956; + return 1961; } } } @@ -10455,7 +10466,7 @@ 10987654321098765432109876543210 000001x1xx1xxxxx010x11xxxxxxxxxx uzp2. */ - return 2017; + return 2022; } else { @@ -10463,7 +10474,7 @@ 10987654321098765432109876543210 000001x1xx1xxxxx011x11xxxxxxxxxx uzp2. */ - return 2018; + return 2023; } } } @@ -10474,7 +10485,7 @@ 10987654321098765432109876543210 000001x1xx1xxxxx11xxxxxxxxxxxxxx sel. */ - return 1819; + return 1824; } } } @@ -10493,7 +10504,7 @@ 10987654321098765432109876543210 100001x1x0xxxxxx000xxxxxxxxxxxxx ldr. */ - return 1723; + return 1728; } else { @@ -10501,7 +10512,7 @@ 10987654321098765432109876543210 100001x1x1xxxxxx000xxxxxxxxxxxxx prfb. */ - return 1767; + return 1772; } } else @@ -10512,7 +10523,7 @@ 10987654321098765432109876543210 100001x10xxxxxxx100xxxxxxxxxxxxx ld1rsh. */ - return 1552; + return 1557; } else { @@ -10520,7 +10531,7 @@ 10987654321098765432109876543210 100001x11xxxxxxx100xxxxxxxxxxxxx ld1rsb. */ - return 1549; + return 1554; } } } @@ -10536,7 +10547,7 @@ 10987654321098765432109876543210 100001x10x0xxxxx010xxxxxxxxxxxxx ld1w. */ - return 1587; + return 1592; } else { @@ -10544,7 +10555,7 @@ 10987654321098765432109876543210 100001x10x1xxxxx010xxxxxxxxxxxxx ld1w. */ - return 1588; + return 1593; } } else @@ -10555,7 +10566,7 @@ 10987654321098765432109876543210 100001x110xxxxxx010xxxxxxxxxxxxx ldr. */ - return 1724; + return 1729; } else { @@ -10563,7 +10574,7 @@ 10987654321098765432109876543210 100001x111xxxxxx010xxxxxxxxxxxxx prfw. */ - return 1788; + return 1793; } } } @@ -10579,7 +10590,7 @@ 10987654321098765432109876543210 100001x1000xxxxx110xxxxxxxxxxxxx prfw. */ - return 1784; + return 1789; } else { @@ -10587,7 +10598,7 @@ 10987654321098765432109876543210 100001x1100xxxxx110xxxxxxxxxxxxx prfd. */ - return 1770; + return 1775; } } else @@ -10596,7 +10607,7 @@ 10987654321098765432109876543210 100001x1x01xxxxx110xxxxxxxxxxxxx ld1w. */ - return 1595; + return 1600; } } else @@ -10607,7 +10618,7 @@ 10987654321098765432109876543210 100001x101xxxxxx110xxxxxxxxxxxxx ld1rw. */ - return 1555; + return 1560; } else { @@ -10615,7 +10626,7 @@ 10987654321098765432109876543210 100001x111xxxxxx110xxxxxxxxxxxxx ld1rsb. */ - return 1551; + return 1556; } } } @@ -10631,7 +10642,7 @@ 10987654321098765432109876543210 100001x1xxxxxxxx001xxxxxxxxxxxxx prfh. */ - return 1781; + return 1786; } else { @@ -10641,7 +10652,7 @@ 10987654321098765432109876543210 100001x1x0xxxxxx101xxxxxxxxxxxxx ldnt1w. */ - return 2095; + return 2100; } else { @@ -10651,7 +10662,7 @@ 10987654321098765432109876543210 100001x101xxxxxx101xxxxxxxxxxxxx ld1rsh. */ - return 1553; + return 1558; } else { @@ -10659,7 +10670,7 @@ 10987654321098765432109876543210 100001x111xxxxxx101xxxxxxxxxxxxx ld1rsb. */ - return 1550; + return 1555; } } } @@ -10676,7 +10687,7 @@ 10987654321098765432109876543210 100001x10x0xxxxx011xxxxxxxxxxxxx ldff1w. */ - return 1687; + return 1692; } else { @@ -10684,7 +10695,7 @@ 10987654321098765432109876543210 100001x10x1xxxxx011xxxxxxxxxxxxx ldff1w. */ - return 1688; + return 1693; } } else @@ -10693,7 +10704,7 @@ 10987654321098765432109876543210 100001x11xxxxxxx011xxxxxxxxxxxxx prfd. */ - return 1774; + return 1779; } } else @@ -10708,7 +10719,7 @@ 10987654321098765432109876543210 100001x1000xxxxx111xxxxxxxxxxxxx prfw. */ - return 1787; + return 1792; } else { @@ -10716,7 +10727,7 @@ 10987654321098765432109876543210 100001x1100xxxxx111xxxxxxxxxxxxx prfd. */ - return 1773; + return 1778; } } else @@ -10725,7 +10736,7 @@ 10987654321098765432109876543210 100001x1x01xxxxx111xxxxxxxxxxxxx ldff1w. */ - return 1697; + return 1702; } } else @@ -10736,7 +10747,7 @@ 10987654321098765432109876543210 100001x101xxxxxx111xxxxxxxxxxxxx ld1rw. */ - return 1556; + return 1561; } else { @@ -10744,7 +10755,7 @@ 10987654321098765432109876543210 100001x111xxxxxx111xxxxxxxxxxxxx ld1rd. */ - return 1537; + return 1542; } } } @@ -10774,7 +10785,7 @@ 10987654321098765432109876543210 010001x1xx0xxxxx000000xxxxxxxxxx saddlb. */ - return 2125; + return 2130; } else { @@ -10782,7 +10793,7 @@ 10987654321098765432109876543210 010001x1xx0xxxxx000100xxxxxxxxxx ssublb. */ - return 2232; + return 2237; } } else @@ -10793,7 +10804,7 @@ 10987654321098765432109876543210 010001x1xx0xxxxx000010xxxxxxxxxx uaddlb. */ - return 2256; + return 2261; } else { @@ -10801,7 +10812,7 @@ 10987654321098765432109876543210 010001x1xx0xxxxx000110xxxxxxxxxx usublb. */ - return 2309; + return 2314; } } } @@ -10815,7 +10826,7 @@ 10987654321098765432109876543210 010001x1xx0xxxxx000001xxxxxxxxxx saddlt. */ - return 2127; + return 2132; } else { @@ -10823,7 +10834,7 @@ 10987654321098765432109876543210 010001x1xx0xxxxx000101xxxxxxxxxx ssublt. */ - return 2234; + return 2239; } } else @@ -10834,7 +10845,7 @@ 10987654321098765432109876543210 010001x1xx0xxxxx000011xxxxxxxxxx uaddlt. */ - return 2257; + return 2262; } else { @@ -10842,7 +10853,7 @@ 10987654321098765432109876543210 010001x1xx0xxxxx000111xxxxxxxxxx usublt. */ - return 2310; + return 2315; } } } @@ -10853,7 +10864,7 @@ 10987654321098765432109876543210 110001x1xx0xxxxx000xxxxxxxxxxxxx ld1sw. */ - return 1581; + return 1586; } } else @@ -10870,7 +10881,7 @@ 10987654321098765432109876543210 010001x1xx1xxxxx000000xxxxxxxxxx sqshrunb. */ - return 2215; + return 2220; } else { @@ -10878,7 +10889,7 @@ 10987654321098765432109876543210 010001x1xx1xxxxx000100xxxxxxxxxx shrnb. */ - return 2133; + return 2138; } } else @@ -10889,7 +10900,7 @@ 10987654321098765432109876543210 010001x1xx1xxxxx000010xxxxxxxxxx sqrshrunb. */ - return 2207; + return 2212; } else { @@ -10897,7 +10908,7 @@ 10987654321098765432109876543210 010001x1xx1xxxxx000110xxxxxxxxxx rshrnb. */ - return 2115; + return 2120; } } } @@ -10911,7 +10922,7 @@ 10987654321098765432109876543210 010001x1xx1xxxxx000001xxxxxxxxxx sqshrunt. */ - return 2216; + return 2221; } else { @@ -10919,7 +10930,7 @@ 10987654321098765432109876543210 010001x1xx1xxxxx000101xxxxxxxxxx shrnt. */ - return 2134; + return 2139; } } else @@ -10930,7 +10941,7 @@ 10987654321098765432109876543210 010001x1xx1xxxxx000011xxxxxxxxxx sqrshrunt. */ - return 2208; + return 2213; } else { @@ -10938,7 +10949,7 @@ 10987654321098765432109876543210 010001x1xx1xxxxx000111xxxxxxxxxx rshrnt. */ - return 2116; + return 2121; } } } @@ -10949,7 +10960,7 @@ 10987654321098765432109876543210 110001x1xx1xxxxx000xxxxxxxxxxxxx ld1sw. */ - return 1582; + return 1587; } } } @@ -10969,7 +10980,7 @@ 10987654321098765432109876543210 010001x1xx0xxxxx100000xxxxxxxxxx saddlbt. */ - return 2126; + return 2131; } else { @@ -10977,7 +10988,7 @@ 10987654321098765432109876543210 010001x1xx0xxxxx100100xxxxxxxxxx eorbt. */ - return 2062; + return 2067; } } else @@ -10988,7 +10999,7 @@ 10987654321098765432109876543210 010001x1xx0xxxxx100010xxxxxxxxxx ssublbt. */ - return 2233; + return 2238; } else { @@ -11000,7 +11011,7 @@ 10987654321098765432109876543210 010001x1000xxxxx100110xxxxxxxxxx smmla. */ - return 2391; + return 2394; } else { @@ -11008,7 +11019,7 @@ 10987654321098765432109876543210 010001x1100xxxxx100110xxxxxxxxxx usmmla. */ - return 2393; + return 2396; } } else @@ -11017,7 +11028,7 @@ 10987654321098765432109876543210 010001x1x10xxxxx100110xxxxxxxxxx ummla. */ - return 2392; + return 2395; } } } @@ -11030,7 +11041,7 @@ 10987654321098765432109876543210 010001x1xx0xxxxx100x01xxxxxxxxxx eortb. */ - return 2063; + return 2068; } else { @@ -11038,7 +11049,7 @@ 10987654321098765432109876543210 010001x1xx0xxxxx100x11xxxxxxxxxx ssubltb. */ - return 2235; + return 2240; } } } @@ -11050,7 +11061,7 @@ 10987654321098765432109876543210 110001x1x00xxxxx100xxxxxxxxxxxxx ldnt1sw. */ - return 2094; + return 2099; } else { @@ -11058,7 +11069,7 @@ 10987654321098765432109876543210 110001x1x10xxxxx100xxxxxxxxxxxxx ld1sw. */ - return 1583; + return 1588; } } } @@ -11072,7 +11083,7 @@ 10987654321098765432109876543210 010001x1xx1xxxxx100xxxxxxxx0xxxx match. */ - return 2097; + return 2102; } else { @@ -11080,7 +11091,7 @@ 10987654321098765432109876543210 010001x1xx1xxxxx100xxxxxxxx1xxxx nmatch. */ - return 2109; + return 2114; } } else @@ -11091,7 +11102,7 @@ 10987654321098765432109876543210 110001x1x01xxxxx100xxxxxxxxxxxxx ld1sw. */ - return 1586; + return 1591; } else { @@ -11099,7 +11110,7 @@ 10987654321098765432109876543210 110001x1x11xxxxx100xxxxxxxxxxxxx ld1sw. */ - return 1584; + return 1589; } } } @@ -11123,7 +11134,7 @@ 10987654321098765432109876543210 010001x1xx0xxxxx010000xxxxxxxxxx saddwb. */ - return 2128; + return 2133; } else { @@ -11131,7 +11142,7 @@ 10987654321098765432109876543210 010001x1xx0xxxxx010100xxxxxxxxxx ssubwb. */ - return 2236; + return 2241; } } else @@ -11142,7 +11153,7 @@ 10987654321098765432109876543210 010001x1xx0xxxxx010010xxxxxxxxxx uaddwb. */ - return 2258; + return 2263; } else { @@ -11150,7 +11161,7 @@ 10987654321098765432109876543210 010001x1xx0xxxxx010110xxxxxxxxxx usubwb. */ - return 2311; + return 2316; } } } @@ -11164,7 +11175,7 @@ 10987654321098765432109876543210 010001x1xx0xxxxx010001xxxxxxxxxx saddwt. */ - return 2129; + return 2134; } else { @@ -11172,7 +11183,7 @@ 10987654321098765432109876543210 010001x1xx0xxxxx010101xxxxxxxxxx ssubwt. */ - return 2237; + return 2242; } } else @@ -11183,7 +11194,7 @@ 10987654321098765432109876543210 010001x1xx0xxxxx010011xxxxxxxxxx uaddwt. */ - return 2259; + return 2264; } else { @@ -11191,7 +11202,7 @@ 10987654321098765432109876543210 010001x1xx0xxxxx010111xxxxxxxxxx usubwt. */ - return 2312; + return 2317; } } } @@ -11204,7 +11215,7 @@ 10987654321098765432109876543210 110001x10x0xxxxx010xxxxxxxxxxxxx ld1w. */ - return 1591; + return 1596; } else { @@ -11212,7 +11223,7 @@ 10987654321098765432109876543210 110001x11x0xxxxx010xxxxxxxxxxxxx ld1d. */ - return 1513; + return 1518; } } } @@ -11232,7 +11243,7 @@ 10987654321098765432109876543210 010001x10x1xxxxx010000xxxxxxxxxx sqxtnb. */ - return 2219; + return 2224; } else { @@ -11240,7 +11251,7 @@ 10987654321098765432109876543210 010001x10x1xxxxx010100xxxxxxxxxx sqxtunb. */ - return 2221; + return 2226; } } else @@ -11249,7 +11260,7 @@ 10987654321098765432109876543210 010001x10x1xxxxx010x10xxxxxxxxxx uqxtnb. */ - return 2296; + return 2301; } } else @@ -11262,7 +11273,7 @@ 10987654321098765432109876543210 010001x10x1xxxxx010001xxxxxxxxxx sqxtnt. */ - return 2220; + return 2225; } else { @@ -11270,7 +11281,7 @@ 10987654321098765432109876543210 010001x10x1xxxxx010101xxxxxxxxxx sqxtunt. */ - return 2222; + return 2227; } } else @@ -11279,7 +11290,7 @@ 10987654321098765432109876543210 010001x10x1xxxxx010x11xxxxxxxxxx uqxtnt. */ - return 2297; + return 2302; } } } @@ -11289,7 +11300,7 @@ 10987654321098765432109876543210 110001x10x1xxxxx010xxxxxxxxxxxxx ld1w. */ - return 1592; + return 1597; } } else @@ -11298,7 +11309,7 @@ 10987654321098765432109876543210 x10001x11x1xxxxx010xxxxxxxxxxxxx ld1d. */ - return 1514; + return 1519; } } } @@ -11318,7 +11329,7 @@ 10987654321098765432109876543210 010001x1xx0xxxxx110000xxxxxxxxxx sabalb. */ - return 2120; + return 2125; } else { @@ -11328,7 +11339,7 @@ 10987654321098765432109876543210 010001x10x0xxxxx110100xxxxxxxxxx adclb. */ - return 2045; + return 2050; } else { @@ -11336,7 +11347,7 @@ 10987654321098765432109876543210 010001x11x0xxxxx110100xxxxxxxxxx sbclb. */ - return 2130; + return 2135; } } } @@ -11348,7 +11359,7 @@ 10987654321098765432109876543210 010001x1xx0xxxxx110001xxxxxxxxxx sabalt. */ - return 2121; + return 2126; } else { @@ -11358,7 +11369,7 @@ 10987654321098765432109876543210 010001x10x0xxxxx110101xxxxxxxxxx adclt. */ - return 2046; + return 2051; } else { @@ -11366,7 +11377,7 @@ 10987654321098765432109876543210 010001x11x0xxxxx110101xxxxxxxxxx sbclt. */ - return 2131; + return 2136; } } } @@ -11381,7 +11392,7 @@ 10987654321098765432109876543210 010001x1xx0xxxxx110010xxxxxxxxxx uabalb. */ - return 2251; + return 2256; } else { @@ -11389,7 +11400,7 @@ 10987654321098765432109876543210 010001x1xx0xxxxx110011xxxxxxxxxx uabalt. */ - return 2252; + return 2257; } } else @@ -11400,7 +11411,7 @@ 10987654321098765432109876543210 010001x1xx0xxxx011011xxxxxxxxxxx cadd. */ - return 2054; + return 2059; } else { @@ -11408,7 +11419,7 @@ 10987654321098765432109876543210 010001x1xx0xxxx111011xxxxxxxxxxx sqcadd. */ - return 2162; + return 2167; } } } @@ -11423,7 +11434,7 @@ 10987654321098765432109876543210 110001x1000xxxxx110xxxxxxxxxxxxx ldnt1w. */ - return 2096; + return 2101; } else { @@ -11431,7 +11442,7 @@ 10987654321098765432109876543210 110001x1100xxxxx110xxxxxxxxxxxxx ldnt1d. */ - return 2089; + return 2094; } } else @@ -11442,7 +11453,7 @@ 10987654321098765432109876543210 110001x1010xxxxx110xxxxxxxxxxxxx ld1w. */ - return 1593; + return 1598; } else { @@ -11450,7 +11461,7 @@ 10987654321098765432109876543210 110001x1110xxxxx110xxxxxxxxxxxxx ld1d. */ - return 1515; + return 1520; } } } @@ -11465,7 +11476,7 @@ 10987654321098765432109876543210 x10001x1001xxxxx110xxxxxxxxxxxxx ld1w. */ - return 1598; + return 1603; } else { @@ -11473,7 +11484,7 @@ 10987654321098765432109876543210 x10001x1011xxxxx110xxxxxxxxxxxxx ld1w. */ - return 1594; + return 1599; } } else @@ -11484,7 +11495,7 @@ 10987654321098765432109876543210 010001x11x1xxxxx110xxxxxxxxxxxxx histcnt. */ - return 2085; + return 2090; } else { @@ -11494,7 +11505,7 @@ 10987654321098765432109876543210 110001x1101xxxxx110xxxxxxxxxxxxx ld1d. */ - return 1518; + return 1523; } else { @@ -11502,7 +11513,7 @@ 10987654321098765432109876543210 110001x1111xxxxx110xxxxxxxxxxxxx ld1d. */ - return 1516; + return 1521; } } } @@ -11528,7 +11539,7 @@ 10987654321098765432109876543210 010001x1xx0xxxxx001x00xxxxxxxxxx sabdlb. */ - return 2122; + return 2127; } else { @@ -11536,7 +11547,7 @@ 10987654321098765432109876543210 010001x1xx0xxxxx001x10xxxxxxxxxx uabdlb. */ - return 2253; + return 2258; } } else @@ -11547,7 +11558,7 @@ 10987654321098765432109876543210 010001x1xx0xxxxx001x01xxxxxxxxxx sabdlt. */ - return 2123; + return 2128; } else { @@ -11555,7 +11566,7 @@ 10987654321098765432109876543210 010001x1xx0xxxxx001x11xxxxxxxxxx uabdlt. */ - return 2254; + return 2259; } } } @@ -11565,7 +11576,7 @@ 10987654321098765432109876543210 110001x1xx0xxxxx001xxxxxxxxxxxxx ldff1sw. */ - return 1682; + return 1687; } } else @@ -11582,7 +11593,7 @@ 10987654321098765432109876543210 010001x1xx1xxxxx001000xxxxxxxxxx sqshrnb. */ - return 2213; + return 2218; } else { @@ -11590,7 +11601,7 @@ 10987654321098765432109876543210 010001x1xx1xxxxx001100xxxxxxxxxx uqshrnb. */ - return 2292; + return 2297; } } else @@ -11601,7 +11612,7 @@ 10987654321098765432109876543210 010001x1xx1xxxxx001010xxxxxxxxxx sqrshrnb. */ - return 2205; + return 2210; } else { @@ -11609,7 +11620,7 @@ 10987654321098765432109876543210 010001x1xx1xxxxx001110xxxxxxxxxx uqrshrnb. */ - return 2287; + return 2292; } } } @@ -11623,7 +11634,7 @@ 10987654321098765432109876543210 010001x1xx1xxxxx001001xxxxxxxxxx sqshrnt. */ - return 2214; + return 2219; } else { @@ -11631,7 +11642,7 @@ 10987654321098765432109876543210 010001x1xx1xxxxx001101xxxxxxxxxx uqshrnt. */ - return 2293; + return 2298; } } else @@ -11642,7 +11653,7 @@ 10987654321098765432109876543210 010001x1xx1xxxxx001011xxxxxxxxxx sqrshrnt. */ - return 2206; + return 2211; } else { @@ -11650,7 +11661,7 @@ 10987654321098765432109876543210 010001x1xx1xxxxx001111xxxxxxxxxx uqrshrnt. */ - return 2288; + return 2293; } } } @@ -11661,7 +11672,7 @@ 10987654321098765432109876543210 110001x1xx1xxxxx001xxxxxxxxxxxxx ldff1sw. */ - return 1683; + return 1688; } } } @@ -11681,7 +11692,7 @@ 10987654321098765432109876543210 010001x1xx0xxxxx101000xxxxxxxxxx sshllb. */ - return 2229; + return 2234; } else { @@ -11689,7 +11700,7 @@ 10987654321098765432109876543210 010001x1xx0xxxxx101100xxxxxxxxxx bext. */ - return 2334; + return 2339; } } else @@ -11700,7 +11711,7 @@ 10987654321098765432109876543210 010001x1xx0xxxxx101010xxxxxxxxxx ushllb. */ - return 2305; + return 2310; } else { @@ -11708,7 +11719,7 @@ 10987654321098765432109876543210 010001x1xx0xxxxx101110xxxxxxxxxx bgrp. */ - return 2335; + return 2340; } } } @@ -11722,7 +11733,7 @@ 10987654321098765432109876543210 010001x1xx0xxxxx101001xxxxxxxxxx sshllt. */ - return 2230; + return 2235; } else { @@ -11730,7 +11741,7 @@ 10987654321098765432109876543210 010001x1xx0xxxxx101101xxxxxxxxxx bdep. */ - return 2333; + return 2338; } } else @@ -11739,7 +11750,7 @@ 10987654321098765432109876543210 010001x1xx0xxxxx101x11xxxxxxxxxx ushllt. */ - return 2306; + return 2311; } } } @@ -11749,7 +11760,7 @@ 10987654321098765432109876543210 110001x1xx0xxxxx101xxxxxxxxxxxxx ldff1sw. */ - return 1684; + return 1689; } } else @@ -11762,7 +11773,7 @@ 10987654321098765432109876543210 010001x1x01xxxxx101xxxxxxxxxxxxx histseg. */ - return 2086; + return 2091; } else { @@ -11770,7 +11781,7 @@ 10987654321098765432109876543210 110001x1x01xxxxx101xxxxxxxxxxxxx ldff1sw. */ - return 1686; + return 1691; } } else @@ -11779,7 +11790,7 @@ 10987654321098765432109876543210 x10001x1x11xxxxx101xxxxxxxxxxxxx ldff1sw. */ - return 1685; + return 1690; } } } @@ -11802,7 +11813,7 @@ 10987654321098765432109876543210 010001x1xx0xxxxx011000xxxxxxxxxx sqdmullb. */ - return 2183; + return 2188; } else { @@ -11810,7 +11821,7 @@ 10987654321098765432109876543210 010001x1xx0xxxxx011100xxxxxxxxxx smullb. */ - return 2155; + return 2160; } } else @@ -11823,7 +11834,7 @@ 10987654321098765432109876543210 010001x1x00xxxxx011010xxxxxxxxxx pmullb. */ - return 2330; + return 2335; } else { @@ -11831,7 +11842,7 @@ 10987654321098765432109876543210 010001x1x10xxxxx011010xxxxxxxxxx pmullb. */ - return 2111; + return 2116; } } else @@ -11840,7 +11851,7 @@ 10987654321098765432109876543210 010001x1xx0xxxxx011110xxxxxxxxxx umullb. */ - return 2280; + return 2285; } } } @@ -11854,7 +11865,7 @@ 10987654321098765432109876543210 010001x1xx0xxxxx011001xxxxxxxxxx sqdmullt. */ - return 2186; + return 2191; } else { @@ -11862,7 +11873,7 @@ 10987654321098765432109876543210 010001x1xx0xxxxx011101xxxxxxxxxx smullt. */ - return 2158; + return 2163; } } else @@ -11875,7 +11886,7 @@ 10987654321098765432109876543210 010001x1x00xxxxx011011xxxxxxxxxx pmullt. */ - return 2331; + return 2336; } else { @@ -11883,7 +11894,7 @@ 10987654321098765432109876543210 010001x1x10xxxxx011011xxxxxxxxxx pmullt. */ - return 2112; + return 2117; } } else @@ -11892,7 +11903,7 @@ 10987654321098765432109876543210 010001x1xx0xxxxx011111xxxxxxxxxx umullt. */ - return 2283; + return 2288; } } } @@ -11905,7 +11916,7 @@ 10987654321098765432109876543210 110001x10x0xxxxx011xxxxxxxxxxxxx ldff1w. */ - return 1693; + return 1698; } else { @@ -11913,7 +11924,7 @@ 10987654321098765432109876543210 110001x11x0xxxxx011xxxxxxxxxxxxx ldff1d. */ - return 1638; + return 1643; } } } @@ -11931,7 +11942,7 @@ 10987654321098765432109876543210 010001x1xx1xxxxx011000xxxxxxxxxx addhnb. */ - return 2047; + return 2052; } else { @@ -11939,7 +11950,7 @@ 10987654321098765432109876543210 010001x1xx1xxxxx011100xxxxxxxxxx subhnb. */ - return 2245; + return 2250; } } else @@ -11950,7 +11961,7 @@ 10987654321098765432109876543210 010001x1xx1xxxxx011010xxxxxxxxxx raddhnb. */ - return 2113; + return 2118; } else { @@ -11958,7 +11969,7 @@ 10987654321098765432109876543210 010001x1xx1xxxxx011110xxxxxxxxxx rsubhnb. */ - return 2117; + return 2122; } } } @@ -11972,7 +11983,7 @@ 10987654321098765432109876543210 010001x1xx1xxxxx011001xxxxxxxxxx addhnt. */ - return 2048; + return 2053; } else { @@ -11980,7 +11991,7 @@ 10987654321098765432109876543210 010001x1xx1xxxxx011101xxxxxxxxxx subhnt. */ - return 2246; + return 2251; } } else @@ -11991,7 +12002,7 @@ 10987654321098765432109876543210 010001x1xx1xxxxx011011xxxxxxxxxx raddhnt. */ - return 2114; + return 2119; } else { @@ -11999,7 +12010,7 @@ 10987654321098765432109876543210 010001x1xx1xxxxx011111xxxxxxxxxx rsubhnt. */ - return 2118; + return 2123; } } } @@ -12012,7 +12023,7 @@ 10987654321098765432109876543210 110001x10x1xxxxx011xxxxxxxxxxxxx ldff1w. */ - return 1694; + return 1699; } else { @@ -12020,7 +12031,7 @@ 10987654321098765432109876543210 110001x11x1xxxxx011xxxxxxxxxxxxx ldff1d. */ - return 1639; + return 1644; } } } @@ -12041,7 +12052,7 @@ 10987654321098765432109876543210 010001x1xx0xxxxx111000xxxxxxxxxx ssra. */ - return 2231; + return 2236; } else { @@ -12049,7 +12060,7 @@ 10987654321098765432109876543210 010001x1xx0xxxxx111100xxxxxxxxxx sri. */ - return 2224; + return 2229; } } else @@ -12060,7 +12071,7 @@ 10987654321098765432109876543210 010001x1xx0xxxxx111010xxxxxxxxxx srsra. */ - return 2228; + return 2233; } else { @@ -12068,7 +12079,7 @@ 10987654321098765432109876543210 010001x1xx0xxxxx111110xxxxxxxxxx saba. */ - return 2119; + return 2124; } } } @@ -12082,7 +12093,7 @@ 10987654321098765432109876543210 010001x1xx0xxxxx111001xxxxxxxxxx usra. */ - return 2308; + return 2313; } else { @@ -12090,7 +12101,7 @@ 10987654321098765432109876543210 010001x1xx0xxxxx111101xxxxxxxxxx sli. */ - return 2137; + return 2142; } } else @@ -12101,7 +12112,7 @@ 10987654321098765432109876543210 010001x1xx0xxxxx111011xxxxxxxxxx ursra. */ - return 2304; + return 2309; } else { @@ -12109,7 +12120,7 @@ 10987654321098765432109876543210 010001x1xx0xxxxx111111xxxxxxxxxx uaba. */ - return 2250; + return 2255; } } } @@ -12124,7 +12135,7 @@ 10987654321098765432109876543210 110001x1000xxxxx111xxxxxxxxxxxxx prfw. */ - return 1789; + return 1794; } else { @@ -12132,7 +12143,7 @@ 10987654321098765432109876543210 110001x1100xxxxx111xxxxxxxxxxxxx prfd. */ - return 1775; + return 1780; } } else @@ -12143,7 +12154,7 @@ 10987654321098765432109876543210 110001x1010xxxxx111xxxxxxxxxxxxx ldff1w. */ - return 1695; + return 1700; } else { @@ -12151,7 +12162,7 @@ 10987654321098765432109876543210 110001x1110xxxxx111xxxxxxxxxxxxx ldff1d. */ - return 1640; + return 1645; } } } @@ -12176,7 +12187,7 @@ 10987654321098765432109876543210 010001x1001xxx001110x0xxxxxxxxxx aesmc. */ - return 2329; + return 2334; } else { @@ -12184,7 +12195,7 @@ 10987654321098765432109876543210 010001x1001xxx101110x0xxxxxxxxxx aese. */ - return 2327; + return 2332; } } else @@ -12193,7 +12204,7 @@ 10987654321098765432109876543210 010001x1001xxxx11110x0xxxxxxxxxx sm4e. */ - return 2324; + return 2329; } } else @@ -12202,7 +12213,7 @@ 10987654321098765432109876543210 010001x1001xxxxx1111x0xxxxxxxxxx sm4ekey. */ - return 2325; + return 2330; } } else @@ -12215,7 +12226,7 @@ 10987654321098765432109876543210 010001x1001xxx0x1110x1xxxxxxxxxx aesimc. */ - return 2328; + return 2333; } else { @@ -12223,7 +12234,7 @@ 10987654321098765432109876543210 010001x1001xxx1x1110x1xxxxxxxxxx aesd. */ - return 2326; + return 2331; } } else @@ -12232,7 +12243,7 @@ 10987654321098765432109876543210 010001x1001xxxxx1111x1xxxxxxxxxx rax1. */ - return 2332; + return 2337; } } } @@ -12242,7 +12253,7 @@ 10987654321098765432109876543210 110001x1001xxxxx111xxxxxxxxxxxxx ldff1w. */ - return 1698; + return 1703; } } else @@ -12251,7 +12262,7 @@ 10987654321098765432109876543210 x10001x1101xxxxx111xxxxxxxxxxxxx ldff1d. */ - return 1642; + return 1647; } } else @@ -12262,7 +12273,7 @@ 10987654321098765432109876543210 x10001x1011xxxxx111xxxxxxxxxxxxx ldff1w. */ - return 1696; + return 1701; } else { @@ -12270,7 +12281,7 @@ 10987654321098765432109876543210 x10001x1111xxxxx111xxxxxxxxxxxxx ldff1d. */ - return 1641; + return 1646; } } } @@ -12299,7 +12310,7 @@ 10987654321098765432109876543210 001001x1xx0xxxxx000xxxxxxxx0xxxx cmpge. */ - return 1321; + return 1326; } else { @@ -12307,7 +12318,7 @@ 10987654321098765432109876543210 001001x1xx0xxxxx000xxxxxxxx1xxxx cmpgt. */ - return 1324; + return 1329; } } else @@ -12318,7 +12329,7 @@ 10987654321098765432109876543210 101001x10x0xxxxx000xxxxxxxxxxxxx ld1rqw. */ - return 1548; + return 1553; } else { @@ -12326,7 +12337,7 @@ 10987654321098765432109876543210 101001x11x0xxxxx000xxxxxxxxxxxxx ld1rqd. */ - return 1544; + return 1549; } } } @@ -12346,7 +12357,7 @@ 10987654321098765432109876543210 001001x1xx1xxxxx000000xxxxx0xxxx whilege. */ - return 2313; + return 2318; } else { @@ -12354,7 +12365,7 @@ 10987654321098765432109876543210 001001x1xx1xxxxx000100xxxxx0xxxx whilege. */ - return 2314; + return 2319; } } else @@ -12365,7 +12376,7 @@ 10987654321098765432109876543210 001001x1xx1xxxxx000010xxxxx0xxxx whilehs. */ - return 2319; + return 2324; } else { @@ -12373,7 +12384,7 @@ 10987654321098765432109876543210 001001x1xx1xxxxx000110xxxxx0xxxx whilehs. */ - return 2320; + return 2325; } } } @@ -12387,7 +12398,7 @@ 10987654321098765432109876543210 001001x1xx1xxxxx000001xxxxx0xxxx whilelt. */ - return 2025; + return 2030; } else { @@ -12395,7 +12406,7 @@ 10987654321098765432109876543210 001001x1xx1xxxxx000101xxxxx0xxxx whilelt. */ - return 2026; + return 2031; } } else @@ -12406,7 +12417,7 @@ 10987654321098765432109876543210 001001x1xx1xxxxx000011xxxxx0xxxx whilelo. */ - return 2021; + return 2026; } else { @@ -12414,7 +12425,7 @@ 10987654321098765432109876543210 001001x1xx1xxxxx000111xxxxx0xxxx whilelo. */ - return 2022; + return 2027; } } } @@ -12431,7 +12442,7 @@ 10987654321098765432109876543210 001001x1xx1xxxxx000000xxxxx1xxxx whilegt. */ - return 2315; + return 2320; } else { @@ -12439,7 +12450,7 @@ 10987654321098765432109876543210 001001x1xx1xxxxx000100xxxxx1xxxx whilegt. */ - return 2316; + return 2321; } } else @@ -12450,7 +12461,7 @@ 10987654321098765432109876543210 001001x1xx1xxxxx000010xxxxx1xxxx whilehi. */ - return 2317; + return 2322; } else { @@ -12458,7 +12469,7 @@ 10987654321098765432109876543210 001001x1xx1xxxxx000110xxxxx1xxxx whilehi. */ - return 2318; + return 2323; } } } @@ -12472,7 +12483,7 @@ 10987654321098765432109876543210 001001x1xx1xxxxx000001xxxxx1xxxx whilele. */ - return 2019; + return 2024; } else { @@ -12480,7 +12491,7 @@ 10987654321098765432109876543210 001001x1xx1xxxxx000101xxxxx1xxxx whilele. */ - return 2020; + return 2025; } } else @@ -12491,7 +12502,7 @@ 10987654321098765432109876543210 001001x1xx1xxxxx000011xxxxx1xxxx whilels. */ - return 2023; + return 2028; } else { @@ -12499,7 +12510,7 @@ 10987654321098765432109876543210 001001x1xx1xxxxx000111xxxxx1xxxx whilels. */ - return 2024; + return 2029; } } } @@ -12513,7 +12524,7 @@ 10987654321098765432109876543210 101001x10x1xxxxx000xxxxxxxxxxxxx ld1row. */ - return 2401; + return 2404; } else { @@ -12521,7 +12532,7 @@ 10987654321098765432109876543210 101001x11x1xxxxx000xxxxxxxxxxxxx ld1rod. */ - return 2402; + return 2405; } } } @@ -12540,7 +12551,7 @@ 10987654321098765432109876543210 011001x1xx0xxxxx000x00xxxxxxxxxx fadd. */ - return 1379; + return 1384; } else { @@ -12550,7 +12561,7 @@ 10987654321098765432109876543210 011001x1xx0xxxxx000010xxxxxxxxxx fmul. */ - return 1446; + return 1451; } else { @@ -12558,7 +12569,7 @@ 10987654321098765432109876543210 011001x1xx0xxxxx000110xxxxxxxxxx frecps. */ - return 1459; + return 1464; } } } @@ -12570,7 +12581,7 @@ 10987654321098765432109876543210 011001x1xx0xxxxx000x01xxxxxxxxxx fsub. */ - return 1472; + return 1477; } else { @@ -12580,7 +12591,7 @@ 10987654321098765432109876543210 011001x1xx0xxxxx000011xxxxxxxxxx ftsmul. */ - return 1478; + return 1483; } else { @@ -12588,7 +12599,7 @@ 10987654321098765432109876543210 011001x1xx0xxxxx000111xxxxxxxxxx frsqrts. */ - return 1469; + return 1474; } } } @@ -12599,7 +12610,7 @@ 10987654321098765432109876543210 011001x1xx1xxxxx000xxxxxxxxxxxxx fmla. */ - return 1437; + return 1442; } } else @@ -12608,7 +12619,7 @@ 10987654321098765432109876543210 111001x1xxxxxxxx000xxxxxxxxxxxxx str. */ - return 1940; + return 1945; } } } @@ -12626,7 +12637,7 @@ 10987654321098765432109876543210 001001x1xx0xxxxx001xxxxxxxx0xxxx cmplt. */ - return 1338; + return 1343; } else { @@ -12634,7 +12645,7 @@ 10987654321098765432109876543210 001001x1xx0xxxxx001xxxxxxxx1xxxx cmple. */ - return 1332; + return 1337; } } else @@ -12645,7 +12656,7 @@ 10987654321098765432109876543210 101001x10x0xxxxx001xxxxxxxxxxxxx ld1rqw. */ - return 1547; + return 1552; } else { @@ -12653,7 +12664,7 @@ 10987654321098765432109876543210 101001x11x0xxxxx001xxxxxxxxxxxxx ld1rqd. */ - return 1543; + return 1548; } } } @@ -12675,7 +12686,7 @@ 10987654321098765432109876543210 011001x1xx000000001xxxxxxxxxxxxx faddv. */ - return 1383; + return 1388; } else { @@ -12685,7 +12696,7 @@ 10987654321098765432109876543210 011001x1xx010000001xxxxxxxx0xxxx fcmge. */ - return 1390; + return 1395; } else { @@ -12693,7 +12704,7 @@ 10987654321098765432109876543210 011001x1xx010000001xxxxxxxx1xxxx fcmgt. */ - return 1392; + return 1397; } } } @@ -12703,7 +12714,7 @@ 10987654321098765432109876543210 011001x1xx0x1000001xxxxxxxxxxxxx fadda. */ - return 1382; + return 1387; } } else @@ -12712,7 +12723,7 @@ 10987654321098765432109876543210 011001x1xx0xx100001xxxxxxxxxxxxx fmaxnmv. */ - return 1429; + return 1434; } } else @@ -12723,7 +12734,7 @@ 10987654321098765432109876543210 011001x1xx0xx010001xxxxxxxxxxxxx fcmeq. */ - return 1388; + return 1393; } else { @@ -12733,7 +12744,7 @@ 10987654321098765432109876543210 011001x1xx0x0110001xxxxxxxxxxxxx fmaxv. */ - return 1430; + return 1435; } else { @@ -12741,7 +12752,7 @@ 10987654321098765432109876543210 011001x1xx0x1110001xxxxxxxxxxxxx frecpe. */ - return 1458; + return 1463; } } } @@ -12758,7 +12769,7 @@ 10987654321098765432109876543210 011001x1xx0xx001001xxxxxxxx0xxxx fcmlt. */ - return 1395; + return 1400; } else { @@ -12766,7 +12777,7 @@ 10987654321098765432109876543210 011001x1xx0xx001001xxxxxxxx1xxxx fcmle. */ - return 1394; + return 1399; } } else @@ -12775,7 +12786,7 @@ 10987654321098765432109876543210 011001x1xx0xx101001xxxxxxxxxxxxx fminnmv. */ - return 1435; + return 1440; } } else @@ -12786,7 +12797,7 @@ 10987654321098765432109876543210 011001x1xx0xx011001xxxxxxxxxxxxx fcmne. */ - return 1396; + return 1401; } else { @@ -12796,7 +12807,7 @@ 10987654321098765432109876543210 011001x1xx0x0111001xxxxxxxxxxxxx fminv. */ - return 1436; + return 1441; } else { @@ -12804,7 +12815,7 @@ 10987654321098765432109876543210 011001x1xx0x1111001xxxxxxxxxxxxx frsqrte. */ - return 1468; + return 1473; } } } @@ -12820,7 +12831,7 @@ 10987654321098765432109876543210 111001x1000xxxxx001xxxxxxxxxxxxx stnt1w. */ - return 2244; + return 2249; } else { @@ -12828,7 +12839,7 @@ 10987654321098765432109876543210 111001x1100xxxxx001xxxxxxxxxxxxx stnt1d. */ - return 2240; + return 2245; } } else @@ -12837,7 +12848,7 @@ 10987654321098765432109876543210 111001x1x10xxxxx001xxxxxxxxxxxxx stnt1w. */ - return 2243; + return 2248; } } } @@ -12856,7 +12867,7 @@ 10987654321098765432109876543210 001001x1xx1xxxxx0010xxxxxxx0xxxx ctermeq. */ - return 1353; + return 1358; } else { @@ -12864,7 +12875,7 @@ 10987654321098765432109876543210 001001x1xx1xxxxx0011xxxxxxx0xxxx whilewr. */ - return 2322; + return 2327; } } else @@ -12875,7 +12886,7 @@ 10987654321098765432109876543210 001001x1xx1xxxxx0010xxxxxxx1xxxx ctermne. */ - return 1354; + return 1359; } else { @@ -12883,7 +12894,7 @@ 10987654321098765432109876543210 001001x1xx1xxxxx0011xxxxxxx1xxxx whilerw. */ - return 2321; + return 2326; } } } @@ -12895,7 +12906,7 @@ 10987654321098765432109876543210 101001x10x1xxxxx001xxxxxxxxxxxxx ld1row. */ - return 2405; + return 2408; } else { @@ -12903,7 +12914,7 @@ 10987654321098765432109876543210 101001x11x1xxxxx001xxxxxxxxxxxxx ld1rod. */ - return 2406; + return 2409; } } } @@ -12913,7 +12924,7 @@ 10987654321098765432109876543210 x11001x1xx1xxxxx001xxxxxxxxxxxxx fmls. */ - return 1441; + return 1446; } } } @@ -12940,7 +12951,7 @@ 10987654321098765432109876543210 001001x10000xxxx01xxxx0xxxx0xxxx and. */ - return 1284; + return 1289; } else { @@ -12948,7 +12959,7 @@ 10987654321098765432109876543210 001001x10000xxxx01xxxx0xxxx1xxxx bic. */ - return 1296; + return 1301; } } else @@ -12959,7 +12970,7 @@ 10987654321098765432109876543210 001001x100010xxx01xxxx0xxxxxxxxx brka. */ - return 1298; + return 1303; } else { @@ -12967,7 +12978,7 @@ 10987654321098765432109876543210 001001x100011xxx01xxxx0xxxxxxxxx brkn. */ - return 1302; + return 1307; } } } @@ -12979,7 +12990,7 @@ 10987654321098765432109876543210 001001x1000xxxxx01xxxx1xxxx0xxxx eor. */ - return 1371; + return 1376; } else { @@ -12987,7 +12998,7 @@ 10987654321098765432109876543210 001001x1000xxxxx01xxxx1xxxx1xxxx sel. */ - return 1820; + return 1825; } } } @@ -12999,7 +13010,7 @@ 10987654321098765432109876543210 101001x1000xxxxx010xxxxxxxxxxxxx ld1sh. */ - return 1570; + return 1575; } else { @@ -13007,7 +13018,7 @@ 10987654321098765432109876543210 101001x1000xxxxx011xxxxxxxxxxxxx ldff1sh. */ - return 1670; + return 1675; } } } @@ -13025,7 +13036,7 @@ 10987654321098765432109876543210 001001x11000xxxx01xxxx0xxxx0xxxx orr. */ - return 1756; + return 1761; } else { @@ -13033,7 +13044,7 @@ 10987654321098765432109876543210 001001x11000xxxx01xxxx0xxxx1xxxx orn. */ - return 1751; + return 1756; } } else @@ -13042,7 +13053,7 @@ 10987654321098765432109876543210 001001x11001xxxx01xxxx0xxxxxxxxx brkb. */ - return 1300; + return 1305; } } else @@ -13053,7 +13064,7 @@ 10987654321098765432109876543210 001001x1100xxxxx01xxxx1xxxx0xxxx nor. */ - return 1748; + return 1753; } else { @@ -13061,7 +13072,7 @@ 10987654321098765432109876543210 001001x1100xxxxx01xxxx1xxxx1xxxx nand. */ - return 1745; + return 1750; } } } @@ -13073,7 +13084,7 @@ 10987654321098765432109876543210 101001x1100xxxxx010xxxxxxxxxxxxx ld1sb. */ - return 1558; + return 1563; } else { @@ -13081,7 +13092,7 @@ 10987654321098765432109876543210 101001x1100xxxxx011xxxxxxxxxxxxx ldff1sb. */ - return 1658; + return 1663; } } } @@ -13102,7 +13113,7 @@ 10987654321098765432109876543210 001001x10100xxxx01xxxx0xxxx0xxxx ands. */ - return 1285; + return 1290; } else { @@ -13112,7 +13123,7 @@ 10987654321098765432109876543210 001001x101010xxx01xxxx0xxxx0xxxx brkas. */ - return 1299; + return 1304; } else { @@ -13120,7 +13131,7 @@ 10987654321098765432109876543210 001001x101011xxx01xxxx0xxxx0xxxx brkns. */ - return 1303; + return 1308; } } } @@ -13130,7 +13141,7 @@ 10987654321098765432109876543210 001001x1010xxxxx01xxxx1xxxx0xxxx eors. */ - return 1372; + return 1377; } } else @@ -13139,7 +13150,7 @@ 10987654321098765432109876543210 001001x1010xxxxx01xxxxxxxxx1xxxx bics. */ - return 1297; + return 1302; } } else @@ -13150,7 +13161,7 @@ 10987654321098765432109876543210 101001x1010xxxxx010xxxxxxxxxxxxx ld1w. */ - return 1589; + return 1594; } else { @@ -13158,7 +13169,7 @@ 10987654321098765432109876543210 101001x1010xxxxx011xxxxxxxxxxxxx ldff1w. */ - return 1689; + return 1694; } } } @@ -13176,7 +13187,7 @@ 10987654321098765432109876543210 001001x11100xxxx01xxxx0xxxx0xxxx orrs. */ - return 1757; + return 1762; } else { @@ -13184,7 +13195,7 @@ 10987654321098765432109876543210 001001x11101xxxx01xxxx0xxxx0xxxx brkbs. */ - return 1301; + return 1306; } } else @@ -13193,7 +13204,7 @@ 10987654321098765432109876543210 001001x1110xxxxx01xxxx1xxxx0xxxx nors. */ - return 1749; + return 1754; } } else @@ -13204,7 +13215,7 @@ 10987654321098765432109876543210 001001x1110xxxxx01xxxx0xxxx1xxxx orns. */ - return 1752; + return 1757; } else { @@ -13212,7 +13223,7 @@ 10987654321098765432109876543210 001001x1110xxxxx01xxxx1xxxx1xxxx nands. */ - return 1746; + return 1751; } } } @@ -13224,7 +13235,7 @@ 10987654321098765432109876543210 101001x1110xxxxx010xxxxxxxxxxxxx ld1sb. */ - return 1560; + return 1565; } else { @@ -13232,7 +13243,7 @@ 10987654321098765432109876543210 101001x1110xxxxx011xxxxxxxxxxxxx ldff1sb. */ - return 1662; + return 1667; } } } @@ -13250,7 +13261,7 @@ 10987654321098765432109876543210 x01001x1001xxxxx010xxxxxxxxxxxxx ld1sh. */ - return 1571; + return 1576; } else { @@ -13258,7 +13269,7 @@ 10987654321098765432109876543210 x01001x1101xxxxx010xxxxxxxxxxxxx ld1sb. */ - return 1559; + return 1564; } } else @@ -13269,7 +13280,7 @@ 10987654321098765432109876543210 x01001x1011xxxxx010xxxxxxxxxxxxx ld1w. */ - return 1590; + return 1595; } else { @@ -13277,7 +13288,7 @@ 10987654321098765432109876543210 x01001x1111xxxxx010xxxxxxxxxxxxx ld1d. */ - return 1512; + return 1517; } } } @@ -13291,7 +13302,7 @@ 10987654321098765432109876543210 x01001x1001xxxxx011xxxxxxxxxxxxx ldff1sh. */ - return 1672; + return 1677; } else { @@ -13299,7 +13310,7 @@ 10987654321098765432109876543210 x01001x1101xxxxx011xxxxxxxxxxxxx ldff1sb. */ - return 1660; + return 1665; } } else @@ -13310,7 +13321,7 @@ 10987654321098765432109876543210 x01001x1011xxxxx011xxxxxxxxxxxxx ldff1w. */ - return 1691; + return 1696; } else { @@ -13318,7 +13329,7 @@ 10987654321098765432109876543210 x01001x1111xxxxx011xxxxxxxxxxxxx ldff1d. */ - return 1636; + return 1641; } } } @@ -13338,7 +13349,7 @@ 10987654321098765432109876543210 011001x1xx0xxxxx010xxxxxxxx0xxxx fcmge. */ - return 1391; + return 1396; } else { @@ -13346,7 +13357,7 @@ 10987654321098765432109876543210 011001x1xx0xxxxx010xxxxxxxx1xxxx fcmgt. */ - return 1393; + return 1398; } } else @@ -13355,7 +13366,7 @@ 10987654321098765432109876543210 011001x1xx1xxxxx010xxxxxxxxxxxxx fnmla. */ - return 1455; + return 1460; } } else @@ -13366,7 +13377,7 @@ 10987654321098765432109876543210 111001x1x0xxxxxx010xxxxxxxxxxxxx str. */ - return 1941; + return 1946; } else { @@ -13376,7 +13387,7 @@ 10987654321098765432109876543210 111001x1x10xxxxx010xxxxxxxxxxxxx st1w. */ - return 1900; + return 1905; } else { @@ -13386,7 +13397,7 @@ 10987654321098765432109876543210 111001x1011xxxxx010xxxxxxxxxxxxx st1w. */ - return 1902; + return 1907; } else { @@ -13394,7 +13405,7 @@ 10987654321098765432109876543210 111001x1111xxxxx010xxxxxxxxxxxxx st1d. */ - return 1879; + return 1884; } } } @@ -13412,7 +13423,7 @@ 10987654321098765432109876543210 011001x1xx0xxxxx011xxxxxxxx0xxxx fcmeq. */ - return 1389; + return 1394; } else { @@ -13420,7 +13431,7 @@ 10987654321098765432109876543210 011001x1xx0xxxxx011xxxxxxxx1xxxx fcmne. */ - return 1397; + return 1402; } } else @@ -13433,7 +13444,7 @@ 10987654321098765432109876543210 111001x1000xxxxx011xxxxxxxxxxxxx stnt1w. */ - return 1938; + return 1943; } else { @@ -13441,7 +13452,7 @@ 10987654321098765432109876543210 111001x1100xxxxx011xxxxxxxxxxxxx stnt1d. */ - return 1934; + return 1939; } } else @@ -13452,7 +13463,7 @@ 10987654321098765432109876543210 111001x1010xxxxx011xxxxxxxxxxxxx st3w. */ - return 1922; + return 1927; } else { @@ -13460,7 +13471,7 @@ 10987654321098765432109876543210 111001x1110xxxxx011xxxxxxxxxxxxx st3d. */ - return 1918; + return 1923; } } } @@ -13473,7 +13484,7 @@ 10987654321098765432109876543210 011001x1xx1xxxxx011xxxxxxxxxxxxx fnmls. */ - return 1456; + return 1461; } else { @@ -13485,7 +13496,7 @@ 10987654321098765432109876543210 111001x1001xxxxx011xxxxxxxxxxxxx st2w. */ - return 1914; + return 1919; } else { @@ -13493,7 +13504,7 @@ 10987654321098765432109876543210 111001x1101xxxxx011xxxxxxxxxxxxx st2d. */ - return 1910; + return 1915; } } else @@ -13504,7 +13515,7 @@ 10987654321098765432109876543210 111001x1011xxxxx011xxxxxxxxxxxxx st4w. */ - return 1930; + return 1935; } else { @@ -13512,7 +13523,7 @@ 10987654321098765432109876543210 111001x1111xxxxx011xxxxxxxxxxxxx st4d. */ - return 1926; + return 1931; } } } @@ -13537,7 +13548,7 @@ 10987654321098765432109876543210 x01001x1xx0xxxxx100xxxxxxxx0xxxx cmpeq. */ - return 1318; + return 1323; } else { @@ -13545,7 +13556,7 @@ 10987654321098765432109876543210 x01001x1xx0xxxxx100xxxxxxxx1xxxx cmpne. */ - return 1341; + return 1346; } } else @@ -13560,7 +13571,7 @@ 10987654321098765432109876543210 x01001x10000xxxx101xxxxxxxxxxxxx ld1sh. */ - return 1577; + return 1582; } else { @@ -13568,7 +13579,7 @@ 10987654321098765432109876543210 x01001x11000xxxx101xxxxxxxxxxxxx ld1sb. */ - return 1564; + return 1569; } } else @@ -13579,7 +13590,7 @@ 10987654321098765432109876543210 x01001x10100xxxx101xxxxxxxxxxxxx ld1w. */ - return 1596; + return 1601; } else { @@ -13587,7 +13598,7 @@ 10987654321098765432109876543210 x01001x11100xxxx101xxxxxxxxxxxxx ld1sb. */ - return 1566; + return 1571; } } } @@ -13601,7 +13612,7 @@ 10987654321098765432109876543210 x01001x10001xxxx101xxxxxxxxxxxxx ldnf1sh. */ - return 1710; + return 1715; } else { @@ -13609,7 +13620,7 @@ 10987654321098765432109876543210 x01001x11001xxxx101xxxxxxxxxxxxx ldnf1sb. */ - return 1707; + return 1712; } } else @@ -13620,7 +13631,7 @@ 10987654321098765432109876543210 x01001x10101xxxx101xxxxxxxxxxxxx ldnf1w. */ - return 1713; + return 1718; } else { @@ -13628,7 +13639,7 @@ 10987654321098765432109876543210 x01001x11101xxxx101xxxxxxxxxxxxx ldnf1sb. */ - return 1709; + return 1714; } } } @@ -13648,7 +13659,7 @@ 10987654321098765432109876543210 001001x1x000xxxx11xxxxxxxxx0xxxx brkpa. */ - return 1304; + return 1309; } else { @@ -13656,7 +13667,7 @@ 10987654321098765432109876543210 001001x1x100xxxx11xxxxxxxxx0xxxx brkpas. */ - return 1305; + return 1310; } } else @@ -13669,7 +13680,7 @@ 10987654321098765432109876543210 001001x1xx010xx011xxxxxxxxx0xxxx ptest. */ - return 1790; + return 1795; } else { @@ -13683,7 +13694,7 @@ 10987654321098765432109876543210 001001x1xx011xx01100x0xxxxx0xxxx pfirst. */ - return 1760; + return 1765; } else { @@ -13691,7 +13702,7 @@ 10987654321098765432109876543210 001001x1xx011xx01110x0xxxxx0xxxx ptrue. */ - return 1791; + return 1796; } } else @@ -13702,7 +13713,7 @@ 10987654321098765432109876543210 001001x1x0011xx011x1x0xxxxx0xxxx rdffr. */ - return 1797; + return 1802; } else { @@ -13710,7 +13721,7 @@ 10987654321098765432109876543210 001001x1x1011xx011x1x0xxxxx0xxxx rdffrs. */ - return 1798; + return 1803; } } } @@ -13720,7 +13731,7 @@ 10987654321098765432109876543210 001001x1xx011xx011xxx1xxxxx0xxxx pfalse. */ - return 1759; + return 1764; } } } @@ -13734,7 +13745,7 @@ 10987654321098765432109876543210 001001x1xx01xxx111x0x0xxxxx0xxxx ptrues. */ - return 1792; + return 1797; } else { @@ -13742,7 +13753,7 @@ 10987654321098765432109876543210 001001x1xx01xxx111x1x0xxxxx0xxxx rdffr. */ - return 1796; + return 1801; } } else @@ -13751,7 +13762,7 @@ 10987654321098765432109876543210 001001x1xx01xxx111xxx1xxxxx0xxxx pnext. */ - return 1761; + return 1766; } } } @@ -13764,7 +13775,7 @@ 10987654321098765432109876543210 001001x1x00xxxxx11xxxxxxxxx1xxxx brkpb. */ - return 1306; + return 1311; } else { @@ -13772,7 +13783,7 @@ 10987654321098765432109876543210 001001x1x10xxxxx11xxxxxxxxx1xxxx brkpbs. */ - return 1307; + return 1312; } } } @@ -13788,7 +13799,7 @@ 10987654321098765432109876543210 101001x1000xxxxx110xxxxxxxxxxxxx ldnt1w. */ - return 1721; + return 1726; } else { @@ -13796,7 +13807,7 @@ 10987654321098765432109876543210 101001x1100xxxxx110xxxxxxxxxxxxx ldnt1d. */ - return 1717; + return 1722; } } else @@ -13807,7 +13818,7 @@ 10987654321098765432109876543210 101001x1010xxxxx110xxxxxxxxxxxxx ld3w. */ - return 1613; + return 1618; } else { @@ -13815,7 +13826,7 @@ 10987654321098765432109876543210 101001x1110xxxxx110xxxxxxxxxxxxx ld3d. */ - return 1609; + return 1614; } } } @@ -13829,7 +13840,7 @@ 10987654321098765432109876543210 101001x1000xxxxx111xxxxxxxxxxxxx ldnt1w. */ - return 1722; + return 1727; } else { @@ -13837,7 +13848,7 @@ 10987654321098765432109876543210 101001x1100xxxxx111xxxxxxxxxxxxx ldnt1d. */ - return 1718; + return 1723; } } else @@ -13848,7 +13859,7 @@ 10987654321098765432109876543210 101001x1010xxxxx111xxxxxxxxxxxxx ld3w. */ - return 1614; + return 1619; } else { @@ -13856,7 +13867,7 @@ 10987654321098765432109876543210 101001x1110xxxxx111xxxxxxxxxxxxx ld3d. */ - return 1610; + return 1615; } } } @@ -13885,7 +13896,7 @@ 10987654321098765432109876543210 011001x1xx000000100xxxxxxxxxxxxx fadd. */ - return 1380; + return 1385; } else { @@ -13893,7 +13904,7 @@ 10987654321098765432109876543210 011001x1xx000100100xxxxxxxxxxxxx fmaxnm. */ - return 1427; + return 1432; } } else @@ -13904,7 +13915,7 @@ 10987654321098765432109876543210 011001x1xx000010100xxxxxxxxxxxxx fmul. */ - return 1447; + return 1452; } else { @@ -13912,7 +13923,7 @@ 10987654321098765432109876543210 011001x1xx000110100xxxxxxxxxxxxx fmax. */ - return 1425; + return 1430; } } } @@ -13926,7 +13937,7 @@ 10987654321098765432109876543210 011001x1xx000001100xxxxxxxxxxxxx fsub. */ - return 1473; + return 1478; } else { @@ -13934,7 +13945,7 @@ 10987654321098765432109876543210 011001x1xx000101100xxxxxxxxxxxxx fminnm. */ - return 1433; + return 1438; } } else @@ -13945,7 +13956,7 @@ 10987654321098765432109876543210 011001x1xx000011100xxxxxxxxxxxxx fsubr. */ - return 1475; + return 1480; } else { @@ -13953,7 +13964,7 @@ 10987654321098765432109876543210 011001x1xx000111100xxxxxxxxxxxxx fmin. */ - return 1431; + return 1436; } } } @@ -13964,7 +13975,7 @@ 10987654321098765432109876543210 011001x1xx010xxx100xxxxxxxxxxxxx ftmad. */ - return 1477; + return 1482; } } else @@ -13981,7 +13992,7 @@ 10987654321098765432109876543210 011001x1xx001000100xxxxxxxxxxxxx fabd. */ - return 1375; + return 1380; } else { @@ -13989,7 +14000,7 @@ 10987654321098765432109876543210 011001x1xx011000100xxxxxxxxxxxxx fadd. */ - return 1381; + return 1386; } } else @@ -14000,7 +14011,7 @@ 10987654321098765432109876543210 011001x1xx001100100xxxxxxxxxxxxx fdivr. */ - return 1421; + return 1426; } else { @@ -14008,7 +14019,7 @@ 10987654321098765432109876543210 011001x1xx011100100xxxxxxxxxxxxx fmaxnm. */ - return 1428; + return 1433; } } } @@ -14022,7 +14033,7 @@ 10987654321098765432109876543210 011001x1xx001010100xxxxxxxxxxxxx fmulx. */ - return 1452; + return 1457; } else { @@ -14030,7 +14041,7 @@ 10987654321098765432109876543210 011001x1xx011010100xxxxxxxxxxxxx fmul. */ - return 1448; + return 1453; } } else @@ -14039,7 +14050,7 @@ 10987654321098765432109876543210 011001x1xx0x1110100xxxxxxxxxxxxx fmax. */ - return 1426; + return 1431; } } } @@ -14055,7 +14066,7 @@ 10987654321098765432109876543210 011001x1xx001001100xxxxxxxxxxxxx fscale. */ - return 1470; + return 1475; } else { @@ -14063,7 +14074,7 @@ 10987654321098765432109876543210 011001x1xx011001100xxxxxxxxxxxxx fsub. */ - return 1474; + return 1479; } } else @@ -14074,7 +14085,7 @@ 10987654321098765432109876543210 011001x1xx001101100xxxxxxxxxxxxx fdiv. */ - return 1420; + return 1425; } else { @@ -14082,7 +14093,7 @@ 10987654321098765432109876543210 011001x1xx011101100xxxxxxxxxxxxx fminnm. */ - return 1434; + return 1439; } } } @@ -14094,7 +14105,7 @@ 10987654321098765432109876543210 011001x1xx0x1011100xxxxxxxxxxxxx fsubr. */ - return 1476; + return 1481; } else { @@ -14102,7 +14113,7 @@ 10987654321098765432109876543210 011001x1xx0x1111100xxxxxxxxxxxxx fmin. */ - return 1432; + return 1437; } } } @@ -14116,7 +14127,7 @@ 10987654321098765432109876543210 011001x1xx0xxxxx110xxxxxxxx0xxxx fcmuo. */ - return 1398; + return 1403; } else { @@ -14124,7 +14135,7 @@ 10987654321098765432109876543210 011001x1xx0xxxxx110xxxxxxxx1xxxx facge. */ - return 1377; + return 1382; } } } @@ -14138,7 +14149,7 @@ 10987654321098765432109876543210 111001x1000xxxxx1x0xxxxxxxxxxxxx st1w. */ - return 1896; + return 1901; } else { @@ -14146,7 +14157,7 @@ 10987654321098765432109876543210 111001x1100xxxxx1x0xxxxxxxxxxxxx st1d. */ - return 1875; + return 1880; } } else @@ -14155,7 +14166,7 @@ 10987654321098765432109876543210 111001x1x10xxxxx1x0xxxxxxxxxxxxx st1w. */ - return 1901; + return 1906; } } } @@ -14179,7 +14190,7 @@ 10987654321098765432109876543210 011001x1xx000000101xxxxxxxxxxxxx frintn. */ - return 1464; + return 1469; } else { @@ -14187,7 +14198,7 @@ 10987654321098765432109876543210 011001x1xx010000101xxxxxxxxxxxxx scvtf. */ - return 1810; + return 1815; } } else @@ -14198,7 +14209,7 @@ 10987654321098765432109876543210 011001x1xx000100101xxxxxxxxxxxxx frinta. */ - return 1461; + return 1466; } else { @@ -14208,7 +14219,7 @@ 10987654321098765432109876543210 011001x1x0010100101xxxxxxxxxxxxx scvtf. */ - return 1809; + return 1814; } else { @@ -14218,7 +14229,7 @@ 10987654321098765432109876543210 011001x101010100101xxxxxxxxxxxxx scvtf. */ - return 1808; + return 1813; } else { @@ -14226,7 +14237,7 @@ 10987654321098765432109876543210 011001x111010100101xxxxxxxxxxxxx scvtf. */ - return 1812; + return 1817; } } } @@ -14242,7 +14253,7 @@ 10987654321098765432109876543210 011001x1xx000010101xxxxxxxxxxxxx frintm. */ - return 1463; + return 1468; } else { @@ -14250,7 +14261,7 @@ 10987654321098765432109876543210 011001x1xx010010101xxxxxxxxxxxxx scvtf. */ - return 1807; + return 1812; } } else @@ -14261,7 +14272,7 @@ 10987654321098765432109876543210 011001x1xx000110101xxxxxxxxxxxxx frintx. */ - return 1466; + return 1471; } else { @@ -14271,7 +14282,7 @@ 10987654321098765432109876543210 011001x10x010110101xxxxxxxxxxxxx scvtf. */ - return 1811; + return 1816; } else { @@ -14279,7 +14290,7 @@ 10987654321098765432109876543210 011001x11x010110101xxxxxxxxxxxxx scvtf. */ - return 1813; + return 1818; } } } @@ -14299,7 +14310,7 @@ 10987654321098765432109876543210 011001x1x0001000101xxxxxxxxxxxxx fcvt. */ - return 1400; + return 1405; } else { @@ -14307,7 +14318,7 @@ 10987654321098765432109876543210 011001x1x1001000101xxxxxxxxxxxxx fcvt. */ - return 1402; + return 1407; } } else @@ -14316,7 +14327,7 @@ 10987654321098765432109876543210 011001x1xx001100101xxxxxxxxxxxxx frecpx. */ - return 1460; + return 1465; } } else @@ -14329,7 +14340,7 @@ 10987654321098765432109876543210 011001x100001x10101xxxxxxxxxxxxx fcvtx. */ - return 2070; + return 2075; } else { @@ -14337,7 +14348,7 @@ 10987654321098765432109876543210 011001x110001x10101xxxxxxxxxxxxx bfcvt. */ - return 2422; + return 2425; } } else @@ -14346,7 +14357,7 @@ 10987654321098765432109876543210 011001x1x1001x10101xxxxxxxxxxxxx fcvt. */ - return 1404; + return 1409; } } } @@ -14360,7 +14371,7 @@ 10987654321098765432109876543210 011001x100011xx0101xxxxxxxxxxxxx flogb. */ - return 2072; + return 2077; } else { @@ -14368,7 +14379,7 @@ 10987654321098765432109876543210 011001x110011xx0101xxxxxxxxxxxxx fcvtzs. */ - return 1409; + return 1414; } } else @@ -14381,7 +14392,7 @@ 10987654321098765432109876543210 011001x1x1011000101xxxxxxxxxxxxx fcvtzs. */ - return 1410; + return 1415; } else { @@ -14391,7 +14402,7 @@ 10987654321098765432109876543210 011001x101011100101xxxxxxxxxxxxx fcvtzs. */ - return 1407; + return 1412; } else { @@ -14399,7 +14410,7 @@ 10987654321098765432109876543210 011001x111011100101xxxxxxxxxxxxx fcvtzs. */ - return 1411; + return 1416; } } } @@ -14411,7 +14422,7 @@ 10987654321098765432109876543210 011001x1x1011010101xxxxxxxxxxxxx fcvtzs. */ - return 1406; + return 1411; } else { @@ -14421,7 +14432,7 @@ 10987654321098765432109876543210 011001x101011110101xxxxxxxxxxxxx fcvtzs. */ - return 1408; + return 1413; } else { @@ -14429,7 +14440,7 @@ 10987654321098765432109876543210 011001x111011110101xxxxxxxxxxxxx fcvtzs. */ - return 1412; + return 1417; } } } @@ -14451,7 +14462,7 @@ 10987654321098765432109876543210 011001x1xx000001101xxxxxxxxxxxxx frintp. */ - return 1465; + return 1470; } else { @@ -14459,7 +14470,7 @@ 10987654321098765432109876543210 011001x1xx010001101xxxxxxxxxxxxx ucvtf. */ - return 1962; + return 1967; } } else @@ -14472,7 +14483,7 @@ 10987654321098765432109876543210 011001x1x0001001101xxxxxxxxxxxxx fcvt. */ - return 1401; + return 1406; } else { @@ -14480,7 +14491,7 @@ 10987654321098765432109876543210 011001x1x1001001101xxxxxxxxxxxxx fcvt. */ - return 1403; + return 1408; } } else @@ -14489,7 +14500,7 @@ 10987654321098765432109876543210 011001x1xx011001101xxxxxxxxxxxxx fcvtzu. */ - return 1417; + return 1422; } } } @@ -14503,7 +14514,7 @@ 10987654321098765432109876543210 011001x1x00x0101101xxxxxxxxxxxxx ucvtf. */ - return 1961; + return 1966; } else { @@ -14513,7 +14524,7 @@ 10987654321098765432109876543210 011001x1010x0101101xxxxxxxxxxxxx ucvtf. */ - return 1960; + return 1965; } else { @@ -14521,7 +14532,7 @@ 10987654321098765432109876543210 011001x1110x0101101xxxxxxxxxxxxx ucvtf. */ - return 1964; + return 1969; } } } @@ -14533,7 +14544,7 @@ 10987654321098765432109876543210 011001x1xx001101101xxxxxxxxxxxxx fsqrt. */ - return 1471; + return 1476; } else { @@ -14543,7 +14554,7 @@ 10987654321098765432109876543210 011001x1x0011101101xxxxxxxxxxxxx fcvtzu. */ - return 1416; + return 1421; } else { @@ -14553,7 +14564,7 @@ 10987654321098765432109876543210 011001x101011101101xxxxxxxxxxxxx fcvtzu. */ - return 1414; + return 1419; } else { @@ -14561,7 +14572,7 @@ 10987654321098765432109876543210 011001x111011101101xxxxxxxxxxxxx fcvtzu. */ - return 1418; + return 1423; } } } @@ -14580,7 +14591,7 @@ 10987654321098765432109876543210 011001x1xx000011101xxxxxxxxxxxxx frintz. */ - return 1467; + return 1472; } else { @@ -14588,7 +14599,7 @@ 10987654321098765432109876543210 011001x1xx010011101xxxxxxxxxxxxx ucvtf. */ - return 1959; + return 1964; } } else @@ -14599,7 +14610,7 @@ 10987654321098765432109876543210 011001x1xx001011101xxxxxxxxxxxxx fcvt. */ - return 1405; + return 1410; } else { @@ -14607,7 +14618,7 @@ 10987654321098765432109876543210 011001x1xx011011101xxxxxxxxxxxxx fcvtzu. */ - return 1413; + return 1418; } } } @@ -14621,7 +14632,7 @@ 10987654321098765432109876543210 011001x1xx000111101xxxxxxxxxxxxx frinti. */ - return 1462; + return 1467; } else { @@ -14631,7 +14642,7 @@ 10987654321098765432109876543210 011001x10x010111101xxxxxxxxxxxxx ucvtf. */ - return 1963; + return 1968; } else { @@ -14639,7 +14650,7 @@ 10987654321098765432109876543210 011001x11x010111101xxxxxxxxxxxxx ucvtf. */ - return 1965; + return 1970; } } } @@ -14651,7 +14662,7 @@ 10987654321098765432109876543210 011001x10x0x1111101xxxxxxxxxxxxx fcvtzu. */ - return 1415; + return 1420; } else { @@ -14659,7 +14670,7 @@ 10987654321098765432109876543210 011001x11x0x1111101xxxxxxxxxxxxx fcvtzu. */ - return 1419; + return 1424; } } } @@ -14676,7 +14687,7 @@ 10987654321098765432109876543210 111001x1000xxxxx101xxxxxxxxxxxxx st1w. */ - return 1897; + return 1902; } else { @@ -14684,7 +14695,7 @@ 10987654321098765432109876543210 111001x1100xxxxx101xxxxxxxxxxxxx st1d. */ - return 1876; + return 1881; } } else @@ -14695,7 +14706,7 @@ 10987654321098765432109876543210 111001x1010xxxxx101xxxxxxxxxxxxx st1w. */ - return 1904; + return 1909; } else { @@ -14703,7 +14714,7 @@ 10987654321098765432109876543210 111001x1110xxxxx101xxxxxxxxxxxxx st1d. */ - return 1880; + return 1885; } } } @@ -14716,7 +14727,7 @@ 10987654321098765432109876543210 011001x1xx0xxxxx111xxxxxxxxxxxxx facgt. */ - return 1378; + return 1383; } else { @@ -14726,7 +14737,7 @@ 10987654321098765432109876543210 111001x1xx00xxxx111xxxxxxxxxxxxx st1w. */ - return 1905; + return 1910; } else { @@ -14738,7 +14749,7 @@ 10987654321098765432109876543210 111001x10001xxxx111xxxxxxxxxxxxx stnt1w. */ - return 1939; + return 1944; } else { @@ -14746,7 +14757,7 @@ 10987654321098765432109876543210 111001x11001xxxx111xxxxxxxxxxxxx stnt1d. */ - return 1935; + return 1940; } } else @@ -14757,7 +14768,7 @@ 10987654321098765432109876543210 111001x10101xxxx111xxxxxxxxxxxxx st3w. */ - return 1923; + return 1928; } else { @@ -14765,7 +14776,7 @@ 10987654321098765432109876543210 111001x11101xxxx111xxxxxxxxxxxxx st3d. */ - return 1919; + return 1924; } } } @@ -14796,7 +14807,7 @@ 10987654321098765432109876543210 001001x1xx10000010xxxxxxxxxxxxxx cntp. */ - return 1347; + return 1352; } else { @@ -14810,7 +14821,7 @@ 10987654321098765432109876543210 001001x1xx10100010x000xxxxxxxxxx sqincp. */ - return 1854; + return 1859; } else { @@ -14818,7 +14829,7 @@ 10987654321098765432109876543210 001001x1xx10100010x100xxxxxxxxxx wrffr. */ - return 2027; + return 2032; } } else @@ -14827,7 +14838,7 @@ 10987654321098765432109876543210 001001x1xx10100010xx10xxxxxxxxxx sqincp. */ - return 1856; + return 1861; } } else @@ -14836,7 +14847,7 @@ 10987654321098765432109876543210 001001x1xx10100010xxx1xxxxxxxxxx sqincp. */ - return 1855; + return 1860; } } } @@ -14850,7 +14861,7 @@ 10987654321098765432109876543210 001001x1xx10x10010x00xxxxxxxxxxx incp. */ - return 1485; + return 1490; } else { @@ -14858,7 +14869,7 @@ 10987654321098765432109876543210 001001x1xx10x10010x10xxxxxxxxxxx setffr. */ - return 1821; + return 1826; } } else @@ -14867,7 +14878,7 @@ 10987654321098765432109876543210 001001x1xx10x10010xx1xxxxxxxxxxx incp. */ - return 1486; + return 1491; } } } @@ -14881,7 +14892,7 @@ 10987654321098765432109876543210 001001x1xx10xx1010xx00xxxxxxxxxx sqdecp. */ - return 1840; + return 1845; } else { @@ -14889,7 +14900,7 @@ 10987654321098765432109876543210 001001x1xx10xx1010xx10xxxxxxxxxx sqdecp. */ - return 1842; + return 1847; } } else @@ -14898,7 +14909,7 @@ 10987654321098765432109876543210 001001x1xx10xx1010xxx1xxxxxxxxxx sqdecp. */ - return 1841; + return 1846; } } } @@ -14916,7 +14927,7 @@ 10987654321098765432109876543210 001001x1xx10x00110xx00xxxxxxxxxx uqincp. */ - return 2002; + return 2007; } else { @@ -14924,7 +14935,7 @@ 10987654321098765432109876543210 001001x1xx10x10110xx00xxxxxxxxxx decp. */ - return 1360; + return 1365; } } else @@ -14933,7 +14944,7 @@ 10987654321098765432109876543210 001001x1xx10xx1110xx00xxxxxxxxxx uqdecp. */ - return 1988; + return 1993; } } else @@ -14946,7 +14957,7 @@ 10987654321098765432109876543210 001001x1xx10x00110xx10xxxxxxxxxx uqincp. */ - return 2003; + return 2008; } else { @@ -14954,7 +14965,7 @@ 10987654321098765432109876543210 001001x1xx10x10110xx10xxxxxxxxxx decp. */ - return 1361; + return 1366; } } else @@ -14963,7 +14974,7 @@ 10987654321098765432109876543210 001001x1xx10xx1110xx10xxxxxxxxxx uqdecp. */ - return 1989; + return 1994; } } } @@ -14975,7 +14986,7 @@ 10987654321098765432109876543210 001001x1xx10xx0110xxx1xxxxxxxxxx uqincp. */ - return 2004; + return 2009; } else { @@ -14983,7 +14994,7 @@ 10987654321098765432109876543210 001001x1xx10xx1110xxx1xxxxxxxxxx uqdecp. */ - return 1990; + return 1995; } } } @@ -14998,7 +15009,7 @@ 10987654321098765432109876543210 101001x10010xxxx10xxxxxxxxxxxxxx ld1sh. */ - return 1578; + return 1583; } else { @@ -15006,7 +15017,7 @@ 10987654321098765432109876543210 101001x11010xxxx10xxxxxxxxxxxxxx ld1sb. */ - return 1565; + return 1570; } } else @@ -15017,7 +15028,7 @@ 10987654321098765432109876543210 101001x10110xxxx10xxxxxxxxxxxxxx ld1w. */ - return 1597; + return 1602; } else { @@ -15025,7 +15036,7 @@ 10987654321098765432109876543210 101001x11110xxxx10xxxxxxxxxxxxxx ld1d. */ - return 1517; + return 1522; } } } @@ -15040,7 +15051,7 @@ 10987654321098765432109876543210 x01001x10011xxxx10xxxxxxxxxxxxxx ldnf1sh. */ - return 1711; + return 1716; } else { @@ -15048,7 +15059,7 @@ 10987654321098765432109876543210 x01001x11011xxxx10xxxxxxxxxxxxxx ldnf1sb. */ - return 1708; + return 1713; } } else @@ -15059,7 +15070,7 @@ 10987654321098765432109876543210 x01001x10111xxxx10xxxxxxxxxxxxxx ldnf1w. */ - return 1714; + return 1719; } else { @@ -15067,7 +15078,7 @@ 10987654321098765432109876543210 x01001x11111xxxx10xxxxxxxxxxxxxx ldnf1d. */ - return 1703; + return 1708; } } } @@ -15090,7 +15101,7 @@ 10987654321098765432109876543210 001001x1xx10000011xxxxxxxxxxxxxx add. */ - return 1274; + return 1279; } else { @@ -15098,7 +15109,7 @@ 10987654321098765432109876543210 001001x1xx11000011xxxxxxxxxxxxxx mul. */ - return 1743; + return 1748; } } else @@ -15109,7 +15120,7 @@ 10987654321098765432109876543210 001001x1xx10100011xxxxxxxxxxxxxx smax. */ - return 1822; + return 1827; } else { @@ -15117,7 +15128,7 @@ 10987654321098765432109876543210 001001x1xx11100011xxxxxxxxxxxxxx dup. */ - return 1366; + return 1371; } } } @@ -15127,7 +15138,7 @@ 10987654321098765432109876543210 001001x1xx1xx10011xxxxxxxxxxxxxx sqadd. */ - return 1831; + return 1836; } } else @@ -15138,7 +15149,7 @@ 10987654321098765432109876543210 001001x1xx1xx01011xxxxxxxxxxxxxx smin. */ - return 1825; + return 1830; } else { @@ -15146,7 +15157,7 @@ 10987654321098765432109876543210 001001x1xx1xx11011xxxxxxxxxxxxxx sqsub. */ - return 1861; + return 1866; } } } @@ -15162,7 +15173,7 @@ 10987654321098765432109876543210 001001x1xx1x000111xxxxxxxxxxxxxx sub. */ - return 1943; + return 1948; } else { @@ -15172,7 +15183,7 @@ 10987654321098765432109876543210 001001x1xx10100111xxxxxxxxxxxxxx umax. */ - return 1971; + return 1976; } else { @@ -15180,7 +15191,7 @@ 10987654321098765432109876543210 001001x1xx11100111xxxxxxxxxxxxxx fdup. */ - return 1422; + return 1427; } } } @@ -15190,7 +15201,7 @@ 10987654321098765432109876543210 001001x1xx1xx10111xxxxxxxxxxxxxx uqadd. */ - return 1979; + return 1984; } } else @@ -15203,7 +15214,7 @@ 10987654321098765432109876543210 001001x1xx1x001111xxxxxxxxxxxxxx subr. */ - return 1945; + return 1950; } else { @@ -15211,7 +15222,7 @@ 10987654321098765432109876543210 001001x1xx1x101111xxxxxxxxxxxxxx umin. */ - return 1974; + return 1979; } } else @@ -15220,7 +15231,7 @@ 10987654321098765432109876543210 001001x1xx1xx11111xxxxxxxxxxxxxx uqsub. */ - return 2009; + return 2014; } } } @@ -15237,7 +15248,7 @@ 10987654321098765432109876543210 101001x1001xxxxx110xxxxxxxxxxxxx ld2w. */ - return 1605; + return 1610; } else { @@ -15245,7 +15256,7 @@ 10987654321098765432109876543210 101001x1101xxxxx110xxxxxxxxxxxxx ld2d. */ - return 1601; + return 1606; } } else @@ -15256,7 +15267,7 @@ 10987654321098765432109876543210 101001x1011xxxxx110xxxxxxxxxxxxx ld4w. */ - return 1621; + return 1626; } else { @@ -15264,7 +15275,7 @@ 10987654321098765432109876543210 101001x1111xxxxx110xxxxxxxxxxxxx ld4d. */ - return 1617; + return 1622; } } } @@ -15278,7 +15289,7 @@ 10987654321098765432109876543210 101001x1001xxxxx111xxxxxxxxxxxxx ld2w. */ - return 1606; + return 1611; } else { @@ -15286,7 +15297,7 @@ 10987654321098765432109876543210 101001x1101xxxxx111xxxxxxxxxxxxx ld2d. */ - return 1602; + return 1607; } } else @@ -15297,7 +15308,7 @@ 10987654321098765432109876543210 101001x1011xxxxx111xxxxxxxxxxxxx ld4w. */ - return 1622; + return 1627; } else { @@ -15305,7 +15316,7 @@ 10987654321098765432109876543210 101001x1111xxxxx111xxxxxxxxxxxxx ld4d. */ - return 1618; + return 1623; } } } @@ -15324,7 +15335,7 @@ 10987654321098765432109876543210 011001x1xx1xxxxx100xxxxxxxxxxxxx fmad. */ - return 1424; + return 1429; } else { @@ -15332,7 +15343,7 @@ 10987654321098765432109876543210 011001x1xx1xxxxx110xxxxxxxxxxxxx fnmad. */ - return 1454; + return 1459; } } else @@ -15345,7 +15356,7 @@ 10987654321098765432109876543210 111001x1001xxxxx1x0xxxxxxxxxxxxx st1w. */ - return 1898; + return 1903; } else { @@ -15353,7 +15364,7 @@ 10987654321098765432109876543210 111001x1101xxxxx1x0xxxxxxxxxxxxx st1d. */ - return 1877; + return 1882; } } else @@ -15362,7 +15373,7 @@ 10987654321098765432109876543210 111001x1x11xxxxx1x0xxxxxxxxxxxxx st1w. */ - return 1903; + return 1908; } } } @@ -15376,7 +15387,7 @@ 10987654321098765432109876543210 011001x1xx1xxxxx101xxxxxxxxxxxxx fmsb. */ - return 1445; + return 1450; } else { @@ -15388,7 +15399,7 @@ 10987654321098765432109876543210 111001x1001xxxxx101xxxxxxxxxxxxx st1w. */ - return 1899; + return 1904; } else { @@ -15396,7 +15407,7 @@ 10987654321098765432109876543210 111001x1101xxxxx101xxxxxxxxxxxxx st1d. */ - return 1878; + return 1883; } } else @@ -15405,7 +15416,7 @@ 10987654321098765432109876543210 111001x1x11xxxxx101xxxxxxxxxxxxx st1w. */ - return 1906; + return 1911; } } } @@ -15417,7 +15428,7 @@ 10987654321098765432109876543210 011001x1xx1xxxxx111xxxxxxxxxxxxx fnmsb. */ - return 1457; + return 1462; } else { @@ -15429,7 +15440,7 @@ 10987654321098765432109876543210 111001x10x10xxxx111xxxxxxxxxxxxx st1w. */ - return 1907; + return 1912; } else { @@ -15437,7 +15448,7 @@ 10987654321098765432109876543210 111001x11x10xxxx111xxxxxxxxxxxxx st1d. */ - return 1881; + return 1886; } } else @@ -15450,7 +15461,7 @@ 10987654321098765432109876543210 111001x10011xxxx111xxxxxxxxxxxxx st2w. */ - return 1915; + return 1920; } else { @@ -15458,7 +15469,7 @@ 10987654321098765432109876543210 111001x11011xxxx111xxxxxxxxxxxxx st2d. */ - return 1911; + return 1916; } } else @@ -15469,7 +15480,7 @@ 10987654321098765432109876543210 111001x10111xxxx111xxxxxxxxxxxxx st4w. */ - return 1931; + return 1936; } else { @@ -15477,7 +15488,7 @@ 10987654321098765432109876543210 111001x11111xxxx111xxxxxxxxxxxxx st4d. */ - return 1927; + return 1932; } } } @@ -15559,7 +15570,7 @@ 10987654321098765432109876543210 11010100x11xxxxxxxxxxxxxxxx0xx00 tcancel. */ - return 1191; + return 1192; } } } @@ -15579,7 +15590,7 @@ 10987654321098765432109876543210 11010100xx1xxxxxxxxxxxxxxxx0xx10 dcps2. */ - return 755; + return 756; } } } @@ -15601,7 +15612,7 @@ 10987654321098765432109876543210 11010100xx1xxxxxxxxxxxxxxxx0xx01 dcps1. */ - return 754; + return 755; } } else @@ -15620,7 +15631,7 @@ 10987654321098765432109876543210 11010100xx1xxxxxxxxxxxxxxxx0xx11 dcps3. */ - return 756; + return 757; } } } @@ -15775,7 +15786,7 @@ 10987654321098765432109876543210 x1010101xx0xxxxxxxxxxxxxxxxxxxxx xaflag. */ - return 810; + return 811; } else { @@ -15805,7 +15816,7 @@ 10987654321098765432109876543210 x1010101xx1xxxxxxxxxxxxxxxxxxxxx tstart. */ - return 1188; + return 1189; } else { @@ -15848,7 +15859,7 @@ 10987654321098765432109876543210 xx110110xxxxxxxxxxxxxxxxxxxxxxxx tbz. */ - return 1235; + return 1240; } } else @@ -15867,7 +15878,7 @@ 10987654321098765432109876543210 xx110111xxxxxxxxxxxxxxxxxxxxxxxx tbnz. */ - return 1236; + return 1241; } } } @@ -15899,7 +15910,7 @@ 10987654321098765432109876543210 xx10110000xxxxxxxxxxxxxxxxxxxxxx stnp. */ - return 972; + return 973; } } else @@ -15951,7 +15962,7 @@ 10987654321098765432109876543210 xx10110100xxxxxxxxxxxxxxxxxxxxxx stp. */ - return 976; + return 977; } } } @@ -16015,7 +16026,7 @@ 10987654321098765432109876543210 xx10110x10xxxxxxxxxxxxxxxxxxxxxx stp. */ - return 982; + return 983; } } } @@ -16039,7 +16050,7 @@ 10987654321098765432109876543210 xx10110001xxxxxxxxxxxxxxxxxxxxxx ldnp. */ - return 973; + return 974; } } else @@ -16091,7 +16102,7 @@ 10987654321098765432109876543210 xx10110101xxxxxxxxxxxxxxxxxxxxxx ldp. */ - return 977; + return 978; } } } @@ -16155,7 +16166,7 @@ 10987654321098765432109876543210 xx10110x11xxxxxxxxxxxxxxxxxxxxxx ldp. */ - return 983; + return 984; } } } @@ -16170,7 +16181,7 @@ 10987654321098765432109876543210 xx011100xxxxxxxxxxxxxxxxxxxxxxxx ldr. */ - return 987; + return 988; } else { @@ -16184,7 +16195,7 @@ 10987654321098765432109876543210 xx111100x0xxxxxxxxxx00xxxxxxxxxx stur. */ - return 924; + return 925; } else { @@ -16192,7 +16203,7 @@ 10987654321098765432109876543210 xx111100x1xxxxxxxxxx00xxxxxxxxxx ldur. */ - return 925; + return 926; } } else @@ -16203,7 +16214,7 @@ 10987654321098765432109876543210 xx111100x0xxxxxxxxxx10xxxxxxxxxx str. */ - return 903; + return 904; } else { @@ -16211,7 +16222,7 @@ 10987654321098765432109876543210 xx111100x1xxxxxxxxxx10xxxxxxxxxx ldr. */ - return 904; + return 905; } } } @@ -16223,7 +16234,7 @@ 10987654321098765432109876543210 xx111100x0xxxxxxxxxxx1xxxxxxxxxx str. */ - return 872; + return 873; } else { @@ -16231,7 +16242,7 @@ 10987654321098765432109876543210 xx111100x1xxxxxxxxxxx1xxxxxxxxxx ldr. */ - return 873; + return 874; } } } @@ -16244,7 +16255,7 @@ 10987654321098765432109876543210 xxx11101x0xxxxxxxxxxxxxxxxxxxxxx str. */ - return 891; + return 892; } else { @@ -16252,7 +16263,7 @@ 10987654321098765432109876543210 xxx11101x1xxxxxxxxxxxxxxxxxxxxxx ldr. */ - return 892; + return 893; } } } @@ -16406,7 +16417,7 @@ 10987654321098765432109876543210 0x001110xx0xxxxx1x1001xxxxxxxxxx smmla. */ - return 2413; + return 2416; } } } @@ -16439,7 +16450,7 @@ 10987654321098765432109876543210 0x001110xx0xxxxx1x0101xxxxxxxxxx sdot. */ - return 2337; + return 2342; } } else @@ -16513,7 +16524,7 @@ 10987654321098765432109876543210 0x001110xx0xxxxx1x1011xxxxxxxxxx usmmla. */ - return 2415; + return 2418; } } } @@ -16546,7 +16557,7 @@ 10987654321098765432109876543210 0x001110xx0xxxxx1x0111xxxxxxxxxx usdot. */ - return 2416; + return 2419; } } else @@ -16593,7 +16604,7 @@ 10987654321098765432109876543210 1x001110000xxxxxxxxxxxxxxxxxxxxx eor3. */ - return 2344; + return 2349; } else { @@ -16601,7 +16612,7 @@ 10987654321098765432109876543210 1x001110100xxxxxxxxxxxxxxxxxxxxx xar. */ - return 2346; + return 2351; } } else @@ -16612,7 +16623,7 @@ 10987654321098765432109876543210 1x001110x10xxxxx0xxxxxxxxxxxxxxx sm3ss1. */ - return 2348; + return 2353; } else { @@ -16626,7 +16637,7 @@ 10987654321098765432109876543210 1x001110010xxxxx1xxx00xxxxxxxxxx sm3tt1a. */ - return 2349; + return 2354; } else { @@ -16634,7 +16645,7 @@ 10987654321098765432109876543210 1x001110110xxxxx1xxx00xxxxxxxxxx sha512su0. */ - return 2342; + return 2347; } } else @@ -16643,7 +16654,7 @@ 10987654321098765432109876543210 1x001110x10xxxxx1xxx10xxxxxxxxxx sm3tt2a. */ - return 2351; + return 2356; } } else @@ -16656,7 +16667,7 @@ 10987654321098765432109876543210 1x001110010xxxxx1xxx01xxxxxxxxxx sm3tt1b. */ - return 2350; + return 2355; } else { @@ -16664,7 +16675,7 @@ 10987654321098765432109876543210 1x001110110xxxxx1xxx01xxxxxxxxxx sm4e. */ - return 2355; + return 2360; } } else @@ -16673,7 +16684,7 @@ 10987654321098765432109876543210 1x001110x10xxxxx1xxx11xxxxxxxxxx sm3tt2b. */ - return 2352; + return 2357; } } } @@ -16854,7 +16865,7 @@ 10987654321098765432109876543210 xx101110xx0xxxxx100101xxxxxxxxxx udot. */ - return 2336; + return 2341; } } else @@ -16885,7 +16896,7 @@ 10987654321098765432109876543210 xx101110xx0xxxxx101x01xxxxxxxxxx ummla. */ - return 2414; + return 2417; } else { @@ -16904,7 +16915,7 @@ 10987654321098765432109876543210 xx101110xx0xxxxx1x1011xxxxxxxxxx bfmmla. */ - return 2430; + return 2433; } else { @@ -16914,7 +16925,7 @@ 10987654321098765432109876543210 xx1011100x0xxxxx1x1111xxxxxxxxxx bfdot. */ - return 2428; + return 2431; } else { @@ -16924,7 +16935,7 @@ 10987654321098765432109876543210 x01011101x0xxxxx1x1111xxxxxxxxxx bfmlalb. */ - return 2435; + return 2438; } else { @@ -16932,7 +16943,7 @@ 10987654321098765432109876543210 x11011101x0xxxxx1x1111xxxxxxxxxx bfmlalt. */ - return 2434; + return 2437; } } } @@ -16956,7 +16967,7 @@ 10987654321098765432109876543210 x0011110xx0xxx00xxxxxxxxxxxxxxxx fcvtzs. */ - return 763; + return 764; } else { @@ -16964,7 +16975,7 @@ 10987654321098765432109876543210 x0011110xx0xxx10xxxxxxxxxxxxxxxx scvtf. */ - return 759; + return 760; } } else @@ -16975,7 +16986,7 @@ 10987654321098765432109876543210 x0011110xx0xxx01xxxxxxxxxxxxxxxx fcvtzu. */ - return 765; + return 766; } else { @@ -16983,7 +16994,7 @@ 10987654321098765432109876543210 x0011110xx0xxx11xxxxxxxxxxxxxxxx ucvtf. */ - return 761; + return 762; } } } @@ -17516,7 +17527,7 @@ 10987654321098765432109876543210 000011101x1xxxx1011010xxxxxxxxxx bfcvtn. */ - return 2431; + return 2434; } else { @@ -17524,7 +17535,7 @@ 10987654321098765432109876543210 010011101x1xxxx1011010xxxxxxxxxx bfcvtn2. */ - return 2432; + return 2435; } } } @@ -17842,7 +17853,7 @@ 10987654321098765432109876543210 1x001110xx1xxxxx0xxxxxxxxxxxxxxx bcax. */ - return 2347; + return 2352; } } else @@ -18453,7 +18464,7 @@ 10987654321098765432109876543210 11001110xx1xxxxx100000xxxxxxxxxx sha512h. */ - return 2340; + return 2345; } } } @@ -18505,7 +18516,7 @@ 10987654321098765432109876543210 11001110xx1xxxxx110000xxxxxxxxxx sm3partw1. */ - return 2353; + return 2358; } } } @@ -18748,7 +18759,7 @@ 10987654321098765432109876543210 1x001110xx1xxxxx100010xxxxxxxxxx sha512su1. */ - return 2343; + return 2348; } } else @@ -18824,7 +18835,7 @@ 10987654321098765432109876543210 1x0011100x1xxxxx110010xxxxxxxxxx sm4ekey. */ - return 2356; + return 2361; } } else @@ -19650,7 +19661,7 @@ 10987654321098765432109876543210 1x001110xx1xxxxx100001xxxxxxxxxx sha512h2. */ - return 2341; + return 2346; } } else @@ -19682,7 +19693,7 @@ 10987654321098765432109876543210 1x0011100x1xxxxx110001xxxxxxxxxx sm3partw2. */ - return 2354; + return 2359; } } else @@ -19922,7 +19933,7 @@ 10987654321098765432109876543210 1x001110xx1xxxxx100011xxxxxxxxxx rax1. */ - return 2345; + return 2350; } } else @@ -19954,7 +19965,7 @@ 10987654321098765432109876543210 x01011100x1xxxxx110011xxxxxxxxxx fmlal2. */ - return 2359; + return 2364; } else { @@ -19962,7 +19973,7 @@ 10987654321098765432109876543210 x11011100x1xxxxx110011xxxxxxxxxx fmlal2. */ - return 2363; + return 2368; } } } @@ -19984,7 +19995,7 @@ 10987654321098765432109876543210 x01011101x1xxxxx110011xxxxxxxxxx fmlsl2. */ - return 2360; + return 2365; } else { @@ -19992,7 +20003,7 @@ 10987654321098765432109876543210 x11011101x1xxxxx110011xxxxxxxxxx fmlsl2. */ - return 2364; + return 2369; } } } @@ -20031,7 +20042,7 @@ 10987654321098765432109876543210 x00011100x1xxxxx111011xxxxxxxxxx fmlal. */ - return 2357; + return 2362; } else { @@ -20039,7 +20050,7 @@ 10987654321098765432109876543210 x10011100x1xxxxx111011xxxxxxxxxx fmlal. */ - return 2361; + return 2366; } } else @@ -20061,7 +20072,7 @@ 10987654321098765432109876543210 x00011101x1xxxxx111011xxxxxxxxxx fmlsl. */ - return 2358; + return 2363; } else { @@ -20069,7 +20080,7 @@ 10987654321098765432109876543210 x10011101x1xxxxx111011xxxxxxxxxx fmlsl. */ - return 2362; + return 2367; } } else @@ -20199,7 +20210,7 @@ 10987654321098765432109876543210 xxx11110xx100000x00000xxxxxxxxxx fcvtns. */ - return 767; + return 768; } else { @@ -20207,7 +20218,7 @@ 10987654321098765432109876543210 xxx11110xx110000x00000xxxxxxxxxx fcvtms. */ - return 787; + return 788; } } else @@ -20218,7 +20229,7 @@ 10987654321098765432109876543210 xxx11110xx101000x00000xxxxxxxxxx fcvtps. */ - return 783; + return 784; } else { @@ -20226,7 +20237,7 @@ 10987654321098765432109876543210 xxx11110xx111000x00000xxxxxxxxxx fcvtzs. */ - return 791; + return 792; } } } @@ -20236,7 +20247,7 @@ 10987654321098765432109876543210 xxx11110xx1xx100x00000xxxxxxxxxx fcvtas. */ - return 775; + return 776; } } else @@ -20247,7 +20258,7 @@ 10987654321098765432109876543210 xxx11110xx1xx010x00000xxxxxxxxxx scvtf. */ - return 771; + return 772; } else { @@ -20257,7 +20268,7 @@ 10987654321098765432109876543210 xxx11110xx1x0110x00000xxxxxxxxxx fmov. */ - return 779; + return 780; } else { @@ -20267,7 +20278,7 @@ 10987654321098765432109876543210 xxx11110xx101110x00000xxxxxxxxxx fmov. */ - return 795; + return 796; } else { @@ -20275,7 +20286,7 @@ 10987654321098765432109876543210 xxx11110xx111110x00000xxxxxxxxxx fjcvtzs. */ - return 797; + return 798; } } } @@ -20295,7 +20306,7 @@ 10987654321098765432109876543210 xxx11110xx100001x00000xxxxxxxxxx fcvtnu. */ - return 769; + return 770; } else { @@ -20303,7 +20314,7 @@ 10987654321098765432109876543210 xxx11110xx110001x00000xxxxxxxxxx fcvtmu. */ - return 789; + return 790; } } else @@ -20314,7 +20325,7 @@ 10987654321098765432109876543210 xxx11110xx101001x00000xxxxxxxxxx fcvtpu. */ - return 785; + return 786; } else { @@ -20322,7 +20333,7 @@ 10987654321098765432109876543210 xxx11110xx111001x00000xxxxxxxxxx fcvtzu. */ - return 793; + return 794; } } } @@ -20332,7 +20343,7 @@ 10987654321098765432109876543210 xxx11110xx1xx101x00000xxxxxxxxxx fcvtau. */ - return 777; + return 778; } } else @@ -20343,7 +20354,7 @@ 10987654321098765432109876543210 xxx11110xx1xx011x00000xxxxxxxxxx ucvtf. */ - return 773; + return 774; } else { @@ -20353,7 +20364,7 @@ 10987654321098765432109876543210 xxx11110xx1x0111x00000xxxxxxxxxx fmov. */ - return 781; + return 782; } else { @@ -20361,7 +20372,7 @@ 10987654321098765432109876543210 xxx11110xx1x1111x00000xxxxxxxxxx fmov. */ - return 796; + return 797; } } } @@ -20383,7 +20394,7 @@ 10987654321098765432109876543210 xxx11110xx1x0000010000xxxxxxxxxx fmov. */ - return 816; + return 817; } else { @@ -20391,7 +20402,7 @@ 10987654321098765432109876543210 xxx11110xx1x1000010000xxxxxxxxxx frint32z. */ - return 812; + return 813; } } else @@ -20400,7 +20411,7 @@ 10987654321098765432109876543210 xxx11110xx1xx100010000xxxxxxxxxx frintn. */ - return 825; + return 826; } } else @@ -20413,7 +20424,7 @@ 10987654321098765432109876543210 xxx11110xx1x0001010000xxxxxxxxxx fneg. */ - return 820; + return 821; } else { @@ -20421,7 +20432,7 @@ 10987654321098765432109876543210 xxx11110xx1x1001010000xxxxxxxxxx frint64z. */ - return 814; + return 815; } } else @@ -20430,7 +20441,7 @@ 10987654321098765432109876543210 xxx11110xx1xx101010000xxxxxxxxxx frintm. */ - return 829; + return 830; } } } @@ -20446,7 +20457,7 @@ 10987654321098765432109876543210 xxx11110xx1x0000110000xxxxxxxxxx fabs. */ - return 818; + return 819; } else { @@ -20454,7 +20465,7 @@ 10987654321098765432109876543210 xxx11110xx1x1000110000xxxxxxxxxx frint32x. */ - return 813; + return 814; } } else @@ -20463,7 +20474,7 @@ 10987654321098765432109876543210 xxx11110xx1xx100110000xxxxxxxxxx frintp. */ - return 827; + return 828; } } else @@ -20476,7 +20487,7 @@ 10987654321098765432109876543210 xxx11110xx1x0001110000xxxxxxxxxx fsqrt. */ - return 822; + return 823; } else { @@ -20484,7 +20495,7 @@ 10987654321098765432109876543210 xxx11110xx1x1001110000xxxxxxxxxx frint64x. */ - return 815; + return 816; } } else @@ -20493,7 +20504,7 @@ 10987654321098765432109876543210 xxx11110xx1xx101110000xxxxxxxxxx frintz. */ - return 831; + return 832; } } } @@ -20506,7 +20517,7 @@ 10987654321098765432109876543210 xxx11110xx1xx01xx10000xxxxxxxxxx fcvt. */ - return 824; + return 825; } else { @@ -20518,7 +20529,7 @@ 10987654321098765432109876543210 xxx11110xx1xx110010000xxxxxxxxxx frinta. */ - return 833; + return 834; } else { @@ -20526,7 +20537,7 @@ 10987654321098765432109876543210 xxx11110xx1xx111010000xxxxxxxxxx frintx. */ - return 835; + return 836; } } else @@ -20535,7 +20546,7 @@ 10987654321098765432109876543210 xxx11110xx1xx11x110000xxxxxxxxxx frinti. */ - return 837; + return 838; } } } @@ -20551,7 +20562,7 @@ 10987654321098765432109876543210 xxx11110xx1xxxxxxx1000xxxxx00xxx fcmp. */ - return 802; + return 803; } else { @@ -20559,7 +20570,7 @@ 10987654321098765432109876543210 xxx11110xx1xxxxxxx1000xxxxx10xxx fcmpe. */ - return 804; + return 805; } } else @@ -20570,7 +20581,7 @@ 10987654321098765432109876543210 xxx11110xx1xxxxxxx1000xxxxx01xxx fcmp. */ - return 806; + return 807; } else { @@ -20578,7 +20589,7 @@ 10987654321098765432109876543210 xxx11110xx1xxxxxxx1000xxxxx11xxx fcmpe. */ - return 808; + return 809; } } } @@ -20591,7 +20602,7 @@ 10987654321098765432109876543210 x0x11110xx1xxxxxxxx100xxxxxxxxxx fmov. */ - return 865; + return 866; } else { @@ -20641,7 +20652,7 @@ 10987654321098765432109876543210 x0x11110xx1xxxxx000010xxxxxxxxxx fmul. */ - return 839; + return 840; } else { @@ -20662,7 +20673,7 @@ 10987654321098765432109876543210 x0011110xx1xxxxx100010xxxxxxxxxx fnmul. */ - return 855; + return 856; } else { @@ -20695,7 +20706,7 @@ 10987654321098765432109876543210 x0011110xx1xxxxx010010xxxxxxxxxx fmax. */ - return 847; + return 848; } else { @@ -20860,7 +20871,7 @@ 10987654321098765432109876543210 x0011110xx1xxxxx001010xxxxxxxxxx fadd. */ - return 843; + return 844; } else { @@ -20987,7 +20998,7 @@ 10987654321098765432109876543210 xx011110xx1xxxxx011010xxxxxxxxxx fmaxnm. */ - return 851; + return 852; } else { @@ -21034,7 +21045,7 @@ 10987654321098765432109876543210 x0x11110xx1xxxxx000110xxxxxxxxxx fdiv. */ - return 841; + return 842; } else { @@ -21073,7 +21084,7 @@ 10987654321098765432109876543210 xxx11110xx1xxxxx010110xxxxxxxxxx fmin. */ - return 849; + return 850; } else { @@ -21242,7 +21253,7 @@ 10987654321098765432109876543210 x0011110xx1xxxxx001110xxxxxxxxxx fsub. */ - return 845; + return 846; } else { @@ -21393,7 +21404,7 @@ 10987654321098765432109876543210 x0011110xx1xxxxx011110xxxxxxxxxx fminnm. */ - return 853; + return 854; } else { @@ -21495,7 +21506,7 @@ 10987654321098765432109876543210 x0011110xx1xxxxxxxxx01xxxxx0xxxx fccmp. */ - return 798; + return 799; } else { @@ -21503,7 +21514,7 @@ 10987654321098765432109876543210 x0011110xx1xxxxxxxxx01xxxxx1xxxx fccmpe. */ - return 800; + return 801; } } else @@ -21666,7 +21677,7 @@ 10987654321098765432109876543210 x0011110xx1xxxxxxxxx11xxxxxxxxxx fcsel. */ - return 867; + return 868; } else { @@ -21877,7 +21888,7 @@ 10987654321098765432109876543210 x0001111xxxxxxxx0000x0xxxxxxxxxx fmlal. */ - return 2365; + return 2370; } else { @@ -21885,7 +21896,7 @@ 10987654321098765432109876543210 x1001111xxxxxxxx0000x0xxxxxxxxxx fmlal. */ - return 2369; + return 2374; } } else @@ -21907,7 +21918,7 @@ 10987654321098765432109876543210 x0001111xxxxxxxx0100x0xxxxxxxxxx fmlsl. */ - return 2366; + return 2371; } else { @@ -21915,7 +21926,7 @@ 10987654321098765432109876543210 x1001111xxxxxxxx0100x0xxxxxxxxxx fmlsl. */ - return 2370; + return 2375; } } else @@ -22165,7 +22176,7 @@ 10987654321098765432109876543210 x0011111xx0xxxxx0xxxxxxxxxxxxxxx fmadd. */ - return 857; + return 858; } else { @@ -22173,7 +22184,7 @@ 10987654321098765432109876543210 x0011111xx1xxxxx0xxxxxxxxxxxxxxx fnmadd. */ - return 861; + return 862; } } else @@ -22421,7 +22432,7 @@ 10987654321098765432109876543210 x0101111xxxxxxxx1000x0xxxxxxxxxx fmlal2. */ - return 2367; + return 2372; } else { @@ -22429,7 +22440,7 @@ 10987654321098765432109876543210 x1101111xxxxxxxx1000x0xxxxxxxxxx fmlal2. */ - return 2371; + return 2376; } } } @@ -22451,7 +22462,7 @@ 10987654321098765432109876543210 x0101111xxxxxxxx1100x0xxxxxxxxxx fmlsl2. */ - return 2368; + return 2373; } else { @@ -22459,7 +22470,7 @@ 10987654321098765432109876543210 x1101111xxxxxxxx1100x0xxxxxxxxxx fmlsl2. */ - return 2372; + return 2377; } } } @@ -22515,7 +22526,7 @@ 10987654321098765432109876543210 xx001111xxxxxxxx1110x0xxxxxxxxxx sdot. */ - return 2339; + return 2344; } else { @@ -22523,7 +22534,7 @@ 10987654321098765432109876543210 xx101111xxxxxxxx1110x0xxxxxxxxxx udot. */ - return 2338; + return 2343; } } } @@ -22626,7 +22637,7 @@ 10987654321098765432109876543210 xx00111100xxxxxx1111x0xxxxxxxxxx sudot. */ - return 2418; + return 2421; } else { @@ -22634,7 +22645,7 @@ 10987654321098765432109876543210 xx00111110xxxxxx1111x0xxxxxxxxxx usdot. */ - return 2417; + return 2420; } } else @@ -22645,7 +22656,7 @@ 10987654321098765432109876543210 xx00111101xxxxxx1111x0xxxxxxxxxx bfdot. */ - return 2429; + return 2432; } else { @@ -22655,7 +22666,7 @@ 10987654321098765432109876543210 x000111111xxxxxx1111x0xxxxxxxxxx bfmlalb. */ - return 2437; + return 2440; } else { @@ -22663,7 +22674,7 @@ 10987654321098765432109876543210 x100111111xxxxxx1111x0xxxxxxxxxx bfmlalt. */ - return 2436; + return 2439; } } } @@ -22910,7 +22921,7 @@ 10987654321098765432109876543210 x0011111xx0xxxxx1xxxxxxxxxxxxxxx fmsub. */ - return 859; + return 860; } else { @@ -22918,7 +22929,7 @@ 10987654321098765432109876543210 x0011111xx1xxxxx1xxxxxxxxxxxxxxx fnmsub. */ - return 863; + return 864; } } else @@ -23154,62 +23165,62 @@ case 19: return NULL; /* addg --> NULL. */ case 16: value = 20; break; /* sub --> subg. */ case 20: return NULL; /* subg --> NULL. */ - case 970: value = 974; break; /* stnp --> stp. */ - case 974: return NULL; /* stp --> NULL. */ - case 968: value = 969; break; /* stllrb --> stllrh. */ - case 969: return NULL; /* stllrh --> NULL. */ - case 971: value = 975; break; /* ldnp --> ldp. */ - case 975: return NULL; /* ldp --> NULL. */ - case 1624: value = 1625; break; /* ldff1b --> ldff1b. */ - case 1625: return NULL; /* ldff1b --> NULL. */ - case 1680: value = 1681; break; /* ldff1sw --> ldff1sw. */ - case 1681: return NULL; /* ldff1sw --> NULL. */ - case 1628: value = 1629; break; /* ldff1b --> ldff1b. */ - case 1629: return NULL; /* ldff1b --> NULL. */ - case 1647: value = 1648; break; /* ldff1h --> ldff1h. */ - case 1648: return NULL; /* ldff1h --> NULL. */ - case 1626: value = 1627; break; /* ldff1b --> ldff1b. */ - case 1627: return NULL; /* ldff1b --> NULL. */ - case 1645: value = 1646; break; /* ldff1h --> ldff1h. */ - case 1646: return NULL; /* ldff1h --> NULL. */ - case 1630: value = 1631; break; /* ldff1b --> ldff1b. */ - case 1631: return NULL; /* ldff1b --> NULL. */ - case 1649: value = 1650; break; /* ldff1h --> ldff1h. */ - case 1650: return NULL; /* ldff1h --> NULL. */ - case 1670: value = 1671; break; /* ldff1sh --> ldff1sh. */ - case 1671: return NULL; /* ldff1sh --> NULL. */ - case 1658: value = 1659; break; /* ldff1sb --> ldff1sb. */ - case 1659: return NULL; /* ldff1sb --> NULL. */ - case 1689: value = 1690; break; /* ldff1w --> ldff1w. */ - case 1690: return NULL; /* ldff1w --> NULL. */ - case 1662: value = 1663; break; /* ldff1sb --> ldff1sb. */ - case 1663: return NULL; /* ldff1sb --> NULL. */ - case 1672: value = 1673; break; /* ldff1sh --> ldff1sh. */ - case 1673: return NULL; /* ldff1sh --> NULL. */ - case 1660: value = 1661; break; /* ldff1sb --> ldff1sb. */ - case 1661: return NULL; /* ldff1sb --> NULL. */ - case 1691: value = 1692; break; /* ldff1w --> ldff1w. */ - case 1692: return NULL; /* ldff1w --> NULL. */ - case 1636: value = 1637; break; /* ldff1d --> ldff1d. */ - case 1637: return NULL; /* ldff1d --> NULL. */ - case 810: value = 811; break; /* xaflag --> axflag. */ - case 811: value = 1189; break; /* axflag --> tcommit. */ - case 1189: value = 1192; break; /* tcommit --> msr. */ - case 1192: value = 1193; break; /* msr --> hint. */ - case 1193: value = 1209; break; /* hint --> clrex. */ - case 1209: value = 1210; break; /* clrex --> dsb. */ - case 1210: value = 1213; break; /* dsb --> dmb. */ - case 1213: value = 1214; break; /* dmb --> isb. */ - case 1214: value = 1215; break; /* isb --> sb. */ - case 1215: value = 1216; break; /* sb --> sys. */ - case 1216: value = 1224; break; /* sys --> msr. */ - case 1224: value = 2373; break; /* msr --> cfinv. */ - case 2373: value = 2390; break; /* cfinv --> dgh. */ - case 2390: return NULL; /* dgh --> NULL. */ - case 1188: value = 1190; break; /* tstart --> ttest. */ - case 1190: value = 1225; break; /* ttest --> sysl. */ - case 1225: value = 1226; break; /* sysl --> mrs. */ - case 1226: return NULL; /* mrs --> NULL. */ + case 971: value = 975; break; /* stnp --> stp. */ + case 975: return NULL; /* stp --> NULL. */ + case 969: value = 970; break; /* stllrb --> stllrh. */ + case 970: return NULL; /* stllrh --> NULL. */ + case 972: value = 976; break; /* ldnp --> ldp. */ + case 976: return NULL; /* ldp --> NULL. */ + case 1629: value = 1630; break; /* ldff1b --> ldff1b. */ + case 1630: return NULL; /* ldff1b --> NULL. */ + case 1685: value = 1686; break; /* ldff1sw --> ldff1sw. */ + case 1686: return NULL; /* ldff1sw --> NULL. */ + case 1633: value = 1634; break; /* ldff1b --> ldff1b. */ + case 1634: return NULL; /* ldff1b --> NULL. */ + case 1652: value = 1653; break; /* ldff1h --> ldff1h. */ + case 1653: return NULL; /* ldff1h --> NULL. */ + case 1631: value = 1632; break; /* ldff1b --> ldff1b. */ + case 1632: return NULL; /* ldff1b --> NULL. */ + case 1650: value = 1651; break; /* ldff1h --> ldff1h. */ + case 1651: return NULL; /* ldff1h --> NULL. */ + case 1635: value = 1636; break; /* ldff1b --> ldff1b. */ + case 1636: return NULL; /* ldff1b --> NULL. */ + case 1654: value = 1655; break; /* ldff1h --> ldff1h. */ + case 1655: return NULL; /* ldff1h --> NULL. */ + case 1675: value = 1676; break; /* ldff1sh --> ldff1sh. */ + case 1676: return NULL; /* ldff1sh --> NULL. */ + case 1663: value = 1664; break; /* ldff1sb --> ldff1sb. */ + case 1664: return NULL; /* ldff1sb --> NULL. */ + case 1694: value = 1695; break; /* ldff1w --> ldff1w. */ + case 1695: return NULL; /* ldff1w --> NULL. */ + case 1667: value = 1668; break; /* ldff1sb --> ldff1sb. */ + case 1668: return NULL; /* ldff1sb --> NULL. */ + case 1677: value = 1678; break; /* ldff1sh --> ldff1sh. */ + case 1678: return NULL; /* ldff1sh --> NULL. */ + case 1665: value = 1666; break; /* ldff1sb --> ldff1sb. */ + case 1666: return NULL; /* ldff1sb --> NULL. */ + case 1696: value = 1697; break; /* ldff1w --> ldff1w. */ + case 1697: return NULL; /* ldff1w --> NULL. */ + case 1641: value = 1642; break; /* ldff1d --> ldff1d. */ + case 1642: return NULL; /* ldff1d --> NULL. */ + case 811: value = 812; break; /* xaflag --> axflag. */ + case 812: value = 1190; break; /* axflag --> tcommit. */ + case 1190: value = 1193; break; /* tcommit --> msr. */ + case 1193: value = 1194; break; /* msr --> hint. */ + case 1194: value = 1203; break; /* hint --> dgh. */ + case 1203: value = 1212; break; /* dgh --> clrex. */ + case 1212: value = 1213; break; /* clrex --> dsb. */ + case 1213: value = 1217; break; /* dsb --> dmb. */ + case 1217: value = 1218; break; /* dmb --> isb. */ + case 1218: value = 1219; break; /* isb --> sb. */ + case 1219: value = 1220; break; /* sb --> sys. */ + case 1220: value = 1228; break; /* sys --> cfinv. */ + case 1228: value = 1229; break; /* cfinv --> msr. */ + case 1229: return NULL; /* msr --> NULL. */ + case 1189: value = 1191; break; /* tstart --> ttest. */ + case 1191: value = 1230; break; /* ttest --> sysl. */ + case 1230: value = 1231; break; /* sysl --> mrs. */ + case 1231: return NULL; /* mrs --> NULL. */ case 440: value = 441; break; /* st4 --> st1. */ case 441: value = 442; break; /* st1 --> st2. */ case 442: value = 443; break; /* st2 --> st3. */ @@ -23242,100 +23253,100 @@ case 478: return NULL; /* ld2r --> NULL. */ case 477: value = 479; break; /* ld4 --> ld4r. */ case 479: return NULL; /* ld4r --> NULL. */ - case 763: value = 764; break; /* fcvtzs --> fcvtzs. */ - case 764: return NULL; /* fcvtzs --> NULL. */ - case 759: value = 760; break; /* scvtf --> scvtf. */ - case 760: return NULL; /* scvtf --> NULL. */ - case 765: value = 766; break; /* fcvtzu --> fcvtzu. */ - case 766: return NULL; /* fcvtzu --> NULL. */ - case 761: value = 762; break; /* ucvtf --> ucvtf. */ - case 762: return NULL; /* ucvtf --> NULL. */ - case 767: value = 768; break; /* fcvtns --> fcvtns. */ - case 768: return NULL; /* fcvtns --> NULL. */ - case 787: value = 788; break; /* fcvtms --> fcvtms. */ - case 788: return NULL; /* fcvtms --> NULL. */ - case 783: value = 784; break; /* fcvtps --> fcvtps. */ - case 784: return NULL; /* fcvtps --> NULL. */ - case 791: value = 792; break; /* fcvtzs --> fcvtzs. */ - case 792: return NULL; /* fcvtzs --> NULL. */ - case 775: value = 776; break; /* fcvtas --> fcvtas. */ - case 776: return NULL; /* fcvtas --> NULL. */ - case 771: value = 772; break; /* scvtf --> scvtf. */ - case 772: return NULL; /* scvtf --> NULL. */ - case 779: value = 780; break; /* fmov --> fmov. */ - case 780: return NULL; /* fmov --> NULL. */ - case 769: value = 770; break; /* fcvtnu --> fcvtnu. */ - case 770: return NULL; /* fcvtnu --> NULL. */ - case 789: value = 790; break; /* fcvtmu --> fcvtmu. */ - case 790: return NULL; /* fcvtmu --> NULL. */ - case 785: value = 786; break; /* fcvtpu --> fcvtpu. */ - case 786: return NULL; /* fcvtpu --> NULL. */ - case 793: value = 794; break; /* fcvtzu --> fcvtzu. */ - case 794: return NULL; /* fcvtzu --> NULL. */ - case 777: value = 778; break; /* fcvtau --> fcvtau. */ - case 778: return NULL; /* fcvtau --> NULL. */ - case 773: value = 774; break; /* ucvtf --> ucvtf. */ - case 774: return NULL; /* ucvtf --> NULL. */ - case 781: value = 782; break; /* fmov --> fmov. */ - case 782: return NULL; /* fmov --> NULL. */ - case 816: value = 817; break; /* fmov --> fmov. */ - case 817: return NULL; /* fmov --> NULL. */ - case 825: value = 826; break; /* frintn --> frintn. */ - case 826: return NULL; /* frintn --> NULL. */ - case 820: value = 821; break; /* fneg --> fneg. */ - case 821: return NULL; /* fneg --> NULL. */ - case 829: value = 830; break; /* frintm --> frintm. */ - case 830: return NULL; /* frintm --> NULL. */ - case 818: value = 819; break; /* fabs --> fabs. */ - case 819: return NULL; /* fabs --> NULL. */ - case 827: value = 828; break; /* frintp --> frintp. */ - case 828: return NULL; /* frintp --> NULL. */ - case 822: value = 823; break; /* fsqrt --> fsqrt. */ - case 823: return NULL; /* fsqrt --> NULL. */ - case 831: value = 832; break; /* frintz --> frintz. */ - case 832: return NULL; /* frintz --> NULL. */ - case 824: value = 2433; break; /* fcvt --> bfcvt. */ - case 2433: return NULL; /* bfcvt --> NULL. */ - case 833: value = 834; break; /* frinta --> frinta. */ - case 834: return NULL; /* frinta --> NULL. */ - case 835: value = 836; break; /* frintx --> frintx. */ - case 836: return NULL; /* frintx --> NULL. */ - case 837: value = 838; break; /* frinti --> frinti. */ - case 838: return NULL; /* frinti --> NULL. */ - case 802: value = 803; break; /* fcmp --> fcmp. */ - case 803: return NULL; /* fcmp --> NULL. */ - case 804: value = 805; break; /* fcmpe --> fcmpe. */ - case 805: return NULL; /* fcmpe --> NULL. */ - case 806: value = 807; break; /* fcmp --> fcmp. */ - case 807: return NULL; /* fcmp --> NULL. */ - case 808: value = 809; break; /* fcmpe --> fcmpe. */ - case 809: return NULL; /* fcmpe --> NULL. */ - case 865: value = 866; break; /* fmov --> fmov. */ - case 866: return NULL; /* fmov --> NULL. */ - case 839: value = 840; break; /* fmul --> fmul. */ - case 840: return NULL; /* fmul --> NULL. */ - case 855: value = 856; break; /* fnmul --> fnmul. */ - case 856: return NULL; /* fnmul --> NULL. */ - case 847: value = 848; break; /* fmax --> fmax. */ - case 848: return NULL; /* fmax --> NULL. */ - case 843: value = 844; break; /* fadd --> fadd. */ - case 844: return NULL; /* fadd --> NULL. */ - case 851: value = 852; break; /* fmaxnm --> fmaxnm. */ - case 852: return NULL; /* fmaxnm --> NULL. */ - case 841: value = 842; break; /* fdiv --> fdiv. */ - case 842: return NULL; /* fdiv --> NULL. */ - case 849: value = 850; break; /* fmin --> fmin. */ - case 850: return NULL; /* fmin --> NULL. */ - case 845: value = 846; break; /* fsub --> fsub. */ - case 846: return NULL; /* fsub --> NULL. */ - case 853: value = 854; break; /* fminnm --> fminnm. */ - case 854: return NULL; /* fminnm --> NULL. */ - case 798: value = 799; break; /* fccmp --> fccmp. */ - case 799: return NULL; /* fccmp --> NULL. */ - case 800: value = 801; break; /* fccmpe --> fccmpe. */ - case 801: return NULL; /* fccmpe --> NULL. */ - case 867: value = 868; break; /* fcsel --> fcsel. */ - case 868: return NULL; /* fcsel --> NULL. */ + case 764: value = 765; break; /* fcvtzs --> fcvtzs. */ + case 765: return NULL; /* fcvtzs --> NULL. */ + case 760: value = 761; break; /* scvtf --> scvtf. */ + case 761: return NULL; /* scvtf --> NULL. */ + case 766: value = 767; break; /* fcvtzu --> fcvtzu. */ + case 767: return NULL; /* fcvtzu --> NULL. */ + case 762: value = 763; break; /* ucvtf --> ucvtf. */ + case 763: return NULL; /* ucvtf --> NULL. */ + case 768: value = 769; break; /* fcvtns --> fcvtns. */ + case 769: return NULL; /* fcvtns --> NULL. */ + case 788: value = 789; break; /* fcvtms --> fcvtms. */ + case 789: return NULL; /* fcvtms --> NULL. */ + case 784: value = 785; break; /* fcvtps --> fcvtps. */ + case 785: return NULL; /* fcvtps --> NULL. */ + case 792: value = 793; break; /* fcvtzs --> fcvtzs. */ + case 793: return NULL; /* fcvtzs --> NULL. */ + case 776: value = 777; break; /* fcvtas --> fcvtas. */ + case 777: return NULL; /* fcvtas --> NULL. */ + case 772: value = 773; break; /* scvtf --> scvtf. */ + case 773: return NULL; /* scvtf --> NULL. */ + case 780: value = 781; break; /* fmov --> fmov. */ + case 781: return NULL; /* fmov --> NULL. */ + case 770: value = 771; break; /* fcvtnu --> fcvtnu. */ + case 771: return NULL; /* fcvtnu --> NULL. */ + case 790: value = 791; break; /* fcvtmu --> fcvtmu. */ + case 791: return NULL; /* fcvtmu --> NULL. */ + case 786: value = 787; break; /* fcvtpu --> fcvtpu. */ + case 787: return NULL; /* fcvtpu --> NULL. */ + case 794: value = 795; break; /* fcvtzu --> fcvtzu. */ + case 795: return NULL; /* fcvtzu --> NULL. */ + case 778: value = 779; break; /* fcvtau --> fcvtau. */ + case 779: return NULL; /* fcvtau --> NULL. */ + case 774: value = 775; break; /* ucvtf --> ucvtf. */ + case 775: return NULL; /* ucvtf --> NULL. */ + case 782: value = 783; break; /* fmov --> fmov. */ + case 783: return NULL; /* fmov --> NULL. */ + case 817: value = 818; break; /* fmov --> fmov. */ + case 818: return NULL; /* fmov --> NULL. */ + case 826: value = 827; break; /* frintn --> frintn. */ + case 827: return NULL; /* frintn --> NULL. */ + case 821: value = 822; break; /* fneg --> fneg. */ + case 822: return NULL; /* fneg --> NULL. */ + case 830: value = 831; break; /* frintm --> frintm. */ + case 831: return NULL; /* frintm --> NULL. */ + case 819: value = 820; break; /* fabs --> fabs. */ + case 820: return NULL; /* fabs --> NULL. */ + case 828: value = 829; break; /* frintp --> frintp. */ + case 829: return NULL; /* frintp --> NULL. */ + case 823: value = 824; break; /* fsqrt --> fsqrt. */ + case 824: return NULL; /* fsqrt --> NULL. */ + case 832: value = 833; break; /* frintz --> frintz. */ + case 833: return NULL; /* frintz --> NULL. */ + case 825: value = 2436; break; /* fcvt --> bfcvt. */ + case 2436: return NULL; /* bfcvt --> NULL. */ + case 834: value = 835; break; /* frinta --> frinta. */ + case 835: return NULL; /* frinta --> NULL. */ + case 836: value = 837; break; /* frintx --> frintx. */ + case 837: return NULL; /* frintx --> NULL. */ + case 838: value = 839; break; /* frinti --> frinti. */ + case 839: return NULL; /* frinti --> NULL. */ + case 803: value = 804; break; /* fcmp --> fcmp. */ + case 804: return NULL; /* fcmp --> NULL. */ + case 805: value = 806; break; /* fcmpe --> fcmpe. */ + case 806: return NULL; /* fcmpe --> NULL. */ + case 807: value = 808; break; /* fcmp --> fcmp. */ + case 808: return NULL; /* fcmp --> NULL. */ + case 809: value = 810; break; /* fcmpe --> fcmpe. */ + case 810: return NULL; /* fcmpe --> NULL. */ + case 866: value = 867; break; /* fmov --> fmov. */ + case 867: return NULL; /* fmov --> NULL. */ + case 840: value = 841; break; /* fmul --> fmul. */ + case 841: return NULL; /* fmul --> NULL. */ + case 856: value = 857; break; /* fnmul --> fnmul. */ + case 857: return NULL; /* fnmul --> NULL. */ + case 848: value = 849; break; /* fmax --> fmax. */ + case 849: return NULL; /* fmax --> NULL. */ + case 844: value = 845; break; /* fadd --> fadd. */ + case 845: return NULL; /* fadd --> NULL. */ + case 852: value = 853; break; /* fmaxnm --> fmaxnm. */ + case 853: return NULL; /* fmaxnm --> NULL. */ + case 842: value = 843; break; /* fdiv --> fdiv. */ + case 843: return NULL; /* fdiv --> NULL. */ + case 850: value = 851; break; /* fmin --> fmin. */ + case 851: return NULL; /* fmin --> NULL. */ + case 846: value = 847; break; /* fsub --> fsub. */ + case 847: return NULL; /* fsub --> NULL. */ + case 854: value = 855; break; /* fminnm --> fminnm. */ + case 855: return NULL; /* fminnm --> NULL. */ + case 799: value = 800; break; /* fccmp --> fccmp. */ + case 800: return NULL; /* fccmp --> NULL. */ + case 801: value = 802; break; /* fccmpe --> fccmpe. */ + case 802: return NULL; /* fccmpe --> NULL. */ + case 868: value = 869; break; /* fcsel --> fcsel. */ + case 869: return NULL; /* fcsel --> NULL. */ case 133: value = 374; break; /* movi --> sshr. */ case 374: value = 376; break; /* sshr --> srshr. */ case 376: return NULL; /* srshr --> NULL. */ @@ -23354,10 +23365,10 @@ case 399: value = 401; break; /* ursra --> sli. */ case 401: value = 403; break; /* sli --> uqshl. */ case 403: return NULL; /* uqshl --> NULL. */ - case 857: value = 858; break; /* fmadd --> fmadd. */ - case 858: return NULL; /* fmadd --> NULL. */ - case 861: value = 862; break; /* fnmadd --> fnmadd. */ - case 862: return NULL; /* fnmadd --> NULL. */ + case 858: value = 859; break; /* fmadd --> fmadd. */ + case 859: return NULL; /* fmadd --> NULL. */ + case 862: value = 863; break; /* fnmadd --> fnmadd. */ + case 863: return NULL; /* fnmadd --> NULL. */ case 135: value = 380; break; /* movi --> shrn. */ case 380: value = 381; break; /* shrn --> shrn2. */ case 381: value = 388; break; /* shrn2 --> sshll. */ @@ -23386,10 +23397,10 @@ case 395: return NULL; /* fcvtzs --> NULL. */ case 418: value = 419; break; /* fcvtzu --> fcvtzu. */ case 419: return NULL; /* fcvtzu --> NULL. */ - case 859: value = 860; break; /* fmsub --> fmsub. */ - case 860: return NULL; /* fmsub --> NULL. */ - case 863: value = 864; break; /* fnmsub --> fnmsub. */ - case 864: return NULL; /* fnmsub --> NULL. */ + case 860: value = 861; break; /* fmsub --> fmsub. */ + case 861: return NULL; /* fmsub --> NULL. */ + case 864: value = 865; break; /* fnmsub --> fnmsub. */ + case 865: return NULL; /* fnmsub --> NULL. */ case 598: value = 599; break; /* scvtf --> scvtf. */ case 599: return NULL; /* scvtf --> NULL. */ case 600: value = 601; break; /* fcvtzs --> fcvtzs. */ @@ -23450,95 +23461,95 @@ case 741: value = 742; break; /* smsubl --> smnegl. */ case 744: value = 745; break; /* umaddl --> umull. */ case 746: value = 747; break; /* umsubl --> umnegl. */ - case 757: value = 758; break; /* extr --> ror. */ - case 990: value = 991; break; /* and --> bic. */ - case 992: value = 993; break; /* orr --> mov. */ - case 995: value = 996; break; /* ands --> tst. */ - case 999: value = 1001; break; /* orr --> uxtw. */ - case 1002: value = 1003; break; /* orn --> mvn. */ - case 1006: value = 1007; break; /* ands --> tst. */ - case 1037: value = 1133; break; /* ldaddb --> staddb. */ - case 1038: value = 1134; break; /* ldaddh --> staddh. */ - case 1039: value = 1135; break; /* ldadd --> stadd. */ - case 1041: value = 1136; break; /* ldaddlb --> staddlb. */ - case 1044: value = 1137; break; /* ldaddlh --> staddlh. */ - case 1047: value = 1138; break; /* ldaddl --> staddl. */ - case 1049: value = 1139; break; /* ldclrb --> stclrb. */ - case 1050: value = 1140; break; /* ldclrh --> stclrh. */ - case 1051: value = 1141; break; /* ldclr --> stclr. */ - case 1053: value = 1142; break; /* ldclrlb --> stclrlb. */ - case 1056: value = 1143; break; /* ldclrlh --> stclrlh. */ - case 1059: value = 1144; break; /* ldclrl --> stclrl. */ - case 1061: value = 1145; break; /* ldeorb --> steorb. */ - case 1062: value = 1146; break; /* ldeorh --> steorh. */ - case 1063: value = 1147; break; /* ldeor --> steor. */ - case 1065: value = 1148; break; /* ldeorlb --> steorlb. */ - case 1068: value = 1149; break; /* ldeorlh --> steorlh. */ - case 1071: value = 1150; break; /* ldeorl --> steorl. */ - case 1073: value = 1151; break; /* ldsetb --> stsetb. */ - case 1074: value = 1152; break; /* ldseth --> stseth. */ - case 1075: value = 1153; break; /* ldset --> stset. */ - case 1077: value = 1154; break; /* ldsetlb --> stsetlb. */ - case 1080: value = 1155; break; /* ldsetlh --> stsetlh. */ - case 1083: value = 1156; break; /* ldsetl --> stsetl. */ - case 1085: value = 1157; break; /* ldsmaxb --> stsmaxb. */ - case 1086: value = 1158; break; /* ldsmaxh --> stsmaxh. */ - case 1087: value = 1159; break; /* ldsmax --> stsmax. */ - case 1089: value = 1160; break; /* ldsmaxlb --> stsmaxlb. */ - case 1092: value = 1161; break; /* ldsmaxlh --> stsmaxlh. */ - case 1095: value = 1162; break; /* ldsmaxl --> stsmaxl. */ - case 1097: value = 1163; break; /* ldsminb --> stsminb. */ - case 1098: value = 1164; break; /* ldsminh --> stsminh. */ - case 1099: value = 1165; break; /* ldsmin --> stsmin. */ - case 1101: value = 1166; break; /* ldsminlb --> stsminlb. */ - case 1104: value = 1167; break; /* ldsminlh --> stsminlh. */ - case 1107: value = 1168; break; /* ldsminl --> stsminl. */ - case 1109: value = 1169; break; /* ldumaxb --> stumaxb. */ - case 1110: value = 1170; break; /* ldumaxh --> stumaxh. */ - case 1111: value = 1171; break; /* ldumax --> stumax. */ - case 1113: value = 1172; break; /* ldumaxlb --> stumaxlb. */ - case 1116: value = 1173; break; /* ldumaxlh --> stumaxlh. */ - case 1119: value = 1174; break; /* ldumaxl --> stumaxl. */ - case 1121: value = 1175; break; /* lduminb --> stuminb. */ - case 1122: value = 1176; break; /* lduminh --> stuminh. */ - case 1123: value = 1177; break; /* ldumin --> stumin. */ - case 1125: value = 1178; break; /* lduminlb --> stuminlb. */ - case 1128: value = 1179; break; /* lduminlh --> stuminlh. */ - case 1131: value = 1180; break; /* lduminl --> stuminl. */ - case 1181: value = 1182; break; /* movn --> mov. */ - case 1183: value = 1184; break; /* movz --> mov. */ - case 1193: value = 1234; break; /* hint --> autibsp. */ - case 1210: value = 1212; break; /* dsb --> pssbb. */ - case 1216: value = 1223; break; /* sys --> cpp. */ - case 1282: value = 2032; break; /* and --> bic. */ - case 1284: value = 1265; break; /* and --> mov. */ - case 1285: value = 1269; break; /* ands --> movs. */ - case 1320: value = 2033; break; /* cmpge --> cmple. */ - case 1323: value = 2036; break; /* cmpgt --> cmplt. */ - case 1325: value = 2034; break; /* cmphi --> cmplo. */ - case 1328: value = 2035; break; /* cmphs --> cmpls. */ - case 1350: value = 1262; break; /* cpy --> mov. */ - case 1351: value = 1264; break; /* cpy --> mov. */ - case 1352: value = 2043; break; /* cpy --> fmov. */ - case 1364: value = 1257; break; /* dup --> mov. */ - case 1365: value = 1259; break; /* dup --> mov. */ - case 1366: value = 2042; break; /* dup --> fmov. */ - case 1367: value = 1260; break; /* dupm --> mov. */ - case 1369: value = 2037; break; /* eor --> eon. */ - case 1371: value = 1270; break; /* eor --> not. */ - case 1372: value = 1271; break; /* eors --> nots. */ - case 1377: value = 2038; break; /* facge --> facle. */ - case 1378: value = 2039; break; /* facgt --> faclt. */ - case 1391: value = 2040; break; /* fcmge --> fcmle. */ - case 1393: value = 2041; break; /* fcmgt --> fcmlt. */ - case 1399: value = 1254; break; /* fcpy --> fmov. */ - case 1422: value = 1253; break; /* fdup --> fmov. */ - case 1753: value = 1255; break; /* orr --> mov. */ - case 1754: value = 2044; break; /* orr --> orn. */ - case 1756: value = 1258; break; /* orr --> mov. */ - case 1757: value = 1268; break; /* orrs --> movs. */ - case 1819: value = 1263; break; /* sel --> mov. */ - case 1820: value = 1266; break; /* sel --> mov. */ + case 758: value = 759; break; /* extr --> ror. */ + case 991: value = 992; break; /* and --> bic. */ + case 993: value = 994; break; /* orr --> mov. */ + case 996: value = 997; break; /* ands --> tst. */ + case 1000: value = 1002; break; /* orr --> uxtw. */ + case 1003: value = 1004; break; /* orn --> mvn. */ + case 1007: value = 1008; break; /* ands --> tst. */ + case 1038: value = 1134; break; /* ldaddb --> staddb. */ + case 1039: value = 1135; break; /* ldaddh --> staddh. */ + case 1040: value = 1136; break; /* ldadd --> stadd. */ + case 1042: value = 1137; break; /* ldaddlb --> staddlb. */ + case 1045: value = 1138; break; /* ldaddlh --> staddlh. */ + case 1048: value = 1139; break; /* ldaddl --> staddl. */ + case 1050: value = 1140; break; /* ldclrb --> stclrb. */ + case 1051: value = 1141; break; /* ldclrh --> stclrh. */ + case 1052: value = 1142; break; /* ldclr --> stclr. */ + case 1054: value = 1143; break; /* ldclrlb --> stclrlb. */ + case 1057: value = 1144; break; /* ldclrlh --> stclrlh. */ + case 1060: value = 1145; break; /* ldclrl --> stclrl. */ + case 1062: value = 1146; break; /* ldeorb --> steorb. */ + case 1063: value = 1147; break; /* ldeorh --> steorh. */ + case 1064: value = 1148; break; /* ldeor --> steor. */ + case 1066: value = 1149; break; /* ldeorlb --> steorlb. */ + case 1069: value = 1150; break; /* ldeorlh --> steorlh. */ + case 1072: value = 1151; break; /* ldeorl --> steorl. */ + case 1074: value = 1152; break; /* ldsetb --> stsetb. */ + case 1075: value = 1153; break; /* ldseth --> stseth. */ + case 1076: value = 1154; break; /* ldset --> stset. */ + case 1078: value = 1155; break; /* ldsetlb --> stsetlb. */ + case 1081: value = 1156; break; /* ldsetlh --> stsetlh. */ + case 1084: value = 1157; break; /* ldsetl --> stsetl. */ + case 1086: value = 1158; break; /* ldsmaxb --> stsmaxb. */ + case 1087: value = 1159; break; /* ldsmaxh --> stsmaxh. */ + case 1088: value = 1160; break; /* ldsmax --> stsmax. */ + case 1090: value = 1161; break; /* ldsmaxlb --> stsmaxlb. */ + case 1093: value = 1162; break; /* ldsmaxlh --> stsmaxlh. */ + case 1096: value = 1163; break; /* ldsmaxl --> stsmaxl. */ + case 1098: value = 1164; break; /* ldsminb --> stsminb. */ + case 1099: value = 1165; break; /* ldsminh --> stsminh. */ + case 1100: value = 1166; break; /* ldsmin --> stsmin. */ + case 1102: value = 1167; break; /* ldsminlb --> stsminlb. */ + case 1105: value = 1168; break; /* ldsminlh --> stsminlh. */ + case 1108: value = 1169; break; /* ldsminl --> stsminl. */ + case 1110: value = 1170; break; /* ldumaxb --> stumaxb. */ + case 1111: value = 1171; break; /* ldumaxh --> stumaxh. */ + case 1112: value = 1172; break; /* ldumax --> stumax. */ + case 1114: value = 1173; break; /* ldumaxlb --> stumaxlb. */ + case 1117: value = 1174; break; /* ldumaxlh --> stumaxlh. */ + case 1120: value = 1175; break; /* ldumaxl --> stumaxl. */ + case 1122: value = 1176; break; /* lduminb --> stuminb. */ + case 1123: value = 1177; break; /* lduminh --> stuminh. */ + case 1124: value = 1178; break; /* ldumin --> stumin. */ + case 1126: value = 1179; break; /* lduminlb --> stuminlb. */ + case 1129: value = 1180; break; /* lduminlh --> stuminlh. */ + case 1132: value = 1181; break; /* lduminl --> stuminl. */ + case 1182: value = 1183; break; /* movn --> mov. */ + case 1184: value = 1185; break; /* movz --> mov. */ + case 1194: value = 1239; break; /* hint --> autibsp. */ + case 1213: value = 1216; break; /* dsb --> pssbb. */ + case 1220: value = 1227; break; /* sys --> cpp. */ + case 1287: value = 2037; break; /* and --> bic. */ + case 1289: value = 1270; break; /* and --> mov. */ + case 1290: value = 1274; break; /* ands --> movs. */ + case 1325: value = 2038; break; /* cmpge --> cmple. */ + case 1328: value = 2041; break; /* cmpgt --> cmplt. */ + case 1330: value = 2039; break; /* cmphi --> cmplo. */ + case 1333: value = 2040; break; /* cmphs --> cmpls. */ + case 1355: value = 1267; break; /* cpy --> mov. */ + case 1356: value = 1269; break; /* cpy --> mov. */ + case 1357: value = 2048; break; /* cpy --> fmov. */ + case 1369: value = 1262; break; /* dup --> mov. */ + case 1370: value = 1264; break; /* dup --> mov. */ + case 1371: value = 2047; break; /* dup --> fmov. */ + case 1372: value = 1265; break; /* dupm --> mov. */ + case 1374: value = 2042; break; /* eor --> eon. */ + case 1376: value = 1275; break; /* eor --> not. */ + case 1377: value = 1276; break; /* eors --> nots. */ + case 1382: value = 2043; break; /* facge --> facle. */ + case 1383: value = 2044; break; /* facgt --> faclt. */ + case 1396: value = 2045; break; /* fcmge --> fcmle. */ + case 1398: value = 2046; break; /* fcmgt --> fcmlt. */ + case 1404: value = 1259; break; /* fcpy --> fmov. */ + case 1427: value = 1258; break; /* fdup --> fmov. */ + case 1758: value = 1260; break; /* orr --> mov. */ + case 1759: value = 2049; break; /* orr --> orn. */ + case 1761: value = 1263; break; /* orr --> mov. */ + case 1762: value = 1273; break; /* orrs --> movs. */ + case 1824: value = 1268; break; /* sel --> mov. */ + case 1825: value = 1271; break; /* sel --> mov. */ default: return NULL; } @@ -23606,128 +23617,130 @@ case 742: value = 741; break; /* smnegl --> smsubl. */ case 745: value = 744; break; /* umull --> umaddl. */ case 747: value = 746; break; /* umnegl --> umsubl. */ - case 758: value = 757; break; /* ror --> extr. */ - case 991: value = 990; break; /* bic --> and. */ - case 993: value = 992; break; /* mov --> orr. */ - case 996: value = 995; break; /* tst --> ands. */ - case 1001: value = 1000; break; /* uxtw --> mov. */ - case 1000: value = 999; break; /* mov --> orr. */ - case 1003: value = 1002; break; /* mvn --> orn. */ - case 1007: value = 1006; break; /* tst --> ands. */ - case 1133: value = 1037; break; /* staddb --> ldaddb. */ - case 1134: value = 1038; break; /* staddh --> ldaddh. */ - case 1135: value = 1039; break; /* stadd --> ldadd. */ - case 1136: value = 1041; break; /* staddlb --> ldaddlb. */ - case 1137: value = 1044; break; /* staddlh --> ldaddlh. */ - case 1138: value = 1047; break; /* staddl --> ldaddl. */ - case 1139: value = 1049; break; /* stclrb --> ldclrb. */ - case 1140: value = 1050; break; /* stclrh --> ldclrh. */ - case 1141: value = 1051; break; /* stclr --> ldclr. */ - case 1142: value = 1053; break; /* stclrlb --> ldclrlb. */ - case 1143: value = 1056; break; /* stclrlh --> ldclrlh. */ - case 1144: value = 1059; break; /* stclrl --> ldclrl. */ - case 1145: value = 1061; break; /* steorb --> ldeorb. */ - case 1146: value = 1062; break; /* steorh --> ldeorh. */ - case 1147: value = 1063; break; /* steor --> ldeor. */ - case 1148: value = 1065; break; /* steorlb --> ldeorlb. */ - case 1149: value = 1068; break; /* steorlh --> ldeorlh. */ - case 1150: value = 1071; break; /* steorl --> ldeorl. */ - case 1151: value = 1073; break; /* stsetb --> ldsetb. */ - case 1152: value = 1074; break; /* stseth --> ldseth. */ - case 1153: value = 1075; break; /* stset --> ldset. */ - case 1154: value = 1077; break; /* stsetlb --> ldsetlb. */ - case 1155: value = 1080; break; /* stsetlh --> ldsetlh. */ - case 1156: value = 1083; break; /* stsetl --> ldsetl. */ - case 1157: value = 1085; break; /* stsmaxb --> ldsmaxb. */ - case 1158: value = 1086; break; /* stsmaxh --> ldsmaxh. */ - case 1159: value = 1087; break; /* stsmax --> ldsmax. */ - case 1160: value = 1089; break; /* stsmaxlb --> ldsmaxlb. */ - case 1161: value = 1092; break; /* stsmaxlh --> ldsmaxlh. */ - case 1162: value = 1095; break; /* stsmaxl --> ldsmaxl. */ - case 1163: value = 1097; break; /* stsminb --> ldsminb. */ - case 1164: value = 1098; break; /* stsminh --> ldsminh. */ - case 1165: value = 1099; break; /* stsmin --> ldsmin. */ - case 1166: value = 1101; break; /* stsminlb --> ldsminlb. */ - case 1167: value = 1104; break; /* stsminlh --> ldsminlh. */ - case 1168: value = 1107; break; /* stsminl --> ldsminl. */ - case 1169: value = 1109; break; /* stumaxb --> ldumaxb. */ - case 1170: value = 1110; break; /* stumaxh --> ldumaxh. */ - case 1171: value = 1111; break; /* stumax --> ldumax. */ - case 1172: value = 1113; break; /* stumaxlb --> ldumaxlb. */ - case 1173: value = 1116; break; /* stumaxlh --> ldumaxlh. */ - case 1174: value = 1119; break; /* stumaxl --> ldumaxl. */ - case 1175: value = 1121; break; /* stuminb --> lduminb. */ - case 1176: value = 1122; break; /* stuminh --> lduminh. */ - case 1177: value = 1123; break; /* stumin --> ldumin. */ - case 1178: value = 1125; break; /* stuminlb --> lduminlb. */ - case 1179: value = 1128; break; /* stuminlh --> lduminlh. */ - case 1180: value = 1131; break; /* stuminl --> lduminl. */ - case 1182: value = 1181; break; /* mov --> movn. */ - case 1184: value = 1183; break; /* mov --> movz. */ - case 1234: value = 1233; break; /* autibsp --> autibz. */ - case 1233: value = 1232; break; /* autibz --> autiasp. */ - case 1232: value = 1231; break; /* autiasp --> autiaz. */ - case 1231: value = 1230; break; /* autiaz --> pacibsp. */ - case 1230: value = 1229; break; /* pacibsp --> pacibz. */ - case 1229: value = 1228; break; /* pacibz --> paciasp. */ - case 1228: value = 1227; break; /* paciasp --> paciaz. */ - case 1227: value = 1208; break; /* paciaz --> psb. */ - case 1208: value = 1207; break; /* psb --> esb. */ - case 1207: value = 1206; break; /* esb --> autib1716. */ - case 1206: value = 1205; break; /* autib1716 --> autia1716. */ - case 1205: value = 1204; break; /* autia1716 --> pacib1716. */ - case 1204: value = 1203; break; /* pacib1716 --> pacia1716. */ - case 1203: value = 1202; break; /* pacia1716 --> xpaclri. */ - case 1202: value = 1201; break; /* xpaclri --> sevl. */ - case 1201: value = 1200; break; /* sevl --> sev. */ - case 1200: value = 1199; break; /* sev --> wfi. */ - case 1199: value = 1198; break; /* wfi --> wfe. */ - case 1198: value = 1197; break; /* wfe --> yield. */ - case 1197: value = 1196; break; /* yield --> bti. */ - case 1196: value = 1195; break; /* bti --> csdb. */ - case 1195: value = 1194; break; /* csdb --> nop. */ - case 1194: value = 1193; break; /* nop --> hint. */ - case 1212: value = 1211; break; /* pssbb --> ssbb. */ - case 1211: value = 1210; break; /* ssbb --> dsb. */ - case 1223: value = 1222; break; /* cpp --> dvp. */ - case 1222: value = 1221; break; /* dvp --> cfp. */ - case 1221: value = 1220; break; /* cfp --> tlbi. */ - case 1220: value = 1219; break; /* tlbi --> ic. */ - case 1219: value = 1218; break; /* ic --> dc. */ - case 1218: value = 1217; break; /* dc --> at. */ - case 1217: value = 1216; break; /* at --> sys. */ - case 2032: value = 1282; break; /* bic --> and. */ - case 1265: value = 1284; break; /* mov --> and. */ - case 1269: value = 1285; break; /* movs --> ands. */ - case 2033: value = 1320; break; /* cmple --> cmpge. */ - case 2036: value = 1323; break; /* cmplt --> cmpgt. */ - case 2034: value = 1325; break; /* cmplo --> cmphi. */ - case 2035: value = 1328; break; /* cmpls --> cmphs. */ - case 1262: value = 1350; break; /* mov --> cpy. */ - case 1264: value = 1351; break; /* mov --> cpy. */ - case 2043: value = 1267; break; /* fmov --> mov. */ - case 1267: value = 1352; break; /* mov --> cpy. */ - case 1257: value = 1364; break; /* mov --> dup. */ - case 1259: value = 1256; break; /* mov --> mov. */ - case 1256: value = 1365; break; /* mov --> dup. */ - case 2042: value = 1261; break; /* fmov --> mov. */ - case 1261: value = 1366; break; /* mov --> dup. */ - case 1260: value = 1367; break; /* mov --> dupm. */ - case 2037: value = 1369; break; /* eon --> eor. */ - case 1270: value = 1371; break; /* not --> eor. */ - case 1271: value = 1372; break; /* nots --> eors. */ - case 2038: value = 1377; break; /* facle --> facge. */ - case 2039: value = 1378; break; /* faclt --> facgt. */ - case 2040: value = 1391; break; /* fcmle --> fcmge. */ - case 2041: value = 1393; break; /* fcmlt --> fcmgt. */ - case 1254: value = 1399; break; /* fmov --> fcpy. */ - case 1253: value = 1422; break; /* fmov --> fdup. */ - case 1255: value = 1753; break; /* mov --> orr. */ - case 2044: value = 1754; break; /* orn --> orr. */ - case 1258: value = 1756; break; /* mov --> orr. */ - case 1268: value = 1757; break; /* movs --> orrs. */ - case 1263: value = 1819; break; /* mov --> sel. */ - case 1266: value = 1820; break; /* mov --> sel. */ + case 759: value = 758; break; /* ror --> extr. */ + case 992: value = 991; break; /* bic --> and. */ + case 994: value = 993; break; /* mov --> orr. */ + case 997: value = 996; break; /* tst --> ands. */ + case 1002: value = 1001; break; /* uxtw --> mov. */ + case 1001: value = 1000; break; /* mov --> orr. */ + case 1004: value = 1003; break; /* mvn --> orn. */ + case 1008: value = 1007; break; /* tst --> ands. */ + case 1134: value = 1038; break; /* staddb --> ldaddb. */ + case 1135: value = 1039; break; /* staddh --> ldaddh. */ + case 1136: value = 1040; break; /* stadd --> ldadd. */ + case 1137: value = 1042; break; /* staddlb --> ldaddlb. */ + case 1138: value = 1045; break; /* staddlh --> ldaddlh. */ + case 1139: value = 1048; break; /* staddl --> ldaddl. */ + case 1140: value = 1050; break; /* stclrb --> ldclrb. */ + case 1141: value = 1051; break; /* stclrh --> ldclrh. */ + case 1142: value = 1052; break; /* stclr --> ldclr. */ + case 1143: value = 1054; break; /* stclrlb --> ldclrlb. */ + case 1144: value = 1057; break; /* stclrlh --> ldclrlh. */ + case 1145: value = 1060; break; /* stclrl --> ldclrl. */ + case 1146: value = 1062; break; /* steorb --> ldeorb. */ + case 1147: value = 1063; break; /* steorh --> ldeorh. */ + case 1148: value = 1064; break; /* steor --> ldeor. */ + case 1149: value = 1066; break; /* steorlb --> ldeorlb. */ + case 1150: value = 1069; break; /* steorlh --> ldeorlh. */ + case 1151: value = 1072; break; /* steorl --> ldeorl. */ + case 1152: value = 1074; break; /* stsetb --> ldsetb. */ + case 1153: value = 1075; break; /* stseth --> ldseth. */ + case 1154: value = 1076; break; /* stset --> ldset. */ + case 1155: value = 1078; break; /* stsetlb --> ldsetlb. */ + case 1156: value = 1081; break; /* stsetlh --> ldsetlh. */ + case 1157: value = 1084; break; /* stsetl --> ldsetl. */ + case 1158: value = 1086; break; /* stsmaxb --> ldsmaxb. */ + case 1159: value = 1087; break; /* stsmaxh --> ldsmaxh. */ + case 1160: value = 1088; break; /* stsmax --> ldsmax. */ + case 1161: value = 1090; break; /* stsmaxlb --> ldsmaxlb. */ + case 1162: value = 1093; break; /* stsmaxlh --> ldsmaxlh. */ + case 1163: value = 1096; break; /* stsmaxl --> ldsmaxl. */ + case 1164: value = 1098; break; /* stsminb --> ldsminb. */ + case 1165: value = 1099; break; /* stsminh --> ldsminh. */ + case 1166: value = 1100; break; /* stsmin --> ldsmin. */ + case 1167: value = 1102; break; /* stsminlb --> ldsminlb. */ + case 1168: value = 1105; break; /* stsminlh --> ldsminlh. */ + case 1169: value = 1108; break; /* stsminl --> ldsminl. */ + case 1170: value = 1110; break; /* stumaxb --> ldumaxb. */ + case 1171: value = 1111; break; /* stumaxh --> ldumaxh. */ + case 1172: value = 1112; break; /* stumax --> ldumax. */ + case 1173: value = 1114; break; /* stumaxlb --> ldumaxlb. */ + case 1174: value = 1117; break; /* stumaxlh --> ldumaxlh. */ + case 1175: value = 1120; break; /* stumaxl --> ldumaxl. */ + case 1176: value = 1122; break; /* stuminb --> lduminb. */ + case 1177: value = 1123; break; /* stuminh --> lduminh. */ + case 1178: value = 1124; break; /* stumin --> ldumin. */ + case 1179: value = 1126; break; /* stuminlb --> lduminlb. */ + case 1180: value = 1129; break; /* stuminlh --> lduminlh. */ + case 1181: value = 1132; break; /* stuminl --> lduminl. */ + case 1183: value = 1182; break; /* mov --> movn. */ + case 1185: value = 1184; break; /* mov --> movz. */ + case 1239: value = 1238; break; /* autibsp --> autibz. */ + case 1238: value = 1237; break; /* autibz --> autiasp. */ + case 1237: value = 1236; break; /* autiasp --> autiaz. */ + case 1236: value = 1235; break; /* autiaz --> pacibsp. */ + case 1235: value = 1234; break; /* pacibsp --> pacibz. */ + case 1234: value = 1233; break; /* pacibz --> paciasp. */ + case 1233: value = 1232; break; /* paciasp --> paciaz. */ + case 1232: value = 1211; break; /* paciaz --> tsb. */ + case 1211: value = 1210; break; /* tsb --> psb. */ + case 1210: value = 1209; break; /* psb --> esb. */ + case 1209: value = 1208; break; /* esb --> autib1716. */ + case 1208: value = 1207; break; /* autib1716 --> autia1716. */ + case 1207: value = 1206; break; /* autia1716 --> pacib1716. */ + case 1206: value = 1205; break; /* pacib1716 --> pacia1716. */ + case 1205: value = 1204; break; /* pacia1716 --> xpaclri. */ + case 1204: value = 1202; break; /* xpaclri --> sevl. */ + case 1202: value = 1201; break; /* sevl --> sev. */ + case 1201: value = 1200; break; /* sev --> wfi. */ + case 1200: value = 1199; break; /* wfi --> wfe. */ + case 1199: value = 1198; break; /* wfe --> yield. */ + case 1198: value = 1197; break; /* yield --> bti. */ + case 1197: value = 1196; break; /* bti --> csdb. */ + case 1196: value = 1195; break; /* csdb --> nop. */ + case 1195: value = 1194; break; /* nop --> hint. */ + case 1216: value = 1215; break; /* pssbb --> ssbb. */ + case 1215: value = 1214; break; /* ssbb --> dfb. */ + case 1214: value = 1213; break; /* dfb --> dsb. */ + case 1227: value = 1226; break; /* cpp --> dvp. */ + case 1226: value = 1225; break; /* dvp --> cfp. */ + case 1225: value = 1224; break; /* cfp --> tlbi. */ + case 1224: value = 1223; break; /* tlbi --> ic. */ + case 1223: value = 1222; break; /* ic --> dc. */ + case 1222: value = 1221; break; /* dc --> at. */ + case 1221: value = 1220; break; /* at --> sys. */ + case 2037: value = 1287; break; /* bic --> and. */ + case 1270: value = 1289; break; /* mov --> and. */ + case 1274: value = 1290; break; /* movs --> ands. */ + case 2038: value = 1325; break; /* cmple --> cmpge. */ + case 2041: value = 1328; break; /* cmplt --> cmpgt. */ + case 2039: value = 1330; break; /* cmplo --> cmphi. */ + case 2040: value = 1333; break; /* cmpls --> cmphs. */ + case 1267: value = 1355; break; /* mov --> cpy. */ + case 1269: value = 1356; break; /* mov --> cpy. */ + case 2048: value = 1272; break; /* fmov --> mov. */ + case 1272: value = 1357; break; /* mov --> cpy. */ + case 1262: value = 1369; break; /* mov --> dup. */ + case 1264: value = 1261; break; /* mov --> mov. */ + case 1261: value = 1370; break; /* mov --> dup. */ + case 2047: value = 1266; break; /* fmov --> mov. */ + case 1266: value = 1371; break; /* mov --> dup. */ + case 1265: value = 1372; break; /* mov --> dupm. */ + case 2042: value = 1374; break; /* eon --> eor. */ + case 1275: value = 1376; break; /* not --> eor. */ + case 1276: value = 1377; break; /* nots --> eors. */ + case 2043: value = 1382; break; /* facle --> facge. */ + case 2044: value = 1383; break; /* faclt --> facgt. */ + case 2045: value = 1396; break; /* fcmle --> fcmge. */ + case 2046: value = 1398; break; /* fcmlt --> fcmgt. */ + case 1259: value = 1404; break; /* fmov --> fcpy. */ + case 1258: value = 1427; break; /* fmov --> fdup. */ + case 1260: value = 1758; break; /* mov --> orr. */ + case 2049: value = 1759; break; /* orn --> orr. */ + case 1263: value = 1761; break; /* mov --> orr. */ + case 1273: value = 1762; break; /* movs --> orrs. */ + case 1268: value = 1824; break; /* mov --> sel. */ + case 1271: value = 1825; break; /* mov --> sel. */ default: return NULL; } @@ -23769,7 +23782,6 @@ case 28: case 29: case 30: - case 163: case 164: case 165: case 166: @@ -23779,7 +23791,7 @@ case 170: case 171: case 172: - case 187: + case 173: case 188: case 189: case 190: @@ -23788,8 +23800,9 @@ case 193: case 194: case 195: - case 201: - case 204: + case 196: + case 202: + case 205: return aarch64_ext_regno (self, info, code, inst, errors); case 9: return aarch64_ext_regrt_sysins (self, info, code, inst, errors); @@ -23805,7 +23818,7 @@ case 32: case 33: case 34: - case 207: + case 208: return aarch64_ext_reglane (self, info, code, inst, errors); case 35: return aarch64_ext_reglist (self, info, code, inst, errors); @@ -23835,14 +23848,14 @@ case 65: case 66: case 67: - case 78: + case 68: case 79: case 80: case 81: case 82: - case 160: - case 162: - case 179: + case 83: + case 161: + case 163: case 180: case 181: case 182: @@ -23850,7 +23863,8 @@ case 184: case 185: case 186: - case 206: + case 187: + case 207: return aarch64_ext_imm (self, info, code, inst, errors); case 43: case 44: @@ -23862,83 +23876,83 @@ case 48: return aarch64_ext_shll_imm (self, info, code, inst, errors); case 51: - case 150: + case 151: return aarch64_ext_fpimm (self, info, code, inst, errors); - case 68: - case 158: - return aarch64_ext_limm (self, info, code, inst, errors); case 69: - return aarch64_ext_aimm (self, info, code, inst, errors); + case 159: + return aarch64_ext_limm (self, info, code, inst, errors); case 70: - return aarch64_ext_imm_half (self, info, code, inst, errors); + return aarch64_ext_aimm (self, info, code, inst, errors); case 71: + return aarch64_ext_imm_half (self, info, code, inst, errors); + case 72: return aarch64_ext_fbits (self, info, code, inst, errors); - case 73: case 74: - case 155: - return aarch64_ext_imm_rotate2 (self, info, code, inst, errors); case 75: - case 154: case 156: - return aarch64_ext_imm_rotate1 (self, info, code, inst, errors); + return aarch64_ext_imm_rotate2 (self, info, code, inst, errors); case 76: + case 155: + case 157: + return aarch64_ext_imm_rotate1 (self, info, code, inst, errors); case 77: + case 78: return aarch64_ext_cond (self, info, code, inst, errors); - case 83: - case 92: - return aarch64_ext_addr_simple (self, info, code, inst, errors); case 84: - return aarch64_ext_addr_regoff (self, info, code, inst, errors); + case 93: + return aarch64_ext_addr_simple (self, info, code, inst, errors); case 85: + return aarch64_ext_addr_regoff (self, info, code, inst, errors); case 86: case 87: - case 89: - case 91: - return aarch64_ext_addr_simm (self, info, code, inst, errors); case 88: - return aarch64_ext_addr_simm10 (self, info, code, inst, errors); case 90: + case 92: + return aarch64_ext_addr_simm (self, info, code, inst, errors); + case 89: + return aarch64_ext_addr_simm10 (self, info, code, inst, errors); + case 91: return aarch64_ext_addr_uimm12 (self, info, code, inst, errors); - case 93: - return aarch64_ext_addr_offset (self, info, code, inst, errors); case 94: - return aarch64_ext_simd_addr_post (self, info, code, inst, errors); + return aarch64_ext_addr_offset (self, info, code, inst, errors); case 95: - return aarch64_ext_sysreg (self, info, code, inst, errors); + return aarch64_ext_simd_addr_post (self, info, code, inst, errors); case 96: - return aarch64_ext_pstatefield (self, info, code, inst, errors); + return aarch64_ext_sysreg (self, info, code, inst, errors); case 97: + return aarch64_ext_pstatefield (self, info, code, inst, errors); case 98: case 99: case 100: case 101: - return aarch64_ext_sysins_op (self, info, code, inst, errors); case 102: + return aarch64_ext_sysins_op (self, info, code, inst, errors); case 103: - return aarch64_ext_barrier (self, info, code, inst, errors); case 104: - return aarch64_ext_prfop (self, info, code, inst, errors); + return aarch64_ext_barrier (self, info, code, inst, errors); case 105: + return aarch64_ext_prfop (self, info, code, inst, errors); case 106: - return aarch64_ext_hint (self, info, code, inst, errors); + return aarch64_ext_none (self, info, code, inst, errors); case 107: + return aarch64_ext_hint (self, info, code, inst, errors); case 108: - return aarch64_ext_sve_addr_ri_s4 (self, info, code, inst, errors); case 109: + return aarch64_ext_sve_addr_ri_s4 (self, info, code, inst, errors); case 110: case 111: case 112: - return aarch64_ext_sve_addr_ri_s4xvl (self, info, code, inst, errors); case 113: - return aarch64_ext_sve_addr_ri_s6xvl (self, info, code, inst, errors); + return aarch64_ext_sve_addr_ri_s4xvl (self, info, code, inst, errors); case 114: - return aarch64_ext_sve_addr_ri_s9xvl (self, info, code, inst, errors); + return aarch64_ext_sve_addr_ri_s6xvl (self, info, code, inst, errors); case 115: + return aarch64_ext_sve_addr_ri_s9xvl (self, info, code, inst, errors); case 116: case 117: case 118: - return aarch64_ext_sve_addr_ri_u6 (self, info, code, inst, errors); case 119: + return aarch64_ext_sve_addr_ri_u6 (self, info, code, inst, errors); case 120: case 121: case 122: @@ -23952,8 +23966,8 @@ case 130: case 131: case 132: - return aarch64_ext_sve_addr_rr_lsl (self, info, code, inst, errors); case 133: + return aarch64_ext_sve_addr_rr_lsl (self, info, code, inst, errors); case 134: case 135: case 136: @@ -23961,52 +23975,53 @@ case 138: case 139: case 140: - return aarch64_ext_sve_addr_rz_xtw (self, info, code, inst, errors); case 141: + return aarch64_ext_sve_addr_rz_xtw (self, info, code, inst, errors); case 142: case 143: case 144: - return aarch64_ext_sve_addr_zi_u5 (self, info, code, inst, errors); case 145: - return aarch64_ext_sve_addr_zz_lsl (self, info, code, inst, errors); + return aarch64_ext_sve_addr_zi_u5 (self, info, code, inst, errors); case 146: - return aarch64_ext_sve_addr_zz_sxtw (self, info, code, inst, errors); + return aarch64_ext_sve_addr_zz_lsl (self, info, code, inst, errors); case 147: - return aarch64_ext_sve_addr_zz_uxtw (self, info, code, inst, errors); + return aarch64_ext_sve_addr_zz_sxtw (self, info, code, inst, errors); case 148: - return aarch64_ext_sve_aimm (self, info, code, inst, errors); + return aarch64_ext_sve_addr_zz_uxtw (self, info, code, inst, errors); case 149: + return aarch64_ext_sve_aimm (self, info, code, inst, errors); + case 150: return aarch64_ext_sve_asimm (self, info, code, inst, errors); - case 151: - return aarch64_ext_sve_float_half_one (self, info, code, inst, errors); case 152: - return aarch64_ext_sve_float_half_two (self, info, code, inst, errors); + return aarch64_ext_sve_float_half_one (self, info, code, inst, errors); case 153: + return aarch64_ext_sve_float_half_two (self, info, code, inst, errors); + case 154: return aarch64_ext_sve_float_zero_one (self, info, code, inst, errors); - case 157: + case 158: return aarch64_ext_inv_limm (self, info, code, inst, errors); - case 159: + case 160: return aarch64_ext_sve_limm_mov (self, info, code, inst, errors); - case 161: + case 162: return aarch64_ext_sve_scale (self, info, code, inst, errors); - case 173: case 174: case 175: - return aarch64_ext_sve_shlimm (self, info, code, inst, errors); case 176: + return aarch64_ext_sve_shlimm (self, info, code, inst, errors); case 177: case 178: + case 179: return aarch64_ext_sve_shrimm (self, info, code, inst, errors); - case 196: case 197: case 198: case 199: case 200: + case 201: return aarch64_ext_sve_quad_index (self, info, code, inst, errors); - case 202: - return aarch64_ext_sve_index (self, info, code, inst, errors); case 203: - case 205: + return aarch64_ext_sve_index (self, info, code, inst, errors); + case 204: + case 206: return aarch64_ext_sve_reglist (self, info, code, inst, errors); default: assert (0); abort (); } diff -Nru gdb-9.1/opcodes/aarch64-dis.c gdb-10.2/opcodes/aarch64-dis.c --- gdb-9.1/opcodes/aarch64-dis.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/aarch64-dis.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* aarch64-dis.c -- AArch64 disassembler. - Copyright (C) 2009-2019 Free Software Foundation, Inc. + Copyright (C) 2009-2020 Free Software Foundation, Inc. Contributed by ARM Ltd. This file is part of the GNU opcodes library. @@ -35,6 +35,7 @@ MAP_DATA }; +static aarch64_feature_set arch_variant; /* See select_aarch64_variant. */ static enum map_type last_type; static int last_mapping_sym = -1; static bfd_vma last_stop_offset = 0; @@ -178,18 +179,15 @@ } /* Sign-extend bit I of VALUE. */ -static inline int32_t +static inline uint64_t sign_extend (aarch64_insn value, unsigned i) { - uint32_t ret = value; + uint64_t ret, sign; assert (i < 32); - if ((value >> i) & 0x1) - { - uint32_t val = (uint32_t)(-1) << i; - ret = ret | val; - } - return (int32_t) ret; + ret = value; + sign = (uint64_t) 1 << i; + return ((ret & (sign + sign - 1)) ^ sign) - sign; } /* N.B. the following inline helpfer functions create a dependency on the @@ -255,6 +253,16 @@ /* Operand extractors. */ bfd_boolean +aarch64_ext_none (const aarch64_operand *self ATTRIBUTE_UNUSED, + aarch64_opnd_info *info ATTRIBUTE_UNUSED, + const aarch64_insn code ATTRIBUTE_UNUSED, + const aarch64_inst *inst ATTRIBUTE_UNUSED, + aarch64_operand_error *errors ATTRIBUTE_UNUSED) +{ + return TRUE; +} + +bfd_boolean aarch64_ext_regno (const aarch64_operand *self, aarch64_opnd_info *info, const aarch64_insn code, const aarch64_inst *inst ATTRIBUTE_UNUSED, @@ -658,7 +666,7 @@ const aarch64_inst *inst ATTRIBUTE_UNUSED, aarch64_operand_error *errors ATTRIBUTE_UNUSED) { - int64_t imm; + uint64_t imm; imm = extract_all_fields (self, code); @@ -2683,6 +2691,13 @@ DEBUG_TRACE ("skip %s as base opcode not match", alias->name); continue; } + + if (!AARCH64_CPU_HAS_FEATURE (arch_variant, *alias->avariant)) + { + DEBUG_TRACE ("skip %s: we're missing features", alias->name); + continue; + } + /* No need to do any complicated transformation on operands, if the alias opcode does not have any operand. */ if (aarch64_num_of_operands (alias) == 0 && alias->opcode == inst->value) @@ -2975,7 +2990,7 @@ DEBUG_TRACE ("constraint matching FAIL"); } -decode_fail: + decode_fail: return FALSE; } @@ -3067,7 +3082,7 @@ /* Generate the operand string in STR. */ aarch64_print_operand (str, sizeof (str), pc, opcode, opnds, i, &pcrel_p, - &info->target, ¬es); + &info->target, ¬es, arch_variant); /* Print the delimiter (taking account of omitted operand(s)). */ if (str[0] != '\0') @@ -3314,6 +3329,7 @@ get_sym_code_type (struct disassemble_info *info, int n, enum map_type *map_type) { + asymbol * as; elf_symbol_type *es; unsigned int type; const char *name; @@ -3322,7 +3338,14 @@ if (info->section != NULL && info->section != info->symtab[n]->section) return FALSE; - es = *(elf_symbol_type **)(info->symtab + n); + if (n >= info->symtab_size) + return FALSE; + + as = info->symtab[n]; + if (bfd_asymbol_flavour (as) != bfd_target_elf_flavour) + return FALSE; + es = (elf_symbol_type *) as; + type = ELF_ST_TYPE (es->internal_elf_sym.st_info); /* If the symbol has function type then use that. */ @@ -3345,6 +3368,24 @@ return FALSE; } +/* Set the feature bits in arch_variant in order to get the correct disassembly + for the chosen architecture variant. + + Currently we only restrict disassembly for Armv8-R and otherwise enable all + non-R-profile features. */ +static void +select_aarch64_variant (unsigned mach) +{ + switch (mach) + { + case bfd_mach_aarch64_8R: + arch_variant = AARCH64_ARCH_V8_R; + break; + default: + arch_variant = AARCH64_ANY & ~(AARCH64_FEATURE_V8_R); + } +} + /* Entry-point of the AArch64 disassembler. */ int @@ -3359,6 +3400,7 @@ unsigned int size = 4; unsigned long data; aarch64_operand_error errors; + static bfd_boolean set_features; if (info->disassembler_options) { @@ -3370,6 +3412,12 @@ info->disassembler_options = NULL; } + if (!set_features) + { + select_aarch64_variant (info->mach); + set_features = TRUE; + } + /* Aarch64 instructions are always little-endian */ info->endian_code = BFD_ENDIAN_LITTLE; diff -Nru gdb-9.1/opcodes/aarch64-dis.h gdb-10.2/opcodes/aarch64-dis.h --- gdb-9.1/opcodes/aarch64-dis.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/aarch64-dis.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* aarch64-dis.h -- Header file for aarch64-dis.c and aarch64-dis-2.c. - Copyright (C) 2012-2019 Free Software Foundation, Inc. + Copyright (C) 2012-2020 Free Software Foundation, Inc. Contributed by ARM Ltd. This file is part of the GNU opcodes library. @@ -62,6 +62,7 @@ const aarch64_insn, const aarch64_inst *, \ aarch64_operand_error *) +AARCH64_DECL_OPD_EXTRACTOR (ext_none); AARCH64_DECL_OPD_EXTRACTOR (ext_regno); AARCH64_DECL_OPD_EXTRACTOR (ext_regno_pair); AARCH64_DECL_OPD_EXTRACTOR (ext_regrt_sysins); diff -Nru gdb-9.1/opcodes/aarch64-gen.c gdb-10.2/opcodes/aarch64-gen.c --- gdb-9.1/opcodes/aarch64-gen.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/aarch64-gen.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* aarch64-gen.c -- Generate tables and routines for opcode lookup and instruction encoding and decoding. - Copyright (C) 2012-2019 Free Software Foundation, Inc. + Copyright (C) 2012-2020 Free Software Foundation, Inc. Contributed by ARM Ltd. This file is part of the GNU opcodes library. @@ -249,7 +249,7 @@ goto divide_table_1_finish; } -divide_table_1_try_again: + divide_table_1_try_again: mask_and = -1; ent = opcode; while (ent) @@ -339,7 +339,7 @@ divide_table_1 (bittree->bits[0], list0.next); divide_table_1 (bittree->bits[1], list1.next); -divide_table_1_finish: + divide_table_1_finish: if (debug) printf ("Leave from depth %d\n", depth); --depth; @@ -1246,7 +1246,7 @@ print_divide_result (decoder_tree); printf ("/* This file is automatically generated by aarch64-gen. Do not edit! */\n"); - printf ("/* Copyright (C) 2012-2019 Free Software Foundation, Inc.\n\ + printf ("/* Copyright (C) 2012-2020 Free Software Foundation, Inc.\n\ Contributed by ARM Ltd.\n\ \n\ This file is part of the GNU opcodes library.\n\ diff -Nru gdb-9.1/opcodes/aarch64-opc-2.c gdb-10.2/opcodes/aarch64-opc-2.c --- gdb-9.1/opcodes/aarch64-opc-2.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/aarch64-opc-2.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* This file is automatically generated by aarch64-gen. Do not edit! */ -/* Copyright (C) 2012-2019 Free Software Foundation, Inc. +/* Copyright (C) 2012-2020 Free Software Foundation, Inc. Contributed by ARM Ltd. This file is part of the GNU opcodes library. @@ -89,6 +89,7 @@ {AARCH64_OPND_CLASS_IMMEDIATE, "UIMM10", OPD_F_SHIFT_BY_4 | OPD_F_HAS_INSERTER | OPD_F_HAS_EXTRACTOR, {FLD_immr}, "a 10-bit unsigned multiple of 16"}, {AARCH64_OPND_CLASS_IMMEDIATE, "BIT_NUM", OPD_F_HAS_INSERTER | OPD_F_HAS_EXTRACTOR, {FLD_b5, FLD_b40}, "the bit number to be tested"}, {AARCH64_OPND_CLASS_IMMEDIATE, "EXCEPTION", OPD_F_HAS_INSERTER | OPD_F_HAS_EXTRACTOR, {FLD_imm16}, "a 16-bit unsigned immediate"}, + {AARCH64_OPND_CLASS_IMMEDIATE, "UNDEFINED", OPD_F_HAS_INSERTER | OPD_F_HAS_EXTRACTOR, {FLD_imm16_2}, "a 16-bit unsigned immediate"}, {AARCH64_OPND_CLASS_IMMEDIATE, "CCMP_IMM", OPD_F_HAS_INSERTER | OPD_F_HAS_EXTRACTOR, {FLD_imm5}, "a 5-bit unsigned immediate"}, {AARCH64_OPND_CLASS_IMMEDIATE, "SIMM5", OPD_F_SEXT | OPD_F_HAS_INSERTER | OPD_F_HAS_EXTRACTOR, {FLD_imm5}, "a 5-bit signed immediate"}, {AARCH64_OPND_CLASS_IMMEDIATE, "NZCV", OPD_F_HAS_INSERTER | OPD_F_HAS_EXTRACTOR, {FLD_nzcv}, "a flag bit specifier giving an alternative value for each flag"}, @@ -129,7 +130,7 @@ {AARCH64_OPND_CLASS_SYSTEM, "BARRIER", OPD_F_HAS_INSERTER | OPD_F_HAS_EXTRACTOR, {}, "a barrier option name"}, {AARCH64_OPND_CLASS_SYSTEM, "BARRIER_ISB", OPD_F_HAS_INSERTER | OPD_F_HAS_EXTRACTOR, {}, "the ISB option name SY or an optional 4-bit unsigned immediate"}, {AARCH64_OPND_CLASS_SYSTEM, "PRFOP", OPD_F_HAS_INSERTER | OPD_F_HAS_EXTRACTOR, {}, "a prefetch operation specifier"}, - {AARCH64_OPND_CLASS_SYSTEM, "BARRIER_PSB", OPD_F_HAS_INSERTER | OPD_F_HAS_EXTRACTOR, {}, "the PSB option name CSYNC"}, + {AARCH64_OPND_CLASS_SYSTEM, "BARRIER_PSB", OPD_F_HAS_INSERTER | OPD_F_HAS_EXTRACTOR, {}, "the PSB/TSB option name CSYNC"}, {AARCH64_OPND_CLASS_SYSTEM, "BTI", OPD_F_HAS_INSERTER | OPD_F_HAS_EXTRACTOR, {}, "BTI targets j/c/jc"}, {AARCH64_OPND_CLASS_ADDRESS, "SVE_ADDR_RI_S4x16", 4 << OPD_F_OD_LSB | OPD_F_HAS_INSERTER | OPD_F_HAS_EXTRACTOR, {FLD_Rn}, "an address with a 4-bit signed offset, multiplied by 16"}, {AARCH64_OPND_CLASS_ADDRESS, "SVE_ADDR_RI_S4x32", 5 << OPD_F_OD_LSB | OPD_F_HAS_INSERTER | OPD_F_HAS_EXTRACTOR, {FLD_Rn}, "an address with a 4-bit signed offset, multiplied by 32"}, @@ -241,48 +242,48 @@ static const unsigned op_enum_table [] = { 0, - 888, 889, 890, - 893, + 891, 894, 895, 896, 897, - 891, - 892, 898, + 892, + 893, 899, - 921, + 900, 922, 923, - 926, + 924, 927, 928, 929, 930, - 924, - 925, 931, + 925, + 926, 932, - 986, + 933, 987, 988, 989, + 990, 12, 636, 637, - 1181, - 1183, - 1185, - 993, - 1184, 1182, + 1184, + 1186, + 994, + 1185, + 1183, 318, 624, 635, 634, - 991, + 992, 631, 628, 620, @@ -292,34 +293,34 @@ 630, 632, 633, - 1001, + 1002, 664, 667, 670, 665, 668, - 824, + 825, 178, 179, 180, 181, 516, - 758, + 759, 389, 391, 413, 415, - 1258, 1263, - 1256, - 1255, - 1259, - 1266, 1268, - 1269, - 1265, + 1261, + 1260, + 1264, 1271, + 1273, + 1274, 1270, + 1276, + 1275, 131, }; diff -Nru gdb-9.1/opcodes/aarch64-opc.c gdb-10.2/opcodes/aarch64-opc.c --- gdb-9.1/opcodes/aarch64-opc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/aarch64-opc.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* aarch64-opc.c -- AArch64 opcode support. - Copyright (C) 2009-2019 Free Software Foundation, Inc. + Copyright (C) 2009-2020 Free Software Foundation, Inc. Contributed by ARM Ltd. This file is part of the GNU opcodes library. @@ -251,6 +251,7 @@ { 10, 12 }, /* imm12: in ld/st unsigned imm or add/sub shifted inst. */ { 5, 14 }, /* imm14: in test bit and branch instructions. */ { 5, 16 }, /* imm16: in exception instructions. */ + { 0, 16 }, /* imm16_2: in udf instruction. */ { 0, 26 }, /* imm26: in unconditional branch instructions. */ { 10, 6 }, /* imms: in bitfield and logical immediate instructions. */ { 16, 6 }, /* immr: in bitfield and logical immediate instructions. */ @@ -546,7 +547,7 @@ assert (width < 32); if (width < sizeof (value) * 8) { - int64_t lim = (int64_t)1 << (width - 1); + int64_t lim = (uint64_t) 1 << (width - 1); if (value >= -lim && value < lim) return 1; } @@ -560,7 +561,7 @@ assert (width < 32); if (width < sizeof (value) * 8) { - int64_t lim = (int64_t)1 << width; + int64_t lim = (uint64_t) 1 << width; if (value >= 0 && value < lim) return 1; } @@ -1063,7 +1064,7 @@ amount will be returned in *SHIFT_AMOUNT. */ bfd_boolean -aarch64_wide_constant_p (int64_t value, int is32, unsigned int *shift_amount) +aarch64_wide_constant_p (uint64_t value, int is32, unsigned int *shift_amount) { int amount; @@ -1074,22 +1075,21 @@ /* Allow all zeros or all ones in top 32-bits, so that 32-bit constant expressions like ~0x80000000 are permitted. */ - uint64_t ext = value; - if (ext >> 32 != 0 && ext >> 32 != (uint64_t) 0xffffffff) + if (value >> 32 != 0 && value >> 32 != 0xffffffff) /* Immediate out of range. */ return FALSE; - value &= (int64_t) 0xffffffff; + value &= 0xffffffff; } /* first, try movz then movn */ amount = -1; - if ((value & ((int64_t) 0xffff << 0)) == value) + if ((value & ((uint64_t) 0xffff << 0)) == value) amount = 0; - else if ((value & ((int64_t) 0xffff << 16)) == value) + else if ((value & ((uint64_t) 0xffff << 16)) == value) amount = 16; - else if (!is32 && (value & ((int64_t) 0xffff << 32)) == value) + else if (!is32 && (value & ((uint64_t) 0xffff << 32)) == value) amount = 32; - else if (!is32 && (value & ((int64_t) 0xffff << 48)) == value) + else if (!is32 && (value & ((uint64_t) 0xffff << 48)) == value) amount = 48; if (amount == -1) @@ -1535,7 +1535,7 @@ : _("z0-z7 expected")); return 0; } - mask = (1 << (size - shift)) - 1; + mask = (1u << (size - shift)) - 1; if (!value_in_range_p (opnd->reglane.index, 0, mask)) { set_elem_idx_out_of_range_error (mismatch_detail, idx, 0, mask); @@ -2146,6 +2146,7 @@ case AARCH64_OPND_NZCV: case AARCH64_OPND_CCMP_IMM: case AARCH64_OPND_EXCEPTION: + case AARCH64_OPND_UNDEFINED: case AARCH64_OPND_TME_UIMM16: case AARCH64_OPND_UIMM4: case AARCH64_OPND_UIMM4_ADDG: @@ -2161,7 +2162,7 @@ if (!value_fit_unsigned_field_p (opnd->imm.value, size)) { set_imm_out_of_range_error (mismatch_detail, idx, 0, - (1 << size) - 1); + (1u << size) - 1); return 0; } break; @@ -3142,7 +3143,8 @@ aarch64_print_operand (char *buf, size_t size, bfd_vma pc, const aarch64_opcode *opcode, const aarch64_opnd_info *opnds, int idx, int *pcrel_p, - bfd_vma *address, char** notes) + bfd_vma *address, char** notes, + aarch64_feature_set features) { unsigned int i, num_conds; const char *name = NULL; @@ -3358,6 +3360,7 @@ case AARCH64_OPND_IMM0: case AARCH64_OPND_IMMR: case AARCH64_OPND_IMMS: + case AARCH64_OPND_UNDEFINED: case AARCH64_OPND_FBITS: case AARCH64_OPND_TME_UIMM16: case AARCH64_OPND_SIMM5: @@ -3686,14 +3689,17 @@ case AARCH64_OPND_SYSREG: for (i = 0; aarch64_sys_regs[i].name; ++i) { + const aarch64_sys_reg *sr = aarch64_sys_regs + i; + bfd_boolean exact_match - = (aarch64_sys_regs[i].flags & opnd->sysreg.flags) - == opnd->sysreg.flags; + = (!(sr->flags & (F_REG_READ | F_REG_WRITE)) + || (sr->flags & opnd->sysreg.flags) == opnd->sysreg.flags) + && AARCH64_CPU_HAS_FEATURE (features, sr->features); /* Try and find an exact match, But if that fails, return the first partial match that was found. */ if (aarch64_sys_regs[i].value == opnd->sysreg.value - && ! aarch64_sys_reg_deprecated_p (&aarch64_sys_regs[i]) + && ! aarch64_sys_reg_deprecated_p (aarch64_sys_regs[i].flags) && (name == NULL || exact_match)) { name = aarch64_sys_regs[i].name; @@ -3763,6 +3769,9 @@ break; case AARCH64_OPND_BARRIER_PSB: + snprintf (buf, size, "csync"); + break; + case AARCH64_OPND_BTI_TARGET: if ((HINT_FLAG (opnd->hint_option->value) & HINT_OPD_F_NOPRINT) == 0) snprintf (buf, size, "%s", opnd->hint_option->name); @@ -3797,665 +3806,518 @@ #define C14 14 #define C15 15 -/* TODO there is one more issues need to be resolved - 1. handle cpu-implementation-defined system registers. */ -const aarch64_sys_reg aarch64_sys_regs [] = -{ - { "spsr_el1", CPEN_(0,C0,0), 0 }, /* = spsr_svc */ - { "spsr_el12", CPEN_ (5, C0, 0), F_ARCHEXT }, - { "elr_el1", CPEN_(0,C0,1), 0 }, - { "elr_el12", CPEN_ (5, C0, 1), F_ARCHEXT }, - { "sp_el0", CPEN_(0,C1,0), 0 }, - { "spsel", CPEN_(0,C2,0), 0 }, - { "daif", CPEN_(3,C2,1), 0 }, - { "currentel", CPEN_(0,C2,2), F_REG_READ }, /* RO */ - { "pan", CPEN_(0,C2,3), F_ARCHEXT }, - { "uao", CPEN_ (0, C2, 4), F_ARCHEXT }, - { "nzcv", CPEN_(3,C2,0), 0 }, - { "ssbs", CPEN_(3,C2,6), F_ARCHEXT }, - { "fpcr", CPEN_(3,C4,0), 0 }, - { "fpsr", CPEN_(3,C4,1), 0 }, - { "dspsr_el0", CPEN_(3,C5,0), 0 }, - { "dlr_el0", CPEN_(3,C5,1), 0 }, - { "spsr_el2", CPEN_(4,C0,0), 0 }, /* = spsr_hyp */ - { "elr_el2", CPEN_(4,C0,1), 0 }, - { "sp_el1", CPEN_(4,C1,0), 0 }, - { "spsr_irq", CPEN_(4,C3,0), 0 }, - { "spsr_abt", CPEN_(4,C3,1), 0 }, - { "spsr_und", CPEN_(4,C3,2), 0 }, - { "spsr_fiq", CPEN_(4,C3,3), 0 }, - { "spsr_el3", CPEN_(6,C0,0), 0 }, - { "elr_el3", CPEN_(6,C0,1), 0 }, - { "sp_el2", CPEN_(6,C1,0), 0 }, - { "spsr_svc", CPEN_(0,C0,0), F_DEPRECATED }, /* = spsr_el1 */ - { "spsr_hyp", CPEN_(4,C0,0), F_DEPRECATED }, /* = spsr_el2 */ - { "midr_el1", CPENC(3,0,C0,C0,0), F_REG_READ }, /* RO */ - { "ctr_el0", CPENC(3,3,C0,C0,1), F_REG_READ }, /* RO */ - { "mpidr_el1", CPENC(3,0,C0,C0,5), F_REG_READ }, /* RO */ - { "revidr_el1", CPENC(3,0,C0,C0,6), F_REG_READ }, /* RO */ - { "aidr_el1", CPENC(3,1,C0,C0,7), F_REG_READ }, /* RO */ - { "dczid_el0", CPENC(3,3,C0,C0,7), F_REG_READ }, /* RO */ - { "id_dfr0_el1", CPENC(3,0,C0,C1,2), F_REG_READ }, /* RO */ - { "id_pfr0_el1", CPENC(3,0,C0,C1,0), F_REG_READ }, /* RO */ - { "id_pfr1_el1", CPENC(3,0,C0,C1,1), F_REG_READ }, /* RO */ - { "id_pfr2_el1", CPENC(3,0,C0,C3,4), F_ARCHEXT | F_REG_READ}, /* RO */ - { "id_afr0_el1", CPENC(3,0,C0,C1,3), F_REG_READ }, /* RO */ - { "id_mmfr0_el1", CPENC(3,0,C0,C1,4), F_REG_READ }, /* RO */ - { "id_mmfr1_el1", CPENC(3,0,C0,C1,5), F_REG_READ }, /* RO */ - { "id_mmfr2_el1", CPENC(3,0,C0,C1,6), F_REG_READ }, /* RO */ - { "id_mmfr3_el1", CPENC(3,0,C0,C1,7), F_REG_READ }, /* RO */ - { "id_mmfr4_el1", CPENC(3,0,C0,C2,6), F_REG_READ }, /* RO */ - { "id_isar0_el1", CPENC(3,0,C0,C2,0), F_REG_READ }, /* RO */ - { "id_isar1_el1", CPENC(3,0,C0,C2,1), F_REG_READ }, /* RO */ - { "id_isar2_el1", CPENC(3,0,C0,C2,2), F_REG_READ }, /* RO */ - { "id_isar3_el1", CPENC(3,0,C0,C2,3), F_REG_READ }, /* RO */ - { "id_isar4_el1", CPENC(3,0,C0,C2,4), F_REG_READ }, /* RO */ - { "id_isar5_el1", CPENC(3,0,C0,C2,5), F_REG_READ }, /* RO */ - { "mvfr0_el1", CPENC(3,0,C0,C3,0), F_REG_READ }, /* RO */ - { "mvfr1_el1", CPENC(3,0,C0,C3,1), F_REG_READ }, /* RO */ - { "mvfr2_el1", CPENC(3,0,C0,C3,2), F_REG_READ }, /* RO */ - { "ccsidr_el1", CPENC(3,1,C0,C0,0), F_REG_READ }, /* RO */ - { "id_aa64pfr0_el1", CPENC(3,0,C0,C4,0), F_REG_READ }, /* RO */ - { "id_aa64pfr1_el1", CPENC(3,0,C0,C4,1), F_REG_READ }, /* RO */ - { "id_aa64dfr0_el1", CPENC(3,0,C0,C5,0), F_REG_READ }, /* RO */ - { "id_aa64dfr1_el1", CPENC(3,0,C0,C5,1), F_REG_READ }, /* RO */ - { "id_aa64isar0_el1", CPENC(3,0,C0,C6,0), F_REG_READ }, /* RO */ - { "id_aa64isar1_el1", CPENC(3,0,C0,C6,1), F_REG_READ }, /* RO */ - { "id_aa64mmfr0_el1", CPENC(3,0,C0,C7,0), F_REG_READ }, /* RO */ - { "id_aa64mmfr1_el1", CPENC(3,0,C0,C7,1), F_REG_READ }, /* RO */ - { "id_aa64mmfr2_el1", CPENC (3, 0, C0, C7, 2), F_ARCHEXT | F_REG_READ }, /* RO */ - { "id_aa64afr0_el1", CPENC(3,0,C0,C5,4), F_REG_READ }, /* RO */ - { "id_aa64afr1_el1", CPENC(3,0,C0,C5,5), F_REG_READ }, /* RO */ - { "id_aa64zfr0_el1", CPENC (3, 0, C0, C4, 4), F_ARCHEXT | F_REG_READ }, /* RO */ - { "clidr_el1", CPENC(3,1,C0,C0,1), F_REG_READ }, /* RO */ - { "csselr_el1", CPENC(3,2,C0,C0,0), 0 }, - { "vpidr_el2", CPENC(3,4,C0,C0,0), 0 }, - { "vmpidr_el2", CPENC(3,4,C0,C0,5), 0 }, - { "sctlr_el1", CPENC(3,0,C1,C0,0), 0 }, - { "sctlr_el2", CPENC(3,4,C1,C0,0), 0 }, - { "sctlr_el3", CPENC(3,6,C1,C0,0), 0 }, - { "sctlr_el12", CPENC (3, 5, C1, C0, 0), F_ARCHEXT }, - { "actlr_el1", CPENC(3,0,C1,C0,1), 0 }, - { "actlr_el2", CPENC(3,4,C1,C0,1), 0 }, - { "actlr_el3", CPENC(3,6,C1,C0,1), 0 }, - { "cpacr_el1", CPENC(3,0,C1,C0,2), 0 }, - { "cpacr_el12", CPENC (3, 5, C1, C0, 2), F_ARCHEXT }, - { "cptr_el2", CPENC(3,4,C1,C1,2), 0 }, - { "cptr_el3", CPENC(3,6,C1,C1,2), 0 }, - { "scr_el3", CPENC(3,6,C1,C1,0), 0 }, - { "hcr_el2", CPENC(3,4,C1,C1,0), 0 }, - { "mdcr_el2", CPENC(3,4,C1,C1,1), 0 }, - { "mdcr_el3", CPENC(3,6,C1,C3,1), 0 }, - { "hstr_el2", CPENC(3,4,C1,C1,3), 0 }, - { "hacr_el2", CPENC(3,4,C1,C1,7), 0 }, - { "zcr_el1", CPENC (3, 0, C1, C2, 0), F_ARCHEXT }, - { "zcr_el12", CPENC (3, 5, C1, C2, 0), F_ARCHEXT }, - { "zcr_el2", CPENC (3, 4, C1, C2, 0), F_ARCHEXT }, - { "zcr_el3", CPENC (3, 6, C1, C2, 0), F_ARCHEXT }, - { "zidr_el1", CPENC (3, 0, C0, C0, 7), F_ARCHEXT }, - { "ttbr0_el1", CPENC(3,0,C2,C0,0), 0 }, - { "ttbr1_el1", CPENC(3,0,C2,C0,1), 0 }, - { "ttbr0_el2", CPENC(3,4,C2,C0,0), 0 }, - { "ttbr1_el2", CPENC (3, 4, C2, C0, 1), F_ARCHEXT }, - { "ttbr0_el3", CPENC(3,6,C2,C0,0), 0 }, - { "ttbr0_el12", CPENC (3, 5, C2, C0, 0), F_ARCHEXT }, - { "ttbr1_el12", CPENC (3, 5, C2, C0, 1), F_ARCHEXT }, - { "vttbr_el2", CPENC(3,4,C2,C1,0), 0 }, - { "tcr_el1", CPENC(3,0,C2,C0,2), 0 }, - { "tcr_el2", CPENC(3,4,C2,C0,2), 0 }, - { "tcr_el3", CPENC(3,6,C2,C0,2), 0 }, - { "tcr_el12", CPENC (3, 5, C2, C0, 2), F_ARCHEXT }, - { "vtcr_el2", CPENC(3,4,C2,C1,2), 0 }, - { "apiakeylo_el1", CPENC (3, 0, C2, C1, 0), F_ARCHEXT }, - { "apiakeyhi_el1", CPENC (3, 0, C2, C1, 1), F_ARCHEXT }, - { "apibkeylo_el1", CPENC (3, 0, C2, C1, 2), F_ARCHEXT }, - { "apibkeyhi_el1", CPENC (3, 0, C2, C1, 3), F_ARCHEXT }, - { "apdakeylo_el1", CPENC (3, 0, C2, C2, 0), F_ARCHEXT }, - { "apdakeyhi_el1", CPENC (3, 0, C2, C2, 1), F_ARCHEXT }, - { "apdbkeylo_el1", CPENC (3, 0, C2, C2, 2), F_ARCHEXT }, - { "apdbkeyhi_el1", CPENC (3, 0, C2, C2, 3), F_ARCHEXT }, - { "apgakeylo_el1", CPENC (3, 0, C2, C3, 0), F_ARCHEXT }, - { "apgakeyhi_el1", CPENC (3, 0, C2, C3, 1), F_ARCHEXT }, - { "afsr0_el1", CPENC(3,0,C5,C1,0), 0 }, - { "afsr1_el1", CPENC(3,0,C5,C1,1), 0 }, - { "afsr0_el2", CPENC(3,4,C5,C1,0), 0 }, - { "afsr1_el2", CPENC(3,4,C5,C1,1), 0 }, - { "afsr0_el3", CPENC(3,6,C5,C1,0), 0 }, - { "afsr0_el12", CPENC (3, 5, C5, C1, 0), F_ARCHEXT }, - { "afsr1_el3", CPENC(3,6,C5,C1,1), 0 }, - { "afsr1_el12", CPENC (3, 5, C5, C1, 1), F_ARCHEXT }, - { "esr_el1", CPENC(3,0,C5,C2,0), 0 }, - { "esr_el2", CPENC(3,4,C5,C2,0), 0 }, - { "esr_el3", CPENC(3,6,C5,C2,0), 0 }, - { "esr_el12", CPENC (3, 5, C5, C2, 0), F_ARCHEXT }, - { "vsesr_el2", CPENC (3, 4, C5, C2, 3), F_ARCHEXT }, - { "fpexc32_el2", CPENC(3,4,C5,C3,0), 0 }, - { "erridr_el1", CPENC (3, 0, C5, C3, 0), F_ARCHEXT | F_REG_READ }, /* RO */ - { "errselr_el1", CPENC (3, 0, C5, C3, 1), F_ARCHEXT }, - { "erxfr_el1", CPENC (3, 0, C5, C4, 0), F_ARCHEXT | F_REG_READ }, /* RO */ - { "erxctlr_el1", CPENC (3, 0, C5, C4, 1), F_ARCHEXT }, - { "erxstatus_el1", CPENC (3, 0, C5, C4, 2), F_ARCHEXT }, - { "erxaddr_el1", CPENC (3, 0, C5, C4, 3), F_ARCHEXT }, - { "erxmisc0_el1", CPENC (3, 0, C5, C5, 0), F_ARCHEXT }, - { "erxmisc1_el1", CPENC (3, 0, C5, C5, 1), F_ARCHEXT }, - { "far_el1", CPENC(3,0,C6,C0,0), 0 }, - { "far_el2", CPENC(3,4,C6,C0,0), 0 }, - { "far_el3", CPENC(3,6,C6,C0,0), 0 }, - { "far_el12", CPENC (3, 5, C6, C0, 0), F_ARCHEXT }, - { "hpfar_el2", CPENC(3,4,C6,C0,4), 0 }, - { "par_el1", CPENC(3,0,C7,C4,0), 0 }, - { "mair_el1", CPENC(3,0,C10,C2,0), 0 }, - { "mair_el2", CPENC(3,4,C10,C2,0), 0 }, - { "mair_el3", CPENC(3,6,C10,C2,0), 0 }, - { "mair_el12", CPENC (3, 5, C10, C2, 0), F_ARCHEXT }, - { "amair_el1", CPENC(3,0,C10,C3,0), 0 }, - { "amair_el2", CPENC(3,4,C10,C3,0), 0 }, - { "amair_el3", CPENC(3,6,C10,C3,0), 0 }, - { "amair_el12", CPENC (3, 5, C10, C3, 0), F_ARCHEXT }, - { "vbar_el1", CPENC(3,0,C12,C0,0), 0 }, - { "vbar_el2", CPENC(3,4,C12,C0,0), 0 }, - { "vbar_el3", CPENC(3,6,C12,C0,0), 0 }, - { "vbar_el12", CPENC (3, 5, C12, C0, 0), F_ARCHEXT }, - { "rvbar_el1", CPENC(3,0,C12,C0,1), F_REG_READ }, /* RO */ - { "rvbar_el2", CPENC(3,4,C12,C0,1), F_REG_READ }, /* RO */ - { "rvbar_el3", CPENC(3,6,C12,C0,1), F_REG_READ }, /* RO */ - { "rmr_el1", CPENC(3,0,C12,C0,2), 0 }, - { "rmr_el2", CPENC(3,4,C12,C0,2), 0 }, - { "rmr_el3", CPENC(3,6,C12,C0,2), 0 }, - { "isr_el1", CPENC(3,0,C12,C1,0), F_REG_READ }, /* RO */ - { "disr_el1", CPENC (3, 0, C12, C1, 1), F_ARCHEXT }, - { "vdisr_el2", CPENC (3, 4, C12, C1, 1), F_ARCHEXT }, - { "contextidr_el1", CPENC(3,0,C13,C0,1), 0 }, - { "contextidr_el2", CPENC (3, 4, C13, C0, 1), F_ARCHEXT }, - { "contextidr_el12", CPENC (3, 5, C13, C0, 1), F_ARCHEXT }, - { "rndr", CPENC(3,3,C2,C4,0), F_ARCHEXT | F_REG_READ }, /* RO */ - { "rndrrs", CPENC(3,3,C2,C4,1), F_ARCHEXT | F_REG_READ }, /* RO */ - { "tco", CPENC(3,3,C4,C2,7), F_ARCHEXT }, - { "tfsre0_el1", CPENC(3,0,C5,C6,1), F_ARCHEXT }, - { "tfsr_el1", CPENC(3,0,C5,C6,0), F_ARCHEXT }, - { "tfsr_el2", CPENC(3,4,C5,C6,0), F_ARCHEXT }, - { "tfsr_el3", CPENC(3,6,C5,C6,0), F_ARCHEXT }, - { "tfsr_el12", CPENC(3,5,C5,C6,0), F_ARCHEXT }, - { "rgsr_el1", CPENC(3,0,C1,C0,5), F_ARCHEXT }, - { "gcr_el1", CPENC(3,0,C1,C0,6), F_ARCHEXT }, - { "gmid_el1", CPENC(3,1,C0,C0,4), F_ARCHEXT | F_REG_READ }, /* RO */ - { "tpidr_el0", CPENC(3,3,C13,C0,2), 0 }, - { "tpidrro_el0", CPENC(3,3,C13,C0,3), 0 }, /* RW */ - { "tpidr_el1", CPENC(3,0,C13,C0,4), 0 }, - { "tpidr_el2", CPENC(3,4,C13,C0,2), 0 }, - { "tpidr_el3", CPENC(3,6,C13,C0,2), 0 }, - { "scxtnum_el0", CPENC(3,3,C13,C0,7), F_ARCHEXT }, - { "scxtnum_el1", CPENC(3,0,C13,C0,7), F_ARCHEXT }, - { "scxtnum_el2", CPENC(3,4,C13,C0,7), F_ARCHEXT }, - { "scxtnum_el12", CPENC(3,5,C13,C0,7), F_ARCHEXT }, - { "scxtnum_el3", CPENC(3,6,C13,C0,7), F_ARCHEXT }, - { "teecr32_el1", CPENC(2,2,C0, C0,0), 0 }, /* See section 3.9.7.1 */ - { "cntfrq_el0", CPENC(3,3,C14,C0,0), 0 }, /* RW */ - { "cntpct_el0", CPENC(3,3,C14,C0,1), F_REG_READ }, /* RO */ - { "cntvct_el0", CPENC(3,3,C14,C0,2), F_REG_READ }, /* RO */ - { "cntvoff_el2", CPENC(3,4,C14,C0,3), 0 }, - { "cntkctl_el1", CPENC(3,0,C14,C1,0), 0 }, - { "cntkctl_el12", CPENC (3, 5, C14, C1, 0), F_ARCHEXT }, - { "cnthctl_el2", CPENC(3,4,C14,C1,0), 0 }, - { "cntp_tval_el0", CPENC(3,3,C14,C2,0), 0 }, - { "cntp_tval_el02", CPENC (3, 5, C14, C2, 0), F_ARCHEXT }, - { "cntp_ctl_el0", CPENC(3,3,C14,C2,1), 0 }, - { "cntp_ctl_el02", CPENC (3, 5, C14, C2, 1), F_ARCHEXT }, - { "cntp_cval_el0", CPENC(3,3,C14,C2,2), 0 }, - { "cntp_cval_el02", CPENC (3, 5, C14, C2, 2), F_ARCHEXT }, - { "cntv_tval_el0", CPENC(3,3,C14,C3,0), 0 }, - { "cntv_tval_el02", CPENC (3, 5, C14, C3, 0), F_ARCHEXT }, - { "cntv_ctl_el0", CPENC(3,3,C14,C3,1), 0 }, - { "cntv_ctl_el02", CPENC (3, 5, C14, C3, 1), F_ARCHEXT }, - { "cntv_cval_el0", CPENC(3,3,C14,C3,2), 0 }, - { "cntv_cval_el02", CPENC (3, 5, C14, C3, 2), F_ARCHEXT }, - { "cnthp_tval_el2", CPENC(3,4,C14,C2,0), 0 }, - { "cnthp_ctl_el2", CPENC(3,4,C14,C2,1), 0 }, - { "cnthp_cval_el2", CPENC(3,4,C14,C2,2), 0 }, - { "cntps_tval_el1", CPENC(3,7,C14,C2,0), 0 }, - { "cntps_ctl_el1", CPENC(3,7,C14,C2,1), 0 }, - { "cntps_cval_el1", CPENC(3,7,C14,C2,2), 0 }, - { "cnthv_tval_el2", CPENC (3, 4, C14, C3, 0), F_ARCHEXT }, - { "cnthv_ctl_el2", CPENC (3, 4, C14, C3, 1), F_ARCHEXT }, - { "cnthv_cval_el2", CPENC (3, 4, C14, C3, 2), F_ARCHEXT }, - { "dacr32_el2", CPENC(3,4,C3,C0,0), 0 }, - { "ifsr32_el2", CPENC(3,4,C5,C0,1), 0 }, - { "teehbr32_el1", CPENC(2,2,C1,C0,0), 0 }, - { "sder32_el3", CPENC(3,6,C1,C1,1), 0 }, - { "mdscr_el1", CPENC(2,0,C0, C2, 2), 0 }, - { "mdccsr_el0", CPENC(2,3,C0, C1, 0), F_REG_READ }, /* r */ - { "mdccint_el1", CPENC(2,0,C0, C2, 0), 0 }, - { "dbgdtr_el0", CPENC(2,3,C0, C4, 0), 0 }, - { "dbgdtrrx_el0", CPENC(2,3,C0, C5, 0), F_REG_READ }, /* r */ - { "dbgdtrtx_el0", CPENC(2,3,C0, C5, 0), F_REG_WRITE }, /* w */ - { "osdtrrx_el1", CPENC(2,0,C0, C0, 2), 0 }, - { "osdtrtx_el1", CPENC(2,0,C0, C3, 2), 0 }, - { "oseccr_el1", CPENC(2,0,C0, C6, 2), 0 }, - { "dbgvcr32_el2", CPENC(2,4,C0, C7, 0), 0 }, - { "dbgbvr0_el1", CPENC(2,0,C0, C0, 4), 0 }, - { "dbgbvr1_el1", CPENC(2,0,C0, C1, 4), 0 }, - { "dbgbvr2_el1", CPENC(2,0,C0, C2, 4), 0 }, - { "dbgbvr3_el1", CPENC(2,0,C0, C3, 4), 0 }, - { "dbgbvr4_el1", CPENC(2,0,C0, C4, 4), 0 }, - { "dbgbvr5_el1", CPENC(2,0,C0, C5, 4), 0 }, - { "dbgbvr6_el1", CPENC(2,0,C0, C6, 4), 0 }, - { "dbgbvr7_el1", CPENC(2,0,C0, C7, 4), 0 }, - { "dbgbvr8_el1", CPENC(2,0,C0, C8, 4), 0 }, - { "dbgbvr9_el1", CPENC(2,0,C0, C9, 4), 0 }, - { "dbgbvr10_el1", CPENC(2,0,C0, C10,4), 0 }, - { "dbgbvr11_el1", CPENC(2,0,C0, C11,4), 0 }, - { "dbgbvr12_el1", CPENC(2,0,C0, C12,4), 0 }, - { "dbgbvr13_el1", CPENC(2,0,C0, C13,4), 0 }, - { "dbgbvr14_el1", CPENC(2,0,C0, C14,4), 0 }, - { "dbgbvr15_el1", CPENC(2,0,C0, C15,4), 0 }, - { "dbgbcr0_el1", CPENC(2,0,C0, C0, 5), 0 }, - { "dbgbcr1_el1", CPENC(2,0,C0, C1, 5), 0 }, - { "dbgbcr2_el1", CPENC(2,0,C0, C2, 5), 0 }, - { "dbgbcr3_el1", CPENC(2,0,C0, C3, 5), 0 }, - { "dbgbcr4_el1", CPENC(2,0,C0, C4, 5), 0 }, - { "dbgbcr5_el1", CPENC(2,0,C0, C5, 5), 0 }, - { "dbgbcr6_el1", CPENC(2,0,C0, C6, 5), 0 }, - { "dbgbcr7_el1", CPENC(2,0,C0, C7, 5), 0 }, - { "dbgbcr8_el1", CPENC(2,0,C0, C8, 5), 0 }, - { "dbgbcr9_el1", CPENC(2,0,C0, C9, 5), 0 }, - { "dbgbcr10_el1", CPENC(2,0,C0, C10,5), 0 }, - { "dbgbcr11_el1", CPENC(2,0,C0, C11,5), 0 }, - { "dbgbcr12_el1", CPENC(2,0,C0, C12,5), 0 }, - { "dbgbcr13_el1", CPENC(2,0,C0, C13,5), 0 }, - { "dbgbcr14_el1", CPENC(2,0,C0, C14,5), 0 }, - { "dbgbcr15_el1", CPENC(2,0,C0, C15,5), 0 }, - { "dbgwvr0_el1", CPENC(2,0,C0, C0, 6), 0 }, - { "dbgwvr1_el1", CPENC(2,0,C0, C1, 6), 0 }, - { "dbgwvr2_el1", CPENC(2,0,C0, C2, 6), 0 }, - { "dbgwvr3_el1", CPENC(2,0,C0, C3, 6), 0 }, - { "dbgwvr4_el1", CPENC(2,0,C0, C4, 6), 0 }, - { "dbgwvr5_el1", CPENC(2,0,C0, C5, 6), 0 }, - { "dbgwvr6_el1", CPENC(2,0,C0, C6, 6), 0 }, - { "dbgwvr7_el1", CPENC(2,0,C0, C7, 6), 0 }, - { "dbgwvr8_el1", CPENC(2,0,C0, C8, 6), 0 }, - { "dbgwvr9_el1", CPENC(2,0,C0, C9, 6), 0 }, - { "dbgwvr10_el1", CPENC(2,0,C0, C10,6), 0 }, - { "dbgwvr11_el1", CPENC(2,0,C0, C11,6), 0 }, - { "dbgwvr12_el1", CPENC(2,0,C0, C12,6), 0 }, - { "dbgwvr13_el1", CPENC(2,0,C0, C13,6), 0 }, - { "dbgwvr14_el1", CPENC(2,0,C0, C14,6), 0 }, - { "dbgwvr15_el1", CPENC(2,0,C0, C15,6), 0 }, - { "dbgwcr0_el1", CPENC(2,0,C0, C0, 7), 0 }, - { "dbgwcr1_el1", CPENC(2,0,C0, C1, 7), 0 }, - { "dbgwcr2_el1", CPENC(2,0,C0, C2, 7), 0 }, - { "dbgwcr3_el1", CPENC(2,0,C0, C3, 7), 0 }, - { "dbgwcr4_el1", CPENC(2,0,C0, C4, 7), 0 }, - { "dbgwcr5_el1", CPENC(2,0,C0, C5, 7), 0 }, - { "dbgwcr6_el1", CPENC(2,0,C0, C6, 7), 0 }, - { "dbgwcr7_el1", CPENC(2,0,C0, C7, 7), 0 }, - { "dbgwcr8_el1", CPENC(2,0,C0, C8, 7), 0 }, - { "dbgwcr9_el1", CPENC(2,0,C0, C9, 7), 0 }, - { "dbgwcr10_el1", CPENC(2,0,C0, C10,7), 0 }, - { "dbgwcr11_el1", CPENC(2,0,C0, C11,7), 0 }, - { "dbgwcr12_el1", CPENC(2,0,C0, C12,7), 0 }, - { "dbgwcr13_el1", CPENC(2,0,C0, C13,7), 0 }, - { "dbgwcr14_el1", CPENC(2,0,C0, C14,7), 0 }, - { "dbgwcr15_el1", CPENC(2,0,C0, C15,7), 0 }, - { "mdrar_el1", CPENC(2,0,C1, C0, 0), F_REG_READ }, /* r */ - { "oslar_el1", CPENC(2,0,C1, C0, 4), F_REG_WRITE }, /* w */ - { "oslsr_el1", CPENC(2,0,C1, C1, 4), F_REG_READ }, /* r */ - { "osdlr_el1", CPENC(2,0,C1, C3, 4), 0 }, - { "dbgprcr_el1", CPENC(2,0,C1, C4, 4), 0 }, - { "dbgclaimset_el1", CPENC(2,0,C7, C8, 6), 0 }, - { "dbgclaimclr_el1", CPENC(2,0,C7, C9, 6), 0 }, - { "dbgauthstatus_el1", CPENC(2,0,C7, C14,6), F_REG_READ }, /* r */ - { "pmblimitr_el1", CPENC (3, 0, C9, C10, 0), F_ARCHEXT }, /* rw */ - { "pmbptr_el1", CPENC (3, 0, C9, C10, 1), F_ARCHEXT }, /* rw */ - { "pmbsr_el1", CPENC (3, 0, C9, C10, 3), F_ARCHEXT }, /* rw */ - { "pmbidr_el1", CPENC (3, 0, C9, C10, 7), F_ARCHEXT | F_REG_READ }, /* ro */ - { "pmscr_el1", CPENC (3, 0, C9, C9, 0), F_ARCHEXT }, /* rw */ - { "pmsicr_el1", CPENC (3, 0, C9, C9, 2), F_ARCHEXT }, /* rw */ - { "pmsirr_el1", CPENC (3, 0, C9, C9, 3), F_ARCHEXT }, /* rw */ - { "pmsfcr_el1", CPENC (3, 0, C9, C9, 4), F_ARCHEXT }, /* rw */ - { "pmsevfr_el1", CPENC (3, 0, C9, C9, 5), F_ARCHEXT }, /* rw */ - { "pmslatfr_el1", CPENC (3, 0, C9, C9, 6), F_ARCHEXT }, /* rw */ - { "pmsidr_el1", CPENC (3, 0, C9, C9, 7), F_ARCHEXT }, /* rw */ - { "pmscr_el2", CPENC (3, 4, C9, C9, 0), F_ARCHEXT }, /* rw */ - { "pmscr_el12", CPENC (3, 5, C9, C9, 0), F_ARCHEXT }, /* rw */ - { "pmcr_el0", CPENC(3,3,C9,C12, 0), 0 }, - { "pmcntenset_el0", CPENC(3,3,C9,C12, 1), 0 }, - { "pmcntenclr_el0", CPENC(3,3,C9,C12, 2), 0 }, - { "pmovsclr_el0", CPENC(3,3,C9,C12, 3), 0 }, - { "pmswinc_el0", CPENC(3,3,C9,C12, 4), F_REG_WRITE }, /* w */ - { "pmselr_el0", CPENC(3,3,C9,C12, 5), 0 }, - { "pmceid0_el0", CPENC(3,3,C9,C12, 6), F_REG_READ }, /* r */ - { "pmceid1_el0", CPENC(3,3,C9,C12, 7), F_REG_READ }, /* r */ - { "pmccntr_el0", CPENC(3,3,C9,C13, 0), 0 }, - { "pmxevtyper_el0", CPENC(3,3,C9,C13, 1), 0 }, - { "pmxevcntr_el0", CPENC(3,3,C9,C13, 2), 0 }, - { "pmuserenr_el0", CPENC(3,3,C9,C14, 0), 0 }, - { "pmintenset_el1", CPENC(3,0,C9,C14, 1), 0 }, - { "pmintenclr_el1", CPENC(3,0,C9,C14, 2), 0 }, - { "pmovsset_el0", CPENC(3,3,C9,C14, 3), 0 }, - { "pmevcntr0_el0", CPENC(3,3,C14,C8, 0), 0 }, - { "pmevcntr1_el0", CPENC(3,3,C14,C8, 1), 0 }, - { "pmevcntr2_el0", CPENC(3,3,C14,C8, 2), 0 }, - { "pmevcntr3_el0", CPENC(3,3,C14,C8, 3), 0 }, - { "pmevcntr4_el0", CPENC(3,3,C14,C8, 4), 0 }, - { "pmevcntr5_el0", CPENC(3,3,C14,C8, 5), 0 }, - { "pmevcntr6_el0", CPENC(3,3,C14,C8, 6), 0 }, - { "pmevcntr7_el0", CPENC(3,3,C14,C8, 7), 0 }, - { "pmevcntr8_el0", CPENC(3,3,C14,C9, 0), 0 }, - { "pmevcntr9_el0", CPENC(3,3,C14,C9, 1), 0 }, - { "pmevcntr10_el0", CPENC(3,3,C14,C9, 2), 0 }, - { "pmevcntr11_el0", CPENC(3,3,C14,C9, 3), 0 }, - { "pmevcntr12_el0", CPENC(3,3,C14,C9, 4), 0 }, - { "pmevcntr13_el0", CPENC(3,3,C14,C9, 5), 0 }, - { "pmevcntr14_el0", CPENC(3,3,C14,C9, 6), 0 }, - { "pmevcntr15_el0", CPENC(3,3,C14,C9, 7), 0 }, - { "pmevcntr16_el0", CPENC(3,3,C14,C10,0), 0 }, - { "pmevcntr17_el0", CPENC(3,3,C14,C10,1), 0 }, - { "pmevcntr18_el0", CPENC(3,3,C14,C10,2), 0 }, - { "pmevcntr19_el0", CPENC(3,3,C14,C10,3), 0 }, - { "pmevcntr20_el0", CPENC(3,3,C14,C10,4), 0 }, - { "pmevcntr21_el0", CPENC(3,3,C14,C10,5), 0 }, - { "pmevcntr22_el0", CPENC(3,3,C14,C10,6), 0 }, - { "pmevcntr23_el0", CPENC(3,3,C14,C10,7), 0 }, - { "pmevcntr24_el0", CPENC(3,3,C14,C11,0), 0 }, - { "pmevcntr25_el0", CPENC(3,3,C14,C11,1), 0 }, - { "pmevcntr26_el0", CPENC(3,3,C14,C11,2), 0 }, - { "pmevcntr27_el0", CPENC(3,3,C14,C11,3), 0 }, - { "pmevcntr28_el0", CPENC(3,3,C14,C11,4), 0 }, - { "pmevcntr29_el0", CPENC(3,3,C14,C11,5), 0 }, - { "pmevcntr30_el0", CPENC(3,3,C14,C11,6), 0 }, - { "pmevtyper0_el0", CPENC(3,3,C14,C12,0), 0 }, - { "pmevtyper1_el0", CPENC(3,3,C14,C12,1), 0 }, - { "pmevtyper2_el0", CPENC(3,3,C14,C12,2), 0 }, - { "pmevtyper3_el0", CPENC(3,3,C14,C12,3), 0 }, - { "pmevtyper4_el0", CPENC(3,3,C14,C12,4), 0 }, - { "pmevtyper5_el0", CPENC(3,3,C14,C12,5), 0 }, - { "pmevtyper6_el0", CPENC(3,3,C14,C12,6), 0 }, - { "pmevtyper7_el0", CPENC(3,3,C14,C12,7), 0 }, - { "pmevtyper8_el0", CPENC(3,3,C14,C13,0), 0 }, - { "pmevtyper9_el0", CPENC(3,3,C14,C13,1), 0 }, - { "pmevtyper10_el0", CPENC(3,3,C14,C13,2), 0 }, - { "pmevtyper11_el0", CPENC(3,3,C14,C13,3), 0 }, - { "pmevtyper12_el0", CPENC(3,3,C14,C13,4), 0 }, - { "pmevtyper13_el0", CPENC(3,3,C14,C13,5), 0 }, - { "pmevtyper14_el0", CPENC(3,3,C14,C13,6), 0 }, - { "pmevtyper15_el0", CPENC(3,3,C14,C13,7), 0 }, - { "pmevtyper16_el0", CPENC(3,3,C14,C14,0), 0 }, - { "pmevtyper17_el0", CPENC(3,3,C14,C14,1), 0 }, - { "pmevtyper18_el0", CPENC(3,3,C14,C14,2), 0 }, - { "pmevtyper19_el0", CPENC(3,3,C14,C14,3), 0 }, - { "pmevtyper20_el0", CPENC(3,3,C14,C14,4), 0 }, - { "pmevtyper21_el0", CPENC(3,3,C14,C14,5), 0 }, - { "pmevtyper22_el0", CPENC(3,3,C14,C14,6), 0 }, - { "pmevtyper23_el0", CPENC(3,3,C14,C14,7), 0 }, - { "pmevtyper24_el0", CPENC(3,3,C14,C15,0), 0 }, - { "pmevtyper25_el0", CPENC(3,3,C14,C15,1), 0 }, - { "pmevtyper26_el0", CPENC(3,3,C14,C15,2), 0 }, - { "pmevtyper27_el0", CPENC(3,3,C14,C15,3), 0 }, - { "pmevtyper28_el0", CPENC(3,3,C14,C15,4), 0 }, - { "pmevtyper29_el0", CPENC(3,3,C14,C15,5), 0 }, - { "pmevtyper30_el0", CPENC(3,3,C14,C15,6), 0 }, - { "pmccfiltr_el0", CPENC(3,3,C14,C15,7), 0 }, - - { "dit", CPEN_ (3, C2, 5), F_ARCHEXT }, - { "vstcr_el2", CPENC(3, 4, C2, C6, 2), F_ARCHEXT }, - { "vsttbr_el2", CPENC(3, 4, C2, C6, 0), F_ARCHEXT }, - { "cnthvs_tval_el2", CPENC(3, 4, C14, C4, 0), F_ARCHEXT }, - { "cnthvs_cval_el2", CPENC(3, 4, C14, C4, 2), F_ARCHEXT }, - { "cnthvs_ctl_el2", CPENC(3, 4, C14, C4, 1), F_ARCHEXT }, - { "cnthps_tval_el2", CPENC(3, 4, C14, C5, 0), F_ARCHEXT }, - { "cnthps_cval_el2", CPENC(3, 4, C14, C5, 2), F_ARCHEXT }, - { "cnthps_ctl_el2", CPENC(3, 4, C14, C5, 1), F_ARCHEXT }, - { "sder32_el2", CPENC(3, 4, C1, C3, 1), F_ARCHEXT }, - { "vncr_el2", CPENC(3, 4, C2, C2, 0), F_ARCHEXT }, - { 0, CPENC(0,0,0,0,0), 0 }, -}; - -bfd_boolean -aarch64_sys_reg_deprecated_p (const aarch64_sys_reg *reg) -{ - return (reg->flags & F_DEPRECATED) != 0; -} - -bfd_boolean -aarch64_sys_reg_supported_p (const aarch64_feature_set features, - const aarch64_sys_reg *reg) -{ - if (!(reg->flags & F_ARCHEXT)) - return TRUE; - - /* PAN. Values are from aarch64_sys_regs. */ - if (reg->value == CPEN_(0,C2,3) - && !AARCH64_CPU_HAS_FEATURE (features, AARCH64_FEATURE_PAN)) - return FALSE; - - /* SCXTNUM_ELx registers. */ - if ((reg->value == CPENC (3, 3, C13, C0, 7) - || reg->value == CPENC (3, 0, C13, C0, 7) - || reg->value == CPENC (3, 4, C13, C0, 7) - || reg->value == CPENC (3, 6, C13, C0, 7) - || reg->value == CPENC (3, 5, C13, C0, 7)) - && !AARCH64_CPU_HAS_FEATURE (features, AARCH64_FEATURE_SCXTNUM)) - return FALSE; - - /* ID_PFR2_EL1 register. */ - if (reg->value == CPENC(3, 0, C0, C3, 4) - && !AARCH64_CPU_HAS_FEATURE (features, AARCH64_FEATURE_ID_PFR2)) - return FALSE; - - /* SSBS. Values are from aarch64_sys_regs. */ - if (reg->value == CPEN_(3,C2,6) - && !AARCH64_CPU_HAS_FEATURE (features, AARCH64_FEATURE_SSBS)) - return FALSE; - - /* Virtualization host extensions: system registers. */ - if ((reg->value == CPENC (3, 4, C2, C0, 1) - || reg->value == CPENC (3, 4, C13, C0, 1) - || reg->value == CPENC (3, 4, C14, C3, 0) - || reg->value == CPENC (3, 4, C14, C3, 1) - || reg->value == CPENC (3, 4, C14, C3, 2)) - && !AARCH64_CPU_HAS_FEATURE (features, AARCH64_FEATURE_V8_1)) - return FALSE; - - /* Virtualization host extensions: *_el12 names of *_el1 registers. */ - if ((reg->value == CPEN_ (5, C0, 0) - || reg->value == CPEN_ (5, C0, 1) - || reg->value == CPENC (3, 5, C1, C0, 0) - || reg->value == CPENC (3, 5, C1, C0, 2) - || reg->value == CPENC (3, 5, C2, C0, 0) - || reg->value == CPENC (3, 5, C2, C0, 1) - || reg->value == CPENC (3, 5, C2, C0, 2) - || reg->value == CPENC (3, 5, C5, C1, 0) - || reg->value == CPENC (3, 5, C5, C1, 1) - || reg->value == CPENC (3, 5, C5, C2, 0) - || reg->value == CPENC (3, 5, C6, C0, 0) - || reg->value == CPENC (3, 5, C10, C2, 0) - || reg->value == CPENC (3, 5, C10, C3, 0) - || reg->value == CPENC (3, 5, C12, C0, 0) - || reg->value == CPENC (3, 5, C13, C0, 1) - || reg->value == CPENC (3, 5, C14, C1, 0)) - && !AARCH64_CPU_HAS_FEATURE (features, AARCH64_FEATURE_V8_1)) - return FALSE; - - /* Virtualization host extensions: *_el02 names of *_el0 registers. */ - if ((reg->value == CPENC (3, 5, C14, C2, 0) - || reg->value == CPENC (3, 5, C14, C2, 1) - || reg->value == CPENC (3, 5, C14, C2, 2) - || reg->value == CPENC (3, 5, C14, C3, 0) - || reg->value == CPENC (3, 5, C14, C3, 1) - || reg->value == CPENC (3, 5, C14, C3, 2)) - && !AARCH64_CPU_HAS_FEATURE (features, AARCH64_FEATURE_V8_1)) - return FALSE; - - /* ARMv8.2 features. */ - - /* ID_AA64MMFR2_EL1. */ - if (reg->value == CPENC (3, 0, C0, C7, 2) - && !AARCH64_CPU_HAS_FEATURE (features, AARCH64_FEATURE_V8_2)) - return FALSE; - - /* PSTATE.UAO. */ - if (reg->value == CPEN_ (0, C2, 4) - && !AARCH64_CPU_HAS_FEATURE (features, AARCH64_FEATURE_V8_2)) - return FALSE; - - /* RAS extension. */ - - /* ERRIDR_EL1, ERRSELR_EL1, ERXFR_EL1, ERXCTLR_EL1, ERXSTATUS_EL, ERXADDR_EL1, - ERXMISC0_EL1 AND ERXMISC1_EL1. */ - if ((reg->value == CPENC (3, 0, C5, C3, 0) - || reg->value == CPENC (3, 0, C5, C3, 1) - || reg->value == CPENC (3, 0, C5, C3, 2) - || reg->value == CPENC (3, 0, C5, C3, 3) - || reg->value == CPENC (3, 0, C5, C4, 0) - || reg->value == CPENC (3, 0, C5, C4, 1) - || reg->value == CPENC (3, 0, C5, C4, 2) - || reg->value == CPENC (3, 0, C5, C4, 3) - || reg->value == CPENC (3, 0, C5, C5, 0) - || reg->value == CPENC (3, 0, C5, C5, 1)) - && !AARCH64_CPU_HAS_FEATURE (features, AARCH64_FEATURE_RAS)) - return FALSE; - - /* VSESR_EL2, DISR_EL1 and VDISR_EL2. */ - if ((reg->value == CPENC (3, 4, C5, C2, 3) - || reg->value == CPENC (3, 0, C12, C1, 1) - || reg->value == CPENC (3, 4, C12, C1, 1)) - && !AARCH64_CPU_HAS_FEATURE (features, AARCH64_FEATURE_RAS)) - return FALSE; - - /* Statistical Profiling extension. */ - if ((reg->value == CPENC (3, 0, C9, C10, 0) - || reg->value == CPENC (3, 0, C9, C10, 1) - || reg->value == CPENC (3, 0, C9, C10, 3) - || reg->value == CPENC (3, 0, C9, C10, 7) - || reg->value == CPENC (3, 0, C9, C9, 0) - || reg->value == CPENC (3, 0, C9, C9, 2) - || reg->value == CPENC (3, 0, C9, C9, 3) - || reg->value == CPENC (3, 0, C9, C9, 4) - || reg->value == CPENC (3, 0, C9, C9, 5) - || reg->value == CPENC (3, 0, C9, C9, 6) - || reg->value == CPENC (3, 0, C9, C9, 7) - || reg->value == CPENC (3, 4, C9, C9, 0) - || reg->value == CPENC (3, 5, C9, C9, 0)) - && !AARCH64_CPU_HAS_FEATURE (features, AARCH64_FEATURE_PROFILE)) - return FALSE; - - /* ARMv8.3 Pointer authentication keys. */ - if ((reg->value == CPENC (3, 0, C2, C1, 0) - || reg->value == CPENC (3, 0, C2, C1, 1) - || reg->value == CPENC (3, 0, C2, C1, 2) - || reg->value == CPENC (3, 0, C2, C1, 3) - || reg->value == CPENC (3, 0, C2, C2, 0) - || reg->value == CPENC (3, 0, C2, C2, 1) - || reg->value == CPENC (3, 0, C2, C2, 2) - || reg->value == CPENC (3, 0, C2, C2, 3) - || reg->value == CPENC (3, 0, C2, C3, 0) - || reg->value == CPENC (3, 0, C2, C3, 1)) - && !AARCH64_CPU_HAS_FEATURE (features, AARCH64_FEATURE_V8_3)) - return FALSE; - - /* SVE. */ - if ((reg->value == CPENC (3, 0, C0, C4, 4) - || reg->value == CPENC (3, 0, C1, C2, 0) - || reg->value == CPENC (3, 4, C1, C2, 0) - || reg->value == CPENC (3, 6, C1, C2, 0) - || reg->value == CPENC (3, 5, C1, C2, 0) - || reg->value == CPENC (3, 0, C0, C0, 7)) - && !AARCH64_CPU_HAS_FEATURE (features, AARCH64_FEATURE_SVE)) - return FALSE; +#define SYSREG(name, encoding, flags, features) \ + { name, encoding, flags, features } - /* ARMv8.4 features. */ +#define SR_CORE(n,e,f) SYSREG (n,e,f,0) - /* PSTATE.DIT. */ - if (reg->value == CPEN_ (3, C2, 5) - && !AARCH64_CPU_HAS_FEATURE (features, AARCH64_FEATURE_V8_4)) - return FALSE; +#define SR_FEAT(n,e,f,feat) \ + SYSREG ((n), (e), (f) | F_ARCHEXT, AARCH64_FEATURE_##feat) - /* Virtualization extensions. */ - if ((reg->value == CPENC(3, 4, C2, C6, 2) - || reg->value == CPENC(3, 4, C2, C6, 0) - || reg->value == CPENC(3, 4, C14, C4, 0) - || reg->value == CPENC(3, 4, C14, C4, 2) - || reg->value == CPENC(3, 4, C14, C4, 1) - || reg->value == CPENC(3, 4, C14, C5, 0) - || reg->value == CPENC(3, 4, C14, C5, 2) - || reg->value == CPENC(3, 4, C14, C5, 1) - || reg->value == CPENC(3, 4, C1, C3, 1) - || reg->value == CPENC(3, 4, C2, C2, 0)) - && !AARCH64_CPU_HAS_FEATURE (features, AARCH64_FEATURE_V8_4)) - return FALSE; +#define SR_FEAT2(n,e,f,fe1,fe2) \ + SYSREG ((n), (e), (f) | F_ARCHEXT, \ + AARCH64_FEATURE_##fe1 | AARCH64_FEATURE_##fe2) + +#define SR_RNG(n,e,f) SR_FEAT2(n,e,f,RNG,V8_5) +#define SR_V8_1_A(n,e,f) SR_FEAT2(n,e,f,V8_A,V8_1) +#define SR_V8_4_A(n,e,f) SR_FEAT2(n,e,f,V8_A,V8_4) + +#define SR_V8_A(n,e,f) SR_FEAT (n,e,f,V8_A) +#define SR_V8_R(n,e,f) SR_FEAT (n,e,f,V8_R) +#define SR_V8_1(n,e,f) SR_FEAT (n,e,f,V8_1) +#define SR_V8_2(n,e,f) SR_FEAT (n,e,f,V8_2) +#define SR_V8_3(n,e,f) SR_FEAT (n,e,f,V8_3) +#define SR_V8_4(n,e,f) SR_FEAT (n,e,f,V8_4) +#define SR_V8_4(n,e,f) SR_FEAT (n,e,f,V8_4) +#define SR_PAN(n,e,f) SR_FEAT (n,e,f,PAN) +#define SR_RAS(n,e,f) SR_FEAT (n,e,f,RAS) +#define SR_SSBS(n,e,f) SR_FEAT (n,e,f,SSBS) +#define SR_SVE(n,e,f) SR_FEAT (n,e,f,SVE) +#define SR_ID_PFR2(n,e,f) SR_FEAT (n,e,f,ID_PFR2) +#define SR_PROFILE(n,e,f) SR_FEAT (n,e,f,PROFILE) +#define SR_MEMTAG(n,e,f) SR_FEAT (n,e,f,MEMTAG) +#define SR_SCXTNUM(n,e,f) SR_FEAT (n,e,f,SCXTNUM) + +#define SR_EXPAND_ELx(f,x) \ + f (x, 1), \ + f (x, 2), \ + f (x, 3), \ + f (x, 4), \ + f (x, 5), \ + f (x, 6), \ + f (x, 7), \ + f (x, 8), \ + f (x, 9), \ + f (x, 10), \ + f (x, 11), \ + f (x, 12), \ + f (x, 13), \ + f (x, 14), \ + f (x, 15), + +#define SR_EXPAND_EL12(f) \ + SR_EXPAND_ELx (f,1) \ + SR_EXPAND_ELx (f,2) - /* ARMv8.4 TLB instructions. */ - if ((reg->value == CPENS (0, C8, C1, 0) - || reg->value == CPENS (0, C8, C1, 1) - || reg->value == CPENS (0, C8, C1, 2) - || reg->value == CPENS (0, C8, C1, 3) - || reg->value == CPENS (0, C8, C1, 5) - || reg->value == CPENS (0, C8, C1, 7) - || reg->value == CPENS (4, C8, C4, 0) - || reg->value == CPENS (4, C8, C4, 4) - || reg->value == CPENS (4, C8, C1, 1) - || reg->value == CPENS (4, C8, C1, 5) - || reg->value == CPENS (4, C8, C1, 6) - || reg->value == CPENS (6, C8, C1, 1) - || reg->value == CPENS (6, C8, C1, 5) - || reg->value == CPENS (4, C8, C1, 0) - || reg->value == CPENS (4, C8, C1, 4) - || reg->value == CPENS (6, C8, C1, 0) - || reg->value == CPENS (0, C8, C6, 1) - || reg->value == CPENS (0, C8, C6, 3) - || reg->value == CPENS (0, C8, C6, 5) - || reg->value == CPENS (0, C8, C6, 7) - || reg->value == CPENS (0, C8, C2, 1) - || reg->value == CPENS (0, C8, C2, 3) - || reg->value == CPENS (0, C8, C2, 5) - || reg->value == CPENS (0, C8, C2, 7) - || reg->value == CPENS (0, C8, C5, 1) - || reg->value == CPENS (0, C8, C5, 3) - || reg->value == CPENS (0, C8, C5, 5) - || reg->value == CPENS (0, C8, C5, 7) - || reg->value == CPENS (4, C8, C0, 2) - || reg->value == CPENS (4, C8, C0, 6) - || reg->value == CPENS (4, C8, C4, 2) - || reg->value == CPENS (4, C8, C4, 6) - || reg->value == CPENS (4, C8, C4, 3) - || reg->value == CPENS (4, C8, C4, 7) - || reg->value == CPENS (4, C8, C6, 1) - || reg->value == CPENS (4, C8, C6, 5) - || reg->value == CPENS (4, C8, C2, 1) - || reg->value == CPENS (4, C8, C2, 5) - || reg->value == CPENS (4, C8, C5, 1) - || reg->value == CPENS (4, C8, C5, 5) - || reg->value == CPENS (6, C8, C6, 1) - || reg->value == CPENS (6, C8, C6, 5) - || reg->value == CPENS (6, C8, C2, 1) - || reg->value == CPENS (6, C8, C2, 5) - || reg->value == CPENS (6, C8, C5, 1) - || reg->value == CPENS (6, C8, C5, 5)) - && !AARCH64_CPU_HAS_FEATURE (features, AARCH64_FEATURE_V8_4)) - return FALSE; +/* TODO there is one more issues need to be resolved + 1. handle cpu-implementation-defined system registers. - /* Random Number Instructions. For now they are available - (and optional) only with ARMv8.5-A. */ - if ((reg->value == CPENC (3, 3, C2, C4, 0) - || reg->value == CPENC (3, 3, C2, C4, 1)) - && !(AARCH64_CPU_HAS_FEATURE (features, AARCH64_FEATURE_RNG) - && AARCH64_CPU_HAS_FEATURE (features, AARCH64_FEATURE_V8_5))) - return FALSE; + Note that the F_REG_{READ,WRITE} flags mean read-only and write-only + respectively. If neither of these are set then the register is read-write. */ +const aarch64_sys_reg aarch64_sys_regs [] = +{ + SR_CORE ("spsr_el1", CPEN_ (0,C0,0), 0), /* = spsr_svc. */ + SR_V8_1 ("spsr_el12", CPEN_ (5,C0,0), 0), + SR_CORE ("elr_el1", CPEN_ (0,C0,1), 0), + SR_V8_1 ("elr_el12", CPEN_ (5,C0,1), 0), + SR_CORE ("sp_el0", CPEN_ (0,C1,0), 0), + SR_CORE ("spsel", CPEN_ (0,C2,0), 0), + SR_CORE ("daif", CPEN_ (3,C2,1), 0), + SR_CORE ("currentel", CPEN_ (0,C2,2), F_REG_READ), + SR_PAN ("pan", CPEN_ (0,C2,3), 0), + SR_V8_2 ("uao", CPEN_ (0,C2,4), 0), + SR_CORE ("nzcv", CPEN_ (3,C2,0), 0), + SR_SSBS ("ssbs", CPEN_ (3,C2,6), 0), + SR_CORE ("fpcr", CPEN_ (3,C4,0), 0), + SR_CORE ("fpsr", CPEN_ (3,C4,1), 0), + SR_CORE ("dspsr_el0", CPEN_ (3,C5,0), 0), + SR_CORE ("dlr_el0", CPEN_ (3,C5,1), 0), + SR_CORE ("spsr_el2", CPEN_ (4,C0,0), 0), /* = spsr_hyp. */ + SR_CORE ("elr_el2", CPEN_ (4,C0,1), 0), + SR_CORE ("sp_el1", CPEN_ (4,C1,0), 0), + SR_CORE ("spsr_irq", CPEN_ (4,C3,0), 0), + SR_CORE ("spsr_abt", CPEN_ (4,C3,1), 0), + SR_CORE ("spsr_und", CPEN_ (4,C3,2), 0), + SR_CORE ("spsr_fiq", CPEN_ (4,C3,3), 0), + SR_CORE ("spsr_el3", CPEN_ (6,C0,0), 0), + SR_CORE ("elr_el3", CPEN_ (6,C0,1), 0), + SR_CORE ("sp_el2", CPEN_ (6,C1,0), 0), + SR_CORE ("spsr_svc", CPEN_ (0,C0,0), F_DEPRECATED), /* = spsr_el1. */ + SR_CORE ("spsr_hyp", CPEN_ (4,C0,0), F_DEPRECATED), /* = spsr_el2. */ + SR_CORE ("midr_el1", CPENC (3,0,C0,C0,0), F_REG_READ), + SR_CORE ("ctr_el0", CPENC (3,3,C0,C0,1), F_REG_READ), + SR_CORE ("mpidr_el1", CPENC (3,0,C0,C0,5), F_REG_READ), + SR_CORE ("revidr_el1", CPENC (3,0,C0,C0,6), F_REG_READ), + SR_CORE ("aidr_el1", CPENC (3,1,C0,C0,7), F_REG_READ), + SR_CORE ("dczid_el0", CPENC (3,3,C0,C0,7), F_REG_READ), + SR_CORE ("id_dfr0_el1", CPENC (3,0,C0,C1,2), F_REG_READ), + SR_CORE ("id_pfr0_el1", CPENC (3,0,C0,C1,0), F_REG_READ), + SR_CORE ("id_pfr1_el1", CPENC (3,0,C0,C1,1), F_REG_READ), + SR_ID_PFR2 ("id_pfr2_el1", CPENC (3,0,C0,C3,4), F_REG_READ), + SR_CORE ("id_afr0_el1", CPENC (3,0,C0,C1,3), F_REG_READ), + SR_CORE ("id_mmfr0_el1", CPENC (3,0,C0,C1,4), F_REG_READ), + SR_CORE ("id_mmfr1_el1", CPENC (3,0,C0,C1,5), F_REG_READ), + SR_CORE ("id_mmfr2_el1", CPENC (3,0,C0,C1,6), F_REG_READ), + SR_CORE ("id_mmfr3_el1", CPENC (3,0,C0,C1,7), F_REG_READ), + SR_CORE ("id_mmfr4_el1", CPENC (3,0,C0,C2,6), F_REG_READ), + SR_CORE ("id_isar0_el1", CPENC (3,0,C0,C2,0), F_REG_READ), + SR_CORE ("id_isar1_el1", CPENC (3,0,C0,C2,1), F_REG_READ), + SR_CORE ("id_isar2_el1", CPENC (3,0,C0,C2,2), F_REG_READ), + SR_CORE ("id_isar3_el1", CPENC (3,0,C0,C2,3), F_REG_READ), + SR_CORE ("id_isar4_el1", CPENC (3,0,C0,C2,4), F_REG_READ), + SR_CORE ("id_isar5_el1", CPENC (3,0,C0,C2,5), F_REG_READ), + SR_CORE ("mvfr0_el1", CPENC (3,0,C0,C3,0), F_REG_READ), + SR_CORE ("mvfr1_el1", CPENC (3,0,C0,C3,1), F_REG_READ), + SR_CORE ("mvfr2_el1", CPENC (3,0,C0,C3,2), F_REG_READ), + SR_CORE ("ccsidr_el1", CPENC (3,1,C0,C0,0), F_REG_READ), + SR_CORE ("id_aa64pfr0_el1", CPENC (3,0,C0,C4,0), F_REG_READ), + SR_CORE ("id_aa64pfr1_el1", CPENC (3,0,C0,C4,1), F_REG_READ), + SR_CORE ("id_aa64dfr0_el1", CPENC (3,0,C0,C5,0), F_REG_READ), + SR_CORE ("id_aa64dfr1_el1", CPENC (3,0,C0,C5,1), F_REG_READ), + SR_CORE ("id_aa64isar0_el1", CPENC (3,0,C0,C6,0), F_REG_READ), + SR_CORE ("id_aa64isar1_el1", CPENC (3,0,C0,C6,1), F_REG_READ), + SR_CORE ("id_aa64mmfr0_el1", CPENC (3,0,C0,C7,0), F_REG_READ), + SR_CORE ("id_aa64mmfr1_el1", CPENC (3,0,C0,C7,1), F_REG_READ), + SR_V8_2 ("id_aa64mmfr2_el1", CPENC (3,0,C0,C7,2), F_REG_READ), + SR_CORE ("id_aa64afr0_el1", CPENC (3,0,C0,C5,4), F_REG_READ), + SR_CORE ("id_aa64afr1_el1", CPENC (3,0,C0,C5,5), F_REG_READ), + SR_SVE ("id_aa64zfr0_el1", CPENC (3,0,C0,C4,4), F_REG_READ), + SR_CORE ("clidr_el1", CPENC (3,1,C0,C0,1), F_REG_READ), + SR_CORE ("csselr_el1", CPENC (3,2,C0,C0,0), 0), + SR_CORE ("vpidr_el2", CPENC (3,4,C0,C0,0), 0), + SR_CORE ("vmpidr_el2", CPENC (3,4,C0,C0,5), 0), + SR_CORE ("sctlr_el1", CPENC (3,0,C1,C0,0), 0), + SR_CORE ("sctlr_el2", CPENC (3,4,C1,C0,0), 0), + SR_CORE ("sctlr_el3", CPENC (3,6,C1,C0,0), 0), + SR_V8_1 ("sctlr_el12", CPENC (3,5,C1,C0,0), 0), + SR_CORE ("actlr_el1", CPENC (3,0,C1,C0,1), 0), + SR_CORE ("actlr_el2", CPENC (3,4,C1,C0,1), 0), + SR_CORE ("actlr_el3", CPENC (3,6,C1,C0,1), 0), + SR_CORE ("cpacr_el1", CPENC (3,0,C1,C0,2), 0), + SR_V8_1 ("cpacr_el12", CPENC (3,5,C1,C0,2), 0), + SR_CORE ("cptr_el2", CPENC (3,4,C1,C1,2), 0), + SR_CORE ("cptr_el3", CPENC (3,6,C1,C1,2), 0), + SR_CORE ("scr_el3", CPENC (3,6,C1,C1,0), 0), + SR_CORE ("hcr_el2", CPENC (3,4,C1,C1,0), 0), + SR_CORE ("mdcr_el2", CPENC (3,4,C1,C1,1), 0), + SR_CORE ("mdcr_el3", CPENC (3,6,C1,C3,1), 0), + SR_CORE ("hstr_el2", CPENC (3,4,C1,C1,3), 0), + SR_CORE ("hacr_el2", CPENC (3,4,C1,C1,7), 0), + SR_SVE ("zcr_el1", CPENC (3,0,C1,C2,0), 0), + SR_SVE ("zcr_el12", CPENC (3,5,C1,C2,0), 0), + SR_SVE ("zcr_el2", CPENC (3,4,C1,C2,0), 0), + SR_SVE ("zcr_el3", CPENC (3,6,C1,C2,0), 0), + SR_SVE ("zidr_el1", CPENC (3,0,C0,C0,7), 0), + SR_CORE ("ttbr0_el1", CPENC (3,0,C2,C0,0), 0), + SR_CORE ("ttbr1_el1", CPENC (3,0,C2,C0,1), 0), + SR_V8_A ("ttbr0_el2", CPENC (3,4,C2,C0,0), 0), + SR_V8_1_A ("ttbr1_el2", CPENC (3,4,C2,C0,1), 0), + SR_CORE ("ttbr0_el3", CPENC (3,6,C2,C0,0), 0), + SR_V8_1 ("ttbr0_el12", CPENC (3,5,C2,C0,0), 0), + SR_V8_1 ("ttbr1_el12", CPENC (3,5,C2,C0,1), 0), + SR_V8_A ("vttbr_el2", CPENC (3,4,C2,C1,0), 0), + SR_CORE ("tcr_el1", CPENC (3,0,C2,C0,2), 0), + SR_CORE ("tcr_el2", CPENC (3,4,C2,C0,2), 0), + SR_CORE ("tcr_el3", CPENC (3,6,C2,C0,2), 0), + SR_V8_1 ("tcr_el12", CPENC (3,5,C2,C0,2), 0), + SR_CORE ("vtcr_el2", CPENC (3,4,C2,C1,2), 0), + SR_V8_3 ("apiakeylo_el1", CPENC (3,0,C2,C1,0), 0), + SR_V8_3 ("apiakeyhi_el1", CPENC (3,0,C2,C1,1), 0), + SR_V8_3 ("apibkeylo_el1", CPENC (3,0,C2,C1,2), 0), + SR_V8_3 ("apibkeyhi_el1", CPENC (3,0,C2,C1,3), 0), + SR_V8_3 ("apdakeylo_el1", CPENC (3,0,C2,C2,0), 0), + SR_V8_3 ("apdakeyhi_el1", CPENC (3,0,C2,C2,1), 0), + SR_V8_3 ("apdbkeylo_el1", CPENC (3,0,C2,C2,2), 0), + SR_V8_3 ("apdbkeyhi_el1", CPENC (3,0,C2,C2,3), 0), + SR_V8_3 ("apgakeylo_el1", CPENC (3,0,C2,C3,0), 0), + SR_V8_3 ("apgakeyhi_el1", CPENC (3,0,C2,C3,1), 0), + SR_CORE ("afsr0_el1", CPENC (3,0,C5,C1,0), 0), + SR_CORE ("afsr1_el1", CPENC (3,0,C5,C1,1), 0), + SR_CORE ("afsr0_el2", CPENC (3,4,C5,C1,0), 0), + SR_CORE ("afsr1_el2", CPENC (3,4,C5,C1,1), 0), + SR_CORE ("afsr0_el3", CPENC (3,6,C5,C1,0), 0), + SR_V8_1 ("afsr0_el12", CPENC (3,5,C5,C1,0), 0), + SR_CORE ("afsr1_el3", CPENC (3,6,C5,C1,1), 0), + SR_V8_1 ("afsr1_el12", CPENC (3,5,C5,C1,1), 0), + SR_CORE ("esr_el1", CPENC (3,0,C5,C2,0), 0), + SR_CORE ("esr_el2", CPENC (3,4,C5,C2,0), 0), + SR_CORE ("esr_el3", CPENC (3,6,C5,C2,0), 0), + SR_V8_1 ("esr_el12", CPENC (3,5,C5,C2,0), 0), + SR_RAS ("vsesr_el2", CPENC (3,4,C5,C2,3), 0), + SR_CORE ("fpexc32_el2", CPENC (3,4,C5,C3,0), 0), + SR_RAS ("erridr_el1", CPENC (3,0,C5,C3,0), F_REG_READ), + SR_RAS ("errselr_el1", CPENC (3,0,C5,C3,1), 0), + SR_RAS ("erxfr_el1", CPENC (3,0,C5,C4,0), F_REG_READ), + SR_RAS ("erxctlr_el1", CPENC (3,0,C5,C4,1), 0), + SR_RAS ("erxstatus_el1", CPENC (3,0,C5,C4,2), 0), + SR_RAS ("erxaddr_el1", CPENC (3,0,C5,C4,3), 0), + SR_RAS ("erxmisc0_el1", CPENC (3,0,C5,C5,0), 0), + SR_RAS ("erxmisc1_el1", CPENC (3,0,C5,C5,1), 0), + SR_CORE ("far_el1", CPENC (3,0,C6,C0,0), 0), + SR_CORE ("far_el2", CPENC (3,4,C6,C0,0), 0), + SR_CORE ("far_el3", CPENC (3,6,C6,C0,0), 0), + SR_V8_1 ("far_el12", CPENC (3,5,C6,C0,0), 0), + SR_CORE ("hpfar_el2", CPENC (3,4,C6,C0,4), 0), + SR_CORE ("par_el1", CPENC (3,0,C7,C4,0), 0), + SR_CORE ("mair_el1", CPENC (3,0,C10,C2,0), 0), + SR_CORE ("mair_el2", CPENC (3,4,C10,C2,0), 0), + SR_CORE ("mair_el3", CPENC (3,6,C10,C2,0), 0), + SR_V8_1 ("mair_el12", CPENC (3,5,C10,C2,0), 0), + SR_CORE ("amair_el1", CPENC (3,0,C10,C3,0), 0), + SR_CORE ("amair_el2", CPENC (3,4,C10,C3,0), 0), + SR_CORE ("amair_el3", CPENC (3,6,C10,C3,0), 0), + SR_V8_1 ("amair_el12", CPENC (3,5,C10,C3,0), 0), + SR_CORE ("vbar_el1", CPENC (3,0,C12,C0,0), 0), + SR_CORE ("vbar_el2", CPENC (3,4,C12,C0,0), 0), + SR_CORE ("vbar_el3", CPENC (3,6,C12,C0,0), 0), + SR_V8_1 ("vbar_el12", CPENC (3,5,C12,C0,0), 0), + SR_CORE ("rvbar_el1", CPENC (3,0,C12,C0,1), F_REG_READ), + SR_CORE ("rvbar_el2", CPENC (3,4,C12,C0,1), F_REG_READ), + SR_CORE ("rvbar_el3", CPENC (3,6,C12,C0,1), F_REG_READ), + SR_CORE ("rmr_el1", CPENC (3,0,C12,C0,2), 0), + SR_CORE ("rmr_el2", CPENC (3,4,C12,C0,2), 0), + SR_CORE ("rmr_el3", CPENC (3,6,C12,C0,2), 0), + SR_CORE ("isr_el1", CPENC (3,0,C12,C1,0), F_REG_READ), + SR_RAS ("disr_el1", CPENC (3,0,C12,C1,1), 0), + SR_RAS ("vdisr_el2", CPENC (3,4,C12,C1,1), 0), + SR_CORE ("contextidr_el1", CPENC (3,0,C13,C0,1), 0), + SR_V8_1 ("contextidr_el2", CPENC (3,4,C13,C0,1), 0), + SR_V8_1 ("contextidr_el12", CPENC (3,5,C13,C0,1), 0), + SR_RNG ("rndr", CPENC (3,3,C2,C4,0), F_REG_READ), + SR_RNG ("rndrrs", CPENC (3,3,C2,C4,1), F_REG_READ), + SR_MEMTAG ("tco", CPENC (3,3,C4,C2,7), 0), + SR_MEMTAG ("tfsre0_el1", CPENC (3,0,C5,C6,1), 0), + SR_MEMTAG ("tfsr_el1", CPENC (3,0,C5,C6,0), 0), + SR_MEMTAG ("tfsr_el2", CPENC (3,4,C5,C6,0), 0), + SR_MEMTAG ("tfsr_el3", CPENC (3,6,C5,C6,0), 0), + SR_MEMTAG ("tfsr_el12", CPENC (3,5,C5,C6,0), 0), + SR_MEMTAG ("rgsr_el1", CPENC (3,0,C1,C0,5), 0), + SR_MEMTAG ("gcr_el1", CPENC (3,0,C1,C0,6), 0), + SR_MEMTAG ("gmid_el1", CPENC (3,1,C0,C0,4), F_REG_READ), + SR_CORE ("tpidr_el0", CPENC (3,3,C13,C0,2), 0), + SR_CORE ("tpidrro_el0", CPENC (3,3,C13,C0,3), 0), + SR_CORE ("tpidr_el1", CPENC (3,0,C13,C0,4), 0), + SR_CORE ("tpidr_el2", CPENC (3,4,C13,C0,2), 0), + SR_CORE ("tpidr_el3", CPENC (3,6,C13,C0,2), 0), + SR_SCXTNUM ("scxtnum_el0", CPENC (3,3,C13,C0,7), 0), + SR_SCXTNUM ("scxtnum_el1", CPENC (3,0,C13,C0,7), 0), + SR_SCXTNUM ("scxtnum_el2", CPENC (3,4,C13,C0,7), 0), + SR_SCXTNUM ("scxtnum_el12", CPENC (3,5,C13,C0,7), 0), + SR_SCXTNUM ("scxtnum_el3", CPENC (3,6,C13,C0,7), 0), + SR_CORE ("teecr32_el1", CPENC (2,2,C0, C0,0), 0), /* See section 3.9.7.1. */ + SR_CORE ("cntfrq_el0", CPENC (3,3,C14,C0,0), 0), + SR_CORE ("cntpct_el0", CPENC (3,3,C14,C0,1), F_REG_READ), + SR_CORE ("cntvct_el0", CPENC (3,3,C14,C0,2), F_REG_READ), + SR_CORE ("cntvoff_el2", CPENC (3,4,C14,C0,3), 0), + SR_CORE ("cntkctl_el1", CPENC (3,0,C14,C1,0), 0), + SR_V8_1 ("cntkctl_el12", CPENC (3,5,C14,C1,0), 0), + SR_CORE ("cnthctl_el2", CPENC (3,4,C14,C1,0), 0), + SR_CORE ("cntp_tval_el0", CPENC (3,3,C14,C2,0), 0), + SR_V8_1 ("cntp_tval_el02", CPENC (3,5,C14,C2,0), 0), + SR_CORE ("cntp_ctl_el0", CPENC (3,3,C14,C2,1), 0), + SR_V8_1 ("cntp_ctl_el02", CPENC (3,5,C14,C2,1), 0), + SR_CORE ("cntp_cval_el0", CPENC (3,3,C14,C2,2), 0), + SR_V8_1 ("cntp_cval_el02", CPENC (3,5,C14,C2,2), 0), + SR_CORE ("cntv_tval_el0", CPENC (3,3,C14,C3,0), 0), + SR_V8_1 ("cntv_tval_el02", CPENC (3,5,C14,C3,0), 0), + SR_CORE ("cntv_ctl_el0", CPENC (3,3,C14,C3,1), 0), + SR_V8_1 ("cntv_ctl_el02", CPENC (3,5,C14,C3,1), 0), + SR_CORE ("cntv_cval_el0", CPENC (3,3,C14,C3,2), 0), + SR_V8_1 ("cntv_cval_el02", CPENC (3,5,C14,C3,2), 0), + SR_CORE ("cnthp_tval_el2", CPENC (3,4,C14,C2,0), 0), + SR_CORE ("cnthp_ctl_el2", CPENC (3,4,C14,C2,1), 0), + SR_CORE ("cnthp_cval_el2", CPENC (3,4,C14,C2,2), 0), + SR_CORE ("cntps_tval_el1", CPENC (3,7,C14,C2,0), 0), + SR_CORE ("cntps_ctl_el1", CPENC (3,7,C14,C2,1), 0), + SR_CORE ("cntps_cval_el1", CPENC (3,7,C14,C2,2), 0), + SR_V8_1 ("cnthv_tval_el2", CPENC (3,4,C14,C3,0), 0), + SR_V8_1 ("cnthv_ctl_el2", CPENC (3,4,C14,C3,1), 0), + SR_V8_1 ("cnthv_cval_el2", CPENC (3,4,C14,C3,2), 0), + SR_CORE ("dacr32_el2", CPENC (3,4,C3,C0,0), 0), + SR_CORE ("ifsr32_el2", CPENC (3,4,C5,C0,1), 0), + SR_CORE ("teehbr32_el1", CPENC (2,2,C1,C0,0), 0), + SR_CORE ("sder32_el3", CPENC (3,6,C1,C1,1), 0), + SR_CORE ("mdscr_el1", CPENC (2,0,C0,C2,2), 0), + SR_CORE ("mdccsr_el0", CPENC (2,3,C0,C1,0), F_REG_READ), + SR_CORE ("mdccint_el1", CPENC (2,0,C0,C2,0), 0), + SR_CORE ("dbgdtr_el0", CPENC (2,3,C0,C4,0), 0), + SR_CORE ("dbgdtrrx_el0", CPENC (2,3,C0,C5,0), F_REG_READ), + SR_CORE ("dbgdtrtx_el0", CPENC (2,3,C0,C5,0), F_REG_WRITE), + SR_CORE ("osdtrrx_el1", CPENC (2,0,C0,C0,2), 0), + SR_CORE ("osdtrtx_el1", CPENC (2,0,C0,C3,2), 0), + SR_CORE ("oseccr_el1", CPENC (2,0,C0,C6,2), 0), + SR_CORE ("dbgvcr32_el2", CPENC (2,4,C0,C7,0), 0), + SR_CORE ("dbgbvr0_el1", CPENC (2,0,C0,C0,4), 0), + SR_CORE ("dbgbvr1_el1", CPENC (2,0,C0,C1,4), 0), + SR_CORE ("dbgbvr2_el1", CPENC (2,0,C0,C2,4), 0), + SR_CORE ("dbgbvr3_el1", CPENC (2,0,C0,C3,4), 0), + SR_CORE ("dbgbvr4_el1", CPENC (2,0,C0,C4,4), 0), + SR_CORE ("dbgbvr5_el1", CPENC (2,0,C0,C5,4), 0), + SR_CORE ("dbgbvr6_el1", CPENC (2,0,C0,C6,4), 0), + SR_CORE ("dbgbvr7_el1", CPENC (2,0,C0,C7,4), 0), + SR_CORE ("dbgbvr8_el1", CPENC (2,0,C0,C8,4), 0), + SR_CORE ("dbgbvr9_el1", CPENC (2,0,C0,C9,4), 0), + SR_CORE ("dbgbvr10_el1", CPENC (2,0,C0,C10,4), 0), + SR_CORE ("dbgbvr11_el1", CPENC (2,0,C0,C11,4), 0), + SR_CORE ("dbgbvr12_el1", CPENC (2,0,C0,C12,4), 0), + SR_CORE ("dbgbvr13_el1", CPENC (2,0,C0,C13,4), 0), + SR_CORE ("dbgbvr14_el1", CPENC (2,0,C0,C14,4), 0), + SR_CORE ("dbgbvr15_el1", CPENC (2,0,C0,C15,4), 0), + SR_CORE ("dbgbcr0_el1", CPENC (2,0,C0,C0,5), 0), + SR_CORE ("dbgbcr1_el1", CPENC (2,0,C0,C1,5), 0), + SR_CORE ("dbgbcr2_el1", CPENC (2,0,C0,C2,5), 0), + SR_CORE ("dbgbcr3_el1", CPENC (2,0,C0,C3,5), 0), + SR_CORE ("dbgbcr4_el1", CPENC (2,0,C0,C4,5), 0), + SR_CORE ("dbgbcr5_el1", CPENC (2,0,C0,C5,5), 0), + SR_CORE ("dbgbcr6_el1", CPENC (2,0,C0,C6,5), 0), + SR_CORE ("dbgbcr7_el1", CPENC (2,0,C0,C7,5), 0), + SR_CORE ("dbgbcr8_el1", CPENC (2,0,C0,C8,5), 0), + SR_CORE ("dbgbcr9_el1", CPENC (2,0,C0,C9,5), 0), + SR_CORE ("dbgbcr10_el1", CPENC (2,0,C0,C10,5), 0), + SR_CORE ("dbgbcr11_el1", CPENC (2,0,C0,C11,5), 0), + SR_CORE ("dbgbcr12_el1", CPENC (2,0,C0,C12,5), 0), + SR_CORE ("dbgbcr13_el1", CPENC (2,0,C0,C13,5), 0), + SR_CORE ("dbgbcr14_el1", CPENC (2,0,C0,C14,5), 0), + SR_CORE ("dbgbcr15_el1", CPENC (2,0,C0,C15,5), 0), + SR_CORE ("dbgwvr0_el1", CPENC (2,0,C0,C0,6), 0), + SR_CORE ("dbgwvr1_el1", CPENC (2,0,C0,C1,6), 0), + SR_CORE ("dbgwvr2_el1", CPENC (2,0,C0,C2,6), 0), + SR_CORE ("dbgwvr3_el1", CPENC (2,0,C0,C3,6), 0), + SR_CORE ("dbgwvr4_el1", CPENC (2,0,C0,C4,6), 0), + SR_CORE ("dbgwvr5_el1", CPENC (2,0,C0,C5,6), 0), + SR_CORE ("dbgwvr6_el1", CPENC (2,0,C0,C6,6), 0), + SR_CORE ("dbgwvr7_el1", CPENC (2,0,C0,C7,6), 0), + SR_CORE ("dbgwvr8_el1", CPENC (2,0,C0,C8,6), 0), + SR_CORE ("dbgwvr9_el1", CPENC (2,0,C0,C9,6), 0), + SR_CORE ("dbgwvr10_el1", CPENC (2,0,C0,C10,6), 0), + SR_CORE ("dbgwvr11_el1", CPENC (2,0,C0,C11,6), 0), + SR_CORE ("dbgwvr12_el1", CPENC (2,0,C0,C12,6), 0), + SR_CORE ("dbgwvr13_el1", CPENC (2,0,C0,C13,6), 0), + SR_CORE ("dbgwvr14_el1", CPENC (2,0,C0,C14,6), 0), + SR_CORE ("dbgwvr15_el1", CPENC (2,0,C0,C15,6), 0), + SR_CORE ("dbgwcr0_el1", CPENC (2,0,C0,C0,7), 0), + SR_CORE ("dbgwcr1_el1", CPENC (2,0,C0,C1,7), 0), + SR_CORE ("dbgwcr2_el1", CPENC (2,0,C0,C2,7), 0), + SR_CORE ("dbgwcr3_el1", CPENC (2,0,C0,C3,7), 0), + SR_CORE ("dbgwcr4_el1", CPENC (2,0,C0,C4,7), 0), + SR_CORE ("dbgwcr5_el1", CPENC (2,0,C0,C5,7), 0), + SR_CORE ("dbgwcr6_el1", CPENC (2,0,C0,C6,7), 0), + SR_CORE ("dbgwcr7_el1", CPENC (2,0,C0,C7,7), 0), + SR_CORE ("dbgwcr8_el1", CPENC (2,0,C0,C8,7), 0), + SR_CORE ("dbgwcr9_el1", CPENC (2,0,C0,C9,7), 0), + SR_CORE ("dbgwcr10_el1", CPENC (2,0,C0,C10,7), 0), + SR_CORE ("dbgwcr11_el1", CPENC (2,0,C0,C11,7), 0), + SR_CORE ("dbgwcr12_el1", CPENC (2,0,C0,C12,7), 0), + SR_CORE ("dbgwcr13_el1", CPENC (2,0,C0,C13,7), 0), + SR_CORE ("dbgwcr14_el1", CPENC (2,0,C0,C14,7), 0), + SR_CORE ("dbgwcr15_el1", CPENC (2,0,C0,C15,7), 0), + SR_CORE ("mdrar_el1", CPENC (2,0,C1,C0,0), F_REG_READ), + SR_CORE ("oslar_el1", CPENC (2,0,C1,C0,4), F_REG_WRITE), + SR_CORE ("oslsr_el1", CPENC (2,0,C1,C1,4), F_REG_READ), + SR_CORE ("osdlr_el1", CPENC (2,0,C1,C3,4), 0), + SR_CORE ("dbgprcr_el1", CPENC (2,0,C1,C4,4), 0), + SR_CORE ("dbgclaimset_el1", CPENC (2,0,C7,C8,6), 0), + SR_CORE ("dbgclaimclr_el1", CPENC (2,0,C7,C9,6), 0), + SR_CORE ("dbgauthstatus_el1", CPENC (2,0,C7,C14,6), F_REG_READ), + SR_PROFILE ("pmblimitr_el1", CPENC (3,0,C9,C10,0), 0), + SR_PROFILE ("pmbptr_el1", CPENC (3,0,C9,C10,1), 0), + SR_PROFILE ("pmbsr_el1", CPENC (3,0,C9,C10,3), 0), + SR_PROFILE ("pmbidr_el1", CPENC (3,0,C9,C10,7), F_REG_READ), + SR_PROFILE ("pmscr_el1", CPENC (3,0,C9,C9,0), 0), + SR_PROFILE ("pmsicr_el1", CPENC (3,0,C9,C9,2), 0), + SR_PROFILE ("pmsirr_el1", CPENC (3,0,C9,C9,3), 0), + SR_PROFILE ("pmsfcr_el1", CPENC (3,0,C9,C9,4), 0), + SR_PROFILE ("pmsevfr_el1", CPENC (3,0,C9,C9,5), 0), + SR_PROFILE ("pmslatfr_el1", CPENC (3,0,C9,C9,6), 0), + SR_PROFILE ("pmsidr_el1", CPENC (3,0,C9,C9,7), 0), + SR_PROFILE ("pmscr_el2", CPENC (3,4,C9,C9,0), 0), + SR_PROFILE ("pmscr_el12", CPENC (3,5,C9,C9,0), 0), + SR_CORE ("pmcr_el0", CPENC (3,3,C9,C12,0), 0), + SR_CORE ("pmcntenset_el0", CPENC (3,3,C9,C12,1), 0), + SR_CORE ("pmcntenclr_el0", CPENC (3,3,C9,C12,2), 0), + SR_CORE ("pmovsclr_el0", CPENC (3,3,C9,C12,3), 0), + SR_CORE ("pmswinc_el0", CPENC (3,3,C9,C12,4), F_REG_WRITE), + SR_CORE ("pmselr_el0", CPENC (3,3,C9,C12,5), 0), + SR_CORE ("pmceid0_el0", CPENC (3,3,C9,C12,6), F_REG_READ), + SR_CORE ("pmceid1_el0", CPENC (3,3,C9,C12,7), F_REG_READ), + SR_CORE ("pmccntr_el0", CPENC (3,3,C9,C13,0), 0), + SR_CORE ("pmxevtyper_el0", CPENC (3,3,C9,C13,1), 0), + SR_CORE ("pmxevcntr_el0", CPENC (3,3,C9,C13,2), 0), + SR_CORE ("pmuserenr_el0", CPENC (3,3,C9,C14,0), 0), + SR_CORE ("pmintenset_el1", CPENC (3,0,C9,C14,1), 0), + SR_CORE ("pmintenclr_el1", CPENC (3,0,C9,C14,2), 0), + SR_CORE ("pmovsset_el0", CPENC (3,3,C9,C14,3), 0), + SR_CORE ("pmevcntr0_el0", CPENC (3,3,C14,C8,0), 0), + SR_CORE ("pmevcntr1_el0", CPENC (3,3,C14,C8,1), 0), + SR_CORE ("pmevcntr2_el0", CPENC (3,3,C14,C8,2), 0), + SR_CORE ("pmevcntr3_el0", CPENC (3,3,C14,C8,3), 0), + SR_CORE ("pmevcntr4_el0", CPENC (3,3,C14,C8,4), 0), + SR_CORE ("pmevcntr5_el0", CPENC (3,3,C14,C8,5), 0), + SR_CORE ("pmevcntr6_el0", CPENC (3,3,C14,C8,6), 0), + SR_CORE ("pmevcntr7_el0", CPENC (3,3,C14,C8,7), 0), + SR_CORE ("pmevcntr8_el0", CPENC (3,3,C14,C9,0), 0), + SR_CORE ("pmevcntr9_el0", CPENC (3,3,C14,C9,1), 0), + SR_CORE ("pmevcntr10_el0", CPENC (3,3,C14,C9,2), 0), + SR_CORE ("pmevcntr11_el0", CPENC (3,3,C14,C9,3), 0), + SR_CORE ("pmevcntr12_el0", CPENC (3,3,C14,C9,4), 0), + SR_CORE ("pmevcntr13_el0", CPENC (3,3,C14,C9,5), 0), + SR_CORE ("pmevcntr14_el0", CPENC (3,3,C14,C9,6), 0), + SR_CORE ("pmevcntr15_el0", CPENC (3,3,C14,C9,7), 0), + SR_CORE ("pmevcntr16_el0", CPENC (3,3,C14,C10,0), 0), + SR_CORE ("pmevcntr17_el0", CPENC (3,3,C14,C10,1), 0), + SR_CORE ("pmevcntr18_el0", CPENC (3,3,C14,C10,2), 0), + SR_CORE ("pmevcntr19_el0", CPENC (3,3,C14,C10,3), 0), + SR_CORE ("pmevcntr20_el0", CPENC (3,3,C14,C10,4), 0), + SR_CORE ("pmevcntr21_el0", CPENC (3,3,C14,C10,5), 0), + SR_CORE ("pmevcntr22_el0", CPENC (3,3,C14,C10,6), 0), + SR_CORE ("pmevcntr23_el0", CPENC (3,3,C14,C10,7), 0), + SR_CORE ("pmevcntr24_el0", CPENC (3,3,C14,C11,0), 0), + SR_CORE ("pmevcntr25_el0", CPENC (3,3,C14,C11,1), 0), + SR_CORE ("pmevcntr26_el0", CPENC (3,3,C14,C11,2), 0), + SR_CORE ("pmevcntr27_el0", CPENC (3,3,C14,C11,3), 0), + SR_CORE ("pmevcntr28_el0", CPENC (3,3,C14,C11,4), 0), + SR_CORE ("pmevcntr29_el0", CPENC (3,3,C14,C11,5), 0), + SR_CORE ("pmevcntr30_el0", CPENC (3,3,C14,C11,6), 0), + SR_CORE ("pmevtyper0_el0", CPENC (3,3,C14,C12,0), 0), + SR_CORE ("pmevtyper1_el0", CPENC (3,3,C14,C12,1), 0), + SR_CORE ("pmevtyper2_el0", CPENC (3,3,C14,C12,2), 0), + SR_CORE ("pmevtyper3_el0", CPENC (3,3,C14,C12,3), 0), + SR_CORE ("pmevtyper4_el0", CPENC (3,3,C14,C12,4), 0), + SR_CORE ("pmevtyper5_el0", CPENC (3,3,C14,C12,5), 0), + SR_CORE ("pmevtyper6_el0", CPENC (3,3,C14,C12,6), 0), + SR_CORE ("pmevtyper7_el0", CPENC (3,3,C14,C12,7), 0), + SR_CORE ("pmevtyper8_el0", CPENC (3,3,C14,C13,0), 0), + SR_CORE ("pmevtyper9_el0", CPENC (3,3,C14,C13,1), 0), + SR_CORE ("pmevtyper10_el0", CPENC (3,3,C14,C13,2), 0), + SR_CORE ("pmevtyper11_el0", CPENC (3,3,C14,C13,3), 0), + SR_CORE ("pmevtyper12_el0", CPENC (3,3,C14,C13,4), 0), + SR_CORE ("pmevtyper13_el0", CPENC (3,3,C14,C13,5), 0), + SR_CORE ("pmevtyper14_el0", CPENC (3,3,C14,C13,6), 0), + SR_CORE ("pmevtyper15_el0", CPENC (3,3,C14,C13,7), 0), + SR_CORE ("pmevtyper16_el0", CPENC (3,3,C14,C14,0), 0), + SR_CORE ("pmevtyper17_el0", CPENC (3,3,C14,C14,1), 0), + SR_CORE ("pmevtyper18_el0", CPENC (3,3,C14,C14,2), 0), + SR_CORE ("pmevtyper19_el0", CPENC (3,3,C14,C14,3), 0), + SR_CORE ("pmevtyper20_el0", CPENC (3,3,C14,C14,4), 0), + SR_CORE ("pmevtyper21_el0", CPENC (3,3,C14,C14,5), 0), + SR_CORE ("pmevtyper22_el0", CPENC (3,3,C14,C14,6), 0), + SR_CORE ("pmevtyper23_el0", CPENC (3,3,C14,C14,7), 0), + SR_CORE ("pmevtyper24_el0", CPENC (3,3,C14,C15,0), 0), + SR_CORE ("pmevtyper25_el0", CPENC (3,3,C14,C15,1), 0), + SR_CORE ("pmevtyper26_el0", CPENC (3,3,C14,C15,2), 0), + SR_CORE ("pmevtyper27_el0", CPENC (3,3,C14,C15,3), 0), + SR_CORE ("pmevtyper28_el0", CPENC (3,3,C14,C15,4), 0), + SR_CORE ("pmevtyper29_el0", CPENC (3,3,C14,C15,5), 0), + SR_CORE ("pmevtyper30_el0", CPENC (3,3,C14,C15,6), 0), + SR_CORE ("pmccfiltr_el0", CPENC (3,3,C14,C15,7), 0), + + SR_V8_4 ("dit", CPEN_ (3,C2,5), 0), + SR_V8_4 ("vstcr_el2", CPENC (3,4,C2,C6,2), 0), + SR_V8_4_A ("vsttbr_el2", CPENC (3,4,C2,C6,0), 0), + SR_V8_4 ("cnthvs_tval_el2", CPENC (3,4,C14,C4,0), 0), + SR_V8_4 ("cnthvs_cval_el2", CPENC (3,4,C14,C4,2), 0), + SR_V8_4 ("cnthvs_ctl_el2", CPENC (3,4,C14,C4,1), 0), + SR_V8_4 ("cnthps_tval_el2", CPENC (3,4,C14,C5,0), 0), + SR_V8_4 ("cnthps_cval_el2", CPENC (3,4,C14,C5,2), 0), + SR_V8_4 ("cnthps_ctl_el2", CPENC (3,4,C14,C5,1), 0), + SR_V8_4 ("sder32_el2", CPENC (3,4,C1,C3,1), 0), + SR_V8_4 ("vncr_el2", CPENC (3,4,C2,C2,0), 0), + + SR_CORE ("mpam0_el1", CPENC (3,0,C10,C5,1), 0), + SR_CORE ("mpam1_el1", CPENC (3,0,C10,C5,0), 0), + SR_CORE ("mpam1_el12", CPENC (3,5,C10,C5,0), 0), + SR_CORE ("mpam2_el2", CPENC (3,4,C10,C5,0), 0), + SR_CORE ("mpam3_el3", CPENC (3,6,C10,C5,0), 0), + SR_CORE ("mpamhcr_el2", CPENC (3,4,C10,C4,0), 0), + SR_CORE ("mpamidr_el1", CPENC (3,0,C10,C4,4), F_REG_READ), + SR_CORE ("mpamvpm0_el2", CPENC (3,4,C10,C6,0), 0), + SR_CORE ("mpamvpm1_el2", CPENC (3,4,C10,C6,1), 0), + SR_CORE ("mpamvpm2_el2", CPENC (3,4,C10,C6,2), 0), + SR_CORE ("mpamvpm3_el2", CPENC (3,4,C10,C6,3), 0), + SR_CORE ("mpamvpm4_el2", CPENC (3,4,C10,C6,4), 0), + SR_CORE ("mpamvpm5_el2", CPENC (3,4,C10,C6,5), 0), + SR_CORE ("mpamvpm6_el2", CPENC (3,4,C10,C6,6), 0), + SR_CORE ("mpamvpm7_el2", CPENC (3,4,C10,C6,7), 0), + SR_CORE ("mpamvpmv_el2", CPENC (3,4,C10,C4,1), 0), + + SR_V8_R ("mpuir_el1", CPENC (3,0,C0,C0,4), F_REG_READ), + SR_V8_R ("mpuir_el2", CPENC (3,4,C0,C0,4), F_REG_READ), + SR_V8_R ("prbar_el1", CPENC (3,0,C6,C8,0), 0), + SR_V8_R ("prbar_el2", CPENC (3,4,C6,C8,0), 0), + +#define ENC_BARLAR(x,n,lar) \ + CPENC (3, (x-1) << 2, C6, 8 | (n >> 1), ((n & 1) << 2) | lar) + +#define PRBARn_ELx(x,n) SR_V8_R ("prbar" #n "_el" #x, ENC_BARLAR (x,n,0), 0) +#define PRLARn_ELx(x,n) SR_V8_R ("prlar" #n "_el" #x, ENC_BARLAR (x,n,1), 0) + + SR_EXPAND_EL12 (PRBARn_ELx) + SR_V8_R ("prenr_el1", CPENC (3,0,C6,C1,1), 0), + SR_V8_R ("prenr_el2", CPENC (3,4,C6,C1,1), 0), + SR_V8_R ("prlar_el1", CPENC (3,0,C6,C8,1), 0), + SR_V8_R ("prlar_el2", CPENC (3,4,C6,C8,1), 0), + SR_EXPAND_EL12 (PRLARn_ELx) + SR_V8_R ("prselr_el1", CPENC (3,0,C6,C2,1), 0), + SR_V8_R ("prselr_el2", CPENC (3,4,C6,C2,1), 0), + SR_V8_R ("vsctlr_el2", CPENC (3,4,C2,C0,0), 0), - /* System Registers in ARMv8.5-A with AARCH64_FEATURE_MEMTAG. */ - if ((reg->value == CPENC (3, 3, C4, C2, 7) - || reg->value == CPENC (3, 0, C5, C6, 1) - || reg->value == CPENC (3, 0, C5, C6, 0) - || reg->value == CPENC (3, 4, C5, C6, 0) - || reg->value == CPENC (3, 6, C5, C6, 0) - || reg->value == CPENC (3, 5, C5, C6, 0) - || reg->value == CPENC (3, 0, C1, C0, 5) - || reg->value == CPENC (3, 0, C1, C0, 6) - || reg->value == CPENC (3, 1, C0, C0, 4)) - && !(AARCH64_CPU_HAS_FEATURE (features, AARCH64_FEATURE_MEMTAG))) - return FALSE; + { 0, CPENC (0,0,0,0,0), 0, 0 } +}; - return TRUE; +bfd_boolean +aarch64_sys_reg_deprecated_p (const uint32_t reg_flags) +{ + return (reg_flags & F_DEPRECATED) != 0; } /* The CPENC below is fairly misleading, the fields @@ -4467,15 +4329,15 @@ 0b011010 (0x1a). */ const aarch64_sys_reg aarch64_pstatefields [] = { - { "spsel", 0x05, 0 }, - { "daifset", 0x1e, 0 }, - { "daifclr", 0x1f, 0 }, - { "pan", 0x04, F_ARCHEXT }, - { "uao", 0x03, F_ARCHEXT }, - { "ssbs", 0x19, F_ARCHEXT }, - { "dit", 0x1a, F_ARCHEXT }, - { "tco", 0x1c, F_ARCHEXT }, - { 0, CPENC(0,0,0,0,0), 0 }, + SR_CORE ("spsel", 0x05, 0), + SR_CORE ("daifset", 0x1e, 0), + SR_CORE ("daifclr", 0x1f, 0), + SR_PAN ("pan", 0x04, 0), + SR_V8_2 ("uao", 0x03, 0), + SR_SSBS ("ssbs", 0x19, 0), + SR_V8_4 ("dit", 0x1a, 0), + SR_MEMTAG ("tco", 0x1c, 0), + { 0, CPENC (0,0,0,0,0), 0, 0 }, }; bfd_boolean @@ -4485,32 +4347,7 @@ if (!(reg->flags & F_ARCHEXT)) return TRUE; - /* PAN. Values are from aarch64_pstatefields. */ - if (reg->value == 0x04 - && !AARCH64_CPU_HAS_FEATURE (features, AARCH64_FEATURE_PAN)) - return FALSE; - - /* UAO. Values are from aarch64_pstatefields. */ - if (reg->value == 0x03 - && !AARCH64_CPU_HAS_FEATURE (features, AARCH64_FEATURE_V8_2)) - return FALSE; - - /* SSBS. Values are from aarch64_pstatefields. */ - if (reg->value == 0x19 - && !AARCH64_CPU_HAS_FEATURE (features, AARCH64_FEATURE_SSBS)) - return FALSE; - - /* DIT. Values are from aarch64_pstatefields. */ - if (reg->value == 0x1a - && !AARCH64_CPU_HAS_FEATURE (features, AARCH64_FEATURE_V8_4)) - return FALSE; - - /* TCO. Values are from aarch64_pstatefields. */ - if (reg->value == 0x1c - && !AARCH64_CPU_HAS_FEATURE (features, AARCH64_FEATURE_MEMTAG)) - return FALSE; - - return TRUE; + return AARCH64_CPU_HAS_ALL_FEATURES (features, reg->features); } const aarch64_sys_ins_reg aarch64_sys_regs_ic[] = @@ -4678,55 +4515,120 @@ extern bfd_boolean aarch64_sys_ins_reg_supported_p (const aarch64_feature_set features, - const aarch64_sys_ins_reg *reg) + const char *reg_name, + aarch64_insn reg_value, + uint32_t reg_flags, + aarch64_feature_set reg_features) { - if (!(reg->flags & F_ARCHEXT)) + /* Armv8-R has no EL3. */ + if (AARCH64_CPU_HAS_FEATURE (features, AARCH64_FEATURE_V8_R)) + { + const char *suffix = strrchr (reg_name, '_'); + if (suffix && !strcmp (suffix, "_el3")) + return FALSE; + } + + if (!(reg_flags & F_ARCHEXT)) + return TRUE; + + if (reg_features + && AARCH64_CPU_HAS_ALL_FEATURES (features, reg_features)) + return TRUE; + + /* ARMv8.4 TLB instructions. */ + if ((reg_value == CPENS (0, C8, C1, 0) + || reg_value == CPENS (0, C8, C1, 1) + || reg_value == CPENS (0, C8, C1, 2) + || reg_value == CPENS (0, C8, C1, 3) + || reg_value == CPENS (0, C8, C1, 5) + || reg_value == CPENS (0, C8, C1, 7) + || reg_value == CPENS (4, C8, C4, 0) + || reg_value == CPENS (4, C8, C4, 4) + || reg_value == CPENS (4, C8, C1, 1) + || reg_value == CPENS (4, C8, C1, 5) + || reg_value == CPENS (4, C8, C1, 6) + || reg_value == CPENS (6, C8, C1, 1) + || reg_value == CPENS (6, C8, C1, 5) + || reg_value == CPENS (4, C8, C1, 0) + || reg_value == CPENS (4, C8, C1, 4) + || reg_value == CPENS (6, C8, C1, 0) + || reg_value == CPENS (0, C8, C6, 1) + || reg_value == CPENS (0, C8, C6, 3) + || reg_value == CPENS (0, C8, C6, 5) + || reg_value == CPENS (0, C8, C6, 7) + || reg_value == CPENS (0, C8, C2, 1) + || reg_value == CPENS (0, C8, C2, 3) + || reg_value == CPENS (0, C8, C2, 5) + || reg_value == CPENS (0, C8, C2, 7) + || reg_value == CPENS (0, C8, C5, 1) + || reg_value == CPENS (0, C8, C5, 3) + || reg_value == CPENS (0, C8, C5, 5) + || reg_value == CPENS (0, C8, C5, 7) + || reg_value == CPENS (4, C8, C0, 2) + || reg_value == CPENS (4, C8, C0, 6) + || reg_value == CPENS (4, C8, C4, 2) + || reg_value == CPENS (4, C8, C4, 6) + || reg_value == CPENS (4, C8, C4, 3) + || reg_value == CPENS (4, C8, C4, 7) + || reg_value == CPENS (4, C8, C6, 1) + || reg_value == CPENS (4, C8, C6, 5) + || reg_value == CPENS (4, C8, C2, 1) + || reg_value == CPENS (4, C8, C2, 5) + || reg_value == CPENS (4, C8, C5, 1) + || reg_value == CPENS (4, C8, C5, 5) + || reg_value == CPENS (6, C8, C6, 1) + || reg_value == CPENS (6, C8, C6, 5) + || reg_value == CPENS (6, C8, C2, 1) + || reg_value == CPENS (6, C8, C2, 5) + || reg_value == CPENS (6, C8, C5, 1) + || reg_value == CPENS (6, C8, C5, 5)) + && AARCH64_CPU_HAS_FEATURE (features, AARCH64_FEATURE_V8_4)) return TRUE; /* DC CVAP. Values are from aarch64_sys_regs_dc. */ - if (reg->value == CPENS (3, C7, C12, 1) - && !AARCH64_CPU_HAS_FEATURE (features, AARCH64_FEATURE_V8_2)) - return FALSE; + if (reg_value == CPENS (3, C7, C12, 1) + && AARCH64_CPU_HAS_FEATURE (features, AARCH64_FEATURE_V8_2)) + return TRUE; /* DC CVADP. Values are from aarch64_sys_regs_dc. */ - if (reg->value == CPENS (3, C7, C13, 1) - && !AARCH64_CPU_HAS_FEATURE (features, AARCH64_FEATURE_CVADP)) - return FALSE; + if (reg_value == CPENS (3, C7, C13, 1) + && AARCH64_CPU_HAS_FEATURE (features, AARCH64_FEATURE_CVADP)) + return TRUE; /* DC <dc_op> for ARMv8.5-A Memory Tagging Extension. */ - if ((reg->value == CPENS (0, C7, C6, 3) - || reg->value == CPENS (0, C7, C6, 4) - || reg->value == CPENS (0, C7, C10, 4) - || reg->value == CPENS (0, C7, C14, 4) - || reg->value == CPENS (3, C7, C10, 3) - || reg->value == CPENS (3, C7, C12, 3) - || reg->value == CPENS (3, C7, C13, 3) - || reg->value == CPENS (3, C7, C14, 3) - || reg->value == CPENS (3, C7, C4, 3) - || reg->value == CPENS (0, C7, C6, 5) - || reg->value == CPENS (0, C7, C6, 6) - || reg->value == CPENS (0, C7, C10, 6) - || reg->value == CPENS (0, C7, C14, 6) - || reg->value == CPENS (3, C7, C10, 5) - || reg->value == CPENS (3, C7, C12, 5) - || reg->value == CPENS (3, C7, C13, 5) - || reg->value == CPENS (3, C7, C14, 5) - || reg->value == CPENS (3, C7, C4, 4)) - && !AARCH64_CPU_HAS_FEATURE (features, AARCH64_FEATURE_MEMTAG)) - return FALSE; + if ((reg_value == CPENS (0, C7, C6, 3) + || reg_value == CPENS (0, C7, C6, 4) + || reg_value == CPENS (0, C7, C10, 4) + || reg_value == CPENS (0, C7, C14, 4) + || reg_value == CPENS (3, C7, C10, 3) + || reg_value == CPENS (3, C7, C12, 3) + || reg_value == CPENS (3, C7, C13, 3) + || reg_value == CPENS (3, C7, C14, 3) + || reg_value == CPENS (3, C7, C4, 3) + || reg_value == CPENS (0, C7, C6, 5) + || reg_value == CPENS (0, C7, C6, 6) + || reg_value == CPENS (0, C7, C10, 6) + || reg_value == CPENS (0, C7, C14, 6) + || reg_value == CPENS (3, C7, C10, 5) + || reg_value == CPENS (3, C7, C12, 5) + || reg_value == CPENS (3, C7, C13, 5) + || reg_value == CPENS (3, C7, C14, 5) + || reg_value == CPENS (3, C7, C4, 4)) + && AARCH64_CPU_HAS_FEATURE (features, AARCH64_FEATURE_MEMTAG)) + return TRUE; /* AT S1E1RP, AT S1E1WP. Values are from aarch64_sys_regs_at. */ - if ((reg->value == CPENS (0, C7, C9, 0) - || reg->value == CPENS (0, C7, C9, 1)) - && !AARCH64_CPU_HAS_FEATURE (features, AARCH64_FEATURE_V8_2)) - return FALSE; + if ((reg_value == CPENS (0, C7, C9, 0) + || reg_value == CPENS (0, C7, C9, 1)) + && AARCH64_CPU_HAS_FEATURE (features, AARCH64_FEATURE_V8_2)) + return TRUE; /* CFP/DVP/CPP RCTX : Value are from aarch64_sys_regs_sr. */ - if (reg->value == CPENS (3, C7, C3, 0) - && !AARCH64_CPU_HAS_FEATURE (features, AARCH64_FEATURE_PREDRES)) - return FALSE; + if (reg_value == CPENS (3, C7, C3, 0) + && AARCH64_CPU_HAS_FEATURE (features, AARCH64_FEATURE_PREDRES)) + return TRUE; - return TRUE; + return FALSE; } #undef C0 @@ -5110,7 +5012,7 @@ } } -done: + done: /* Add the new instruction to the sequence. */ memcpy (insn_sequence->current_insns + insn_sequence->next_insn++, inst, sizeof (aarch64_inst)); diff -Nru gdb-9.1/opcodes/aarch64-opc.h gdb-10.2/opcodes/aarch64-opc.h --- gdb-9.1/opcodes/aarch64-opc.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/aarch64-opc.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* aarch64-opc.h -- Header file for aarch64-opc.c and aarch64-opc-2.c. - Copyright (C) 2012-2019 Free Software Foundation, Inc. + Copyright (C) 2012-2020 Free Software Foundation, Inc. Contributed by ARM Ltd. This file is part of the GNU opcodes library. @@ -78,6 +78,7 @@ FLD_imm12, FLD_imm14, FLD_imm16, + FLD_imm16_2, FLD_imm26, FLD_imms, FLD_immr, @@ -485,7 +486,7 @@ aarch64_get_operand_modifier_from_value (aarch64_insn, bfd_boolean); -bfd_boolean aarch64_wide_constant_p (int64_t, int, unsigned int *); +bfd_boolean aarch64_wide_constant_p (uint64_t, int, unsigned int *); bfd_boolean aarch64_logical_immediate_p (uint64_t, int, aarch64_insn *); int aarch64_shrink_expanded_imm8 (uint64_t); diff -Nru gdb-9.1/opcodes/aarch64-tbl.h gdb-10.2/opcodes/aarch64-tbl.h --- gdb-9.1/opcodes/aarch64-tbl.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/aarch64-tbl.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* aarch64-tbl.h -- AArch64 opcode description table and instruction operand description table. - Copyright (C) 2012-2019 Free Software Foundation, Inc. + Copyright (C) 2012-2020 Free Software Foundation, Inc. This file is part of the GNU opcodes library. @@ -2332,16 +2332,12 @@ AARCH64_FEATURE (AARCH64_FEATURE_LOR, 0); static const aarch64_feature_set aarch64_feature_rdma = AARCH64_FEATURE (AARCH64_FEATURE_RDMA, 0); -static const aarch64_feature_set aarch64_feature_ras = - AARCH64_FEATURE (AARCH64_FEATURE_RAS, 0); static const aarch64_feature_set aarch64_feature_v8_2 = AARCH64_FEATURE (AARCH64_FEATURE_V8_2, 0); static const aarch64_feature_set aarch64_feature_fp_f16 = AARCH64_FEATURE (AARCH64_FEATURE_F16 | AARCH64_FEATURE_FP, 0); static const aarch64_feature_set aarch64_feature_simd_f16 = AARCH64_FEATURE (AARCH64_FEATURE_F16 | AARCH64_FEATURE_SIMD, 0); -static const aarch64_feature_set aarch64_feature_stat_profile = - AARCH64_FEATURE (AARCH64_FEATURE_PROFILE, 0); static const aarch64_feature_set aarch64_feature_sve = AARCH64_FEATURE (AARCH64_FEATURE_SVE, 0); static const aarch64_feature_set aarch64_feature_v8_3 = @@ -2379,8 +2375,6 @@ AARCH64_FEATURE (AARCH64_FEATURE_SB, 0); static const aarch64_feature_set aarch64_feature_predres = AARCH64_FEATURE (AARCH64_FEATURE_PREDRES, 0); -static const aarch64_feature_set aarch64_feature_bti = - AARCH64_FEATURE (AARCH64_FEATURE_BTI, 0); static const aarch64_feature_set aarch64_feature_memtag = AARCH64_FEATURE (AARCH64_FEATURE_V8_5 | AARCH64_FEATURE_MEMTAG, 0); static const aarch64_feature_set aarch64_feature_bfloat16 = @@ -2412,6 +2406,8 @@ static const aarch64_feature_set aarch64_feature_f64mm_sve = AARCH64_FEATURE (AARCH64_FEATURE_V8_2 | AARCH64_FEATURE_F64MM | AARCH64_FEATURE_SVE, 0); +static const aarch64_feature_set aarch64_feature_v8_r = + AARCH64_FEATURE (AARCH64_FEATURE_V8_R, 0); #define CORE &aarch64_feature_v8 @@ -2423,8 +2419,6 @@ #define RDMA &aarch64_feature_rdma #define FP_F16 &aarch64_feature_fp_f16 #define SIMD_F16 &aarch64_feature_simd_f16 -#define RAS &aarch64_feature_ras -#define STAT_PROFILE &aarch64_feature_stat_profile #define ARMV8_2 &aarch64_feature_v8_2 #define SVE &aarch64_feature_sve #define ARMV8_3 &aarch64_feature_v8_3 @@ -2443,7 +2437,6 @@ #define FRINTTS &aarch64_feature_frintts #define SB &aarch64_feature_sb #define PREDRES &aarch64_feature_predres -#define BTI &aarch64_feature_bti #define MEMTAG &aarch64_feature_memtag #define TME &aarch64_feature_tme #define SVE2 &aarch64_feature_sve2 @@ -2459,6 +2452,7 @@ #define F32MM_SVE &aarch64_feature_f32mm_sve #define F64MM_SVE &aarch64_feature_f64mm_sve #define I8MM &aarch64_feature_i8mm +#define ARMV8_R &aarch64_feature_v8_r #define CORE_INSN(NAME,OPCODE,MASK,CLASS,OP,OPS,QUALS,FLAGS) \ { NAME, OPCODE, MASK, CLASS, OP, CORE, OPS, QUALS, FLAGS, 0, 0, NULL } @@ -2518,8 +2512,6 @@ { NAME, OPCODE, MASK, CLASS, 0, SB, OPS, QUALS, FLAGS, 0, 0, NULL } #define PREDRES_INSN(NAME,OPCODE,MASK,CLASS,OPS,QUALS,FLAGS) \ { NAME, OPCODE, MASK, CLASS, 0, PREDRES, OPS, QUALS, FLAGS, 0, 0, NULL } -#define BTI_INSN(NAME,OPCODE,MASK,CLASS,OPS,QUALS,FLAGS) \ - { NAME, OPCODE, MASK, CLASS, 0, BTI, OPS, QUALS, FLAGS, 0, 0, NULL } #define MEMTAG_INSN(NAME,OPCODE,MASK,CLASS,OPS,QUALS,FLAGS) \ { NAME, OPCODE, MASK, CLASS, 0, MEMTAG, OPS, QUALS, FLAGS, 0, 0, NULL } #define _TME_INSN(NAME,OPCODE,MASK,CLASS,OP,OPS,QUALS,FLAGS) \ @@ -2564,6 +2556,8 @@ { NAME, OPCODE, MASK, CLASS, 0, F64MM_SVE, OPS, QUALS, FLAGS, CONSTRAINTS, TIED, NULL } #define F32MATMUL_SVE_INSNC(NAME,OPCODE,MASK,CLASS,OPS,QUALS,FLAGS, CONSTRAINTS, TIED) \ { NAME, OPCODE, MASK, CLASS, 0, F32MM_SVE, OPS, QUALS, FLAGS, CONSTRAINTS, TIED, NULL } +#define V8_R_INSN(NAME,OPCODE,MASK,CLASS,OPS,QUALS,FLAGS) \ + { NAME, OPCODE, MASK, CLASS, 0, ARMV8_R, OPS, QUALS, FLAGS, 0, 0, NULL } struct aarch64_opcode aarch64_opcode_table[] = { @@ -3365,6 +3359,7 @@ CORE_INSN ("smc", 0xd4000003, 0xffe0001f, exception, 0, OP1 (EXCEPTION), {}, 0), CORE_INSN ("brk", 0xd4200000, 0xffe0001f, exception, 0, OP1 (EXCEPTION), {}, 0), CORE_INSN ("hlt", 0xd4400000, 0xffe0001f, exception, 0, OP1 (EXCEPTION), {}, 0), + CORE_INSN ("udf", 0x00000000, 0xffff0000, exception, 0, OP1 (UNDEFINED), {}, 0), CORE_INSN ("dcps1", 0xd4a00001, 0xffe0001f, exception, 0, OP1 (EXCEPTION), {}, F_OPD0_OPT | F_DEFAULT (0)), CORE_INSN ("dcps2", 0xd4a00002, 0xffe0001f, exception, 0, OP1 (EXCEPTION), {}, F_OPD0_OPT | F_DEFAULT (0)), CORE_INSN ("dcps3", 0xd4a00003, 0xffe0001f, exception, 0, OP1 (EXCEPTION), {}, F_OPD0_OPT | F_DEFAULT (0)), @@ -3838,21 +3833,24 @@ CORE_INSN ("hint",0xd503201f, 0xfffff01f, ic_system, 0, OP1 (UIMM7), {}, F_HAS_ALIAS), CORE_INSN ("nop", 0xd503201f, 0xffffffff, ic_system, 0, OP0 (), {}, F_ALIAS), CORE_INSN ("csdb",0xd503229f, 0xffffffff, ic_system, 0, OP0 (), {}, F_ALIAS), - BTI_INSN ("bti",0xd503241f, 0xffffff3f, ic_system, OP1 (BTI_TARGET), {}, F_ALIAS | F_OPD0_OPT | F_DEFAULT (0x0)), + CORE_INSN ("bti",0xd503241f, 0xffffff3f, ic_system, 0, OP1 (BTI_TARGET), {}, F_ALIAS | F_OPD0_OPT | F_DEFAULT (0x0)), CORE_INSN ("yield", 0xd503203f, 0xffffffff, ic_system, 0, OP0 (), {}, F_ALIAS), CORE_INSN ("wfe", 0xd503205f, 0xffffffff, ic_system, 0, OP0 (), {}, F_ALIAS), CORE_INSN ("wfi", 0xd503207f, 0xffffffff, ic_system, 0, OP0 (), {}, F_ALIAS), CORE_INSN ("sev", 0xd503209f, 0xffffffff, ic_system, 0, OP0 (), {}, F_ALIAS), CORE_INSN ("sevl",0xd50320bf, 0xffffffff, ic_system, 0, OP0 (), {}, F_ALIAS), - V8_3_INSN ("xpaclri", 0xd50320ff, 0xffffffff, ic_system, OP0 (), {}, F_ALIAS), - V8_3_INSN ("pacia1716", 0xd503211f, 0xffffffff, ic_system, OP0 (), {}, F_ALIAS), - V8_3_INSN ("pacib1716", 0xd503215f, 0xffffffff, ic_system, OP0 (), {}, F_ALIAS), - V8_3_INSN ("autia1716", 0xd503219f, 0xffffffff, ic_system, OP0 (), {}, F_ALIAS), - V8_3_INSN ("autib1716", 0xd50321df, 0xffffffff, ic_system, OP0 (), {}, F_ALIAS), - {"esb", 0xd503221f, 0xffffffff, ic_system, 0, RAS, OP0 (), {}, F_ALIAS, 0, 0, NULL}, - {"psb", 0xd503223f, 0xffffffff, ic_system, 0, STAT_PROFILE, OP1 (BARRIER_PSB), {}, F_ALIAS, 0, 0, NULL}, + CORE_INSN ("dgh", 0xd50320df, 0xffffffff, ic_system, 0, OP0 (), {}, 0), + CORE_INSN ("xpaclri", 0xd50320ff, 0xffffffff, ic_system, 0, OP0 (), {}, F_ALIAS), + CORE_INSN ("pacia1716", 0xd503211f, 0xffffffff, ic_system, 0, OP0 (), {}, F_ALIAS), + CORE_INSN ("pacib1716", 0xd503215f, 0xffffffff, ic_system, 0, OP0 (), {}, F_ALIAS), + CORE_INSN ("autia1716", 0xd503219f, 0xffffffff, ic_system, 0, OP0 (), {}, F_ALIAS), + CORE_INSN ("autib1716", 0xd50321df, 0xffffffff, ic_system, 0, OP0 (), {}, F_ALIAS), + CORE_INSN ("esb", 0xd503221f, 0xffffffff, ic_system, 0, OP0 (), {}, F_ALIAS), + CORE_INSN ("psb", 0xd503223f, 0xffffffff, ic_system, 0, OP1 (BARRIER_PSB), {}, F_ALIAS), + CORE_INSN ("tsb", 0xd503225f, 0xffffffff, ic_system, 0, OP1 (BARRIER_PSB), {}, F_ALIAS), CORE_INSN ("clrex", 0xd503305f, 0xfffff0ff, ic_system, 0, OP1 (UIMM4), {}, F_OPD0_OPT | F_DEFAULT (0xF)), CORE_INSN ("dsb", 0xd503309f, 0xfffff0ff, ic_system, 0, OP1 (BARRIER), {}, F_HAS_ALIAS), + V8_R_INSN ("dfb", 0xd5033c9f, 0xffffffff, ic_system, OP0 (), {}, F_ALIAS), CORE_INSN ("ssbb", 0xd503309f, 0xffffffff, ic_system, 0, OP0 (), {}, F_ALIAS), CORE_INSN ("pssbb", 0xd503349f, 0xffffffff, ic_system, 0, OP0 (), {}, F_ALIAS), CORE_INSN ("dmb", 0xd50330bf, 0xfffff0ff, ic_system, 0, OP1 (BARRIER), {}, 0), @@ -3866,17 +3864,25 @@ PREDRES_INSN ("cfp", 0xd50b7380, 0xffffffe0, ic_system, OP2 (SYSREG_SR, Rt), QL_SRC_X, F_ALIAS), PREDRES_INSN ("dvp", 0xd50b73a0, 0xffffffe0, ic_system, OP2 (SYSREG_SR, Rt), QL_SRC_X, F_ALIAS), PREDRES_INSN ("cpp", 0xd50b73e0, 0xffffffe0, ic_system, OP2 (SYSREG_SR, Rt), QL_SRC_X, F_ALIAS), + /* Armv8.4-a flag setting instruction, However this encoding has an encoding clash with the msr + below it. Usually we can resolve this by setting an alias condition on the flags, however that + depends on the disassembly masks to be able to quickly find the alias. The problem is the + cfinv instruction has no arguments, so all bits are set in the mask. Which means it will + potentially alias with too many instructions and so the tree can't be constructed. As a work + around we just place cfinv before msr. This means the order between these two shouldn't be + changed. */ + V8_4_INSN ("cfinv", 0xd500401f, 0xffffffff, ic_system, OP0 (), {}, 0), CORE_INSN ("msr", 0xd5000000, 0xffe00000, ic_system, 0, OP2 (SYSREG, Rt), QL_SRC_X, F_SYS_WRITE), CORE_INSN ("sysl",0xd5280000, 0xfff80000, ic_system, 0, OP5 (Rt, UIMM3_OP1, CRn, CRm, UIMM3_OP2), QL_SYSL, 0), CORE_INSN ("mrs", 0xd5200000, 0xffe00000, ic_system, 0, OP2 (Rt, SYSREG), QL_DST_X, F_SYS_READ), - V8_3_INSN ("paciaz", 0xd503231f, 0xffffffff, ic_system, OP0 (), {}, F_ALIAS), - V8_3_INSN ("paciasp", 0xd503233f, 0xffffffff, ic_system, OP0 (), {}, F_ALIAS), - V8_3_INSN ("pacibz", 0xd503235f, 0xffffffff, ic_system, OP0 (), {}, F_ALIAS), - V8_3_INSN ("pacibsp", 0xd503237f, 0xffffffff, ic_system, OP0 (), {}, F_ALIAS), - V8_3_INSN ("autiaz", 0xd503239f, 0xffffffff, ic_system, OP0 (), {}, F_ALIAS), - V8_3_INSN ("autiasp", 0xd50323bf, 0xffffffff, ic_system, OP0 (), {}, F_ALIAS), - V8_3_INSN ("autibz", 0xd50323df, 0xffffffff, ic_system, OP0 (), {}, F_ALIAS), - V8_3_INSN ("autibsp", 0xd50323ff, 0xffffffff, ic_system, OP0 (), {}, F_ALIAS), + CORE_INSN ("paciaz", 0xd503231f, 0xffffffff, ic_system, 0, OP0 (), {}, F_ALIAS), + CORE_INSN ("paciasp", 0xd503233f, 0xffffffff, ic_system, 0, OP0 (), {}, F_ALIAS), + CORE_INSN ("pacibz", 0xd503235f, 0xffffffff, ic_system, 0, OP0 (), {}, F_ALIAS), + CORE_INSN ("pacibsp", 0xd503237f, 0xffffffff, ic_system, 0, OP0 (), {}, F_ALIAS), + CORE_INSN ("autiaz", 0xd503239f, 0xffffffff, ic_system, 0, OP0 (), {}, F_ALIAS), + CORE_INSN ("autiasp", 0xd50323bf, 0xffffffff, ic_system, 0, OP0 (), {}, F_ALIAS), + CORE_INSN ("autibz", 0xd50323df, 0xffffffff, ic_system, 0, OP0 (), {}, F_ALIAS), + CORE_INSN ("autibsp", 0xd50323ff, 0xffffffff, ic_system, 0, OP0 (), {}, F_ALIAS), /* Test & branch (immediate). */ CORE_INSN ("tbz", 0x36000000, 0x7f000000, testbranch, 0, OP3 (Rt, BIT_NUM, ADDR_PCREL14), QL_PCREL_14, 0), CORE_INSN ("tbnz",0x37000000, 0x7f000000, testbranch, 0, OP3 (Rt, BIT_NUM, ADDR_PCREL14), QL_PCREL_14, 0), @@ -5043,7 +5049,6 @@ FP16_V8_2_INSN ("fmlal2", 0x6f808000, 0xffc0f400, asimdelem, OP3 (Vd, Vn, Em16), QL_V2FML4S, 0), FP16_V8_2_INSN ("fmlsl2", 0x6f80c000, 0xffc0f400, asimdelem, OP3 (Vd, Vn, Em16), QL_V2FML4S, 0), /* System extensions ARMv8.4-a. */ - V8_4_INSN ("cfinv", 0xd500401f, 0xffffffff, ic_system, OP0 (), {}, 0), V8_4_INSN ("rmif", 0xba000400, 0xffe07c10, ic_system, OP3 (Rn, IMM_2, MASK), QL_RMIF, 0), V8_4_INSN ("setf8", 0x3a00080d, 0xfffffc1f, ic_system, OP1 (Rn), QL_SETF, 0), V8_4_INSN ("setf16", 0x3a00480d, 0xfffffc1f, ic_system, OP1 (Rn), QL_SETF, 0), @@ -5062,9 +5067,6 @@ V8_4_INSN ("stlur", 0xd9000000, 0xffe00c00, ldst_unscaled, OP2 (Rt, ADDR_OFFSET), QL_STLX, 0), V8_4_INSN ("ldapur", 0xd9400000, 0xffe00c00, ldst_unscaled, OP2 (Rt, ADDR_OFFSET), QL_STLX, 0), - /* V8.6 instructions */ - V8_6_INSN("dgh", 0xd50320df, 0xffffffff, aarch64_misc, OP0 (), {}, 0), - /* Matrix Multiply instructions. */ INT8MATMUL_SVE_INSNC ("smmla", 0x45009800, 0xffe0fc00, sve_misc, OP3 (SVE_Zd, SVE_Zn, SVE_Zm_16), OP_SVE_SBB, 0, C_SCAN_MOVPRFX, 0), INT8MATMUL_SVE_INSNC ("ummla", 0x45c09800, 0xffe0fc00, sve_misc, OP3 (SVE_Zd, SVE_Zn, SVE_Zm_16), OP_SVE_SBB, 0, C_SCAN_MOVPRFX, 0), @@ -5073,35 +5075,35 @@ INT8MATMUL_SVE_INSNC ("usdot", 0x44a01800, 0xffe0fc00, sve_misc, OP3 (SVE_Zd, SVE_Zn, SVE_Zm3_INDEX), OP_SVE_SBB, 0, C_SCAN_MOVPRFX, 0), INT8MATMUL_SVE_INSNC ("sudot", 0x44a01c00, 0xffe0fc00, sve_misc, OP3 (SVE_Zd, SVE_Zn, SVE_Zm3_INDEX), OP_SVE_SBB, 0, C_SCAN_MOVPRFX, 0), F32MATMUL_SVE_INSNC ("fmmla", 0x64a0e400, 0xffe0fc00, sve_misc, OP3 (SVE_Zd, SVE_Zn, SVE_Zm_16), OP_SVE_VVV_S, 0, C_SCAN_MOVPRFX, 0), - F64MATMUL_SVE_INSNC ("fmmla", 0x64c0e400, 0xffe0fc00, sve_misc, OP3 (SVE_Zd, SVE_Zn, SVE_Zm_16), OP_SVE_VVV_D, 0, C_SCAN_MOVPRFX, 0), - F64MATMUL_SVE_INSN ("ld1rob", 0xa4200000, 0xffe0e000, sve_misc, OP3 (SVE_ZtxN, SVE_Pg3, SVE_ADDR_RX), OP_SVE_BZU, F_OD(1), 0), - F64MATMUL_SVE_INSN ("ld1roh", 0xa4a00000, 0xffe0e000, sve_misc, OP3 (SVE_ZtxN, SVE_Pg3, SVE_ADDR_RX), OP_SVE_HZU, F_OD(1), 0), - F64MATMUL_SVE_INSN ("ld1row", 0xa5200000, 0xffe0e000, sve_misc, OP3 (SVE_ZtxN, SVE_Pg3, SVE_ADDR_RX), OP_SVE_SZU, F_OD(1), 0), - F64MATMUL_SVE_INSN ("ld1rod", 0xa5a00000, 0xffe0e000, sve_misc, OP3 (SVE_ZtxN, SVE_Pg3, SVE_ADDR_RX), OP_SVE_DZU, F_OD(1), 0), + F64MATMUL_SVE_INSNC ("fmmla", 0x64e0e400, 0xffe0fc00, sve_misc, OP3 (SVE_Zd, SVE_Zn, SVE_Zm_16), OP_SVE_VVV_D, 0, C_SCAN_MOVPRFX, 0), + F64MATMUL_SVE_INSN ("ld1rob", 0xa4200000, 0xffe0e000, sve_misc, OP3 (SVE_ZtxN, SVE_Pg3, SVE_ADDR_RX), OP_SVE_BZU, F_OD(1), 0), + F64MATMUL_SVE_INSN ("ld1roh", 0xa4a00000, 0xffe0e000, sve_misc, OP3 (SVE_ZtxN, SVE_Pg3, SVE_ADDR_RX_LSL1), OP_SVE_HZU, F_OD(1), 0), + F64MATMUL_SVE_INSN ("ld1row", 0xa5200000, 0xffe0e000, sve_misc, OP3 (SVE_ZtxN, SVE_Pg3, SVE_ADDR_RX_LSL2), OP_SVE_SZU, F_OD(1), 0), + F64MATMUL_SVE_INSN ("ld1rod", 0xa5a00000, 0xffe0e000, sve_misc, OP3 (SVE_ZtxN, SVE_Pg3, SVE_ADDR_RX_LSL3), OP_SVE_DZU, F_OD(1), 0), F64MATMUL_SVE_INSN ("ld1rob", 0xa4202000, 0xfff0e000, sve_misc, OP3 (SVE_ZtxN, SVE_Pg3, SVE_ADDR_RI_S4x32), OP_SVE_BZU, F_OD(1), 0), F64MATMUL_SVE_INSN ("ld1roh", 0xa4a02000, 0xfff0e000, sve_misc, OP3 (SVE_ZtxN, SVE_Pg3, SVE_ADDR_RI_S4x32), OP_SVE_HZU, F_OD(1), 0), F64MATMUL_SVE_INSN ("ld1row", 0xa5202000, 0xfff0e000, sve_misc, OP3 (SVE_ZtxN, SVE_Pg3, SVE_ADDR_RI_S4x32), OP_SVE_SZU, F_OD(1), 0), F64MATMUL_SVE_INSN ("ld1rod", 0xa5a02000, 0xfff0e000, sve_misc, OP3 (SVE_ZtxN, SVE_Pg3, SVE_ADDR_RI_S4x32), OP_SVE_DZU, F_OD(1), 0), F64MATMUL_SVE_INSN ("zip1", 0x05a00000, 0xffe0fc00, sve_misc, OP3 (SVE_Zd, SVE_Zn, SVE_Zm_16), OP_SVE_QQQ, 0, 0), F64MATMUL_SVE_INSN ("zip2", 0x05a00400, 0xffe0fc00, sve_misc, OP3 (SVE_Zd, SVE_Zn, SVE_Zm_16), OP_SVE_QQQ, 0, 0), - F64MATMUL_SVE_INSN ("uzip1", 0x05a00800, 0xffe0fc00, sve_misc, OP3 (SVE_Zd, SVE_Zn, SVE_Zm_16), OP_SVE_QQQ, 0, 0), - F64MATMUL_SVE_INSN ("uzip2", 0x05a00c00, 0xffe0fc00, sve_misc, OP3 (SVE_Zd, SVE_Zn, SVE_Zm_16), OP_SVE_QQQ, 0, 0), + F64MATMUL_SVE_INSN ("uzp1", 0x05a00800, 0xffe0fc00, sve_misc, OP3 (SVE_Zd, SVE_Zn, SVE_Zm_16), OP_SVE_QQQ, 0, 0), + F64MATMUL_SVE_INSN ("uzp2", 0x05a00c00, 0xffe0fc00, sve_misc, OP3 (SVE_Zd, SVE_Zn, SVE_Zm_16), OP_SVE_QQQ, 0, 0), F64MATMUL_SVE_INSN ("trn1", 0x05a01800, 0xffe0fc00, sve_misc, OP3 (SVE_Zd, SVE_Zn, SVE_Zm_16), OP_SVE_QQQ, 0, 0), F64MATMUL_SVE_INSN ("trn2", 0x05a01c00, 0xffe0fc00, sve_misc, OP3 (SVE_Zd, SVE_Zn, SVE_Zm_16), OP_SVE_QQQ, 0, 0), /* Matrix Multiply advanced SIMD instructions. */ INT8MATMUL_INSN ("smmla", 0x4e80a400, 0xffe0fc00, aarch64_misc, OP3 (Vd, Vn, Vm), QL_MMLA64, 0), INT8MATMUL_INSN ("ummla", 0x6e80a400, 0xffe0fc00, aarch64_misc, OP3 (Vd, Vn, Vm), QL_MMLA64, 0), INT8MATMUL_INSN ("usmmla", 0x4e80ac00, 0xffe0fc00, aarch64_misc, OP3 (Vd, Vn, Vm), QL_MMLA64, 0), - INT8MATMUL_INSN ("usdot", 0x4e809c00, 0xffe0fc00, aarch64_misc, OP3 (Vd, Vn, Vm), QL_V3DOT, F_SIZEQ), - INT8MATMUL_INSN ("usdot", 0x4f80f000, 0xffc0f400, dotproduct, OP3 (Vd, Vn, Em), QL_V2DOT, F_SIZEQ), - INT8MATMUL_INSN ("sudot", 0x4f00f000, 0xffc0f400, dotproduct, OP3 (Vd, Vn, Em), QL_V2DOT, F_SIZEQ), + INT8MATMUL_INSN ("usdot", 0x0e809c00, 0xbfe0fc00, aarch64_misc, OP3 (Vd, Vn, Vm), QL_V3DOT, F_SIZEQ), + INT8MATMUL_INSN ("usdot", 0x0f80f000, 0xbfc0f400, dotproduct, OP3 (Vd, Vn, Em), QL_V2DOT, F_SIZEQ), + INT8MATMUL_INSN ("sudot", 0x0f00f000, 0xbfc0f400, dotproduct, OP3 (Vd, Vn, Em), QL_V2DOT, F_SIZEQ), /* BFloat instructions. */ BFLOAT16_SVE_INSNC ("bfdot", 0x64608000, 0xffe0fc00, sve_misc, OP3 (SVE_Zd, SVE_Zn, SVE_Zm_16), OP_SVE_SHH, 0, C_SCAN_MOVPRFX, 0), BFLOAT16_SVE_INSNC ("bfdot", 0x64604000, 0xffe0fc00, sve_misc, OP3 (SVE_Zd, SVE_Zn, SVE_Zm3_INDEX), OP_SVE_SHH, 0, C_SCAN_MOVPRFX, 0), BFLOAT16_SVE_INSNC ("bfmmla", 0x6460e400, 0xffe0fc00, sve_misc, OP3 (SVE_Zd, SVE_Zn, SVE_Zm_16), OP_SVE_SHH, 0, C_SCAN_MOVPRFX, 0), - BFLOAT16_SVE_INSNC ("bfcvt", 0x658aa000, 0xffffe000, sve_misc, OP3 (SVE_Zd, SVE_Pg3, SVE_Zn), OP_SVE_HMS, 0, C_SCAN_MOVPRFX, 0), - BFLOAT16_SVE_INSNC ("bfcvtnt", 0x648aa000, 0xffffe000, sve_misc, OP3 (SVE_Zd, SVE_Pg3, SVE_Zn), OP_SVE_HMS, 0, C_SCAN_MOVPRFX, 0), + BFLOAT16_SVE_INSNC ("bfcvt", 0x658aa000, 0xffffe000, sve_misc, OP3 (SVE_Zd, SVE_Pg3, SVE_Zn), OP_SVE_HMS, 0, C_SCAN_MOVPRFX | C_MAX_ELEM, 0), + BFLOAT16_SVE_INSNC ("bfcvtnt", 0x648aa000, 0xffffe000, sve_misc, OP3 (SVE_Zd, SVE_Pg3, SVE_Zn), OP_SVE_HMS, 0, 0, 0), BFLOAT16_SVE_INSNC ("bfmlalt", 0x64e08400, 0xffe0fc00, sve_misc, OP3 (SVE_Zd, SVE_Zn, SVE_Zm_16), OP_SVE_SHH, 0, C_SCAN_MOVPRFX, 0), BFLOAT16_SVE_INSNC ("bfmlalb", 0x64e08000, 0xffe0fc00, sve_misc, OP3 (SVE_Zd, SVE_Zn, SVE_Zm_16), OP_SVE_SHH, 0, C_SCAN_MOVPRFX, 0), BFLOAT16_SVE_INSNC ("bfmlalt", 0x64e04400, 0xffe0f400, sve_misc, OP3 (SVE_Zd, SVE_Zn, SVE_Zm3_11_INDEX), OP_SVE_SHH, 0, C_SCAN_MOVPRFX, 0), @@ -5243,6 +5245,8 @@ "the bit number to be tested") \ Y(IMMEDIATE, imm, "EXCEPTION", 0, F(FLD_imm16), \ "a 16-bit unsigned immediate") \ + Y(IMMEDIATE, imm, "UNDEFINED", 0, F(FLD_imm16_2), \ + "a 16-bit unsigned immediate") \ Y(IMMEDIATE, imm, "CCMP_IMM", 0, F(FLD_imm5), \ "a 5-bit unsigned immediate") \ Y(IMMEDIATE, imm, "SIMM5", OPD_F_SEXT, F(FLD_imm5), \ @@ -5320,8 +5324,8 @@ "the ISB option name SY or an optional 4-bit unsigned immediate") \ Y(SYSTEM, prfop, "PRFOP", 0, F(), \ "a prefetch operation specifier") \ - Y(SYSTEM, hint, "BARRIER_PSB", 0, F (), \ - "the PSB option name CSYNC") \ + Y(SYSTEM, none, "BARRIER_PSB", 0, F (), \ + "the PSB/TSB option name CSYNC") \ Y(SYSTEM, hint, "BTI", 0, F (), \ "BTI targets j/c/jc") \ Y(ADDRESS, sve_addr_ri_s4, "SVE_ADDR_RI_S4x16", \ diff -Nru gdb-9.1/opcodes/alpha-dis.c gdb-10.2/opcodes/alpha-dis.c --- gdb-9.1/opcodes/alpha-dis.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/alpha-dis.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* alpha-dis.c -- Disassemble Alpha AXP instructions - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. Contributed by Richard Henderson <rth@tamu.edu>, patterned after the PPC opcode handling written by Ian Lance Taylor. @@ -146,7 +146,7 @@ return 4; -found: + found: (*info->fprintf_func) (info->stream, "%s", opcode->name); if (opcode->operands[0] != 0) (*info->fprintf_func) (info->stream, "\t"); diff -Nru gdb-9.1/opcodes/alpha-opc.c gdb-10.2/opcodes/alpha-opc.c --- gdb-9.1/opcodes/alpha-opc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/alpha-opc.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* alpha-opc.c -- Alpha AXP opcode list - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. Contributed by Richard Henderson <rth@cygnus.com>, patterned after the PPC opcode handling written by Ian Lance Taylor. @@ -332,7 +332,7 @@ /* Macros used to form opcodes. */ /* The main opcode. */ -#define OP(x) (((x) & 0x3F) << 26) +#define OP(x) (((x) & 0x3Fu) << 26) #define OP_MASK 0xFC000000 /* Branch format instructions. */ diff -Nru gdb-9.1/opcodes/arc-dis.c gdb-10.2/opcodes/arc-dis.c --- gdb-9.1/opcodes/arc-dis.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/arc-dis.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Instruction printing code for the ARC. - Copyright (C) 1994-2019 Free Software Foundation, Inc. + Copyright (C) 1994-2020 Free Software Foundation, Inc. Contributed by Claudiu Zissulescu (claziss@synopsys.com) @@ -90,7 +90,7 @@ "r32", "r33", "r34", "r35", "r36", "r37", "r38", "r39", "r40", "r41", "r42", "r43", "r44", "r45", "r46", "r47", "r48", "r49", "r50", "r51", "r52", "r53", "r54", "r55", - "r56", "r57", "ACCL", "ACCH", "lp_count", "rezerved", "LIMM", "pcl" + "r56", "r57", "r58", "r59", "lp_count", "reserved", "LIMM", "pcl" }; static const char * const addrtypenames[ARC_NUM_ADDRTYPES] = @@ -420,7 +420,7 @@ struct arc_operand_iterator * iter) { const struct arc_opcode *opcode = NULL; - bfd_boolean needs_limm; + bfd_boolean needs_limm = FALSE; const extInstruction_t *einsn, *i; unsigned limm = 0; struct arc_disassemble_info *arc_infop = info->private_data; @@ -436,8 +436,9 @@ opcode = arcExtMap_genOpcode (i, isa_mask, &errmsg); if (opcode == NULL) { - (*info->fprintf_func) (info->stream, "\ -An error occured while generating the extension instruction operations"); + (*info->fprintf_func) (info->stream, + _("An error occurred while generating the " + "extension instruction operations")); *opcode_result = NULL; return FALSE; } @@ -452,7 +453,7 @@ opcode = find_format_from_table (info, arc_opcodes, insn, *insn_len, isa_mask, &needs_limm, TRUE); - if (needs_limm && opcode != NULL) + if (opcode != NULL && needs_limm) { bfd_byte buffer[4]; int status; @@ -482,7 +483,7 @@ /* Update private data. */ arc_infop->opcode = opcode; - arc_infop->limm = (needs_limm) ? limm : 0; + arc_infop->limm = limm; arc_infop->limm_p = needs_limm; return TRUE; @@ -1268,11 +1269,19 @@ if (!rname) rname = regnames[value]; (*info->fprintf_func) (info->stream, "%s", rname); + + /* Check if we have a double register to print. */ if (operand->flags & ARC_OPERAND_TRUNCATE) { - rname = arcExtMap_coreRegName (value + 1); - if (!rname) - rname = regnames[value + 1]; + if ((value & 0x01) == 0) + { + rname = arcExtMap_coreRegName (value + 1); + if (!rname) + rname = regnames[value + 1]; + } + else + rname = _("\nWarning: illegal use of double register " + "pair.\n"); (*info->fprintf_func) (info->stream, "%s", rname); } if (value == 63) diff -Nru gdb-9.1/opcodes/arc-dis.h gdb-10.2/opcodes/arc-dis.h --- gdb-9.1/opcodes/arc-dis.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/arc-dis.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Disassembler structures definitions for the ARC. - Copyright (C) 1994-2019 Free Software Foundation, Inc. + Copyright (C) 1994-2020 Free Software Foundation, Inc. Contributed by Claudiu Zissulescu (claziss@synopsys.com) diff -Nru gdb-9.1/opcodes/arc-ext.c gdb-10.2/opcodes/arc-ext.c --- gdb-9.1/opcodes/arc-ext.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/arc-ext.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* ARC target-dependent stuff. Extension structure access functions - Copyright (C) 1995-2019 Free Software Foundation, Inc. + Copyright (C) 1995-2020 Free Software Foundation, Inc. This file is part of libopcodes. @@ -53,7 +53,7 @@ struct ExtAuxRegister { - long address; + unsigned address; char * name; struct ExtAuxRegister * next; }; @@ -191,8 +191,8 @@ char *aux_name = xstrdup ((char *) (p + 6)); newAuxRegister->name = aux_name; - newAuxRegister->address = (p[2] << 24) | (p[3] << 16) - | (p[4] << 8) | p[5]; + newAuxRegister->address = (((unsigned) p[2] << 24) | (p[3] << 16) + | (p[4] << 8) | p[5]); newAuxRegister->next = arc_extension_map.auxRegisters; arc_extension_map.auxRegisters = newAuxRegister; break; @@ -245,17 +245,11 @@ /* Free core registers. */ for (i = 0; i < NUM_EXT_CORE; i++) - { - if (arc_extension_map.coreRegisters[i].name) - free (arc_extension_map.coreRegisters[i].name); - } + free (arc_extension_map.coreRegisters[i].name); /* Free condition codes. */ for (i = 0; i < NUM_EXT_COND; i++) - { - if (arc_extension_map.condCodes[i]) - free (arc_extension_map.condCodes[i]); - } + free (arc_extension_map.condCodes[i]); memset (&arc_extension_map, 0, sizeof (arc_extension_map)); } @@ -406,7 +400,7 @@ /* Get the name of an extension auxiliary register. */ const char * -arcExtMap_auxRegName (long address) +arcExtMap_auxRegName (unsigned address) { /* Walk the list of auxiliary register names and find the name. */ struct ExtAuxRegister *r; @@ -463,7 +457,7 @@ while (r) { - printf ("AUX : %s %ld\n", r->name, r->address); + printf ("AUX : %s %u\n", r->name, r->address); r = r->next; } diff -Nru gdb-9.1/opcodes/arc-ext.h gdb-10.2/opcodes/arc-ext.h --- gdb-9.1/opcodes/arc-ext.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/arc-ext.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* ARC target-dependent stuff. Extension data structures. - Copyright (C) 1995-2019 Free Software Foundation, Inc. + Copyright (C) 1995-2020 Free Software Foundation, Inc. This file is part of libopcodes. @@ -125,7 +125,7 @@ /* Accessor functions. */ extern enum ExtReadWrite arcExtMap_coreReadWrite (int); extern const char * arcExtMap_coreRegName (int); -extern const char * arcExtMap_auxRegName (long); +extern const char * arcExtMap_auxRegName (unsigned); extern const char * arcExtMap_condCodeName (int); extern const extInstruction_t *arcExtMap_insn (int, unsigned long long); extern struct arc_opcode *arcExtMap_genOpcode (const extInstruction_t *, diff -Nru gdb-9.1/opcodes/arc-ext-tbl.h gdb-10.2/opcodes/arc-ext-tbl.h --- gdb-9.1/opcodes/arc-ext-tbl.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/arc-ext-tbl.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* ARC instruction defintions. - Copyright (C) 2016-2019 Free Software Foundation, Inc. + Copyright (C) 2016-2020 Free Software Foundation, Inc. Contributed by Claudiu Zissulescu (claziss@synopsys.com) diff -Nru gdb-9.1/opcodes/arc-fxi.h gdb-10.2/opcodes/arc-fxi.h --- gdb-9.1/opcodes/arc-fxi.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/arc-fxi.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Insert/extract functions for the ARC opcodes. - Copyright (C) 2015-2019 Free Software Foundation, Inc. + Copyright (C) 2015-2020 Free Software Foundation, Inc. Contributed by Claudiu Zissulescu (claziss@synopsys.com) diff -Nru gdb-9.1/opcodes/arc-opc.c gdb-10.2/opcodes/arc-opc.c --- gdb-9.1/opcodes/arc-opc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/arc-opc.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Opcode table for the ARC. - Copyright (C) 1994-2019 Free Software Foundation, Inc. + Copyright (C) 1994-2020 Free Software Foundation, Inc. Contributed by Claudiu Zissulescu (claziss@synopsys.com) @@ -103,6 +103,19 @@ return insn | ((value & 0x3F) << 6); } +static unsigned long long +insert_rbd (unsigned long long insn, + long long value, + const char ** errmsg) +{ + if (value & 0x01) + *errmsg = _("cannot use odd number source register"); + if (value == 60) + *errmsg = _("LP_COUNT register cannot be used as destination register"); + + return insn | ((value & 0x07) << 24) | (((value >> 3) & 0x07) << 12); +} + /* Dummy insert ZERO operand function. */ static unsigned long long @@ -1691,7 +1704,7 @@ { F_CLASS_OPTIONAL, { F_ASFAKE, F_NULL}}, #define C_NE (C_AS + 1) - { F_CLASS_OPTIONAL, { F_NE, F_NULL}}, + { F_CLASS_REQUIRED, { F_NE, F_NULL}}, /* ARC NPS400 Support: See comment near head of file. */ #define C_NPS_CL (C_NE + 1) @@ -1826,11 +1839,16 @@ { 6, 0, 0, ARC_OPERAND_IR | ARC_OPERAND_TRUNCATE, insert_rad, 0 }, #define RCD (RAD_CHK + 1) { 6, 6, 0, ARC_OPERAND_IR | ARC_OPERAND_TRUNCATE, insert_rcd, 0 }, +#define RBD (RCD + 1) + { 6, 6, 0, ARC_OPERAND_IR | ARC_OPERAND_TRUNCATE, insert_rbd, extract_rb }, +#define RBDdup (RBD + 1) + { 6, 12, 0, ARC_OPERAND_IR | ARC_OPERAND_DUPLICATE | ARC_OPERAND_TRUNCATE, + insert_rbd, extract_rb }, /* The plain integer register fields. Used by short instructions. */ -#define RA16 (RCD + 1) -#define RA_S (RCD + 1) +#define RA16 (RBDdup + 1) +#define RA_S (RBDdup + 1) { 4, 0, 0, ARC_OPERAND_IR, insert_ras, extract_ras }, #define RB16 (RA16 + 1) #define RB_S (RA16 + 1) diff -Nru gdb-9.1/opcodes/arc-regs.h gdb-10.2/opcodes/arc-regs.h --- gdb-9.1/opcodes/arc-regs.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/arc-regs.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* ARC Auxiliary register definitions - Copyright (C) 2015-2019 Free Software Foundation, Inc. + Copyright (C) 2015-2020 Free Software Foundation, Inc. Contributed by Claudiu Zissulescu (claziss@synopsys.com) @@ -71,8 +71,7 @@ DEF (0x22, ARC_OPCODE_ARCALL, NONE, control0) DEF (0x23, ARC_OPCODE_ARCALL, NONE, limit0) DEF (0x24, ARC_OPCODE_ARCV1, NONE, pcport) -DEF (0x25, ARC_OPCODE_ARC700, NONE, int_vector_base) -DEF (0x25, ARC_OPCODE_ARCV2, NONE, int_vector_base) +DEF (0x25, ARC_OPCODE_ARCALL, NONE, int_vector_base) DEF (0x26, ARC_OPCODE_ARC600, NONE, aux_vbfdw_mode) DEF (0x27, ARC_OPCODE_ARC600, NONE, aux_vbfdw_bm0) DEF (0x28, ARC_OPCODE_ARC600, NONE, aux_vbfdw_bm1) diff -Nru gdb-9.1/opcodes/arc-tbl.h gdb-10.2/opcodes/arc-tbl.h --- gdb-9.1/opcodes/arc-tbl.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/arc-tbl.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* ARC instruction defintions. - Copyright (C) 1994-2019 Free Software Foundation, Inc. + Copyright (C) 1994-2020 Free Software Foundation, Inc. Contributed by Claudiu Zissulescu (claziss@synopsys.com) @@ -9214,40 +9214,40 @@ { "leave_s", 0x0000C0C0, 0x0000F8E1, ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, LEAVE, CD1, { UIMM7_11_S }, { 0 }}, /* llock<.di> b,c 00100bbb00101111DBBBCCCCCC010000. */ -{ "llock", 0x202F0010, 0xF8FF003F, ARC_OPCODE_ARC700 | ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, MEMORY, NONE, { RB, BRAKET, RC, BRAKETdup }, { C_DI16 }}, +{ "llock", 0x202F0010, 0xF8FF003F, ARC_OPCODE_ARC700 | ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, LLOCK, NONE, { RB, BRAKET, RC, BRAKETdup }, { C_DI16 }}, /* llock<.di> 0,c 0010011000101111D111CCCCCC010000. */ -{ "llock", 0x262F7010, 0xFFFF703F, ARC_OPCODE_ARC700 | ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, MEMORY, NONE, { ZA, BRAKET, RC, BRAKETdup }, { C_DI16 }}, +{ "llock", 0x262F7010, 0xFFFF703F, ARC_OPCODE_ARC700 | ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, LLOCK, NONE, { ZA, BRAKET, RC, BRAKETdup }, { C_DI16 }}, /* llock<.di> b,u6 00100bbb01101111DBBBuuuuuu010000. */ -{ "llock", 0x206F0010, 0xF8FF003F, ARC_OPCODE_ARC700 | ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, MEMORY, NONE, { RB, BRAKET, UIMM6_20, BRAKETdup }, { C_DI16 }}, +{ "llock", 0x206F0010, 0xF8FF003F, ARC_OPCODE_ARC700 | ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, LLOCK, NONE, { RB, BRAKET, UIMM6_20, BRAKETdup }, { C_DI16 }}, /* llock<.di> 0,u6 0010011001101111D111uuuuuu010000. */ -{ "llock", 0x266F7010, 0xFFFF703F, ARC_OPCODE_ARC700 | ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, MEMORY, NONE, { ZA, BRAKET, UIMM6_20, BRAKETdup }, { C_DI16 }}, +{ "llock", 0x266F7010, 0xFFFF703F, ARC_OPCODE_ARC700 | ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, LLOCK, NONE, { ZA, BRAKET, UIMM6_20, BRAKETdup }, { C_DI16 }}, /* llock<.di> b,limm 00100bbb00101111DBBB111110010000. */ -{ "llock", 0x202F0F90, 0xF8FF0FFF, ARC_OPCODE_ARC700 | ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, MEMORY, NONE, { RB, BRAKET, LIMM, BRAKETdup }, { C_DI16 }}, +{ "llock", 0x202F0F90, 0xF8FF0FFF, ARC_OPCODE_ARC700 | ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, LLOCK, NONE, { RB, BRAKET, LIMM, BRAKETdup }, { C_DI16 }}, /* llock<.di> 0,limm 0010011000101111D111111110010000. */ -{ "llock", 0x262F7F90, 0xFFFF7FFF, ARC_OPCODE_ARC700 | ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, MEMORY, NONE, { ZA, BRAKET, LIMM, BRAKETdup }, { C_DI16 }}, +{ "llock", 0x262F7F90, 0xFFFF7FFF, ARC_OPCODE_ARC700 | ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, LLOCK, NONE, { ZA, BRAKET, LIMM, BRAKETdup }, { C_DI16 }}, /* llockd<.di> b,c 00100bbb00101111DBBBCCCCCC010010. */ -{ "llockd", 0x202F0012, 0xF8FF003F, ARC_OPCODE_ARCv2HS, MEMORY, NONE, { RB, BRAKET, RC, BRAKETdup }, { C_DI16 }}, +{ "llockd", 0x202F0012, 0xF8FF003F, ARC_OPCODE_ARCv2HS, LLOCK, NONE, { RB, BRAKET, RC, BRAKETdup }, { C_DI16, C_ZZ_D }}, /* llockd<.di> 0,c 0010011000101111D111CCCCCC010010. */ -{ "llockd", 0x262F7012, 0xFFFF703F, ARC_OPCODE_ARCv2HS, MEMORY, NONE, { ZA, BRAKET, RC, BRAKETdup }, { C_DI16 }}, +{ "llockd", 0x262F7012, 0xFFFF703F, ARC_OPCODE_ARCv2HS, LLOCK, NONE, { ZA, BRAKET, RC, BRAKETdup }, { C_DI16, C_ZZ_D }}, /* llockd<.di> b,u6 00100bbb01101111DBBBuuuuuu010010. */ -{ "llockd", 0x206F0012, 0xF8FF003F, ARC_OPCODE_ARCv2HS, MEMORY, NONE, { RB, BRAKET, UIMM6_20, BRAKETdup }, { C_DI16 }}, +{ "llockd", 0x206F0012, 0xF8FF003F, ARC_OPCODE_ARCv2HS, LLOCK, NONE, { RB, BRAKET, UIMM6_20, BRAKETdup }, { C_DI16, C_ZZ_D }}, /* llockd<.di> 0,u6 0010011001101111D111uuuuuu010010. */ -{ "llockd", 0x266F7012, 0xFFFF703F, ARC_OPCODE_ARCv2HS, MEMORY, NONE, { ZA, BRAKET, UIMM6_20, BRAKETdup }, { C_DI16 }}, +{ "llockd", 0x266F7012, 0xFFFF703F, ARC_OPCODE_ARCv2HS, LLOCK, NONE, { ZA, BRAKET, UIMM6_20, BRAKETdup }, { C_DI16, C_ZZ_D }}, /* llockd<.di> b,limm 00100bbb00101111DBBB111110010010. */ -{ "llockd", 0x202F0F92, 0xF8FF0FFF, ARC_OPCODE_ARCv2HS, MEMORY, NONE, { RB, BRAKET, LIMM, BRAKETdup }, { C_DI16 }}, +{ "llockd", 0x202F0F92, 0xF8FF0FFF, ARC_OPCODE_ARCv2HS, LLOCK, NONE, { RB, BRAKET, LIMM, BRAKETdup }, { C_DI16, C_ZZ_D }}, /* llockd<.di> 0,limm 0010011000101111D111111110010010. */ -{ "llockd", 0x262F7F92, 0xFFFF7FFF, ARC_OPCODE_ARCv2HS, MEMORY, NONE, { ZA, BRAKET, LIMM, BRAKETdup }, { C_DI16 }}, +{ "llockd", 0x262F7F92, 0xFFFF7FFF, ARC_OPCODE_ARCv2HS, LLOCK, NONE, { ZA, BRAKET, LIMM, BRAKETdup }, { C_DI16, C_ZZ_D }}, /* lp s13 00100RRR101010000RRRssssssSSSSSS. */ { "lp", 0x20A80000, 0xF8FF8000, ARC_OPCODE_ARC600 | ARC_OPCODE_ARC700, LOOP, NONE, { SIMM13_A16_20 }, { 0 }}, @@ -15640,31 +15640,31 @@ { "sbcs", 0x2EE77F80, 0xFFFF7FE0, ARC_OPCODE_ARC600 | ARC_OPCODE_ARC700 | ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, ARITH, NONE, { ZA, LIMM, LIMMdup }, { C_F, C_CC }}, /* scond<.di> b,c 00100bbb00101111DBBBCCCCCC010001. */ -{ "scond", 0x202F0011, 0xF8FF003F, ARC_OPCODE_ARC700 | ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, MEMORY, NONE, { RB, BRAKET, RC, BRAKETdup }, { C_DI16 }}, +{ "scond", 0x202F0011, 0xF8FF003F, ARC_OPCODE_ARC700 | ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, SCOND, NONE, { RB, BRAKET, RC, BRAKETdup }, { C_DI16 }}, /* scond<.di> b,u6 00100bbb01101111DBBBuuuuuu010001. */ -{ "scond", 0x206F0011, 0xF8FF003F, ARC_OPCODE_ARC700 | ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, MEMORY, NONE, { RB, BRAKET, UIMM6_20, BRAKETdup }, { C_DI16 }}, +{ "scond", 0x206F0011, 0xF8FF003F, ARC_OPCODE_ARC700 | ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, SCOND, NONE, { RB, BRAKET, UIMM6_20, BRAKETdup }, { C_DI16 }}, /* scond<.di> b,limm 00100bbb00101111DBBB111110010001. */ -{ "scond", 0x202F0F91, 0xF8FF0FFF, ARC_OPCODE_ARC700 | ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, MEMORY, NONE, { RB, BRAKET, LIMM, BRAKETdup }, { C_DI16 }}, +{ "scond", 0x202F0F91, 0xF8FF0FFF, ARC_OPCODE_ARC700 | ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, SCOND, NONE, { RB, BRAKET, LIMM, BRAKETdup }, { C_DI16 }}, /* scond<.di> limm,c 0010011000101111D111CCCCCC010001. */ -{ "scond", 0x262F7011, 0xFFFF703F, ARC_OPCODE_ARC700 | ARC_OPCODE_ARCv2EM, MEMORY, NONE, { LIMM, BRAKET, RC, BRAKETdup }, { C_DI16 }}, +{ "scond", 0x262F7011, 0xFFFF703F, ARC_OPCODE_ARC700 | ARC_OPCODE_ARCv2EM, SCOND, NONE, { LIMM, BRAKET, RC, BRAKETdup }, { C_DI16 }}, /* scond<.di> limm,u6 0010011001101111D111uuuuuu010001. */ -{ "scond", 0x266F7011, 0xFFFF703F, ARC_OPCODE_ARC700 | ARC_OPCODE_ARCv2EM, MEMORY, NONE, { LIMM, BRAKET, UIMM6_20, BRAKETdup }, { C_DI16 }}, +{ "scond", 0x266F7011, 0xFFFF703F, ARC_OPCODE_ARC700 | ARC_OPCODE_ARCv2EM, SCOND, NONE, { LIMM, BRAKET, UIMM6_20, BRAKETdup }, { C_DI16 }}, /* scond<.di> limm,limm 0010011000101111D111111110010001. */ -{ "scond", 0x262F7F91, 0xFFFF7FFF, ARC_OPCODE_ARC700 | ARC_OPCODE_ARCv2EM, MEMORY, NONE, { LIMM, BRAKET, LIMMdup, BRAKETdup }, { C_DI16 }}, +{ "scond", 0x262F7F91, 0xFFFF7FFF, ARC_OPCODE_ARC700 | ARC_OPCODE_ARCv2EM, SCOND, NONE, { LIMM, BRAKET, LIMMdup, BRAKETdup }, { C_DI16 }}, /* scondd<.di> b,c 00100bbb00101111DBBBCCCCCC010011. */ -{ "scondd", 0x202F0013, 0xF8FF003F, ARC_OPCODE_ARCv2HS, MEMORY, NONE, { RB, BRAKET, RC, BRAKETdup }, { C_DI16 }}, +{ "scondd", 0x202F0013, 0xF8FF003F, ARC_OPCODE_ARCv2HS, SCOND, NONE, { RB, BRAKET, RC, BRAKETdup }, { C_DI16, C_ZZ_D }}, /* scondd<.di> b,u6 00100bbb01101111DBBBuuuuuu010011. */ -{ "scondd", 0x206F0013, 0xF8FF003F, ARC_OPCODE_ARCv2HS, MEMORY, NONE, { RB, BRAKET, UIMM6_20, BRAKETdup }, { C_DI16 }}, +{ "scondd", 0x206F0013, 0xF8FF003F, ARC_OPCODE_ARCv2HS, SCOND, NONE, { RB, BRAKET, UIMM6_20, BRAKETdup }, { C_DI16, C_ZZ_D }}, /* scondd<.di> b,limm 00100bbb00101111DBBB111110010011. */ -{ "scondd", 0x202F0F93, 0xF8FF0FFF, ARC_OPCODE_ARCv2HS, MEMORY, NONE, { RB, BRAKET, LIMM, BRAKETdup }, { C_DI16 }}, +{ "scondd", 0x202F0F93, 0xF8FF0FFF, ARC_OPCODE_ARCv2HS, SCOND, NONE, { RB, BRAKET, LIMM, BRAKETdup }, { C_DI16, C_ZZ_D }}, /* setacc a,b,c 00101bbb000011011BBBCCCCCCAAAAAA. */ { "setacc", 0x280D8000, 0xF8FF8000, ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, DSP, NONE, { RA_CHK, RB, RC }, { 0 }}, @@ -17131,46 +17131,46 @@ { "vabss2h", 0x2E2F7FA9, 0xFFFFFFFF, ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, DSP, NONE, { ZA, LIMM }, { 0 }}, /* vadd2 a,b,c 00101bbb001111000BBBCCCCCCAAAAAA. */ -{ "vadd2", 0x283C0000, 0xF8FF8000, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { RA_CHK, RB, RC }, { 0 }}, +{ "vadd2", 0x283C0000, 0xF8FF8000, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { RAD, RBD, RCD }, { 0 }}, /* vadd2 0,b,c 00101bbb001111000BBBCCCCCC111110. */ -{ "vadd2", 0x283C003E, 0xF8FF803F, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { ZA, RB, RC }, { 0 }}, +{ "vadd2", 0x283C003E, 0xF8FF803F, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { ZA, RBD, RCD }, { 0 }}, /* vadd2<.cc> b,b,c 00101bbb111111000BBBCCCCCC0QQQQQ. */ -{ "vadd2", 0x28FC0000, 0xF8FF8020, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { RB_CHK, RBdup, RC }, { C_CC }}, +{ "vadd2", 0x28FC0000, 0xF8FF8020, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { RBD, RBDdup, RC }, { C_CC }}, /* vadd2 a,b,u6 00101bbb011111000BBBuuuuuuAAAAAA. */ -{ "vadd2", 0x287C0000, 0xF8FF8000, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { RA_CHK, RB, UIMM6_20 }, { 0 }}, +{ "vadd2", 0x287C0000, 0xF8FF8000, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { RAD, RBD, UIMM6_20 }, { 0 }}, /* vadd2 0,b,u6 00101bbb011111000BBBuuuuuu111110. */ -{ "vadd2", 0x287C003E, 0xF8FF803F, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { ZA, RB, UIMM6_20 }, { 0 }}, +{ "vadd2", 0x287C003E, 0xF8FF803F, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { ZA, RBD, UIMM6_20 }, { 0 }}, /* vadd2<.cc> b,b,u6 00101bbb111111000BBBuuuuuu1QQQQQ. */ -{ "vadd2", 0x28FC0020, 0xF8FF8020, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { RB_CHK, RBdup, UIMM6_20 }, { C_CC }}, +{ "vadd2", 0x28FC0020, 0xF8FF8020, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { RBD, RBDdup, UIMM6_20 }, { C_CC }}, /* vadd2 b,b,s12 00101bbb101111000BBBssssssSSSSSS. */ -{ "vadd2", 0x28BC0000, 0xF8FF8000, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { RB_CHK, RBdup, SIMM12_20 }, { 0 }}, +{ "vadd2", 0x28BC0000, 0xF8FF8000, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { RBD, RBDdup, SIMM12_20 }, { 0 }}, /* vadd2 a,limm,c 00101110001111000111CCCCCCAAAAAA. */ -{ "vadd2", 0x2E3C7000, 0xFFFFF000, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { RA_CHK, LIMM, RC }, { 0 }}, +{ "vadd2", 0x2E3C7000, 0xFFFFF000, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { RAD, LIMM, RCD }, { 0 }}, /* vadd2 a,b,limm 00101bbb001111000BBB111110AAAAAA. */ -{ "vadd2", 0x283C0F80, 0xF8FF8FC0, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { RA_CHK, RB, LIMM }, { 0 }}, +{ "vadd2", 0x283C0F80, 0xF8FF8FC0, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { RAD, RBD, LIMM }, { 0 }}, /* vadd2 0,limm,c 00101110001111000111CCCCCC111110. */ -{ "vadd2", 0x2E3C703E, 0xFFFFF03F, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { ZA, LIMM, RC }, { 0 }}, +{ "vadd2", 0x2E3C703E, 0xFFFFF03F, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { ZA, LIMM, RCD }, { 0 }}, /* vadd2 0,b,limm 00101bbb001111000BBB111110111110. */ -{ "vadd2", 0x283C0FBE, 0xF8FF8FFF, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { ZA, RB, LIMM }, { 0 }}, +{ "vadd2", 0x283C0FBE, 0xF8FF8FFF, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { ZA, RBD, LIMM }, { 0 }}, /* vadd2<.cc> b,b,limm 00101bbb111111000BBB1111100QQQQQ. */ -{ "vadd2", 0x28FC0F80, 0xF8FF8FE0, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { RB_CHK, RBdup, LIMM }, { C_CC }}, +{ "vadd2", 0x28FC0F80, 0xF8FF8FE0, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { RBD, RBDdup, LIMM }, { C_CC }}, /* vadd2<.cc> 0,limm,c 00101110111111000111CCCCCC0QQQQQ. */ -{ "vadd2", 0x2EFC7000, 0xFFFFF020, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { ZA, LIMM, RC }, { C_CC }}, +{ "vadd2", 0x2EFC7000, 0xFFFFF020, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { ZA, LIMM, RCD }, { C_CC }}, /* vadd2 a,limm,u6 00101110011111000111uuuuuuAAAAAA. */ -{ "vadd2", 0x2E7C7000, 0xFFFFF000, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { RA_CHK, LIMM, UIMM6_20 }, { 0 }}, +{ "vadd2", 0x2E7C7000, 0xFFFFF000, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { RAD, LIMM, UIMM6_20 }, { 0 }}, /* vadd2 0,limm,u6 00101110011111000111uuuuuu111110. */ { "vadd2", 0x2E7C703E, 0xFFFFF03F, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { ZA, LIMM, UIMM6_20 }, { 0 }}, @@ -17182,7 +17182,7 @@ { "vadd2", 0x2EBC7000, 0xFFFFF000, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { ZA, LIMM, SIMM12_20 }, { 0 }}, /* vadd2 a,limm,limm 00101110001111000111111110AAAAAA. */ -{ "vadd2", 0x2E3C7F80, 0xFFFFFFC0, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { RA_CHK, LIMM, LIMMdup }, { 0 }}, +{ "vadd2", 0x2E3C7F80, 0xFFFFFFC0, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { RAD, LIMM, LIMMdup }, { 0 }}, /* vadd2 0,limm,limm 00101110001111000111111110111110. */ { "vadd2", 0x2E3C7FBE, 0xFFFFFFFF, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { ZA, LIMM, LIMMdup }, { 0 }}, @@ -17311,46 +17311,46 @@ { "vadd4b", 0x2EE47F80, 0xFFFFFFE0, ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, DSP, NONE, { ZA, LIMM, LIMMdup }, { C_CC }}, /* vadd4h a,b,c 00101bbb001110000BBBCCCCCCAAAAAA. */ -{ "vadd4h", 0x28380000, 0xF8FF8000, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { RA_CHK, RB, RC }, { 0 }}, +{ "vadd4h", 0x28380000, 0xF8FF8000, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { RAD, RBD, RCD }, { 0 }}, /* vadd4h 0,b,c 00101bbb001110000BBBCCCCCC111110. */ -{ "vadd4h", 0x2838003E, 0xF8FF803F, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { ZA, RB, RC }, { 0 }}, +{ "vadd4h", 0x2838003E, 0xF8FF803F, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { ZA, RBD, RCD }, { 0 }}, /* vadd4h<.cc> b,b,c 00101bbb111110000BBBCCCCCC0QQQQQ. */ -{ "vadd4h", 0x28F80000, 0xF8FF8020, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { RB_CHK, RBdup, RC }, { C_CC }}, +{ "vadd4h", 0x28F80000, 0xF8FF8020, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { RBD, RBDdup, RCD }, { C_CC }}, /* vadd4h a,b,u6 00101bbb011110000BBBuuuuuuAAAAAA. */ -{ "vadd4h", 0x28780000, 0xF8FF8000, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { RA_CHK, RB, UIMM6_20 }, { 0 }}, +{ "vadd4h", 0x28780000, 0xF8FF8000, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { RAD, RBD, UIMM6_20 }, { 0 }}, /* vadd4h 0,b,u6 00101bbb011110000BBBuuuuuu111110. */ -{ "vadd4h", 0x2878003E, 0xF8FF803F, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { ZA, RB, UIMM6_20 }, { 0 }}, +{ "vadd4h", 0x2878003E, 0xF8FF803F, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { ZA, RBD, UIMM6_20 }, { 0 }}, /* vadd4h<.cc> b,b,u6 00101bbb111110000BBBuuuuuu1QQQQQ. */ -{ "vadd4h", 0x28F80020, 0xF8FF8020, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { RB_CHK, RBdup, UIMM6_20 }, { C_CC }}, +{ "vadd4h", 0x28F80020, 0xF8FF8020, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { RBD, RBDdup, UIMM6_20 }, { C_CC }}, /* vadd4h b,b,s12 00101bbb101110000BBBssssssSSSSSS. */ -{ "vadd4h", 0x28B80000, 0xF8FF8000, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { RB_CHK, RBdup, SIMM12_20 }, { 0 }}, +{ "vadd4h", 0x28B80000, 0xF8FF8000, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { RBD, RBDdup, SIMM12_20 }, { 0 }}, /* vadd4h a,limm,c 00101110001110000111CCCCCCAAAAAA. */ -{ "vadd4h", 0x2E387000, 0xFFFFF000, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { RA_CHK, LIMM, RC }, { 0 }}, +{ "vadd4h", 0x2E387000, 0xFFFFF000, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { RAD, LIMM, RCD }, { 0 }}, /* vadd4h a,b,limm 00101bbb001110000BBB111110AAAAAA. */ -{ "vadd4h", 0x28380F80, 0xF8FF8FC0, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { RA_CHK, RB, LIMM }, { 0 }}, +{ "vadd4h", 0x28380F80, 0xF8FF8FC0, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { RAD, RBD, LIMM }, { 0 }}, /* vadd4h 0,limm,c 00101110001110000111CCCCCC111110. */ -{ "vadd4h", 0x2E38703E, 0xFFFFF03F, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { ZA, LIMM, RC }, { 0 }}, +{ "vadd4h", 0x2E38703E, 0xFFFFF03F, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { ZA, LIMM, RCD }, { 0 }}, /* vadd4h 0,b,limm 00101bbb001110000BBB111110111110. */ -{ "vadd4h", 0x28380FBE, 0xF8FF8FFF, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { ZA, RB, LIMM }, { 0 }}, +{ "vadd4h", 0x28380FBE, 0xF8FF8FFF, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { ZA, RBD, LIMM }, { 0 }}, /* vadd4h<.cc> b,b,limm 00101bbb111110000BBB1111100QQQQQ. */ -{ "vadd4h", 0x28F80F80, 0xF8FF8FE0, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { RB_CHK, RBdup, LIMM }, { C_CC }}, +{ "vadd4h", 0x28F80F80, 0xF8FF8FE0, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { RBD, RBDdup, LIMM }, { C_CC }}, /* vadd4h<.cc> 0,limm,c 00101110111110000111CCCCCC0QQQQQ. */ -{ "vadd4h", 0x2EF87000, 0xFFFFF020, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { ZA, LIMM, RC }, { C_CC }}, +{ "vadd4h", 0x2EF87000, 0xFFFFF020, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { ZA, LIMM, RCD }, { C_CC }}, /* vadd4h a,limm,u6 00101110011110000111uuuuuuAAAAAA. */ -{ "vadd4h", 0x2E787000, 0xFFFFF000, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { RA_CHK, LIMM, UIMM6_20 }, { 0 }}, +{ "vadd4h", 0x2E787000, 0xFFFFF000, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { RAD, LIMM, UIMM6_20 }, { 0 }}, /* vadd4h 0,limm,u6 00101110011110000111uuuuuu111110. */ { "vadd4h", 0x2E78703E, 0xFFFFF03F, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { ZA, LIMM, UIMM6_20 }, { 0 }}, @@ -17362,7 +17362,7 @@ { "vadd4h", 0x2EB87000, 0xFFFFF000, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { ZA, LIMM, SIMM12_20 }, { 0 }}, /* vadd4h a,limm,limm 00101110001110000111111110AAAAAA. */ -{ "vadd4h", 0x2E387F80, 0xFFFFFFC0, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { RA_CHK, LIMM, LIMMdup }, { 0 }}, +{ "vadd4h", 0x2E387F80, 0xFFFFFFC0, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { RAD, LIMM, LIMMdup }, { 0 }}, /* vadd4h 0,limm,limm 00101110001110000111111110111110. */ { "vadd4h", 0x2E387FBE, 0xFFFFFFFF, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { ZA, LIMM, LIMMdup }, { 0 }}, @@ -18421,31 +18421,31 @@ { "vlsr2h", 0x2EE37F80, 0xFFFFFFE0, ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, DSP, NONE, { ZA, LIMM, LIMMdup }, { C_CC }}, /* vmac2h a,b,c 00101bbb000111100BBBCCCCCCAAAAAA. */ -{ "vmac2h", 0x281E0000, 0xF8FF8000, ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, DSP, NONE, { RA_CHK, RB, RC }, { 0 }}, +{ "vmac2h", 0x281E0000, 0xF8FF8000, ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, DSP, NONE, { RAD, RB, RC }, { 0 }}, /* vmac2h 0,b,c 00101bbb000111100BBBCCCCCC111110. */ { "vmac2h", 0x281E003E, 0xF8FF803F, ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, DSP, NONE, { ZA, RB, RC }, { 0 }}, /* vmac2h<.cc> b,b,c 00101bbb110111100BBBCCCCCC0QQQQQ. */ -{ "vmac2h", 0x28DE0000, 0xF8FF8020, ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, DSP, NONE, { RB_CHK, RBdup, RC }, { C_CC }}, +{ "vmac2h", 0x28DE0000, 0xF8FF8020, ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, DSP, NONE, { RBD, RBdup, RC }, { C_CC }}, /* vmac2h a,b,u6 00101bbb010111100BBBuuuuuuAAAAAA. */ -{ "vmac2h", 0x285E0000, 0xF8FF8000, ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, DSP, NONE, { RA_CHK, RB, UIMM6_20 }, { 0 }}, +{ "vmac2h", 0x285E0000, 0xF8FF8000, ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, DSP, NONE, { RAD, RB, UIMM6_20 }, { 0 }}, /* vmac2h 0,b,u6 00101bbb010111100BBBuuuuuu111110. */ { "vmac2h", 0x285E003E, 0xF8FF803F, ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, DSP, NONE, { ZA, RB, UIMM6_20 }, { 0 }}, /* vmac2h<.cc> b,b,u6 00101bbb110111100BBBuuuuuu1QQQQQ. */ -{ "vmac2h", 0x28DE0020, 0xF8FF8020, ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, DSP, NONE, { RB_CHK, RBdup, UIMM6_20 }, { C_CC }}, +{ "vmac2h", 0x28DE0020, 0xF8FF8020, ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, DSP, NONE, { RBD, RBdup, UIMM6_20 }, { C_CC }}, /* vmac2h b,b,s12 00101bbb100111100BBBssssssSSSSSS. */ -{ "vmac2h", 0x289E0000, 0xF8FF8000, ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, DSP, NONE, { RB_CHK, RBdup, SIMM12_20 }, { 0 }}, +{ "vmac2h", 0x289E0000, 0xF8FF8000, ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, DSP, NONE, { RBD, RBdup, SIMM12_20 }, { 0 }}, /* vmac2h a,limm,c 00101110000111100111CCCCCCAAAAAA. */ -{ "vmac2h", 0x2E1E7000, 0xFFFFF000, ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, DSP, NONE, { RA_CHK, LIMM, RC }, { 0 }}, +{ "vmac2h", 0x2E1E7000, 0xFFFFF000, ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, DSP, NONE, { RAD, LIMM, RC }, { 0 }}, /* vmac2h a,b,limm 00101bbb000111100BBB111110AAAAAA. */ -{ "vmac2h", 0x281E0F80, 0xF8FF8FC0, ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, DSP, NONE, { RA_CHK, RB, LIMM }, { 0 }}, +{ "vmac2h", 0x281E0F80, 0xF8FF8FC0, ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, DSP, NONE, { RAD, RB, LIMM }, { 0 }}, /* vmac2h 0,limm,c 00101110000111100111CCCCCC111110. */ { "vmac2h", 0x2E1E703E, 0xFFFFF03F, ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, DSP, NONE, { ZA, LIMM, RC }, { 0 }}, @@ -18454,13 +18454,13 @@ { "vmac2h", 0x281E0FBE, 0xF8FF8FFF, ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, DSP, NONE, { ZA, RB, LIMM }, { 0 }}, /* vmac2h<.cc> b,b,limm 00101bbb110111100BBB1111100QQQQQ. */ -{ "vmac2h", 0x28DE0F80, 0xF8FF8FE0, ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, DSP, NONE, { RB_CHK, RBdup, LIMM }, { C_CC }}, +{ "vmac2h", 0x28DE0F80, 0xF8FF8FE0, ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, DSP, NONE, { RBD, RBdup, LIMM }, { C_CC }}, /* vmac2h<.cc> 0,limm,c 00101110110111100111CCCCCC0QQQQQ. */ { "vmac2h", 0x2EDE7000, 0xFFFFF020, ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, DSP, NONE, { ZA, LIMM, RC }, { C_CC }}, /* vmac2h a,limm,u6 00101110010111100111uuuuuuAAAAAA. */ -{ "vmac2h", 0x2E5E7000, 0xFFFFF000, ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, DSP, NONE, { RA_CHK, LIMM, UIMM6_20 }, { 0 }}, +{ "vmac2h", 0x2E5E7000, 0xFFFFF000, ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, DSP, NONE, { RAD, LIMM, UIMM6_20 }, { 0 }}, /* vmac2h 0,limm,u6 00101110010111100111uuuuuu111110. */ { "vmac2h", 0x2E5E703E, 0xFFFFF03F, ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, DSP, NONE, { ZA, LIMM, UIMM6_20 }, { 0 }}, @@ -18472,7 +18472,7 @@ { "vmac2h", 0x2E9E7000, 0xFFFFF000, ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, DSP, NONE, { ZA, LIMM, SIMM12_20 }, { 0 }}, /* vmac2h a,limm,limm 00101110000111100111111110AAAAAA. */ -{ "vmac2h", 0x2E1E7F80, 0xFFFFFFC0, ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, DSP, NONE, { RA_CHK, LIMM, LIMMdup }, { 0 }}, +{ "vmac2h", 0x2E1E7F80, 0xFFFFFFC0, ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, DSP, NONE, { RAD, LIMM, LIMMdup }, { 0 }}, /* vmac2h 0,limm,limm 00101110000111100111111110111110. */ { "vmac2h", 0x2E1E7FBE, 0xFFFFFFFF, ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, DSP, NONE, { ZA, LIMM, LIMMdup }, { 0 }}, @@ -18841,52 +18841,52 @@ { "vmin2h", 0x2EE5FF80, 0xFFFFFFE0, ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, DSP, NONE, { ZA, LIMM, LIMMdup }, { C_CC }}, /* vmpy2h a,b,c 00101bbb000111000BBBCCCCCCAAAAAA. */ -{ "vmpy2h", 0x281C0000, 0xF8FF8000, ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, DSP, NONE, { RA_CHK, RB, RC }, { 0 }}, +{ "vmpy2h", 0x281C0000, 0xF8FF8000, ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, DSP, NONE, { RAD, RB, RC }, { 0 }}, /* vmpy2h 0,b,c 00101bbb000111000BBBCCCCCC111110. */ { "vmpy2h", 0x281C003E, 0xF8FF803F, ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, DSP, NONE, { ZA, RB, RC }, { 0 }}, /* vmpy2h<.cc> b,b,c 00101bbb110111000BBBCCCCCC0QQQQQ. */ -{ "vmpy2h", 0x28DC0000, 0xF8FF8020, ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, DSP, NONE, { RB_CHK, RBdup, RC }, { C_CC }}, +{ "vmpy2h", 0x28DC0000, 0xF8FF8020, ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, DSP, NONE, { RBD, RBdup, RC }, { C_CC }}, /* vmpy2h a,b,c 00101bbb000111000BBBCCCCCCAAAAAA. */ -{ "vmpy2h", 0x281C0000, 0xF8FF8000, ARC_OPCODE_ARCv2HS, MPY, MPY8E, { RA_CHK, RB, RC }, { 0 }}, +{ "vmpy2h", 0x281C0000, 0xF8FF8000, ARC_OPCODE_ARCv2HS, MPY, MPY8E, { RAD, RB, RC }, { 0 }}, /* vmpy2h 0,b,c 00101bbb000111000BBBCCCCCC111110. */ { "vmpy2h", 0x281C003E, 0xF8FF803F, ARC_OPCODE_ARCv2HS, MPY, MPY8E, { ZA, RB, RC }, { 0 }}, /* vmpy2h<.cc> b,b,c 00101bbb110111000BBBCCCCCC0QQQQQ. */ -{ "vmpy2h", 0x28DC0000, 0xF8FF8020, ARC_OPCODE_ARCv2HS, MPY, MPY8E, { RB_CHK, RBdup, RC }, { C_CC }}, +{ "vmpy2h", 0x28DC0000, 0xF8FF8020, ARC_OPCODE_ARCv2HS, MPY, MPY8E, { RBD, RBdup, RC }, { C_CC }}, /* vmpy2h a,b,u6 00101bbb010111000BBBuuuuuuAAAAAA. */ -{ "vmpy2h", 0x285C0000, 0xF8FF8000, ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, DSP, NONE, { RA_CHK, RB, UIMM6_20 }, { 0 }}, +{ "vmpy2h", 0x285C0000, 0xF8FF8000, ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, DSP, NONE, { RAD, RB, UIMM6_20 }, { 0 }}, /* vmpy2h 0,b,u6 00101bbb010111000BBBuuuuuu111110. */ { "vmpy2h", 0x285C003E, 0xF8FF803F, ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, DSP, NONE, { ZA, RB, UIMM6_20 }, { 0 }}, /* vmpy2h<.cc> b,b,u6 00101bbb110111000BBBuuuuuu1QQQQQ. */ -{ "vmpy2h", 0x28DC0020, 0xF8FF8020, ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, DSP, NONE, { RB_CHK, RBdup, UIMM6_20 }, { C_CC }}, +{ "vmpy2h", 0x28DC0020, 0xF8FF8020, ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, DSP, NONE, { RBD, RBdup, UIMM6_20 }, { C_CC }}, /* vmpy2h a,b,u6 00101bbb010111000BBBuuuuuuAAAAAA. */ -{ "vmpy2h", 0x285C0000, 0xF8FF8000, ARC_OPCODE_ARCv2HS, MPY, MPY8E, { RA_CHK, RB, UIMM6_20 }, { 0 }}, +{ "vmpy2h", 0x285C0000, 0xF8FF8000, ARC_OPCODE_ARCv2HS, MPY, MPY8E, { RAD, RB, UIMM6_20 }, { 0 }}, /* vmpy2h 0,b,u6 00101bbb010111000BBBuuuuuu111110. */ { "vmpy2h", 0x285C003E, 0xF8FF803F, ARC_OPCODE_ARCv2HS, MPY, MPY8E, { ZA, RB, UIMM6_20 }, { 0 }}, /* vmpy2h<.cc> b,b,u6 00101bbb110111000BBBuuuuuu1QQQQQ. */ -{ "vmpy2h", 0x28DC0020, 0xF8FF8020, ARC_OPCODE_ARCv2HS, MPY, MPY8E, { RB_CHK, RBdup, UIMM6_20 }, { C_CC }}, +{ "vmpy2h", 0x28DC0020, 0xF8FF8020, ARC_OPCODE_ARCv2HS, MPY, MPY8E, { RBD, RBdup, UIMM6_20 }, { C_CC }}, /* vmpy2h b,b,s12 00101bbb100111000BBBssssssSSSSSS. */ -{ "vmpy2h", 0x289C0000, 0xF8FF8000, ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, DSP, NONE, { RB_CHK, RBdup, SIMM12_20 }, { 0 }}, +{ "vmpy2h", 0x289C0000, 0xF8FF8000, ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, DSP, NONE, { RBD, RBdup, SIMM12_20 }, { 0 }}, /* vmpy2h b,b,s12 00101bbb100111000BBBssssssSSSSSS. */ -{ "vmpy2h", 0x289C0000, 0xF8FF8000, ARC_OPCODE_ARCv2HS, MPY, MPY8E, { RB_CHK, RBdup, SIMM12_20 }, { 0 }}, +{ "vmpy2h", 0x289C0000, 0xF8FF8000, ARC_OPCODE_ARCv2HS, MPY, MPY8E, { RBD, RBdup, SIMM12_20 }, { 0 }}, /* vmpy2h a,limm,c 00101110000111000111CCCCCCAAAAAA. */ -{ "vmpy2h", 0x2E1C7000, 0xFFFFF000, ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, DSP, NONE, { RA_CHK, LIMM, RC }, { 0 }}, +{ "vmpy2h", 0x2E1C7000, 0xFFFFF000, ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, DSP, NONE, { RAD, LIMM, RC }, { 0 }}, /* vmpy2h a,b,limm 00101bbb000111000BBB111110AAAAAA. */ -{ "vmpy2h", 0x281C0F80, 0xF8FF8FC0, ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, DSP, NONE, { RA_CHK, RB, LIMM }, { 0 }}, +{ "vmpy2h", 0x281C0F80, 0xF8FF8FC0, ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, DSP, NONE, { RAD, RB, LIMM }, { 0 }}, /* vmpy2h 0,limm,c 00101110000111000111CCCCCC111110. */ { "vmpy2h", 0x2E1C703E, 0xFFFFF03F, ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, DSP, NONE, { ZA, LIMM, RC }, { 0 }}, @@ -18895,16 +18895,16 @@ { "vmpy2h", 0x281C0FBE, 0xF8FF8FFF, ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, DSP, NONE, { ZA, RB, LIMM }, { 0 }}, /* vmpy2h<.cc> b,b,limm 00101bbb110111000BBB1111100QQQQQ. */ -{ "vmpy2h", 0x28DC0F80, 0xF8FF8FE0, ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, DSP, NONE, { RB_CHK, RBdup, LIMM }, { C_CC }}, +{ "vmpy2h", 0x28DC0F80, 0xF8FF8FE0, ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, DSP, NONE, { RBD, RBdup, LIMM }, { C_CC }}, /* vmpy2h<.cc> 0,limm,c 00101110110111000111CCCCCC0QQQQQ. */ { "vmpy2h", 0x2EDC7000, 0xFFFFF020, ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, DSP, NONE, { ZA, LIMM, RC }, { C_CC }}, /* vmpy2h a,limm,c 00101110000111000111CCCCCCAAAAAA. */ -{ "vmpy2h", 0x2E1C7000, 0xFFFFF000, ARC_OPCODE_ARCv2HS, MPY, MPY8E, { RA_CHK, LIMM, RC }, { 0 }}, +{ "vmpy2h", 0x2E1C7000, 0xFFFFF000, ARC_OPCODE_ARCv2HS, MPY, MPY8E, { RAD, LIMM, RC }, { 0 }}, /* vmpy2h a,b,limm 00101bbb000111000BBB111110AAAAAA. */ -{ "vmpy2h", 0x281C0F80, 0xF8FF8FC0, ARC_OPCODE_ARCv2HS, MPY, MPY8E, { RA_CHK, RB, LIMM }, { 0 }}, +{ "vmpy2h", 0x281C0F80, 0xF8FF8FC0, ARC_OPCODE_ARCv2HS, MPY, MPY8E, { RAD, RB, LIMM }, { 0 }}, /* vmpy2h 0,limm,c 00101110000111000111CCCCCC111110. */ { "vmpy2h", 0x2E1C703E, 0xFFFFF03F, ARC_OPCODE_ARCv2HS, MPY, MPY8E, { ZA, LIMM, RC }, { 0 }}, @@ -18913,13 +18913,13 @@ { "vmpy2h", 0x281C0FBE, 0xF8FF8FFF, ARC_OPCODE_ARCv2HS, MPY, MPY8E, { ZA, RB, LIMM }, { 0 }}, /* vmpy2h<.cc> b,b,limm 00101bbb110111000BBB1111100QQQQQ. */ -{ "vmpy2h", 0x28DC0F80, 0xF8FF8FE0, ARC_OPCODE_ARCv2HS, MPY, MPY8E, { RB_CHK, RBdup, LIMM }, { C_CC }}, +{ "vmpy2h", 0x28DC0F80, 0xF8FF8FE0, ARC_OPCODE_ARCv2HS, MPY, MPY8E, { RBD, RBdup, LIMM }, { C_CC }}, /* vmpy2h<.cc> 0,limm,c 00101110110111000111CCCCCC0QQQQQ. */ { "vmpy2h", 0x2EDC7000, 0xFFFFF020, ARC_OPCODE_ARCv2HS, MPY, MPY8E, { ZA, LIMM, RC }, { C_CC }}, /* vmpy2h a,limm,u6 00101110010111000111uuuuuuAAAAAA. */ -{ "vmpy2h", 0x2E5C7000, 0xFFFFF000, ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, DSP, NONE, { RA_CHK, LIMM, UIMM6_20 }, { 0 }}, +{ "vmpy2h", 0x2E5C7000, 0xFFFFF000, ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, DSP, NONE, { RAD, LIMM, UIMM6_20 }, { 0 }}, /* vmpy2h 0,limm,u6 00101110010111000111uuuuuu111110. */ { "vmpy2h", 0x2E5C703E, 0xFFFFF03F, ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, DSP, NONE, { ZA, LIMM, UIMM6_20 }, { 0 }}, @@ -18928,7 +18928,7 @@ { "vmpy2h", 0x2EDC7020, 0xFFFFF020, ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, DSP, NONE, { ZA, LIMM, UIMM6_20 }, { C_CC }}, /* vmpy2h a,limm,u6 00101110010111000111uuuuuuAAAAAA. */ -{ "vmpy2h", 0x2E5C7000, 0xFFFFF000, ARC_OPCODE_ARCv2HS, MPY, MPY8E, { RA_CHK, LIMM, UIMM6_20 }, { 0 }}, +{ "vmpy2h", 0x2E5C7000, 0xFFFFF000, ARC_OPCODE_ARCv2HS, MPY, MPY8E, { RAD, LIMM, UIMM6_20 }, { 0 }}, /* vmpy2h 0,limm,u6 00101110010111000111uuuuuu111110. */ { "vmpy2h", 0x2E5C703E, 0xFFFFF03F, ARC_OPCODE_ARCv2HS, MPY, MPY8E, { ZA, LIMM, UIMM6_20 }, { 0 }}, @@ -18943,7 +18943,7 @@ { "vmpy2h", 0x2E9C7000, 0xFFFFF000, ARC_OPCODE_ARCv2HS, MPY, MPY8E, { ZA, LIMM, SIMM12_20 }, { 0 }}, /* vmpy2h a,limm,limm 00101110000111000111111110AAAAAA. */ -{ "vmpy2h", 0x2E1C7F80, 0xFFFFFFC0, ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, DSP, NONE, { RA_CHK, LIMM, LIMMdup }, { 0 }}, +{ "vmpy2h", 0x2E1C7F80, 0xFFFFFFC0, ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, DSP, NONE, { RAD, LIMM, LIMMdup }, { 0 }}, /* vmpy2h 0,limm,limm 00101110000111000111111110111110. */ { "vmpy2h", 0x2E1C7FBE, 0xFFFFFFFF, ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, DSP, NONE, { ZA, LIMM, LIMMdup }, { 0 }}, @@ -18952,7 +18952,7 @@ { "vmpy2h", 0x2EDC7F80, 0xFFFFFFE0, ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, DSP, NONE, { ZA, LIMM, LIMMdup }, { C_CC }}, /* vmpy2h a,limm,limm 00101110000111000111111110AAAAAA. */ -{ "vmpy2h", 0x2E1C7F80, 0xFFFFFFC0, ARC_OPCODE_ARCv2HS, MPY, MPY8E, { RA_CHK, LIMM, LIMMdup }, { 0 }}, +{ "vmpy2h", 0x2E1C7F80, 0xFFFFFFC0, ARC_OPCODE_ARCv2HS, MPY, MPY8E, { RAD, LIMM, LIMMdup }, { 0 }}, /* vmpy2h 0,limm,limm 00101110000111000111111110111110. */ { "vmpy2h", 0x2E1C7FBE, 0xFFFFFFFF, ARC_OPCODE_ARCv2HS, MPY, MPY8E, { ZA, LIMM, LIMMdup }, { 0 }}, @@ -19999,46 +19999,46 @@ { "vsub4b", 0x2EE57F80, 0xFFFFFFE0, ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS, DSP, NONE, { ZA, LIMM, LIMMdup }, { C_CC }}, /* vsub4h a,b,c 00101bbb001110010BBBCCCCCCAAAAAA. */ -{ "vsub4h", 0x28390000, 0xF8FF8000, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { RA_CHK, RB, RC }, { 0 }}, +{ "vsub4h", 0x28390000, 0xF8FF8000, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { RAD, RBD, RCD }, { 0 }}, /* vsub4h 0,b,c 00101bbb001110010BBBCCCCCC111110. */ -{ "vsub4h", 0x2839003E, 0xF8FF803F, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { ZA, RB, RC }, { 0 }}, +{ "vsub4h", 0x2839003E, 0xF8FF803F, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { ZA, RBD, RCD }, { 0 }}, /* vsub4h<.cc> b,b,c 00101bbb111110010BBBCCCCCC0QQQQQ. */ -{ "vsub4h", 0x28F90000, 0xF8FF8020, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { RB_CHK, RBdup, RC }, { C_CC }}, +{ "vsub4h", 0x28F90000, 0xF8FF8020, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { RBD, RBDdup, RCD }, { C_CC }}, /* vsub4h a,b,u6 00101bbb011110010BBBuuuuuuAAAAAA. */ -{ "vsub4h", 0x28790000, 0xF8FF8000, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { RA_CHK, RB, UIMM6_20 }, { 0 }}, +{ "vsub4h", 0x28790000, 0xF8FF8000, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { RAD, RBD, UIMM6_20 }, { 0 }}, /* vsub4h 0,b,u6 00101bbb011110010BBBuuuuuu111110. */ -{ "vsub4h", 0x2879003E, 0xF8FF803F, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { ZA, RB, UIMM6_20 }, { 0 }}, +{ "vsub4h", 0x2879003E, 0xF8FF803F, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { ZA, RBD, UIMM6_20 }, { 0 }}, /* vsub4h<.cc> b,b,u6 00101bbb111110010BBBuuuuuu1QQQQQ. */ -{ "vsub4h", 0x28F90020, 0xF8FF8020, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { RB_CHK, RBdup, UIMM6_20 }, { C_CC }}, +{ "vsub4h", 0x28F90020, 0xF8FF8020, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { RBD, RBDdup, UIMM6_20 }, { C_CC }}, /* vsub4h b,b,s12 00101bbb101110010BBBssssssSSSSSS. */ -{ "vsub4h", 0x28B90000, 0xF8FF8000, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { RB_CHK, RBdup, SIMM12_20 }, { 0 }}, +{ "vsub4h", 0x28B90000, 0xF8FF8000, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { RBD, RBDdup, SIMM12_20 }, { 0 }}, /* vsub4h a,limm,c 00101110001110010111CCCCCCAAAAAA. */ -{ "vsub4h", 0x2E397000, 0xFFFFF000, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { RA_CHK, LIMM, RC }, { 0 }}, +{ "vsub4h", 0x2E397000, 0xFFFFF000, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { RAD, LIMM, RCD }, { 0 }}, /* vsub4h a,b,limm 00101bbb001110010BBB111110AAAAAA. */ -{ "vsub4h", 0x28390F80, 0xF8FF8FC0, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { RA_CHK, RB, LIMM }, { 0 }}, +{ "vsub4h", 0x28390F80, 0xF8FF8FC0, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { RAD, RBD, LIMM }, { 0 }}, /* vsub4h 0,limm,c 00101110001110010111CCCCCC111110. */ -{ "vsub4h", 0x2E39703E, 0xFFFFF03F, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { ZA, LIMM, RC }, { 0 }}, +{ "vsub4h", 0x2E39703E, 0xFFFFF03F, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { ZA, LIMM, RCD }, { 0 }}, /* vsub4h 0,b,limm 00101bbb001110010BBB111110111110. */ -{ "vsub4h", 0x28390FBE, 0xF8FF8FFF, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { ZA, RB, LIMM }, { 0 }}, +{ "vsub4h", 0x28390FBE, 0xF8FF8FFF, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { ZA, RBD, LIMM }, { 0 }}, /* vsub4h<.cc> b,b,limm 00101bbb111110010BBB1111100QQQQQ. */ -{ "vsub4h", 0x28F90F80, 0xF8FF8FE0, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { RB_CHK, RBdup, LIMM }, { C_CC }}, +{ "vsub4h", 0x28F90F80, 0xF8FF8FE0, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { RBD, RBDdup, LIMM }, { C_CC }}, /* vsub4h<.cc> 0,limm,c 00101110111110010111CCCCCC0QQQQQ. */ -{ "vsub4h", 0x2EF97000, 0xFFFFF020, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { ZA, LIMM, RC }, { C_CC }}, +{ "vsub4h", 0x2EF97000, 0xFFFFF020, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { ZA, LIMM, RCD }, { C_CC }}, /* vsub4h a,limm,u6 00101110011110010111uuuuuuAAAAAA. */ -{ "vsub4h", 0x2E797000, 0xFFFFF000, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { RA_CHK, LIMM, UIMM6_20 }, { 0 }}, +{ "vsub4h", 0x2E797000, 0xFFFFF000, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { RAD, LIMM, UIMM6_20 }, { 0 }}, /* vsub4h 0,limm,u6 00101110011110010111uuuuuu111110. */ { "vsub4h", 0x2E79703E, 0xFFFFF03F, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { ZA, LIMM, UIMM6_20 }, { 0 }}, @@ -20050,7 +20050,7 @@ { "vsub4h", 0x2EB97000, 0xFFFFF000, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { ZA, LIMM, SIMM12_20 }, { 0 }}, /* vsub4h a,limm,limm 00101110001110010111111110AAAAAA. */ -{ "vsub4h", 0x2E397F80, 0xFFFFFFC0, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { RA_CHK, LIMM, LIMMdup }, { 0 }}, +{ "vsub4h", 0x2E397F80, 0xFFFFFFC0, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { RAD, LIMM, LIMMdup }, { 0 }}, /* vsub4h 0,limm,limm 00101110001110010111111110111110. */ { "vsub4h", 0x2E397FBE, 0xFFFFFFFF, ARC_OPCODE_ARCv2HS, MPY, MPY9E, { ZA, LIMM, LIMMdup }, { 0 }}, diff -Nru gdb-9.1/opcodes/arm-dis.c gdb-10.2/opcodes/arm-dis.c --- gdb-9.1/opcodes/arm-dis.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/arm-dis.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Instruction printing code for the ARM - Copyright (C) 1994-2019 Free Software Foundation, Inc. + Copyright (C) 1994-2020 Free Software Foundation, Inc. Contributed by Richard Earnshaw (rwe@pegasus.esprit.ec.org) Modification by James G. Smith (jsmith@cygnus.co.uk) @@ -355,6 +355,16 @@ const char * assembler; /* How to disassemble this insn. */ }; +struct cdeopcode32 +{ + arm_feature_set arch; /* Architecture defining this insn. */ + uint8_t coproc_shift; /* coproc is this far into op. */ + uint16_t coproc_mask; /* Length of coproc field in op. */ + unsigned long value; /* If arch is 0 then value is a sentinel. */ + unsigned long mask; /* Recognise insn if (op & mask) == value. */ + const char * assembler; /* How to disassemble this insn. */ +}; + /* MVE opcodes. */ struct mopcode32 @@ -460,6 +470,75 @@ /* Common coprocessor opcodes shared between Arm and Thumb-2. */ +/* print_insn_cde recognizes the following format control codes: + + %% % + + %a print 'a' iff bit 28 is 1 + %p print bits 8-10 as coprocessor + %<bitfield>d print as decimal + %<bitfield>r print as an ARM register + %<bitfield>n print as an ARM register but r15 is APSR_nzcv + %<bitfield>T print as an ARM register + 1 + %<bitfield>R as %r but r13 is UNPREDICTABLE + %<bitfield>S as %r but rX where X > 10 is UNPREDICTABLE + %j print immediate taken from bits (16..21,7,0..5) + %k print immediate taken from bits (20..21,7,0..5). + %l print immediate taken from bits (20..22,7,4..5). */ + +/* At the moment there is only one valid position for the coprocessor number, + and hence that's encoded in the macro below. */ +#define CDE_OPCODE(ARCH, VALUE, MASK, ASM) \ + { ARCH, 8, 7, VALUE, MASK, ASM } +static const struct cdeopcode32 cde_opcodes[] = +{ + /* Custom Datapath Extension instructions. */ + CDE_OPCODE (ARM_FEATURE_CORE_HIGH (ARM_EXT2_CDE), + 0xee000000, 0xefc00840, + "cx1%a\t%p, %12-15n, #%0-5,7,16-21d"), + CDE_OPCODE (ARM_FEATURE_CORE_HIGH (ARM_EXT2_CDE), + 0xee000040, 0xefc00840, + "cx1d%a\t%p, %12-15S, %12-15T, #%0-5,7,16-21d"), + + CDE_OPCODE (ARM_FEATURE_CORE_HIGH (ARM_EXT2_CDE), + 0xee400000, 0xefc00840, + "cx2%a\t%p, %12-15n, %16-19n, #%0-5,7,20-21d"), + CDE_OPCODE (ARM_FEATURE_CORE_HIGH (ARM_EXT2_CDE), + 0xee400040, 0xefc00840, + "cx2d%a\t%p, %12-15S, %12-15T, %16-19n, #%0-5,7,20-21d"), + + CDE_OPCODE (ARM_FEATURE_CORE_HIGH (ARM_EXT2_CDE), + 0xee800000, 0xef800840, + "cx3%a\t%p, %0-3n, %16-19n, %12-15n, #%4-5,7,20-22d"), + CDE_OPCODE (ARM_FEATURE_CORE_HIGH (ARM_EXT2_CDE), + 0xee800040, 0xef800840, + "cx3d%a\t%p, %0-3S, %0-3T, %16-19n, %12-15n, #%4-5,7,20-22d"), + + CDE_OPCODE (ARM_FEATURE_CORE_HIGH (ARM_EXT2_CDE), + 0xec200000, 0xeeb00840, + "vcx1%a\t%p, %12-15,22V, #%0-5,7,16-19d"), + CDE_OPCODE (ARM_FEATURE_CORE_HIGH (ARM_EXT2_CDE), + 0xec200040, 0xeeb00840, + "vcx1%a\t%p, %12-15,22V, #%0-5,7,16-19,24d"), + + CDE_OPCODE (ARM_FEATURE_CORE_HIGH (ARM_EXT2_CDE), + 0xec300000, 0xeeb00840, + "vcx2%a\t%p, %12-15,22V, %0-3,5V, #%4,7,16-19d"), + CDE_OPCODE (ARM_FEATURE_CORE_HIGH (ARM_EXT2_CDE), + 0xec300040, 0xeeb00840, + "vcx2%a\t%p, %12-15,22V, %0-3,5V, #%4,7,16-19,24d"), + + CDE_OPCODE (ARM_FEATURE_CORE_HIGH (ARM_EXT2_CDE), + 0xec800000, 0xee800840, + "vcx3%a\t%p, %12-15,22V, %16-19,7V, %0-3,5V, #%4,20-21d"), + CDE_OPCODE (ARM_FEATURE_CORE_HIGH (ARM_EXT2_CDE), + 0xec800040, 0xee800840, + "vcx3%a\t%p, %12-15,22V, %16-19,7V, %0-3,5V, #%4,20-21,24d"), + + CDE_OPCODE (ARM_FEATURE_CORE_LOW (0), 0, 0, 0) + +}; + static const struct sopcode32 coprocessor_opcodes[] = { /* XScale instructions. */ @@ -810,7 +889,7 @@ /* Floating point coprocessor (VFP) instructions. */ {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1xD), 0x0ee00a10, 0x0fff0fff, "vmsr%c\tfpsid, %12-15r"}, - {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1xD | FPU_MVE), + {ANY, ARM_FEATURE (0, ARM_EXT2_V8_1M_MAIN, FPU_VFP_EXT_V1xD), 0x0ee10a10, 0x0fff0fff, "vmsr%c\tfpscr, %12-15r"}, {ANY, ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8_1M_MAIN), 0x0ee20a10, 0x0fff0fff, "vmsr%c\tfpscr_nzcvqc, %12-15r"}, @@ -826,9 +905,9 @@ 0x0ee90a10, 0x0fff0fff, "vmsr%c\tfpinst, %12-15r\t@ Impl def"}, {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1xD), 0x0eea0a10, 0x0fff0fff, "vmsr%c\tfpinst2, %12-15r\t@ Impl def"}, - {ANY, ARM_FEATURE_COPROC (FPU_MVE), + {ANY, ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), 0x0eec0a10, 0x0fff0fff, "vmsr%c\tvpr, %12-15r"}, - {ANY, ARM_FEATURE_COPROC (FPU_MVE), + {ANY, ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), 0x0eed0a10, 0x0fff0fff, "vmsr%c\tp0, %12-15r"}, {ANY, ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8_1M_MAIN), 0x0eee0a10, 0x0fff0fff, "vmsr%c\tfpcxt_ns, %12-15r"}, @@ -838,7 +917,7 @@ 0x0ef00a10, 0x0fff0fff, "vmrs%c\t%12-15r, fpsid"}, {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1xD), 0x0ef1fa10, 0x0fffffff, "vmrs%c\tAPSR_nzcv, fpscr"}, - {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1xD | FPU_MVE), + {ANY, ARM_FEATURE (0, ARM_EXT2_V8_1M_MAIN, FPU_VFP_EXT_V1xD), 0x0ef10a10, 0x0fff0fff, "vmrs%c\t%12-15r, fpscr"}, {ANY, ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8_1M_MAIN), 0x0ef20a10, 0x0fff0fff, "vmrs%c\t%12-15r, fpscr_nzcvqc"}, @@ -854,9 +933,9 @@ 0x0ef90a10, 0x0fff0fff, "vmrs%c\t%12-15r, fpinst\t@ Impl def"}, {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1xD), 0x0efa0a10, 0x0fff0fff, "vmrs%c\t%12-15r, fpinst2\t@ Impl def"}, - {ANY, ARM_FEATURE_COPROC (FPU_MVE), + {ANY, ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), 0x0efc0a10, 0x0fff0fff, "vmrs%c\t%12-15r, vpr"}, - {ANY, ARM_FEATURE_COPROC (FPU_MVE), + {ANY, ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), 0x0efd0a10, 0x0fff0fff, "vmrs%c\t%12-15r, p0"}, {ANY, ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8_1M_MAIN), 0x0efe0a10, 0x0fff0fff, "vmrs%c\t%12-15r, fpcxt_ns"}, @@ -1415,17 +1494,17 @@ /* Data transfer between ARM and NEON registers. */ {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1), - 0x0e800b10, 0x1ff00f70, "vdup%c.32\t%16-19,7D, %12-15r"}, + 0x0e800b10, 0x0ff00f70, "vdup%c.32\t%16-19,7D, %12-15r"}, {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1), - 0x0e800b30, 0x1ff00f70, "vdup%c.16\t%16-19,7D, %12-15r"}, + 0x0e800b30, 0x0ff00f70, "vdup%c.16\t%16-19,7D, %12-15r"}, {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1), - 0x0ea00b10, 0x1ff00f70, "vdup%c.32\t%16-19,7Q, %12-15r"}, + 0x0ea00b10, 0x0ff00f70, "vdup%c.32\t%16-19,7Q, %12-15r"}, {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1), - 0x0ea00b30, 0x1ff00f70, "vdup%c.16\t%16-19,7Q, %12-15r"}, + 0x0ea00b30, 0x0ff00f70, "vdup%c.16\t%16-19,7Q, %12-15r"}, {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1), - 0x0ec00b10, 0x1ff00f70, "vdup%c.8\t%16-19,7D, %12-15r"}, + 0x0ec00b10, 0x0ff00f70, "vdup%c.8\t%16-19,7D, %12-15r"}, {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1), - 0x0ee00b10, 0x1ff00f70, "vdup%c.8\t%16-19,7Q, %12-15r"}, + 0x0ee00b10, 0x0ff00f70, "vdup%c.8\t%16-19,7Q, %12-15r"}, /* Move data element to all lanes. */ {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1), @@ -2154,624 +2233,624 @@ { /* MVE. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VPST, 0xfe310f4d, 0xffbf1fff, "vpst%i" }, /* Floating point VPT T1. */ - {ARM_FEATURE_COPROC (FPU_MVE_FP), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE_FP), MVE_VPT_FP_T1, 0xee310f00, 0xefb10f50, "vpt%i.f%28s\t%n, %17-19Q, %1-3,5Q"}, /* Floating point VPT T2. */ - {ARM_FEATURE_COPROC (FPU_MVE_FP), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE_FP), MVE_VPT_FP_T2, 0xee310f40, 0xefb10f50, "vpt%i.f%28s\t%n, %17-19Q, %0-3Z"}, /* Vector VPT T1. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VPT_VEC_T1, 0xfe010f00, 0xff811f51, "vpt%i.i%20-21s\t%n, %17-19Q, %1-3,5Q"}, /* Vector VPT T2. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VPT_VEC_T2, 0xfe010f01, 0xff811f51, "vpt%i.u%20-21s\t%n, %17-19Q, %1-3,5Q"}, /* Vector VPT T3. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VPT_VEC_T3, 0xfe011f00, 0xff811f50, "vpt%i.s%20-21s\t%n, %17-19Q, %1-3,5Q"}, /* Vector VPT T4. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VPT_VEC_T4, 0xfe010f40, 0xff811f70, "vpt%i.i%20-21s\t%n, %17-19Q, %0-3Z"}, /* Vector VPT T5. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VPT_VEC_T5, 0xfe010f60, 0xff811f70, "vpt%i.u%20-21s\t%n, %17-19Q, %0-3Z"}, /* Vector VPT T6. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VPT_VEC_T6, 0xfe011f40, 0xff811f50, "vpt%i.s%20-21s\t%n, %17-19Q, %0-3Z"}, /* Vector VBIC immediate. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VBIC_IMM, 0xef800070, 0xefb81070, "vbic%v.i%8-11s\t%13-15,22Q, %E"}, /* Vector VBIC register. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VBIC_REG, 0xef100150, 0xffb11f51, "vbic%v\t%13-15,22Q, %17-19,7Q, %1-3,5Q"}, /* Vector VABAV. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VABAV, 0xee800f01, 0xefc10f51, "vabav%v.%u%20-21s\t%12-15r, %17-19,7Q, %1-3,5Q"}, /* Vector VABD floating point. */ - {ARM_FEATURE_COPROC (FPU_MVE_FP), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE_FP), MVE_VABD_FP, 0xff200d40, 0xffa11f51, "vabd%v.f%20s\t%13-15,22Q, %17-19,7Q, %1-3,5Q"}, /* Vector VABD. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VABD_VEC, 0xef000740, 0xef811f51, "vabd%v.%u%20-21s\t%13-15,22Q, %17-19,7Q, %1-3,5Q"}, /* Vector VABS floating point. */ - {ARM_FEATURE_COPROC (FPU_MVE_FP), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE_FP), MVE_VABS_FP, 0xFFB10740, 0xFFB31FD1, "vabs%v.f%18-19s\t%13-15,22Q, %1-3,5Q"}, /* Vector VABS. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VABS_VEC, 0xffb10340, 0xffb31fd1, "vabs%v.s%18-19s\t%13-15,22Q, %1-3,5Q"}, /* Vector VADD floating point T1. */ - {ARM_FEATURE_COPROC (FPU_MVE_FP), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE_FP), MVE_VADD_FP_T1, 0xef000d40, 0xffa11f51, "vadd%v.f%20s\t%13-15,22Q, %17-19,7Q, %1-3,5Q"}, /* Vector VADD floating point T2. */ - {ARM_FEATURE_COPROC (FPU_MVE_FP), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE_FP), MVE_VADD_FP_T2, 0xee300f40, 0xefb11f70, "vadd%v.f%28s\t%13-15,22Q, %17-19,7Q, %0-3r"}, /* Vector VADD T1. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VADD_VEC_T1, 0xef000840, 0xff811f51, "vadd%v.i%20-21s\t%13-15,22Q, %17-19,7Q, %1-3,5Q"}, /* Vector VADD T2. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VADD_VEC_T2, 0xee010f40, 0xff811f70, "vadd%v.i%20-21s\t%13-15,22Q, %17-19,7Q, %0-3r"}, /* Vector VADDLV. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VADDLV, 0xee890f00, 0xef8f1fd1, "vaddlv%5A%v.%u32\t%13-15l, %20-22h, %1-3Q"}, /* Vector VADDV. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VADDV, 0xeef10f00, 0xeff31fd1, "vaddv%5A%v.%u%18-19s\t%13-15l, %1-3Q"}, /* Vector VADC. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VADC, 0xee300f00, 0xffb10f51, "vadc%12I%v.i32\t%13-15,22Q, %17-19,7Q, %1-3,5Q"}, /* Vector VAND. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VAND, 0xef000150, 0xffb11f51, "vand%v\t%13-15,22Q, %17-19,7Q, %1-3,5Q"}, /* Vector VBRSR register. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VBRSR, 0xfe011e60, 0xff811f70, "vbrsr%v.%20-21s\t%13-15,22Q, %17-19,7Q, %0-3r"}, /* Vector VCADD floating point. */ - {ARM_FEATURE_COPROC (FPU_MVE_FP), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE_FP), MVE_VCADD_FP, 0xfc800840, 0xfea11f51, "vcadd%v.f%20s\t%13-15,22Q, %17-19,7Q, %1-3,5Q, #%24o"}, /* Vector VCADD. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VCADD_VEC, 0xfe000f00, 0xff810f51, "vcadd%v.i%20-21s\t%13-15,22Q, %17-19,7Q, %1-3,5Q, #%12o"}, /* Vector VCLS. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VCLS, 0xffb00440, 0xffb31fd1, "vcls%v.s%18-19s\t%13-15,22Q, %1-3,5Q"}, /* Vector VCLZ. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VCLZ, 0xffb004c0, 0xffb31fd1, "vclz%v.i%18-19s\t%13-15,22Q, %1-3,5Q"}, /* Vector VCMLA. */ - {ARM_FEATURE_COPROC (FPU_MVE_FP), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE_FP), MVE_VCMLA_FP, 0xfc200840, 0xfe211f51, "vcmla%v.f%20s\t%13-15,22Q, %17-19,7Q, %1-3,5Q, #%23-24o"}, /* Vector VCMP floating point T1. */ - {ARM_FEATURE_COPROC (FPU_MVE_FP), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE_FP), MVE_VCMP_FP_T1, 0xee310f00, 0xeff1ef50, "vcmp%v.f%28s\t%n, %17-19Q, %1-3,5Q"}, /* Vector VCMP floating point T2. */ - {ARM_FEATURE_COPROC (FPU_MVE_FP), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE_FP), MVE_VCMP_FP_T2, 0xee310f40, 0xeff1ef50, "vcmp%v.f%28s\t%n, %17-19Q, %0-3Z"}, /* Vector VCMP T1. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VCMP_VEC_T1, 0xfe010f00, 0xffc1ff51, "vcmp%v.i%20-21s\t%n, %17-19Q, %1-3,5Q"}, /* Vector VCMP T2. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VCMP_VEC_T2, 0xfe010f01, 0xffc1ff51, "vcmp%v.u%20-21s\t%n, %17-19Q, %1-3,5Q"}, /* Vector VCMP T3. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VCMP_VEC_T3, 0xfe011f00, 0xffc1ff50, "vcmp%v.s%20-21s\t%n, %17-19Q, %1-3,5Q"}, /* Vector VCMP T4. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VCMP_VEC_T4, 0xfe010f40, 0xffc1ff70, "vcmp%v.i%20-21s\t%n, %17-19Q, %0-3Z"}, /* Vector VCMP T5. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VCMP_VEC_T5, 0xfe010f60, 0xffc1ff70, "vcmp%v.u%20-21s\t%n, %17-19Q, %0-3Z"}, /* Vector VCMP T6. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VCMP_VEC_T6, 0xfe011f40, 0xffc1ff50, "vcmp%v.s%20-21s\t%n, %17-19Q, %0-3Z"}, /* Vector VDUP. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VDUP, 0xeea00b10, 0xffb10f5f, "vdup%v.%5,22s\t%17-19,7Q, %12-15r"}, /* Vector VEOR. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VEOR, 0xff000150, 0xffd11f51, "veor%v\t%13-15,22Q, %17-19,7Q, %1-3,5Q"}, /* Vector VFMA, vector * scalar. */ - {ARM_FEATURE_COPROC (FPU_MVE_FP), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE_FP), MVE_VFMA_FP_SCALAR, 0xee310e40, 0xefb11f70, "vfma%v.f%28s\t%13-15,22Q, %17-19,7Q, %0-3r"}, /* Vector VFMA floating point. */ - {ARM_FEATURE_COPROC (FPU_MVE_FP), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE_FP), MVE_VFMA_FP, 0xef000c50, 0xffa11f51, "vfma%v.f%20s\t%13-15,22Q, %17-19,7Q, %1-3,5Q"}, /* Vector VFMS floating point. */ - {ARM_FEATURE_COPROC (FPU_MVE_FP), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE_FP), MVE_VFMS_FP, 0xef200c50, 0xffa11f51, "vfms%v.f%20s\t%13-15,22Q, %17-19,7Q, %1-3,5Q"}, /* Vector VFMAS, vector * scalar. */ - {ARM_FEATURE_COPROC (FPU_MVE_FP), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE_FP), MVE_VFMAS_FP_SCALAR, 0xee311e40, 0xefb11f70, "vfmas%v.f%28s\t%13-15,22Q, %17-19,7Q, %0-3r"}, /* Vector VHADD T1. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VHADD_T1, 0xef000040, 0xef811f51, "vhadd%v.%u%20-21s\t%13-15,22Q, %17-19,7Q, %1-3,5Q"}, /* Vector VHADD T2. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VHADD_T2, 0xee000f40, 0xef811f70, "vhadd%v.%u%20-21s\t%13-15,22Q, %17-19,7Q, %0-3r"}, /* Vector VHSUB T1. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VHSUB_T1, 0xef000240, 0xef811f51, "vhsub%v.%u%20-21s\t%13-15,22Q, %17-19,7Q, %1-3,5Q"}, /* Vector VHSUB T2. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VHSUB_T2, 0xee001f40, 0xef811f70, "vhsub%v.%u%20-21s\t%13-15,22Q, %17-19,7Q, %0-3r"}, /* Vector VCMUL. */ - {ARM_FEATURE_COPROC (FPU_MVE_FP), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE_FP), MVE_VCMUL_FP, 0xee300e00, 0xefb10f50, "vcmul%v.f%28s\t%13-15,22Q, %17-19,7Q, %1-3,5Q, #%0,12o"}, /* Vector VCTP. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VCTP, 0xf000e801, 0xffc0ffff, "vctp%v.%20-21s\t%16-19r"}, /* Vector VDUP. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VDUP, 0xeea00b10, 0xffb10f5f, "vdup%v.%5,22s\t%17-19,7Q, %12-15r"}, /* Vector VRHADD. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VRHADD, 0xef000140, 0xef811f51, "vrhadd%v.%u%20-21s\t%13-15,22Q, %17-19,7Q, %1-3,5Q"}, /* Vector VCVT. */ - {ARM_FEATURE_COPROC (FPU_MVE_FP), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE_FP), MVE_VCVT_FP_FIX_VEC, 0xef800c50, 0xef801cd1, "vcvt%v.%s\t%13-15,22Q, %1-3,5Q, #%16-21k"}, /* Vector VCVT. */ - {ARM_FEATURE_COPROC (FPU_MVE_FP), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE_FP), MVE_VCVT_BETWEEN_FP_INT, 0xffb30640, 0xffb31e51, "vcvt%v.%s\t%13-15,22Q, %1-3,5Q"}, /* Vector VCVT between single and half-precision float, bottom half. */ - {ARM_FEATURE_COPROC (FPU_MVE_FP), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE_FP), MVE_VCVT_FP_HALF_FP, 0xee3f0e01, 0xefbf1fd1, "vcvtb%v.%s\t%13-15,22Q, %1-3,5Q"}, /* Vector VCVT between single and half-precision float, top half. */ - {ARM_FEATURE_COPROC (FPU_MVE_FP), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE_FP), MVE_VCVT_FP_HALF_FP, 0xee3f1e01, 0xefbf1fd1, "vcvtt%v.%s\t%13-15,22Q, %1-3,5Q"}, /* Vector VCVT. */ - {ARM_FEATURE_COPROC (FPU_MVE_FP), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE_FP), MVE_VCVT_FROM_FP_TO_INT, 0xffb30040, 0xffb31c51, "vcvt%m%v.%s\t%13-15,22Q, %1-3,5Q"}, /* Vector VDDUP. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VDDUP, 0xee011f6e, 0xff811f7e, "vddup%v.u%20-21s\t%13-15,22Q, %17-19l, #%0,7u"}, /* Vector VDWDUP. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VDWDUP, 0xee011f60, 0xff811f70, "vdwdup%v.u%20-21s\t%13-15,22Q, %17-19l, %1-3h, #%0,7u"}, /* Vector VHCADD. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VHCADD, 0xee000f00, 0xff810f51, "vhcadd%v.s%20-21s\t%13-15,22Q, %17-19,7Q, %1-3,5Q, #%12o"}, /* Vector VIWDUP. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VIWDUP, 0xee010f60, 0xff811f70, "viwdup%v.u%20-21s\t%13-15,22Q, %17-19l, %1-3h, #%0,7u"}, /* Vector VIDUP. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VIDUP, 0xee010f6e, 0xff811f7e, "vidup%v.u%20-21s\t%13-15,22Q, %17-19l, #%0,7u"}, /* Vector VLD2. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VLD2, 0xfc901e00, 0xff901e5f, "vld2%5d.%7-8s\t%B, [%16-19r]%w"}, /* Vector VLD4. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VLD4, 0xfc901e01, 0xff901e1f, "vld4%5-6d.%7-8s\t%B, [%16-19r]%w"}, /* Vector VLDRB gather load. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VLDRB_GATHER_T1, 0xec900e00, 0xefb01e50, "vldrb%v.%u%7-8s\t%13-15,22Q, [%16-19r, %1-3,5Q]"}, /* Vector VLDRH gather load. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VLDRH_GATHER_T2, 0xec900e10, 0xefb01e50, "vldrh%v.%u%7-8s\t%13-15,22Q, [%16-19r, %1-3,5Q%o]"}, /* Vector VLDRW gather load. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VLDRW_GATHER_T3, 0xfc900f40, 0xffb01fd0, "vldrw%v.u32\t%13-15,22Q, [%16-19r, %1-3,5Q%o]"}, /* Vector VLDRD gather load. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VLDRD_GATHER_T4, 0xec900fd0, 0xefb01fd0, "vldrd%v.u64\t%13-15,22Q, [%16-19r, %1-3,5Q%o]"}, /* Vector VLDRW gather load. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VLDRW_GATHER_T5, 0xfd101e00, 0xff111f00, "vldrw%v.u32\t%13-15,22Q, [%17-19,7Q, #%a%0-6i]%w"}, /* Vector VLDRD gather load, variant T6. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VLDRD_GATHER_T6, 0xfd101f00, 0xff111f00, "vldrd%v.u64\t%13-15,22Q, [%17-19,7Q, #%a%0-6i]%w"}, /* Vector VLDRB. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VLDRB_T1, 0xec100e00, 0xee581e00, "vldrb%v.%u%7-8s\t%13-15Q, %d"}, /* Vector VLDRH. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VLDRH_T2, 0xec180e00, 0xee581e00, "vldrh%v.%u%7-8s\t%13-15Q, %d"}, /* Vector VLDRB unsigned, variant T5. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VLDRB_T5, 0xec101e00, 0xfe101f80, "vldrb%v.u8\t%13-15,22Q, %d"}, /* Vector VLDRH unsigned, variant T6. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VLDRH_T6, 0xec101e80, 0xfe101f80, "vldrh%v.u16\t%13-15,22Q, %d"}, /* Vector VLDRW unsigned, variant T7. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VLDRW_T7, 0xec101f00, 0xfe101f80, "vldrw%v.u32\t%13-15,22Q, %d"}, /* Vector VMAX. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VMAX, 0xef000640, 0xef811f51, "vmax%v.%u%20-21s\t%13-15,22Q, %17-19,7Q, %1-3,5Q"}, /* Vector VMAXA. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VMAXA, 0xee330e81, 0xffb31fd1, "vmaxa%v.s%18-19s\t%13-15,22Q, %1-3,5Q"}, /* Vector VMAXNM floating point. */ - {ARM_FEATURE_COPROC (FPU_MVE_FP), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE_FP), MVE_VMAXNM_FP, 0xff000f50, 0xffa11f51, "vmaxnm%v.f%20s\t%13-15,22Q, %17-19,7Q, %1-3,5Q"}, /* Vector VMAXNMA floating point. */ - {ARM_FEATURE_COPROC (FPU_MVE_FP), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE_FP), MVE_VMAXNMA_FP, 0xee3f0e81, 0xefbf1fd1, "vmaxnma%v.f%28s\t%13-15,22Q, %1-3,5Q"}, /* Vector VMAXNMV floating point. */ - {ARM_FEATURE_COPROC (FPU_MVE_FP), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE_FP), MVE_VMAXNMV_FP, 0xeeee0f00, 0xefff0fd1, "vmaxnmv%v.f%28s\t%12-15r, %1-3,5Q"}, /* Vector VMAXNMAV floating point. */ - {ARM_FEATURE_COPROC (FPU_MVE_FP), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE_FP), MVE_VMAXNMAV_FP, 0xeeec0f00, 0xefff0fd1, "vmaxnmav%v.f%28s\t%12-15r, %1-3,5Q"}, /* Vector VMAXV. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VMAXV, 0xeee20f00, 0xeff30fd1, "vmaxv%v.%u%18-19s\t%12-15r, %1-3,5Q"}, /* Vector VMAXAV. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VMAXAV, 0xeee00f00, 0xfff30fd1, "vmaxav%v.s%18-19s\t%12-15r, %1-3,5Q"}, /* Vector VMIN. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VMIN, 0xef000650, 0xef811f51, "vmin%v.%u%20-21s\t%13-15,22Q, %17-19,7Q, %1-3,5Q"}, /* Vector VMINA. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VMINA, 0xee331e81, 0xffb31fd1, "vmina%v.s%18-19s\t%13-15,22Q, %1-3,5Q"}, /* Vector VMINNM floating point. */ - {ARM_FEATURE_COPROC (FPU_MVE_FP), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE_FP), MVE_VMINNM_FP, 0xff200f50, 0xffa11f51, "vminnm%v.f%20s\t%13-15,22Q, %17-19,7Q, %1-3,5Q"}, /* Vector VMINNMA floating point. */ - {ARM_FEATURE_COPROC (FPU_MVE_FP), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE_FP), MVE_VMINNMA_FP, 0xee3f1e81, 0xefbf1fd1, "vminnma%v.f%28s\t%13-15,22Q, %1-3,5Q"}, /* Vector VMINNMV floating point. */ - {ARM_FEATURE_COPROC (FPU_MVE_FP), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE_FP), MVE_VMINNMV_FP, 0xeeee0f80, 0xefff0fd1, "vminnmv%v.f%28s\t%12-15r, %1-3,5Q"}, /* Vector VMINNMAV floating point. */ - {ARM_FEATURE_COPROC (FPU_MVE_FP), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE_FP), MVE_VMINNMAV_FP, 0xeeec0f80, 0xefff0fd1, "vminnmav%v.f%28s\t%12-15r, %1-3,5Q"}, /* Vector VMINV. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VMINV, 0xeee20f80, 0xeff30fd1, "vminv%v.%u%18-19s\t%12-15r, %1-3,5Q"}, /* Vector VMINAV. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VMINAV, 0xeee00f80, 0xfff30fd1, "vminav%v.s%18-19s\t%12-15r, %1-3,5Q"}, /* Vector VMLA. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VMLA, 0xee010e40, 0xef811f70, "vmla%v.%u%20-21s\t%13-15,22Q, %17-19,7Q, %0-3r"}, /* Vector VMLALDAV. Note must appear before VMLADAV due to instruction opcode aliasing. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VMLALDAV, 0xee801e00, 0xef801f51, "vmlaldav%5Ax%v.%u%16s\t%13-15l, %20-22h, %17-19,7Q, %1-3Q"}, - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VMLALDAV, 0xee800e00, 0xef801f51, "vmlalv%5A%v.%u%16s\t%13-15l, %20-22h, %17-19,7Q, %1-3Q"}, /* Vector VMLAV T1 variant, same as VMLADAV but with X == 0. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VMLADAV_T1, 0xeef00e00, 0xeff01f51, "vmlav%5A%v.%u%16s\t%13-15l, %17-19,7Q, %1-3Q"}, /* Vector VMLAV T2 variant, same as VMLADAV but with X == 0. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VMLADAV_T2, 0xeef00f00, 0xeff11f51, "vmlav%5A%v.%u8\t%13-15l, %17-19,7Q, %1-3Q"}, /* Vector VMLADAV T1 variant. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VMLADAV_T1, 0xeef01e00, 0xeff01f51, "vmladav%5Ax%v.%u%16s\t%13-15l, %17-19,7Q, %1-3Q"}, /* Vector VMLADAV T2 variant. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VMLADAV_T2, 0xeef01f00, 0xeff11f51, "vmladav%5Ax%v.%u8\t%13-15l, %17-19,7Q, %1-3Q"}, /* Vector VMLAS. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VMLAS, 0xee011e40, 0xef811f70, "vmlas%v.%u%20-21s\t%13-15,22Q, %17-19,7Q, %0-3r"}, /* Vector VRMLSLDAVH. Note must appear before VMLSDAV due to instruction opcode aliasing. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VRMLSLDAVH, 0xfe800e01, 0xff810f51, "vrmlsldavh%5A%X%v.s32\t%13-15l, %20-22h, %17-19,7Q, %1-3Q"}, /* Vector VMLSLDAV. Note must appear before VMLSDAV due to instruction opcdoe aliasing. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VMLSLDAV, 0xee800e01, 0xff800f51, "vmlsldav%5A%X%v.%u%16s\t%13-15l, %20-22h, %17-19,7Q, %1-3Q"}, /* Vector VMLSDAV T1 Variant. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VMLSDAV_T1, 0xeef00e01, 0xfff00f51, "vmlsdav%5A%X%v.s%16s\t%13-15l, %17-19,7Q, %1-3Q"}, /* Vector VMLSDAV T2 Variant. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VMLSDAV_T2, 0xfef00e01, 0xfff10f51, "vmlsdav%5A%X%v.s8\t%13-15l, %17-19,7Q, %1-3Q"}, /* Vector VMOV between gpr and half precision register, op == 0. */ - {ARM_FEATURE_COPROC (FPU_MVE_FP), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE_FP), MVE_VMOV_HFP_TO_GP, 0xee000910, 0xfff00f7f, "vmov.f16\t%7,16-19F, %12-15r"}, /* Vector VMOV between gpr and half precision register, op == 1. */ - {ARM_FEATURE_COPROC (FPU_MVE_FP), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE_FP), MVE_VMOV_HFP_TO_GP, 0xee100910, 0xfff00f7f, "vmov.f16\t%12-15r, %7,16-19F"}, - {ARM_FEATURE_COPROC (FPU_MVE_FP), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE_FP), MVE_VMOV_GP_TO_VEC_LANE, 0xee000b10, 0xff900f1f, "vmov%c.%5-6,21-22s\t%17-19,7Q[%N], %12-15r"}, @@ -2779,7 +2858,7 @@ /* Vector VORR immediate to vector. NOTE: MVE_VORR_IMM must appear in the table before MVE_VMOV_IMM_TO_VEC due to opcode aliasing. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VORR_IMM, 0xef800050, 0xefb810f0, "vorr%v.i%8-11s\t%13-15,22Q, %E"}, @@ -2787,7 +2866,7 @@ /* Vector VQSHL T2 Variant. NOTE: MVE_VQSHL_T2 must appear in the table before before MVE_VMOV_IMM_TO_VEC due to opcode aliasing. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VQSHL_T2, 0xef800750, 0xef801fd1, "vqshl%v.%u%19-21s\t%13-15,22Q, %1-3,5Q, #%16-18d"}, @@ -2796,7 +2875,7 @@ NOTE: MVE_VQSHL_T2 must appear in the table before before MVE_VMOV_IMM_TO_VEC due to opcode aliasing. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VQSHLU_T3, 0xff800650, 0xff801fd1, "vqshlu%v.s%19-21s\t%13-15,22Q, %1-3,5Q, #%16-18d"}, @@ -2804,7 +2883,7 @@ /* Vector VRSHR NOTE: MVE_VRSHR must appear in the table before before MVE_VMOV_IMM_TO_VEC due to opcode aliasing. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VRSHR, 0xef800250, 0xef801fd1, "vrshr%v.%u%19-21s\t%13-15,22Q, %1-3,5Q, #%16-18d"}, @@ -2812,7 +2891,7 @@ /* Vector VSHL. NOTE: MVE_VSHL must appear in the table before before MVE_VMOV_IMM_TO_VEC due to opcode aliasing. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VSHL_T1, 0xef800550, 0xff801fd1, "vshl%v.i%19-21s\t%13-15,22Q, %1-3,5Q, #%16-18d"}, @@ -2820,7 +2899,7 @@ /* Vector VSHR NOTE: MVE_VSHR must appear in the table before before MVE_VMOV_IMM_TO_VEC due to opcode aliasing. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VSHR, 0xef800050, 0xef801fd1, "vshr%v.%u%19-21s\t%13-15,22Q, %1-3,5Q, #%16-18d"}, @@ -2828,7 +2907,7 @@ /* Vector VSLI NOTE: MVE_VSLI must appear in the table before before MVE_VMOV_IMM_TO_VEC due to opcode aliasing. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VSLI, 0xff800550, 0xff801fd1, "vsli%v.%19-21s\t%13-15,22Q, %1-3,5Q, #%16-18d"}, @@ -2836,163 +2915,163 @@ /* Vector VSRI NOTE: MVE_VSRI must appear in the table before before MVE_VMOV_IMM_TO_VEC due to opcode aliasing. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VSRI, 0xff800450, 0xff801fd1, "vsri%v.%19-21s\t%13-15,22Q, %1-3,5Q, #%16-18d"}, /* Vector VMOV immediate to vector, undefinded for cmode == 1111 */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VMVN_IMM, 0xef800f70, 0xefb81ff0, UNDEFINED_INSTRUCTION}, /* Vector VMOV immediate to vector, cmode == 1101 */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VMOV_IMM_TO_VEC, 0xef800d50, 0xefb81fd0, "vmov%v.%5,8-11s\t%13-15,22Q, %E"}, /* Vector VMOV immediate to vector. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VMOV_IMM_TO_VEC, 0xef800050, 0xefb810d0, "vmov%v.%5,8-11s\t%13-15,22Q, %E"}, /* Vector VMOV two 32-bit lanes to two gprs, idx = 0. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VMOV2_VEC_LANE_TO_GP, 0xec000f00, 0xffb01ff0, "vmov%c\t%0-3r, %16-19r, %13-15,22Q[2], %13-15,22Q[0]"}, /* Vector VMOV two 32-bit lanes to two gprs, idx = 1. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VMOV2_VEC_LANE_TO_GP, 0xec000f10, 0xffb01ff0, "vmov%c\t%0-3r, %16-19r, %13-15,22Q[3], %13-15,22Q[1]"}, /* Vector VMOV Two gprs to two 32-bit lanes, idx = 0. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VMOV2_GP_TO_VEC_LANE, 0xec100f00, 0xffb01ff0, "vmov%c\t%13-15,22Q[2], %13-15,22Q[0], %0-3r, %16-19r"}, /* Vector VMOV Two gprs to two 32-bit lanes, idx = 1. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VMOV2_GP_TO_VEC_LANE, 0xec100f10, 0xffb01ff0, "vmov%c\t%13-15,22Q[2], %13-15,22Q[0], %0-3r, %16-19r"}, /* Vector VMOV Vector lane to gpr. */ - {ARM_FEATURE_COPROC (FPU_MVE_FP), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE_FP), MVE_VMOV_VEC_LANE_TO_GP, 0xee100b10, 0xff100f1f, "vmov%c.%u%5-6,21-22s\t%12-15r, %17-19,7Q[%N]"}, /* Vector VSHLL T1 Variant. Note: VSHLL T1 must appear before MVE_VMOVL due to instruction opcode aliasing. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VSHLL_T1, 0xeea00f40, 0xefa00fd1, "vshll%T%v.%u%19-20s\t%13-15,22Q, %1-3,5Q, #%16-18d"}, /* Vector VMOVL long. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VMOVL, 0xeea00f40, 0xefa70fd1, "vmovl%T%v.%u%19-20s\t%13-15,22Q, %1-3,5Q"}, /* Vector VMOV and narrow. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VMOVN, 0xfe310e81, 0xffb30fd1, "vmovn%T%v.i%18-19s\t%13-15,22Q, %1-3,5Q"}, /* Floating point move extract. */ - {ARM_FEATURE_COPROC (FPU_MVE_FP), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE_FP), MVE_VMOVX, 0xfeb00a40, 0xffbf0fd0, "vmovx.f16\t%22,12-15F, %5,0-3F"}, /* Vector VMUL floating-point T1 variant. */ - {ARM_FEATURE_COPROC (FPU_MVE_FP), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE_FP), MVE_VMUL_FP_T1, 0xff000d50, 0xffa11f51, "vmul%v.f%20s\t%13-15,22Q, %17-19,7Q, %1-3,5Q"}, /* Vector VMUL floating-point T2 variant. */ - {ARM_FEATURE_COPROC (FPU_MVE_FP), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE_FP), MVE_VMUL_FP_T2, 0xee310e60, 0xefb11f70, "vmul%v.f%28s\t%13-15,22Q, %17-19,7Q, %0-3r"}, /* Vector VMUL T1 variant. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VMUL_VEC_T1, 0xef000950, 0xff811f51, "vmul%v.i%20-21s\t%13-15,22Q, %17-19,7Q, %1-3,5Q"}, /* Vector VMUL T2 variant. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VMUL_VEC_T2, 0xee011e60, 0xff811f70, "vmul%v.i%20-21s\t%13-15,22Q, %17-19,7Q, %0-3r"}, /* Vector VMULH. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VMULH, 0xee010e01, 0xef811f51, "vmulh%v.%u%20-21s\t%13-15,22Q, %17-19,7Q, %1-3,5Q"}, /* Vector VRMULH. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VRMULH, 0xee011e01, 0xef811f51, "vrmulh%v.%u%20-21s\t%13-15,22Q, %17-19,7Q, %1-3,5Q"}, /* Vector VMULL integer. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VMULL_INT, 0xee010e00, 0xef810f51, "vmull%T%v.%u%20-21s\t%13-15,22Q, %17-19,7Q, %1-3,5Q"}, /* Vector VMULL polynomial. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VMULL_POLY, 0xee310e00, 0xefb10f51, "vmull%T%v.%28s\t%13-15,22Q, %17-19,7Q, %1-3,5Q"}, /* Vector VMVN immediate to vector. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VMVN_IMM, 0xef800070, 0xefb810f0, "vmvn%v.i%8-11s\t%13-15,22Q, %E"}, /* Vector VMVN register. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VMVN_REG, 0xffb005c0, 0xffbf1fd1, "vmvn%v\t%13-15,22Q, %1-3,5Q"}, /* Vector VNEG floating point. */ - {ARM_FEATURE_COPROC (FPU_MVE_FP), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE_FP), MVE_VNEG_FP, 0xffb107c0, 0xffb31fd1, "vneg%v.f%18-19s\t%13-15,22Q, %1-3,5Q"}, /* Vector VNEG. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VNEG_VEC, 0xffb103c0, 0xffb31fd1, "vneg%v.s%18-19s\t%13-15,22Q, %1-3,5Q"}, /* Vector VORN, vector bitwise or not. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VORN, 0xef300150, 0xffb11f51, "vorn%v\t%13-15,22Q, %17-19,7Q, %1-3,5Q"}, /* Vector VORR register. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VORR_REG, 0xef200150, 0xffb11f51, "vorr%v\t%13-15,22Q, %17-19,7Q, %1-3,5Q"}, @@ -3002,488 +3081,488 @@ MVE_VMOV_VEC_TO_VEC need to placed after MVE_VORR_REG in this mve_opcodes array. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VMOV_VEC_TO_VEC, 0xef200150, 0xffb11f51, "vmov%v\t%13-15,22Q, %17-19,7Q"}, /* Vector VQDMULL T1 variant. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VQDMULL_T1, 0xee300f01, 0xefb10f51, "vqdmull%T%v.s%28s\t%13-15,22Q, %17-19,7Q, %1-3,5Q"}, /* Vector VPNOT. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VPNOT, 0xfe310f4d, 0xffffffff, "vpnot%v"}, /* Vector VPSEL. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VPSEL, 0xfe310f01, 0xffb11f51, "vpsel%v\t%13-15,22Q, %17-19,7Q, %1-3,5Q"}, /* Vector VQABS. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VQABS, 0xffb00740, 0xffb31fd1, "vqabs%v.s%18-19s\t%13-15,22Q, %17-19,7Q, %1-3,5Q"}, /* Vector VQADD T1 variant. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VQADD_T1, 0xef000050, 0xef811f51, "vqadd%v.%u%20-21s\t%13-15,22Q, %17-19,7Q, %1-3,5Q"}, /* Vector VQADD T2 variant. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VQADD_T2, 0xee000f60, 0xef811f70, "vqadd%v.%u%20-21s\t%13-15,22Q, %17-19,7Q, %0-3r"}, /* Vector VQDMULL T2 variant. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VQDMULL_T2, 0xee300f60, 0xefb10f70, "vqdmull%T%v.s%28s\t%13-15,22Q, %17-19,7Q, %0-3r"}, /* Vector VQMOVN. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VQMOVN, 0xee330e01, 0xefb30fd1, "vqmovn%T%v.%u%18-19s\t%13-15,22Q, %1-3,5Q"}, /* Vector VQMOVUN. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VQMOVUN, 0xee310e81, 0xffb30fd1, "vqmovun%T%v.s%18-19s\t%13-15,22Q, %1-3,5Q"}, /* Vector VQDMLADH. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VQDMLADH, 0xee000e00, 0xff810f51, "vqdmladh%X%v.s%20-21s\t%13-15,22Q, %17-19,7Q, %1-3,5Q"}, /* Vector VQRDMLADH. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VQRDMLADH, 0xee000e01, 0xff810f51, "vqrdmladh%X%v.s%20-21s\t%13-15,22Q, %17-19,7Q, %1-3,5Q"}, /* Vector VQDMLAH. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VQDMLAH, 0xee000e60, 0xff811f70, "vqdmlah%v.%u%20-21s\t%13-15,22Q, %17-19,7Q, %0-3r"}, /* Vector VQRDMLAH. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VQRDMLAH, 0xee000e40, 0xff811f70, "vqrdmlah%v.%u%20-21s\t%13-15,22Q, %17-19,7Q, %0-3r"}, /* Vector VQDMLASH. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VQDMLASH, 0xee001e60, 0xff811f70, "vqdmlash%v.%u%20-21s\t%13-15,22Q, %17-19,7Q, %0-3r"}, /* Vector VQRDMLASH. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VQRDMLASH, 0xee001e40, 0xff811f70, "vqrdmlash%v.%u%20-21s\t%13-15,22Q, %17-19,7Q, %0-3r"}, /* Vector VQDMLSDH. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VQDMLSDH, 0xfe000e00, 0xff810f51, "vqdmlsdh%X%v.s%20-21s\t%13-15,22Q, %17-19,7Q, %1-3,5Q"}, /* Vector VQRDMLSDH. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VQRDMLSDH, 0xfe000e01, 0xff810f51, "vqrdmlsdh%X%v.s%20-21s\t%13-15,22Q, %17-19,7Q, %1-3,5Q"}, /* Vector VQDMULH T1 variant. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VQDMULH_T1, 0xef000b40, 0xff811f51, "vqdmulh%v.s%20-21s\t%13-15,22Q, %17-19,7Q, %1-3,5Q"}, /* Vector VQRDMULH T2 variant. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VQRDMULH_T2, 0xff000b40, 0xff811f51, "vqrdmulh%v.s%20-21s\t%13-15,22Q, %17-19,7Q, %1-3,5Q"}, /* Vector VQDMULH T3 variant. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VQDMULH_T3, 0xee010e60, 0xff811f70, "vqdmulh%v.s%20-21s\t%13-15,22Q, %17-19,7Q, %0-3r"}, /* Vector VQRDMULH T4 variant. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VQRDMULH_T4, 0xfe010e60, 0xff811f70, "vqrdmulh%v.s%20-21s\t%13-15,22Q, %17-19,7Q, %0-3r"}, /* Vector VQNEG. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VQNEG, 0xffb007c0, 0xffb31fd1, "vqneg%v.s%18-19s\t%13-15,22Q, %1-3,5Q"}, /* Vector VQRSHL T1 variant. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VQRSHL_T1, 0xef000550, 0xef811f51, "vqrshl%v.%u%20-21s\t%13-15,22Q, %1-3,5Q, %17-19,7Q"}, /* Vector VQRSHL T2 variant. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VQRSHL_T2, 0xee331ee0, 0xefb31ff0, "vqrshl%v.%u%18-19s\t%13-15,22Q, %0-3r"}, /* Vector VQRSHRN. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VQRSHRN, 0xee800f41, 0xefa00fd1, "vqrshrn%T%v.%u%19-20s\t%13-15,22Q, %1-3,5Q, #%16-18d"}, /* Vector VQRSHRUN. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VQRSHRUN, 0xfe800fc0, 0xffa00fd1, "vqrshrun%T%v.s%19-20s\t%13-15,22Q, %1-3,5Q, #%16-18d"}, /* Vector VQSHL T1 Variant. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VQSHL_T1, 0xee311ee0, 0xefb31ff0, "vqshl%v.%u%18-19s\t%13-15,22Q, %0-3r"}, /* Vector VQSHL T4 Variant. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VQSHL_T4, 0xef000450, 0xef811f51, "vqshl%v.%u%20-21s\t%13-15,22Q, %1-3,5Q, %17-19,7Q"}, /* Vector VQSHRN. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VQSHRN, 0xee800f40, 0xefa00fd1, "vqshrn%T%v.%u%19-20s\t%13-15,22Q, %1-3,5Q, #%16-18d"}, /* Vector VQSHRUN. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VQSHRUN, 0xee800fc0, 0xffa00fd1, "vqshrun%T%v.s%19-20s\t%13-15,22Q, %1-3,5Q, #%16-18d"}, /* Vector VQSUB T1 Variant. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VQSUB_T1, 0xef000250, 0xef811f51, "vqsub%v.%u%20-21s\t%13-15,22Q, %17-19,7Q, %1-3,5Q"}, /* Vector VQSUB T2 Variant. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VQSUB_T2, 0xee001f60, 0xef811f70, "vqsub%v.%u%20-21s\t%13-15,22Q, %17-19,7Q, %0-3r"}, /* Vector VREV16. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VREV16, 0xffb00140, 0xffb31fd1, "vrev16%v.8\t%13-15,22Q, %1-3,5Q"}, /* Vector VREV32. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VREV32, 0xffb000c0, 0xffb31fd1, "vrev32%v.%18-19s\t%13-15,22Q, %1-3,5Q"}, /* Vector VREV64. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VREV64, 0xffb00040, 0xffb31fd1, "vrev64%v.%18-19s\t%13-15,22Q, %1-3,5Q"}, /* Vector VRINT floating point. */ - {ARM_FEATURE_COPROC (FPU_MVE_FP), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE_FP), MVE_VRINT_FP, 0xffb20440, 0xffb31c51, "vrint%m%v.f%18-19s\t%13-15,22Q, %1-3,5Q"}, /* Vector VRMLALDAVH. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VRMLALDAVH, 0xee800f00, 0xef811f51, "vrmlalvh%5A%v.%u32\t%13-15l, %20-22h, %17-19,7Q, %1-3Q"}, /* Vector VRMLALDAVH. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VRMLALDAVH, 0xee801f00, 0xef811f51, "vrmlaldavh%5Ax%v.%u32\t%13-15l, %20-22h, %17-19,7Q, %1-3Q"}, /* Vector VRSHL T1 Variant. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VRSHL_T1, 0xef000540, 0xef811f51, "vrshl%v.%u%20-21s\t%13-15,22Q, %1-3,5Q, %17-19,7Q"}, /* Vector VRSHL T2 Variant. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VRSHL_T2, 0xee331e60, 0xefb31ff0, "vrshl%v.%u%18-19s\t%13-15,22Q, %0-3r"}, /* Vector VRSHRN. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VRSHRN, 0xfe800fc1, 0xffa00fd1, "vrshrn%T%v.i%19-20s\t%13-15,22Q, %1-3,5Q, #%16-18d"}, /* Vector VSBC. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VSBC, 0xfe300f00, 0xffb10f51, "vsbc%12I%v.i32\t%13-15,22Q, %17-19,7Q, %1-3,5Q"}, /* Vector VSHL T2 Variant. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VSHL_T2, 0xee311e60, 0xefb31ff0, "vshl%v.%u%18-19s\t%13-15,22Q, %0-3r"}, /* Vector VSHL T3 Variant. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VSHL_T3, 0xef000440, 0xef811f51, "vshl%v.%u%20-21s\t%13-15,22Q, %1-3,5Q, %17-19,7Q"}, /* Vector VSHLC. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VSHLC, 0xeea00fc0, 0xffa01ff0, "vshlc%v\t%13-15,22Q, %0-3r, #%16-20d"}, /* Vector VSHLL T2 Variant. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VSHLL_T2, 0xee310e01, 0xefb30fd1, "vshll%T%v.%u%18-19s\t%13-15,22Q, %1-3,5Q, #%18-19d"}, /* Vector VSHRN. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VSHRN, 0xee800fc1, 0xffa00fd1, "vshrn%T%v.i%19-20s\t%13-15,22Q, %1-3,5Q, #%16-18d"}, /* Vector VST2 no writeback. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VST2, 0xfc801e00, 0xffb01e5f, "vst2%5d.%7-8s\t%B, [%16-19r]"}, /* Vector VST2 writeback. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VST2, 0xfca01e00, 0xffb01e5f, "vst2%5d.%7-8s\t%B, [%16-19r]!"}, /* Vector VST4 no writeback. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VST4, 0xfc801e01, 0xffb01e1f, "vst4%5-6d.%7-8s\t%B, [%16-19r]"}, /* Vector VST4 writeback. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VST4, 0xfca01e01, 0xffb01e1f, "vst4%5-6d.%7-8s\t%B, [%16-19r]!"}, /* Vector VSTRB scatter store, T1 variant. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VSTRB_SCATTER_T1, 0xec800e00, 0xffb01e50, "vstrb%v.%7-8s\t%13-15,22Q, [%16-19r, %1-3,5Q]"}, /* Vector VSTRH scatter store, T2 variant. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VSTRH_SCATTER_T2, 0xec800e10, 0xffb01e50, "vstrh%v.%7-8s\t%13-15,22Q, [%16-19r, %1-3,5Q%o]"}, /* Vector VSTRW scatter store, T3 variant. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VSTRW_SCATTER_T3, 0xec800e40, 0xffb01e50, "vstrw%v.%7-8s\t%13-15,22Q, [%16-19r, %1-3,5Q%o]"}, /* Vector VSTRD scatter store, T4 variant. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VSTRD_SCATTER_T4, 0xec800fd0, 0xffb01fd0, "vstrd%v.64\t%13-15,22Q, [%16-19r, %1-3,5Q%o]"}, /* Vector VSTRW scatter store, T5 variant. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VSTRW_SCATTER_T5, 0xfd001e00, 0xff111f00, "vstrw%v.32\t%13-15,22Q, [%17-19,7Q, #%a%0-6i]%w"}, /* Vector VSTRD scatter store, T6 variant. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VSTRD_SCATTER_T6, 0xfd001f00, 0xff111f00, "vstrd%v.64\t%13-15,22Q, [%17-19,7Q, #%a%0-6i]%w"}, /* Vector VSTRB. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VSTRB_T1, 0xec000e00, 0xfe581e00, "vstrb%v.%7-8s\t%13-15Q, %d"}, /* Vector VSTRH. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VSTRH_T2, 0xec080e00, 0xfe581e00, "vstrh%v.%7-8s\t%13-15Q, %d"}, /* Vector VSTRB variant T5. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VSTRB_T5, 0xec001e00, 0xfe101f80, "vstrb%v.8\t%13-15,22Q, %d"}, /* Vector VSTRH variant T6. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VSTRH_T6, 0xec001e80, 0xfe101f80, "vstrh%v.16\t%13-15,22Q, %d"}, /* Vector VSTRW variant T7. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VSTRW_T7, 0xec001f00, 0xfe101f80, "vstrw%v.32\t%13-15,22Q, %d"}, /* Vector VSUB floating point T1 variant. */ - {ARM_FEATURE_COPROC (FPU_MVE_FP), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE_FP), MVE_VSUB_FP_T1, 0xef200d40, 0xffa11f51, "vsub%v.f%20s\t%13-15,22Q, %17-19,7Q, %1-3,5Q"}, /* Vector VSUB floating point T2 variant. */ - {ARM_FEATURE_COPROC (FPU_MVE_FP), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE_FP), MVE_VSUB_FP_T2, 0xee301f40, 0xefb11f70, "vsub%v.f%28s\t%13-15,22Q, %17-19,7Q, %0-3r"}, /* Vector VSUB T1 variant. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VSUB_VEC_T1, 0xff000840, 0xff811f51, "vsub%v.i%20-21s\t%13-15,22Q, %17-19,7Q, %1-3,5Q"}, /* Vector VSUB T2 variant. */ - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_VSUB_VEC_T2, 0xee011f40, 0xff811f70, "vsub%v.i%20-21s\t%13-15,22Q, %17-19,7Q, %0-3r"}, - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_ASRLI, 0xea50012f, 0xfff1813f, "asrl%c\t%17-19l, %9-11h, %j"}, - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_ASRL, 0xea50012d, 0xfff101ff, "asrl%c\t%17-19l, %9-11h, %12-15S"}, - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_LSLLI, 0xea50010f, 0xfff1813f, "lsll%c\t%17-19l, %9-11h, %j"}, - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_LSLL, 0xea50010d, 0xfff101ff, "lsll%c\t%17-19l, %9-11h, %12-15S"}, - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_LSRL, 0xea50011f, 0xfff1813f, "lsrl%c\t%17-19l, %9-11h, %j"}, - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_SQRSHRL, 0xea51012d, 0xfff1017f, "sqrshrl%c\t%17-19l, %9-11h, %k, %12-15S"}, - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_SQRSHR, 0xea500f2d, 0xfff00fff, "sqrshr%c\t%16-19S, %12-15S"}, - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_SQSHLL, 0xea51013f, 0xfff1813f, "sqshll%c\t%17-19l, %9-11h, %j"}, - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_SQSHL, 0xea500f3f, 0xfff08f3f, "sqshl%c\t%16-19S, %j"}, - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_SRSHRL, 0xea51012f, 0xfff1813f, "srshrl%c\t%17-19l, %9-11h, %j"}, - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_SRSHR, 0xea500f2f, 0xfff08f3f, "srshr%c\t%16-19S, %j"}, - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_UQRSHLL, 0xea51010d, 0xfff1017f, "uqrshll%c\t%17-19l, %9-11h, %k, %12-15S"}, - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_UQRSHL, 0xea500f0d, 0xfff00fff, "uqrshl%c\t%16-19S, %12-15S"}, - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_UQSHLL, 0xea51010f, 0xfff1813f, "uqshll%c\t%17-19l, %9-11h, %j"}, - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_UQSHL, 0xea500f0f, 0xfff08f3f, "uqshl%c\t%16-19S, %j"}, - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_URSHRL, 0xea51011f, 0xfff1813f, "urshrl%c\t%17-19l, %9-11h, %j"}, - {ARM_FEATURE_COPROC (FPU_MVE), + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE), MVE_URSHR, 0xea500f1f, 0xfff08f3f, "urshr%c\t%16-19S, %j"}, @@ -3606,6 +3685,10 @@ {ARM_FEATURE_CORE_HIGH (ARM_EXT2_RAS), 0xe320f010, 0xffffffff, "esb"}, + /* V8-R instructions. */ + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8R), + 0xf57ff04c, 0xffffffff, "dfb"}, + /* V8 instructions. */ {ARM_FEATURE_CORE_LOW (ARM_EXT_V8), 0x0320f005, 0x0fffffff, "sevl"}, @@ -4656,6 +4739,10 @@ {ARM_FEATURE_CORE_LOW (ARM_EXT_V8), 0xe8d000ff, 0xfff000ff, "ldaexd%c\t%12-15r, %8-11r, [%16-19R]"}, + /* V8-R instructions. */ + {ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8R), + 0xf3bf8f4c, 0xffffffff, "dfb%c"}, + /* CRC32 instructions. */ {ARM_FEATURE_CORE_HIGH (ARM_EXT2_CRC), 0xfac0f080, 0xfff0f0f0, "crc32b\t%8-11R, %16-19R, %0-3R"}, @@ -5115,7 +5202,8 @@ { "reg-names-atpcs", N_("Select register names used in the ATPCS"), { "a1", "a2", "a3", "a4", "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v8", "IP", "SP", "LR", "PC" }}, { "reg-names-special-atpcs", N_("Select special register names used in the ATPCS"), - { "a1", "a2", "a3", "a4", "v1", "v2", "v3", "WR", "v5", "SB", "SL", "FP", "IP", "SP", "LR", "PC" }} + { "a1", "a2", "a3", "a4", "v1", "v2", "v3", "WR", "v5", "SB", "SL", "FP", "IP", "SP", "LR", "PC" }}, + { "coproc<N>=(cde|generic)", N_("Enable CDE extensions for coprocessor N space"), { NULL } } }; static const char *const iwmmxt_wwnames[] = @@ -5195,6 +5283,7 @@ #define arm_regnames regnames[regname_selected].reg_names static bfd_boolean force_thumb = FALSE; +static uint16_t cde_coprocs = 0; /* Current IT instruction state. This contains the same state as the IT bits in the CPSR. */ @@ -6945,14 +7034,14 @@ return; } - // printU determines whether the immediate value should be printed as - // unsigned. + /* printU determines whether the immediate value should be printed as + unsigned. */ unsigned printU = 0; switch (insn->mve_op) { default: break; - // We want this for instructions that don't have a 'signed' type + /* We want this for instructions that don't have a 'signed' type. */ case MVE_VBIC_IMM: case MVE_VORR_IMM: case MVE_VMVN_IMM: @@ -8786,6 +8875,140 @@ return (signed long) offset; } + +/* Print one cde instruction on INFO->STREAM. + Return TRUE if the instuction matched, FALSE if this is not a + recognised cde instruction. */ +static bfd_boolean +print_insn_cde (struct disassemble_info *info, long given, bfd_boolean thumb) +{ + const struct cdeopcode32 *insn; + void *stream = info->stream; + fprintf_ftype func = info->fprintf_func; + + if (thumb) + { + /* Manually extract the coprocessor code from a known point. + This position is the same across all CDE instructions. */ + for (insn = cde_opcodes; insn->assembler; insn++) + { + uint16_t coproc = (given >> insn->coproc_shift) & insn->coproc_mask; + uint16_t coproc_mask = 1 << coproc; + if (! (coproc_mask & cde_coprocs)) + continue; + + if ((given & insn->mask) == insn->value) + { + bfd_boolean is_unpredictable = FALSE; + const char *c; + + for (c = insn->assembler; *c; c++) + { + if (*c == '%') + { + switch (*++c) + { + case '%': + func (stream, "%%"); + break; + + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + { + int width; + unsigned long value; + + c = arm_decode_bitfield (c, given, &value, &width); + + switch (*c) + { + case 'S': + if (value > 10) + is_unpredictable = TRUE; + /* Fall through. */ + case 'R': + if (value == 13) + is_unpredictable = TRUE; + /* Fall through. */ + case 'r': + func (stream, "%s", arm_regnames[value]); + break; + + case 'n': + if (value == 15) + func (stream, "%s", "APSR_nzcv"); + else + func (stream, "%s", arm_regnames[value]); + break; + + case 'T': + func (stream, "%s", arm_regnames[value + 1]); + break; + + case 'd': + func (stream, "%ld", value); + break; + + case 'V': + if (given & (1 << 6)) + func (stream, "q%ld", value >> 1); + else if (given & (1 << 24)) + func (stream, "d%ld", value); + else + { + /* Encoding for S register is different than for D and + Q registers. S registers are encoded using the top + single bit in position 22 as the lowest bit of the + register number, while for Q and D it represents the + highest bit of the register number. */ + uint8_t top_bit = (value >> 4) & 1; + uint8_t tmp = (value << 1) & 0x1e; + uint8_t res = tmp | top_bit; + func (stream, "s%u", res); + } + break; + + default: + abort (); + } + } + break; + + case 'p': + { + uint8_t proc_number = (given >> 8) & 0x7; + func (stream, "p%u", proc_number); + break; + } + + case 'a': + { + uint8_t a_offset = 28; + if (given & (1 << a_offset)) + func (stream, "a"); + break; + } + default: + abort (); + } + } + else + func (stream, "%c", *c); + } + + if (is_unpredictable) + func (stream, UNPREDICTABLE_INSTRUCTION); + + return TRUE; + } + } + return FALSE; + } + else + return FALSE; +} + + /* Print one neon instruction on INFO->STREAM. Return TRUE if the instuction matched, FALSE if this is not a recognised neon instruction. */ @@ -8817,13 +9040,51 @@ || (given & 0xff000000) == 0xfc000000) ; /* vdup is also a valid neon instruction. */ - else if ((given & 0xff910f5f) != 0xee800b10) + else if ((given & 0xff900f5f) != 0xee800b10) return FALSE; } for (insn = neon_opcodes; insn->assembler; insn++) { - if ((given & insn->mask) == insn->value) + unsigned long cond_mask = insn->mask; + unsigned long cond_value = insn->value; + int cond; + + if (thumb) + { + if ((cond_mask & 0xf0000000) == 0) { + /* For the entries in neon_opcodes, an opcode mask/value with + the high 4 bits equal to 0 indicates a conditional + instruction. For thumb however, we need to include those + bits in the instruction matching. */ + cond_mask |= 0xf0000000; + /* Furthermore, the thumb encoding of a conditional instruction + will have the high 4 bits equal to 0xe. */ + cond_value |= 0xe0000000; + } + if (ifthen_state) + cond = IFTHEN_COND; + else + cond = COND_UNCOND; + } + else + { + if ((given & 0xf0000000) == 0xf0000000) + { + /* If the instruction is unconditional, update the mask to only + match against unconditional opcode values. */ + cond_mask |= 0xf0000000; + cond = COND_UNCOND; + } + else + { + cond = (given >> 28) & 0xf; + if (cond == 0xe) + cond = COND_UNCOND; + } + } + + if ((given & cond_mask) == cond_value) { signed long value_in_comment = 0; bfd_boolean is_unpredictable = FALSE; @@ -8845,8 +9106,7 @@ /* Fall through. */ case 'c': - if (thumb && ifthen_state) - func (stream, "%s", arm_conditional[IFTHEN_COND]); + func (stream, "%s", arm_conditional[cond]); break; case 'A': @@ -9886,7 +10146,13 @@ case 'b': { bfd_vma disp = (((given & 0xffffff) ^ 0x800000) - 0x800000); - info->print_address_func (disp * 4 + pc + 8, info); + bfd_vma target = disp * 4 + pc + 8; + info->print_address_func (target, info); + + /* Fill in instruction information. */ + info->insn_info_valid = 1; + info->insn_type = dis_branch; + info->target = target; } break; @@ -9927,12 +10193,12 @@ unsigned int immed = (given & 0xff); unsigned int a, i; - a = (((immed << (32 - rotate)) - | (immed >> rotate)) & 0xffffffff); + a = (immed << ((32 - rotate) & 31) + | immed >> rotate) & 0xffffffff; /* If there is another encoding with smaller rotate, the rotate should be specified directly. */ for (i = 0; i < 32; i += 2) - if ((a << i | a >> (32 - i)) <= 0xff) + if ((a << i | a >> ((32 - i) & 31)) <= 0xff) break; if (i != rotate) @@ -10024,6 +10290,11 @@ address += 2; info->print_address_func (address, info); + + /* Fill in instruction information. */ + info->insn_info_valid = 1; + info->insn_type = dis_branch; + info->target = address; } break; @@ -10095,7 +10366,7 @@ case 'T': /* We want register + 1 when decoding T. */ if (*c == 'T') - ++value; + value = (value + 1) & 0xf; if (c[1] == 'u') { @@ -10388,6 +10659,11 @@ + ((given & 0x00f8) >> 2) + ((given & 0x0200) >> 3)); info->print_address_func (address, info); + + /* Fill in instruction information. */ + info->insn_info_valid = 1; + info->insn_type = dis_branch; + info->target = address; } break; @@ -10461,8 +10737,14 @@ case 'B': reg = ((reg ^ (1 << bitend)) - (1 << bitend)); - info->print_address_func (reg * 2 + pc + 4, info); + bfd_vma target = reg * 2 + pc + 4; + info->print_address_func (target, info); value_in_comment = 0; + + /* Fill in instruction information. */ + info->insn_info_valid = 1; + info->insn_type = dis_branch; + info->target = target; break; case 'c': @@ -10565,6 +10847,9 @@ if (is_mve && print_insn_mve (info, given)) return; + if (print_insn_cde (info, given, TRUE)) + return; + if (print_insn_generic_coprocessor (pc, info, given, TRUE)) return; @@ -11019,7 +11304,13 @@ offset |= (given & 0x000007ff) << 1; offset -= (1 << 20); - info->print_address_func (pc + 4 + offset, info); + bfd_vma target = pc + 4 + offset; + info->print_address_func (target, info); + + /* Fill in instruction information. */ + info->insn_info_valid = 1; + info->insn_type = dis_branch; + info->target = target; } break; @@ -11043,6 +11334,11 @@ offset &= ~2u; info->print_address_func (offset, info); + + /* Fill in instruction information. */ + info->insn_info_valid = 1; + info->insn_type = dis_branch; + info->target = offset; } break; @@ -11323,6 +11619,36 @@ force_thumb = 1; else if (CONST_STRNEQ (opt, "no-force-thumb")) force_thumb = 0; + else if (CONST_STRNEQ (opt, "coproc")) + { + const char *procptr = opt + sizeof ("coproc") - 1; + char *endptr; + uint8_t coproc_number = strtol (procptr, &endptr, 10); + if (endptr != procptr + 1 || coproc_number > 7) + { + opcodes_error_handler (_("cde coprocessor not between 0-7: %s"), + opt); + continue; + } + if (*endptr != '=') + { + opcodes_error_handler (_("coproc must have an argument: %s"), + opt); + continue; + } + endptr += 1; + if (CONST_STRNEQ (endptr, "generic")) + cde_coprocs &= ~(1 << coproc_number); + else if (CONST_STRNEQ (endptr, "cde") + || CONST_STRNEQ (endptr, "CDE")) + cde_coprocs |= (1 << coproc_number); + else + { + opcodes_error_handler ( + _("coprocN argument takes options \"generic\"," + " \"cde\", or \"CDE\": %s"), opt); + } + } else /* xgettext: c-format */ opcodes_error_handler (_("unrecognised disassembler option: %s"), opt); @@ -11681,11 +12007,18 @@ case bfd_mach_arm_8M_MAIN: ARM_SET_FEATURES (ARM_ARCH_V8M_MAIN); break; case bfd_mach_arm_8_1M_MAIN: ARM_SET_FEATURES (ARM_ARCH_V8_1M_MAIN); + arm_feature_set mve_all + = ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE | ARM_EXT2_MVE_FP); + ARM_MERGE_FEATURE_SETS (arch_fset, arch_fset, mve_all); force_thumb = 1; break; /* If the machine type is unknown allow all architecture types and all - extensions. */ - case bfd_mach_arm_unknown: ARM_SET_FEATURES (ARM_FEATURE_ALL); break; + extensions, with the exception of MVE as that clashes with NEON. */ + case bfd_mach_arm_unknown: + ARM_SET_FEATURES (ARM_FEATURE (-1, + -1 & ~(ARM_EXT2_MVE | ARM_EXT2_MVE_FP), + -1)); + break; default: abort (); } @@ -11705,7 +12038,7 @@ print_insn (bfd_vma pc, struct disassemble_info *info, bfd_boolean little) { unsigned char b[4]; - long given; + unsigned long given; int status; int is_thumb = FALSE; int is_data = FALSE; @@ -11715,6 +12048,14 @@ bfd_boolean found = FALSE; struct arm_private_data *private_data; + /* Clear instruction information field. */ + info->insn_info_valid = 0; + info->branch_delay_insns = 0; + info->data_size = 0; + info->insn_type = dis_noninsn; + info->target = 0; + info->target2 = 0; + if (info->disassembler_options) { parse_arm_disassembler_options (info->disassembler_options); @@ -11885,9 +12226,9 @@ status = info->read_memory_func (pc, (bfd_byte *) b, 4, info); if (little_code) - given = (b[0]) | (b[1] << 8) | (b[2] << 16) | (b[3] << 24); + given = (b[0]) | (b[1] << 8) | (b[2] << 16) | ((unsigned) b[3] << 24); else - given = (b[3]) | (b[2] << 8) | (b[1] << 16) | (b[0] << 24); + given = (b[3]) | (b[2] << 8) | (b[1] << 16) | ((unsigned) b[0] << 24); } else { diff -Nru gdb-9.1/opcodes/avr-dis.c gdb-10.2/opcodes/avr-dis.c --- gdb-9.1/opcodes/avr-dis.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/avr-dis.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Disassemble AVR instructions. - Copyright (C) 1999-2019 Free Software Foundation, Inc. + Copyright (C) 1999-2020 Free Software Foundation, Inc. Contributed by Denis Chertykov <denisc@overta.ru> diff -Nru gdb-9.1/opcodes/bfin-dis.c gdb-10.2/opcodes/bfin-dis.c --- gdb-9.1/opcodes/bfin-dis.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/bfin-dis.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Disassemble ADI Blackfin Instructions. - Copyright (C) 2005-2019 Free Software Foundation, Inc. + Copyright (C) 2005-2020 Free Software Foundation, Inc. This file is part of libopcodes. @@ -34,7 +34,7 @@ typedef long TIword; #define SIGNBIT(bits) (1ul << ((bits) - 1)) -#define MASKBITS(val, bits) ((val) & ((1ul << (bits)) - 1)) +#define MASKBITS(val, bits) ((val) & ((SIGNBIT (bits) << 1) - 1)) #define SIGNEXTEND(v, n) ((MASKBITS (v, n) ^ SIGNBIT (n)) - SIGNBIT (n)) #include "disassemble.h" @@ -128,7 +128,8 @@ if (constant_formats[cf].pcrel) x = SIGNEXTEND (x, constant_formats[cf].nbits); - ea = (x + constant_formats[cf].offset) << constant_formats[cf].scale; + ea = x + constant_formats[cf].offset; + ea = ea << constant_formats[cf].scale; if (constant_formats[cf].pcrel) ea += pc; @@ -152,17 +153,14 @@ { int nb = constant_formats[cf].nbits + 1; - x = x | (1 << constant_formats[cf].nbits); + x = x | (1ul << constant_formats[cf].nbits); x = SIGNEXTEND (x, nb); } else if (constant_formats[cf].issigned) x = SIGNEXTEND (x, constant_formats[cf].nbits); - if (constant_formats[cf].offset) - x += constant_formats[cf].offset; - - if (constant_formats[cf].scale) - x <<= constant_formats[cf].scale; + x += constant_formats[cf].offset; + x = (unsigned long) x << constant_formats[cf].scale; if (constant_formats[cf].decimal) sprintf (buf, "%*li", constant_formats[cf].leading, x); @@ -186,7 +184,8 @@ if (constant_formats[cf].pcrel) x = SIGNEXTEND (x, constant_formats[cf].nbits); - ea = (x + constant_formats[cf].offset) << constant_formats[cf].scale; + ea = x + constant_formats[cf].offset; + ea = ea << constant_formats[cf].scale; if (constant_formats[cf].pcrel) ea += pc; @@ -197,7 +196,7 @@ if (constant_formats[cf].negative) { int nb = constant_formats[cf].nbits + 1; - x = x | (1u << constant_formats[cf].nbits); + x = x | (1ul << constant_formats[cf].nbits); x = SIGNEXTEND (x, nb); } else if (constant_formats[cf].issigned) diff -Nru gdb-9.1/opcodes/bpf-asm.c gdb-10.2/opcodes/bpf-asm.c --- gdb-9.1/opcodes/bpf-asm.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/bpf-asm.c 2021-04-25 04:06:26.000000000 +0000 @@ -5,7 +5,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. - the resultant file is machine generated, cgen-asm.in isn't - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of libopcodes. diff -Nru gdb-9.1/opcodes/bpf-desc.c gdb-10.2/opcodes/bpf-desc.c --- gdb-9.1/opcodes/bpf-desc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/bpf-desc.c 2021-04-25 04:06:26.000000000 +0000 @@ -3,7 +3,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright (C) 1996-2019 Free Software Foundation, Inc. +Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of the GNU Binutils and/or GDB, the GNU debugger. @@ -48,6 +48,7 @@ { { "base", MACH_BASE }, { "bpf", MACH_BPF }, + { "xbpf", MACH_XBPF }, { "max", MACH_MAX }, { 0, 0 } }; @@ -56,6 +57,8 @@ { { "ebpfle", ISA_EBPFLE }, { "ebpfbe", ISA_EBPFBE }, + { "xbpfle", ISA_XBPFLE }, + { "xbpfbe", ISA_XBPFBE }, { "max", ISA_MAX }, { 0, 0 } }; @@ -119,8 +122,10 @@ /* Instruction set variants. */ static const CGEN_ISA bpf_cgen_isa_table[] = { - { "ebpfle", 64, 8, 64, 128 }, - { "ebpfbe", 64, 8, 64, 128 }, + { "ebpfle", 64, 64, 64, 128 }, + { "ebpfbe", 64, 64, 64, 128 }, + { "xbpfle", 64, 64, 64, 128 }, + { "xbpfbe", 64, 64, 64, 128 }, { 0, 0, 0, 0, 0 } }; @@ -128,6 +133,7 @@ static const CGEN_MACH bpf_cgen_mach_table[] = { { "bpf", "bpf", MACH_BPF, 0 }, + { "xbpf", "xbpf", MACH_XBPF, 0 }, { 0, 0, 0, 0 } }; @@ -144,8 +150,8 @@ { "%r8", 8, {0, {{{0, 0}}}}, 0, 0 }, { "%r9", 9, {0, {{{0, 0}}}}, 0, 0 }, { "%fp", 10, {0, {{{0, 0}}}}, 0, 0 }, - { "%a", 0, {0, {{{0, 0}}}}, 0, 0 }, - { "%ctx", 6, {0, {{{0, 0}}}}, 0, 0 }, + { "%r0", 0, {0, {{{0, 0}}}}, 0, 0 }, + { "%r6", 6, {0, {{{0, 0}}}}, 0, 0 }, { "%r10", 10, {0, {{{0, 0}}}}, 0, 0 } }; @@ -163,14 +169,14 @@ const CGEN_HW_ENTRY bpf_cgen_hw_table[] = { - { "h-memory", HW_H_MEMORY, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xc0" } } } } }, - { "h-sint", HW_H_SINT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xc0" } } } } }, - { "h-uint", HW_H_UINT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xc0" } } } } }, - { "h-addr", HW_H_ADDR, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xc0" } } } } }, - { "h-iaddr", HW_H_IADDR, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xc0" } } } } }, - { "h-gpr", HW_H_GPR, CGEN_ASM_KEYWORD, (PTR) & bpf_cgen_opval_h_gpr, { 0, { { { (1<<MACH_BPF), 0 } }, { { 1, "\xc0" } } } } }, - { "h-pc", HW_H_PC, CGEN_ASM_NONE, 0, { 0|A(PROFILE)|A(PC), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } }, - { "h-sint64", HW_H_SINT64, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xc0" } } } } }, + { "h-memory", HW_H_MEMORY, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } } }, + { "h-sint", HW_H_SINT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } } }, + { "h-uint", HW_H_UINT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } } }, + { "h-addr", HW_H_ADDR, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } } }, + { "h-iaddr", HW_H_IADDR, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } } }, + { "h-gpr", HW_H_GPR, CGEN_ASM_KEYWORD, (PTR) & bpf_cgen_opval_h_gpr, { 0, { { { (1<<MACH_BPF)|(1<<MACH_XBPF), 0 } }, { { 1, "\xf0" } } } } }, + { "h-pc", HW_H_PC, CGEN_ASM_NONE, 0, { 0|A(PROFILE)|A(PC), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } } }, + { "h-sint64", HW_H_SINT64, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } } }, { 0, 0, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } } }; @@ -183,24 +189,24 @@ const CGEN_IFLD bpf_cgen_ifld_table[] = { - { BPF_F_NIL, "f-nil", 0, 0, 0, 0, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xc0" } } } } }, - { BPF_F_ANYOF, "f-anyof", 0, 0, 0, 0, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xc0" } } } } }, - { BPF_F_OP_CODE, "f-op-code", 0, 8, 7, 4, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xc0" } } } } }, - { BPF_F_OP_SRC, "f-op-src", 0, 8, 3, 1, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xc0" } } } } }, - { BPF_F_OP_CLASS, "f-op-class", 0, 8, 2, 3, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xc0" } } } } }, - { BPF_F_OP_MODE, "f-op-mode", 0, 8, 7, 3, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xc0" } } } } }, - { BPF_F_OP_SIZE, "f-op-size", 0, 8, 4, 2, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xc0" } } } } }, - { BPF_F_DSTLE, "f-dstle", 8, 8, 3, 4, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } }, - { BPF_F_SRCLE, "f-srcle", 8, 8, 7, 4, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } }, - { BPF_F_DSTBE, "f-dstbe", 8, 8, 7, 4, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } }, - { BPF_F_SRCBE, "f-srcbe", 8, 8, 3, 4, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } }, - { BPF_F_REGS, "f-regs", 8, 8, 7, 8, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xc0" } } } } }, - { BPF_F_OFFSET16, "f-offset16", 16, 16, 15, 16, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xc0" } } } } }, - { BPF_F_IMM32, "f-imm32", 32, 32, 31, 32, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xc0" } } } } }, - { BPF_F_IMM64_A, "f-imm64-a", 32, 32, 31, 32, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xc0" } } } } }, - { BPF_F_IMM64_B, "f-imm64-b", 64, 32, 31, 32, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xc0" } } } } }, - { BPF_F_IMM64_C, "f-imm64-c", 96, 32, 31, 32, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xc0" } } } } }, - { BPF_F_IMM64, "f-imm64", 0, 0, 0, 0,{ 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xc0" } } } } }, + { BPF_F_NIL, "f-nil", 0, 0, 0, 0, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } } }, + { BPF_F_ANYOF, "f-anyof", 0, 0, 0, 0, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } } }, + { BPF_F_OP_CODE, "f-op-code", 0, 8, 7, 4, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } } }, + { BPF_F_OP_SRC, "f-op-src", 0, 8, 3, 1, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } } }, + { BPF_F_OP_CLASS, "f-op-class", 0, 8, 2, 3, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } } }, + { BPF_F_OP_MODE, "f-op-mode", 0, 8, 7, 3, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } } }, + { BPF_F_OP_SIZE, "f-op-size", 0, 8, 4, 2, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } } }, + { BPF_F_DSTLE, "f-dstle", 8, 8, 3, 4, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, + { BPF_F_SRCLE, "f-srcle", 8, 8, 7, 4, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, + { BPF_F_DSTBE, "f-dstbe", 8, 8, 7, 4, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, + { BPF_F_SRCBE, "f-srcbe", 8, 8, 3, 4, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, + { BPF_F_REGS, "f-regs", 8, 8, 7, 8, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } } }, + { BPF_F_OFFSET16, "f-offset16", 16, 16, 15, 16, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } } }, + { BPF_F_IMM32, "f-imm32", 32, 32, 31, 32, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } } }, + { BPF_F_IMM64_A, "f-imm64-a", 32, 32, 31, 32, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } } }, + { BPF_F_IMM64_B, "f-imm64-b", 64, 32, 31, 32, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } } }, + { BPF_F_IMM64_C, "f-imm64-c", 96, 32, 31, 32, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } } }, + { BPF_F_IMM64, "f-imm64", 0, 0, 0, 0,{ 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } } }, { 0, 0, 0, 0, 0, 0, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } } }; @@ -233,47 +239,47 @@ /* pc: program counter */ { "pc", BPF_OPERAND_PC, HW_H_PC, 0, 0, { 0, { (const PTR) &bpf_cgen_ifld_table[BPF_F_NIL] } }, - { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xc0" } } } } }, + { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } } }, /* dstle: destination register */ { "dstle", BPF_OPERAND_DSTLE, HW_H_GPR, 3, 4, { 0, { (const PTR) &bpf_cgen_ifld_table[BPF_F_DSTLE] } }, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } }, + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* srcle: source register */ { "srcle", BPF_OPERAND_SRCLE, HW_H_GPR, 7, 4, { 0, { (const PTR) &bpf_cgen_ifld_table[BPF_F_SRCLE] } }, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } }, + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* dstbe: destination register */ { "dstbe", BPF_OPERAND_DSTBE, HW_H_GPR, 7, 4, { 0, { (const PTR) &bpf_cgen_ifld_table[BPF_F_DSTBE] } }, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } }, + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* srcbe: source register */ { "srcbe", BPF_OPERAND_SRCBE, HW_H_GPR, 3, 4, { 0, { (const PTR) &bpf_cgen_ifld_table[BPF_F_SRCBE] } }, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } }, + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* disp16: 16-bit PC-relative address */ { "disp16", BPF_OPERAND_DISP16, HW_H_SINT, 15, 16, { 0, { (const PTR) &bpf_cgen_ifld_table[BPF_F_OFFSET16] } }, - { 0|A(PCREL_ADDR), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xc0" } } } } }, + { 0|A(PCREL_ADDR), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } } }, /* disp32: 32-bit PC-relative address */ { "disp32", BPF_OPERAND_DISP32, HW_H_SINT, 31, 32, { 0, { (const PTR) &bpf_cgen_ifld_table[BPF_F_IMM32] } }, - { 0|A(PCREL_ADDR), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xc0" } } } } }, + { 0|A(PCREL_ADDR), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } } }, /* imm32: 32-bit immediate */ { "imm32", BPF_OPERAND_IMM32, HW_H_SINT, 31, 32, { 0, { (const PTR) &bpf_cgen_ifld_table[BPF_F_IMM32] } }, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xc0" } } } } }, + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } } }, /* offset16: 16-bit offset */ { "offset16", BPF_OPERAND_OFFSET16, HW_H_SINT, 15, 16, { 0, { (const PTR) &bpf_cgen_ifld_table[BPF_F_OFFSET16] } }, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xc0" } } } } }, + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } } }, /* imm64: 64-bit immediate */ { "imm64", BPF_OPERAND_IMM64, HW_H_SINT64, 31, 96, { 3, { (const PTR) &BPF_F_IMM64_MULTI_IFIELD[0] } }, - { 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xc0" } } } } }, + { 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } } }, /* endsize: endianness size immediate: 16, 32 or 64 */ { "endsize", BPF_OPERAND_ENDSIZE, HW_H_UINT, 31, 32, { 0, { (const PTR) &bpf_cgen_ifld_table[BPF_F_IMM32] } }, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xc0" } } } } }, + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } } }, /* sentinel */ { 0, 0, 0, 0, 0, { 0, { (const PTR) 0 } }, @@ -297,967 +303,1207 @@ /* add $dstle,$imm32 */ { BPF_INSN_ADDILE, "addile", "add", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* add $dstle,$srcle */ { BPF_INSN_ADDRLE, "addrle", "add", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* add32 $dstle,$imm32 */ { BPF_INSN_ADD32ILE, "add32ile", "add32", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* add32 $dstle,$srcle */ { BPF_INSN_ADD32RLE, "add32rle", "add32", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* sub $dstle,$imm32 */ { BPF_INSN_SUBILE, "subile", "sub", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* sub $dstle,$srcle */ { BPF_INSN_SUBRLE, "subrle", "sub", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* sub32 $dstle,$imm32 */ { BPF_INSN_SUB32ILE, "sub32ile", "sub32", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* sub32 $dstle,$srcle */ { BPF_INSN_SUB32RLE, "sub32rle", "sub32", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* mul $dstle,$imm32 */ { BPF_INSN_MULILE, "mulile", "mul", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* mul $dstle,$srcle */ { BPF_INSN_MULRLE, "mulrle", "mul", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* mul32 $dstle,$imm32 */ { BPF_INSN_MUL32ILE, "mul32ile", "mul32", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* mul32 $dstle,$srcle */ { BPF_INSN_MUL32RLE, "mul32rle", "mul32", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* div $dstle,$imm32 */ { BPF_INSN_DIVILE, "divile", "div", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* div $dstle,$srcle */ { BPF_INSN_DIVRLE, "divrle", "div", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* div32 $dstle,$imm32 */ { BPF_INSN_DIV32ILE, "div32ile", "div32", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* div32 $dstle,$srcle */ { BPF_INSN_DIV32RLE, "div32rle", "div32", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* or $dstle,$imm32 */ { BPF_INSN_ORILE, "orile", "or", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* or $dstle,$srcle */ { BPF_INSN_ORRLE, "orrle", "or", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* or32 $dstle,$imm32 */ { BPF_INSN_OR32ILE, "or32ile", "or32", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* or32 $dstle,$srcle */ { BPF_INSN_OR32RLE, "or32rle", "or32", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* and $dstle,$imm32 */ { BPF_INSN_ANDILE, "andile", "and", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* and $dstle,$srcle */ { BPF_INSN_ANDRLE, "andrle", "and", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* and32 $dstle,$imm32 */ { BPF_INSN_AND32ILE, "and32ile", "and32", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* and32 $dstle,$srcle */ { BPF_INSN_AND32RLE, "and32rle", "and32", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* lsh $dstle,$imm32 */ { BPF_INSN_LSHILE, "lshile", "lsh", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* lsh $dstle,$srcle */ { BPF_INSN_LSHRLE, "lshrle", "lsh", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* lsh32 $dstle,$imm32 */ { BPF_INSN_LSH32ILE, "lsh32ile", "lsh32", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* lsh32 $dstle,$srcle */ { BPF_INSN_LSH32RLE, "lsh32rle", "lsh32", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* rsh $dstle,$imm32 */ { BPF_INSN_RSHILE, "rshile", "rsh", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* rsh $dstle,$srcle */ { BPF_INSN_RSHRLE, "rshrle", "rsh", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* rsh32 $dstle,$imm32 */ { BPF_INSN_RSH32ILE, "rsh32ile", "rsh32", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* rsh32 $dstle,$srcle */ { BPF_INSN_RSH32RLE, "rsh32rle", "rsh32", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* mod $dstle,$imm32 */ { BPF_INSN_MODILE, "modile", "mod", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* mod $dstle,$srcle */ { BPF_INSN_MODRLE, "modrle", "mod", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* mod32 $dstle,$imm32 */ { BPF_INSN_MOD32ILE, "mod32ile", "mod32", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* mod32 $dstle,$srcle */ { BPF_INSN_MOD32RLE, "mod32rle", "mod32", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* xor $dstle,$imm32 */ { BPF_INSN_XORILE, "xorile", "xor", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* xor $dstle,$srcle */ { BPF_INSN_XORRLE, "xorrle", "xor", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* xor32 $dstle,$imm32 */ { BPF_INSN_XOR32ILE, "xor32ile", "xor32", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* xor32 $dstle,$srcle */ { BPF_INSN_XOR32RLE, "xor32rle", "xor32", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } - }, -/* mov $dstle,$imm32 */ - { - BPF_INSN_MOVILE, "movile", "mov", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } - }, -/* mov $dstle,$srcle */ - { - BPF_INSN_MOVRLE, "movrle", "mov", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } - }, -/* mov32 $dstle,$imm32 */ - { - BPF_INSN_MOV32ILE, "mov32ile", "mov32", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } - }, -/* mov32 $dstle,$srcle */ - { - BPF_INSN_MOV32RLE, "mov32rle", "mov32", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* arsh $dstle,$imm32 */ { BPF_INSN_ARSHILE, "arshile", "arsh", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* arsh $dstle,$srcle */ { BPF_INSN_ARSHRLE, "arshrle", "arsh", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* arsh32 $dstle,$imm32 */ { BPF_INSN_ARSH32ILE, "arsh32ile", "arsh32", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* arsh32 $dstle,$srcle */ { BPF_INSN_ARSH32RLE, "arsh32rle", "arsh32", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* neg $dstle */ { BPF_INSN_NEGLE, "negle", "neg", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* neg32 $dstle */ { BPF_INSN_NEG32LE, "neg32le", "neg32", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } + }, +/* mov $dstle,$imm32 */ + { + BPF_INSN_MOVILE, "movile", "mov", 64, + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } + }, +/* mov $dstle,$srcle */ + { + BPF_INSN_MOVRLE, "movrle", "mov", 64, + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } + }, +/* mov32 $dstle,$imm32 */ + { + BPF_INSN_MOV32ILE, "mov32ile", "mov32", 64, + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } + }, +/* mov32 $dstle,$srcle */ + { + BPF_INSN_MOV32RLE, "mov32rle", "mov32", 64, + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* add $dstbe,$imm32 */ { BPF_INSN_ADDIBE, "addibe", "add", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* add $dstbe,$srcbe */ { BPF_INSN_ADDRBE, "addrbe", "add", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* add32 $dstbe,$imm32 */ { BPF_INSN_ADD32IBE, "add32ibe", "add32", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* add32 $dstbe,$srcbe */ { BPF_INSN_ADD32RBE, "add32rbe", "add32", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* sub $dstbe,$imm32 */ { BPF_INSN_SUBIBE, "subibe", "sub", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* sub $dstbe,$srcbe */ { BPF_INSN_SUBRBE, "subrbe", "sub", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* sub32 $dstbe,$imm32 */ { BPF_INSN_SUB32IBE, "sub32ibe", "sub32", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* sub32 $dstbe,$srcbe */ { BPF_INSN_SUB32RBE, "sub32rbe", "sub32", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* mul $dstbe,$imm32 */ { BPF_INSN_MULIBE, "mulibe", "mul", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* mul $dstbe,$srcbe */ { BPF_INSN_MULRBE, "mulrbe", "mul", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* mul32 $dstbe,$imm32 */ { BPF_INSN_MUL32IBE, "mul32ibe", "mul32", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* mul32 $dstbe,$srcbe */ { BPF_INSN_MUL32RBE, "mul32rbe", "mul32", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* div $dstbe,$imm32 */ { BPF_INSN_DIVIBE, "divibe", "div", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* div $dstbe,$srcbe */ { BPF_INSN_DIVRBE, "divrbe", "div", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* div32 $dstbe,$imm32 */ { BPF_INSN_DIV32IBE, "div32ibe", "div32", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* div32 $dstbe,$srcbe */ { BPF_INSN_DIV32RBE, "div32rbe", "div32", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* or $dstbe,$imm32 */ { BPF_INSN_ORIBE, "oribe", "or", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* or $dstbe,$srcbe */ { BPF_INSN_ORRBE, "orrbe", "or", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* or32 $dstbe,$imm32 */ { BPF_INSN_OR32IBE, "or32ibe", "or32", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* or32 $dstbe,$srcbe */ { BPF_INSN_OR32RBE, "or32rbe", "or32", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* and $dstbe,$imm32 */ { BPF_INSN_ANDIBE, "andibe", "and", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* and $dstbe,$srcbe */ { BPF_INSN_ANDRBE, "andrbe", "and", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* and32 $dstbe,$imm32 */ { BPF_INSN_AND32IBE, "and32ibe", "and32", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* and32 $dstbe,$srcbe */ { BPF_INSN_AND32RBE, "and32rbe", "and32", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* lsh $dstbe,$imm32 */ { BPF_INSN_LSHIBE, "lshibe", "lsh", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* lsh $dstbe,$srcbe */ { BPF_INSN_LSHRBE, "lshrbe", "lsh", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* lsh32 $dstbe,$imm32 */ { BPF_INSN_LSH32IBE, "lsh32ibe", "lsh32", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* lsh32 $dstbe,$srcbe */ { BPF_INSN_LSH32RBE, "lsh32rbe", "lsh32", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* rsh $dstbe,$imm32 */ { BPF_INSN_RSHIBE, "rshibe", "rsh", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* rsh $dstbe,$srcbe */ { BPF_INSN_RSHRBE, "rshrbe", "rsh", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* rsh32 $dstbe,$imm32 */ { BPF_INSN_RSH32IBE, "rsh32ibe", "rsh32", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* rsh32 $dstbe,$srcbe */ { BPF_INSN_RSH32RBE, "rsh32rbe", "rsh32", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* mod $dstbe,$imm32 */ { BPF_INSN_MODIBE, "modibe", "mod", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* mod $dstbe,$srcbe */ { BPF_INSN_MODRBE, "modrbe", "mod", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* mod32 $dstbe,$imm32 */ { BPF_INSN_MOD32IBE, "mod32ibe", "mod32", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* mod32 $dstbe,$srcbe */ { BPF_INSN_MOD32RBE, "mod32rbe", "mod32", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* xor $dstbe,$imm32 */ { BPF_INSN_XORIBE, "xoribe", "xor", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* xor $dstbe,$srcbe */ { BPF_INSN_XORRBE, "xorrbe", "xor", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* xor32 $dstbe,$imm32 */ { BPF_INSN_XOR32IBE, "xor32ibe", "xor32", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* xor32 $dstbe,$srcbe */ { BPF_INSN_XOR32RBE, "xor32rbe", "xor32", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } - }, -/* mov $dstbe,$imm32 */ - { - BPF_INSN_MOVIBE, "movibe", "mov", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } - }, -/* mov $dstbe,$srcbe */ - { - BPF_INSN_MOVRBE, "movrbe", "mov", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } - }, -/* mov32 $dstbe,$imm32 */ - { - BPF_INSN_MOV32IBE, "mov32ibe", "mov32", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } - }, -/* mov32 $dstbe,$srcbe */ - { - BPF_INSN_MOV32RBE, "mov32rbe", "mov32", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* arsh $dstbe,$imm32 */ { BPF_INSN_ARSHIBE, "arshibe", "arsh", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* arsh $dstbe,$srcbe */ { BPF_INSN_ARSHRBE, "arshrbe", "arsh", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* arsh32 $dstbe,$imm32 */ { BPF_INSN_ARSH32IBE, "arsh32ibe", "arsh32", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* arsh32 $dstbe,$srcbe */ { BPF_INSN_ARSH32RBE, "arsh32rbe", "arsh32", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* neg $dstbe */ { BPF_INSN_NEGBE, "negbe", "neg", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* neg32 $dstbe */ { BPF_INSN_NEG32BE, "neg32be", "neg32", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } + }, +/* mov $dstbe,$imm32 */ + { + BPF_INSN_MOVIBE, "movibe", "mov", 64, + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } + }, +/* mov $dstbe,$srcbe */ + { + BPF_INSN_MOVRBE, "movrbe", "mov", 64, + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } + }, +/* mov32 $dstbe,$imm32 */ + { + BPF_INSN_MOV32IBE, "mov32ibe", "mov32", 64, + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } + }, +/* mov32 $dstbe,$srcbe */ + { + BPF_INSN_MOV32RBE, "mov32rbe", "mov32", 64, + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* endle $dstle,$endsize */ { BPF_INSN_ENDLELE, "endlele", "endle", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* endbe $dstle,$endsize */ { BPF_INSN_ENDBELE, "endbele", "endbe", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* endle $dstbe,$endsize */ { BPF_INSN_ENDLEBE, "endlebe", "endle", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* endbe $dstbe,$endsize */ { BPF_INSN_ENDBEBE, "endbebe", "endbe", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* lddw $dstle,$imm64 */ { BPF_INSN_LDDWLE, "lddwle", "lddw", 128, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* lddw $dstbe,$imm64 */ { BPF_INSN_LDDWBE, "lddwbe", "lddw", 128, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* ldabsw $imm32 */ { BPF_INSN_LDABSW, "ldabsw", "ldabsw", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xc0" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } } }, /* ldabsh $imm32 */ { BPF_INSN_LDABSH, "ldabsh", "ldabsh", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xc0" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } } }, /* ldabsb $imm32 */ { BPF_INSN_LDABSB, "ldabsb", "ldabsb", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xc0" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } } }, /* ldabsdw $imm32 */ { BPF_INSN_LDABSDW, "ldabsdw", "ldabsdw", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xc0" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } } }, /* ldindw $srcle,$imm32 */ { BPF_INSN_LDINDWLE, "ldindwle", "ldindw", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* ldindh $srcle,$imm32 */ { BPF_INSN_LDINDHLE, "ldindhle", "ldindh", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* ldindb $srcle,$imm32 */ { BPF_INSN_LDINDBLE, "ldindble", "ldindb", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* ldinddw $srcle,$imm32 */ { BPF_INSN_LDINDDWLE, "ldinddwle", "ldinddw", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* ldindw $srcbe,$imm32 */ { BPF_INSN_LDINDWBE, "ldindwbe", "ldindw", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* ldindh $srcbe,$imm32 */ { BPF_INSN_LDINDHBE, "ldindhbe", "ldindh", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* ldindb $srcbe,$imm32 */ { BPF_INSN_LDINDBBE, "ldindbbe", "ldindb", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* ldinddw $srcbe,$imm32 */ { BPF_INSN_LDINDDWBE, "ldinddwbe", "ldinddw", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* ldxw $dstle,[$srcle+$offset16] */ { BPF_INSN_LDXWLE, "ldxwle", "ldxw", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* ldxh $dstle,[$srcle+$offset16] */ { BPF_INSN_LDXHLE, "ldxhle", "ldxh", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* ldxb $dstle,[$srcle+$offset16] */ { BPF_INSN_LDXBLE, "ldxble", "ldxb", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* ldxdw $dstle,[$srcle+$offset16] */ { BPF_INSN_LDXDWLE, "ldxdwle", "ldxdw", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* stxw [$dstle+$offset16],$srcle */ { BPF_INSN_STXWLE, "stxwle", "stxw", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* stxh [$dstle+$offset16],$srcle */ { BPF_INSN_STXHLE, "stxhle", "stxh", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* stxb [$dstle+$offset16],$srcle */ { BPF_INSN_STXBLE, "stxble", "stxb", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* stxdw [$dstle+$offset16],$srcle */ { BPF_INSN_STXDWLE, "stxdwle", "stxdw", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* ldxw $dstbe,[$srcbe+$offset16] */ { BPF_INSN_LDXWBE, "ldxwbe", "ldxw", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* ldxh $dstbe,[$srcbe+$offset16] */ { BPF_INSN_LDXHBE, "ldxhbe", "ldxh", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* ldxb $dstbe,[$srcbe+$offset16] */ { BPF_INSN_LDXBBE, "ldxbbe", "ldxb", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* ldxdw $dstbe,[$srcbe+$offset16] */ { BPF_INSN_LDXDWBE, "ldxdwbe", "ldxdw", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* stxw [$dstbe+$offset16],$srcbe */ { BPF_INSN_STXWBE, "stxwbe", "stxw", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* stxh [$dstbe+$offset16],$srcbe */ { BPF_INSN_STXHBE, "stxhbe", "stxh", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* stxb [$dstbe+$offset16],$srcbe */ { BPF_INSN_STXBBE, "stxbbe", "stxb", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* stxdw [$dstbe+$offset16],$srcbe */ { BPF_INSN_STXDWBE, "stxdwbe", "stxdw", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* stb [$dstle+$offset16],$imm32 */ { BPF_INSN_STBLE, "stble", "stb", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* sth [$dstle+$offset16],$imm32 */ { BPF_INSN_STHLE, "sthle", "sth", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* stw [$dstle+$offset16],$imm32 */ { BPF_INSN_STWLE, "stwle", "stw", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* stdw [$dstle+$offset16],$imm32 */ { BPF_INSN_STDWLE, "stdwle", "stdw", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* stb [$dstbe+$offset16],$imm32 */ { BPF_INSN_STBBE, "stbbe", "stb", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* sth [$dstbe+$offset16],$imm32 */ { BPF_INSN_STHBE, "sthbe", "sth", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* stw [$dstbe+$offset16],$imm32 */ { BPF_INSN_STWBE, "stwbe", "stw", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* stdw [$dstbe+$offset16],$imm32 */ { BPF_INSN_STDWBE, "stdwbe", "stdw", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* jeq $dstle,$imm32,$disp16 */ { BPF_INSN_JEQILE, "jeqile", "jeq", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* jeq $dstle,$srcle,$disp16 */ { BPF_INSN_JEQRLE, "jeqrle", "jeq", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } + }, +/* jeq32 $dstle,$imm32,$disp16 */ + { + BPF_INSN_JEQ32ILE, "jeq32ile", "jeq32", 64, + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } + }, +/* jeq32 $dstle,$srcle,$disp16 */ + { + BPF_INSN_JEQ32RLE, "jeq32rle", "jeq32", 64, + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* jgt $dstle,$imm32,$disp16 */ { BPF_INSN_JGTILE, "jgtile", "jgt", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* jgt $dstle,$srcle,$disp16 */ { BPF_INSN_JGTRLE, "jgtrle", "jgt", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } + }, +/* jgt32 $dstle,$imm32,$disp16 */ + { + BPF_INSN_JGT32ILE, "jgt32ile", "jgt32", 64, + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } + }, +/* jgt32 $dstle,$srcle,$disp16 */ + { + BPF_INSN_JGT32RLE, "jgt32rle", "jgt32", 64, + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* jge $dstle,$imm32,$disp16 */ { BPF_INSN_JGEILE, "jgeile", "jge", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* jge $dstle,$srcle,$disp16 */ { BPF_INSN_JGERLE, "jgerle", "jge", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } + }, +/* jge32 $dstle,$imm32,$disp16 */ + { + BPF_INSN_JGE32ILE, "jge32ile", "jge32", 64, + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } + }, +/* jge32 $dstle,$srcle,$disp16 */ + { + BPF_INSN_JGE32RLE, "jge32rle", "jge32", 64, + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* jlt $dstle,$imm32,$disp16 */ { BPF_INSN_JLTILE, "jltile", "jlt", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* jlt $dstle,$srcle,$disp16 */ { BPF_INSN_JLTRLE, "jltrle", "jlt", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } + }, +/* jlt32 $dstle,$imm32,$disp16 */ + { + BPF_INSN_JLT32ILE, "jlt32ile", "jlt32", 64, + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } + }, +/* jlt32 $dstle,$srcle,$disp16 */ + { + BPF_INSN_JLT32RLE, "jlt32rle", "jlt32", 64, + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* jle $dstle,$imm32,$disp16 */ { BPF_INSN_JLEILE, "jleile", "jle", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* jle $dstle,$srcle,$disp16 */ { BPF_INSN_JLERLE, "jlerle", "jle", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } + }, +/* jle32 $dstle,$imm32,$disp16 */ + { + BPF_INSN_JLE32ILE, "jle32ile", "jle32", 64, + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } + }, +/* jle32 $dstle,$srcle,$disp16 */ + { + BPF_INSN_JLE32RLE, "jle32rle", "jle32", 64, + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* jset $dstle,$imm32,$disp16 */ { BPF_INSN_JSETILE, "jsetile", "jset", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* jset $dstle,$srcle,$disp16 */ { BPF_INSN_JSETRLE, "jsetrle", "jset", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } + }, +/* jset32 $dstle,$imm32,$disp16 */ + { + BPF_INSN_JSET32ILE, "jset32ile", "jset32", 64, + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } + }, +/* jset32 $dstle,$srcle,$disp16 */ + { + BPF_INSN_JSET32RLE, "jset32rle", "jset32", 64, + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* jne $dstle,$imm32,$disp16 */ { BPF_INSN_JNEILE, "jneile", "jne", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* jne $dstle,$srcle,$disp16 */ { BPF_INSN_JNERLE, "jnerle", "jne", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } + }, +/* jne32 $dstle,$imm32,$disp16 */ + { + BPF_INSN_JNE32ILE, "jne32ile", "jne32", 64, + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } + }, +/* jne32 $dstle,$srcle,$disp16 */ + { + BPF_INSN_JNE32RLE, "jne32rle", "jne32", 64, + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* jsgt $dstle,$imm32,$disp16 */ { BPF_INSN_JSGTILE, "jsgtile", "jsgt", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* jsgt $dstle,$srcle,$disp16 */ { BPF_INSN_JSGTRLE, "jsgtrle", "jsgt", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } + }, +/* jsgt32 $dstle,$imm32,$disp16 */ + { + BPF_INSN_JSGT32ILE, "jsgt32ile", "jsgt32", 64, + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } + }, +/* jsgt32 $dstle,$srcle,$disp16 */ + { + BPF_INSN_JSGT32RLE, "jsgt32rle", "jsgt32", 64, + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* jsge $dstle,$imm32,$disp16 */ { BPF_INSN_JSGEILE, "jsgeile", "jsge", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* jsge $dstle,$srcle,$disp16 */ { BPF_INSN_JSGERLE, "jsgerle", "jsge", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } + }, +/* jsge32 $dstle,$imm32,$disp16 */ + { + BPF_INSN_JSGE32ILE, "jsge32ile", "jsge32", 64, + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } + }, +/* jsge32 $dstle,$srcle,$disp16 */ + { + BPF_INSN_JSGE32RLE, "jsge32rle", "jsge32", 64, + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* jslt $dstle,$imm32,$disp16 */ { BPF_INSN_JSLTILE, "jsltile", "jslt", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* jslt $dstle,$srcle,$disp16 */ { BPF_INSN_JSLTRLE, "jsltrle", "jslt", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } + }, +/* jslt32 $dstle,$imm32,$disp16 */ + { + BPF_INSN_JSLT32ILE, "jslt32ile", "jslt32", 64, + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } + }, +/* jslt32 $dstle,$srcle,$disp16 */ + { + BPF_INSN_JSLT32RLE, "jslt32rle", "jslt32", 64, + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* jsle $dstle,$imm32,$disp16 */ { BPF_INSN_JSLEILE, "jsleile", "jsle", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* jsle $dstle,$srcle,$disp16 */ { BPF_INSN_JSLERLE, "jslerle", "jsle", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } + }, +/* jsle32 $dstle,$imm32,$disp16 */ + { + BPF_INSN_JSLE32ILE, "jsle32ile", "jsle32", 64, + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } + }, +/* jsle32 $dstle,$srcle,$disp16 */ + { + BPF_INSN_JSLE32RLE, "jsle32rle", "jsle32", 64, + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* jeq $dstbe,$imm32,$disp16 */ { BPF_INSN_JEQIBE, "jeqibe", "jeq", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* jeq $dstbe,$srcbe,$disp16 */ { BPF_INSN_JEQRBE, "jeqrbe", "jeq", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } + }, +/* jeq32 $dstbe,$imm32,$disp16 */ + { + BPF_INSN_JEQ32IBE, "jeq32ibe", "jeq32", 64, + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } + }, +/* jeq32 $dstbe,$srcbe,$disp16 */ + { + BPF_INSN_JEQ32RBE, "jeq32rbe", "jeq32", 64, + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* jgt $dstbe,$imm32,$disp16 */ { BPF_INSN_JGTIBE, "jgtibe", "jgt", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* jgt $dstbe,$srcbe,$disp16 */ { BPF_INSN_JGTRBE, "jgtrbe", "jgt", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } + }, +/* jgt32 $dstbe,$imm32,$disp16 */ + { + BPF_INSN_JGT32IBE, "jgt32ibe", "jgt32", 64, + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } + }, +/* jgt32 $dstbe,$srcbe,$disp16 */ + { + BPF_INSN_JGT32RBE, "jgt32rbe", "jgt32", 64, + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* jge $dstbe,$imm32,$disp16 */ { BPF_INSN_JGEIBE, "jgeibe", "jge", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* jge $dstbe,$srcbe,$disp16 */ { BPF_INSN_JGERBE, "jgerbe", "jge", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } + }, +/* jge32 $dstbe,$imm32,$disp16 */ + { + BPF_INSN_JGE32IBE, "jge32ibe", "jge32", 64, + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } + }, +/* jge32 $dstbe,$srcbe,$disp16 */ + { + BPF_INSN_JGE32RBE, "jge32rbe", "jge32", 64, + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* jlt $dstbe,$imm32,$disp16 */ { BPF_INSN_JLTIBE, "jltibe", "jlt", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* jlt $dstbe,$srcbe,$disp16 */ { BPF_INSN_JLTRBE, "jltrbe", "jlt", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } + }, +/* jlt32 $dstbe,$imm32,$disp16 */ + { + BPF_INSN_JLT32IBE, "jlt32ibe", "jlt32", 64, + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } + }, +/* jlt32 $dstbe,$srcbe,$disp16 */ + { + BPF_INSN_JLT32RBE, "jlt32rbe", "jlt32", 64, + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* jle $dstbe,$imm32,$disp16 */ { BPF_INSN_JLEIBE, "jleibe", "jle", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* jle $dstbe,$srcbe,$disp16 */ { BPF_INSN_JLERBE, "jlerbe", "jle", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } + }, +/* jle32 $dstbe,$imm32,$disp16 */ + { + BPF_INSN_JLE32IBE, "jle32ibe", "jle32", 64, + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } + }, +/* jle32 $dstbe,$srcbe,$disp16 */ + { + BPF_INSN_JLE32RBE, "jle32rbe", "jle32", 64, + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* jset $dstbe,$imm32,$disp16 */ { BPF_INSN_JSETIBE, "jsetibe", "jset", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* jset $dstbe,$srcbe,$disp16 */ { BPF_INSN_JSETRBE, "jsetrbe", "jset", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } + }, +/* jset32 $dstbe,$imm32,$disp16 */ + { + BPF_INSN_JSET32IBE, "jset32ibe", "jset32", 64, + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } + }, +/* jset32 $dstbe,$srcbe,$disp16 */ + { + BPF_INSN_JSET32RBE, "jset32rbe", "jset32", 64, + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* jne $dstbe,$imm32,$disp16 */ { BPF_INSN_JNEIBE, "jneibe", "jne", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* jne $dstbe,$srcbe,$disp16 */ { BPF_INSN_JNERBE, "jnerbe", "jne", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } + }, +/* jne32 $dstbe,$imm32,$disp16 */ + { + BPF_INSN_JNE32IBE, "jne32ibe", "jne32", 64, + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } + }, +/* jne32 $dstbe,$srcbe,$disp16 */ + { + BPF_INSN_JNE32RBE, "jne32rbe", "jne32", 64, + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* jsgt $dstbe,$imm32,$disp16 */ { BPF_INSN_JSGTIBE, "jsgtibe", "jsgt", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* jsgt $dstbe,$srcbe,$disp16 */ { BPF_INSN_JSGTRBE, "jsgtrbe", "jsgt", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } + }, +/* jsgt32 $dstbe,$imm32,$disp16 */ + { + BPF_INSN_JSGT32IBE, "jsgt32ibe", "jsgt32", 64, + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } + }, +/* jsgt32 $dstbe,$srcbe,$disp16 */ + { + BPF_INSN_JSGT32RBE, "jsgt32rbe", "jsgt32", 64, + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* jsge $dstbe,$imm32,$disp16 */ { BPF_INSN_JSGEIBE, "jsgeibe", "jsge", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* jsge $dstbe,$srcbe,$disp16 */ { BPF_INSN_JSGERBE, "jsgerbe", "jsge", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } + }, +/* jsge32 $dstbe,$imm32,$disp16 */ + { + BPF_INSN_JSGE32IBE, "jsge32ibe", "jsge32", 64, + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } + }, +/* jsge32 $dstbe,$srcbe,$disp16 */ + { + BPF_INSN_JSGE32RBE, "jsge32rbe", "jsge32", 64, + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* jslt $dstbe,$imm32,$disp16 */ { BPF_INSN_JSLTIBE, "jsltibe", "jslt", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* jslt $dstbe,$srcbe,$disp16 */ { BPF_INSN_JSLTRBE, "jsltrbe", "jslt", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } + }, +/* jslt32 $dstbe,$imm32,$disp16 */ + { + BPF_INSN_JSLT32IBE, "jslt32ibe", "jslt32", 64, + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } + }, +/* jslt32 $dstbe,$srcbe,$disp16 */ + { + BPF_INSN_JSLT32RBE, "jslt32rbe", "jslt32", 64, + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* jsle $dstbe,$imm32,$disp16 */ { BPF_INSN_JSLEIBE, "jsleibe", "jsle", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* jsle $dstbe,$srcbe,$disp16 */ { BPF_INSN_JSLERBE, "jslerbe", "jsle", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, -/* ja $disp16 */ +/* jsle32 $dstbe,$imm32,$disp16 */ { - BPF_INSN_JA, "ja", "ja", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xc0" } } } } + BPF_INSN_JSLE32IBE, "jsle32ibe", "jsle32", 64, + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } + }, +/* jsle32 $dstbe,$srcbe,$disp16 */ + { + BPF_INSN_JSLE32RBE, "jsle32rbe", "jsle32", 64, + { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } + }, +/* call $disp32 */ + { + BPF_INSN_CALLLE, "callle", "call", 64, + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* call $disp32 */ { - BPF_INSN_CALL, "call", "call", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xc0" } } } } + BPF_INSN_CALLBE, "callbe", "call", 64, + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } + }, +/* call $dstle */ + { + BPF_INSN_CALLRLE, "callrle", "call", 64, + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x20" } } } } + }, +/* call $dstbe */ + { + BPF_INSN_CALLRBE, "callrbe", "call", 64, + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x10" } } } } + }, +/* ja $disp16 */ + { + BPF_INSN_JA, "ja", "ja", 64, + { 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } } }, /* exit */ { BPF_INSN_EXIT, "exit", "exit", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xc0" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } } }, /* xadddw [$dstle+$offset16],$srcle */ { BPF_INSN_XADDDWLE, "xadddwle", "xadddw", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* xaddw [$dstle+$offset16],$srcle */ { BPF_INSN_XADDWLE, "xaddwle", "xaddw", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } }, /* xadddw [$dstbe+$offset16],$srcbe */ { BPF_INSN_XADDDWBE, "xadddwbe", "xadddw", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } }, /* xaddw [$dstbe+$offset16],$srcbe */ { BPF_INSN_XADDWBE, "xaddwbe", "xaddw", 64, - { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x40" } } } } + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } + }, +/* brkpt */ + { + BPF_INSN_BRKPT, "brkpt", "brkpt", 64, + { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } } }, }; @@ -1471,6 +1717,7 @@ CGEN_CPU_OPEN_MACHS: bitmap of values in enum mach_attr CGEN_CPU_OPEN_BFDMACH: specify 1 mach using bfd name CGEN_CPU_OPEN_ENDIAN: specify endian choice + CGEN_CPU_OPEN_INSN_ENDIAN: specify instruction endian choice CGEN_CPU_OPEN_END: terminates arguments ??? Simultaneous multiple isas might not make sense, but it's not (yet) @@ -1484,6 +1731,7 @@ CGEN_BITSET *isas = 0; /* 0 = "unspecified" */ unsigned int machs = 0; /* 0 = "unspecified" */ enum cgen_endian endian = CGEN_ENDIAN_UNKNOWN; + enum cgen_endian insn_endian = CGEN_ENDIAN_UNKNOWN; va_list ap; if (! init_p) @@ -1518,6 +1766,9 @@ case CGEN_CPU_OPEN_ENDIAN : endian = va_arg (ap, enum cgen_endian); break; + case CGEN_CPU_OPEN_INSN_ENDIAN : + insn_endian = va_arg (ap, enum cgen_endian); + break; default : opcodes_error_handler (/* xgettext:c-format */ @@ -1547,11 +1798,8 @@ cd->isas = cgen_bitset_copy (isas); cd->machs = machs; cd->endian = endian; - /* FIXME: for the sparc case we can determine insn-endianness statically. - The worry here is where both data and insn endian can be independently - chosen, in which case this function will need another argument. - Actually, will want to allow for more arguments in the future anyway. */ - cd->insn_endian = endian; + cd->insn_endian + = (insn_endian == CGEN_ENDIAN_UNKNOWN ? endian : insn_endian); /* Table (re)builder. */ cd->rebuild_tables = bpf_cgen_rebuild_tables; @@ -1601,18 +1849,10 @@ regfree (CGEN_INSN_RX (insns)); } - if (cd->macro_insn_table.init_entries) - free ((CGEN_INSN *) cd->macro_insn_table.init_entries); - - if (cd->insn_table.init_entries) - free ((CGEN_INSN *) cd->insn_table.init_entries); - - if (cd->hw_table.entries) - free ((CGEN_HW_ENTRY *) cd->hw_table.entries); - - if (cd->operand_table.entries) - free ((CGEN_HW_ENTRY *) cd->operand_table.entries); - + free ((CGEN_INSN *) cd->macro_insn_table.init_entries); + free ((CGEN_INSN *) cd->insn_table.init_entries); + free ((CGEN_HW_ENTRY *) cd->hw_table.entries); + free ((CGEN_HW_ENTRY *) cd->operand_table.entries); free (cd); } diff -Nru gdb-9.1/opcodes/bpf-desc.h gdb-10.2/opcodes/bpf-desc.h --- gdb-9.1/opcodes/bpf-desc.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/bpf-desc.h 2021-04-25 04:06:26.000000000 +0000 @@ -3,7 +3,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright (C) 1996-2019 Free Software Foundation, Inc. +Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of the GNU Binutils and/or GDB, the GNU debugger. @@ -80,8 +80,8 @@ /* Enum declaration for eBPF instruction class. */ typedef enum insn_op_class { - OP_CLASS_LD = 0, OP_CLASS_LDX = 1, OP_CLASS_ST = 2, OP_CLASS_STX = 3 - , OP_CLASS_ALU = 4, OP_CLASS_JMP = 5, OP_CLASS_ALU64 = 7 + OP_CLASS_LD, OP_CLASS_LDX, OP_CLASS_ST, OP_CLASS_STX + , OP_CLASS_ALU, OP_CLASS_JMP, OP_CLASS_JMP32, OP_CLASS_ALU64 } INSN_OP_CLASS; /* Enum declaration for eBPF load/store instruction modes. */ @@ -99,12 +99,13 @@ /* Enum declaration for machine type selection. */ typedef enum mach_attr { - MACH_BASE, MACH_BPF, MACH_MAX + MACH_BASE, MACH_BPF, MACH_XBPF, MACH_MAX } MACH_ATTR; /* Enum declaration for instruction set selection. */ typedef enum isa_attr { - ISA_EBPFLE, ISA_EBPFBE, ISA_MAX + ISA_EBPFLE, ISA_EBPFBE, ISA_XBPFLE, ISA_XBPFBE + , ISA_MAX } ISA_ATTR; /* Number of architecture variants. */ diff -Nru gdb-9.1/opcodes/bpf-dis.c gdb-10.2/opcodes/bpf-dis.c --- gdb-9.1/opcodes/bpf-dis.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/bpf-dis.c 2021-04-25 04:06:26.000000000 +0000 @@ -5,7 +5,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. - the resultant file is machine generated, cgen-dis.in isn't - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of libopcodes. @@ -375,7 +375,7 @@ /* 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); + 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 @@ -506,6 +506,7 @@ CGEN_BITSET *isa; int mach; int endian; + int insn_endian; CGEN_CPU_DESC cd; } cpu_desc_list; @@ -518,12 +519,16 @@ 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; /* ??? gdb will set mach but leave the architecture as "unknown" */ @@ -589,9 +594,11 @@ 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 (); diff -Nru gdb-9.1/opcodes/bpf-ibld.c gdb-10.2/opcodes/bpf-ibld.c --- gdb-9.1/opcodes/bpf-ibld.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/bpf-ibld.c 2021-04-25 04:06:26.000000000 +0000 @@ -4,7 +4,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN: Cpu tools GENerator. - the resultant file is machine generated, cgen-ibld.in isn't - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of libopcodes. @@ -85,20 +85,20 @@ int word_length, unsigned char *bufp) { - unsigned long x,mask; + unsigned long x, mask; int shift; - x = cgen_get_insn_value (cd, bufp, word_length); + x = cgen_get_insn_value (cd, bufp, word_length, cd->endian); /* Written this way to avoid undefined behaviour. */ - mask = (((1L << (length - 1)) - 1) << 1) | 1; + mask = (1UL << (length - 1) << 1) - 1; if (CGEN_INSN_LSB0_P) shift = (start + 1) - length; else shift = (word_length - (start + length)); x = (x & ~(mask << shift)) | ((value & mask) << shift); - cgen_put_insn_value (cd, bufp, word_length, (bfd_vma) x); + cgen_put_insn_value (cd, bufp, word_length, (bfd_vma) x, cd->endian); } #endif /* ! CGEN_INT_INSN_P */ @@ -131,13 +131,15 @@ CGEN_INSN_BYTES_PTR buffer) { static char errbuf[100]; - /* Written this way to avoid undefined behaviour. */ - unsigned long mask = (((1L << (length - 1)) - 1) << 1) | 1; + unsigned long mask; /* If LENGTH is zero, this operand doesn't contribute to the value. */ if (length == 0) return NULL; + /* Written this way to avoid undefined behaviour. */ + mask = (1UL << (length - 1) << 1) - 1; + if (word_length > 8 * sizeof (CGEN_INSN_INT)) abort (); @@ -153,7 +155,7 @@ /* Ensure VALUE will fit. */ if (CGEN_BOOL_ATTR (attrs, CGEN_IFLD_SIGN_OPT)) { - long minval = - (1L << (length - 1)); + long minval = - (1UL << (length - 1)); unsigned long maxval = mask; if ((value > 0 && (unsigned long) value > maxval) @@ -191,8 +193,8 @@ { if (! cgen_signed_overflow_ok_p (cd)) { - long minval = - (1L << (length - 1)); - long maxval = (1L << (length - 1)) - 1; + long minval = - (1UL << (length - 1)); + long maxval = (1UL << (length - 1)) - 1; if (value < minval || value > maxval) { @@ -269,8 +271,8 @@ #else cgen_put_insn_value (cd, buffer, min ((unsigned) cd->base_insn_bitsize, - (unsigned) CGEN_FIELDS_BITSIZE (fields)), - value); + (unsigned) CGEN_FIELDS_BITSIZE (fields)), + value, cd->insn_endian); #endif /* ! CGEN_INT_INSN_P */ @@ -314,7 +316,7 @@ { int shift = insn_length - length; /* Written this way to avoid undefined behaviour. */ - CGEN_INSN_INT mask = (((1L << (length - 1)) - 1) << 1) | 1; + CGEN_INSN_INT mask = length == 0 ? 0 : (1UL << (length - 1) << 1) - 1; *buf = (*buf & ~(mask << shift)) | ((value & mask) << shift); } @@ -387,7 +389,7 @@ unsigned long x; int shift; - x = cgen_get_insn_value (cd, bufp, word_length); + x = cgen_get_insn_value (cd, bufp, word_length, cd->endian); if (CGEN_INSN_LSB0_P) shift = (start + 1) - length; @@ -480,7 +482,10 @@ abort (); if (fill_cache (cd, ex_info, word_offset / 8, word_length / 8, pc) == 0) - return 0; + { + *valuep = 0; + return 0; + } value = extract_1 (cd, ex_info, start, length, word_length, bufp, pc); } @@ -488,12 +493,12 @@ #endif /* ! CGEN_INT_INSN_P */ /* Written this way to avoid undefined behaviour. */ - mask = (((1L << (length - 1)) - 1) << 1) | 1; + mask = (1UL << (length - 1) << 1) - 1; value &= mask; /* sign extend? */ if (CGEN_BOOL_ATTR (attrs, CGEN_IFLD_SIGNED) - && (value & (1L << (length - 1)))) + && (value & (1UL << (length - 1)))) value |= ~mask; *valuep = value; @@ -689,7 +694,7 @@ length = extract_normal (cd, ex_info, insn_value, 0, 96, 31, 32, 32, total_length, pc, & fields->f_imm64_c); if (length <= 0) break; { - FLD (f_imm64) = ((((((DI) (UINT) (FLD (f_imm64_c)))) << (32))) | (((DI) (UINT) (FLD (f_imm64_a))))); + FLD (f_imm64) = ((((((UDI) (UINT) (FLD (f_imm64_c)))) << (32))) | (((UDI) (UINT) (FLD (f_imm64_a))))); } } break; diff -Nru gdb-9.1/opcodes/bpf-opc.c gdb-10.2/opcodes/bpf-opc.c --- gdb-9.1/opcodes/bpf-opc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/bpf-opc.c 2021-04-25 04:06:26.000000000 +0000 @@ -3,7 +3,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright (C) 1996-2019 Free Software Foundation, Inc. +Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of the GNU Binutils and/or GDB, the GNU debugger. @@ -50,99 +50,99 @@ }; static const CGEN_IFMT ifmt_addile ATTRIBUTE_UNUSED = { - 8, 64, 0xff, { { 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 } } + 64, 64, 0xff, { { 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 = { - 8, 64, 0xff, { { 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 } } + 64, 64, 0xff, { { 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 = { - 8, 64, 0xff, { { 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 } } + 64, 64, 0xff, { { 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 = { - 8, 64, 0xff, { { 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 } } + 64, 64, 0xff, { { 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 = { - 8, 64, 0xff, { { 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 } } + 64, 64, 0xff, { { 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 = { - 8, 64, 0xff, { { 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 } } + 64, 64, 0xff, { { 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 = { - 8, 64, 0xff, { { 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 } } + 64, 64, 0xff, { { 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 = { - 8, 64, 0xff, { { 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 } } + 64, 64, 0xff, { { 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 = { - 8, 128, 0xff, { { 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 } } + 64, 128, 0xff, { { 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 = { - 8, 128, 0xff, { { 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 } } + 64, 128, 0xff, { { 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 = { - 8, 64, 0xff, { { F (F_IMM32) }, { F (F_OFFSET16) }, { F (F_REGS) }, { F (F_OP_MODE) }, { F (F_OP_SIZE) }, { F (F_OP_CLASS) }, { 0 } } + 64, 64, 0xff, { { 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 = { - 8, 64, 0xff, { { 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 } } + 64, 64, 0xff, { { 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 = { - 8, 64, 0xff, { { 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 } } + 64, 64, 0xff, { { 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 = { - 8, 64, 0xff, { { 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 } } + 64, 64, 0xff, { { 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 = { - 8, 64, 0xff, { { 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 } } + 64, 64, 0xff, { { 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 = { - 8, 64, 0xff, { { 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 } } + 64, 64, 0xff, { { 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 = { - 8, 64, 0xff, { { 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 } } + 64, 64, 0xff, { { 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 = { - 8, 64, 0xff, { { 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 } } + 64, 64, 0xff, { { 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 = { - 8, 64, 0xff, { { 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 } } + 64, 64, 0xff, { { 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 = { - 8, 64, 0xff, { { 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 } } + 64, 64, 0xff, { { 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 = { - 8, 64, 0xff, { { 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 } } + 64, 64, 0xff, { { 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 = { - 8, 64, 0xff, { { 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_callle ATTRIBUTE_UNUSED = { + 64, 64, 0xff, { { 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_call ATTRIBUTE_UNUSED = { - 8, 64, 0xff, { { 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_ja ATTRIBUTE_UNUSED = { + 64, 64, 0xff, { { 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 = { - 8, 64, 0xff, { { F (F_IMM32) }, { F (F_OFFSET16) }, { F (F_REGS) }, { F (F_OP_CODE) }, { F (F_OP_SRC) }, { F (F_OP_CLASS) }, { 0 } } + 64, 64, 0xff, { { F (F_IMM32) }, { F (F_OFFSET16) }, { F (F_REGS) }, { F (F_OP_CODE) }, { F (F_OP_SRC) }, { F (F_OP_CLASS) }, { 0 } } }; #undef F @@ -400,65 +400,65 @@ { { MNEM, ' ', OP (DSTLE), ',', OP (SRCLE), 0 } }, & ifmt_addrle, { 0xac } }, -/* mov $dstle,$imm32 */ +/* arsh $dstle,$imm32 */ { { 0, 0, 0, 0 }, { { MNEM, ' ', OP (DSTLE), ',', OP (IMM32), 0 } }, - & ifmt_addile, { 0xb7 } + & ifmt_addile, { 0xc7 } }, -/* mov $dstle,$srcle */ +/* arsh $dstle,$srcle */ { { 0, 0, 0, 0 }, { { MNEM, ' ', OP (DSTLE), ',', OP (SRCLE), 0 } }, - & ifmt_addrle, { 0xbf } + & ifmt_addrle, { 0xcf } }, -/* mov32 $dstle,$imm32 */ +/* arsh32 $dstle,$imm32 */ { { 0, 0, 0, 0 }, { { MNEM, ' ', OP (DSTLE), ',', OP (IMM32), 0 } }, - & ifmt_addile, { 0xb4 } + & ifmt_addile, { 0xc4 } }, -/* mov32 $dstle,$srcle */ +/* arsh32 $dstle,$srcle */ { { 0, 0, 0, 0 }, { { MNEM, ' ', OP (DSTLE), ',', OP (SRCLE), 0 } }, - & ifmt_addrle, { 0xbc } + & ifmt_addrle, { 0xcc } }, -/* arsh $dstle,$imm32 */ +/* neg $dstle */ { { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (IMM32), 0 } }, - & ifmt_addile, { 0xc7 } + { { MNEM, ' ', OP (DSTLE), 0 } }, + & ifmt_negle, { 0x87 } }, -/* arsh $dstle,$srcle */ +/* neg32 $dstle */ { { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), ',', OP (SRCLE), 0 } }, - & ifmt_addrle, { 0xcf } + { { MNEM, ' ', OP (DSTLE), 0 } }, + & ifmt_negle, { 0x84 } }, -/* arsh32 $dstle,$imm32 */ +/* mov $dstle,$imm32 */ { { 0, 0, 0, 0 }, { { MNEM, ' ', OP (DSTLE), ',', OP (IMM32), 0 } }, - & ifmt_addile, { 0xc4 } + & ifmt_addile, { 0xb7 } }, -/* arsh32 $dstle,$srcle */ +/* mov $dstle,$srcle */ { { 0, 0, 0, 0 }, { { MNEM, ' ', OP (DSTLE), ',', OP (SRCLE), 0 } }, - & ifmt_addrle, { 0xcc } + & ifmt_addrle, { 0xbf } }, -/* neg $dstle */ +/* mov32 $dstle,$imm32 */ { { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), 0 } }, - & ifmt_negle, { 0x8f } + { { MNEM, ' ', OP (DSTLE), ',', OP (IMM32), 0 } }, + & ifmt_addile, { 0xb4 } }, -/* neg32 $dstle */ +/* mov32 $dstle,$srcle */ { { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTLE), 0 } }, - & ifmt_negle, { 0x8c } + { { MNEM, ' ', OP (DSTLE), ',', OP (SRCLE), 0 } }, + & ifmt_addrle, { 0xbc } }, /* add $dstbe,$imm32 */ { @@ -700,65 +700,65 @@ { { MNEM, ' ', OP (DSTBE), ',', OP (SRCBE), 0 } }, & ifmt_addrbe, { 0xac } }, -/* mov $dstbe,$imm32 */ +/* arsh $dstbe,$imm32 */ { { 0, 0, 0, 0 }, { { MNEM, ' ', OP (DSTBE), ',', OP (IMM32), 0 } }, - & ifmt_addibe, { 0xb7 } + & ifmt_addibe, { 0xc7 } }, -/* mov $dstbe,$srcbe */ +/* arsh $dstbe,$srcbe */ { { 0, 0, 0, 0 }, { { MNEM, ' ', OP (DSTBE), ',', OP (SRCBE), 0 } }, - & ifmt_addrbe, { 0xbf } + & ifmt_addrbe, { 0xcf } }, -/* mov32 $dstbe,$imm32 */ +/* arsh32 $dstbe,$imm32 */ { { 0, 0, 0, 0 }, { { MNEM, ' ', OP (DSTBE), ',', OP (IMM32), 0 } }, - & ifmt_addibe, { 0xb4 } + & ifmt_addibe, { 0xc4 } }, -/* mov32 $dstbe,$srcbe */ +/* arsh32 $dstbe,$srcbe */ { { 0, 0, 0, 0 }, { { MNEM, ' ', OP (DSTBE), ',', OP (SRCBE), 0 } }, - & ifmt_addrbe, { 0xbc } + & ifmt_addrbe, { 0xcc } }, -/* arsh $dstbe,$imm32 */ +/* neg $dstbe */ { { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (IMM32), 0 } }, - & ifmt_addibe, { 0xc7 } + { { MNEM, ' ', OP (DSTBE), 0 } }, + & ifmt_negbe, { 0x87 } }, -/* arsh $dstbe,$srcbe */ +/* neg32 $dstbe */ { { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), ',', OP (SRCBE), 0 } }, - & ifmt_addrbe, { 0xcf } + { { MNEM, ' ', OP (DSTBE), 0 } }, + & ifmt_negbe, { 0x84 } }, -/* arsh32 $dstbe,$imm32 */ +/* mov $dstbe,$imm32 */ { { 0, 0, 0, 0 }, { { MNEM, ' ', OP (DSTBE), ',', OP (IMM32), 0 } }, - & ifmt_addibe, { 0xc4 } + & ifmt_addibe, { 0xb7 } }, -/* arsh32 $dstbe,$srcbe */ +/* mov $dstbe,$srcbe */ { { 0, 0, 0, 0 }, { { MNEM, ' ', OP (DSTBE), ',', OP (SRCBE), 0 } }, - & ifmt_addrbe, { 0xcc } + & ifmt_addrbe, { 0xbf } }, -/* neg $dstbe */ +/* mov32 $dstbe,$imm32 */ { { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), 0 } }, - & ifmt_negbe, { 0x8f } + { { MNEM, ' ', OP (DSTBE), ',', OP (IMM32), 0 } }, + & ifmt_addibe, { 0xb4 } }, -/* neg32 $dstbe */ +/* mov32 $dstbe,$srcbe */ { { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DSTBE), 0 } }, - & ifmt_negbe, { 0x8c } + { { MNEM, ' ', OP (DSTBE), ',', OP (SRCBE), 0 } }, + & ifmt_addrbe, { 0xbc } }, /* endle $dstle,$endsize */ { @@ -1024,6 +1024,18 @@ { { 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 }, @@ -1036,6 +1048,18 @@ { { 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 }, @@ -1048,6 +1072,18 @@ { { 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 }, @@ -1060,6 +1096,18 @@ { { 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 }, @@ -1072,6 +1120,18 @@ { { 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 }, @@ -1084,6 +1144,18 @@ { { 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 }, @@ -1096,6 +1168,18 @@ { { 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 }, @@ -1108,6 +1192,18 @@ { { 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 }, @@ -1120,6 +1216,18 @@ { { 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 }, @@ -1132,6 +1240,18 @@ { { 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 }, @@ -1144,6 +1264,18 @@ { { 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 }, @@ -1156,6 +1288,18 @@ { { 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 }, @@ -1168,6 +1312,18 @@ { { 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 }, @@ -1180,6 +1336,18 @@ { { 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 }, @@ -1192,6 +1360,18 @@ { { 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 }, @@ -1204,6 +1384,18 @@ { { 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 }, @@ -1216,6 +1408,18 @@ { { 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 }, @@ -1228,6 +1432,18 @@ { { 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 }, @@ -1240,6 +1456,18 @@ { { 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 }, @@ -1252,6 +1480,18 @@ { { 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 }, @@ -1264,6 +1504,18 @@ { { 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 }, @@ -1276,17 +1528,47 @@ { { MNEM, ' ', OP (DSTBE), ',', OP (SRCBE), ',', OP (DISP16), 0 } }, & ifmt_jeqrbe, { 0xdd } }, -/* ja $disp16 */ +/* jsle32 $dstbe,$imm32,$disp16 */ { { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (DISP16), 0 } }, - & ifmt_ja, { 0x5 } + { { 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_call, { 0x85 } + & ifmt_callle, { 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 */ { @@ -1318,6 +1600,12 @@ { { MNEM, ' ', '[', OP (DSTBE), '+', OP (OFFSET16), ']', ',', OP (SRCBE), 0 } }, & ifmt_ldxwbe, { 0xc3 } }, +/* brkpt */ + { + { 0, 0, 0, 0 }, + { { MNEM, 0 } }, + & ifmt_exit, { 0x8c } + }, }; #undef A diff -Nru gdb-9.1/opcodes/bpf-opc.h gdb-10.2/opcodes/bpf-opc.h --- gdb-9.1/opcodes/bpf-opc.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/bpf-opc.h 2021-04-25 04:06:26.000000000 +0000 @@ -3,7 +3,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright (C) 1996-2019 Free Software Foundation, Inc. +Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of the GNU Binutils and/or GDB, the GNU debugger. @@ -58,9 +58,9 @@ , BPF_INSN_LSH32RLE, BPF_INSN_RSHILE, BPF_INSN_RSHRLE, BPF_INSN_RSH32ILE , BPF_INSN_RSH32RLE, BPF_INSN_MODILE, BPF_INSN_MODRLE, BPF_INSN_MOD32ILE , BPF_INSN_MOD32RLE, BPF_INSN_XORILE, BPF_INSN_XORRLE, BPF_INSN_XOR32ILE - , BPF_INSN_XOR32RLE, BPF_INSN_MOVILE, BPF_INSN_MOVRLE, BPF_INSN_MOV32ILE - , BPF_INSN_MOV32RLE, BPF_INSN_ARSHILE, BPF_INSN_ARSHRLE, BPF_INSN_ARSH32ILE - , BPF_INSN_ARSH32RLE, BPF_INSN_NEGLE, BPF_INSN_NEG32LE, BPF_INSN_ADDIBE + , BPF_INSN_XOR32RLE, BPF_INSN_ARSHILE, BPF_INSN_ARSHRLE, BPF_INSN_ARSH32ILE + , BPF_INSN_ARSH32RLE, BPF_INSN_NEGLE, BPF_INSN_NEG32LE, BPF_INSN_MOVILE + , BPF_INSN_MOVRLE, BPF_INSN_MOV32ILE, BPF_INSN_MOV32RLE, BPF_INSN_ADDIBE , BPF_INSN_ADDRBE, BPF_INSN_ADD32IBE, BPF_INSN_ADD32RBE, BPF_INSN_SUBIBE , BPF_INSN_SUBRBE, BPF_INSN_SUB32IBE, BPF_INSN_SUB32RBE, BPF_INSN_MULIBE , BPF_INSN_MULRBE, BPF_INSN_MUL32IBE, BPF_INSN_MUL32RBE, BPF_INSN_DIVIBE @@ -70,10 +70,10 @@ , BPF_INSN_LSHRBE, BPF_INSN_LSH32IBE, BPF_INSN_LSH32RBE, BPF_INSN_RSHIBE , BPF_INSN_RSHRBE, BPF_INSN_RSH32IBE, BPF_INSN_RSH32RBE, BPF_INSN_MODIBE , BPF_INSN_MODRBE, BPF_INSN_MOD32IBE, BPF_INSN_MOD32RBE, BPF_INSN_XORIBE - , BPF_INSN_XORRBE, BPF_INSN_XOR32IBE, BPF_INSN_XOR32RBE, BPF_INSN_MOVIBE - , BPF_INSN_MOVRBE, BPF_INSN_MOV32IBE, BPF_INSN_MOV32RBE, BPF_INSN_ARSHIBE + , BPF_INSN_XORRBE, BPF_INSN_XOR32IBE, BPF_INSN_XOR32RBE, BPF_INSN_ARSHIBE , BPF_INSN_ARSHRBE, BPF_INSN_ARSH32IBE, BPF_INSN_ARSH32RBE, BPF_INSN_NEGBE - , BPF_INSN_NEG32BE, BPF_INSN_ENDLELE, BPF_INSN_ENDBELE, BPF_INSN_ENDLEBE + , BPF_INSN_NEG32BE, BPF_INSN_MOVIBE, BPF_INSN_MOVRBE, BPF_INSN_MOV32IBE + , BPF_INSN_MOV32RBE, BPF_INSN_ENDLELE, BPF_INSN_ENDBELE, BPF_INSN_ENDLEBE , BPF_INSN_ENDBEBE, BPF_INSN_LDDWLE, BPF_INSN_LDDWBE, BPF_INSN_LDABSW , BPF_INSN_LDABSH, BPF_INSN_LDABSB, BPF_INSN_LDABSDW, BPF_INSN_LDINDWLE , BPF_INSN_LDINDHLE, BPF_INSN_LDINDBLE, BPF_INSN_LDINDDWLE, BPF_INSN_LDINDWBE @@ -84,26 +84,38 @@ , BPF_INSN_STXHBE, BPF_INSN_STXBBE, BPF_INSN_STXDWBE, BPF_INSN_STBLE , BPF_INSN_STHLE, BPF_INSN_STWLE, BPF_INSN_STDWLE, BPF_INSN_STBBE , BPF_INSN_STHBE, BPF_INSN_STWBE, BPF_INSN_STDWBE, BPF_INSN_JEQILE - , BPF_INSN_JEQRLE, BPF_INSN_JGTILE, BPF_INSN_JGTRLE, BPF_INSN_JGEILE - , BPF_INSN_JGERLE, BPF_INSN_JLTILE, BPF_INSN_JLTRLE, BPF_INSN_JLEILE - , BPF_INSN_JLERLE, BPF_INSN_JSETILE, BPF_INSN_JSETRLE, BPF_INSN_JNEILE - , BPF_INSN_JNERLE, BPF_INSN_JSGTILE, BPF_INSN_JSGTRLE, BPF_INSN_JSGEILE - , BPF_INSN_JSGERLE, BPF_INSN_JSLTILE, BPF_INSN_JSLTRLE, BPF_INSN_JSLEILE - , BPF_INSN_JSLERLE, BPF_INSN_JEQIBE, BPF_INSN_JEQRBE, BPF_INSN_JGTIBE - , BPF_INSN_JGTRBE, BPF_INSN_JGEIBE, BPF_INSN_JGERBE, BPF_INSN_JLTIBE - , BPF_INSN_JLTRBE, BPF_INSN_JLEIBE, BPF_INSN_JLERBE, BPF_INSN_JSETIBE - , BPF_INSN_JSETRBE, BPF_INSN_JNEIBE, BPF_INSN_JNERBE, BPF_INSN_JSGTIBE - , BPF_INSN_JSGTRBE, BPF_INSN_JSGEIBE, BPF_INSN_JSGERBE, BPF_INSN_JSLTIBE - , BPF_INSN_JSLTRBE, BPF_INSN_JSLEIBE, BPF_INSN_JSLERBE, BPF_INSN_JA - , BPF_INSN_CALL, BPF_INSN_EXIT, BPF_INSN_XADDDWLE, BPF_INSN_XADDWLE - , BPF_INSN_XADDDWBE, BPF_INSN_XADDWBE + , BPF_INSN_JEQRLE, BPF_INSN_JEQ32ILE, BPF_INSN_JEQ32RLE, BPF_INSN_JGTILE + , BPF_INSN_JGTRLE, BPF_INSN_JGT32ILE, BPF_INSN_JGT32RLE, BPF_INSN_JGEILE + , BPF_INSN_JGERLE, BPF_INSN_JGE32ILE, BPF_INSN_JGE32RLE, BPF_INSN_JLTILE + , BPF_INSN_JLTRLE, BPF_INSN_JLT32ILE, BPF_INSN_JLT32RLE, BPF_INSN_JLEILE + , BPF_INSN_JLERLE, BPF_INSN_JLE32ILE, BPF_INSN_JLE32RLE, BPF_INSN_JSETILE + , BPF_INSN_JSETRLE, BPF_INSN_JSET32ILE, BPF_INSN_JSET32RLE, BPF_INSN_JNEILE + , BPF_INSN_JNERLE, BPF_INSN_JNE32ILE, BPF_INSN_JNE32RLE, BPF_INSN_JSGTILE + , BPF_INSN_JSGTRLE, BPF_INSN_JSGT32ILE, BPF_INSN_JSGT32RLE, BPF_INSN_JSGEILE + , BPF_INSN_JSGERLE, BPF_INSN_JSGE32ILE, BPF_INSN_JSGE32RLE, BPF_INSN_JSLTILE + , BPF_INSN_JSLTRLE, BPF_INSN_JSLT32ILE, BPF_INSN_JSLT32RLE, BPF_INSN_JSLEILE + , BPF_INSN_JSLERLE, BPF_INSN_JSLE32ILE, BPF_INSN_JSLE32RLE, BPF_INSN_JEQIBE + , BPF_INSN_JEQRBE, BPF_INSN_JEQ32IBE, BPF_INSN_JEQ32RBE, BPF_INSN_JGTIBE + , BPF_INSN_JGTRBE, BPF_INSN_JGT32IBE, BPF_INSN_JGT32RBE, BPF_INSN_JGEIBE + , BPF_INSN_JGERBE, BPF_INSN_JGE32IBE, BPF_INSN_JGE32RBE, BPF_INSN_JLTIBE + , BPF_INSN_JLTRBE, BPF_INSN_JLT32IBE, BPF_INSN_JLT32RBE, BPF_INSN_JLEIBE + , BPF_INSN_JLERBE, BPF_INSN_JLE32IBE, BPF_INSN_JLE32RBE, BPF_INSN_JSETIBE + , BPF_INSN_JSETRBE, BPF_INSN_JSET32IBE, BPF_INSN_JSET32RBE, BPF_INSN_JNEIBE + , BPF_INSN_JNERBE, BPF_INSN_JNE32IBE, BPF_INSN_JNE32RBE, BPF_INSN_JSGTIBE + , BPF_INSN_JSGTRBE, BPF_INSN_JSGT32IBE, BPF_INSN_JSGT32RBE, BPF_INSN_JSGEIBE + , BPF_INSN_JSGERBE, BPF_INSN_JSGE32IBE, BPF_INSN_JSGE32RBE, BPF_INSN_JSLTIBE + , BPF_INSN_JSLTRBE, BPF_INSN_JSLT32IBE, BPF_INSN_JSLT32RBE, BPF_INSN_JSLEIBE + , BPF_INSN_JSLERBE, BPF_INSN_JSLE32IBE, BPF_INSN_JSLE32RBE, BPF_INSN_CALLLE + , BPF_INSN_CALLBE, BPF_INSN_CALLRLE, BPF_INSN_CALLRBE, BPF_INSN_JA + , BPF_INSN_EXIT, BPF_INSN_XADDDWLE, BPF_INSN_XADDWLE, BPF_INSN_XADDDWBE + , BPF_INSN_XADDWBE, BPF_INSN_BRKPT } CGEN_INSN_TYPE; /* Index of `invalid' insn place holder. */ #define CGEN_INSN_INVALID BPF_INSN_INVALID /* Total number of insns in table. */ -#define MAX_INSNS ((int) BPF_INSN_XADDWBE + 1) +#define MAX_INSNS ((int) BPF_INSN_BRKPT + 1) /* This struct records data prior to insertion or after extraction. */ struct cgen_fields diff -Nru gdb-9.1/opcodes/cgen-asm.c gdb-10.2/opcodes/cgen-asm.c --- gdb-9.1/opcodes/cgen-asm.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/cgen-asm.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* CGEN generic assembler support code. - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of libopcodes. diff -Nru gdb-9.1/opcodes/cgen-asm.in gdb-10.2/opcodes/cgen-asm.in --- gdb-9.1/opcodes/cgen-asm.in 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/cgen-asm.in 2021-04-25 04:06:26.000000000 +0000 @@ -4,7 +4,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. - the resultant file is machine generated, cgen-asm.in isn't - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of libopcodes. diff -Nru gdb-9.1/opcodes/cgen-bitset.c gdb-10.2/opcodes/cgen-bitset.c --- gdb-9.1/opcodes/cgen-bitset.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/cgen-bitset.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* CGEN generic opcode support. - Copyright (C) 2002-2019 Free Software Foundation, Inc. + Copyright (C) 2002-2020 Free Software Foundation, Inc. This file is part of libopcodes. diff -Nru gdb-9.1/opcodes/cgen-dis.c gdb-10.2/opcodes/cgen-dis.c --- gdb-9.1/opcodes/cgen-dis.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/cgen-dis.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* CGEN generic disassembler support code. - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of libopcodes. @@ -24,6 +24,7 @@ #include "bfd.h" #include "symcat.h" #include "opcode/cgen.h" +#include "disassemble.h" static CGEN_INSN_LIST * hash_insn_array (CGEN_CPU_DESC, const CGEN_INSN *, int, int, CGEN_INSN_LIST **, CGEN_INSN_LIST *); static CGEN_INSN_LIST * hash_insn_list (CGEN_CPU_DESC, const CGEN_INSN_LIST *, CGEN_INSN_LIST **, CGEN_INSN_LIST *); @@ -110,9 +111,10 @@ for (i = count - 1; i >= 0; --i, ++hentbuf) { unsigned int hash; - char buf [4]; + char buf [8]; unsigned long value; const CGEN_INSN *insn = &insns[i]; + size_t size; if (! (* cd->dis_hash_p) (insn)) continue; @@ -121,10 +123,9 @@ to hash on, so set both up. */ value = CGEN_INSN_BASE_VALUE (insn); - bfd_put_bits ((bfd_vma) value, - buf, - CGEN_INSN_MASK_BITSIZE (insn), - big_p); + size = CGEN_INSN_MASK_BITSIZE (insn); + OPCODES_ASSERT (size <= sizeof (buf) * 8); + bfd_put_bits ((bfd_vma) value, buf, size, big_p); hash = (* cd->dis_hash) (buf, value); add_insn_to_hash_chain (hentbuf, insn, htable, hash); } diff -Nru gdb-9.1/opcodes/cgen-dis.in gdb-10.2/opcodes/cgen-dis.in --- gdb-9.1/opcodes/cgen-dis.in 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/cgen-dis.in 2021-04-25 04:06:26.000000000 +0000 @@ -4,7 +4,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. - the resultant file is machine generated, cgen-dis.in isn't - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of libopcodes. @@ -210,7 +210,7 @@ /* 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); + 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 @@ -341,6 +341,7 @@ CGEN_BITSET *isa; int mach; int endian; + int insn_endian; CGEN_CPU_DESC cd; } cpu_desc_list; @@ -353,12 +354,16 @@ 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; /* ??? gdb will set mach but leave the architecture as "unknown" */ @@ -424,9 +429,11 @@ prev_isa = cgen_bitset_copy (isa); prev_mach = mach; prev_endian = endian; + prev_insn_endian = insn_endian; cd = @arch@_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 (); diff -Nru gdb-9.1/opcodes/cgen-ibld.in gdb-10.2/opcodes/cgen-ibld.in --- gdb-9.1/opcodes/cgen-ibld.in 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/cgen-ibld.in 2021-04-25 04:06:26.000000000 +0000 @@ -3,7 +3,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN: Cpu tools GENerator. - the resultant file is machine generated, cgen-ibld.in isn't - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of libopcodes. @@ -84,20 +84,20 @@ int word_length, unsigned char *bufp) { - unsigned long x,mask; + unsigned long x, mask; int shift; - x = cgen_get_insn_value (cd, bufp, word_length); + x = cgen_get_insn_value (cd, bufp, word_length, cd->endian); /* Written this way to avoid undefined behaviour. */ - mask = (((1L << (length - 1)) - 1) << 1) | 1; + mask = (1UL << (length - 1) << 1) - 1; if (CGEN_INSN_LSB0_P) shift = (start + 1) - length; else shift = (word_length - (start + length)); x = (x & ~(mask << shift)) | ((value & mask) << shift); - cgen_put_insn_value (cd, bufp, word_length, (bfd_vma) x); + cgen_put_insn_value (cd, bufp, word_length, (bfd_vma) x, cd->endian); } #endif /* ! CGEN_INT_INSN_P */ @@ -130,13 +130,15 @@ CGEN_INSN_BYTES_PTR buffer) { static char errbuf[100]; - /* Written this way to avoid undefined behaviour. */ - unsigned long mask = (((1L << (length - 1)) - 1) << 1) | 1; + unsigned long mask; /* If LENGTH is zero, this operand doesn't contribute to the value. */ if (length == 0) return NULL; + /* Written this way to avoid undefined behaviour. */ + mask = (1UL << (length - 1) << 1) - 1; + if (word_length > 8 * sizeof (CGEN_INSN_INT)) abort (); @@ -152,7 +154,7 @@ /* Ensure VALUE will fit. */ if (CGEN_BOOL_ATTR (attrs, CGEN_IFLD_SIGN_OPT)) { - long minval = - (1L << (length - 1)); + long minval = - (1UL << (length - 1)); unsigned long maxval = mask; if ((value > 0 && (unsigned long) value > maxval) @@ -190,8 +192,8 @@ { if (! cgen_signed_overflow_ok_p (cd)) { - long minval = - (1L << (length - 1)); - long maxval = (1L << (length - 1)) - 1; + long minval = - (1UL << (length - 1)); + long maxval = (1UL << (length - 1)) - 1; if (value < minval || value > maxval) { @@ -268,8 +270,8 @@ #else cgen_put_insn_value (cd, buffer, min ((unsigned) cd->base_insn_bitsize, - (unsigned) CGEN_FIELDS_BITSIZE (fields)), - value); + (unsigned) CGEN_FIELDS_BITSIZE (fields)), + value, cd->insn_endian); #endif /* ! CGEN_INT_INSN_P */ @@ -313,7 +315,7 @@ { int shift = insn_length - length; /* Written this way to avoid undefined behaviour. */ - CGEN_INSN_INT mask = (((1L << (length - 1)) - 1) << 1) | 1; + CGEN_INSN_INT mask = length == 0 ? 0 : (1UL << (length - 1) << 1) - 1; *buf = (*buf & ~(mask << shift)) | ((value & mask) << shift); } @@ -386,7 +388,7 @@ unsigned long x; int shift; - x = cgen_get_insn_value (cd, bufp, word_length); + x = cgen_get_insn_value (cd, bufp, word_length, cd->endian); if (CGEN_INSN_LSB0_P) shift = (start + 1) - length; @@ -479,7 +481,10 @@ abort (); if (fill_cache (cd, ex_info, word_offset / 8, word_length / 8, pc) == 0) - return 0; + { + *valuep = 0; + return 0; + } value = extract_1 (cd, ex_info, start, length, word_length, bufp, pc); } @@ -487,12 +492,12 @@ #endif /* ! CGEN_INT_INSN_P */ /* Written this way to avoid undefined behaviour. */ - mask = (((1L << (length - 1)) - 1) << 1) | 1; + mask = (1UL << (length - 1) << 1) - 1; value &= mask; /* sign extend? */ if (CGEN_BOOL_ATTR (attrs, CGEN_IFLD_SIGNED) - && (value & (1L << (length - 1)))) + && (value & (1UL << (length - 1)))) value |= ~mask; *valuep = value; diff -Nru gdb-9.1/opcodes/cgen-opc.c gdb-10.2/opcodes/cgen-opc.c --- gdb-9.1/opcodes/cgen-opc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/cgen-opc.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* CGEN generic opcode support. - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of libopcodes. @@ -357,9 +357,10 @@ /* Cover function to read and properly byteswap an insn value. */ CGEN_INSN_INT -cgen_get_insn_value (CGEN_CPU_DESC cd, unsigned char *buf, int length) +cgen_get_insn_value (CGEN_CPU_DESC cd, unsigned char *buf, int length, + int endian) { - int big_p = (cd->insn_endian == CGEN_ENDIAN_BIG); + int big_p = (endian == CGEN_ENDIAN_BIG); int insn_chunk_bitsize = cd->insn_chunk_bitsize; CGEN_INSN_INT value = 0; @@ -385,7 +386,7 @@ } else { - value = bfd_get_bits (buf, length, cd->insn_endian == CGEN_ENDIAN_BIG); + value = bfd_get_bits (buf, length, endian == CGEN_ENDIAN_BIG); } return value; @@ -397,9 +398,10 @@ cgen_put_insn_value (CGEN_CPU_DESC cd, unsigned char *buf, int length, - CGEN_INSN_INT value) + CGEN_INSN_INT value, + int endian) { - int big_p = (cd->insn_endian == CGEN_ENDIAN_BIG); + int big_p = (endian == CGEN_ENDIAN_BIG); int insn_chunk_bitsize = cd->insn_chunk_bitsize; if (insn_chunk_bitsize != 0 && insn_chunk_bitsize < length) @@ -459,7 +461,8 @@ { info = NULL; insn_bytes_value = (unsigned char *) xmalloc (cd->max_insn_bitsize / 8); - cgen_put_insn_value (cd, insn_bytes_value, length, insn_int_value); + cgen_put_insn_value (cd, insn_bytes_value, length, insn_int_value, + cd->insn_endian); } else { @@ -467,7 +470,8 @@ ex_info.dis_info = NULL; ex_info.insn_bytes = insn_bytes_value; ex_info.valid = -1; - insn_int_value = cgen_get_insn_value (cd, insn_bytes_value, length); + insn_int_value = cgen_get_insn_value (cd, insn_bytes_value, length, + cd->insn_endian); } if (!insn) diff -Nru gdb-9.1/opcodes/cgen.sh gdb-10.2/opcodes/cgen.sh --- gdb-9.1/opcodes/cgen.sh 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/cgen.sh 2021-04-25 04:06:26.000000000 +0000 @@ -1,7 +1,7 @@ #! /bin/sh # CGEN generic assembler support code. # -# Copyright (C) 2000-2019 Free Software Foundation, Inc. +# Copyright (C) 2000-2020 Free Software Foundation, Inc. # # This file is part of the GNU opcodes library. # diff -Nru gdb-9.1/opcodes/ChangeLog gdb-10.2/opcodes/ChangeLog --- gdb-9.1/opcodes/ChangeLog 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/ChangeLog 2021-04-25 04:06:26.000000000 +0000 @@ -1,2231 +1,2815 @@ -2019-12-11 Alan Modra <amodra@gmail.com> +2020-10-22 Andrew Burgess <andrew.burgess@embecosm.com> - * arc-dis.c (BITS): Don't truncate high bits with shifts. - * nios2-dis.c (nios2_print_insn_arg): Don't sign extend with shifts. - * tic54x-dis.c (print_instruction): Likewise. - * tilegx-opc.c (parse_insn_tilegx): Likewise. - * tilepro-opc.c (parse_insn_tilepro): Likewise. - * visium-dis.c (disassem_class0): Likewise. - * pdp11-dis.c (sign_extend): Likewise. - (SIGN_BITS): Delete. + * csky-dis.c (csky_get_disassembler): Don't return NULL when there + is no BFD. + +2020-09-10 Nick Clifton <nickc@redhat.com> + + * ppc-dis.c (ppc_symbol_is_valid): New function. Returns false + for hidden, local, no-type symbols. + (disassemble_init_powerpc): Point the symbol_is_valid field in the + info structure at the new function. + +2020-09-10 Cooper Qu <cooper.qu@linux.alibaba.com> + + * csky-opc.h (csky_v2_opcodes): Add L2Cache instructions. + * testsuite/gas/csky/cskyv2_ck860.d : Adjust to icache.iva + opcode fixing. + +2020-09-10 Nick Clifton <nickc@redhat.com> + + * csky-dis.c (csky_output_operand): Coerce the immediate values to + long before printing. + +2020-09-10 Alan Modra <amodra@gmail.com> + + * csky-dis.c (csky_output_operand): Don't sprintf str to itself. + +2020-09-07 Cooper Qu <cooper.qu@linux.alibaba.com> + + * csky-opc.h (csky_v2_opcodes): Change mvtc and mulsw's + ISA flag. + +2020-09-07 Cooper Qu <cooper.qu@linux.alibaba.com> + + * csky-dis.c (csky_output_operand): Add handlers for + OPRND_TYPE_HFLOAT_FMOVI, OPRND_TYPE_SFLOAT_FMOVI and + OPRND_TYPE_DFLOAT_FMOVI. Refine OPRND_TYPE_FREGLIST_DASH + to support FPUV3 instructions. + * csky-opc.h (enum operand_type): New enum OPRND_TYPE_IMM9b, + OPRND_TYPE_HFLOAT_FMOVI, OPRND_TYPE_SFLOAT_FMOVI and + OPRND_TYPE_DFLOAT_FMOVI. + (OPRND_MASK_4_5, OPRND_MASK_6, OPRND_MASK_6_7, OPRND_MASK_6_8, + OPRND_MASK_7, OPRND_MASK_7_8, OPRND_MASK_17_24, + OPRND_MASK_20, OPRND_MASK_20_21, OPRND_MASK_20_22, + OPRND_MASK_20_23, OPRND_MASK_20_24, OPRND_MASK_20_25, + OPRND_MASK_0_3or5_8, OPRND_MASK_0_3or6_7, OPRND_MASK_0_3or25, + OPRND_MASK_0_4or21_24, OPRND_MASK_5or20_21, + OPRND_MASK_5or20_22, OPRND_MASK_5or20_23, OPRND_MASK_5or20_24, + OPRND_MASK_5or20_25, OPRND_MASK_8_9or21_25, + OPRND_MASK_8_9or16_25, OPRND_MASK_4_6or20, OPRND_MASK_5_7or20, + OPRND_MASK_4_5or20or25, OPRND_MASK_4_6or20or25, + OPRND_MASK_4_7or20or25, OPRND_MASK_6_9or17_24, + OPRND_MASK_6_7or20, OPRND_MASK_6or20, OPRND_MASK_7or20, + OPRND_MASK_5or8_9or16_25, OPRND_MASK_5or8_9or20_25): Define. + (csky_v2_opcodes): Add FPUV3 instructions. + +2020-09-08 Alex Coplan <alex.coplan@arm.com> + + * aarch64-dis.c (print_operands): Pass CPU features to + aarch64_print_operand(). + * aarch64-opc.c (aarch64_print_operand): Use CPU features to determine + preferred disassembly of system registers. + (SR_RNG): Refactor to use new SR_FEAT2 macro. + (SR_FEAT2): New. + (SR_V8_1_A): New. + (SR_V8_4_A): New. + (SR_V8_A): New. + (SR_V8_R): New. + (SR_EXPAND_ELx): New. + (SR_EXPAND_EL12): New. + (aarch64_sys_regs): Specify which registers are only on + A-profile, add R-profile system registers. + (ENC_BARLAR): New. + (PRBARn_ELx): New. + (PRLARn_ELx): New. + (aarch64_sys_ins_reg_supported_p): Reject EL3 registers for + Armv8-R AArch64. + +2020-09-08 Alex Coplan <alex.coplan@arm.com> + + * aarch64-tbl.h (aarch64_feature_v8_r): New. + (ARMV8_R): New. + (V8_R_INSN): New. + (aarch64_opcode_table): Add dfb. + * aarch64-opc-2.c: Regenerate. + * aarch64-asm-2.c: Regenerate. + * aarch64-dis-2.c: Regenerate. + +2020-09-08 Alex Coplan <alex.coplan@arm.com> + + * aarch64-dis.c (arch_variant): New. + (determine_disassembling_preference): Disassemble according to + arch variant. + (select_aarch64_variant): New. + (print_insn_aarch64): Set feature set. + +2020-09-02 Alan Modra <amodra@gmail.com> + + * v850-opc.c (insert_i5div1, insert_i5div2, insert_i5div3), + (insert_d5_4, insert_d8_6, insert_d8_7, insert_v8, insert_d9), + (insert_u16_loop, insert_d16_15, insert_d16_16, insert_d17_16), + (insert_d22, insert_d23, insert_d23_align1, insert_i9, insert_u9), + (insert_spe, insert_r4, insert_POS, insert_WIDTH, insert_SELID), + (insert_VECTOR8, insert_VECTOR5, insert_CACHEOP, insert_PREFOP), + (nsert_IMM10U, insert_SRSEL1, insert_SRSEL2): Use unsigned long + for value parameter and update code to suit. + (extract_d9, extract_d16_15, extract_d16_16, extract_d17_16), + (extract_d22, extract_d23, extract_i9): Use unsigned long variables. + +2020-09-02 Alan Modra <amodra@gmail.com> + + * i386-dis.c (OP_E_memory): Don't cast to signed type when + negating. + (get32, get32s): Use unsigned types in shift expressions. + +2020-09-02 Alan Modra <amodra@gmail.com> + + * csky-dis.c (print_insn_csky): Use unsigned type for "given". + +2020-09-02 Alan Modra <amodra@gmail.com> + + * crx-dis.c: Whitespace. + (print_arg): Use unsigned type for longdisp and mask variables, + and for left shift constant. + +2020-09-02 Alan Modra <amodra@gmail.com> + + * cgen-ibld.in (insert_normal, extract_normal): Use 1UL in left shift. + * bpf-ibld.c: Regenerate. * epiphany-ibld.c: Regenerate. + * fr30-ibld.c: Regenerate. + * frv-ibld.c: Regenerate. + * ip2k-ibld.c: Regenerate. + * iq2000-ibld.c: Regenerate. * lm32-ibld.c: Regenerate. * m32c-ibld.c: Regenerate. + * m32r-ibld.c: Regenerate. + * mep-ibld.c: Regenerate. + * mt-ibld.c: Regenerate. + * or1k-ibld.c: Regenerate. + * xc16x-ibld.c: Regenerate. + * xstormy16-ibld.c: Regenerate. -2019-12-11 Alan Modra <amodra@gmail.com> +2020-09-02 Alan Modra <amodra@gmail.com> - * ns32k-dis.c (sign_extend): Correct last patch. + * bfin-dis.c (MASKBITS): Use SIGNBIT. -2019-12-11 Alan Modra <amodra@gmail.com> +2020-09-02 Cooper Qu <cooper.qu@linux.alibaba.com> - * vax-dis.c (NEXTLONG): Avoid signed overflow. + * csky-opc.h (csky_v2_opcodes): Move divul and divsl + to CSKYV2_ISA_3E3R3 instruction set. -2019-12-11 Alan Modra <amodra@gmail.com> +2020-09-02 Cooper Qu <cooper.qu@linux.alibaba.com> - * v850-dis.c (get_operand_value): Use unsigned arithmetic. Don't - sign extend using shifts. + * csky-opc.h (csky_v2_opcodes): Fix Encode of mulsws. -2019-12-11 Alan Modra <amodra@gmail.com> +2020-09-01 Alan Modra <amodra@gmail.com> - * tic6x-dis.c (tic6x_extract_32): Avoid signed overflow. + * mep-ibld.c: Regenerate. -2019-12-11 Alan Modra <amodra@gmail.com> +2020-08-31 Cooper Qu <cooper.qu@linux.alibaba.com> - * tic4x-dis.c (tic4x_print_register): Formatting. Don't segfault - on NULL registertable entry. - (tic4x_hash_opcode): Use unsigned arithmetic. + * csky-dis.c (csky_output_operand): Assign dis_info.value for + OPRND_TYPE_VREG. -2019-12-11 Alan Modra <amodra@gmail.com> +2020-08-30 Alan Modra <amodra@gmail.com> - * s12z-opc.c (z_decode_signed_value): Avoid signed overflow. + * cr16-dis.c: Formatting. + (parameter): Delete struct typedef. Use dwordU instead + throughout file. + (make_argument <arg_idxr>): Simplify detection of cbitb, sbitb + and tbitb. + (make_argument <arg_cr>): Extract 20-bit field not 16-bit. -2019-12-11 Alan Modra <amodra@gmail.com> +2020-08-29 Alan Modra <amodra@gmail.com> - * ns32k-dis.c (bit_extract): Use unsigned arithmetic. - (bit_extract_simple, sign_extend): Likewise. + PR 26446 + * csky-opc.h (MAX_OPRND_NUM): Define to 5. + (union csky_operand): Use MAX_OPRND_NUM to size oprnds array. -2019-12-11 Alan Modra <amodra@gmail.com> +2020-08-28 Alan Modra <amodra@gmail.com> - * nios2-dis.c (nios2_print_insn_arg): Use 1u << 31. + PR 26449 + PR 26450 + * cgen-ibld.in (insert_1): Use 1UL in forming mask. + (extract_normal): Likewise. + (insert_normal): Likewise, and move past zero length test. + (put_insn_int_value): Handle mask for zero length, use 1UL. + * bpf-ibld.c, * epiphany-ibld.c, * fr30-ibld.c, * frv-ibld.c, + * ip2k-ibld.c, * iq2000-ibld.c, * lm32-ibld.c, * m32c-ibld.c, + * m32r-ibld.c, * mep-ibld.c, * mt-ibld.c, * or1k-ibld.c, + * xc16x-ibld.c, * xstormy16-ibld.c: Regenerate. -2019-12-11 Alan Modra <amodra@gmail.com> +2020-08-28 Cooper Qu <cooper.qu@linux.alibaba.com> - * moxie-dis.c (INST2OFFSET): Don't sign extend using shifts. + * csky-dis.c (CSKY_DEFAULT_ISA): Define. + (csky_dis_info): Add member isa. + (csky_find_inst_info): Skip instructions that do not belong to + current CPU. + (csky_get_disassembler): Get infomation from attribute section. + (print_insn_csky): Set defualt ISA flag. + * csky.h (CSKY_ISA_VDSP_2): Rename from CSKY_ISA_VDSP_V2. + * csky-opc.h (struct csky_opcode): Change isa_flag16 and + isa_flag32'type to unsigned 64 bits. -2019-12-11 Alan Modra <amodra@gmail.com> +2020-08-26 Jose E. Marchesi <jemarch@gnu.org> - * m68k-dis.c (COERCE32): Cast value first. - (NEXTLONG, NEXTULONG): Avoid signed overflow. + * disassemble.c (enum epbf_isa_attr): Add ISA_XBPFBE, ISA_EBPFMAX. -2019-12-11 Alan Modra <amodra@gmail.com> +2020-08-26 David Faust <david.faust@oracle.com> - * h8300-dis.c (extract_immediate): Avoid signed overflow. - (bfd_h8_disassemble): Likewise. + * bpf-desc.c: Regenerate. + * bpf-desc.h: Likewise. + * bpf-opc.c: Likewise. + * bpf-opc.h: Likewise. + * disassemble.c (disassemble_init_for_target): Set bits for xBPF + ISA when appropriate. -2019-12-11 Alan Modra <amodra@gmail.com> +2020-08-25 Alan Modra <amodra@gmail.com> - * d30v-dis.c (print_insn): Make opind unsigned. Don't access - past end of operands array. + PR 26504 + * vax-dis.c (parse_disassembler_options): Always add at least one + to entry_addr_total_slots. -2019-12-11 Alan Modra <amodra@gmail.com> +2020-08-24 Cooper Qu <cooper.qu@linux.alibaba.com> - * csky-dis.c (csky_chars_to_number): Rewrite. Avoid signed - overflow when collecting bytes of a number. + * csky-dis.c (csky_find_inst_info): Skip CK860's instructions + in other CPUs to speed up disassembling. + * csky-opc.h (csky_v2_opcodes): Add CK860's instructions, + Change plsli.u16 to plsli.16, change sync's operand format. -2019-12-11 Alan Modra <amodra@gmail.com> +2020-08-21 Cooper Qu <cooper.qu@linux.alibaba.com> - * cris-dis.c (print_with_operands): Avoid signed integer - overflow when collecting bytes of a 32-bit integer. + * csky-opc.h (csky_v2_opcodes): Add instruction bnezad. -2019-12-11 Alan Modra <amodra@gmail.com> +2020-08-21 Nick Clifton <nickc@redhat.com> - * cr16-dis.c (EXTRACT, SBM): Rewrite. - (cr16_match_opcode): Delete duplicate bcond test. + * aarch64-dis.c (get_sym_code_type): Return FALSE for non-ELF + symbols. -2019-12-11 Alan Modra <amodra@gmail.com> +2020-08-21 Cooper Qu <cooper.qu@linux.alibaba.com> - * bfin-dis.c (HOST_LONG_WORD_SIZE, XFIELD): Delete. - (SIGNBIT): New. - (MASKBITS, SIGNEXTEND): Rewrite. - (fmtconst): Don't use ? expression now that SIGNEXTEND uses - unsigned arithmetic, instead assign result of SIGNEXTEND back - to x. - (fmtconst_val): Use 1u in shift expression. + * csky-opc.h (csky_v2_opcodes): Add two operands form for bloop. -2019-12-11 Alan Modra <amodra@gmail.com> +2020-08-19 Alan Modra <amodra@gmail.com> - * arc-dis.c (find_format_from_table): Use ull constant when - shifting by up to 32. + * ppc-opc.c (powerpc_opcodes): Replace OBF with BF for vcmpsq, + vcmpuq and xvtlsbb. -2019-12-11 Alan Modra <amodra@gmail.com> +2020-08-18 Peter Bergner <bergner@linux.ibm.com> - PR 25270 - * aarch64-dis.c (aarch64_decode_variant_using_iclass): Return - false when field is zero for sve_size_tsz_bhs. + * ppc-opc.c (powerpc_opcodes) <xvcvbf16sp>: Rename from this... + <xvcvbf16spn>: ...to this. -2019-12-11 Alan Modra <amodra@gmail.com> +2020-08-12 Alex Coplan <alex.coplan@arm.com> - * epiphany-ibld.c: Regenerate. + * aarch64-opc.c (aarch64_sys_regs): Add MPAM registers. -2019-12-10 Alan Modra <amodra@gmail.com> +2020-08-12 Nick Clifton <nickc@redhat.com> - PR 24960 - * disassemble.c (disassemble_free_target): New function. + * po/sr.po: Updated Serbian translation. -2019-12-10 Alan Modra <amodra@gmail.com> +2020-08-11 Alan Modra <amodra@gmail.com> - * cgen-dis.in (print_insn_@arch@): Replace insn_sets with private_data. - * disassemble.c (disassemble_init_for_target): Likewise. - * bpf-dis.c: Regenerate. - * epiphany-dis.c: Regenerate. - * fr30-dis.c: Regenerate. - * frv-dis.c: Regenerate. - * ip2k-dis.c: Regenerate. - * iq2000-dis.c: Regenerate. - * lm32-dis.c: Regenerate. - * m32c-dis.c: Regenerate. - * m32r-dis.c: Regenerate. - * mep-dis.c: Regenerate. - * mt-dis.c: Regenerate. - * or1k-dis.c: Regenerate. - * xc16x-dis.c: Regenerate. - * xstormy16-dis.c: Regenerate. + * ppc-opc.c (powerpc_opcodes): Move cctpl, cctpm and cctph. -2019-12-10 Alan Modra <amodra@gmail.com> +2020-08-10 Przemyslaw Wirkus <przemyslaw.wirkus@arm.com> - * ppc-dis.c (private): Delete variable. - (get_powerpc_dialect): Don't segfault on NULL info->private_data. - (powerpc_init_dialect): Don't use global private. + * aarch64-opc.c (aarch64_print_operand): + (aarch64_sys_reg_deprecated_p): Functions paramaters changed. + (aarch64_sys_reg_supported_p): Function removed. + (aarch64_sys_ins_reg_supported_p): Functions paramaters changed. + (aarch64_sys_ins_reg_supported_p): Merged aarch64_sys_reg_supported_p + into this function. -2019-12-10 Alan Modra <amodra@gmail.com> +2020-08-10 Alan Modra <amodra@gmail.com> - * s12z-opc.c: Formatting. + * ppc-opc.c (powerpc_opcodes): Add many mtspr and mfspr extended + instructions. -2019-12-08 Alan Modra <amodra@gmail.com> +2020-08-10 Alan Modra <amodra@gmail.com> - * s12z-opc.c (exg_sex_discrim): Don't leak memory on invalid - registers. + * ppc-opc.c (powerpc_opcodes): Add exser, msgsndu, msgclru. + Enable icbt for power5, miso for power8. -2019-12-05 Jan Beulich <jbeulich@suse.com> +2020-08-10 Alan Modra <amodra@gmail.com> - * aarch64-tbl.h (aarch64_feature_crypto, - aarch64_feature_crypto_v8_2, CRYPTO, CRYPTO_V8_2, CRYP_INSN, - CRYPTO_V8_2_INSN): Delete. + * ppc-opc.c (powerpc_opcodes): Prioritise mtfprd and mtvrd over + mtvsrd, and similarly for mfvsrd. + +2020-08-04 Christian Groessler <chris@groessler.org> + Tadashi G. Takaoka <tadashi.g.takaoka@gmail.com> + + * z8kgen.c (opt): Fix "sout imm16,rs" and "soutb imm16,rbs" + opcodes (special "out" to absolute address). + * z8k-opc.h: Regenerate. + +2020-07-30 H.J. Lu <hongjiu.lu@intel.com> + + PR gas/26305 + * i386-opc.h (Prefix_Disp8): New. + (Prefix_Disp16): Likewise. + (Prefix_Disp32): Likewise. + (Prefix_Load): Likewise. + (Prefix_Store): Likewise. + (Prefix_VEX): Likewise. + (Prefix_VEX3): Likewise. + (Prefix_EVEX): Likewise. + (Prefix_REX): Likewise. + (Prefix_NoOptimize): Likewise. + * i386-opc.tbl: Use Prefix_XXX on pseudo prefixes. Add {disp16}. + * i386-tbl.h: Regenerated. -2019-12-05 Alan Modra <amodra@gmail.com> +2020-07-29 Andreas Arnez <arnez@linux.ibm.com> - PR 25249 - * microblaze-dis.c (NUM_STRBUFS, STRBUF_SIZE): Define. - (struct string_buf): New. - (strbuf): New function. - (get_field): Use strbuf rather than strdup of local temp. - (get_field_imm, get_field_imm5, get_field_imm5_mbar): Likewise. - (get_field_rfsl, get_field_imm15): Likewise. - (get_field_rd, get_field_r1, get_field_r2): Update macros. - (get_field_special): Likewise. Don't strcpy spr. Formatting. - (print_insn_microblaze): Formatting. Init and pass string_buf to - get_field functions. + * s390-mkopc.c (insertExpandedMnemonic): Handle unreachable + default case with abort() instead of printing an error message and + continuing, to avoid a maybe-uninitialized warning. -2019-12-04 Jan Beulich <jbeulich@suse.com> +2020-07-24 Nick Clifton <nickc@redhat.com> - * i386-opc.tbl (lfs, lgs, lss): Drop No_qSuf. - * i386-tbl.h: Re-generate. + * po/de.po: Updated German translation. -2019-12-04 Jan Beulich <jbeulich@suse.com> +2020-07-21 Jan Beulich <jbeulich@suse.com> - * i386-dis.c (mod_table): Use Ev instead of Em for movdiri. + * i386-dis.c (OP_E_memory): Revert previous change. -2019-12-04 Jan Beulich <jbeulich@suse.com> +2020-07-15 H.J. Lu <hongjiu.lu@intel.com> - * i386-opc.tbl (push, pop): Drop DefaultSize from GPR-only - forms. - (xbegin): Drop DefaultSize. - * i386-tbl.h: Re-generate. + PR gas/26237 + * i386-dis.c (OP_E_memory): Don't display eiz with no scale + without base nor index registers. + +2020-07-15 Jan Beulich <jbeulich@suse.com> + + * i386-dis.c (putop): Move 'V' and 'W' handling. + +2020-07-15 Jan Beulich <jbeulich@suse.com> + + * i386-dis.c (dis386): Adjust 'V' description. Use P-based + construct for push/pop of register. + (putop): Honor cond when handling 'P'. Drop handling of plain + 'V'. + +2020-07-15 Jan Beulich <jbeulich@suse.com> + + * i386-dis.c (dis386): Adjust 'P', 'T', 'U', and '@' + description. Drop '&' description. Use P for push of immediate, + pushf/popf, enter, and leave. Use %LP for lret/retf. + (dis386_twobyte): Use P for push/pop of fs/gs. + (reg_table): Use P for push/pop. Use @ for near call/jmp. + (x86_64_table): Use P for far call/jmp. + (putop): Drop handling of 'U' and '&'. Move and adjust handling + of '@'. Adjust handling of 'P' and 'T'. Drop case_P and case_Q + labels. + (OP_J): Drop marking of REX_W as used for v_mode (ISA-dependent) + and dqw_mode (unconditional). + +2020-07-14 H.J. Lu <hongjiu.lu@intel.com> + + PR gas/26237 + * i386-dis.c (OP_E_memory): Without base nor index registers, + 32-bit displacement to 64 bits. + +2020-07-14 Claudiu Zissulescu <claziss@gmail.com> + + * arc-dis.c (print_insn_arc): Detect and emit a warning when a + faulty double register pair is detected. + +2020-07-14 Jan Beulich <jbeulich@suse.com> + + * i386-dis.c (OP_D): Print dr<N> instead of db<N> in Intel mode. + +2020-07-14 Jan Beulich <jbeulich@suse.com> + + * i386-dis.c (OP_R, Rm): Delete. + (MOD_0F24, MOD_0F26): Rename to ... + (X86_64_0F24, X86_64_0F26): ... respectively. + (dis386): Update 'L' and 'Z' comments. + (dis386_twobyte): Replace Rm by Em. Change opcode 0F24 and 0F26 + table references. + (mod_table): Move opcode 0F24 and 0F26 entries ... + (x86_64_table): ... here. + (putop): Drop handling of 'L'. Set modrm.mod to 3 for 'Z'. Move + 'Z' case block. + +2020-07-14 Jan Beulich <jbeulich@suse.com> + + * i386-dis.c (Rd, Rdq, MaskR): Delete. + (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_0F387A_W_0, MOD_EVEX_0F387B_W_0, + MOD_EVEX_0F387C): New enumerators. + (reg_table): Use Edq for rdssp. + (prefix_table): Use Edq for incssp. + (mod_table): Use Rm for move to/from %tr. Use MaskE for kand*, + kandn*, knot*, kor*, kxnor*, kxor*, kadd*, kunpck*, kortest*, + ktest*, and kshift*. Use Edq / MaskE for kmov*. + * i386-dis-evex.h: Reference mod_table[] for opcode 0F387C. + * i386-dis-evex-mod.h: New entries for opcodes 0F3828, 0F382A, + 0F3838, 0F383A, 0F387A, 0F387B, and 0F387C. + * i386-dis-evex-prefix.h: Reference mod_table[] for opcodes + 0F3828_P_1 and 0F3838_P_1. + * i386-dis-evex-w.h: Reference mod_table[] for opcodes + 0F382A_P_1, 0F383A_P_1, 0F387A, and 0F387B. + +2020-07-14 Jan Beulich <jbeulich@suse.com> + + * i386-dis.c (PREFIX_0F01_REG_7_MOD_3_RM_3, + PREFIX_0FAE_REG_5_MOD_0, PREFIX_0FC3_MOD_0, PREFIX_0F38C8, + PREFIX_0F38C9, PREFIX_0F38CA, PREFIX_0F38CB, PREFIX_0F38CC, + PREFIX_0F38CD, PREFIX_0F38F9, PREFIX_0F3ACC, PREFIX_VEX_0F77, + PREFIX_VEX_0F38F2, PREFIX_VEX_0F38F3_REG_1, + PREFIX_VEX_0F38F3_REG_2, PREFIX_VEX_0F38F3_REG_3): Delete. + (MOD_0F38F9_PREFIX_0, VEX_LEN_0F77_P_0, VEX_LEN_0F38F2_P_0, + VEX_LEN_0F38F3_R_1_P_0, VEX_LEN_0F38F3_R_2_P_0, + VEX_LEN_0F38F3_R_3_P_0): Rename to ... + (MOD_0F38F9, VEX_LEN_0F77, VEX_LEN_0F38F2, VEX_LEN_0F38F3_R_1, + VEX_LEN_0F38F3_R_2, VEX_LEN_0F38F3_R_3): ... these respectively. + (reg_table, prefix_table, three_byte_table, vex_table, + vex_len_table, mod_table, rm_table): Replace / remove respective + entries. + (intel_operand_size, OP_E_register, OP_G): Avoid undue setting + of PREFIX_DATA in used_prefixes. -2019-11-22 Mihail Ionescu <mihail.ionescu@arm.com> +2020-07-14 Jan Beulich <jbeulich@suse.com> - * opcodes/arm-dis.c (arm_opcodes, thumb32_opcodes): - Change the coproc CRC conditions to use the extension - feature set, second word, base on ARM_EXT2_CRC. + * i386-dis.c (MOD_VEX_0F3A30_L_0_W_0, MOD_VEX_0F3A30_L_0_W_1, + MOD_VEX_0F3A31_L_0_W_0, MOD_VEX_0F3A31_L_0_W_1, + MOD_VEX_0F3A32_L_0_W_0, MOD_VEX_0F3A32_L_0_W_1, + MOD_VEX_0F3A33_L_0_W_0, MOD_VEX_0F3A33_L_0_W_1): Replace by ... + (MOD_VEX_0F3A30_L_0, MOD_VEX_0F3A31_L_0, + MOD_VEX_0F3A32_L_0, MOD_VEX_0F3A33_L_0): ... these. + (VEX_W_0F3A30_L_0, VEX_W_0F3A31_L_0, VEX_W_0F3A32_L_0, + VEX_W_0F3A33_L_0): Delete. + (dis386): Adjust "BW" description. + (vex_len_table): Refer to mod_table[] for opcodes 0F3A30, + 0F3A31, 0F3A32, and 0F3A33. + (vex_w_table): Delete opcode 0F3A30, 0F3A31, 0F3A32, and 0F3A33 + entries. + (mod_table): Replace opcode 0F3A30, 0F3A31, 0F3A32, and 0F3A33 + entries. -2019-11-14 Jan Beulich <jbeulich@suse.com> +2020-07-14 Jan Beulich <jbeulich@suse.com> - * i386-opc.tbl (syscall, sysret): Drop Cpu64 forms. - * i386-tbl.h: Re-generate. + * i386-dis.c (PREFIX_0F6C, PREFIX_0F6D, PREFIX_0F73_REG_3, + PREFIX_0F73_REG_7, PREFIX_0F3810, PREFIX_0F3814, PREFIX_0F3815, + PREFIX_0F3817, PREFIX_0F3820, PREFIX_0F3821, PREFIX_0F3822, + PREFIX_0F3823, PREFIX_0F3824, PREFIX_0F3825, PREFIX_0F3828, + PREFIX_0F3829, PREFIX_0F382A, PREFIX_0F382B, PREFIX_0F3830, + PREFIX_0F3831, PREFIX_0F3832, PREFIX_0F3833, PREFIX_0F3834, + PREFIX_0F3835, PREFIX_0F3837, PREFIX_0F3838, PREFIX_0F3839, + PREFIX_0F383A, PREFIX_0F383B, PREFIX_0F383C, PREFIX_0F383D, + PREFIX_0F383E, PREFIX_0F383F, PREFIX_0F3840, PREFIX_0F3841, + PREFIX_0F3880, PREFIX_0F3881, PREFIX_0F3882, PREFIX_0F38CF, + PREFIX_0F38DB, PREFIX_0F38DC, PREFIX_0F38DD, PREFIX_0F38DE, + PREFIX_0F38DF, PREFIX_0F38F5, PREFIX_0F3A08, PREFIX_0F3A09, + PREFIX_0F3A0A, PREFIX_0F3A0B, PREFIX_0F3A0C, PREFIX_0F3A0D, + PREFIX_0F3A0E, PREFIX_0F3A14, PREFIX_0F3A15, PREFIX_0F3A16, + PREFIX_0F3A17, PREFIX_0F3A20, PREFIX_0F3A21, PREFIX_0F3A22, + PREFIX_0F3A40, PREFIX_0F3A41, PREFIX_0F3A42, PREFIX_0F3A44, + PREFIX_0F3A60, PREFIX_0F3A61, PREFIX_0F3A62, PREFIX_0F3A63, + PREFIX_0F3ACE, PREFIX_0F3ACF, PREFIX_0F3ADF, PREFIX_VEX_0F60, + PREFIX_VEX_0F61, PREFIX_VEX_0F62, PREFIX_VEX_0F63, + PREFIX_VEX_0F64, PREFIX_VEX_0F65, PREFIX_VEX_0F66, + PREFIX_VEX_0F67, PREFIX_VEX_0F68, PREFIX_VEX_0F69, + PREFIX_VEX_0F6A, PREFIX_VEX_0F6B, PREFIX_VEX_0F6C, + PREFIX_VEX_0F6D, PREFIX_VEX_0F6E, PREFIX_VEX_0F71_REG_2, + PREFIX_VEX_0F71_REG_4, PREFIX_VEX_0F71_REG_6, + PREFIX_VEX_0F72_REG_2, PREFIX_VEX_0F72_REG_4, + PREFIX_VEX_0F72_REG_6, PREFIX_VEX_0F73_REG_2, + PREFIX_VEX_0F73_REG_3, PREFIX_VEX_0F73_REG_6, + PREFIX_VEX_0F73_REG_7, PREFIX_VEX_0F74, + PREFIX_VEX_0F75, PREFIX_VEX_0F76, PREFIX_VEX_0FC4, + PREFIX_VEX_0FC5, PREFIX_VEX_0FD1, PREFIX_VEX_0FD2, + PREFIX_VEX_0FD3, PREFIX_VEX_0FD4, PREFIX_VEX_0FD5, + PREFIX_VEX_0FD6, PREFIX_VEX_0FD7, PREFIX_VEX_0FD8, + PREFIX_VEX_0FD9, PREFIX_VEX_0FDA, PREFIX_VEX_0FDB, + PREFIX_VEX_0FDC, PREFIX_VEX_0FDD, PREFIX_VEX_0FDE, + PREFIX_VEX_0FDF, PREFIX_VEX_0FE0, PREFIX_VEX_0FE1, + PREFIX_VEX_0FE2, PREFIX_VEX_0FE3, PREFIX_VEX_0FE4, + PREFIX_VEX_0FE5, PREFIX_VEX_0FE7, PREFIX_VEX_0FE8, + PREFIX_VEX_0FE9, PREFIX_VEX_0FEA, PREFIX_VEX_0FEB, + PREFIX_VEX_0FEC, PREFIX_VEX_0FED, PREFIX_VEX_0FEE, + PREFIX_VEX_0FEF, PREFIX_VEX_0FF1, PREFIX_VEX_0FF2, + PREFIX_VEX_0FF3, PREFIX_VEX_0FF4, PREFIX_VEX_0FF5, + PREFIX_VEX_0FF6, PREFIX_VEX_0FF7, PREFIX_VEX_0FF8, + PREFIX_VEX_0FF9, PREFIX_VEX_0FFA, PREFIX_VEX_0FFB, + PREFIX_VEX_0FFC, PREFIX_VEX_0FFD, PREFIX_VEX_0FFE, + PREFIX_VEX_0F3800, PREFIX_VEX_0F3801, PREFIX_VEX_0F3802, + PREFIX_VEX_0F3803, PREFIX_VEX_0F3804, PREFIX_VEX_0F3805, + PREFIX_VEX_0F3806, PREFIX_VEX_0F3807, PREFIX_VEX_0F3808, + PREFIX_VEX_0F3809, PREFIX_VEX_0F380A, PREFIX_VEX_0F380B, + PREFIX_VEX_0F380C, PREFIX_VEX_0F380D, PREFIX_VEX_0F380E, + PREFIX_VEX_0F380F, PREFIX_VEX_0F3813, PREFIX_VEX_0F3816, + PREFIX_VEX_0F3817, PREFIX_VEX_0F3818, PREFIX_VEX_0F3819, + PREFIX_VEX_0F381A, PREFIX_VEX_0F381C, PREFIX_VEX_0F381D, + PREFIX_VEX_0F381E, PREFIX_VEX_0F3820, PREFIX_VEX_0F3821, + PREFIX_VEX_0F3822, PREFIX_VEX_0F3823, PREFIX_VEX_0F3824, + PREFIX_VEX_0F3825, PREFIX_VEX_0F3828, PREFIX_VEX_0F3829, + PREFIX_VEX_0F382A, PREFIX_VEX_0F382B, PREFIX_VEX_0F382C, + PREFIX_VEX_0F382D, PREFIX_VEX_0F382E, PREFIX_VEX_0F382F, + PREFIX_VEX_0F3830, PREFIX_VEX_0F3831, PREFIX_VEX_0F3832, + PREFIX_VEX_0F3833, PREFIX_VEX_0F3834, PREFIX_VEX_0F3835, + PREFIX_VEX_0F3836, PREFIX_VEX_0F3837, PREFIX_VEX_0F3838, + PREFIX_VEX_0F3839, PREFIX_VEX_0F383A, PREFIX_VEX_0F383B, + PREFIX_VEX_0F383C, PREFIX_VEX_0F383D, PREFIX_VEX_0F383E, + PREFIX_VEX_0F383F, PREFIX_VEX_0F3840, PREFIX_VEX_0F3841, + PREFIX_VEX_0F3845, PREFIX_VEX_0F3846, PREFIX_VEX_0F3847, + PREFIX_VEX_0F3858, PREFIX_VEX_0F3859, PREFIX_VEX_0F385A, + PREFIX_VEX_0F3878, PREFIX_VEX_0F3879, PREFIX_VEX_0F388C, + PREFIX_VEX_0F388E, PREFIX_VEX_0F3890, PREFIX_VEX_0F3891, + PREFIX_VEX_0F3892, PREFIX_VEX_0F3893, PREFIX_VEX_0F3896, + PREFIX_VEX_0F3897, PREFIX_VEX_0F3898, PREFIX_VEX_0F3899, + PREFIX_VEX_0F389A, PREFIX_VEX_0F389B, PREFIX_VEX_0F389C, + PREFIX_VEX_0F389D, PREFIX_VEX_0F389E, PREFIX_VEX_0F389F, + PREFIX_VEX_0F38A6, PREFIX_VEX_0F38A7, PREFIX_VEX_0F38A8, + PREFIX_VEX_0F38A9, PREFIX_VEX_0F38AA, PREFIX_VEX_0F38AB, + PREFIX_VEX_0F38AC, PREFIX_VEX_0F38AD, PREFIX_VEX_0F38AE, + PREFIX_VEX_0F38AF, PREFIX_VEX_0F38B6, PREFIX_VEX_0F38B7, + PREFIX_VEX_0F38B8, PREFIX_VEX_0F38B9, PREFIX_VEX_0F38BA, + PREFIX_VEX_0F38BB, PREFIX_VEX_0F38BC, PREFIX_VEX_0F38BD, + PREFIX_VEX_0F38BE, PREFIX_VEX_0F38BF, PREFIX_VEX_0F38CF, + PREFIX_VEX_0F38DB, PREFIX_VEX_0F38DC, PREFIX_VEX_0F38DD, + PREFIX_VEX_0F38DE, PREFIX_VEX_0F38DF, PREFIX_VEX_0F3A00, + PREFIX_VEX_0F3A01, PREFIX_VEX_0F3A02, PREFIX_VEX_0F3A04, + PREFIX_VEX_0F3A05, PREFIX_VEX_0F3A06, PREFIX_VEX_0F3A08, + PREFIX_VEX_0F3A09, PREFIX_VEX_0F3A0A, PREFIX_VEX_0F3A0B, + PREFIX_VEX_0F3A0C, PREFIX_VEX_0F3A0D, PREFIX_VEX_0F3A0E, + PREFIX_VEX_0F3A0F, PREFIX_VEX_0F3A14, PREFIX_VEX_0F3A15, + PREFIX_VEX_0F3A16, PREFIX_VEX_0F3A17, PREFIX_VEX_0F3A18, + PREFIX_VEX_0F3A19, PREFIX_VEX_0F3A1D, PREFIX_VEX_0F3A20, + PREFIX_VEX_0F3A21, PREFIX_VEX_0F3A22, PREFIX_VEX_0F3A30, + PREFIX_VEX_0F3A31, PREFIX_VEX_0F3A32, PREFIX_VEX_0F3A33, + PREFIX_VEX_0F3A38, PREFIX_VEX_0F3A39, PREFIX_VEX_0F3A40, + PREFIX_VEX_0F3A41, PREFIX_VEX_0F3A42, PREFIX_VEX_0F3A44, + PREFIX_VEX_0F3A46, PREFIX_VEX_0F3A48, PREFIX_VEX_0F3A49, + PREFIX_VEX_0F3A4A, PREFIX_VEX_0F3A4B, PREFIX_VEX_0F3A4C, + PREFIX_VEX_0F3A5C, PREFIX_VEX_0F3A5D, PREFIX_VEX_0F3A5E, + PREFIX_VEX_0F3A5F, PREFIX_VEX_0F3A60, PREFIX_VEX_0F3A61, + PREFIX_VEX_0F3A62, PREFIX_VEX_0F3A63, PREFIX_VEX_0F3A68, + PREFIX_VEX_0F3A69, PREFIX_VEX_0F3A6A, PREFIX_VEX_0F3A6B, + PREFIX_VEX_0F3A6C, PREFIX_VEX_0F3A6D, PREFIX_VEX_0F3A6E, + PREFIX_VEX_0F3A6F, PREFIX_VEX_0F3A78, PREFIX_VEX_0F3A79, + PREFIX_VEX_0F3A7A, PREFIX_VEX_0F3A7B, PREFIX_VEX_0F3A7C, + PREFIX_VEX_0F3A7D, PREFIX_VEX_0F3A7E, PREFIX_VEX_0F3A7F, + PREFIX_VEX_0F3ACE, PREFIX_VEX_0F3ACF, PREFIX_VEX_0F3ADF, + PREFIX_EVEX_0F64, PREFIX_EVEX_0F65, PREFIX_EVEX_0F66, + PREFIX_EVEX_0F6E, PREFIX_EVEX_0F71_REG_2, + PREFIX_EVEX_0F71_REG_4, PREFIX_EVEX_0F71_REG_6, + PREFIX_EVEX_0F72_REG_0, PREFIX_EVEX_0F72_REG_1, + PREFIX_EVEX_0F72_REG_2, PREFIX_EVEX_0F72_REG_4, + PREFIX_EVEX_0F72_REG_6, PREFIX_EVEX_0F73_REG_2, + PREFIX_EVEX_0F73_REG_3, PREFIX_EVEX_0F73_REG_6, + PREFIX_EVEX_0F73_REG_7, PREFIX_EVEX_0F74, PREFIX_EVEX_0F75, + PREFIX_EVEX_0F76, PREFIX_EVEX_0FC4, PREFIX_EVEX_0FC5, + PREFIX_EVEX_0FD6, PREFIX_EVEX_0FDB, PREFIX_EVEX_0FDF, + PREFIX_EVEX_0FE2, PREFIX_EVEX_0FE7, PREFIX_EVEX_0FEB, + PREFIX_EVEX_0FEF, PREFIX_EVEX_0F380D, PREFIX_EVEX_0F3816, + PREFIX_EVEX_0F3819, PREFIX_EVEX_0F381A, PREFIX_EVEX_0F381B, + PREFIX_EVEX_0F381E, PREFIX_EVEX_0F381F, PREFIX_EVEX_0F382C, + PREFIX_EVEX_0F382D, PREFIX_EVEX_0F3836, PREFIX_EVEX_0F3837, + PREFIX_EVEX_0F383B, PREFIX_EVEX_0F383D, PREFIX_EVEX_0F383F, + PREFIX_EVEX_0F3840, PREFIX_EVEX_0F3842, PREFIX_EVEX_0F3843, + PREFIX_EVEX_0F3844, PREFIX_EVEX_0F3845, PREFIX_EVEX_0F3846, + PREFIX_EVEX_0F3847, PREFIX_EVEX_0F384C, PREFIX_EVEX_0F384D, + PREFIX_EVEX_0F384E, PREFIX_EVEX_0F384F, PREFIX_EVEX_0F3850, + PREFIX_EVEX_0F3851, PREFIX_EVEX_0F3854, PREFIX_EVEX_0F3855, + PREFIX_EVEX_0F3859, PREFIX_EVEX_0F385A, PREFIX_EVEX_0F385B, + PREFIX_EVEX_0F3862, PREFIX_EVEX_0F3863, PREFIX_EVEX_0F3864, + PREFIX_EVEX_0F3865, PREFIX_EVEX_0F3866, PREFIX_EVEX_0F3870, + PREFIX_EVEX_0F3871, PREFIX_EVEX_0F3873, PREFIX_EVEX_0F3875, + PREFIX_EVEX_0F3876, PREFIX_EVEX_0F3877, PREFIX_EVEX_0F387A, + PREFIX_EVEX_0F387B, PREFIX_EVEX_0F387C, PREFIX_EVEX_0F387D, + PREFIX_EVEX_0F387E, PREFIX_EVEX_0F387F, PREFIX_EVEX_0F3883, + PREFIX_EVEX_0F3888, PREFIX_EVEX_0F3889, PREFIX_EVEX_0F388A, + PREFIX_EVEX_0F388B, PREFIX_EVEX_0F388D, PREFIX_EVEX_0F388F, + PREFIX_EVEX_0F3890, PREFIX_EVEX_0F3891, PREFIX_EVEX_0F3892, + PREFIX_EVEX_0F3893, PREFIX_EVEX_0F38A0, PREFIX_EVEX_0F38A1, + PREFIX_EVEX_0F38A2, PREFIX_EVEX_0F38A3, PREFIX_EVEX_0F38B4, + PREFIX_EVEX_0F38B5, PREFIX_EVEX_0F38C4, + PREFIX_EVEX_0F38C6_REG_1, PREFIX_EVEX_0F38C6_REG_2, + PREFIX_EVEX_0F38C6_REG_5, PREFIX_EVEX_0F38C6_REG_6, + PREFIX_EVEX_0F38C7_REG_1, PREFIX_EVEX_0F38C7_REG_2, + PREFIX_EVEX_0F38C7_REG_5, PREFIX_EVEX_0F38C7_REG_6, + PREFIX_EVEX_0F38C8, PREFIX_EVEX_0F38CA, PREFIX_EVEX_0F38CB, + PREFIX_EVEX_0F38CC, PREFIX_EVEX_0F38CD, PREFIX_EVEX_0F3A00, + PREFIX_EVEX_0F3A01, PREFIX_EVEX_0F3A03, PREFIX_EVEX_0F3A05, + PREFIX_EVEX_0F3A08, PREFIX_EVEX_0F3A09, PREFIX_EVEX_0F3A0A, + PREFIX_EVEX_0F3A0B, PREFIX_EVEX_0F3A14, PREFIX_EVEX_0F3A15, + PREFIX_EVEX_0F3A16, PREFIX_EVEX_0F3A17, PREFIX_EVEX_0F3A18, + PREFIX_EVEX_0F3A19, PREFIX_EVEX_0F3A1A, PREFIX_EVEX_0F3A1B, + PREFIX_EVEX_0F3A1E, PREFIX_EVEX_0F3A1F, PREFIX_EVEX_0F3A20, + PREFIX_EVEX_0F3A21, PREFIX_EVEX_0F3A22, PREFIX_EVEX_0F3A23, + PREFIX_EVEX_0F3A25, PREFIX_EVEX_0F3A26, PREFIX_EVEX_0F3A27, + PREFIX_EVEX_0F3A38, PREFIX_EVEX_0F3A39, PREFIX_EVEX_0F3A3A, + PREFIX_EVEX_0F3A3B, PREFIX_EVEX_0F3A3E, PREFIX_EVEX_0F3A3F, + PREFIX_EVEX_0F3A42, PREFIX_EVEX_0F3A43, PREFIX_EVEX_0F3A50, + PREFIX_EVEX_0F3A51, PREFIX_EVEX_0F3A54, PREFIX_EVEX_0F3A55, + PREFIX_EVEX_0F3A56, PREFIX_EVEX_0F3A57, PREFIX_EVEX_0F3A66, + PREFIX_EVEX_0F3A67, PREFIX_EVEX_0F3A70, PREFIX_EVEX_0F3A71, + PREFIX_EVEX_0F3A72, PREFIX_EVEX_0F3A73): Delete. + (MOD_0F382A_PREFIX_2, MOD_0F38F5_PREFIX_2, + MOD_VEX_0FD7_PREFIX_2, MOD_VEX_0FE7_PREFIX_2, + MOD_VEX_0F381A_PREFIX_2, MOD_VEX_0F382A_PREFIX_2, + MOD_VEX_0F382C_PREFIX_2, MOD_VEX_0F382D_PREFIX_2, + MOD_VEX_0F382E_PREFIX_2, MOD_VEX_0F382F_PREFIX_2, + MOD_VEX_0F385A_PREFIX_2, MOD_VEX_0F388C_PREFIX_2, + MOD_VEX_0F388E_PREFIX_2, MOD_VEX_W_0_0F3A30_P_2_LEN_0, + MOD_VEX_W_1_0F3A30_P_2_LEN_0, MOD_VEX_W_0_0F3A31_P_2_LEN_0, + MOD_VEX_W_1_0F3A31_P_2_LEN_0, MOD_VEX_W_0_0F3A32_P_2_LEN_0, + MOD_VEX_W_1_0F3A32_P_2_LEN_0, MOD_VEX_W_0_0F3A33_P_2_LEN_0, + MOD_VEX_W_1_0F3A33_P_2_LEN_0, MOD_EVEX_0F381A_P_2_W_0, + MOD_EVEX_0F381A_P_2_W_1, MOD_EVEX_0F381B_P_2_W_0, + MOD_EVEX_0F381B_P_2_W_1, MOD_EVEX_0F385A_P_2_W_0, + MOD_EVEX_0F385A_P_2_W_1, MOD_EVEX_0F385B_P_2_W_0, + MOD_EVEX_0F385B_P_2_W_1, VEX_LEN_0F6E_P_2, + VEX_LEN_0FC4_P_2, VEX_LEN_0FC5_P_2, VEX_LEN_0FD6_P_2, + VEX_LEN_0FF7_P_2, VEX_LEN_0F3816_P_2, VEX_LEN_0F3819_P_2, + VEX_LEN_0F381A_P_2_M_0, VEX_LEN_0F3836_P_2, + VEX_LEN_0F3841_P_2, VEX_LEN_0F385A_P_2_M_0, + VEX_LEN_0F38DB_P_2, VEX_LEN_0F3A00_P_2, VEX_LEN_0F3A01_P_2, + VEX_LEN_0F3A06_P_2, VEX_LEN_0F3A14_P_2, VEX_LEN_0F3A15_P_2, + VEX_LEN_0F3A16_P_2, VEX_LEN_0F3A17_P_2, VEX_LEN_0F3A18_P_2, + VEX_LEN_0F3A19_P_2, VEX_LEN_0F3A20_P_2, VEX_LEN_0F3A21_P_2, + VEX_LEN_0F3A22_P_2, VEX_LEN_0F3A30_P_2, VEX_LEN_0F3A31_P_2, + VEX_LEN_0F3A32_P_2, VEX_LEN_0F3A33_P_2, VEX_LEN_0F3A38_P_2, + VEX_LEN_0F3A39_P_2, VEX_LEN_0F3A41_P_2, VEX_LEN_0F3A46_P_2, + VEX_LEN_0F3A60_P_2, VEX_LEN_0F3A61_P_2, VEX_LEN_0F3A62_P_2, + VEX_LEN_0F3A63_P_2, VEX_LEN_0F3ADF_P_2, EVEX_LEN_0F6E_P_2, + EVEX_LEN_0FC4_P_2, EVEX_LEN_0FC5_P_2, EVEX_LEN_0FD6_P_2, + EVEX_LEN_0F3816_P_2, EVEX_LEN_0F3819_P_2_W_0, + EVEX_LEN_0F3819_P_2_W_1, EVEX_LEN_0F381A_P_2_W_0_M_0, + EVEX_LEN_0F381A_P_2_W_1_M_0, EVEX_LEN_0F381B_P_2_W_0_M_0, + EVEX_LEN_0F381B_P_2_W_1_M_0, EVEX_LEN_0F3836_P_2, + EVEX_LEN_0F385A_P_2_W_0_M_0, EVEX_LEN_0F385A_P_2_W_1_M_0, + EVEX_LEN_0F385B_P_2_W_0_M_0, EVEX_LEN_0F385B_P_2_W_1_M_0, + EVEX_LEN_0F38C6_REG_1_PREFIX_2, EVEX_LEN_0F38C6_REG_2_PREFIX_2, + EVEX_LEN_0F38C6_REG_5_PREFIX_2, EVEX_LEN_0F38C6_REG_6_PREFIX_2, + EVEX_LEN_0F38C7_R_1_P_2_W_0, EVEX_LEN_0F38C7_R_1_P_2_W_1, + EVEX_LEN_0F38C7_R_2_P_2_W_0, EVEX_LEN_0F38C7_R_2_P_2_W_1, + EVEX_LEN_0F38C7_R_5_P_2_W_0, EVEX_LEN_0F38C7_R_5_P_2_W_1, + EVEX_LEN_0F38C7_R_6_P_2_W_0, EVEX_LEN_0F38C7_R_6_P_2_W_1, + EVEX_LEN_0F3A00_P_2_W_1, EVEX_LEN_0F3A01_P_2_W_1, + EVEX_LEN_0F3A14_P_2, EVEX_LEN_0F3A15_P_2, EVEX_LEN_0F3A16_P_2, + EVEX_LEN_0F3A17_P_2, EVEX_LEN_0F3A18_P_2_W_0, + EVEX_LEN_0F3A18_P_2_W_1, EVEX_LEN_0F3A19_P_2_W_0, + EVEX_LEN_0F3A19_P_2_W_1, EVEX_LEN_0F3A1A_P_2_W_0, + EVEX_LEN_0F3A1A_P_2_W_1, EVEX_LEN_0F3A1B_P_2_W_0, + EVEX_LEN_0F3A1B_P_2_W_1, EVEX_LEN_0F3A20_P_2, + EVEX_LEN_0F3A21_P_2_W_0, EVEX_LEN_0F3A22_P_2, + EVEX_LEN_0F3A23_P_2_W_0, EVEX_LEN_0F3A23_P_2_W_1, + EVEX_LEN_0F3A38_P_2_W_0, EVEX_LEN_0F3A38_P_2_W_1, + EVEX_LEN_0F3A39_P_2_W_0, EVEX_LEN_0F3A39_P_2_W_1, + EVEX_LEN_0F3A3A_P_2_W_0, EVEX_LEN_0F3A3A_P_2_W_1, + EVEX_LEN_0F3A3B_P_2_W_0, EVEX_LEN_0F3A3B_P_2_W_1, + EVEX_LEN_0F3A43_P_2_W_0, EVEX_LEN_0F3A43_P_2_W_1 + VEX_W_0F380C_P_2, VEX_W_0F380D_P_2, VEX_W_0F380E_P_2, + VEX_W_0F380F_P_2, VEX_W_0F3813_P_2, VEX_W_0F3816_P_2, + VEX_W_0F3818_P_2, VEX_W_0F3819_P_2, + VEX_W_0F381A_P_2_M_0_L_0, VEX_W_0F382C_P_2_M_0, + VEX_W_0F382D_P_2_M_0, VEX_W_0F382E_P_2_M_0, + VEX_W_0F382F_P_2_M_0, VEX_W_0F3836_P_2, + VEX_W_0F3846_P_2, VEX_W_0F3858_P_2, VEX_W_0F3859_P_2, + VEX_W_0F385A_P_2_M_0_L_0, VEX_W_0F3878_P_2, + VEX_W_0F3879_P_2, VEX_W_0F38CF_P_2, VEX_W_0F3A00_P_2, + VEX_W_0F3A01_P_2, VEX_W_0F3A02_P_2, VEX_W_0F3A04_P_2, + VEX_W_0F3A05_P_2, VEX_W_0F3A06_P_2_L_0, + VEX_W_0F3A18_P_2_L_0, VEX_W_0F3A19_P_2_L_0, + VEX_W_0F3A1D_P_2, VEX_W_0F3A30_P_2_LEN_0, + VEX_W_0F3A31_P_2_LEN_0, VEX_W_0F3A32_P_2_LEN_0, + VEX_W_0F3A33_P_2_LEN_0, VEX_W_0F3A38_P_2_L_0, + VEX_W_0F3A39_P_2_L_0, VEX_W_0F3A46_P_2_L_0, + VEX_W_0F3A4A_P_2, VEX_W_0F3A4B_P_2, VEX_W_0F3A4C_P_2, + VEX_W_0F3ACE_P_2, VEX_W_0F3ACF_P_2, EVEX_W_0F66_P_2, + EVEX_W_0F72_R_2_P_2, EVEX_W_0F72_R_6_P_2, + EVEX_W_0F73_R_2_P_2, EVEX_W_0F73_R_6_P_2, + EVEX_W_0F76_P_2, EVEX_W_0FD6_P_2, EVEX_W_0FE7_P_2, + EVEX_W_0F380D_P_2, EVEX_W_0F3819_P_2, + EVEX_W_0F381A_P_2, EVEX_W_0F381B_P_2, + EVEX_W_0F381E_P_2, EVEX_W_0F381F_P_2, + EVEX_W_0F3837_P_2, EVEX_W_0F3859_P_2, + EVEX_W_0F385A_P_2, EVEX_W_0F385B_P_2, + EVEX_W_0F3870_P_2, EVEX_W_0F387A_P_2, + EVEX_W_0F387B_P_2, EVEX_W_0F3883_P_2, + EVEX_W_0F3891_P_2, EVEX_W_0F3893_P_2, + EVEX_W_0F38A1_P_2, EVEX_W_0F38A3_P_2, + EVEX_W_0F38C7_R_1_P_2, EVEX_W_0F38C7_R_2_P_2, + EVEX_W_0F38C7_R_5_P_2, EVEX_W_0F38C7_R_6_P_2, + EVEX_W_0F3A00_P_2, EVEX_W_0F3A01_P_2, + EVEX_W_0F3A05_P_2, EVEX_W_0F3A08_P_2, + EVEX_W_0F3A09_P_2, EVEX_W_0F3A0A_P_2, + EVEX_W_0F3A0B_P_2, EVEX_W_0F3A18_P_2, + EVEX_W_0F3A19_P_2, EVEX_W_0F3A1A_P_2, + EVEX_W_0F3A1B_P_2, EVEX_W_0F3A21_P_2, + EVEX_W_0F3A23_P_2, EVEX_W_0F3A38_P_2, + EVEX_W_0F3A39_P_2, EVEX_W_0F3A3A_P_2, + EVEX_W_0F3A3B_P_2, EVEX_W_0F3A42_P_2, + EVEX_W_0F3A43_P_2, EVEX_W_0F3A70_P_2, + EVEX_W_0F3A72_P_2): Rename to ... + (MOD_0F382A, MOD_0F38F5, MOD_VEX_0FD7, MOD_VEX_0FE7, + MOD_VEX_0F381A, MOD_VEX_0F382A, MOD_VEX_0F382C, MOD_VEX_0F382D, + MOD_VEX_0F382E, MOD_VEX_0F382F, MOD_VEX_0F385A, MOD_VEX_0F388C, + MOD_VEX_0F388E, MOD_VEX_0F3A30_L_0_W_0, + MOD_VEX_0F3A30_L_0_W_1, MOD_VEX_0F3A31_L_0_W_0, + MOD_VEX_0F3A31_L_0_W_1, MOD_VEX_0F3A32_L_0_W_0, + MOD_VEX_0F3A32_L_0_W_1, MOD_VEX_0F3A33_L_0_W_0, + MOD_VEX_0F3A33_L_0_W_1, MOD_EVEX_0F381A_W_0, + MOD_EVEX_0F381A_W_1, MOD_EVEX_0F381B_W_0, MOD_EVEX_0F381B_W_1, + MOD_EVEX_0F385A_W_0, MOD_EVEX_0F385A_W_1, MOD_EVEX_0F385B_W_0, + MOD_EVEX_0F385B_W_1, VEX_LEN_0F6E, 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_0F3836, VEX_LEN_0F3841, + VEX_LEN_0F385A_M_0, VEX_LEN_0F38DB, VEX_LEN_0F3A00, + VEX_LEN_0F3A01, VEX_LEN_0F3A06, VEX_LEN_0F3A14, VEX_LEN_0F3A15, + VEX_LEN_0F3A16, VEX_LEN_0F3A17, VEX_LEN_0F3A18, VEX_LEN_0F3A19, + VEX_LEN_0F3A20, VEX_LEN_0F3A21, VEX_LEN_0F3A22, VEX_LEN_0F3A30, + VEX_LEN_0F3A31, VEX_LEN_0F3A32, VEX_LEN_0F3A33, VEX_LEN_0F3A38, + VEX_LEN_0F3A39, VEX_LEN_0F3A41, VEX_LEN_0F3A46, VEX_LEN_0F3A60, + VEX_LEN_0F3A61, VEX_LEN_0F3A62, VEX_LEN_0F3A63, VEX_LEN_0F3ADF, + EVEX_LEN_0F6E, EVEX_LEN_0FC4, EVEX_LEN_0FC5, EVEX_LEN_0FD6, + EVEX_LEN_0F3816, EVEX_LEN_0F3819_W_0, EVEX_LEN_0F3819_W_1, + EVEX_LEN_0F381A_W_0_M_0, EVEX_LEN_0F381A_W_1_M_0, + EVEX_LEN_0F381B_W_0_M_0, EVEX_LEN_0F381B_W_1_M_0, + EVEX_LEN_0F3836, EVEX_LEN_0F385A_W_0_M_0, + EVEX_LEN_0F385A_W_1_M_0, EVEX_LEN_0F385B_W_0_M_0, + EVEX_LEN_0F385B_W_1_M_0, EVEX_LEN_0F38C6_R_1_M_0, + EVEX_LEN_0F38C6_R_2_M_0, EVEX_LEN_0F38C6_R_5_M_0, + EVEX_LEN_0F38C6_R_6_M_0, EVEX_LEN_0F38C7_R_1_M_0_W_0, + EVEX_LEN_0F38C7_R_1_M_0_W_1, EVEX_LEN_0F38C7_R_2_M_0_W_0, + EVEX_LEN_0F38C7_R_2_M_0_W_1, EVEX_LEN_0F38C7_R_5_M_0_W_0, + EVEX_LEN_0F38C7_R_5_M_0_W_1, EVEX_LEN_0F38C7_R_6_M_0_W_0, + EVEX_LEN_0F38C7_R_6_M_0_W_1, EVEX_LEN_0F3A00_W_1, + EVEX_LEN_0F3A01_W_1, EVEX_LEN_0F3A14, EVEX_LEN_0F3A15, + EVEX_LEN_0F3A16, EVEX_LEN_0F3A17, EVEX_LEN_0F3A18_W_0, + EVEX_LEN_0F3A18_W_1, EVEX_LEN_0F3A19_W_0, + EVEX_LEN_0F3A19_W_1, EVEX_LEN_0F3A1A_W_0, + EVEX_LEN_0F3A1A_W_1, EVEX_LEN_0F3A1B_W_0, + EVEX_LEN_0F3A1B_W_1, EVEX_LEN_0F3A20, EVEX_LEN_0F3A21_W_0, + EVEX_LEN_0F3A22, EVEX_LEN_0F3A23_W_0, EVEX_LEN_0F3A23_W_1, + EVEX_LEN_0F3A38_W_0, EVEX_LEN_0F3A38_W_1, + EVEX_LEN_0F3A39_W_0, EVEX_LEN_0F3A39_W_1, + EVEX_LEN_0F3A3A_W_0, EVEX_LEN_0F3A3A_W_1, + EVEX_LEN_0F3A3B_W_0, EVEX_LEN_0F3A3B_W_1, + EVEX_LEN_0F3A43_W_0, EVEX_LEN_0F3A43_W_1 + VEX_W_0F380C, VEX_W_0F380D, VEX_W_0F380E, VEX_W_0F380F, + VEX_W_0F3813, 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_0F3836, VEX_W_0F3846, VEX_W_0F3858, VEX_W_0F3859, + VEX_W_0F385A_M_0_L_0, VEX_W_0F3878, VEX_W_0F3879, + VEX_W_0F38CF, VEX_W_0F3A00_L_1, VEX_W_0F3A01_L_1, + VEX_W_0F3A02, VEX_W_0F3A04, VEX_W_0F3A05, VEX_W_0F3A06_L_1, + VEX_W_0F3A18_L_1, VEX_W_0F3A19_L_1, VEX_W_0F3A1D, + VEX_W_0F3A30_L_0, VEX_W_0F3A31_L_0, VEX_W_0F3A32_L_0, + VEX_W_0F3A33_L_0, VEX_W_0F3A38_L_1, VEX_W_0F3A39_L_1, + VEX_W_0F3A46_L_1, VEX_W_0F3A4A, VEX_W_0F3A4B, VEX_W_0F3A4C, + VEX_W_0F3ACE, VEX_W_0F3ACF, EVEX_W_0F66, EVEX_W_0F72_R_2, + EVEX_W_0F72_R_6, EVEX_W_0F73_R_2, EVEX_W_0F73_R_6, + EVEX_W_0F76, EVEX_W_0FD6_L_0, EVEX_W_0FE7, EVEX_W_0F380D, + EVEX_W_0F3819, EVEX_W_0F381A, EVEX_W_0F381B, EVEX_W_0F381E, + EVEX_W_0F381F, EVEX_W_0F3837, EVEX_W_0F3859, EVEX_W_0F385A, + EVEX_W_0F385B, EVEX_W_0F3870, EVEX_W_0F387A, EVEX_W_0F387B, + EVEX_W_0F3883, EVEX_W_0F3891, EVEX_W_0F3893, EVEX_W_0F38A1, + EVEX_W_0F38A3, EVEX_W_0F38C7_R_1_M_0, + EVEX_W_0F38C7_R_2_M_0, EVEX_W_0F38C7_R_5_M_0, + EVEX_W_0F38C7_R_6_M_0, EVEX_W_0F3A00, EVEX_W_0F3A01, + EVEX_W_0F3A05, EVEX_W_0F3A08, EVEX_W_0F3A09, EVEX_W_0F3A0A, + EVEX_W_0F3A0B, EVEX_W_0F3A18, EVEX_W_0F3A19, EVEX_W_0F3A1A, + EVEX_W_0F3A1B, EVEX_W_0F3A21, EVEX_W_0F3A23, EVEX_W_0F3A38, + EVEX_W_0F3A39, EVEX_W_0F3A3A, EVEX_W_0F3A3B, EVEX_W_0F3A42, + EVEX_W_0F3A43, EVEX_W_0F3A70, EVEX_W_0F3A72): ... these + respectively. + (dis386_twobyte, three_byte_table, vex_table, vex_len_table, + vex_w_table, mod_table): Replace / remove respective entries. + (print_insn): Move up dp->prefix_requirement handling. Handle + PREFIX_DATA. + * i386-dis-evex.h, i386-dis-evex-len.h, i386-dis-evex-mod.h, + i386-dis-evex-prefix.h, i386-dis-evex-reg.h, i386-dis-evex-w.h: + Replace / remove respective entries. + +2020-07-14 Jan Beulich <jbeulich@suse.com> + + * i386-dis.c (PREFIX_EVEX_0F2C, PREFIX_EVEX_0F2D, + PREFIX_EVEX_0F2E, PREFIX_EVEX_0F2F): Delete. + (prefix_table): Add EXxEVexS operand to vcvttss2si, vcvttsd2si, + vcvtss2si, vcvtsd2si, vucomiss, and vucomisd table entries. + Retain X macro and PREFIX_OPCODE use from tjhe EVEX table for + the latter two. + * i386-dis-evex.h (evex_table): Reference VEX table for opcodes + 0F2C, 0F2D, 0F2E, and 0F2F. + * i386-dis-evex-prefix.h: Delete opcode 0F2C, 0F2D, 0F2E, and + 0F2F table entries. + +2020-07-14 Jan Beulich <jbeulich@suse.com> + + * i386-dis.c (OP_VexR, VexScalarR): New. + (OP_EX_Vex, OP_XMM_Vex, EXdVexScalarS, EXqVexScalarS, + XMVexScalar, d_scalar_swap_mode, q_scalar_swap_mode, + need_vex_reg): Delete. + (prefix_table): Replace VexScalar by VexScalarR and + XMVexScalar by XMScalar for vmovss and vmovsd. Replace + EXdVexScalarS by EXdS and EXqVexScalarS by EXqS. + (vex_len_table): Replace EXqVexScalarS by EXqS. + (get_valid_dis386): Don't set need_vex_reg. + (print_insn): Don't initialize need_vex_reg. + (intel_operand_size, OP_E_memory): Drop d_scalar_swap_mode and + q_scalar_swap_mode cases. + (OP_EX): Don't check for d_scalar_swap_mode and + q_scalar_swap_mode. + (OP_VEX): Done check need_vex_reg. + * i386-dis-evex-w.h: Replace VexScalar by VexScalarR and + XMVexScalar by XMScalar for vmovss and vmovsd. Replace + EXdVexScalarS by EXdS and EXqVexScalarS by EXqS. + +2020-07-14 Jan Beulich <jbeulich@suse.com> + + * i386-dis.c (Vex128, Vex256, vex128_mode, vex256_mode): Delete. + (VEX_W_0F381A_P_2_M_0, VEX_W_0F385A_P_2_M_0, VEX_W_0F3A06_P_2, + VEX_W_0F3A18_P_2, VEX_W_0F3A19_P_2, VEX_W_0F3A38_P_2, + VEX_W_0F3A39_P_2, VEX_W_0F3A46_P_2): Rename to ... + (VEX_W_0F381A_P_2_M_0_L_0, VEX_W_0F385A_P_2_M_0_L_0, + VEX_W_0F3A06_P_2_L_0, VEX_W_0F3A18_P_2_L_0, + VEX_W_0F3A19_P_2_L_0, VEX_W_0F3A38_P_2_L_0, + VEX_W_0F3A39_P_2_L_0, VEX_W_0F3A46_P_2_L_0): ... respectively. + (vex_table): Replace Vex128 by Vex. + (vex_len_table): Likewise. Adjust referenced enum names. + (vex_w_table): Replace Vex128 and Vex256 by Vex. Adjust + referenced enum names. + (OP_VEX): Drop vex128_mode and vex256_mode cases. + * i386-dis-evex-len.h (evex_len_table): Replace Vex128 by Vex. + +2020-07-14 Jan Beulich <jbeulich@suse.com> + + * i386-dis.c (dis386): "LW" description now applies to "DQ". + (putop): Handle "DQ". Don't handle "LW" anymore. + (prefix_table, mod_table): Replace %LW by %DQ. + * i386-dis-evex-len.h, i386-dis-evex-prefix.h: Likewise. + +2020-07-14 Jan Beulich <jbeulich@suse.com> + + * i386-dis.c (OP_E_memory): Move xmm_mw_mode, xmm_mb_mode, + dqd_mode, xmm_md_mode, d_mode, d_swap_mode, and + d_scalar_swap_mode case handling. Move shift adjsutment into + the case its applicable to. + +2020-07-14 Jan Beulich <jbeulich@suse.com> + + * i386-dis.c (EVEX_W_0F3862_P_2, EVEX_W_0F3863_P_2): Delete. + (EXbScalar, EXwScalar): Fold to ... + (EXbwUnit): ... this. + (b_scalar_mode, w_scalar_mode): Fold to ... + (bw_unit_mode): ... this. + (intel_operand_size, OP_E_memory): Replace b_scalar_mode / + w_scalar_mode handling by bw_unit_mode one. + * i386-dis-evex-w.h: Move entries for opcodes 0F3862 and 0F3863 + ... + * i386-dis-evex-prefix.h: ... here. + +2020-07-14 Jan Beulich <jbeulich@suse.com> + + * i386-dis.c (PCMPESTR_Fixup): Delete. + (dis386): Adjust "LQ" description. + (prefix_table): Make %LQ apply to AT&T case only for cvtsi2ss, + cvtsi2sd, ptwrite, vcvtsi2ss, and vcvtsi2sd. Replace use of + PCMPESTR_Fixup by !%LQ and EXx for pcmpestrm, pcmpestri, + vpcmpestrm, and vpcmpestri. + (putop): Honor "cond" when handling LQ. + * i386-dis-evex-prefix.h: Make %LQ apply to AT&T case only for + vcvtsi2ss and vcvtusi2ss. + * i386-dis-evex-w.h: Make %LQ apply to AT&T case only for + vcvtsi2sd and vcvtusi2sd. + +2020-07-14 Jan Beulich <jbeulich@suse.com> + + * i386-dis.c (VCMP_Fixup, VCMP): Delete. + (simd_cmp_op): Add const. + (vex_cmp_op): Move up and drop initial 8 entries. Add const. + (CMP_Fixup): Handle VEX case. + (prefix_table): Replace VCMP by CMP. + * i386-dis-evex-prefix.h, i386-dis-evex-w.h: Likewise. + +2020-07-14 Jan Beulich <jbeulich@suse.com> + + * i386-dis.c (MOVBE_Fixup): Delete. + (Mv): Define. + (prefix_table): Use Mv for movbe entries. + +2020-07-14 Jan Beulich <jbeulich@suse.com> + + * i386-dis.c (CRC32_Fixup): Delete. + (prefix_table): Use Eb/Ev for crc32 entries. + +2020-07-14 Jan Beulich <jbeulich@suse.com> + + * i386-dis.c (OP_E_register, OP_G, OP_REG, CRC32_Fixup): + Conditionalize invocations of "USED_REX (0)". + +2020-07-14 Jan Beulich <jbeulich@suse.com> + + * i386-dis.c (eBX, eCX, eDX, eSP, eBP, eSI, eDI, DL, BL, AH, + CH, DH, BH, AX, DX): Delete. + (OP_IMREG): Drop handling of eBX_reg, eCX_reg, eDX_reg, eSP_reg, + eBP_reg, eSI_reg, eDI_reg, dl_reg, bl_reg, ah_reg, ch_reg, + dh_reg, bh_reg, ax_reg, and dx_reg. Simplify what's left. + +2020-07-10 Lili Cui <lili.cui@intel.com> + + * i386-dis.c (TMM): New. + (EXtmm): Likewise. + (VexTmm): Likewise. + (MVexSIBMEM): Likewise. + (tmm_mode): Likewise. + (vex_sibmem_mode): Likewise. + (REG_VEX_0F3849_X86_64_P_0_W_0_M_1): Likewise. + (MOD_VEX_0F3849_X86_64_P_0_W_0): Likewise. + (MOD_VEX_0F3849_X86_64_P_2_W_0): Likewise. + (MOD_VEX_0F3849_X86_64_P_3_W_0): Likewise. + (MOD_VEX_0F384B_X86_64_P_1_W_0): Likewise. + (MOD_VEX_0F384B_X86_64_P_2_W_0): Likewise. + (MOD_VEX_0F384B_X86_64_P_3_W_0): Likewise. + (MOD_VEX_0F385C_X86_64_P_1_W_0): Likewise. + (MOD_VEX_0F385E_X86_64_P_0_W_0): Likewise. + (MOD_VEX_0F385E_X86_64_P_1_W_0): Likewise. + (MOD_VEX_0F385E_X86_64_P_2_W_0): Likewise. + (MOD_VEX_0F385E_X86_64_P_3_W_0): Likewise. + (RM_VEX_0F3849_X86_64_P_0_W_0_M_1_R_0): Likewise. + (PREFIX_VEX_0F3849_X86_64): Likewise. + (PREFIX_VEX_0F384B_X86_64): Likewise. + (PREFIX_VEX_0F385C_X86_64): Likewise. + (PREFIX_VEX_0F385E_X86_64): Likewise. + (X86_64_VEX_0F3849): Likewise. + (X86_64_VEX_0F384B): Likewise. + (X86_64_VEX_0F385C): Likewise. + (X86_64_VEX_0F385E): Likewise. + (VEX_LEN_0F3849_X86_64_P_0_W_0_M_0): Likewise. + (VEX_LEN_0F3849_X86_64_P_0_W_0_M_1_REG_0_RM_0): Likewise. + (VEX_LEN_0F3849_X86_64_P_2_W_0_M_0): Likewise. + (VEX_LEN_0F3849_X86_64_P_3_W_0_M_0): Likewise. + (VEX_LEN_0F384B_X86_64_P_1_W_0_M_0): Likewise. + (VEX_LEN_0F384B_X86_64_P_2_W_0_M_0): Likewise. + (VEX_LEN_0F384B_X86_64_P_3_W_0_M_0): Likewise. + (VEX_LEN_0F385C_X86_64_P_1_W_0_M_0): Likewise. + (VEX_LEN_0F385E_X86_64_P_0_W_0_M_0): Likewise. + (VEX_LEN_0F385E_X86_64_P_1_W_0_M_0): Likewise. + (VEX_LEN_0F385E_X86_64_P_2_W_0_M_0): Likewise. + (VEX_LEN_0F385E_X86_64_P_3_W_0_M_0): Likewise. + (VEX_W_0F3849_X86_64_P_0): Likewise. + (VEX_W_0F3849_X86_64_P_2): Likewise. + (VEX_W_0F3849_X86_64_P_3): Likewise. + (VEX_W_0F384B_X86_64_P_1): Likewise. + (VEX_W_0F384B_X86_64_P_2): Likewise. + (VEX_W_0F384B_X86_64_P_3): Likewise. + (VEX_W_0F385C_X86_64_P_1): Likewise. + (VEX_W_0F385E_X86_64_P_0): Likewise. + (VEX_W_0F385E_X86_64_P_1): Likewise. + (VEX_W_0F385E_X86_64_P_2): Likewise. + (VEX_W_0F385E_X86_64_P_3): Likewise. + (names_tmm): Likewise. + (att_names_tmm): Likewise. + (intel_operand_size): Handle void_mode. + (OP_XMM): Handle tmm_mode. + (OP_EX): Likewise. + (OP_VEX): Likewise. + * i386-gen.c (cpu_flag_init): Add entries for CpuAMX_INT8, + CpuAMX_BF16 and CpuAMX_TILE. + (operand_type_shorthands): Add RegTMM. + (operand_type_init): Likewise. + (operand_types): Add Tmmword. + (cpu_flag_init): Add CPU_AMX_INT8, CpuAMX_BF16 and CpuAMX_TILE. + (cpu_flags): Add CpuAMX_INT8, CpuAMX_BF16 and CpuAMX_TILE. + * i386-opc.h (CpuAMX_INT8): New. + (CpuAMX_BF16): Likewise. + (CpuAMX_TILE): Likewise. + (SIBMEM): Likewise. + (Tmmword): Likewise. + (i386_cpu_flags): Add cpuamx_int8, cpuamx_bf16 and cpuamx_tile. + (i386_opcode_modifier): Extend width of fields vexvvvv and sib. + (i386_operand_type): Add tmmword. + * i386-opc.tbl: Add AMX instructions. + * i386-reg.tbl: Add AMX registers. + * i386-init.h: Regenerated. + * i386-tbl.h: Likewise. -2019-11-14 Jan Beulich <jbeulich@suse.com> +2020-07-08 Jan Beulich <jbeulich@suse.com> - * i386-gen.c (opcode_modifiers): Remove JumpDword, JumpByte, - JumpInterSegment, and JumpAbsolute entries. - * i386-opc.h (JUMP, JUMP_DWORD, JUMP_BYTE, JUMP_INTERSEGMENT, - JUMP_ABSOLUTE): Define. - (struct i386_opcode_modifier): Extend jump field to 3 bits. - Remove jumpdword, jumpbyte, jumpintersegment, and jumpabsolute - fields. - * i386-opc.tbl (JumpByte, JumpDword, JumpAbsolute, - JumpInterSegment): Define. + * i386-dis.c (OP_LWPCB_E, OP_LWP_E): Delete. + (REG_XOP_LWPCB, REG_XOP_LWP, REG_XOP_TBM_01, REG_XOP_TBM_02): + Rename to ... + (REG_0FXOP_09_12_M_1_L_0, REG_0FXOP_0A_12_L_0, + REG_0FXOP_09_01_L_0, REG_0FXOP_09_02_L_0): ... these + respectively. + (MOD_VEX_0FXOP_09_12, 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_09_01, VEX_LEN_0FXOP_09_02, VEX_LEN_0FXOP_09_12_M_1, + 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_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_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): New enumerators. + (reg_table): Re-order XOP entries. Adjust their operands. + (xop_table): Replace 08_85, 08_86, 08_87, 08_8E, 08_8F, 08_95, + 08_96, 08_97, 08_9E, 08_9F, 08_A3, 08_A6, 08_B6, 08_C0, 08_C1, + 08_C2, 08_C3, 09_01, 09_02, 09_12, 09_90, 09_91, 09_92, 09_93, + 09_94, 09_95, 09_96, 09_97, 09_98, 09_99, 09_9A, 09_9B, 09_C1, + 09_C2, 09_C3, 09_C6, 09_C7, 09_CB, 09_D1, 09_D2, 09_D3, 09_D6, + 09_D7, 09_DB, 09_E1, 09_E2, 09_E3, and VEX_LEN_0FXOP_0A_12 + entries by references ... + (vex_len_table): ... to resepctive new entries here. For several + new and existing entries reference ... + (vex_w_table): ... new entries here. + (mod_table): New MOD_VEX_0FXOP_09_12 entry. + +2020-07-08 Jan Beulich <jbeulich@suse.com> + + * i386-dis.c (XMVexScalarI4): Define. + (VEX_LEN_0F3A6A_P_2, VEX_LEN_0F3A6B_P_2, VEX_LEN_0F3A6E_P_2, + VEX_LEN_0F3A6F_P_2, VEX_LEN_0F3A7A_P_2, VEX_LEN_0F3A7B_P_2, + VEX_LEN_0F3A7E_P_2, VEX_LEN_0F3A7F_P_2): Delete. + (vex_len_table): Move scalar FMA4 entries ... + (prefix_table): ... here. + (OP_REG_VexI4): Handle scalar_mode. + * i386-opc.tbl: Use VexLIG for scalar FMA4 insns. * i386-tbl.h: Re-generate. -2019-11-14 Jan Beulich <jbeulich@suse.com> +2020-07-08 Jan Beulich <jbeulich@suse.com> - * i386-gen.c (operand_type_init): Remove - OPERAND_TYPE_JUMPABSOLUTE entry. - (opcode_modifiers): Add JumpAbsolute entry. - (operand_types): Remove JumpAbsolute entry. - * i386-opc.h (JumpAbsolute): Move between enums. - (struct i386_opcode_modifier): Add jumpabsolute field. - (union i386_operand_type): Remove jumpabsolute field. - * i386-opc.tbl (call, lcall, jmp, ljmp): Move JumpAbsolute. - * i386-init.h, i386-tbl.h: Re-generate. + * i386-dis.c (OP_Vex_2src_1, OP_Vex_2src_2, Vex_2src_1, + Vex_2src_2): Delete. + (OP_VexW, VexW): New. + (xop_table): Use EXx for rotates by immediate. Use EXx and VexW + for shifts and rotates by register. + +2020-07-08 Jan Beulich <jbeulich@suse.com> + + * i386-dis.c (OP_EX_VexImmW, OP_XMM_VexW, EXVexImmW, XMVexW, + VEX_W_0F3A48_P_2, VEX_W_0F3A49_P_2, vex_w_done, get_vex_imm8, + OP_EX_VexReg): Delete. + (OP_VexI4, VexI4): New. + (vex_w_table): Move vpermil2ps and vpermil2pd entries ... + (prefix_table): ... here. + (print_insn): Drop setting of vex_w_done. -2019-11-14 Jan Beulich <jbeulich@suse.com> +2020-07-08 Jan Beulich <jbeulich@suse.com> - * i386-gen.c (opcode_modifiers): Add AnySize entry. - (operand_types): Remove AnySize entry. - * i386-opc.h (AnySize): Move between enums. - (struct i386_opcode_modifier): Add anysize field. - (OTUnused): Un-comment. - (union i386_operand_type): Remove anysize field. - * i386-opc.tbl (lea, invlpg, clflush, prefetchnta, prefetcht0, - prefetcht1, prefetcht2, prefetchtw, bndmk, bndcl, bndcu, bndcn, - bndstx, bndldx, prefetchwt1, clflushopt, clwb, cldemote): Move - AnySize. - * i386-tbl.h: Re-generate. + * i386-dis.c (OP_EX_VexW, EXVexW, EXdVexW, EXqVexW): Delete. + (prefix_table, vex_len_table): Replace operands for FMA4 insns. + (xop_table): Replace operands of 4-operand insns. + (OP_REG_VexI4): Move VEX.W based operand swaping here. -2019-11-12 Nelson Chu <nelson.chu@sifive.com> +2020-07-07 Claudiu Zissulescu <claziss@synopsys.com> - * riscv-opc.c (riscv_insn_types): Replace the INSN_CLASS_I with - INSN_CLASS_F and the INSN_CLASS_C with INSN_CLASS_F_AND_C if we - use the floating point register (FPR). + * arc-opc.c (insert_rbd): New function. + (RBD): Define. + (RBDdup): Likewise. + * arc-tbl.h (vadd2, vadd4h, vmac2h, vmpy2h, vsub4h): Update + instructions. -2019-11-12 Mihail Ionescu <mihail.ionescu@arm.com> +2020-07-07 Jan Beulich <jbeulich@suse.com> - * opcodes/arm-dis.c (mve_opcodes): Enable VMOV imm to vec with - cmode 1101. - (is_mve_encoding_conflict): Update cmode conflict checks for - MVE_VMVN_IMM. + * i386-dis.c (EVEX_W_0F3826_P_1, EVEX_W_0F3826_P_2, + EVEX_W_0F3828_P_1, EVEX_W_0F3829_P_1, EVEX_W_0F3854_P_2, + EVEX_W_0F3866_P_2, EVEX_W_0F3875_P_2, EVEX_W_0F387D_P_2, + EVEX_W_0F388D_P_2, EVEX_W_0F3A3E_P_2, EVEX_W_0F3A3F_P_2): + Delete. + (putop): Handle "BW". + * i386-dis-evex-w.h: Move entries for opcodes 0F3826, 0F3826, + 0F3828, 0F3829, 0F3854, 0F3866, 0F3875, 0F387D, 0F388D, 0F3A3E, + and 0F3A3F ... + * i386-dis-evex-prefix.h: ... here. + +2020-07-06 Jan Beulich <jbeulich@suse.com> + + * i386-dis.c (VEX_LEN_0FXOP_09_80, VEX_LEN_0FXOP_09_81): Delete. + (VEX_LEN_0FXOP_09_82_W_0, VEX_LEN_0FXOP_09_83_W_0, + VEX_W_0FXOP_09_80, VEX_W_0FXOP_09_81, VEX_W_0FXOP_09_82, + VEX_W_0FXOP_09_83): New enumerators. + (xop_table): Reference the above. + (vex_len_table): Replace vfrczp* entries by vfrczs* ones. + (vex_w_table): New VEX_W_0FXOP_09_80, VEX_W_0FXOP_09_81, + VEX_W_0FXOP_09_82, and VEX_W_0FXOP_09_83 entries. + (get_valid_dis386): Return bad_opcode for XOP.PP != 0. + +2020-07-06 Jan Beulich <jbeulich@suse.com> + + * i386-dis.c (EVEX_W_0F3838_P_1, + EVEX_W_0F3839_P_1, EVEX_W_0F3840_P_2, EVEX_W_0F3855_P_2, + EVEX_W_0F3868_P_3, EVEX_W_0F3871_P_2, EVEX_W_0F3873_P_2, + EVEX_W_0F3A50_P_2, EVEX_W_0F3A51_P_2, EVEX_W_0F3A56_P_2, + EVEX_W_0F3A57_P_2, EVEX_W_0F3A66_P_2, EVEX_W_0F3A67_P_2, + EVEX_W_0F3A71_P_2, EVEX_W_0F3A73_P_2): Delete. + (putop): Centralize management of last[]. Delete SAVE_LAST. + * i386-dis-evex-w.h: Move entries for opcodes 0F3838, 0F3839, + 0F3840, 0F3855, 0F3868, 0F3871, 0F3873, 0F3A50, 0F3A51, 0F3A56, + 0F3A57, 0F3A66, 0F3A67, 0F3A71, and 0F3A73 ... + * i386-dis-evex-prefix.h: here. + +2020-07-06 Jan Beulich <jbeulich@suse.com> + + * i386-dis.c (MOD_EVEX_0F381A_P_2_W_0, MOD_EVEX_0F381A_P_2_W_1, + MOD_EVEX_0F381B_P_2_W_0, MOD_EVEX_0F381B_P_2_W_1, + MOD_EVEX_0F385A_P_2_W_0, MOD_EVEX_0F385A_P_2_W_1, + MOD_EVEX_0F385B_P_2_W_0, MOD_EVEX_0F385B_P_2_W_1): New + enumerators. + (EVEX_LEN_0F381A_P_2_W_0, EVEX_LEN_0F381A_P_2_W_1, + EVEX_LEN_0F381B_P_2_W_0, EVEX_LEN_0F381B_P_2_W_1, + EVEX_LEN_0F385A_P_2_W_0, EVEX_LEN_0F385A_P_2_W_1, + EVEX_LEN_0F385B_P_2_W_0, EVEX_LEN_0F385B_P_2_W_1): Rename to ... + (EVEX_LEN_0F381A_P_2_W_0_M_0, EVEX_LEN_0F381A_P_2_W_1_M_0, + EVEX_LEN_0F381B_P_2_W_0_M_0, EVEX_LEN_0F381B_P_2_W_1_M_0, + EVEX_LEN_0F385A_P_2_W_0_M_0, EVEX_LEN_0F385A_P_2_W_1_M_0, + EVEX_LEN_0F385B_P_2_W_0_M_0, EVEX_LEN_0F385B_P_2_W_1_M_0): ... + these, respectively. + * i386-dis-evex-len.h: Adjust comments. + * i386-dis-evex-mod.h: New MOD_EVEX_0F381A_P_2_W_0, + MOD_EVEX_0F381A_P_2_W_1, MOD_EVEX_0F381B_P_2_W_0, + MOD_EVEX_0F381B_P_2_W_1, MOD_EVEX_0F385A_P_2_W_0, + MOD_EVEX_0F385A_P_2_W_1, MOD_EVEX_0F385B_P_2_W_0, and + MOD_EVEX_0F385B_P_2_W_1 table entries. + * i386-dis-evex-w.h: Reference mod_table[] for + EVEX_W_0F381A_P_2, EVEX_W_0F381B_P_2, EVEX_W_0F385A_P_2, and + EVEX_W_0F385B_P_2. + +2020-07-06 Jan Beulich <jbeulich@suse.com> + + * i386-dis-evex-len.h (vbroadcastf32x8, vbroadcasti32x8, + vinsertf32x8, vinsertf64x4, vextractf32x8, vextractf64x4): Use + EXymm. + (vinserti32x8, vinserti64x4, vextracti32x8, vextracti64x4): + Likewise. Mark 256-bit entries invalid. + +2020-07-06 Jan Beulich <jbeulich@suse.com> + + * i386-dis.c (PREFIX_EVEX_0F62, PREFIX_EVEX_0F6A, + PREFIX_EVEX_0F6B, PREFIX_EVEX_0F6C, PREFIX_EVEX_0F6D, + PREFIX_EVEX_0FD2, PREFIX_EVEX_0FD3, PREFIX_EVEX_0FD4, + PREFIX_EVEX_0FF2, PREFIX_EVEX_0FF3, PREFIX_EVEX_0FF4, + PREFIX_EVEX_0FFA, PREFIX_EVEX_0FFB, PREFIX_EVEX_0FFE, + PREFIX_EVEX_0F382B): Delete. + (EVEX_W_0F62_P_2, EVEX_W_0F6A_P_2, EVEX_W_0F6B_P_2, + EVEX_W_0F6C_P_2, EVEX_W_0F6D_P_2, EVEX_W_0FD2_P_2, + EVEX_W_0FD3_P_2, EVEX_W_0FD4_P_2, EVEX_W_0FF2_P_2, + EVEX_W_0FF3_P_2, EVEX_W_0FF4_P_2, EVEX_W_0FFA_P_2, + EVEX_W_0FFB_P_2, EVEX_W_0FFE_P_2, EVEX_W_0F382B_P_2): Rename + to ... + (EVEX_W_0F62, EVEX_W_0F6A, EVEX_W_0F6B, EVEX_W_0F6C, + EVEX_W_0F6D, EVEX_W_0FD2, EVEX_W_0FD3, EVEX_W_0FD4, + EVEX_W_0FF2, EVEX_W_0FF3, EVEX_W_0FF4, EVEX_W_0FFA, + EVEX_W_0FFB, EVEX_W_0FFE, EVEX_W_0F382B): ... these + respectively. + * i386-dis-evex.h (evex_table): Reference VEX_W table entries + for opcodes 0F62, 0F6A, 0F6B, 0F6C, 0F6D, 0FD2, 0FD3, 0FD4, + 0FF2, 0FF3, 0FF4, 0FFA, 0FFB, 0FFE, 0F382B. + * i386-dis-evex-prefix.h (PREFIX_EVEX_0F62, PREFIX_EVEX_0F6A, + PREFIX_EVEX_0F6B, PREFIX_EVEX_0F6C, PREFIX_EVEX_0F6D, + PREFIX_EVEX_0FD2, PREFIX_EVEX_0FD3, PREFIX_EVEX_0FD4, + PREFIX_EVEX_0FF2, PREFIX_EVEX_0FF3, PREFIX_EVEX_0FF4, + PREFIX_EVEX_0FFA, PREFIX_EVEX_0FFB, PREFIX_EVEX_0FFE, + PREFIX_EVEX_0F382B): Remove table entries. + * i386-dis-evex-w.h: Reference VEX table entries for opcodes + 0F62, 0F6A, 0F6B, 0F6C, 0F6D, 0FD2, 0FD3, 0FD4, 0FF2, 0FF3, + 0FF4, 0FFA, 0FFB, 0FFE, 0F382B. + +2020-07-06 Jan Beulich <jbeulich@suse.com> + + * i386-dis.c (EVEX_LEN_0F3816_P_2, EVEX_LEN_0F3836_P_2, + EVEX_LEN_0F3A00_P_2_W_1, EVEX_LEN_0F3A01_P_2_W_1): New + enumerators. + * i386-dis-evex-len.h (evex_len_table): New EVEX_LEN_0F3816_P_2, + EVEX_LEN_0F3836_P_2, EVEX_LEN_0F3A00_P_2_W_1, and + EVEX_LEN_0F3A01_P_2_W_1 table entries. + * i386-dis-evex-prefix.h, i386-dis-evex-w.h: Reference the above + entries. + +2020-07-06 Jan Beulich <jbeulich@suse.com> + + * i386-dis.c (EVEX_LEN_0FC4_P_2, EVEX_LEN_0FC5_P_2, + EVEX_LEN_0F3A14_P_2, EVEX_LEN_0F3A15_P_2, EVEX_LEN_0F3A16_P_2, + EVEX_LEN_0F3A17_P_2, EVEX_LEN_0F3A20_P_2, + EVEX_LEN_0F3A21_P_2_W_0, EVEX_LEN_0F3A22_P_2): New enumerators. + * i386-dis-evex-len.h (evex_len_table): New EVEX_LEN_0FC4_P_2, + EVEX_LEN_0FC5_P_2, EVEX_LEN_0F3A14_P_2, EVEX_LEN_0F3A15_P_2, + EVEX_LEN_0F3A16_P_2, EVEX_LEN_0F3A17_P_2, EVEX_LEN_0F3A20_P_2, + EVEX_LEN_0F3A21_P_2_W_0, and EVEX_LEN_0F3A22_P_2 table entries. + * i386-dis-evex-prefix.h, i386-dis-evex-w.h: Reference the above + entries. -2019-11-12 Jan Beulich <jbeulich@suse.com> +2020-07-06 Jan Beulich <jbeulich@suse.com> - * i386-gen.c (operand_type_init): Remove OPERAND_TYPE_ESSEG + * i386-dis.c (PREFIX_EVEX_0F3A1D, EVEX_W_0F3A1D_P_2): Delete. + (VEX_W_0F3813_P_2, VEX_W_0F3A1D_P_2): New enumerators. + (prefix_table): Reference VEX_W_0F3813_P_2 and VEX_W_0F3A1D_P_2 + respectively. + (vex_w_table): New VEX_W_0F3813_P_2 and VEX_W_0F3A1D_P_2 table + entries. + * i386-dis-evex.h (evex_table): Reference VEX table entry for + opcode 0F3A1D. + * i386-dis-evex-prefix.h (PREFIX_EVEX_0F3A1D): Delete table entry. - (operand_types): Remove EsSeg entry. - (main): Replace stale use of OTMax. - * i386-opc.h (IS_STRING_ES_OP0, IS_STRING_ES_OP1): Define. - (struct i386_opcode_modifier): Expand isstring field to 2 bits. - (EsSeg): Delete. - (OTUnused): Comment out. - (union i386_operand_type): Remove esseg field. - * i386-opc.tbl (IsStringEsOp0, IsStringEsOp1): Define. - (cmps, scmp, scas, ssca, cmpsd): Add IsStringEsOp0. - (ins, movs, smov, movsd): Add IsStringEsOpOp1. - (stos, ssto): Add IsStringEsOp0/IsStringEsOpOp1. - * i386-init.h, i386-tbl.h: Re-generate. + * i386-dis-evex-w.h (EVEX_W_0F3A1D_P_2): Likewise. -2019-11-12 Jan Beulich <jbeulich@suse.com> +2020-07-06 Jan Beulich <jbeulich@suse.com> - * i386-gen.c (operand_instances): Add RegB entry. - * i386-opc.h (enum operand_instance): Add RegB. - * i386-opc.tbl (RegC, RegD, RegB): Define. - (Acc, ShiftCount, InOutPortReg): Adjust definitions. - (monitor, mwait, invlpga, skinit, vmload, vmrun, vmsave, clzero, - monitorx, mwaitx): Drop ImmExt and convert encodings - accordingly. - * i386-reg.tbl (ecx, rcx): Add Instance=RegC. - (edx, rdx): Add Instance=RegD. - (ebx, rbx): Add Instance=RegB. - * i386-tbl.h: Re-generate. - -2019-11-12 Jan Beulich <jbeulich@suse.com> - - * i386-gen.c (operand_type_init): Adjust - OPERAND_TYPE_INOUTPORTREG, OPERAND_TYPE_SHIFTCOUNT, - OPERAND_TYPE_FLOATACC, OPERAND_TYPE_ACC8, OPERAND_TYPE_ACC16, - OPERAND_TYPE_ACC32, and OPERAND_TYPE_ACC64 entries. - (operand_instances): New. - (operand_types): Drop InOutPortReg, ShiftCount, and Acc entries. - (output_operand_type): New parameter "instance". Process it. - (process_i386_operand_type): New local variable "instance". - (main): Adjust static assertions. - * i386-opc.h (INSTANCE_WIDTH): Define. - (enum operand_instance): New. - (Acc, InOutPortReg, ShiftCount): Replace by ClassInstance. - (union i386_operand_type): Replace acc, inoutportreg, and - shiftcount by instance. - * i386-opc.tbl (Acc, InOutPortReg, ShiftCount): Define. - * i386-reg.tbl (st, al, cl, ax, dx, eax, rax, xmm0, st(0)): - Add Instance=. - * i386-init.h, i386-tbl.h: Re-generate. + * i386-dis.c (PREFIX_EVEX_0F60, PREFIX_EVEX_0F61, + PREFIX_EVEX_0F63, PREFIX_EVEX_0F67, PREFIX_EVEX_0F68, + PREFIX_EVEX_0F69, PREFIX_EVEX_0FD1, PREFIX_EVEX_0FD5, + PREFIX_EVEX_0FD8, PREFIX_EVEX_0FD9, PREFIX_EVEX_0FDA, + PREFIX_EVEX_0FDC, PREFIX_EVEX_0FDD, PREFIX_EVEX_0FDE, + PREFIX_EVEX_0FE0, PREFIX_EVEX_0FE1, PREFIX_EVEX_0FE3, + PREFIX_EVEX_0FE4, PREFIX_EVEX_0FE5, PREFIX_EVEX_0FE8, + PREFIX_EVEX_0FE9, PREFIX_EVEX_0FEA, PREFIX_EVEX_0FEC, + PREFIX_EVEX_0FED, PREFIX_EVEX_0FEE, PREFIX_EVEX_0FF1, + PREFIX_EVEX_0FF5, PREFIX_EVEX_0FF6, PREFIX_EVEX_0FF8, + PREFIX_EVEX_0FF9, PREFIX_EVEX_0FFC, PREFIX_EVEX_0FFD, + PREFIX_EVEX_0F3800, PREFIX_EVEX_0F3804, PREFIX_EVEX_0F380B, + PREFIX_EVEX_0F380C, PREFIX_EVEX_0F3818, PREFIX_EVEX_0F381C, + PREFIX_EVEX_0F381D, PREFIX_EVEX_0F383C, PREFIX_EVEX_0F383E, + PREFIX_EVEX_0F3858, PREFIX_EVEX_0F3878, PREFIX_EVEX_0F3879, + PREFIX_EVEX_0F3896, PREFIX_EVEX_0F3897, PREFIX_EVEX_0F3898, + PREFIX_EVEX_0F3899, PREFIX_EVEX_0F389C, PREFIX_EVEX_0F389D, + PREFIX_EVEX_0F389E, PREFIX_EVEX_0F389F, PREFIX_EVEX_0F38A6, + PREFIX_EVEX_0F38A7, PREFIX_EVEX_0F38A8, PREFIX_EVEX_0F38A9, + PREFIX_EVEX_0F38AC, PREFIX_EVEX_0F38AD, PREFIX_EVEX_0F38AE, + PREFIX_EVEX_0F38AF, PREFIX_EVEX_0F38B6, PREFIX_EVEX_0F38B7, + PREFIX_EVEX_0F38B8, PREFIX_EVEX_0F38B9, PREFIX_EVEX_0F38BA, + PREFIX_EVEX_0F38BB, PREFIX_EVEX_0F38BC, PREFIX_EVEX_0F38BD, + PREFIX_EVEX_0F38BE, PREFIX_EVEX_0F38BF, PREFIX_EVEX_0F38CF, + PREFIX_EVEX_0F38DC, PREFIX_EVEX_0F38DD, PREFIX_EVEX_0F38DE, + PREFIX_EVEX_0F38DF, PREFIX_EVEX_0F3A04, PREFIX_EVEX_0F3A0F, + PREFIX_EVEX_0F3A44, PREFIX_EVEX_0F3ACE, PREFIX_EVEX_0F3ACF, + EVEX_W_0F380C_P_2, EVEX_W_0F3818_P_2, EVEX_W_0F3858_P_2, + EVEX_W_0F3878_P_2, EVEX_W_0F3879_P_2, EVEX_W_0F3A04_P_2, + EVEX_W_0F3ACE_P_2, EVEX_W_0F3ACF_P_2): Delete. + (prefix_table): Add EXxEVexR to FMA table entries. + (OP_Rounding): Move abort() invocation. + * i386-dis-evex.h (evex_table): Reference VEX table for opcodes + 0F60, 0F61, 0F63, 0F67, 0F68, 0F69, 0FD1, 0FD5, 0FD8, 0FD9, + 0FDA, 0FDC, 0FDD, 0FDE, 0FE0, 0FE1, 0FE3, 0FE4, 0FE5, 0FE8, + 0FE9, 0FEA, 0FEC, 0FED, 0FEE, 0FF1, 0FF5, 0FF6, 0FF8, 0FF9, + 0FFC, 0FFD, 0F3800, 0F3804, 0F380B, 0F380C, 0F3818, 0F381C, + 0F381D, 0F383C, 0F383E, 0F3858, 0F3878, 0F3879, 0F3896, 0F3897, + 0F3898, 0F3899, 0F389C, 0F389D, 0F389E, 0F389F, 0F38A6, 0F38A7, + 0F38A8, 0F38A9, 0F38AC, 0F38AD, 0F38AE, 0F38AF, 0F38B6, 0F38B7, + 0F38B8, 0F38B9, 0F38BA, 0F38BB, 0F38BC, 0F38BD, 0F38BE, 0F38BF, + 0F38CF, 0F38DC, 0F38DD, 0F38DE, 0F38DF, 0F3A04, 0F3A0F, 0F3A44, + 0F3ACE, 0F3ACF. + * i386-dis-evex-prefix.h (PREFIX_EVEX_0F60, PREFIX_EVEX_0F61, + PREFIX_EVEX_0F63, PREFIX_EVEX_0F67, PREFIX_EVEX_0F68, + PREFIX_EVEX_0F69, PREFIX_EVEX_0FD1, PREFIX_EVEX_0FD5, + PREFIX_EVEX_0FD8, PREFIX_EVEX_0FD9, PREFIX_EVEX_0FDA, + PREFIX_EVEX_0FDC, PREFIX_EVEX_0FDD, PREFIX_EVEX_0FDE, + PREFIX_EVEX_0FE0, PREFIX_EVEX_0FE1, PREFIX_EVEX_0FE3, + PREFIX_EVEX_0FE4, PREFIX_EVEX_0FE5, PREFIX_EVEX_0FE8, + PREFIX_EVEX_0FE9, PREFIX_EVEX_0FEA, PREFIX_EVEX_0FEC, + PREFIX_EVEX_0FED, PREFIX_EVEX_0FEE, PREFIX_EVEX_0FF1, + PREFIX_EVEX_0FF5, PREFIX_EVEX_0FF6, PREFIX_EVEX_0FF8, + PREFIX_EVEX_0FF9, PREFIX_EVEX_0FFC, PREFIX_EVEX_0FFD, + PREFIX_EVEX_0F3800, PREFIX_EVEX_0F3804, PREFIX_EVEX_0F380B, + PREFIX_EVEX_0F380C, PREFIX_EVEX_0F3818, PREFIX_EVEX_0F381C, + PREFIX_EVEX_0F381D, PREFIX_EVEX_0F383C, PREFIX_EVEX_0F383E, + PREFIX_EVEX_0F3858, PREFIX_EVEX_0F3878, PREFIX_EVEX_0F3879, + PREFIX_EVEX_0F3896, PREFIX_EVEX_0F3897, PREFIX_EVEX_0F3898, + PREFIX_EVEX_0F3899, PREFIX_EVEX_0F389C, PREFIX_EVEX_0F389D, + PREFIX_EVEX_0F389E, PREFIX_EVEX_0F389F, PREFIX_EVEX_0F38A6, + PREFIX_EVEX_0F38A7, PREFIX_EVEX_0F38A8, PREFIX_EVEX_0F38A9, + PREFIX_EVEX_0F38AC, PREFIX_EVEX_0F38AD, PREFIX_EVEX_0F38AE, + PREFIX_EVEX_0F38AF, PREFIX_EVEX_0F38B6, PREFIX_EVEX_0F38B7, + PREFIX_EVEX_0F38B8, PREFIX_EVEX_0F38B9, PREFIX_EVEX_0F38BA, + PREFIX_EVEX_0F38BB, PREFIX_EVEX_0F38BC, PREFIX_EVEX_0F38BD, + PREFIX_EVEX_0F38BE, PREFIX_EVEX_0F38BF, PREFIX_EVEX_0F38CF, + PREFIX_EVEX_0F38DC, PREFIX_EVEX_0F38DD, PREFIX_EVEX_0F38DE, + PREFIX_EVEX_0F38DF, PREFIX_EVEX_0F3A04, PREFIX_EVEX_0F3A0F, + PREFIX_EVEX_0F3A44, PREFIX_EVEX_0F3ACE, PREFIX_EVEX_0F3ACF): + Delete table entries. + * i386-dis-evex-w.h (EVEX_W_0F380C_P_2, EVEX_W_0F3818_P_2, + EVEX_W_0F3858_P_2, EVEX_W_0F3878_P_2, EVEX_W_0F3879_P_2, + EVEX_W_0F3A04_P_2, EVEX_W_0F3ACE_P_2, EVEX_W_0F3ACF_P_2): + Likewise. -2019-11-11 Jan Beulich <jbeulich@suse.com> +2020-07-06 Jan Beulich <jbeulich@suse.com> - * aarch64-tbl.h (aarch64_opcode_table): Switch SVE2's - smaxp/sminp entries' "tied_operand" field to 2. + * i386-dis.c (EXqScalarS): Delete. + (vex_len_table): Replace EXqScalarS by EXqVexScalarS. + * i386-dis-evex-w.h (vmovq): Use EXqVexScalarS. + +2020-07-06 Jan Beulich <jbeulich@suse.com> + + * i386-dis.c (safe-ctype.h): Include. + (EXdScalar, EXqScalar): Delete. + (d_scalar_mode, q_scalar_mode): Delete. + (prefix_table, vex_len_table): Use EXxmm_md in place of + EXdScalar and EXxmm_mq in place of EXqScalar. + (intel_operand_size, OP_E_memory, OP_EX): Remove uses of + d_scalar_mode and q_scalar_mode. + * i386-dis-evex-w.h (vmovss): Use EXxmm_md. + (vmovsd): Use EXxmm_mq. -2019-11-11 Jan Beulich <jbeulich@suse.com> +2020-07-06 Yuri Chornoivan <yurchor@ukr.net> - * aarch64-opc.c (operand_general_constraint_met_p): Replace - "index" local variable by that of the already existing "num". + PR 26204 + * arc-dis.c: Fix spelling mistake. + * po/opcodes.pot: Regenerate. -2019-11-08 H.J. Lu <hongjiu.lu@intel.com> +2020-07-06 Nick Clifton <nickc@redhat.com> - PR gas/25167 - * i386-opc.tbl: Remove IgnoreSize from cmpsd and movsd. + * po/pt_BR.po: Updated Brazilian Portugugese translation. + * po/uk.po: Updated Ukranian translation. + +2020-07-04 Nick Clifton <nickc@redhat.com> + + * configure: Regenerate. + * po/opcodes.pot: Regenerate. + +2020-07-04 Nick Clifton <nickc@redhat.com> + + Binutils 2.35 branch created. + +2020-07-02 H.J. Lu <hongjiu.lu@intel.com> + + * i386-gen.c (opcode_modifiers): Add VexSwapSources. + * i386-opc.h (VexSwapSources): New. + (i386_opcode_modifier): Add vexswapsources. + * i386-opc.tbl: Add VexSwapSources to BMI2 and BMI instructions + with two source operands swapped. * i386-tbl.h: Regenerated. -2019-11-08 Jan Beulich <jbeulich@suse.com> +2020-06-30 Nelson Chu <nelson.chu@sifive.com> - * i386-gen.c (operand_type_init): Add Class= to - OPERAND_TYPE_REGMASK and OPERAND_TYPE_REGBND entries. Move up - OPERAND_TYPE_REGBND entry. - (operand_classes): Add RegMask and RegBND entries. - (operand_types): Drop RegMask and RegBND entry. - * i386-opc.h (enum operand_class): Add RegMask and RegBND. - (RegMask, RegBND): Delete. - (union i386_operand_type): Remove regmask and regbnd fields. - * i386-opc.tbl (RegMask, RegBND): Define. - * i386-reg.tbl: Replace RegMask by Class=RegMask and RegBND by - Class=RegBND. - * i386-init.h, i386-tbl.h: Re-generate. + * riscv-dis.c (print_insn_args, case 'E'): Updated. Let the + unprivileged CSR can also be initialized. -2019-11-08 Jan Beulich <jbeulich@suse.com> +2020-06-29 Alan Modra <amodra@gmail.com> - * i386-gen.c (operand_type_init): Add Class= to - OPERAND_TYPE_REGMMX, OPERAND_TYPE_REGXMM, OPERAND_TYPE_REGYMM, and - OPERAND_TYPE_REGZMM entries. - (operand_classes): Add RegMMX and RegSIMD entries. - (operand_types): Drop RegMMX and RegSIMD entries. - * i386-opc.h (enum operand_class): Add RegMMX and RegSIMD. - (RegMMX, RegSIMD): Delete. - (union i386_operand_type): Remove regmmx and regsimd fields. - * i386-opc.tbl (RegMMX): Define. - (RegXMM, RegYMM, RegZMM): Add Class=. - * i386-reg.tbl: Replace RegMMX by Class=RegMMX and RegSIMD by - Class=RegSIMD. - * i386-init.h, i386-tbl.h: Re-generate. + * arm-dis.c: Use C style comments. + * cr16-opc.c: Likewise. + * ft32-dis.c: Likewise. + * moxie-opc.c: Likewise. + * tic54x-dis.c: Likewise. + * s12z-opc.c: Remove useless comment. + * xgate-dis.c: Likewise. -2019-11-08 Jan Beulich <jbeulich@suse.com> +2020-06-26 H.J. Lu <hongjiu.lu@intel.com> - * i386-gen.c (operand_type_init): Add Class= to - OPERAND_TYPE_CONTROL, OPERAND_TYPE_TEST, and OPERAND_TYPE_DEBUG - entries. - (operand_classes): Add RegCR, RegDR, and RegTR entries. - (operand_types): Drop Control, Debug, and Test entries. - * i386-opc.h (enum operand_class): Add RegCR, RegDR, and RegTR. - (Control, Debug, Test): Delete. - (union i386_operand_type): Remove control, debug, and test - fields. - * i386-opc.tbl (Control, Debug, Test): Define. - * i386-reg.tbl: Replace Control by Class=RegCR, Debug by - Class=RegDR, and Test by Class=RegTR. - * i386-init.h, i386-tbl.h: Re-generate. + * i386-opc.tbl: Add a blank line. -2019-11-08 Jan Beulich <jbeulich@suse.com> +2020-06-26 H.J. Lu <hongjiu.lu@intel.com> - * i386-gen.c (operand_type_init): Add Class= to - OPERAND_TYPE_SREG entry. - (operand_classes): Add SReg entry. - (operand_types): Drop SReg entry. - * i386-opc.h (enum operand_class): Add SReg. - (SReg): Delete. - (union i386_operand_type): Remove sreg field. - * i386-opc.tbl (SReg): Define. - * i386-reg.tbl: Replace SReg by Class=SReg. - * i386-init.h, i386-tbl.h: Re-generate. + * i386-gen.c (opcode_modifiers): Replace VecSIB with SIB. + (VecSIB128): Renamed to ... + (VECSIB128): This. + (VecSIB256): Renamed to ... + (VECSIB256): This. + (VecSIB512): Renamed to ... + (VECSIB512): This. + (VecSIB): Renamed to ... + (SIB): This. + (i386_opcode_modifier): Replace vecsib with sib. + * i386-opc.tbl (VecSIB128): New. + (VecSIB256): Likewise. + (VecSIB512): Likewise. + Replace VecSIB=1, VecSIB=2 and VecSIB=3 with VecSIB128, VecSIB256 + and VecSIB512, respectively. -2019-11-08 Jan Beulich <jbeulich@suse.com> +2020-06-26 Jan Beulich <jbeulich@suse.com> - * i386-gen.c (operand_type_init): Add Class=. New - OPERAND_TYPE_ANYIMM entry. - (operand_classes): New. - (operand_types): Drop Reg entry. - (output_operand_type): New parameter "class". Process it. - (process_i386_operand_type): New local variable "class". - (main): Adjust static assertions. - * i386-opc.h (CLASS_WIDTH): Define. - (enum operand_class): New. - (Reg): Replace by Class. Adjust comment. - (union i386_operand_type): Replace reg by class. - * i386-opc.tbl (Reg8, Reg16, Reg32, Reg64, FloatReg): Add - Class=. - * i386-reg.tbl: Replace Reg by Class=Reg. - * i386-init.h: Re-generate. + * i386-dis.c: Adjust description of I macro. + (x86_64_table): Drop use of I. + (float_mem): Replace use of I. + (putop): Remove handling of I. Adjust setting/clearing of "alt". -2019-11-07 Mihail Ionescu <mihail.ionescu@arm.com> +2020-06-26 Jan Beulich <jbeulich@suse.com> - * opcodes/aarch64-tbl.h (V8_6_INSN): New macro for v8.6 instructions. - (aarch64_opcode_table): Add data gathering hint mnemonic. - * opcodes/aarch64-dis-2.c: Account for new instruction. + * i386-dis.c: (print_insn): Avoid straight assignment to + priv.orig_sizeflag when processing -M sub-options. -2019-11-07 Mihail Ionescu <mihail.ionescu@arm.com> +2020-06-25 Jan Beulich <jbeulich@suse.com> - * arm-dis.c (neon_opcodes): Add i8mm SIMD instructions. + * i386-dis.c: Adjust description of J macro. + (dis386, x86_64_table, mod_table): Replace J. + (putop): Remove handling of J. +2020-06-25 Jan Beulich <jbeulich@suse.com> -2019-11-07 Mihail Ionescu <mihail.ionescu@arm.com> + * i386-dis.c: (float_mem): Reduce alternatives for fstpt and fldpt. - * aarch64-tbl.h (aarch64_feature_i8mm_sve, aarch64_feature_f32mm_sve, - aarch64_feature_f64mm_sve, aarch64_feature_i8mm, aarch64_feature_f32mm, - aarch64_feature_f64mm): New feature sets. - (INT8MATMUL_INSN, F64MATMUL_SVE_INSN, F64MATMUL_INSN, - F32MATMUL_SVE_INSN, F32MATMUL_INSN): New macros to define matrix multiply - instructions. - (I8MM_SVE, F32MM_SVE, F64MM_SVE, I8MM, F32MM, F64MM): New feature set - macros. - (QL_MMLA64, OP_SVE_SBB): New qualifiers. - (OP_SVE_QQQ): New qualifier. - (INT8MATMUL_SVE_INSNC, F64MATMUL_SVE_INSNC, - F32MATMUL_SVE_INSNC): New feature set for bfloat16 instructions to support - the movprfx constraint. - (aarch64_opcode_table): Support for SVE_ADDR_RI_S4x32. - (aarch64_opcode_table): Define new instructions smmla, - ummla, usmmla, usdot, sudot, fmmla, ld1rob, ld1roh, ld1row, ld1rod, - uzip{1/2}, trn{1/2}. - * aarch64-opc.c (operand_general_constraint_met_p): Handle - AARCH64_OPND_SVE_ADDR_RI_S4x32. - (aarch64_print_operand): Handle AARCH64_OPND_SVE_ADDR_RI_S4x32. - * aarch64-dis-2.c (aarch64_opcode_lookup_1, aarch64_find_next_opcode): - Account for new instructions. - * opcodes/aarch64-asm-2.c (aarch64_insert_operand): Support the new - S4x32 operand. - * aarch64-opc-2.c (aarch64_operands): Support the new S4x32 operand. - -2019-11-07 Mihail Ionescu <mihail.ionescu@arm.com> -2019-11-07 Matthew Malcomson <matthew.malcomson@arm.com> - - * arm-dis.c (select_arm_features): Update bfd_march_arm_8 with - Armv8.6-A. - (coprocessor_opcodes): Add bfloat16 vcvt{t,b}. - (neon_opcodes): Add bfloat SIMD instructions. - (print_insn_coprocessor): Add new control character %b to print - condition code without checking cp_num. - (print_insn_neon): Account for BFloat16 instructions that have no - special top-byte handling. - -2019-11-07 Mihail Ionescu <mihail.ionescu@arm.com> -2019-11-07 Matthew Malcomson <matthew.malcomson@arm.com> - - * arm-dis.c (print_insn_coprocessor, - print_insn_generic_coprocessor): Create wrapper functions around - the implementation of the print_insn_coprocessor control codes. - (print_insn_coprocessor_1): Original print_insn_coprocessor - function that now takes which array to look at as an argument. - (print_insn_arm): Use both print_insn_coprocessor and - print_insn_generic_coprocessor. - (print_insn_thumb32): As above. - -2019-11-07 Mihail Ionescu <mihail.ionescu@arm.com> -2019-11-07 Matthew Malcomson <matthew.malcomson@arm.com> - - * aarch64-asm.c (aarch64_ins_reglane): Use AARCH64_OPND_QLF_S_2H - in reglane special case. - * aarch64-dis-2.c (aarch64_opcode_lookup_1, - aarch64_find_next_opcode): Account for new instructions. - * aarch64-dis.c (aarch64_ext_reglane): Use AARCH64_OPND_QLF_S_2H - in reglane special case. - * aarch64-opc.c (struct operand_qualifier_data): Add data for - new AARCH64_OPND_QLF_S_2H qualifier. - * aarch64-tbl.h (QL_BFDOT QL_BFDOT64, QL_BFDOT64I, QL_BFMMLA2, - QL_BFCVT64, QL_BFCVTN64, QL_BFCVTN2_64): New qualifiers. - (aarch64_feature_bfloat16, aarch64_feature_bfloat16_sve): New feature - sets. - (BFLOAT_SVE, BFLOAT): New feature set macros. - (BFLOAT_SVE_INSN, BFLOAT_INSN): New macros to define BFloat16 - instructions. - (aarch64_opcode_table): Define new instructions bfdot, - bfmmla, bfcvt, bfcvtnt, bfdot, bfdot, bfcvtn, bfmlal[b/t] - bfcvtn2, bfcvt. - -2019-11-07 Mihail Ionescu <mihail.ionescu@arm.com> -2019-11-07 Matthew Malcomson <matthew.malcomson@arm.com> - - * aarch64-tbl.h (ARMV8_6): New macro. - -2019-11-07 Jan Beulich <jbeulich@suse.com> - - * i386-dis.c (prefix_table): Add mcommit. - (rm_table): Add rdpru. - * i386-gen.c (cpu_flag_init): Adjust CPU_ZNVER2_FLAGS entry. Add - CPU_RDPRU_FLAGS and CPU_MCOMMIT_FLAGS entries. - (cpu_flags): Add CpuRDPRU and CpuMCOMMIT entries. - * i386-opc.h (CpuRDPRU, CpuMCOMMIT): New. - (union i386_cpu_flags): Add cpurdpru and cpumcommit fields. - * i386-opc.tbl (mcommit, rdpru): New. - * i386-init.h, i386-tbl.h: Re-generate. +2020-06-25 Jan Beulich <jbeulich@suse.com> -2019-11-07 Jan Beulich <jbeulich@suse.com> + * i386-dis.c: Adjust description of "LQ" macro. + (dis386_twobyte): Use LQ for sysret. + (putop): Adjust handling of LQ. - * i386-dis.c (OP_Mwait): Drop local variable "names", use - "names32" instead. - (OP_Monitor): Drop local variable "op1_names", re-purpose - "names" for it instead, and replace former "names" uses by - "names32" ones. - -2019-11-07 Jan Beulich <jbeulich@suse.com> - - PR/gas 25167 - * opcodes/i386-opc.tbl (movsd, cmpsd): Drop IgnoreSize from - operand-less forms. - * opcodes/i386-tbl.h: Re-generate. - -2019-11-05 Jan Beulich <jbeulich@suse.com> - - * i386-dis.c (OP_Mwaitx): Delete. - (prefix_table): Use OP_Mwait for mwaitx entry. - (OP_Mwait): Also handle mwaitx. - -2019-11-05 Jan Beulich <jbeulich@suse.com> - - * i386-dis.c (PREFIX_0F01_REG_7_MOD_3_RM_2, - PREFIX_0F01_REG_7_MOD_3_RM_3): New. - (prefix_table): Add respective entries. - (rm_table): Link to those entries. - -2019-11-05 Jan Beulich <jbeulich@suse.com> - - * i386-dis.c (REG_0F1C_MOD_0): Rename to ... - (REG_0F1C_P_0_MOD_0): ... this. - (REG_0F1E_MOD_3): Rename to ... - (REG_0F1E_P_1_MOD_3): ... this. - (RM_0F01_REG_5): Rename to ... - (RM_0F01_REG_5_MOD_3): ... this. - (RM_0F01_REG_7): Rename to ... - (RM_0F01_REG_7_MOD_3): ... this. - (RM_0F1E_MOD_3_REG_7): Rename to ... - (RM_0F1E_P_1_MOD_3_REG_7): ... this. - (RM_0FAE_REG_6): Rename to ... - (RM_0FAE_REG_6_MOD_3_P_0): ... this. - (RM_0FAE_REG_7): Rename to ... - (RM_0FAE_REG_7_MOD_3): ... this. - (PREFIX_MOD_0_0F01_REG_5): Rename to ... - (PREFIX_0F01_REG_5_MOD_0): ... this. - (PREFIX_MOD_3_0F01_REG_5_RM_0): Rename to ... - (PREFIX_0F01_REG_5_MOD_3_RM_0): ... this. - (PREFIX_MOD_3_0F01_REG_5_RM_2): Rename to ... - (PREFIX_0F01_REG_5_MOD_3_RM_2): ... this. - (PREFIX_0FAE_REG_0): Rename to ... - (PREFIX_0FAE_REG_0_MOD_3): ... this. - (PREFIX_0FAE_REG_1): Rename to ... - (PREFIX_0FAE_REG_1_MOD_3): ... this. - (PREFIX_0FAE_REG_2): Rename to ... - (PREFIX_0FAE_REG_2_MOD_3): ... this. - (PREFIX_0FAE_REG_3): Rename to ... - (PREFIX_0FAE_REG_3_MOD_3): ... this. - (PREFIX_MOD_0_0FAE_REG_4): Rename to ... - (PREFIX_0FAE_REG_4_MOD_0): ... this. - (PREFIX_MOD_3_0FAE_REG_4): Rename to ... - (PREFIX_0FAE_REG_4_MOD_3): ... this. - (PREFIX_MOD_0_0FAE_REG_5): Rename to ... - (PREFIX_0FAE_REG_5_MOD_0): ... this. - (PREFIX_MOD_3_0FAE_REG_5): Rename to ... - (PREFIX_0FAE_REG_5_MOD_3): ... this. - (PREFIX_MOD_0_0FAE_REG_6): Rename to ... - (PREFIX_0FAE_REG_6_MOD_0): ... this. - (PREFIX_MOD_1_0FAE_REG_6): Rename to ... - (PREFIX_0FAE_REG_6_MOD_3): ... this. - (PREFIX_0FAE_REG_7): Rename to ... - (PREFIX_0FAE_REG_7_MOD_0): ... this. - (PREFIX_MOD_0_0FC3): Rename to ... - (PREFIX_0FC3_MOD_0): ... this. - (PREFIX_MOD_0_0FC7_REG_6): Rename to ... - (PREFIX_0FC7_REG_6_MOD_0): ... this. - (PREFIX_MOD_3_0FC7_REG_6): Rename to ... - (PREFIX_0FC7_REG_6_MOD_3): ... this. - (PREFIX_MOD_3_0FC7_REG_7): Rename to ... - (PREFIX_0FC7_REG_7_MOD_3): ... this. - (reg_table, prefix_table, mod_table, rm_table): Adjust - accordingly. - -2019-11-04 Nick Clifton <nickc@redhat.com> - - * v850-dis.c (get_v850_sreg_name): New function. Returns the name - of a v850 system register. Move the v850_sreg_names array into - this function. - (get_v850_reg_name): Likewise for ordinary register names. - (get_v850_vreg_name): Likewise for vector register names. - (get_v850_cc_name): Likewise for condition codes. - * get_v850_float_cc_name): Likewise for floating point condition - codes. - (get_v850_cacheop_name): Likewise for cache-ops. - (get_v850_prefop_name): Likewise for pref-ops. - (disassemble): Use the new accessor functions. - -2019-10-30 Delia Burduv <delia.burduv@arm.com> - - * aarch64-opc.c (print_immediate_offset_address): Don't print the - immediate for the writeback form of ldraa/ldrab if it is 0. - * aarch64-tbl.h: Updated the documentation for ADDR_SIMM10. - * aarch64-opc-2.c: Regenerated. +2020-06-22 Nelson Chu <nelson.chu@sifive.com> -2019-10-30 Jan Beulich <jbeulich@suse.com> + * riscv-opc.c: Move the structures and functions to bfd/elfxx-riscv.c. + * riscv-dis.c: Include elfxx-riscv.h. - * i386-gen.c (operand_type_shorthands): Delete. - (operand_type_init): Expand previous shorthands. - (set_bitfield_from_shorthand): Rename back to ... - (set_bitfield_from_cpu_flag_init): ... this. Drop processing - of operand_type_init[]. - (set_bitfield): Adjust call to the above function. - * i386-opc.tbl (Reg8, Reg16, Reg32, Reg64, FloatAcc, FloatReg, - RegXMM, RegYMM, RegZMM): Define. - * i386-reg.tbl: Expand prior shorthands. +2020-06-18 H.J. Lu <hongjiu.lu@intel.com> -2019-10-30 Jan Beulich <jbeulich@suse.com> + * i386-dis.c (prefix_table): Revert the last vmgexit change. - * i386-gen.c (output_i386_opcode): Change order of fields - emitted to output. - * i386-opc.h (struct insn_template): Move operands field. - Convert extension_opcode field to unsigned short. - * i386-tbl.h: Re-generate. +2020-06-17 Lili Cui <lili.cui@intel.com> -2019-10-30 Jan Beulich <jbeulich@suse.com> + * i386-dis.c (prefix_table): Delete the incorrect vmgexit. - * i386-gen.c (process_i386_opcode_modifier): Report bogus uses - of W. - * i386-opc.h (W): Extend comment. - * i386-opc.tbl (mov, movabs, movq): Drop W and adjust opcodes of - general purpose variants not allowing for byte operands. - * i386-tbl.h: Re-generate. +2020-06-14 H.J. Lu <hongjiu.lu@intel.com> -2019-10-29 Nick Clifton <nickc@redhat.com> + PR gas/26115 + * i386-dis.c (prefix_table): Replace xsuspldtrk with xsusldtrk. + * i386-opc.tbl: Likewise. + * i386-tbl.h: Regenerated. - * tic30-dis.c (print_branch): Correct size of operand array. +2020-06-12 Nelson Chu <nelson.chu@sifive.com> -2019-10-29 Nick Clifton <nickc@redhat.com> + * riscv-opc.c (priv_specs): Remove v1.9 and PRIV_SPEC_CLASS_1P9. - * d30v-dis.c (print_insn): Check that operand index is valid - before attempting to access the operands array. +2020-06-11 Alex Coplan <alex.coplan@arm.com> -2019-10-29 Nick Clifton <nickc@redhat.com> + * aarch64-opc.c (SYSREG): New macro for describing system registers. + (SR_CORE): Likewise. + (SR_FEAT): Likewise. + (SR_RNG): Likewise. + (SR_V8_1): Likewise. + (SR_V8_2): Likewise. + (SR_V8_3): Likewise. + (SR_V8_4): Likewise. + (SR_PAN): Likewise. + (SR_RAS): Likewise. + (SR_SSBS): Likewise. + (SR_SVE): Likewise. + (SR_ID_PFR2): Likewise. + (SR_PROFILE): Likewise. + (SR_MEMTAG): Likewise. + (SR_SCXTNUM): Likewise. + (aarch64_sys_regs): Refactor to store feature information in the table. + (aarch64_sys_reg_supported_p): Collapse logic for system registers + that now describe their own features. + (aarch64_pstatefield_supported_p): Likewise. + +2020-06-09 H.J. Lu <hongjiu.lu@intel.com> + + * i386-dis.c (prefix_table): Fix a typo in comments. + +2020-06-09 Jan Beulich <jbeulich@suse.com> + + * i386-dis.c (rex_ignored): Delete. + (ckprefix): Drop rex_ignored initialization. + (get_valid_dis386): Drop setting of rex_ignored. + (print_insn): Drop checking of rex_ignored. Don't record data + size prefix as used with VEX-and-alike encodings. + +2020-06-09 Jan Beulich <jbeulich@suse.com> + + * i386-dis.c (MOD_0F12_PREFIX_2, MOD_0F16_PREFIX_2, + MOD_VEX_0F12_PREFIX_2, MOD_VEX_0F16_PREFIX_2): New enumerators. + (VEX_LEN_0F12_P_2, VEX_LEN_0F16_P_2): Delete. + (VEX_LEN_0F12_P_2_M_0, VEX_LEN_0F16_P_2_M_0): Define. + (prefix_table): Decode MOD for cases 2 of opcodes 0F12, 0F16, + VEX_0F12, and VEX_0F16. + (vex_len_table): Use X for vmovlp* and vmovh*s. Drop + VEX_LEN_0F12_P_2 and VEX_LEN_0F16_P_2 entries. + (mod_table): Use X for movlpX and movhpX. Drop PREFIX_OPCODE + from movlps and movhlps. New MOD_0F12_PREFIX_2, + MOD_0F16_PREFIX_2, MOD_VEX_0F12_PREFIX_2, and + MOD_VEX_0F16_PREFIX_2 entries. + +2020-06-09 Jan Beulich <jbeulich@suse.com> + + * i386-dis.c (MOD_EVEX_0F12_PREFIX_2, MOD_EVEX_0F13, + MOD_EVEX_0F16_PREFIX_2, MOD_EVEX_0F17, MOD_EVEX_0F2B): New enumerators. + (PREFIX_EVEX_0F13, PREFIX_EVEX_0F14, PREFIX_EVEX_0F15, + PREFIX_EVEX_0F17, PREFIX_EVEX_0F28, PREFIX_EVEX_0F29, + PREFIX_EVEX_0F2B, PREFIX_EVEX_0F54, PREFIX_EVEX_0F55, + PREFIX_EVEX_0F56, PREFIX_EVEX_0F57, PREFIX_EVEX_0FC6, + EVEX_W_0F10_P_0, EVEX_W_0F10_P_2, EVEX_W_0F11_P_0, + EVEX_W_0F11_P_2, EVEX_W_0F12_P_0_M_0, EVEX_W_0F12_P_2, + EVEX_W_0F13_P_0, EVEX_W_0F13_P_2, EVEX_W_0F14_P_0, + EVEX_W_0F14_P_2, EVEX_W_0F15_P_0, EVEX_W_0F15_P_2, + EVEX_W_0F16_P_0_M_0, EVEX_W_0F16_P_2, EVEX_W_0F17_P_0, + EVEX_W_0F17_P_2, EVEX_W_0F28_P_0, EVEX_W_0F28_P_2, + EVEX_W_0F29_P_0, EVEX_W_0F29_P_2, EVEX_W_0F2B_P_0, + EVEX_W_0F2B_P_2, EVEX_W_0F2E_P_0, EVEX_W_0F2E_P_2, + EVEX_W_0F2F_P_0, EVEX_W_0F2F_P_2, EVEX_W_0F51_P_0, + EVEX_W_0F51_P_2, EVEX_W_0F54_P_0, EVEX_W_0F54_P_2, + EVEX_W_0F55_P_0, EVEX_W_0F55_P_2, EVEX_W_0F56_P_0, + EVEX_W_0F56_P_2, EVEX_W_0F57_P_0, EVEX_W_0F57_P_2, + EVEX_W_0F58_P_0, EVEX_W_0F58_P_2, EVEX_W_0F59_P_0, + EVEX_W_0F59_P_2, EVEX_W_0F5C_P_0, EVEX_W_0F5C_P_2, + EVEX_W_0F5D_P_0, EVEX_W_0F5D_P_2, EVEX_W_0F5E_P_0, + EVEX_W_0F5E_P_2, EVEX_W_0F5F_P_0, EVEX_W_0F5F_P_2, + EVEX_W_0FC2_P_0, EVEX_W_0FC2_P_2, EVEX_W_0FC6_P_0, + EVEX_W_0FC6_P_2): Delete. + (print_insn): Add EVEX.W vs embedded prefix consistency check + to prefix validation. + * i386-dis-evex.h (evex_table): Don't further descend for + vunpcklpX, vunpckhpX, vmovapX, vandpX, vandnpX, vorpX, vxorpX, + and vshufpX. Continue with MOD decoding for opcodes 0F13, 0F17, + and 0F2B. + * i386-dis-evex-mod.h: Add/adjust vmovlpX/vmovhpX entries. + * i386-dis-evex-prefix.h: Don't further descend for vmovupX, + vucomisX, vcomisX, vsqrtpX, vaddpX, vmulpX, vsubpX, vminpX, + vdivpX, vmaxpX, and vcmppX. Continue with MOD decoding for cases + 2 of PREFIX_EVEX_0F12, PREFIX_EVEX_0F16, and PREFIX_EVEX_0F29. + Drop PREFIX_EVEX_0F13, PREFIX_EVEX_0F14, PREFIX_EVEX_0F15, + PREFIX_EVEX_0F17, PREFIX_EVEX_0F28, PREFIX_EVEX_0F2B, + PREFIX_EVEX_0F54, PREFIX_EVEX_0F55, PREFIX_EVEX_0F56, + PREFIX_EVEX_0F57, and PREFIX_EVEX_0FC6 entries. + * i386-dis-evex-w.h: Drop EVEX_W_0F10_P_0, EVEX_W_0F10_P_2, + EVEX_W_0F11_P_0, EVEX_W_0F11_P_2, EVEX_W_0F12_P_0_M_0, + EVEX_W_0F12_P_2, EVEX_W_0F12_P_3, EVEX_W_0F13_P_0, + EVEX_W_0F13_P_2, EVEX_W_0F14_P_0, EVEX_W_0F14_P_2, + EVEX_W_0F15_P_0, EVEX_W_0F15_P_2, EVEX_W_0F16_P_0_M_0, + EVEX_W_0F16_P_2, EVEX_W_0F17_P_0, EVEX_W_0F17_P_2, + EVEX_W_0F28_P_0, EVEX_W_0F28_P_2, EVEX_W_0F29_P_0, + EVEX_W_0F29_P_2, EVEX_W_0F2B_P_0, EVEX_W_0F2B_P_2, + EVEX_W_0F2E_P_0, EVEX_W_0F2E_P_2, EVEX_W_0F2F_P_0, + EVEX_W_0F2F_P_2, EVEX_W_0F51_P_0, EVEX_W_0F51_P_2, + EVEX_W_0F54_P_0, EVEX_W_0F54_P_2, EVEX_W_0F55_P_0, + EVEX_W_0F55_P_2, EVEX_W_0F56_P_0, EVEX_W_0F56_P_2, + EVEX_W_0F57_P_0, EVEX_W_0F57_P_2, EVEX_W_0F58_P_0, + EVEX_W_0F58_P_2, EVEX_W_0F59_P_0, EVEX_W_0F59_P_2, + EVEX_W_0F5C_P_0, EVEX_W_0F5C_P_2, EVEX_W_0F5D_P_0, + EVEX_W_0F5D_P_2, EVEX_W_0F5E_P_0, EVEX_W_0F5E_P_2, + EVEX_W_0F5F_P_0, EVEX_W_0F5F_P_2, EVEX_W_0FC2_P_0, + EVEX_W_0FC2_P_2, EVEX_W_0FC6_P_0, and EVEX_W_0FC6_P_2 entries. + +2020-06-09 Jan Beulich <jbeulich@suse.com> + + * i386-dis.c (vex_table): Use PREFIX_OPCODE for vunpcklpX, + vunpckhpX, vmovapX, vandpX, vandnpX, vorpX, vxorpX and vshufpX. + (vex_len_table) : Likewise for vmovlpX, vmovhpX, vmovntpX, and + vmovmskpX. + (print_insn): Drop pointless check against bad_opcode. Split + prefix validation into legacy and VEX-and-alike parts. + (putop): Re-work 'X' macro handling. + +2020-06-09 Jan Beulich <jbeulich@suse.com> + + * i386-dis.c (MOD_0F51): Rename to ... + (MOD_0F50): ... this. + +2020-06-08 Alex Coplan <alex.coplan@arm.com> + + * arm-dis.c (arm_opcodes): Add dfb. + (thumb32_opcodes): Add dfb. + +2020-06-08 Jan Beulich <jbeulich@suse.com> + + * i386-opc.h (reg_entry): Const-qualify reg_name field. + +2020-06-06 Alan Modra <amodra@gmail.com> + + * ppc-dis.c (ppc_opts): Accept -mpwr10/-Mpwr10. + +2020-06-05 Alan Modra <amodra@gmail.com> - * ia64-opc.c (locate_opcode_ent): Prevent a negative shift when - locating the bit to be tested. + * cgen-dis.c (hash_insn_array): Increase size of buf. Assert + size is large enough. -2019-10-29 Nick Clifton <nickc@redhat.com> +2020-06-04 Jose E. Marchesi <jose.marchesi@oracle.com> - * s12z-dis.c (opr_emit_disassembly): Check for illegal register - values. - (shift_size_table): Use a fixed size defined as S12Z_N_SIZES. - (print_insn_s12z): Check for illegal size values. + * disassemble.c (disassemble_init_for_target): Set endian_code for + bpf targets. + * bpf-desc.c: Regenerate. + * bpf-opc.c: Likewise. + * bpf-dis.c: Likewise. -2019-10-28 Nick Clifton <nickc@redhat.com> +2020-06-03 Jose E. Marchesi <jose.marchesi@oracle.com> - * csky-dis.c (csky_chars_to_number): Check for a negative - count. Use an unsigned integer to construct the return value. + * cgen-opc.c (cgen_get_insn_value): Get an `endian' argument. + (cgen_put_insn_value): Likewise. + (cgen_lookup_insn): Pass endianness to cgen_{get,put}_insn_value. + * cgen-dis.in (print_insn): Likewise. + * cgen-ibld.in (insert_1): Likewise. + (insert_1): Likewise. + (insert_insn_normal): Likewise. + (extract_1): Likewise. + * bpf-dis.c: Regenerate. + * bpf-ibld.c: Likewise. + * bpf-ibld.c: Likewise. + * cgen-dis.in: Likewise. + * cgen-ibld.in: Likewise. + * cgen-opc.c: Likewise. + * epiphany-dis.c: Likewise. + * epiphany-ibld.c: Likewise. + * fr30-dis.c: Likewise. + * fr30-ibld.c: Likewise. + * frv-dis.c: Likewise. + * frv-ibld.c: Likewise. + * ip2k-dis.c: Likewise. + * ip2k-ibld.c: Likewise. + * iq2000-dis.c: Likewise. + * iq2000-ibld.c: Likewise. + * lm32-dis.c: Likewise. + * lm32-ibld.c: Likewise. + * m32c-dis.c: Likewise. + * m32c-ibld.c: Likewise. + * m32r-dis.c: Likewise. + * m32r-ibld.c: Likewise. + * mep-dis.c: Likewise. + * mep-ibld.c: Likewise. + * mt-dis.c: Likewise. + * mt-ibld.c: Likewise. + * or1k-dis.c: Likewise. + * or1k-ibld.c: Likewise. + * xc16x-dis.c: Likewise. + * xc16x-ibld.c: Likewise. + * xstormy16-dis.c: Likewise. + * xstormy16-ibld.c: Likewise. -2019-10-28 Nick Clifton <nickc@redhat.com> +2020-06-04 Jose E. Marchesi <jemarch@gnu.org> - * tic30-dis.c (OPERAND_BUFFER_LEN): Define. Use as length of - operand buffer. Set value to 15 not 13. - (get_register_operand): Use OPERAND_BUFFER_LEN. - (get_indirect_operand): Likewise. - (print_two_operand): Likewise. - (print_three_operand): Likewise. - (print_oar_insn): Likewise. + * cgen-dis.in (cpu_desc_list): New field `insn_endian'. + (print_insn_): Handle instruction endian. + * bpf-dis.c: Regenerate. + * bpf-desc.c: Regenerate. + * epiphany-dis.c: Likewise. + * epiphany-desc.c: Likewise. + * fr30-dis.c: Likewise. + * fr30-desc.c: Likewise. + * frv-dis.c: Likewise. + * frv-desc.c: Likewise. + * ip2k-dis.c: Likewise. + * ip2k-desc.c: Likewise. + * iq2000-dis.c: Likewise. + * iq2000-desc.c: Likewise. + * lm32-dis.c: Likewise. + * lm32-desc.c: Likewise. + * m32c-dis.c: Likewise. + * m32c-desc.c: Likewise. + * m32r-dis.c: Likewise. + * m32r-desc.c: Likewise. + * mep-dis.c: Likewise. + * mep-desc.c: Likewise. + * mt-dis.c: Likewise. + * mt-desc.c: Likewise. + * or1k-dis.c: Likewise. + * or1k-desc.c: Likewise. + * xc16x-dis.c: Likewise. + * xc16x-desc.c: Likewise. + * xstormy16-dis.c: Likewise. + * xstormy16-desc.c: Likewise. + +2020-06-03 Nick Clifton <nickc@redhat.com> -2019-10-28 Nick Clifton <nickc@redhat.com> + * po/sr.po: Updated Serbian translation. - * ns32k-dis.c (bit_extract): Add sanitiy check of parameters. - (bit_extract_simple): Likewise. - (bit_copy): Likewise. - (pirnt_insn_ns32k): Ensure that uninitialised elements in the - index_offset array are not accessed. +2020-06-03 Nelson Chu <nelson.chu@sifive.com> -2019-10-28 Nick Clifton <nickc@redhat.com> + * riscv-opc.c (riscv_get_isa_spec_class): Change bfd_boolean to int. + (riscv_get_priv_spec_class): Likewise. - * xgate-dis.c (print_insn): Fix decoding of the XGATE_OP_DYA - operand. +2020-06-01 Alan Modra <amodra@gmail.com> -2019-10-25 Nick Clifton <nickc@redhat.com> + * bpf-desc.c: Regenerate. - * rx-dis.c (print_insn_rx): Use parenthesis to ensure correct - access to opcodes.op array element. +2020-05-28 Jose E. Marchesi <jose.marchesi@oracle.com> + David Faust <david.faust@oracle.com> -2019-10-23 Nick Clifton <nickc@redhat.com> + * bpf-desc.c: Regenerate. + * bpf-opc.h: Likewise. + * bpf-opc.c: Likewise. + * bpf-dis.c: Likewise. - * rx-dis.c (get_register_name): Fix spelling typo in error - message. - (get_condition_name, get_flag_name, get_double_register_name) - (get_double_register_high_name, get_double_register_low_name) - (get_double_control_register_name, get_double_condition_name) - (get_opsize_name, get_size_name): Likewise. +2020-05-28 Alan Modra <amodra@gmail.com> -2019-10-22 Nick Clifton <nickc@redhat.com> + * nios2-dis.c (nios2_print_insn_arg): Avoid shift left of negative + values. - * rx-dis.c (get_size_name): New function. Provides safe - access to name array. - (get_opsize_name): Likewise. - (print_insn_rx): Use the accessor functions. +2020-05-28 Alan Modra <amodra@gmail.com> -2019-10-16 Nick Clifton <nickc@redhat.com> + * ns32k-dis.c (print_insn_arg): Handle d value of 'f' for + immediates. + (print_insn_ns32k): Revert last change. - * rx-dis.c (get_register_name): New function. Provides safe - access to name array. - (get_condition_name, get_flag_name, get_double_register_name) - (get_double_register_high_name, get_double_register_low_name) - (get_double_control_register_name, get_double_condition_name): - Likewise. - (print_insn_rx): Use the accessor functions. +2020-05-28 Nick Clifton <nickc@redhat.com> -2019-10-09 Nick Clifton <nickc@redhat.com> + * ns32k-dis.c (print_insn_ns32k): Change the arg_bufs array to + static. - PR 25041 - * avr-dis.c (avr_operand): Fix construction of address for lds/sts - instructions. +2020-05-26 Sandra Loosemore <sandra@codesourcery.com> -2019-10-07 Jan Beulich <jbeulich@suse.com> + Fix extraction of signed constants in nios2 disassembler (again). - * opcodes/i386-opc.tbl (movsd): Add Dword and IgnoreSize. - (cmpsd): Likewise. Move EsSeg to other operand. - * opcodes/i386-tbl.h: Re-generate. + * nios2-dis.c (nios2_print_insn_arg): Add explicit casts to + extractions of signed fields. -2019-09-23 Alan Modra <amodra@gmail.com> +2020-05-26 Stefan Schulze Frielinghaus <stefansf@linux.ibm.com> - * m68k-dis.c: Include cpu-m68k.h + * s390-opc.txt: Relocate vector load/store instructions with + additional alignment parameter and change architecture level + constraint from z14 to z13. -2019-09-23 Alan Modra <amodra@gmail.com> +2020-05-21 Alan Modra <amodra@gmail.com> - * mips-dis.c: Include elfxx-mips.h. Move "elf-bfd.h" and - "elf/mips.h" earlier. + * arc-ext.c: Replace "if (x) free (x)" with "free (x)" throughout. + * sparc-dis.c: Likewise. + * tic4x-dis.c: Likewise. + * xtensa-dis.c: Likewise. + * bpf-desc.c: Regenerate. + * epiphany-desc.c: Regenerate. + * fr30-desc.c: Regenerate. + * frv-desc.c: Regenerate. + * ip2k-desc.c: Regenerate. + * iq2000-desc.c: Regenerate. + * lm32-desc.c: Regenerate. + * m32c-desc.c: Regenerate. + * m32r-desc.c: Regenerate. + * mep-asm.c: Regenerate. + * mep-desc.c: Regenerate. + * mt-desc.c: Regenerate. + * or1k-desc.c: Regenerate. + * xc16x-desc.c: Regenerate. + * xstormy16-desc.c: Regenerate. + +2020-05-20 Nelson Chu <nelson.chu@sifive.com> + + * riscv-opc.c (riscv_ext_version_table): The table used to store + all information about the supported spec and the corresponding ISA + versions. Currently, only Zicsr is supported to verify the + correctness of Z sub extension settings. Others will be supported + in the future patches. + (struct isa_spec_t, isa_specs): List for all supported ISA spec + classes and the corresponding strings. + (riscv_get_isa_spec_class): New function. Get the corresponding ISA + spec class by giving a ISA spec string. + * riscv-opc.c (struct priv_spec_t): New structure. + (struct priv_spec_t priv_specs): List for all supported privilege spec + classes and the corresponding strings. + (riscv_get_priv_spec_class): New function. Get the corresponding + privilege spec class by giving a spec string. + (riscv_get_priv_spec_name): New function. Get the corresponding + privilege spec string by giving a CSR version class. + * riscv-dis.c: Updated since DECLARE_CSR is changed. + * riscv-dis.c: Add new disassembler option -Mpriv-spec to dump the CSR + according to the chosen version. Build a hash table riscv_csr_hash to + store the valid CSR for the chosen pirv verison. Dump the direct + CSR address rather than it's name if it is invalid. + (parse_riscv_dis_option_without_args): New function. Parse the options + without arguments. + (parse_riscv_dis_option): Call parse_riscv_dis_option_without_args to + parse the options without arguments first, and then handle the options + with arguments. Add the new option -Mpriv-spec, which has argument. + * riscv-dis.c (print_riscv_disassembler_options): Add description + about the new OBJDUMP option. + +2020-05-19 Peter Bergner <bergner@linux.ibm.com> + + * ppc-opc.c (insert_ls, extract_ls): Handle 3-bit L fields and new + WC values on POWER10 sync, dcbf and wait instructions. + (insert_pl, extract_pl): New functions. + (L2OPT, LS, WC): Use insert_ls and extract_ls. + (LS3): New , 3-bit L for sync. + (LS3, L3OPT): New, 3-bit L for sync and dcbf. + (SC2, PL): New, 2-bit SC and PL for sync and wait. + (XWCPL_MASK, XL3RT_MASK, XSYNCLS_MASK): New instruction masks. + (XOPL3, XWCPL, XSYNCLS): New opcode macros. + (powerpc_opcodes) <dcbflp, dcbfps, dcbstps pause_short, phwsync, + plwsync, stcisync, stncisync, stsync, waitrsv>: New extended mnemonics. + <wait>: Enable PL operand on POWER10. + <dcbf>: Enable L3OPT operand on POWER10. + <sync>: Enable SC2 operand on POWER10. + +2020-05-19 Stafford Horne <shorne@gmail.com> + + PR 25184 + * or1k-asm.c: Regenerate. + * or1k-desc.c: Regenerate. + * or1k-desc.h: Regenerate. + * or1k-dis.c: Regenerate. + * or1k-ibld.c: Regenerate. + * or1k-opc.c: Regenerate. + * or1k-opc.h: Regenerate. + * or1k-opinst.c: Regenerate. -2018-09-20 Jan Beulich <jbeulich@suse.com> +2020-05-11 Alan Modra <amodra@gmail.com> - PR gas/25012 - * i386-opc.tbl (push, pop): Re-instate distinct Cpu64 templates - with SReg operand. - * i386-tbl.h: Re-generate. + * ppc-opc (powerpc_opcodes): Add xscmpeqqp, xscmpgeqp, xscmpgtqp, + xsmaxcqp, xsmincqp. -2019-09-18 Alan Modra <amodra@gmail.com> +2020-05-11 Alan Modra <amodra@gmail.com> - * arc-ext.c: Update throughout for bfd section macro changes. + * ppc-opc.c (powerpc_opcodes): Add lxvrbx, lxvrhx, lxvrwx, lxvrdx, + stxvrbx, stxvrhx, stxvrwx, stxvrdx. -2019-09-18 Simon Marchi <simon.marchi@polymtl.ca> +2020-05-11 Alan Modra <amodra@gmail.com> - * Makefile.in: Re-generate. - * configure: Re-generate. + * ppc-opc.c (powerpc_opcodes): Add xvtlsbb. -2019-09-17 Maxim Blinov <maxim.blinov@embecosm.com> +2020-05-11 Alan Modra <amodra@gmail.com> - * riscv-opc.c (riscv_opcodes): Change subset field - to insn_class field for all instructions. - (riscv_insn_types): Likewise. + * ppc-opc.c (powerpc_opcodes): Add vstribl, vstribr, vstrihl, vstrihr, + vclrlb, vclrrb, vstribl., vstribr., vstrihl., vstrihr.. -2019-09-16 Phil Blundell <pb@pbcl.net> +2020-05-11 Peter Bergner <bergner@linux.ibm.com> - * configure: Regenerated. + * ppc-opc.c (powerpc_opcodes) <setbc, setbcr, setnbc, setnbcr>: New + mnemonics. -2019-09-10 Miod Vallat <miod@online.fr> +2020-05-11 Alan Modra <amodra@gmail.com> - PR 24982 - * m68k-opc.c: Correct aliases for tdivsl and tdivul. + * ppc-opc.c (UIM8, P_U8XX4_MASK): Define. + (powerpc_opcodes): Add vgnb, vcfuged, vpextd, vpdepd, vclzdm, + vctzdm, cntlzdm, pdepd, pextd, cfuged, cnttzdm. + (prefix_opcodes): Add xxeval. -2019-09-09 Phil Blundell <pb@pbcl.net> +2020-05-11 Alan Modra <amodra@gmail.com> - binutils 2.33 branch created. + * ppc-opc.c (powerpc_opcodes): Add xxgenpcvbm, xxgenpcvhm, + xxgenpcvwm, xxgenpcvdm. -2019-09-03 Nick Clifton <nickc@redhat.com> +2020-05-11 Alan Modra <amodra@gmail.com> - PR 24961 - * tic30-dis.c (get_indirect_operand): Check for bufcnt being - greater than zero before indexing via (bufcnt -1). + * ppc-opc.c (MP, VXVAM_MASK): Define. + (VXVAPS_MASK): Use VXVA_MASK. + (powerpc_opcodes): Add mtvsrbmi, vexpandbm, vexpandhm, vexpandwm, + vexpanddm, vexpandqm, vextractbm, vextracthm, vextractwm, + vextractdm, vextractqm, mtvsrbm, mtvsrhm, mtvsrwm, mtvsrdm, mtvsrqm, + vcntmbb, vcntmbh, vcntmbw, vcntmbd. -2019-09-03 Nick Clifton <nickc@redhat.com> +2020-05-11 Alan Modra <amodra@gmail.com> + Peter Bergner <bergner@linux.ibm.com> - PR 24958 - * mmix-dis.c (MAX_REG_NAME_LEN): Define. - (MAX_SPEC_REG_NAME_LEN): Define. - (struct mmix_dis_info): Use defined constants for array lengths. - (get_reg_name): New function. - (get_sprec_reg_name): New function. - (print_insn_mmix): Use new functions. + * ppc-opc.c (insert_xa6a, extract_xa6a, insert_xb6a, extract_xb6a): + New functions. + (powerpc_operands): Define ACC, PMSK8, PMSK4, PMSK2, XMSK, YMSK, + YMSK2, XA6a, XA6ap, XB6a entries. + (PMMIRR, P_X_MASK, P_XX1_MASK, P_GER_MASK): Define + (P_GER2_MASK, P_GER4_MASK, P_GER8_MASK, P_GER64_MASK): Define. + (PPCVSX4): Define. + (powerpc_opcodes): Add 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, xvcvbf16sp, xvcvspbf16. + (prefix_opcodes): Add pmxvi8ger4pp, pmxvi8ger4, pmxvf16ger2pp, + pmxvf16ger2, pmxvf32gerpp, pmxvf32ger, pmxvi4ger8pp, pmxvi4ger8, + pmxvi16ger2spp, pmxvi16ger2s, pmxvbf16ger2pp, pmxvbf16ger2, + pmxvf64gerpp, pmxvf64ger, pmxvi16ger2, pmxvf16ger2np, pmxvf32gernp, + pmxvi8ger4spp, pmxvi16ger2pp, pmxvbf16ger2np, pmxvf64gernp, + pmxvf16ger2pn, pmxvf32gerpn, pmxvbf16ger2pn, pmxvf64gerpn, + pmxvf16ger2nn, pmxvf32gernn, pmxvbf16ger2nn, pmxvf64gernn. -2019-08-27 Srinath Parvathaneni <srinath.parvathaneni@arm.com> +2020-05-11 Alan Modra <amodra@gmail.com> - * arm-dis.c (mve_opcodes): Add entry for MVE_VMOV_VEC_TO_VEC. - (is_mve_undefined): Add case for MVE_VMOV_VEC_TO_VEC. - (print_insn_mve): Add condition to check Qm==Qn of VORR instruction. + * ppc-opc.c (insert_imm32, extract_imm32): New functions. + (insert_xts, extract_xts): New functions. + (IMM32, UIM3, IX, UIM5, SH3, XTS, P8RR): Define. + (P_XX4_MASK, P_UXX4_MASK, VSOP, P_VS_MASK, P_VSI_MASK): Define. + (VXRC_MASK, VXSH_MASK): Define. + (powerpc_opcodes): Add vinsbvlx, vsldbi, vextdubvlx, vextdubvrx, + vextduhvlx, vextduhvrx, vextduwvlx, vextduwvrx, vextddvlx, + vextddvrx, vinshvlx, vinswvlx, vinsw, vinsbvrx, vinshvrx, + vinswvrx, vinsd, vinsblx, vsrdbi, vinshlx, vinswlx, vinsdlx, + vinsbrx, vinshrx, vinswrx, vinsdrx, lxvkq. + (prefix_opcodes): Add xxsplti32dx, xxspltidp, xxspltiw, xxblendvb, + xxblendvh, xxblendvw, xxblendvd, xxpermx. -2019-08-22 Kyrylo Tkachov <kyrylo.tkachov@arm.com> +2020-05-11 Alan Modra <amodra@gmail.com> - * aarch64-opc.c (aarch64_sys_regs): Update encoding of tfsre0_el1, - tfsr_el1, tfsr_el2, tfsr_el3, tfsr_el12. - (aarch64_sys_reg_supported_p): Update checks for the above. + * ppc-opc.c (powerpc_opcodes): Add vrlq, vdivuq, vmsumcud, vrlqmi, + vmuloud, vcmpuq, vslq, vdivsq, vcmpsq, vrlqnm, vcmpequq, vmulosd, + vsrq, vdiveuq, vcmpgtuq, vmuleud, vsraq, vdivesq, vcmpgtsq, vmulesd, + vcmpequq., vextsd2q, vmoduq, vcmpgtuq., vmodsq, vcmpgtsq., xscvqpuqz, + xscvuqqp, xscvqpsqz, xscvsqqp, dcffixqq, dctfixqq. -2019-08-12 Srinath Parvathaneni <srinath.parvathaneni@arm.com> +2020-05-11 Alan Modra <amodra@gmail.com> - * arm-dis.c (struct mopcode32 mve_opcodes): Modify the mask for - cases MVE_SQRSHRL and MVE_UQRSHLL. - (print_insn_mve): Add case for specifier 'k' to check - specific bit of the instruction. + * ppc-opc.c (insert_xtp, extract_xtp): New functions. + (XTP, DQXP, DQXP_MASK): Define. + (powerpc_opcodes): Add lxvp, stxvp, lxvpx, stxvpx. + (prefix_opcodes): Add plxvp and pstxvp. -2019-08-07 Phillipe Antoine <p.antoine@catenacyber.fr> +2020-05-11 Alan Modra <amodra@gmail.com> - PR 24854 - * arc-dis.c (arc_insn_length): Return 0 rather than aborting when - encountering an unknown machine type. - (print_insn_arc): Handle arc_insn_length returning 0. In error - cases return -1 rather than calling abort. + * ppc-opc.c (powerpc_opcodes): Add vdivuw, vdivud, vdivsw, vmulld, + vdivsd, vmulhuw, vdiveuw, vmulhud, vdiveud, vmulhsw, vdivesw, + vmulhsd, vdivesd, vmoduw, vmodud, vmodsw, vmodsd. -2019-08-07 Jan Beulich <jbeulich@suse.com> +2020-05-11 Peter Bergner <bergner@linux.ibm.com> - * i386-opc.tbl (fld, fstp): Drop FloatMF from extended forms. - (fldcw, fnstcw, fstcw, fnstsw, fstsw): Replace FloatMF by - IgnoreSize. - * i386-tbl.h: Re-generate. + * ppc-opc.c (powerpc_opcodes) <brd, brh, brw>: New mnemonics. -2019-08-05 Barnaby Wilks <barnaby.wilks@arm.com> +2020-05-11 Peter Bergner <bergner@linux.ibm.com> - * arm-dis.c: Only accept signed variants of VQ(R)DMLAH and VQ(R)DMLASH - instructions. + * ppc-opc.c (insert_l1opt, extract_l1opt): New functions. + (L1OPT): Define. + (powerpc_opcodes) <paste.>: Add L operand for cpu POWER10. -2019-07-30 Mel Chen <mel.chen@sifive.com> +2020-05-11 Peter Bergner <bergner@linux.ibm.com> - * riscv-opc.c (riscv_opcodes): Set frsr, fssr, frcsr, fscsr, frrm, - fsrm, fsrmi, frflags, fsflags, fsflagsi to alias instructions. + * ppc-opc.c (powerpc_opcodes) <slbiag>: Add variant with L operand. - * riscv-opc.c (riscv_opcodes): Adjust order of frsr, frcsr, fssr, - fscsr. +2020-05-11 Alan Modra <amodra@gmail.com> -2019-07-24 Claudiu Zissulescu <claziss@synopsys.com> + * ppc-dis.c (powerpc_init_dialect): Default to "power10". - * arc-dis.c (skip_this_opcode): Check also for 0x07 major opcodes, - and MPY class instructions. - (parse_option): Add nps400 option. - (print_arc_disassembler_options): Add nps400 info. +2020-05-11 Alan Modra <amodra@gmail.com> -2019-07-24 Claudiu Zissulescu <claziss@synopsys.com> + * ppc-dis.c (ppc_opts): Add "power10" entry. + (print_insn_powerpc): Update for PPC_OPCODE_POWER10 renaming. + * ppc-opc.c (POWER10): Rename from POWERXX. Update all uses. - * arc-ext-tbl.h (bspeek): Remove it, added to main table. - (bspop): Likewise. - (modapp): Likewise. - * arc-opc.c (RAD_CHK): Add. - * arc-tbl.h: Regenerate. +2020-05-11 Nick Clifton <nickc@redhat.com> -2019-07-23 Kyrylo Tkachov <kyrylo.tkachov@arm.com> + * po/fr.po: Updated French translation. - * aarch64-opc.c (aarch64_sys_regs): Add gmid_el1 entry. - (aarch64_sys_reg_supported_p): Handle gmid_el1 encoding. +2020-04-30 Alex Coplan <alex.coplan@arm.com> -2019-07-22 Barnaby Wilks <barnaby.wilks@arm.com> + * aarch64-opc.h (enum aarch64_field_kind): Add FLD_imm16_2. + * aarch64-opc.c (fields): Add entry for FLD_imm16_2. + (operand_general_constraint_met_p): validate + AARCH64_OPND_UNDEFINED. + * aarch64-tbl.h (aarch64_opcode_table): Add udf instruction, entry + for FLD_imm16_2. + * aarch64-asm-2.c: Regenerated. + * aarch64-dis-2.c: Regenerated. + * aarch64-opc-2.c: Regenerated. - * arm-dis.c (is_mve_unpredictable): Stop marking some MVE - instructions as UNPREDICTABLE. +2020-04-29 Nick Clifton <nickc@redhat.com> -2019-07-19 Jose E. Marchesi <jose.marchesi@oracle.com> + PR 22699 + * sh-opc.h: Also use unsigned 8-bit immediate values for the LDRC + and SETRC insns. - * bpf-desc.c: Regenerated. +2020-04-29 Nick Clifton <nickc@redhat.com> -2019-07-17 Jan Beulich <jbeulich@suse.com> + * po/sv.po: Updated Swedish translation. - * i386-gen.c (static_assert): Define. - (main): Use it. - * i386-opc.h (Opcode_Modifier_Max): Rename to ... - (Opcode_Modifier_Num): ... this. - (Mem): Delete. +2020-04-29 Nick Clifton <nickc@redhat.com> -2019-07-16 Jan Beulich <jbeulich@suse.com> + PR 22699 + * sh-opc.h (IMM0_8): Replace with IMM0_8S and IMM0_8U. Use + IMM0_8S for arithmetic insns and IMM0_8U for logical insns. + * sh-dis.c (print_insn_sh): Change IMM0_8 case to IMM0_8S and add + IMM0_8U case. + +2020-04-21 Andreas Schwab <schwab@linux-m68k.org> + + PR 25848 + * m68k-opc.c (m68k_opcodes): Allow pc-rel for second operand of + cmpi only on m68020up and cpu32. + +2020-04-20 Sudakshina Das <sudi.das@arm.com> + + * aarch64-asm.c (aarch64_ins_none): New. + * aarch64-asm.h (ins_none): New declaration. + * aarch64-dis.c (aarch64_ext_none): New. + * aarch64-dis.h (ext_none): New declaration. + * aarch64-opc.c (aarch64_print_operand): Update case for + AARCH64_OPND_BARRIER_PSB. + * aarch64-tbl.h (aarch64_opcode_table): Add tsb. + (AARCH64_OPERANDS): Update inserter/extracter for + AARCH64_OPND_BARRIER_PSB to use new dummy functions. + * aarch64-asm-2.c: Regenerated. + * aarch64-dis-2.c: Regenerated. + * aarch64-opc-2.c: Regenerated. - * i386-gen.c (operand_types): Move RegMem ... - (opcode_modifiers): ... here. - * i386-opc.h (RegMem): Move to opcode modifer enum. - (union i386_operand_type): Move regmem field ... - (struct i386_opcode_modifier): ... here. - * i386-opc.tbl (RegMem): Define. - (mov, movq): Move RegMem on segment, control, debug, and test - register flavors. - (pextrb): Move RegMem on register only flavors. Add IgnoreSize - to non-SSE2AVX flavor. - (extractps, pextrw, vcvtps2ph, vextractps, vpextrb, vpextrw): - Move RegMem on register only flavors. Drop IgnoreSize from - legacy encoding flavors. - (movss, movsd, vmovss, vmovsd): Drop RegMem from register only - flavors. - (vpinsrb, vpinsrw): Drop IgnoreSize where still present on - register only flavors. - (vmovd): Move RegMem and drop IgnoreSize on register only - flavor. Change opcode and operand order to store form. - * opcodes/i386-init.h, i386-tbl.h: Re-generate. +2020-04-20 Sudakshina Das <sudi.das@arm.com> -2019-07-16 Jan Beulich <jbeulich@suse.com> + * aarch64-tbl.h (aarch64_feature_bti, BTI, BTI_INSN): Remove. + (aarch64_feature_ras, RAS): Likewise. + (aarch64_feature_stat_profile, STAT_PROFILE): Likewise. + (aarch64_opcode_table): Update bti, xpaclri, pacia1716, pacib1716, + autia1716, autib1716, esb, psb, dgh, paciaz, paciasp, pacibz, pacibsp, + autiaz, autiasp, autibz, autibsp to be CORE_INSN. + * aarch64-asm-2.c: Regenerated. + * aarch64-dis-2.c: Regenerated. + * aarch64-opc-2.c: Regenerated. - * i386-gen.c (operand_type_init, operand_types): Replace SReg - entries. - * i386-opc.h (SReg2, SReg3): Replace by ... - (SReg): ... this. - (union i386_operand_type): Replace sreg fields. - * i386-opc.tbl (mov, ): Use SReg. - (push, pop): Likewies. Drop i386 and x86-64 specific segment - register flavors. - * i386-reg.tbl (cs, ds, es, fs, gs, ss, flat): Use SReg. - * opcodes/i386-init.h, i386-tbl.h: Re-generate. +2020-04-17 Fredrik Strupe <fredrik@strupe.net> + + * arm-dis.c (neon_opcodes): Fix VDUP instruction masks. + (print_insn_neon): Support disassembly of conditional + instructions. -2019-07-15 Jose E. Marchesi <jose.marchesi@oracle.com> +2020-02-16 David Faust <david.faust@oracle.com> * bpf-desc.c: Regenerate. - * bpf-opc.c: Likewise. + * bpf-desc.h: Likewise. + * bpf-opc.c: Regenerate. * bpf-opc.h: Likewise. -2019-07-14 Jose E. Marchesi <jose.marchesi@oracle.com> +2020-04-07 Lili Cui <lili.cui@intel.com> - * bpf-desc.c: Regenerate. - * bpf-opc.c: Likewise. + * i386-dis.c (enum): Add PREFIX_0F01_REG_5_MOD_3_RM_1, + (prefix_table): New instructions (see prefixes above). + (rm_table): Likewise + * i386-gen.c (cpu_flag_init): Add CPU_TSXLDTRK_FLAGS, + CPU_ANY_TSXLDTRK_FLAGS. + (cpu_flags): Add CpuTSXLDTRK. + * i386-opc.h (enum): Add CpuTSXLDTRK. + (i386_cpu_flags): Add cputsxldtrk. + * i386-opc.tbl: Add XSUSPLDTRK insns. + * i386-init.h: Regenerate. + * i386-tbl.h: Likewise. -2019-07-10 Hans-Peter Nilsson <hp@bitrange.com> +2020-04-02 Lili Cui <lili.cui@intel.com> - * arm-dis.c (print_insn_coprocessor): Rename index to - index_operand. + * i386-dis.c (prefix_table): New instructions serialize. + * i386-gen.c (cpu_flag_init): Add CPU_SERIALIZE_FLAGS, + CPU_ANY_SERIALIZE_FLAGS. + (cpu_flags): Add CpuSERIALIZE. + * i386-opc.h (enum): Add CpuSERIALIZE. + (i386_cpu_flags): Add cpuserialize. + * i386-opc.tbl: Add SERIALIZE insns. + * i386-init.h: Regenerate. + * i386-tbl.h: Likewise. -2019-07-05 Kito Cheng <kito.cheng@sifive.com> +2020-03-26 Alan Modra <amodra@gmail.com> - * riscv-opc.c (riscv_insn_types): Add r4 type. + * disassemble.h (opcodes_assert): Declare. + (OPCODES_ASSERT): Define. + * disassemble.c: Don't include assert.h. Include opintl.h. + (opcodes_assert): New function. + * h8300-dis.c (bfd_h8_disassemble_init): Use OPCODES_ASSERT. + (bfd_h8_disassemble): Reduce size of data array. Correctly + calculate maxlen. Omit insn decoding when insn length exceeds + maxlen. Exit from nibble loop when looking for E, before + accessing next data byte. Move processing of E outside loop. + Replace tests of maxlen in loop with assertions. - * riscv-opc.c (riscv_insn_types): Add b and j type. +2020-03-26 Alan Modra <amodra@gmail.com> - * opcodes/riscv-opc.c (riscv_insn_types): Remove incorrect - format for sb type and correct s type. + * arc-dis.c (find_format): Init needs_limm. Simplify use of limm. -2019-07-02 Richard Sandiford <richard.sandiford@arm.com> +2020-03-25 Alan Modra <amodra@gmail.com> - * aarch64-tbl.h (aarch64_opcode): Set C_SCAN_MOVPRFX for the - SVE FMOV alias of FCPY. + * z80-dis.c (suffix): Init mybuf. -2019-07-02 Richard Sandiford <richard.sandiford@arm.com> +2020-03-22 Alan Modra <amodra@gmail.com> - * aarch64-tbl.h (aarch64_opcode_table): Add C_MAX_ELEM flags - to SVE fcvtzs, fcvtzu, scvtf and ucvtf entries. + * h8300-dis.c (bfd_h8_disassemble): Limit data[] access to that + successflly read from section. -2019-07-02 Richard Sandiford <richard.sandiford@arm.com> +2020-03-22 Alan Modra <amodra@gmail.com> - * aarch64-opc.c (verify_constraints): Skip GPRs when scanning the - registers in an instruction prefixed by MOVPRFX. + * arc-dis.c (find_format): Use ISO C string concatenation rather + than line continuation within a string. Don't access needs_limm + before testing opcode != NULL. -2019-07-01 Matthew Malcomson <matthew.malcomson@arm.com> +2020-03-22 Alan Modra <amodra@gmail.com> - * aarch64-asm.c (aarch64_encode_variant_using_iclass): Use new - sve_size_13 icode to account for variant behaviour of - pmull{t,b}. - * aarch64-dis-2.c: Regenerate. - * aarch64-dis.c (aarch64_decode_variant_using_iclass): Use new - sve_size_13 icode to account for variant behaviour of - pmull{t,b}. - * aarch64-tbl.h (OP_SVE_VVV_HD_BS): Add new qualifier. - (OP_SVE_VVV_Q_D): Add new qualifier. - (OP_SVE_VVV_QHD_DBS): Remove now unused qualifier. - (struct aarch64_opcode): Split pmull{t,b} into those requiring - AES and those not. - -2019-07-01 Jan Beulich <jbeulich@suse.com> - - * opcodes/i386-gen.c (operand_type_init): Remove - OPERAND_TYPE_VEC_IMM4 entry. - (operand_types): Remove Vec_Imm4. - * opcodes/i386-opc.h (Vec_Imm4): Delete. - (union i386_operand_type): Remove vec_imm4. - * i386-opc.tbl (vpermil2pd, vpermil2ps): Remove Vec_Imm4. - * opcodes/i386-init.h, i386-tbl.h: Re-generate. - -2019-07-01 Jan Beulich <jbeulich@suse.com> - - * i386-opc.tbl (lfence, mfence, sfence, monitor, mwait, vmcall, - vmlaunch, vmresume, vmxoff, vmfunc, xgetbv, xsetbv, swapgs, - rdtscp, clgi, invlpga, skinit, stgi, vmload, vmmcall, vmrun, - vmsave, montmul, xsha1, xsha256, xstorerng, xcryptecb, - xcryptcbc, xcryptctr, xcryptcfb, xcryptofb, xstore, clac, stac, - monitorx, mwaitx): Drop ImmExt from operand-less forms. - * i386-tbl.h: Re-generate. - -2019-07-01 Jan Beulich <jbeulich@suse.com> - - * i386-opc.tbl (and, or): Add Optimize to forms allowing two - register operands. - * i386-tbl.h: Re-generate. - -2019-07-01 Jan Beulich <jbeulich@suse.com> - - * i386-opc.tbl (C): New. - (paddb, paddw, paddd, paddq, paddsb, paddsw, paddusb, paddusw, - pand, pcmpeqb, pcmpeqw, pcmpeqd, pmaddwd, pmulhw, pmullw, - por, pxor, andps, cmpeqps, cmpeqss, cmpneqps, cmpneqss, - cmpordps, cmpordss, cmpunordps, cmpunordss, orps, pavgb, pavgw, - pmaxsw, pmaxub, pminsw, pminub, pmulhuw, xorps, andpd, cmpeqpd, - cmpeqsd, cmpneqpd, cmpneqsd, cmpordpd, cmpordsd, cmpunordpd, - cmpunordsd, orpd, xorpd, pmuludq, vandpd, vandps, vcmpeq_ospd, - vcmpeq_osps, vcmpeq_ossd, vcmpeq_osss, vcmpeqpd, vcmpeqps, - vcmpeqsd, vcmpeqss, vcmpeq_uqpd, vcmpeq_uqps, vcmpeq_uqsd, - vcmpeq_uqss, vcmpeq_uspd, vcmpeq_usps, vcmpeq_ussd, - vcmpeq_usss, vcmpfalse_ospd, vcmpfalse_osps, vcmpfalse_ossd, - vcmpfalse_osss, vcmpfalsepd, vcmpfalseps, vcmpfalsesd, - vcmpfalsess, vcmpneq_oqpd, vcmpneq_oqps, vcmpneq_oqsd, - vcmpneq_oqss, vcmpneq_ospd, vcmpneq_osps, vcmpneq_ossd, - vcmpneq_osss, vcmpneqpd, vcmpneqps, vcmpneqsd, vcmpneqss, - vcmpneq_uspd, vcmpneq_usps, vcmpneq_ussd, vcmpneq_usss, - vcmpordpd, vcmpordps, vcmpordsd, vcmpord_spd, vcmpord_sps, - vcmpordss, vcmpord_ssd, vcmpord_sss, vcmptruepd, vcmptrueps, - vcmptruesd, vcmptruess, vcmptrue_uspd, vcmptrue_usps, - vcmptrue_ussd, vcmptrue_usss, vcmpunordpd, vcmpunordps, - vcmpunordsd, vcmpunord_spd, vcmpunord_sps, vcmpunordss, - vcmpunord_ssd, vcmpunord_sss, vorpd, vorps, vpaddsb, vpaddsw, - vpaddb, vpaddd, vpaddq, vpaddw, vpaddusb, vpaddusw, vpand, - vpavgb, vpavgw, vpcmpeqb, vpcmpeqd, vpcmpeqw, vpmaddwd, - vpmaxsw, vpmaxub, vpminsw, vpminub, vpmulhuw, vpmulhw, vpmullw, - vpmuludq, vpor, vpxor, vxorpd, vxorps): Add C to VEX-encoded - flavors. - * i386-tbl.h: Re-generate. - -2019-07-01 Jan Beulich <jbeulich@suse.com> - - * i386-opc.tbl (and, or): Add Optimize to forms allowing two - register operands. - * i386-tbl.h: Re-generate. - -2019-07-01 Jan Beulich <jbeulich@suse.com> - - * i386-dis-evex-prefix.h: Use PCLMUL for vpclmulqdq. - * i386-opc.tbl (vpclmullqlqdq, vpclmulhqlqdq, vpclmullqhqdq, - vpclmulhqhqdq): Add CpuVPCLMULQDQ flavors. - * i386-tbl.h: Re-generate. - -2019-07-01 Jan Beulich <jbeulich@suse.com> - - * i386-opc.tbl (vextractps, vpextrw, vpinsrw): Remove - Disp8MemShift from register only templates. - * i386-tbl.h: Re-generate. - -2019-07-01 Jan Beulich <jbeulich@suse.com> - - * i386-dis.c (EXdScalarS, MOD_EVEX_0F10_PREFIX_1, - MOD_EVEX_0F10_PREFIX_3, MOD_EVEX_0F11_PREFIX_1, - MOD_EVEX_0F11_PREFIX_3, EVEX_W_0F10_P_1_M_0, - EVEX_W_0F10_P_1_M_1, EVEX_W_0F10_P_3_M_0, EVEX_W_0F10_P_3_M_1, - EVEX_W_0F11_P_1_M_0, EVEX_W_0F11_P_1_M_1, EVEX_W_0F11_P_3_M_0, - EVEX_W_0F11_P_3_M_1): Delete. - (EVEX_W_0F10_P_1, EVEX_W_0F10_P_3, EVEX_W_0F11_P_1, - EVEX_W_0F11_P_3): New. - * i386-dis-evex-mod.h: Remove MOD_EVEX_0F10_PREFIX_1, - MOD_EVEX_0F10_PREFIX_3, MOD_EVEX_0F11_PREFIX_1, and - MOD_EVEX_0F11_PREFIX_3 table entries. - * i386-dis-evex-prefix.h: Adjust PREFIX_EVEX_0F10 and - PREFIX_EVEX_0F11 table entries. - * i386-dis-evex-w.h: Replace EVEX_W_0F10_P_1_M_{0,1}, - EVEX_W_0F10_P_3_M_{0,1}, EVEX_W_0F11_P_1_M_{0,1}, and - EVEX_W_0F11_P_3_M_{0,1} table entries. + * ns32k-dis.c (print_insn_arg): Update comment. + (print_insn_ns32k): Reduce size of index_offset array, and + initialize, passing -1 to print_insn_arg for args that are not + an index. Don't exit arg loop early. Abort on bad arg number. -2019-07-01 Jan Beulich <jbeulich@suse.com> +2020-03-22 Alan Modra <amodra@gmail.com> - * i386-dis.c (EXdVex, EXdVexS, EXqVex, EXqVexS, XMVex): - Delete. + * s12z-dis.c (abstract_read_memory): Don't print error on EOI. + * s12z-opc.c: Formatting. + (operands_f): Return an int. + (opr_n_bytes_p1): Return -1 on reaching buffer memory limit. + (opr_n_bytes2, bfextins_n_bytes, mul_n_bytes, bm_n_bytes), + (shift_n_bytes, mov_imm_opr_n_bytes, loop_prim_n_bytes), + (exg_sex_discrim): Likewise. + (create_immediate_operand, create_bitfield_operand), + (create_register_operand_with_size, create_register_all_operand), + (create_register_all16_operand, create_simple_memory_operand), + (create_memory_operand, create_memory_auto_operand): Don't + segfault on malloc failure. + (z_ext24_decode): Return an int status, negative on fail, zero + on success. + (x_imm1, imm1_decode, trap_decode, z_opr_decode, z_opr_decode2), + (imm1234, reg_s_imm, reg_s_opr, z_imm1234_8base, z_imm1234_0base), + (z_tfr, z_reg, reg_xy, lea_reg_xys_opr, lea_reg_xys, rel_15_7), + (decode_rel_15_7, cmp_xy, sub_d6_x_y, sub_d6_y_x), + (ld_18bit_decode, mul_decode, bm_decode, bm_rel_decode), + (mov_imm_opr, ld_18bit_decode, exg_sex_decode), + (loop_primitive_decode, shift_decode, psh_pul_decode), + (bit_field_decode): Similarly. + (z_decode_signed_value, decode_signed_value): Similarly. Add arg + to return value, update callers. + (x_opr_decode_with_size): Check all reads, returning NULL on fail. + Don't segfault on NULL operand. + (decode_operation): Return OP_INVALID on first fail. + (decode_s12z): Check all reads, returning -1 on fail. + +2020-03-20 Alan Modra <amodra@gmail.com> + + * metag-dis.c (print_insn_metag): Don't ignore status from + read_memory_func. + +2020-03-20 Alan Modra <amodra@gmail.com> + + * nds32-dis.c (print_insn_nds32): Remove unnecessary casts. + Initialize parts of buffer not written when handling a possible + 2-byte insn at end of section. Don't attempt decoding of such + an insn by the 4-byte machinery. + +2020-03-20 Alan Modra <amodra@gmail.com> + + * ppc-dis.c (print_insn_powerpc): Only clear needed bytes of + partially filled buffer. Prevent lookup of 4-byte insns when + only VLE 2-byte insns are possible due to section size. Print + ".word" rather than ".long" for 2-byte leftovers. + +2020-03-17 Sergey Belyashov <sergey.belyashov@gmail.com> + + PR 25641 + * z80-dis.c: Fix disassembling ED+A4/AC/B4/BC opcodes. -2019-06-27 H.J. Lu <hongjiu.lu@intel.com> +2020-03-13 Jan Beulich <jbeulich@suse.com> - PR binutils/24719 - * i386-dis-evex-len.h: Add EVEX_LEN_0F38C6_REG_1_PREFIX_2, - EVEX_LEN_0F38C6_REG_2_PREFIX_2, EVEX_LEN_0F38C6_REG_5_PREFIX_2, - EVEX_LEN_0F38C6_REG_6_PREFIX_2, EVEX_LEN_0F38C7_R_1_P_2_W_0, - EVEX_LEN_0F38C7_R_1_P_2_W_1, EVEX_LEN_0F38C7_R_2_P_2_W_0, - EVEX_LEN_0F38C7_R_2_P_2_W_1, EVEX_LEN_0F38C7_R_5_P_2_W_0, - EVEX_LEN_0F38C7_R_5_P_2_W_1, EVEX_LEN_0F38C7_R_6_P_2_W_0 and - EVEX_LEN_0F38C7_R_6_P_2_W_1. - * i386-dis-evex-prefix.h: Update PREFIX_EVEX_0F38C6_REG_1, - PREFIX_EVEX_0F38C6_REG_2, PREFIX_EVEX_0F38C6_REG_5 and - PREFIX_EVEX_0F38C6_REG_6 entries. - * i386-dis-evex-w.h: Update EVEX_W_0F38C7_R_1_P_2, - EVEX_W_0F38C7_R_2_P_2, EVEX_W_0F38C7_R_5_P_2 and - EVEX_W_0F38C7_R_6_P_2 entries. - * i386-dis.c: Add EVEX_LEN_0F38C6_REG_1_PREFIX_2, - EVEX_LEN_0F38C6_REG_2_PREFIX_2, EVEX_LEN_0F38C6_REG_5_PREFIX_2, - EVEX_LEN_0F38C6_REG_6_PREFIX_2, EVEX_LEN_0F38C7_R_1_P_2_W_0, - EVEX_LEN_0F38C7_R_1_P_2_W_1, EVEX_LEN_0F38C7_R_2_P_2_W_0, - EVEX_LEN_0F38C7_R_2_P_2_W_1, EVEX_LEN_0F38C7_R_5_P_2_W_0, - EVEX_LEN_0F38C7_R_5_P_2_W_1, EVEX_LEN_0F38C7_R_6_P_2_W_0 and - EVEX_LEN_0F38C7_R_6_P_2_W_1 enums. - -2019-06-27 Jan Beulich <jbeulich@suse.com> - - * i386-dis.c (VEX_LEN_0F2A_P_1, VEX_LEN_0F2A_P_3, - VEX_LEN_0F2C_P_1, VEX_LEN_0F2C_P_3, VEX_LEN_0F2D_P_1, - VEX_LEN_0F2D_P_3): Delete. - (vex_len_table): Move vcvtsi2ss, vcvtsi2sd, vcvttss2si, - vcvttsd2si, vcvtss2si, and vcvtsd2si leaf entries ... - (prefix_table): ... here. + * i386-dis.c (X86_64_0D): Rename to ... + (X86_64_0E): ... this. -2019-06-27 Jan Beulich <jbeulich@suse.com> +2020-03-09 H.J. Lu <hongjiu.lu@intel.com> - * i386-dis.c (Iq): Delete. - (Id): New. - (reg_table): Use it for lwpins, lwpval, and bextr. Use Edq for - TBM insns. - (vex_len_table): Use Edq for vcvtsi2ss, vcvtsi2sd. Use Gdq for - vcvttss2si, vcvttsd2si, vcvtss2si, and vcvtsd2si. - (OP_E_memory): Also honor needindex when deciding whether an - address size prefix needs printing. - (OP_I): Remove handling of q_mode. Add handling of d_mode. - -2019-06-26 Jim Wilson <jimw@sifive.com> - - PR binutils/24739 - * riscv-dis.c (riscv_disasemble_insn): Set info->endian_code. - Set info->display_endian to info->endian_code. - -2019-06-25 Jan Beulich <jbeulich@suse.com> - - * i386-gen.c (operand_type_init): Correct OPERAND_TYPE_DEBUG - entry. Drop OPERAND_TYPE_ACC entry. Add OPERAND_TYPE_ACC8 and - OPERAND_TYPE_ACC16 entries. Adjust OPERAND_TYPE_ACC32 and - OPERAND_TYPE_ACC64 entries. - * i386-init.h: Re-generate. + * Makefile.am ($(srcdir)/i386-init.h): Also pass -P to $(CPP). + * Makefile.in: Regenerated. -2019-06-25 Jan Beulich <jbeulich@suse.com> +2020-03-09 Jan Beulich <jbeulich@suse.com> - * i386-dis.c (Edqa, dqa_mode, EVEX_W_0F2A_P_1, EVEX_W_0F7B_P_1): - Delete. - (intel_operand_size, OP_E_register, OP_E_memory): Drop handling - of dqa_mode. - * i386-dis-evex-prefix.h: Move vcvtsi2ss and vcvtusi2ss leaf - entries here. - * i386-dis-evex-w.h: Drop EVEX_W_0F2A_P_1 and EVEX_W_0F7B_P_1 - entries. Use Edq for vcvtsi2sd and vcvtusi2sd. + * i386-opc.tbl (avx_irel): New. Use is for AVX512 vpcmp* + 3-operand pseudos. + * i386-tbl.h: Re-generate. -2019-06-25 Jan Beulich <jbeulich@suse.com> +2020-03-09 Jan Beulich <jbeulich@suse.com> - * i386-dis.c (OP_I64): Forword more cases to OP_I(). Drop local - variables. + * i386-opc.tbl (xop_elem, xop_irel, xop_sign): New. Use them for XOP vpcom*, + vprot*, vpsha*, and vpshl*. + * i386-tbl.h: Re-generate. -2019-06-25 Jan Beulich <jbeulich@suse.com> +2020-03-09 Jan Beulich <jbeulich@suse.com> - * i386-dis.c (prefix_table): Use Edq for cvtsi2ss and cvtsi2sd. - Use Gdq for cvttss2si, cvttsd2si, cvtss2si, and cvtsd2si, and - movnti. - * i386-opc.tbl (movnti): Add IgnoreSize. + * i386-opc.tbl (avx_frel): New. Use it for AVX/AVX512 vcmpps, + vcmpss, vcmppd, and vcmpsd 3-operand pseudo-ops. * i386-tbl.h: Re-generate. -2019-06-25 Jan Beulich <jbeulich@suse.com> +2020-03-09 Jan Beulich <jbeulich@suse.com> - * i386-opc.tbl (and): Mark Imm8S form for optimization. + * i386-gen.c (set_bitfield): Ignore zero-length field names. + * i386-opc.tbl (sse_frel): New. Use it for SSE/SSE2 cmpps, + cmpss, cmppd, and cmpsd 2-operand pseudo-ops. * i386-tbl.h: Re-generate. -2019-06-21 H.J. Lu <hongjiu.lu@intel.com> +2020-03-09 Jan Beulich <jbeulich@suse.com> - * i386-dis-evex.h: Break into ... - * i386-dis-evex-len.h: New file. - * i386-dis-evex-mod.h: Likewise. - * i386-dis-evex-prefix.h: Likewise. - * i386-dis-evex-reg.h: Likewise. - * i386-dis-evex-w.h: Likewise. - * i386-dis.c: Include i386-dis-evex-reg.h, i386-dis-evex-prefix.h, - i386-dis-evex.h, i386-dis-evex-len.h, i386-dis-evex-w.h and - i386-dis-evex-mod.h. + * i386-gen.c (struct template_arg, struct template_instance, + struct template_param, struct template, templates, + parse_template, expand_templates): New. + (process_i386_opcodes): Various local variables moved to + expand_templates. Call parse_template and expand_templates. + * i386-opc.tbl (cc): New. Use it for Jcc, SETcc, and CMOVcc. + * i386-tbl.h: Re-generate. -2019-06-19 H.J. Lu <hongjiu.lu@intel.com> +2020-03-06 Jan Beulich <jbeulich@suse.com> - PR binutils/24700 - * i386-dis-evex.h (evex_table): Update EVEX_W_0F3819_P_2, - EVEX_W_0F381A_P_2, EVEX_W_0F381B_P_2, EVEX_W_0F385A_P_2 and - EVEX_W_0F385B_P_2. - (evex_len_table): Add EVEX_LEN_0F3819_P_2_W_0, - EVEX_LEN_0F3819_P_2_W_1, EVEX_LEN_0F381A_P_2_W_0, - EVEX_LEN_0F381A_P_2_W_1, EVEX_LEN_0F381B_P_2_W_0, - EVEX_LEN_0F381B_P_2_W_1, EVEX_LEN_0F385A_P_2_W_0, - EVEX_LEN_0F385A_P_2_W_1, EVEX_LEN_0F385B_P_2_W_0 and - EVEX_LEN_0F385B_P_2_W_1. - * i386-dis.c (EVEX_LEN_0F3819_P_2_W_0): New enum. - (EVEX_LEN_0F3819_P_2_W_1): Likewise. - (EVEX_LEN_0F381A_P_2_W_0): Likewise. - (EVEX_LEN_0F381A_P_2_W_1): Likewise. - (EVEX_LEN_0F381B_P_2_W_0): Likewise. - (EVEX_LEN_0F381B_P_2_W_1): Likewise. - (EVEX_LEN_0F385A_P_2_W_0): Likewise. - (EVEX_LEN_0F385A_P_2_W_1): Likewise. - (EVEX_LEN_0F385B_P_2_W_0): Likewise. - (EVEX_LEN_0F385B_P_2_W_1): Likewise. - -2019-06-17 H.J. Lu <hongjiu.lu@intel.com> - - PR binutils/24691 - * i386-dis-evex.h (evex_table): Update EVEX_W_0F3A23_P_2, - EVEX_W_0F3A38_P_2, EVEX_W_0F3A39_P_2, EVEX_W_0F3A3A_P_2, - EVEX_W_0F3A3B_P_2 and EVEX_W_0F3A43_P_2. - (evex_len_table): Add EVEX_LEN_0F3A23_P_2_W_0, - EVEX_LEN_0F3A23_P_2_W_1, EVEX_LEN_0F3A38_P_2_W_0, - EVEX_LEN_0F3A38_P_2_W_1, EVEX_LEN_0F3A39_P_2_W_0, - EVEX_LEN_0F3A39_P_2_W_1, EVEX_LEN_0F3A3A_P_2_W_0, - EVEX_LEN_0F3A3A_P_2_W_1, EVEX_LEN_0F3A3B_P_2_W_0, - EVEX_LEN_0F3A3B_P_2_W_1, EVEX_LEN_0F3A43_P_2_W_0 and - EVEX_LEN_0F3A43_P_2_W_1. - * i386-dis.c (EVEX_LEN_0F3A23_P_2_W_0): New enum. - (EVEX_LEN_0F3A23_P_2_W_1): Likewise. - (EVEX_LEN_0F3A38_P_2_W_0): Likewise. - (EVEX_LEN_0F3A38_P_2_W_1): Likewise. - (EVEX_LEN_0F3A39_P_2_W_0): Likewise. - (EVEX_LEN_0F3A39_P_2_W_1): Likewise. - (EVEX_LEN_0F3A3A_P_2_W_0): Likewise. - (EVEX_LEN_0F3A3A_P_2_W_1): Likewise. - (EVEX_LEN_0F3A3B_P_2_W_0): Likewise. - (EVEX_LEN_0F3A3B_P_2_W_1): Likewise. - (EVEX_LEN_0F3A43_P_2_W_0): Likewise. - (EVEX_LEN_0F3A43_P_2_W_1): Likewise. - -2019-06-14 Nick Clifton <nickc@redhat.com> - - * po/fr.po; Updated French translation. - -2019-06-13 Stafford Horne <shorne@gmail.com> - - * or1k-asm.c: Regenerated. - * or1k-desc.c: Regenerated. - * or1k-desc.h: Regenerated. - * or1k-dis.c: Regenerated. - * or1k-ibld.c: Regenerated. - * or1k-opc.c: Regenerated. - * or1k-opc.h: Regenerated. - * or1k-opinst.c: Regenerated. - -2019-06-12 Peter Bergner <bergner@linux.ibm.com> - - * ppc-opc.c (powerpc_opcodes) <ldmx>: Delete mnemonic. - -2019-06-05 H.J. Lu <hongjiu.lu@intel.com> - - PR binutils/24633 - * i386-dis-evex.h (evex_table): Update EVEX_W_0F3A18_P_2, - EVEX_W_0F3A19_P_2, EVEX_W_0F3A1A_P_2 and EVEX_W_0F3A1B_P_2. - (evex_len_table): EVEX_LEN_0F3A18_P_2_W_0, - EVEX_LEN_0F3A18_P_2_W_1, EVEX_LEN_0F3A19_P_2_W_0, - EVEX_LEN_0F3A19_P_2_W_1, EVEX_LEN_0F3A1A_P_2_W_0, - EVEX_LEN_0F3A1A_P_2_W_1, EVEX_LEN_0F3A1B_P_2_W_0, - EVEX_LEN_0F3A1B_P_2_W_1. - * i386-dis.c (EVEX_LEN_0F3A18_P_2_W_0): New enum. - (EVEX_LEN_0F3A18_P_2_W_1): Likewise. - (EVEX_LEN_0F3A19_P_2_W_0): Likewise. - (EVEX_LEN_0F3A19_P_2_W_1): Likewise. - (EVEX_LEN_0F3A1A_P_2_W_0): Likewise. - (EVEX_LEN_0F3A1A_P_2_W_1): Likewise. - (EVEX_LEN_0F3A1B_P_2_W_0): Likewise. - (EVEX_LEN_0F3A1B_P_2_W_1): Likewise. - -2019-06-04 H.J. Lu <hongjiu.lu@intel.com> - - PR binutils/24626 - * i386-dis.c (print_insn): Check for unused VEX.vvvv and - EVEX.vvvv when disassembling VEX and EVEX instructions. - (OP_VEX): Set vex.register_specifier to 0 after readding - vex.register_specifier. - (OP_Vex_2src_1): Likewise. - (OP_Vex_2src_2): Likewise. - (OP_LWP_E): Likewise. - (OP_EX_Vex): Don't check vex.register_specifier. - (OP_XMM_Vex): Likewise. + * i386-opc.tbl (vcvtdq2pd, vcvtps2pd, vcvtudq2pd, vcvtps2ph, + vcvtps2qq, vcvtps2uqq, vcvttps2qq, vcvttps2uqq): Fold separate + register and memory source templates. Replace VexW= by VexW* + where applicable. + * i386-tbl.h: Re-generate. -2019-06-04 Igor Tsimbalist <igor.v.tsimbalist@intel.com> - Lili Cui <lili.cui@intel.com> +2020-03-06 Jan Beulich <jbeulich@suse.com> - * i386-dis.c (enum): Add PREFIX_EVEX_0F3868, EVEX_W_0F3868_P_3. - * i386-dis-evex.h (evex_table): Add AVX512_VP2INTERSECT + * i386-opc.tbl: Drop IgnoreSize from various SIMD insns. Replace + VexW= by VexW* and VexVVVV=1 by just VexVVVV where applicable. + * i386-tbl.h: Re-generate. + +2020-03-06 Jan Beulich <jbeulich@suse.com> + + * i386-opc.tbl (fildll, fistpll, fisttpll): Add ATTSyntax. + * i386-tbl.h: Re-generate. + +2020-03-06 Jan Beulich <jbeulich@suse.com> + + * i386-opc.tbl (movq): Drop NoRex64 from XMM/XMM SSE2AVX variants. + (movmskps, pextrw, pinsrw, pmovmskb, movmskpd, extractps, + pextrb, pinsrb, roundsd): Drop NoRex64 and where applicable use + VexW0 on SSE2AVX variants. + (vmovq): Drop NoRex64 from XMM/XMM variants. + (vextractps, vmovmskpd, vmovmskps, vpextrb, vpextrw, vpinsrb, + vpinsrw, vpmovmskb, vroundsd, vpmovmskb): Drop NoRex64 and where + applicable use VexW0. + * i386-tbl.h: Re-generate. + +2020-03-06 Jan Beulich <jbeulich@suse.com> + + * i386-gen.c (opcode_modifiers): Remove Rex64 field. + * i386-opc.h (Rex64): Delete. + (struct i386_opcode_modifier): Remove rex64 field. + * i386-opc.tbl (crc32): Drop Rex64. + Replace Rex64 with Size64 everywhere else. + * i386-tbl.h: Re-generate. + +2020-03-06 Jan Beulich <jbeulich@suse.com> + + * i386-dis.c (OP_E_memory): Exclude recording of used address + prefix for "bnd" modes only in 64-bit mode. Don't decode 16-bit + addressed memory operands for MPX insns. + +2020-03-06 Jan Beulich <jbeulich@suse.com> + + * i386-opc.tbl (movmskps, mwait, vmread, vmwrite, invept, + invvpid, invpcid, rdfsbase, rdgsbase, wrfsbase, wrgsbase, adcx, + adox, mwaitx, rdpid, movdiri): Add IgnoreSize. + (ptwrite): Split into non-64-bit and 64-bit forms. + * i386-tbl.h: Re-generate. + +2020-03-06 Jan Beulich <jbeulich@suse.com> + + * i386-opc.tbl (tpause, umwait): Add IgnoreSize. Add 3-operand + template. + * i386-tbl.h: Re-generate. + +2020-03-04 Jan Beulich <jbeulich@suse.com> + + * i386-dis.c (PREFIX_0F01_REG_3_RM_1): New. + (prefix_table): Move vmmcall here. Add vmgexit. + (rm_table): Replace vmmcall entry by prefix_table[] escape. + * i386-gen.c (cpu_flag_init): Add CPU_SEV_ES_FLAGS entry. + (cpu_flags): Add CpuSEV_ES entry. + * i386-opc.h (CpuSEV_ES): New. + (union i386_cpu_flags): Add cpusev_es field. + * i386-opc.tbl (vmgexit): New. + * i386-init.h, i386-tbl.h: Re-generate. + +2020-03-03 H.J. Lu <hongjiu.lu@intel.com> + + * i386-gen.c (opcode_modifiers): Replace IgnoreSize/DefaultSize + with MnemonicSize. + * i386-opc.h (IGNORESIZE): New. + (DEFAULTSIZE): Likewise. + (IgnoreSize): Removed. + (DefaultSize): Likewise. + (MnemonicSize): New. + (i386_opcode_modifier): Replace ignoresize/defaultsize with + mnemonicsize. + * i386-opc.tbl (IgnoreSize): New. + (DefaultSize): Likewise. + * i386-tbl.h: Regenerated. + +2020-03-03 Sergey Belyashov <sergey.belyashov@gmail.com> + + PR 25627 + * z80-dis.c: Fix disassembly of LD IY,(HL) and D (HL),IX instructions. - * i386-gen.c (cpu_flag_init): Add CPU_AVX512_VP2INTERSECT_FLAGS, - CPU_ANY_AVX512_VP2INTERSECT_FLAGS. - (cpu_flags): Add CpuAVX512_VP2INTERSECT. - * i386-opc.h (enum): Add CpuAVX512_VP2INTERSECT. - (i386_cpu_flags): Add cpuavx512_vp2intersect. - * i386-opc.tbl: Add AVX512_VP2INTERSECT insns. + +2020-03-03 H.J. Lu <hongjiu.lu@intel.com> + + PR gas/25622 + * i386-opc.tbl: Add IgnoreSize to cvtsi2sd, cvtsi2ss, vcvtsi2sd, + vcvtsi2ss, vcvtusi2sd and vcvtusi2ss for AT&T syntax. + * i386-tbl.h: Regenerated. + +2020-02-26 Alan Modra <amodra@gmail.com> + + * aarch64-asm.c: Indent labels correctly. + * aarch64-dis.c: Likewise. + * aarch64-gen.c: Likewise. + * aarch64-opc.c: Likewise. + * alpha-dis.c: Likewise. + * i386-dis.c: Likewise. + * nds32-asm.c: Likewise. + * nfp-dis.c: Likewise. + * visium-dis.c: Likewise. + +2020-02-25 Claudiu Zissulescu <claziss@gmail.com> + + * arc-regs.h (int_vector_base): Make it available for all ARC + CPUs. + +2020-02-20 Nelson Chu <nelson.chu@sifive.com> + + * riscv-dis.c (print_insn_args): Updated since the DECLARE_CSR is + changed. + +2020-02-19 Nelson Chu <nelson.chu@sifive.com> + + * riscv-opc.c (riscv_opcodes): Convert add/addi to the compressed + c.mv/c.li if rs1 is zero. + +2020-02-17 H.J. Lu <hongjiu.lu@intel.com> + + * i386-gen.c (cpu_flag_init): Replace CpuABM with + CpuLZCNT|CpuPOPCNT. Add CpuPOPCNT to CPU_SSE4_2_FLAGS. Add + CPU_POPCNT_FLAGS. + (cpu_flags): Remove CpuABM. Add CpuPOPCNT. + * i386-opc.h (CpuABM): Removed. + (CpuPOPCNT): New. + (i386_cpu_flags): Remove cpuabm. Add cpupopcnt. + * i386-opc.tbl: Replace CpuABM|CpuSSE4_2 with CpuPOPCNT on + popcnt. Remove CpuABM from lzcnt. * i386-init.h: Regenerated. * i386-tbl.h: Likewise. -2019-06-04 Xuepeng Guo <xuepeng.guo@intel.com> - Lili Cui <lili.cui@intel.com> +2020-02-17 Jan Beulich <jbeulich@suse.com> - * doc/c-i386.texi: Document enqcmd. - * testsuite/gas/i386/enqcmd-intel.d: New file. - * testsuite/gas/i386/enqcmd-inval.l: Likewise. - * testsuite/gas/i386/enqcmd-inval.s: Likewise. - * testsuite/gas/i386/enqcmd.d: Likewise. - * testsuite/gas/i386/enqcmd.s: Likewise. - * testsuite/gas/i386/x86-64-enqcmd-intel.d: Likewise. - * testsuite/gas/i386/x86-64-enqcmd-inval.l: Likewise. - * testsuite/gas/i386/x86-64-enqcmd-inval.s: Likewise. - * testsuite/gas/i386/x86-64-enqcmd.d: Likewise. - * testsuite/gas/i386/x86-64-enqcmd.s: Likewise. - * testsuite/gas/i386/i386.exp: Run enqcmd-intel, enqcmd-inval, - enqcmd, x86-64-enqcmd-intel, x86-64-enqcmd-inval, - and x86-64-enqcmd. - -2019-06-04 Alan Hayward <alan.hayward@arm.com> - - * arm-dis.c (is_mve_unpredictable): Remove spurious paranthesis. - -2019-06-03 Alan Modra <amodra@gmail.com> - - * ppc-dis.c (prefix_opcd_indices): Correct size. - -2019-05-28 H.J. Lu <hongjiu.lu@intel.com> - - PR gas/24625 - * i386-opc.tbl: Add CheckRegSize to AVX512_BF16 instructions with - Disp8ShiftVL. - * i386-tbl.h: Regenerated. + * i386-opc.tbl (vcvtsi2sd, vcvtsi2ss, vcvtusi2sd, vcvtusi2ss): + Fold CpuNo64 and Cpu64 templates. Use VexLIG/EVexLIG and VexW0/ + VexW1 instead of open-coding them. + * i386-tbl.h: Re-generate. -2019-05-24 Alan Modra <amodra@gmail.com> +2020-02-17 Jan Beulich <jbeulich@suse.com> - * po/POTFILES.in: Regenerate. + * i386-opc.tbl (AddrPrefixOpReg): Define. + (monitor, invlpga, vmload, vmrun, vmsave, clzero, monitorx, + umonitor, movdir64b, enqcmd, enqcmds): Fold Cpu64 and CpuNo64 + templates. Drop NoRex64. + * i386-tbl.h: Re-generate. -2019-05-24 Peter Bergner <bergner@linux.ibm.com> - Alan Modra <amodra@gmail.com> +2020-02-17 Jan Beulich <jbeulich@suse.com> - * ppc-opc.c (insert_d34, extract_d34, insert_nsi34, extract_nsi34), - (insert_pcrel, extract_pcrel, extract_pcrel0): New functions. - (extract_esync, extract_raq, extract_tbr, extract_sxl): Comment. - (powerpc_operands <D34, SI34, NSI34, PRA0, PRAQ, PCREL, PCREL0, - XTOP>): Define and add entries. - (P8LS, PMLS, P_D_MASK, P_DRAPCREL_MASK): Define. - (prefix_opcodes): Add pli, paddi, pla, psubi, plwz, plbz, pstw, - pstb, plhz, plha, psth, plfs, plfd, pstfs, pstfd, plq, plxsd, - plxssp, pld, plwa, pstxsd, pstxssp, pstxv, pstd, and pstq. - -2019-05-24 Peter Bergner <bergner@linux.ibm.com> - Alan Modra <amodra@gmail.com> - - * ppc-dis.c (ppc_opts): Add "future" entry. - (PREFIX_OPCD_SEGS): Define. - (prefix_opcd_indices): New array. - (disassemble_init_powerpc): Initialize prefix_opcd_indices. - (lookup_prefix): New function. - (print_insn_powerpc): Handle 64-bit prefix instructions. - * ppc-opc.c (PREFIX_OP, PREFIX_FORM, SUFFIX_MASK, PREFIX_MASK), - (PMRR, POWERXX): Define. - (prefix_opcodes): New instruction table. - (prefix_num_opcodes): New constant. - -2019-05-23 Jose E. Marchesi <jose.marchesi@oracle.com> - - * configure.ac (SHARED_DEPENDENCIES): Add case for bfd_bpf_arch. - * configure: Regenerated. - * Makefile.am: Add rules for the files generated from cpu/bpf.cpu - and cpu/bpf.opc. - (HFILES): Add bpf-desc.h and bpf-opc.h. - (TARGET_LIBOPCODES_CFILES): Add bpf-asm.c, bpf-desc.c, bpf-dis.c, - bpf-ibld.c and bpf-opc.c. - (BPF_DEPS): Define. - * Makefile.in: Regenerated. - * disassemble.c (ARCH_bpf): Define. - (disassembler): Add case for bfd_arch_bpf. - (disassemble_init_for_target): Likewise. - (enum epbf_isa_attr): Define. - * disassemble.h: extern print_insn_bpf. - * bpf-asm.c: Generated. - * bpf-opc.h: Likewise. - * bpf-opc.c: Likewise. - * bpf-ibld.c: Likewise. - * bpf-dis.c: Likewise. - * bpf-desc.h: Likewise. - * bpf-desc.c: Likewise. + PR gas/6518 + * i386-opc.tbl (vcvtpd2dq, vcvtpd2ps, vcvttpd2dq, vcvtpd2udq, + vcvttpd2udq, vcvtqq2ps, vcvtuqq2ps): Split XMM/YMM source forms + into Intel syntax instance (with Unpsecified) and AT&T one + (without). + (vcvtneps2bf16): Likewise, along with folding the two so far + separate ones. + * i386-tbl.h: Re-generate. -2019-05-21 Sudakshina Das <sudi.das@arm.com> +2020-02-16 H.J. Lu <hongjiu.lu@intel.com> - * arm-dis.c (coprocessor_opcodes): New instructions for VMRS - and VMSR with the new operands. + * i386-gen.c (cpu_flag_init): Remove CPU_ANY_SSE3_FLAGS from + CPU_ANY_SSE4A_FLAGS. -2019-05-21 Sudakshina Das <sudi.das@arm.com> +2020-02-17 Alan Modra <amodra@gmail.com> - * arm-dis.c (enum mve_instructions): New enum - for csinc, csinv, csneg, csel, cset, csetm, cinv, cinv - and cneg. - (mve_opcodes): New instructions as above. - (is_mve_encoding_conflict): Add cases for csinc, csinv, - csneg and csel. - (print_insn_mve): Accept new %<bitfield>c and %<bitfield>C. + * i386-gen.c (cpu_flag_init): Correct last change. -2019-05-21 Sudakshina Das <sudi.das@arm.com> +2020-02-16 H.J. Lu <hongjiu.lu@intel.com> - * arm-dis.c (emun mve_instructions): Updated for new instructions. - (mve_opcodes): New instructions for asrl, lsll, lsrl, sqrshrl, - sqrshr, sqshl, sqshll, srshr, srshrl, uqrshll, uqrshl, uqshll, - uqshl, urshrl and urshr. - (is_mve_okay_in_it): Add new instructions to TRUE list. - (is_mve_unpredictable): Add cases for UNPRED_R13 and UNPRED_R15. - (print_insn_mve): Updated to accept new %j, - %<bitfield>m and %<bitfield>n patterns. + * i386-gen.c (cpu_flag_init): Add CPU_ANY_SSE4A_FLAGS. Remove + CPU_ANY_SSE4_FLAGS. -2019-05-21 Faraz Shahbazker <fshahbazker@wavecomp.com> +2020-02-14 H.J. Lu <hongjiu.lu@intel.com> - * mips-opc.c (mips_builtin_opcodes): Change source register - constraint for DAUI. + * i386-opc.tbl (movsx): Remove Intel syntax comments. + (movzx): Likewise. -2019-05-20 Nick Clifton <nickc@redhat.com> +2020-02-14 Jan Beulich <jbeulich@suse.com> - * po/fr.po: Updated French translation. + PR gas/25438 + * i386-opc.tbl (movsx): Fold patterns. Also allow Reg32 as + destination for Cpu64-only variant. + (movzx): Fold patterns. + * i386-tbl.h: Re-generate. -2019-05-16 Andre Vieira <andre.simoesdiasvieira@arm.com> - Michael Collison <michael.collison@arm.com> +2020-02-13 Jan Beulich <jbeulich@suse.com> - * arm-dis.c (thumb32_opcodes): Add new instructions. - (enum mve_instructions): Likewise. - (enum mve_undefined): Add new reasons. - (is_mve_encoding_conflict): Handle new instructions. - (is_mve_undefined): Likewise. - (is_mve_unpredictable): Likewise. - (print_mve_undefined): Likewise. - (print_mve_size): Likewise. - -2019-05-16 Andre Vieira <andre.simoesdiasvieira@arm.com> - Michael Collison <michael.collison@arm.com> - - * arm-dis.c (thumb32_opcodes): Add new instructions. - (enum mve_instructions): Likewise. - (is_mve_encoding_conflict): Handle new instructions. - (is_mve_undefined): Likewise. - (is_mve_unpredictable): Likewise. - (print_mve_size): Likewise. - -2019-05-16 Andre Vieira <andre.simoesdiasvieira@arm.com> - Michael Collison <michael.collison@arm.com> - - * arm-dis.c (thumb32_opcodes): Add new instructions. - (enum mve_instructions): Likewise. - (is_mve_encoding_conflict): Likewise. - (is_mve_unpredictable): Likewise. - (print_mve_size): Likewise. - -2019-05-16 Andre Vieira <andre.simoesdiasvieira@arm.com> - Michael Collison <michael.collison@arm.com> - - * arm-dis.c (thumb32_opcodes): Add new instructions. - (enum mve_instructions): Likewise. - (is_mve_encoding_conflict): Handle new instructions. - (is_mve_undefined): Likewise. - (is_mve_unpredictable): Likewise. - (print_mve_size): Likewise. - -2019-05-16 Andre Vieira <andre.simoesdiasvieira@arm.com> - Michael Collison <michael.collison@arm.com> - - * arm-dis.c (thumb32_opcodes): Add new instructions. - (enum mve_instructions): Likewise. - (is_mve_encoding_conflict): Handle new instructions. - (is_mve_undefined): Likewise. - (is_mve_unpredictable): Likewise. - (print_mve_size): Likewise. - (print_insn_mve): Likewise. - -2019-05-16 Andre Vieira <andre.simoesdiasvieira@arm.com> - Michael Collison <michael.collison@arm.com> - - * arm-dis.c (thumb32_opcodes): Add new instructions. - (print_insn_thumb32): Handle new instructions. - -2019-05-16 Andre Vieira <andre.simoesdiasvieira@arm.com> - Michael Collison <michael.collison@arm.com> - - * arm-dis.c (enum mve_instructions): Add new instructions. - (enum mve_undefined): Add new reasons. - (is_mve_encoding_conflict): Handle new instructions. - (is_mve_undefined): Likewise. - (is_mve_unpredictable): Likewise. - (print_mve_undefined): Likewise. - (print_mve_size): Likewise. - (print_mve_shift_n): Likewise. - (print_insn_mve): Likewise. - -2019-05-16 Andre Vieira <andre.simoesdiasvieira@arm.com> - Michael Collison <michael.collison@arm.com> - - * arm-dis.c (enum mve_instructions): Add new instructions. - (is_mve_encoding_conflict): Handle new instructions. - (is_mve_unpredictable): Likewise. - (print_mve_rotate): Likewise. - (print_mve_size): Likewise. - (print_insn_mve): Likewise. - -2019-05-16 Andre Vieira <andre.simoesdiasvieira@arm.com> - Michael Collison <michael.collison@arm.com> - - * arm-dis.c (enum mve_instructions): Add new instructions. - (is_mve_encoding_conflict): Handle new instructions. - (is_mve_unpredictable): Likewise. - (print_mve_size): Likewise. - (print_insn_mve): Likewise. - -2019-05-16 Andre Vieira <andre.simoesdiasvieira@arm.com> - Michael Collison <michael.collison@arm.com> - - * arm-dis.c (enum mve_instructions): Add new instructions. - (enum mve_undefined): Add new reasons. - (is_mve_encoding_conflict): Handle new instructions. - (is_mve_undefined): Likewise. - (is_mve_unpredictable): Likewise. - (print_mve_undefined): Likewise. - (print_mve_size): Likewise. - (print_insn_mve): Likewise. - -2019-05-16 Andre Vieira <andre.simoesdiasvieira@arm.com> - Michael Collison <michael.collison@arm.com> - - * arm-dis.c (enum mve_instructions): Add new instructions. - (is_mve_encoding_conflict): Handle new instructions. - (is_mve_undefined): Likewise. - (is_mve_unpredictable): Likewise. - (print_mve_size): Likewise. - (print_insn_mve): Likewise. - -2019-05-16 Andre Vieira <andre.simoesdiasvieira@arm.com> - Michael Collison <michael.collison@arm.com> - - * arm-dis.c (enum mve_instructions): Add new instructions. - (enum mve_unpredictable): Add new reasons. - (enum mve_undefined): Likewise. - (is_mve_okay_in_it): Handle new isntructions. - (is_mve_encoding_conflict): Likewise. - (is_mve_undefined): Likewise. - (is_mve_unpredictable): Likewise. - (print_mve_vmov_index): Likewise. - (print_simd_imm8): Likewise. - (print_mve_undefined): Likewise. - (print_mve_unpredictable): Likewise. - (print_mve_size): Likewise. - (print_insn_mve): Likewise. - -2019-05-16 Andre Vieira <andre.simoesdiasvieira@arm.com> - Michael Collison <michael.collison@arm.com> - - * arm-dis.c (enum mve_instructions): Add new instructions. - (enum mve_unpredictable): Add new reasons. - (enum mve_undefined): Likewise. - (is_mve_encoding_conflict): Handle new instructions. - (is_mve_undefined): Likewise. - (is_mve_unpredictable): Likewise. - (print_mve_undefined): Likewise. - (print_mve_unpredictable): Likewise. - (print_mve_rounding_mode): Likewise. - (print_mve_vcvt_size): Likewise. - (print_mve_size): Likewise. - (print_insn_mve): Likewise. - -2019-05-16 Andre Vieira <andre.simoesdiasvieira@arm.com> - Michael Collison <michael.collison@arm.com> - - * arm-dis.c (enum mve_instructions): Add new instructions. - (enum mve_unpredictable): Add new reasons. - (enum mve_undefined): Likewise. - (is_mve_undefined): Handle new instructions. - (is_mve_unpredictable): Likewise. - (print_mve_undefined): Likewise. - (print_mve_unpredictable): Likewise. - (print_mve_size): Likewise. - (print_insn_mve): Likewise. - -2019-05-16 Andre Vieira <andre.simoesdiasvieira@arm.com> - Michael Collison <michael.collison@arm.com> - - * arm-dis.c (enum mve_instructions): Add new instructions. - (enum mve_undefined): Add new reasons. - (insns): Add new instructions. - (is_mve_encoding_conflict): - (print_mve_vld_str_addr): New print function. - (is_mve_undefined): Handle new instructions. - (is_mve_unpredictable): Likewise. - (print_mve_undefined): Likewise. - (print_mve_size): Likewise. - (print_insn_coprocessor_1): Handle MVE VLDR, VSTR instructions. - (print_insn_mve): Handle new operands. - -2019-05-16 Andre Vieira <andre.simoesdiasvieira@arm.com> - Michael Collison <michael.collison@arm.com> - - * arm-dis.c (enum mve_instructions): Add new instructions. - (enum mve_unpredictable): Add new reasons. - (is_mve_encoding_conflict): Handle new instructions. - (is_mve_unpredictable): Likewise. - (mve_opcodes): Add new instructions. - (print_mve_unpredictable): Handle new reasons. - (print_mve_register_blocks): New print function. - (print_mve_size): Handle new instructions. - (print_insn_mve): Likewise. - -2019-05-16 Andre Vieira <andre.simoesdiasvieira@arm.com> - Michael Collison <michael.collison@arm.com> - - * arm-dis.c (enum mve_instructions): Add new instructions. - (enum mve_unpredictable): Add new reasons. - (enum mve_undefined): Likewise. - (is_mve_encoding_conflict): Handle new instructions. - (is_mve_undefined): Likewise. - (is_mve_unpredictable): Likewise. - (coprocessor_opcodes): Move NEON VDUP from here... - (neon_opcodes): ... to here. - (mve_opcodes): Add new instructions. - (print_mve_undefined): Handle new reasons. - (print_mve_unpredictable): Likewise. - (print_mve_size): Handle new instructions. - (print_insn_neon): Handle vdup. - (print_insn_mve): Handle new operands. - -2019-05-16 Andre Vieira <andre.simoesdiasvieira@arm.com> - Michael Collison <michael.collison@arm.com> - - * arm-dis.c (enum mve_instructions): Add new instructions. - (enum mve_unpredictable): Add new values. - (mve_opcodes): Add new instructions. - (vec_condnames): New array with vector conditions. - (mve_predicatenames): New array with predicate suffixes. - (mve_vec_sizename): New array with vector sizes. - (enum vpt_pred_state): New enum with vector predication states. - (struct vpt_block): New struct type for vpt blocks. - (vpt_block_state): Global struct to keep track of state. - (mve_extract_pred_mask): New helper function. - (num_instructions_vpt_block): Likewise. - (mark_outside_vpt_block): Likewise. - (mark_inside_vpt_block): Likewise. - (invert_next_predicate_state): Likewise. - (update_next_predicate_state): Likewise. - (update_vpt_block_state): Likewise. - (is_vpt_instruction): Likewise. - (is_mve_encoding_conflict): Add entries for new instructions. - (is_mve_unpredictable): Likewise. - (print_mve_unpredictable): Handle new cases. - (print_instruction_predicate): Likewise. - (print_mve_size): New function. - (print_vec_condition): New function. - (print_insn_mve): Handle vpt blocks and new print operands. - -2019-05-16 Andre Vieira <andre.simoesdiasvieira@arm.com> - - * arm-dis.c (print_insn_coprocessor_1): Disable the use of coprocessors - 8, 14 and 15 for Armv8.1-M Mainline. - -2019-05-16 Andre Vieira <andre.simoesdiasvieira@arm.com> - Michael Collison <michael.collison@arm.com> - - * arm-dis.c (enum mve_instructions): New enum. - (enum mve_unpredictable): Likewise. - (enum mve_undefined): Likewise. - (struct mopcode32): New struct. - (is_mve_okay_in_it): New function. - (is_mve_architecture): Likewise. - (arm_decode_field): Likewise. - (arm_decode_field_multiple): Likewise. - (is_mve_encoding_conflict): Likewise. - (is_mve_undefined): Likewise. - (is_mve_unpredictable): Likewise. - (print_mve_undefined): Likewise. - (print_mve_unpredictable): Likewise. - (print_insn_coprocessor_1): Use arm_decode_field_multiple. - (print_insn_mve): New function. - (print_insn_thumb32): Handle MVE architecture. - (select_arm_features): Force thumb for Armv8.1-m Mainline. - -2019-05-10 Nick Clifton <nickc@redhat.com> - - PR 24538 - * ia64-opc.c (ia64_find_matching_opcode): Check for reaching the - end of the table prematurely. - -2019-05-10 Faraz Shahbazker <fshahbazker@wavecomp.com> - - * mips-opc.c (mips_opcodes): Enable ADD, SUB, DADD and DSUB - macros for R6. + * i386-gen.c (cpu_flag_init): Move CpuSSE4a from + CPU_ANY_SSE_FLAGS entry to CPU_ANY_SSE3_FLAGS one. Add + CPU_ANY_SSE4_FLAGS entry. + * i386-init.h: Re-generate. -2019-05-11 Alan Modra <amodra@gmail.com> +2020-02-12 Jan Beulich <jbeulich@suse.com> - * ppc-dis.c (print_insn_powerpc) Don't skip optional operands - when -Mraw is in effect. + * i386-opc.tbl (vfpclasspd, vfpclassps): Add Intel sytax form + with Unspecified, making the present one AT&T syntax only. + * i386-tbl.h: Re-generate. -2019-05-09 Matthew Malcomson <matthew.malcomson@arm.com> +2020-02-12 Jan Beulich <jbeulich@suse.com> - * aarch64-dis-2.c: Regenerate. - * aarch64-tbl.h (OP_SVE_BBU): New variant set. - (OP_SVE_BBB): New variant set. - (OP_SVE_DDDD): New variant set. - (OP_SVE_HHH): New variant set. - (OP_SVE_HHHU): New variant set. - (OP_SVE_SSS): New variant set. - (OP_SVE_SSSU): New variant set. - (OP_SVE_SHH): New variant set. - (OP_SVE_SBBU): New variant set. - (OP_SVE_DSS): New variant set. - (OP_SVE_DHHU): New variant set. - (OP_SVE_VMV_HSD_BHS): New variant set. - (OP_SVE_VVU_HSD_BHS): New variant set. - (OP_SVE_VVVU_SD_BH): New variant set. - (OP_SVE_VVVU_BHSD): New variant set. - (OP_SVE_VVV_QHD_DBS): New variant set. - (OP_SVE_VVV_HSD_BHS): New variant set. - (OP_SVE_VVV_HSD_BHS2): New variant set. - (OP_SVE_VVV_BHS_HSD): New variant set. - (OP_SVE_VV_BHS_HSD): New variant set. - (OP_SVE_VVV_SD): New variant set. - (OP_SVE_VVU_BHS_HSD): New variant set. - (OP_SVE_VZVV_SD): New variant set. - (OP_SVE_VZVV_BH): New variant set. - (OP_SVE_VZV_SD): New variant set. - (aarch64_opcode_table): Add sve2 instructions. + * i386-opc.tbl (jmp): Fold CpuNo64 and Amd64 direct variants. + * i386-tbl.h: Re-generate. -2019-05-09 Matthew Malcomson <matthew.malcomson@arm.com> +2020-02-12 Jan Beulich <jbeulich@suse.com> - * aarch64-asm-2.c: Regenerated. - * aarch64-dis-2.c: Regenerated. - * aarch64-opc-2.c: Regenerated. - * aarch64-opc.c (operand_general_constraint_met_p): Constraint checking - for SVE_SHLIMM_UNPRED_22. - (aarch64_print_operand): Add printing for SVE_SHLIMM_UNPRED_22. - * aarch64-tbl.h (AARCH64_OPERANDS): Use new SVE_SHLIMM_UNPRED_22 - operand. - -2019-05-09 Matthew Malcomson <matthew.malcomson@arm.com> - - * aarch64-asm.c (aarch64_encode_variant_using_iclass): Handle - sve_size_tsz_bhs iclass encode. - * aarch64-dis.c (aarch64_decode_variant_using_iclass): Handle - sve_size_tsz_bhs iclass decode. + PR gas/24546 + * i386-dis.c (putop): Handle REX.W in '^' case for Intel64 mode. + * i386-opc.tbl (lfs, lgs, lss, lcall, ljmp): Split into + Amd64 and Intel64 templates. + (call, jmp): Likewise for far indirect variants. Dro + Unspecified. + * i386-tbl.h: Re-generate. -2019-05-09 Matthew Malcomson <matthew.malcomson@arm.com> +2020-02-11 Jan Beulich <jbeulich@suse.com> - * aarch64-asm-2.c: Regenerated. - * aarch64-dis-2.c: Regenerated. - * aarch64-opc-2.c: Regenerated. - * aarch64-opc.c (operand_general_constraint_met_p): Constraint checking - for SVE_Zm4_11_INDEX. - (aarch64_print_operand): Add printing for SVE_Zm4_11_INDEX. - (fields): Handle SVE_i2h field. - * aarch64-opc.h (enum aarch64_field_kind): New SVE_i2h field. - * aarch64-tbl.h (AARCH64_OPERANDS): Use new SVE_Zm4_11_INDEX operand. - -2019-05-09 Matthew Malcomson <matthew.malcomson@arm.com> - - * aarch64-asm.c (aarch64_encode_variant_using_iclass): Handle - sve_shift_tsz_bhsd iclass encode. - * aarch64-dis.c (aarch64_decode_variant_using_iclass): Handle - sve_shift_tsz_bhsd iclass decode. + * i386-gen.c (opcode_modifiers): Remove ShortForm entry. + * i386-opc.h (ShortForm): Delete. + (struct i386_opcode_modifier): Remove shortform field. + * i386-opc.tbl (mov, movabs, push, pop, xchg, inc, dec, fld, + fst, fstp, fxch, fcom, fcomp, fucom, fucomp, fadd, faddp, fsub, + fsubp, fsubr, fsubrp, fmul, fmulp, fdiv, fdivp, fdivr, fdivrp, + ffreep, bswap, fcmov*, fcomi, fcomip, fucomi, fucomip, movq): + Drop ShortForm. + * i386-tbl.h: Re-generate. -2019-05-09 Matthew Malcomson <matthew.malcomson@arm.com> +2020-02-11 Jan Beulich <jbeulich@suse.com> - * aarch64-asm-2.c: Regenerated. - * aarch64-dis-2.c: Regenerated. - * aarch64-opc-2.c: Regenerated. - * aarch64-asm.c (aarch64_ins_sve_shrimm): - (aarch64_encode_variant_using_iclass): Handle - sve_shift_tsz_hsd iclass encode. - * aarch64-dis.c (aarch64_decode_variant_using_iclass): Handle - sve_shift_tsz_hsd iclass decode. - * aarch64-opc.c (operand_general_constraint_met_p): Constraint checking - for SVE_SHRIMM_UNPRED_22. - (aarch64_print_operand): Add printing for SVE_SHRIMM_UNPRED_22. - * aarch64-tbl.h (AARCH64_OPERANDS): Use new SVE_SHRIMM_UNPRED_22 - operand. - -2019-05-09 Matthew Malcomson <matthew.malcomson@arm.com> - - * aarch64-asm.c (aarch64_encode_variant_using_iclass): Handle - sve_size_013 iclass encode. - * aarch64-dis.c (aarch64_decode_variant_using_iclass): Handle - sve_size_013 iclass decode. - -2019-05-09 Matthew Malcomson <matthew.malcomson@arm.com> - - * aarch64-asm.c (aarch64_encode_variant_using_iclass): Handle - sve_size_bh iclass encode. - * aarch64-dis.c (aarch64_decode_variant_using_iclass): Handle - sve_size_bh iclass decode. - -2019-05-09 Matthew Malcomson <matthew.malcomson@arm.com> - - * aarch64-asm.c (aarch64_encode_variant_using_iclass): Handle - sve_size_sd2 iclass encode. - * aarch64-dis.c (aarch64_decode_variant_using_iclass): Handle - sve_size_sd2 iclass decode. - * aarch64-opc.c (fields): Handle SVE_sz2 field. - * aarch64-opc.h (enum aarch64_field_kind): New SVE_sz2 field. + * i386-opc.tbl (fcomi, fucomi, fcomip, fcompi, fucomip, + fucompi): Drop ShortForm from operand-less templates. + * i386-tbl.h: Re-generate. -2019-05-09 Matthew Malcomson <matthew.malcomson@arm.com> +2020-02-11 Alan Modra <amodra@gmail.com> - * aarch64-asm-2.c: Regenerated. - * aarch64-dis-2.c: Regenerated. - * aarch64-opc-2.c: Regenerated. - * aarch64-opc.c (operand_general_constraint_met_p): Constraint checking - for SVE_ADDR_ZX. - (aarch64_print_operand): Add printing for SVE_ADDR_ZX. - * aarch64-tbl.h (AARCH64_OPERANDS): Use new SVE_ADDR_ZX operand. + * cgen-ibld.in (extract_normal): Set *valuep on all return paths. + * bpf-ibld.c, * epiphany-ibld.c, * fr30-ibld.c, * frv-ibld.c, + * ip2k-ibld.c, * iq2000-ibld.c, * lm32-ibld.c, * m32c-ibld.c, + * m32r-ibld.c, * mep-ibld.c, * mt-ibld.c, * or1k-ibld.c, + * xc16x-ibld.c, * xstormy16-ibld.c: Regenerate. + +2020-02-10 Matthew Malcomson <matthew.malcomson@arm.com> + + * arm-dis.c (print_insn_cde): Define 'V' parse character. + (cde_opcodes): Add VCX* instructions. + +2020-02-10 Stam Markianos-Wright <stam.markianos-wright@arm.com> + Matthew Malcomson <matthew.malcomson@arm.com> + + * arm-dis.c (struct cdeopcode32): New. + (CDE_OPCODE): New macro. + (cde_opcodes): New disassembly table. + (regnames): New option to table. + (cde_coprocs): New global variable. + (print_insn_cde): New + (print_insn_thumb32): Use print_insn_cde. + (parse_arm_disassembler_options): Parse coprocN args. + +2020-02-10 H.J. Lu <hongjiu.lu@intel.com> + + PR gas/25516 + * i386-gen.c (opcode_modifiers): Replace AMD64 and Intel64 + with ISA64. + * i386-opc.h (AMD64): Removed. + (Intel64): Likewose. + (AMD64): New. + (INTEL64): Likewise. + (INTEL64ONLY): Likewise. + (i386_opcode_modifier): Replace amd64 and intel64 with isa64. + * i386-opc.tbl (Amd64): New. + (Intel64): Likewise. + (Intel64Only): Likewise. + Replace AMD64 with Amd64. Update sysenter/sysenter with + Cpu64 and Intel64Only. Remove AMD64 from sysenter/sysenter. + * i386-tbl.h: Regenerated. -2019-05-09 Matthew Malcomson <matthew.malcomson@arm.com> +2020-02-07 Sergey Belyashov <sergey.belyashov@gmail.com> - * aarch64-asm-2.c: Regenerated. - * aarch64-dis-2.c: Regenerated. - * aarch64-opc-2.c: Regenerated. - * aarch64-opc.c (operand_general_constraint_met_p): Constraint checking - for SVE_Zm3_11_INDEX. - (aarch64_print_operand): Add printing for SVE_Zm3_11_INDEX. - (fields): Handle SVE_i3l and SVE_i3h2 fields. - * aarch64-opc.h (enum aarch64_field_kind): New SVE_i3l and SVE_i3h2 - fields. - * aarch64-tbl.h (AARCH64_OPERANDS): Use new SVE_Zm3_11_INDEX operand. - -2019-05-09 Matthew Malcomson <matthew.malcomson@arm.com> - - * aarch64-asm.c (aarch64_encode_variant_using_iclass): Handle - sve_size_hsd2 iclass encode. - * aarch64-dis.c (aarch64_decode_variant_using_iclass): Handle - sve_size_hsd2 iclass decode. - * aarch64-opc.c (fields): Handle SVE_size field. - * aarch64-opc.h (enum aarch64_field_kind): New SVE_size field. + PR 25469 + * z80-dis.c: Add support for GBZ80 opcodes. -2019-05-09 Matthew Malcomson <matthew.malcomson@arm.com> +2020-02-04 Alan Modra <amodra@gmail.com> - * aarch64-asm-2.c: Regenerated. - * aarch64-dis-2.c: Regenerated. - * aarch64-opc-2.c: Regenerated. - * aarch64-opc.c (operand_general_constraint_met_p): Constraint checking - for SVE_IMM_ROT3. - (aarch64_print_operand): Add printing for SVE_IMM_ROT3. - (fields): Handle SVE_rot3 field. - * aarch64-opc.h (enum aarch64_field_kind): New SVE_rot3 field. - * aarch64-tbl.h (AARCH64_OPERANDS): Use new SVE_IMM_ROT3 operand. + * d30v-dis.c (print_insn): Make "val" and "opnum" unsigned. -2019-05-09 Matthew Malcomson <matthew.malcomson@arm.com> +2020-02-03 Alan Modra <amodra@gmail.com> - * aarch64-opc.c (verify_constraints): Check for movprfx for sve2 - instructions. + * m32c-ibld.c: Regenerate. -2019-05-09 Matthew Malcomson <matthew.malcomson@arm.com> +2020-02-01 Alan Modra <amodra@gmail.com> - * aarch64-tbl.h - (aarch64_feature_sve2, aarch64_feature_sve2aes, - aarch64_feature_sve2sha3, aarch64_feature_sve2sm4, - aarch64_feature_sve2bitperm): New feature sets. - (SVE2, SVE2_AES, SVE2_SHA3, SVE2_SM4, SVE2_BITPERM): New macros - for feature set addresses. - (SVE2_INSN, SVE2_INSNC, SVE2AES_INSN, SVE2SHA3_INSN, - SVE2SM4_INSN, SVE2SM4_INSNC, SVE2BITPERM_INSN): New macros. - -2019-05-06 Andrew Bennett <andrew.bennett@imgtec.com> - Faraz Shahbazker <fshahbazker@wavecomp.com> - - * mips-dis.c (mips_calculate_combination_ases): Add ISA - argument and set ASE_EVA_R6 appropriately. - (set_default_mips_dis_options): Pass ISA to above. - (parse_mips_dis_option): Likewise. - * mips-opc.c (EVAR6): New macro. - (mips_builtin_opcodes): Add llwpe, scwpe. + * frv-ibld.c: Regenerate. -2019-05-01 Sudakshina Das <sudi.das@arm.com> +2020-01-31 Jan Beulich <jbeulich@suse.com> - * aarch64-asm-2.c: Regenerated. - * aarch64-dis-2.c: Regenerated. - * aarch64-opc-2.c: Regenerated. - * aarch64-opc.c (operand_general_constraint_met_p): Add case for - AARCH64_OPND_TME_UIMM16. - (aarch64_print_operand): Likewise. - * aarch64-tbl.h (QL_IMM_NIL): New. - (TME): New. - (_TME_INSN): New. - (struct aarch64_opcode): Add tstart, tcommit, ttest and tcancel. + * i386-dis.c (EXxmm_mdq, xmm_mdq_mode): Delete. + (intel_operand_size, OP_EX): Drop xmm_mdq_mode case label. + (OP_E_memory): Replace xmm_mdq_mode case label by + vex_scalar_w_dq_mode one. + * i386-dis-evex-prefix.h: Replace EXxmm_mdq by EXVexWdqScalar. -2019-04-29 John Darrington <john@darrington.wattle.id.au> +2020-01-31 Jan Beulich <jbeulich@suse.com> - * s12z-opc.c (shift_discrim): Return OP_INVALID when reading fails. + * i386-dis.c (EXVexWdq, vex_w_dq_mode): Delete. + (vex_vsib_d_w_dq_mode, vex_vsib_q_w_dq_mode, + vex_scalar_w_dq_mode): Don't refer to vex_w_dq_mode in comments. + (intel_operand_size): Drop vex_w_dq_mode case label. -2019-04-26 Andrew Bennett <andrew.bennett@imgtec.com> - Faraz Shahbazker <fshahbazker@wavecomp.com> +2020-01-31 Richard Sandiford <richard.sandiford@arm.com> - * mips-opc.c (mips_builtin_opcodes): Add llwp, lldp, scwp, scdp. + * aarch64-tbl.h (aarch64_opcode): Set C_MAX_ELEM for SVE bfcvt. + Remove C_SCAN_MOVPRFX for SVE bfcvtnt. -2019-04-24 John Darrington <john@darrington.wattle.id.au> +2020-01-30 Alan Modra <amodra@gmail.com> - * s12z-opc.h: Add extern "C" bracketing to help - users who wish to use this interface in c++ code. + * m32c-ibld.c: Regenerate. -2019-04-24 John Darrington <john@darrington.wattle.id.au> +2020-01-30 Jose E. Marchesi <jose.marchesi@oracle.com> - * s12z-opc.c (bm_decode): Handle bit map operations with the - "reserved0" mode. + * bpf-opc.c: Regenerate. -2019-04-15 Thomas Preud'homme <thomas.preudhomme@arm.com> +2020-01-30 Jan Beulich <jbeulich@suse.com> - * arm-dis.c (coprocessor_opcodes): Document new %J and %K format - specifier. Add entries for VLDR and VSTR of system registers. - (print_insn_coprocessor): Forbid coprocessor numbers 8, 14 and 15 in - coprocessor instructions on Armv8.1-M Mainline targets. Add handling - of %J and %K format specifier. + * i386-dis.c (X86_64_C2, X86_64_C3): New enumerators. + (dis386): Use them to replace C2/C3 table entries. + (x86_64_table): Add X86_64_C2 and X86_64_C3 entries. + * i386-opc.tbl (ret): Split Cpu64 entries into AMD64 and Intel64 + ones. Use Size64 instead of DefaultSize on Intel64 ones. + * i386-tbl.h: Re-generate. -2019-04-15 Thomas Preud'homme <thomas.preudhomme@arm.com> +2020-01-30 Jan Beulich <jbeulich@suse.com> - * arm-dis.c (coprocessor_opcodes): Document new %C format control code. - Add new entries for VSCCLRM instruction. - (print_insn_coprocessor): Handle new %C format control code. + * i386-opc.tbl (call): Drop DefaultSize from Intel64 JumpDword + forms. + (fldenv, fnstenv, fstenv, fnsave, fsave, frstor): Drop + DefaultSize. + * i386-tbl.h: Re-generate. -2019-04-15 Thomas Preud'homme <thomas.preudhomme@arm.com> +2020-01-30 Alan Modra <amodra@gmail.com> - * arm-dis.c (enum isa): New enum. - (struct sopcode32): New structure. - (coprocessor_opcodes): change type of entries to struct sopcode32 and - set isa field of all current entries to ANY. - (print_insn_coprocessor): Change type of insn to struct sopcode32. - Only match an entry if its isa field allows the current mode. + * tic4x-dis.c (tic4x_dp): Make unsigned. -2019-04-15 Thomas Preud'homme <thomas.preudhomme@arm.com> +2020-01-27 H.J. Lu <hongjiu.lu@intel.com> + Jan Beulich <jbeulich@suse.com> - * arm-dis.c (thumb_opcodes): Document %n control code. Add entry for - CLRM. - (print_insn_thumb32): Add logic to print %n CLRM register list. + PR binutils/25445 + * i386-dis.c (MOVSXD_Fixup): New function. + (movsxd_mode): New enum. + (x86_64_table): Use MOVSXD_Fixup and movsxd_mode on movsxd. + (intel_operand_size): Handle movsxd_mode. + (OP_E_register): Likewise. + (OP_G): Likewise. + * i386-opc.tbl: Remove Rex64 and allow 32-bit destination + register on movsxd. Add movsxd with 16-bit destination register + for AMD64 and Intel64 ISAs. + * i386-tbl.h: Regenerated. -2019-04-15 Sudakshina Das <sudi.das@arm.com> +2020-01-27 Tamar Christina <tamar.christina@arm.com> - * arm-dis.c (print_insn_thumb32): Updated to accept new %P - and %Q patterns. + PR 25403 + * aarch64-tbl.h (struct aarch64_opcode): Re-order cfinv. + * aarch64-asm-2.c: Regenerate + * aarch64-dis-2.c: Likewise. + * aarch64-opc-2.c: Likewise. -2019-04-15 Sudakshina Das <sudi.das@arm.com> +2020-01-21 Jan Beulich <jbeulich@suse.com> - * arm-dis.c (thumb32_opcodes): New instruction bfcsel. - (print_insn_thumb32): Edit the switch case for %Z. + * i386-opc.tbl (sysret): Drop DefaultSize. + * i386-tbl.h: Re-generate. -2019-04-15 Sudakshina Das <sudi.das@arm.com> +2020-01-21 Jan Beulich <jbeulich@suse.com> - * arm-dis.c (print_insn_thumb32): Updated to accept new %Z pattern. + * i386-opc.tbl (vcvtneps2bf16x): Add Broadcast, Xmmword, and + Dword. + (vcvtneps2bf16y): Add Broadcast, Ymmword, and Dword. + * i386-tbl.h: Re-generate. -2019-04-15 Sudakshina Das <sudi.das@arm.com> +2020-01-20 Nick Clifton <nickc@redhat.com> - * arm-dis.c (thumb32_opcodes): New instruction bfl. + * po/de.po: Updated German translation. + * po/pt_BR.po: Updated Brazilian Portuguese translation. + * po/uk.po: Updated Ukranian translation. -2019-04-15 Sudakshina Das <sudi.das@arm.com> +2020-01-20 Alan Modra <amodra@gmail.com> - * arm-dis.c (print_insn_thumb32): Updated to accept new %Y pattern. + * hppa-dis.c (fput_const): Remove useless cast. -2019-04-15 Sudakshina Das <sudi.das@arm.com> +2020-01-20 Alan Modra <amodra@gmail.com> - * arm-dis.c (print_insn_thumb32): Add '%<bitfield>S' to print an - Arm register with r13 and r15 unpredictable. - (thumb32_opcodes): New instructions for bfx and bflx. + * arm-dis.c (print_insn_arm): Wrap 'T' value. -2019-04-15 Sudakshina Das <sudi.das@arm.com> +2020-01-18 Nick Clifton <nickc@redhat.com> - * arm-dis.c (thumb32_opcodes): New instructions for bf. + * configure: Regenerate. + * po/opcodes.pot: Regenerate. -2019-04-15 Sudakshina Das <sudi.das@arm.com> +2020-01-18 Nick Clifton <nickc@redhat.com> - * arm-dis.c (print_insn_thumb32): Updated to accept new %W pattern. + Binutils 2.34 branch created. -2019-04-15 Sudakshina Das <sudi.das@arm.com> +2020-01-17 Christian Biesinger <cbiesinger@google.com> - * arm-dis.c (print_insn_thumb32): Updated to accept new %G pattern. + * opintl.h: Fix spelling error (seperate). -2019-04-15 Thomas Preud'homme <thomas.preudhomme@arm.com> +2020-01-17 H.J. Lu <hongjiu.lu@intel.com> - * arm-dis.c (select_arm_features): Add logic for Armv8.1-M Mainline. + * i386-opc.tbl: Add {vex} pseudo prefix. + * i386-tbl.h: Regenerated. -2019-04-12 John Darrington <john@darrington.wattle.id.au> +2020-01-16 Andre Vieira <andre.simoesdiasvieira@arm.com> - s12z-dis.c, s12z-opc.c, s12z-opc.h: Replace "operator" with - "optr". ("operator" is a reserved word in c++). + PR 25376 + * opcodes/arm-dis.c (coprocessor_opcodes): Use CORE_HIGH for MVE bits. + (neon_opcodes): Likewise. + (select_arm_features): Make sure we enable MVE bits when selecting + armv8.1-m.main. Make sure we do not enable MVE bits when not selecting + any architecture. -2019-04-11 Sudakshina Das <sudi.das@arm.com> +2020-01-16 Jan Beulich <jbeulich@suse.com> - * aarch64-opc.c (aarch64_print_operand): Add case for - AARCH64_OPND_Rt_SP. - (verify_constraints): Likewise. - * aarch64-tbl.h (QL_LDST_AT): Update to add SP qualifier. - (struct aarch64_opcode): Update stg, stzg, st2g, stz2g instructions - to accept Rt|SP as first operand. - (AARCH64_OPERANDS): Add new Rt_SP. - * aarch64-asm-2.c: Regenerated. - * aarch64-dis-2.c: Regenerated. - * aarch64-opc-2.c: Regenerated. + * i386-opc.tbl: Drop stale comment from XOP section. -2019-04-11 Sudakshina Das <sudi.das@arm.com> +2020-01-16 Jan Beulich <jbeulich@suse.com> - * aarch64-asm-2.c: Regenerated. - * aarch64-dis-2.c: Likewise. - * aarch64-opc-2.c: Likewise. - * aarch64-tbl.h (aarch64_opcode): Add new ldgm and stgm. + * i386-opc.tbl (movq): Add VexWIG to SSE2AVX XMM->XMM forms. + (extractps): Add VexWIG to SSE2AVX forms. + * i386-tbl.h: Re-generate. -2019-04-09 Robert Suchanek <robert.suchanek@mips.com> +2020-01-16 Jan Beulich <jbeulich@suse.com> - * mips-opc.c (mips_builtin_opcodes): Add RDHWR rt rd sel. + * i386-opc.tbl (pextrq, pinsrq): Drop IgnoreSize and Qword. Drop + Size64 from and use VexW1 on SSE2AVX forms. + (vpextrq, vpinsrq): Drop IgnoreSize and Qword. Drop Size64 from + VEX-encoded forms. Add Cpu64 to EVEX-encoded forms. Use VexW1. + * i386-tbl.h: Re-generate. -2019-04-08 H.J. Lu <hongjiu.lu@intel.com> +2020-01-15 Alan Modra <amodra@gmail.com> - * i386-opc.tbl: Consolidate AVX512 BF16 entries. - * i386-init.h: Regenerated. + * tic4x-dis.c (tic4x_version): Make unsigned long. + (optab, optab_special, registernames): New file scope vars. + (tic4x_print_register): Set up registernames rather than + malloc'd registertable. + (tic4x_disassemble): Delete optable and optable_special. Use + optab and optab_special instead. Throw away old optab, + optab_special and registernames when info->mach changes. -2019-04-07 Alan Modra <amodra@gmail.com> +2020-01-14 Sergey Belyashov <sergey.belyashov@gmail.com> - * ppc-dis.c (print_insn_powerpc): Use a tiny state machine - op_separator to control printing of spaces, comma and parens - rather than need_comma, need_paren and spaces vars. + PR 25377 + * z80-dis.c (suffix): Use .db instruction to generate double + prefix. -2019-04-07 Alan Modra <amodra@gmail.com> +2020-01-14 Alan Modra <amodra@gmail.com> - PR 24421 - * arm-dis.c (print_insn_coprocessor): Correct bracket placement. - (print_insn_neon, print_insn_arm): Likewise. + * z8k-dis.c (unpack_instr): Formatting. Cast unsigned short + values to unsigned before shifting. -2019-04-05 Xuepeng Guo <xuepeng.guo@intel.com> +2020-01-13 Thomas Troeger <tstroege@gmx.de> - * i386-dis-evex.h (evex_table): Updated to support BF16 - instructions. - * i386-dis.c (enum): Add EVEX_W_0F3852_P_1, EVEX_W_0F3872_P_1 - and EVEX_W_0F3872_P_3. - * i386-gen.c (cpu_flag_init): Add CPU_AVX512_BF16_FLAGS. - (cpu_flags): Add bitfield for CpuAVX512_BF16. - * i386-opc.h (enum): Add CpuAVX512_BF16. - (i386_cpu_flags): Add bitfield for cpuavx512_bf16. - * i386-opc.tbl: Add AVX512 BF16 instructions. - * i386-init.h: Regenerated. - * i386-tbl.h: Likewise. + * arm-dis.c (print_insn_arm): Fill in insn info fields for control + flow instructions. + (print_insn_thumb16, print_insn_thumb32): Likewise. + (print_insn): Initialize the insn info. + * i386-dis.c (print_insn): Initialize the insn info fields, and + detect jumps. -2019-04-05 Alan Modra <amodra@gmail.com> +2012-01-13 Claudiu Zissulescu <claziss@gmail.com> - * ppc-opc.c (XLBH_MASK): Subtract off BH field from BB_MASK. - (powerpc_opcodes): Reorder bcctr and bclr extended mnemonics - to favour printing of "-" branch hint when using the "y" bit. - Allow BH field on bc{ctr,lr,tar}{,l}{-,+}. - -2019-04-05 Alan Modra <amodra@gmail.com> - - * ppc-dis.c (print_insn_powerpc): Delay printing spaces after - opcode until first operand is output. - -2019-04-04 Peter Bergner <bergner@linux.ibm.com> - - PR gas/24349 - * ppc-opc.c (valid_bo_pre_v2): Add comments. - (valid_bo_post_v2): Add support for 'at' branch hints. - (insert_bo): Only error on branch on ctr. - (get_bo_hint_mask): New function. - (insert_boe): Add new 'branch_taken' formal argument. Add support - for inserting 'at' branch hints. - (extract_boe): Add new 'branch_taken' formal argument. Add support - for extracting 'at' branch hints. - (insert_bom, extract_bom, insert_bop, extract_bop): New functions. - (BOE): Delete operand. - (BOM, BOP): New operands. - (RM): Update value. - (XLYLK, XLYLK_MASK, XLYBB_MASK): Delete. - (powerpc_opcodes) <bc-, bcl-, bca-, bcla-, bclr-, bclrl-, bcctr-, - bcctrl-, bctar-, bctarl->: Replace BOE with BOM. - (powerpc_opcodes) <bc+, bcl+, bca+, bcla+, bclr+, bclrl+, bcctr+, - bcctrl+, bctar+, bctarl+>: Replace BOE with BOP. - <bdnztar, bdnztarl, bdztar, bdztarl, btar, btarl, bdnztar-, bdnztarl-, - bdnztar+, bdnztarl+, bdztar-, bdztarl-, bdztar+, bdztarl+, bgetar, - bnltar, bgetarl, bnltarl, bletar, bngtar, bletarl, bngtarl, bnetar, - bnetarl, bnstar, bnutar, bnstarl, bnutarl, bgetar-, bnltar-, bgetarl-, - bnltarl-, bletar-, bngtar-, bletarl-, bngtarl-, bnetar-, bnetarl-, - bnstar-, bnutar-, bnstarl-, bnutarl-, bgetar+, bnltar+, bgetarl+, - bnltarl+, bletar+, bngtar+, bletarl+, bngtarl+, bnetar+, bnetarl+, - bnstar+, bnutar+, bnstarl+, bnutarl+, blttar, blttarl, bgttar, bgttarl, - beqtar, beqtarl, bsotar, buntar, bsotarl, buntarl, blttar-, blttarl-, - bgttar-, bgttarl-, beqtar-, beqtarl-, bsotar-, buntar-, bsotarl-, - buntarl-, blttar+, blttarl+, bgttar+, bgttarl+, beqtar+, beqtarl+, - bsotar+, buntar+, bsotarl+, buntarl+, bdnzftar, bdnzftarl, bdzftar, - bdzftarl, bftar, bftarl, bftar-, bftarl-, bftar+, bftarl+, bdnzttar, - bdnzttarl, bdzttar, bdzttarl, bttar, bttarl, bttar-, bttarl-, bttar+, - bttarl+>: New extended mnemonics. - -2019-03-28 Alan Modra <amodra@gmail.com> - - PR 24390 - * ppc-opc.c (BTF): Define. - (powerpc_opcodes): Use for mtfsb*. - * ppc-dis.c (print_insn_powerpc): Print fields with both - PPC_OPERAND_CR_REG and PPC_OPERAND_CR_BIT as a plain number. - -2019-03-25 Tamar Christina <tamar.christina@arm.com> - - * arm-dis.c (struct arm_private_data): Remove has_mapping_symbols. - (mapping_symbol_for_insn): Implement new algorithm. - (print_insn): Remove duplicate code. - -2019-03-25 Tamar Christina <tamar.christina@arm.com> - - * aarch64-dis.c (print_insn_aarch64): - Implement override. - -2019-03-25 Tamar Christina <tamar.christina@arm.com> - - * aarch64-dis.c (print_insn_aarch64): Update the mapping symbol search - order. - -2019-03-25 Tamar Christina <tamar.christina@arm.com> - - * aarch64-dis.c (last_stop_offset): New. - (print_insn_aarch64): Use stop_offset. - -2019-03-19 H.J. Lu <hongjiu.lu@intel.com> - - PR gas/24359 - * i386-gen.c (cpu_flag_init): Add CPU_ANY_AVX512F_FLAGS to - CPU_ANY_AVX2_FLAGS. - * i386-init.h: Regenerated. + * arc-opc.c (C_NE): Make it required. -2019-03-18 H.J. Lu <hongjiu.lu@intel.com> +2012-01-13 Claudiu Zissulescu <claziss@gmail.com> - PR gas/24348 - * i386-opc.tbl: Add Optimize to vmovdqa32, vmovdqa64, vmovdqu8, - vmovdqu16, vmovdqu32 and vmovdqu64. - * i386-tbl.h: Regenerated. + * opcode/arc-dis.c (regnames): Correct ACCL/ACCH naming, fix typo + reserved register name. -2019-03-12 Andreas Krebbel <krebbel@linux.ibm.com> +2020-01-13 Alan Modra <amodra@gmail.com> - * s390-opc.txt: Rename selhhhr to selfhr. Remove optional operand - from vstrszb, vstrszh, and vstrszf. + * ns32k-dis.c (Is_gen): Use strchr, add 'f'. + (print_insn_ns32k): Adjust ioffset for 'f' index_offset. -2019-03-12 Andreas Krebbel <krebbel@linux.ibm.com> +2020-01-13 Alan Modra <amodra@gmail.com> - * s390-opc.txt: Add instruction descriptions. + * wasm32-dis.c (print_insn_wasm32): Localise variables. Store + result of wasm_read_leb128 in a uint64_t and check that bits + are not lost when copying to other locals. Use uint32_t for + most locals. Use PRId64 when printing int64_t. -2019-02-08 Jim Wilson <jimw@sifive.com> +2020-01-13 Alan Modra <amodra@gmail.com> - * riscv-opc.c (riscv_opcodes) <beq>: Use Cz to compress 3 operand form. - <bne>: Likewise. + * score-dis.c: Formatting. + * score7-dis.c: Formatting. -2019-02-07 Tamar Christina <tamar.christina@arm.com> +2020-01-13 Alan Modra <amodra@gmail.com> - * arm-dis.c (arm_opcodes): Redefine hlt to armv1. + * score-dis.c (print_insn_score48): Use unsigned variables for + unsigned values. Don't left shift negative values. + (print_insn_score32): Likewise. + * score7-dis.c (print_insn_score32, print_insn_score16): Likewise. -2019-02-07 Tamar Christina <tamar.christina@arm.com> +2020-01-13 Alan Modra <amodra@gmail.com> - PR binutils/23212 - * aarch64-opc.h (enum aarch64_field_kind): Add FLD_sz. - * aarch64-opc.c (verify_elem_sd): New. - (fields): Add FLD_sz entr. - * aarch64-tbl.h (_SIMD_INSN): New. - (aarch64_opcode_table): Add elem_sd verifier to fmla, fmls, fmul and - fmulx scalar and vector by element isns. + * tic4x-dis.c (tic4x_print_register): Remove dead code. -2019-02-07 Nick Clifton <nickc@redhat.com> +2020-01-13 Alan Modra <amodra@gmail.com> - * po/sv.po: Updated Swedish translation. + * fr30-ibld.c: Regenerate. -2019-01-31 Andreas Krebbel <krebbel@linux.ibm.com> +2020-01-13 Alan Modra <amodra@gmail.com> - * s390-mkopc.c (main): Accept arch13 as cpu string. - * s390-opc.c: Add new instruction formats and instruction opcode - masks. - * s390-opc.txt: Add new arch13 instructions. - -2019-01-25 Sudakshina Das <sudi.das@arm.com> - - * aarch64-tbl.h (QL_LDST_AT): Update macro. - (aarch64_opcode): Change encoding for stg, stzg - st2g and st2zg. - * aarch64-asm-2.c: Regenerated. - * aarch64-dis-2.c: Regenerated. - * aarch64-opc-2.c: Regenerated. + * xgate-dis.c (print_insn): Don't left shift signed value. + (ripBits): Formatting, use 1u. -2019-01-25 Sudakshina Das <sudi.das@arm.com> +2020-01-10 Alan Modra <amodra@gmail.com> - * aarch64-asm-2.c: Regenerated. - * aarch64-dis-2.c: Likewise. - * aarch64-opc-2.c: Likewise. - * aarch64-tbl.h (aarch64_opcode): Add new stzgm. + * tilepro-opc.c (parse_insn_tilepro): Make opval unsigned. + * tilegx-opc.c (parse_insn_tilegx): Likewise. Delete raw_opval. -2019-01-25 Sudakshina Das <sudi.das@arm.com> - Ramana Radhakrishnan <ramana.radhakrishnan@arm.com> +2020-01-10 Alan Modra <amodra@gmail.com> - * aarch64-asm.c (aarch64_ins_addr_simple_2): Remove. - * aarch64-asm.h (ins_addr_simple_2): Likeiwse. - * aarch64-dis.c (aarch64_ext_addr_simple_2): Likewise. - * aarch64-dis.h (ext_addr_simple_2): Likewise. - * aarch64-opc.c (operand_general_constraint_met_p): Remove - case for ldstgv_indexed. - (aarch64_print_operand): Remove case for AARCH64_OPND_ADDR_SIMPLE_2. - * aarch64-tbl.h (struct aarch64_opcode): Remove ldgv and stgv. - (AARCH64_OPERANDS): Remove ADDR_SIMPLE_2. - * aarch64-asm-2.c: Regenerated. - * aarch64-dis-2.c: Regenerated. - * aarch64-opc-2.c: Regenerated. + * m10300-dis.c (disassemble): Move extraction of DREG, AREG, RREG, + and XRREG value earlier to avoid a shift with negative exponent. + * m10200-dis.c (disassemble): Similarly. -2019-01-23 Nick Clifton <nickc@redhat.com> +2020-01-09 Nick Clifton <nickc@redhat.com> - * po/pt_BR.po: Updated Brazilian Portuguese translation. + PR 25224 + * z80-dis.c (ld_ii_ii): Use correct cast. -2019-01-21 Nick Clifton <nickc@redhat.com> +2020-01-03 Sergey Belyashov <sergey.belyashov@gmail.com> - * po/de.po: Updated German translation. - * po/uk.po: Updated Ukranian translation. + PR 25224 + * z80-dis.c (ld_ii_ii): Use character constant when checking + opcode byte value. -2019-01-20 Chenghua Xu <paul.hua.gm@gmail.com> - * mips-dis.c (mips_arch_choices): Fix typo in - gs464, gs464e and gs264e descriptors. +2020-01-09 Jan Beulich <jbeulich@suse.com> -2019-01-19 Nick Clifton <nickc@redhat.com> + * i386-dis.c (SEP_Fixup): New. + (SEP): Define. + (dis386_twobyte): Use it for sysenter/sysexit. + (enum x86_64_isa): Change amd64 enumerator to value 1. + (OP_J): Compare isa64 against intel64 instead of amd64. + * i386-opc.tbl (sysenter, sysexit): Split into AMD64 and Intel64 + forms. + * i386-tbl.h: Re-generate. - * configure: Regenerate. - * po/opcodes.pot: Regenerate. +2020-01-08 Alan Modra <amodra@gmail.com> -2018-06-24 Nick Clifton <nickc@redhat.com> + * z8k-dis.c: Include libiberty.h + (instr_data_s): Make max_fetched unsigned. + (z8k_lookup_instr): Make nibl_index and tabl_index unsigned. + Don't exceed byte_info bounds. + (output_instr): Make num_bytes unsigned. + (unpack_instr): Likewise for nibl_count and loop. + * z8kgen.c (gas <opcode_entry_type>): Make noperands, length and + idx unsigned. + * z8k-opc.h: Regenerate. + +2020-01-07 Shahab Vahedi <shahab@synopsys.com> + + * arc-tbl.h (llock): Use 'LLOCK' as class. + (llockd): Likewise. + (scond): Use 'SCOND' as class. + (scondd): Likewise. + (llockd): Set data_size_mode to 'C_ZZ_D' which is 64-bit. + (scondd): Likewise. - 2.32 branch created. +2020-01-06 Alan Modra <amodra@gmail.com> -2019-01-09 John Darrington <john@darrington.wattle.id.au> + * m32c-ibld.c: Regenerate. - * s12z-dis.c (print_insn_s12z): Do not dereference an operand - if it is null. - -dis.c (opr_emit_disassembly): Do not omit an index if it is - zero. +2020-01-06 Alan Modra <amodra@gmail.com> -2019-01-09 Andrew Paprocki <andrew@ishiboo.com> + PR 25344 + * z80-dis.c (suffix): Don't use a local struct buffer copy. + Peek at next byte to prevent recursion on repeated prefix bytes. + Ensure uninitialised "mybuf" is not accessed. + (print_insn_z80): Don't zero n_fetch and n_used here,.. + (print_insn_z80_buf): ..do it here instead. - * configure: Regenerate. +2020-01-04 Alan Modra <amodra@gmail.com> -2019-01-07 Alan Modra <amodra@gmail.com> + * m32r-ibld.c: Regenerate. - * configure: Regenerate. - * po/POTFILES.in: Regenerate. +2020-01-04 Alan Modra <amodra@gmail.com> -2019-01-03 John Darrington <john@darrington.wattle.id.au> + * cr16-dis.c (cr16_match_opcode): Avoid shift left of signed value. - * s12z-opc.c: New file. - * s12z-opc.h: New file. - * s12z-dis.c: Removed all code not directly related to display - of instructions. Used the interface provided by the new files - instead. - * Makefile.am (TARGET_LIBOPCODES_CFILES) Add s12z-opc.c. - * Makefile.in: Regenerate. - * configure.ac (bfd_s12z_arch): Correct the dependencies. - * configure: Regenerate. +2020-01-04 Alan Modra <amodra@gmail.com> + + * crx-dis.c (match_opcode): Avoid shift left of signed value. + +2020-01-04 Alan Modra <amodra@gmail.com> + + * d30v-dis.c (print_insn): Avoid signed overflow in left shift. + +2020-01-03 Jan Beulich <jbeulich@suse.com> + + * aarch64-tbl.h (aarch64_opcode_table): Use + SVE_ADDR_RX_LSL{1,2,3} for LD1RO{H,W,D}. + +2020-01-03 Jan Beulich <jbeulich@suse.com> + + * aarch64-tbl.h (aarch64_opcode_table): Correct SIMD + forms of SUDOT and USDOT. + +2020-01-03 Jan Beulich <jbeulich@suse.com> + + * aarch64-tbl.h (aarch64_opcode_table): Drop 'i' from + uzip{1,2}. + * opcodes/aarch64-dis-2.c: Re-generate. + +2020-01-03 Jan Beulich <jbeulich@suse.com> + + * aarch64-tbl.h (aarch64_opcode_table): Correct 64-bit + FMMLA encoding. + * opcodes/aarch64-dis-2.c: Re-generate. + +2020-01-02 Sergey Belyashov <sergey.belyashov@gmail.com> + + * z80-dis.c: Add support for eZ80 and Z80 instructions. -2019-01-01 Alan Modra <amodra@gmail.com> +2020-01-01 Alan Modra <amodra@gmail.com> Update year range in copyright notice of all files. -For older changes see ChangeLog-2018 +For older changes see ChangeLog-2019 -Copyright (C) 2019 Free Software Foundation, Inc. +Copyright (C) 2020 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/opcodes/ChangeLog-2019 gdb-10.2/opcodes/ChangeLog-2019 --- gdb-9.1/opcodes/ChangeLog-2019 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/opcodes/ChangeLog-2019 2020-09-13 02:33:41.000000000 +0000 @@ -0,0 +1,2456 @@ +2019-12-30 Alan Modra <amodra@gmail.com> + + PR 25319 + * tic4x-dis.c (tic4x_print_cond): Correct order of xcalloc args. + +2019-12-29 Alan Modra <amodra@gmail.com> + + * sparc-dis.c (SEX): Don't use left and right shift to sign extend. + (compare_opcodes): Avoid signed shift left overflow. + (print_insn_sparc): Likewise. + +2019-12-29 Alan Modra <amodra@gmail.com> + + PR 25319 + * tic4x-dis.c (tic4x_print_cond): Init all of condtable. + +2019-12-27 Jan Beulich <jbeulich@suse.com> + + * i386-dis.c (Jdqw): Define. + (dqw_mode): Adjust associated comment. + (rm_table): Use Jdqw for XBEGIN. + (OP_J): Handle dqw_mode. + +2019-12-27 Jan Beulich <jbeulich@suse.com> + + * i386-gen.c (process_i386_operand_type): Don't set Disp32 for + Cpu64 templates. + * i386-opc.tbl (mov): Fold two templates. + (jcxz, jecxz, jrcxz, loop, loope, loopne, loopnz, loopz): Drop + Disp16, Disp32, and Disp32S. + (xbegin): Add Disp32S. + * i386-tbl.h: Re-generate. + +2019-12-26 Alan Modra <amodra@gmail.com> + + * crx-dis.c (get_number_of_operands): Don't access operands[] + out of bounds. + +2019-12-26 Alan Modra <amodra@gmail.com> + + * v850-dis.c (disassemble): Avoid signed overflow. Don't use + long vars when unsigned int will do. + +2019-12-24 Alan Modra <amodra@gmail.com> + + * arm-dis.c (print_insn_arm): Don't shift by 32 on unsigned int var. + +2019-12-23 Jan Beulich <jbeulich@suse.com> + + * ppc-dis.c (print_insn_powerpc): Rename local variable "spaces" + to "blanks". + * ppc-opc.c (D34, SI34, NSI34): Use UINT64_C(). + +2019-12-23 Alan Modra <amodra@gmail.com> + + * score-dis.c (print_insn_score32): Avoid signed overflow. + (print_insn_score48): Likewise. Don't cast to int when printing + hex values. + +2019-12-23 Alan Modra <amodra@gmail.com> + + * iq2000-ibld.c: Regenerate. + +2019-12-23 Alan Modra <amodra@gmail.com> + + * d30v-dis.c (extract_value): Make num param a uint64_t, constify + oper. Use unsigned vars. + (print_insn): Make num var uint64_t. Constify oper and remove now + unnecessary casts on extract_value calls. + (print_insn_d30v): Use unsigned vars. Adjust printf formats. + +2019-12-23 Alan Modra <amodra@gmail.com> + + * wasm32-dis.c (wasm_read_leb128): Don't allow oversize shifts. + Catch value overflow. Sign extend only on terminating byte. + +2019-12-20 Alan Modra <amodra@gmail.com> + + PR 25281 + * sh-dis.c (print_insn_ddt): Properly check validity of MOVX_NOPY + and MOVY_NOPX insns. For invalid cases include 0xf000 in the word + printed. Print .word in more cases. + +2019-12-20 Alan Modra <amodra@gmail.com> + + * or1k-ibld.c: Regenerate. + +2019-12-20 Alan Modra <amodra@gmail.com> + + * hppa-dis.c (extract_16, extract_21, print_insn_hppa): Use + unsigned variables. + +2019-12-20 Alan Modra <amodra@gmail.com> + + * m68hc11-dis.c (read_memory): Delete forward decls. + (print_indexed_operand, print_insn): Likewise. + (print_indexed_operand): Formatting. Don't rely on short being + exactly 16 bits, make sign extension explicit. + (print_insn): Likewise. Avoid signed overflow. + +2019-12-19 Alan Modra <amodra@gmail.com> + + * vax-dis.c (print_insn_mode): Stop index mode recursion. + +2019-12-19 Dr N.W. Filardo <nwf20@cam.ac.uk> + + PR 25277 + * microblaze-opcm.h (enum microblaze_instr): Prefix fadd, fmul and + fdiv with "mbi_". + * microblaze-opc.h (opcodes): Adjust to suit. + +2019-12-18 Alan Modra <amodra@gmail.com> + + * alpha-opc.c (OP): Avoid signed overflow. + * arm-dis.c (print_insn): Likewise. + * mcore-dis.c (print_insn_mcore): Likewise. + * pj-dis.c (get_int): Likewise. + * ppc-opc.c (EBD15, EBD15BI): Likewise. + * score7-dis.c (s7_print_insn): Likewise. + * tic30-dis.c (print_insn_tic30): Likewise. + * v850-opc.c (insert_SELID): Likewise. + * vax-dis.c (print_insn_vax): Likewise. + * arc-ext.c (create_map): Likewise. + (struct ExtAuxRegister): Make "address" field unsigned int. + (arcExtMap_auxRegName): Pass unsigned address. + (dump_ARC_extmap): Adjust. + * arc-ext.h (arcExtMap_auxRegName): Update prototype. + +2019-12-17 Alan Modra <amodra@gmail.com> + + * visium-dis.c (print_insn_visium): Avoid signed overflow. + +2019-12-17 Alan Modra <amodra@gmail.com> + + * aarch64-opc.c (value_fit_signed_field_p): Avoid signed overflow. + (value_fit_unsigned_field_p): Likewise. + (aarch64_wide_constant_p): Likewise. + (operand_general_constraint_met_p): Likewise. + * aarch64-opc.h (aarch64_wide_constant_p): Update prototype. + +2019-12-17 Alan Modra <amodra@gmail.com> + + * nds32-dis.c (nds32_mask_opcode): Avoid signed overflow. + (print_insn_nds32): Use uint64_t for "given" and "given1". + +2019-12-17 Alan Modra <amodra@gmail.com> + + * tic80-dis.c: Delete file. + * tic80-opc.c: Delete file. + * disassemble.c: Remove tic80 support. + * disassemble.h: Likewise. + * Makefile.am: Likewise. + * configure.ac: Likewise. + * Makefile.in: Regenerate. + * configure: Regenerate. + * po/POTFILES.in: Regenerate. + +2019-12-17 Alan Modra <amodra@gmail.com> + + * bpf-ibld.c: Regenerate. + +2019-12-16 Alan Modra <amodra@gmail.com> + + * aarch64-dis.c (sign_extend): Return uint64_t. Rewrite without + conditional. + (aarch64_ext_imm): Avoid signed overflow. + +2019-12-16 Alan Modra <amodra@gmail.com> + + * microblaze-dis.c (read_insn_microblaze): Avoid signed overflow. + +2019-12-16 Alan Modra <amodra@gmail.com> + + * nios2-dis.c (nios2_print_insn_arg): Avoid signed overflow + +2019-12-16 Alan Modra <amodra@gmail.com> + + * xstormy16-ibld.c: Regenerate. + +2019-12-16 Alan Modra <amodra@gmail.com> + + * score-dis.c (print_insn_score16): Move rpush/rpop imm field + value adjustment so that it doesn't affect reg field too. + +2019-12-16 Alan Modra <amodra@gmail.com> + + * crx-dis.c (EXTRACT, SBM): Avoid signed overflow. + (get_number_of_operands, getargtype, getbits, getregname), + (getcopregname, getprocregname, gettrapstring, getcinvstring), + (getregliststring, get_word_at_PC, get_words_at_PC, build_mask), + (powerof2, match_opcode, make_instruction, print_arguments), + (print_arg): Delete forward declarations, moving static to.. + (getregname, getcopregname, getregliststring): ..these definitions. + (build_mask): Return unsigned int mask. + (match_opcode): Use unsigned int vars. + +2019-12-16 Alan Modra <amodra@gmail.com> + + * bfin-dis.c (fmtconst, fmtconst_val): Avoid signed overflow. + +2019-12-16 Alan Modra <amodra@gmail.com> + + * nds32-dis.c (print_insn16, print_insn32): Remove forward decls. + (struct objdump_disasm_info): Delete. + (nds32_parse_audio_ext, nds32_parse_opcode): Cast result of + N32_IMMS to unsigned before shifting left. + +2019-12-16 Alan Modra <amodra@gmail.com> + + * moxie-dis.c (INST2OFFSET): Don't left shift a signed value. + (print_insn_moxie): Remove unnecessary cast. + +2019-12-12 Alan Modra <amodra@gmail.com> + + * csky-dis.c (csky_chars_to_number): Remove abort and unnecessary + mask. + +2019-12-11 Alan Modra <amodra@gmail.com> + + * arc-dis.c (BITS): Don't truncate high bits with shifts. + * nios2-dis.c (nios2_print_insn_arg): Don't sign extend with shifts. + * tic54x-dis.c (print_instruction): Likewise. + * tilegx-opc.c (parse_insn_tilegx): Likewise. + * tilepro-opc.c (parse_insn_tilepro): Likewise. + * visium-dis.c (disassem_class0): Likewise. + * pdp11-dis.c (sign_extend): Likewise. + (SIGN_BITS): Delete. + * epiphany-ibld.c: Regenerate. + * lm32-ibld.c: Regenerate. + * m32c-ibld.c: Regenerate. + +2019-12-11 Alan Modra <amodra@gmail.com> + + * ns32k-dis.c (sign_extend): Correct last patch. + +2019-12-11 Alan Modra <amodra@gmail.com> + + * vax-dis.c (NEXTLONG): Avoid signed overflow. + +2019-12-11 Alan Modra <amodra@gmail.com> + + * v850-dis.c (get_operand_value): Use unsigned arithmetic. Don't + sign extend using shifts. + +2019-12-11 Alan Modra <amodra@gmail.com> + + * tic6x-dis.c (tic6x_extract_32): Avoid signed overflow. + +2019-12-11 Alan Modra <amodra@gmail.com> + + * tic4x-dis.c (tic4x_print_register): Formatting. Don't segfault + on NULL registertable entry. + (tic4x_hash_opcode): Use unsigned arithmetic. + +2019-12-11 Alan Modra <amodra@gmail.com> + + * s12z-opc.c (z_decode_signed_value): Avoid signed overflow. + +2019-12-11 Alan Modra <amodra@gmail.com> + + * ns32k-dis.c (bit_extract): Use unsigned arithmetic. + (bit_extract_simple, sign_extend): Likewise. + +2019-12-11 Alan Modra <amodra@gmail.com> + + * nios2-dis.c (nios2_print_insn_arg): Use 1u << 31. + +2019-12-11 Alan Modra <amodra@gmail.com> + + * moxie-dis.c (INST2OFFSET): Don't sign extend using shifts. + +2019-12-11 Alan Modra <amodra@gmail.com> + + * m68k-dis.c (COERCE32): Cast value first. + (NEXTLONG, NEXTULONG): Avoid signed overflow. + +2019-12-11 Alan Modra <amodra@gmail.com> + + * h8300-dis.c (extract_immediate): Avoid signed overflow. + (bfd_h8_disassemble): Likewise. + +2019-12-11 Alan Modra <amodra@gmail.com> + + * d30v-dis.c (print_insn): Make opind unsigned. Don't access + past end of operands array. + +2019-12-11 Alan Modra <amodra@gmail.com> + + * csky-dis.c (csky_chars_to_number): Rewrite. Avoid signed + overflow when collecting bytes of a number. + +2019-12-11 Alan Modra <amodra@gmail.com> + + * cris-dis.c (print_with_operands): Avoid signed integer + overflow when collecting bytes of a 32-bit integer. + +2019-12-11 Alan Modra <amodra@gmail.com> + + * cr16-dis.c (EXTRACT, SBM): Rewrite. + (cr16_match_opcode): Delete duplicate bcond test. + +2019-12-11 Alan Modra <amodra@gmail.com> + + * bfin-dis.c (HOST_LONG_WORD_SIZE, XFIELD): Delete. + (SIGNBIT): New. + (MASKBITS, SIGNEXTEND): Rewrite. + (fmtconst): Don't use ? expression now that SIGNEXTEND uses + unsigned arithmetic, instead assign result of SIGNEXTEND back + to x. + (fmtconst_val): Use 1u in shift expression. + +2019-12-11 Alan Modra <amodra@gmail.com> + + * arc-dis.c (find_format_from_table): Use ull constant when + shifting by up to 32. + +2019-12-11 Alan Modra <amodra@gmail.com> + + PR 25270 + * aarch64-dis.c (aarch64_decode_variant_using_iclass): Return + false when field is zero for sve_size_tsz_bhs. + +2019-12-11 Alan Modra <amodra@gmail.com> + + * epiphany-ibld.c: Regenerate. + +2019-12-10 Alan Modra <amodra@gmail.com> + + PR 24960 + * disassemble.c (disassemble_free_target): New function. + +2019-12-10 Alan Modra <amodra@gmail.com> + + * cgen-dis.in (print_insn_@arch@): Replace insn_sets with private_data. + * disassemble.c (disassemble_init_for_target): Likewise. + * bpf-dis.c: Regenerate. + * epiphany-dis.c: Regenerate. + * fr30-dis.c: Regenerate. + * frv-dis.c: Regenerate. + * ip2k-dis.c: Regenerate. + * iq2000-dis.c: Regenerate. + * lm32-dis.c: Regenerate. + * m32c-dis.c: Regenerate. + * m32r-dis.c: Regenerate. + * mep-dis.c: Regenerate. + * mt-dis.c: Regenerate. + * or1k-dis.c: Regenerate. + * xc16x-dis.c: Regenerate. + * xstormy16-dis.c: Regenerate. + +2019-12-10 Alan Modra <amodra@gmail.com> + + * ppc-dis.c (private): Delete variable. + (get_powerpc_dialect): Don't segfault on NULL info->private_data. + (powerpc_init_dialect): Don't use global private. + +2019-12-10 Alan Modra <amodra@gmail.com> + + * s12z-opc.c: Formatting. + +2019-12-08 Alan Modra <amodra@gmail.com> + + * s12z-opc.c (exg_sex_discrim): Don't leak memory on invalid + registers. + +2019-12-05 Jan Beulich <jbeulich@suse.com> + + * aarch64-tbl.h (aarch64_feature_crypto, + aarch64_feature_crypto_v8_2, CRYPTO, CRYPTO_V8_2, CRYP_INSN, + CRYPTO_V8_2_INSN): Delete. + +2019-12-05 Alan Modra <amodra@gmail.com> + + PR 25249 + * microblaze-dis.c (NUM_STRBUFS, STRBUF_SIZE): Define. + (struct string_buf): New. + (strbuf): New function. + (get_field): Use strbuf rather than strdup of local temp. + (get_field_imm, get_field_imm5, get_field_imm5_mbar): Likewise. + (get_field_rfsl, get_field_imm15): Likewise. + (get_field_rd, get_field_r1, get_field_r2): Update macros. + (get_field_special): Likewise. Don't strcpy spr. Formatting. + (print_insn_microblaze): Formatting. Init and pass string_buf to + get_field functions. + +2019-12-04 Jan Beulich <jbeulich@suse.com> + + * i386-opc.tbl (lfs, lgs, lss): Drop No_qSuf. + * i386-tbl.h: Re-generate. + +2019-12-04 Jan Beulich <jbeulich@suse.com> + + * i386-dis.c (mod_table): Use Ev instead of Em for movdiri. + +2019-12-04 Jan Beulich <jbeulich@suse.com> + + * i386-opc.tbl (push, pop): Drop DefaultSize from GPR-only + forms. + (xbegin): Drop DefaultSize. + * i386-tbl.h: Re-generate. + +2019-11-22 Mihail Ionescu <mihail.ionescu@arm.com> + + * opcodes/arm-dis.c (arm_opcodes, thumb32_opcodes): + Change the coproc CRC conditions to use the extension + feature set, second word, base on ARM_EXT2_CRC. + +2019-11-14 Jan Beulich <jbeulich@suse.com> + + * i386-opc.tbl (syscall, sysret): Drop Cpu64 forms. + * i386-tbl.h: Re-generate. + +2019-11-14 Jan Beulich <jbeulich@suse.com> + + * i386-gen.c (opcode_modifiers): Remove JumpDword, JumpByte, + JumpInterSegment, and JumpAbsolute entries. + * i386-opc.h (JUMP, JUMP_DWORD, JUMP_BYTE, JUMP_INTERSEGMENT, + JUMP_ABSOLUTE): Define. + (struct i386_opcode_modifier): Extend jump field to 3 bits. + Remove jumpdword, jumpbyte, jumpintersegment, and jumpabsolute + fields. + * i386-opc.tbl (JumpByte, JumpDword, JumpAbsolute, + JumpInterSegment): Define. + * i386-tbl.h: Re-generate. + +2019-11-14 Jan Beulich <jbeulich@suse.com> + + * i386-gen.c (operand_type_init): Remove + OPERAND_TYPE_JUMPABSOLUTE entry. + (opcode_modifiers): Add JumpAbsolute entry. + (operand_types): Remove JumpAbsolute entry. + * i386-opc.h (JumpAbsolute): Move between enums. + (struct i386_opcode_modifier): Add jumpabsolute field. + (union i386_operand_type): Remove jumpabsolute field. + * i386-opc.tbl (call, lcall, jmp, ljmp): Move JumpAbsolute. + * i386-init.h, i386-tbl.h: Re-generate. + +2019-11-14 Jan Beulich <jbeulich@suse.com> + + * i386-gen.c (opcode_modifiers): Add AnySize entry. + (operand_types): Remove AnySize entry. + * i386-opc.h (AnySize): Move between enums. + (struct i386_opcode_modifier): Add anysize field. + (OTUnused): Un-comment. + (union i386_operand_type): Remove anysize field. + * i386-opc.tbl (lea, invlpg, clflush, prefetchnta, prefetcht0, + prefetcht1, prefetcht2, prefetchtw, bndmk, bndcl, bndcu, bndcn, + bndstx, bndldx, prefetchwt1, clflushopt, clwb, cldemote): Move + AnySize. + * i386-tbl.h: Re-generate. + +2019-11-12 Nelson Chu <nelson.chu@sifive.com> + + * riscv-opc.c (riscv_insn_types): Replace the INSN_CLASS_I with + INSN_CLASS_F and the INSN_CLASS_C with INSN_CLASS_F_AND_C if we + use the floating point register (FPR). + +2019-11-12 Mihail Ionescu <mihail.ionescu@arm.com> + + * opcodes/arm-dis.c (mve_opcodes): Enable VMOV imm to vec with + cmode 1101. + (is_mve_encoding_conflict): Update cmode conflict checks for + MVE_VMVN_IMM. + +2019-11-12 Jan Beulich <jbeulich@suse.com> + + * i386-gen.c (operand_type_init): Remove OPERAND_TYPE_ESSEG + entry. + (operand_types): Remove EsSeg entry. + (main): Replace stale use of OTMax. + * i386-opc.h (IS_STRING_ES_OP0, IS_STRING_ES_OP1): Define. + (struct i386_opcode_modifier): Expand isstring field to 2 bits. + (EsSeg): Delete. + (OTUnused): Comment out. + (union i386_operand_type): Remove esseg field. + * i386-opc.tbl (IsStringEsOp0, IsStringEsOp1): Define. + (cmps, scmp, scas, ssca, cmpsd): Add IsStringEsOp0. + (ins, movs, smov, movsd): Add IsStringEsOpOp1. + (stos, ssto): Add IsStringEsOp0/IsStringEsOpOp1. + * i386-init.h, i386-tbl.h: Re-generate. + +2019-11-12 Jan Beulich <jbeulich@suse.com> + + * i386-gen.c (operand_instances): Add RegB entry. + * i386-opc.h (enum operand_instance): Add RegB. + * i386-opc.tbl (RegC, RegD, RegB): Define. + (Acc, ShiftCount, InOutPortReg): Adjust definitions. + (monitor, mwait, invlpga, skinit, vmload, vmrun, vmsave, clzero, + monitorx, mwaitx): Drop ImmExt and convert encodings + accordingly. + * i386-reg.tbl (ecx, rcx): Add Instance=RegC. + (edx, rdx): Add Instance=RegD. + (ebx, rbx): Add Instance=RegB. + * i386-tbl.h: Re-generate. + +2019-11-12 Jan Beulich <jbeulich@suse.com> + + * i386-gen.c (operand_type_init): Adjust + OPERAND_TYPE_INOUTPORTREG, OPERAND_TYPE_SHIFTCOUNT, + OPERAND_TYPE_FLOATACC, OPERAND_TYPE_ACC8, OPERAND_TYPE_ACC16, + OPERAND_TYPE_ACC32, and OPERAND_TYPE_ACC64 entries. + (operand_instances): New. + (operand_types): Drop InOutPortReg, ShiftCount, and Acc entries. + (output_operand_type): New parameter "instance". Process it. + (process_i386_operand_type): New local variable "instance". + (main): Adjust static assertions. + * i386-opc.h (INSTANCE_WIDTH): Define. + (enum operand_instance): New. + (Acc, InOutPortReg, ShiftCount): Replace by ClassInstance. + (union i386_operand_type): Replace acc, inoutportreg, and + shiftcount by instance. + * i386-opc.tbl (Acc, InOutPortReg, ShiftCount): Define. + * i386-reg.tbl (st, al, cl, ax, dx, eax, rax, xmm0, st(0)): + Add Instance=. + * i386-init.h, i386-tbl.h: Re-generate. + +2019-11-11 Jan Beulich <jbeulich@suse.com> + + * aarch64-tbl.h (aarch64_opcode_table): Switch SVE2's + smaxp/sminp entries' "tied_operand" field to 2. + +2019-11-11 Jan Beulich <jbeulich@suse.com> + + * aarch64-opc.c (operand_general_constraint_met_p): Replace + "index" local variable by that of the already existing "num". + +2019-11-08 H.J. Lu <hongjiu.lu@intel.com> + + PR gas/25167 + * i386-opc.tbl: Remove IgnoreSize from cmpsd and movsd. + * i386-tbl.h: Regenerated. + +2019-11-08 Jan Beulich <jbeulich@suse.com> + + * i386-gen.c (operand_type_init): Add Class= to + OPERAND_TYPE_REGMASK and OPERAND_TYPE_REGBND entries. Move up + OPERAND_TYPE_REGBND entry. + (operand_classes): Add RegMask and RegBND entries. + (operand_types): Drop RegMask and RegBND entry. + * i386-opc.h (enum operand_class): Add RegMask and RegBND. + (RegMask, RegBND): Delete. + (union i386_operand_type): Remove regmask and regbnd fields. + * i386-opc.tbl (RegMask, RegBND): Define. + * i386-reg.tbl: Replace RegMask by Class=RegMask and RegBND by + Class=RegBND. + * i386-init.h, i386-tbl.h: Re-generate. + +2019-11-08 Jan Beulich <jbeulich@suse.com> + + * i386-gen.c (operand_type_init): Add Class= to + OPERAND_TYPE_REGMMX, OPERAND_TYPE_REGXMM, OPERAND_TYPE_REGYMM, and + OPERAND_TYPE_REGZMM entries. + (operand_classes): Add RegMMX and RegSIMD entries. + (operand_types): Drop RegMMX and RegSIMD entries. + * i386-opc.h (enum operand_class): Add RegMMX and RegSIMD. + (RegMMX, RegSIMD): Delete. + (union i386_operand_type): Remove regmmx and regsimd fields. + * i386-opc.tbl (RegMMX): Define. + (RegXMM, RegYMM, RegZMM): Add Class=. + * i386-reg.tbl: Replace RegMMX by Class=RegMMX and RegSIMD by + Class=RegSIMD. + * i386-init.h, i386-tbl.h: Re-generate. + +2019-11-08 Jan Beulich <jbeulich@suse.com> + + * i386-gen.c (operand_type_init): Add Class= to + OPERAND_TYPE_CONTROL, OPERAND_TYPE_TEST, and OPERAND_TYPE_DEBUG + entries. + (operand_classes): Add RegCR, RegDR, and RegTR entries. + (operand_types): Drop Control, Debug, and Test entries. + * i386-opc.h (enum operand_class): Add RegCR, RegDR, and RegTR. + (Control, Debug, Test): Delete. + (union i386_operand_type): Remove control, debug, and test + fields. + * i386-opc.tbl (Control, Debug, Test): Define. + * i386-reg.tbl: Replace Control by Class=RegCR, Debug by + Class=RegDR, and Test by Class=RegTR. + * i386-init.h, i386-tbl.h: Re-generate. + +2019-11-08 Jan Beulich <jbeulich@suse.com> + + * i386-gen.c (operand_type_init): Add Class= to + OPERAND_TYPE_SREG entry. + (operand_classes): Add SReg entry. + (operand_types): Drop SReg entry. + * i386-opc.h (enum operand_class): Add SReg. + (SReg): Delete. + (union i386_operand_type): Remove sreg field. + * i386-opc.tbl (SReg): Define. + * i386-reg.tbl: Replace SReg by Class=SReg. + * i386-init.h, i386-tbl.h: Re-generate. + +2019-11-08 Jan Beulich <jbeulich@suse.com> + + * i386-gen.c (operand_type_init): Add Class=. New + OPERAND_TYPE_ANYIMM entry. + (operand_classes): New. + (operand_types): Drop Reg entry. + (output_operand_type): New parameter "class". Process it. + (process_i386_operand_type): New local variable "class". + (main): Adjust static assertions. + * i386-opc.h (CLASS_WIDTH): Define. + (enum operand_class): New. + (Reg): Replace by Class. Adjust comment. + (union i386_operand_type): Replace reg by class. + * i386-opc.tbl (Reg8, Reg16, Reg32, Reg64, FloatReg): Add + Class=. + * i386-reg.tbl: Replace Reg by Class=Reg. + * i386-init.h: Re-generate. + +2019-11-07 Mihail Ionescu <mihail.ionescu@arm.com> + + * opcodes/aarch64-tbl.h (V8_6_INSN): New macro for v8.6 instructions. + (aarch64_opcode_table): Add data gathering hint mnemonic. + * opcodes/aarch64-dis-2.c: Account for new instruction. + +2019-11-07 Mihail Ionescu <mihail.ionescu@arm.com> + + * arm-dis.c (neon_opcodes): Add i8mm SIMD instructions. + + +2019-11-07 Mihail Ionescu <mihail.ionescu@arm.com> + + * aarch64-tbl.h (aarch64_feature_i8mm_sve, aarch64_feature_f32mm_sve, + aarch64_feature_f64mm_sve, aarch64_feature_i8mm, aarch64_feature_f32mm, + aarch64_feature_f64mm): New feature sets. + (INT8MATMUL_INSN, F64MATMUL_SVE_INSN, F64MATMUL_INSN, + F32MATMUL_SVE_INSN, F32MATMUL_INSN): New macros to define matrix multiply + instructions. + (I8MM_SVE, F32MM_SVE, F64MM_SVE, I8MM, F32MM, F64MM): New feature set + macros. + (QL_MMLA64, OP_SVE_SBB): New qualifiers. + (OP_SVE_QQQ): New qualifier. + (INT8MATMUL_SVE_INSNC, F64MATMUL_SVE_INSNC, + F32MATMUL_SVE_INSNC): New feature set for bfloat16 instructions to support + the movprfx constraint. + (aarch64_opcode_table): Support for SVE_ADDR_RI_S4x32. + (aarch64_opcode_table): Define new instructions smmla, + ummla, usmmla, usdot, sudot, fmmla, ld1rob, ld1roh, ld1row, ld1rod, + uzip{1/2}, trn{1/2}. + * aarch64-opc.c (operand_general_constraint_met_p): Handle + AARCH64_OPND_SVE_ADDR_RI_S4x32. + (aarch64_print_operand): Handle AARCH64_OPND_SVE_ADDR_RI_S4x32. + * aarch64-dis-2.c (aarch64_opcode_lookup_1, aarch64_find_next_opcode): + Account for new instructions. + * opcodes/aarch64-asm-2.c (aarch64_insert_operand): Support the new + S4x32 operand. + * aarch64-opc-2.c (aarch64_operands): Support the new S4x32 operand. + +2019-11-07 Mihail Ionescu <mihail.ionescu@arm.com> +2019-11-07 Matthew Malcomson <matthew.malcomson@arm.com> + + * arm-dis.c (select_arm_features): Update bfd_march_arm_8 with + Armv8.6-A. + (coprocessor_opcodes): Add bfloat16 vcvt{t,b}. + (neon_opcodes): Add bfloat SIMD instructions. + (print_insn_coprocessor): Add new control character %b to print + condition code without checking cp_num. + (print_insn_neon): Account for BFloat16 instructions that have no + special top-byte handling. + +2019-11-07 Mihail Ionescu <mihail.ionescu@arm.com> +2019-11-07 Matthew Malcomson <matthew.malcomson@arm.com> + + * arm-dis.c (print_insn_coprocessor, + print_insn_generic_coprocessor): Create wrapper functions around + the implementation of the print_insn_coprocessor control codes. + (print_insn_coprocessor_1): Original print_insn_coprocessor + function that now takes which array to look at as an argument. + (print_insn_arm): Use both print_insn_coprocessor and + print_insn_generic_coprocessor. + (print_insn_thumb32): As above. + +2019-11-07 Mihail Ionescu <mihail.ionescu@arm.com> +2019-11-07 Matthew Malcomson <matthew.malcomson@arm.com> + + * aarch64-asm.c (aarch64_ins_reglane): Use AARCH64_OPND_QLF_S_2H + in reglane special case. + * aarch64-dis-2.c (aarch64_opcode_lookup_1, + aarch64_find_next_opcode): Account for new instructions. + * aarch64-dis.c (aarch64_ext_reglane): Use AARCH64_OPND_QLF_S_2H + in reglane special case. + * aarch64-opc.c (struct operand_qualifier_data): Add data for + new AARCH64_OPND_QLF_S_2H qualifier. + * aarch64-tbl.h (QL_BFDOT QL_BFDOT64, QL_BFDOT64I, QL_BFMMLA2, + QL_BFCVT64, QL_BFCVTN64, QL_BFCVTN2_64): New qualifiers. + (aarch64_feature_bfloat16, aarch64_feature_bfloat16_sve): New feature + sets. + (BFLOAT_SVE, BFLOAT): New feature set macros. + (BFLOAT_SVE_INSN, BFLOAT_INSN): New macros to define BFloat16 + instructions. + (aarch64_opcode_table): Define new instructions bfdot, + bfmmla, bfcvt, bfcvtnt, bfdot, bfdot, bfcvtn, bfmlal[b/t] + bfcvtn2, bfcvt. + +2019-11-07 Mihail Ionescu <mihail.ionescu@arm.com> +2019-11-07 Matthew Malcomson <matthew.malcomson@arm.com> + + * aarch64-tbl.h (ARMV8_6): New macro. + +2019-11-07 Jan Beulich <jbeulich@suse.com> + + * i386-dis.c (prefix_table): Add mcommit. + (rm_table): Add rdpru. + * i386-gen.c (cpu_flag_init): Adjust CPU_ZNVER2_FLAGS entry. Add + CPU_RDPRU_FLAGS and CPU_MCOMMIT_FLAGS entries. + (cpu_flags): Add CpuRDPRU and CpuMCOMMIT entries. + * i386-opc.h (CpuRDPRU, CpuMCOMMIT): New. + (union i386_cpu_flags): Add cpurdpru and cpumcommit fields. + * i386-opc.tbl (mcommit, rdpru): New. + * i386-init.h, i386-tbl.h: Re-generate. + +2019-11-07 Jan Beulich <jbeulich@suse.com> + + * i386-dis.c (OP_Mwait): Drop local variable "names", use + "names32" instead. + (OP_Monitor): Drop local variable "op1_names", re-purpose + "names" for it instead, and replace former "names" uses by + "names32" ones. + +2019-11-07 Jan Beulich <jbeulich@suse.com> + + PR/gas 25167 + * opcodes/i386-opc.tbl (movsd, cmpsd): Drop IgnoreSize from + operand-less forms. + * opcodes/i386-tbl.h: Re-generate. + +2019-11-05 Jan Beulich <jbeulich@suse.com> + + * i386-dis.c (OP_Mwaitx): Delete. + (prefix_table): Use OP_Mwait for mwaitx entry. + (OP_Mwait): Also handle mwaitx. + +2019-11-05 Jan Beulich <jbeulich@suse.com> + + * i386-dis.c (PREFIX_0F01_REG_7_MOD_3_RM_2, + PREFIX_0F01_REG_7_MOD_3_RM_3): New. + (prefix_table): Add respective entries. + (rm_table): Link to those entries. + +2019-11-05 Jan Beulich <jbeulich@suse.com> + + * i386-dis.c (REG_0F1C_MOD_0): Rename to ... + (REG_0F1C_P_0_MOD_0): ... this. + (REG_0F1E_MOD_3): Rename to ... + (REG_0F1E_P_1_MOD_3): ... this. + (RM_0F01_REG_5): Rename to ... + (RM_0F01_REG_5_MOD_3): ... this. + (RM_0F01_REG_7): Rename to ... + (RM_0F01_REG_7_MOD_3): ... this. + (RM_0F1E_MOD_3_REG_7): Rename to ... + (RM_0F1E_P_1_MOD_3_REG_7): ... this. + (RM_0FAE_REG_6): Rename to ... + (RM_0FAE_REG_6_MOD_3_P_0): ... this. + (RM_0FAE_REG_7): Rename to ... + (RM_0FAE_REG_7_MOD_3): ... this. + (PREFIX_MOD_0_0F01_REG_5): Rename to ... + (PREFIX_0F01_REG_5_MOD_0): ... this. + (PREFIX_MOD_3_0F01_REG_5_RM_0): Rename to ... + (PREFIX_0F01_REG_5_MOD_3_RM_0): ... this. + (PREFIX_MOD_3_0F01_REG_5_RM_2): Rename to ... + (PREFIX_0F01_REG_5_MOD_3_RM_2): ... this. + (PREFIX_0FAE_REG_0): Rename to ... + (PREFIX_0FAE_REG_0_MOD_3): ... this. + (PREFIX_0FAE_REG_1): Rename to ... + (PREFIX_0FAE_REG_1_MOD_3): ... this. + (PREFIX_0FAE_REG_2): Rename to ... + (PREFIX_0FAE_REG_2_MOD_3): ... this. + (PREFIX_0FAE_REG_3): Rename to ... + (PREFIX_0FAE_REG_3_MOD_3): ... this. + (PREFIX_MOD_0_0FAE_REG_4): Rename to ... + (PREFIX_0FAE_REG_4_MOD_0): ... this. + (PREFIX_MOD_3_0FAE_REG_4): Rename to ... + (PREFIX_0FAE_REG_4_MOD_3): ... this. + (PREFIX_MOD_0_0FAE_REG_5): Rename to ... + (PREFIX_0FAE_REG_5_MOD_0): ... this. + (PREFIX_MOD_3_0FAE_REG_5): Rename to ... + (PREFIX_0FAE_REG_5_MOD_3): ... this. + (PREFIX_MOD_0_0FAE_REG_6): Rename to ... + (PREFIX_0FAE_REG_6_MOD_0): ... this. + (PREFIX_MOD_1_0FAE_REG_6): Rename to ... + (PREFIX_0FAE_REG_6_MOD_3): ... this. + (PREFIX_0FAE_REG_7): Rename to ... + (PREFIX_0FAE_REG_7_MOD_0): ... this. + (PREFIX_MOD_0_0FC3): Rename to ... + (PREFIX_0FC3_MOD_0): ... this. + (PREFIX_MOD_0_0FC7_REG_6): Rename to ... + (PREFIX_0FC7_REG_6_MOD_0): ... this. + (PREFIX_MOD_3_0FC7_REG_6): Rename to ... + (PREFIX_0FC7_REG_6_MOD_3): ... this. + (PREFIX_MOD_3_0FC7_REG_7): Rename to ... + (PREFIX_0FC7_REG_7_MOD_3): ... this. + (reg_table, prefix_table, mod_table, rm_table): Adjust + accordingly. + +2019-11-04 Nick Clifton <nickc@redhat.com> + + * v850-dis.c (get_v850_sreg_name): New function. Returns the name + of a v850 system register. Move the v850_sreg_names array into + this function. + (get_v850_reg_name): Likewise for ordinary register names. + (get_v850_vreg_name): Likewise for vector register names. + (get_v850_cc_name): Likewise for condition codes. + * get_v850_float_cc_name): Likewise for floating point condition + codes. + (get_v850_cacheop_name): Likewise for cache-ops. + (get_v850_prefop_name): Likewise for pref-ops. + (disassemble): Use the new accessor functions. + +2019-10-30 Delia Burduv <delia.burduv@arm.com> + + * aarch64-opc.c (print_immediate_offset_address): Don't print the + immediate for the writeback form of ldraa/ldrab if it is 0. + * aarch64-tbl.h: Updated the documentation for ADDR_SIMM10. + * aarch64-opc-2.c: Regenerated. + +2019-10-30 Jan Beulich <jbeulich@suse.com> + + * i386-gen.c (operand_type_shorthands): Delete. + (operand_type_init): Expand previous shorthands. + (set_bitfield_from_shorthand): Rename back to ... + (set_bitfield_from_cpu_flag_init): ... this. Drop processing + of operand_type_init[]. + (set_bitfield): Adjust call to the above function. + * i386-opc.tbl (Reg8, Reg16, Reg32, Reg64, FloatAcc, FloatReg, + RegXMM, RegYMM, RegZMM): Define. + * i386-reg.tbl: Expand prior shorthands. + +2019-10-30 Jan Beulich <jbeulich@suse.com> + + * i386-gen.c (output_i386_opcode): Change order of fields + emitted to output. + * i386-opc.h (struct insn_template): Move operands field. + Convert extension_opcode field to unsigned short. + * i386-tbl.h: Re-generate. + +2019-10-30 Jan Beulich <jbeulich@suse.com> + + * i386-gen.c (process_i386_opcode_modifier): Report bogus uses + of W. + * i386-opc.h (W): Extend comment. + * i386-opc.tbl (mov, movabs, movq): Drop W and adjust opcodes of + general purpose variants not allowing for byte operands. + * i386-tbl.h: Re-generate. + +2019-10-29 Nick Clifton <nickc@redhat.com> + + * tic30-dis.c (print_branch): Correct size of operand array. + +2019-10-29 Nick Clifton <nickc@redhat.com> + + * d30v-dis.c (print_insn): Check that operand index is valid + before attempting to access the operands array. + +2019-10-29 Nick Clifton <nickc@redhat.com> + + * ia64-opc.c (locate_opcode_ent): Prevent a negative shift when + locating the bit to be tested. + +2019-10-29 Nick Clifton <nickc@redhat.com> + + * s12z-dis.c (opr_emit_disassembly): Check for illegal register + values. + (shift_size_table): Use a fixed size defined as S12Z_N_SIZES. + (print_insn_s12z): Check for illegal size values. + +2019-10-28 Nick Clifton <nickc@redhat.com> + + * csky-dis.c (csky_chars_to_number): Check for a negative + count. Use an unsigned integer to construct the return value. + +2019-10-28 Nick Clifton <nickc@redhat.com> + + * tic30-dis.c (OPERAND_BUFFER_LEN): Define. Use as length of + operand buffer. Set value to 15 not 13. + (get_register_operand): Use OPERAND_BUFFER_LEN. + (get_indirect_operand): Likewise. + (print_two_operand): Likewise. + (print_three_operand): Likewise. + (print_oar_insn): Likewise. + +2019-10-28 Nick Clifton <nickc@redhat.com> + + * ns32k-dis.c (bit_extract): Add sanitiy check of parameters. + (bit_extract_simple): Likewise. + (bit_copy): Likewise. + (pirnt_insn_ns32k): Ensure that uninitialised elements in the + index_offset array are not accessed. + +2019-10-28 Nick Clifton <nickc@redhat.com> + + * xgate-dis.c (print_insn): Fix decoding of the XGATE_OP_DYA + operand. + +2019-10-25 Nick Clifton <nickc@redhat.com> + + * rx-dis.c (print_insn_rx): Use parenthesis to ensure correct + access to opcodes.op array element. + +2019-10-23 Nick Clifton <nickc@redhat.com> + + * rx-dis.c (get_register_name): Fix spelling typo in error + message. + (get_condition_name, get_flag_name, get_double_register_name) + (get_double_register_high_name, get_double_register_low_name) + (get_double_control_register_name, get_double_condition_name) + (get_opsize_name, get_size_name): Likewise. + +2019-10-22 Nick Clifton <nickc@redhat.com> + + * rx-dis.c (get_size_name): New function. Provides safe + access to name array. + (get_opsize_name): Likewise. + (print_insn_rx): Use the accessor functions. + +2019-10-16 Nick Clifton <nickc@redhat.com> + + * rx-dis.c (get_register_name): New function. Provides safe + access to name array. + (get_condition_name, get_flag_name, get_double_register_name) + (get_double_register_high_name, get_double_register_low_name) + (get_double_control_register_name, get_double_condition_name): + Likewise. + (print_insn_rx): Use the accessor functions. + +2019-10-09 Nick Clifton <nickc@redhat.com> + + PR 25041 + * avr-dis.c (avr_operand): Fix construction of address for lds/sts + instructions. + +2019-10-07 Jan Beulich <jbeulich@suse.com> + + * opcodes/i386-opc.tbl (movsd): Add Dword and IgnoreSize. + (cmpsd): Likewise. Move EsSeg to other operand. + * opcodes/i386-tbl.h: Re-generate. + +2019-09-23 Alan Modra <amodra@gmail.com> + + * m68k-dis.c: Include cpu-m68k.h + +2019-09-23 Alan Modra <amodra@gmail.com> + + * mips-dis.c: Include elfxx-mips.h. Move "elf-bfd.h" and + "elf/mips.h" earlier. + +2018-09-20 Jan Beulich <jbeulich@suse.com> + + PR gas/25012 + * i386-opc.tbl (push, pop): Re-instate distinct Cpu64 templates + with SReg operand. + * i386-tbl.h: Re-generate. + +2019-09-18 Alan Modra <amodra@gmail.com> + + * arc-ext.c: Update throughout for bfd section macro changes. + +2019-09-18 Simon Marchi <simon.marchi@polymtl.ca> + + * Makefile.in: Re-generate. + * configure: Re-generate. + +2019-09-17 Maxim Blinov <maxim.blinov@embecosm.com> + + * riscv-opc.c (riscv_opcodes): Change subset field + to insn_class field for all instructions. + (riscv_insn_types): Likewise. + +2019-09-16 Phil Blundell <pb@pbcl.net> + + * configure: Regenerated. + +2019-09-10 Miod Vallat <miod@online.fr> + + PR 24982 + * m68k-opc.c: Correct aliases for tdivsl and tdivul. + +2019-09-09 Phil Blundell <pb@pbcl.net> + + binutils 2.33 branch created. + +2019-09-03 Nick Clifton <nickc@redhat.com> + + PR 24961 + * tic30-dis.c (get_indirect_operand): Check for bufcnt being + greater than zero before indexing via (bufcnt -1). + +2019-09-03 Nick Clifton <nickc@redhat.com> + + PR 24958 + * mmix-dis.c (MAX_REG_NAME_LEN): Define. + (MAX_SPEC_REG_NAME_LEN): Define. + (struct mmix_dis_info): Use defined constants for array lengths. + (get_reg_name): New function. + (get_sprec_reg_name): New function. + (print_insn_mmix): Use new functions. + +2019-08-27 Srinath Parvathaneni <srinath.parvathaneni@arm.com> + + * arm-dis.c (mve_opcodes): Add entry for MVE_VMOV_VEC_TO_VEC. + (is_mve_undefined): Add case for MVE_VMOV_VEC_TO_VEC. + (print_insn_mve): Add condition to check Qm==Qn of VORR instruction. + +2019-08-22 Kyrylo Tkachov <kyrylo.tkachov@arm.com> + + * aarch64-opc.c (aarch64_sys_regs): Update encoding of tfsre0_el1, + tfsr_el1, tfsr_el2, tfsr_el3, tfsr_el12. + (aarch64_sys_reg_supported_p): Update checks for the above. + +2019-08-12 Srinath Parvathaneni <srinath.parvathaneni@arm.com> + + * arm-dis.c (struct mopcode32 mve_opcodes): Modify the mask for + cases MVE_SQRSHRL and MVE_UQRSHLL. + (print_insn_mve): Add case for specifier 'k' to check + specific bit of the instruction. + +2019-08-07 Phillipe Antoine <p.antoine@catenacyber.fr> + + PR 24854 + * arc-dis.c (arc_insn_length): Return 0 rather than aborting when + encountering an unknown machine type. + (print_insn_arc): Handle arc_insn_length returning 0. In error + cases return -1 rather than calling abort. + +2019-08-07 Jan Beulich <jbeulich@suse.com> + + * i386-opc.tbl (fld, fstp): Drop FloatMF from extended forms. + (fldcw, fnstcw, fstcw, fnstsw, fstsw): Replace FloatMF by + IgnoreSize. + * i386-tbl.h: Re-generate. + +2019-08-05 Barnaby Wilks <barnaby.wilks@arm.com> + + * arm-dis.c: Only accept signed variants of VQ(R)DMLAH and VQ(R)DMLASH + instructions. + +2019-07-30 Mel Chen <mel.chen@sifive.com> + + * riscv-opc.c (riscv_opcodes): Set frsr, fssr, frcsr, fscsr, frrm, + fsrm, fsrmi, frflags, fsflags, fsflagsi to alias instructions. + + * riscv-opc.c (riscv_opcodes): Adjust order of frsr, frcsr, fssr, + fscsr. + +2019-07-24 Claudiu Zissulescu <claziss@synopsys.com> + + * arc-dis.c (skip_this_opcode): Check also for 0x07 major opcodes, + and MPY class instructions. + (parse_option): Add nps400 option. + (print_arc_disassembler_options): Add nps400 info. + +2019-07-24 Claudiu Zissulescu <claziss@synopsys.com> + + * arc-ext-tbl.h (bspeek): Remove it, added to main table. + (bspop): Likewise. + (modapp): Likewise. + * arc-opc.c (RAD_CHK): Add. + * arc-tbl.h: Regenerate. + +2019-07-23 Kyrylo Tkachov <kyrylo.tkachov@arm.com> + + * aarch64-opc.c (aarch64_sys_regs): Add gmid_el1 entry. + (aarch64_sys_reg_supported_p): Handle gmid_el1 encoding. + +2019-07-22 Barnaby Wilks <barnaby.wilks@arm.com> + + * arm-dis.c (is_mve_unpredictable): Stop marking some MVE + instructions as UNPREDICTABLE. + +2019-07-19 Jose E. Marchesi <jose.marchesi@oracle.com> + + * bpf-desc.c: Regenerated. + +2019-07-17 Jan Beulich <jbeulich@suse.com> + + * i386-gen.c (static_assert): Define. + (main): Use it. + * i386-opc.h (Opcode_Modifier_Max): Rename to ... + (Opcode_Modifier_Num): ... this. + (Mem): Delete. + +2019-07-16 Jan Beulich <jbeulich@suse.com> + + * i386-gen.c (operand_types): Move RegMem ... + (opcode_modifiers): ... here. + * i386-opc.h (RegMem): Move to opcode modifer enum. + (union i386_operand_type): Move regmem field ... + (struct i386_opcode_modifier): ... here. + * i386-opc.tbl (RegMem): Define. + (mov, movq): Move RegMem on segment, control, debug, and test + register flavors. + (pextrb): Move RegMem on register only flavors. Add IgnoreSize + to non-SSE2AVX flavor. + (extractps, pextrw, vcvtps2ph, vextractps, vpextrb, vpextrw): + Move RegMem on register only flavors. Drop IgnoreSize from + legacy encoding flavors. + (movss, movsd, vmovss, vmovsd): Drop RegMem from register only + flavors. + (vpinsrb, vpinsrw): Drop IgnoreSize where still present on + register only flavors. + (vmovd): Move RegMem and drop IgnoreSize on register only + flavor. Change opcode and operand order to store form. + * opcodes/i386-init.h, i386-tbl.h: Re-generate. + +2019-07-16 Jan Beulich <jbeulich@suse.com> + + * i386-gen.c (operand_type_init, operand_types): Replace SReg + entries. + * i386-opc.h (SReg2, SReg3): Replace by ... + (SReg): ... this. + (union i386_operand_type): Replace sreg fields. + * i386-opc.tbl (mov, ): Use SReg. + (push, pop): Likewies. Drop i386 and x86-64 specific segment + register flavors. + * i386-reg.tbl (cs, ds, es, fs, gs, ss, flat): Use SReg. + * opcodes/i386-init.h, i386-tbl.h: Re-generate. + +2019-07-15 Jose E. Marchesi <jose.marchesi@oracle.com> + + * bpf-desc.c: Regenerate. + * bpf-opc.c: Likewise. + * bpf-opc.h: Likewise. + +2019-07-14 Jose E. Marchesi <jose.marchesi@oracle.com> + + * bpf-desc.c: Regenerate. + * bpf-opc.c: Likewise. + +2019-07-10 Hans-Peter Nilsson <hp@bitrange.com> + + * arm-dis.c (print_insn_coprocessor): Rename index to + index_operand. + +2019-07-05 Kito Cheng <kito.cheng@sifive.com> + + * riscv-opc.c (riscv_insn_types): Add r4 type. + + * riscv-opc.c (riscv_insn_types): Add b and j type. + + * opcodes/riscv-opc.c (riscv_insn_types): Remove incorrect + format for sb type and correct s type. + +2019-07-02 Richard Sandiford <richard.sandiford@arm.com> + + * aarch64-tbl.h (aarch64_opcode): Set C_SCAN_MOVPRFX for the + SVE FMOV alias of FCPY. + +2019-07-02 Richard Sandiford <richard.sandiford@arm.com> + + * aarch64-tbl.h (aarch64_opcode_table): Add C_MAX_ELEM flags + to SVE fcvtzs, fcvtzu, scvtf and ucvtf entries. + +2019-07-02 Richard Sandiford <richard.sandiford@arm.com> + + * aarch64-opc.c (verify_constraints): Skip GPRs when scanning the + registers in an instruction prefixed by MOVPRFX. + +2019-07-01 Matthew Malcomson <matthew.malcomson@arm.com> + + * aarch64-asm.c (aarch64_encode_variant_using_iclass): Use new + sve_size_13 icode to account for variant behaviour of + pmull{t,b}. + * aarch64-dis-2.c: Regenerate. + * aarch64-dis.c (aarch64_decode_variant_using_iclass): Use new + sve_size_13 icode to account for variant behaviour of + pmull{t,b}. + * aarch64-tbl.h (OP_SVE_VVV_HD_BS): Add new qualifier. + (OP_SVE_VVV_Q_D): Add new qualifier. + (OP_SVE_VVV_QHD_DBS): Remove now unused qualifier. + (struct aarch64_opcode): Split pmull{t,b} into those requiring + AES and those not. + +2019-07-01 Jan Beulich <jbeulich@suse.com> + + * opcodes/i386-gen.c (operand_type_init): Remove + OPERAND_TYPE_VEC_IMM4 entry. + (operand_types): Remove Vec_Imm4. + * opcodes/i386-opc.h (Vec_Imm4): Delete. + (union i386_operand_type): Remove vec_imm4. + * i386-opc.tbl (vpermil2pd, vpermil2ps): Remove Vec_Imm4. + * opcodes/i386-init.h, i386-tbl.h: Re-generate. + +2019-07-01 Jan Beulich <jbeulich@suse.com> + + * i386-opc.tbl (lfence, mfence, sfence, monitor, mwait, vmcall, + vmlaunch, vmresume, vmxoff, vmfunc, xgetbv, xsetbv, swapgs, + rdtscp, clgi, invlpga, skinit, stgi, vmload, vmmcall, vmrun, + vmsave, montmul, xsha1, xsha256, xstorerng, xcryptecb, + xcryptcbc, xcryptctr, xcryptcfb, xcryptofb, xstore, clac, stac, + monitorx, mwaitx): Drop ImmExt from operand-less forms. + * i386-tbl.h: Re-generate. + +2019-07-01 Jan Beulich <jbeulich@suse.com> + + * i386-opc.tbl (and, or): Add Optimize to forms allowing two + register operands. + * i386-tbl.h: Re-generate. + +2019-07-01 Jan Beulich <jbeulich@suse.com> + + * i386-opc.tbl (C): New. + (paddb, paddw, paddd, paddq, paddsb, paddsw, paddusb, paddusw, + pand, pcmpeqb, pcmpeqw, pcmpeqd, pmaddwd, pmulhw, pmullw, + por, pxor, andps, cmpeqps, cmpeqss, cmpneqps, cmpneqss, + cmpordps, cmpordss, cmpunordps, cmpunordss, orps, pavgb, pavgw, + pmaxsw, pmaxub, pminsw, pminub, pmulhuw, xorps, andpd, cmpeqpd, + cmpeqsd, cmpneqpd, cmpneqsd, cmpordpd, cmpordsd, cmpunordpd, + cmpunordsd, orpd, xorpd, pmuludq, vandpd, vandps, vcmpeq_ospd, + vcmpeq_osps, vcmpeq_ossd, vcmpeq_osss, vcmpeqpd, vcmpeqps, + vcmpeqsd, vcmpeqss, vcmpeq_uqpd, vcmpeq_uqps, vcmpeq_uqsd, + vcmpeq_uqss, vcmpeq_uspd, vcmpeq_usps, vcmpeq_ussd, + vcmpeq_usss, vcmpfalse_ospd, vcmpfalse_osps, vcmpfalse_ossd, + vcmpfalse_osss, vcmpfalsepd, vcmpfalseps, vcmpfalsesd, + vcmpfalsess, vcmpneq_oqpd, vcmpneq_oqps, vcmpneq_oqsd, + vcmpneq_oqss, vcmpneq_ospd, vcmpneq_osps, vcmpneq_ossd, + vcmpneq_osss, vcmpneqpd, vcmpneqps, vcmpneqsd, vcmpneqss, + vcmpneq_uspd, vcmpneq_usps, vcmpneq_ussd, vcmpneq_usss, + vcmpordpd, vcmpordps, vcmpordsd, vcmpord_spd, vcmpord_sps, + vcmpordss, vcmpord_ssd, vcmpord_sss, vcmptruepd, vcmptrueps, + vcmptruesd, vcmptruess, vcmptrue_uspd, vcmptrue_usps, + vcmptrue_ussd, vcmptrue_usss, vcmpunordpd, vcmpunordps, + vcmpunordsd, vcmpunord_spd, vcmpunord_sps, vcmpunordss, + vcmpunord_ssd, vcmpunord_sss, vorpd, vorps, vpaddsb, vpaddsw, + vpaddb, vpaddd, vpaddq, vpaddw, vpaddusb, vpaddusw, vpand, + vpavgb, vpavgw, vpcmpeqb, vpcmpeqd, vpcmpeqw, vpmaddwd, + vpmaxsw, vpmaxub, vpminsw, vpminub, vpmulhuw, vpmulhw, vpmullw, + vpmuludq, vpor, vpxor, vxorpd, vxorps): Add C to VEX-encoded + flavors. + * i386-tbl.h: Re-generate. + +2019-07-01 Jan Beulich <jbeulich@suse.com> + + * i386-opc.tbl (and, or): Add Optimize to forms allowing two + register operands. + * i386-tbl.h: Re-generate. + +2019-07-01 Jan Beulich <jbeulich@suse.com> + + * i386-dis-evex-prefix.h: Use PCLMUL for vpclmulqdq. + * i386-opc.tbl (vpclmullqlqdq, vpclmulhqlqdq, vpclmullqhqdq, + vpclmulhqhqdq): Add CpuVPCLMULQDQ flavors. + * i386-tbl.h: Re-generate. + +2019-07-01 Jan Beulich <jbeulich@suse.com> + + * i386-opc.tbl (vextractps, vpextrw, vpinsrw): Remove + Disp8MemShift from register only templates. + * i386-tbl.h: Re-generate. + +2019-07-01 Jan Beulich <jbeulich@suse.com> + + * i386-dis.c (EXdScalarS, MOD_EVEX_0F10_PREFIX_1, + MOD_EVEX_0F10_PREFIX_3, MOD_EVEX_0F11_PREFIX_1, + MOD_EVEX_0F11_PREFIX_3, EVEX_W_0F10_P_1_M_0, + EVEX_W_0F10_P_1_M_1, EVEX_W_0F10_P_3_M_0, EVEX_W_0F10_P_3_M_1, + EVEX_W_0F11_P_1_M_0, EVEX_W_0F11_P_1_M_1, EVEX_W_0F11_P_3_M_0, + EVEX_W_0F11_P_3_M_1): Delete. + (EVEX_W_0F10_P_1, EVEX_W_0F10_P_3, EVEX_W_0F11_P_1, + EVEX_W_0F11_P_3): New. + * i386-dis-evex-mod.h: Remove MOD_EVEX_0F10_PREFIX_1, + MOD_EVEX_0F10_PREFIX_3, MOD_EVEX_0F11_PREFIX_1, and + MOD_EVEX_0F11_PREFIX_3 table entries. + * i386-dis-evex-prefix.h: Adjust PREFIX_EVEX_0F10 and + PREFIX_EVEX_0F11 table entries. + * i386-dis-evex-w.h: Replace EVEX_W_0F10_P_1_M_{0,1}, + EVEX_W_0F10_P_3_M_{0,1}, EVEX_W_0F11_P_1_M_{0,1}, and + EVEX_W_0F11_P_3_M_{0,1} table entries. + +2019-07-01 Jan Beulich <jbeulich@suse.com> + + * i386-dis.c (EXdVex, EXdVexS, EXqVex, EXqVexS, XMVex): + Delete. + +2019-06-27 H.J. Lu <hongjiu.lu@intel.com> + + PR binutils/24719 + * i386-dis-evex-len.h: Add EVEX_LEN_0F38C6_REG_1_PREFIX_2, + EVEX_LEN_0F38C6_REG_2_PREFIX_2, EVEX_LEN_0F38C6_REG_5_PREFIX_2, + EVEX_LEN_0F38C6_REG_6_PREFIX_2, EVEX_LEN_0F38C7_R_1_P_2_W_0, + EVEX_LEN_0F38C7_R_1_P_2_W_1, EVEX_LEN_0F38C7_R_2_P_2_W_0, + EVEX_LEN_0F38C7_R_2_P_2_W_1, EVEX_LEN_0F38C7_R_5_P_2_W_0, + EVEX_LEN_0F38C7_R_5_P_2_W_1, EVEX_LEN_0F38C7_R_6_P_2_W_0 and + EVEX_LEN_0F38C7_R_6_P_2_W_1. + * i386-dis-evex-prefix.h: Update PREFIX_EVEX_0F38C6_REG_1, + PREFIX_EVEX_0F38C6_REG_2, PREFIX_EVEX_0F38C6_REG_5 and + PREFIX_EVEX_0F38C6_REG_6 entries. + * i386-dis-evex-w.h: Update EVEX_W_0F38C7_R_1_P_2, + EVEX_W_0F38C7_R_2_P_2, EVEX_W_0F38C7_R_5_P_2 and + EVEX_W_0F38C7_R_6_P_2 entries. + * i386-dis.c: Add EVEX_LEN_0F38C6_REG_1_PREFIX_2, + EVEX_LEN_0F38C6_REG_2_PREFIX_2, EVEX_LEN_0F38C6_REG_5_PREFIX_2, + EVEX_LEN_0F38C6_REG_6_PREFIX_2, EVEX_LEN_0F38C7_R_1_P_2_W_0, + EVEX_LEN_0F38C7_R_1_P_2_W_1, EVEX_LEN_0F38C7_R_2_P_2_W_0, + EVEX_LEN_0F38C7_R_2_P_2_W_1, EVEX_LEN_0F38C7_R_5_P_2_W_0, + EVEX_LEN_0F38C7_R_5_P_2_W_1, EVEX_LEN_0F38C7_R_6_P_2_W_0 and + EVEX_LEN_0F38C7_R_6_P_2_W_1 enums. + +2019-06-27 Jan Beulich <jbeulich@suse.com> + + * i386-dis.c (VEX_LEN_0F2A_P_1, VEX_LEN_0F2A_P_3, + VEX_LEN_0F2C_P_1, VEX_LEN_0F2C_P_3, VEX_LEN_0F2D_P_1, + VEX_LEN_0F2D_P_3): Delete. + (vex_len_table): Move vcvtsi2ss, vcvtsi2sd, vcvttss2si, + vcvttsd2si, vcvtss2si, and vcvtsd2si leaf entries ... + (prefix_table): ... here. + +2019-06-27 Jan Beulich <jbeulich@suse.com> + + * i386-dis.c (Iq): Delete. + (Id): New. + (reg_table): Use it for lwpins, lwpval, and bextr. Use Edq for + TBM insns. + (vex_len_table): Use Edq for vcvtsi2ss, vcvtsi2sd. Use Gdq for + vcvttss2si, vcvttsd2si, vcvtss2si, and vcvtsd2si. + (OP_E_memory): Also honor needindex when deciding whether an + address size prefix needs printing. + (OP_I): Remove handling of q_mode. Add handling of d_mode. + +2019-06-26 Jim Wilson <jimw@sifive.com> + + PR binutils/24739 + * riscv-dis.c (riscv_disasemble_insn): Set info->endian_code. + Set info->display_endian to info->endian_code. + +2019-06-25 Jan Beulich <jbeulich@suse.com> + + * i386-gen.c (operand_type_init): Correct OPERAND_TYPE_DEBUG + entry. Drop OPERAND_TYPE_ACC entry. Add OPERAND_TYPE_ACC8 and + OPERAND_TYPE_ACC16 entries. Adjust OPERAND_TYPE_ACC32 and + OPERAND_TYPE_ACC64 entries. + * i386-init.h: Re-generate. + +2019-06-25 Jan Beulich <jbeulich@suse.com> + + * i386-dis.c (Edqa, dqa_mode, EVEX_W_0F2A_P_1, EVEX_W_0F7B_P_1): + Delete. + (intel_operand_size, OP_E_register, OP_E_memory): Drop handling + of dqa_mode. + * i386-dis-evex-prefix.h: Move vcvtsi2ss and vcvtusi2ss leaf + entries here. + * i386-dis-evex-w.h: Drop EVEX_W_0F2A_P_1 and EVEX_W_0F7B_P_1 + entries. Use Edq for vcvtsi2sd and vcvtusi2sd. + +2019-06-25 Jan Beulich <jbeulich@suse.com> + + * i386-dis.c (OP_I64): Forword more cases to OP_I(). Drop local + variables. + +2019-06-25 Jan Beulich <jbeulich@suse.com> + + * i386-dis.c (prefix_table): Use Edq for cvtsi2ss and cvtsi2sd. + Use Gdq for cvttss2si, cvttsd2si, cvtss2si, and cvtsd2si, and + movnti. + * i386-opc.tbl (movnti): Add IgnoreSize. + * i386-tbl.h: Re-generate. + +2019-06-25 Jan Beulich <jbeulich@suse.com> + + * i386-opc.tbl (and): Mark Imm8S form for optimization. + * i386-tbl.h: Re-generate. + +2019-06-21 H.J. Lu <hongjiu.lu@intel.com> + + * i386-dis-evex.h: Break into ... + * i386-dis-evex-len.h: New file. + * i386-dis-evex-mod.h: Likewise. + * i386-dis-evex-prefix.h: Likewise. + * i386-dis-evex-reg.h: Likewise. + * i386-dis-evex-w.h: Likewise. + * i386-dis.c: Include i386-dis-evex-reg.h, i386-dis-evex-prefix.h, + i386-dis-evex.h, i386-dis-evex-len.h, i386-dis-evex-w.h and + i386-dis-evex-mod.h. + +2019-06-19 H.J. Lu <hongjiu.lu@intel.com> + + PR binutils/24700 + * i386-dis-evex.h (evex_table): Update EVEX_W_0F3819_P_2, + EVEX_W_0F381A_P_2, EVEX_W_0F381B_P_2, EVEX_W_0F385A_P_2 and + EVEX_W_0F385B_P_2. + (evex_len_table): Add EVEX_LEN_0F3819_P_2_W_0, + EVEX_LEN_0F3819_P_2_W_1, EVEX_LEN_0F381A_P_2_W_0, + EVEX_LEN_0F381A_P_2_W_1, EVEX_LEN_0F381B_P_2_W_0, + EVEX_LEN_0F381B_P_2_W_1, EVEX_LEN_0F385A_P_2_W_0, + EVEX_LEN_0F385A_P_2_W_1, EVEX_LEN_0F385B_P_2_W_0 and + EVEX_LEN_0F385B_P_2_W_1. + * i386-dis.c (EVEX_LEN_0F3819_P_2_W_0): New enum. + (EVEX_LEN_0F3819_P_2_W_1): Likewise. + (EVEX_LEN_0F381A_P_2_W_0): Likewise. + (EVEX_LEN_0F381A_P_2_W_1): Likewise. + (EVEX_LEN_0F381B_P_2_W_0): Likewise. + (EVEX_LEN_0F381B_P_2_W_1): Likewise. + (EVEX_LEN_0F385A_P_2_W_0): Likewise. + (EVEX_LEN_0F385A_P_2_W_1): Likewise. + (EVEX_LEN_0F385B_P_2_W_0): Likewise. + (EVEX_LEN_0F385B_P_2_W_1): Likewise. + +2019-06-17 H.J. Lu <hongjiu.lu@intel.com> + + PR binutils/24691 + * i386-dis-evex.h (evex_table): Update EVEX_W_0F3A23_P_2, + EVEX_W_0F3A38_P_2, EVEX_W_0F3A39_P_2, EVEX_W_0F3A3A_P_2, + EVEX_W_0F3A3B_P_2 and EVEX_W_0F3A43_P_2. + (evex_len_table): Add EVEX_LEN_0F3A23_P_2_W_0, + EVEX_LEN_0F3A23_P_2_W_1, EVEX_LEN_0F3A38_P_2_W_0, + EVEX_LEN_0F3A38_P_2_W_1, EVEX_LEN_0F3A39_P_2_W_0, + EVEX_LEN_0F3A39_P_2_W_1, EVEX_LEN_0F3A3A_P_2_W_0, + EVEX_LEN_0F3A3A_P_2_W_1, EVEX_LEN_0F3A3B_P_2_W_0, + EVEX_LEN_0F3A3B_P_2_W_1, EVEX_LEN_0F3A43_P_2_W_0 and + EVEX_LEN_0F3A43_P_2_W_1. + * i386-dis.c (EVEX_LEN_0F3A23_P_2_W_0): New enum. + (EVEX_LEN_0F3A23_P_2_W_1): Likewise. + (EVEX_LEN_0F3A38_P_2_W_0): Likewise. + (EVEX_LEN_0F3A38_P_2_W_1): Likewise. + (EVEX_LEN_0F3A39_P_2_W_0): Likewise. + (EVEX_LEN_0F3A39_P_2_W_1): Likewise. + (EVEX_LEN_0F3A3A_P_2_W_0): Likewise. + (EVEX_LEN_0F3A3A_P_2_W_1): Likewise. + (EVEX_LEN_0F3A3B_P_2_W_0): Likewise. + (EVEX_LEN_0F3A3B_P_2_W_1): Likewise. + (EVEX_LEN_0F3A43_P_2_W_0): Likewise. + (EVEX_LEN_0F3A43_P_2_W_1): Likewise. + +2019-06-14 Nick Clifton <nickc@redhat.com> + + * po/fr.po; Updated French translation. + +2019-06-13 Stafford Horne <shorne@gmail.com> + + * or1k-asm.c: Regenerated. + * or1k-desc.c: Regenerated. + * or1k-desc.h: Regenerated. + * or1k-dis.c: Regenerated. + * or1k-ibld.c: Regenerated. + * or1k-opc.c: Regenerated. + * or1k-opc.h: Regenerated. + * or1k-opinst.c: Regenerated. + +2019-06-12 Peter Bergner <bergner@linux.ibm.com> + + * ppc-opc.c (powerpc_opcodes) <ldmx>: Delete mnemonic. + +2019-06-05 H.J. Lu <hongjiu.lu@intel.com> + + PR binutils/24633 + * i386-dis-evex.h (evex_table): Update EVEX_W_0F3A18_P_2, + EVEX_W_0F3A19_P_2, EVEX_W_0F3A1A_P_2 and EVEX_W_0F3A1B_P_2. + (evex_len_table): EVEX_LEN_0F3A18_P_2_W_0, + EVEX_LEN_0F3A18_P_2_W_1, EVEX_LEN_0F3A19_P_2_W_0, + EVEX_LEN_0F3A19_P_2_W_1, EVEX_LEN_0F3A1A_P_2_W_0, + EVEX_LEN_0F3A1A_P_2_W_1, EVEX_LEN_0F3A1B_P_2_W_0, + EVEX_LEN_0F3A1B_P_2_W_1. + * i386-dis.c (EVEX_LEN_0F3A18_P_2_W_0): New enum. + (EVEX_LEN_0F3A18_P_2_W_1): Likewise. + (EVEX_LEN_0F3A19_P_2_W_0): Likewise. + (EVEX_LEN_0F3A19_P_2_W_1): Likewise. + (EVEX_LEN_0F3A1A_P_2_W_0): Likewise. + (EVEX_LEN_0F3A1A_P_2_W_1): Likewise. + (EVEX_LEN_0F3A1B_P_2_W_0): Likewise. + (EVEX_LEN_0F3A1B_P_2_W_1): Likewise. + +2019-06-04 H.J. Lu <hongjiu.lu@intel.com> + + PR binutils/24626 + * i386-dis.c (print_insn): Check for unused VEX.vvvv and + EVEX.vvvv when disassembling VEX and EVEX instructions. + (OP_VEX): Set vex.register_specifier to 0 after readding + vex.register_specifier. + (OP_Vex_2src_1): Likewise. + (OP_Vex_2src_2): Likewise. + (OP_LWP_E): Likewise. + (OP_EX_Vex): Don't check vex.register_specifier. + (OP_XMM_Vex): Likewise. + +2019-06-04 Igor Tsimbalist <igor.v.tsimbalist@intel.com> + Lili Cui <lili.cui@intel.com> + + * i386-dis.c (enum): Add PREFIX_EVEX_0F3868, EVEX_W_0F3868_P_3. + * i386-dis-evex.h (evex_table): Add AVX512_VP2INTERSECT + instructions. + * i386-gen.c (cpu_flag_init): Add CPU_AVX512_VP2INTERSECT_FLAGS, + CPU_ANY_AVX512_VP2INTERSECT_FLAGS. + (cpu_flags): Add CpuAVX512_VP2INTERSECT. + * i386-opc.h (enum): Add CpuAVX512_VP2INTERSECT. + (i386_cpu_flags): Add cpuavx512_vp2intersect. + * i386-opc.tbl: Add AVX512_VP2INTERSECT insns. + * i386-init.h: Regenerated. + * i386-tbl.h: Likewise. + +2019-06-04 Xuepeng Guo <xuepeng.guo@intel.com> + Lili Cui <lili.cui@intel.com> + + * doc/c-i386.texi: Document enqcmd. + * testsuite/gas/i386/enqcmd-intel.d: New file. + * testsuite/gas/i386/enqcmd-inval.l: Likewise. + * testsuite/gas/i386/enqcmd-inval.s: Likewise. + * testsuite/gas/i386/enqcmd.d: Likewise. + * testsuite/gas/i386/enqcmd.s: Likewise. + * testsuite/gas/i386/x86-64-enqcmd-intel.d: Likewise. + * testsuite/gas/i386/x86-64-enqcmd-inval.l: Likewise. + * testsuite/gas/i386/x86-64-enqcmd-inval.s: Likewise. + * testsuite/gas/i386/x86-64-enqcmd.d: Likewise. + * testsuite/gas/i386/x86-64-enqcmd.s: Likewise. + * testsuite/gas/i386/i386.exp: Run enqcmd-intel, enqcmd-inval, + enqcmd, x86-64-enqcmd-intel, x86-64-enqcmd-inval, + and x86-64-enqcmd. + +2019-06-04 Alan Hayward <alan.hayward@arm.com> + + * arm-dis.c (is_mve_unpredictable): Remove spurious paranthesis. + +2019-06-03 Alan Modra <amodra@gmail.com> + + * ppc-dis.c (prefix_opcd_indices): Correct size. + +2019-05-28 H.J. Lu <hongjiu.lu@intel.com> + + PR gas/24625 + * i386-opc.tbl: Add CheckRegSize to AVX512_BF16 instructions with + Disp8ShiftVL. + * i386-tbl.h: Regenerated. + +2019-05-24 Alan Modra <amodra@gmail.com> + + * po/POTFILES.in: Regenerate. + +2019-05-24 Peter Bergner <bergner@linux.ibm.com> + Alan Modra <amodra@gmail.com> + + * ppc-opc.c (insert_d34, extract_d34, insert_nsi34, extract_nsi34), + (insert_pcrel, extract_pcrel, extract_pcrel0): New functions. + (extract_esync, extract_raq, extract_tbr, extract_sxl): Comment. + (powerpc_operands <D34, SI34, NSI34, PRA0, PRAQ, PCREL, PCREL0, + XTOP>): Define and add entries. + (P8LS, PMLS, P_D_MASK, P_DRAPCREL_MASK): Define. + (prefix_opcodes): Add pli, paddi, pla, psubi, plwz, plbz, pstw, + pstb, plhz, plha, psth, plfs, plfd, pstfs, pstfd, plq, plxsd, + plxssp, pld, plwa, pstxsd, pstxssp, pstxv, pstd, and pstq. + +2019-05-24 Peter Bergner <bergner@linux.ibm.com> + Alan Modra <amodra@gmail.com> + + * ppc-dis.c (ppc_opts): Add "future" entry. + (PREFIX_OPCD_SEGS): Define. + (prefix_opcd_indices): New array. + (disassemble_init_powerpc): Initialize prefix_opcd_indices. + (lookup_prefix): New function. + (print_insn_powerpc): Handle 64-bit prefix instructions. + * ppc-opc.c (PREFIX_OP, PREFIX_FORM, SUFFIX_MASK, PREFIX_MASK), + (PMRR, POWERXX): Define. + (prefix_opcodes): New instruction table. + (prefix_num_opcodes): New constant. + +2019-05-23 Jose E. Marchesi <jose.marchesi@oracle.com> + + * configure.ac (SHARED_DEPENDENCIES): Add case for bfd_bpf_arch. + * configure: Regenerated. + * Makefile.am: Add rules for the files generated from cpu/bpf.cpu + and cpu/bpf.opc. + (HFILES): Add bpf-desc.h and bpf-opc.h. + (TARGET_LIBOPCODES_CFILES): Add bpf-asm.c, bpf-desc.c, bpf-dis.c, + bpf-ibld.c and bpf-opc.c. + (BPF_DEPS): Define. + * Makefile.in: Regenerated. + * disassemble.c (ARCH_bpf): Define. + (disassembler): Add case for bfd_arch_bpf. + (disassemble_init_for_target): Likewise. + (enum epbf_isa_attr): Define. + * disassemble.h: extern print_insn_bpf. + * bpf-asm.c: Generated. + * bpf-opc.h: Likewise. + * bpf-opc.c: Likewise. + * bpf-ibld.c: Likewise. + * bpf-dis.c: Likewise. + * bpf-desc.h: Likewise. + * bpf-desc.c: Likewise. + +2019-05-21 Sudakshina Das <sudi.das@arm.com> + + * arm-dis.c (coprocessor_opcodes): New instructions for VMRS + and VMSR with the new operands. + +2019-05-21 Sudakshina Das <sudi.das@arm.com> + + * arm-dis.c (enum mve_instructions): New enum + for csinc, csinv, csneg, csel, cset, csetm, cinv, cinv + and cneg. + (mve_opcodes): New instructions as above. + (is_mve_encoding_conflict): Add cases for csinc, csinv, + csneg and csel. + (print_insn_mve): Accept new %<bitfield>c and %<bitfield>C. + +2019-05-21 Sudakshina Das <sudi.das@arm.com> + + * arm-dis.c (emun mve_instructions): Updated for new instructions. + (mve_opcodes): New instructions for asrl, lsll, lsrl, sqrshrl, + sqrshr, sqshl, sqshll, srshr, srshrl, uqrshll, uqrshl, uqshll, + uqshl, urshrl and urshr. + (is_mve_okay_in_it): Add new instructions to TRUE list. + (is_mve_unpredictable): Add cases for UNPRED_R13 and UNPRED_R15. + (print_insn_mve): Updated to accept new %j, + %<bitfield>m and %<bitfield>n patterns. + +2019-05-21 Faraz Shahbazker <fshahbazker@wavecomp.com> + + * mips-opc.c (mips_builtin_opcodes): Change source register + constraint for DAUI. + +2019-05-20 Nick Clifton <nickc@redhat.com> + + * po/fr.po: Updated French translation. + +2019-05-16 Andre Vieira <andre.simoesdiasvieira@arm.com> + Michael Collison <michael.collison@arm.com> + + * arm-dis.c (thumb32_opcodes): Add new instructions. + (enum mve_instructions): Likewise. + (enum mve_undefined): Add new reasons. + (is_mve_encoding_conflict): Handle new instructions. + (is_mve_undefined): Likewise. + (is_mve_unpredictable): Likewise. + (print_mve_undefined): Likewise. + (print_mve_size): Likewise. + +2019-05-16 Andre Vieira <andre.simoesdiasvieira@arm.com> + Michael Collison <michael.collison@arm.com> + + * arm-dis.c (thumb32_opcodes): Add new instructions. + (enum mve_instructions): Likewise. + (is_mve_encoding_conflict): Handle new instructions. + (is_mve_undefined): Likewise. + (is_mve_unpredictable): Likewise. + (print_mve_size): Likewise. + +2019-05-16 Andre Vieira <andre.simoesdiasvieira@arm.com> + Michael Collison <michael.collison@arm.com> + + * arm-dis.c (thumb32_opcodes): Add new instructions. + (enum mve_instructions): Likewise. + (is_mve_encoding_conflict): Likewise. + (is_mve_unpredictable): Likewise. + (print_mve_size): Likewise. + +2019-05-16 Andre Vieira <andre.simoesdiasvieira@arm.com> + Michael Collison <michael.collison@arm.com> + + * arm-dis.c (thumb32_opcodes): Add new instructions. + (enum mve_instructions): Likewise. + (is_mve_encoding_conflict): Handle new instructions. + (is_mve_undefined): Likewise. + (is_mve_unpredictable): Likewise. + (print_mve_size): Likewise. + +2019-05-16 Andre Vieira <andre.simoesdiasvieira@arm.com> + Michael Collison <michael.collison@arm.com> + + * arm-dis.c (thumb32_opcodes): Add new instructions. + (enum mve_instructions): Likewise. + (is_mve_encoding_conflict): Handle new instructions. + (is_mve_undefined): Likewise. + (is_mve_unpredictable): Likewise. + (print_mve_size): Likewise. + (print_insn_mve): Likewise. + +2019-05-16 Andre Vieira <andre.simoesdiasvieira@arm.com> + Michael Collison <michael.collison@arm.com> + + * arm-dis.c (thumb32_opcodes): Add new instructions. + (print_insn_thumb32): Handle new instructions. + +2019-05-16 Andre Vieira <andre.simoesdiasvieira@arm.com> + Michael Collison <michael.collison@arm.com> + + * arm-dis.c (enum mve_instructions): Add new instructions. + (enum mve_undefined): Add new reasons. + (is_mve_encoding_conflict): Handle new instructions. + (is_mve_undefined): Likewise. + (is_mve_unpredictable): Likewise. + (print_mve_undefined): Likewise. + (print_mve_size): Likewise. + (print_mve_shift_n): Likewise. + (print_insn_mve): Likewise. + +2019-05-16 Andre Vieira <andre.simoesdiasvieira@arm.com> + Michael Collison <michael.collison@arm.com> + + * arm-dis.c (enum mve_instructions): Add new instructions. + (is_mve_encoding_conflict): Handle new instructions. + (is_mve_unpredictable): Likewise. + (print_mve_rotate): Likewise. + (print_mve_size): Likewise. + (print_insn_mve): Likewise. + +2019-05-16 Andre Vieira <andre.simoesdiasvieira@arm.com> + Michael Collison <michael.collison@arm.com> + + * arm-dis.c (enum mve_instructions): Add new instructions. + (is_mve_encoding_conflict): Handle new instructions. + (is_mve_unpredictable): Likewise. + (print_mve_size): Likewise. + (print_insn_mve): Likewise. + +2019-05-16 Andre Vieira <andre.simoesdiasvieira@arm.com> + Michael Collison <michael.collison@arm.com> + + * arm-dis.c (enum mve_instructions): Add new instructions. + (enum mve_undefined): Add new reasons. + (is_mve_encoding_conflict): Handle new instructions. + (is_mve_undefined): Likewise. + (is_mve_unpredictable): Likewise. + (print_mve_undefined): Likewise. + (print_mve_size): Likewise. + (print_insn_mve): Likewise. + +2019-05-16 Andre Vieira <andre.simoesdiasvieira@arm.com> + Michael Collison <michael.collison@arm.com> + + * arm-dis.c (enum mve_instructions): Add new instructions. + (is_mve_encoding_conflict): Handle new instructions. + (is_mve_undefined): Likewise. + (is_mve_unpredictable): Likewise. + (print_mve_size): Likewise. + (print_insn_mve): Likewise. + +2019-05-16 Andre Vieira <andre.simoesdiasvieira@arm.com> + Michael Collison <michael.collison@arm.com> + + * arm-dis.c (enum mve_instructions): Add new instructions. + (enum mve_unpredictable): Add new reasons. + (enum mve_undefined): Likewise. + (is_mve_okay_in_it): Handle new isntructions. + (is_mve_encoding_conflict): Likewise. + (is_mve_undefined): Likewise. + (is_mve_unpredictable): Likewise. + (print_mve_vmov_index): Likewise. + (print_simd_imm8): Likewise. + (print_mve_undefined): Likewise. + (print_mve_unpredictable): Likewise. + (print_mve_size): Likewise. + (print_insn_mve): Likewise. + +2019-05-16 Andre Vieira <andre.simoesdiasvieira@arm.com> + Michael Collison <michael.collison@arm.com> + + * arm-dis.c (enum mve_instructions): Add new instructions. + (enum mve_unpredictable): Add new reasons. + (enum mve_undefined): Likewise. + (is_mve_encoding_conflict): Handle new instructions. + (is_mve_undefined): Likewise. + (is_mve_unpredictable): Likewise. + (print_mve_undefined): Likewise. + (print_mve_unpredictable): Likewise. + (print_mve_rounding_mode): Likewise. + (print_mve_vcvt_size): Likewise. + (print_mve_size): Likewise. + (print_insn_mve): Likewise. + +2019-05-16 Andre Vieira <andre.simoesdiasvieira@arm.com> + Michael Collison <michael.collison@arm.com> + + * arm-dis.c (enum mve_instructions): Add new instructions. + (enum mve_unpredictable): Add new reasons. + (enum mve_undefined): Likewise. + (is_mve_undefined): Handle new instructions. + (is_mve_unpredictable): Likewise. + (print_mve_undefined): Likewise. + (print_mve_unpredictable): Likewise. + (print_mve_size): Likewise. + (print_insn_mve): Likewise. + +2019-05-16 Andre Vieira <andre.simoesdiasvieira@arm.com> + Michael Collison <michael.collison@arm.com> + + * arm-dis.c (enum mve_instructions): Add new instructions. + (enum mve_undefined): Add new reasons. + (insns): Add new instructions. + (is_mve_encoding_conflict): + (print_mve_vld_str_addr): New print function. + (is_mve_undefined): Handle new instructions. + (is_mve_unpredictable): Likewise. + (print_mve_undefined): Likewise. + (print_mve_size): Likewise. + (print_insn_coprocessor_1): Handle MVE VLDR, VSTR instructions. + (print_insn_mve): Handle new operands. + +2019-05-16 Andre Vieira <andre.simoesdiasvieira@arm.com> + Michael Collison <michael.collison@arm.com> + + * arm-dis.c (enum mve_instructions): Add new instructions. + (enum mve_unpredictable): Add new reasons. + (is_mve_encoding_conflict): Handle new instructions. + (is_mve_unpredictable): Likewise. + (mve_opcodes): Add new instructions. + (print_mve_unpredictable): Handle new reasons. + (print_mve_register_blocks): New print function. + (print_mve_size): Handle new instructions. + (print_insn_mve): Likewise. + +2019-05-16 Andre Vieira <andre.simoesdiasvieira@arm.com> + Michael Collison <michael.collison@arm.com> + + * arm-dis.c (enum mve_instructions): Add new instructions. + (enum mve_unpredictable): Add new reasons. + (enum mve_undefined): Likewise. + (is_mve_encoding_conflict): Handle new instructions. + (is_mve_undefined): Likewise. + (is_mve_unpredictable): Likewise. + (coprocessor_opcodes): Move NEON VDUP from here... + (neon_opcodes): ... to here. + (mve_opcodes): Add new instructions. + (print_mve_undefined): Handle new reasons. + (print_mve_unpredictable): Likewise. + (print_mve_size): Handle new instructions. + (print_insn_neon): Handle vdup. + (print_insn_mve): Handle new operands. + +2019-05-16 Andre Vieira <andre.simoesdiasvieira@arm.com> + Michael Collison <michael.collison@arm.com> + + * arm-dis.c (enum mve_instructions): Add new instructions. + (enum mve_unpredictable): Add new values. + (mve_opcodes): Add new instructions. + (vec_condnames): New array with vector conditions. + (mve_predicatenames): New array with predicate suffixes. + (mve_vec_sizename): New array with vector sizes. + (enum vpt_pred_state): New enum with vector predication states. + (struct vpt_block): New struct type for vpt blocks. + (vpt_block_state): Global struct to keep track of state. + (mve_extract_pred_mask): New helper function. + (num_instructions_vpt_block): Likewise. + (mark_outside_vpt_block): Likewise. + (mark_inside_vpt_block): Likewise. + (invert_next_predicate_state): Likewise. + (update_next_predicate_state): Likewise. + (update_vpt_block_state): Likewise. + (is_vpt_instruction): Likewise. + (is_mve_encoding_conflict): Add entries for new instructions. + (is_mve_unpredictable): Likewise. + (print_mve_unpredictable): Handle new cases. + (print_instruction_predicate): Likewise. + (print_mve_size): New function. + (print_vec_condition): New function. + (print_insn_mve): Handle vpt blocks and new print operands. + +2019-05-16 Andre Vieira <andre.simoesdiasvieira@arm.com> + + * arm-dis.c (print_insn_coprocessor_1): Disable the use of coprocessors + 8, 14 and 15 for Armv8.1-M Mainline. + +2019-05-16 Andre Vieira <andre.simoesdiasvieira@arm.com> + Michael Collison <michael.collison@arm.com> + + * arm-dis.c (enum mve_instructions): New enum. + (enum mve_unpredictable): Likewise. + (enum mve_undefined): Likewise. + (struct mopcode32): New struct. + (is_mve_okay_in_it): New function. + (is_mve_architecture): Likewise. + (arm_decode_field): Likewise. + (arm_decode_field_multiple): Likewise. + (is_mve_encoding_conflict): Likewise. + (is_mve_undefined): Likewise. + (is_mve_unpredictable): Likewise. + (print_mve_undefined): Likewise. + (print_mve_unpredictable): Likewise. + (print_insn_coprocessor_1): Use arm_decode_field_multiple. + (print_insn_mve): New function. + (print_insn_thumb32): Handle MVE architecture. + (select_arm_features): Force thumb for Armv8.1-m Mainline. + +2019-05-10 Nick Clifton <nickc@redhat.com> + + PR 24538 + * ia64-opc.c (ia64_find_matching_opcode): Check for reaching the + end of the table prematurely. + +2019-05-10 Faraz Shahbazker <fshahbazker@wavecomp.com> + + * mips-opc.c (mips_opcodes): Enable ADD, SUB, DADD and DSUB + macros for R6. + +2019-05-11 Alan Modra <amodra@gmail.com> + + * ppc-dis.c (print_insn_powerpc) Don't skip optional operands + when -Mraw is in effect. + +2019-05-09 Matthew Malcomson <matthew.malcomson@arm.com> + + * aarch64-dis-2.c: Regenerate. + * aarch64-tbl.h (OP_SVE_BBU): New variant set. + (OP_SVE_BBB): New variant set. + (OP_SVE_DDDD): New variant set. + (OP_SVE_HHH): New variant set. + (OP_SVE_HHHU): New variant set. + (OP_SVE_SSS): New variant set. + (OP_SVE_SSSU): New variant set. + (OP_SVE_SHH): New variant set. + (OP_SVE_SBBU): New variant set. + (OP_SVE_DSS): New variant set. + (OP_SVE_DHHU): New variant set. + (OP_SVE_VMV_HSD_BHS): New variant set. + (OP_SVE_VVU_HSD_BHS): New variant set. + (OP_SVE_VVVU_SD_BH): New variant set. + (OP_SVE_VVVU_BHSD): New variant set. + (OP_SVE_VVV_QHD_DBS): New variant set. + (OP_SVE_VVV_HSD_BHS): New variant set. + (OP_SVE_VVV_HSD_BHS2): New variant set. + (OP_SVE_VVV_BHS_HSD): New variant set. + (OP_SVE_VV_BHS_HSD): New variant set. + (OP_SVE_VVV_SD): New variant set. + (OP_SVE_VVU_BHS_HSD): New variant set. + (OP_SVE_VZVV_SD): New variant set. + (OP_SVE_VZVV_BH): New variant set. + (OP_SVE_VZV_SD): New variant set. + (aarch64_opcode_table): Add sve2 instructions. + +2019-05-09 Matthew Malcomson <matthew.malcomson@arm.com> + + * aarch64-asm-2.c: Regenerated. + * aarch64-dis-2.c: Regenerated. + * aarch64-opc-2.c: Regenerated. + * aarch64-opc.c (operand_general_constraint_met_p): Constraint checking + for SVE_SHLIMM_UNPRED_22. + (aarch64_print_operand): Add printing for SVE_SHLIMM_UNPRED_22. + * aarch64-tbl.h (AARCH64_OPERANDS): Use new SVE_SHLIMM_UNPRED_22 + operand. + +2019-05-09 Matthew Malcomson <matthew.malcomson@arm.com> + + * aarch64-asm.c (aarch64_encode_variant_using_iclass): Handle + sve_size_tsz_bhs iclass encode. + * aarch64-dis.c (aarch64_decode_variant_using_iclass): Handle + sve_size_tsz_bhs iclass decode. + +2019-05-09 Matthew Malcomson <matthew.malcomson@arm.com> + + * aarch64-asm-2.c: Regenerated. + * aarch64-dis-2.c: Regenerated. + * aarch64-opc-2.c: Regenerated. + * aarch64-opc.c (operand_general_constraint_met_p): Constraint checking + for SVE_Zm4_11_INDEX. + (aarch64_print_operand): Add printing for SVE_Zm4_11_INDEX. + (fields): Handle SVE_i2h field. + * aarch64-opc.h (enum aarch64_field_kind): New SVE_i2h field. + * aarch64-tbl.h (AARCH64_OPERANDS): Use new SVE_Zm4_11_INDEX operand. + +2019-05-09 Matthew Malcomson <matthew.malcomson@arm.com> + + * aarch64-asm.c (aarch64_encode_variant_using_iclass): Handle + sve_shift_tsz_bhsd iclass encode. + * aarch64-dis.c (aarch64_decode_variant_using_iclass): Handle + sve_shift_tsz_bhsd iclass decode. + +2019-05-09 Matthew Malcomson <matthew.malcomson@arm.com> + + * aarch64-asm-2.c: Regenerated. + * aarch64-dis-2.c: Regenerated. + * aarch64-opc-2.c: Regenerated. + * aarch64-asm.c (aarch64_ins_sve_shrimm): + (aarch64_encode_variant_using_iclass): Handle + sve_shift_tsz_hsd iclass encode. + * aarch64-dis.c (aarch64_decode_variant_using_iclass): Handle + sve_shift_tsz_hsd iclass decode. + * aarch64-opc.c (operand_general_constraint_met_p): Constraint checking + for SVE_SHRIMM_UNPRED_22. + (aarch64_print_operand): Add printing for SVE_SHRIMM_UNPRED_22. + * aarch64-tbl.h (AARCH64_OPERANDS): Use new SVE_SHRIMM_UNPRED_22 + operand. + +2019-05-09 Matthew Malcomson <matthew.malcomson@arm.com> + + * aarch64-asm.c (aarch64_encode_variant_using_iclass): Handle + sve_size_013 iclass encode. + * aarch64-dis.c (aarch64_decode_variant_using_iclass): Handle + sve_size_013 iclass decode. + +2019-05-09 Matthew Malcomson <matthew.malcomson@arm.com> + + * aarch64-asm.c (aarch64_encode_variant_using_iclass): Handle + sve_size_bh iclass encode. + * aarch64-dis.c (aarch64_decode_variant_using_iclass): Handle + sve_size_bh iclass decode. + +2019-05-09 Matthew Malcomson <matthew.malcomson@arm.com> + + * aarch64-asm.c (aarch64_encode_variant_using_iclass): Handle + sve_size_sd2 iclass encode. + * aarch64-dis.c (aarch64_decode_variant_using_iclass): Handle + sve_size_sd2 iclass decode. + * aarch64-opc.c (fields): Handle SVE_sz2 field. + * aarch64-opc.h (enum aarch64_field_kind): New SVE_sz2 field. + +2019-05-09 Matthew Malcomson <matthew.malcomson@arm.com> + + * aarch64-asm-2.c: Regenerated. + * aarch64-dis-2.c: Regenerated. + * aarch64-opc-2.c: Regenerated. + * aarch64-opc.c (operand_general_constraint_met_p): Constraint checking + for SVE_ADDR_ZX. + (aarch64_print_operand): Add printing for SVE_ADDR_ZX. + * aarch64-tbl.h (AARCH64_OPERANDS): Use new SVE_ADDR_ZX operand. + +2019-05-09 Matthew Malcomson <matthew.malcomson@arm.com> + + * aarch64-asm-2.c: Regenerated. + * aarch64-dis-2.c: Regenerated. + * aarch64-opc-2.c: Regenerated. + * aarch64-opc.c (operand_general_constraint_met_p): Constraint checking + for SVE_Zm3_11_INDEX. + (aarch64_print_operand): Add printing for SVE_Zm3_11_INDEX. + (fields): Handle SVE_i3l and SVE_i3h2 fields. + * aarch64-opc.h (enum aarch64_field_kind): New SVE_i3l and SVE_i3h2 + fields. + * aarch64-tbl.h (AARCH64_OPERANDS): Use new SVE_Zm3_11_INDEX operand. + +2019-05-09 Matthew Malcomson <matthew.malcomson@arm.com> + + * aarch64-asm.c (aarch64_encode_variant_using_iclass): Handle + sve_size_hsd2 iclass encode. + * aarch64-dis.c (aarch64_decode_variant_using_iclass): Handle + sve_size_hsd2 iclass decode. + * aarch64-opc.c (fields): Handle SVE_size field. + * aarch64-opc.h (enum aarch64_field_kind): New SVE_size field. + +2019-05-09 Matthew Malcomson <matthew.malcomson@arm.com> + + * aarch64-asm-2.c: Regenerated. + * aarch64-dis-2.c: Regenerated. + * aarch64-opc-2.c: Regenerated. + * aarch64-opc.c (operand_general_constraint_met_p): Constraint checking + for SVE_IMM_ROT3. + (aarch64_print_operand): Add printing for SVE_IMM_ROT3. + (fields): Handle SVE_rot3 field. + * aarch64-opc.h (enum aarch64_field_kind): New SVE_rot3 field. + * aarch64-tbl.h (AARCH64_OPERANDS): Use new SVE_IMM_ROT3 operand. + +2019-05-09 Matthew Malcomson <matthew.malcomson@arm.com> + + * aarch64-opc.c (verify_constraints): Check for movprfx for sve2 + instructions. + +2019-05-09 Matthew Malcomson <matthew.malcomson@arm.com> + + * aarch64-tbl.h + (aarch64_feature_sve2, aarch64_feature_sve2aes, + aarch64_feature_sve2sha3, aarch64_feature_sve2sm4, + aarch64_feature_sve2bitperm): New feature sets. + (SVE2, SVE2_AES, SVE2_SHA3, SVE2_SM4, SVE2_BITPERM): New macros + for feature set addresses. + (SVE2_INSN, SVE2_INSNC, SVE2AES_INSN, SVE2SHA3_INSN, + SVE2SM4_INSN, SVE2SM4_INSNC, SVE2BITPERM_INSN): New macros. + +2019-05-06 Andrew Bennett <andrew.bennett@imgtec.com> + Faraz Shahbazker <fshahbazker@wavecomp.com> + + * mips-dis.c (mips_calculate_combination_ases): Add ISA + argument and set ASE_EVA_R6 appropriately. + (set_default_mips_dis_options): Pass ISA to above. + (parse_mips_dis_option): Likewise. + * mips-opc.c (EVAR6): New macro. + (mips_builtin_opcodes): Add llwpe, scwpe. + +2019-05-01 Sudakshina Das <sudi.das@arm.com> + + * aarch64-asm-2.c: Regenerated. + * aarch64-dis-2.c: Regenerated. + * aarch64-opc-2.c: Regenerated. + * aarch64-opc.c (operand_general_constraint_met_p): Add case for + AARCH64_OPND_TME_UIMM16. + (aarch64_print_operand): Likewise. + * aarch64-tbl.h (QL_IMM_NIL): New. + (TME): New. + (_TME_INSN): New. + (struct aarch64_opcode): Add tstart, tcommit, ttest and tcancel. + +2019-04-29 John Darrington <john@darrington.wattle.id.au> + + * s12z-opc.c (shift_discrim): Return OP_INVALID when reading fails. + +2019-04-26 Andrew Bennett <andrew.bennett@imgtec.com> + Faraz Shahbazker <fshahbazker@wavecomp.com> + + * mips-opc.c (mips_builtin_opcodes): Add llwp, lldp, scwp, scdp. + +2019-04-24 John Darrington <john@darrington.wattle.id.au> + + * s12z-opc.h: Add extern "C" bracketing to help + users who wish to use this interface in c++ code. + +2019-04-24 John Darrington <john@darrington.wattle.id.au> + + * s12z-opc.c (bm_decode): Handle bit map operations with the + "reserved0" mode. + +2019-04-15 Thomas Preud'homme <thomas.preudhomme@arm.com> + + * arm-dis.c (coprocessor_opcodes): Document new %J and %K format + specifier. Add entries for VLDR and VSTR of system registers. + (print_insn_coprocessor): Forbid coprocessor numbers 8, 14 and 15 in + coprocessor instructions on Armv8.1-M Mainline targets. Add handling + of %J and %K format specifier. + +2019-04-15 Thomas Preud'homme <thomas.preudhomme@arm.com> + + * arm-dis.c (coprocessor_opcodes): Document new %C format control code. + Add new entries for VSCCLRM instruction. + (print_insn_coprocessor): Handle new %C format control code. + +2019-04-15 Thomas Preud'homme <thomas.preudhomme@arm.com> + + * arm-dis.c (enum isa): New enum. + (struct sopcode32): New structure. + (coprocessor_opcodes): change type of entries to struct sopcode32 and + set isa field of all current entries to ANY. + (print_insn_coprocessor): Change type of insn to struct sopcode32. + Only match an entry if its isa field allows the current mode. + +2019-04-15 Thomas Preud'homme <thomas.preudhomme@arm.com> + + * arm-dis.c (thumb_opcodes): Document %n control code. Add entry for + CLRM. + (print_insn_thumb32): Add logic to print %n CLRM register list. + +2019-04-15 Sudakshina Das <sudi.das@arm.com> + + * arm-dis.c (print_insn_thumb32): Updated to accept new %P + and %Q patterns. + +2019-04-15 Sudakshina Das <sudi.das@arm.com> + + * arm-dis.c (thumb32_opcodes): New instruction bfcsel. + (print_insn_thumb32): Edit the switch case for %Z. + +2019-04-15 Sudakshina Das <sudi.das@arm.com> + + * arm-dis.c (print_insn_thumb32): Updated to accept new %Z pattern. + +2019-04-15 Sudakshina Das <sudi.das@arm.com> + + * arm-dis.c (thumb32_opcodes): New instruction bfl. + +2019-04-15 Sudakshina Das <sudi.das@arm.com> + + * arm-dis.c (print_insn_thumb32): Updated to accept new %Y pattern. + +2019-04-15 Sudakshina Das <sudi.das@arm.com> + + * arm-dis.c (print_insn_thumb32): Add '%<bitfield>S' to print an + Arm register with r13 and r15 unpredictable. + (thumb32_opcodes): New instructions for bfx and bflx. + +2019-04-15 Sudakshina Das <sudi.das@arm.com> + + * arm-dis.c (thumb32_opcodes): New instructions for bf. + +2019-04-15 Sudakshina Das <sudi.das@arm.com> + + * arm-dis.c (print_insn_thumb32): Updated to accept new %W pattern. + +2019-04-15 Sudakshina Das <sudi.das@arm.com> + + * arm-dis.c (print_insn_thumb32): Updated to accept new %G pattern. + +2019-04-15 Thomas Preud'homme <thomas.preudhomme@arm.com> + + * arm-dis.c (select_arm_features): Add logic for Armv8.1-M Mainline. + +2019-04-12 John Darrington <john@darrington.wattle.id.au> + + s12z-dis.c, s12z-opc.c, s12z-opc.h: Replace "operator" with + "optr". ("operator" is a reserved word in c++). + +2019-04-11 Sudakshina Das <sudi.das@arm.com> + + * aarch64-opc.c (aarch64_print_operand): Add case for + AARCH64_OPND_Rt_SP. + (verify_constraints): Likewise. + * aarch64-tbl.h (QL_LDST_AT): Update to add SP qualifier. + (struct aarch64_opcode): Update stg, stzg, st2g, stz2g instructions + to accept Rt|SP as first operand. + (AARCH64_OPERANDS): Add new Rt_SP. + * aarch64-asm-2.c: Regenerated. + * aarch64-dis-2.c: Regenerated. + * aarch64-opc-2.c: Regenerated. + +2019-04-11 Sudakshina Das <sudi.das@arm.com> + + * aarch64-asm-2.c: Regenerated. + * aarch64-dis-2.c: Likewise. + * aarch64-opc-2.c: Likewise. + * aarch64-tbl.h (aarch64_opcode): Add new ldgm and stgm. + +2019-04-09 Robert Suchanek <robert.suchanek@mips.com> + + * mips-opc.c (mips_builtin_opcodes): Add RDHWR rt rd sel. + +2019-04-08 H.J. Lu <hongjiu.lu@intel.com> + + * i386-opc.tbl: Consolidate AVX512 BF16 entries. + * i386-init.h: Regenerated. + +2019-04-07 Alan Modra <amodra@gmail.com> + + * ppc-dis.c (print_insn_powerpc): Use a tiny state machine + op_separator to control printing of spaces, comma and parens + rather than need_comma, need_paren and spaces vars. + +2019-04-07 Alan Modra <amodra@gmail.com> + + PR 24421 + * arm-dis.c (print_insn_coprocessor): Correct bracket placement. + (print_insn_neon, print_insn_arm): Likewise. + +2019-04-05 Xuepeng Guo <xuepeng.guo@intel.com> + + * i386-dis-evex.h (evex_table): Updated to support BF16 + instructions. + * i386-dis.c (enum): Add EVEX_W_0F3852_P_1, EVEX_W_0F3872_P_1 + and EVEX_W_0F3872_P_3. + * i386-gen.c (cpu_flag_init): Add CPU_AVX512_BF16_FLAGS. + (cpu_flags): Add bitfield for CpuAVX512_BF16. + * i386-opc.h (enum): Add CpuAVX512_BF16. + (i386_cpu_flags): Add bitfield for cpuavx512_bf16. + * i386-opc.tbl: Add AVX512 BF16 instructions. + * i386-init.h: Regenerated. + * i386-tbl.h: Likewise. + +2019-04-05 Alan Modra <amodra@gmail.com> + + * ppc-opc.c (XLBH_MASK): Subtract off BH field from BB_MASK. + (powerpc_opcodes): Reorder bcctr and bclr extended mnemonics + to favour printing of "-" branch hint when using the "y" bit. + Allow BH field on bc{ctr,lr,tar}{,l}{-,+}. + +2019-04-05 Alan Modra <amodra@gmail.com> + + * ppc-dis.c (print_insn_powerpc): Delay printing spaces after + opcode until first operand is output. + +2019-04-04 Peter Bergner <bergner@linux.ibm.com> + + PR gas/24349 + * ppc-opc.c (valid_bo_pre_v2): Add comments. + (valid_bo_post_v2): Add support for 'at' branch hints. + (insert_bo): Only error on branch on ctr. + (get_bo_hint_mask): New function. + (insert_boe): Add new 'branch_taken' formal argument. Add support + for inserting 'at' branch hints. + (extract_boe): Add new 'branch_taken' formal argument. Add support + for extracting 'at' branch hints. + (insert_bom, extract_bom, insert_bop, extract_bop): New functions. + (BOE): Delete operand. + (BOM, BOP): New operands. + (RM): Update value. + (XLYLK, XLYLK_MASK, XLYBB_MASK): Delete. + (powerpc_opcodes) <bc-, bcl-, bca-, bcla-, bclr-, bclrl-, bcctr-, + bcctrl-, bctar-, bctarl->: Replace BOE with BOM. + (powerpc_opcodes) <bc+, bcl+, bca+, bcla+, bclr+, bclrl+, bcctr+, + bcctrl+, bctar+, bctarl+>: Replace BOE with BOP. + <bdnztar, bdnztarl, bdztar, bdztarl, btar, btarl, bdnztar-, bdnztarl-, + bdnztar+, bdnztarl+, bdztar-, bdztarl-, bdztar+, bdztarl+, bgetar, + bnltar, bgetarl, bnltarl, bletar, bngtar, bletarl, bngtarl, bnetar, + bnetarl, bnstar, bnutar, bnstarl, bnutarl, bgetar-, bnltar-, bgetarl-, + bnltarl-, bletar-, bngtar-, bletarl-, bngtarl-, bnetar-, bnetarl-, + bnstar-, bnutar-, bnstarl-, bnutarl-, bgetar+, bnltar+, bgetarl+, + bnltarl+, bletar+, bngtar+, bletarl+, bngtarl+, bnetar+, bnetarl+, + bnstar+, bnutar+, bnstarl+, bnutarl+, blttar, blttarl, bgttar, bgttarl, + beqtar, beqtarl, bsotar, buntar, bsotarl, buntarl, blttar-, blttarl-, + bgttar-, bgttarl-, beqtar-, beqtarl-, bsotar-, buntar-, bsotarl-, + buntarl-, blttar+, blttarl+, bgttar+, bgttarl+, beqtar+, beqtarl+, + bsotar+, buntar+, bsotarl+, buntarl+, bdnzftar, bdnzftarl, bdzftar, + bdzftarl, bftar, bftarl, bftar-, bftarl-, bftar+, bftarl+, bdnzttar, + bdnzttarl, bdzttar, bdzttarl, bttar, bttarl, bttar-, bttarl-, bttar+, + bttarl+>: New extended mnemonics. + +2019-03-28 Alan Modra <amodra@gmail.com> + + PR 24390 + * ppc-opc.c (BTF): Define. + (powerpc_opcodes): Use for mtfsb*. + * ppc-dis.c (print_insn_powerpc): Print fields with both + PPC_OPERAND_CR_REG and PPC_OPERAND_CR_BIT as a plain number. + +2019-03-25 Tamar Christina <tamar.christina@arm.com> + + * arm-dis.c (struct arm_private_data): Remove has_mapping_symbols. + (mapping_symbol_for_insn): Implement new algorithm. + (print_insn): Remove duplicate code. + +2019-03-25 Tamar Christina <tamar.christina@arm.com> + + * aarch64-dis.c (print_insn_aarch64): + Implement override. + +2019-03-25 Tamar Christina <tamar.christina@arm.com> + + * aarch64-dis.c (print_insn_aarch64): Update the mapping symbol search + order. + +2019-03-25 Tamar Christina <tamar.christina@arm.com> + + * aarch64-dis.c (last_stop_offset): New. + (print_insn_aarch64): Use stop_offset. + +2019-03-19 H.J. Lu <hongjiu.lu@intel.com> + + PR gas/24359 + * i386-gen.c (cpu_flag_init): Add CPU_ANY_AVX512F_FLAGS to + CPU_ANY_AVX2_FLAGS. + * i386-init.h: Regenerated. + +2019-03-18 H.J. Lu <hongjiu.lu@intel.com> + + PR gas/24348 + * i386-opc.tbl: Add Optimize to vmovdqa32, vmovdqa64, vmovdqu8, + vmovdqu16, vmovdqu32 and vmovdqu64. + * i386-tbl.h: Regenerated. + +2019-03-12 Andreas Krebbel <krebbel@linux.ibm.com> + + * s390-opc.txt: Rename selhhhr to selfhr. Remove optional operand + from vstrszb, vstrszh, and vstrszf. + +2019-03-12 Andreas Krebbel <krebbel@linux.ibm.com> + + * s390-opc.txt: Add instruction descriptions. + +2019-02-08 Jim Wilson <jimw@sifive.com> + + * riscv-opc.c (riscv_opcodes) <beq>: Use Cz to compress 3 operand form. + <bne>: Likewise. + +2019-02-07 Tamar Christina <tamar.christina@arm.com> + + * arm-dis.c (arm_opcodes): Redefine hlt to armv1. + +2019-02-07 Tamar Christina <tamar.christina@arm.com> + + PR binutils/23212 + * aarch64-opc.h (enum aarch64_field_kind): Add FLD_sz. + * aarch64-opc.c (verify_elem_sd): New. + (fields): Add FLD_sz entr. + * aarch64-tbl.h (_SIMD_INSN): New. + (aarch64_opcode_table): Add elem_sd verifier to fmla, fmls, fmul and + fmulx scalar and vector by element isns. + +2019-02-07 Nick Clifton <nickc@redhat.com> + + * po/sv.po: Updated Swedish translation. + +2019-01-31 Andreas Krebbel <krebbel@linux.ibm.com> + + * s390-mkopc.c (main): Accept arch13 as cpu string. + * s390-opc.c: Add new instruction formats and instruction opcode + masks. + * s390-opc.txt: Add new arch13 instructions. + +2019-01-25 Sudakshina Das <sudi.das@arm.com> + + * aarch64-tbl.h (QL_LDST_AT): Update macro. + (aarch64_opcode): Change encoding for stg, stzg + st2g and st2zg. + * aarch64-asm-2.c: Regenerated. + * aarch64-dis-2.c: Regenerated. + * aarch64-opc-2.c: Regenerated. + +2019-01-25 Sudakshina Das <sudi.das@arm.com> + + * aarch64-asm-2.c: Regenerated. + * aarch64-dis-2.c: Likewise. + * aarch64-opc-2.c: Likewise. + * aarch64-tbl.h (aarch64_opcode): Add new stzgm. + +2019-01-25 Sudakshina Das <sudi.das@arm.com> + Ramana Radhakrishnan <ramana.radhakrishnan@arm.com> + + * aarch64-asm.c (aarch64_ins_addr_simple_2): Remove. + * aarch64-asm.h (ins_addr_simple_2): Likeiwse. + * aarch64-dis.c (aarch64_ext_addr_simple_2): Likewise. + * aarch64-dis.h (ext_addr_simple_2): Likewise. + * aarch64-opc.c (operand_general_constraint_met_p): Remove + case for ldstgv_indexed. + (aarch64_print_operand): Remove case for AARCH64_OPND_ADDR_SIMPLE_2. + * aarch64-tbl.h (struct aarch64_opcode): Remove ldgv and stgv. + (AARCH64_OPERANDS): Remove ADDR_SIMPLE_2. + * aarch64-asm-2.c: Regenerated. + * aarch64-dis-2.c: Regenerated. + * aarch64-opc-2.c: Regenerated. + +2019-01-23 Nick Clifton <nickc@redhat.com> + + * po/pt_BR.po: Updated Brazilian Portuguese translation. + +2019-01-21 Nick Clifton <nickc@redhat.com> + + * po/de.po: Updated German translation. + * po/uk.po: Updated Ukranian translation. + +2019-01-20 Chenghua Xu <paul.hua.gm@gmail.com> + * mips-dis.c (mips_arch_choices): Fix typo in + gs464, gs464e and gs264e descriptors. + +2019-01-19 Nick Clifton <nickc@redhat.com> + + * configure: Regenerate. + * po/opcodes.pot: Regenerate. + +2018-06-24 Nick Clifton <nickc@redhat.com> + + 2.32 branch created. + +2019-01-09 John Darrington <john@darrington.wattle.id.au> + + * s12z-dis.c (print_insn_s12z): Do not dereference an operand + if it is null. + -dis.c (opr_emit_disassembly): Do not omit an index if it is + zero. + +2019-01-09 Andrew Paprocki <andrew@ishiboo.com> + + * configure: Regenerate. + +2019-01-07 Alan Modra <amodra@gmail.com> + + * configure: Regenerate. + * po/POTFILES.in: Regenerate. + +2019-01-03 John Darrington <john@darrington.wattle.id.au> + + * s12z-opc.c: New file. + * s12z-opc.h: New file. + * s12z-dis.c: Removed all code not directly related to display + of instructions. Used the interface provided by the new files + instead. + * Makefile.am (TARGET_LIBOPCODES_CFILES) Add s12z-opc.c. + * Makefile.in: Regenerate. + * configure.ac (bfd_s12z_arch): Correct the dependencies. + * configure: Regenerate. + +2019-01-01 Alan Modra <amodra@gmail.com> + + Update year range in copyright notice of all files. + +For older changes see ChangeLog-2018 + +Copyright (C) 2019 Free Software Foundation, Inc. + +Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. + +Local Variables: +mode: change-log +left-margin: 8 +fill-column: 74 +version-control: never +End: diff -Nru gdb-9.1/opcodes/configure gdb-10.2/opcodes/configure --- gdb-9.1/opcodes/configure 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/configure 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for opcodes 2.33.50. +# Generated by GNU Autoconf 2.69 for opcodes 2.35.50. # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. @@ -587,8 +587,8 @@ # Identity of this package. PACKAGE_NAME='opcodes' PACKAGE_TARNAME='opcodes' -PACKAGE_VERSION='2.33.50' -PACKAGE_STRING='opcodes 2.33.50' +PACKAGE_VERSION='2.35.50' +PACKAGE_STRING='opcodes 2.35.50' PACKAGE_BUGREPORT='' PACKAGE_URL='' @@ -1356,7 +1356,7 @@ # 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.33.50 to adapt to many kinds of systems. +\`configure' configures opcodes 2.35.50 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1427,7 +1427,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of opcodes 2.33.50:";; + short | recursive ) echo "Configuration of opcodes 2.35.50:";; esac cat <<\_ACEOF @@ -1539,7 +1539,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -opcodes configure 2.33.50 +opcodes configure 2.35.50 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -1950,7 +1950,7 @@ 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.33.50, which was +It was created by opcodes $as_me 2.35.50, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -3897,7 +3897,7 @@ # Define the identity of the package. PACKAGE='opcodes' - VERSION='2.33.50' + VERSION='2.35.50' cat >>confdefs.h <<_ACEOF @@ -12933,7 +12933,6 @@ bfd_tic4x_arch) ta="$ta tic4x-dis.lo" ;; bfd_tic54x_arch) ta="$ta tic54x-dis.lo tic54x-opc.lo" ;; bfd_tic6x_arch) ta="$ta tic6x-dis.lo" ;; - bfd_tic80_arch) ta="$ta tic80-dis.lo tic80-opc.lo" ;; bfd_tilegx_arch) ta="$ta tilegx-dis.lo tilegx-opc.lo" ;; bfd_tilepro_arch) ta="$ta tilepro-dis.lo tilepro-opc.lo" ;; bfd_v850_arch) ta="$ta v850-opc.lo v850-dis.lo" ;; @@ -13534,7 +13533,7 @@ # 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.33.50, which was +This file was extended by opcodes $as_me 2.35.50, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -13600,7 +13599,7 @@ 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.33.50 +opcodes config.status 2.35.50 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff -Nru gdb-9.1/opcodes/configure.ac gdb-10.2/opcodes/configure.ac --- gdb-9.1/opcodes/configure.ac 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/configure.ac 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ dnl Process this file with autoconf to produce a configure script. dnl -dnl Copyright (C) 2012-2019 Free Software Foundation, Inc. +dnl Copyright (C) 2012-2020 Free Software Foundation, Inc. dnl dnl This file is free software; you can redistribute it and/or modify dnl it under the terms of the GNU General Public License as published by @@ -324,7 +324,6 @@ bfd_tic4x_arch) ta="$ta tic4x-dis.lo" ;; bfd_tic54x_arch) ta="$ta tic54x-dis.lo tic54x-opc.lo" ;; bfd_tic6x_arch) ta="$ta tic6x-dis.lo" ;; - bfd_tic80_arch) ta="$ta tic80-dis.lo tic80-opc.lo" ;; bfd_tilegx_arch) ta="$ta tilegx-dis.lo tilegx-opc.lo" ;; bfd_tilepro_arch) ta="$ta tilepro-dis.lo tilepro-opc.lo" ;; bfd_v850_arch) ta="$ta v850-opc.lo v850-dis.lo" ;; diff -Nru gdb-9.1/opcodes/configure.com gdb-10.2/opcodes/configure.com --- gdb-9.1/opcodes/configure.com 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/configure.com 2021-04-25 04:06:26.000000000 +0000 @@ -6,7 +6,7 @@ $! $! Written by Tristan Gingold (gingold@adacore.com) $! -$! Copyright (C) 2012-2019 Free Software Foundation, Inc. +$! Copyright (C) 2012-2020 Free Software Foundation, Inc. $! $! This file is free software; you can redistribute it and/or modify $! it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/opcodes/cr16-dis.c gdb-10.2/opcodes/cr16-dis.c --- gdb-9.1/opcodes/cr16-dis.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/cr16-dis.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Disassembler code for CR16. - Copyright (C) 2007-2019 Free Software Foundation, Inc. + Copyright (C) 2007-2020 Free Software Foundation, Inc. Contributed by M R Swami Reddy (MR.Swami.Reddy@nsc.com). This file is part of GAS, GDB and the GNU binutils. @@ -29,19 +29,13 @@ #define ESCAPE_16_BIT 0xB /* Extract 'n_bits' from 'a' starting from offset 'offs'. */ -#define EXTRACT(a, offs, n_bits) \ +#define EXTRACT(a, offs, n_bits) \ (((a) >> (offs)) & ((1ul << ((n_bits) - 1) << 1) - 1)) /* Set Bit Mask - a mask to set all bits in a 32-bit word starting from offset 'offs'. */ #define SBM(offs) ((1ul << 31 << 1) - (1ul << (offs))) -typedef struct -{ - dwordU val; - int nbits; -} parameter; - /* Structure to map valid 'cinv' instruction options. */ typedef struct @@ -287,14 +281,10 @@ 0 16 32 48 words [0] [1] [2] */ -static parameter +static inline dwordU makelongparameter (ULONGLONG val, int start, int end) { - parameter p; - - p.val = (dwordU) EXTRACT (val, 48 - end, end - start); - p.nbits = end - start; - return p; + return EXTRACT (val, 48 - end, end - start); } /* Build a mask of the instruction's 'constant' opcode, @@ -319,8 +309,7 @@ { unsigned long mask; /* The instruction 'constant' opcode doesn't exceed 32 bits. */ - unsigned long doubleWord = (cr16_words[1] - + (cr16_words[0] << 16)) & 0xffffffff; + unsigned long doubleWord = cr16_words[1] + ((unsigned) cr16_words[0] << 16); /* Start searching from end of instruction table. */ instruction = &cr16_instruction[NUMOPCODES - 2]; @@ -331,10 +320,10 @@ mask = build_mask (); if ((doubleWord & mask) == BIN (instruction->match, - instruction->match_bits)) - return 1; + instruction->match_bits)) + return 1; else - instruction--; + instruction--; } return 0; } @@ -345,7 +334,7 @@ make_argument (argument * a, int start_bits) { int inst_bit_size; - parameter p; + dwordU p; if ((instruction->size == 3) && a->size >= 16) inst_bit_size = 48; @@ -358,75 +347,72 @@ p = makelongparameter (cr16_allWords, inst_bit_size - (start_bits + a->size), inst_bit_size - start_bits); - a->r = p.val; + a->r = p; break; case arg_rp: p = makelongparameter (cr16_allWords, inst_bit_size - (start_bits + a->size), inst_bit_size - start_bits); - a->rp = p.val; + a->rp = p; break; case arg_pr: p = makelongparameter (cr16_allWords, inst_bit_size - (start_bits + a->size), inst_bit_size - start_bits); - a->pr = p.val; + a->pr = p; break; case arg_prp: p = makelongparameter (cr16_allWords, inst_bit_size - (start_bits + a->size), inst_bit_size - start_bits); - a->prp = p.val; + a->prp = p; break; case arg_ic: p = makelongparameter (cr16_allWords, inst_bit_size - (start_bits + a->size), inst_bit_size - start_bits); - a->constant = p.val; + a->constant = p; break; case arg_cc: p = makelongparameter (cr16_allWords, inst_bit_size - (start_bits + a->size), inst_bit_size - start_bits); - - a->cc = p.val; + a->cc = p; break; case arg_idxr: - if ((IS_INSN_MNEMONIC ("cbitb")) - || (IS_INSN_MNEMONIC ("sbitb")) - || (IS_INSN_MNEMONIC ("tbitb"))) + if (IS_INSN_TYPE (CSTBIT_INS) && instruction->mnemonic[4] == 'b') p = makelongparameter (cr16_allWords, 8, 9); else p = makelongparameter (cr16_allWords, 9, 10); - a->i_r = p.val; + a->i_r = p; p = makelongparameter (cr16_allWords, inst_bit_size - a->size, inst_bit_size); - a->constant = p.val; + a->constant = p; break; case arg_idxrp: p = makelongparameter (cr16_allWords, start_bits + 12, start_bits + 13); - a->i_r = p.val; + a->i_r = p; p = makelongparameter (cr16_allWords, start_bits + 13, start_bits + 16); - a->rp = p.val; + a->rp = p; if (inst_bit_size > 32) { p = makelongparameter (cr16_allWords, inst_bit_size - start_bits - 12, inst_bit_size); - a->constant = ((p.val & 0xffff) | (p.val >> 8 & 0xf0000)); + a->constant = (p & 0xffff) | (p >> 8 & 0xf0000); } else if (instruction->size == 2) { p = makelongparameter (cr16_allWords, inst_bit_size - 22, inst_bit_size); - a->constant = (p.val & 0xf) | (((p.val >>20) & 0x3) << 4) - | ((p.val >>14 & 0x3) << 6) | (((p.val >>7) & 0x1f) <<7); + a->constant = ((p & 0xf) | (((p >> 20) & 0x3) << 4) + | ((p >> 14 & 0x3) << 6) | (((p >>7) & 0x1f) << 7)); } else if (instruction->size == 1 && a->size == 0) a->constant = 0; @@ -435,17 +421,17 @@ case arg_rbase: p = makelongparameter (cr16_allWords, inst_bit_size, inst_bit_size); - a->constant = p.val; + a->constant = p; p = makelongparameter (cr16_allWords, inst_bit_size - (start_bits + 4), - inst_bit_size - start_bits); - a->r = p.val; + inst_bit_size - start_bits); + a->r = p; break; case arg_cr: p = makelongparameter (cr16_allWords, start_bits + 12, start_bits + 16); - a->r = p.val; - p = makelongparameter (cr16_allWords, inst_bit_size - 16, inst_bit_size); - a->constant = p.val; + a->r = p; + p = makelongparameter (cr16_allWords, inst_bit_size - 28, inst_bit_size); + a->constant = ((p >> 8) & 0xf0000) | (p & 0xffff); break; case arg_crp: @@ -453,19 +439,19 @@ p = makelongparameter (cr16_allWords, 12, 16); else p = makelongparameter (cr16_allWords, start_bits + 12, start_bits + 16); - a->rp = p.val; + a->rp = p; if (inst_bit_size > 32) { p = makelongparameter (cr16_allWords, inst_bit_size - start_bits - 12, inst_bit_size); - a->constant = ((p.val & 0xffff) | (p.val >> 8 & 0xf0000)); + a->constant = ((p & 0xffff) | (p >> 8 & 0xf0000)); } else if (instruction->size == 2) { p = makelongparameter (cr16_allWords, inst_bit_size - 16, inst_bit_size); - a->constant = p.val; + a->constant = p; } else if (instruction->size == 1 && a->size != 0) { @@ -474,9 +460,9 @@ || IS_INSN_MNEMONIC ("loadd") || IS_INSN_MNEMONIC ("storw") || IS_INSN_MNEMONIC ("stord")) - a->constant = (p.val * 2); + a->constant = p * 2; else - a->constant = p.val; + a->constant = p; } else /* below case for 0x0(reg pair) */ a->constant = 0; @@ -494,21 +480,21 @@ { case 8 : p = makelongparameter (cr16_allWords, 0, start_bits); - a->constant = ((((p.val&0xf00)>>4)) | (p.val&0xf)); + a->constant = ((p & 0xf00) >> 4) | (p & 0xf); break; case 24: if (instruction->size == 3) { p = makelongparameter (cr16_allWords, 16, inst_bit_size); - a->constant = ((((p.val>>16)&0xf) << 20) - | (((p.val>>24)&0xf) << 16) - | (p.val & 0xffff)); + a->constant = ((((p >> 16) & 0xf) << 20) + | (((p >> 24) & 0xf) << 16) + | (p & 0xffff)); } else if (instruction->size == 2) { p = makelongparameter (cr16_allWords, 8, inst_bit_size); - a->constant = p.val; + a->constant = p; } break; @@ -516,7 +502,7 @@ p = makelongparameter (cr16_allWords, inst_bit_size - (start_bits + a->size), inst_bit_size - start_bits); - a->constant = p.val; + a->constant = p; break; } } @@ -525,7 +511,7 @@ p = makelongparameter (cr16_allWords, inst_bit_size - (start_bits + a->size), inst_bit_size - start_bits); - a->constant = p.val; + a->constant = p; } break; @@ -722,18 +708,18 @@ /* For "bal (ra), disp17" instruction only. */ if ((IS_INSN_MNEMONIC ("bal")) && (i == 0) && instruction->size == 2) - { - info->fprintf_func (info->stream, "(ra),"); - continue; - } + { + info->fprintf_func (info->stream, "(ra),"); + continue; + } if ((INST_HAS_REG_LIST) && (i == 2)) - info->fprintf_func (info->stream, "RA"); + info->fprintf_func (info->stream, "RA"); else - print_arg (¤tInsn->arg[i], memaddr, info); + print_arg (¤tInsn->arg[i], memaddr, info); if ((i != currentInsn->nargs - 1) && (!IS_INSN_MNEMONIC ("b"))) - info->fprintf_func (info->stream, ","); + info->fprintf_func (info->stream, ","); } } @@ -815,17 +801,18 @@ if (is_decoded > 0 && (cr16_words[0] != 0 || cr16_words[1] != 0)) { if (strneq (instruction->mnemonic, "cinv", 4)) - info->fprintf_func (info->stream,"%s", getcinvstring (instruction->mnemonic)); + info->fprintf_func (info->stream,"%s", + getcinvstring (instruction->mnemonic)); else - info->fprintf_func (info->stream, "%s", instruction->mnemonic); + info->fprintf_func (info->stream, "%s", instruction->mnemonic); if (((cr16_currInsn.nargs = get_number_of_operands ()) != 0) && ! (IS_INSN_MNEMONIC ("b"))) - info->fprintf_func (info->stream, "\t"); + info->fprintf_func (info->stream, "\t"); cr16_make_instruction (); /* For push/pop/pushrtn with RA instructions. */ if ((INST_HAS_REG_LIST) && ((cr16_words[0] >> 7) & 0x1)) - cr16_currInsn.nargs +=1; + cr16_currInsn.nargs +=1; print_arguments (&cr16_currInsn, memaddr, info); return cr16_currInsn.size; } diff -Nru gdb-9.1/opcodes/cr16-opc.c gdb-10.2/opcodes/cr16-opc.c --- gdb-9.1/opcodes/cr16-opc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/cr16-opc.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* cr16-opc.c -- Table of opcodes for the CR16 processor. - Copyright (C) 2007-2019 Free Software Foundation, Inc. + Copyright (C) 2007-2020 Free Software Foundation, Inc. Contributed by M R Swami Reddy (MR.Swami.Reddy@nsc.com) This file is part of the GNU opcodes library. @@ -493,7 +493,7 @@ REG_RP(9,8), REG_RP(10,9), REG_RP(11,10), REG_RP(12,11), REG((r12), 0xc, CR16_RP_REGTYPE), REG((r13), 0xd, CR16_RP_REGTYPE), - //REG((r14), 0xe, CR16_RP_REGTYPE), + /* REG((r14), 0xe, CR16_RP_REGTYPE), */ REG((ra), 0xe, CR16_RP_REGTYPE), REG((sp), 0xf, CR16_RP_REGTYPE), }; diff -Nru gdb-9.1/opcodes/cris-dis.c gdb-10.2/opcodes/cris-dis.c --- gdb-9.1/opcodes/cris-dis.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/cris-dis.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Disassembler code for CRIS. - Copyright (C) 2000-2019 Free Software Foundation, Inc. + Copyright (C) 2000-2020 Free Software Foundation, Inc. Contributed by Axis Communications AB, Lund, Sweden. Written by Hans-Peter Nilsson. diff -Nru gdb-9.1/opcodes/cris-opc.c gdb-10.2/opcodes/cris-opc.c --- gdb-9.1/opcodes/cris-opc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/cris-opc.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* cris-opc.c -- Table of opcodes for the CRIS processor. - Copyright (C) 2000-2019 Free Software Foundation, Inc. + Copyright (C) 2000-2020 Free Software Foundation, Inc. Contributed by Axis Communications AB, Lund, Sweden. Originally written for GAS 1.38.1 by Mikael Asker. Reorganized by Hans-Peter Nilsson. diff -Nru gdb-9.1/opcodes/crx-dis.c gdb-10.2/opcodes/crx-dis.c --- gdb-9.1/opcodes/crx-dis.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/crx-dis.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Disassembler code for CRX. - Copyright (C) 2004-2019 Free Software Foundation, Inc. + Copyright (C) 2004-2020 Free Software Foundation, Inc. Contributed by Tomer Levi, NSC, Israel. Written by Tomer Levi. @@ -31,11 +31,10 @@ /* Extract 'n_bits' from 'a' starting from offset 'offs'. */ #define EXTRACT(a, offs, n_bits) \ - (n_bits == 32 ? (((a) >> (offs)) & 0xffffffffL) \ - : (((a) >> (offs)) & ((1 << (n_bits)) -1))) + (((a) >> (offs)) & ((2ull << (n_bits - 1)) - 1)) /* Set Bit Mask - a mask to set all bits starting from offset 'offs'. */ -#define SBM(offs) ((((1 << (32 - offs)) -1) << (offs))) +#define SBM(offs) ((-1u << (offs)) & 0xffffffff) typedef unsigned long dwordU; typedef unsigned short wordU; @@ -98,23 +97,6 @@ incremented (escape sequence is used). */ static int size_changed; -static int get_number_of_operands (void); -static argtype getargtype (operand_type); -static int getbits (operand_type); -static char *getregname (reg); -static char *getcopregname (copreg, reg_type); -static char * getprocregname (int); -static char *gettrapstring (unsigned); -static char *getcinvstring (unsigned); -static void getregliststring (int, char *, enum REG_ARG_TYPE); -static wordU get_word_at_PC (bfd_vma, struct disassemble_info *); -static void get_words_at_PC (bfd_vma, struct disassemble_info *); -static unsigned long build_mask (void); -static int powerof2 (int); -static int match_opcode (void); -static void make_instruction (void); -static void print_arguments (ins *, bfd_vma, struct disassemble_info *); -static void print_arg (argument *, bfd_vma, struct disassemble_info *); /* Retrieve the number of operands for the current assembled instruction. */ @@ -123,7 +105,7 @@ { int i; - for (i = 0; instruction->operands[i].op_type && i < MAX_OPERANDS; i++) + for (i = 0; i < MAX_OPERANDS && instruction->operands[i].op_type; i++) ; return i; @@ -183,7 +165,7 @@ /* Given a register enum value, retrieve its name. */ -char * +static char * getregname (reg r) { const reg_entry * regentry = &crx_regtab[r]; @@ -196,7 +178,7 @@ /* Given a coprocessor register enum value, retrieve its name. */ -char * +static char * getcopregname (copreg r, reg_type type) { const reg_entry * regentry; @@ -241,7 +223,7 @@ /* Transform a register bit mask to a register list. */ -void +static void getregliststring (int mask, char *string, enum REG_ARG_TYPE core_cop) { char temp_string[16]; @@ -315,11 +297,11 @@ /* Build a mask of the instruction's 'constant' opcode, based on the instruction's printing flags. */ -static unsigned long +static unsigned int build_mask (void) { unsigned int print_flags; - unsigned long mask; + unsigned int mask; print_flags = instruction->flags & FMT_CRX; switch (print_flags) @@ -352,10 +334,10 @@ static int match_opcode (void) { - unsigned long mask; + unsigned int mask; /* The instruction 'constant' opcode doewsn't exceed 32 bits. */ - unsigned long doubleWord = (words[1] + (words[0] << 16)) & 0xffffffff; + unsigned int doubleWord = words[1] + ((unsigned) words[0] << 16); /* Start searching from end of instruction table. */ instruction = &crx_instruction[NUMOPCODES - 2]; @@ -405,7 +387,7 @@ inst_bit_size - start_bits); if ((p.nbits == 4) && cst4flag) - { + { if (IS_INSN_TYPE (CMPBR_INS) && (p.val == ESCAPE_16_BIT)) { /* A special case, where the value is actually stored @@ -415,19 +397,19 @@ size_changed = 1; } - if (p.val == 6) - p.val = -1; - else if (p.val == 13) - p.val = 48; - else if (p.val == 5) - p.val = -4; - else if (p.val == 10) - p.val = 32; - else if (p.val == 11) - p.val = 20; - else if (p.val == 9) - p.val = 16; - } + if (p.val == 6) + p.val = -1; + else if (p.val == 13) + p.val = 48; + else if (p.val == 5) + p.val = -4; + else if (p.val == 10) + p.val = 32; + else if (p.val == 11) + p.val = 20; + else if (p.val == 9) + p.val = 16; + } a->constant = p.val; break; @@ -457,30 +439,30 @@ case arg_cr: if (a->size <= 8) - { - p = makelongparameter (allWords, inst_bit_size - (start_bits + 4), + { + p = makelongparameter (allWords, inst_bit_size - (start_bits + 4), inst_bit_size - start_bits); - a->r = p.val; - /* Case for opc4 r dispu rbase. */ - p = makelongparameter (allWords, inst_bit_size - (start_bits + 8), + a->r = p.val; + /* Case for opc4 r dispu rbase. */ + p = makelongparameter (allWords, inst_bit_size - (start_bits + 8), inst_bit_size - (start_bits + 4)); - } + } else - { + { /* The 'rbase' start_bits is always relative to a 32-bit data type. */ - p = makelongparameter (allWords, 32 - (start_bits + 4), + p = makelongparameter (allWords, 32 - (start_bits + 4), 32 - start_bits); - a->r = p.val; - p = makelongparameter (allWords, 32 - start_bits, + a->r = p.val; + p = makelongparameter (allWords, 32 - start_bits, inst_bit_size); - } + } if ((p.nbits == 4) && cst4flag) - { - if (instruction->flags & DISPUW4) + { + if (instruction->flags & DISPUW4) p.val *= 2; - else if (instruction->flags & DISPUD4) + else if (instruction->flags & DISPUD4) p.val *= 4; - } + } a->constant = p.val; break; @@ -499,7 +481,7 @@ static void print_arg (argument *a, bfd_vma memaddr, struct disassemble_info *info) { - LONGLONG longdisp, mask; + ULONGLONG longdisp, mask; int sign_flag = 0; int relative = 0; bfd_vma number; @@ -533,29 +515,29 @@ func (stream, "%s", getcinvstring (a->constant)); else if (INST_HAS_REG_LIST) - { + { REG_ARG_TYPE reg_arg_type = IS_INSN_TYPE (COP_REG_INS) ? - COP_ARG : IS_INSN_TYPE (COPS_REG_INS) ? - COPS_ARG : (instruction->flags & USER_REG) ? - USER_REG_ARG : REG_ARG; + COP_ARG : IS_INSN_TYPE (COPS_REG_INS) ? + COPS_ARG : (instruction->flags & USER_REG) ? + USER_REG_ARG : REG_ARG; - if ((reg_arg_type == COP_ARG) || (reg_arg_type == COPS_ARG)) + if ((reg_arg_type == COP_ARG) || (reg_arg_type == COPS_ARG)) { - /* Check for proper argument number. */ - if (processing_argument_number == 2) - { - getregliststring (a->constant, string, reg_arg_type); - func (stream, "%s", string); - } - else - func (stream, "$0x%lx", a->constant & 0xffffffff); + /* Check for proper argument number. */ + if (processing_argument_number == 2) + { + getregliststring (a->constant, string, reg_arg_type); + func (stream, "%s", string); + } + else + func (stream, "$0x%lx", a->constant & 0xffffffff); } else - { - getregliststring (a->constant, string, reg_arg_type); - func (stream, "%s", string); - } - } + { + getregliststring (a->constant, string, reg_arg_type); + func (stream, "%s", string); + } + } else func (stream, "$0x%lx", a->constant & 0xffffffff); break; @@ -583,47 +565,47 @@ if (IS_INSN_TYPE (BRANCH_INS) || IS_INSN_MNEMONIC ("bal") || IS_INSN_TYPE (CMPBR_INS) || IS_INSN_TYPE (DCR_BRANCH_INS) || IS_INSN_TYPE (COP_BRANCH_INS)) - { + { relative = 1; - longdisp = a->constant; - longdisp <<= 1; + longdisp = a->constant; + longdisp <<= 1; - switch (a->size) - { - case 8: + switch (a->size) + { + case 8: case 16: case 24: case 32: - mask = ((LONGLONG)1 << a->size) - 1; - if (longdisp & ((LONGLONG)1 << a->size)) - { - sign_flag = 1; - longdisp = ~(longdisp) + 1; - } - a->constant = (unsigned long int) (longdisp & mask); - break; - default: + mask = ((LONGLONG) 1 << a->size) - 1; + if (longdisp & ((ULONGLONG) 1 << a->size)) + { + sign_flag = 1; + longdisp = ~(longdisp) + 1; + } + a->constant = (unsigned long int) (longdisp & mask); + break; + default: func (stream, "Wrong offset used in branch/bal instruction"); - break; - } + break; + } - } + } /* For branch Neq instruction it is 2*offset + 2. */ else if (IS_INSN_TYPE (BRANCH_NEQ_INS)) a->constant = 2 * a->constant + 2; else if (IS_INSN_TYPE (LD_STOR_INS_INC) - || IS_INSN_TYPE (LD_STOR_INS) - || IS_INSN_TYPE (STOR_IMM_INS) - || IS_INSN_TYPE (CSTBIT_INS)) - { - op_index = instruction->flags & REVERSE_MATCH ? 0 : 1; - if (instruction->operands[op_index].op_type == abs16) + || IS_INSN_TYPE (LD_STOR_INS) + || IS_INSN_TYPE (STOR_IMM_INS) + || IS_INSN_TYPE (CSTBIT_INS)) + { + op_index = instruction->flags & REVERSE_MATCH ? 0 : 1; + if (instruction->operands[op_index].op_type == abs16) a->constant |= 0xFFFF0000; - } + } func (stream, "%s", "0x"); number = (relative ? memaddr : 0) - + (sign_flag ? -a->constant : a->constant); + + (sign_flag ? -a->constant : a->constant); (*info->print_address_func) (number, info); break; default: diff -Nru gdb-9.1/opcodes/crx-opc.c gdb-10.2/opcodes/crx-opc.c --- gdb-9.1/opcodes/crx-opc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/crx-opc.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* crx-opc.c -- Table of opcodes for the CRX processor. - Copyright (C) 2004-2019 Free Software Foundation, Inc. + Copyright (C) 2004-2020 Free Software Foundation, Inc. Contributed by Tomer Levi NSC, Israel. Originally written for GAS 2.12 by Tomer Levi. diff -Nru gdb-9.1/opcodes/csky-dis.c gdb-10.2/opcodes/csky-dis.c --- gdb-9.1/opcodes/csky-dis.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/csky-dis.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* C-SKY disassembler. - Copyright (C) 1988-2019 Free Software Foundation, Inc. + Copyright (C) 1988-2020 Free Software Foundation, Inc. Contributed by C-SKY Microsystems and Mentor Graphics. This file is part of the GNU opcodes library. @@ -23,6 +23,7 @@ #include "config.h" #include <stdio.h> #include "bfd_stdint.h" +#include <elf/csky.h> #include "disassemble.h" #include "elf-bfd.h" #include "opcode/csky.h" @@ -32,6 +33,7 @@ #define CSKY_INST_TYPE unsigned long #define HAS_SUB_OPERAND (unsigned int)0xffffffff +#define CSKY_DEFAULT_ISA 0xffffffff enum sym_type { @@ -47,6 +49,7 @@ disassemble_info *info; /* Opcode information. */ struct csky_opcode_info const *opinfo; + BFD_HOST_U_64_BIT isa; /* The value of operand to show. */ int value; /* Whether to look up/print a symbol name. */ @@ -134,17 +137,15 @@ static unsigned int csky_chars_to_number (unsigned char * buf, int n) { - if (n <= 0) - abort (); int i; unsigned int val = 0; if (dis_info.info->endian == BFD_ENDIAN_BIG) for (i = 0; i < n; i++) - val = val << 8 | (buf[i] & 0xff); + val = val << 8 | buf[i]; else for (i = n - 1; i >= 0; i--) - val = val << 8 | (buf[i] & 0xff); + val = val << 8 | buf[i]; return val; } @@ -161,6 +162,13 @@ p = g_opcodeP; while (p->mnemonic) { + if (!(p->isa_flag16 & dis_info.isa) + && !(p->isa_flag32 & dis_info.isa)) + { + p++; + continue; + } + /* Get the opcode mask. */ for (i = 0; i < OP_TABLE_NUM; i++) if (length == 2) @@ -228,9 +236,30 @@ disassembler_ftype csky_get_disassembler (bfd *abfd) { - if (abfd != NULL) - mach_flag = elf_elfheader (abfd)->e_flags; - return print_insn_csky; + obj_attribute *attr; + const char *sec_name = NULL; + if (!abfd) + dis_info.isa = CSKY_DEFAULT_ISA; + else + { + mach_flag = elf_elfheader (abfd)->e_flags; + + sec_name = get_elf_backend_data (abfd)->obj_attrs_section; + /* Skip any input that hasn't attribute section. + This enables to link object files without attribute section with + any others. */ + if (bfd_get_section_by_name (abfd, sec_name) != NULL) + { + attr = elf_known_obj_attributes_proc (abfd); + dis_info.isa = attr[Tag_CSKY_ISA_EXT_FLAGS].i; + dis_info.isa <<= 32; + dis_info.isa |= attr[Tag_CSKY_ISA_FLAGS].i; + } + else + dis_info.isa = CSKY_DEFAULT_ISA; + } + + return print_insn_csky; } static int @@ -315,6 +344,7 @@ strcat (str, buf); break; case OPRND_TYPE_VREG: + dis_info.value = value; sprintf (buf, "vr%d", (int)value); strcat (str, buf); break; @@ -595,6 +625,64 @@ strcat (str, buf); break; } + case OPRND_TYPE_HFLOAT_FMOVI: + case OPRND_TYPE_SFLOAT_FMOVI: + { + int imm4; + int imm8; + imm4 = ((inst >> 16) & 0xf); + imm4 = (138 - imm4) << 23; + + imm8 = ((inst >> 8) & 0x3); + imm8 |= (((inst >> 20) & 0x3f) << 2); + imm8 <<= 15; + + value = ((inst >> 5) & 1) << 31; + value |= imm4 | imm8; + + imm4 = 138 - (imm4 >> 23); + imm8 >>= 15; + if ((inst >> 5) & 1) + { + imm8 = 0 - imm8; + } + + float f = 0; + memcpy (&f, &value, sizeof (float)); + sprintf (buf, "%f\t// imm9:%4d, imm4:%2d", f, imm8, imm4); + strcat (str, buf); + + break; + } + + case OPRND_TYPE_DFLOAT_FMOVI: + { + uint64_t imm4; + uint64_t imm8; + uint64_t dvalue; + imm4 = ((inst >> 16) & 0xf); + imm4 = (1034 - imm4) << 52; + + imm8 = ((inst >> 8) & 0x3); + imm8 |= (((inst >> 20) & 0x3f) << 2); + imm8 <<= 44; + + dvalue = (((uint64_t)inst >> 5) & 1) << 63; + dvalue |= imm4 | imm8; + + imm4 = 1034 - (imm4 >> 52); + imm8 >>= 44; + if (inst >> 5) + { + imm8 = 0 - imm8; + } + double d = 0; + memcpy (&d, &dvalue, sizeof (double)); + sprintf (buf, "%lf\t// imm9:%4ld, imm4:%2ld", d, (long) imm8, (long) imm4); + strcat (str, buf); + + break; + } case OPRND_TYPE_LABEL_WITH_BRACKET: sprintf (buf, "[0x%x]", (unsigned int)value); strcat (str, buf); @@ -625,8 +713,20 @@ case OPRND_TYPE_FREGLIST_DASH: if (IS_CSKY_V2 (mach_flag)) { - int vrx = value & 0xf; - int vry = vrx + (value >> 4); + int vrx = 0; + int vry = 0; + if (dis_info.isa & CSKY_ISA_FLOAT_7E60 + && (strstr (str, "fstm") != NULL + || strstr (str, "fldm") != NULL)) + { + vrx = value & 0x1f; + vry = vrx + (value >> 5); + } + else + { + vrx = value & 0xf; + vry = vrx + (value >> 4); + } sprintf (buf, "fr%d-fr%d", vrx, vry); strcat (str, buf); } @@ -916,7 +1016,7 @@ CSKY_INST_TYPE inst = 0; int status; char str[256]; - long given; + unsigned long given; int is_data = FALSE; void (*printer) (bfd_vma, struct disassemble_info *, long); unsigned int size = 4; @@ -930,10 +1030,16 @@ if (mach_flag != INIT_MACH_FLAG && mach_flag != BINARY_MACH_FLAG) info->mach = mach_flag; else if (mach_flag == INIT_MACH_FLAG) - mach_flag = info->mach; + { + mach_flag = info->mach; + dis_info.isa = CSKY_DEFAULT_ISA; + } if (mach_flag == BINARY_MACH_FLAG && info->endian == BFD_ENDIAN_UNKNOWN) - info->endian = BFD_ENDIAN_LITTLE; + { + info->endian = BFD_ENDIAN_LITTLE; + dis_info.isa = CSKY_DEFAULT_ISA; + } /* First check the full symtab for a mapping symbol, even if there are no usable non-mapping symbols for this address. */ diff -Nru gdb-9.1/opcodes/csky-opc.h gdb-10.2/opcodes/csky-opc.h --- gdb-9.1/opcodes/csky-opc.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/csky-opc.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Declarations for C-SKY opcode table - Copyright (C) 2007-2019 Free Software Foundation, Inc. + Copyright (C) 2007-2020 Free Software Foundation, Inc. Contributed by C-SKY Microsystems and Mentor Graphics. This file is part of the GNU opcodes library. @@ -22,7 +22,7 @@ #include "opcode/csky.h" #define OP_TABLE_NUM 2 -#define MAX_OPRND_NUM 4 +#define MAX_OPRND_NUM 5 enum operand_type { @@ -116,6 +116,7 @@ OPRND_TYPE_IMM5b, OPRND_TYPE_IMM7b, OPRND_TYPE_IMM8b, + OPRND_TYPE_IMM9b, OPRND_TYPE_IMM12b, OPRND_TYPE_IMM15b, OPRND_TYPE_IMM16b, @@ -195,6 +196,9 @@ /* Single float and double float. */ OPRND_TYPE_SFLOAT, OPRND_TYPE_DFLOAT, + OPRND_TYPE_HFLOAT_FMOVI, + OPRND_TYPE_SFLOAT_FMOVI, + OPRND_TYPE_DFLOAT_FMOVI, }; /* Operand descriptors. */ @@ -222,7 +226,7 @@ union csky_operand { - struct operand oprnds[5]; + struct operand oprnds[MAX_OPRND_NUM]; struct suboperand1 { struct operand oprnd; @@ -262,8 +266,8 @@ /* Encodings for 32-bit opcodes. */ struct csky_opcode_info op32[OP_TABLE_NUM]; /* Instruction set flag. */ - unsigned int isa_flag16; - unsigned int isa_flag32; + BFD_HOST_U_64_BIT isa_flag16; + BFD_HOST_U_64_BIT isa_flag32; /* Whether this insn needs relocation, 0: no, !=0: yes. */ signed int reloc16; signed int reloc32; @@ -331,6 +335,7 @@ #define OPRND_MASK_2_5 0x3c #define OPRND_MASK_3_7 0xf8 #define OPRND_MASK_4 0x10 +#define OPRND_MASK_4_5 0x30 #define OPRND_MASK_4_6 0x70 #define OPRND_MASK_4_7 0xf0 #define OPRND_MASK_4_8 0x1f0 @@ -340,8 +345,13 @@ #define OPRND_MASK_5_7 0xe0 #define OPRND_MASK_5_8 0x1e0 #define OPRND_MASK_5_9 0x3e0 +#define OPRND_MASK_6 0x40 +#define OPRND_MASK_6_7 0xc0 +#define OPRND_MASK_6_8 0x1c0 #define OPRND_MASK_6_9 0x3c0 #define OPRND_MASK_6_10 0x7c0 +#define OPRND_MASK_7 0x80 +#define OPRND_MASK_7_8 0x180 #define OPRND_MASK_8_9 0x300 #define OPRND_MASK_8_10 0x700 #define OPRND_MASK_8_11 0xf00 @@ -354,17 +364,33 @@ #define OPRND_MASK_16_19 0xf0000 #define OPRND_MASK_16_20 0x1f0000 #define OPRND_MASK_16_25 0x3ff0000 +#define OPRND_MASK_17_24 0x1fe0000 +#define OPRND_MASK_20 0x0100000 +#define OPRND_MASK_20_21 0x0300000 +#define OPRND_MASK_20_22 0x0700000 +#define OPRND_MASK_20_23 0x0f00000 +#define OPRND_MASK_20_24 0x1f00000 +#define OPRND_MASK_20_25 0x3f00000 #define OPRND_MASK_21_24 0x1e00000 #define OPRND_MASK_21_25 0x3e00000 #define OPRND_MASK_25 0x2000000 #define OPRND_MASK_RSV 0xffffffff +#define OPRND_MASK_0_3or5_8 OPRND_MASK_0_3 | OPRND_MASK_5_8 +#define OPRND_MASK_0_3or6_7 OPRND_MASK_0_3 | OPRND_MASK_6_7 #define OPRND_MASK_0_3or21_24 OPRND_MASK_0_3 | OPRND_MASK_21_24 +#define OPRND_MASK_0_3or25 OPRND_MASK_0_3 | OPRND_MASK_25 +#define OPRND_MASK_0_4or21_24 OPRND_MASK_0_4 | OPRND_MASK_21_24 #define OPRND_MASK_0_4or21_25 OPRND_MASK_0_4 | OPRND_MASK_21_25 #define OPRND_MASK_0_4or16_20 OPRND_MASK_0_4 | OPRND_MASK_16_20 #define OPRND_MASK_0_4or8_10 OPRND_MASK_0_4 | OPRND_MASK_8_10 #define OPRND_MASK_0_4or8_9 OPRND_MASK_0_4 | OPRND_MASK_8_9 #define OPRND_MASK_0_14or16_20 OPRND_MASK_0_14 | OPRND_MASK_16_20 #define OPRND_MASK_4or5_8 OPRND_MASK_4 | OPRND_MASK_5_8 +#define OPRND_MASK_5or20_21 OPRND_MASK_5 | OPRND_MASK_20_21 +#define OPRND_MASK_5or20_22 OPRND_MASK_5 | OPRND_MASK_20_22 +#define OPRND_MASK_5or20_23 OPRND_MASK_5 | OPRND_MASK_20_23 +#define OPRND_MASK_5or20_24 OPRND_MASK_5 | OPRND_MASK_20_24 +#define OPRND_MASK_5or20_25 OPRND_MASK_5 | OPRND_MASK_20_25 #define OPRND_MASK_5or21_24 OPRND_MASK_5 | OPRND_MASK_21_24 #define OPRND_MASK_2_5or6_9 OPRND_MASK_2_5 | OPRND_MASK_6_9 #define OPRND_MASK_4_6or21_25 OPRND_MASK_4_6 | OPRND_MASK_21_25 @@ -372,10 +398,23 @@ #define OPRND_MASK_5_6or21_25 OPRND_MASK_5_6 | OPRND_MASK_21_25 #define OPRND_MASK_5_7or8_10 OPRND_MASK_5_7 | OPRND_MASK_8_10 #define OPRND_MASK_5_9or21_25 OPRND_MASK_5_9 | OPRND_MASK_21_25 +#define OPRND_MASK_8_9or21_25 OPRND_MASK_8_9 | OPRND_MASK_21_25 +#define OPRND_MASK_8_9or16_25 OPRND_MASK_8_9 | OPRND_MASK_16_20 | OPRND_MASK_21_25 #define OPRND_MASK_16_19or21_24 OPRND_MASK_16_19 | OPRND_MASK_21_24 #define OPRND_MASK_16_20or21_25 OPRND_MASK_16_20 | OPRND_MASK_21_25 #define OPRND_MASK_4or9_10or25 OPRND_MASK_4 | OPRND_MASK_9_10 | OPRND_MASK_25 #define OPRND_MASK_4_7or16_24 OPRND_MASK_4_7 | OPRND_MASK_16_20 | OPRND_MASK_21_24 +#define OPRND_MASK_4_6or20 OPRND_MASK_4_6 | OPRND_MASK_20 +#define OPRND_MASK_5_7or20 OPRND_MASK_5_7 | OPRND_MASK_20 +#define OPRND_MASK_4_5or20or25 OPRND_MASK_4 | OPRND_MASK_5 | OPRND_MASK_20 | OPRND_MASK_25 +#define OPRND_MASK_4_6or20or25 OPRND_MASK_4_6 | OPRND_MASK_20 | OPRND_MASK_25 +#define OPRND_MASK_4_7or20or25 OPRND_MASK_4_7 | OPRND_MASK_20 | OPRND_MASK_25 +#define OPRND_MASK_6_9or17_24 OPRND_MASK_6_9 | OPRND_MASK_17_24 +#define OPRND_MASK_6_7or20 OPRND_MASK_6_7 | OPRND_MASK_20 +#define OPRND_MASK_6or20 OPRND_MASK_6 | OPRND_MASK_20 +#define OPRND_MASK_7or20 OPRND_MASK_7 | OPRND_MASK_20 +#define OPRND_MASK_5or8_9or16_25 OPRND_MASK_5 | OPRND_MASK_8_9or16_25 +#define OPRND_MASK_5or8_9or20_25 OPRND_MASK_5 | OPRND_MASK_8_9 | OPRND_MASK_20_25 #define OPERAND_INFO(mask, type, shift) \ {OPRND_MASK_##mask, OPRND_TYPE_##type, shift} @@ -2634,7 +2673,7 @@ (21_25, AREG, OPRND_SHIFT_0_BIT)), CSKY_ISA_DSP), OP32 ("mulsws", - OPCODE_INFO2 (0xc4009480, + OPCODE_INFO2 (0xc4009500, (16_20, AREG, OPRND_SHIFT_0_BIT), (21_25, AREG, OPRND_SHIFT_0_BIT)), CSKY_ISA_DSP), @@ -2648,7 +2687,7 @@ CSKY_ISA_DSP), OP32 ("mvtc", OPCODE_INFO0 (0xc4009a00), - CSKY_ISA_DSP), + CSKY_ISA_DSPE60), OP32 ("mfhi", OPCODE_INFO1 (0xc4009c20, (0_4, AREG, OPRND_SHIFT_0_BIT)), @@ -3401,11 +3440,6 @@ (0_3or21_24, FREGLIST_DASH, OPRND_SHIFT_0_BIT), (16_20, AREG_WITH_BRACKET, OPRND_SHIFT_0_BIT)), CSKY_ISA_FLOAT_1E2), - DOP32 ("sync", - OPCODE_INFO1 (0xc0000420, - (21_25, IMM5b, OPRND_SHIFT_0_BIT)), - OPCODE_INFO0 (0xc0000420), - CSKYV2_ISA_E1), DOP32 ("idly", OPCODE_INFO1 (0xc0001c20, (21_25, OIMM5b_IDLY, OPRND_SHIFT_0_BIT)), @@ -4085,7 +4119,7 @@ OPCODE_INFO2 (0xc4009420, (0_4or16_20, DUP_AREG, OPRND_SHIFT_0_BIT), (21_25, AREG, OPRND_SHIFT_0_BIT)), - CSKY_ISA_DSP), + CSKY_ISA_DSPE60), OP16_OP32 ("ld.b", SOPCODE_INFO2 (0x8000, (5_7, GREG0_7, OPRND_SHIFT_0_BIT), @@ -4565,12 +4599,19 @@ OPCODE_INFO1 (0xe8400000, (0_15, COND16b, OPRND_SHIFT_1_BIT)), CSKYV2_ISA_1E2), +#undef _RELAX +#undef _RELOC16 +#define _RELAX 0 +#define _RELOC16 0 + OP32 ("bnezad", + OPCODE_INFO2 (0xe8200000, + (16_20, AREG, OPRND_SHIFT_0_BIT), + (0_15, COND16b, OPRND_SHIFT_1_BIT)), + CSKYV2_ISA_3E3R2), #undef _RELOC16 #undef _RELOC32 -#undef _RELAX #define _RELOC16 0 #define _RELOC32 0 -#define _RELAX 0 #undef _TRANSFER #define _TRANSFER 1 OP16_WITH_WORK ("jbr", @@ -4674,14 +4715,137 @@ #undef _RELAX #define _RELAX 0 + /* CK860 instructions. */ + OP32 ("sync.is", + OPCODE_INFO0 (0xc2200420), + CSKYV2_ISA_10E60), + OP32 ("sync.i", + OPCODE_INFO0 (0xc0200420), + CSKYV2_ISA_10E60), + OP32 ("sync.s", + OPCODE_INFO0 (0xc2000420), + CSKYV2_ISA_10E60), + OP32 ("bar.brwarw", + OPCODE_INFO0 (0xc000842f), + CSKYV2_ISA_10E60), + OP32 ("bar.brwarws", + OPCODE_INFO0 (0xc200842f), + CSKYV2_ISA_10E60), + OP32 ("bar.brar", + OPCODE_INFO0 (0xc0008425), + CSKYV2_ISA_10E60), + OP32 ("bar.brars", + OPCODE_INFO0 (0xc2008425), + CSKYV2_ISA_10E60), + OP32 ("bar.bwaw", + OPCODE_INFO0 (0xc000842a), + CSKYV2_ISA_10E60), + OP32 ("bar.bwaws", + OPCODE_INFO0 (0xc200842a), + CSKYV2_ISA_10E60), + OP32 ("icache.iall", + OPCODE_INFO0 (0xc1009020), + CSKYV2_ISA_10E60), + OP32 ("icache.ialls", + OPCODE_INFO0 (0xc3009020), + CSKYV2_ISA_10E60), + OP32 ("l2cache.iall", + OPCODE_INFO0 (0xc1009820), + CSKYV2_ISA_10E60), + OP32 ("l2cache.call", + OPCODE_INFO0 (0xc0809820), + CSKYV2_ISA_10E60), + OP32 ("l2cache.ciall", + OPCODE_INFO0 (0xc1809820), + CSKYV2_ISA_10E60), + OP32 ("icache.iva", + OPCODE_INFO1 (0xc1609020, + (16_20, AREG, OPRND_SHIFT_0_BIT)), + CSKYV2_ISA_10E60), + OP32 ("dcache.iall", + OPCODE_INFO0 (0xc1009420), + CSKYV2_ISA_10E60), + OP32 ("dcache.iva", + OPCODE_INFO1 (0xc1609420, + (16_20, AREG, OPRND_SHIFT_0_BIT)), + CSKYV2_ISA_10E60), + OP32 ("dcache.isw", + OPCODE_INFO1 (0xc1409420, + (16_20, AREG, OPRND_SHIFT_0_BIT)), + CSKYV2_ISA_10E60), + OP32 ("dcache.call", + OPCODE_INFO0 (0xc0809420), + CSKYV2_ISA_10E60), + OP32 ("dcache.cva", + OPCODE_INFO1 (0xc0e09420, + (16_20, AREG, OPRND_SHIFT_0_BIT)), + CSKYV2_ISA_10E60), + OP32 ("dcache.cval1", + OPCODE_INFO1 (0xc2e09420, + (16_20, AREG, OPRND_SHIFT_0_BIT)), + CSKYV2_ISA_10E60), + OP32 ("dcache.csw", + OPCODE_INFO1 (0xc0c09420, + (16_20, AREG, OPRND_SHIFT_0_BIT)), + CSKYV2_ISA_10E60), + OP32 ("dcache.ciall", + OPCODE_INFO0 (0xc1809420), + CSKYV2_ISA_10E60), + OP32 ("dcache.civa", + OPCODE_INFO1 (0xc1e09420, + (16_20, AREG, OPRND_SHIFT_0_BIT)), + CSKYV2_ISA_10E60), + OP32 ("dcache.cisw", + OPCODE_INFO1 (0xc1c09420, + (16_20, AREG, OPRND_SHIFT_0_BIT)), + CSKYV2_ISA_10E60), + OP32 ("tlbi.vaa", + OPCODE_INFO1 (0xc0408820, + (16_20, AREG, OPRND_SHIFT_0_BIT)), + CSKYV2_ISA_10E60), + OP32 ("tlbi.vaas", + OPCODE_INFO1 (0xc2408820, + (16_20, AREG, OPRND_SHIFT_0_BIT)), + CSKYV2_ISA_10E60), + OP32 ("tlbi.asid", + OPCODE_INFO1 (0xc0208820, + (16_20, AREG, OPRND_SHIFT_0_BIT)), + CSKYV2_ISA_10E60), + OP32 ("tlbi.asids", + OPCODE_INFO1 (0xc2208820, + (16_20, AREG, OPRND_SHIFT_0_BIT)), + CSKYV2_ISA_10E60), + OP32 ("tlbi.va", + OPCODE_INFO1 (0xc0608820, + (16_20, AREG, OPRND_SHIFT_0_BIT)), + CSKYV2_ISA_10E60), + OP32 ("tlbi.vas", + OPCODE_INFO1 (0xc2608820, + (16_20, AREG, OPRND_SHIFT_0_BIT)), + CSKYV2_ISA_10E60), + OP32 ("tlbi.all", + OPCODE_INFO0 (0xc0008820), + CSKYV2_ISA_10E60), + OP32 ("tlbi.alls", + OPCODE_INFO0 (0xc2008820), + CSKYV2_ISA_10E60), + DOP32 ("sync", + OPCODE_INFO0 (0xc0000420), + OPCODE_INFO1 (0xc0000420, + (21_25, IMM5b, OPRND_SHIFT_0_BIT)), + CSKYV2_ISA_E1), + /* The followings are enhance DSP instructions. */ - OP32_WITH_WORK ("bloop", - OPCODE_INFO3 (0xe9c00000, + DOP32_WITH_WORK ("bloop", + OPCODE_INFO3 (0xe9c00000, (16_20, AREG, OPRND_SHIFT_0_BIT), (0_11, BLOOP_OFF12b, OPRND_SHIFT_1_BIT), (12_15, BLOOP_OFF4b, OPRND_SHIFT_1_BIT)), - CSKY_ISA_DSP_ENHANCE, - dsp_work_bloop), + OPCODE_INFO2 (0xe9c00000, + (16_20, AREG, OPRND_SHIFT_0_BIT), + (0_11, BLOOP_OFF12b, OPRND_SHIFT_1_BIT)), + CSKY_ISA_DSP_ENHANCE, + dsp_work_bloop), /* The followings are ld/st instructions. */ OP32 ("ldbi.b", OPCODE_INFO2 (0xd0008000, @@ -5205,13 +5369,13 @@ (0_4, AREG, OPRND_SHIFT_0_BIT), (16_20, AREG, OPRND_SHIFT_0_BIT), (21_25, AREG, OPRND_SHIFT_0_BIT)), - CSKY_ISA_DSP_ENHANCE), + CSKYV2_ISA_3E3R3), OP32 ("divsl", OPCODE_INFO3 (0xf800e2e0, (0_4, AREG, OPRND_SHIFT_0_BIT), (16_20, AREG, OPRND_SHIFT_0_BIT), (21_25, AREG, OPRND_SHIFT_0_BIT)), - CSKY_ISA_DSP_ENHANCE), + CSKYV2_ISA_3E3R3), OP32 ("mulaca.s8", OPCODE_INFO3 (0xf800e4c0, (0_4, AREG, OPRND_SHIFT_0_BIT), @@ -5315,7 +5479,7 @@ (16_20, AREG, OPRND_SHIFT_0_BIT), (21_25, AREG, OPRND_SHIFT_0_BIT)), CSKY_ISA_DSP_ENHANCE), - OP32 ("plsli.u16", + OP32 ("plsli.16", OPCODE_INFO3 (0xf800d400, (0_4, AREG, OPRND_SHIFT_0_BIT), (16_20, AREG, OPRND_SHIFT_0_BIT), @@ -7976,6 +8140,2005 @@ (21_24, VREG, OPRND_SHIFT_0_BIT)), CSKY_ISA_VDSP), +#define OPRND_SHIFT0(mask, type) (mask, type, OPRND_SHIFT_0_BIT) +#define OPRND_SHIFT1(mask, type) (mask, type, OPRND_SHIFT_1_BIT) +#define OPRND_SHIFT2(mask, type) (mask, type, OPRND_SHIFT_2_BIT) +#define OPRND_SHIFT3(mask, type) (mask, type, OPRND_SHIFT_3_BIT) +#define OPRND_SHIFT4(mask, type) (mask, type, OPRND_SHIFT_4_BIT) + +/* The followings are 860 floating instructions. */ + OP32 ("fadd.16", + OPCODE_INFO3 (0xf400c800, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("faddh", + OPCODE_INFO3 (0xf400c800, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fsub.16", + OPCODE_INFO3 (0xf400c820, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fsubh", + OPCODE_INFO3 (0xf400c820, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fmov.16", + OPCODE_INFO2 (0xf400c880, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fmovh", + OPCODE_INFO2 (0xf400c880, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fabs.16", + OPCODE_INFO2 (0xf400c8c0, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fabsh", + OPCODE_INFO2 (0xf400c8c0, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fneg.16", + OPCODE_INFO2 (0xf400c8e0, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fnegh", + OPCODE_INFO2 (0xf400c8e0, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fcmphsz.16", + OPCODE_INFO1 (0xf400c900, + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fcmpzhsh", + OPCODE_INFO1 (0xf400c900, + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fcmpltz.16", + OPCODE_INFO1 (0xf400c920, + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fcmpzlth", + OPCODE_INFO1 (0xf400c920, + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fcmpnez.16", + OPCODE_INFO1 (0xf400c940, + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fcmpzneh", + OPCODE_INFO1 (0xf400c940, + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fcmpuoz.16", + OPCODE_INFO1 (0xf400c960, + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fcmpzuoh", + OPCODE_INFO1 (0xf400c960, + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fcmphs.16", + OPCODE_INFO2 (0xf400c980, + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fcmphsh", + OPCODE_INFO2 (0xf400c980, + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fcmplt.16", + OPCODE_INFO2 (0xf400c9a0, + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fcmpne.16", + OPCODE_INFO2 (0xf400c9c0, + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fcmpneh", + OPCODE_INFO2 (0xf400c9c0, + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fcmpuo.16", + OPCODE_INFO2 (0xf400c9e0, + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fcmpuoh", + OPCODE_INFO2 (0xf400c9e0, + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fmaxnm.16", + OPCODE_INFO3 (0xf400cd00, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fminnm.16", + OPCODE_INFO3 (0xf400cd20, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fcmphz.16", + OPCODE_INFO1 (0xf400cd40, + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fcmplsz.16", + OPCODE_INFO1 (0xf400cd60, + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fmul.16", + OPCODE_INFO3 (0xf400ca00, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fmulh", + OPCODE_INFO3 (0xf400ca00, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fnmul.16", + OPCODE_INFO3 (0xf400ca20, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fnmulh", + OPCODE_INFO3 (0xf400ca20, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fmula.16", + OPCODE_INFO3 (0xf400ca80, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fmach", + OPCODE_INFO3 (0xf400ca80, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fnmuls.16", + OPCODE_INFO3 (0xf400caa0, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fmsch", + OPCODE_INFO3 (0xf400caa0, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fmuls.16", + OPCODE_INFO3 (0xf400cac0, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fnmach", + OPCODE_INFO3 (0xf400cac0, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fnmula.16", + OPCODE_INFO3 (0xf400cae0, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fnmsch", + OPCODE_INFO3 (0xf400cae0, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("ffmula.16", + OPCODE_INFO3 (0xf400ce00, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("ffmuls.16", + OPCODE_INFO3 (0xf400ce20, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("ffnmula.16", + OPCODE_INFO3 (0xf400ce40, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("ffnmuls.16", + OPCODE_INFO3 (0xf400ce60, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fdivh", + OPCODE_INFO3 (0xf400cb00, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fdiv.16", + OPCODE_INFO3 (0xf400cb00, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("freciph", + OPCODE_INFO2 (0xf400cb20, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("frecip.16", + OPCODE_INFO2 (0xf400cb20, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fsqrt.16", + OPCODE_INFO2 (0xf400cb40, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fsqrth", + OPCODE_INFO2 (0xf400cb40, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fsel.16", + OPCODE_INFO3 (0xf400cf20, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + /* Single floating. */ + OP32 ("fadd.32", + OPCODE_INFO3 (0xf4000000, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fadds", + OPCODE_INFO3 (0xf4000000, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fsub.32", + OPCODE_INFO3 (0xf4000020, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fsubs", + OPCODE_INFO3 (0xf4000020, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fmov.32", + OPCODE_INFO2 (0xf4000080, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fmovs", + OPCODE_INFO2 (0xf4000080, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fabs.32", + OPCODE_INFO2 (0xf40000c0, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fabss", + OPCODE_INFO2 (0xf40000c0, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fneg.32", + OPCODE_INFO2 (0xf40000e0, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fnegs", + OPCODE_INFO2 (0xf40000e0, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fcmphsz.32", + OPCODE_INFO1 (0xf4000100, + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fcmpzhss", + OPCODE_INFO1 (0xf4000100, + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fcmpltz.32", + OPCODE_INFO1 (0xf4000120, + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fcmpzlts", + OPCODE_INFO1 (0xf4000120, + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fcmpnez.32", + OPCODE_INFO1 (0xf4000140, + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fcmpznes", + OPCODE_INFO1 (0xf4000140, + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fcmpuoz.32", + OPCODE_INFO1 (0xf4000160, + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fcmpzuos", + OPCODE_INFO1 (0xf4000160, + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fcmphs.32", + OPCODE_INFO2 (0xf4000180, + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fcmphss", + OPCODE_INFO2 (0xf4000180, + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fcmplt.32", + OPCODE_INFO2 (0xf40001a0, + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fcmplts", + OPCODE_INFO2 (0xf40001a0, + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fcmpne.32", + OPCODE_INFO2 (0xf40001c0, + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fcmpnes", + OPCODE_INFO2 (0xf40001c0, + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fcmpuo.32", + OPCODE_INFO2 (0xf40001e0, + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fcmpuos", + OPCODE_INFO2 (0xf40001e0, + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fmaxnm.32", + OPCODE_INFO3 (0xf4000500, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fminnm.32", + OPCODE_INFO3 (0xf4000520, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fcmphz.32", + OPCODE_INFO1 (0xf4000540, + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fcmplsz.32", + OPCODE_INFO1 (0xf4000560, + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fmul.32", + OPCODE_INFO3 (0xf4000200, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fmuls", + OPCODE_INFO3 (0xf4000200, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fnmul.32", + OPCODE_INFO3 (0xf4000220, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fnmuls", + OPCODE_INFO3 (0xf4000220, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fmula.32", + OPCODE_INFO3 (0xf4000280, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fmacs", + OPCODE_INFO3 (0xf4000280, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fnmuls.32", + OPCODE_INFO3 (0xf40002a0, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fmscs", + OPCODE_INFO3 (0xf40002a0, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fmuls.32", + OPCODE_INFO3 (0xf40002c0, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fnmacs", + OPCODE_INFO3 (0xf40002c0, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fnmula.32", + OPCODE_INFO3 (0xf40002e0, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fnmscs", + OPCODE_INFO3 (0xf40002e0, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("ffmula.32", + OPCODE_INFO3 (0xf4000600, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("ffmuls.32", + OPCODE_INFO3 (0xf4000620, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("ffnmula.32", + OPCODE_INFO3 (0xf4000640, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("ffnmuls.32", + OPCODE_INFO3 (0xf4000660, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fdiv.32", + OPCODE_INFO3 (0xf4000300, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fdivs", + OPCODE_INFO3 (0xf4000300, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("frecip.32", + OPCODE_INFO2 (0xf4000320, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("frecips", + OPCODE_INFO2 (0xf4000320, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fsqrt.32", + OPCODE_INFO2 (0xf4000340, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fsqrts", + OPCODE_INFO2 (0xf4000340, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fsel.32", + OPCODE_INFO3 (0xf4000720, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + /* Double floating. */ + OP32 ("fadd.64", + OPCODE_INFO3 (0xf4000800, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("faddd", + OPCODE_INFO3 (0xf4000800, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fsub.64", + OPCODE_INFO3 (0xf4000820, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fsubd", + OPCODE_INFO3 (0xf4000820, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fmov.64", + OPCODE_INFO2 (0xf4000880, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fmovd", + OPCODE_INFO2 (0xf4000880, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fmovx.32", + OPCODE_INFO2 (0xf40008a0, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fabs.64", + OPCODE_INFO2 (0xf40008c0, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fabsd", + OPCODE_INFO2 (0xf40008c0, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fneg.64", + OPCODE_INFO2 (0xf40008e0, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fnegd", + OPCODE_INFO2 (0xf40008e0, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fcmphsz.64", + OPCODE_INFO1 (0xf4000900, + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fcmpzhsd", + OPCODE_INFO1 (0xf4000900, + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fcmpltz.64", + OPCODE_INFO1 (0xf4000920, + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fcmpzltd", + OPCODE_INFO1 (0xf4000920, + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fcmpnez.64", + OPCODE_INFO1 (0xf4000940, + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fcmpzned", + OPCODE_INFO1 (0xf4000940, + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fcmpuoz.64", + OPCODE_INFO1 (0xf4000960, + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fcmpzuod", + OPCODE_INFO1 (0xf4000960, + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fcmphs.64", + OPCODE_INFO2 (0xf4000980, + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fcmphsd", + OPCODE_INFO2 (0xf4000980, + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fcmplt.64", + OPCODE_INFO2 (0xf40009a0, + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fcmpltd", + OPCODE_INFO2 (0xf40009a0, + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fcmpne.64", + OPCODE_INFO2 (0xf40009c0, + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fcmpned", + OPCODE_INFO2 (0xf40009c0, + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fcmpuo.64", + OPCODE_INFO2 (0xf40009e0, + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fcmpuod", + OPCODE_INFO2 (0xf40009e0, + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fmaxnm.64", + OPCODE_INFO3 (0xf4000d00, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fminnm.64", + OPCODE_INFO3 (0xf4000d20, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fcmphz.64", + OPCODE_INFO1 (0xf4000d40, + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fcmplsz.64", + OPCODE_INFO1 (0xf4000d60, + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fmul.64", + OPCODE_INFO3 (0xf4000a00, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fmuld", + OPCODE_INFO3 (0xf4000a00, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fnmul.64", + OPCODE_INFO3 (0xf4000a20, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fnmuld", + OPCODE_INFO3 (0xf4000a20, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fmula.64", + OPCODE_INFO3 (0xf4000a80, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fmacd", + OPCODE_INFO3 (0xf4000a80, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fnmuls.64", + OPCODE_INFO3 (0xf4000aa0, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fmscd", + OPCODE_INFO3 (0xf4000aa0, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fmuls.64", + OPCODE_INFO3 (0xf4000ac0, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fnmacd", + OPCODE_INFO3 (0xf4000ac0, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fnmula.64", + OPCODE_INFO3 (0xf4000ae0, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fnmscd", + OPCODE_INFO3 (0xf4000ae0, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("ffmula.64", + OPCODE_INFO3 (0xf4000e00, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("ffmuls.64", + OPCODE_INFO3 (0xf4000e20, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("ffnmula.64", + OPCODE_INFO3 (0xf4000e40, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("ffnmuls.64", + OPCODE_INFO3 (0xf4000e60, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fdiv.64", + OPCODE_INFO3 (0xf4000b00, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fdivd", + OPCODE_INFO3 (0xf4000b00, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("frecip.64", + OPCODE_INFO2 (0xf4000b20, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("frecipd", + OPCODE_INFO2 (0xf4000b20, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fsqrt.64", + OPCODE_INFO2 (0xf4000b40, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fsqrtd", + OPCODE_INFO2 (0xf4000b40, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fins.32", + OPCODE_INFO2 (0xf4000360, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fsel.64", + OPCODE_INFO3 (0xf4000f20, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + /* SIMD floating. */ + OP32 ("fadd.f32", + OPCODE_INFO3 (0xf4001000, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("faddm", + OPCODE_INFO3 (0xf4001000, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fsub.f32", + OPCODE_INFO3 (0xf4001020, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fsubm", + OPCODE_INFO3 (0xf4001020, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fmov.f32", + OPCODE_INFO2 (0xf4001080, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fmovm", + OPCODE_INFO2 (0xf4001080, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fabs.f32", + OPCODE_INFO2 (0xf40010c0, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fabsm", + OPCODE_INFO2 (0xf40010c0, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fneg.f32", + OPCODE_INFO2 (0xf40010e0, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fnegm", + OPCODE_INFO2 (0xf40010e0, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fmul.f32", + OPCODE_INFO3 (0xf4001200, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fmulm", + OPCODE_INFO3 (0xf4001200, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fmula.f32", + OPCODE_INFO3 (0xf4001280, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fmuls.f32", + OPCODE_INFO3 (0xf40012c0, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fnmacm", + OPCODE_INFO3 (0xf40012c0, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG), + OPRND_SHIFT0 (21_25, FREG)), + CSKY_ISA_FLOAT_7E60), + /* floating formate. */ + OP32 ("fftoi.f32.s32.rn", + OPCODE_INFO2 (0xf4001800, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fstosi.rn", + OPCODE_INFO2 (0xf4001800, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fftoi.f32.s32.rz", + OPCODE_INFO2 (0xf4001820, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fstosi.rz", + OPCODE_INFO2 (0xf4001820, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fftoi.f32.s32.rpi", + OPCODE_INFO2 (0xf4001840, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fstosi.rpi", + OPCODE_INFO2 (0xf4001840, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fftoi.f32.s32.rni", + OPCODE_INFO2 (0xf4001860, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fstosi.rni", + OPCODE_INFO2 (0xf4001860, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fftoi.f32.u32.rn", + OPCODE_INFO2 (0xf4001880, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fstoui.rn", + OPCODE_INFO2 (0xf4001880, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fftoi.f32.u32.rz", + OPCODE_INFO2 (0xf40018a0, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fstoui.rz", + OPCODE_INFO2 (0xf40018a0, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fftoi.f32.u32.rpi", + OPCODE_INFO2 (0xf40018c0, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fstoui.rpi", + OPCODE_INFO2 (0xf40018c0, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fftoi.f32.u32.rni", + OPCODE_INFO2 (0xf40018e0, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fstoui.rni", + OPCODE_INFO2 (0xf40018e0, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fftoi.f64.s32.rn", + OPCODE_INFO2 (0xf4001900, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fdtosi.rn", + OPCODE_INFO2 (0xf4001900, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fftoi.f64.s32.rz", + OPCODE_INFO2 (0xf4001920, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fdtosi.rz", + OPCODE_INFO2 (0xf4001920, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fftoi.f64.s32.rpi", + OPCODE_INFO2 (0xf4001940, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fdtosi.rpi", + OPCODE_INFO2 (0xf4001940, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fftoi.f64.s32.rni", + OPCODE_INFO2 (0xf4001960, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fdtosi.rni", + OPCODE_INFO2 (0xf4001960, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fftoi.f64.u32.rn", + OPCODE_INFO2 (0xf4001980, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fdtoui.rn", + OPCODE_INFO2 (0xf4001980, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fftoi.f64.u32.rz", + OPCODE_INFO2 (0xf40019a0, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fdtoui.rz", + OPCODE_INFO2 (0xf40019a0, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fftoi.f64.u32.rpi", + OPCODE_INFO2 (0xf40019c0, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fdtoui.rpi", + OPCODE_INFO2 (0xf40019c0, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fftoi.f64.u32.rni", + OPCODE_INFO2 (0xf40019e0, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fdtoui.rni", + OPCODE_INFO2 (0xf40019e0, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fftoi.f16.s32.rn", + OPCODE_INFO2 (0xf4001c00, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fhtosi.rn", + OPCODE_INFO2 (0xf4001c00, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fftoi.f16.s32.rz", + OPCODE_INFO2 (0xf4001c20, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fhtosi.rz", + OPCODE_INFO2 (0xf4001c20, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fftoi.f16.s32.rpi", + OPCODE_INFO2 (0xf4001c40, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fhtosi.rpi", + OPCODE_INFO2 (0xf4001c40, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fftoi.f16.s32.rni", + OPCODE_INFO2 (0xf4001c60, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fhtosi.rni", + OPCODE_INFO2 (0xf4001c60, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fftoi.f16.u32.rn", + OPCODE_INFO2 (0xf4001c80, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fhtoui.rn", + OPCODE_INFO2 (0xf4001c80, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fftoi.f16.u32.rz", + OPCODE_INFO2 (0xf4001ca0, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fhtoui.rz", + OPCODE_INFO2 (0xf4001ca0, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fftoi.f16.u32.rpi", + OPCODE_INFO2 (0xf4001cc0, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fhtoui.rpi", + OPCODE_INFO2 (0xf4001cc0, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fftoi.f16.u32.rni", + OPCODE_INFO2 (0xf4001ce0, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fhtoui.rni", + OPCODE_INFO2 (0xf4001ce0, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fhtos", + OPCODE_INFO2 (0xf4001a40, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fhtos.f16", + OPCODE_INFO2 (0xf4001a40, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fstoh", + OPCODE_INFO2 (0xf4001a60, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fstoh.f32", + OPCODE_INFO2 (0xf4001a60, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fdtos", + OPCODE_INFO2 (0xf4001ac0, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fdtos.f64", + OPCODE_INFO2 (0xf4001ac0, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fstod", + OPCODE_INFO2 (0xf4001ae0, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fmfvrh", + OPCODE_INFO2 (0xf4001b00, + OPRND_SHIFT0 (0_4, AREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fmfvr.32.1", + OPCODE_INFO2 (0xf4001b20, + OPRND_SHIFT0 (0_4, AREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fmfvrl", + OPCODE_INFO2 (0xf4001b20, + OPRND_SHIFT0 (0_4, AREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fmtvr.16", + OPCODE_INFO2 (0xf4001fa0, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, AREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fmfvr.16", + OPCODE_INFO2 (0xf4001f20, + OPRND_SHIFT0 (0_4, AREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fmtvrh", + OPCODE_INFO2 (0xf4001b40, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, AREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fmtvr.32.1", + OPCODE_INFO2 (0xf4001b60, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, AREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fmtvrl", + OPCODE_INFO2 (0xf4001b60, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, AREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fmtvr.64", + OPCODE_INFO3 (0xf4001f80, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, AREG), + OPRND_SHIFT0 (21_25, AREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fmfvr.64", + OPCODE_INFO3 (0xf4001f00, + OPRND_SHIFT0 (0_4, AREG), + OPRND_SHIFT0 (21_25, AREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fmtvr.32.2", + OPCODE_INFO3 (0xf4001fc0, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, AREG), + OPRND_SHIFT0 (21_25, AREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fmfvr.32.2", + OPCODE_INFO3 (0xf4001f40, + OPRND_SHIFT0 (0_4, AREG), + OPRND_SHIFT0 (21_25, AREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + /* flsu. */ + OP32 ("fld.16", + SOPCODE_INFO2 (0xf4002300, + (0_3or25, FREG, OPRND_SHIFT_0_BIT), + BRACKET_OPRND ((16_20, + AREG, + OPRND_SHIFT_0_BIT), + (4_7or21_24, + IMM_FLDST, + OPRND_SHIFT_1_BIT))), + CSKY_ISA_FLOAT_7E60), + OP32 ("fldh", + SOPCODE_INFO2 (0xf4002300, + (0_3or25, FREG, OPRND_SHIFT_0_BIT), + BRACKET_OPRND ((16_20, + AREG, + OPRND_SHIFT_0_BIT), + (4_7or21_24, + IMM_FLDST, + OPRND_SHIFT_1_BIT))), + CSKY_ISA_FLOAT_7E60), + OP32_WITH_WORK ("fst.16", + SOPCODE_INFO2 (0xf4002700, + (0_3or25, FREG, OPRND_SHIFT_0_BIT), + BRACKET_OPRND ((16_20, + AREG, + OPRND_SHIFT_0_BIT), + (4_7or21_24, + IMM_FLDST, + OPRND_SHIFT_1_BIT))), + CSKY_ISA_FLOAT_7E60, + float_work_fpuv3_fstore), + OP32_WITH_WORK ("fsth", + SOPCODE_INFO2 (0xf4002700, + (0_3or25, FREG, OPRND_SHIFT_0_BIT), + BRACKET_OPRND ((16_20, + AREG, + OPRND_SHIFT_0_BIT), + (4_7or21_24, + IMM_FLDST, + OPRND_SHIFT_1_BIT))), + CSKY_ISA_FLOAT_7E60, + float_work_fpuv3_fstore), + OP32 ("fldr16", + SOPCODE_INFO2 (0xf4002b00, + (0_4, FREG, OPRND_SHIFT_0_BIT), + BRACKET_OPRND ((16_20, + AREG, + OPRND_SHIFT_0_BIT), + (5_6or21_25, + AREG_WITH_LSHIFT_FPU, + OPRND_SHIFT_0_BIT))), + CSKY_ISA_FLOAT_7E60), + OP32 ("fldrh", + SOPCODE_INFO2 (0xf4002b00, + (0_4, FREG, OPRND_SHIFT_0_BIT), + BRACKET_OPRND ((16_20, + AREG, + OPRND_SHIFT_0_BIT), + (5_6or21_25, + AREG_WITH_LSHIFT_FPU, + OPRND_SHIFT_0_BIT))), + CSKY_ISA_FLOAT_7E60), + OP32_WITH_WORK ("fstr.16", + SOPCODE_INFO2 (0xf4002f00, + (0_4, FREG, OPRND_SHIFT_0_BIT), + BRACKET_OPRND ((16_20, + AREG, + OPRND_SHIFT_0_BIT), + (5_6or21_25, + AREG_WITH_LSHIFT_FPU, + OPRND_SHIFT_0_BIT))), + CSKY_ISA_FLOAT_7E60, + float_work_fpuv3_fstore), + OP32_WITH_WORK ("fstrh", + SOPCODE_INFO2 (0xf4002f00, + (0_4, FREG, OPRND_SHIFT_0_BIT), + BRACKET_OPRND ((16_20, + AREG, + OPRND_SHIFT_0_BIT), + (5_6or21_25, + AREG_WITH_LSHIFT_FPU, + OPRND_SHIFT_0_BIT))), + CSKY_ISA_FLOAT_7E60, + float_work_fpuv3_fstore), + OP32 ("fldm.16", + OPCODE_INFO2 (0xf4003300, + (0_4or21_24, FREGLIST_DASH, OPRND_SHIFT_0_BIT), + (16_20, AREG_WITH_BRACKET,OPRND_SHIFT_0_BIT)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fldmh", + OPCODE_INFO2 (0xf4003300, + (0_4or21_24, FREGLIST_DASH, OPRND_SHIFT_0_BIT), + (16_20, AREG_WITH_BRACKET,OPRND_SHIFT_0_BIT)), + CSKY_ISA_FLOAT_7E60), + OP32_WITH_WORK ("fstm.16", + OPCODE_INFO2 (0xf4003700, + (0_4or21_24, + FREGLIST_DASH, + OPRND_SHIFT_0_BIT), + (16_20, + AREG_WITH_BRACKET, + OPRND_SHIFT_0_BIT)), + CSKY_ISA_FLOAT_7E60, + float_work_fpuv3_fstore), + OP32_WITH_WORK ("fstmh", + OPCODE_INFO2 (0xf4003700, + (0_4or21_24, + FREGLIST_DASH, + OPRND_SHIFT_0_BIT), + (16_20, + AREG_WITH_BRACKET, + OPRND_SHIFT_0_BIT)), + CSKY_ISA_FLOAT_7E60, + float_work_fpuv3_fstore), + OP32 ("fldmu.16", + OPCODE_INFO2 (0xf4003380, + OPRND_SHIFT0 (0_4or21_24, FREGLIST_DASH), + OPRND_SHIFT0 (16_20, AREG_WITH_BRACKET)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fldmu.h", + OPCODE_INFO2 (0xf4003380, + OPRND_SHIFT0 (0_4or21_24, FREGLIST_DASH), + OPRND_SHIFT0 (16_20, AREG_WITH_BRACKET)), + CSKY_ISA_FLOAT_7E60), + OP32_WITH_WORK ("fstmu.16", + OPCODE_INFO2 (0xf4003780, + OPRND_SHIFT0 (0_4or21_24, FREGLIST_DASH), + OPRND_SHIFT0 (16_20, AREG_WITH_BRACKET)), + CSKY_ISA_FLOAT_7E60, + float_work_fpuv3_fstore), + OP32_WITH_WORK ("fstmu.h", + OPCODE_INFO2 (0xf4003780, + OPRND_SHIFT0 (0_4or21_24, FREGLIST_DASH), + OPRND_SHIFT0 (16_20, AREG_WITH_BRACKET)), + CSKY_ISA_FLOAT_7E60, + float_work_fpuv3_fstore), + OP32 ("fld.32", + SOPCODE_INFO2 (0xf4002000, + (0_3or25, FREG, OPRND_SHIFT_0_BIT), + BRACKET_OPRND ((16_20, + AREG, + OPRND_SHIFT_0_BIT), + (4_7or21_24, + IMM_FLDST, + OPRND_SHIFT_2_BIT))), + CSKY_ISA_FLOAT_7E60), + OP32 ("flds", + SOPCODE_INFO2 (0xf4002000, + (0_3or25, FREG, OPRND_SHIFT_0_BIT), + BRACKET_OPRND ((16_20, + AREG, + OPRND_SHIFT_0_BIT), + (4_7or21_24, + IMM_FLDST, + OPRND_SHIFT_2_BIT))), + CSKY_ISA_FLOAT_7E60), + OP32_WITH_WORK ("fst.32", + SOPCODE_INFO2 (0xf4002400, + (0_3or25, FREG, OPRND_SHIFT_0_BIT), + BRACKET_OPRND ((16_20, + AREG, + OPRND_SHIFT_0_BIT), + (4_7or21_24, + IMM_FLDST, + OPRND_SHIFT_2_BIT))), + CSKY_ISA_FLOAT_7E60, + float_work_fpuv3_fstore), + OP32_WITH_WORK ("fsts", + SOPCODE_INFO2 (0xf4002400, + (0_3or25, FREG, OPRND_SHIFT_0_BIT), + BRACKET_OPRND ((16_20, + AREG, + OPRND_SHIFT_0_BIT), + (4_7or21_24, + IMM_FLDST, + OPRND_SHIFT_2_BIT))), + CSKY_ISA_FLOAT_7E60, + float_work_fpuv3_fstore), + OP32 ("fldr.32", + SOPCODE_INFO2 (0xf4002800, + (0_4, FREG, OPRND_SHIFT_0_BIT), + BRACKET_OPRND ((16_20, + AREG, + OPRND_SHIFT_0_BIT), + (5_6or21_25, + AREG_WITH_LSHIFT_FPU, + OPRND_SHIFT_0_BIT))), + CSKY_ISA_FLOAT_7E60), + OP32 ("fldrs", + SOPCODE_INFO2 (0xf4002800, + (0_4, FREG, OPRND_SHIFT_0_BIT), + BRACKET_OPRND ((16_20, + AREG, + OPRND_SHIFT_0_BIT), + (5_6or21_25, + AREG_WITH_LSHIFT_FPU, + OPRND_SHIFT_0_BIT))), + CSKY_ISA_FLOAT_7E60), + OP32_WITH_WORK ("fstr.32", + SOPCODE_INFO2 (0xf4002c00, + (0_4, FREG, OPRND_SHIFT_0_BIT), + BRACKET_OPRND ((16_20, + AREG, + OPRND_SHIFT_0_BIT), + (5_6or21_25, + AREG_WITH_LSHIFT_FPU, + OPRND_SHIFT_0_BIT))), + CSKY_ISA_FLOAT_7E60, + float_work_fpuv3_fstore), + OP32_WITH_WORK ("fstrs", + SOPCODE_INFO2 (0xf4002c00, + (0_4, FREG, OPRND_SHIFT_0_BIT), + BRACKET_OPRND ((16_20, + AREG, + OPRND_SHIFT_0_BIT), + (5_6or21_25, + AREG_WITH_LSHIFT_FPU, + OPRND_SHIFT_0_BIT))), + CSKY_ISA_FLOAT_7E60, + float_work_fpuv3_fstore), + OP32 ("fldm.32", + OPCODE_INFO2 (0xf4003000, + OPRND_SHIFT0 (0_4or21_25, FREGLIST_DASH), + OPRND_SHIFT0 (16_20, AREG_WITH_BRACKET)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fldms", + OPCODE_INFO2 (0xf4003000, + OPRND_SHIFT0 (0_4or21_25, FREGLIST_DASH), + OPRND_SHIFT0 (16_20, AREG_WITH_BRACKET)), + CSKY_ISA_FLOAT_7E60), + OP32_WITH_WORK ("fstm.32", + OPCODE_INFO2 (0xf4003400, + OPRND_SHIFT0 (0_4or21_25, FREGLIST_DASH), + OPRND_SHIFT0 (16_20, AREG_WITH_BRACKET)), + CSKY_ISA_FLOAT_7E60, + float_work_fpuv3_fstore), + OP32_WITH_WORK ("fstms", + OPCODE_INFO2 (0xf4003400, + OPRND_SHIFT0 (0_4or21_25, FREGLIST_DASH), + OPRND_SHIFT0 (16_20, AREG_WITH_BRACKET)), + CSKY_ISA_FLOAT_7E60, + float_work_fpuv3_fstore), + OP32 ("fldmu.32", + OPCODE_INFO2 (0xf4003080, + OPRND_SHIFT0 (0_4or21_25, FREGLIST_DASH), + OPRND_SHIFT0 (16_20, AREG_WITH_BRACKET)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fldmu.s", + OPCODE_INFO2 (0xf4003080, + OPRND_SHIFT0 (0_4or21_25, FREGLIST_DASH), + OPRND_SHIFT0 (16_20, AREG_WITH_BRACKET)), + CSKY_ISA_FLOAT_7E60), + OP32_WITH_WORK ("fstmu.32", + OPCODE_INFO2 (0xf4003480, + OPRND_SHIFT0 (0_4or21_25, FREGLIST_DASH), + OPRND_SHIFT0 (16_20, AREG_WITH_BRACKET)), + CSKY_ISA_FLOAT_7E60, + float_work_fpuv3_fstore), + OP32_WITH_WORK ("fstmu.s", + OPCODE_INFO2 (0xf4003480, + OPRND_SHIFT0 (0_4or21_25, FREGLIST_DASH), + OPRND_SHIFT0 (16_20, AREG_WITH_BRACKET)), + CSKY_ISA_FLOAT_7E60, + float_work_fpuv3_fstore), + OP32 ("fld.64", + SOPCODE_INFO2 (0xf4002100, + (0_3or25, FREG, OPRND_SHIFT_0_BIT), + BRACKET_OPRND ((16_20, + AREG, + OPRND_SHIFT_0_BIT), + (4_7or21_24, + IMM_FLDST, + OPRND_SHIFT_2_BIT))), + CSKY_ISA_FLOAT_7E60), + OP32 ("fldd", + SOPCODE_INFO2 (0xf4002100, + (0_3or25, FREG, OPRND_SHIFT_0_BIT), + BRACKET_OPRND ((16_20, + AREG, + OPRND_SHIFT_0_BIT), + (4_7or21_24, + IMM_FLDST, + OPRND_SHIFT_2_BIT))), + CSKY_ISA_FLOAT_7E60), + OP32_WITH_WORK ("fst.64", + SOPCODE_INFO2 (0xf4002500, + (0_3or25, FREG, OPRND_SHIFT_0_BIT), + BRACKET_OPRND ((16_20, + AREG, + OPRND_SHIFT_0_BIT), + (4_7or21_24, + IMM_FLDST, + OPRND_SHIFT_2_BIT))), + CSKY_ISA_FLOAT_7E60, + float_work_fpuv3_fstore), + OP32_WITH_WORK ("fstd", + SOPCODE_INFO2 (0xf4002500, + (0_3or25, FREG, OPRND_SHIFT_0_BIT), + BRACKET_OPRND ((16_20, + AREG, + OPRND_SHIFT_0_BIT), + (4_7or21_24, + IMM_FLDST, + OPRND_SHIFT_2_BIT))), + CSKY_ISA_FLOAT_7E60, + float_work_fpuv3_fstore), + OP32 ("fldr.64", + SOPCODE_INFO2 (0xf4002900, + (0_4, FREG, OPRND_SHIFT_0_BIT), + BRACKET_OPRND ((16_20, + AREG, + OPRND_SHIFT_0_BIT), + (5_6or21_25, + AREG_WITH_LSHIFT_FPU, + OPRND_SHIFT_0_BIT))), + CSKY_ISA_FLOAT_7E60), + OP32 ("fldrd", + SOPCODE_INFO2 (0xf4002900, + (0_4, FREG, OPRND_SHIFT_0_BIT), + BRACKET_OPRND ((16_20, + AREG, + OPRND_SHIFT_0_BIT), + (5_6or21_25, + AREG_WITH_LSHIFT_FPU, + OPRND_SHIFT_0_BIT))), + CSKY_ISA_FLOAT_7E60), + OP32_WITH_WORK ("fstr.64", + SOPCODE_INFO2 (0xf4002d00, + (0_4, FREG, OPRND_SHIFT_0_BIT), + BRACKET_OPRND ((16_20, + AREG, + OPRND_SHIFT_0_BIT), + (5_6or21_25, + AREG_WITH_LSHIFT_FPU, + OPRND_SHIFT_0_BIT))), + CSKY_ISA_FLOAT_7E60, + float_work_fpuv3_fstore), + OP32_WITH_WORK ("fstrd", + SOPCODE_INFO2 (0xf4002d00, + (0_4, FREG, OPRND_SHIFT_0_BIT), + BRACKET_OPRND ((16_20, + AREG, + OPRND_SHIFT_0_BIT), + (5_6or21_25, + AREG_WITH_LSHIFT_FPU, + OPRND_SHIFT_0_BIT))), + CSKY_ISA_FLOAT_7E60, + float_work_fpuv3_fstore), + OP32 ("fldm.64", + OPCODE_INFO2 (0xf4003100, + OPRND_SHIFT0 (0_4or21_25, FREGLIST_DASH), + OPRND_SHIFT0 (16_20, AREG_WITH_BRACKET)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fldmd", + OPCODE_INFO2 (0xf4003100, + OPRND_SHIFT0 (0_4or21_25, FREGLIST_DASH), + OPRND_SHIFT0 (16_20, AREG_WITH_BRACKET)), + CSKY_ISA_FLOAT_7E60), + OP32_WITH_WORK ("fstm.64", + OPCODE_INFO2 (0xf4003500, + OPRND_SHIFT0 (0_4or21_25, FREGLIST_DASH), + OPRND_SHIFT0 (16_20, AREG_WITH_BRACKET)), + CSKY_ISA_FLOAT_7E60, + float_work_fpuv3_fstore), + OP32_WITH_WORK ("fstmd", + OPCODE_INFO2 (0xf4003500, + OPRND_SHIFT0 (0_4or21_25, FREGLIST_DASH), + OPRND_SHIFT0 (16_20, AREG_WITH_BRACKET)), + CSKY_ISA_FLOAT_7E60, + float_work_fpuv3_fstore), + OP32 ("fldmu.64", + OPCODE_INFO2 (0xf4003180, + OPRND_SHIFT0 (0_4or21_25, FREGLIST_DASH), + OPRND_SHIFT0 (16_20, AREG_WITH_BRACKET)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fldmu.d", + OPCODE_INFO2 (0xf4003180, + OPRND_SHIFT0 (0_4or21_25, FREGLIST_DASH), + OPRND_SHIFT0 (16_20, AREG_WITH_BRACKET)), + CSKY_ISA_FLOAT_7E60), + OP32_WITH_WORK ("fstmu.64", + OPCODE_INFO2 (0xf4003580, + OPRND_SHIFT0 (0_4or21_25, FREGLIST_DASH), + OPRND_SHIFT0 (16_20, AREG_WITH_BRACKET)), + CSKY_ISA_FLOAT_7E60, + float_work_fpuv3_fstore), + OP32_WITH_WORK ("fstmu.d", + OPCODE_INFO2 (0xf4003580, + OPRND_SHIFT0 (0_4or21_25, FREGLIST_DASH), + OPRND_SHIFT0 (16_20, AREG_WITH_BRACKET)), + CSKY_ISA_FLOAT_7E60, + float_work_fpuv3_fstore), + OP32 ("fldrm", + SOPCODE_INFO2 (0xf4002a00, + (0_4, FREG, OPRND_SHIFT_0_BIT), + BRACKET_OPRND ((16_20, + AREG, + OPRND_SHIFT_0_BIT), + (5_6or21_25, + AREG_WITH_LSHIFT_FPU, + OPRND_SHIFT_0_BIT))), + CSKY_ISA_FLOAT_7E60), + OP32_WITH_WORK ("fstrm", + SOPCODE_INFO2 (0xf4002e00, + (0_4, FREG, OPRND_SHIFT_0_BIT), + BRACKET_OPRND ((16_20, + AREG, + OPRND_SHIFT_0_BIT), + (5_6or21_25, + AREG_WITH_LSHIFT_FPU, + OPRND_SHIFT_0_BIT))), + CSKY_ISA_FLOAT_7E60, + float_work_fpuv3_fstore), + OP32 ("fldmm", + OPCODE_INFO2 (0xf4003200, + (0_4or21_24, FREGLIST_DASH, OPRND_SHIFT_0_BIT), + (16_20, AREG_WITH_BRACKET,OPRND_SHIFT_0_BIT)), + CSKY_ISA_FLOAT_7E60), + OP32_WITH_WORK ("fstmm", + OPCODE_INFO2 (0xf4003600, + (0_4or21_24, FREGLIST_DASH, OPRND_SHIFT_0_BIT), + (16_20, AREG_WITH_BRACKET,OPRND_SHIFT_0_BIT)), + CSKY_ISA_FLOAT_7E60, + float_work_fpuv3_fstore), + OP32 ("fftox.f16.u16", + OPCODE_INFO2 (0xf4004000, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fftox.f16.s16", + OPCODE_INFO2 (0xf4004020, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fftox.f16.u32", + OPCODE_INFO2 (0xf4004100, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fftox.f16.s32", + OPCODE_INFO2 (0xf4004120, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fftox.f32.u32", + OPCODE_INFO2 (0xf4004140, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fftox.f32.s32", + OPCODE_INFO2 (0xf4004160, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fftox.f64.u32", + OPCODE_INFO2 (0xf4004180, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fftox.f64.s32", + OPCODE_INFO2 (0xf40041a0, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fxtof.u16.f16", + OPCODE_INFO2 (0xf4004800, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fxtof.s16.f16", + OPCODE_INFO2 (0xf4004820, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fxtof.u32.f16", + OPCODE_INFO2 (0xf4004900, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fxtof.s32.f16", + OPCODE_INFO2 (0xf4004920, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fxtof.u32.f32", + OPCODE_INFO2 (0xf4004940, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fxtof.s32.f32", + OPCODE_INFO2 (0xf4004960, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fxtof.u32.f64", + OPCODE_INFO2 (0xf4004980, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fxtof.s32.f64", + OPCODE_INFO2 (0xf40049a0, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fftoi.f16.s16", + OPCODE_INFO2 (0xf4004220, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fftoi.f16.u16", + OPCODE_INFO2 (0xf4004200, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fftoi.f16.s32", + OPCODE_INFO2 (0xf4004320, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fftoi.f16.u32", + OPCODE_INFO2 (0xf4004300, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fftoi.f32.s32", + OPCODE_INFO2 (0xf4004360, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fftoi.f32.u32", + OPCODE_INFO2 (0xf4004340, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fftoi.f64.s32", + OPCODE_INFO2 (0xf40043a0, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fftoi.f64.u32", + OPCODE_INFO2 (0xf4004380, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fitof.s16.f16", + OPCODE_INFO2 (0xf4004a20, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fitof.u16.f16", + OPCODE_INFO2 (0xf4004a00, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fitof.s32.f16", + OPCODE_INFO2 (0xf4004b20, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fitof.u32.f16", + OPCODE_INFO2 (0xf4004b00, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fitof.s32.f32", + OPCODE_INFO2 (0xf4004b60, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fsitos", + OPCODE_INFO2 (0xf4004b60, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fitof.u32.f32", + OPCODE_INFO2 (0xf4004b40, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fuitos", + OPCODE_INFO2 (0xf4004b40, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fitof.s32.f64", + OPCODE_INFO2 (0xf4004ba0, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fsitod", + OPCODE_INFO2 (0xf4004ba0, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fitof.u32.f64", + OPCODE_INFO2 (0xf4004b80, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fuitod", + OPCODE_INFO2 (0xf4004b80, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fftofi.f16.rn", + OPCODE_INFO2 (0xf4004400, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fftofi.f16.rz", + OPCODE_INFO2 (0xf4004420, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fftofi.f16.rpi", + OPCODE_INFO2 (0xf4004440, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fftofi.f16.rni", + OPCODE_INFO2 (0xf4004460, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fftofi.f32.rn", + OPCODE_INFO2 (0xf4004480, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fftofi.f32.rz", + OPCODE_INFO2 (0xf40044a0, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fftofi.f32.rpi", + OPCODE_INFO2 (0xf40044c0, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fftofi.f32.rni", + OPCODE_INFO2 (0xf40044e0, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fftofi.f64.rn", + OPCODE_INFO2 (0xf4004500, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fftofi.f64.rz", + OPCODE_INFO2 (0xf4004520, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fftofi.f64.rpi", + OPCODE_INFO2 (0xf4004540, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + OP32 ("fftofi.f64.rni", + OPCODE_INFO2 (0xf4004560, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (16_20, FREG)), + CSKY_ISA_FLOAT_7E60), + DOP32_WITH_WORK ("fmovi.16", + OPCODE_INFO2 (0xf400e400, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (5or8_9or16_25, HFLOAT_FMOVI)), + OPCODE_INFO3 (0xf400e400, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (5or8_9or20_25, IMM9b), + OPRND_SHIFT0 (16_19, IMM4b)), + CSKY_ISA_FLOAT_7E60, + float_work_fpuv3_fmovi), + DOP32_WITH_WORK ("fmovi.32", + OPCODE_INFO2 (0xf400e440, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (5or8_9or16_25, SFLOAT_FMOVI)), + OPCODE_INFO3 (0xf400e440, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (5or8_9or20_25, IMM9b), + OPRND_SHIFT0 (16_19, IMM4b)), + CSKY_ISA_FLOAT_7E60, + float_work_fpuv3_fmovi), + DOP32_WITH_WORK ("fmovi.64", + OPCODE_INFO2 (0xf400e480, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (5or8_9or16_25, DFLOAT_FMOVI)), + OPCODE_INFO3 (0xf400e480, + OPRND_SHIFT0 (0_4, FREG), + OPRND_SHIFT0 (5or8_9or20_25, IMM9b), + OPRND_SHIFT0 (16_19, IMM4b)), + CSKY_ISA_FLOAT_7E60, + float_work_fpuv3_fmovi), +#undef _RELOC32 +#define _RELOC32 BFD_RELOC_CKCORE_PCREL_FLRW_IMM8BY4 + OP32 ("flrw.32", + OPCODE_INFO2 (0xf4003800, + (0_3or25, FREG, OPRND_SHIFT_0_BIT), + (4_7or21_24, FCONSTANT, OPRND_SHIFT_2_BIT)), + CSKY_ISA_FLOAT_7E60), + OP32 ("flrws", + OPCODE_INFO2 (0xf4003800, + (0_3or25, FREG, OPRND_SHIFT_0_BIT), + (4_7or21_24, FCONSTANT, OPRND_SHIFT_2_BIT)), + CSKY_ISA_FLOAT_7E60), + OP32 ("flrw.64", + OPCODE_INFO2 (0xf4003900, + (0_3or25, FREG, OPRND_SHIFT_0_BIT), + (4_7or21_24, FCONSTANT, OPRND_SHIFT_2_BIT)), + CSKY_ISA_FLOAT_7E60), + OP32 ("flrwd", + OPCODE_INFO2 (0xf4003900, + (0_3or25, FREG, OPRND_SHIFT_0_BIT), + (4_7or21_24, FCONSTANT, OPRND_SHIFT_2_BIT)), + CSKY_ISA_FLOAT_7E60), +#undef _RELOC32 +#define _RELOC32 0 + /* The following are aliases for other instructions. */ /* setc -> cmphs r0, r0 */ OP16 ("setc", @@ -8123,5 +10286,6 @@ OPCODE_INFO1 (0xc4007c40, (0_4or16_20, DUP_AREG, OPRND_SHIFT_0_BIT)), CSKYV2_ISA_1E2), + {NULL, 0, {}, {}, 0, 0, 0, 0, 0, NULL} }; diff -Nru gdb-9.1/opcodes/d10v-dis.c gdb-10.2/opcodes/d10v-dis.c --- gdb-9.1/opcodes/d10v-dis.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/d10v-dis.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Disassemble D10V instructions. - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of the GNU opcodes library. diff -Nru gdb-9.1/opcodes/d10v-opc.c gdb-10.2/opcodes/d10v-opc.c --- gdb-9.1/opcodes/d10v-opc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/d10v-opc.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* d10v-opc.c -- D10V opcode list - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. Written by Martin Hunt, Cygnus Support This file is part of the GNU opcodes library. diff -Nru gdb-9.1/opcodes/d30v-dis.c gdb-10.2/opcodes/d30v-dis.c --- gdb-9.1/opcodes/d30v-dis.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/d30v-dis.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Disassemble D30V instructions. - Copyright (C) 1997-2019 Free Software Foundation, Inc. + Copyright (C) 1997-2020 Free Software Foundation, Inc. This file is part of the GNU opcodes library. @@ -90,11 +90,11 @@ } static int -extract_value (long long num, struct d30v_operand *oper, int is_long) +extract_value (uint64_t num, const struct d30v_operand *oper, int is_long) { - int val; + unsigned int val; int shift = 12 - oper->position; - int mask = (0xFFFFFFFF >> (32 - oper->bits)); + unsigned int mask = (0xFFFFFFFF >> (32 - oper->bits)); if (is_long) { @@ -118,14 +118,14 @@ static void print_insn (struct disassemble_info *info, bfd_vma memaddr, - long long num, + uint64_t num, struct d30v_insn *insn, int is_long, int show_ext) { - int val, opnum, need_comma = 0; - struct d30v_operand *oper; - int i, match, need_paren = 0, found_control = 0; + unsigned int val, opnum; + const struct d30v_operand *oper; + int i, match, need_comma = 0, need_paren = 0, found_control = 0; unsigned int opind = 0; (*info->fprintf_func) (info->stream, "%s", insn->op->name); @@ -136,7 +136,7 @@ opind++; val = extract_value (num, - (struct d30v_operand *) &d30v_operand_table[insn->form->operands[0]], + &d30v_operand_table[insn->form->operands[0]], is_long); (*info->fprintf_func) (info->stream, "%s", d30v_cc_names[val]); } @@ -160,7 +160,7 @@ { int bits; - oper = (struct d30v_operand *) &d30v_operand_table[opnum]; + oper = &d30v_operand_table[opnum]; bits = oper->bits; if (oper->flags & OPERAND_SHIFT) bits += 3; @@ -210,8 +210,8 @@ match = 0; if (oper->flags & OPERAND_CONTROL) { - struct d30v_operand *oper3 = - (struct d30v_operand *) &d30v_operand_table[insn->form->operands[2]]; + const struct d30v_operand *oper3 + = &d30v_operand_table[insn->form->operands[2]]; int id = extract_value (num, oper3, is_long); found_control = 1; @@ -271,14 +271,10 @@ /* IMM6S3 is unsigned. */ if (oper->flags & OPERAND_SIGNED || bits == 32) { - long max; - max = (1 << (bits - 1)); - if (val & max) + unsigned int sign = 1u << (bits - 1); + if (val & sign) { - if (bits == 32) - val = -val; - else - val = -val & ((1 << bits) - 1); + val = -val & (sign + sign - 1); neg = 1; } } @@ -303,13 +299,11 @@ { if (oper->flags & OPERAND_SIGNED) { - int max = (1 << (bits - 1)); + unsigned int sign = 1u << (bits - 1); - if (val & max) + if (val & sign) { - val = -val; - if (bits < 32) - val &= ((1 << bits) - 1); + val = -val & (sign + sign - 1); (*info->fprintf_func) (info->stream, "-"); } } @@ -330,9 +324,9 @@ { int status, result; bfd_byte buffer[12]; - unsigned long in1, in2; + uint32_t in1, in2; struct d30v_insn insn; - long long num; + uint64_t num; insn.form = NULL; @@ -353,9 +347,9 @@ { info->bytes_per_line = 8; if (!(result = lookup_opcode (&insn, in1, 0))) - (*info->fprintf_func) (info->stream, ".long\t0x%lx", in1); + (*info->fprintf_func) (info->stream, ".long\t0x%x", in1); else - print_insn (info, memaddr, (long long) in1, &insn, 0, result); + print_insn (info, memaddr, (uint64_t) in1, &insn, 0, result); return 4; } in2 = bfd_getb32 (buffer); @@ -365,17 +359,17 @@ /* LONG instruction. */ if (!(result = lookup_opcode (&insn, in1, 1))) { - (*info->fprintf_func) (info->stream, ".long\t0x%lx,0x%lx", in1, in2); + (*info->fprintf_func) (info->stream, ".long\t0x%x,0x%x", in1, in2); return 8; } - num = (long long) in1 << 32 | in2; + num = (uint64_t) in1 << 32 | in2; print_insn (info, memaddr, num, &insn, 1, result); } else { num = in1; if (!(result = lookup_opcode (&insn, in1, 0))) - (*info->fprintf_func) (info->stream, ".long\t0x%lx", in1); + (*info->fprintf_func) (info->stream, ".long\t0x%x", in1); else print_insn (info, memaddr, num, &insn, 0, result); @@ -396,7 +390,7 @@ insn.form = NULL; num = in2; if (!(result = lookup_opcode (&insn, in2, 0))) - (*info->fprintf_func) (info->stream, ".long\t0x%lx", in2); + (*info->fprintf_func) (info->stream, ".long\t0x%x", in2); else print_insn (info, memaddr, num, &insn, 0, result); } diff -Nru gdb-9.1/opcodes/d30v-opc.c gdb-10.2/opcodes/d30v-opc.c --- gdb-9.1/opcodes/d30v-opc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/d30v-opc.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* d30v-opc.c -- D30V opcode list - Copyright (C) 1997-2019 Free Software Foundation, Inc. + Copyright (C) 1997-2020 Free Software Foundation, Inc. Written by Martin Hunt, Cygnus Support This file is part of the GNU opcodes library. diff -Nru gdb-9.1/opcodes/disassemble.c gdb-10.2/opcodes/disassemble.c --- gdb-9.1/opcodes/disassemble.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/disassemble.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Select disassembly routine for specified architecture. - Copyright (C) 1994-2019 Free Software Foundation, Inc. + Copyright (C) 1994-2020 Free Software Foundation, Inc. This file is part of the GNU opcodes library. @@ -21,7 +21,7 @@ #include "sysdep.h" #include "disassemble.h" #include "safe-ctype.h" -#include <assert.h> +#include "opintl.h" #ifdef ARCH_all #define ARCH_aarch64 @@ -88,7 +88,6 @@ #define ARCH_tic4x #define ARCH_tic54x #define ARCH_tic6x -#define ARCH_tic80 #define ARCH_tilegx #define ARCH_tilepro #define ARCH_v850 @@ -116,7 +115,7 @@ # ifdef ARCH_m32c enum epbf_isa_attr { - ISA_EBPFLE, ISA_EBPFBE, ISA_EBPFMAX + ISA_EBPFLE, ISA_EBPFBE, ISA_XBPFLE, ISA_XBPFBE, ISA_EBPFMAX }; # else # include "bpf-desc.h" @@ -464,11 +463,6 @@ disassemble = print_insn_tic6x; break; #endif -#ifdef ARCH_tic80 - case bfd_arch_tic80: - disassemble = print_insn_tic80; - break; -#endif #ifdef ARCH_ft32 case bfd_arch_ft32: disassemble = print_insn_ft32; @@ -666,13 +660,22 @@ #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_EBPFMAX); + info->private_data = cgen_bitset_create (ISA_MAX); if (info->endian == BFD_ENDIAN_BIG) - cgen_bitset_set (info->private_data, ISA_EBPFBE); + { + 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); + { + cgen_bitset_set (info->private_data, ISA_EBPFLE); + if (info->mach == bfd_mach_xbpf) + cgen_bitset_set (info->private_data, ISA_XBPFLE); + } } break; #endif @@ -838,3 +841,11 @@ return c1 - c2; } + +void +opcodes_assert (const char *file, int line) +{ + opcodes_error_handler (_("assertion fail %s:%d"), file, line); + opcodes_error_handler (_("Please report this bug")); + abort (); +} diff -Nru gdb-9.1/opcodes/disassemble.h gdb-10.2/opcodes/disassemble.h --- gdb-9.1/opcodes/disassemble.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/disassemble.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Header only used inside opcodes library for disassemble. - Copyright (C) 2017-2019 Free Software Foundation, Inc. + Copyright (C) 2017-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -87,7 +87,6 @@ extern int print_insn_tic4x (bfd_vma, disassemble_info *); extern int print_insn_tic54x (bfd_vma, disassemble_info *); extern int print_insn_tic6x (bfd_vma, disassemble_info *); -extern int print_insn_tic80 (bfd_vma, disassemble_info *); extern int print_insn_tilegx (bfd_vma, disassemble_info *); extern int print_insn_tilepro (bfd_vma, disassemble_info *); extern int print_insn_v850 (bfd_vma, disassemble_info *); @@ -104,4 +103,10 @@ extern disassembler_ftype csky_get_disassembler (bfd *); extern disassembler_ftype rl78_get_disassembler (bfd *); + +extern void ATTRIBUTE_NORETURN opcodes_assert (const char *, int); + +#define OPCODES_ASSERT(x) \ + do { if (!(x)) opcodes_assert (__FILE__, __LINE__); } while (0) + #endif /* DISASSEMBLE_H */ diff -Nru gdb-9.1/opcodes/dis-buf.c gdb-10.2/opcodes/dis-buf.c --- gdb-9.1/opcodes/dis-buf.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/dis-buf.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Disassemble from a buffer, for GNU. - Copyright (C) 1993-2019 Free Software Foundation, Inc. + Copyright (C) 1993-2020 Free Software Foundation, Inc. This file is part of the GNU opcodes library. diff -Nru gdb-9.1/opcodes/dis-init.c gdb-10.2/opcodes/dis-init.c --- gdb-9.1/opcodes/dis-init.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/dis-init.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Initialize "struct disassemble_info". - Copyright (C) 2003-2019 Free Software Foundation, Inc. + Copyright (C) 2003-2020 Free Software Foundation, Inc. This file is part of the GNU opcodes library. diff -Nru gdb-9.1/opcodes/dlx-dis.c gdb-10.2/opcodes/dlx-dis.c --- gdb-9.1/opcodes/dlx-dis.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/dlx-dis.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Instruction printing code for the DLX Microprocessor - Copyright (C) 2002-2019 Free Software Foundation, Inc. + Copyright (C) 2002-2020 Free Software Foundation, Inc. Contributed by Kuang Hwa Lin. Written by Kuang Hwa Lin, 03/2002. This file is part of the GNU opcodes library. diff -Nru gdb-9.1/opcodes/epiphany-asm.c gdb-10.2/opcodes/epiphany-asm.c --- gdb-9.1/opcodes/epiphany-asm.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/epiphany-asm.c 2021-04-25 04:06:26.000000000 +0000 @@ -5,7 +5,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. - the resultant file is machine generated, cgen-asm.in isn't - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of libopcodes. diff -Nru gdb-9.1/opcodes/epiphany-desc.c gdb-10.2/opcodes/epiphany-desc.c --- gdb-9.1/opcodes/epiphany-desc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/epiphany-desc.c 2021-04-25 04:06:26.000000000 +0000 @@ -3,7 +3,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright (C) 1996-2019 Free Software Foundation, Inc. +Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of the GNU Binutils and/or GDB, the GNU debugger. @@ -2139,6 +2139,7 @@ CGEN_CPU_OPEN_MACHS: bitmap of values in enum mach_attr CGEN_CPU_OPEN_BFDMACH: specify 1 mach using bfd name CGEN_CPU_OPEN_ENDIAN: specify endian choice + CGEN_CPU_OPEN_INSN_ENDIAN: specify instruction endian choice CGEN_CPU_OPEN_END: terminates arguments ??? Simultaneous multiple isas might not make sense, but it's not (yet) @@ -2152,6 +2153,7 @@ CGEN_BITSET *isas = 0; /* 0 = "unspecified" */ unsigned int machs = 0; /* 0 = "unspecified" */ enum cgen_endian endian = CGEN_ENDIAN_UNKNOWN; + enum cgen_endian insn_endian = CGEN_ENDIAN_UNKNOWN; va_list ap; if (! init_p) @@ -2186,6 +2188,9 @@ case CGEN_CPU_OPEN_ENDIAN : endian = va_arg (ap, enum cgen_endian); break; + case CGEN_CPU_OPEN_INSN_ENDIAN : + insn_endian = va_arg (ap, enum cgen_endian); + break; default : opcodes_error_handler (/* xgettext:c-format */ @@ -2215,11 +2220,8 @@ cd->isas = cgen_bitset_copy (isas); cd->machs = machs; cd->endian = endian; - /* FIXME: for the sparc case we can determine insn-endianness statically. - The worry here is where both data and insn endian can be independently - chosen, in which case this function will need another argument. - Actually, will want to allow for more arguments in the future anyway. */ - cd->insn_endian = endian; + cd->insn_endian + = (insn_endian == CGEN_ENDIAN_UNKNOWN ? endian : insn_endian); /* Table (re)builder. */ cd->rebuild_tables = epiphany_cgen_rebuild_tables; @@ -2269,18 +2271,10 @@ regfree (CGEN_INSN_RX (insns)); } - if (cd->macro_insn_table.init_entries) - free ((CGEN_INSN *) cd->macro_insn_table.init_entries); - - if (cd->insn_table.init_entries) - free ((CGEN_INSN *) cd->insn_table.init_entries); - - if (cd->hw_table.entries) - free ((CGEN_HW_ENTRY *) cd->hw_table.entries); - - if (cd->operand_table.entries) - free ((CGEN_HW_ENTRY *) cd->operand_table.entries); - + free ((CGEN_INSN *) cd->macro_insn_table.init_entries); + free ((CGEN_INSN *) cd->insn_table.init_entries); + free ((CGEN_HW_ENTRY *) cd->hw_table.entries); + free ((CGEN_HW_ENTRY *) cd->operand_table.entries); free (cd); } diff -Nru gdb-9.1/opcodes/epiphany-desc.h gdb-10.2/opcodes/epiphany-desc.h --- gdb-9.1/opcodes/epiphany-desc.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/epiphany-desc.h 2021-04-25 04:06:26.000000000 +0000 @@ -3,7 +3,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright (C) 1996-2019 Free Software Foundation, Inc. +Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of the GNU Binutils and/or GDB, the GNU debugger. diff -Nru gdb-9.1/opcodes/epiphany-dis.c gdb-10.2/opcodes/epiphany-dis.c --- gdb-9.1/opcodes/epiphany-dis.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/epiphany-dis.c 2021-04-25 04:06:26.000000000 +0000 @@ -5,7 +5,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. - the resultant file is machine generated, cgen-dis.in isn't - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of libopcodes. @@ -451,7 +451,7 @@ /* 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); + 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 @@ -582,6 +582,7 @@ CGEN_BITSET *isa; int mach; int endian; + int insn_endian; CGEN_CPU_DESC cd; } cpu_desc_list; @@ -594,12 +595,16 @@ 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; /* ??? gdb will set mach but leave the architecture as "unknown" */ @@ -665,9 +670,11 @@ prev_isa = cgen_bitset_copy (isa); prev_mach = mach; prev_endian = endian; + prev_insn_endian = insn_endian; cd = epiphany_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 (); diff -Nru gdb-9.1/opcodes/epiphany-ibld.c gdb-10.2/opcodes/epiphany-ibld.c --- gdb-9.1/opcodes/epiphany-ibld.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/epiphany-ibld.c 2021-04-25 04:06:26.000000000 +0000 @@ -4,7 +4,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN: Cpu tools GENerator. - the resultant file is machine generated, cgen-ibld.in isn't - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of libopcodes. @@ -85,20 +85,20 @@ int word_length, unsigned char *bufp) { - unsigned long x,mask; + unsigned long x, mask; int shift; - x = cgen_get_insn_value (cd, bufp, word_length); + x = cgen_get_insn_value (cd, bufp, word_length, cd->endian); /* Written this way to avoid undefined behaviour. */ - mask = (((1L << (length - 1)) - 1) << 1) | 1; + mask = (1UL << (length - 1) << 1) - 1; if (CGEN_INSN_LSB0_P) shift = (start + 1) - length; else shift = (word_length - (start + length)); x = (x & ~(mask << shift)) | ((value & mask) << shift); - cgen_put_insn_value (cd, bufp, word_length, (bfd_vma) x); + cgen_put_insn_value (cd, bufp, word_length, (bfd_vma) x, cd->endian); } #endif /* ! CGEN_INT_INSN_P */ @@ -131,13 +131,15 @@ CGEN_INSN_BYTES_PTR buffer) { static char errbuf[100]; - /* Written this way to avoid undefined behaviour. */ - unsigned long mask = (((1L << (length - 1)) - 1) << 1) | 1; + unsigned long mask; /* If LENGTH is zero, this operand doesn't contribute to the value. */ if (length == 0) return NULL; + /* Written this way to avoid undefined behaviour. */ + mask = (1UL << (length - 1) << 1) - 1; + if (word_length > 8 * sizeof (CGEN_INSN_INT)) abort (); @@ -153,7 +155,7 @@ /* Ensure VALUE will fit. */ if (CGEN_BOOL_ATTR (attrs, CGEN_IFLD_SIGN_OPT)) { - long minval = - (1L << (length - 1)); + long minval = - (1UL << (length - 1)); unsigned long maxval = mask; if ((value > 0 && (unsigned long) value > maxval) @@ -191,8 +193,8 @@ { if (! cgen_signed_overflow_ok_p (cd)) { - long minval = - (1L << (length - 1)); - long maxval = (1L << (length - 1)) - 1; + long minval = - (1UL << (length - 1)); + long maxval = (1UL << (length - 1)) - 1; if (value < minval || value > maxval) { @@ -269,8 +271,8 @@ #else cgen_put_insn_value (cd, buffer, min ((unsigned) cd->base_insn_bitsize, - (unsigned) CGEN_FIELDS_BITSIZE (fields)), - value); + (unsigned) CGEN_FIELDS_BITSIZE (fields)), + value, cd->insn_endian); #endif /* ! CGEN_INT_INSN_P */ @@ -314,7 +316,7 @@ { int shift = insn_length - length; /* Written this way to avoid undefined behaviour. */ - CGEN_INSN_INT mask = (((1L << (length - 1)) - 1) << 1) | 1; + CGEN_INSN_INT mask = length == 0 ? 0 : (1UL << (length - 1) << 1) - 1; *buf = (*buf & ~(mask << shift)) | ((value & mask) << shift); } @@ -387,7 +389,7 @@ unsigned long x; int shift; - x = cgen_get_insn_value (cd, bufp, word_length); + x = cgen_get_insn_value (cd, bufp, word_length, cd->endian); if (CGEN_INSN_LSB0_P) shift = (start + 1) - length; @@ -480,7 +482,10 @@ abort (); if (fill_cache (cd, ex_info, word_offset / 8, word_length / 8, pc) == 0) - return 0; + { + *valuep = 0; + return 0; + } value = extract_1 (cd, ex_info, start, length, word_length, bufp, pc); } @@ -488,12 +493,12 @@ #endif /* ! CGEN_INT_INSN_P */ /* Written this way to avoid undefined behaviour. */ - mask = (((1L << (length - 1)) - 1) << 1) | 1; + mask = (1UL << (length - 1) << 1) - 1; value &= mask; /* sign extend? */ if (CGEN_BOOL_ATTR (attrs, CGEN_IFLD_SIGNED) - && (value & (1L << (length - 1)))) + && (value & (1UL << (length - 1)))) value |= ~mask; *valuep = value; diff -Nru gdb-9.1/opcodes/epiphany-opc.c gdb-10.2/opcodes/epiphany-opc.c --- gdb-9.1/opcodes/epiphany-opc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/epiphany-opc.c 2021-04-25 04:06:26.000000000 +0000 @@ -3,7 +3,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright (C) 1996-2019 Free Software Foundation, Inc. +Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of the GNU Binutils and/or GDB, the GNU debugger. diff -Nru gdb-9.1/opcodes/epiphany-opc.h gdb-10.2/opcodes/epiphany-opc.h --- gdb-9.1/opcodes/epiphany-opc.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/epiphany-opc.h 2021-04-25 04:06:26.000000000 +0000 @@ -3,7 +3,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright (C) 1996-2019 Free Software Foundation, Inc. +Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of the GNU Binutils and/or GDB, the GNU debugger. diff -Nru gdb-9.1/opcodes/fr30-asm.c gdb-10.2/opcodes/fr30-asm.c --- gdb-9.1/opcodes/fr30-asm.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/fr30-asm.c 2021-04-25 04:06:26.000000000 +0000 @@ -5,7 +5,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. - the resultant file is machine generated, cgen-asm.in isn't - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of libopcodes. diff -Nru gdb-9.1/opcodes/fr30-desc.c gdb-10.2/opcodes/fr30-desc.c --- gdb-9.1/opcodes/fr30-desc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/fr30-desc.c 2021-04-25 04:06:26.000000000 +0000 @@ -3,7 +3,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright (C) 1996-2019 Free Software Foundation, Inc. +Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of the GNU Binutils and/or GDB, the GNU debugger. @@ -1616,6 +1616,7 @@ CGEN_CPU_OPEN_MACHS: bitmap of values in enum mach_attr CGEN_CPU_OPEN_BFDMACH: specify 1 mach using bfd name CGEN_CPU_OPEN_ENDIAN: specify endian choice + CGEN_CPU_OPEN_INSN_ENDIAN: specify instruction endian choice CGEN_CPU_OPEN_END: terminates arguments ??? Simultaneous multiple isas might not make sense, but it's not (yet) @@ -1629,6 +1630,7 @@ CGEN_BITSET *isas = 0; /* 0 = "unspecified" */ unsigned int machs = 0; /* 0 = "unspecified" */ enum cgen_endian endian = CGEN_ENDIAN_UNKNOWN; + enum cgen_endian insn_endian = CGEN_ENDIAN_UNKNOWN; va_list ap; if (! init_p) @@ -1663,6 +1665,9 @@ case CGEN_CPU_OPEN_ENDIAN : endian = va_arg (ap, enum cgen_endian); break; + case CGEN_CPU_OPEN_INSN_ENDIAN : + insn_endian = va_arg (ap, enum cgen_endian); + break; default : opcodes_error_handler (/* xgettext:c-format */ @@ -1692,11 +1697,8 @@ cd->isas = cgen_bitset_copy (isas); cd->machs = machs; cd->endian = endian; - /* FIXME: for the sparc case we can determine insn-endianness statically. - The worry here is where both data and insn endian can be independently - chosen, in which case this function will need another argument. - Actually, will want to allow for more arguments in the future anyway. */ - cd->insn_endian = endian; + cd->insn_endian + = (insn_endian == CGEN_ENDIAN_UNKNOWN ? endian : insn_endian); /* Table (re)builder. */ cd->rebuild_tables = fr30_cgen_rebuild_tables; @@ -1746,18 +1748,10 @@ regfree (CGEN_INSN_RX (insns)); } - if (cd->macro_insn_table.init_entries) - free ((CGEN_INSN *) cd->macro_insn_table.init_entries); - - if (cd->insn_table.init_entries) - free ((CGEN_INSN *) cd->insn_table.init_entries); - - if (cd->hw_table.entries) - free ((CGEN_HW_ENTRY *) cd->hw_table.entries); - - if (cd->operand_table.entries) - free ((CGEN_HW_ENTRY *) cd->operand_table.entries); - + free ((CGEN_INSN *) cd->macro_insn_table.init_entries); + free ((CGEN_INSN *) cd->insn_table.init_entries); + free ((CGEN_HW_ENTRY *) cd->hw_table.entries); + free ((CGEN_HW_ENTRY *) cd->operand_table.entries); free (cd); } diff -Nru gdb-9.1/opcodes/fr30-desc.h gdb-10.2/opcodes/fr30-desc.h --- gdb-9.1/opcodes/fr30-desc.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/fr30-desc.h 2021-04-25 04:06:26.000000000 +0000 @@ -3,7 +3,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright (C) 1996-2019 Free Software Foundation, Inc. +Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of the GNU Binutils and/or GDB, the GNU debugger. diff -Nru gdb-9.1/opcodes/fr30-dis.c gdb-10.2/opcodes/fr30-dis.c --- gdb-9.1/opcodes/fr30-dis.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/fr30-dis.c 2021-04-25 04:06:26.000000000 +0000 @@ -5,7 +5,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. - the resultant file is machine generated, cgen-dis.in isn't - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of libopcodes. @@ -472,7 +472,7 @@ /* 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); + 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 @@ -603,6 +603,7 @@ CGEN_BITSET *isa; int mach; int endian; + int insn_endian; CGEN_CPU_DESC cd; } cpu_desc_list; @@ -615,12 +616,16 @@ 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; /* ??? gdb will set mach but leave the architecture as "unknown" */ @@ -686,9 +691,11 @@ prev_isa = cgen_bitset_copy (isa); prev_mach = mach; prev_endian = endian; + prev_insn_endian = insn_endian; cd = fr30_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 (); diff -Nru gdb-9.1/opcodes/fr30-ibld.c gdb-10.2/opcodes/fr30-ibld.c --- gdb-9.1/opcodes/fr30-ibld.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/fr30-ibld.c 2021-04-25 04:06:26.000000000 +0000 @@ -4,7 +4,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN: Cpu tools GENerator. - the resultant file is machine generated, cgen-ibld.in isn't - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of libopcodes. @@ -85,20 +85,20 @@ int word_length, unsigned char *bufp) { - unsigned long x,mask; + unsigned long x, mask; int shift; - x = cgen_get_insn_value (cd, bufp, word_length); + x = cgen_get_insn_value (cd, bufp, word_length, cd->endian); /* Written this way to avoid undefined behaviour. */ - mask = (((1L << (length - 1)) - 1) << 1) | 1; + mask = (1UL << (length - 1) << 1) - 1; if (CGEN_INSN_LSB0_P) shift = (start + 1) - length; else shift = (word_length - (start + length)); x = (x & ~(mask << shift)) | ((value & mask) << shift); - cgen_put_insn_value (cd, bufp, word_length, (bfd_vma) x); + cgen_put_insn_value (cd, bufp, word_length, (bfd_vma) x, cd->endian); } #endif /* ! CGEN_INT_INSN_P */ @@ -131,13 +131,15 @@ CGEN_INSN_BYTES_PTR buffer) { static char errbuf[100]; - /* Written this way to avoid undefined behaviour. */ - unsigned long mask = (((1L << (length - 1)) - 1) << 1) | 1; + unsigned long mask; /* If LENGTH is zero, this operand doesn't contribute to the value. */ if (length == 0) return NULL; + /* Written this way to avoid undefined behaviour. */ + mask = (1UL << (length - 1) << 1) - 1; + if (word_length > 8 * sizeof (CGEN_INSN_INT)) abort (); @@ -153,7 +155,7 @@ /* Ensure VALUE will fit. */ if (CGEN_BOOL_ATTR (attrs, CGEN_IFLD_SIGN_OPT)) { - long minval = - (1L << (length - 1)); + long minval = - (1UL << (length - 1)); unsigned long maxval = mask; if ((value > 0 && (unsigned long) value > maxval) @@ -191,8 +193,8 @@ { if (! cgen_signed_overflow_ok_p (cd)) { - long minval = - (1L << (length - 1)); - long maxval = (1L << (length - 1)) - 1; + long minval = - (1UL << (length - 1)); + long maxval = (1UL << (length - 1)) - 1; if (value < minval || value > maxval) { @@ -269,8 +271,8 @@ #else cgen_put_insn_value (cd, buffer, min ((unsigned) cd->base_insn_bitsize, - (unsigned) CGEN_FIELDS_BITSIZE (fields)), - value); + (unsigned) CGEN_FIELDS_BITSIZE (fields)), + value, cd->insn_endian); #endif /* ! CGEN_INT_INSN_P */ @@ -314,7 +316,7 @@ { int shift = insn_length - length; /* Written this way to avoid undefined behaviour. */ - CGEN_INSN_INT mask = (((1L << (length - 1)) - 1) << 1) | 1; + CGEN_INSN_INT mask = length == 0 ? 0 : (1UL << (length - 1) << 1) - 1; *buf = (*buf & ~(mask << shift)) | ((value & mask) << shift); } @@ -387,7 +389,7 @@ unsigned long x; int shift; - x = cgen_get_insn_value (cd, bufp, word_length); + x = cgen_get_insn_value (cd, bufp, word_length, cd->endian); if (CGEN_INSN_LSB0_P) shift = (start + 1) - length; @@ -480,7 +482,10 @@ abort (); if (fill_cache (cd, ex_info, word_offset / 8, word_length / 8, pc) == 0) - return 0; + { + *valuep = 0; + return 0; + } value = extract_1 (cd, ex_info, start, length, word_length, bufp, pc); } @@ -488,12 +493,12 @@ #endif /* ! CGEN_INT_INSN_P */ /* Written this way to avoid undefined behaviour. */ - mask = (((1L << (length - 1)) - 1) << 1) | 1; + mask = (1UL << (length - 1) << 1) - 1; value &= mask; /* sign extend? */ if (CGEN_BOOL_ATTR (attrs, CGEN_IFLD_SIGNED) - && (value & (1L << (length - 1)))) + && (value & (1UL << (length - 1)))) value |= ~mask; *valuep = value; @@ -831,7 +836,7 @@ { long value; length = extract_normal (cd, ex_info, insn_value, 0|(1<<CGEN_IFLD_SIGNED), 0, 4, 8, 16, total_length, pc, & value); - value = ((value) << (2)); + value = ((value) * (4)); fields->f_disp10 = value; } break; @@ -842,7 +847,7 @@ { long value; length = extract_normal (cd, ex_info, insn_value, 0|(1<<CGEN_IFLD_SIGNED), 0, 4, 8, 16, total_length, pc, & value); - value = ((value) << (1)); + value = ((value) * (2)); fields->f_disp9 = value; } break; @@ -867,7 +872,7 @@ { long value; length = extract_normal (cd, ex_info, insn_value, 0|(1<<CGEN_IFLD_SIGNED)|(1<<CGEN_IFLD_PCREL_ADDR), 0, 5, 11, 16, total_length, pc, & value); - value = ((((value) << (1))) + (((pc) + (2)))); + value = ((((value) * (2))) + (((pc) + (2)))); fields->f_rel12 = value; } break; @@ -875,7 +880,7 @@ { long value; length = extract_normal (cd, ex_info, insn_value, 0|(1<<CGEN_IFLD_SIGNED)|(1<<CGEN_IFLD_PCREL_ADDR), 0, 8, 8, 16, total_length, pc, & value); - value = ((((value) << (1))) + (((pc) + (2)))); + value = ((((value) * (2))) + (((pc) + (2)))); fields->f_rel9 = value; } break; @@ -905,7 +910,7 @@ { long value; length = extract_normal (cd, ex_info, insn_value, 0|(1<<CGEN_IFLD_SIGNED), 0, 8, 8, 16, total_length, pc, & value); - value = ((value) << (2)); + value = ((value) * (4)); fields->f_s10 = value; } break; diff -Nru gdb-9.1/opcodes/fr30-opc.c gdb-10.2/opcodes/fr30-opc.c --- gdb-9.1/opcodes/fr30-opc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/fr30-opc.c 2021-04-25 04:06:26.000000000 +0000 @@ -3,7 +3,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright (C) 1996-2019 Free Software Foundation, Inc. +Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of the GNU Binutils and/or GDB, the GNU debugger. diff -Nru gdb-9.1/opcodes/fr30-opc.h gdb-10.2/opcodes/fr30-opc.h --- gdb-9.1/opcodes/fr30-opc.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/fr30-opc.h 2021-04-25 04:06:26.000000000 +0000 @@ -3,7 +3,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright (C) 1996-2019 Free Software Foundation, Inc. +Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of the GNU Binutils and/or GDB, the GNU debugger. diff -Nru gdb-9.1/opcodes/frv-asm.c gdb-10.2/opcodes/frv-asm.c --- gdb-9.1/opcodes/frv-asm.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/frv-asm.c 2021-04-25 04:06:26.000000000 +0000 @@ -5,7 +5,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. - the resultant file is machine generated, cgen-asm.in isn't - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of libopcodes. diff -Nru gdb-9.1/opcodes/frv-desc.c gdb-10.2/opcodes/frv-desc.c --- gdb-9.1/opcodes/frv-desc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/frv-desc.c 2021-04-25 04:06:26.000000000 +0000 @@ -3,7 +3,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright (C) 1996-2019 Free Software Foundation, Inc. +Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of the GNU Binutils and/or GDB, the GNU debugger. @@ -6356,6 +6356,7 @@ CGEN_CPU_OPEN_MACHS: bitmap of values in enum mach_attr CGEN_CPU_OPEN_BFDMACH: specify 1 mach using bfd name CGEN_CPU_OPEN_ENDIAN: specify endian choice + CGEN_CPU_OPEN_INSN_ENDIAN: specify instruction endian choice CGEN_CPU_OPEN_END: terminates arguments ??? Simultaneous multiple isas might not make sense, but it's not (yet) @@ -6369,6 +6370,7 @@ CGEN_BITSET *isas = 0; /* 0 = "unspecified" */ unsigned int machs = 0; /* 0 = "unspecified" */ enum cgen_endian endian = CGEN_ENDIAN_UNKNOWN; + enum cgen_endian insn_endian = CGEN_ENDIAN_UNKNOWN; va_list ap; if (! init_p) @@ -6403,6 +6405,9 @@ case CGEN_CPU_OPEN_ENDIAN : endian = va_arg (ap, enum cgen_endian); break; + case CGEN_CPU_OPEN_INSN_ENDIAN : + insn_endian = va_arg (ap, enum cgen_endian); + break; default : opcodes_error_handler (/* xgettext:c-format */ @@ -6432,11 +6437,8 @@ cd->isas = cgen_bitset_copy (isas); cd->machs = machs; cd->endian = endian; - /* FIXME: for the sparc case we can determine insn-endianness statically. - The worry here is where both data and insn endian can be independently - chosen, in which case this function will need another argument. - Actually, will want to allow for more arguments in the future anyway. */ - cd->insn_endian = endian; + cd->insn_endian + = (insn_endian == CGEN_ENDIAN_UNKNOWN ? endian : insn_endian); /* Table (re)builder. */ cd->rebuild_tables = frv_cgen_rebuild_tables; @@ -6486,18 +6488,10 @@ regfree (CGEN_INSN_RX (insns)); } - if (cd->macro_insn_table.init_entries) - free ((CGEN_INSN *) cd->macro_insn_table.init_entries); - - if (cd->insn_table.init_entries) - free ((CGEN_INSN *) cd->insn_table.init_entries); - - if (cd->hw_table.entries) - free ((CGEN_HW_ENTRY *) cd->hw_table.entries); - - if (cd->operand_table.entries) - free ((CGEN_HW_ENTRY *) cd->operand_table.entries); - + free ((CGEN_INSN *) cd->macro_insn_table.init_entries); + free ((CGEN_INSN *) cd->insn_table.init_entries); + free ((CGEN_HW_ENTRY *) cd->hw_table.entries); + free ((CGEN_HW_ENTRY *) cd->operand_table.entries); free (cd); } diff -Nru gdb-9.1/opcodes/frv-desc.h gdb-10.2/opcodes/frv-desc.h --- gdb-9.1/opcodes/frv-desc.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/frv-desc.h 2021-04-25 04:06:26.000000000 +0000 @@ -3,7 +3,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright (C) 1996-2019 Free Software Foundation, Inc. +Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of the GNU Binutils and/or GDB, the GNU debugger. diff -Nru gdb-9.1/opcodes/frv-dis.c gdb-10.2/opcodes/frv-dis.c --- gdb-9.1/opcodes/frv-dis.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/frv-dis.c 2021-04-25 04:06:26.000000000 +0000 @@ -5,7 +5,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. - the resultant file is machine generated, cgen-dis.in isn't - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of libopcodes. @@ -569,7 +569,7 @@ /* 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); + 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 @@ -700,6 +700,7 @@ CGEN_BITSET *isa; int mach; int endian; + int insn_endian; CGEN_CPU_DESC cd; } cpu_desc_list; @@ -712,12 +713,16 @@ 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; /* ??? gdb will set mach but leave the architecture as "unknown" */ @@ -783,9 +788,11 @@ prev_isa = cgen_bitset_copy (isa); prev_mach = mach; prev_endian = endian; + prev_insn_endian = insn_endian; cd = frv_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 (); diff -Nru gdb-9.1/opcodes/frv-ibld.c gdb-10.2/opcodes/frv-ibld.c --- gdb-9.1/opcodes/frv-ibld.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/frv-ibld.c 2021-04-25 04:06:26.000000000 +0000 @@ -4,7 +4,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN: Cpu tools GENerator. - the resultant file is machine generated, cgen-ibld.in isn't - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of libopcodes. @@ -85,20 +85,20 @@ int word_length, unsigned char *bufp) { - unsigned long x,mask; + unsigned long x, mask; int shift; - x = cgen_get_insn_value (cd, bufp, word_length); + x = cgen_get_insn_value (cd, bufp, word_length, cd->endian); /* Written this way to avoid undefined behaviour. */ - mask = (((1L << (length - 1)) - 1) << 1) | 1; + mask = (1UL << (length - 1) << 1) - 1; if (CGEN_INSN_LSB0_P) shift = (start + 1) - length; else shift = (word_length - (start + length)); x = (x & ~(mask << shift)) | ((value & mask) << shift); - cgen_put_insn_value (cd, bufp, word_length, (bfd_vma) x); + cgen_put_insn_value (cd, bufp, word_length, (bfd_vma) x, cd->endian); } #endif /* ! CGEN_INT_INSN_P */ @@ -131,13 +131,15 @@ CGEN_INSN_BYTES_PTR buffer) { static char errbuf[100]; - /* Written this way to avoid undefined behaviour. */ - unsigned long mask = (((1L << (length - 1)) - 1) << 1) | 1; + unsigned long mask; /* If LENGTH is zero, this operand doesn't contribute to the value. */ if (length == 0) return NULL; + /* Written this way to avoid undefined behaviour. */ + mask = (1UL << (length - 1) << 1) - 1; + if (word_length > 8 * sizeof (CGEN_INSN_INT)) abort (); @@ -153,7 +155,7 @@ /* Ensure VALUE will fit. */ if (CGEN_BOOL_ATTR (attrs, CGEN_IFLD_SIGN_OPT)) { - long minval = - (1L << (length - 1)); + long minval = - (1UL << (length - 1)); unsigned long maxval = mask; if ((value > 0 && (unsigned long) value > maxval) @@ -191,8 +193,8 @@ { if (! cgen_signed_overflow_ok_p (cd)) { - long minval = - (1L << (length - 1)); - long maxval = (1L << (length - 1)) - 1; + long minval = - (1UL << (length - 1)); + long maxval = (1UL << (length - 1)) - 1; if (value < minval || value > maxval) { @@ -269,8 +271,8 @@ #else cgen_put_insn_value (cd, buffer, min ((unsigned) cd->base_insn_bitsize, - (unsigned) CGEN_FIELDS_BITSIZE (fields)), - value); + (unsigned) CGEN_FIELDS_BITSIZE (fields)), + value, cd->insn_endian); #endif /* ! CGEN_INT_INSN_P */ @@ -314,7 +316,7 @@ { int shift = insn_length - length; /* Written this way to avoid undefined behaviour. */ - CGEN_INSN_INT mask = (((1L << (length - 1)) - 1) << 1) | 1; + CGEN_INSN_INT mask = length == 0 ? 0 : (1UL << (length - 1) << 1) - 1; *buf = (*buf & ~(mask << shift)) | ((value & mask) << shift); } @@ -387,7 +389,7 @@ unsigned long x; int shift; - x = cgen_get_insn_value (cd, bufp, word_length); + x = cgen_get_insn_value (cd, bufp, word_length, cd->endian); if (CGEN_INSN_LSB0_P) shift = (start + 1) - length; @@ -480,7 +482,10 @@ abort (); if (fill_cache (cd, ex_info, word_offset / 8, word_length / 8, pc) == 0) - return 0; + { + *valuep = 0; + return 0; + } value = extract_1 (cd, ex_info, start, length, word_length, bufp, pc); } @@ -488,12 +493,12 @@ #endif /* ! CGEN_INT_INSN_P */ /* Written this way to avoid undefined behaviour. */ - mask = (((1L << (length - 1)) - 1) << 1) | 1; + mask = (1UL << (length - 1) << 1) - 1; value &= mask; /* sign extend? */ if (CGEN_BOOL_ATTR (attrs, CGEN_IFLD_SIGNED) - && (value & (1L << (length - 1)))) + && (value & (1UL << (length - 1)))) value |= ~mask; *valuep = value; @@ -1090,7 +1095,7 @@ { long value; length = extract_normal (cd, ex_info, insn_value, 0|(1<<CGEN_IFLD_SIGNED)|(1<<CGEN_IFLD_PCREL_ADDR), 0, 15, 16, 32, total_length, pc, & value); - value = ((((value) << (2))) + (pc)); + value = ((((value) * (4))) + (pc)); fields->f_label16 = value; } break; @@ -1101,7 +1106,7 @@ length = extract_normal (cd, ex_info, insn_value, 0, 0, 17, 18, 32, total_length, pc, & fields->f_labelL18); if (length <= 0) break; { - FLD (f_label24) = ((((((((FLD (f_labelH6)) << (18))) | (FLD (f_labelL18)))) << (2))) + (pc)); + FLD (f_label24) = ((((((((FLD (f_labelH6)) * (((1) << (18))))) | (FLD (f_labelL18)))) * (4))) + (pc)); } } break; @@ -1156,7 +1161,7 @@ length = extract_normal (cd, ex_info, insn_value, 0, 0, 5, 6, 32, total_length, pc, & fields->f_u12_l); if (length <= 0) break; { - FLD (f_u12) = ((((FLD (f_u12_h)) << (6))) | (FLD (f_u12_l))); + FLD (f_u12) = ((((FLD (f_u12_h)) * (64))) | (FLD (f_u12_l))); } } break; diff -Nru gdb-9.1/opcodes/frv-opc.c gdb-10.2/opcodes/frv-opc.c --- gdb-9.1/opcodes/frv-opc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/frv-opc.c 2021-04-25 04:06:26.000000000 +0000 @@ -3,7 +3,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright (C) 1996-2019 Free Software Foundation, Inc. +Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of the GNU Binutils and/or GDB, the GNU debugger. diff -Nru gdb-9.1/opcodes/frv-opc.h gdb-10.2/opcodes/frv-opc.h --- gdb-9.1/opcodes/frv-opc.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/frv-opc.h 2021-04-25 04:06:26.000000000 +0000 @@ -3,7 +3,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright (C) 1996-2019 Free Software Foundation, Inc. +Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of the GNU Binutils and/or GDB, the GNU debugger. diff -Nru gdb-9.1/opcodes/ft32-dis.c gdb-10.2/opcodes/ft32-dis.c --- gdb-9.1/opcodes/ft32-dis.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/ft32-dis.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Disassemble ft32 instructions. - Copyright (C) 2013-2019 Free Software Foundation, Inc. + Copyright (C) 2013-2020 Free Software Foundation, Inc. Contributed by FTDI (support@ftdichip.com) This file is part of the GNU opcodes library. @@ -81,7 +81,7 @@ switch (lobit) { case FT32_FLD_CBCRCV: - // imm is {CB, CV} + /* imm is {CB, CV} */ imm = ((iword >> FT32_FLD_CB_BIT) & ((1 << FT32_FLD_CB_SIZ) - 1)) << 4; imm |= ((iword >> FT32_FLD_CV_BIT) & ((1 << FT32_FLD_CV_SIZ) - 1)); switch (imm) diff -Nru gdb-9.1/opcodes/ft32-opc.c gdb-10.2/opcodes/ft32-opc.c --- gdb-9.1/opcodes/ft32-opc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/ft32-opc.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* ft32-opc.c -- Definitions for ft32 opcodes. - Copyright (C) 2013-2019 Free Software Foundation, Inc. + Copyright (C) 2013-2020 Free Software Foundation, Inc. Contributed by FTDI (support@ftdichip.com) This file is part of the GNU opcodes library. diff -Nru gdb-9.1/opcodes/h8300-dis.c gdb-10.2/opcodes/h8300-dis.c --- gdb-9.1/opcodes/h8300-dis.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/h8300-dis.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Disassemble h8300 instructions. - Copyright (C) 1993-2019 Free Software Foundation, Inc. + Copyright (C) 1993-2020 Free Software Foundation, Inc. This file is part of the GNU opcodes library. @@ -29,7 +29,7 @@ struct h8_instruction { - int length; + unsigned int length; const struct h8_opcode *opcode; }; @@ -56,13 +56,7 @@ that the count is the same as the length. */ for (i = 0; p->data.nib[i] != (op_type) E; i++) ; - - if (i & 1) - { - /* xgettext:c-format */ - opcodes_error_handler (_("internal error, h8_disassemble_init")); - abort (); - } + OPCODES_ASSERT (!(i & 1)); pi->length = i / 2; pi->opcode = p; @@ -327,8 +321,8 @@ const struct h8_instruction *qi; char const **pregnames = mach != 0 ? lregnames : wregnames; int status; - unsigned int l; - unsigned char data[MAX_CODE_NIBBLES]; + unsigned int maxlen; + unsigned char data[MAX_CODE_NIBBLES / 2]; void *stream = info->stream; fprintf_ftype outfn = info->fprintf_func; @@ -345,22 +339,34 @@ return -1; } - for (l = 2; status == 0 && l < sizeof (data) / 2; l += 2) - status = info->read_memory_func (addr + l, data + l, 2, info); + for (maxlen = 2; maxlen < sizeof (data); maxlen += 2) + { + status = info->read_memory_func (addr + maxlen, data + maxlen, 2, info); + if (status != 0) + break; + } /* Find the exact opcode/arg combo. */ for (qi = h8_instructions; qi->opcode->name; qi++) { - const struct h8_opcode *q = qi->opcode; - const op_type *nib = q->data.nib; - unsigned int len = 0; - - while (1) + const struct h8_opcode *q; + const op_type *nib; + unsigned int len; + op_type looking_for; + + if (qi->length > maxlen) + continue; + + q = qi->opcode; + nib = q->data.nib; + len = 0; + while ((looking_for = *nib) != (op_type) E) { - op_type looking_for = *nib; - int thisnib = data[len / 2]; + int thisnib; int opnr; + OPCODES_ASSERT (len / 2 < maxlen); + thisnib = data[len / 2]; thisnib = (len & 1) ? (thisnib & 0xf) : ((thisnib / 16) & 0xf); opnr = ((looking_for & OP3) == OP3 ? 2 : (looking_for & DST) == DST ? 1 : 0); @@ -462,6 +468,21 @@ || (looking_for & MODE) == INDEXW || (looking_for & MODE) == INDEXL) { + int extra; + switch (looking_for & SIZE) + { + case L_16: + case L_16U: + extra = 1; + break; + case L_32: + extra = 3; + break; + default: + extra = 0; + break; + } + OPCODES_ASSERT (len / 2 + extra < maxlen); extract_immediate (stream, looking_for, thisnib, data + len / 2, cst + opnr, cstlen + opnr, q); @@ -516,6 +537,7 @@ else if ((looking_for & SIZE) == L_16 || (looking_for & SIZE) == L_16U) { + OPCODES_ASSERT (len / 2 + 1 < maxlen); cst[opnr] = (data[len / 2]) * 256 + data[(len + 2) / 2]; cstlen[opnr] = 16; } @@ -529,8 +551,9 @@ } else if ((looking_for & SIZE) == L_32) { - int i = len / 2; + unsigned int i = len / 2; + OPCODES_ASSERT (i + 3 < maxlen); cst[opnr] = (((unsigned) data[i] << 24) | (data[i + 1] << 16) | (data[i + 2] << 8) @@ -540,8 +563,9 @@ } else if ((looking_for & SIZE) == L_24) { - int i = len / 2; + unsigned int i = len / 2; + OPCODES_ASSERT (i + 2 < maxlen); cst[opnr] = (data[i] << 16) | (data[i + 1] << 8) | (data[i + 2]); cstlen[opnr] = 24; @@ -588,113 +612,110 @@ { cst[opnr] = (thisnib == 3); } - else if (looking_for == (op_type) E) - { - outfn (stream, "%s\t", q->name); + else + /* xgettext:c-format */ + outfn (stream, _("Don't understand 0x%x \n"), looking_for); + } - /* Gross. Disgusting. */ - if (strcmp (q->name, "ldm.l") == 0) - { - int count, high; + len++; + nib++; + } - count = (data[1] / 16) & 0x3; - high = regno[1]; + outfn (stream, "%s\t", q->name); - outfn (stream, "@sp+,er%d-er%d", high - count, high); - return qi->length; - } + /* Gross. Disgusting. */ + if (strcmp (q->name, "ldm.l") == 0) + { + int count, high; - if (strcmp (q->name, "stm.l") == 0) - { - int count, low; + count = (data[1] / 16) & 0x3; + high = regno[1]; - count = (data[1] / 16) & 0x3; - low = regno[0]; + outfn (stream, "@sp+,er%d-er%d", high - count, high); + return qi->length; + } - outfn (stream, "er%d-er%d,@-sp", low, low + count); - return qi->length; - } - if (strcmp (q->name, "rte/l") == 0 - || strcmp (q->name, "rts/l") == 0) - { - if (regno[0] == 0) - outfn (stream, "er%d", regno[1]); - else - outfn (stream, "er%d-er%d", regno[1] - regno[0], - regno[1]); - return qi->length; - } - if (CONST_STRNEQ (q->name, "mova")) - { - const op_type *args = q->args.nib; + if (strcmp (q->name, "stm.l") == 0) + { + int count, low; - if (args[1] == (op_type) E) - { - /* Short form. */ - print_one_arg (info, addr, args[0], cst[0], - cstlen[0], dispregno[0], regno[0], - pregnames, qi->length); - outfn (stream, ",er%d", dispregno[0]); - } - else - { - outfn (stream, "@(0x%x:%d,", cst[0], cstlen[0]); - print_one_arg (info, addr, args[1], cst[1], - cstlen[1], dispregno[1], regno[1], - pregnames, qi->length); - outfn (stream, ".%c),", - (args[0] & MODE) == INDEXB ? 'b' : 'w'); - print_one_arg (info, addr, args[2], cst[2], - cstlen[2], dispregno[2], regno[2], - pregnames, qi->length); - } - return qi->length; - } - /* Fill in the args. */ - { - const op_type *args = q->args.nib; - int hadone = 0; - int nargs; - - /* Special case handling for the adds and subs instructions - since in H8 mode thay can only take the r0-r7 registers - but in other (higher) modes they can take the er0-er7 - registers as well. */ - if (strcmp (qi->opcode->name, "adds") == 0 - || strcmp (qi->opcode->name, "subs") == 0) - { - outfn (stream, "#%d,%s", cst[0], pregnames[regno[1] & 0x7]); - return qi->length; - } - - for (nargs = 0; - nargs < 3 && args[nargs] != (op_type) E; - nargs++) - { - int x = args[nargs]; - - if (hadone) - outfn (stream, ","); - - print_one_arg (info, addr, x, - cst[nargs], cstlen[nargs], - dispregno[nargs], regno[nargs], - pregnames, qi->length); - - hadone = 1; - } - } + count = (data[1] / 16) & 0x3; + low = regno[0]; - return qi->length; - } - else - /* xgettext:c-format */ - outfn (stream, _("Don't understand 0x%x \n"), looking_for); - } + outfn (stream, "er%d-er%d,@-sp", low, low + count); + return qi->length; + } + if (strcmp (q->name, "rte/l") == 0 + || strcmp (q->name, "rts/l") == 0) + { + if (regno[0] == 0) + outfn (stream, "er%d", regno[1]); + else + outfn (stream, "er%d-er%d", regno[1] - regno[0], + regno[1]); + return qi->length; + } + if (CONST_STRNEQ (q->name, "mova")) + { + const op_type *args = q->args.nib; - len++; - nib++; + if (args[1] == (op_type) E) + { + /* Short form. */ + print_one_arg (info, addr, args[0], cst[0], + cstlen[0], dispregno[0], regno[0], + pregnames, qi->length); + outfn (stream, ",er%d", dispregno[0]); + } + else + { + outfn (stream, "@(0x%x:%d,", cst[0], cstlen[0]); + print_one_arg (info, addr, args[1], cst[1], + cstlen[1], dispregno[1], regno[1], + pregnames, qi->length); + outfn (stream, ".%c),", + (args[0] & MODE) == INDEXB ? 'b' : 'w'); + print_one_arg (info, addr, args[2], cst[2], + cstlen[2], dispregno[2], regno[2], + pregnames, qi->length); + } + return qi->length; } + /* Fill in the args. */ + { + const op_type *args = q->args.nib; + int hadone = 0; + int nargs; + + /* Special case handling for the adds and subs instructions + since in H8 mode thay can only take the r0-r7 registers + but in other (higher) modes they can take the er0-er7 + registers as well. */ + if (strcmp (qi->opcode->name, "adds") == 0 + || strcmp (qi->opcode->name, "subs") == 0) + { + outfn (stream, "#%d,%s", cst[0], pregnames[regno[1] & 0x7]); + return qi->length; + } + + for (nargs = 0; + nargs < 3 && args[nargs] != (op_type) E; + nargs++) + { + int x = args[nargs]; + + if (hadone) + outfn (stream, ","); + + print_one_arg (info, addr, x, + cst[nargs], cstlen[nargs], + dispregno[nargs], regno[nargs], + pregnames, qi->length); + + hadone = 1; + } + } + return qi->length; fail: ; diff -Nru gdb-9.1/opcodes/hppa-dis.c gdb-10.2/opcodes/hppa-dis.c --- gdb-9.1/opcodes/hppa-dis.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/hppa-dis.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Disassembler for the PA-RISC. Somewhat derived from sparc-pinsn.c. - Copyright (C) 1989-2019 Free Software Foundation, Inc. + Copyright (C) 1989-2020 Free Software Foundation, Inc. Contributed by the Center for Software Science at the University of Utah (pa-gdb-bugs@cs.utah.edu). @@ -207,7 +207,7 @@ fput_const (unsigned num, disassemble_info *info) { if ((int) num < 0) - (*info->fprintf_func) (info->stream, "-%x", - (int) num); + (*info->fprintf_func) (info->stream, "-%x", -num); else (*info->fprintf_func) (info->stream, "%x", num); } @@ -289,7 +289,7 @@ static int extract_16 (unsigned word) { - int m15, m0, m1; + unsigned m15, m0, m1; m0 = GET_BIT (word, 16); m1 = GET_BIT (word, 17); @@ -304,7 +304,7 @@ static int extract_21 (unsigned word) { - int val; + unsigned val; word &= MASK_21; word <<= 11; @@ -1098,9 +1098,9 @@ case '#': { - int sign = GET_FIELD (insn, 31, 31); - int imm10 = GET_FIELD (insn, 18, 27); - int disp; + unsigned sign = GET_FIELD (insn, 31, 31); + unsigned imm10 = GET_FIELD (insn, 18, 27); + unsigned disp; if (sign) disp = (-1U << 10) | imm10; @@ -1114,9 +1114,9 @@ case 'K': case 'd': { - int sign = GET_FIELD (insn, 31, 31); - int imm11 = GET_FIELD (insn, 18, 28); - int disp; + unsigned sign = GET_FIELD (insn, 31, 31); + unsigned imm11 = GET_FIELD (insn, 18, 28); + unsigned disp; if (sign) disp = (-1U << 11) | imm11; diff -Nru gdb-9.1/opcodes/i386-dis.c gdb-10.2/opcodes/i386-dis.c --- gdb-9.1/opcodes/i386-dis.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/i386-dis.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Print i386 instructions for GDB, the GNU debugger. - Copyright (C) 1988-2019 Free Software Foundation, Inc. + Copyright (C) 1988-2020 Free Software Foundation, Inc. This file is part of the GNU opcodes library. @@ -37,6 +37,7 @@ #include "opintl.h" #include "opcode/i386.h" #include "libiberty.h" +#include "safe-ctype.h" #include <setjmp.h> @@ -76,7 +77,6 @@ static void OP_C (int, int); static void OP_D (int, int); static void OP_T (int, int); -static void OP_R (int, int); static void OP_MMX (int, int); static void OP_XMM (int, int); static void OP_EM (int, int); @@ -87,15 +87,12 @@ static void OP_XS (int, int); static void OP_M (int, int); static void OP_VEX (int, int); -static void OP_EX_Vex (int, int); -static void OP_EX_VexW (int, int); -static void OP_EX_VexImmW (int, int); -static void OP_XMM_Vex (int, int); -static void OP_XMM_VexW (int, int); +static void OP_VexR (int, int); +static void OP_VexW (int, int); static void OP_Rounding (int, int); static void OP_REG_VexI4 (int, int); +static void OP_VexI4 (int, int); static void PCLMUL_Fixup (int, int); -static void VCMP_Fixup (int, int); static void VPCMP_Fixup (int, int); static void VPCOM_Fixup (int, int); static void OP_0f07 (int, int); @@ -107,6 +104,7 @@ static void CMP_Fixup (int, int); static void BadOp (void); static void REP_Fixup (int, int); +static void SEP_Fixup (int, int); static void BND_Fixup (int, int); static void NOTRACK_Fixup (int, int); static void HLE_Fixup1 (int, int); @@ -114,15 +112,9 @@ static void HLE_Fixup3 (int, int); static void CMPXCHG8B_Fixup (int, int); static void XMM_Fixup (int, int); -static void CRC32_Fixup (int, int); static void FXSAVE_Fixup (int, int); -static void PCMPESTR_Fixup (int, int); -static void OP_LWPCB_E (int, int); -static void OP_LWP_E (int, int); -static void OP_Vex_2src_1 (int, int); -static void OP_Vex_2src_2 (int, int); -static void MOVBE_Fixup (int, int); +static void MOVSXD_Fixup (int, int); static void OP_Mask (int, int); @@ -151,8 +143,6 @@ static int rex; /* Bits of REX we've already used. */ static int rex_used; -/* REX bits in original REX prefix ignored. */ -static int rex_ignored; /* Mark parts used in the REX prefix. When we are testing for empty prefix (for 8bit register REX extension), just mask it out. Otherwise test for REX bit is excuse for existence of REX @@ -271,6 +261,7 @@ #define Mo { OP_M, o_mode } #define Mp { OP_M, f_mode } /* 32 or 48 bit memory operand for LDS, LES etc */ #define Mq { OP_M, q_mode } +#define Mv { OP_M, v_mode } #define Mv_bnd { OP_M, v_bndmk_mode } #define Mx { OP_M, x_mode } #define Mxmm { OP_M, xmm_mode } @@ -282,9 +273,6 @@ #define Gm { OP_G, m_mode } #define Gva { OP_G, va_mode } #define Gw { OP_G, w_mode } -#define Rd { OP_R, d_mode } -#define Rdq { OP_R, dq_mode } -#define Rm { OP_R, m_mode } #define Ib { OP_I, b_mode } #define sIb { OP_sI, b_mode } /* sign extened byte */ #define sIbT { OP_sI, b_T_mode } /* sign extened byte like 'T' */ @@ -296,6 +284,7 @@ #define I1 { OP_I, const_1_mode } #define Jb { OP_J, b_mode } #define Jv { OP_J, v_mode } +#define Jdqw { OP_J, dqw_mode } #define Cm { OP_C, m_mode } #define Dm { OP_D, m_mode } #define Td { OP_T, d_mode } @@ -329,23 +318,8 @@ #define RMDX { OP_REG, dx_reg } #define eAX { OP_IMREG, eAX_reg } -#define eBX { OP_IMREG, eBX_reg } -#define eCX { OP_IMREG, eCX_reg } -#define eDX { OP_IMREG, eDX_reg } -#define eSP { OP_IMREG, eSP_reg } -#define eBP { OP_IMREG, eBP_reg } -#define eSI { OP_IMREG, eSI_reg } -#define eDI { OP_IMREG, eDI_reg } #define AL { OP_IMREG, al_reg } #define CL { OP_IMREG, cl_reg } -#define DL { OP_IMREG, dl_reg } -#define BL { OP_IMREG, bl_reg } -#define AH { OP_IMREG, ah_reg } -#define CH { OP_IMREG, ch_reg } -#define DH { OP_IMREG, dh_reg } -#define BH { OP_IMREG, bh_reg } -#define AX { OP_IMREG, ax_reg } -#define DX { OP_IMREG, dx_reg } #define zAX { OP_IMREG, z_mode_ax_reg } #define indirDX { OP_IMREG, indir_dx_reg } @@ -373,36 +347,32 @@ #define XMScalar { OP_XMM, scalar_mode } #define XMGatherQ { OP_XMM, vex_vsib_q_w_dq_mode } #define XMM { OP_XMM, xmm_mode } +#define TMM { OP_XMM, tmm_mode } #define XMxmmq { OP_XMM, xmmq_mode } #define EM { OP_EM, v_mode } #define EMS { OP_EM, v_swap_mode } #define EMd { OP_EM, d_mode } #define EMx { OP_EM, x_mode } -#define EXbScalar { OP_EX, b_scalar_mode } +#define EXbwUnit { OP_EX, bw_unit_mode } #define EXw { OP_EX, w_mode } -#define EXwScalar { OP_EX, w_scalar_mode } #define EXd { OP_EX, d_mode } -#define EXdScalar { OP_EX, d_scalar_mode } #define EXdS { OP_EX, d_swap_mode } #define EXq { OP_EX, q_mode } -#define EXqScalar { OP_EX, q_scalar_mode } -#define EXqScalarS { OP_EX, q_scalar_swap_mode } #define EXqS { OP_EX, q_swap_mode } #define EXx { OP_EX, x_mode } #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 EXEvexHalfBcstXmmq { OP_EX, evex_half_bcst_xmmq_mode } #define EXxmm_mb { OP_EX, xmm_mb_mode } #define EXxmm_mw { OP_EX, xmm_mw_mode } #define EXxmm_md { OP_EX, xmm_md_mode } #define EXxmm_mq { OP_EX, xmm_mq_mode } -#define EXxmm_mdq { OP_EX, xmm_mdq_mode } #define EXxmmdw { OP_EX, xmmdw_mode } #define EXxmmqd { OP_EX, xmmqd_mode } #define EXymmq { OP_EX, ymmq_mode } -#define EXVexWdq { OP_EX, vex_w_dq_mode } #define EXVexWdqScalar { OP_EX, vex_scalar_w_dq_mode } #define EXEvexXGscat { OP_EX, evex_x_gscat_mode } #define EXEvexXNoBcst { OP_EX, evex_x_nobcst_mode } @@ -411,29 +381,22 @@ #define EMCq { OP_EMC, q_mode } #define MXC { OP_MXC, 0 } #define OPSUF { OP_3DNowSuffix, 0 } +#define SEP { SEP_Fixup, 0 } #define CMP { CMP_Fixup, 0 } #define XMM0 { XMM_Fixup, 0 } #define FXSAVE { FXSAVE_Fixup, 0 } -#define Vex_2src_1 { OP_Vex_2src_1, 0 } -#define Vex_2src_2 { OP_Vex_2src_2, 0 } #define Vex { OP_VEX, vex_mode } +#define VexW { OP_VexW, vex_mode } #define VexScalar { OP_VEX, vex_scalar_mode } +#define VexScalarR { OP_VexR, vex_scalar_mode } #define VexGatherQ { OP_VEX, vex_vsib_q_w_dq_mode } -#define Vex128 { OP_VEX, vex128_mode } -#define Vex256 { OP_VEX, vex256_mode } #define VexGdq { OP_VEX, dq_mode } -#define EXdVexScalarS { OP_EX_Vex, d_scalar_swap_mode } -#define EXqVexScalarS { OP_EX_Vex, q_scalar_swap_mode } -#define EXVexW { OP_EX_VexW, x_mode } -#define EXdVexW { OP_EX_VexW, d_mode } -#define EXqVexW { OP_EX_VexW, q_mode } -#define EXVexImmW { OP_EX_VexImmW, x_mode } -#define XMVexScalar { OP_XMM_Vex, scalar_mode } -#define XMVexW { OP_XMM_VexW, 0 } +#define VexTmm { OP_VEX, tmm_mode } #define XMVexI4 { OP_REG_VexI4, x_mode } +#define XMVexScalarI4 { OP_REG_VexI4, scalar_mode } +#define VexI4 { OP_VexI4, 0 } #define PCLMUL { PCLMUL_Fixup, 0 } -#define VCMP { VCMP_Fixup, 0 } #define VPCMP { VPCMP_Fixup, 0 } #define VPCOM { VPCOM_Fixup, 0 } @@ -445,7 +408,6 @@ #define MaskG { OP_G, mask_mode } #define MaskE { OP_E, mask_mode } #define MaskBDE { OP_E, mask_bd_mode } -#define MaskR { OP_R, mask_mode } #define MaskVex { OP_VEX, mask_mode } #define MVexVSIBDWpX { OP_M, vex_vsib_d_w_dq_mode } @@ -453,6 +415,8 @@ #define MVexVSIBQWpX { OP_M, vex_vsib_q_w_dq_mode } #define MVexVSIBQDWpX { OP_M, vex_vsib_q_w_d_mode } +#define MVexSIBMEM { OP_M, vex_sibmem_mode } + /* Used handle "rep" prefix for string instructions. */ #define Xbr { REP_Fixup, eSI_reg } #define Xvr { REP_Fixup, eSI_reg } @@ -513,6 +477,8 @@ x_mode, /* Similar to x_mode, but with different EVEX mem shifts. */ evex_x_gscat_mode, + /* Similar to x_mode, but with yet different EVEX mem shifts. */ + bw_unit_mode, /* Similar to x_mode, but with disabled broadcast. */ evex_x_nobcst_mode, /* Similar to x_mode, but with operands swapped and disabled broadcast @@ -534,9 +500,6 @@ xmm_md_mode, /* XMM register or quad word memory operand */ xmm_mq_mode, - /* XMM register or double/quad word memory operand, depending on - VEX.W. */ - xmm_mdq_mode, /* 16-byte XMM, word, double word or quad word operand. */ xmmdw_mode, /* 16-byte XMM, double word, quad word operand or xmm word operand. */ @@ -547,18 +510,22 @@ ymmq_mode, /* 32-byte YMM or 16-byte word operand */ ymmxmm_mode, + /* TMM operand */ + tmm_mode, /* d_mode in 32bit, q_mode in 64bit mode. */ m_mode, /* pair of v_mode operands */ a_mode, cond_jump_mode, loop_jcxz_mode, + movsxd_mode, v_bnd_mode, /* like v_bnd_mode in 32bit, no RIP-rel in 64bit mode. */ v_bndmk_mode, /* operand size depends on REX prefixes. */ dq_mode, - /* registers like dq_mode, memory like w_mode. */ + /* registers like dq_mode, memory like w_mode, displacements like + v_mode without considering Intel64 ISA. */ dqw_mode, /* bounds operand */ bnd_mode, @@ -585,39 +552,23 @@ dqd_mode, /* normal vex mode */ vex_mode, - /* 128bit vex mode */ - vex128_mode, - /* 256bit vex mode */ - vex256_mode, - /* operand size depends on the VEX.W bit. */ - vex_w_dq_mode, - /* Similar to vex_w_dq_mode, with VSIB dword indices. */ + /* Operand size depends on the VEX.W bit, with VSIB dword indices. */ vex_vsib_d_w_dq_mode, /* Similar to vex_vsib_d_w_dq_mode, with smaller memory. */ vex_vsib_d_w_d_mode, - /* Similar to vex_w_dq_mode, with VSIB qword indices. */ + /* Operand size depends on the VEX.W bit, with VSIB qword indices. */ vex_vsib_q_w_dq_mode, /* Similar to vex_vsib_q_w_dq_mode, with smaller memory. */ vex_vsib_q_w_d_mode, + /* mandatory non-vector SIB. */ + vex_sibmem_mode, /* scalar, ignore vector length. */ scalar_mode, - /* like b_mode, ignore vector length. */ - b_scalar_mode, - /* like w_mode, ignore vector length. */ - w_scalar_mode, - /* like d_mode, ignore vector length. */ - d_scalar_mode, - /* like d_swap_mode, ignore vector length. */ - d_scalar_swap_mode, - /* like q_mode, ignore vector length. */ - q_scalar_mode, - /* like q_swap_mode, ignore vector length. */ - q_scalar_swap_mode, /* like vex_mode, ignore vector length. */ vex_scalar_mode, - /* like vex_w_dq_mode, ignore vector length. */ + /* Operand size depends on the VEX.W bit, ignore vector length. */ vex_scalar_w_dq_mode, /* Static rounding. */ @@ -752,11 +703,13 @@ REG_VEX_0F72, REG_VEX_0F73, REG_VEX_0FAE, + REG_VEX_0F3849_X86_64_P_0_W_0_M_1, REG_VEX_0F38F3, - REG_XOP_LWPCB, - REG_XOP_LWP, - REG_XOP_TBM_01, - REG_XOP_TBM_02, + + REG_0FXOP_09_01_L_0, + REG_0FXOP_09_02_L_0, + REG_0FXOP_09_12_M_1_L_0, + REG_0FXOP_0A_12_L_0, REG_EVEX_0F71, REG_EVEX_0F72, @@ -779,8 +732,10 @@ MOD_0F01_REG_5, MOD_0F01_REG_7, 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, @@ -795,13 +750,11 @@ MOD_0F1B_PREFIX_1, MOD_0F1C_PREFIX_0, MOD_0F1E_PREFIX_1, - MOD_0F24, - MOD_0F26, MOD_0F2B_PREFIX_0, MOD_0F2B_PREFIX_1, MOD_0F2B_PREFIX_2, MOD_0F2B_PREFIX_3, - MOD_0F51, + MOD_0F50, MOD_0F71_REG_2, MOD_0F71_REG_4, MOD_0F71_REG_6, @@ -832,19 +785,32 @@ MOD_0FD7, MOD_0FE7_PREFIX_2, MOD_0FF0_PREFIX_3, - MOD_0F382A_PREFIX_2, - MOD_0F38F5_PREFIX_2, + MOD_0F382A, + MOD_VEX_0F3849_X86_64_P_0_W_0, + MOD_VEX_0F3849_X86_64_P_2_W_0, + MOD_VEX_0F3849_X86_64_P_3_W_0, + MOD_VEX_0F384B_X86_64_P_1_W_0, + MOD_VEX_0F384B_X86_64_P_2_W_0, + MOD_VEX_0F384B_X86_64_P_3_W_0, + MOD_VEX_0F385C_X86_64_P_1_W_0, + MOD_VEX_0F385E_X86_64_P_0_W_0, + MOD_VEX_0F385E_X86_64_P_1_W_0, + MOD_VEX_0F385E_X86_64_P_2_W_0, + MOD_VEX_0F385E_X86_64_P_3_W_0, + MOD_0F38F5, MOD_0F38F6_PREFIX_0, MOD_0F38F8_PREFIX_1, MOD_0F38F8_PREFIX_2, MOD_0F38F8_PREFIX_3, - MOD_0F38F9_PREFIX_0, + MOD_0F38F9, MOD_62_32BIT, MOD_C4_32BIT, MOD_C5_32BIT, 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_W_0_0F41_P_0_LEN_1, @@ -909,29 +875,47 @@ MOD_VEX_W_1_0F99_P_2_LEN_0, MOD_VEX_0FAE_REG_2, MOD_VEX_0FAE_REG_3, - MOD_VEX_0FD7_PREFIX_2, - MOD_VEX_0FE7_PREFIX_2, + MOD_VEX_0FD7, + MOD_VEX_0FE7, MOD_VEX_0FF0_PREFIX_3, - MOD_VEX_0F381A_PREFIX_2, - MOD_VEX_0F382A_PREFIX_2, - MOD_VEX_0F382C_PREFIX_2, - MOD_VEX_0F382D_PREFIX_2, - MOD_VEX_0F382E_PREFIX_2, - MOD_VEX_0F382F_PREFIX_2, - MOD_VEX_0F385A_PREFIX_2, - MOD_VEX_0F388C_PREFIX_2, - MOD_VEX_0F388E_PREFIX_2, - MOD_VEX_W_0_0F3A30_P_2_LEN_0, - MOD_VEX_W_1_0F3A30_P_2_LEN_0, - MOD_VEX_W_0_0F3A31_P_2_LEN_0, - MOD_VEX_W_1_0F3A31_P_2_LEN_0, - MOD_VEX_W_0_0F3A32_P_2_LEN_0, - MOD_VEX_W_1_0F3A32_P_2_LEN_0, - MOD_VEX_W_0_0F3A33_P_2_LEN_0, - MOD_VEX_W_1_0F3A33_P_2_LEN_0, + MOD_VEX_0F381A, + MOD_VEX_0F382A, + MOD_VEX_0F382C, + MOD_VEX_0F382D, + MOD_VEX_0F382E, + MOD_VEX_0F382F, + MOD_VEX_0F385A, + 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_VEX_0FXOP_09_12, MOD_EVEX_0F12_PREFIX_0, + MOD_EVEX_0F12_PREFIX_2, + MOD_EVEX_0F13, MOD_EVEX_0F16_PREFIX_0, + MOD_EVEX_0F16_PREFIX_2, + MOD_EVEX_0F17, + MOD_EVEX_0F2B, + MOD_EVEX_0F381A_W_0, + MOD_EVEX_0F381A_W_1, + MOD_EVEX_0F381B_W_0, + MOD_EVEX_0F381B_W_1, + 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_W_0, + MOD_EVEX_0F385A_W_1, + MOD_EVEX_0F385B_W_0, + MOD_EVEX_0F385B_W_1, + MOD_EVEX_0F387A_W_0, + MOD_EVEX_0F387B_W_0, + MOD_EVEX_0F387C, MOD_EVEX_0F38C6_REG_1, MOD_EVEX_0F38C6_REG_2, MOD_EVEX_0F38C6_REG_5, @@ -955,16 +939,18 @@ RM_0F1E_P_1_MOD_3_REG_7, RM_0FAE_REG_6_MOD_3_P_0, RM_0FAE_REG_7_MOD_3, + RM_VEX_0F3849_X86_64_P_0_W_0_M_1_R_0 }; enum { PREFIX_90 = 0, + PREFIX_0F01_REG_3_RM_1, PREFIX_0F01_REG_5_MOD_0, PREFIX_0F01_REG_5_MOD_3_RM_0, + PREFIX_0F01_REG_5_MOD_3_RM_1, PREFIX_0F01_REG_5_MOD_3_RM_2, PREFIX_0F01_REG_7_MOD_3_RM_2, - PREFIX_0F01_REG_7_MOD_3_RM_3, PREFIX_0F09, PREFIX_0F10, PREFIX_0F11, @@ -994,12 +980,8 @@ PREFIX_0F60, PREFIX_0F61, PREFIX_0F62, - PREFIX_0F6C, - PREFIX_0F6D, PREFIX_0F6F, PREFIX_0F70, - PREFIX_0F73_REG_3, - PREFIX_0F73_REG_7, PREFIX_0F78, PREFIX_0F79, PREFIX_0F7C, @@ -1012,7 +994,6 @@ PREFIX_0FAE_REG_3_MOD_3, PREFIX_0FAE_REG_4_MOD_0, PREFIX_0FAE_REG_4_MOD_3, - PREFIX_0FAE_REG_5_MOD_0, PREFIX_0FAE_REG_5_MOD_3, PREFIX_0FAE_REG_6_MOD_0, PREFIX_0FAE_REG_6_MOD_3, @@ -1021,7 +1002,6 @@ PREFIX_0FBC, PREFIX_0FBD, PREFIX_0FC2, - PREFIX_0FC3_MOD_0, PREFIX_0FC7_REG_6_MOD_0, PREFIX_0FC7_REG_6_MOD_3, PREFIX_0FC7_REG_7_MOD_3, @@ -1031,84 +1011,10 @@ PREFIX_0FE7, PREFIX_0FF0, PREFIX_0FF7, - PREFIX_0F3810, - PREFIX_0F3814, - PREFIX_0F3815, - PREFIX_0F3817, - PREFIX_0F3820, - PREFIX_0F3821, - PREFIX_0F3822, - PREFIX_0F3823, - PREFIX_0F3824, - PREFIX_0F3825, - PREFIX_0F3828, - PREFIX_0F3829, - PREFIX_0F382A, - PREFIX_0F382B, - PREFIX_0F3830, - PREFIX_0F3831, - PREFIX_0F3832, - PREFIX_0F3833, - PREFIX_0F3834, - PREFIX_0F3835, - PREFIX_0F3837, - PREFIX_0F3838, - PREFIX_0F3839, - PREFIX_0F383A, - PREFIX_0F383B, - PREFIX_0F383C, - PREFIX_0F383D, - PREFIX_0F383E, - PREFIX_0F383F, - PREFIX_0F3840, - PREFIX_0F3841, - PREFIX_0F3880, - PREFIX_0F3881, - PREFIX_0F3882, - PREFIX_0F38C8, - PREFIX_0F38C9, - PREFIX_0F38CA, - PREFIX_0F38CB, - PREFIX_0F38CC, - PREFIX_0F38CD, - PREFIX_0F38CF, - PREFIX_0F38DB, - PREFIX_0F38DC, - PREFIX_0F38DD, - PREFIX_0F38DE, - PREFIX_0F38DF, PREFIX_0F38F0, PREFIX_0F38F1, - PREFIX_0F38F5, PREFIX_0F38F6, PREFIX_0F38F8, - PREFIX_0F38F9, - PREFIX_0F3A08, - PREFIX_0F3A09, - PREFIX_0F3A0A, - PREFIX_0F3A0B, - PREFIX_0F3A0C, - PREFIX_0F3A0D, - PREFIX_0F3A0E, - PREFIX_0F3A14, - PREFIX_0F3A15, - PREFIX_0F3A16, - PREFIX_0F3A17, - PREFIX_0F3A20, - PREFIX_0F3A21, - PREFIX_0F3A22, - PREFIX_0F3A40, - PREFIX_0F3A41, - PREFIX_0F3A42, - PREFIX_0F3A44, - PREFIX_0F3A60, - PREFIX_0F3A61, - PREFIX_0F3A62, - PREFIX_0F3A63, - PREFIX_0F3ACC, - PREFIX_0F3ACE, - PREFIX_0F3ACF, - PREFIX_0F3ADF, PREFIX_VEX_0F10, PREFIX_VEX_0F11, PREFIX_VEX_0F12, @@ -1137,37 +1043,8 @@ PREFIX_VEX_0F5D, PREFIX_VEX_0F5E, PREFIX_VEX_0F5F, - PREFIX_VEX_0F60, - PREFIX_VEX_0F61, - PREFIX_VEX_0F62, - PREFIX_VEX_0F63, - PREFIX_VEX_0F64, - PREFIX_VEX_0F65, - PREFIX_VEX_0F66, - PREFIX_VEX_0F67, - PREFIX_VEX_0F68, - PREFIX_VEX_0F69, - PREFIX_VEX_0F6A, - PREFIX_VEX_0F6B, - PREFIX_VEX_0F6C, - PREFIX_VEX_0F6D, - PREFIX_VEX_0F6E, PREFIX_VEX_0F6F, PREFIX_VEX_0F70, - PREFIX_VEX_0F71_REG_2, - PREFIX_VEX_0F71_REG_4, - PREFIX_VEX_0F71_REG_6, - PREFIX_VEX_0F72_REG_2, - PREFIX_VEX_0F72_REG_4, - PREFIX_VEX_0F72_REG_6, - PREFIX_VEX_0F73_REG_2, - PREFIX_VEX_0F73_REG_3, - PREFIX_VEX_0F73_REG_6, - PREFIX_VEX_0F73_REG_7, - PREFIX_VEX_0F74, - PREFIX_VEX_0F75, - PREFIX_VEX_0F76, - PREFIX_VEX_0F77, PREFIX_VEX_0F7C, PREFIX_VEX_0F7D, PREFIX_VEX_0F7E, @@ -1179,259 +1056,24 @@ PREFIX_VEX_0F98, PREFIX_VEX_0F99, PREFIX_VEX_0FC2, - PREFIX_VEX_0FC4, - PREFIX_VEX_0FC5, PREFIX_VEX_0FD0, - PREFIX_VEX_0FD1, - PREFIX_VEX_0FD2, - PREFIX_VEX_0FD3, - PREFIX_VEX_0FD4, - PREFIX_VEX_0FD5, - PREFIX_VEX_0FD6, - PREFIX_VEX_0FD7, - PREFIX_VEX_0FD8, - PREFIX_VEX_0FD9, - PREFIX_VEX_0FDA, - PREFIX_VEX_0FDB, - PREFIX_VEX_0FDC, - PREFIX_VEX_0FDD, - PREFIX_VEX_0FDE, - PREFIX_VEX_0FDF, - PREFIX_VEX_0FE0, - PREFIX_VEX_0FE1, - PREFIX_VEX_0FE2, - PREFIX_VEX_0FE3, - PREFIX_VEX_0FE4, - PREFIX_VEX_0FE5, PREFIX_VEX_0FE6, - PREFIX_VEX_0FE7, - PREFIX_VEX_0FE8, - PREFIX_VEX_0FE9, - PREFIX_VEX_0FEA, - PREFIX_VEX_0FEB, - PREFIX_VEX_0FEC, - PREFIX_VEX_0FED, - PREFIX_VEX_0FEE, - PREFIX_VEX_0FEF, PREFIX_VEX_0FF0, - PREFIX_VEX_0FF1, - PREFIX_VEX_0FF2, - PREFIX_VEX_0FF3, - PREFIX_VEX_0FF4, - PREFIX_VEX_0FF5, - PREFIX_VEX_0FF6, - PREFIX_VEX_0FF7, - PREFIX_VEX_0FF8, - PREFIX_VEX_0FF9, - PREFIX_VEX_0FFA, - PREFIX_VEX_0FFB, - PREFIX_VEX_0FFC, - PREFIX_VEX_0FFD, - PREFIX_VEX_0FFE, - PREFIX_VEX_0F3800, - PREFIX_VEX_0F3801, - PREFIX_VEX_0F3802, - PREFIX_VEX_0F3803, - PREFIX_VEX_0F3804, - PREFIX_VEX_0F3805, - PREFIX_VEX_0F3806, - PREFIX_VEX_0F3807, - PREFIX_VEX_0F3808, - PREFIX_VEX_0F3809, - PREFIX_VEX_0F380A, - PREFIX_VEX_0F380B, - PREFIX_VEX_0F380C, - PREFIX_VEX_0F380D, - PREFIX_VEX_0F380E, - PREFIX_VEX_0F380F, - PREFIX_VEX_0F3813, - PREFIX_VEX_0F3816, - PREFIX_VEX_0F3817, - PREFIX_VEX_0F3818, - PREFIX_VEX_0F3819, - PREFIX_VEX_0F381A, - PREFIX_VEX_0F381C, - PREFIX_VEX_0F381D, - PREFIX_VEX_0F381E, - PREFIX_VEX_0F3820, - PREFIX_VEX_0F3821, - PREFIX_VEX_0F3822, - PREFIX_VEX_0F3823, - PREFIX_VEX_0F3824, - PREFIX_VEX_0F3825, - PREFIX_VEX_0F3828, - PREFIX_VEX_0F3829, - PREFIX_VEX_0F382A, - PREFIX_VEX_0F382B, - PREFIX_VEX_0F382C, - PREFIX_VEX_0F382D, - PREFIX_VEX_0F382E, - PREFIX_VEX_0F382F, - PREFIX_VEX_0F3830, - PREFIX_VEX_0F3831, - PREFIX_VEX_0F3832, - PREFIX_VEX_0F3833, - PREFIX_VEX_0F3834, - PREFIX_VEX_0F3835, - PREFIX_VEX_0F3836, - PREFIX_VEX_0F3837, - PREFIX_VEX_0F3838, - PREFIX_VEX_0F3839, - PREFIX_VEX_0F383A, - PREFIX_VEX_0F383B, - PREFIX_VEX_0F383C, - PREFIX_VEX_0F383D, - PREFIX_VEX_0F383E, - PREFIX_VEX_0F383F, - PREFIX_VEX_0F3840, - PREFIX_VEX_0F3841, - PREFIX_VEX_0F3845, - PREFIX_VEX_0F3846, - PREFIX_VEX_0F3847, - PREFIX_VEX_0F3858, - PREFIX_VEX_0F3859, - PREFIX_VEX_0F385A, - PREFIX_VEX_0F3878, - PREFIX_VEX_0F3879, - PREFIX_VEX_0F388C, - PREFIX_VEX_0F388E, - PREFIX_VEX_0F3890, - PREFIX_VEX_0F3891, - PREFIX_VEX_0F3892, - PREFIX_VEX_0F3893, - PREFIX_VEX_0F3896, - PREFIX_VEX_0F3897, - PREFIX_VEX_0F3898, - PREFIX_VEX_0F3899, - PREFIX_VEX_0F389A, - PREFIX_VEX_0F389B, - PREFIX_VEX_0F389C, - PREFIX_VEX_0F389D, - PREFIX_VEX_0F389E, - PREFIX_VEX_0F389F, - PREFIX_VEX_0F38A6, - PREFIX_VEX_0F38A7, - PREFIX_VEX_0F38A8, - PREFIX_VEX_0F38A9, - PREFIX_VEX_0F38AA, - PREFIX_VEX_0F38AB, - PREFIX_VEX_0F38AC, - PREFIX_VEX_0F38AD, - PREFIX_VEX_0F38AE, - PREFIX_VEX_0F38AF, - PREFIX_VEX_0F38B6, - PREFIX_VEX_0F38B7, - PREFIX_VEX_0F38B8, - PREFIX_VEX_0F38B9, - PREFIX_VEX_0F38BA, - PREFIX_VEX_0F38BB, - PREFIX_VEX_0F38BC, - PREFIX_VEX_0F38BD, - PREFIX_VEX_0F38BE, - PREFIX_VEX_0F38BF, - PREFIX_VEX_0F38CF, - PREFIX_VEX_0F38DB, - PREFIX_VEX_0F38DC, - PREFIX_VEX_0F38DD, - PREFIX_VEX_0F38DE, - PREFIX_VEX_0F38DF, - PREFIX_VEX_0F38F2, - PREFIX_VEX_0F38F3_REG_1, - PREFIX_VEX_0F38F3_REG_2, - PREFIX_VEX_0F38F3_REG_3, + PREFIX_VEX_0F3849_X86_64, + PREFIX_VEX_0F384B_X86_64, + PREFIX_VEX_0F385C_X86_64, + PREFIX_VEX_0F385E_X86_64, PREFIX_VEX_0F38F5, PREFIX_VEX_0F38F6, PREFIX_VEX_0F38F7, - PREFIX_VEX_0F3A00, - PREFIX_VEX_0F3A01, - PREFIX_VEX_0F3A02, - PREFIX_VEX_0F3A04, - PREFIX_VEX_0F3A05, - PREFIX_VEX_0F3A06, - PREFIX_VEX_0F3A08, - PREFIX_VEX_0F3A09, - PREFIX_VEX_0F3A0A, - PREFIX_VEX_0F3A0B, - PREFIX_VEX_0F3A0C, - PREFIX_VEX_0F3A0D, - PREFIX_VEX_0F3A0E, - PREFIX_VEX_0F3A0F, - PREFIX_VEX_0F3A14, - PREFIX_VEX_0F3A15, - PREFIX_VEX_0F3A16, - PREFIX_VEX_0F3A17, - PREFIX_VEX_0F3A18, - PREFIX_VEX_0F3A19, - PREFIX_VEX_0F3A1D, - PREFIX_VEX_0F3A20, - PREFIX_VEX_0F3A21, - PREFIX_VEX_0F3A22, - PREFIX_VEX_0F3A30, - PREFIX_VEX_0F3A31, - PREFIX_VEX_0F3A32, - PREFIX_VEX_0F3A33, - PREFIX_VEX_0F3A38, - PREFIX_VEX_0F3A39, - PREFIX_VEX_0F3A40, - PREFIX_VEX_0F3A41, - PREFIX_VEX_0F3A42, - PREFIX_VEX_0F3A44, - PREFIX_VEX_0F3A46, - PREFIX_VEX_0F3A48, - PREFIX_VEX_0F3A49, - PREFIX_VEX_0F3A4A, - PREFIX_VEX_0F3A4B, - PREFIX_VEX_0F3A4C, - PREFIX_VEX_0F3A5C, - PREFIX_VEX_0F3A5D, - PREFIX_VEX_0F3A5E, - PREFIX_VEX_0F3A5F, - PREFIX_VEX_0F3A60, - PREFIX_VEX_0F3A61, - PREFIX_VEX_0F3A62, - PREFIX_VEX_0F3A63, - PREFIX_VEX_0F3A68, - PREFIX_VEX_0F3A69, - PREFIX_VEX_0F3A6A, - PREFIX_VEX_0F3A6B, - PREFIX_VEX_0F3A6C, - PREFIX_VEX_0F3A6D, - PREFIX_VEX_0F3A6E, - PREFIX_VEX_0F3A6F, - PREFIX_VEX_0F3A78, - PREFIX_VEX_0F3A79, - PREFIX_VEX_0F3A7A, - PREFIX_VEX_0F3A7B, - PREFIX_VEX_0F3A7C, - PREFIX_VEX_0F3A7D, - PREFIX_VEX_0F3A7E, - PREFIX_VEX_0F3A7F, - PREFIX_VEX_0F3ACE, - PREFIX_VEX_0F3ACF, - PREFIX_VEX_0F3ADF, PREFIX_VEX_0F3AF0, PREFIX_EVEX_0F10, PREFIX_EVEX_0F11, PREFIX_EVEX_0F12, - PREFIX_EVEX_0F13, - PREFIX_EVEX_0F14, - PREFIX_EVEX_0F15, PREFIX_EVEX_0F16, - PREFIX_EVEX_0F17, - PREFIX_EVEX_0F28, - PREFIX_EVEX_0F29, PREFIX_EVEX_0F2A, - PREFIX_EVEX_0F2B, - PREFIX_EVEX_0F2C, - PREFIX_EVEX_0F2D, - PREFIX_EVEX_0F2E, - PREFIX_EVEX_0F2F, PREFIX_EVEX_0F51, - PREFIX_EVEX_0F54, - PREFIX_EVEX_0F55, - PREFIX_EVEX_0F56, - PREFIX_EVEX_0F57, PREFIX_EVEX_0F58, PREFIX_EVEX_0F59, PREFIX_EVEX_0F5A, @@ -1440,38 +1082,8 @@ PREFIX_EVEX_0F5D, PREFIX_EVEX_0F5E, PREFIX_EVEX_0F5F, - PREFIX_EVEX_0F60, - PREFIX_EVEX_0F61, - PREFIX_EVEX_0F62, - PREFIX_EVEX_0F63, - PREFIX_EVEX_0F64, - PREFIX_EVEX_0F65, - PREFIX_EVEX_0F66, - PREFIX_EVEX_0F67, - PREFIX_EVEX_0F68, - PREFIX_EVEX_0F69, - PREFIX_EVEX_0F6A, - PREFIX_EVEX_0F6B, - PREFIX_EVEX_0F6C, - PREFIX_EVEX_0F6D, - PREFIX_EVEX_0F6E, PREFIX_EVEX_0F6F, PREFIX_EVEX_0F70, - PREFIX_EVEX_0F71_REG_2, - PREFIX_EVEX_0F71_REG_4, - PREFIX_EVEX_0F71_REG_6, - PREFIX_EVEX_0F72_REG_0, - PREFIX_EVEX_0F72_REG_1, - PREFIX_EVEX_0F72_REG_2, - PREFIX_EVEX_0F72_REG_4, - PREFIX_EVEX_0F72_REG_6, - PREFIX_EVEX_0F73_REG_2, - PREFIX_EVEX_0F73_REG_3, - PREFIX_EVEX_0F73_REG_6, - PREFIX_EVEX_0F73_REG_7, - PREFIX_EVEX_0F74, - PREFIX_EVEX_0F75, - PREFIX_EVEX_0F76, PREFIX_EVEX_0F78, PREFIX_EVEX_0F79, PREFIX_EVEX_0F7A, @@ -1479,72 +1091,13 @@ PREFIX_EVEX_0F7E, PREFIX_EVEX_0F7F, PREFIX_EVEX_0FC2, - PREFIX_EVEX_0FC4, - PREFIX_EVEX_0FC5, - PREFIX_EVEX_0FC6, - PREFIX_EVEX_0FD1, - PREFIX_EVEX_0FD2, - PREFIX_EVEX_0FD3, - PREFIX_EVEX_0FD4, - PREFIX_EVEX_0FD5, - PREFIX_EVEX_0FD6, - PREFIX_EVEX_0FD8, - PREFIX_EVEX_0FD9, - PREFIX_EVEX_0FDA, - PREFIX_EVEX_0FDB, - PREFIX_EVEX_0FDC, - PREFIX_EVEX_0FDD, - PREFIX_EVEX_0FDE, - PREFIX_EVEX_0FDF, - PREFIX_EVEX_0FE0, - PREFIX_EVEX_0FE1, - PREFIX_EVEX_0FE2, - PREFIX_EVEX_0FE3, - PREFIX_EVEX_0FE4, - PREFIX_EVEX_0FE5, PREFIX_EVEX_0FE6, - PREFIX_EVEX_0FE7, - PREFIX_EVEX_0FE8, - PREFIX_EVEX_0FE9, - PREFIX_EVEX_0FEA, - PREFIX_EVEX_0FEB, - PREFIX_EVEX_0FEC, - PREFIX_EVEX_0FED, - PREFIX_EVEX_0FEE, - PREFIX_EVEX_0FEF, - PREFIX_EVEX_0FF1, - PREFIX_EVEX_0FF2, - PREFIX_EVEX_0FF3, - PREFIX_EVEX_0FF4, - PREFIX_EVEX_0FF5, - PREFIX_EVEX_0FF6, - PREFIX_EVEX_0FF8, - PREFIX_EVEX_0FF9, - PREFIX_EVEX_0FFA, - PREFIX_EVEX_0FFB, - PREFIX_EVEX_0FFC, - PREFIX_EVEX_0FFD, - PREFIX_EVEX_0FFE, - PREFIX_EVEX_0F3800, - PREFIX_EVEX_0F3804, - PREFIX_EVEX_0F380B, - PREFIX_EVEX_0F380C, - PREFIX_EVEX_0F380D, PREFIX_EVEX_0F3810, PREFIX_EVEX_0F3811, PREFIX_EVEX_0F3812, PREFIX_EVEX_0F3813, PREFIX_EVEX_0F3814, PREFIX_EVEX_0F3815, - PREFIX_EVEX_0F3816, - PREFIX_EVEX_0F3818, - PREFIX_EVEX_0F3819, - PREFIX_EVEX_0F381A, - PREFIX_EVEX_0F381B, - PREFIX_EVEX_0F381C, - PREFIX_EVEX_0F381D, - PREFIX_EVEX_0F381E, - PREFIX_EVEX_0F381F, PREFIX_EVEX_0F3820, PREFIX_EVEX_0F3821, PREFIX_EVEX_0F3822, @@ -1556,192 +1109,30 @@ PREFIX_EVEX_0F3828, PREFIX_EVEX_0F3829, PREFIX_EVEX_0F382A, - PREFIX_EVEX_0F382B, - PREFIX_EVEX_0F382C, - PREFIX_EVEX_0F382D, PREFIX_EVEX_0F3830, PREFIX_EVEX_0F3831, PREFIX_EVEX_0F3832, PREFIX_EVEX_0F3833, PREFIX_EVEX_0F3834, PREFIX_EVEX_0F3835, - PREFIX_EVEX_0F3836, - PREFIX_EVEX_0F3837, PREFIX_EVEX_0F3838, PREFIX_EVEX_0F3839, PREFIX_EVEX_0F383A, - PREFIX_EVEX_0F383B, - PREFIX_EVEX_0F383C, - PREFIX_EVEX_0F383D, - PREFIX_EVEX_0F383E, - PREFIX_EVEX_0F383F, - PREFIX_EVEX_0F3840, - PREFIX_EVEX_0F3842, - PREFIX_EVEX_0F3843, - PREFIX_EVEX_0F3844, - PREFIX_EVEX_0F3845, - PREFIX_EVEX_0F3846, - PREFIX_EVEX_0F3847, - PREFIX_EVEX_0F384C, - PREFIX_EVEX_0F384D, - PREFIX_EVEX_0F384E, - PREFIX_EVEX_0F384F, - PREFIX_EVEX_0F3850, - PREFIX_EVEX_0F3851, PREFIX_EVEX_0F3852, PREFIX_EVEX_0F3853, - PREFIX_EVEX_0F3854, - PREFIX_EVEX_0F3855, - PREFIX_EVEX_0F3858, - PREFIX_EVEX_0F3859, - PREFIX_EVEX_0F385A, - PREFIX_EVEX_0F385B, - PREFIX_EVEX_0F3862, - PREFIX_EVEX_0F3863, - PREFIX_EVEX_0F3864, - PREFIX_EVEX_0F3865, - PREFIX_EVEX_0F3866, PREFIX_EVEX_0F3868, - PREFIX_EVEX_0F3870, - PREFIX_EVEX_0F3871, PREFIX_EVEX_0F3872, - PREFIX_EVEX_0F3873, - PREFIX_EVEX_0F3875, - PREFIX_EVEX_0F3876, - PREFIX_EVEX_0F3877, - PREFIX_EVEX_0F3878, - PREFIX_EVEX_0F3879, - PREFIX_EVEX_0F387A, - PREFIX_EVEX_0F387B, - PREFIX_EVEX_0F387C, - PREFIX_EVEX_0F387D, - PREFIX_EVEX_0F387E, - PREFIX_EVEX_0F387F, - PREFIX_EVEX_0F3883, - PREFIX_EVEX_0F3888, - PREFIX_EVEX_0F3889, - PREFIX_EVEX_0F388A, - PREFIX_EVEX_0F388B, - PREFIX_EVEX_0F388D, - PREFIX_EVEX_0F388F, - PREFIX_EVEX_0F3890, - PREFIX_EVEX_0F3891, - PREFIX_EVEX_0F3892, - PREFIX_EVEX_0F3893, - PREFIX_EVEX_0F3896, - PREFIX_EVEX_0F3897, - PREFIX_EVEX_0F3898, - PREFIX_EVEX_0F3899, PREFIX_EVEX_0F389A, PREFIX_EVEX_0F389B, - PREFIX_EVEX_0F389C, - PREFIX_EVEX_0F389D, - PREFIX_EVEX_0F389E, - PREFIX_EVEX_0F389F, - PREFIX_EVEX_0F38A0, - PREFIX_EVEX_0F38A1, - PREFIX_EVEX_0F38A2, - PREFIX_EVEX_0F38A3, - PREFIX_EVEX_0F38A6, - PREFIX_EVEX_0F38A7, - PREFIX_EVEX_0F38A8, - PREFIX_EVEX_0F38A9, PREFIX_EVEX_0F38AA, PREFIX_EVEX_0F38AB, - PREFIX_EVEX_0F38AC, - PREFIX_EVEX_0F38AD, - PREFIX_EVEX_0F38AE, - PREFIX_EVEX_0F38AF, - PREFIX_EVEX_0F38B4, - PREFIX_EVEX_0F38B5, - PREFIX_EVEX_0F38B6, - PREFIX_EVEX_0F38B7, - PREFIX_EVEX_0F38B8, - PREFIX_EVEX_0F38B9, - PREFIX_EVEX_0F38BA, - PREFIX_EVEX_0F38BB, - PREFIX_EVEX_0F38BC, - PREFIX_EVEX_0F38BD, - PREFIX_EVEX_0F38BE, - PREFIX_EVEX_0F38BF, - PREFIX_EVEX_0F38C4, - PREFIX_EVEX_0F38C6_REG_1, - PREFIX_EVEX_0F38C6_REG_2, - PREFIX_EVEX_0F38C6_REG_5, - PREFIX_EVEX_0F38C6_REG_6, - PREFIX_EVEX_0F38C7_REG_1, - PREFIX_EVEX_0F38C7_REG_2, - PREFIX_EVEX_0F38C7_REG_5, - PREFIX_EVEX_0F38C7_REG_6, - PREFIX_EVEX_0F38C8, - PREFIX_EVEX_0F38CA, - PREFIX_EVEX_0F38CB, - PREFIX_EVEX_0F38CC, - PREFIX_EVEX_0F38CD, - PREFIX_EVEX_0F38CF, - PREFIX_EVEX_0F38DC, - PREFIX_EVEX_0F38DD, - PREFIX_EVEX_0F38DE, - PREFIX_EVEX_0F38DF, - - PREFIX_EVEX_0F3A00, - PREFIX_EVEX_0F3A01, - PREFIX_EVEX_0F3A03, - PREFIX_EVEX_0F3A04, - PREFIX_EVEX_0F3A05, - PREFIX_EVEX_0F3A08, - PREFIX_EVEX_0F3A09, - PREFIX_EVEX_0F3A0A, - PREFIX_EVEX_0F3A0B, - PREFIX_EVEX_0F3A0F, - PREFIX_EVEX_0F3A14, - PREFIX_EVEX_0F3A15, - PREFIX_EVEX_0F3A16, - PREFIX_EVEX_0F3A17, - PREFIX_EVEX_0F3A18, - PREFIX_EVEX_0F3A19, - PREFIX_EVEX_0F3A1A, - PREFIX_EVEX_0F3A1B, - PREFIX_EVEX_0F3A1D, - PREFIX_EVEX_0F3A1E, - PREFIX_EVEX_0F3A1F, - PREFIX_EVEX_0F3A20, - PREFIX_EVEX_0F3A21, - PREFIX_EVEX_0F3A22, - PREFIX_EVEX_0F3A23, - PREFIX_EVEX_0F3A25, - PREFIX_EVEX_0F3A26, - PREFIX_EVEX_0F3A27, - PREFIX_EVEX_0F3A38, - PREFIX_EVEX_0F3A39, - PREFIX_EVEX_0F3A3A, - PREFIX_EVEX_0F3A3B, - PREFIX_EVEX_0F3A3E, - PREFIX_EVEX_0F3A3F, - PREFIX_EVEX_0F3A42, - PREFIX_EVEX_0F3A43, - PREFIX_EVEX_0F3A44, - PREFIX_EVEX_0F3A50, - PREFIX_EVEX_0F3A51, - PREFIX_EVEX_0F3A54, - PREFIX_EVEX_0F3A55, - PREFIX_EVEX_0F3A56, - PREFIX_EVEX_0F3A57, - PREFIX_EVEX_0F3A66, - PREFIX_EVEX_0F3A67, - PREFIX_EVEX_0F3A70, - PREFIX_EVEX_0F3A71, - PREFIX_EVEX_0F3A72, - PREFIX_EVEX_0F3A73, - PREFIX_EVEX_0F3ACE, - PREFIX_EVEX_0F3ACF }; enum { X86_64_06 = 0, X86_64_07, - X86_64_0D, + X86_64_0E, X86_64_16, X86_64_17, X86_64_1E, @@ -1758,6 +1149,8 @@ X86_64_6F, X86_64_82, X86_64_9A, + X86_64_C2, + X86_64_C3, X86_64_C4, X86_64_C5, X86_64_CE, @@ -1769,7 +1162,13 @@ X86_64_0F01_REG_0, X86_64_0F01_REG_1, X86_64_0F01_REG_2, - X86_64_0F01_REG_3 + X86_64_0F01_REG_3, + X86_64_0F24, + X86_64_0F26, + X86_64_VEX_0F3849, + X86_64_VEX_0F384B, + X86_64_VEX_0F385C, + X86_64_VEX_0F385E }; enum @@ -1803,11 +1202,11 @@ { VEX_LEN_0F12_P_0_M_0 = 0, VEX_LEN_0F12_P_0_M_1, - VEX_LEN_0F12_P_2, +#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, - VEX_LEN_0F16_P_2, +#define VEX_LEN_0F16_P_2_M_0 VEX_LEN_0F16_P_0_M_0 VEX_LEN_0F17_M_0, VEX_LEN_0F41_P_0, VEX_LEN_0F41_P_2, @@ -1825,8 +1224,8 @@ VEX_LEN_0F4A_P_2, VEX_LEN_0F4B_P_0, VEX_LEN_0F4B_P_2, - VEX_LEN_0F6E_P_2, - VEX_LEN_0F77_P_0, + VEX_LEN_0F6E, + VEX_LEN_0F77, VEX_LEN_0F7E_P_1, VEX_LEN_0F7E_P_2, VEX_LEN_0F90_P_0, @@ -1845,21 +1244,33 @@ VEX_LEN_0F99_P_2, VEX_LEN_0FAE_R_2_M_0, VEX_LEN_0FAE_R_3_M_0, - VEX_LEN_0FC4_P_2, - VEX_LEN_0FC5_P_2, - VEX_LEN_0FD6_P_2, - VEX_LEN_0FF7_P_2, - VEX_LEN_0F3816_P_2, - VEX_LEN_0F3819_P_2, - VEX_LEN_0F381A_P_2_M_0, - VEX_LEN_0F3836_P_2, - VEX_LEN_0F3841_P_2, - VEX_LEN_0F385A_P_2_M_0, - VEX_LEN_0F38DB_P_2, - VEX_LEN_0F38F2_P_0, - VEX_LEN_0F38F3_R_1_P_0, - VEX_LEN_0F38F3_R_2_P_0, - VEX_LEN_0F38F3_R_3_P_0, + 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_0F3836, + VEX_LEN_0F3841, + VEX_LEN_0F3849_X86_64_P_0_W_0_M_0, + VEX_LEN_0F3849_X86_64_P_0_W_0_M_1_REG_0_RM_0, + VEX_LEN_0F3849_X86_64_P_2_W_0_M_0, + VEX_LEN_0F3849_X86_64_P_3_W_0_M_0, + VEX_LEN_0F384B_X86_64_P_1_W_0_M_0, + VEX_LEN_0F384B_X86_64_P_2_W_0_M_0, + VEX_LEN_0F384B_X86_64_P_3_W_0_M_0, + VEX_LEN_0F385A_M_0, + VEX_LEN_0F385C_X86_64_P_1_W_0_M_0, + VEX_LEN_0F385E_X86_64_P_0_W_0_M_0, + VEX_LEN_0F385E_X86_64_P_1_W_0_M_0, + VEX_LEN_0F385E_X86_64_P_2_W_0_M_0, + VEX_LEN_0F385E_X86_64_P_3_W_0_M_0, + VEX_LEN_0F38DB, + VEX_LEN_0F38F2, + VEX_LEN_0F38F3_R_1, + VEX_LEN_0F38F3_R_2, + VEX_LEN_0F38F3_R_3, VEX_LEN_0F38F5_P_0, VEX_LEN_0F38F5_P_1, VEX_LEN_0F38F5_P_3, @@ -1868,40 +1279,49 @@ VEX_LEN_0F38F7_P_1, VEX_LEN_0F38F7_P_2, VEX_LEN_0F38F7_P_3, - VEX_LEN_0F3A00_P_2, - VEX_LEN_0F3A01_P_2, - VEX_LEN_0F3A06_P_2, - VEX_LEN_0F3A14_P_2, - VEX_LEN_0F3A15_P_2, - VEX_LEN_0F3A16_P_2, - VEX_LEN_0F3A17_P_2, - VEX_LEN_0F3A18_P_2, - VEX_LEN_0F3A19_P_2, - VEX_LEN_0F3A20_P_2, - VEX_LEN_0F3A21_P_2, - VEX_LEN_0F3A22_P_2, - VEX_LEN_0F3A30_P_2, - VEX_LEN_0F3A31_P_2, - VEX_LEN_0F3A32_P_2, - VEX_LEN_0F3A33_P_2, - VEX_LEN_0F3A38_P_2, - VEX_LEN_0F3A39_P_2, - VEX_LEN_0F3A41_P_2, - VEX_LEN_0F3A46_P_2, - VEX_LEN_0F3A60_P_2, - VEX_LEN_0F3A61_P_2, - VEX_LEN_0F3A62_P_2, - VEX_LEN_0F3A63_P_2, - VEX_LEN_0F3A6A_P_2, - VEX_LEN_0F3A6B_P_2, - VEX_LEN_0F3A6E_P_2, - VEX_LEN_0F3A6F_P_2, - VEX_LEN_0F3A7A_P_2, - VEX_LEN_0F3A7B_P_2, - VEX_LEN_0F3A7E_P_2, - VEX_LEN_0F3A7F_P_2, - VEX_LEN_0F3ADF_P_2, + VEX_LEN_0F3A00, + VEX_LEN_0F3A01, + VEX_LEN_0F3A06, + VEX_LEN_0F3A14, + VEX_LEN_0F3A15, + VEX_LEN_0F3A16, + VEX_LEN_0F3A17, + VEX_LEN_0F3A18, + VEX_LEN_0F3A19, + VEX_LEN_0F3A20, + VEX_LEN_0F3A21, + VEX_LEN_0F3A22, + VEX_LEN_0F3A30, + VEX_LEN_0F3A31, + VEX_LEN_0F3A32, + VEX_LEN_0F3A33, + VEX_LEN_0F3A38, + VEX_LEN_0F3A39, + VEX_LEN_0F3A41, + VEX_LEN_0F3A46, + VEX_LEN_0F3A60, + VEX_LEN_0F3A61, + VEX_LEN_0F3A62, + VEX_LEN_0F3A63, + VEX_LEN_0F3ADF, VEX_LEN_0F3AF0_P_3, + 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, @@ -1910,58 +1330,102 @@ VEX_LEN_0FXOP_08_ED, VEX_LEN_0FXOP_08_EE, VEX_LEN_0FXOP_08_EF, - VEX_LEN_0FXOP_09_80, - VEX_LEN_0FXOP_09_81 + 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, }; enum { - EVEX_LEN_0F6E_P_2 = 0, + EVEX_LEN_0F6E = 0, EVEX_LEN_0F7E_P_1, EVEX_LEN_0F7E_P_2, - EVEX_LEN_0FD6_P_2, - EVEX_LEN_0F3819_P_2_W_0, - EVEX_LEN_0F3819_P_2_W_1, - EVEX_LEN_0F381A_P_2_W_0, - EVEX_LEN_0F381A_P_2_W_1, - EVEX_LEN_0F381B_P_2_W_0, - EVEX_LEN_0F381B_P_2_W_1, - EVEX_LEN_0F385A_P_2_W_0, - EVEX_LEN_0F385A_P_2_W_1, - EVEX_LEN_0F385B_P_2_W_0, - EVEX_LEN_0F385B_P_2_W_1, - EVEX_LEN_0F38C6_REG_1_PREFIX_2, - EVEX_LEN_0F38C6_REG_2_PREFIX_2, - EVEX_LEN_0F38C6_REG_5_PREFIX_2, - EVEX_LEN_0F38C6_REG_6_PREFIX_2, - EVEX_LEN_0F38C7_R_1_P_2_W_0, - EVEX_LEN_0F38C7_R_1_P_2_W_1, - EVEX_LEN_0F38C7_R_2_P_2_W_0, - EVEX_LEN_0F38C7_R_2_P_2_W_1, - EVEX_LEN_0F38C7_R_5_P_2_W_0, - EVEX_LEN_0F38C7_R_5_P_2_W_1, - EVEX_LEN_0F38C7_R_6_P_2_W_0, - EVEX_LEN_0F38C7_R_6_P_2_W_1, - EVEX_LEN_0F3A18_P_2_W_0, - EVEX_LEN_0F3A18_P_2_W_1, - EVEX_LEN_0F3A19_P_2_W_0, - EVEX_LEN_0F3A19_P_2_W_1, - EVEX_LEN_0F3A1A_P_2_W_0, - EVEX_LEN_0F3A1A_P_2_W_1, - EVEX_LEN_0F3A1B_P_2_W_0, - EVEX_LEN_0F3A1B_P_2_W_1, - EVEX_LEN_0F3A23_P_2_W_0, - EVEX_LEN_0F3A23_P_2_W_1, - EVEX_LEN_0F3A38_P_2_W_0, - EVEX_LEN_0F3A38_P_2_W_1, - EVEX_LEN_0F3A39_P_2_W_0, - EVEX_LEN_0F3A39_P_2_W_1, - EVEX_LEN_0F3A3A_P_2_W_0, - EVEX_LEN_0F3A3A_P_2_W_1, - EVEX_LEN_0F3A3B_P_2_W_0, - EVEX_LEN_0F3A3B_P_2_W_1, - EVEX_LEN_0F3A43_P_2_W_0, - EVEX_LEN_0F3A43_P_2_W_1 + EVEX_LEN_0FC4, + EVEX_LEN_0FC5, + EVEX_LEN_0FD6, + EVEX_LEN_0F3816, + EVEX_LEN_0F3819_W_0, + EVEX_LEN_0F3819_W_1, + EVEX_LEN_0F381A_W_0_M_0, + EVEX_LEN_0F381A_W_1_M_0, + EVEX_LEN_0F381B_W_0_M_0, + EVEX_LEN_0F381B_W_1_M_0, + EVEX_LEN_0F3836, + EVEX_LEN_0F385A_W_0_M_0, + EVEX_LEN_0F385A_W_1_M_0, + EVEX_LEN_0F385B_W_0_M_0, + EVEX_LEN_0F385B_W_1_M_0, + EVEX_LEN_0F38C6_R_1_M_0, + EVEX_LEN_0F38C6_R_2_M_0, + EVEX_LEN_0F38C6_R_5_M_0, + EVEX_LEN_0F38C6_R_6_M_0, + EVEX_LEN_0F38C7_R_1_M_0_W_0, + EVEX_LEN_0F38C7_R_1_M_0_W_1, + EVEX_LEN_0F38C7_R_2_M_0_W_0, + EVEX_LEN_0F38C7_R_2_M_0_W_1, + EVEX_LEN_0F38C7_R_5_M_0_W_0, + EVEX_LEN_0F38C7_R_5_M_0_W_1, + EVEX_LEN_0F38C7_R_6_M_0_W_0, + EVEX_LEN_0F38C7_R_6_M_0_W_1, + EVEX_LEN_0F3A00_W_1, + EVEX_LEN_0F3A01_W_1, + EVEX_LEN_0F3A14, + EVEX_LEN_0F3A15, + EVEX_LEN_0F3A16, + EVEX_LEN_0F3A17, + EVEX_LEN_0F3A18_W_0, + EVEX_LEN_0F3A18_W_1, + EVEX_LEN_0F3A19_W_0, + EVEX_LEN_0F3A19_W_1, + EVEX_LEN_0F3A1A_W_0, + EVEX_LEN_0F3A1A_W_1, + EVEX_LEN_0F3A1B_W_0, + EVEX_LEN_0F3A1B_W_1, + EVEX_LEN_0F3A20, + EVEX_LEN_0F3A21_W_0, + EVEX_LEN_0F3A22, + EVEX_LEN_0F3A23_W_0, + EVEX_LEN_0F3A23_W_1, + EVEX_LEN_0F3A38_W_0, + EVEX_LEN_0F3A38_W_1, + EVEX_LEN_0F3A39_W_0, + EVEX_LEN_0F3A39_W_1, + EVEX_LEN_0F3A3A_W_0, + EVEX_LEN_0F3A3A_W_1, + EVEX_LEN_0F3A3B_W_0, + EVEX_LEN_0F3A3B_W_1, + EVEX_LEN_0F3A43_W_0, + EVEX_LEN_0F3A43_W_1 }; enum @@ -1994,104 +1458,116 @@ VEX_W_0F98_P_2_LEN_0, VEX_W_0F99_P_0_LEN_0, VEX_W_0F99_P_2_LEN_0, - VEX_W_0F380C_P_2, - VEX_W_0F380D_P_2, - VEX_W_0F380E_P_2, - VEX_W_0F380F_P_2, - VEX_W_0F3816_P_2, - VEX_W_0F3818_P_2, - VEX_W_0F3819_P_2, - VEX_W_0F381A_P_2_M_0, - VEX_W_0F382C_P_2_M_0, - VEX_W_0F382D_P_2_M_0, - VEX_W_0F382E_P_2_M_0, - VEX_W_0F382F_P_2_M_0, - VEX_W_0F3836_P_2, - VEX_W_0F3846_P_2, - VEX_W_0F3858_P_2, - VEX_W_0F3859_P_2, - VEX_W_0F385A_P_2_M_0, - VEX_W_0F3878_P_2, - VEX_W_0F3879_P_2, - VEX_W_0F38CF_P_2, - VEX_W_0F3A00_P_2, - VEX_W_0F3A01_P_2, - VEX_W_0F3A02_P_2, - VEX_W_0F3A04_P_2, - VEX_W_0F3A05_P_2, - VEX_W_0F3A06_P_2, - VEX_W_0F3A18_P_2, - VEX_W_0F3A19_P_2, - VEX_W_0F3A30_P_2_LEN_0, - VEX_W_0F3A31_P_2_LEN_0, - VEX_W_0F3A32_P_2_LEN_0, - VEX_W_0F3A33_P_2_LEN_0, - VEX_W_0F3A38_P_2, - VEX_W_0F3A39_P_2, - VEX_W_0F3A46_P_2, - VEX_W_0F3A48_P_2, - VEX_W_0F3A49_P_2, - VEX_W_0F3A4A_P_2, - VEX_W_0F3A4B_P_2, - VEX_W_0F3A4C_P_2, - VEX_W_0F3ACE_P_2, - VEX_W_0F3ACF_P_2, + VEX_W_0F380C, + VEX_W_0F380D, + VEX_W_0F380E, + VEX_W_0F380F, + VEX_W_0F3813, + 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_0F3836, + VEX_W_0F3846, + VEX_W_0F3849_X86_64_P_0, + VEX_W_0F3849_X86_64_P_2, + VEX_W_0F3849_X86_64_P_3, + VEX_W_0F384B_X86_64_P_1, + VEX_W_0F384B_X86_64_P_2, + VEX_W_0F384B_X86_64_P_3, + VEX_W_0F3858, + VEX_W_0F3859, + VEX_W_0F385A_M_0_L_0, + VEX_W_0F385C_X86_64_P_1, + VEX_W_0F385E_X86_64_P_0, + VEX_W_0F385E_X86_64_P_1, + VEX_W_0F385E_X86_64_P_2, + VEX_W_0F385E_X86_64_P_3, + VEX_W_0F3878, + VEX_W_0F3879, + VEX_W_0F38CF, + VEX_W_0F3A00_L_1, + VEX_W_0F3A01_L_1, + VEX_W_0F3A02, + VEX_W_0F3A04, + VEX_W_0F3A05, + VEX_W_0F3A06_L_1, + VEX_W_0F3A18_L_1, + VEX_W_0F3A19_L_1, + VEX_W_0F3A1D, + VEX_W_0F3A38_L_1, + VEX_W_0F3A39_L_1, + VEX_W_0F3A46_L_1, + VEX_W_0F3A4A, + VEX_W_0F3A4B, + VEX_W_0F3A4C, + VEX_W_0F3ACE, + VEX_W_0F3ACF, + + 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_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, - EVEX_W_0F10_P_0, EVEX_W_0F10_P_1, - EVEX_W_0F10_P_2, EVEX_W_0F10_P_3, - EVEX_W_0F11_P_0, EVEX_W_0F11_P_1, - EVEX_W_0F11_P_2, EVEX_W_0F11_P_3, - EVEX_W_0F12_P_0_M_0, EVEX_W_0F12_P_0_M_1, EVEX_W_0F12_P_1, - EVEX_W_0F12_P_2, EVEX_W_0F12_P_3, - EVEX_W_0F13_P_0, - EVEX_W_0F13_P_2, - EVEX_W_0F14_P_0, - EVEX_W_0F14_P_2, - EVEX_W_0F15_P_0, - EVEX_W_0F15_P_2, - EVEX_W_0F16_P_0_M_0, EVEX_W_0F16_P_0_M_1, EVEX_W_0F16_P_1, - EVEX_W_0F16_P_2, - EVEX_W_0F17_P_0, - EVEX_W_0F17_P_2, - EVEX_W_0F28_P_0, - EVEX_W_0F28_P_2, - EVEX_W_0F29_P_0, - EVEX_W_0F29_P_2, EVEX_W_0F2A_P_3, - EVEX_W_0F2B_P_0, - EVEX_W_0F2B_P_2, - EVEX_W_0F2E_P_0, - EVEX_W_0F2E_P_2, - EVEX_W_0F2F_P_0, - EVEX_W_0F2F_P_2, - EVEX_W_0F51_P_0, EVEX_W_0F51_P_1, - EVEX_W_0F51_P_2, EVEX_W_0F51_P_3, - EVEX_W_0F54_P_0, - EVEX_W_0F54_P_2, - EVEX_W_0F55_P_0, - EVEX_W_0F55_P_2, - EVEX_W_0F56_P_0, - EVEX_W_0F56_P_2, - EVEX_W_0F57_P_0, - EVEX_W_0F57_P_2, - EVEX_W_0F58_P_0, EVEX_W_0F58_P_1, - EVEX_W_0F58_P_2, EVEX_W_0F58_P_3, - EVEX_W_0F59_P_0, EVEX_W_0F59_P_1, - EVEX_W_0F59_P_2, EVEX_W_0F59_P_3, EVEX_W_0F5A_P_0, EVEX_W_0F5A_P_1, @@ -2100,37 +1576,29 @@ EVEX_W_0F5B_P_0, EVEX_W_0F5B_P_1, EVEX_W_0F5B_P_2, - EVEX_W_0F5C_P_0, EVEX_W_0F5C_P_1, - EVEX_W_0F5C_P_2, EVEX_W_0F5C_P_3, - EVEX_W_0F5D_P_0, EVEX_W_0F5D_P_1, - EVEX_W_0F5D_P_2, EVEX_W_0F5D_P_3, - EVEX_W_0F5E_P_0, EVEX_W_0F5E_P_1, - EVEX_W_0F5E_P_2, EVEX_W_0F5E_P_3, - EVEX_W_0F5F_P_0, EVEX_W_0F5F_P_1, - EVEX_W_0F5F_P_2, EVEX_W_0F5F_P_3, - EVEX_W_0F62_P_2, - EVEX_W_0F66_P_2, - EVEX_W_0F6A_P_2, - EVEX_W_0F6B_P_2, - EVEX_W_0F6C_P_2, - EVEX_W_0F6D_P_2, + EVEX_W_0F62, + EVEX_W_0F66, + EVEX_W_0F6A, + EVEX_W_0F6B, + EVEX_W_0F6C, + EVEX_W_0F6D, EVEX_W_0F6F_P_1, EVEX_W_0F6F_P_2, EVEX_W_0F6F_P_3, EVEX_W_0F70_P_2, - EVEX_W_0F72_R_2_P_2, - EVEX_W_0F72_R_6_P_2, - EVEX_W_0F73_R_2_P_2, - EVEX_W_0F73_R_6_P_2, - EVEX_W_0F76_P_2, + EVEX_W_0F72_R_2, + EVEX_W_0F72_R_6, + EVEX_W_0F73_R_2, + EVEX_W_0F73_R_6, + EVEX_W_0F76, EVEX_W_0F78_P_0, EVEX_W_0F78_P_2, EVEX_W_0F79_P_0, @@ -2144,28 +1612,23 @@ EVEX_W_0F7F_P_1, EVEX_W_0F7F_P_2, EVEX_W_0F7F_P_3, - EVEX_W_0FC2_P_0, EVEX_W_0FC2_P_1, - EVEX_W_0FC2_P_2, EVEX_W_0FC2_P_3, - EVEX_W_0FC6_P_0, - EVEX_W_0FC6_P_2, - EVEX_W_0FD2_P_2, - EVEX_W_0FD3_P_2, - EVEX_W_0FD4_P_2, - EVEX_W_0FD6_P_2, + EVEX_W_0FD2, + EVEX_W_0FD3, + EVEX_W_0FD4, + EVEX_W_0FD6_L_0, EVEX_W_0FE6_P_1, EVEX_W_0FE6_P_2, EVEX_W_0FE6_P_3, - EVEX_W_0FE7_P_2, - EVEX_W_0FF2_P_2, - EVEX_W_0FF3_P_2, - EVEX_W_0FF4_P_2, - EVEX_W_0FFA_P_2, - EVEX_W_0FFB_P_2, - EVEX_W_0FFE_P_2, - EVEX_W_0F380C_P_2, - EVEX_W_0F380D_P_2, + EVEX_W_0FE7, + EVEX_W_0FF2, + EVEX_W_0FF3, + EVEX_W_0FF4, + EVEX_W_0FFA, + EVEX_W_0FFB, + EVEX_W_0FFE, + EVEX_W_0F380D, EVEX_W_0F3810_P_1, EVEX_W_0F3810_P_2, EVEX_W_0F3811_P_1, @@ -2176,12 +1639,11 @@ EVEX_W_0F3813_P_2, EVEX_W_0F3814_P_1, EVEX_W_0F3815_P_1, - EVEX_W_0F3818_P_2, - EVEX_W_0F3819_P_2, - EVEX_W_0F381A_P_2, - EVEX_W_0F381B_P_2, - EVEX_W_0F381E_P_2, - EVEX_W_0F381F_P_2, + EVEX_W_0F3819, + EVEX_W_0F381A, + EVEX_W_0F381B, + EVEX_W_0F381E, + EVEX_W_0F381F, EVEX_W_0F3820_P_1, EVEX_W_0F3821_P_1, EVEX_W_0F3822_P_1, @@ -2189,15 +1651,11 @@ EVEX_W_0F3824_P_1, EVEX_W_0F3825_P_1, EVEX_W_0F3825_P_2, - EVEX_W_0F3826_P_1, - EVEX_W_0F3826_P_2, - EVEX_W_0F3828_P_1, EVEX_W_0F3828_P_2, - EVEX_W_0F3829_P_1, EVEX_W_0F3829_P_2, EVEX_W_0F382A_P_1, EVEX_W_0F382A_P_2, - EVEX_W_0F382B_P_2, + EVEX_W_0F382B, EVEX_W_0F3830_P_1, EVEX_W_0F3831_P_1, EVEX_W_0F3832_P_1, @@ -2205,80 +1663,49 @@ EVEX_W_0F3834_P_1, EVEX_W_0F3835_P_1, EVEX_W_0F3835_P_2, - EVEX_W_0F3837_P_2, - EVEX_W_0F3838_P_1, - EVEX_W_0F3839_P_1, + EVEX_W_0F3837, EVEX_W_0F383A_P_1, - EVEX_W_0F3840_P_2, EVEX_W_0F3852_P_1, - EVEX_W_0F3854_P_2, - EVEX_W_0F3855_P_2, - EVEX_W_0F3858_P_2, - EVEX_W_0F3859_P_2, - EVEX_W_0F385A_P_2, - EVEX_W_0F385B_P_2, - EVEX_W_0F3862_P_2, - EVEX_W_0F3863_P_2, - EVEX_W_0F3866_P_2, - EVEX_W_0F3868_P_3, - EVEX_W_0F3870_P_2, - EVEX_W_0F3871_P_2, + EVEX_W_0F3859, + EVEX_W_0F385A, + EVEX_W_0F385B, + EVEX_W_0F3870, EVEX_W_0F3872_P_1, EVEX_W_0F3872_P_2, EVEX_W_0F3872_P_3, - EVEX_W_0F3873_P_2, - EVEX_W_0F3875_P_2, - EVEX_W_0F3878_P_2, - EVEX_W_0F3879_P_2, - EVEX_W_0F387A_P_2, - EVEX_W_0F387B_P_2, - EVEX_W_0F387D_P_2, - EVEX_W_0F3883_P_2, - EVEX_W_0F388D_P_2, - EVEX_W_0F3891_P_2, - EVEX_W_0F3893_P_2, - EVEX_W_0F38A1_P_2, - EVEX_W_0F38A3_P_2, - EVEX_W_0F38C7_R_1_P_2, - EVEX_W_0F38C7_R_2_P_2, - EVEX_W_0F38C7_R_5_P_2, - EVEX_W_0F38C7_R_6_P_2, - - EVEX_W_0F3A00_P_2, - EVEX_W_0F3A01_P_2, - EVEX_W_0F3A04_P_2, - EVEX_W_0F3A05_P_2, - EVEX_W_0F3A08_P_2, - EVEX_W_0F3A09_P_2, - EVEX_W_0F3A0A_P_2, - EVEX_W_0F3A0B_P_2, - EVEX_W_0F3A18_P_2, - EVEX_W_0F3A19_P_2, - EVEX_W_0F3A1A_P_2, - EVEX_W_0F3A1B_P_2, - EVEX_W_0F3A1D_P_2, - EVEX_W_0F3A21_P_2, - EVEX_W_0F3A23_P_2, - EVEX_W_0F3A38_P_2, - EVEX_W_0F3A39_P_2, - EVEX_W_0F3A3A_P_2, - EVEX_W_0F3A3B_P_2, - EVEX_W_0F3A3E_P_2, - EVEX_W_0F3A3F_P_2, - EVEX_W_0F3A42_P_2, - EVEX_W_0F3A43_P_2, - EVEX_W_0F3A50_P_2, - EVEX_W_0F3A51_P_2, - EVEX_W_0F3A56_P_2, - EVEX_W_0F3A57_P_2, - EVEX_W_0F3A66_P_2, - EVEX_W_0F3A67_P_2, - EVEX_W_0F3A70_P_2, - EVEX_W_0F3A71_P_2, - EVEX_W_0F3A72_P_2, - EVEX_W_0F3A73_P_2, - EVEX_W_0F3ACE_P_2, - EVEX_W_0F3ACF_P_2 + EVEX_W_0F387A, + EVEX_W_0F387B, + EVEX_W_0F3883, + EVEX_W_0F3891, + EVEX_W_0F3893, + EVEX_W_0F38A1, + EVEX_W_0F38A3, + EVEX_W_0F38C7_R_1_M_0, + EVEX_W_0F38C7_R_2_M_0, + EVEX_W_0F38C7_R_5_M_0, + EVEX_W_0F38C7_R_6_M_0, + + EVEX_W_0F3A00, + EVEX_W_0F3A01, + EVEX_W_0F3A05, + EVEX_W_0F3A08, + EVEX_W_0F3A09, + EVEX_W_0F3A0A, + EVEX_W_0F3A0B, + EVEX_W_0F3A18, + EVEX_W_0F3A19, + EVEX_W_0F3A1A, + EVEX_W_0F3A1B, + EVEX_W_0F3A21, + EVEX_W_0F3A23, + EVEX_W_0F3A38, + EVEX_W_0F3A39, + EVEX_W_0F3A3A, + EVEX_W_0F3A3B, + EVEX_W_0F3A42, + EVEX_W_0F3A43, + EVEX_W_0F3A70, + EVEX_W_0F3A72, }; typedef void (*op_rtn) (int bytemode, int sizeflag); @@ -2304,39 +1731,34 @@ 'F' => print 'w' or 'l' depending on address size prefix (loop insns) 'G' => print 'w' or 'l' depending on operand size prefix (i/o insns) 'H' => print ",pt" or ",pn" branch hint - 'I' => honor following macro letter even in Intel mode (implemented only - for some of the macro letters) - 'J' => print 'l' + 'I' unused. + 'J' unused. 'K' => print 'd' or 'q' if rex prefix is present. - 'L' => print 'l' if suffix_always is true + 'L' unused. 'M' => print 'r' if intel_mnemonic is false. 'N' => print 'n' if instruction has no wait "prefix" 'O' => print 'd' or 'o' (or 'q' in Intel mode) - 'P' => print 'w', 'l' or 'q' if instruction has an operand size prefix, - or suffix_always is true. print 'q' if rex prefix is present. + 'P' => behave as 'T' except with register operand outside of suffix_always + mode 'Q' => print 'w', 'l' or 'q' for memory operand or suffix_always is true 'R' => print 'w', 'l' or 'q' ('d' for 'l' and 'e' in Intel mode) 'S' => print 'w', 'l' or 'q' if suffix_always is true - 'T' => print 'q' in 64bit mode if instruction has no operand size - prefix and behave as 'P' otherwise - 'U' => print 'q' in 64bit mode if instruction has no operand size - prefix and behave as 'Q' otherwise - 'V' => print 'q' in 64bit mode if instruction has no operand size - prefix and behave as 'S' otherwise + 'T' => print 'w', 'l'/'d', or 'q' if instruction has an operand size + prefix or if suffix_always is true. + 'U' unused. + 'V' unused. 'W' => print 'b', 'w' or 'l' ('d' in Intel mode) 'X' => print 's', 'd' depending on data16 prefix (for XMM) 'Y' unused. - 'Z' => print 'q' in 64bit mode and behave as 'L' otherwise + '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. - '^' => print 'w' or 'l' depending on operand size prefix or - suffix_always is true (lcall/ljmp). - '@' => print 'q' for Intel64 ISA, 'w' or 'q' for AMD64 ISA depending - on operand size prefix. - '&' => print 'q' in 64bit mode for Intel64 ISA or if instruction - has no operand size prefix for AMD64 ISA, behave as 'P' - otherwise + '^' => print 'w', 'l', or 'q' (Intel64 ISA only) depending on operand size + prefix or suffix_always is true (lcall/ljmp). + '@' => in 64bit mode for Intel64 ISA or if instruction + has no operand sizing prefix, print 'q' if suffix_always is true or + nothing otherwise; behave as 'P' in all other cases 2 upper case letter macros: "XY" => print 'x' or 'y' if suffix_always is true or no register @@ -2344,12 +1766,14 @@ "XZ" => print 'x', 'y', or 'z' if suffix_always is true or no register operands and no broadcast. "XW" => print 's', 'd' depending on the VEX.W bit (for FMA) - "LQ" => print 'l' ('d' in Intel mode) or 'q' for memory operand - or suffix_always is true + "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. "LB" => print "abs" in 64bit mode and behave as 'B' otherwise "LS" => print "abs" in 64bit mode and behave as 'S' otherwise "LV" => print "abs" for 64bit operand and behave as 'S' otherwise - "LW" => print 'd', 'q' depending on the VEX.W bit + "DQ" => print 'd' or 'q' depending on the VEX.W bit + "BW" => print 'b' or 'w' depending on the VEX.W bit "LP" => print 'w' or 'l' ('d' in Intel mode) if instruction has an operand size prefix, or suffix_always is true. print 'q' if rex prefix is present. @@ -2377,7 +1801,7 @@ { "orS", { Gv, EvS }, 0 }, { "orB", { AL, Ib }, 0 }, { "orS", { eAX, Iv }, 0 }, - { X86_64_TABLE (X86_64_0D) }, + { X86_64_TABLE (X86_64_0E) }, { Bad_Opcode }, /* 0x0f extended opcode escape */ /* 10 */ { "adcB", { Ebh1, Gb }, 0 }, @@ -2452,23 +1876,23 @@ { "dec{S|}", { RMeSI }, 0 }, { "dec{S|}", { RMeDI }, 0 }, /* 50 */ - { "pushV", { RMrAX }, 0 }, - { "pushV", { RMrCX }, 0 }, - { "pushV", { RMrDX }, 0 }, - { "pushV", { RMrBX }, 0 }, - { "pushV", { RMrSP }, 0 }, - { "pushV", { RMrBP }, 0 }, - { "pushV", { RMrSI }, 0 }, - { "pushV", { RMrDI }, 0 }, + { "push{!P|}", { RMrAX }, 0 }, + { "push{!P|}", { RMrCX }, 0 }, + { "push{!P|}", { RMrDX }, 0 }, + { "push{!P|}", { RMrBX }, 0 }, + { "push{!P|}", { RMrSP }, 0 }, + { "push{!P|}", { RMrBP }, 0 }, + { "push{!P|}", { RMrSI }, 0 }, + { "push{!P|}", { RMrDI }, 0 }, /* 58 */ - { "popV", { RMrAX }, 0 }, - { "popV", { RMrCX }, 0 }, - { "popV", { RMrDX }, 0 }, - { "popV", { RMrBX }, 0 }, - { "popV", { RMrSP }, 0 }, - { "popV", { RMrBP }, 0 }, - { "popV", { RMrSI }, 0 }, - { "popV", { RMrDI }, 0 }, + { "pop{!P|}", { RMrAX }, 0 }, + { "pop{!P|}", { RMrCX }, 0 }, + { "pop{!P|}", { RMrDX }, 0 }, + { "pop{!P|}", { RMrBX }, 0 }, + { "pop{!P|}", { RMrSP }, 0 }, + { "pop{!P|}", { RMrBP }, 0 }, + { "pop{!P|}", { RMrSI }, 0 }, + { "pop{!P|}", { RMrDI }, 0 }, /* 60 */ { X86_64_TABLE (X86_64_60) }, { X86_64_TABLE (X86_64_61) }, @@ -2479,9 +1903,9 @@ { Bad_Opcode }, /* op size prefix */ { Bad_Opcode }, /* adr size prefix */ /* 68 */ - { "pushT", { sIv }, 0 }, + { "pushP", { sIv }, 0 }, { "imulS", { Gv, Ev, Iv }, 0 }, - { "pushT", { sIbT }, 0 }, + { "pushP", { sIbT }, 0 }, { "imulS", { Gv, Ev, sIb }, 0 }, { "ins{b|}", { Ybr, indirDX }, 0 }, { X86_64_TABLE (X86_64_6D) }, @@ -2537,8 +1961,8 @@ { "cR{t|}O", { XX }, 0 }, { X86_64_TABLE (X86_64_9A) }, { Bad_Opcode }, /* fwait */ - { "pushfT", { XX }, 0 }, - { "popfT", { XX }, 0 }, + { "pushfP", { XX }, 0 }, + { "popfP", { XX }, 0 }, { "sahf", { XX }, 0 }, { "lahf", { XX }, 0 }, /* a0 */ @@ -2580,17 +2004,17 @@ /* c0 */ { REG_TABLE (REG_C0) }, { REG_TABLE (REG_C1) }, - { "retT", { Iw, BND }, 0 }, - { "retT", { BND }, 0 }, + { X86_64_TABLE (X86_64_C2) }, + { X86_64_TABLE (X86_64_C3) }, { X86_64_TABLE (X86_64_C4) }, { X86_64_TABLE (X86_64_C5) }, { REG_TABLE (REG_C6) }, { REG_TABLE (REG_C7) }, /* c8 */ - { "enterT", { Iw, Ib }, 0 }, - { "leaveT", { XX }, 0 }, - { "Jret{|f}P", { Iw }, 0 }, - { "Jret{|f}P", { XX }, 0 }, + { "enterP", { Iw, Ib }, 0 }, + { "leaveP", { XX }, 0 }, + { "{l|}ret{|f}%LP", { Iw }, 0 }, + { "{l|}ret{|f}%LP", { XX }, 0 }, { "int3", { XX }, 0 }, { "int", { Ib }, 0 }, { X86_64_TABLE (X86_64_CE) }, @@ -2660,7 +2084,7 @@ { Bad_Opcode }, { "syscall", { XX }, 0 }, { "clts", { XX }, 0 }, - { "sysret%LP", { XX }, 0 }, + { "sysret%LQ", { XX }, 0 }, /* 08 */ { "invd", { XX }, 0 }, { PREFIX_TABLE (PREFIX_0F09) }, @@ -2689,13 +2113,13 @@ { PREFIX_TABLE (PREFIX_0F1E) }, { "nopQ", { Ev }, 0 }, /* 20 */ - { "movZ", { Rm, Cm }, 0 }, - { "movZ", { Rm, Dm }, 0 }, - { "movZ", { Cm, Rm }, 0 }, - { "movZ", { Dm, Rm }, 0 }, - { MOD_TABLE (MOD_0F24) }, + { "movZ", { Em, Cm }, 0 }, + { "movZ", { Em, Dm }, 0 }, + { "movZ", { Cm, Em }, 0 }, + { "movZ", { Dm, Em }, 0 }, + { X86_64_TABLE (X86_64_0F24) }, { Bad_Opcode }, - { MOD_TABLE (MOD_0F26) }, + { X86_64_TABLE (X86_64_0F26) }, { Bad_Opcode }, /* 28 */ { "movapX", { XM, EXx }, PREFIX_OPCODE }, @@ -2711,8 +2135,8 @@ { "rdtsc", { XX }, 0 }, { "rdmsr", { XX }, 0 }, { "rdpmc", { XX }, 0 }, - { "sysenter", { XX }, 0 }, - { "sysexit", { XX }, 0 }, + { "sysenter", { SEP }, 0 }, + { "sysexit", { SEP }, 0 }, { Bad_Opcode }, { "getsec", { XX }, 0 }, /* 38 */ @@ -2743,7 +2167,7 @@ { "cmovleS", { Gv, Ev }, 0 }, { "cmovgS", { Gv, Ev }, 0 }, /* 50 */ - { MOD_TABLE (MOD_0F51) }, + { MOD_TABLE (MOD_0F50) }, { PREFIX_TABLE (PREFIX_0F51) }, { PREFIX_TABLE (PREFIX_0F52) }, { PREFIX_TABLE (PREFIX_0F53) }, @@ -2774,8 +2198,8 @@ { "punpckhwd", { MX, EM }, PREFIX_OPCODE }, { "punpckhdq", { MX, EM }, PREFIX_OPCODE }, { "packssdw", { MX, EM }, PREFIX_OPCODE }, - { PREFIX_TABLE (PREFIX_0F6C) }, - { PREFIX_TABLE (PREFIX_0F6D) }, + { "punpcklqdq", { XM, EXx }, PREFIX_DATA }, + { "punpckhqdq", { XM, EXx }, PREFIX_DATA }, { "movK", { MX, Edq }, PREFIX_OPCODE }, { PREFIX_TABLE (PREFIX_0F6F) }, /* 70 */ @@ -2833,8 +2257,8 @@ { "setle", { Eb }, 0 }, { "setg", { Eb }, 0 }, /* a0 */ - { "pushT", { fs }, 0 }, - { "popT", { fs }, 0 }, + { "pushP", { fs }, 0 }, + { "popP", { fs }, 0 }, { "cpuid", { XX }, 0 }, { "btS", { Ev, Gv }, 0 }, { "shldS", { Ev, Gv, Ib }, 0 }, @@ -2842,8 +2266,8 @@ { REG_TABLE (REG_0FA6) }, { REG_TABLE (REG_0FA7) }, /* a8 */ - { "pushT", { gs }, 0 }, - { "popT", { gs }, 0 }, + { "pushP", { gs }, 0 }, + { "popP", { gs }, 0 }, { "rsm", { XX }, 0 }, { "btsS", { Evh1, Gv }, 0 }, { "shrdS", { Ev, Gv, Ib }, 0 }, @@ -3042,8 +2466,6 @@ } vex; static unsigned char need_vex; -static unsigned char need_vex_reg; -static unsigned char vex_w_done; struct op { @@ -3207,6 +2629,16 @@ "%zmm28", "%zmm29", "%zmm30", "%zmm31" }; +static const char **names_tmm; +static const char *intel_names_tmm[] = { + "tmm0", "tmm1", "tmm2", "tmm3", + "tmm4", "tmm5", "tmm6", "tmm7" +}; +static const char *att_names_tmm[] = { + "%tmm0", "%tmm1", "%tmm2", "%tmm3", + "%tmm4", "%tmm5", "%tmm6", "%tmm7" +}; + static const char **names_mask; static const char *intel_names_mask[] = { "k0", "k1", "k2", "k3", "k4", "k5", "k6", "k7" @@ -3259,7 +2691,7 @@ }, /* REG_8F */ { - { "popU", { stackEv }, 0 }, + { "pop{P|}", { stackEv }, 0 }, { XOP_8F_TABLE (XOP_09) }, { Bad_Opcode }, { Bad_Opcode }, @@ -3385,11 +2817,11 @@ { { "incQ", { Evh1 }, 0 }, { "decQ", { Evh1 }, 0 }, - { "call{&|}", { NOTRACK, indirEv, BND }, 0 }, + { "call{@|}", { NOTRACK, indirEv, BND }, 0 }, { MOD_TABLE (MOD_FF_REG_3) }, - { "jmp{&|}", { NOTRACK, indirEv, BND }, 0 }, + { "jmp{@|}", { NOTRACK, indirEv, BND }, 0 }, { MOD_TABLE (MOD_FF_REG_5) }, - { "pushU", { stackEv }, 0 }, + { "push{P|}", { stackEv }, 0 }, { Bad_Opcode }, }, /* REG_0F00 */ @@ -3450,7 +2882,7 @@ /* REG_0F1E_P_1_MOD_3 */ { { "nopQ", { Ev }, 0 }, - { "rdsspK", { Rdq }, PREFIX_OPCODE }, + { "rdsspK", { Edq }, PREFIX_OPCODE }, { "nopQ", { Ev }, 0 }, { "nopQ", { Ev }, 0 }, { "nopQ", { Ev }, 0 }, @@ -3575,43 +3007,47 @@ { MOD_TABLE (MOD_VEX_0FAE_REG_2) }, { MOD_TABLE (MOD_VEX_0FAE_REG_3) }, }, - /* REG_VEX_0F38F3 */ - { - { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_1) }, - { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_2) }, - { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_3) }, - }, - /* REG_XOP_LWPCB */ + /* REG_VEX_0F3849_X86_64_P_0_W_0_M_1 */ { - { "llwpcb", { { OP_LWPCB_E, 0 } }, 0 }, - { "slwpcb", { { OP_LWPCB_E, 0 } }, 0 }, + { RM_TABLE (RM_VEX_0F3849_X86_64_P_0_W_0_M_1_R_0) }, }, - /* REG_XOP_LWP */ + /* REG_VEX_0F38F3 */ { - { "lwpins", { { OP_LWP_E, 0 }, Ed, Id }, 0 }, - { "lwpval", { { OP_LWP_E, 0 }, Ed, Id }, 0 }, + { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_1) }, + { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_2) }, + { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_3) }, }, - /* REG_XOP_TBM_01 */ + /* REG_0FXOP_09_01_L_0 */ { { Bad_Opcode }, - { "blcfill", { { OP_LWP_E, 0 }, Edq }, 0 }, - { "blsfill", { { OP_LWP_E, 0 }, Edq }, 0 }, - { "blcs", { { OP_LWP_E, 0 }, Edq }, 0 }, - { "tzmsk", { { OP_LWP_E, 0 }, Edq }, 0 }, - { "blcic", { { OP_LWP_E, 0 }, Edq }, 0 }, - { "blsic", { { OP_LWP_E, 0 }, Edq }, 0 }, - { "t1mskc", { { OP_LWP_E, 0 }, Edq }, 0 }, + { "blcfill", { VexGdq, Edq }, 0 }, + { "blsfill", { VexGdq, Edq }, 0 }, + { "blcs", { VexGdq, Edq }, 0 }, + { "tzmsk", { VexGdq, Edq }, 0 }, + { "blcic", { VexGdq, Edq }, 0 }, + { "blsic", { VexGdq, Edq }, 0 }, + { "t1mskc", { VexGdq, Edq }, 0 }, }, - /* REG_XOP_TBM_02 */ + /* REG_0FXOP_09_02_L_0 */ { { Bad_Opcode }, - { "blcmsk", { { OP_LWP_E, 0 }, Edq }, 0 }, + { "blcmsk", { VexGdq, Edq }, 0 }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - { "blci", { { OP_LWP_E, 0 }, Edq }, 0 }, + { "blci", { VexGdq, Edq }, 0 }, + }, + /* REG_0FXOP_09_12_M_1_L_0 */ + { + { "llwpcb", { Edq }, 0 }, + { "slwpcb", { Edq }, 0 }, + }, + /* REG_0FXOP_0A_12_L_0 */ + { + { "lwpins", { VexGdq, Ed, Id }, 0 }, + { "lwpval", { VexGdq, Ed, Id }, 0 }, }, #include "i386-dis-evex-reg.h" @@ -3626,6 +3062,14 @@ { NULL, { { NULL, 0 } }, PREFIX_IGNORED } }, + /* PREFIX_0F01_REG_3_RM_1 */ + { + { "vmmcall", { Skip_MODRM }, 0 }, + { "vmgexit", { Skip_MODRM }, 0 }, + { Bad_Opcode }, + { "vmgexit", { Skip_MODRM }, 0 }, + }, + /* PREFIX_0F01_REG_5_MOD_0 */ { { Bad_Opcode }, @@ -3634,8 +3078,18 @@ /* PREFIX_0F01_REG_5_MOD_3_RM_0 */ { - { Bad_Opcode }, + { "serialize", { Skip_MODRM }, PREFIX_OPCODE }, { "setssbsy", { Skip_MODRM }, PREFIX_OPCODE }, + { Bad_Opcode }, + { "xsusldtrk", { Skip_MODRM }, PREFIX_OPCODE }, + }, + + /* PREFIX_0F01_REG_5_MOD_3_RM_1 */ + { + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { "xresldtrk", { Skip_MODRM }, PREFIX_OPCODE }, }, /* PREFIX_0F01_REG_5_MOD_3_RM_2 */ @@ -3650,11 +3104,6 @@ { "mcommit", { Skip_MODRM }, 0 }, }, - /* PREFIX_0F01_REG_7_MOD_3_RM_3 */ - { - { "mwaitx", { { OP_Mwait, eBX_reg } }, 0 }, - }, - /* PREFIX_0F09 */ { { "wbinvd", { XX }, 0 }, @@ -3681,7 +3130,7 @@ { { MOD_TABLE (MOD_0F12_PREFIX_0) }, { "movsldup", { XM, EXx }, PREFIX_OPCODE }, - { "movlpd", { XM, EXq }, PREFIX_OPCODE }, + { MOD_TABLE (MOD_0F12_PREFIX_2) }, { "movddup", { XM, EXq }, PREFIX_OPCODE }, }, @@ -3689,7 +3138,7 @@ { { MOD_TABLE (MOD_0F16_PREFIX_0) }, { "movshdup", { XM, EXx }, PREFIX_OPCODE }, - { "movhpd", { XM, EXq }, PREFIX_OPCODE }, + { MOD_TABLE (MOD_0F16_PREFIX_2) }, }, /* PREFIX_0F1A */ @@ -3727,9 +3176,9 @@ /* PREFIX_0F2A */ { { "cvtpi2ps", { XM, EMCq }, PREFIX_OPCODE }, - { "cvtsi2ss%LQ", { XM, Edq }, PREFIX_OPCODE }, + { "cvtsi2ss{%LQ|}", { XM, Edq }, PREFIX_OPCODE }, { "cvtpi2pd", { XM, EMCq }, PREFIX_OPCODE }, - { "cvtsi2sd%LQ", { XM, Edq }, 0 }, + { "cvtsi2sd{%LQ|}", { XM, Edq }, 0 }, }, /* PREFIX_0F2B */ @@ -3874,20 +3323,6 @@ { "punpckldq",{ MX, EMx }, PREFIX_OPCODE }, }, - /* PREFIX_0F6C */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "punpcklqdq", { XM, EXx }, PREFIX_OPCODE }, - }, - - /* PREFIX_0F6D */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "punpckhqdq", { XM, EXx }, PREFIX_OPCODE }, - }, - /* PREFIX_0F6F */ { { "movq", { MX, EM }, PREFIX_OPCODE }, @@ -3903,20 +3338,6 @@ { "pshuflw",{ XM, EXx, Ib }, PREFIX_OPCODE }, }, - /* PREFIX_0F73_REG_3 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "psrldq", { XS, Ib }, 0 }, - }, - - /* PREFIX_0F73_REG_7 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "pslldq", { XS, Ib }, 0 }, - }, - /* PREFIX_0F78 */ { {"vmread", { Em, Gm }, 0 }, @@ -3990,24 +3411,19 @@ /* PREFIX_0FAE_REG_4_MOD_0 */ { { "xsave", { FXSAVE }, 0 }, - { "ptwrite%LQ", { Edq }, 0 }, + { "ptwrite{%LQ|}", { Edq }, 0 }, }, /* PREFIX_0FAE_REG_4_MOD_3 */ { { Bad_Opcode }, - { "ptwrite%LQ", { Edq }, 0 }, - }, - - /* PREFIX_0FAE_REG_5_MOD_0 */ - { - { "xrstor", { FXSAVE }, PREFIX_OPCODE }, + { "ptwrite{%LQ|}", { Edq }, 0 }, }, /* PREFIX_0FAE_REG_5_MOD_3 */ { { "lfence", { Skip_MODRM }, 0 }, - { "incsspK", { Rdq }, PREFIX_OPCODE }, + { "incsspK", { Edq }, PREFIX_OPCODE }, }, /* PREFIX_0FAE_REG_6_MOD_0 */ @@ -4060,11 +3476,6 @@ { "cmpsd", { XM, EXq, CMP }, PREFIX_OPCODE }, }, - /* PREFIX_0FC3_MOD_0 */ - { - { "movntiS", { Edq, Gdq }, PREFIX_OPCODE }, - }, - /* PREFIX_0FC7_REG_6_MOD_0 */ { { "vmptrld",{ Mq }, 0 }, @@ -4132,3041 +3543,1539 @@ { "maskmovdqu", { XM, XS }, PREFIX_OPCODE }, }, - /* PREFIX_0F3810 */ + /* PREFIX_0F38F0 */ { + { "movbeS", { Gv, Mv }, PREFIX_OPCODE }, { Bad_Opcode }, - { Bad_Opcode }, - { "pblendvb", { XM, EXx, XMM0 }, PREFIX_OPCODE }, + { "movbeS", { Gv, Mv }, PREFIX_OPCODE }, + { "crc32A", { Gdq, Eb }, PREFIX_OPCODE }, }, - /* PREFIX_0F3814 */ + /* PREFIX_0F38F1 */ { + { "movbeS", { Mv, Gv }, PREFIX_OPCODE }, { Bad_Opcode }, - { Bad_Opcode }, - { "blendvps", { XM, EXx, XMM0 }, PREFIX_OPCODE }, + { "movbeS", { Mv, Gv }, PREFIX_OPCODE }, + { "crc32Q", { Gdq, Ev }, PREFIX_OPCODE }, }, - /* PREFIX_0F3815 */ + /* PREFIX_0F38F6 */ { + { MOD_TABLE (MOD_0F38F6_PREFIX_0) }, + { "adoxS", { Gdq, Edq}, PREFIX_OPCODE }, + { "adcxS", { Gdq, Edq}, PREFIX_OPCODE }, { Bad_Opcode }, - { Bad_Opcode }, - { "blendvpd", { XM, EXx, XMM0 }, PREFIX_OPCODE }, }, - /* PREFIX_0F3817 */ + /* PREFIX_0F38F8 */ { { Bad_Opcode }, - { Bad_Opcode }, - { "ptest", { XM, EXx }, PREFIX_OPCODE }, + { MOD_TABLE (MOD_0F38F8_PREFIX_1) }, + { MOD_TABLE (MOD_0F38F8_PREFIX_2) }, + { MOD_TABLE (MOD_0F38F8_PREFIX_3) }, }, - /* PREFIX_0F3820 */ + /* PREFIX_VEX_0F10 */ { - { Bad_Opcode }, - { Bad_Opcode }, - { "pmovsxbw", { XM, EXq }, PREFIX_OPCODE }, + { "vmovups", { XM, EXx }, 0 }, + { "vmovss", { XMScalar, VexScalarR, EXxmm_md }, 0 }, + { "vmovupd", { XM, EXx }, 0 }, + { "vmovsd", { XMScalar, VexScalarR, EXxmm_mq }, 0 }, }, - /* PREFIX_0F3821 */ + /* PREFIX_VEX_0F11 */ { - { Bad_Opcode }, - { Bad_Opcode }, - { "pmovsxbd", { XM, EXd }, PREFIX_OPCODE }, + { "vmovups", { EXxS, XM }, 0 }, + { "vmovss", { EXdS, VexScalarR, XMScalar }, 0 }, + { "vmovupd", { EXxS, XM }, 0 }, + { "vmovsd", { EXqS, VexScalarR, XMScalar }, 0 }, }, - /* PREFIX_0F3822 */ + /* PREFIX_VEX_0F12 */ { - { Bad_Opcode }, - { Bad_Opcode }, - { "pmovsxbq", { XM, EXw }, PREFIX_OPCODE }, + { MOD_TABLE (MOD_VEX_0F12_PREFIX_0) }, + { "vmovsldup", { XM, EXx }, 0 }, + { MOD_TABLE (MOD_VEX_0F12_PREFIX_2) }, + { "vmovddup", { XM, EXymmq }, 0 }, }, - /* PREFIX_0F3823 */ + /* PREFIX_VEX_0F16 */ { - { Bad_Opcode }, - { Bad_Opcode }, - { "pmovsxwd", { XM, EXq }, PREFIX_OPCODE }, + { MOD_TABLE (MOD_VEX_0F16_PREFIX_0) }, + { "vmovshdup", { XM, EXx }, 0 }, + { MOD_TABLE (MOD_VEX_0F16_PREFIX_2) }, }, - /* PREFIX_0F3824 */ + /* PREFIX_VEX_0F2A */ { { Bad_Opcode }, + { "vcvtsi2ss{%LQ|}", { XMScalar, VexScalar, Edq }, 0 }, { Bad_Opcode }, - { "pmovsxwq", { XM, EXd }, PREFIX_OPCODE }, + { "vcvtsi2sd{%LQ|}", { XMScalar, VexScalar, Edq }, 0 }, }, - /* PREFIX_0F3825 */ + /* PREFIX_VEX_0F2C */ { { Bad_Opcode }, + { "vcvttss2si", { Gdq, EXxmm_md, EXxEVexS }, 0 }, { Bad_Opcode }, - { "pmovsxdq", { XM, EXq }, PREFIX_OPCODE }, + { "vcvttsd2si", { Gdq, EXxmm_mq, EXxEVexS }, 0 }, }, - /* PREFIX_0F3828 */ + /* PREFIX_VEX_0F2D */ { { Bad_Opcode }, + { "vcvtss2si", { Gdq, EXxmm_md, EXxEVexR }, 0 }, { Bad_Opcode }, - { "pmuldq", { XM, EXx }, PREFIX_OPCODE }, + { "vcvtsd2si", { Gdq, EXxmm_mq, EXxEVexR }, 0 }, }, - /* PREFIX_0F3829 */ + /* PREFIX_VEX_0F2E */ { + { "vucomisX", { XMScalar, EXxmm_md, EXxEVexS }, PREFIX_OPCODE }, { Bad_Opcode }, - { Bad_Opcode }, - { "pcmpeqq", { XM, EXx }, PREFIX_OPCODE }, + { "vucomisX", { XMScalar, EXxmm_mq, EXxEVexS }, PREFIX_OPCODE }, }, - /* PREFIX_0F382A */ + /* PREFIX_VEX_0F2F */ { + { "vcomisX", { XMScalar, EXxmm_md, EXxEVexS }, PREFIX_OPCODE }, { Bad_Opcode }, - { Bad_Opcode }, - { MOD_TABLE (MOD_0F382A_PREFIX_2) }, + { "vcomisX", { XMScalar, EXxmm_mq, EXxEVexS }, PREFIX_OPCODE }, }, - /* PREFIX_0F382B */ + /* PREFIX_VEX_0F41 */ { + { VEX_LEN_TABLE (VEX_LEN_0F41_P_0) }, { Bad_Opcode }, - { Bad_Opcode }, - { "packusdw", { XM, EXx }, PREFIX_OPCODE }, + { VEX_LEN_TABLE (VEX_LEN_0F41_P_2) }, }, - /* PREFIX_0F3830 */ + /* PREFIX_VEX_0F42 */ { + { VEX_LEN_TABLE (VEX_LEN_0F42_P_0) }, { Bad_Opcode }, - { Bad_Opcode }, - { "pmovzxbw", { XM, EXq }, PREFIX_OPCODE }, + { VEX_LEN_TABLE (VEX_LEN_0F42_P_2) }, }, - /* PREFIX_0F3831 */ + /* PREFIX_VEX_0F44 */ { + { VEX_LEN_TABLE (VEX_LEN_0F44_P_0) }, { Bad_Opcode }, - { Bad_Opcode }, - { "pmovzxbd", { XM, EXd }, PREFIX_OPCODE }, + { VEX_LEN_TABLE (VEX_LEN_0F44_P_2) }, }, - /* PREFIX_0F3832 */ + /* PREFIX_VEX_0F45 */ { + { VEX_LEN_TABLE (VEX_LEN_0F45_P_0) }, { Bad_Opcode }, - { Bad_Opcode }, - { "pmovzxbq", { XM, EXw }, PREFIX_OPCODE }, + { VEX_LEN_TABLE (VEX_LEN_0F45_P_2) }, }, - /* PREFIX_0F3833 */ + /* PREFIX_VEX_0F46 */ { + { VEX_LEN_TABLE (VEX_LEN_0F46_P_0) }, { Bad_Opcode }, - { Bad_Opcode }, - { "pmovzxwd", { XM, EXq }, PREFIX_OPCODE }, + { VEX_LEN_TABLE (VEX_LEN_0F46_P_2) }, }, - /* PREFIX_0F3834 */ + /* PREFIX_VEX_0F47 */ { + { VEX_LEN_TABLE (VEX_LEN_0F47_P_0) }, { Bad_Opcode }, - { Bad_Opcode }, - { "pmovzxwq", { XM, EXd }, PREFIX_OPCODE }, + { VEX_LEN_TABLE (VEX_LEN_0F47_P_2) }, }, - /* PREFIX_0F3835 */ + /* PREFIX_VEX_0F4A */ { + { VEX_LEN_TABLE (VEX_LEN_0F4A_P_0) }, { Bad_Opcode }, - { Bad_Opcode }, - { "pmovzxdq", { XM, EXq }, PREFIX_OPCODE }, + { VEX_LEN_TABLE (VEX_LEN_0F4A_P_2) }, }, - /* PREFIX_0F3837 */ + /* PREFIX_VEX_0F4B */ { + { VEX_LEN_TABLE (VEX_LEN_0F4B_P_0) }, { Bad_Opcode }, - { Bad_Opcode }, - { "pcmpgtq", { XM, EXx }, PREFIX_OPCODE }, + { VEX_LEN_TABLE (VEX_LEN_0F4B_P_2) }, }, - /* PREFIX_0F3838 */ + /* PREFIX_VEX_0F51 */ { - { Bad_Opcode }, - { Bad_Opcode }, - { "pminsb", { XM, EXx }, PREFIX_OPCODE }, + { "vsqrtps", { XM, EXx }, 0 }, + { "vsqrtss", { XMScalar, VexScalar, EXxmm_md }, 0 }, + { "vsqrtpd", { XM, EXx }, 0 }, + { "vsqrtsd", { XMScalar, VexScalar, EXxmm_mq }, 0 }, }, - /* PREFIX_0F3839 */ + /* PREFIX_VEX_0F52 */ { - { Bad_Opcode }, - { Bad_Opcode }, - { "pminsd", { XM, EXx }, PREFIX_OPCODE }, + { "vrsqrtps", { XM, EXx }, 0 }, + { "vrsqrtss", { XMScalar, VexScalar, EXxmm_md }, 0 }, }, - /* PREFIX_0F383A */ + /* PREFIX_VEX_0F53 */ { - { Bad_Opcode }, - { Bad_Opcode }, - { "pminuw", { XM, EXx }, PREFIX_OPCODE }, + { "vrcpps", { XM, EXx }, 0 }, + { "vrcpss", { XMScalar, VexScalar, EXxmm_md }, 0 }, }, - /* PREFIX_0F383B */ + /* PREFIX_VEX_0F58 */ { - { Bad_Opcode }, - { Bad_Opcode }, - { "pminud", { XM, EXx }, PREFIX_OPCODE }, + { "vaddps", { XM, Vex, EXx }, 0 }, + { "vaddss", { XMScalar, VexScalar, EXxmm_md }, 0 }, + { "vaddpd", { XM, Vex, EXx }, 0 }, + { "vaddsd", { XMScalar, VexScalar, EXxmm_mq }, 0 }, }, - /* PREFIX_0F383C */ + /* PREFIX_VEX_0F59 */ { - { Bad_Opcode }, - { Bad_Opcode }, - { "pmaxsb", { XM, EXx }, PREFIX_OPCODE }, + { "vmulps", { XM, Vex, EXx }, 0 }, + { "vmulss", { XMScalar, VexScalar, EXxmm_md }, 0 }, + { "vmulpd", { XM, Vex, EXx }, 0 }, + { "vmulsd", { XMScalar, VexScalar, EXxmm_mq }, 0 }, }, - /* PREFIX_0F383D */ + /* PREFIX_VEX_0F5A */ { - { Bad_Opcode }, - { Bad_Opcode }, - { "pmaxsd", { XM, EXx }, PREFIX_OPCODE }, + { "vcvtps2pd", { XM, EXxmmq }, 0 }, + { "vcvtss2sd", { XMScalar, VexScalar, EXxmm_md }, 0 }, + { "vcvtpd2ps%XY",{ XMM, EXx }, 0 }, + { "vcvtsd2ss", { XMScalar, VexScalar, EXxmm_mq }, 0 }, }, - /* PREFIX_0F383E */ + /* PREFIX_VEX_0F5B */ { - { Bad_Opcode }, - { Bad_Opcode }, - { "pmaxuw", { XM, EXx }, PREFIX_OPCODE }, + { "vcvtdq2ps", { XM, EXx }, 0 }, + { "vcvttps2dq", { XM, EXx }, 0 }, + { "vcvtps2dq", { XM, EXx }, 0 }, }, - /* PREFIX_0F383F */ + /* PREFIX_VEX_0F5C */ { - { Bad_Opcode }, - { Bad_Opcode }, - { "pmaxud", { XM, EXx }, PREFIX_OPCODE }, + { "vsubps", { XM, Vex, EXx }, 0 }, + { "vsubss", { XMScalar, VexScalar, EXxmm_md }, 0 }, + { "vsubpd", { XM, Vex, EXx }, 0 }, + { "vsubsd", { XMScalar, VexScalar, EXxmm_mq }, 0 }, }, - /* PREFIX_0F3840 */ + /* PREFIX_VEX_0F5D */ { - { Bad_Opcode }, - { Bad_Opcode }, - { "pmulld", { XM, EXx }, PREFIX_OPCODE }, + { "vminps", { XM, Vex, EXx }, 0 }, + { "vminss", { XMScalar, VexScalar, EXxmm_md }, 0 }, + { "vminpd", { XM, Vex, EXx }, 0 }, + { "vminsd", { XMScalar, VexScalar, EXxmm_mq }, 0 }, }, - /* PREFIX_0F3841 */ + /* PREFIX_VEX_0F5E */ { - { Bad_Opcode }, - { Bad_Opcode }, - { "phminposuw", { XM, EXx }, PREFIX_OPCODE }, + { "vdivps", { XM, Vex, EXx }, 0 }, + { "vdivss", { XMScalar, VexScalar, EXxmm_md }, 0 }, + { "vdivpd", { XM, Vex, EXx }, 0 }, + { "vdivsd", { XMScalar, VexScalar, EXxmm_mq }, 0 }, + }, + + /* PREFIX_VEX_0F5F */ + { + { "vmaxps", { XM, Vex, EXx }, 0 }, + { "vmaxss", { XMScalar, VexScalar, EXxmm_md }, 0 }, + { "vmaxpd", { XM, Vex, EXx }, 0 }, + { "vmaxsd", { XMScalar, VexScalar, EXxmm_mq }, 0 }, }, - /* PREFIX_0F3880 */ + /* PREFIX_VEX_0F6F */ { { Bad_Opcode }, + { "vmovdqu", { XM, EXx }, 0 }, + { "vmovdqa", { XM, EXx }, 0 }, + }, + + /* PREFIX_VEX_0F70 */ + { { Bad_Opcode }, - { "invept", { Gm, Mo }, PREFIX_OPCODE }, + { "vpshufhw", { XM, EXx, Ib }, 0 }, + { "vpshufd", { XM, EXx, Ib }, 0 }, + { "vpshuflw", { XM, EXx, Ib }, 0 }, }, - /* PREFIX_0F3881 */ + /* PREFIX_VEX_0F7C */ { { Bad_Opcode }, { Bad_Opcode }, - { "invvpid", { Gm, Mo }, PREFIX_OPCODE }, + { "vhaddpd", { XM, Vex, EXx }, 0 }, + { "vhaddps", { XM, Vex, EXx }, 0 }, }, - /* PREFIX_0F3882 */ + /* PREFIX_VEX_0F7D */ { { Bad_Opcode }, { Bad_Opcode }, - { "invpcid", { Gm, M }, PREFIX_OPCODE }, + { "vhsubpd", { XM, Vex, EXx }, 0 }, + { "vhsubps", { XM, Vex, EXx }, 0 }, }, - /* PREFIX_0F38C8 */ + /* PREFIX_VEX_0F7E */ { - { "sha1nexte", { XM, EXxmm }, PREFIX_OPCODE }, + { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0F7E_P_1) }, + { VEX_LEN_TABLE (VEX_LEN_0F7E_P_2) }, }, - /* PREFIX_0F38C9 */ + /* PREFIX_VEX_0F7F */ { - { "sha1msg1", { XM, EXxmm }, PREFIX_OPCODE }, + { Bad_Opcode }, + { "vmovdqu", { EXxS, XM }, 0 }, + { "vmovdqa", { EXxS, XM }, 0 }, }, - /* PREFIX_0F38CA */ + /* PREFIX_VEX_0F90 */ { - { "sha1msg2", { XM, EXxmm }, PREFIX_OPCODE }, + { VEX_LEN_TABLE (VEX_LEN_0F90_P_0) }, + { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0F90_P_2) }, }, - /* PREFIX_0F38CB */ + /* PREFIX_VEX_0F91 */ { - { "sha256rnds2", { XM, EXxmm, XMM0 }, PREFIX_OPCODE }, + { VEX_LEN_TABLE (VEX_LEN_0F91_P_0) }, + { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0F91_P_2) }, }, - /* PREFIX_0F38CC */ + /* PREFIX_VEX_0F92 */ { - { "sha256msg1", { XM, EXxmm }, PREFIX_OPCODE }, + { VEX_LEN_TABLE (VEX_LEN_0F92_P_0) }, + { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0F92_P_2) }, + { VEX_LEN_TABLE (VEX_LEN_0F92_P_3) }, }, - /* PREFIX_0F38CD */ + /* PREFIX_VEX_0F93 */ { - { "sha256msg2", { XM, EXxmm }, PREFIX_OPCODE }, + { VEX_LEN_TABLE (VEX_LEN_0F93_P_0) }, + { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0F93_P_2) }, + { VEX_LEN_TABLE (VEX_LEN_0F93_P_3) }, }, - /* PREFIX_0F38CF */ + /* PREFIX_VEX_0F98 */ { + { VEX_LEN_TABLE (VEX_LEN_0F98_P_0) }, { Bad_Opcode }, - { Bad_Opcode }, - { "gf2p8mulb", { XM, EXxmm }, PREFIX_OPCODE }, + { VEX_LEN_TABLE (VEX_LEN_0F98_P_2) }, }, - /* PREFIX_0F38DB */ + /* PREFIX_VEX_0F99 */ { + { VEX_LEN_TABLE (VEX_LEN_0F99_P_0) }, { Bad_Opcode }, - { Bad_Opcode }, - { "aesimc", { XM, EXx }, PREFIX_OPCODE }, + { VEX_LEN_TABLE (VEX_LEN_0F99_P_2) }, }, - /* PREFIX_0F38DC */ + /* PREFIX_VEX_0FC2 */ { - { Bad_Opcode }, - { Bad_Opcode }, - { "aesenc", { XM, EXx }, PREFIX_OPCODE }, + { "vcmpps", { XM, Vex, EXx, CMP }, 0 }, + { "vcmpss", { XMScalar, VexScalar, EXxmm_md, CMP }, 0 }, + { "vcmppd", { XM, Vex, EXx, CMP }, 0 }, + { "vcmpsd", { XMScalar, VexScalar, EXxmm_mq, CMP }, 0 }, }, - /* PREFIX_0F38DD */ + /* PREFIX_VEX_0FD0 */ { { Bad_Opcode }, { Bad_Opcode }, - { "aesenclast", { XM, EXx }, PREFIX_OPCODE }, + { "vaddsubpd", { XM, Vex, EXx }, 0 }, + { "vaddsubps", { XM, Vex, EXx }, 0 }, }, - /* PREFIX_0F38DE */ + /* PREFIX_VEX_0FE6 */ { { Bad_Opcode }, - { Bad_Opcode }, - { "aesdec", { XM, EXx }, PREFIX_OPCODE }, + { "vcvtdq2pd", { XM, EXxmmq }, 0 }, + { "vcvttpd2dq%XY", { XMM, EXx }, 0 }, + { "vcvtpd2dq%XY", { XMM, EXx }, 0 }, }, - /* PREFIX_0F38DF */ + /* PREFIX_VEX_0FF0 */ { { Bad_Opcode }, { Bad_Opcode }, - { "aesdeclast", { XM, EXx }, PREFIX_OPCODE }, - }, - - /* PREFIX_0F38F0 */ - { - { "movbeS", { Gv, { MOVBE_Fixup, v_mode } }, PREFIX_OPCODE }, { Bad_Opcode }, - { "movbeS", { Gv, { MOVBE_Fixup, v_mode } }, PREFIX_OPCODE }, - { "crc32", { Gdq, { CRC32_Fixup, b_mode } }, PREFIX_OPCODE }, + { MOD_TABLE (MOD_VEX_0FF0_PREFIX_3) }, }, - /* PREFIX_0F38F1 */ + /* PREFIX_VEX_0F3849_X86_64 */ { - { "movbeS", { { MOVBE_Fixup, v_mode }, Gv }, PREFIX_OPCODE }, + { VEX_W_TABLE (VEX_W_0F3849_X86_64_P_0) }, { Bad_Opcode }, - { "movbeS", { { MOVBE_Fixup, v_mode }, Gv }, PREFIX_OPCODE }, - { "crc32", { Gdq, { CRC32_Fixup, v_mode } }, PREFIX_OPCODE }, + { VEX_W_TABLE (VEX_W_0F3849_X86_64_P_2) }, + { VEX_W_TABLE (VEX_W_0F3849_X86_64_P_3) }, }, - /* PREFIX_0F38F5 */ + /* PREFIX_VEX_0F384B_X86_64 */ { { Bad_Opcode }, - { Bad_Opcode }, - { MOD_TABLE (MOD_0F38F5_PREFIX_2) }, + { VEX_W_TABLE (VEX_W_0F384B_X86_64_P_1) }, + { VEX_W_TABLE (VEX_W_0F384B_X86_64_P_2) }, + { VEX_W_TABLE (VEX_W_0F384B_X86_64_P_3) }, }, - /* PREFIX_0F38F6 */ + /* PREFIX_VEX_0F385C_X86_64 */ { - { MOD_TABLE (MOD_0F38F6_PREFIX_0) }, - { "adoxS", { Gdq, Edq}, PREFIX_OPCODE }, - { "adcxS", { Gdq, Edq}, PREFIX_OPCODE }, { Bad_Opcode }, - }, - - /* PREFIX_0F38F8 */ - { + { VEX_W_TABLE (VEX_W_0F385C_X86_64_P_1) }, { Bad_Opcode }, - { MOD_TABLE (MOD_0F38F8_PREFIX_1) }, - { MOD_TABLE (MOD_0F38F8_PREFIX_2) }, - { MOD_TABLE (MOD_0F38F8_PREFIX_3) }, }, - /* PREFIX_0F38F9 */ + /* PREFIX_VEX_0F385E_X86_64 */ { - { MOD_TABLE (MOD_0F38F9_PREFIX_0) }, + { VEX_W_TABLE (VEX_W_0F385E_X86_64_P_0) }, + { VEX_W_TABLE (VEX_W_0F385E_X86_64_P_1) }, + { VEX_W_TABLE (VEX_W_0F385E_X86_64_P_2) }, + { VEX_W_TABLE (VEX_W_0F385E_X86_64_P_3) }, }, - /* PREFIX_0F3A08 */ + /* PREFIX_VEX_0F38F5 */ { + { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_0) }, + { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_1) }, { Bad_Opcode }, - { Bad_Opcode }, - { "roundps", { XM, EXx, Ib }, PREFIX_OPCODE }, + { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_3) }, }, - /* PREFIX_0F3A09 */ + /* PREFIX_VEX_0F38F6 */ { { Bad_Opcode }, { Bad_Opcode }, - { "roundpd", { XM, EXx, Ib }, PREFIX_OPCODE }, - }, - - /* PREFIX_0F3A0A */ - { - { Bad_Opcode }, { Bad_Opcode }, - { "roundss", { XM, EXd, Ib }, PREFIX_OPCODE }, + { VEX_LEN_TABLE (VEX_LEN_0F38F6_P_3) }, }, - /* PREFIX_0F3A0B */ + /* PREFIX_VEX_0F38F7 */ { - { Bad_Opcode }, - { Bad_Opcode }, - { "roundsd", { XM, EXq, Ib }, PREFIX_OPCODE }, + { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_0) }, + { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_1) }, + { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_2) }, + { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_3) }, }, - /* PREFIX_0F3A0C */ + /* PREFIX_VEX_0F3AF0 */ { { Bad_Opcode }, { Bad_Opcode }, - { "blendps", { XM, EXx, Ib }, PREFIX_OPCODE }, - }, - - /* PREFIX_0F3A0D */ - { - { Bad_Opcode }, { Bad_Opcode }, - { "blendpd", { XM, EXx, Ib }, PREFIX_OPCODE }, + { VEX_LEN_TABLE (VEX_LEN_0F3AF0_P_3) }, }, - /* PREFIX_0F3A0E */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "pblendw", { XM, EXx, Ib }, PREFIX_OPCODE }, - }, +#include "i386-dis-evex-prefix.h" +}; - /* PREFIX_0F3A14 */ +static const struct dis386 x86_64_table[][2] = { + /* X86_64_06 */ { - { Bad_Opcode }, - { Bad_Opcode }, - { "pextrb", { Edqb, XM, Ib }, PREFIX_OPCODE }, + { "pushP", { es }, 0 }, }, - /* PREFIX_0F3A15 */ + /* X86_64_07 */ { - { Bad_Opcode }, - { Bad_Opcode }, - { "pextrw", { Edqw, XM, Ib }, PREFIX_OPCODE }, + { "popP", { es }, 0 }, }, - /* PREFIX_0F3A16 */ + /* X86_64_0E */ { - { Bad_Opcode }, - { Bad_Opcode }, - { "pextrK", { Edq, XM, Ib }, PREFIX_OPCODE }, + { "pushP", { cs }, 0 }, }, - /* PREFIX_0F3A17 */ + /* X86_64_16 */ { - { Bad_Opcode }, - { Bad_Opcode }, - { "extractps", { Edqd, XM, Ib }, PREFIX_OPCODE }, + { "pushP", { ss }, 0 }, }, - /* PREFIX_0F3A20 */ + /* X86_64_17 */ { - { Bad_Opcode }, - { Bad_Opcode }, - { "pinsrb", { XM, Edqb, Ib }, PREFIX_OPCODE }, + { "popP", { ss }, 0 }, }, - /* PREFIX_0F3A21 */ + /* X86_64_1E */ { - { Bad_Opcode }, - { Bad_Opcode }, - { "insertps", { XM, EXd, Ib }, PREFIX_OPCODE }, + { "pushP", { ds }, 0 }, }, - /* PREFIX_0F3A22 */ + /* X86_64_1F */ { - { Bad_Opcode }, - { Bad_Opcode }, - { "pinsrK", { XM, Edq, Ib }, PREFIX_OPCODE }, + { "popP", { ds }, 0 }, }, - /* PREFIX_0F3A40 */ + /* X86_64_27 */ { - { Bad_Opcode }, - { Bad_Opcode }, - { "dpps", { XM, EXx, Ib }, PREFIX_OPCODE }, + { "daa", { XX }, 0 }, }, - /* PREFIX_0F3A41 */ + /* X86_64_2F */ { - { Bad_Opcode }, - { Bad_Opcode }, - { "dppd", { XM, EXx, Ib }, PREFIX_OPCODE }, + { "das", { XX }, 0 }, }, - /* PREFIX_0F3A42 */ + /* X86_64_37 */ { - { Bad_Opcode }, - { Bad_Opcode }, - { "mpsadbw", { XM, EXx, Ib }, PREFIX_OPCODE }, + { "aaa", { XX }, 0 }, }, - /* PREFIX_0F3A44 */ + /* X86_64_3F */ { - { Bad_Opcode }, - { Bad_Opcode }, - { "pclmulqdq", { XM, EXx, PCLMUL }, PREFIX_OPCODE }, + { "aas", { XX }, 0 }, }, - /* PREFIX_0F3A60 */ + /* X86_64_60 */ { - { Bad_Opcode }, - { Bad_Opcode }, - { "pcmpestrm", { XM, { PCMPESTR_Fixup, x_mode }, Ib }, PREFIX_OPCODE }, + { "pushaP", { XX }, 0 }, }, - /* PREFIX_0F3A61 */ + /* X86_64_61 */ { - { Bad_Opcode }, - { Bad_Opcode }, - { "pcmpestri", { XM, { PCMPESTR_Fixup, x_mode }, Ib }, PREFIX_OPCODE }, + { "popaP", { XX }, 0 }, }, - /* PREFIX_0F3A62 */ + /* X86_64_62 */ { - { Bad_Opcode }, - { Bad_Opcode }, - { "pcmpistrm", { XM, EXx, Ib }, PREFIX_OPCODE }, + { MOD_TABLE (MOD_62_32BIT) }, + { EVEX_TABLE (EVEX_0F) }, }, - /* PREFIX_0F3A63 */ + /* X86_64_63 */ { - { Bad_Opcode }, - { Bad_Opcode }, - { "pcmpistri", { XM, EXx, Ib }, PREFIX_OPCODE }, + { "arpl", { Ew, Gw }, 0 }, + { "movs", { { OP_G, movsxd_mode }, { MOVSXD_Fixup, movsxd_mode } }, 0 }, }, - /* PREFIX_0F3ACC */ + /* X86_64_6D */ { - { "sha1rnds4", { XM, EXxmm, Ib }, PREFIX_OPCODE }, + { "ins{R|}", { Yzr, indirDX }, 0 }, + { "ins{G|}", { Yzr, indirDX }, 0 }, }, - /* PREFIX_0F3ACE */ + /* X86_64_6F */ { - { Bad_Opcode }, - { Bad_Opcode }, - { "gf2p8affineqb", { XM, EXxmm, Ib }, PREFIX_OPCODE }, + { "outs{R|}", { indirDXr, Xz }, 0 }, + { "outs{G|}", { indirDXr, Xz }, 0 }, }, - /* PREFIX_0F3ACF */ + /* X86_64_82 */ { - { Bad_Opcode }, - { Bad_Opcode }, - { "gf2p8affineinvqb", { XM, EXxmm, Ib }, PREFIX_OPCODE }, + /* Opcode 0x82 is an alias of opcode 0x80 in 32-bit mode. */ + { REG_TABLE (REG_80) }, }, - /* PREFIX_0F3ADF */ + /* X86_64_9A */ { - { Bad_Opcode }, - { Bad_Opcode }, - { "aeskeygenassist", { XM, EXx, Ib }, PREFIX_OPCODE }, + { "{l|}call{P|}", { Ap }, 0 }, }, - /* PREFIX_VEX_0F10 */ + /* X86_64_C2 */ { - { "vmovups", { XM, EXx }, 0 }, - { "vmovss", { XMVexScalar, VexScalar, EXdScalar }, 0 }, - { "vmovupd", { XM, EXx }, 0 }, - { "vmovsd", { XMVexScalar, VexScalar, EXqScalar }, 0 }, + { "retP", { Iw, BND }, 0 }, + { "ret@", { Iw, BND }, 0 }, }, - /* PREFIX_VEX_0F11 */ + /* X86_64_C3 */ { - { "vmovups", { EXxS, XM }, 0 }, - { "vmovss", { EXdVexScalarS, VexScalar, XMScalar }, 0 }, - { "vmovupd", { EXxS, XM }, 0 }, - { "vmovsd", { EXqVexScalarS, VexScalar, XMScalar }, 0 }, + { "retP", { BND }, 0 }, + { "ret@", { BND }, 0 }, }, - /* PREFIX_VEX_0F12 */ + /* X86_64_C4 */ { - { MOD_TABLE (MOD_VEX_0F12_PREFIX_0) }, - { "vmovsldup", { XM, EXx }, 0 }, - { VEX_LEN_TABLE (VEX_LEN_0F12_P_2) }, - { "vmovddup", { XM, EXymmq }, 0 }, + { MOD_TABLE (MOD_C4_32BIT) }, + { VEX_C4_TABLE (VEX_0F) }, }, - /* PREFIX_VEX_0F16 */ + /* X86_64_C5 */ { - { MOD_TABLE (MOD_VEX_0F16_PREFIX_0) }, - { "vmovshdup", { XM, EXx }, 0 }, - { VEX_LEN_TABLE (VEX_LEN_0F16_P_2) }, + { MOD_TABLE (MOD_C5_32BIT) }, + { VEX_C5_TABLE (VEX_0F) }, }, - /* PREFIX_VEX_0F2A */ + /* X86_64_CE */ { - { Bad_Opcode }, - { "vcvtsi2ss%LQ", { XMScalar, VexScalar, Edq }, 0 }, - { Bad_Opcode }, - { "vcvtsi2sd%LQ", { XMScalar, VexScalar, Edq }, 0 }, + { "into", { XX }, 0 }, }, - /* PREFIX_VEX_0F2C */ + /* X86_64_D4 */ { - { Bad_Opcode }, - { "vcvttss2si", { Gdq, EXdScalar }, 0 }, - { Bad_Opcode }, - { "vcvttsd2si", { Gdq, EXqScalar }, 0 }, + { "aam", { Ib }, 0 }, }, - /* PREFIX_VEX_0F2D */ + /* X86_64_D5 */ { - { Bad_Opcode }, - { "vcvtss2si", { Gdq, EXdScalar }, 0 }, - { Bad_Opcode }, - { "vcvtsd2si", { Gdq, EXqScalar }, 0 }, + { "aad", { Ib }, 0 }, }, - /* PREFIX_VEX_0F2E */ + /* X86_64_E8 */ { - { "vucomiss", { XMScalar, EXdScalar }, 0 }, - { Bad_Opcode }, - { "vucomisd", { XMScalar, EXqScalar }, 0 }, + { "callP", { Jv, BND }, 0 }, + { "call@", { Jv, BND }, 0 } }, - /* PREFIX_VEX_0F2F */ + /* X86_64_E9 */ { - { "vcomiss", { XMScalar, EXdScalar }, 0 }, - { Bad_Opcode }, - { "vcomisd", { XMScalar, EXqScalar }, 0 }, + { "jmpP", { Jv, BND }, 0 }, + { "jmp@", { Jv, BND }, 0 } }, - /* PREFIX_VEX_0F41 */ + /* X86_64_EA */ { - { VEX_LEN_TABLE (VEX_LEN_0F41_P_0) }, - { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0F41_P_2) }, + { "{l|}jmp{P|}", { Ap }, 0 }, }, - /* PREFIX_VEX_0F42 */ + /* X86_64_0F01_REG_0 */ { - { VEX_LEN_TABLE (VEX_LEN_0F42_P_0) }, - { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0F42_P_2) }, + { "sgdt{Q|Q}", { M }, 0 }, + { "sgdt", { M }, 0 }, }, - /* PREFIX_VEX_0F44 */ + /* X86_64_0F01_REG_1 */ { - { VEX_LEN_TABLE (VEX_LEN_0F44_P_0) }, - { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0F44_P_2) }, + { "sidt{Q|Q}", { M }, 0 }, + { "sidt", { M }, 0 }, }, - /* PREFIX_VEX_0F45 */ + /* X86_64_0F01_REG_2 */ { - { VEX_LEN_TABLE (VEX_LEN_0F45_P_0) }, - { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0F45_P_2) }, + { "lgdt{Q|Q}", { M }, 0 }, + { "lgdt", { M }, 0 }, }, - /* PREFIX_VEX_0F46 */ + /* X86_64_0F01_REG_3 */ { - { VEX_LEN_TABLE (VEX_LEN_0F46_P_0) }, - { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0F46_P_2) }, + { "lidt{Q|Q}", { M }, 0 }, + { "lidt", { M }, 0 }, }, - /* PREFIX_VEX_0F47 */ { - { VEX_LEN_TABLE (VEX_LEN_0F47_P_0) }, - { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0F47_P_2) }, + /* X86_64_0F24 */ + { "movZ", { Em, Td }, 0 }, }, - /* PREFIX_VEX_0F4A */ { - { VEX_LEN_TABLE (VEX_LEN_0F4A_P_0) }, - { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0F4A_P_2) }, + /* X86_64_0F26 */ + { "movZ", { Td, Em }, 0 }, }, - /* PREFIX_VEX_0F4B */ + /* X86_64_VEX_0F3849 */ { - { VEX_LEN_TABLE (VEX_LEN_0F4B_P_0) }, { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0F4B_P_2) }, - }, - - /* PREFIX_VEX_0F51 */ - { - { "vsqrtps", { XM, EXx }, 0 }, - { "vsqrtss", { XMScalar, VexScalar, EXdScalar }, 0 }, - { "vsqrtpd", { XM, EXx }, 0 }, - { "vsqrtsd", { XMScalar, VexScalar, EXqScalar }, 0 }, - }, - - /* PREFIX_VEX_0F52 */ - { - { "vrsqrtps", { XM, EXx }, 0 }, - { "vrsqrtss", { XMScalar, VexScalar, EXdScalar }, 0 }, - }, - - /* PREFIX_VEX_0F53 */ - { - { "vrcpps", { XM, EXx }, 0 }, - { "vrcpss", { XMScalar, VexScalar, EXdScalar }, 0 }, - }, - - /* PREFIX_VEX_0F58 */ - { - { "vaddps", { XM, Vex, EXx }, 0 }, - { "vaddss", { XMScalar, VexScalar, EXdScalar }, 0 }, - { "vaddpd", { XM, Vex, EXx }, 0 }, - { "vaddsd", { XMScalar, VexScalar, EXqScalar }, 0 }, + { PREFIX_TABLE (PREFIX_VEX_0F3849_X86_64) }, }, - /* PREFIX_VEX_0F59 */ + /* X86_64_VEX_0F384B */ { - { "vmulps", { XM, Vex, EXx }, 0 }, - { "vmulss", { XMScalar, VexScalar, EXdScalar }, 0 }, - { "vmulpd", { XM, Vex, EXx }, 0 }, - { "vmulsd", { XMScalar, VexScalar, EXqScalar }, 0 }, + { Bad_Opcode }, + { PREFIX_TABLE (PREFIX_VEX_0F384B_X86_64) }, }, - /* PREFIX_VEX_0F5A */ + /* X86_64_VEX_0F385C */ { - { "vcvtps2pd", { XM, EXxmmq }, 0 }, - { "vcvtss2sd", { XMScalar, VexScalar, EXdScalar }, 0 }, - { "vcvtpd2ps%XY",{ XMM, EXx }, 0 }, - { "vcvtsd2ss", { XMScalar, VexScalar, EXqScalar }, 0 }, + { Bad_Opcode }, + { PREFIX_TABLE (PREFIX_VEX_0F385C_X86_64) }, }, - /* PREFIX_VEX_0F5B */ + /* X86_64_VEX_0F385E */ { - { "vcvtdq2ps", { XM, EXx }, 0 }, - { "vcvttps2dq", { XM, EXx }, 0 }, - { "vcvtps2dq", { XM, EXx }, 0 }, + { Bad_Opcode }, + { PREFIX_TABLE (PREFIX_VEX_0F385E_X86_64) }, }, +}; - /* PREFIX_VEX_0F5C */ - { - { "vsubps", { XM, Vex, EXx }, 0 }, - { "vsubss", { XMScalar, VexScalar, EXdScalar }, 0 }, - { "vsubpd", { XM, Vex, EXx }, 0 }, - { "vsubsd", { XMScalar, VexScalar, EXqScalar }, 0 }, - }, +static const struct dis386 three_byte_table[][256] = { - /* PREFIX_VEX_0F5D */ - { - { "vminps", { XM, Vex, EXx }, 0 }, - { "vminss", { XMScalar, VexScalar, EXdScalar }, 0 }, - { "vminpd", { XM, Vex, EXx }, 0 }, - { "vminsd", { XMScalar, VexScalar, EXqScalar }, 0 }, - }, - - /* PREFIX_VEX_0F5E */ - { - { "vdivps", { XM, Vex, EXx }, 0 }, - { "vdivss", { XMScalar, VexScalar, EXdScalar }, 0 }, - { "vdivpd", { XM, Vex, EXx }, 0 }, - { "vdivsd", { XMScalar, VexScalar, EXqScalar }, 0 }, - }, - - /* PREFIX_VEX_0F5F */ - { - { "vmaxps", { XM, Vex, EXx }, 0 }, - { "vmaxss", { XMScalar, VexScalar, EXdScalar }, 0 }, - { "vmaxpd", { XM, Vex, EXx }, 0 }, - { "vmaxsd", { XMScalar, VexScalar, EXqScalar }, 0 }, - }, - - /* PREFIX_VEX_0F60 */ + /* THREE_BYTE_0F38 */ { + /* 00 */ + { "pshufb", { MX, EM }, PREFIX_OPCODE }, + { "phaddw", { MX, EM }, PREFIX_OPCODE }, + { "phaddd", { MX, EM }, PREFIX_OPCODE }, + { "phaddsw", { MX, EM }, PREFIX_OPCODE }, + { "pmaddubsw", { MX, EM }, PREFIX_OPCODE }, + { "phsubw", { MX, EM }, PREFIX_OPCODE }, + { "phsubd", { MX, EM }, PREFIX_OPCODE }, + { "phsubsw", { MX, EM }, PREFIX_OPCODE }, + /* 08 */ + { "psignb", { MX, EM }, PREFIX_OPCODE }, + { "psignw", { MX, EM }, PREFIX_OPCODE }, + { "psignd", { MX, EM }, PREFIX_OPCODE }, + { "pmulhrsw", { MX, EM }, PREFIX_OPCODE }, { Bad_Opcode }, { Bad_Opcode }, - { "vpunpcklbw", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0F61 */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vpunpcklwd", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0F62 */ - { + /* 10 */ + { "pblendvb", { XM, EXx, XMM0 }, PREFIX_DATA }, { Bad_Opcode }, { Bad_Opcode }, - { "vpunpckldq", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0F63 */ - { { Bad_Opcode }, + { "blendvps", { XM, EXx, XMM0 }, PREFIX_DATA }, + { "blendvpd", { XM, EXx, XMM0 }, PREFIX_DATA }, { Bad_Opcode }, - { "vpacksswb", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0F64 */ - { + { "ptest", { XM, EXx }, PREFIX_DATA }, + /* 18 */ { Bad_Opcode }, { Bad_Opcode }, - { "vpcmpgtb", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0F65 */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vpcmpgtw", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0F66 */ - { + { "pabsb", { MX, EM }, PREFIX_OPCODE }, + { "pabsw", { MX, EM }, PREFIX_OPCODE }, + { "pabsd", { MX, EM }, PREFIX_OPCODE }, { Bad_Opcode }, + /* 20 */ + { "pmovsxbw", { XM, EXq }, PREFIX_DATA }, + { "pmovsxbd", { XM, EXd }, PREFIX_DATA }, + { "pmovsxbq", { XM, EXw }, PREFIX_DATA }, + { "pmovsxwd", { XM, EXq }, PREFIX_DATA }, + { "pmovsxwq", { XM, EXd }, PREFIX_DATA }, + { "pmovsxdq", { XM, EXq }, PREFIX_DATA }, { Bad_Opcode }, - { "vpcmpgtd", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0F67 */ - { { Bad_Opcode }, + /* 28 */ + { "pmuldq", { XM, EXx }, PREFIX_DATA }, + { "pcmpeqq", { XM, EXx }, PREFIX_DATA }, + { MOD_TABLE (MOD_0F382A) }, + { "packusdw", { XM, EXx }, PREFIX_DATA }, { Bad_Opcode }, - { "vpackuswb", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0F68 */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vpunpckhbw", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0F69 */ - { { Bad_Opcode }, + /* 30 */ + { "pmovzxbw", { XM, EXq }, PREFIX_DATA }, + { "pmovzxbd", { XM, EXd }, PREFIX_DATA }, + { "pmovzxbq", { XM, EXw }, PREFIX_DATA }, + { "pmovzxwd", { XM, EXq }, PREFIX_DATA }, + { "pmovzxwq", { XM, EXd }, PREFIX_DATA }, + { "pmovzxdq", { XM, EXq }, PREFIX_DATA }, { Bad_Opcode }, - { "vpunpckhwd", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0F6A */ - { + { "pcmpgtq", { XM, EXx }, PREFIX_DATA }, + /* 38 */ + { "pminsb", { XM, EXx }, PREFIX_DATA }, + { "pminsd", { XM, EXx }, PREFIX_DATA }, + { "pminuw", { XM, EXx }, PREFIX_DATA }, + { "pminud", { XM, EXx }, PREFIX_DATA }, + { "pmaxsb", { XM, EXx }, PREFIX_DATA }, + { "pmaxsd", { XM, EXx }, PREFIX_DATA }, + { "pmaxuw", { XM, EXx }, PREFIX_DATA }, + { "pmaxud", { XM, EXx }, PREFIX_DATA }, + /* 40 */ + { "pmulld", { XM, EXx }, PREFIX_DATA }, + { "phminposuw", { XM, EXx }, PREFIX_DATA }, { Bad_Opcode }, { Bad_Opcode }, - { "vpunpckhdq", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0F6B */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vpackssdw", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0F6C */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vpunpcklqdq", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0F6D */ - { + /* 48 */ { Bad_Opcode }, { Bad_Opcode }, - { "vpunpckhqdq", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0F6E */ - { { Bad_Opcode }, { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0F6E_P_2) }, - }, - - /* PREFIX_VEX_0F6F */ - { { Bad_Opcode }, - { "vmovdqu", { XM, EXx }, 0 }, - { "vmovdqa", { XM, EXx }, 0 }, - }, - - /* PREFIX_VEX_0F70 */ - { { Bad_Opcode }, - { "vpshufhw", { XM, EXx, Ib }, 0 }, - { "vpshufd", { XM, EXx, Ib }, 0 }, - { "vpshuflw", { XM, EXx, Ib }, 0 }, - }, - - /* PREFIX_VEX_0F71_REG_2 */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vpsrlw", { Vex, XS, Ib }, 0 }, - }, - - /* PREFIX_VEX_0F71_REG_4 */ - { + /* 50 */ { Bad_Opcode }, { Bad_Opcode }, - { "vpsraw", { Vex, XS, Ib }, 0 }, - }, - - /* PREFIX_VEX_0F71_REG_6 */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vpsllw", { Vex, XS, Ib }, 0 }, - }, - - /* PREFIX_VEX_0F72_REG_2 */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vpsrld", { Vex, XS, Ib }, 0 }, - }, - - /* PREFIX_VEX_0F72_REG_4 */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vpsrad", { Vex, XS, Ib }, 0 }, - }, - - /* PREFIX_VEX_0F72_REG_6 */ - { + /* 58 */ { Bad_Opcode }, { Bad_Opcode }, - { "vpslld", { Vex, XS, Ib }, 0 }, - }, - - /* PREFIX_VEX_0F73_REG_2 */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vpsrlq", { Vex, XS, Ib }, 0 }, - }, - - /* PREFIX_VEX_0F73_REG_3 */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vpsrldq", { Vex, XS, Ib }, 0 }, - }, - - /* PREFIX_VEX_0F73_REG_6 */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vpsllq", { Vex, XS, Ib }, 0 }, - }, - - /* PREFIX_VEX_0F73_REG_7 */ - { + /* 60 */ { Bad_Opcode }, { Bad_Opcode }, - { "vpslldq", { Vex, XS, Ib }, 0 }, - }, - - /* PREFIX_VEX_0F74 */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vpcmpeqb", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0F75 */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vpcmpeqw", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0F76 */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vpcmpeqd", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0F77 */ - { - { VEX_LEN_TABLE (VEX_LEN_0F77_P_0) }, - }, - - /* PREFIX_VEX_0F7C */ - { + /* 68 */ { 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 }, - { VEX_LEN_TABLE (VEX_LEN_0F7E_P_1) }, - { VEX_LEN_TABLE (VEX_LEN_0F7E_P_2) }, - }, - - /* PREFIX_VEX_0F7F */ - { { Bad_Opcode }, - { "vmovdqu", { EXxS, XM }, 0 }, - { "vmovdqa", { EXxS, XM }, 0 }, - }, - - /* PREFIX_VEX_0F90 */ - { - { VEX_LEN_TABLE (VEX_LEN_0F90_P_0) }, { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0F90_P_2) }, - }, - - /* PREFIX_VEX_0F91 */ - { - { VEX_LEN_TABLE (VEX_LEN_0F91_P_0) }, { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0F91_P_2) }, - }, - - /* PREFIX_VEX_0F92 */ - { - { VEX_LEN_TABLE (VEX_LEN_0F92_P_0) }, + /* 70 */ { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0F92_P_2) }, - { VEX_LEN_TABLE (VEX_LEN_0F92_P_3) }, - }, - - /* PREFIX_VEX_0F93 */ - { - { VEX_LEN_TABLE (VEX_LEN_0F93_P_0) }, { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0F93_P_2) }, - { VEX_LEN_TABLE (VEX_LEN_0F93_P_3) }, - }, - - /* PREFIX_VEX_0F98 */ - { - { VEX_LEN_TABLE (VEX_LEN_0F98_P_0) }, { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0F98_P_2) }, - }, - - /* PREFIX_VEX_0F99 */ - { - { VEX_LEN_TABLE (VEX_LEN_0F99_P_0) }, { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0F99_P_2) }, - }, - - /* PREFIX_VEX_0FC2 */ - { - { "vcmpps", { XM, Vex, EXx, VCMP }, 0 }, - { "vcmpss", { XMScalar, VexScalar, EXdScalar, VCMP }, 0 }, - { "vcmppd", { XM, Vex, EXx, VCMP }, 0 }, - { "vcmpsd", { XMScalar, VexScalar, EXqScalar, VCMP }, 0 }, - }, - - /* PREFIX_VEX_0FC4 */ - { { Bad_Opcode }, { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0FC4_P_2) }, - }, - - /* PREFIX_VEX_0FC5 */ - { { Bad_Opcode }, { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0FC5_P_2) }, - }, - - /* PREFIX_VEX_0FD0 */ - { + /* 78 */ { Bad_Opcode }, { Bad_Opcode }, - { "vaddsubpd", { XM, Vex, EXx }, 0 }, - { "vaddsubps", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0FD1 */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vpsrlw", { XM, Vex, EXxmm }, 0 }, - }, - - /* PREFIX_VEX_0FD2 */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vpsrld", { XM, Vex, EXxmm }, 0 }, - }, - - /* PREFIX_VEX_0FD3 */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vpsrlq", { XM, Vex, EXxmm }, 0 }, - }, - - /* PREFIX_VEX_0FD4 */ - { + /* 80 */ + { "invept", { Gm, Mo }, PREFIX_DATA }, + { "invvpid", { Gm, Mo }, PREFIX_DATA }, + { "invpcid", { Gm, M }, PREFIX_DATA }, { Bad_Opcode }, { Bad_Opcode }, - { "vpaddq", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0FD5 */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vpmullw", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0FD6 */ - { { Bad_Opcode }, + /* 88 */ { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0FD6_P_2) }, - }, - - /* PREFIX_VEX_0FD7 */ - { { Bad_Opcode }, { Bad_Opcode }, - { MOD_TABLE (MOD_VEX_0FD7_PREFIX_2) }, - }, - - /* PREFIX_VEX_0FD8 */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vpsubusb", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0FD9 */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vpsubusw", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0FDA */ - { { Bad_Opcode }, + /* 90 */ { Bad_Opcode }, - { "vpminub", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0FDB */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vpand", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0FDC */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vpaddusb", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0FDD */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vpaddusw", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0FDE */ - { { Bad_Opcode }, + /* 98 */ { Bad_Opcode }, - { "vpmaxub", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0FDF */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vpandn", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0FE0 */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vpavgb", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0FE1 */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vpsraw", { XM, Vex, EXxmm }, 0 }, - }, - - /* PREFIX_VEX_0FE2 */ - { { Bad_Opcode }, + /* a0 */ { Bad_Opcode }, - { "vpsrad", { XM, Vex, EXxmm }, 0 }, - }, - - /* PREFIX_VEX_0FE3 */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vpavgw", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0FE4 */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vpmulhuw", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0FE5 */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vpmulhw", { 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_0FE7 */ - { + /* a8 */ { Bad_Opcode }, { Bad_Opcode }, - { MOD_TABLE (MOD_VEX_0FE7_PREFIX_2) }, - }, - - /* PREFIX_VEX_0FE8 */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vpsubsb", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0FE9 */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vpsubsw", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0FEA */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vpminsw", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0FEB */ - { + /* b0 */ { Bad_Opcode }, { Bad_Opcode }, - { "vpor", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0FEC */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vpaddsb", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0FED */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vpaddsw", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0FEE */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vpmaxsw", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0FEF */ - { + /* b8 */ { Bad_Opcode }, { Bad_Opcode }, - { "vpxor", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0FF0 */ - { { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - { MOD_TABLE (MOD_VEX_0FF0_PREFIX_3) }, - }, - - /* PREFIX_VEX_0FF1 */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vpsllw", { XM, Vex, EXxmm }, 0 }, - }, - - /* PREFIX_VEX_0FF2 */ - { { Bad_Opcode }, + /* c0 */ { Bad_Opcode }, - { "vpslld", { XM, Vex, EXxmm }, 0 }, - }, - - /* PREFIX_VEX_0FF3 */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vpsllq", { XM, Vex, EXxmm }, 0 }, - }, - - /* PREFIX_VEX_0FF4 */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vpmuludq", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0FF5 */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vpmaddwd", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0FF6 */ - { { Bad_Opcode }, + /* c8 */ + { "sha1nexte", { XM, EXxmm }, PREFIX_OPCODE }, + { "sha1msg1", { XM, EXxmm }, PREFIX_OPCODE }, + { "sha1msg2", { XM, EXxmm }, PREFIX_OPCODE }, + { "sha256rnds2", { XM, EXxmm, XMM0 }, PREFIX_OPCODE }, + { "sha256msg1", { XM, EXxmm }, PREFIX_OPCODE }, + { "sha256msg2", { XM, EXxmm }, PREFIX_OPCODE }, { Bad_Opcode }, - { "vpsadbw", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0FF7 */ - { + { "gf2p8mulb", { XM, EXxmm }, PREFIX_DATA }, + /* d0 */ { Bad_Opcode }, { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0FF7_P_2) }, - }, - - /* PREFIX_VEX_0FF8 */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vpsubb", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0FF9 */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vpsubw", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0FFA */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vpsubd", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0FFB */ - { + /* d8 */ { Bad_Opcode }, { Bad_Opcode }, - { "vpsubq", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0FFC */ - { { Bad_Opcode }, + { "aesimc", { XM, EXx }, PREFIX_DATA }, + { "aesenc", { XM, EXx }, PREFIX_DATA }, + { "aesenclast", { XM, EXx }, PREFIX_DATA }, + { "aesdec", { XM, EXx }, PREFIX_DATA }, + { "aesdeclast", { XM, EXx }, PREFIX_DATA }, + /* e0 */ { Bad_Opcode }, - { "vpaddb", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0FFD */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vpaddw", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0FFE */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vpaddd", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0F3800 */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vpshufb", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0F3801 */ - { { Bad_Opcode }, + /* e8 */ { Bad_Opcode }, - { "vphaddw", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0F3802 */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vphaddd", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0F3803 */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vphaddsw", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0F3804 */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vpmaddubsw", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0F3805 */ - { + { Bad_Opcode }, + /* f0 */ + { PREFIX_TABLE (PREFIX_0F38F0) }, + { PREFIX_TABLE (PREFIX_0F38F1) }, { Bad_Opcode }, { Bad_Opcode }, - { "vphsubw", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0F3806 */ - { { Bad_Opcode }, + { MOD_TABLE (MOD_0F38F5) }, + { PREFIX_TABLE (PREFIX_0F38F6) }, { Bad_Opcode }, - { "vphsubd", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0F3807 */ - { + /* f8 */ + { PREFIX_TABLE (PREFIX_0F38F8) }, + { MOD_TABLE (MOD_0F38F9) }, { Bad_Opcode }, { Bad_Opcode }, - { "vphsubsw", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0F3808 */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vpsignb", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0F3809 */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vpsignw", { XM, Vex, EXx }, 0 }, }, - - /* PREFIX_VEX_0F380A */ + /* THREE_BYTE_0F3A */ { + /* 00 */ { Bad_Opcode }, { Bad_Opcode }, - { "vpsignd", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0F380B */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vpmulhrsw", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0F380C */ - { { Bad_Opcode }, { Bad_Opcode }, - { VEX_W_TABLE (VEX_W_0F380C_P_2) }, - }, - - /* PREFIX_VEX_0F380D */ - { { Bad_Opcode }, { Bad_Opcode }, - { VEX_W_TABLE (VEX_W_0F380D_P_2) }, - }, - - /* PREFIX_VEX_0F380E */ - { + /* 08 */ + { "roundps", { XM, EXx, Ib }, PREFIX_DATA }, + { "roundpd", { XM, EXx, Ib }, PREFIX_DATA }, + { "roundss", { XM, EXd, Ib }, PREFIX_DATA }, + { "roundsd", { XM, EXq, Ib }, PREFIX_DATA }, + { "blendps", { XM, EXx, Ib }, PREFIX_DATA }, + { "blendpd", { XM, EXx, Ib }, PREFIX_DATA }, + { "pblendw", { XM, EXx, Ib }, PREFIX_DATA }, + { "palignr", { MX, EM, Ib }, PREFIX_OPCODE }, + /* 10 */ { Bad_Opcode }, { Bad_Opcode }, - { VEX_W_TABLE (VEX_W_0F380E_P_2) }, - }, - - /* PREFIX_VEX_0F380F */ - { { Bad_Opcode }, { Bad_Opcode }, - { VEX_W_TABLE (VEX_W_0F380F_P_2) }, - }, - - /* PREFIX_VEX_0F3813 */ - { + { "pextrb", { Edqb, XM, Ib }, PREFIX_DATA }, + { "pextrw", { Edqw, XM, Ib }, PREFIX_DATA }, + { "pextrK", { Edq, XM, Ib }, PREFIX_DATA }, + { "extractps", { Edqd, XM, Ib }, PREFIX_DATA }, + /* 18 */ { Bad_Opcode }, { Bad_Opcode }, - { "vcvtph2ps", { XM, EXxmmq }, 0 }, - }, - - /* PREFIX_VEX_0F3816 */ - { { Bad_Opcode }, { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0F3816_P_2) }, - }, - - /* PREFIX_VEX_0F3817 */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vptest", { XM, EXx }, 0 }, - }, - - /* PREFIX_VEX_0F3818 */ - { { Bad_Opcode }, { Bad_Opcode }, - { VEX_W_TABLE (VEX_W_0F3818_P_2) }, - }, - - /* PREFIX_VEX_0F3819 */ - { + /* 20 */ + { "pinsrb", { XM, Edqb, Ib }, PREFIX_DATA }, + { "insertps", { XM, EXd, Ib }, PREFIX_DATA }, + { "pinsrK", { XM, Edq, Ib }, PREFIX_DATA }, { Bad_Opcode }, { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0F3819_P_2) }, - }, - - /* PREFIX_VEX_0F381A */ - { { Bad_Opcode }, { Bad_Opcode }, - { MOD_TABLE (MOD_VEX_0F381A_PREFIX_2) }, - }, - - /* PREFIX_VEX_0F381C */ - { { Bad_Opcode }, + /* 28 */ { Bad_Opcode }, - { "vpabsb", { XM, EXx }, 0 }, - }, - - /* PREFIX_VEX_0F381D */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vpabsw", { XM, EXx }, 0 }, - }, - - /* PREFIX_VEX_0F381E */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vpabsd", { XM, EXx }, 0 }, - }, - - /* PREFIX_VEX_0F3820 */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vpmovsxbw", { XM, EXxmmq }, 0 }, - }, - - /* PREFIX_VEX_0F3821 */ - { { Bad_Opcode }, + /* 30 */ { Bad_Opcode }, - { "vpmovsxbd", { XM, EXxmmqd }, 0 }, - }, - - /* PREFIX_VEX_0F3822 */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vpmovsxbq", { XM, EXxmmdw }, 0 }, - }, - - /* PREFIX_VEX_0F3823 */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vpmovsxwd", { XM, EXxmmq }, 0 }, - }, - - /* PREFIX_VEX_0F3824 */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vpmovsxwq", { XM, EXxmmqd }, 0 }, - }, - - /* PREFIX_VEX_0F3825 */ - { { Bad_Opcode }, + /* 38 */ { Bad_Opcode }, - { "vpmovsxdq", { XM, EXxmmq }, 0 }, - }, - - /* PREFIX_VEX_0F3828 */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vpmuldq", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0F3829 */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vpcmpeqq", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0F382A */ - { { Bad_Opcode }, { Bad_Opcode }, - { MOD_TABLE (MOD_VEX_0F382A_PREFIX_2) }, - }, - - /* PREFIX_VEX_0F382B */ - { { Bad_Opcode }, + /* 40 */ + { "dpps", { XM, EXx, Ib }, PREFIX_DATA }, + { "dppd", { XM, EXx, Ib }, PREFIX_DATA }, + { "mpsadbw", { XM, EXx, Ib }, PREFIX_DATA }, { Bad_Opcode }, - { "vpackusdw", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0F382C */ - { + { "pclmulqdq", { XM, EXx, PCLMUL }, PREFIX_DATA }, { Bad_Opcode }, { Bad_Opcode }, - { MOD_TABLE (MOD_VEX_0F382C_PREFIX_2) }, - }, - - /* PREFIX_VEX_0F382D */ - { { Bad_Opcode }, + /* 48 */ { Bad_Opcode }, - { MOD_TABLE (MOD_VEX_0F382D_PREFIX_2) }, - }, - - /* PREFIX_VEX_0F382E */ - { { Bad_Opcode }, { Bad_Opcode }, - { MOD_TABLE (MOD_VEX_0F382E_PREFIX_2) }, - }, - - /* PREFIX_VEX_0F382F */ - { { Bad_Opcode }, { Bad_Opcode }, - { MOD_TABLE (MOD_VEX_0F382F_PREFIX_2) }, - }, - - /* PREFIX_VEX_0F3830 */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vpmovzxbw", { XM, EXxmmq }, 0 }, - }, - - /* PREFIX_VEX_0F3831 */ - { { Bad_Opcode }, + /* 50 */ { Bad_Opcode }, - { "vpmovzxbd", { XM, EXxmmqd }, 0 }, - }, - - /* PREFIX_VEX_0F3832 */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vpmovzxbq", { XM, EXxmmdw }, 0 }, - }, - - /* PREFIX_VEX_0F3833 */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vpmovzxwd", { XM, EXxmmq }, 0 }, - }, - - /* PREFIX_VEX_0F3834 */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vpmovzxwq", { XM, EXxmmqd }, 0 }, - }, - - /* PREFIX_VEX_0F3835 */ - { { Bad_Opcode }, + /* 58 */ { Bad_Opcode }, - { "vpmovzxdq", { XM, EXxmmq }, 0 }, - }, - - /* PREFIX_VEX_0F3836 */ - { { Bad_Opcode }, { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0F3836_P_2) }, - }, - - /* PREFIX_VEX_0F3837 */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vpcmpgtq", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0F3838 */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vpminsb", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0F3839 */ - { { Bad_Opcode }, + /* 60 */ + { "pcmpestrm!%LQ", { XM, EXx, Ib }, PREFIX_DATA }, + { "pcmpestri!%LQ", { XM, EXx, Ib }, PREFIX_DATA }, + { "pcmpistrm", { XM, EXx, Ib }, PREFIX_DATA }, + { "pcmpistri", { XM, EXx, Ib }, PREFIX_DATA }, { Bad_Opcode }, - { "vpminsd", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0F383A */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vpminuw", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0F383B */ - { { Bad_Opcode }, + /* 68 */ { Bad_Opcode }, - { "vpminud", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0F383C */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vpmaxsb", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0F383D */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vpmaxsd", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0F383E */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vpmaxuw", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0F383F */ - { { Bad_Opcode }, + /* 70 */ { Bad_Opcode }, - { "vpmaxud", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0F3840 */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vpmulld", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0F3841 */ - { { Bad_Opcode }, { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0F3841_P_2) }, - }, - - /* PREFIX_VEX_0F3845 */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vpsrlv%LW", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0F3846 */ - { { Bad_Opcode }, + /* 78 */ { Bad_Opcode }, - { VEX_W_TABLE (VEX_W_0F3846_P_2) }, - }, - - /* PREFIX_VEX_0F3847 */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vpsllv%LW", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0F3858 */ - { { Bad_Opcode }, { Bad_Opcode }, - { VEX_W_TABLE (VEX_W_0F3858_P_2) }, - }, - - /* PREFIX_VEX_0F3859 */ - { { Bad_Opcode }, { Bad_Opcode }, - { VEX_W_TABLE (VEX_W_0F3859_P_2) }, - }, - - /* PREFIX_VEX_0F385A */ - { { Bad_Opcode }, + /* 80 */ { Bad_Opcode }, - { MOD_TABLE (MOD_VEX_0F385A_PREFIX_2) }, - }, - - /* PREFIX_VEX_0F3878 */ - { { Bad_Opcode }, { Bad_Opcode }, - { VEX_W_TABLE (VEX_W_0F3878_P_2) }, - }, - - /* PREFIX_VEX_0F3879 */ - { { Bad_Opcode }, { Bad_Opcode }, - { VEX_W_TABLE (VEX_W_0F3879_P_2) }, - }, - - /* PREFIX_VEX_0F388C */ - { { Bad_Opcode }, { Bad_Opcode }, - { MOD_TABLE (MOD_VEX_0F388C_PREFIX_2) }, - }, - - /* PREFIX_VEX_0F388E */ - { { Bad_Opcode }, + /* 88 */ { Bad_Opcode }, - { MOD_TABLE (MOD_VEX_0F388E_PREFIX_2) }, - }, - - /* PREFIX_VEX_0F3890 */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vpgatherd%LW", { XM, MVexVSIBDWpX, Vex }, 0 }, - }, - - /* PREFIX_VEX_0F3891 */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vpgatherq%LW", { XMGatherQ, MVexVSIBQWpX, VexGatherQ }, 0 }, - }, - - /* PREFIX_VEX_0F3892 */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vgatherdp%XW", { XM, MVexVSIBDWpX, Vex }, 0 }, - }, - - /* PREFIX_VEX_0F3893 */ - { { Bad_Opcode }, + /* 90 */ { Bad_Opcode }, - { "vgatherqp%XW", { XMGatherQ, MVexVSIBQWpX, VexGatherQ }, 0 }, - }, - - /* PREFIX_VEX_0F3896 */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vfmaddsub132p%XW", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0F3897 */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vfmsubadd132p%XW", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0F3898 */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vfmadd132p%XW", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0F3899 */ - { { Bad_Opcode }, + /* 98 */ { Bad_Opcode }, - { "vfmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 }, - }, - - /* PREFIX_VEX_0F389A */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vfmsub132p%XW", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0F389B */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vfmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 }, - }, - - /* PREFIX_VEX_0F389C */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vfnmadd132p%XW", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0F389D */ - { { Bad_Opcode }, + /* a0 */ { Bad_Opcode }, - { "vfnmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 }, - }, - - /* PREFIX_VEX_0F389E */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vfnmsub132p%XW", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0F389F */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vfnmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 }, - }, - - /* PREFIX_VEX_0F38A6 */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vfmaddsub213p%XW", { XM, Vex, EXx }, 0 }, { Bad_Opcode }, - }, - - /* PREFIX_VEX_0F38A7 */ - { + /* a8 */ { Bad_Opcode }, { Bad_Opcode }, - { "vfmsubadd213p%XW", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0F38A8 */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vfmadd213p%XW", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0F38A9 */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vfmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 }, - }, - - /* PREFIX_VEX_0F38AA */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vfmsub213p%XW", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0F38AB */ - { + /* b0 */ { Bad_Opcode }, { Bad_Opcode }, - { "vfmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 }, - }, - - /* PREFIX_VEX_0F38AC */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vfnmadd213p%XW", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0F38AD */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vfnmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 }, - }, - - /* PREFIX_VEX_0F38AE */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vfnmsub213p%XW", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0F38AF */ - { + /* b8 */ { Bad_Opcode }, { Bad_Opcode }, - { "vfnmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 }, - }, - - /* PREFIX_VEX_0F38B6 */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vfmaddsub231p%XW", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0F38B7 */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vfmsubadd231p%XW", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0F38B8 */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vfmadd231p%XW", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0F38B9 */ - { + /* c0 */ { Bad_Opcode }, { Bad_Opcode }, - { "vfmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 }, - }, - - /* PREFIX_VEX_0F38BA */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vfmsub231p%XW", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0F38BB */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vfmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 }, - }, - - /* PREFIX_VEX_0F38BC */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vfnmadd231p%XW", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0F38BD */ - { + /* c8 */ { Bad_Opcode }, { Bad_Opcode }, - { "vfnmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 }, - }, - - /* PREFIX_VEX_0F38BE */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vfnmsub231p%XW", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0F38BF */ - { + { "sha1rnds4", { XM, EXxmm, Ib }, PREFIX_OPCODE }, { Bad_Opcode }, + { "gf2p8affineqb", { XM, EXxmm, Ib }, PREFIX_DATA }, + { "gf2p8affineinvqb", { XM, EXxmm, Ib }, PREFIX_DATA }, + /* d0 */ { Bad_Opcode }, - { "vfnmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 }, - }, - - /* PREFIX_VEX_0F38CF */ - { { Bad_Opcode }, { Bad_Opcode }, - { VEX_W_TABLE (VEX_W_0F38CF_P_2) }, - }, - - /* PREFIX_VEX_0F38DB */ - { { Bad_Opcode }, { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0F38DB_P_2) }, - }, - - /* PREFIX_VEX_0F38DC */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vaesenc", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0F38DD */ - { { Bad_Opcode }, + /* d8 */ { Bad_Opcode }, - { "vaesenclast", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0F38DE */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vaesdec", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0F38DF */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vaesdeclast", { XM, Vex, EXx }, 0 }, - }, - - /* PREFIX_VEX_0F38F2 */ - { - { VEX_LEN_TABLE (VEX_LEN_0F38F2_P_0) }, - }, - - /* PREFIX_VEX_0F38F3_REG_1 */ - { - { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_1_P_0) }, - }, - - /* PREFIX_VEX_0F38F3_REG_2 */ - { - { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_2_P_0) }, - }, - - /* PREFIX_VEX_0F38F3_REG_3 */ - { - { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_3_P_0) }, - }, - - /* PREFIX_VEX_0F38F5 */ - { - { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_0) }, - { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_1) }, { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_3) }, - }, - - /* PREFIX_VEX_0F38F6 */ - { { Bad_Opcode }, + { "aeskeygenassist", { XM, EXx, Ib }, PREFIX_DATA }, + /* e0 */ { Bad_Opcode }, { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0F38F6_P_3) }, - }, - - /* PREFIX_VEX_0F38F7 */ - { - { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_0) }, - { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_1) }, - { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_2) }, - { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_3) }, - }, - - /* PREFIX_VEX_0F3A00 */ - { { Bad_Opcode }, { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0F3A00_P_2) }, - }, - - /* PREFIX_VEX_0F3A01 */ - { { Bad_Opcode }, { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0F3A01_P_2) }, - }, - - /* PREFIX_VEX_0F3A02 */ - { { Bad_Opcode }, { Bad_Opcode }, - { VEX_W_TABLE (VEX_W_0F3A02_P_2) }, - }, - - /* PREFIX_VEX_0F3A04 */ - { + /* e8 */ { Bad_Opcode }, { Bad_Opcode }, - { VEX_W_TABLE (VEX_W_0F3A04_P_2) }, - }, - - /* PREFIX_VEX_0F3A05 */ - { { Bad_Opcode }, { Bad_Opcode }, - { VEX_W_TABLE (VEX_W_0F3A05_P_2) }, - }, - - /* PREFIX_VEX_0F3A06 */ - { { Bad_Opcode }, { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0F3A06_P_2) }, - }, - - /* PREFIX_VEX_0F3A08 */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vroundps", { XM, EXx, Ib }, 0 }, - }, - - /* PREFIX_VEX_0F3A09 */ - { + /* f0 */ { Bad_Opcode }, { Bad_Opcode }, - { "vroundpd", { XM, EXx, Ib }, 0 }, - }, - - /* PREFIX_VEX_0F3A0A */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vroundss", { XMScalar, VexScalar, EXdScalar, Ib }, 0 }, - }, - - /* PREFIX_VEX_0F3A0B */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vroundsd", { XMScalar, VexScalar, EXqScalar, Ib }, 0 }, - }, - - /* PREFIX_VEX_0F3A0C */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vblendps", { XM, Vex, EXx, Ib }, 0 }, - }, - - /* PREFIX_VEX_0F3A0D */ - { + /* f8 */ { Bad_Opcode }, { Bad_Opcode }, - { "vblendpd", { XM, Vex, EXx, Ib }, 0 }, - }, - - /* PREFIX_VEX_0F3A0E */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vpblendw", { XM, Vex, EXx, Ib }, 0 }, - }, - - /* PREFIX_VEX_0F3A0F */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vpalignr", { XM, Vex, EXx, Ib }, 0 }, - }, - - /* PREFIX_VEX_0F3A14 */ - { { Bad_Opcode }, { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0F3A14_P_2) }, }, +}; - /* PREFIX_VEX_0F3A15 */ +static const struct dis386 xop_table[][256] = { + /* XOP_08 */ { + /* 00 */ { Bad_Opcode }, { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0F3A15_P_2) }, - }, - - /* PREFIX_VEX_0F3A16 */ - { { Bad_Opcode }, { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0F3A16_P_2) }, - }, - - /* PREFIX_VEX_0F3A17 */ - { { Bad_Opcode }, { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0F3A17_P_2) }, - }, - - /* PREFIX_VEX_0F3A18 */ - { { Bad_Opcode }, { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0F3A18_P_2) }, - }, - - /* PREFIX_VEX_0F3A19 */ - { + /* 08 */ { Bad_Opcode }, { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0F3A19_P_2) }, - }, - - /* PREFIX_VEX_0F3A1D */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vcvtps2ph", { EXxmmq, XM, Ib }, 0 }, - }, - - /* PREFIX_VEX_0F3A20 */ - { { Bad_Opcode }, { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0F3A20_P_2) }, - }, - - /* PREFIX_VEX_0F3A21 */ - { { Bad_Opcode }, { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0F3A21_P_2) }, - }, - - /* PREFIX_VEX_0F3A22 */ - { + /* 10 */ { Bad_Opcode }, { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0F3A22_P_2) }, - }, - - /* PREFIX_VEX_0F3A30 */ - { { Bad_Opcode }, { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0F3A30_P_2) }, - }, - - /* PREFIX_VEX_0F3A31 */ - { { Bad_Opcode }, { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0F3A31_P_2) }, - }, - - /* PREFIX_VEX_0F3A32 */ - { { Bad_Opcode }, { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0F3A32_P_2) }, - }, - - /* PREFIX_VEX_0F3A33 */ - { + /* 18 */ { Bad_Opcode }, { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0F3A33_P_2) }, - }, - - /* PREFIX_VEX_0F3A38 */ - { { Bad_Opcode }, { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0F3A38_P_2) }, - }, - - /* PREFIX_VEX_0F3A39 */ - { { Bad_Opcode }, { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0F3A39_P_2) }, - }, - - /* PREFIX_VEX_0F3A40 */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vdpps", { XM, Vex, EXx, Ib }, 0 }, - }, - - /* PREFIX_VEX_0F3A41 */ - { + /* 20 */ { Bad_Opcode }, { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0F3A41_P_2) }, - }, - - /* PREFIX_VEX_0F3A42 */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vmpsadbw", { XM, Vex, EXx, Ib }, 0 }, - }, - - /* PREFIX_VEX_0F3A44 */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vpclmulqdq", { XM, Vex, EXx, PCLMUL }, 0 }, - }, - - /* PREFIX_VEX_0F3A46 */ - { { Bad_Opcode }, { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0F3A46_P_2) }, - }, - - /* PREFIX_VEX_0F3A48 */ - { + /* 28 */ { Bad_Opcode }, { Bad_Opcode }, - { VEX_W_TABLE (VEX_W_0F3A48_P_2) }, - }, - - /* PREFIX_VEX_0F3A49 */ - { { Bad_Opcode }, { Bad_Opcode }, - { VEX_W_TABLE (VEX_W_0F3A49_P_2) }, - }, - - /* PREFIX_VEX_0F3A4A */ - { { Bad_Opcode }, { Bad_Opcode }, - { VEX_W_TABLE (VEX_W_0F3A4A_P_2) }, - }, - - /* PREFIX_VEX_0F3A4B */ - { { Bad_Opcode }, { Bad_Opcode }, - { VEX_W_TABLE (VEX_W_0F3A4B_P_2) }, - }, - - /* PREFIX_VEX_0F3A4C */ - { + /* 30 */ { Bad_Opcode }, { Bad_Opcode }, - { VEX_W_TABLE (VEX_W_0F3A4C_P_2) }, - }, - - /* PREFIX_VEX_0F3A5C */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vfmaddsubps", { XMVexW, Vex, EXVexW, EXVexW }, 0 }, - }, - - /* PREFIX_VEX_0F3A5D */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vfmaddsubpd", { XMVexW, Vex, EXVexW, EXVexW }, 0 }, - }, - - /* PREFIX_VEX_0F3A5E */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vfmsubaddps", { XMVexW, Vex, EXVexW, EXVexW }, 0 }, - }, - - /* PREFIX_VEX_0F3A5F */ - { + /* 38 */ { Bad_Opcode }, { Bad_Opcode }, - { "vfmsubaddpd", { XMVexW, Vex, EXVexW, EXVexW }, 0 }, - }, - - /* PREFIX_VEX_0F3A60 */ - { { Bad_Opcode }, { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0F3A60_P_2) }, { Bad_Opcode }, - }, - - /* PREFIX_VEX_0F3A61 */ - { { Bad_Opcode }, { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0F3A61_P_2) }, - }, - - /* PREFIX_VEX_0F3A62 */ - { { Bad_Opcode }, + /* 40 */ { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0F3A62_P_2) }, - }, - - /* PREFIX_VEX_0F3A63 */ - { { Bad_Opcode }, { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0F3A63_P_2) }, - }, - - /* PREFIX_VEX_0F3A68 */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vfmaddps", { XMVexW, Vex, EXVexW, EXVexW }, 0 }, - }, - - /* PREFIX_VEX_0F3A69 */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vfmaddpd", { XMVexW, Vex, EXVexW, EXVexW }, 0 }, - }, - - /* PREFIX_VEX_0F3A6A */ - { { Bad_Opcode }, + /* 48 */ { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0F3A6A_P_2) }, - }, - - /* PREFIX_VEX_0F3A6B */ - { { Bad_Opcode }, { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0F3A6B_P_2) }, - }, - - /* PREFIX_VEX_0F3A6C */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vfmsubps", { XMVexW, Vex, EXVexW, EXVexW }, 0 }, - }, - - /* PREFIX_VEX_0F3A6D */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vfmsubpd", { XMVexW, Vex, EXVexW, EXVexW }, 0 }, - }, - - /* PREFIX_VEX_0F3A6E */ - { { Bad_Opcode }, + /* 50 */ { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0F3A6E_P_2) }, - }, - - /* PREFIX_VEX_0F3A6F */ - { { Bad_Opcode }, { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0F3A6F_P_2) }, - }, - - /* PREFIX_VEX_0F3A78 */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vfnmaddps", { XMVexW, Vex, EXVexW, EXVexW }, 0 }, - }, - - /* PREFIX_VEX_0F3A79 */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vfnmaddpd", { XMVexW, Vex, EXVexW, EXVexW }, 0 }, - }, - - /* PREFIX_VEX_0F3A7A */ - { { Bad_Opcode }, + /* 58 */ { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0F3A7A_P_2) }, - }, - - /* PREFIX_VEX_0F3A7B */ - { { Bad_Opcode }, { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0F3A7B_P_2) }, - }, - - /* PREFIX_VEX_0F3A7C */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vfnmsubps", { XMVexW, Vex, EXVexW, EXVexW }, 0 }, { Bad_Opcode }, - }, - - /* PREFIX_VEX_0F3A7D */ - { { Bad_Opcode }, { Bad_Opcode }, - { "vfnmsubpd", { XMVexW, Vex, EXVexW, EXVexW }, 0 }, - }, - - /* PREFIX_VEX_0F3A7E */ - { + /* 60 */ { Bad_Opcode }, { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0F3A7E_P_2) }, - }, - - /* PREFIX_VEX_0F3A7F */ - { { Bad_Opcode }, { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0F3A7F_P_2) }, - }, - - /* PREFIX_VEX_0F3ACE */ - { { Bad_Opcode }, { Bad_Opcode }, - { VEX_W_TABLE (VEX_W_0F3ACE_P_2) }, - }, - - /* PREFIX_VEX_0F3ACF */ - { { Bad_Opcode }, { Bad_Opcode }, - { VEX_W_TABLE (VEX_W_0F3ACF_P_2) }, - }, - - /* PREFIX_VEX_0F3ADF */ - { + /* 68 */ { Bad_Opcode }, { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0F3ADF_P_2) }, - }, - - /* PREFIX_VEX_0F3AF0 */ - { { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - { VEX_LEN_TABLE (VEX_LEN_0F3AF0_P_3) }, - }, - -#include "i386-dis-evex-prefix.h" -}; - -static const struct dis386 x86_64_table[][2] = { - /* X86_64_06 */ - { - { "pushP", { es }, 0 }, - }, - - /* X86_64_07 */ - { - { "popP", { es }, 0 }, - }, - - /* X86_64_0D */ - { - { "pushP", { cs }, 0 }, - }, - - /* X86_64_16 */ - { - { "pushP", { ss }, 0 }, - }, - - /* X86_64_17 */ - { - { "popP", { ss }, 0 }, - }, - - /* X86_64_1E */ - { - { "pushP", { ds }, 0 }, - }, - - /* X86_64_1F */ - { - { "popP", { ds }, 0 }, - }, - - /* X86_64_27 */ - { - { "daa", { XX }, 0 }, - }, - - /* X86_64_2F */ - { - { "das", { XX }, 0 }, - }, - - /* X86_64_37 */ - { - { "aaa", { XX }, 0 }, - }, - - /* X86_64_3F */ - { - { "aas", { XX }, 0 }, - }, - - /* X86_64_60 */ - { - { "pushaP", { XX }, 0 }, - }, - - /* X86_64_61 */ - { - { "popaP", { XX }, 0 }, - }, - - /* X86_64_62 */ - { - { MOD_TABLE (MOD_62_32BIT) }, - { EVEX_TABLE (EVEX_0F) }, - }, - - /* X86_64_63 */ - { - { "arpl", { Ew, Gw }, 0 }, - { "movs{lq|xd}", { Gv, Ed }, 0 }, - }, - - /* X86_64_6D */ - { - { "ins{R|}", { Yzr, indirDX }, 0 }, - { "ins{G|}", { Yzr, indirDX }, 0 }, - }, - - /* X86_64_6F */ - { - { "outs{R|}", { indirDXr, Xz }, 0 }, - { "outs{G|}", { indirDXr, Xz }, 0 }, - }, - - /* X86_64_82 */ - { - /* Opcode 0x82 is an alias of opcode 0x80 in 32-bit mode. */ - { REG_TABLE (REG_80) }, - }, - - /* X86_64_9A */ - { - { "Jcall{T|}", { Ap }, 0 }, - }, - - /* X86_64_C4 */ - { - { MOD_TABLE (MOD_C4_32BIT) }, - { VEX_C4_TABLE (VEX_0F) }, - }, - - /* X86_64_C5 */ - { - { MOD_TABLE (MOD_C5_32BIT) }, - { VEX_C5_TABLE (VEX_0F) }, - }, - - /* X86_64_CE */ - { - { "into", { XX }, 0 }, - }, - - /* X86_64_D4 */ - { - { "aam", { Ib }, 0 }, - }, - - /* X86_64_D5 */ - { - { "aad", { Ib }, 0 }, - }, - - /* X86_64_E8 */ - { - { "callP", { Jv, BND }, 0 }, - { "call@", { Jv, BND }, 0 } - }, - - /* X86_64_E9 */ - { - { "jmpP", { Jv, BND }, 0 }, - { "jmp@", { Jv, BND }, 0 } - }, - - /* X86_64_EA */ - { - { "Jjmp{T|}", { Ap }, 0 }, - }, - - /* X86_64_0F01_REG_0 */ - { - { "sgdt{Q|IQ}", { M }, 0 }, - { "sgdt", { M }, 0 }, - }, - - /* X86_64_0F01_REG_1 */ - { - { "sidt{Q|IQ}", { M }, 0 }, - { "sidt", { M }, 0 }, - }, - - /* X86_64_0F01_REG_2 */ - { - { "lgdt{Q|Q}", { M }, 0 }, - { "lgdt", { M }, 0 }, - }, - - /* X86_64_0F01_REG_3 */ - { - { "lidt{Q|Q}", { M }, 0 }, - { "lidt", { M }, 0 }, - }, -}; - -static const struct dis386 three_byte_table[][256] = { - - /* THREE_BYTE_0F38 */ - { - /* 00 */ - { "pshufb", { MX, EM }, PREFIX_OPCODE }, - { "phaddw", { MX, EM }, PREFIX_OPCODE }, - { "phaddd", { MX, EM }, PREFIX_OPCODE }, - { "phaddsw", { MX, EM }, PREFIX_OPCODE }, - { "pmaddubsw", { MX, EM }, PREFIX_OPCODE }, - { "phsubw", { MX, EM }, PREFIX_OPCODE }, - { "phsubd", { MX, EM }, PREFIX_OPCODE }, - { "phsubsw", { MX, EM }, PREFIX_OPCODE }, - /* 08 */ - { "psignb", { MX, EM }, PREFIX_OPCODE }, - { "psignw", { MX, EM }, PREFIX_OPCODE }, - { "psignd", { MX, EM }, PREFIX_OPCODE }, - { "pmulhrsw", { MX, EM }, PREFIX_OPCODE }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, + /* 70 */ { Bad_Opcode }, - /* 10 */ - { PREFIX_TABLE (PREFIX_0F3810) }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_0F3814) }, - { PREFIX_TABLE (PREFIX_0F3815) }, { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_0F3817) }, - /* 18 */ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, + /* 78 */ { Bad_Opcode }, - { "pabsb", { MX, EM }, PREFIX_OPCODE }, - { "pabsw", { MX, EM }, PREFIX_OPCODE }, - { "pabsd", { MX, EM }, PREFIX_OPCODE }, { Bad_Opcode }, - /* 20 */ - { PREFIX_TABLE (PREFIX_0F3820) }, - { PREFIX_TABLE (PREFIX_0F3821) }, - { PREFIX_TABLE (PREFIX_0F3822) }, - { PREFIX_TABLE (PREFIX_0F3823) }, - { PREFIX_TABLE (PREFIX_0F3824) }, - { PREFIX_TABLE (PREFIX_0F3825) }, { Bad_Opcode }, { Bad_Opcode }, - /* 28 */ - { PREFIX_TABLE (PREFIX_0F3828) }, - { PREFIX_TABLE (PREFIX_0F3829) }, - { PREFIX_TABLE (PREFIX_0F382A) }, - { PREFIX_TABLE (PREFIX_0F382B) }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - /* 30 */ - { PREFIX_TABLE (PREFIX_0F3830) }, - { PREFIX_TABLE (PREFIX_0F3831) }, - { PREFIX_TABLE (PREFIX_0F3832) }, - { PREFIX_TABLE (PREFIX_0F3833) }, - { PREFIX_TABLE (PREFIX_0F3834) }, - { PREFIX_TABLE (PREFIX_0F3835) }, + /* 80 */ { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_0F3837) }, - /* 38 */ - { PREFIX_TABLE (PREFIX_0F3838) }, - { PREFIX_TABLE (PREFIX_0F3839) }, - { PREFIX_TABLE (PREFIX_0F383A) }, - { PREFIX_TABLE (PREFIX_0F383B) }, - { PREFIX_TABLE (PREFIX_0F383C) }, - { PREFIX_TABLE (PREFIX_0F383D) }, - { PREFIX_TABLE (PREFIX_0F383E) }, - { PREFIX_TABLE (PREFIX_0F383F) }, - /* 40 */ - { PREFIX_TABLE (PREFIX_0F3840) }, - { PREFIX_TABLE (PREFIX_0F3841) }, { Bad_Opcode }, { 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) }, + /* 88 */ { Bad_Opcode }, { Bad_Opcode }, - /* 48 */ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_8E) }, + { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_8F) }, + /* 90 */ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - /* 50 */ { 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) }, + /* 98 */ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_9E) }, + { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_9F) }, + /* a0 */ { Bad_Opcode }, - /* 58 */ { Bad_Opcode }, + { "vpcmov", { XM, Vex, EXx, XMVexI4 }, 0 }, + { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_A3) }, { Bad_Opcode }, { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_A6) }, { Bad_Opcode }, + /* a8 */ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - /* 60 */ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, + /* b0 */ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - /* 68 */ { Bad_Opcode }, { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_B6) }, { Bad_Opcode }, + /* b8 */ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - /* 70 */ { Bad_Opcode }, { 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) }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, + /* c8 */ { Bad_Opcode }, - /* 78 */ { 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) }, + /* d0 */ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - /* 80 */ - { PREFIX_TABLE (PREFIX_0F3880) }, - { PREFIX_TABLE (PREFIX_0F3881) }, - { PREFIX_TABLE (PREFIX_0F3882) }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, + /* d8 */ { Bad_Opcode }, { Bad_Opcode }, - /* 88 */ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, + /* e0 */ { Bad_Opcode }, { Bad_Opcode }, - /* 90 */ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, + /* e8 */ { Bad_Opcode }, { Bad_Opcode }, - /* 98 */ { 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) }, + /* f0 */ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - /* a0 */ { Bad_Opcode }, { Bad_Opcode }, + /* f8 */ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - /* a8 */ { Bad_Opcode }, { Bad_Opcode }, + }, + /* XOP_09 */ + { + /* 00 */ { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_01) }, + { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_02) }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - /* b0 */ + /* 08 */ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, @@ -7175,16 +5084,17 @@ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - /* b8 */ + /* 10 */ { Bad_Opcode }, { Bad_Opcode }, + { MOD_TABLE (MOD_VEX_0FXOP_09_12) }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, + /* 18 */ { Bad_Opcode }, - /* c0 */ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, @@ -7192,75 +5102,52 @@ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, + /* 20 */ { Bad_Opcode }, - /* c8 */ - { PREFIX_TABLE (PREFIX_0F38C8) }, - { PREFIX_TABLE (PREFIX_0F38C9) }, - { PREFIX_TABLE (PREFIX_0F38CA) }, - { PREFIX_TABLE (PREFIX_0F38CB) }, - { PREFIX_TABLE (PREFIX_0F38CC) }, - { PREFIX_TABLE (PREFIX_0F38CD) }, { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_0F38CF) }, - /* d0 */ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, + /* 28 */ { Bad_Opcode }, { Bad_Opcode }, - /* d8 */ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_0F38DB) }, - { PREFIX_TABLE (PREFIX_0F38DC) }, - { PREFIX_TABLE (PREFIX_0F38DD) }, - { PREFIX_TABLE (PREFIX_0F38DE) }, - { PREFIX_TABLE (PREFIX_0F38DF) }, - /* e0 */ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, + /* 30 */ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - /* e8 */ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, + /* 38 */ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - /* f0 */ - { PREFIX_TABLE (PREFIX_0F38F0) }, - { PREFIX_TABLE (PREFIX_0F38F1) }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_0F38F5) }, - { PREFIX_TABLE (PREFIX_0F38F6) }, + /* 40 */ { Bad_Opcode }, - /* f8 */ - { PREFIX_TABLE (PREFIX_0F38F8) }, - { PREFIX_TABLE (PREFIX_0F38F9) }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - }, - /* THREE_BYTE_0F3A */ - { - /* 00 */ { Bad_Opcode }, + /* 48 */ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, @@ -7268,43 +5155,26 @@ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - /* 08 */ - { PREFIX_TABLE (PREFIX_0F3A08) }, - { PREFIX_TABLE (PREFIX_0F3A09) }, - { PREFIX_TABLE (PREFIX_0F3A0A) }, - { PREFIX_TABLE (PREFIX_0F3A0B) }, - { PREFIX_TABLE (PREFIX_0F3A0C) }, - { PREFIX_TABLE (PREFIX_0F3A0D) }, - { PREFIX_TABLE (PREFIX_0F3A0E) }, - { "palignr", { MX, EM, Ib }, PREFIX_OPCODE }, - /* 10 */ { Bad_Opcode }, + /* 50 */ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_0F3A14) }, - { PREFIX_TABLE (PREFIX_0F3A15) }, - { PREFIX_TABLE (PREFIX_0F3A16) }, - { PREFIX_TABLE (PREFIX_0F3A17) }, - /* 18 */ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, + /* 58 */ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - /* 20 */ - { PREFIX_TABLE (PREFIX_0F3A20) }, - { PREFIX_TABLE (PREFIX_0F3A21) }, - { PREFIX_TABLE (PREFIX_0F3A22) }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - /* 28 */ + /* 60 */ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, @@ -7313,7 +5183,7 @@ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - /* 30 */ + /* 68 */ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, @@ -7322,70 +5192,7 @@ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - /* 38 */ - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - /* 40 */ - { PREFIX_TABLE (PREFIX_0F3A40) }, - { PREFIX_TABLE (PREFIX_0F3A41) }, - { PREFIX_TABLE (PREFIX_0F3A42) }, - { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_0F3A44) }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - /* 48 */ - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - /* 50 */ - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - /* 58 */ - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - /* 60 */ - { PREFIX_TABLE (PREFIX_0F3A60) }, - { PREFIX_TABLE (PREFIX_0F3A61) }, - { PREFIX_TABLE (PREFIX_0F3A62) }, - { PREFIX_TABLE (PREFIX_0F3A63) }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - /* 68 */ - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - /* 70 */ + /* 70 */ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, @@ -7404,10 +5211,10 @@ { Bad_Opcode }, { Bad_Opcode }, /* 80 */ - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, + { 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) }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, @@ -7422,19 +5229,19 @@ { Bad_Opcode }, { Bad_Opcode }, /* 90 */ - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, + { 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) }, /* 98 */ - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, + { 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) }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, @@ -7477,45 +5284,45 @@ { 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) }, { Bad_Opcode }, { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_C6) }, + { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_C7) }, /* c8 */ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_0F3ACC) }, - { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_0F3ACE) }, - { PREFIX_TABLE (PREFIX_0F3ACF) }, - /* d0 */ - { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0FXOP_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) }, { Bad_Opcode }, { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_D6) }, + { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_D7) }, /* d8 */ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_DB) }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_0F3ADF) }, /* e0 */ { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { 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) }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, @@ -7548,10 +5355,7 @@ { Bad_Opcode }, { Bad_Opcode }, }, -}; - -static const struct dis386 xop_table[][256] = { - /* XOP_08 */ + /* XOP_0A */ { /* 00 */ { Bad_Opcode }, @@ -7572,9 +5376,9 @@ { Bad_Opcode }, { Bad_Opcode }, /* 10 */ + { "bextrS", { Gdq, Edq, Id }, 0 }, { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0FXOP_0A_12) }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, @@ -7703,9 +5507,9 @@ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - { "vpmacssww", { XMVexW, Vex, EXVexW, EXVexW }, 0 }, - { "vpmacsswd", { XMVexW, Vex, EXVexW, EXVexW }, 0 }, - { "vpmacssdql", { XMVexW, Vex, EXVexW, EXVexW }, 0 }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 88 */ { Bad_Opcode }, { Bad_Opcode }, @@ -7713,17 +5517,17 @@ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - { "vpmacssdd", { XMVexW, Vex, EXVexW, EXVexW }, 0 }, - { "vpmacssdqh", { XMVexW, Vex, EXVexW, EXVexW }, 0 }, + { Bad_Opcode }, + { Bad_Opcode }, /* 90 */ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - { "vpmacsww", { XMVexW, Vex, EXVexW, EXVexW }, 0 }, - { "vpmacswd", { XMVexW, Vex, EXVexW, EXVexW }, 0 }, - { "vpmacsdql", { XMVexW, Vex, EXVexW, EXVexW }, 0 }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* 98 */ { Bad_Opcode }, { Bad_Opcode }, @@ -7731,16 +5535,16 @@ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - { "vpmacsdd", { XMVexW, Vex, EXVexW, EXVexW }, 0 }, - { "vpmacsdqh", { XMVexW, Vex, EXVexW, EXVexW }, 0 }, + { Bad_Opcode }, + { Bad_Opcode }, /* a0 */ { Bad_Opcode }, { Bad_Opcode }, - { "vpcmov", { XMVexW, Vex, EXVexW, EXVexW }, 0 }, - { "vpperm", { XMVexW, Vex, EXVexW, EXVexW }, 0 }, { Bad_Opcode }, { Bad_Opcode }, - { "vpmadcsswd", { XMVexW, Vex, EXVexW, EXVexW }, 0 }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, { Bad_Opcode }, /* a8 */ { Bad_Opcode }, @@ -7758,7 +5562,7 @@ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - { "vpmadcswd", { XMVexW, Vex, EXVexW, EXVexW }, 0 }, + { Bad_Opcode }, { Bad_Opcode }, /* b8 */ { Bad_Opcode }, @@ -7770,10 +5574,10 @@ { Bad_Opcode }, { Bad_Opcode }, /* c0 */ - { "vprotb", { XM, Vex_2src_1, Ib }, 0 }, - { "vprotw", { XM, Vex_2src_1, Ib }, 0 }, - { "vprotd", { XM, Vex_2src_1, Ib }, 0 }, - { "vprotq", { XM, Vex_2src_1, Ib }, 0 }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, @@ -7783,10 +5587,10 @@ { 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) }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* d0 */ { Bad_Opcode }, { Bad_Opcode }, @@ -7819,10 +5623,10 @@ { 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) }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, + { Bad_Opcode }, /* f0 */ { Bad_Opcode }, { Bad_Opcode }, @@ -7842,12 +5646,15 @@ { Bad_Opcode }, { Bad_Opcode }, }, - /* XOP_09 */ +}; + +static const struct dis386 vex_table[][256] = { + /* VEX_0F */ { /* 00 */ { Bad_Opcode }, - { REG_TABLE (REG_XOP_TBM_01) }, - { REG_TABLE (REG_XOP_TBM_02) }, + { Bad_Opcode }, + { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, @@ -7863,16 +5670,24 @@ { Bad_Opcode }, { Bad_Opcode }, /* 10 */ + { PREFIX_TABLE (PREFIX_VEX_0F10) }, + { PREFIX_TABLE (PREFIX_VEX_0F11) }, + { PREFIX_TABLE (PREFIX_VEX_0F12) }, + { MOD_TABLE (MOD_VEX_0F13) }, + { "vunpcklpX", { XM, Vex, EXx }, PREFIX_OPCODE }, + { "vunpckhpX", { XM, Vex, EXx }, PREFIX_OPCODE }, + { PREFIX_TABLE (PREFIX_VEX_0F16) }, + { MOD_TABLE (MOD_VEX_0F17) }, + /* 18 */ { Bad_Opcode }, { Bad_Opcode }, - { REG_TABLE (REG_XOP_LWPCB) }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - /* 18 */ { Bad_Opcode }, + /* 20 */ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, @@ -7880,8 +5695,17 @@ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - /* 20 */ { Bad_Opcode }, + /* 28 */ + { "vmovapX", { XM, EXx }, PREFIX_OPCODE }, + { "vmovapX", { EXxS, XM }, PREFIX_OPCODE }, + { PREFIX_TABLE (PREFIX_VEX_0F2A) }, + { MOD_TABLE (MOD_VEX_0F2B) }, + { PREFIX_TABLE (PREFIX_VEX_0F2C) }, + { PREFIX_TABLE (PREFIX_VEX_0F2D) }, + { PREFIX_TABLE (PREFIX_VEX_0F2E) }, + { PREFIX_TABLE (PREFIX_VEX_0F2F) }, + /* 30 */ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, @@ -7889,8 +5713,8 @@ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - /* 28 */ { Bad_Opcode }, + /* 38 */ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, @@ -7898,52 +5722,117 @@ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - /* 30 */ { Bad_Opcode }, + /* 40 */ { Bad_Opcode }, + { PREFIX_TABLE (PREFIX_VEX_0F41) }, + { PREFIX_TABLE (PREFIX_VEX_0F42) }, { Bad_Opcode }, + { PREFIX_TABLE (PREFIX_VEX_0F44) }, + { PREFIX_TABLE (PREFIX_VEX_0F45) }, + { PREFIX_TABLE (PREFIX_VEX_0F46) }, + { PREFIX_TABLE (PREFIX_VEX_0F47) }, + /* 48 */ { Bad_Opcode }, { Bad_Opcode }, + { PREFIX_TABLE (PREFIX_VEX_0F4A) }, + { PREFIX_TABLE (PREFIX_VEX_0F4B) }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - /* 38 */ { Bad_Opcode }, + /* 50 */ + { MOD_TABLE (MOD_VEX_0F50) }, + { PREFIX_TABLE (PREFIX_VEX_0F51) }, + { PREFIX_TABLE (PREFIX_VEX_0F52) }, + { PREFIX_TABLE (PREFIX_VEX_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) }, + /* 60 */ + { "vpunpcklbw", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpunpcklwd", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpunpckldq", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpacksswb", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpcmpgtb", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpcmpgtw", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpcmpgtd", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpackuswb", { XM, Vex, EXx }, PREFIX_DATA }, + /* 68 */ + { "vpunpckhbw", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpunpckhwd", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpunpckhdq", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpackssdw", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpunpcklqdq", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpunpckhqdq", { XM, Vex, EXx }, PREFIX_DATA }, + { VEX_LEN_TABLE (VEX_LEN_0F6E) }, + { PREFIX_TABLE (PREFIX_VEX_0F6F) }, + /* 70 */ + { PREFIX_TABLE (PREFIX_VEX_0F70) }, + { 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 }, + { VEX_LEN_TABLE (VEX_LEN_0F77) }, + /* 78 */ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, + { PREFIX_TABLE (PREFIX_VEX_0F7C) }, + { PREFIX_TABLE (PREFIX_VEX_0F7D) }, + { PREFIX_TABLE (PREFIX_VEX_0F7E) }, + { PREFIX_TABLE (PREFIX_VEX_0F7F) }, + /* 80 */ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - /* 40 */ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, + /* 88 */ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - /* 48 */ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, + /* 90 */ + { PREFIX_TABLE (PREFIX_VEX_0F90) }, + { PREFIX_TABLE (PREFIX_VEX_0F91) }, + { PREFIX_TABLE (PREFIX_VEX_0F92) }, + { PREFIX_TABLE (PREFIX_VEX_0F93) }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - /* 50 */ { Bad_Opcode }, + /* 98 */ + { PREFIX_TABLE (PREFIX_VEX_0F98) }, + { PREFIX_TABLE (PREFIX_VEX_0F99) }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, + /* a0 */ { Bad_Opcode }, - /* 58 */ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, @@ -7951,98 +5840,218 @@ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, + /* a8 */ { Bad_Opcode }, - /* 60 */ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, + { REG_TABLE (REG_VEX_0FAE) }, { Bad_Opcode }, + /* b0 */ { Bad_Opcode }, { Bad_Opcode }, - /* 68 */ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, + /* b8 */ { Bad_Opcode }, { Bad_Opcode }, - /* 70 */ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, + /* c0 */ { Bad_Opcode }, { Bad_Opcode }, - /* 78 */ + { PREFIX_TABLE (PREFIX_VEX_0FC2) }, { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0FC4) }, + { VEX_LEN_TABLE (VEX_LEN_0FC5) }, + { "vshufpX", { XM, Vex, EXx, Ib }, PREFIX_OPCODE }, { Bad_Opcode }, + /* c8 */ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - /* 80 */ - { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_80) }, - { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_81) }, - { "vfrczss", { XM, EXd }, 0 }, - { "vfrczsd", { XM, EXq }, 0 }, { Bad_Opcode }, { Bad_Opcode }, + /* d0 */ + { PREFIX_TABLE (PREFIX_VEX_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) }, + /* d8 */ + { "vpsubusb", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpsubusw", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpminub", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpand", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpaddusb", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpaddusw", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpmaxub", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpandn", { XM, Vex, EXx }, PREFIX_DATA }, + /* e0 */ + { "vpavgb", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpsraw", { XM, Vex, EXxmm }, PREFIX_DATA }, + { "vpsrad", { XM, Vex, EXxmm }, PREFIX_DATA }, + { "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) }, + /* e8 */ + { "vpsubsb", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpsubsw", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpminsw", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpor", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpaddsb", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpaddsw", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpmaxsw", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpxor", { XM, Vex, EXx }, PREFIX_DATA }, + /* f0 */ + { PREFIX_TABLE (PREFIX_VEX_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) }, + /* f8 */ + { "vpsubb", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpsubw", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpsubd", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpsubq", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpaddb", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpaddw", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpaddd", { XM, Vex, EXx }, PREFIX_DATA }, { Bad_Opcode }, + }, + /* VEX_0F38 */ + { + /* 00 */ + { "vpshufb", { XM, Vex, EXx }, PREFIX_DATA }, + { "vphaddw", { XM, Vex, EXx }, PREFIX_DATA }, + { "vphaddd", { XM, Vex, EXx }, PREFIX_DATA }, + { "vphaddsw", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpmaddubsw", { XM, Vex, EXx }, PREFIX_DATA }, + { "vphsubw", { XM, Vex, EXx }, PREFIX_DATA }, + { "vphsubd", { XM, Vex, EXx }, PREFIX_DATA }, + { "vphsubsw", { XM, Vex, EXx }, PREFIX_DATA }, + /* 08 */ + { "vpsignb", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpsignw", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpsignd", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpmulhrsw", { XM, Vex, EXx }, PREFIX_DATA }, + { VEX_W_TABLE (VEX_W_0F380C) }, + { VEX_W_TABLE (VEX_W_0F380D) }, + { VEX_W_TABLE (VEX_W_0F380E) }, + { VEX_W_TABLE (VEX_W_0F380F) }, + /* 10 */ { Bad_Opcode }, - /* 88 */ { Bad_Opcode }, { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F3813) }, { Bad_Opcode }, { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0F3816) }, + { "vptest", { XM, EXx }, PREFIX_DATA }, + /* 18 */ + { VEX_W_TABLE (VEX_W_0F3818) }, + { VEX_LEN_TABLE (VEX_LEN_0F3819) }, + { MOD_TABLE (MOD_VEX_0F381A) }, + { Bad_Opcode }, + { "vpabsb", { XM, EXx }, PREFIX_DATA }, + { "vpabsw", { XM, EXx }, PREFIX_DATA }, + { "vpabsd", { XM, EXx }, PREFIX_DATA }, { Bad_Opcode }, + /* 20 */ + { "vpmovsxbw", { XM, EXxmmq }, PREFIX_DATA }, + { "vpmovsxbd", { XM, EXxmmqd }, PREFIX_DATA }, + { "vpmovsxbq", { XM, EXxmmdw }, PREFIX_DATA }, + { "vpmovsxwd", { XM, EXxmmq }, PREFIX_DATA }, + { "vpmovsxwq", { XM, EXxmmqd }, PREFIX_DATA }, + { "vpmovsxdq", { XM, EXxmmq }, PREFIX_DATA }, { Bad_Opcode }, { Bad_Opcode }, + /* 28 */ + { "vpmuldq", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpcmpeqq", { XM, Vex, EXx }, PREFIX_DATA }, + { MOD_TABLE (MOD_VEX_0F382A) }, + { "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) }, + /* 30 */ + { "vpmovzxbw", { XM, EXxmmq }, PREFIX_DATA }, + { "vpmovzxbd", { XM, EXxmmqd }, PREFIX_DATA }, + { "vpmovzxbq", { XM, EXxmmdw }, PREFIX_DATA }, + { "vpmovzxwd", { XM, EXxmmq }, PREFIX_DATA }, + { "vpmovzxwq", { XM, EXxmmqd }, PREFIX_DATA }, + { "vpmovzxdq", { XM, EXxmmq }, PREFIX_DATA }, + { VEX_LEN_TABLE (VEX_LEN_0F3836) }, + { "vpcmpgtq", { XM, Vex, EXx }, PREFIX_DATA }, + /* 38 */ + { "vpminsb", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpminsd", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpminuw", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpminud", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpmaxsb", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpmaxsd", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpmaxuw", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpmaxud", { XM, Vex, EXx }, PREFIX_DATA }, + /* 40 */ + { "vpmulld", { XM, Vex, EXx }, PREFIX_DATA }, + { VEX_LEN_TABLE (VEX_LEN_0F3841) }, { Bad_Opcode }, - /* 90 */ - { "vprotb", { XM, Vex_2src_1, Vex_2src_2 }, 0 }, - { "vprotw", { XM, Vex_2src_1, Vex_2src_2 }, 0 }, - { "vprotd", { XM, Vex_2src_1, Vex_2src_2 }, 0 }, - { "vprotq", { XM, Vex_2src_1, Vex_2src_2 }, 0 }, - { "vpshlb", { XM, Vex_2src_1, Vex_2src_2 }, 0 }, - { "vpshlw", { XM, Vex_2src_1, Vex_2src_2 }, 0 }, - { "vpshld", { XM, Vex_2src_1, Vex_2src_2 }, 0 }, - { "vpshlq", { XM, Vex_2src_1, Vex_2src_2 }, 0 }, - /* 98 */ - { "vpshab", { XM, Vex_2src_1, Vex_2src_2 }, 0 }, - { "vpshaw", { XM, Vex_2src_1, Vex_2src_2 }, 0 }, - { "vpshad", { XM, Vex_2src_1, Vex_2src_2 }, 0 }, - { "vpshaq", { XM, Vex_2src_1, Vex_2src_2 }, 0 }, { Bad_Opcode }, { Bad_Opcode }, + { "vpsrlv%DQ", { XM, Vex, EXx }, PREFIX_DATA }, + { VEX_W_TABLE (VEX_W_0F3846) }, + { "vpsllv%DQ", { XM, Vex, EXx }, PREFIX_DATA }, + /* 48 */ { Bad_Opcode }, + { X86_64_TABLE (X86_64_VEX_0F3849) }, { Bad_Opcode }, - /* a0 */ + { X86_64_TABLE (X86_64_VEX_0F384B) }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, + /* 50 */ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - /* a8 */ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, + /* 58 */ + { VEX_W_TABLE (VEX_W_0F3858) }, + { VEX_W_TABLE (VEX_W_0F3859) }, + { MOD_TABLE (MOD_VEX_0F385A) }, { Bad_Opcode }, + { X86_64_TABLE (X86_64_VEX_0F385C) }, { Bad_Opcode }, + { X86_64_TABLE (X86_64_VEX_0F385E) }, { Bad_Opcode }, + /* 60 */ { Bad_Opcode }, - /* b0 */ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, @@ -8050,8 +6059,8 @@ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, + /* 68 */ { Bad_Opcode }, - /* b8 */ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, @@ -8059,93 +6068,115 @@ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, + /* 70 */ { Bad_Opcode }, - /* c0 */ { Bad_Opcode }, - { "vphaddbw", { XM, EXxmm }, 0 }, - { "vphaddbd", { XM, EXxmm }, 0 }, - { "vphaddbq", { XM, EXxmm }, 0 }, - { Bad_Opcode }, - { Bad_Opcode }, - { "vphaddwd", { XM, EXxmm }, 0 }, - { "vphaddwq", { XM, EXxmm }, 0 }, - /* c8 */ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - { "vphadddq", { XM, EXxmm }, 0 }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, + /* 78 */ + { VEX_W_TABLE (VEX_W_0F3878) }, + { VEX_W_TABLE (VEX_W_0F3879) }, { Bad_Opcode }, - /* d0 */ { Bad_Opcode }, - { "vphaddubw", { XM, EXxmm }, 0 }, - { "vphaddubd", { XM, EXxmm }, 0 }, - { "vphaddubq", { XM, EXxmm }, 0 }, { Bad_Opcode }, { Bad_Opcode }, - { "vphadduwd", { XM, EXxmm }, 0 }, - { "vphadduwq", { XM, EXxmm }, 0 }, - /* d8 */ { Bad_Opcode }, { Bad_Opcode }, + /* 80 */ { Bad_Opcode }, - { "vphaddudq", { XM, EXxmm }, 0 }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - /* e0 */ { Bad_Opcode }, - { "vphsubbw", { XM, EXxmm }, 0 }, - { "vphsubwd", { XM, EXxmm }, 0 }, - { "vphsubdq", { XM, EXxmm }, 0 }, { Bad_Opcode }, { Bad_Opcode }, + /* 88 */ { Bad_Opcode }, { Bad_Opcode }, - /* e8 */ { Bad_Opcode }, { Bad_Opcode }, + { MOD_TABLE (MOD_VEX_0F388C) }, { Bad_Opcode }, + { MOD_TABLE (MOD_VEX_0F388E) }, { Bad_Opcode }, + /* 90 */ + { "vpgatherd%DQ", { XM, MVexVSIBDWpX, Vex }, PREFIX_DATA }, + { "vpgatherq%DQ", { XMGatherQ, MVexVSIBQWpX, VexGatherQ }, PREFIX_DATA }, + { "vgatherdp%XW", { XM, MVexVSIBDWpX, Vex }, PREFIX_DATA }, + { "vgatherqp%XW", { XMGatherQ, MVexVSIBQWpX, VexGatherQ }, PREFIX_DATA }, { Bad_Opcode }, { Bad_Opcode }, + { "vfmaddsub132p%XW", { XM, Vex, EXx }, PREFIX_DATA }, + { "vfmsubadd132p%XW", { XM, Vex, EXx }, PREFIX_DATA }, + /* 98 */ + { "vfmadd132p%XW", { XM, Vex, EXx }, PREFIX_DATA }, + { "vfmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, PREFIX_DATA }, + { "vfmsub132p%XW", { XM, Vex, EXx }, PREFIX_DATA }, + { "vfmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, PREFIX_DATA }, + { "vfnmadd132p%XW", { XM, Vex, EXx }, PREFIX_DATA }, + { "vfnmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, PREFIX_DATA }, + { "vfnmsub132p%XW", { XM, Vex, EXx }, PREFIX_DATA }, + { "vfnmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, PREFIX_DATA }, + /* a0 */ { Bad_Opcode }, { Bad_Opcode }, - /* f0 */ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, + { "vfmaddsub213p%XW", { XM, Vex, EXx }, PREFIX_DATA }, + { "vfmsubadd213p%XW", { XM, Vex, EXx }, PREFIX_DATA }, + /* a8 */ + { "vfmadd213p%XW", { XM, Vex, EXx }, PREFIX_DATA }, + { "vfmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, PREFIX_DATA }, + { "vfmsub213p%XW", { XM, Vex, EXx }, PREFIX_DATA }, + { "vfmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, PREFIX_DATA }, + { "vfnmadd213p%XW", { XM, Vex, EXx }, PREFIX_DATA }, + { "vfnmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, PREFIX_DATA }, + { "vfnmsub213p%XW", { XM, Vex, EXx }, PREFIX_DATA }, + { "vfnmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, PREFIX_DATA }, + /* b0 */ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - /* f8 */ { Bad_Opcode }, { Bad_Opcode }, + { "vfmaddsub231p%XW", { XM, Vex, EXx }, PREFIX_DATA }, + { "vfmsubadd231p%XW", { XM, Vex, EXx }, PREFIX_DATA }, + /* b8 */ + { "vfmadd231p%XW", { XM, Vex, EXx }, PREFIX_DATA }, + { "vfmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, PREFIX_DATA }, + { "vfmsub231p%XW", { XM, Vex, EXx }, PREFIX_DATA }, + { "vfmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, PREFIX_DATA }, + { "vfnmadd231p%XW", { XM, Vex, EXx }, PREFIX_DATA }, + { "vfnmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, PREFIX_DATA }, + { "vfnmsub231p%XW", { XM, Vex, EXx }, PREFIX_DATA }, + { "vfnmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, PREFIX_DATA }, + /* c0 */ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - }, - /* XOP_0A */ - { - /* 00 */ { Bad_Opcode }, { Bad_Opcode }, + /* c8 */ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - /* 08 */ { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F38CF) }, + /* d0 */ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, @@ -8153,35 +6184,44 @@ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - /* 10 */ - { "bextrS", { Gdq, Edq, Id }, 0 }, { Bad_Opcode }, - { REG_TABLE (REG_XOP_LWP) }, + /* d8 */ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0F38DB) }, + { "vaesenc", { XM, Vex, EXx }, PREFIX_DATA }, + { "vaesenclast", { XM, Vex, EXx }, PREFIX_DATA }, + { "vaesdec", { XM, Vex, EXx }, PREFIX_DATA }, + { "vaesdeclast", { XM, Vex, EXx }, PREFIX_DATA }, + /* e0 */ { Bad_Opcode }, { Bad_Opcode }, - /* 18 */ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, + /* e8 */ { Bad_Opcode }, { Bad_Opcode }, - /* 20 */ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, + /* f0 */ { Bad_Opcode }, { Bad_Opcode }, - /* 28 */ + { VEX_LEN_TABLE (VEX_LEN_0F38F2) }, + { REG_TABLE (REG_VEX_0F38F3) }, { Bad_Opcode }, + { PREFIX_TABLE (PREFIX_VEX_0F38F5) }, + { PREFIX_TABLE (PREFIX_VEX_0F38F6) }, + { PREFIX_TABLE (PREFIX_VEX_0F38F7) }, + /* f8 */ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, @@ -8189,25 +6229,56 @@ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - /* 30 */ { Bad_Opcode }, + }, + /* VEX_0F3A */ + { + /* 00 */ + { VEX_LEN_TABLE (VEX_LEN_0F3A00) }, + { VEX_LEN_TABLE (VEX_LEN_0F3A01) }, + { VEX_W_TABLE (VEX_W_0F3A02) }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F3A04) }, + { VEX_W_TABLE (VEX_W_0F3A05) }, + { VEX_LEN_TABLE (VEX_LEN_0F3A06) }, { Bad_Opcode }, + /* 08 */ + { "vroundps", { XM, EXx, Ib }, PREFIX_DATA }, + { "vroundpd", { XM, EXx, Ib }, PREFIX_DATA }, + { "vroundss", { XMScalar, VexScalar, EXxmm_md, Ib }, PREFIX_DATA }, + { "vroundsd", { XMScalar, VexScalar, EXxmm_mq, Ib }, PREFIX_DATA }, + { "vblendps", { XM, Vex, EXx, Ib }, PREFIX_DATA }, + { "vblendpd", { XM, Vex, EXx, Ib }, PREFIX_DATA }, + { "vpblendw", { XM, Vex, EXx, Ib }, PREFIX_DATA }, + { "vpalignr", { XM, Vex, EXx, Ib }, PREFIX_DATA }, + /* 10 */ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0F3A14) }, + { VEX_LEN_TABLE (VEX_LEN_0F3A15) }, + { VEX_LEN_TABLE (VEX_LEN_0F3A16) }, + { VEX_LEN_TABLE (VEX_LEN_0F3A17) }, + /* 18 */ + { VEX_LEN_TABLE (VEX_LEN_0F3A18) }, + { VEX_LEN_TABLE (VEX_LEN_0F3A19) }, { Bad_Opcode }, { Bad_Opcode }, - /* 38 */ { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F3A1D) }, { Bad_Opcode }, { Bad_Opcode }, + /* 20 */ + { VEX_LEN_TABLE (VEX_LEN_0F3A20) }, + { VEX_LEN_TABLE (VEX_LEN_0F3A21) }, + { VEX_LEN_TABLE (VEX_LEN_0F3A22) }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - /* 40 */ + /* 28 */ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, @@ -8216,25 +6287,43 @@ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - /* 48 */ + /* 30 */ + { VEX_LEN_TABLE (VEX_LEN_0F3A30) }, + { VEX_LEN_TABLE (VEX_LEN_0F3A31) }, + { VEX_LEN_TABLE (VEX_LEN_0F3A32) }, + { VEX_LEN_TABLE (VEX_LEN_0F3A33) }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, + /* 38 */ + { VEX_LEN_TABLE (VEX_LEN_0F3A38) }, + { VEX_LEN_TABLE (VEX_LEN_0F3A39) }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - /* 50 */ { Bad_Opcode }, { Bad_Opcode }, + /* 40 */ + { "vdpps", { XM, Vex, EXx, Ib }, PREFIX_DATA }, + { VEX_LEN_TABLE (VEX_LEN_0F3A41) }, + { "vmpsadbw", { XM, Vex, EXx, Ib }, PREFIX_DATA }, { Bad_Opcode }, + { "vpclmulqdq", { XM, Vex, EXx, PCLMUL }, PREFIX_DATA }, { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0F3A46) }, { Bad_Opcode }, + /* 48 */ + { "vpermil2ps", { XM, Vex, EXx, XMVexI4, VexI4 }, PREFIX_DATA }, + { "vpermil2pd", { XM, Vex, EXx, XMVexI4, VexI4 }, PREFIX_DATA }, + { VEX_W_TABLE (VEX_W_0F3A4A) }, + { VEX_W_TABLE (VEX_W_0F3A4B) }, + { VEX_W_TABLE (VEX_W_0F3A4C) }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - /* 58 */ + /* 50 */ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, @@ -8243,24 +6332,33 @@ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - /* 60 */ + /* 58 */ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, + { "vfmaddsubps", { XM, Vex, EXx, XMVexI4 }, PREFIX_DATA }, + { "vfmaddsubpd", { XM, Vex, EXx, XMVexI4 }, PREFIX_DATA }, + { "vfmsubaddps", { XM, Vex, EXx, XMVexI4 }, PREFIX_DATA }, + { "vfmsubaddpd", { XM, Vex, EXx, XMVexI4 }, PREFIX_DATA }, + /* 60 */ + { VEX_LEN_TABLE (VEX_LEN_0F3A60) }, + { VEX_LEN_TABLE (VEX_LEN_0F3A61) }, + { VEX_LEN_TABLE (VEX_LEN_0F3A62) }, + { VEX_LEN_TABLE (VEX_LEN_0F3A63) }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, /* 68 */ - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, + { "vfmaddps", { XM, Vex, EXx, XMVexI4 }, PREFIX_DATA }, + { "vfmaddpd", { XM, Vex, EXx, XMVexI4 }, PREFIX_DATA }, + { "vfmaddss", { XMScalar, VexScalar, EXxmm_md, XMVexScalarI4 }, PREFIX_DATA }, + { "vfmaddsd", { XMScalar, VexScalar, EXxmm_mq, XMVexScalarI4 }, PREFIX_DATA }, + { "vfmsubps", { XM, Vex, EXx, XMVexI4 }, PREFIX_DATA }, + { "vfmsubpd", { XM, Vex, EXx, XMVexI4 }, PREFIX_DATA }, + { "vfmsubss", { XMScalar, VexScalar, EXxmm_md, XMVexScalarI4 }, PREFIX_DATA }, + { "vfmsubsd", { XMScalar, VexScalar, EXxmm_mq, XMVexScalarI4 }, PREFIX_DATA }, /* 70 */ { Bad_Opcode }, { Bad_Opcode }, @@ -8271,14 +6369,14 @@ { Bad_Opcode }, { Bad_Opcode }, /* 78 */ - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, + { "vfnmaddps", { XM, Vex, EXx, XMVexI4 }, PREFIX_DATA }, + { "vfnmaddpd", { XM, Vex, EXx, XMVexI4 }, PREFIX_DATA }, + { "vfnmaddss", { XMScalar, VexScalar, EXxmm_md, XMVexScalarI4 }, PREFIX_DATA }, + { "vfnmaddsd", { XMScalar, VexScalar, EXxmm_mq, XMVexScalarI4 }, PREFIX_DATA }, + { "vfnmsubps", { XM, Vex, EXx, XMVexI4 }, PREFIX_DATA }, + { "vfnmsubpd", { XM, Vex, EXx, XMVexI4 }, PREFIX_DATA }, + { "vfnmsubss", { XMScalar, VexScalar, EXxmm_md, XMVexScalarI4 }, PREFIX_DATA }, + { "vfnmsubsd", { XMScalar, VexScalar, EXxmm_mq, XMVexScalarI4 }, PREFIX_DATA }, /* 80 */ { Bad_Opcode }, { Bad_Opcode }, @@ -8367,8 +6465,8 @@ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F3ACE) }, + { VEX_W_TABLE (VEX_W_0F3ACF) }, /* d0 */ { Bad_Opcode }, { Bad_Opcode }, @@ -8386,7 +6484,7 @@ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0F3ADF) }, /* e0 */ { Bad_Opcode }, { Bad_Opcode }, @@ -8406,7 +6504,7 @@ { Bad_Opcode }, { Bad_Opcode }, /* f0 */ - { Bad_Opcode }, + { PREFIX_TABLE (PREFIX_VEX_0F3AF0) }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, @@ -8426,1453 +6524,824 @@ }, }; -static const struct dis386 vex_table[][256] = { - /* VEX_0F */ +#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 */ + { + { "vmovlpX", { XM, Vex, EXq }, 0 }, + }, + + /* VEX_LEN_0F12_P_0_M_1 */ + { + { "vmovhlps", { XM, Vex, EXq }, 0 }, + }, + + /* VEX_LEN_0F13_M_0 */ + { + { "vmovlpX", { EXq, XM }, PREFIX_OPCODE }, + }, + + /* VEX_LEN_0F16_P_0_M_0 / VEX_LEN_0F16_P_2_M_0 */ + { + { "vmovhpX", { XM, Vex, EXq }, 0 }, + }, + + /* VEX_LEN_0F16_P_0_M_1 */ + { + { "vmovlhps", { XM, Vex, EXq }, 0 }, + }, + + /* VEX_LEN_0F17_M_0 */ + { + { "vmovhpX", { EXq, XM }, PREFIX_OPCODE }, + }, + + /* VEX_LEN_0F41_P_0 */ { - /* 00 */ - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - /* 08 */ - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - /* 10 */ - { PREFIX_TABLE (PREFIX_VEX_0F10) }, - { PREFIX_TABLE (PREFIX_VEX_0F11) }, - { PREFIX_TABLE (PREFIX_VEX_0F12) }, - { MOD_TABLE (MOD_VEX_0F13) }, - { "vunpcklpX", { XM, Vex, EXx }, 0 }, - { "vunpckhpX", { XM, Vex, EXx }, 0 }, - { PREFIX_TABLE (PREFIX_VEX_0F16) }, - { MOD_TABLE (MOD_VEX_0F17) }, - /* 18 */ - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - /* 20 */ - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - /* 28 */ - { "vmovapX", { XM, EXx }, 0 }, - { "vmovapX", { EXxS, XM }, 0 }, - { PREFIX_TABLE (PREFIX_VEX_0F2A) }, - { MOD_TABLE (MOD_VEX_0F2B) }, - { PREFIX_TABLE (PREFIX_VEX_0F2C) }, - { PREFIX_TABLE (PREFIX_VEX_0F2D) }, - { PREFIX_TABLE (PREFIX_VEX_0F2E) }, - { PREFIX_TABLE (PREFIX_VEX_0F2F) }, - /* 30 */ - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, { Bad_Opcode }, - /* 38 */ + { VEX_W_TABLE (VEX_W_0F41_P_0_LEN_1) }, + }, + /* VEX_LEN_0F41_P_2 */ + { { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F41_P_2_LEN_1) }, + }, + /* VEX_LEN_0F42_P_0 */ + { { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F42_P_0_LEN_1) }, + }, + /* VEX_LEN_0F42_P_2 */ + { { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F42_P_2_LEN_1) }, + }, + /* VEX_LEN_0F44_P_0 */ + { + { VEX_W_TABLE (VEX_W_0F44_P_0_LEN_0) }, + }, + /* VEX_LEN_0F44_P_2 */ + { + { VEX_W_TABLE (VEX_W_0F44_P_2_LEN_0) }, + }, + /* VEX_LEN_0F45_P_0 */ + { { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F45_P_0_LEN_1) }, + }, + /* VEX_LEN_0F45_P_2 */ + { { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F45_P_2_LEN_1) }, + }, + /* VEX_LEN_0F46_P_0 */ + { { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F46_P_0_LEN_1) }, + }, + /* VEX_LEN_0F46_P_2 */ + { { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F46_P_2_LEN_1) }, + }, + /* VEX_LEN_0F47_P_0 */ + { { Bad_Opcode }, - /* 40 */ - { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_VEX_0F41) }, - { PREFIX_TABLE (PREFIX_VEX_0F42) }, - { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_VEX_0F44) }, - { PREFIX_TABLE (PREFIX_VEX_0F45) }, - { PREFIX_TABLE (PREFIX_VEX_0F46) }, - { PREFIX_TABLE (PREFIX_VEX_0F47) }, - /* 48 */ - { Bad_Opcode }, - { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_VEX_0F4A) }, - { PREFIX_TABLE (PREFIX_VEX_0F4B) }, - { Bad_Opcode }, - { Bad_Opcode }, - { 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) }, - { "vandpX", { XM, Vex, EXx }, 0 }, - { "vandnpX", { XM, Vex, EXx }, 0 }, - { "vorpX", { XM, Vex, EXx }, 0 }, - { "vxorpX", { XM, Vex, EXx }, 0 }, - /* 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) }, - /* 60 */ - { PREFIX_TABLE (PREFIX_VEX_0F60) }, - { PREFIX_TABLE (PREFIX_VEX_0F61) }, - { PREFIX_TABLE (PREFIX_VEX_0F62) }, - { PREFIX_TABLE (PREFIX_VEX_0F63) }, - { PREFIX_TABLE (PREFIX_VEX_0F64) }, - { PREFIX_TABLE (PREFIX_VEX_0F65) }, - { PREFIX_TABLE (PREFIX_VEX_0F66) }, - { PREFIX_TABLE (PREFIX_VEX_0F67) }, - /* 68 */ - { PREFIX_TABLE (PREFIX_VEX_0F68) }, - { PREFIX_TABLE (PREFIX_VEX_0F69) }, - { PREFIX_TABLE (PREFIX_VEX_0F6A) }, - { PREFIX_TABLE (PREFIX_VEX_0F6B) }, - { PREFIX_TABLE (PREFIX_VEX_0F6C) }, - { PREFIX_TABLE (PREFIX_VEX_0F6D) }, - { PREFIX_TABLE (PREFIX_VEX_0F6E) }, - { PREFIX_TABLE (PREFIX_VEX_0F6F) }, - /* 70 */ - { PREFIX_TABLE (PREFIX_VEX_0F70) }, - { REG_TABLE (REG_VEX_0F71) }, - { REG_TABLE (REG_VEX_0F72) }, - { REG_TABLE (REG_VEX_0F73) }, - { PREFIX_TABLE (PREFIX_VEX_0F74) }, - { PREFIX_TABLE (PREFIX_VEX_0F75) }, - { PREFIX_TABLE (PREFIX_VEX_0F76) }, - { PREFIX_TABLE (PREFIX_VEX_0F77) }, - /* 78 */ - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_VEX_0F7C) }, - { PREFIX_TABLE (PREFIX_VEX_0F7D) }, - { PREFIX_TABLE (PREFIX_VEX_0F7E) }, - { PREFIX_TABLE (PREFIX_VEX_0F7F) }, - /* 80 */ - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - /* 88 */ - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - /* 90 */ - { PREFIX_TABLE (PREFIX_VEX_0F90) }, - { PREFIX_TABLE (PREFIX_VEX_0F91) }, - { PREFIX_TABLE (PREFIX_VEX_0F92) }, - { PREFIX_TABLE (PREFIX_VEX_0F93) }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - /* 98 */ - { PREFIX_TABLE (PREFIX_VEX_0F98) }, - { PREFIX_TABLE (PREFIX_VEX_0F99) }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - /* a0 */ - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - /* a8 */ - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { REG_TABLE (REG_VEX_0FAE) }, - { Bad_Opcode }, - /* b0 */ - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - /* b8 */ - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - /* c0 */ - { Bad_Opcode }, - { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_VEX_0FC2) }, - { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_VEX_0FC4) }, - { PREFIX_TABLE (PREFIX_VEX_0FC5) }, - { "vshufpX", { XM, Vex, EXx, Ib }, 0 }, - { Bad_Opcode }, - /* c8 */ - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - /* d0 */ - { PREFIX_TABLE (PREFIX_VEX_0FD0) }, - { PREFIX_TABLE (PREFIX_VEX_0FD1) }, - { PREFIX_TABLE (PREFIX_VEX_0FD2) }, - { PREFIX_TABLE (PREFIX_VEX_0FD3) }, - { PREFIX_TABLE (PREFIX_VEX_0FD4) }, - { PREFIX_TABLE (PREFIX_VEX_0FD5) }, - { PREFIX_TABLE (PREFIX_VEX_0FD6) }, - { PREFIX_TABLE (PREFIX_VEX_0FD7) }, - /* d8 */ - { PREFIX_TABLE (PREFIX_VEX_0FD8) }, - { PREFIX_TABLE (PREFIX_VEX_0FD9) }, - { PREFIX_TABLE (PREFIX_VEX_0FDA) }, - { PREFIX_TABLE (PREFIX_VEX_0FDB) }, - { PREFIX_TABLE (PREFIX_VEX_0FDC) }, - { PREFIX_TABLE (PREFIX_VEX_0FDD) }, - { PREFIX_TABLE (PREFIX_VEX_0FDE) }, - { PREFIX_TABLE (PREFIX_VEX_0FDF) }, - /* e0 */ - { PREFIX_TABLE (PREFIX_VEX_0FE0) }, - { PREFIX_TABLE (PREFIX_VEX_0FE1) }, - { PREFIX_TABLE (PREFIX_VEX_0FE2) }, - { PREFIX_TABLE (PREFIX_VEX_0FE3) }, - { PREFIX_TABLE (PREFIX_VEX_0FE4) }, - { PREFIX_TABLE (PREFIX_VEX_0FE5) }, - { PREFIX_TABLE (PREFIX_VEX_0FE6) }, - { PREFIX_TABLE (PREFIX_VEX_0FE7) }, - /* e8 */ - { PREFIX_TABLE (PREFIX_VEX_0FE8) }, - { PREFIX_TABLE (PREFIX_VEX_0FE9) }, - { PREFIX_TABLE (PREFIX_VEX_0FEA) }, - { PREFIX_TABLE (PREFIX_VEX_0FEB) }, - { PREFIX_TABLE (PREFIX_VEX_0FEC) }, - { PREFIX_TABLE (PREFIX_VEX_0FED) }, - { PREFIX_TABLE (PREFIX_VEX_0FEE) }, - { PREFIX_TABLE (PREFIX_VEX_0FEF) }, - /* f0 */ - { PREFIX_TABLE (PREFIX_VEX_0FF0) }, - { PREFIX_TABLE (PREFIX_VEX_0FF1) }, - { PREFIX_TABLE (PREFIX_VEX_0FF2) }, - { PREFIX_TABLE (PREFIX_VEX_0FF3) }, - { PREFIX_TABLE (PREFIX_VEX_0FF4) }, - { PREFIX_TABLE (PREFIX_VEX_0FF5) }, - { PREFIX_TABLE (PREFIX_VEX_0FF6) }, - { PREFIX_TABLE (PREFIX_VEX_0FF7) }, - /* f8 */ - { PREFIX_TABLE (PREFIX_VEX_0FF8) }, - { PREFIX_TABLE (PREFIX_VEX_0FF9) }, - { PREFIX_TABLE (PREFIX_VEX_0FFA) }, - { PREFIX_TABLE (PREFIX_VEX_0FFB) }, - { PREFIX_TABLE (PREFIX_VEX_0FFC) }, - { PREFIX_TABLE (PREFIX_VEX_0FFD) }, - { PREFIX_TABLE (PREFIX_VEX_0FFE) }, - { Bad_Opcode }, - }, - /* VEX_0F38 */ - { - /* 00 */ - { PREFIX_TABLE (PREFIX_VEX_0F3800) }, - { PREFIX_TABLE (PREFIX_VEX_0F3801) }, - { PREFIX_TABLE (PREFIX_VEX_0F3802) }, - { PREFIX_TABLE (PREFIX_VEX_0F3803) }, - { PREFIX_TABLE (PREFIX_VEX_0F3804) }, - { PREFIX_TABLE (PREFIX_VEX_0F3805) }, - { PREFIX_TABLE (PREFIX_VEX_0F3806) }, - { PREFIX_TABLE (PREFIX_VEX_0F3807) }, - /* 08 */ - { PREFIX_TABLE (PREFIX_VEX_0F3808) }, - { PREFIX_TABLE (PREFIX_VEX_0F3809) }, - { PREFIX_TABLE (PREFIX_VEX_0F380A) }, - { PREFIX_TABLE (PREFIX_VEX_0F380B) }, - { PREFIX_TABLE (PREFIX_VEX_0F380C) }, - { PREFIX_TABLE (PREFIX_VEX_0F380D) }, - { PREFIX_TABLE (PREFIX_VEX_0F380E) }, - { PREFIX_TABLE (PREFIX_VEX_0F380F) }, - /* 10 */ - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_VEX_0F3813) }, - { Bad_Opcode }, - { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_VEX_0F3816) }, - { PREFIX_TABLE (PREFIX_VEX_0F3817) }, - /* 18 */ - { PREFIX_TABLE (PREFIX_VEX_0F3818) }, - { PREFIX_TABLE (PREFIX_VEX_0F3819) }, - { PREFIX_TABLE (PREFIX_VEX_0F381A) }, - { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_VEX_0F381C) }, - { PREFIX_TABLE (PREFIX_VEX_0F381D) }, - { PREFIX_TABLE (PREFIX_VEX_0F381E) }, - { Bad_Opcode }, - /* 20 */ - { PREFIX_TABLE (PREFIX_VEX_0F3820) }, - { PREFIX_TABLE (PREFIX_VEX_0F3821) }, - { PREFIX_TABLE (PREFIX_VEX_0F3822) }, - { PREFIX_TABLE (PREFIX_VEX_0F3823) }, - { PREFIX_TABLE (PREFIX_VEX_0F3824) }, - { PREFIX_TABLE (PREFIX_VEX_0F3825) }, - { Bad_Opcode }, - { Bad_Opcode }, - /* 28 */ - { PREFIX_TABLE (PREFIX_VEX_0F3828) }, - { PREFIX_TABLE (PREFIX_VEX_0F3829) }, - { PREFIX_TABLE (PREFIX_VEX_0F382A) }, - { PREFIX_TABLE (PREFIX_VEX_0F382B) }, - { PREFIX_TABLE (PREFIX_VEX_0F382C) }, - { PREFIX_TABLE (PREFIX_VEX_0F382D) }, - { PREFIX_TABLE (PREFIX_VEX_0F382E) }, - { PREFIX_TABLE (PREFIX_VEX_0F382F) }, - /* 30 */ - { PREFIX_TABLE (PREFIX_VEX_0F3830) }, - { PREFIX_TABLE (PREFIX_VEX_0F3831) }, - { PREFIX_TABLE (PREFIX_VEX_0F3832) }, - { PREFIX_TABLE (PREFIX_VEX_0F3833) }, - { PREFIX_TABLE (PREFIX_VEX_0F3834) }, - { PREFIX_TABLE (PREFIX_VEX_0F3835) }, - { PREFIX_TABLE (PREFIX_VEX_0F3836) }, - { PREFIX_TABLE (PREFIX_VEX_0F3837) }, - /* 38 */ - { PREFIX_TABLE (PREFIX_VEX_0F3838) }, - { PREFIX_TABLE (PREFIX_VEX_0F3839) }, - { PREFIX_TABLE (PREFIX_VEX_0F383A) }, - { PREFIX_TABLE (PREFIX_VEX_0F383B) }, - { PREFIX_TABLE (PREFIX_VEX_0F383C) }, - { PREFIX_TABLE (PREFIX_VEX_0F383D) }, - { PREFIX_TABLE (PREFIX_VEX_0F383E) }, - { PREFIX_TABLE (PREFIX_VEX_0F383F) }, - /* 40 */ - { PREFIX_TABLE (PREFIX_VEX_0F3840) }, - { PREFIX_TABLE (PREFIX_VEX_0F3841) }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_VEX_0F3845) }, - { PREFIX_TABLE (PREFIX_VEX_0F3846) }, - { PREFIX_TABLE (PREFIX_VEX_0F3847) }, - /* 48 */ - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - /* 50 */ - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - /* 58 */ - { PREFIX_TABLE (PREFIX_VEX_0F3858) }, - { PREFIX_TABLE (PREFIX_VEX_0F3859) }, - { PREFIX_TABLE (PREFIX_VEX_0F385A) }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - /* 60 */ - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - /* 68 */ - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - /* 70 */ - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - /* 78 */ - { PREFIX_TABLE (PREFIX_VEX_0F3878) }, - { PREFIX_TABLE (PREFIX_VEX_0F3879) }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - /* 80 */ - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - /* 88 */ - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_VEX_0F388C) }, - { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_VEX_0F388E) }, - { Bad_Opcode }, - /* 90 */ - { PREFIX_TABLE (PREFIX_VEX_0F3890) }, - { PREFIX_TABLE (PREFIX_VEX_0F3891) }, - { PREFIX_TABLE (PREFIX_VEX_0F3892) }, - { PREFIX_TABLE (PREFIX_VEX_0F3893) }, - { Bad_Opcode }, - { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_VEX_0F3896) }, - { PREFIX_TABLE (PREFIX_VEX_0F3897) }, - /* 98 */ - { PREFIX_TABLE (PREFIX_VEX_0F3898) }, - { PREFIX_TABLE (PREFIX_VEX_0F3899) }, - { PREFIX_TABLE (PREFIX_VEX_0F389A) }, - { PREFIX_TABLE (PREFIX_VEX_0F389B) }, - { PREFIX_TABLE (PREFIX_VEX_0F389C) }, - { PREFIX_TABLE (PREFIX_VEX_0F389D) }, - { PREFIX_TABLE (PREFIX_VEX_0F389E) }, - { PREFIX_TABLE (PREFIX_VEX_0F389F) }, - /* a0 */ - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_VEX_0F38A6) }, - { PREFIX_TABLE (PREFIX_VEX_0F38A7) }, - /* a8 */ - { PREFIX_TABLE (PREFIX_VEX_0F38A8) }, - { PREFIX_TABLE (PREFIX_VEX_0F38A9) }, - { PREFIX_TABLE (PREFIX_VEX_0F38AA) }, - { PREFIX_TABLE (PREFIX_VEX_0F38AB) }, - { PREFIX_TABLE (PREFIX_VEX_0F38AC) }, - { PREFIX_TABLE (PREFIX_VEX_0F38AD) }, - { PREFIX_TABLE (PREFIX_VEX_0F38AE) }, - { PREFIX_TABLE (PREFIX_VEX_0F38AF) }, - /* b0 */ - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_VEX_0F38B6) }, - { PREFIX_TABLE (PREFIX_VEX_0F38B7) }, - /* b8 */ - { PREFIX_TABLE (PREFIX_VEX_0F38B8) }, - { PREFIX_TABLE (PREFIX_VEX_0F38B9) }, - { PREFIX_TABLE (PREFIX_VEX_0F38BA) }, - { PREFIX_TABLE (PREFIX_VEX_0F38BB) }, - { PREFIX_TABLE (PREFIX_VEX_0F38BC) }, - { PREFIX_TABLE (PREFIX_VEX_0F38BD) }, - { PREFIX_TABLE (PREFIX_VEX_0F38BE) }, - { PREFIX_TABLE (PREFIX_VEX_0F38BF) }, - /* c0 */ - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - /* c8 */ - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_VEX_0F38CF) }, - /* d0 */ - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - /* d8 */ - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_VEX_0F38DB) }, - { PREFIX_TABLE (PREFIX_VEX_0F38DC) }, - { PREFIX_TABLE (PREFIX_VEX_0F38DD) }, - { PREFIX_TABLE (PREFIX_VEX_0F38DE) }, - { PREFIX_TABLE (PREFIX_VEX_0F38DF) }, - /* e0 */ - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - /* e8 */ - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - /* f0 */ - { Bad_Opcode }, - { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_VEX_0F38F2) }, - { REG_TABLE (REG_VEX_0F38F3) }, - { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_VEX_0F38F5) }, - { PREFIX_TABLE (PREFIX_VEX_0F38F6) }, - { PREFIX_TABLE (PREFIX_VEX_0F38F7) }, - /* f8 */ - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - }, - /* VEX_0F3A */ - { - /* 00 */ - { PREFIX_TABLE (PREFIX_VEX_0F3A00) }, - { PREFIX_TABLE (PREFIX_VEX_0F3A01) }, - { PREFIX_TABLE (PREFIX_VEX_0F3A02) }, - { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_VEX_0F3A04) }, - { PREFIX_TABLE (PREFIX_VEX_0F3A05) }, - { PREFIX_TABLE (PREFIX_VEX_0F3A06) }, - { Bad_Opcode }, - /* 08 */ - { PREFIX_TABLE (PREFIX_VEX_0F3A08) }, - { PREFIX_TABLE (PREFIX_VEX_0F3A09) }, - { PREFIX_TABLE (PREFIX_VEX_0F3A0A) }, - { PREFIX_TABLE (PREFIX_VEX_0F3A0B) }, - { PREFIX_TABLE (PREFIX_VEX_0F3A0C) }, - { PREFIX_TABLE (PREFIX_VEX_0F3A0D) }, - { PREFIX_TABLE (PREFIX_VEX_0F3A0E) }, - { PREFIX_TABLE (PREFIX_VEX_0F3A0F) }, - /* 10 */ - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_VEX_0F3A14) }, - { PREFIX_TABLE (PREFIX_VEX_0F3A15) }, - { PREFIX_TABLE (PREFIX_VEX_0F3A16) }, - { PREFIX_TABLE (PREFIX_VEX_0F3A17) }, - /* 18 */ - { PREFIX_TABLE (PREFIX_VEX_0F3A18) }, - { PREFIX_TABLE (PREFIX_VEX_0F3A19) }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_VEX_0F3A1D) }, - { Bad_Opcode }, - { Bad_Opcode }, - /* 20 */ - { PREFIX_TABLE (PREFIX_VEX_0F3A20) }, - { PREFIX_TABLE (PREFIX_VEX_0F3A21) }, - { PREFIX_TABLE (PREFIX_VEX_0F3A22) }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - /* 28 */ - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - /* 30 */ - { PREFIX_TABLE (PREFIX_VEX_0F3A30) }, - { PREFIX_TABLE (PREFIX_VEX_0F3A31) }, - { PREFIX_TABLE (PREFIX_VEX_0F3A32) }, - { PREFIX_TABLE (PREFIX_VEX_0F3A33) }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - /* 38 */ - { PREFIX_TABLE (PREFIX_VEX_0F3A38) }, - { PREFIX_TABLE (PREFIX_VEX_0F3A39) }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - /* 40 */ - { PREFIX_TABLE (PREFIX_VEX_0F3A40) }, - { PREFIX_TABLE (PREFIX_VEX_0F3A41) }, - { PREFIX_TABLE (PREFIX_VEX_0F3A42) }, - { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_VEX_0F3A44) }, - { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_VEX_0F3A46) }, - { Bad_Opcode }, - /* 48 */ - { PREFIX_TABLE (PREFIX_VEX_0F3A48) }, - { PREFIX_TABLE (PREFIX_VEX_0F3A49) }, - { PREFIX_TABLE (PREFIX_VEX_0F3A4A) }, - { PREFIX_TABLE (PREFIX_VEX_0F3A4B) }, - { PREFIX_TABLE (PREFIX_VEX_0F3A4C) }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - /* 50 */ - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - /* 58 */ - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_VEX_0F3A5C) }, - { PREFIX_TABLE (PREFIX_VEX_0F3A5D) }, - { PREFIX_TABLE (PREFIX_VEX_0F3A5E) }, - { PREFIX_TABLE (PREFIX_VEX_0F3A5F) }, - /* 60 */ - { PREFIX_TABLE (PREFIX_VEX_0F3A60) }, - { PREFIX_TABLE (PREFIX_VEX_0F3A61) }, - { PREFIX_TABLE (PREFIX_VEX_0F3A62) }, - { PREFIX_TABLE (PREFIX_VEX_0F3A63) }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - /* 68 */ - { PREFIX_TABLE (PREFIX_VEX_0F3A68) }, - { PREFIX_TABLE (PREFIX_VEX_0F3A69) }, - { PREFIX_TABLE (PREFIX_VEX_0F3A6A) }, - { PREFIX_TABLE (PREFIX_VEX_0F3A6B) }, - { PREFIX_TABLE (PREFIX_VEX_0F3A6C) }, - { PREFIX_TABLE (PREFIX_VEX_0F3A6D) }, - { PREFIX_TABLE (PREFIX_VEX_0F3A6E) }, - { PREFIX_TABLE (PREFIX_VEX_0F3A6F) }, - /* 70 */ - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - /* 78 */ - { PREFIX_TABLE (PREFIX_VEX_0F3A78) }, - { PREFIX_TABLE (PREFIX_VEX_0F3A79) }, - { PREFIX_TABLE (PREFIX_VEX_0F3A7A) }, - { PREFIX_TABLE (PREFIX_VEX_0F3A7B) }, - { PREFIX_TABLE (PREFIX_VEX_0F3A7C) }, - { PREFIX_TABLE (PREFIX_VEX_0F3A7D) }, - { PREFIX_TABLE (PREFIX_VEX_0F3A7E) }, - { PREFIX_TABLE (PREFIX_VEX_0F3A7F) }, - /* 80 */ - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - /* 88 */ - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - /* 90 */ - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - /* 98 */ - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - /* a0 */ - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - /* a8 */ - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - /* b0 */ - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - /* b8 */ - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - /* c0 */ - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - /* c8 */ - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { PREFIX_TABLE(PREFIX_VEX_0F3ACE) }, - { PREFIX_TABLE(PREFIX_VEX_0F3ACF) }, - /* d0 */ - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - /* d8 */ - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_VEX_0F3ADF) }, - /* e0 */ - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - /* e8 */ - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - /* f0 */ - { PREFIX_TABLE (PREFIX_VEX_0F3AF0) }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - /* f8 */ - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F47_P_0_LEN_1) }, + }, + /* VEX_LEN_0F47_P_2 */ + { { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F47_P_2_LEN_1) }, + }, + /* VEX_LEN_0F4A_P_0 */ + { { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F4A_P_0_LEN_1) }, + }, + /* VEX_LEN_0F4A_P_2 */ + { { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F4A_P_2_LEN_1) }, + }, + /* VEX_LEN_0F4B_P_0 */ + { { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F4B_P_0_LEN_1) }, + }, + /* VEX_LEN_0F4B_P_2 */ + { { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F4B_P_2_LEN_1) }, }, -}; -#include "i386-dis-evex.h" + /* VEX_LEN_0F6E */ + { + { "vmovK", { XMScalar, Edq }, PREFIX_DATA }, + }, -static const struct dis386 vex_len_table[][2] = { - /* VEX_LEN_0F12_P_0_M_0 */ + /* VEX_LEN_0F77 */ { - { "vmovlps", { XM, Vex128, EXq }, 0 }, + { "vzeroupper", { XX }, 0 }, + { "vzeroall", { XX }, 0 }, }, - /* VEX_LEN_0F12_P_0_M_1 */ + /* VEX_LEN_0F7E_P_1 */ { - { "vmovhlps", { XM, Vex128, EXq }, 0 }, + { "vmovq", { XMScalar, EXxmm_mq }, 0 }, }, - /* VEX_LEN_0F12_P_2 */ + /* VEX_LEN_0F7E_P_2 */ { - { "vmovlpd", { XM, Vex128, EXq }, 0 }, + { "vmovK", { Edq, XMScalar }, 0 }, }, - /* VEX_LEN_0F13_M_0 */ + /* VEX_LEN_0F90_P_0 */ { - { "vmovlpX", { EXq, XM }, 0 }, + { VEX_W_TABLE (VEX_W_0F90_P_0_LEN_0) }, }, - /* VEX_LEN_0F16_P_0_M_0 */ + /* VEX_LEN_0F90_P_2 */ { - { "vmovhps", { XM, Vex128, EXq }, 0 }, + { VEX_W_TABLE (VEX_W_0F90_P_2_LEN_0) }, }, - /* VEX_LEN_0F16_P_0_M_1 */ + /* VEX_LEN_0F91_P_0 */ { - { "vmovlhps", { XM, Vex128, EXq }, 0 }, + { VEX_W_TABLE (VEX_W_0F91_P_0_LEN_0) }, }, - /* VEX_LEN_0F16_P_2 */ + /* VEX_LEN_0F91_P_2 */ { - { "vmovhpd", { XM, Vex128, EXq }, 0 }, + { VEX_W_TABLE (VEX_W_0F91_P_2_LEN_0) }, }, - /* VEX_LEN_0F17_M_0 */ + /* VEX_LEN_0F92_P_0 */ { - { "vmovhpX", { EXq, XM }, 0 }, + { VEX_W_TABLE (VEX_W_0F92_P_0_LEN_0) }, }, - /* VEX_LEN_0F41_P_0 */ + /* VEX_LEN_0F92_P_2 */ { - { Bad_Opcode }, - { VEX_W_TABLE (VEX_W_0F41_P_0_LEN_1) }, + { VEX_W_TABLE (VEX_W_0F92_P_2_LEN_0) }, }, - /* VEX_LEN_0F41_P_2 */ + + /* VEX_LEN_0F92_P_3 */ { - { Bad_Opcode }, - { VEX_W_TABLE (VEX_W_0F41_P_2_LEN_1) }, + { MOD_TABLE (MOD_VEX_0F92_P_3_LEN_0) }, }, - /* VEX_LEN_0F42_P_0 */ + + /* VEX_LEN_0F93_P_0 */ { - { Bad_Opcode }, - { VEX_W_TABLE (VEX_W_0F42_P_0_LEN_1) }, + { VEX_W_TABLE (VEX_W_0F93_P_0_LEN_0) }, }, - /* VEX_LEN_0F42_P_2 */ + + /* VEX_LEN_0F93_P_2 */ { - { Bad_Opcode }, - { VEX_W_TABLE (VEX_W_0F42_P_2_LEN_1) }, + { VEX_W_TABLE (VEX_W_0F93_P_2_LEN_0) }, }, - /* VEX_LEN_0F44_P_0 */ + + /* VEX_LEN_0F93_P_3 */ { - { VEX_W_TABLE (VEX_W_0F44_P_0_LEN_0) }, + { MOD_TABLE (MOD_VEX_0F93_P_3_LEN_0) }, }, - /* VEX_LEN_0F44_P_2 */ + + /* VEX_LEN_0F98_P_0 */ { - { VEX_W_TABLE (VEX_W_0F44_P_2_LEN_0) }, + { VEX_W_TABLE (VEX_W_0F98_P_0_LEN_0) }, }, - /* VEX_LEN_0F45_P_0 */ + + /* VEX_LEN_0F98_P_2 */ { - { Bad_Opcode }, - { VEX_W_TABLE (VEX_W_0F45_P_0_LEN_1) }, + { VEX_W_TABLE (VEX_W_0F98_P_2_LEN_0) }, }, - /* VEX_LEN_0F45_P_2 */ + + /* VEX_LEN_0F99_P_0 */ + { + { VEX_W_TABLE (VEX_W_0F99_P_0_LEN_0) }, + }, + + /* VEX_LEN_0F99_P_2 */ + { + { VEX_W_TABLE (VEX_W_0F99_P_2_LEN_0) }, + }, + + /* VEX_LEN_0FAE_R_2_M_0 */ + { + { "vldmxcsr", { Md }, 0 }, + }, + + /* VEX_LEN_0FAE_R_3_M_0 */ + { + { "vstmxcsr", { Md }, 0 }, + }, + + /* VEX_LEN_0FC4 */ + { + { "vpinsrw", { XM, Vex, Edqw, Ib }, PREFIX_DATA }, + }, + + /* VEX_LEN_0FC5 */ + { + { "vpextrw", { Gdq, XS, Ib }, PREFIX_DATA }, + }, + + /* VEX_LEN_0FD6 */ + { + { "vmovq", { EXqS, XMScalar }, PREFIX_DATA }, + }, + + /* VEX_LEN_0FF7 */ + { + { "vmaskmovdqu", { XM, XS }, PREFIX_DATA }, + }, + + /* VEX_LEN_0F3816 */ { { Bad_Opcode }, - { VEX_W_TABLE (VEX_W_0F45_P_2_LEN_1) }, + { VEX_W_TABLE (VEX_W_0F3816_L_1) }, }, - /* VEX_LEN_0F46_P_0 */ + + /* VEX_LEN_0F3819 */ { { Bad_Opcode }, - { VEX_W_TABLE (VEX_W_0F46_P_0_LEN_1) }, + { VEX_W_TABLE (VEX_W_0F3819_L_1) }, }, - /* VEX_LEN_0F46_P_2 */ + + /* VEX_LEN_0F381A_M_0 */ { { Bad_Opcode }, - { VEX_W_TABLE (VEX_W_0F46_P_2_LEN_1) }, + { VEX_W_TABLE (VEX_W_0F381A_M_0_L_1) }, }, - /* VEX_LEN_0F47_P_0 */ + + /* VEX_LEN_0F3836 */ { { Bad_Opcode }, - { VEX_W_TABLE (VEX_W_0F47_P_0_LEN_1) }, + { VEX_W_TABLE (VEX_W_0F3836) }, }, - /* VEX_LEN_0F47_P_2 */ + + /* VEX_LEN_0F3841 */ + { + { "vphminposuw", { XM, EXx }, PREFIX_DATA }, + }, + + /* VEX_LEN_0F3849_X86_64_P_0_W_0_M_0 */ + { + { "ldtilecfg", { M }, 0 }, + }, + + /* VEX_LEN_0F3849_X86_64_P_0_W_0_M_1_REG_0_RM_0 */ + { + { "tilerelease", { Skip_MODRM }, 0 }, + }, + + /* VEX_LEN_0F3849_X86_64_P_2_W_0_M_0 */ + { + { "sttilecfg", { M }, 0 }, + }, + + /* VEX_LEN_0F3849_X86_64_P_3_W_0_M_0 */ + { + { "tilezero", { TMM, Skip_MODRM }, 0 }, + }, + + /* VEX_LEN_0F384B_X86_64_P_1_W_0_M_0 */ + { + { "tilestored", { MVexSIBMEM, TMM }, 0 }, + }, + /* VEX_LEN_0F384B_X86_64_P_2_W_0_M_0 */ + { + { "tileloaddt1", { TMM, MVexSIBMEM }, 0 }, + }, + + /* VEX_LEN_0F384B_X86_64_P_3_W_0_M_0 */ + { + { "tileloadd", { TMM, MVexSIBMEM }, 0 }, + }, + + /* VEX_LEN_0F385A_M_0 */ { { Bad_Opcode }, - { VEX_W_TABLE (VEX_W_0F47_P_2_LEN_1) }, + { VEX_W_TABLE (VEX_W_0F385A_M_0_L_0) }, }, - /* VEX_LEN_0F4A_P_0 */ + + /* VEX_LEN_0F385C_X86_64_P_1_W_0_M_0 */ + { + { "tdpbf16ps", { TMM, EXtmm, VexTmm }, 0 }, + }, + + /* VEX_LEN_0F385E_X86_64_P_0_W_0_M_0 */ + { + { "tdpbuud", {TMM, EXtmm, VexTmm }, 0 }, + }, + + /* VEX_LEN_0F385E_X86_64_P_1_W_0_M_0 */ + { + { "tdpbsud", {TMM, EXtmm, VexTmm }, 0 }, + }, + + /* VEX_LEN_0F385E_X86_64_P_2_W_0_M_0 */ + { + { "tdpbusd", {TMM, EXtmm, VexTmm }, 0 }, + }, + + /* VEX_LEN_0F385E_X86_64_P_3_W_0_M_0 */ + { + { "tdpbssd", {TMM, EXtmm, VexTmm }, 0 }, + }, + + /* VEX_LEN_0F38DB */ + { + { "vaesimc", { XM, EXx }, PREFIX_DATA }, + }, + + /* VEX_LEN_0F38F2 */ + { + { "andnS", { Gdq, VexGdq, Edq }, PREFIX_OPCODE }, + }, + + /* VEX_LEN_0F38F3_R_1 */ + { + { "blsrS", { VexGdq, Edq }, PREFIX_OPCODE }, + }, + + /* VEX_LEN_0F38F3_R_2 */ + { + { "blsmskS", { VexGdq, Edq }, PREFIX_OPCODE }, + }, + + /* VEX_LEN_0F38F3_R_3 */ + { + { "blsiS", { VexGdq, Edq }, PREFIX_OPCODE }, + }, + + /* VEX_LEN_0F38F5_P_0 */ + { + { "bzhiS", { Gdq, Edq, VexGdq }, 0 }, + }, + + /* VEX_LEN_0F38F5_P_1 */ { - { Bad_Opcode }, - { VEX_W_TABLE (VEX_W_0F4A_P_0_LEN_1) }, + { "pextS", { Gdq, VexGdq, Edq }, 0 }, }, - /* VEX_LEN_0F4A_P_2 */ + + /* VEX_LEN_0F38F5_P_3 */ { - { Bad_Opcode }, - { VEX_W_TABLE (VEX_W_0F4A_P_2_LEN_1) }, + { "pdepS", { Gdq, VexGdq, Edq }, 0 }, }, - /* VEX_LEN_0F4B_P_0 */ + + /* VEX_LEN_0F38F6_P_3 */ { - { Bad_Opcode }, - { VEX_W_TABLE (VEX_W_0F4B_P_0_LEN_1) }, + { "mulxS", { Gdq, VexGdq, Edq }, 0 }, }, - /* VEX_LEN_0F4B_P_2 */ + + /* VEX_LEN_0F38F7_P_0 */ { - { Bad_Opcode }, - { VEX_W_TABLE (VEX_W_0F4B_P_2_LEN_1) }, + { "bextrS", { Gdq, Edq, VexGdq }, 0 }, }, - /* VEX_LEN_0F6E_P_2 */ + /* VEX_LEN_0F38F7_P_1 */ { - { "vmovK", { XMScalar, Edq }, 0 }, + { "sarxS", { Gdq, Edq, VexGdq }, 0 }, }, - /* VEX_LEN_0F77_P_1 */ + /* VEX_LEN_0F38F7_P_2 */ { - { "vzeroupper", { XX }, 0 }, - { "vzeroall", { XX }, 0 }, + { "shlxS", { Gdq, Edq, VexGdq }, 0 }, }, - /* VEX_LEN_0F7E_P_1 */ + /* VEX_LEN_0F38F7_P_3 */ { - { "vmovq", { XMScalar, EXqScalar }, 0 }, + { "shrxS", { Gdq, Edq, VexGdq }, 0 }, }, - /* VEX_LEN_0F7E_P_2 */ + /* VEX_LEN_0F3A00 */ { - { "vmovK", { Edq, XMScalar }, 0 }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F3A00_L_1) }, }, - /* VEX_LEN_0F90_P_0 */ + /* VEX_LEN_0F3A01 */ { - { VEX_W_TABLE (VEX_W_0F90_P_0_LEN_0) }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F3A01_L_1) }, }, - /* VEX_LEN_0F90_P_2 */ + /* VEX_LEN_0F3A06 */ { - { VEX_W_TABLE (VEX_W_0F90_P_2_LEN_0) }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F3A06_L_1) }, }, - /* VEX_LEN_0F91_P_0 */ + /* VEX_LEN_0F3A14 */ { - { VEX_W_TABLE (VEX_W_0F91_P_0_LEN_0) }, + { "vpextrb", { Edqb, XM, Ib }, PREFIX_DATA }, }, - /* VEX_LEN_0F91_P_2 */ + /* VEX_LEN_0F3A15 */ { - { VEX_W_TABLE (VEX_W_0F91_P_2_LEN_0) }, + { "vpextrw", { Edqw, XM, Ib }, PREFIX_DATA }, }, - /* VEX_LEN_0F92_P_0 */ + /* VEX_LEN_0F3A16 */ { - { VEX_W_TABLE (VEX_W_0F92_P_0_LEN_0) }, + { "vpextrK", { Edq, XM, Ib }, PREFIX_DATA }, }, - /* VEX_LEN_0F92_P_2 */ + /* VEX_LEN_0F3A17 */ { - { VEX_W_TABLE (VEX_W_0F92_P_2_LEN_0) }, + { "vextractps", { Edqd, XM, Ib }, PREFIX_DATA }, }, - /* VEX_LEN_0F92_P_3 */ + /* VEX_LEN_0F3A18 */ { - { MOD_TABLE (MOD_VEX_0F92_P_3_LEN_0) }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F3A18_L_1) }, }, - /* VEX_LEN_0F93_P_0 */ + /* VEX_LEN_0F3A19 */ { - { VEX_W_TABLE (VEX_W_0F93_P_0_LEN_0) }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F3A19_L_1) }, }, - /* VEX_LEN_0F93_P_2 */ + /* VEX_LEN_0F3A20 */ { - { VEX_W_TABLE (VEX_W_0F93_P_2_LEN_0) }, + { "vpinsrb", { XM, Vex, Edqb, Ib }, PREFIX_DATA }, }, - /* VEX_LEN_0F93_P_3 */ + /* VEX_LEN_0F3A21 */ { - { MOD_TABLE (MOD_VEX_0F93_P_3_LEN_0) }, + { "vinsertps", { XM, Vex, EXd, Ib }, PREFIX_DATA }, }, - /* VEX_LEN_0F98_P_0 */ + /* VEX_LEN_0F3A22 */ { - { VEX_W_TABLE (VEX_W_0F98_P_0_LEN_0) }, + { "vpinsrK", { XM, Vex, Edq, Ib }, PREFIX_DATA }, }, - /* VEX_LEN_0F98_P_2 */ + /* VEX_LEN_0F3A30 */ { - { VEX_W_TABLE (VEX_W_0F98_P_2_LEN_0) }, + { MOD_TABLE (MOD_VEX_0F3A30_L_0) }, }, - /* VEX_LEN_0F99_P_0 */ + /* VEX_LEN_0F3A31 */ { - { VEX_W_TABLE (VEX_W_0F99_P_0_LEN_0) }, + { MOD_TABLE (MOD_VEX_0F3A31_L_0) }, }, - /* VEX_LEN_0F99_P_2 */ + /* VEX_LEN_0F3A32 */ { - { VEX_W_TABLE (VEX_W_0F99_P_2_LEN_0) }, + { MOD_TABLE (MOD_VEX_0F3A32_L_0) }, }, - /* VEX_LEN_0FAE_R_2_M_0 */ + /* VEX_LEN_0F3A33 */ { - { "vldmxcsr", { Md }, 0 }, + { MOD_TABLE (MOD_VEX_0F3A33_L_0) }, }, - /* VEX_LEN_0FAE_R_3_M_0 */ + /* VEX_LEN_0F3A38 */ { - { "vstmxcsr", { Md }, 0 }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F3A38_L_1) }, }, - /* VEX_LEN_0FC4_P_2 */ + /* VEX_LEN_0F3A39 */ { - { "vpinsrw", { XM, Vex128, Edqw, Ib }, 0 }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F3A39_L_1) }, }, - /* VEX_LEN_0FC5_P_2 */ + /* VEX_LEN_0F3A41 */ { - { "vpextrw", { Gdq, XS, Ib }, 0 }, + { "vdppd", { XM, Vex, EXx, Ib }, PREFIX_DATA }, }, - /* VEX_LEN_0FD6_P_2 */ + /* VEX_LEN_0F3A46 */ { - { "vmovq", { EXqScalarS, XMScalar }, 0 }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F3A46_L_1) }, }, - /* VEX_LEN_0FF7_P_2 */ + /* VEX_LEN_0F3A60 */ { - { "vmaskmovdqu", { XM, XS }, 0 }, + { "vpcmpestrm!%LQ", { XM, EXx, Ib }, PREFIX_DATA }, }, - /* VEX_LEN_0F3816_P_2 */ + /* VEX_LEN_0F3A61 */ { - { Bad_Opcode }, - { VEX_W_TABLE (VEX_W_0F3816_P_2) }, + { "vpcmpestri!%LQ", { XM, EXx, Ib }, PREFIX_DATA }, }, - /* VEX_LEN_0F3819_P_2 */ + /* VEX_LEN_0F3A62 */ { - { Bad_Opcode }, - { VEX_W_TABLE (VEX_W_0F3819_P_2) }, + { "vpcmpistrm", { XM, EXx, Ib }, PREFIX_DATA }, }, - /* VEX_LEN_0F381A_P_2_M_0 */ + /* VEX_LEN_0F3A63 */ { - { Bad_Opcode }, - { VEX_W_TABLE (VEX_W_0F381A_P_2_M_0) }, + { "vpcmpistri", { XM, EXx, Ib }, PREFIX_DATA }, }, - /* VEX_LEN_0F3836_P_2 */ + /* VEX_LEN_0F3ADF */ { - { Bad_Opcode }, - { VEX_W_TABLE (VEX_W_0F3836_P_2) }, + { "vaeskeygenassist", { XM, EXx, Ib }, PREFIX_DATA }, }, - /* VEX_LEN_0F3841_P_2 */ + /* VEX_LEN_0F3AF0_P_3 */ { - { "vphminposuw", { XM, EXx }, 0 }, + { "rorxS", { Gdq, Edq, Ib }, 0 }, }, - /* VEX_LEN_0F385A_P_2_M_0 */ + /* VEX_LEN_0FXOP_08_85 */ { - { Bad_Opcode }, - { VEX_W_TABLE (VEX_W_0F385A_P_2_M_0) }, + { VEX_W_TABLE (VEX_W_0FXOP_08_85_L_0) }, }, - /* VEX_LEN_0F38DB_P_2 */ + /* VEX_LEN_0FXOP_08_86 */ { - { "vaesimc", { XM, EXx }, 0 }, + { VEX_W_TABLE (VEX_W_0FXOP_08_86_L_0) }, }, - /* VEX_LEN_0F38F2_P_0 */ + /* VEX_LEN_0FXOP_08_87 */ { - { "andnS", { Gdq, VexGdq, Edq }, 0 }, + { VEX_W_TABLE (VEX_W_0FXOP_08_87_L_0) }, }, - /* VEX_LEN_0F38F3_R_1_P_0 */ + /* VEX_LEN_0FXOP_08_8E */ { - { "blsrS", { VexGdq, Edq }, 0 }, + { VEX_W_TABLE (VEX_W_0FXOP_08_8E_L_0) }, }, - /* VEX_LEN_0F38F3_R_2_P_0 */ + /* VEX_LEN_0FXOP_08_8F */ { - { "blsmskS", { VexGdq, Edq }, 0 }, + { VEX_W_TABLE (VEX_W_0FXOP_08_8F_L_0) }, }, - /* VEX_LEN_0F38F3_R_3_P_0 */ + /* VEX_LEN_0FXOP_08_95 */ { - { "blsiS", { VexGdq, Edq }, 0 }, + { VEX_W_TABLE (VEX_W_0FXOP_08_95_L_0) }, }, - /* VEX_LEN_0F38F5_P_0 */ + /* VEX_LEN_0FXOP_08_96 */ { - { "bzhiS", { Gdq, Edq, VexGdq }, 0 }, + { VEX_W_TABLE (VEX_W_0FXOP_08_96_L_0) }, }, - /* VEX_LEN_0F38F5_P_1 */ + /* VEX_LEN_0FXOP_08_97 */ { - { "pextS", { Gdq, VexGdq, Edq }, 0 }, + { VEX_W_TABLE (VEX_W_0FXOP_08_97_L_0) }, }, - /* VEX_LEN_0F38F5_P_3 */ + /* VEX_LEN_0FXOP_08_9E */ { - { "pdepS", { Gdq, VexGdq, Edq }, 0 }, + { VEX_W_TABLE (VEX_W_0FXOP_08_9E_L_0) }, }, - /* VEX_LEN_0F38F6_P_3 */ + /* VEX_LEN_0FXOP_08_9F */ { - { "mulxS", { Gdq, VexGdq, Edq }, 0 }, + { VEX_W_TABLE (VEX_W_0FXOP_08_9F_L_0) }, }, - /* VEX_LEN_0F38F7_P_0 */ + /* VEX_LEN_0FXOP_08_A3 */ { - { "bextrS", { Gdq, Edq, VexGdq }, 0 }, + { "vpperm", { XM, Vex, EXx, XMVexI4 }, 0 }, }, - /* VEX_LEN_0F38F7_P_1 */ + /* VEX_LEN_0FXOP_08_A6 */ { - { "sarxS", { Gdq, Edq, VexGdq }, 0 }, + { VEX_W_TABLE (VEX_W_0FXOP_08_A6_L_0) }, }, - /* VEX_LEN_0F38F7_P_2 */ + /* VEX_LEN_0FXOP_08_B6 */ { - { "shlxS", { Gdq, Edq, VexGdq }, 0 }, + { VEX_W_TABLE (VEX_W_0FXOP_08_B6_L_0) }, }, - /* VEX_LEN_0F38F7_P_3 */ + /* VEX_LEN_0FXOP_08_C0 */ { - { "shrxS", { Gdq, Edq, VexGdq }, 0 }, + { VEX_W_TABLE (VEX_W_0FXOP_08_C0_L_0) }, }, - /* VEX_LEN_0F3A00_P_2 */ + /* VEX_LEN_0FXOP_08_C1 */ { - { Bad_Opcode }, - { VEX_W_TABLE (VEX_W_0F3A00_P_2) }, + { VEX_W_TABLE (VEX_W_0FXOP_08_C1_L_0) }, }, - /* VEX_LEN_0F3A01_P_2 */ + /* VEX_LEN_0FXOP_08_C2 */ { - { Bad_Opcode }, - { VEX_W_TABLE (VEX_W_0F3A01_P_2) }, + { VEX_W_TABLE (VEX_W_0FXOP_08_C2_L_0) }, }, - /* VEX_LEN_0F3A06_P_2 */ + /* VEX_LEN_0FXOP_08_C3 */ { - { Bad_Opcode }, - { VEX_W_TABLE (VEX_W_0F3A06_P_2) }, + { VEX_W_TABLE (VEX_W_0FXOP_08_C3_L_0) }, }, - /* VEX_LEN_0F3A14_P_2 */ + /* VEX_LEN_0FXOP_08_CC */ { - { "vpextrb", { Edqb, XM, Ib }, 0 }, + { VEX_W_TABLE (VEX_W_0FXOP_08_CC_L_0) }, }, - /* VEX_LEN_0F3A15_P_2 */ + /* VEX_LEN_0FXOP_08_CD */ { - { "vpextrw", { Edqw, XM, Ib }, 0 }, + { VEX_W_TABLE (VEX_W_0FXOP_08_CD_L_0) }, }, - /* VEX_LEN_0F3A16_P_2 */ + /* VEX_LEN_0FXOP_08_CE */ { - { "vpextrK", { Edq, XM, Ib }, 0 }, + { VEX_W_TABLE (VEX_W_0FXOP_08_CE_L_0) }, }, - /* VEX_LEN_0F3A17_P_2 */ + /* VEX_LEN_0FXOP_08_CF */ { - { "vextractps", { Edqd, XM, Ib }, 0 }, + { VEX_W_TABLE (VEX_W_0FXOP_08_CF_L_0) }, }, - /* VEX_LEN_0F3A18_P_2 */ + /* VEX_LEN_0FXOP_08_EC */ { - { Bad_Opcode }, - { VEX_W_TABLE (VEX_W_0F3A18_P_2) }, + { VEX_W_TABLE (VEX_W_0FXOP_08_EC_L_0) }, }, - /* VEX_LEN_0F3A19_P_2 */ + /* VEX_LEN_0FXOP_08_ED */ { - { Bad_Opcode }, - { VEX_W_TABLE (VEX_W_0F3A19_P_2) }, + { VEX_W_TABLE (VEX_W_0FXOP_08_ED_L_0) }, }, - /* VEX_LEN_0F3A20_P_2 */ + /* VEX_LEN_0FXOP_08_EE */ { - { "vpinsrb", { XM, Vex128, Edqb, Ib }, 0 }, + { VEX_W_TABLE (VEX_W_0FXOP_08_EE_L_0) }, }, - /* VEX_LEN_0F3A21_P_2 */ + /* VEX_LEN_0FXOP_08_EF */ { - { "vinsertps", { XM, Vex128, EXd, Ib }, 0 }, + { VEX_W_TABLE (VEX_W_0FXOP_08_EF_L_0) }, }, - /* VEX_LEN_0F3A22_P_2 */ + /* VEX_LEN_0FXOP_09_01 */ { - { "vpinsrK", { XM, Vex128, Edq, Ib }, 0 }, + { REG_TABLE (REG_0FXOP_09_01_L_0) }, }, - /* VEX_LEN_0F3A30_P_2 */ + /* VEX_LEN_0FXOP_09_02 */ { - { VEX_W_TABLE (VEX_W_0F3A30_P_2_LEN_0) }, + { REG_TABLE (REG_0FXOP_09_02_L_0) }, }, - /* VEX_LEN_0F3A31_P_2 */ + /* VEX_LEN_0FXOP_09_12_M_1 */ { - { VEX_W_TABLE (VEX_W_0F3A31_P_2_LEN_0) }, + { REG_TABLE (REG_0FXOP_09_12_M_1_L_0) }, }, - /* VEX_LEN_0F3A32_P_2 */ + /* VEX_LEN_0FXOP_09_82_W_0 */ { - { VEX_W_TABLE (VEX_W_0F3A32_P_2_LEN_0) }, + { "vfrczss", { XM, EXd }, 0 }, }, - /* VEX_LEN_0F3A33_P_2 */ + /* VEX_LEN_0FXOP_09_83_W_0 */ { - { VEX_W_TABLE (VEX_W_0F3A33_P_2_LEN_0) }, + { "vfrczsd", { XM, EXq }, 0 }, }, - /* VEX_LEN_0F3A38_P_2 */ + /* VEX_LEN_0FXOP_09_90 */ { - { Bad_Opcode }, - { VEX_W_TABLE (VEX_W_0F3A38_P_2) }, + { "vprotb", { XM, EXx, VexW }, 0 }, }, - /* VEX_LEN_0F3A39_P_2 */ + /* VEX_LEN_0FXOP_09_91 */ { - { Bad_Opcode }, - { VEX_W_TABLE (VEX_W_0F3A39_P_2) }, + { "vprotw", { XM, EXx, VexW }, 0 }, }, - /* VEX_LEN_0F3A41_P_2 */ + /* VEX_LEN_0FXOP_09_92 */ { - { "vdppd", { XM, Vex128, EXx, Ib }, 0 }, + { "vprotd", { XM, EXx, VexW }, 0 }, }, - /* VEX_LEN_0F3A46_P_2 */ + /* VEX_LEN_0FXOP_09_93 */ { - { Bad_Opcode }, - { VEX_W_TABLE (VEX_W_0F3A46_P_2) }, + { "vprotq", { XM, EXx, VexW }, 0 }, }, - /* VEX_LEN_0F3A60_P_2 */ + /* VEX_LEN_0FXOP_09_94 */ { - { "vpcmpestrm", { XM, { PCMPESTR_Fixup, x_mode }, Ib }, 0 }, + { "vpshlb", { XM, EXx, VexW }, 0 }, }, - /* VEX_LEN_0F3A61_P_2 */ + /* VEX_LEN_0FXOP_09_95 */ { - { "vpcmpestri", { XM, { PCMPESTR_Fixup, x_mode }, Ib }, 0 }, + { "vpshlw", { XM, EXx, VexW }, 0 }, }, - /* VEX_LEN_0F3A62_P_2 */ + /* VEX_LEN_0FXOP_09_96 */ { - { "vpcmpistrm", { XM, EXx, Ib }, 0 }, + { "vpshld", { XM, EXx, VexW }, 0 }, }, - /* VEX_LEN_0F3A63_P_2 */ + /* VEX_LEN_0FXOP_09_97 */ { - { "vpcmpistri", { XM, EXx, Ib }, 0 }, + { "vpshlq", { XM, EXx, VexW }, 0 }, }, - /* VEX_LEN_0F3A6A_P_2 */ + /* VEX_LEN_0FXOP_09_98 */ { - { "vfmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW }, 0 }, + { "vpshab", { XM, EXx, VexW }, 0 }, }, - /* VEX_LEN_0F3A6B_P_2 */ + /* VEX_LEN_0FXOP_09_99 */ { - { "vfmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW }, 0 }, + { "vpshaw", { XM, EXx, VexW }, 0 }, }, - /* VEX_LEN_0F3A6E_P_2 */ + /* VEX_LEN_0FXOP_09_9A */ { - { "vfmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW }, 0 }, + { "vpshad", { XM, EXx, VexW }, 0 }, }, - /* VEX_LEN_0F3A6F_P_2 */ + /* VEX_LEN_0FXOP_09_9B */ { - { "vfmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW }, 0 }, + { "vpshaq", { XM, EXx, VexW }, 0 }, }, - /* VEX_LEN_0F3A7A_P_2 */ + /* VEX_LEN_0FXOP_09_C1 */ { - { "vfnmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW }, 0 }, + { VEX_W_TABLE (VEX_W_0FXOP_09_C1_L_0) }, }, - /* VEX_LEN_0F3A7B_P_2 */ + /* VEX_LEN_0FXOP_09_C2 */ { - { "vfnmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW }, 0 }, + { VEX_W_TABLE (VEX_W_0FXOP_09_C2_L_0) }, }, - /* VEX_LEN_0F3A7E_P_2 */ + /* VEX_LEN_0FXOP_09_C3 */ { - { "vfnmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW }, 0 }, + { VEX_W_TABLE (VEX_W_0FXOP_09_C3_L_0) }, }, - /* VEX_LEN_0F3A7F_P_2 */ + /* VEX_LEN_0FXOP_09_C6 */ { - { "vfnmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW }, 0 }, + { VEX_W_TABLE (VEX_W_0FXOP_09_C6_L_0) }, }, - /* VEX_LEN_0F3ADF_P_2 */ + /* VEX_LEN_0FXOP_09_C7 */ { - { "vaeskeygenassist", { XM, EXx, Ib }, 0 }, + { VEX_W_TABLE (VEX_W_0FXOP_09_C7_L_0) }, }, - /* VEX_LEN_0F3AF0_P_3 */ + /* VEX_LEN_0FXOP_09_CB */ { - { "rorxS", { Gdq, Edq, Ib }, 0 }, + { VEX_W_TABLE (VEX_W_0FXOP_09_CB_L_0) }, }, - /* VEX_LEN_0FXOP_08_CC */ + /* VEX_LEN_0FXOP_09_D1 */ { - { "vpcomb", { XM, Vex128, EXx, VPCOM }, 0 }, + { VEX_W_TABLE (VEX_W_0FXOP_09_D1_L_0) }, }, - /* VEX_LEN_0FXOP_08_CD */ + /* VEX_LEN_0FXOP_09_D2 */ { - { "vpcomw", { XM, Vex128, EXx, VPCOM }, 0 }, + { VEX_W_TABLE (VEX_W_0FXOP_09_D2_L_0) }, }, - /* VEX_LEN_0FXOP_08_CE */ + /* VEX_LEN_0FXOP_09_D3 */ { - { "vpcomd", { XM, Vex128, EXx, VPCOM }, 0 }, + { VEX_W_TABLE (VEX_W_0FXOP_09_D3_L_0) }, }, - /* VEX_LEN_0FXOP_08_CF */ + /* VEX_LEN_0FXOP_09_D6 */ { - { "vpcomq", { XM, Vex128, EXx, VPCOM }, 0 }, + { VEX_W_TABLE (VEX_W_0FXOP_09_D6_L_0) }, }, - /* VEX_LEN_0FXOP_08_EC */ + /* VEX_LEN_0FXOP_09_D7 */ { - { "vpcomub", { XM, Vex128, EXx, VPCOM }, 0 }, + { VEX_W_TABLE (VEX_W_0FXOP_09_D7_L_0) }, }, - /* VEX_LEN_0FXOP_08_ED */ + /* VEX_LEN_0FXOP_09_DB */ { - { "vpcomuw", { XM, Vex128, EXx, VPCOM }, 0 }, + { VEX_W_TABLE (VEX_W_0FXOP_09_DB_L_0) }, }, - /* VEX_LEN_0FXOP_08_EE */ + /* VEX_LEN_0FXOP_09_E1 */ { - { "vpcomud", { XM, Vex128, EXx, VPCOM }, 0 }, + { VEX_W_TABLE (VEX_W_0FXOP_09_E1_L_0) }, }, - /* VEX_LEN_0FXOP_08_EF */ + /* VEX_LEN_0FXOP_09_E2 */ { - { "vpcomuq", { XM, Vex128, EXx, VPCOM }, 0 }, + { VEX_W_TABLE (VEX_W_0FXOP_09_E2_L_0) }, }, - /* VEX_LEN_0FXOP_09_80 */ + /* VEX_LEN_0FXOP_09_E3 */ { - { "vfrczps", { XM, EXxmm }, 0 }, - { "vfrczps", { XM, EXymmq }, 0 }, + { VEX_W_TABLE (VEX_W_0FXOP_09_E3_L_0) }, }, - /* VEX_LEN_0FXOP_09_81 */ + /* VEX_LEN_0FXOP_0A_12 */ { - { "vfrczpd", { XM, EXxmm }, 0 }, - { "vfrczpd", { XM, EXymmq }, 0 }, + { REG_TABLE (REG_0FXOP_0A_12_L_0) }, }, }; @@ -9959,238 +7428,432 @@ { MOD_TABLE (MOD_VEX_W_0_0F4B_P_2_LEN_1) }, }, { - /* VEX_W_0F90_P_0_LEN_0 */ - { "kmovw", { MaskG, MaskE }, 0 }, - { "kmovq", { MaskG, MaskE }, 0 }, + /* VEX_W_0F90_P_0_LEN_0 */ + { "kmovw", { MaskG, MaskE }, 0 }, + { "kmovq", { MaskG, MaskE }, 0 }, + }, + { + /* VEX_W_0F90_P_2_LEN_0 */ + { "kmovb", { MaskG, MaskBDE }, 0 }, + { "kmovd", { MaskG, MaskBDE }, 0 }, + }, + { + /* VEX_W_0F91_P_0_LEN_0 */ + { MOD_TABLE (MOD_VEX_W_0_0F91_P_0_LEN_0) }, + { MOD_TABLE (MOD_VEX_W_1_0F91_P_0_LEN_0) }, + }, + { + /* VEX_W_0F91_P_2_LEN_0 */ + { MOD_TABLE (MOD_VEX_W_0_0F91_P_2_LEN_0) }, + { MOD_TABLE (MOD_VEX_W_1_0F91_P_2_LEN_0) }, + }, + { + /* VEX_W_0F92_P_0_LEN_0 */ + { MOD_TABLE (MOD_VEX_W_0_0F92_P_0_LEN_0) }, + }, + { + /* VEX_W_0F92_P_2_LEN_0 */ + { MOD_TABLE (MOD_VEX_W_0_0F92_P_2_LEN_0) }, + }, + { + /* VEX_W_0F93_P_0_LEN_0 */ + { MOD_TABLE (MOD_VEX_W_0_0F93_P_0_LEN_0) }, + }, + { + /* VEX_W_0F93_P_2_LEN_0 */ + { MOD_TABLE (MOD_VEX_W_0_0F93_P_2_LEN_0) }, + }, + { + /* VEX_W_0F98_P_0_LEN_0 */ + { MOD_TABLE (MOD_VEX_W_0_0F98_P_0_LEN_0) }, + { MOD_TABLE (MOD_VEX_W_1_0F98_P_0_LEN_0) }, + }, + { + /* VEX_W_0F98_P_2_LEN_0 */ + { MOD_TABLE (MOD_VEX_W_0_0F98_P_2_LEN_0) }, + { MOD_TABLE (MOD_VEX_W_1_0F98_P_2_LEN_0) }, + }, + { + /* VEX_W_0F99_P_0_LEN_0 */ + { MOD_TABLE (MOD_VEX_W_0_0F99_P_0_LEN_0) }, + { MOD_TABLE (MOD_VEX_W_1_0F99_P_0_LEN_0) }, + }, + { + /* VEX_W_0F99_P_2_LEN_0 */ + { MOD_TABLE (MOD_VEX_W_0_0F99_P_2_LEN_0) }, + { MOD_TABLE (MOD_VEX_W_1_0F99_P_2_LEN_0) }, + }, + { + /* VEX_W_0F380C */ + { "vpermilps", { XM, Vex, EXx }, PREFIX_DATA }, + }, + { + /* VEX_W_0F380D */ + { "vpermilpd", { XM, Vex, EXx }, PREFIX_DATA }, + }, + { + /* VEX_W_0F380E */ + { "vtestps", { XM, EXx }, PREFIX_DATA }, + }, + { + /* VEX_W_0F380F */ + { "vtestpd", { XM, EXx }, PREFIX_DATA }, + }, + { + /* VEX_W_0F3813 */ + { "vcvtph2ps", { XM, EXxmmq }, PREFIX_DATA }, + }, + { + /* VEX_W_0F3816_L_1 */ + { "vpermps", { XM, Vex, EXx }, PREFIX_DATA }, + }, + { + /* VEX_W_0F3818 */ + { "vbroadcastss", { XM, EXxmm_md }, PREFIX_DATA }, + }, + { + /* VEX_W_0F3819_L_1 */ + { "vbroadcastsd", { XM, EXxmm_mq }, PREFIX_DATA }, + }, + { + /* VEX_W_0F381A_M_0_L_1 */ + { "vbroadcastf128", { XM, Mxmm }, PREFIX_DATA }, + }, + { + /* VEX_W_0F382C_M_0 */ + { "vmaskmovps", { XM, Vex, Mx }, PREFIX_DATA }, + }, + { + /* VEX_W_0F382D_M_0 */ + { "vmaskmovpd", { XM, Vex, Mx }, PREFIX_DATA }, + }, + { + /* VEX_W_0F382E_M_0 */ + { "vmaskmovps", { Mx, Vex, XM }, PREFIX_DATA }, + }, + { + /* VEX_W_0F382F_M_0 */ + { "vmaskmovpd", { Mx, Vex, XM }, PREFIX_DATA }, + }, + { + /* VEX_W_0F3836 */ + { "vpermd", { XM, Vex, EXx }, PREFIX_DATA }, + }, + { + /* VEX_W_0F3846 */ + { "vpsravd", { XM, Vex, EXx }, PREFIX_DATA }, + }, + { + /* VEX_W_0F3849_X86_64_P_0 */ + { MOD_TABLE (MOD_VEX_0F3849_X86_64_P_0_W_0) }, + }, + { + /* VEX_W_0F3849_X86_64_P_2 */ + { MOD_TABLE (MOD_VEX_0F3849_X86_64_P_2_W_0) }, + }, + { + /* VEX_W_0F3849_X86_64_P_3 */ + { MOD_TABLE (MOD_VEX_0F3849_X86_64_P_3_W_0) }, + }, + { + /* VEX_W_0F384B_X86_64_P_1 */ + { MOD_TABLE (MOD_VEX_0F384B_X86_64_P_1_W_0) }, + }, + { + /* VEX_W_0F384B_X86_64_P_2 */ + { MOD_TABLE (MOD_VEX_0F384B_X86_64_P_2_W_0) }, + }, + { + /* VEX_W_0F384B_X86_64_P_3 */ + { MOD_TABLE (MOD_VEX_0F384B_X86_64_P_3_W_0) }, + }, + { + /* VEX_W_0F3858 */ + { "vpbroadcastd", { XM, EXxmm_md }, PREFIX_DATA }, + }, + { + /* VEX_W_0F3859 */ + { "vpbroadcastq", { XM, EXxmm_mq }, PREFIX_DATA }, + }, + { + /* VEX_W_0F385A_M_0_L_0 */ + { "vbroadcasti128", { XM, Mxmm }, PREFIX_DATA }, + }, + { + /* VEX_W_0F385C_X86_64_P_1 */ + { MOD_TABLE (MOD_VEX_0F385C_X86_64_P_1_W_0) }, + }, + { + /* VEX_W_0F385E_X86_64_P_0 */ + { MOD_TABLE (MOD_VEX_0F385E_X86_64_P_0_W_0) }, + }, + { + /* VEX_W_0F385E_X86_64_P_1 */ + { MOD_TABLE (MOD_VEX_0F385E_X86_64_P_1_W_0) }, + }, + { + /* VEX_W_0F385E_X86_64_P_2 */ + { MOD_TABLE (MOD_VEX_0F385E_X86_64_P_2_W_0) }, + }, + { + /* VEX_W_0F385E_X86_64_P_3 */ + { MOD_TABLE (MOD_VEX_0F385E_X86_64_P_3_W_0) }, + }, + { + /* VEX_W_0F3878 */ + { "vpbroadcastb", { XM, EXxmm_mb }, PREFIX_DATA }, + }, + { + /* VEX_W_0F3879 */ + { "vpbroadcastw", { XM, EXxmm_mw }, PREFIX_DATA }, + }, + { + /* VEX_W_0F38CF */ + { "vgf2p8mulb", { XM, Vex, EXx }, PREFIX_DATA }, + }, + { + /* VEX_W_0F3A00_L_1 */ + { Bad_Opcode }, + { "vpermq", { XM, EXx, Ib }, PREFIX_DATA }, + }, + { + /* VEX_W_0F3A01_L_1 */ + { Bad_Opcode }, + { "vpermpd", { XM, EXx, Ib }, PREFIX_DATA }, + }, + { + /* VEX_W_0F3A02 */ + { "vpblendd", { XM, Vex, EXx, Ib }, PREFIX_DATA }, + }, + { + /* VEX_W_0F3A04 */ + { "vpermilps", { XM, EXx, Ib }, PREFIX_DATA }, + }, + { + /* VEX_W_0F3A05 */ + { "vpermilpd", { XM, EXx, Ib }, PREFIX_DATA }, + }, + { + /* VEX_W_0F3A06_L_1 */ + { "vperm2f128", { XM, Vex, EXx, Ib }, PREFIX_DATA }, + }, + { + /* VEX_W_0F3A18_L_1 */ + { "vinsertf128", { XM, Vex, EXxmm, Ib }, PREFIX_DATA }, }, { - /* VEX_W_0F90_P_2_LEN_0 */ - { "kmovb", { MaskG, MaskBDE }, 0 }, - { "kmovd", { MaskG, MaskBDE }, 0 }, + /* VEX_W_0F3A19_L_1 */ + { "vextractf128", { EXxmm, XM, Ib }, PREFIX_DATA }, }, { - /* VEX_W_0F91_P_0_LEN_0 */ - { MOD_TABLE (MOD_VEX_W_0_0F91_P_0_LEN_0) }, - { MOD_TABLE (MOD_VEX_W_1_0F91_P_0_LEN_0) }, + /* VEX_W_0F3A1D */ + { "vcvtps2ph", { EXxmmq, XM, EXxEVexS, Ib }, PREFIX_DATA }, }, { - /* VEX_W_0F91_P_2_LEN_0 */ - { MOD_TABLE (MOD_VEX_W_0_0F91_P_2_LEN_0) }, - { MOD_TABLE (MOD_VEX_W_1_0F91_P_2_LEN_0) }, + /* VEX_W_0F3A38_L_1 */ + { "vinserti128", { XM, Vex, EXxmm, Ib }, PREFIX_DATA }, }, { - /* VEX_W_0F92_P_0_LEN_0 */ - { MOD_TABLE (MOD_VEX_W_0_0F92_P_0_LEN_0) }, + /* VEX_W_0F3A39_L_1 */ + { "vextracti128", { EXxmm, XM, Ib }, PREFIX_DATA }, }, { - /* VEX_W_0F92_P_2_LEN_0 */ - { MOD_TABLE (MOD_VEX_W_0_0F92_P_2_LEN_0) }, + /* VEX_W_0F3A46_L_1 */ + { "vperm2i128", { XM, Vex, EXx, Ib }, PREFIX_DATA }, }, { - /* VEX_W_0F93_P_0_LEN_0 */ - { MOD_TABLE (MOD_VEX_W_0_0F93_P_0_LEN_0) }, + /* VEX_W_0F3A4A */ + { "vblendvps", { XM, Vex, EXx, XMVexI4 }, PREFIX_DATA }, }, { - /* VEX_W_0F93_P_2_LEN_0 */ - { MOD_TABLE (MOD_VEX_W_0_0F93_P_2_LEN_0) }, + /* VEX_W_0F3A4B */ + { "vblendvpd", { XM, Vex, EXx, XMVexI4 }, PREFIX_DATA }, }, { - /* VEX_W_0F98_P_0_LEN_0 */ - { MOD_TABLE (MOD_VEX_W_0_0F98_P_0_LEN_0) }, - { MOD_TABLE (MOD_VEX_W_1_0F98_P_0_LEN_0) }, + /* VEX_W_0F3A4C */ + { "vpblendvb", { XM, Vex, EXx, XMVexI4 }, PREFIX_DATA }, }, { - /* VEX_W_0F98_P_2_LEN_0 */ - { MOD_TABLE (MOD_VEX_W_0_0F98_P_2_LEN_0) }, - { MOD_TABLE (MOD_VEX_W_1_0F98_P_2_LEN_0) }, + /* VEX_W_0F3ACE */ + { Bad_Opcode }, + { "vgf2p8affineqb", { XM, Vex, EXx, Ib }, PREFIX_DATA }, }, { - /* VEX_W_0F99_P_0_LEN_0 */ - { MOD_TABLE (MOD_VEX_W_0_0F99_P_0_LEN_0) }, - { MOD_TABLE (MOD_VEX_W_1_0F99_P_0_LEN_0) }, + /* VEX_W_0F3ACF */ + { Bad_Opcode }, + { "vgf2p8affineinvqb", { XM, Vex, EXx, Ib }, PREFIX_DATA }, }, + /* VEX_W_0FXOP_08_85_L_0 */ { - /* VEX_W_0F99_P_2_LEN_0 */ - { MOD_TABLE (MOD_VEX_W_0_0F99_P_2_LEN_0) }, - { MOD_TABLE (MOD_VEX_W_1_0F99_P_2_LEN_0) }, + { "vpmacssww", { XM, Vex, EXx, XMVexI4 }, 0 }, }, + /* VEX_W_0FXOP_08_86_L_0 */ { - /* VEX_W_0F380C_P_2 */ - { "vpermilps", { XM, Vex, EXx }, 0 }, + { "vpmacsswd", { XM, Vex, EXx, XMVexI4 }, 0 }, }, + /* VEX_W_0FXOP_08_87_L_0 */ { - /* VEX_W_0F380D_P_2 */ - { "vpermilpd", { XM, Vex, EXx }, 0 }, + { "vpmacssdql", { XM, Vex, EXx, XMVexI4 }, 0 }, }, + /* VEX_W_0FXOP_08_8E_L_0 */ { - /* VEX_W_0F380E_P_2 */ - { "vtestps", { XM, EXx }, 0 }, + { "vpmacssdd", { XM, Vex, EXx, XMVexI4 }, 0 }, }, + /* VEX_W_0FXOP_08_8F_L_0 */ { - /* VEX_W_0F380F_P_2 */ - { "vtestpd", { XM, EXx }, 0 }, + { "vpmacssdqh", { XM, Vex, EXx, XMVexI4 }, 0 }, }, + /* VEX_W_0FXOP_08_95_L_0 */ { - /* VEX_W_0F3816_P_2 */ - { "vpermps", { XM, Vex, EXx }, 0 }, + { "vpmacsww", { XM, Vex, EXx, XMVexI4 }, 0 }, }, + /* VEX_W_0FXOP_08_96_L_0 */ { - /* VEX_W_0F3818_P_2 */ - { "vbroadcastss", { XM, EXxmm_md }, 0 }, + { "vpmacswd", { XM, Vex, EXx, XMVexI4 }, 0 }, }, + /* VEX_W_0FXOP_08_97_L_0 */ { - /* VEX_W_0F3819_P_2 */ - { "vbroadcastsd", { XM, EXxmm_mq }, 0 }, + { "vpmacsdql", { XM, Vex, EXx, XMVexI4 }, 0 }, }, + /* VEX_W_0FXOP_08_9E_L_0 */ { - /* VEX_W_0F381A_P_2_M_0 */ - { "vbroadcastf128", { XM, Mxmm }, 0 }, + { "vpmacsdd", { XM, Vex, EXx, XMVexI4 }, 0 }, }, + /* VEX_W_0FXOP_08_9F_L_0 */ { - /* VEX_W_0F382C_P_2_M_0 */ - { "vmaskmovps", { XM, Vex, Mx }, 0 }, + { "vpmacsdqh", { XM, Vex, EXx, XMVexI4 }, 0 }, }, + /* VEX_W_0FXOP_08_A6_L_0 */ { - /* VEX_W_0F382D_P_2_M_0 */ - { "vmaskmovpd", { XM, Vex, Mx }, 0 }, + { "vpmadcsswd", { XM, Vex, EXx, XMVexI4 }, 0 }, }, + /* VEX_W_0FXOP_08_B6_L_0 */ { - /* VEX_W_0F382E_P_2_M_0 */ - { "vmaskmovps", { Mx, Vex, XM }, 0 }, + { "vpmadcswd", { XM, Vex, EXx, XMVexI4 }, 0 }, }, + /* VEX_W_0FXOP_08_C0_L_0 */ { - /* VEX_W_0F382F_P_2_M_0 */ - { "vmaskmovpd", { Mx, Vex, XM }, 0 }, + { "vprotb", { XM, EXx, Ib }, 0 }, }, + /* VEX_W_0FXOP_08_C1_L_0 */ { - /* VEX_W_0F3836_P_2 */ - { "vpermd", { XM, Vex, EXx }, 0 }, + { "vprotw", { XM, EXx, Ib }, 0 }, }, + /* VEX_W_0FXOP_08_C2_L_0 */ { - /* VEX_W_0F3846_P_2 */ - { "vpsravd", { XM, Vex, EXx }, 0 }, + { "vprotd", { XM, EXx, Ib }, 0 }, }, + /* VEX_W_0FXOP_08_C3_L_0 */ { - /* VEX_W_0F3858_P_2 */ - { "vpbroadcastd", { XM, EXxmm_md }, 0 }, + { "vprotq", { XM, EXx, Ib }, 0 }, }, + /* VEX_W_0FXOP_08_CC_L_0 */ { - /* VEX_W_0F3859_P_2 */ - { "vpbroadcastq", { XM, EXxmm_mq }, 0 }, + { "vpcomb", { XM, Vex, EXx, VPCOM }, 0 }, }, + /* VEX_W_0FXOP_08_CD_L_0 */ { - /* VEX_W_0F385A_P_2_M_0 */ - { "vbroadcasti128", { XM, Mxmm }, 0 }, + { "vpcomw", { XM, Vex, EXx, VPCOM }, 0 }, }, + /* VEX_W_0FXOP_08_CE_L_0 */ { - /* VEX_W_0F3878_P_2 */ - { "vpbroadcastb", { XM, EXxmm_mb }, 0 }, + { "vpcomd", { XM, Vex, EXx, VPCOM }, 0 }, }, + /* VEX_W_0FXOP_08_CF_L_0 */ { - /* VEX_W_0F3879_P_2 */ - { "vpbroadcastw", { XM, EXxmm_mw }, 0 }, + { "vpcomq", { XM, Vex, EXx, VPCOM }, 0 }, }, + /* VEX_W_0FXOP_08_EC_L_0 */ { - /* VEX_W_0F38CF_P_2 */ - { "vgf2p8mulb", { XM, Vex, EXx }, 0 }, + { "vpcomub", { XM, Vex, EXx, VPCOM }, 0 }, }, + /* VEX_W_0FXOP_08_ED_L_0 */ { - /* VEX_W_0F3A00_P_2 */ - { Bad_Opcode }, - { "vpermq", { XM, EXx, Ib }, 0 }, + { "vpcomuw", { XM, Vex, EXx, VPCOM }, 0 }, }, + /* VEX_W_0FXOP_08_EE_L_0 */ { - /* VEX_W_0F3A01_P_2 */ - { Bad_Opcode }, - { "vpermpd", { XM, EXx, Ib }, 0 }, + { "vpcomud", { XM, Vex, EXx, VPCOM }, 0 }, }, + /* VEX_W_0FXOP_08_EF_L_0 */ { - /* VEX_W_0F3A02_P_2 */ - { "vpblendd", { XM, Vex, EXx, Ib }, 0 }, + { "vpcomuq", { XM, Vex, EXx, VPCOM }, 0 }, }, + /* VEX_W_0FXOP_09_80 */ { - /* VEX_W_0F3A04_P_2 */ - { "vpermilps", { XM, EXx, Ib }, 0 }, + { "vfrczps", { XM, EXx }, 0 }, }, + /* VEX_W_0FXOP_09_81 */ { - /* VEX_W_0F3A05_P_2 */ - { "vpermilpd", { XM, EXx, Ib }, 0 }, + { "vfrczpd", { XM, EXx }, 0 }, }, + /* VEX_W_0FXOP_09_82 */ { - /* VEX_W_0F3A06_P_2 */ - { "vperm2f128", { XM, Vex256, EXx, Ib }, 0 }, + { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_82_W_0) }, }, + /* VEX_W_0FXOP_09_83 */ { - /* VEX_W_0F3A18_P_2 */ - { "vinsertf128", { XM, Vex256, EXxmm, Ib }, 0 }, + { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_83_W_0) }, }, + /* VEX_W_0FXOP_09_C1_L_0 */ { - /* VEX_W_0F3A19_P_2 */ - { "vextractf128", { EXxmm, XM, Ib }, 0 }, + { "vphaddbw", { XM, EXxmm }, 0 }, }, + /* VEX_W_0FXOP_09_C2_L_0 */ { - /* VEX_W_0F3A30_P_2_LEN_0 */ - { MOD_TABLE (MOD_VEX_W_0_0F3A30_P_2_LEN_0) }, - { MOD_TABLE (MOD_VEX_W_1_0F3A30_P_2_LEN_0) }, + { "vphaddbd", { XM, EXxmm }, 0 }, }, + /* VEX_W_0FXOP_09_C3_L_0 */ { - /* VEX_W_0F3A31_P_2_LEN_0 */ - { MOD_TABLE (MOD_VEX_W_0_0F3A31_P_2_LEN_0) }, - { MOD_TABLE (MOD_VEX_W_1_0F3A31_P_2_LEN_0) }, + { "vphaddbq", { XM, EXxmm }, 0 }, }, + /* VEX_W_0FXOP_09_C6_L_0 */ { - /* VEX_W_0F3A32_P_2_LEN_0 */ - { MOD_TABLE (MOD_VEX_W_0_0F3A32_P_2_LEN_0) }, - { MOD_TABLE (MOD_VEX_W_1_0F3A32_P_2_LEN_0) }, + { "vphaddwd", { XM, EXxmm }, 0 }, }, + /* VEX_W_0FXOP_09_C7_L_0 */ { - /* VEX_W_0F3A33_P_2_LEN_0 */ - { MOD_TABLE (MOD_VEX_W_0_0F3A33_P_2_LEN_0) }, - { MOD_TABLE (MOD_VEX_W_1_0F3A33_P_2_LEN_0) }, + { "vphaddwq", { XM, EXxmm }, 0 }, }, + /* VEX_W_0FXOP_09_CB_L_0 */ { - /* VEX_W_0F3A38_P_2 */ - { "vinserti128", { XM, Vex256, EXxmm, Ib }, 0 }, + { "vphadddq", { XM, EXxmm }, 0 }, }, + /* VEX_W_0FXOP_09_D1_L_0 */ { - /* VEX_W_0F3A39_P_2 */ - { "vextracti128", { EXxmm, XM, Ib }, 0 }, + { "vphaddubw", { XM, EXxmm }, 0 }, }, + /* VEX_W_0FXOP_09_D2_L_0 */ { - /* VEX_W_0F3A46_P_2 */ - { "vperm2i128", { XM, Vex256, EXx, Ib }, 0 }, + { "vphaddubd", { XM, EXxmm }, 0 }, }, + /* VEX_W_0FXOP_09_D3_L_0 */ { - /* VEX_W_0F3A48_P_2 */ - { "vpermil2ps", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 }, - { "vpermil2ps", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 }, + { "vphaddubq", { XM, EXxmm }, 0 }, }, + /* VEX_W_0FXOP_09_D6_L_0 */ { - /* VEX_W_0F3A49_P_2 */ - { "vpermil2pd", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 }, - { "vpermil2pd", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 }, + { "vphadduwd", { XM, EXxmm }, 0 }, }, + /* VEX_W_0FXOP_09_D7_L_0 */ { - /* VEX_W_0F3A4A_P_2 */ - { "vblendvps", { XM, Vex, EXx, XMVexI4 }, 0 }, + { "vphadduwq", { XM, EXxmm }, 0 }, }, + /* VEX_W_0FXOP_09_DB_L_0 */ { - /* VEX_W_0F3A4B_P_2 */ - { "vblendvpd", { XM, Vex, EXx, XMVexI4 }, 0 }, + { "vphaddudq", { XM, EXxmm }, 0 }, }, + /* VEX_W_0FXOP_09_E1_L_0 */ { - /* VEX_W_0F3A4C_P_2 */ - { "vpblendvb", { XM, Vex, EXx, XMVexI4 }, 0 }, + { "vphsubbw", { XM, EXxmm }, 0 }, }, + /* VEX_W_0FXOP_09_E2_L_0 */ { - /* VEX_W_0F3ACE_P_2 */ - { Bad_Opcode }, - { "vgf2p8affineqb", { XM, Vex, EXx, Ib }, 0 }, + { "vphsubwd", { XM, EXxmm }, 0 }, }, + /* VEX_W_0FXOP_09_E3_L_0 */ { - /* VEX_W_0F3ACF_P_2 */ - { Bad_Opcode }, - { "vgf2p8affineinvqb", { XM, Vex, EXx, Ib }, 0 }, + { "vphsubdq", { XM, EXxmm }, 0 }, }, #include "i386-dis-evex-w.h" @@ -10213,11 +7876,11 @@ }, { /* MOD_FF_REG_3 */ - { "Jcall^", { indirEp }, 0 }, + { "{l|}call^", { indirEp }, 0 }, }, { /* MOD_FF_REG_5 */ - { "Jjmp^", { indirEp }, 0 }, + { "{l|}jmp^", { indirEp }, 0 }, }, { /* MOD_0F01_REG_0 */ @@ -10251,8 +7914,12 @@ }, { /* MOD_0F12_PREFIX_0 */ - { "movlps", { XM, EXq }, PREFIX_OPCODE }, - { "movhlps", { XM, EXq }, PREFIX_OPCODE }, + { "movlpX", { XM, EXq }, 0 }, + { "movhlps", { XM, EXq }, 0 }, + }, + { + /* MOD_0F12_PREFIX_2 */ + { "movlpX", { XM, EXq }, 0 }, }, { /* MOD_0F13 */ @@ -10260,10 +7927,14 @@ }, { /* MOD_0F16_PREFIX_0 */ - { "movhps", { XM, EXq }, 0 }, + { "movhpX", { XM, EXq }, 0 }, { "movlhps", { XM, EXq }, 0 }, }, { + /* MOD_0F16_PREFIX_2 */ + { "movhpX", { XM, EXq }, 0 }, + }, + { /* MOD_0F17 */ { "movhpX", { EXq, XM }, PREFIX_OPCODE }, }, @@ -10325,16 +7996,6 @@ { REG_TABLE (REG_0F1E_P_1_MOD_3) }, }, { - /* MOD_0F24 */ - { Bad_Opcode }, - { "movL", { Rd, Td }, 0 }, - }, - { - /* MOD_0F26 */ - { Bad_Opcode }, - { "movL", { Td, Rd }, 0 }, - }, - { /* MOD_0F2B_PREFIX_0 */ {"movntps", { Mx, XM }, PREFIX_OPCODE }, }, @@ -10351,59 +8012,59 @@ {"movntsd", { Mq, XM }, PREFIX_OPCODE }, }, { - /* MOD_0F51 */ + /* MOD_0F50 */ { Bad_Opcode }, { "movmskpX", { Gdq, XS }, PREFIX_OPCODE }, }, { /* MOD_0F71_REG_2 */ { Bad_Opcode }, - { "psrlw", { MS, Ib }, 0 }, + { "psrlw", { MS, Ib }, PREFIX_OPCODE }, }, { /* MOD_0F71_REG_4 */ { Bad_Opcode }, - { "psraw", { MS, Ib }, 0 }, + { "psraw", { MS, Ib }, PREFIX_OPCODE }, }, { /* MOD_0F71_REG_6 */ { Bad_Opcode }, - { "psllw", { MS, Ib }, 0 }, + { "psllw", { MS, Ib }, PREFIX_OPCODE }, }, { /* MOD_0F72_REG_2 */ { Bad_Opcode }, - { "psrld", { MS, Ib }, 0 }, + { "psrld", { MS, Ib }, PREFIX_OPCODE }, }, { /* MOD_0F72_REG_4 */ { Bad_Opcode }, - { "psrad", { MS, Ib }, 0 }, + { "psrad", { MS, Ib }, PREFIX_OPCODE }, }, { /* MOD_0F72_REG_6 */ { Bad_Opcode }, - { "pslld", { MS, Ib }, 0 }, + { "pslld", { MS, Ib }, PREFIX_OPCODE }, }, { /* MOD_0F73_REG_2 */ { Bad_Opcode }, - { "psrlq", { MS, Ib }, 0 }, + { "psrlq", { MS, Ib }, PREFIX_OPCODE }, }, { /* MOD_0F73_REG_3 */ { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_0F73_REG_3) }, + { "psrldq", { XS, Ib }, PREFIX_DATA }, }, { /* MOD_0F73_REG_6 */ { Bad_Opcode }, - { "psllq", { MS, Ib }, 0 }, + { "psllq", { MS, Ib }, PREFIX_OPCODE }, }, { /* MOD_0F73_REG_7 */ { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_0F73_REG_7) }, + { "pslldq", { XS, Ib }, PREFIX_DATA }, }, { /* MOD_0FAE_REG_0 */ @@ -10432,7 +8093,7 @@ }, { /* MOD_0FAE_REG_5 */ - { PREFIX_TABLE (PREFIX_0FAE_REG_5_MOD_0) }, + { "xrstor", { FXSAVE }, PREFIX_OPCODE }, { PREFIX_TABLE (PREFIX_0FAE_REG_5_MOD_3) }, }, { @@ -10459,7 +8120,7 @@ }, { /* MOD_0FC3 */ - { PREFIX_TABLE (PREFIX_0FC3_MOD_0) }, + { "movntiS", { Edq, Gdq }, PREFIX_OPCODE }, }, { /* MOD_0FC7_REG_3 */ @@ -10497,12 +8158,63 @@ { "lddqu", { XM, M }, 0 }, }, { - /* MOD_0F382A_PREFIX_2 */ - { "movntdqa", { XM, Mx }, 0 }, + /* MOD_0F382A */ + { "movntdqa", { XM, Mx }, PREFIX_DATA }, + }, + { + /* MOD_VEX_0F3849_X86_64_P_0_W_0 */ + { VEX_LEN_TABLE (VEX_LEN_0F3849_X86_64_P_0_W_0_M_0) }, + { REG_TABLE (REG_VEX_0F3849_X86_64_P_0_W_0_M_1) }, + }, + { + /* MOD_VEX_0F3849_X86_64_P_2_W_0 */ + { VEX_LEN_TABLE (VEX_LEN_0F3849_X86_64_P_2_W_0_M_0) }, + }, + { + /* MOD_VEX_0F3849_X86_64_P_3_W_0 */ + { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0F3849_X86_64_P_3_W_0_M_0) }, + }, + { + /* MOD_VEX_0F384B_X86_64_P_1_W_0 */ + { VEX_LEN_TABLE (VEX_LEN_0F384B_X86_64_P_1_W_0_M_0) }, + }, + { + /* MOD_VEX_0F384B_X86_64_P_2_W_0 */ + { VEX_LEN_TABLE (VEX_LEN_0F384B_X86_64_P_2_W_0_M_0) }, + }, + { + /* MOD_VEX_0F384B_X86_64_P_3_W_0 */ + { VEX_LEN_TABLE (VEX_LEN_0F384B_X86_64_P_3_W_0_M_0) }, + }, + { + /* MOD_VEX_0F385C_X86_64_P_1_W_0 */ + { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0F385C_X86_64_P_1_W_0_M_0) }, + }, + { + /* MOD_VEX_0F385E_X86_64_P_0_W_0 */ + { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0F385E_X86_64_P_0_W_0_M_0) }, + }, + { + /* MOD_VEX_0F385E_X86_64_P_1_W_0 */ + { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0F385E_X86_64_P_1_W_0_M_0) }, + }, + { + /* MOD_VEX_0F385E_X86_64_P_2_W_0 */ + { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0F385E_X86_64_P_2_W_0_M_0) }, + }, + { + /* MOD_VEX_0F385E_X86_64_P_3_W_0 */ + { Bad_Opcode }, + { VEX_LEN_TABLE (VEX_LEN_0F385E_X86_64_P_3_W_0_M_0) }, }, { - /* MOD_0F38F5_PREFIX_2 */ - { "wrussK", { M, Gdq }, PREFIX_OPCODE }, + /* MOD_0F38F5 */ + { "wrussK", { M, Gdq }, PREFIX_DATA }, }, { /* MOD_0F38F6_PREFIX_0 */ @@ -10521,8 +8233,8 @@ { "enqcmd", { Gva, M }, PREFIX_OPCODE }, }, { - /* MOD_0F38F9_PREFIX_0 */ - { "movdiri", { Ev, Gv }, PREFIX_OPCODE }, + /* MOD_0F38F9 */ + { "movdiri", { Edq, Gdq }, PREFIX_OPCODE }, }, { /* MOD_62_32BIT */ @@ -10545,6 +8257,10 @@ { 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) }, }, @@ -10554,222 +8270,226 @@ { 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 */ - { "vmovntpX", { Mx, XM }, 0 }, + { "vmovntpX", { Mx, XM }, PREFIX_OPCODE }, }, { /* MOD_VEX_W_0_0F41_P_0_LEN_1 */ { Bad_Opcode }, - { "kandw", { MaskG, MaskVex, MaskR }, 0 }, + { "kandw", { MaskG, MaskVex, MaskE }, 0 }, }, { /* MOD_VEX_W_1_0F41_P_0_LEN_1 */ { Bad_Opcode }, - { "kandq", { MaskG, MaskVex, MaskR }, 0 }, + { "kandq", { MaskG, MaskVex, MaskE }, 0 }, }, { /* MOD_VEX_W_0_0F41_P_2_LEN_1 */ { Bad_Opcode }, - { "kandb", { MaskG, MaskVex, MaskR }, 0 }, + { "kandb", { MaskG, MaskVex, MaskE }, 0 }, }, { /* MOD_VEX_W_1_0F41_P_2_LEN_1 */ { Bad_Opcode }, - { "kandd", { MaskG, MaskVex, MaskR }, 0 }, + { "kandd", { MaskG, MaskVex, MaskE }, 0 }, }, { /* MOD_VEX_W_0_0F42_P_0_LEN_1 */ { Bad_Opcode }, - { "kandnw", { MaskG, MaskVex, MaskR }, 0 }, + { "kandnw", { MaskG, MaskVex, MaskE }, 0 }, }, { /* MOD_VEX_W_1_0F42_P_0_LEN_1 */ { Bad_Opcode }, - { "kandnq", { MaskG, MaskVex, MaskR }, 0 }, + { "kandnq", { MaskG, MaskVex, MaskE }, 0 }, }, { /* MOD_VEX_W_0_0F42_P_2_LEN_1 */ { Bad_Opcode }, - { "kandnb", { MaskG, MaskVex, MaskR }, 0 }, + { "kandnb", { MaskG, MaskVex, MaskE }, 0 }, }, { /* MOD_VEX_W_1_0F42_P_2_LEN_1 */ { Bad_Opcode }, - { "kandnd", { MaskG, MaskVex, MaskR }, 0 }, + { "kandnd", { MaskG, MaskVex, MaskE }, 0 }, }, { /* MOD_VEX_W_0_0F44_P_0_LEN_0 */ { Bad_Opcode }, - { "knotw", { MaskG, MaskR }, 0 }, + { "knotw", { MaskG, MaskE }, 0 }, }, { /* MOD_VEX_W_1_0F44_P_0_LEN_0 */ { Bad_Opcode }, - { "knotq", { MaskG, MaskR }, 0 }, + { "knotq", { MaskG, MaskE }, 0 }, }, { /* MOD_VEX_W_0_0F44_P_2_LEN_0 */ { Bad_Opcode }, - { "knotb", { MaskG, MaskR }, 0 }, + { "knotb", { MaskG, MaskE }, 0 }, }, { /* MOD_VEX_W_1_0F44_P_2_LEN_0 */ { Bad_Opcode }, - { "knotd", { MaskG, MaskR }, 0 }, + { "knotd", { MaskG, MaskE }, 0 }, }, { /* MOD_VEX_W_0_0F45_P_0_LEN_1 */ { Bad_Opcode }, - { "korw", { MaskG, MaskVex, MaskR }, 0 }, + { "korw", { MaskG, MaskVex, MaskE }, 0 }, }, { /* MOD_VEX_W_1_0F45_P_0_LEN_1 */ { Bad_Opcode }, - { "korq", { MaskG, MaskVex, MaskR }, 0 }, + { "korq", { MaskG, MaskVex, MaskE }, 0 }, }, { /* MOD_VEX_W_0_0F45_P_2_LEN_1 */ { Bad_Opcode }, - { "korb", { MaskG, MaskVex, MaskR }, 0 }, + { "korb", { MaskG, MaskVex, MaskE }, 0 }, }, { /* MOD_VEX_W_1_0F45_P_2_LEN_1 */ { Bad_Opcode }, - { "kord", { MaskG, MaskVex, MaskR }, 0 }, + { "kord", { MaskG, MaskVex, MaskE }, 0 }, }, { /* MOD_VEX_W_0_0F46_P_0_LEN_1 */ { Bad_Opcode }, - { "kxnorw", { MaskG, MaskVex, MaskR }, 0 }, + { "kxnorw", { MaskG, MaskVex, MaskE }, 0 }, }, { /* MOD_VEX_W_1_0F46_P_0_LEN_1 */ { Bad_Opcode }, - { "kxnorq", { MaskG, MaskVex, MaskR }, 0 }, + { "kxnorq", { MaskG, MaskVex, MaskE }, 0 }, }, { /* MOD_VEX_W_0_0F46_P_2_LEN_1 */ { Bad_Opcode }, - { "kxnorb", { MaskG, MaskVex, MaskR }, 0 }, + { "kxnorb", { MaskG, MaskVex, MaskE }, 0 }, }, { /* MOD_VEX_W_1_0F46_P_2_LEN_1 */ { Bad_Opcode }, - { "kxnord", { MaskG, MaskVex, MaskR }, 0 }, + { "kxnord", { MaskG, MaskVex, MaskE }, 0 }, }, { /* MOD_VEX_W_0_0F47_P_0_LEN_1 */ { Bad_Opcode }, - { "kxorw", { MaskG, MaskVex, MaskR }, 0 }, + { "kxorw", { MaskG, MaskVex, MaskE }, 0 }, }, { /* MOD_VEX_W_1_0F47_P_0_LEN_1 */ { Bad_Opcode }, - { "kxorq", { MaskG, MaskVex, MaskR }, 0 }, + { "kxorq", { MaskG, MaskVex, MaskE }, 0 }, }, { /* MOD_VEX_W_0_0F47_P_2_LEN_1 */ { Bad_Opcode }, - { "kxorb", { MaskG, MaskVex, MaskR }, 0 }, + { "kxorb", { MaskG, MaskVex, MaskE }, 0 }, }, { /* MOD_VEX_W_1_0F47_P_2_LEN_1 */ { Bad_Opcode }, - { "kxord", { MaskG, MaskVex, MaskR }, 0 }, + { "kxord", { MaskG, MaskVex, MaskE }, 0 }, }, { /* MOD_VEX_W_0_0F4A_P_0_LEN_1 */ { Bad_Opcode }, - { "kaddw", { MaskG, MaskVex, MaskR }, 0 }, + { "kaddw", { MaskG, MaskVex, MaskE }, 0 }, }, { /* MOD_VEX_W_1_0F4A_P_0_LEN_1 */ { Bad_Opcode }, - { "kaddq", { MaskG, MaskVex, MaskR }, 0 }, + { "kaddq", { MaskG, MaskVex, MaskE }, 0 }, }, { /* MOD_VEX_W_0_0F4A_P_2_LEN_1 */ { Bad_Opcode }, - { "kaddb", { MaskG, MaskVex, MaskR }, 0 }, + { "kaddb", { MaskG, MaskVex, MaskE }, 0 }, }, { /* MOD_VEX_W_1_0F4A_P_2_LEN_1 */ { Bad_Opcode }, - { "kaddd", { MaskG, MaskVex, MaskR }, 0 }, + { "kaddd", { MaskG, MaskVex, MaskE }, 0 }, }, { /* MOD_VEX_W_0_0F4B_P_0_LEN_1 */ { Bad_Opcode }, - { "kunpckwd", { MaskG, MaskVex, MaskR }, 0 }, + { "kunpckwd", { MaskG, MaskVex, MaskE }, 0 }, }, { /* MOD_VEX_W_1_0F4B_P_0_LEN_1 */ { Bad_Opcode }, - { "kunpckdq", { MaskG, MaskVex, MaskR }, 0 }, + { "kunpckdq", { MaskG, MaskVex, MaskE }, 0 }, }, { /* MOD_VEX_W_0_0F4B_P_2_LEN_1 */ { Bad_Opcode }, - { "kunpckbw", { MaskG, MaskVex, MaskR }, 0 }, + { "kunpckbw", { MaskG, MaskVex, MaskE }, 0 }, }, { /* MOD_VEX_0F50 */ { Bad_Opcode }, - { "vmovmskpX", { Gdq, XS }, 0 }, + { "vmovmskpX", { Gdq, XS }, PREFIX_OPCODE }, }, { /* MOD_VEX_0F71_REG_2 */ { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_VEX_0F71_REG_2) }, + { "vpsrlw", { Vex, XS, Ib }, PREFIX_DATA }, }, { /* MOD_VEX_0F71_REG_4 */ { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_VEX_0F71_REG_4) }, + { "vpsraw", { Vex, XS, Ib }, PREFIX_DATA }, }, { /* MOD_VEX_0F71_REG_6 */ { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_VEX_0F71_REG_6) }, + { "vpsllw", { Vex, XS, Ib }, PREFIX_DATA }, }, { /* MOD_VEX_0F72_REG_2 */ { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_VEX_0F72_REG_2) }, + { "vpsrld", { Vex, XS, Ib }, PREFIX_DATA }, }, { /* MOD_VEX_0F72_REG_4 */ { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_VEX_0F72_REG_4) }, + { "vpsrad", { Vex, XS, Ib }, PREFIX_DATA }, }, { /* MOD_VEX_0F72_REG_6 */ { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_VEX_0F72_REG_6) }, + { "vpslld", { Vex, XS, Ib }, PREFIX_DATA }, }, { /* MOD_VEX_0F73_REG_2 */ { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_VEX_0F73_REG_2) }, + { "vpsrlq", { Vex, XS, Ib }, PREFIX_DATA }, }, { /* MOD_VEX_0F73_REG_3 */ { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_VEX_0F73_REG_3) }, + { "vpsrldq", { Vex, XS, Ib }, PREFIX_DATA }, }, { /* MOD_VEX_0F73_REG_6 */ { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_VEX_0F73_REG_6) }, + { "vpsllq", { Vex, XS, Ib }, PREFIX_DATA }, }, { /* MOD_VEX_0F73_REG_7 */ { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_VEX_0F73_REG_7) }, + { "vpslldq", { Vex, XS, Ib }, PREFIX_DATA }, }, { /* MOD_VEX_W_0_0F91_P_0_LEN_0 */ @@ -10794,72 +8514,72 @@ { /* MOD_VEX_W_0_0F92_P_0_LEN_0 */ { Bad_Opcode }, - { "kmovw", { MaskG, Rdq }, 0 }, + { "kmovw", { MaskG, Edq }, 0 }, }, { /* MOD_VEX_W_0_0F92_P_2_LEN_0 */ { Bad_Opcode }, - { "kmovb", { MaskG, Rdq }, 0 }, + { "kmovb", { MaskG, Edq }, 0 }, }, { /* MOD_VEX_0F92_P_3_LEN_0 */ { Bad_Opcode }, - { "kmovK", { MaskG, Rdq }, 0 }, + { "kmovK", { MaskG, Edq }, 0 }, }, { /* MOD_VEX_W_0_0F93_P_0_LEN_0 */ { Bad_Opcode }, - { "kmovw", { Gdq, MaskR }, 0 }, + { "kmovw", { Gdq, MaskE }, 0 }, }, { /* MOD_VEX_W_0_0F93_P_2_LEN_0 */ { Bad_Opcode }, - { "kmovb", { Gdq, MaskR }, 0 }, + { "kmovb", { Gdq, MaskE }, 0 }, }, { /* MOD_VEX_0F93_P_3_LEN_0 */ { Bad_Opcode }, - { "kmovK", { Gdq, MaskR }, 0 }, + { "kmovK", { Gdq, MaskE }, 0 }, }, { /* MOD_VEX_W_0_0F98_P_0_LEN_0 */ { Bad_Opcode }, - { "kortestw", { MaskG, MaskR }, 0 }, + { "kortestw", { MaskG, MaskE }, 0 }, }, { /* MOD_VEX_W_1_0F98_P_0_LEN_0 */ { Bad_Opcode }, - { "kortestq", { MaskG, MaskR }, 0 }, + { "kortestq", { MaskG, MaskE }, 0 }, }, { /* MOD_VEX_W_0_0F98_P_2_LEN_0 */ { Bad_Opcode }, - { "kortestb", { MaskG, MaskR }, 0 }, + { "kortestb", { MaskG, MaskE }, 0 }, }, { /* MOD_VEX_W_1_0F98_P_2_LEN_0 */ { Bad_Opcode }, - { "kortestd", { MaskG, MaskR }, 0 }, + { "kortestd", { MaskG, MaskE }, 0 }, }, { /* MOD_VEX_W_0_0F99_P_0_LEN_0 */ { Bad_Opcode }, - { "ktestw", { MaskG, MaskR }, 0 }, + { "ktestw", { MaskG, MaskE }, 0 }, }, { /* MOD_VEX_W_1_0F99_P_0_LEN_0 */ { Bad_Opcode }, - { "ktestq", { MaskG, MaskR }, 0 }, + { "ktestq", { MaskG, MaskE }, 0 }, }, { /* MOD_VEX_W_0_0F99_P_2_LEN_0 */ { Bad_Opcode }, - { "ktestb", { MaskG, MaskR }, 0 }, + { "ktestb", { MaskG, MaskE }, 0 }, }, { /* MOD_VEX_W_1_0F99_P_2_LEN_0 */ { Bad_Opcode }, - { "ktestd", { MaskG, MaskR }, 0 }, + { "ktestd", { MaskG, MaskE }, 0 }, }, { /* MOD_VEX_0FAE_REG_2 */ @@ -10870,93 +8590,78 @@ { VEX_LEN_TABLE (VEX_LEN_0FAE_R_3_M_0) }, }, { - /* MOD_VEX_0FD7_PREFIX_2 */ + /* MOD_VEX_0FD7 */ { Bad_Opcode }, - { "vpmovmskb", { Gdq, XS }, 0 }, + { "vpmovmskb", { Gdq, XS }, PREFIX_DATA }, }, { - /* MOD_VEX_0FE7_PREFIX_2 */ - { "vmovntdq", { Mx, XM }, 0 }, + /* MOD_VEX_0FE7 */ + { "vmovntdq", { Mx, XM }, PREFIX_DATA }, }, { /* MOD_VEX_0FF0_PREFIX_3 */ { "vlddqu", { XM, M }, 0 }, }, { - /* MOD_VEX_0F381A_PREFIX_2 */ - { VEX_LEN_TABLE (VEX_LEN_0F381A_P_2_M_0) }, - }, - { - /* MOD_VEX_0F382A_PREFIX_2 */ - { "vmovntdqa", { XM, Mx }, 0 }, - }, - { - /* MOD_VEX_0F382C_PREFIX_2 */ - { VEX_W_TABLE (VEX_W_0F382C_P_2_M_0) }, - }, - { - /* MOD_VEX_0F382D_PREFIX_2 */ - { VEX_W_TABLE (VEX_W_0F382D_P_2_M_0) }, + /* MOD_VEX_0F381A */ + { VEX_LEN_TABLE (VEX_LEN_0F381A_M_0) }, }, { - /* MOD_VEX_0F382E_PREFIX_2 */ - { VEX_W_TABLE (VEX_W_0F382E_P_2_M_0) }, + /* MOD_VEX_0F382A */ + { "vmovntdqa", { XM, Mx }, PREFIX_DATA }, }, { - /* MOD_VEX_0F382F_PREFIX_2 */ - { VEX_W_TABLE (VEX_W_0F382F_P_2_M_0) }, + /* MOD_VEX_0F382C */ + { VEX_W_TABLE (VEX_W_0F382C_M_0) }, }, { - /* MOD_VEX_0F385A_PREFIX_2 */ - { VEX_LEN_TABLE (VEX_LEN_0F385A_P_2_M_0) }, + /* MOD_VEX_0F382D */ + { VEX_W_TABLE (VEX_W_0F382D_M_0) }, }, { - /* MOD_VEX_0F388C_PREFIX_2 */ - { "vpmaskmov%LW", { XM, Vex, Mx }, 0 }, + /* MOD_VEX_0F382E */ + { VEX_W_TABLE (VEX_W_0F382E_M_0) }, }, { - /* MOD_VEX_0F388E_PREFIX_2 */ - { "vpmaskmov%LW", { Mx, Vex, XM }, 0 }, + /* MOD_VEX_0F382F */ + { VEX_W_TABLE (VEX_W_0F382F_M_0) }, }, { - /* MOD_VEX_W_0_0F3A30_P_2_LEN_0 */ - { Bad_Opcode }, - { "kshiftrb", { MaskG, MaskR, Ib }, 0 }, + /* MOD_VEX_0F385A */ + { VEX_LEN_TABLE (VEX_LEN_0F385A_M_0) }, }, { - /* MOD_VEX_W_1_0F3A30_P_2_LEN_0 */ - { Bad_Opcode }, - { "kshiftrw", { MaskG, MaskR, Ib }, 0 }, + /* MOD_VEX_0F388C */ + { "vpmaskmov%DQ", { XM, Vex, Mx }, PREFIX_DATA }, }, { - /* MOD_VEX_W_0_0F3A31_P_2_LEN_0 */ - { Bad_Opcode }, - { "kshiftrd", { MaskG, MaskR, Ib }, 0 }, + /* MOD_VEX_0F388E */ + { "vpmaskmov%DQ", { Mx, Vex, XM }, PREFIX_DATA }, }, { - /* MOD_VEX_W_1_0F3A31_P_2_LEN_0 */ + /* MOD_VEX_0F3A30_L_0 */ { Bad_Opcode }, - { "kshiftrq", { MaskG, MaskR, Ib }, 0 }, + { "kshiftr%BW", { MaskG, MaskE, Ib }, PREFIX_DATA }, }, { - /* MOD_VEX_W_0_0F3A32_P_2_LEN_0 */ + /* MOD_VEX_0F3A31_L_0 */ { Bad_Opcode }, - { "kshiftlb", { MaskG, MaskR, Ib }, 0 }, + { "kshiftr%DQ", { MaskG, MaskE, Ib }, PREFIX_DATA }, }, { - /* MOD_VEX_W_1_0F3A32_P_2_LEN_0 */ + /* MOD_VEX_0F3A32_L_0 */ { Bad_Opcode }, - { "kshiftlw", { MaskG, MaskR, Ib }, 0 }, + { "kshiftl%BW", { MaskG, MaskE, Ib }, PREFIX_DATA }, }, { - /* MOD_VEX_W_0_0F3A33_P_2_LEN_0 */ + /* MOD_VEX_0F3A33_L_0 */ { Bad_Opcode }, - { "kshiftld", { MaskG, MaskR, Ib }, 0 }, + { "kshiftl%DQ", { MaskG, MaskE, Ib }, PREFIX_DATA }, }, { - /* MOD_VEX_W_1_0F3A33_P_2_LEN_0 */ + /* MOD_VEX_0FXOP_09_12 */ { Bad_Opcode }, - { "kshiftlq", { MaskG, MaskR, Ib }, 0 }, + { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_12_M_1) }, }, #include "i386-dis-evex-mod.h" @@ -10969,7 +8674,7 @@ }, { /* RM_C7_REG_7 */ - { "xbeginT", { Skip_MODRM, Jv }, 0 }, + { "xbeginT", { Skip_MODRM, Jdqw }, 0 }, }, { /* RM_0F01_REG_0 */ @@ -11005,7 +8710,7 @@ { /* RM_0F01_REG_3 */ { "vmrun", { Skip_MODRM }, 0 }, - { "vmmcall", { Skip_MODRM }, 0 }, + { PREFIX_TABLE (PREFIX_0F01_REG_3_RM_1) }, { "vmload", { Skip_MODRM }, 0 }, { "vmsave", { Skip_MODRM }, 0 }, { "stgi", { Skip_MODRM }, 0 }, @@ -11016,7 +8721,7 @@ { /* RM_0F01_REG_5_MOD_3 */ { PREFIX_TABLE (PREFIX_0F01_REG_5_MOD_3_RM_0) }, - { Bad_Opcode }, + { PREFIX_TABLE (PREFIX_0F01_REG_5_MOD_3_RM_1) }, { PREFIX_TABLE (PREFIX_0F01_REG_5_MOD_3_RM_2) }, { Bad_Opcode }, { Bad_Opcode }, @@ -11029,7 +8734,7 @@ { "swapgs", { Skip_MODRM }, 0 }, { "rdtscp", { Skip_MODRM }, 0 }, { PREFIX_TABLE (PREFIX_0F01_REG_7_MOD_3_RM_2) }, - { PREFIX_TABLE (PREFIX_0F01_REG_7_MOD_3_RM_3) }, + { "mwaitx", { { OP_Mwait, eBX_reg } }, PREFIX_OPCODE }, { "clzero", { Skip_MODRM }, 0 }, { "rdpru", { Skip_MODRM }, 0 }, }, @@ -11053,6 +8758,10 @@ { "sfence", { Skip_MODRM }, 0 }, }, + { + /* RM_VEX_0F3849_X86_64_P_0_W_0_M_1_R_0 */ + { VEX_LEN_TABLE (VEX_LEN_0F3849_X86_64_P_0_W_0_M_1_REG_0_RM_0) }, + }, }; #define INTERNAL_DISASSEMBLER_ERROR _("<internal disassembler error>") @@ -11065,12 +8774,14 @@ #define BND_PREFIX (0xf2 | 0x400) #define NOTRACK_PREFIX (0x3e | 0x100) +/* Remember if the current op is a jump instruction. */ +static bfd_boolean op_is_jump = FALSE; + static int ckprefix (void) { int newrex, i, length; rex = 0; - rex_ignored = 0; prefixes = 0; used_prefixes = 0; rex_used = 0; @@ -11314,7 +9025,7 @@ enum x86_64_isa { - amd64 = 0, + amd64 = 1, intel64 }; @@ -11530,8 +9241,6 @@ case USE_XOP_8F_TABLE: FETCH_DATA (info, codep + 3); - /* All bits in the REX prefix are ignored. */ - rex_ignored = rex; rex = ~(*codep >> 5) & 0x7; /* VEX_TABLE_INDEX is the mmmmm part of the XOP byte 1 "RCB.mmmmm". */ @@ -11578,7 +9287,6 @@ break; } need_vex = 1; - need_vex_reg = 1; codep++; vindex = *codep++; dp = &xop_table[vex_table_index][vindex]; @@ -11588,13 +9296,16 @@ modrm.mod = (*codep >> 6) & 3; modrm.reg = (*codep >> 3) & 7; modrm.rm = *codep & 7; + + /* No XOP encoding so far allows for a non-zero embedded prefix. Avoid + having to decode the bits for every otherwise valid encoding. */ + if (vex.prefix) + return &bad_opcode; break; case USE_VEX_C4_TABLE: /* VEX prefix. */ FETCH_DATA (info, codep + 3); - /* All bits in the REX prefix are ignored. */ - rex_ignored = rex; rex = ~(*codep >> 5) & 0x7; switch ((*codep & 0x1f)) { @@ -11642,7 +9353,6 @@ break; } need_vex = 1; - need_vex_reg = 1; codep++; vindex = *codep++; dp = &vex_table[vex_table_index][vindex]; @@ -11660,8 +9370,6 @@ case USE_VEX_C5_TABLE: /* VEX prefix. */ FETCH_DATA (info, codep + 2); - /* All bits in the REX prefix are ignored. */ - rex_ignored = rex; rex = (*codep & 0x80) ? 0 : REX_R; /* For the 2-byte VEX prefix in 32-bit mode, the highest bit in @@ -11683,7 +9391,6 @@ break; } need_vex = 1; - need_vex_reg = 1; codep++; vindex = *codep++; dp = &vex_table[dp->op[1].bytemode][vindex]; @@ -11710,8 +9417,6 @@ /* EVEX prefix. */ vex.evex = 1; FETCH_DATA (info, codep + 4); - /* All bits in the REX prefix are ignored. */ - rex_ignored = rex; /* The first byte after 0x62. */ rex = ~(*codep >> 5) & 0x7; vex.r = *codep & 0x10; @@ -11777,7 +9482,6 @@ } need_vex = 1; - need_vex_reg = 1; codep++; vindex = *codep++; dp = &evex_table[vex_table_index][vindex]; @@ -11874,17 +9578,17 @@ else if (CONST_STRNEQ (p, "x86-64")) { address_mode = mode_64bit; - priv.orig_sizeflag = AFLAG | DFLAG; + priv.orig_sizeflag |= AFLAG | DFLAG; } else if (CONST_STRNEQ (p, "i386")) { address_mode = mode_32bit; - priv.orig_sizeflag = AFLAG | DFLAG; + priv.orig_sizeflag |= AFLAG | DFLAG; } else if (CONST_STRNEQ (p, "i8086")) { address_mode = mode_16bit; - priv.orig_sizeflag = 0; + priv.orig_sizeflag &= ~(AFLAG | DFLAG); } else if (CONST_STRNEQ (p, "intel")) { @@ -11950,6 +9654,7 @@ names_xmm = intel_names_xmm; names_ymm = intel_names_ymm; names_zmm = intel_names_zmm; + names_tmm = intel_names_tmm; index64 = intel_index64; index32 = intel_index32; names_mask = intel_names_mask; @@ -11972,6 +9677,7 @@ names_xmm = att_names_xmm; names_ymm = att_names_ymm; names_zmm = att_names_zmm; + names_tmm = att_names_tmm; index64 = att_index64; index32 = att_index32; names_mask = att_names_mask; @@ -12100,8 +9806,6 @@ } need_vex = 0; - need_vex_reg = 0; - vex_w_done = 0; memset (&vex, 0, sizeof (vex)); if (dp->name == NULL && dp->op[0].bytemode == FLOATCODE) @@ -12139,6 +9843,50 @@ } } + /* Clear instruction information. */ + if (the_info) + { + the_info->insn_info_valid = 0; + the_info->branch_delay_insns = 0; + the_info->data_size = 0; + the_info->insn_type = dis_noninsn; + the_info->target = 0; + the_info->target2 = 0; + } + + /* Reset jump operation indicator. */ + op_is_jump = FALSE; + + { + int jump_detection = 0; + + /* Extract flags. */ + for (i = 0; i < MAX_OPERANDS; ++i) + { + if ((dp->op[i].rtn == OP_J) + || (dp->op[i].rtn == OP_indirE)) + jump_detection |= 1; + else if ((dp->op[i].rtn == BND_Fixup) + || (!dp->op[i].rtn && !dp->op[i].bytemode)) + jump_detection |= 2; + else if ((dp->op[i].bytemode == cond_jump_mode) + || (dp->op[i].bytemode == loop_jcxz_mode)) + jump_detection |= 4; + } + + /* Determine if this is a jump or branch. */ + if ((jump_detection & 0x3) == 0x3) + { + op_is_jump = TRUE; + if (jump_detection & 0x4) + the_info->insn_type = dis_condbranch; + else + the_info->insn_type = + (dp->name && !strncmp(dp->name, "call", 4)) + ? dis_jsr : dis_branch; + } + } + /* If VEX.vvvv and EVEX.vvvv are unused, they must be all 1s, which are all 0s in inverted form. */ if (need_vex && vex.register_specifier != 0) @@ -12147,8 +9895,48 @@ return end_codep - priv.the_buffer; } + switch (dp->prefix_requirement) + { + case PREFIX_DATA: + /* If only the data prefix is marked as mandatory, its absence renders + the encoding invalid. Most other PREFIX_OPCODE rules still apply. */ + if (need_vex ? !vex.prefix : !(prefixes & PREFIX_DATA)) + { + (*info->fprintf_func) (info->stream, "(bad)"); + return end_codep - priv.the_buffer; + } + used_prefixes |= PREFIX_DATA; + /* Fall through. */ + case PREFIX_OPCODE: + /* If the mandatory PREFIX_REPZ/PREFIX_REPNZ/PREFIX_DATA prefix is + unused, opcode is invalid. Since the PREFIX_DATA prefix may be + used by putop and MMX/SSE operand and may be overridden by the + PREFIX_REPZ/PREFIX_REPNZ fix, we check the PREFIX_DATA prefix + separately. */ + if (((need_vex + ? vex.prefix == REPE_PREFIX_OPCODE + || vex.prefix == REPNE_PREFIX_OPCODE + : (prefixes + & (PREFIX_REPZ | PREFIX_REPNZ)) != 0) + && (used_prefixes + & (PREFIX_REPZ | PREFIX_REPNZ)) == 0) + || (((need_vex + ? vex.prefix == DATA_PREFIX_OPCODE + : ((prefixes + & (PREFIX_REPZ | PREFIX_REPNZ | PREFIX_DATA)) + == PREFIX_DATA)) + && (used_prefixes & PREFIX_DATA) == 0)) + || (vex.evex && dp->prefix_requirement != PREFIX_DATA + && !vex.w != !(used_prefixes & PREFIX_DATA))) + { + (*info->fprintf_func) (info->stream, "(bad)"); + return end_codep - priv.the_buffer; + } + break; + } + /* Check if the REX prefix is used. */ - if (rex_ignored == 0 && (rex ^ rex_used) == 0 && last_rex_prefix >= 0) + if ((rex ^ rex_used) == 0 && !need_vex && last_rex_prefix >= 0) all_prefixes[last_rex_prefix] = 0; /* Check if the SEG prefix is used. */ @@ -12164,7 +9952,8 @@ /* Check if the DATA prefix is used. */ if ((prefixes & PREFIX_DATA) != 0 - && (used_prefixes & PREFIX_DATA) != 0) + && (used_prefixes & PREFIX_DATA) != 0 + && !need_vex) all_prefixes[last_data_prefix] = 0; /* Print the extra prefixes. */ @@ -12180,26 +9969,6 @@ (*info->fprintf_func) (info->stream, "%s ", name); } - /* If the mandatory PREFIX_REPZ/PREFIX_REPNZ/PREFIX_DATA prefix is - unused, opcode is invalid. Since the PREFIX_DATA prefix may be - used by putop and MMX/SSE operand and may be overriden by the - PREFIX_REPZ/PREFIX_REPNZ fix, we check the PREFIX_DATA prefix - separately. */ - if (dp->prefix_requirement == PREFIX_OPCODE - && dp != &bad_opcode - && (((prefixes - & (PREFIX_REPZ | PREFIX_REPNZ)) != 0 - && (used_prefixes - & (PREFIX_REPZ | PREFIX_REPNZ)) == 0) - || ((((prefixes - & (PREFIX_REPZ | PREFIX_REPNZ | PREFIX_DATA)) - == PREFIX_DATA) - && (used_prefixes & PREFIX_DATA) == 0)))) - { - (*info->fprintf_func) (info->stream, "(bad)"); - return end_codep - priv.the_buffer; - } - /* Check maximum code length. */ if ((codep - start_codep) > MAX_CODE_LENGTH) { @@ -12252,7 +10021,19 @@ if (needcomma) (*info->fprintf_func) (info->stream, ","); if (op_index[i] != -1 && !op_riprel[i]) - (*info->print_address_func) ((bfd_vma) op_address[op_index[i]], info); + { + bfd_vma target = (bfd_vma) op_address[op_index[i]]; + + if (the_info && op_is_jump) + { + the_info->insn_info_valid = 1; + the_info->branch_delay_insns = 0; + the_info->data_size = 0; + the_info->target = target; + the_info->target2 = 0; + } + (*info->print_address_func) (target, info); + } else (*info->fprintf_func) (info->stream, "%s", op_txt[i]); needcomma = 1; @@ -12284,9 +10065,9 @@ "(bad)", "fst{s|}", "fstp{s|}", - "fldenvIC", + "fldenv{C|C}", "fldcw", - "fNstenvIC", + "fNstenv{C|C}", "fNstcw", /* da */ "fiadd{l|}", @@ -12303,9 +10084,9 @@ "fist{l|}", "fistp{l|}", "(bad)", - "fld{t||t|}", + "fld{t|}", "(bad)", - "fstp{t||t|}", + "fstp{t|}", /* dc */ "fadd{l|}", "fmul{l|}", @@ -12320,9 +10101,9 @@ "fisttp{ll|}", "fst{l||}", "fstp{l|}", - "frstorIC", + "frstor{C|C}", "(bad)", - "fNsaveIC", + "fNsave{C|C}", "fNstsw", /* de */ "fiadd{s|}", @@ -12668,17 +10449,18 @@ const char *p; int alt = 0; int cond = 1; - unsigned int l = 0, len = 1; + unsigned int l = 0, len = 0; char last[4]; -#define SAVE_LAST(c) \ - if (l < len && l < sizeof (last)) \ - last[l++] = c; \ - else \ - abort (); - for (p = in_template; *p; p++) { + if (len > l) + { + if (l >= sizeof (last) || !ISUPPER (*p)) + abort (); + last[l++] = *p; + continue; + } switch (*p) { default: @@ -12696,11 +10478,9 @@ while (*++p != '|') if (*p == '}' || *p == '\0') abort (); + alt = 1; } - /* Fall through. */ - case 'I': - alt = 1; - continue; + break; case '|': while (*++p != '}') { @@ -12709,6 +10489,7 @@ } break; case '}': + alt = 0; break; case 'A': if (intel_syntax) @@ -12717,24 +10498,16 @@ *obufp++ = 'b'; break; case 'B': - if (l == 0 && len == 1) + if (l == 0) { -case_B: + case_B: if (intel_syntax) break; if (sizeflag & SUFFIX_ALWAYS) *obufp++ = 'b'; } - else + else if (l == 1 && last[0] == 'L') { - if (l != 1 - || len != 2 - || last[0] != 'L') - { - SAVE_LAST (*p); - break; - } - if (address_mode == mode_64bit && !(prefixes & PREFIX_ADDR)) { @@ -12745,6 +10518,8 @@ goto case_B; } + else + abort (); break; case 'C': if (intel_syntax && !alt) @@ -12828,11 +10603,6 @@ *obufp++ = 'n'; } break; - case 'J': - if (intel_syntax) - break; - *obufp++ = 'l'; - break; case 'K': USED_REX (REX_W); if (rex & REX_W) @@ -12840,56 +10610,8 @@ else *obufp++ = 'd'; break; - case 'Z': - if (l != 0 || len != 1) - { - if (l != 1 || len != 2 || last[0] != 'X') - { - SAVE_LAST (*p); - break; - } - if (!need_vex || !vex.evex) - abort (); - if (intel_syntax - || ((modrm.mod == 3 || vex.b) && !(sizeflag & SUFFIX_ALWAYS))) - break; - switch (vex.length) - { - case 128: - *obufp++ = 'x'; - break; - case 256: - *obufp++ = 'y'; - break; - case 512: - *obufp++ = 'z'; - break; - default: - abort (); - } - break; - } - if (intel_syntax) - break; - if (address_mode == mode_64bit && (sizeflag & SUFFIX_ALWAYS)) - { - *obufp++ = 'q'; - break; - } - /* Fall through. */ - goto case_L; case 'L': - if (l != 0 || len != 1) - { - SAVE_LAST (*p); - break; - } -case_L: - if (intel_syntax) - break; - if (sizeflag & SUFFIX_ALWAYS) - *obufp++ = 'l'; - break; + abort (); case 'M': if (intel_mnemonic != cond) *obufp++ = 'r'; @@ -12911,65 +10633,37 @@ if (!(rex & REX_W)) used_prefixes |= (prefixes & PREFIX_DATA); break; - case '&': - if (!intel_syntax - && address_mode == mode_64bit - && isa64 == intel64) - { - *obufp++ = 'q'; - break; - } - /* Fall through. */ - case 'T': - if (!intel_syntax - && address_mode == mode_64bit - && ((sizeflag & DFLAG) || (rex & REX_W))) + case '@': + if (address_mode == mode_64bit + && (isa64 == intel64 || (rex & REX_W) + || !(prefixes & PREFIX_DATA))) { - *obufp++ = 'q'; + if (sizeflag & SUFFIX_ALWAYS) + *obufp++ = 'q'; break; } /* Fall through. */ - goto case_P; case 'P': - if (l == 0 && len == 1) - { -case_P: - if (intel_syntax) - { - if ((rex & REX_W) == 0 - && (prefixes & PREFIX_DATA)) - { - if ((sizeflag & DFLAG) == 0) - *obufp++ = 'w'; - used_prefixes |= (prefixes & PREFIX_DATA); - } - break; - } - if ((prefixes & PREFIX_DATA) - || (rex & REX_W) - || (sizeflag & SUFFIX_ALWAYS)) - { - USED_REX (REX_W); - if (rex & REX_W) - *obufp++ = 'q'; - else - { - if (sizeflag & DFLAG) - *obufp++ = 'l'; - else - *obufp++ = 'w'; - used_prefixes |= (prefixes & PREFIX_DATA); - } - } - } - else + if (l == 0) { - if (l != 1 || len != 2 || last[0] != 'L') + if (((need_modrm && modrm.mod == 3) || !cond) + && !(sizeflag & SUFFIX_ALWAYS)) + break; + /* Fall through. */ + case 'T': + if ((!(rex & REX_W) && (prefixes & PREFIX_DATA)) + || ((sizeflag & SUFFIX_ALWAYS) + && address_mode != mode_64bit)) { - SAVE_LAST (*p); - break; + *obufp++ = (sizeflag & DFLAG) ? + intel_syntax ? 'd' : 'l' : 'w'; + used_prefixes |= (prefixes & PREFIX_DATA); } - + else if (sizeflag & SUFFIX_ALWAYS) + *obufp++ = 'q'; + } + else if (l == 1 && last[0] == 'L') + { if ((prefixes & PREFIX_DATA) || (rex & REX_W) || (sizeflag & SUFFIX_ALWAYS)) @@ -12987,23 +10681,12 @@ } } } + else + abort (); break; - case 'U': - if (intel_syntax) - break; - if (address_mode == mode_64bit - && ((sizeflag & DFLAG) || (rex & REX_W))) - { - if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS)) - *obufp++ = 'q'; - break; - } - /* Fall through. */ - goto case_Q; case 'Q': - if (l == 0 && len == 1) + if (l == 0) { -case_Q: if (intel_syntax && !alt) break; USED_REX (REX_W); @@ -13021,24 +10704,24 @@ } } } - else + else if (l == 1 && last[0] == 'D') + *obufp++ = vex.w ? 'q' : 'd'; + else if (l == 1 && last[0] == 'L') { - if (l != 1 || len != 2 || last[0] != 'L') - { - SAVE_LAST (*p); - break; - } - if (intel_syntax - || (modrm.mod == 3 && !(sizeflag & SUFFIX_ALWAYS))) + if (cond ? modrm.mod == 3 && !(sizeflag & SUFFIX_ALWAYS) + : address_mode != mode_64bit) break; if ((rex & REX_W)) { USED_REX (REX_W); *obufp++ = 'q'; } - else - *obufp++ = 'l'; + else if((address_mode == mode_64bit && need_modrm && cond) + || (sizeflag & SUFFIX_ALWAYS)) + *obufp++ = intel_syntax? 'd' : 'l'; } + else + abort (); break; case 'R': USED_REX (REX_W); @@ -13059,42 +10742,10 @@ if (!(rex & REX_W)) used_prefixes |= (prefixes & PREFIX_DATA); break; - case 'V': - if (l == 0 && len == 1) - { - if (intel_syntax) - break; - if (address_mode == mode_64bit - && ((sizeflag & DFLAG) || (rex & REX_W))) - { - if (sizeflag & SUFFIX_ALWAYS) - *obufp++ = 'q'; - break; - } - } - else - { - if (l != 1 - || len != 2 - || last[0] != 'L') - { - SAVE_LAST (*p); - break; - } - - if (rex & REX_W) - { - *obufp++ = 'a'; - *obufp++ = 'b'; - *obufp++ = 's'; - } - } - /* Fall through. */ - goto case_S; case 'S': - if (l == 0 && len == 1) + if (l == 0) { -case_S: + case_S: if (intel_syntax) break; if (sizeflag & SUFFIX_ALWAYS) @@ -13111,16 +10762,8 @@ } } } - else + else if (l == 1 && last[0] == 'L') { - if (l != 1 - || len != 2 - || last[0] != 'L') - { - SAVE_LAST (*p); - break; - } - if (address_mode == mode_64bit && !(prefixes & PREFIX_ADDR)) { @@ -13131,39 +10774,73 @@ goto case_S; } + else + abort (); break; - case 'X': - if (l != 0 || len != 1) + case 'V': + if (l == 0) + abort (); + else if (l == 1 && last[0] == 'L') { - SAVE_LAST (*p); - break; + if (rex & REX_W) + { + *obufp++ = 'a'; + *obufp++ = 'b'; + *obufp++ = 's'; + } } - if (need_vex && vex.prefix) + else + abort (); + goto case_S; + case 'W': + if (l == 0) { - if (vex.prefix == DATA_PREFIX_OPCODE) - *obufp++ = 'd'; + /* operand size flag for cwtl, cbtw */ + USED_REX (REX_W); + if (rex & REX_W) + { + if (intel_syntax) + *obufp++ = 'd'; + else + *obufp++ = 'l'; + } + else if (sizeflag & DFLAG) + *obufp++ = 'w'; else - *obufp++ = 's'; + *obufp++ = 'b'; + if (!(rex & REX_W)) + used_prefixes |= (prefixes & PREFIX_DATA); } - else + else if (l == 1) { - if (prefixes & PREFIX_DATA) - *obufp++ = 'd'; + if (!need_vex) + abort (); + if (last[0] == 'X') + *obufp++ = vex.w ? 'd': 's'; + else if (last[0] == 'B') + *obufp++ = vex.w ? 'w': 'b'; else - *obufp++ = 's'; - used_prefixes |= (prefixes & PREFIX_DATA); + abort (); } + else + abort (); break; - case 'Y': - if (l == 0 && len == 1) + case 'X': + if (l != 0) abort (); + if (need_vex + ? vex.prefix == DATA_PREFIX_OPCODE + : prefixes & PREFIX_DATA) + { + *obufp++ = 'd'; + used_prefixes |= PREFIX_DATA; + } else + *obufp++ = 's'; + break; + case 'Y': + if (l == 1 && last[0] == 'X') { - if (l != 1 || len != 2 || last[0] != 'X') - { - SAVE_LAST (*p); - break; - } if (!need_vex) abort (); if (intel_syntax @@ -13183,47 +10860,51 @@ abort (); } } + else + abort (); break; - case 'W': - if (l == 0 && len == 1) + case 'Z': + if (l == 0) { - /* operand size flag for cwtl, cbtw */ - USED_REX (REX_W); - if (rex & REX_W) - { - if (intel_syntax) - *obufp++ = 'd'; - else - *obufp++ = 'l'; - } - else if (sizeflag & DFLAG) - *obufp++ = 'w'; - else - *obufp++ = 'b'; - if (!(rex & REX_W)) - used_prefixes |= (prefixes & PREFIX_DATA); + /* These insns ignore ModR/M.mod: Force it to 3 for OP_E(). */ + modrm.mod = 3; + if (!intel_syntax && (sizeflag & SUFFIX_ALWAYS)) + *obufp++ = address_mode == mode_64bit ? 'q' : 'l'; } - else + else if (l == 1 && last[0] == 'X') { - if (l != 1 - || len != 2 - || (last[0] != 'X' - && last[0] != 'L')) + if (!need_vex || !vex.evex) + abort (); + if (intel_syntax + || ((modrm.mod == 3 || vex.b) && !(sizeflag & SUFFIX_ALWAYS))) + break; + switch (vex.length) { - SAVE_LAST (*p); + case 128: + *obufp++ = 'x'; + break; + case 256: + *obufp++ = 'y'; break; + case 512: + *obufp++ = 'z'; + break; + default: + abort (); } - if (!need_vex) - abort (); - if (last[0] == 'X') - *obufp++ = vex.w ? 'd': 's'; - else - *obufp++ = vex.w ? 'q': 'd'; } + else + abort (); break; case '^': if (intel_syntax) break; + if (isa64 == intel64 && (rex & REX_W)) + { + USED_REX (REX_W); + *obufp++ = 'q'; + break; + } if ((prefixes & PREFIX_DATA) || (sizeflag & SUFFIX_ALWAYS)) { if (sizeflag & DFLAG) @@ -13233,22 +10914,10 @@ used_prefixes |= (prefixes & PREFIX_DATA); } break; - case '@': - if (intel_syntax) - break; - if (address_mode == mode_64bit - && (isa64 == intel64 - || ((sizeflag & DFLAG) || (rex & REX_W)))) - *obufp++ = 'q'; - else if ((prefixes & PREFIX_DATA)) - { - if (!(sizeflag & DFLAG)) - *obufp++ = 'w'; - used_prefixes |= (prefixes & PREFIX_DATA); - } - break; } - alt = 0; + + if (len == l) + len = l = 0; } *obufp = 0; mnemonicendp = obufp; @@ -13450,9 +11119,11 @@ USED_REX (REX_W); if (rex & REX_W) oappend ("QWORD PTR "); + else if (bytemode == dq_mode) + oappend ("DWORD PTR "); else { - if ((sizeflag & DFLAG) || bytemode == dq_mode) + if (sizeflag & DFLAG) oappend ("DWORD PTR "); else oappend ("WORD PTR "); @@ -13473,16 +11144,19 @@ oappend ("DWORD PTR "); used_prefixes |= (prefixes & PREFIX_DATA); break; + case movsxd_mode: + if (!(sizeflag & DFLAG) && isa64 == intel64) + oappend ("WORD PTR "); + else + oappend ("DWORD PTR "); + used_prefixes |= (prefixes & PREFIX_DATA); + break; case d_mode: - case d_scalar_mode: - case d_scalar_swap_mode: case d_swap_mode: case dqd_mode: oappend ("DWORD PTR "); break; case q_mode: - case q_scalar_mode: - case q_scalar_swap_mode: case q_swap_mode: oappend ("QWORD PTR "); break; @@ -13506,8 +11180,7 @@ case x_swap_mode: case evex_x_gscat_mode: case evex_x_nobcst_mode: - case b_scalar_mode: - case w_scalar_mode: + case bw_unit_mode: if (need_vex) { switch (vex.length) @@ -13523,155 +11196,53 @@ break; default: abort (); - } - } - else - oappend ("XMMWORD PTR "); - break; - case xmm_mode: - oappend ("XMMWORD PTR "); - break; - case ymm_mode: - oappend ("YMMWORD PTR "); - break; - case xmmq_mode: - case evex_half_bcst_xmmq_mode: - if (!need_vex) - abort (); - - switch (vex.length) - { - case 128: - oappend ("QWORD PTR "); - break; - case 256: - oappend ("XMMWORD PTR "); - break; - case 512: - oappend ("YMMWORD PTR "); - break; - default: - abort (); - } - break; - case xmm_mb_mode: - if (!need_vex) - abort (); - - switch (vex.length) - { - case 128: - case 256: - case 512: - oappend ("BYTE PTR "); - break; - default: - abort (); - } - break; - case xmm_mw_mode: - if (!need_vex) - abort (); - - switch (vex.length) - { - case 128: - case 256: - case 512: - oappend ("WORD PTR "); - break; - default: - abort (); - } - break; - case xmm_md_mode: - if (!need_vex) - abort (); - - switch (vex.length) - { - case 128: - case 256: - case 512: - oappend ("DWORD PTR "); - break; - default: - abort (); - } - break; - case xmm_mq_mode: - if (!need_vex) - abort (); - - switch (vex.length) - { - case 128: - case 256: - case 512: - oappend ("QWORD PTR "); - break; - default: - abort (); + } } + else + oappend ("XMMWORD PTR "); break; - case xmmdw_mode: - if (!need_vex) - abort (); - - switch (vex.length) - { - case 128: - oappend ("WORD PTR "); - break; - case 256: - oappend ("DWORD PTR "); - break; - case 512: - oappend ("QWORD PTR "); - break; - default: - abort (); - } + case xmm_mode: + oappend ("XMMWORD PTR "); break; - case xmmqd_mode: + case ymm_mode: + oappend ("YMMWORD PTR "); + break; + case xmmq_mode: + case evex_half_bcst_xmmq_mode: if (!need_vex) abort (); switch (vex.length) { case 128: - oappend ("DWORD PTR "); + oappend ("QWORD PTR "); break; case 256: - oappend ("QWORD PTR "); + oappend ("XMMWORD PTR "); break; case 512: - oappend ("XMMWORD PTR "); + oappend ("YMMWORD PTR "); break; default: abort (); } break; - case ymmq_mode: + case xmm_mb_mode: if (!need_vex) abort (); switch (vex.length) { case 128: - oappend ("QWORD PTR "); - break; case 256: - oappend ("YMMWORD PTR "); - break; case 512: - oappend ("ZMMWORD PTR "); + oappend ("BYTE PTR "); break; default: abort (); } break; - case ymmxmm_mode: + case xmm_mw_mode: if (!need_vex) abort (); @@ -13679,2031 +11250,1707 @@ { case 128: case 256: - oappend ("XMMWORD PTR "); + case 512: + oappend ("WORD PTR "); break; default: abort (); } break; - case o_mode: - oappend ("OWORD PTR "); - break; - case xmm_mdq_mode: - case vex_w_dq_mode: - case vex_scalar_w_dq_mode: - if (!need_vex) - abort (); - - if (vex.w) - oappend ("QWORD PTR "); - else - oappend ("DWORD PTR "); - break; - case vex_vsib_d_w_dq_mode: - case vex_vsib_q_w_dq_mode: + case xmm_md_mode: if (!need_vex) abort (); - if (!vex.evex) - { - if (vex.w) - oappend ("QWORD PTR "); - else - oappend ("DWORD PTR "); - } - else - { - switch (vex.length) - { - case 128: - oappend ("XMMWORD PTR "); - break; - case 256: - oappend ("YMMWORD PTR "); - break; - case 512: - oappend ("ZMMWORD PTR "); - break; - default: - abort (); - } - } - break; - case vex_vsib_q_w_d_mode: - case vex_vsib_d_w_d_mode: - if (!need_vex || !vex.evex) - abort (); - switch (vex.length) { case 128: - oappend ("QWORD PTR "); - break; case 256: - oappend ("XMMWORD PTR "); - break; case 512: - oappend ("YMMWORD PTR "); + oappend ("DWORD PTR "); break; default: abort (); } - - break; - case mask_bd_mode: - if (!need_vex || vex.length != 128) - abort (); - if (vex.w) - oappend ("DWORD PTR "); - else - oappend ("BYTE PTR "); break; - case mask_mode: + case xmm_mq_mode: if (!need_vex) abort (); - if (vex.w) - oappend ("QWORD PTR "); - else - oappend ("WORD PTR "); - break; - case v_bnd_mode: - case v_bndmk_mode: - default: - break; - } -} - -static void -OP_E_register (int bytemode, int sizeflag) -{ - int reg = modrm.rm; - const char **names; - - USED_REX (REX_B); - if ((rex & REX_B)) - reg += 8; - - if ((sizeflag & SUFFIX_ALWAYS) - && (bytemode == b_swap_mode - || bytemode == bnd_swap_mode - || bytemode == v_swap_mode)) - swap_operand (); - - switch (bytemode) - { - case b_mode: - case b_swap_mode: - USED_REX (0); - if (rex) - names = names8rex; - else - names = names8; - break; - case w_mode: - names = names16; - break; - case d_mode: - case dw_mode: - case db_mode: - names = names32; - break; - case q_mode: - names = names64; - break; - case m_mode: - case v_bnd_mode: - names = address_mode == mode_64bit ? names64 : names32; - break; - case bnd_mode: - case bnd_swap_mode: - if (reg > 0x3) - { - oappend ("(bad)"); - return; - } - names = names_bnd; - break; - case indir_v_mode: - if (address_mode == mode_64bit && isa64 == intel64) - { - names = names64; - break; - } - /* Fall through. */ - case stack_v_mode: - if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W))) - { - names = names64; - break; - } - bytemode = v_mode; - /* Fall through. */ - case v_mode: - case v_swap_mode: - case dq_mode: - case dqb_mode: - case dqd_mode: - case dqw_mode: - USED_REX (REX_W); - if (rex & REX_W) - names = names64; - else - { - if ((sizeflag & DFLAG) - || (bytemode != v_mode - && bytemode != v_swap_mode)) - names = names32; - else - names = names16; - used_prefixes |= (prefixes & PREFIX_DATA); - } - break; - case va_mode: - names = (address_mode == mode_64bit - ? names64 : names32); - if (!(prefixes & PREFIX_ADDR)) - names = (address_mode == mode_16bit - ? names16 : names); - else - { - /* Remove "addr16/addr32". */ - all_prefixes[last_addr_prefix] = 0; - names = (address_mode != mode_32bit - ? names32 : names16); - used_prefixes |= PREFIX_ADDR; - } - break; - case mask_bd_mode: - case mask_mode: - if (reg > 0x7) - { - oappend ("(bad)"); - return; - } - names = names_mask; - break; - case 0: - return; - default: - oappend (INTERNAL_DISASSEMBLER_ERROR); - return; - } - oappend (names[reg]); -} - -static void -OP_E_memory (int bytemode, int sizeflag) -{ - bfd_vma disp = 0; - int add = (rex & REX_B) ? 8 : 0; - int riprel = 0; - int shift; - if (vex.evex) - { - /* In EVEX, if operand doesn't allow broadcast, vex.b should be 0. */ - if (vex.b - && bytemode != x_mode - && bytemode != xmmq_mode - && bytemode != evex_half_bcst_xmmq_mode) - { - BadOp (); - return; - } - switch (bytemode) + switch (vex.length) { - case dqw_mode: - case dw_mode: - shift = 1; + case 128: + case 256: + case 512: + oappend ("QWORD PTR "); break; - case dqb_mode: - case db_mode: - shift = 0; + default: + abort (); + } + break; + case xmmdw_mode: + if (!need_vex) + abort (); + + switch (vex.length) + { + case 128: + oappend ("WORD PTR "); break; - case dq_mode: - if (address_mode != mode_64bit) - { - shift = 2; - break; - } - /* fall through */ - case vex_vsib_d_w_dq_mode: - case vex_vsib_d_w_d_mode: - case vex_vsib_q_w_dq_mode: - case vex_vsib_q_w_d_mode: - case evex_x_gscat_mode: - case xmm_mdq_mode: - shift = vex.w ? 3 : 2; + case 256: + oappend ("DWORD PTR "); break; - case x_mode: - case evex_half_bcst_xmmq_mode: - case xmmq_mode: - if (vex.b) - { - shift = vex.w ? 3 : 2; - break; - } - /* Fall through. */ - case xmmqd_mode: - case xmmdw_mode: - case ymmq_mode: - case evex_x_nobcst_mode: - case x_swap_mode: - switch (vex.length) - { - case 128: - shift = 4; - break; - case 256: - shift = 5; - break; - case 512: - shift = 6; - break; - default: - abort (); - } + case 512: + oappend ("QWORD PTR "); break; - case ymm_mode: - shift = 5; + default: + abort (); + } + break; + case xmmqd_mode: + if (!need_vex) + abort (); + + switch (vex.length) + { + case 128: + oappend ("DWORD PTR "); break; - case xmm_mode: - shift = 4; + case 256: + oappend ("QWORD PTR "); break; - case xmm_mq_mode: - case q_mode: - case q_scalar_mode: - case q_swap_mode: - case q_scalar_swap_mode: - shift = 3; + case 512: + oappend ("XMMWORD PTR "); break; - case dqd_mode: - case xmm_md_mode: - case d_mode: - case d_scalar_mode: - case d_swap_mode: - case d_scalar_swap_mode: - shift = 2; + default: + abort (); + } + break; + case ymmq_mode: + if (!need_vex) + abort (); + + switch (vex.length) + { + case 128: + oappend ("QWORD PTR "); break; - case w_scalar_mode: - case xmm_mw_mode: - shift = 1; + case 256: + oappend ("YMMWORD PTR "); break; - case b_scalar_mode: - case xmm_mb_mode: - shift = 0; + case 512: + oappend ("ZMMWORD PTR "); break; default: abort (); } - /* Make necessary corrections to shift for modes that need it. - For these modes we currently have shift 4, 5 or 6 depending on - vex.length (it corresponds to xmmword, ymmword or zmmword - operand). We might want to make it 3, 4 or 5 (e.g. for - xmmq_mode). In case of broadcast enabled the corrections - aren't needed, as element size is always 32 or 64 bits. */ - if (!vex.b - && (bytemode == xmmq_mode - || bytemode == evex_half_bcst_xmmq_mode)) - shift -= 1; - else if (bytemode == xmmqd_mode) - shift -= 2; - else if (bytemode == xmmdw_mode) - shift -= 3; - else if (bytemode == ymmq_mode && vex.length == 128) - shift -= 1; - } - else - shift = 0; - - USED_REX (REX_B); - if (intel_syntax) - intel_operand_size (bytemode, sizeflag); - append_seg (); + break; + case ymmxmm_mode: + if (!need_vex) + abort (); - if ((sizeflag & AFLAG) || address_mode == mode_64bit) - { - /* 32/64 bit address mode */ - int havedisp; - int havesib; - int havebase; - int haveindex; - int needindex; - int needaddr32; - int base, rbase; - int vindex = 0; - int scale = 0; - int addr32flag = !((sizeflag & AFLAG) - || bytemode == v_bnd_mode - || bytemode == v_bndmk_mode - || bytemode == bnd_mode - || bytemode == bnd_swap_mode); - const char **indexes64 = names64; - const char **indexes32 = names32; + switch (vex.length) + { + case 128: + case 256: + oappend ("XMMWORD PTR "); + break; + default: + abort (); + } + break; + case o_mode: + oappend ("OWORD PTR "); + break; + case vex_scalar_w_dq_mode: + if (!need_vex) + abort (); - havesib = 0; - havebase = 1; - haveindex = 0; - base = modrm.rm; + if (vex.w) + oappend ("QWORD PTR "); + else + oappend ("DWORD PTR "); + break; + case vex_vsib_d_w_dq_mode: + case vex_vsib_q_w_dq_mode: + if (!need_vex) + abort (); - if (base == 4) + if (!vex.evex) { - havesib = 1; - vindex = sib.index; - USED_REX (REX_X); - if (rex & REX_X) - vindex += 8; - switch (bytemode) - { - case vex_vsib_d_w_dq_mode: - case vex_vsib_d_w_d_mode: - case vex_vsib_q_w_dq_mode: - case vex_vsib_q_w_d_mode: - if (!need_vex) - abort (); - if (vex.evex) - { - if (!vex.v) - vindex += 16; - } - - haveindex = 1; - switch (vex.length) - { - case 128: - indexes64 = indexes32 = names_xmm; - break; - case 256: - if (!vex.w - || bytemode == vex_vsib_q_w_dq_mode - || bytemode == vex_vsib_q_w_d_mode) - indexes64 = indexes32 = names_ymm; - else - indexes64 = indexes32 = names_xmm; - break; - case 512: - if (!vex.w - || bytemode == vex_vsib_q_w_dq_mode - || bytemode == vex_vsib_q_w_d_mode) - indexes64 = indexes32 = names_zmm; - else - indexes64 = indexes32 = names_ymm; - break; - default: - abort (); - } - break; - default: - haveindex = vindex != 4; - break; - } - scale = sib.scale; - base = sib.base; - codep++; + if (vex.w) + oappend ("QWORD PTR "); + else + oappend ("DWORD PTR "); } - rbase = base + add; - - switch (modrm.mod) + else { - case 0: - if (base == 5) + switch (vex.length) { - havebase = 0; - if (address_mode == mode_64bit && !havesib) - riprel = 1; - disp = get32s (); - if (riprel && bytemode == v_bndmk_mode) - { - oappend ("(bad)"); - return; - } + case 128: + oappend ("XMMWORD PTR "); + break; + case 256: + oappend ("YMMWORD PTR "); + break; + case 512: + oappend ("ZMMWORD PTR "); + break; + default: + abort (); } + } + break; + case vex_vsib_q_w_d_mode: + case vex_vsib_d_w_d_mode: + if (!need_vex || !vex.evex) + abort (); + + switch (vex.length) + { + case 128: + oappend ("QWORD PTR "); break; - case 1: - FETCH_DATA (the_info, codep + 1); - disp = *codep++; - if ((disp & 0x80) != 0) - disp -= 0x100; - if (vex.evex && shift > 0) - disp <<= shift; + case 256: + oappend ("XMMWORD PTR "); break; - case 2: - disp = get32s (); + case 512: + oappend ("YMMWORD PTR "); break; + default: + abort (); } - needindex = 0; - needaddr32 = 0; - if (havesib - && !havebase - && !haveindex - && address_mode != mode_16bit) - { - if (address_mode == mode_64bit) - { - /* Display eiz instead of addr32. */ - needindex = addr32flag; - needaddr32 = 1; - } - else - { - /* In 32-bit mode, we need index register to tell [offset] - from [eiz*1 + offset]. */ - needindex = 1; - } - } + break; + case mask_bd_mode: + if (!need_vex || vex.length != 128) + abort (); + if (vex.w) + oappend ("DWORD PTR "); + else + oappend ("BYTE PTR "); + break; + case mask_mode: + if (!need_vex) + abort (); + if (vex.w) + oappend ("QWORD PTR "); + else + oappend ("WORD PTR "); + break; + case v_bnd_mode: + case v_bndmk_mode: + default: + break; + } +} - havedisp = (havebase - || needindex - || (havesib && (haveindex || scale != 0))); +static void +OP_E_register (int bytemode, int sizeflag) +{ + int reg = modrm.rm; + const char **names; - if (!intel_syntax) - if (modrm.mod != 0 || base == 5) - { - if (havedisp || riprel) - print_displacement (scratchbuf, disp); - else - print_operand_value (scratchbuf, 1, disp); - oappend (scratchbuf); - if (riprel) - { - set_op (disp, 1); - oappend (!addr32flag ? "(%rip)" : "(%eip)"); - } - } + USED_REX (REX_B); + if ((rex & REX_B)) + reg += 8; - if ((havebase || haveindex || needindex || needaddr32 || riprel) - && (bytemode != v_bnd_mode) - && (bytemode != v_bndmk_mode) - && (bytemode != bnd_mode) - && (bytemode != bnd_swap_mode)) - used_prefixes |= PREFIX_ADDR; + if ((sizeflag & SUFFIX_ALWAYS) + && (bytemode == b_swap_mode + || bytemode == bnd_swap_mode + || bytemode == v_swap_mode)) + swap_operand (); - if (havedisp || (intel_syntax && riprel)) + switch (bytemode) + { + case b_mode: + case b_swap_mode: + if (reg & 4) + USED_REX (0); + if (rex) + names = names8rex; + else + names = names8; + break; + case w_mode: + names = names16; + break; + case d_mode: + case dw_mode: + case db_mode: + names = names32; + break; + case q_mode: + names = names64; + break; + case m_mode: + case v_bnd_mode: + names = address_mode == mode_64bit ? names64 : names32; + break; + case bnd_mode: + case bnd_swap_mode: + if (reg > 0x3) { - *obufp++ = open_char; - if (intel_syntax && riprel) - { - set_op (disp, 1); - oappend (!addr32flag ? "rip" : "eip"); - } - *obufp = '\0'; - if (havebase) - oappend (address_mode == mode_64bit && !addr32flag - ? names64[rbase] : names32[rbase]); - if (havesib) - { - /* ESP/RSP won't allow index. If base isn't ESP/RSP, - print index to tell base + index from base. */ - if (scale != 0 - || needindex - || haveindex - || (havebase && base != ESP_REG_NUM)) - { - if (!intel_syntax || havebase) - { - *obufp++ = separator_char; - *obufp = '\0'; - } - if (haveindex) - oappend (address_mode == mode_64bit && !addr32flag - ? indexes64[vindex] : indexes32[vindex]); - else - oappend (address_mode == mode_64bit && !addr32flag - ? index64 : index32); - - *obufp++ = scale_char; - *obufp = '\0'; - sprintf (scratchbuf, "%d", 1 << scale); - oappend (scratchbuf); - } - } - if (intel_syntax - && (disp || modrm.mod != 0 || base == 5)) - { - if (!havedisp || (bfd_signed_vma) disp >= 0) - { - *obufp++ = '+'; - *obufp = '\0'; - } - else if (modrm.mod != 1 && disp != -disp) - { - *obufp++ = '-'; - *obufp = '\0'; - disp = - (bfd_signed_vma) disp; - } + oappend ("(bad)"); + return; + } + names = names_bnd; + break; + case indir_v_mode: + if (address_mode == mode_64bit && isa64 == intel64) + { + names = names64; + break; + } + /* Fall through. */ + case stack_v_mode: + if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W))) + { + names = names64; + break; + } + bytemode = v_mode; + /* Fall through. */ + case v_mode: + case v_swap_mode: + case dq_mode: + case dqb_mode: + case dqd_mode: + case dqw_mode: + USED_REX (REX_W); + if (rex & REX_W) + names = names64; + else if (bytemode != v_mode && bytemode != v_swap_mode) + names = names32; + else + { + if (sizeflag & DFLAG) + names = names32; + else + names = names16; + used_prefixes |= (prefixes & PREFIX_DATA); + } + break; + case movsxd_mode: + if (!(sizeflag & DFLAG) && isa64 == intel64) + names = names16; + else + names = names32; + used_prefixes |= (prefixes & PREFIX_DATA); + break; + case va_mode: + names = (address_mode == mode_64bit + ? names64 : names32); + if (!(prefixes & PREFIX_ADDR)) + names = (address_mode == mode_16bit + ? names16 : names); + else + { + /* Remove "addr16/addr32". */ + all_prefixes[last_addr_prefix] = 0; + names = (address_mode != mode_32bit + ? names32 : names16); + used_prefixes |= PREFIX_ADDR; + } + break; + case mask_bd_mode: + case mask_mode: + if (reg > 0x7) + { + oappend ("(bad)"); + return; + } + names = names_mask; + break; + case 0: + return; + default: + oappend (INTERNAL_DISASSEMBLER_ERROR); + return; + } + oappend (names[reg]); +} - if (havedisp) - print_displacement (scratchbuf, disp); - else - print_operand_value (scratchbuf, 1, disp); - oappend (scratchbuf); - } +static void +OP_E_memory (int bytemode, int sizeflag) +{ + bfd_vma disp = 0; + int add = (rex & REX_B) ? 8 : 0; + int riprel = 0; + int shift; - *obufp++ = close_char; - *obufp = '\0'; - } - else if (intel_syntax) + if (vex.evex) + { + /* In EVEX, if operand doesn't allow broadcast, vex.b should be 0. */ + if (vex.b + && bytemode != x_mode + && bytemode != xmmq_mode + && bytemode != evex_half_bcst_xmmq_mode) { - if (modrm.mod != 0 || base == 5) - { - if (!active_seg_prefix) - { - oappend (names_seg[ds_reg - es_reg]); - oappend (":"); - } - print_operand_value (scratchbuf, 1, disp); - oappend (scratchbuf); - } + BadOp (); + return; } - } - else - { - /* 16 bit address mode */ - used_prefixes |= prefixes & PREFIX_ADDR; - switch (modrm.mod) + switch (bytemode) { - case 0: - if (modrm.rm == 6) - { - disp = get16 (); - if ((disp & 0x8000) != 0) - disp -= 0x10000; - } - break; - case 1: - FETCH_DATA (the_info, codep + 1); - disp = *codep++; - if ((disp & 0x80) != 0) - disp -= 0x100; - if (vex.evex && shift > 0) - disp <<= shift; + case dqw_mode: + case dw_mode: + case xmm_mw_mode: + shift = 1; break; - case 2: - disp = get16 (); - if ((disp & 0x8000) != 0) - disp -= 0x10000; + case dqb_mode: + case db_mode: + case xmm_mb_mode: + shift = 0; break; - } - - if (!intel_syntax) - if (modrm.mod != 0 || modrm.rm == 6) - { - print_displacement (scratchbuf, disp); - oappend (scratchbuf); - } - - if (modrm.mod != 0 || modrm.rm != 6) - { - *obufp++ = open_char; - *obufp = '\0'; - oappend (index16[modrm.rm]); - if (intel_syntax - && (disp || modrm.mod != 0 || modrm.rm == 6)) + case dq_mode: + if (address_mode != mode_64bit) { - if ((bfd_signed_vma) disp >= 0) - { - *obufp++ = '+'; - *obufp = '\0'; - } - else if (modrm.mod != 1) - { - *obufp++ = '-'; - *obufp = '\0'; - disp = - (bfd_signed_vma) disp; - } - - print_displacement (scratchbuf, disp); - oappend (scratchbuf); + case dqd_mode: + case xmm_md_mode: + case d_mode: + case d_swap_mode: + shift = 2; + break; } - - *obufp++ = close_char; - *obufp = '\0'; - } - else if (intel_syntax) - { - if (!active_seg_prefix) + /* fall through */ + case vex_scalar_w_dq_mode: + case vex_vsib_d_w_dq_mode: + case vex_vsib_d_w_d_mode: + case vex_vsib_q_w_dq_mode: + case vex_vsib_q_w_d_mode: + case evex_x_gscat_mode: + shift = vex.w ? 3 : 2; + break; + case x_mode: + case evex_half_bcst_xmmq_mode: + case xmmq_mode: + if (vex.b) { - oappend (names_seg[ds_reg - es_reg]); - oappend (":"); + shift = vex.w ? 3 : 2; + break; } - print_operand_value (scratchbuf, 1, disp & 0xffff); - oappend (scratchbuf); - } - } - if (vex.evex && vex.b - && (bytemode == x_mode - || bytemode == xmmq_mode - || bytemode == evex_half_bcst_xmmq_mode)) - { - if (vex.w - || bytemode == xmmq_mode - || bytemode == evex_half_bcst_xmmq_mode) - { + /* Fall through. */ + case xmmqd_mode: + case xmmdw_mode: + case ymmq_mode: + case evex_x_nobcst_mode: + case x_swap_mode: switch (vex.length) { case 128: - oappend ("{1to2}"); + shift = 4; break; case 256: - oappend ("{1to4}"); + shift = 5; break; case 512: - oappend ("{1to8}"); + shift = 6; break; default: abort (); } + /* Make necessary corrections to shift for modes that need it. */ + if (bytemode == xmmq_mode + || bytemode == evex_half_bcst_xmmq_mode + || (bytemode == ymmq_mode && vex.length == 128)) + shift -= 1; + else if (bytemode == xmmqd_mode) + shift -= 2; + else if (bytemode == xmmdw_mode) + shift -= 3; + break; + case ymm_mode: + shift = 5; + break; + case xmm_mode: + shift = 4; + break; + case xmm_mq_mode: + case q_mode: + case q_swap_mode: + shift = 3; + break; + case bw_unit_mode: + shift = vex.w ? 1 : 0; + break; + default: + abort (); } - else + } + else + shift = 0; + + USED_REX (REX_B); + if (intel_syntax) + intel_operand_size (bytemode, sizeflag); + append_seg (); + + if ((sizeflag & AFLAG) || address_mode == mode_64bit) + { + /* 32/64 bit address mode */ + int havedisp; + int havesib; + int havebase; + int haveindex; + int needindex; + int needaddr32; + int base, rbase; + int vindex = 0; + int scale = 0; + int addr32flag = !((sizeflag & AFLAG) + || bytemode == v_bnd_mode + || bytemode == v_bndmk_mode + || bytemode == bnd_mode + || bytemode == bnd_swap_mode); + const char **indexes64 = names64; + const char **indexes32 = names32; + + havesib = 0; + havebase = 1; + haveindex = 0; + base = modrm.rm; + + if (base == 4) { - switch (vex.length) + havesib = 1; + vindex = sib.index; + USED_REX (REX_X); + if (rex & REX_X) + vindex += 8; + switch (bytemode) { - case 128: - oappend ("{1to4}"); - break; - case 256: - oappend ("{1to8}"); - break; - case 512: - oappend ("{1to16}"); + case vex_vsib_d_w_dq_mode: + case vex_vsib_d_w_d_mode: + case vex_vsib_q_w_dq_mode: + case vex_vsib_q_w_d_mode: + if (!need_vex) + abort (); + if (vex.evex) + { + if (!vex.v) + vindex += 16; + } + + haveindex = 1; + switch (vex.length) + { + case 128: + indexes64 = indexes32 = names_xmm; + break; + case 256: + if (!vex.w + || bytemode == vex_vsib_q_w_dq_mode + || bytemode == vex_vsib_q_w_d_mode) + indexes64 = indexes32 = names_ymm; + else + indexes64 = indexes32 = names_xmm; + break; + case 512: + if (!vex.w + || bytemode == vex_vsib_q_w_dq_mode + || bytemode == vex_vsib_q_w_d_mode) + indexes64 = indexes32 = names_zmm; + else + indexes64 = indexes32 = names_ymm; + break; + default: + abort (); + } break; default: - abort (); + haveindex = vindex != 4; + break; } + scale = sib.scale; + base = sib.base; + codep++; } - } -} - -static void -OP_E (int bytemode, int sizeflag) -{ - /* Skip mod/rm byte. */ - MODRM_CHECK; - codep++; - - if (modrm.mod == 3) - OP_E_register (bytemode, sizeflag); - else - OP_E_memory (bytemode, sizeflag); -} - -static void -OP_G (int bytemode, int sizeflag) -{ - int add = 0; - const char **names; - USED_REX (REX_R); - if (rex & REX_R) - add += 8; - switch (bytemode) - { - case b_mode: - USED_REX (0); - if (rex) - oappend (names8rex[modrm.reg + add]); - else - oappend (names8[modrm.reg + add]); - break; - case w_mode: - oappend (names16[modrm.reg + add]); - break; - case d_mode: - case db_mode: - case dw_mode: - oappend (names32[modrm.reg + add]); - break; - case q_mode: - oappend (names64[modrm.reg + add]); - break; - case bnd_mode: - if (modrm.reg > 0x3) - { - oappend ("(bad)"); - return; - } - oappend (names_bnd[modrm.reg]); - break; - case v_mode: - case dq_mode: - case dqb_mode: - case dqd_mode: - case dqw_mode: - USED_REX (REX_W); - if (rex & REX_W) - oappend (names64[modrm.reg + add]); else { - if ((sizeflag & DFLAG) || bytemode != v_mode) - oappend (names32[modrm.reg + add]); - else - oappend (names16[modrm.reg + add]); - used_prefixes |= (prefixes & PREFIX_DATA); - } - break; - case va_mode: - names = (address_mode == mode_64bit - ? names64 : names32); - if (!(prefixes & PREFIX_ADDR)) - { - if (address_mode == mode_16bit) - names = names16; + /* mandatory non-vector SIB must have sib */ + if (bytemode == vex_sibmem_mode) + { + oappend ("(bad)"); + return; + } } - else + rbase = base + add; + + switch (modrm.mod) { - /* Remove "addr16/addr32". */ - all_prefixes[last_addr_prefix] = 0; - names = (address_mode != mode_32bit - ? names32 : names16); - used_prefixes |= PREFIX_ADDR; + case 0: + if (base == 5) + { + havebase = 0; + if (address_mode == mode_64bit && !havesib) + riprel = 1; + disp = get32s (); + if (riprel && bytemode == v_bndmk_mode) + { + oappend ("(bad)"); + return; + } + } + break; + case 1: + FETCH_DATA (the_info, codep + 1); + disp = *codep++; + if ((disp & 0x80) != 0) + disp -= 0x100; + if (vex.evex && shift > 0) + disp <<= shift; + break; + case 2: + disp = get32s (); + break; } - oappend (names[modrm.reg + add]); - break; - case m_mode: - if (address_mode == mode_64bit) - oappend (names64[modrm.reg + add]); - else - oappend (names32[modrm.reg + add]); - break; - case mask_bd_mode: - case mask_mode: - if ((modrm.reg + add) > 0x7) + + needindex = 0; + needaddr32 = 0; + if (havesib + && !havebase + && !haveindex + && address_mode != mode_16bit) { - oappend ("(bad)"); - return; + if (address_mode == mode_64bit) + { + if (addr32flag) + { + /* Without base nor index registers, zero-extend the + lower 32-bit displacement to 64 bits. */ + disp = (unsigned int) disp; + needindex = 1; + } + needaddr32 = 1; + } + else + { + /* In 32-bit mode, we need index register to tell [offset] + from [eiz*1 + offset]. */ + needindex = 1; + } } - oappend (names_mask[modrm.reg + add]); - break; - default: - oappend (INTERNAL_DISASSEMBLER_ERROR); - break; - } -} - -static bfd_vma -get64 (void) -{ - bfd_vma x; -#ifdef BFD64 - unsigned int a; - unsigned int b; - - FETCH_DATA (the_info, codep + 8); - a = *codep++ & 0xff; - a |= (*codep++ & 0xff) << 8; - a |= (*codep++ & 0xff) << 16; - a |= (*codep++ & 0xffu) << 24; - b = *codep++ & 0xff; - b |= (*codep++ & 0xff) << 8; - b |= (*codep++ & 0xff) << 16; - b |= (*codep++ & 0xffu) << 24; - x = a + ((bfd_vma) b << 32); -#else - abort (); - x = 0; -#endif - return x; -} - -static bfd_signed_vma -get32 (void) -{ - bfd_signed_vma x = 0; - - FETCH_DATA (the_info, codep + 4); - x = *codep++ & (bfd_signed_vma) 0xff; - x |= (*codep++ & (bfd_signed_vma) 0xff) << 8; - x |= (*codep++ & (bfd_signed_vma) 0xff) << 16; - x |= (*codep++ & (bfd_signed_vma) 0xff) << 24; - return x; -} - -static bfd_signed_vma -get32s (void) -{ - bfd_signed_vma x = 0; - - FETCH_DATA (the_info, codep + 4); - x = *codep++ & (bfd_signed_vma) 0xff; - x |= (*codep++ & (bfd_signed_vma) 0xff) << 8; - x |= (*codep++ & (bfd_signed_vma) 0xff) << 16; - x |= (*codep++ & (bfd_signed_vma) 0xff) << 24; - x = (x ^ ((bfd_signed_vma) 1 << 31)) - ((bfd_signed_vma) 1 << 31); + havedisp = (havebase + || needindex + || (havesib && (haveindex || scale != 0))); - return x; -} + if (!intel_syntax) + if (modrm.mod != 0 || base == 5) + { + if (havedisp || riprel) + print_displacement (scratchbuf, disp); + else + print_operand_value (scratchbuf, 1, disp); + oappend (scratchbuf); + if (riprel) + { + set_op (disp, 1); + oappend (!addr32flag ? "(%rip)" : "(%eip)"); + } + } -static int -get16 (void) -{ - int x = 0; + if ((havebase || haveindex || needindex || needaddr32 || riprel) + && (address_mode != mode_64bit + || ((bytemode != v_bnd_mode) + && (bytemode != v_bndmk_mode) + && (bytemode != bnd_mode) + && (bytemode != bnd_swap_mode)))) + used_prefixes |= PREFIX_ADDR; - FETCH_DATA (the_info, codep + 2); - x = *codep++ & 0xff; - x |= (*codep++ & 0xff) << 8; - return x; -} + if (havedisp || (intel_syntax && riprel)) + { + *obufp++ = open_char; + if (intel_syntax && riprel) + { + set_op (disp, 1); + oappend (!addr32flag ? "rip" : "eip"); + } + *obufp = '\0'; + if (havebase) + oappend (address_mode == mode_64bit && !addr32flag + ? names64[rbase] : names32[rbase]); + if (havesib) + { + /* ESP/RSP won't allow index. If base isn't ESP/RSP, + print index to tell base + index from base. */ + if (scale != 0 + || needindex + || haveindex + || (havebase && base != ESP_REG_NUM)) + { + if (!intel_syntax || havebase) + { + *obufp++ = separator_char; + *obufp = '\0'; + } + if (haveindex) + oappend (address_mode == mode_64bit && !addr32flag + ? indexes64[vindex] : indexes32[vindex]); + else + oappend (address_mode == mode_64bit && !addr32flag + ? index64 : index32); -static void -set_op (bfd_vma op, int riprel) -{ - op_index[op_ad] = op_ad; - if (address_mode == mode_64bit) - { - op_address[op_ad] = op; - op_riprel[op_ad] = riprel; - } - else - { - /* Mask to get a 32-bit address. */ - op_address[op_ad] = op & 0xffffffff; - op_riprel[op_ad] = riprel & 0xffffffff; - } -} + *obufp++ = scale_char; + *obufp = '\0'; + sprintf (scratchbuf, "%d", 1 << scale); + oappend (scratchbuf); + } + } + if (intel_syntax + && (disp || modrm.mod != 0 || base == 5)) + { + if (!havedisp || (bfd_signed_vma) disp >= 0) + { + *obufp++ = '+'; + *obufp = '\0'; + } + else if (modrm.mod != 1 && disp != -disp) + { + *obufp++ = '-'; + *obufp = '\0'; + disp = -disp; + } -static void -OP_REG (int code, int sizeflag) -{ - const char *s; - int add; + if (havedisp) + print_displacement (scratchbuf, disp); + else + print_operand_value (scratchbuf, 1, disp); + oappend (scratchbuf); + } - switch (code) + *obufp++ = close_char; + *obufp = '\0'; + } + else if (intel_syntax) + { + if (modrm.mod != 0 || base == 5) + { + if (!active_seg_prefix) + { + oappend (names_seg[ds_reg - es_reg]); + oappend (":"); + } + print_operand_value (scratchbuf, 1, disp); + oappend (scratchbuf); + } + } + } + else if (bytemode == v_bnd_mode + || bytemode == v_bndmk_mode + || bytemode == bnd_mode + || bytemode == bnd_swap_mode) { - case es_reg: case ss_reg: case cs_reg: - case ds_reg: case fs_reg: case gs_reg: - oappend (names_seg[code - es_reg]); + oappend ("(bad)"); return; } - - USED_REX (REX_B); - if (rex & REX_B) - add = 8; else - add = 0; - - switch (code) { - case ax_reg: case cx_reg: case dx_reg: case bx_reg: - case sp_reg: case bp_reg: case si_reg: case di_reg: - s = names16[code - ax_reg + add]; - break; - case al_reg: case ah_reg: case cl_reg: case ch_reg: - case dl_reg: case dh_reg: case bl_reg: case bh_reg: - USED_REX (0); - if (rex) - s = names8rex[code - al_reg + add]; - else - s = names8[code - al_reg]; - break; - case rAX_reg: case rCX_reg: case rDX_reg: case rBX_reg: - case rSP_reg: case rBP_reg: case rSI_reg: case rDI_reg: - if (address_mode == mode_64bit - && ((sizeflag & DFLAG) || (rex & REX_W))) + /* 16 bit address mode */ + used_prefixes |= prefixes & PREFIX_ADDR; + switch (modrm.mod) { - s = names64[code - rAX_reg + add]; + case 0: + if (modrm.rm == 6) + { + disp = get16 (); + if ((disp & 0x8000) != 0) + disp -= 0x10000; + } + break; + case 1: + FETCH_DATA (the_info, codep + 1); + disp = *codep++; + if ((disp & 0x80) != 0) + disp -= 0x100; + if (vex.evex && shift > 0) + disp <<= shift; + break; + case 2: + disp = get16 (); + if ((disp & 0x8000) != 0) + disp -= 0x10000; break; } - code += eAX_reg - rAX_reg; - /* Fall through. */ - case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg: - case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg: - USED_REX (REX_W); - if (rex & REX_W) - s = names64[code - eAX_reg + add]; - else + + if (!intel_syntax) + if (modrm.mod != 0 || modrm.rm == 6) + { + print_displacement (scratchbuf, disp); + oappend (scratchbuf); + } + + if (modrm.mod != 0 || modrm.rm != 6) { - if (sizeflag & DFLAG) - s = names32[code - eAX_reg + add]; - else - s = names16[code - eAX_reg + add]; - used_prefixes |= (prefixes & PREFIX_DATA); - } - break; - default: - s = INTERNAL_DISASSEMBLER_ERROR; - break; - } - oappend (s); -} + *obufp++ = open_char; + *obufp = '\0'; + oappend (index16[modrm.rm]); + if (intel_syntax + && (disp || modrm.mod != 0 || modrm.rm == 6)) + { + if ((bfd_signed_vma) disp >= 0) + { + *obufp++ = '+'; + *obufp = '\0'; + } + else if (modrm.mod != 1) + { + *obufp++ = '-'; + *obufp = '\0'; + disp = -disp; + } -static void -OP_IMREG (int code, int sizeflag) -{ - const char *s; + print_displacement (scratchbuf, disp); + oappend (scratchbuf); + } - switch (code) - { - case indir_dx_reg: - if (intel_syntax) - s = "dx"; - else - s = "(%dx)"; - break; - case ax_reg: case cx_reg: case dx_reg: case bx_reg: - case sp_reg: case bp_reg: case si_reg: case di_reg: - s = names16[code - ax_reg]; - break; - case es_reg: case ss_reg: case cs_reg: - case ds_reg: case fs_reg: case gs_reg: - s = names_seg[code - es_reg]; - break; - case al_reg: case ah_reg: case cl_reg: case ch_reg: - case dl_reg: case dh_reg: case bl_reg: case bh_reg: - USED_REX (0); - if (rex) - s = names8rex[code - al_reg]; - else - s = names8[code - al_reg]; - break; - case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg: - case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg: - USED_REX (REX_W); - if (rex & REX_W) - s = names64[code - eAX_reg]; - else + *obufp++ = close_char; + *obufp = '\0'; + } + else if (intel_syntax) { - if (sizeflag & DFLAG) - s = names32[code - eAX_reg]; - else - s = names16[code - eAX_reg]; - used_prefixes |= (prefixes & PREFIX_DATA); + if (!active_seg_prefix) + { + oappend (names_seg[ds_reg - es_reg]); + oappend (":"); + } + print_operand_value (scratchbuf, 1, disp & 0xffff); + oappend (scratchbuf); } - break; - case z_mode_ax_reg: - if ((rex & REX_W) || (sizeflag & DFLAG)) - s = *names32; - else - s = *names16; - if (!(rex & REX_W)) - used_prefixes |= (prefixes & PREFIX_DATA); - break; - default: - s = INTERNAL_DISASSEMBLER_ERROR; - break; } - oappend (s); -} - -static void -OP_I (int bytemode, int sizeflag) -{ - bfd_signed_vma op; - bfd_signed_vma mask = -1; - - switch (bytemode) + if (vex.evex && vex.b + && (bytemode == x_mode + || bytemode == xmmq_mode + || bytemode == evex_half_bcst_xmmq_mode)) { - case b_mode: - FETCH_DATA (the_info, codep + 1); - op = *codep++; - mask = 0xff; - break; - case v_mode: - USED_REX (REX_W); - if (rex & REX_W) - op = get32s (); + if (vex.w + || bytemode == xmmq_mode + || bytemode == evex_half_bcst_xmmq_mode) + { + switch (vex.length) + { + case 128: + oappend ("{1to2}"); + break; + case 256: + oappend ("{1to4}"); + break; + case 512: + oappend ("{1to8}"); + break; + default: + abort (); + } + } else { - if (sizeflag & DFLAG) - { - op = get32 (); - mask = 0xffffffff; - } - else + switch (vex.length) { - op = get16 (); - mask = 0xfffff; + case 128: + oappend ("{1to4}"); + break; + case 256: + oappend ("{1to8}"); + break; + case 512: + oappend ("{1to16}"); + break; + default: + abort (); } - used_prefixes |= (prefixes & PREFIX_DATA); } - break; - case d_mode: - mask = 0xffffffff; - op = get32 (); - break; - case w_mode: - mask = 0xfffff; - op = get16 (); - break; - case const_1_mode: - if (intel_syntax) - oappend ("1"); - return; - default: - oappend (INTERNAL_DISASSEMBLER_ERROR); - return; } - - op &= mask; - scratchbuf[0] = '$'; - print_operand_value (scratchbuf + 1, 1, op); - oappend_maybe_intel (scratchbuf); - scratchbuf[0] = '\0'; } static void -OP_I64 (int bytemode, int sizeflag) +OP_E (int bytemode, int sizeflag) { - if (bytemode != v_mode || address_mode != mode_64bit || !(rex & REX_W)) - { - OP_I (bytemode, sizeflag); - return; - } - - USED_REX (REX_W); + /* Skip mod/rm byte. */ + MODRM_CHECK; + codep++; - scratchbuf[0] = '$'; - print_operand_value (scratchbuf + 1, 1, get64 ()); - oappend_maybe_intel (scratchbuf); - scratchbuf[0] = '\0'; + if (modrm.mod == 3) + OP_E_register (bytemode, sizeflag); + else + OP_E_memory (bytemode, sizeflag); } static void -OP_sI (int bytemode, int sizeflag) +OP_G (int bytemode, int sizeflag) { - bfd_signed_vma op; - + int add = 0; + const char **names; + USED_REX (REX_R); + if (rex & REX_R) + add += 8; switch (bytemode) { case b_mode: - case b_T_mode: - FETCH_DATA (the_info, codep + 1); - op = *codep++; - if ((op & 0x80) != 0) - op -= 0x100; - if (bytemode == b_T_mode) - { - if (address_mode != mode_64bit - || !((sizeflag & DFLAG) || (rex & REX_W))) - { - /* The operand-size prefix is overridden by a REX prefix. */ - if ((sizeflag & DFLAG) || (rex & REX_W)) - op &= 0xffffffff; - else - op &= 0xffff; - } - } + if (modrm.reg & 4) + USED_REX (0); + if (rex) + oappend (names8rex[modrm.reg + add]); else + oappend (names8[modrm.reg + add]); + break; + case w_mode: + oappend (names16[modrm.reg + add]); + break; + case d_mode: + case db_mode: + case dw_mode: + oappend (names32[modrm.reg + add]); + break; + case q_mode: + oappend (names64[modrm.reg + add]); + break; + case bnd_mode: + if (modrm.reg > 0x3) { - if (!(rex & REX_W)) - { - if (sizeflag & DFLAG) - op &= 0xffffffff; - else - op &= 0xffff; - } + oappend ("(bad)"); + return; } + oappend (names_bnd[modrm.reg]); break; case v_mode: - /* The operand-size prefix is overridden by a REX prefix. */ - if ((sizeflag & DFLAG) || (rex & REX_W)) - op = get32s (); + case dq_mode: + case dqb_mode: + case dqd_mode: + case dqw_mode: + case movsxd_mode: + USED_REX (REX_W); + if (rex & REX_W) + oappend (names64[modrm.reg + add]); + else if (bytemode != v_mode && bytemode != movsxd_mode) + oappend (names32[modrm.reg + add]); else - op = get16 (); - break; - default: - oappend (INTERNAL_DISASSEMBLER_ERROR); - return; - } - - scratchbuf[0] = '$'; - print_operand_value (scratchbuf + 1, 1, op); - oappend_maybe_intel (scratchbuf); -} - -static void -OP_J (int bytemode, int sizeflag) -{ - bfd_vma disp; - bfd_vma mask = -1; - bfd_vma segment = 0; - - switch (bytemode) - { - case b_mode: - FETCH_DATA (the_info, codep + 1); - disp = *codep++; - if ((disp & 0x80) != 0) - disp -= 0x100; + { + if (sizeflag & DFLAG) + oappend (names32[modrm.reg + add]); + else + oappend (names16[modrm.reg + add]); + used_prefixes |= (prefixes & PREFIX_DATA); + } break; - case v_mode: - if (isa64 == amd64) - USED_REX (REX_W); - if ((sizeflag & DFLAG) - || (address_mode == mode_64bit - && (isa64 != amd64 || (rex & REX_W)))) - disp = get32s (); + case va_mode: + names = (address_mode == mode_64bit + ? names64 : names32); + if (!(prefixes & PREFIX_ADDR)) + { + if (address_mode == mode_16bit) + names = names16; + } else { - disp = get16 (); - if ((disp & 0x8000) != 0) - disp -= 0x10000; - /* In 16bit mode, address is wrapped around at 64k within - the same segment. Otherwise, a data16 prefix on a jump - instruction means that the pc is masked to 16 bits after - the displacement is added! */ - mask = 0xffff; - if ((prefixes & PREFIX_DATA) == 0) - segment = ((start_pc + (codep - start_codep)) - & ~((bfd_vma) 0xffff)); + /* Remove "addr16/addr32". */ + all_prefixes[last_addr_prefix] = 0; + names = (address_mode != mode_32bit + ? names32 : names16); + used_prefixes |= PREFIX_ADDR; } - if (address_mode != mode_64bit - || (isa64 == amd64 && !(rex & REX_W))) - used_prefixes |= (prefixes & PREFIX_DATA); + oappend (names[modrm.reg + add]); break; - default: - oappend (INTERNAL_DISASSEMBLER_ERROR); - return; - } - disp = ((start_pc + (codep - start_codep) + disp) & mask) | segment; - set_op (disp, 0); - print_operand_value (scratchbuf, 1, disp); - oappend (scratchbuf); -} - -static void -OP_SEG (int bytemode, int sizeflag) -{ - if (bytemode == w_mode) - oappend (names_seg[modrm.reg]); - else - OP_E (modrm.mod == 3 ? bytemode : w_mode, sizeflag); -} - -static void -OP_DIR (int dummy ATTRIBUTE_UNUSED, int sizeflag) -{ - int seg, offset; - - if (sizeflag & DFLAG) - { - offset = get32 (); - seg = get16 (); - } - else - { - offset = get16 (); - seg = get16 (); - } - used_prefixes |= (prefixes & PREFIX_DATA); - if (intel_syntax) - sprintf (scratchbuf, "0x%x:0x%x", seg, offset); - else - sprintf (scratchbuf, "$0x%x,$0x%x", seg, offset); - oappend (scratchbuf); -} - -static void -OP_OFF (int bytemode, int sizeflag) -{ - bfd_vma off; - - if (intel_syntax && (sizeflag & SUFFIX_ALWAYS)) - intel_operand_size (bytemode, sizeflag); - append_seg (); - - if ((sizeflag & AFLAG) || address_mode == mode_64bit) - off = get32 (); - else - off = get16 (); - - if (intel_syntax) - { - if (!active_seg_prefix) + case m_mode: + if (address_mode == mode_64bit) + oappend (names64[modrm.reg + add]); + else + oappend (names32[modrm.reg + add]); + break; + case mask_bd_mode: + case mask_mode: + if ((modrm.reg + add) > 0x7) { - oappend (names_seg[ds_reg - es_reg]); - oappend (":"); + oappend ("(bad)"); + return; } + oappend (names_mask[modrm.reg + add]); + break; + default: + oappend (INTERNAL_DISASSEMBLER_ERROR); + break; } - print_operand_value (scratchbuf, 1, off); - oappend (scratchbuf); } -static void -OP_OFF64 (int bytemode, int sizeflag) +static bfd_vma +get64 (void) { - bfd_vma off; - - if (address_mode != mode_64bit - || (prefixes & PREFIX_ADDR)) - { - OP_OFF (bytemode, sizeflag); - return; - } - - if (intel_syntax && (sizeflag & SUFFIX_ALWAYS)) - intel_operand_size (bytemode, sizeflag); - append_seg (); - - off = get64 (); + bfd_vma x; +#ifdef BFD64 + unsigned int a; + unsigned int b; - if (intel_syntax) - { - if (!active_seg_prefix) - { - oappend (names_seg[ds_reg - es_reg]); - oappend (":"); - } - } - print_operand_value (scratchbuf, 1, off); - oappend (scratchbuf); + FETCH_DATA (the_info, codep + 8); + a = *codep++ & 0xff; + a |= (*codep++ & 0xff) << 8; + a |= (*codep++ & 0xff) << 16; + a |= (*codep++ & 0xffu) << 24; + b = *codep++ & 0xff; + b |= (*codep++ & 0xff) << 8; + b |= (*codep++ & 0xff) << 16; + b |= (*codep++ & 0xffu) << 24; + x = a + ((bfd_vma) b << 32); +#else + abort (); + x = 0; +#endif + return x; } -static void -ptr_reg (int code, int sizeflag) +static bfd_signed_vma +get32 (void) { - const char *s; + bfd_vma x = 0; - *obufp++ = open_char; - used_prefixes |= (prefixes & PREFIX_ADDR); - if (address_mode == mode_64bit) - { - if (!(sizeflag & AFLAG)) - s = names32[code - eAX_reg]; - else - s = names64[code - eAX_reg]; - } - else if (sizeflag & AFLAG) - s = names32[code - eAX_reg]; - else - s = names16[code - eAX_reg]; - oappend (s); - *obufp++ = close_char; - *obufp = 0; + FETCH_DATA (the_info, codep + 4); + x = *codep++ & (bfd_vma) 0xff; + x |= (*codep++ & (bfd_vma) 0xff) << 8; + x |= (*codep++ & (bfd_vma) 0xff) << 16; + x |= (*codep++ & (bfd_vma) 0xff) << 24; + return x; } -static void -OP_ESreg (int code, int sizeflag) +static bfd_signed_vma +get32s (void) { - if (intel_syntax) - { - switch (codep[-1]) - { - case 0x6d: /* insw/insl */ - intel_operand_size (z_mode, sizeflag); - break; - case 0xa5: /* movsw/movsl/movsq */ - case 0xa7: /* cmpsw/cmpsl/cmpsq */ - case 0xab: /* stosw/stosl */ - case 0xaf: /* scasw/scasl */ - intel_operand_size (v_mode, sizeflag); - break; - default: - intel_operand_size (b_mode, sizeflag); - } - } - oappend_maybe_intel ("%es:"); - ptr_reg (code, sizeflag); -} + bfd_vma x = 0; -static void -OP_DSreg (int code, int sizeflag) -{ - if (intel_syntax) - { - switch (codep[-1]) - { - case 0x6f: /* outsw/outsl */ - intel_operand_size (z_mode, sizeflag); - break; - case 0xa5: /* movsw/movsl/movsq */ - case 0xa7: /* cmpsw/cmpsl/cmpsq */ - case 0xad: /* lodsw/lodsl/lodsq */ - intel_operand_size (v_mode, sizeflag); - break; - default: - intel_operand_size (b_mode, sizeflag); - } - } - /* Set active_seg_prefix to PREFIX_DS if it is unset so that the - default segment register DS is printed. */ - if (!active_seg_prefix) - active_seg_prefix = PREFIX_DS; - append_seg (); - ptr_reg (code, sizeflag); -} + FETCH_DATA (the_info, codep + 4); + x = *codep++ & (bfd_vma) 0xff; + x |= (*codep++ & (bfd_vma) 0xff) << 8; + x |= (*codep++ & (bfd_vma) 0xff) << 16; + x |= (*codep++ & (bfd_vma) 0xff) << 24; -static void -OP_C (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED) -{ - int add; - if (rex & REX_R) - { - USED_REX (REX_R); - add = 8; - } - else if (address_mode != mode_64bit && (prefixes & PREFIX_LOCK)) - { - all_prefixes[last_lock_prefix] = 0; - used_prefixes |= PREFIX_LOCK; - add = 8; - } - else - add = 0; - sprintf (scratchbuf, "%%cr%d", modrm.reg + add); - oappend_maybe_intel (scratchbuf); -} + x = (x ^ ((bfd_vma) 1 << 31)) - ((bfd_vma) 1 << 31); -static void -OP_D (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED) -{ - int add; - USED_REX (REX_R); - if (rex & REX_R) - add = 8; - else - add = 0; - if (intel_syntax) - sprintf (scratchbuf, "db%d", modrm.reg + add); - else - sprintf (scratchbuf, "%%db%d", modrm.reg + add); - oappend (scratchbuf); + return x; } -static void -OP_T (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED) +static int +get16 (void) { - sprintf (scratchbuf, "%%tr%d", modrm.reg); - oappend_maybe_intel (scratchbuf); -} + int x = 0; -static void -OP_R (int bytemode, int sizeflag) -{ - /* Skip mod/rm byte. */ - MODRM_CHECK; - codep++; - OP_E_register (bytemode, sizeflag); + FETCH_DATA (the_info, codep + 2); + x = *codep++ & 0xff; + x |= (*codep++ & 0xff) << 8; + return x; } static void -OP_MMX (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED) +set_op (bfd_vma op, int riprel) { - int reg = modrm.reg; - const char **names; - - used_prefixes |= (prefixes & PREFIX_DATA); - if (prefixes & PREFIX_DATA) + op_index[op_ad] = op_ad; + if (address_mode == mode_64bit) { - names = names_xmm; - USED_REX (REX_R); - if (rex & REX_R) - reg += 8; + op_address[op_ad] = op; + op_riprel[op_ad] = riprel; } else - names = names_mm; - oappend (names[reg]); + { + /* Mask to get a 32-bit address. */ + op_address[op_ad] = op & 0xffffffff; + op_riprel[op_ad] = riprel & 0xffffffff; + } } static void -OP_XMM (int bytemode, int sizeflag ATTRIBUTE_UNUSED) +OP_REG (int code, int sizeflag) { - int reg = modrm.reg; - const char **names; + const char *s; + int add; - USED_REX (REX_R); - if (rex & REX_R) - reg += 8; - if (vex.evex) + switch (code) { - if (!vex.r) - reg += 16; + case es_reg: case ss_reg: case cs_reg: + case ds_reg: case fs_reg: case gs_reg: + oappend (names_seg[code - es_reg]); + return; } - if (need_vex - && bytemode != xmm_mode - && bytemode != xmmq_mode - && bytemode != evex_half_bcst_xmmq_mode - && bytemode != ymm_mode - && bytemode != scalar_mode) + USED_REX (REX_B); + if (rex & REX_B) + add = 8; + else + add = 0; + + switch (code) { - switch (vex.length) + case ax_reg: case cx_reg: case dx_reg: case bx_reg: + case sp_reg: case bp_reg: case si_reg: case di_reg: + s = names16[code - ax_reg + add]; + break; + case ah_reg: case ch_reg: case dh_reg: case bh_reg: + USED_REX (0); + /* Fall through. */ + case al_reg: case cl_reg: case dl_reg: case bl_reg: + if (rex) + s = names8rex[code - al_reg + add]; + else + s = names8[code - al_reg]; + break; + case rAX_reg: case rCX_reg: case rDX_reg: case rBX_reg: + case rSP_reg: case rBP_reg: case rSI_reg: case rDI_reg: + if (address_mode == mode_64bit + && ((sizeflag & DFLAG) || (rex & REX_W))) { - case 128: - names = names_xmm; - break; - case 256: - if (vex.w - || (bytemode != vex_vsib_q_w_dq_mode - && bytemode != vex_vsib_q_w_d_mode)) - names = names_ymm; - else - names = names_xmm; - break; - case 512: - names = names_zmm; + s = names64[code - rAX_reg + add]; break; - default: - abort (); } - } - else if (bytemode == xmmq_mode - || bytemode == evex_half_bcst_xmmq_mode) - { - switch (vex.length) + code += eAX_reg - rAX_reg; + /* Fall through. */ + case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg: + case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg: + USED_REX (REX_W); + if (rex & REX_W) + s = names64[code - eAX_reg + add]; + else { - case 128: - case 256: - names = names_xmm; - break; - case 512: - names = names_ymm; - break; - default: - abort (); + if (sizeflag & DFLAG) + s = names32[code - eAX_reg + add]; + else + s = names16[code - eAX_reg + add]; + used_prefixes |= (prefixes & PREFIX_DATA); } + break; + default: + s = INTERNAL_DISASSEMBLER_ERROR; + break; } - else if (bytemode == ymm_mode) - names = names_ymm; - else - names = names_xmm; - oappend (names[reg]); + oappend (s); } static void -OP_EM (int bytemode, int sizeflag) +OP_IMREG (int code, int sizeflag) { - int reg; - const char **names; + const char *s; - if (modrm.mod != 3) + switch (code) { - if (intel_syntax - && (bytemode == v_mode || bytemode == v_swap_mode)) + case indir_dx_reg: + if (intel_syntax) + s = "dx"; + else + s = "(%dx)"; + break; + case al_reg: case cl_reg: + s = names8[code - al_reg]; + break; + case eAX_reg: + USED_REX (REX_W); + if (rex & REX_W) { - bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode; - used_prefixes |= (prefixes & PREFIX_DATA); + s = *names64; + break; } - OP_E (bytemode, sizeflag); - return; - } - - if ((sizeflag & SUFFIX_ALWAYS) && bytemode == v_swap_mode) - swap_operand (); - - /* Skip mod/rm byte. */ - MODRM_CHECK; - codep++; - used_prefixes |= (prefixes & PREFIX_DATA); - reg = modrm.rm; - if (prefixes & PREFIX_DATA) - { - names = names_xmm; - USED_REX (REX_B); - if (rex & REX_B) - reg += 8; + /* Fall through. */ + case z_mode_ax_reg: + if ((rex & REX_W) || (sizeflag & DFLAG)) + s = *names32; + else + s = *names16; + if (!(rex & REX_W)) + used_prefixes |= (prefixes & PREFIX_DATA); + break; + default: + s = INTERNAL_DISASSEMBLER_ERROR; + break; } - else - names = names_mm; - oappend (names[reg]); + oappend (s); } -/* cvt* are the only instructions in sse2 which have - both SSE and MMX operands and also have 0x66 prefix - in their opcode. 0x66 was originally used to differentiate - between SSE and MMX instruction(operands). So we have to handle the - cvt* separately using OP_EMC and OP_MXC */ static void -OP_EMC (int bytemode, int sizeflag) +OP_I (int bytemode, int sizeflag) { - if (modrm.mod != 3) + bfd_signed_vma op; + bfd_signed_vma mask = -1; + + switch (bytemode) { - if (intel_syntax && bytemode == v_mode) + case b_mode: + FETCH_DATA (the_info, codep + 1); + op = *codep++; + mask = 0xff; + break; + case v_mode: + USED_REX (REX_W); + if (rex & REX_W) + op = get32s (); + else { - bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode; + if (sizeflag & DFLAG) + { + op = get32 (); + mask = 0xffffffff; + } + else + { + op = get16 (); + mask = 0xfffff; + } used_prefixes |= (prefixes & PREFIX_DATA); } - OP_E (bytemode, sizeflag); + break; + case d_mode: + mask = 0xffffffff; + op = get32 (); + break; + case w_mode: + mask = 0xfffff; + op = get16 (); + break; + case const_1_mode: + if (intel_syntax) + oappend ("1"); + return; + default: + oappend (INTERNAL_DISASSEMBLER_ERROR); return; } - /* Skip mod/rm byte. */ - MODRM_CHECK; - codep++; - used_prefixes |= (prefixes & PREFIX_DATA); - oappend (names_mm[modrm.rm]); -} - -static void -OP_MXC (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED) -{ - used_prefixes |= (prefixes & PREFIX_DATA); - oappend (names_mm[modrm.reg]); + op &= mask; + scratchbuf[0] = '$'; + print_operand_value (scratchbuf + 1, 1, op); + oappend_maybe_intel (scratchbuf); + scratchbuf[0] = '\0'; } static void -OP_EX (int bytemode, int sizeflag) +OP_I64 (int bytemode, int sizeflag) { - int reg; - const char **names; - - /* Skip mod/rm byte. */ - MODRM_CHECK; - codep++; - - if (modrm.mod != 3) + if (bytemode != v_mode || address_mode != mode_64bit || !(rex & REX_W)) { - OP_E_memory (bytemode, sizeflag); + OP_I (bytemode, sizeflag); return; } - reg = modrm.rm; - USED_REX (REX_B); - if (rex & REX_B) - reg += 8; - if (vex.evex) - { - USED_REX (REX_X); - if ((rex & REX_X)) - reg += 16; - } + USED_REX (REX_W); - if ((sizeflag & SUFFIX_ALWAYS) - && (bytemode == x_swap_mode - || bytemode == d_swap_mode - || bytemode == d_scalar_swap_mode - || bytemode == q_swap_mode - || bytemode == q_scalar_swap_mode)) - swap_operand (); + scratchbuf[0] = '$'; + print_operand_value (scratchbuf + 1, 1, get64 ()); + oappend_maybe_intel (scratchbuf); + scratchbuf[0] = '\0'; +} - if (need_vex - && bytemode != xmm_mode - && bytemode != xmmdw_mode - && bytemode != xmmqd_mode - && bytemode != xmm_mb_mode - && bytemode != xmm_mw_mode - && bytemode != xmm_md_mode - && bytemode != xmm_mq_mode - && bytemode != xmm_mdq_mode - && bytemode != xmmq_mode - && bytemode != evex_half_bcst_xmmq_mode - && bytemode != ymm_mode - && bytemode != d_scalar_mode - && bytemode != d_scalar_swap_mode - && bytemode != q_scalar_mode - && bytemode != q_scalar_swap_mode - && bytemode != vex_scalar_w_dq_mode) +static void +OP_sI (int bytemode, int sizeflag) +{ + bfd_signed_vma op; + + switch (bytemode) { - switch (vex.length) + case b_mode: + case b_T_mode: + FETCH_DATA (the_info, codep + 1); + op = *codep++; + if ((op & 0x80) != 0) + op -= 0x100; + if (bytemode == b_T_mode) { - case 128: - names = names_xmm; - break; - case 256: - names = names_ymm; - break; - case 512: - names = names_zmm; - break; - default: - abort (); + if (address_mode != mode_64bit + || !((sizeflag & DFLAG) || (rex & REX_W))) + { + /* The operand-size prefix is overridden by a REX prefix. */ + if ((sizeflag & DFLAG) || (rex & REX_W)) + op &= 0xffffffff; + else + op &= 0xffff; + } } - } - else if (bytemode == xmmq_mode - || bytemode == evex_half_bcst_xmmq_mode) - { - switch (vex.length) + else { - case 128: - case 256: - names = names_xmm; - break; - case 512: - names = names_ymm; - break; - default: - abort (); + if (!(rex & REX_W)) + { + if (sizeflag & DFLAG) + op &= 0xffffffff; + else + op &= 0xffff; + } } + break; + case v_mode: + /* The operand-size prefix is overridden by a REX prefix. */ + if ((sizeflag & DFLAG) || (rex & REX_W)) + op = get32s (); + else + op = get16 (); + break; + default: + oappend (INTERNAL_DISASSEMBLER_ERROR); + return; } - else if (bytemode == ymm_mode) - names = names_ymm; - else - names = names_xmm; - oappend (names[reg]); + + scratchbuf[0] = '$'; + print_operand_value (scratchbuf + 1, 1, op); + oappend_maybe_intel (scratchbuf); } static void -OP_MS (int bytemode, int sizeflag) +OP_J (int bytemode, int sizeflag) { - if (modrm.mod == 3) - OP_EM (bytemode, sizeflag); - else - BadOp (); + bfd_vma disp; + bfd_vma mask = -1; + bfd_vma segment = 0; + + switch (bytemode) + { + case b_mode: + FETCH_DATA (the_info, codep + 1); + disp = *codep++; + if ((disp & 0x80) != 0) + disp -= 0x100; + break; + case v_mode: + case dqw_mode: + if ((sizeflag & DFLAG) + || (address_mode == mode_64bit + && ((isa64 == intel64 && bytemode != dqw_mode) + || (rex & REX_W)))) + disp = get32s (); + else + { + disp = get16 (); + if ((disp & 0x8000) != 0) + disp -= 0x10000; + /* In 16bit mode, address is wrapped around at 64k within + the same segment. Otherwise, a data16 prefix on a jump + instruction means that the pc is masked to 16 bits after + the displacement is added! */ + mask = 0xffff; + if ((prefixes & PREFIX_DATA) == 0) + segment = ((start_pc + (codep - start_codep)) + & ~((bfd_vma) 0xffff)); + } + if (address_mode != mode_64bit + || (isa64 != intel64 && !(rex & REX_W))) + used_prefixes |= (prefixes & PREFIX_DATA); + break; + default: + oappend (INTERNAL_DISASSEMBLER_ERROR); + return; + } + disp = ((start_pc + (codep - start_codep) + disp) & mask) | segment; + set_op (disp, 0); + print_operand_value (scratchbuf, 1, disp); + oappend (scratchbuf); } static void -OP_XS (int bytemode, int sizeflag) +OP_SEG (int bytemode, int sizeflag) { - if (modrm.mod == 3) - OP_EX (bytemode, sizeflag); + if (bytemode == w_mode) + oappend (names_seg[modrm.reg]); else - BadOp (); + OP_E (modrm.mod == 3 ? bytemode : w_mode, sizeflag); } static void -OP_M (int bytemode, int sizeflag) +OP_DIR (int dummy ATTRIBUTE_UNUSED, int sizeflag) { - if (modrm.mod == 3) - /* bad bound,lea,lds,les,lfs,lgs,lss,cmpxchg8b,vmptrst modrm */ - BadOp (); + int seg, offset; + + if (sizeflag & DFLAG) + { + offset = get32 (); + seg = get16 (); + } else - OP_E (bytemode, sizeflag); + { + offset = get16 (); + seg = get16 (); + } + used_prefixes |= (prefixes & PREFIX_DATA); + if (intel_syntax) + sprintf (scratchbuf, "0x%x:0x%x", seg, offset); + else + sprintf (scratchbuf, "$0x%x,$0x%x", seg, offset); + oappend (scratchbuf); } static void -OP_0f07 (int bytemode, int sizeflag) +OP_OFF (int bytemode, int sizeflag) { - if (modrm.mod != 3 || modrm.rm != 0) - BadOp (); - else - OP_E (bytemode, sizeflag); -} + bfd_vma off; -/* NOP is an alias of "xchg %ax,%ax" in 16bit mode, "xchg %eax,%eax" in - 32bit mode and "xchg %rax,%rax" in 64bit mode. */ + if (intel_syntax && (sizeflag & SUFFIX_ALWAYS)) + intel_operand_size (bytemode, sizeflag); + append_seg (); -static void -NOP_Fixup1 (int bytemode, int sizeflag) -{ - if ((prefixes & PREFIX_DATA) != 0 - || (rex != 0 - && rex != 0x48 - && address_mode == mode_64bit)) - OP_REG (bytemode, sizeflag); + if ((sizeflag & AFLAG) || address_mode == mode_64bit) + off = get32 (); else - strcpy (obuf, "nop"); + off = get16 (); + + if (intel_syntax) + { + if (!active_seg_prefix) + { + oappend (names_seg[ds_reg - es_reg]); + oappend (":"); + } + } + print_operand_value (scratchbuf, 1, off); + oappend (scratchbuf); } static void -NOP_Fixup2 (int bytemode, int sizeflag) +OP_OFF64 (int bytemode, int sizeflag) { - if ((prefixes & PREFIX_DATA) != 0 - || (rex != 0 - && rex != 0x48 - && address_mode == mode_64bit)) - OP_IMREG (bytemode, sizeflag); -} + bfd_vma off; -static const char *const Suffix3DNow[] = { -/* 00 */ NULL, NULL, NULL, NULL, -/* 04 */ NULL, NULL, NULL, NULL, -/* 08 */ NULL, NULL, NULL, NULL, -/* 0C */ "pi2fw", "pi2fd", NULL, NULL, -/* 10 */ NULL, NULL, NULL, NULL, -/* 14 */ NULL, NULL, NULL, NULL, -/* 18 */ NULL, NULL, NULL, NULL, -/* 1C */ "pf2iw", "pf2id", NULL, NULL, -/* 20 */ NULL, NULL, NULL, NULL, -/* 24 */ NULL, NULL, NULL, NULL, -/* 28 */ NULL, NULL, NULL, NULL, -/* 2C */ NULL, NULL, NULL, NULL, -/* 30 */ NULL, NULL, NULL, NULL, -/* 34 */ NULL, NULL, NULL, NULL, -/* 38 */ NULL, NULL, NULL, NULL, -/* 3C */ NULL, NULL, NULL, NULL, -/* 40 */ NULL, NULL, NULL, NULL, -/* 44 */ NULL, NULL, NULL, NULL, -/* 48 */ NULL, NULL, NULL, NULL, -/* 4C */ NULL, NULL, NULL, NULL, -/* 50 */ NULL, NULL, NULL, NULL, -/* 54 */ NULL, NULL, NULL, NULL, -/* 58 */ NULL, NULL, NULL, NULL, -/* 5C */ NULL, NULL, NULL, NULL, -/* 60 */ NULL, NULL, NULL, NULL, -/* 64 */ NULL, NULL, NULL, NULL, -/* 68 */ NULL, NULL, NULL, NULL, -/* 6C */ NULL, NULL, NULL, NULL, -/* 70 */ NULL, NULL, NULL, NULL, -/* 74 */ NULL, NULL, NULL, NULL, -/* 78 */ NULL, NULL, NULL, NULL, -/* 7C */ NULL, NULL, NULL, NULL, -/* 80 */ NULL, NULL, NULL, NULL, -/* 84 */ NULL, NULL, NULL, NULL, -/* 88 */ NULL, NULL, "pfnacc", NULL, -/* 8C */ NULL, NULL, "pfpnacc", NULL, -/* 90 */ "pfcmpge", NULL, NULL, NULL, -/* 94 */ "pfmin", NULL, "pfrcp", "pfrsqrt", -/* 98 */ NULL, NULL, "pfsub", NULL, -/* 9C */ NULL, NULL, "pfadd", NULL, -/* A0 */ "pfcmpgt", NULL, NULL, NULL, -/* A4 */ "pfmax", NULL, "pfrcpit1", "pfrsqit1", -/* A8 */ NULL, NULL, "pfsubr", NULL, -/* AC */ NULL, NULL, "pfacc", NULL, -/* B0 */ "pfcmpeq", NULL, NULL, NULL, -/* B4 */ "pfmul", NULL, "pfrcpit2", "pmulhrw", -/* B8 */ NULL, NULL, NULL, "pswapd", -/* BC */ NULL, NULL, NULL, "pavgusb", -/* C0 */ NULL, NULL, NULL, NULL, -/* C4 */ NULL, NULL, NULL, NULL, -/* C8 */ NULL, NULL, NULL, NULL, -/* CC */ NULL, NULL, NULL, NULL, -/* D0 */ NULL, NULL, NULL, NULL, -/* D4 */ NULL, NULL, NULL, NULL, -/* D8 */ NULL, NULL, NULL, NULL, -/* DC */ NULL, NULL, NULL, NULL, -/* E0 */ NULL, NULL, NULL, NULL, -/* E4 */ NULL, NULL, NULL, NULL, -/* E8 */ NULL, NULL, NULL, NULL, -/* EC */ NULL, NULL, NULL, NULL, -/* F0 */ NULL, NULL, NULL, NULL, -/* F4 */ NULL, NULL, NULL, NULL, -/* F8 */ NULL, NULL, NULL, NULL, -/* FC */ NULL, NULL, NULL, NULL, -}; + if (address_mode != mode_64bit + || (prefixes & PREFIX_ADDR)) + { + OP_OFF (bytemode, sizeflag); + return; + } + + if (intel_syntax && (sizeflag & SUFFIX_ALWAYS)) + intel_operand_size (bytemode, sizeflag); + append_seg (); + + off = get64 (); + + if (intel_syntax) + { + if (!active_seg_prefix) + { + oappend (names_seg[ds_reg - es_reg]); + oappend (":"); + } + } + print_operand_value (scratchbuf, 1, off); + oappend (scratchbuf); +} static void -OP_3DNowSuffix (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED) +ptr_reg (int code, int sizeflag) { - const char *mnemonic; + const char *s; - FETCH_DATA (the_info, codep + 1); - /* AMD 3DNow! instructions are specified by an opcode suffix in the - place where an 8-bit immediate would normally go. ie. the last - byte of the instruction. */ - obufp = mnemonicendp; - mnemonic = Suffix3DNow[*codep++ & 0xff]; - if (mnemonic) - oappend (mnemonic); - else + *obufp++ = open_char; + used_prefixes |= (prefixes & PREFIX_ADDR); + if (address_mode == mode_64bit) { - /* Since a variable sized modrm/sib chunk is between the start - of the opcode (0x0f0f) and the opcode suffix, we need to do - all the modrm processing first, and don't know until now that - we have a bad opcode. This necessitates some cleaning up. */ - op_out[0][0] = '\0'; - op_out[1][0] = '\0'; - BadOp (); + if (!(sizeflag & AFLAG)) + s = names32[code - eAX_reg]; + else + s = names64[code - eAX_reg]; } - mnemonicendp = obufp; + else if (sizeflag & AFLAG) + s = names32[code - eAX_reg]; + else + s = names16[code - eAX_reg]; + oappend (s); + *obufp++ = close_char; + *obufp = 0; } -static struct op simd_cmp_op[] = -{ - { STRING_COMMA_LEN ("eq") }, - { STRING_COMMA_LEN ("lt") }, - { STRING_COMMA_LEN ("le") }, - { STRING_COMMA_LEN ("unord") }, - { STRING_COMMA_LEN ("neq") }, - { STRING_COMMA_LEN ("nlt") }, - { STRING_COMMA_LEN ("nle") }, - { STRING_COMMA_LEN ("ord") } -}; - static void -CMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED) +OP_ESreg (int code, int sizeflag) { - unsigned int cmp_type; - - FETCH_DATA (the_info, codep + 1); - cmp_type = *codep++ & 0xff; - if (cmp_type < ARRAY_SIZE (simd_cmp_op)) + if (intel_syntax) { - char suffix [3]; - char *p = mnemonicendp - 2; - suffix[0] = p[0]; - suffix[1] = p[1]; - suffix[2] = '\0'; - sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix); - mnemonicendp += simd_cmp_op[cmp_type].len; + switch (codep[-1]) + { + case 0x6d: /* insw/insl */ + intel_operand_size (z_mode, sizeflag); + break; + case 0xa5: /* movsw/movsl/movsq */ + case 0xa7: /* cmpsw/cmpsl/cmpsq */ + case 0xab: /* stosw/stosl */ + case 0xaf: /* scasw/scasl */ + intel_operand_size (v_mode, sizeflag); + break; + default: + intel_operand_size (b_mode, sizeflag); + } } - else + oappend_maybe_intel ("%es:"); + ptr_reg (code, sizeflag); +} + +static void +OP_DSreg (int code, int sizeflag) +{ + if (intel_syntax) { - /* We have a reserved extension byte. Output it directly. */ - scratchbuf[0] = '$'; - print_operand_value (scratchbuf + 1, 1, cmp_type); - oappend_maybe_intel (scratchbuf); - scratchbuf[0] = '\0'; + switch (codep[-1]) + { + case 0x6f: /* outsw/outsl */ + intel_operand_size (z_mode, sizeflag); + break; + case 0xa5: /* movsw/movsl/movsq */ + case 0xa7: /* cmpsw/cmpsl/cmpsq */ + case 0xad: /* lodsw/lodsl/lodsq */ + intel_operand_size (v_mode, sizeflag); + break; + default: + intel_operand_size (b_mode, sizeflag); + } } + /* Set active_seg_prefix to PREFIX_DS if it is unset so that the + default segment register DS is printed. */ + if (!active_seg_prefix) + active_seg_prefix = PREFIX_DS; + append_seg (); + ptr_reg (code, sizeflag); } static void -OP_Mwait (int bytemode, int sizeflag ATTRIBUTE_UNUSED) +OP_C (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED) { - /* mwait %eax,%ecx / mwaitx %eax,%ecx,%ebx */ - if (!intel_syntax) + int add; + if (rex & REX_R) { - strcpy (op_out[0], names32[0]); - strcpy (op_out[1], names32[1]); - if (bytemode == eBX_reg) - strcpy (op_out[2], names32[3]); - two_source_ops = 1; + USED_REX (REX_R); + add = 8; } - /* Skip mod/rm byte. */ - MODRM_CHECK; - codep++; + else if (address_mode != mode_64bit && (prefixes & PREFIX_LOCK)) + { + all_prefixes[last_lock_prefix] = 0; + used_prefixes |= PREFIX_LOCK; + add = 8; + } + else + add = 0; + sprintf (scratchbuf, "%%cr%d", modrm.reg + add); + oappend_maybe_intel (scratchbuf); } static void -OP_Monitor (int bytemode ATTRIBUTE_UNUSED, - int sizeflag ATTRIBUTE_UNUSED) +OP_D (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED) { - /* monitor %{e,r,}ax,%ecx,%edx" */ - if (!intel_syntax) - { - const char **names = (address_mode == mode_64bit - ? names64 : names32); + int add; + USED_REX (REX_R); + if (rex & REX_R) + add = 8; + else + add = 0; + if (intel_syntax) + sprintf (scratchbuf, "dr%d", modrm.reg + add); + else + sprintf (scratchbuf, "%%db%d", modrm.reg + add); + oappend (scratchbuf); +} - if (prefixes & PREFIX_ADDR) - { - /* Remove "addr16/addr32". */ - all_prefixes[last_addr_prefix] = 0; - names = (address_mode != mode_32bit - ? names32 : names16); - used_prefixes |= PREFIX_ADDR; - } - else if (address_mode == mode_16bit) - names = names16; - strcpy (op_out[0], names[0]); - strcpy (op_out[1], names32[1]); - strcpy (op_out[2], names32[2]); - two_source_ops = 1; - } - /* Skip mod/rm byte. */ - MODRM_CHECK; - codep++; +static void +OP_T (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED) +{ + sprintf (scratchbuf, "%%tr%d", modrm.reg); + oappend_maybe_intel (scratchbuf); } static void -BadOp (void) +OP_MMX (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED) { - /* Throw away prefixes and 1st. opcode byte. */ - codep = insn_codep + 1; - oappend ("(bad)"); + int reg = modrm.reg; + const char **names; + + used_prefixes |= (prefixes & PREFIX_DATA); + if (prefixes & PREFIX_DATA) + { + names = names_xmm; + USED_REX (REX_R); + if (rex & REX_R) + reg += 8; + } + else + names = names_mm; + oappend (names[reg]); } static void -REP_Fixup (int bytemode, int sizeflag) +OP_XMM (int bytemode, int sizeflag ATTRIBUTE_UNUSED) { - /* The 0xf3 prefix should be displayed as "rep" for ins, outs, movs, - lods and stos. */ - if (prefixes & PREFIX_REPZ) - all_prefixes[last_repz_prefix] = REP_PREFIX; + int reg = modrm.reg; + const char **names; - switch (bytemode) + USED_REX (REX_R); + if (rex & REX_R) + reg += 8; + if (vex.evex) + { + if (!vex.r) + reg += 16; + } + + if (need_vex + && bytemode != xmm_mode + && bytemode != xmmq_mode + && bytemode != evex_half_bcst_xmmq_mode + && bytemode != ymm_mode + && bytemode != tmm_mode + && bytemode != scalar_mode) + { + switch (vex.length) + { + case 128: + names = names_xmm; + break; + case 256: + if (vex.w + || (bytemode != vex_vsib_q_w_dq_mode + && bytemode != vex_vsib_q_w_d_mode)) + names = names_ymm; + else + names = names_xmm; + break; + case 512: + names = names_zmm; + break; + default: + abort (); + } + } + else if (bytemode == xmmq_mode + || bytemode == evex_half_bcst_xmmq_mode) + { + switch (vex.length) + { + case 128: + case 256: + names = names_xmm; + break; + case 512: + names = names_ymm; + break; + default: + abort (); + } + } + else if (bytemode == tmm_mode) { - case al_reg: - case eAX_reg: - case indir_dx_reg: - OP_IMREG (bytemode, sizeflag); - break; - case eDI_reg: - OP_ESreg (bytemode, sizeflag); - break; - case eSI_reg: - OP_DSreg (bytemode, sizeflag); - break; - default: - abort (); - break; + modrm.reg = reg; + if (reg >= 8) + { + oappend ("(bad)"); + return; + } + names = names_tmm; } + else if (bytemode == ymm_mode) + names = names_ymm; + else + names = names_xmm; + oappend (names[reg]); } -/* For BND-prefixed instructions 0xF2 prefix should be displayed as - "bnd". */ - static void -BND_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED) +OP_EM (int bytemode, int sizeflag) { - if (prefixes & PREFIX_REPNZ) - all_prefixes[last_repnz_prefix] = BND_PREFIX; -} - -/* For NOTRACK-prefixed instructions, 0x3E prefix should be displayed as - "notrack". */ + int reg; + const char **names; -static void -NOTRACK_Fixup (int bytemode ATTRIBUTE_UNUSED, - int sizeflag ATTRIBUTE_UNUSED) -{ - if (active_seg_prefix == PREFIX_DS - && (address_mode != mode_64bit || last_data_prefix < 0)) + if (modrm.mod != 3) { - /* NOTRACK prefix is only valid on indirect branch instructions. - NB: DATA prefix is unsupported for Intel64. */ - active_seg_prefix = 0; - all_prefixes[last_seg_prefix] = NOTRACK_PREFIX; + if (intel_syntax + && (bytemode == v_mode || bytemode == v_swap_mode)) + { + bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode; + used_prefixes |= (prefixes & PREFIX_DATA); + } + OP_E (bytemode, sizeflag); + return; } -} -/* Similar to OP_E. But the 0xf2/0xf3 prefixes should be displayed as - "xacquire"/"xrelease" for memory operand if there is a LOCK prefix. - */ + if ((sizeflag & SUFFIX_ALWAYS) && bytemode == v_swap_mode) + swap_operand (); -static void -HLE_Fixup1 (int bytemode, int sizeflag) -{ - if (modrm.mod != 3 - && (prefixes & PREFIX_LOCK) != 0) + /* Skip mod/rm byte. */ + MODRM_CHECK; + codep++; + used_prefixes |= (prefixes & PREFIX_DATA); + reg = modrm.rm; + if (prefixes & PREFIX_DATA) { - if (prefixes & PREFIX_REPZ) - all_prefixes[last_repz_prefix] = XRELEASE_PREFIX; - if (prefixes & PREFIX_REPNZ) - all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX; + names = names_xmm; + USED_REX (REX_B); + if (rex & REX_B) + reg += 8; } - - OP_E (bytemode, sizeflag); + else + names = names_mm; + oappend (names[reg]); } -/* Similar to OP_E. But the 0xf2/0xf3 prefixes should be displayed as - "xacquire"/"xrelease" for memory operand. No check for LOCK prefix. - */ - +/* cvt* are the only instructions in sse2 which have + both SSE and MMX operands and also have 0x66 prefix + in their opcode. 0x66 was originally used to differentiate + between SSE and MMX instruction(operands). So we have to handle the + cvt* separately using OP_EMC and OP_MXC */ static void -HLE_Fixup2 (int bytemode, int sizeflag) +OP_EMC (int bytemode, int sizeflag) { if (modrm.mod != 3) { - if (prefixes & PREFIX_REPZ) - all_prefixes[last_repz_prefix] = XRELEASE_PREFIX; - if (prefixes & PREFIX_REPNZ) - all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX; + if (intel_syntax && bytemode == v_mode) + { + bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode; + used_prefixes |= (prefixes & PREFIX_DATA); + } + OP_E (bytemode, sizeflag); + return; } - OP_E (bytemode, sizeflag); + /* Skip mod/rm byte. */ + MODRM_CHECK; + codep++; + used_prefixes |= (prefixes & PREFIX_DATA); + oappend (names_mm[modrm.rm]); } -/* Similar to OP_E. But the 0xf3 prefixes should be displayed as - "xrelease" for memory operand. No check for LOCK prefix. */ - static void -HLE_Fixup3 (int bytemode, int sizeflag) +OP_MXC (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED) { - if (modrm.mod != 3 - && last_repz_prefix > last_repnz_prefix - && (prefixes & PREFIX_REPZ) != 0) - all_prefixes[last_repz_prefix] = XRELEASE_PREFIX; - - OP_E (bytemode, sizeflag); + used_prefixes |= (prefixes & PREFIX_DATA); + oappend (names_mm[modrm.reg]); } static void -CMPXCHG8B_Fixup (int bytemode, int sizeflag) +OP_EX (int bytemode, int sizeflag) { - USED_REX (REX_W); - if (rex & REX_W) + int reg; + const char **names; + + /* Skip mod/rm byte. */ + MODRM_CHECK; + codep++; + + if (modrm.mod != 3) { - /* Change cmpxchg8b to cmpxchg16b. */ - char *p = mnemonicendp - 2; - mnemonicendp = stpcpy (p, "16b"); - bytemode = o_mode; + OP_E_memory (bytemode, sizeflag); + return; } - else if ((prefixes & PREFIX_LOCK) != 0) + + reg = modrm.rm; + USED_REX (REX_B); + if (rex & REX_B) + reg += 8; + if (vex.evex) { - if (prefixes & PREFIX_REPZ) - all_prefixes[last_repz_prefix] = XRELEASE_PREFIX; - if (prefixes & PREFIX_REPNZ) - all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX; + USED_REX (REX_X); + if ((rex & REX_X)) + reg += 16; } - OP_M (bytemode, sizeflag); -} - -static void -XMM_Fixup (int reg, int sizeflag ATTRIBUTE_UNUSED) -{ - const char **names; + if ((sizeflag & SUFFIX_ALWAYS) + && (bytemode == x_swap_mode + || bytemode == d_swap_mode + || bytemode == q_swap_mode)) + swap_operand (); - if (need_vex) + if (need_vex + && bytemode != xmm_mode + && bytemode != xmmdw_mode + && bytemode != xmmqd_mode + && bytemode != xmm_mb_mode + && bytemode != xmm_mw_mode + && bytemode != xmm_md_mode + && bytemode != xmm_mq_mode + && bytemode != xmmq_mode + && bytemode != evex_half_bcst_xmmq_mode + && bytemode != ymm_mode + && bytemode != tmm_mode + && bytemode != vex_scalar_w_dq_mode) { switch (vex.length) { @@ -15713,595 +12960,693 @@ case 256: names = names_ymm; break; + case 512: + names = names_zmm; + break; default: abort (); } } - else - names = names_xmm; - oappend (names[reg]); -} - -static void -CRC32_Fixup (int bytemode, int sizeflag) -{ - /* Add proper suffix to "crc32". */ - char *p = mnemonicendp; - - switch (bytemode) + else if (bytemode == xmmq_mode + || bytemode == evex_half_bcst_xmmq_mode) { - case b_mode: - if (intel_syntax) - goto skip; - - *p++ = 'b'; - break; - case v_mode: - if (intel_syntax) - goto skip; - - USED_REX (REX_W); - if (rex & REX_W) - *p++ = 'q'; - else + switch (vex.length) { - if (sizeflag & DFLAG) - *p++ = 'l'; - else - *p++ = 'w'; - used_prefixes |= (prefixes & PREFIX_DATA); + case 128: + case 256: + names = names_xmm; + break; + case 512: + names = names_ymm; + break; + default: + abort (); } - break; - default: - oappend (INTERNAL_DISASSEMBLER_ERROR); - break; } - mnemonicendp = p; - *p = '\0'; - -skip: - if (modrm.mod == 3) + else if (bytemode == tmm_mode) { - int add; - - /* Skip mod/rm byte. */ - MODRM_CHECK; - codep++; - - USED_REX (REX_B); - add = (rex & REX_B) ? 8 : 0; - if (bytemode == b_mode) - { - USED_REX (0); - if (rex) - oappend (names8rex[modrm.rm + add]); - else - oappend (names8[modrm.rm + add]); - } - else + modrm.rm = reg; + if (reg >= 8) { - USED_REX (REX_W); - if (rex & REX_W) - oappend (names64[modrm.rm + add]); - else if ((prefixes & PREFIX_DATA)) - oappend (names16[modrm.rm + add]); - else - oappend (names32[modrm.rm + add]); + oappend ("(bad)"); + return; } + names = names_tmm; } + else if (bytemode == ymm_mode) + names = names_ymm; else - OP_E (bytemode, sizeflag); + names = names_xmm; + oappend (names[reg]); +} + +static void +OP_MS (int bytemode, int sizeflag) +{ + if (modrm.mod == 3) + OP_EM (bytemode, sizeflag); + else + BadOp (); } static void -FXSAVE_Fixup (int bytemode, int sizeflag) +OP_XS (int bytemode, int sizeflag) { - /* Add proper suffix to "fxsave" and "fxrstor". */ - USED_REX (REX_W); - if (rex & REX_W) - { - char *p = mnemonicendp; - *p++ = '6'; - *p++ = '4'; - *p = '\0'; - mnemonicendp = p; - } - OP_M (bytemode, sizeflag); + if (modrm.mod == 3) + OP_EX (bytemode, sizeflag); + else + BadOp (); } static void -PCMPESTR_Fixup (int bytemode, int sizeflag) +OP_M (int bytemode, int sizeflag) { - /* Add proper suffix to "{,v}pcmpestr{i,m}". */ - if (!intel_syntax) - { - char *p = mnemonicendp; - - USED_REX (REX_W); - if (rex & REX_W) - *p++ = 'q'; - else if (sizeflag & SUFFIX_ALWAYS) - *p++ = 'l'; - - *p = '\0'; - mnemonicendp = p; - } + if (modrm.mod == 3) + /* bad bound,lea,lds,les,lfs,lgs,lss,cmpxchg8b,vmptrst modrm */ + BadOp (); + else + OP_E (bytemode, sizeflag); +} - OP_EX (bytemode, sizeflag); +static void +OP_0f07 (int bytemode, int sizeflag) +{ + if (modrm.mod != 3 || modrm.rm != 0) + BadOp (); + else + OP_E (bytemode, sizeflag); } -/* Display the destination register operand for instructions with - VEX. */ +/* NOP is an alias of "xchg %ax,%ax" in 16bit mode, "xchg %eax,%eax" in + 32bit mode and "xchg %rax,%rax" in 64bit mode. */ static void -OP_VEX (int bytemode, int sizeflag ATTRIBUTE_UNUSED) +NOP_Fixup1 (int bytemode, int sizeflag) { - int reg; - const char **names; - - if (!need_vex) - abort (); + if ((prefixes & PREFIX_DATA) != 0 + || (rex != 0 + && rex != 0x48 + && address_mode == mode_64bit)) + OP_REG (bytemode, sizeflag); + else + strcpy (obuf, "nop"); +} - if (!need_vex_reg) - return; +static void +NOP_Fixup2 (int bytemode, int sizeflag) +{ + if ((prefixes & PREFIX_DATA) != 0 + || (rex != 0 + && rex != 0x48 + && address_mode == mode_64bit)) + OP_IMREG (bytemode, sizeflag); +} - reg = vex.register_specifier; - vex.register_specifier = 0; - if (address_mode != mode_64bit) - reg &= 7; - else if (vex.evex && !vex.v) - reg += 16; +static const char *const Suffix3DNow[] = { +/* 00 */ NULL, NULL, NULL, NULL, +/* 04 */ NULL, NULL, NULL, NULL, +/* 08 */ NULL, NULL, NULL, NULL, +/* 0C */ "pi2fw", "pi2fd", NULL, NULL, +/* 10 */ NULL, NULL, NULL, NULL, +/* 14 */ NULL, NULL, NULL, NULL, +/* 18 */ NULL, NULL, NULL, NULL, +/* 1C */ "pf2iw", "pf2id", NULL, NULL, +/* 20 */ NULL, NULL, NULL, NULL, +/* 24 */ NULL, NULL, NULL, NULL, +/* 28 */ NULL, NULL, NULL, NULL, +/* 2C */ NULL, NULL, NULL, NULL, +/* 30 */ NULL, NULL, NULL, NULL, +/* 34 */ NULL, NULL, NULL, NULL, +/* 38 */ NULL, NULL, NULL, NULL, +/* 3C */ NULL, NULL, NULL, NULL, +/* 40 */ NULL, NULL, NULL, NULL, +/* 44 */ NULL, NULL, NULL, NULL, +/* 48 */ NULL, NULL, NULL, NULL, +/* 4C */ NULL, NULL, NULL, NULL, +/* 50 */ NULL, NULL, NULL, NULL, +/* 54 */ NULL, NULL, NULL, NULL, +/* 58 */ NULL, NULL, NULL, NULL, +/* 5C */ NULL, NULL, NULL, NULL, +/* 60 */ NULL, NULL, NULL, NULL, +/* 64 */ NULL, NULL, NULL, NULL, +/* 68 */ NULL, NULL, NULL, NULL, +/* 6C */ NULL, NULL, NULL, NULL, +/* 70 */ NULL, NULL, NULL, NULL, +/* 74 */ NULL, NULL, NULL, NULL, +/* 78 */ NULL, NULL, NULL, NULL, +/* 7C */ NULL, NULL, NULL, NULL, +/* 80 */ NULL, NULL, NULL, NULL, +/* 84 */ NULL, NULL, NULL, NULL, +/* 88 */ NULL, NULL, "pfnacc", NULL, +/* 8C */ NULL, NULL, "pfpnacc", NULL, +/* 90 */ "pfcmpge", NULL, NULL, NULL, +/* 94 */ "pfmin", NULL, "pfrcp", "pfrsqrt", +/* 98 */ NULL, NULL, "pfsub", NULL, +/* 9C */ NULL, NULL, "pfadd", NULL, +/* A0 */ "pfcmpgt", NULL, NULL, NULL, +/* A4 */ "pfmax", NULL, "pfrcpit1", "pfrsqit1", +/* A8 */ NULL, NULL, "pfsubr", NULL, +/* AC */ NULL, NULL, "pfacc", NULL, +/* B0 */ "pfcmpeq", NULL, NULL, NULL, +/* B4 */ "pfmul", NULL, "pfrcpit2", "pmulhrw", +/* B8 */ NULL, NULL, NULL, "pswapd", +/* BC */ NULL, NULL, NULL, "pavgusb", +/* C0 */ NULL, NULL, NULL, NULL, +/* C4 */ NULL, NULL, NULL, NULL, +/* C8 */ NULL, NULL, NULL, NULL, +/* CC */ NULL, NULL, NULL, NULL, +/* D0 */ NULL, NULL, NULL, NULL, +/* D4 */ NULL, NULL, NULL, NULL, +/* D8 */ NULL, NULL, NULL, NULL, +/* DC */ NULL, NULL, NULL, NULL, +/* E0 */ NULL, NULL, NULL, NULL, +/* E4 */ NULL, NULL, NULL, NULL, +/* E8 */ NULL, NULL, NULL, NULL, +/* EC */ NULL, NULL, NULL, NULL, +/* F0 */ NULL, NULL, NULL, NULL, +/* F4 */ NULL, NULL, NULL, NULL, +/* F8 */ NULL, NULL, NULL, NULL, +/* FC */ NULL, NULL, NULL, NULL, +}; - if (bytemode == vex_scalar_mode) - { - oappend (names_xmm[reg]); - return; - } +static void +OP_3DNowSuffix (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED) +{ + const char *mnemonic; - switch (vex.length) + FETCH_DATA (the_info, codep + 1); + /* AMD 3DNow! instructions are specified by an opcode suffix in the + place where an 8-bit immediate would normally go. ie. the last + byte of the instruction. */ + obufp = mnemonicendp; + mnemonic = Suffix3DNow[*codep++ & 0xff]; + if (mnemonic) + oappend (mnemonic); + else { - case 128: - switch (bytemode) - { - case vex_mode: - case vex128_mode: - case vex_vsib_q_w_dq_mode: - case vex_vsib_q_w_d_mode: - names = names_xmm; - break; - case dq_mode: - if (rex & REX_W) - names = names64; - else - names = names32; - break; - case mask_bd_mode: - case mask_mode: - if (reg > 0x7) - { - oappend ("(bad)"); - return; - } - names = names_mask; - break; - default: - abort (); - return; - } - break; - case 256: - switch (bytemode) - { - case vex_mode: - case vex256_mode: - names = names_ymm; - break; - case vex_vsib_q_w_dq_mode: - case vex_vsib_q_w_d_mode: - names = vex.w ? names_ymm : names_xmm; - break; - case mask_bd_mode: - case mask_mode: - if (reg > 0x7) - { - oappend ("(bad)"); - return; - } - names = names_mask; - break; - default: - /* See PR binutils/20893 for a reproducer. */ - oappend ("(bad)"); - return; - } - break; - case 512: - names = names_zmm; - break; - default: - abort (); - break; + /* Since a variable sized modrm/sib chunk is between the start + of the opcode (0x0f0f) and the opcode suffix, we need to do + all the modrm processing first, and don't know until now that + we have a bad opcode. This necessitates some cleaning up. */ + op_out[0][0] = '\0'; + op_out[1][0] = '\0'; + BadOp (); } - oappend (names[reg]); + mnemonicendp = obufp; } -/* Get the VEX immediate byte without moving codep. */ +static const struct op simd_cmp_op[] = +{ + { STRING_COMMA_LEN ("eq") }, + { STRING_COMMA_LEN ("lt") }, + { STRING_COMMA_LEN ("le") }, + { STRING_COMMA_LEN ("unord") }, + { STRING_COMMA_LEN ("neq") }, + { STRING_COMMA_LEN ("nlt") }, + { STRING_COMMA_LEN ("nle") }, + { STRING_COMMA_LEN ("ord") } +}; + +static const struct op vex_cmp_op[] = +{ + { STRING_COMMA_LEN ("eq_uq") }, + { STRING_COMMA_LEN ("nge") }, + { STRING_COMMA_LEN ("ngt") }, + { STRING_COMMA_LEN ("false") }, + { STRING_COMMA_LEN ("neq_oq") }, + { STRING_COMMA_LEN ("ge") }, + { STRING_COMMA_LEN ("gt") }, + { STRING_COMMA_LEN ("true") }, + { STRING_COMMA_LEN ("eq_os") }, + { STRING_COMMA_LEN ("lt_oq") }, + { STRING_COMMA_LEN ("le_oq") }, + { STRING_COMMA_LEN ("unord_s") }, + { STRING_COMMA_LEN ("neq_us") }, + { STRING_COMMA_LEN ("nlt_uq") }, + { STRING_COMMA_LEN ("nle_uq") }, + { STRING_COMMA_LEN ("ord_s") }, + { STRING_COMMA_LEN ("eq_us") }, + { STRING_COMMA_LEN ("nge_uq") }, + { STRING_COMMA_LEN ("ngt_uq") }, + { STRING_COMMA_LEN ("false_os") }, + { STRING_COMMA_LEN ("neq_os") }, + { STRING_COMMA_LEN ("ge_oq") }, + { STRING_COMMA_LEN ("gt_oq") }, + { STRING_COMMA_LEN ("true_us") }, +}; -static unsigned char -get_vex_imm8 (int sizeflag, int opnum) +static void +CMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED) { - int bytes_before_imm = 0; + unsigned int cmp_type; - if (modrm.mod != 3) + FETCH_DATA (the_info, codep + 1); + cmp_type = *codep++ & 0xff; + if (cmp_type < ARRAY_SIZE (simd_cmp_op)) { - /* There are SIB/displacement bytes. */ - if ((sizeflag & AFLAG) || address_mode == mode_64bit) - { - /* 32/64 bit address mode */ - int base = modrm.rm; - - /* Check SIB byte. */ - if (base == 4) - { - FETCH_DATA (the_info, codep + 1); - base = *codep & 7; - /* When decoding the third source, don't increase - bytes_before_imm as this has already been incremented - by one in OP_E_memory while decoding the second - source operand. */ - if (opnum == 0) - bytes_before_imm++; - } - - /* Don't increase bytes_before_imm when decoding the third source, - it has already been incremented by OP_E_memory while decoding - the second source operand. */ - if (opnum == 0) - { - switch (modrm.mod) - { - case 0: - /* When modrm.rm == 5 or modrm.rm == 4 and base in - SIB == 5, there is a 4 byte displacement. */ - if (base != 5) - /* No displacement. */ - break; - /* Fall through. */ - case 2: - /* 4 byte displacement. */ - bytes_before_imm += 4; - break; - case 1: - /* 1 byte displacement. */ - bytes_before_imm++; - break; - } - } - } - else - { - /* 16 bit address mode */ - /* Don't increase bytes_before_imm when decoding the third source, - it has already been incremented by OP_E_memory while decoding - the second source operand. */ - if (opnum == 0) - { - switch (modrm.mod) - { - case 0: - /* When modrm.rm == 6, there is a 2 byte displacement. */ - if (modrm.rm != 6) - /* No displacement. */ - break; - /* Fall through. */ - case 2: - /* 2 byte displacement. */ - bytes_before_imm += 2; - break; - case 1: - /* 1 byte displacement: when decoding the third source, - don't increase bytes_before_imm as this has already - been incremented by one in OP_E_memory while decoding - the second source operand. */ - if (opnum == 0) - bytes_before_imm++; - - break; - } - } - } + char suffix [3]; + char *p = mnemonicendp - 2; + suffix[0] = p[0]; + suffix[1] = p[1]; + suffix[2] = '\0'; + sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix); + mnemonicendp += simd_cmp_op[cmp_type].len; + } + else if (need_vex + && cmp_type < ARRAY_SIZE (simd_cmp_op) + ARRAY_SIZE (vex_cmp_op)) + { + char suffix [3]; + char *p = mnemonicendp - 2; + suffix[0] = p[0]; + suffix[1] = p[1]; + suffix[2] = '\0'; + cmp_type -= ARRAY_SIZE (simd_cmp_op); + sprintf (p, "%s%s", vex_cmp_op[cmp_type].name, suffix); + mnemonicendp += vex_cmp_op[cmp_type].len; + } + else + { + /* We have a reserved extension byte. Output it directly. */ + scratchbuf[0] = '$'; + print_operand_value (scratchbuf + 1, 1, cmp_type); + oappend_maybe_intel (scratchbuf); + scratchbuf[0] = '\0'; } - - FETCH_DATA (the_info, codep + bytes_before_imm + 1); - return codep [bytes_before_imm]; } static void -OP_EX_VexReg (int bytemode, int sizeflag, int reg) +OP_Mwait (int bytemode, int sizeflag ATTRIBUTE_UNUSED) { - const char **names; - - if (reg == -1 && modrm.mod != 3) + /* mwait %eax,%ecx / mwaitx %eax,%ecx,%ebx */ + if (!intel_syntax) { - OP_E_memory (bytemode, sizeflag); - return; + strcpy (op_out[0], names32[0]); + strcpy (op_out[1], names32[1]); + if (bytemode == eBX_reg) + strcpy (op_out[2], names32[3]); + two_source_ops = 1; } - else + /* Skip mod/rm byte. */ + MODRM_CHECK; + codep++; +} + +static void +OP_Monitor (int bytemode ATTRIBUTE_UNUSED, + int sizeflag ATTRIBUTE_UNUSED) +{ + /* monitor %{e,r,}ax,%ecx,%edx" */ + if (!intel_syntax) { - if (reg == -1) + const char **names = (address_mode == mode_64bit + ? names64 : names32); + + if (prefixes & PREFIX_ADDR) { - reg = modrm.rm; - USED_REX (REX_B); - if (rex & REX_B) - reg += 8; + /* Remove "addr16/addr32". */ + all_prefixes[last_addr_prefix] = 0; + names = (address_mode != mode_32bit + ? names32 : names16); + used_prefixes |= PREFIX_ADDR; } - if (address_mode != mode_64bit) - reg &= 7; + else if (address_mode == mode_16bit) + names = names16; + strcpy (op_out[0], names[0]); + strcpy (op_out[1], names32[1]); + strcpy (op_out[2], names32[2]); + two_source_ops = 1; } + /* Skip mod/rm byte. */ + MODRM_CHECK; + codep++; +} - switch (vex.length) +static void +BadOp (void) +{ + /* Throw away prefixes and 1st. opcode byte. */ + codep = insn_codep + 1; + oappend ("(bad)"); +} + +static void +REP_Fixup (int bytemode, int sizeflag) +{ + /* The 0xf3 prefix should be displayed as "rep" for ins, outs, movs, + lods and stos. */ + if (prefixes & PREFIX_REPZ) + all_prefixes[last_repz_prefix] = REP_PREFIX; + + switch (bytemode) { - case 128: - names = names_xmm; + case al_reg: + case eAX_reg: + case indir_dx_reg: + OP_IMREG (bytemode, sizeflag); break; - case 256: - names = names_ymm; + case eDI_reg: + OP_ESreg (bytemode, sizeflag); + break; + case eSI_reg: + OP_DSreg (bytemode, sizeflag); break; default: abort (); + break; } - oappend (names[reg]); } static void -OP_EX_VexImmW (int bytemode, int sizeflag) +SEP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED) { - int reg = -1; - static unsigned char vex_imm8; - - if (vex_w_done == 0) - { - vex_w_done = 1; - - /* Skip mod/rm byte. */ - MODRM_CHECK; - codep++; + if ( isa64 != amd64 ) + return; - vex_imm8 = get_vex_imm8 (sizeflag, 0); + obufp = obuf; + BadOp (); + mnemonicendp = obufp; + ++codep; +} - if (vex.w) - reg = vex_imm8 >> 4; +/* For BND-prefixed instructions 0xF2 prefix should be displayed as + "bnd". */ - OP_EX_VexReg (bytemode, sizeflag, reg); - } - else if (vex_w_done == 1) - { - vex_w_done = 2; +static void +BND_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED) +{ + if (prefixes & PREFIX_REPNZ) + all_prefixes[last_repnz_prefix] = BND_PREFIX; +} - if (!vex.w) - reg = vex_imm8 >> 4; +/* For NOTRACK-prefixed instructions, 0x3E prefix should be displayed as + "notrack". */ - OP_EX_VexReg (bytemode, sizeflag, reg); - } - else +static void +NOTRACK_Fixup (int bytemode ATTRIBUTE_UNUSED, + int sizeflag ATTRIBUTE_UNUSED) +{ + if (active_seg_prefix == PREFIX_DS + && (address_mode != mode_64bit || last_data_prefix < 0)) { - /* Output the imm8 directly. */ - scratchbuf[0] = '$'; - print_operand_value (scratchbuf + 1, 1, vex_imm8 & 0xf); - oappend_maybe_intel (scratchbuf); - scratchbuf[0] = '\0'; - codep++; + /* NOTRACK prefix is only valid on indirect branch instructions. + NB: DATA prefix is unsupported for Intel64. */ + active_seg_prefix = 0; + all_prefixes[last_seg_prefix] = NOTRACK_PREFIX; } } +/* Similar to OP_E. But the 0xf2/0xf3 prefixes should be displayed as + "xacquire"/"xrelease" for memory operand if there is a LOCK prefix. + */ + static void -OP_Vex_2src (int bytemode, int sizeflag) +HLE_Fixup1 (int bytemode, int sizeflag) { - if (modrm.mod == 3) - { - int reg = modrm.rm; - USED_REX (REX_B); - if (rex & REX_B) - reg += 8; - oappend (names_xmm[reg]); - } - else + if (modrm.mod != 3 + && (prefixes & PREFIX_LOCK) != 0) { - if (intel_syntax - && (bytemode == v_mode || bytemode == v_swap_mode)) - { - bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode; - used_prefixes |= (prefixes & PREFIX_DATA); - } - OP_E (bytemode, sizeflag); + if (prefixes & PREFIX_REPZ) + all_prefixes[last_repz_prefix] = XRELEASE_PREFIX; + if (prefixes & PREFIX_REPNZ) + all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX; } + + OP_E (bytemode, sizeflag); } +/* Similar to OP_E. But the 0xf2/0xf3 prefixes should be displayed as + "xacquire"/"xrelease" for memory operand. No check for LOCK prefix. + */ + static void -OP_Vex_2src_1 (int bytemode, int sizeflag) +HLE_Fixup2 (int bytemode, int sizeflag) { - if (modrm.mod == 3) + if (modrm.mod != 3) { - /* Skip mod/rm byte. */ - MODRM_CHECK; - codep++; + if (prefixes & PREFIX_REPZ) + all_prefixes[last_repz_prefix] = XRELEASE_PREFIX; + if (prefixes & PREFIX_REPNZ) + all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX; } - if (vex.w) - { - unsigned int reg = vex.register_specifier; - vex.register_specifier = 0; + OP_E (bytemode, sizeflag); +} - if (address_mode != mode_64bit) - reg &= 7; - oappend (names_xmm[reg]); - } - else - OP_Vex_2src (bytemode, sizeflag); +/* Similar to OP_E. But the 0xf3 prefixes should be displayed as + "xrelease" for memory operand. No check for LOCK prefix. */ + +static void +HLE_Fixup3 (int bytemode, int sizeflag) +{ + if (modrm.mod != 3 + && last_repz_prefix > last_repnz_prefix + && (prefixes & PREFIX_REPZ) != 0) + all_prefixes[last_repz_prefix] = XRELEASE_PREFIX; + + OP_E (bytemode, sizeflag); } static void -OP_Vex_2src_2 (int bytemode, int sizeflag) +CMPXCHG8B_Fixup (int bytemode, int sizeflag) { - if (vex.w) - OP_Vex_2src (bytemode, sizeflag); - else + USED_REX (REX_W); + if (rex & REX_W) { - unsigned int reg = vex.register_specifier; - vex.register_specifier = 0; - - if (address_mode != mode_64bit) - reg &= 7; - oappend (names_xmm[reg]); + /* Change cmpxchg8b to cmpxchg16b. */ + char *p = mnemonicendp - 2; + mnemonicendp = stpcpy (p, "16b"); + bytemode = o_mode; } + else if ((prefixes & PREFIX_LOCK) != 0) + { + if (prefixes & PREFIX_REPZ) + all_prefixes[last_repz_prefix] = XRELEASE_PREFIX; + if (prefixes & PREFIX_REPNZ) + all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX; + } + + OP_M (bytemode, sizeflag); } static void -OP_EX_VexW (int bytemode, int sizeflag) +XMM_Fixup (int reg, int sizeflag ATTRIBUTE_UNUSED) { - int reg = -1; + const char **names; - if (!vex_w_done) + if (need_vex) { - /* Skip mod/rm byte. */ - MODRM_CHECK; - codep++; - - if (vex.w) - reg = get_vex_imm8 (sizeflag, 0) >> 4; + switch (vex.length) + { + case 128: + names = names_xmm; + break; + case 256: + names = names_ymm; + break; + default: + abort (); + } } else + names = names_xmm; + oappend (names[reg]); +} + +static void +FXSAVE_Fixup (int bytemode, int sizeflag) +{ + /* Add proper suffix to "fxsave" and "fxrstor". */ + USED_REX (REX_W); + if (rex & REX_W) { - if (!vex.w) - reg = get_vex_imm8 (sizeflag, 1) >> 4; + char *p = mnemonicendp; + *p++ = '6'; + *p++ = '4'; + *p = '\0'; + mnemonicendp = p; } - - OP_EX_VexReg (bytemode, sizeflag, reg); - - if (vex_w_done) - codep++; - vex_w_done = 1; + OP_M (bytemode, sizeflag); } +/* Display the destination register operand for instructions with + VEX. */ + static void -OP_REG_VexI4 (int bytemode, int sizeflag ATTRIBUTE_UNUSED) +OP_VEX (int bytemode, int sizeflag ATTRIBUTE_UNUSED) { int reg; const char **names; - FETCH_DATA (the_info, codep + 1); - reg = *codep++; - - if (bytemode != x_mode) + if (!need_vex) abort (); - reg >>= 4; + reg = vex.register_specifier; + vex.register_specifier = 0; if (address_mode != mode_64bit) reg &= 7; + else if (vex.evex && !vex.v) + reg += 16; + + if (bytemode == vex_scalar_mode) + { + oappend (names_xmm[reg]); + return; + } + + if (bytemode == tmm_mode) + { + /* All 3 TMM registers must be distinct. */ + if (reg >= 8) + oappend ("(bad)"); + else + { + /* This must be the 3rd operand. */ + if (obufp != op_out[2]) + abort (); + oappend (names_tmm[reg]); + if (reg == modrm.reg || reg == modrm.rm) + strcpy (obufp, "/(bad)"); + } + + if (modrm.reg == modrm.rm || modrm.reg == reg || modrm.rm == reg) + { + if (modrm.reg <= 8 + && (modrm.reg == modrm.rm || modrm.reg == reg)) + strcat (op_out[0], "/(bad)"); + if (modrm.rm <= 8 + && (modrm.rm == modrm.reg || modrm.rm == reg)) + strcat (op_out[1], "/(bad)"); + } + + return; + } switch (vex.length) { case 128: - names = names_xmm; + switch (bytemode) + { + case vex_mode: + case vex_vsib_q_w_dq_mode: + case vex_vsib_q_w_d_mode: + names = names_xmm; + break; + case dq_mode: + if (rex & REX_W) + names = names64; + else + names = names32; + break; + case mask_bd_mode: + case mask_mode: + if (reg > 0x7) + { + oappend ("(bad)"); + return; + } + names = names_mask; + break; + default: + abort (); + return; + } break; case 256: - names = names_ymm; + switch (bytemode) + { + case vex_mode: + names = names_ymm; + break; + case vex_vsib_q_w_dq_mode: + case vex_vsib_q_w_d_mode: + names = vex.w ? names_ymm : names_xmm; + break; + case mask_bd_mode: + case mask_mode: + if (reg > 0x7) + { + oappend ("(bad)"); + return; + } + names = names_mask; + break; + default: + /* See PR binutils/20893 for a reproducer. */ + oappend ("(bad)"); + return; + } + break; + case 512: + names = names_zmm; break; default: abort (); + break; } oappend (names[reg]); } static void -OP_XMM_VexW (int bytemode, int sizeflag) +OP_VexR (int bytemode, int sizeflag) { - /* Turn off the REX.W bit since it is used for swapping operands - now. */ - rex &= ~REX_W; - OP_XMM (bytemode, sizeflag); + if (modrm.mod == 3) + OP_VEX (bytemode, sizeflag); } static void -OP_EX_Vex (int bytemode, int sizeflag) +OP_VexW (int bytemode, int sizeflag) { - if (modrm.mod != 3) - need_vex_reg = 0; - OP_EX (bytemode, sizeflag); -} + OP_VEX (bytemode, sizeflag); -static void -OP_XMM_Vex (int bytemode, int sizeflag) -{ - if (modrm.mod != 3) - need_vex_reg = 0; - OP_XMM (bytemode, sizeflag); + if (vex.w) + { + /* Swap 2nd and 3rd operands. */ + strcpy (scratchbuf, op_out[2]); + strcpy (op_out[2], op_out[1]); + strcpy (op_out[1], scratchbuf); + } } -static struct op vex_cmp_op[] = -{ - { STRING_COMMA_LEN ("eq") }, - { STRING_COMMA_LEN ("lt") }, - { STRING_COMMA_LEN ("le") }, - { STRING_COMMA_LEN ("unord") }, - { STRING_COMMA_LEN ("neq") }, - { STRING_COMMA_LEN ("nlt") }, - { STRING_COMMA_LEN ("nle") }, - { STRING_COMMA_LEN ("ord") }, - { STRING_COMMA_LEN ("eq_uq") }, - { STRING_COMMA_LEN ("nge") }, - { STRING_COMMA_LEN ("ngt") }, - { STRING_COMMA_LEN ("false") }, - { STRING_COMMA_LEN ("neq_oq") }, - { STRING_COMMA_LEN ("ge") }, - { STRING_COMMA_LEN ("gt") }, - { STRING_COMMA_LEN ("true") }, - { STRING_COMMA_LEN ("eq_os") }, - { STRING_COMMA_LEN ("lt_oq") }, - { STRING_COMMA_LEN ("le_oq") }, - { STRING_COMMA_LEN ("unord_s") }, - { STRING_COMMA_LEN ("neq_us") }, - { STRING_COMMA_LEN ("nlt_uq") }, - { STRING_COMMA_LEN ("nle_uq") }, - { STRING_COMMA_LEN ("ord_s") }, - { STRING_COMMA_LEN ("eq_us") }, - { STRING_COMMA_LEN ("nge_uq") }, - { STRING_COMMA_LEN ("ngt_uq") }, - { STRING_COMMA_LEN ("false_os") }, - { STRING_COMMA_LEN ("neq_os") }, - { STRING_COMMA_LEN ("ge_oq") }, - { STRING_COMMA_LEN ("gt_oq") }, - { STRING_COMMA_LEN ("true_us") }, -}; - static void -VCMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED) +OP_REG_VexI4 (int bytemode, int sizeflag ATTRIBUTE_UNUSED) { - unsigned int cmp_type; + int reg; + const char **names = names_xmm; FETCH_DATA (the_info, codep + 1); - cmp_type = *codep++ & 0xff; - if (cmp_type < ARRAY_SIZE (vex_cmp_op)) - { - char suffix [3]; - char *p = mnemonicendp - 2; - suffix[0] = p[0]; - suffix[1] = p[1]; - suffix[2] = '\0'; - sprintf (p, "%s%s", vex_cmp_op[cmp_type].name, suffix); - mnemonicendp += vex_cmp_op[cmp_type].len; - } - else + reg = *codep++; + + if (bytemode != x_mode && bytemode != scalar_mode) + abort (); + + reg >>= 4; + if (address_mode != mode_64bit) + reg &= 7; + + if (bytemode == x_mode && vex.length == 256) + names = names_ymm; + + oappend (names[reg]); + + if (vex.w) { - /* We have a reserved extension byte. Output it directly. */ - scratchbuf[0] = '$'; - print_operand_value (scratchbuf + 1, 1, cmp_type); - oappend_maybe_intel (scratchbuf); - scratchbuf[0] = '\0'; + /* Swap 3rd and 4th operands. */ + strcpy (scratchbuf, op_out[3]); + strcpy (op_out[3], op_out[2]); + strcpy (op_out[2], scratchbuf); } } static void +OP_VexI4 (int bytemode ATTRIBUTE_UNUSED, + int sizeflag ATTRIBUTE_UNUSED) +{ + scratchbuf[0] = '$'; + print_operand_value (scratchbuf + 1, 1, codep[-1] & 0xf); + oappend_maybe_intel (scratchbuf); +} + +static void VPCMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED) { @@ -16449,81 +13794,42 @@ } static void -MOVBE_Fixup (int bytemode, int sizeflag) +MOVSXD_Fixup (int bytemode, int sizeflag) { - /* Add proper suffix to "movbe". */ + /* Add proper suffix to "movsxd". */ char *p = mnemonicendp; switch (bytemode) { - case v_mode: + case movsxd_mode: if (intel_syntax) - goto skip; + { + *p++ = 'x'; + *p++ = 'd'; + goto skip; + } USED_REX (REX_W); - if (sizeflag & SUFFIX_ALWAYS) + if (rex & REX_W) { - if (rex & REX_W) - *p++ = 'q'; - else - { - if (sizeflag & DFLAG) - *p++ = 'l'; - else - *p++ = 'w'; - used_prefixes |= (prefixes & PREFIX_DATA); - } + *p++ = 'l'; + *p++ = 'q'; + } + else + { + *p++ = 'x'; + *p++ = 'd'; } break; default: oappend (INTERNAL_DISASSEMBLER_ERROR); break; } + + skip: mnemonicendp = p; *p = '\0'; - -skip: - OP_M (bytemode, sizeflag); -} - -static void -OP_LWPCB_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED) -{ - int reg; - const char **names; - - /* Skip mod/rm byte. */ - MODRM_CHECK; - codep++; - - if (rex & REX_W) - names = names64; - else - names = names32; - - reg = modrm.rm; - USED_REX (REX_B); - if (rex & REX_B) - reg += 8; - - oappend (names[reg]); -} - -static void -OP_LWP_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED) -{ - const char **names; - unsigned int reg = vex.register_specifier; - vex.register_specifier = 0; - - if (rex & REX_W) - names = names64; - else - names = names32; - - if (address_mode != mode_64bit) - reg &= 7; - oappend (names[reg]); + OP_E (bytemode, sizeflag); } static void @@ -16546,11 +13852,6 @@ static void OP_Rounding (int bytemode, int sizeflag ATTRIBUTE_UNUSED) { - if (!vex.evex - || (bytemode != evex_rounding_mode - && bytemode != evex_rounding_64_mode - && bytemode != evex_sae_mode)) - abort (); if (modrm.mod == 3 && vex.b) switch (bytemode) { @@ -16568,6 +13869,7 @@ oappend ("{sae}"); break; default: + abort (); break; } } diff -Nru gdb-9.1/opcodes/i386-dis-evex.h gdb-10.2/opcodes/i386-dis-evex.h --- gdb-9.1/opcodes/i386-dis-evex.h 2019-09-20 21:58:17.000000000 +0000 +++ gdb-10.2/opcodes/i386-dis-evex.h 2021-04-25 04:06:26.000000000 +0000 @@ -23,11 +23,11 @@ { PREFIX_TABLE (PREFIX_EVEX_0F10) }, { PREFIX_TABLE (PREFIX_EVEX_0F11) }, { PREFIX_TABLE (PREFIX_EVEX_0F12) }, - { PREFIX_TABLE (PREFIX_EVEX_0F13) }, - { PREFIX_TABLE (PREFIX_EVEX_0F14) }, - { PREFIX_TABLE (PREFIX_EVEX_0F15) }, + { MOD_TABLE (MOD_EVEX_0F13) }, + { "vunpcklpX", { XM, Vex, EXx }, PREFIX_OPCODE }, + { "vunpckhpX", { XM, Vex, EXx }, PREFIX_OPCODE }, { PREFIX_TABLE (PREFIX_EVEX_0F16) }, - { PREFIX_TABLE (PREFIX_EVEX_0F17) }, + { MOD_TABLE (MOD_EVEX_0F17) }, /* 18 */ { Bad_Opcode }, { Bad_Opcode }, @@ -47,14 +47,14 @@ { Bad_Opcode }, { Bad_Opcode }, /* 28 */ - { PREFIX_TABLE (PREFIX_EVEX_0F28) }, - { PREFIX_TABLE (PREFIX_EVEX_0F29) }, + { "vmovapX", { XM, EXx }, PREFIX_OPCODE }, + { "vmovapX", { EXxS, XM }, PREFIX_OPCODE }, { PREFIX_TABLE (PREFIX_EVEX_0F2A) }, - { PREFIX_TABLE (PREFIX_EVEX_0F2B) }, - { PREFIX_TABLE (PREFIX_EVEX_0F2C) }, - { PREFIX_TABLE (PREFIX_EVEX_0F2D) }, - { PREFIX_TABLE (PREFIX_EVEX_0F2E) }, - { PREFIX_TABLE (PREFIX_EVEX_0F2F) }, + { MOD_TABLE (MOD_EVEX_0F2B) }, + { PREFIX_TABLE (PREFIX_VEX_0F2C) }, + { PREFIX_TABLE (PREFIX_VEX_0F2D) }, + { PREFIX_TABLE (PREFIX_VEX_0F2E) }, + { PREFIX_TABLE (PREFIX_VEX_0F2F) }, /* 30 */ { Bad_Opcode }, { Bad_Opcode }, @@ -96,10 +96,10 @@ { PREFIX_TABLE (PREFIX_EVEX_0F51) }, { Bad_Opcode }, { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_EVEX_0F54) }, - { PREFIX_TABLE (PREFIX_EVEX_0F55) }, - { PREFIX_TABLE (PREFIX_EVEX_0F56) }, - { PREFIX_TABLE (PREFIX_EVEX_0F57) }, + { "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_EVEX_0F58) }, { PREFIX_TABLE (PREFIX_EVEX_0F59) }, @@ -110,31 +110,31 @@ { PREFIX_TABLE (PREFIX_EVEX_0F5E) }, { PREFIX_TABLE (PREFIX_EVEX_0F5F) }, /* 60 */ - { PREFIX_TABLE (PREFIX_EVEX_0F60) }, - { PREFIX_TABLE (PREFIX_EVEX_0F61) }, - { PREFIX_TABLE (PREFIX_EVEX_0F62) }, - { PREFIX_TABLE (PREFIX_EVEX_0F63) }, - { PREFIX_TABLE (PREFIX_EVEX_0F64) }, - { PREFIX_TABLE (PREFIX_EVEX_0F65) }, - { PREFIX_TABLE (PREFIX_EVEX_0F66) }, - { PREFIX_TABLE (PREFIX_EVEX_0F67) }, + { "vpunpcklbw", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpunpcklwd", { XM, Vex, EXx }, PREFIX_DATA }, + { VEX_W_TABLE (EVEX_W_0F62) }, + { "vpacksswb", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpcmpgtb", { XMask, Vex, EXx }, PREFIX_DATA }, + { "vpcmpgtw", { XMask, Vex, EXx }, PREFIX_DATA }, + { VEX_W_TABLE (EVEX_W_0F66) }, + { "vpackuswb", { XM, Vex, EXx }, PREFIX_DATA }, /* 68 */ - { PREFIX_TABLE (PREFIX_EVEX_0F68) }, - { PREFIX_TABLE (PREFIX_EVEX_0F69) }, - { PREFIX_TABLE (PREFIX_EVEX_0F6A) }, - { PREFIX_TABLE (PREFIX_EVEX_0F6B) }, - { PREFIX_TABLE (PREFIX_EVEX_0F6C) }, - { PREFIX_TABLE (PREFIX_EVEX_0F6D) }, - { PREFIX_TABLE (PREFIX_EVEX_0F6E) }, + { "vpunpckhbw", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpunpckhwd", { XM, Vex, EXx }, PREFIX_DATA }, + { VEX_W_TABLE (EVEX_W_0F6A) }, + { VEX_W_TABLE (EVEX_W_0F6B) }, + { VEX_W_TABLE (EVEX_W_0F6C) }, + { VEX_W_TABLE (EVEX_W_0F6D) }, + { EVEX_LEN_TABLE (EVEX_LEN_0F6E) }, { PREFIX_TABLE (PREFIX_EVEX_0F6F) }, /* 70 */ { PREFIX_TABLE (PREFIX_EVEX_0F70) }, { REG_TABLE (REG_EVEX_0F71) }, { REG_TABLE (REG_EVEX_0F72) }, { REG_TABLE (REG_EVEX_0F73) }, - { PREFIX_TABLE (PREFIX_EVEX_0F74) }, - { PREFIX_TABLE (PREFIX_EVEX_0F75) }, - { PREFIX_TABLE (PREFIX_EVEX_0F76) }, + { "vpcmpeqb", { XMask, Vex, EXx }, PREFIX_DATA }, + { "vpcmpeqw", { XMask, Vex, EXx }, PREFIX_DATA }, + { VEX_W_TABLE (EVEX_W_0F76) }, { Bad_Opcode }, /* 78 */ { PREFIX_TABLE (PREFIX_EVEX_0F78) }, @@ -222,9 +222,9 @@ { Bad_Opcode }, { PREFIX_TABLE (PREFIX_EVEX_0FC2) }, { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_EVEX_0FC4) }, - { PREFIX_TABLE (PREFIX_EVEX_0FC5) }, - { PREFIX_TABLE (PREFIX_EVEX_0FC6) }, + { EVEX_LEN_TABLE (EVEX_LEN_0FC4) }, + { EVEX_LEN_TABLE (EVEX_LEN_0FC5) }, + { "vshufpX", { XM, Vex, EXx, Ib }, PREFIX_OPCODE }, { Bad_Opcode }, /* C8 */ { Bad_Opcode }, @@ -237,67 +237,67 @@ { Bad_Opcode }, /* D0 */ { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_EVEX_0FD1) }, - { PREFIX_TABLE (PREFIX_EVEX_0FD2) }, - { PREFIX_TABLE (PREFIX_EVEX_0FD3) }, - { PREFIX_TABLE (PREFIX_EVEX_0FD4) }, - { PREFIX_TABLE (PREFIX_EVEX_0FD5) }, - { PREFIX_TABLE (PREFIX_EVEX_0FD6) }, + { "vpsrlw", { XM, Vex, EXxmm }, PREFIX_DATA }, + { VEX_W_TABLE (EVEX_W_0FD2) }, + { VEX_W_TABLE (EVEX_W_0FD3) }, + { VEX_W_TABLE (EVEX_W_0FD4) }, + { "vpmullw", { XM, Vex, EXx }, PREFIX_DATA }, + { EVEX_LEN_TABLE (EVEX_LEN_0FD6) }, { Bad_Opcode }, /* D8 */ - { PREFIX_TABLE (PREFIX_EVEX_0FD8) }, - { PREFIX_TABLE (PREFIX_EVEX_0FD9) }, - { PREFIX_TABLE (PREFIX_EVEX_0FDA) }, - { PREFIX_TABLE (PREFIX_EVEX_0FDB) }, - { PREFIX_TABLE (PREFIX_EVEX_0FDC) }, - { PREFIX_TABLE (PREFIX_EVEX_0FDD) }, - { PREFIX_TABLE (PREFIX_EVEX_0FDE) }, - { PREFIX_TABLE (PREFIX_EVEX_0FDF) }, + { "vpsubusb", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpsubusw", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpminub", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpand%DQ", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpaddusb", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpaddusw", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpmaxub", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpandn%DQ", { XM, Vex, EXx }, PREFIX_DATA }, /* E0 */ - { PREFIX_TABLE (PREFIX_EVEX_0FE0) }, - { PREFIX_TABLE (PREFIX_EVEX_0FE1) }, - { PREFIX_TABLE (PREFIX_EVEX_0FE2) }, - { PREFIX_TABLE (PREFIX_EVEX_0FE3) }, - { PREFIX_TABLE (PREFIX_EVEX_0FE4) }, - { PREFIX_TABLE (PREFIX_EVEX_0FE5) }, + { "vpavgb", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpsraw", { XM, Vex, EXxmm }, PREFIX_DATA }, + { "vpsra%DQ", { XM, Vex, EXxmm }, PREFIX_DATA }, + { "vpavgw", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpmulhuw", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpmulhw", { XM, Vex, EXx }, PREFIX_DATA }, { PREFIX_TABLE (PREFIX_EVEX_0FE6) }, - { PREFIX_TABLE (PREFIX_EVEX_0FE7) }, + { VEX_W_TABLE (EVEX_W_0FE7) }, /* E8 */ - { PREFIX_TABLE (PREFIX_EVEX_0FE8) }, - { PREFIX_TABLE (PREFIX_EVEX_0FE9) }, - { PREFIX_TABLE (PREFIX_EVEX_0FEA) }, - { PREFIX_TABLE (PREFIX_EVEX_0FEB) }, - { PREFIX_TABLE (PREFIX_EVEX_0FEC) }, - { PREFIX_TABLE (PREFIX_EVEX_0FED) }, - { PREFIX_TABLE (PREFIX_EVEX_0FEE) }, - { PREFIX_TABLE (PREFIX_EVEX_0FEF) }, + { "vpsubsb", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpsubsw", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpminsw", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpor%DQ", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpaddsb", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpaddsw", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpmaxsw", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpxor%DQ", { XM, Vex, EXx }, PREFIX_DATA }, /* F0 */ { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_EVEX_0FF1) }, - { PREFIX_TABLE (PREFIX_EVEX_0FF2) }, - { PREFIX_TABLE (PREFIX_EVEX_0FF3) }, - { PREFIX_TABLE (PREFIX_EVEX_0FF4) }, - { PREFIX_TABLE (PREFIX_EVEX_0FF5) }, - { PREFIX_TABLE (PREFIX_EVEX_0FF6) }, + { "vpsllw", { XM, Vex, EXxmm }, PREFIX_DATA }, + { VEX_W_TABLE (EVEX_W_0FF2) }, + { VEX_W_TABLE (EVEX_W_0FF3) }, + { VEX_W_TABLE (EVEX_W_0FF4) }, + { "vpmaddwd", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpsadbw", { XM, Vex, EXx }, PREFIX_DATA }, { Bad_Opcode }, /* F8 */ - { PREFIX_TABLE (PREFIX_EVEX_0FF8) }, - { PREFIX_TABLE (PREFIX_EVEX_0FF9) }, - { PREFIX_TABLE (PREFIX_EVEX_0FFA) }, - { PREFIX_TABLE (PREFIX_EVEX_0FFB) }, - { PREFIX_TABLE (PREFIX_EVEX_0FFC) }, - { PREFIX_TABLE (PREFIX_EVEX_0FFD) }, - { PREFIX_TABLE (PREFIX_EVEX_0FFE) }, + { "vpsubb", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpsubw", { XM, Vex, EXx }, PREFIX_DATA }, + { VEX_W_TABLE (EVEX_W_0FFA) }, + { VEX_W_TABLE (EVEX_W_0FFB) }, + { "vpaddb", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpaddw", { XM, Vex, EXx }, PREFIX_DATA }, + { VEX_W_TABLE (EVEX_W_0FFE) }, { Bad_Opcode }, }, /* EVEX_0F38 */ { /* 00 */ - { PREFIX_TABLE (PREFIX_EVEX_0F3800) }, + { "vpshufb", { XM, Vex, EXx }, PREFIX_DATA }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_EVEX_0F3804) }, + { "vpmaddubsw", { XM, Vex, EXx }, PREFIX_DATA }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, @@ -305,9 +305,9 @@ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_EVEX_0F380B) }, - { PREFIX_TABLE (PREFIX_EVEX_0F380C) }, - { PREFIX_TABLE (PREFIX_EVEX_0F380D) }, + { "vpmulhrsw", { XM, Vex, EXx }, PREFIX_DATA }, + { VEX_W_TABLE (VEX_W_0F380C) }, + { VEX_W_TABLE (EVEX_W_0F380D) }, { Bad_Opcode }, { Bad_Opcode }, /* 10 */ @@ -317,17 +317,17 @@ { PREFIX_TABLE (PREFIX_EVEX_0F3813) }, { PREFIX_TABLE (PREFIX_EVEX_0F3814) }, { PREFIX_TABLE (PREFIX_EVEX_0F3815) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3816) }, + { EVEX_LEN_TABLE (EVEX_LEN_0F3816) }, { Bad_Opcode }, /* 18 */ - { PREFIX_TABLE (PREFIX_EVEX_0F3818) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3819) }, - { PREFIX_TABLE (PREFIX_EVEX_0F381A) }, - { PREFIX_TABLE (PREFIX_EVEX_0F381B) }, - { PREFIX_TABLE (PREFIX_EVEX_0F381C) }, - { PREFIX_TABLE (PREFIX_EVEX_0F381D) }, - { PREFIX_TABLE (PREFIX_EVEX_0F381E) }, - { PREFIX_TABLE (PREFIX_EVEX_0F381F) }, + { VEX_W_TABLE (VEX_W_0F3818) }, + { VEX_W_TABLE (EVEX_W_0F3819) }, + { VEX_W_TABLE (EVEX_W_0F381A) }, + { VEX_W_TABLE (EVEX_W_0F381B) }, + { "vpabsb", { XM, EXx }, PREFIX_DATA }, + { "vpabsw", { XM, EXx }, PREFIX_DATA }, + { VEX_W_TABLE (EVEX_W_0F381E) }, + { VEX_W_TABLE (EVEX_W_0F381F) }, /* 20 */ { PREFIX_TABLE (PREFIX_EVEX_0F3820) }, { PREFIX_TABLE (PREFIX_EVEX_0F3821) }, @@ -341,9 +341,9 @@ { PREFIX_TABLE (PREFIX_EVEX_0F3828) }, { PREFIX_TABLE (PREFIX_EVEX_0F3829) }, { PREFIX_TABLE (PREFIX_EVEX_0F382A) }, - { PREFIX_TABLE (PREFIX_EVEX_0F382B) }, - { PREFIX_TABLE (PREFIX_EVEX_0F382C) }, - { PREFIX_TABLE (PREFIX_EVEX_0F382D) }, + { VEX_W_TABLE (EVEX_W_0F382B) }, + { "vscalefp%XW", { XM, Vex, EXx, EXxEVexR }, PREFIX_DATA }, + { "vscalefs%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexR }, PREFIX_DATA }, { Bad_Opcode }, { Bad_Opcode }, /* 30 */ @@ -353,49 +353,49 @@ { PREFIX_TABLE (PREFIX_EVEX_0F3833) }, { PREFIX_TABLE (PREFIX_EVEX_0F3834) }, { PREFIX_TABLE (PREFIX_EVEX_0F3835) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3836) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3837) }, + { EVEX_LEN_TABLE (EVEX_LEN_0F3836) }, + { VEX_W_TABLE (EVEX_W_0F3837) }, /* 38 */ { PREFIX_TABLE (PREFIX_EVEX_0F3838) }, { PREFIX_TABLE (PREFIX_EVEX_0F3839) }, { PREFIX_TABLE (PREFIX_EVEX_0F383A) }, - { PREFIX_TABLE (PREFIX_EVEX_0F383B) }, - { PREFIX_TABLE (PREFIX_EVEX_0F383C) }, - { PREFIX_TABLE (PREFIX_EVEX_0F383D) }, - { PREFIX_TABLE (PREFIX_EVEX_0F383E) }, - { PREFIX_TABLE (PREFIX_EVEX_0F383F) }, + { "vpminu%DQ", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpmaxsb", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpmaxs%DQ", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpmaxuw", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpmaxu%DQ", { XM, Vex, EXx }, PREFIX_DATA }, /* 40 */ - { PREFIX_TABLE (PREFIX_EVEX_0F3840) }, + { "vpmull%DQ", { XM, Vex, EXx }, PREFIX_DATA }, { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_EVEX_0F3842) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3843) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3844) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3845) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3846) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3847) }, + { "vgetexpp%XW", { XM, EXx, EXxEVexS }, PREFIX_DATA }, + { "vgetexps%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexS }, PREFIX_DATA }, + { "vplzcnt%DQ", { XM, EXx }, PREFIX_DATA }, + { "vpsrlv%DQ", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpsrav%DQ", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpsllv%DQ", { XM, Vex, EXx }, PREFIX_DATA }, /* 48 */ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_EVEX_0F384C) }, - { PREFIX_TABLE (PREFIX_EVEX_0F384D) }, - { PREFIX_TABLE (PREFIX_EVEX_0F384E) }, - { PREFIX_TABLE (PREFIX_EVEX_0F384F) }, + { "vrcp14p%XW", { XM, EXx }, PREFIX_DATA }, + { "vrcp14s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, PREFIX_DATA }, + { "vrsqrt14p%XW", { XM, EXx }, 0 }, + { "vrsqrt14s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, PREFIX_DATA }, /* 50 */ - { PREFIX_TABLE (PREFIX_EVEX_0F3850) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3851) }, + { "vpdpbusd", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpdpbusds", { XM, Vex, EXx }, PREFIX_DATA }, { PREFIX_TABLE (PREFIX_EVEX_0F3852) }, { PREFIX_TABLE (PREFIX_EVEX_0F3853) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3854) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3855) }, + { "vpopcnt%BW", { XM, EXx }, PREFIX_DATA }, + { "vpopcnt%DQ", { XM, EXx }, PREFIX_DATA }, { Bad_Opcode }, { Bad_Opcode }, /* 58 */ - { PREFIX_TABLE (PREFIX_EVEX_0F3858) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3859) }, - { PREFIX_TABLE (PREFIX_EVEX_0F385A) }, - { PREFIX_TABLE (PREFIX_EVEX_0F385B) }, + { VEX_W_TABLE (VEX_W_0F3858) }, + { VEX_W_TABLE (EVEX_W_0F3859) }, + { VEX_W_TABLE (EVEX_W_0F385A) }, + { VEX_W_TABLE (EVEX_W_0F385B) }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, @@ -403,11 +403,11 @@ /* 60 */ { Bad_Opcode }, { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_EVEX_0F3862) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3863) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3864) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3865) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3866) }, + { "vpexpand%BW", { XM, EXbwUnit }, PREFIX_DATA }, + { "vpcompress%BW", { EXbwUnit, XM }, PREFIX_DATA }, + { "vpblendm%DQ", { XM, Vex, EXx }, PREFIX_DATA }, + { "vblendmp%XW", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpblendm%BW", { XM, Vex, EXx }, PREFIX_DATA }, { Bad_Opcode }, /* 68 */ { PREFIX_TABLE (PREFIX_EVEX_0F3868) }, @@ -419,113 +419,113 @@ { Bad_Opcode }, { Bad_Opcode }, /* 70 */ - { PREFIX_TABLE (PREFIX_EVEX_0F3870) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3871) }, + { VEX_W_TABLE (EVEX_W_0F3870) }, + { "vpshldv%DQ", { XM, Vex, EXx }, PREFIX_DATA }, { PREFIX_TABLE (PREFIX_EVEX_0F3872) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3873) }, + { "vpshrdv%DQ", { XM, Vex, EXx }, PREFIX_DATA }, { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_EVEX_0F3875) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3876) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3877) }, + { "vpermi2%BW", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpermi2%DQ", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpermi2p%XW", { XM, Vex, EXx }, PREFIX_DATA }, /* 78 */ - { PREFIX_TABLE (PREFIX_EVEX_0F3878) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3879) }, - { PREFIX_TABLE (PREFIX_EVEX_0F387A) }, - { PREFIX_TABLE (PREFIX_EVEX_0F387B) }, - { PREFIX_TABLE (PREFIX_EVEX_0F387C) }, - { PREFIX_TABLE (PREFIX_EVEX_0F387D) }, - { PREFIX_TABLE (PREFIX_EVEX_0F387E) }, - { PREFIX_TABLE (PREFIX_EVEX_0F387F) }, + { VEX_W_TABLE (VEX_W_0F3878) }, + { VEX_W_TABLE (VEX_W_0F3879) }, + { VEX_W_TABLE (EVEX_W_0F387A) }, + { VEX_W_TABLE (EVEX_W_0F387B) }, + { MOD_TABLE (MOD_EVEX_0F387C) }, + { "vpermt2%BW", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpermt2%DQ", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpermt2p%XW", { XM, Vex, EXx }, PREFIX_DATA }, /* 80 */ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_EVEX_0F3883) }, + { VEX_W_TABLE (EVEX_W_0F3883) }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, /* 88 */ - { PREFIX_TABLE (PREFIX_EVEX_0F3888) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3889) }, - { PREFIX_TABLE (PREFIX_EVEX_0F388A) }, - { PREFIX_TABLE (PREFIX_EVEX_0F388B) }, + { "vexpandp%XW", { XM, EXEvexXGscat }, PREFIX_DATA }, + { "vpexpand%DQ", { XM, EXEvexXGscat }, PREFIX_DATA }, + { "vcompressp%XW", { EXEvexXGscat, XM }, PREFIX_DATA }, + { "vpcompress%DQ", { EXEvexXGscat, XM }, PREFIX_DATA }, { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_EVEX_0F388D) }, + { "vperm%BW", { XM, Vex, EXx }, PREFIX_DATA }, { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_EVEX_0F388F) }, + { "vpshufbitqmb", { XMask, Vex, EXx }, PREFIX_DATA }, /* 90 */ - { PREFIX_TABLE (PREFIX_EVEX_0F3890) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3891) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3892) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3893) }, + { "vpgatherd%DQ", { XM, MVexVSIBDWpX }, PREFIX_DATA }, + { VEX_W_TABLE (EVEX_W_0F3891) }, + { "vgatherdp%XW", { XM, MVexVSIBDWpX}, PREFIX_DATA }, + { VEX_W_TABLE (EVEX_W_0F3893) }, { Bad_Opcode }, { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_EVEX_0F3896) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3897) }, + { "vfmaddsub132p%XW", { XM, Vex, EXx, EXxEVexR }, PREFIX_DATA }, + { "vfmsubadd132p%XW", { XM, Vex, EXx, EXxEVexR }, PREFIX_DATA }, /* 98 */ - { PREFIX_TABLE (PREFIX_EVEX_0F3898) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3899) }, + { "vfmadd132p%XW", { XM, Vex, EXx, EXxEVexR }, PREFIX_DATA }, + { "vfmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexR }, PREFIX_DATA }, { PREFIX_TABLE (PREFIX_EVEX_0F389A) }, { PREFIX_TABLE (PREFIX_EVEX_0F389B) }, - { PREFIX_TABLE (PREFIX_EVEX_0F389C) }, - { PREFIX_TABLE (PREFIX_EVEX_0F389D) }, - { PREFIX_TABLE (PREFIX_EVEX_0F389E) }, - { PREFIX_TABLE (PREFIX_EVEX_0F389F) }, + { "vfnmadd132p%XW", { XM, Vex, EXx, EXxEVexR }, PREFIX_DATA }, + { "vfnmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexR }, PREFIX_DATA }, + { "vfnmsub132p%XW", { XM, Vex, EXx, EXxEVexR }, PREFIX_DATA }, + { "vfnmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexR }, PREFIX_DATA }, /* A0 */ - { PREFIX_TABLE (PREFIX_EVEX_0F38A0) }, - { PREFIX_TABLE (PREFIX_EVEX_0F38A1) }, - { PREFIX_TABLE (PREFIX_EVEX_0F38A2) }, - { PREFIX_TABLE (PREFIX_EVEX_0F38A3) }, + { "vpscatterd%DQ", { MVexVSIBDWpX, XM }, PREFIX_DATA }, + { VEX_W_TABLE (EVEX_W_0F38A1) }, + { "vscatterdp%XW", { MVexVSIBDWpX, XM }, PREFIX_DATA }, + { VEX_W_TABLE (EVEX_W_0F38A3) }, { Bad_Opcode }, { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_EVEX_0F38A6) }, - { PREFIX_TABLE (PREFIX_EVEX_0F38A7) }, + { "vfmaddsub213p%XW", { XM, Vex, EXx, EXxEVexR }, PREFIX_DATA }, + { "vfmsubadd213p%XW", { XM, Vex, EXx, EXxEVexR }, PREFIX_DATA }, /* A8 */ - { PREFIX_TABLE (PREFIX_EVEX_0F38A8) }, - { PREFIX_TABLE (PREFIX_EVEX_0F38A9) }, + { "vfmadd213p%XW", { XM, Vex, EXx, EXxEVexR }, PREFIX_DATA }, + { "vfmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexR }, PREFIX_DATA }, { PREFIX_TABLE (PREFIX_EVEX_0F38AA) }, { PREFIX_TABLE (PREFIX_EVEX_0F38AB) }, - { PREFIX_TABLE (PREFIX_EVEX_0F38AC) }, - { PREFIX_TABLE (PREFIX_EVEX_0F38AD) }, - { PREFIX_TABLE (PREFIX_EVEX_0F38AE) }, - { PREFIX_TABLE (PREFIX_EVEX_0F38AF) }, + { "vfnmadd213p%XW", { XM, Vex, EXx, EXxEVexR }, PREFIX_DATA }, + { "vfnmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexR }, PREFIX_DATA }, + { "vfnmsub213p%XW", { XM, Vex, EXx, EXxEVexR }, PREFIX_DATA }, + { "vfnmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexR }, PREFIX_DATA }, /* B0 */ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_EVEX_0F38B4) }, - { PREFIX_TABLE (PREFIX_EVEX_0F38B5) }, - { PREFIX_TABLE (PREFIX_EVEX_0F38B6) }, - { PREFIX_TABLE (PREFIX_EVEX_0F38B7) }, + { "vpmadd52luq", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpmadd52huq", { XM, Vex, EXx }, PREFIX_DATA }, + { "vfmaddsub231p%XW", { XM, Vex, EXx, EXxEVexR }, PREFIX_DATA }, + { "vfmsubadd231p%XW", { XM, Vex, EXx, EXxEVexR }, PREFIX_DATA }, /* B8 */ - { PREFIX_TABLE (PREFIX_EVEX_0F38B8) }, - { PREFIX_TABLE (PREFIX_EVEX_0F38B9) }, - { PREFIX_TABLE (PREFIX_EVEX_0F38BA) }, - { PREFIX_TABLE (PREFIX_EVEX_0F38BB) }, - { PREFIX_TABLE (PREFIX_EVEX_0F38BC) }, - { PREFIX_TABLE (PREFIX_EVEX_0F38BD) }, - { PREFIX_TABLE (PREFIX_EVEX_0F38BE) }, - { PREFIX_TABLE (PREFIX_EVEX_0F38BF) }, + { "vfmadd231p%XW", { XM, Vex, EXx, EXxEVexR }, PREFIX_DATA }, + { "vfmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexR }, PREFIX_DATA }, + { "vfmsub231p%XW", { XM, Vex, EXx, EXxEVexR }, PREFIX_DATA }, + { "vfmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexR }, PREFIX_DATA }, + { "vfnmadd231p%XW", { XM, Vex, EXx, EXxEVexR }, PREFIX_DATA }, + { "vfnmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexR }, PREFIX_DATA }, + { "vfnmsub231p%XW", { XM, Vex, EXx, EXxEVexR }, PREFIX_DATA }, + { "vfnmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexR }, PREFIX_DATA }, /* C0 */ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_EVEX_0F38C4) }, + { "vpconflict%DQ", { XM, EXx }, PREFIX_DATA }, { Bad_Opcode }, { REG_TABLE (REG_EVEX_0F38C6) }, { REG_TABLE (REG_EVEX_0F38C7) }, /* C8 */ - { PREFIX_TABLE (PREFIX_EVEX_0F38C8) }, + { "vexp2p%XW", { XM, EXx, EXxEVexS }, PREFIX_DATA }, { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_EVEX_0F38CA) }, - { PREFIX_TABLE (PREFIX_EVEX_0F38CB) }, - { PREFIX_TABLE (PREFIX_EVEX_0F38CC) }, - { PREFIX_TABLE (PREFIX_EVEX_0F38CD) }, + { "vrcp28p%XW", { XM, EXx, EXxEVexS }, PREFIX_DATA }, + { "vrcp28s%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexS }, PREFIX_DATA }, + { "vrsqrt28p%XW", { XM, EXx, EXxEVexS }, PREFIX_DATA }, + { "vrsqrt28s%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexS }, PREFIX_DATA }, { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_EVEX_0F38CF) }, + { VEX_W_TABLE (VEX_W_0F38CF) }, /* D0 */ { Bad_Opcode }, { Bad_Opcode }, @@ -540,10 +540,10 @@ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_EVEX_0F38DC) }, - { PREFIX_TABLE (PREFIX_EVEX_0F38DD) }, - { PREFIX_TABLE (PREFIX_EVEX_0F38DE) }, - { PREFIX_TABLE (PREFIX_EVEX_0F38DF) }, + { "vaesenc", { XM, Vex, EXx }, PREFIX_DATA }, + { "vaesenclast", { XM, Vex, EXx }, PREFIX_DATA }, + { "vaesdec", { XM, Vex, EXx }, PREFIX_DATA }, + { "vaesdeclast", { XM, Vex, EXx }, PREFIX_DATA }, /* E0 */ { Bad_Opcode }, { Bad_Opcode }, @@ -584,50 +584,50 @@ /* EVEX_0F3A */ { /* 00 */ - { PREFIX_TABLE (PREFIX_EVEX_0F3A00) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A01) }, + { VEX_W_TABLE (EVEX_W_0F3A00) }, + { VEX_W_TABLE (EVEX_W_0F3A01) }, { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A03) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A04) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A05) }, + { "valign%DQ", { XM, Vex, EXx, Ib }, PREFIX_DATA }, + { VEX_W_TABLE (VEX_W_0F3A04) }, + { VEX_W_TABLE (EVEX_W_0F3A05) }, { Bad_Opcode }, { Bad_Opcode }, /* 08 */ - { PREFIX_TABLE (PREFIX_EVEX_0F3A08) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A09) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A0A) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A0B) }, + { VEX_W_TABLE (EVEX_W_0F3A08) }, + { VEX_W_TABLE (EVEX_W_0F3A09) }, + { VEX_W_TABLE (EVEX_W_0F3A0A) }, + { VEX_W_TABLE (EVEX_W_0F3A0B) }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A0F) }, + { "vpalignr", { XM, Vex, EXx, Ib }, PREFIX_DATA }, /* 10 */ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A14) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A15) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A16) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A17) }, + { EVEX_LEN_TABLE (EVEX_LEN_0F3A14) }, + { EVEX_LEN_TABLE (EVEX_LEN_0F3A15) }, + { EVEX_LEN_TABLE (EVEX_LEN_0F3A16) }, + { EVEX_LEN_TABLE (EVEX_LEN_0F3A17) }, /* 18 */ - { PREFIX_TABLE (PREFIX_EVEX_0F3A18) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A19) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A1A) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A1B) }, - { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A1D) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A1E) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A1F) }, + { VEX_W_TABLE (EVEX_W_0F3A18) }, + { VEX_W_TABLE (EVEX_W_0F3A19) }, + { VEX_W_TABLE (EVEX_W_0F3A1A) }, + { VEX_W_TABLE (EVEX_W_0F3A1B) }, + { Bad_Opcode }, + { VEX_W_TABLE (VEX_W_0F3A1D) }, + { "vpcmpu%DQ", { XMask, Vex, EXx, VPCMP }, PREFIX_DATA }, + { "vpcmp%DQ", { XMask, Vex, EXx, VPCMP }, PREFIX_DATA }, /* 20 */ - { PREFIX_TABLE (PREFIX_EVEX_0F3A20) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A21) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A22) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A23) }, - { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A25) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A26) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A27) }, + { EVEX_LEN_TABLE (EVEX_LEN_0F3A20) }, + { VEX_W_TABLE (EVEX_W_0F3A21) }, + { EVEX_LEN_TABLE (EVEX_LEN_0F3A22) }, + { VEX_W_TABLE (EVEX_W_0F3A23) }, + { Bad_Opcode }, + { "vpternlog%DQ", { XM, Vex, EXx, Ib }, PREFIX_DATA }, + { "vgetmantp%XW", { XM, EXx, EXxEVexS, Ib }, PREFIX_DATA }, + { "vgetmants%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexS, Ib }, PREFIX_DATA }, /* 28 */ { Bad_Opcode }, { Bad_Opcode }, @@ -647,20 +647,20 @@ { Bad_Opcode }, { Bad_Opcode }, /* 38 */ - { PREFIX_TABLE (PREFIX_EVEX_0F3A38) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A39) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A3A) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A3B) }, + { VEX_W_TABLE (EVEX_W_0F3A38) }, + { VEX_W_TABLE (EVEX_W_0F3A39) }, + { VEX_W_TABLE (EVEX_W_0F3A3A) }, + { VEX_W_TABLE (EVEX_W_0F3A3B) }, { Bad_Opcode }, { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A3E) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A3F) }, + { "vpcmpu%BW", { XMask, Vex, EXx, VPCMP }, PREFIX_DATA }, + { "vpcmp%BW", { XMask, Vex, EXx, VPCMP }, PREFIX_DATA }, /* 40 */ { Bad_Opcode }, { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A42) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A43) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A44) }, + { VEX_W_TABLE (EVEX_W_0F3A42) }, + { VEX_W_TABLE (EVEX_W_0F3A43) }, + { "vpclmulqdq", { XM, Vex, EXx, PCLMUL }, PREFIX_DATA }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, @@ -674,14 +674,14 @@ { Bad_Opcode }, { Bad_Opcode }, /* 50 */ - { PREFIX_TABLE (PREFIX_EVEX_0F3A50) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A51) }, + { "vrangep%XW", { XM, Vex, EXx, EXxEVexS, Ib }, PREFIX_DATA }, + { "vranges%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexS, Ib }, PREFIX_DATA }, { Bad_Opcode }, { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A54) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A55) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A56) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A57) }, + { "vfixupimmp%XW", { XM, Vex, EXx, EXxEVexS, Ib }, PREFIX_DATA }, + { "vfixupimms%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexS, Ib }, PREFIX_DATA }, + { "vreducep%XW", { XM, EXx, EXxEVexS, Ib }, PREFIX_DATA }, + { "vreduces%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexS, Ib }, PREFIX_DATA }, /* 58 */ { Bad_Opcode }, { Bad_Opcode }, @@ -698,8 +698,8 @@ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A66) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A67) }, + { "vfpclassp%XW%XZ", { XMask, EXx, Ib }, PREFIX_DATA }, + { "vfpclasss%XW", { XMask, EXVexWdqScalar, Ib }, PREFIX_DATA }, /* 68 */ { Bad_Opcode }, { Bad_Opcode }, @@ -710,10 +710,10 @@ { Bad_Opcode }, { Bad_Opcode }, /* 70 */ - { PREFIX_TABLE (PREFIX_EVEX_0F3A70) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A71) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A72) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3A73) }, + { VEX_W_TABLE (EVEX_W_0F3A70) }, + { "vpshld%DQ", { XM, Vex, EXx, Ib }, PREFIX_DATA }, + { VEX_W_TABLE (EVEX_W_0F3A72) }, + { "vpshrd%DQ", { XM, Vex, EXx, Ib }, PREFIX_DATA }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, @@ -815,8 +815,8 @@ { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_EVEX_0F3ACE) }, - { PREFIX_TABLE (PREFIX_EVEX_0F3ACF) }, + { VEX_W_TABLE (VEX_W_0F3ACE) }, + { VEX_W_TABLE (VEX_W_0F3ACF) }, /* D0 */ { Bad_Opcode }, { Bad_Opcode }, diff -Nru gdb-9.1/opcodes/i386-dis-evex-len.h gdb-10.2/opcodes/i386-dis-evex-len.h --- gdb-9.1/opcodes/i386-dis-evex-len.h 2019-09-20 21:58:17.000000000 +0000 +++ gdb-10.2/opcodes/i386-dis-evex-len.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,7 +1,7 @@ static const struct dis386 evex_len_table[][3] = { - /* EVEX_LEN_0F6E_P_2 */ + /* EVEX_LEN_0F6E */ { - { "vmovK", { XMScalar, Edq }, 0 }, + { "vmovK", { XMScalar, Edq }, PREFIX_DATA }, }, /* EVEX_LEN_0F7E_P_1 */ @@ -14,302 +14,375 @@ { "vmovK", { Edq, XMScalar }, 0 }, }, - /* EVEX_LEN_0FD6_P_2 */ + /* EVEX_LEN_0FC4 */ { - { VEX_W_TABLE (EVEX_W_0FD6_P_2) }, + { "vpinsrw", { XM, Vex, Edqw, Ib }, PREFIX_DATA }, }, - /* EVEX_LEN_0F3819_P_2_W_0 */ + /* EVEX_LEN_0FC5 */ + { + { "vpextrw", { Gdq, XS, Ib }, PREFIX_DATA }, + }, + + /* EVEX_LEN_0FD6 */ + { + { VEX_W_TABLE (EVEX_W_0FD6_L_0) }, + }, + + /* EVEX_LEN_0F3816 */ { { Bad_Opcode }, - { "vbroadcastf32x2", { XM, EXxmm_mq }, 0 }, - { "vbroadcastf32x2", { XM, EXxmm_mq }, 0 }, + { "vpermp%XW", { XM, Vex, EXx }, PREFIX_DATA }, + { "vpermp%XW", { XM, Vex, EXx }, PREFIX_DATA }, }, - /* EVEX_LEN_0F3819_P_2_W_1 */ + /* EVEX_LEN_0F3819_W_0 */ { { Bad_Opcode }, - { "vbroadcastsd", { XM, EXxmm_mq }, 0 }, - { "vbroadcastsd", { XM, EXxmm_mq }, 0 }, + { "vbroadcastf32x2", { XM, EXxmm_mq }, PREFIX_DATA }, + { "vbroadcastf32x2", { XM, EXxmm_mq }, PREFIX_DATA }, }, - /* EVEX_LEN_0F381A_P_2_W_0 */ + /* EVEX_LEN_0F3819_W_1 */ { { Bad_Opcode }, - { "vbroadcastf32x4", { XM, EXxmm }, 0 }, - { "vbroadcastf32x4", { XM, EXxmm }, 0 }, + { "vbroadcastsd", { XM, EXxmm_mq }, PREFIX_DATA }, + { "vbroadcastsd", { XM, EXxmm_mq }, PREFIX_DATA }, }, - /* EVEX_LEN_0F381A_P_2_W_1 */ + /* EVEX_LEN_0F381A_W_0_M_0 */ { { Bad_Opcode }, - { "vbroadcastf64x2", { XM, EXxmm }, 0 }, - { "vbroadcastf64x2", { XM, EXxmm }, 0 }, + { "vbroadcastf32x4", { XM, EXxmm }, PREFIX_DATA }, + { "vbroadcastf32x4", { XM, EXxmm }, PREFIX_DATA }, }, - /* EVEX_LEN_0F381B_P_2_W_0 */ + /* EVEX_LEN_0F381A_W_1_M_0 */ { { Bad_Opcode }, + { "vbroadcastf64x2", { XM, EXxmm }, PREFIX_DATA }, + { "vbroadcastf64x2", { XM, EXxmm }, PREFIX_DATA }, + }, + + /* EVEX_LEN_0F381B_W_0_M_0 */ + { { Bad_Opcode }, - { "vbroadcastf32x8", { XM, EXxmmq }, 0 }, + { Bad_Opcode }, + { "vbroadcastf32x8", { XM, EXymm }, PREFIX_DATA }, }, - /* EVEX_LEN_0F381B_P_2_W_1 */ + /* EVEX_LEN_0F381B_P_2_W_1_M_0 */ { { Bad_Opcode }, { Bad_Opcode }, { "vbroadcastf64x4", { XM, EXymm }, 0 }, }, - /* EVEX_LEN_0F385A_P_2_W_0 */ + /* EVEX_LEN_0F3836 */ + { + { Bad_Opcode }, + { "vperm%DQ", { XM, Vex, EXx }, PREFIX_DATA }, + { "vperm%DQ", { XM, Vex, EXx }, PREFIX_DATA }, + }, + + /* EVEX_LEN_0F385A_W_0_M_0 */ { { Bad_Opcode }, - { "vbroadcasti32x4", { XM, EXxmm }, 0 }, - { "vbroadcasti32x4", { XM, EXxmm }, 0 }, + { "vbroadcasti32x4", { XM, EXxmm }, PREFIX_DATA }, + { "vbroadcasti32x4", { XM, EXxmm }, PREFIX_DATA }, }, - /* EVEX_LEN_0F385A_P_2_W_1 */ + /* EVEX_LEN_0F385A_W_1_M_0 */ { { Bad_Opcode }, - { "vbroadcasti64x2", { XM, EXxmm }, 0 }, - { "vbroadcasti64x2", { XM, EXxmm }, 0 }, + { "vbroadcasti64x2", { XM, EXxmm }, PREFIX_DATA }, + { "vbroadcasti64x2", { XM, EXxmm }, PREFIX_DATA }, }, - /* EVEX_LEN_0F385B_P_2_W_0 */ + /* EVEX_LEN_0F385B_W_0_M_0 */ { { Bad_Opcode }, { Bad_Opcode }, - { "vbroadcasti32x8", { XM, EXxmmq }, 0 }, + { "vbroadcasti32x8", { XM, EXymm }, PREFIX_DATA }, }, - /* EVEX_LEN_0F385B_P_2_W_1 */ + /* EVEX_LEN_0F385B_W_1_M_0 */ { { Bad_Opcode }, { Bad_Opcode }, - { "vbroadcasti64x4", { XM, EXymm }, 0 }, + { "vbroadcasti64x4", { XM, EXymm }, PREFIX_DATA }, }, - /* EVEX_LEN_0F38C6_REG_1_PREFIX_2 */ + /* EVEX_LEN_0F38C6_R_1_M_0 */ { { Bad_Opcode }, { Bad_Opcode }, - { "vgatherpf0dp%XW", { MVexVSIBDWpX }, 0 }, + { "vgatherpf0dp%XW", { MVexVSIBDWpX }, PREFIX_DATA }, }, - /* EVEX_LEN_0F38C6_REG_2_PREFIX_2 */ + /* EVEX_LEN_0F38C6_R_2_M_0 */ { { Bad_Opcode }, { Bad_Opcode }, - { "vgatherpf1dp%XW", { MVexVSIBDWpX }, 0 }, + { "vgatherpf1dp%XW", { MVexVSIBDWpX }, PREFIX_DATA }, }, - /* EVEX_LEN_0F38C6_REG_5_PREFIX_2 */ + /* EVEX_LEN_0F38C6_R_5_M_0 */ { { Bad_Opcode }, { Bad_Opcode }, - { "vscatterpf0dp%XW", { MVexVSIBDWpX }, 0 }, + { "vscatterpf0dp%XW", { MVexVSIBDWpX }, PREFIX_DATA }, }, - /* EVEX_LEN_0F38C6_REG_6_PREFIX_2 */ + /* EVEX_LEN_0F38C6_R_6_M_0 */ { { Bad_Opcode }, { Bad_Opcode }, - { "vscatterpf1dp%XW", { MVexVSIBDWpX }, 0 }, + { "vscatterpf1dp%XW", { MVexVSIBDWpX }, PREFIX_DATA }, }, - /* EVEX_LEN_0F38C7_R_1_P_2_W_0 */ + /* EVEX_LEN_0F38C7_R_1_M_0_W_0 */ { { Bad_Opcode }, { Bad_Opcode }, - { "vgatherpf0qps", { MVexVSIBDQWpX }, 0 }, + { "vgatherpf0qps", { MVexVSIBDQWpX }, PREFIX_DATA }, }, - /* EVEX_LEN_0F38C7_R_1_P_2_W_1 */ + /* EVEX_LEN_0F38C7_R_1_M_0_W_1 */ { { Bad_Opcode }, { Bad_Opcode }, - { "vgatherpf0qpd", { MVexVSIBQWpX }, 0 }, + { "vgatherpf0qpd", { MVexVSIBQWpX }, PREFIX_DATA }, }, - /* EVEX_LEN_0F38C7_R_2_P_2_W_0 */ + /* EVEX_LEN_0F38C7_R_2_M_0_W_0 */ { { Bad_Opcode }, { Bad_Opcode }, - { "vgatherpf1qps", { MVexVSIBDQWpX }, 0 }, + { "vgatherpf1qps", { MVexVSIBDQWpX }, PREFIX_DATA }, }, - /* EVEX_LEN_0F38C7_R_2_P_2_W_1 */ + /* EVEX_LEN_0F38C7_R_2_M_0_W_1 */ { { Bad_Opcode }, { Bad_Opcode }, - { "vgatherpf1qpd", { MVexVSIBQWpX }, 0 }, + { "vgatherpf1qpd", { MVexVSIBQWpX }, PREFIX_DATA }, }, - /* EVEX_LEN_0F38C7_R_5_P_2_W_0 */ + /* EVEX_LEN_0F38C7_R_5_M_0_W_0 */ { { Bad_Opcode }, { Bad_Opcode }, - { "vscatterpf0qps", { MVexVSIBDQWpX }, 0 }, + { "vscatterpf0qps", { MVexVSIBDQWpX }, PREFIX_DATA }, }, - /* EVEX_LEN_0F38C7_R_5_P_2_W_1 */ + /* EVEX_LEN_0F38C7_R_5_M_0_W_1 */ { { Bad_Opcode }, { Bad_Opcode }, - { "vscatterpf0qpd", { MVexVSIBQWpX }, 0 }, + { "vscatterpf0qpd", { MVexVSIBQWpX }, PREFIX_DATA }, }, - /* EVEX_LEN_0F38C7_R_6_P_2_W_0 */ + /* EVEX_LEN_0F38C7_R_6_M_0_W_0 */ { { Bad_Opcode }, { Bad_Opcode }, - { "vscatterpf1qps", { MVexVSIBDQWpX }, 0 }, + { "vscatterpf1qps", { MVexVSIBDQWpX }, PREFIX_DATA }, }, - /* EVEX_LEN_0F38C7_R_6_P_2_W_1 */ + /* EVEX_LEN_0F38C7_R_6_M_0_W_1 */ { { Bad_Opcode }, { Bad_Opcode }, - { "vscatterpf1qpd", { MVexVSIBQWpX }, 0 }, + { "vscatterpf1qpd", { MVexVSIBQWpX }, PREFIX_DATA }, }, - /* EVEX_LEN_0F3A18_P_2_W_0 */ + /* EVEX_LEN_0F3A00_W_1 */ { { Bad_Opcode }, - { "vinsertf32x4", { XM, Vex, EXxmm, Ib }, 0 }, - { "vinsertf32x4", { XM, Vex, EXxmm, Ib }, 0 }, + { "vpermq", { XM, EXx, Ib }, PREFIX_DATA }, + { "vpermq", { XM, EXx, Ib }, PREFIX_DATA }, }, - /* EVEX_LEN_0F3A18_P_2_W_1 */ + /* EVEX_LEN_0F3A01_W_1 */ { { Bad_Opcode }, - { "vinsertf64x2", { XM, Vex, EXxmm, Ib }, 0 }, - { "vinsertf64x2", { XM, Vex, EXxmm, Ib }, 0 }, + { "vpermpd", { XM, EXx, Ib }, PREFIX_DATA }, + { "vpermpd", { XM, EXx, Ib }, PREFIX_DATA }, + }, + + /* EVEX_LEN_0F3A14 */ + { + { "vpextrb", { Edqb, XM, Ib }, PREFIX_DATA }, + }, + + /* EVEX_LEN_0F3A15 */ + { + { "vpextrw", { Edqw, XM, Ib }, PREFIX_DATA }, + }, + + /* EVEX_LEN_0F3A16 */ + { + { "vpextrK", { Edq, XM, Ib }, PREFIX_DATA }, }, - /* EVEX_LEN_0F3A19_P_2_W_0 */ + /* EVEX_LEN_0F3A17 */ + { + { "vextractps", { Edqd, XMM, Ib }, PREFIX_DATA }, + }, + + /* EVEX_LEN_0F3A18_W_0 */ { { Bad_Opcode }, - { "vextractf32x4", { EXxmm, XM, Ib }, 0 }, - { "vextractf32x4", { EXxmm, XM, Ib }, 0 }, + { "vinsertf32x4", { XM, Vex, EXxmm, Ib }, PREFIX_DATA }, + { "vinsertf32x4", { XM, Vex, EXxmm, Ib }, PREFIX_DATA }, }, - /* EVEX_LEN_0F3A19_P_2_W_1 */ + /* EVEX_LEN_0F3A18_W_1 */ { { Bad_Opcode }, - { "vextractf64x2", { EXxmm, XM, Ib }, 0 }, - { "vextractf64x2", { EXxmm, XM, Ib }, 0 }, + { "vinsertf64x2", { XM, Vex, EXxmm, Ib }, PREFIX_DATA }, + { "vinsertf64x2", { XM, Vex, EXxmm, Ib }, PREFIX_DATA }, }, - /* EVEX_LEN_0F3A1A_P_2_W_0 */ + /* EVEX_LEN_0F3A19_W_0 */ { { Bad_Opcode }, + { "vextractf32x4", { EXxmm, XM, Ib }, PREFIX_DATA }, + { "vextractf32x4", { EXxmm, XM, Ib }, PREFIX_DATA }, + }, + + /* EVEX_LEN_0F3A19_W_1 */ + { { Bad_Opcode }, - { "vinsertf32x8", { XM, Vex, EXxmmq, Ib }, 0 }, + { "vextractf64x2", { EXxmm, XM, Ib }, PREFIX_DATA }, + { "vextractf64x2", { EXxmm, XM, Ib }, PREFIX_DATA }, }, - /* EVEX_LEN_0F3A1A_P_2_W_1 */ + /* EVEX_LEN_0F3A1A_W_0 */ { { Bad_Opcode }, { Bad_Opcode }, - { "vinsertf64x4", { XM, Vex, EXxmmq, Ib }, 0 }, + { "vinsertf32x8", { XM, Vex, EXymm, Ib }, PREFIX_DATA }, }, - /* EVEX_LEN_0F3A1B_P_2_W_0 */ + /* EVEX_LEN_0F3A1A_W_1 */ { { Bad_Opcode }, { Bad_Opcode }, - { "vextractf32x8", { EXxmmq, XM, Ib }, 0 }, + { "vinsertf64x4", { XM, Vex, EXymm, Ib }, PREFIX_DATA }, }, - /* EVEX_LEN_0F3A1B_P_2_W_1 */ + /* EVEX_LEN_0F3A1B_W_0 */ { { Bad_Opcode }, { Bad_Opcode }, - { "vextractf64x4", { EXxmmq, XM, Ib }, 0 }, + { "vextractf32x8", { EXymm, XM, Ib }, PREFIX_DATA }, }, - /* EVEX_LEN_0F3A23_P_2_W_0 */ + /* EVEX_LEN_0F3A1B_W_1 */ { { Bad_Opcode }, - { "vshuff32x4", { XM, Vex, EXx, Ib }, 0 }, - { "vshuff32x4", { XM, Vex, EXx, Ib }, 0 }, + { Bad_Opcode }, + { "vextractf64x4", { EXymm, XM, Ib }, PREFIX_DATA }, + }, + + /* EVEX_LEN_0F3A20 */ + { + { "vpinsrb", { XM, Vex, Edqb, Ib }, PREFIX_DATA }, + }, + + /* EVEX_LEN_0F3A21_W_0 */ + { + { "vinsertps", { XMM, Vex, EXxmm_md, Ib }, PREFIX_DATA }, }, - /* EVEX_LEN_0F3A23_P_2_W_1 */ + /* EVEX_LEN_0F3A22 */ + { + { "vpinsrK", { XM, Vex, Edq, Ib }, PREFIX_DATA }, + }, + + /* EVEX_LEN_0F3A23_W_0 */ { { Bad_Opcode }, - { "vshuff64x2", { XM, Vex, EXx, Ib }, 0 }, - { "vshuff64x2", { XM, Vex, EXx, Ib }, 0 }, + { "vshuff32x4", { XM, Vex, EXx, Ib }, PREFIX_DATA }, + { "vshuff32x4", { XM, Vex, EXx, Ib }, PREFIX_DATA }, }, - /* EVEX_LEN_0F3A38_P_2_W_0 */ + /* EVEX_LEN_0F3A23_W_1 */ { { Bad_Opcode }, - { "vinserti32x4", { XM, Vex, EXxmm, Ib }, 0 }, - { "vinserti32x4", { XM, Vex, EXxmm, Ib }, 0 }, + { "vshuff64x2", { XM, Vex, EXx, Ib }, PREFIX_DATA }, + { "vshuff64x2", { XM, Vex, EXx, Ib }, PREFIX_DATA }, }, - /* EVEX_LEN_0F3A38_P_2_W_1 */ + /* EVEX_LEN_0F3A38_W_0 */ { { Bad_Opcode }, - { "vinserti64x2", { XM, Vex, EXxmm, Ib }, 0 }, - { "vinserti64x2", { XM, Vex, EXxmm, Ib }, 0 }, + { "vinserti32x4", { XM, Vex, EXxmm, Ib }, PREFIX_DATA }, + { "vinserti32x4", { XM, Vex, EXxmm, Ib }, PREFIX_DATA }, }, - /* EVEX_LEN_0F3A39_P_2_W_0 */ + /* EVEX_LEN_0F3A38_W_1 */ { { Bad_Opcode }, - { "vextracti32x4", { EXxmm, XM, Ib }, 0 }, - { "vextracti32x4", { EXxmm, XM, Ib }, 0 }, + { "vinserti64x2", { XM, Vex, EXxmm, Ib }, PREFIX_DATA }, + { "vinserti64x2", { XM, Vex, EXxmm, Ib }, PREFIX_DATA }, }, - /* EVEX_LEN_0F3A39_P_2_W_1 */ + /* EVEX_LEN_0F3A39_W_0 */ { { Bad_Opcode }, - { "vextracti64x2", { EXxmm, XM, Ib }, 0 }, - { "vextracti64x2", { EXxmm, XM, Ib }, 0 }, + { "vextracti32x4", { EXxmm, XM, Ib }, PREFIX_DATA }, + { "vextracti32x4", { EXxmm, XM, Ib }, PREFIX_DATA }, }, - /* EVEX_LEN_0F3A3A_P_2_W_0 */ + /* EVEX_LEN_0F3A39_W_1 */ { { Bad_Opcode }, - { "vinserti32x8", { XM, Vex, EXxmmq, Ib }, 0 }, - { "vinserti32x8", { XM, Vex, EXxmmq, Ib }, 0 }, + { "vextracti64x2", { EXxmm, XM, Ib }, PREFIX_DATA }, + { "vextracti64x2", { EXxmm, XM, Ib }, PREFIX_DATA }, }, - /* EVEX_LEN_0F3A3A_P_2_W_1 */ + /* EVEX_LEN_0F3A3A_W_0 */ { { Bad_Opcode }, - { "vinserti64x4", { XM, Vex, EXxmmq, Ib }, 0 }, - { "vinserti64x4", { XM, Vex, EXxmmq, Ib }, 0 }, + { Bad_Opcode }, + { "vinserti32x8", { XM, Vex, EXymm, Ib }, PREFIX_DATA }, }, - /* EVEX_LEN_0F3A3B_P_2_W_0 */ + /* EVEX_LEN_0F3A3A_W_1 */ { { Bad_Opcode }, - { "vextracti32x8", { EXxmmq, XM, Ib }, 0 }, - { "vextracti32x8", { EXxmmq, XM, Ib }, 0 }, + { Bad_Opcode }, + { "vinserti64x4", { XM, Vex, EXymm, Ib }, PREFIX_DATA }, }, - /* EVEX_LEN_0F3A3B_P_2_W_1 */ + /* EVEX_LEN_0F3A3B_W_0 */ { { Bad_Opcode }, - { "vextracti64x4", { EXxmmq, XM, Ib }, 0 }, - { "vextracti64x4", { EXxmmq, XM, Ib }, 0 }, + { Bad_Opcode }, + { "vextracti32x8", { EXymm, XM, Ib }, PREFIX_DATA }, + }, + + /* EVEX_LEN_0F3A3B_W_1 */ + { + { Bad_Opcode }, + { Bad_Opcode }, + { "vextracti64x4", { EXymm, XM, Ib }, PREFIX_DATA }, }, - /* EVEX_LEN_0F3A43_P_2_W_0 */ + /* EVEX_LEN_0F3A43_W_0 */ { { Bad_Opcode }, - { "vshufi32x4", { XM, Vex, EXx, Ib }, 0 }, - { "vshufi32x4", { XM, Vex, EXx, Ib }, 0 }, + { "vshufi32x4", { XM, Vex, EXx, Ib }, PREFIX_DATA }, + { "vshufi32x4", { XM, Vex, EXx, Ib }, PREFIX_DATA }, }, - /* EVEX_LEN_0F3A43_P_2_W_1 */ + /* EVEX_LEN_0F3A43_W_1 */ { { Bad_Opcode }, - { "vshufi64x2", { XM, Vex, EXx, Ib }, 0 }, - { "vshufi64x2", { XM, Vex, EXx, Ib }, 0 }, + { "vshufi64x2", { XM, Vex, EXx, Ib }, PREFIX_DATA }, + { "vshufi64x2", { XM, Vex, EXx, Ib }, PREFIX_DATA }, }, }; diff -Nru gdb-9.1/opcodes/i386-dis-evex-mod.h gdb-10.2/opcodes/i386-dis-evex-mod.h --- gdb-9.1/opcodes/i386-dis-evex-mod.h 2019-09-20 21:58:17.000000000 +0000 +++ gdb-10.2/opcodes/i386-dis-evex-mod.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,42 +1,129 @@ { /* MOD_EVEX_0F12_PREFIX_0 */ - { VEX_W_TABLE (EVEX_W_0F12_P_0_M_0) }, + { "vmovlpX", { XMM, Vex, EXxmm_mq }, PREFIX_OPCODE }, { VEX_W_TABLE (EVEX_W_0F12_P_0_M_1) }, }, { + /* MOD_EVEX_0F12_PREFIX_2 */ + { "vmovlpX", { XMM, Vex, EXxmm_mq }, PREFIX_OPCODE }, + }, + { + /* MOD_EVEX_0F13 */ + { "vmovlpX", { EXxmm_mq, XMM }, PREFIX_OPCODE }, + }, + { /* MOD_EVEX_0F16_PREFIX_0 */ - { VEX_W_TABLE (EVEX_W_0F16_P_0_M_0) }, + { "vmovhpX", { XMM, Vex, EXxmm_mq }, PREFIX_OPCODE }, { VEX_W_TABLE (EVEX_W_0F16_P_0_M_1) }, }, { + /* MOD_EVEX_0F16_PREFIX_2 */ + { "vmovhpX", { XMM, Vex, EXxmm_mq }, PREFIX_OPCODE }, + }, + { + /* MOD_EVEX_0F17 */ + { "vmovhpX", { EXxmm_mq, XMM }, PREFIX_OPCODE }, + }, + { + /* MOD_EVEX_0F2B */ + { "vmovntpX", { EXx, XM }, PREFIX_OPCODE }, + }, + /* MOD_EVEX_0F381A_W_0 */ + { + { EVEX_LEN_TABLE (EVEX_LEN_0F381A_W_0_M_0) }, + }, + /* MOD_EVEX_0F381A_W_1 */ + { + { EVEX_LEN_TABLE (EVEX_LEN_0F381A_W_1_M_0) }, + }, + /* MOD_EVEX_0F381B_W_0 */ + { + { EVEX_LEN_TABLE (EVEX_LEN_0F381B_W_0_M_0) }, + }, + /* MOD_EVEX_0F381B_W_1 */ + { + { EVEX_LEN_TABLE (EVEX_LEN_0F381B_W_1_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_W_0 */ + { + { EVEX_LEN_TABLE (EVEX_LEN_0F385A_W_0_M_0) }, + }, + /* MOD_EVEX_0F385A_W_1 */ + { + { EVEX_LEN_TABLE (EVEX_LEN_0F385A_W_1_M_0) }, + }, + /* MOD_EVEX_0F385B_W_0 */ + { + { EVEX_LEN_TABLE (EVEX_LEN_0F385B_W_0_M_0) }, + }, + /* MOD_EVEX_0F385B_W_1 */ + { + { EVEX_LEN_TABLE (EVEX_LEN_0F385B_W_1_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_REG_1 */ - { PREFIX_TABLE (PREFIX_EVEX_0F38C6_REG_1) }, + { EVEX_LEN_TABLE (EVEX_LEN_0F38C6_R_1_M_0) }, }, { /* MOD_EVEX_0F38C6_REG_2 */ - { PREFIX_TABLE (PREFIX_EVEX_0F38C6_REG_2) }, + { EVEX_LEN_TABLE (EVEX_LEN_0F38C6_R_2_M_0) }, }, { /* MOD_EVEX_0F38C6_REG_5 */ - { PREFIX_TABLE (PREFIX_EVEX_0F38C6_REG_5) }, + { EVEX_LEN_TABLE (EVEX_LEN_0F38C6_R_5_M_0) }, }, { /* MOD_EVEX_0F38C6_REG_6 */ - { PREFIX_TABLE (PREFIX_EVEX_0F38C6_REG_6) }, + { EVEX_LEN_TABLE (EVEX_LEN_0F38C6_R_6_M_0) }, }, { /* MOD_EVEX_0F38C7_REG_1 */ - { PREFIX_TABLE (PREFIX_EVEX_0F38C7_REG_1) }, + { VEX_W_TABLE (EVEX_W_0F38C7_R_1_M_0) }, }, { /* MOD_EVEX_0F38C7_REG_2 */ - { PREFIX_TABLE (PREFIX_EVEX_0F38C7_REG_2) }, + { VEX_W_TABLE (EVEX_W_0F38C7_R_2_M_0) }, }, { /* MOD_EVEX_0F38C7_REG_5 */ - { PREFIX_TABLE (PREFIX_EVEX_0F38C7_REG_5) }, + { VEX_W_TABLE (EVEX_W_0F38C7_R_5_M_0) }, }, { /* MOD_EVEX_0F38C7_REG_6 */ - { PREFIX_TABLE (PREFIX_EVEX_0F38C7_REG_6) }, + { VEX_W_TABLE (EVEX_W_0F38C7_R_6_M_0) }, }, diff -Nru gdb-9.1/opcodes/i386-dis-evex-prefix.h gdb-10.2/opcodes/i386-dis-evex-prefix.h --- gdb-9.1/opcodes/i386-dis-evex-prefix.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/i386-dis-evex-prefix.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,148 +1,56 @@ /* PREFIX_EVEX_0F10 */ { - { VEX_W_TABLE (EVEX_W_0F10_P_0) }, + { "vmovupX", { XM, EXEvexXNoBcst }, PREFIX_OPCODE }, { VEX_W_TABLE (EVEX_W_0F10_P_1) }, - { VEX_W_TABLE (EVEX_W_0F10_P_2) }, + { "vmovupX", { XM, EXEvexXNoBcst }, PREFIX_OPCODE }, { VEX_W_TABLE (EVEX_W_0F10_P_3) }, }, /* PREFIX_EVEX_0F11 */ { - { VEX_W_TABLE (EVEX_W_0F11_P_0) }, + { "vmovupX", { EXxS, XM }, PREFIX_OPCODE }, { VEX_W_TABLE (EVEX_W_0F11_P_1) }, - { VEX_W_TABLE (EVEX_W_0F11_P_2) }, + { "vmovupX", { EXxS, XM }, PREFIX_OPCODE }, { VEX_W_TABLE (EVEX_W_0F11_P_3) }, }, /* PREFIX_EVEX_0F12 */ { { MOD_TABLE (MOD_EVEX_0F12_PREFIX_0) }, { VEX_W_TABLE (EVEX_W_0F12_P_1) }, - { VEX_W_TABLE (EVEX_W_0F12_P_2) }, + { MOD_TABLE (MOD_EVEX_0F12_PREFIX_2) }, { VEX_W_TABLE (EVEX_W_0F12_P_3) }, }, - /* PREFIX_EVEX_0F13 */ - { - { VEX_W_TABLE (EVEX_W_0F13_P_0) }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F13_P_2) }, - }, - /* PREFIX_EVEX_0F14 */ - { - { VEX_W_TABLE (EVEX_W_0F14_P_0) }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F14_P_2) }, - }, - /* PREFIX_EVEX_0F15 */ - { - { VEX_W_TABLE (EVEX_W_0F15_P_0) }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F15_P_2) }, - }, /* PREFIX_EVEX_0F16 */ { { MOD_TABLE (MOD_EVEX_0F16_PREFIX_0) }, { VEX_W_TABLE (EVEX_W_0F16_P_1) }, - { VEX_W_TABLE (EVEX_W_0F16_P_2) }, - }, - /* PREFIX_EVEX_0F17 */ - { - { VEX_W_TABLE (EVEX_W_0F17_P_0) }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F17_P_2) }, - }, - /* PREFIX_EVEX_0F28 */ - { - { VEX_W_TABLE (EVEX_W_0F28_P_0) }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F28_P_2) }, - }, - /* PREFIX_EVEX_0F29 */ - { - { VEX_W_TABLE (EVEX_W_0F29_P_0) }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F29_P_2) }, + { MOD_TABLE (MOD_EVEX_0F16_PREFIX_2) }, }, /* PREFIX_EVEX_0F2A */ { { Bad_Opcode }, - { "vcvtsi2ss%LQ", { XMScalar, VexScalar, EXxEVexR, Edq }, 0 }, + { "vcvtsi2ss{%LQ|}", { XMScalar, VexScalar, EXxEVexR, Edq }, 0 }, { Bad_Opcode }, { VEX_W_TABLE (EVEX_W_0F2A_P_3) }, }, - /* PREFIX_EVEX_0F2B */ - { - { VEX_W_TABLE (EVEX_W_0F2B_P_0) }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F2B_P_2) }, - }, - /* PREFIX_EVEX_0F2C */ - { - { Bad_Opcode }, - { "vcvttss2si", { Gdq, EXxmm_md, EXxEVexS }, 0 }, - { Bad_Opcode }, - { "vcvttsd2si", { Gdq, EXxmm_mq, EXxEVexS }, 0 }, - }, - /* PREFIX_EVEX_0F2D */ - { - { Bad_Opcode }, - { "vcvtss2si", { Gdq, EXxmm_md, EXxEVexR }, 0 }, - { Bad_Opcode }, - { "vcvtsd2si", { Gdq, EXxmm_mq, EXxEVexR }, 0 }, - }, - /* PREFIX_EVEX_0F2E */ - { - { VEX_W_TABLE (EVEX_W_0F2E_P_0) }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F2E_P_2) }, - }, - /* PREFIX_EVEX_0F2F */ - { - { VEX_W_TABLE (EVEX_W_0F2F_P_0) }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F2F_P_2) }, - }, /* PREFIX_EVEX_0F51 */ { - { VEX_W_TABLE (EVEX_W_0F51_P_0) }, + { "vsqrtpX", { XM, EXx, EXxEVexR }, PREFIX_OPCODE }, { VEX_W_TABLE (EVEX_W_0F51_P_1) }, - { VEX_W_TABLE (EVEX_W_0F51_P_2) }, + { "vsqrtpX", { XM, EXx, EXxEVexR }, PREFIX_OPCODE }, { VEX_W_TABLE (EVEX_W_0F51_P_3) }, }, - /* PREFIX_EVEX_0F54 */ - { - { VEX_W_TABLE (EVEX_W_0F54_P_0) }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F54_P_2) }, - }, - /* PREFIX_EVEX_0F55 */ - { - { VEX_W_TABLE (EVEX_W_0F55_P_0) }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F55_P_2) }, - }, - /* PREFIX_EVEX_0F56 */ - { - { VEX_W_TABLE (EVEX_W_0F56_P_0) }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F56_P_2) }, - }, - /* PREFIX_EVEX_0F57 */ - { - { VEX_W_TABLE (EVEX_W_0F57_P_0) }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F57_P_2) }, - }, /* PREFIX_EVEX_0F58 */ { - { VEX_W_TABLE (EVEX_W_0F58_P_0) }, + { "vaddpX", { XM, Vex, EXx, EXxEVexR }, PREFIX_OPCODE }, { VEX_W_TABLE (EVEX_W_0F58_P_1) }, - { VEX_W_TABLE (EVEX_W_0F58_P_2) }, + { "vaddpX", { XM, Vex, EXx, EXxEVexR }, PREFIX_OPCODE }, { VEX_W_TABLE (EVEX_W_0F58_P_3) }, }, /* PREFIX_EVEX_0F59 */ { - { VEX_W_TABLE (EVEX_W_0F59_P_0) }, + { "vmulpX", { XM, Vex, EXx, EXxEVexR }, PREFIX_OPCODE }, { VEX_W_TABLE (EVEX_W_0F59_P_1) }, - { VEX_W_TABLE (EVEX_W_0F59_P_2) }, + { "vmulpX", { XM, Vex, EXx, EXxEVexR }, PREFIX_OPCODE }, { VEX_W_TABLE (EVEX_W_0F59_P_3) }, }, /* PREFIX_EVEX_0F5A */ @@ -160,1810 +68,310 @@ }, /* PREFIX_EVEX_0F5C */ { - { VEX_W_TABLE (EVEX_W_0F5C_P_0) }, + { "vsubpX", { XM, Vex, EXx, EXxEVexR }, PREFIX_OPCODE }, { VEX_W_TABLE (EVEX_W_0F5C_P_1) }, - { VEX_W_TABLE (EVEX_W_0F5C_P_2) }, + { "vsubpX", { XM, Vex, EXx, EXxEVexR }, PREFIX_OPCODE }, { VEX_W_TABLE (EVEX_W_0F5C_P_3) }, }, /* PREFIX_EVEX_0F5D */ { - { VEX_W_TABLE (EVEX_W_0F5D_P_0) }, + { "vminpX", { XM, Vex, EXx, EXxEVexS }, PREFIX_OPCODE }, { VEX_W_TABLE (EVEX_W_0F5D_P_1) }, - { VEX_W_TABLE (EVEX_W_0F5D_P_2) }, + { "vminpX", { XM, Vex, EXx, EXxEVexS }, PREFIX_OPCODE }, { VEX_W_TABLE (EVEX_W_0F5D_P_3) }, }, /* PREFIX_EVEX_0F5E */ { - { VEX_W_TABLE (EVEX_W_0F5E_P_0) }, + { "vdivpX", { XM, Vex, EXx, EXxEVexR }, PREFIX_OPCODE }, { VEX_W_TABLE (EVEX_W_0F5E_P_1) }, - { VEX_W_TABLE (EVEX_W_0F5E_P_2) }, + { "vdivpX", { XM, Vex, EXx, EXxEVexR }, PREFIX_OPCODE }, { VEX_W_TABLE (EVEX_W_0F5E_P_3) }, }, /* PREFIX_EVEX_0F5F */ { - { VEX_W_TABLE (EVEX_W_0F5F_P_0) }, + { "vmaxpX", { XM, Vex, EXx, EXxEVexS }, PREFIX_OPCODE }, { VEX_W_TABLE (EVEX_W_0F5F_P_1) }, - { VEX_W_TABLE (EVEX_W_0F5F_P_2) }, + { "vmaxpX", { XM, Vex, EXx, EXxEVexS }, PREFIX_OPCODE }, { VEX_W_TABLE (EVEX_W_0F5F_P_3) }, }, - /* PREFIX_EVEX_0F60 */ + /* PREFIX_EVEX_0F6F */ { { Bad_Opcode }, - { Bad_Opcode }, - { "vpunpcklbw", { XM, Vex, EXx }, 0 }, + { VEX_W_TABLE (EVEX_W_0F6F_P_1) }, + { VEX_W_TABLE (EVEX_W_0F6F_P_2) }, + { VEX_W_TABLE (EVEX_W_0F6F_P_3) }, }, - /* PREFIX_EVEX_0F61 */ + /* PREFIX_EVEX_0F70 */ { { Bad_Opcode }, - { Bad_Opcode }, - { "vpunpcklwd", { XM, Vex, EXx }, 0 }, + { "vpshufhw", { XM, EXx, Ib }, 0 }, + { VEX_W_TABLE (EVEX_W_0F70_P_2) }, + { "vpshuflw", { XM, EXx, Ib }, 0 }, }, - /* PREFIX_EVEX_0F62 */ + /* PREFIX_EVEX_0F78 */ { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F62_P_2) }, + { VEX_W_TABLE (EVEX_W_0F78_P_0) }, + { "vcvttss2usi", { Gdq, EXxmm_md, EXxEVexS }, 0 }, + { VEX_W_TABLE (EVEX_W_0F78_P_2) }, + { "vcvttsd2usi", { Gdq, EXxmm_mq, EXxEVexS }, 0 }, }, - /* PREFIX_EVEX_0F63 */ + /* PREFIX_EVEX_0F79 */ { - { Bad_Opcode }, - { Bad_Opcode }, - { "vpacksswb", { XM, Vex, EXx }, 0 }, + { VEX_W_TABLE (EVEX_W_0F79_P_0) }, + { "vcvtss2usi", { Gdq, EXxmm_md, EXxEVexR }, 0 }, + { VEX_W_TABLE (EVEX_W_0F79_P_2) }, + { "vcvtsd2usi", { Gdq, EXxmm_mq, EXxEVexR }, 0 }, }, - /* PREFIX_EVEX_0F64 */ + /* PREFIX_EVEX_0F7A */ { { Bad_Opcode }, - { Bad_Opcode }, - { "vpcmpgtb", { XMask, Vex, EXx }, 0 }, + { VEX_W_TABLE (EVEX_W_0F7A_P_1) }, + { VEX_W_TABLE (EVEX_W_0F7A_P_2) }, + { VEX_W_TABLE (EVEX_W_0F7A_P_3) }, }, - /* PREFIX_EVEX_0F65 */ + /* PREFIX_EVEX_0F7B */ { { Bad_Opcode }, - { Bad_Opcode }, - { "vpcmpgtw", { XMask, Vex, EXx }, 0 }, + { "vcvtusi2ss{%LQ|}", { XMScalar, VexScalar, EXxEVexR, Edq }, 0 }, + { VEX_W_TABLE (EVEX_W_0F7B_P_2) }, + { VEX_W_TABLE (EVEX_W_0F7B_P_3) }, }, - /* PREFIX_EVEX_0F66 */ + /* PREFIX_EVEX_0F7E */ { { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F66_P_2) }, + { EVEX_LEN_TABLE (EVEX_LEN_0F7E_P_1) }, + { EVEX_LEN_TABLE (EVEX_LEN_0F7E_P_2) }, }, - /* PREFIX_EVEX_0F67 */ + /* PREFIX_EVEX_0F7F */ { { Bad_Opcode }, - { Bad_Opcode }, - { "vpackuswb", { XM, Vex, EXx }, 0 }, + { VEX_W_TABLE (EVEX_W_0F7F_P_1) }, + { VEX_W_TABLE (EVEX_W_0F7F_P_2) }, + { VEX_W_TABLE (EVEX_W_0F7F_P_3) }, }, - /* PREFIX_EVEX_0F68 */ + /* PREFIX_EVEX_0FC2 */ { - { Bad_Opcode }, - { Bad_Opcode }, - { "vpunpckhbw", { XM, Vex, EXx }, 0 }, + { "vcmppX", { XMask, Vex, EXx, EXxEVexS, CMP }, PREFIX_OPCODE }, + { VEX_W_TABLE (EVEX_W_0FC2_P_1) }, + { "vcmppX", { XMask, Vex, EXx, EXxEVexS, CMP }, PREFIX_OPCODE }, + { VEX_W_TABLE (EVEX_W_0FC2_P_3) }, }, - /* PREFIX_EVEX_0F69 */ + /* PREFIX_EVEX_0FE6 */ { { Bad_Opcode }, - { Bad_Opcode }, - { "vpunpckhwd", { XM, Vex, EXx }, 0 }, + { VEX_W_TABLE (EVEX_W_0FE6_P_1) }, + { VEX_W_TABLE (EVEX_W_0FE6_P_2) }, + { VEX_W_TABLE (EVEX_W_0FE6_P_3) }, }, - /* PREFIX_EVEX_0F6A */ + /* PREFIX_EVEX_0F3810 */ { { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F6A_P_2) }, + { VEX_W_TABLE (EVEX_W_0F3810_P_1) }, + { VEX_W_TABLE (EVEX_W_0F3810_P_2) }, }, - /* PREFIX_EVEX_0F6B */ + /* PREFIX_EVEX_0F3811 */ { { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F6B_P_2) }, + { VEX_W_TABLE (EVEX_W_0F3811_P_1) }, + { VEX_W_TABLE (EVEX_W_0F3811_P_2) }, }, - /* PREFIX_EVEX_0F6C */ + /* PREFIX_EVEX_0F3812 */ { { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F6C_P_2) }, + { VEX_W_TABLE (EVEX_W_0F3812_P_1) }, + { VEX_W_TABLE (EVEX_W_0F3812_P_2) }, }, - /* PREFIX_EVEX_0F6D */ + /* PREFIX_EVEX_0F3813 */ { { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F6D_P_2) }, + { VEX_W_TABLE (EVEX_W_0F3813_P_1) }, + { VEX_W_TABLE (EVEX_W_0F3813_P_2) }, }, - /* PREFIX_EVEX_0F6E */ + /* PREFIX_EVEX_0F3814 */ { { Bad_Opcode }, - { Bad_Opcode }, - { EVEX_LEN_TABLE (EVEX_LEN_0F6E_P_2) }, + { VEX_W_TABLE (EVEX_W_0F3814_P_1) }, + { "vprorv%DQ", { XM, Vex, EXx }, 0 }, }, - /* PREFIX_EVEX_0F6F */ + /* PREFIX_EVEX_0F3815 */ { { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F6F_P_1) }, - { VEX_W_TABLE (EVEX_W_0F6F_P_2) }, - { VEX_W_TABLE (EVEX_W_0F6F_P_3) }, + { VEX_W_TABLE (EVEX_W_0F3815_P_1) }, + { "vprolv%DQ", { XM, Vex, EXx }, 0 }, }, - /* PREFIX_EVEX_0F70 */ + /* PREFIX_EVEX_0F3820 */ { { Bad_Opcode }, - { "vpshufhw", { XM, EXx, Ib }, 0 }, - { VEX_W_TABLE (EVEX_W_0F70_P_2) }, - { "vpshuflw", { XM, EXx, Ib }, 0 }, + { VEX_W_TABLE (EVEX_W_0F3820_P_1) }, + { "vpmovsxbw", { XM, EXxmmq }, 0 }, }, - /* PREFIX_EVEX_0F71_REG_2 */ + /* PREFIX_EVEX_0F3821 */ { { Bad_Opcode }, - { Bad_Opcode }, - { "vpsrlw", { Vex, EXx, Ib }, 0 }, + { VEX_W_TABLE (EVEX_W_0F3821_P_1) }, + { "vpmovsxbd", { XM, EXxmmqd }, 0 }, }, - /* PREFIX_EVEX_0F71_REG_4 */ + /* PREFIX_EVEX_0F3822 */ { { Bad_Opcode }, - { Bad_Opcode }, - { "vpsraw", { Vex, EXx, Ib }, 0 }, + { VEX_W_TABLE (EVEX_W_0F3822_P_1) }, + { "vpmovsxbq", { XM, EXxmmdw }, 0 }, }, - /* PREFIX_EVEX_0F71_REG_6 */ + /* PREFIX_EVEX_0F3823 */ { { Bad_Opcode }, - { Bad_Opcode }, - { "vpsllw", { Vex, EXx, Ib }, 0 }, + { VEX_W_TABLE (EVEX_W_0F3823_P_1) }, + { "vpmovsxwd", { XM, EXxmmq }, 0 }, }, - /* PREFIX_EVEX_0F72_REG_0 */ + /* PREFIX_EVEX_0F3824 */ { { Bad_Opcode }, - { Bad_Opcode }, - { "vpror%LW", { Vex, EXx, Ib }, 0 }, + { VEX_W_TABLE (EVEX_W_0F3824_P_1) }, + { "vpmovsxwq", { XM, EXxmmqd }, 0 }, }, - /* PREFIX_EVEX_0F72_REG_1 */ + /* PREFIX_EVEX_0F3825 */ { { Bad_Opcode }, - { Bad_Opcode }, - { "vprol%LW", { Vex, EXx, Ib }, 0 }, + { VEX_W_TABLE (EVEX_W_0F3825_P_1) }, + { VEX_W_TABLE (EVEX_W_0F3825_P_2) }, }, - /* PREFIX_EVEX_0F72_REG_2 */ + /* PREFIX_EVEX_0F3826 */ { { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F72_R_2_P_2) }, + { "vptestnm%BW", { XMask, Vex, EXx }, 0 }, + { "vptestm%BW", { XMask, Vex, EXx }, 0 }, }, - /* PREFIX_EVEX_0F72_REG_4 */ + /* PREFIX_EVEX_0F3827 */ { { Bad_Opcode }, - { Bad_Opcode }, - { "vpsra%LW", { Vex, EXx, Ib }, 0 }, + { "vptestnm%DQ", { XMask, Vex, EXx }, 0 }, + { "vptestm%DQ", { XMask, Vex, EXx }, 0 }, }, - /* PREFIX_EVEX_0F72_REG_6 */ + /* PREFIX_EVEX_0F3828 */ { { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F72_R_6_P_2) }, + { MOD_TABLE (MOD_EVEX_0F3828_P_1) }, + { VEX_W_TABLE (EVEX_W_0F3828_P_2) }, }, - /* PREFIX_EVEX_0F73_REG_2 */ + /* PREFIX_EVEX_0F3829 */ { { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F73_R_2_P_2) }, + { "vpmov%BW2m", { XMask, EXx }, 0 }, + { VEX_W_TABLE (EVEX_W_0F3829_P_2) }, }, - /* PREFIX_EVEX_0F73_REG_3 */ + /* PREFIX_EVEX_0F382A */ { { Bad_Opcode }, - { Bad_Opcode }, - { "vpsrldq", { Vex, EXx, Ib }, 0 }, + { VEX_W_TABLE (EVEX_W_0F382A_P_1) }, + { VEX_W_TABLE (EVEX_W_0F382A_P_2) }, }, - /* PREFIX_EVEX_0F73_REG_6 */ + /* PREFIX_EVEX_0F3830 */ { { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F73_R_6_P_2) }, + { VEX_W_TABLE (EVEX_W_0F3830_P_1) }, + { "vpmovzxbw", { XM, EXxmmq }, 0 }, }, - /* PREFIX_EVEX_0F73_REG_7 */ + /* PREFIX_EVEX_0F3831 */ { { Bad_Opcode }, - { Bad_Opcode }, - { "vpslldq", { Vex, EXx, Ib }, 0 }, + { VEX_W_TABLE (EVEX_W_0F3831_P_1) }, + { "vpmovzxbd", { XM, EXxmmqd }, 0 }, }, - /* PREFIX_EVEX_0F74 */ + /* PREFIX_EVEX_0F3832 */ { { Bad_Opcode }, - { Bad_Opcode }, - { "vpcmpeqb", { XMask, Vex, EXx }, 0 }, + { VEX_W_TABLE (EVEX_W_0F3832_P_1) }, + { "vpmovzxbq", { XM, EXxmmdw }, 0 }, }, - /* PREFIX_EVEX_0F75 */ + /* PREFIX_EVEX_0F3833 */ { { Bad_Opcode }, - { Bad_Opcode }, - { "vpcmpeqw", { XMask, Vex, EXx }, 0 }, + { VEX_W_TABLE (EVEX_W_0F3833_P_1) }, + { "vpmovzxwd", { XM, EXxmmq }, 0 }, }, - /* PREFIX_EVEX_0F76 */ + /* PREFIX_EVEX_0F3834 */ { { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F76_P_2) }, - }, - /* PREFIX_EVEX_0F78 */ - { - { VEX_W_TABLE (EVEX_W_0F78_P_0) }, - { "vcvttss2usi", { Gdq, EXxmm_md, EXxEVexS }, 0 }, - { VEX_W_TABLE (EVEX_W_0F78_P_2) }, - { "vcvttsd2usi", { Gdq, EXxmm_mq, EXxEVexS }, 0 }, - }, - /* PREFIX_EVEX_0F79 */ - { - { VEX_W_TABLE (EVEX_W_0F79_P_0) }, - { "vcvtss2usi", { Gdq, EXxmm_md, EXxEVexR }, 0 }, - { VEX_W_TABLE (EVEX_W_0F79_P_2) }, - { "vcvtsd2usi", { Gdq, EXxmm_mq, EXxEVexR }, 0 }, + { VEX_W_TABLE (EVEX_W_0F3834_P_1) }, + { "vpmovzxwq", { XM, EXxmmqd }, 0 }, }, - /* PREFIX_EVEX_0F7A */ + /* PREFIX_EVEX_0F3835 */ { { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F7A_P_1) }, - { VEX_W_TABLE (EVEX_W_0F7A_P_2) }, - { VEX_W_TABLE (EVEX_W_0F7A_P_3) }, + { VEX_W_TABLE (EVEX_W_0F3835_P_1) }, + { VEX_W_TABLE (EVEX_W_0F3835_P_2) }, }, - /* PREFIX_EVEX_0F7B */ + /* PREFIX_EVEX_0F3838 */ { { Bad_Opcode }, - { "vcvtusi2ss%LQ", { XMScalar, VexScalar, EXxEVexR, Edq }, 0 }, - { VEX_W_TABLE (EVEX_W_0F7B_P_2) }, - { VEX_W_TABLE (EVEX_W_0F7B_P_3) }, + { MOD_TABLE (MOD_EVEX_0F3838_P_1) }, + { "vpminsb", { XM, Vex, EXx }, 0 }, }, - /* PREFIX_EVEX_0F7E */ + /* PREFIX_EVEX_0F3839 */ { { Bad_Opcode }, - { EVEX_LEN_TABLE (EVEX_LEN_0F7E_P_1) }, - { EVEX_LEN_TABLE (EVEX_LEN_0F7E_P_2) }, + { "vpmov%DQ2m", { XMask, EXx }, 0 }, + { "vpmins%DQ", { XM, Vex, EXx }, 0 }, }, - /* PREFIX_EVEX_0F7F */ + /* PREFIX_EVEX_0F383A */ { { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F7F_P_1) }, - { VEX_W_TABLE (EVEX_W_0F7F_P_2) }, - { VEX_W_TABLE (EVEX_W_0F7F_P_3) }, - }, - /* PREFIX_EVEX_0FC2 */ - { - { VEX_W_TABLE (EVEX_W_0FC2_P_0) }, - { VEX_W_TABLE (EVEX_W_0FC2_P_1) }, - { VEX_W_TABLE (EVEX_W_0FC2_P_2) }, - { VEX_W_TABLE (EVEX_W_0FC2_P_3) }, + { VEX_W_TABLE (EVEX_W_0F383A_P_1) }, + { "vpminuw", { XM, Vex, EXx }, 0 }, }, - /* PREFIX_EVEX_0FC4 */ + /* PREFIX_EVEX_0F3852 */ { { Bad_Opcode }, - { Bad_Opcode }, - { "vpinsrw", { XM, Vex128, Edw, Ib }, 0 }, + { VEX_W_TABLE (EVEX_W_0F3852_P_1) }, + { "vpdpwssd", { XM, Vex, EXx }, 0 }, + { "vp4dpwssd", { XM, Vex, EXxmm }, 0 }, }, - /* PREFIX_EVEX_0FC5 */ + /* PREFIX_EVEX_0F3853 */ { { Bad_Opcode }, { Bad_Opcode }, - { "vpextrw", { Gdq, XS, Ib }, 0 }, - }, - /* PREFIX_EVEX_0FC6 */ - { - { VEX_W_TABLE (EVEX_W_0FC6_P_0) }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0FC6_P_2) }, + { "vpdpwssds", { XM, Vex, EXx }, 0 }, + { "vp4dpwssds", { XM, Vex, EXxmm }, 0 }, }, - /* PREFIX_EVEX_0FD1 */ + /* PREFIX_EVEX_0F3868 */ { { Bad_Opcode }, { Bad_Opcode }, - { "vpsrlw", { XM, Vex, EXxmm }, 0 }, - }, - /* PREFIX_EVEX_0FD2 */ - { - { Bad_Opcode }, { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0FD2_P_2) }, + { "vp2intersect%DQ", { XMask, Vex, EXx, EXxEVexS }, 0 }, }, - /* PREFIX_EVEX_0FD3 */ + /* PREFIX_EVEX_0F3872 */ { { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0FD3_P_2) }, + { VEX_W_TABLE (EVEX_W_0F3872_P_1) }, + { VEX_W_TABLE (EVEX_W_0F3872_P_2) }, + { VEX_W_TABLE (EVEX_W_0F3872_P_3) }, }, - /* PREFIX_EVEX_0FD4 */ + /* PREFIX_EVEX_0F389A */ { { Bad_Opcode }, { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0FD4_P_2) }, + { "vfmsub132p%XW", { XM, Vex, EXx, EXxEVexR }, 0 }, + { "v4fmaddps", { XM, Vex, Mxmm }, 0 }, }, - /* PREFIX_EVEX_0FD5 */ + /* PREFIX_EVEX_0F389B */ { { Bad_Opcode }, { Bad_Opcode }, - { "vpmullw", { XM, Vex, EXx }, 0 }, + { "vfmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexR }, 0 }, + { "v4fmaddss", { XMScalar, VexScalar, Mxmm }, 0 }, }, - /* PREFIX_EVEX_0FD6 */ + /* PREFIX_EVEX_0F38AA */ { { Bad_Opcode }, { Bad_Opcode }, - { EVEX_LEN_TABLE (EVEX_LEN_0FD6_P_2) }, + { "vfmsub213p%XW", { XM, Vex, EXx, EXxEVexR }, 0 }, + { "v4fnmaddps", { XM, Vex, Mxmm }, 0 }, }, - /* PREFIX_EVEX_0FD8 */ + /* PREFIX_EVEX_0F38AB */ { { Bad_Opcode }, { Bad_Opcode }, - { "vpsubusb", { XM, Vex, EXx }, 0 }, - }, - /* PREFIX_EVEX_0FD9 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vpsubusw", { XM, Vex, EXx }, 0 }, - }, - /* PREFIX_EVEX_0FDA */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vpminub", { XM, Vex, EXx }, 0 }, - }, - /* PREFIX_EVEX_0FDB */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vpand%LW", { XM, Vex, EXx }, 0 }, - }, - /* PREFIX_EVEX_0FDC */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vpaddusb", { XM, Vex, EXx }, 0 }, - }, - /* PREFIX_EVEX_0FDD */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vpaddusw", { XM, Vex, EXx }, 0 }, - }, - /* PREFIX_EVEX_0FDE */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vpmaxub", { XM, Vex, EXx }, 0 }, - }, - /* PREFIX_EVEX_0FDF */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vpandn%LW", { XM, Vex, EXx }, 0 }, - }, - /* PREFIX_EVEX_0FE0 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vpavgb", { XM, Vex, EXx }, 0 }, - }, - /* PREFIX_EVEX_0FE1 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vpsraw", { XM, Vex, EXxmm }, 0 }, - }, - /* PREFIX_EVEX_0FE2 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vpsra%LW", { XM, Vex, EXxmm }, 0 }, - }, - /* PREFIX_EVEX_0FE3 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vpavgw", { XM, Vex, EXx }, 0 }, - }, - /* PREFIX_EVEX_0FE4 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vpmulhuw", { XM, Vex, EXx }, 0 }, - }, - /* PREFIX_EVEX_0FE5 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vpmulhw", { XM, Vex, EXx }, 0 }, - }, - /* PREFIX_EVEX_0FE6 */ - { - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0FE6_P_1) }, - { VEX_W_TABLE (EVEX_W_0FE6_P_2) }, - { VEX_W_TABLE (EVEX_W_0FE6_P_3) }, - }, - /* PREFIX_EVEX_0FE7 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0FE7_P_2) }, - }, - /* PREFIX_EVEX_0FE8 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vpsubsb", { XM, Vex, EXx }, 0 }, - }, - /* PREFIX_EVEX_0FE9 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vpsubsw", { XM, Vex, EXx }, 0 }, - }, - /* PREFIX_EVEX_0FEA */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vpminsw", { XM, Vex, EXx }, 0 }, - }, - /* PREFIX_EVEX_0FEB */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vpor%LW", { XM, Vex, EXx }, 0 }, - }, - /* PREFIX_EVEX_0FEC */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vpaddsb", { XM, Vex, EXx }, 0 }, - }, - /* PREFIX_EVEX_0FED */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vpaddsw", { XM, Vex, EXx }, 0 }, - }, - /* PREFIX_EVEX_0FEE */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vpmaxsw", { XM, Vex, EXx }, 0 }, - }, - /* PREFIX_EVEX_0FEF */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vpxor%LW", { XM, Vex, EXx }, 0 }, - }, - /* PREFIX_EVEX_0FF1 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vpsllw", { XM, Vex, EXxmm }, 0 }, - }, - /* PREFIX_EVEX_0FF2 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0FF2_P_2) }, - }, - /* PREFIX_EVEX_0FF3 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0FF3_P_2) }, - }, - /* PREFIX_EVEX_0FF4 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0FF4_P_2) }, - }, - /* PREFIX_EVEX_0FF5 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vpmaddwd", { XM, Vex, EXx }, 0 }, - }, - /* PREFIX_EVEX_0FF6 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vpsadbw", { XM, Vex, EXx }, 0 }, - }, - /* PREFIX_EVEX_0FF8 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vpsubb", { XM, Vex, EXx }, 0 }, - }, - /* PREFIX_EVEX_0FF9 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vpsubw", { XM, Vex, EXx }, 0 }, - }, - /* PREFIX_EVEX_0FFA */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0FFA_P_2) }, - }, - /* PREFIX_EVEX_0FFB */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0FFB_P_2) }, - }, - /* PREFIX_EVEX_0FFC */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vpaddb", { XM, Vex, EXx }, 0 }, - }, - /* PREFIX_EVEX_0FFD */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vpaddw", { XM, Vex, EXx }, 0 }, - }, - /* PREFIX_EVEX_0FFE */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0FFE_P_2) }, - }, - /* PREFIX_EVEX_0F3800 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vpshufb", { XM, Vex, EXx }, 0 }, - }, - /* PREFIX_EVEX_0F3804 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vpmaddubsw", { XM, Vex, EXx }, 0 }, - }, - /* PREFIX_EVEX_0F380B */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vpmulhrsw", { XM, Vex, EXx }, 0 }, - }, - /* PREFIX_EVEX_0F380C */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F380C_P_2) }, - }, - /* PREFIX_EVEX_0F380D */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F380D_P_2) }, - }, - /* PREFIX_EVEX_0F3810 */ - { - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3810_P_1) }, - { VEX_W_TABLE (EVEX_W_0F3810_P_2) }, - }, - /* PREFIX_EVEX_0F3811 */ - { - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3811_P_1) }, - { VEX_W_TABLE (EVEX_W_0F3811_P_2) }, - }, - /* PREFIX_EVEX_0F3812 */ - { - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3812_P_1) }, - { VEX_W_TABLE (EVEX_W_0F3812_P_2) }, - }, - /* PREFIX_EVEX_0F3813 */ - { - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3813_P_1) }, - { VEX_W_TABLE (EVEX_W_0F3813_P_2) }, - }, - /* PREFIX_EVEX_0F3814 */ - { - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3814_P_1) }, - { "vprorv%LW", { XM, Vex, EXx }, 0 }, - }, - /* PREFIX_EVEX_0F3815 */ - { - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3815_P_1) }, - { "vprolv%LW", { XM, Vex, EXx }, 0 }, - }, - /* PREFIX_EVEX_0F3816 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vpermp%XW", { XM, Vex, EXx }, 0 }, - }, - /* PREFIX_EVEX_0F3818 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3818_P_2) }, - }, - /* PREFIX_EVEX_0F3819 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3819_P_2) }, - }, - /* PREFIX_EVEX_0F381A */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F381A_P_2) }, - }, - /* PREFIX_EVEX_0F381B */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F381B_P_2) }, - }, - /* PREFIX_EVEX_0F381C */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vpabsb", { XM, EXx }, 0 }, - }, - /* PREFIX_EVEX_0F381D */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vpabsw", { XM, EXx }, 0 }, - }, - /* PREFIX_EVEX_0F381E */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F381E_P_2) }, - }, - /* PREFIX_EVEX_0F381F */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F381F_P_2) }, - }, - /* PREFIX_EVEX_0F3820 */ - { - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3820_P_1) }, - { "vpmovsxbw", { XM, EXxmmq }, 0 }, - }, - /* PREFIX_EVEX_0F3821 */ - { - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3821_P_1) }, - { "vpmovsxbd", { XM, EXxmmqd }, 0 }, - }, - /* PREFIX_EVEX_0F3822 */ - { - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3822_P_1) }, - { "vpmovsxbq", { XM, EXxmmdw }, 0 }, - }, - /* PREFIX_EVEX_0F3823 */ - { - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3823_P_1) }, - { "vpmovsxwd", { XM, EXxmmq }, 0 }, - }, - /* PREFIX_EVEX_0F3824 */ - { - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3824_P_1) }, - { "vpmovsxwq", { XM, EXxmmqd }, 0 }, - }, - /* PREFIX_EVEX_0F3825 */ - { - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3825_P_1) }, - { VEX_W_TABLE (EVEX_W_0F3825_P_2) }, - }, - /* PREFIX_EVEX_0F3826 */ - { - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3826_P_1) }, - { VEX_W_TABLE (EVEX_W_0F3826_P_2) }, - }, - /* PREFIX_EVEX_0F3827 */ - { - { Bad_Opcode }, - { "vptestnm%LW", { XMask, Vex, EXx }, 0 }, - { "vptestm%LW", { XMask, Vex, EXx }, 0 }, - }, - /* PREFIX_EVEX_0F3828 */ - { - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3828_P_1) }, - { VEX_W_TABLE (EVEX_W_0F3828_P_2) }, - }, - /* PREFIX_EVEX_0F3829 */ - { - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3829_P_1) }, - { VEX_W_TABLE (EVEX_W_0F3829_P_2) }, - }, - /* PREFIX_EVEX_0F382A */ - { - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F382A_P_1) }, - { VEX_W_TABLE (EVEX_W_0F382A_P_2) }, - }, - /* PREFIX_EVEX_0F382B */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F382B_P_2) }, - }, - /* PREFIX_EVEX_0F382C */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vscalefp%XW", { XM, Vex, EXx, EXxEVexR }, 0 }, - }, - /* PREFIX_EVEX_0F382D */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vscalefs%XW", { XMScalar, VexScalar, EXxmm_mdq, EXxEVexR }, 0 }, - }, - /* PREFIX_EVEX_0F3830 */ - { - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3830_P_1) }, - { "vpmovzxbw", { XM, EXxmmq }, 0 }, - }, - /* PREFIX_EVEX_0F3831 */ - { - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3831_P_1) }, - { "vpmovzxbd", { XM, EXxmmqd }, 0 }, - }, - /* PREFIX_EVEX_0F3832 */ - { - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3832_P_1) }, - { "vpmovzxbq", { XM, EXxmmdw }, 0 }, - }, - /* PREFIX_EVEX_0F3833 */ - { - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3833_P_1) }, - { "vpmovzxwd", { XM, EXxmmq }, 0 }, - }, - /* PREFIX_EVEX_0F3834 */ - { - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3834_P_1) }, - { "vpmovzxwq", { XM, EXxmmqd }, 0 }, - }, - /* PREFIX_EVEX_0F3835 */ - { - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3835_P_1) }, - { VEX_W_TABLE (EVEX_W_0F3835_P_2) }, - }, - /* PREFIX_EVEX_0F3836 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vperm%LW", { XM, Vex, EXx }, 0 }, - }, - /* PREFIX_EVEX_0F3837 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3837_P_2) }, - }, - /* PREFIX_EVEX_0F3838 */ - { - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3838_P_1) }, - { "vpminsb", { XM, Vex, EXx }, 0 }, - }, - /* PREFIX_EVEX_0F3839 */ - { - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3839_P_1) }, - { "vpmins%LW", { XM, Vex, EXx }, 0 }, - }, - /* PREFIX_EVEX_0F383A */ - { - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F383A_P_1) }, - { "vpminuw", { XM, Vex, EXx }, 0 }, - }, - /* PREFIX_EVEX_0F383B */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vpminu%LW", { XM, Vex, EXx }, 0 }, - }, - /* PREFIX_EVEX_0F383C */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vpmaxsb", { XM, Vex, EXx }, 0 }, - }, - /* PREFIX_EVEX_0F383D */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vpmaxs%LW", { XM, Vex, EXx }, 0 }, - }, - /* PREFIX_EVEX_0F383E */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vpmaxuw", { XM, Vex, EXx }, 0 }, - }, - /* PREFIX_EVEX_0F383F */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vpmaxu%LW", { XM, Vex, EXx }, 0 }, - }, - /* PREFIX_EVEX_0F3840 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3840_P_2) }, - }, - /* PREFIX_EVEX_0F3842 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vgetexpp%XW", { XM, EXx, EXxEVexS }, 0 }, - }, - /* PREFIX_EVEX_0F3843 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vgetexps%XW", { XMScalar, VexScalar, EXxmm_mdq, EXxEVexS }, 0 }, - }, - /* PREFIX_EVEX_0F3844 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vplzcnt%LW", { XM, EXx }, 0 }, - }, - /* PREFIX_EVEX_0F3845 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vpsrlv%LW", { XM, Vex, EXx }, 0 }, - }, - /* PREFIX_EVEX_0F3846 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vpsrav%LW", { XM, Vex, EXx }, 0 }, - }, - /* PREFIX_EVEX_0F3847 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vpsllv%LW", { XM, Vex, EXx }, 0 }, - }, - /* PREFIX_EVEX_0F384C */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vrcp14p%XW", { XM, EXx }, 0 }, - }, - /* PREFIX_EVEX_0F384D */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vrcp14s%XW", { XMScalar, VexScalar, EXxmm_mdq }, 0 }, - }, - /* PREFIX_EVEX_0F384E */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vrsqrt14p%XW", { XM, EXx }, 0 }, - }, - /* PREFIX_EVEX_0F384F */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vrsqrt14s%XW", { XMScalar, VexScalar, EXxmm_mdq }, 0 }, - }, - /* PREFIX_EVEX_0F3850 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vpdpbusd", { XM, Vex, EXx }, 0 }, - }, - /* PREFIX_EVEX_0F3851 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vpdpbusds", { XM, Vex, EXx }, 0 }, - }, - /* PREFIX_EVEX_0F3852 */ - { - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3852_P_1) }, - { "vpdpwssd", { XM, Vex, EXx }, 0 }, - { "vp4dpwssd", { XM, Vex, EXxmm }, 0 }, - }, - /* PREFIX_EVEX_0F3853 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vpdpwssds", { XM, Vex, EXx }, 0 }, - { "vp4dpwssds", { XM, Vex, EXxmm }, 0 }, - }, - /* PREFIX_EVEX_0F3854 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3854_P_2) }, - }, - /* PREFIX_EVEX_0F3855 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3855_P_2) }, - }, - /* PREFIX_EVEX_0F3858 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3858_P_2) }, - }, - /* PREFIX_EVEX_0F3859 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3859_P_2) }, - }, - /* PREFIX_EVEX_0F385A */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F385A_P_2) }, - }, - /* PREFIX_EVEX_0F385B */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F385B_P_2) }, - }, - /* PREFIX_EVEX_0F3862 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3862_P_2) }, - }, - /* PREFIX_EVEX_0F3863 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3863_P_2) }, - }, - /* PREFIX_EVEX_0F3864 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vpblendm%LW", { XM, Vex, EXx }, 0 }, - }, - /* PREFIX_EVEX_0F3865 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vblendmp%XW", { XM, Vex, EXx }, 0 }, - }, - /* PREFIX_EVEX_0F3866 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3866_P_2) }, - }, - /* PREFIX_EVEX_0F3868 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3868_P_3) }, - }, - /* PREFIX_EVEX_0F3870 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3870_P_2) }, - }, - /* PREFIX_EVEX_0F3871 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3871_P_2) }, - }, - /* PREFIX_EVEX_0F3872 */ - { - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3872_P_1) }, - { VEX_W_TABLE (EVEX_W_0F3872_P_2) }, - { VEX_W_TABLE (EVEX_W_0F3872_P_3) }, - }, - /* PREFIX_EVEX_0F3873 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3873_P_2) }, - }, - /* PREFIX_EVEX_0F3875 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3875_P_2) }, - }, - /* PREFIX_EVEX_0F3876 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vpermi2%LW", { XM, Vex, EXx }, 0 }, - }, - /* PREFIX_EVEX_0F3877 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vpermi2p%XW", { XM, Vex, EXx }, 0 }, - }, - /* PREFIX_EVEX_0F3878 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3878_P_2) }, - }, - /* PREFIX_EVEX_0F3879 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3879_P_2) }, - }, - /* PREFIX_EVEX_0F387A */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F387A_P_2) }, - }, - /* PREFIX_EVEX_0F387B */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F387B_P_2) }, - }, - /* PREFIX_EVEX_0F387C */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vpbroadcastK", { XM, Rdq }, 0 }, - }, - /* PREFIX_EVEX_0F387D */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F387D_P_2) }, - }, - /* PREFIX_EVEX_0F387E */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vpermt2%LW", { XM, Vex, EXx }, 0 }, - }, - /* PREFIX_EVEX_0F387F */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vpermt2p%XW", { XM, Vex, EXx }, 0 }, - }, - /* PREFIX_EVEX_0F3883 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3883_P_2) }, - }, - /* PREFIX_EVEX_0F3888 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vexpandp%XW", { XM, EXEvexXGscat }, 0 }, - }, - /* PREFIX_EVEX_0F3889 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vpexpand%LW", { XM, EXEvexXGscat }, 0 }, - }, - /* PREFIX_EVEX_0F388A */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vcompressp%XW", { EXEvexXGscat, XM }, 0 }, - }, - /* PREFIX_EVEX_0F388B */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vpcompress%LW", { EXEvexXGscat, XM }, 0 }, - }, - /* PREFIX_EVEX_0F388D */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F388D_P_2) }, - }, - /* PREFIX_EVEX_0F388F */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vpshufbitqmb", { XMask, Vex, EXx }, 0 }, - }, - /* PREFIX_EVEX_0F3890 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vpgatherd%LW", { XM, MVexVSIBDWpX }, 0 }, - }, - /* PREFIX_EVEX_0F3891 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3891_P_2) }, - }, - /* PREFIX_EVEX_0F3892 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vgatherdp%XW", { XM, MVexVSIBDWpX}, 0 }, - }, - /* PREFIX_EVEX_0F3893 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3893_P_2) }, - }, - /* PREFIX_EVEX_0F3896 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vfmaddsub132p%XW", { XM, Vex, EXx, EXxEVexR }, 0 }, - }, - /* PREFIX_EVEX_0F3897 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vfmsubadd132p%XW", { XM, Vex, EXx, EXxEVexR }, 0 }, - }, - /* PREFIX_EVEX_0F3898 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vfmadd132p%XW", { XM, Vex, EXx, EXxEVexR }, 0 }, - }, - /* PREFIX_EVEX_0F3899 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vfmadd132s%XW", { XMScalar, VexScalar, EXxmm_mdq, EXxEVexR }, 0 }, - }, - /* PREFIX_EVEX_0F389A */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vfmsub132p%XW", { XM, Vex, EXx, EXxEVexR }, 0 }, - { "v4fmaddps", { XM, Vex, Mxmm }, 0 }, - }, - /* PREFIX_EVEX_0F389B */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vfmsub132s%XW", { XMScalar, VexScalar, EXxmm_mdq, EXxEVexR }, 0 }, - { "v4fmaddss", { XMScalar, VexScalar, Mxmm }, 0 }, - }, - /* PREFIX_EVEX_0F389C */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vfnmadd132p%XW", { XM, Vex, EXx, EXxEVexR }, 0 }, - }, - /* PREFIX_EVEX_0F389D */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vfnmadd132s%XW", { XMScalar, VexScalar, EXxmm_mdq, EXxEVexR }, 0 }, - }, - /* PREFIX_EVEX_0F389E */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vfnmsub132p%XW", { XM, Vex, EXx, EXxEVexR }, 0 }, - }, - /* PREFIX_EVEX_0F389F */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vfnmsub132s%XW", { XMScalar, VexScalar, EXxmm_mdq, EXxEVexR }, 0 }, - }, - /* PREFIX_EVEX_0F38A0 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vpscatterd%LW", { MVexVSIBDWpX, XM }, 0 }, - }, - /* PREFIX_EVEX_0F38A1 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F38A1_P_2) }, - }, - /* PREFIX_EVEX_0F38A2 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vscatterdp%XW", { MVexVSIBDWpX, XM }, 0 }, - }, - /* PREFIX_EVEX_0F38A3 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F38A3_P_2) }, - }, - /* PREFIX_EVEX_0F38A6 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vfmaddsub213p%XW", { XM, Vex, EXx, EXxEVexR }, 0 }, - }, - /* PREFIX_EVEX_0F38A7 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vfmsubadd213p%XW", { XM, Vex, EXx, EXxEVexR }, 0 }, - }, - /* PREFIX_EVEX_0F38A8 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vfmadd213p%XW", { XM, Vex, EXx, EXxEVexR }, 0 }, - }, - /* PREFIX_EVEX_0F38A9 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vfmadd213s%XW", { XMScalar, VexScalar, EXxmm_mdq, EXxEVexR }, 0 }, - }, - /* PREFIX_EVEX_0F38AA */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vfmsub213p%XW", { XM, Vex, EXx, EXxEVexR }, 0 }, - { "v4fnmaddps", { XM, Vex, Mxmm }, 0 }, - }, - /* PREFIX_EVEX_0F38AB */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vfmsub213s%XW", { XMScalar, VexScalar, EXxmm_mdq, EXxEVexR }, 0 }, - { "v4fnmaddss", { XMScalar, VexScalar, Mxmm }, 0 }, - }, - /* PREFIX_EVEX_0F38AC */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vfnmadd213p%XW", { XM, Vex, EXx, EXxEVexR }, 0 }, - }, - /* PREFIX_EVEX_0F38AD */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vfnmadd213s%XW", { XMScalar, VexScalar, EXxmm_mdq, EXxEVexR }, 0 }, - }, - /* PREFIX_EVEX_0F38AE */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vfnmsub213p%XW", { XM, Vex, EXx, EXxEVexR }, 0 }, - }, - /* PREFIX_EVEX_0F38AF */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vfnmsub213s%XW", { XMScalar, VexScalar, EXxmm_mdq, EXxEVexR }, 0 }, - }, - /* PREFIX_EVEX_0F38B4 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vpmadd52luq", { XM, Vex, EXx }, 0 }, - }, - /* PREFIX_EVEX_0F38B5 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vpmadd52huq", { XM, Vex, EXx }, 0 }, - }, - /* PREFIX_EVEX_0F38B6 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vfmaddsub231p%XW", { XM, Vex, EXx, EXxEVexR }, 0 }, - }, - /* PREFIX_EVEX_0F38B7 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vfmsubadd231p%XW", { XM, Vex, EXx, EXxEVexR }, 0 }, - }, - /* PREFIX_EVEX_0F38B8 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vfmadd231p%XW", { XM, Vex, EXx, EXxEVexR }, 0 }, - }, - /* PREFIX_EVEX_0F38B9 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vfmadd231s%XW", { XMScalar, VexScalar, EXxmm_mdq, EXxEVexR }, 0 }, - }, - /* PREFIX_EVEX_0F38BA */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vfmsub231p%XW", { XM, Vex, EXx, EXxEVexR }, 0 }, - }, - /* PREFIX_EVEX_0F38BB */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vfmsub231s%XW", { XMScalar, VexScalar, EXxmm_mdq, EXxEVexR }, 0 }, - }, - /* PREFIX_EVEX_0F38BC */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vfnmadd231p%XW", { XM, Vex, EXx, EXxEVexR }, 0 }, - }, - /* PREFIX_EVEX_0F38BD */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vfnmadd231s%XW", { XMScalar, VexScalar, EXxmm_mdq, EXxEVexR }, 0 }, - }, - /* PREFIX_EVEX_0F38BE */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vfnmsub231p%XW", { XM, Vex, EXx, EXxEVexR }, 0 }, - }, - /* PREFIX_EVEX_0F38BF */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vfnmsub231s%XW", { XMScalar, VexScalar, EXxmm_mdq, EXxEVexR }, 0 }, - }, - /* PREFIX_EVEX_0F38C4 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vpconflict%LW", { XM, EXx }, 0 }, - }, - /* PREFIX_EVEX_0F38C6_REG_1 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { EVEX_LEN_TABLE (EVEX_LEN_0F38C6_REG_1_PREFIX_2) }, - }, - /* PREFIX_EVEX_0F38C6_REG_2 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { EVEX_LEN_TABLE (EVEX_LEN_0F38C6_REG_2_PREFIX_2) }, - }, - /* PREFIX_EVEX_0F38C6_REG_5 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { EVEX_LEN_TABLE (EVEX_LEN_0F38C6_REG_5_PREFIX_2) }, - }, - /* PREFIX_EVEX_0F38C6_REG_6 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { EVEX_LEN_TABLE (EVEX_LEN_0F38C6_REG_6_PREFIX_2) }, - }, - /* PREFIX_EVEX_0F38C7_REG_1 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F38C7_R_1_P_2) }, - }, - /* PREFIX_EVEX_0F38C7_REG_2 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F38C7_R_2_P_2) }, - }, - /* PREFIX_EVEX_0F38C7_REG_5 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F38C7_R_5_P_2) }, - }, - /* PREFIX_EVEX_0F38C7_REG_6 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F38C7_R_6_P_2) }, - }, - /* PREFIX_EVEX_0F38C8 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vexp2p%XW", { XM, EXx, EXxEVexS }, 0 }, - }, - /* PREFIX_EVEX_0F38CA */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vrcp28p%XW", { XM, EXx, EXxEVexS }, 0 }, - }, - /* PREFIX_EVEX_0F38CB */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vrcp28s%XW", { XMScalar, VexScalar, EXxmm_mdq, EXxEVexS }, 0 }, - }, - /* PREFIX_EVEX_0F38CC */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vrsqrt28p%XW", { XM, EXx, EXxEVexS }, 0 }, - }, - /* PREFIX_EVEX_0F38CD */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vrsqrt28s%XW", { XMScalar, VexScalar, EXxmm_mdq, EXxEVexS }, 0 }, - }, - /* PREFIX_EVEX_0F38CF */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vgf2p8mulb", { XM, Vex, EXx }, 0 }, - }, - /* PREFIX_EVEX_0F38DC */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vaesenc", { XM, Vex, EXx }, 0 }, - }, - /* PREFIX_EVEX_0F38DD */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vaesenclast", { XM, Vex, EXx }, 0 }, - }, - /* PREFIX_EVEX_0F38DE */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vaesdec", { XM, Vex, EXx }, 0 }, - }, - /* PREFIX_EVEX_0F38DF */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vaesdeclast", { XM, Vex, EXx }, 0 }, - }, - /* PREFIX_EVEX_0F3A00 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3A00_P_2) }, - }, - /* PREFIX_EVEX_0F3A01 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3A01_P_2) }, - }, - /* PREFIX_EVEX_0F3A03 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "valign%LW", { XM, Vex, EXx, Ib }, 0 }, - }, - /* PREFIX_EVEX_0F3A04 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3A04_P_2) }, - }, - /* PREFIX_EVEX_0F3A05 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3A05_P_2) }, - }, - /* PREFIX_EVEX_0F3A08 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3A08_P_2) }, - }, - /* PREFIX_EVEX_0F3A09 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3A09_P_2) }, - }, - /* PREFIX_EVEX_0F3A0A */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3A0A_P_2) }, - }, - /* PREFIX_EVEX_0F3A0B */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3A0B_P_2) }, - }, - /* PREFIX_EVEX_0F3A0F */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vpalignr", { XM, Vex, EXx, Ib }, 0 }, - }, - /* PREFIX_EVEX_0F3A14 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vpextrb", { Edqb, XM, Ib }, 0 }, - }, - /* PREFIX_EVEX_0F3A15 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vpextrw", { Edqw, XM, Ib }, 0 }, - }, - /* PREFIX_EVEX_0F3A16 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vpextrK", { Edq, XM, Ib }, 0 }, - }, - /* PREFIX_EVEX_0F3A17 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vextractps", { Edqd, XMM, Ib }, 0 }, - }, - /* PREFIX_EVEX_0F3A18 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3A18_P_2) }, - }, - /* PREFIX_EVEX_0F3A19 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3A19_P_2) }, - }, - /* PREFIX_EVEX_0F3A1A */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3A1A_P_2) }, - }, - /* PREFIX_EVEX_0F3A1B */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3A1B_P_2) }, - }, - /* PREFIX_EVEX_0F3A1D */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3A1D_P_2) }, - }, - /* PREFIX_EVEX_0F3A1E */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vpcmpu%LW", { XMask, Vex, EXx, VPCMP }, 0 }, - }, - /* PREFIX_EVEX_0F3A1F */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vpcmp%LW", { XMask, Vex, EXx, VPCMP }, 0 }, - }, - /* PREFIX_EVEX_0F3A20 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vpinsrb", { XM, Vex128, Edb, Ib }, 0 }, - }, - /* PREFIX_EVEX_0F3A21 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3A21_P_2) }, - }, - /* PREFIX_EVEX_0F3A22 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vpinsrK", { XM, Vex128, Edq, Ib }, 0 }, - }, - /* PREFIX_EVEX_0F3A23 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3A23_P_2) }, - }, - /* PREFIX_EVEX_0F3A25 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vpternlog%LW", { XM, Vex, EXx, Ib }, 0 }, - }, - /* PREFIX_EVEX_0F3A26 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vgetmantp%XW", { XM, EXx, EXxEVexS, Ib }, 0 }, - }, - /* PREFIX_EVEX_0F3A27 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vgetmants%XW", { XMScalar, VexScalar, EXxmm_mdq, EXxEVexS, Ib }, 0 }, - }, - /* PREFIX_EVEX_0F3A38 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3A38_P_2) }, - }, - /* PREFIX_EVEX_0F3A39 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3A39_P_2) }, - }, - /* PREFIX_EVEX_0F3A3A */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3A3A_P_2) }, - }, - /* PREFIX_EVEX_0F3A3B */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3A3B_P_2) }, - }, - /* PREFIX_EVEX_0F3A3E */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3A3E_P_2) }, - }, - /* PREFIX_EVEX_0F3A3F */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3A3F_P_2) }, - }, - /* PREFIX_EVEX_0F3A42 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3A42_P_2) }, - }, - /* PREFIX_EVEX_0F3A43 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3A43_P_2) }, - }, - /* PREFIX_EVEX_0F3A44 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vpclmulqdq", { XM, Vex, EXx, PCLMUL }, 0 }, - }, - /* PREFIX_EVEX_0F3A50 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3A50_P_2) }, - }, - /* PREFIX_EVEX_0F3A51 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3A51_P_2) }, - }, - /* PREFIX_EVEX_0F3A54 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vfixupimmp%XW", { XM, Vex, EXx, EXxEVexS, Ib }, 0 }, - }, - /* PREFIX_EVEX_0F3A55 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { "vfixupimms%XW", { XMScalar, VexScalar, EXxmm_mdq, EXxEVexS, Ib }, 0 }, - }, - /* PREFIX_EVEX_0F3A56 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3A56_P_2) }, - }, - /* PREFIX_EVEX_0F3A57 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3A57_P_2) }, - }, - /* PREFIX_EVEX_0F3A66 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3A66_P_2) }, - }, - /* PREFIX_EVEX_0F3A67 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3A67_P_2) }, - }, - /* PREFIX_EVEX_0F3A70 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3A70_P_2) }, - }, - /* PREFIX_EVEX_0F3A71 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3A71_P_2) }, - }, - /* PREFIX_EVEX_0F3A72 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3A72_P_2) }, - }, - /* PREFIX_EVEX_0F3A73 */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3A73_P_2) }, - }, - /* PREFIX_EVEX_0F3ACE */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3ACE_P_2) }, - }, - /* PREFIX_EVEX_0F3ACF */ - { - { Bad_Opcode }, - { Bad_Opcode }, - { VEX_W_TABLE (EVEX_W_0F3ACF_P_2) }, + { "vfmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexR }, 0 }, + { "v4fnmaddss", { XMScalar, VexScalar, Mxmm }, 0 }, }, diff -Nru gdb-9.1/opcodes/i386-dis-evex-reg.h gdb-10.2/opcodes/i386-dis-evex-reg.h --- gdb-9.1/opcodes/i386-dis-evex-reg.h 2019-09-20 21:58:17.000000000 +0000 +++ gdb-10.2/opcodes/i386-dis-evex-reg.h 2021-04-25 04:06:26.000000000 +0000 @@ -2,32 +2,32 @@ { { Bad_Opcode }, { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_EVEX_0F71_REG_2) }, + { "vpsrlw", { Vex, EXx, Ib }, PREFIX_DATA }, { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_EVEX_0F71_REG_4) }, + { "vpsraw", { Vex, EXx, Ib }, PREFIX_DATA }, { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_EVEX_0F71_REG_6) }, + { "vpsllw", { Vex, EXx, Ib }, PREFIX_DATA }, }, /* REG_EVEX_0F72 */ { - { PREFIX_TABLE (PREFIX_EVEX_0F72_REG_0) }, - { PREFIX_TABLE (PREFIX_EVEX_0F72_REG_1) }, - { PREFIX_TABLE (PREFIX_EVEX_0F72_REG_2) }, + { "vpror%DQ", { Vex, EXx, Ib }, PREFIX_DATA }, + { "vprol%DQ", { Vex, EXx, Ib }, PREFIX_DATA }, + { VEX_W_TABLE (EVEX_W_0F72_R_2) }, { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_EVEX_0F72_REG_4) }, + { "vpsra%DQ", { Vex, EXx, Ib }, PREFIX_DATA }, { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_EVEX_0F72_REG_6) }, + { VEX_W_TABLE (EVEX_W_0F72_R_6) }, }, /* REG_EVEX_0F73 */ { { Bad_Opcode }, { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_EVEX_0F73_REG_2) }, - { PREFIX_TABLE (PREFIX_EVEX_0F73_REG_3) }, + { VEX_W_TABLE (EVEX_W_0F73_R_2) }, + { "vpsrldq", { Vex, EXx, Ib }, PREFIX_DATA }, { Bad_Opcode }, { Bad_Opcode }, - { PREFIX_TABLE (PREFIX_EVEX_0F73_REG_6) }, - { PREFIX_TABLE (PREFIX_EVEX_0F73_REG_7) }, + { VEX_W_TABLE (EVEX_W_0F73_R_6) }, + { "vpslldq", { Vex, EXx, Ib }, PREFIX_DATA }, }, /* REG_EVEX_0F38C6 */ { diff -Nru gdb-9.1/opcodes/i386-dis-evex-w.h gdb-10.2/opcodes/i386-dis-evex-w.h --- gdb-9.1/opcodes/i386-dis-evex-w.h 2019-09-20 21:58:17.000000000 +0000 +++ gdb-10.2/opcodes/i386-dis-evex-w.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,42 +1,20 @@ - /* EVEX_W_0F10_P_0 */ - { - { "vmovups", { XM, EXEvexXNoBcst }, 0 }, - }, /* EVEX_W_0F10_P_1 */ { - { "vmovss", { XMVexScalar, VexScalar, EXdScalar }, 0 }, - }, - /* EVEX_W_0F10_P_2 */ - { - { Bad_Opcode }, - { "vmovupd", { XM, EXEvexXNoBcst }, 0 }, + { "vmovss", { XMScalar, VexScalarR, EXxmm_md }, 0 }, }, /* EVEX_W_0F10_P_3 */ { { Bad_Opcode }, - { "vmovsd", { XMVexScalar, VexScalar, EXqScalar }, 0 }, - }, - /* EVEX_W_0F11_P_0 */ - { - { "vmovups", { EXxS, XM }, 0 }, + { "vmovsd", { XMScalar, VexScalarR, EXxmm_mq }, 0 }, }, /* EVEX_W_0F11_P_1 */ { - { "vmovss", { EXdVexScalarS, VexScalar, XMScalar }, 0 }, - }, - /* EVEX_W_0F11_P_2 */ - { - { Bad_Opcode }, - { "vmovupd", { EXxS, XM }, 0 }, + { "vmovss", { EXdS, VexScalarR, XMScalar }, 0 }, }, /* EVEX_W_0F11_P_3 */ { { Bad_Opcode }, - { "vmovsd", { EXqVexScalarS, VexScalar, XMScalar }, 0 }, - }, - /* EVEX_W_0F12_P_0_M_0 */ - { - { "vmovlps", { XMM, Vex, EXxmm_mq }, 0 }, + { "vmovsd", { EXqS, VexScalarR, XMScalar }, 0 }, }, /* EVEX_W_0F12_P_0_M_1 */ { @@ -46,47 +24,11 @@ { { "vmovsldup", { XM, EXEvexXNoBcst }, 0 }, }, - /* EVEX_W_0F12_P_2 */ - { - { Bad_Opcode }, - { "vmovlpd", { XMM, Vex, EXxmm_mq }, 0 }, - }, /* EVEX_W_0F12_P_3 */ { { Bad_Opcode }, { "vmovddup", { XM, EXymmq }, 0 }, }, - /* EVEX_W_0F13_P_0 */ - { - { "vmovlps", { EXxmm_mq, XMM }, 0 }, - }, - /* EVEX_W_0F13_P_2 */ - { - { Bad_Opcode }, - { "vmovlpd", { EXxmm_mq, XMM }, 0 }, - }, - /* EVEX_W_0F14_P_0 */ - { - { "vunpcklps", { XM, Vex, EXx }, 0 }, - }, - /* EVEX_W_0F14_P_2 */ - { - { Bad_Opcode }, - { "vunpcklpd", { XM, Vex, EXx }, 0 }, - }, - /* EVEX_W_0F15_P_0 */ - { - { "vunpckhps", { XM, Vex, EXx }, 0 }, - }, - /* EVEX_W_0F15_P_2 */ - { - { Bad_Opcode }, - { "vunpckhpd", { XM, Vex, EXx }, 0 }, - }, - /* EVEX_W_0F16_P_0_M_0 */ - { - { "vmovhps", { XMM, Vex, EXxmm_mq }, 0 }, - }, /* EVEX_W_0F16_P_0_M_1 */ { { "vmovlhps", { XMM, Vex, EXx }, 0 }, @@ -95,155 +37,33 @@ { { "vmovshdup", { XM, EXx }, 0 }, }, - /* EVEX_W_0F16_P_2 */ - { - { Bad_Opcode }, - { "vmovhpd", { XMM, Vex, EXxmm_mq }, 0 }, - }, - /* EVEX_W_0F17_P_0 */ - { - { "vmovhps", { EXxmm_mq, XMM }, 0 }, - }, - /* EVEX_W_0F17_P_2 */ - { - { Bad_Opcode }, - { "vmovhpd", { EXxmm_mq, XMM }, 0 }, - }, - /* EVEX_W_0F28_P_0 */ - { - { "vmovaps", { XM, EXx }, 0 }, - }, - /* EVEX_W_0F28_P_2 */ - { - { Bad_Opcode }, - { "vmovapd", { XM, EXx }, 0 }, - }, - /* EVEX_W_0F29_P_0 */ - { - { "vmovaps", { EXxS, XM }, 0 }, - }, - /* EVEX_W_0F29_P_2 */ - { - { Bad_Opcode }, - { "vmovapd", { EXxS, XM }, 0 }, - }, /* EVEX_W_0F2A_P_3 */ { - { "vcvtsi2sd%LQ", { XMScalar, VexScalar, Ed }, 0 }, - { "vcvtsi2sd%LQ", { XMScalar, VexScalar, EXxEVexR64, Edq }, 0 }, - }, - /* EVEX_W_0F2B_P_0 */ - { - { "vmovntps", { EXx, XM }, 0 }, - }, - /* EVEX_W_0F2B_P_2 */ - { - { Bad_Opcode }, - { "vmovntpd", { EXx, XM }, 0 }, - }, - /* EVEX_W_0F2E_P_0 */ - { - { "vucomiss", { XMScalar, EXxmm_md, EXxEVexS }, 0 }, - }, - /* EVEX_W_0F2E_P_2 */ - { - { Bad_Opcode }, - { "vucomisd", { XMScalar, EXxmm_mq, EXxEVexS }, 0 }, - }, - /* EVEX_W_0F2F_P_0 */ - { - { "vcomiss", { XMScalar, EXxmm_md, EXxEVexS }, 0 }, - }, - /* EVEX_W_0F2F_P_2 */ - { - { Bad_Opcode }, - { "vcomisd", { XMScalar, EXxmm_mq, EXxEVexS }, 0 }, - }, - /* EVEX_W_0F51_P_0 */ - { - { "vsqrtps", { XM, EXx, EXxEVexR }, 0 }, + { "vcvtsi2sd{%LQ|}", { XMScalar, VexScalar, Ed }, 0 }, + { "vcvtsi2sd{%LQ|}", { XMScalar, VexScalar, EXxEVexR64, Edq }, 0 }, }, /* EVEX_W_0F51_P_1 */ { { "vsqrtss", { XMScalar, VexScalar, EXxmm_md, EXxEVexR }, 0 }, }, - /* EVEX_W_0F51_P_2 */ - { - { Bad_Opcode }, - { "vsqrtpd", { XM, EXx, EXxEVexR }, 0 }, - }, /* EVEX_W_0F51_P_3 */ { { Bad_Opcode }, { "vsqrtsd", { XMScalar, VexScalar, EXxmm_mq, EXxEVexR }, 0 }, }, - /* EVEX_W_0F54_P_0 */ - { - { "vandps", { XM, Vex, EXx }, 0 }, - }, - /* EVEX_W_0F54_P_2 */ - { - { Bad_Opcode }, - { "vandpd", { XM, Vex, EXx }, 0 }, - }, - /* EVEX_W_0F55_P_0 */ - { - { "vandnps", { XM, Vex, EXx }, 0 }, - }, - /* EVEX_W_0F55_P_2 */ - { - { Bad_Opcode }, - { "vandnpd", { XM, Vex, EXx }, 0 }, - }, - /* EVEX_W_0F56_P_0 */ - { - { "vorps", { XM, Vex, EXx }, 0 }, - }, - /* EVEX_W_0F56_P_2 */ - { - { Bad_Opcode }, - { "vorpd", { XM, Vex, EXx }, 0 }, - }, - /* EVEX_W_0F57_P_0 */ - { - { "vxorps", { XM, Vex, EXx }, 0 }, - }, - /* EVEX_W_0F57_P_2 */ - { - { Bad_Opcode }, - { "vxorpd", { XM, Vex, EXx }, 0 }, - }, - /* EVEX_W_0F58_P_0 */ - { - { "vaddps", { XM, Vex, EXx, EXxEVexR }, 0 }, - }, /* EVEX_W_0F58_P_1 */ { { "vaddss", { XMScalar, VexScalar, EXxmm_md, EXxEVexR }, 0 }, }, - /* EVEX_W_0F58_P_2 */ - { - { Bad_Opcode }, - { "vaddpd", { XM, Vex, EXx, EXxEVexR }, 0 }, - }, /* EVEX_W_0F58_P_3 */ { { Bad_Opcode }, { "vaddsd", { XMScalar, VexScalar, EXxmm_mq, EXxEVexR }, 0 }, }, - /* EVEX_W_0F59_P_0 */ - { - { "vmulps", { XM, Vex, EXx, EXxEVexR }, 0 }, - }, /* EVEX_W_0F59_P_1 */ { { "vmulss", { XMScalar, VexScalar, EXxmm_md, EXxEVexR }, 0 }, }, - /* EVEX_W_0F59_P_2 */ - { - { Bad_Opcode }, - { "vmulpd", { XM, Vex, EXx, EXxEVexR }, 0 }, - }, /* EVEX_W_0F59_P_3 */ { { Bad_Opcode }, @@ -280,103 +100,67 @@ { { "vcvtps2dq", { XM, EXx, EXxEVexR }, 0 }, }, - /* EVEX_W_0F5C_P_0 */ - { - { "vsubps", { XM, Vex, EXx, EXxEVexR }, 0 }, - }, /* EVEX_W_0F5C_P_1 */ { { "vsubss", { XMScalar, VexScalar, EXxmm_md, EXxEVexR }, 0 }, }, - /* EVEX_W_0F5C_P_2 */ - { - { Bad_Opcode }, - { "vsubpd", { XM, Vex, EXx, EXxEVexR }, 0 }, - }, /* EVEX_W_0F5C_P_3 */ { { Bad_Opcode }, { "vsubsd", { XMScalar, VexScalar, EXxmm_mq, EXxEVexR }, 0 }, }, - /* EVEX_W_0F5D_P_0 */ - { - { "vminps", { XM, Vex, EXx, EXxEVexS }, 0 }, - }, /* EVEX_W_0F5D_P_1 */ { { "vminss", { XMScalar, VexScalar, EXxmm_md, EXxEVexS }, 0 }, }, - /* EVEX_W_0F5D_P_2 */ - { - { Bad_Opcode }, - { "vminpd", { XM, Vex, EXx, EXxEVexS }, 0 }, - }, /* EVEX_W_0F5D_P_3 */ { { Bad_Opcode }, { "vminsd", { XMScalar, VexScalar, EXxmm_mq, EXxEVexS }, 0 }, }, - /* EVEX_W_0F5E_P_0 */ - { - { "vdivps", { XM, Vex, EXx, EXxEVexR }, 0 }, - }, /* EVEX_W_0F5E_P_1 */ { { "vdivss", { XMScalar, VexScalar, EXxmm_md, EXxEVexR }, 0 }, }, - /* EVEX_W_0F5E_P_2 */ - { - { Bad_Opcode }, - { "vdivpd", { XM, Vex, EXx, EXxEVexR }, 0 }, - }, /* EVEX_W_0F5E_P_3 */ { { Bad_Opcode }, { "vdivsd", { XMScalar, VexScalar, EXxmm_mq, EXxEVexR }, 0 }, }, - /* EVEX_W_0F5F_P_0 */ - { - { "vmaxps", { XM, Vex, EXx, EXxEVexS }, 0 }, - }, /* EVEX_W_0F5F_P_1 */ { { "vmaxss", { XMScalar, VexScalar, EXxmm_md, EXxEVexS }, 0 }, }, - /* EVEX_W_0F5F_P_2 */ - { - { Bad_Opcode }, - { "vmaxpd", { XM, Vex, EXx, EXxEVexS }, 0 }, - }, /* EVEX_W_0F5F_P_3 */ { { Bad_Opcode }, { "vmaxsd", { XMScalar, VexScalar, EXxmm_mq, EXxEVexS }, 0 }, }, - /* EVEX_W_0F62_P_2 */ + /* EVEX_W_0F62 */ { - { "vpunpckldq", { XM, Vex, EXx }, 0 }, + { "vpunpckldq", { XM, Vex, EXx }, PREFIX_DATA }, }, - /* EVEX_W_0F66_P_2 */ + /* EVEX_W_0F66 */ { - { "vpcmpgtd", { XMask, Vex, EXx }, 0 }, + { "vpcmpgtd", { XMask, Vex, EXx }, PREFIX_DATA }, }, - /* EVEX_W_0F6A_P_2 */ + /* EVEX_W_0F6A */ { - { "vpunpckhdq", { XM, Vex, EXx }, 0 }, + { "vpunpckhdq", { XM, Vex, EXx }, PREFIX_DATA }, }, - /* EVEX_W_0F6B_P_2 */ + /* EVEX_W_0F6B */ { - { "vpackssdw", { XM, Vex, EXx }, 0 }, + { "vpackssdw", { XM, Vex, EXx }, PREFIX_DATA }, }, - /* EVEX_W_0F6C_P_2 */ + /* EVEX_W_0F6C */ { { Bad_Opcode }, - { "vpunpcklqdq", { XM, Vex, EXx }, 0 }, + { "vpunpcklqdq", { XM, Vex, EXx }, PREFIX_DATA }, }, - /* EVEX_W_0F6D_P_2 */ + /* EVEX_W_0F6D */ { { Bad_Opcode }, - { "vpunpckhqdq", { XM, Vex, EXx }, 0 }, + { "vpunpckhqdq", { XM, Vex, EXx }, PREFIX_DATA }, }, /* EVEX_W_0F6F_P_1 */ { @@ -397,27 +181,27 @@ { { "vpshufd", { XM, EXx, Ib }, 0 }, }, - /* EVEX_W_0F72_R_2_P_2 */ + /* EVEX_W_0F72_R_2 */ { - { "vpsrld", { Vex, EXx, Ib }, 0 }, + { "vpsrld", { Vex, EXx, Ib }, PREFIX_DATA }, }, - /* EVEX_W_0F72_R_6_P_2 */ + /* EVEX_W_0F72_R_6 */ { - { "vpslld", { Vex, EXx, Ib }, 0 }, + { "vpslld", { Vex, EXx, Ib }, PREFIX_DATA }, }, - /* EVEX_W_0F73_R_2_P_2 */ + /* EVEX_W_0F73_R_2 */ { { Bad_Opcode }, - { "vpsrlq", { Vex, EXx, Ib }, 0 }, + { "vpsrlq", { Vex, EXx, Ib }, PREFIX_DATA }, }, - /* EVEX_W_0F73_R_6_P_2 */ + /* EVEX_W_0F73_R_6 */ { { Bad_Opcode }, - { "vpsllq", { Vex, EXx, Ib }, 0 }, + { "vpsllq", { Vex, EXx, Ib }, PREFIX_DATA }, }, - /* EVEX_W_0F76_P_2 */ + /* EVEX_W_0F76 */ { - { "vpcmpeqd", { XMask, Vex, EXx }, 0 }, + { "vpcmpeqd", { XMask, Vex, EXx }, PREFIX_DATA }, }, /* EVEX_W_0F78_P_0 */ { @@ -461,8 +245,8 @@ }, /* EVEX_W_0F7B_P_3 */ { - { "vcvtusi2sd%LQ", { XMScalar, VexScalar, Ed }, 0 }, - { "vcvtusi2sd%LQ", { XMScalar, VexScalar, EXxEVexR64, Edq }, 0 }, + { "vcvtusi2sd{%LQ|}", { XMScalar, VexScalar, Ed }, 0 }, + { "vcvtusi2sd{%LQ|}", { XMScalar, VexScalar, EXxEVexR64, Edq }, 0 }, }, /* EVEX_W_0F7E_P_1 */ { @@ -484,51 +268,33 @@ { "vmovdqu8", { EXxS, XM }, 0 }, { "vmovdqu16", { EXxS, XM }, 0 }, }, - /* EVEX_W_0FC2_P_0 */ - { - { "vcmpps", { XMask, Vex, EXx, EXxEVexS, VCMP }, 0 }, - }, /* EVEX_W_0FC2_P_1 */ { - { "vcmpss", { XMask, VexScalar, EXxmm_md, EXxEVexS, VCMP }, 0 }, - }, - /* EVEX_W_0FC2_P_2 */ - { - { Bad_Opcode }, - { "vcmppd", { XMask, Vex, EXx, EXxEVexS, VCMP }, 0 }, + { "vcmpss", { XMask, VexScalar, EXxmm_md, EXxEVexS, CMP }, 0 }, }, /* EVEX_W_0FC2_P_3 */ { { Bad_Opcode }, - { "vcmpsd", { XMask, VexScalar, EXxmm_mq, EXxEVexS, VCMP }, 0 }, - }, - /* EVEX_W_0FC6_P_0 */ - { - { "vshufps", { XM, Vex, EXx, Ib }, 0 }, - }, - /* EVEX_W_0FC6_P_2 */ - { - { Bad_Opcode }, - { "vshufpd", { XM, Vex, EXx, Ib }, 0 }, + { "vcmpsd", { XMask, VexScalar, EXxmm_mq, EXxEVexS, CMP }, 0 }, }, - /* EVEX_W_0FD2_P_2 */ + /* EVEX_W_0FD2 */ { - { "vpsrld", { XM, Vex, EXxmm }, 0 }, + { "vpsrld", { XM, Vex, EXxmm }, PREFIX_DATA }, }, - /* EVEX_W_0FD3_P_2 */ + /* EVEX_W_0FD3 */ { { Bad_Opcode }, - { "vpsrlq", { XM, Vex, EXxmm }, 0 }, + { "vpsrlq", { XM, Vex, EXxmm }, PREFIX_DATA }, }, - /* EVEX_W_0FD4_P_2 */ + /* EVEX_W_0FD4 */ { { Bad_Opcode }, - { "vpaddq", { XM, Vex, EXx }, 0 }, + { "vpaddq", { XM, Vex, EXx }, PREFIX_DATA }, }, - /* EVEX_W_0FD6_P_2 */ + /* EVEX_W_0FD6_L_0 */ { { Bad_Opcode }, - { "vmovq", { EXxmm_mq, XMScalar }, 0 }, + { "vmovq", { EXqS, XMScalar }, PREFIX_DATA }, }, /* EVEX_W_0FE6_P_1 */ { @@ -545,45 +311,41 @@ { Bad_Opcode }, { "vcvtpd2dq%XY", { XMxmmq, EXx, EXxEVexR }, 0 }, }, - /* EVEX_W_0FE7_P_2 */ + /* EVEX_W_0FE7 */ { - { "vmovntdq", { EXEvexXNoBcst, XM }, 0 }, + { "vmovntdq", { EXEvexXNoBcst, XM }, PREFIX_DATA }, }, - /* EVEX_W_0FF2_P_2 */ + /* EVEX_W_0FF2 */ { - { "vpslld", { XM, Vex, EXxmm }, 0 }, + { "vpslld", { XM, Vex, EXxmm }, PREFIX_DATA }, }, - /* EVEX_W_0FF3_P_2 */ + /* EVEX_W_0FF3 */ { { Bad_Opcode }, - { "vpsllq", { XM, Vex, EXxmm }, 0 }, + { "vpsllq", { XM, Vex, EXxmm }, PREFIX_DATA }, }, - /* EVEX_W_0FF4_P_2 */ + /* EVEX_W_0FF4 */ { { Bad_Opcode }, - { "vpmuludq", { XM, Vex, EXx }, 0 }, + { "vpmuludq", { XM, Vex, EXx }, PREFIX_DATA }, }, - /* EVEX_W_0FFA_P_2 */ + /* EVEX_W_0FFA */ { - { "vpsubd", { XM, Vex, EXx }, 0 }, + { "vpsubd", { XM, Vex, EXx }, PREFIX_DATA }, }, - /* EVEX_W_0FFB_P_2 */ + /* EVEX_W_0FFB */ { { Bad_Opcode }, - { "vpsubq", { XM, Vex, EXx }, 0 }, - }, - /* EVEX_W_0FFE_P_2 */ - { - { "vpaddd", { XM, Vex, EXx }, 0 }, + { "vpsubq", { XM, Vex, EXx }, PREFIX_DATA }, }, - /* EVEX_W_0F380C_P_2 */ + /* EVEX_W_0FFE */ { - { "vpermilps", { XM, Vex, EXx }, 0 }, + { "vpaddd", { XM, Vex, EXx }, PREFIX_DATA }, }, - /* EVEX_W_0F380D_P_2 */ + /* EVEX_W_0F380D */ { { Bad_Opcode }, - { "vpermilpd", { XM, Vex, EXx }, 0 }, + { "vpermilpd", { XM, Vex, EXx }, PREFIX_DATA }, }, /* EVEX_W_0F3810_P_1 */ { @@ -628,33 +390,29 @@ { { "vpmovusqd", { EXxmmq, XM }, 0 }, }, - /* EVEX_W_0F3818_P_2 */ + /* EVEX_W_0F3819 */ { - { "vbroadcastss", { XM, EXxmm_md }, 0 }, + { EVEX_LEN_TABLE (EVEX_LEN_0F3819_W_0) }, + { EVEX_LEN_TABLE (EVEX_LEN_0F3819_W_1) }, }, - /* EVEX_W_0F3819_P_2 */ + /* EVEX_W_0F381A */ { - { EVEX_LEN_TABLE (EVEX_LEN_0F3819_P_2_W_0) }, - { EVEX_LEN_TABLE (EVEX_LEN_0F3819_P_2_W_1) }, + { MOD_TABLE (MOD_EVEX_0F381A_W_0) }, + { MOD_TABLE (MOD_EVEX_0F381A_W_1) }, }, - /* EVEX_W_0F381A_P_2 */ + /* EVEX_W_0F381B */ { - { EVEX_LEN_TABLE (EVEX_LEN_0F381A_P_2_W_0) }, - { EVEX_LEN_TABLE (EVEX_LEN_0F381A_P_2_W_1) }, + { MOD_TABLE (MOD_EVEX_0F381B_W_0) }, + { MOD_TABLE (MOD_EVEX_0F381B_W_1) }, }, - /* EVEX_W_0F381B_P_2 */ + /* EVEX_W_0F381E */ { - { EVEX_LEN_TABLE (EVEX_LEN_0F381B_P_2_W_0) }, - { EVEX_LEN_TABLE (EVEX_LEN_0F381B_P_2_W_1) }, + { "vpabsd", { XM, EXx }, PREFIX_DATA }, }, - /* EVEX_W_0F381E_P_2 */ - { - { "vpabsd", { XM, EXx }, 0 }, - }, - /* EVEX_W_0F381F_P_2 */ + /* EVEX_W_0F381F */ { { Bad_Opcode }, - { "vpabsq", { XM, EXx }, 0 }, + { "vpabsq", { XM, EXx }, PREFIX_DATA }, }, /* EVEX_W_0F3820_P_1 */ { @@ -684,31 +442,11 @@ { { "vpmovsxdq", { XM, EXxmmq }, 0 }, }, - /* EVEX_W_0F3826_P_1 */ - { - { "vptestnmb", { XMask, Vex, EXx }, 0 }, - { "vptestnmw", { XMask, Vex, EXx }, 0 }, - }, - /* EVEX_W_0F3826_P_2 */ - { - { "vptestmb", { XMask, Vex, EXx }, 0 }, - { "vptestmw", { XMask, Vex, EXx }, 0 }, - }, - /* EVEX_W_0F3828_P_1 */ - { - { "vpmovm2b", { XM, MaskR }, 0 }, - { "vpmovm2w", { XM, MaskR }, 0 }, - }, /* EVEX_W_0F3828_P_2 */ { { Bad_Opcode }, { "vpmuldq", { XM, Vex, EXx }, 0 }, }, - /* EVEX_W_0F3829_P_1 */ - { - { "vpmovb2m", { XMask, EXx }, 0 }, - { "vpmovw2m", { XMask, EXx }, 0 }, - }, /* EVEX_W_0F3829_P_2 */ { { Bad_Opcode }, @@ -717,15 +455,15 @@ /* EVEX_W_0F382A_P_1 */ { { Bad_Opcode }, - { "vpbroadcastmb2q", { XM, MaskR }, 0 }, + { MOD_TABLE (MOD_EVEX_0F382A_P_1_W_1) }, }, /* EVEX_W_0F382A_P_2 */ { { "vmovntdqa", { XM, EXEvexXNoBcst }, 0 }, }, - /* EVEX_W_0F382B_P_2 */ + /* EVEX_W_0F382B */ { - { "vpackusdw", { XM, Vex, EXx }, 0 }, + { "vpackusdw", { XM, Vex, EXx }, PREFIX_DATA }, }, /* EVEX_W_0F3830_P_1 */ { @@ -755,93 +493,39 @@ { { "vpmovzxdq", { XM, EXxmmq }, 0 }, }, - /* EVEX_W_0F3837_P_2 */ + /* EVEX_W_0F3837 */ { { Bad_Opcode }, - { "vpcmpgtq", { XMask, Vex, EXx }, 0 }, - }, - /* EVEX_W_0F3838_P_1 */ - { - { "vpmovm2d", { XM, MaskR }, 0 }, - { "vpmovm2q", { XM, MaskR }, 0 }, - }, - /* EVEX_W_0F3839_P_1 */ - { - { "vpmovd2m", { XMask, EXx }, 0 }, - { "vpmovq2m", { XMask, EXx }, 0 }, + { "vpcmpgtq", { XMask, Vex, EXx }, PREFIX_DATA }, }, /* EVEX_W_0F383A_P_1 */ { - { "vpbroadcastmw2d", { XM, MaskR }, 0 }, - }, - /* EVEX_W_0F3840_P_2 */ - { - { "vpmulld", { XM, Vex, EXx }, 0 }, - { "vpmullq", { XM, Vex, EXx }, 0 }, + { MOD_TABLE (MOD_EVEX_0F383A_P_1_W_0) }, }, /* EVEX_W_0F3852_P_1 */ { { "vdpbf16ps", { XM, Vex, EXx }, 0 }, { Bad_Opcode }, }, - /* EVEX_W_0F3854_P_2 */ + /* EVEX_W_0F3859 */ { - { "vpopcntb", { XM, EXx }, 0 }, - { "vpopcntw", { XM, EXx }, 0 }, + { "vbroadcasti32x2", { XM, EXxmm_mq }, PREFIX_DATA }, + { "vpbroadcastq", { XM, EXxmm_mq }, PREFIX_DATA }, }, - /* EVEX_W_0F3855_P_2 */ + /* EVEX_W_0F385A */ { - { "vpopcntd", { XM, EXx }, 0 }, - { "vpopcntq", { XM, EXx }, 0 }, + { MOD_TABLE (MOD_EVEX_0F385A_W_0) }, + { MOD_TABLE (MOD_EVEX_0F385A_W_1) }, }, - /* EVEX_W_0F3858_P_2 */ + /* EVEX_W_0F385B */ { - { "vpbroadcastd", { XM, EXxmm_md }, 0 }, + { MOD_TABLE (MOD_EVEX_0F385B_W_0) }, + { MOD_TABLE (MOD_EVEX_0F385B_W_1) }, }, - /* EVEX_W_0F3859_P_2 */ - { - { "vbroadcasti32x2", { XM, EXxmm_mq }, 0 }, - { "vpbroadcastq", { XM, EXxmm_mq }, 0 }, - }, - /* EVEX_W_0F385A_P_2 */ - { - { EVEX_LEN_TABLE (EVEX_LEN_0F385A_P_2_W_0) }, - { EVEX_LEN_TABLE (EVEX_LEN_0F385A_P_2_W_1) }, - }, - /* EVEX_W_0F385B_P_2 */ - { - { EVEX_LEN_TABLE (EVEX_LEN_0F385B_P_2_W_0) }, - { EVEX_LEN_TABLE (EVEX_LEN_0F385B_P_2_W_1) }, - }, - /* EVEX_W_0F3862_P_2 */ - { - { "vpexpandb", { XM, EXbScalar }, 0 }, - { "vpexpandw", { XM, EXwScalar }, 0 }, - }, - /* EVEX_W_0F3863_P_2 */ - { - { "vpcompressb", { EXbScalar, XM }, 0 }, - { "vpcompressw", { EXwScalar, XM }, 0 }, - }, - /* EVEX_W_0F3866_P_2 */ - { - { "vpblendmb", { XM, Vex, EXx }, 0 }, - { "vpblendmw", { XM, Vex, EXx }, 0 }, - }, - /* EVEX_W_0F3868_P_3 */ - { - { "vp2intersectd", { XMask, Vex, EXx, EXxEVexS }, 0 }, - { "vp2intersectq", { XMask, Vex, EXx, EXxEVexS }, 0 }, - }, - /* EVEX_W_0F3870_P_2 */ + /* EVEX_W_0F3870 */ { { Bad_Opcode }, - { "vpshldvw", { XM, Vex, EXx }, 0 }, - }, - /* EVEX_W_0F3871_P_2 */ - { - { "vpshldvd", { XM, Vex, EXx }, 0 }, - { "vpshldvq", { XM, Vex, EXx }, 0 }, + { "vpshldvw", { XM, Vex, EXx }, PREFIX_DATA }, }, /* EVEX_W_0F3872_P_1 */ { @@ -858,253 +542,157 @@ { "vcvtne2ps2bf16", { XM, Vex, EXx}, 0 }, { Bad_Opcode }, }, - /* EVEX_W_0F3873_P_2 */ - { - { "vpshrdvd", { XM, Vex, EXx }, 0 }, - { "vpshrdvq", { XM, Vex, EXx }, 0 }, - }, - /* EVEX_W_0F3875_P_2 */ - { - { "vpermi2b", { XM, Vex, EXx }, 0 }, - { "vpermi2w", { XM, Vex, EXx }, 0 }, - }, - /* EVEX_W_0F3878_P_2 */ + /* EVEX_W_0F387A */ { - { "vpbroadcastb", { XM, EXxmm_mb }, 0 }, + { MOD_TABLE (MOD_EVEX_0F387A_W_0) }, }, - /* EVEX_W_0F3879_P_2 */ + /* EVEX_W_0F387B */ { - { "vpbroadcastw", { XM, EXxmm_mw }, 0 }, + { MOD_TABLE (MOD_EVEX_0F387B_W_0) }, }, - /* EVEX_W_0F387A_P_2 */ - { - { "vpbroadcastb", { XM, Rd }, 0 }, - }, - /* EVEX_W_0F387B_P_2 */ - { - { "vpbroadcastw", { XM, Rd }, 0 }, - }, - /* EVEX_W_0F387D_P_2 */ - { - { "vpermt2b", { XM, Vex, EXx }, 0 }, - { "vpermt2w", { XM, Vex, EXx }, 0 }, - }, - /* EVEX_W_0F3883_P_2 */ + /* EVEX_W_0F3883 */ { { Bad_Opcode }, - { "vpmultishiftqb", { XM, Vex, EXx }, 0 }, + { "vpmultishiftqb", { XM, Vex, EXx }, PREFIX_DATA }, }, - /* EVEX_W_0F388D_P_2 */ + /* EVEX_W_0F3891 */ { - { "vpermb", { XM, Vex, EXx }, 0 }, - { "vpermw", { XM, Vex, EXx }, 0 }, - }, - /* EVEX_W_0F3891_P_2 */ - { - { "vpgatherqd", { XMxmmq, MVexVSIBQDWpX }, 0 }, + { "vpgatherqd", { XMxmmq, MVexVSIBQDWpX }, PREFIX_DATA }, { "vpgatherqq", { XM, MVexVSIBQWpX }, 0 }, }, - /* EVEX_W_0F3893_P_2 */ + /* EVEX_W_0F3893 */ { - { "vgatherqps", { XMxmmq, MVexVSIBQDWpX }, 0 }, + { "vgatherqps", { XMxmmq, MVexVSIBQDWpX }, PREFIX_DATA }, { "vgatherqpd", { XM, MVexVSIBQWpX }, 0 }, }, - /* EVEX_W_0F38A1_P_2 */ + /* EVEX_W_0F38A1 */ { - { "vpscatterqd", { MVexVSIBQDWpX, XMxmmq }, 0 }, + { "vpscatterqd", { MVexVSIBQDWpX, XMxmmq }, PREFIX_DATA }, { "vpscatterqq", { MVexVSIBQWpX, XM }, 0 }, }, - /* EVEX_W_0F38A3_P_2 */ + /* EVEX_W_0F38A3 */ { - { "vscatterqps", { MVexVSIBQDWpX, XMxmmq }, 0 }, + { "vscatterqps", { MVexVSIBQDWpX, XMxmmq }, PREFIX_DATA }, { "vscatterqpd", { MVexVSIBQWpX, XM }, 0 }, }, - /* EVEX_W_0F38C7_R_1_P_2 */ + /* EVEX_W_0F38C7_R_1_M_0 */ { - { EVEX_LEN_TABLE (EVEX_LEN_0F38C7_R_1_P_2_W_0) }, - { EVEX_LEN_TABLE (EVEX_LEN_0F38C7_R_1_P_2_W_1) }, + { EVEX_LEN_TABLE (EVEX_LEN_0F38C7_R_1_M_0_W_0) }, + { EVEX_LEN_TABLE (EVEX_LEN_0F38C7_R_1_M_0_W_1) }, }, - /* EVEX_W_0F38C7_R_2_P_2 */ + /* EVEX_W_0F38C7_R_2_M_0 */ { - { EVEX_LEN_TABLE (EVEX_LEN_0F38C7_R_2_P_2_W_0) }, - { EVEX_LEN_TABLE (EVEX_LEN_0F38C7_R_2_P_2_W_1) }, + { EVEX_LEN_TABLE (EVEX_LEN_0F38C7_R_2_M_0_W_0) }, + { EVEX_LEN_TABLE (EVEX_LEN_0F38C7_R_2_M_0_W_1) }, }, - /* EVEX_W_0F38C7_R_5_P_2 */ + /* EVEX_W_0F38C7_R_5_M_0 */ { - { EVEX_LEN_TABLE (EVEX_LEN_0F38C7_R_5_P_2_W_0) }, - { EVEX_LEN_TABLE (EVEX_LEN_0F38C7_R_5_P_2_W_1) }, + { EVEX_LEN_TABLE (EVEX_LEN_0F38C7_R_5_M_0_W_0) }, + { EVEX_LEN_TABLE (EVEX_LEN_0F38C7_R_5_M_0_W_1) }, }, - /* EVEX_W_0F38C7_R_6_P_2 */ + /* EVEX_W_0F38C7_R_6_M_0 */ { - { EVEX_LEN_TABLE (EVEX_LEN_0F38C7_R_6_P_2_W_0) }, - { EVEX_LEN_TABLE (EVEX_LEN_0F38C7_R_6_P_2_W_1) }, + { EVEX_LEN_TABLE (EVEX_LEN_0F38C7_R_6_M_0_W_0) }, + { EVEX_LEN_TABLE (EVEX_LEN_0F38C7_R_6_M_0_W_1) }, }, - /* EVEX_W_0F3A00_P_2 */ + /* EVEX_W_0F3A00 */ { { Bad_Opcode }, - { "vpermq", { XM, EXx, Ib }, 0 }, + { EVEX_LEN_TABLE (EVEX_LEN_0F3A00_W_1) }, }, - /* EVEX_W_0F3A01_P_2 */ + /* EVEX_W_0F3A01 */ { { Bad_Opcode }, - { "vpermpd", { XM, EXx, Ib }, 0 }, - }, - /* EVEX_W_0F3A04_P_2 */ - { - { "vpermilps", { XM, EXx, Ib }, 0 }, + { EVEX_LEN_TABLE (EVEX_LEN_0F3A01_W_1) }, }, - /* EVEX_W_0F3A05_P_2 */ + /* EVEX_W_0F3A05 */ { { Bad_Opcode }, - { "vpermilpd", { XM, EXx, Ib }, 0 }, + { "vpermilpd", { XM, EXx, Ib }, PREFIX_DATA }, }, - /* EVEX_W_0F3A08_P_2 */ + /* EVEX_W_0F3A08 */ { - { "vrndscaleps", { XM, EXx, EXxEVexS, Ib }, 0 }, + { "vrndscaleps", { XM, EXx, EXxEVexS, Ib }, PREFIX_DATA }, }, - /* EVEX_W_0F3A09_P_2 */ + /* EVEX_W_0F3A09 */ { { Bad_Opcode }, - { "vrndscalepd", { XM, EXx, EXxEVexS, Ib }, 0 }, + { "vrndscalepd", { XM, EXx, EXxEVexS, Ib }, PREFIX_DATA }, }, - /* EVEX_W_0F3A0A_P_2 */ + /* EVEX_W_0F3A0A */ { - { "vrndscaless", { XMScalar, VexScalar, EXxmm_md, EXxEVexS, Ib }, 0 }, + { "vrndscaless", { XMScalar, VexScalar, EXxmm_md, EXxEVexS, Ib }, PREFIX_DATA }, }, - /* EVEX_W_0F3A0B_P_2 */ + /* EVEX_W_0F3A0B */ { { Bad_Opcode }, - { "vrndscalesd", { XMScalar, VexScalar, EXxmm_mq, EXxEVexS, Ib }, 0 }, + { "vrndscalesd", { XMScalar, VexScalar, EXxmm_mq, EXxEVexS, Ib }, PREFIX_DATA }, }, - /* EVEX_W_0F3A18_P_2 */ + /* EVEX_W_0F3A18 */ { - { EVEX_LEN_TABLE (EVEX_LEN_0F3A18_P_2_W_0) }, - { EVEX_LEN_TABLE (EVEX_LEN_0F3A18_P_2_W_1) }, + { EVEX_LEN_TABLE (EVEX_LEN_0F3A18_W_0) }, + { EVEX_LEN_TABLE (EVEX_LEN_0F3A18_W_1) }, }, - /* EVEX_W_0F3A19_P_2 */ + /* EVEX_W_0F3A19 */ { - { EVEX_LEN_TABLE (EVEX_LEN_0F3A19_P_2_W_0) }, - { EVEX_LEN_TABLE (EVEX_LEN_0F3A19_P_2_W_1) }, + { EVEX_LEN_TABLE (EVEX_LEN_0F3A19_W_0) }, + { EVEX_LEN_TABLE (EVEX_LEN_0F3A19_W_1) }, }, - /* EVEX_W_0F3A1A_P_2 */ + /* EVEX_W_0F3A1A */ { - { EVEX_LEN_TABLE (EVEX_LEN_0F3A1A_P_2_W_0) }, - { EVEX_LEN_TABLE (EVEX_LEN_0F3A1A_P_2_W_1) }, + { EVEX_LEN_TABLE (EVEX_LEN_0F3A1A_W_0) }, + { EVEX_LEN_TABLE (EVEX_LEN_0F3A1A_W_1) }, }, - /* EVEX_W_0F3A1B_P_2 */ + /* EVEX_W_0F3A1B */ { - { EVEX_LEN_TABLE (EVEX_LEN_0F3A1B_P_2_W_0) }, - { EVEX_LEN_TABLE (EVEX_LEN_0F3A1B_P_2_W_1) }, + { EVEX_LEN_TABLE (EVEX_LEN_0F3A1B_W_0) }, + { EVEX_LEN_TABLE (EVEX_LEN_0F3A1B_W_1) }, }, - /* EVEX_W_0F3A1D_P_2 */ + /* EVEX_W_0F3A21 */ { - { "vcvtps2ph", { EXxmmq, XM, EXxEVexS, Ib }, 0 }, + { EVEX_LEN_TABLE (EVEX_LEN_0F3A21_W_0) }, }, - /* EVEX_W_0F3A21_P_2 */ + /* EVEX_W_0F3A23 */ { - { "vinsertps", { XMM, Vex, EXxmm_md, Ib }, 0 }, + { EVEX_LEN_TABLE (EVEX_LEN_0F3A23_W_0) }, + { EVEX_LEN_TABLE (EVEX_LEN_0F3A23_W_1) }, }, - /* EVEX_W_0F3A23_P_2 */ + /* EVEX_W_0F3A38 */ { - { EVEX_LEN_TABLE (EVEX_LEN_0F3A23_P_2_W_0) }, - { EVEX_LEN_TABLE (EVEX_LEN_0F3A23_P_2_W_1) }, + { EVEX_LEN_TABLE (EVEX_LEN_0F3A38_W_0) }, + { EVEX_LEN_TABLE (EVEX_LEN_0F3A38_W_1) }, }, - /* EVEX_W_0F3A38_P_2 */ + /* EVEX_W_0F3A39 */ { - { EVEX_LEN_TABLE (EVEX_LEN_0F3A38_P_2_W_0) }, - { EVEX_LEN_TABLE (EVEX_LEN_0F3A38_P_2_W_1) }, + { EVEX_LEN_TABLE (EVEX_LEN_0F3A39_W_0) }, + { EVEX_LEN_TABLE (EVEX_LEN_0F3A39_W_1) }, }, - /* EVEX_W_0F3A39_P_2 */ + /* EVEX_W_0F3A3A */ { - { EVEX_LEN_TABLE (EVEX_LEN_0F3A39_P_2_W_0) }, - { EVEX_LEN_TABLE (EVEX_LEN_0F3A39_P_2_W_1) }, + { EVEX_LEN_TABLE (EVEX_LEN_0F3A3A_W_0) }, + { EVEX_LEN_TABLE (EVEX_LEN_0F3A3A_W_1) }, }, - /* EVEX_W_0F3A3A_P_2 */ + /* EVEX_W_0F3A3B */ { - { EVEX_LEN_TABLE (EVEX_LEN_0F3A3A_P_2_W_0) }, - { EVEX_LEN_TABLE (EVEX_LEN_0F3A3A_P_2_W_1) }, + { EVEX_LEN_TABLE (EVEX_LEN_0F3A3B_W_0) }, + { EVEX_LEN_TABLE (EVEX_LEN_0F3A3B_W_1) }, }, - /* EVEX_W_0F3A3B_P_2 */ - { - { EVEX_LEN_TABLE (EVEX_LEN_0F3A3B_P_2_W_0) }, - { EVEX_LEN_TABLE (EVEX_LEN_0F3A3B_P_2_W_1) }, - }, - /* EVEX_W_0F3A3E_P_2 */ - { - { "vpcmpub", { XMask, Vex, EXx, VPCMP }, 0 }, - { "vpcmpuw", { XMask, Vex, EXx, VPCMP }, 0 }, - }, - /* EVEX_W_0F3A3F_P_2 */ - { - { "vpcmpb", { XMask, Vex, EXx, VPCMP }, 0 }, - { "vpcmpw", { XMask, Vex, EXx, VPCMP }, 0 }, - }, - /* EVEX_W_0F3A42_P_2 */ + /* EVEX_W_0F3A42 */ { { "vdbpsadbw", { XM, Vex, EXx, Ib }, 0 }, }, - /* EVEX_W_0F3A43_P_2 */ - { - { EVEX_LEN_TABLE (EVEX_LEN_0F3A43_P_2_W_0) }, - { EVEX_LEN_TABLE (EVEX_LEN_0F3A43_P_2_W_1) }, - }, - /* EVEX_W_0F3A50_P_2 */ - { - { "vrangeps", { XM, Vex, EXx, EXxEVexS, Ib }, 0 }, - { "vrangepd", { XM, Vex, EXx, EXxEVexS, Ib }, 0 }, - }, - /* EVEX_W_0F3A51_P_2 */ - { - { "vrangess", { XMScalar, VexScalar, EXxmm_md, EXxEVexS, Ib }, 0 }, - { "vrangesd", { XMScalar, VexScalar, EXxmm_mq, EXxEVexS, Ib }, 0 }, - }, - /* EVEX_W_0F3A56_P_2 */ - { - { "vreduceps", { XM, EXx, EXxEVexS, Ib }, 0 }, - { "vreducepd", { XM, EXx, EXxEVexS, Ib }, 0 }, - }, - /* EVEX_W_0F3A57_P_2 */ - { - { "vreducess", { XMScalar, VexScalar, EXxmm_md, EXxEVexS, Ib }, 0 }, - { "vreducesd", { XMScalar, VexScalar, EXxmm_mq, EXxEVexS, Ib }, 0 }, - }, - /* EVEX_W_0F3A66_P_2 */ + /* EVEX_W_0F3A43 */ { - { "vfpclassps%XZ", { XMask, EXx, Ib }, 0 }, - { "vfpclasspd%XZ", { XMask, EXx, Ib }, 0 }, + { EVEX_LEN_TABLE (EVEX_LEN_0F3A43_W_0) }, + { EVEX_LEN_TABLE (EVEX_LEN_0F3A43_W_1) }, }, - /* EVEX_W_0F3A67_P_2 */ - { - { "vfpclassss", { XMask, EXxmm_md, Ib }, 0 }, - { "vfpclasssd", { XMask, EXxmm_mq, Ib }, 0 }, - }, - /* EVEX_W_0F3A70_P_2 */ + /* EVEX_W_0F3A70 */ { { Bad_Opcode }, { "vpshldw", { XM, Vex, EXx, Ib }, 0 }, }, - /* EVEX_W_0F3A71_P_2 */ - { - { "vpshldd", { XM, Vex, EXx, Ib }, 0 }, - { "vpshldq", { XM, Vex, EXx, Ib }, 0 }, - }, - /* EVEX_W_0F3A72_P_2 */ + /* EVEX_W_0F3A72 */ { { Bad_Opcode }, { "vpshrdw", { XM, Vex, EXx, Ib }, 0 }, }, - /* EVEX_W_0F3A73_P_2 */ - { - { "vpshrdd", { XM, Vex, EXx, Ib }, 0 }, - { "vpshrdq", { XM, Vex, EXx, Ib }, 0 }, - }, - /* EVEX_W_0F3ACE_P_2 */ - { - { Bad_Opcode }, - { "vgf2p8affineqb", { XM, Vex, EXx, Ib }, 0 }, - }, - /* EVEX_W_0F3ACF_P_2 */ - { - { Bad_Opcode }, - { "vgf2p8affineinvqb", { XM, Vex, EXx, Ib }, 0 }, - }, diff -Nru gdb-9.1/opcodes/i386-gen.c gdb-10.2/opcodes/i386-gen.c --- gdb-9.1/opcodes/i386-gen.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/i386-gen.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2007-2019 Free Software Foundation, Inc. +/* Copyright (C) 2007-2020 Free Software Foundation, Inc. This file is part of the GNU opcodes library. @@ -90,9 +90,9 @@ { "CPU_K8_FLAGS", "CPU_ATHLON_FLAGS|CpuRdtscp|CPU_SSE2_FLAGS|CpuLM" }, { "CPU_AMDFAM10_FLAGS", - "CPU_K8_FLAGS|CpuFISTTP|CPU_SSE4A_FLAGS|CpuABM" }, + "CPU_K8_FLAGS|CpuFISTTP|CPU_SSE4A_FLAGS|CpuLZCNT|CpuPOPCNT" }, { "CPU_BDVER1_FLAGS", - "CPU_GENERIC64_FLAGS|CpuFISTTP|CpuRdtscp|CpuCX16|CPU_XOP_FLAGS|CpuABM|CpuLWP|CpuSVME|CpuAES|CpuPCLMUL|CpuLZCNT|CpuPRFCHW" }, + "CPU_GENERIC64_FLAGS|CpuFISTTP|CpuRdtscp|CpuCX16|CPU_XOP_FLAGS|CpuLZCNT|CpuPOPCNT|CpuLWP|CpuSVME|CpuAES|CpuPCLMUL|CpuPRFCHW" }, { "CPU_BDVER2_FLAGS", "CPU_BDVER1_FLAGS|CpuFMA|CpuBMI|CpuTBM|CpuF16C" }, { "CPU_BDVER3_FLAGS", @@ -100,11 +100,11 @@ { "CPU_BDVER4_FLAGS", "CPU_BDVER3_FLAGS|CpuAVX2|CpuMovbe|CpuBMI2|CpuRdRnd|CpuMWAITX" }, { "CPU_ZNVER1_FLAGS", - "CPU_GENERIC64_FLAGS|CpuFISTTP|CpuRdtscp|CpuCX16|CPU_AVX2_FLAGS|CpuSSE4A|CpuABM|CpuSVME|CpuAES|CpuPCLMUL|CpuLZCNT|CpuPRFCHW|CpuFMA|CpuBMI|CpuF16C|CpuXsaveopt|CpuFSGSBase|CpuMovbe|CpuBMI2|CpuRdRnd|CpuADX|CpuRdSeed|CpuSMAP|CpuSHA|CpuXSAVEC|CpuXSAVES|CpuClflushOpt|CpuCLZERO|CpuMWAITX" }, + "CPU_GENERIC64_FLAGS|CpuFISTTP|CpuRdtscp|CpuCX16|CPU_AVX2_FLAGS|CpuSSE4A|CpuLZCNT|CpuPOPCNT|CpuSVME|CpuAES|CpuPCLMUL|CpuPRFCHW|CpuFMA|CpuBMI|CpuF16C|CpuXsaveopt|CpuFSGSBase|CpuMovbe|CpuBMI2|CpuRdRnd|CpuADX|CpuRdSeed|CpuSMAP|CpuSHA|CpuXSAVEC|CpuXSAVES|CpuClflushOpt|CpuCLZERO|CpuMWAITX" }, { "CPU_ZNVER2_FLAGS", "CPU_ZNVER1_FLAGS|CpuCLWB|CpuRDPID|CpuRDPRU|CpuMCOMMIT|CpuWBNOINVD" }, { "CPU_BTVER1_FLAGS", - "CPU_GENERIC64_FLAGS|CpuFISTTP|CpuCX16|CpuRdtscp|CPU_SSSE3_FLAGS|CpuSSE4A|CpuABM|CpuPRFCHW|CpuCX16|CpuClflush|CpuFISTTP|CpuSVME|CpuLZCNT" }, + "CPU_GENERIC64_FLAGS|CpuFISTTP|CpuCX16|CpuRdtscp|CPU_SSSE3_FLAGS|CpuSSE4A|CpuLZCNT|CpuPOPCNT|CpuPRFCHW|CpuCX16|CpuClflush|CpuFISTTP|CpuSVME" }, { "CPU_BTVER2_FLAGS", "CPU_BTVER1_FLAGS|CPU_AVX_FLAGS|CpuBMI|CpuF16C|CpuAES|CpuPCLMUL|CpuMovbe|CpuXsaveopt|CpuPRFCHW" }, { "CPU_8087_FLAGS", @@ -138,7 +138,7 @@ { "CPU_SSE4_1_FLAGS", "CPU_SSSE3_FLAGS|CpuSSE4_1" }, { "CPU_SSE4_2_FLAGS", - "CPU_SSE4_1_FLAGS|CpuSSE4_2" }, + "CPU_SSE4_1_FLAGS|CpuSSE4_2|CpuPOPCNT" }, { "CPU_VMX_FLAGS", "CpuVMX" }, { "CPU_SMX_FLAGS", @@ -181,6 +181,8 @@ "CpuBMI2" }, { "CPU_LZCNT_FLAGS", "CpuLZCNT" }, + { "CPU_POPCNT_FLAGS", + "CpuPOPCNT" }, { "CPU_HLE_FLAGS", "CpuHLE" }, { "CPU_RTM_FLAGS", @@ -200,7 +202,7 @@ { "CPU_SSE4A_FLAGS", "CPU_SSE3_FLAGS|CpuSSE4a" }, { "CPU_ABM_FLAGS", - "CpuABM" }, + "CpuLZCNT|CpuPOPCNT" }, { "CPU_AVX_FLAGS", "CPU_SSE4_2_FLAGS|CPU_XSAVE_FLAGS|CpuAVX" }, { "CPU_AVX2_FLAGS", @@ -295,18 +297,30 @@ "CpuWAITPKG" }, { "CPU_CLDEMOTE_FLAGS", "CpuCLDEMOTE" }, + { "CPU_AMX_INT8_FLAGS", + "CpuAMX_INT8" }, + { "CPU_AMX_BF16_FLAGS", + "CpuAMX_BF16" }, + { "CPU_AMX_TILE_FLAGS", + "CpuAMX_TILE" }, { "CPU_MOVDIRI_FLAGS", "CpuMOVDIRI" }, { "CPU_MOVDIR64B_FLAGS", "CpuMOVDIR64B" }, { "CPU_ENQCMD_FLAGS", "CpuENQCMD" }, + { "CPU_SERIALIZE_FLAGS", + "CpuSERIALIZE" }, { "CPU_AVX512_VP2INTERSECT_FLAGS", "CpuAVX512_VP2INTERSECT" }, { "CPU_RDPRU_FLAGS", "CpuRDPRU" }, { "CPU_MCOMMIT_FLAGS", "CpuMCOMMIT" }, + { "CPU_SEV_ES_FLAGS", + "CpuSEV_ES" }, + { "CPU_TSXLDTRK_FLAGS", + "CpuTSXLDTRK"}, { "CPU_ANY_X87_FLAGS", "CPU_ANY_287_FLAGS|Cpu8087" }, { "CPU_ANY_287_FLAGS", @@ -322,17 +336,19 @@ { "CPU_ANY_MMX_FLAGS", "CPU_3DNOWA_FLAGS" }, { "CPU_ANY_SSE_FLAGS", - "CPU_ANY_SSE2_FLAGS|CpuSSE|CpuSSE4a" }, + "CPU_ANY_SSE2_FLAGS|CpuSSE" }, { "CPU_ANY_SSE2_FLAGS", "CPU_ANY_SSE3_FLAGS|CpuSSE2" }, { "CPU_ANY_SSE3_FLAGS", - "CPU_ANY_SSSE3_FLAGS|CpuSSE3" }, + "CPU_ANY_SSSE3_FLAGS|CpuSSE3|CpuSSE4a" }, { "CPU_ANY_SSSE3_FLAGS", "CPU_ANY_SSE4_1_FLAGS|CpuSSSE3" }, { "CPU_ANY_SSE4_1_FLAGS", "CPU_ANY_SSE4_2_FLAGS|CpuSSE4_1" }, { "CPU_ANY_SSE4_2_FLAGS", "CpuSSE4_2" }, + { "CPU_ANY_SSE4A_FLAGS", + "CpuSSE4a" }, { "CPU_ANY_AVX_FLAGS", "CPU_ANY_AVX2_FLAGS|CpuF16C|CpuFMA|CpuFMA4|CpuXOP|CpuAVX" }, { "CPU_ANY_AVX2_FLAGS", @@ -373,14 +389,24 @@ "CpuAVX512_BITALG" }, { "CPU_ANY_AVX512_BF16_FLAGS", "CpuAVX512_BF16" }, + { "CPU_ANY_AMX_INT8_FLAGS", + "CpuAMX_INT8" }, + { "CPU_ANY_AMX_BF16_FLAGS", + "CpuAMX_BF16" }, + { "CPU_ANY_AMX_TILE_FLAGS", + "CpuAMX_TILE|CpuAMX_INT8|CpuAMX_BF16" }, { "CPU_ANY_MOVDIRI_FLAGS", "CpuMOVDIRI" }, { "CPU_ANY_MOVDIR64B_FLAGS", "CpuMOVDIR64B" }, { "CPU_ANY_ENQCMD_FLAGS", "CpuENQCMD" }, + { "CPU_ANY_SERIALIZE_FLAGS", + "CpuSERIALIZE" }, { "CPU_ANY_AVX512_VP2INTERSECT_FLAGS", "CpuAVX512_VP2INTERSECT" }, + { "CPU_ANY_TSXLDTRK_FLAGS", + "CpuTSXLDTRK" }, }; static initializer operand_type_init[] = @@ -445,6 +471,8 @@ "Class=RegSIMD|Ymmword" }, { "OPERAND_TYPE_REGZMM", "Class=RegSIMD|Zmmword" }, + { "OPERAND_TYPE_REGTMM", + "Class=RegSIMD|Tmmword" }, { "OPERAND_TYPE_REGMASK", "Class=RegMask" }, { "OPERAND_TYPE_REGBND", @@ -534,7 +562,6 @@ BITFIELD (CpuSVME), BITFIELD (CpuVMX), BITFIELD (CpuSMX), - BITFIELD (CpuABM), BITFIELD (CpuXsave), BITFIELD (CpuXsaveopt), BITFIELD (CpuAES), @@ -555,6 +582,7 @@ BITFIELD (CpuF16C), BITFIELD (CpuBMI2), BITFIELD (CpuLZCNT), + BITFIELD (CpuPOPCNT), BITFIELD (CpuHLE), BITFIELD (CpuRTM), BITFIELD (CpuINVPCID), @@ -597,11 +625,17 @@ BITFIELD (CpuPCONFIG), BITFIELD (CpuWAITPKG), BITFIELD (CpuCLDEMOTE), + BITFIELD (CpuAMX_INT8), + BITFIELD (CpuAMX_BF16), + BITFIELD (CpuAMX_TILE), BITFIELD (CpuMOVDIRI), BITFIELD (CpuMOVDIR64B), BITFIELD (CpuENQCMD), + BITFIELD (CpuSERIALIZE), BITFIELD (CpuRDPRU), BITFIELD (CpuMCOMMIT), + BITFIELD (CpuSEV_ES), + BITFIELD (CpuTSXLDTRK), #ifdef CpuUnused BITFIELD (CpuUnused), #endif @@ -613,14 +647,12 @@ BITFIELD (W), BITFIELD (Load), BITFIELD (Modrm), - BITFIELD (ShortForm), BITFIELD (Jump), BITFIELD (FloatMF), BITFIELD (FloatR), BITFIELD (Size), BITFIELD (CheckRegSize), - BITFIELD (IgnoreSize), - BITFIELD (DefaultSize), + BITFIELD (MnemonicSize), BITFIELD (Anysize), BITFIELD (No_bSuf), BITFIELD (No_wSuf), @@ -644,14 +676,13 @@ BITFIELD (IsPrefix), BITFIELD (ImmExt), BITFIELD (NoRex64), - BITFIELD (Rex64), BITFIELD (Ugh), BITFIELD (Vex), BITFIELD (VexVVVV), BITFIELD (VexW), BITFIELD (VexOpcode), BITFIELD (VexSources), - BITFIELD (VecSIB), + BITFIELD (SIB), BITFIELD (SSE2AVX), BITFIELD (NoAVX), BITFIELD (EVex), @@ -662,12 +693,12 @@ BITFIELD (Disp8MemShift), BITFIELD (NoDefMask), BITFIELD (ImplicitQuadGroup), + BITFIELD (SwapSources), BITFIELD (Optimize), BITFIELD (ATTMnemonic), BITFIELD (ATTSyntax), BITFIELD (IntelSyntax), - BITFIELD (AMD64), - BITFIELD (Intel64), + BITFIELD (ISA64), }; #define CLASS(n) #n, n @@ -727,6 +758,7 @@ BITFIELD (Xmmword), BITFIELD (Ymmword), BITFIELD (Zmmword), + BITFIELD (Tmmword), BITFIELD (Unspecified), #ifdef OTUnused BITFIELD (OTUnused), @@ -737,6 +769,31 @@ static i386_cpu_flags active_cpu_flags; static int active_isstring; +struct template_arg { + const struct template_arg *next; + const char *val; +}; + +struct template_instance { + const struct template_instance *next; + const char *name; + const struct template_arg *args; +}; + +struct template_param { + const struct template_param *next; + const char *name; +}; + +struct template { + const struct template *next; + const char *name; + const struct template_instance *instances; + const struct template_param *params; +}; + +static const struct template *templates; + static int compare (const void *x, const void *y) { @@ -761,7 +818,7 @@ process_copyright (FILE *fp) { fprintf (fp, "/* This file is automatically generated by i386-gen. Do not edit! */\n\ -/* Copyright (C) 2007-2019 Free Software Foundation, Inc.\n\ +/* Copyright (C) 2007-2020 Free Software Foundation, Inc.\n\ \n\ This file is part of the GNU opcodes library.\n\ \n\ @@ -868,6 +925,10 @@ { unsigned int i; + /* Ignore empty fields; they may result from template expansions. */ + if (*f == '\0') + return; + if (strcmp (f, "CpuFP") == 0) { set_bitfield("Cpu387", array, value, size, lineno); @@ -1236,7 +1297,8 @@ if (!active_cpu_flags.bitfield.cpu64 && !active_cpu_flags.bitfield.cpumpx) set_bitfield("Disp16", types, 1, ARRAY_SIZE (types), lineno); - set_bitfield("Disp32", types, 1, ARRAY_SIZE (types), lineno); + if (!active_cpu_flags.bitfield.cpu64) + set_bitfield("Disp32", types, 1, ARRAY_SIZE (types), lineno); if (!active_cpu_flags.bitfield.cpuno64) set_bitfield("Disp32S", types, 1, ARRAY_SIZE (types), lineno); } @@ -1370,25 +1432,254 @@ } static void +parse_template (char *buf, int lineno) +{ + char sep, *end, *name; + struct template *tmpl = xmalloc (sizeof (*tmpl)); + struct template_instance *last_inst = NULL; + + buf = remove_leading_whitespaces (buf + 1); + end = strchr (buf, ':'); + if (end == NULL) + fail ("%s: %d: missing ':'\n", filename, lineno); + *end++ = '\0'; + remove_trailing_whitespaces (buf); + + if (*buf == '\0') + fail ("%s: %d: missing template identifier\n", filename, lineno); + tmpl->name = xstrdup (buf); + + tmpl->params = NULL; + do { + struct template_param *param; + + buf = remove_leading_whitespaces (end); + end = strpbrk (buf, ":,"); + if (end == NULL) + fail ("%s: %d: missing ':' or ','\n", filename, lineno); + + sep = *end; + *end++ = '\0'; + remove_trailing_whitespaces (buf); + + param = xmalloc (sizeof (*param)); + param->name = xstrdup (buf); + param->next = tmpl->params; + tmpl->params = param; + } while (sep == ':'); + + tmpl->instances = NULL; + do { + struct template_instance *inst; + char *cur, *next; + const struct template_param *param; + + buf = remove_leading_whitespaces (end); + end = strpbrk (buf, ",>"); + if (end == NULL) + fail ("%s: %d: missing ',' or '>'\n", filename, lineno); + + sep = *end; + *end++ = '\0'; + + inst = xmalloc (sizeof (*inst)); + + cur = next_field (buf, ':', &next, end); + inst->name = xstrdup (cur); + + for (param = tmpl->params; param; param = param->next) + { + struct template_arg *arg = xmalloc (sizeof (*arg)); + + cur = next_field (next, ':', &next, end); + if (next > end) + fail ("%s: %d: missing argument for '%s'\n", filename, lineno, param->name); + arg->val = xstrdup (cur); + arg->next = inst->args; + inst->args = arg; + } + + if (tmpl->instances) + last_inst->next = inst; + else + tmpl->instances = inst; + last_inst = inst; + } while (sep == ','); + + buf = remove_leading_whitespaces (end); + if (*buf) + fprintf(stderr, "%s: %d: excess characters '%s'\n", + filename, lineno, buf); + + tmpl->next = templates; + templates = tmpl; +} + +static unsigned int +expand_templates (char *name, const char *str, htab_t opcode_hash_table, + struct opcode_hash_entry ***opcode_array_p, int lineno) +{ + static unsigned int idx, opcode_array_size; + struct opcode_hash_entry **opcode_array = *opcode_array_p; + struct opcode_hash_entry **hash_slot, **entry; + char *ptr1 = strchr(name, '<'), *ptr2; + + if (ptr1 == NULL) + { + /* Get the slot in hash table. */ + hash_slot = (struct opcode_hash_entry **) + htab_find_slot_with_hash (opcode_hash_table, name, + htab_hash_string (name), + INSERT); + + if (*hash_slot == NULL) + { + /* It is the new one. Put it on opcode array. */ + if (idx >= opcode_array_size) + { + /* Grow the opcode array when needed. */ + opcode_array_size += 1024; + opcode_array = (struct opcode_hash_entry **) + xrealloc (opcode_array, + sizeof (*opcode_array) * opcode_array_size); + *opcode_array_p = opcode_array; + } + + opcode_array[idx] = (struct opcode_hash_entry *) + xmalloc (sizeof (struct opcode_hash_entry)); + opcode_array[idx]->next = NULL; + opcode_array[idx]->name = xstrdup (name); + opcode_array[idx]->opcode = xstrdup (str); + opcode_array[idx]->lineno = lineno; + *hash_slot = opcode_array[idx]; + idx++; + } + else + { + /* Append it to the existing one. */ + entry = hash_slot; + while ((*entry) != NULL) + entry = &(*entry)->next; + *entry = (struct opcode_hash_entry *) + xmalloc (sizeof (struct opcode_hash_entry)); + (*entry)->next = NULL; + (*entry)->name = (*hash_slot)->name; + (*entry)->opcode = xstrdup (str); + (*entry)->lineno = lineno; + } + } + else if ((ptr2 = strchr(ptr1 + 1, '>')) == NULL) + fail ("%s: %d: missing '>'\n", filename, lineno); + else + { + const struct template *tmpl; + const struct template_instance *inst; + + *ptr1 = '\0'; + ptr1 = remove_leading_whitespaces (ptr1 + 1); + remove_trailing_whitespaces (ptr1); + + *ptr2++ = '\0'; + + for ( tmpl = templates; tmpl; tmpl = tmpl->next ) + if (!strcmp(ptr1, tmpl->name)) + break; + if (!tmpl) + fail ("reference to unknown template '%s'\n", ptr1); + + for (inst = tmpl->instances; inst; inst = inst->next) + { + char *name2 = xmalloc(strlen(name) + strlen(inst->name) + strlen(ptr2) + 1); + char *str2 = xmalloc(2 * strlen(str)); + const char *src; + + strcpy (name2, name); + strcat (name2, inst->name); + strcat (name2, ptr2); + + for (ptr1 = str2, src = str; *src; ) + { + const char *ident = tmpl->name, *end; + const struct template_param *param; + const struct template_arg *arg; + + if ((*ptr1 = *src++) != '<') + { + ++ptr1; + continue; + } + while (ISSPACE(*src)) + ++src; + while (*ident && *src == *ident) + ++src, ++ident; + while (ISSPACE(*src)) + ++src; + if (*src != ':' || *ident != '\0') + { + memcpy (++ptr1, tmpl->name, ident - tmpl->name); + ptr1 += ident - tmpl->name; + continue; + } + while (ISSPACE(*++src)) + ; + + end = src; + while (*end != '\0' && !ISSPACE(*end) && *end != '>') + ++end; + + for (param = tmpl->params, arg = inst->args; param; + param = param->next, arg = arg->next) + { + if (end - src == strlen (param->name) + && !memcmp (src, param->name, end - src)) + { + src = end; + break; + } + } + + if (param == NULL) + fail ("template '%s' has no parameter '%.*s'\n", + tmpl->name, (int)(end - src), src); + + while (ISSPACE(*src)) + ++src; + if (*src != '>') + fail ("%s: %d: missing '>'\n", filename, lineno); + + memcpy(ptr1, arg->val, strlen(arg->val)); + ptr1 += strlen(arg->val); + ++src; + } + + *ptr1 = '\0'; + + expand_templates (name2, str2, opcode_hash_table, opcode_array_p, + lineno); + + free (str2); + free (name2); + } + } + + return idx; +} + +static void process_i386_opcodes (FILE *table) { FILE *fp; char buf[2048]; unsigned int i, j; char *str, *p, *last, *name; - struct opcode_hash_entry **hash_slot, **entry, *next; htab_t opcode_hash_table; - struct opcode_hash_entry **opcode_array; - unsigned int opcode_array_size = 1024; + struct opcode_hash_entry **opcode_array = NULL; int lineno = 0, marker = 0; filename = "i386-opc.tbl"; fp = stdin; i = 0; - opcode_array = (struct opcode_hash_entry **) - xmalloc (sizeof (*opcode_array) * opcode_array_size); - opcode_hash_table = htab_create_alloc (16, opcode_hash_hash, opcode_hash_eq, NULL, xcalloc, free); @@ -1440,6 +1731,9 @@ case '\0': continue; break; + case '<': + parse_template (p, lineno); + continue; default: if (!marker) continue; @@ -1451,51 +1745,15 @@ /* Find name. */ name = next_field (p, ',', &str, last); - /* Get the slot in hash table. */ - hash_slot = (struct opcode_hash_entry **) - htab_find_slot_with_hash (opcode_hash_table, name, - htab_hash_string (name), - INSERT); - - if (*hash_slot == NULL) - { - /* It is the new one. Put it on opcode array. */ - if (i >= opcode_array_size) - { - /* Grow the opcode array when needed. */ - opcode_array_size += 1024; - opcode_array = (struct opcode_hash_entry **) - xrealloc (opcode_array, - sizeof (*opcode_array) * opcode_array_size); - } - - opcode_array[i] = (struct opcode_hash_entry *) - xmalloc (sizeof (struct opcode_hash_entry)); - opcode_array[i]->next = NULL; - opcode_array[i]->name = xstrdup (name); - opcode_array[i]->opcode = xstrdup (str); - opcode_array[i]->lineno = lineno; - *hash_slot = opcode_array[i]; - i++; - } - else - { - /* Append it to the existing one. */ - entry = hash_slot; - while ((*entry) != NULL) - entry = &(*entry)->next; - *entry = (struct opcode_hash_entry *) - xmalloc (sizeof (struct opcode_hash_entry)); - (*entry)->next = NULL; - (*entry)->name = (*hash_slot)->name; - (*entry)->opcode = xstrdup (str); - (*entry)->lineno = lineno; - } + i = expand_templates (name, str, opcode_hash_table, &opcode_array, + lineno); } /* Process opcode array. */ for (j = 0; j < i; j++) { + struct opcode_hash_entry *next; + for (next = opcode_array[j]; next; next = next->next) { name = next->name; diff -Nru gdb-9.1/opcodes/i386-init.h gdb-10.2/opcodes/i386-init.h --- gdb-9.1/opcodes/i386-init.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/i386-init.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* This file is automatically generated by i386-gen. Do not edit! */ -/* Copyright (C) 2007-2019 Free Software Foundation, Inc. +/* Copyright (C) 2007-2020 Free Software Foundation, Inc. This file is part of the GNU opcodes library. @@ -21,10 +21,10 @@ #define CPU_UNKNOWN_FLAGS \ { { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \ - 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \ + 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \ - 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1 } } + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1 } } #define CPU_GENERIC32_FLAGS \ { { 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -32,7 +32,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_GENERIC64_FLAGS \ { { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, \ @@ -40,7 +40,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 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, \ @@ -48,7 +48,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_I186_FLAGS \ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -56,7 +56,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_I286_FLAGS \ { { 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -64,7 +64,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_I386_FLAGS \ { { 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -72,7 +72,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_I486_FLAGS \ { { 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -80,7 +80,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_I586_FLAGS \ { { 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, \ @@ -88,7 +88,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_I686_FLAGS \ { { 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, \ @@ -96,7 +96,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_PENTIUMPRO_FLAGS \ { { 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, \ @@ -104,7 +104,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_P2_FLAGS \ { { 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, \ @@ -112,7 +112,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_P3_FLAGS \ { { 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, \ @@ -120,7 +120,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_P4_FLAGS \ { { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, \ @@ -128,39 +128,39 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_NOCONA_FLAGS \ { { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, \ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_CORE_FLAGS \ { { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, \ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } #define CPU_CORE2_FLAGS \ { { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, \ 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_COREI7_FLAGS \ { { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, \ - 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 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, \ @@ -168,7 +168,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #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, \ @@ -176,7 +176,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_ATHLON_FLAGS \ { { 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, \ @@ -184,87 +184,87 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_K8_FLAGS \ { { 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, \ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_AMDFAM10_FLAGS \ { { 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, \ - 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_BDVER1_FLAGS \ { { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, \ - 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, \ - 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_BDVER2_FLAGS \ { { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, \ - 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, \ - 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, \ + 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_BDVER3_FLAGS \ { { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, \ - 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, \ - 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, \ + 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_BDVER4_FLAGS \ { { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, \ - 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, \ + 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, \ 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, \ + 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, \ 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, \ + 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, \ 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 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, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0 } } #define CPU_BTVER1_FLAGS \ { { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, \ - 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_BTVER2_FLAGS \ { { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, \ - 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, \ - 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, \ + 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 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, \ @@ -272,7 +272,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_287_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, \ @@ -280,7 +280,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_387_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, \ @@ -288,7 +288,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_687_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, \ @@ -296,7 +296,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_CMOV_FLAGS \ { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -304,7 +304,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_FXSR_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -312,7 +312,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_CLFLUSH_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -320,7 +320,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_NOP_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -328,7 +328,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_SYSCALL_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -336,7 +336,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_MMX_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, \ @@ -344,7 +344,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_SSE_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, \ @@ -352,7 +352,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_SSE2_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ @@ -360,7 +360,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_SSE3_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ @@ -368,7 +368,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_SSSE3_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ @@ -376,23 +376,23 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_SSE4_1_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ - 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_SSE4_2_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ - 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 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, \ @@ -400,7 +400,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_SMX_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -408,159 +408,167 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_XSAVE_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 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 } } #define CPU_XSAVEOPT_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_AES_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 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 } } #define CPU_PCLMUL_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 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 } } #define CPU_FMA_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ - 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_FMA4_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ - 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_XOP_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ - 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_LWP_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_BMI_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } #define CPU_TBM_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } #define CPU_MOVBE_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } #define CPU_CX16_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } #define CPU_RDTSCP_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } #define CPU_EPT_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } #define CPU_FSGSBASE_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } #define CPU_RDRND_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } #define CPU_F16C_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ - 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_BMI2_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } #define CPU_LZCNT_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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 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, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, \ @@ -568,7 +576,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 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, \ @@ -576,7 +584,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 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, \ @@ -584,7 +592,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 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, \ @@ -592,7 +600,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 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, \ @@ -600,7 +608,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_3DNOWA_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, \ @@ -608,7 +616,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_PADLOCK_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -616,7 +624,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_SVME_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -624,7 +632,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_SSE4A_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ @@ -632,159 +640,159 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 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, \ - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_AVX_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ - 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_AVX2_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ - 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_AVX512F_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ - 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_AVX512CD_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ - 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, \ - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, \ + 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_AVX512ER_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ - 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, \ - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, \ + 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_AVX512PF_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ - 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, \ + 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_AVX512DQ_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ - 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, \ - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, \ + 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_AVX512BW_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ - 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, \ + 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_AVX512VL_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ - 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, \ - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, \ + 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_AVX512IFMA_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ - 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_AVX512VBMI_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ - 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_AVX512_4FMAPS_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ - 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_AVX512_4VNNIW_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ - 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_AVX512_VPOPCNTDQ_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ - 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_AVX512_VBMI2_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ - 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_AVX512_VNNI_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ - 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_AVX512_BITALG_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ - 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_AVX512_BF16_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ - 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_L1OM_FLAGS \ { { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \ @@ -792,7 +800,7 @@ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \ - 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1 } } + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1 } } #define CPU_K1OM_FLAGS \ { { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \ @@ -800,7 +808,7 @@ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \ - 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1 } } + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1 } } #define CPU_IAMCU_FLAGS \ { { 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -808,7 +816,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_ADX_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -816,7 +824,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 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, \ @@ -824,7 +832,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 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, \ @@ -832,7 +840,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 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, \ @@ -840,15 +848,15 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_MPX_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_SHA_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, \ @@ -856,7 +864,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 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, \ @@ -864,23 +872,23 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 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, \ @@ -888,7 +896,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 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, \ @@ -896,7 +904,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 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, \ @@ -904,7 +912,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 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, \ @@ -912,7 +920,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 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, \ @@ -920,15 +928,15 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_OSPKE_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 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, \ @@ -936,7 +944,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 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, \ @@ -944,7 +952,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 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, \ @@ -952,7 +960,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 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, \ @@ -960,39 +968,39 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_GFNI_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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_VAES_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, \ + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_VPCLMULQDQ_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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_WBNOINVD_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, 1, 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, \ @@ -1000,7 +1008,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 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 } } #define CPU_WAITPKG_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -1008,7 +1016,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 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 } } #define CPU_CLDEMOTE_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -1016,7 +1024,31 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } + +#define CPU_AMX_INT8_FLAGS \ + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + +#define CPU_AMX_BF16_FLAGS \ + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + +#define CPU_AMX_TILE_FLAGS \ + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, \ @@ -1024,7 +1056,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 1, 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, \ @@ -1032,7 +1064,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 1, 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_ENQCMD_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -1040,7 +1072,15 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } + +#define CPU_SERIALIZE_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, 1, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_AVX512_VP2INTERSECT_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -1048,7 +1088,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_RDPRU_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -1056,7 +1096,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, \ @@ -1064,7 +1104,23 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } + +#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, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0 } } #define CPU_ANY_X87_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, \ @@ -1072,7 +1128,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #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, \ @@ -1080,7 +1136,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #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, \ @@ -1088,7 +1144,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #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, \ @@ -1096,7 +1152,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_ANY_CMOV_FLAGS \ { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -1104,7 +1160,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_ANY_FXSR_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -1112,7 +1168,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #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, \ @@ -1120,127 +1176,135 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 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, \ - 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 1, 0, 0, 0, 0, 1, 1, 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 } } #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, \ - 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 1, 0, 0, 0, 0, 1, 1, 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 } } #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, \ - 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 1, 0, 0, 0, 0, 1, 1, 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 } } #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, \ - 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 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, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 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, \ - 0, 0, 0, 0, 0, 0, 0, 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 } } + +#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, \ + 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, \ - 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, \ + 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, \ 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, 1, 1, 1, 1, 1, \ + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, \ 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, 1, 1, 1, 1, \ + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, \ 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 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, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } #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, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } #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, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } #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, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } #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, 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 } } #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, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } #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, \ @@ -1248,7 +1312,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 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, \ @@ -1256,7 +1320,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 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, \ @@ -1264,7 +1328,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 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, \ @@ -1272,7 +1336,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_ANY_AVX512_VPOPCNTDQ_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -1280,7 +1344,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_ANY_IBT_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -1288,7 +1352,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_ANY_SHSTK_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -1296,7 +1360,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_ANY_AVX512_VBMI2_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -1304,7 +1368,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_ANY_AVX512_VNNI_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -1312,7 +1376,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_ANY_AVX512_BITALG_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -1320,7 +1384,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 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, \ @@ -1328,7 +1392,31 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + +#define CPU_ANY_AMX_INT8_FLAGS \ + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + +#define CPU_ANY_AMX_BF16_FLAGS \ + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + +#define CPU_ANY_AMX_TILE_FLAGS \ + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_ANY_MOVDIRI_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -1336,7 +1424,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_ANY_MOVDIR64B_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -1344,7 +1432,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_ANY_ENQCMD_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -1352,7 +1440,15 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } + +#define CPU_ANY_SERIALIZE_FLAGS \ + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 } } #define CPU_ANY_AVX512_VP2INTERSECT_FLAGS \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -1360,193 +1456,205 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + +#define CPU_ANY_TSXLDTRK_FLAGS \ + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0 } } #define OPERAND_TYPE_NONE \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0 } } #define OPERAND_TYPE_REG8 \ { { 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 } } #define OPERAND_TYPE_REG16 \ { { 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 } } #define OPERAND_TYPE_REG32 \ { { 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 } } #define OPERAND_TYPE_REG64 \ { { 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 } } #define OPERAND_TYPE_IMM1 \ { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0 } } #define OPERAND_TYPE_IMM8 \ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0 } } #define OPERAND_TYPE_IMM8S \ { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0 } } #define OPERAND_TYPE_IMM16 \ { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0 } } #define OPERAND_TYPE_IMM32 \ { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0 } } #define OPERAND_TYPE_IMM32S \ { { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0 } } #define OPERAND_TYPE_IMM64 \ { { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0 } } #define OPERAND_TYPE_BASEINDEX \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 OPERAND_TYPE_DISP8 \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 OPERAND_TYPE_DISP16 \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 OPERAND_TYPE_DISP32 \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 OPERAND_TYPE_DISP32S \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 OPERAND_TYPE_DISP64 \ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 OPERAND_TYPE_INOUTPORTREG \ { { 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0 } } #define OPERAND_TYPE_SHIFTCOUNT \ { { 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0 } } #define OPERAND_TYPE_CONTROL \ { { 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 } } #define OPERAND_TYPE_TEST \ { { 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0 } } #define OPERAND_TYPE_DEBUG \ { { 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0 } } #define OPERAND_TYPE_FLOATREG \ { { 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 } } + 1, 0, 0, 0, 0, 0, 0 } } #define OPERAND_TYPE_FLOATACC \ { { 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 } } + 1, 0, 0, 0, 0, 0, 0 } } #define OPERAND_TYPE_SREG \ { { 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 } } #define OPERAND_TYPE_REGMMX \ { { 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 } } #define OPERAND_TYPE_REGXMM \ { { 7, 0, 0, 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 } } #define OPERAND_TYPE_REGYMM \ { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 1, 0, 0, 0 } } + 0, 0, 1, 0, 0, 0, 0 } } #define OPERAND_TYPE_REGZMM \ { { 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, 1, 0, 0, 0 } } + +#define OPERAND_TYPE_REGTMM \ + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ + 0, 0, 0, 0, 1, 0, 0 } } #define OPERAND_TYPE_REGMASK \ { { 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 } } #define OPERAND_TYPE_REGBND \ { { 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 } } #define OPERAND_TYPE_ACC8 \ { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0 } } #define OPERAND_TYPE_ACC16 \ { { 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 } } #define OPERAND_TYPE_ACC32 \ { { 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 } } #define OPERAND_TYPE_ACC64 \ { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 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 OPERAND_TYPE_DISP16_32 \ { { 0, 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 } } #define OPERAND_TYPE_ANYDISP \ { { 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 } } #define OPERAND_TYPE_IMM16_32 \ { { 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 } } #define OPERAND_TYPE_IMM16_32S \ { { 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 } } #define OPERAND_TYPE_IMM16_32_32S \ { { 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0 } } #define OPERAND_TYPE_IMM32_64 \ { { 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 } } #define OPERAND_TYPE_IMM32_32S_DISP32 \ { { 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 } } + 0, 0, 0, 0, 0, 0, 0 } } #define OPERAND_TYPE_IMM64_DISP64 \ { { 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 } } #define OPERAND_TYPE_IMM32_32S_64_DISP32 \ { { 0, 0, 0, 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 } } #define OPERAND_TYPE_IMM32_32S_64_DISP32_64 \ { { 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0 } } + 0, 0, 0, 0, 0, 0, 0 } } #define OPERAND_TYPE_ANYIMM \ { { 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 } } diff -Nru gdb-9.1/opcodes/i386-opc.c gdb-10.2/opcodes/i386-opc.c --- gdb-9.1/opcodes/i386-opc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/i386-opc.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Intel 80386 opcode table - Copyright (C) 2007-2019 Free Software Foundation, Inc. + Copyright (C) 2007-2020 Free Software Foundation, Inc. This file is part of the GNU opcodes library. diff -Nru gdb-9.1/opcodes/i386-opc.h gdb-10.2/opcodes/i386-opc.h --- gdb-9.1/opcodes/i386-opc.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/i386-opc.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Declarations for Intel 80386 opcode table - Copyright (C) 2007-2019 Free Software Foundation, Inc. + Copyright (C) 2007-2020 Free Software Foundation, Inc. This file is part of the GNU opcodes library. @@ -87,8 +87,10 @@ CpuSSSE3, /* SSE4a support required */ CpuSSE4a, - /* ABM New Instructions required */ - CpuABM, + /* LZCNT support required */ + CpuLZCNT, + /* POPCNT support required */ + CpuPOPCNT, /* SSE4.1 support required */ CpuSSE4_1, /* SSE4.2 support required */ @@ -154,8 +156,6 @@ CpuF16C, /* Intel BMI2 support required */ CpuBMI2, - /* LZCNT support required */ - CpuLZCNT, /* HLE support required */ CpuHLE, /* RTM support required */ @@ -223,6 +223,12 @@ /* CET instructions support required */ CpuIBT, CpuSHSTK, + /* AMX-INT8 instructions required */ + CpuAMX_INT8, + /* AMX-BF16 instructions required */ + CpuAMX_BF16, + /* AMX-TILE instructions required */ + CpuAMX_TILE, /* GFNI instructions required */ CpuGFNI, /* VAES instructions required */ @@ -243,10 +249,16 @@ CpuMOVDIR64B, /* ENQCMD instruction required */ CpuENQCMD, + /* SERIALIZE instruction required */ + CpuSERIALIZE, /* RDPRU instruction required */ CpuRDPRU, /* MCOMMIT instruction required */ CpuMCOMMIT, + /* SEV-ES instruction(s) required */ + CpuSEV_ES, + /* TSXLDTRK instruction required */ + CpuTSXLDTRK, /* 64bit support required */ Cpu64, /* Not supported in the 64bit mode */ @@ -298,7 +310,8 @@ unsigned int cpusmx:1; unsigned int cpussse3:1; unsigned int cpusse4a:1; - unsigned int cpuabm:1; + unsigned int cpulzcnt:1; + unsigned int cpupopcnt:1; unsigned int cpusse4_1:1; unsigned int cpusse4_2:1; unsigned int cpuavx:1; @@ -331,7 +344,6 @@ unsigned int cpurdrnd:1; unsigned int cpuf16c:1; unsigned int cpubmi2:1; - unsigned int cpulzcnt:1; unsigned int cpuhle:1; unsigned int cpurtm:1; unsigned int cpuinvpcid:1; @@ -366,6 +378,9 @@ unsigned int cpuptwrite:1; unsigned int cpuibt:1; unsigned int cpushstk:1; + unsigned int cpuamx_int8:1; + unsigned int cpuamx_bf16:1; + unsigned int cpuamx_tile:1; unsigned int cpugfni:1; unsigned int cpuvaes:1; unsigned int cpuvpclmulqdq:1; @@ -376,8 +391,11 @@ unsigned int cpumovdiri:1; unsigned int cpumovdir64b:1; unsigned int cpuenqcmd:1; + unsigned int cpuserialize:1; unsigned int cpurdpru:1; unsigned int cpumcommit:1; + unsigned int cpusev_es:1; + unsigned int cputsxldtrk:1; unsigned int cpu64:1; unsigned int cpuno64:1; #ifdef CpuUnused @@ -401,8 +419,6 @@ Load, /* insn has a modrm byte. */ Modrm, - /* register is in low 3 bits of opcode */ - ShortForm, /* special case for jump insns; value has to be 1 */ #define JUMP 1 /* call and jump */ @@ -429,9 +445,10 @@ CheckRegSize, /* instruction ignores operand size prefix and in Intel mode ignores mnemonic size suffix check. */ - IgnoreSize, +#define IGNORESIZE 1 /* default insn size depends on mode */ - DefaultSize, +#define DEFAULTSIZE 2 + MnemonicSize, /* any memory size */ Anysize, /* b suffix on instruction illegal */ @@ -494,8 +511,6 @@ ImmExt, /* instruction don't need Rex64 prefix. */ NoRex64, - /* instruction require Rex64 prefix. */ - Rex64, /* deprecated fp insn, gets a warning */ Ugh, /* insn has VEX prefix: @@ -560,15 +575,17 @@ #define XOP2SOURCES 1 #define VEX3SOURCES 2 VexSources, - /* Instruction with vector SIB byte: + /* Instruction with a mandatory SIB byte: 1: 128bit vector register. 2: 256bit vector register. 3: 512bit vector register. */ -#define VecSIB128 1 -#define VecSIB256 2 -#define VecSIB512 3 - VecSIB, +#define VECSIB128 1 +#define VECSIB256 2 +#define VECSIB512 3 +#define SIBMEM 4 + SIB, + /* SSE to AVX support required */ SSE2AVX, /* No AVX equivalent */ @@ -629,6 +646,9 @@ */ ImplicitQuadGroup, + /* Two source operands are swapped. */ + SwapSources, + /* Support encoding optimization. */ Optimize, @@ -638,10 +658,16 @@ ATTSyntax, /* Intel syntax. */ IntelSyntax, - /* AMD64. */ - AMD64, - /* Intel64. */ - Intel64, + /* ISA64: Don't change the order without other code adjustments. + 0: Common to AMD64 and Intel64. + 1: AMD64. + 2: Intel64. + 3: Only in Intel64. + */ +#define AMD64 1 +#define INTEL64 2 +#define INTEL64ONLY 3 + ISA64, /* The last bitfield in i386_opcode_modifier. */ Opcode_Modifier_Num }; @@ -652,14 +678,12 @@ unsigned int w:1; unsigned int load:1; unsigned int modrm:1; - unsigned int shortform:1; unsigned int jump:3; unsigned int floatmf:1; unsigned int floatr:1; unsigned int size:2; unsigned int checkregsize:1; - unsigned int ignoresize:1; - unsigned int defaultsize:1; + unsigned int mnemonicsize:2; unsigned int anysize:1; unsigned int no_bsuf:1; unsigned int no_wsuf:1; @@ -683,14 +707,13 @@ unsigned int isprefix:1; unsigned int immext:1; unsigned int norex64:1; - unsigned int rex64:1; unsigned int ugh:1; unsigned int vex:2; unsigned int vexvvvv:2; unsigned int vexw:2; unsigned int vexopcode:3; unsigned int vexsources:2; - unsigned int vecsib:2; + unsigned int sib:3; unsigned int sse2avx:1; unsigned int noavx:1; unsigned int evex:3; @@ -701,12 +724,12 @@ unsigned int disp8memshift:3; unsigned int nodefmask:1; unsigned int implicitquadgroup:1; + unsigned int swapsources:1; unsigned int optimize:1; unsigned int attmnemonic:1; unsigned int attsyntax:1; unsigned int intelsyntax:1; - unsigned int amd64:1; - unsigned int intel64:1; + unsigned int isa64:2; } i386_opcode_modifier; /* Operand classes. */ @@ -795,6 +818,8 @@ Ymmword, /* ZMMWORD size. */ Zmmword, + /* TMMWORD size. */ + Tmmword, /* Unspecified memory size. */ Unspecified, @@ -839,6 +864,7 @@ unsigned int xmmword:1; unsigned int ymmword:1; unsigned int zmmword:1; + unsigned int tmmword:1; unsigned int unspecified:1; #ifdef OTUnused unsigned int unused:(OTNumOfBits - OTUnused); @@ -863,6 +889,18 @@ #define Opcode_SIMD_FloatD 0x1 /* Direction bit for SIMD fp insns. */ #define Opcode_SIMD_IntD 0x10 /* Direction bit for SIMD int insns. */ +/* Pseudo prefixes. */ +#define Prefix_Disp8 0 /* {disp8} */ +#define Prefix_Disp16 1 /* {disp16} */ +#define Prefix_Disp32 2 /* {disp32} */ +#define Prefix_Load 3 /* {load} */ +#define Prefix_Store 4 /* {store} */ +#define Prefix_VEX 5 /* {vex} */ +#define Prefix_VEX3 6 /* {vex3} */ +#define Prefix_EVEX 7 /* {evex} */ +#define Prefix_REX 8 /* {rex} */ +#define Prefix_NoOptimize 9 /* {nooptimize} */ + /* extension_opcode is the 3 bit extension for group <n> insns. This field is also used to store the 8-bit opcode suffix for the AMD 3DNow! instructions. @@ -898,7 +936,7 @@ /* these are for register name --> number & type hash lookup */ typedef struct { - char *reg_name; + const char *reg_name; i386_operand_type reg_type; unsigned char reg_flags; #define RegRex 0x1 /* Extended register. */ diff -Nru gdb-9.1/opcodes/i386-opc.tbl gdb-10.2/opcodes/i386-opc.tbl --- gdb-9.1/opcodes/i386-opc.tbl 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/i386-opc.tbl 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ // i386 opcode table. -// Copyright (C) 2007-2019 Free Software Foundation, Inc. +// Copyright (C) 2007-2020 Free Software Foundation, Inc. // // This file is part of the GNU opcodes library. // @@ -22,6 +22,10 @@ #include "i386-opc.h" #undef None +#define Amd64 ISA64=AMD64 +#define Intel64 ISA64=INTEL64 +#define Intel64Only ISA64=INTEL64ONLY + #define Reg8 Class=Reg|Byte #define Reg16 Class=Reg|Word #define Reg32 Class=Reg|Dword @@ -48,6 +52,7 @@ #define RegXMM Class=RegSIMD|Xmmword #define RegYMM Class=RegSIMD|Ymmword #define RegZMM Class=RegSIMD|Zmmword +#define RegTMM Class=RegSIMD|Tmmword #define RegMask Class=RegMask @@ -62,12 +67,17 @@ #define Size32 Size=SIZE32 #define Size64 Size=SIZE64 +#define IgnoreSize MnemonicSize=IGNORESIZE +#define DefaultSize MnemonicSize=DEFAULTSIZE + // RegMem implies a ModR/M byte #define RegMem Modrm|RegMem #define IsStringEsOp0 IsString=IS_STRING_ES_OP0 #define IsStringEsOp1 IsString=IS_STRING_ES_OP1 +#define AddrPrefixOpReg AddrPrefixOpReg|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf + #define VexW0 VexW=VEXW0 #define VexW1 VexW=VEXW1 #define VexWIG VexW=VEXWIG @@ -76,6 +86,11 @@ #define Vex256 Vex=VEX256 #define VexLIG Vex=VEXScalar +#define VecSIB128 SIB=VECSIB128 +#define VecSIB256 SIB=VECSIB256 +#define VecSIB512 SIB=VECSIB512 +#define Sibmem SIB=SIBMEM|Modrm + #define EVex128 EVex=EVEX128 #define EVex256 EVex=EVEX256 #define EVex512 EVex=EVEX512 @@ -90,16 +105,13 @@ ### MARKER ### // Move instructions. -// We put the 64bit displacement first and we only mark constants -// larger than 32bit as Disp64. -mov, 2, 0xa0, None, 1, Cpu64, D|W|No_sSuf|No_ldSuf, { Disp64|Unspecified|Byte|Word|Dword|Qword, Acc|Byte|Word|Dword|Qword } -mov, 2, 0xa0, None, 1, CpuNo64, D|W|No_sSuf|No_qSuf|No_ldSuf, { Disp16|Disp32|Unspecified|Byte|Word|Dword, Acc|Byte|Word|Dword } +mov, 2, 0xa0, None, 1, 0, D|W|No_sSuf|No_qSuf|No_ldSuf, { Disp16|Disp32|Disp64|Unspecified|Byte|Word|Dword|Qword, Acc|Byte|Word|Dword|Qword } mov, 2, 0x88, None, 1, 0, D|W|CheckRegSize|Modrm|No_sSuf|No_ldSuf|HLEPrefixOk=3, { Reg8|Reg16|Reg32|Reg64, Reg8|Reg16|Reg32|Reg64|Byte|Word|Dword|Qword|Unspecified|BaseIndex } // In the 64bit mode the short form mov immediate is redefined to have // 64bit value. -mov, 2, 0xb0, None, 1, 0, W|ShortForm|No_sSuf|No_qSuf|No_ldSuf, { Imm8|Imm16|Imm32|Imm32S, Reg8|Reg16|Reg32 } +mov, 2, 0xb0, None, 1, 0, W|No_sSuf|No_qSuf|No_ldSuf, { Imm8|Imm16|Imm32|Imm32S, Reg8|Reg16|Reg32 } mov, 2, 0xc6, 0x0, 1, 0, W|Modrm|No_sSuf|No_ldSuf|HLEPrefixOk=3|Optimize, { Imm8|Imm16|Imm32|Imm32S, Reg8|Reg16|Reg32|Reg64|Byte|Word|Dword|Qword|Unspecified|BaseIndex } -mov, 2, 0xb8, None, 1, Cpu64, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|Optimize, { Imm64, Reg64 } +mov, 2, 0xb8, None, 1, Cpu64, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|Optimize, { Imm64, Reg64 } // The segment register moves accept WordReg so that a segment register // can be copied to a 32 bit register, and vice versa, without using a // size prefix. When moving to a 32 bit register, the upper 16 bits @@ -116,7 +128,7 @@ mov, 2, 0xf21, None, 2, Cpu64, D|RegMem|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|NoRex64, { Debug, Reg64 } mov, 2, 0xf24, None, 2, Cpu386|CpuNo64, D|RegMem|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_qSuf|No_ldSuf, { Test, Reg32 } movabs, 2, 0xa0, None, 1, Cpu64, D|W|No_sSuf|No_ldSuf, { Disp64|Unspecified|Byte|Word|Dword|Qword, Acc|Byte|Word|Dword|Qword } -movabs, 2, 0xb8, None, 1, Cpu64, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_ldSuf, { Imm64, Reg64 } +movabs, 2, 0xb8, None, 1, Cpu64, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_ldSuf, { Imm64, Reg64 } // Move after swapping the bytes movbe, 2, 0x0f38f0, None, 3, CpuMovbe, Modrm|No_bSuf|No_sSuf|No_ldSuf, { Word|Dword|Qword|Unspecified|BaseIndex, Reg16|Reg32|Reg64 } @@ -128,51 +140,45 @@ movsbl, 2, 0xfbe, None, 2, Cpu386, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg8|Byte|Unspecified|BaseIndex, Reg32 } movsbw, 2, 0xfbe, None, 2, Cpu386, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg8|Byte|Unspecified|BaseIndex, Reg16 } movswl, 2, 0xfbf, None, 2, Cpu386, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg16|Word|Unspecified|BaseIndex, Reg32 } -movsbq, 2, 0xfbe, None, 2, Cpu64, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Rex64, { Reg8|Byte|Unspecified|BaseIndex, Reg64 } -movswq, 2, 0xfbf, None, 2, Cpu64, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Rex64, { Reg16|Word|Unspecified|BaseIndex, Reg64 } -movslq, 2, 0x63, None, 1, Cpu64, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Rex64, { Reg32|Dword|Unspecified|BaseIndex, Reg64 } -// Intel Syntax next 3 insns -movsx, 2, 0xfbe, None, 2, Cpu386, Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTSyntax, { Reg8|Unspecified|BaseIndex, Reg16|Reg32|Reg64 } -movsx, 2, 0xfbf, None, 2, Cpu386, Modrm|No_bSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTSyntax, { Reg16|Unspecified|BaseIndex, Reg32|Reg64 } -movsx, 2, 0x63, None, 1, Cpu64, Modrm|No_bSuf|No_wSuf|No_sSuf|No_qSuf|No_ldSuf|Rex64|ATTSyntax, { Reg32|Unspecified|BaseIndex, Reg64 } -movsx, 2, 0xfbe, None, 2, Cpu386, Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IntelSyntax, { Reg8|Byte|BaseIndex, Reg16|Reg32|Reg64 } -movsx, 2, 0xfbf, None, 2, Cpu386, Modrm|No_bSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IntelSyntax, { Reg16|Word|BaseIndex, Reg32|Reg64 } -movsx, 2, 0x63, None, 1, Cpu64, Modrm|No_bSuf|No_wSuf|No_sSuf|No_qSuf|No_ldSuf|Rex64|IntelSyntax, { Reg32|Dword|BaseIndex, Reg64 } -movsxd, 2, 0x63, None, 1, Cpu64, Modrm|No_bSuf|No_wSuf|No_sSuf|No_qSuf|No_ldSuf|Rex64, { Reg32|Dword|Unspecified|BaseIndex, Reg64 } +movsbq, 2, 0xfbe, None, 2, Cpu64, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Size64, { Reg8|Byte|Unspecified|BaseIndex, Reg64 } +movswq, 2, 0xfbf, None, 2, Cpu64, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Size64, { Reg16|Word|Unspecified|BaseIndex, Reg64 } +movslq, 2, 0x63, None, 1, Cpu64, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Size64, { Reg32|Dword|Unspecified|BaseIndex, Reg64 } +movsx, 2, 0xfbe, None, 2, Cpu386, W|Modrm|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg8|Reg16|Unspecified|BaseIndex, Reg16|Reg32|Reg64 } +movsx, 2, 0x63, None, 1, Cpu64, Modrm|No_bSuf|No_wSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg32|Unspecified|BaseIndex, Reg32|Reg64 } +movsxd, 2, 0x63, None, 1, Cpu64, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg32|Unspecified|BaseIndex, Reg32|Reg64 } +movsxd, 2, 0x63, None, 1, Cpu64, Amd64|Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg32|Unspecified|BaseIndex, Reg16 } +movsxd, 2, 0x63, None, 1, Cpu64, Intel64|Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg16|Unspecified|BaseIndex, Reg16 } // Move with zero extend. movzb, 2, 0xfb6, None, 2, Cpu386, Modrm|No_bSuf|No_sSuf|No_ldSuf, { Reg8|Byte|Unspecified|BaseIndex, Reg16|Reg32|Reg64 } movzw, 2, 0xfb7, None, 2, Cpu386, Modrm|No_bSuf|No_wSuf|No_sSuf|No_ldSuf, { Reg16|Word|Unspecified|BaseIndex, Reg32|Reg64 } -// Intel Syntax next 2 insns (the 64-bit variants are not particulary -// useful since the zero extend 32->64 is implicit, but we can encode them). -movzx, 2, 0xfb6, None, 2, Cpu386, Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTSyntax, { Reg8|Unspecified|BaseIndex, Reg16|Reg32|Reg64 } -movzx, 2, 0xfb7, None, 2, Cpu386, Modrm|No_bSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTSyntax, { Reg16|Unspecified|BaseIndex, Reg32|Reg64 } -movzx, 2, 0xfb6, None, 2, Cpu386, Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IntelSyntax, { Reg8|Byte|BaseIndex, Reg16|Reg32|Reg64 } -movzx, 2, 0xfb7, None, 2, Cpu386, Modrm|No_bSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IntelSyntax, { Reg16|Word|BaseIndex, Reg32|Reg64 } +// The 64-bit variant is not particularly useful since the zero extend +// 32->64 is implicit, but we can encode them. +movzx, 2, 0xfb6, None, 2, Cpu386, W|Modrm|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg8|Reg16|Unspecified|BaseIndex, Reg16|Reg32|Reg64 } // Push instructions. -push, 1, 0x50, None, 1, CpuNo64, ShortForm|No_bSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg16|Reg32 } +push, 1, 0x50, None, 1, CpuNo64, No_bSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg16|Reg32 } push, 1, 0xff, 0x6, 1, CpuNo64, Modrm|DefaultSize|No_bSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg16|Reg32|Word|Dword|Unspecified|BaseIndex } push, 1, 0x6a, None, 1, Cpu186|CpuNo64, DefaultSize|No_bSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8S } push, 1, 0x68, None, 1, Cpu186|CpuNo64, DefaultSize|No_bSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm16|Imm32 } -push, 1, 0x6, None, 1, CpuNo64, ShortForm|DefaultSize|No_bSuf|No_sSuf|No_qSuf|No_ldSuf, { SReg } +push, 1, 0x6, None, 1, CpuNo64, DefaultSize|No_bSuf|No_sSuf|No_qSuf|No_ldSuf, { SReg } // In 64bit mode, the operand size is implicitly 64bit. -push, 1, 0x50, None, 1, Cpu64, ShortForm|No_bSuf|No_lSuf|No_sSuf|No_ldSuf|NoRex64, { Reg16|Reg64 } +push, 1, 0x50, None, 1, Cpu64, No_bSuf|No_lSuf|No_sSuf|No_ldSuf|NoRex64, { Reg16|Reg64 } push, 1, 0xff, 0x6, 1, Cpu64, Modrm|DefaultSize|No_bSuf|No_lSuf|No_sSuf|No_ldSuf|NoRex64, { Reg16|Reg64|Word|Qword|Unspecified|BaseIndex } push, 1, 0x6a, None, 1, Cpu64, DefaultSize|No_bSuf|No_lSuf|No_sSuf|No_ldSuf|NoRex64, { Imm8S } push, 1, 0x68, None, 1, Cpu64, DefaultSize|No_bSuf|No_lSuf|No_sSuf|No_ldSuf|NoRex64, { Imm16|Imm32S } -push, 1, 0xfa0, None, 2, Cpu64, ShortForm|DefaultSize|No_bSuf|No_lSuf|No_sSuf|No_ldSuf|NoRex64, { SReg } +push, 1, 0xfa0, None, 2, Cpu64, DefaultSize|No_bSuf|No_lSuf|No_sSuf|No_ldSuf|NoRex64, { SReg } pusha, 0, 0x60, None, 1, Cpu186|CpuNo64, DefaultSize|No_bSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 } // Pop instructions. -pop, 1, 0x58, None, 1, CpuNo64, ShortForm|No_bSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg16|Reg32 } +pop, 1, 0x58, None, 1, CpuNo64, No_bSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg16|Reg32 } pop, 1, 0x8f, 0x0, 1, CpuNo64, Modrm|DefaultSize|No_bSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg16|Reg32|Word|Dword|Unspecified|BaseIndex } -pop, 1, 0x7, None, 1, CpuNo64, ShortForm|DefaultSize|No_bSuf|No_sSuf|No_qSuf|No_ldSuf, { SReg } +pop, 1, 0x7, None, 1, CpuNo64, DefaultSize|No_bSuf|No_sSuf|No_qSuf|No_ldSuf, { SReg } // In 64bit mode, the operand size is implicitly 64bit. -pop, 1, 0x58, None, 1, Cpu64, ShortForm|No_bSuf|No_lSuf|No_sSuf|No_ldSuf|NoRex64, { Reg16|Reg64 } +pop, 1, 0x58, None, 1, Cpu64, No_bSuf|No_lSuf|No_sSuf|No_ldSuf|NoRex64, { Reg16|Reg64 } pop, 1, 0x8f, 0x0, 1, Cpu64, Modrm|DefaultSize|No_bSuf|No_lSuf|No_sSuf|No_ldSuf|NoRex64, { Reg16|Reg64|Word|Qword|Unspecified|BaseIndex } -pop, 1, 0xfa1, None, 2, Cpu64, ShortForm|DefaultSize|No_bSuf|No_lSuf|No_sSuf|No_ldSuf|NoRex64, { SReg } +pop, 1, 0xfa1, None, 2, Cpu64, DefaultSize|No_bSuf|No_lSuf|No_sSuf|No_ldSuf|NoRex64, { SReg } popa, 0, 0x61, None, 1, Cpu186|CpuNo64, DefaultSize|No_bSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 } @@ -180,8 +186,8 @@ // xchg commutes: we allow both operand orders. // In the 64bit code, xchg rax, rax is reused for new nop instruction. -xchg, 2, 0x90, None, 1, 0, ShortForm|CheckRegSize|No_bSuf|No_sSuf|No_ldSuf, { Reg16|Reg32|Reg64, Acc|Word|Dword|Qword } -xchg, 2, 0x90, None, 1, 0, ShortForm|CheckRegSize|No_bSuf|No_sSuf|No_ldSuf, { Acc|Word|Dword|Qword, Reg16|Reg32|Reg64 } +xchg, 2, 0x90, None, 1, 0, CheckRegSize|No_bSuf|No_sSuf|No_ldSuf, { Reg16|Reg32|Reg64, Acc|Word|Dword|Qword } +xchg, 2, 0x90, None, 1, 0, CheckRegSize|No_bSuf|No_sSuf|No_ldSuf, { Acc|Word|Dword|Qword, Reg16|Reg32|Reg64 } xchg, 2, 0x86, None, 1, 0, W|CheckRegSize|Modrm|No_sSuf|No_ldSuf|IsLockable|HLEPrefixOk=2, { Reg8|Reg16|Reg32|Reg64, Reg8|Reg16|Reg32|Reg64|Byte|Word|Dword|Qword|Unspecified|BaseIndex } xchg, 2, 0x86, None, 1, 0, W|CheckRegSize|Modrm|No_sSuf|No_ldSuf|IsLockable|HLEPrefixOk=2, { Reg8|Reg16|Reg32|Reg64|Byte|Word|Dword|Qword|Unspecified|BaseIndex, Reg8|Reg16|Reg32|Reg64 } @@ -201,9 +207,12 @@ // Load segment registers from memory. lds, 2, 0xc5, None, 1, CpuNo64, Modrm|No_bSuf|No_sSuf|No_qSuf|No_ldSuf, { DWord|Fword|Unspecified|BaseIndex, Reg16|Reg32 } les, 2, 0xc4, None, 1, CpuNo64, Modrm|No_bSuf|No_sSuf|No_qSuf|No_ldSuf, { DWord|Fword|Unspecified|BaseIndex, Reg16|Reg32 } -lfs, 2, 0xfb4, None, 2, Cpu386, Modrm|No_bSuf|No_sSuf|No_ldSuf, { DWord|Fword|Tbyte|Unspecified|BaseIndex, Reg16|Reg32|Reg64 } -lgs, 2, 0xfb5, None, 2, Cpu386, Modrm|No_bSuf|No_sSuf|No_ldSuf, { DWord|Fword|Tbyte|Unspecified|BaseIndex, Reg16|Reg32|Reg64 } -lss, 2, 0xfb2, None, 2, Cpu386, Modrm|No_bSuf|No_sSuf|No_ldSuf, { DWord|Fword|Tbyte|Unspecified|BaseIndex, Reg16|Reg32|Reg64 } +lfs, 2, 0xfb4, None, 2, Cpu386, Amd64|Modrm|No_bSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Fword|Unspecified|BaseIndex, Reg16|Reg32 } +lfs, 2, 0xfb4, None, 2, Cpu64, Intel64|Modrm|No_bSuf|No_sSuf|No_ldSuf, { Dword|Fword|Tbyte|Unspecified|BaseIndex, Reg16|Reg32|Reg64 } +lgs, 2, 0xfb5, None, 2, Cpu386, Amd64|Modrm|No_bSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Fword|Unspecified|BaseIndex, Reg16|Reg32 } +lgs, 2, 0xfb5, None, 2, Cpu64, Intel64|Modrm|No_bSuf|No_sSuf|No_ldSuf, { Dword|Fword|Tbyte|Unspecified|BaseIndex, Reg16|Reg32|Reg64 } +lss, 2, 0xfb2, None, 2, Cpu386, Amd64|Modrm|No_bSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Fword|Unspecified|BaseIndex, Reg16|Reg32 } +lss, 2, 0xfb2, None, 2, Cpu64, Intel64|Modrm|No_bSuf|No_sSuf|No_ldSuf, { Dword|Fword|Tbyte|Unspecified|BaseIndex, Reg16|Reg32|Reg64 } // Flags register instructions. clc, 0, 0xf8, None, 1, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 } @@ -227,7 +236,7 @@ add, 2, 0x4, None, 1, 0, W|No_sSuf|No_ldSuf, { Imm8|Imm16|Imm32|Imm32S, Acc|Byte|Word|Dword|Qword } add, 2, 0x80, 0x0, 1, 0, W|Modrm|No_sSuf|No_ldSuf|IsLockable|HLEPrefixOk, { Imm8|Imm16|Imm32|Imm32S, Reg8|Reg16|Reg32|Reg64|Byte|Word|Dword|Qword|Unspecified|BaseIndex } -inc, 1, 0x40, None, 1, CpuNo64, ShortForm|No_bSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg16|Reg32 } +inc, 1, 0x40, None, 1, CpuNo64, No_bSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg16|Reg32 } inc, 1, 0xfe, 0x0, 1, 0, W|Modrm|No_sSuf|No_ldSuf|IsLockable|HLEPrefixOk, { Reg8|Reg16|Reg32|Reg64|Byte|Word|Dword|Qword|Unspecified|BaseIndex } sub, 2, 0x28, None, 1, 0, D|W|CheckRegSize|Modrm|No_sSuf|No_ldSuf|IsLockable|HLEPrefixOk|Optimize, { Reg8|Reg16|Reg32|Reg64, Reg8|Reg16|Reg32|Reg64|Byte|Word|Dword|Qword|Unspecified|BaseIndex } @@ -235,7 +244,7 @@ sub, 2, 0x2c, None, 1, 0, W|No_sSuf|No_ldSuf, { Imm8|Imm16|Imm32|Imm32S, Acc|Byte|Word|Dword|Qword } sub, 2, 0x80, 0x5, 1, 0, W|Modrm|No_sSuf|No_ldSuf|IsLockable|HLEPrefixOk, { Imm8|Imm16|Imm32|Imm32S, Reg8|Reg16|Reg32|Reg64|Byte|Word|Dword|Qword|Unspecified|BaseIndex } -dec, 1, 0x48, None, 1, CpuNo64, ShortForm|No_bSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg16|Reg32 } +dec, 1, 0x48, None, 1, CpuNo64, No_bSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg16|Reg32 } dec, 1, 0xfe, 0x1, 1, 0, W|Modrm|No_sSuf|No_ldSuf|IsLockable|HLEPrefixOk, { Reg8|Reg16|Reg32|Reg64|Byte|Word|Dword|Qword|Unspecified|BaseIndex } sbb, 2, 0x18, None, 1, 0, D|W|CheckRegSize|Modrm|No_sSuf|No_ldSuf|IsLockable|HLEPrefixOk, { Reg8|Reg16|Reg32|Reg64, Reg8|Reg16|Reg32|Reg64|Byte|Word|Dword|Qword|Unspecified|BaseIndex } @@ -374,35 +383,38 @@ // Control transfer instructions. call, 1, 0xe8, None, 1, CpuNo64, JumpDword|DefaultSize|No_bSuf|No_sSuf|No_qSuf|No_ldSuf|BNDPrefixOk, { Disp16|Disp32 } -call, 1, 0xe8, None, 1, Cpu64, AMD64|JumpDword|DefaultSize|No_bSuf|No_lSuf|No_sSuf|No_ldSuf|NoRex64|BNDPrefixOk, { Disp16|Disp32S } -call, 1, 0xe8, None, 1, Cpu64, Intel64|JumpDword|DefaultSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|NoRex64|BNDPrefixOk, { Disp32S } +call, 1, 0xe8, None, 1, Cpu64, Amd64|JumpDword|DefaultSize|No_bSuf|No_lSuf|No_sSuf|No_ldSuf|NoRex64|BNDPrefixOk, { Disp16|Disp32S } +call, 1, 0xe8, None, 1, Cpu64, Intel64|JumpDword|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|NoRex64|BNDPrefixOk, { Disp32S } call, 1, 0xff, 0x2, 1, CpuNo64, Modrm|JumpAbsolute|DefaultSize|No_bSuf|No_sSuf|No_qSuf|No_ldSuf|BNDPrefixOk|NoTrackPrefixOk, { Reg16|Reg32|Unspecified|BaseIndex } -call, 1, 0xff, 0x2, 1, Cpu64, AMD64|Modrm|JumpAbsolute|DefaultSize|No_bSuf|No_lSuf|No_sSuf|No_ldSuf|NoRex64|BNDPrefixOk|NoTrackPrefixOk, { Reg16|Reg64|Unspecified|BaseIndex } -call, 1, 0xff, 0x2, 1, Cpu64, Intel64|Modrm|JumpAbsolute|DefaultSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|NoRex64|BNDPrefixOk|NoTrackPrefixOk, { Reg64|Unspecified|BaseIndex } -// Intel Syntax +call, 1, 0xff, 0x2, 1, Cpu64, Amd64|Modrm|JumpAbsolute|DefaultSize|No_bSuf|No_lSuf|No_sSuf|No_ldSuf|NoRex64|BNDPrefixOk|NoTrackPrefixOk, { Reg16|Reg64|Unspecified|BaseIndex } +call, 1, 0xff, 0x2, 1, Cpu64, Intel64|Modrm|JumpAbsolute|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|NoRex64|BNDPrefixOk|NoTrackPrefixOk, { Reg64|Unspecified|BaseIndex } +// Intel Syntax remaining call instances. call, 2, 0x9a, None, 1, CpuNo64, JumpInterSegment|DefaultSize|No_bSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm16, Imm16|Imm32 } -// Intel Syntax -call, 1, 0xff, 0x3, 1, 0, Modrm|JumpAbsolute|DefaultSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf, { Dword|Fword|Unspecified|BaseIndex } +call, 1, 0xff, 0x3, 1, 0, Amd64|Modrm|JumpAbsolute|DefaultSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf, { Dword|Fword|BaseIndex } +call, 1, 0xff, 0x3, 1, Cpu64, Intel64|Modrm|JumpAbsolute|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Fword|Tbyte|BaseIndex } lcall, 2, 0x9a, None, 1, CpuNo64, JumpInterSegment|DefaultSize|No_bSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm16, Imm16|Imm32 } -lcall, 1, 0xff, 0x3, 1, 0, Modrm|JumpAbsolute|DefaultSize|No_bSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex } +lcall, 1, 0xff, 0x3, 1, 0, Amd64|Modrm|JumpAbsolute|DefaultSize|No_bSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex } +lcall, 1, 0xff, 0x3, 1, Cpu64, Intel64|Modrm|JumpAbsolute|No_bSuf|No_sSuf|No_ldSuf, { Unspecified|BaseIndex } -jmp, 1, 0xeb, None, 1, CpuNo64, Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|BNDPrefixOk, { Disp8|Disp16|Disp32 } -jmp, 1, 0xeb, None, 1, Cpu64, AMD64|Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|BNDPrefixOk, { Disp8|Disp16|Disp32S } +jmp, 1, 0xeb, None, 1, 0, Amd64|Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|BNDPrefixOk, { Disp8|Disp16|Disp32|Disp32S } jmp, 1, 0xeb, None, 1, Cpu64, Intel64|Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|BNDPrefixOk, { Disp8|Disp32S } jmp, 1, 0xff, 0x4, 1, CpuNo64, Modrm|JumpAbsolute|No_bSuf|No_sSuf|No_qSuf|No_ldSuf|BNDPrefixOk|NoTrackPrefixOk, { Reg16|Reg32|Unspecified|BaseIndex } -jmp, 1, 0xff, 0x4, 1, Cpu64, AMD64|Modrm|JumpAbsolute|No_bSuf|No_lSuf|No_sSuf|No_ldSuf|NoRex64|BNDPrefixOk|NoTrackPrefixOk, { Reg16|Reg64|Unspecified|BaseIndex } +jmp, 1, 0xff, 0x4, 1, Cpu64, Amd64|Modrm|JumpAbsolute|No_bSuf|No_lSuf|No_sSuf|No_ldSuf|NoRex64|BNDPrefixOk|NoTrackPrefixOk, { Reg16|Reg64|Unspecified|BaseIndex } jmp, 1, 0xff, 0x4, 1, Cpu64, Intel64|Modrm|JumpAbsolute|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|NoRex64|BNDPrefixOk|NoTrackPrefixOk, { Reg64|Unspecified|BaseIndex } -// Intel Syntax. +// Intel Syntax remaining jmp instances. jmp, 2, 0xea, None, 1, CpuNo64, JumpInterSegment|No_bSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm16, Imm16|Imm32 } -// Intel Syntax. -jmp, 1, 0xff, 0x5, 1, 0, Modrm|JumpAbsolute|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf, { Dword|Fword|Unspecified|BaseIndex } +jmp, 1, 0xff, 0x5, 1, 0, Amd64|Modrm|JumpAbsolute|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf, { Dword|Fword|BaseIndex } +jmp, 1, 0xff, 0x5, 1, Cpu64, Intel64|Modrm|JumpAbsolute|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Fword|Tbyte|BaseIndex } ljmp, 2, 0xea, None, 1, CpuNo64, JumpInterSegment|No_bSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm16, Imm16|Imm32 } -ljmp, 1, 0xff, 0x5, 1, 0, Modrm|JumpAbsolute|No_bSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex } +ljmp, 1, 0xff, 0x5, 1, 0, Amd64|Modrm|JumpAbsolute|No_bSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex } +ljmp, 1, 0xff, 0x5, 1, Cpu64, Intel64|Modrm|JumpAbsolute|No_bSuf|No_sSuf|No_ldSuf, { Unspecified|BaseIndex } ret, 0, 0xc3, None, 1, CpuNo64, DefaultSize|No_bSuf|No_sSuf|No_qSuf|No_ldSuf|RepPrefixOk|BNDPrefixOk, { 0 } ret, 1, 0xc2, None, 1, CpuNo64, DefaultSize|No_bSuf|No_sSuf|No_qSuf|No_ldSuf|RepPrefixOk|BNDPrefixOk, { Imm16 } -ret, 0, 0xc3, None, 1, Cpu64, DefaultSize|No_bSuf|No_lSuf|No_sSuf|No_ldSuf|NoRex64|RepPrefixOk|BNDPrefixOk, { 0 } -ret, 1, 0xc2, None, 1, Cpu64, DefaultSize|No_bSuf|No_lSuf|No_sSuf|No_ldSuf|NoRex64|RepPrefixOk|BNDPrefixOk, { Imm16 } +ret, 0, 0xc3, None, 1, Cpu64, Amd64|DefaultSize|No_bSuf|No_lSuf|No_sSuf|No_ldSuf|NoRex64|RepPrefixOk|BNDPrefixOk, { 0 } +ret, 1, 0xc2, None, 1, Cpu64, Amd64|DefaultSize|No_bSuf|No_lSuf|No_sSuf|No_ldSuf|NoRex64|RepPrefixOk|BNDPrefixOk, { Imm16 } +ret, 0, 0xc3, None, 1, Cpu64, Intel64|Size64|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|NoRex64|RepPrefixOk|BNDPrefixOk, { 0 } +ret, 1, 0xc2, None, 1, Cpu64, Intel64|Size64|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|NoRex64|RepPrefixOk|BNDPrefixOk, { Imm16 } lret, 0, 0xcb, None, 1, 0, DefaultSize|No_bSuf|No_sSuf|No_ldSuf, { 0 } lret, 1, 0xca, None, 1, 0, DefaultSize|No_bSuf|No_sSuf|No_ldSuf, { Imm16 } // Intel Syntax. @@ -414,89 +426,34 @@ leave, 0, 0xc9, None, 1, Cpu186|CpuNo64, DefaultSize|No_bSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 } leave, 0, 0xc9, None, 1, Cpu64, DefaultSize|No_bSuf|No_lSuf|No_sSuf|No_ldSuf|NoRex64, { 0 } +<cc:opc, o:0, no:1, b:2, c:2, nae:2, nb:3, nc:3, ae:3, e:4, z:4, ne:5, nz:5, be:6, na:6, nbe:7, a:7, \ + s:8, ns:9, p:a, pe:a, np:b, po:b, l:c, nge:c, nl:d, ge:d, le:e, ng:e, nle:f, g:f> + // Conditional jumps. -jo, 1, 0x70, None, 1, 0, Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|BNDPrefixOk, { Disp8|Disp16|Disp32|Disp32S } -jno, 1, 0x71, None, 1, 0, Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|BNDPrefixOk, { Disp8|Disp16|Disp32|Disp32S } -jb, 1, 0x72, None, 1, 0, Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|BNDPrefixOk, { Disp8|Disp16|Disp32|Disp32S } -jc, 1, 0x72, None, 1, 0, Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|BNDPrefixOk, { Disp8|Disp16|Disp32|Disp32S } -jnae, 1, 0x72, None, 1, 0, Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|BNDPrefixOk, { Disp8|Disp16|Disp32|Disp32S } -jnb, 1, 0x73, None, 1, 0, Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|BNDPrefixOk, { Disp8|Disp16|Disp32|Disp32S } -jnc, 1, 0x73, None, 1, 0, Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|BNDPrefixOk, { Disp8|Disp16|Disp32|Disp32S } -jae, 1, 0x73, None, 1, 0, Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|BNDPrefixOk, { Disp8|Disp16|Disp32|Disp32S } -je, 1, 0x74, None, 1, 0, Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|BNDPrefixOk, { Disp8|Disp16|Disp32|Disp32S } -jz, 1, 0x74, None, 1, 0, Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|BNDPrefixOk, { Disp8|Disp16|Disp32|Disp32S } -jne, 1, 0x75, None, 1, 0, Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|BNDPrefixOk, { Disp8|Disp16|Disp32|Disp32S } -jnz, 1, 0x75, None, 1, 0, Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|BNDPrefixOk, { Disp8|Disp16|Disp32|Disp32S } -jbe, 1, 0x76, None, 1, 0, Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|BNDPrefixOk, { Disp8|Disp16|Disp32|Disp32S } -jna, 1, 0x76, None, 1, 0, Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|BNDPrefixOk, { Disp8|Disp16|Disp32|Disp32S } -jnbe, 1, 0x77, None, 1, 0, Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|BNDPrefixOk, { Disp8|Disp16|Disp32|Disp32S } -ja, 1, 0x77, None, 1, 0, Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|BNDPrefixOk, { Disp8|Disp16|Disp32|Disp32S } -js, 1, 0x78, None, 1, 0, Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|BNDPrefixOk, { Disp8|Disp16|Disp32|Disp32S } -jns, 1, 0x79, None, 1, 0, Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|BNDPrefixOk, { Disp8|Disp16|Disp32|Disp32S } -jp, 1, 0x7a, None, 1, 0, Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|BNDPrefixOk, { Disp8|Disp16|Disp32|Disp32S } -jpe, 1, 0x7a, None, 1, 0, Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|BNDPrefixOk, { Disp8|Disp16|Disp32|Disp32S } -jnp, 1, 0x7b, None, 1, 0, Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|BNDPrefixOk, { Disp8|Disp16|Disp32|Disp32S } -jpo, 1, 0x7b, None, 1, 0, Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|BNDPrefixOk, { Disp8|Disp16|Disp32|Disp32S } -jl, 1, 0x7c, None, 1, 0, Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|BNDPrefixOk, { Disp8|Disp16|Disp32|Disp32S } -jnge, 1, 0x7c, None, 1, 0, Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|BNDPrefixOk, { Disp8|Disp16|Disp32|Disp32S } -jnl, 1, 0x7d, None, 1, 0, Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|BNDPrefixOk, { Disp8|Disp16|Disp32|Disp32S } -jge, 1, 0x7d, None, 1, 0, Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|BNDPrefixOk, { Disp8|Disp16|Disp32|Disp32S } -jle, 1, 0x7e, None, 1, 0, Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|BNDPrefixOk, { Disp8|Disp16|Disp32|Disp32S } -jng, 1, 0x7e, None, 1, 0, Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|BNDPrefixOk, { Disp8|Disp16|Disp32|Disp32S } -jnle, 1, 0x7f, None, 1, 0, Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|BNDPrefixOk, { Disp8|Disp16|Disp32|Disp32S } -jg, 1, 0x7f, None, 1, 0, Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|BNDPrefixOk, { Disp8|Disp16|Disp32|Disp32S } +j<cc>, 1, 0x7<cc:opc>, None, 1, 0, Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|BNDPrefixOk, { Disp8|Disp16|Disp32|Disp32S } // jcxz vs. jecxz is chosen on the basis of the address size prefix. -jcxz, 1, 0xe3, None, 1, CpuNo64, JumpByte|Size16|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Disp8|Disp16|Disp32 } -jecxz, 1, 0xe3, None, 1, 0, JumpByte|Size32|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Disp8|Disp16|Disp32|Disp32S } -jrcxz, 1, 0xe3, None, 1, Cpu64, JumpByte|Size64|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Disp8|Disp32|Disp32S } +jcxz, 1, 0xe3, None, 1, CpuNo64, JumpByte|Size16|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Disp8 } +jecxz, 1, 0xe3, None, 1, 0, JumpByte|Size32|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Disp8 } +jrcxz, 1, 0xe3, None, 1, Cpu64, JumpByte|Size64|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Disp8 } // The loop instructions also use the address size prefix to select // %cx rather than %ecx for the loop count, so the `w' form of these // instructions emit an address size prefix rather than a data size // prefix. -loop, 1, 0xe2, None, 1, CpuNo64, JumpByte|No_bSuf|No_sSuf|No_qSuf|No_ldSuf, { Disp8|Disp16|Disp32 } -loop, 1, 0xe2, None, 1, Cpu64, JumpByte|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|NoRex64, { Disp8|Disp32|Disp32S } -loopz, 1, 0xe1, None, 1, CpuNo64, JumpByte|No_bSuf|No_sSuf|No_qSuf|No_ldSuf, { Disp8|Disp16|Disp32 } -loopz, 1, 0xe1, None, 1, Cpu64, JumpByte|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|NoRex64, { Disp8|Disp32|Disp32S } -loope, 1, 0xe1, None, 1, CpuNo64, JumpByte|No_bSuf|No_sSuf|No_qSuf|No_ldSuf, { Disp8|Disp16|Disp32 } -loope, 1, 0xe1, None, 1, Cpu64, JumpByte|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|NoRex64, { Disp8|Disp32|Disp32S } -loopnz, 1, 0xe0, None, 1, CpuNo64, JumpByte|No_bSuf|No_sSuf|No_qSuf|No_ldSuf, { Disp8|Disp16|Disp32 } -loopnz, 1, 0xe0, None, 1, Cpu64, JumpByte|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|NoRex64, { Disp8|Disp32|Disp32S } -loopne, 1, 0xe0, None, 1, CpuNo64, JumpByte|No_bSuf|No_sSuf|No_qSuf|No_ldSuf, { Disp8|Disp16|Disp32 } -loopne, 1, 0xe0, None, 1, Cpu64, JumpByte|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|NoRex64, { Disp8|Disp32|Disp32S } +loop, 1, 0xe2, None, 1, CpuNo64, JumpByte|No_bSuf|No_sSuf|No_qSuf|No_ldSuf, { Disp8 } +loop, 1, 0xe2, None, 1, Cpu64, JumpByte|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|NoRex64, { Disp8 } +loopz, 1, 0xe1, None, 1, CpuNo64, JumpByte|No_bSuf|No_sSuf|No_qSuf|No_ldSuf, { Disp8 } +loopz, 1, 0xe1, None, 1, Cpu64, JumpByte|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|NoRex64, { Disp8 } +loope, 1, 0xe1, None, 1, CpuNo64, JumpByte|No_bSuf|No_sSuf|No_qSuf|No_ldSuf, { Disp8 } +loope, 1, 0xe1, None, 1, Cpu64, JumpByte|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|NoRex64, { Disp8 } +loopnz, 1, 0xe0, None, 1, CpuNo64, JumpByte|No_bSuf|No_sSuf|No_qSuf|No_ldSuf, { Disp8 } +loopnz, 1, 0xe0, None, 1, Cpu64, JumpByte|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|NoRex64, { Disp8 } +loopne, 1, 0xe0, None, 1, CpuNo64, JumpByte|No_bSuf|No_sSuf|No_qSuf|No_ldSuf, { Disp8 } +loopne, 1, 0xe0, None, 1, Cpu64, JumpByte|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|NoRex64, { Disp8 } // Set byte on flag instructions. -seto, 1, 0xf90, 0x0, 2, Cpu386, Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg8|Byte|Unspecified|BaseIndex } -setno, 1, 0xf91, 0x0, 2, Cpu386, Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg8|Byte|Unspecified|BaseIndex } -setb, 1, 0xf92, 0x0, 2, Cpu386, Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg8|Byte|Unspecified|BaseIndex } -setc, 1, 0xf92, 0x0, 2, Cpu386, Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg8|Byte|Unspecified|BaseIndex } -setnae, 1, 0xf92, 0x0, 2, Cpu386, Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg8|Byte|Unspecified|BaseIndex } -setnb, 1, 0xf93, 0x0, 2, Cpu386, Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg8|Byte|Unspecified|BaseIndex } -setnc, 1, 0xf93, 0x0, 2, Cpu386, Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg8|Byte|Unspecified|BaseIndex } -setae, 1, 0xf93, 0x0, 2, Cpu386, Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg8|Byte|Unspecified|BaseIndex } -sete, 1, 0xf94, 0x0, 2, Cpu386, Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg8|Byte|Unspecified|BaseIndex } -setz, 1, 0xf94, 0x0, 2, Cpu386, Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg8|Byte|Unspecified|BaseIndex } -setne, 1, 0xf95, 0x0, 2, Cpu386, Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg8|Byte|Unspecified|BaseIndex } -setnz, 1, 0xf95, 0x0, 2, Cpu386, Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg8|Byte|Unspecified|BaseIndex } -setbe, 1, 0xf96, 0x0, 2, Cpu386, Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg8|Byte|Unspecified|BaseIndex } -setna, 1, 0xf96, 0x0, 2, Cpu386, Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg8|Byte|Unspecified|BaseIndex } -setnbe, 1, 0xf97, 0x0, 2, Cpu386, Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg8|Byte|Unspecified|BaseIndex } -seta, 1, 0xf97, 0x0, 2, Cpu386, Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg8|Byte|Unspecified|BaseIndex } -sets, 1, 0xf98, 0x0, 2, Cpu386, Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg8|Byte|Unspecified|BaseIndex } -setns, 1, 0xf99, 0x0, 2, Cpu386, Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg8|Byte|Unspecified|BaseIndex } -setp, 1, 0xf9a, 0x0, 2, Cpu386, Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg8|Byte|Unspecified|BaseIndex } -setpe, 1, 0xf9a, 0x0, 2, Cpu386, Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg8|Byte|Unspecified|BaseIndex } -setnp, 1, 0xf9b, 0x0, 2, Cpu386, Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg8|Byte|Unspecified|BaseIndex } -setpo, 1, 0xf9b, 0x0, 2, Cpu386, Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg8|Byte|Unspecified|BaseIndex } -setl, 1, 0xf9c, 0x0, 2, Cpu386, Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg8|Byte|Unspecified|BaseIndex } -setnge, 1, 0xf9c, 0x0, 2, Cpu386, Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg8|Byte|Unspecified|BaseIndex } -setnl, 1, 0xf9d, 0x0, 2, Cpu386, Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg8|Byte|Unspecified|BaseIndex } -setge, 1, 0xf9d, 0x0, 2, Cpu386, Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg8|Byte|Unspecified|BaseIndex } -setle, 1, 0xf9e, 0x0, 2, Cpu386, Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg8|Byte|Unspecified|BaseIndex } -setng, 1, 0xf9e, 0x0, 2, Cpu386, Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg8|Byte|Unspecified|BaseIndex } -setnle, 1, 0xf9f, 0x0, 2, Cpu386, Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg8|Byte|Unspecified|BaseIndex } -setg, 1, 0xf9f, 0x0, 2, Cpu386, Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg8|Byte|Unspecified|BaseIndex } +set<cc>, 1, 0xf9<cc:opc>, 0x0, 2, Cpu386, Modrm|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg8|Byte|Unspecified|BaseIndex } // String manipulation. cmps, 0, 0xa6, None, 1, 0, W|No_sSuf|No_ldSuf|IsString|RepPrefixOk, { 0 } @@ -593,62 +550,62 @@ // Floating point instructions. // load -fld, 1, 0xd9c0, None, 2, CpuFP, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg } +fld, 1, 0xd9c0, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg } fld, 1, 0xd9, 0x0, 1, CpuFP, Modrm|FloatMF|No_bSuf|No_wSuf|No_qSuf|No_ldSuf, { Dword|Qword|Unspecified|BaseIndex } -fld, 1, 0xd9c0, None, 2, CpuFP, ShortForm|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_qSuf|No_ldSuf|Ugh, { FloatReg } +fld, 1, 0xd9c0, None, 2, CpuFP, IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_qSuf|No_ldSuf|Ugh, { FloatReg } // Intel Syntax fld, 1, 0xdb, 0x5, 1, CpuFP, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf, { Tbyte|Unspecified|BaseIndex } fild, 1, 0xdf, 0x0, 1, CpuFP, Modrm|FloatMF|No_bSuf|No_wSuf|No_qSuf|No_ldSuf, { Word|Dword|Unspecified|BaseIndex } fild, 1, 0xdf, 0x5, 1, CpuFP, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|NoRex64, { Qword|Unspecified|BaseIndex } -fildll, 1, 0xdf, 0x5, 1, CpuFP, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex } +fildll, 1, 0xdf, 0x5, 1, CpuFP, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTSyntax, { Unspecified|BaseIndex } fldt, 1, 0xdb, 0x5, 1, CpuFP, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Tbyte|Unspecified|BaseIndex } fbld, 1, 0xdf, 0x4, 1, CpuFP, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf, { Tbyte|Unspecified|BaseIndex } // store (no pop) -fst, 1, 0xddd0, None, 2, CpuFP, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg } +fst, 1, 0xddd0, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg } fst, 1, 0xd9, 0x2, 1, CpuFP, Modrm|FloatMF|No_bSuf|No_wSuf|No_qSuf|No_ldSuf, { Dword|Qword|Unspecified|BaseIndex } -fst, 1, 0xddd0, None, 2, CpuFP, ShortForm|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_qSuf|No_ldSuf|Ugh, { FloatReg } +fst, 1, 0xddd0, None, 2, CpuFP, IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_qSuf|No_ldSuf|Ugh, { FloatReg } fist, 1, 0xdf, 0x2, 1, CpuFP, Modrm|FloatMF|No_bSuf|No_wSuf|No_qSuf|No_ldSuf, { Word|Dword|Unspecified|BaseIndex } // store (with pop) -fstp, 1, 0xddd8, None, 2, CpuFP, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg } +fstp, 1, 0xddd8, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg } fstp, 1, 0xd9, 0x3, 1, CpuFP, Modrm|FloatMF|No_bSuf|No_wSuf|No_qSuf|No_ldSuf, { Dword|Qword|Unspecified|BaseIndex } -fstp, 1, 0xddd8, None, 2, CpuFP, ShortForm|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_qSuf|No_ldSuf|Ugh, { FloatReg } +fstp, 1, 0xddd8, None, 2, CpuFP, IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_qSuf|No_ldSuf|Ugh, { FloatReg } // Intel Syntax fstp, 1, 0xdb, 0x7, 1, CpuFP, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf, { Tbyte|Unspecified|BaseIndex } fistp, 1, 0xdf, 0x3, 1, CpuFP, Modrm|FloatMF|No_bSuf|No_wSuf|No_qSuf|No_ldSuf, { Word|Dword|Unspecified|BaseIndex } fistp, 1, 0xdf, 0x7, 1, CpuFP, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|NoRex64, { Qword|Unspecified|BaseIndex } -fistpll, 1, 0xdf, 0x7, 1, CpuFP, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex } +fistpll, 1, 0xdf, 0x7, 1, CpuFP, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTSyntax, { Unspecified|BaseIndex } fstpt, 1, 0xdb, 0x7, 1, CpuFP, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Tbyte|Unspecified|BaseIndex } fbstp, 1, 0xdf, 0x6, 1, CpuFP, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf, { Tbyte|Unspecified|BaseIndex } // exchange %st<n> with %st0 -fxch, 1, 0xd9c8, None, 2, CpuFP, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg } +fxch, 1, 0xd9c8, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg } // alias for fxch %st(1) fxch, 0, 0xd9c9, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 } // comparison (without pop) -fcom, 1, 0xd8d0, None, 2, CpuFP, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg } +fcom, 1, 0xd8d0, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg } // alias for fcom %st(1) fcom, 0, 0xd8d1, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 } fcom, 1, 0xd8, 0x2, 1, CpuFP, Modrm|FloatMF|No_bSuf|No_wSuf|No_qSuf|No_ldSuf, { Dword|Qword|Unspecified|BaseIndex } -fcom, 1, 0xd8d0, None, 2, CpuFP, ShortForm|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_qSuf|No_ldSuf|Ugh, { FloatReg } +fcom, 1, 0xd8d0, None, 2, CpuFP, IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_qSuf|No_ldSuf|Ugh, { FloatReg } ficom, 1, 0xde, 0x2, 1, CpuFP, Modrm|FloatMF|No_bSuf|No_wSuf|No_qSuf|No_ldSuf, { Word|Dword|Unspecified|BaseIndex } // comparison (with pop) -fcomp, 1, 0xd8d8, None, 2, CpuFP, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg } +fcomp, 1, 0xd8d8, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg } // alias for fcomp %st(1) fcomp, 0, 0xd8d9, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 } fcomp, 1, 0xd8, 0x3, 1, CpuFP, Modrm|FloatMF|No_bSuf|No_wSuf|No_qSuf|No_ldSuf, { Dword|Qword|Unspecified|BaseIndex } -fcomp, 1, 0xd8d8, None, 2, CpuFP, ShortForm|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_qSuf|No_ldSuf|Ugh, { FloatReg } +fcomp, 1, 0xd8d8, None, 2, CpuFP, IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_qSuf|No_ldSuf|Ugh, { FloatReg } ficomp, 1, 0xde, 0x3, 1, CpuFP, Modrm|FloatMF|No_bSuf|No_wSuf|No_qSuf|No_ldSuf, { Word|Dword|Unspecified|BaseIndex } fcompp, 0, 0xded9, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 } // unordered comparison (with pop) -fucom, 1, 0xdde0, None, 2, Cpu387, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg } +fucom, 1, 0xdde0, None, 2, Cpu387, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg } // alias for fucom %st(1) fucom, 0, 0xdde1, None, 2, Cpu387, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 } -fucomp, 1, 0xdde8, None, 2, Cpu387, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg } +fucomp, 1, 0xdde8, None, 2, Cpu387, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg } // alias for fucomp %st(1) fucomp, 0, 0xdde9, None, 2, Cpu387, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 } fucompp, 0, 0xdae9, None, 2, Cpu387, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 } @@ -668,99 +625,99 @@ // Arithmetic. // add -fadd, 2, 0xd8c0, None, 2, CpuFP, ShortForm|D|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg, FloatAcc } +fadd, 2, 0xd8c0, None, 2, CpuFP, D|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg, FloatAcc } // alias for fadd %st(i), %st -fadd, 1, 0xd8c0, None, 2, CpuFP, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg } +fadd, 1, 0xd8c0, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg } // alias for faddp fadd, 0, 0xdec1, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Ugh|ATTMnemonic, { 0 } fadd, 1, 0xd8, 0x0, 1, CpuFP, Modrm|FloatMF|No_bSuf|No_wSuf|No_qSuf|No_ldSuf, { Dword|Qword|Unspecified|BaseIndex } fiadd, 1, 0xde, 0x0, 1, CpuFP, Modrm|FloatMF|No_bSuf|No_wSuf|No_qSuf|No_ldSuf, { Word|Dword|Unspecified|BaseIndex } -faddp, 2, 0xdec0, None, 2, CpuFP, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatAcc, FloatReg } -faddp, 1, 0xdec0, None, 2, CpuFP, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg } +faddp, 2, 0xdec0, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatAcc, FloatReg } +faddp, 1, 0xdec0, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg } // alias for faddp %st, %st(1) faddp, 0, 0xdec1, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 } -faddp, 2, 0xdec0, None, 2, CpuFP, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Ugh, { FloatReg, FloatAcc } +faddp, 2, 0xdec0, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Ugh, { FloatReg, FloatAcc } // subtract -fsub, 1, 0xd8e0, None, 2, CpuFP, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg } -fsub, 2, 0xd8e0, None, 2, CpuFP, ShortForm|D|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTMnemonic|ATTSyntax, { FloatReg, FloatAcc } +fsub, 1, 0xd8e0, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg } +fsub, 2, 0xd8e0, None, 2, CpuFP, D|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTMnemonic|ATTSyntax, { FloatReg, FloatAcc } // alias for fsubp fsub, 0, 0xdee1, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Ugh|ATTMnemonic|ATTSyntax, { 0 } fsub, 0, 0xdee9, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Ugh|ATTMnemonic, { 0 } -fsub, 2, 0xd8e0, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|No_qSuf|ShortForm|D|FloatR, { FloatReg, FloatAcc } +fsub, 2, 0xd8e0, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|No_qSuf|D|FloatR, { FloatReg, FloatAcc } fsub, 1, 0xd8, 0x4, 1, CpuFP, Modrm|FloatMF|No_bSuf|No_wSuf|No_qSuf|No_ldSuf, { Dword|Qword|Unspecified|BaseIndex } fisub, 1, 0xde, 0x4, 1, CpuFP, Modrm|FloatMF|No_bSuf|No_wSuf|No_qSuf|No_ldSuf, { Word|Dword|Unspecified|BaseIndex } -fsubp, 2, 0xdee0, None, 2, CpuFP, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTMnemonic|ATTSyntax, { FloatAcc, FloatReg } -fsubp, 1, 0xdee0, None, 2, CpuFP, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTMnemonic|ATTSyntax, { FloatReg } +fsubp, 2, 0xdee0, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTMnemonic|ATTSyntax, { FloatAcc, FloatReg } +fsubp, 1, 0xdee0, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTMnemonic|ATTSyntax, { FloatReg } fsubp, 0, 0xdee1, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTMnemonic|ATTSyntax, { 0 } -fsubp, 2, 0xdee8, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|No_qSuf|ShortForm, { FloatAcc, FloatReg } -fsubp, 1, 0xdee8, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|No_qSuf|ShortForm, { FloatReg } +fsubp, 2, 0xdee8, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|No_qSuf, { FloatAcc, FloatReg } +fsubp, 1, 0xdee8, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|No_qSuf, { FloatReg } fsubp, 0, 0xdee9, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 } // subtract reverse -fsubr, 1, 0xd8e8, None, 2, CpuFP, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg } -fsubr, 2, 0xd8e8, None, 2, CpuFP, ShortForm|D|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTMnemonic|ATTSyntax, { FloatReg, FloatAcc } +fsubr, 1, 0xd8e8, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg } +fsubr, 2, 0xd8e8, None, 2, CpuFP, D|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTMnemonic|ATTSyntax, { FloatReg, FloatAcc } // alias for fsubrp fsubr, 0, 0xdee9, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Ugh|ATTMnemonic|ATTSyntax, { 0 } fsubr, 0, 0xdee1, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Ugh|ATTMnemonic, { 0 } -fsubr, 2, 0xd8e8, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|No_qSuf|ShortForm|D|FloatR, { FloatReg, FloatAcc } +fsubr, 2, 0xd8e8, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|No_qSuf|D|FloatR, { FloatReg, FloatAcc } fsubr, 1, 0xd8, 0x5, 1, CpuFP, Modrm|FloatMF|No_bSuf|No_wSuf|No_qSuf|No_ldSuf, { Dword|Qword|Unspecified|BaseIndex } fisubr, 1, 0xde, 0x5, 1, CpuFP, Modrm|FloatMF|No_bSuf|No_wSuf|No_qSuf|No_ldSuf, { Word|Dword|Unspecified|BaseIndex } -fsubrp, 2, 0xdee8, None, 2, CpuFP, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTMnemonic|ATTSyntax, { FloatAcc, FloatReg } -fsubrp, 1, 0xdee8, None, 2, CpuFP, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTMnemonic|ATTSyntax, { FloatReg } +fsubrp, 2, 0xdee8, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTMnemonic|ATTSyntax, { FloatAcc, FloatReg } +fsubrp, 1, 0xdee8, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTMnemonic|ATTSyntax, { FloatReg } fsubrp, 0, 0xdee9, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTMnemonic|ATTSyntax, { 0 } -fsubrp, 2, 0xdee0, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|No_qSuf|ShortForm, { FloatAcc, FloatReg } -fsubrp, 1, 0xdee0, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|No_qSuf|ShortForm, { FloatReg } +fsubrp, 2, 0xdee0, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|No_qSuf, { FloatAcc, FloatReg } +fsubrp, 1, 0xdee0, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|No_qSuf, { FloatReg } fsubrp, 0, 0xdee1, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|No_qSuf, { 0 } // multiply -fmul, 2, 0xd8c8, None, 2, CpuFP, ShortForm|D|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg, FloatAcc } -fmul, 1, 0xd8c8, None, 2, CpuFP, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg } +fmul, 2, 0xd8c8, None, 2, CpuFP, D|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg, FloatAcc } +fmul, 1, 0xd8c8, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg } // alias for fmulp fmul, 0, 0xdec9, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Ugh|ATTMnemonic, { 0 } fmul, 1, 0xd8, 0x1, 1, CpuFP, Modrm|FloatMF|No_bSuf|No_wSuf|No_qSuf|No_ldSuf, { Dword|Qword|Unspecified|BaseIndex } fimul, 1, 0xde, 0x1, 1, CpuFP, Modrm|FloatMF|No_bSuf|No_wSuf|No_qSuf|No_ldSuf, { Word|Dword|Unspecified|BaseIndex } -fmulp, 2, 0xdec8, None, 2, CpuFP, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatAcc, FloatReg } -fmulp, 1, 0xdec8, None, 2, CpuFP, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg } +fmulp, 2, 0xdec8, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatAcc, FloatReg } +fmulp, 1, 0xdec8, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg } fmulp, 0, 0xdec9, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 } -fmulp, 2, 0xdec8, None, 2, CpuFP, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Ugh, { FloatReg, FloatAcc } +fmulp, 2, 0xdec8, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Ugh, { FloatReg, FloatAcc } // divide -fdiv, 1, 0xd8f0, None, 2, CpuFP, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg } -fdiv, 2, 0xd8f0, None, 2, CpuFP, ShortForm|D|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTMnemonic|ATTSyntax, { FloatReg, FloatAcc } +fdiv, 1, 0xd8f0, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg } +fdiv, 2, 0xd8f0, None, 2, CpuFP, D|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTMnemonic|ATTSyntax, { FloatReg, FloatAcc } // alias for fdivp fdiv, 0, 0xdef1, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Ugh|ATTMnemonic|ATTSyntax, { 0 } fdiv, 0, 0xdef9, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Ugh|ATTMnemonic, { 0 } -fdiv, 2, 0xd8f0, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|No_qSuf|ShortForm|D|FloatR, { FloatReg, FloatAcc } +fdiv, 2, 0xd8f0, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|No_qSuf|D|FloatR, { FloatReg, FloatAcc } fdiv, 1, 0xd8, 0x6, 1, CpuFP, Modrm|FloatMF|No_bSuf|No_wSuf|No_qSuf|No_ldSuf, { Dword|Qword|Unspecified|BaseIndex } fidiv, 1, 0xde, 0x6, 1, CpuFP, Modrm|FloatMF|No_bSuf|No_wSuf|No_qSuf|No_ldSuf, { Word|Dword|Unspecified|BaseIndex } -fdivp, 2, 0xdef0, None, 2, CpuFP, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTMnemonic|ATTSyntax, { FloatAcc, FloatReg } -fdivp, 1, 0xdef0, None, 2, CpuFP, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTMnemonic|ATTSyntax, { FloatReg } +fdivp, 2, 0xdef0, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTMnemonic|ATTSyntax, { FloatAcc, FloatReg } +fdivp, 1, 0xdef0, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTMnemonic|ATTSyntax, { FloatReg } fdivp, 0, 0xdef1, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTMnemonic|ATTSyntax, { 0 } -fdivp, 2, 0xdef8, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|No_qSuf|ShortForm, { FloatAcc, FloatReg } -fdivp, 1, 0xdef8, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|No_qSuf|ShortForm, { FloatReg } +fdivp, 2, 0xdef8, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|No_qSuf, { FloatAcc, FloatReg } +fdivp, 1, 0xdef8, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|No_qSuf, { FloatReg } fdivp, 0, 0xdef9, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|No_qSuf, { 0 } // divide reverse -fdivr, 1, 0xd8f8, None, 2, CpuFP, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg } -fdivr, 2, 0xd8f8, None, 2, CpuFP, ShortForm|D|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTMnemonic|ATTSyntax, { FloatReg, FloatAcc } +fdivr, 1, 0xd8f8, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg } +fdivr, 2, 0xd8f8, None, 2, CpuFP, D|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTMnemonic|ATTSyntax, { FloatReg, FloatAcc } // alias for fdivrp fdivr, 0, 0xdef9, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Ugh|ATTMnemonic|ATTSyntax, { 0 } fdivr, 0, 0xdef1, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Ugh|ATTMnemonic, { 0 } -fdivr, 2, 0xd8f8, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|No_qSuf|ShortForm|D|FloatR, { FloatReg, FloatAcc } +fdivr, 2, 0xd8f8, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|No_qSuf|D|FloatR, { FloatReg, FloatAcc } fdivr, 1, 0xd8, 0x7, 1, CpuFP, Modrm|FloatMF|No_bSuf|No_wSuf|No_qSuf|No_ldSuf, { Dword|Qword|Unspecified|BaseIndex } fidivr, 1, 0xde, 0x7, 1, CpuFP, Modrm|FloatMF|No_bSuf|No_wSuf|No_qSuf|No_ldSuf, { Word|Dword|Unspecified|BaseIndex } -fdivrp, 2, 0xdef8, None, 2, CpuFP, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTMnemonic|ATTSyntax, { FloatAcc, FloatReg } -fdivrp, 1, 0xdef8, None, 2, CpuFP, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTMnemonic|ATTSyntax, { FloatReg } +fdivrp, 2, 0xdef8, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTMnemonic|ATTSyntax, { FloatAcc, FloatReg } +fdivrp, 1, 0xdef8, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTMnemonic|ATTSyntax, { FloatReg } fdivrp, 0, 0xdef9, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTMnemonic|ATTSyntax, { 0 } -fdivrp, 2, 0xdef0, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|No_qSuf|ShortForm, { FloatAcc, FloatReg } -fdivrp, 1, 0xdef0, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|No_qSuf|ShortForm, { FloatReg } +fdivrp, 2, 0xdef0, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|No_qSuf, { FloatAcc, FloatReg } +fdivrp, 1, 0xdef0, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|No_qSuf, { FloatReg } fdivrp, 0, 0xdef1, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|No_qSuf, { 0 } f2xm1, 0, 0xd9f0, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 } @@ -796,13 +753,13 @@ fstsw, 0, 0xdfe0, None, 2, Cpu287|Cpu387, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|FWait, { 0 } fnclex, 0, 0xdbe2, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 } fclex, 0, 0xdbe2, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|FWait, { 0 } -// Short forms of fldenv, fstenv use data size prefix. -fnstenv, 1, 0xd9, 0x6, 1, CpuFP, Modrm|DefaultSize|No_bSuf|No_wSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex } -fstenv, 1, 0xd9, 0x6, 1, CpuFP, Modrm|DefaultSize|No_bSuf|No_wSuf|No_qSuf|No_ldSuf|FWait, { Unspecified|BaseIndex } -fldenv, 1, 0xd9, 0x4, 1, CpuFP, Modrm|DefaultSize|No_bSuf|No_wSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex } -fnsave, 1, 0xdd, 0x6, 1, CpuFP, Modrm|DefaultSize|No_bSuf|No_wSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex } -fsave, 1, 0xdd, 0x6, 1, CpuFP, Modrm|DefaultSize|No_bSuf|No_wSuf|No_qSuf|No_ldSuf|FWait, { Unspecified|BaseIndex } -frstor, 1, 0xdd, 0x4, 1, CpuFP, Modrm|DefaultSize|No_bSuf|No_wSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex } +// Short forms of fldenv, fstenv, fsave, and frstor use data size prefix. +fnstenv, 1, 0xd9, 0x6, 1, CpuFP, Modrm|No_bSuf|No_wSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex } +fstenv, 1, 0xd9, 0x6, 1, CpuFP, Modrm|No_bSuf|No_wSuf|No_qSuf|No_ldSuf|FWait, { Unspecified|BaseIndex } +fldenv, 1, 0xd9, 0x4, 1, CpuFP, Modrm|No_bSuf|No_wSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex } +fnsave, 1, 0xdd, 0x6, 1, CpuFP, Modrm|No_bSuf|No_wSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex } +fsave, 1, 0xdd, 0x6, 1, CpuFP, Modrm|No_bSuf|No_wSuf|No_qSuf|No_ldSuf|FWait, { Unspecified|BaseIndex } +frstor, 1, 0xdd, 0x4, 1, CpuFP, Modrm|No_bSuf|No_wSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex } // 8087 only fneni, 0, 0xdbe0, None, 2, Cpu8087, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 } feni, 0, 0xdbe0, None, 2, Cpu8087, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|FWait, { 0 } @@ -813,9 +770,9 @@ fsetpm, 0, 0xdbe4, None, 2, Cpu287, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|FWait, { 0 } frstpm, 0, 0xdbe5, None, 2, Cpu287, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 } -ffree, 1, 0xddc0, None, 2, CpuFP, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg } +ffree, 1, 0xddc0, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg } // P6:free st(i), pop st -ffreep, 1, 0xdfc0, None, 2, Cpu687, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg } +ffreep, 1, 0xdfc0, None, 2, Cpu687, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg } fnop, 0, 0xd9d0, None, 2, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 } fwait, 0, 0x9b, None, 1, CpuFP, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 } @@ -878,19 +835,21 @@ // Pseudo prefixes (opcode_length == 0) -{disp8}, 0, 0x0, None, 0, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IsPrefix, { 0 } -{disp32}, 0, 0x1, None, 0, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IsPrefix, { 0 } -{load}, 0, 0x2, None, 0, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IsPrefix, { 0 } -{store}, 0, 0x3, None, 0, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IsPrefix, { 0 } -{vex2}, 0, 0x4, None, 0, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IsPrefix, { 0 } -{vex3}, 0, 0x5, None, 0, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IsPrefix, { 0 } -{evex}, 0, 0x6, None, 0, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IsPrefix, { 0 } -{rex}, 0, 0x7, None, 0, Cpu64, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IsPrefix, { 0 } -{nooptimize}, 0, 0x8, None, 0, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IsPrefix, { 0 } +{disp8}, 0, Prefix_Disp8, None, 0, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IsPrefix, { 0 } +{disp16}, 0, Prefix_Disp16, None, 0, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IsPrefix, { 0 } +{disp32}, 0, Prefix_Disp32, None, 0, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IsPrefix, { 0 } +{load}, 0, Prefix_Load, None, 0, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IsPrefix, { 0 } +{store}, 0, Prefix_Store, None, 0, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IsPrefix, { 0 } +{vex}, 0, Prefix_VEX, None, 0, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IsPrefix, { 0 } +{vex2}, 0, Prefix_VEX, None, 0, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IsPrefix, { 0 } +{vex3}, 0, Prefix_VEX3, None, 0, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IsPrefix, { 0 } +{evex}, 0, Prefix_EVEX, None, 0, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IsPrefix, { 0 } +{rex}, 0, Prefix_REX, None, 0, Cpu64, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IsPrefix, { 0 } +{nooptimize}, 0, Prefix_NoOptimize, None, 0, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IsPrefix, { 0 } // 486 extensions. -bswap, 1, 0xfc8, None, 2, Cpu486, ShortForm|No_bSuf|No_wSuf|No_sSuf|No_ldSuf, { Reg32|Reg64 } +bswap, 1, 0xfc8, None, 2, Cpu486, No_bSuf|No_wSuf|No_sSuf|No_ldSuf, { Reg32|Reg64 } xadd, 2, 0xfc0, None, 2, Cpu486, W|CheckRegSize|Modrm|No_sSuf|No_ldSuf|IsLockable|HLEPrefixOk, { Reg8|Reg16|Reg32|Reg64, Reg8|Reg16|Reg32|Reg64|Byte|Word|Dword|Qword|Unspecified|BaseIndex } cmpxchg, 2, 0xfb0, None, 2, Cpu486, W|CheckRegSize|Modrm|No_sSuf|No_ldSuf|IsLockable|HLEPrefixOk, { Reg8|Reg16|Reg32|Reg64, Reg8|Reg16|Reg32|Reg64|Byte|Word|Dword|Qword|Unspecified|BaseIndex } invd, 0, 0xf08, None, 2, Cpu486, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 } @@ -907,12 +866,14 @@ cmpxchg8b, 1, 0xfc7, 0x1, 2, Cpu586, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|IsLockable|NoRex64|HLEPrefixOk, { Qword|Unspecified|BaseIndex } // Pentium II/Pentium Pro extensions. -sysenter, 0, 0xf34, None, 2, Cpu686, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 } -sysexit, 0, 0xf35, None, 2, Cpu686, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 } +sysenter, 0, 0xf34, None, 2, Cpu64, Intel64Only|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 } +sysenter, 0, 0xf34, None, 2, Cpu686|CpuNo64, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 } +sysexit, 0, 0xf35, None, 2, Cpu64, Intel64Only|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 } +sysexit, 0, 0xf35, None, 2, Cpu686|CpuNo64, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 } fxsave, 1, 0xfae, 0x0, 2, CpuFXSR, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_ldSuf, { Unspecified|BaseIndex } -fxsave64, 1, 0xfae, 0x0, 2, CpuFXSR|Cpu64, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Rex64, { Unspecified|BaseIndex } +fxsave64, 1, 0xfae, 0x0, 2, CpuFXSR|Cpu64, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Size64, { Unspecified|BaseIndex } fxrstor, 1, 0xfae, 0x1, 2, CpuFXSR, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_ldSuf, { Unspecified|BaseIndex } -fxrstor64, 1, 0xfae, 0x1, 2, CpuFXSR|Cpu64, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Rex64, { Unspecified|BaseIndex } +fxrstor64, 1, 0xfae, 0x1, 2, CpuFXSR|Cpu64, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Size64, { Unspecified|BaseIndex } rdpmc, 0, 0xf33, None, 2, Cpu686, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 } // official undefined instr. ud2, 0, 0xf0b, None, 2, Cpu186, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 } @@ -925,68 +886,39 @@ // 3rd official undefined instr (older CPUs don't take a ModR/M byte) ud0, 2, 0xfff, None, 2, Cpu186, Modrm|No_bSuf|No_sSuf|No_ldSuf, { Reg16|Reg32|Reg64|Word|Dword|Qword|Unspecified|BaseIndex, Reg16|Reg32|Reg64 } -cmovo, 2, 0xf40, None, 2, CpuCMOV, Modrm|CheckRegSize|No_bSuf|No_sSuf|No_ldSuf, { Reg16|Reg32|Reg64|Word|Dword|Qword|Unspecified|BaseIndex, Reg16|Reg32|Reg64 } -cmovno, 2, 0xf41, None, 2, CpuCMOV, Modrm|CheckRegSize|No_bSuf|No_sSuf|No_ldSuf, { Reg16|Reg32|Reg64|Word|Dword|Qword|Unspecified|BaseIndex, Reg16|Reg32|Reg64 } -cmovb, 2, 0xf42, None, 2, CpuCMOV, Modrm|CheckRegSize|No_bSuf|No_sSuf|No_ldSuf, { Reg16|Reg32|Reg64|Word|Dword|Qword|Unspecified|BaseIndex, Reg16|Reg32|Reg64 } -cmovc, 2, 0xf42, None, 2, CpuCMOV, Modrm|CheckRegSize|No_bSuf|No_sSuf|No_ldSuf, { Reg16|Reg32|Reg64|Word|Dword|Qword|Unspecified|BaseIndex, Reg16|Reg32|Reg64 } -cmovnae, 2, 0xf42, None, 2, CpuCMOV, Modrm|CheckRegSize|No_bSuf|No_sSuf|No_ldSuf, { Reg16|Reg32|Reg64|Word|Dword|Qword|Unspecified|BaseIndex, Reg16|Reg32|Reg64 } -cmovae, 2, 0xf43, None, 2, CpuCMOV, Modrm|CheckRegSize|No_bSuf|No_sSuf|No_ldSuf, { Reg16|Reg32|Reg64|Word|Dword|Qword|Unspecified|BaseIndex, Reg16|Reg32|Reg64 } -cmovnc, 2, 0xf43, None, 2, CpuCMOV, Modrm|CheckRegSize|No_bSuf|No_sSuf|No_ldSuf, { Reg16|Reg32|Reg64|Word|Dword|Qword|Unspecified|BaseIndex, Reg16|Reg32|Reg64 } -cmovnb, 2, 0xf43, None, 2, CpuCMOV, Modrm|CheckRegSize|No_bSuf|No_sSuf|No_ldSuf, { Reg16|Reg32|Reg64|Word|Dword|Qword|Unspecified|BaseIndex, Reg16|Reg32|Reg64 } -cmove, 2, 0xf44, None, 2, CpuCMOV, Modrm|CheckRegSize|No_bSuf|No_sSuf|No_ldSuf, { Reg16|Reg32|Reg64|Word|Dword|Qword|Unspecified|BaseIndex, Reg16|Reg32|Reg64 } -cmovz, 2, 0xf44, None, 2, CpuCMOV, Modrm|CheckRegSize|No_bSuf|No_sSuf|No_ldSuf, { Reg16|Reg32|Reg64|Word|Dword|Qword|Unspecified|BaseIndex, Reg16|Reg32|Reg64 } -cmovne, 2, 0xf45, None, 2, CpuCMOV, Modrm|CheckRegSize|No_bSuf|No_sSuf|No_ldSuf, { Reg16|Reg32|Reg64|Word|Dword|Qword|Unspecified|BaseIndex, Reg16|Reg32|Reg64 } -cmovnz, 2, 0xf45, None, 2, CpuCMOV, Modrm|CheckRegSize|No_bSuf|No_sSuf|No_ldSuf, { Reg16|Reg32|Reg64|Word|Dword|Qword|Unspecified|BaseIndex, Reg16|Reg32|Reg64 } -cmovbe, 2, 0xf46, None, 2, CpuCMOV, Modrm|CheckRegSize|No_bSuf|No_sSuf|No_ldSuf, { Reg16|Reg32|Reg64|Word|Dword|Qword|Unspecified|BaseIndex, Reg16|Reg32|Reg64 } -cmovna, 2, 0xf46, None, 2, CpuCMOV, Modrm|CheckRegSize|No_bSuf|No_sSuf|No_ldSuf, { Reg16|Reg32|Reg64|Word|Dword|Qword|Unspecified|BaseIndex, Reg16|Reg32|Reg64 } -cmova, 2, 0xf47, None, 2, CpuCMOV, Modrm|CheckRegSize|No_bSuf|No_sSuf|No_ldSuf, { Reg16|Reg32|Reg64|Word|Dword|Qword|Unspecified|BaseIndex, Reg16|Reg32|Reg64 } -cmovnbe, 2, 0xf47, None, 2, CpuCMOV, Modrm|CheckRegSize|No_bSuf|No_sSuf|No_ldSuf, { Reg16|Reg32|Reg64|Word|Dword|Qword|Unspecified|BaseIndex, Reg16|Reg32|Reg64 } -cmovs, 2, 0xf48, None, 2, CpuCMOV, Modrm|CheckRegSize|No_bSuf|No_sSuf|No_ldSuf, { Reg16|Reg32|Reg64|Word|Dword|Qword|Unspecified|BaseIndex, Reg16|Reg32|Reg64 } -cmovns, 2, 0xf49, None, 2, CpuCMOV, Modrm|CheckRegSize|No_bSuf|No_sSuf|No_ldSuf, { Reg16|Reg32|Reg64|Word|Dword|Qword|Unspecified|BaseIndex, Reg16|Reg32|Reg64 } -cmovp, 2, 0xf4a, None, 2, CpuCMOV, Modrm|CheckRegSize|No_bSuf|No_sSuf|No_ldSuf, { Reg16|Reg32|Reg64|Word|Dword|Qword|Unspecified|BaseIndex, Reg16|Reg32|Reg64 } -cmovnp, 2, 0xf4b, None, 2, CpuCMOV, Modrm|CheckRegSize|No_bSuf|No_sSuf|No_ldSuf, { Reg16|Reg32|Reg64|Word|Dword|Qword|Unspecified|BaseIndex, Reg16|Reg32|Reg64 } -cmovl, 2, 0xf4c, None, 2, CpuCMOV, Modrm|CheckRegSize|No_bSuf|No_sSuf|No_ldSuf, { Reg16|Reg32|Reg64|Word|Dword|Qword|Unspecified|BaseIndex, Reg16|Reg32|Reg64 } -cmovnge, 2, 0xf4c, None, 2, CpuCMOV, Modrm|CheckRegSize|No_bSuf|No_sSuf|No_ldSuf, { Reg16|Reg32|Reg64|Word|Dword|Qword|Unspecified|BaseIndex, Reg16|Reg32|Reg64 } -cmovge, 2, 0xf4d, None, 2, CpuCMOV, Modrm|CheckRegSize|No_bSuf|No_sSuf|No_ldSuf, { Reg16|Reg32|Reg64|Word|Dword|Qword|Unspecified|BaseIndex, Reg16|Reg32|Reg64 } -cmovnl, 2, 0xf4d, None, 2, CpuCMOV, Modrm|CheckRegSize|No_bSuf|No_sSuf|No_ldSuf, { Reg16|Reg32|Reg64|Word|Dword|Qword|Unspecified|BaseIndex, Reg16|Reg32|Reg64 } -cmovle, 2, 0xf4e, None, 2, CpuCMOV, Modrm|CheckRegSize|No_bSuf|No_sSuf|No_ldSuf, { Reg16|Reg32|Reg64|Word|Dword|Qword|Unspecified|BaseIndex, Reg16|Reg32|Reg64 } -cmovng, 2, 0xf4e, None, 2, CpuCMOV, Modrm|CheckRegSize|No_bSuf|No_sSuf|No_ldSuf, { Reg16|Reg32|Reg64|Word|Dword|Qword|Unspecified|BaseIndex, Reg16|Reg32|Reg64 } -cmovg, 2, 0xf4f, None, 2, CpuCMOV, Modrm|CheckRegSize|No_bSuf|No_sSuf|No_ldSuf, { Reg16|Reg32|Reg64|Word|Dword|Qword|Unspecified|BaseIndex, Reg16|Reg32|Reg64 } -cmovnle, 2, 0xf4f, None, 2, CpuCMOV, Modrm|CheckRegSize|No_bSuf|No_sSuf|No_ldSuf, { Reg16|Reg32|Reg64|Word|Dword|Qword|Unspecified|BaseIndex, Reg16|Reg32|Reg64 } -cmovpe, 2, 0xf4a, None, 2, CpuCMOV, Modrm|CheckRegSize|No_bSuf|No_sSuf|No_ldSuf, { Reg16|Reg32|Reg64|Word|Dword|Qword|Unspecified|BaseIndex, Reg16|Reg32|Reg64 } -cmovpo, 2, 0xf4b, None, 2, CpuCMOV, Modrm|CheckRegSize|No_bSuf|No_sSuf|No_ldSuf, { Reg16|Reg32|Reg64|Word|Dword|Qword|Unspecified|BaseIndex, Reg16|Reg32|Reg64 } - -fcmovb, 2, 0xdac0, None, 2, Cpu687, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg, FloatAcc } -fcmovnae, 2, 0xdac0, None, 2, Cpu687, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg, FloatAcc } -fcmove, 2, 0xdac8, None, 2, Cpu687, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg, FloatAcc } -fcmovbe, 2, 0xdad0, None, 2, Cpu687, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg, FloatAcc } -fcmovna, 2, 0xdad0, None, 2, Cpu687, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg, FloatAcc } -fcmovu, 2, 0xdad8, None, 2, Cpu687, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg, FloatAcc } -fcmovae, 2, 0xdbc0, None, 2, Cpu687, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg, FloatAcc } -fcmovnb, 2, 0xdbc0, None, 2, Cpu687, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg, FloatAcc } -fcmovne, 2, 0xdbc8, None, 2, Cpu687, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg, FloatAcc } -fcmova, 2, 0xdbd0, None, 2, Cpu687, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg, FloatAcc } -fcmovnbe, 2, 0xdbd0, None, 2, Cpu687, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg, FloatAcc } -fcmovnu, 2, 0xdbd8, None, 2, Cpu687, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg, FloatAcc } - -fcomi, 2, 0xdbf0, None, 2, Cpu687, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg, FloatAcc } -fcomi, 0, 0xdbf1, None, 2, Cpu687, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 } -fcomi, 1, 0xdbf0, None, 2, Cpu687, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg } -fucomi, 2, 0xdbe8, None, 2, Cpu687, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg, FloatAcc } -fucomi, 0, 0xdbe9, None, 2, Cpu687, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 } -fucomi, 1, 0xdbe8, None, 2, Cpu687, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg } -fcomip, 2, 0xdff0, None, 2, Cpu687, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg, FloatAcc } -fcomip, 0, 0xdff1, None, 2, Cpu687, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 } -fcomip, 1, 0xdff0, None, 2, Cpu687, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg } -fcompi, 2, 0xdff0, None, 2, Cpu687, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg, FloatAcc } -fcompi, 0, 0xdff1, None, 2, Cpu687, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 } -fcompi, 1, 0xdff0, None, 2, Cpu687, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg } -fucomip, 2, 0xdfe8, None, 2, Cpu687, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg, FloatAcc } -fucomip, 0, 0xdfe9, None, 2, Cpu687, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 } -fucomip, 1, 0xdfe8, None, 2, Cpu687, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg } -fucompi, 2, 0xdfe8, None, 2, Cpu687, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg, FloatAcc } -fucompi, 0, 0xdfe9, None, 2, Cpu687, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 } -fucompi, 1, 0xdfe8, None, 2, Cpu687, ShortForm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg } +cmov<cc>, 2, 0xf4<cc:opc>, None, 2, CpuCMOV, Modrm|CheckRegSize|No_bSuf|No_sSuf|No_ldSuf, { Reg16|Reg32|Reg64|Word|Dword|Qword|Unspecified|BaseIndex, Reg16|Reg32|Reg64 } + +fcmovb, 2, 0xdac0, None, 2, Cpu687, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg, FloatAcc } +fcmovnae, 2, 0xdac0, None, 2, Cpu687, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg, FloatAcc } +fcmove, 2, 0xdac8, None, 2, Cpu687, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg, FloatAcc } +fcmovbe, 2, 0xdad0, None, 2, Cpu687, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg, FloatAcc } +fcmovna, 2, 0xdad0, None, 2, Cpu687, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg, FloatAcc } +fcmovu, 2, 0xdad8, None, 2, Cpu687, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg, FloatAcc } +fcmovae, 2, 0xdbc0, None, 2, Cpu687, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg, FloatAcc } +fcmovnb, 2, 0xdbc0, None, 2, Cpu687, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg, FloatAcc } +fcmovne, 2, 0xdbc8, None, 2, Cpu687, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg, FloatAcc } +fcmova, 2, 0xdbd0, None, 2, Cpu687, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg, FloatAcc } +fcmovnbe, 2, 0xdbd0, None, 2, Cpu687, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg, FloatAcc } +fcmovnu, 2, 0xdbd8, None, 2, Cpu687, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg, FloatAcc } + +fcomi, 2, 0xdbf0, None, 2, Cpu687, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg, FloatAcc } +fcomi, 0, 0xdbf1, None, 2, Cpu687, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 } +fcomi, 1, 0xdbf0, None, 2, Cpu687, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg } +fucomi, 2, 0xdbe8, None, 2, Cpu687, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg, FloatAcc } +fucomi, 0, 0xdbe9, None, 2, Cpu687, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 } +fucomi, 1, 0xdbe8, None, 2, Cpu687, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg } +fcomip, 2, 0xdff0, None, 2, Cpu687, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg, FloatAcc } +fcomip, 0, 0xdff1, None, 2, Cpu687, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 } +fcomip, 1, 0xdff0, None, 2, Cpu687, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg } +fcompi, 2, 0xdff0, None, 2, Cpu687, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg, FloatAcc } +fcompi, 0, 0xdff1, None, 2, Cpu687, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 } +fcompi, 1, 0xdff0, None, 2, Cpu687, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg } +fucomip, 2, 0xdfe8, None, 2, Cpu687, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg, FloatAcc } +fucomip, 0, 0xdfe9, None, 2, Cpu687, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 } +fucomip, 1, 0xdfe8, None, 2, Cpu687, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg } +fucompi, 2, 0xdfe8, None, 2, Cpu687, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg, FloatAcc } +fucompi, 0, 0xdfe9, None, 2, Cpu687, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 } +fucompi, 1, 0xdfe8, None, 2, Cpu687, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { FloatReg } // Pentium4 extensions. @@ -1005,26 +937,26 @@ // spec). AMD's spec, having been in existence for much longer, failed to // recognize that and specified movd for 32- and 64-bit operations. movd, 2, 0x666e, None, 1, CpuAVX, D|Modrm|Vex=1|VexOpcode=0|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Reg32|Unspecified|BaseIndex, RegXMM } -movd, 2, 0x666e, None, 1, CpuAVX|Cpu64, D|Modrm|Vex=1|VexOpcode=0|VexW=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Rex64|SSE2AVX, { Reg64|BaseIndex, RegXMM } +movd, 2, 0x666e, None, 1, CpuAVX|Cpu64, D|Modrm|Vex=1|VexOpcode=0|VexW1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Size64|SSE2AVX, { Reg64|BaseIndex, RegXMM } movd, 2, 0x660f6e, None, 2, CpuSSE2, D|Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg32|Unspecified|BaseIndex, RegXMM } -movd, 2, 0x660f6e, None, 2, CpuSSE2|Cpu64, D|Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Rex64, { Reg64|BaseIndex, RegXMM } +movd, 2, 0x660f6e, None, 2, CpuSSE2|Cpu64, D|Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Size64, { Reg64|BaseIndex, RegXMM } movd, 2, 0xf6e, None, 2, CpuMMX, D|Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg32|Unspecified|BaseIndex, RegMMX } -movd, 2, 0xf6e, None, 2, CpuMMX|Cpu64, D|Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Rex64, { Reg64|BaseIndex, RegMMX } +movd, 2, 0xf6e, None, 2, CpuMMX|Cpu64, D|Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Size64, { Reg64|BaseIndex, RegMMX } // In the 64bit mode the short form mov immediate is redefined to have // 64bit displacement value. We put the 64bit displacement first and // we only mark constants larger than 32bit as Disp64. movq, 2, 0xa1, None, 1, Cpu64, D|Size64|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Disp64|Unspecified|Qword, Acc|Qword } movq, 2, 0x89, None, 1, Cpu64, D|Modrm|Size64|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|HLEPrefixOk=3, { Reg64, Reg64|Unspecified|Qword|BaseIndex } movq, 2, 0xc7, 0x0, 1, Cpu64, Modrm|Size64|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|HLEPrefixOk=3|Optimize, { Imm32S, Reg64|Qword|Unspecified|BaseIndex } -movq, 2, 0xb8, None, 1, Cpu64, ShortForm|Size64|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Optimize, { Imm64, Reg64 } -movq, 2, 0xf37e, None, 1, CpuAVX, Load|Modrm|Vex=1|VexOpcode=0|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64|SSE2AVX, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } -movq, 2, 0x66d6, None, 1, CpuAVX, Modrm|Vex=1|VexOpcode=0|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64|SSE2AVX, { RegXMM, Qword|Unspecified|BaseIndex|RegXMM } -movq, 2, 0x666e, None, 1, CpuAVX|Cpu64, D|Modrm|Vex=1|VexOpcode=0|VexW=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Size64|SSE2AVX, { Reg64|Unspecified|BaseIndex, RegXMM } -movq, 2, 0xf30f7e, None, 2, CpuSSE2, Load|Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Unspecified|Qword|BaseIndex|RegXMM, RegXMM } -movq, 2, 0x660fd6, None, 2, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { RegXMM, Unspecified|Qword|BaseIndex|RegXMM } -movq, 2, 0x660f6e, None, 2, Cpu64, D|Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Size64, { Reg64|Unspecified|BaseIndex, RegXMM } -movq, 2, 0xf6f, None, 2, CpuMMX, D|Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|Qword|BaseIndex|RegMMX, RegMMX } -movq, 2, 0xf6e, None, 2, Cpu64, D|Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Size64, { Reg64|Unspecified|BaseIndex, RegMMX } +movq, 2, 0xb8, None, 1, Cpu64, Size64|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Optimize, { Imm64, Reg64 } +movq, 2, 0xf37e, None, 1, CpuAVX, Load|Modrm|Vex=1|VexOpcode=0|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } +movq, 2, 0x66d6, None, 1, CpuAVX, Modrm|Vex=1|VexOpcode=0|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM, Qword|Unspecified|BaseIndex|RegXMM } +movq, 2, 0x666e, None, 1, CpuAVX|Cpu64, D|Modrm|Vex=1|VexOpcode=0|VexW1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Size64|SSE2AVX, { Reg64|Unspecified|BaseIndex, RegXMM } +movq, 2, 0xf30f7e, None, 2, CpuSSE2, Load|Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Unspecified|Qword|BaseIndex|RegXMM, RegXMM } +movq, 2, 0x660fd6, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { RegXMM, Unspecified|Qword|BaseIndex|RegXMM } +movq, 2, 0x660f6e, None, 2, Cpu64, D|Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Size64, { Reg64|Unspecified|BaseIndex, RegXMM } +movq, 2, 0xf6f, None, 2, CpuMMX, D|Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Unspecified|Qword|BaseIndex|RegMMX, RegMMX } +movq, 2, 0xf6e, None, 2, Cpu64, D|Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Size64, { Reg64|Unspecified|BaseIndex, RegMMX } // The segment register moves accept Reg64 so that a segment register // can be copied to a 64 bit register, and vice versa. movq, 2, 0x8c, None, 1, Cpu64, D|RegMem|Size64|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { SReg, Reg64 } @@ -1035,154 +967,154 @@ // Real MMX/SSE instructions. packssdw, 2, 0x666b, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } packssdw, 2, 0x660f6b, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -packssdw, 2, 0xf6b, None, 2, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +packssdw, 2, 0xf6b, None, 2, CpuMMX, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } packsswb, 2, 0x6663, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } packsswb, 2, 0x660f63, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -packsswb, 2, 0xf63, None, 2, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +packsswb, 2, 0xf63, None, 2, CpuMMX, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } packuswb, 2, 0x6667, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } packuswb, 2, 0x660f67, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -packuswb, 2, 0xf67, None, 2, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +packuswb, 2, 0xf67, None, 2, CpuMMX, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } paddb, 2, 0x66fc, None, 1, CpuAVX, Modrm|C|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } paddb, 2, 0x660ffc, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -paddb, 2, 0xffc, None, 2, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +paddb, 2, 0xffc, None, 2, CpuMMX, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } paddw, 2, 0x66fd, None, 1, CpuAVX, Modrm|C|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } paddw, 2, 0x660ffd, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -paddw, 2, 0xffd, None, 2, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +paddw, 2, 0xffd, None, 2, CpuMMX, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } paddd, 2, 0x66fe, None, 1, CpuAVX, Modrm|C|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } paddd, 2, 0x660ffe, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -paddd, 2, 0xffe, None, 2, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +paddd, 2, 0xffe, None, 2, CpuMMX, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } paddq, 2, 0x66d4, None, 1, CpuAVX, Modrm|C|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } paddq, 2, 0x660fd4, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -paddq, 2, 0xfd4, None, 2, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoAVX, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +paddq, 2, 0xfd4, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64|NoAVX, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } paddsb, 2, 0x66ec, None, 1, CpuAVX, Modrm|C|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } paddsb, 2, 0x660fec, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -paddsb, 2, 0xfec, None, 2, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +paddsb, 2, 0xfec, None, 2, CpuMMX, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } paddsw, 2, 0x66ed, None, 1, CpuAVX, Modrm|C|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } paddsw, 2, 0x660fed, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -paddsw, 2, 0xfed, None, 2, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +paddsw, 2, 0xfed, None, 2, CpuMMX, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } paddusb, 2, 0x66dc, None, 1, CpuAVX, Modrm|C|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } paddusb, 2, 0x660fdc, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -paddusb, 2, 0xfdc, None, 2, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +paddusb, 2, 0xfdc, None, 2, CpuMMX, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } paddusw, 2, 0x66dd, None, 1, CpuAVX, Modrm|C|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } paddusw, 2, 0x660fdd, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -paddusw, 2, 0xfdd, None, 2, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +paddusw, 2, 0xfdd, None, 2, CpuMMX, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } pand, 2, 0x66db, None, 1, CpuAVX, Modrm|C|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } pand, 2, 0x660fdb, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -pand, 2, 0xfdb, None, 2, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +pand, 2, 0xfdb, None, 2, CpuMMX, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } pandn, 2, 0x66df, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } pandn, 2, 0x660fdf, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -pandn, 2, 0xfdf, None, 2, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +pandn, 2, 0xfdf, None, 2, CpuMMX, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } pcmpeqb, 2, 0x6674, None, 1, CpuAVX, Modrm|C|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } pcmpeqb, 2, 0x660f74, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -pcmpeqb, 2, 0xf74, None, 2, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +pcmpeqb, 2, 0xf74, None, 2, CpuMMX, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } pcmpeqw, 2, 0x6675, None, 1, CpuAVX, Modrm|C|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } pcmpeqw, 2, 0x660f75, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -pcmpeqw, 2, 0xf75, None, 2, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +pcmpeqw, 2, 0xf75, None, 2, CpuMMX, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } pcmpeqd, 2, 0x6676, None, 1, CpuAVX, Modrm|C|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } pcmpeqd, 2, 0x660f76, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -pcmpeqd, 2, 0xf76, None, 2, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +pcmpeqd, 2, 0xf76, None, 2, CpuMMX, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } pcmpgtb, 2, 0x6664, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } pcmpgtb, 2, 0x660f64, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -pcmpgtb, 2, 0xf64, None, 2, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +pcmpgtb, 2, 0xf64, None, 2, CpuMMX, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } pcmpgtw, 2, 0x6665, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } pcmpgtw, 2, 0x660f65, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -pcmpgtw, 2, 0xf65, None, 2, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +pcmpgtw, 2, 0xf65, None, 2, CpuMMX, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } pcmpgtd, 2, 0x6666, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } pcmpgtd, 2, 0x660f66, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -pcmpgtd, 2, 0xf66, None, 2, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +pcmpgtd, 2, 0xf66, None, 2, CpuMMX, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } pmaddwd, 2, 0x66f5, None, 1, CpuAVX, Modrm|C|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } pmaddwd, 2, 0x660ff5, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -pmaddwd, 2, 0xff5, None, 2, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +pmaddwd, 2, 0xff5, None, 2, CpuMMX, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } pmulhw, 2, 0x66e5, None, 1, CpuAVX, Modrm|C|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } pmulhw, 2, 0x660fe5, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -pmulhw, 2, 0xfe5, None, 2, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +pmulhw, 2, 0xfe5, None, 2, CpuMMX, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } pmullw, 2, 0x66d5, None, 1, CpuAVX, Modrm|C|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } pmullw, 2, 0x660fd5, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -pmullw, 2, 0xfd5, None, 2, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +pmullw, 2, 0xfd5, None, 2, CpuMMX, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } por, 2, 0x66eb, None, 1, CpuAVX, Modrm|C|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } por, 2, 0x660feb, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -por, 2, 0xfeb, None, 2, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +por, 2, 0xfeb, None, 2, CpuMMX, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } psllw, 2, 0x6671, 0x6, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=2|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Imm8, RegXMM } psllw, 2, 0x66f1, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } psllw, 2, 0x660f71, 0x6, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM } psllw, 2, 0x660ff1, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -psllw, 2, 0xf71, 0x6, 2, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegMMX } -psllw, 2, 0xff1, None, 2, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +psllw, 2, 0xf71, 0x6, 2, CpuMMX, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegMMX } +psllw, 2, 0xff1, None, 2, CpuMMX, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } pslld, 2, 0x6672, 0x6, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=2|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Imm8, RegXMM } pslld, 2, 0x66f2, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } pslld, 2, 0x660f72, 0x6, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM } pslld, 2, 0x660ff2, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -pslld, 2, 0xf72, 0x6, 2, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegMMX } -pslld, 2, 0xff2, None, 2, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +pslld, 2, 0xf72, 0x6, 2, CpuMMX, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegMMX } +pslld, 2, 0xff2, None, 2, CpuMMX, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } psllq, 2, 0x6673, 0x6, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=2|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Imm8, RegXMM } psllq, 2, 0x66f3, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } psllq, 2, 0x660f73, 0x6, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM } psllq, 2, 0x660ff3, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -psllq, 2, 0xf73, 0x6, 2, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegMMX } -psllq, 2, 0xff3, None, 2, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +psllq, 2, 0xf73, 0x6, 2, CpuMMX, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegMMX } +psllq, 2, 0xff3, None, 2, CpuMMX, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } psraw, 2, 0x6671, 0x4, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=2|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Imm8, RegXMM } psraw, 2, 0x66e1, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } psraw, 2, 0x660f71, 0x4, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM } psraw, 2, 0x660fe1, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -psraw, 2, 0xf71, 0x4, 2, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegMMX } -psraw, 2, 0xfe1, None, 2, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +psraw, 2, 0xf71, 0x4, 2, CpuMMX, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegMMX } +psraw, 2, 0xfe1, None, 2, CpuMMX, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } psrad, 2, 0x6672, 0x4, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=2|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Imm8, RegXMM } psrad, 2, 0x66e2, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } psrad, 2, 0x660f72, 0x4, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM } psrad, 2, 0x660fe2, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -psrad, 2, 0xf72, 0x4, 2, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegMMX } -psrad, 2, 0xfe2, None, 2, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +psrad, 2, 0xf72, 0x4, 2, CpuMMX, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegMMX } +psrad, 2, 0xfe2, None, 2, CpuMMX, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } psrlw, 2, 0x6671, 0x2, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=2|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Imm8, RegXMM } psrlw, 2, 0x66d1, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } psrlw, 2, 0x660f71, 0x2, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM } psrlw, 2, 0x660fd1, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -psrlw, 2, 0xf71, 0x2, 2, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegMMX } -psrlw, 2, 0xfd1, None, 2, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +psrlw, 2, 0xf71, 0x2, 2, CpuMMX, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegMMX } +psrlw, 2, 0xfd1, None, 2, CpuMMX, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } psrld, 2, 0x6672, 0x2, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=2|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Imm8, RegXMM } psrld, 2, 0x66d2, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } psrld, 2, 0x660f72, 0x2, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM } psrld, 2, 0x660fd2, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -psrld, 2, 0xf72, 0x2, 2, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegMMX } -psrld, 2, 0xfd2, None, 2, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +psrld, 2, 0xf72, 0x2, 2, CpuMMX, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegMMX } +psrld, 2, 0xfd2, None, 2, CpuMMX, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } psrlq, 2, 0x6673, 0x2, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=2|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Imm8, RegXMM } psrlq, 2, 0x66d3, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } psrlq, 2, 0x660f73, 0x2, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM } psrlq, 2, 0x660fd3, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -psrlq, 2, 0xf73, 0x2, 2, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegMMX } -psrlq, 2, 0xfd3, None, 2, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +psrlq, 2, 0xf73, 0x2, 2, CpuMMX, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegMMX } +psrlq, 2, 0xfd3, None, 2, CpuMMX, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } psubb, 2, 0x66f8, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } psubb, 2, 0x660ff8, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -psubb, 2, 0xff8, None, 2, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +psubb, 2, 0xff8, None, 2, CpuMMX, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } psubw, 2, 0x66f9, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } psubw, 2, 0x660ff9, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -psubw, 2, 0xff9, None, 2, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +psubw, 2, 0xff9, None, 2, CpuMMX, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } psubd, 2, 0x66fa, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } psubd, 2, 0x660ffa, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -psubd, 2, 0xffa, None, 2, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +psubd, 2, 0xffa, None, 2, CpuMMX, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } psubq, 2, 0x66fb, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } psubq, 2, 0x660ffb, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -psubq, 2, 0xffb, None, 2, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoAVX, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +psubq, 2, 0xffb, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64|NoAVX, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } psubsb, 2, 0x66e8, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } psubsb, 2, 0x660fe8, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -psubsb, 2, 0xfe8, None, 2, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +psubsb, 2, 0xfe8, None, 2, CpuMMX, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } psubsw, 2, 0x66e9, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } psubsw, 2, 0x660fe9, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -psubsw, 2, 0xfe9, None, 2, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +psubsw, 2, 0xfe9, None, 2, CpuMMX, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } psubusb, 2, 0x66d8, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } psubusb, 2, 0x660fd8, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -psubusb, 2, 0xfd8, None, 2, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +psubusb, 2, 0xfd8, None, 2, CpuMMX, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } psubusw, 2, 0x66d9, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } psubusw, 2, 0x660fd9, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -psubusw, 2, 0xfd9, None, 2, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +psubusw, 2, 0xfd9, None, 2, CpuMMX, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } punpckhbw, 2, 0x6668, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } punpckhbw, 2, 0x660f68, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -punpckhbw, 2, 0xf68, None, 2, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +punpckhbw, 2, 0xf68, None, 2, CpuMMX, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } punpckhwd, 2, 0x6669, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } punpckhwd, 2, 0x660f69, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -punpckhwd, 2, 0xf69, None, 2, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +punpckhwd, 2, 0xf69, None, 2, CpuMMX, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } punpckhdq, 2, 0x666a, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } punpckhdq, 2, 0x660f6a, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -punpckhdq, 2, 0xf6a, None, 2, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +punpckhdq, 2, 0xf6a, None, 2, CpuMMX, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } punpcklbw, 2, 0x6660, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } punpcklbw, 2, 0x660f60, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } punpcklbw, 2, 0xf60, None, 2, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegMMX, RegMMX } @@ -1194,81 +1126,57 @@ punpckldq, 2, 0xf62, None, 2, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegMMX, RegMMX } pxor, 2, 0x66ef, None, 1, CpuAVX, Modrm|C|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } pxor, 2, 0x660fef, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -pxor, 2, 0xfef, None, 2, CpuMMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +pxor, 2, 0xfef, None, 2, CpuMMX, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } // SSE instructions. +<sse_frel:imm:comm, eq:0:C, lt:1:, le:2:, unord:3:C, neq:4:C, nlt:5:, nle:6:, ord:7:C> + addps, 2, 0x58, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } addps, 2, 0xf58, None, 2, CpuSSE, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -addss, 2, 0xf358, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } +addss, 2, 0xf358, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } addss, 2, 0xf30f58, None, 2, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } andnps, 2, 0x55, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } andnps, 2, 0xf55, None, 2, CpuSSE, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } andps, 2, 0x54, None, 1, CpuAVX, Modrm|C|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } andps, 2, 0xf54, None, 2, CpuSSE, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -cmpeqps, 2, 0xc2, 0x0, 1, CpuAVX, Modrm|C|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } -cmpeqps, 2, 0xfc2, 0x0, 2, CpuSSE, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM } -cmpeqss, 2, 0xf3c2, 0x0, 1, CpuAVX, Modrm|C|Vex=3|VexOpcode=0|VexVVVV=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SSE2AVX, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } -cmpeqss, 2, 0xf30fc2, 0x0, 2, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } -cmpleps, 2, 0xc2, 0x2, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } -cmpleps, 2, 0xfc2, 0x2, 2, CpuSSE, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM } -cmpless, 2, 0xf3c2, 0x2, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SSE2AVX, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } -cmpless, 2, 0xf30fc2, 0x2, 2, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } -cmpltps, 2, 0xc2, 0x1, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } -cmpltps, 2, 0xfc2, 0x1, 2, CpuSSE, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM } -cmpltss, 2, 0xf3c2, 0x1, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SSE2AVX, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } -cmpltss, 2, 0xf30fc2, 0x1, 2, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } -cmpneqps, 2, 0xc2, 0x4, 1, CpuAVX, Modrm|C|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } -cmpneqps, 2, 0xfc2, 0x4, 2, CpuSSE, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM } -cmpneqss, 2, 0xf3c2, 0x4, 1, CpuAVX, Modrm|C|Vex=3|VexOpcode=0|VexVVVV=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SSE2AVX, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } -cmpneqss, 2, 0xf30fc2, 0x4, 2, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } -cmpnleps, 2, 0xc2, 0x6, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } -cmpnleps, 2, 0xfc2, 0x6, 2, CpuSSE, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM } -cmpnless, 2, 0xf3c2, 0x6, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SSE2AVX, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } -cmpnless, 2, 0xf30fc2, 0x6, 2, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } -cmpnltps, 2, 0xc2, 0x5, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } -cmpnltps, 2, 0xfc2, 0x5, 2, CpuSSE, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM } -cmpnltss, 2, 0xf3c2, 0x5, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SSE2AVX, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } -cmpnltss, 2, 0xf30fc2, 0x5, 2, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } -cmpordps, 2, 0xc2, 0x7, 1, CpuAVX, Modrm|C|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } -cmpordps, 2, 0xfc2, 0x7, 2, CpuSSE, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM } -cmpordss, 2, 0xf3c2, 0x7, 1, CpuAVX, Modrm|C|Vex=3|VexOpcode=0|VexVVVV=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SSE2AVX, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } -cmpordss, 2, 0xf30fc2, 0x7, 2, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } -cmpunordps, 2, 0xc2, 0x3, 1, CpuAVX, Modrm|C|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } -cmpunordps, 2, 0xfc2, 0x3, 2, CpuSSE, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM } -cmpunordss, 2, 0xf3c2, 0x3, 1, CpuAVX, Modrm|C|Vex=3|VexOpcode=0|VexVVVV=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SSE2AVX, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } -cmpunordss, 2, 0xf30fc2, 0x3, 2, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } +cmp<sse_frel>ps, 2, 0xc2, <sse_frel:imm>, 1, CpuAVX, Modrm|<sse_frel:comm>|Vex128|VexOpcode=0|VexVVVV|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } +cmp<sse_frel>ps, 2, 0xfc2, <sse_frel:imm>, 2, CpuSSE, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM } +cmp<sse_frel>ss, 2, 0xf3c2, <sse_frel:imm>, 1, CpuAVX, Modrm|<sse_frel:comm>|VexLIG|VexOpcode=0|VexVVVV|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SSE2AVX, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM } +cmp<sse_frel>ss, 2, 0xf30fc2, <sse_frel:imm>, 2, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM } cmpps, 3, 0xc2, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Imm8, RegXMM|Unspecified|BaseIndex, RegXMM } cmpps, 3, 0xfc2, None, 2, CpuSSE, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|Unspecified|BaseIndex, RegXMM } -cmpss, 3, 0xf3c2, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Imm8, Dword|Unspecified|BaseIndex|RegXMM, RegXMM } +cmpss, 3, 0xf3c2, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Imm8, Dword|Unspecified|BaseIndex|RegXMM, RegXMM } cmpss, 3, 0xf30fc2, None, 2, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Dword|Unspecified|BaseIndex|RegXMM, RegXMM } -comiss, 2, 0x2f, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } +comiss, 2, 0x2f, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } comiss, 2, 0xf2f, None, 2, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } -cvtpi2ps, 2, 0xf2a, None, 2, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoAVX, { Qword|Unspecified|BaseIndex|RegMMX, RegXMM } -cvtps2pi, 2, 0xf2d, None, 2, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoAVX, { Qword|Unspecified|BaseIndex|RegXMM, RegMMX } +cvtpi2ps, 2, 0xf2a, None, 2, CpuSSE, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64|NoAVX, { Qword|Unspecified|BaseIndex|RegMMX, RegXMM } +cvtps2pi, 2, 0xf2d, None, 2, CpuSSE, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64|NoAVX, { Qword|Unspecified|BaseIndex|RegXMM, RegMMX } cvtsi2ss, 2, 0xf32a, None, 1, CpuAVX|CpuNo64, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Reg32|Dword|Unspecified|BaseIndex, RegXMM } -cvtsi2ss, 2, 0xf32a, None, 1, CpuAVX|Cpu64, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|SSE2AVX, { Reg32|Reg64|Dword|Qword|Unspecified|BaseIndex, RegXMM } +cvtsi2ss, 2, 0xf32a, None, 1, CpuAVX|Cpu64, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|SSE2AVX|ATTSyntax, { Reg32|Reg64|Dword|Qword|Unspecified|BaseIndex, RegXMM } +cvtsi2ss, 2, 0xf32a, None, 1, CpuAVX|Cpu64, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|SSE2AVX|IntelSyntax, { Reg32|Reg64|Dword|Qword|Unspecified|BaseIndex, RegXMM } cvtsi2ss, 2, 0xf30f2a, None, 2, CpuSSE|CpuNo64, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg32|Dword|Unspecified|BaseIndex, RegXMM } -cvtsi2ss, 2, 0xf30f2a, None, 2, CpuSSE|Cpu64, Modrm|No_bSuf|No_wSuf|No_sSuf|No_ldSuf, { Reg32|Reg64|Dword|Qword|Unspecified|BaseIndex, RegXMM } -cvtss2si, 2, 0xf32d, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|ToQword|SSE2AVX, { Dword|Unspecified|BaseIndex|RegXMM, Reg32|Reg64 } +cvtsi2ss, 2, 0xf30f2a, None, 2, CpuSSE|Cpu64, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|ATTSyntax, { Reg32|Reg64|Dword|Qword|Unspecified|BaseIndex, RegXMM } +cvtsi2ss, 2, 0xf30f2a, None, 2, CpuSSE|Cpu64, Modrm|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|IntelSyntax, { Reg32|Reg64|Dword|Qword|Unspecified|BaseIndex, RegXMM } +cvtss2si, 2, 0xf32d, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|ToQword|SSE2AVX, { Dword|Unspecified|BaseIndex|RegXMM, Reg32|Reg64 } cvtss2si, 2, 0xf30f2d, None, 2, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|ToQword, { Dword|Unspecified|BaseIndex|RegXMM, Reg32|Reg64 } -cvttps2pi, 2, 0xf2c, None, 2, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoAVX, { Qword|Unspecified|BaseIndex|RegXMM, RegMMX } -cvttss2si, 2, 0xf32c, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|ToQword|SSE2AVX, { Dword|Unspecified|BaseIndex|RegXMM, Reg32|Reg64 } +cvttps2pi, 2, 0xf2c, None, 2, CpuSSE, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64|NoAVX, { Qword|Unspecified|BaseIndex|RegXMM, RegMMX } +cvttss2si, 2, 0xf32c, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|ToQword|SSE2AVX, { Dword|Unspecified|BaseIndex|RegXMM, Reg32|Reg64 } cvttss2si, 2, 0xf30f2c, None, 2, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|ToQword, { Dword|Unspecified|BaseIndex|RegXMM, Reg32|Reg64 } divps, 2, 0x5e, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } divps, 2, 0xf5e, None, 2, CpuSSE, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -divss, 2, 0xf35e, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } +divss, 2, 0xf35e, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } divss, 2, 0xf30f5e, None, 2, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } ldmxcsr, 1, 0xae, 0x2, 1, CpuAVX, Modrm|Vex128|VexOpcode=0|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Dword|Unspecified|BaseIndex } ldmxcsr, 1, 0xfae, 0x2, 2, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoAVX, { Dword|Unspecified|BaseIndex } maskmovq, 2, 0xff7, None, 2, CpuSSE|Cpu3dnowA, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoAVX, { RegMMX, RegMMX } maxps, 2, 0x5f, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } maxps, 2, 0xf5f, None, 2, CpuSSE, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -maxss, 2, 0xf35f, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } +maxss, 2, 0xf35f, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } maxss, 2, 0xf30f5f, None, 2, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } minps, 2, 0x5d, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } minps, 2, 0xf5d, None, 2, CpuSSE, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -minss, 2, 0xf35d, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } +minss, 2, 0xf35d, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } minss, 2, 0xf30f5d, None, 2, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } movaps, 2, 0x28, None, 1, CpuAVX, D|Modrm|Vex|VexOpcode=0|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } movaps, 2, 0xf28, None, 2, CpuSSE, D|Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } @@ -1282,8 +1190,8 @@ movlps, 2, 0x12, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Qword|Unspecified|BaseIndex, RegXMM } movlps, 2, 0x13, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM, Qword|Unspecified|BaseIndex } movlps, 2, 0xf12, None, 2, CpuSSE, D|Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex, RegXMM } -movmskps, 2, 0x50, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexW=1|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|NoRex64|SSE2AVX, { RegXMM, Reg32|Reg64 } -movmskps, 2, 0xf50, None, 2, CpuSSE, Modrm|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|NoRex64, { RegXMM, Reg32|Reg64 } +movmskps, 2, 0x50, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexW0|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|SSE2AVX, { RegXMM, Reg32|Reg64 } +movmskps, 2, 0xf50, None, 2, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|NoRex64, { RegXMM, Reg32|Reg64 } movntps, 2, 0x2b, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM, Xmmword|Unspecified|BaseIndex } movntps, 2, 0xf2b, None, 2, CpuSSE, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, Xmmword|Unspecified|BaseIndex } movntq, 2, 0xfe7, None, 2, CpuSSE|Cpu3dnowA, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoAVX, { RegMMX, Qword|Unspecified|BaseIndex } @@ -1296,77 +1204,77 @@ movups, 2, 0xf10, None, 2, CpuSSE, D|Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } mulps, 2, 0x59, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } mulps, 2, 0xf59, None, 2, CpuSSE, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -mulss, 2, 0xf359, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } +mulss, 2, 0xf359, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } mulss, 2, 0xf30f59, None, 2, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } orps, 2, 0x56, None, 1, CpuAVX, Modrm|C|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } orps, 2, 0xf56, None, 2, CpuSSE, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -pavgb, 2, 0xfe0, None, 2, CpuSSE|Cpu3dnowA, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoAVX, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +pavgb, 2, 0xfe0, None, 2, CpuSSE|Cpu3dnowA, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64|NoAVX, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } pavgb, 2, 0x66e0, None, 1, CpuAVX, Modrm|C|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } pavgb, 2, 0x660fe0, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -pavgw, 2, 0xfe3, None, 2, CpuSSE|Cpu3dnowA, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoAVX, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +pavgw, 2, 0xfe3, None, 2, CpuSSE|Cpu3dnowA, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64|NoAVX, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } pavgw, 2, 0x66e3, None, 1, CpuAVX, Modrm|C|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } pavgw, 2, 0x660fe3, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -pextrw, 3, 0x66c5, None, 1, CpuAVX, Load|Modrm|Vex|VexOpcode=0|VexW=1|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|NoRex64|SSE2AVX, { Imm8, RegXMM, Reg32|Reg64 } -pextrw, 3, 0x6615, None, 1, CpuAVX, RegMem|Vex|VexOpcode=2|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64|SSE2AVX, { Imm8, RegXMM, Reg32|Reg64 } -pextrw, 3, 0x6615, None, 1, CpuAVX, Modrm|Vex|VexOpcode=2|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Imm8, RegXMM, Word|Unspecified|BaseIndex } +pextrw, 3, 0x66c5, None, 1, CpuAVX, Load|Modrm|Vex|VexOpcode=0|VexW0|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|SSE2AVX, { Imm8, RegXMM, Reg32|Reg64 } +pextrw, 3, 0x6615, None, 1, CpuAVX, RegMem|Vex|VexOpcode=2|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Imm8, RegXMM, Reg32|Reg64 } +pextrw, 3, 0x6615, None, 1, CpuAVX, Modrm|Vex|VexOpcode=2|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Imm8, RegXMM, Word|Unspecified|BaseIndex } pextrw, 3, 0x660fc5, None, 2, CpuSSE2, Load|Modrm|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|NoRex64, { Imm8, RegXMM, Reg32|Reg64 } pextrw, 3, 0x660f3a15, None, 3, CpuSSE4_1, RegMem|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Imm8, RegXMM, Reg32|Reg64 } pextrw, 3, 0x660f3a15, None, 3, CpuSSE4_1, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM, Word|Unspecified|BaseIndex } pextrw, 3, 0xfc5, None, 2, CpuSSE|Cpu3dnowA, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|NoRex64|NoAVX, { Imm8, RegMMX, Reg32|Reg64 } -pinsrw, 3, 0x66c4, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|NoRex64|SSE2AVX, { Imm8, Reg32|Reg64, RegXMM } -pinsrw, 3, 0x66c4, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|SSE2AVX, { Imm8, Word|Unspecified|BaseIndex, RegXMM } +pinsrw, 3, 0x66c4, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexW0|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|SSE2AVX, { Imm8, Reg32|Reg64, RegXMM } +pinsrw, 3, 0x66c4, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Imm8, Word|Unspecified|BaseIndex, RegXMM } pinsrw, 3, 0x660fc4, None, 2, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|NoRex64, { Imm8, Reg32|Reg64, RegXMM } -pinsrw, 3, 0x660fc4, None, 2, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_ldSuf, { Imm8, Word|Unspecified|BaseIndex, RegXMM } +pinsrw, 3, 0x660fc4, None, 2, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Word|Unspecified|BaseIndex, RegXMM } pinsrw, 3, 0xfc4, None, 2, CpuSSE|Cpu3dnowA, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|NoRex64|NoAVX, { Imm8, Reg32|Reg64, RegMMX } -pinsrw, 3, 0xfc4, None, 2, CpuSSE|Cpu3dnowA, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|NoAVX, { Imm8, Word|Unspecified|BaseIndex, RegMMX } +pinsrw, 3, 0xfc4, None, 2, CpuSSE|Cpu3dnowA, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoAVX, { Imm8, Word|Unspecified|BaseIndex, RegMMX } pmaxsw, 2, 0x66ee, None, 1, CpuAVX, Modrm|C|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } pmaxsw, 2, 0x660fee, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -pmaxsw, 2, 0xfee, None, 2, CpuSSE|Cpu3dnowA, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoAVX, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +pmaxsw, 2, 0xfee, None, 2, CpuSSE|Cpu3dnowA, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64|NoAVX, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } pmaxub, 2, 0x66de, None, 1, CpuAVX, Modrm|C|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } pmaxub, 2, 0x660fde, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -pmaxub, 2, 0xfde, None, 2, CpuSSE|Cpu3dnowA, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoAVX, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +pmaxub, 2, 0xfde, None, 2, CpuSSE|Cpu3dnowA, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64|NoAVX, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } pminsw, 2, 0x66ea, None, 1, CpuAVX, Modrm|C|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } pminsw, 2, 0x660fea, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -pminsw, 2, 0xfea, None, 2, CpuSSE|Cpu3dnowA, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoAVX, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +pminsw, 2, 0xfea, None, 2, CpuSSE|Cpu3dnowA, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64|NoAVX, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } pminub, 2, 0x66da, None, 1, CpuAVX, Modrm|C|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } pminub, 2, 0x660fda, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -pminub, 2, 0xfda, None, 2, CpuSSE|Cpu3dnowA, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoAVX, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } -pmovmskb, 2, 0x66d7, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|NoRex64|SSE2AVX, { RegXMM, Reg32|Reg64 } +pminub, 2, 0xfda, None, 2, CpuSSE|Cpu3dnowA, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64|NoAVX, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +pmovmskb, 2, 0x66d7, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexW0|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|SSE2AVX, { RegXMM, Reg32|Reg64 } pmovmskb, 2, 0x660fd7, None, 2, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|NoRex64, { RegXMM, Reg32|Reg64 } pmovmskb, 2, 0xfd7, None, 2, CpuSSE|Cpu3dnowA, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|NoRex64|NoAVX, { RegMMX, Reg32|Reg64 } pmulhuw, 2, 0x66e4, None, 1, CpuAVX, Modrm|C|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } pmulhuw, 2, 0x660fe4, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -pmulhuw, 2, 0xfe4, None, 2, CpuSSE|Cpu3dnowA, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoAVX, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +pmulhuw, 2, 0xfe4, None, 2, CpuSSE|Cpu3dnowA, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64|NoAVX, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } prefetchnta, 1, 0xf18, 0x0, 2, CpuSSE|Cpu3dnowA, Modrm|Anysize|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoAVX, { BaseIndex } prefetcht0, 1, 0xf18, 0x1, 2, CpuSSE|Cpu3dnowA, Modrm|Anysize|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoAVX, { BaseIndex } prefetcht1, 1, 0xf18, 0x2, 2, CpuSSE|Cpu3dnowA, Modrm|Anysize|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoAVX, { BaseIndex } prefetcht2, 1, 0xf18, 0x3, 2, CpuSSE|Cpu3dnowA, Modrm|Anysize|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoAVX, { BaseIndex } -psadbw, 2, 0xff6, None, 2, CpuSSE|Cpu3dnowA, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoAVX, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +psadbw, 2, 0xff6, None, 2, CpuSSE|Cpu3dnowA, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64|NoAVX, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } psadbw, 2, 0x66f6, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } psadbw, 2, 0x660ff6, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -pshufw, 3, 0xf70, None, 2, CpuSSE|Cpu3dnowA, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoAVX, { Imm8, Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +pshufw, 3, 0xf70, None, 2, CpuSSE|Cpu3dnowA, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64|NoAVX, { Imm8, Qword|Unspecified|BaseIndex|RegMMX, RegMMX } rcpps, 2, 0x53, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } rcpps, 2, 0xf53, None, 2, CpuSSE, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -rcpss, 2, 0xf353, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } +rcpss, 2, 0xf353, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } rcpss, 2, 0xf30f53, None, 2, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } rsqrtps, 2, 0x52, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } rsqrtps, 2, 0xf52, None, 2, CpuSSE, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -rsqrtss, 2, 0xf352, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } +rsqrtss, 2, 0xf352, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } rsqrtss, 2, 0xf30f52, None, 2, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } -sfence, 0, 0xfaef8, None, 3, CpuSSE|Cpu3dnowA, IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoAVX, { 0 } +sfence, 0, 0xfaef8, None, 3, CpuSSE|Cpu3dnowA, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoAVX, { 0 } shufps, 3, 0xc6, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Imm8, RegXMM|Unspecified|BaseIndex, RegXMM } shufps, 3, 0xfc6, None, 2, CpuSSE, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|Unspecified|BaseIndex, RegXMM } sqrtps, 2, 0x51, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } sqrtps, 2, 0xf51, None, 2, CpuSSE, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -sqrtss, 2, 0xf351, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } +sqrtss, 2, 0xf351, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } sqrtss, 2, 0xf30f51, None, 2, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } stmxcsr, 1, 0xae, 0x3, 1, CpuAVX, Modrm|Vex128|VexOpcode=0|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Dword|Unspecified|BaseIndex } stmxcsr, 1, 0xfae, 0x3, 2, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoAVX, { Dword|Unspecified|BaseIndex } subps, 2, 0x5c, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } subps, 2, 0xf5c, None, 2, CpuSSE, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -subss, 2, 0xf35c, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } +subss, 2, 0xf35c, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } subss, 2, 0xf30f5c, None, 2, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } -ucomiss, 2, 0x2e, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } +ucomiss, 2, 0x2e, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } ucomiss, 2, 0xf2e, None, 2, CpuSSE, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } unpckhps, 2, 0x15, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } unpckhps, 2, 0xf15, None, 2, CpuSSE, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } @@ -1379,70 +1287,44 @@ addpd, 2, 0x6658, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } addpd, 2, 0x660f58, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -addsd, 2, 0xf258, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } -addsd, 2, 0xf20f58, None, 2, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } +addsd, 2, 0xf258, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } +addsd, 2, 0xf20f58, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } andnpd, 2, 0x6655, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } andnpd, 2, 0x660f55, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } andpd, 2, 0x6654, None, 1, CpuAVX, Modrm|C|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } andpd, 2, 0x660f54, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -cmpeqpd, 2, 0x66c2, 0x0, 1, CpuAVX, Modrm|C|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } -cmpeqpd, 2, 0x660fc2, 0x0, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM } -cmpeqsd, 2, 0xf2c2, 0x0, 1, CpuAVX, Modrm|C|Vex=3|VexOpcode=0|VexVVVV=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SSE2AVX, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } -cmpeqsd, 2, 0xf20fc2, 0x0, 2, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } -cmplepd, 2, 0x66c2, 0x2, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } -cmplepd, 2, 0x660fc2, 0x2, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM } -cmplesd, 2, 0xf2c2, 0x2, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SSE2AVX, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } -cmplesd, 2, 0xf20fc2, 0x2, 2, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } -cmpltpd, 2, 0x66c2, 0x1, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } -cmpltpd, 2, 0x660fc2, 0x1, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM } -cmpltsd, 2, 0xf2c2, 0x1, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SSE2AVX, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } -cmpltsd, 2, 0xf20fc2, 0x1, 2, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } -cmpneqpd, 2, 0x66c2, 0x4, 1, CpuAVX, Modrm|C|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } -cmpneqpd, 2, 0x660fc2, 0x4, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM } -cmpneqsd, 2, 0xf2c2, 0x4, 1, CpuAVX, Modrm|C|Vex=3|VexOpcode=0|VexVVVV=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SSE2AVX, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } -cmpneqsd, 2, 0xf20fc2, 0x4, 2, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } -cmpnlepd, 2, 0x66c2, 0x6, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } -cmpnlepd, 2, 0x660fc2, 0x6, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM } -cmpnlesd, 2, 0xf2c2, 0x6, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SSE2AVX, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } -cmpnlesd, 2, 0xf20fc2, 0x6, 2, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } -cmpnltpd, 2, 0x66c2, 0x5, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } -cmpnltpd, 2, 0x660fc2, 0x5, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM } -cmpnltsd, 2, 0xf2c2, 0x5, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SSE2AVX, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } -cmpnltsd, 2, 0xf20fc2, 0x5, 2, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } -cmpordpd, 2, 0x66c2, 0x7, 1, CpuAVX, Modrm|C|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } -cmpordpd, 2, 0x660fc2, 0x7, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM } -cmpordsd, 2, 0xf2c2, 0x7, 1, CpuAVX, Modrm|C|Vex=3|VexOpcode=0|VexVVVV=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SSE2AVX, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } -cmpordsd, 2, 0xf20fc2, 0x7, 2, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } -cmpunordpd, 2, 0x66c2, 0x3, 1, CpuAVX, Modrm|C|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } -cmpunordpd, 2, 0x660fc2, 0x3, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM } -cmpunordsd, 2, 0xf2c2, 0x3, 1, CpuAVX, Modrm|C|Vex=3|VexOpcode=0|VexVVVV=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SSE2AVX, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } -cmpunordsd, 2, 0xf20fc2, 0x3, 2, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } +cmp<sse_frel>pd, 2, 0x66c2, <sse_frel:imm>, 1, CpuAVX, Modrm|<sse_frel:comm>|Vex|VexOpcode=0|VexVVVV|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } +cmp<sse_frel>pd, 2, 0x660fc2, <sse_frel:imm>, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM } +cmp<sse_frel>sd, 2, 0xf2c2, <sse_frel:imm>, 1, CpuAVX, Modrm|<sse_frel:comm>|VexLIG|VexOpcode=0|VexVVVV|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SSE2AVX, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM } +cmp<sse_frel>sd, 2, 0xf20fc2, <sse_frel:imm>, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|NoRex64, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM } cmppd, 3, 0x66c2, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Imm8, RegXMM|Unspecified|BaseIndex, RegXMM } cmppd, 3, 0x660fc2, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|Unspecified|BaseIndex, RegXMM } // Intel mode string compare. cmpsd, 0, 0xa7, None, 1, 0, Size32|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IsString|RepPrefixOk, { 0 } cmpsd, 2, 0xa7, None, 1, 0, Size32|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IsStringEsOp0|RepPrefixOk, { Dword|Unspecified|BaseIndex, Dword|Unspecified|BaseIndex } -cmpsd, 3, 0xf2c2, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Imm8, Qword|Unspecified|BaseIndex|RegXMM, RegXMM } -cmpsd, 3, 0xf20fc2, None, 2, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Qword|Unspecified|BaseIndex|RegXMM, RegXMM } -comisd, 2, 0x662f, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } -comisd, 2, 0x660f2f, None, 2, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } -cvtpi2pd, 2, 0x660f2a, None, 2, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoAVX, { Qword|Unspecified|BaseIndex|RegMMX, RegXMM } +cmpsd, 3, 0xf2c2, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Imm8, Qword|Unspecified|BaseIndex|RegXMM, RegXMM } +cmpsd, 3, 0xf20fc2, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Imm8, Qword|Unspecified|BaseIndex|RegXMM, RegXMM } +comisd, 2, 0x662f, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } +comisd, 2, 0x660f2f, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } +cvtpi2pd, 2, 0x660f2a, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64|NoAVX, { Qword|Unspecified|BaseIndex|RegMMX, RegXMM } cvtsi2sd, 2, 0xf22a, None, 1, CpuAVX|CpuNo64, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Reg32|Dword|Unspecified|BaseIndex, RegXMM } -cvtsi2sd, 2, 0xf22a, None, 1, CpuAVX|Cpu64, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|SSE2AVX, { Reg32|Reg64|Dword|Qword|Unspecified|BaseIndex, RegXMM } +cvtsi2sd, 2, 0xf22a, None, 1, CpuAVX|Cpu64, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|SSE2AVX|ATTSyntax, { Reg32|Reg64|Dword|Qword|Unspecified|BaseIndex, RegXMM } +cvtsi2sd, 2, 0xf22a, None, 1, CpuAVX|Cpu64, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|SSE2AVX|IntelSyntax, { Reg32|Reg64|Dword|Qword|Unspecified|BaseIndex, RegXMM } cvtsi2sd, 2, 0xf20f2a, None, 2, CpuSSE2|CpuNo64, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg32|Dword|Unspecified|BaseIndex, RegXMM } -cvtsi2sd, 2, 0xf20f2a, None, 2, CpuSSE2|Cpu64, Modrm|No_bSuf|No_wSuf|No_sSuf|No_ldSuf, { Reg32|Reg64|Dword|Qword|Unspecified|BaseIndex, RegXMM } +cvtsi2sd, 2, 0xf20f2a, None, 2, CpuSSE2|Cpu64, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|ATTSyntax, { Reg32|Reg64|Dword|Qword|Unspecified|BaseIndex, RegXMM } +cvtsi2sd, 2, 0xf20f2a, None, 2, CpuSSE2|Cpu64, Modrm|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|IntelSyntax, { Reg32|Reg64|Dword|Qword|Unspecified|BaseIndex, RegXMM } divpd, 2, 0x665e, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } divpd, 2, 0x660f5e, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -divsd, 2, 0xf25e, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } -divsd, 2, 0xf20f5e, None, 2, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } +divsd, 2, 0xf25e, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } +divsd, 2, 0xf20f5e, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } maxpd, 2, 0x665f, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } maxpd, 2, 0x660f5f, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -maxsd, 2, 0xf25f, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } -maxsd, 2, 0xf20f5f, None, 2, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } +maxsd, 2, 0xf25f, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } +maxsd, 2, 0xf20f5f, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } minpd, 2, 0x665d, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } minpd, 2, 0x660f5d, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -minsd, 2, 0xf25d, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } -minsd, 2, 0xf20f5d, None, 2, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } +minsd, 2, 0xf25d, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } +minsd, 2, 0xf20f5d, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } movapd, 2, 0x6628, None, 1, CpuAVX, D|Modrm|Vex|VexOpcode=0|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } movapd, 2, 0x660f28, None, 2, CpuSSE2, D|Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } movhpd, 2, 0x6616, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Qword|Unspecified|BaseIndex, RegXMM } @@ -1451,7 +1333,7 @@ movlpd, 2, 0x6612, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Qword|Unspecified|BaseIndex, RegXMM } movlpd, 2, 0x6613, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM, Qword|Unspecified|BaseIndex } movlpd, 2, 0x660f12, None, 2, CpuSSE2, D|Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex, RegXMM } -movmskpd, 2, 0x6650, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|NoRex64|SSE2AVX, { RegXMM, Reg32|Reg64 } +movmskpd, 2, 0x6650, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexW0|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|SSE2AVX, { RegXMM, Reg32|Reg64 } movmskpd, 2, 0x660f50, None, 2, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|NoRex64, { RegXMM, Reg32|Reg64 } movntpd, 2, 0x662b, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM, Xmmword|Unspecified|BaseIndex } movntpd, 2, 0x660f2b, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, Xmmword|Unspecified|BaseIndex } @@ -1465,30 +1347,30 @@ movupd, 2, 0x660f10, None, 2, CpuSSE2, D|Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } mulpd, 2, 0x6659, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } mulpd, 2, 0x660f59, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -mulsd, 2, 0xf259, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } -mulsd, 2, 0xf20f59, None, 2, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } +mulsd, 2, 0xf259, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } +mulsd, 2, 0xf20f59, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } orpd, 2, 0x6656, None, 1, CpuAVX, Modrm|C|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } orpd, 2, 0x660f56, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } shufpd, 3, 0x66c6, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Imm8, RegXMM|Unspecified|BaseIndex, RegXMM } shufpd, 3, 0x660fc6, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|Unspecified|BaseIndex, RegXMM } sqrtpd, 2, 0x6651, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } sqrtpd, 2, 0x660f51, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -sqrtsd, 2, 0xf251, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } -sqrtsd, 2, 0xf20f51, None, 2, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } +sqrtsd, 2, 0xf251, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } +sqrtsd, 2, 0xf20f51, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } subpd, 2, 0x665c, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } subpd, 2, 0x660f5c, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -subsd, 2, 0xf25c, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } -subsd, 2, 0xf20f5c, None, 2, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } -ucomisd, 2, 0x662e, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } -ucomisd, 2, 0x660f2e, None, 2, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } +subsd, 2, 0xf25c, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } +subsd, 2, 0xf20f5c, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } +ucomisd, 2, 0x662e, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } +ucomisd, 2, 0x660f2e, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } unpckhpd, 2, 0x6615, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } unpckhpd, 2, 0x660f15, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } unpcklpd, 2, 0x6614, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } unpcklpd, 2, 0x660f14, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } xorpd, 2, 0x6657, None, 1, CpuAVX, Modrm|C|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } xorpd, 2, 0x660f57, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -cvtdq2pd, 2, 0xf3e6, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } -cvtdq2pd, 2, 0xf30fe6, None, 2, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } +cvtdq2pd, 2, 0xf3e6, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } +cvtdq2pd, 2, 0xf30fe6, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } cvtpd2dq, 2, 0xf2e6, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } cvtpd2dq, 2, 0xf20fe6, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } cvtdq2ps, 2, 0x5b, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } @@ -1496,15 +1378,15 @@ cvtpd2pi, 2, 0x660f2d, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoAVX, { RegXMM|Unspecified|BaseIndex, RegMMX } cvtpd2ps, 2, 0x665a, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } cvtpd2ps, 2, 0x660f5a, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -cvtps2pd, 2, 0x5a, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } -cvtps2pd, 2, 0xf5a, None, 2, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } +cvtps2pd, 2, 0x5a, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } +cvtps2pd, 2, 0xf5a, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } cvtps2dq, 2, 0x665b, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } cvtps2dq, 2, 0x660f5b, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } cvtsd2si, 2, 0xf22d, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|ToDword|SSE2AVX, { Qword|Unspecified|BaseIndex|RegXMM, Reg32|Reg64 } cvtsd2si, 2, 0xf20f2d, None, 2, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|ToDword, { Qword|Unspecified|BaseIndex|RegXMM, Reg32|Reg64 } -cvtsd2ss, 2, 0xf25a, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } -cvtsd2ss, 2, 0xf20f5a, None, 2, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } -cvtss2sd, 2, 0xf35a, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } +cvtsd2ss, 2, 0xf25a, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } +cvtsd2ss, 2, 0xf20f5a, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } +cvtss2sd, 2, 0xf35a, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } cvtss2sd, 2, 0xf30f5a, None, 2, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } cvttpd2pi, 2, 0x660f2c, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoAVX, { RegXMM|Unspecified|BaseIndex, RegMMX } cvttsd2si, 2, 0xf22c, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|ToDword|SSE2AVX, { Qword|Unspecified|BaseIndex|RegXMM, Reg32|Reg64 } @@ -1523,7 +1405,7 @@ movq2dq, 2, 0xf30fd6, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoAVX, { RegMMX, RegXMM } pmuludq, 2, 0x66f4, None, 1, CpuAVX, Modrm|C|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } pmuludq, 2, 0x660ff4, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -pmuludq, 2, 0xff4, None, 2, CpuSSE2, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoAVX, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +pmuludq, 2, 0xff4, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64|NoAVX, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } pshufd, 3, 0x6670, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Imm8, RegXMM|Unspecified|BaseIndex, RegXMM } pshufd, 3, 0x660f70, None, 2, CpuSSE2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|Unspecified|BaseIndex, RegXMM } pshufhw, 3, 0xf370, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Imm8, RegXMM|Unspecified|BaseIndex, RegXMM } @@ -1545,10 +1427,10 @@ addsubpd, 2, 0x660fd0, None, 2, CpuSSE3, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } addsubps, 2, 0xf2d0, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } addsubps, 2, 0xf20fd0, None, 2, CpuSSE3, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -cmpxchg16b, 1, 0xfc7, 0x1, 2, CpuCX16|Cpu64, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Rex64|IsLockable, { Oword|Unspecified|BaseIndex } +cmpxchg16b, 1, 0xfc7, 0x1, 2, CpuCX16|Cpu64, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Size64|IsLockable, { Oword|Unspecified|BaseIndex } fisttp, 1, 0xdf, 0x1, 1, CpuFISTTP, Modrm|FloatMF|No_bSuf|No_wSuf|No_qSuf|No_ldSuf, { Word|Dword|Unspecified|BaseIndex } fisttp, 1, 0xdd, 0x1, 1, CpuFISTTP, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|NoRex64, { Qword|Unspecified|BaseIndex } -fisttpll, 1, 0xdd, 0x1, 1, CpuFISTTP, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex } +fisttpll, 1, 0xdd, 0x1, 1, CpuFISTTP, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTSyntax, { Unspecified|BaseIndex } haddpd, 2, 0x667c, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } haddpd, 2, 0x660f7c, None, 2, CpuSSE3, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } haddps, 2, 0xf27c, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } @@ -1563,12 +1445,11 @@ // monitor is very special. CX and DX are always 32 bits. The // address size override prefix can be used to overrride the AX size in // all modes. -monitor, 3, 0xf01c8, None, 3, CpuSSE3|CpuNo64, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|AddrPrefixOpReg|NoAVX, { Acc|Word|Dword, RegC|Dword, RegD|Dword } -monitor, 3, 0xf01c8, None, 3, CpuSSE3|Cpu64, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|AddrPrefixOpReg|NoRex64|NoAVX, { Acc|Dword|Qword, RegC|Dword, RegD|Dword } +monitor, 3, 0xf01c8, None, 3, CpuSSE3, AddrPrefixOpReg|NoAVX, { Acc|Word|Dword|Qword, RegC|Dword, RegD|Dword } // The 64-bit form exists only for compatibility with older gas. -monitor, 3, 0xf01c8, None, 3, CpuSSE3|Cpu64, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|AddrPrefixOpReg|NoRex64|NoAVX, { Acc|Dword|Qword, RegC|Qword, RegD|Qword } -movddup, 2, 0xf212, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } -movddup, 2, 0xf20f12, None, 2, CpuSSE3, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } +monitor, 3, 0xf01c8, None, 3, CpuSSE3|Cpu64, AddrPrefixOpReg|NoAVX, { Acc|Dword|Qword, RegC|Qword, RegD|Qword } +movddup, 2, 0xf212, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } +movddup, 2, 0xf20f12, None, 2, CpuSSE3, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } movshdup, 2, 0xf316, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } movshdup, 2, 0xf30f16, None, 2, CpuSSE3, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } movsldup, 2, 0xf312, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } @@ -1576,7 +1457,7 @@ mwait, 0, 0xf01c9, None, 3, CpuSSE3, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoAVX, { 0 } // mwait is very special. AX and CX are always 32 bits. // The 64-bit form exists only for compatibility with older gas. -mwait, 2, 0xf01c9, None, 3, CpuSSE3, CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64|NoAVX, { Acc|Dword|Qword, RegC|Dword|Qword } +mwait, 2, 0xf01c9, None, 3, CpuSSE3, CheckRegSize|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64|NoAVX, { Acc|Dword|Qword, RegC|Dword|Qword } // VMX instructions. @@ -1586,9 +1467,9 @@ vmresume, 0, 0xf01c3, None, 3, CpuVMX, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 } vmptrld, 1, 0xfc7, 0x6, 2, CpuVMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Qword|Unspecified|BaseIndex } vmptrst, 1, 0xfc7, 0x7, 2, CpuVMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Qword|Unspecified|BaseIndex } -vmread, 2, 0xf78, None, 2, CpuVMX|CpuNo64, Modrm|No_bSuf|No_wSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg32, Reg32|Dword|Unspecified|BaseIndex } +vmread, 2, 0xf78, None, 2, CpuVMX|CpuNo64, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg32, Reg32|Unspecified|BaseIndex } vmread, 2, 0xf78, None, 2, CpuVMX|Cpu64, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|NoRex64, { Reg64, Reg64|Qword|Unspecified|BaseIndex } -vmwrite, 2, 0xf79, None, 2, CpuVMX|CpuNo64, Modrm|No_bSuf|No_wSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg32|Dword|Unspecified|BaseIndex, Reg32 } +vmwrite, 2, 0xf79, None, 2, CpuVMX|CpuNo64, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg32|Unspecified|BaseIndex, Reg32 } vmwrite, 2, 0xf79, None, 2, CpuVMX|Cpu64, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|NoRex64, { Reg64|Qword|Unspecified|BaseIndex, Reg64 } vmxoff, 0, 0xf01c4, None, 3, CpuVMX, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 } vmxon, 1, 0xf30fc7, 0x6, 2, CpuVMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Qword|Unspecified|BaseIndex } @@ -1603,66 +1484,66 @@ // EPT instructions. -invept, 2, 0x660f3880, None, 3, CpuEPT|CpuNo64, Modrm|No_bSuf|No_wSuf|No_lSuf|No_qSuf|No_sSuf|No_ldSuf, { Oword|Unspecified|BaseIndex, Reg32 } +invept, 2, 0x660f3880, None, 3, CpuEPT|CpuNo64, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_qSuf|No_sSuf|No_ldSuf, { Oword|Unspecified|BaseIndex, Reg32 } invept, 2, 0x660f3880, None, 3, CpuEPT|Cpu64, Modrm|No_bSuf|No_wSuf|No_lSuf|No_qSuf|No_sSuf|No_ldSuf|NoRex64, { Oword|Unspecified|BaseIndex, Reg64 } -invvpid, 2, 0x660f3881, None, 3, CpuEPT|CpuNo64, Modrm|No_bSuf|No_wSuf|No_lSuf|No_qSuf|No_sSuf|No_ldSuf, { Oword|Unspecified|BaseIndex, Reg32 } +invvpid, 2, 0x660f3881, None, 3, CpuEPT|CpuNo64, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_qSuf|No_sSuf|No_ldSuf, { Oword|Unspecified|BaseIndex, Reg32 } invvpid, 2, 0x660f3881, None, 3, CpuEPT|Cpu64, Modrm|No_bSuf|No_wSuf|No_lSuf|No_qSuf|No_sSuf|No_ldSuf|NoRex64, { Oword|Unspecified|BaseIndex, Reg64 } // INVPCID instruction -invpcid, 2, 0x660f3882, None, 3, CpuINVPCID|CpuNo64, Modrm|No_bSuf|No_wSuf|No_lSuf|No_qSuf|No_sSuf|No_ldSuf, { Oword|Unspecified|BaseIndex, Reg32 } +invpcid, 2, 0x660f3882, None, 3, CpuINVPCID|CpuNo64, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_qSuf|No_sSuf|No_ldSuf, { Oword|Unspecified|BaseIndex, Reg32 } invpcid, 2, 0x660f3882, None, 3, CpuINVPCID|Cpu64, Modrm|No_bSuf|No_wSuf|No_lSuf|No_qSuf|No_sSuf|No_ldSuf|NoRex64, { Oword|Unspecified|BaseIndex, Reg64 } // SSSE3 instructions. phaddw, 2, 0x6601, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } phaddw, 2, 0x660f3801, None, 3, CpuSSSE3, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -phaddw, 2, 0xf3801, None, 3, CpuSSSE3, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoAVX, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +phaddw, 2, 0xf3801, None, 3, CpuSSSE3, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64|NoAVX, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } phaddd, 2, 0x6602, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } phaddd, 2, 0x660f3802, None, 3, CpuSSSE3, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -phaddd, 2, 0xf3802, None, 3, CpuSSSE3, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoAVX, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +phaddd, 2, 0xf3802, None, 3, CpuSSSE3, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64|NoAVX, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } phaddsw, 2, 0x6603, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } phaddsw, 2, 0x660f3803, None, 3, CpuSSSE3, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -phaddsw, 2, 0xf3803, None, 3, CpuSSSE3, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoAVX, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +phaddsw, 2, 0xf3803, None, 3, CpuSSSE3, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64|NoAVX, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } phsubw, 2, 0x6605, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } phsubw, 2, 0x660f3805, None, 3, CpuSSSE3, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -phsubw, 2, 0xf3805, None, 3, CpuSSSE3, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoAVX, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +phsubw, 2, 0xf3805, None, 3, CpuSSSE3, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64|NoAVX, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } phsubd, 2, 0x6606, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } phsubd, 2, 0x660f3806, None, 3, CpuSSSE3, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -phsubd, 2, 0xf3806, None, 3, CpuSSSE3, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoAVX, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +phsubd, 2, 0xf3806, None, 3, CpuSSSE3, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64|NoAVX, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } phsubsw, 2, 0x6607, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } phsubsw, 2, 0x660f3807, None, 3, CpuSSSE3, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -phsubsw, 2, 0xf3807, None, 3, CpuSSSE3, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoAVX, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +phsubsw, 2, 0xf3807, None, 3, CpuSSSE3, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64|NoAVX, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } pmaddubsw, 2, 0x6604, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } pmaddubsw, 2, 0x660f3804, None, 3, CpuSSSE3, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -pmaddubsw, 2, 0xf3804, None, 3, CpuSSSE3, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoAVX, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +pmaddubsw, 2, 0xf3804, None, 3, CpuSSSE3, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64|NoAVX, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } pmulhrsw, 2, 0x660b, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } pmulhrsw, 2, 0x660f380b, None, 3, CpuSSSE3, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -pmulhrsw, 2, 0xf380b, None, 3, CpuSSSE3, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoAVX, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +pmulhrsw, 2, 0xf380b, None, 3, CpuSSSE3, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64|NoAVX, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } pshufb, 2, 0x6600, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } pshufb, 2, 0x660f3800, None, 3, CpuSSSE3, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -pshufb, 2, 0xf3800, None, 3, CpuSSSE3, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoAVX, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +pshufb, 2, 0xf3800, None, 3, CpuSSSE3, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64|NoAVX, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } psignb, 2, 0x6608, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } psignb, 2, 0x660f3808, None, 3, CpuSSSE3, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -psignb, 2, 0xf3808, None, 3, CpuSSSE3, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoAVX, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +psignb, 2, 0xf3808, None, 3, CpuSSSE3, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64|NoAVX, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } psignw, 2, 0x6609, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } psignw, 2, 0x660f3809, None, 3, CpuSSSE3, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -psignw, 2, 0xf3809, None, 3, CpuSSSE3, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoAVX, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +psignw, 2, 0xf3809, None, 3, CpuSSSE3, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64|NoAVX, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } psignd, 2, 0x660a, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } psignd, 2, 0x660f380a, None, 3, CpuSSSE3, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -psignd, 2, 0xf380a, None, 3, CpuSSSE3, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoAVX, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +psignd, 2, 0xf380a, None, 3, CpuSSSE3, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64|NoAVX, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } palignr, 3, 0x660f, None, 1, CpuAVX, Modrm|Vex|VexOpcode=2|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Imm8, RegXMM|Unspecified|BaseIndex, RegXMM } palignr, 3, 0x660f3a0f, None, 3, CpuSSSE3, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|Unspecified|BaseIndex, RegXMM } -palignr, 3, 0xf3a0f, None, 3, CpuSSSE3, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoAVX, { Imm8, Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +palignr, 3, 0xf3a0f, None, 3, CpuSSSE3, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64|NoAVX, { Imm8, Qword|Unspecified|BaseIndex|RegMMX, RegMMX } pabsb, 2, 0x661c, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } pabsb, 2, 0x660f381c, None, 3, CpuSSSE3, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -pabsb, 2, 0xf381c, None, 3, CpuSSSE3, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoAVX, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +pabsb, 2, 0xf381c, None, 3, CpuSSSE3, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64|NoAVX, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } pabsw, 2, 0x661d, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } pabsw, 2, 0x660f381d, None, 3, CpuSSSE3, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -pabsw, 2, 0xf381d, None, 3, CpuSSSE3, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoAVX, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +pabsw, 2, 0xf381d, None, 3, CpuSSSE3, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64|NoAVX, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } pabsd, 2, 0x661e, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } pabsd, 2, 0x660f381e, None, 3, CpuSSSE3, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -pabsd, 2, 0xf381e, None, 3, CpuSSSE3, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoAVX, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +pabsd, 2, 0xf381e, None, 3, CpuSSSE3, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64|NoAVX, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } // SSE4.1 instructions. @@ -1682,11 +1563,11 @@ dppd, 3, 0x660f3a41, None, 3, CpuSSE4_1, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|Unspecified|BaseIndex, RegXMM } dpps, 3, 0x6640, None, 1, CpuAVX, Modrm|Vex|VexOpcode=2|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Imm8, RegXMM|Unspecified|BaseIndex, RegXMM } dpps, 3, 0x660f3a40, None, 3, CpuSSE4_1, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|Unspecified|BaseIndex, RegXMM } -extractps, 3, 0x6617, None, 1, CpuAVX, Modrm|Vex|VexOpcode=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Imm8, RegXMM, Reg32|Dword|Unspecified|BaseIndex } -extractps, 3, 0x6617, None, 1, CpuAVX|Cpu64, RegMem|Vex|VexOpcode=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64|SSE2AVX, { Imm8, RegXMM, Reg64 } +extractps, 3, 0x6617, None, 1, CpuAVX, Modrm|Vex|VexOpcode=2|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Imm8, RegXMM, Reg32|Dword|Unspecified|BaseIndex } +extractps, 3, 0x6617, None, 1, CpuAVX|Cpu64, RegMem|Vex|VexOpcode=2|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Imm8, RegXMM, Reg64 } extractps, 3, 0x660f3a17, None, 3, CpuSSE4_1, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM, Reg32|Dword|Unspecified|BaseIndex } extractps, 3, 0x660f3a17, None, 3, CpuSSE4_1|Cpu64, RegMem|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Imm8, RegXMM, Reg64 } -insertps, 3, 0x6621, None, 1, CpuAVX, Modrm|Vex|VexOpcode=2|VexVVVV=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Imm8, Dword|Unspecified|BaseIndex|RegXMM, RegXMM } +insertps, 3, 0x6621, None, 1, CpuAVX, Modrm|Vex|VexOpcode=2|VexVVVV|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Imm8, Dword|Unspecified|BaseIndex|RegXMM, RegXMM } insertps, 3, 0x660f3a21, None, 3, CpuSSE4_1, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Dword|Unspecified|BaseIndex|RegXMM, RegXMM } movntdqa, 2, 0x662a, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Xmmword|Unspecified|BaseIndex, RegXMM } movntdqa, 2, 0x660f382a, None, 3, CpuSSE4_1, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Xmmword|Unspecified|BaseIndex, RegXMM } @@ -1702,24 +1583,24 @@ pblendw, 3, 0x660f3a0e, None, 3, CpuSSE4_1, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|Unspecified|BaseIndex, RegXMM } pcmpeqq, 2, 0x6629, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } pcmpeqq, 2, 0x660f3829, None, 3, CpuSSE4_1, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -pextrb, 3, 0x6614, None, 1, CpuAVX, RegMem|Vex|VexOpcode=2|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64|SSE2AVX, { Imm8, RegXMM, Reg32|Reg64 } -pextrb, 3, 0x6614, None, 1, CpuAVX, Modrm|Vex|VexOpcode=2|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Imm8, RegXMM, Byte|Unspecified|BaseIndex } +pextrb, 3, 0x6614, None, 1, CpuAVX, RegMem|Vex|VexOpcode=2|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Imm8, RegXMM, Reg32|Reg64 } +pextrb, 3, 0x6614, None, 1, CpuAVX, Modrm|Vex|VexOpcode=2|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Imm8, RegXMM, Byte|Unspecified|BaseIndex } pextrb, 3, 0x660f3a14, None, 3, CpuSSE4_1, RegMem|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Imm8, RegXMM, Reg32|Reg64 } -pextrb, 3, 0x660f3a14, None, 3, CpuSSE4_1, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM, Byte|Unspecified|BaseIndex } +pextrb, 3, 0x660f3a14, None, 3, CpuSSE4_1, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM, Byte|Unspecified|BaseIndex } pextrd, 3, 0x6616, None, 1, CpuAVX, Modrm|Vex|VexOpcode=2|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Imm8, RegXMM, Reg32|Dword|Unspecified|BaseIndex } pextrd, 3, 0x660f3a16, None, 3, CpuSSE4_1, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM, Reg32|Dword|Unspecified|BaseIndex } -pextrq, 3, 0x6616, None, 1, CpuAVX|Cpu64, Modrm|Vex|VexOpcode=2|VexW=2|Size64|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Imm8, RegXMM, Reg64|Qword|Unspecified|BaseIndex } -pextrq, 3, 0x660f3a16, None, 3, CpuSSE4_1|Cpu64, Modrm|Size64|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM, Reg64|Qword|Unspecified|BaseIndex } +pextrq, 3, 0x6616, None, 1, CpuAVX|Cpu64, Modrm|Vex|VexOpcode=2|VexW1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Imm8, RegXMM, Reg64|Unspecified|BaseIndex } +pextrq, 3, 0x660f3a16, None, 3, CpuSSE4_1|Cpu64, Modrm|Size64|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM, Reg64|Unspecified|BaseIndex } phminposuw, 2, 0x6641, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } phminposuw, 2, 0x660f3841, None, 3, CpuSSE4_1, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -pinsrb, 3, 0x6620, None, 1, CpuAVX, Modrm|Vex|VexOpcode=2|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64|SSE2AVX, { Imm8, Reg32|Reg64, RegXMM } -pinsrb, 3, 0x6620, None, 1, CpuAVX, Modrm|Vex|VexOpcode=2|VexVVVV=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Imm8, Byte|Unspecified|BaseIndex, RegXMM } +pinsrb, 3, 0x6620, None, 1, CpuAVX, Modrm|Vex|VexOpcode=2|VexVVVV=1|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Imm8, Reg32|Reg64, RegXMM } +pinsrb, 3, 0x6620, None, 1, CpuAVX, Modrm|Vex|VexOpcode=2|VexVVVV|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Imm8, Byte|Unspecified|BaseIndex, RegXMM } pinsrb, 3, 0x660f3a20, None, 3, CpuSSE4_1, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Imm8, Reg32|Reg64, RegXMM } -pinsrb, 3, 0x660f3a20, None, 3, CpuSSE4_1, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Byte|Unspecified|BaseIndex, RegXMM } +pinsrb, 3, 0x660f3a20, None, 3, CpuSSE4_1, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Byte|Unspecified|BaseIndex, RegXMM } pinsrd, 3, 0x6622, None, 1, CpuAVX, Modrm|Vex|VexOpcode=2|VexVVVV=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Imm8, Reg32|Dword|Unspecified|BaseIndex, RegXMM } pinsrd, 3, 0x660f3a22, None, 3, CpuSSE4_1, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Reg32|Dword|Unspecified|BaseIndex, RegXMM } -pinsrq, 3, 0x6622, None, 1, CpuAVX|Cpu64, Modrm|Vex|VexOpcode=2|Size64|VexVVVV=1|VexW=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Imm8, Reg64|Qword|Unspecified|BaseIndex, RegXMM } -pinsrq, 3, 0x660f3a22, None, 3, CpuSSE4_1|Cpu64, Modrm|Size64|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Reg64|Qword|Unspecified|BaseIndex, RegXMM } +pinsrq, 3, 0x6622, None, 1, CpuAVX|Cpu64, Modrm|Vex|VexOpcode=2|VexVVVV=1|VexW1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Imm8, Reg64|Unspecified|BaseIndex, RegXMM } +pinsrq, 3, 0x660f3a22, None, 3, CpuSSE4_1|Cpu64, Modrm|Size64|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Reg64|Unspecified|BaseIndex, RegXMM } pmaxsb, 2, 0x663c, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } pmaxsb, 2, 0x660f383c, None, 3, CpuSSE4_1, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } pmaxsd, 2, 0x663d, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } @@ -1736,30 +1617,30 @@ pminud, 2, 0x660f383b, None, 3, CpuSSE4_1, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } pminuw, 2, 0x663a, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } pminuw, 2, 0x660f383a, None, 3, CpuSSE4_1, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } -pmovsxbw, 2, 0x6620, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } -pmovsxbw, 2, 0x660f3820, None, 3, CpuSSE4_1, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { QWord|Unspecified|BaseIndex|RegXMM, RegXMM } -pmovsxbd, 2, 0x6621, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } +pmovsxbw, 2, 0x6620, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } +pmovsxbw, 2, 0x660f3820, None, 3, CpuSSE4_1, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { QWord|Unspecified|BaseIndex|RegXMM, RegXMM } +pmovsxbd, 2, 0x6621, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } pmovsxbd, 2, 0x660f3821, None, 3, CpuSSE4_1, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } -pmovsxbq, 2, 0x6622, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Word|Unspecified|BaseIndex|RegXMM, RegXMM } +pmovsxbq, 2, 0x6622, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Word|Unspecified|BaseIndex|RegXMM, RegXMM } pmovsxbq, 2, 0x660f3822, None, 3, CpuSSE4_1, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Word|Unspecified|BaseIndex|RegXMM, RegXMM } -pmovsxwd, 2, 0x6623, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } -pmovsxwd, 2, 0x660f3823, None, 3, CpuSSE4_1, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } -pmovsxwq, 2, 0x6624, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } +pmovsxwd, 2, 0x6623, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } +pmovsxwd, 2, 0x660f3823, None, 3, CpuSSE4_1, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } +pmovsxwq, 2, 0x6624, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } pmovsxwq, 2, 0x660f3824, None, 3, CpuSSE4_1, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } -pmovsxdq, 2, 0x6625, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } -pmovsxdq, 2, 0x660f3825, None, 3, CpuSSE4_1, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { QWord|Unspecified|BaseIndex|RegXMM, RegXMM } -pmovzxbw, 2, 0x6630, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } -pmovzxbw, 2, 0x660f3830, None, 3, CpuSSE4_1, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } -pmovzxbd, 2, 0x6631, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } +pmovsxdq, 2, 0x6625, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } +pmovsxdq, 2, 0x660f3825, None, 3, CpuSSE4_1, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { QWord|Unspecified|BaseIndex|RegXMM, RegXMM } +pmovzxbw, 2, 0x6630, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } +pmovzxbw, 2, 0x660f3830, None, 3, CpuSSE4_1, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } +pmovzxbd, 2, 0x6631, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } pmovzxbd, 2, 0x660f3831, None, 3, CpuSSE4_1, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } -pmovzxbq, 2, 0x6632, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Word|Unspecified|BaseIndex|RegXMM, RegXMM } +pmovzxbq, 2, 0x6632, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Word|Unspecified|BaseIndex|RegXMM, RegXMM } pmovzxbq, 2, 0x660f3832, None, 3, CpuSSE4_1, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Word|Unspecified|BaseIndex|RegXMM, RegXMM } -pmovzxwd, 2, 0x6633, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } -pmovzxwd, 2, 0x660f3833, None, 3, CpuSSE4_1, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } -pmovzxwq, 2, 0x6634, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } +pmovzxwd, 2, 0x6633, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } +pmovzxwd, 2, 0x660f3833, None, 3, CpuSSE4_1, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } +pmovzxwq, 2, 0x6634, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } pmovzxwq, 2, 0x660f3834, None, 3, CpuSSE4_1, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } -pmovzxdq, 2, 0x6635, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } -pmovzxdq, 2, 0x660f3835, None, 3, CpuSSE4_1, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { QWord|Unspecified|BaseIndex|RegXMM, RegXMM } +pmovzxdq, 2, 0x6635, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } +pmovzxdq, 2, 0x660f3835, None, 3, CpuSSE4_1, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { QWord|Unspecified|BaseIndex|RegXMM, RegXMM } pmuldq, 2, 0x6628, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } pmuldq, 2, 0x660f3828, None, 3, CpuSSE4_1, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM } pmulld, 2, 0x6640, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { RegXMM|Unspecified|BaseIndex, RegXMM } @@ -1770,8 +1651,8 @@ roundpd, 3, 0x660f3a09, None, 3, CpuSSE4_1, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|Unspecified|BaseIndex, RegXMM } roundps, 3, 0x6608, None, 1, CpuAVX, Modrm|Vex|VexOpcode=2|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Imm8, RegXMM|Unspecified|BaseIndex, RegXMM } roundps, 3, 0x660f3a08, None, 3, CpuSSE4_1, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|Unspecified|BaseIndex, RegXMM } -roundsd, 3, 0x660b, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=2|VexVVVV=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64|SSE2AVX, { Imm8, Qword|Unspecified|BaseIndex|RegXMM, RegXMM } -roundsd, 3, 0x660f3a0b, None, 3, CpuSSE4_1, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Imm8, Qword|Unspecified|BaseIndex|RegXMM, RegXMM } +roundsd, 3, 0x660b, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=2|VexVVVV|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Imm8, Qword|Unspecified|BaseIndex|RegXMM, RegXMM } +roundsd, 3, 0x660f3a0b, None, 3, CpuSSE4_1, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Imm8, Qword|Unspecified|BaseIndex|RegXMM, RegXMM } roundss, 3, 0x660a, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=2|VexVVVV=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Imm8, Dword|Unspecified|BaseIndex|RegXMM, RegXMM } roundss, 3, 0x660f3a0a, None, 3, CpuSSE4_1, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Dword|Unspecified|BaseIndex|RegXMM, RegXMM } @@ -1792,20 +1673,20 @@ pcmpistrm, 3, 0x6662, None, 1, CpuAVX, Modrm|Vex|VexOpcode=2|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SSE2AVX, { Imm8, RegXMM|Unspecified|BaseIndex, RegXMM } pcmpistrm, 3, 0x660f3a62, None, 3, CpuSSE4_2, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|Unspecified|BaseIndex, RegXMM } crc32, 2, 0xf20f38f0, None, 3, CpuSSE4_2, W|Modrm|No_sSuf|No_qSuf|No_ldSuf|NoAVX, { Reg8|Reg16|Reg32|Unspecified|BaseIndex, Reg32 } -crc32, 2, 0xf20f38f0, None, 3, CpuSSE4_2|Cpu64, W|Modrm|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|Rex64|NoAVX, { Reg8|Reg64|Unspecified|BaseIndex, Reg64 } +crc32, 2, 0xf20f38f0, None, 3, CpuSSE4_2|Cpu64, W|Modrm|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|NoAVX, { Reg8|Reg64|Unspecified|BaseIndex, Reg64 } // xsave/xrstor New Instructions. xsave, 1, 0xfae, 0x4, 2, CpuXsave, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_ldSuf, { Unspecified|BaseIndex } -xsave64, 1, 0xfae, 0x4, 2, CpuXsave|Cpu64, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Rex64, { Unspecified|BaseIndex } +xsave64, 1, 0xfae, 0x4, 2, CpuXsave|Cpu64, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Size64, { Unspecified|BaseIndex } xrstor, 1, 0xfae, 0x5, 2, CpuXsave, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_ldSuf, { Unspecified|BaseIndex } -xrstor64, 1, 0xfae, 0x5, 2, CpuXsave|Cpu64, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Rex64, { Unspecified|BaseIndex } +xrstor64, 1, 0xfae, 0x5, 2, CpuXsave|Cpu64, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Size64, { Unspecified|BaseIndex } xgetbv, 0, 0xf01d0, None, 3, CpuXsave, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 } xsetbv, 0, 0xf01d1, None, 3, CpuXsave, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 } // xsaveopt xsaveopt, 1, 0xfae, 0x6, 2, CpuXsaveopt, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_ldSuf, { Unspecified|BaseIndex } -xsaveopt64, 1, 0xfae, 0x6, 2, CpuXsaveopt|Cpu64, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Rex64, { Unspecified|BaseIndex } +xsaveopt64, 1, 0xfae, 0x6, 2, CpuXsaveopt|Cpu64, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Size64, { Unspecified|BaseIndex } // AES instructions. @@ -1853,10 +1734,20 @@ // AVX instructions. +<avx_frel:imm:comm, eq:00:C, eq_oq:00:C, lt:01:, lt_os:01:, le:02:, le_os:02:, \ + unord:03:C, unord_q:03:C, neq:04:C, neq_uq:04:C, nlt:05:, nlt_us:05:, \ + nle:06:, nle_us:06:, ord:07:C, ord_q:07:C, eq_uq:08:C, \ + nge:09:, nge_us:09:, ngt:0a:, ngt_us:0a:, false:0b:C, false_oq:0b:C, \ + neq_oq:0c:C, ge:0d:, ge_os:0d:, gt:0e:, gt_os:0e:, true:0f:C, \ + true_uq:0f:C, eq_os:10:C, lt_oq:11:, le_oq:12:, \ + unord_s:13:C, neq_us:14:C, nlt_uq:15:, nle_uq:16:, ord_s:17:C, eq_us:18:C, \ + nge_uq:19:, ngt_uq:1a:, false_os:1b:C, neq_os:1c:C, ge_oq:1d:, gt_oq:1e:, \ + true_us:1f:C> + vaddpd, 3, 0x6658, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vaddps, 3, 0x58, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vaddsd, 3, 0xf258, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vaddss, 3, 0xf358, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } +vaddsd, 3, 0xf258, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } +vaddss, 3, 0xf358, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } vaddsubpd, 3, 0x66d0, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vaddsubps, 3, 0xf2d0, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vandnpd, 3, 0x6655, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Optimize, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } @@ -1870,183 +1761,60 @@ vbroadcastf128, 2, 0x661a, None, 1, CpuAVX, Modrm|Vex=2|VexOpcode=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Xmmword|Unspecified|BaseIndex, RegYMM } vbroadcastsd, 2, 0x6619, None, 1, CpuAVX, Modrm|Vex=2|VexOpcode=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex, RegYMM } vbroadcastss, 2, 0x6618, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex, RegXMM|RegYMM } -vcmpeq_ospd, 3, 0x66c2, 0x10, 1, CpuAVX, Modrm|C|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vcmpeq_osps, 3, 0xc2, 0x10, 1, CpuAVX, Modrm|C|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vcmpeq_ossd, 3, 0xf2c2, 0x10, 1, CpuAVX, Modrm|C|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vcmpeq_osss, 3, 0xf3c2, 0x10, 1, CpuAVX, Modrm|C|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vcmpeqpd, 3, 0x66c2, 0x0, 1, CpuAVX, Modrm|C|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vcmpeqps, 3, 0xc2, 0x0, 1, CpuAVX, Modrm|C|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vcmpeqsd, 3, 0xf2c2, 0x0, 1, CpuAVX, Modrm|C|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vcmpeqss, 3, 0xf3c2, 0x0, 1, CpuAVX, Modrm|C|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vcmpeq_uqpd, 3, 0x66c2, 0x8, 1, CpuAVX, Modrm|C|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vcmpeq_uqps, 3, 0xc2, 0x8, 1, CpuAVX, Modrm|C|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vcmpeq_uqsd, 3, 0xf2c2, 0x8, 1, CpuAVX, Modrm|C|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vcmpeq_uqss, 3, 0xf3c2, 0x8, 1, CpuAVX, Modrm|C|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vcmpeq_uspd, 3, 0x66c2, 0x18, 1, CpuAVX, Modrm|C|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vcmpeq_usps, 3, 0xc2, 0x18, 1, CpuAVX, Modrm|C|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vcmpeq_ussd, 3, 0xf2c2, 0x18, 1, CpuAVX, Modrm|C|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vcmpeq_usss, 3, 0xf3c2, 0x18, 1, CpuAVX, Modrm|C|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vcmpfalse_ospd, 3, 0x66c2, 0x1b, 1, CpuAVX, Modrm|C|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vcmpfalse_osps, 3, 0xc2, 0x1b, 1, CpuAVX, Modrm|C|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vcmpfalse_ossd, 3, 0xf2c2, 0x1b, 1, CpuAVX, Modrm|C|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vcmpfalse_osss, 3, 0xf3c2, 0x1b, 1, CpuAVX, Modrm|C|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vcmpfalsepd, 3, 0x66c2, 0xb, 1, CpuAVX, Modrm|C|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vcmpfalseps, 3, 0xc2, 0xb, 1, CpuAVX, Modrm|C|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vcmpfalsesd, 3, 0xf2c2, 0xb, 1, CpuAVX, Modrm|C|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vcmpfalsess, 3, 0xf3c2, 0xb, 1, CpuAVX, Modrm|C|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vcmpge_oqpd, 3, 0x66c2, 0x1d, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vcmpge_oqps, 3, 0xc2, 0x1d, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vcmpge_oqsd, 3, 0xf2c2, 0x1d, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vcmpge_oqss, 3, 0xf3c2, 0x1d, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vcmpgepd, 3, 0x66c2, 0xd, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vcmpgeps, 3, 0xc2, 0xd, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vcmpgesd, 3, 0xf2c2, 0xd, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vcmpgess, 3, 0xf3c2, 0xd, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vcmpgt_oqpd, 3, 0x66c2, 0x1e, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vcmpgt_oqps, 3, 0xc2, 0x1e, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vcmpgt_oqsd, 3, 0xf2c2, 0x1e, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vcmpgt_oqss, 3, 0xf3c2, 0x1e, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vcmpgtpd, 3, 0x66c2, 0xe, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vcmpgtps, 3, 0xc2, 0xe, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vcmpgtsd, 3, 0xf2c2, 0xe, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vcmpgtss, 3, 0xf3c2, 0xe, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vcmple_oqpd, 3, 0x66c2, 0x12, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vcmple_oqps, 3, 0xc2, 0x12, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vcmple_oqsd, 3, 0xf2c2, 0x12, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vcmple_oqss, 3, 0xf3c2, 0x12, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vcmplepd, 3, 0x66c2, 0x2, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vcmpleps, 3, 0xc2, 0x2, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vcmplesd, 3, 0xf2c2, 0x2, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vcmpless, 3, 0xf3c2, 0x2, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vcmplt_oqpd, 3, 0x66c2, 0x11, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vcmplt_oqps, 3, 0xc2, 0x11, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vcmplt_oqsd, 3, 0xf2c2, 0x11, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vcmplt_oqss, 3, 0xf3c2, 0x11, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vcmpltpd, 3, 0x66c2, 0x1, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vcmpltps, 3, 0xc2, 0x1, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vcmpltsd, 3, 0xf2c2, 0x1, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vcmpltss, 3, 0xf3c2, 0x1, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vcmpneq_oqpd, 3, 0x66c2, 0xc, 1, CpuAVX, Modrm|C|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vcmpneq_oqps, 3, 0xc2, 0xc, 1, CpuAVX, Modrm|C|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vcmpneq_oqsd, 3, 0xf2c2, 0xc, 1, CpuAVX, Modrm|C|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vcmpneq_oqss, 3, 0xf3c2, 0xc, 1, CpuAVX, Modrm|C|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vcmpneq_ospd, 3, 0x66c2, 0x1c, 1, CpuAVX, Modrm|C|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vcmpneq_osps, 3, 0xc2, 0x1c, 1, CpuAVX, Modrm|C|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vcmpneq_ossd, 3, 0xf2c2, 0x1c, 1, CpuAVX, Modrm|C|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vcmpneq_osss, 3, 0xf3c2, 0x1c, 1, CpuAVX, Modrm|C|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vcmpneqpd, 3, 0x66c2, 0x4, 1, CpuAVX, Modrm|C|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vcmpneqps, 3, 0xc2, 0x4, 1, CpuAVX, Modrm|C|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vcmpneqsd, 3, 0xf2c2, 0x4, 1, CpuAVX, Modrm|C|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vcmpneqss, 3, 0xf3c2, 0x4, 1, CpuAVX, Modrm|C|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vcmpneq_uspd, 3, 0x66c2, 0x14, 1, CpuAVX, Modrm|C|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vcmpneq_usps, 3, 0xc2, 0x14, 1, CpuAVX, Modrm|C|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vcmpneq_ussd, 3, 0xf2c2, 0x14, 1, CpuAVX, Modrm|C|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vcmpneq_usss, 3, 0xf3c2, 0x14, 1, CpuAVX, Modrm|C|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vcmpngepd, 3, 0x66c2, 0x9, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vcmpngeps, 3, 0xc2, 0x9, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vcmpngesd, 3, 0xf2c2, 0x9, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vcmpngess, 3, 0xf3c2, 0x9, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vcmpnge_uqpd, 3, 0x66c2, 0x19, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vcmpnge_uqps, 3, 0xc2, 0x19, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vcmpnge_uqsd, 3, 0xf2c2, 0x19, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vcmpnge_uqss, 3, 0xf3c2, 0x19, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vcmpngtpd, 3, 0x66c2, 0xa, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vcmpngtps, 3, 0xc2, 0xa, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vcmpngtsd, 3, 0xf2c2, 0xa, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vcmpngtss, 3, 0xf3c2, 0xa, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vcmpngt_uqpd, 3, 0x66c2, 0x1a, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vcmpngt_uqps, 3, 0xc2, 0x1a, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vcmpngt_uqsd, 3, 0xf2c2, 0x1a, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vcmpngt_uqss, 3, 0xf3c2, 0x1a, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vcmpnlepd, 3, 0x66c2, 0x6, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vcmpnleps, 3, 0xc2, 0x6, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vcmpnlesd, 3, 0xf2c2, 0x6, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vcmpnless, 3, 0xf3c2, 0x6, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vcmpnle_uqpd, 3, 0x66c2, 0x16, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vcmpnle_uqps, 3, 0xc2, 0x16, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vcmpnle_uqsd, 3, 0xf2c2, 0x16, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vcmpnle_uqss, 3, 0xf3c2, 0x16, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vcmpnltpd, 3, 0x66c2, 0x5, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vcmpnltps, 3, 0xc2, 0x5, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vcmpnltsd, 3, 0xf2c2, 0x5, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vcmpnltss, 3, 0xf3c2, 0x5, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vcmpnlt_uqpd, 3, 0x66c2, 0x15, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vcmpnlt_uqps, 3, 0xc2, 0x15, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vcmpnlt_uqsd, 3, 0xf2c2, 0x15, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vcmpnlt_uqss, 3, 0xf3c2, 0x15, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vcmpordpd, 3, 0x66c2, 0x7, 1, CpuAVX, Modrm|C|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vcmpordps, 3, 0xc2, 0x7, 1, CpuAVX, Modrm|C|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vcmpordsd, 3, 0xf2c2, 0x7, 1, CpuAVX, Modrm|C|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vcmpord_spd, 3, 0x66c2, 0x17, 1, CpuAVX, Modrm|C|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vcmpord_sps, 3, 0xc2, 0x17, 1, CpuAVX, Modrm|C|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vcmpordss, 3, 0xf3c2, 0x7, 1, CpuAVX, Modrm|C|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vcmpord_ssd, 3, 0xf2c2, 0x17, 1, CpuAVX, Modrm|C|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vcmpord_sss, 3, 0xf3c2, 0x17, 1, CpuAVX, Modrm|C|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } +vcmp<avx_frel>pd, 3, 0x66c2, 0x<avx_frel:imm>, 1, CpuAVX, Modrm|<avx_frel:comm>|Vex|VexOpcode=0|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|Unspecified|BaseIndex, RegXMM|RegYMM, RegXMM|RegYMM } +vcmp<avx_frel>ps, 3, 0xc2, 0x<avx_frel:imm>, 1, CpuAVX, Modrm|<avx_frel:comm>|Vex|VexOpcode=0|VexVVVV|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|Unspecified|BaseIndex, RegXMM|RegYMM, RegXMM|RegYMM } +vcmp<avx_frel>sd, 3, 0xf2c2, 0x<avx_frel:imm>, 1, CpuAVX, Modrm|<avx_frel:comm>|VexLIG|VexOpcode=0|VexVVVV|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegXMM } +vcmp<avx_frel>ss, 3, 0xf3c2, 0x<avx_frel:imm>, 1, CpuAVX, Modrm|<avx_frel:comm>|VexLIG|VexOpcode=0|VexVVVV|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegXMM } vcmppd, 4, 0x66c2, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vcmpps, 4, 0xc2, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vcmpsd, 4, 0xf2c2, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vcmpss, 4, 0xf3c2, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vcmptruepd, 3, 0x66c2, 0xf, 1, CpuAVX, Modrm|C|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vcmptrueps, 3, 0xc2, 0xf, 1, CpuAVX, Modrm|C|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vcmptruesd, 3, 0xf2c2, 0xf, 1, CpuAVX, Modrm|C|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vcmptruess, 3, 0xf3c2, 0xf, 1, CpuAVX, Modrm|C|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vcmptrue_uspd, 3, 0x66c2, 0x1f, 1, CpuAVX, Modrm|C|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vcmptrue_usps, 3, 0xc2, 0x1f, 1, CpuAVX, Modrm|C|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vcmptrue_ussd, 3, 0xf2c2, 0x1f, 1, CpuAVX, Modrm|C|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vcmptrue_usss, 3, 0xf3c2, 0x1f, 1, CpuAVX, Modrm|C|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vcmpunordpd, 3, 0x66c2, 0x3, 1, CpuAVX, Modrm|C|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vcmpunordps, 3, 0xc2, 0x3, 1, CpuAVX, Modrm|C|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vcmpunordsd, 3, 0xf2c2, 0x3, 1, CpuAVX, Modrm|C|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vcmpunord_spd, 3, 0x66c2, 0x13, 1, CpuAVX, Modrm|C|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vcmpunord_sps, 3, 0xc2, 0x13, 1, CpuAVX, Modrm|C|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vcmpunordss, 3, 0xf3c2, 0x3, 1, CpuAVX, Modrm|C|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vcmpunord_ssd, 3, 0xf2c2, 0x13, 1, CpuAVX, Modrm|C|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vcmpunord_sss, 3, 0xf3c2, 0x13, 1, CpuAVX, Modrm|C|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vcomisd, 2, 0x662f, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } -vcomiss, 2, 0x2f, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } -vcvtdq2pd, 2, 0xf3e6, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, RegXMM|RegYMM } -vcvtdq2pd, 2, 0xf3e6, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex, RegXMM } -vcvtdq2pd, 2, 0xf3e6, None, 1, CpuAVX, Modrm|Vex=2|VexOpcode=0|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Xmmword|Unspecified|BaseIndex, RegYMM } +vcmpsd, 4, 0xf2c2, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } +vcmpss, 4, 0xf3c2, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } +vcomisd, 2, 0x662f, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } +vcomiss, 2, 0x2f, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } +vcvtdq2pd, 2, 0xf3e6, None, 1, CpuAVX, Modrm|Vex128|VexOpcode=0|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM } +vcvtdq2pd, 2, 0xf3e6, None, 1, CpuAVX, Modrm|Vex256|VexOpcode=0|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegYMM } vcvtdq2ps, 2, 0x5b, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM } -vcvtpd2dq, 2, 0xf2e6, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|RegYMM|BaseIndex, RegXMM } +vcvtpd2dq, 2, 0xf2e6, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IntelSyntax, { RegXMM|RegYMM|Unspecified|BaseIndex, RegXMM } +vcvtpd2dq, 2, 0xf2e6, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTSyntax, { RegXMM|RegYMM, RegXMM } vcvtpd2dqx, 2, 0xf2e6, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTSyntax, { Unspecified|BaseIndex|RegXMM, RegXMM } vcvtpd2dqy, 2, 0xf2e6, None, 1, CpuAVX, Modrm|Vex=2|VexOpcode=0|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTSyntax, { Unspecified|BaseIndex|RegYMM, RegXMM } -vcvtpd2ps, 2, 0x665a, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|RegYMM|BaseIndex, RegXMM } +vcvtpd2ps, 2, 0x665a, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IntelSyntax, { RegXMM|RegYMM|Unspecified|BaseIndex, RegXMM } +vcvtpd2ps, 2, 0x665a, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTSyntax, { RegXMM|RegYMM, RegXMM } vcvtpd2psx, 2, 0x665a, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTSyntax, { Unspecified|BaseIndex|RegXMM, RegXMM } vcvtpd2psy, 2, 0x665a, None, 1, CpuAVX, Modrm|Vex=2|VexOpcode=0|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTSyntax, { Unspecified|BaseIndex|RegYMM, RegXMM } vcvtps2dq, 2, 0x665b, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM } -vcvtps2pd, 2, 0x5a, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, RegXMM|RegYMM } -vcvtps2pd, 2, 0x5a, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex, RegXMM } -vcvtps2pd, 2, 0x5a, None, 1, CpuAVX, Modrm|Vex=2|VexOpcode=0|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Xmmword|Unspecified|BaseIndex, RegYMM } +vcvtps2pd, 2, 0x5a, None, 1, CpuAVX, Modrm|Vex128|VexOpcode=0|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM } +vcvtps2pd, 2, 0x5a, None, 1, CpuAVX, Modrm|Vex256|VexOpcode=0|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegYMM } vcvtsd2si, 2, 0xf22d, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|ToDword, { Qword|Unspecified|BaseIndex|RegXMM, Reg32|Reg64 } -vcvtsd2ss, 3, 0xf25a, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vcvtsi2sd, 3, 0xf22a, None, 1, CpuAVX|CpuNo64, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg32|Unspecified|BaseIndex, RegXMM, RegXMM } -vcvtsi2sd, 3, 0xf22a, None, 1, CpuAVX|Cpu64, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|No_bSuf|No_wSuf|No_sSuf|No_ldSuf, { Reg32|Reg64|Dword|Qword|Unspecified|BaseIndex, RegXMM, RegXMM } -vcvtsi2ss, 3, 0xf32a, None, 1, CpuAVX|CpuNo64, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg32|Unspecified|BaseIndex, RegXMM, RegXMM } -vcvtsi2ss, 3, 0xf32a, None, 1, CpuAVX|Cpu64, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|No_bSuf|No_wSuf|No_sSuf|No_ldSuf, { Reg32|Reg64|Dword|Qword|Unspecified|BaseIndex, RegXMM, RegXMM } -vcvtss2sd, 3, 0xf35a, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vcvtss2si, 2, 0xf32d, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|ToQword, { Dword|Unspecified|BaseIndex|RegXMM, Reg32|Reg64 } -vcvttpd2dq, 2, 0x66e6, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|RegYMM|BaseIndex, RegXMM } +vcvtsd2ss, 3, 0xf25a, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } +vcvtsi2sd, 3, 0xf22a, None, 1, CpuAVX, Modrm|VexLIG|VexOpcode=0|VexVVVV|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|ATTSyntax, { Reg32|Reg64|Unspecified|BaseIndex, RegXMM, RegXMM } +vcvtsi2sd, 3, 0xf22a, None, 1, CpuAVX, Modrm|VexLIG|VexOpcode=0|VexVVVV|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|IntelSyntax, { Reg32|Reg64|Unspecified|BaseIndex, RegXMM, RegXMM } +vcvtsi2ss, 3, 0xf32a, None, 1, CpuAVX, Modrm|VexLIG|VexOpcode=0|VexVVVV|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|ATTSyntax, { Reg32|Reg64|Unspecified|BaseIndex, RegXMM, RegXMM } +vcvtsi2ss, 3, 0xf32a, None, 1, CpuAVX, Modrm|VexLIG|VexOpcode=0|VexVVVV|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|IntelSyntax, { Reg32|Reg64|Unspecified|BaseIndex, RegXMM, RegXMM } +vcvtss2sd, 3, 0xf35a, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } +vcvtss2si, 2, 0xf32d, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|ToQword, { Dword|Unspecified|BaseIndex|RegXMM, Reg32|Reg64 } +vcvttpd2dq, 2, 0x66e6, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IntelSyntax, { RegXMM|RegYMM|Unspecified|BaseIndex, RegXMM } +vcvttpd2dq, 2, 0x66e6, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTSyntax, { RegXMM|RegYMM, RegXMM } vcvttpd2dqx, 2, 0x66e6, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTsyntax, { Unspecified|BaseIndex|RegXMM, RegXMM } vcvttpd2dqy, 2, 0x66e6, None, 1, CpuAVX, Modrm|Vex=2|VexOpcode=0|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTsyntax, { Unspecified|BaseIndex|RegYMM, RegXMM } vcvttps2dq, 2, 0xf35b, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM } vcvttsd2si, 2, 0xf22c, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|ToDword, { Qword|Unspecified|BaseIndex|RegXMM, Reg32|Reg64 } -vcvttss2si, 2, 0xf32c, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|ToQword, { Dword|Unspecified|BaseIndex|RegXMM, Reg32|Reg64 } +vcvttss2si, 2, 0xf32c, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|ToQword, { Dword|Unspecified|BaseIndex|RegXMM, Reg32|Reg64 } vdivpd, 3, 0x665e, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vdivps, 3, 0x5e, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vdivsd, 3, 0xf25e, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vdivss, 3, 0xf35e, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } +vdivsd, 3, 0xf25e, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } +vdivss, 3, 0xf35e, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } vdppd, 4, 0x6641, None, 1, CpuAVX, Modrm|Vex|VexOpcode=2|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } vdpps, 4, 0x6640, None, 1, CpuAVX, Modrm|Vex|VexOpcode=2|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vextractf128, 3, 0x6619, None, 1, CpuAVX, Modrm|Vex=2|VexOpcode=2|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegYMM, Unspecified|BaseIndex|RegXMM } vextractps, 3, 0x6617, None, 1, CpuAVX, Modrm|Vex|VexOpcode=2|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM, Reg32|Dword|Unspecified|BaseIndex } -vextractps, 3, 0x6617, None, 1, CpuAVX|Cpu64, RegMem|Vex|VexOpcode=2|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Imm8, RegXMM, Reg64 } +vextractps, 3, 0x6617, None, 1, CpuAVX|Cpu64, RegMem|Vex|VexOpcode=2|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM, Reg64 } vhaddpd, 3, 0x667c, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vhaddps, 3, 0xf27c, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vhsubpd, 3, 0x667d, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vhsubps, 3, 0xf27d, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vinsertf128, 4, 0x6618, None, 1, CpuAVX, Modrm|Vex=2|VexOpcode=2|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Unspecified|BaseIndex|RegXMM, RegYMM, RegYMM } -vinsertps, 4, 0x6621, None, 1, CpuAVX, Modrm|Vex|VexOpcode=2|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } +vinsertps, 4, 0x6621, None, 1, CpuAVX, Modrm|Vex|VexOpcode=2|VexVVVV|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } vlddqu, 2, 0xf2f0, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Xmmword|Ymmword|Unspecified|BaseIndex, RegXMM|RegYMM } vldmxcsr, 1, 0xae, 0x2, 1, CpuAVX, Modrm|Vex128|VexOpcode=0|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex } vmaskmovdqu, 2, 0x66f7, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, RegXMM } @@ -2056,12 +1824,12 @@ vmaskmovps, 3, 0x662c, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexVVVV=1|VexW=1|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Xmmword|Ymmword|Unspecified|BaseIndex, RegXMM|RegYMM, RegXMM|RegYMM } vmaxpd, 3, 0x665f, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vmaxps, 3, 0x5f, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vmaxsd, 3, 0xf25f, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vmaxss, 3, 0xf35f, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } +vmaxsd, 3, 0xf25f, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } +vmaxss, 3, 0xf35f, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } vminpd, 3, 0x665d, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vminps, 3, 0x5d, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vminsd, 3, 0xf25d, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vminss, 3, 0xf35d, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } +vminsd, 3, 0xf25d, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } +vminss, 3, 0xf35d, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } vmovapd, 2, 0x6628, None, 1, CpuAVX, D|Modrm|Vex|VexOpcode=0|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM } vmovaps, 2, 0x28, None, 1, CpuAVX, D|Modrm|Vex|VexOpcode=0|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM } // vmovd really shouldn't allow for 64bit operand (vmovq is the right @@ -2071,7 +1839,7 @@ // that we can use one template for both SSE and AVX instructions. vmovd, 2, 0x666e, None, 1, CpuAVX, D|Modrm|Vex=1|VexOpcode=0|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg32|Unspecified|BaseIndex, RegXMM } vmovd, 2, 0x667e, None, 1, CpuAVX|Cpu64, D|RegMem|Vex=1|VexOpcode=0|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Size64, { RegXMM, Reg64 } -vmovddup, 2, 0xf212, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } +vmovddup, 2, 0xf212, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } vmovddup, 2, 0xf212, None, 1, CpuAVX, Modrm|Vex=2|VexOpcode=0|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM } vmovdqa, 2, 0x666f, None, 1, CpuAVX, D|Modrm|Vex|VexOpcode=0|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM } vmovdqu, 2, 0xf36f, None, 1, CpuAVX, D|Modrm|Vex|VexOpcode=0|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM } @@ -2085,14 +1853,14 @@ vmovlpd, 2, 0x6613, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, Qword|Unspecified|BaseIndex } vmovlps, 3, 0x12, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex, RegXMM, RegXMM } vmovlps, 2, 0x13, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, Qword|Unspecified|BaseIndex } -vmovmskpd, 2, 0x6650, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexWIG|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|NoRex64, { RegXMM|RegYMM, Reg32|Reg64 } -vmovmskps, 2, 0x50, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexWIG|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|NoRex64, { RegXMM|RegYMM, Reg32|Reg64 } +vmovmskpd, 2, 0x6650, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexWIG|No_bSuf|No_wSuf|No_sSuf|No_ldSuf, { RegXMM|RegYMM, Reg32|Reg64 } +vmovmskps, 2, 0x50, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexWIG|No_bSuf|No_wSuf|No_sSuf|No_ldSuf, { RegXMM|RegYMM, Reg32|Reg64 } vmovntdq, 2, 0x66e7, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|RegYMM, Xmmword|Ymmword|Unspecified|BaseIndex } vmovntdqa, 2, 0x662a, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Xmmword|Unspecified|BaseIndex, RegXMM } vmovntpd, 2, 0x662b, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|RegYMM, Xmmword|Ymmword|Unspecified|BaseIndex } vmovntps, 2, 0x2b, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|RegYMM, Xmmword|Ymmword|Unspecified|BaseIndex } -vmovq, 2, 0xf37e, None, 1, CpuAVX, Load|Modrm|Vex=1|VexOpcode=0|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } -vmovq, 2, 0x66d6, None, 1, CpuAVX, Modrm|Vex=1|VexOpcode=0|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { RegXMM, Qword|Unspecified|BaseIndex|RegXMM } +vmovq, 2, 0xf37e, None, 1, CpuAVX, Load|Modrm|Vex=1|VexOpcode=0|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } +vmovq, 2, 0x66d6, None, 1, CpuAVX, Modrm|Vex=1|VexOpcode=0|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, Qword|Unspecified|BaseIndex|RegXMM } vmovq, 2, 0x666e, None, 1, CpuAVX|Cpu64, D|Modrm|Vex=1|VexOpcode=0|VexW=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Size64, { Reg64|Unspecified|BaseIndex, RegXMM } vmovsd, 2, 0xf210, None, 1, CpuAVX, D|Modrm|Vex=3|VexOpcode=0|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex, RegXMM } vmovsd, 3, 0xf210, None, 1, CpuAVX, D|Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, RegXMM, RegXMM } @@ -2105,8 +1873,8 @@ vmpsadbw, 4, 0x6642, None, 1, CpuAVX, Modrm|Vex|VexOpcode=2|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } vmulpd, 3, 0x6659, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vmulps, 3, 0x59, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vmulsd, 3, 0xf259, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vmulss, 3, 0xf359, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } +vmulsd, 3, 0xf259, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } +vmulss, 3, 0xf359, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } vorpd, 3, 0x6656, None, 1, CpuAVX, Modrm|C|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vorps, 3, 0x56, None, 1, CpuAVX, Modrm|C|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vpabsb, 2, 0x661c, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM } @@ -2150,13 +1918,13 @@ vpermilpd, 3, 0x6605, None, 1, CpuAVX, Modrm|Vex|VexOpcode=2|VexW=1|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM } vpermilps, 3, 0x660c, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexVVVV=1|VexW=1|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vpermilps, 3, 0x6604, None, 1, CpuAVX, Modrm|Vex|VexOpcode=2|VexW=1|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM } -vpextrb, 3, 0x6614, None, 1, CpuAVX, RegMem|Vex|VexOpcode=2|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Imm8, RegXMM, Reg32|Reg64 } -vpextrb, 3, 0x6614, None, 1, CpuAVX, Modrm|Vex|VexOpcode=2|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM, Byte|Unspecified|BaseIndex } +vpextrb, 3, 0x6614, None, 1, CpuAVX, RegMem|Vex|VexOpcode=2|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM, Reg32|Reg64 } +vpextrb, 3, 0x6614, None, 1, CpuAVX, Modrm|Vex|VexOpcode=2|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM, Byte|Unspecified|BaseIndex } vpextrd, 3, 0x6616, None, 1, CpuAVX, Modrm|Vex|VexOpcode=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM, Reg32|Dword|Unspecified|BaseIndex } -vpextrq, 3, 0x6616, None, 1, CpuAVX|Cpu64, Modrm|Vex|VexOpcode=2|VexW=2|Size64|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM, Reg64|Qword|Unspecified|BaseIndex } -vpextrw, 3, 0x66c5, None, 1, CpuAVX, Load|Modrm|Vex|VexOpcode=0|VexWIG|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|NoRex64, { Imm8, RegXMM, Reg32|Reg64 } -vpextrw, 3, 0x6615, None, 1, CpuAVX, RegMem|Vex|VexOpcode=2|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Imm8, RegXMM, Reg32|Reg64 } -vpextrw, 3, 0x6615, None, 1, CpuAVX, Modrm|Vex|VexOpcode=2|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM, Word|Unspecified|BaseIndex } +vpextrq, 3, 0x6616, None, 1, CpuAVX|Cpu64, Modrm|Vex|VexOpcode=2|VexW1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM, Reg64|Unspecified|BaseIndex } +vpextrw, 3, 0x66c5, None, 1, CpuAVX, Load|Modrm|Vex|VexOpcode=0|VexWIG|No_bSuf|No_wSuf|No_sSuf|No_ldSuf, { Imm8, RegXMM, Reg32|Reg64 } +vpextrw, 3, 0x6615, None, 1, CpuAVX, RegMem|Vex|VexOpcode=2|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM, Reg32|Reg64 } +vpextrw, 3, 0x6615, None, 1, CpuAVX, Modrm|Vex|VexOpcode=2|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM, Word|Unspecified|BaseIndex } vphaddd, 3, 0x6602, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } vphaddsw, 3, 0x6603, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } vphaddw, 3, 0x6601, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } @@ -2164,12 +1932,12 @@ vphsubd, 3, 0x6606, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } vphsubsw, 3, 0x6607, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } vphsubw, 3, 0x6605, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vpinsrb, 4, 0x6620, None, 1, CpuAVX, Modrm|Vex|VexOpcode=2|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Imm8, Reg32|Reg64, RegXMM, RegXMM } -vpinsrb, 4, 0x6620, None, 1, CpuAVX, Modrm|Vex|VexOpcode=2|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Byte|Unspecified|BaseIndex, RegXMM, RegXMM } +vpinsrb, 4, 0x6620, None, 1, CpuAVX, Modrm|Vex|VexOpcode=2|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Reg32|Reg64, RegXMM, RegXMM } +vpinsrb, 4, 0x6620, None, 1, CpuAVX, Modrm|Vex|VexOpcode=2|VexVVVV|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Byte|Unspecified|BaseIndex, RegXMM, RegXMM } vpinsrd, 4, 0x6622, None, 1, CpuAVX, Modrm|Vex|VexOpcode=2|VexVVVV=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Reg32|Dword|Unspecified|BaseIndex, RegXMM, RegXMM } -vpinsrq, 4, 0x6622, None, 1, CpuAVX|Cpu64, Modrm|Vex|VexOpcode=2|Size64|VexVVVV=1|VexW=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Reg64|Qword|Unspecified|BaseIndex, RegXMM, RegXMM } -vpinsrw, 4, 0x66c4, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|NoRex64, { Imm8, Reg32|Reg64, RegXMM, RegXMM } -vpinsrw, 4, 0x66c4, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_ldSuf, { Imm8, Word|Unspecified|BaseIndex, RegXMM, RegXMM } +vpinsrq, 4, 0x6622, None, 1, CpuAVX|Cpu64, Modrm|Vex|VexOpcode=2|VexVVVV=1|VexW1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Reg64|Unspecified|BaseIndex, RegXMM, RegXMM } +vpinsrw, 4, 0x66c4, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_sSuf|No_ldSuf, { Imm8, Reg32|Reg64, RegXMM, RegXMM } +vpinsrw, 4, 0x66c4, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Word|Unspecified|BaseIndex, RegXMM, RegXMM } vpmaddubsw, 3, 0x6604, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } vpmaddwd, 3, 0x66f5, None, 1, CpuAVX, Modrm|C|Vex|VexOpcode=0|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } vpmaxsb, 3, 0x663c, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } @@ -2184,19 +1952,19 @@ vpminub, 3, 0x66da, None, 1, CpuAVX, Modrm|C|Vex|VexOpcode=0|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } vpminud, 3, 0x663b, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } vpminuw, 3, 0x663a, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vpmovmskb, 2, 0x66d7, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|NoRex64, { RegXMM, Reg32|Reg64 } -vpmovsxbd, 2, 0x6621, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } -vpmovsxbq, 2, 0x6622, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Word|Unspecified|BaseIndex|RegXMM, RegXMM } -vpmovsxbw, 2, 0x6620, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } -vpmovsxdq, 2, 0x6625, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } -vpmovsxwd, 2, 0x6623, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } -vpmovsxwq, 2, 0x6624, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } -vpmovzxbd, 2, 0x6631, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } -vpmovzxbq, 2, 0x6632, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Word|Unspecified|BaseIndex|RegXMM, RegXMM } -vpmovzxbw, 2, 0x6630, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } -vpmovzxdq, 2, 0x6635, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } -vpmovzxwd, 2, 0x6633, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } -vpmovzxwq, 2, 0x6634, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } +vpmovmskb, 2, 0x66d7, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexWIG|No_bSuf|No_wSuf|No_sSuf|No_ldSuf, { RegXMM, Reg32|Reg64 } +vpmovsxbd, 2, 0x6621, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } +vpmovsxbq, 2, 0x6622, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Word|Unspecified|BaseIndex|RegXMM, RegXMM } +vpmovsxbw, 2, 0x6620, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } +vpmovsxdq, 2, 0x6625, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } +vpmovsxwd, 2, 0x6623, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } +vpmovsxwq, 2, 0x6624, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } +vpmovzxbd, 2, 0x6631, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } +vpmovzxbq, 2, 0x6632, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Word|Unspecified|BaseIndex|RegXMM, RegXMM } +vpmovzxbw, 2, 0x6630, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } +vpmovzxdq, 2, 0x6635, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } +vpmovzxwd, 2, 0x6633, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } +vpmovzxwq, 2, 0x6634, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } vpmuldq, 3, 0x6628, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } vpmulhrsw, 3, 0x660b, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } vpmulhuw, 3, 0x66e4, None, 1, CpuAVX, Modrm|C|Vex|VexOpcode=0|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } @@ -2250,28 +2018,28 @@ vpunpcklwd, 3, 0x6661, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } vpxor, 3, 0x66ef, None, 1, CpuAVX, Modrm|C|Vex|VexOpcode=0|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } vrcpps, 2, 0x53, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM } -vrcpss, 3, 0xf353, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } +vrcpss, 3, 0xf353, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } vroundpd, 3, 0x6609, None, 1, CpuAVX, Modrm|Vex|VexOpcode=2|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM } vroundps, 3, 0x6608, None, 1, CpuAVX, Modrm|Vex|VexOpcode=2|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM } -vroundsd, 4, 0x660b, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=2|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Imm8, Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vroundss, 4, 0x660a, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=2|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } +vroundsd, 4, 0x660b, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=2|VexVVVV|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } +vroundss, 4, 0x660a, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=2|VexVVVV|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } vrsqrtps, 2, 0x52, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM } -vrsqrtss, 3, 0xf352, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } +vrsqrtss, 3, 0xf352, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } vshufpd, 4, 0x66c6, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vshufps, 4, 0xc6, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vsqrtpd, 2, 0x6651, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM } vsqrtps, 2, 0x51, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM } -vsqrtsd, 3, 0xf251, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vsqrtss, 3, 0xf351, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } +vsqrtsd, 3, 0xf251, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } +vsqrtss, 3, 0xf351, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } vstmxcsr, 1, 0xae, 0x3, 1, CpuAVX, Modrm|Vex128|VexOpcode=0|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex } vsubpd, 3, 0x665c, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vsubps, 3, 0x5c, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vsubsd, 3, 0xf25c, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vsubss, 3, 0xf35c, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } +vsubsd, 3, 0xf25c, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } +vsubss, 3, 0xf35c, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexVVVV|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } vtestpd, 2, 0x660f, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexW=1|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM } vtestps, 2, 0x660e, None, 1, CpuAVX, Modrm|Vex|VexOpcode=1|VexW=1|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM } -vucomisd, 2, 0x662e, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } -vucomiss, 2, 0x2e, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } +vucomisd, 2, 0x662e, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } +vucomiss, 2, 0x2e, None, 1, CpuAVX, Modrm|Vex=3|VexOpcode=0|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM } vunpckhpd, 3, 0x6615, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vunpckhps, 3, 0x15, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vunpcklpd, 3, 0x6614, None, 1, CpuAVX, Modrm|Vex|VexOpcode=0|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } @@ -2335,19 +2103,19 @@ vpminub, 3, 0x66da, None, 1, CpuAVX2, Modrm|C|Vex=2|VexOpcode=0|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM } vpminud, 3, 0x663b, None, 1, CpuAVX2, Modrm|Vex=2|VexOpcode=1|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM } vpminuw, 3, 0x663a, None, 1, CpuAVX2, Modrm|Vex=2|VexOpcode=1|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM } -vpmovmskb, 2, 0x66d7, None, 1, CpuAVX2, Modrm|Vex=2|VexOpcode=0|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|NoRex64, { RegYMM, Reg32|Reg64 } -vpmovsxbd, 2, 0x6621, None, 1, CpuAVX2, Modrm|Vex=2|VexOpcode=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegYMM } -vpmovsxbq, 2, 0x6622, None, 1, CpuAVX2, Modrm|Vex=2|VexOpcode=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { DWord|Unspecified|BaseIndex|RegXMM, RegYMM } +vpmovmskb, 2, 0x66d7, None, 1, CpuAVX2, Modrm|Vex=2|VexOpcode=0|VexWIG|No_bSuf|No_wSuf|No_sSuf|No_ldSuf, { RegYMM, Reg32|Reg64 } +vpmovsxbd, 2, 0x6621, None, 1, CpuAVX2, Modrm|Vex=2|VexOpcode=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegYMM } +vpmovsxbq, 2, 0x6622, None, 1, CpuAVX2, Modrm|Vex=2|VexOpcode=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegYMM } vpmovsxbw, 2, 0x6620, None, 1, CpuAVX2, Modrm|Vex=2|VexOpcode=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegYMM } vpmovsxdq, 2, 0x6625, None, 1, CpuAVX2, Modrm|Vex=2|VexOpcode=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegYMM } vpmovsxwd, 2, 0x6623, None, 1, CpuAVX2, Modrm|Vex=2|VexOpcode=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegYMM } -vpmovsxwq, 2, 0x6624, None, 1, CpuAVX2, Modrm|Vex=2|VexOpcode=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegYMM } -vpmovzxbd, 2, 0x6631, None, 1, CpuAVX2, Modrm|Vex=2|VexOpcode=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegYMM } -vpmovzxbq, 2, 0x6632, None, 1, CpuAVX2, Modrm|Vex=2|VexOpcode=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegYMM } +vpmovsxwq, 2, 0x6624, None, 1, CpuAVX2, Modrm|Vex=2|VexOpcode=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegYMM } +vpmovzxbd, 2, 0x6631, None, 1, CpuAVX2, Modrm|Vex=2|VexOpcode=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegYMM } +vpmovzxbq, 2, 0x6632, None, 1, CpuAVX2, Modrm|Vex=2|VexOpcode=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegYMM } vpmovzxbw, 2, 0x6630, None, 1, CpuAVX2, Modrm|Vex=2|VexOpcode=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegYMM } vpmovzxdq, 2, 0x6635, None, 1, CpuAVX2, Modrm|Vex=2|VexOpcode=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegYMM } vpmovzxwd, 2, 0x6633, None, 1, CpuAVX2, Modrm|Vex=2|VexOpcode=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegYMM } -vpmovzxwq, 2, 0x6634, None, 1, CpuAVX2, Modrm|Vex=2|VexOpcode=1|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegYMM } +vpmovzxwq, 2, 0x6634, None, 1, CpuAVX2, Modrm|Vex=2|VexOpcode=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegYMM } vpmuldq, 3, 0x6628, None, 1, CpuAVX2, Modrm|Vex=2|VexOpcode=1|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM } vpmulhrsw, 3, 0x660b, None, 1, CpuAVX2, Modrm|Vex=2|VexOpcode=1|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM } vpmulhuw, 3, 0x66e4, None, 1, CpuAVX2, Modrm|C|Vex=2|VexOpcode=0|VexVVVV=1|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM } @@ -2406,10 +2174,10 @@ vbroadcastsd, 2, 0x6619, None, 1, CpuAVX2, Modrm|Vex=2|VexOpcode=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, RegYMM } vbroadcastss, 2, 0x6618, None, 1, CpuAVX2, Modrm|Vex|VexOpcode=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, RegXMM|RegYMM } vpblendd, 4, 0x6602, None, 1, CpuAVX2, Modrm|Vex|VexOpcode=2|VexVVVV=1|VexW=1|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vpbroadcastb, 2, 0x6678, None, 1, CpuAVX2, Modrm|Vex=1|VexOpcode=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Byte|Unspecified|BaseIndex|RegXMM, RegXMM|RegYMM } -vpbroadcastd, 2, 0x6658, None, 1, CpuAVX2, Modrm|Vex=1|VexOpcode=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM|RegYMM } -vpbroadcastq, 2, 0x6659, None, 1, CpuAVX2, Modrm|Vex=1|VexOpcode=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { QWord|Unspecified|BaseIndex|RegXMM, RegXMM|RegYMM } -vpbroadcastw, 2, 0x6679, None, 1, CpuAVX2, Modrm|Vex=1|VexOpcode=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Word|Unspecified|BaseIndex|RegXMM, RegXMM|RegYMM } +vpbroadcastb, 2, 0x6678, None, 1, CpuAVX2, Modrm|Vex=1|VexOpcode=1|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Byte|Unspecified|BaseIndex|RegXMM, RegXMM|RegYMM } +vpbroadcastd, 2, 0x6658, None, 1, CpuAVX2, Modrm|Vex=1|VexOpcode=1|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM|RegYMM } +vpbroadcastq, 2, 0x6659, None, 1, CpuAVX2, Modrm|Vex=1|VexOpcode=1|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM|RegYMM } +vpbroadcastw, 2, 0x6679, None, 1, CpuAVX2, Modrm|Vex=1|VexOpcode=1|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Word|Unspecified|BaseIndex|RegXMM, RegXMM|RegYMM } vperm2i128, 4, 0x6646, None, 1, CpuAVX2, Modrm|Vex=2|VexOpcode=2|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM } vpermd, 3, 0x6636, None, 1, CpuAVX2, Modrm|Vex=2|VexOpcode=1|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegYMM, RegYMM, RegYMM } vpermpd, 3, 0x6601, None, 1, CpuAVX2, Modrm|Vex=2|VexOpcode=2|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Unspecified|BaseIndex|RegYMM, RegYMM } @@ -2428,22 +2196,22 @@ vpsrlvq, 3, 0x6645, None, 1, CpuAVX2, Modrm|Vex|VexOpcode=1|VexVVVV=1|VexW=2|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } // AVX gather instructions -vgatherdpd, 3, 0x6692, None, 1, CpuAVX2, Modrm|Vex|VexOpcode=1|VexVVVV=1|VexW=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|VecSIB=1, { RegXMM, Qword|Unspecified|BaseIndex, RegXMM } -vgatherdpd, 3, 0x6692, None, 1, CpuAVX2, Modrm|Vex=2|VexOpcode=1|VexVVVV=1|VexW=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|VecSIB=1, { RegYMM, Qword|Unspecified|BaseIndex, RegYMM } -vgatherdps, 3, 0x6692, None, 1, CpuAVX2, Modrm|Vex|VexOpcode=1|VexVVVV=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|VecSIB=1, { RegXMM, Dword|Unspecified|BaseIndex, RegXMM } -vgatherdps, 3, 0x6692, None, 1, CpuAVX2, Modrm|Vex=2|VexOpcode=1|VexVVVV=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|VecSIB=2, { RegYMM, Dword|Unspecified|BaseIndex, RegYMM } -vgatherqpd, 3, 0x6693, None, 1, CpuAVX2, Modrm|Vex|VexOpcode=1|VexVVVV=1|VexW=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|VecSIB=1, { RegXMM, Qword|Unspecified|BaseIndex, RegXMM } -vgatherqpd, 3, 0x6693, None, 1, CpuAVX2, Modrm|Vex=2|VexOpcode=1|VexVVVV=1|VexW=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|VecSIB=2, { RegYMM, Qword|Unspecified|BaseIndex, RegYMM } -vgatherqps, 3, 0x6693, None, 1, CpuAVX2, Modrm|Vex|VexOpcode=1|VexVVVV=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|VecSIB=1, { RegXMM, Dword|Unspecified|BaseIndex, RegXMM } -vgatherqps, 3, 0x6693, None, 1, CpuAVX2, Modrm|Vex=2|VexOpcode=1|VexVVVV=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|VecSIB=2, { RegXMM, Dword|Unspecified|BaseIndex, RegXMM } -vpgatherdd, 3, 0x6690, None, 1, CpuAVX2, Modrm|Vex|VexOpcode=1|VexVVVV=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|VecSIB=1, { RegXMM, Dword|Unspecified|BaseIndex, RegXMM } -vpgatherdd, 3, 0x6690, None, 1, CpuAVX2, Modrm|Vex=2|VexOpcode=1|VexVVVV=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|VecSIB=2, { RegYMM, Dword|Unspecified|BaseIndex, RegYMM } -vpgatherdq, 3, 0x6690, None, 1, CpuAVX2, Modrm|Vex|VexOpcode=1|VexVVVV=1|VexW=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|VecSIB=1, { RegXMM, Qword|Unspecified|BaseIndex, RegXMM } -vpgatherdq, 3, 0x6690, None, 1, CpuAVX2, Modrm|Vex=2|VexOpcode=1|VexVVVV=1|VexW=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|VecSIB=1, { RegYMM, Qword|Unspecified|BaseIndex, RegYMM } -vpgatherqd, 3, 0x6691, None, 1, CpuAVX2, Modrm|Vex|VexOpcode=1|VexVVVV=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|VecSIB=1, { RegXMM, Dword|Unspecified|BaseIndex, RegXMM } -vpgatherqd, 3, 0x6691, None, 1, CpuAVX2, Modrm|Vex=2|VexOpcode=1|VexVVVV=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|VecSIB=2, { RegXMM, Dword|Unspecified|BaseIndex, RegXMM } -vpgatherqq, 3, 0x6691, None, 1, CpuAVX2, Modrm|Vex|VexOpcode=1|VexVVVV=1|VexW=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|VecSIB=1, { RegXMM, Qword|Unspecified|BaseIndex, RegXMM } -vpgatherqq, 3, 0x6691, None, 1, CpuAVX2, Modrm|Vex=2|VexOpcode=1|VexVVVV=1|VexW=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|VecSIB=2, { RegYMM, Qword|Unspecified|BaseIndex, RegYMM } +vgatherdpd, 3, 0x6692, None, 1, CpuAVX2, Modrm|Vex|VexOpcode=1|VexVVVV|VexW1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|VecSIB128, { RegXMM, Qword|Unspecified|BaseIndex, RegXMM } +vgatherdpd, 3, 0x6692, None, 1, CpuAVX2, Modrm|Vex=2|VexOpcode=1|VexVVVV|VexW1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|VecSIB128, { RegYMM, Qword|Unspecified|BaseIndex, RegYMM } +vgatherdps, 3, 0x6692, None, 1, CpuAVX2, Modrm|Vex|VexOpcode=1|VexVVVV|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|VecSIB128, { RegXMM, Dword|Unspecified|BaseIndex, RegXMM } +vgatherdps, 3, 0x6692, None, 1, CpuAVX2, Modrm|Vex=2|VexOpcode=1|VexVVVV|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|VecSIB256, { RegYMM, Dword|Unspecified|BaseIndex, RegYMM } +vgatherqpd, 3, 0x6693, None, 1, CpuAVX2, Modrm|Vex|VexOpcode=1|VexVVVV|VexW1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|VecSIB128, { RegXMM, Qword|Unspecified|BaseIndex, RegXMM } +vgatherqpd, 3, 0x6693, None, 1, CpuAVX2, Modrm|Vex=2|VexOpcode=1|VexVVVV|VexW1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|VecSIB256, { RegYMM, Qword|Unspecified|BaseIndex, RegYMM } +vgatherqps, 3, 0x6693, None, 1, CpuAVX2, Modrm|Vex|VexOpcode=1|VexVVVV|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|VecSIB128, { RegXMM, Dword|Unspecified|BaseIndex, RegXMM } +vgatherqps, 3, 0x6693, None, 1, CpuAVX2, Modrm|Vex=2|VexOpcode=1|VexVVVV|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|VecSIB256, { RegXMM, Dword|Unspecified|BaseIndex, RegXMM } +vpgatherdd, 3, 0x6690, None, 1, CpuAVX2, Modrm|Vex|VexOpcode=1|VexVVVV|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|VecSIB128, { RegXMM, Dword|Unspecified|BaseIndex, RegXMM } +vpgatherdd, 3, 0x6690, None, 1, CpuAVX2, Modrm|Vex=2|VexOpcode=1|VexVVVV|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|VecSIB256, { RegYMM, Dword|Unspecified|BaseIndex, RegYMM } +vpgatherdq, 3, 0x6690, None, 1, CpuAVX2, Modrm|Vex|VexOpcode=1|VexVVVV|VexW1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|VecSIB128, { RegXMM, Qword|Unspecified|BaseIndex, RegXMM } +vpgatherdq, 3, 0x6690, None, 1, CpuAVX2, Modrm|Vex=2|VexOpcode=1|VexVVVV|VexW1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|VecSIB128, { RegYMM, Qword|Unspecified|BaseIndex, RegYMM } +vpgatherqd, 3, 0x6691, None, 1, CpuAVX2, Modrm|Vex|VexOpcode=1|VexVVVV|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|VecSIB128, { RegXMM, Dword|Unspecified|BaseIndex, RegXMM } +vpgatherqd, 3, 0x6691, None, 1, CpuAVX2, Modrm|Vex=2|VexOpcode=1|VexVVVV|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|VecSIB256, { RegXMM, Dword|Unspecified|BaseIndex, RegXMM } +vpgatherqq, 3, 0x6691, None, 1, CpuAVX2, Modrm|Vex|VexOpcode=1|VexVVVV|VexW1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|VecSIB128, { RegXMM, Qword|Unspecified|BaseIndex, RegXMM } +vpgatherqq, 3, 0x6691, None, 1, CpuAVX2, Modrm|Vex=2|VexOpcode=1|VexVVVV|VexW1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|VecSIB256, { RegYMM, Qword|Unspecified|BaseIndex, RegYMM } // AES + AVX @@ -2470,14 +2238,14 @@ // FSGSBASE, RDRND and F16C -rdfsbase, 1, 0xf30fae, 0x0, 2, CpuFSGSBase, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg32|Reg64 } -rdgsbase, 1, 0xf30fae, 0x1, 2, CpuFSGSBase, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg32|Reg64 } +rdfsbase, 1, 0xf30fae, 0x0, 2, CpuFSGSBase, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg32|Reg64 } +rdgsbase, 1, 0xf30fae, 0x1, 2, CpuFSGSBase, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg32|Reg64 } rdrand, 1, 0xfc7, 0x6, 2, CpuRdRnd, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg16|Reg32|Reg64 } -wrfsbase, 1, 0xf30fae, 0x2, 2, CpuFSGSBase, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg32|Reg64 } -wrgsbase, 1, 0xf30fae, 0x3, 2, CpuFSGSBase, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg32|Reg64 } -vcvtph2ps, 2, 0x6613, None, 1, CpuF16C, Modrm|Vex|VexOpcode=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } +wrfsbase, 1, 0xf30fae, 0x2, 2, CpuFSGSBase, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg32|Reg64 } +wrgsbase, 1, 0xf30fae, 0x3, 2, CpuFSGSBase, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg32|Reg64 } +vcvtph2ps, 2, 0x6613, None, 1, CpuF16C, Modrm|Vex|VexOpcode=1|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } vcvtph2ps, 2, 0x6613, None, 1, CpuF16C, Modrm|Vex=2|VexOpcode=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM, RegYMM } -vcvtps2ph, 3, 0x661d, None, 1, CpuF16C, Modrm|Vex|VexOpcode=2|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM, Qword|Unspecified|BaseIndex|RegXMM } +vcvtps2ph, 3, 0x661d, None, 1, CpuF16C, Modrm|Vex|VexOpcode=2|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM, Qword|Unspecified|BaseIndex|RegXMM } vcvtps2ph, 3, 0x661d, None, 1, CpuF16C, Modrm|Vex=2|VexOpcode=2|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegYMM, Unspecified|BaseIndex|RegXMM } // FMA instructions @@ -2488,12 +2256,12 @@ vfmadd213ps, 3, 0x66a8, None, 1, CpuFMA, Modrm|Vex|VexOpcode=1|VexVVVV=1|VexW=1|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vfmadd231pd, 3, 0x66b8, None, 1, CpuFMA, Modrm|Vex|VexOpcode=1|VexVVVV=1|VexW=2|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vfmadd231ps, 3, 0x66b8, None, 1, CpuFMA, Modrm|Vex|VexOpcode=1|VexVVVV=1|VexW=1|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vfmadd132sd, 3, 0x6699, None, 1, CpuFMA, Modrm|Vex=3|VexOpcode=1|VexVVVV=1|VexW=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vfmadd132ss, 3, 0x6699, None, 1, CpuFMA, Modrm|Vex=3|VexOpcode=1|VexVVVV=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vfmadd213sd, 3, 0x66a9, None, 1, CpuFMA, Modrm|Vex=3|VexOpcode=1|VexVVVV=1|VexW=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vfmadd213ss, 3, 0x66a9, None, 1, CpuFMA, Modrm|Vex=3|VexOpcode=1|VexVVVV=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vfmadd231sd, 3, 0x66b9, None, 1, CpuFMA, Modrm|Vex=3|VexOpcode=1|VexVVVV=1|VexW=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vfmadd231ss, 3, 0x66b9, None, 1, CpuFMA, Modrm|Vex=3|VexOpcode=1|VexVVVV=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } +vfmadd132sd, 3, 0x6699, None, 1, CpuFMA, Modrm|Vex=3|VexOpcode=1|VexVVVV|VexW1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } +vfmadd132ss, 3, 0x6699, None, 1, CpuFMA, Modrm|Vex=3|VexOpcode=1|VexVVVV|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } +vfmadd213sd, 3, 0x66a9, None, 1, CpuFMA, Modrm|Vex=3|VexOpcode=1|VexVVVV|VexW1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } +vfmadd213ss, 3, 0x66a9, None, 1, CpuFMA, Modrm|Vex=3|VexOpcode=1|VexVVVV|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } +vfmadd231sd, 3, 0x66b9, None, 1, CpuFMA, Modrm|Vex=3|VexOpcode=1|VexVVVV|VexW1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } +vfmadd231ss, 3, 0x66b9, None, 1, CpuFMA, Modrm|Vex=3|VexOpcode=1|VexVVVV|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } vfmaddsub132pd, 3, 0x6696, None, 1, CpuFMA, Modrm|Vex|VexOpcode=1|VexVVVV=1|VexW=2|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vfmaddsub132ps, 3, 0x6696, None, 1, CpuFMA, Modrm|Vex|VexOpcode=1|VexVVVV=1|VexW=1|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vfmaddsub213pd, 3, 0x66a6, None, 1, CpuFMA, Modrm|Vex|VexOpcode=1|VexVVVV=1|VexW=2|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } @@ -2512,36 +2280,36 @@ vfmsub213ps, 3, 0x66aa, None, 1, CpuFMA, Modrm|Vex|VexOpcode=1|VexVVVV=1|VexW=1|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vfmsub231pd, 3, 0x66ba, None, 1, CpuFMA, Modrm|Vex|VexOpcode=1|VexVVVV=1|VexW=2|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vfmsub231ps, 3, 0x66ba, None, 1, CpuFMA, Modrm|Vex|VexOpcode=1|VexVVVV=1|VexW=1|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vfmsub132sd, 3, 0x669b, None, 1, CpuFMA, Modrm|Vex=3|VexOpcode=1|VexVVVV=1|VexW=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vfmsub132ss, 3, 0x669b, None, 1, CpuFMA, Modrm|Vex=3|VexOpcode=1|VexVVVV=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vfmsub213sd, 3, 0x66ab, None, 1, CpuFMA, Modrm|Vex=3|VexOpcode=1|VexVVVV=1|VexW=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vfmsub213ss, 3, 0x66ab, None, 1, CpuFMA, Modrm|Vex=3|VexOpcode=1|VexVVVV=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vfmsub231sd, 3, 0x66bb, None, 1, CpuFMA, Modrm|Vex=3|VexOpcode=1|VexVVVV=1|VexW=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vfmsub231ss, 3, 0x66bb, None, 1, CpuFMA, Modrm|Vex=3|VexOpcode=1|VexVVVV=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } +vfmsub132sd, 3, 0x669b, None, 1, CpuFMA, Modrm|Vex=3|VexOpcode=1|VexVVVV|VexW1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } +vfmsub132ss, 3, 0x669b, None, 1, CpuFMA, Modrm|Vex=3|VexOpcode=1|VexVVVV|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } +vfmsub213sd, 3, 0x66ab, None, 1, CpuFMA, Modrm|Vex=3|VexOpcode=1|VexVVVV|VexW1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } +vfmsub213ss, 3, 0x66ab, None, 1, CpuFMA, Modrm|Vex=3|VexOpcode=1|VexVVVV|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } +vfmsub231sd, 3, 0x66bb, None, 1, CpuFMA, Modrm|Vex=3|VexOpcode=1|VexVVVV|VexW1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } +vfmsub231ss, 3, 0x66bb, None, 1, CpuFMA, Modrm|Vex=3|VexOpcode=1|VexVVVV|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } vfnmadd132pd, 3, 0x669c, None, 1, CpuFMA, Modrm|Vex|VexOpcode=1|VexVVVV=1|VexW=2|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vfnmadd132ps, 3, 0x669c, None, 1, CpuFMA, Modrm|Vex|VexOpcode=1|VexVVVV=1|VexW=1|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vfnmadd213pd, 3, 0x66ac, None, 1, CpuFMA, Modrm|Vex|VexOpcode=1|VexVVVV=1|VexW=2|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vfnmadd213ps, 3, 0x66ac, None, 1, CpuFMA, Modrm|Vex|VexOpcode=1|VexVVVV=1|VexW=1|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vfnmadd231pd, 3, 0x66bc, None, 1, CpuFMA, Modrm|Vex|VexOpcode=1|VexVVVV=1|VexW=2|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vfnmadd231ps, 3, 0x66bc, None, 1, CpuFMA, Modrm|Vex|VexOpcode=1|VexVVVV=1|VexW=1|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vfnmadd132sd, 3, 0x669d, None, 1, CpuFMA, Modrm|Vex=3|VexOpcode=1|VexVVVV=1|VexW=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vfnmadd132ss, 3, 0x669d, None, 1, CpuFMA, Modrm|Vex=3|VexOpcode=1|VexVVVV=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vfnmadd213sd, 3, 0x66ad, None, 1, CpuFMA, Modrm|Vex=3|VexOpcode=1|VexVVVV=1|VexW=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vfnmadd213ss, 3, 0x66ad, None, 1, CpuFMA, Modrm|Vex=3|VexOpcode=1|VexVVVV=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vfnmadd231sd, 3, 0x66bd, None, 1, CpuFMA, Modrm|Vex=3|VexOpcode=1|VexVVVV=1|VexW=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vfnmadd231ss, 3, 0x66bd, None, 1, CpuFMA, Modrm|Vex=3|VexOpcode=1|VexVVVV=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } +vfnmadd132sd, 3, 0x669d, None, 1, CpuFMA, Modrm|Vex=3|VexOpcode=1|VexVVVV|VexW1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } +vfnmadd132ss, 3, 0x669d, None, 1, CpuFMA, Modrm|Vex=3|VexOpcode=1|VexVVVV|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } +vfnmadd213sd, 3, 0x66ad, None, 1, CpuFMA, Modrm|Vex=3|VexOpcode=1|VexVVVV|VexW1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } +vfnmadd213ss, 3, 0x66ad, None, 1, CpuFMA, Modrm|Vex=3|VexOpcode=1|VexVVVV|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } +vfnmadd231sd, 3, 0x66bd, None, 1, CpuFMA, Modrm|Vex=3|VexOpcode=1|VexVVVV|VexW1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } +vfnmadd231ss, 3, 0x66bd, None, 1, CpuFMA, Modrm|Vex=3|VexOpcode=1|VexVVVV|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } vfnmsub132pd, 3, 0x669e, None, 1, CpuFMA, Modrm|Vex|VexOpcode=1|VexVVVV=1|VexW=2|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vfnmsub132ps, 3, 0x669e, None, 1, CpuFMA, Modrm|Vex|VexOpcode=1|VexVVVV=1|VexW=1|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vfnmsub213pd, 3, 0x66ae, None, 1, CpuFMA, Modrm|Vex|VexOpcode=1|VexVVVV=1|VexW=2|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vfnmsub213ps, 3, 0x66ae, None, 1, CpuFMA, Modrm|Vex|VexOpcode=1|VexVVVV=1|VexW=1|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vfnmsub231pd, 3, 0x66be, None, 1, CpuFMA, Modrm|Vex|VexOpcode=1|VexVVVV=1|VexW=2|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vfnmsub231ps, 3, 0x66be, None, 1, CpuFMA, Modrm|Vex|VexOpcode=1|VexVVVV=1|VexW=1|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vfnmsub132sd, 3, 0x669f, None, 1, CpuFMA, Modrm|Vex=3|VexOpcode=1|VexVVVV=1|VexW=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vfnmsub132ss, 3, 0x669f, None, 1, CpuFMA, Modrm|Vex=3|VexOpcode=1|VexVVVV=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vfnmsub213sd, 3, 0x66af, None, 1, CpuFMA, Modrm|Vex=3|VexOpcode=1|VexVVVV=1|VexW=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vfnmsub213ss, 3, 0x66af, None, 1, CpuFMA, Modrm|Vex=3|VexOpcode=1|VexVVVV=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vfnmsub231sd, 3, 0x66bf, None, 1, CpuFMA, Modrm|Vex=3|VexOpcode=1|VexVVVV=1|VexW=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vfnmsub231ss, 3, 0x66bf, None, 1, CpuFMA, Modrm|Vex=3|VexOpcode=1|VexVVVV=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } +vfnmsub132sd, 3, 0x669f, None, 1, CpuFMA, Modrm|Vex=3|VexOpcode=1|VexVVVV|VexW1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } +vfnmsub132ss, 3, 0x669f, None, 1, CpuFMA, Modrm|Vex=3|VexOpcode=1|VexVVVV|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } +vfnmsub213sd, 3, 0x66af, None, 1, CpuFMA, Modrm|Vex=3|VexOpcode=1|VexVVVV|VexW1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } +vfnmsub213ss, 3, 0x66af, None, 1, CpuFMA, Modrm|Vex=3|VexOpcode=1|VexVVVV|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } +vfnmsub231sd, 3, 0x66bf, None, 1, CpuFMA, Modrm|Vex=3|VexOpcode=1|VexVVVV|VexW1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } +vfnmsub231ss, 3, 0x66bf, None, 1, CpuFMA, Modrm|Vex=3|VexOpcode=1|VexVVVV|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } // HLE prefixes @@ -2550,19 +2318,19 @@ // RTM instructions xabort, 1, 0xc6f8, None, 2, CpuRTM, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8 } -xbegin, 1, 0xc7f8, None, 2, CpuRTM, JumpDword|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Disp16|Disp32 } +xbegin, 1, 0xc7f8, None, 2, CpuRTM, JumpDword|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Disp16|Disp32|Disp32S } xend, 0, 0xf01d5, None, 3, CpuRTM, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 } xtest, 0, 0xf01d6, None, 3, CpuHLE|CpuRTM, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 } // BMI2 instructions. -bzhi, 3, 0xf5, None, 1, CpuBMI2, Modrm|CheckRegSize|Vex128|VexOpcode=1|VexVVVV=1|No_bSuf|No_wSuf|No_sSuf|No_ldSuf, { Reg32|Reg64, Reg32|Reg64|Dword|Qword|Unspecified|BaseIndex, Reg32|Reg64 } +bzhi, 3, 0xf5, None, 1, CpuBMI2, Modrm|CheckRegSize|Vex128|VexOpcode=1|VexVVVV=1|SwapSources|No_bSuf|No_wSuf|No_sSuf|No_ldSuf, { Reg32|Reg64, Reg32|Reg64|Dword|Qword|Unspecified|BaseIndex, Reg32|Reg64 } mulx, 3, 0xf2f6, None, 1, CpuBMI2, Modrm|CheckRegSize|Vex128|VexOpcode=1|VexVVVV=1|No_bSuf|No_wSuf|No_sSuf|No_ldSuf, { Reg32|Reg64|Dword|Qword|Unspecified|BaseIndex, Reg32|Reg64, Reg32|Reg64 } pdep, 3, 0xf2f5, None, 1, CpuBMI2, Modrm|CheckRegSize|Vex128|VexOpcode=1|VexVVVV=1|No_bSuf|No_wSuf|No_sSuf|No_ldSuf, { Reg32|Reg64|Dword|Qword|Unspecified|BaseIndex, Reg32|Reg64, Reg32|Reg64 } pext, 3, 0xf3f5, None, 1, CpuBMI2, Modrm|CheckRegSize|Vex128|VexOpcode=1|VexVVVV=1|No_bSuf|No_wSuf|No_sSuf|No_ldSuf, { Reg32|Reg64|Dword|Qword|Unspecified|BaseIndex, Reg32|Reg64, Reg32|Reg64 } rorx, 3, 0xf2f0, None, 1, CpuBMI2, Modrm|CheckRegSize|Vex128|VexOpcode=2|VexVVVV=0|No_bSuf|No_wSuf|No_sSuf|No_ldSuf, { Imm8, Reg32|Reg64|Dword|Qword|Unspecified|BaseIndex, Reg32|Reg64 } -sarx, 3, 0xf3f7, None, 1, CpuBMI2, Modrm|CheckRegSize|Vex128|VexOpcode=1|VexVVVV=1|No_bSuf|No_wSuf|No_sSuf|No_ldSuf, { Reg32|Reg64, Reg32|Reg64|Dword|Qword|Unspecified|BaseIndex, Reg32|Reg64 } -shlx, 3, 0x66f7, None, 1, CpuBMI2, Modrm|CheckRegSize|Vex128|VexOpcode=1|VexVVVV=1|No_bSuf|No_wSuf|No_sSuf|No_ldSuf, { Reg32|Reg64, Reg32|Reg64|Dword|Qword|Unspecified|BaseIndex, Reg32|Reg64 } -shrx, 3, 0xf2f7, None, 1, CpuBMI2, Modrm|CheckRegSize|Vex128|VexOpcode=1|VexVVVV=1|No_bSuf|No_wSuf|No_sSuf|No_ldSuf, { Reg32|Reg64, Reg32|Reg64|Dword|Qword|Unspecified|BaseIndex, Reg32|Reg64 } +sarx, 3, 0xf3f7, None, 1, CpuBMI2, Modrm|CheckRegSize|Vex128|VexOpcode=1|VexVVVV=1|SwapSources|No_bSuf|No_wSuf|No_sSuf|No_ldSuf, { Reg32|Reg64, Reg32|Reg64|Dword|Qword|Unspecified|BaseIndex, Reg32|Reg64 } +shlx, 3, 0x66f7, None, 1, CpuBMI2, Modrm|CheckRegSize|Vex128|VexOpcode=1|VexVVVV=1|SwapSources|No_bSuf|No_wSuf|No_sSuf|No_ldSuf, { Reg32|Reg64, Reg32|Reg64|Dword|Qword|Unspecified|BaseIndex, Reg32|Reg64 } +shrx, 3, 0xf2f7, None, 1, CpuBMI2, Modrm|CheckRegSize|Vex128|VexOpcode=1|VexVVVV=1|SwapSources|No_bSuf|No_wSuf|No_sSuf|No_ldSuf, { Reg32|Reg64, Reg32|Reg64|Dword|Qword|Unspecified|BaseIndex, Reg32|Reg64 } // FMA4 instructions @@ -2570,10 +2338,10 @@ vfmaddpd, 4, 0x6669, None, 1, CpuFMA4, Modrm|Vex|VexOpcode=2|VexVVVV=1|VexW=1|VexSources=2|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, {RegXMM|RegYMM, Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vfmaddps, 4, 0x6668, None, 1, CpuFMA4, Modrm|Vex|VexOpcode=2|VexVVVV=1|VexW=2|VexSources=2|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, {Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vfmaddps, 4, 0x6668, None, 1, CpuFMA4, Modrm|Vex|VexOpcode=2|VexVVVV=1|VexW=1|VexSources=2|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, {RegXMM|RegYMM, Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vfmaddsd, 4, 0x666b, None, 1, CpuFMA4, Modrm|Vex|VexOpcode=2|VexVVVV=1|VexW=2|VexSources=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, {Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM, RegXMM } -vfmaddsd, 4, 0x666b, None, 1, CpuFMA4, Modrm|Vex|VexOpcode=2|VexVVVV=1|VexW=1|VexSources=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, {RegXMM, Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vfmaddss, 4, 0x666a, None, 1, CpuFMA4, Modrm|Vex|VexOpcode=2|VexVVVV=1|VexW=2|VexSources=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, {Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM, RegXMM } -vfmaddss, 4, 0x666a, None, 1, CpuFMA4, Modrm|Vex|VexOpcode=2|VexVVVV=1|VexW=1|VexSources=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, {RegXMM, Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } +vfmaddsd, 4, 0x666b, None, 1, CpuFMA4, Modrm|VexLIG|VexOpcode=2|VexVVVV|VexW1|VexSources=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM, RegXMM } +vfmaddsd, 4, 0x666b, None, 1, CpuFMA4, Modrm|VexLIG|VexOpcode=2|VexVVVV|VexW0|VexSources=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } +vfmaddss, 4, 0x666a, None, 1, CpuFMA4, Modrm|VexLIG|VexOpcode=2|VexVVVV|VexW1|VexSources=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM, RegXMM } +vfmaddss, 4, 0x666a, None, 1, CpuFMA4, Modrm|VexLIG|VexOpcode=2|VexVVVV|VexW0|VexSources=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } vfmaddsubpd, 4, 0x665d, None, 1, CpuFMA4, Modrm|Vex|VexOpcode=2|VexVVVV=1|VexW=2|VexSources=2|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, {Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vfmaddsubpd, 4, 0x665d, None, 1, CpuFMA4, Modrm|Vex|VexOpcode=2|VexVVVV=1|VexW=1|VexSources=2|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, {RegXMM|RegYMM, Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vfmaddsubps, 4, 0x665c, None, 1, CpuFMA4, Modrm|Vex|VexOpcode=2|VexVVVV=1|VexW=2|VexSources=2|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, {Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } @@ -2586,113 +2354,45 @@ vfmsubpd, 4, 0x666d, None, 1, CpuFMA4, Modrm|Vex|VexOpcode=2|VexVVVV=1|VexW=1|VexSources=2|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, {RegXMM|RegYMM, Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vfmsubps, 4, 0x666c, None, 1, CpuFMA4, Modrm|Vex|VexOpcode=2|VexVVVV=1|VexW=2|VexSources=2|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, {Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vfmsubps, 4, 0x666c, None, 1, CpuFMA4, Modrm|Vex|VexOpcode=2|VexVVVV=1|VexW=1|VexSources=2|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, {RegXMM|RegYMM, Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vfmsubsd, 4, 0x666f, None, 1, CpuFMA4, Modrm|Vex|VexOpcode=2|VexVVVV=1|VexW=2|VexSources=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, {Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM, RegXMM } -vfmsubsd, 4, 0x666f, None, 1, CpuFMA4, Modrm|Vex|VexOpcode=2|VexVVVV=1|VexW=1|VexSources=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, {RegXMM, Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vfmsubss, 4, 0x666e, None, 1, CpuFMA4, Modrm|Vex|VexOpcode=2|VexVVVV=1|VexW=2|VexSources=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, {Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM, RegXMM } -vfmsubss, 4, 0x666e, None, 1, CpuFMA4, Modrm|Vex|VexOpcode=2|VexVVVV=1|VexW=1|VexSources=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, {RegXMM, Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } +vfmsubsd, 4, 0x666f, None, 1, CpuFMA4, Modrm|VexLIG|VexOpcode=2|VexVVVV|VexW1|VexSources=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM, RegXMM } +vfmsubsd, 4, 0x666f, None, 1, CpuFMA4, Modrm|VexLIG|VexOpcode=2|VexVVVV|VexW0|VexSources=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } +vfmsubss, 4, 0x666e, None, 1, CpuFMA4, Modrm|VexLIG|VexOpcode=2|VexVVVV|VexW1|VexSources=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM, RegXMM } +vfmsubss, 4, 0x666e, None, 1, CpuFMA4, Modrm|VexLIG|VexOpcode=2|VexVVVV|VexW0|VexSources=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } vfnmaddpd, 4, 0x6679, None, 1, CpuFMA4, Modrm|Vex|VexOpcode=2|VexVVVV=1|VexW=2|VexSources=2|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, {Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vfnmaddpd, 4, 0x6679, None, 1, CpuFMA4, Modrm|Vex|VexOpcode=2|VexVVVV=1|VexW=1|VexSources=2|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, {RegXMM|RegYMM, Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vfnmaddps, 4, 0x6678, None, 1, CpuFMA4, Modrm|Vex|VexOpcode=2|VexVVVV=1|VexW=2|VexSources=2|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, {Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vfnmaddps, 4, 0x6678, None, 1, CpuFMA4, Modrm|Vex|VexOpcode=2|VexVVVV=1|VexW=1|VexSources=2|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, {RegXMM|RegYMM, Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vfnmaddsd, 4, 0x667b, None, 1, CpuFMA4, Modrm|Vex|VexOpcode=2|VexVVVV=1|VexW=2|VexSources=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, {Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM, RegXMM } -vfnmaddsd, 4, 0x667b, None, 1, CpuFMA4, Modrm|Vex|VexOpcode=2|VexVVVV=1|VexW=1|VexSources=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, {RegXMM, Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vfnmaddss, 4, 0x667a, None, 1, CpuFMA4, Modrm|Vex|VexOpcode=2|VexVVVV=1|VexW=2|VexSources=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, {Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM, RegXMM } -vfnmaddss, 4, 0x667a, None, 1, CpuFMA4, Modrm|Vex|VexOpcode=2|VexVVVV=1|VexW=1|VexSources=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, {RegXMM, Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } +vfnmaddsd, 4, 0x667b, None, 1, CpuFMA4, Modrm|VexLIG|VexOpcode=2|VexVVVV|VexW1|VexSources=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM, RegXMM } +vfnmaddsd, 4, 0x667b, None, 1, CpuFMA4, Modrm|VexLIG|VexOpcode=2|VexVVVV|VexW0|VexSources=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } +vfnmaddss, 4, 0x667a, None, 1, CpuFMA4, Modrm|VexLIG|VexOpcode=2|VexVVVV|VexW1|VexSources=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM, RegXMM } +vfnmaddss, 4, 0x667a, None, 1, CpuFMA4, Modrm|VexLIG|VexOpcode=2|VexVVVV|VexW0|VexSources=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } vfnmsubpd, 4, 0x667d, None, 1, CpuFMA4, Modrm|Vex|VexOpcode=2|VexVVVV=1|VexW=2|VexSources=2|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, {Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vfnmsubpd, 4, 0x667d, None, 1, CpuFMA4, Modrm|Vex|VexOpcode=2|VexVVVV=1|VexW=1|VexSources=2|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, {RegXMM|RegYMM, Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vfnmsubps, 4, 0x667c, None, 1, CpuFMA4, Modrm|Vex|VexOpcode=2|VexVVVV=1|VexW=2|VexSources=2|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, {Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vfnmsubps, 4, 0x667c, None, 1, CpuFMA4, Modrm|Vex|VexOpcode=2|VexVVVV=1|VexW=1|VexSources=2|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, {RegXMM|RegYMM, Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vfnmsubsd, 4, 0x667f, None, 1, CpuFMA4, Modrm|Vex|VexOpcode=2|VexVVVV=1|VexW=2|VexSources=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, {Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM, RegXMM } -vfnmsubsd, 4, 0x667f, None, 1, CpuFMA4, Modrm|Vex|VexOpcode=2|VexVVVV=1|VexW=1|VexSources=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, {RegXMM, Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } -vfnmsubss, 4, 0x667e, None, 1, CpuFMA4, Modrm|Vex|VexOpcode=2|VexVVVV=1|VexW=2|VexSources=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, {Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM, RegXMM } -vfnmsubss, 4, 0x667e, None, 1, CpuFMA4, Modrm|Vex|VexOpcode=2|VexVVVV=1|VexW=1|VexSources=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, {RegXMM, Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } +vfnmsubsd, 4, 0x667f, None, 1, CpuFMA4, Modrm|VexLIG|VexOpcode=2|VexVVVV|VexW1|VexSources=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM, RegXMM } +vfnmsubsd, 4, 0x667f, None, 1, CpuFMA4, Modrm|VexLIG|VexOpcode=2|VexVVVV|VexW0|VexSources=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, Qword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } +vfnmsubss, 4, 0x667e, None, 1, CpuFMA4, Modrm|VexLIG|VexOpcode=2|VexVVVV|VexW1|VexSources=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM, RegXMM } +vfnmsubss, 4, 0x667e, None, 1, CpuFMA4, Modrm|VexLIG|VexOpcode=2|VexVVVV|VexW0|VexSources=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, Dword|Unspecified|BaseIndex|RegXMM, RegXMM, RegXMM } // XOP instructions -// We add Imm8 to Vex_Imm4. We use Imm8 to indicate that the operand -// is an immediate. We will check if its value will fit 4 bits. + +<xop_elem:opc, b:0, w:1, d:2, q:3> +<xop_irel:imm, lt:0, le:1, gt:2, ge:3, eq:4, neq:5, false:6, true:7> +<xop_sign:opc, :00, u:20> vfrczpd, 2, 0x81, None, 1, CpuXOP, Modrm|VexOpcode=4|VexW=1|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM } vfrczps, 2, 0x80, None, 1, CpuXOP, Modrm|VexOpcode=4|VexW=1|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM } -vfrczsd, 2, 0x83, None, 1, CpuXOP, Modrm|VexOpcode=4|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex, { Qword|RegXMM|Unspecified|BaseIndex, RegXMM } -vfrczss, 2, 0x82, None, 1, CpuXOP, Modrm|VexOpcode=4|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex, { Dword|RegXMM|Unspecified|BaseIndex, RegXMM } +vfrczsd, 2, 0x83, None, 1, CpuXOP, Modrm|VexOpcode=4|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex, { Qword|RegXMM|Unspecified|BaseIndex, RegXMM } +vfrczss, 2, 0x82, None, 1, CpuXOP, Modrm|VexOpcode=4|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex, { Dword|RegXMM|Unspecified|BaseIndex, RegXMM } vpcmov, 4, 0xa2, None, 1, CpuXOP, Modrm|VexOpcode=3|VexSources=2|VexVVVV=1|VexW=1|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex, { RegXMM|RegYMM, Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vpcmov, 4, 0xa2, None, 1, CpuXOP, Modrm|VexOpcode=3|VexSources=2|VexVVVV=1|VexW=2|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vpcomb, 4, 0xcc, None, 1, CpuXOP, Modrm|VexOpcode=3|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex, { Imm8, RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vpcomd, 4, 0xce, None, 1, CpuXOP, Modrm|VexOpcode=3|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex, { Imm8, RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vpcomq, 4, 0xcf, None, 1, CpuXOP, Modrm|VexOpcode=3|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex, { Imm8, RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vpcomub, 4, 0xec, None, 1, CpuXOP, Modrm|VexOpcode=3|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex, { Imm8, RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vpcomud, 4, 0xee, None, 1, CpuXOP, Modrm|VexOpcode=3|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex, { Imm8, RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vpcomuq, 4, 0xef, None, 1, CpuXOP, Modrm|VexOpcode=3|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex, { Imm8, RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vpcomuw, 4, 0xed, None, 1, CpuXOP, Modrm|VexOpcode=3|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex, { Imm8, RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vpcomw, 4, 0xcd, None, 1, CpuXOP, Modrm|VexOpcode=3|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex, { Imm8, RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } +vpcom<xop_sign><xop_elem>, 4, 0xcc | 0x<xop_sign:opc> | <xop_elem:opc>, None, 1, CpuXOP, Modrm|Vex128|VexOpcode=3|VexVVVV|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } +vpcom<xop_irel><xop_sign><xop_elem>, 3, 0xcc | 0x<xop_sign:opc> | <xop_elem:opc>, <xop_irel:imm>, 1, CpuXOP, Modrm|Vex128|VexOpcode=3|VexVVVV|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } vpermil2pd, 5, 0x6649, None, 1, CpuXOP, Modrm|VexOpcode=2|VexVVVV=1|VexW=1|Vex|VexSources=2|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|RegYMM, Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vpermil2pd, 5, 0x6649, None, 1, CpuXOP, Modrm|VexOpcode=2|VexVVVV=1|VexW=2|Vex|VexSources=2|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vpermil2ps, 5, 0x6648, None, 1, CpuXOP, Modrm|VexOpcode=2|VexVVVV=1|VexW=1|Vex|VexSources=2|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|RegYMM, Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } vpermil2ps, 5, 0x6648, None, 1, CpuXOP, Modrm|VexOpcode=2|VexVVVV=1|VexW=2|Vex|VexSources=2|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM } -vpcomltb, 3, 0xcc, 0x0, 1, CpuXOP, Modrm|VexOpcode=3|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vpcomltd, 3, 0xce, 0x0, 1, CpuXOP, Modrm|VexOpcode=3|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vpcomltq, 3, 0xcf, 0x0, 1, CpuXOP, Modrm|VexOpcode=3|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vpcomltub, 3, 0xec, 0x0, 1, CpuXOP, Modrm|VexOpcode=3|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vpcomltud, 3, 0xee, 0x0, 1, CpuXOP, Modrm|VexOpcode=3|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vpcomltuq, 3, 0xef, 0x0, 1, CpuXOP, Modrm|VexOpcode=3|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vpcomltuw, 3, 0xed, 0x0, 1, CpuXOP, Modrm|VexOpcode=3|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vpcomltw, 3, 0xcd, 0x0, 1, CpuXOP, Modrm|VexOpcode=3|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vpcomleb, 3, 0xcc, 0x1, 1, CpuXOP, Modrm|VexOpcode=3|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vpcomled, 3, 0xce, 0x1, 1, CpuXOP, Modrm|VexOpcode=3|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vpcomleq, 3, 0xcf, 0x1, 1, CpuXOP, Modrm|VexOpcode=3|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vpcomleub, 3, 0xec, 0x1, 1, CpuXOP, Modrm|VexOpcode=3|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vpcomleud, 3, 0xee, 0x1, 1, CpuXOP, Modrm|VexOpcode=3|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vpcomleuq, 3, 0xef, 0x1, 1, CpuXOP, Modrm|VexOpcode=3|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vpcomleuw, 3, 0xed, 0x1, 1, CpuXOP, Modrm|VexOpcode=3|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vpcomlew, 3, 0xcd, 0x1, 1, CpuXOP, Modrm|VexOpcode=3|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vpcomgtb, 3, 0xcc, 0x2, 1, CpuXOP, Modrm|VexOpcode=3|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vpcomgtd, 3, 0xce, 0x2, 1, CpuXOP, Modrm|VexOpcode=3|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vpcomgtq, 3, 0xcf, 0x2, 1, CpuXOP, Modrm|VexOpcode=3|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vpcomgtub, 3, 0xec, 0x2, 1, CpuXOP, Modrm|VexOpcode=3|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vpcomgtud, 3, 0xee, 0x2, 1, CpuXOP, Modrm|VexOpcode=3|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vpcomgtuq, 3, 0xef, 0x2, 1, CpuXOP, Modrm|VexOpcode=3|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vpcomgtuw, 3, 0xed, 0x2, 1, CpuXOP, Modrm|VexOpcode=3|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vpcomgtw, 3, 0xcd, 0x2, 1, CpuXOP, Modrm|VexOpcode=3|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vpcomgeb, 3, 0xcc, 0x3, 1, CpuXOP, Modrm|VexOpcode=3|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vpcomged, 3, 0xce, 0x3, 1, CpuXOP, Modrm|VexOpcode=3|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vpcomgeq, 3, 0xcf, 0x3, 1, CpuXOP, Modrm|VexOpcode=3|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vpcomgeub, 3, 0xec, 0x3, 1, CpuXOP, Modrm|VexOpcode=3|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vpcomgeud, 3, 0xee, 0x3, 1, CpuXOP, Modrm|VexOpcode=3|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vpcomgeuq, 3, 0xef, 0x3, 1, CpuXOP, Modrm|VexOpcode=3|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vpcomgeuw, 3, 0xed, 0x3, 1, CpuXOP, Modrm|VexOpcode=3|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vpcomgew, 3, 0xcd, 0x3, 1, CpuXOP, Modrm|VexOpcode=3|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vpcomeqb, 3, 0xcc, 0x4, 1, CpuXOP, Modrm|VexOpcode=3|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vpcomeqd, 3, 0xce, 0x4, 1, CpuXOP, Modrm|VexOpcode=3|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vpcomeqq, 3, 0xcf, 0x4, 1, CpuXOP, Modrm|VexOpcode=3|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vpcomequb, 3, 0xec, 0x4, 1, CpuXOP, Modrm|VexOpcode=3|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vpcomequd, 3, 0xee, 0x4, 1, CpuXOP, Modrm|VexOpcode=3|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vpcomequq, 3, 0xef, 0x4, 1, CpuXOP, Modrm|VexOpcode=3|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vpcomequw, 3, 0xed, 0x4, 1, CpuXOP, Modrm|VexOpcode=3|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vpcomeqw, 3, 0xcd, 0x4, 1, CpuXOP, Modrm|VexOpcode=3|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vpcomneqb, 3, 0xcc, 0x5, 1, CpuXOP, Modrm|VexOpcode=3|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vpcomneqd, 3, 0xce, 0x5, 1, CpuXOP, Modrm|VexOpcode=3|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vpcomneqq, 3, 0xcf, 0x5, 1, CpuXOP, Modrm|VexOpcode=3|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vpcomnequb, 3, 0xec, 0x5, 1, CpuXOP, Modrm|VexOpcode=3|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vpcomnequd, 3, 0xee, 0x5, 1, CpuXOP, Modrm|VexOpcode=3|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vpcomnequq, 3, 0xef, 0x5, 1, CpuXOP, Modrm|VexOpcode=3|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vpcomnequw, 3, 0xed, 0x5, 1, CpuXOP, Modrm|VexOpcode=3|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vpcomneqw, 3, 0xcd, 0x5, 1, CpuXOP, Modrm|VexOpcode=3|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vpcomfalseb, 3, 0xcc, 0x6, 1, CpuXOP, Modrm|VexOpcode=3|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vpcomfalsed, 3, 0xce, 0x6, 1, CpuXOP, Modrm|VexOpcode=3|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vpcomfalseq, 3, 0xcf, 0x6, 1, CpuXOP, Modrm|VexOpcode=3|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vpcomfalseub, 3, 0xec, 0x6, 1, CpuXOP, Modrm|VexOpcode=3|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vpcomfalseud, 3, 0xee, 0x6, 1, CpuXOP, Modrm|VexOpcode=3|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vpcomfalseuq, 3, 0xef, 0x6, 1, CpuXOP, Modrm|VexOpcode=3|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vpcomfalseuw, 3, 0xed, 0x6, 1, CpuXOP, Modrm|VexOpcode=3|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vpcomfalsew, 3, 0xcd, 0x6, 1, CpuXOP, Modrm|VexOpcode=3|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vpcomtrueb, 3, 0xcc, 0x7, 1, CpuXOP, Modrm|VexOpcode=3|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vpcomtrued, 3, 0xce, 0x7, 1, CpuXOP, Modrm|VexOpcode=3|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vpcomtrueq, 3, 0xcf, 0x7, 1, CpuXOP, Modrm|VexOpcode=3|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vpcomtrueub, 3, 0xec, 0x7, 1, CpuXOP, Modrm|VexOpcode=3|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vpcomtrueud, 3, 0xee, 0x7, 1, CpuXOP, Modrm|VexOpcode=3|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vpcomtrueuq, 3, 0xef, 0x7, 1, CpuXOP, Modrm|VexOpcode=3|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vpcomtrueuw, 3, 0xed, 0x7, 1, CpuXOP, Modrm|VexOpcode=3|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vpcomtruew, 3, 0xcd, 0x7, 1, CpuXOP, Modrm|VexOpcode=3|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex|ImmExt, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } vphaddbd, 2, 0xc2, None, 1, CpuXOP, Modrm|VexOpcode=4|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|No_qSuf|Vex, { RegXMM|Unspecified|BaseIndex, RegXMM } vphaddbq, 2, 0xc3, None, 1, CpuXOP, Modrm|VexOpcode=4|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|No_qSuf|Vex, { RegXMM|Unspecified|BaseIndex, RegXMM } vphaddbw, 2, 0xc1, None, 1, CpuXOP, Modrm|VexOpcode=4|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|No_qSuf|Vex, { RegXMM|Unspecified|BaseIndex, RegXMM } @@ -2722,34 +2422,13 @@ vpmadcswd, 4, 0xb6, None, 1, CpuXOP, Modrm|VexOpcode=3|VexSources=2|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex, { RegXMM, RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } vpperm, 4, 0xa3, None, 1, CpuXOP, Modrm|VexOpcode=3|VexSources=2|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex, { RegXMM, RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } vpperm, 4, 0xa3, None, 1, CpuXOP, Modrm|VexOpcode=3|VexSources=2|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Vex, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM, RegXMM } -vprotb, 3, 0x90, None, 1, CpuXOP, Modrm|VexOpcode=4|VexW=1|VexSources=1|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|No_qSuf|Vex, { RegXMM, RegXMM|Unspecified|BaseIndex, RegXMM } -vprotb, 3, 0x90, None, 1, CpuXOP, Modrm|VexOpcode=4|VexW=2|VexSources=1|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|No_qSuf|Vex, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vprotb, 3, 0xc0, None, 1, CpuXOP, Modrm|VexOpcode=3|VexW=1|VexSources=1|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|No_qSuf|Vex, { Imm8, RegXMM|Unspecified|BaseIndex, RegXMM } -vprotd, 3, 0x92, None, 1, CpuXOP, Modrm|VexOpcode=4|VexW=1|VexSources=1|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|No_qSuf|Vex, { RegXMM, RegXMM|Unspecified|BaseIndex, RegXMM } -vprotd, 3, 0x92, None, 1, CpuXOP, Modrm|VexOpcode=4|VexW=2|VexSources=1|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|No_qSuf|Vex, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vprotd, 3, 0xc2, None, 1, CpuXOP, Modrm|VexOpcode=3|VexW=1|VexSources=1|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|No_qSuf|Vex, { Imm8, RegXMM|Unspecified|BaseIndex, RegXMM } -vprotq, 3, 0x93, None, 1, CpuXOP, Modrm|VexOpcode=4|VexW=1|VexSources=1|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|No_qSuf|Vex, { RegXMM, RegXMM|Unspecified|BaseIndex, RegXMM } -vprotq, 3, 0x93, None, 1, CpuXOP, Modrm|VexOpcode=4|VexW=2|VexSources=1|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|No_qSuf|Vex, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vprotq, 3, 0xc3, None, 1, CpuXOP, Modrm|VexOpcode=3|VexW=1|VexSources=1|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|No_qSuf|Vex, { Imm8, RegXMM|Unspecified|BaseIndex, RegXMM } -vprotw, 3, 0x91, None, 1, CpuXOP, Modrm|VexOpcode=4|VexW=1|VexSources=1|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|No_qSuf|Vex, { RegXMM, RegXMM|Unspecified|BaseIndex, RegXMM } -vprotw, 3, 0x91, None, 1, CpuXOP, Modrm|VexOpcode=4|VexW=2|VexSources=1|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|No_qSuf|Vex, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vprotw, 3, 0xc1, None, 1, CpuXOP, Modrm|VexOpcode=3|VexW=1|VexSources=1|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|No_qSuf|Vex, { Imm8, RegXMM|Unspecified|BaseIndex, RegXMM } -vpshab, 3, 0x98, None, 1, CpuXOP, Modrm|VexOpcode=4|VexW=1|VexSources=1|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|No_qSuf|Vex, { RegXMM, RegXMM|Unspecified|BaseIndex, RegXMM } -vpshab, 3, 0x98, None, 1, CpuXOP, Modrm|VexOpcode=4|VexW=2|VexSources=1|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|No_qSuf|Vex, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vpshad, 3, 0x9a, None, 1, CpuXOP, Modrm|VexOpcode=4|VexW=1|VexSources=1|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|No_qSuf|Vex, { RegXMM, RegXMM|Unspecified|BaseIndex, RegXMM } -vpshad, 3, 0x9a, None, 1, CpuXOP, Modrm|VexOpcode=4|VexW=2|VexSources=1|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|No_qSuf|Vex, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vpshaq, 3, 0x9b, None, 1, CpuXOP, Modrm|VexOpcode=4|VexW=1|VexSources=1|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|No_qSuf|Vex, { RegXMM, RegXMM|Unspecified|BaseIndex, RegXMM } -vpshaq, 3, 0x9b, None, 1, CpuXOP, Modrm|VexOpcode=4|VexW=2|VexSources=1|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|No_qSuf|Vex, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vpshaw, 3, 0x99, None, 1, CpuXOP, Modrm|VexOpcode=4|VexW=1|VexSources=1|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|No_qSuf|Vex, { RegXMM, RegXMM|Unspecified|BaseIndex, RegXMM } -vpshaw, 3, 0x99, None, 1, CpuXOP, Modrm|VexOpcode=4|VexW=2|VexSources=1|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|No_qSuf|Vex, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vpshlb, 3, 0x94, None, 1, CpuXOP, Modrm|VexOpcode=4|VexW=1|VexSources=1|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|No_qSuf|Vex, { RegXMM, RegXMM|Unspecified|BaseIndex, RegXMM } -vpshlb, 3, 0x94, None, 1, CpuXOP, Modrm|VexOpcode=4|VexW=2|VexSources=1|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|No_qSuf|Vex, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vpshld, 3, 0x96, None, 1, CpuXOP, Modrm|VexOpcode=4|VexW=1|VexSources=1|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|No_qSuf|Vex, { RegXMM, RegXMM|Unspecified|BaseIndex, RegXMM } -vpshld, 3, 0x96, None, 1, CpuXOP, Modrm|VexOpcode=4|VexW=2|VexSources=1|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|No_qSuf|Vex, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vpshlq, 3, 0x97, None, 1, CpuXOP, Modrm|VexOpcode=4|VexW=1|VexSources=1|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|No_qSuf|Vex, { RegXMM, RegXMM|Unspecified|BaseIndex, RegXMM } -vpshlq, 3, 0x97, None, 1, CpuXOP, Modrm|VexOpcode=4|VexW=2|VexSources=1|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|No_qSuf|Vex, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vpshlw, 3, 0x95, None, 1, CpuXOP, Modrm|VexOpcode=4|VexW=1|VexSources=1|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|No_qSuf|Vex, { RegXMM, RegXMM|Unspecified|BaseIndex, RegXMM } -vpshlw, 3, 0x95, None, 1, CpuXOP, Modrm|VexOpcode=4|VexW=2|VexSources=1|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|No_qSuf|Vex, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } +vprot<xop_elem>, 3, 0x90 | <xop_elem:opc>, None, 1, CpuXOP, Modrm|Vex128|VexOpcode=4|VexW0|VexSources=1|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|No_qSuf, { RegXMM, RegXMM|Unspecified|BaseIndex, RegXMM } +vprot<xop_elem>, 3, 0x90 | <xop_elem:opc>, None, 1, CpuXOP, Modrm|Vex128|VexOpcode=4|VexW1|VexSources=1|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|No_qSuf, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } +vprot<xop_elem>, 3, 0xc0 | <xop_elem:opc>, None, 1, CpuXOP, Modrm|Vex128|VexOpcode=3|VexW0|VexSources=1|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|No_qSuf, { Imm8, RegXMM|Unspecified|BaseIndex, RegXMM } +vpsha<xop_elem>, 3, 0x98 | <xop_elem:opc>, None, 1, CpuXOP, Modrm|Vex128|VexOpcode=4|VexW0|VexSources=1|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|No_qSuf, { RegXMM, RegXMM|Unspecified|BaseIndex, RegXMM } +vpsha<xop_elem>, 3, 0x98 | <xop_elem:opc>, None, 1, CpuXOP, Modrm|Vex128|VexOpcode=4|VexW1|VexSources=1|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|No_qSuf, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } +vpshl<xop_elem>, 3, 0x94 | <xop_elem:opc>, None, 1, CpuXOP, Modrm|Vex128|VexOpcode=4|VexW0|VexSources=1|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|No_qSuf, { RegXMM, RegXMM|Unspecified|BaseIndex, RegXMM } +vpshl<xop_elem>, 3, 0x94 | <xop_elem:opc>, None, 1, CpuXOP, Modrm|Vex128|VexOpcode=4|VexW1|VexSources=1|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|No_qSuf, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } // LWP instructions @@ -2761,7 +2440,7 @@ // BMI instructions andn, 3, 0xf2, None, 1, CpuBMI, Modrm|CheckRegSize|Vex128|VexOpcode=1|VexVVVV=1|No_bSuf|No_wSuf|No_sSuf|No_ldSuf, { Reg32|Reg64|Dword|Qword|Unspecified|BaseIndex, Reg32|Reg64, Reg32|Reg64 } -bextr, 3, 0xf7, None, 1, CpuBMI, Modrm|CheckRegSize|Vex128|VexOpcode=1|VexVVVV=1|No_bSuf|No_wSuf|No_sSuf|No_ldSuf, { Reg32|Reg64, Reg32|Reg64|Dword|Qword|Unspecified|BaseIndex, Reg32|Reg64 } +bextr, 3, 0xf7, None, 1, CpuBMI, Modrm|CheckRegSize|Vex128|VexOpcode=1|VexVVVV=1|SwapSources|No_bSuf|No_wSuf|No_sSuf|No_ldSuf, { Reg32|Reg64, Reg32|Reg64|Dword|Qword|Unspecified|BaseIndex, Reg32|Reg64 } blsi, 2, 0xf3, 0x3, 1, CpuBMI, Modrm|CheckRegSize|Vex128|VexOpcode=1|VexVVVV=2|No_bSuf|No_wSuf|No_sSuf|No_ldSuf, { Reg32|Reg64|Dword|Qword|Unspecified|BaseIndex, Reg32|Reg64 } blsmsk, 2, 0xf3, 0x2, 1, CpuBMI, Modrm|CheckRegSize|Vex128|VexOpcode=1|VexVVVV=2|No_bSuf|No_wSuf|No_sSuf|No_ldSuf, { Reg32|Reg64|Dword|Qword|Unspecified|BaseIndex, Reg32|Reg64 } blsr, 2, 0xf3, 0x1, 1, CpuBMI, Modrm|CheckRegSize|Vex128|VexOpcode=1|VexVVVV=2|No_bSuf|No_wSuf|No_sSuf|No_ldSuf, { Reg32|Reg64|Dword|Qword|Unspecified|BaseIndex, Reg32|Reg64 } @@ -2784,55 +2463,52 @@ prefetch, 1, 0xf0d, 0x0, 2, Cpu3dnow|CpuPRFCHW, Modrm|Anysize|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { BaseIndex } prefetchw, 1, 0xf0d, 0x1, 2, Cpu3dnow|CpuPRFCHW, Modrm|Anysize|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { BaseIndex } femms, 0, 0xf0e, None, 2, Cpu3dnow, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 } -pavgusb, 2, 0xf0f, 0xbf, 2, Cpu3dnow, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } -pf2id, 2, 0xf0f, 0x1d, 2, Cpu3dnow, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } -pf2iw, 2, 0xf0f, 0x1c, 2, Cpu3dnowA, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } -pfacc, 2, 0xf0f, 0xae, 2, Cpu3dnow, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } -pfadd, 2, 0xf0f, 0x9e, 2, Cpu3dnow, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } -pfcmpeq, 2, 0xf0f, 0xb0, 2, Cpu3dnow, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } -pfcmpge, 2, 0xf0f, 0x90, 2, Cpu3dnow, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } -pfcmpgt, 2, 0xf0f, 0xa0, 2, Cpu3dnow, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } -pfmax, 2, 0xf0f, 0xa4, 2, Cpu3dnow, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } -pfmin, 2, 0xf0f, 0x94, 2, Cpu3dnow, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } -pfmul, 2, 0xf0f, 0xb4, 2, Cpu3dnow, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } -pfnacc, 2, 0xf0f, 0x8a, 2, Cpu3dnowA, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } -pfpnacc, 2, 0xf0f, 0x8e, 2, Cpu3dnowA, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } -pfrcp, 2, 0xf0f, 0x96, 2, Cpu3dnow, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } -pfrcpit1, 2, 0xf0f, 0xa6, 2, Cpu3dnow, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } -pfrcpit2, 2, 0xf0f, 0xb6, 2, Cpu3dnow, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } -pfrsqit1, 2, 0xf0f, 0xa7, 2, Cpu3dnow, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } -pfrsqrt, 2, 0xf0f, 0x97, 2, Cpu3dnow, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } -pfsub, 2, 0xf0f, 0x9a, 2, Cpu3dnow, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } -pfsubr, 2, 0xf0f, 0xaa, 2, Cpu3dnow, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } -pi2fd, 2, 0xf0f, 0xd, 2, Cpu3dnow, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } -pi2fw, 2, 0xf0f, 0xc, 2, Cpu3dnowA, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } -pmulhrw, 2, 0xf0f, 0xb7, 2, Cpu3dnow, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } -pswapd, 2, 0xf0f, 0xbb, 2, Cpu3dnowA, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +pavgusb, 2, 0xf0f, 0xbf, 2, Cpu3dnow, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64|ImmExt, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +pf2id, 2, 0xf0f, 0x1d, 2, Cpu3dnow, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64|ImmExt, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +pf2iw, 2, 0xf0f, 0x1c, 2, Cpu3dnowA, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64|ImmExt, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +pfacc, 2, 0xf0f, 0xae, 2, Cpu3dnow, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64|ImmExt, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +pfadd, 2, 0xf0f, 0x9e, 2, Cpu3dnow, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64|ImmExt, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +pfcmpeq, 2, 0xf0f, 0xb0, 2, Cpu3dnow, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64|ImmExt, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +pfcmpge, 2, 0xf0f, 0x90, 2, Cpu3dnow, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64|ImmExt, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +pfcmpgt, 2, 0xf0f, 0xa0, 2, Cpu3dnow, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64|ImmExt, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +pfmax, 2, 0xf0f, 0xa4, 2, Cpu3dnow, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64|ImmExt, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +pfmin, 2, 0xf0f, 0x94, 2, Cpu3dnow, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64|ImmExt, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +pfmul, 2, 0xf0f, 0xb4, 2, Cpu3dnow, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64|ImmExt, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +pfnacc, 2, 0xf0f, 0x8a, 2, Cpu3dnowA, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64|ImmExt, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +pfpnacc, 2, 0xf0f, 0x8e, 2, Cpu3dnowA, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64|ImmExt, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +pfrcp, 2, 0xf0f, 0x96, 2, Cpu3dnow, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64|ImmExt, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +pfrcpit1, 2, 0xf0f, 0xa6, 2, Cpu3dnow, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64|ImmExt, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +pfrcpit2, 2, 0xf0f, 0xb6, 2, Cpu3dnow, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64|ImmExt, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +pfrsqit1, 2, 0xf0f, 0xa7, 2, Cpu3dnow, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64|ImmExt, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +pfrsqrt, 2, 0xf0f, 0x97, 2, Cpu3dnow, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64|ImmExt, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +pfsub, 2, 0xf0f, 0x9a, 2, Cpu3dnow, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64|ImmExt, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +pfsubr, 2, 0xf0f, 0xaa, 2, Cpu3dnow, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64|ImmExt, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +pi2fd, 2, 0xf0f, 0xd, 2, Cpu3dnow, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64|ImmExt, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +pi2fw, 2, 0xf0f, 0xc, 2, Cpu3dnowA, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64|ImmExt, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +pmulhrw, 2, 0xf0f, 0xb7, 2, Cpu3dnow, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64|ImmExt, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } +pswapd, 2, 0xf0f, 0xbb, 2, Cpu3dnowA, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64|ImmExt, { Qword|Unspecified|BaseIndex|RegMMX, RegMMX } // AMD extensions. syscall, 0, 0xf05, None, 2, CpuSYSCALL, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 } -sysret, 0, 0xf07, None, 2, CpuSYSCALL, DefaultSize|No_bSuf|No_wSuf|No_sSuf|No_ldSuf, { 0 } +sysret, 0, 0xf07, None, 2, CpuSYSCALL, No_bSuf|No_wSuf|No_sSuf|No_ldSuf, { 0 } swapgs, 0, 0xf01f8, None, 3, Cpu64, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 } rdtscp, 0, 0xf01f9, None, 3, CpuRdtscp, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 } // AMD Pacifica additions. clgi, 0, 0xf01dd, None, 3, CpuSVME, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 } invlpga, 0, 0xf01df, None, 3, CpuSVME, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 } -invlpga, 2, 0xf01df, None, 3, CpuSVME|CpuNo64, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|AddrPrefixOpReg, { Acc|Word|Dword, RegC|Dword } -invlpga, 2, 0xf01df, None, 3, CpuSVME|Cpu64, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|AddrPrefixOpReg|NoRex64, { Acc|Dword|Qword, RegC|Dword } +invlpga, 2, 0xf01df, None, 3, CpuSVME, AddrPrefixOpReg, { Acc|Word|Dword|Qword, RegC|Dword } skinit, 0, 0xf01de, None, 3, CpuSVME, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 } skinit, 1, 0xf01de, None, 3, CpuSVME, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Acc|Dword } stgi, 0, 0xf01dc, None, 3, CpuSVME, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 } +vmgexit, 0, 0xf30f01d9, None, 3, CpuSEV_ES, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 } vmload, 0, 0xf01da, None, 3, CpuSVME, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 } -vmload, 1, 0xf01da, None, 3, CpuSVME|CpuNo64, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|AddrPrefixOpReg, { Acc|Word|Dword } -vmload, 1, 0xf01da, None, 3, CpuSVME|Cpu64, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|AddrPrefixOpReg|NoRex64, { Acc|Dword|Qword } +vmload, 1, 0xf01da, None, 3, CpuSVME, AddrPrefixOpReg, { Acc|Word|Dword|Qword } vmmcall, 0, 0xf01d9, None, 3, CpuSVME, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 } vmrun, 0, 0xf01d8, None, 3, CpuSVME, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 } -vmrun, 1, 0xf01d8, None, 3, CpuSVME|CpuNo64, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|AddrPrefixOpReg, { Acc|Word|Dword } -vmrun, 1, 0xf01d8, None, 3, CpuSVME|Cpu64, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|AddrPrefixOpReg|NoRex64, { Acc|Dword|Qword } +vmrun, 1, 0xf01d8, None, 3, CpuSVME, AddrPrefixOpReg, { Acc|Word|Dword|Qword } vmsave, 0, 0xf01db, None, 3, CpuSVME, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 } -vmsave, 1, 0xf01db, None, 3, CpuSVME|CpuNo64, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|AddrPrefixOpReg, { Acc|Word|Dword } -vmsave, 1, 0xf01db, None, 3, CpuSVME|Cpu64, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|AddrPrefixOpReg|NoRex64, { Acc|Dword|Qword } +vmsave, 1, 0xf01db, None, 3, CpuSVME, AddrPrefixOpReg, { Acc|Word|Dword|Qword } // SSE4a instructions @@ -2843,9 +2519,11 @@ insertq, 2, 0xf20f79, None, 2, CpuSSE4a, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, RegXMM } insertq, 4, 0xf20f78, None, 2, CpuSSE4a, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Imm8, RegXMM, RegXMM } -// ABM instructions -popcnt, 2, 0xf30fb8, None, 2, CpuABM|CpuSSE4_2, Modrm|CheckRegSize|No_bSuf|No_sSuf|No_ldSuf|NoAVX, { Reg16|Reg32|Reg64|Word|Dword|Qword|Unspecified|BaseIndex, Reg16|Reg32|Reg64 } -lzcnt, 2, 0xf30fbd, None, 2, CpuABM|CpuLZCNT, Modrm|CheckRegSize|No_bSuf|No_sSuf|No_ldSuf, { Reg16|Reg32|Reg64|Word|Dword|Qword|Unspecified|BaseIndex, Reg16|Reg32|Reg64 } +// LZCNT instruction +lzcnt, 2, 0xf30fbd, None, 2, CpuLZCNT, Modrm|CheckRegSize|No_bSuf|No_sSuf|No_ldSuf, { Reg16|Reg32|Reg64|Word|Dword|Qword|Unspecified|BaseIndex, Reg16|Reg32|Reg64 } + +// POPCNT instruction +popcnt, 2, 0xf30fb8, None, 2, CpuPOPCNT, Modrm|CheckRegSize|No_bSuf|No_sSuf|No_ldSuf|NoAVX, { Reg16|Reg32|Reg64|Word|Dword|Qword|Unspecified|BaseIndex, Reg16|Reg32|Reg64 } // VIA PadLock extensions. xstore-rng, 0, 0xfa7c0, None, 3, CpuPadLock, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IsString|RepPrefixOk, { 0 } @@ -2868,8 +2546,8 @@ xstore, 0, 0xfa7c0, None, 3, CpuPadLock, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IsString|RepPrefixOk, { 0 } // Multy-precision Add Carry, rdseed instructions. -adcx, 2, 0x660f38f6, None, 3, CpuADX, Modrm|CheckRegSize|No_bSuf|No_wSuf|No_sSuf|No_ldSuf, { Reg32|Reg64|Dword|Qword|Unspecified|BaseIndex, Reg32|Reg64 } -adox, 2, 0xf30f38f6, None, 3, CpuADX, Modrm|CheckRegSize|No_bSuf|No_wSuf|No_sSuf|No_ldSuf, { Reg32|Reg64|Dword|Qword|Unspecified|BaseIndex, Reg32|Reg64 } +adcx, 2, 0x660f38f6, None, 3, CpuADX, Modrm|CheckRegSize|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_ldSuf, { Reg32|Reg64|Unspecified|BaseIndex, Reg32|Reg64 } +adox, 2, 0xf30f38f6, None, 3, CpuADX, Modrm|CheckRegSize|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_ldSuf, { Reg32|Reg64|Unspecified|BaseIndex, Reg32|Reg64 } rdseed, 1, 0xfc7, 0x7, 2, CpuRdSeed, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg16|Reg32|Reg64 } // SMAP instructions. @@ -2922,8 +2600,8 @@ kxnorw, 3, 0x46, None, 1, CpuAVX512F, Modrm|Vex=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegMask, RegMask, RegMask } kxorw, 3, 0x47, None, 1, CpuAVX512F, Modrm|Vex=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegMask, RegMask, RegMask } -kmovw, 2, 0x90, None, 1, CpuAVX512F, Modrm|Vex=1|VexOpcode=0|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegMask|Word|Unspecified|BaseIndex, RegMask } -kmovw, 2, 0x91, None, 1, CpuAVX512F, Modrm|Vex=1|VexOpcode=0|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegMask, Word|Unspecified|BaseIndex } +kmovw, 2, 0x90, None, 1, CpuAVX512F, Modrm|Vex=1|VexOpcode=0|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegMask|Word|Unspecified|BaseIndex, RegMask } +kmovw, 2, 0x91, None, 1, CpuAVX512F, Modrm|Vex=1|VexOpcode=0|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegMask, Word|Unspecified|BaseIndex } kmovw, 2, 0x92, None, 1, CpuAVX512F, D|Modrm|Vex=1|VexOpcode=0|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg32, RegMask } knotw, 2, 0x44, None, 1, CpuAVX512F, Modrm|Vex=1|VexOpcode=0|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegMask, RegMask } @@ -2952,26 +2630,26 @@ vsubps, 3, 0x5C, None, 1, CpuAVX512F, Modrm|Masking=3|VexOpcode=0|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } vsubps, 4, 0x5C, None, 1, CpuAVX512F, Modrm|EVex=1|Masking=3|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|StaticRounding|SAE, { Imm8, RegZMM, RegZMM, RegZMM } -vaddsd, 3, 0xF258, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=0|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegXMM } +vaddsd, 3, 0xF258, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=0|VexVVVV|VexW1|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegXMM } vaddsd, 4, 0xF258, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|StaticRounding|SAE, { Imm8, RegXMM, RegXMM, RegXMM } -vdivsd, 3, 0xF25E, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=0|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegXMM } +vdivsd, 3, 0xF25E, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=0|VexVVVV|VexW1|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegXMM } vdivsd, 4, 0xF25E, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|StaticRounding|SAE, { Imm8, RegXMM, RegXMM, RegXMM } -vmulsd, 3, 0xF259, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=0|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegXMM } +vmulsd, 3, 0xF259, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=0|VexVVVV|VexW1|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegXMM } vmulsd, 4, 0xF259, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|StaticRounding|SAE, { Imm8, RegXMM, RegXMM, RegXMM } -vsqrtsd, 3, 0xF251, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=0|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegXMM } +vsqrtsd, 3, 0xF251, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=0|VexVVVV|VexW1|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegXMM } vsqrtsd, 4, 0xF251, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|StaticRounding|SAE, { Imm8, RegXMM, RegXMM, RegXMM } -vsubsd, 3, 0xF25C, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=0|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegXMM } +vsubsd, 3, 0xF25C, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=0|VexVVVV|VexW1|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegXMM } vsubsd, 4, 0xF25C, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|StaticRounding|SAE, { Imm8, RegXMM, RegXMM, RegXMM } -vaddss, 3, 0xF358, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=0|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegXMM } +vaddss, 3, 0xF358, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=0|VexVVVV|VexW0|Disp8MemShift=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegXMM } vaddss, 4, 0xF358, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|StaticRounding|SAE, { Imm8, RegXMM, RegXMM, RegXMM } -vdivss, 3, 0xF35E, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=0|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegXMM } +vdivss, 3, 0xF35E, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=0|VexVVVV|VexW0|Disp8MemShift=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegXMM } vdivss, 4, 0xF35E, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|StaticRounding|SAE, { Imm8, RegXMM, RegXMM, RegXMM } -vmulss, 3, 0xF359, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=0|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegXMM } +vmulss, 3, 0xF359, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=0|VexVVVV|VexW0|Disp8MemShift=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegXMM } vmulss, 4, 0xF359, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|StaticRounding|SAE, { Imm8, RegXMM, RegXMM, RegXMM } -vsqrtss, 3, 0xF351, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=0|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegXMM } +vsqrtss, 3, 0xF351, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=0|VexVVVV|VexW0|Disp8MemShift=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegXMM } vsqrtss, 4, 0xF351, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|StaticRounding|SAE, { Imm8, RegXMM, RegXMM, RegXMM } -vsubss, 3, 0xF35C, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=0|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegXMM } +vsubss, 3, 0xF35C, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=0|VexVVVV|VexW0|Disp8MemShift=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegXMM } vsubss, 4, 0xF35C, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|StaticRounding|SAE, { Imm8, RegXMM, RegXMM, RegXMM } valignd, 4, 0x6603, None, 1, CpuAVX512F, Modrm|Masking=3|VexOpcode=2|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } @@ -3020,400 +2698,40 @@ vbroadcastf64x4, 2, 0x661B, None, 1, CpuAVX512F, Modrm|EVex=1|Masking=3|VexOpcode=1|VexW=2|Disp8MemShift=5|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { YMMword|Unspecified|BaseIndex, RegZMM } vbroadcasti64x4, 2, 0x665B, None, 1, CpuAVX512F, Modrm|EVex=1|Masking=3|VexOpcode=1|VexW=2|Disp8MemShift=5|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { YMMword|Unspecified|BaseIndex, RegZMM } -vbroadcastss, 2, 0x6618, None, 1, CpuAVX512F, Modrm|Masking=3|VexOpcode=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM } -vbroadcastsd, 2, 0x6619, None, 1, CpuAVX512F, Modrm|Masking=3|VexOpcode=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegYMM|RegZMM } +vbroadcastss, 2, 0x6618, None, 1, CpuAVX512F, Modrm|Masking=3|VexOpcode=1|VexW0|Disp8MemShift=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM } +vbroadcastsd, 2, 0x6619, None, 1, CpuAVX512F, Modrm|Masking=3|VexOpcode=1|VexW1|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegYMM|RegZMM } -vpbroadcastd, 2, 0x6658, None, 1, CpuAVX512F, Modrm|Masking=3|VexOpcode=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM } +vpbroadcastd, 2, 0x6658, None, 1, CpuAVX512F, Modrm|Masking=3|VexOpcode=1|VexW0|Disp8MemShift=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM } vpbroadcastd, 2, 0x667C, None, 1, CpuAVX512F, Modrm|Masking=3|VexOpcode=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg32, RegXMM|RegYMM|RegZMM } +vcmp<avx_frel>pd, 3, 0x66C2, 0x<avx_frel:imm>, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV|VexW1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } +vcmp<avx_frel>pd, 4, 0x66C2, 0x<avx_frel:imm>, 1, CpuAVX512F, Modrm|EVex512|Masking=2|VexOpcode=0|VexVVVV|VexW1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } vcmppd, 4, 0x66C2, None, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } vcmppd, 5, 0x66C2, None, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SAE, { Imm8, Imm8, RegZMM, RegZMM, RegMask } -vcmpeqpd, 3, 0x66C2, 0, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmpeqpd, 4, 0x66C2, 0, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmpeq_oqpd, 3, 0x66C2, 0, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmpeq_oqpd, 4, 0x66C2, 0, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmpeq_ospd, 3, 0x66C2, 16, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmpeq_ospd, 4, 0x66C2, 16, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmpeq_uqpd, 3, 0x66C2, 8, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmpeq_uqpd, 4, 0x66C2, 8, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmpeq_uspd, 3, 0x66C2, 24, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmpeq_uspd, 4, 0x66C2, 24, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmpfalsepd, 3, 0x66C2, 11, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmpfalsepd, 4, 0x66C2, 11, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmpfalse_oqpd, 3, 0x66C2, 11, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmpfalse_oqpd, 4, 0x66C2, 11, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmpfalse_ospd, 3, 0x66C2, 27, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmpfalse_ospd, 4, 0x66C2, 27, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmpgepd, 3, 0x66C2, 13, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmpgepd, 4, 0x66C2, 13, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmpge_oqpd, 3, 0x66C2, 29, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmpge_oqpd, 4, 0x66C2, 29, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmpge_ospd, 3, 0x66C2, 13, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmpge_ospd, 4, 0x66C2, 13, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmpgtpd, 3, 0x66C2, 14, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmpgtpd, 4, 0x66C2, 14, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmpgt_oqpd, 3, 0x66C2, 30, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmpgt_oqpd, 4, 0x66C2, 30, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmpgt_ospd, 3, 0x66C2, 14, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmpgt_ospd, 4, 0x66C2, 14, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmplepd, 3, 0x66C2, 2, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmplepd, 4, 0x66C2, 2, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmple_oqpd, 3, 0x66C2, 18, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmple_oqpd, 4, 0x66C2, 18, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmple_ospd, 3, 0x66C2, 2, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmple_ospd, 4, 0x66C2, 2, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmpltpd, 3, 0x66C2, 1, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmpltpd, 4, 0x66C2, 1, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmplt_oqpd, 3, 0x66C2, 17, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmplt_oqpd, 4, 0x66C2, 17, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmplt_ospd, 3, 0x66C2, 1, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmplt_ospd, 4, 0x66C2, 1, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmpneqpd, 3, 0x66C2, 4, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmpneqpd, 4, 0x66C2, 4, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmpneq_oqpd, 3, 0x66C2, 12, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmpneq_oqpd, 4, 0x66C2, 12, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmpneq_ospd, 3, 0x66C2, 28, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmpneq_ospd, 4, 0x66C2, 28, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmpneq_uqpd, 3, 0x66C2, 4, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmpneq_uqpd, 4, 0x66C2, 4, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmpneq_uspd, 3, 0x66C2, 20, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmpneq_uspd, 4, 0x66C2, 20, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmpngepd, 3, 0x66C2, 9, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmpngepd, 4, 0x66C2, 9, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmpnge_uqpd, 3, 0x66C2, 25, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmpnge_uqpd, 4, 0x66C2, 25, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmpnge_uspd, 3, 0x66C2, 9, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmpnge_uspd, 4, 0x66C2, 9, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmpngtpd, 3, 0x66C2, 10, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmpngtpd, 4, 0x66C2, 10, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmpngt_uqpd, 3, 0x66C2, 26, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmpngt_uqpd, 4, 0x66C2, 26, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmpngt_uspd, 3, 0x66C2, 10, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmpngt_uspd, 4, 0x66C2, 10, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmpnlepd, 3, 0x66C2, 6, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmpnlepd, 4, 0x66C2, 6, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmpnle_uqpd, 3, 0x66C2, 22, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmpnle_uqpd, 4, 0x66C2, 22, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmpnle_uspd, 3, 0x66C2, 6, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmpnle_uspd, 4, 0x66C2, 6, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmpnltpd, 3, 0x66C2, 5, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmpnltpd, 4, 0x66C2, 5, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmpnlt_uqpd, 3, 0x66C2, 21, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmpnlt_uqpd, 4, 0x66C2, 21, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmpnlt_uspd, 3, 0x66C2, 5, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmpnlt_uspd, 4, 0x66C2, 5, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmpordpd, 3, 0x66C2, 7, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmpordpd, 4, 0x66C2, 7, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmpord_qpd, 3, 0x66C2, 7, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmpord_qpd, 4, 0x66C2, 7, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmpord_spd, 3, 0x66C2, 23, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmpord_spd, 4, 0x66C2, 23, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmptruepd, 3, 0x66C2, 15, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmptruepd, 4, 0x66C2, 15, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmptrue_uqpd, 3, 0x66C2, 15, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmptrue_uqpd, 4, 0x66C2, 15, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmptrue_uspd, 3, 0x66C2, 31, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmptrue_uspd, 4, 0x66C2, 31, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmpunordpd, 3, 0x66C2, 3, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmpunordpd, 4, 0x66C2, 3, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmpunord_qpd, 3, 0x66C2, 3, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmpunord_qpd, 4, 0x66C2, 3, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmpunord_spd, 3, 0x66C2, 19, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmpunord_spd, 4, 0x66C2, 19, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } +vcmp<avx_frel>ps, 3, 0xC2, 0x<avx_frel:imm>, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV|VexW0|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } +vcmp<avx_frel>ps, 4, 0xC2, 0x<avx_frel:imm>, 1, CpuAVX512F, Modrm|EVex512|Masking=2|VexOpcode=0|VexVVVV|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } vcmpps, 4, 0xC2, None, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } vcmpps, 5, 0xC2, None, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SAE, { Imm8, Imm8, RegZMM, RegZMM, RegMask } -vcmpeqps, 3, 0xC2, 0, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmpeqps, 4, 0xC2, 0, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmpeq_oqps, 3, 0xC2, 0, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmpeq_oqps, 4, 0xC2, 0, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmpeq_osps, 3, 0xC2, 16, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmpeq_osps, 4, 0xC2, 16, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmpeq_uqps, 3, 0xC2, 8, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmpeq_uqps, 4, 0xC2, 8, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmpeq_usps, 3, 0xC2, 24, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmpeq_usps, 4, 0xC2, 24, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmpfalseps, 3, 0xC2, 11, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmpfalseps, 4, 0xC2, 11, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmpfalse_oqps, 3, 0xC2, 11, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmpfalse_oqps, 4, 0xC2, 11, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmpfalse_osps, 3, 0xC2, 27, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmpfalse_osps, 4, 0xC2, 27, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmpgeps, 3, 0xC2, 13, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmpgeps, 4, 0xC2, 13, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmpge_oqps, 3, 0xC2, 29, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmpge_oqps, 4, 0xC2, 29, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmpge_osps, 3, 0xC2, 13, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmpge_osps, 4, 0xC2, 13, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmpgtps, 3, 0xC2, 14, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmpgtps, 4, 0xC2, 14, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmpgt_oqps, 3, 0xC2, 30, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmpgt_oqps, 4, 0xC2, 30, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmpgt_osps, 3, 0xC2, 14, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmpgt_osps, 4, 0xC2, 14, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmpleps, 3, 0xC2, 2, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmpleps, 4, 0xC2, 2, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmple_oqps, 3, 0xC2, 18, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmple_oqps, 4, 0xC2, 18, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmple_osps, 3, 0xC2, 2, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmple_osps, 4, 0xC2, 2, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmpltps, 3, 0xC2, 1, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmpltps, 4, 0xC2, 1, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmplt_oqps, 3, 0xC2, 17, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmplt_oqps, 4, 0xC2, 17, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmplt_osps, 3, 0xC2, 1, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmplt_osps, 4, 0xC2, 1, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmpneqps, 3, 0xC2, 4, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmpneqps, 4, 0xC2, 4, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmpneq_oqps, 3, 0xC2, 12, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmpneq_oqps, 4, 0xC2, 12, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmpneq_osps, 3, 0xC2, 28, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmpneq_osps, 4, 0xC2, 28, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmpneq_uqps, 3, 0xC2, 4, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmpneq_uqps, 4, 0xC2, 4, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmpneq_usps, 3, 0xC2, 20, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmpneq_usps, 4, 0xC2, 20, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmpngeps, 3, 0xC2, 9, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmpngeps, 4, 0xC2, 9, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmpnge_uqps, 3, 0xC2, 25, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmpnge_uqps, 4, 0xC2, 25, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmpnge_usps, 3, 0xC2, 9, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmpnge_usps, 4, 0xC2, 9, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmpngtps, 3, 0xC2, 10, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmpngtps, 4, 0xC2, 10, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmpngt_uqps, 3, 0xC2, 26, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmpngt_uqps, 4, 0xC2, 26, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmpngt_usps, 3, 0xC2, 10, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmpngt_usps, 4, 0xC2, 10, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmpnleps, 3, 0xC2, 6, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmpnleps, 4, 0xC2, 6, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmpnle_uqps, 3, 0xC2, 22, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmpnle_uqps, 4, 0xC2, 22, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmpnle_usps, 3, 0xC2, 6, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmpnle_usps, 4, 0xC2, 6, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmpnltps, 3, 0xC2, 5, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmpnltps, 4, 0xC2, 5, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmpnlt_uqps, 3, 0xC2, 21, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmpnlt_uqps, 4, 0xC2, 21, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmpnlt_usps, 3, 0xC2, 5, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmpnlt_usps, 4, 0xC2, 5, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmpordps, 3, 0xC2, 7, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmpordps, 4, 0xC2, 7, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmpord_qps, 3, 0xC2, 7, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmpord_qps, 4, 0xC2, 7, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmpord_sps, 3, 0xC2, 23, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmpord_sps, 4, 0xC2, 23, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmptrueps, 3, 0xC2, 15, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmptrueps, 4, 0xC2, 15, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmptrue_uqps, 3, 0xC2, 15, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmptrue_uqps, 4, 0xC2, 15, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmptrue_usps, 3, 0xC2, 31, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmptrue_usps, 4, 0xC2, 31, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmpunordps, 3, 0xC2, 3, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmpunordps, 4, 0xC2, 3, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmpunord_qps, 3, 0xC2, 3, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmpunord_qps, 4, 0xC2, 3, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmpunord_sps, 3, 0xC2, 19, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vcmpunord_sps, 4, 0xC2, 19, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegZMM, RegZMM, RegMask } -vcmpsd, 4, 0xF2C2, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegMask } +vcmp<avx_frel>sd, 3, 0xF2C2, 0x<avx_frel:imm>, 1, CpuAVX512F, Modrm|EVexLIG|Masking=2|VexOpcode=0|VexVVVV|VexW1|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegMask } +vcmp<avx_frel>sd, 4, 0xF2C2, 0x<avx_frel:imm>, 1, CpuAVX512F, Modrm|EVexLIG|Masking=2|VexOpcode=0|VexVVVV|VexW1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } +vcmpsd, 4, 0xF2C2, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV|VexW1|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegMask } vcmpsd, 5, 0xF2C2, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SAE, { Imm8, Imm8, RegXMM, RegXMM, RegMask } -vcmpeqsd, 3, 0xF2C2, 0, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmpeqsd, 4, 0xF2C2, 0, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmpeq_oqsd, 3, 0xF2C2, 0, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmpeq_oqsd, 4, 0xF2C2, 0, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmpeq_ossd, 3, 0xF2C2, 16, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmpeq_ossd, 4, 0xF2C2, 16, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmpeq_uqsd, 3, 0xF2C2, 8, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmpeq_uqsd, 4, 0xF2C2, 8, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmpeq_ussd, 3, 0xF2C2, 24, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmpeq_ussd, 4, 0xF2C2, 24, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmpfalsesd, 3, 0xF2C2, 11, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmpfalsesd, 4, 0xF2C2, 11, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmpfalse_oqsd, 3, 0xF2C2, 11, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmpfalse_oqsd, 4, 0xF2C2, 11, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmpfalse_ossd, 3, 0xF2C2, 27, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmpfalse_ossd, 4, 0xF2C2, 27, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmpgesd, 3, 0xF2C2, 13, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmpgesd, 4, 0xF2C2, 13, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmpge_oqsd, 3, 0xF2C2, 29, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmpge_oqsd, 4, 0xF2C2, 29, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmpge_ossd, 3, 0xF2C2, 13, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmpge_ossd, 4, 0xF2C2, 13, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmpgtsd, 3, 0xF2C2, 14, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmpgtsd, 4, 0xF2C2, 14, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmpgt_oqsd, 3, 0xF2C2, 30, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmpgt_oqsd, 4, 0xF2C2, 30, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmpgt_ossd, 3, 0xF2C2, 14, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmpgt_ossd, 4, 0xF2C2, 14, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmplesd, 3, 0xF2C2, 2, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmplesd, 4, 0xF2C2, 2, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmple_oqsd, 3, 0xF2C2, 18, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmple_oqsd, 4, 0xF2C2, 18, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmple_ossd, 3, 0xF2C2, 2, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmple_ossd, 4, 0xF2C2, 2, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmpltsd, 3, 0xF2C2, 1, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmpltsd, 4, 0xF2C2, 1, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmplt_oqsd, 3, 0xF2C2, 17, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmplt_oqsd, 4, 0xF2C2, 17, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmplt_ossd, 3, 0xF2C2, 1, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmplt_ossd, 4, 0xF2C2, 1, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmpneqsd, 3, 0xF2C2, 4, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmpneqsd, 4, 0xF2C2, 4, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmpneq_oqsd, 3, 0xF2C2, 12, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmpneq_oqsd, 4, 0xF2C2, 12, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmpneq_ossd, 3, 0xF2C2, 28, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmpneq_ossd, 4, 0xF2C2, 28, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmpneq_uqsd, 3, 0xF2C2, 4, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmpneq_uqsd, 4, 0xF2C2, 4, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmpneq_ussd, 3, 0xF2C2, 20, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmpneq_ussd, 4, 0xF2C2, 20, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmpngesd, 3, 0xF2C2, 9, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmpngesd, 4, 0xF2C2, 9, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmpnge_uqsd, 3, 0xF2C2, 25, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmpnge_uqsd, 4, 0xF2C2, 25, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmpnge_ussd, 3, 0xF2C2, 9, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmpnge_ussd, 4, 0xF2C2, 9, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmpngtsd, 3, 0xF2C2, 10, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmpngtsd, 4, 0xF2C2, 10, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmpngt_uqsd, 3, 0xF2C2, 26, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmpngt_uqsd, 4, 0xF2C2, 26, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmpngt_ussd, 3, 0xF2C2, 10, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmpngt_ussd, 4, 0xF2C2, 10, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmpnlesd, 3, 0xF2C2, 6, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmpnlesd, 4, 0xF2C2, 6, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmpnle_uqsd, 3, 0xF2C2, 22, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmpnle_uqsd, 4, 0xF2C2, 22, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmpnle_ussd, 3, 0xF2C2, 6, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmpnle_ussd, 4, 0xF2C2, 6, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmpnltsd, 3, 0xF2C2, 5, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmpnltsd, 4, 0xF2C2, 5, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmpnlt_uqsd, 3, 0xF2C2, 21, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmpnlt_uqsd, 4, 0xF2C2, 21, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmpnlt_ussd, 3, 0xF2C2, 5, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmpnlt_ussd, 4, 0xF2C2, 5, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmpordsd, 3, 0xF2C2, 7, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmpordsd, 4, 0xF2C2, 7, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmpord_qsd, 3, 0xF2C2, 7, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmpord_qsd, 4, 0xF2C2, 7, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmpord_ssd, 3, 0xF2C2, 23, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmpord_ssd, 4, 0xF2C2, 23, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmptruesd, 3, 0xF2C2, 15, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmptruesd, 4, 0xF2C2, 15, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmptrue_uqsd, 3, 0xF2C2, 15, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmptrue_uqsd, 4, 0xF2C2, 15, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmptrue_ussd, 3, 0xF2C2, 31, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmptrue_ussd, 4, 0xF2C2, 31, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmpunordsd, 3, 0xF2C2, 3, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmpunordsd, 4, 0xF2C2, 3, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmpunord_qsd, 3, 0xF2C2, 3, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmpunord_qsd, 4, 0xF2C2, 3, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmpunord_ssd, 3, 0xF2C2, 19, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmpunord_ssd, 4, 0xF2C2, 19, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmpss, 4, 0xF3C2, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegMask } +vcmp<avx_frel>ss, 3, 0xF3C2, 0x<avx_frel:imm>, 1, CpuAVX512F, Modrm|EVexLIG|Masking=2|VexOpcode=0|VexVVVV|VexW0|Disp8MemShift=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegMask } +vcmp<avx_frel>ss, 4, 0xF3C2, 0x<avx_frel:imm>, 1, CpuAVX512F, Modrm|EVexLIG|Masking=2|VexOpcode=0|VexVVVV|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } +vcmpss, 4, 0xF3C2, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV|VexW0|Disp8MemShift=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegMask } vcmpss, 5, 0xF3C2, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SAE, { Imm8, Imm8, RegXMM, RegXMM, RegMask } -vcmpeqss, 3, 0xF3C2, 0, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmpeqss, 4, 0xF3C2, 0, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmpeq_oqss, 3, 0xF3C2, 0, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmpeq_oqss, 4, 0xF3C2, 0, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmpeq_osss, 3, 0xF3C2, 16, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmpeq_osss, 4, 0xF3C2, 16, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmpeq_uqss, 3, 0xF3C2, 8, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmpeq_uqss, 4, 0xF3C2, 8, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmpeq_usss, 3, 0xF3C2, 24, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmpeq_usss, 4, 0xF3C2, 24, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmpfalsess, 3, 0xF3C2, 11, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmpfalsess, 4, 0xF3C2, 11, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmpfalse_oqss, 3, 0xF3C2, 11, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmpfalse_oqss, 4, 0xF3C2, 11, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmpfalse_osss, 3, 0xF3C2, 27, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmpfalse_osss, 4, 0xF3C2, 27, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmpgess, 3, 0xF3C2, 13, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmpgess, 4, 0xF3C2, 13, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmpge_oqss, 3, 0xF3C2, 29, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmpge_oqss, 4, 0xF3C2, 29, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmpge_osss, 3, 0xF3C2, 13, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmpge_osss, 4, 0xF3C2, 13, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmpgtss, 3, 0xF3C2, 14, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmpgtss, 4, 0xF3C2, 14, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmpgt_oqss, 3, 0xF3C2, 30, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmpgt_oqss, 4, 0xF3C2, 30, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmpgt_osss, 3, 0xF3C2, 14, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmpgt_osss, 4, 0xF3C2, 14, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmpless, 3, 0xF3C2, 2, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmpless, 4, 0xF3C2, 2, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmple_oqss, 3, 0xF3C2, 18, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmple_oqss, 4, 0xF3C2, 18, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmple_osss, 3, 0xF3C2, 2, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmple_osss, 4, 0xF3C2, 2, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmpltss, 3, 0xF3C2, 1, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmpltss, 4, 0xF3C2, 1, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmplt_oqss, 3, 0xF3C2, 17, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmplt_oqss, 4, 0xF3C2, 17, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmplt_osss, 3, 0xF3C2, 1, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmplt_osss, 4, 0xF3C2, 1, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmpneqss, 3, 0xF3C2, 4, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmpneqss, 4, 0xF3C2, 4, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmpneq_oqss, 3, 0xF3C2, 12, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmpneq_oqss, 4, 0xF3C2, 12, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmpneq_osss, 3, 0xF3C2, 28, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmpneq_osss, 4, 0xF3C2, 28, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmpneq_uqss, 3, 0xF3C2, 4, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmpneq_uqss, 4, 0xF3C2, 4, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmpneq_usss, 3, 0xF3C2, 20, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmpneq_usss, 4, 0xF3C2, 20, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmpngess, 3, 0xF3C2, 9, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmpngess, 4, 0xF3C2, 9, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmpnge_uqss, 3, 0xF3C2, 25, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmpnge_uqss, 4, 0xF3C2, 25, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmpnge_usss, 3, 0xF3C2, 9, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmpnge_usss, 4, 0xF3C2, 9, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmpngtss, 3, 0xF3C2, 10, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmpngtss, 4, 0xF3C2, 10, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmpngt_uqss, 3, 0xF3C2, 26, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmpngt_uqss, 4, 0xF3C2, 26, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmpngt_usss, 3, 0xF3C2, 10, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmpngt_usss, 4, 0xF3C2, 10, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmpnless, 3, 0xF3C2, 6, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmpnless, 4, 0xF3C2, 6, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmpnle_uqss, 3, 0xF3C2, 22, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmpnle_uqss, 4, 0xF3C2, 22, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmpnle_usss, 3, 0xF3C2, 6, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmpnle_usss, 4, 0xF3C2, 6, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmpnltss, 3, 0xF3C2, 5, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmpnltss, 4, 0xF3C2, 5, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmpnlt_uqss, 3, 0xF3C2, 21, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmpnlt_uqss, 4, 0xF3C2, 21, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmpnlt_usss, 3, 0xF3C2, 5, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmpnlt_usss, 4, 0xF3C2, 5, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmpordss, 3, 0xF3C2, 7, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmpordss, 4, 0xF3C2, 7, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmpord_qss, 3, 0xF3C2, 7, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmpord_qss, 4, 0xF3C2, 7, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmpord_sss, 3, 0xF3C2, 23, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmpord_sss, 4, 0xF3C2, 23, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmptruess, 3, 0xF3C2, 15, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmptruess, 4, 0xF3C2, 15, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmptrue_uqss, 3, 0xF3C2, 15, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmptrue_uqss, 4, 0xF3C2, 15, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmptrue_usss, 3, 0xF3C2, 31, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmptrue_usss, 4, 0xF3C2, 31, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmpunordss, 3, 0xF3C2, 3, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmpunordss, 4, 0xF3C2, 3, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmpunord_qss, 3, 0xF3C2, 3, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmpunord_qss, 4, 0xF3C2, 3, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcmpunord_sss, 3, 0xF3C2, 19, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegMask } -vcmpunord_sss, 4, 0xF3C2, 19, 1, CpuAVX512F, Modrm|EVex=4|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt|SAE, { Imm8, RegXMM, RegXMM, RegMask } -vcomisd, 2, 0x662F, None, 1, CpuAVX512F, Modrm|EVex=4|VexOpcode=0|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM } +vcomisd, 2, 0x662F, None, 1, CpuAVX512F, Modrm|EVex=4|VexOpcode=0|VexW1|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM } vcomisd, 3, 0x662F, None, 1, CpuAVX512F, Modrm|EVex=4|VexOpcode=0|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SAE, { Imm8, RegXMM, RegXMM } -vucomisd, 2, 0x662E, None, 1, CpuAVX512F, Modrm|EVex=4|VexOpcode=0|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM } +vucomisd, 2, 0x662E, None, 1, CpuAVX512F, Modrm|EVex=4|VexOpcode=0|VexW1|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM } vucomisd, 3, 0x662E, None, 1, CpuAVX512F, Modrm|EVex=4|VexOpcode=0|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SAE, { Imm8, RegXMM, RegXMM } -vcomiss, 2, 0x2F, None, 1, CpuAVX512F, Modrm|EVex=4|VexOpcode=0|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM } +vcomiss, 2, 0x2F, None, 1, CpuAVX512F, Modrm|EVex=4|VexOpcode=0|VexW0|Disp8MemShift=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM } vcomiss, 3, 0x2F, None, 1, CpuAVX512F, Modrm|EVex=4|VexOpcode=0|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SAE, { Imm8, RegXMM, RegXMM } -vucomiss, 2, 0x2E, None, 1, CpuAVX512F, Modrm|EVex=4|VexOpcode=0|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM } +vucomiss, 2, 0x2E, None, 1, CpuAVX512F, Modrm|EVex=4|VexOpcode=0|VexW0|Disp8MemShift=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM } vucomiss, 3, 0x2E, None, 1, CpuAVX512F, Modrm|EVex=4|VexOpcode=0|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SAE, { Imm8, RegXMM, RegXMM } vcompresspd, 2, 0x668A, None, 1, CpuAVX512F, Modrm|MaskingMorZ|VexOpcode=1|VexW=2|Disp8MemShift=3|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex } @@ -3421,13 +2739,13 @@ vpcompressq, 2, 0x668B, None, 1, CpuAVX512F, Modrm|MaskingMorZ|VexOpcode=1|VexW=2|Disp8MemShift=3|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex } vpcompressd, 2, 0x668B, None, 1, CpuAVX512F, Modrm|MaskingMorZ|VexOpcode=1|VexW=1|Disp8MemShift=2|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex } -vpscatterdq, 2, 0x66A0, None, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|NoDefMask|VexOpcode=1|VexW=2|Disp8MemShift=3|VecSIB=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegZMM, Dword|Unspecified|BaseIndex } -vpscatterqq, 2, 0x66A1, None, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|NoDefMask|VexOpcode=1|VexW=2|Disp8MemShift=3|VecSIB=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegZMM, Dword|Unspecified|BaseIndex } -vscatterdpd, 2, 0x66A2, None, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|NoDefMask|VexOpcode=1|VexW=2|Disp8MemShift=3|VecSIB=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegZMM, Dword|Unspecified|BaseIndex } -vscatterqpd, 2, 0x66A3, None, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|NoDefMask|VexOpcode=1|VexW=2|Disp8MemShift=3|VecSIB=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegZMM, Dword|Unspecified|BaseIndex } +vpscatterdq, 2, 0x66A0, None, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|NoDefMask|VexOpcode=1|VexW1|Disp8MemShift=3|VecSIB256|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegZMM, Dword|Unspecified|BaseIndex } +vpscatterqq, 2, 0x66A1, None, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|NoDefMask|VexOpcode=1|VexW1|Disp8MemShift=3|VecSIB512|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegZMM, Dword|Unspecified|BaseIndex } +vscatterdpd, 2, 0x66A2, None, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|NoDefMask|VexOpcode=1|VexW1|Disp8MemShift=3|VecSIB256|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegZMM, Dword|Unspecified|BaseIndex } +vscatterqpd, 2, 0x66A3, None, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|NoDefMask|VexOpcode=1|VexW1|Disp8MemShift=3|VecSIB512|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegZMM, Dword|Unspecified|BaseIndex } -vpscatterdd, 2, 0x66A0, None, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|NoDefMask|VexOpcode=1|VexW=1|Disp8MemShift=2|VecSIB=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegZMM, Dword|Unspecified|BaseIndex } -vscatterdps, 2, 0x66A2, None, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|NoDefMask|VexOpcode=1|VexW=1|Disp8MemShift=2|VecSIB=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegZMM, Dword|Unspecified|BaseIndex } +vpscatterdd, 2, 0x66A0, None, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|NoDefMask|VexOpcode=1|VexW0|Disp8MemShift=2|VecSIB512|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegZMM, Dword|Unspecified|BaseIndex } +vscatterdps, 2, 0x66A2, None, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|NoDefMask|VexOpcode=1|VexW0|Disp8MemShift=2|VecSIB512|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegZMM, Dword|Unspecified|BaseIndex } vcvtdq2pd, 2, 0xF3E6, None, 1, CpuAVX512F, Modrm|EVex=1|Masking=3|VexOpcode=0|VexW=1|Broadcast|Disp8MemShift=5|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegYMM|Dword|Unspecified|BaseIndex, RegZMM } vcvtudq2pd, 2, 0xF37A, None, 1, CpuAVX512F, Modrm|EVex=1|Masking=3|VexOpcode=0|VexW=1|Broadcast|Disp8MemShift=5|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegYMM|Dword|Unspecified|BaseIndex, RegZMM } @@ -3465,33 +2783,33 @@ vcvtsd2usi, 2, 0xF279, None, 1, CpuAVX512F, Modrm|EVex=4|VexOpcode=0|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ToDword, { RegXMM|Qword|Unspecified|BaseIndex, Reg32|Reg64 } vcvtsd2usi, 3, 0xF279, None, 1, CpuAVX512F, Modrm|EVex=4|VexOpcode=0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|StaticRounding|SAE, { Imm8, RegXMM, Reg32|Reg64 } -vcvtsd2ss, 3, 0xF25A, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=0|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegXMM } +vcvtsd2ss, 3, 0xF25A, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=0|VexVVVV|VexW1|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegXMM } vcvtsd2ss, 4, 0xF25A, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|StaticRounding|SAE, { Imm8, RegXMM, RegXMM, RegXMM } -vcvtsi2sd, 3, 0xF22A, None, 1, CpuAVX512F|CpuNo64, Modrm|EVex=4|VexOpcode=0|VexVVVV=1|Disp8MemShift=2|No_bSuf|No_wSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg32|Unspecified|BaseIndex, RegXMM, RegXMM } -vcvtsi2sd, 3, 0xF22A, None, 1, CpuAVX512F|Cpu64, Modrm|EVex=4|VexOpcode=0|VexVVVV=1|Disp8ShiftVL|No_bSuf|No_wSuf|No_sSuf|No_ldSuf, { Reg32|Reg64|Unspecified|BaseIndex, RegXMM, RegXMM } -vcvtsi2sd, 4, 0xF22A, None, 1, CpuAVX512F|Cpu64, Modrm|EVex=4|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|StaticRounding|SAE, { Reg64, Imm8, RegXMM, RegXMM } -vcvtsi2sd, 4, 0xF22A, None, 1, CpuAVX512F|Cpu64, Modrm|EVex=4|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|StaticRounding|SAE|IntelSyntax, { Imm8, Reg64, RegXMM, RegXMM } -vcvtusi2sd, 3, 0xF27B, None, 1, CpuAVX512F|CpuNo64, Modrm|EVex=4|VexOpcode=0|VexVVVV=1|Disp8MemShift=2|No_bSuf|No_wSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg32|Unspecified|BaseIndex, RegXMM, RegXMM } -vcvtusi2sd, 3, 0xF27B, None, 1, CpuAVX512F|Cpu64, Modrm|EVex=4|VexOpcode=0|VexVVVV=1|Disp8ShiftVL|No_bSuf|No_wSuf|No_sSuf|No_ldSuf, { Reg32|Reg64|Unspecified|BaseIndex, RegXMM, RegXMM } -vcvtusi2sd, 4, 0xF27B, None, 1, CpuAVX512F|Cpu64, Modrm|EVex=4|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|StaticRounding|SAE, { Reg64, Imm8, RegXMM, RegXMM } -vcvtusi2sd, 4, 0xF27B, None, 1, CpuAVX512F|Cpu64, Modrm|EVex=4|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|StaticRounding|SAE|IntelSyntax, { Imm8, Reg64, RegXMM, RegXMM } - -vcvtsi2ss, 3, 0xF32A, None, 1, CpuAVX512F|CpuNo64, Modrm|EVex=4|VexOpcode=0|VexVVVV=1|Disp8MemShift=2|No_bSuf|No_wSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg32|Unspecified|BaseIndex, RegXMM, RegXMM } -vcvtsi2ss, 3, 0xF32A, None, 1, CpuAVX512F|Cpu64, Modrm|EVex=4|VexOpcode=0|VexVVVV=1|Disp8ShiftVL|No_bSuf|No_wSuf|No_sSuf|No_ldSuf, { Reg32|Reg64|Unspecified|BaseIndex, RegXMM, RegXMM } -vcvtsi2ss, 4, 0xF32A, None, 1, CpuAVX512F, Modrm|EVex=4|VexOpcode=0|VexVVVV=1|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|StaticRounding|SAE, { Reg32|Reg64, Imm8, RegXMM, RegXMM } -vcvtsi2ss, 4, 0xF32A, None, 1, CpuAVX512F, Modrm|EVex=4|VexOpcode=0|VexVVVV=1|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|StaticRounding|SAE|IntelSyntax, { Imm8, Reg32|Reg64, RegXMM, RegXMM } -vcvtusi2ss, 3, 0xF37B, None, 1, CpuAVX512F|CpuNo64, Modrm|EVex=4|VexOpcode=0|VexVVVV=1|Disp8MemShift=2|No_bSuf|No_wSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg32|Unspecified|BaseIndex, RegXMM, RegXMM } -vcvtusi2ss, 3, 0xF37B, None, 1, CpuAVX512F|Cpu64, Modrm|EVex=4|VexOpcode=0|VexVVVV=1|Disp8ShiftVL|No_bSuf|No_wSuf|No_sSuf|No_ldSuf, { Reg32|Reg64|Unspecified|BaseIndex, RegXMM, RegXMM } -vcvtusi2ss, 4, 0xF37B, None, 1, CpuAVX512F, Modrm|EVex=4|VexOpcode=0|VexVVVV=1|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|StaticRounding|SAE, { Reg32|Reg64, Imm8, RegXMM, RegXMM } -vcvtusi2ss, 4, 0xF37B, None, 1, CpuAVX512F, Modrm|EVex=4|VexOpcode=0|VexVVVV=1|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|StaticRounding|SAE|IntelSyntax, { Imm8, Reg32|Reg64, RegXMM, RegXMM } +vcvtsi2sd, 3, 0xF22A, None, 1, CpuAVX512F, Modrm|EVexLIG|VexOpcode=0|VexVVVV|Disp8ShiftVL|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|ATTSyntax, { Reg32|Reg64|Unspecified|BaseIndex, RegXMM, RegXMM } +vcvtsi2sd, 3, 0xF22A, None, 1, CpuAVX512F, Modrm|EVexLIG|VexOpcode=0|VexVVVV|Disp8ShiftVL|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|IntelSyntax, { Reg32|Reg64|Unspecified|BaseIndex, RegXMM, RegXMM } +vcvtsi2sd, 4, 0xF22A, None, 1, CpuAVX512F, Modrm|EVexLIG|VexOpcode=0|VexVVVV|VexW1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|StaticRounding|SAE, { Reg64, Imm8, RegXMM, RegXMM } +vcvtsi2sd, 4, 0xF22A, None, 1, CpuAVX512F, Modrm|EVexLIG|VexOpcode=0|VexVVVV|VexW1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|StaticRounding|SAE|IntelSyntax, { Imm8, Reg64, RegXMM, RegXMM } +vcvtusi2sd, 3, 0xF27B, None, 1, CpuAVX512F, Modrm|EVexLIG|VexOpcode=0|VexVVVV|Disp8ShiftVL|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|ATTSyntax, { Reg32|Reg64|Unspecified|BaseIndex, RegXMM, RegXMM } +vcvtusi2sd, 3, 0xF27B, None, 1, CpuAVX512F, Modrm|EVexLIG|VexOpcode=0|VexVVVV|Disp8ShiftVL|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|IntelSyntax, { Reg32|Reg64|Unspecified|BaseIndex, RegXMM, RegXMM } +vcvtusi2sd, 4, 0xF27B, None, 1, CpuAVX512F, Modrm|EVexLIG|VexOpcode=0|VexVVVV|VexW1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|StaticRounding|SAE, { Reg64, Imm8, RegXMM, RegXMM } +vcvtusi2sd, 4, 0xF27B, None, 1, CpuAVX512F, Modrm|EVexLIG|VexOpcode=0|VexVVVV|VexW1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|StaticRounding|SAE|IntelSyntax, { Imm8, Reg64, RegXMM, RegXMM } + +vcvtsi2ss, 3, 0xF32A, None, 1, CpuAVX512F, Modrm|EVexLIG|VexOpcode=0|VexVVVV|Disp8ShiftVL|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|ATTSyntax, { Reg32|Reg64|Unspecified|BaseIndex, RegXMM, RegXMM } +vcvtsi2ss, 3, 0xF32A, None, 1, CpuAVX512F, Modrm|EVexLIG|VexOpcode=0|VexVVVV|Disp8ShiftVL|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|IntelSyntax, { Reg32|Reg64|Unspecified|BaseIndex, RegXMM, RegXMM } +vcvtsi2ss, 4, 0xF32A, None, 1, CpuAVX512F, Modrm|EVexLIG|VexOpcode=0|VexVVVV|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|StaticRounding|SAE, { Reg32|Reg64, Imm8, RegXMM, RegXMM } +vcvtsi2ss, 4, 0xF32A, None, 1, CpuAVX512F, Modrm|EVexLIG|VexOpcode=0|VexVVVV|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|StaticRounding|SAE|IntelSyntax, { Imm8, Reg32|Reg64, RegXMM, RegXMM } +vcvtusi2ss, 3, 0xF37B, None, 1, CpuAVX512F, Modrm|EVexLIG|VexOpcode=0|VexVVVV|Disp8ShiftVL|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|ATTSyntax, { Reg32|Reg64|Unspecified|BaseIndex, RegXMM, RegXMM } +vcvtusi2ss, 3, 0xF37B, None, 1, CpuAVX512F, Modrm|EVexLIG|VexOpcode=0|VexVVVV|Disp8ShiftVL|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|IntelSyntax, { Reg32|Reg64|Unspecified|BaseIndex, RegXMM, RegXMM } +vcvtusi2ss, 4, 0xF37B, None, 1, CpuAVX512F, Modrm|EVexLIG|VexOpcode=0|VexVVVV|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|StaticRounding|SAE, { Reg32|Reg64, Imm8, RegXMM, RegXMM } +vcvtusi2ss, 4, 0xF37B, None, 1, CpuAVX512F, Modrm|EVexLIG|VexOpcode=0|VexVVVV|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|StaticRounding|SAE|IntelSyntax, { Imm8, Reg32|Reg64, RegXMM, RegXMM } -vcvtss2sd, 3, 0xF35A, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=0|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegXMM } +vcvtss2sd, 3, 0xF35A, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=0|VexVVVV|VexW0|Disp8MemShift=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegXMM } vcvtss2sd, 4, 0xF35A, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SAE, { Imm8, RegXMM, RegXMM, RegXMM } -vcvtss2si, 2, 0xF32D, None, 1, CpuAVX512F, Modrm|EVex=4|VexOpcode=0|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|ToQword, { RegXMM|Dword|Unspecified|BaseIndex, Reg32|Reg64 } +vcvtss2si, 2, 0xF32D, None, 1, CpuAVX512F, Modrm|EVex=4|VexOpcode=0|Disp8MemShift=2|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|ToQword, { RegXMM|Dword|Unspecified|BaseIndex, Reg32|Reg64 } vcvtss2si, 3, 0xF32D, None, 1, CpuAVX512F, Modrm|EVex=4|VexOpcode=0|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|StaticRounding|SAE, { Imm8, RegXMM, Reg32|Reg64 } -vcvtss2usi, 2, 0xF379, None, 1, CpuAVX512F, Modrm|EVex=4|VexOpcode=0|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ToQword, { RegXMM|Dword|Unspecified|BaseIndex, Reg32|Reg64 } +vcvtss2usi, 2, 0xF379, None, 1, CpuAVX512F, Modrm|EVex=4|VexOpcode=0|Disp8MemShift=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ToQword, { RegXMM|Dword|Unspecified|BaseIndex, Reg32|Reg64 } vcvtss2usi, 3, 0xF379, None, 1, CpuAVX512F, Modrm|EVex=4|VexOpcode=0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|StaticRounding|SAE, { Imm8, RegXMM, Reg32|Reg64 } vcvttpd2dq, 2, 0x66E6, None, 1, CpuAVX512F, Modrm|EVex=1|Masking=3|VexOpcode=0|VexW=2|Broadcast|Disp8MemShift=6|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegZMM|Qword|ZMMword|Unspecified|BaseIndex, RegYMM } @@ -3509,9 +2827,9 @@ vcvttsd2usi, 2, 0xF278, None, 1, CpuAVX512F, Modrm|EVex=4|VexOpcode=0|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ToDword, { RegXMM|Qword|Unspecified|BaseIndex, Reg32|Reg64 } vcvttsd2usi, 3, 0xF278, None, 1, CpuAVX512F, Modrm|EVex=4|VexOpcode=0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SAE, { Imm8, RegXMM, Reg32|Reg64 } -vcvttss2si, 2, 0xF32C, None, 1, CpuAVX512F, Modrm|EVex=4|VexOpcode=0|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|ToQword, { RegXMM|Dword|Unspecified|BaseIndex, Reg32|Reg64 } +vcvttss2si, 2, 0xF32C, None, 1, CpuAVX512F, Modrm|EVex=4|VexOpcode=0|Disp8MemShift=2|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|ToQword, { RegXMM|Dword|Unspecified|BaseIndex, Reg32|Reg64 } vcvttss2si, 3, 0xF32C, None, 1, CpuAVX512F, Modrm|EVex=4|VexOpcode=0|No_bSuf|No_wSuf|No_sSuf|No_ldSuf|SAE, { Imm8, RegXMM, Reg32|Reg64 } -vcvttss2usi, 2, 0xF378, None, 1, CpuAVX512F, Modrm|EVex=4|VexOpcode=0|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ToQword, { RegXMM|Dword|Unspecified|BaseIndex, Reg32|Reg64 } +vcvttss2usi, 2, 0xF378, None, 1, CpuAVX512F, Modrm|EVex=4|VexOpcode=0|Disp8MemShift=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ToQword, { RegXMM|Dword|Unspecified|BaseIndex, Reg32|Reg64 } vcvttss2usi, 3, 0xF378, None, 1, CpuAVX512F, Modrm|EVex=4|VexOpcode=0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SAE, { Imm8, RegXMM, Reg32|Reg64 } vcvtudq2ps, 2, 0xF27A, None, 1, CpuAVX512F, Modrm|Masking=3|VexOpcode=0|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM } @@ -3538,18 +2856,18 @@ vfixupimmps, 4, 0x6654, None, 1, CpuAVX512F, Modrm|Masking=3|VexOpcode=2|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } vfixupimmps, 5, 0x6654, None, 1, CpuAVX512F, Modrm|EVex=1|Masking=3|VexOpcode=2|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SAE, { Imm8, Imm8, RegZMM, RegZMM, RegZMM } -vfixupimmsd, 4, 0x6655, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=2|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegXMM } +vfixupimmsd, 4, 0x6655, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=2|VexVVVV|VexW1|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegXMM } vfixupimmsd, 5, 0x6655, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=2|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SAE, { Imm8, Imm8, RegXMM, RegXMM, RegXMM } -vgetmantsd, 4, 0x6627, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=2|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegXMM } +vgetmantsd, 4, 0x6627, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=2|VexVVVV|VexW1|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegXMM } vgetmantsd, 5, 0x6627, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=2|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SAE, { Imm8, Imm8, RegXMM, RegXMM, RegXMM } -vrndscalesd, 4, 0x660B, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=2|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegXMM } +vrndscalesd, 4, 0x660B, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=2|VexVVVV|VexW1|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegXMM } vrndscalesd, 5, 0x660B, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=2|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SAE, { Imm8, Imm8, RegXMM, RegXMM, RegXMM } -vfixupimmss, 4, 0x6655, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=2|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegXMM } +vfixupimmss, 4, 0x6655, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=2|VexVVVV|VexW0|Disp8MemShift=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegXMM } vfixupimmss, 5, 0x6655, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=2|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SAE, { Imm8, Imm8, RegXMM, RegXMM, RegXMM } -vgetmantss, 4, 0x6627, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=2|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegXMM } +vgetmantss, 4, 0x6627, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=2|VexVVVV|VexW0|Disp8MemShift=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegXMM } vgetmantss, 5, 0x6627, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=2|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SAE, { Imm8, Imm8, RegXMM, RegXMM, RegXMM } -vrndscaless, 4, 0x660A, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=2|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegXMM } +vrndscaless, 4, 0x660A, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=2|VexVVVV|VexW0|Disp8MemShift=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegXMM } vrndscaless, 5, 0x660A, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=2|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SAE, { Imm8, Imm8, RegXMM, RegXMM, RegXMM } vfmadd132pd, 3, 0x6698, None, 1, CpuAVX512F, Modrm|Masking=3|VexOpcode=1|VexVVVV=1|VexW=2|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } @@ -3630,71 +2948,71 @@ vscalefps, 3, 0x662C, None, 1, CpuAVX512F, Modrm|Masking=3|VexOpcode=1|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } vscalefps, 4, 0x662C, None, 1, CpuAVX512F, Modrm|EVex=1|Masking=3|VexOpcode=1|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|StaticRounding|SAE, { Imm8, RegZMM, RegZMM, RegZMM } -vfmadd132sd, 3, 0x6699, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegXMM } +vfmadd132sd, 3, 0x6699, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV|VexW1|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegXMM } vfmadd132sd, 4, 0x6699, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|StaticRounding|SAE, { Imm8, RegXMM, RegXMM, RegXMM } -vfmadd213sd, 3, 0x66A9, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegXMM } +vfmadd213sd, 3, 0x66A9, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV|VexW1|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegXMM } vfmadd213sd, 4, 0x66A9, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|StaticRounding|SAE, { Imm8, RegXMM, RegXMM, RegXMM } -vfmadd231sd, 3, 0x66B9, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegXMM } +vfmadd231sd, 3, 0x66B9, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV|VexW1|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegXMM } vfmadd231sd, 4, 0x66B9, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|StaticRounding|SAE, { Imm8, RegXMM, RegXMM, RegXMM } -vfmsub132sd, 3, 0x669B, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegXMM } +vfmsub132sd, 3, 0x669B, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV|VexW1|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegXMM } vfmsub132sd, 4, 0x669B, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|StaticRounding|SAE, { Imm8, RegXMM, RegXMM, RegXMM } -vfmsub213sd, 3, 0x66AB, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegXMM } +vfmsub213sd, 3, 0x66AB, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV|VexW1|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegXMM } vfmsub213sd, 4, 0x66AB, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|StaticRounding|SAE, { Imm8, RegXMM, RegXMM, RegXMM } -vfmsub231sd, 3, 0x66BB, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegXMM } +vfmsub231sd, 3, 0x66BB, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV|VexW1|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegXMM } vfmsub231sd, 4, 0x66BB, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|StaticRounding|SAE, { Imm8, RegXMM, RegXMM, RegXMM } -vfnmadd132sd, 3, 0x669D, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegXMM } +vfnmadd132sd, 3, 0x669D, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV|VexW1|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegXMM } vfnmadd132sd, 4, 0x669D, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|StaticRounding|SAE, { Imm8, RegXMM, RegXMM, RegXMM } -vfnmadd213sd, 3, 0x66AD, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegXMM } +vfnmadd213sd, 3, 0x66AD, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV|VexW1|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegXMM } vfnmadd213sd, 4, 0x66AD, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|StaticRounding|SAE, { Imm8, RegXMM, RegXMM, RegXMM } -vfnmadd231sd, 3, 0x66BD, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegXMM } +vfnmadd231sd, 3, 0x66BD, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV|VexW1|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegXMM } vfnmadd231sd, 4, 0x66BD, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|StaticRounding|SAE, { Imm8, RegXMM, RegXMM, RegXMM } -vfnmsub132sd, 3, 0x669F, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegXMM } +vfnmsub132sd, 3, 0x669F, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV|VexW1|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegXMM } vfnmsub132sd, 4, 0x669F, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|StaticRounding|SAE, { Imm8, RegXMM, RegXMM, RegXMM } -vfnmsub213sd, 3, 0x66AF, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegXMM } +vfnmsub213sd, 3, 0x66AF, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV|VexW1|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegXMM } vfnmsub213sd, 4, 0x66AF, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|StaticRounding|SAE, { Imm8, RegXMM, RegXMM, RegXMM } -vfnmsub231sd, 3, 0x66BF, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegXMM } +vfnmsub231sd, 3, 0x66BF, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV|VexW1|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegXMM } vfnmsub231sd, 4, 0x66BF, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|StaticRounding|SAE, { Imm8, RegXMM, RegXMM, RegXMM } -vscalefsd, 3, 0x662D, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegXMM } +vscalefsd, 3, 0x662D, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV|VexW1|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegXMM } vscalefsd, 4, 0x662D, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|StaticRounding|SAE, { Imm8, RegXMM, RegXMM, RegXMM } -vfmadd132ss, 3, 0x6699, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegXMM } +vfmadd132ss, 3, 0x6699, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV|VexW0|Disp8MemShift=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegXMM } vfmadd132ss, 4, 0x6699, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|StaticRounding|SAE, { Imm8, RegXMM, RegXMM, RegXMM } -vfmadd213ss, 3, 0x66A9, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegXMM } +vfmadd213ss, 3, 0x66A9, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV|VexW0|Disp8MemShift=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegXMM } vfmadd213ss, 4, 0x66A9, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|StaticRounding|SAE, { Imm8, RegXMM, RegXMM, RegXMM } -vfmadd231ss, 3, 0x66B9, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegXMM } +vfmadd231ss, 3, 0x66B9, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV|VexW0|Disp8MemShift=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegXMM } vfmadd231ss, 4, 0x66B9, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|StaticRounding|SAE, { Imm8, RegXMM, RegXMM, RegXMM } -vfmsub132ss, 3, 0x669B, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegXMM } +vfmsub132ss, 3, 0x669B, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV|VexW0|Disp8MemShift=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegXMM } vfmsub132ss, 4, 0x669B, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|StaticRounding|SAE, { Imm8, RegXMM, RegXMM, RegXMM } -vfmsub213ss, 3, 0x66AB, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegXMM } +vfmsub213ss, 3, 0x66AB, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV|VexW0|Disp8MemShift=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegXMM } vfmsub213ss, 4, 0x66AB, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|StaticRounding|SAE, { Imm8, RegXMM, RegXMM, RegXMM } -vfmsub231ss, 3, 0x66BB, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegXMM } +vfmsub231ss, 3, 0x66BB, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV|VexW0|Disp8MemShift=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegXMM } vfmsub231ss, 4, 0x66BB, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|StaticRounding|SAE, { Imm8, RegXMM, RegXMM, RegXMM } -vfnmadd132ss, 3, 0x669D, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegXMM } +vfnmadd132ss, 3, 0x669D, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV|VexW0|Disp8MemShift=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegXMM } vfnmadd132ss, 4, 0x669D, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|StaticRounding|SAE, { Imm8, RegXMM, RegXMM, RegXMM } -vfnmadd213ss, 3, 0x66AD, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegXMM } +vfnmadd213ss, 3, 0x66AD, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV|VexW0|Disp8MemShift=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegXMM } vfnmadd213ss, 4, 0x66AD, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|StaticRounding|SAE, { Imm8, RegXMM, RegXMM, RegXMM } -vfnmadd231ss, 3, 0x66BD, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegXMM } +vfnmadd231ss, 3, 0x66BD, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV|VexW0|Disp8MemShift=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegXMM } vfnmadd231ss, 4, 0x66BD, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|StaticRounding|SAE, { Imm8, RegXMM, RegXMM, RegXMM } -vfnmsub132ss, 3, 0x669F, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegXMM } +vfnmsub132ss, 3, 0x669F, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV|VexW0|Disp8MemShift=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegXMM } vfnmsub132ss, 4, 0x669F, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|StaticRounding|SAE, { Imm8, RegXMM, RegXMM, RegXMM } -vfnmsub213ss, 3, 0x66AF, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegXMM } +vfnmsub213ss, 3, 0x66AF, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV|VexW0|Disp8MemShift=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegXMM } vfnmsub213ss, 4, 0x66AF, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|StaticRounding|SAE, { Imm8, RegXMM, RegXMM, RegXMM } -vfnmsub231ss, 3, 0x66BF, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegXMM } +vfnmsub231ss, 3, 0x66BF, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV|VexW0|Disp8MemShift=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegXMM } vfnmsub231ss, 4, 0x66BF, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|StaticRounding|SAE, { Imm8, RegXMM, RegXMM, RegXMM } -vscalefss, 3, 0x662D, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegXMM } +vscalefss, 3, 0x662D, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV|VexW0|Disp8MemShift=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegXMM } vscalefss, 4, 0x662D, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|StaticRounding|SAE, { Imm8, RegXMM, RegXMM, RegXMM } -vgatherdpd, 2, 0x6692, None, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|NoDefMask|VexOpcode=1|VexW=2|Disp8MemShift=3|VecSIB=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex, RegZMM } -vgatherqpd, 2, 0x6693, None, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|NoDefMask|VexOpcode=1|VexW=2|Disp8MemShift=3|VecSIB=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex, RegZMM } -vpgatherdq, 2, 0x6690, None, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|NoDefMask|VexOpcode=1|VexW=2|Disp8MemShift=3|VecSIB=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex, RegZMM } -vpgatherqq, 2, 0x6691, None, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|NoDefMask|VexOpcode=1|VexW=2|Disp8MemShift=3|VecSIB=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex, RegZMM } +vgatherdpd, 2, 0x6692, None, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|NoDefMask|VexOpcode=1|VexW1|Disp8MemShift=3|VecSIB256|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex, RegZMM } +vgatherqpd, 2, 0x6693, None, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|NoDefMask|VexOpcode=1|VexW1|Disp8MemShift=3|VecSIB512|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex, RegZMM } +vpgatherdq, 2, 0x6690, None, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|NoDefMask|VexOpcode=1|VexW1|Disp8MemShift=3|VecSIB256|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex, RegZMM } +vpgatherqq, 2, 0x6691, None, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|NoDefMask|VexOpcode=1|VexW1|Disp8MemShift=3|VecSIB512|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex, RegZMM } -vgatherdps, 2, 0x6692, None, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|NoDefMask|VexOpcode=1|VexW=1|Disp8MemShift=2|VecSIB=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex, RegZMM } +vgatherdps, 2, 0x6692, None, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|NoDefMask|VexOpcode=1|VexW0|Disp8MemShift=2|VecSIB512|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex, RegZMM } vmovntdqa, 2, 0x662A, None, 1, CpuAVX512F, Modrm|VexOpcode=1|VexW=1|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { XMMword|YMMword|ZMMword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM } -vpgatherdd, 2, 0x6690, None, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|NoDefMask|VexOpcode=1|VexW=1|Disp8MemShift=2|VecSIB=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex, RegZMM } +vpgatherdd, 2, 0x6690, None, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|NoDefMask|VexOpcode=1|VexW0|Disp8MemShift=2|VecSIB512|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex, RegZMM } -vgatherqps, 2, 0x6693, None, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|NoDefMask|VexOpcode=1|VexW=1|Disp8MemShift=2|VecSIB=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex, RegYMM } -vpgatherqd, 2, 0x6691, None, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|NoDefMask|VexOpcode=1|VexW=1|Disp8MemShift=2|VecSIB=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex, RegYMM } +vgatherqps, 2, 0x6693, None, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|NoDefMask|VexOpcode=1|VexW0|Disp8MemShift=2|VecSIB512|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex, RegYMM } +vpgatherqd, 2, 0x6691, None, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|NoDefMask|VexOpcode=1|VexW0|Disp8MemShift=2|VecSIB512|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex, RegYMM } vgetexppd, 2, 0x6642, None, 1, CpuAVX512F, Modrm|Masking=3|VexOpcode=1|VexW=2|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM } vgetexppd, 3, 0x6642, None, 1, CpuAVX512F, Modrm|EVex=1|Masking=3|VexOpcode=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SAE, { Imm8, RegZMM, RegZMM } @@ -3702,10 +3020,10 @@ vgetexpps, 2, 0x6642, None, 1, CpuAVX512F, Modrm|Masking=3|VexOpcode=1|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM } vgetexpps, 3, 0x6642, None, 1, CpuAVX512F, Modrm|EVex=1|Masking=3|VexOpcode=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SAE, { Imm8, RegZMM, RegZMM } -vgetexpsd, 3, 0x6643, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegXMM } +vgetexpsd, 3, 0x6643, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV|VexW1|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegXMM } vgetexpsd, 4, 0x6643, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SAE, { Imm8, RegXMM, RegXMM, RegXMM } -vgetexpss, 3, 0x6643, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegXMM } +vgetexpss, 3, 0x6643, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV|VexW0|Disp8MemShift=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegXMM } vgetexpss, 4, 0x6643, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SAE, { Imm8, RegXMM, RegXMM, RegXMM } vgetmantpd, 3, 0x6626, None, 1, CpuAVX512F, Modrm|Masking=3|VexOpcode=2|VexW=2|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM } @@ -3724,7 +3042,7 @@ vinsertf64x4, 4, 0x661A, None, 1, CpuAVX512F, Modrm|EVex=1|Masking=3|VexOpcode=2|VexVVVV=1|VexW=2|Disp8MemShift=5|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegYMM|Unspecified|BaseIndex, RegZMM, RegZMM } vinserti64x4, 4, 0x663A, None, 1, CpuAVX512F, Modrm|EVex=1|Masking=3|VexOpcode=2|VexVVVV=1|VexW=2|Disp8MemShift=5|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegYMM|Unspecified|BaseIndex, RegZMM, RegZMM } -vinsertps, 4, 0x6621, None, 1, CpuAVX512F, Modrm|EVex128|VexOpcode=2|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegXMM } +vinsertps, 4, 0x6621, None, 1, CpuAVX512F, Modrm|EVex128|VexOpcode=2|VexVVVV|VexW0|Disp8MemShift=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegXMM } vmaxpd, 3, 0x665F, None, 1, CpuAVX512F, Modrm|Masking=3|VexOpcode=0|VexVVVV=1|VexW=2|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } vmaxpd, 4, 0x665F, None, 1, CpuAVX512F, Modrm|EVex=1|Masking=3|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SAE, { Imm8, RegZMM, RegZMM, RegZMM } @@ -3736,14 +3054,14 @@ vminps, 3, 0x5D, None, 1, CpuAVX512F, Modrm|Masking=3|VexOpcode=0|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } vminps, 4, 0x5D, None, 1, CpuAVX512F, Modrm|EVex=1|Masking=3|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SAE, { Imm8, RegZMM, RegZMM, RegZMM } -vmaxsd, 3, 0xF25F, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=0|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegXMM } +vmaxsd, 3, 0xF25F, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=0|VexVVVV|VexW1|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegXMM } vmaxsd, 4, 0xF25F, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SAE, { Imm8, RegXMM, RegXMM, RegXMM } -vminsd, 3, 0xF25D, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=0|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegXMM } +vminsd, 3, 0xF25D, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=0|VexVVVV|VexW1|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegXMM } vminsd, 4, 0xF25D, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SAE, { Imm8, RegXMM, RegXMM, RegXMM } -vmaxss, 3, 0xF35F, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=0|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegXMM } +vmaxss, 3, 0xF35F, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=0|VexVVVV|VexW0|Disp8MemShift=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegXMM } vmaxss, 4, 0xF35F, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SAE, { Imm8, RegXMM, RegXMM, RegXMM } -vminss, 3, 0xF35D, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=0|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegXMM } +vminss, 3, 0xF35D, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=0|VexVVVV|VexW0|Disp8MemShift=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegXMM } vminss, 4, 0xF35D, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SAE, { Imm8, RegXMM, RegXMM, RegXMM } vmovapd, 2, 0x6628, None, 1, CpuAVX512F, D|Modrm|MaskingMorZ|VexOpcode=0|VexW=2|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM } @@ -3778,8 +3096,8 @@ vmovlps, 2, 0x13, None, 1, CpuAVX512F, Modrm|EVex=4|VexOpcode=0|VexW=1|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, Qword|Unspecified|BaseIndex } vmovq, 2, 0x666E, None, 1, CpuAVX512F|Cpu64, D|Modrm|EVex=2|VexOpcode=0|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg64|Unspecified|BaseIndex, RegXMM } -vmovq, 2, 0xF37E, None, 1, CpuAVX512F, Load|Modrm|EVex=2|VexOpcode=0|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } -vmovq, 2, 0x66D6, None, 1, CpuAVX512F, Modrm|EVex=2|VexOpcode=0|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, Qword|Unspecified|BaseIndex|RegXMM } +vmovq, 2, 0xF37E, None, 1, CpuAVX512F, Load|Modrm|EVex=2|VexOpcode=0|VexW1|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex|RegXMM, RegXMM } +vmovq, 2, 0x66D6, None, 1, CpuAVX512F, Modrm|EVex=2|VexOpcode=0|VexW1|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, Qword|Unspecified|BaseIndex|RegXMM } vmovsd, 2, 0xF210, None, 1, CpuAVX512F, D|Modrm|EVex=4|MaskingMorZ|VexOpcode=0|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex, RegXMM } vmovsd, 3, 0xF210, None, 1, CpuAVX512F, D|Modrm|EVex=4|Masking=3|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, RegXMM, RegXMM } @@ -3819,42 +3137,24 @@ vunpckhpd, 3, 0x6615, None, 1, CpuAVX512F, Modrm|Masking=3|VexOpcode=0|VexVVVV=1|VexW=2|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } vunpcklpd, 3, 0x6614, None, 1, CpuAVX512F, Modrm|Masking=3|VexOpcode=0|VexVVVV=1|VexW=2|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vpbroadcastq, 2, 0x6659, None, 1, CpuAVX512F, Modrm|Masking=3|VexOpcode=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM } +vpbroadcastq, 2, 0x6659, None, 1, CpuAVX512F, Modrm|Masking=3|VexOpcode=1|VexW1|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM } vpbroadcastq, 2, 0x667C, None, 1, CpuAVX512F|Cpu64, Modrm|Masking=3|VexOpcode=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg64, RegXMM|RegYMM|RegZMM } +<avx_irel:imm, eq:0, lt:1, le:2, neq:4, nlt:5, nle:6> + vpcmpeqd, 3, 0x6676, None, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } vpcmpgtd, 3, 0x6666, None, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=0|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } vpcmpd, 4, 0x661F, None, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=2|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vpcmpeqd, 3, 0x661F, 0, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=2|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vpcmpled, 3, 0x661F, 2, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=2|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vpcmpltd, 3, 0x661F, 1, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=2|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vpcmpneqd, 3, 0x661F, 4, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=2|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vpcmpnled, 3, 0x661F, 6, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=2|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vpcmpnltd, 3, 0x661F, 5, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=2|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } +vpcmp<avx_irel>d, 3, 0x661F, <avx_irel:imm>, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=2|VexVVVV|VexW0|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } vpcmpud, 4, 0x661E, None, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=2|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vpcmpequd, 3, 0x661E, 0, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=2|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vpcmpleud, 3, 0x661E, 2, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=2|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vpcmpltud, 3, 0x661E, 1, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=2|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vpcmpnequd, 3, 0x661E, 4, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=2|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vpcmpnleud, 3, 0x661E, 6, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=2|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vpcmpnltud, 3, 0x661E, 5, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=2|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } +vpcmp<avx_irel>ud, 3, 0x661E, <avx_irel:imm>, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=2|VexVVVV|VexW0|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } vpcmpeqq, 3, 0x6629, None, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=1|VexVVVV=1|VexW=2|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } vpcmpgtq, 3, 0x6637, None, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=1|VexVVVV=1|VexW=2|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } vpcmpq, 4, 0x661F, None, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=2|VexVVVV=1|VexW=2|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vpcmpeqq, 3, 0x661F, 0, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=2|VexVVVV=1|VexW=2|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vpcmpleq, 3, 0x661F, 2, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=2|VexVVVV=1|VexW=2|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vpcmpltq, 3, 0x661F, 1, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=2|VexVVVV=1|VexW=2|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vpcmpneqq, 3, 0x661F, 4, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=2|VexVVVV=1|VexW=2|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vpcmpnleq, 3, 0x661F, 6, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=2|VexVVVV=1|VexW=2|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vpcmpnltq, 3, 0x661F, 5, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=2|VexVVVV=1|VexW=2|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } +vpcmp<avx_irel>q, 3, 0x661F, <avx_irel:imm>, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=2|VexVVVV|VexW1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } vpcmpuq, 4, 0x661E, None, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=2|VexVVVV=1|VexW=2|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vpcmpequq, 3, 0x661E, 0, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=2|VexVVVV=1|VexW=2|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vpcmpleuq, 3, 0x661E, 2, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=2|VexVVVV=1|VexW=2|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vpcmpltuq, 3, 0x661E, 1, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=2|VexVVVV=1|VexW=2|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vpcmpnequq, 3, 0x661E, 4, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=2|VexVVVV=1|VexW=2|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vpcmpnleuq, 3, 0x661E, 6, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=2|VexVVVV=1|VexW=2|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vpcmpnltuq, 3, 0x661E, 5, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=2|VexVVVV=1|VexW=2|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } +vpcmp<avx_irel>uq, 3, 0x661E, <avx_irel:imm>, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=2|VexVVVV|VexW1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } vptestmd, 3, 0x6627, None, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=1|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } vptestnmd, 3, 0xF327, None, 1, CpuAVX512F, Modrm|Masking=2|VexOpcode=1|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } @@ -3884,9 +3184,9 @@ vpmovsdw, 2, 0xF323, None, 1, CpuAVX512F, Modrm|EVex=1|MaskingMorZ|VexOpcode=1|VexW=1|Disp8MemShift=5|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegZMM, RegYMM|Unspecified|BaseIndex } vpmovusdw, 2, 0xF313, None, 1, CpuAVX512F, Modrm|EVex=1|MaskingMorZ|VexOpcode=1|VexW=1|Disp8MemShift=5|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegZMM, RegYMM|Unspecified|BaseIndex } -vpmovqb, 2, 0xF332, None, 1, CpuAVX512F, Modrm|EVex=1|MaskingMorZ|VexOpcode=1|VexW=1|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegZMM, RegXMM|Qword|Unspecified|BaseIndex } -vpmovsqb, 2, 0xF322, None, 1, CpuAVX512F, Modrm|EVex=1|MaskingMorZ|VexOpcode=1|VexW=1|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegZMM, RegXMM|Qword|Unspecified|BaseIndex } -vpmovusqb, 2, 0xF312, None, 1, CpuAVX512F, Modrm|EVex=1|MaskingMorZ|VexOpcode=1|VexW=1|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegZMM, RegXMM|Qword|Unspecified|BaseIndex } +vpmovqb, 2, 0xF332, None, 1, CpuAVX512F, Modrm|EVex=1|MaskingMorZ|VexOpcode=1|VexW0|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegZMM, RegXMM|Qword|Unspecified|BaseIndex } +vpmovsqb, 2, 0xF322, None, 1, CpuAVX512F, Modrm|EVex=1|MaskingMorZ|VexOpcode=1|VexW0|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegZMM, RegXMM|Qword|Unspecified|BaseIndex } +vpmovusqb, 2, 0xF312, None, 1, CpuAVX512F, Modrm|EVex=1|MaskingMorZ|VexOpcode=1|VexW0|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegZMM, RegXMM|Qword|Unspecified|BaseIndex } vpmovqd, 2, 0xF335, None, 1, CpuAVX512F, Modrm|EVex=1|MaskingMorZ|VexOpcode=1|VexW=1|Disp8MemShift=5|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegZMM, RegYMM|Unspecified|BaseIndex } vpmovsqd, 2, 0xF325, None, 1, CpuAVX512F, Modrm|EVex=1|MaskingMorZ|VexOpcode=1|VexW=1|Disp8MemShift=5|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegZMM, RegYMM|Unspecified|BaseIndex } @@ -3899,8 +3199,8 @@ vpmovsxbd, 2, 0x6621, None, 1, CpuAVX512F, Modrm|EVex=1|Masking=3|VexOpcode=1|VexWIG|Disp8MemShift=4|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegZMM } vpmovzxbd, 2, 0x6631, None, 1, CpuAVX512F, Modrm|EVex=1|Masking=3|VexOpcode=1|VexWIG|Disp8MemShift=4|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegZMM } -vpmovsxbq, 2, 0x6622, None, 1, CpuAVX512F, Modrm|EVex=1|Masking=3|VexOpcode=1|VexWIG|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegZMM } -vpmovzxbq, 2, 0x6632, None, 1, CpuAVX512F, Modrm|EVex=1|Masking=3|VexOpcode=1|VexWIG|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegZMM } +vpmovsxbq, 2, 0x6622, None, 1, CpuAVX512F, Modrm|EVex=1|Masking=3|VexOpcode=1|VexWIG|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegZMM } +vpmovzxbq, 2, 0x6632, None, 1, CpuAVX512F, Modrm|EVex=1|Masking=3|VexOpcode=1|VexWIG|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegZMM } vpmovsxdq, 2, 0x6625, None, 1, CpuAVX512F, Modrm|EVex=1|Masking=3|VexOpcode=1|VexW=1|Disp8MemShift=5|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegYMM|Unspecified|BaseIndex, RegZMM } vpmovzxdq, 2, 0x6635, None, 1, CpuAVX512F, Modrm|EVex=1|Masking=3|VexOpcode=1|VexW=1|Disp8MemShift=5|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegYMM|Unspecified|BaseIndex, RegZMM } @@ -3917,8 +3217,8 @@ vprolq, 3, 0x6672, 1, 1, CpuAVX512F, Modrm|Masking=3|VexOpcode=0|VexVVVV=2|VexW=2|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM } vprorq, 3, 0x6672, 0, 1, CpuAVX512F, Modrm|Masking=3|VexOpcode=0|VexVVVV=2|VexW=2|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM } -vpscatterqd, 2, 0x66A1, None, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|NoDefMask|VexOpcode=1|VexW=1|Disp8MemShift=2|VecSIB=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegYMM, Dword|Unspecified|BaseIndex } -vscatterqps, 2, 0x66A3, None, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|NoDefMask|VexOpcode=1|VexW=1|Disp8MemShift=2|VecSIB=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegYMM, Dword|Unspecified|BaseIndex } +vpscatterqd, 2, 0x66A1, None, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|NoDefMask|VexOpcode=1|VexW0|Disp8MemShift=2|VecSIB512|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegYMM, Dword|Unspecified|BaseIndex } +vscatterqps, 2, 0x66A3, None, 1, CpuAVX512F, Modrm|EVex=1|Masking=2|NoDefMask|VexOpcode=1|VexW0|Disp8MemShift=2|VecSIB512|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegYMM, Dword|Unspecified|BaseIndex } vpshufd, 3, 0x6670, None, 1, CpuAVX512F, Modrm|Masking=3|VexOpcode=0|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM } @@ -3936,11 +3236,11 @@ vpsrlq, 3, 0x66D3, None, 1, CpuAVX512F, Modrm|Masking=3|VexOpcode=0|VexVVVV=1|VexW=2|Disp8MemShift=4|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegYMM|RegZMM, RegYMM|RegZMM } vpsrlq, 3, 0x6673, 2, 1, CpuAVX512F, Modrm|Masking=3|VexOpcode=0|VexVVVV=2|VexW=2|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM } -vrcp14sd, 3, 0x664D, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegXMM } -vrsqrt14sd, 3, 0x664F, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegXMM } +vrcp14sd, 3, 0x664D, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV|VexW1|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegXMM } +vrsqrt14sd, 3, 0x664F, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV|VexW1|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegXMM } -vrcp14ss, 3, 0x664D, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegXMM } -vrsqrt14ss, 3, 0x664F, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegXMM } +vrcp14ss, 3, 0x664D, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV|VexW0|Disp8MemShift=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegXMM } +vrsqrt14ss, 3, 0x664F, None, 1, CpuAVX512F, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV|VexW0|Disp8MemShift=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegXMM } vshuff32x4, 4, 0x6623, None, 1, CpuAVX512F, Modrm|Masking=3|VexOpcode=2|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegYMM|RegZMM, RegYMM|RegZMM } vshufi32x4, 4, 0x6643, None, 1, CpuAVX512F, Modrm|Masking=3|VexOpcode=2|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegYMM|RegZMM, RegYMM|RegZMM } @@ -3991,37 +3291,37 @@ vrsqrt28ps, 2, 0x66CC, None, 1, CpuAVX512ER, Modrm|EVex=1|Masking=3|VexOpcode=1|VexW=1|Broadcast|Disp8MemShift=6|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegZMM|Dword|Unspecified|BaseIndex, RegZMM } vrsqrt28ps, 3, 0x66CC, None, 1, CpuAVX512ER, Modrm|EVex=1|Masking=3|VexOpcode=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SAE, { Imm8, RegZMM, RegZMM } -vrcp28sd, 3, 0x66CB, None, 1, CpuAVX512ER, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegXMM } +vrcp28sd, 3, 0x66CB, None, 1, CpuAVX512ER, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV|VexW1|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegXMM } vrcp28sd, 4, 0x66CB, None, 1, CpuAVX512ER, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SAE, { Imm8, RegXMM, RegXMM, RegXMM } -vrsqrt28sd, 3, 0x66CD, None, 1, CpuAVX512ER, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegXMM } +vrsqrt28sd, 3, 0x66CD, None, 1, CpuAVX512ER, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV|VexW1|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegXMM } vrsqrt28sd, 4, 0x66CD, None, 1, CpuAVX512ER, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SAE, { Imm8, RegXMM, RegXMM, RegXMM } -vrcp28ss, 3, 0x66CB, None, 1, CpuAVX512ER, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegXMM } +vrcp28ss, 3, 0x66CB, None, 1, CpuAVX512ER, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV|VexW0|Disp8MemShift=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegXMM } vrcp28ss, 4, 0x66CB, None, 1, CpuAVX512ER, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SAE, { Imm8, RegXMM, RegXMM, RegXMM } -vrsqrt28ss, 3, 0x66CD, None, 1, CpuAVX512ER, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegXMM } +vrsqrt28ss, 3, 0x66CD, None, 1, CpuAVX512ER, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV|VexW0|Disp8MemShift=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegXMM } vrsqrt28ss, 4, 0x66CD, None, 1, CpuAVX512ER, Modrm|EVex=4|Masking=3|VexOpcode=1|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SAE, { Imm8, RegXMM, RegXMM, RegXMM } // AVX512ER instructions end. // AVX512PF instructions. -vgatherpf0dpd, 1, 0x66C6, 1, 1, CpuAVX512PF, Modrm|EVex=1|Masking=2|NoDefMask|VexOpcode=1|VexW=2|Disp8MemShift=3|VecSIB=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex } -vgatherpf0qpd, 1, 0x66C7, 1, 1, CpuAVX512PF, Modrm|EVex=1|Masking=2|NoDefMask|VexOpcode=1|VexW=2|Disp8MemShift=3|VecSIB=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex } -vgatherpf1dpd, 1, 0x66C6, 2, 1, CpuAVX512PF, Modrm|EVex=1|Masking=2|NoDefMask|VexOpcode=1|VexW=2|Disp8MemShift=3|VecSIB=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex } -vgatherpf1qpd, 1, 0x66C7, 2, 1, CpuAVX512PF, Modrm|EVex=1|Masking=2|NoDefMask|VexOpcode=1|VexW=2|Disp8MemShift=3|VecSIB=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex } -vscatterpf0dpd, 1, 0x66C6, 5, 1, CpuAVX512PF, Modrm|EVex=1|Masking=2|NoDefMask|VexOpcode=1|VexW=2|Disp8MemShift=3|VecSIB=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex } -vscatterpf0qpd, 1, 0x66C7, 5, 1, CpuAVX512PF, Modrm|EVex=1|Masking=2|NoDefMask|VexOpcode=1|VexW=2|Disp8MemShift=3|VecSIB=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex } -vscatterpf1dpd, 1, 0x66C6, 6, 1, CpuAVX512PF, Modrm|EVex=1|Masking=2|NoDefMask|VexOpcode=1|VexW=2|Disp8MemShift=3|VecSIB=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex } -vscatterpf1qpd, 1, 0x66C7, 6, 1, CpuAVX512PF, Modrm|EVex=1|Masking=2|NoDefMask|VexOpcode=1|VexW=2|Disp8MemShift=3|VecSIB=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex } - -vgatherpf0dps, 1, 0x66C6, 1, 1, CpuAVX512PF, Modrm|EVex=1|Masking=2|NoDefMask|VexOpcode=1|VexW=1|Disp8MemShift=2|VecSIB=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex } -vgatherpf0qps, 1, 0x66C7, 1, 1, CpuAVX512PF, Modrm|EVex=1|Masking=2|NoDefMask|VexOpcode=1|VexW=1|Disp8MemShift=2|VecSIB=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex } -vgatherpf1dps, 1, 0x66C6, 2, 1, CpuAVX512PF, Modrm|EVex=1|Masking=2|NoDefMask|VexOpcode=1|VexW=1|Disp8MemShift=2|VecSIB=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex } -vgatherpf1qps, 1, 0x66C7, 2, 1, CpuAVX512PF, Modrm|EVex=1|Masking=2|NoDefMask|VexOpcode=1|VexW=1|Disp8MemShift=2|VecSIB=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex } -vscatterpf0dps, 1, 0x66C6, 5, 1, CpuAVX512PF, Modrm|EVex=1|Masking=2|NoDefMask|VexOpcode=1|VexW=1|Disp8MemShift=2|VecSIB=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex } -vscatterpf0qps, 1, 0x66C7, 5, 1, CpuAVX512PF, Modrm|EVex=1|Masking=2|NoDefMask|VexOpcode=1|VexW=1|Disp8MemShift=2|VecSIB=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex } -vscatterpf1dps, 1, 0x66C6, 6, 1, CpuAVX512PF, Modrm|EVex=1|Masking=2|NoDefMask|VexOpcode=1|VexW=1|Disp8MemShift=2|VecSIB=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex } -vscatterpf1qps, 1, 0x66C7, 6, 1, CpuAVX512PF, Modrm|EVex=1|Masking=2|NoDefMask|VexOpcode=1|VexW=1|Disp8MemShift=2|VecSIB=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex } +vgatherpf0dpd, 1, 0x66C6, 1, 1, CpuAVX512PF, Modrm|EVex=1|Masking=2|NoDefMask|VexOpcode=1|VexW1|Disp8MemShift=3|VecSIB256|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex } +vgatherpf0qpd, 1, 0x66C7, 1, 1, CpuAVX512PF, Modrm|EVex=1|Masking=2|NoDefMask|VexOpcode=1|VexW1|Disp8MemShift=3|VecSIB512|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex } +vgatherpf1dpd, 1, 0x66C6, 2, 1, CpuAVX512PF, Modrm|EVex=1|Masking=2|NoDefMask|VexOpcode=1|VexW1|Disp8MemShift=3|VecSIB256|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex } +vgatherpf1qpd, 1, 0x66C7, 2, 1, CpuAVX512PF, Modrm|EVex=1|Masking=2|NoDefMask|VexOpcode=1|VexW1|Disp8MemShift=3|VecSIB512|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex } +vscatterpf0dpd, 1, 0x66C6, 5, 1, CpuAVX512PF, Modrm|EVex=1|Masking=2|NoDefMask|VexOpcode=1|VexW1|Disp8MemShift=3|VecSIB256|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex } +vscatterpf0qpd, 1, 0x66C7, 5, 1, CpuAVX512PF, Modrm|EVex=1|Masking=2|NoDefMask|VexOpcode=1|VexW1|Disp8MemShift=3|VecSIB512|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex } +vscatterpf1dpd, 1, 0x66C6, 6, 1, CpuAVX512PF, Modrm|EVex=1|Masking=2|NoDefMask|VexOpcode=1|VexW1|Disp8MemShift=3|VecSIB256|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex } +vscatterpf1qpd, 1, 0x66C7, 6, 1, CpuAVX512PF, Modrm|EVex=1|Masking=2|NoDefMask|VexOpcode=1|VexW1|Disp8MemShift=3|VecSIB512|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex } + +vgatherpf0dps, 1, 0x66C6, 1, 1, CpuAVX512PF, Modrm|EVex=1|Masking=2|NoDefMask|VexOpcode=1|VexW0|Disp8MemShift=2|VecSIB512|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex } +vgatherpf0qps, 1, 0x66C7, 1, 1, CpuAVX512PF, Modrm|EVex=1|Masking=2|NoDefMask|VexOpcode=1|VexW0|Disp8MemShift=2|VecSIB512|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex } +vgatherpf1dps, 1, 0x66C6, 2, 1, CpuAVX512PF, Modrm|EVex=1|Masking=2|NoDefMask|VexOpcode=1|VexW0|Disp8MemShift=2|VecSIB512|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex } +vgatherpf1qps, 1, 0x66C7, 2, 1, CpuAVX512PF, Modrm|EVex=1|Masking=2|NoDefMask|VexOpcode=1|VexW0|Disp8MemShift=2|VecSIB512|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex } +vscatterpf0dps, 1, 0x66C6, 5, 1, CpuAVX512PF, Modrm|EVex=1|Masking=2|NoDefMask|VexOpcode=1|VexW0|Disp8MemShift=2|VecSIB512|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex } +vscatterpf0qps, 1, 0x66C7, 5, 1, CpuAVX512PF, Modrm|EVex=1|Masking=2|NoDefMask|VexOpcode=1|VexW0|Disp8MemShift=2|VecSIB512|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex } +vscatterpf1dps, 1, 0x66C6, 6, 1, CpuAVX512PF, Modrm|EVex=1|Masking=2|NoDefMask|VexOpcode=1|VexW0|Disp8MemShift=2|VecSIB512|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex } +vscatterpf1qps, 1, 0x66C7, 6, 1, CpuAVX512PF, Modrm|EVex=1|Masking=2|NoDefMask|VexOpcode=1|VexW0|Disp8MemShift=2|VecSIB512|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex } // AVX512PF instructions end. @@ -4040,16 +3340,16 @@ // XSAVES/XRSTORS instructions. xrstors, 1, 0xfc7, 0x3, 2, CpuXSAVES, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex } -xrstors64, 1, 0xfc7, 0x3, 2, CpuXSAVES|Cpu64, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Rex64, { Unspecified|BaseIndex } +xrstors64, 1, 0xfc7, 0x3, 2, CpuXSAVES|Cpu64, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Size64, { Unspecified|BaseIndex } xsaves, 1, 0xfc7, 0x5, 2, CpuXSAVES, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex } -xsaves64, 1, 0xfc7, 0x5, 2, CpuXSAVES|Cpu64, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Rex64, { Unspecified|BaseIndex } +xsaves64, 1, 0xfc7, 0x5, 2, CpuXSAVES|Cpu64, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Size64, { Unspecified|BaseIndex } // XSAVES instructions end. // XSAVEC instructions. xsavec, 1, 0xfc7, 0x4, 2, CpuXSAVEC, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex } -xsavec64, 1, 0xfc7, 0x4, 2, CpuXSAVEC|Cpu64, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Rex64, { Unspecified|BaseIndex } +xsavec64, 1, 0xfc7, 0x4, 2, CpuXSAVEC|Cpu64, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Size64, { Unspecified|BaseIndex } // XSAVEC instructions end. @@ -4063,74 +3363,76 @@ // AVX512VL instructions. -vgatherdpd, 2, 0x6692, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|Masking=2|NoDefMask|VexOpcode=1|VexW=2|Disp8MemShift=3|VecSIB=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex, RegXMM|RegYMM } -vgatherqpd, 2, 0x6693, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|Masking=2|NoDefMask|VexOpcode=1|VexW=2|Disp8MemShift=3|VecSIB=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex, RegXMM } -vgatherqpd, 2, 0x6693, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=3|Masking=2|NoDefMask|VexOpcode=1|VexW=2|Disp8MemShift=3|VecSIB=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex, RegYMM } -vpgatherdq, 2, 0x6690, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|Masking=2|NoDefMask|VexOpcode=1|VexW=2|Disp8MemShift=3|VecSIB=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex, RegXMM|RegYMM } -vpgatherqq, 2, 0x6691, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|Masking=2|NoDefMask|VexOpcode=1|VexW=2|Disp8MemShift=3|VecSIB=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex, RegXMM } -vpgatherqq, 2, 0x6691, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=3|Masking=2|NoDefMask|VexOpcode=1|VexW=2|Disp8MemShift=3|VecSIB=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex, RegYMM } -vpscatterdq, 2, 0x66A0, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|Masking=2|NoDefMask|VexOpcode=1|VexW=2|Disp8MemShift=3|VecSIB=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|RegYMM, Qword|Unspecified|BaseIndex } -vpscatterqq, 2, 0x66A1, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|Masking=2|NoDefMask|VexOpcode=1|VexW=2|Disp8MemShift=3|VecSIB=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, Qword|Unspecified|BaseIndex } -vpscatterqq, 2, 0x66A1, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=3|Masking=2|NoDefMask|VexOpcode=1|VexW=2|Disp8MemShift=3|VecSIB=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegYMM, Qword|Unspecified|BaseIndex } -vscatterdpd, 2, 0x66A2, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|Masking=2|NoDefMask|VexOpcode=1|VexW=2|Disp8MemShift=3|VecSIB=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|RegYMM, Qword|Unspecified|BaseIndex } -vscatterqpd, 2, 0x66A3, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|Masking=2|NoDefMask|VexOpcode=1|VexW=2|Disp8MemShift=3|VecSIB=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, Qword|Unspecified|BaseIndex } -vscatterqpd, 2, 0x66A3, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=3|Masking=2|NoDefMask|VexOpcode=1|VexW=2|Disp8MemShift=3|VecSIB=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegYMM, Qword|Unspecified|BaseIndex } - -vgatherdps, 2, 0x6692, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|Masking=2|NoDefMask|VexOpcode=1|VexW=1|Disp8MemShift=2|VecSIB=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex, RegXMM } -vgatherdps, 2, 0x6692, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=3|Masking=2|NoDefMask|VexOpcode=1|VexW=1|Disp8MemShift=2|VecSIB=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex, RegYMM } -vgatherqps, 2, 0x6693, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|Masking=2|NoDefMask|VexOpcode=1|VexW=1|Disp8MemShift=2|VecSIB=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex, RegXMM } -vgatherqps, 2, 0x6693, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=3|Masking=2|NoDefMask|VexOpcode=1|VexW=1|Disp8MemShift=2|VecSIB=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex, RegXMM } -vpgatherdd, 2, 0x6690, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|Masking=2|NoDefMask|VexOpcode=1|VexW=1|Disp8MemShift=2|VecSIB=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex, RegXMM } -vpgatherdd, 2, 0x6690, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=3|Masking=2|NoDefMask|VexOpcode=1|VexW=1|Disp8MemShift=2|VecSIB=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex, RegYMM } -vpgatherqd, 2, 0x6691, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|Masking=2|NoDefMask|VexOpcode=1|VexW=1|Disp8MemShift=2|VecSIB=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex, RegXMM } -vpgatherqd, 2, 0x6691, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=3|Masking=2|NoDefMask|VexOpcode=1|VexW=1|Disp8MemShift=2|VecSIB=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex, RegXMM } -vpscatterdd, 2, 0x66A0, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|Masking=2|NoDefMask|VexOpcode=1|VexW=1|Disp8MemShift=2|VecSIB=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, Dword|Unspecified|BaseIndex } -vpscatterdd, 2, 0x66A0, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=3|Masking=2|NoDefMask|VexOpcode=1|VexW=1|Disp8MemShift=2|VecSIB=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegYMM, Dword|Unspecified|BaseIndex } -vpscatterqd, 2, 0x66A1, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|Masking=2|NoDefMask|VexOpcode=1|VexW=1|Disp8MemShift=2|VecSIB=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, Dword|Unspecified|BaseIndex } -vpscatterqd, 2, 0x66A1, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=3|Masking=2|NoDefMask|VexOpcode=1|VexW=1|Disp8MemShift=2|VecSIB=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, Dword|Unspecified|BaseIndex } -vscatterdps, 2, 0x66A2, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|Masking=2|NoDefMask|VexOpcode=1|VexW=1|Disp8MemShift=2|VecSIB=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, Dword|Unspecified|BaseIndex } -vscatterdps, 2, 0x66A2, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=3|Masking=2|NoDefMask|VexOpcode=1|VexW=1|Disp8MemShift=2|VecSIB=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegYMM, Dword|Unspecified|BaseIndex } -vscatterqps, 2, 0x66A3, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|Masking=2|NoDefMask|VexOpcode=1|VexW=1|Disp8MemShift=2|VecSIB=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, Dword|Unspecified|BaseIndex } -vscatterqps, 2, 0x66A3, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=3|Masking=2|NoDefMask|VexOpcode=1|VexW=1|Disp8MemShift=2|VecSIB=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, Dword|Unspecified|BaseIndex } - -vcvtdq2pd, 2, 0xF3E6, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|Masking=3|VexOpcode=0|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, RegXMM|RegYMM } -vcvtdq2pd, 2, 0xF3E6, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|Masking=3|VexOpcode=0|VexW=1|Broadcast|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Qword|Unspecified|BaseIndex, RegXMM } -vcvtdq2pd, 2, 0xF3E6, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=3|Masking=3|VexOpcode=0|VexW=1|Broadcast|Disp8MemShift=4|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|XMMword|Unspecified|BaseIndex, RegYMM } -vcvtudq2pd, 2, 0xF37A, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|Masking=3|VexOpcode=0|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, RegXMM|RegYMM } -vcvtudq2pd, 2, 0xF37A, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|Masking=3|VexOpcode=0|VexW=1|Broadcast|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Qword|Unspecified|BaseIndex, RegXMM } -vcvtudq2pd, 2, 0xF37A, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=3|Masking=3|VexOpcode=0|VexW=1|Broadcast|Disp8MemShift=4|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|XMMword|Unspecified|BaseIndex, RegYMM } +vgatherdpd, 2, 0x6692, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|Masking=2|NoDefMask|VexOpcode=1|VexW1|Disp8MemShift=3|VecSIB128|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex, RegXMM|RegYMM } +vgatherqpd, 2, 0x6693, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|Masking=2|NoDefMask|VexOpcode=1|VexW1|Disp8MemShift=3|VecSIB128|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex, RegXMM } +vgatherqpd, 2, 0x6693, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=3|Masking=2|NoDefMask|VexOpcode=1|VexW1|Disp8MemShift=3|VecSIB256|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex, RegYMM } +vpgatherdq, 2, 0x6690, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|Masking=2|NoDefMask|VexOpcode=1|VexW1|Disp8MemShift=3|VecSIB128|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex, RegXMM|RegYMM } +vpgatherqq, 2, 0x6691, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|Masking=2|NoDefMask|VexOpcode=1|VexW1|Disp8MemShift=3|VecSIB128|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex, RegXMM } +vpgatherqq, 2, 0x6691, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=3|Masking=2|NoDefMask|VexOpcode=1|VexW1|Disp8MemShift=3|VecSIB256|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Qword|Unspecified|BaseIndex, RegYMM } +vpscatterdq, 2, 0x66A0, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|Masking=2|NoDefMask|VexOpcode=1|VexW1|Disp8MemShift=3|VecSIB128|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|RegYMM, Qword|Unspecified|BaseIndex } +vpscatterqq, 2, 0x66A1, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|Masking=2|NoDefMask|VexOpcode=1|VexW1|Disp8MemShift=3|VecSIB128|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, Qword|Unspecified|BaseIndex } +vpscatterqq, 2, 0x66A1, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=3|Masking=2|NoDefMask|VexOpcode=1|VexW1|Disp8MemShift=3|VecSIB256|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegYMM, Qword|Unspecified|BaseIndex } +vscatterdpd, 2, 0x66A2, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|Masking=2|NoDefMask|VexOpcode=1|VexW1|Disp8MemShift=3|VecSIB128|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|RegYMM, Qword|Unspecified|BaseIndex } +vscatterqpd, 2, 0x66A3, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|Masking=2|NoDefMask|VexOpcode=1|VexW1|Disp8MemShift=3|VecSIB128|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, Qword|Unspecified|BaseIndex } +vscatterqpd, 2, 0x66A3, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=3|Masking=2|NoDefMask|VexOpcode=1|VexW1|Disp8MemShift=3|VecSIB256|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegYMM, Qword|Unspecified|BaseIndex } + +vgatherdps, 2, 0x6692, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|Masking=2|NoDefMask|VexOpcode=1|VexW0|Disp8MemShift=2|VecSIB128|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex, RegXMM } +vgatherdps, 2, 0x6692, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=3|Masking=2|NoDefMask|VexOpcode=1|VexW0|Disp8MemShift=2|VecSIB256|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex, RegYMM } +vgatherqps, 2, 0x6693, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|Masking=2|NoDefMask|VexOpcode=1|VexW0|Disp8MemShift=2|VecSIB128|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex, RegXMM } +vgatherqps, 2, 0x6693, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=3|Masking=2|NoDefMask|VexOpcode=1|VexW0|Disp8MemShift=2|VecSIB256|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex, RegXMM } +vpgatherdd, 2, 0x6690, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|Masking=2|NoDefMask|VexOpcode=1|VexW0|Disp8MemShift=2|VecSIB128|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex, RegXMM } +vpgatherdd, 2, 0x6690, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=3|Masking=2|NoDefMask|VexOpcode=1|VexW0|Disp8MemShift=2|VecSIB256|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex, RegYMM } +vpgatherqd, 2, 0x6691, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|Masking=2|NoDefMask|VexOpcode=1|VexW0|Disp8MemShift=2|VecSIB128|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex, RegXMM } +vpgatherqd, 2, 0x6691, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=3|Masking=2|NoDefMask|VexOpcode=1|VexW0|Disp8MemShift=2|VecSIB256|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Unspecified|BaseIndex, RegXMM } +vpscatterdd, 2, 0x66A0, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|Masking=2|NoDefMask|VexOpcode=1|VexW0|Disp8MemShift=2|VecSIB128|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, Dword|Unspecified|BaseIndex } +vpscatterdd, 2, 0x66A0, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=3|Masking=2|NoDefMask|VexOpcode=1|VexW0|Disp8MemShift=2|VecSIB256|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegYMM, Dword|Unspecified|BaseIndex } +vpscatterqd, 2, 0x66A1, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|Masking=2|NoDefMask|VexOpcode=1|VexW0|Disp8MemShift=2|VecSIB128|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, Dword|Unspecified|BaseIndex } +vpscatterqd, 2, 0x66A1, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=3|Masking=2|NoDefMask|VexOpcode=1|VexW0|Disp8MemShift=2|VecSIB256|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, Dword|Unspecified|BaseIndex } +vscatterdps, 2, 0x66A2, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|Masking=2|NoDefMask|VexOpcode=1|VexW0|Disp8MemShift=2|VecSIB128|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, Dword|Unspecified|BaseIndex } +vscatterdps, 2, 0x66A2, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=3|Masking=2|NoDefMask|VexOpcode=1|VexW0|Disp8MemShift=2|VecSIB256|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegYMM, Dword|Unspecified|BaseIndex } +vscatterqps, 2, 0x66A3, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|Masking=2|NoDefMask|VexOpcode=1|VexW0|Disp8MemShift=2|VecSIB128|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, Dword|Unspecified|BaseIndex } +vscatterqps, 2, 0x66A3, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=3|Masking=2|NoDefMask|VexOpcode=1|VexW0|Disp8MemShift=2|VecSIB256|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, Dword|Unspecified|BaseIndex } + +vcvtdq2pd, 2, 0xF3E6, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex128|Masking=3|VexOpcode=0|VexW0|Broadcast|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Qword|Unspecified|BaseIndex, RegXMM } +vcvtdq2pd, 2, 0xF3E6, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex256|Masking=3|VexOpcode=0|VexW0|Broadcast|Disp8MemShift=4|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegYMM } +vcvtudq2pd, 2, 0xF37A, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex128|Masking=3|VexOpcode=0|VexW0|Broadcast|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Qword|Unspecified|BaseIndex, RegXMM } +vcvtudq2pd, 2, 0xF37A, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex256|Masking=3|VexOpcode=0|VexW0|Broadcast|Disp8MemShift=4|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegYMM } -vcvtpd2dq, 2, 0xF2E6, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|Masking=3|VexOpcode=0|VexW=2|Broadcast|Disp8ShiftVL|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|RegYMM|Qword|BaseIndex, RegXMM } +vcvtpd2dq, 2, 0xF2E6, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|Masking=3|VexOpcode=0|VexW=2|Broadcast|Disp8ShiftVL|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IntelSyntax, { RegXMM|RegYMM|Qword|Unspecified|BaseIndex, RegXMM } +vcvtpd2dq, 2, 0xF2E6, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|Masking=3|VexOpcode=0|VexW=2|Broadcast|Disp8ShiftVL|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTSyntax, { RegXMM|RegYMM|Qword|BaseIndex, RegXMM } vcvtpd2dqx, 2, 0xF2E6, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|Masking=3|VexOpcode=0|VexW=2|Broadcast|Disp8MemShift=4|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTSyntax, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM } vcvtpd2dqy, 2, 0xF2E6, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=3|Masking=3|VexOpcode=0|VexW=2|Broadcast|Disp8MemShift=5|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTSyntax, { RegYMM|Qword|Unspecified|BaseIndex, RegXMM } -vcvtpd2ps, 2, 0x665A, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|Masking=3|VexOpcode=0|VexW=2|Broadcast|Disp8ShiftVL|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|RegYMM|Qword|BaseIndex, RegXMM } + +vcvtpd2ps, 2, 0x665A, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|Masking=3|VexOpcode=0|VexW=2|Broadcast|Disp8ShiftVL|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IntelSyntax, { RegXMM|RegYMM|Qword|Unspecified|BaseIndex, RegXMM } +vcvtpd2ps, 2, 0x665A, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|Masking=3|VexOpcode=0|VexW=2|Broadcast|Disp8ShiftVL|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTSyntax, { RegXMM|RegYMM|Qword|BaseIndex, RegXMM } vcvtpd2psx, 2, 0x665A, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|Masking=3|VexOpcode=0|VexW=2|Broadcast|Disp8MemShift=4|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTSyntax, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM } vcvtpd2psy, 2, 0x665A, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=3|Masking=3|VexOpcode=0|VexW=2|Broadcast|Disp8MemShift=5|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTSyntax, { RegYMM|Qword|Unspecified|BaseIndex, RegXMM } -vcvtpd2udq, 2, 0x79, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|Masking=3|VexOpcode=0|VexW=2|Broadcast|Disp8ShiftVL|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|RegYMM|Qword|BaseIndex, RegXMM } +vcvtpd2udq, 2, 0x79, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|Masking=3|VexOpcode=0|VexW=2|Broadcast|Disp8ShiftVL|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IntelSyntax, { RegXMM|RegYMM|Qword|Unspecified|BaseIndex, RegXMM } +vcvtpd2udq, 2, 0x79, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|Masking=3|VexOpcode=0|VexW=2|Broadcast|Disp8ShiftVL|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTSyntax, { RegXMM|RegYMM|Qword|BaseIndex, RegXMM } vcvtpd2udqx, 2, 0x79, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|Masking=3|VexOpcode=0|VexW=2|Broadcast|Disp8MemShift=4|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTSyntax, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM } vcvtpd2udqy, 2, 0x79, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=3|Masking=3|VexOpcode=0|VexW=2|Broadcast|Disp8MemShift=5|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTSyntax, { RegYMM|Qword|Unspecified|BaseIndex, RegXMM } -vcvtph2ps, 2, 0x6613, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|Masking=3|VexOpcode=1|VexW=1|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM } +vcvtph2ps, 2, 0x6613, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|Masking=3|VexOpcode=1|VexW0|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM } vcvtph2ps, 2, 0x6613, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=3|Masking=3|VexOpcode=1|VexW=1|Disp8MemShift=4|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegYMM } -vcvtps2pd, 2, 0x5A, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|Masking=3|VexOpcode=0|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, RegXMM|RegYMM } -vcvtps2pd, 2, 0x5A, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|Masking=3|VexOpcode=0|VexW=1|Broadcast|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Qword|Unspecified|BaseIndex, RegXMM } -vcvtps2pd, 2, 0x5A, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=3|Masking=3|VexOpcode=0|VexW=1|Broadcast|Disp8MemShift=4|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|XMMword|Unspecified|BaseIndex, RegYMM } - -vcvtps2ph, 3, 0x661D, None, 1, CpuAVX512F|CpuAVX512VL, RegMem|Masking=3|VexOpcode=2|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|RegYMM, RegXMM } -vcvtps2ph, 3, 0x661D, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|Masking=2|VexOpcode=2|VexW=1|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM, Qword|Unspecified|BaseIndex } -vcvtps2ph, 3, 0x661D, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=3|Masking=2|VexOpcode=2|VexW=1|Disp8MemShift=4|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegYMM, XMMword|Unspecified|BaseIndex } +vcvtps2pd, 2, 0x5A, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex128|Masking=3|VexOpcode=0|VexW0|Broadcast|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Qword|Unspecified|BaseIndex, RegXMM } +vcvtps2pd, 2, 0x5A, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex256|Masking=3|VexOpcode=0|VexW0|Broadcast|Disp8MemShift=4|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegYMM } + +vcvtps2ph, 3, 0x661D, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex128|MaskingMorZ|VexOpcode=2|VexW0|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM, RegXMM|Qword|Unspecified|BaseIndex } +vcvtps2ph, 3, 0x661D, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex256|MaskingMorZ|VexOpcode=2|VexW0|Disp8MemShift=4|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegYMM, RegXMM|Unspecified|BaseIndex } -vcvttpd2dq, 2, 0x66E6, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|Masking=3|VexOpcode=0|VexW=2|Broadcast|Disp8ShiftVL|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|RegYMM|Qword|BaseIndex, RegXMM } +vcvttpd2dq, 2, 0x66E6, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|Masking=3|VexOpcode=0|VexW=2|Broadcast|Disp8ShiftVL|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IntelSyntax, { RegXMM|RegYMM|Unspecified|Qword|BaseIndex, RegXMM } +vcvttpd2dq, 2, 0x66E6, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|Masking=3|VexOpcode=0|VexW=2|Broadcast|Disp8ShiftVL|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTSyntax, { RegXMM|RegYMM|Qword|BaseIndex, RegXMM } vcvttpd2dqx, 2, 0x66E6, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|Masking=3|VexOpcode=0|VexW=2|Broadcast|Disp8MemShift=4|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTSyntax, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM } vcvttpd2dqy, 2, 0x66E6, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=3|Masking=3|VexOpcode=0|VexW=2|Broadcast|Disp8MemShift=5|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTSyntax, { RegYMM|Qword|Unspecified|BaseIndex, RegXMM } -vcvttpd2udq, 2, 0x78, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|Masking=3|VexOpcode=0|VexW=2|Broadcast|Disp8ShiftVL|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|RegYMM|Qword|BaseIndex, RegXMM } +vcvttpd2udq, 2, 0x78, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|Masking=3|VexOpcode=0|VexW=2|Broadcast|Disp8ShiftVL|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IntelSyntax, { RegXMM|RegYMM|Qword|Unspecified|BaseIndex, RegXMM } +vcvttpd2udq, 2, 0x78, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|Masking=3|VexOpcode=0|VexW=2|Broadcast|Disp8ShiftVL|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTSyntax, { RegXMM|RegYMM|Qword|BaseIndex, RegXMM } vcvttpd2udqx, 2, 0x78, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|Masking=3|VexOpcode=0|VexW=2|Broadcast|Disp8MemShift=4|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTSyntax, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM } vcvttpd2udqy, 2, 0x78, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=3|Masking=3|VexOpcode=0|VexW=2|Broadcast|Disp8MemShift=5|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTSyntax, { RegYMM|Qword|Unspecified|BaseIndex, RegXMM } -vmovddup, 2, 0xF212, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|Masking=3|VexOpcode=0|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM } +vmovddup, 2, 0xF212, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|Masking=3|VexOpcode=0|VexW1|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM } vpslld, 3, 0x66F2, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|Masking=3|VexOpcode=0|VexVVVV=1|VexW=1|Disp8MemShift=4|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } vpsrad, 3, 0x66E2, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|Masking=3|VexOpcode=0|VexVVVV=1|VexW=1|Disp8MemShift=4|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } @@ -4140,65 +3442,65 @@ vpsraq, 3, 0x66E2, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|Masking=3|VexOpcode=0|VexVVVV=1|VexW=2|Disp8MemShift=4|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } vpsrlq, 3, 0x66D3, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|Masking=3|VexOpcode=0|VexVVVV=1|VexW=2|Disp8MemShift=4|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegXMM, RegXMM } -vpmovdb, 2, 0xF331, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|MaskingMorZ|VexOpcode=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, RegXMM|Dword|Unspecified|BaseIndex } -vpmovdb, 2, 0xF331, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=3|MaskingMorZ|VexOpcode=1|VexW=1|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegYMM, RegXMM|Qword|Unspecified|BaseIndex } -vpmovsdb, 2, 0xF321, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|MaskingMorZ|VexOpcode=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, RegXMM|Dword|Unspecified|BaseIndex } -vpmovsdb, 2, 0xF321, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=3|MaskingMorZ|VexOpcode=1|VexW=1|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegYMM, RegXMM|Qword|Unspecified|BaseIndex } -vpmovusdb, 2, 0xF311, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|MaskingMorZ|VexOpcode=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, RegXMM|Dword|Unspecified|BaseIndex } -vpmovusdb, 2, 0xF311, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=3|MaskingMorZ|VexOpcode=1|VexW=1|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegYMM, RegXMM|Qword|Unspecified|BaseIndex } +vpmovdb, 2, 0xF331, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|MaskingMorZ|VexOpcode=1|VexW0|Disp8MemShift=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, RegXMM|Dword|Unspecified|BaseIndex } +vpmovdb, 2, 0xF331, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=3|MaskingMorZ|VexOpcode=1|VexW0|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegYMM, RegXMM|Qword|Unspecified|BaseIndex } +vpmovsdb, 2, 0xF321, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|MaskingMorZ|VexOpcode=1|VexW0|Disp8MemShift=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, RegXMM|Dword|Unspecified|BaseIndex } +vpmovsdb, 2, 0xF321, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=3|MaskingMorZ|VexOpcode=1|VexW0|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegYMM, RegXMM|Qword|Unspecified|BaseIndex } +vpmovusdb, 2, 0xF311, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|MaskingMorZ|VexOpcode=1|VexW0|Disp8MemShift=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, RegXMM|Dword|Unspecified|BaseIndex } +vpmovusdb, 2, 0xF311, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=3|MaskingMorZ|VexOpcode=1|VexW0|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegYMM, RegXMM|Qword|Unspecified|BaseIndex } -vpmovdw, 2, 0xF333, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|MaskingMorZ|VexOpcode=1|VexW=1|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, RegXMM|Qword|Unspecified|BaseIndex } +vpmovdw, 2, 0xF333, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|MaskingMorZ|VexOpcode=1|VexW0|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, RegXMM|Qword|Unspecified|BaseIndex } vpmovdw, 2, 0xF333, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=3|MaskingMorZ|VexOpcode=1|VexW=1|Disp8MemShift=4|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegYMM, RegXMM|Unspecified|BaseIndex } -vpmovsdw, 2, 0xF323, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|MaskingMorZ|VexOpcode=1|VexW=1|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, RegXMM|Qword|Unspecified|BaseIndex } +vpmovsdw, 2, 0xF323, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|MaskingMorZ|VexOpcode=1|VexW0|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, RegXMM|Qword|Unspecified|BaseIndex } vpmovsdw, 2, 0xF323, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=3|MaskingMorZ|VexOpcode=1|VexW=1|Disp8MemShift=4|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegYMM, RegXMM|Unspecified|BaseIndex } -vpmovusdw, 2, 0xF313, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|MaskingMorZ|VexOpcode=1|VexW=1|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, RegXMM|Qword|Unspecified|BaseIndex } +vpmovusdw, 2, 0xF313, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|MaskingMorZ|VexOpcode=1|VexW0|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, RegXMM|Qword|Unspecified|BaseIndex } vpmovusdw, 2, 0xF313, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=3|MaskingMorZ|VexOpcode=1|VexW=1|Disp8MemShift=4|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegYMM, RegXMM|Unspecified|BaseIndex } -vpmovqb, 2, 0xF332, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|MaskingMorZ|VexOpcode=1|VexW=1|Disp8MemShift=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, RegXMM|Word|Unspecified|BaseIndex } -vpmovqb, 2, 0xF332, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=3|MaskingMorZ|VexOpcode=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegYMM, RegXMM|Dword|Unspecified|BaseIndex } -vpmovsqb, 2, 0xF322, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|MaskingMorZ|VexOpcode=1|VexW=1|Disp8MemShift=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, RegXMM|Word|Unspecified|BaseIndex } -vpmovsqb, 2, 0xF322, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=3|MaskingMorZ|VexOpcode=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegYMM, RegXMM|Dword|Unspecified|BaseIndex } -vpmovusqb, 2, 0xF312, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|MaskingMorZ|VexOpcode=1|VexW=1|Disp8MemShift=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, RegXMM|Word|Unspecified|BaseIndex } -vpmovusqb, 2, 0xF312, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=3|MaskingMorZ|VexOpcode=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegYMM, RegXMM|Dword|Unspecified|BaseIndex } +vpmovqb, 2, 0xF332, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|MaskingMorZ|VexOpcode=1|VexW0|Disp8MemShift=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, RegXMM|Word|Unspecified|BaseIndex } +vpmovqb, 2, 0xF332, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=3|MaskingMorZ|VexOpcode=1|VexW0|Disp8MemShift=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegYMM, RegXMM|Dword|Unspecified|BaseIndex } +vpmovsqb, 2, 0xF322, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|MaskingMorZ|VexOpcode=1|VexW0|Disp8MemShift=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, RegXMM|Word|Unspecified|BaseIndex } +vpmovsqb, 2, 0xF322, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=3|MaskingMorZ|VexOpcode=1|VexW0|Disp8MemShift=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegYMM, RegXMM|Dword|Unspecified|BaseIndex } +vpmovusqb, 2, 0xF312, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|MaskingMorZ|VexOpcode=1|VexW0|Disp8MemShift=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, RegXMM|Word|Unspecified|BaseIndex } +vpmovusqb, 2, 0xF312, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=3|MaskingMorZ|VexOpcode=1|VexW0|Disp8MemShift=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegYMM, RegXMM|Dword|Unspecified|BaseIndex } -vpmovqd, 2, 0xF335, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|MaskingMorZ|VexOpcode=1|VexW=1|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, RegXMM|Qword|Unspecified|BaseIndex } +vpmovqd, 2, 0xF335, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|MaskingMorZ|VexOpcode=1|VexW0|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, RegXMM|Qword|Unspecified|BaseIndex } vpmovqd, 2, 0xF335, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=3|MaskingMorZ|VexOpcode=1|VexW=1|Disp8MemShift=4|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegYMM, RegXMM|Unspecified|BaseIndex } -vpmovsqd, 2, 0xF325, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|MaskingMorZ|VexOpcode=1|VexW=1|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, RegXMM|Qword|Unspecified|BaseIndex } +vpmovsqd, 2, 0xF325, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|MaskingMorZ|VexOpcode=1|VexW0|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, RegXMM|Qword|Unspecified|BaseIndex } vpmovsqd, 2, 0xF325, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=3|MaskingMorZ|VexOpcode=1|VexW=1|Disp8MemShift=4|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegYMM, RegXMM|Unspecified|BaseIndex } -vpmovusqd, 2, 0xF315, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|MaskingMorZ|VexOpcode=1|VexW=1|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, RegXMM|Qword|Unspecified|BaseIndex } +vpmovusqd, 2, 0xF315, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|MaskingMorZ|VexOpcode=1|VexW0|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, RegXMM|Qword|Unspecified|BaseIndex } vpmovusqd, 2, 0xF315, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=3|MaskingMorZ|VexOpcode=1|VexW=1|Disp8MemShift=4|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegYMM, RegXMM|Unspecified|BaseIndex } -vpmovqw, 2, 0xF334, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|MaskingMorZ|VexOpcode=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, RegXMM|Dword|Unspecified|BaseIndex } -vpmovqw, 2, 0xF334, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=3|MaskingMorZ|VexOpcode=1|VexW=1|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegYMM, RegXMM|Qword|Unspecified|BaseIndex } -vpmovsqw, 2, 0xF324, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|MaskingMorZ|VexOpcode=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, RegXMM|Dword|Unspecified|BaseIndex } -vpmovsqw, 2, 0xF324, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=3|MaskingMorZ|VexOpcode=1|VexW=1|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegYMM, RegXMM|Qword|Unspecified|BaseIndex } -vpmovusqw, 2, 0xF314, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|MaskingMorZ|VexOpcode=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, RegXMM|Dword|Unspecified|BaseIndex } -vpmovusqw, 2, 0xF314, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=3|MaskingMorZ|VexOpcode=1|VexW=1|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegYMM, RegXMM|Qword|Unspecified|BaseIndex } - -vpmovsxbd, 2, 0x6621, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|Masking=3|VexOpcode=1|VexWIG|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM } -vpmovsxbd, 2, 0x6621, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=3|Masking=3|VexOpcode=1|VexWIG|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegYMM } -vpmovzxbd, 2, 0x6631, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|Masking=3|VexOpcode=1|VexWIG|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM } -vpmovzxbd, 2, 0x6631, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=3|Masking=3|VexOpcode=1|VexWIG|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegYMM } - -vpmovsxbq, 2, 0x6622, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|Masking=3|VexOpcode=1|VexWIG|Disp8MemShift=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Word|Unspecified|BaseIndex, RegXMM } -vpmovsxbq, 2, 0x6622, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=3|Masking=3|VexOpcode=1|VexWIG|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegYMM } -vpmovzxbq, 2, 0x6632, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|Masking=3|VexOpcode=1|VexWIG|Disp8MemShift=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Word|Unspecified|BaseIndex, RegXMM } -vpmovzxbq, 2, 0x6632, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=3|Masking=3|VexOpcode=1|VexWIG|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegYMM } +vpmovqw, 2, 0xF334, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|MaskingMorZ|VexOpcode=1|VexW0|Disp8MemShift=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, RegXMM|Dword|Unspecified|BaseIndex } +vpmovqw, 2, 0xF334, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=3|MaskingMorZ|VexOpcode=1|VexW0|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegYMM, RegXMM|Qword|Unspecified|BaseIndex } +vpmovsqw, 2, 0xF324, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|MaskingMorZ|VexOpcode=1|VexW0|Disp8MemShift=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, RegXMM|Dword|Unspecified|BaseIndex } +vpmovsqw, 2, 0xF324, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=3|MaskingMorZ|VexOpcode=1|VexW0|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegYMM, RegXMM|Qword|Unspecified|BaseIndex } +vpmovusqw, 2, 0xF314, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|MaskingMorZ|VexOpcode=1|VexW0|Disp8MemShift=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, RegXMM|Dword|Unspecified|BaseIndex } +vpmovusqw, 2, 0xF314, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=3|MaskingMorZ|VexOpcode=1|VexW0|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegYMM, RegXMM|Qword|Unspecified|BaseIndex } + +vpmovsxbd, 2, 0x6621, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|Masking=3|VexOpcode=1|VexWIG|Disp8MemShift=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM } +vpmovsxbd, 2, 0x6621, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=3|Masking=3|VexOpcode=1|VexWIG|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegYMM } +vpmovzxbd, 2, 0x6631, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|Masking=3|VexOpcode=1|VexWIG|Disp8MemShift=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM } +vpmovzxbd, 2, 0x6631, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=3|Masking=3|VexOpcode=1|VexWIG|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegYMM } + +vpmovsxbq, 2, 0x6622, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|Masking=3|VexOpcode=1|VexWIG|Disp8MemShift=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Word|Unspecified|BaseIndex, RegXMM } +vpmovsxbq, 2, 0x6622, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=3|Masking=3|VexOpcode=1|VexWIG|Disp8MemShift=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegYMM } +vpmovzxbq, 2, 0x6632, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|Masking=3|VexOpcode=1|VexWIG|Disp8MemShift=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Word|Unspecified|BaseIndex, RegXMM } +vpmovzxbq, 2, 0x6632, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=3|Masking=3|VexOpcode=1|VexWIG|Disp8MemShift=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegYMM } -vpmovsxdq, 2, 0x6625, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|Masking=3|VexOpcode=1|VexW=1|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM } +vpmovsxdq, 2, 0x6625, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|Masking=3|VexOpcode=1|VexW0|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM } vpmovsxdq, 2, 0x6625, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=3|Masking=3|VexOpcode=1|VexW=1|Disp8MemShift=4|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegYMM } -vpmovzxdq, 2, 0x6635, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|Masking=3|VexOpcode=1|VexW=1|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM } +vpmovzxdq, 2, 0x6635, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|Masking=3|VexOpcode=1|VexW0|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM } vpmovzxdq, 2, 0x6635, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=3|Masking=3|VexOpcode=1|VexW=1|Disp8MemShift=4|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegYMM } -vpmovsxwd, 2, 0x6623, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|Masking=3|VexOpcode=1|VexWIG|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM } +vpmovsxwd, 2, 0x6623, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|Masking=3|VexOpcode=1|VexWIG|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM } vpmovsxwd, 2, 0x6623, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=3|Masking=3|VexOpcode=1|VexWIG|Disp8MemShift=4|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegYMM } -vpmovzxwd, 2, 0x6633, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|Masking=3|VexOpcode=1|VexWIG|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM } +vpmovzxwd, 2, 0x6633, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|Masking=3|VexOpcode=1|VexWIG|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM } vpmovzxwd, 2, 0x6633, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=3|Masking=3|VexOpcode=1|VexWIG|Disp8MemShift=4|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegYMM } -vpmovsxwq, 2, 0x6624, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|Masking=3|VexOpcode=1|VexWIG|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM } -vpmovsxwq, 2, 0x6624, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=3|Masking=3|VexOpcode=1|VexWIG|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegYMM } -vpmovzxwq, 2, 0x6634, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|Masking=3|VexOpcode=1|VexWIG|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM } -vpmovzxwq, 2, 0x6634, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=3|Masking=3|VexOpcode=1|VexWIG|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegYMM } +vpmovsxwq, 2, 0x6624, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|Masking=3|VexOpcode=1|VexWIG|Disp8MemShift=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM } +vpmovsxwq, 2, 0x6624, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=3|Masking=3|VexOpcode=1|VexWIG|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegYMM } +vpmovzxwq, 2, 0x6634, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=2|Masking=3|VexOpcode=1|VexWIG|Disp8MemShift=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM } +vpmovzxwq, 2, 0x6634, None, 1, CpuAVX512F|CpuAVX512VL, Modrm|EVex=3|Masking=3|VexOpcode=1|VexWIG|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegYMM } // AVX512VL instructions end. @@ -4207,7 +3509,7 @@ kaddd, 3, 0x664A, None, 1, CpuAVX512BW, Modrm|Vex=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegMask, RegMask, RegMask } kandd, 3, 0x6641, None, 1, CpuAVX512BW, Modrm|Vex=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegMask, RegMask, RegMask } kandnd, 3, 0x6642, None, 1, CpuAVX512BW, Modrm|Vex=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Optimize, { RegMask, RegMask, RegMask } -kmovd, 2, 0x6690, None, 1, CpuAVX512BW, Modrm|Vex=1|VexOpcode=0|VexW=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegMask|Dword|Unspecified|BaseIndex, RegMask } +kmovd, 2, 0x6690, None, 1, CpuAVX512BW, Modrm|Vex=1|VexOpcode=0|VexW1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegMask|Dword|Unspecified|BaseIndex, RegMask } kmovd, 2, 0x6691, None, 1, CpuAVX512BW, Modrm|Vex=1|VexOpcode=0|VexW=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegMask, Dword|Unspecified|BaseIndex } kmovd, 2, 0xF292, None, 1, CpuAVX512BW, D|Modrm|Vex=1|VexOpcode=0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg32, RegMask } knotd, 2, 0x6644, None, 1, CpuAVX512BW, Modrm|Vex=1|VexOpcode=0|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegMask, RegMask } @@ -4220,7 +3522,7 @@ kaddq, 3, 0x4A, None, 1, CpuAVX512BW, Modrm|Vex=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegMask, RegMask, RegMask } kandnq, 3, 0x42, None, 1, CpuAVX512BW, Modrm|Vex=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Optimize, { RegMask, RegMask, RegMask } kandq, 3, 0x41, None, 1, CpuAVX512BW, Modrm|Vex=2|VexOpcode=0|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegMask, RegMask, RegMask } -kmovq, 2, 0x90, None, 1, CpuAVX512BW, Modrm|Vex=1|VexOpcode=0|VexW=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegMask|Qword|Unspecified|BaseIndex, RegMask } +kmovq, 2, 0x90, None, 1, CpuAVX512BW, Modrm|Vex=1|VexOpcode=0|VexW1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegMask|Qword|Unspecified|BaseIndex, RegMask } kmovq, 2, 0x91, None, 1, CpuAVX512BW, Modrm|Vex=1|VexOpcode=0|VexW=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegMask, Qword|Unspecified|BaseIndex } kmovq, 2, 0xF292, None, 1, CpuAVX512BW, D|Modrm|Vex=1|VexOpcode=0|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg64, RegMask } knotq, 2, 0x44, None, 1, CpuAVX512BW, Modrm|Vex=1|VexOpcode=0|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegMask, RegMask } @@ -4297,7 +3599,7 @@ vpalignr, 4, 0x660F, None, 1, CpuAVX512BW, Modrm|Masking=3|VexOpcode=2|VexWIG|VexVVVV=1|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } vpblendmb, 3, 0x6666, None, 1, CpuAVX512BW, Modrm|Masking=3|VexOpcode=1|VexVVVV=1|VexW=1|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vpbroadcastb, 2, 0x6678, None, 1, CpuAVX512BW, Modrm|Masking=3|VexOpcode=1|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Byte|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM } +vpbroadcastb, 2, 0x6678, None, 1, CpuAVX512BW, Modrm|Masking=3|VexOpcode=1|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Byte|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM } vpbroadcastb, 2, 0x667A, None, 1, CpuAVX512BW, Modrm|Masking=3|VexOpcode=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg32, RegXMM|RegYMM|RegZMM } vpblendmw, 3, 0x6666, None, 1, CpuAVX512BW, Modrm|Masking=3|VexOpcode=1|VexVVVV=1|VexW=2|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } @@ -4308,56 +3610,36 @@ vpsravw, 3, 0x6611, None, 1, CpuAVX512BW, Modrm|Masking=3|VexOpcode=1|VexVVVV=1|VexW=2|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } vpsrlvw, 3, 0x6610, None, 1, CpuAVX512BW, Modrm|Masking=3|VexOpcode=1|VexVVVV=1|VexW=2|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vpbroadcastw, 2, 0x6679, None, 1, CpuAVX512BW, Modrm|Masking=3|VexOpcode=1|VexW=1|Disp8MemShift=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Word|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM } +vpbroadcastw, 2, 0x6679, None, 1, CpuAVX512BW, Modrm|Masking=3|VexOpcode=1|VexW0|Disp8MemShift=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Word|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM } vpbroadcastw, 2, 0x667B, None, 1, CpuAVX512BW, Modrm|Masking=3|VexOpcode=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg32, RegXMM|RegYMM|RegZMM } vpcmpeqb, 3, 0x6674, None, 1, CpuAVX512BW, Modrm|Masking=2|VexOpcode=0|VexWIG|VexVVVV=1|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } vpcmpgtb, 3, 0x6664, None, 1, CpuAVX512BW, Modrm|Masking=2|VexOpcode=0|VexWIG|VexVVVV=1|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } vpcmpb, 4, 0x663F, None, 1, CpuAVX512BW, Modrm|Masking=2|VexOpcode=2|VexVVVV=1|VexW=1|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vpcmpeqb, 3, 0x663F, 0, 1, CpuAVX512BW, Modrm|Masking=2|VexOpcode=2|VexVVVV=1|VexW=1|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vpcmpleb, 3, 0x663F, 2, 1, CpuAVX512BW, Modrm|Masking=2|VexOpcode=2|VexVVVV=1|VexW=1|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vpcmpltb, 3, 0x663F, 1, 1, CpuAVX512BW, Modrm|Masking=2|VexOpcode=2|VexVVVV=1|VexW=1|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vpcmpneqb, 3, 0x663F, 4, 1, CpuAVX512BW, Modrm|Masking=2|VexOpcode=2|VexVVVV=1|VexW=1|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vpcmpnleb, 3, 0x663F, 6, 1, CpuAVX512BW, Modrm|Masking=2|VexOpcode=2|VexVVVV=1|VexW=1|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vpcmpnltb, 3, 0x663F, 5, 1, CpuAVX512BW, Modrm|Masking=2|VexOpcode=2|VexVVVV=1|VexW=1|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } +vpcmp<avx_irel>b, 3, 0x663F, <avx_irel:imm>, 1, CpuAVX512BW, Modrm|Masking=2|VexOpcode=2|VexVVVV|VexW0|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } vpcmpub, 4, 0x663E, None, 1, CpuAVX512BW, Modrm|Masking=2|VexOpcode=2|VexVVVV=1|VexW=1|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vpcmpequb, 3, 0x663E, 0, 1, CpuAVX512BW, Modrm|Masking=2|VexOpcode=2|VexVVVV=1|VexW=1|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vpcmpleub, 3, 0x663E, 2, 1, CpuAVX512BW, Modrm|Masking=2|VexOpcode=2|VexVVVV=1|VexW=1|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vpcmpltub, 3, 0x663E, 1, 1, CpuAVX512BW, Modrm|Masking=2|VexOpcode=2|VexVVVV=1|VexW=1|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vpcmpnequb, 3, 0x663E, 4, 1, CpuAVX512BW, Modrm|Masking=2|VexOpcode=2|VexVVVV=1|VexW=1|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vpcmpnleub, 3, 0x663E, 6, 1, CpuAVX512BW, Modrm|Masking=2|VexOpcode=2|VexVVVV=1|VexW=1|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vpcmpnltub, 3, 0x663E, 5, 1, CpuAVX512BW, Modrm|Masking=2|VexOpcode=2|VexVVVV=1|VexW=1|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } +vpcmp<avx_irel>ub, 3, 0x663E, <avx_irel:imm>, 1, CpuAVX512BW, Modrm|Masking=2|VexOpcode=2|VexVVVV|VexW0|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } vpcmpeqw, 3, 0x6675, None, 1, CpuAVX512BW, Modrm|Masking=2|VexOpcode=0|VexWIG|VexVVVV=1|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } vpcmpgtw, 3, 0x6665, None, 1, CpuAVX512BW, Modrm|Masking=2|VexOpcode=0|VexWIG|VexVVVV=1|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } vpcmpw, 4, 0x663F, None, 1, CpuAVX512BW, Modrm|Masking=2|VexOpcode=2|VexVVVV=1|VexW=2|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vpcmpeqw, 3, 0x663F, 0, 1, CpuAVX512BW, Modrm|Masking=2|VexOpcode=2|VexVVVV=1|VexW=2|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vpcmplew, 3, 0x663F, 2, 1, CpuAVX512BW, Modrm|Masking=2|VexOpcode=2|VexVVVV=1|VexW=2|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vpcmpltw, 3, 0x663F, 1, 1, CpuAVX512BW, Modrm|Masking=2|VexOpcode=2|VexVVVV=1|VexW=2|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vpcmpneqw, 3, 0x663F, 4, 1, CpuAVX512BW, Modrm|Masking=2|VexOpcode=2|VexVVVV=1|VexW=2|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vpcmpnlew, 3, 0x663F, 6, 1, CpuAVX512BW, Modrm|Masking=2|VexOpcode=2|VexVVVV=1|VexW=2|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vpcmpnltw, 3, 0x663F, 5, 1, CpuAVX512BW, Modrm|Masking=2|VexOpcode=2|VexVVVV=1|VexW=2|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } +vpcmp<avx_irel>w, 3, 0x663F, <avx_irel:imm>, 1, CpuAVX512BW, Modrm|Masking=2|VexOpcode=2|VexVVVV|VexW1|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } vpcmpuw, 4, 0x663E, None, 1, CpuAVX512BW, Modrm|Masking=2|VexOpcode=2|VexVVVV=1|VexW=2|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vpcmpequw, 3, 0x663E, 0, 1, CpuAVX512BW, Modrm|Masking=2|VexOpcode=2|VexVVVV=1|VexW=2|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vpcmpleuw, 3, 0x663E, 2, 1, CpuAVX512BW, Modrm|Masking=2|VexOpcode=2|VexVVVV=1|VexW=2|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vpcmpltuw, 3, 0x663E, 1, 1, CpuAVX512BW, Modrm|Masking=2|VexOpcode=2|VexVVVV=1|VexW=2|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vpcmpnequw, 3, 0x663E, 4, 1, CpuAVX512BW, Modrm|Masking=2|VexOpcode=2|VexVVVV=1|VexW=2|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vpcmpnleuw, 3, 0x663E, 6, 1, CpuAVX512BW, Modrm|Masking=2|VexOpcode=2|VexVVVV=1|VexW=2|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } -vpcmpnltuw, 3, 0x663E, 5, 1, CpuAVX512BW, Modrm|Masking=2|VexOpcode=2|VexVVVV=1|VexW=2|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } +vpcmp<avx_irel>uw, 3, 0x663E, <avx_irel:imm>, 1, CpuAVX512BW, Modrm|Masking=2|VexOpcode=2|VexVVVV|VexW1|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ImmExt, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegMask } vpslldq, 3, 0x6673, 7, 1, CpuAVX512BW, Modrm|VexOpcode=0|VexWIG|VexVVVV=2|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM } vpsrldq, 3, 0x6673, 3, 1, CpuAVX512BW, Modrm|VexOpcode=0|VexWIG|VexVVVV=2|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM } vpextrw, 3, 0x66C5, None, 1, CpuAVX512BW, Load|Modrm|EVex128|VexOpcode=0|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM, Reg32|Reg64 } vpextrw, 3, 0x6615, None, 1, CpuAVX512BW, RegMem|EVex128|VexOpcode=2|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM, Reg32|Reg64 } -vpextrw, 3, 0x6615, None, 1, CpuAVX512BW, Modrm|EVex128|VexOpcode=2|VexWIG|Disp8MemShift=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM, Word|Unspecified|BaseIndex } +vpextrw, 3, 0x6615, None, 1, CpuAVX512BW, Modrm|EVex128|VexOpcode=2|VexWIG|Disp8MemShift=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM, Word|Unspecified|BaseIndex } vpinsrw, 4, 0x66C4, None, 1, CpuAVX512BW, Modrm|EVex128|VexOpcode=0|VexWIG|VexVVVV=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Reg32|Reg64, RegXMM, RegXMM } -vpinsrw, 4, 0x66C4, None, 1, CpuAVX512BW, Modrm|EVex128|VexOpcode=0|VexWIG|VexVVVV=1|Disp8MemShift=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Word|Unspecified|BaseIndex, RegXMM, RegXMM } +vpinsrw, 4, 0x66C4, None, 1, CpuAVX512BW, Modrm|EVex128|VexOpcode=0|VexWIG|VexVVVV|Disp8MemShift=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Word|Unspecified|BaseIndex, RegXMM, RegXMM } vpextrb, 3, 0x6614, None, 1, CpuAVX512BW, RegMem|EVex128|VexOpcode=2|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM, Reg32|Reg64 } -vpextrb, 3, 0x6614, None, 1, CpuAVX512BW, Modrm|EVex128|VexOpcode=2|VexWIG|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM, Byte|Unspecified|BaseIndex } +vpextrb, 3, 0x6614, None, 1, CpuAVX512BW, Modrm|EVex128|VexOpcode=2|VexWIG|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM, Byte|Unspecified|BaseIndex } vpinsrb, 4, 0x6620, None, 1, CpuAVX512BW, Modrm|EVex128|VexOpcode=2|VexWIG|VexVVVV=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Reg32|Reg64, RegXMM, RegXMM } -vpinsrb, 4, 0x6620, None, 1, CpuAVX512BW, Modrm|EVex128|VexOpcode=2|VexWIG|VexVVVV=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Byte|Unspecified|BaseIndex, RegXMM, RegXMM } +vpinsrb, 4, 0x6620, None, 1, CpuAVX512BW, Modrm|EVex128|VexOpcode=2|VexWIG|VexVVVV|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Byte|Unspecified|BaseIndex, RegXMM, RegXMM } vpmaddwd, 3, 0x66F5, None, 1, CpuAVX512BW, Modrm|Masking=3|VexOpcode=0|VexVVVV=1|VexWIG|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } @@ -4368,22 +3650,22 @@ vpmovm2w, 2, 0xF328, None, 1, CpuAVX512BW, Modrm|EVex=5|VexOpcode=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegMask, RegXMM|RegYMM|RegZMM } vpmovswb, 2, 0xF320, None, 1, CpuAVX512BW, Modrm|EVex=1|MaskingMorZ|VexOpcode=1|VexW=1|Disp8MemShift=5|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegZMM, RegYMM|Unspecified|BaseIndex } -vpmovswb, 2, 0xF320, None, 1, CpuAVX512BW|CpuAVX512VL, Modrm|EVex=2|MaskingMorZ|VexOpcode=1|VexW=1|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, RegXMM|Qword|Unspecified|BaseIndex } +vpmovswb, 2, 0xF320, None, 1, CpuAVX512BW|CpuAVX512VL, Modrm|EVex=2|MaskingMorZ|VexOpcode=1|VexW0|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, RegXMM|Qword|Unspecified|BaseIndex } vpmovswb, 2, 0xF320, None, 1, CpuAVX512BW|CpuAVX512VL, Modrm|EVex=3|MaskingMorZ|VexOpcode=1|VexW=1|Disp8MemShift=4|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegYMM, RegXMM|Unspecified|BaseIndex } vpmovuswb, 2, 0xF310, None, 1, CpuAVX512BW, Modrm|EVex=1|MaskingMorZ|VexOpcode=1|VexW=1|Disp8MemShift=5|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegZMM, RegYMM|Unspecified|BaseIndex } -vpmovuswb, 2, 0xF310, None, 1, CpuAVX512BW|CpuAVX512VL, Modrm|EVex=2|MaskingMorZ|VexOpcode=1|VexW=1|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, RegXMM|Qword|Unspecified|BaseIndex } +vpmovuswb, 2, 0xF310, None, 1, CpuAVX512BW|CpuAVX512VL, Modrm|EVex=2|MaskingMorZ|VexOpcode=1|VexW0|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, RegXMM|Qword|Unspecified|BaseIndex } vpmovuswb, 2, 0xF310, None, 1, CpuAVX512BW|CpuAVX512VL, Modrm|EVex=3|MaskingMorZ|VexOpcode=1|VexW=1|Disp8MemShift=4|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegYMM, RegXMM|Unspecified|BaseIndex } vpmovwb, 2, 0xF330, None, 1, CpuAVX512BW, Modrm|EVex=1|MaskingMorZ|VexOpcode=1|VexW=1|Disp8MemShift=5|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegZMM, RegYMM|Unspecified|BaseIndex } -vpmovwb, 2, 0xF330, None, 1, CpuAVX512BW|CpuAVX512VL, Modrm|EVex=2|MaskingMorZ|VexOpcode=1|VexW=1|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, RegXMM|Qword|Unspecified|BaseIndex } +vpmovwb, 2, 0xF330, None, 1, CpuAVX512BW|CpuAVX512VL, Modrm|EVex=2|MaskingMorZ|VexOpcode=1|VexW0|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, RegXMM|Qword|Unspecified|BaseIndex } vpmovwb, 2, 0xF330, None, 1, CpuAVX512BW|CpuAVX512VL, Modrm|EVex=3|MaskingMorZ|VexOpcode=1|VexW=1|Disp8MemShift=4|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegYMM, RegXMM|Unspecified|BaseIndex } vpmovsxbw, 2, 0x6620, None, 1, CpuAVX512BW, Modrm|EVex=1|Masking=3|VexOpcode=1|VexWIG|Disp8MemShift=5|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegYMM|Unspecified|BaseIndex, RegZMM } -vpmovsxbw, 2, 0x6620, None, 1, CpuAVX512BW|CpuAVX512VL, Modrm|EVex=2|Masking=3|VexWIG|VexOpcode=1|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM } +vpmovsxbw, 2, 0x6620, None, 1, CpuAVX512BW|CpuAVX512VL, Modrm|EVex=2|Masking=3|VexWIG|VexOpcode=1|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM } vpmovsxbw, 2, 0x6620, None, 1, CpuAVX512BW|CpuAVX512VL, Modrm|EVex=3|Masking=3|VexWIG|VexOpcode=1|Disp8MemShift=4|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegYMM } vpmovzxbw, 2, 0x6630, None, 1, CpuAVX512BW, Modrm|EVex=1|Masking=3|VexOpcode=1|VexWIG|Disp8MemShift=5|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegYMM|Unspecified|BaseIndex, RegZMM } -vpmovzxbw, 2, 0x6630, None, 1, CpuAVX512BW|CpuAVX512VL, Modrm|EVex=2|Masking=3|VexWIG|VexOpcode=1|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM } +vpmovzxbw, 2, 0x6630, None, 1, CpuAVX512BW|CpuAVX512VL, Modrm|EVex=2|Masking=3|VexWIG|VexOpcode=1|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM } vpmovzxbw, 2, 0x6630, None, 1, CpuAVX512BW|CpuAVX512VL, Modrm|EVex=3|Masking=3|VexWIG|VexOpcode=1|Disp8MemShift=4|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Unspecified|BaseIndex, RegYMM } vpsadbw, 3, 0x66F6, None, 1, CpuAVX512BW, Modrm|VexOpcode=0|VexVVVV=1|VexWIG|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|RegYMM|RegZMM|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } @@ -4404,8 +3686,8 @@ kaddb, 3, 0x664A, None, 1, CpuAVX512DQ, Modrm|Vex=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegMask, RegMask, RegMask } kandb, 3, 0x6641, None, 1, CpuAVX512DQ, Modrm|Vex=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegMask, RegMask, RegMask } kandnb, 3, 0x6642, None, 1, CpuAVX512DQ, Modrm|Vex=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegMask, RegMask, RegMask } -kmovb, 2, 0x6690, None, 1, CpuAVX512DQ, Modrm|Vex=1|VexOpcode=0|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegMask|Byte|Unspecified|BaseIndex, RegMask } -kmovb, 2, 0x6691, None, 1, CpuAVX512DQ, Modrm|Vex=1|VexOpcode=0|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegMask, Byte|Unspecified|BaseIndex } +kmovb, 2, 0x6690, None, 1, CpuAVX512DQ, Modrm|Vex=1|VexOpcode=0|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegMask|Byte|Unspecified|BaseIndex, RegMask } +kmovb, 2, 0x6691, None, 1, CpuAVX512DQ, Modrm|Vex=1|VexOpcode=0|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegMask, Byte|Unspecified|BaseIndex } kmovb, 2, 0x6692, None, 1, CpuAVX512DQ, D|Modrm|Vex=1|VexOpcode=0|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg32, RegMask } knotb, 2, 0x6644, None, 1, CpuAVX512DQ, Modrm|Vex=1|VexOpcode=0|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegMask, RegMask } korb, 3, 0x6645, None, 1, CpuAVX512DQ, Modrm|Vex=2|VexOpcode=0|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegMask, RegMask, RegMask } @@ -4430,9 +3712,9 @@ vorps, 3, 0x56, None, 1, CpuAVX512DQ, Modrm|Masking=3|VexOpcode=0|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } vxorps, 3, 0x57, None, 1, CpuAVX512DQ, Modrm|Masking=3|VexOpcode=0|VexVVVV=1|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Optimize, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vbroadcastf32x2, 2, 0x6619, None, 1, CpuAVX512DQ, Modrm|Masking=3|VexOpcode=1|VexW=1|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegYMM|RegZMM } +vbroadcastf32x2, 2, 0x6619, None, 1, CpuAVX512DQ, Modrm|Masking=3|VexOpcode=1|VexW0|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegYMM|RegZMM } vbroadcastf32x8, 2, 0x661B, None, 1, CpuAVX512DQ, Modrm|EVex=1|Masking=3|VexOpcode=1|VexW=1|Disp8MemShift=5|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { YMMword|Unspecified|BaseIndex, RegZMM } -vbroadcasti32x2, 2, 0x6659, None, 1, CpuAVX512DQ, Modrm|Masking=3|VexOpcode=1|VexW=1|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM } +vbroadcasti32x2, 2, 0x6659, None, 1, CpuAVX512DQ, Modrm|Masking=3|VexOpcode=1|VexW0|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM } vbroadcasti32x8, 2, 0x665B, None, 1, CpuAVX512DQ, Modrm|EVex=1|Masking=3|VexOpcode=1|VexW=1|Disp8MemShift=5|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { YMMword|Unspecified|BaseIndex, RegZMM } vbroadcastf64x2, 2, 0x661A, None, 1, CpuAVX512DQ, Modrm|Masking=3|VexOpcode=1|VexW=2|Disp8MemShift=4|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { XMMword|Unspecified|BaseIndex, RegYMM|RegZMM } @@ -4444,15 +3726,13 @@ vcvtpd2uqq, 3, 0x6679, None, 1, CpuAVX512DQ, Modrm|EVex=1|Masking=3|VexOpcode=0|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|StaticRounding|SAE, { Imm8, RegZMM, RegZMM } vcvtps2qq, 2, 0x667B, None, 1, CpuAVX512DQ, Modrm|EVex=1|Masking=3|VexOpcode=0|VexW=1|Broadcast|Disp8MemShift=5|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegYMM|Dword|Unspecified|BaseIndex, RegZMM } -vcvtps2qq, 2, 0x667B, None, 1, CpuAVX512DQ|CpuAVX512VL, Modrm|EVex=2|Masking=3|VexOpcode=0|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, RegXMM } -vcvtps2qq, 2, 0x667B, None, 1, CpuAVX512DQ|CpuAVX512VL, Modrm|EVex=2|Masking=3|VexOpcode=0|VexW=1|Broadcast|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Qword|Unspecified|BaseIndex, RegXMM } -vcvtps2qq, 2, 0x667B, None, 1, CpuAVX512DQ|CpuAVX512VL, Modrm|EVex=3|Masking=3|VexOpcode=0|VexW=1|Broadcast|Disp8MemShift=4|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegYMM } vcvtps2qq, 3, 0x667B, None, 1, CpuAVX512DQ, Modrm|EVex=1|Masking=3|VexOpcode=0|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|StaticRounding|SAE, { Imm8, RegYMM, RegZMM } +vcvtps2qq, 2, 0x667B, None, 1, CpuAVX512DQ|CpuAVX512VL, Modrm|EVex128|Masking=3|VexOpcode=0|VexW0|Broadcast|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Qword|Unspecified|BaseIndex, RegXMM } +vcvtps2qq, 2, 0x667B, None, 1, CpuAVX512DQ|CpuAVX512VL, Modrm|EVex256|Masking=3|VexOpcode=0|VexW0|Broadcast|Disp8MemShift=4|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegYMM } vcvtps2uqq, 2, 0x6679, None, 1, CpuAVX512DQ, Modrm|EVex=1|Masking=3|VexOpcode=0|VexW=1|Broadcast|Disp8MemShift=5|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegYMM|Dword|Unspecified|BaseIndex, RegZMM } -vcvtps2uqq, 2, 0x6679, None, 1, CpuAVX512DQ|CpuAVX512VL, Modrm|EVex=2|Masking=3|VexOpcode=0|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, RegXMM } -vcvtps2uqq, 2, 0x6679, None, 1, CpuAVX512DQ|CpuAVX512VL, Modrm|EVex=2|Masking=3|VexOpcode=0|VexW=1|Broadcast|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Qword|Unspecified|BaseIndex, RegXMM } -vcvtps2uqq, 2, 0x6679, None, 1, CpuAVX512DQ|CpuAVX512VL, Modrm|EVex=3|Masking=3|VexOpcode=0|VexW=1|Broadcast|Disp8MemShift=4|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegYMM } vcvtps2uqq, 3, 0x6679, None, 1, CpuAVX512DQ, Modrm|EVex=1|Masking=3|VexOpcode=0|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|StaticRounding|SAE, { Imm8, RegYMM, RegZMM } +vcvtps2uqq, 2, 0x6679, None, 1, CpuAVX512DQ|CpuAVX512VL, Modrm|EVex128|Masking=3|VexOpcode=0|VexW0|Broadcast|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Qword|Unspecified|BaseIndex, RegXMM } +vcvtps2uqq, 2, 0x6679, None, 1, CpuAVX512DQ|CpuAVX512VL, Modrm|EVex256|Masking=3|VexOpcode=0|VexW0|Broadcast|Disp8MemShift=4|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|RegXMM|Dword|Unspecified|BaseIndex, RegYMM } vcvtqq2pd, 2, 0xF3E6, None, 1, CpuAVX512DQ, Modrm|Masking=3|VexOpcode=0|VexW=2|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM } vcvtqq2pd, 3, 0xF3E6, None, 1, CpuAVX512DQ, Modrm|EVex=1|Masking=3|VexOpcode=0|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|StaticRounding|SAE, { Imm8, RegZMM, RegZMM } @@ -4461,7 +3741,8 @@ vcvtqq2ps, 2, 0x5B, None, 1, CpuAVX512DQ, Modrm|EVex=1|Masking=3|VexOpcode=0|VexW=2|Broadcast|Disp8MemShift=6|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegZMM|Qword|Unspecified|BaseIndex, RegYMM } vcvtqq2ps, 3, 0x5B, None, 1, CpuAVX512DQ, Modrm|EVex=1|Masking=3|VexOpcode=0|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|StaticRounding|SAE, { Imm8, RegZMM, RegYMM } -vcvtqq2ps, 2, 0x5B, None, 1, CpuAVX512DQ|CpuAVX512VL, Modrm|Masking=3|VexOpcode=0|VexW=2|Broadcast|Disp8ShiftVL|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|RegYMM|Qword|BaseIndex, RegXMM } +vcvtqq2ps, 2, 0x5B, None, 1, CpuAVX512DQ|CpuAVX512VL, Modrm|Masking=3|VexOpcode=0|VexW=2|Broadcast|Disp8ShiftVL|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IntelSyntax, { RegXMM|RegYMM|Qword|Unspecified|BaseIndex, RegXMM } +vcvtqq2ps, 2, 0x5B, None, 1, CpuAVX512DQ|CpuAVX512VL, Modrm|Masking=3|VexOpcode=0|VexW=2|Broadcast|Disp8ShiftVL|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTSyntax, { RegXMM|RegYMM|Qword|BaseIndex, RegXMM } vcvtqq2psx, 2, 0x5B, None, 1, CpuAVX512DQ|CpuAVX512VL, Modrm|EVex=2|Masking=3|VexOpcode=0|VexW=2|Broadcast|Disp8MemShift=4|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTSyntax, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM } vcvtqq2psy, 2, 0x5B, None, 1, CpuAVX512DQ|CpuAVX512VL, Modrm|EVex=3|Masking=3|VexOpcode=0|VexW=2|Broadcast|Disp8MemShift=5|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTSyntax, { RegYMM|Qword|Unspecified|BaseIndex, RegXMM } @@ -4471,19 +3752,18 @@ vcvttpd2uqq, 3, 0x6678, None, 1, CpuAVX512DQ, Modrm|EVex=1|Masking=3|VexOpcode=0|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SAE, { Imm8, RegZMM, RegZMM } vcvttps2qq, 2, 0x667A, None, 1, CpuAVX512DQ, Modrm|EVex=1|Masking=3|VexOpcode=0|VexW=1|Broadcast|Disp8MemShift=5|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegYMM|Dword|Unspecified|BaseIndex, RegZMM } -vcvttps2qq, 2, 0x667A, None, 1, CpuAVX512DQ|CpuAVX512VL, Modrm|EVex=2|Masking=3|VexOpcode=0|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, RegXMM } -vcvttps2qq, 2, 0x667A, None, 1, CpuAVX512DQ|CpuAVX512VL, Modrm|EVex=2|Masking=3|VexOpcode=0|VexW=1|Broadcast|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Qword|Unspecified|BaseIndex, RegXMM } -vcvttps2qq, 2, 0x667A, None, 1, CpuAVX512DQ|CpuAVX512VL, Modrm|EVex=3|Masking=3|VexOpcode=0|VexW=1|Broadcast|Disp8MemShift=4|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegYMM } vcvttps2qq, 3, 0x667A, None, 1, CpuAVX512DQ, Modrm|EVex=1|Masking=3|VexOpcode=0|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SAE, { Imm8, RegYMM, RegZMM } +vcvttps2qq, 2, 0x667A, None, 1, CpuAVX512DQ|CpuAVX512VL, Modrm|EVex128|Masking=3|VexOpcode=0|VexW0|Broadcast|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Qword|Unspecified|BaseIndex, RegXMM } +vcvttps2qq, 2, 0x667A, None, 1, CpuAVX512DQ|CpuAVX512VL, Modrm|EVex256|Masking=3|VexOpcode=0|VexW0|Broadcast|Disp8MemShift=4|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegYMM } vcvttps2uqq, 2, 0x6678, None, 1, CpuAVX512DQ, Modrm|EVex=1|Masking=3|VexOpcode=0|VexW=1|Broadcast|Disp8MemShift=5|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegYMM|Dword|Unspecified|BaseIndex, RegZMM } -vcvttps2uqq, 2, 0x6678, None, 1, CpuAVX512DQ|CpuAVX512VL, Modrm|EVex=2|Masking=3|VexOpcode=0|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, RegXMM } -vcvttps2uqq, 2, 0x6678, None, 1, CpuAVX512DQ|CpuAVX512VL, Modrm|EVex=2|Masking=3|VexOpcode=0|VexW=1|Broadcast|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Qword|Unspecified|BaseIndex, RegXMM } -vcvttps2uqq, 2, 0x6678, None, 1, CpuAVX512DQ|CpuAVX512VL, Modrm|EVex=3|Masking=3|VexOpcode=0|VexW=1|Broadcast|Disp8MemShift=4|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegYMM } vcvttps2uqq, 3, 0x6678, None, 1, CpuAVX512DQ, Modrm|EVex=1|Masking=3|VexOpcode=0|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SAE, { Imm8, RegYMM, RegZMM } +vcvttps2uqq, 2, 0x6678, None, 1, CpuAVX512DQ|CpuAVX512VL, Modrm|EVex128|Masking=3|VexOpcode=0|VexW0|Broadcast|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Qword|Unspecified|BaseIndex, RegXMM } +vcvttps2uqq, 2, 0x6678, None, 1, CpuAVX512DQ|CpuAVX512VL, Modrm|EVex256|Masking=3|VexOpcode=0|VexW0|Broadcast|Disp8MemShift=4|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Unspecified|BaseIndex, RegYMM } vcvtuqq2ps, 2, 0xF27A, None, 1, CpuAVX512DQ, Modrm|EVex=1|Masking=3|VexOpcode=0|VexW=2|Broadcast|Disp8MemShift=6|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegZMM|Qword|Unspecified|BaseIndex, RegYMM } vcvtuqq2ps, 3, 0xF27A, None, 1, CpuAVX512DQ, Modrm|EVex=1|Masking=3|VexOpcode=0|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|StaticRounding|SAE, { Imm8, RegZMM, RegYMM } -vcvtuqq2ps, 2, 0xF27A, None, 1, CpuAVX512DQ|CpuAVX512VL, Modrm|Masking=3|VexOpcode=0|VexW=2|Broadcast|Disp8ShiftVL|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|RegYMM|Qword|BaseIndex, RegXMM } +vcvtuqq2ps, 2, 0xF27A, None, 1, CpuAVX512DQ|CpuAVX512VL, Modrm|Masking=3|VexOpcode=0|VexW=2|Broadcast|Disp8ShiftVL|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IntelSyntax, { RegXMM|RegYMM|Qword|Unspecified|BaseIndex, RegXMM } +vcvtuqq2ps, 2, 0xF27A, None, 1, CpuAVX512DQ|CpuAVX512VL, Modrm|Masking=3|VexOpcode=0|VexW=2|Broadcast|Disp8ShiftVL|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTSyntax, { RegXMM|RegYMM|Qword|BaseIndex, RegXMM } vcvtuqq2psx, 2, 0xF27A, None, 1, CpuAVX512DQ|CpuAVX512VL, Modrm|EVex=2|Masking=3|VexOpcode=0|VexW=2|Broadcast|Disp8MemShift=4|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTSyntax, { RegXMM|Qword|Unspecified|BaseIndex, RegXMM } vcvtuqq2psy, 2, 0xF27A, None, 1, CpuAVX512DQ|CpuAVX512VL, Modrm|EVex=3|Masking=3|VexOpcode=0|VexW=2|Broadcast|Disp8MemShift=5|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTSyntax, { RegYMM|Qword|Unspecified|BaseIndex, RegXMM } @@ -4492,25 +3772,27 @@ vinsertf32x8, 4, 0x661A, None, 1, CpuAVX512DQ, Modrm|EVex=1|Masking=3|VexOpcode=2|VexVVVV=1|VexW=1|Disp8MemShift=5|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegYMM|Unspecified|BaseIndex, RegZMM, RegZMM } vinserti32x8, 4, 0x663A, None, 1, CpuAVX512DQ, Modrm|EVex=1|Masking=3|VexOpcode=2|VexVVVV=1|VexW=1|Disp8MemShift=5|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegYMM|Unspecified|BaseIndex, RegZMM, RegZMM } -vfpclassss, 3, 0x6667, None, 1, CpuAVX512DQ, Modrm|EVex=4|Masking=2|VexOpcode=2|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|Dword|Unspecified|BaseIndex, RegMask } +vfpclassss, 3, 0x6667, None, 1, CpuAVX512DQ, Modrm|EVex=4|Masking=2|VexOpcode=2|VexW0|Disp8MemShift=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|Dword|Unspecified|BaseIndex, RegMask } vpextrd, 3, 0x6616, None, 1, CpuAVX512DQ, Modrm|EVex128|VexOpcode=2|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM, Reg32|Dword|Unspecified|BaseIndex } vpinsrd, 4, 0x6622, None, 1, CpuAVX512DQ, Modrm|EVex128|VexOpcode=2|VexVVVV=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Reg32|Dword|Unspecified|BaseIndex, RegXMM, RegXMM } -vfpclasssd, 3, 0x6667, None, 1, CpuAVX512DQ, Modrm|EVex=4|Masking=2|VexOpcode=2|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|Qword|Unspecified|BaseIndex, RegMask } -vpextrq, 3, 0x6616, None, 1, CpuAVX512DQ, Modrm|EVex128|VexOpcode=2|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM, Reg64|Qword|Unspecified|BaseIndex } -vpinsrq, 4, 0x6622, None, 1, CpuAVX512DQ, Modrm|EVex128|VexOpcode=2|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Reg64|Qword|Unspecified|BaseIndex, RegXMM, RegXMM } +vfpclasssd, 3, 0x6667, None, 1, CpuAVX512DQ, Modrm|EVex=4|Masking=2|VexOpcode=2|VexW1|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|Qword|Unspecified|BaseIndex, RegMask } +vpextrq, 3, 0x6616, None, 1, CpuAVX512DQ|Cpu64, Modrm|EVex128|VexOpcode=2|VexW1|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM, Reg64|Unspecified|BaseIndex } +vpinsrq, 4, 0x6622, None, 1, CpuAVX512DQ|Cpu64, Modrm|EVex128|VexOpcode=2|VexVVVV=1|VexW1|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, Reg64|Unspecified|BaseIndex, RegXMM, RegXMM } vextractf64x2, 3, 0x6619, None, 1, CpuAVX512DQ, Modrm|MaskingMorZ|VexOpcode=2|VexW=2|Disp8MemShift=4|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegYMM|RegZMM, RegXMM|Unspecified|BaseIndex } vextracti64x2, 3, 0x6639, None, 1, CpuAVX512DQ, Modrm|MaskingMorZ|VexOpcode=2|VexW=2|Disp8MemShift=4|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegYMM|RegZMM, RegXMM|Unspecified|BaseIndex } vinsertf64x2, 4, 0x6618, None, 1, CpuAVX512DQ, Modrm|Masking=3|VexOpcode=2|VexVVVV=1|VexW=2|Disp8MemShift=4|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|Unspecified|BaseIndex, RegYMM|RegZMM, RegYMM|RegZMM } vinserti64x2, 4, 0x6638, None, 1, CpuAVX512DQ, Modrm|Masking=3|VexOpcode=2|VexVVVV=1|VexW=2|Disp8MemShift=4|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|Unspecified|BaseIndex, RegYMM|RegZMM, RegYMM|RegZMM } -vfpclasspd, 3, 0x6666, None, 1, CpuAVX512DQ, Modrm|Masking=2|VexOpcode=2|VexW=2|Broadcast|Disp8ShiftVL|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|RegYMM|RegZMM|Qword|BaseIndex, RegMask } +vfpclasspd, 3, 0x6666, None, 1, CpuAVX512DQ, Modrm|Masking=2|VexOpcode=2|VexW=2|Broadcast|Disp8ShiftVL|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTSyntax, { Imm8, RegXMM|RegYMM|RegZMM|Qword|BaseIndex, RegMask } +vfpclasspd, 3, 0x6666, None, 1, CpuAVX512DQ, Modrm|Masking=2|VexOpcode=2|VexW=2|Broadcast|Disp8ShiftVL|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IntelSyntax, { Imm8, RegXMM|RegYMM|RegZMM|Qword|Unspecified|BaseIndex, RegMask } vfpclasspdz, 3, 0x6666, None, 1, CpuAVX512DQ, Modrm|EVex=1|Masking=2|VexOpcode=2|VexW=2|Broadcast|Disp8MemShift=6|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegZMM|Qword|Unspecified|BaseIndex, RegMask } vfpclasspdx, 3, 0x6666, None, 1, CpuAVX512DQ|CpuAVX512VL, Modrm|EVex=2|Masking=2|VexOpcode=2|VexW=2|Broadcast|Disp8MemShift=4|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|Qword|Unspecified|BaseIndex, RegMask } vfpclasspdy, 3, 0x6666, None, 1, CpuAVX512DQ|CpuAVX512VL, Modrm|EVex=3|Masking=2|VexOpcode=2|VexW=2|Broadcast|Disp8MemShift=5|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegYMM|Qword|Unspecified|BaseIndex, RegMask } -vfpclassps, 3, 0x6666, None, 1, CpuAVX512DQ, Modrm|Masking=2|VexOpcode=2|VexW=1|Broadcast|Disp8ShiftVL|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|RegYMM|RegZMM|Dword|BaseIndex, RegMask } +vfpclassps, 3, 0x6666, None, 1, CpuAVX512DQ, Modrm|Masking=2|VexOpcode=2|VexW=1|Broadcast|Disp8ShiftVL|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTSyntax, { Imm8, RegXMM|RegYMM|RegZMM|Dword|BaseIndex, RegMask } +vfpclassps, 3, 0x6666, None, 1, CpuAVX512DQ, Modrm|Masking=2|VexOpcode=2|VexW=1|Broadcast|Disp8ShiftVL|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IntelSyntax, { Imm8, RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegMask } vfpclasspsz, 3, 0x6666, None, 1, CpuAVX512DQ, Modrm|EVex=1|Masking=2|VexOpcode=2|VexW=1|Broadcast|Disp8MemShift=6|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegZMM|Dword|Unspecified|BaseIndex, RegMask } vfpclasspsx, 3, 0x6666, None, 1, CpuAVX512DQ|CpuAVX512VL, Modrm|EVex=2|Masking=2|VexOpcode=2|VexW=1|Broadcast|Disp8MemShift=4|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|Dword|Unspecified|BaseIndex, RegMask } vfpclasspsy, 3, 0x6666, None, 1, CpuAVX512DQ|CpuAVX512VL, Modrm|EVex=3|Masking=2|VexOpcode=2|VexW=1|Broadcast|Disp8MemShift=5|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegYMM|Dword|Unspecified|BaseIndex, RegMask } @@ -4533,14 +3815,14 @@ vreduceps, 3, 0x6656, None, 1, CpuAVX512DQ, Modrm|Masking=3|VexOpcode=2|VexW=1|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM } vreduceps, 4, 0x6656, None, 1, CpuAVX512DQ, Modrm|EVex=1|Masking=3|VexOpcode=2|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SAE, { Imm8, Imm8, RegZMM, RegZMM } -vrangesd, 4, 0x6651, None, 1, CpuAVX512DQ, Modrm|EVex=4|Masking=3|VexOpcode=2|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegXMM } +vrangesd, 4, 0x6651, None, 1, CpuAVX512DQ, Modrm|EVex=4|Masking=3|VexOpcode=2|VexVVVV|VexW1|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegXMM } vrangesd, 5, 0x6651, None, 1, CpuAVX512DQ, Modrm|EVex=4|Masking=3|VexOpcode=2|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SAE, { Imm8, Imm8, RegXMM, RegXMM, RegXMM } -vreducesd, 4, 0x6657, None, 1, CpuAVX512DQ, Modrm|EVex=4|Masking=3|VexOpcode=2|VexVVVV=1|VexW=2|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegXMM } +vreducesd, 4, 0x6657, None, 1, CpuAVX512DQ, Modrm|EVex=4|Masking=3|VexOpcode=2|VexVVVV|VexW1|Disp8MemShift=3|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|Qword|Unspecified|BaseIndex, RegXMM, RegXMM } vreducesd, 5, 0x6657, None, 1, CpuAVX512DQ, Modrm|EVex=4|Masking=3|VexOpcode=2|VexVVVV=1|VexW=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SAE, { Imm8, Imm8, RegXMM, RegXMM, RegXMM } -vrangess, 4, 0x6651, None, 1, CpuAVX512DQ, Modrm|EVex=4|Masking=3|VexOpcode=2|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegXMM } +vrangess, 4, 0x6651, None, 1, CpuAVX512DQ, Modrm|EVex=4|Masking=3|VexOpcode=2|VexVVVV|VexW0|Disp8MemShift=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegXMM } vrangess, 5, 0x6651, None, 1, CpuAVX512DQ, Modrm|EVex=4|Masking=3|VexOpcode=2|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SAE, { Imm8, Imm8, RegXMM, RegXMM, RegXMM } -vreducess, 4, 0x6657, None, 1, CpuAVX512DQ, Modrm|EVex=4|Masking=3|VexOpcode=2|VexVVVV=1|VexW=1|Disp8MemShift=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegXMM } +vreducess, 4, 0x6657, None, 1, CpuAVX512DQ, Modrm|EVex=4|Masking=3|VexOpcode=2|VexVVVV|VexW0|Disp8MemShift=2|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8, RegXMM|Dword|Unspecified|BaseIndex, RegXMM, RegXMM } vreducess, 5, 0x6657, None, 1, CpuAVX512DQ, Modrm|EVex=4|Masking=3|VexOpcode=2|VexVVVV=1|VexW=1|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SAE, { Imm8, Imm8, RegXMM, RegXMM, RegXMM } // AVX512DQ instructions end. @@ -4667,22 +3949,20 @@ // CLZERO instructions clzero, 0, 0xf01fc, None, 3, CpuCLZERO, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 } -clzero, 1, 0xf01fc, None, 3, CpuCLZERO|CpuNo64, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|AddrPrefixOpReg, { Acc|Word|Dword } -clzero, 1, 0xf01fc, None, 3, CpuCLZERO|Cpu64, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|AddrPrefixOpReg|NoRex64, { Acc|Dword|Qword } +clzero, 1, 0xf01fc, None, 3, CpuCLZERO, AddrPrefixOpReg, { Acc|Word|Dword|Qword } // CLZERO instructions end // MONITORX/MWAITX instructions monitorx, 0, 0xf01fa, None, 3, CpuMWAITX, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 } -monitorx, 3, 0xf01fa, None, 3, CpuMWAITX|CpuNo64, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|AddrPrefixOpReg, { Acc|Word|Dword, RegC|Dword, RegD|Dword } -monitorx, 3, 0xf01fa, None, 3, CpuMWAITX|Cpu64, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|AddrPrefixOpReg|NoRex64, { Acc|Dword|Qword, RegC|Dword, RegD|Dword } +monitorx, 3, 0xf01fa, None, 3, CpuMWAITX, AddrPrefixOpReg, { Acc|Word|Dword|Qword, RegC|Dword, RegD|Dword } // The 64-bit form exists only for compatibility with older gas. -monitorx, 3, 0xf01fa, None, 3, CpuMWAITX|Cpu64, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|AddrPrefixOpReg|NoRex64, { Acc|Dword|Qword, RegC|Qword, RegD|Qword } +monitorx, 3, 0xf01fa, None, 3, CpuMWAITX|Cpu64, AddrPrefixOpReg, { Acc|Dword|Qword, RegC|Qword, RegD|Qword } mwaitx, 0, 0xf01fb, None, 3, CpuMWAITX, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 } // The 64-bit form exists only for compatibility with older gas. -mwaitx, 3, 0xf01fb, None, 3, CpuMWAITX, CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Acc|Dword|Qword, RegC|Dword|Qword, RegB|Dword|Qword } +mwaitx, 3, 0xf01fb, None, 3, CpuMWAITX, CheckRegSize|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Acc|Dword|Qword, RegC|Dword|Qword, RegB|Dword|Qword } // MONITORX/MWAITX instructions end @@ -4695,14 +3975,15 @@ // RDPID instructions. -rdpid, 1, 0xf30fc7, 0x7, 2, CpuRDPID|CpuNo64, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg32 } +rdpid, 1, 0xf30fc7, 0x7, 2, CpuRDPID|CpuNo64, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg32 } rdpid, 1, 0xf30fc7, 0x7, 2, CpuRDPID|Cpu64, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Reg64 } // RDPID instructions end. // PTWRITE instructions. -ptwrite, 1, 0xf30fae, 0x4, 2, CpuPTWRITE, Modrm|No_bSuf|No_wSuf|No_sSuf|No_ldSuf, { Reg32|Reg64|Dword|Qword|Unspecified|BaseIndex } +ptwrite, 1, 0xf30fae, 0x4, 2, CpuPTWRITE|CpuNo64, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_ldSuf, { Reg32|Unspecified|BaseIndex } +ptwrite, 1, 0xf30fae, 0x4, 2, CpuPTWRITE|Cpu64, Modrm|No_bSuf|No_wSuf|No_sSuf|No_ldSuf, { Reg32|Reg64|Unspecified|BaseIndex } // PTWRITE instructions end. @@ -4715,9 +3996,9 @@ saveprevssp, 0, 0xf30f01ea, None, 3, CpuSHSTK, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 } rstorssp, 1, 0xf30f01, 0x5, 2, CpuSHSTK, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Qword|Unspecified|BaseIndex } wrssd, 2, 0x0f38f6, None, 3, CpuSHSTK, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg32, Dword|Unspecified|BaseIndex } -wrssq, 2, 0x0f38f6, None, 3, CpuSHSTK|Cpu64, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Rex64, { Reg64, Qword|Unspecified|BaseIndex } +wrssq, 2, 0x0f38f6, None, 3, CpuSHSTK|Cpu64, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Size64, { Reg64, Qword|Unspecified|BaseIndex } wrussd, 2, 0x660f38f5, None, 3, CpuSHSTK, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg32, Dword|Unspecified|BaseIndex } -wrussq, 2, 0x660f38f5, None, 3, CpuSHSTK|Cpu64, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Rex64, { Reg64, Qword|Unspecified|BaseIndex } +wrussq, 2, 0x660f38f5, None, 3, CpuSHSTK|Cpu64, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Size64, { Reg64, Qword|Unspecified|BaseIndex } setssbsy, 0, 0xf30f01e8, None, 3, CpuSHSTK, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 } clrssbsy, 1, 0xf30fae, 0x6, 2, CpuSHSTK, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Qword|Unspecified|BaseIndex } endbr64, 0, 0xf30f1efa, None, 3, CpuIBT, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 } @@ -4742,12 +4023,11 @@ // WAITPKG instructions. -umonitor, 1, 0xf30fae, 0x6, 2, CpuWAITPKG|CpuNo64, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|AddrPrefixOpReg, { Reg16|Reg32 } -umonitor, 1, 0xf30fae, 0x6, 2, CpuWAITPKG|Cpu64, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|AddrPrefixOpReg|NoRex64, { Reg32|Reg64 } - -tpause, 1, 0x660fae, 0x6, 2, CpuWAITPKG, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Reg32|Reg64 } - -umwait, 1, 0xf20fae, 0x6, 2, CpuWAITPKG, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Reg32|Reg64 } +umonitor, 1, 0xf30fae, 0x6, 2, CpuWAITPKG, Modrm|AddrPrefixOpReg, { Reg16|Reg32|Reg64 } +tpause, 1, 0x660fae, 0x6, 2, CpuWAITPKG, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg32 } +tpause, 3, 0x660fae, 0x6, 2, CpuWAITPKG, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg32, RegD|Dword, Acc|Dword } +umwait, 1, 0xf20fae, 0x6, 2, CpuWAITPKG, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg32 } +umwait, 3, 0xf20fae, 0x6, 2, CpuWAITPKG, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg32, RegD|Dword, Acc|Dword } // WAITPKG instructions end. @@ -4759,10 +4039,8 @@ // MOVDIR[I,64B] instructions. -movdiri, 2, 0xf38f9, None, 3, CpuMOVDIRI, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg32|Reg64, Dword|Qword|Unspecified|BaseIndex } - -movdir64b, 2, 0x660f38f8, None, 3, CpuMOVDIR64B|CpuNo64, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|AddrPrefixOpReg, { Unspecified|BaseIndex, Reg16|Reg32 } -movdir64b, 2, 0x660f38f8, None, 3, CpuMOVDIR64B|Cpu64, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64|AddrPrefixOpReg, { Unspecified|BaseIndex, Reg32|Reg64 } +movdiri, 2, 0xf38f9, None, 3, CpuMOVDIRI, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_ldSuf, { Reg32|Reg64, Dword|Qword|Unspecified|BaseIndex } +movdir64b, 2, 0x660f38f8, None, 3, CpuMOVDIR64B, Modrm|AddrPrefixOpReg, { Unspecified|BaseIndex, Reg16|Reg32|Reg64 } // MOVEDIR instructions end. @@ -4770,12 +4048,11 @@ vcvtne2ps2bf16, 3, 0xf272, None, 1, CpuAVX512_BF16, Modrm|VexOpcode|VexVVVV|Masking=3|VexW0|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } -vcvtneps2bf16, 2, 0xf372, None, 1, CpuAVX512_BF16|CpuAVX512VL, Modrm|VexOpcode|EVex128|Masking=3|VexW0|Broadcast|Disp8MemShift=4|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|BaseIndex, RegXMM } -vcvtneps2bf16, 2, 0xf372, None, 1, CpuAVX512_BF16|CpuAVX512VL, Modrm|VexOpcode|EVex256|Masking=3|VexW0|Broadcast|Disp8MemShift=5|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegYMM|Dword|BaseIndex, RegXMM } vcvtneps2bf16, 2, 0xf372, None, 1, CpuAVX512_BF16, Modrm|VexOpcode|EVex512|Masking=3|VexW0|Broadcast|Disp8MemShift=6|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegZMM|Dword|Unspecified|BaseIndex, RegYMM } - -vcvtneps2bf16x, 2, 0xf372, None, 1, CpuAVX512_BF16|CpuAVX512VL, Modrm|VexOpcode|EVex128|Masking=3|VexW0|Disp8MemShift=4|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTSyntax, { Unspecified|BaseIndex, RegXMM } -vcvtneps2bf16y, 2, 0xf372, None, 1, CpuAVX512_BF16|CpuAVX512VL, Modrm|VexOpcode|EVex256|Masking=3|VexW0|Disp8MemShift=5|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTSyntax, { Unspecified|BaseIndex, RegXMM } +vcvtneps2bf16, 2, 0xf372, None, 1, CpuAVX512_BF16|CpuAVX512VL, Modrm|VexOpcode|Masking=3|VexW0|Broadcast|Disp8ShiftVL|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IntelSyntax, { RegXMM|RegYMM|Dword|Unspecified|BaseIndex, RegXMM } +vcvtneps2bf16, 2, 0xf372, None, 1, CpuAVX512_BF16|CpuAVX512VL, Modrm|VexOpcode|Masking=3|VexW0|Broadcast|Disp8ShiftVL|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTSyntax, { RegXMM|RegYMM|Dword|BaseIndex, RegXMM } +vcvtneps2bf16x, 2, 0xf372, None, 1, CpuAVX512_BF16|CpuAVX512VL, Modrm|VexOpcode|EVex128|Masking=3|VexW0|Broadcast|Disp8MemShift=4|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTSyntax, { RegXMM|Dword|Unspecified|BaseIndex, RegXMM } +vcvtneps2bf16y, 2, 0xf372, None, 1, CpuAVX512_BF16|CpuAVX512VL, Modrm|VexOpcode|EVex256|Masking=3|VexW0|Broadcast|Disp8MemShift=5|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|ATTSyntax, { RegYMM|Dword|Unspecified|BaseIndex, RegXMM } vdpbf16ps, 3, 0xf352, None, 1, CpuAVX512_BF16, Modrm|VexOpcode|VexVVVV|Masking=3|VexW0|Broadcast|Disp8ShiftVL|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|RegYMM|RegZMM|Dword|Unspecified|BaseIndex, RegXMM|RegYMM|RegZMM, RegXMM|RegYMM|RegZMM } @@ -4783,10 +4060,8 @@ // ENQCMD instructions. -enqcmd, 2, 0xf20f38f8, None, 3, CpuENQCMD|CpuNo64, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|AddrPrefixOpReg, { Unspecified|BaseIndex, Reg16|Reg32 } -enqcmd, 2, 0xf20f38f8, None, 3, CpuENQCMD|Cpu64, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64|AddrPrefixOpReg, { Unspecified|BaseIndex, Reg32|Reg64 } -enqcmds, 2, 0xf30f38f8, None, 3, CpuENQCMD|CpuNo64, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|AddrPrefixOpReg, { Unspecified|BaseIndex, Reg16|Reg32 } -enqcmds, 2, 0xf30f38f8, None, 3, CpuENQCMD|Cpu64, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64|AddrPrefixOpReg, { Unspecified|BaseIndex, Reg32|Reg64 } +enqcmd, 2, 0xf20f38f8, None, 3, CpuENQCMD, Modrm|AddrPrefixOpReg, { Unspecified|BaseIndex, Reg16|Reg32|Reg64 } +enqcmds, 2, 0xf30f38f8, None, 3, CpuENQCMD, Modrm|AddrPrefixOpReg, { Unspecified|BaseIndex, Reg16|Reg32|Reg64 } // ENQCMD instructions end. @@ -4808,3 +4083,37 @@ rdpru, 0, 0x0f01fd, None, 3, CpuRDPRU, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 } // RDPRU instruction end + +// SERIALIZE instruction. + +serialize, 0, 0x0f01e8, None, 3, CpuSERIALIZE, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 } + +// SERIALIZE instruction end. + +// TSXLDTRK instructions. + +xsusldtrk, 0, 0xf20f01e8, None, 3, CpuTSXLDTRK, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 } +xresldtrk, 0, 0xf20f01e9, None, 3, CpuTSXLDTRK, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 } + +// TSXLDTRK instructions end. + +// AMX instructions. + +ldtilecfg, 1, 0x49, None, 1, CpuAMX_TILE|Cpu64, Modrm|Vex128|VexOpcode=1|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex } +sttilecfg, 1, 0x6649, None, 1, CpuAMX_TILE|Cpu64, Modrm|Vex128|VexOpcode=1|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex } + +tdpbf16ps, 3, 0xf35c, None, 1, CpuAMX_BF16|Cpu64, Modrm|Vex128|VexOpcode=1|VexVVVV=1|VexW0|SwapSources|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegTMM, RegTMM, RegTMM } +tdpbssd, 3, 0xf25e, None, 1, CpuAMX_INT8|Cpu64, Modrm|Vex128|VexOpcode=1|VexVVVV=1|VexW0|SwapSources|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegTMM, RegTMM, RegTMM } +tdpbuud, 3, 0x5e, None, 1, CpuAMX_INT8|Cpu64, Modrm|Vex128|VexOpcode=1|VexVVVV=1|VexW0|SwapSources|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegTMM, RegTMM, RegTMM } +tdpbusd, 3, 0x665e, None, 1, CpuAMX_INT8|Cpu64, Modrm|Vex128|VexOpcode=1|VexVVVV=1|VexW0|SwapSources|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegTMM, RegTMM, RegTMM } +tdpbsud, 3, 0xf35e, None, 1, CpuAMX_INT8|Cpu64, Modrm|Vex128|VexOpcode=1|VexVVVV=1|VexW0|SwapSources|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegTMM, RegTMM, RegTMM } + +tileloadd, 2, 0xf24b, None, 1, CpuAMX_TILE|Cpu64, Sibmem|Vex128|VexOpcode=1|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex, RegTMM } +tileloaddt1, 2, 0x664b, None, 1, CpuAMX_TILE|Cpu64, Sibmem|Vex128|VexOpcode=1|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex, RegTMM } +tilestored, 2, 0xf34b, None, 1, CpuAMX_TILE|Cpu64, Sibmem|Vex128|VexOpcode=1|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegTMM, Unspecified|BaseIndex } + +tilerelease, 0, 0x49c0, None, 2, CpuAMX_TILE|Cpu64, Vex128|VexOpcode=1|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 } + +tilezero, 1, 0xf249, None, 1, CpuAMX_TILE|Cpu64, Modrm|Vex128|VexOpcode=1|VexW0|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegTMM } + +// AMX instructions end. diff -Nru gdb-9.1/opcodes/i386-reg.tbl gdb-10.2/opcodes/i386-reg.tbl --- gdb-9.1/opcodes/i386-reg.tbl 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/i386-reg.tbl 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ // i386 register table. -// Copyright (C) 2007-2019 Free Software Foundation, Inc. +// Copyright (C) 2007-2020 Free Software Foundation, Inc. // // This file is part of the GNU opcodes library. // @@ -278,6 +278,15 @@ zmm29, Class=RegSIMD|Zmmword, RegVRex|RegRex, 5, Dw2Inval, Dw2Inval zmm30, Class=RegSIMD|Zmmword, RegVRex|RegRex, 6, Dw2Inval, Dw2Inval zmm31, Class=RegSIMD|Zmmword, RegVRex|RegRex, 7, Dw2Inval, Dw2Inval +// TMM registers for AMX +tmm0, Class=RegSIMD|Tmmword, 0, 0, Dw2Inval, Dw2Inval +tmm1, Class=RegSIMD|Tmmword, 0, 1, Dw2Inval, Dw2Inval +tmm2, Class=RegSIMD|Tmmword, 0, 2, Dw2Inval, Dw2Inval +tmm3, Class=RegSIMD|Tmmword, 0, 3, Dw2Inval, Dw2Inval +tmm4, Class=RegSIMD|Tmmword, 0, 4, Dw2Inval, Dw2Inval +tmm5, Class=RegSIMD|Tmmword, 0, 5, Dw2Inval, Dw2Inval +tmm6, Class=RegSIMD|Tmmword, 0, 6, Dw2Inval, Dw2Inval +tmm7, Class=RegSIMD|Tmmword, 0, 7, Dw2Inval, Dw2Inval // Bound registers for MPX bnd0, Class=RegBND, 0, 0, Dw2Inval, Dw2Inval bnd1, Class=RegBND, 0, 1, Dw2Inval, Dw2Inval diff -Nru gdb-9.1/opcodes/i386-tbl.h gdb-10.2/opcodes/i386-tbl.h --- gdb-9.1/opcodes/i386-tbl.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/i386-tbl.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* This file is automatically generated by i386-gen. Do not edit! */ -/* Copyright (C) 2007-2019 Free Software Foundation, Inc. +/* Copyright (C) 2007-2020 Free Software Foundation, Inc. This file is part of the GNU opcodes library. @@ -28,58438 +28,59600 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "mov", 0xa0, None, 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, 1, 0 } }, - { 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } }, - { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "mov", 0x88, None, 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, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "mov", 0xb0, None, 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 } }, - { 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 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 } } } }, { "mov", 0xc6, 0x0, 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 } }, - { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0 } }, + { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 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, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "mov", 0xb8, None, 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, 1, 0, 0 } }, - { 0, 0, 0, 0, 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, 0, 1, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 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 } } } }, { "mov", 0x8c, None, 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 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 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 }, { { { 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 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "mov", 0x8c, None, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 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, 1, 0, 1, 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 }, { { { 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, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "mov", 0x8e, None, 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 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 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 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 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 } } } }, { "mov", 0xf20, None, 2, 2, { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, - { 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 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, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 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 } } } }, { "mov", 0xf20, None, 2, 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, 1, 0, 0 } }, - { 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, - 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 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 }, { { { 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 } }, { { 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 } } } }, { "mov", 0xf21, None, 2, 2, { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, - { 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 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, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 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 } } } }, { "mov", 0xf21, None, 2, 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, 1, 0, 0 } }, - { 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, - 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 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 }, { { { 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 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 } } } }, { "mov", 0xf24, None, 2, 2, { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, - { 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 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, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 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 } } } }, { "movabs", 0xa0, None, 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, 1, 0, 0 } }, - { 1, 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, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 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, 1, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 1, 0 } }, { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "movabs", 0xb8, None, 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, 1, 0, 0 } }, - { 0, 0, 0, 0, 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, 0, 1, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 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 } } } }, { "movbe", 0x0f38f0, None, 3, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "movbe", 0x0f38f1, None, 3, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "movsbl", 0xfbe, None, 2, 2, { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "movsbw", 0xfbe, None, 2, 2, { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "movswl", 0xfbf, None, 2, 2, { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "movsbq", 0xfbe, None, 2, 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, 1, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 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, 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, 1, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "movswq", 0xfbf, None, 2, 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, 1, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 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, 1, 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, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "movslq", 0x63, None, 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, 1, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "movsx", 0xfbe, None, 2, 2, { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 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, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0 }, - { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "movsx", 0xfbf, None, 2, 2, - { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0 }, - { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "movsx", 0x63, None, 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, 1, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 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, 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, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "movsx", 0xfbe, None, 2, 2, - { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 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, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 }, - { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "movsx", 0xfbf, None, 2, 2, - { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 1, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "movsxd", 0x63, None, 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 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 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 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "movsx", 0x63, None, 1, 2, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "movsxd", 0x63, None, 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, 1, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 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, 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, 1, 0, 1, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 1, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "movsxd", 0x63, None, 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, 1, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 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, 0, 0, 0, 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, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "movzb", 0xfb6, None, 2, 2, { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "movzw", 0xfb7, None, 2, 2, { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "movzx", 0xfb6, None, 2, 2, - { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 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, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "movzx", 0xfb7, None, 2, 2, - { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "movzx", 0xfb6, None, 2, 2, { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 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, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 0, 0 }, - { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "movzx", 0xfb7, None, 2, 2, - { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0 }, - { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "push", 0x50, None, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { "push", 0xff, 0x6, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 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, 2, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 0, 1, 0, 1, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "push", 0x6a, None, 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, 1, 0 } }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 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, 0, 0, 0, 0, 2, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "push", 0x68, None, 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, 1, 0 } }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 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, 0, 0, 0, 0, 2, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { "push", 0x6, None, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 1, 0, 0, 1, 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, 0, 0, 0, 0, 2, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { "push", 0x50, None, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "push", 0xff, 0x6, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, 1, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 2, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "push", 0x6a, None, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "push", 0x68, None, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 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 } } } }, { "push", 0xfa0, None, 2, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, 1, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 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 } } } }, { "pusha", 0x60, None, 1, 0, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 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, 0, 0, 0, 0, 2, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "pop", 0x58, None, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { "pop", 0x8f, 0x0, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 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, 2, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 0, 1, 0, 1, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "pop", 0x7, None, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 1, 0, 0, 1, 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, 0, 0, 0, 0, 2, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { "pop", 0x58, None, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "pop", 0x8f, 0x0, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, 1, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 2, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "pop", 0xfa1, None, 2, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, 1, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 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 } } } }, { "popa", 0x61, None, 1, 0, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 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, 0, 0, 0, 0, 2, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "xchg", 0x90, None, 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 } }, - { 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 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, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 0, 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, 0, 0, 0, 0, 0 } } } }, { "xchg", 0x90, None, 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 } }, - { 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 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, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 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, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "xchg", 0x86, None, 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 } }, - { 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 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, 0, 0, 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, 1, 0, 0, 0, 0, 0, 1, 0, 1, 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, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "xchg", 0x86, None, 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 } }, - { 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 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, 0, 0, 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, 1, 0, 0, 0, 0, 0, 1, 0, 1, 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, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 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, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "in", 0xe4, None, 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 } }, - { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "in", 0xec, None, 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 } }, - { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "in", 0xe4, None, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "in", 0xec, None, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "out", 0xe6, None, 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 } }, - { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "out", 0xee, None, 1, 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 } }, - { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "out", 0xe6, None, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "out", 0xee, None, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "lea", 0x8d, None, 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 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 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, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 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, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "lds", 0xc5, None, 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, 1, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 1, 0, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "les", 0xc4, None, 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, 1, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 1, 0, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "lfs", 0xfb4, None, 2, 2, { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, - 1, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 1, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "lfs", 0xfb4, None, 2, 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, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 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, 2 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, + 1, 0, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "lgs", 0xfb5, None, 2, 2, { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, - 1, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 1, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "lgs", 0xfb5, None, 2, 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, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 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, 2 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, + 1, 0, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "lss", 0xfb2, None, 2, 2, { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, - 1, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 1, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "lss", 0xfb2, None, 2, 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, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 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, 2 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, + 1, 0, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "clc", 0xf8, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "cld", 0xfc, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "cli", 0xfa, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "clts", 0xf06, None, 2, 0, { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "cmc", 0xf5, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "lahf", 0x9f, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "sahf", 0x9e, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "pushf", 0x9c, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 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, 0, 0, 0, 0, 2, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "pushf", 0x9c, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "popf", 0x9d, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 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, 0, 0, 0, 0, 2, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "popf", 0x9d, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "stc", 0xf9, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "std", 0xfd, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "sti", 0xfb, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "add", 0x0, None, 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, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "add", 0x83, 0x0, 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 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "add", 0x4, None, 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 } }, - { 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "add", 0x80, 0x0, 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 } }, - { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "inc", 0x40, None, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { "inc", 0xfe, 0x0, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "sub", 0x28, None, 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, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "sub", 0x83, 0x5, 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 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "sub", 0x2c, None, 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 } }, - { 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "sub", 0x80, 0x5, 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 } }, - { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "dec", 0x48, None, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { "dec", 0xfe, 0x1, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "sbb", 0x18, None, 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, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "sbb", 0x83, 0x3, 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 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "sbb", 0x1c, None, 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 } }, - { 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "sbb", 0x80, 0x3, 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 } }, - { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "cmp", 0x38, None, 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, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "cmp", 0x83, 0x7, 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 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "cmp", 0x3c, None, 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 } }, - { 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "cmp", 0x80, 0x7, 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 } }, - { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "test", 0x84, None, 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 } }, - { 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "test", 0x84, None, 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 } }, - { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 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, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "test", 0xa8, None, 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 } }, - { 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "test", 0xf6, 0x0, 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 } }, - { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "and", 0x20, None, 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, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "and", 0x83, 0x4, 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 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "and", 0x24, None, 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 } }, - { 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "and", 0x80, 0x4, 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 } }, - { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "or", 0x8, None, 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, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "or", 0x83, 0x1, 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 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "or", 0xc, None, 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 } }, - { 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "or", 0x80, 0x1, 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 } }, - { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "xor", 0x30, None, 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, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "xor", 0x83, 0x6, 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 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "xor", 0x34, None, 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 } }, - { 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "xor", 0x80, 0x6, 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 } }, - { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "clr", 0x30, None, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "adc", 0x10, None, 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, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "adc", 0x83, 0x2, 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 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "adc", 0x14, None, 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 } }, - { 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "adc", 0x80, 0x2, 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 } }, - { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "neg", 0xf6, 0x3, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "not", 0xf6, 0x2, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "aaa", 0x37, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "aas", 0x3f, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "daa", 0x27, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "das", 0x2f, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "aad", 0xd50a, None, 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, 1, 0 } }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "aad", 0xd5, None, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "aam", 0xd40a, None, 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, 1, 0 } }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "aam", 0xd4, None, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "cbw", 0x98, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "cdqe", 0x98, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 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, 3, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "cwde", 0x98, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 2, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "cwd", 0x99, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "cdq", 0x99, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 2, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "cqo", 0x99, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 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, 3, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "cbtw", 0x98, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "cltq", 0x98, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 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, 3, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "cwtl", 0x98, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 2, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "cwtd", 0x99, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "cltd", 0x99, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 2, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "cqto", 0x99, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 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, 3, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "mul", 0xf6, 0x4, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 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, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "imul", 0xf6, 0x5, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 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, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "imul", 0xfaf, None, 2, 2, { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "imul", 0x6b, None, 1, 3, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "imul", 0x69, None, 1, 3, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "imul", 0x6b, None, 1, 2, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 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, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "imul", 0x69, None, 1, 2, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 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, 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, 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, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "div", 0xf6, 0x6, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 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, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "div", 0xf6, 0x6, 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 } }, - { 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 1, 0 } }, { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "idiv", 0xf6, 0x7, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 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, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "idiv", 0xf6, 0x7, 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 } }, - { 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 1, 0 } }, { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "rol", 0xd0, 0x0, 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 } }, - { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "rol", 0xc0, 0x0, 1, 2, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 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, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "rol", 0xd2, 0x0, 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 } }, - { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "rol", 0xd0, 0x0, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 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, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "ror", 0xd0, 0x1, 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 } }, - { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "ror", 0xc0, 0x1, 1, 2, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 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, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "ror", 0xd2, 0x1, 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 } }, - { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "ror", 0xd0, 0x1, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 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, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "rcl", 0xd0, 0x2, 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 } }, - { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "rcl", 0xc0, 0x2, 1, 2, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 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, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "rcl", 0xd2, 0x2, 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 } }, - { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "rcl", 0xd0, 0x2, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 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, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "rcr", 0xd0, 0x3, 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 } }, - { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "rcr", 0xc0, 0x3, 1, 2, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 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, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "rcr", 0xd2, 0x3, 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 } }, - { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "rcr", 0xd0, 0x3, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 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, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "sal", 0xd0, 0x4, 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 } }, - { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "sal", 0xc0, 0x4, 1, 2, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 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, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "sal", 0xd2, 0x4, 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 } }, - { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "sal", 0xd0, 0x4, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 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, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "shl", 0xd0, 0x4, 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 } }, - { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "shl", 0xc0, 0x4, 1, 2, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 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, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "shl", 0xd2, 0x4, 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 } }, - { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "shl", 0xd0, 0x4, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 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, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "shr", 0xd0, 0x5, 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 } }, - { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "shr", 0xc0, 0x5, 1, 2, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 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, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "shr", 0xd2, 0x5, 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 } }, - { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "shr", 0xd0, 0x5, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 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, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "sar", 0xd0, 0x7, 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 } }, - { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "sar", 0xc0, 0x7, 1, 2, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 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, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "sar", 0xd2, 0x7, 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 } }, - { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "sar", 0xd0, 0x7, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 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, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "shld", 0xfa4, None, 2, 3, { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "shld", 0xfa5, None, 2, 3, { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "shld", 0xfa5, None, 2, 2, { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "shrd", 0xfac, None, 2, 3, { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "shrd", 0xfad, None, 2, 3, { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "shrd", 0xfad, None, 2, 2, { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "call", 0xe8, None, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, - { 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 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, 1, 0 } }, + { 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 1, 0, 0, 1, 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, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "call", 0xe8, None, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, - { 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 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, 1, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 1, 0, 1, 1, 0, 1, 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, 1 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "call", 0xe8, None, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, - { 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 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, 1 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 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, 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, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "call", 0xff, 0x2, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, - { 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, - 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + { 0, 0, 0, 1, 5, 0, 0, 0, 0, 2, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "call", 0xff, 0x2, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 5, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, - 0, 0, 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, 0, 0, 0, 0, 1, 0 }, - { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 1, 5, 0, 0, 0, 0, 2, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, + 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, 0, 0, 0, 0, 1 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "call", 0xff, 0x2, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 5, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, - 0, 0, 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, 0, 0, 0, 0, 0, 1 }, - { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 1, 5, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, + 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, 0, 0, 0, 0, 2 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "call", 0x9a, None, 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, 1, 0 } }, - { 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + { 0, 0, 0, 0, 4, 0, 0, 0, 0, 2, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { "call", 0xff, 0x3, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 1, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 5, 0, 0, 0, 0, 2, 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, 1 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "call", 0xff, 0x3, 1, 1, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 5, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "lcall", 0x9a, None, 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, 1, 0 } }, - { 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + { 0, 0, 0, 0, 4, 0, 0, 0, 0, 2, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { "lcall", 0xff, 0x3, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 5, 0, 0, 0, 0, 2, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, - { "jmp", 0xeb, None, 1, 1, + 0, 0, 0, 0, 0, 1, 0 } } } }, + { "lcall", 0xff, 0x3, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 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, 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, 1, 0, 0 } }, + { 0, 0, 0, 1, 5, 0, 0, 0, 0, 0, 0, 1, 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, 2 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "jmp", 0xeb, None, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 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, 1, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 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, 1, 1, 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, 1 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "jmp", 0xeb, None, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 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, 1 }, + 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, 1, 1, 1, 1, 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, 2 }, { { { 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 } } } }, { "jmp", 0xff, 0x4, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, - { 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, - 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + { 0, 0, 0, 1, 5, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "jmp", 0xff, 0x4, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 5, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, - 0, 0, 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, 0, 0, 0, 0, 1, 0 }, - { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 1, 5, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, + 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, 0, 0, 0, 0, 1 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "jmp", 0xff, 0x4, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 5, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, - 0, 0, 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, 0, 0, 0, 0, 0, 1 }, - { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 1, 5, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, + 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, 0, 0, 0, 0, 2 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "jmp", 0xea, None, 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, 1, 0 } }, - { 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + { 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { "jmp", 0xff, 0x5, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 5, 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, 1 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "jmp", 0xff, 0x5, 1, 1, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 5, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "ljmp", 0xea, None, 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, 1, 0 } }, - { 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + { 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { "ljmp", 0xff, 0x5, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 5, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, + { "ljmp", 0xff, 0x5, 1, 1, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 5, 0, 0, 0, 0, 0, 0, 1, 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, 2 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0 } } } }, + { "ret", 0xc3, None, 1, 0, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "ret", 0xc2, None, 1, 1, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "ret", 0xc3, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 1, 1, 0, - 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, + 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "ret", 0xc2, None, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 1, 1, 0, - 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, + 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "ret", 0xc3, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 1, 0, 1, 0, - 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, + 1, 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, 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 } } } }, { "ret", 0xc2, None, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 1, 0, 1, 0, - 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, + 1, 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, 2 }, { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "lret", 0xcb, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 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, 2, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "lret", 0xca, None, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 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, 2, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "retf", 0xcb, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 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, 2, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "retf", 0xca, None, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 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, 2, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "enter", 0xc8, None, 1, 2, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 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, 0, 0, 0, 0, 2, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "enter", 0xc8, None, 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, 1, 0, 0 } }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "leave", 0xc9, None, 1, 0, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 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, 0, 0, 0, 0, 2, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "leave", 0xc9, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "jo", 0x70, None, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 1, 1, 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, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 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, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "jno", 0x71, None, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 1, 1, 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, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 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, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "jb", 0x72, None, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 1, 1, 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, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 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, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "jc", 0x72, None, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 1, 1, 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, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 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, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "jnae", 0x72, None, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 1, 1, 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, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 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, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "jnb", 0x73, None, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 1, 1, 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, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 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, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "jnc", 0x73, None, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 1, 1, 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, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 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, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "jae", 0x73, None, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 1, 1, 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, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 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, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "je", 0x74, None, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 1, 1, 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, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 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, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "jz", 0x74, None, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 1, 1, 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, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 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, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "jne", 0x75, None, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 1, 1, 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, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 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, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "jnz", 0x75, None, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 1, 1, 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, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 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, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "jbe", 0x76, None, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 1, 1, 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, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 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, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "jna", 0x76, None, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 1, 1, 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, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 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, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "jnbe", 0x77, None, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 1, 1, 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, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 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, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "ja", 0x77, None, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 1, 1, 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, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 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, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "js", 0x78, None, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 1, 1, 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, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 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, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "jns", 0x79, None, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 1, 1, 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, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 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, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "jp", 0x7a, None, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 1, 1, 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, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 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, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "jpe", 0x7a, None, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 1, 1, 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, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 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, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "jnp", 0x7b, None, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 1, 1, 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, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 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, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "jpo", 0x7b, None, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 1, 1, 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, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 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, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "jl", 0x7c, None, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 1, 1, 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, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 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, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "jnge", 0x7c, None, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 1, 1, 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, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 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, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "jnl", 0x7d, None, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 1, 1, 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, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 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, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "jge", 0x7d, None, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 1, 1, 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, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 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, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "jle", 0x7e, None, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 1, 1, 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, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 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, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "jng", 0x7e, None, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 1, 1, 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, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 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, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "jnle", 0x7f, None, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 1, 1, 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, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 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, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "jg", 0x7f, None, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 1, 1, 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, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 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, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "jcxz", 0xe3, None, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, - { 0, 0, 0, 0, 0, 3, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + { 0, 0, 0, 0, 3, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "jecxz", 0xe3, None, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 2, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 0, 3, 0, 0, 2, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "jrcxz", 0xe3, None, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, - { 0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "loop", 0xe2, None, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, - { 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + { 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "loop", 0xe2, None, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, - { 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "loopz", 0xe1, None, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, - { 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + { 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "loopz", 0xe1, None, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, - { 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "loope", 0xe1, None, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, - { 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + { 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "loope", 0xe1, None, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, - { 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "loopnz", 0xe0, None, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, - { 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + { 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "loopnz", 0xe0, None, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, - { 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "loopne", 0xe0, None, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, - { 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + { 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "loopne", 0xe0, None, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, - { 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "seto", 0xf90, 0x0, 2, 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, 0, 0, 0, - 0, 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, 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, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "setno", 0xf91, 0x0, 2, 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, 0, 0, 0, - 0, 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, 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, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "setb", 0xf92, 0x0, 2, 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, 0, 0, 0, - 0, 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, 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, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "setc", 0xf92, 0x0, 2, 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, 0, 0, 0, - 0, 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, 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, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "setnae", 0xf92, 0x0, 2, 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, 0, 0, 0, - 0, 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, 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, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "setnb", 0xf93, 0x0, 2, 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, 0, 0, 0, - 0, 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, 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, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "setnc", 0xf93, 0x0, 2, 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, 0, 0, 0, - 0, 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, 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, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "setae", 0xf93, 0x0, 2, 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, 0, 0, 0, - 0, 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, 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, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "sete", 0xf94, 0x0, 2, 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, 0, 0, 0, - 0, 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, 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, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "setz", 0xf94, 0x0, 2, 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, 0, 0, 0, - 0, 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, 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, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "setne", 0xf95, 0x0, 2, 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, 0, 0, 0, - 0, 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, 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, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "setnz", 0xf95, 0x0, 2, 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, 0, 0, 0, - 0, 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, 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, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "setbe", 0xf96, 0x0, 2, 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, 0, 0, 0, - 0, 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, 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, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "setna", 0xf96, 0x0, 2, 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, 0, 0, 0, - 0, 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, 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, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "setnbe", 0xf97, 0x0, 2, 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, 0, 0, 0, - 0, 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, 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, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "seta", 0xf97, 0x0, 2, 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, 0, 0, 0, - 0, 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, 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, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "sets", 0xf98, 0x0, 2, 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, 0, 0, 0, - 0, 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, 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, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "setns", 0xf99, 0x0, 2, 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, 0, 0, 0, - 0, 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, 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, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "setp", 0xf9a, 0x0, 2, 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, 0, 0, 0, - 0, 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, 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, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "setpe", 0xf9a, 0x0, 2, 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, 0, 0, 0, - 0, 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, 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, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "setnp", 0xf9b, 0x0, 2, 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, 0, 0, 0, - 0, 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, 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, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "setpo", 0xf9b, 0x0, 2, 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, 0, 0, 0, - 0, 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, 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, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "setl", 0xf9c, 0x0, 2, 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, 0, 0, 0, - 0, 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, 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, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "setnge", 0xf9c, 0x0, 2, 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, 0, 0, 0, - 0, 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, 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, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "setnl", 0xf9d, 0x0, 2, 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, 0, 0, 0, - 0, 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, 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, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "setge", 0xf9d, 0x0, 2, 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, 0, 0, 0, - 0, 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, 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, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "setle", 0xf9e, 0x0, 2, 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, 0, 0, 0, - 0, 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, 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, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "setng", 0xf9e, 0x0, 2, 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, 0, 0, 0, - 0, 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, 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, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "setnle", 0xf9f, 0x0, 2, 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, 0, 0, 0, - 0, 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, 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, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "setg", 0xf9f, 0x0, 2, 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, 0, 0, 0, - 0, 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, 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, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "cmps", 0xa6, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 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, - 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 } }, + { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "cmps", 0xa6, None, 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 } }, - { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, - 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 2, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 1, 0 } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "scmp", 0xa6, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 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, - 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 } }, + { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "scmp", 0xa6, None, 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 } }, - { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, - 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 2, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 1, 0 } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "ins", 0x6c, None, 1, 0, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "ins", 0x6c, None, 1, 2, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 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, - 3, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 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, 3, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "outs", 0x6e, None, 1, 0, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "outs", 0x6e, None, 1, 2, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0 } }, + 0, 0, 0, 0, 0, 1, 0 } }, { { 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "lods", 0xac, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 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, - 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 } }, + { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "lods", 0xac, None, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 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, - 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 } }, + { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "lods", 0xac, None, 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 } }, - { 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 1, 0 } }, { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "slod", 0xac, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 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, - 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 } }, + { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "slod", 0xac, None, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 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, - 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 } }, + { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "slod", 0xac, None, 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 } }, - { 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 1, 0 } }, { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "movs", 0xa4, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 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, - 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 } }, + { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "movs", 0xa4, None, 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 } }, - { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, - 3, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 3, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 1, 0 } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "smov", 0xa4, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 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, - 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 } }, + { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "smov", 0xa4, None, 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 } }, - { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, - 3, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 3, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 1, 0 } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "scas", 0xae, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 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, - 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 } }, + { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "scas", 0xae, None, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 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, - 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 2, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "scas", 0xae, None, 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 } }, - { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, - 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 2, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 1, 0 } }, { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "ssca", 0xae, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 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, - 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 } }, + { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "ssca", 0xae, None, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 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, - 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 2, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "ssca", 0xae, None, 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 } }, - { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, - 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 2, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 1, 0 } }, { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "stos", 0xaa, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 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, - 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 } }, + { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "stos", 0xaa, None, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 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, - 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 2, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "stos", 0xaa, None, 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 } }, - { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, - 3, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 3, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "ssto", 0xaa, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 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, - 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 } }, + { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "ssto", 0xaa, None, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 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, - 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 2, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "ssto", 0xaa, None, 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 } }, - { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, - 3, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 3, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "xlat", 0xd7, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 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, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "xlat", 0xd7, None, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 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, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "bsf", 0xfbc, None, 2, 2, { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "bsr", 0xfbd, None, 2, 2, { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "bt", 0xfa3, None, 2, 2, { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "bt", 0xfba, 0x4, 2, 2, { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "btc", 0xfbb, None, 2, 2, { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "btc", 0xfba, 0x7, 2, 2, { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "btr", 0xfb3, None, 2, 2, { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "btr", 0xfba, 0x6, 2, 2, { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "bts", 0xfab, None, 2, 2, { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "bts", 0xfba, 0x5, 2, 2, { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "int", 0xcd, None, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "int3", 0xcc, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "into", 0xce, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "iret", 0xcf, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 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, 2, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "rsm", 0xfaa, None, 2, 0, { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "bound", 0x62, None, 1, 2, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 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 }, { { { 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, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "hlt", 0xf4, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "nop", 0xf1f, 0x0, 2, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 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, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "nop", 0x90, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "arpl", 0x63, None, 1, 2, { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 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 }, { { { 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 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "lar", 0xf02, None, 2, 2, { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 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, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "lgdt", 0xf01, 0x2, 2, 1, { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 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, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "lgdt", 0xf01, 0x2, 2, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 1, 0 } } } }, { "lidt", 0xf01, 0x3, 2, 1, { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 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, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "lidt", 0xf01, 0x3, 2, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 1, 0 } } } }, { "lldt", 0xf00, 0x2, 2, 1, { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 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, 1, 0, 0, 0, 0, 0, 1, 0, 1, 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 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "lmsw", 0xf01, 0x6, 2, 1, { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 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, 1, 0, 0, 0, 0, 0, 1, 0, 1, 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 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "lsl", 0xf03, None, 2, 2, { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 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, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "ltr", 0xf00, 0x3, 2, 1, { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 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, 1, 0, 0, 0, 0, 0, 1, 0, 1, 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 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "sgdt", 0xf01, 0x0, 2, 1, { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 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, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "sgdt", 0xf01, 0x0, 2, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 1, 0 } } } }, { "sidt", 0xf01, 0x1, 2, 1, { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 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, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "sidt", 0xf01, 0x1, 2, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 1, 0 } } } }, { "sldt", 0xf00, 0x0, 2, 1, { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "sldt", 0xf00, 0x0, 2, 1, { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 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, 1, 0, 0, 0, 0, 0, 1, 0, 1, 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, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "smsw", 0xf01, 0x4, 2, 1, { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 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, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "smsw", 0xf01, 0x4, 2, 1, { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 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, 1, 0, 0, 0, 0, 0, 1, 0, 1, 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, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "str", 0xf00, 0x1, 2, 1, { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "str", 0xf00, 0x1, 2, 1, { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 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, 1, 0, 0, 0, 0, 0, 1, 0, 1, 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, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "verr", 0xf00, 0x4, 2, 1, { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 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, 1, 0, 0, 0, 0, 0, 1, 0, 1, 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 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "verw", 0xf00, 0x5, 2, 1, { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 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, 1, 0, 0, 0, 0, 0, 1, 0, 1, 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 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "fld", 0xd9c0, None, 2, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "fld", 0xd9, 0x0, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 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, 1, 0, 0, 0, 0, 0, 1, 1, 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, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "fld", 0xd9c0, None, 2, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 0, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 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, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "fld", 0xdb, 0x5, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 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, 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, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 1, 0 } } } }, + 1, 0, 0, 0, 0, 1, 0 } } } }, { "fild", 0xdf, 0x0, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 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, 1, 0, 0, 0, 0, 0, 1, 1, 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, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "fild", 0xdf, 0x5, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 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, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "fildll", 0xdf, 0x5, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "fldt", 0xdb, 0x5, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 1, 0 } } } }, + 1, 0, 0, 0, 0, 1, 0 } } } }, { "fbld", 0xdf, 0x4, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 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, 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, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 1, 0 } } } }, + 1, 0, 0, 0, 0, 1, 0 } } } }, { "fst", 0xddd0, None, 2, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "fst", 0xd9, 0x2, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 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, 1, 0, 0, 0, 0, 0, 1, 1, 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, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "fst", 0xddd0, None, 2, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 0, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 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, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "fist", 0xdf, 0x2, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 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, 1, 0, 0, 0, 0, 0, 1, 1, 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, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "fstp", 0xddd8, None, 2, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "fstp", 0xd9, 0x3, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 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, 1, 0, 0, 0, 0, 0, 1, 1, 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, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "fstp", 0xddd8, None, 2, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 0, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 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, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "fstp", 0xdb, 0x7, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 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, 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, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 1, 0 } } } }, + 1, 0, 0, 0, 0, 1, 0 } } } }, { "fistp", 0xdf, 0x3, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 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, 1, 0, 0, 0, 0, 0, 1, 1, 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, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "fistp", 0xdf, 0x7, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 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, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "fistpll", 0xdf, 0x7, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "fstpt", 0xdb, 0x7, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 1, 0 } } } }, + 1, 0, 0, 0, 0, 1, 0 } } } }, { "fbstp", 0xdf, 0x6, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 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, 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, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 1, 0 } } } }, + 1, 0, 0, 0, 0, 1, 0 } } } }, { "fxch", 0xd9c8, None, 2, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "fxch", 0xd9c9, None, 2, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "fcom", 0xd8d0, None, 2, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "fcom", 0xd8d1, None, 2, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "fcom", 0xd8, 0x2, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 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, 1, 0, 0, 0, 0, 0, 1, 1, 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, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "fcom", 0xd8d0, None, 2, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 0, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 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, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "ficom", 0xde, 0x2, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 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, 1, 0, 0, 0, 0, 0, 1, 1, 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, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "fcomp", 0xd8d8, None, 2, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "fcomp", 0xd8d9, None, 2, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "fcomp", 0xd8, 0x3, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 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, 1, 0, 0, 0, 0, 0, 1, 1, 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, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "fcomp", 0xd8d8, None, 2, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 0, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 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, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "ficomp", 0xde, 0x3, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 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, 1, 0, 0, 0, 0, 0, 1, 1, 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, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "fcompp", 0xded9, None, 2, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "fucom", 0xdde0, None, 2, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "fucom", 0xdde1, None, 2, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "fucomp", 0xdde8, None, 2, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "fucomp", 0xdde9, None, 2, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "fucompp", 0xdae9, None, 2, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "ftst", 0xd9e4, None, 2, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "fxam", 0xd9e5, None, 2, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "fld1", 0xd9e8, None, 2, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "fldl2t", 0xd9e9, None, 2, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "fldl2e", 0xd9ea, None, 2, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "fldpi", 0xd9eb, None, 2, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "fldlg2", 0xd9ec, None, 2, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "fldln2", 0xd9ed, None, 2, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "fldz", 0xd9ee, None, 2, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "fadd", 0xd8c0, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } }, + 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, - 1, 0, 0, 0, 0, 0 } } } }, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "fadd", 0xd8c0, None, 2, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "fadd", 0xdec1, None, 2, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "fadd", 0xd8, 0x0, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 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, 1, 0, 0, 0, 0, 0, 1, 1, 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, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "fiadd", 0xde, 0x0, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 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, 1, 0, 0, 0, 0, 0, 1, 1, 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, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "faddp", 0xdec0, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } }, + 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, - 1, 0, 0, 0, 0, 0 } } } }, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "faddp", 0xdec0, None, 2, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "faddp", 0xdec1, None, 2, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "faddp", 0xdec0, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } }, + 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, - 1, 0, 0, 0, 0, 0 } } } }, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "fsub", 0xd8e0, None, 2, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "fsub", 0xd8e0, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 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, 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, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 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 } }, + 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, - 1, 0, 0, 0, 0, 0 } } } }, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "fsub", 0xdee1, None, 2, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "fsub", 0xdee9, None, 2, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "fsub", 0xd8e0, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } }, + 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, - 1, 0, 0, 0, 0, 0 } } } }, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "fsub", 0xd8, 0x4, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 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, 1, 0, 0, 0, 0, 0, 1, 1, 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, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "fisub", 0xde, 0x4, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 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, 1, 0, 0, 0, 0, 0, 1, 1, 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, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "fsubp", 0xdee0, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 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 } }, + 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, - 1, 0, 0, 0, 0, 0 } } } }, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "fsubp", 0xdee0, None, 2, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 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 } } } }, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "fsubp", 0xdee1, None, 2, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "fsubp", 0xdee8, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } }, + 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, - 1, 0, 0, 0, 0, 0 } } } }, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "fsubp", 0xdee8, None, 2, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "fsubp", 0xdee9, None, 2, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "fsubr", 0xd8e8, None, 2, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "fsubr", 0xd8e8, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 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, 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, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 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 } }, + 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, - 1, 0, 0, 0, 0, 0 } } } }, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "fsubr", 0xdee9, None, 2, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "fsubr", 0xdee1, None, 2, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "fsubr", 0xd8e8, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } }, + 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, - 1, 0, 0, 0, 0, 0 } } } }, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "fsubr", 0xd8, 0x5, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 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, 1, 0, 0, 0, 0, 0, 1, 1, 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, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "fisubr", 0xde, 0x5, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 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, 1, 0, 0, 0, 0, 0, 1, 1, 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, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "fsubrp", 0xdee8, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 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 } }, + 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, - 1, 0, 0, 0, 0, 0 } } } }, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "fsubrp", 0xdee8, None, 2, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 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 } } } }, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "fsubrp", 0xdee9, None, 2, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "fsubrp", 0xdee0, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } }, + 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, - 1, 0, 0, 0, 0, 0 } } } }, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "fsubrp", 0xdee0, None, 2, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "fsubrp", 0xdee1, None, 2, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "fmul", 0xd8c8, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } }, + 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, - 1, 0, 0, 0, 0, 0 } } } }, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "fmul", 0xd8c8, None, 2, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "fmul", 0xdec9, None, 2, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "fmul", 0xd8, 0x1, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 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, 1, 0, 0, 0, 0, 0, 1, 1, 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, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "fimul", 0xde, 0x1, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 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, 1, 0, 0, 0, 0, 0, 1, 1, 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, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "fmulp", 0xdec8, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } }, + 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, - 1, 0, 0, 0, 0, 0 } } } }, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "fmulp", 0xdec8, None, 2, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "fmulp", 0xdec9, None, 2, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "fmulp", 0xdec8, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } }, + 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, - 1, 0, 0, 0, 0, 0 } } } }, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "fdiv", 0xd8f0, None, 2, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "fdiv", 0xd8f0, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 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, 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, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 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 } }, + 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, - 1, 0, 0, 0, 0, 0 } } } }, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "fdiv", 0xdef1, None, 2, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "fdiv", 0xdef9, None, 2, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "fdiv", 0xd8f0, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } }, + 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, - 1, 0, 0, 0, 0, 0 } } } }, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "fdiv", 0xd8, 0x6, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 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, 1, 0, 0, 0, 0, 0, 1, 1, 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, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "fidiv", 0xde, 0x6, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 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, 1, 0, 0, 0, 0, 0, 1, 1, 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, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "fdivp", 0xdef0, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 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 } }, + 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, - 1, 0, 0, 0, 0, 0 } } } }, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "fdivp", 0xdef0, None, 2, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 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 } } } }, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "fdivp", 0xdef1, None, 2, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "fdivp", 0xdef8, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } }, + 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, - 1, 0, 0, 0, 0, 0 } } } }, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "fdivp", 0xdef8, None, 2, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "fdivp", 0xdef9, None, 2, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "fdivr", 0xd8f8, None, 2, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "fdivr", 0xd8f8, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 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, 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, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 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 } }, + 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, - 1, 0, 0, 0, 0, 0 } } } }, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "fdivr", 0xdef9, None, 2, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "fdivr", 0xdef1, None, 2, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "fdivr", 0xd8f8, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } }, + 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, - 1, 0, 0, 0, 0, 0 } } } }, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "fdivr", 0xd8, 0x7, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 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, 1, 0, 0, 0, 0, 0, 1, 1, 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, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "fidivr", 0xde, 0x7, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 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, 1, 0, 0, 0, 0, 0, 1, 1, 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, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "fdivrp", 0xdef8, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 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 } }, + 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, - 1, 0, 0, 0, 0, 0 } } } }, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "fdivrp", 0xdef8, None, 2, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 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 } } } }, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "fdivrp", 0xdef9, None, 2, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "fdivrp", 0xdef0, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } }, + 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, - 1, 0, 0, 0, 0, 0 } } } }, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "fdivrp", 0xdef0, None, 2, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "fdivrp", 0xdef1, None, 2, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "f2xm1", 0xd9f0, None, 2, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "fyl2x", 0xd9f1, None, 2, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "fptan", 0xd9f2, None, 2, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "fpatan", 0xd9f3, None, 2, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "fxtract", 0xd9f4, None, 2, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "fprem1", 0xd9f5, None, 2, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "fdecstp", 0xd9f6, None, 2, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "fincstp", 0xd9f7, None, 2, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "fprem", 0xd9f8, None, 2, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "fyl2xp1", 0xd9f9, None, 2, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "fsqrt", 0xd9fa, None, 2, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "fsincos", 0xd9fb, None, 2, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "frndint", 0xd9fc, None, 2, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "fscale", 0xd9fd, None, 2, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "fsin", 0xd9fe, None, 2, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "fcos", 0xd9ff, None, 2, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "fchs", 0xd9e0, None, 2, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "fabs", 0xd9e1, None, 2, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "fninit", 0xdbe3, None, 2, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "finit", 0xdbe3, None, 2, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "fldcw", 0xd9, 0x5, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 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, 1, 0, 0, 0, 0, 0, 1, 0, 1, 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, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "fnstcw", 0xd9, 0x7, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 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, 1, 0, 0, 0, 0, 0, 1, 0, 1, 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, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "fstcw", 0xd9, 0x7, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 1, 1, 1, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "fnstsw", 0xdfe0, None, 2, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 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, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { "fnstsw", 0xdd, 0x7, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 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, 1, 0, 0, 0, 0, 0, 1, 0, 1, 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, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "fnstsw", 0xdfe0, None, 2, 0, { { 0, 0, 0, 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, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "fstsw", 0xdfe0, None, 2, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 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, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { "fstsw", 0xdd, 0x7, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 1, 1, 1, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "fstsw", 0xdfe0, None, 2, 0, { { 0, 0, 0, 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, 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, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "fnclex", 0xdbe2, None, 2, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "fclex", 0xdbe2, None, 2, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "fnstenv", 0xd9, 0x6, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 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, 1, 1, 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, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "fstenv", 0xd9, 0x6, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 1, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "fldenv", 0xd9, 0x4, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 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, 1, 1, 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, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "fnsave", 0xdd, 0x6, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 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, 1, 1, 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, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "fsave", 0xdd, 0x6, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 1, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "frstor", 0xdd, 0x4, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 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, 1, 1, 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, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "fneni", 0xdbe0, None, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "feni", 0xdbe0, None, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "fndisi", 0xdbe1, None, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "fdisi", 0xdbe1, None, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "fnsetpm", 0xdbe4, None, 2, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "fsetpm", 0xdbe4, None, 2, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "frstpm", 0xdbe5, None, 2, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "ffree", 0xddc0, None, 2, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "ffreep", 0xdfc0, None, 2, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "fnop", 0xd9d0, None, 2, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "fwait", 0x9b, None, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "addr16", 0x67, None, 1, 0, { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "addr32", 0x67, None, 1, 0, { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 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, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "aword", 0x67, None, 1, 0, { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "adword", 0x67, None, 1, 0, { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 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, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "data16", 0x66, None, 1, 0, { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "data32", 0x66, None, 1, 0, { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, - { 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "word", 0x66, None, 1, 0, { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "dword", 0x66, None, 1, 0, { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, - { 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "lock", 0xf0, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "wait", 0x9b, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "cs", 0x2e, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "ds", 0x3e, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "es", 0x26, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "fs", 0x64, None, 1, 0, { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "gs", 0x65, None, 1, 0, { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "ss", 0x36, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "rep", 0xf3, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "repe", 0xf3, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "repz", 0xf3, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "repne", 0xf2, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "repnz", 0xf2, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "ht", 0x3e, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "hnt", 0x2e, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "rex", 0x40, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "rexz", 0x41, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "rexy", 0x42, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "rexyz", 0x43, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "rexx", 0x44, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "rexxz", 0x45, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "rexxy", 0x46, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "rexxyz", 0x47, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "rex64", 0x48, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "rex64z", 0x49, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "rex64y", 0x4a, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "rex64yz", 0x4b, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "rex64x", 0x4c, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "rex64xz", 0x4d, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "rex64xy", 0x4e, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "rex64xyz", 0x4f, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "rex.b", 0x41, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "rex.x", 0x42, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "rex.xb", 0x43, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "rex.r", 0x44, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "rex.rb", 0x45, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "rex.rx", 0x46, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "rex.rxb", 0x47, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "rex.w", 0x48, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "rex.wb", 0x49, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "rex.wx", 0x4a, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "rex.wxb", 0x4b, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "rex.wr", 0x4c, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "rex.wrb", 0x4d, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "rex.wrx", 0x4e, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "rex.wrxb", 0x4f, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, - { "{disp8}", 0x0, None, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "{disp8}", 0, None, 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, - { "{disp32}", 0x1, None, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "{disp16}", 1, None, 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, - { "{load}", 0x2, None, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "{disp32}", 2, None, 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, - { "{store}", 0x3, None, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "{load}", 3, None, 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, - { "{vex2}", 0x4, None, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "{store}", 4, None, 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, - { "{vex3}", 0x5, None, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "{vex}", 5, None, 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, - { "{evex}", 0x6, None, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "{vex2}", 5, None, 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, - { "{rex}", 0x7, None, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "{vex3}", 6, None, 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, - { "{nooptimize}", 0x8, None, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "{evex}", 7, None, 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "{rex}", 8, None, 0, 0, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "{nooptimize}", 9, None, 0, 0, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "bswap", 0xfc8, None, 2, 1, { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "xadd", 0xfc0, None, 2, 2, { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "cmpxchg", 0xfb0, None, 2, 2, { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "invd", 0xf08, None, 2, 0, { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "wbinvd", 0xf09, None, 2, 0, { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "invlpg", 0xf01, 0x7, 2, 1, { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "cpuid", 0xfa2, None, 2, 0, { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "wrmsr", 0xf30, None, 2, 0, { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "rdtsc", 0xf31, None, 2, 0, { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "rdmsr", 0xf32, None, 2, 0, { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "cmpxchg8b", 0xfc7, 0x1, 2, 1, { { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, - 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 0, 1, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, + { "sysenter", 0xf34, None, 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, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "sysenter", 0xf34, None, 2, 0, { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "sysexit", 0xf35, None, 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, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "sysexit", 0xf35, None, 2, 0, { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "fxsave", 0xfae, 0x0, 2, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 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, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "fxsave64", 0xfae, 0x0, 2, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "fxrstor", 0xfae, 0x1, 2, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 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, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "fxrstor64", 0xfae, 0x1, 2, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "rdpmc", 0xf33, None, 2, 0, { { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "ud2", 0xf0b, None, 2, 0, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "ud2a", 0xf0b, None, 2, 0, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "ud1", 0xfb9, None, 2, 2, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 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, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "ud2b", 0xfb9, None, 2, 2, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 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, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "ud0", 0xfff, None, 2, 2, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 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, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "cmovo", 0xf40, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "cmovno", 0xf41, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "cmovb", 0xf42, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "cmovc", 0xf42, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "cmovnae", 0xf42, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "cmovae", 0xf43, None, 2, 2, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "cmovnb", 0xf43, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "cmovnc", 0xf43, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "cmovnb", 0xf43, None, 2, 2, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "cmovae", 0xf43, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "cmove", 0xf44, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "cmovz", 0xf44, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "cmovne", 0xf45, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "cmovnz", 0xf45, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "cmovbe", 0xf46, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "cmovna", 0xf46, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "cmova", 0xf47, None, 2, 2, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "cmovnbe", 0xf47, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "cmovnbe", 0xf47, None, 2, 2, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "cmova", 0xf47, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "cmovs", 0xf48, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "cmovns", 0xf49, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "cmovp", 0xf4a, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "cmovnp", 0xf4b, None, 2, 2, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "cmovpe", 0xf4a, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "cmovl", 0xf4c, None, 2, 2, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "cmovnp", 0xf4b, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "cmovnge", 0xf4c, None, 2, 2, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "cmovpo", 0xf4b, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "cmovge", 0xf4d, None, 2, 2, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "cmovl", 0xf4c, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "cmovnl", 0xf4d, None, 2, 2, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "cmovnge", 0xf4c, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "cmovle", 0xf4e, None, 2, 2, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "cmovnl", 0xf4d, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "cmovng", 0xf4e, None, 2, 2, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "cmovge", 0xf4d, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "cmovg", 0xf4f, None, 2, 2, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "cmovle", 0xf4e, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "cmovnle", 0xf4f, None, 2, 2, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "cmovng", 0xf4e, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "cmovpe", 0xf4a, None, 2, 2, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "cmovnle", 0xf4f, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "cmovpo", 0xf4b, None, 2, 2, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "cmovg", 0xf4f, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "fcmovb", 0xdac0, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } }, + 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, - 1, 0, 0, 0, 0, 0 } } } }, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "fcmovnae", 0xdac0, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } }, + 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, - 1, 0, 0, 0, 0, 0 } } } }, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "fcmove", 0xdac8, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } }, + 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, - 1, 0, 0, 0, 0, 0 } } } }, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "fcmovbe", 0xdad0, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } }, + 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, - 1, 0, 0, 0, 0, 0 } } } }, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "fcmovna", 0xdad0, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } }, + 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, - 1, 0, 0, 0, 0, 0 } } } }, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "fcmovu", 0xdad8, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } }, + 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, - 1, 0, 0, 0, 0, 0 } } } }, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "fcmovae", 0xdbc0, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } }, + 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, - 1, 0, 0, 0, 0, 0 } } } }, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "fcmovnb", 0xdbc0, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } }, + 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, - 1, 0, 0, 0, 0, 0 } } } }, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "fcmovne", 0xdbc8, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } }, + 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, - 1, 0, 0, 0, 0, 0 } } } }, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "fcmova", 0xdbd0, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } }, + 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, - 1, 0, 0, 0, 0, 0 } } } }, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "fcmovnbe", 0xdbd0, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } }, + 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, - 1, 0, 0, 0, 0, 0 } } } }, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "fcmovnu", 0xdbd8, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } }, + 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, - 1, 0, 0, 0, 0, 0 } } } }, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "fcomi", 0xdbf0, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } }, + 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, - 1, 0, 0, 0, 0, 0 } } } }, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "fcomi", 0xdbf1, None, 2, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "fcomi", 0xdbf0, None, 2, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "fucomi", 0xdbe8, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } }, + 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, - 1, 0, 0, 0, 0, 0 } } } }, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "fucomi", 0xdbe9, None, 2, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "fucomi", 0xdbe8, None, 2, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "fcomip", 0xdff0, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } }, + 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, - 1, 0, 0, 0, 0, 0 } } } }, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "fcomip", 0xdff1, None, 2, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "fcomip", 0xdff0, None, 2, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "fcompi", 0xdff0, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } }, + 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, - 1, 0, 0, 0, 0, 0 } } } }, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "fcompi", 0xdff1, None, 2, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "fcompi", 0xdff0, None, 2, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "fucomip", 0xdfe8, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } }, + 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, - 1, 0, 0, 0, 0, 0 } } } }, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "fucomip", 0xdfe9, None, 2, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "fucomip", 0xdfe8, None, 2, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "fucompi", 0xdfe8, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } }, + 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, - 1, 0, 0, 0, 0, 0 } } } }, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "fucompi", 0xdfe9, None, 2, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "fucompi", 0xdfe8, None, 2, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, + 1, 0, 0, 0, 0, 0, 0 } } } }, { "movnti", 0xfc3, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 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, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 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, 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 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "clflush", 0xfae, 0x7, 2, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "lfence", 0xfaee8, None, 3, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "mfence", 0xfaef0, None, 3, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "pause", 0xf390, None, 2, 0, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "emms", 0xf77, None, 2, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "movd", 0x666e, None, 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, 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 } }, - { 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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 } }, + { 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 1, 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, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "movd", 0x666e, None, 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, 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, 1, 0, 0 } }, - { 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 2, - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 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, 1, 0, 0 } }, + { 1, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 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, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "movd", 0x660f6e, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 1, 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, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "movd", 0x660f6e, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 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, 1, 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, 1, 0, 0 } }, + { 1, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 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 } } } }, { "movd", 0xf6e, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "movd", 0xf6e, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 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, 1, 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, 1, 0, 0 } }, + { 1, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, + 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 } } } }, { "movq", 0xa1, None, 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, 1, 0, 0 } }, - { 1, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 1, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "movq", 0x89, None, 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, 1, 0, 0 } }, - { 1, 0, 0, 1, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 3, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "movq", 0xc7, 0x0, 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, 1, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 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, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 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, 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, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "movq", 0xb8, None, 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, 1, 0, 0 } }, - { 0, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 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 } } } }, { "movq", 0xf37e, None, 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, 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, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "movq", 0x66d6, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } } } }, + 0, 1, 0, 0, 0, 1, 0 } } } }, { "movq", 0x666e, None, 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, 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, 1, 0, 0 } }, - { 1, 0, 0, 1, 0, 0, 0, 0, 3, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 1, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 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, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "movq", 0xf30f7e, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "movq", 0x660fd6, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } } } }, + 0, 1, 0, 0, 0, 1, 0 } } } }, { "movq", 0x660f6e, None, 2, 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, 1, 0, 0 } }, - { 1, 0, 0, 1, 0, 0, 0, 0, 3, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 1, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "movq", 0xf6f, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 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 }, { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "movq", 0xf6e, None, 2, 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, 1, 0, 0 } }, - { 1, 0, 0, 1, 0, 0, 0, 0, 3, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 1, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "movq", 0x8c, None, 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, 1, 0, 0 } }, - { 1, 0, 0, 1, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 1, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } }, { { 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 } } } }, { "movq", 0xf20, None, 2, 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, 1, 0, 0 } }, - { 1, 0, 0, 1, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 1, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 1, 1, 1, 1, 1, 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 }, { { { 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 } }, { { 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 } } } }, { "movq", 0xf21, None, 2, 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, 1, 0, 0 } }, - { 1, 0, 0, 1, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 1, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 1, 1, 1, 1, 1, 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 }, { { { 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 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 } } } }, { "packssdw", 0x666b, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "packssdw", 0x660f6b, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "packssdw", 0xf6b, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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 }, { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "packsswb", 0x6663, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "packsswb", 0x660f63, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "packsswb", 0xf63, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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 }, { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "packuswb", 0x6667, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "packuswb", 0x660f67, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "packuswb", 0xf67, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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 }, { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "paddb", 0x66fc, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "paddb", 0x660ffc, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "paddb", 0xffc, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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 }, { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "paddw", 0x66fd, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "paddw", 0x660ffd, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "paddw", 0xffd, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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 }, { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "paddd", 0x66fe, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "paddd", 0x660ffe, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "paddd", 0xffe, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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 }, { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "paddq", 0x66d4, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "paddq", 0x660fd4, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "paddq", 0xfd4, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "paddsb", 0x66ec, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "paddsb", 0x660fec, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "paddsb", 0xfec, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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 }, { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "paddsw", 0x66ed, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "paddsw", 0x660fed, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "paddsw", 0xfed, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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 }, { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "paddusb", 0x66dc, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "paddusb", 0x660fdc, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "paddusb", 0xfdc, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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 }, { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "paddusw", 0x66dd, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "paddusw", 0x660fdd, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "paddusw", 0xfdd, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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 }, { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "pand", 0x66db, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pand", 0x660fdb, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pand", 0xfdb, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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 }, { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "pandn", 0x66df, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pandn", 0x660fdf, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pandn", 0xfdf, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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 }, { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "pcmpeqb", 0x6674, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pcmpeqb", 0x660f74, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pcmpeqb", 0xf74, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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 }, { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "pcmpeqw", 0x6675, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pcmpeqw", 0x660f75, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pcmpeqw", 0xf75, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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 }, { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "pcmpeqd", 0x6676, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pcmpeqd", 0x660f76, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pcmpeqd", 0xf76, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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 }, { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "pcmpgtb", 0x6664, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pcmpgtb", 0x660f64, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pcmpgtb", 0xf64, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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 }, { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "pcmpgtw", 0x6665, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pcmpgtw", 0x660f65, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pcmpgtw", 0xf65, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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 }, { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "pcmpgtd", 0x6666, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pcmpgtd", 0x660f66, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pcmpgtd", 0xf66, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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 }, { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "pmaddwd", 0x66f5, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pmaddwd", 0x660ff5, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pmaddwd", 0xff5, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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 }, { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "pmulhw", 0x66e5, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pmulhw", 0x660fe5, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pmulhw", 0xfe5, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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 }, { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "pmullw", 0x66d5, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pmullw", 0x660fd5, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pmullw", 0xfd5, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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 }, { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "por", 0x66eb, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "por", 0x660feb, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "por", 0xfeb, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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 }, { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "psllw", 0x6671, 0x6, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 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, 0 } }, { { 7, 0, 0, 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 } } } }, { "psllw", 0x66f1, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "psllw", 0x660f71, 0x6, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 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 } } } }, { "psllw", 0x660ff1, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "psllw", 0xf71, 0x6, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 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 } } } }, { "psllw", 0xff1, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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 }, { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "pslld", 0x6672, 0x6, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 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, 0 } }, { { 7, 0, 0, 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 } } } }, { "pslld", 0x66f2, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pslld", 0x660f72, 0x6, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 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 } } } }, { "pslld", 0x660ff2, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pslld", 0xf72, 0x6, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 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 } } } }, { "pslld", 0xff2, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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 }, { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "psllq", 0x6673, 0x6, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 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, 0 } }, { { 7, 0, 0, 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 } } } }, { "psllq", 0x66f3, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "psllq", 0x660f73, 0x6, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 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 } } } }, { "psllq", 0x660ff3, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "psllq", 0xf73, 0x6, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 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 } } } }, { "psllq", 0xff3, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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 }, { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "psraw", 0x6671, 0x4, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 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, 0 } }, { { 7, 0, 0, 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 } } } }, { "psraw", 0x66e1, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "psraw", 0x660f71, 0x4, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 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 } } } }, { "psraw", 0x660fe1, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "psraw", 0xf71, 0x4, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 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 } } } }, { "psraw", 0xfe1, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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 }, { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "psrad", 0x6672, 0x4, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 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, 0 } }, { { 7, 0, 0, 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 } } } }, { "psrad", 0x66e2, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "psrad", 0x660f72, 0x4, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 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 } } } }, { "psrad", 0x660fe2, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "psrad", 0xf72, 0x4, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 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 } } } }, { "psrad", 0xfe2, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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 }, { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "psrlw", 0x6671, 0x2, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 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, 0 } }, { { 7, 0, 0, 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 } } } }, { "psrlw", 0x66d1, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "psrlw", 0x660f71, 0x2, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 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 } } } }, { "psrlw", 0x660fd1, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "psrlw", 0xf71, 0x2, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 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 } } } }, { "psrlw", 0xfd1, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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 }, { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "psrld", 0x6672, 0x2, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 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, 0 } }, { { 7, 0, 0, 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 } } } }, { "psrld", 0x66d2, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "psrld", 0x660f72, 0x2, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 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 } } } }, { "psrld", 0x660fd2, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "psrld", 0xf72, 0x2, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 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 } } } }, { "psrld", 0xfd2, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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 }, { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "psrlq", 0x6673, 0x2, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 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, 0 } }, { { 7, 0, 0, 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 } } } }, { "psrlq", 0x66d3, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "psrlq", 0x660f73, 0x2, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 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 } } } }, { "psrlq", 0x660fd3, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "psrlq", 0xf73, 0x2, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 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 } } } }, { "psrlq", 0xfd3, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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 }, { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "psubb", 0x66f8, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "psubb", 0x660ff8, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "psubb", 0xff8, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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 }, { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "psubw", 0x66f9, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "psubw", 0x660ff9, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "psubw", 0xff9, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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 }, { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "psubd", 0x66fa, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "psubd", 0x660ffa, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "psubd", 0xffa, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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 }, { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "psubq", 0x66fb, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "psubq", 0x660ffb, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "psubq", 0xffb, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "psubsb", 0x66e8, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "psubsb", 0x660fe8, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "psubsb", 0xfe8, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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 }, { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "psubsw", 0x66e9, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "psubsw", 0x660fe9, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "psubsw", 0xfe9, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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 }, { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "psubusb", 0x66d8, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "psubusb", 0x660fd8, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "psubusb", 0xfd8, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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 }, { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "psubusw", 0x66d9, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "psubusw", 0x660fd9, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "psubusw", 0xfd9, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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 }, { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "punpckhbw", 0x6668, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "punpckhbw", 0x660f68, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "punpckhbw", 0xf68, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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 }, { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "punpckhwd", 0x6669, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "punpckhwd", 0x660f69, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "punpckhwd", 0xf69, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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 }, { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "punpckhdq", 0x666a, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "punpckhdq", 0x660f6a, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "punpckhdq", 0xf6a, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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 }, { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "punpcklbw", 0x6660, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "punpcklbw", 0x660f60, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "punpcklbw", 0xf60, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "punpcklwd", 0x6661, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "punpcklwd", 0x660f61, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "punpcklwd", 0xf61, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "punpckldq", 0x6662, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "punpckldq", 0x660f62, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "punpckldq", 0xf62, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "pxor", 0x66ef, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pxor", 0x660fef, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pxor", 0xfef, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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 }, { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "addps", 0x58, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "addps", 0xf58, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "addss", 0xf358, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "addss", 0xf30f58, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "andnps", 0x55, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "andnps", 0xf55, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "andps", 0x54, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "andps", 0xf54, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "cmpeqps", 0xc2, 0x0, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "cmpeqps", 0xc2, 0, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, - 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "cmpeqps", 0xfc2, 0x0, 2, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "cmpeqps", 0xfc2, 0, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "cmpeqss", 0xf3c2, 0x0, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "cmpltps", 0xc2, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 1, - 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "cmpeqss", 0xf30fc2, 0x0, 2, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "cmpltps", 0xfc2, 1, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 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 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 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 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "cmpleps", 0xc2, 0x2, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "cmpleps", 0xc2, 2, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "cmpleps", 0xfc2, 0x2, 2, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "cmpleps", 0xfc2, 2, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "cmpless", 0xf3c2, 0x2, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "cmpunordps", 0xc2, 3, 1, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 1, - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "cmpless", 0xf30fc2, 0x2, 2, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "cmpunordps", 0xfc2, 3, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 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 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 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 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "cmpltps", 0xc2, 0x1, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "cmpneqps", 0xc2, 4, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "cmpltps", 0xfc2, 0x1, 2, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "cmpneqps", 0xfc2, 4, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "cmpltss", 0xf3c2, 0x1, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "cmpnltps", 0xc2, 5, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 1, - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "cmpltss", 0xf30fc2, 0x1, 2, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "cmpnltps", 0xfc2, 5, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 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 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 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 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "cmpneqps", 0xc2, 0x4, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "cmpnleps", 0xc2, 6, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, - 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "cmpneqps", 0xfc2, 0x4, 2, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "cmpnleps", 0xfc2, 6, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "cmpneqss", 0xf3c2, 0x4, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "cmpordps", 0xc2, 7, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 1, - 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "cmpneqss", 0xf30fc2, 0x4, 2, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "cmpordps", 0xfc2, 7, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 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 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 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 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "cmpnleps", 0xc2, 0x6, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "cmpeqss", 0xf3c2, 0, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "cmpnleps", 0xfc2, 0x6, 2, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "cmpeqss", 0xf30fc2, 0, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 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 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "cmpnless", 0xf3c2, 0x6, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "cmpltss", 0xf3c2, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "cmpnless", 0xf30fc2, 0x6, 2, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "cmpltss", 0xf30fc2, 1, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "cmpnltps", 0xc2, 0x5, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "cmpless", 0xf3c2, 2, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "cmpnltps", 0xfc2, 0x5, 2, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "cmpless", 0xf30fc2, 2, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 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 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "cmpnltss", 0xf3c2, 0x5, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "cmpunordss", 0xf3c2, 3, 1, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "cmpnltss", 0xf30fc2, 0x5, 2, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "cmpunordss", 0xf30fc2, 3, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "cmpordps", 0xc2, 0x7, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "cmpneqss", 0xf3c2, 4, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, - 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "cmpordps", 0xfc2, 0x7, 2, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "cmpneqss", 0xf30fc2, 4, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 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 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "cmpordss", 0xf3c2, 0x7, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "cmpnltss", 0xf3c2, 5, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 1, - 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "cmpordss", 0xf30fc2, 0x7, 2, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "cmpnltss", 0xf30fc2, 5, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "cmpunordps", 0xc2, 0x3, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "cmpnless", 0xf3c2, 6, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, - 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "cmpunordps", 0xfc2, 0x3, 2, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "cmpnless", 0xf30fc2, 6, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 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 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "cmpunordss", 0xf3c2, 0x3, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "cmpordss", 0xf3c2, 7, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 1, - 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "cmpunordss", 0xf30fc2, 0x3, 2, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "cmpordss", 0xf30fc2, 7, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "cmpps", 0xc2, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 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, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "cmpps", 0xfc2, None, 2, 3, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "cmpss", 0xf3c2, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, 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, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "cmpss", 0xf30fc2, None, 2, 3, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "comiss", 0x2f, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "comiss", 0xf2f, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "cvtpi2ps", 0xf2a, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "cvtps2pi", 0xf2d, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "cvtsi2ss", 0xf32a, None, 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, 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, 1, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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, 1, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 1, 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, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "cvtsi2ss", 0xf32a, None, 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, 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, 1, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, + 1, 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, 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, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "cvtsi2ss", 0xf32a, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 0, - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, + 1, 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, 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, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "cvtsi2ss", 0xf30f2a, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 1, 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, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "cvtsi2ss", 0xf30f2a, None, 2, 2, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 1, 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 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "cvtsi2ss", 0xf30f2a, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "cvtss2si", 0xf32d, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 3, 0, 0, - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "cvtss2si", 0xf30f2d, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "cvttps2pi", 0xf2c, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "cvttss2si", 0xf32c, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 3, 0, 0, - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "cvttss2si", 0xf30f2c, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "divps", 0x5e, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "divps", 0xf5e, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "divss", 0xf35e, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "divss", 0xf30f5e, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "ldmxcsr", 0xae, 0x2, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "ldmxcsr", 0xfae, 0x2, 2, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 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, 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, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "maskmovq", 0xff7, None, 2, 2, { { 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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, 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 }, { { { 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 } }, { { 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 } } } }, { "maxps", 0x5f, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "maxps", 0xf5f, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "maxss", 0xf35f, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "maxss", 0xf30f5f, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "minps", 0x5d, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "minps", 0xf5d, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "minss", 0xf35d, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "minss", 0xf30f5d, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "movaps", 0x28, None, 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, 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 } }, - { 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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 } }, + { 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "movaps", 0xf28, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "movhlps", 0x12, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 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 } }, { { 7, 0, 0, 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 } } } }, { "movhlps", 0xf12, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 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 } }, { { 7, 0, 0, 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 } } } }, { "movhps", 0x16, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "movhps", 0x17, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 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, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "movhps", 0xf16, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "movlhps", 0x16, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 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 } }, { { 7, 0, 0, 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 } } } }, { "movlhps", 0xf16, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 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 } }, { { 7, 0, 0, 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 } } } }, { "movlps", 0x12, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "movlps", 0x13, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 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, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "movlps", 0xf12, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "movmskps", 0x50, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 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 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "movmskps", 0xf50, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 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, 1, 1, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 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 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "movntps", 0x2b, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 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, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } } } }, + 0, 1, 0, 0, 0, 1, 0 } } } }, { "movntps", 0xf2b, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 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, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } } } }, + 0, 1, 0, 0, 0, 1, 0 } } } }, { "movntq", 0xfe7, None, 2, 2, { { 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 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, 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 }, { { { 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, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "movntdq", 0x66e7, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 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, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } } } }, + 0, 1, 0, 0, 0, 1, 0 } } } }, { "movntdq", 0x660fe7, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 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, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } } } }, + 0, 1, 0, 0, 0, 1, 0 } } } }, { "movss", 0xf310, None, 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, 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 } }, - { 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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 } }, + { 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 1, 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, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "movss", 0xf310, None, 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, 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 } }, - { 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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 } }, + { 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 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 } }, { { 7, 0, 0, 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 } } } }, { "movss", 0xf30f10, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "movups", 0x10, None, 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, 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 } }, - { 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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 } }, + { 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "movups", 0xf10, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "mulps", 0x59, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "mulps", 0xf59, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "mulss", 0xf359, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "mulss", 0xf30f59, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "orps", 0x56, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "orps", 0xf56, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pavgb", 0xfe0, None, 2, 2, { { 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "pavgb", 0x66e0, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pavgb", 0x660fe0, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pavgw", 0xfe3, None, 2, 2, { { 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "pavgw", 0x66e3, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pavgw", 0x660fe3, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pextrw", 0x66c5, None, 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, 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, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 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, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 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, 0 } }, { { 7, 0, 0, 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 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "pextrw", 0x6615, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, - 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 2, 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, 0 } }, { { 7, 0, 0, 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 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "pextrw", 0x6615, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 2, 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, 0 } }, { { 7, 0, 0, 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, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "pextrw", 0x660fc5, None, 2, 3, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 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 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "pextrw", 0x660f3a15, None, 3, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 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 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "pextrw", 0x660f3a15, None, 3, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 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, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "pextrw", 0xfc5, None, 2, 3, { { 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 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, 0, 0, 0, 0, 0, 0 }, + 0, 0, 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, 1, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 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 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "pinsrw", 0x66c4, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 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, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 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 } } } }, { "pinsrw", 0x66c4, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 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, 0 } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 1, 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, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pinsrw", 0x660fc4, None, 2, 3, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 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, 1, 1, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 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 } } } }, { "pinsrw", 0x660fc4, None, 2, 3, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 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, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 1, 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, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pinsrw", 0xfc4, None, 2, 3, { { 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 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, 0, 0, 0, 0, 0, 0 }, + 0, 0, 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, 1, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 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 } } } }, { "pinsrw", 0xfc4, None, 2, 3, { { 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 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, 1, 0, 0, 0, 0, 0, 1, 0, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "pmaxsw", 0x66ee, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pmaxsw", 0x660fee, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pmaxsw", 0xfee, None, 2, 2, { { 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "pmaxub", 0x66de, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pmaxub", 0x660fde, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pmaxub", 0xfde, None, 2, 2, { { 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "pminsw", 0x66ea, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pminsw", 0x660fea, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pminsw", 0xfea, None, 2, 2, { { 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "pminub", 0x66da, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pminub", 0x660fda, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pminub", 0xfda, None, 2, 2, { { 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "pmovmskb", 0x66d7, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 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 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "pmovmskb", 0x660fd7, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 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, 1, 1, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 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 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "pmovmskb", 0xfd7, None, 2, 2, { { 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 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, 0, 0, 0, 0, 0, 0 }, + 0, 0, 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, 1, 1, 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, 1, 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 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "pmulhuw", 0x66e4, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pmulhuw", 0x660fe4, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pmulhuw", 0xfe4, None, 2, 2, { { 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "prefetchnta", 0xf18, 0x0, 2, 1, { { 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 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, 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, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "prefetcht0", 0xf18, 0x1, 2, 1, { { 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 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, 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, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "prefetcht1", 0xf18, 0x2, 2, 1, { { 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 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, 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, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "prefetcht2", 0xf18, 0x3, 2, 1, { { 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 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, 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, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "psadbw", 0xff6, None, 2, 2, { { 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "psadbw", 0x66f6, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "psadbw", 0x660ff6, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pshufw", 0xf70, None, 2, 3, { { 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "rcpps", 0x53, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "rcpps", 0xf53, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "rcpss", 0xf353, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "rcpss", 0xf30f53, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "rsqrtps", 0x52, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "rsqrtps", 0xf52, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "rsqrtss", 0xf352, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "rsqrtss", 0xf30f52, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "sfence", 0xfaef8, None, 3, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "shufps", 0xc6, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 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, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "shufps", 0xfc6, None, 2, 3, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "sqrtps", 0x51, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "sqrtps", 0xf51, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "sqrtss", 0xf351, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "sqrtss", 0xf30f51, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "stmxcsr", 0xae, 0x3, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "stmxcsr", 0xfae, 0x3, 2, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 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, 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, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "subps", 0x5c, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "subps", 0xf5c, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "subss", 0xf35c, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "subss", 0xf30f5c, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "ucomiss", 0x2e, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "ucomiss", 0xf2e, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "unpckhps", 0x15, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "unpckhps", 0xf15, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "unpcklps", 0x14, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "unpcklps", 0xf14, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "xorps", 0x57, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "xorps", 0xf57, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "addpd", 0x6658, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "addpd", 0x660f58, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "addsd", 0xf258, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "addsd", 0xf20f58, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "andnpd", 0x6655, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "andnpd", 0x660f55, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "andpd", 0x6654, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "andpd", 0x660f54, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "cmpeqpd", 0x66c2, 0x0, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "cmpeqpd", 0x66c2, 0, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, - 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "cmpeqpd", 0x660fc2, 0x0, 2, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "cmpeqpd", 0x660fc2, 0, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "cmpeqsd", 0xf2c2, 0x0, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "cmpltpd", 0x66c2, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 1, - 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "cmpeqsd", 0xf20fc2, 0x0, 2, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "cmpltpd", 0x660fc2, 1, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 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 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 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 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "cmplepd", 0x66c2, 0x2, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "cmplepd", 0x66c2, 2, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "cmplepd", 0x660fc2, 0x2, 2, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "cmplepd", 0x660fc2, 2, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "cmplesd", 0xf2c2, 0x2, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "cmpunordpd", 0x66c2, 3, 1, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 1, - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "cmplesd", 0xf20fc2, 0x2, 2, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "cmpunordpd", 0x660fc2, 3, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 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 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 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 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "cmpltpd", 0x66c2, 0x1, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "cmpneqpd", 0x66c2, 4, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "cmpltpd", 0x660fc2, 0x1, 2, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "cmpneqpd", 0x660fc2, 4, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "cmpltsd", 0xf2c2, 0x1, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "cmpnltpd", 0x66c2, 5, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 1, - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "cmpltsd", 0xf20fc2, 0x1, 2, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "cmpnltpd", 0x660fc2, 5, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 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 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 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 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "cmpneqpd", 0x66c2, 0x4, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "cmpnlepd", 0x66c2, 6, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, - 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "cmpneqpd", 0x660fc2, 0x4, 2, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "cmpnlepd", 0x660fc2, 6, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "cmpneqsd", 0xf2c2, 0x4, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "cmpordpd", 0x66c2, 7, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 1, - 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "cmpneqsd", 0xf20fc2, 0x4, 2, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "cmpordpd", 0x660fc2, 7, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 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 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 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 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "cmpnlepd", 0x66c2, 0x6, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "cmpeqsd", 0xf2c2, 0, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "cmpnlepd", 0x660fc2, 0x6, 2, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "cmpeqsd", 0xf20fc2, 0, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "cmpnlesd", 0xf2c2, 0x6, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "cmpltsd", 0xf2c2, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "cmpnlesd", 0xf20fc2, 0x6, 2, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "cmpltsd", 0xf20fc2, 1, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 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, 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, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "cmpnltpd", 0x66c2, 0x5, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "cmplesd", 0xf2c2, 2, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "cmpnltpd", 0x660fc2, 0x5, 2, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "cmplesd", 0xf20fc2, 2, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "cmpnltsd", 0xf2c2, 0x5, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "cmpunordsd", 0xf2c2, 3, 1, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "cmpnltsd", 0xf20fc2, 0x5, 2, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "cmpunordsd", 0xf20fc2, 3, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 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, 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, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "cmpordpd", 0x66c2, 0x7, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "cmpneqsd", 0xf2c2, 4, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, - 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "cmpordpd", 0x660fc2, 0x7, 2, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "cmpneqsd", 0xf20fc2, 4, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "cmpordsd", 0xf2c2, 0x7, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "cmpnltsd", 0xf2c2, 5, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 1, - 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "cmpordsd", 0xf20fc2, 0x7, 2, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "cmpnltsd", 0xf20fc2, 5, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 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, 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, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "cmpunordpd", 0x66c2, 0x3, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "cmpnlesd", 0xf2c2, 6, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, - 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "cmpunordpd", 0x660fc2, 0x3, 2, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "cmpnlesd", 0xf20fc2, 6, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "cmpunordsd", 0xf2c2, 0x3, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "cmpordsd", 0xf2c2, 7, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 1, - 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "cmpunordsd", 0xf20fc2, 0x3, 2, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "cmpordsd", 0xf20fc2, 7, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 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, 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, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "cmppd", 0x66c2, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 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, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "cmppd", 0x660fc2, None, 2, 3, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "cmpsd", 0xa7, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 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, 1, 1, 1, 1, 1, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "cmpsd", 0xa7, None, 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 } }, - { 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 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, 1, 1, 1, 1, 1, 1, 0, 2, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 1, 0 } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "cmpsd", 0xf2c2, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, 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, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "cmpsd", 0xf20fc2, None, 2, 3, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "comisd", 0x662f, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "comisd", 0x660f2f, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "cvtpi2pd", 0x660f2a, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "cvtsi2sd", 0xf22a, None, 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, 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, 1, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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, 1, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 1, 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, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "cvtsi2sd", 0xf22a, None, 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, 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, 1, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, + 1, 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, 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, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "cvtsi2sd", 0xf22a, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 0, - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, + 1, 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, 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, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "cvtsi2sd", 0xf20f2a, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 1, 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, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "cvtsi2sd", 0xf20f2a, None, 2, 2, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 1, 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 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "cvtsi2sd", 0xf20f2a, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "divpd", 0x665e, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "divpd", 0x660f5e, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "divsd", 0xf25e, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "divsd", 0xf20f5e, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "maxpd", 0x665f, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "maxpd", 0x660f5f, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "maxsd", 0xf25f, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "maxsd", 0xf20f5f, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "minpd", 0x665d, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "minpd", 0x660f5d, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "minsd", 0xf25d, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "minsd", 0xf20f5d, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "movapd", 0x6628, None, 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, 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 } }, - { 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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 } }, + { 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "movapd", 0x660f28, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "movhpd", 0x6616, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "movhpd", 0x6617, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 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, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "movhpd", 0x660f16, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "movlpd", 0x6612, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "movlpd", 0x6613, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 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, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "movlpd", 0x660f12, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "movmskpd", 0x6650, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 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, 0 }, { { { 7, 0, 0, 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 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "movmskpd", 0x660f50, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 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, 1, 1, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 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 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "movntpd", 0x662b, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 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, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } } } }, + 0, 1, 0, 0, 0, 1, 0 } } } }, { "movntpd", 0x660f2b, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 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, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } } } }, + 0, 1, 0, 0, 0, 1, 0 } } } }, { "movsd", 0xa5, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 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, 1, 1, 1, 1, 1, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "movsd", 0xa5, None, 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 } }, - { 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 3, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 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, 1, 1, 1, 1, 1, 1, 0, 3, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 1, 0 } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "movsd", 0xf210, None, 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, 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 } }, - { 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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 } }, + { 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "movsd", 0xf210, None, 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, 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 } }, - { 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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 } }, + { 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 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 } }, { { 7, 0, 0, 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 } } } }, { "movsd", 0xf20f10, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "movupd", 0x6610, None, 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, 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 } }, - { 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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 } }, + { 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "movupd", 0x660f10, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "mulpd", 0x6659, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "mulpd", 0x660f59, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "mulsd", 0xf259, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "mulsd", 0xf20f59, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "orpd", 0x6656, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "orpd", 0x660f56, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "shufpd", 0x66c6, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 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, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "shufpd", 0x660fc6, None, 2, 3, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "sqrtpd", 0x6651, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "sqrtpd", 0x660f51, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "sqrtsd", 0xf251, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "sqrtsd", 0xf20f51, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "subpd", 0x665c, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "subpd", 0x660f5c, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "subsd", 0xf25c, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "subsd", 0xf20f5c, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "ucomisd", 0x662e, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "ucomisd", 0x660f2e, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "unpckhpd", 0x6615, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "unpckhpd", 0x660f15, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "unpcklpd", 0x6614, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "unpcklpd", 0x660f14, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "xorpd", 0x6657, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "xorpd", 0x660f57, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "cvtdq2pd", 0xf3e6, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "cvtdq2pd", 0xf30fe6, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "cvtpd2dq", 0xf2e6, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "cvtpd2dq", 0xf20fe6, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "cvtdq2ps", 0x5b, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "cvtdq2ps", 0xf5b, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "cvtpd2pi", 0x660f2d, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "cvtpd2ps", 0x665a, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "cvtpd2ps", 0x660f5a, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "cvtps2pd", 0x5a, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "cvtps2pd", 0xf5a, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "cvtps2dq", 0x665b, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "cvtps2dq", 0x660f5b, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "cvtsd2si", 0xf22d, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 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, 1, 1, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "cvtsd2si", 0xf20f2d, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 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, 1, 1, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "cvtsd2ss", 0xf25a, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "cvtsd2ss", 0xf20f5a, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "cvtss2sd", 0xf35a, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "cvtss2sd", 0xf30f5a, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "cvttpd2pi", 0x660f2c, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "cvttsd2si", 0xf22c, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 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, 1, 1, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "cvttsd2si", 0xf20f2c, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 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, 1, 1, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "cvttpd2dq", 0x66e6, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "cvttpd2dq", 0x660fe6, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "cvttps2dq", 0xf35b, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "cvttps2dq", 0xf30f5b, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "maskmovdqu", 0x66f7, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 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 } }, { { 7, 0, 0, 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 } } } }, { "maskmovdqu", 0x660ff7, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 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 } }, { { 7, 0, 0, 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 } } } }, { "movdqa", 0x666f, None, 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, 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 } }, - { 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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 } }, + { 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "movdqa", 0x660f6f, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "movdqu", 0xf36f, None, 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, 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 } }, - { 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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 } }, + { 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "movdqu", 0xf30f6f, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "movdq2q", 0xf20fd6, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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, 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 }, { { { 7, 0, 0, 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 } }, { { 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 } } } }, { "movq2dq", 0xf30fd6, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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, 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 }, { { { 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 } }, { { 7, 0, 0, 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 } } } }, { "pmuludq", 0x66f4, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pmuludq", 0x660ff4, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pmuludq", 0xff4, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "pshufd", 0x6670, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 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, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pshufd", 0x660f70, None, 2, 3, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pshufhw", 0xf370, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 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, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pshufhw", 0xf30f70, None, 2, 3, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pshuflw", 0xf270, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 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, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pshuflw", 0xf20f70, None, 2, 3, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pslldq", 0x6673, 0x7, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 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, 0 } }, { { 7, 0, 0, 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 } } } }, { "pslldq", 0x660f73, 0x7, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 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 } } } }, { "psrldq", 0x6673, 0x3, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 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, 0 } }, { { 7, 0, 0, 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 } } } }, { "psrldq", 0x660f73, 0x3, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 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 } } } }, { "punpckhqdq", 0x666d, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "punpckhqdq", 0x660f6d, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "punpcklqdq", 0x666c, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "punpcklqdq", 0x660f6c, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "addsubpd", 0x66d0, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "addsubpd", 0x660fd0, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "addsubps", 0xf2d0, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "addsubps", 0xf20fd0, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "cmpxchg16b", 0xfc7, 0x1, 2, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 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, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } } } }, { "fisttp", 0xdf, 0x1, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 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, 1, 0, 0, 0, 0, 0, 1, 1, 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, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "fisttp", 0xdd, 0x1, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 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, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "fisttpll", 0xdd, 0x1, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "haddpd", 0x667c, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "haddpd", 0x660f7c, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "haddps", 0xf27c, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "haddps", 0xf20f7c, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "hsubpd", 0x667d, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "hsubpd", 0x660f7d, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "hsubps", 0xf27d, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "hsubps", 0xf20f7d, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "lddqu", 0xf2f0, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "lddqu", 0xf20ff0, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "monitor", 0xf01c8, None, 3, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, - { "monitor", 0xf01c8, None, 3, 3, - { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 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, 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, 1, 1, 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, 1, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "monitor", 0xf01c8, None, 3, 3, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 1, 1, 1, 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, 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, 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, 1, 1, 1, 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, 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, 1, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } }, { { 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "monitor", 0xf01c8, None, 3, 3, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 1, 1, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 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, 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, 1, 0, 1, - 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, 1, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "movddup", 0xf212, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "movddup", 0xf20f12, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "movshdup", 0xf316, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "movshdup", 0xf30f16, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "movsldup", 0xf312, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "movsldup", 0xf30f12, None, 2, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "mwait", 0xf01c9, None, 3, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "mwait", 0xf01c9, None, 3, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 1, 1, 1, 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, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 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, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "vmcall", 0xf01c1, None, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "vmclear", 0x660fc7, 0x6, 2, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "vmlaunch", 0xf01c2, None, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "vmresume", 0xf01c3, None, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "vmptrld", 0xfc7, 0x6, 2, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "vmptrst", 0xfc7, 0x7, 2, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "vmread", 0xf78, None, 2, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "vmread", 0xf78, None, 2, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "vmwrite", 0xf79, None, 2, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "vmwrite", 0xf79, None, 2, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 1, 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, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "vmxoff", 0xf01c4, None, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "vmxon", 0xf30fc7, 0x6, 2, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "vmfunc", 0xf01d4, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "getsec", 0xf37, None, 2, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "invept", 0x660f3880, None, 3, 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, 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, 1, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "invept", 0x660f3880, None, 3, 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, 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, 1, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "invvpid", 0x660f3881, None, 3, 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, 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, 1, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "invvpid", 0x660f3881, None, 3, 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, 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, 1, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "invpcid", 0x660f3882, None, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "invpcid", 0x660f3882, None, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "phaddw", 0x6601, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "phaddw", 0x660f3801, None, 3, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "phaddw", 0xf3801, None, 3, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "phaddd", 0x6602, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "phaddd", 0x660f3802, None, 3, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "phaddd", 0xf3802, None, 3, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "phaddsw", 0x6603, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "phaddsw", 0x660f3803, None, 3, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "phaddsw", 0xf3803, None, 3, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "phsubw", 0x6605, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "phsubw", 0x660f3805, None, 3, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "phsubw", 0xf3805, None, 3, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "phsubd", 0x6606, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "phsubd", 0x660f3806, None, 3, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "phsubd", 0xf3806, None, 3, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "phsubsw", 0x6607, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "phsubsw", 0x660f3807, None, 3, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "phsubsw", 0xf3807, None, 3, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "pmaddubsw", 0x6604, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pmaddubsw", 0x660f3804, None, 3, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pmaddubsw", 0xf3804, None, 3, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "pmulhrsw", 0x660b, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pmulhrsw", 0x660f380b, None, 3, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pmulhrsw", 0xf380b, None, 3, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "pshufb", 0x6600, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pshufb", 0x660f3800, None, 3, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pshufb", 0xf3800, None, 3, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "psignb", 0x6608, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "psignb", 0x660f3808, None, 3, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "psignb", 0xf3808, None, 3, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "psignw", 0x6609, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "psignw", 0x660f3809, None, 3, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "psignw", 0xf3809, None, 3, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "psignd", 0x660a, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "psignd", 0x660f380a, None, 3, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "psignd", 0xf380a, None, 3, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "palignr", 0x660f, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 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, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "palignr", 0x660f3a0f, None, 3, 3, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "palignr", 0xf3a0f, None, 3, 3, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "pabsb", 0x661c, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pabsb", 0x660f381c, None, 3, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pabsb", 0xf381c, None, 3, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "pabsw", 0x661d, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pabsw", 0x660f381d, None, 3, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pabsw", 0xf381d, None, 3, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "pabsd", 0x661e, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pabsd", 0x660f381e, None, 3, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pabsd", 0xf381e, None, 3, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "blendpd", 0x660d, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 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, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "blendpd", 0x660f3a0d, None, 3, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "blendps", 0x660c, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 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, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "blendps", 0x660f3a0c, None, 3, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "blendvpd", 0x664b, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 2, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 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, 1, 0, 0, 0, 0 } }, + 0, 1, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "blendvpd", 0x664b, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 2, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "blendvpd", 0x660f3815, None, 3, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "blendvpd", 0x660f3815, None, 3, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "blendvps", 0x664a, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 2, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 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, 1, 0, 0, 0, 0 } }, + 0, 1, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "blendvps", 0x664a, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 2, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "blendvps", 0x660f3814, None, 3, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "blendvps", 0x660f3814, None, 3, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "dppd", 0x6641, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 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, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "dppd", 0x660f3a41, None, 3, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "dpps", 0x6640, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 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, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "dpps", 0x660f3a40, None, 3, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "extractps", 0x6617, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, - 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 2, 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, 0 } }, { { 7, 0, 0, 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 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "extractps", 0x6617, None, 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, 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, 1, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, - 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 2, 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, 0 } }, { { 7, 0, 0, 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 } }, { { 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 } } } }, { "extractps", 0x660f3a17, None, 3, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 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 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "extractps", 0x660f3a17, None, 3, 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, 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, 1, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 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 } }, { { 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 } } } }, { "insertps", 0x6621, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 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, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "insertps", 0x660f3a21, None, 3, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "movntdqa", 0x662a, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 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, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "movntdqa", 0x660f382a, None, 3, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "mpsadbw", 0x6642, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 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, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "mpsadbw", 0x660f3a42, None, 3, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "packusdw", 0x662b, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "packusdw", 0x660f382b, None, 3, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pblendvb", 0x664c, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 2, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 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, 1, 0, 0, 0, 0 } }, + 0, 1, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pblendvb", 0x664c, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 2, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pblendvb", 0x660f3810, None, 3, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pblendvb", 0x660f3810, None, 3, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pblendw", 0x660e, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 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, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pblendw", 0x660f3a0e, None, 3, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pcmpeqq", 0x6629, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pcmpeqq", 0x660f3829, None, 3, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pextrb", 0x6614, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, - 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 2, 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, 0 } }, { { 7, 0, 0, 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 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "pextrb", 0x6614, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 2, 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, 0 } }, { { 7, 0, 0, 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, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "pextrb", 0x660f3a14, None, 3, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 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 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "pextrb", 0x660f3a14, None, 3, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 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, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "pextrd", 0x6616, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 2, 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, 0 } }, { { 7, 0, 0, 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 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "pextrd", 0x660f3a16, None, 3, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 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 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "pextrq", 0x6616, None, 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, 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, 1, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 3, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, - 2, 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 } }, - { { 7, 0, 0, 0, 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, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 2, 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 } }, + { { 7, 0, 0, 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, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "pextrq", 0x660f3a16, None, 3, 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, 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, 1, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 3, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 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, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "phminposuw", 0x6641, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "phminposuw", 0x660f3841, None, 3, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pinsrb", 0x6620, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, - 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 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, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 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 } } } }, { "pinsrb", 0x6620, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 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, 0 } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 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, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pinsrb", 0x660f3a20, None, 3, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 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, 1, 1, 1, 1, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 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 } } } }, { "pinsrb", 0x660f3a20, None, 3, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 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, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pinsrd", 0x6622, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 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, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 1, 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, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pinsrd", 0x660f3a22, None, 3, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 1, 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, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pinsrq", 0x6622, None, 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, 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, 1, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 3, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, - 2, 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 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 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 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pinsrq", 0x660f3a22, None, 3, 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, 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, 1, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 3, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, + 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, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pmaxsb", 0x663c, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pmaxsb", 0x660f383c, None, 3, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pmaxsd", 0x663d, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pmaxsd", 0x660f383d, None, 3, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pmaxud", 0x663f, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pmaxud", 0x660f383f, None, 3, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pmaxuw", 0x663e, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pmaxuw", 0x660f383e, None, 3, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pminsb", 0x6638, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pminsb", 0x660f3838, None, 3, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pminsd", 0x6639, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pminsd", 0x660f3839, None, 3, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pminud", 0x663b, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pminud", 0x660f383b, None, 3, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pminuw", 0x663a, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pminuw", 0x660f383a, None, 3, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pmovsxbw", 0x6620, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pmovsxbw", 0x660f3820, None, 3, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pmovsxbd", 0x6621, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pmovsxbd", 0x660f3821, None, 3, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pmovsxbq", 0x6622, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pmovsxbq", 0x660f3822, None, 3, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pmovsxwd", 0x6623, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pmovsxwd", 0x660f3823, None, 3, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pmovsxwq", 0x6624, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pmovsxwq", 0x660f3824, None, 3, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pmovsxdq", 0x6625, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pmovsxdq", 0x660f3825, None, 3, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pmovzxbw", 0x6630, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pmovzxbw", 0x660f3830, None, 3, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pmovzxbd", 0x6631, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pmovzxbd", 0x660f3831, None, 3, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pmovzxbq", 0x6632, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pmovzxbq", 0x660f3832, None, 3, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pmovzxwd", 0x6633, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pmovzxwd", 0x660f3833, None, 3, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pmovzxwq", 0x6634, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pmovzxwq", 0x660f3834, None, 3, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pmovzxdq", 0x6635, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pmovzxdq", 0x660f3835, None, 3, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pmuldq", 0x6628, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pmuldq", 0x660f3828, None, 3, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pmulld", 0x6640, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pmulld", 0x660f3840, None, 3, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "ptest", 0x6617, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "ptest", 0x660f3817, None, 3, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "roundpd", 0x6609, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 2, 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, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "roundpd", 0x660f3a09, None, 3, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "roundps", 0x6608, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 2, 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, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "roundps", 0x660f3a08, None, 3, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "roundsd", 0x660b, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 1, - 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, 2, 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, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "roundsd", 0x660f3a0b, None, 3, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "roundss", 0x660a, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, - 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, 2, 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, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "roundss", 0x660f3a0a, None, 3, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pcmpgtq", 0x6637, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pcmpgtq", 0x660f3837, None, 3, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pcmpestri", 0x6661, None, 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, 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, 1, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 2, 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, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pcmpestri", 0x6661, None, 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, 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, 1, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, - 2, 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 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 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 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 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 } } } }, { "pcmpestri", 0x660f3a61, None, 3, 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, 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, 1, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pcmpestri", 0x660f3a61, None, 3, 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, 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, 1, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 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, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 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, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pcmpestrm", 0x6660, None, 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, 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, 1, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 2, 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, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pcmpestrm", 0x6660, None, 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, 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, 1, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, - 2, 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 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 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 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 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 } } } }, { "pcmpestrm", 0x660f3a60, None, 3, 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, 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, 1, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pcmpestrm", 0x660f3a60, None, 3, 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, 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, 1, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 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, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 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, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pcmpistri", 0x6663, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 2, 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, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pcmpistri", 0x660f3a63, None, 3, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pcmpistrm", 0x6662, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 2, 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, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pcmpistrm", 0x660f3a62, None, 3, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "crc32", 0xf20f38f0, None, 3, 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, 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, 1, 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, 0, 0, 0, 0, 0, 0 } }, + { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "crc32", 0xf20f38f0, None, 3, 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, 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, 1, 0, 0 } }, - { 0, 1, 0, 1, 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, 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, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 1, 0, 1, 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, 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, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "xsave", 0xfae, 0x4, 2, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "xsave64", 0xfae, 0x4, 2, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 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, 1, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "xrstor", 0xfae, 0x5, 2, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "xrstor64", 0xfae, 0x5, 2, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 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, 1, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "xgetbv", 0xf01d0, None, 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, 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, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "xsetbv", 0xf01d1, None, 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, 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, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "xsaveopt", 0xfae, 0x6, 2, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "xsaveopt64", 0xfae, 0x6, 2, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 1, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "aesdec", 0x66de, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "aesdec", 0x660f38de, None, 3, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "aesdeclast", 0x66df, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "aesdeclast", 0x660f38df, None, 3, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "aesenc", 0x66dc, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "aesenc", 0x660f38dc, None, 3, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "aesenclast", 0x66dd, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "aesenclast", 0x660f38dd, None, 3, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "aesimc", 0x66db, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "aesimc", 0x660f38db, None, 3, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "aeskeygenassist", 0x66df, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 2, 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, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "aeskeygenassist", 0x660f3adf, None, 3, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "vaesdec", 0x66de, None, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 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, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, + 0, 0, 1, 0, 0, 0, 0 } } } }, { "vaesdec", 0x66de, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "vaesdec", 0x66de, None, 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, 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, 1, 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, 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, 1, 3, - 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, 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vaesdeclast", 0x66df, None, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 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, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, + 0, 0, 1, 0, 0, 0, 0 } } } }, { "vaesdeclast", 0x66df, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "vaesdeclast", 0x66df, None, 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, 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, 1, 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, 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, 1, 3, - 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, 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vaesenc", 0x66dc, None, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 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, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, + 0, 0, 1, 0, 0, 0, 0 } } } }, { "vaesenc", 0x66dc, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "vaesenc", 0x66dc, None, 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, 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, 1, 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, 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, 1, 3, - 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, 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vaesenclast", 0x66dd, None, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 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, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, + 0, 0, 1, 0, 0, 0, 0 } } } }, { "vaesenclast", 0x66dd, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "vaesenclast", 0x66dd, None, 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, 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, 1, 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, 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, 1, 3, - 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, 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "pclmulqdq", 0x6644, None, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 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, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pclmulqdq", 0x660f3a44, None, 3, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pclmullqlqdq", 0x6644, 0x0, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, - 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 2, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pclmullqlqdq", 0x660f3a44, 0x0, 3, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pclmulhqlqdq", 0x6644, 0x1, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, - 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 2, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pclmulhqlqdq", 0x660f3a44, 0x1, 3, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pclmullqhqdq", 0x6644, 0x10, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, - 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 2, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pclmullqhqdq", 0x660f3a44, 0x10, 3, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pclmulhqhqdq", 0x6644, 0x11, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, - 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 2, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "pclmulhqhqdq", 0x660f3a44, 0x11, 3, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "gf2p8affineqb", 0x66ce, None, 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, 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, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, - 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 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, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "gf2p8affineqb", 0x660f3ace, None, 3, 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, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "gf2p8affineinvqb", 0x66cf, None, 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, 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, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, - 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 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, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "gf2p8affineinvqb", 0x660f3acf, None, 3, 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, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "gf2p8mulb", 0x66cf, None, 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, 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, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "gf2p8mulb", 0x660f38cf, None, 3, 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, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "vaddpd", 0x6658, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, + 0, 1, 1, 0, 0, 0, 0 } } } }, { "vaddpd", 0x6658, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vaddpd", 0x6658, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 1, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 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, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } } } }, + 0, 0, 0, 1, 0, 0, 0 } } } }, { "vaddps", 0x58, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, + 0, 1, 1, 0, 0, 0, 0 } } } }, { "vaddps", 0x58, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vaddps", 0x58, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 1, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 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, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } } } }, + 0, 0, 0, 1, 0, 0, 0 } } } }, { "vaddsd", 0xf258, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "vaddsd", 0xF258, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "vaddsd", 0xF258, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 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 } } } }, { "vaddss", 0xf358, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "vaddss", 0xF358, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "vaddss", 0xF358, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 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 } } } }, { "vaddsubpd", 0x66d0, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, + 0, 1, 1, 0, 0, 0, 0 } } } }, { "vaddsubps", 0xf2d0, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, + 0, 1, 1, 0, 0, 0, 0 } } } }, { "vandnpd", 0x6655, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 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, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, + 0, 1, 1, 0, 0, 0, 0 } } } }, { "vandnpd", 0x6655, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 1, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 1, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vandnps", 0x55, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 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, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, + 0, 1, 1, 0, 0, 0, 0 } } } }, { "vandnps", 0x55, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 1, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 1, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vandpd", 0x6654, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, + 0, 1, 1, 0, 0, 0, 0 } } } }, { "vandpd", 0x6654, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vandps", 0x54, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, + 0, 1, 1, 0, 0, 0, 0 } } } }, { "vandps", 0x54, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vblendpd", 0x660d, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, + 0, 1, 1, 0, 0, 0, 0 } } } }, { "vblendps", 0x660c, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, + 0, 1, 1, 0, 0, 0, 0 } } } }, { "vblendvpd", 0x664b, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 2, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, + 0, 1, 1, 0, 0, 0, 0 } } } }, { "vblendvps", 0x664a, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 2, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, + 0, 1, 1, 0, 0, 0, 0 } } } }, { "vbroadcastf128", 0x661a, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, + 0, 0, 1, 0, 0, 0, 0 } } } }, { "vbroadcastsd", 0x6619, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 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, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 0, 1, 0, 0, 0 } } } }, + 0, 0, 1, 0, 0, 0, 0 } } } }, { "vbroadcastsd", 0x6619, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, + 0, 0, 1, 0, 0, 0, 0 } } } }, { "vbroadcastsd", 0x6619, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 1, 0, 0 } } } }, + 0, 0, 1, 1, 0, 0, 0 } } } }, { "vbroadcastss", 0x6618, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 1, 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, - 0, 1, 1, 0, 0, 0 } } } }, + 0, 1, 1, 0, 0, 0, 0 } } } }, { "vbroadcastss", 0x6618, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, + 0, 1, 1, 0, 0, 0, 0 } } } }, { "vbroadcastss", 0x6618, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 0, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vcmpeq_ospd", 0x66c2, 0x10, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vcmpeqpd", 0x66c2, 0x00, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vcmpeq_ospd", 0x66C2, 16, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmpeqpd", 0x66C2, 0x00, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpeq_ospd", 0x66C2, 16, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpeqpd", 0x66C2, 0x00, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 1, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 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, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 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 } } } }, - { "vcmpeq_osps", 0xc2, 0x10, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpeq_oqpd", 0x66c2, 0x00, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vcmpeq_osps", 0xC2, 16, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmpeq_oqpd", 0x66C2, 0x00, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpeq_osps", 0xC2, 16, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpeq_oqpd", 0x66C2, 0x00, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 1, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 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, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 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 } } } }, - { "vcmpeq_ossd", 0xf2c2, 0x10, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpltpd", 0x66c2, 0x01, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcmpeq_ossd", 0xF2C2, 16, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmpltpd", 0x66C2, 0x01, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpeq_ossd", 0xF2C2, 16, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpltpd", 0x66C2, 0x01, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 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 } } } }, - { "vcmpeq_osss", 0xf3c2, 0x10, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmplt_ospd", 0x66c2, 0x01, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcmpeq_osss", 0xF3C2, 16, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmplt_ospd", 0x66C2, 0x01, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpeq_osss", 0xF3C2, 16, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmplt_ospd", 0x66C2, 0x01, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 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 } } } }, - { "vcmpeqpd", 0x66c2, 0x0, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmplepd", 0x66c2, 0x02, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vcmpeqpd", 0x66C2, 0, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmplepd", 0x66C2, 0x02, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpeqpd", 0x66C2, 0, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmplepd", 0x66C2, 0x02, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 1, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 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, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 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 } } } }, - { "vcmpeqps", 0xc2, 0x0, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmple_ospd", 0x66c2, 0x02, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vcmpeqps", 0xC2, 0, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmple_ospd", 0x66C2, 0x02, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpeqps", 0xC2, 0, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmple_ospd", 0x66C2, 0x02, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 1, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 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, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 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 } } } }, - { "vcmpeqsd", 0xf2c2, 0x0, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpunordpd", 0x66c2, 0x03, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcmpeqsd", 0xF2C2, 0, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmpunordpd", 0x66C2, 0x03, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpeqsd", 0xF2C2, 0, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpunordpd", 0x66C2, 0x03, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 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 } } } }, - { "vcmpeqss", 0xf3c2, 0x0, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpunord_qpd", 0x66c2, 0x03, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcmpeqss", 0xF3C2, 0, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmpunord_qpd", 0x66C2, 0x03, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpeqss", 0xF3C2, 0, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpunord_qpd", 0x66C2, 0x03, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 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 } } } }, - { "vcmpeq_uqpd", 0x66c2, 0x8, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpneqpd", 0x66c2, 0x04, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vcmpeq_uqpd", 0x66C2, 8, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmpneqpd", 0x66C2, 0x04, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpeq_uqpd", 0x66C2, 8, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpneqpd", 0x66C2, 0x04, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 1, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 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, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 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 } } } }, - { "vcmpeq_uqps", 0xc2, 0x8, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpneq_uqpd", 0x66c2, 0x04, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vcmpeq_uqps", 0xC2, 8, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmpneq_uqpd", 0x66C2, 0x04, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpeq_uqps", 0xC2, 8, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpneq_uqpd", 0x66C2, 0x04, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 1, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 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, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 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 } } } }, - { "vcmpeq_uqsd", 0xf2c2, 0x8, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpnltpd", 0x66c2, 0x05, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcmpeq_uqsd", 0xF2C2, 8, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmpnltpd", 0x66C2, 0x05, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpeq_uqsd", 0xF2C2, 8, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpnltpd", 0x66C2, 0x05, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 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 } } } }, - { "vcmpeq_uqss", 0xf3c2, 0x8, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpnlt_uspd", 0x66c2, 0x05, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcmpeq_uqss", 0xF3C2, 8, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmpnlt_uspd", 0x66C2, 0x05, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpeq_uqss", 0xF3C2, 8, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpnlt_uspd", 0x66C2, 0x05, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 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 } } } }, - { "vcmpeq_uspd", 0x66c2, 0x18, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpnlepd", 0x66c2, 0x06, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vcmpeq_uspd", 0x66C2, 24, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmpnlepd", 0x66C2, 0x06, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpeq_uspd", 0x66C2, 24, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpnlepd", 0x66C2, 0x06, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 1, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 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, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 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 } } } }, - { "vcmpeq_usps", 0xc2, 0x18, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpnle_uspd", 0x66c2, 0x06, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vcmpeq_usps", 0xC2, 24, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmpnle_uspd", 0x66C2, 0x06, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpeq_usps", 0xC2, 24, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpnle_uspd", 0x66C2, 0x06, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 1, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 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, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 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 } } } }, - { "vcmpeq_ussd", 0xf2c2, 0x18, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpordpd", 0x66c2, 0x07, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcmpeq_ussd", 0xF2C2, 24, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmpordpd", 0x66C2, 0x07, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpeq_ussd", 0xF2C2, 24, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpordpd", 0x66C2, 0x07, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 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 } } } }, - { "vcmpeq_usss", 0xf3c2, 0x18, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpord_qpd", 0x66c2, 0x07, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcmpeq_usss", 0xF3C2, 24, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmpord_qpd", 0x66C2, 0x07, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpeq_usss", 0xF3C2, 24, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpord_qpd", 0x66C2, 0x07, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 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 } } } }, - { "vcmpfalse_ospd", 0x66c2, 0x1b, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpeq_uqpd", 0x66c2, 0x08, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vcmpfalse_ospd", 0x66C2, 27, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmpeq_uqpd", 0x66C2, 0x08, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpfalse_ospd", 0x66C2, 27, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpeq_uqpd", 0x66C2, 0x08, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 1, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 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, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 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 } } } }, - { "vcmpfalse_osps", 0xc2, 0x1b, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpngepd", 0x66c2, 0x09, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vcmpfalse_osps", 0xC2, 27, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmpngepd", 0x66C2, 0x09, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpfalse_osps", 0xC2, 27, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpngepd", 0x66C2, 0x09, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 1, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 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, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 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 } } } }, - { "vcmpfalse_ossd", 0xf2c2, 0x1b, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpnge_uspd", 0x66c2, 0x09, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcmpfalse_ossd", 0xF2C2, 27, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmpnge_uspd", 0x66C2, 0x09, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpfalse_ossd", 0xF2C2, 27, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpnge_uspd", 0x66C2, 0x09, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 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 } } } }, - { "vcmpfalse_osss", 0xf3c2, 0x1b, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpngtpd", 0x66c2, 0x0a, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcmpfalse_osss", 0xF3C2, 27, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmpngtpd", 0x66C2, 0x0a, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpfalse_osss", 0xF3C2, 27, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpngtpd", 0x66C2, 0x0a, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 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 } } } }, - { "vcmpfalsepd", 0x66c2, 0xb, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpngt_uspd", 0x66c2, 0x0a, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vcmpfalsepd", 0x66C2, 11, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmpngt_uspd", 0x66C2, 0x0a, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpfalsepd", 0x66C2, 11, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpngt_uspd", 0x66C2, 0x0a, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 1, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 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, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 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 } } } }, - { "vcmpfalseps", 0xc2, 0xb, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpfalsepd", 0x66c2, 0x0b, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vcmpfalseps", 0xC2, 11, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmpfalsepd", 0x66C2, 0x0b, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpfalseps", 0xC2, 11, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpfalsepd", 0x66C2, 0x0b, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 1, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 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, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 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 } } } }, - { "vcmpfalsesd", 0xf2c2, 0xb, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpfalse_oqpd", 0x66c2, 0x0b, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcmpfalsesd", 0xF2C2, 11, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmpfalse_oqpd", 0x66C2, 0x0b, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpfalsesd", 0xF2C2, 11, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpfalse_oqpd", 0x66C2, 0x0b, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 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 } } } }, - { "vcmpfalsess", 0xf3c2, 0xb, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpneq_oqpd", 0x66c2, 0x0c, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcmpfalsess", 0xF3C2, 11, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmpneq_oqpd", 0x66C2, 0x0c, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpfalsess", 0xF3C2, 11, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpneq_oqpd", 0x66C2, 0x0c, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 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 } } } }, - { "vcmpge_oqpd", 0x66c2, 0x1d, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpgepd", 0x66c2, 0x0d, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vcmpge_oqpd", 0x66C2, 29, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmpgepd", 0x66C2, 0x0d, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpge_oqpd", 0x66C2, 29, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpgepd", 0x66C2, 0x0d, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 1, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 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, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 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 } } } }, - { "vcmpge_oqps", 0xc2, 0x1d, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpge_ospd", 0x66c2, 0x0d, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vcmpge_oqps", 0xC2, 29, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmpge_ospd", 0x66C2, 0x0d, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpge_oqps", 0xC2, 29, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpge_ospd", 0x66C2, 0x0d, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 1, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 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, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 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 } } } }, - { "vcmpge_oqsd", 0xf2c2, 0x1d, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpgtpd", 0x66c2, 0x0e, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcmpge_oqsd", 0xF2C2, 29, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmpgtpd", 0x66C2, 0x0e, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpge_oqsd", 0xF2C2, 29, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpgtpd", 0x66C2, 0x0e, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 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 } } } }, - { "vcmpge_oqss", 0xf3c2, 0x1d, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpgt_ospd", 0x66c2, 0x0e, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcmpge_oqss", 0xF3C2, 29, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmpgt_ospd", 0x66C2, 0x0e, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpge_oqss", 0xF3C2, 29, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpgt_ospd", 0x66C2, 0x0e, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 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 } } } }, - { "vcmpgepd", 0x66c2, 0xd, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmptruepd", 0x66c2, 0x0f, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vcmpgepd", 0x66C2, 13, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmptruepd", 0x66C2, 0x0f, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpgepd", 0x66C2, 13, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmptruepd", 0x66C2, 0x0f, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 1, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 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, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 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 } } } }, - { "vcmpgeps", 0xc2, 0xd, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmptrue_uqpd", 0x66c2, 0x0f, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vcmpgeps", 0xC2, 13, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmptrue_uqpd", 0x66C2, 0x0f, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpgeps", 0xC2, 13, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmptrue_uqpd", 0x66C2, 0x0f, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 1, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 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, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 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 } } } }, - { "vcmpgesd", 0xf2c2, 0xd, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpeq_ospd", 0x66c2, 0x10, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcmpgesd", 0xF2C2, 13, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmpeq_ospd", 0x66C2, 0x10, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpgesd", 0xF2C2, 13, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpeq_ospd", 0x66C2, 0x10, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 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 } } } }, - { "vcmpgess", 0xf3c2, 0xd, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmplt_oqpd", 0x66c2, 0x11, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcmpgess", 0xF3C2, 13, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmplt_oqpd", 0x66C2, 0x11, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpgess", 0xF3C2, 13, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmplt_oqpd", 0x66C2, 0x11, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 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 } } } }, - { "vcmpgt_oqpd", 0x66c2, 0x1e, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmple_oqpd", 0x66c2, 0x12, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vcmpgt_oqpd", 0x66C2, 30, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmple_oqpd", 0x66C2, 0x12, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpgt_oqpd", 0x66C2, 30, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmple_oqpd", 0x66C2, 0x12, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 1, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 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, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 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 } } } }, - { "vcmpgt_oqps", 0xc2, 0x1e, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpunord_spd", 0x66c2, 0x13, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vcmpgt_oqps", 0xC2, 30, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmpunord_spd", 0x66C2, 0x13, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpgt_oqps", 0xC2, 30, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpunord_spd", 0x66C2, 0x13, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 1, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 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, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 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 } } } }, - { "vcmpgt_oqsd", 0xf2c2, 0x1e, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpneq_uspd", 0x66c2, 0x14, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcmpgt_oqsd", 0xF2C2, 30, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmpneq_uspd", 0x66C2, 0x14, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpgt_oqsd", 0xF2C2, 30, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpneq_uspd", 0x66C2, 0x14, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 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 } } } }, - { "vcmpgt_oqss", 0xf3c2, 0x1e, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpnlt_uqpd", 0x66c2, 0x15, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcmpgt_oqss", 0xF3C2, 30, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmpnlt_uqpd", 0x66C2, 0x15, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpgt_oqss", 0xF3C2, 30, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpnlt_uqpd", 0x66C2, 0x15, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 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 } } } }, - { "vcmpgtpd", 0x66c2, 0xe, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpnle_uqpd", 0x66c2, 0x16, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vcmpgtpd", 0x66C2, 14, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmpnle_uqpd", 0x66C2, 0x16, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpgtpd", 0x66C2, 14, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpnle_uqpd", 0x66C2, 0x16, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 1, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 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, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 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 } } } }, - { "vcmpgtps", 0xc2, 0xe, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpord_spd", 0x66c2, 0x17, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vcmpgtps", 0xC2, 14, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmpord_spd", 0x66C2, 0x17, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpgtps", 0xC2, 14, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpord_spd", 0x66C2, 0x17, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 1, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 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, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 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 } } } }, - { "vcmpgtsd", 0xf2c2, 0xe, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpeq_uspd", 0x66c2, 0x18, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcmpgtsd", 0xF2C2, 14, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmpeq_uspd", 0x66C2, 0x18, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpgtsd", 0xF2C2, 14, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpeq_uspd", 0x66C2, 0x18, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 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 } } } }, - { "vcmpgtss", 0xf3c2, 0xe, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpnge_uqpd", 0x66c2, 0x19, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcmpgtss", 0xF3C2, 14, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmpnge_uqpd", 0x66C2, 0x19, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpgtss", 0xF3C2, 14, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpnge_uqpd", 0x66C2, 0x19, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 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 } } } }, - { "vcmple_oqpd", 0x66c2, 0x12, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpngt_uqpd", 0x66c2, 0x1a, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vcmple_oqpd", 0x66C2, 18, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmpngt_uqpd", 0x66C2, 0x1a, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmple_oqpd", 0x66C2, 18, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpngt_uqpd", 0x66C2, 0x1a, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 1, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 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, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 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 } } } }, - { "vcmple_oqps", 0xc2, 0x12, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpfalse_ospd", 0x66c2, 0x1b, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vcmple_oqps", 0xC2, 18, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmpfalse_ospd", 0x66C2, 0x1b, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmple_oqps", 0xC2, 18, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpfalse_ospd", 0x66C2, 0x1b, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 1, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 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, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 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 } } } }, - { "vcmple_oqsd", 0xf2c2, 0x12, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpneq_ospd", 0x66c2, 0x1c, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcmple_oqsd", 0xF2C2, 18, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmpneq_ospd", 0x66C2, 0x1c, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmple_oqsd", 0xF2C2, 18, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpneq_ospd", 0x66C2, 0x1c, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 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 } } } }, - { "vcmple_oqss", 0xf3c2, 0x12, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpge_oqpd", 0x66c2, 0x1d, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcmple_oqss", 0xF3C2, 18, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmpge_oqpd", 0x66C2, 0x1d, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmple_oqss", 0xF3C2, 18, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpge_oqpd", 0x66C2, 0x1d, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 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 } } } }, - { "vcmplepd", 0x66c2, 0x2, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpgt_oqpd", 0x66c2, 0x1e, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vcmplepd", 0x66C2, 2, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmpgt_oqpd", 0x66C2, 0x1e, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmplepd", 0x66C2, 2, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpgt_oqpd", 0x66C2, 0x1e, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 1, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 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, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 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 } } } }, - { "vcmpleps", 0xc2, 0x2, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmptrue_uspd", 0x66c2, 0x1f, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vcmpleps", 0xC2, 2, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmptrue_uspd", 0x66C2, 0x1f, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpleps", 0xC2, 2, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmptrue_uspd", 0x66C2, 0x1f, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 1, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 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, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 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 } } } }, - { "vcmplesd", 0xf2c2, 0x2, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpeqps", 0xc2, 0x00, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcmplesd", 0xF2C2, 2, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmpeqps", 0xC2, 0x00, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmplesd", 0xF2C2, 2, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpeqps", 0xC2, 0x00, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 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 } } } }, - { "vcmpless", 0xf3c2, 0x2, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpeq_oqps", 0xc2, 0x00, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcmpless", 0xF3C2, 2, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmpeq_oqps", 0xC2, 0x00, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpless", 0xF3C2, 2, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpeq_oqps", 0xC2, 0x00, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 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 } } } }, - { "vcmplt_oqpd", 0x66c2, 0x11, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpltps", 0xc2, 0x01, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vcmplt_oqpd", 0x66C2, 17, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmpltps", 0xC2, 0x01, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmplt_oqpd", 0x66C2, 17, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpltps", 0xC2, 0x01, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 1, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 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, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 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 } } } }, - { "vcmplt_oqps", 0xc2, 0x11, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmplt_osps", 0xc2, 0x01, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vcmplt_oqps", 0xC2, 17, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmplt_osps", 0xC2, 0x01, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmplt_oqps", 0xC2, 17, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmplt_osps", 0xC2, 0x01, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 1, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 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, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 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 } } } }, - { "vcmplt_oqsd", 0xf2c2, 0x11, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpleps", 0xc2, 0x02, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcmplt_oqsd", 0xF2C2, 17, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmpleps", 0xC2, 0x02, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmplt_oqsd", 0xF2C2, 17, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpleps", 0xC2, 0x02, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 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 } } } }, - { "vcmplt_oqss", 0xf3c2, 0x11, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmple_osps", 0xc2, 0x02, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcmplt_oqss", 0xF3C2, 17, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmple_osps", 0xC2, 0x02, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmplt_oqss", 0xF3C2, 17, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmple_osps", 0xC2, 0x02, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 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 } } } }, - { "vcmpltpd", 0x66c2, 0x1, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpunordps", 0xc2, 0x03, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vcmpltpd", 0x66C2, 1, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmpunordps", 0xC2, 0x03, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpltpd", 0x66C2, 1, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpunordps", 0xC2, 0x03, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 1, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 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, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 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 } } } }, - { "vcmpltps", 0xc2, 0x1, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpunord_qps", 0xc2, 0x03, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vcmpltps", 0xC2, 1, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmpunord_qps", 0xC2, 0x03, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpltps", 0xC2, 1, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpunord_qps", 0xC2, 0x03, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 1, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 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, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 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 } } } }, - { "vcmpltsd", 0xf2c2, 0x1, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpneqps", 0xc2, 0x04, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcmpltsd", 0xF2C2, 1, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmpneqps", 0xC2, 0x04, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpltsd", 0xF2C2, 1, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpneqps", 0xC2, 0x04, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 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 } } } }, - { "vcmpltss", 0xf3c2, 0x1, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpneq_uqps", 0xc2, 0x04, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcmpltss", 0xF3C2, 1, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmpneq_uqps", 0xC2, 0x04, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpltss", 0xF3C2, 1, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpneq_uqps", 0xC2, 0x04, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 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 } } } }, - { "vcmpneq_oqpd", 0x66c2, 0xc, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpnltps", 0xc2, 0x05, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vcmpneq_oqpd", 0x66C2, 12, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmpnltps", 0xC2, 0x05, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpneq_oqpd", 0x66C2, 12, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpnltps", 0xC2, 0x05, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 1, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 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, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 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 } } } }, - { "vcmpneq_oqps", 0xc2, 0xc, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpnlt_usps", 0xc2, 0x05, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vcmpneq_oqps", 0xC2, 12, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmpnlt_usps", 0xC2, 0x05, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpneq_oqps", 0xC2, 12, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpnlt_usps", 0xC2, 0x05, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 1, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 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, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 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 } } } }, - { "vcmpneq_oqsd", 0xf2c2, 0xc, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpnleps", 0xc2, 0x06, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcmpneq_oqsd", 0xF2C2, 12, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmpnleps", 0xC2, 0x06, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpneq_oqsd", 0xF2C2, 12, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpnleps", 0xC2, 0x06, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 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 } } } }, - { "vcmpneq_oqss", 0xf3c2, 0xc, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpnle_usps", 0xc2, 0x06, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcmpneq_oqss", 0xF3C2, 12, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmpnle_usps", 0xC2, 0x06, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpneq_oqss", 0xF3C2, 12, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpnle_usps", 0xC2, 0x06, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 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 } } } }, - { "vcmpneq_ospd", 0x66c2, 0x1c, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpordps", 0xc2, 0x07, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vcmpneq_ospd", 0x66C2, 28, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmpordps", 0xC2, 0x07, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpneq_ospd", 0x66C2, 28, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpordps", 0xC2, 0x07, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 1, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 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, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 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 } } } }, - { "vcmpneq_osps", 0xc2, 0x1c, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpord_qps", 0xc2, 0x07, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vcmpneq_osps", 0xC2, 28, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmpord_qps", 0xC2, 0x07, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpneq_osps", 0xC2, 28, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpord_qps", 0xC2, 0x07, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 1, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 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, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 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 } } } }, - { "vcmpneq_ossd", 0xf2c2, 0x1c, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpeq_uqps", 0xc2, 0x08, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcmpneq_ossd", 0xF2C2, 28, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmpeq_uqps", 0xC2, 0x08, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpneq_ossd", 0xF2C2, 28, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpeq_uqps", 0xC2, 0x08, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 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 } } } }, - { "vcmpneq_osss", 0xf3c2, 0x1c, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpngeps", 0xc2, 0x09, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcmpneq_osss", 0xF3C2, 28, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmpngeps", 0xC2, 0x09, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpneq_osss", 0xF3C2, 28, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpngeps", 0xC2, 0x09, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 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 } } } }, - { "vcmpneqpd", 0x66c2, 0x4, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpnge_usps", 0xc2, 0x09, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vcmpneqpd", 0x66C2, 4, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmpnge_usps", 0xC2, 0x09, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpneqpd", 0x66C2, 4, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpnge_usps", 0xC2, 0x09, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 1, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 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, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 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 } } } }, - { "vcmpneqps", 0xc2, 0x4, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpngtps", 0xc2, 0x0a, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vcmpneqps", 0xC2, 4, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmpngtps", 0xC2, 0x0a, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpneqps", 0xC2, 4, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpngtps", 0xC2, 0x0a, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 1, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 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, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 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 } } } }, - { "vcmpneqsd", 0xf2c2, 0x4, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpngt_usps", 0xc2, 0x0a, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcmpneqsd", 0xF2C2, 4, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmpngt_usps", 0xC2, 0x0a, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpneqsd", 0xF2C2, 4, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpngt_usps", 0xC2, 0x0a, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 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 } } } }, - { "vcmpneqss", 0xf3c2, 0x4, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpfalseps", 0xc2, 0x0b, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcmpneqss", 0xF3C2, 4, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmpfalseps", 0xC2, 0x0b, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpneqss", 0xF3C2, 4, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpfalseps", 0xC2, 0x0b, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 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 } } } }, - { "vcmpneq_uspd", 0x66c2, 0x14, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpfalse_oqps", 0xc2, 0x0b, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vcmpneq_uspd", 0x66C2, 20, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmpfalse_oqps", 0xC2, 0x0b, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpneq_uspd", 0x66C2, 20, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpfalse_oqps", 0xC2, 0x0b, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 1, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 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, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 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 } } } }, - { "vcmpneq_usps", 0xc2, 0x14, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpneq_oqps", 0xc2, 0x0c, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vcmpneq_usps", 0xC2, 20, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmpneq_oqps", 0xC2, 0x0c, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpneq_usps", 0xC2, 20, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpneq_oqps", 0xC2, 0x0c, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 1, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 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, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 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 } } } }, - { "vcmpneq_ussd", 0xf2c2, 0x14, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpgeps", 0xc2, 0x0d, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcmpneq_ussd", 0xF2C2, 20, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmpgeps", 0xC2, 0x0d, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpneq_ussd", 0xF2C2, 20, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpgeps", 0xC2, 0x0d, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 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 } } } }, - { "vcmpneq_usss", 0xf3c2, 0x14, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpge_osps", 0xc2, 0x0d, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcmpneq_usss", 0xF3C2, 20, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmpge_osps", 0xC2, 0x0d, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpneq_usss", 0xF3C2, 20, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpge_osps", 0xC2, 0x0d, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 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 } } } }, - { "vcmpngepd", 0x66c2, 0x9, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpgtps", 0xc2, 0x0e, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vcmpngepd", 0x66C2, 9, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmpgtps", 0xC2, 0x0e, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpngepd", 0x66C2, 9, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpgtps", 0xC2, 0x0e, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 1, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 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, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 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 } } } }, - { "vcmpngeps", 0xc2, 0x9, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpgt_osps", 0xc2, 0x0e, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vcmpngeps", 0xC2, 9, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmpgt_osps", 0xC2, 0x0e, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpngeps", 0xC2, 9, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpgt_osps", 0xC2, 0x0e, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 1, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 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, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 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 } } } }, - { "vcmpngesd", 0xf2c2, 0x9, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmptrueps", 0xc2, 0x0f, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcmpngesd", 0xF2C2, 9, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmptrueps", 0xC2, 0x0f, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpngesd", 0xF2C2, 9, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmptrueps", 0xC2, 0x0f, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 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 } } } }, - { "vcmpngess", 0xf3c2, 0x9, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmptrue_uqps", 0xc2, 0x0f, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcmpngess", 0xF3C2, 9, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmptrue_uqps", 0xC2, 0x0f, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpngess", 0xF3C2, 9, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmptrue_uqps", 0xC2, 0x0f, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 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 } } } }, - { "vcmpnge_uqpd", 0x66c2, 0x19, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpeq_osps", 0xc2, 0x10, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vcmpnge_uqpd", 0x66C2, 25, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmpeq_osps", 0xC2, 0x10, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpnge_uqpd", 0x66C2, 25, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpeq_osps", 0xC2, 0x10, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 1, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 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, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 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 } } } }, - { "vcmpnge_uqps", 0xc2, 0x19, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmplt_oqps", 0xc2, 0x11, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vcmpnge_uqps", 0xC2, 25, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmplt_oqps", 0xC2, 0x11, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpnge_uqps", 0xC2, 25, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmplt_oqps", 0xC2, 0x11, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 1, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 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, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 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 } } } }, - { "vcmpnge_uqsd", 0xf2c2, 0x19, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmple_oqps", 0xc2, 0x12, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcmpnge_uqsd", 0xF2C2, 25, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmple_oqps", 0xC2, 0x12, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpnge_uqsd", 0xF2C2, 25, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmple_oqps", 0xC2, 0x12, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 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 } } } }, - { "vcmpnge_uqss", 0xf3c2, 0x19, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpunord_sps", 0xc2, 0x13, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcmpnge_uqss", 0xF3C2, 25, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmpunord_sps", 0xC2, 0x13, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpnge_uqss", 0xF3C2, 25, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpunord_sps", 0xC2, 0x13, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 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 } } } }, - { "vcmpngtpd", 0x66c2, 0xa, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpneq_usps", 0xc2, 0x14, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vcmpngtpd", 0x66C2, 10, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmpneq_usps", 0xC2, 0x14, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpngtpd", 0x66C2, 10, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpneq_usps", 0xC2, 0x14, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 1, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 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, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 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 } } } }, - { "vcmpngtps", 0xc2, 0xa, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpnlt_uqps", 0xc2, 0x15, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vcmpngtps", 0xC2, 10, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmpnlt_uqps", 0xC2, 0x15, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpngtps", 0xC2, 10, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpnlt_uqps", 0xC2, 0x15, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 1, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 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, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 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 } } } }, - { "vcmpngtsd", 0xf2c2, 0xa, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpnle_uqps", 0xc2, 0x16, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcmpngtsd", 0xF2C2, 10, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmpnle_uqps", 0xC2, 0x16, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpngtsd", 0xF2C2, 10, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpnle_uqps", 0xC2, 0x16, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 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 } } } }, - { "vcmpngtss", 0xf3c2, 0xa, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpord_sps", 0xc2, 0x17, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcmpngtss", 0xF3C2, 10, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmpord_sps", 0xC2, 0x17, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpngtss", 0xF3C2, 10, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpord_sps", 0xC2, 0x17, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 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 } } } }, - { "vcmpngt_uqpd", 0x66c2, 0x1a, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpeq_usps", 0xc2, 0x18, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vcmpngt_uqpd", 0x66C2, 26, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmpeq_usps", 0xC2, 0x18, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpngt_uqpd", 0x66C2, 26, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpeq_usps", 0xC2, 0x18, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 1, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 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, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 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 } } } }, - { "vcmpngt_uqps", 0xc2, 0x1a, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpnge_uqps", 0xc2, 0x19, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vcmpngt_uqps", 0xC2, 26, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmpnge_uqps", 0xC2, 0x19, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpngt_uqps", 0xC2, 26, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpnge_uqps", 0xC2, 0x19, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 1, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 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, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 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 } } } }, - { "vcmpngt_uqsd", 0xf2c2, 0x1a, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpngt_uqps", 0xc2, 0x1a, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcmpngt_uqsd", 0xF2C2, 26, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmpngt_uqps", 0xC2, 0x1a, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpngt_uqsd", 0xF2C2, 26, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpngt_uqps", 0xC2, 0x1a, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 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 } } } }, - { "vcmpngt_uqss", 0xf3c2, 0x1a, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpfalse_osps", 0xc2, 0x1b, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcmpngt_uqss", 0xF3C2, 26, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmpfalse_osps", 0xC2, 0x1b, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpngt_uqss", 0xF3C2, 26, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpfalse_osps", 0xC2, 0x1b, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 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 } } } }, - { "vcmpnlepd", 0x66c2, 0x6, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpneq_osps", 0xc2, 0x1c, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vcmpnlepd", 0x66C2, 6, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmpneq_osps", 0xC2, 0x1c, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpnlepd", 0x66C2, 6, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpneq_osps", 0xC2, 0x1c, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 1, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 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, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 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 } } } }, - { "vcmpnleps", 0xc2, 0x6, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpge_oqps", 0xc2, 0x1d, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vcmpnleps", 0xC2, 6, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmpge_oqps", 0xC2, 0x1d, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpnleps", 0xC2, 6, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpge_oqps", 0xC2, 0x1d, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 1, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 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, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 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 } } } }, - { "vcmpnlesd", 0xf2c2, 0x6, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpgt_oqps", 0xc2, 0x1e, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcmpnlesd", 0xF2C2, 6, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmpgt_oqps", 0xC2, 0x1e, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpnlesd", 0xF2C2, 6, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpgt_oqps", 0xC2, 0x1e, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 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 } } } }, - { "vcmpnless", 0xf3c2, 0x6, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmptrue_usps", 0xc2, 0x1f, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcmpnless", 0xF3C2, 6, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmptrue_usps", 0xC2, 0x1f, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpnless", 0xF3C2, 6, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmptrue_usps", 0xC2, 0x1f, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 1, 2, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 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 } } } }, - { "vcmpnle_uqpd", 0x66c2, 0x16, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpeqsd", 0xf2c2, 0x00, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 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, 1, 0, 0, 0 } } } }, - { "vcmpnle_uqpd", 0x66C2, 22, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpeqsd", 0xF2C2, 0x00, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 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 } } } }, - { "vcmpnle_uqpd", 0x66C2, 22, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpeqsd", 0xF2C2, 0x00, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 1, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 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 } }, { { 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, 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, 0, 0, 1, 0, 0 } }, + 0, 1, 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 } } } }, - { "vcmpnle_uqps", 0xc2, 0x16, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpeq_oqsd", 0xf2c2, 0x00, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 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, 1, 0, 0, 0 } } } }, - { "vcmpnle_uqps", 0xC2, 22, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpeq_oqsd", 0xF2C2, 0x00, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 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 } } } }, - { "vcmpnle_uqps", 0xC2, 22, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpeq_oqsd", 0xF2C2, 0x00, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 1, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 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 } }, { { 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, 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, 0, 0, 1, 0, 0 } }, + 0, 1, 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 } } } }, - { "vcmpnle_uqsd", 0xf2c2, 0x16, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpltsd", 0xf2c2, 0x01, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 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 } } } }, - { "vcmpnle_uqsd", 0xF2C2, 22, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpltsd", 0xF2C2, 0x01, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 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 } } } }, - { "vcmpnle_uqsd", 0xF2C2, 22, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpltsd", 0xF2C2, 0x01, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 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 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 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 } }, { { 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 } } } }, - { "vcmpnle_uqss", 0xf3c2, 0x16, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmplt_ossd", 0xf2c2, 0x01, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vcmpnle_uqss", 0xF3C2, 22, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmplt_ossd", 0xF2C2, 0x01, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 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 } } } }, - { "vcmpnle_uqss", 0xF3C2, 22, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmplt_ossd", 0xF2C2, 0x01, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 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 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 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 } }, { { 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 } } } }, - { "vcmpnltpd", 0x66c2, 0x5, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmplesd", 0xf2c2, 0x02, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 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, 1, 0, 0, 0 } } } }, - { "vcmpnltpd", 0x66C2, 5, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmplesd", 0xF2C2, 0x02, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 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 } } } }, - { "vcmpnltpd", 0x66C2, 5, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmplesd", 0xF2C2, 0x02, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 1, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 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 } }, { { 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, 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, 0, 0, 1, 0, 0 } }, + 0, 1, 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 } } } }, - { "vcmpnltps", 0xc2, 0x5, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmple_ossd", 0xf2c2, 0x02, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 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, 1, 0, 0, 0 } } } }, - { "vcmpnltps", 0xC2, 5, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmple_ossd", 0xF2C2, 0x02, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 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 } } } }, - { "vcmpnltps", 0xC2, 5, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmple_ossd", 0xF2C2, 0x02, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 1, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 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 } }, { { 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, 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, 0, 0, 1, 0, 0 } }, + 0, 1, 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 } } } }, - { "vcmpnltsd", 0xf2c2, 0x5, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpunordsd", 0xf2c2, 0x03, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 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 } } } }, - { "vcmpnltsd", 0xF2C2, 5, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpunordsd", 0xF2C2, 0x03, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 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 } } } }, - { "vcmpnltsd", 0xF2C2, 5, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpunordsd", 0xF2C2, 0x03, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 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 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 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 } }, { { 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 } } } }, - { "vcmpnltss", 0xf3c2, 0x5, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpunord_qsd", 0xf2c2, 0x03, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vcmpnltss", 0xF3C2, 5, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpunord_qsd", 0xF2C2, 0x03, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 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 } } } }, - { "vcmpnltss", 0xF3C2, 5, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpunord_qsd", 0xF2C2, 0x03, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 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 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 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 } }, { { 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 } } } }, - { "vcmpnlt_uqpd", 0x66c2, 0x15, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpneqsd", 0xf2c2, 0x04, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 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, 1, 0, 0, 0 } } } }, - { "vcmpnlt_uqpd", 0x66C2, 21, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpneqsd", 0xF2C2, 0x04, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 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 } } } }, - { "vcmpnlt_uqpd", 0x66C2, 21, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpneqsd", 0xF2C2, 0x04, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 1, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 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 } }, { { 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, 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, 0, 0, 1, 0, 0 } }, + 0, 1, 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 } } } }, - { "vcmpnlt_uqps", 0xc2, 0x15, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpneq_uqsd", 0xf2c2, 0x04, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 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, 1, 0, 0, 0 } } } }, - { "vcmpnlt_uqps", 0xC2, 21, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpneq_uqsd", 0xF2C2, 0x04, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 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 } } } }, - { "vcmpnlt_uqps", 0xC2, 21, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpneq_uqsd", 0xF2C2, 0x04, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 1, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 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 } }, { { 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, 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, 0, 0, 1, 0, 0 } }, + 0, 1, 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 } } } }, - { "vcmpnlt_uqsd", 0xf2c2, 0x15, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpnltsd", 0xf2c2, 0x05, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 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 } } } }, - { "vcmpnlt_uqsd", 0xF2C2, 21, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpnltsd", 0xF2C2, 0x05, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 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 } } } }, - { "vcmpnlt_uqsd", 0xF2C2, 21, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpnltsd", 0xF2C2, 0x05, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 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 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 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 } }, { { 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 } } } }, - { "vcmpnlt_uqss", 0xf3c2, 0x15, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpnlt_ussd", 0xf2c2, 0x05, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vcmpnlt_uqss", 0xF3C2, 21, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpnlt_ussd", 0xF2C2, 0x05, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 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 } } } }, - { "vcmpnlt_uqss", 0xF3C2, 21, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpnlt_ussd", 0xF2C2, 0x05, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 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 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 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 } }, { { 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 } } } }, - { "vcmpordpd", 0x66c2, 0x7, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpnlesd", 0xf2c2, 0x06, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 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, 1, 0, 0, 0 } } } }, - { "vcmpordpd", 0x66C2, 7, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpnlesd", 0xF2C2, 0x06, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 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 } } } }, - { "vcmpordpd", 0x66C2, 7, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpnlesd", 0xF2C2, 0x06, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 1, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 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 } }, { { 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, 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, 0, 0, 1, 0, 0 } }, + 0, 1, 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 } } } }, - { "vcmpordps", 0xc2, 0x7, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpnle_ussd", 0xf2c2, 0x06, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 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, 1, 0, 0, 0 } } } }, - { "vcmpordps", 0xC2, 7, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpnle_ussd", 0xF2C2, 0x06, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 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 } } } }, - { "vcmpordps", 0xC2, 7, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpnle_ussd", 0xF2C2, 0x06, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 1, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 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 } }, { { 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, 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, 0, 0, 1, 0, 0 } }, + 0, 1, 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 } } } }, - { "vcmpordsd", 0xf2c2, 0x7, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpordsd", 0xf2c2, 0x07, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 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 } } } }, - { "vcmpordsd", 0xF2C2, 7, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpordsd", 0xF2C2, 0x07, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 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 } } } }, - { "vcmpordsd", 0xF2C2, 7, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpordsd", 0xF2C2, 0x07, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 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 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 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 } }, { { 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 } } } }, - { "vcmpord_spd", 0x66c2, 0x17, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpord_qsd", 0xf2c2, 0x07, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 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, 1, 0, 0, 0 } } } }, - { "vcmpord_spd", 0x66C2, 23, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpord_qsd", 0xF2C2, 0x07, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 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 } } } }, - { "vcmpord_spd", 0x66C2, 23, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpord_qsd", 0xF2C2, 0x07, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 1, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 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 } }, { { 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, 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, 0, 0, 1, 0, 0 } }, + 0, 1, 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 } } } }, - { "vcmpord_sps", 0xc2, 0x17, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpeq_uqsd", 0xf2c2, 0x08, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 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, 1, 0, 0, 0 } } } }, - { "vcmpord_sps", 0xC2, 23, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpeq_uqsd", 0xF2C2, 0x08, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 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 } } } }, - { "vcmpord_sps", 0xC2, 23, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpeq_uqsd", 0xF2C2, 0x08, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 1, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 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 } }, { { 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, 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, 0, 0, 1, 0, 0 } }, + 0, 1, 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 } } } }, - { "vcmpordss", 0xf3c2, 0x7, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpngesd", 0xf2c2, 0x09, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vcmpordss", 0xF3C2, 7, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpngesd", 0xF2C2, 0x09, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 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 } } } }, - { "vcmpordss", 0xF3C2, 7, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpngesd", 0xF2C2, 0x09, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 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 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 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 } }, { { 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 } } } }, - { "vcmpord_ssd", 0xf2c2, 0x17, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpnge_ussd", 0xf2c2, 0x09, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 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 } } } }, - { "vcmpord_ssd", 0xF2C2, 23, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpnge_ussd", 0xF2C2, 0x09, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 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 } } } }, - { "vcmpord_ssd", 0xF2C2, 23, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpnge_ussd", 0xF2C2, 0x09, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 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 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 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 } }, { { 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 } } } }, - { "vcmpord_sss", 0xf3c2, 0x17, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpngtsd", 0xf2c2, 0x0a, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vcmpord_sss", 0xF3C2, 23, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpngtsd", 0xF2C2, 0x0a, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 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 } } } }, - { "vcmpord_sss", 0xF3C2, 23, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpngtsd", 0xF2C2, 0x0a, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 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 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 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 } }, { { 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 } } } }, - { "vcmppd", 0x66c2, None, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpngt_ussd", 0xf2c2, 0x0a, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 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, 1, 0, 0, 0 } } } }, - { "vcmppd", 0x66C2, None, 1, 4, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpngt_ussd", 0xF2C2, 0x0a, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 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 } } } }, - { "vcmppd", 0x66C2, None, 1, 5, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpngt_ussd", 0xF2C2, 0x0a, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 1, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 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, 0, 0, 1, 0, 0 } }, + 0, 1, 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 } } } }, - { "vcmpps", 0xc2, None, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpfalsesd", 0xf2c2, 0x0b, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 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, 1, 0, 0, 0 } } } }, - { "vcmpps", 0xC2, None, 1, 4, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpfalsesd", 0xF2C2, 0x0b, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 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 } } } }, - { "vcmpps", 0xC2, None, 1, 5, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpfalsesd", 0xF2C2, 0x0b, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 1, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 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, 0, 0, 1, 0, 0 } }, + 0, 1, 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 } } } }, - { "vcmpsd", 0xf2c2, None, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpfalse_oqsd", 0xf2c2, 0x0b, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vcmpsd", 0xF2C2, None, 1, 4, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpfalse_oqsd", 0xF2C2, 0x0b, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 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 } } } }, - { "vcmpsd", 0xF2C2, None, 1, 5, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpfalse_oqsd", 0xF2C2, 0x0b, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 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 } }, { { 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 } } } }, - { "vcmpss", 0xf3c2, None, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpneq_oqsd", 0xf2c2, 0x0c, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vcmpss", 0xF3C2, None, 1, 4, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpneq_oqsd", 0xF2C2, 0x0c, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 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 } } } }, - { "vcmpss", 0xF3C2, None, 1, 5, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpneq_oqsd", 0xF2C2, 0x0c, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 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 } }, { { 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 } } } }, - { "vcmptruepd", 0x66c2, 0xf, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpgesd", 0xf2c2, 0x0d, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 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, 1, 0, 0, 0 } } } }, - { "vcmptruepd", 0x66C2, 15, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpgesd", 0xF2C2, 0x0d, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 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 } } } }, - { "vcmptruepd", 0x66C2, 15, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpgesd", 0xF2C2, 0x0d, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 1, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 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 } }, { { 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, 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, 0, 0, 1, 0, 0 } }, + 0, 1, 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 } } } }, - { "vcmptrueps", 0xc2, 0xf, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpge_ossd", 0xf2c2, 0x0d, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 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, 1, 0, 0, 0 } } } }, - { "vcmptrueps", 0xC2, 15, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpge_ossd", 0xF2C2, 0x0d, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 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 } } } }, - { "vcmptrueps", 0xC2, 15, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpge_ossd", 0xF2C2, 0x0d, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 1, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 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 } }, { { 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, 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, 0, 0, 1, 0, 0 } }, + 0, 1, 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 } } } }, - { "vcmptruesd", 0xf2c2, 0xf, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpgtsd", 0xf2c2, 0x0e, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 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 } } } }, - { "vcmptruesd", 0xF2C2, 15, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpgtsd", 0xF2C2, 0x0e, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 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 } } } }, - { "vcmptruesd", 0xF2C2, 15, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpgtsd", 0xF2C2, 0x0e, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 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 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 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 } }, { { 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 } } } }, - { "vcmptruess", 0xf3c2, 0xf, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpgt_ossd", 0xf2c2, 0x0e, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vcmptruess", 0xF3C2, 15, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpgt_ossd", 0xF2C2, 0x0e, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 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 } } } }, - { "vcmptruess", 0xF3C2, 15, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpgt_ossd", 0xF2C2, 0x0e, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 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 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 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 } }, { { 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 } } } }, - { "vcmptrue_uspd", 0x66c2, 0x1f, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmptruesd", 0xf2c2, 0x0f, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 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, 1, 0, 0, 0 } } } }, - { "vcmptrue_uspd", 0x66C2, 31, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmptruesd", 0xF2C2, 0x0f, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 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 } } } }, - { "vcmptrue_uspd", 0x66C2, 31, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmptruesd", 0xF2C2, 0x0f, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 1, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 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 } }, { { 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, 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, 0, 0, 1, 0, 0 } }, + 0, 1, 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 } } } }, - { "vcmptrue_usps", 0xc2, 0x1f, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmptrue_uqsd", 0xf2c2, 0x0f, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 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, 1, 0, 0, 0 } } } }, - { "vcmptrue_usps", 0xC2, 31, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmptrue_uqsd", 0xF2C2, 0x0f, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 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 } } } }, - { "vcmptrue_usps", 0xC2, 31, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmptrue_uqsd", 0xF2C2, 0x0f, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 1, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 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 } }, { { 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, 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, 0, 0, 1, 0, 0 } }, + 0, 1, 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 } } } }, - { "vcmptrue_ussd", 0xf2c2, 0x1f, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpeq_ossd", 0xf2c2, 0x10, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 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 } } } }, - { "vcmptrue_ussd", 0xF2C2, 31, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpeq_ossd", 0xF2C2, 0x10, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 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 } } } }, - { "vcmptrue_ussd", 0xF2C2, 31, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpeq_ossd", 0xF2C2, 0x10, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 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 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 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 } }, { { 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 } } } }, - { "vcmptrue_usss", 0xf3c2, 0x1f, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmplt_oqsd", 0xf2c2, 0x11, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vcmptrue_usss", 0xF3C2, 31, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmplt_oqsd", 0xF2C2, 0x11, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 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 } } } }, - { "vcmptrue_usss", 0xF3C2, 31, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmplt_oqsd", 0xF2C2, 0x11, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 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 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 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 } }, { { 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 } } } }, - { "vcmpunordpd", 0x66c2, 0x3, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmple_oqsd", 0xf2c2, 0x12, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 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, 1, 0, 0, 0 } } } }, - { "vcmpunordpd", 0x66C2, 3, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmple_oqsd", 0xF2C2, 0x12, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 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 } } } }, - { "vcmpunordpd", 0x66C2, 3, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmple_oqsd", 0xF2C2, 0x12, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 1, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 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 } }, { { 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, 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, 0, 0, 1, 0, 0 } }, + 0, 1, 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 } } } }, - { "vcmpunordps", 0xc2, 0x3, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpunord_ssd", 0xf2c2, 0x13, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 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, 1, 0, 0, 0 } } } }, - { "vcmpunordps", 0xC2, 3, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpunord_ssd", 0xF2C2, 0x13, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 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 } } } }, - { "vcmpunordps", 0xC2, 3, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpunord_ssd", 0xF2C2, 0x13, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 1, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 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 } }, { { 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, 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, 0, 0, 1, 0, 0 } }, + 0, 1, 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 } } } }, - { "vcmpunordsd", 0xf2c2, 0x3, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpneq_ussd", 0xf2c2, 0x14, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 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 } } } }, - { "vcmpunordsd", 0xF2C2, 3, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpneq_ussd", 0xF2C2, 0x14, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 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 } } } }, - { "vcmpunordsd", 0xF2C2, 3, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpneq_ussd", 0xF2C2, 0x14, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 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 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 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 } }, { { 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 } } } }, - { "vcmpunord_spd", 0x66c2, 0x13, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpnlt_uqsd", 0xf2c2, 0x15, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 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, 1, 0, 0, 0 } } } }, - { "vcmpunord_spd", 0x66C2, 19, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpnlt_uqsd", 0xF2C2, 0x15, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 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 } } } }, - { "vcmpunord_spd", 0x66C2, 19, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpnlt_uqsd", 0xF2C2, 0x15, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 1, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 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 } }, { { 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, 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, 0, 0, 1, 0, 0 } }, + 0, 1, 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 } } } }, - { "vcmpunord_sps", 0xc2, 0x13, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpnle_uqsd", 0xf2c2, 0x16, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 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, 1, 0, 0, 0 } } } }, - { "vcmpunord_sps", 0xC2, 19, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpnle_uqsd", 0xF2C2, 0x16, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 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 } } } }, - { "vcmpunord_sps", 0xC2, 19, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpnle_uqsd", 0xF2C2, 0x16, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 1, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 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 } }, { { 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, 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, 0, 0, 1, 0, 0 } }, + 0, 1, 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 } } } }, - { "vcmpunordss", 0xf3c2, 0x3, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpord_ssd", 0xf2c2, 0x17, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vcmpunordss", 0xF3C2, 3, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpord_ssd", 0xF2C2, 0x17, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 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 } } } }, - { "vcmpunordss", 0xF3C2, 3, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpord_ssd", 0xF2C2, 0x17, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 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 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 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 } }, { { 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 } } } }, - { "vcmpunord_ssd", 0xf2c2, 0x13, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpeq_ussd", 0xf2c2, 0x18, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 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 } } } }, - { "vcmpunord_ssd", 0xF2C2, 19, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpeq_ussd", 0xF2C2, 0x18, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 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 } } } }, - { "vcmpunord_ssd", 0xF2C2, 19, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpeq_ussd", 0xF2C2, 0x18, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 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 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 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 } }, { { 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 } } } }, - { "vcmpunord_sss", 0xf3c2, 0x13, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpnge_uqsd", 0xf2c2, 0x19, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vcmpunord_sss", 0xF3C2, 19, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpnge_uqsd", 0xF2C2, 0x19, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 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 } } } }, - { "vcmpunord_sss", 0xF3C2, 19, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpnge_uqsd", 0xF2C2, 0x19, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 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 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 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 } }, { { 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 } } } }, - { "vcomisd", 0x662f, None, 1, 2, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpngt_uqsd", 0xf2c2, 0x1a, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcomisd", 0x662F, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpngt_uqsd", 0xF2C2, 0x1a, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcomisd", 0x662F, None, 1, 3, + 0, 1, 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 } } } }, + { "vcmpngt_uqsd", 0xF2C2, 0x1a, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 0, 0, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 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 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcomiss", 0x2f, None, 1, 2, + 0, 1, 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 } } } }, + { "vcmpfalse_ossd", 0xf2c2, 0x1b, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcomiss", 0x2F, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpfalse_ossd", 0xF2C2, 0x1b, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcomiss", 0x2F, None, 1, 3, + 0, 1, 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 } } } }, + { "vcmpfalse_ossd", 0xF2C2, 0x1b, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 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 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcvtdq2pd", 0xf3e6, None, 1, 2, + 0, 1, 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 } } } }, + { "vcmpneq_ossd", 0xf2c2, 0x1c, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vcvtdq2pd", 0xf3e6, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 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, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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 } } } }, - { "vcvtdq2pd", 0xf3e6, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpneq_ossd", 0xF2C2, 0x1c, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vcvtdq2pd", 0xF3E6, None, 1, 2, + 0, 1, 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 } } } }, + { "vcmpneq_ossd", 0xF2C2, 0x1c, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 1, 3, 3, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 1, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 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 } }, { { 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 } } } }, - { "vcvtdq2pd", 0xF3E6, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 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 } } } }, + { "vcmpge_oqsd", 0xf2c2, 0x1d, 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, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vcvtdq2pd", 0xF3E6, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpge_oqsd", 0xF2C2, 0x1d, 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, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, - 0, 0, 0, 0, 0, 2, 3, 3, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcvtdq2pd", 0xF3E6, None, 1, 2, + 0, 1, 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 } } } }, + { "vcmpge_oqsd", 0xF2C2, 0x1d, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 3, 3, 3, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 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 } }, { { 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 } } } }, - { "vcvtdq2ps", 0x5b, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 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 } } } }, + { "vcmpgt_oqsd", 0xf2c2, 0x1e, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vcvtdq2ps", 0x5B, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpgt_oqsd", 0xF2C2, 0x1e, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vcvtdq2ps", 0x5B, None, 1, 3, + 0, 1, 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 } } } }, + { "vcmpgt_oqsd", 0xF2C2, 0x1e, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 1, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 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 } }, { { 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, 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, 0, 0, 1, 0, 0 } } } }, - { "vcvtpd2dq", 0xf2e6, None, 1, 2, + 0, 1, 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 } } } }, + { "vcmptrue_ussd", 0xf2c2, 0x1f, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcvtpd2dq", 0xF2E6, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmptrue_ussd", 0xF2C2, 0x1f, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 0, 0, 0, 0, 0, 1, 3, 4, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 1, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vcvtpd2dq", 0xF2E6, None, 1, 3, + 0, 1, 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 } } } }, + { "vcmptrue_ussd", 0xF2C2, 0x1f, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 0, 0, 0, 0, 0, 1, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 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 } }, { { 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, 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, 0, 1, 0, 0, 0 } } } }, - { "vcvtpd2dq", 0xF2E6, None, 1, 2, + 0, 1, 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 } } } }, + { "vcmpeqss", 0xf3c2, 0x00, 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, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 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, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcvtpd2dqx", 0xf2e6, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpeqss", 0xF3C2, 0x00, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 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, 1, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcvtpd2dqx", 0xF2E6, None, 1, 2, + 0, 1, 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 } } } }, + { "vcmpeqss", 0xF3C2, 0x00, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 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, 2, 3, 4, 0, 0, 4, 0, 0, 0, 0, 1, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcvtpd2dqy", 0xf2e6, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 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 } } } }, + { "vcmpeq_oqss", 0xf3c2, 0x00, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcvtpd2dqy", 0xF2E6, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpeq_oqss", 0xF3C2, 0x00, 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, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 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, 3, 3, 4, 0, 0, 5, 0, 0, 0, 0, 1, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcvtpd2ps", 0x665a, None, 1, 2, + 0, 1, 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 } } } }, + { "vcmpeq_oqss", 0xF3C2, 0x00, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 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 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcvtpd2ps", 0x665A, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 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 } } } }, + { "vcmpltss", 0xf3c2, 0x01, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 0, 0, 0, 0, 0, 1, 3, 4, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 1, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vcvtpd2ps", 0x665A, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpltss", 0xF3C2, 0x01, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 0, 0, 0, 0, 0, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vcvtpd2ps", 0x665A, None, 1, 2, + 0, 1, 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 } } } }, + { "vcmpltss", 0xF3C2, 0x01, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 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, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcvtpd2psx", 0x665a, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 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 } } } }, + { "vcmplt_osss", 0xf3c2, 0x01, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcvtpd2psx", 0x665A, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmplt_osss", 0xF3C2, 0x01, 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, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 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, 2, 3, 4, 0, 0, 4, 0, 0, 0, 0, 1, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcvtpd2psy", 0x665a, None, 1, 2, + 0, 1, 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 } } } }, + { "vcmplt_osss", 0xF3C2, 0x01, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcvtpd2psy", 0x665A, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 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 } } } }, + { "vcmpless", 0xf3c2, 0x02, 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, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 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, 3, 3, 4, 0, 0, 5, 0, 0, 0, 0, 1, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcvtps2dq", 0x665b, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpless", 0xF3C2, 0x02, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 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 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vcvtps2dq", 0x665B, None, 1, 2, + 0, 1, 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 } } } }, + { "vcmpless", 0xF3C2, 0x02, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vcvtps2dq", 0x665B, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 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 } } } }, + { "vcmple_osss", 0xf3c2, 0x02, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 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, 0, 0, 1, 0, 0 } } } }, - { "vcvtps2pd", 0x5a, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmple_osss", 0xF3C2, 0x02, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 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 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vcvtps2pd", 0x5a, None, 1, 2, + 0, 1, 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 } } } }, + { "vcmple_osss", 0xF3C2, 0x02, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 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, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcvtps2pd", 0x5a, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 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 } } } }, + { "vcmpunordss", 0xf3c2, 0x03, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vcvtps2pd", 0x5A, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpunordss", 0xF3C2, 0x03, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 1, 3, 3, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 1, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } } } }, - { "vcvtps2pd", 0x5A, None, 1, 3, + 0, 1, 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 } } } }, + { "vcmpunordss", 0xF3C2, 0x03, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 1, 3, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 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 } }, { { 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, 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, 0, 0, 1, 0, 0 } } } }, - { "vcvtps2pd", 0x5A, None, 1, 2, + 0, 1, 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 } } } }, + { "vcmpunord_qss", 0xf3c2, 0x03, 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, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vcvtps2pd", 0x5A, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpunord_qss", 0xF3C2, 0x03, 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, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, - 0, 0, 0, 0, 0, 2, 3, 3, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcvtps2pd", 0x5A, None, 1, 2, + 0, 1, 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 } } } }, + { "vcmpunord_qss", 0xF3C2, 0x03, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 3, 3, 3, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 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 } }, { { 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 } } } }, - { "vcvtsd2si", 0xf22d, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 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 } } } }, + { "vcmpneqss", 0xf3c2, 0x04, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcvtsd2si", 0xF22D, None, 1, 2, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpneqss", 0xF3C2, 0x04, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcvtsd2si", 0xF22D, None, 1, 3, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 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 } } } }, + { "vcmpneqss", 0xF3C2, 0x04, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 4, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 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 } }, { { 7, 0, 0, 0, 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, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcvtsd2ss", 0xf25a, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 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 } } } }, + { "vcmpneq_uqss", 0xf3c2, 0x04, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vcvtsd2ss", 0xF25A, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpneq_uqss", 0xF3C2, 0x04, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 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, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcvtsd2ss", 0xF25A, None, 1, 4, + 0, 1, 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 } } } }, + { "vcmpneq_uqss", 0xF3C2, 0x04, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 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 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcvtsi2sd", 0xf22a, None, 1, 3, + 0, 1, 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 } } } }, + { "vcmpnltss", 0xf3c2, 0x05, 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, 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, 1, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vcvtsi2sd", 0xf22a, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpnltss", 0xF3C2, 0x05, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, - 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, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcvtsi2sd", 0xF22A, None, 1, 3, + 0, 1, 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 } } } }, + { "vcmpnltss", 0xF3C2, 0x05, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, - 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 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 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcvtsi2sd", 0xF22A, None, 1, 3, + 0, 1, 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 } } } }, + { "vcmpnlt_usss", 0xf3c2, 0x05, 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, 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, 1, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, - 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vcvtsi2sd", 0xF22A, None, 1, 4, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpnlt_usss", 0xF3C2, 0x05, 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, 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, 1, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 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, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0 } }, - { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcvtsi2sd", 0xF22A, None, 1, 4, + 0, 1, 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 } } } }, + { "vcmpnlt_usss", 0xF3C2, 0x05, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 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 } }, - { { 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 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcvtsi2ss", 0xf32a, None, 1, 3, + 0, 1, 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 } } } }, + { "vcmpnless", 0xf3c2, 0x06, 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, 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, 1, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vcvtsi2ss", 0xf32a, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpnless", 0xF3C2, 0x06, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 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, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, - 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, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcvtsi2ss", 0xF32A, None, 1, 3, + 0, 1, 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 } } } }, + { "vcmpnless", 0xF3C2, 0x06, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, - 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 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 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcvtsi2ss", 0xF32A, None, 1, 3, + 0, 1, 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 } } } }, + { "vcmpnle_usss", 0xf3c2, 0x06, 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, 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, 1, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, - 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vcvtsi2ss", 0xF32A, None, 1, 4, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpnle_usss", 0xF3C2, 0x06, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, - 0, 0, 0, 0, 0, 4, 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, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } }, - { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcvtsi2ss", 0xF32A, None, 1, 4, + 0, 1, 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 } } } }, + { "vcmpnle_usss", 0xF3C2, 0x06, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, - 0, 0, 0, 0, 0, 4, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 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 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcvtss2sd", 0xf35a, None, 1, 3, + 0, 1, 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 } } } }, + { "vcmpordss", 0xf3c2, 0x07, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 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 } } } }, - { "vcvtss2sd", 0xF35A, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpordss", 0xF3C2, 0x07, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcvtss2sd", 0xF35A, None, 1, 4, + 0, 1, 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 } } } }, + { "vcmpordss", 0xF3C2, 0x07, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 3, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 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 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 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 } } } }, - { "vcvtss2si", 0xf32d, None, 1, 2, + 0, 1, 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 } } } }, + { "vcmpord_qss", 0xf3c2, 0x07, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 3, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcvtss2si", 0xF32D, None, 1, 2, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpord_qss", 0xF3C2, 0x07, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 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, 4, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcvtss2si", 0xF32D, None, 1, 3, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 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 } } } }, + { "vcmpord_qss", 0xF3C2, 0x07, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 4, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 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 } }, { { 7, 0, 0, 0, 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, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcvttpd2dq", 0x66e6, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 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 } } } }, + { "vcmpeq_uqss", 0xf3c2, 0x08, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcvttpd2dq", 0x66E6, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpeq_uqss", 0xF3C2, 0x08, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 0, 0, 0, 0, 0, 1, 3, 4, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 1, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vcvttpd2dq", 0x66E6, None, 1, 3, + 0, 1, 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 } } } }, + { "vcmpeq_uqss", 0xF3C2, 0x08, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 0, 0, 0, 0, 0, 1, 3, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 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 } }, { { 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, 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, 0, 1, 0, 0, 0 } } } }, - { "vcvttpd2dq", 0x66E6, None, 1, 2, + 0, 1, 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 } } } }, + { "vcmpngess", 0xf3c2, 0x09, 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, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 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, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcvttpd2dqx", 0x66e6, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 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, 1, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 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 } } } }, - { "vcvttpd2dqx", 0x66E6, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpngess", 0xF3C2, 0x09, 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, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 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, 2, 3, 4, 0, 0, 4, 0, 0, 0, 0, 1, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcvttpd2dqy", 0x66e6, None, 1, 2, + 0, 1, 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 } } } }, + { "vcmpngess", 0xF3C2, 0x09, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcvttpd2dqy", 0x66E6, None, 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, 1, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 0, 0, 0, 0, 0, 3, 3, 4, 0, 0, 5, 0, 0, 0, 0, 1, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 1, 0, 1, 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 } } } }, - { "vcvttps2dq", 0xf35b, None, 1, 2, + 0, 1, 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 } } } }, + { "vcmpnge_usss", 0xf3c2, 0x09, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vcvttps2dq", 0xF35B, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpnge_usss", 0xF3C2, 0x09, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vcvttps2dq", 0xF35B, None, 1, 3, + 0, 1, 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 } } } }, + { "vcmpnge_usss", 0xF3C2, 0x09, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 1, 3, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 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 } }, { { 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, 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, 0, 0, 1, 0, 0 } } } }, - { "vcvttsd2si", 0xf22c, None, 1, 2, + 0, 1, 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 } } } }, + { "vcmpngtss", 0xf3c2, 0x0a, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcvttsd2si", 0xF22C, None, 1, 2, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpngtss", 0xF3C2, 0x0a, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcvttsd2si", 0xF22C, None, 1, 3, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 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 } } } }, + { "vcmpngtss", 0xF3C2, 0x0a, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 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 } }, { { 7, 0, 0, 0, 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, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcvttss2si", 0xf32c, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 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 } } } }, + { "vcmpngt_usss", 0xf3c2, 0x0a, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 3, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcvttss2si", 0xF32C, None, 1, 2, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpngt_usss", 0xF3C2, 0x0a, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 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, 4, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcvttss2si", 0xF32C, None, 1, 3, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 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 } } } }, + { "vcmpngt_usss", 0xF3C2, 0x0a, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 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 } }, { { 7, 0, 0, 0, 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, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "vdivpd", 0x665e, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 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 } } } }, + { "vcmpfalsess", 0xf3c2, 0x0b, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 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, 1, 0, 0, 0 } } } }, - { "vdivpd", 0x665E, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpfalsess", 0xF3C2, 0x0b, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vdivpd", 0x665E, None, 1, 4, + 0, 1, 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 } } } }, + { "vcmpfalsess", 0xF3C2, 0x0b, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 1, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 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 } }, - { { 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 } }, { { 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, 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, 0, 0, 1, 0, 0 } } } }, - { "vdivps", 0x5e, None, 1, 3, + 0, 1, 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 } } } }, + { "vcmpfalse_oqss", 0xf3c2, 0x0b, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 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, 1, 0, 0, 0 } } } }, - { "vdivps", 0x5E, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpfalse_oqss", 0xF3C2, 0x0b, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vdivps", 0x5E, None, 1, 4, + 0, 1, 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 } } } }, + { "vcmpfalse_oqss", 0xF3C2, 0x0b, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 1, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 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 } }, { { 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, 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, 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 } } } }, - { "vdivsd", 0xf25e, None, 1, 3, + 0, 1, 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 } } } }, + { "vcmpneq_oqss", 0xf3c2, 0x0c, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vdivsd", 0xF25E, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpneq_oqss", 0xF3C2, 0x0c, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 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, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vdivsd", 0xF25E, None, 1, 4, + 0, 1, 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 } } } }, + { "vcmpneq_oqss", 0xF3C2, 0x0c, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 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 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vdivss", 0xf35e, None, 1, 3, + 0, 1, 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 } } } }, + { "vcmpgess", 0xf3c2, 0x0d, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 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 } } } }, - { "vdivss", 0xF35E, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpgess", 0xF3C2, 0x0d, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vdivss", 0xF35E, None, 1, 4, + 0, 1, 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 } } } }, + { "vcmpgess", 0xF3C2, 0x0d, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 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 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 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 } } } }, - { "vdppd", 0x6641, None, 1, 4, + 0, 1, 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 } } } }, + { "vcmpge_osss", 0xf3c2, 0x0d, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vdpps", 0x6640, None, 1, 4, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpge_osss", 0xF3C2, 0x0d, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vextractf128", 0x6619, None, 1, 3, + 0, 1, 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 } } } }, + { "vcmpge_osss", 0xF3C2, 0x0d, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 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 } }, { { 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, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } } } }, - { "vextractps", 0x6617, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 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 } } } }, + { "vcmpgtss", 0xf3c2, 0x0e, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, - { "vextractps", 0x6617, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpgtss", 0xF3C2, 0x0e, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 3, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "vextractps", 0x6617, None, 1, 3, + 0, 1, 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 } } } }, + { "vcmpgtss", 0xF3C2, 0x0e, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, - 2, 0, 0, 0, 0, 2, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 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 } }, { { 7, 0, 0, 0, 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, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, - { "vextractps", 0x6617, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 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 } } } }, + { "vcmpgt_osss", 0xf3c2, 0x0e, 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, 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, 1, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, - 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "vhaddpd", 0x667c, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpgt_osss", 0xF3C2, 0x0e, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vhaddps", 0xf27c, None, 1, 3, + 0, 1, 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 } } } }, + { "vcmpgt_osss", 0xF3C2, 0x0e, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vhsubpd", 0x667d, None, 1, 3, + 0, 1, 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 } } } }, + { "vcmptruess", 0xf3c2, 0x0f, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 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, 1, 0, 0, 0 } } } }, - { "vhsubps", 0xf27d, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmptruess", 0xF3C2, 0x0f, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vinsertf128", 0x6618, None, 1, 4, + 0, 1, 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 } } } }, + { "vcmptruess", 0xF3C2, 0x0f, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 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 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 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, 0, 1, 0, 0, 0 } } } }, - { "vinsertps", 0x6621, None, 1, 4, + 0, 1, 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 } } } }, + { "vcmptrue_uqss", 0xf3c2, 0x0f, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vinsertps", 0x6621, None, 1, 4, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmptrue_uqss", 0xF3C2, 0x0f, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 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, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vlddqu", 0xf2f0, None, 1, 2, + 0, 1, 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 } } } }, + { "vcmptrue_uqss", 0xF3C2, 0x0f, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 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, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vldmxcsr", 0xae, 0x2, 1, 1, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 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 } } } }, + { "vcmpeq_osss", 0xf3c2, 0x10, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, - { "vmaskmovdqu", 0x66f7, None, 1, 2, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpeq_osss", 0xF3C2, 0x10, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 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 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vmaskmovpd", 0x662f, None, 1, 3, + 0, 1, 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 } } } }, + { "vcmpeq_osss", 0xF3C2, 0x10, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, - { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } } } }, - { "vmaskmovpd", 0x662d, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 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 } } } }, + { "vcmplt_oqss", 0xf3c2, 0x11, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 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, 1, 0, 0, 0 } } } }, - { "vmaskmovps", 0x662e, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmplt_oqss", 0xF3C2, 0x11, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, - { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } } } }, - { "vmaskmovps", 0x662c, None, 1, 3, + 0, 1, 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 } } } }, + { "vcmplt_oqss", 0xF3C2, 0x11, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vmaxpd", 0x665f, None, 1, 3, + 0, 1, 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 } } } }, + { "vcmple_oqss", 0xf3c2, 0x12, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 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, 1, 0, 0, 0 } } } }, - { "vmaxpd", 0x665F, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmple_oqss", 0xF3C2, 0x12, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vmaxpd", 0x665F, None, 1, 4, + 0, 1, 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 } } } }, + { "vcmple_oqss", 0xF3C2, 0x12, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 1, 3, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 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 } }, - { { 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 } }, { { 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, 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, 0, 0, 1, 0, 0 } } } }, - { "vmaxps", 0x5f, None, 1, 3, + 0, 1, 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 } } } }, + { "vcmpunord_sss", 0xf3c2, 0x13, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 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, 1, 0, 0, 0 } } } }, - { "vmaxps", 0x5F, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpunord_sss", 0xF3C2, 0x13, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vmaxps", 0x5F, None, 1, 4, + 0, 1, 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 } } } }, + { "vcmpunord_sss", 0xF3C2, 0x13, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 1, 3, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 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 } }, - { { 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 } }, { { 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, 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, 0, 0, 1, 0, 0 } } } }, - { "vmaxsd", 0xf25f, None, 1, 3, + 0, 1, 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 } } } }, + { "vcmpneq_usss", 0xf3c2, 0x14, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vmaxsd", 0xF25F, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpneq_usss", 0xF3C2, 0x14, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 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, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vmaxsd", 0xF25F, None, 1, 4, + 0, 1, 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 } } } }, + { "vcmpneq_usss", 0xF3C2, 0x14, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 3, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 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 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vmaxss", 0xf35f, None, 1, 3, + 0, 1, 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 } } } }, + { "vcmpnlt_uqss", 0xf3c2, 0x15, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 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 } } } }, - { "vmaxss", 0xF35F, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpnlt_uqss", 0xF3C2, 0x15, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vmaxss", 0xF35F, None, 1, 4, + 0, 1, 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 } } } }, + { "vcmpnlt_uqss", 0xF3C2, 0x15, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 3, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 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 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vminpd", 0x665d, None, 1, 3, + 0, 1, 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 } } } }, + { "vcmpnle_uqss", 0xf3c2, 0x16, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 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, 1, 0, 0, 0 } } } }, - { "vminpd", 0x665D, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpnle_uqss", 0xF3C2, 0x16, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vminpd", 0x665D, None, 1, 4, + 0, 1, 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 } } } }, + { "vcmpnle_uqss", 0xF3C2, 0x16, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 1, 3, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 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 } }, - { { 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 } }, { { 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, 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, 0, 0, 1, 0, 0 } } } }, - { "vminps", 0x5d, None, 1, 3, + 0, 1, 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 } } } }, + { "vcmpord_sss", 0xf3c2, 0x17, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 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, 1, 0, 0, 0 } } } }, - { "vminps", 0x5D, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpord_sss", 0xF3C2, 0x17, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vminps", 0x5D, None, 1, 4, + 0, 1, 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 } } } }, + { "vcmpord_sss", 0xF3C2, 0x17, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 1, 3, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 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 } }, - { { 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 } }, { { 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, 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, 0, 0, 1, 0, 0 } } } }, - { "vminsd", 0xf25d, None, 1, 3, + 0, 1, 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 } } } }, + { "vcmpeq_usss", 0xf3c2, 0x18, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vminsd", 0xF25D, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpeq_usss", 0xF3C2, 0x18, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 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, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vminsd", 0xF25D, None, 1, 4, + 0, 1, 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 } } } }, + { "vcmpeq_usss", 0xF3C2, 0x18, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 3, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 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 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vminss", 0xf35d, None, 1, 3, + 0, 1, 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 } } } }, + { "vcmpnge_uqss", 0xf3c2, 0x19, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 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 } } } }, - { "vminss", 0xF35D, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpnge_uqss", 0xF3C2, 0x19, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vminss", 0xF35D, None, 1, 4, + 0, 1, 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 } } } }, + { "vcmpnge_uqss", 0xF3C2, 0x19, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 3, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 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 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vmovapd", 0x6628, None, 1, 2, + 0, 1, 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 } } } }, + { "vcmpngt_uqss", 0xf3c2, 0x1a, 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, 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 } }, - { 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vmovapd", 0x6628, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpngt_uqss", 0xF3C2, 0x1a, 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, 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 } }, - { 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vmovaps", 0x28, None, 1, 2, + 0, 1, 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 } } } }, + { "vcmpngt_uqss", 0xF3C2, 0x1a, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vmovaps", 0x28, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 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 } } } }, + { "vcmpfalse_osss", 0xf3c2, 0x1b, 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, 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 } }, - { 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vmovd", 0x666e, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpfalse_osss", 0xF3C2, 0x1b, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vmovd", 0x667e, None, 1, 2, + 0, 1, 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 } } } }, + { "vcmpfalse_osss", 0xF3C2, 0x1b, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 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, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "vmovd", 0x666E, None, 1, 2, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 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 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 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 } } } }, + { "vcmpneq_osss", 0xf3c2, 0x1c, 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, 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 } }, - { 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vmovddup", 0xf212, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpneq_osss", 0xF3C2, 0x1c, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 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 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vmovddup", 0xf212, None, 1, 2, + 0, 1, 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 } } } }, + { "vcmpneq_osss", 0xF3C2, 0x1c, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 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 } }, { { 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 } } } }, - { "vmovddup", 0xF212, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 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 } } } }, + { "vcmpge_oqss", 0xf3c2, 0x1d, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 1, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 1, 0, 0 } } } }, - { "vmovddup", 0xF212, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpge_oqss", 0xF3C2, 0x1d, 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, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 2, - 0, 0, 0, 0, 0, 2, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vmovdqa", 0x666f, None, 1, 2, + 0, 1, 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 } } } }, + { "vcmpge_oqss", 0xF3C2, 0x1d, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vmovdqu", 0xf36f, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 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 } } } }, + { "vcmpgt_oqss", 0xf3c2, 0x1e, 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, 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 } }, - { 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vmovhlps", 0x12, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpgt_oqss", 0xF3C2, 0x1e, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 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 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vmovhlps", 0x12, None, 1, 3, + 0, 1, 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 } } } }, + { "vcmpgt_oqss", 0xF3C2, 0x1e, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 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 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vmovhpd", 0x6616, None, 1, 3, + 0, 1, 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 } } } }, + { "vcmptrue_usss", 0xf3c2, 0x1f, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vmovhpd", 0x6617, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmptrue_usss", 0xF3C2, 0x1f, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 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 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, - { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, - { "vmovhpd", 0x6616, None, 1, 3, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 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 } } } }, + { "vcmptrue_usss", 0xF3C2, 0x1f, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 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 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vmovhpd", 0x6617, None, 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, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 2, - 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, - { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, - { "vmovhps", 0x16, None, 1, 3, + 0, 1, 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 } } } }, + { "vcmppd", 0x66c2, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vmovhps", 0x17, None, 1, 2, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmppd", 0x66C2, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 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 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, - { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, - { "vmovhps", 0x16, None, 1, 3, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 0, 0, 0 } }, + { { 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 } } } }, + { "vcmppd", 0x66C2, None, 1, 5, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 1, 2, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vmovhps", 0x17, None, 1, 2, + 0, 0, 0, 1, 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 } } } }, + { "vcmpps", 0xc2, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, - { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, - { "vmovlhps", 0x16, None, 1, 3, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcmpps", 0xC2, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 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 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vmovlhps", 0x16, None, 1, 3, + 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, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcmpps", 0xC2, None, 1, 5, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 1, 2, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vmovlpd", 0x6612, None, 1, 3, + 0, 0, 0, 1, 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 } } } }, + { "vcmpsd", 0xf2c2, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vmovlpd", 0x6613, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpsd", 0xF2C2, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 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 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, - { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, - { "vmovlpd", 0x6612, None, 1, 3, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 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 } } } }, + { "vcmpsd", 0xF2C2, None, 1, 5, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 2, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vmovlpd", 0x6613, None, 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, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 2, - 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, - { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, - { "vmovlps", 0x12, None, 1, 3, + 0, 1, 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 } } } }, + { "vcmpss", 0xf3c2, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vmovlps", 0x13, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcmpss", 0xF3C2, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 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 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, - { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, - { "vmovlps", 0x12, None, 1, 3, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 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 } } } }, + { "vcmpss", 0xF3C2, None, 1, 5, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 2, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vmovlps", 0x13, None, 1, 2, + 0, 1, 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 } } } }, + { "vcomisd", 0x662f, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, - { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, - { "vmovmskpd", 0x6650, None, 1, 2, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcomisd", 0x662F, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "vmovmskps", 0x50, None, 1, 2, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 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, 4, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcomisd", 0x662F, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "vmovntdq", 0x66e7, None, 1, 2, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 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, 4, 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 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcomiss", 0x2f, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, - { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } } } }, - { "vmovntdq", 0x66E7, None, 1, 2, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcomiss", 0x2F, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, - { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } } } }, - { "vmovntdqa", 0x662a, None, 1, 2, + 0, 0, 0, 0, 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, 1, 1, 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, 4, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcomiss", 0x2F, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 4, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vmovntdqa", 0x662a, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcvtdq2pd", 0xf3e6, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vmovntdqa", 0x662A, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcvtdq2pd", 0xf3e6, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 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, 1, 1, 1, 1, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vmovntpd", 0x662b, None, 1, 2, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vcvtdq2pd", 0xF3E6, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 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 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, - { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } } } }, - { "vmovntpd", 0x662B, None, 1, 2, + 0, 0, 0, 0, 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, 1, 1, 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, 1, 3, 3, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 0, 1, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vcvtdq2pd", 0xF3E6, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 2, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, - { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } } } }, - { "vmovntps", 0x2b, None, 1, 2, + 0, 0, 0, 0, 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, 1, 1, 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, 2, 3, 3, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcvtdq2pd", 0xF3E6, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, - { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } } } }, - { "vmovntps", 0x2B, None, 1, 2, + 0, 0, 0, 0, 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, 1, 1, 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, 3, 3, 3, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vcvtdq2ps", 0x5b, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, - { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } } } }, - { "vmovq", 0xf37e, None, 1, 2, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 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 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcvtdq2ps", 0x5B, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vmovq", 0x66d6, None, 1, 2, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vcvtdq2ps", 0x5B, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } } } }, - { "vmovq", 0x666e, None, 1, 2, + 0, 0, 0, 0, 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, 1, 1, 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, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vcvtpd2dq", 0xf2e6, None, 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, 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, 1, 0, 0 } }, - { 1, 0, 0, 1, 0, 0, 0, 0, 3, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, - 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vmovq", 0x666E, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcvtpd2dq", 0xf2e6, None, 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, 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, 1, 0, 0 } }, - { 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 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, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vmovq", 0xF37E, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcvtpd2dq", 0xF2E6, None, 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, 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, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, + 0, 0, 1, 3, 4, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 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, - 0, 1, 0, 0, 0, 0 } } } }, - { "vmovq", 0x66D6, None, 1, 2, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vcvtpd2dq", 0xF2E6, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } } } }, - { "vmovsd", 0xf210, None, 1, 2, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 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, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vcvtpd2dq", 0xF2E6, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 1, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vmovsd", 0xf210, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcvtpd2dq", 0xF2E6, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 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 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 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, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 1, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vmovsd", 0xF210, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcvtpd2dqx", 0xf2e6, None, 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, 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 } }, - { 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 0, 0, 0, 0, 0, 4, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 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, 1, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vmovsd", 0xF210, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcvtpd2dqx", 0xF2E6, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 2, - 0, 0, 0, 0, 0, 4, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 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 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 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, 2, 3, 4, 0, 0, 4, 0, 0, 0, 0, 0, 1, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vmovshdup", 0xf316, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcvtpd2dqy", 0xf2e6, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, 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, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 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, - 0, 1, 1, 0, 0, 0 } } } }, - { "vmovshdup", 0xF316, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcvtpd2dqy", 0xF2E6, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, - 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 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, 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, 2, 0, 0, 0, + 0, 0, 3, 3, 4, 0, 0, 5, 0, 0, 0, 0, 0, 1, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 0, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vmovsldup", 0xf312, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcvtpd2ps", 0x665a, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vmovsldup", 0xF312, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcvtpd2ps", 0x665a, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 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, 1, 1, 1, 1, 1, 1, 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, 1, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 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, 1, 1, 0, 0 } } } }, - { "vmovss", 0xf310, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcvtpd2ps", 0x665A, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, + 0, 0, 1, 3, 4, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 0, 0, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vmovss", 0xf310, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vcvtpd2ps", 0x665A, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 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, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vmovss", 0xF310, None, 1, 2, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vcvtpd2ps", 0x665A, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 4, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 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, 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, 2, 0, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 1, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vmovss", 0xF310, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcvtpd2ps", 0x665A, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, - 0, 0, 0, 0, 0, 4, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 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 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 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, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 1, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vmovupd", 0x6610, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcvtpd2psx", 0x665a, None, 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, 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 } }, - { 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 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, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vmovupd", 0x6610, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcvtpd2psx", 0x665A, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 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, 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, 2, 0, 0, 0, + 0, 0, 2, 3, 4, 0, 0, 4, 0, 0, 0, 0, 0, 1, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vmovups", 0x10, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcvtpd2psy", 0x665a, None, 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, 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 } }, - { 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, 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, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 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, - 0, 1, 1, 0, 0, 0 } } } }, - { "vmovups", 0x10, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcvtpd2psy", 0x665A, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 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, 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, 2, 0, 0, 0, + 0, 0, 3, 3, 4, 0, 0, 5, 0, 0, 0, 0, 0, 1, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 0, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vmpsadbw", 0x6642, None, 1, 4, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcvtps2dq", 0x665b, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 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 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vmpsadbw", 0x6642, None, 1, 4, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcvtps2dq", 0x665B, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 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, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vmulpd", 0x6659, None, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vcvtps2dq", 0x665B, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 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, 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, 1, 0, 0, 0, + 0, 0, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vmulpd", 0x6659, None, 1, 3, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vcvtps2pd", 0x5a, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vmulpd", 0x6659, None, 1, 4, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcvtps2pd", 0x5a, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 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, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } } } }, - { "vmulps", 0x59, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vcvtps2pd", 0x5A, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 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, 1, 3, 3, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 0, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vmulps", 0x59, None, 1, 3, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vcvtps2pd", 0x5A, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 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, 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, 1, 0, 0, 0, + 0, 0, 1, 3, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 0, 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, 1, 1, 0, 0 } } } }, - { "vmulps", 0x59, None, 1, 4, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vcvtps2pd", 0x5A, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 2, 3, 3, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcvtps2pd", 0x5A, None, 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, 1, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 3, 3, 3, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } } } }, - { "vmulsd", 0xf259, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vcvtsd2si", 0xf22d, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 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, - 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 } } } }, - { "vmulsd", 0xF259, None, 1, 3, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcvtsd2si", 0xF22D, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 4, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 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, - 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 } } } }, - { "vmulsd", 0xF259, None, 1, 4, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcvtsd2si", 0xF22D, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 4, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 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 } } } }, - { "vmulss", 0xf359, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcvtsd2ss", 0xf25a, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vmulss", 0xF359, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcvtsd2ss", 0xF25A, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vmulss", 0xF359, None, 1, 4, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcvtsd2ss", 0xF25A, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vorpd", 0x6656, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcvtsi2sd", 0xf22a, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 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, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 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, 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, - 0, 1, 1, 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, 1, 0, 0, 0 } } } }, - { "vorpd", 0x6656, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcvtsi2sd", 0xf22a, None, 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, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 2, - 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 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, 1, 1, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 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, 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, - 0, 1, 1, 1, 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, 1, 1, 0, 0 } } } }, - { "vorps", 0x56, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcvtsi2sd", 0xF22A, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 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, 1, 0, 1, 1, 0, 1, 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, 4, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 1, 0, 0 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 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, 1, 0, 0, 0 } } } }, - { "vorps", 0x56, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcvtsi2sd", 0xF22A, None, 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, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 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, 1, 1, 0, 1, 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, 4, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 1, 0 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 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, 1, 1, 0, 0 } } } }, - { "vpabsb", 0x661c, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcvtsi2sd", 0xF22A, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 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, 0, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 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, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpabsb", 0x661c, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 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, 0, 1, 0, 0, 0 } } } }, - { "vpabsb", 0x661C, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcvtsi2sd", 0xF22A, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 3, - 1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 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, 1, 1, 1, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vpabsd", 0x661e, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 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 } } } }, - { "vpabsd", 0x661e, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcvtsi2ss", 0xf32a, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 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, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 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, 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, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpabsd", 0x661E, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcvtsi2ss", 0xf32a, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 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, 1, 1, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 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, 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, - 0, 1, 1, 1, 0, 0 } } } }, - { "vpabsw", 0x661d, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcvtsi2ss", 0xF32A, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 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, 4, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 1, 0, 0 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpabsw", 0x661d, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcvtsi2ss", 0xF32A, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 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, 1, 1, 0, 1, 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, 4, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 1, 0 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpabsw", 0x661D, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcvtsi2ss", 0xF32A, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 3, - 1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 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, 1, 1, 0, 1, 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, 4, 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, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vpackssdw", 0x666b, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcvtsi2ss", 0xF32A, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, + 0, 0, 4, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpackssdw", 0x666b, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcvtss2sd", 0xf35a, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 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, 0, 1, 0, 0, 0 } } } }, - { "vpackssdw", 0x666B, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcvtss2sd", 0xF35A, None, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, - 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 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, 1, 1, 0, 0 } } } }, - { "vpacksswb", 0x6663, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcvtss2sd", 0xF35A, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 3, 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 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpacksswb", 0x6663, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcvtss2si", 0xf32d, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, - { { 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 } } } }, - { "vpacksswb", 0x6663, None, 1, 3, + 0, 0, 0, 0, 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, 1, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcvtss2si", 0xF32D, None, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 3, - 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vpackusdw", 0x662b, None, 1, 3, + 0, 0, 0, 0, 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, 1, 0, 1, 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, 4, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcvtss2si", 0xF32D, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 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, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 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, 4, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpackusdw", 0x662b, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcvttpd2dq", 0x66e6, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, - { { 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 } } } }, - { "vpackusdw", 0x662B, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcvttpd2dq", 0x66e6, None, 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, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, - 1, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 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, 1, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 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, 1, 1, 0, 0 } } } }, - { "vpackuswb", 0x6667, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcvttpd2dq", 0x66E6, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 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, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 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, 1, 3, 4, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 0, 0, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpackuswb", 0x6667, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vcvttpd2dq", 0x66E6, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 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, 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, 2, 0, 0, 0, + 0, 0, 1, 3, 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 } }, { { 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, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpackuswb", 0x6667, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vcvttpd2dq", 0x66E6, None, 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, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, - 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 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, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 1, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vpaddsb", 0x66ec, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcvttpd2dq", 0x66E6, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 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, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 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, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 1, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpaddsb", 0x66ec, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcvttpd2dqx", 0x66e6, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 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, 1, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpaddsb", 0x66EC, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcvttpd2dqx", 0x66E6, None, 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, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, - 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 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, 2, 3, 4, 0, 0, 4, 0, 0, 0, 0, 0, 1, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vpaddsw", 0x66ed, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcvttpd2dqy", 0x66e6, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, 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, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 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, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcvttpd2dqy", 0x66E6, None, 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, 1, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, + 0, 0, 3, 3, 4, 0, 0, 5, 0, 0, 0, 0, 0, 1, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 0, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpaddsw", 0x66ed, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcvttps2dq", 0xf35b, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, - { { 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 } } } }, - { "vpaddsw", 0x66ED, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vcvttps2dq", 0xF35B, None, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 3, - 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 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, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vpaddb", 0x66fc, None, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vcvttps2dq", 0xF35B, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 1, 3, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpaddb", 0x66fc, None, 1, 3, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vcvttsd2si", 0xf22c, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, - { { 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 } } } }, - { "vpaddb", 0x66FC, None, 1, 3, + 0, 0, 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, 1, 1, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcvttsd2si", 0xF22C, None, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 3, - 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vpaddd", 0x66fe, None, 1, 3, + 0, 0, 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, 1, 1, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 4, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcvttsd2si", 0xF22C, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 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, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 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, 4, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpaddd", 0x66fe, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcvttss2si", 0xf32c, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, - { { 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 } } } }, - { "vpaddd", 0x66FE, None, 1, 3, + 0, 0, 0, 0, 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, 1, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcvttss2si", 0xF32C, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 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, 4, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vpaddq", 0x66d4, None, 1, 3, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcvttss2si", 0xF32C, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 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, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 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, 4, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpaddq", 0x66d4, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vdivpd", 0x665e, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpaddq", 0x66D4, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vdivpd", 0x665E, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vpaddw", 0x66fd, None, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vdivpd", 0x665E, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpaddw", 0x66fd, None, 1, 3, + 0, 0, 0, 1, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vdivps", 0x5e, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpaddw", 0x66FD, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vdivps", 0x5E, None, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 3, - 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vpaddusb", 0x66dc, None, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vdivps", 0x5E, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpaddusb", 0x66dc, None, 1, 3, + 0, 0, 0, 1, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vdivsd", 0xf25e, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 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, 0, 1, 0, 0, 0 } } } }, - { "vpaddusb", 0x66DC, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vdivsd", 0xF25E, None, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 3, - 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 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, 1, 1, 0, 0 } } } }, - { "vpaddusw", 0x66dd, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vdivsd", 0xF25E, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpaddusw", 0x66dd, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vdivss", 0xf35e, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 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, 0, 1, 0, 0, 0 } } } }, - { "vpaddusw", 0x66DD, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vdivss", 0xF35E, None, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 3, - 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 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, 1, 1, 0, 0 } } } }, - { "vpalignr", 0x660f, None, 1, 4, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vdivss", 0xF35E, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 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 } } } }, - { "vpalignr", 0x660f, None, 1, 4, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vdppd", 0x6641, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, - 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 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, 0, 1, 0, 0, 0 } } } }, - { "vpalignr", 0x660F, None, 1, 4, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vdpps", 0x6640, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 3, - 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 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, - 0, 1, 1, 1, 0, 0 } } } }, - { "vpand", 0x66db, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vextractf128", 0x6619, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 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, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpand", 0x66db, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } } } }, + { "vextractps", 0x6617, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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 } } } }, - { "vpandn", 0x66df, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 1, 0 } } } }, + { "vextractps", 0x6617, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 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, - 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpandn", 0x66df, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vextractps", 0x6617, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 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, - 0, 0, 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, 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, 3, 2, 0, 0, + 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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 } } } }, - { "vpavgb", 0x66e0, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 1, 0 } } } }, + { "vextractps", 0x6617, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 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, - 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 0, 0, + 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpavgb", 0x66e0, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vhaddpd", 0x667c, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpavgb", 0x66E0, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vhaddps", 0xf27c, None, 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, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 3, - 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 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, - 0, 1, 1, 1, 0, 0 } } } }, - { "vpavgw", 0x66e3, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vhsubpd", 0x667d, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpavgw", 0x66e3, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vhsubps", 0xf27d, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpavgw", 0x66E3, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vinsertf128", 0x6618, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 3, - 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 1, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 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, 1, 1, 0, 0 } } } }, - { "vpblendvb", 0x664c, None, 1, 4, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vinsertps", 0x6621, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vpblendvb", 0x664c, None, 1, 4, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vinsertps", 0x6621, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 1, - 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 0, 0, + 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 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, 0, 1, 0, 0, 0 } } } }, - { "vpblendw", 0x660e, None, 1, 4, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vlddqu", 0xf2f0, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 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, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpblendw", 0x660e, None, 1, 4, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vldmxcsr", 0xae, 0x2, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, - { { 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 } } } }, - { "vpcmpeqb", 0x6674, None, 1, 3, + 0, 0, 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, 1, 1, 1, 1, 1, 1, 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, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 1, 0 } } } }, + { "vmaskmovdqu", 0x66f7, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 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, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 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 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, - { "vpcmpeqb", 0x6674, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vmaskmovpd", 0x662f, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpcmpeqb", 0x6674, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } }, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } } } }, + { "vmaskmovpd", 0x662d, None, 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, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 3, - 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 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 } } } }, - { "vpcmpeqb", 0x663F, 0, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vmaskmovps", 0x662e, None, 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, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 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 } } } }, - { "vpcmpeqd", 0x6676, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } }, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } } } }, + { "vmaskmovps", 0x662c, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpcmpeqd", 0x6676, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vmaxpd", 0x665f, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpcmpeqd", 0x6676, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vmaxpd", 0x665F, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, - { { 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 } } } }, - { "vpcmpeqd", 0x661F, 0, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vmaxpd", 0x665F, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 2, 0, 0, 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 1, 3, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, - { { 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 } } } }, - { "vpcmpeqq", 0x6629, None, 1, 3, + 0, 0, 0, 1, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vmaxps", 0x5f, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpcmpeqq", 0x6629, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vmaxps", 0x5F, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpcmpeqq", 0x6629, None, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vmaxps", 0x5F, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 1, 0, 0, 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 1, 3, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, - { { 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 } } } }, - { "vpcmpeqq", 0x661F, 0, 1, 3, + 0, 0, 0, 1, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vmaxsd", 0xf25f, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 2, 0, 0, 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 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 } } } }, - { "vpcmpeqw", 0x6675, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vmaxsd", 0xF25F, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vpcmpeqw", 0x6675, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vmaxsd", 0xF25F, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 3, 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 } }, { { 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, 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, 0, 1, 0, 0, 0 } } } }, - { "vpcmpeqw", 0x6675, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vmaxss", 0xf35f, None, 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, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 3, - 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 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 } } } }, - { "vpcmpeqw", 0x663F, 0, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vmaxss", 0xF35F, None, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 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 } } } }, - { "vpcmpestri", 0x6661, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vmaxss", 0xF35F, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 3, 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 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpcmpestri", 0x6661, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vminpd", 0x665d, None, 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, 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, 1, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 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, 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, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpcmpestrm", 0x6660, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vminpd", 0x665D, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 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, 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, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpcmpestrm", 0x6660, None, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vminpd", 0x665D, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 1, 1, 0, 1, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 1, 3, 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 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpcmpgtb", 0x6664, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpcmpgtb", 0x6664, None, 1, 3, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vminps", 0x5d, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpcmpgtb", 0x6664, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vminps", 0x5D, None, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 3, - 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, - { { 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 } } } }, - { "vpcmpgtd", 0x6666, None, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vminps", 0x5D, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 1, 3, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpcmpgtd", 0x6666, None, 1, 3, + 0, 0, 0, 1, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vminsd", 0xf25d, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 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, 0, 1, 0, 0, 0 } } } }, - { "vpcmpgtd", 0x6666, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vminsd", 0xF25D, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 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 } } } }, - { "vpcmpgtq", 0x6637, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vminsd", 0xF25D, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 3, 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 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpcmpgtq", 0x6637, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vminss", 0xf35d, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 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, 0, 1, 0, 0, 0 } } } }, - { "vpcmpgtq", 0x6637, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vminss", 0xF35D, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 1, 0, 0, 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 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 } } } }, - { "vpcmpgtw", 0x6665, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vminss", 0xF35D, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 3, 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 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpcmpgtw", 0x6665, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vmovapd", 0x6628, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 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 } }, + { 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, - { { 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 } } } }, - { "vpcmpgtw", 0x6665, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vmovapd", 0x6628, None, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 3, - 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, - { { 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 } } } }, - { "vpcmpistri", 0x6663, None, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vmovaps", 0x28, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpcmpistrm", 0x6662, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vmovaps", 0x28, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vperm2f128", 0x6606, None, 1, 4, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vmovd", 0x666e, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 1, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpermilpd", 0x660d, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vmovd", 0x667e, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vpermilpd", 0x6605, None, 1, 3, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 1, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vmovd", 0x666E, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 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, 1, 0, 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, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vpermilpd", 0x6605, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vmovddup", 0xf212, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 2, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vpermilpd", 0x660D, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vmovddup", 0xf212, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 1, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vpermilps", 0x660c, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vmovddup", 0xF212, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 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, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 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, - 0, 1, 1, 0, 0, 0 } } } }, - { "vpermilps", 0x6604, None, 1, 3, + 0, 0, 1, 1, 0, 0, 0 } } } }, + { "vmovddup", 0xF212, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 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, 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, 2, 0, 0, 0, + 0, 0, 2, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vpermilps", 0x6604, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vmovdqa", 0x666f, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 2, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 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 } }, + { 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 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 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vpermilps", 0x660C, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vmovdqu", 0xf36f, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 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 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vpextrb", 0x6614, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vmovhlps", 0x12, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 3, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "vpextrb", 0x6614, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vmovhlps", 0x12, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, - { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, - { "vpextrb", 0x6614, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vmovhpd", 0x6616, None, 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, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, - 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 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, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "vpextrb", 0x6614, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vmovhpd", 0x6617, None, 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, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 3, - 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 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, - 0, 1, 0, 0, 0, 0 } }, - { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, - { "vpextrd", 0x6616, None, 1, 3, + 0, 0, 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, 1, 1, 1, 1, 1, 1, 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 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } } } }, + { "vmovhpd", 0x6616, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, - { "vpextrd", 0x6616, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vmovhpd", 0x6617, None, 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, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 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, - 0, 1, 0, 0, 0, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, - { "vpextrq", 0x6616, None, 1, 3, + 0, 0, 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, 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, 2, 0, 0, 0, + 0, 0, 4, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } } } }, + { "vmovhps", 0x16, None, 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, 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, 1, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 3, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 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, - 0, 1, 0, 0, 0, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, - { "vpextrq", 0x6616, None, 1, 3, + 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 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, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vmovhps", 0x17, None, 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, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 2, - 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 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, - 0, 1, 0, 0, 0, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, - { "vpextrw", 0x66c5, None, 1, 3, + 0, 0, 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, 1, 1, 1, 1, 1, 1, 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 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } } } }, + { "vmovhps", 0x16, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "vpextrw", 0x6615, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vmovhps", 0x17, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 3, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 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, - 0, 1, 0, 0, 0, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "vpextrw", 0x6615, None, 1, 3, + 0, 0, 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, 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, 1, 0, 0, 0, + 0, 0, 4, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } } } }, + { "vmovlhps", 0x16, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, - { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, - { "vpextrw", 0x66C5, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vmovlhps", 0x16, None, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 3, - 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "vpextrw", 0x6615, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vmovlpd", 0x6612, None, 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, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, - 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 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, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "vpextrw", 0x6615, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vmovlpd", 0x6613, None, 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, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 3, - 2, 0, 0, 0, 0, 2, 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 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, - { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, - { "vphaddd", 0x6602, None, 1, 3, + 0, 0, 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, 1, 1, 1, 1, 1, 1, 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 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } } } }, + { "vmovlpd", 0x6612, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vphaddd", 0x6602, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vmovlpd", 0x6613, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, - { { 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 } } } }, - { "vphaddsw", 0x6603, None, 1, 3, + 0, 0, 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, 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, 2, 0, 0, 0, + 0, 0, 4, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } } } }, + { "vmovlps", 0x12, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 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, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vphaddsw", 0x6603, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vmovlps", 0x13, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, - { { 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 } } } }, - { "vphaddw", 0x6601, None, 1, 3, + 0, 0, 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, 1, 1, 1, 1, 1, 1, 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 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } } } }, + { "vmovlps", 0x12, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vphaddw", 0x6601, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vmovlps", 0x13, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, - { { 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 } } } }, - { "vphminposuw", 0x6641, None, 1, 2, + 0, 0, 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, 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, 1, 0, 0, 0, + 0, 0, 4, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } } } }, + { "vmovmskpd", 0x6650, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 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, - 0, 1, 0, 0, 0, 0 } } } }, - { "vphsubd", 0x6606, None, 1, 3, + 0, 0, 0, 0, 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, 1, 0, 1, 0, 1, 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 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vmovmskps", 0x50, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 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, - 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 } } } }, - { "vphsubd", 0x6606, None, 1, 3, + 0, 0, 0, 0, 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, 1, 0, 1, 0, 1, 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 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vmovntdq", 0x66e7, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, - { { 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 } } } }, - { "vphsubsw", 0x6607, None, 1, 3, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 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 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0 } }, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } } } }, + { "vmovntdq", 0x66E7, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 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, - 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 } } } }, - { "vphsubsw", 0x6607, None, 1, 3, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 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, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 0, 0, 0 } }, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } } } }, + { "vmovntdqa", 0x662a, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vphsubw", 0x6605, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vmovntdqa", 0x662a, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 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, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vphsubw", 0x6605, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vmovntdqa", 0x662A, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpinsrb", 0x6620, None, 1, 4, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vmovntpd", 0x662b, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 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 } } } }, - { "vpinsrb", 0x6620, None, 1, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 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 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0 } }, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } } } }, + { "vmovntpd", 0x662B, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, - 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, - 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 } } } }, - { "vpinsrb", 0x6620, None, 1, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 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, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 0, 0, 0 } }, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } } } }, + { "vmovntps", 0x2b, None, 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, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, - 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 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 } } } }, - { "vpinsrb", 0x6620, None, 1, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 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 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0 } }, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } } } }, + { "vmovntps", 0x2B, None, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 3, - 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, - 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, - 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 } } } }, - { "vpinsrd", 0x6622, None, 1, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 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, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 0, 0, 0 } }, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } } } }, + { "vmovq", 0xf37e, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpinsrd", 0x6622, None, 1, 4, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vmovq", 0x66d6, None, 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, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, - 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpinsrq", 0x6622, None, 1, 4, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 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 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } } } }, + { "vmovq", 0x666e, None, 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, 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, 1, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 3, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 1, 0, 0, 1, 0, 0, 0, 3, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, + 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, - 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 } } } }, - { "vpinsrq", 0x6622, None, 1, 4, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vmovq", 0x666E, None, 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, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 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, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 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, 2, 0, 0, 0, + 0, 0, 2, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, + 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, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpinsrw", 0x66c4, None, 1, 4, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vmovq", 0xF37E, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 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, 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, 2, 0, 0, 0, + 0, 0, 2, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpinsrw", 0x66c4, None, 1, 4, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vmovq", 0x66D6, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpinsrw", 0x66C4, None, 1, 4, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 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, 2, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } } } }, + { "vmovsd", 0xf210, None, 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, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, - 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpinsrw", 0x66C4, None, 1, 4, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vmovsd", 0xf210, None, 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, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 3, - 0, 0, 0, 0, 0, 2, 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, 1, 1, 1, 1, 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, 0, 0, 0 } }, + { 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 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 } } } }, - { "vpmaddubsw", 0x6604, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vmovsd", 0xF210, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 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, - 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, 1, 0, 0, 0, 0, 0, 1, 0, 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, 2, 0, 0, 0, + 0, 0, 4, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpmaddubsw", 0x6604, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vmovsd", 0xF210, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 1, 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, 0, 1, 0, 0, 0 } } } }, - { "vpmaddubsw", 0x6604, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vmovshdup", 0xf316, None, 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, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 3, - 1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vpmaddwd", 0x66f5, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vmovshdup", 0xF316, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 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, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpmaddwd", 0x66f5, None, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vmovsldup", 0xf312, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpmaddwd", 0x66F5, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vmovsldup", 0xF312, None, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 3, - 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vpmaxsb", 0x663c, None, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vmovss", 0xf310, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 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, - 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, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpmaxsb", 0x663c, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vmovss", 0xf310, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 1, 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, 0, 1, 0, 0, 0 } } } }, - { "vpmaxsb", 0x663C, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vmovss", 0xF310, None, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 3, - 1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, 1, 0, 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, 1, 0, 0, 0, + 0, 0, 4, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vpmaxsd", 0x663d, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vmovss", 0xF310, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 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 } } } }, - { "vpmaxsd", 0x663d, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vmovupd", 0x6610, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 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 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpmaxsd", 0x663D, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vmovupd", 0x6610, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vpmaxsw", 0x66ee, None, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vmovups", 0x10, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 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, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpmaxsw", 0x66ee, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vmovups", 0x10, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpmaxsw", 0x66EE, None, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vmpsadbw", 0x6642, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 3, - 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 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, 1, 1, 0, 0 } } } }, - { "vpmaxub", 0x66de, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vmpsadbw", 0x6642, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vpmaxub", 0x66de, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vmulpd", 0x6659, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpmaxub", 0x66DE, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vmulpd", 0x6659, None, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 3, - 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vpmaxud", 0x663f, None, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vmulpd", 0x6659, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpmaxud", 0x663f, None, 1, 3, + 0, 0, 0, 1, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vmulps", 0x59, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpmaxud", 0x663F, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vmulps", 0x59, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vpmaxuw", 0x663e, None, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vmulps", 0x59, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpmaxuw", 0x663e, None, 1, 3, + 0, 0, 0, 1, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vmulsd", 0xf259, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 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, 0, 1, 0, 0, 0 } } } }, - { "vpmaxuw", 0x663E, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vmulsd", 0xF259, None, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 3, - 1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 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, 1, 1, 0, 0 } } } }, - { "vpminsb", 0x6638, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vmulsd", 0xF259, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpminsb", 0x6638, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vmulss", 0xf359, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 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, 0, 1, 0, 0, 0 } } } }, - { "vpminsb", 0x6638, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vmulss", 0xF359, None, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 3, - 1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 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, 1, 1, 0, 0 } } } }, - { "vpminsd", 0x6639, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vmulss", 0xF359, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpminsd", 0x6639, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vorpd", 0x6656, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpminsd", 0x6639, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vorpd", 0x6656, None, 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, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, - 1, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vpminsw", 0x66ea, None, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vorps", 0x56, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpminsw", 0x66ea, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vorps", 0x56, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpminsw", 0x66EA, None, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpabsb", 0x661c, None, 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, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 3, - 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vpminub", 0x66da, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpabsb", 0x661c, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 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, - 0, 1, 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, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpminub", 0x66da, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpabsb", 0x661C, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpminub", 0x66DA, None, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpabsd", 0x661e, None, 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, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 3, - 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vpminud", 0x663b, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpabsd", 0x661e, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 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, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpabsd", 0x661E, None, 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, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpminud", 0x663b, None, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpabsw", 0x661d, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpminud", 0x663B, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpabsw", 0x661d, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, - 1, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vpminuw", 0x663a, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpabsw", 0x661D, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 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, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpminuw", 0x663a, None, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpackssdw", 0x666b, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 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, 0, 1, 0, 0, 0 } } } }, - { "vpminuw", 0x663A, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpackssdw", 0x666b, None, 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, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 3, - 1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 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, - 0, 1, 1, 1, 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, 1, 1, 0, 0 } } } }, - { "vpmovmskb", 0x66d7, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 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, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "vpmovmskb", 0x66d7, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "vpmovsxbd", 0x6621, None, 1, 2, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpackssdw", 0x666B, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpmovsxbd", 0x6621, None, 1, 2, + 0, 1, 1, 1, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpacksswb", 0x6663, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpmovsxbd", 0x6621, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpacksswb", 0x6663, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, - 1, 0, 0, 0, 0, 1, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 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, - 0, 0, 0, 1, 0, 0 } } } }, - { "vpmovsxbd", 0x6621, None, 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, 1, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, - 1, 0, 0, 0, 0, 2, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 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 } } } }, - { "vpmovsxbd", 0x6621, None, 1, 2, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpacksswb", 0x6663, None, 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, 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, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 3, - 1, 0, 0, 0, 0, 3, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpmovsxbq", 0x6622, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpmovsxbq", 0x6622, None, 1, 2, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpackusdw", 0x662b, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpmovsxbq", 0x6622, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpackusdw", 0x662b, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 3, - 1, 0, 0, 0, 0, 1, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } } } }, - { "vpmovsxbq", 0x6622, None, 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, 1, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, - 1, 0, 0, 0, 0, 2, 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, - 0, 1, 0, 0, 1, 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 } } } }, - { "vpmovsxbq", 0x6622, None, 1, 2, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpackusdw", 0x662B, None, 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, 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, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 3, - 1, 0, 0, 0, 0, 3, 3, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpmovsxbw", 0x6620, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpmovsxbw", 0x6620, None, 1, 2, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpackuswb", 0x6667, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpmovsxbw", 0x6620, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpackuswb", 0x6667, None, 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, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, - 1, 0, 0, 0, 0, 1, 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 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, - 0, 0, 0, 1, 0, 0 } } } }, - { "vpmovsxbw", 0x6620, None, 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, 1, 0, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, - 1, 0, 0, 0, 0, 2, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 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 } } } }, - { "vpmovsxbw", 0x6620, None, 1, 2, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpackuswb", 0x6667, None, 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, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, - 1, 0, 0, 0, 0, 3, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpmovsxdq", 0x6625, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpmovsxdq", 0x6625, None, 1, 2, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpaddsb", 0x66ec, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpmovsxdq", 0x6625, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpaddsb", 0x66ec, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 1, 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 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, - 0, 0, 0, 1, 0, 0 } } } }, - { "vpmovsxdq", 0x6625, None, 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, 1, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 2, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 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 } } } }, - { "vpmovsxdq", 0x6625, None, 1, 2, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpaddsb", 0x66EC, None, 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, 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, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 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, 3, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpmovsxwd", 0x6623, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpmovsxwd", 0x6623, None, 1, 2, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpaddsw", 0x66ed, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpmovsxwd", 0x6623, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpaddsw", 0x66ed, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, - 1, 0, 0, 0, 0, 1, 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 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, - 0, 0, 0, 1, 0, 0 } } } }, - { "vpmovsxwd", 0x6623, None, 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, 1, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, - 1, 0, 0, 0, 0, 2, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 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 } } } }, - { "vpmovsxwd", 0x6623, None, 1, 2, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpaddsw", 0x66ED, None, 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, 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, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, - 1, 0, 0, 0, 0, 3, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpmovsxwq", 0x6624, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpmovsxwq", 0x6624, None, 1, 2, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpaddb", 0x66fc, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpmovsxwq", 0x6624, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpaddb", 0x66fc, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, - 1, 0, 0, 0, 0, 1, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 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, - 0, 0, 0, 1, 0, 0 } } } }, - { "vpmovsxwq", 0x6624, None, 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, 1, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, - 1, 0, 0, 0, 0, 2, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 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 } } } }, - { "vpmovsxwq", 0x6624, None, 1, 2, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpaddb", 0x66FC, None, 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, 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, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 3, - 1, 0, 0, 0, 0, 3, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpmovzxbd", 0x6631, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpmovzxbd", 0x6631, None, 1, 2, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpaddd", 0x66fe, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpmovzxbd", 0x6631, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpaddd", 0x66fe, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, - 1, 0, 0, 0, 0, 1, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 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, - 0, 0, 0, 1, 0, 0 } } } }, - { "vpmovzxbd", 0x6631, None, 1, 2, + 0, 0, 1, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpaddd", 0x66FE, None, 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, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 3, - 1, 0, 0, 0, 0, 2, 3, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpmovzxbd", 0x6631, None, 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, 1, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, - 1, 0, 0, 0, 0, 3, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpmovzxbq", 0x6632, None, 1, 2, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpaddq", 0x66d4, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, - 0, 1, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpmovzxbq", 0x6632, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpaddq", 0x66d4, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpmovzxbq", 0x6632, None, 1, 2, + 0, 0, 1, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpaddq", 0x66D4, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, - 1, 0, 0, 0, 0, 1, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } } } }, - { "vpmovzxbq", 0x6632, None, 1, 2, + 0, 1, 1, 1, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpaddw", 0x66fd, None, 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, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 3, - 1, 0, 0, 0, 0, 2, 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, - 0, 1, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpmovzxbq", 0x6632, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpaddw", 0x66fd, None, 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, 1, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, - 1, 0, 0, 0, 0, 3, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpmovzxbw", 0x6630, None, 1, 2, + 0, 0, 1, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpaddw", 0x66FD, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpmovzxbw", 0x6630, None, 1, 2, + 0, 1, 1, 1, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpaddusb", 0x66dc, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpmovzxbw", 0x6630, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpaddusb", 0x66dc, None, 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, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, - 1, 0, 0, 0, 0, 1, 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 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, - 0, 0, 0, 1, 0, 0 } } } }, - { "vpmovzxbw", 0x6630, None, 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, 1, 0, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, - 1, 0, 0, 0, 0, 2, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 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 } } } }, - { "vpmovzxbw", 0x6630, None, 1, 2, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpaddusb", 0x66DC, None, 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, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, - 1, 0, 0, 0, 0, 3, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpmovzxdq", 0x6635, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpmovzxdq", 0x6635, None, 1, 2, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpaddusw", 0x66dd, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpmovzxdq", 0x6635, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpaddusw", 0x66dd, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 1, 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 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, - 0, 0, 0, 1, 0, 0 } } } }, - { "vpmovzxdq", 0x6635, None, 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, 1, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 2, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 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 } } } }, - { "vpmovzxdq", 0x6635, None, 1, 2, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpaddusw", 0x66DD, None, 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, 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, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 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, 3, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpmovzxwd", 0x6633, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpmovzxwd", 0x6633, None, 1, 2, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpalignr", 0x660f, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpmovzxwd", 0x6633, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpalignr", 0x660f, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, - 1, 0, 0, 0, 0, 1, 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } } } }, - { "vpmovzxwd", 0x6633, None, 1, 2, + 0, 0, 1, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpalignr", 0x660F, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 3, - 1, 0, 0, 0, 0, 2, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 2, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpmovzxwd", 0x6633, None, 1, 2, + 0, 1, 1, 1, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpand", 0x66db, None, 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, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, - 1, 0, 0, 0, 0, 3, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpmovzxwq", 0x6634, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpand", 0x66db, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpmovzxwq", 0x6634, None, 1, 2, + 0, 0, 1, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpandn", 0x66df, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpmovzxwq", 0x6634, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpandn", 0x66df, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, - 1, 0, 0, 0, 0, 1, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 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, - 0, 0, 0, 1, 0, 0 } } } }, - { "vpmovzxwq", 0x6634, None, 1, 2, + 0, 0, 1, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpavgb", 0x66e0, None, 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, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 3, - 1, 0, 0, 0, 0, 2, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpmovzxwq", 0x6634, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpavgb", 0x66e0, None, 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, 1, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, - 1, 0, 0, 0, 0, 3, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpmuldq", 0x6628, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpavgb", 0x66E0, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpmuldq", 0x6628, None, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpavgw", 0x66e3, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 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, 0, 1, 0, 0, 0 } } } }, - { "vpmuldq", 0x6628, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpavgw", 0x66e3, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 2, - 1, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 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, 1, 1, 0, 0 } } } }, - { "vpmulhrsw", 0x660b, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpavgw", 0x66E3, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpmulhrsw", 0x660b, None, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpblendvb", 0x664c, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 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, 0, 1, 0, 0, 0 } } } }, - { "vpmulhrsw", 0x660B, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpblendvb", 0x664c, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 3, - 1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 1, 2, 2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 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, - 0, 1, 1, 1, 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, 1, 1, 0, 0 } } } }, - { "vpmulhuw", 0x66e4, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpblendw", 0x660e, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 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 } } } }, - { "vpmulhuw", 0x66e4, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpblendw", 0x660e, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpmulhuw", 0x66E4, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpcmpeqb", 0x6674, None, 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, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 3, - 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 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, 1, 1, 0, 0 } } } }, - { "vpmulhw", 0x66e5, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcmpeqb", 0x6674, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 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, - 0, 1, 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 } } } }, - { "vpmulhw", 0x66e5, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpcmpeqb", 0x6674, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpmulhw", 0x66E5, None, 1, 3, + 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, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vpcmpeqb", 0x663F, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, - 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 2, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vpmulld", 0x6640, None, 1, 3, + 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, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vpcmpeqd", 0x6676, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 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 } } } }, - { "vpmulld", 0x6640, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcmpeqd", 0x6676, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 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, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpmulld", 0x6640, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpcmpeqd", 0x6676, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vpmullw", 0x66d5, None, 1, 3, + 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, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vpcmpeqd", 0x661F, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 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, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 2, 0, 0, + 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpmullw", 0x66d5, None, 1, 3, + 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, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vpcmpeqq", 0x6629, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 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, 0, 1, 0, 0, 0 } } } }, - { "vpmullw", 0x66D5, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcmpeqq", 0x6629, None, 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, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 3, - 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 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, - 0, 1, 1, 1, 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, 1, 1, 0, 0 } } } }, - { "vpmuludq", 0x66f4, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpcmpeqq", 0x6629, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 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, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpmuludq", 0x66f4, None, 1, 3, + 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, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vpcmpeqq", 0x661F, 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, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 2, 0, 0, + 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 0, 0, 0 } }, + { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vpcmpeqw", 0x6675, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 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, 0, 1, 0, 0, 0 } } } }, - { "vpmuludq", 0x66F4, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcmpeqw", 0x6675, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 2, - 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 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, 1, 1, 0, 0 } } } }, - { "vpor", 0x66eb, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpcmpeqw", 0x6675, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vpcmpeqw", 0x663F, 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, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 2, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpor", 0x66eb, None, 1, 3, + 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, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vpcmpestri", 0x6661, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcmpestri", 0x6661, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 1, 0, 1, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpsadbw", 0x66f6, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcmpestrm", 0x6660, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcmpestrm", 0x6660, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 1, 0, 1, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpsadbw", 0x66f6, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcmpgtb", 0x6664, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 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, 0, 1, 0, 0, 0 } } } }, - { "vpsadbw", 0x66F6, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcmpgtb", 0x6664, None, 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, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 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, - 0, 1, 1, 1, 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, 1, 1, 0, 0 } } } }, - { "vpshufb", 0x6600, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpcmpgtb", 0x6664, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpshufb", 0x6600, None, 1, 3, + 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, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vpcmpgtd", 0x6666, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 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, 0, 1, 0, 0, 0 } } } }, - { "vpshufb", 0x6600, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcmpgtd", 0x6666, None, 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, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 3, - 1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 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, - 0, 1, 1, 1, 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, 1, 1, 0, 0 } } } }, - { "vpshufd", 0x6670, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpcmpgtd", 0x6666, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpshufd", 0x6670, None, 1, 3, + 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, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vpcmpgtq", 0x6637, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpshufd", 0x6670, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcmpgtq", 0x6637, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, - 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vpshufhw", 0xf370, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpcmpgtq", 0x6637, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpshufhw", 0xf370, None, 1, 3, + 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, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vpcmpgtw", 0x6665, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpshufhw", 0xF370, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcmpgtw", 0x6665, None, 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, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 3, - 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vpshuflw", 0xf270, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpcmpgtw", 0x6665, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpshuflw", 0xf270, None, 1, 3, + 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, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vpcmpistri", 0x6663, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpshuflw", 0xF270, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcmpistrm", 0x6662, None, 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, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 3, - 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vpsignb", 0x6608, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vperm2f128", 0x6606, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 1, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vpsignb", 0x6608, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpermilpd", 0x660d, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpsignd", 0x660a, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vpermilpd", 0x6605, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 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, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpsignd", 0x660a, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vpermilpd", 0x6605, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpsignw", 0x6609, None, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpermilpd", 0x660D, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpsignw", 0x6609, None, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpermilps", 0x660c, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpslld", 0x6672, 0x6, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vpermilps", 0x6604, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vpermilps", 0x6604, None, 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, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpslld", 0x66f2, None, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpermilps", 0x660C, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpslld", 0x6672, 0x6, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpextrb", 0x6614, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpslld", 0x66f2, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vpextrb", 0x6614, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 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, - 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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 } } } }, - { "vpslld", 0x66F2, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0 } } } }, + { "vpextrb", 0x6614, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, - 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 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, - 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 0, 0, + 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 1, 0, 0 } } } }, - { "vpslld", 0x6672, 6, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vpextrb", 0x6614, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 2, 1, - 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 0, 0, + 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vpslld", 0x66F2, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0 } } } }, + { "vpextrd", 0x6616, None, 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, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 2, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 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, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 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, 1, 1, 1, 1, 1, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpslldq", 0x6673, 0x7, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 1, 0 } } } }, + { "vpextrd", 0x6616, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 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, 1, 0, 0, 0, 0, 0, 1, 0, 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, 2, 0, 0, + 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 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, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpslldq", 0x6673, 0x7, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 1, 0 } } } }, + { "vpextrq", 0x6616, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 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, - 0, 0, 1, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpslldq", 0x6673, 7, 1, 3, + 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 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, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } } } }, + { "vpextrq", 0x6616, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 2, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vpsllq", 0x6673, 0x6, 1, 3, + 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, 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, 2, 2, 0, 0, + 0, 0, 2, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 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, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } } } }, + { "vpextrw", 0x66c5, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 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, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpsllq", 0x66f3, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vpextrw", 0x6615, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 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, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpsllq", 0x6673, 0x6, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vpextrw", 0x6615, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 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, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 0, 0, 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 } } } }, - { "vpsllq", 0x66f3, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0 } } } }, + { "vpextrw", 0x66C5, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 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, - 0, 0, 1, 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, 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, 3, 0, 0, 0, + 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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 } } } }, - { "vpsllq", 0x66F3, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vpextrw", 0x6615, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 2, - 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 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, - 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 0, 0, + 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 1, 0, 0 } } } }, - { "vpsllq", 0x6673, 6, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vpextrw", 0x6615, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 2, 2, - 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 0, 0, + 0, 0, 2, 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 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vpsllq", 0x66F3, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0 } } } }, + { "vphaddd", 0x6602, None, 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, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 2, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 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 } } } }, - { "vpsllw", 0x6671, 0x6, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vphaddd", 0x6602, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vpsllw", 0x66f1, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vphaddsw", 0x6603, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 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 } } } }, - { "vpsllw", 0x6671, 0x6, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vphaddsw", 0x6603, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpsllw", 0x66f1, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vphaddw", 0x6601, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 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, 0, 1, 0, 0, 0 } } } }, - { "vpsllw", 0x6671, 6, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vphaddw", 0x6601, None, 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, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 2, 3, - 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vpsllw", 0x66F1, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vphminposuw", 0x6641, None, 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, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, - 0, 0, 0, 0, 0, 2, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 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, - 0, 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, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpsllw", 0x66F1, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vphsubd", 0x6606, None, 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, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 3, - 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 1, 0, 0 } }, + 0, 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, 0, 1, 1, 0, 0 } } } }, - { "vpsrad", 0x6672, 0x4, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vphsubd", 0x6606, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vpsrad", 0x66e2, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vphsubsw", 0x6607, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 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 } } } }, - { "vpsrad", 0x6672, 0x4, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vphsubsw", 0x6607, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpsrad", 0x66e2, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vphsubw", 0x6605, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 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, 0, 1, 0, 0, 0 } } } }, - { "vpsrad", 0x66E2, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vphsubw", 0x6605, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, - 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 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, - 0, 0, 1, 1, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 1, 0, 0 } } } }, - { "vpsrad", 0x6672, 4, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpinsrb", 0x6620, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, - 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vpsrad", 0x66E2, None, 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, 1, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 2, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 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, - 0, 1, 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 } } } }, - { "vpsraw", 0x6671, 0x4, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpinsrb", 0x6620, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, + 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, - 0, 1, 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 } } } }, - { "vpsraw", 0x66e1, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpinsrb", 0x6620, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 2, 0, 0, + 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpsraw", 0x6671, 0x4, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpinsrb", 0x6620, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 2, 0, 0, + 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, + 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, - 0, 0, 1, 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, 0, 1, 0, 0, 0 } } } }, - { "vpsraw", 0x66e1, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpinsrd", 0x6622, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 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, - 0, 0, 1, 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, 0, 1, 0, 0, 0 } } } }, - { "vpsraw", 0x6671, 4, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpinsrd", 0x6622, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 2, 3, - 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 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, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vpsraw", 0x66E1, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpinsrq", 0x6622, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, - 0, 0, 0, 0, 0, 2, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, + 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, - 0, 1, 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 } } } }, - { "vpsraw", 0x66E1, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpinsrq", 0x6622, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 3, - 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 0, 0, + 0, 0, 2, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, + 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, - 0, 0, 1, 1, 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, 0, 1, 1, 0, 0 } } } }, - { "vpsrld", 0x6672, 0x2, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpinsrw", 0x66c4, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpsrld", 0x66d2, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpinsrw", 0x66c4, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vpsrld", 0x6672, 0x2, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpinsrw", 0x66C4, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, + 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } }, { { 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, 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, 0, 1, 0, 0, 0 } } } }, - { "vpsrld", 0x66d2, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpinsrw", 0x66C4, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, + 0, 0, 2, 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, 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, - 0, 0, 1, 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, 0, 1, 0, 0, 0 } } } }, - { "vpsrld", 0x66D2, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpmaddubsw", 0x6604, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 1, 0, 0 } }, + 0, 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, 0, 1, 1, 0, 0 } } } }, - { "vpsrld", 0x6672, 2, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpmaddubsw", 0x6604, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 2, 1, - 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vpsrld", 0x66D2, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpmaddubsw", 0x6604, None, 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, 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, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 2, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 1, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpsrldq", 0x6673, 0x3, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpmaddwd", 0x66f5, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 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 } } } }, - { "vpsrldq", 0x6673, 0x3, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpmaddwd", 0x66f5, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpsrldq", 0x6673, 3, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpmaddwd", 0x66F5, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vpsrlq", 0x6673, 0x2, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpmaxsb", 0x663c, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 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 } } } }, - { "vpsrlq", 0x66d3, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpmaxsb", 0x663c, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 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, - 0, 1, 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 } } } }, - { "vpsrlq", 0x6673, 0x2, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpmaxsb", 0x663C, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 1, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpsrlq", 0x66d3, None, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpmaxsd", 0x663d, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 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, 0, 1, 0, 0, 0 } } } }, - { "vpsrlq", 0x66D3, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpmaxsd", 0x663d, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 2, - 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 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, - 0, 0, 1, 1, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 1, 0, 0 } } } }, - { "vpsrlq", 0x6673, 2, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpmaxsd", 0x663D, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, - 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vpsrlq", 0x66D3, None, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpmaxsw", 0x66ee, None, 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, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 2, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 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 } } } }, - { "vpsrlw", 0x6671, 0x2, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpmaxsw", 0x66ee, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vpsrlw", 0x66d1, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpmaxsw", 0x66EE, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpsrlw", 0x6671, 0x2, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpmaxub", 0x66de, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 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, 0, 1, 0, 0, 0 } } } }, - { "vpsrlw", 0x66d1, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpmaxub", 0x66de, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 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, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpsrlw", 0x6671, 2, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpmaxub", 0x66DE, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, - 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vpsrlw", 0x66D1, None, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpmaxud", 0x663f, None, 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, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, - 0, 0, 0, 0, 0, 2, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 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 } } } }, - { "vpsrlw", 0x66D1, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpmaxud", 0x663f, None, 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, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 3, - 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 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, - 0, 0, 1, 1, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 1, 0, 0 } } } }, - { "vpsubb", 0x66f8, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpmaxud", 0x663F, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpsubb", 0x66f8, None, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpmaxuw", 0x663e, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 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, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 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, 0, 1, 0, 0, 0 } } } }, - { "vpsubb", 0x66F8, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpmaxuw", 0x663e, None, 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, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 3, - 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 1, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 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, - 0, 1, 1, 1, 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, 1, 1, 0, 0 } } } }, - { "vpsubd", 0x66fa, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpmaxuw", 0x663E, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 1, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpsubd", 0x66fa, None, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpminsb", 0x6638, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 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, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 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, 0, 1, 0, 0, 0 } } } }, - { "vpsubd", 0x66FA, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpminsb", 0x6638, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, - 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 1, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 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, 1, 1, 0, 0 } } } }, - { "vpsubq", 0x66fb, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpminsb", 0x6638, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 1, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpsubq", 0x66fb, None, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpminsd", 0x6639, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 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, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 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, 0, 1, 0, 0, 0 } } } }, - { "vpsubq", 0x66FB, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpminsd", 0x6639, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 2, - 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 1, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 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, 1, 1, 0, 0 } } } }, - { "vpsubsb", 0x66e8, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpminsd", 0x6639, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpsubsb", 0x66e8, None, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpminsw", 0x66ea, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 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, 0, 1, 0, 0, 0 } } } }, - { "vpsubsb", 0x66E8, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpminsw", 0x66ea, None, 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, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 3, - 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 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, - 0, 1, 1, 1, 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, 1, 1, 0, 0 } } } }, - { "vpsubsw", 0x66e9, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpminsw", 0x66EA, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpsubsw", 0x66e9, None, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpminub", 0x66da, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 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, 0, 1, 0, 0, 0 } } } }, - { "vpsubsw", 0x66E9, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpminub", 0x66da, None, 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, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 3, - 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 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, - 0, 1, 1, 1, 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, 1, 1, 0, 0 } } } }, - { "vpsubusb", 0x66d8, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpminub", 0x66DA, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpsubusb", 0x66d8, None, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpminud", 0x663b, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 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, 0, 1, 0, 0, 0 } } } }, - { "vpsubusb", 0x66D8, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpminud", 0x663b, None, 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, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 3, - 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 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, - 0, 1, 1, 1, 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, 1, 1, 0, 0 } } } }, - { "vpsubusw", 0x66d9, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpminud", 0x663B, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpsubusw", 0x66d9, None, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpminuw", 0x663a, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 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, 0, 1, 0, 0, 0 } } } }, - { "vpsubusw", 0x66D9, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpminuw", 0x663a, None, 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, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 3, - 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 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, - 0, 1, 1, 1, 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, 1, 1, 0, 0 } } } }, - { "vpsubw", 0x66f9, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpminuw", 0x663A, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 1, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpsubw", 0x66f9, None, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpmovmskb", 0x66d7, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 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, - 0, 0, 1, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpsubw", 0x66F9, None, 1, 3, + 0, 0, 0, 0, 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, 1, 0, 1, 0, 1, 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 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vpmovmskb", 0x66d7, None, 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, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 3, - 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 1, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vptest", 0x6617, None, 1, 2, + 0, 0, 0, 0, 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, 1, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vpmovsxbd", 0x6621, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vpunpckhbw", 0x6668, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpmovsxbd", 0x6621, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 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, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpunpckhbw", 0x6668, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpmovsxbd", 0x6621, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 0, 0, + 0, 0, 1, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpunpckhbw", 0x6668, None, 1, 3, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vpmovsxbd", 0x6621, None, 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, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, - 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 0, 0, + 0, 0, 2, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vpunpckhdq", 0x666a, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpmovsxbd", 0x6621, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 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, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 0, 0, + 0, 0, 3, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpunpckhdq", 0x666a, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpmovsxbq", 0x6622, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpunpckhdq", 0x666A, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpmovsxbq", 0x6622, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, - 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vpunpckhqdq", 0x666d, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpmovsxbq", 0x6622, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 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, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 0, 0, + 0, 0, 1, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpunpckhqdq", 0x666d, None, 1, 3, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vpmovsxbq", 0x6622, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 0, 0, + 0, 0, 2, 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpunpckhqdq", 0x666D, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpmovsxbq", 0x6622, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 2, - 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 0, 0, + 0, 0, 3, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vpunpckhwd", 0x6669, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpmovsxbw", 0x6620, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 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, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpunpckhwd", 0x6669, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpmovsxbw", 0x6620, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, - { { 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 } } } }, - { "vpunpckhwd", 0x6669, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpmovsxbw", 0x6620, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, - 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 0, 0, + 0, 0, 1, 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 1, 1, 1, 0, 0 } } } }, - { "vpunpcklbw", 0x6660, None, 1, 3, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vpmovsxbw", 0x6620, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 0, 0, + 0, 0, 2, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpmovsxbw", 0x6620, None, 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, 1, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 0, 0, + 0, 0, 3, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpunpcklbw", 0x6660, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpmovsxdq", 0x6625, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpunpcklbw", 0x6660, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpmovsxdq", 0x6625, None, 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, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 3, - 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vpunpckldq", 0x6662, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpmovsxdq", 0x6625, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 1, 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 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, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vpmovsxdq", 0x6625, None, 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, 1, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 2, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpunpckldq", 0x6662, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpmovsxdq", 0x6625, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 3, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, - { { 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 } } } }, - { "vpunpckldq", 0x6662, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpmovsxwd", 0x6623, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vpunpcklqdq", 0x666c, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpmovsxwd", 0x6623, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpunpcklqdq", 0x666c, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpmovsxwd", 0x6623, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 0, 0, + 0, 0, 1, 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpunpcklqdq", 0x666C, None, 1, 3, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vpmovsxwd", 0x6623, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 2, - 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 0, 0, + 0, 0, 2, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vpunpcklwd", 0x6661, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpmovsxwd", 0x6623, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 0, 0, + 0, 0, 3, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 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, - 0, 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, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpunpcklwd", 0x6661, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpmovsxwq", 0x6624, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpmovsxwq", 0x6624, None, 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, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpunpcklwd", 0x6661, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpmovsxwq", 0x6624, None, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 3, - 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 0, 0, + 0, 0, 1, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vpxor", 0x66ef, None, 1, 3, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vpmovsxwq", 0x6624, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 0, 0, + 0, 0, 2, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpmovsxwq", 0x6624, None, 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, 1, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 0, 0, + 0, 0, 3, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpxor", 0x66ef, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpmovzxbd", 0x6631, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpmovzxbd", 0x6631, None, 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, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vrcpps", 0x53, None, 1, 2, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpmovzxbd", 0x6631, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 0, 0, + 0, 0, 1, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vrcpss", 0xf353, None, 1, 3, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vpmovzxbd", 0x6631, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 0, 0, + 0, 0, 2, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vroundpd", 0x6609, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpmovzxbd", 0x6631, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 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, 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, 3, 1, 0, 0, + 0, 0, 3, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vroundps", 0x6608, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpmovzxbq", 0x6632, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vroundsd", 0x660b, None, 1, 4, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpmovzxbq", 0x6632, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 1, 3, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 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, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vroundss", 0x660a, None, 1, 4, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpmovzxbq", 0x6632, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 3, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 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, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 0, 0, + 0, 0, 1, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vrsqrtps", 0x52, None, 1, 2, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vpmovzxbq", 0x6632, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 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, 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, 3, 1, 0, 0, + 0, 0, 2, 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vrsqrtss", 0xf352, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpmovzxbq", 0x6632, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 0, 0, + 0, 0, 3, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vshufpd", 0x66c6, None, 1, 4, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpmovzxbw", 0x6630, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vshufpd", 0x66C6, None, 1, 4, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpmovzxbw", 0x6630, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 2, - 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vshufps", 0xc6, None, 1, 4, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpmovzxbw", 0x6630, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 0, 0, + 0, 0, 1, 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vshufps", 0xC6, None, 1, 4, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vpmovzxbw", 0x6630, None, 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, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 0, 0, + 0, 0, 2, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vsqrtpd", 0x6651, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpmovzxbw", 0x6630, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 0, 0, + 0, 0, 3, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vsqrtpd", 0x6651, None, 1, 2, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpmovzxdq", 0x6635, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vsqrtpd", 0x6651, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpmovzxdq", 0x6635, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 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, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } } } }, - { "vsqrtps", 0x51, None, 1, 2, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpmovzxdq", 0x6635, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 1, 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 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, - 0, 1, 1, 0, 0, 0 } } } }, - { "vsqrtps", 0x51, None, 1, 2, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vpmovzxdq", 0x6635, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, - 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 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, 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, 1, 1, 0, 0, + 0, 0, 2, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vsqrtps", 0x51, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpmovzxdq", 0x6635, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 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, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 3, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } } } }, - { "vsqrtsd", 0xf251, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpmovzxwd", 0x6633, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vsqrtsd", 0xF251, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpmovzxwd", 0x6633, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 2, - 0, 0, 0, 0, 0, 4, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 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, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vsqrtsd", 0xF251, None, 1, 4, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpmovzxwd", 0x6633, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 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 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 0, 0, + 0, 0, 1, 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vsqrtss", 0xf351, None, 1, 3, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vpmovzxwd", 0x6633, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 0, 0, + 0, 0, 2, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vsqrtss", 0xF351, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpmovzxwd", 0x6633, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, - 0, 0, 0, 0, 0, 4, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 0, 0, + 0, 0, 3, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vsqrtss", 0xF351, None, 1, 4, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpmovzxwq", 0x6634, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 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 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vstmxcsr", 0xae, 0x3, 1, 1, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpmovzxwq", 0x6634, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, - { "vsubpd", 0x665c, None, 1, 3, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpmovzxwq", 0x6634, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 0, 0, + 0, 0, 1, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vsubpd", 0x665C, None, 1, 3, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vpmovzxwq", 0x6634, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 2, - 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 0, 0, + 0, 0, 2, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vsubpd", 0x665C, None, 1, 4, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpmovzxwq", 0x6634, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 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, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 0, 0, + 0, 0, 3, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } } } }, - { "vsubps", 0x5c, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpmuldq", 0x6628, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 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, 1, 0, 0, 0 } } } }, - { "vsubps", 0x5C, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpmuldq", 0x6628, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, - 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 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, 1, 1, 0, 0 } } } }, - { "vsubps", 0x5C, None, 1, 4, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpmuldq", 0x6628, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } } } }, - { "vsubsd", 0xf25c, None, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpmulhrsw", 0x660b, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 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 } } } }, - { "vsubsd", 0xF25C, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpmulhrsw", 0x660b, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 2, - 0, 0, 0, 0, 0, 4, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vsubsd", 0xF25C, None, 1, 4, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpmulhrsw", 0x660B, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 1, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vsubss", 0xf35c, None, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpmulhuw", 0x66e4, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 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 } } } }, - { "vsubss", 0xF35C, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpmulhuw", 0x66e4, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, - 0, 0, 0, 0, 0, 4, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vsubss", 0xF35C, None, 1, 4, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpmulhuw", 0x66E4, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vtestpd", 0x660f, None, 1, 2, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpmulhw", 0x66e5, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vtestps", 0x660e, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpmulhw", 0x66e5, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 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, - 0, 1, 1, 0, 0, 0 } } } }, - { "vucomisd", 0x662e, None, 1, 2, + 0, 0, 1, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpmulhw", 0x66E5, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vucomisd", 0x662E, None, 1, 2, + 0, 1, 1, 1, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpmulld", 0x6640, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vucomisd", 0x662E, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpmulld", 0x6640, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 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, 4, 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, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vucomiss", 0x2e, None, 1, 2, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpmulld", 0x6640, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vucomiss", 0x2E, None, 1, 2, + 0, 1, 1, 1, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpmullw", 0x66d5, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vucomiss", 0x2E, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpmullw", 0x66d5, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 4, 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, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vunpckhpd", 0x6615, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpmullw", 0x66D5, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vunpckhpd", 0x6615, None, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpmuludq", 0x66f4, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 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, 1, 1, 0, 0 } } } }, - { "vunpckhps", 0x15, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpmuludq", 0x66f4, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 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, - 0, 1, 1, 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, 1, 0, 0, 0 } } } }, - { "vunpckhps", 0x15, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpmuludq", 0x66F4, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vunpcklpd", 0x6614, None, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpor", 0x66eb, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 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, 1, 0, 0, 0 } } } }, - { "vunpcklpd", 0x6614, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpor", 0x66eb, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 2, - 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 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, 1, 1, 0, 0 } } } }, - { "vunpcklps", 0x14, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpsadbw", 0x66f6, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 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, 1, 0, 0, 0 } } } }, - { "vunpcklps", 0x14, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpsadbw", 0x66f6, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, - 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 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, 1, 1, 0, 0 } } } }, - { "vxorpd", 0x6657, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpsadbw", 0x66F6, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vxorpd", 0x6657, None, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpshufb", 0x6600, None, 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, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 2, - 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 1, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 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, 1, 1, 0, 0 } } } }, - { "vxorps", 0x57, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpshufb", 0x6600, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 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, - 0, 1, 1, 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, 1, 0, 0, 0 } } } }, - { "vxorps", 0x57, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpshufb", 0x6600, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 1, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 1, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vzeroall", 0x77, None, 1, 0, - { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, - { "vzeroupper", 0x77, None, 1, 0, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpshufd", 0x6670, None, 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, 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, 1, 1, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, - { "vbroadcasti128", 0x665A, None, 1, 2, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpshufd", 0x6670, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpblendd", 0x6602, None, 1, 4, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpshufd", 0x6670, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vpbroadcastb", 0x6678, None, 1, 2, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpshufhw", 0xf370, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, - 0, 1, 0, 0, 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, 1, 1, 1, 1, 1, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vpbroadcastb", 0x6678, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpshufhw", 0xf370, None, 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, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, - 1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, - 0, 1, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vpbroadcastb", 0x667A, None, 1, 2, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpshufhw", 0xF370, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vpbroadcastd", 0x6658, None, 1, 2, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpshuflw", 0xf270, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 1, 1, 1, 1, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vpbroadcastd", 0x6658, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpshuflw", 0xf270, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, - 1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vpbroadcastd", 0x667C, None, 1, 2, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpshuflw", 0xF270, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vpbroadcastq", 0x6659, None, 1, 2, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpsignb", 0x6608, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vpbroadcastq", 0x6659, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpsignb", 0x6608, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 2, - 1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vpbroadcastq", 0x667C, None, 1, 2, + 0, 0, 1, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpsignd", 0x660a, None, 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, 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, 1, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vpbroadcastw", 0x6679, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpsignd", 0x660a, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, - 0, 1, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vpbroadcastw", 0x6679, None, 1, 2, + 0, 0, 1, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpsignw", 0x6609, None, 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, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, - 1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, - 0, 1, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vpbroadcastw", 0x667B, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpsignw", 0x6609, None, 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, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 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, 3, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vperm2i128", 0x6646, None, 1, 4, + 0, 0, 1, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpslld", 0x6672, 0x6, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 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, 0, 1, 0, 0, 0 } } } }, - { "vpermd", 0x6636, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpslld", 0x66f2, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 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, 0, 1, 0, 0, 0 } } } }, - { "vpermd", 0x6636, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpslld", 0x6672, 0x6, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, - 1, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 1, 1, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 1, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 1, 0, 0 } } } }, - { "vpermpd", 0x6601, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpslld", 0x66f2, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpermpd", 0x6601, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpslld", 0x66F2, None, 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, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 1, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 1, 0, 0, 0 } } } }, + { "vpslld", 0x6672, 6, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 2, - 2, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 1, 1, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 1, 0, 0 } } } }, - { "vpermpd", 0x6616, None, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpslld", 0x66F2, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 2, - 1, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 1, 1, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 2, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 1, 0, 0 } }, + 0, 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, 0, 1, 1, 0, 0 } } } }, - { "vpermps", 0x6616, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpslldq", 0x6673, 0x7, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 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, 0, 1, 0, 0, 0 } } } }, - { "vpermps", 0x6616, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpslldq", 0x6673, 0x7, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, - 1, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 1, 1, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 1, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 1, 0, 0 } } } }, - { "vpermq", 0x6600, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpslldq", 0x6673, 7, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, - 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpermq", 0x6600, None, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpsllq", 0x6673, 0x6, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 2, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 1, 1, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 1, 0, 0 } } } }, - { "vpermq", 0x6636, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpsllq", 0x66f3, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 1, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 1, 1, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 1, 0, 0 } }, + 0, 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, 0, 1, 1, 0, 0 } } } }, - { "vextracti128", 0x6639, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpsllq", 0x6673, 0x6, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } } } }, - { "vinserti128", 0x6638, None, 1, 4, + 0, 0, 1, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpsllq", 0x66f3, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 1, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 1, 0, 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 } } } }, - { "vpmaskmovd", 0x668e, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpsllq", 0x66F3, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, - { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } } } }, - { "vpmaskmovd", 0x668c, None, 1, 3, + 0, 0, 1, 1, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 1, 0, 0, 0 } } } }, + { "vpsllq", 0x6673, 6, 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, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 0, 1, 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, - 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vpmaskmovq", 0x668e, None, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpsllq", 0x66F3, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 2, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, - { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } } } }, - { "vpmaskmovq", 0x668c, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpsllw", 0x6671, 0x6, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vpsllvd", 0x6647, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpsllw", 0x66f1, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 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, 1, 0, 0, 0 } } } }, - { "vpsllvd", 0x6647, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpsllw", 0x6671, 0x6, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, - 1, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 0, 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, 1, 1, 0, 0 } } } }, - { "vpsllvq", 0x6647, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpsllw", 0x66f1, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 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, 1, 0, 0, 0 } } } }, - { "vpsllvq", 0x6647, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpsllw", 0x6671, 6, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 2, - 1, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpsllw", 0x66F1, None, 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, 1, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, + 0, 0, 2, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 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, 1, 1, 0, 0 } } } }, - { "vpsravd", 0x6646, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpsllw", 0x66F1, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 0, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vpsravd", 0x6646, None, 1, 3, + 0, 0, 1, 1, 0, 0, 0 } } } }, + { "vpsrad", 0x6672, 0x4, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, 1, 1, 0, 0 } } } }, - { "vpsrlvd", 0x6645, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpsrad", 0x66e2, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 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, 1, 0, 0, 0 } } } }, - { "vpsrlvd", 0x6645, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpsrad", 0x6672, 0x4, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, - 1, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 0, 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, 1, 1, 0, 0 } } } }, - { "vpsrlvq", 0x6645, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpsrad", 0x66e2, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 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, 1, 0, 0, 0 } } } }, - { "vpsrlvq", 0x6645, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpsrad", 0x66E2, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 1, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 0, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vgatherdpd", 0x6692, None, 1, 3, + 0, 0, 1, 1, 0, 0, 0 } } } }, + { "vpsrad", 0x6672, 4, 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, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, - 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, - { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vgatherdpd", 0x6692, None, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpsrad", 0x66E2, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 2, - 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 2, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vgatherdpd", 0x6692, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpsraw", 0x6671, 0x4, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 1, 0, 2, 0, 0, 1, 2, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } } } }, - { "vgatherdpd", 0x6692, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpsraw", 0x66e1, None, 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, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 2, - 1, 0, 1, 0, 0, 0, 2, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vgatherdps", 0x6692, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpsraw", 0x6671, 0x4, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, - { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vgatherdps", 0x6692, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpsraw", 0x66e1, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 1, - 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vgatherdps", 0x6692, None, 1, 2, + 0, 0, 1, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpsraw", 0x6671, 4, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, - 1, 0, 3, 0, 0, 1, 2, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } } } }, - { "vgatherdps", 0x6692, None, 1, 2, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpsraw", 0x66E1, None, 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, 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, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, - 1, 0, 1, 0, 0, 2, 2, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, + 0, 0, 2, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vgatherdps", 0x6692, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpsraw", 0x66E1, None, 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, 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, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, - 1, 0, 2, 0, 0, 3, 2, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vgatherqpd", 0x6693, None, 1, 3, + 0, 0, 1, 1, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 1, 0, 0, 0 } } } }, + { "vpsrld", 0x6672, 0x2, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, - 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, - { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vgatherqpd", 0x6693, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpsrld", 0x66d2, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 2, - 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vgatherqpd", 0x6693, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpsrld", 0x6672, 0x2, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 2, - 1, 0, 3, 0, 0, 1, 2, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } } } }, - { "vgatherqpd", 0x6693, None, 1, 2, + 0, 0, 1, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpsrld", 0x66d2, None, 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, 1, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 1, 0, 1, 0, 0, 2, 2, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vgatherqpd", 0x6693, None, 1, 2, + 0, 0, 1, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpsrld", 0x66D2, None, 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, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 2, - 1, 0, 2, 0, 0, 3, 2, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vgatherqps", 0x6693, None, 1, 3, + 0, 0, 1, 1, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 1, 0, 0, 0 } } } }, + { "vpsrld", 0x6672, 2, 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, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, - { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vgatherqps", 0x6693, None, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpsrld", 0x66D2, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 1, - 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, - { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 2, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vgatherqps", 0x6693, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpsrldq", 0x6673, 0x3, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 3, 0, 0, 1, 2, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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 } } } }, - { "vgatherqps", 0x6693, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpsrldq", 0x6673, 0x3, 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, 1, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 1, 0, 0, 2, 2, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vgatherqps", 0x6693, None, 1, 2, + 0, 0, 1, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpsrldq", 0x6673, 3, 1, 3, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, - 1, 0, 2, 0, 0, 3, 2, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpgatherdd", 0x6690, None, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpsrlq", 0x6673, 0x2, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, - { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpgatherdd", 0x6690, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpsrlq", 0x66d3, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 1, - 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpgatherdd", 0x6690, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpsrlq", 0x6673, 0x2, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, - 1, 0, 3, 0, 0, 1, 2, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } } } }, - { "vpgatherdd", 0x6690, None, 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, 1, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 1, 0, 0, 2, 2, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 1, 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 } } } }, - { "vpgatherdd", 0x6690, None, 1, 2, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpsrlq", 0x66d3, None, 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, 1, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 2, 0, 0, 3, 2, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpgatherdq", 0x6690, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpsrlq", 0x66D3, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, - 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, - { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpgatherdq", 0x6690, None, 1, 3, + 0, 0, 1, 1, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 1, 0, 0, 0 } } } }, + { "vpsrlq", 0x6673, 2, 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, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 2, - 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpgatherdq", 0x6690, None, 1, 2, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpsrlq", 0x66D3, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 2, - 1, 0, 2, 0, 0, 1, 2, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 2, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } } } }, - { "vpgatherdq", 0x6690, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpsrlw", 0x6671, 0x2, 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, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 2, - 1, 0, 1, 0, 0, 0, 2, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vpgatherqd", 0x6691, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpsrlw", 0x66d1, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, - { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpgatherqd", 0x6691, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpsrlw", 0x6671, 0x2, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 1, - 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, - { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpgatherqd", 0x6691, None, 1, 2, + 0, 0, 1, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpsrlw", 0x66d1, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, - 1, 0, 3, 0, 0, 1, 2, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpgatherqd", 0x6691, None, 1, 2, + 0, 0, 1, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpsrlw", 0x6671, 2, 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, 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, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, - 1, 0, 1, 0, 0, 2, 2, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpgatherqd", 0x6691, None, 1, 2, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpsrlw", 0x66D1, None, 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, 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, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, - 1, 0, 2, 0, 0, 3, 2, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, + 0, 0, 2, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpgatherqq", 0x6691, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpsrlw", 0x66D1, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, - 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, - { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpgatherqq", 0x6691, None, 1, 3, + 0, 0, 1, 1, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 1, 0, 0, 0 } } } }, + { "vpsubb", 0x66f8, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 2, - 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vpgatherqq", 0x6691, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpsubb", 0x66f8, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 2, - 1, 0, 3, 0, 0, 1, 2, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 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, - 0, 0, 0, 1, 0, 0 } } } }, - { "vpgatherqq", 0x6691, None, 1, 2, + 0, 0, 1, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpsubb", 0x66F8, None, 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, 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, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 2, - 1, 0, 1, 0, 0, 2, 2, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 1, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpgatherqq", 0x6691, None, 1, 2, + 0, 1, 1, 1, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpsubd", 0x66fa, None, 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, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 2, - 1, 0, 2, 0, 0, 3, 2, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vaesimc", 0x66db, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpsubd", 0x66fa, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 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, - 0, 1, 0, 0, 0, 0 } } } }, - { "vaeskeygenassist", 0x66df, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 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 } } } }, - { "vpclmulqdq", 0x6644, None, 1, 4, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpsubd", 0x66FA, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 1, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpclmulqdq", 0x6644, None, 1, 4, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpsubq", 0x66fb, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 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, 0, 1, 0, 0, 0 } } } }, - { "vpclmulqdq", 0x6644, None, 1, 4, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpsubq", 0x66fb, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 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, - 0, 1, 1, 1, 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, 1, 1, 0, 0 } } } }, - { "vpclmullqlqdq", 0x6644, 0x0, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpsubq", 0x66FB, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 3, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 1, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpclmullqlqdq", 0x6644, 0x00, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpsubsb", 0x66e8, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 3, - 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 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, 0, 1, 0, 0, 0 } } } }, - { "vpclmullqlqdq", 0x6644, 0x00, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpsubsb", 0x66e8, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 3, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 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, - 0, 1, 1, 1, 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, 1, 1, 0, 0 } } } }, - { "vpclmulhqlqdq", 0x6644, 0x1, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpsubsb", 0x66E8, None, 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, 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, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 3, - 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpclmulhqlqdq", 0x6644, 0x01, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpsubsw", 0x66e9, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 3, - 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 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, 0, 1, 0, 0, 0 } } } }, - { "vpclmulhqlqdq", 0x6644, 0x01, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpsubsw", 0x66e9, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 3, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 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, - 0, 1, 1, 1, 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, 1, 1, 0, 0 } } } }, - { "vpclmullqhqdq", 0x6644, 0x10, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpsubsw", 0x66E9, None, 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, 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, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 3, - 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpclmullqhqdq", 0x6644, 0x10, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpsubusb", 0x66d8, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 3, - 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 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, 0, 1, 0, 0, 0 } } } }, - { "vpclmullqhqdq", 0x6644, 0x10, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpsubusb", 0x66d8, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 3, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 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, - 0, 1, 1, 1, 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, 1, 1, 0, 0 } } } }, - { "vpclmulhqhqdq", 0x6644, 0x11, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpsubusb", 0x66D8, None, 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, 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, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 3, - 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpclmulhqhqdq", 0x6644, 0x11, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpsubusw", 0x66d9, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 3, - 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 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, 0, 1, 0, 0, 0 } } } }, - { "vpclmulhqhqdq", 0x6644, 0x11, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpsubusw", 0x66d9, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 3, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 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, - 0, 1, 1, 1, 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, 1, 1, 0, 0 } } } }, - { "vgf2p8affineinvqb", 0x66cf, None, 1, 4, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpsubusw", 0x66D9, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vgf2p8affineinvqb", 0x66cf, None, 1, 4, - { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 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, 1, 2, - 2, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vgf2p8affineqb", 0x66ce, None, 1, 4, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpsubw", 0x66f9, None, 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, 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, 1, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 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, 1, 0, 0, 0 } } } }, - { "vgf2p8affineqb", 0x66ce, None, 1, 4, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpsubw", 0x66f9, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 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, 1, 2, - 2, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 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, - 0, 1, 1, 1, 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, 1, 1, 0, 0 } } } }, - { "vgf2p8mulb", 0x66cf, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpsubw", 0x66F9, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 1, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vgf2p8mulb", 0x66cf, None, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vptest", 0x6617, None, 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, 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, 1, 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, 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, 1, 1, - 1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "rdfsbase", 0xf30fae, 0x0, 2, 1, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vpunpckhbw", 0x6668, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "rdgsbase", 0xf30fae, 0x1, 2, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpunpckhbw", 0x6668, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "rdrand", 0xfc7, 0x6, 2, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpunpckhbw", 0x6668, None, 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, 1, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "wrfsbase", 0xf30fae, 0x2, 2, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpunpckhdq", 0x666a, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "wrgsbase", 0xf30fae, 0x3, 2, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpunpckhdq", 0x666a, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcvtph2ps", 0x6613, None, 1, 2, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpunpckhdq", 0x666A, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcvtph2ps", 0x6613, None, 1, 2, + 0, 1, 1, 1, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpunpckhqdq", 0x666d, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vcvtph2ps", 0x6613, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpunpckhqdq", 0x666d, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 1, 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 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, - 0, 0, 0, 1, 0, 0 } } } }, - { "vcvtph2ps", 0x6613, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpunpckhqdq", 0x666D, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 1, 3, 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, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } } } }, - { "vcvtph2ps", 0x6613, None, 1, 2, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpunpckhwd", 0x6669, None, 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, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, - 1, 0, 0, 0, 0, 2, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcvtph2ps", 0x6613, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpunpckhwd", 0x6669, None, 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, 1, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 3, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 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, - 0, 0, 1, 0, 0, 0 } } } }, - { "vcvtps2ph", 0x661d, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpunpckhwd", 0x6669, None, 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, 1, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } } } }, - { "vcvtps2ph", 0x661d, None, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpunpcklbw", 0x6660, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } } } }, - { "vcvtps2ph", 0x661D, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpunpcklbw", 0x6660, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } } } }, - { "vcvtps2ph", 0x661D, None, 1, 4, + 0, 0, 1, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpunpcklbw", 0x6660, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 2, 0, 0, 0, 0, 1, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vcvtps2ph", 0x661D, None, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpunpckldq", 0x6662, None, 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, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 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 } } } }, - { "vcvtps2ph", 0x661D, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpunpckldq", 0x6662, None, 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, 1, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 2, 0, 0, 0, 0, 2, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, - { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, - { "vcvtps2ph", 0x661D, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpunpckldq", 0x6662, None, 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, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 2, 0, 0, 0, 0, 3, 2, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, - { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } } } }, - { "vfmadd132pd", 0x6698, None, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpunpcklqdq", 0x666c, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 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, 1, 0, 0, 0 } } } }, - { "vfmadd132pd", 0x6698, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpunpcklqdq", 0x666c, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 2, - 1, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 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, 1, 1, 0, 0 } } } }, - { "vfmadd132pd", 0x6698, None, 1, 4, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpunpcklqdq", 0x666C, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 1, 0, 0, 0, 0, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } } } }, - { "vfmadd132ps", 0x6698, None, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpunpcklwd", 0x6661, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 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, 1, 0, 0, 0 } } } }, - { "vfmadd132ps", 0x6698, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpunpcklwd", 0x6661, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, - 1, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 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, 1, 1, 0, 0 } } } }, - { "vfmadd132ps", 0x6698, None, 1, 4, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpunpcklwd", 0x6661, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 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, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } } } }, - { "vfmadd213pd", 0x66a8, None, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpxor", 0x66ef, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 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, 1, 0, 0, 0 } } } }, - { "vfmadd213pd", 0x66A8, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpxor", 0x66ef, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 2, - 1, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 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, - 0, 1, 1, 1, 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, 1, 1, 0, 0 } } } }, - { "vfmadd213pd", 0x66A8, None, 1, 4, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vrcpps", 0x53, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 1, 0, 0, 0, 0, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 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 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vrcpss", 0xf353, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 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, 0, 0, 1, 0, 0 } } } }, - { "vfmadd213ps", 0x66a8, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vroundpd", 0x6609, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vroundps", 0x6608, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vfmadd213ps", 0x66A8, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vroundsd", 0x660b, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 3, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 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, 1, 1, 0, 0 } } } }, - { "vfmadd213ps", 0x66A8, None, 1, 4, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vroundss", 0x660a, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 0, 0, 0, 0, 1, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 3, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 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, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 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, 0, 0, 1, 0, 0 } } } }, - { "vfmadd231pd", 0x66b8, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vrsqrtps", 0x52, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vfmadd231pd", 0x66B8, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vrsqrtss", 0xf352, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 1, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 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, 1, 1, 0, 0 } } } }, - { "vfmadd231pd", 0x66B8, None, 1, 4, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vshufpd", 0x66c6, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 1, 0, 0, 0, 0, 1, 3, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 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, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 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, - 0, 0, 0, 1, 0, 0 } } } }, - { "vfmadd231ps", 0x66b8, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vshufpd", 0x66C6, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vfmadd231ps", 0x66B8, None, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vshufps", 0xc6, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 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, - 0, 1, 1, 1, 0, 0 } } } }, - { "vfmadd231ps", 0x66B8, None, 1, 4, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vshufps", 0xC6, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 0, 0, 0, 0, 1, 3, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 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, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } } } }, - { "vfmadd132sd", 0x6699, None, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vsqrtpd", 0x6651, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 2, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 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, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 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 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vfmadd132sd", 0x6699, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vsqrtpd", 0x6651, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 1, 0, 0, 0, 0, 4, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 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, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vfmadd132sd", 0x6699, None, 1, 4, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vsqrtpd", 0x6651, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 1, 0, 0, 0, 0, 4, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, + 0, 0, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 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 } } } }, - { "vfmadd132ss", 0x6699, None, 1, 3, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vsqrtps", 0x51, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 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 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vfmadd132ss", 0x6699, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vsqrtps", 0x51, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 0, 0, 0, 0, 4, 3, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vfmadd132ss", 0x6699, None, 1, 4, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vsqrtps", 0x51, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 0, 0, 0, 0, 4, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vfmadd213sd", 0x66a9, None, 1, 3, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vsqrtsd", 0xf251, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 2, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 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 } } } }, - { "vfmadd213sd", 0x66A9, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vsqrtsd", 0xF251, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 1, 0, 0, 0, 0, 4, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 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 } } } }, - { "vfmadd213sd", 0x66A9, None, 1, 4, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vsqrtsd", 0xF251, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 1, 0, 0, 0, 0, 4, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vfmadd213ss", 0x66a9, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vsqrtss", 0xf351, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 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 } } } }, - { "vfmadd213ss", 0x66A9, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vsqrtss", 0xF351, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 0, 0, 0, 0, 4, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 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 } } } }, - { "vfmadd213ss", 0x66A9, None, 1, 4, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vsqrtss", 0xF351, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 0, 0, 0, 0, 4, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vfmadd231sd", 0x66b9, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vstmxcsr", 0xae, 0x3, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 2, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 1, 0 } } } }, + { "vsubpd", 0x665c, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vfmadd231sd", 0x66B9, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vsubpd", 0x665C, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 1, 0, 0, 0, 0, 4, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vfmadd231sd", 0x66B9, None, 1, 4, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vsubpd", 0x665C, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 1, 0, 0, 0, 0, 4, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vfmadd231ss", 0x66b9, None, 1, 3, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vsubps", 0x5c, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vfmadd231ss", 0x66B9, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vsubps", 0x5C, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 0, 0, 0, 0, 4, 3, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vfmadd231ss", 0x66B9, None, 1, 4, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vsubps", 0x5C, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 0, 0, 0, 0, 4, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vfmaddsub132pd", 0x6696, None, 1, 3, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vsubsd", 0xf25c, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 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, 1, 0, 0, 0 } } } }, - { "vfmaddsub132pd", 0x6696, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vsubsd", 0xF25C, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 1, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 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, 1, 1, 0, 0 } } } }, - { "vfmaddsub132pd", 0x6696, None, 1, 4, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vsubsd", 0xF25C, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 1, 0, 0, 0, 0, 1, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 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, 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, 0, 0, 1, 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, 0, 0, 1, 0, 0 } } } }, - { "vfmaddsub132ps", 0x6696, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vsubss", 0xf35c, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 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, 1, 0, 0, 0 } } } }, - { "vfmaddsub132ps", 0x6696, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vsubss", 0xF35C, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 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, 1, 1, 0, 0 } } } }, - { "vfmaddsub132ps", 0x6696, None, 1, 4, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vsubss", 0xF35C, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 0, 0, 0, 0, 1, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 4, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 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, 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, 0, 0, 1, 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, 0, 0, 1, 0, 0 } } } }, - { "vfmaddsub213pd", 0x66a6, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vtestpd", 0x660f, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vtestps", 0x660e, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vfmaddsub213pd", 0x66A6, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vucomisd", 0x662e, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 1, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vucomisd", 0x662E, None, 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, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 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, 4, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vfmaddsub213pd", 0x66A6, None, 1, 4, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vucomisd", 0x662E, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 1, 0, 0, 0, 0, 1, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, + 0, 0, 4, 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 } }, - { { 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 } }, { { 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, 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, 0, 0, 1, 0, 0 } } } }, - { "vfmaddsub213ps", 0x66a6, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vucomiss", 0x2e, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vfmaddsub213ps", 0x66A6, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vucomiss", 0x2E, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 4, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vfmaddsub213ps", 0x66A6, None, 1, 4, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vucomiss", 0x2E, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 0, 0, 0, 0, 1, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 4, 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 } }, { { 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, 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, 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 } } } }, - { "vfmaddsub231pd", 0x66b6, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vunpckhpd", 0x6615, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vfmaddsub231pd", 0x66B6, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vunpckhpd", 0x6615, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 1, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vfmaddsub231pd", 0x66B6, None, 1, 4, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vunpckhps", 0x15, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 1, 0, 0, 0, 0, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 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, - 0, 0, 0, 1, 0, 0 } } } }, - { "vfmaddsub231ps", 0x66b6, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vunpckhps", 0x15, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vfmaddsub231ps", 0x66B6, None, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vunpcklpd", 0x6614, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 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, - 0, 1, 1, 1, 0, 0 } } } }, - { "vfmaddsub231ps", 0x66B6, None, 1, 4, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vunpcklpd", 0x6614, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 0, 0, 0, 0, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } } } }, - { "vfmsubadd132pd", 0x6697, None, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vunpcklps", 0x14, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vfmsubadd132pd", 0x6697, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vunpcklps", 0x14, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 1, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vfmsubadd132pd", 0x6697, None, 1, 4, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vxorpd", 0x6657, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 1, 0, 0, 0, 0, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0 } }, { { 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, 1, 1, 0, 0, 0, 0 } } } }, + { "vxorpd", 0x6657, None, 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, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 1, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } } } }, - { "vfmsubadd132ps", 0x6697, None, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vxorps", 0x57, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vfmsubadd132ps", 0x6697, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vxorps", 0x57, None, 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, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, - 1, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 1, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vfmsubadd132ps", 0x6697, None, 1, 4, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vzeroall", 0x77, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 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, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 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, - 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 } } } }, - { "vfmsubadd213pd", 0x66a7, None, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vzeroupper", 0x77, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vfmsubadd213pd", 0x66A7, None, 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, 1, 1, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vbroadcasti128", 0x665A, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 2, - 1, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vfmsubadd213pd", 0x66A7, None, 1, 4, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpblendd", 0x6602, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 1, 0, 0, 0, 0, 1, 3, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 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, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 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, - 0, 0, 0, 1, 0, 0 } } } }, - { "vfmsubadd213ps", 0x66a7, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vpbroadcastb", 0x6678, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vfmsubadd213ps", 0x66A7, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vpbroadcastb", 0x6678, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, - 1, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 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, 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, 1, 1, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpbroadcastb", 0x667A, None, 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, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vfmsubadd213ps", 0x66A7, None, 1, 4, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpbroadcastd", 0x6658, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 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, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 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, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } } } }, - { "vfmsubadd231pd", 0x66b7, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vpbroadcastd", 0x6658, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vfmsubadd231pd", 0x66B7, None, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpbroadcastd", 0x667C, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 1, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 0, 0, 0, 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, 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, 1, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vfmsubadd231pd", 0x66B7, None, 1, 4, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpbroadcastq", 0x6659, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 1, 0, 0, 0, 0, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 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, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } } } }, - { "vfmsubadd231ps", 0x66b7, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vpbroadcastq", 0x6659, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vfmsubadd231ps", 0x66B7, None, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpbroadcastq", 0x667C, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, 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, 2, 1, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vfmsubadd231ps", 0x66B7, None, 1, 4, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpbroadcastw", 0x6679, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 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, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 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, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } } } }, - { "vfmsub132pd", 0x669a, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vpbroadcastw", 0x6679, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vfmsub132pd", 0x669A, None, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpbroadcastw", 0x667B, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 2, - 1, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vfmsub132pd", 0x669A, None, 1, 4, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vperm2i128", 0x6646, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 1, 0, 0, 0, 0, 1, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 1, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 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, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } } } }, - { "vfmsub132ps", 0x669a, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpermd", 0x6636, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 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, - 0, 1, 1, 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, 1, 0, 0, 0 } } } }, - { "vfmsub132ps", 0x669A, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpermd", 0x6636, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 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, - 0, 1, 1, 1, 0, 0 } }, + 0, 0, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vfmsub132ps", 0x669A, None, 1, 4, + 0, 0, 1, 1, 0, 0, 0 } } } }, + { "vpermpd", 0x6601, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 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, 1, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 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, - 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 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } } } }, - { "vfmsub213pd", 0x66aa, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpermpd", 0x6601, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 0, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vfmsub213pd", 0x66AA, None, 1, 3, + 0, 0, 1, 1, 0, 0, 0 } } } }, + { "vpermpd", 0x6616, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 1, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 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, - 0, 1, 1, 1, 0, 0 } }, + 0, 0, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vfmsub213pd", 0x66AA, None, 1, 4, + 0, 0, 1, 1, 0, 0, 0 } } } }, + { "vpermps", 0x6616, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 1, 0, 0, 0, 0, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 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, - 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 } } } }, - { "vfmsub213ps", 0x66aa, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 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, - 0, 1, 1, 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, 1, 0, 0, 0 } } } }, - { "vfmsub213ps", 0x66AA, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpermps", 0x6616, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 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, - 0, 1, 1, 1, 0, 0 } }, + 0, 0, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vfmsub213ps", 0x66AA, None, 1, 4, + 0, 0, 1, 1, 0, 0, 0 } } } }, + { "vpermq", 0x6600, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 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, 1, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 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, - 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 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } } } }, - { "vfmsub231pd", 0x66ba, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpermq", 0x6600, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 0, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vfmsub231pd", 0x66BA, None, 1, 3, + 0, 0, 1, 1, 0, 0, 0 } } } }, + { "vpermq", 0x6636, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 1, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 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, - 0, 1, 1, 1, 0, 0 } }, + 0, 0, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vfmsub231pd", 0x66BA, None, 1, 4, + 0, 0, 1, 1, 0, 0, 0 } } } }, + { "vextracti128", 0x6639, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 1, 0, 0, 0, 0, 1, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 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, - 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 } }, { { 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 } } } }, - { "vfmsub231ps", 0x66ba, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } } } }, + { "vinserti128", 0x6638, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 1, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 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, 1, 0, 0, 0 } } } }, - { "vfmsub231ps", 0x66BA, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpmaskmovd", 0x668e, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, - 1, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vfmsub231ps", 0x66BA, None, 1, 4, + 0, 1, 1, 0, 0, 0, 0 } }, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } } } }, + { "vpmaskmovd", 0x668c, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 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, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 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, - 0, 0, 0, 1, 0, 0 } } } }, - { "vfmsub132sd", 0x669b, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vpmaskmovq", 0x668e, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 2, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 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, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vfmsub132sd", 0x669B, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } }, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } } } }, + { "vpmaskmovq", 0x668c, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 2, - 1, 0, 0, 0, 0, 4, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vfmsub132sd", 0x669B, None, 1, 4, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vpsllvd", 0x6647, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 1, 0, 0, 0, 0, 4, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vfmsub132ss", 0x669b, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vpsllvd", 0x6647, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vfmsub132ss", 0x669B, None, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpsllvq", 0x6647, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, - 1, 0, 0, 0, 0, 4, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vfmsub132ss", 0x669B, None, 1, 4, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vpsllvq", 0x6647, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 0, 0, 0, 0, 4, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vfmsub213sd", 0x66ab, None, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpsravd", 0x6646, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 2, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vfmsub213sd", 0x66AB, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vpsravd", 0x6646, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 1, 0, 0, 0, 0, 4, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vfmsub213sd", 0x66AB, None, 1, 4, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpsrlvd", 0x6645, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 1, 0, 0, 0, 0, 4, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vfmsub213ss", 0x66ab, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vpsrlvd", 0x6645, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vfmsub213ss", 0x66AB, None, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpsrlvq", 0x6645, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, - 1, 0, 0, 0, 0, 4, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vfmsub213ss", 0x66AB, None, 1, 4, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vpsrlvq", 0x6645, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 0, 0, 0, 0, 4, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vfmsub231sd", 0x66bb, None, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vgatherdpd", 0x6692, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 2, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 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, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 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, - 0, 1, 0, 0, 0, 0 } } } }, - { "vfmsub231sd", 0x66BB, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vgatherdpd", 0x6692, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 2, - 1, 0, 0, 0, 0, 4, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 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, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 2, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0 } }, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 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, - 0, 1, 0, 0, 0, 0 } } } }, - { "vfmsub231sd", 0x66BB, None, 1, 4, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vgatherdpd", 0x6692, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 1, 0, 0, 0, 0, 4, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 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 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 2, + 0, 0, 1, 2, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 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, - 0, 1, 0, 0, 0, 0 } } } }, - { "vfmsub231ss", 0x66bb, None, 1, 3, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vgatherdpd", 0x6692, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 1, + 0, 0, 0, 2, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 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, - 0, 1, 0, 0, 0, 0 } } } }, - { "vfmsub231ss", 0x66BB, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vgatherdps", 0x6692, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, - 1, 0, 0, 0, 0, 4, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 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, - 0, 1, 0, 0, 0, 0 } } } }, - { "vfmsub231ss", 0x66BB, None, 1, 4, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vgatherdps", 0x6692, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 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, 4, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 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 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 1, 1, 0, 2, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0 } }, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 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, - 0, 1, 0, 0, 0, 0 } } } }, - { "vfnmadd132pd", 0x669c, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vgatherdps", 0x6692, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 3, + 0, 0, 1, 2, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 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, - 0, 1, 1, 0, 0, 0 } } } }, - { "vfnmadd132pd", 0x669C, None, 1, 3, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vgatherdps", 0x6692, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 2, - 1, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 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, 2, 2, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 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, - 0, 1, 1, 1, 0, 0 } } } }, - { "vfnmadd132pd", 0x669C, None, 1, 4, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vgatherdps", 0x6692, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 1, 0, 0, 0, 0, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 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, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 2, + 0, 0, 3, 2, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 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, - 0, 0, 0, 1, 0, 0 } } } }, - { "vfnmadd132ps", 0x669c, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vgatherqpd", 0x6693, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 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, - 0, 1, 1, 0, 0, 0 } } } }, - { "vfnmadd132ps", 0x669C, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vgatherqpd", 0x6693, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, - 1, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 2, 1, 0, 2, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0 } }, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 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, - 0, 1, 1, 1, 0, 0 } } } }, - { "vfnmadd132ps", 0x669C, None, 1, 4, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vgatherqpd", 0x6693, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 0, 0, 0, 0, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 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, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 3, + 0, 0, 1, 2, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 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, - 0, 0, 0, 1, 0, 0 } } } }, - { "vfnmadd213pd", 0x66ac, None, 1, 3, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vgatherqpd", 0x6693, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 1, + 0, 0, 2, 2, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 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, - 0, 1, 1, 0, 0, 0 } } } }, - { "vfnmadd213pd", 0x66AC, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vgatherqpd", 0x6693, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 2, - 1, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 2, + 0, 0, 3, 2, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 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, - 0, 1, 1, 1, 0, 0 } } } }, - { "vfnmadd213pd", 0x66AC, None, 1, 4, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vgatherqps", 0x6693, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 1, 0, 0, 0, 0, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 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, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 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, - 0, 0, 0, 1, 0, 0 } } } }, - { "vfnmadd213ps", 0x66ac, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vgatherqps", 0x6693, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 1, 1, 0, 2, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 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, - 0, 1, 1, 0, 0, 0 } } } }, - { "vfnmadd213ps", 0x66AC, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vgatherqps", 0x6693, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 3, + 0, 0, 1, 2, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 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, - 0, 1, 1, 1, 0, 0 } } } }, - { "vfnmadd213ps", 0x66AC, None, 1, 4, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vgatherqps", 0x6693, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 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, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 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, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 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, 2, 2, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 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, - 0, 0, 0, 1, 0, 0 } } } }, - { "vfnmadd231pd", 0x66bc, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vgatherqps", 0x6693, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 2, + 0, 0, 3, 2, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 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, - 0, 1, 1, 0, 0, 0 } } } }, - { "vfnmadd231pd", 0x66BC, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpgatherdd", 0x6690, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 2, - 1, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 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, - 0, 1, 1, 1, 0, 0 } } } }, - { "vfnmadd231pd", 0x66BC, None, 1, 4, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpgatherdd", 0x6690, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 1, 0, 0, 0, 0, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 1, 1, 0, 2, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0 } }, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 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, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpgatherdd", 0x6690, None, 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, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 3, + 0, 0, 1, 2, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 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, - 0, 0, 0, 1, 0, 0 } } } }, - { "vfnmadd231ps", 0x66bc, None, 1, 3, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vpgatherdd", 0x6690, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 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, 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, 1, 1, 0, 1, + 0, 0, 2, 2, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 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, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpgatherdd", 0x6690, None, 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, 1, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 2, + 0, 0, 3, 2, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 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, - 0, 1, 1, 0, 0, 0 } } } }, - { "vfnmadd231ps", 0x66BC, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpgatherdq", 0x6690, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, - 1, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 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, - 0, 1, 1, 1, 0, 0 } } } }, - { "vfnmadd231ps", 0x66BC, None, 1, 4, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpgatherdq", 0x6690, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 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, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 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, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 2, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0 } }, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 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, - 0, 0, 0, 1, 0, 0 } } } }, - { "vfnmadd132sd", 0x669d, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpgatherdq", 0x6690, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 2, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 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, 2, 1, 0, 2, + 0, 0, 1, 2, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 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, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vpgatherdq", 0x6690, None, 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, 1, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 1, + 0, 0, 0, 2, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 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, - 0, 1, 0, 0, 0, 0 } } } }, - { "vfnmadd132sd", 0x669D, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vpgatherqd", 0x6691, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 2, - 1, 0, 0, 0, 0, 4, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 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, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 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, - 0, 1, 0, 0, 0, 0 } } } }, - { "vfnmadd132sd", 0x669D, None, 1, 4, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpgatherqd", 0x6691, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 1, 0, 0, 0, 0, 4, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 1, 1, 0, 2, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 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, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpgatherqd", 0x6691, None, 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, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 3, + 0, 0, 1, 2, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 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, - 0, 1, 0, 0, 0, 0 } } } }, - { "vfnmadd132ss", 0x669d, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpgatherqd", 0x6691, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 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, 1, 1, 0, 1, + 0, 0, 2, 2, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 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, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpgatherqd", 0x6691, None, 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, 1, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 2, + 0, 0, 3, 2, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 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, - 0, 1, 0, 0, 0, 0 } } } }, - { "vfnmadd132ss", 0x669D, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpgatherqq", 0x6691, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, - 1, 0, 0, 0, 0, 4, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 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, - 0, 1, 0, 0, 0, 0 } } } }, - { "vfnmadd132ss", 0x669D, None, 1, 4, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpgatherqq", 0x6691, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 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, 4, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 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 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 2, 1, 0, 2, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0 } }, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 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, - 0, 1, 0, 0, 0, 0 } } } }, - { "vfnmadd213sd", 0x66ad, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpgatherqq", 0x6691, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 2, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 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, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 3, + 0, 0, 1, 2, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 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, - 0, 1, 0, 0, 0, 0 } } } }, - { "vfnmadd213sd", 0x66AD, None, 1, 3, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vpgatherqq", 0x6691, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 2, - 1, 0, 0, 0, 0, 4, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 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, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 1, + 0, 0, 2, 2, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 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, - 0, 1, 0, 0, 0, 0 } } } }, - { "vfnmadd213sd", 0x66AD, None, 1, 4, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpgatherqq", 0x6691, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 1, 0, 0, 0, 0, 4, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 2, + 0, 0, 3, 2, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 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, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vaesimc", 0x66db, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vfnmadd213ss", 0x66ad, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vaeskeygenassist", 0x66df, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpclmulqdq", 0x6644, None, 1, 4, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 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 } } } }, - { "vfnmadd213ss", 0x66AD, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpclmulqdq", 0x6644, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, - 1, 0, 0, 0, 0, 4, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 3, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vfnmadd213ss", 0x66AD, None, 1, 4, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpclmulqdq", 0x6644, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 0, 0, 0, 0, 4, 3, 0, 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, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 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, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vfnmadd231sd", 0x66bd, None, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpclmullqlqdq", 0x6644, 0x0, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 2, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 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 } } } }, - { "vfnmadd231sd", 0x66BD, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpclmullqlqdq", 0x6644, 0x00, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 2, - 1, 0, 0, 0, 0, 4, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 1, 3, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vfnmadd231sd", 0x66BD, None, 1, 4, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpclmullqlqdq", 0x6644, 0x00, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 1, 0, 0, 0, 0, 4, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 3, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vfnmadd231ss", 0x66bd, None, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpclmulhqlqdq", 0x6644, 0x1, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 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 } } } }, - { "vfnmadd231ss", 0x66BD, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpclmulhqlqdq", 0x6644, 0x01, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, - 1, 0, 0, 0, 0, 4, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 1, 3, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vfnmadd231ss", 0x66BD, None, 1, 4, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpclmulhqlqdq", 0x6644, 0x01, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 0, 0, 0, 0, 4, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 3, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vfnmsub132pd", 0x669e, None, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpclmullqhqdq", 0x6644, 0x10, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 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, 1, 0, 0, 0 } } } }, - { "vfnmsub132pd", 0x669E, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpclmullqhqdq", 0x6644, 0x10, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 2, - 1, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 1, 3, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 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, 1, 1, 0, 0 } } } }, - { "vfnmsub132pd", 0x669E, None, 1, 4, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpclmullqhqdq", 0x6644, 0x10, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 1, 0, 0, 0, 0, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 3, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpclmulhqhqdq", 0x6644, 0x11, 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, 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, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 3, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 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, 0, 0, 1, 0, 0 } } } }, - { "vfnmsub132ps", 0x669e, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpclmulhqhqdq", 0x6644, 0x11, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 1, 3, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 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, - 0, 1, 1, 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, 1, 0, 0, 0 } } } }, - { "vfnmsub132ps", 0x669E, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vpclmulhqhqdq", 0x6644, 0x11, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 3, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vfnmsub132ps", 0x669E, None, 1, 4, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vgf2p8affineinvqb", 0x66cf, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vgf2p8affineinvqb", 0x66cf, None, 1, 4, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vgf2p8affineqb", 0x66ce, None, 1, 4, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 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, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0 } }, { { 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, 1, 1, 0, 0, 0, 0 } } } }, + { "vgf2p8affineqb", 0x66ce, None, 1, 4, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } } } }, - { "vfnmsub213pd", 0x66ae, None, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vgf2p8mulb", 0x66cf, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vgf2p8mulb", 0x66cf, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vfnmsub213pd", 0x66AE, None, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "rdfsbase", 0xf30fae, 0x0, 2, 1, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "rdgsbase", 0xf30fae, 0x1, 2, 1, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "rdrand", 0xfc7, 0x6, 2, 1, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "wrfsbase", 0xf30fae, 0x2, 2, 1, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "wrgsbase", 0xf30fae, 0x3, 2, 1, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vcvtph2ps", 0x6613, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 2, - 1, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcvtph2ps", 0x6613, None, 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, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vfnmsub213pd", 0x66AE, None, 1, 4, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vcvtph2ps", 0x6613, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 1, 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vcvtph2ps", 0x6613, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 1, 0, 0, 0, 0, 1, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 1, 3, 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 } }, { { 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, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vcvtph2ps", 0x6613, None, 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, 1, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 2, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } } } }, - { "vfnmsub213ps", 0x66ae, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vcvtph2ps", 0x6613, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 3, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vcvtps2ph", 0x661d, None, 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, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vfnmsub213ps", 0x66AE, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } } } }, + { "vcvtps2ph", 0x661d, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, - 1, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } } } }, + { "vcvtps2ph", 0x661D, None, 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, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, + 0, 0, 1, 1, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vfnmsub213ps", 0x66AE, None, 1, 4, + 0, 0, 0, 1, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0 } } } }, + { "vcvtps2ph", 0x661D, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 0, 0, 0, 0, 1, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, + 0, 0, 1, 3, 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, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vcvtps2ph", 0x661D, None, 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, 1, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, + 0, 0, 2, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } } } }, + { "vcvtps2ph", 0x661D, None, 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, 1, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, + 0, 0, 3, 1, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } } } }, - { "vfnmsub231pd", 0x66be, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } } } }, + { "vfmadd132pd", 0x6698, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vfnmsub231pd", 0x66BE, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vfmadd132pd", 0x6698, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 1, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vfnmsub231pd", 0x66BE, None, 1, 4, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vfmadd132pd", 0x6698, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 1, 0, 0, 0, 0, 1, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 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, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } } } }, - { "vfnmsub231ps", 0x66be, None, 1, 3, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vfmadd132ps", 0x6698, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vfnmsub231ps", 0x66BE, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vfmadd132ps", 0x6698, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vfnmsub231ps", 0x66BE, None, 1, 4, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vfmadd132ps", 0x6698, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 0, 0, 0, 0, 1, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 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, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } } } }, - { "vfnmsub132sd", 0x669f, None, 1, 3, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vfmadd213pd", 0x66a8, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 2, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vfnmsub132sd", 0x669F, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vfmadd213pd", 0x66A8, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 1, 0, 0, 0, 0, 4, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vfnmsub132sd", 0x669F, None, 1, 4, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vfmadd213pd", 0x66A8, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 1, 0, 0, 0, 0, 4, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vfnmsub132ss", 0x669f, None, 1, 3, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vfmadd213ps", 0x66a8, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vfnmsub132ss", 0x669F, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vfmadd213ps", 0x66A8, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 0, 0, 0, 0, 4, 3, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vfnmsub132ss", 0x669F, None, 1, 4, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vfmadd213ps", 0x66A8, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 0, 0, 0, 0, 4, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vfnmsub213sd", 0x66af, None, 1, 3, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vfmadd231pd", 0x66b8, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 2, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vfnmsub213sd", 0x66AF, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vfmadd231pd", 0x66B8, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 1, 0, 0, 0, 0, 4, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vfnmsub213sd", 0x66AF, None, 1, 4, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vfmadd231pd", 0x66B8, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 1, 0, 0, 0, 0, 4, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vfnmsub213ss", 0x66af, None, 1, 3, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vfmadd231ps", 0x66b8, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vfnmsub213ss", 0x66AF, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vfmadd231ps", 0x66B8, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 0, 0, 0, 0, 4, 3, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vfnmsub213ss", 0x66AF, None, 1, 4, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vfmadd231ps", 0x66B8, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 0, 0, 0, 0, 4, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vfnmsub231sd", 0x66bf, None, 1, 3, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vfmadd132sd", 0x6699, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 2, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 2, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 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 } } } }, - { "vfnmsub231sd", 0x66BF, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfmadd132sd", 0x6699, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 1, 0, 0, 0, 0, 4, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 4, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 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 } } } }, - { "vfnmsub231sd", 0x66BF, None, 1, 4, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfmadd132sd", 0x6699, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 1, 0, 0, 0, 0, 4, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 4, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vfnmsub231ss", 0x66bf, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfmadd132ss", 0x6699, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 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 } } } }, - { "vfnmsub231ss", 0x66BF, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfmadd132ss", 0x6699, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 0, 0, 0, 0, 4, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 4, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 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 } } } }, - { "vfnmsub231ss", 0x66BF, None, 1, 4, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfmadd132ss", 0x6699, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 0, 0, 0, 0, 4, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 4, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "xacquire", 0xf2, None, 1, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfmadd213sd", 0x66a9, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, - { "xrelease", 0xf3, None, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 2, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfmadd213sd", 0x66A9, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, - { "xabort", 0xc6f8, None, 2, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 4, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfmadd213sd", 0x66A9, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 4, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, - { "xbegin", 0xc7f8, None, 2, 1, - { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, - { "xend", 0xf01d5, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, - { "xtest", 0xf01d6, None, 3, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfmadd213ss", 0x66a9, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, - { "bzhi", 0xf5, None, 1, 3, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfmadd213ss", 0x66A9, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 0, 1, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0 }, - { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "mulx", 0xf2f6, None, 1, 3, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 4, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfmadd213ss", 0x66A9, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 0, 1, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0 }, - { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "pdep", 0xf2f5, None, 1, 3, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 4, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfmadd231sd", 0x66b9, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 0, 1, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0 }, - { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "pext", 0xf3f5, None, 1, 3, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 2, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfmadd231sd", 0x66B9, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 0, 1, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0 }, - { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "rorx", 0xf2f0, None, 1, 3, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 4, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfmadd231sd", 0x66B9, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 0, 1, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 4, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "sarx", 0xf3f7, None, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfmadd231ss", 0x66b9, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 0, 1, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0 }, - { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "shlx", 0x66f7, None, 1, 3, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfmadd231ss", 0x66B9, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 0, 1, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0 }, - { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "shrx", 0xf2f7, None, 1, 3, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 4, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfmadd231ss", 0x66B9, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 0, 1, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0 }, - { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "vfmaddpd", 0x6669, None, 1, 4, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 4, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfmaddsub132pd", 0x6696, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, - 2, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vfmaddpd", 0x6669, None, 1, 4, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vfmaddsub132pd", 0x6696, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vfmaddps", 0x6668, None, 1, 4, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vfmaddsub132pd", 0x6696, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, - 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vfmaddps", 0x6668, None, 1, 4, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vfmaddsub132ps", 0x6696, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 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 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vfmaddsd", 0x666b, None, 1, 4, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vfmaddsub132ps", 0x6696, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, - 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 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, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vfmaddsd", 0x666b, None, 1, 4, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vfmaddsub132ps", 0x6696, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vfmaddss", 0x666a, None, 1, 4, + 0, 0, 0, 1, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vfmaddsub213pd", 0x66a6, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, - 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vfmaddss", 0x666a, None, 1, 4, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vfmaddsub213pd", 0x66A6, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vfmaddsubpd", 0x665d, None, 1, 4, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vfmaddsub213pd", 0x66A6, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, - 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vfmaddsubpd", 0x665d, None, 1, 4, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vfmaddsub213ps", 0x66a6, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 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 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vfmaddsubps", 0x665c, None, 1, 4, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vfmaddsub213ps", 0x66A6, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, - 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vfmaddsubps", 0x665c, None, 1, 4, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vfmaddsub213ps", 0x66A6, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vfmsubaddpd", 0x665f, None, 1, 4, + 0, 0, 0, 1, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vfmaddsub231pd", 0x66b6, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, - 2, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vfmsubaddpd", 0x665f, None, 1, 4, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vfmaddsub231pd", 0x66B6, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vfmsubaddps", 0x665e, None, 1, 4, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vfmaddsub231pd", 0x66B6, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, - 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vfmsubaddps", 0x665e, None, 1, 4, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vfmaddsub231ps", 0x66b6, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 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 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vfmsubpd", 0x666d, None, 1, 4, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vfmaddsub231ps", 0x66B6, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, - 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vfmsubpd", 0x666d, None, 1, 4, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vfmaddsub231ps", 0x66B6, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vfmsubps", 0x666c, None, 1, 4, + 0, 0, 0, 1, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vfmsubadd132pd", 0x6697, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, - 2, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vfmsubps", 0x666c, None, 1, 4, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vfmsubadd132pd", 0x6697, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vfmsubsd", 0x666f, None, 1, 4, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vfmsubadd132pd", 0x6697, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, - 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vfmsubsd", 0x666f, None, 1, 4, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vfmsubadd132ps", 0x6697, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vfmsubss", 0x666e, None, 1, 4, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vfmsubadd132ps", 0x6697, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, - 2, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 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 } } } }, - { "vfmsubss", 0x666e, None, 1, 4, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vfmsubadd132ps", 0x6697, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vfnmaddpd", 0x6679, None, 1, 4, + 0, 0, 0, 1, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vfmsubadd213pd", 0x66a7, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, - 2, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vfmsubadd213pd", 0x66A7, None, 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, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vfnmaddpd", 0x6679, None, 1, 4, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vfmsubadd213pd", 0x66A7, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vfnmaddps", 0x6678, None, 1, 4, + 0, 0, 0, 1, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vfmsubadd213ps", 0x66a7, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, - 2, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vfnmaddps", 0x6678, None, 1, 4, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vfmsubadd213ps", 0x66A7, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vfnmaddsd", 0x667b, None, 1, 4, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vfmsubadd213ps", 0x66A7, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, - 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vfnmaddsd", 0x667b, None, 1, 4, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vfmsubadd231pd", 0x66b7, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vfnmaddss", 0x667a, None, 1, 4, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vfmsubadd231pd", 0x66B7, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, - 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vfnmaddss", 0x667a, None, 1, 4, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vfmsubadd231pd", 0x66B7, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vfnmsubpd", 0x667d, None, 1, 4, + 0, 0, 0, 1, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vfmsubadd231ps", 0x66b7, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, - 2, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vfnmsubpd", 0x667d, None, 1, 4, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vfmsubadd231ps", 0x66B7, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vfnmsubps", 0x667c, None, 1, 4, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vfmsubadd231ps", 0x66B7, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, - 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vfnmsubps", 0x667c, None, 1, 4, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vfmsub132pd", 0x669a, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vfnmsubsd", 0x667f, None, 1, 4, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vfmsub132pd", 0x669A, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, - 2, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 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 } } } }, - { "vfnmsubsd", 0x667f, None, 1, 4, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vfmsub132pd", 0x669A, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vfnmsubss", 0x667e, None, 1, 4, + 0, 0, 0, 1, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vfmsub132ps", 0x669a, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, - 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vfnmsubss", 0x667e, None, 1, 4, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vfmsub132ps", 0x669A, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vfrczpd", 0x81, None, 1, 2, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vfmsub132ps", 0x669A, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vfrczps", 0x80, None, 1, 2, + 0, 0, 0, 1, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vfmsub213pd", 0x66aa, None, 1, 3, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vfrczsd", 0x83, None, 1, 2, + 0, 1, 1, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vfmsub213pd", 0x66AA, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vfrczss", 0x82, None, 1, 2, - { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpcmov", 0xa2, None, 1, 4, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vfmsub213pd", 0x66AA, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vpcmov", 0xa2, None, 1, 4, + 0, 0, 0, 1, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vfmsub213ps", 0x66aa, None, 1, 3, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, - 3, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, - { "vpcomb", 0xcc, None, 1, 4, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vfmsub213ps", 0x66AA, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpcomd", 0xce, None, 1, 4, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vfmsub213ps", 0x66AA, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpcomq", 0xcf, None, 1, 4, + 0, 0, 0, 1, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vfmsub231pd", 0x66ba, None, 1, 3, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpcomub", 0xec, None, 1, 4, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vfmsub231pd", 0x66BA, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpcomud", 0xee, None, 1, 4, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vfmsub231pd", 0x66BA, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpcomuq", 0xef, None, 1, 4, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vfmsub231ps", 0x66ba, None, 1, 3, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpcomuw", 0xed, None, 1, 4, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vfmsub231ps", 0x66BA, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpcomw", 0xcd, None, 1, 4, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vfmsub231ps", 0x66BA, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpermil2pd", 0x6649, None, 1, 5, + 0, 0, 0, 1, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vfmsub132sd", 0x669b, None, 1, 3, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 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, - 0, 1, 1, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 2, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 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, 1, 0, 0, 0 } } } }, - { "vpermil2pd", 0x6649, None, 1, 5, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfmsub132sd", 0x669B, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, - 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 4, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 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, 1, 0, 0, 0 } } } }, - { "vpermil2ps", 0x6648, None, 1, 5, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfmsub132sd", 0x669B, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 2, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 4, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 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, 1, 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, 1, 0, 0, 0 } } } }, - { "vpermil2ps", 0x6648, None, 1, 5, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfmsub132ss", 0x669b, None, 1, 3, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, - 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 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, 1, 0, 0, 0 } } } }, - { "vpcomltb", 0xcc, 0x0, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfmsub132ss", 0x669B, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 4, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vpcomltd", 0xce, 0x0, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfmsub132ss", 0x669B, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 4, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpcomltq", 0xcf, 0x0, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfmsub213sd", 0x66ab, None, 1, 3, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 2, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vpcomltub", 0xec, 0x0, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfmsub213sd", 0x66AB, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 4, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vpcomltud", 0xee, 0x0, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfmsub213sd", 0x66AB, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 4, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpcomltuq", 0xef, 0x0, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfmsub213ss", 0x66ab, None, 1, 3, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vpcomltuw", 0xed, 0x0, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfmsub213ss", 0x66AB, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 4, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vpcomltw", 0xcd, 0x0, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfmsub213ss", 0x66AB, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 4, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpcomleb", 0xcc, 0x1, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfmsub231sd", 0x66bb, None, 1, 3, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 2, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vpcomled", 0xce, 0x1, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfmsub231sd", 0x66BB, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 4, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vpcomleq", 0xcf, 0x1, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfmsub231sd", 0x66BB, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 4, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpcomleub", 0xec, 0x1, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfmsub231ss", 0x66bb, None, 1, 3, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vpcomleud", 0xee, 0x1, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfmsub231ss", 0x66BB, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 4, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vpcomleuq", 0xef, 0x1, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfmsub231ss", 0x66BB, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 4, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpcomleuw", 0xed, 0x1, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfnmadd132pd", 0x669c, None, 1, 3, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpcomlew", 0xcd, 0x1, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vfnmadd132pd", 0x669C, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpcomgtb", 0xcc, 0x2, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vfnmadd132pd", 0x669C, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpcomgtd", 0xce, 0x2, 1, 3, + 0, 0, 0, 1, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vfnmadd132ps", 0x669c, None, 1, 3, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpcomgtq", 0xcf, 0x2, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vfnmadd132ps", 0x669C, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpcomgtub", 0xec, 0x2, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vfnmadd132ps", 0x669C, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpcomgtud", 0xee, 0x2, 1, 3, + 0, 0, 0, 1, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vfnmadd213pd", 0x66ac, None, 1, 3, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpcomgtuq", 0xef, 0x2, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vfnmadd213pd", 0x66AC, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpcomgtuw", 0xed, 0x2, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vfnmadd213pd", 0x66AC, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpcomgtw", 0xcd, 0x2, 1, 3, + 0, 0, 0, 1, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vfnmadd213ps", 0x66ac, None, 1, 3, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpcomgeb", 0xcc, 0x3, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vfnmadd213ps", 0x66AC, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpcomged", 0xce, 0x3, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vfnmadd213ps", 0x66AC, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpcomgeq", 0xcf, 0x3, 1, 3, + 0, 0, 0, 1, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vfnmadd231pd", 0x66bc, None, 1, 3, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpcomgeub", 0xec, 0x3, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vfnmadd231pd", 0x66BC, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpcomgeud", 0xee, 0x3, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vfnmadd231pd", 0x66BC, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpcomgeuq", 0xef, 0x3, 1, 3, + 0, 0, 0, 1, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vfnmadd231ps", 0x66bc, None, 1, 3, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpcomgeuw", 0xed, 0x3, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vfnmadd231ps", 0x66BC, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpcomgew", 0xcd, 0x3, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vfnmadd231ps", 0x66BC, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpcomeqb", 0xcc, 0x4, 1, 3, + 0, 0, 0, 1, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vfnmadd132sd", 0x669d, None, 1, 3, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 2, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vpcomeqd", 0xce, 0x4, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfnmadd132sd", 0x669D, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 4, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vpcomeqq", 0xcf, 0x4, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfnmadd132sd", 0x669D, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 4, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpcomequb", 0xec, 0x4, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfnmadd132ss", 0x669d, None, 1, 3, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vpcomequd", 0xee, 0x4, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfnmadd132ss", 0x669D, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 4, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vpcomequq", 0xef, 0x4, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfnmadd132ss", 0x669D, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 4, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpcomequw", 0xed, 0x4, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfnmadd213sd", 0x66ad, None, 1, 3, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 2, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vpcomeqw", 0xcd, 0x4, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfnmadd213sd", 0x66AD, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 4, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vpcomneqb", 0xcc, 0x5, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfnmadd213sd", 0x66AD, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 4, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpcomneqd", 0xce, 0x5, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfnmadd213ss", 0x66ad, None, 1, 3, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vpcomneqq", 0xcf, 0x5, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfnmadd213ss", 0x66AD, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 4, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vpcomnequb", 0xec, 0x5, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfnmadd213ss", 0x66AD, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 4, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpcomnequd", 0xee, 0x5, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfnmadd231sd", 0x66bd, None, 1, 3, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 2, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vpcomnequq", 0xef, 0x5, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfnmadd231sd", 0x66BD, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 4, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vpcomnequw", 0xed, 0x5, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfnmadd231sd", 0x66BD, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 4, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpcomneqw", 0xcd, 0x5, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfnmadd231ss", 0x66bd, None, 1, 3, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vpcomfalseb", 0xcc, 0x6, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfnmadd231ss", 0x66BD, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 4, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vpcomfalsed", 0xce, 0x6, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfnmadd231ss", 0x66BD, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 4, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpcomfalseq", 0xcf, 0x6, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfnmsub132pd", 0x669e, None, 1, 3, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpcomfalseub", 0xec, 0x6, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vfnmsub132pd", 0x669E, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpcomfalseud", 0xee, 0x6, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vfnmsub132pd", 0x669E, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpcomfalseuq", 0xef, 0x6, 1, 3, + 0, 0, 0, 1, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vfnmsub132ps", 0x669e, None, 1, 3, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpcomfalseuw", 0xed, 0x6, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vfnmsub132ps", 0x669E, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpcomfalsew", 0xcd, 0x6, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vfnmsub132ps", 0x669E, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpcomtrueb", 0xcc, 0x7, 1, 3, + 0, 0, 0, 1, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vfnmsub213pd", 0x66ae, None, 1, 3, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpcomtrued", 0xce, 0x7, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vfnmsub213pd", 0x66AE, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpcomtrueq", 0xcf, 0x7, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vfnmsub213pd", 0x66AE, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpcomtrueub", 0xec, 0x7, 1, 3, + 0, 0, 0, 1, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vfnmsub213ps", 0x66ae, None, 1, 3, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpcomtrueud", 0xee, 0x7, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vfnmsub213ps", 0x66AE, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpcomtrueuq", 0xef, 0x7, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vfnmsub213ps", 0x66AE, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpcomtrueuw", 0xed, 0x7, 1, 3, + 0, 0, 0, 1, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vfnmsub231pd", 0x66be, None, 1, 3, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpcomtruew", 0xcd, 0x7, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vfnmsub231pd", 0x66BE, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vphaddbd", 0xc2, None, 1, 2, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vfnmsub231pd", 0x66BE, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vphaddbq", 0xc3, None, 1, 2, - { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vphaddbw", 0xc1, None, 1, 2, - { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vphadddq", 0xcb, None, 1, 2, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vfnmsub231ps", 0x66be, None, 1, 3, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vphaddubd", 0xd2, None, 1, 2, + 0, 1, 1, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vfnmsub231ps", 0x66BE, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vphaddubq", 0xd3, None, 1, 2, + 0, 1, 1, 1, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vfnmsub231ps", 0x66BE, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vphaddubw", 0xd1, None, 1, 2, + 0, 0, 0, 1, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vfnmsub132sd", 0x669f, None, 1, 3, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 2, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vphaddudq", 0xdb, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfnmsub132sd", 0x669F, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 4, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vphadduwd", 0xd6, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfnmsub132sd", 0x669F, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 4, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vphadduwq", 0xd7, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfnmsub132ss", 0x669f, None, 1, 3, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vphaddwd", 0xc6, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfnmsub132ss", 0x669F, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 4, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vphaddwq", 0xc7, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfnmsub132ss", 0x669F, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 4, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vphsubbw", 0xe1, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfnmsub213sd", 0x66af, None, 1, 3, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 2, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vphsubdq", 0xe3, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfnmsub213sd", 0x66AF, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 4, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vphsubwd", 0xe2, None, 1, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfnmsub213sd", 0x66AF, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 4, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpmacsdd", 0x9e, None, 1, 4, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfnmsub213ss", 0x66af, None, 1, 3, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vpmacsdqh", 0x9f, None, 1, 4, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfnmsub213ss", 0x66AF, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 4, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vpmacsdql", 0x97, None, 1, 4, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfnmsub213ss", 0x66AF, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 4, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpmacssdd", 0x8e, None, 1, 4, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfnmsub231sd", 0x66bf, None, 1, 3, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 2, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vpmacssdqh", 0x8f, None, 1, 4, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfnmsub231sd", 0x66BF, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 4, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vpmacssdql", 0x87, None, 1, 4, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfnmsub231sd", 0x66BF, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 4, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpmacsswd", 0x86, None, 1, 4, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfnmsub231ss", 0x66bf, None, 1, 3, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vpmacssww", 0x85, None, 1, 4, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfnmsub231ss", 0x66BF, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 4, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vpmacswd", 0x96, None, 1, 4, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfnmsub231ss", 0x66BF, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 4, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpmacsww", 0x95, None, 1, 4, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "xacquire", 0xf2, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 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, - 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 } } } }, - { "vpmadcsswd", 0xa6, None, 1, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "xrelease", 0xf3, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 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, - 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 } } } }, - { "vpmadcswd", 0xb6, None, 1, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "xabort", 0xc6f8, None, 2, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 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, - 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 } } } }, - { "vpperm", 0xa3, None, 1, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "xbegin", 0xc7f8, None, 2, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 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, - 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 } } } }, - { "vpperm", 0xa3, None, 1, 4, + 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "xend", 0xf01d5, None, 3, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, - 3, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "xtest", 0xf01d6, None, 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, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "bzhi", 0xf5, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 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, 0, 1, 0, 0, 0, 0, 0 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "mulx", 0xf2f6, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "pdep", 0xf2f5, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "pext", 0xf3f5, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "rorx", 0xf2f0, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "sarx", 0xf3f7, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 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, 0, 1, 0, 0, 0, 0, 0 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "shlx", 0x66f7, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 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, 0, 1, 0, 0, 0, 0, 0 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "shrx", 0xf2f7, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 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, 0, 1, 0, 0, 0, 0, 0 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vfmaddpd", 0x6669, None, 1, 4, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vprotb", 0x90, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vfmaddpd", 0x6669, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 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, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vprotb", 0x90, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vfmaddps", 0x6668, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 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, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, - 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vprotb", 0xc0, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vfmaddps", 0x6668, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 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, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 3, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vprotd", 0x92, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vfmaddsd", 0x666b, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 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, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 2, 2, 2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vprotd", 0x92, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfmaddsd", 0x666b, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 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, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, - 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, 2, 2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 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 } } } }, - { "vprotd", 0xc2, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfmaddss", 0x666a, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 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, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 3, 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 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 2, 2, 2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vprotq", 0x93, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfmaddss", 0x666a, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 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, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, 2, 2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vprotq", 0x93, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfmaddsubpd", 0x665d, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 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, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, - 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vprotq", 0xc3, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vfmaddsubpd", 0x665d, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 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, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 3, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vprotw", 0x91, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vfmaddsubps", 0x665c, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 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, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vprotw", 0x91, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vfmaddsubps", 0x665c, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 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, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, - 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vprotw", 0xc1, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vfmsubaddpd", 0x665f, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 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, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 3, 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 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpshab", 0x98, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 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, 1, 0, 0, 0, 0 } } } }, + { "vfmsubaddpd", 0x665f, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 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, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpshab", 0x98, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vfmsubaddps", 0x665e, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 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, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, - 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpshad", 0x9a, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vfmsubaddps", 0x665e, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 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, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpshad", 0x9a, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vfmsubpd", 0x666d, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 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, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, - 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpshaq", 0x9b, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vfmsubpd", 0x666d, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 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, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpshaq", 0x9b, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vfmsubps", 0x666c, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 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, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, - 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpshaw", 0x99, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vfmsubps", 0x666c, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 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, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpshaw", 0x99, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vfmsubsd", 0x666f, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 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, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, - 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 2, 2, 2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 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 } } } }, - { "vpshlb", 0x94, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfmsubsd", 0x666f, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 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, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, 2, 2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpshlb", 0x94, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfmsubss", 0x666e, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 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, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, - 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 2, 2, 2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 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 } } } }, - { "vpshld", 0x96, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfmsubss", 0x666e, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 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, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, 2, 2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpshld", 0x96, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfnmaddpd", 0x6679, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 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, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, - 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpshlq", 0x97, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vfnmaddpd", 0x6679, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 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, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpshlq", 0x97, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vfnmaddps", 0x6678, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 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, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, - 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpshlw", 0x95, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vfnmaddps", 0x6678, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 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, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vpshlw", 0x95, None, 1, 3, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vfnmaddsd", 0x667b, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 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, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, - 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 2, 2, 2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "llwpcb", 0x12, 0x0, 1, 1, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfnmaddsd", 0x667b, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 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 }, - { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "slwpcb", 0x12, 0x1, 1, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, 2, 2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfnmaddss", 0x667a, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 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 }, - { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "lwpval", 0x12, 0x1, 1, 3, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 2, 2, 2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfnmaddss", 0x667a, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 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, 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, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "lwpins", 0x12, 0x0, 1, 3, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, 2, 2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfnmsubpd", 0x667d, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 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, 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, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "andn", 0xf2, None, 1, 3, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vfnmsubpd", 0x667d, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 0, 1, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0 }, - { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "bextr", 0xf7, None, 1, 3, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vfnmsubps", 0x667c, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 0, 1, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0 }, - { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "bextr", 0x10, None, 1, 3, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vfnmsubps", 0x667c, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 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, 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, 1, 0, 1, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "blsi", 0xf3, 0x3, 1, 2, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vfnmsubsd", 0x667f, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 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, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "blsmsk", 0xf3, 0x2, 1, 2, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 2, 2, 2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfnmsubsd", 0x667f, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 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, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "blsr", 0xf3, 0x1, 1, 2, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, 2, 2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfnmsubss", 0x667e, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 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, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "tzcnt", 0xf30fbc, None, 2, 2, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 2, 2, 2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfnmsubss", 0x667e, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 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 }, - { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "blcfill", 0x01, 0x1, 1, 2, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, 2, 2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfrczpd", 0x81, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, - 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "blci", 0x02, 0x6, 1, 2, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 4, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vfrczps", 0x80, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, - 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "blcic", 0x01, 0x5, 1, 2, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 4, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vfrczsd", 0x83, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, - 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "blcmsk", 0x02, 0x1, 1, 2, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 4, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vfrczss", 0x82, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, - 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "blcs", 0x01, 0x3, 1, 2, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 4, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcmov", 0xa2, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, - 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "blsfill", 0x01, 0x2, 1, 2, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 3, 2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vpcmov", 0xa2, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, - 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "blsic", 0x01, 0x6, 1, 2, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vpcomb", 0xcc | 0x00 | 0, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, - 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "t1mskc", 0x01, 0x7, 1, 2, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcomw", 0xcc | 0x00 | 1, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, - 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "tzmsk", 0x01, 0x4, 1, 2, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcomd", 0xcc | 0x00 | 2, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, - 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "prefetch", 0xf0d, 0x0, 2, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcomq", 0xcc | 0x00 | 3, None, 1, 4, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, - { "prefetchw", 0xf0d, 0x1, 2, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcomub", 0xcc | 0x20 | 0, None, 1, 4, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, - { "femms", 0xf0e, None, 2, 0, - { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcomuw", 0xcc | 0x20 | 1, None, 1, 4, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, - { "pavgusb", 0xf0f, 0xbf, 2, 2, - { { 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcomud", 0xcc | 0x20 | 2, None, 1, 4, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 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 }, - { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 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 } } } }, - { "pf2id", 0xf0f, 0x1d, 2, 2, - { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcomuq", 0xcc | 0x20 | 3, None, 1, 4, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 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 }, - { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 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 } } } }, - { "pf2iw", 0xf0f, 0x1c, 2, 2, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcomltb", 0xcc | 0x00 | 0, 0, 1, 3, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 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 }, - { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 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 } } } }, - { "pfacc", 0xf0f, 0xae, 2, 2, - { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcomltw", 0xcc | 0x00 | 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcomltd", 0xcc | 0x00 | 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 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 }, - { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 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 } } } }, - { "pfadd", 0xf0f, 0x9e, 2, 2, - { { 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcomltq", 0xcc | 0x00 | 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 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 }, - { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 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 } } } }, - { "pfcmpeq", 0xf0f, 0xb0, 2, 2, - { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcomltub", 0xcc | 0x20 | 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 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 }, - { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 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 } } } }, - { "pfcmpge", 0xf0f, 0x90, 2, 2, - { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcomltuw", 0xcc | 0x20 | 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcomltud", 0xcc | 0x20 | 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 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 }, - { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 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 } } } }, - { "pfcmpgt", 0xf0f, 0xa0, 2, 2, - { { 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcomltuq", 0xcc | 0x20 | 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 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 }, - { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 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 } } } }, - { "pfmax", 0xf0f, 0xa4, 2, 2, - { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcomleb", 0xcc | 0x00 | 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 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 }, - { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 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 } } } }, - { "pfmin", 0xf0f, 0x94, 2, 2, - { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcomlew", 0xcc | 0x00 | 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcomled", 0xcc | 0x00 | 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 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 }, - { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 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 } } } }, - { "pfmul", 0xf0f, 0xb4, 2, 2, - { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 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 }, - { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 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 } } } }, - { "pfnacc", 0xf0f, 0x8a, 2, 2, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcomleq", 0xcc | 0x00 | 3, 1, 1, 3, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 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 }, - { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 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 } } } }, - { "pfpnacc", 0xf0f, 0x8e, 2, 2, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcomleub", 0xcc | 0x20 | 0, 1, 1, 3, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 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 }, - { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 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 } } } }, - { "pfrcp", 0xf0f, 0x96, 2, 2, - { { 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcomleuw", 0xcc | 0x20 | 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 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 }, - { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 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 } } } }, - { "pfrcpit1", 0xf0f, 0xa6, 2, 2, - { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcomleud", 0xcc | 0x20 | 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 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 }, - { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 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 } } } }, - { "pfrcpit2", 0xf0f, 0xb6, 2, 2, - { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcomleuq", 0xcc | 0x20 | 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcomgtb", 0xcc | 0x00 | 0, 2, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 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 }, - { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 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 } } } }, - { "pfrsqit1", 0xf0f, 0xa7, 2, 2, - { { 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcomgtw", 0xcc | 0x00 | 1, 2, 1, 3, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 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 }, - { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 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 } } } }, - { "pfrsqrt", 0xf0f, 0x97, 2, 2, - { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcomgtd", 0xcc | 0x00 | 2, 2, 1, 3, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 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 }, - { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 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 } } } }, - { "pfsub", 0xf0f, 0x9a, 2, 2, - { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcomgtq", 0xcc | 0x00 | 3, 2, 1, 3, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcomgtub", 0xcc | 0x20 | 0, 2, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 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 }, - { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 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 } } } }, - { "pfsubr", 0xf0f, 0xaa, 2, 2, - { { 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcomgtuw", 0xcc | 0x20 | 1, 2, 1, 3, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 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 }, - { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 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 } } } }, - { "pi2fd", 0xf0f, 0xd, 2, 2, - { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcomgtud", 0xcc | 0x20 | 2, 2, 1, 3, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 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 }, - { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 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 } } } }, - { "pi2fw", 0xf0f, 0xc, 2, 2, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcomgtuq", 0xcc | 0x20 | 3, 2, 1, 3, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 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 }, - { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 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 } } } }, - { "pmulhrw", 0xf0f, 0xb7, 2, 2, - { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcomgeb", 0xcc | 0x00 | 0, 3, 1, 3, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 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 }, - { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 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 } } } }, - { "pswapd", 0xf0f, 0xbb, 2, 2, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcomgew", 0xcc | 0x00 | 1, 3, 1, 3, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 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 }, - { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 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 } } } }, - { "syscall", 0xf05, None, 2, 0, - { { 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcomged", 0xcc | 0x00 | 2, 3, 1, 3, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, - { "sysret", 0xf07, None, 2, 0, - { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcomgeq", 0xcc | 0x00 | 3, 3, 1, 3, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, - { "swapgs", 0xf01f8, None, 3, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcomgeub", 0xcc | 0x20 | 0, 3, 1, 3, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 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 } } } }, - { "rdtscp", 0xf01f9, None, 3, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcomgeuw", 0xcc | 0x20 | 1, 3, 1, 3, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, - { "clgi", 0xf01dd, None, 3, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcomgeud", 0xcc | 0x20 | 2, 3, 1, 3, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, - { "invlpga", 0xf01df, None, 3, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcomgeuq", 0xcc | 0x20 | 3, 3, 1, 3, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, - { "invlpga", 0xf01df, None, 3, 2, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcomeqb", 0xcc | 0x00 | 0, 4, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 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, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, - { "invlpga", 0xf01df, None, 3, 2, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcomeqw", 0xcc | 0x00 | 1, 4, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 1, 1, 1, 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, 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, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, - { "skinit", 0xf01de, None, 3, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcomeqd", 0xcc | 0x00 | 2, 4, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, - { "skinit", 0xf01de, None, 3, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcomeqq", 0xcc | 0x00 | 3, 4, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, - { "stgi", 0xf01dc, None, 3, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcomequb", 0xcc | 0x20 | 0, 4, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, - { "vmload", 0xf01da, None, 3, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcomequw", 0xcc | 0x20 | 1, 4, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, - { "vmload", 0xf01da, None, 3, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcomequd", 0xcc | 0x20 | 2, 4, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 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 } } } }, - { "vmload", 0xf01da, None, 3, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcomequq", 0xcc | 0x20 | 3, 4, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 1, 1, 1, 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, 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 } } } }, - { "vmmcall", 0xf01d9, None, 3, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcomneqb", 0xcc | 0x00 | 0, 5, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, - { "vmrun", 0xf01d8, None, 3, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcomneqw", 0xcc | 0x00 | 1, 5, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, - { "vmrun", 0xf01d8, None, 3, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcomneqd", 0xcc | 0x00 | 2, 5, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 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 } } } }, - { "vmrun", 0xf01d8, None, 3, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcomneqq", 0xcc | 0x00 | 3, 5, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 1, 1, 1, 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, 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 } } } }, - { "vmsave", 0xf01db, None, 3, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcomnequb", 0xcc | 0x20 | 0, 5, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, - { "vmsave", 0xf01db, None, 3, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcomnequw", 0xcc | 0x20 | 1, 5, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 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 } } } }, - { "vmsave", 0xf01db, None, 3, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcomnequd", 0xcc | 0x20 | 2, 5, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 1, 1, 1, 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, 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 } } } }, - { "movntsd", 0xf20f2b, None, 2, 2, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcomnequq", 0xcc | 0x20 | 3, 5, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, - { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, - { "movntss", 0xf30f2b, None, 2, 2, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcomfalseb", 0xcc | 0x00 | 0, 6, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, - { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, - { "extrq", 0x660f78, 0x0, 2, 3, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcomfalsew", 0xcc | 0x00 | 1, 6, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "extrq", 0x660f79, None, 2, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcomfalsed", 0xcc | 0x00 | 2, 6, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "insertq", 0xf20f79, None, 2, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcomfalseq", 0xcc | 0x00 | 3, 6, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "insertq", 0xf20f78, None, 2, 4, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcomfalseub", 0xcc | 0x20 | 0, 6, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 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 } } } }, - { "popcnt", 0xf30fb8, None, 2, 2, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcomfalseuw", 0xcc | 0x20 | 1, 6, 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, 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, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "lzcnt", 0xf30fbd, None, 2, 2, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcomfalseud", 0xcc | 0x20 | 2, 6, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 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 }, - { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "xstore-rng", 0xfa7c0, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcomfalseuq", 0xcc | 0x20 | 3, 6, 1, 3, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, - { "xcrypt-ecb", 0xf30fa7c8, None, 3, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcomtrueb", 0xcc | 0x00 | 0, 7, 1, 3, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, - { "xcrypt-cbc", 0xf30fa7d0, None, 3, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcomtruew", 0xcc | 0x00 | 1, 7, 1, 3, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, - { "xcrypt-ctr", 0xf30fa7d8, None, 3, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcomtrued", 0xcc | 0x00 | 2, 7, 1, 3, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, - { "xcrypt-cfb", 0xf30fa7e0, None, 3, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcomtrueq", 0xcc | 0x00 | 3, 7, 1, 3, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, - { "xcrypt-ofb", 0xf30fa7e8, None, 3, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcomtrueub", 0xcc | 0x20 | 0, 7, 1, 3, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, - { "montmul", 0xf30fa6c0, None, 3, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcomtrueuw", 0xcc | 0x20 | 1, 7, 1, 3, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, - { "xsha1", 0xf30fa6c8, None, 3, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcomtrueud", 0xcc | 0x20 | 2, 7, 1, 3, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, - { "xsha256", 0xf30fa6d0, None, 3, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpcomtrueuq", 0xcc | 0x20 | 3, 7, 1, 3, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, - { "xstorerng", 0xfa7c0, None, 3, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpermil2pd", 0x6649, None, 1, 5, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, - { "xcryptecb", 0xf30fa7c8, None, 3, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vpermil2pd", 0x6649, None, 1, 5, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, - { "xcryptcbc", 0xf30fa7d0, None, 3, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vpermil2ps", 0x6648, None, 1, 5, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, - { "xcryptctr", 0xf30fa7d8, None, 3, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vpermil2ps", 0x6648, None, 1, 5, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, - { "xcryptcfb", 0xf30fa7e0, None, 3, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0 } } } }, + { "vphaddbd", 0xc2, None, 1, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, - { "xcryptofb", 0xf30fa7e8, None, 3, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 4, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vphaddbq", 0xc3, None, 1, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, - { "xstore", 0xfa7c0, None, 3, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 4, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vphaddbw", 0xc1, None, 1, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, - { "adcx", 0x660f38f6, None, 3, 2, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 4, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vphadddq", 0xcb, None, 1, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 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 }, - { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "adox", 0xf30f38f6, None, 3, 2, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 4, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vphaddubd", 0xd2, None, 1, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 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 }, - { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "rdseed", 0xfc7, 0x7, 2, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 4, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vphaddubq", 0xd3, None, 1, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "clac", 0xf01ca, None, 3, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 4, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vphaddubw", 0xd1, None, 1, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, - { "stac", 0xf01cb, None, 3, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 4, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vphaddudq", 0xdb, None, 1, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, - { "bnd", 0xf2, None, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 4, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vphadduwd", 0xd6, None, 1, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, - { "bndmk", 0xf30f1b, None, 2, 2, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 4, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vphadduwq", 0xd7, None, 1, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 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 } } } }, - { "bndmov", 0x660f1a, None, 2, 2, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 4, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vphaddwd", 0xc6, None, 1, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 9, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 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 } } } }, - { "bndcl", 0xf30f1a, None, 2, 2, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 4, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vphaddwq", 0xc7, None, 1, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 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 } } } }, - { "bndcl", 0xf30f1a, None, 2, 2, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 4, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vphsubbw", 0xe1, None, 1, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 1, 1, 1, 1, 1, 1, 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 }, - { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 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 } } } }, - { "bndcu", 0xf20f1a, None, 2, 2, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 4, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vphsubdq", 0xe3, None, 1, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 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 } } } }, - { "bndcu", 0xf20f1a, None, 2, 2, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 4, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vphsubwd", 0xe2, None, 1, 2, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 1, 1, 1, 1, 1, 1, 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 }, - { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 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 } } } }, - { "bndcn", 0xf20f1b, None, 2, 2, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 4, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpmacsdd", 0x9e, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 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 } } } }, - { "bndcn", 0xf20f1b, None, 2, 2, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 3, 2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpmacsdqh", 0x9f, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 1, 1, 1, 1, 1, 1, 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 }, - { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 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 } } } }, - { "bndstx", 0x0f1b, None, 2, 2, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 3, 2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpmacsdql", 0x97, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, - { "bndldx", 0x0f1a, None, 2, 2, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 3, 2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpmacssdd", 0x8e, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 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 } } } }, - { "sha1rnds4", 0xf3acc, None, 3, 3, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 3, 2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpmacssdqh", 0x8f, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 3, 2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "sha1nexte", 0xf38c8, None, 3, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpmacssdql", 0x87, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 3, 2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "sha1msg1", 0xf38c9, None, 3, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpmacsswd", 0x86, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 3, 2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "sha1msg2", 0xf38ca, None, 3, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpmacssww", 0x85, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 3, 2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "sha256rnds2", 0xf38cb, None, 3, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpmacswd", 0x96, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 3, 2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "sha256rnds2", 0xf38cb, None, 3, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpmacsww", 0x95, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 3, 2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "sha256msg1", 0xf38cc, None, 3, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpmadcsswd", 0xa6, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 3, 2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "sha256msg2", 0xf38cd, None, 3, 2, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpmadcswd", 0xb6, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 3, 2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "kandnw", 0x42, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpperm", 0xa3, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 1, - 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, - 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 } } } }, - { "kandw", 0x41, None, 1, 3, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 3, 2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpperm", 0xa3, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 1, - 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, - 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 } } } }, - { "korw", 0x45, None, 1, 3, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vprotb", 0x90 | 0, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 1, - 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, - 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 } } } }, - { "kxnorw", 0x46, None, 1, 3, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 4, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vprotb", 0x90 | 0, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 1, - 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, - 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 } } } }, - { "kxorw", 0x47, None, 1, 3, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 4, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vprotb", 0xc0 | 0, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 1, - 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, - 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 } } } }, - { "kmovw", 0x90, None, 1, 2, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 3, 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 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vprotw", 0x90 | 1, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 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 }, - { { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "kmovw", 0x91, None, 1, 2, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 4, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vprotw", 0x90 | 1, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 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 }, - { { { 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, 1, 0, 1, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, - { "kmovw", 0x92, None, 1, 2, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 4, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vprotw", 0xc0 | 1, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 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 }, - { { { 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 } }, - { { 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 } } } }, - { "knotw", 0x44, None, 1, 2, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 3, 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 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vprotd", 0x90 | 2, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 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 }, - { { { 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "kortestw", 0x98, None, 1, 2, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 4, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vprotd", 0x90 | 2, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 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 }, - { { { 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "kshiftlw", 0x6632, None, 1, 3, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 4, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vprotd", 0xc0 | 2, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, - 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, 1, 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, 1, 0, 1, 3, 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 } }, - { { 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "kshiftrw", 0x6630, None, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vprotq", 0x90 | 3, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 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, - 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 } } } }, - { "kunpckbw", 0x664B, None, 1, 3, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 4, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vprotq", 0x90 | 3, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 1, - 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, - 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 } } } }, - { "valignd", 0x6603, None, 1, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 4, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vprotq", 0xc0 | 3, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, - 2, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 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, 1, 0, 1, 3, 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 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vpternlogd", 0x6625, None, 1, 4, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpshab", 0x98 | 0, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, - 2, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 4, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "valignq", 0x6603, None, 1, 4, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpshab", 0x98 | 0, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 2, - 2, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 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, 1, 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, 1, 0, 2, 4, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 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, 1, 1, 0, 0 } } } }, - { "vpternlogq", 0x6625, None, 1, 4, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpshaw", 0x98 | 1, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 2, - 2, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 4, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vblendmpd", 0x6665, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpshaw", 0x98 | 1, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 2, - 1, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 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, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 4, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 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, 1, 1, 0, 0 } } } }, - { "vpblendmq", 0x6664, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpshad", 0x98 | 2, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 2, - 1, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 4, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vpermi2pd", 0x6677, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpshad", 0x98 | 2, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 2, - 1, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 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, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 4, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 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, 1, 1, 0, 0 } } } }, - { "vpermi2q", 0x6676, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpshaq", 0x98 | 3, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 2, - 1, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 4, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vpermt2pd", 0x667F, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpshaq", 0x98 | 3, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 2, - 1, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 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, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 4, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 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, 1, 1, 0, 0 } } } }, - { "vpermt2q", 0x667E, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpshlb", 0x94 | 0, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 2, - 1, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 4, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vpmaxsq", 0x663D, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpshlb", 0x94 | 0, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 2, - 1, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 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, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 4, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 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, 1, 1, 0, 0 } } } }, - { "vpmaxuq", 0x663F, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpshlw", 0x94 | 1, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 2, - 1, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 4, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vpminsq", 0x6639, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpshlw", 0x94 | 1, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 2, - 1, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 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, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 4, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 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, 1, 1, 0, 0 } } } }, - { "vpminuq", 0x663B, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpshld", 0x94 | 2, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 2, - 1, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 4, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vprolvq", 0x6615, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpshld", 0x94 | 2, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 2, - 1, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 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, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 4, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 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, 1, 1, 0, 0 } } } }, - { "vprorvq", 0x6614, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpshlq", 0x94 | 3, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 2, - 1, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 4, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vpsravq", 0x6646, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "vpshlq", 0x94 | 3, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 2, - 1, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 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, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 4, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 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, 1, 1, 0, 0 } } } }, - { "vblendmps", 0x6665, None, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "llwpcb", 0x12, 0x0, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, - 1, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vpblendmd", 0x6664, None, 1, 3, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 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 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "slwpcb", 0x12, 0x1, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, - 1, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vpermi2d", 0x6676, None, 1, 3, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 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 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "lwpval", 0x12, 0x1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, - 1, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vpermi2ps", 0x6677, None, 1, 3, + 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 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, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 1, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "lwpins", 0x12, 0x0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, - 1, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vpermt2d", 0x667E, None, 1, 3, + 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 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, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 1, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "andn", 0xf2, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, - 1, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vpermt2ps", 0x667F, None, 1, 3, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "bextr", 0xf7, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, - 1, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vprolvd", 0x6615, None, 1, 3, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 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, 0, 1, 0, 0, 0, 0, 0 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "bextr", 0x10, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 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, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "blsi", 0xf3, 0x3, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vprorvd", 0x6614, None, 1, 3, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 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, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "blsmsk", 0xf3, 0x2, 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, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 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, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "blsr", 0xf3, 0x1, 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, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 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, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "tzcnt", 0xf30fbc, None, 2, 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, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 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, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "blcfill", 0x01, 0x1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 4, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "blci", 0x02, 0x6, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "vbroadcastf32x4", 0x661A, None, 1, 2, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 4, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "blcic", 0x01, 0x5, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 4, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "blcmsk", 0x02, 0x1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 1, 0, 0 } } } }, - { "vbroadcasti32x4", 0x665A, None, 1, 2, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 4, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "blcs", 0x01, 0x3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 4, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "blsfill", 0x01, 0x2, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 1, 0, 0 } } } }, - { "vbroadcastf64x4", 0x661B, None, 1, 2, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 4, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "blsic", 0x01, 0x6, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 4, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "t1mskc", 0x01, 0x7, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 1, 0, 0, 0, 0, 1, 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 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 } } } }, - { "vbroadcasti64x4", 0x665B, None, 1, 2, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 4, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "tzmsk", 0x01, 0x4, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 4, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "prefetch", 0xf0d, 0x0, 2, 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, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 1, 0, 0, 0, 0, 1, 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 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 } } } }, - { "vcmpeq_oqpd", 0x66C2, 0, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "prefetchw", 0xf0d, 0x1, 2, 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, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "femms", 0xf0e, None, 2, 0, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "pavgusb", 0xf0f, 0xbf, 2, 2, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0 }, + { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, + { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "pf2id", 0xf0f, 0x1d, 2, 2, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0 }, + { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, + { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "pf2iw", 0xf0f, 0x1c, 2, 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, 1, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, - { { 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 } } } }, - { "vcmpeq_oqpd", 0x66C2, 0, 1, 4, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0 }, + { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, + { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "pfacc", 0xf0f, 0xae, 2, 2, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0 }, + { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, + { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "pfadd", 0xf0f, 0x9e, 2, 2, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0 }, + { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, + { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "pfcmpeq", 0xf0f, 0xb0, 2, 2, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0 }, + { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, + { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "pfcmpge", 0xf0f, 0x90, 2, 2, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0 }, + { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, + { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "pfcmpgt", 0xf0f, 0xa0, 2, 2, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0 }, + { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, + { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "pfmax", 0xf0f, 0xa4, 2, 2, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0 }, + { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, + { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "pfmin", 0xf0f, 0x94, 2, 2, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0 }, + { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, + { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "pfmul", 0xf0f, 0xb4, 2, 2, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0 }, + { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, + { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "pfnacc", 0xf0f, 0x8a, 2, 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, 1, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 1, 2, 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 } }, - { { 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, - 0, 0, 0, 1, 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 } } } }, - { "vcmpfalse_oqpd", 0x66C2, 11, 1, 3, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0 }, + { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, + { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "pfpnacc", 0xf0f, 0x8e, 2, 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, 1, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, - { { 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 } } } }, - { "vcmpfalse_oqpd", 0x66C2, 11, 1, 4, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0 }, + { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, + { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "pfrcp", 0xf0f, 0x96, 2, 2, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0 }, + { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, + { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "pfrcpit1", 0xf0f, 0xa6, 2, 2, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0 }, + { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, + { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "pfrcpit2", 0xf0f, 0xb6, 2, 2, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0 }, + { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, + { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "pfrsqit1", 0xf0f, 0xa7, 2, 2, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0 }, + { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, + { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "pfrsqrt", 0xf0f, 0x97, 2, 2, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0 }, + { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, + { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "pfsub", 0xf0f, 0x9a, 2, 2, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0 }, + { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, + { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "pfsubr", 0xf0f, 0xaa, 2, 2, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0 }, + { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, + { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "pi2fd", 0xf0f, 0xd, 2, 2, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0 }, + { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, + { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "pi2fw", 0xf0f, 0xc, 2, 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, 1, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 1, 2, 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 } }, - { { 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, - 0, 0, 0, 1, 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 } } } }, - { "vcmpge_ospd", 0x66C2, 13, 1, 3, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0 }, + { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, + { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "pmulhrw", 0xf0f, 0xb7, 2, 2, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0 }, + { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, + { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "pswapd", 0xf0f, 0xbb, 2, 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, 1, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0 }, + { { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, + { { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "syscall", 0xf05, None, 2, 0, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, - { { 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 } } } }, - { "vcmpge_ospd", 0x66C2, 13, 1, 4, - { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "sysret", 0xf07, None, 2, 0, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 1, 2, 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 } }, - { { 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, - 0, 0, 0, 1, 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 } } } }, - { "vcmpgt_ospd", 0x66C2, 14, 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, 1, 1, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "swapgs", 0xf01f8, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, - { { 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 } } } }, - { "vcmpgt_ospd", 0x66C2, 14, 1, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "rdtscp", 0xf01f9, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 1, 2, 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 } }, - { { 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, - 0, 0, 0, 1, 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 } } } }, - { "vcmple_ospd", 0x66C2, 2, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "clgi", 0xf01dd, None, 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, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, - { { 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 } } } }, - { "vcmple_ospd", 0x66C2, 2, 1, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "invlpga", 0xf01df, None, 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, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 1, 2, 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 } }, - { { 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, - 0, 0, 0, 1, 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 } } } }, - { "vcmplt_ospd", 0x66C2, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "invlpga", 0xf01df, None, 3, 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, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, - { { 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 } } } }, - { "vcmplt_ospd", 0x66C2, 1, 1, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "skinit", 0xf01de, None, 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, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 1, 2, 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 } }, - { { 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, - 0, 0, 0, 1, 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 } } } }, - { "vcmpneq_uqpd", 0x66C2, 4, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "skinit", 0xf01de, None, 3, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, - { { 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 } } } }, - { "vcmpneq_uqpd", 0x66C2, 4, 1, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "stgi", 0xf01dc, None, 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, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 1, 2, 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 } }, - { { 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, - 0, 0, 0, 1, 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 } } } }, - { "vcmpnge_uspd", 0x66C2, 9, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vmgexit", 0xf30f01d9, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, - { { 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 } } } }, - { "vcmpnge_uspd", 0x66C2, 9, 1, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vmload", 0xf01da, None, 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, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 1, 2, 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 } }, - { { 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, - 0, 0, 0, 1, 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 } } } }, - { "vcmpngt_uspd", 0x66C2, 10, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vmload", 0xf01da, None, 3, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, - { { 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 } } } }, - { "vcmpngt_uspd", 0x66C2, 10, 1, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vmmcall", 0xf01d9, None, 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, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 1, 2, 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 } }, - { { 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, - 0, 0, 0, 1, 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 } } } }, - { "vcmpnle_uspd", 0x66C2, 6, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vmrun", 0xf01d8, None, 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, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, - { { 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 } } } }, - { "vcmpnle_uspd", 0x66C2, 6, 1, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vmrun", 0xf01d8, None, 3, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 1, 2, 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 } }, - { { 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, - 0, 0, 0, 1, 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 } } } }, - { "vcmpnlt_uspd", 0x66C2, 5, 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, 1, 1, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vmsave", 0xf01db, None, 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, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, - { { 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 } } } }, - { "vcmpnlt_uspd", 0x66C2, 5, 1, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vmsave", 0xf01db, None, 3, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 1, 2, 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 } }, - { { 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, - 0, 0, 0, 1, 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 } } } }, - { "vcmpord_qpd", 0x66C2, 7, 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, 1, 1, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "movntsd", 0xf20f2b, None, 2, 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, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, - { { 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 } } } }, - { "vcmpord_qpd", 0x66C2, 7, 1, 4, + 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } } } }, + { "movntss", 0xf30f2b, None, 2, 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, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 1, 2, 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 } }, - { { 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, - 0, 0, 0, 1, 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 } } } }, - { "vcmptrue_uqpd", 0x66C2, 15, 1, 3, + 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 1, 0 } } } }, + { "extrq", 0x660f78, 0x0, 2, 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, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, - { { 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 } } } }, - { "vcmptrue_uqpd", 0x66C2, 15, 1, 4, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "extrq", 0x660f79, None, 2, 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, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 1, 2, 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 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 1, 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 } } } }, - { "vcmpunord_qpd", 0x66C2, 3, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "insertq", 0xf20f79, None, 2, 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, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 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 } } } }, - { "vcmpunord_qpd", 0x66C2, 3, 1, 4, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "insertq", 0xf20f78, None, 2, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 1, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 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, 0, 0, 1, 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 } } } }, - { "vcmpeq_oqps", 0xC2, 0, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "lzcnt", 0xf30fbd, None, 2, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, - { { 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 } } } }, - { "vcmpeq_oqps", 0xC2, 0, 1, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 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, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "popcnt", 0xf30fb8, None, 2, 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, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 1, 2, 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 } }, - { { 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, - 0, 0, 0, 1, 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 } } } }, - { "vcmpfalse_oqps", 0xC2, 11, 1, 3, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "xstore-rng", 0xfa7c0, None, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, - { { 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 } } } }, - { "vcmpfalse_oqps", 0xC2, 11, 1, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "xcrypt-ecb", 0xf30fa7c8, None, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 1, 2, 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 } }, - { { 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, - 0, 0, 0, 1, 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 } } } }, - { "vcmpge_osps", 0xC2, 13, 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, 1, 1, 1, 1, 1, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "xcrypt-cbc", 0xf30fa7d0, None, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, - { { 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 } } } }, - { "vcmpge_osps", 0xC2, 13, 1, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "xcrypt-ctr", 0xf30fa7d8, None, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 1, 2, 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 } }, - { { 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, - 0, 0, 0, 1, 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 } } } }, - { "vcmpgt_osps", 0xC2, 14, 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, 1, 1, 1, 1, 1, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "xcrypt-cfb", 0xf30fa7e0, None, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, - { { 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 } } } }, - { "vcmpgt_osps", 0xC2, 14, 1, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "xcrypt-ofb", 0xf30fa7e8, None, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 1, 2, 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 } }, - { { 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, - 0, 0, 0, 1, 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 } } } }, - { "vcmple_osps", 0xC2, 2, 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, 1, 1, 1, 1, 1, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "montmul", 0xf30fa6c0, None, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, - { { 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 } } } }, - { "vcmple_osps", 0xC2, 2, 1, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "xsha1", 0xf30fa6c8, None, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 1, 2, 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 } }, - { { 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, - 0, 0, 0, 1, 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 } } } }, - { "vcmplt_osps", 0xC2, 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, 1, 1, 1, 1, 1, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "xsha256", 0xf30fa6d0, None, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, - { { 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 } } } }, - { "vcmplt_osps", 0xC2, 1, 1, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "xstorerng", 0xfa7c0, None, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 1, 2, 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 } }, - { { 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, - 0, 0, 0, 1, 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 } } } }, - { "vcmpneq_uqps", 0xC2, 4, 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, 1, 1, 1, 1, 1, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "xcryptecb", 0xf30fa7c8, None, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, - { { 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 } } } }, - { "vcmpneq_uqps", 0xC2, 4, 1, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "xcryptcbc", 0xf30fa7d0, None, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 1, 2, 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 } }, - { { 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, - 0, 0, 0, 1, 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 } } } }, - { "vcmpnge_usps", 0xC2, 9, 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, 1, 1, 1, 1, 1, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "xcryptctr", 0xf30fa7d8, None, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, - { { 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 } } } }, - { "vcmpnge_usps", 0xC2, 9, 1, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "xcryptcfb", 0xf30fa7e0, None, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 1, 2, 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 } }, - { { 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, - 0, 0, 0, 1, 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 } } } }, - { "vcmpngt_usps", 0xC2, 10, 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, 1, 1, 1, 1, 1, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "xcryptofb", 0xf30fa7e8, None, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, - { { 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 } } } }, - { "vcmpngt_usps", 0xC2, 10, 1, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "xstore", 0xfa7c0, None, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 1, 2, 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 } }, - { { 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, - 0, 0, 0, 1, 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 } } } }, - { "vcmpnle_usps", 0xC2, 6, 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, 1, 1, 1, 1, 1, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "adcx", 0x660f38f6, None, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, - { { 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 } } } }, - { "vcmpnle_usps", 0xC2, 6, 1, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 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, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "adox", 0xf30f38f6, None, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 1, 2, 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 } }, - { { 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, - 0, 0, 0, 1, 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 } } } }, - { "vcmpnlt_usps", 0xC2, 5, 1, 3, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 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, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "rdseed", 0xfc7, 0x7, 2, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, - { { 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 } } } }, - { "vcmpnlt_usps", 0xC2, 5, 1, 4, + 0, 0, 0, 0, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "clac", 0xf01ca, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 1, 2, 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 } }, - { { 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, - 0, 0, 0, 1, 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 } } } }, - { "vcmpord_qps", 0xC2, 7, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "stac", 0xf01cb, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, - { { 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 } } } }, - { "vcmpord_qps", 0xC2, 7, 1, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "bnd", 0xf2, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 1, 2, 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 } }, - { { 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, - 0, 0, 0, 1, 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 } } } }, - { "vcmptrue_uqps", 0xC2, 15, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "bndmk", 0xf30f1b, None, 2, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, - { { 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 } } } }, - { "vcmptrue_uqps", 0xC2, 15, 1, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "bndmov", 0x660f1a, None, 2, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 1, 2, 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 } }, - { { 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, - 0, 0, 0, 1, 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 } } } }, - { "vcmpunord_qps", 0xC2, 3, 1, 3, + 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 9, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, + { { 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "bndcl", 0xf30f1a, None, 2, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, - { { 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 } } } }, - { "vcmpunord_qps", 0xC2, 3, 1, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "bndcl", 0xf30f1a, None, 2, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 1, 2, 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 } }, - { { 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, - 0, 0, 0, 1, 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 } } } }, - { "vcmpeq_oqsd", 0xF2C2, 0, 1, 3, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 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 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "bndcu", 0xf20f1a, None, 2, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 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, - 0, 1, 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 } } } }, - { "vcmpeq_oqsd", 0xF2C2, 0, 1, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "bndcu", 0xf20f1a, None, 2, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 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 } }, - { { 7, 0, 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 } }, - { { 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 } } } }, - { "vcmpfalse_oqsd", 0xF2C2, 11, 1, 3, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 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 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "bndcn", 0xf20f1b, None, 2, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 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, - 0, 1, 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 } } } }, - { "vcmpfalse_oqsd", 0xF2C2, 11, 1, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "bndcn", 0xf20f1b, None, 2, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 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 } }, - { { 7, 0, 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 } }, - { { 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 } } } }, - { "vcmpge_ossd", 0xF2C2, 13, 1, 3, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 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 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "bndstx", 0x0f1b, None, 2, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 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, - 0, 1, 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 } } } }, - { "vcmpge_ossd", 0xF2C2, 13, 1, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "bndldx", 0x0f1a, None, 2, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 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 } }, - { { 7, 0, 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 } }, - { { 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 } } } }, - { "vcmpgt_ossd", 0xF2C2, 14, 1, 3, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "sha1rnds4", 0xf3acc, None, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, - { { 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 } } } }, - { "vcmpgt_ossd", 0xF2C2, 14, 1, 4, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "sha1nexte", 0xf38c8, None, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 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 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 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 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, - { { 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 } } } }, - { "vcmple_ossd", 0xF2C2, 2, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "sha1msg1", 0xf38c9, None, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, - { { 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 } } } }, - { "vcmple_ossd", 0xF2C2, 2, 1, 4, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "sha1msg2", 0xf38ca, None, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 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 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 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 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, - { { 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 } } } }, - { "vcmplt_ossd", 0xF2C2, 1, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "sha256rnds2", 0xf38cb, None, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, - { { 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 } } } }, - { "vcmplt_ossd", 0xF2C2, 1, 1, 4, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "sha256rnds2", 0xf38cb, None, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 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 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 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 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, - { { 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 } } } }, - { "vcmpneq_uqsd", 0xF2C2, 4, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "sha256msg1", 0xf38cc, None, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, - { { 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 } } } }, - { "vcmpneq_uqsd", 0xF2C2, 4, 1, 4, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "sha256msg2", 0xf38cd, None, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 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 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 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 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, - { { 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 } } } }, - { "vcmpnge_ussd", 0xF2C2, 9, 1, 3, + 0, 1, 0, 0, 0, 0, 0 } } } }, + { "kandnw", 0x42, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 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, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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 } } } }, - { "vcmpnge_ussd", 0xF2C2, 9, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "kandw", 0x41, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 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 } }, - { { 7, 0, 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 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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 } } } }, - { "vcmpngt_ussd", 0xF2C2, 10, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "korw", 0x45, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 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, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpngt_ussd", 0xF2C2, 10, 1, 4, + 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 } } } }, + { "kxnorw", 0x46, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 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 } }, - { { 7, 0, 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 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpnle_ussd", 0xF2C2, 6, 1, 3, + 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 } } } }, + { "kxorw", 0x47, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 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, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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 } } } }, - { "vcmpnle_ussd", 0xF2C2, 6, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "kmovw", 0x90, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 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 } }, - { { 7, 0, 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 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 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 }, + { { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0 } }, { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpnlt_ussd", 0xF2C2, 5, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "kmovw", 0x91, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 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, - 0, 1, 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 } } } }, - { "vcmpnlt_ussd", 0xF2C2, 5, 1, 4, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 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 }, + { { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0 } } } }, + { "kmovw", 0x92, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 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 } }, - { { 7, 0, 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 } }, + 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, 1, 1, 1, 1, 1, 1, 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 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpord_qsd", 0xF2C2, 7, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "knotw", 0x44, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 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, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 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 }, + { { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpord_qsd", 0xF2C2, 7, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "kortestw", 0x98, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 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 } }, - { { 7, 0, 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 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 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 }, + { { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmptrue_uqsd", 0xF2C2, 15, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "kshiftlw", 0x6632, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 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, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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 } } } }, - { "vcmptrue_uqsd", 0xF2C2, 15, 1, 4, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "kshiftrw", 0x6630, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 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, - 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 } }, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpunord_qsd", 0xF2C2, 3, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "kunpckbw", 0x664B, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 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, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, - { "vcmpunord_qsd", 0xF2C2, 3, 1, 4, + 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 } } } }, + { "valignd", 0x6603, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vcmpeq_oqss", 0xF3C2, 0, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpternlogd", 0x6625, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vcmpeq_oqss", 0xF3C2, 0, 1, 4, + 0, 1, 1, 1, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "valignq", 0x6603, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vcmpfalse_oqss", 0xF3C2, 11, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpternlogq", 0x6625, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vcmpfalse_oqss", 0xF3C2, 11, 1, 4, + 0, 1, 1, 1, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vblendmpd", 0x6665, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 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, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vcmpge_osss", 0xF3C2, 13, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpblendmq", 0x6664, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vcmpge_osss", 0xF3C2, 13, 1, 4, + 0, 1, 1, 1, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpermi2pd", 0x6677, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 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, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vcmpgt_osss", 0xF3C2, 14, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpermi2q", 0x6676, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vcmpgt_osss", 0xF3C2, 14, 1, 4, + 0, 1, 1, 1, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpermt2pd", 0x667F, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 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, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vcmple_osss", 0xF3C2, 2, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpermt2q", 0x667E, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vcmple_osss", 0xF3C2, 2, 1, 4, + 0, 1, 1, 1, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpmaxsq", 0x663D, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 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, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vcmplt_osss", 0xF3C2, 1, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpmaxuq", 0x663F, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vcmplt_osss", 0xF3C2, 1, 1, 4, + 0, 1, 1, 1, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpminsq", 0x6639, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 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, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vcmpneq_uqss", 0xF3C2, 4, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpminuq", 0x663B, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vcmpneq_uqss", 0xF3C2, 4, 1, 4, + 0, 1, 1, 1, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vprolvq", 0x6615, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 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, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vcmpnge_usss", 0xF3C2, 9, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vprorvq", 0x6614, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vcmpnge_usss", 0xF3C2, 9, 1, 4, + 0, 1, 1, 1, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpsravq", 0x6646, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 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, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vcmpngt_usss", 0xF3C2, 10, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vblendmps", 0x6665, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vcmpngt_usss", 0xF3C2, 10, 1, 4, + 0, 1, 1, 1, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpblendmd", 0x6664, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 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, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vcmpnle_usss", 0xF3C2, 6, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpermi2d", 0x6676, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vcmpnle_usss", 0xF3C2, 6, 1, 4, + 0, 1, 1, 1, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpermi2ps", 0x6677, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 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, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vcmpnlt_usss", 0xF3C2, 5, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpermt2d", 0x667E, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vcmpnlt_usss", 0xF3C2, 5, 1, 4, + 0, 1, 1, 1, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vpermt2ps", 0x667F, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 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, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vcmpord_qss", 0xF3C2, 7, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vprolvd", 0x6615, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vcmpord_qss", 0xF3C2, 7, 1, 4, + 0, 1, 1, 1, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vprorvd", 0x6614, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 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, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vcmptrue_uqss", 0xF3C2, 15, 1, 3, + 0, 1, 1, 1, 0, 0, 0 } } } }, + { "vbroadcastf32x4", 0x661A, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 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, 1, 1, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, - { { 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 } } } }, - { "vcmptrue_uqss", 0xF3C2, 15, 1, 4, + 0, 0, 1, 1, 0, 0, 0 } } } }, + { "vbroadcasti32x4", 0x665A, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 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 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, - { { 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 } } } }, - { "vcmpunord_qss", 0xF3C2, 3, 1, 3, + 0, 0, 1, 1, 0, 0, 0 } } } }, + { "vbroadcastf64x4", 0x661B, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 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, 2, 1, 0, 0, + 0, 0, 1, 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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 } } } }, - { "vcmpunord_qss", 0xF3C2, 3, 1, 4, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vbroadcasti64x4", 0x665B, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 4, 2, 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 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, + 0, 0, 1, 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 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, 1, 0, 0, 0 } } } }, { "vcompresspd", 0x668A, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, + 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } } } }, + 0, 1, 1, 1, 0, 1, 0 } } } }, { "vcompressps", 0x668A, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } } } }, + 0, 1, 1, 1, 0, 1, 0 } } } }, { "vpcompressq", 0x668B, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, + 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } } } }, + 0, 1, 1, 1, 0, 1, 0 } } } }, { "vpcompressd", 0x668B, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } } } }, + 0, 1, 1, 1, 0, 1, 0 } } } }, { "vpscatterdq", 0x66A0, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 1, 0, 2, 0, 0, 1, 2, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 2, + 0, 0, 1, 2, 0, 0, 0, 3, 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, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "vpscatterdq", 0x66A0, None, 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, 1, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 1, 0, 1, 0, 0, 0, 2, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 1, + 0, 0, 0, 2, 0, 0, 0, 3, 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, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "vpscatterqq", 0x66A1, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 1, 0, 3, 0, 0, 1, 2, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 3, + 0, 0, 1, 2, 0, 0, 0, 3, 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, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "vpscatterqq", 0x66A1, None, 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, 1, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 1, 0, 1, 0, 0, 2, 2, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 1, + 0, 0, 2, 2, 0, 0, 0, 3, 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, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 0, 0, 0, 0, 0 } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "vpscatterqq", 0x66A1, None, 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, 1, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 1, 0, 2, 0, 0, 3, 2, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 2, + 0, 0, 3, 2, 0, 0, 0, 3, 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, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0 } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "vscatterdpd", 0x66A2, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 1, 0, 2, 0, 0, 1, 2, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 2, + 0, 0, 1, 2, 0, 0, 0, 3, 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, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "vscatterdpd", 0x66A2, None, 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, 1, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 1, 0, 1, 0, 0, 0, 2, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 1, + 0, 0, 0, 2, 0, 0, 0, 3, 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, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "vscatterqpd", 0x66A3, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 1, 0, 3, 0, 0, 1, 2, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 3, + 0, 0, 1, 2, 0, 0, 0, 3, 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, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "vscatterqpd", 0x66A3, None, 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, 1, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 1, 0, 1, 0, 0, 2, 2, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 1, + 0, 0, 2, 2, 0, 0, 0, 3, 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, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 0, 0, 0, 0, 0 } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "vscatterqpd", 0x66A3, None, 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, 1, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 1, 0, 2, 0, 0, 3, 2, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 2, + 0, 0, 3, 2, 0, 0, 0, 3, 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, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0 } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "vpscatterdd", 0x66A0, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 3, 0, 0, 1, 2, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 3, + 0, 0, 1, 2, 0, 0, 0, 2, 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, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "vpscatterdd", 0x66A0, None, 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, 1, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 1, 0, 0, 2, 2, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, + 0, 0, 2, 2, 0, 0, 0, 2, 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, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 0, 0, 0, 0, 0 } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "vpscatterdd", 0x66A0, None, 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, 1, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 2, 0, 0, 3, 2, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 2, + 0, 0, 3, 2, 0, 0, 0, 2, 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, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0 } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "vscatterdps", 0x66A2, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 3, 0, 0, 1, 2, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 3, + 0, 0, 1, 2, 0, 0, 0, 2, 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, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "vscatterdps", 0x66A2, None, 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, 1, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 1, 0, 0, 2, 2, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, + 0, 0, 2, 2, 0, 0, 0, 2, 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, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 0, 0, 0, 0, 0 } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "vscatterdps", 0x66A2, None, 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, 1, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 2, 0, 0, 3, 2, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 2, + 0, 0, 3, 2, 0, 0, 0, 2, 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, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0 } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "vcvtudq2pd", 0xF37A, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 1, 3, 3, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 1, 3, 3, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 1, 0, 1, 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 } } } }, - { "vcvtudq2pd", 0xF37A, None, 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, 1, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 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, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0 } } } }, + 0, 0, 0, 1, 0, 0, 0 } } } }, { "vcvtudq2pd", 0xF37A, None, 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, 1, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 2, 3, 3, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, + 0, 0, 2, 3, 3, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "vcvtudq2pd", 0xF37A, None, 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, 1, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 3, 3, 3, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, + 0, 0, 3, 3, 3, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, + 0, 0, 1, 0, 0, 0, 0 } } } }, { "vcvtps2udq", 0x79, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vcvtps2udq", 0x79, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 1, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 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, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } } } }, + 0, 0, 0, 1, 0, 0, 0 } } } }, { "vcvtpd2udq", 0x79, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 0, 0, 0, 0, 0, 1, 3, 4, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, + 0, 0, 1, 3, 4, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 1, 1, 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, - 0, 0, 1, 0, 0, 0 } } } }, + 0, 0, 1, 0, 0, 0, 0 } } } }, { "vcvtpd2udq", 0x79, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 0, 0, 0, 0, 0, 1, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, + 0, 0, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 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, 1, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vcvtpd2udq", 0x79, None, 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, 1, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 1, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "vcvtpd2udq", 0x79, None, 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, 1, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 1, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "vcvtsd2usi", 0xF279, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 4, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "vcvtsd2usi", 0xF279, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 4, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 4, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 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 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "vcvtusi2sd", 0xF27B, None, 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, 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, 1, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, - 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 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, 1, 0, 1, 1, 0, 1, 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, 4, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 1, 0, 0 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "vcvtusi2sd", 0xF27B, None, 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, 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, 1, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, - 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, + 0, 0, 4, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 1, 0 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "vcvtusi2sd", 0xF27B, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 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, 1, 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, 0, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 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, 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, 0 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 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 } } } }, { "vcvtusi2sd", 0xF27B, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 4, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 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, 0, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 4, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 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 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 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 } } } }, { "vcvtusi2ss", 0xF37B, None, 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, 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, 1, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, - 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 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, 1, 0, 1, 1, 0, 1, 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, 4, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 1, 0, 0 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "vcvtusi2ss", 0xF37B, None, 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, 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, 1, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, - 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, + 0, 0, 4, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 1, 0 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "vcvtusi2ss", 0xF37B, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, - 0, 0, 0, 0, 0, 4, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, + 0, 0, 4, 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, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 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 } } } }, { "vcvtusi2ss", 0xF37B, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, - 0, 0, 0, 0, 0, 4, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, + 0, 0, 4, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 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 } } } }, { "vcvtss2usi", 0xF379, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 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, 4, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 4, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "vcvtss2usi", 0xF379, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 4, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 4, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 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 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "vcvttpd2udq", 0x78, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 0, 0, 0, 0, 0, 1, 3, 4, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, + 0, 0, 1, 3, 4, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 1, 1, 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, - 0, 0, 1, 0, 0, 0 } } } }, + 0, 0, 1, 0, 0, 0, 0 } } } }, { "vcvttpd2udq", 0x78, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 0, 0, 0, 0, 0, 1, 3, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 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, 1, 3, 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 } }, { { 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, 1, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vcvttpd2udq", 0x78, None, 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, 1, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 1, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "vcvttpd2udq", 0x78, None, 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, 1, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 1, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "vcvttps2udq", 0x78, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vcvttps2udq", 0x78, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 1, 3, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 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, 1, 3, 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 } }, { { 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, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } } } }, + 0, 0, 0, 1, 0, 0, 0 } } } }, { "vcvttsd2usi", 0xF278, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 4, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "vcvttsd2usi", 0xF278, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 4, 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 } }, { { 7, 0, 0, 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 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "vcvttss2usi", 0xF378, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 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, 4, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 4, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "vcvttss2usi", 0xF378, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 4, 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 } }, { { 7, 0, 0, 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 } }, { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "vcvtudq2ps", 0xF27A, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vcvtudq2ps", 0xF27A, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 1, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 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, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } } } }, + 0, 0, 0, 1, 0, 0, 0 } } } }, { "vexpandpd", 0x6688, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vpexpandq", 0x6689, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vexpandps", 0x6688, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 0, 3, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vpexpandd", 0x6689, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 0, 3, 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, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vextractf32x4", 0x6619, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, + 0, 0, 0, 1, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 1, 0, 0 } }, + 0, 0, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } } } }, + 0, 1, 0, 0, 0, 1, 0 } } } }, { "vextracti32x4", 0x6639, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, + 0, 0, 0, 1, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 1, 0, 0 } }, + 0, 0, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } } } }, + 0, 1, 0, 0, 0, 1, 0 } } } }, { "vextractf64x4", 0x661B, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, + 0, 0, 1, 1, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } } } }, + 0, 0, 1, 0, 0, 1, 0 } } } }, { "vextracti64x4", 0x663B, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, + 0, 0, 1, 1, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } } } }, + 0, 0, 1, 0, 0, 1, 0 } } } }, { "vfixupimmpd", 0x6654, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 2, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vfixupimmpd", 0x6654, None, 1, 5, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 2, 0, 0, 0, 0, 1, 3, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 0, 0, + 0, 0, 1, 3, 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, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } } } }, + 0, 0, 0, 1, 0, 0, 0 } } } }, { "vfixupimmps", 0x6654, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 2, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vfixupimmps", 0x6654, None, 1, 5, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 2, 0, 0, 0, 0, 1, 3, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 0, 0, + 0, 0, 1, 3, 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, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } } } }, + 0, 0, 0, 1, 0, 0, 0 } } } }, { "vfixupimmsd", 0x6655, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 2, 0, 0, 0, 0, 4, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 0, 0, + 0, 0, 4, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "vfixupimmsd", 0x6655, None, 1, 5, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 2, 0, 0, 0, 0, 4, 3, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 0, 0, + 0, 0, 4, 3, 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, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 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 } } } }, { "vgetmantsd", 0x6627, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 2, 0, 0, 0, 0, 4, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 0, 0, + 0, 0, 4, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "vgetmantsd", 0x6627, None, 1, 5, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 2, 0, 0, 0, 0, 4, 3, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 0, 0, + 0, 0, 4, 3, 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, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 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 } } } }, { "vrndscalesd", 0x660B, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 2, 0, 0, 0, 0, 4, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 0, 0, + 0, 0, 4, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "vrndscalesd", 0x660B, None, 1, 5, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 2, 0, 0, 0, 0, 4, 3, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 0, 0, + 0, 0, 4, 3, 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, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 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 } } } }, { "vfixupimmss", 0x6655, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 2, 0, 0, 0, 0, 4, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 0, 0, + 0, 0, 4, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "vfixupimmss", 0x6655, None, 1, 5, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 2, 0, 0, 0, 0, 4, 3, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 0, 0, + 0, 0, 4, 3, 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, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 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 } } } }, { "vgetmantss", 0x6627, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 2, 0, 0, 0, 0, 4, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 0, 0, + 0, 0, 4, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "vgetmantss", 0x6627, None, 1, 5, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 2, 0, 0, 0, 0, 4, 3, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 0, 0, + 0, 0, 4, 3, 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, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 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 } } } }, { "vrndscaless", 0x660A, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 2, 0, 0, 0, 0, 4, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 0, 0, + 0, 0, 4, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "vrndscaless", 0x660A, None, 1, 5, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 2, 0, 0, 0, 0, 4, 3, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 0, 0, + 0, 0, 4, 3, 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, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 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 } } } }, { "vscalefpd", 0x662C, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 1, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vscalefpd", 0x662C, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 1, 0, 0, 0, 0, 1, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 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, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } } } }, + 0, 0, 0, 1, 0, 0, 0 } } } }, { "vscalefps", 0x662C, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vscalefps", 0x662C, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 0, 0, 0, 0, 1, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 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, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } } } }, + 0, 0, 0, 1, 0, 0, 0 } } } }, { "vscalefsd", 0x662D, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 1, 0, 0, 0, 0, 4, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 4, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "vscalefsd", 0x662D, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 1, 0, 0, 0, 0, 4, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 4, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 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 } } } }, { "vscalefss", 0x662D, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 0, 0, 0, 0, 4, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 4, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "vscalefss", 0x662D, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 0, 0, 0, 0, 4, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 4, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 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 } } } }, { "vgetexppd", 0x6642, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 1, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vgetexppd", 0x6642, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 1, 0, 0, 0, 0, 1, 3, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, + 0, 0, 1, 3, 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 } }, { { 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, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } } } }, + 0, 0, 0, 1, 0, 0, 0 } } } }, { "vgetexpps", 0x6642, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vgetexpps", 0x6642, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 1, 3, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 1, 3, 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 } }, { { 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, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } } } }, + 0, 0, 0, 1, 0, 0, 0 } } } }, { "vgetexpsd", 0x6643, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 1, 0, 0, 0, 0, 4, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 4, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "vgetexpsd", 0x6643, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 1, 0, 0, 0, 0, 4, 3, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 4, 3, 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 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 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 } } } }, { "vgetexpss", 0x6643, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 0, 0, 0, 0, 4, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 4, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "vgetexpss", 0x6643, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 0, 0, 0, 0, 4, 3, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 4, 3, 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 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 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 } } } }, { "vgetmantpd", 0x6626, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 2, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vgetmantpd", 0x6626, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 2, 0, 0, 0, 0, 1, 3, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, + 0, 0, 1, 3, 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, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } } } }, + 0, 0, 0, 1, 0, 0, 0 } } } }, { "vrndscalepd", 0x6609, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 2, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vrndscalepd", 0x6609, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 2, 0, 0, 0, 0, 1, 3, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, + 0, 0, 1, 3, 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, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } } } }, + 0, 0, 0, 1, 0, 0, 0 } } } }, { "vgetmantps", 0x6626, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 2, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vgetmantps", 0x6626, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 2, 0, 0, 0, 0, 1, 3, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, + 0, 0, 1, 3, 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, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } } } }, + 0, 0, 0, 1, 0, 0, 0 } } } }, { "vrndscaleps", 0x6608, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 2, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vrndscaleps", 0x6608, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 2, 0, 0, 0, 0, 1, 3, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, + 0, 0, 1, 3, 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, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } } } }, + 0, 0, 0, 1, 0, 0, 0 } } } }, { "vinsertf32x4", 0x6618, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 1, 0, 0 } }, + 0, 0, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 1, 0, 0 } } } }, + 0, 0, 1, 1, 0, 0, 0 } } } }, { "vinserti32x4", 0x6638, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 1, 0, 0 } }, + 0, 0, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 1, 0, 0 } } } }, + 0, 0, 1, 1, 0, 0, 0 } } } }, { "vinsertf64x4", 0x661A, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 2, 0, 0, 0, 0, 1, 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 0, 0, + 0, 0, 1, 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 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, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } } } }, + 0, 0, 0, 1, 0, 0, 0 } } } }, { "vinserti64x4", 0x663A, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 2, 0, 0, 0, 0, 1, 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 0, 0, + 0, 0, 1, 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 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, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } } } }, + 0, 0, 0, 1, 0, 0, 0 } } } }, { "vmovdqa64", 0x666F, None, 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, 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 } }, - { 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 7, 0, 0, 1, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0, 7, 0, 0, 0, 1, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vmovdqa32", 0x666F, None, 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, 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 } }, - { 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 7, 0, 0, 1, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0, 7, 0, 0, 0, 1, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vmovdqu32", 0xF36F, None, 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, 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 } }, - { 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 7, 0, 0, 1, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0, 7, 0, 0, 0, 1, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vmovdqu64", 0xF36F, None, 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, 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 } }, - { 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 7, 0, 0, 1, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0, 7, 0, 0, 0, 1, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vrcp14ps", 0x664C, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vrsqrt14ps", 0x664E, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vpabsq", 0x661F, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 1, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vrcp14pd", 0x664C, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 1, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vrsqrt14pd", 0x664E, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 1, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vpandd", 0x66DB, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 1, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 1, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vpandnd", 0x66DF, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 1, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 1, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vpord", 0x66EB, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 1, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 1, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vpxord", 0x66EF, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 1, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 1, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vpandnq", 0x66DF, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 1, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 1, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vpandq", 0x66DB, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 1, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 1, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vporq", 0x66EB, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 1, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 1, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vpxorq", 0x66EF, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 1, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 1, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vpcmpd", 0x661F, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 2, 0, 0, 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 0, 0, + 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vpcmpled", 0x661F, 2, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vpcmpltd", 0x661F, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 2, 0, 0, 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 2, 0, 0, + 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vpcmpltd", 0x661F, 1, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vpcmpled", 0x661F, 2, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 2, 0, 0, 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 2, 0, 0, + 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "vpcmpneqd", 0x661F, 4, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 2, 0, 0, 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 2, 0, 0, + 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vpcmpnled", 0x661F, 6, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vpcmpnltd", 0x661F, 5, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 2, 0, 0, 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 2, 0, 0, + 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vpcmpnltd", 0x661F, 5, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vpcmpnled", 0x661F, 6, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 2, 0, 0, 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 2, 0, 0, + 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "vpcmpud", 0x661E, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 2, 0, 0, 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 0, 0, + 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "vpcmpequd", 0x661E, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 2, 0, 0, 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 2, 0, 0, + 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vpcmpleud", 0x661E, 2, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vpcmpltud", 0x661E, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 2, 0, 0, 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 2, 0, 0, + 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vpcmpltud", 0x661E, 1, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vpcmpleud", 0x661E, 2, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 2, 0, 0, 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 2, 0, 0, + 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "vpcmpnequd", 0x661E, 4, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 2, 0, 0, 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 2, 0, 0, + 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vpcmpnleud", 0x661E, 6, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vpcmpnltud", 0x661E, 5, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 2, 0, 0, 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 2, 0, 0, + 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vpcmpnltud", 0x661E, 5, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vpcmpnleud", 0x661E, 6, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 2, 0, 0, 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 2, 0, 0, + 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "vpcmpq", 0x661F, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 2, 0, 0, 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 0, 0, + 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vpcmpleq", 0x661F, 2, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vpcmpltq", 0x661F, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 2, 0, 0, 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 2, 0, 0, + 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vpcmpltq", 0x661F, 1, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vpcmpleq", 0x661F, 2, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 2, 0, 0, 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 2, 0, 0, + 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "vpcmpneqq", 0x661F, 4, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 2, 0, 0, 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 2, 0, 0, + 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vpcmpnleq", 0x661F, 6, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vpcmpnltq", 0x661F, 5, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 2, 0, 0, 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 2, 0, 0, + 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vpcmpnltq", 0x661F, 5, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vpcmpnleq", 0x661F, 6, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 2, 0, 0, 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 2, 0, 0, + 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "vpcmpuq", 0x661E, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 2, 0, 0, 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 0, 0, + 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "vpcmpequq", 0x661E, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 2, 0, 0, 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 2, 0, 0, + 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vpcmpleuq", 0x661E, 2, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vpcmpltuq", 0x661E, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 2, 0, 0, 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 2, 0, 0, + 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vpcmpltuq", 0x661E, 1, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vpcmpleuq", 0x661E, 2, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 2, 0, 0, 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 2, 0, 0, + 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "vpcmpnequq", 0x661E, 4, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 2, 0, 0, 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 2, 0, 0, + 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vpcmpnleuq", 0x661E, 6, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vpcmpnltuq", 0x661E, 5, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 2, 0, 0, 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 2, 0, 0, + 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vpcmpnltuq", 0x661E, 5, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vpcmpnleuq", 0x661E, 6, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 2, 0, 0, 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 2, 0, 0, + 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "vptestmd", 0x6627, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 0, 0, 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "vptestnmd", 0xF327, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 0, 0, 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "vptestmq", 0x6627, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 1, 0, 0, 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "vptestnmq", 0xF327, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 1, 0, 0, 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "vpmovdb", 0xF331, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 1, 1, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } } } }, + 0, 1, 0, 0, 0, 1, 0 } } } }, { "vpmovdb", 0xF331, None, 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, 1, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 2, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 2, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } } } }, + 0, 1, 0, 0, 0, 1, 0 } } } }, { "vpmovdb", 0xF331, None, 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, 1, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 3, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } } } }, + 0, 1, 0, 0, 0, 1, 0 } } } }, { "vpmovsdb", 0xF321, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 1, 1, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } } } }, + 0, 1, 0, 0, 0, 1, 0 } } } }, { "vpmovsdb", 0xF321, None, 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, 1, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 2, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 2, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } } } }, + 0, 1, 0, 0, 0, 1, 0 } } } }, { "vpmovsdb", 0xF321, None, 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, 1, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 3, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } } } }, + 0, 1, 0, 0, 0, 1, 0 } } } }, { "vpmovusdb", 0xF311, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 1, 1, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } } } }, + 0, 1, 0, 0, 0, 1, 0 } } } }, { "vpmovusdb", 0xF311, None, 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, 1, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 2, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 2, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } } } }, + 0, 1, 0, 0, 0, 1, 0 } } } }, { "vpmovusdb", 0xF311, None, 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, 1, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 3, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } } } }, + 0, 1, 0, 0, 0, 1, 0 } } } }, { "vpmovdw", 0xF333, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 1, 1, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } } } }, + 0, 0, 1, 0, 0, 1, 0 } } } }, { "vpmovdw", 0xF333, None, 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, 1, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 2, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 2, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } } } }, + 0, 1, 0, 0, 0, 1, 0 } } } }, { "vpmovdw", 0xF333, None, 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, 1, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 3, 1, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } } } }, + 0, 1, 0, 0, 0, 1, 0 } } } }, { "vpmovsdw", 0xF323, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 1, 1, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } } } }, + 0, 0, 1, 0, 0, 1, 0 } } } }, { "vpmovsdw", 0xF323, None, 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, 1, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 2, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 2, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } } } }, + 0, 1, 0, 0, 0, 1, 0 } } } }, { "vpmovsdw", 0xF323, None, 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, 1, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 3, 1, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } } } }, + 0, 1, 0, 0, 0, 1, 0 } } } }, { "vpmovusdw", 0xF313, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 1, 1, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } } } }, + 0, 0, 1, 0, 0, 1, 0 } } } }, { "vpmovusdw", 0xF313, None, 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, 1, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 2, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 2, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } } } }, + 0, 1, 0, 0, 0, 1, 0 } } } }, { "vpmovusdw", 0xF313, None, 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, 1, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 3, 1, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } } } }, + 0, 1, 0, 0, 0, 1, 0 } } } }, { "vpmovqb", 0xF332, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 1, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } } } }, + 0, 1, 0, 0, 0, 1, 0 } } } }, { "vpmovqb", 0xF332, None, 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, 1, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 2, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 2, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } } } }, + 0, 1, 0, 0, 0, 1, 0 } } } }, { "vpmovqb", 0xF332, None, 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, 1, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 3, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 3, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } } } }, + 0, 1, 0, 0, 0, 1, 0 } } } }, { "vpmovsqb", 0xF322, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 1, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } } } }, + 0, 1, 0, 0, 0, 1, 0 } } } }, { "vpmovsqb", 0xF322, None, 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, 1, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 2, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 2, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } } } }, + 0, 1, 0, 0, 0, 1, 0 } } } }, { "vpmovsqb", 0xF322, None, 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, 1, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 3, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 3, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } } } }, + 0, 1, 0, 0, 0, 1, 0 } } } }, { "vpmovusqb", 0xF312, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 1, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } } } }, + 0, 1, 0, 0, 0, 1, 0 } } } }, { "vpmovusqb", 0xF312, None, 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, 1, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 2, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 2, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } } } }, + 0, 1, 0, 0, 0, 1, 0 } } } }, { "vpmovusqb", 0xF312, None, 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, 1, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 3, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 3, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } } } }, + 0, 1, 0, 0, 0, 1, 0 } } } }, { "vpmovqd", 0xF335, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 1, 1, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } } } }, + 0, 0, 1, 0, 0, 1, 0 } } } }, { "vpmovqd", 0xF335, None, 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, 1, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 2, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 2, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } } } }, + 0, 1, 0, 0, 0, 1, 0 } } } }, { "vpmovqd", 0xF335, None, 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, 1, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 3, 1, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } } } }, + 0, 1, 0, 0, 0, 1, 0 } } } }, { "vpmovsqd", 0xF325, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 1, 1, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } } } }, + 0, 0, 1, 0, 0, 1, 0 } } } }, { "vpmovsqd", 0xF325, None, 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, 1, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 2, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 2, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } } } }, + 0, 1, 0, 0, 0, 1, 0 } } } }, { "vpmovsqd", 0xF325, None, 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, 1, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 3, 1, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } } } }, + 0, 1, 0, 0, 0, 1, 0 } } } }, { "vpmovusqd", 0xF315, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 1, 1, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } } } }, + 0, 0, 1, 0, 0, 1, 0 } } } }, { "vpmovusqd", 0xF315, None, 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, 1, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 2, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 2, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } } } }, + 0, 1, 0, 0, 0, 1, 0 } } } }, { "vpmovusqd", 0xF315, None, 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, 1, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 3, 1, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } } } }, + 0, 1, 0, 0, 0, 1, 0 } } } }, { "vpmovqw", 0xF334, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 1, 1, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } } } }, + 0, 1, 0, 0, 0, 1, 0 } } } }, { "vpmovqw", 0xF334, None, 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, 1, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 2, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 2, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } } } }, + 0, 1, 0, 0, 0, 1, 0 } } } }, { "vpmovqw", 0xF334, None, 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, 1, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 3, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } } } }, + 0, 1, 0, 0, 0, 1, 0 } } } }, { "vpmovsqw", 0xF324, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 1, 1, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } } } }, + 0, 1, 0, 0, 0, 1, 0 } } } }, { "vpmovsqw", 0xF324, None, 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, 1, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 2, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 2, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } } } }, + 0, 1, 0, 0, 0, 1, 0 } } } }, { "vpmovsqw", 0xF324, None, 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, 1, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 3, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } } } }, + 0, 1, 0, 0, 0, 1, 0 } } } }, { "vpmovusqw", 0xF314, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 1, 1, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } } } }, + 0, 1, 0, 0, 0, 1, 0 } } } }, { "vpmovusqw", 0xF314, None, 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, 1, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 2, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 2, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } } } }, + 0, 1, 0, 0, 0, 1, 0 } } } }, { "vpmovusqw", 0xF314, None, 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, 1, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 3, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } } } }, + 0, 1, 0, 0, 0, 1, 0 } } } }, { "vprold", 0x6672, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, - 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vprord", 0x6672, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, - 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vprolq", 0x6672, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, - 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vprorq", 0x6672, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, - 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vpscatterqd", 0x66A1, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 3, 0, 0, 1, 2, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 3, + 0, 0, 1, 2, 0, 0, 0, 2, 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, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0 } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "vpscatterqd", 0x66A1, None, 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, 1, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 1, 0, 0, 2, 2, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, + 0, 0, 2, 2, 0, 0, 0, 2, 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, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 0, 0, 0, 0, 0 } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "vpscatterqd", 0x66A1, None, 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, 1, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 2, 0, 0, 3, 2, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 2, + 0, 0, 3, 2, 0, 0, 0, 2, 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, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 0, 0, 0, 0, 0 } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "vscatterqps", 0x66A3, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 3, 0, 0, 1, 2, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 3, + 0, 0, 1, 2, 0, 0, 0, 2, 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, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0 } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "vscatterqps", 0x66A3, None, 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, 1, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 1, 0, 0, 2, 2, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, + 0, 0, 2, 2, 0, 0, 0, 2, 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, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 0, 0, 0, 0, 0 } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "vscatterqps", 0x66A3, None, 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, 1, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 2, 0, 0, 3, 2, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 2, + 0, 0, 3, 2, 0, 0, 0, 2, 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, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 0, 0, 0, 0, 0 } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "vpsraq", 0x66E2, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 1, 0, 0 } }, + 0, 0, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 1, 0, 0 } } } }, + 0, 0, 1, 1, 0, 0, 0 } } } }, { "vpsraq", 0x6672, 4, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, - 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vpsraq", 0x66E2, None, 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, 1, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 0, 0, 0, 0, 0, 2, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, + 0, 0, 2, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "vrcp14sd", 0x664D, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 1, 0, 0, 0, 0, 4, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 4, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "vrsqrt14sd", 0x664F, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 1, 0, 0, 0, 0, 4, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 4, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "vrcp14ss", 0x664D, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 0, 0, 0, 0, 4, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 4, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "vrsqrt14ss", 0x664F, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 0, 0, 0, 0, 4, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 4, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "vshuff32x4", 0x6623, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 2, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 1, 1, 1, 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, - 0, 0, 1, 1, 0, 0 } }, + 0, 0, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 1, 0, 0 } } } }, + 0, 0, 1, 1, 0, 0, 0 } } } }, { "vshufi32x4", 0x6643, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 2, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 1, 1, 1, 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, - 0, 0, 1, 1, 0, 0 } }, + 0, 0, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 1, 0, 0 } } } }, + 0, 0, 1, 1, 0, 0, 0 } } } }, { "vshuff64x2", 0x6623, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 2, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 1, 1, 1, 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, - 0, 0, 1, 1, 0, 0 } }, + 0, 0, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 1, 0, 0 } } } }, + 0, 0, 1, 1, 0, 0, 0 } } } }, { "vshufi64x2", 0x6643, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 2, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 1, 1, 1, 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, - 0, 0, 1, 1, 0, 0 } }, + 0, 0, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 1, 0, 0 } } } }, + 0, 0, 1, 1, 0, 0, 0 } } } }, { "vpbroadcastmb2q", 0xF32A, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 1, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, + 0, 0, 5, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vpbroadcastmw2d", 0xF33A, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 5, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vpconflictd", 0x66C4, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vpconflictq", 0x66C4, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 1, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vplzcntd", 0x6644, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vplzcntq", 0x6644, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 1, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vexp2pd", 0x66C8, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 1, 0, 0, 0, 0, 1, 3, 4, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, + 0, 0, 1, 3, 4, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 1, 1, 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, - 0, 0, 0, 1, 0, 0 } } } }, + 0, 0, 0, 1, 0, 0, 0 } } } }, { "vexp2pd", 0x66C8, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 1, 0, 0, 0, 0, 1, 3, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, + 0, 0, 1, 3, 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 } }, { { 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, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } } } }, + 0, 0, 0, 1, 0, 0, 0 } } } }, { "vexp2ps", 0x66C8, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 1, 3, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 1, 3, 3, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 1, 1, 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, - 0, 0, 0, 1, 0, 0 } } } }, + 0, 0, 0, 1, 0, 0, 0 } } } }, { "vexp2ps", 0x66C8, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 1, 3, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 1, 3, 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 } }, { { 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, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } } } }, + 0, 0, 0, 1, 0, 0, 0 } } } }, { "vrcp28pd", 0x66CA, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 1, 0, 0, 0, 0, 1, 3, 4, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, + 0, 0, 1, 3, 4, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 1, 1, 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, - 0, 0, 0, 1, 0, 0 } } } }, + 0, 0, 0, 1, 0, 0, 0 } } } }, { "vrcp28pd", 0x66CA, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 1, 0, 0, 0, 0, 1, 3, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, + 0, 0, 1, 3, 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 } }, { { 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, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } } } }, + 0, 0, 0, 1, 0, 0, 0 } } } }, { "vrsqrt28pd", 0x66CC, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 1, 0, 0, 0, 0, 1, 3, 4, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, + 0, 0, 1, 3, 4, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 1, 1, 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, - 0, 0, 0, 1, 0, 0 } } } }, + 0, 0, 0, 1, 0, 0, 0 } } } }, { "vrsqrt28pd", 0x66CC, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 1, 0, 0, 0, 0, 1, 3, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, + 0, 0, 1, 3, 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 } }, { { 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, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } } } }, + 0, 0, 0, 1, 0, 0, 0 } } } }, { "vrcp28ps", 0x66CA, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 1, 3, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 1, 3, 3, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 1, 1, 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, - 0, 0, 0, 1, 0, 0 } } } }, + 0, 0, 0, 1, 0, 0, 0 } } } }, { "vrcp28ps", 0x66CA, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 1, 3, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 1, 3, 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 } }, { { 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, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } } } }, + 0, 0, 0, 1, 0, 0, 0 } } } }, { "vrsqrt28ps", 0x66CC, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 1, 3, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 1, 3, 3, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 1, 1, 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, - 0, 0, 0, 1, 0, 0 } } } }, + 0, 0, 0, 1, 0, 0, 0 } } } }, { "vrsqrt28ps", 0x66CC, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 1, 3, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 1, 3, 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 } }, { { 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, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } } } }, + 0, 0, 0, 1, 0, 0, 0 } } } }, { "vrcp28sd", 0x66CB, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 1, 0, 0, 0, 0, 4, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 4, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "vrcp28sd", 0x66CB, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 1, 0, 0, 0, 0, 4, 3, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 4, 3, 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 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 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 } } } }, { "vrsqrt28sd", 0x66CD, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 1, 0, 0, 0, 0, 4, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 4, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "vrsqrt28sd", 0x66CD, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 1, 0, 0, 0, 0, 4, 3, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 4, 3, 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 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 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 } } } }, { "vrcp28ss", 0x66CB, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 0, 0, 0, 0, 4, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 4, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "vrcp28ss", 0x66CB, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 0, 0, 0, 0, 4, 3, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 4, 3, 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 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 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 } } } }, { "vrsqrt28ss", 0x66CD, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 0, 0, 0, 0, 4, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 4, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "vrsqrt28ss", 0x66CD, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 0, 0, 0, 0, 4, 3, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 4, 3, 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 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 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 } } } }, { "vgatherpf0dpd", 0x66C6, 1, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 2, - 1, 0, 2, 0, 0, 1, 2, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 2, + 0, 0, 1, 2, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "vgatherpf0qpd", 0x66C7, 1, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 2, - 1, 0, 3, 0, 0, 1, 2, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 3, + 0, 0, 1, 2, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "vgatherpf1dpd", 0x66C6, 2, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 1, 0, 2, 0, 0, 1, 2, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 2, + 0, 0, 1, 2, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "vgatherpf1qpd", 0x66C7, 2, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 1, 0, 3, 0, 0, 1, 2, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 3, + 0, 0, 1, 2, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "vscatterpf0dpd", 0x66C6, 5, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 1, 0, 2, 0, 0, 1, 2, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 2, + 0, 0, 1, 2, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "vscatterpf0qpd", 0x66C7, 5, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 1, 0, 3, 0, 0, 1, 2, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 3, + 0, 0, 1, 2, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "vscatterpf1dpd", 0x66C6, 6, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 1, 0, 2, 0, 0, 1, 2, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 2, + 0, 0, 1, 2, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "vscatterpf1qpd", 0x66C7, 6, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 1, 0, 3, 0, 0, 1, 2, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 3, + 0, 0, 1, 2, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "vgatherpf0dps", 0x66C6, 1, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, - 1, 0, 3, 0, 0, 1, 2, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 3, + 0, 0, 1, 2, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "vgatherpf0qps", 0x66C7, 1, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, - 1, 0, 3, 0, 0, 1, 2, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 3, + 0, 0, 1, 2, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "vgatherpf1dps", 0x66C6, 2, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 3, 0, 0, 1, 2, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 3, + 0, 0, 1, 2, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "vgatherpf1qps", 0x66C7, 2, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 3, 0, 0, 1, 2, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 3, + 0, 0, 1, 2, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "vscatterpf0dps", 0x66C6, 5, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 3, 0, 0, 1, 2, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 3, + 0, 0, 1, 2, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "vscatterpf0qps", 0x66C7, 5, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 3, 0, 0, 1, 2, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 3, + 0, 0, 1, 2, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "vscatterpf1dps", 0x66C6, 6, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 3, 0, 0, 1, 2, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 3, + 0, 0, 1, 2, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "vscatterpf1qps", 0x66C7, 6, 1, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 3, 0, 0, 1, 2, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 3, + 0, 0, 1, 2, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "prefetchwt1", 0x0F0D, 2, 2, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "clflushopt", 0x660fae, 0x7, 2, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "xrstors", 0xfc7, 0x3, 2, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "xrstors64", 0xfc7, 0x3, 2, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "xsaves", 0xfc7, 0x5, 2, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "xsaves64", 0xfc7, 0x5, 2, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "xsavec", 0xfc7, 0x4, 2, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 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, 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, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "xsavec64", 0xfc7, 0x4, 2, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "encls", 0xf01cf, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "enclu", 0xf01d7, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "enclv", 0xf01c0, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "vcvtpd2udqx", 0x79, None, 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, 1, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 0, 0, 0, 0, 0, 2, 3, 4, 0, 0, 4, 0, 0, 0, 0, 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, 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, 2, 0, 0, 0, + 0, 0, 2, 3, 4, 0, 0, 4, 0, 0, 0, 0, 0, 1, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "vcvtpd2udqy", 0x79, None, 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, 1, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 0, 0, 0, 0, 0, 3, 3, 4, 0, 0, 5, 0, 0, 0, 0, 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, 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, 2, 0, 0, 0, + 0, 0, 3, 3, 4, 0, 0, 5, 0, 0, 0, 0, 0, 1, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 1, 0, 1, 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, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "vcvttpd2udqx", 0x78, None, 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, 1, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 0, 0, 0, 0, 0, 2, 3, 4, 0, 0, 4, 0, 0, 0, 0, 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, 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, 2, 0, 0, 0, + 0, 0, 2, 3, 4, 0, 0, 4, 0, 0, 0, 0, 0, 1, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "vcvttpd2udqy", 0x78, None, 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, 1, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 0, 0, 0, 0, 0, 3, 3, 4, 0, 0, 5, 0, 0, 0, 0, 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, 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, 2, 0, 0, 0, + 0, 0, 3, 3, 4, 0, 0, 5, 0, 0, 0, 0, 0, 1, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 1, 0, 1, 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, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "kaddd", 0x664A, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 2, 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 } }, { { 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 } }, { { 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 } } } }, { "kandd", 0x6641, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 2, 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 } }, { { 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 } }, { { 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 } } } }, { "kandnd", 0x6642, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 2, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 2, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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 } }, { { 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 } }, { { 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 } } } }, { "kmovd", 0x6690, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "kmovd", 0x6691, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "kmovd", 0xF292, None, 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, 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 } }, - { 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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 } } } }, { "knotd", 0x6644, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 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 } }, { { 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 } } } }, { "kord", 0x6645, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 2, 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 } }, { { 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 } }, { { 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 } } } }, { "kortestd", 0x6698, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 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 } }, { { 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 } } } }, { "ktestd", 0x6699, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 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 } }, { { 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 } } } }, { "kxnord", 0x6646, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 2, 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 } }, { { 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 } }, { { 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 } } } }, { "kxord", 0x6647, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 2, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 2, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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 } }, { { 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 } }, { { 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 } } } }, { "kaddq", 0x4A, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 2, 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 } }, { { 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 } }, { { 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 } } } }, { "kandnq", 0x42, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 2, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 2, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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 } }, { { 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 } }, { { 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 } } } }, { "kandq", 0x41, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 2, 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 } }, { { 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 } }, { { 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 } } } }, { "kmovq", 0x90, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "kmovq", 0x91, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "kmovq", 0xF292, None, 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, 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 } }, - { 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } }, { { 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 } } } }, { "knotq", 0x44, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 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 } }, { { 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 } } } }, { "korq", 0x45, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 2, 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 } }, { { 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 } }, { { 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 } } } }, { "kortestq", 0x98, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 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 } }, { { 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 } } } }, { "ktestq", 0x99, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 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 } }, { { 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 } } } }, { "kunpckdq", 0x4B, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 2, 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 } }, { { 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 } }, { { 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 } } } }, { "kunpckwd", 0x4B, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 1, 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 } }, { { 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 } }, { { 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 } } } }, { "kxnorq", 0x46, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 2, 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 } }, { { 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 } }, { { 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 } } } }, { "kxorq", 0x47, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 2, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 2, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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 } }, { { 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 } }, { { 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 } } } }, { "kshiftld", 0x6633, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 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 } }, { { 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 } } } }, { "kshiftlq", 0x6633, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, - 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 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 } }, { { 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 } } } }, { "kshiftrd", 0x6631, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 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 } }, { { 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 } } } }, { "kshiftrq", 0x6631, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, - 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 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 } }, { { 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 } } } }, { "vdbpsadbw", 0x6642, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vmovdqu8", 0xF26F, None, 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, 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 } }, - { 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 7, 0, 0, 1, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0, 7, 0, 0, 0, 1, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vmovdqu16", 0xF26F, None, 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, 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 } }, - { 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 7, 0, 0, 1, 0, 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, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0, 7, 0, 0, 0, 1, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vpblendmb", 0x6666, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vpblendmw", 0x6666, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vpermi2w", 0x6675, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vpermt2w", 0x667D, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vpermw", 0x668D, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vpsllvw", 0x6612, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vpsravw", 0x6611, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vpsrlvw", 0x6610, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vpcmpb", 0x663F, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vpcmpleb", 0x663F, 2, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vpcmpltb", 0x663F, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 2, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vpcmpltb", 0x663F, 1, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vpcmpleb", 0x663F, 2, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 2, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "vpcmpneqb", 0x663F, 4, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 2, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vpcmpnleb", 0x663F, 6, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vpcmpnltb", 0x663F, 5, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 2, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vpcmpnltb", 0x663F, 5, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vpcmpnleb", 0x663F, 6, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 2, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "vpcmpub", 0x663E, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "vpcmpequb", 0x663E, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 2, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vpcmpleub", 0x663E, 2, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vpcmpltub", 0x663E, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 2, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vpcmpltub", 0x663E, 1, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vpcmpleub", 0x663E, 2, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 2, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "vpcmpnequb", 0x663E, 4, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 2, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vpcmpnleub", 0x663E, 6, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vpcmpnltub", 0x663E, 5, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 2, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vpcmpnltub", 0x663E, 5, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vpcmpnleub", 0x663E, 6, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, - 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 2, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "vpcmpw", 0x663F, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vpcmplew", 0x663F, 2, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vpcmpltw", 0x663F, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 2, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vpcmpltw", 0x663F, 1, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vpcmplew", 0x663F, 2, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 2, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "vpcmpneqw", 0x663F, 4, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 2, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vpcmpnlew", 0x663F, 6, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vpcmpnltw", 0x663F, 5, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 2, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vpcmpnltw", 0x663F, 5, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vpcmpnlew", 0x663F, 6, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 2, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "vpcmpuw", 0x663E, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "vpcmpequw", 0x663E, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 2, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vpcmpleuw", 0x663E, 2, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vpcmpltuw", 0x663E, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 2, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vpcmpltuw", 0x663E, 1, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vpcmpleuw", 0x663E, 2, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 2, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "vpcmpnequw", 0x663E, 4, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 2, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vpcmpnleuw", 0x663E, 6, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vpcmpnltuw", 0x663E, 5, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 2, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, - { "vpcmpnltuw", 0x663E, 5, 1, 3, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "vpcmpnleuw", 0x663E, 6, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, - 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 2, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "vpmovb2m", 0xF329, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "vpmovw2m", 0xF329, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 1, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, + 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "vpmovm2b", 0xF328, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 5, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vpmovm2w", 0xF328, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 1, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, + 0, 0, 5, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vpmovswb", 0xF320, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 1, 1, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } } } }, + 0, 0, 1, 0, 0, 1, 0 } } } }, { "vpmovswb", 0xF320, None, 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, 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, 1, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 2, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 2, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } } } }, + 0, 1, 0, 0, 0, 1, 0 } } } }, { "vpmovswb", 0xF320, None, 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, 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, 1, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 3, 1, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } } } }, + 0, 1, 0, 0, 0, 1, 0 } } } }, { "vpmovuswb", 0xF310, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 1, 1, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } } } }, + 0, 0, 1, 0, 0, 1, 0 } } } }, { "vpmovuswb", 0xF310, None, 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, 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, 1, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 2, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 2, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } } } }, + 0, 1, 0, 0, 0, 1, 0 } } } }, { "vpmovuswb", 0xF310, None, 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, 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, 1, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 3, 1, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } } } }, + 0, 1, 0, 0, 0, 1, 0 } } } }, { "vpmovwb", 0xF330, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 1, 1, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } } } }, + 0, 0, 1, 0, 0, 1, 0 } } } }, { "vpmovwb", 0xF330, None, 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, 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, 1, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 2, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 2, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } } } }, + 0, 1, 0, 0, 0, 1, 0 } } } }, { "vpmovwb", 0xF330, None, 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, 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, 1, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 3, 1, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } } } }, + 0, 1, 0, 0, 0, 1, 0 } } } }, { "vptestmb", 0x6626, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "vptestmw", 0x6626, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "vptestnmb", 0xF326, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "vptestnmw", 0xF326, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "kaddb", 0x664A, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 1, 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 } }, { { 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 } }, { { 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 } } } }, { "kandb", 0x6641, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 1, 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 } }, { { 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 } }, { { 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 } } } }, { "kandnb", 0x6642, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 1, 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 } }, { { 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 } }, { { 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 } } } }, { "kmovb", 0x6690, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 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 }, { { { 8, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "kmovb", 0x6691, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 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 }, { { { 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, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "kmovb", 0x6692, None, 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, 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 } }, - { 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 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 } } } }, { "knotb", 0x6644, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 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 }, { { { 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 } }, { { 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 } } } }, { "korb", 0x6645, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 1, 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 } }, { { 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 } }, { { 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 } } } }, { "kortestb", 0x6698, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 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 }, { { { 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 } }, { { 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 } } } }, { "ktestb", 0x6699, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 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 }, { { { 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 } }, { { 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 } } } }, { "kxnorb", 0x6646, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 1, 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 } }, { { 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 } }, { { 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 } } } }, { "kxorb", 0x6647, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 1, 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 } }, { { 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 } }, { { 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 } } } }, { "kaddw", 0x4A, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 1, 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 } }, { { 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 } }, { { 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 } } } }, { "ktestw", 0x99, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 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 }, { { { 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 } }, { { 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 } } } }, { "kshiftlb", 0x6632, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 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 } }, { { 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 } } } }, { "kshiftrb", 0x6630, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 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 } }, { { 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 } } } }, { "vbroadcastf32x2", 0x6619, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 1, 0, 0 } } } }, + 0, 0, 1, 1, 0, 0, 0 } } } }, { "vbroadcastf32x8", 0x661B, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 1, 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 1, 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 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, - 0, 0, 0, 1, 0, 0 } } } }, + 0, 0, 0, 1, 0, 0, 0 } } } }, { "vbroadcasti32x2", 0x6659, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vbroadcasti32x8", 0x665B, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 1, 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 1, 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 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, - 0, 0, 0, 1, 0, 0 } } } }, + 0, 0, 0, 1, 0, 0, 0 } } } }, { "vbroadcastf64x2", 0x661A, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 1, 0, 0 } } } }, + 0, 0, 1, 1, 0, 0, 0 } } } }, { "vbroadcasti64x2", 0x665A, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 1, 0, 0 } } } }, + 0, 0, 1, 1, 0, 0, 0 } } } }, { "vcvtpd2qq", 0x667B, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vcvtpd2qq", 0x667B, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 0, 0, 0, 0, 0, 1, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, + 0, 0, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 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, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } } } }, + 0, 0, 0, 1, 0, 0, 0 } } } }, { "vcvtpd2uqq", 0x6679, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vcvtpd2uqq", 0x6679, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 0, 0, 0, 0, 0, 1, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, + 0, 0, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 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, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } } } }, + 0, 0, 0, 1, 0, 0, 0 } } } }, { "vcvtps2qq", 0x667B, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 1, 3, 3, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 1, 3, 3, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 1, 0, 1, 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, - 0, 0, 0, 1, 0, 0 } } } }, - { "vcvtps2qq", 0x667B, None, 1, 2, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vcvtps2qq", 0x667B, None, 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, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 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, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 0, 0, 1, 0, 0, 0 } } } }, { "vcvtps2qq", 0x667B, None, 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, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 2, 3, 3, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, + 0, 0, 2, 3, 3, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "vcvtps2qq", 0x667B, None, 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, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 3, 3, 3, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 3, 3, 3, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vcvtps2qq", 0x667B, None, 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, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 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, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 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, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } } } }, + 0, 0, 1, 0, 0, 0, 0 } } } }, { "vcvtps2uqq", 0x6679, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 1, 3, 3, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 1, 3, 3, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 1, 0, 1, 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, - 0, 0, 0, 1, 0, 0 } } } }, - { "vcvtps2uqq", 0x6679, None, 1, 2, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vcvtps2uqq", 0x6679, None, 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, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 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, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 0, 0, 1, 0, 0, 0 } } } }, { "vcvtps2uqq", 0x6679, None, 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, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 2, 3, 3, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, + 0, 0, 2, 3, 3, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "vcvtps2uqq", 0x6679, None, 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, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 3, 3, 3, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 3, 3, 3, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vcvtps2uqq", 0x6679, None, 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, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 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, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 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, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } } } }, + 0, 0, 1, 0, 0, 0, 0 } } } }, { "vcvtqq2pd", 0xF3E6, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vcvtqq2pd", 0xF3E6, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 0, 0, 0, 0, 0, 1, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, + 0, 0, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 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, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } } } }, + 0, 0, 0, 1, 0, 0, 0 } } } }, { "vcvtuqq2pd", 0xF37A, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vcvtuqq2pd", 0xF37A, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 0, 0, 0, 0, 0, 1, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, + 0, 0, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 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, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } } } }, + 0, 0, 0, 1, 0, 0, 0 } } } }, { "vcvtqq2ps", 0x5B, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 0, 0, 0, 0, 0, 1, 3, 4, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, + 0, 0, 1, 3, 4, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 1, 1, 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, - 0, 0, 1, 0, 0, 0 } } } }, + 0, 0, 1, 0, 0, 0, 0 } } } }, { "vcvtqq2ps", 0x5B, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 0, 0, 0, 0, 0, 1, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, + 0, 0, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 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, 1, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vcvtqq2ps", 0x5B, None, 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, 1, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 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, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 1, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "vcvtqq2ps", 0x5B, None, 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, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 1, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "vcvtqq2psx", 0x5B, None, 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, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 0, 0, 0, 0, 0, 2, 3, 4, 0, 0, 4, 0, 0, 0, 0, 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, 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, 2, 0, 0, 0, + 0, 0, 2, 3, 4, 0, 0, 4, 0, 0, 0, 0, 0, 1, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "vcvtqq2psy", 0x5B, None, 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, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 0, 0, 0, 0, 0, 3, 3, 4, 0, 0, 5, 0, 0, 0, 0, 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, 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, 2, 0, 0, 0, + 0, 0, 3, 3, 4, 0, 0, 5, 0, 0, 0, 0, 0, 1, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 1, 0, 1, 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, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "vcvttpd2qq", 0x667A, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vcvttpd2qq", 0x667A, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 0, 0, 0, 0, 0, 1, 3, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 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, 1, 3, 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 } }, { { 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, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } } } }, + 0, 0, 0, 1, 0, 0, 0 } } } }, { "vcvttpd2uqq", 0x6678, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vcvttpd2uqq", 0x6678, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 0, 0, 0, 0, 0, 1, 3, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 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, 1, 3, 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 } }, { { 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, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } } } }, + 0, 0, 0, 1, 0, 0, 0 } } } }, { "vcvttps2qq", 0x667A, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 1, 3, 3, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 1, 3, 3, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 1, 0, 1, 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, - 0, 0, 0, 1, 0, 0 } } } }, - { "vcvttps2qq", 0x667A, None, 1, 2, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vcvttps2qq", 0x667A, None, 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, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 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, 1, 3, 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 } }, { { 7, 0, 0, 0, 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 } }, + { { 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 } } } }, { "vcvttps2qq", 0x667A, None, 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, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 2, 3, 3, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, + 0, 0, 2, 3, 3, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "vcvttps2qq", 0x667A, None, 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, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 3, 3, 3, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 3, 3, 3, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vcvttps2qq", 0x667A, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vcvttps2uqq", 0x6678, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 1, 3, 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 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 1, 3, 3, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 0, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } } } }, - { "vcvttps2uqq", 0x6678, None, 1, 2, + 0, 0, 0, 1, 0, 0, 0 } } } }, + { "vcvttps2uqq", 0x6678, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 1, 3, 3, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 1, 0, 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, 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, 1, 0, 0, 0, + 0, 0, 1, 3, 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 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } } } }, + 0, 0, 0, 1, 0, 0, 0 } } } }, { "vcvttps2uqq", 0x6678, None, 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, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 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, 1, 1, 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, 2, 3, 3, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "vcvttps2uqq", 0x6678, None, 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, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 2, 3, 3, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, + 0, 0, 3, 3, 3, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, - { "vcvttps2uqq", 0x6678, None, 1, 2, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vcvtuqq2ps", 0xF27A, None, 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, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 3, 3, 3, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 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, 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, 2, 0, 0, 0, + 0, 0, 1, 3, 4, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 0, 0, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vcvttps2uqq", 0x6678, None, 1, 3, + 0, 0, 1, 0, 0, 0, 0 } } } }, + { "vcvtuqq2ps", 0xF27A, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 1, 3, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 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, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 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, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } } } }, + 0, 0, 1, 0, 0, 0, 0 } } } }, { "vcvtuqq2ps", 0xF27A, None, 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, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 0, 0, 0, 0, 0, 1, 3, 4, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 1, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 1, 1, 0 } }, - { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, - { "vcvtuqq2ps", 0xF27A, None, 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, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 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, 1, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 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, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "vcvtuqq2ps", 0xF27A, None, 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, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 1, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "vcvtuqq2psx", 0xF27A, None, 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, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 0, 0, 0, 0, 0, 2, 3, 4, 0, 0, 4, 0, 0, 0, 0, 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, 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, 2, 0, 0, 0, + 0, 0, 2, 3, 4, 0, 0, 4, 0, 0, 0, 0, 0, 1, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "vcvtuqq2psy", 0xF27A, None, 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, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 0, 0, 0, 0, 0, 3, 3, 4, 0, 0, 5, 0, 0, 0, 0, 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, 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, 2, 0, 0, 0, + 0, 0, 3, 3, 4, 0, 0, 5, 0, 0, 0, 0, 0, 1, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 1, 0, 1, 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, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "vextractf32x8", 0x661B, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, + 0, 0, 1, 1, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } } } }, + 0, 0, 1, 0, 0, 1, 0 } } } }, { "vextracti32x8", 0x663B, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, + 0, 0, 1, 1, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 0 } } } }, + 0, 0, 1, 0, 0, 1, 0 } } } }, { "vinsertf32x8", 0x661A, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 2, 0, 0, 0, 0, 1, 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 0, 0, + 0, 0, 1, 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 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, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } } } }, + 0, 0, 0, 1, 0, 0, 0 } } } }, { "vinserti32x8", 0x663A, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 2, 0, 0, 0, 0, 1, 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 0, 0, + 0, 0, 1, 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 1, 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, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } } } }, + 0, 0, 0, 1, 0, 0, 0 } } } }, { "vfpclassss", 0x6667, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 2, 0, 0, 0, 0, 4, 2, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "vfpclasssd", 0x6667, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 2, 0, 0, 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, + 0, 0, 4, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "vextractf64x2", 0x6619, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, + 0, 0, 0, 1, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 1, 0, 0 } }, + 0, 0, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } } } }, + 0, 1, 0, 0, 0, 1, 0 } } } }, { "vextracti64x2", 0x6639, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, + 0, 0, 0, 1, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 1, 0, 0 } }, + 0, 0, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } } } }, + 0, 1, 0, 0, 0, 1, 0 } } } }, { "vinsertf64x2", 0x6618, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 1, 0, 0 } }, + 0, 0, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 1, 0, 0 } } } }, + 0, 0, 1, 1, 0, 0, 0 } } } }, { "vinserti64x2", 0x6638, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 1, 0, 0 } }, + 0, 0, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 1, 0, 0 } } } }, + 0, 0, 1, 1, 0, 0, 0 } } } }, { "vfpclasspd", 0x6666, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, + 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 1, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 1, 1, 1, 0, 0, 0 } }, + { { 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 } } } }, + { "vfpclasspd", 0x6666, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 2, 0, 0, 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, + 0, 0, 0, 2, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 1, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 1, 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 } } } }, { "vfpclasspdz", 0x6666, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 2, 0, 0, 0, 0, 1, 2, 4, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, + 0, 0, 1, 2, 4, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 1, 1, 0 } }, + 0, 0, 0, 1, 0, 1, 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 } } } }, { "vfpclasspdx", 0x6666, None, 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, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 2, 0, 0, 0, 0, 2, 2, 4, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, + 0, 0, 2, 2, 4, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "vfpclasspdy", 0x6666, None, 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, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 2, 0, 0, 0, 0, 3, 2, 4, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, + 0, 0, 3, 2, 4, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 1, 0, 1, 0 } }, + 0, 0, 1, 0, 0, 1, 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 } } } }, { "vfpclassps", 0x6666, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, + 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 1, 0, 0 }, + { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 1, 1, 0, 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 } } } }, + { "vfpclassps", 0x6666, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 2, 0, 0, 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, + 0, 0, 0, 2, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 1, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 1, 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 } } } }, { "vfpclasspsz", 0x6666, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 2, 0, 0, 0, 0, 1, 2, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, + 0, 0, 1, 2, 3, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 1, 1, 0 } }, + 0, 0, 0, 1, 0, 1, 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 } } } }, { "vfpclasspsx", 0x6666, None, 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, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 2, 0, 0, 0, 0, 2, 2, 3, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, + 0, 0, 2, 2, 3, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "vfpclasspsy", 0x6666, None, 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, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 2, 0, 0, 0, 0, 3, 2, 3, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, + 0, 0, 3, 2, 3, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 1, 0, 1, 0 } }, + 0, 0, 1, 0, 0, 1, 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 } } } }, { "vpmovd2m", 0xF339, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "vpmovq2m", 0xF339, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 1, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, + 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "vpmovm2d", 0xF338, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 5, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vpmovm2q", 0xF338, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 1, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, + 0, 0, 5, 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 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vpmullq", 0x6640, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 1, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vrangepd", 0x6650, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 2, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vrangepd", 0x6650, None, 1, 5, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 2, 0, 0, 0, 0, 1, 3, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 0, 0, + 0, 0, 1, 3, 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, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } } } }, + 0, 0, 0, 1, 0, 0, 0 } } } }, { "vreducepd", 0x6656, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 2, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vreducepd", 0x6656, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 2, 0, 0, 0, 0, 1, 3, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, + 0, 0, 1, 3, 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, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } } } }, + 0, 0, 0, 1, 0, 0, 0 } } } }, { "vrangeps", 0x6650, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 2, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vrangeps", 0x6650, None, 1, 5, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 2, 0, 0, 0, 0, 1, 3, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 0, 0, + 0, 0, 1, 3, 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, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } } } }, + 0, 0, 0, 1, 0, 0, 0 } } } }, { "vreduceps", 0x6656, None, 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, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 2, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vreduceps", 0x6656, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 2, 0, 0, 0, 0, 1, 3, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, + 0, 0, 1, 3, 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, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } } } }, + 0, 0, 0, 1, 0, 0, 0 } } } }, { "vrangesd", 0x6651, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 2, 0, 0, 0, 0, 4, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 0, 0, + 0, 0, 4, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "vrangesd", 0x6651, None, 1, 5, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 2, 0, 0, 0, 0, 4, 3, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 0, 0, + 0, 0, 4, 3, 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, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 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 } } } }, { "vreducesd", 0x6657, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 2, 0, 0, 0, 0, 4, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 0, 0, + 0, 0, 4, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "vreducesd", 0x6657, None, 1, 5, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 2, 0, 0, 0, 0, 4, 3, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 0, 0, + 0, 0, 4, 3, 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, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 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 } } } }, { "vrangess", 0x6651, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 2, 0, 0, 0, 0, 4, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 0, 0, + 0, 0, 4, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "vrangess", 0x6651, None, 1, 5, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 2, 0, 0, 0, 0, 4, 3, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 0, 0, + 0, 0, 4, 3, 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, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 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 } } } }, { "vreducess", 0x6657, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 2, 0, 0, 0, 0, 4, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 0, 0, + 0, 0, 4, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "vreducess", 0x6657, None, 1, 5, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 2, 0, 0, 0, 0, 4, 3, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 0, 0, + 0, 0, 4, 3, 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, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 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 } }, { { 7, 0, 0, 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 } } } }, { "clwb", 0x660fae, 0x6, 2, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "vpmadd52huq", 0x66B5, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 2, - 1, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vpmadd52luq", 0x66B4, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 2, - 1, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vpmultishiftqb", 0x6683, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 2, - 1, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vpermb", 0x668D, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, - 1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vpermi2b", 0x6675, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, - 1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vpermt2b", 0x667D, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, - 1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "v4fmaddps", 0xf29a, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 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, 1, 3, 0, 0, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 1, 3, 0, 0, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } } } }, + 0, 0, 0, 1, 0, 0, 0 } } } }, { "v4fnmaddps", 0xf2aa, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 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, 1, 3, 0, 0, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 1, 3, 0, 0, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } } } }, + 0, 0, 0, 1, 0, 0, 0 } } } }, { "v4fmaddss", 0xf29b, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 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, 4, 3, 0, 0, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 4, 3, 0, 0, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "v4fnmaddss", 0xf2ab, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 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, 4, 3, 0, 0, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 4, 3, 0, 0, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } }, + 0, 1, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "vp4dpwssd", 0xf252, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 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, 1, 3, 0, 0, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 1, 3, 0, 0, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } } } }, + 0, 0, 0, 1, 0, 0, 0 } } } }, { "vp4dpwssds", 0xf253, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 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, 1, 3, 0, 0, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 1, 3, 0, 0, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 0 } }, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } }, + 0, 0, 0, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0 } } } }, + 0, 0, 0, 1, 0, 0, 0 } } } }, { "vpopcntd", 0x6655, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, - 1, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vpopcntq", 0x6655, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 2, - 1, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vpcompressb", 0x6663, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, - 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } } } }, + 0, 1, 1, 1, 0, 1, 0 } } } }, { "vpcompressw", 0x6663, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 2, - 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, + 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } } } }, + 0, 1, 1, 1, 0, 1, 0 } } } }, { "vpexpandb", 0x6662, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, - 1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vpexpandw", 0x6662, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 2, - 1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vpshldvd", 0x6671, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, - 1, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vpshrdvd", 0x6673, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, - 1, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vpshldvq", 0x6671, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 2, - 1, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vpshrdvq", 0x6673, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 2, - 1, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vpshldvw", 0x6670, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 2, - 1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vpshrdvw", 0x6672, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 2, - 1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vpshldd", 0x6671, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, - 2, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vpshrdd", 0x6673, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, - 2, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vpshldq", 0x6671, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 2, - 2, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vpshrdq", 0x6673, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 2, - 2, 0, 0, 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 0, 0, + 0, 0, 0, 3, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vpshldw", 0x6670, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 2, - 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vpshrdw", 0x6672, None, 1, 4, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 2, - 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vpdpbusd", 0x6650, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, - 1, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vpdpwssd", 0x6652, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, - 1, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vpdpbusds", 0x6651, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, - 1, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vpdpwssds", 0x6653, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, - 1, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vpopcntb", 0x6654, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, - 1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vpopcntw", 0x6654, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 2, - 1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vpshufbitqmb", 0x668f, None, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "clzero", 0xf01fc, None, 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, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "clzero", 0xf01fc, None, 3, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 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, 0, 0, 0, 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, 0, 0, 0, 0, 0 } } } }, - { "clzero", 0xf01fc, None, 3, 1, - { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 1, 1, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "monitorx", 0xf01fa, None, 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, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, - { "monitorx", 0xf01fa, None, 3, 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, 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, 1, 1, 1, 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, 0, 0, 0, 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, 0, 0, 0, 0, 0 } }, - { { 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0 } }, - { { 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "monitorx", 0xf01fa, None, 3, 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, 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, 1, 1, 1, 1, 1, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } }, { { 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "monitorx", 0xf01fa, None, 3, 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, 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, 1, 1, 1, 1, 1, 1, 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, 1, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, { { 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "mwaitx", 0xf01fb, None, 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, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "mwaitx", 0xf01fb, None, 3, 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, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 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, 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, 2, 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, 4, 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 } } } }, { "rdpkru", 0xf01ee, None, 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, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "wrpkru", 0xf01ef, None, 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, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "rdpid", 0xf30fc7, 0x7, 2, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { "rdpid", 0xf30fc7, 0x7, 2, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 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 }, { { { 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 } } } }, { "ptwrite", 0xf30fae, 0x4, 2, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 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 }, - { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 1, 0 } } } }, + { "ptwrite", 0xf30fae, 0x4, 2, 1, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "incsspd", 0xf30fae, 0x5, 2, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 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, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { "incsspq", 0xf30fae, 0x5, 2, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { "rdsspd", 0xf30f1e, 0x1, 2, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 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, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { "rdsspq", 0xf30f1e, 0x1, 2, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, { "saveprevssp", 0xf30f01ea, None, 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, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "rstorssp", 0xf30f01, 0x5, 2, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "wrssd", 0x0f38f6, None, 3, 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, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 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, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "wrssq", 0x0f38f6, None, 3, 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, 1, 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, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 3, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "wrussd", 0x660f38f5, None, 3, 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, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 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, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "wrussq", 0x660f38f5, None, 3, 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, 1, 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, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 3, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "setssbsy", 0xf30f01e8, None, 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, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "clrssbsy", 0xf30fae, 0x6, 2, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "endbr64", 0xf30f1efa, None, 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, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "endbr32", 0xf30f1efb, None, 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, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "notrack", 0x3e, None, 1, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "wbnoinvd", 0xf30f09, None, 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, 1, - 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "pconfig", 0x0f01c5, None, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 1, 1, 0, + 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "umonitor", 0xf30fae, 0x6, 2, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 } } } }, - { "umonitor", 0xf30fae, 0x6, 2, 1, + 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "tpause", 0x660fae, 0x6, 2, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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 } } } }, - { "tpause", 0x660fae, 0x6, 2, 1, + 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "tpause", 0x660fae, 0x6, 2, 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, 0, 0, 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, 1, 1, 1, 1, 1, 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 }, - { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, + 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 } } } }, { "umwait", 0xf20fae, 0x6, 2, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 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 }, - { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "cldemote", 0x0f1c, 0x0, 2, 1, + 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "umwait", 0xf20fae, 0x6, 2, 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, 0, 0, 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, 1, 0, 1, 1, 1, 1, 1, 1, 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, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, - { "movdiri", 0xf38f9, None, 3, 2, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, + 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 } } } }, + { "cldemote", 0x0f1c, 0x0, 2, 1, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 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, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } }, - { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 1, 0 } } } }, - { "movdir64b", 0x660f38f8, None, 3, 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, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "movdiri", 0xf38f9, None, 3, 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, 1, 0, 0, 0, 0, 1, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 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, 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, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, - 0, 0, 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, 1, 0, 1, 1, 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, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } }, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 1, 0 } } } }, { "movdir64b", 0x660f38f8, None, 3, 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, 1, 0, 0, 0, 1, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "vcvtne2ps2bf16", 0xf272, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, - 1, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "vcvtneps2bf16", 0xf372, None, 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, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 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, 2, 3, 3, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 1, 3, 3, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 0, 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, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 0, 1, 0, 0, 0, 0 } } } }, { "vcvtneps2bf16", 0xf372, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 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, 3, 3, 3, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 1, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 1, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "vcvtneps2bf16", 0xf372, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 1, 3, 3, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 1, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 1, 1, 0 } }, + 0, 1, 1, 0, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "vcvtneps2bf16x", 0xf372, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 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, 2, 3, 0, 0, 0, 4, 0, 0, 0, 0, 1, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 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, 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, 1, 1, 0, 0, + 0, 0, 2, 3, 3, 0, 0, 4, 0, 0, 0, 0, 0, 1, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "vcvtneps2bf16y", 0xf372, None, 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, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 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, 3, 3, 0, 0, 0, 5, 0, 0, 0, 0, 1, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 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, 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, 1, 1, 0, 0, + 0, 0, 3, 3, 3, 0, 0, 5, 0, 0, 0, 0, 0, 1, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, + 0, 0, 1, 0, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0 } } } }, + 0, 1, 0, 0, 0, 0, 0 } } } }, { "vdpbf16ps", 0xf352, None, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, - 1, 0, 0, 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 0, 3, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 1, 1, 1, 0, 0, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } } } }, - { "enqcmd", 0xf20f38f8, None, 3, 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, 1, 0, 0, 0, 1, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 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, 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, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 1, 1, 1, 0, 0, 0 } } } }, { "enqcmd", 0xf20f38f8, None, 3, 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, 1, 0, 0, 1, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, - 0, 0, 0, 0, 0, 0 } } } }, - { "enqcmds", 0xf30f38f8, None, 3, 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, 1, 0, 0, 0, 1, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 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, 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, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, - 0, 0, 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, 1, 1, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "enqcmds", 0xf30f38f8, None, 3, 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, 1, 0, 0, 1, 0, 0 } }, - { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0 } }, - { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0 } }, + { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "vp2intersectd", 0xf268, None, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 0, 0, 0, 0, 0, 0, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "vp2intersectq", 0xf268, None, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, - 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, + 0, 0, 0, 0, 4, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 0 } }, + 0, 1, 1, 1, 0, 1, 0 } }, { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0 } }, + 0, 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, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "mcommit", 0xf30f01fa, None, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0 } }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, { "rdpru", 0x0f01fd, None, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 } }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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 } } } }, + { "serialize", 0x0f01e8, None, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "xsusldtrk", 0xf20f01e8, None, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "xresldtrk", 0xf20f01e9, None, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0 } }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "ldtilecfg", 0x49, None, 1, 1, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0 } } } }, + { "sttilecfg", 0x6649, None, 1, 1, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0 } } } }, + { "tdpbf16ps", 0xf35c, None, 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, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, + 0, 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, 0, 0, 0, 1, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0 } } } }, + { "tdpbssd", 0xf25e, None, 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, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, + 0, 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, 0, 0, 0, 1, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0 } } } }, + { "tdpbuud", 0x5e, None, 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, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, + 0, 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, 0, 0, 0, 1, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0 } } } }, + { "tdpbusd", 0x665e, None, 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, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, + 0, 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, 0, 0, 0, 1, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0 } } } }, + { "tdpbsud", 0xf35e, None, 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, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, + 0, 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, 0, 0, 0, 1, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0 } }, + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0 } } } }, + { "tileloadd", 0xf24b, None, 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, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 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, 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, + 0, 0, 0, 0, 1, 0, 0 } } } }, + { "tileloaddt1", 0x664b, None, 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, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 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, 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, + 0, 0, 0, 0, 1, 0, 0 } } } }, + { "tilestored", 0xf34b, None, 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, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } }, + { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0 } }, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0 } } } }, + { "tilerelease", 0x49c0, None, 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, 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, 1, 1, 1, 1, 1, 1, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } }, + 0, 0, 0, 0, 0, 0, 0 } } } }, + { "tilezero", 0xf249, None, 1, 1, + { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0 } } } }, { NULL, 0, 0, 0, 0, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } } } } + 0, 0, 0, 0, 0, 0, 0 } } } } }; /* i386 register table. */ @@ -58468,1127 +59630,1159 @@ { { "st", { { 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 } }, + 1, 0, 0, 0, 0, 0, 0 } }, 0, 0, { 11, 33 } }, { "al", { { 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, 0, 0, { Dw2Inval, Dw2Inval } }, { "cl", { { 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, 0, 1, { Dw2Inval, Dw2Inval } }, { "dl", { { 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, 2, { Dw2Inval, Dw2Inval } }, { "bl", { { 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, 3, { Dw2Inval, Dw2Inval } }, { "ah", { { 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, 4, { Dw2Inval, Dw2Inval } }, { "ch", { { 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, 5, { Dw2Inval, Dw2Inval } }, { "dh", { { 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, 6, { Dw2Inval, Dw2Inval } }, { "bh", { { 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, 7, { Dw2Inval, Dw2Inval } }, { "axl", { { 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 } }, RegRex64, 0, { Dw2Inval, Dw2Inval } }, { "cxl", { { 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 } }, RegRex64, 1, { Dw2Inval, Dw2Inval } }, { "dxl", { { 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 } }, RegRex64, 2, { Dw2Inval, Dw2Inval } }, { "bxl", { { 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 } }, RegRex64, 3, { Dw2Inval, Dw2Inval } }, { "spl", { { 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 } }, RegRex64, 4, { Dw2Inval, Dw2Inval } }, { "bpl", { { 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 } }, RegRex64, 5, { Dw2Inval, Dw2Inval } }, { "sil", { { 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 } }, RegRex64, 6, { Dw2Inval, Dw2Inval } }, { "dil", { { 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 } }, RegRex64, 7, { Dw2Inval, Dw2Inval } }, { "r8b", { { 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 } }, RegRex|RegRex64, 0, { Dw2Inval, Dw2Inval } }, { "r9b", { { 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 } }, RegRex|RegRex64, 1, { Dw2Inval, Dw2Inval } }, { "r10b", { { 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 } }, RegRex|RegRex64, 2, { Dw2Inval, Dw2Inval } }, { "r11b", { { 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 } }, RegRex|RegRex64, 3, { Dw2Inval, Dw2Inval } }, { "r12b", { { 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 } }, RegRex|RegRex64, 4, { Dw2Inval, Dw2Inval } }, { "r13b", { { 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 } }, RegRex|RegRex64, 5, { Dw2Inval, Dw2Inval } }, { "r14b", { { 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 } }, RegRex|RegRex64, 6, { Dw2Inval, Dw2Inval } }, { "r15b", { { 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 } }, RegRex|RegRex64, 7, { Dw2Inval, Dw2Inval } }, { "ax", { { 1, 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, { Dw2Inval, Dw2Inval } }, { "cx", { { 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, 1, { Dw2Inval, Dw2Inval } }, { "dx", { { 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, 0, 2, { Dw2Inval, Dw2Inval } }, { "bx", { { 1, 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, 3, { Dw2Inval, Dw2Inval } }, { "sp", { { 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, 4, { Dw2Inval, Dw2Inval } }, { "bp", { { 1, 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, 5, { Dw2Inval, Dw2Inval } }, { "si", { { 1, 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, 6, { Dw2Inval, Dw2Inval } }, { "di", { { 1, 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, 7, { Dw2Inval, Dw2Inval } }, { "r8w", { { 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 } }, RegRex, 0, { Dw2Inval, Dw2Inval } }, { "r9w", { { 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 } }, RegRex, 1, { Dw2Inval, Dw2Inval } }, { "r10w", { { 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 } }, RegRex, 2, { Dw2Inval, Dw2Inval } }, { "r11w", { { 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 } }, RegRex, 3, { Dw2Inval, Dw2Inval } }, { "r12w", { { 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 } }, RegRex, 4, { Dw2Inval, Dw2Inval } }, { "r13w", { { 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 } }, RegRex, 5, { Dw2Inval, Dw2Inval } }, { "r14w", { { 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 } }, RegRex, 6, { Dw2Inval, Dw2Inval } }, { "r15w", { { 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 } }, RegRex, 7, { Dw2Inval, Dw2Inval } }, { "eax", { { 1, 1, 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, Dw2Inval } }, { "ecx", { { 1, 2, 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, 1, { 1, Dw2Inval } }, { "edx", { { 1, 3, 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, 2, { 2, Dw2Inval } }, { "ebx", { { 1, 4, 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, 3, { 3, Dw2Inval } }, { "esp", { { 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, 4, { 4, Dw2Inval } }, { "ebp", { { 1, 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, 5, { 5, Dw2Inval } }, { "esi", { { 1, 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, 6, { 6, Dw2Inval } }, { "edi", { { 1, 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, 7, { 7, Dw2Inval } }, { "r8d", { { 1, 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 } }, RegRex, 0, { Dw2Inval, Dw2Inval } }, { "r9d", { { 1, 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 } }, RegRex, 1, { Dw2Inval, Dw2Inval } }, { "r10d", { { 1, 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 } }, RegRex, 2, { Dw2Inval, Dw2Inval } }, { "r11d", { { 1, 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 } }, RegRex, 3, { Dw2Inval, Dw2Inval } }, { "r12d", { { 1, 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 } }, RegRex, 4, { Dw2Inval, Dw2Inval } }, { "r13d", { { 1, 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 } }, RegRex, 5, { Dw2Inval, Dw2Inval } }, { "r14d", { { 1, 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 } }, RegRex, 6, { Dw2Inval, Dw2Inval } }, { "r15d", { { 1, 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 } }, RegRex, 7, { Dw2Inval, Dw2Inval } }, { "rax", { { 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, 0, 0, { Dw2Inval, 0 } }, { "rcx", { { 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, 0, 1, { Dw2Inval, 2 } }, { "rdx", { { 1, 3, 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, 2, { Dw2Inval, 1 } }, { "rbx", { { 1, 4, 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, 3, { Dw2Inval, 3 } }, { "rsp", { { 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, 4, { Dw2Inval, 7 } }, { "rbp", { { 1, 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, 5, { Dw2Inval, 6 } }, { "rsi", { { 1, 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, 6, { Dw2Inval, 4 } }, { "rdi", { { 1, 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, 7, { Dw2Inval, 5 } }, { "r8", { { 1, 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 } }, RegRex, 0, { Dw2Inval, 8 } }, { "r9", { { 1, 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 } }, RegRex, 1, { Dw2Inval, 9 } }, { "r10", { { 1, 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 } }, RegRex, 2, { Dw2Inval, 10 } }, { "r11", { { 1, 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 } }, RegRex, 3, { Dw2Inval, 11 } }, { "r12", { { 1, 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 } }, RegRex, 4, { Dw2Inval, 12 } }, { "r13", { { 1, 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 } }, RegRex, 5, { Dw2Inval, 13 } }, { "r14", { { 1, 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 } }, RegRex, 6, { Dw2Inval, 14 } }, { "r15", { { 1, 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 } }, RegRex, 7, { Dw2Inval, 15 } }, { "k0", { { 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, { 93, 118 } }, { "k1", { { 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, 1, { 94, 119 } }, { "k2", { { 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, 2, { 95, 120 } }, { "k3", { { 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, 3, { 96, 121 } }, { "k4", { { 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, 4, { 97, 122 } }, { "k5", { { 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, 5, { 98, 123 } }, { "k6", { { 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, 6, { 99, 124 } }, { "k7", { { 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, 7, { 100, 125 } }, { "es", { { 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, { 40, 50 } }, { "cs", { { 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, 1, { 41, 51 } }, { "ss", { { 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, 2, { 42, 52 } }, { "ds", { { 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, 3, { 43, 53 } }, { "fs", { { 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, 4, { 44, 54 } }, { "gs", { { 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, 5, { 45, 55 } }, { "flat", { { 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, RegFlat, { Dw2Inval, Dw2Inval } }, { "cr0", { { 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, { Dw2Inval, Dw2Inval } }, { "cr1", { { 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, 1, { Dw2Inval, Dw2Inval } }, { "cr2", { { 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, 2, { Dw2Inval, Dw2Inval } }, { "cr3", { { 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, 3, { Dw2Inval, Dw2Inval } }, { "cr4", { { 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, 4, { Dw2Inval, Dw2Inval } }, { "cr5", { { 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, 5, { Dw2Inval, Dw2Inval } }, { "cr6", { { 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, 6, { Dw2Inval, Dw2Inval } }, { "cr7", { { 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, 7, { Dw2Inval, Dw2Inval } }, { "cr8", { { 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 } }, RegRex, 0, { Dw2Inval, Dw2Inval } }, { "cr9", { { 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 } }, RegRex, 1, { Dw2Inval, Dw2Inval } }, { "cr10", { { 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 } }, RegRex, 2, { Dw2Inval, Dw2Inval } }, { "cr11", { { 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 } }, RegRex, 3, { Dw2Inval, Dw2Inval } }, { "cr12", { { 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 } }, RegRex, 4, { Dw2Inval, Dw2Inval } }, { "cr13", { { 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 } }, RegRex, 5, { Dw2Inval, Dw2Inval } }, { "cr14", { { 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 } }, RegRex, 6, { Dw2Inval, Dw2Inval } }, { "cr15", { { 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 } }, RegRex, 7, { Dw2Inval, Dw2Inval } }, { "db0", { { 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, 0, 0, { Dw2Inval, Dw2Inval } }, { "db1", { { 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, 0, 1, { Dw2Inval, Dw2Inval } }, { "db2", { { 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, 0, 2, { Dw2Inval, Dw2Inval } }, { "db3", { { 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, 0, 3, { Dw2Inval, Dw2Inval } }, { "db4", { { 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, 0, 4, { Dw2Inval, Dw2Inval } }, { "db5", { { 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, 0, 5, { Dw2Inval, Dw2Inval } }, { "db6", { { 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, 0, 6, { Dw2Inval, Dw2Inval } }, { "db7", { { 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, 0, 7, { Dw2Inval, Dw2Inval } }, { "db8", { { 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, RegRex, 0, { Dw2Inval, Dw2Inval } }, { "db9", { { 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, RegRex, 1, { Dw2Inval, Dw2Inval } }, { "db10", { { 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, RegRex, 2, { Dw2Inval, Dw2Inval } }, { "db11", { { 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, RegRex, 3, { Dw2Inval, Dw2Inval } }, { "db12", { { 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, RegRex, 4, { Dw2Inval, Dw2Inval } }, { "db13", { { 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, RegRex, 5, { Dw2Inval, Dw2Inval } }, { "db14", { { 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, RegRex, 6, { Dw2Inval, Dw2Inval } }, { "db15", { { 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, RegRex, 7, { Dw2Inval, Dw2Inval } }, { "dr0", { { 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, 0, 0, { Dw2Inval, Dw2Inval } }, { "dr1", { { 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, 0, 1, { Dw2Inval, Dw2Inval } }, { "dr2", { { 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, 0, 2, { Dw2Inval, Dw2Inval } }, { "dr3", { { 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, 0, 3, { Dw2Inval, Dw2Inval } }, { "dr4", { { 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, 0, 4, { Dw2Inval, Dw2Inval } }, { "dr5", { { 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, 0, 5, { Dw2Inval, Dw2Inval } }, { "dr6", { { 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, 0, 6, { Dw2Inval, Dw2Inval } }, { "dr7", { { 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, 0, 7, { Dw2Inval, Dw2Inval } }, { "dr8", { { 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, RegRex, 0, { Dw2Inval, Dw2Inval } }, { "dr9", { { 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, RegRex, 1, { Dw2Inval, Dw2Inval } }, { "dr10", { { 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, RegRex, 2, { Dw2Inval, Dw2Inval } }, { "dr11", { { 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, RegRex, 3, { Dw2Inval, Dw2Inval } }, { "dr12", { { 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, RegRex, 4, { Dw2Inval, Dw2Inval } }, { "dr13", { { 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, RegRex, 5, { Dw2Inval, Dw2Inval } }, { "dr14", { { 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, RegRex, 6, { Dw2Inval, Dw2Inval } }, { "dr15", { { 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, RegRex, 7, { Dw2Inval, Dw2Inval } }, { "tr0", { { 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, 0, 0, { Dw2Inval, Dw2Inval } }, { "tr1", { { 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, 0, 1, { Dw2Inval, Dw2Inval } }, { "tr2", { { 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, 0, 2, { Dw2Inval, Dw2Inval } }, { "tr3", { { 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, 0, 3, { Dw2Inval, Dw2Inval } }, { "tr4", { { 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, 0, 4, { Dw2Inval, Dw2Inval } }, { "tr5", { { 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, 0, 5, { Dw2Inval, Dw2Inval } }, { "tr6", { { 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, 0, 6, { Dw2Inval, Dw2Inval } }, { "tr7", { { 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, 0, 7, { Dw2Inval, Dw2Inval } }, { "mm0", { { 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, { 29, 41 } }, { "mm1", { { 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, 1, { 30, 42 } }, { "mm2", { { 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, 2, { 31, 43 } }, { "mm3", { { 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, 3, { 32, 44 } }, { "mm4", { { 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, 4, { 33, 45 } }, { "mm5", { { 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, 5, { 34, 46 } }, { "mm6", { { 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, 6, { 35, 47 } }, { "mm7", { { 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, 7, { 36, 48 } }, { "xmm0", { { 7, 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, 1, 0, 0, 0, 0, 0 } }, 0, 0, { 21, 17 } }, { "xmm1", { { 7, 0, 0, 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, { 22, 18 } }, { "xmm2", { { 7, 0, 0, 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, 2, { 23, 19 } }, { "xmm3", { { 7, 0, 0, 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, 3, { 24, 20 } }, { "xmm4", { { 7, 0, 0, 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, 4, { 25, 21 } }, { "xmm5", { { 7, 0, 0, 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, 5, { 26, 22 } }, { "xmm6", { { 7, 0, 0, 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, 6, { 27, 23 } }, { "xmm7", { { 7, 0, 0, 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, 7, { 28, 24 } }, { "xmm8", { { 7, 0, 0, 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 } }, RegRex, 0, { Dw2Inval, 25 } }, { "xmm9", { { 7, 0, 0, 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 } }, RegRex, 1, { Dw2Inval, 26 } }, { "xmm10", { { 7, 0, 0, 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 } }, RegRex, 2, { Dw2Inval, 27 } }, { "xmm11", { { 7, 0, 0, 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 } }, RegRex, 3, { Dw2Inval, 28 } }, { "xmm12", { { 7, 0, 0, 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 } }, RegRex, 4, { Dw2Inval, 29 } }, { "xmm13", { { 7, 0, 0, 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 } }, RegRex, 5, { Dw2Inval, 30 } }, { "xmm14", { { 7, 0, 0, 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 } }, RegRex, 6, { Dw2Inval, 31 } }, { "xmm15", { { 7, 0, 0, 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 } }, RegRex, 7, { Dw2Inval, 32 } }, { "xmm16", { { 7, 0, 0, 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 } }, RegVRex, 0, { Dw2Inval, 67 } }, { "xmm17", { { 7, 0, 0, 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 } }, RegVRex, 1, { Dw2Inval, 68 } }, { "xmm18", { { 7, 0, 0, 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 } }, RegVRex, 2, { Dw2Inval, 69 } }, { "xmm19", { { 7, 0, 0, 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 } }, RegVRex, 3, { Dw2Inval, 70 } }, { "xmm20", { { 7, 0, 0, 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 } }, RegVRex, 4, { Dw2Inval, 71 } }, { "xmm21", { { 7, 0, 0, 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 } }, RegVRex, 5, { Dw2Inval, 72 } }, { "xmm22", { { 7, 0, 0, 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 } }, RegVRex, 6, { Dw2Inval, 73 } }, { "xmm23", { { 7, 0, 0, 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 } }, RegVRex, 7, { Dw2Inval, 74 } }, { "xmm24", { { 7, 0, 0, 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 } }, RegVRex|RegRex, 0, { Dw2Inval, 75 } }, { "xmm25", { { 7, 0, 0, 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 } }, RegVRex|RegRex, 1, { Dw2Inval, 76 } }, { "xmm26", { { 7, 0, 0, 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 } }, RegVRex|RegRex, 2, { Dw2Inval, 77 } }, { "xmm27", { { 7, 0, 0, 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 } }, RegVRex|RegRex, 3, { Dw2Inval, 78 } }, { "xmm28", { { 7, 0, 0, 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 } }, RegVRex|RegRex, 4, { Dw2Inval, 79 } }, { "xmm29", { { 7, 0, 0, 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 } }, RegVRex|RegRex, 5, { Dw2Inval, 80 } }, { "xmm30", { { 7, 0, 0, 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 } }, RegVRex|RegRex, 6, { Dw2Inval, 81 } }, { "xmm31", { { 7, 0, 0, 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 } }, RegVRex|RegRex, 7, { Dw2Inval, 82 } }, { "ymm0", { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0 } }, 0, 0, { Dw2Inval, Dw2Inval } }, { "ymm1", { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0 } }, 0, 1, { Dw2Inval, Dw2Inval } }, { "ymm2", { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0 } }, 0, 2, { Dw2Inval, Dw2Inval } }, { "ymm3", { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0 } }, 0, 3, { Dw2Inval, Dw2Inval } }, { "ymm4", { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0 } }, 0, 4, { Dw2Inval, Dw2Inval } }, { "ymm5", { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0 } }, 0, 5, { Dw2Inval, Dw2Inval } }, { "ymm6", { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0 } }, 0, 6, { Dw2Inval, Dw2Inval } }, { "ymm7", { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0 } }, 0, 7, { Dw2Inval, Dw2Inval } }, { "ymm8", { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0 } }, RegRex, 0, { Dw2Inval, Dw2Inval } }, { "ymm9", { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0 } }, RegRex, 1, { Dw2Inval, Dw2Inval } }, { "ymm10", { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0 } }, RegRex, 2, { Dw2Inval, Dw2Inval } }, { "ymm11", { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0 } }, RegRex, 3, { Dw2Inval, Dw2Inval } }, { "ymm12", { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0 } }, RegRex, 4, { Dw2Inval, Dw2Inval } }, { "ymm13", { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0 } }, RegRex, 5, { Dw2Inval, Dw2Inval } }, { "ymm14", { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0 } }, RegRex, 6, { Dw2Inval, Dw2Inval } }, { "ymm15", { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0 } }, RegRex, 7, { Dw2Inval, Dw2Inval } }, { "ymm16", { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0 } }, RegVRex, 0, { Dw2Inval, Dw2Inval } }, { "ymm17", { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0 } }, RegVRex, 1, { Dw2Inval, Dw2Inval } }, { "ymm18", { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0 } }, RegVRex, 2, { Dw2Inval, Dw2Inval } }, { "ymm19", { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0 } }, RegVRex, 3, { Dw2Inval, Dw2Inval } }, { "ymm20", { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0 } }, RegVRex, 4, { Dw2Inval, Dw2Inval } }, { "ymm21", { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0 } }, RegVRex, 5, { Dw2Inval, Dw2Inval } }, { "ymm22", { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0 } }, RegVRex, 6, { Dw2Inval, Dw2Inval } }, { "ymm23", { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0 } }, RegVRex, 7, { Dw2Inval, Dw2Inval } }, { "ymm24", { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0 } }, RegVRex|RegRex, 0, { Dw2Inval, Dw2Inval } }, { "ymm25", { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0 } }, RegVRex|RegRex, 1, { Dw2Inval, Dw2Inval } }, { "ymm26", { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0 } }, RegVRex|RegRex, 2, { Dw2Inval, Dw2Inval } }, { "ymm27", { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0 } }, RegVRex|RegRex, 3, { Dw2Inval, Dw2Inval } }, { "ymm28", { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0 } }, RegVRex|RegRex, 4, { Dw2Inval, Dw2Inval } }, { "ymm29", { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0 } }, RegVRex|RegRex, 5, { Dw2Inval, Dw2Inval } }, { "ymm30", { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0 } }, RegVRex|RegRex, 6, { Dw2Inval, Dw2Inval } }, { "ymm31", { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0 } }, + 0, 0, 1, 0, 0, 0, 0 } }, RegVRex|RegRex, 7, { Dw2Inval, Dw2Inval } }, { "zmm0", { { 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, 1, 0, 0, 0 } }, 0, 0, { Dw2Inval, Dw2Inval } }, { "zmm1", { { 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, 1, 0, 0, 0 } }, 0, 1, { Dw2Inval, Dw2Inval } }, { "zmm2", { { 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, 1, 0, 0, 0 } }, 0, 2, { Dw2Inval, Dw2Inval } }, { "zmm3", { { 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, 1, 0, 0, 0 } }, 0, 3, { Dw2Inval, Dw2Inval } }, { "zmm4", { { 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, 1, 0, 0, 0 } }, 0, 4, { Dw2Inval, Dw2Inval } }, { "zmm5", { { 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, 1, 0, 0, 0 } }, 0, 5, { Dw2Inval, Dw2Inval } }, { "zmm6", { { 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, 1, 0, 0, 0 } }, 0, 6, { Dw2Inval, Dw2Inval } }, { "zmm7", { { 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, 1, 0, 0, 0 } }, 0, 7, { Dw2Inval, Dw2Inval } }, { "zmm8", { { 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, 1, 0, 0, 0 } }, RegRex, 0, { Dw2Inval, Dw2Inval } }, { "zmm9", { { 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, 1, 0, 0, 0 } }, RegRex, 1, { Dw2Inval, Dw2Inval } }, { "zmm10", { { 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, 1, 0, 0, 0 } }, RegRex, 2, { Dw2Inval, Dw2Inval } }, { "zmm11", { { 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, 1, 0, 0, 0 } }, RegRex, 3, { Dw2Inval, Dw2Inval } }, { "zmm12", { { 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, 1, 0, 0, 0 } }, RegRex, 4, { Dw2Inval, Dw2Inval } }, { "zmm13", { { 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, 1, 0, 0, 0 } }, RegRex, 5, { Dw2Inval, Dw2Inval } }, { "zmm14", { { 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, 1, 0, 0, 0 } }, RegRex, 6, { Dw2Inval, Dw2Inval } }, { "zmm15", { { 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, 1, 0, 0, 0 } }, RegRex, 7, { Dw2Inval, Dw2Inval } }, { "zmm16", { { 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, 1, 0, 0, 0 } }, RegVRex, 0, { Dw2Inval, Dw2Inval } }, { "zmm17", { { 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, 1, 0, 0, 0 } }, RegVRex, 1, { Dw2Inval, Dw2Inval } }, { "zmm18", { { 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, 1, 0, 0, 0 } }, RegVRex, 2, { Dw2Inval, Dw2Inval } }, { "zmm19", { { 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, 1, 0, 0, 0 } }, RegVRex, 3, { Dw2Inval, Dw2Inval } }, { "zmm20", { { 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, 1, 0, 0, 0 } }, RegVRex, 4, { Dw2Inval, Dw2Inval } }, { "zmm21", { { 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, 1, 0, 0, 0 } }, RegVRex, 5, { Dw2Inval, Dw2Inval } }, { "zmm22", { { 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, 1, 0, 0, 0 } }, RegVRex, 6, { Dw2Inval, Dw2Inval } }, { "zmm23", { { 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, 1, 0, 0, 0 } }, RegVRex, 7, { Dw2Inval, Dw2Inval } }, { "zmm24", { { 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, 1, 0, 0, 0 } }, RegVRex|RegRex, 0, { Dw2Inval, Dw2Inval } }, { "zmm25", { { 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, 1, 0, 0, 0 } }, RegVRex|RegRex, 1, { Dw2Inval, Dw2Inval } }, { "zmm26", { { 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, 1, 0, 0, 0 } }, RegVRex|RegRex, 2, { Dw2Inval, Dw2Inval } }, { "zmm27", { { 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, 1, 0, 0, 0 } }, RegVRex|RegRex, 3, { Dw2Inval, Dw2Inval } }, { "zmm28", { { 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, 1, 0, 0, 0 } }, RegVRex|RegRex, 4, { Dw2Inval, Dw2Inval } }, { "zmm29", { { 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, 1, 0, 0, 0 } }, RegVRex|RegRex, 5, { Dw2Inval, Dw2Inval } }, { "zmm30", { { 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, 1, 0, 0, 0 } }, RegVRex|RegRex, 6, { Dw2Inval, Dw2Inval } }, { "zmm31", { { 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, 1, 0, 0, 0 } }, RegVRex|RegRex, 7, { Dw2Inval, Dw2Inval } }, + { "tmm0", + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0 } }, + 0, 0, { Dw2Inval, Dw2Inval } }, + { "tmm1", + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0 } }, + 0, 1, { Dw2Inval, Dw2Inval } }, + { "tmm2", + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0 } }, + 0, 2, { Dw2Inval, Dw2Inval } }, + { "tmm3", + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0 } }, + 0, 3, { Dw2Inval, Dw2Inval } }, + { "tmm4", + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0 } }, + 0, 4, { Dw2Inval, Dw2Inval } }, + { "tmm5", + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0 } }, + 0, 5, { Dw2Inval, Dw2Inval } }, + { "tmm6", + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0 } }, + 0, 6, { Dw2Inval, Dw2Inval } }, + { "tmm7", + { { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0 } }, + 0, 7, { Dw2Inval, Dw2Inval } }, { "bnd0", { { 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, { Dw2Inval, Dw2Inval } }, { "bnd1", { { 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, 1, { Dw2Inval, Dw2Inval } }, { "bnd2", { { 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, 2, { Dw2Inval, Dw2Inval } }, { "bnd3", { { 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, 3, { Dw2Inval, Dw2Inval } }, { "rip", { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, RegRex64, RegIP, { Dw2Inval, 16 } }, { "eip", { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, RegRex64, RegIP, { 8, Dw2Inval } }, { "riz", { { 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 } }, RegRex64, RegIZ, { Dw2Inval, Dw2Inval } }, { "eiz", { { 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, RegIZ, { Dw2Inval, Dw2Inval } }, { "st(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 } }, + 1, 0, 0, 0, 0, 0, 0 } }, 0, 0, { 11, 33 } }, { "st(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 } }, + 1, 0, 0, 0, 0, 0, 0 } }, 0, 1, { 12, 34 } }, { "st(2)", { { 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 } }, + 1, 0, 0, 0, 0, 0, 0 } }, 0, 2, { 13, 35 } }, { "st(3)", { { 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 } }, + 1, 0, 0, 0, 0, 0, 0 } }, 0, 3, { 14, 36 } }, { "st(4)", { { 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 } }, + 1, 0, 0, 0, 0, 0, 0 } }, 0, 4, { 15, 37 } }, { "st(5)", { { 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 } }, + 1, 0, 0, 0, 0, 0, 0 } }, 0, 5, { 16, 38 } }, { "st(6)", { { 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 } }, + 1, 0, 0, 0, 0, 0, 0 } }, 0, 6, { 17, 39 } }, { "st(7)", { { 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 } }, + 1, 0, 0, 0, 0, 0, 0 } }, 0, 7, { 18, 40 } }, { "eflags", { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 49 } }, { "rflags", { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, 0, 0, { Dw2Inval, 49 } }, { "fs.base", { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, 0, 0, { Dw2Inval, 58 } }, { "gs.base", { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, 0, 0, { Dw2Inval, 59 } }, { "tr", { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, 0, 0, { 48, 62 } }, { "ldtr", { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, 0, 0, { 49, 63 } }, { "st0", { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, 0, 0, { 11, 33 } }, { "st1", { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, 0, 1, { 12, 34 } }, { "st2", { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, { 13, 35 } }, { "st3", { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, { 14, 36 } }, { "st4", { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, 0, 4, { 15, 37 } }, { "st5", { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, 0, 5, { 16, 38 } }, { "st6", { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, { 17, 39 } }, { "st7", { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, 0, 7, { 18, 40 } }, { "fcw", { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, 0, 0, { 37, 65 } }, { "fsw", { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, 0, 0, { 38, 66 } }, { "mxcsr", { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 } }, + 0, 0, 0, 0, 0, 0, 0 } }, 0, 0, { 39, 64 } }, }; diff -Nru gdb-9.1/opcodes/ia64-asmtab.c gdb-10.2/opcodes/ia64-asmtab.c --- gdb-9.1/opcodes/ia64-asmtab.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/ia64-asmtab.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* This file is automatically generated by ia64-gen. Do not edit! */ -/* Copyright (C) 2007-2019 Free Software Foundation, Inc. +/* Copyright (C) 2007-2020 Free Software Foundation, Inc. This file is part of the GNU opcodes library. diff -Nru gdb-9.1/opcodes/ia64-asmtab.h gdb-10.2/opcodes/ia64-asmtab.h --- gdb-9.1/opcodes/ia64-asmtab.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/ia64-asmtab.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* ia64-asmtab.h -- Header for compacted IA-64 opcode tables. - Copyright (C) 1999-2019 Free Software Foundation, Inc. + Copyright (C) 1999-2020 Free Software Foundation, Inc. Contributed by Bob Manson of Cygnus Support <manson@cygnus.com> This file is part of the GNU opcodes library. diff -Nru gdb-9.1/opcodes/ia64-dis.c gdb-10.2/opcodes/ia64-dis.c --- gdb-9.1/opcodes/ia64-dis.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/ia64-dis.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* ia64-dis.c -- Disassemble ia64 instructions - Copyright (C) 1998-2019 Free Software Foundation, Inc. + Copyright (C) 1998-2020 Free Software Foundation, Inc. Contributed by David Mosberger-Tang <davidm@hpl.hp.com> This file is part of the GNU opcodes library. diff -Nru gdb-9.1/opcodes/ia64-gen.c gdb-10.2/opcodes/ia64-gen.c --- gdb-9.1/opcodes/ia64-gen.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/ia64-gen.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* ia64-gen.c -- Generate a shrunk set of opcode tables - Copyright (C) 1999-2019 Free Software Foundation, Inc. + Copyright (C) 1999-2020 Free Software Foundation, Inc. Written by Bob Manson, Cygnus Solutions, <manson@cygnus.com> This file is part of the GNU opcodes library. @@ -2843,7 +2843,7 @@ collapse_redundant_completers (); printf ("/* This file is automatically generated by ia64-gen. Do not edit! */\n"); - printf ("/* Copyright (C) 2007-2019 Free Software Foundation, Inc.\n\ + printf ("/* Copyright (C) 2007-2020 Free Software Foundation, Inc.\n\ \n\ This file is part of the GNU opcodes library.\n\ \n\ diff -Nru gdb-9.1/opcodes/ia64-opc-a.c gdb-10.2/opcodes/ia64-opc-a.c --- gdb-9.1/opcodes/ia64-opc-a.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/ia64-opc-a.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* ia64-opc-a.c -- IA-64 `A' opcode table. - Copyright (C) 1998-2019 Free Software Foundation, Inc. + Copyright (C) 1998-2020 Free Software Foundation, Inc. Contributed by David Mosberger-Tang <davidm@hpl.hp.com> This file is part of the GNU opcodes library. diff -Nru gdb-9.1/opcodes/ia64-opc-b.c gdb-10.2/opcodes/ia64-opc-b.c --- gdb-9.1/opcodes/ia64-opc-b.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/ia64-opc-b.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* ia64-opc-b.c -- IA-64 `B' opcode table. - Copyright (C) 1998-2019 Free Software Foundation, Inc. + Copyright (C) 1998-2020 Free Software Foundation, Inc. Contributed by David Mosberger-Tang <davidm@hpl.hp.com> This file is part of the GNU opcodes library. diff -Nru gdb-9.1/opcodes/ia64-opc.c gdb-10.2/opcodes/ia64-opc.c --- gdb-9.1/opcodes/ia64-opc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/ia64-opc.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* ia64-opc.c -- Functions to access the compacted opcode table - Copyright (C) 1999-2019 Free Software Foundation, Inc. + Copyright (C) 1999-2020 Free Software Foundation, Inc. Written by Bob Manson of Cygnus Solutions, <manson@cygnus.com> This file is part of the GNU opcodes library. diff -Nru gdb-9.1/opcodes/ia64-opc-d.c gdb-10.2/opcodes/ia64-opc-d.c --- gdb-9.1/opcodes/ia64-opc-d.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/ia64-opc-d.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* ia64-opc-d.c -- IA-64 `D' opcode table. - Copyright (C) 1998-2019 Free Software Foundation, Inc. + Copyright (C) 1998-2020 Free Software Foundation, Inc. Contributed by David Mosberger-Tang <davidm@hpl.hp.com> This file is part of the GNU opcodes library. diff -Nru gdb-9.1/opcodes/ia64-opc-f.c gdb-10.2/opcodes/ia64-opc-f.c --- gdb-9.1/opcodes/ia64-opc-f.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/ia64-opc-f.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* ia64-opc-f.c -- IA-64 `F' opcode table. - Copyright (C) 1998-2019 Free Software Foundation, Inc. + Copyright (C) 1998-2020 Free Software Foundation, Inc. Contributed by David Mosberger-Tang <davidm@hpl.hp.com> This file is part of the GNU opcodes library. diff -Nru gdb-9.1/opcodes/ia64-opc.h gdb-10.2/opcodes/ia64-opc.h --- gdb-9.1/opcodes/ia64-opc.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/ia64-opc.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* ia64-opc.h -- IA-64 opcode table. - Copyright (C) 1998-2019 Free Software Foundation, Inc. + Copyright (C) 1998-2020 Free Software Foundation, Inc. Contributed by David Mosberger-Tang <davidm@hpl.hp.com> This file is part of the GNU opcodes library. diff -Nru gdb-9.1/opcodes/ia64-opc-i.c gdb-10.2/opcodes/ia64-opc-i.c --- gdb-9.1/opcodes/ia64-opc-i.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/ia64-opc-i.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* ia64-opc-i.c -- IA-64 `I' opcode table. - Copyright (C) 1998-2019 Free Software Foundation, Inc. + Copyright (C) 1998-2020 Free Software Foundation, Inc. Contributed by David Mosberger-Tang <davidm@hpl.hp.com> This file is part of the GNU opcodes library. diff -Nru gdb-9.1/opcodes/ia64-opc-m.c gdb-10.2/opcodes/ia64-opc-m.c --- gdb-9.1/opcodes/ia64-opc-m.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/ia64-opc-m.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* ia64-opc-m.c -- IA-64 `M' opcode table. - Copyright (C) 1998-2019 Free Software Foundation, Inc. + Copyright (C) 1998-2020 Free Software Foundation, Inc. Contributed by David Mosberger-Tang <davidm@hpl.hp.com> This file is part of the GNU opcodes library. diff -Nru gdb-9.1/opcodes/ia64-opc-x.c gdb-10.2/opcodes/ia64-opc-x.c --- gdb-9.1/opcodes/ia64-opc-x.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/ia64-opc-x.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* ia64-opc-x.c -- IA-64 `X' opcode table. - Copyright (C) 1998-2019 Free Software Foundation, Inc. + Copyright (C) 1998-2020 Free Software Foundation, Inc. Contributed by Timothy Wall <twall@cygnus.com> This file is part of the GNU opcodes library. diff -Nru gdb-9.1/opcodes/ip2k-asm.c gdb-10.2/opcodes/ip2k-asm.c --- gdb-9.1/opcodes/ip2k-asm.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/ip2k-asm.c 2021-04-25 04:06:26.000000000 +0000 @@ -5,7 +5,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. - the resultant file is machine generated, cgen-asm.in isn't - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of libopcodes. diff -Nru gdb-9.1/opcodes/ip2k-desc.c gdb-10.2/opcodes/ip2k-desc.c --- gdb-9.1/opcodes/ip2k-desc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/ip2k-desc.c 2021-04-25 04:06:26.000000000 +0000 @@ -3,7 +3,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright (C) 1996-2019 Free Software Foundation, Inc. +Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of the GNU Binutils and/or GDB, the GNU debugger. @@ -1045,6 +1045,7 @@ CGEN_CPU_OPEN_MACHS: bitmap of values in enum mach_attr CGEN_CPU_OPEN_BFDMACH: specify 1 mach using bfd name CGEN_CPU_OPEN_ENDIAN: specify endian choice + CGEN_CPU_OPEN_INSN_ENDIAN: specify instruction endian choice CGEN_CPU_OPEN_END: terminates arguments ??? Simultaneous multiple isas might not make sense, but it's not (yet) @@ -1058,6 +1059,7 @@ CGEN_BITSET *isas = 0; /* 0 = "unspecified" */ unsigned int machs = 0; /* 0 = "unspecified" */ enum cgen_endian endian = CGEN_ENDIAN_UNKNOWN; + enum cgen_endian insn_endian = CGEN_ENDIAN_UNKNOWN; va_list ap; if (! init_p) @@ -1092,6 +1094,9 @@ case CGEN_CPU_OPEN_ENDIAN : endian = va_arg (ap, enum cgen_endian); break; + case CGEN_CPU_OPEN_INSN_ENDIAN : + insn_endian = va_arg (ap, enum cgen_endian); + break; default : opcodes_error_handler (/* xgettext:c-format */ @@ -1121,11 +1126,8 @@ cd->isas = cgen_bitset_copy (isas); cd->machs = machs; cd->endian = endian; - /* FIXME: for the sparc case we can determine insn-endianness statically. - The worry here is where both data and insn endian can be independently - chosen, in which case this function will need another argument. - Actually, will want to allow for more arguments in the future anyway. */ - cd->insn_endian = endian; + cd->insn_endian + = (insn_endian == CGEN_ENDIAN_UNKNOWN ? endian : insn_endian); /* Table (re)builder. */ cd->rebuild_tables = ip2k_cgen_rebuild_tables; @@ -1175,18 +1177,10 @@ regfree (CGEN_INSN_RX (insns)); } - if (cd->macro_insn_table.init_entries) - free ((CGEN_INSN *) cd->macro_insn_table.init_entries); - - if (cd->insn_table.init_entries) - free ((CGEN_INSN *) cd->insn_table.init_entries); - - if (cd->hw_table.entries) - free ((CGEN_HW_ENTRY *) cd->hw_table.entries); - - if (cd->operand_table.entries) - free ((CGEN_HW_ENTRY *) cd->operand_table.entries); - + free ((CGEN_INSN *) cd->macro_insn_table.init_entries); + free ((CGEN_INSN *) cd->insn_table.init_entries); + free ((CGEN_HW_ENTRY *) cd->hw_table.entries); + free ((CGEN_HW_ENTRY *) cd->operand_table.entries); free (cd); } diff -Nru gdb-9.1/opcodes/ip2k-desc.h gdb-10.2/opcodes/ip2k-desc.h --- gdb-9.1/opcodes/ip2k-desc.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/ip2k-desc.h 2021-04-25 04:06:26.000000000 +0000 @@ -3,7 +3,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright (C) 1996-2019 Free Software Foundation, Inc. +Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of the GNU Binutils and/or GDB, the GNU debugger. diff -Nru gdb-9.1/opcodes/ip2k-dis.c gdb-10.2/opcodes/ip2k-dis.c --- gdb-9.1/opcodes/ip2k-dis.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/ip2k-dis.c 2021-04-25 04:06:26.000000000 +0000 @@ -5,7 +5,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. - the resultant file is machine generated, cgen-dis.in isn't - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of libopcodes. @@ -461,7 +461,7 @@ /* 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); + 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 @@ -592,6 +592,7 @@ CGEN_BITSET *isa; int mach; int endian; + int insn_endian; CGEN_CPU_DESC cd; } cpu_desc_list; @@ -604,12 +605,16 @@ 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; /* ??? gdb will set mach but leave the architecture as "unknown" */ @@ -675,9 +680,11 @@ prev_isa = cgen_bitset_copy (isa); prev_mach = mach; prev_endian = endian; + prev_insn_endian = insn_endian; cd = ip2k_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 (); diff -Nru gdb-9.1/opcodes/ip2k-ibld.c gdb-10.2/opcodes/ip2k-ibld.c --- gdb-9.1/opcodes/ip2k-ibld.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/ip2k-ibld.c 2021-04-25 04:06:26.000000000 +0000 @@ -4,7 +4,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN: Cpu tools GENerator. - the resultant file is machine generated, cgen-ibld.in isn't - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of libopcodes. @@ -85,20 +85,20 @@ int word_length, unsigned char *bufp) { - unsigned long x,mask; + unsigned long x, mask; int shift; - x = cgen_get_insn_value (cd, bufp, word_length); + x = cgen_get_insn_value (cd, bufp, word_length, cd->endian); /* Written this way to avoid undefined behaviour. */ - mask = (((1L << (length - 1)) - 1) << 1) | 1; + mask = (1UL << (length - 1) << 1) - 1; if (CGEN_INSN_LSB0_P) shift = (start + 1) - length; else shift = (word_length - (start + length)); x = (x & ~(mask << shift)) | ((value & mask) << shift); - cgen_put_insn_value (cd, bufp, word_length, (bfd_vma) x); + cgen_put_insn_value (cd, bufp, word_length, (bfd_vma) x, cd->endian); } #endif /* ! CGEN_INT_INSN_P */ @@ -131,13 +131,15 @@ CGEN_INSN_BYTES_PTR buffer) { static char errbuf[100]; - /* Written this way to avoid undefined behaviour. */ - unsigned long mask = (((1L << (length - 1)) - 1) << 1) | 1; + unsigned long mask; /* If LENGTH is zero, this operand doesn't contribute to the value. */ if (length == 0) return NULL; + /* Written this way to avoid undefined behaviour. */ + mask = (1UL << (length - 1) << 1) - 1; + if (word_length > 8 * sizeof (CGEN_INSN_INT)) abort (); @@ -153,7 +155,7 @@ /* Ensure VALUE will fit. */ if (CGEN_BOOL_ATTR (attrs, CGEN_IFLD_SIGN_OPT)) { - long minval = - (1L << (length - 1)); + long minval = - (1UL << (length - 1)); unsigned long maxval = mask; if ((value > 0 && (unsigned long) value > maxval) @@ -191,8 +193,8 @@ { if (! cgen_signed_overflow_ok_p (cd)) { - long minval = - (1L << (length - 1)); - long maxval = (1L << (length - 1)) - 1; + long minval = - (1UL << (length - 1)); + long maxval = (1UL << (length - 1)) - 1; if (value < minval || value > maxval) { @@ -269,8 +271,8 @@ #else cgen_put_insn_value (cd, buffer, min ((unsigned) cd->base_insn_bitsize, - (unsigned) CGEN_FIELDS_BITSIZE (fields)), - value); + (unsigned) CGEN_FIELDS_BITSIZE (fields)), + value, cd->insn_endian); #endif /* ! CGEN_INT_INSN_P */ @@ -314,7 +316,7 @@ { int shift = insn_length - length; /* Written this way to avoid undefined behaviour. */ - CGEN_INSN_INT mask = (((1L << (length - 1)) - 1) << 1) | 1; + CGEN_INSN_INT mask = length == 0 ? 0 : (1UL << (length - 1) << 1) - 1; *buf = (*buf & ~(mask << shift)) | ((value & mask) << shift); } @@ -387,7 +389,7 @@ unsigned long x; int shift; - x = cgen_get_insn_value (cd, bufp, word_length); + x = cgen_get_insn_value (cd, bufp, word_length, cd->endian); if (CGEN_INSN_LSB0_P) shift = (start + 1) - length; @@ -480,7 +482,10 @@ abort (); if (fill_cache (cd, ex_info, word_offset / 8, word_length / 8, pc) == 0) - return 0; + { + *valuep = 0; + return 0; + } value = extract_1 (cd, ex_info, start, length, word_length, bufp, pc); } @@ -488,12 +493,12 @@ #endif /* ! CGEN_INT_INSN_P */ /* Written this way to avoid undefined behaviour. */ - mask = (((1L << (length - 1)) - 1) << 1) | 1; + mask = (1UL << (length - 1) << 1) - 1; value &= mask; /* sign extend? */ if (CGEN_BOOL_ATTR (attrs, CGEN_IFLD_SIGNED) - && (value & (1L << (length - 1)))) + && (value & (1UL << (length - 1)))) value |= ~mask; *valuep = value; diff -Nru gdb-9.1/opcodes/ip2k-opc.c gdb-10.2/opcodes/ip2k-opc.c --- gdb-9.1/opcodes/ip2k-opc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/ip2k-opc.c 2021-04-25 04:06:26.000000000 +0000 @@ -3,7 +3,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright (C) 1996-2019 Free Software Foundation, Inc. +Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of the GNU Binutils and/or GDB, the GNU debugger. diff -Nru gdb-9.1/opcodes/ip2k-opc.h gdb-10.2/opcodes/ip2k-opc.h --- gdb-9.1/opcodes/ip2k-opc.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/ip2k-opc.h 2021-04-25 04:06:26.000000000 +0000 @@ -3,7 +3,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright (C) 1996-2019 Free Software Foundation, Inc. +Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of the GNU Binutils and/or GDB, the GNU debugger. diff -Nru gdb-9.1/opcodes/iq2000-asm.c gdb-10.2/opcodes/iq2000-asm.c --- gdb-9.1/opcodes/iq2000-asm.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/iq2000-asm.c 2021-04-25 04:06:26.000000000 +0000 @@ -5,7 +5,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. - the resultant file is machine generated, cgen-asm.in isn't - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of libopcodes. diff -Nru gdb-9.1/opcodes/iq2000-desc.c gdb-10.2/opcodes/iq2000-desc.c --- gdb-9.1/opcodes/iq2000-desc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/iq2000-desc.c 2021-04-25 04:06:26.000000000 +0000 @@ -3,7 +3,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright (C) 1996-2019 Free Software Foundation, Inc. +Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of the GNU Binutils and/or GDB, the GNU debugger. @@ -2050,6 +2050,7 @@ CGEN_CPU_OPEN_MACHS: bitmap of values in enum mach_attr CGEN_CPU_OPEN_BFDMACH: specify 1 mach using bfd name CGEN_CPU_OPEN_ENDIAN: specify endian choice + CGEN_CPU_OPEN_INSN_ENDIAN: specify instruction endian choice CGEN_CPU_OPEN_END: terminates arguments ??? Simultaneous multiple isas might not make sense, but it's not (yet) @@ -2063,6 +2064,7 @@ CGEN_BITSET *isas = 0; /* 0 = "unspecified" */ unsigned int machs = 0; /* 0 = "unspecified" */ enum cgen_endian endian = CGEN_ENDIAN_UNKNOWN; + enum cgen_endian insn_endian = CGEN_ENDIAN_UNKNOWN; va_list ap; if (! init_p) @@ -2097,6 +2099,9 @@ case CGEN_CPU_OPEN_ENDIAN : endian = va_arg (ap, enum cgen_endian); break; + case CGEN_CPU_OPEN_INSN_ENDIAN : + insn_endian = va_arg (ap, enum cgen_endian); + break; default : opcodes_error_handler (/* xgettext:c-format */ @@ -2126,11 +2131,8 @@ cd->isas = cgen_bitset_copy (isas); cd->machs = machs; cd->endian = endian; - /* FIXME: for the sparc case we can determine insn-endianness statically. - The worry here is where both data and insn endian can be independently - chosen, in which case this function will need another argument. - Actually, will want to allow for more arguments in the future anyway. */ - cd->insn_endian = endian; + cd->insn_endian + = (insn_endian == CGEN_ENDIAN_UNKNOWN ? endian : insn_endian); /* Table (re)builder. */ cd->rebuild_tables = iq2000_cgen_rebuild_tables; @@ -2180,18 +2182,10 @@ regfree (CGEN_INSN_RX (insns)); } - if (cd->macro_insn_table.init_entries) - free ((CGEN_INSN *) cd->macro_insn_table.init_entries); - - if (cd->insn_table.init_entries) - free ((CGEN_INSN *) cd->insn_table.init_entries); - - if (cd->hw_table.entries) - free ((CGEN_HW_ENTRY *) cd->hw_table.entries); - - if (cd->operand_table.entries) - free ((CGEN_HW_ENTRY *) cd->operand_table.entries); - + free ((CGEN_INSN *) cd->macro_insn_table.init_entries); + free ((CGEN_INSN *) cd->insn_table.init_entries); + free ((CGEN_HW_ENTRY *) cd->hw_table.entries); + free ((CGEN_HW_ENTRY *) cd->operand_table.entries); free (cd); } diff -Nru gdb-9.1/opcodes/iq2000-desc.h gdb-10.2/opcodes/iq2000-desc.h --- gdb-9.1/opcodes/iq2000-desc.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/iq2000-desc.h 2021-04-25 04:06:26.000000000 +0000 @@ -3,7 +3,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright (C) 1996-2019 Free Software Foundation, Inc. +Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of the GNU Binutils and/or GDB, the GNU debugger. diff -Nru gdb-9.1/opcodes/iq2000-dis.c gdb-10.2/opcodes/iq2000-dis.c --- gdb-9.1/opcodes/iq2000-dis.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/iq2000-dis.c 2021-04-25 04:06:26.000000000 +0000 @@ -5,7 +5,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. - the resultant file is machine generated, cgen-dis.in isn't - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of libopcodes. @@ -362,7 +362,7 @@ /* 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); + 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 @@ -493,6 +493,7 @@ CGEN_BITSET *isa; int mach; int endian; + int insn_endian; CGEN_CPU_DESC cd; } cpu_desc_list; @@ -505,12 +506,16 @@ 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; /* ??? gdb will set mach but leave the architecture as "unknown" */ @@ -576,9 +581,11 @@ prev_isa = cgen_bitset_copy (isa); prev_mach = mach; prev_endian = endian; + prev_insn_endian = insn_endian; cd = iq2000_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 (); diff -Nru gdb-9.1/opcodes/iq2000-ibld.c gdb-10.2/opcodes/iq2000-ibld.c --- gdb-9.1/opcodes/iq2000-ibld.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/iq2000-ibld.c 2021-04-25 04:06:26.000000000 +0000 @@ -4,7 +4,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN: Cpu tools GENerator. - the resultant file is machine generated, cgen-ibld.in isn't - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of libopcodes. @@ -85,20 +85,20 @@ int word_length, unsigned char *bufp) { - unsigned long x,mask; + unsigned long x, mask; int shift; - x = cgen_get_insn_value (cd, bufp, word_length); + x = cgen_get_insn_value (cd, bufp, word_length, cd->endian); /* Written this way to avoid undefined behaviour. */ - mask = (((1L << (length - 1)) - 1) << 1) | 1; + mask = (1UL << (length - 1) << 1) - 1; if (CGEN_INSN_LSB0_P) shift = (start + 1) - length; else shift = (word_length - (start + length)); x = (x & ~(mask << shift)) | ((value & mask) << shift); - cgen_put_insn_value (cd, bufp, word_length, (bfd_vma) x); + cgen_put_insn_value (cd, bufp, word_length, (bfd_vma) x, cd->endian); } #endif /* ! CGEN_INT_INSN_P */ @@ -131,13 +131,15 @@ CGEN_INSN_BYTES_PTR buffer) { static char errbuf[100]; - /* Written this way to avoid undefined behaviour. */ - unsigned long mask = (((1L << (length - 1)) - 1) << 1) | 1; + unsigned long mask; /* If LENGTH is zero, this operand doesn't contribute to the value. */ if (length == 0) return NULL; + /* Written this way to avoid undefined behaviour. */ + mask = (1UL << (length - 1) << 1) - 1; + if (word_length > 8 * sizeof (CGEN_INSN_INT)) abort (); @@ -153,7 +155,7 @@ /* Ensure VALUE will fit. */ if (CGEN_BOOL_ATTR (attrs, CGEN_IFLD_SIGN_OPT)) { - long minval = - (1L << (length - 1)); + long minval = - (1UL << (length - 1)); unsigned long maxval = mask; if ((value > 0 && (unsigned long) value > maxval) @@ -191,8 +193,8 @@ { if (! cgen_signed_overflow_ok_p (cd)) { - long minval = - (1L << (length - 1)); - long maxval = (1L << (length - 1)) - 1; + long minval = - (1UL << (length - 1)); + long maxval = (1UL << (length - 1)) - 1; if (value < minval || value > maxval) { @@ -269,8 +271,8 @@ #else cgen_put_insn_value (cd, buffer, min ((unsigned) cd->base_insn_bitsize, - (unsigned) CGEN_FIELDS_BITSIZE (fields)), - value); + (unsigned) CGEN_FIELDS_BITSIZE (fields)), + value, cd->insn_endian); #endif /* ! CGEN_INT_INSN_P */ @@ -314,7 +316,7 @@ { int shift = insn_length - length; /* Written this way to avoid undefined behaviour. */ - CGEN_INSN_INT mask = (((1L << (length - 1)) - 1) << 1) | 1; + CGEN_INSN_INT mask = length == 0 ? 0 : (1UL << (length - 1) << 1) - 1; *buf = (*buf & ~(mask << shift)) | ((value & mask) << shift); } @@ -387,7 +389,7 @@ unsigned long x; int shift; - x = cgen_get_insn_value (cd, bufp, word_length); + x = cgen_get_insn_value (cd, bufp, word_length, cd->endian); if (CGEN_INSN_LSB0_P) shift = (start + 1) - length; @@ -480,7 +482,10 @@ abort (); if (fill_cache (cd, ex_info, word_offset / 8, word_length / 8, pc) == 0) - return 0; + { + *valuep = 0; + return 0; + } value = extract_1 (cd, ex_info, start, length, word_length, bufp, pc); } @@ -488,12 +493,12 @@ #endif /* ! CGEN_INT_INSN_P */ /* Written this way to avoid undefined behaviour. */ - mask = (((1L << (length - 1)) - 1) << 1) | 1; + mask = (1UL << (length - 1) << 1) - 1; value &= mask; /* sign extend? */ if (CGEN_BOOL_ATTR (attrs, CGEN_IFLD_SIGNED) - && (value & (1L << (length - 1)))) + && (value & (1UL << (length - 1)))) value |= ~mask; *valuep = value; @@ -838,7 +843,7 @@ { long value; length = extract_normal (cd, ex_info, insn_value, 0|(1<<CGEN_IFLD_SIGNED)|(1<<CGEN_IFLD_PCREL_ADDR), 0, 15, 16, 32, total_length, pc, & value); - value = ((((value) << (2))) + (((pc) + (4)))); + value = ((((value) * (4))) + (((pc) + (4)))); fields->f_offset = value; } break; diff -Nru gdb-9.1/opcodes/iq2000-opc.c gdb-10.2/opcodes/iq2000-opc.c --- gdb-9.1/opcodes/iq2000-opc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/iq2000-opc.c 2021-04-25 04:06:26.000000000 +0000 @@ -3,7 +3,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright (C) 1996-2019 Free Software Foundation, Inc. +Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of the GNU Binutils and/or GDB, the GNU debugger. diff -Nru gdb-9.1/opcodes/iq2000-opc.h gdb-10.2/opcodes/iq2000-opc.h --- gdb-9.1/opcodes/iq2000-opc.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/iq2000-opc.h 2021-04-25 04:06:26.000000000 +0000 @@ -3,7 +3,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright (C) 1996-2019 Free Software Foundation, Inc. +Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of the GNU Binutils and/or GDB, the GNU debugger. diff -Nru gdb-9.1/opcodes/lm32-asm.c gdb-10.2/opcodes/lm32-asm.c --- gdb-9.1/opcodes/lm32-asm.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/lm32-asm.c 2021-04-25 04:06:26.000000000 +0000 @@ -5,7 +5,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. - the resultant file is machine generated, cgen-asm.in isn't - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of libopcodes. diff -Nru gdb-9.1/opcodes/lm32-desc.c gdb-10.2/opcodes/lm32-desc.c --- gdb-9.1/opcodes/lm32-desc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/lm32-desc.c 2021-04-25 04:06:26.000000000 +0000 @@ -3,7 +3,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright (C) 1996-2019 Free Software Foundation, Inc. +Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of the GNU Binutils and/or GDB, the GNU debugger. @@ -1032,6 +1032,7 @@ CGEN_CPU_OPEN_MACHS: bitmap of values in enum mach_attr CGEN_CPU_OPEN_BFDMACH: specify 1 mach using bfd name CGEN_CPU_OPEN_ENDIAN: specify endian choice + CGEN_CPU_OPEN_INSN_ENDIAN: specify instruction endian choice CGEN_CPU_OPEN_END: terminates arguments ??? Simultaneous multiple isas might not make sense, but it's not (yet) @@ -1045,6 +1046,7 @@ CGEN_BITSET *isas = 0; /* 0 = "unspecified" */ unsigned int machs = 0; /* 0 = "unspecified" */ enum cgen_endian endian = CGEN_ENDIAN_UNKNOWN; + enum cgen_endian insn_endian = CGEN_ENDIAN_UNKNOWN; va_list ap; if (! init_p) @@ -1079,6 +1081,9 @@ case CGEN_CPU_OPEN_ENDIAN : endian = va_arg (ap, enum cgen_endian); break; + case CGEN_CPU_OPEN_INSN_ENDIAN : + insn_endian = va_arg (ap, enum cgen_endian); + break; default : opcodes_error_handler (/* xgettext:c-format */ @@ -1108,11 +1113,8 @@ cd->isas = cgen_bitset_copy (isas); cd->machs = machs; cd->endian = endian; - /* FIXME: for the sparc case we can determine insn-endianness statically. - The worry here is where both data and insn endian can be independently - chosen, in which case this function will need another argument. - Actually, will want to allow for more arguments in the future anyway. */ - cd->insn_endian = endian; + cd->insn_endian + = (insn_endian == CGEN_ENDIAN_UNKNOWN ? endian : insn_endian); /* Table (re)builder. */ cd->rebuild_tables = lm32_cgen_rebuild_tables; @@ -1162,18 +1164,10 @@ regfree (CGEN_INSN_RX (insns)); } - if (cd->macro_insn_table.init_entries) - free ((CGEN_INSN *) cd->macro_insn_table.init_entries); - - if (cd->insn_table.init_entries) - free ((CGEN_INSN *) cd->insn_table.init_entries); - - if (cd->hw_table.entries) - free ((CGEN_HW_ENTRY *) cd->hw_table.entries); - - if (cd->operand_table.entries) - free ((CGEN_HW_ENTRY *) cd->operand_table.entries); - + free ((CGEN_INSN *) cd->macro_insn_table.init_entries); + free ((CGEN_INSN *) cd->insn_table.init_entries); + free ((CGEN_HW_ENTRY *) cd->hw_table.entries); + free ((CGEN_HW_ENTRY *) cd->operand_table.entries); free (cd); } diff -Nru gdb-9.1/opcodes/lm32-desc.h gdb-10.2/opcodes/lm32-desc.h --- gdb-9.1/opcodes/lm32-desc.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/lm32-desc.h 2021-04-25 04:06:26.000000000 +0000 @@ -3,7 +3,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright (C) 1996-2019 Free Software Foundation, Inc. +Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of the GNU Binutils and/or GDB, the GNU debugger. diff -Nru gdb-9.1/opcodes/lm32-dis.c gdb-10.2/opcodes/lm32-dis.c --- gdb-9.1/opcodes/lm32-dis.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/lm32-dis.c 2021-04-25 04:06:26.000000000 +0000 @@ -5,7 +5,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. - the resultant file is machine generated, cgen-dis.in isn't - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of libopcodes. @@ -320,7 +320,7 @@ /* 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); + 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 @@ -451,6 +451,7 @@ CGEN_BITSET *isa; int mach; int endian; + int insn_endian; CGEN_CPU_DESC cd; } cpu_desc_list; @@ -463,12 +464,16 @@ 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; /* ??? gdb will set mach but leave the architecture as "unknown" */ @@ -534,9 +539,11 @@ prev_isa = cgen_bitset_copy (isa); prev_mach = mach; prev_endian = endian; + prev_insn_endian = insn_endian; cd = lm32_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 (); diff -Nru gdb-9.1/opcodes/lm32-ibld.c gdb-10.2/opcodes/lm32-ibld.c --- gdb-9.1/opcodes/lm32-ibld.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/lm32-ibld.c 2021-04-25 04:06:26.000000000 +0000 @@ -4,7 +4,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN: Cpu tools GENerator. - the resultant file is machine generated, cgen-ibld.in isn't - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of libopcodes. @@ -85,20 +85,20 @@ int word_length, unsigned char *bufp) { - unsigned long x,mask; + unsigned long x, mask; int shift; - x = cgen_get_insn_value (cd, bufp, word_length); + x = cgen_get_insn_value (cd, bufp, word_length, cd->endian); /* Written this way to avoid undefined behaviour. */ - mask = (((1L << (length - 1)) - 1) << 1) | 1; + mask = (1UL << (length - 1) << 1) - 1; if (CGEN_INSN_LSB0_P) shift = (start + 1) - length; else shift = (word_length - (start + length)); x = (x & ~(mask << shift)) | ((value & mask) << shift); - cgen_put_insn_value (cd, bufp, word_length, (bfd_vma) x); + cgen_put_insn_value (cd, bufp, word_length, (bfd_vma) x, cd->endian); } #endif /* ! CGEN_INT_INSN_P */ @@ -131,13 +131,15 @@ CGEN_INSN_BYTES_PTR buffer) { static char errbuf[100]; - /* Written this way to avoid undefined behaviour. */ - unsigned long mask = (((1L << (length - 1)) - 1) << 1) | 1; + unsigned long mask; /* If LENGTH is zero, this operand doesn't contribute to the value. */ if (length == 0) return NULL; + /* Written this way to avoid undefined behaviour. */ + mask = (1UL << (length - 1) << 1) - 1; + if (word_length > 8 * sizeof (CGEN_INSN_INT)) abort (); @@ -153,7 +155,7 @@ /* Ensure VALUE will fit. */ if (CGEN_BOOL_ATTR (attrs, CGEN_IFLD_SIGN_OPT)) { - long minval = - (1L << (length - 1)); + long minval = - (1UL << (length - 1)); unsigned long maxval = mask; if ((value > 0 && (unsigned long) value > maxval) @@ -191,8 +193,8 @@ { if (! cgen_signed_overflow_ok_p (cd)) { - long minval = - (1L << (length - 1)); - long maxval = (1L << (length - 1)) - 1; + long minval = - (1UL << (length - 1)); + long maxval = (1UL << (length - 1)) - 1; if (value < minval || value > maxval) { @@ -269,8 +271,8 @@ #else cgen_put_insn_value (cd, buffer, min ((unsigned) cd->base_insn_bitsize, - (unsigned) CGEN_FIELDS_BITSIZE (fields)), - value); + (unsigned) CGEN_FIELDS_BITSIZE (fields)), + value, cd->insn_endian); #endif /* ! CGEN_INT_INSN_P */ @@ -314,7 +316,7 @@ { int shift = insn_length - length; /* Written this way to avoid undefined behaviour. */ - CGEN_INSN_INT mask = (((1L << (length - 1)) - 1) << 1) | 1; + CGEN_INSN_INT mask = length == 0 ? 0 : (1UL << (length - 1) << 1) - 1; *buf = (*buf & ~(mask << shift)) | ((value & mask) << shift); } @@ -387,7 +389,7 @@ unsigned long x; int shift; - x = cgen_get_insn_value (cd, bufp, word_length); + x = cgen_get_insn_value (cd, bufp, word_length, cd->endian); if (CGEN_INSN_LSB0_P) shift = (start + 1) - length; @@ -480,7 +482,10 @@ abort (); if (fill_cache (cd, ex_info, word_offset / 8, word_length / 8, pc) == 0) - return 0; + { + *valuep = 0; + return 0; + } value = extract_1 (cd, ex_info, start, length, word_length, bufp, pc); } @@ -488,12 +493,12 @@ #endif /* ! CGEN_INT_INSN_P */ /* Written this way to avoid undefined behaviour. */ - mask = (((1L << (length - 1)) - 1) << 1) | 1; + mask = (1UL << (length - 1) << 1) - 1; value &= mask; /* sign extend? */ if (CGEN_BOOL_ATTR (attrs, CGEN_IFLD_SIGNED) - && (value & (1L << (length - 1)))) + && (value & (1UL << (length - 1)))) value |= ~mask; *valuep = value; diff -Nru gdb-9.1/opcodes/lm32-opc.c gdb-10.2/opcodes/lm32-opc.c --- gdb-9.1/opcodes/lm32-opc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/lm32-opc.c 2021-04-25 04:06:26.000000000 +0000 @@ -3,7 +3,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright (C) 1996-2019 Free Software Foundation, Inc. +Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of the GNU Binutils and/or GDB, the GNU debugger. diff -Nru gdb-9.1/opcodes/lm32-opc.h gdb-10.2/opcodes/lm32-opc.h --- gdb-9.1/opcodes/lm32-opc.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/lm32-opc.h 2021-04-25 04:06:26.000000000 +0000 @@ -3,7 +3,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright (C) 1996-2019 Free Software Foundation, Inc. +Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of the GNU Binutils and/or GDB, the GNU debugger. diff -Nru gdb-9.1/opcodes/lm32-opinst.c gdb-10.2/opcodes/lm32-opinst.c --- gdb-9.1/opcodes/lm32-opinst.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/lm32-opinst.c 2021-04-25 04:06:26.000000000 +0000 @@ -3,7 +3,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright (C) 1996-2019 Free Software Foundation, Inc. +Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of the GNU Binutils and/or GDB, the GNU debugger. diff -Nru gdb-9.1/opcodes/m10200-dis.c gdb-10.2/opcodes/m10200-dis.c --- gdb-9.1/opcodes/m10200-dis.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/m10200-dis.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Disassemble MN10200 instructions. - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of the GNU opcodes library. @@ -83,16 +83,18 @@ operand = &mn10200_operands[*opindex_ptr]; - if ((operand->flags & MN10200_OPERAND_EXTENDED) != 0) + if ((operand->flags & MN10200_OPERAND_DREG) != 0 + || (operand->flags & MN10200_OPERAND_AREG) != 0) + value = ((insn >> (operand->shift + extra_shift)) + & ((1 << operand->bits) - 1)); + else if ((operand->flags & MN10200_OPERAND_EXTENDED) != 0) { value = (insn & 0xffff) << 8; value |= extension; } else - { - value = ((insn >> (operand->shift)) - & ((1L << operand->bits) - 1L)); - } + value = ((insn >> (operand->shift)) + & ((1L << operand->bits) - 1L)); if ((operand->flags & MN10200_OPERAND_SIGNED) != 0) value = ((long)(value << (32 - operand->bits)) @@ -106,18 +108,10 @@ nocomma = 0; if ((operand->flags & MN10200_OPERAND_DREG) != 0) - { - value = ((insn >> (operand->shift + extra_shift)) - & ((1 << operand->bits) - 1)); - (*info->fprintf_func) (info->stream, "d%ld", value); - } + (*info->fprintf_func) (info->stream, "d%ld", value); else if ((operand->flags & MN10200_OPERAND_AREG) != 0) - { - value = ((insn >> (operand->shift + extra_shift)) - & ((1 << operand->bits) - 1)); - (*info->fprintf_func) (info->stream, "a%ld", value); - } + (*info->fprintf_func) (info->stream, "a%ld", value); else if ((operand->flags & MN10200_OPERAND_PSW) != 0) (*info->fprintf_func) (info->stream, "psw"); diff -Nru gdb-9.1/opcodes/m10200-opc.c gdb-10.2/opcodes/m10200-opc.c --- gdb-9.1/opcodes/m10200-opc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/m10200-opc.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Assemble Matsushita MN10200 instructions. - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of the GNU opcodes library. diff -Nru gdb-9.1/opcodes/m10300-dis.c gdb-10.2/opcodes/m10300-dis.c --- gdb-9.1/opcodes/m10300-dis.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/m10300-dis.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Disassemble MN10300 instructions. - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of the GNU opcodes library. @@ -318,7 +318,13 @@ if ((operand->flags & MN10300_OPERAND_PLUS) != 0) nocomma = 1; - if ((operand->flags & MN10300_OPERAND_SPLIT) != 0) + if ((operand->flags & MN10300_OPERAND_DREG) != 0 + || (operand->flags & MN10300_OPERAND_AREG) != 0 + || (operand->flags & MN10300_OPERAND_RREG) != 0 + || (operand->flags & MN10300_OPERAND_XRREG) != 0) + value = ((insn >> (operand->shift + extra_shift)) + & ((1 << operand->bits) - 1)); + else if ((operand->flags & MN10300_OPERAND_SPLIT) != 0) { unsigned long temp; @@ -410,18 +416,10 @@ nocomma = 0; if ((operand->flags & MN10300_OPERAND_DREG) != 0) - { - value = ((insn >> (operand->shift + extra_shift)) - & ((1 << operand->bits) - 1)); - (*info->fprintf_func) (info->stream, "d%d", (int) value); - } + (*info->fprintf_func) (info->stream, "d%d", (int) value); else if ((operand->flags & MN10300_OPERAND_AREG) != 0) - { - value = ((insn >> (operand->shift + extra_shift)) - & ((1 << operand->bits) - 1)); - (*info->fprintf_func) (info->stream, "a%d", (int) value); - } + (*info->fprintf_func) (info->stream, "a%d", (int) value); else if ((operand->flags & MN10300_OPERAND_SP) != 0) (*info->fprintf_func) (info->stream, "sp"); @@ -434,8 +432,6 @@ else if ((operand->flags & MN10300_OPERAND_RREG) != 0) { - value = ((insn >> (operand->shift + extra_shift)) - & ((1 << operand->bits) - 1)); if (value < 8) (*info->fprintf_func) (info->stream, "r%d", (int) value); else if (value < 12) @@ -446,8 +442,6 @@ else if ((operand->flags & MN10300_OPERAND_XRREG) != 0) { - value = ((insn >> (operand->shift + extra_shift)) - & ((1 << operand->bits) - 1)); if (value == 0) (*info->fprintf_func) (info->stream, "sp"); else diff -Nru gdb-9.1/opcodes/m10300-opc.c gdb-10.2/opcodes/m10300-opc.c --- gdb-9.1/opcodes/m10300-opc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/m10300-opc.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Assemble Matsushita MN10300 instructions. - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of the GNU opcodes library. diff -Nru gdb-9.1/opcodes/m32c-asm.c gdb-10.2/opcodes/m32c-asm.c --- gdb-9.1/opcodes/m32c-asm.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/m32c-asm.c 2021-04-25 04:06:26.000000000 +0000 @@ -5,7 +5,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. - the resultant file is machine generated, cgen-asm.in isn't - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of libopcodes. diff -Nru gdb-9.1/opcodes/m32c-desc.c gdb-10.2/opcodes/m32c-desc.c --- gdb-9.1/opcodes/m32c-desc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/m32c-desc.c 2021-04-25 04:06:26.000000000 +0000 @@ -3,7 +3,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright (C) 1996-2019 Free Software Foundation, Inc. +Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of the GNU Binutils and/or GDB, the GNU debugger. @@ -63063,6 +63063,7 @@ CGEN_CPU_OPEN_MACHS: bitmap of values in enum mach_attr CGEN_CPU_OPEN_BFDMACH: specify 1 mach using bfd name CGEN_CPU_OPEN_ENDIAN: specify endian choice + CGEN_CPU_OPEN_INSN_ENDIAN: specify instruction endian choice CGEN_CPU_OPEN_END: terminates arguments ??? Simultaneous multiple isas might not make sense, but it's not (yet) @@ -63076,6 +63077,7 @@ CGEN_BITSET *isas = 0; /* 0 = "unspecified" */ unsigned int machs = 0; /* 0 = "unspecified" */ enum cgen_endian endian = CGEN_ENDIAN_UNKNOWN; + enum cgen_endian insn_endian = CGEN_ENDIAN_UNKNOWN; va_list ap; if (! init_p) @@ -63110,6 +63112,9 @@ case CGEN_CPU_OPEN_ENDIAN : endian = va_arg (ap, enum cgen_endian); break; + case CGEN_CPU_OPEN_INSN_ENDIAN : + insn_endian = va_arg (ap, enum cgen_endian); + break; default : opcodes_error_handler (/* xgettext:c-format */ @@ -63139,11 +63144,8 @@ cd->isas = cgen_bitset_copy (isas); cd->machs = machs; cd->endian = endian; - /* FIXME: for the sparc case we can determine insn-endianness statically. - The worry here is where both data and insn endian can be independently - chosen, in which case this function will need another argument. - Actually, will want to allow for more arguments in the future anyway. */ - cd->insn_endian = endian; + cd->insn_endian + = (insn_endian == CGEN_ENDIAN_UNKNOWN ? endian : insn_endian); /* Table (re)builder. */ cd->rebuild_tables = m32c_cgen_rebuild_tables; @@ -63193,18 +63195,10 @@ regfree (CGEN_INSN_RX (insns)); } - if (cd->macro_insn_table.init_entries) - free ((CGEN_INSN *) cd->macro_insn_table.init_entries); - - if (cd->insn_table.init_entries) - free ((CGEN_INSN *) cd->insn_table.init_entries); - - if (cd->hw_table.entries) - free ((CGEN_HW_ENTRY *) cd->hw_table.entries); - - if (cd->operand_table.entries) - free ((CGEN_HW_ENTRY *) cd->operand_table.entries); - + free ((CGEN_INSN *) cd->macro_insn_table.init_entries); + free ((CGEN_INSN *) cd->insn_table.init_entries); + free ((CGEN_HW_ENTRY *) cd->hw_table.entries); + free ((CGEN_HW_ENTRY *) cd->operand_table.entries); free (cd); } diff -Nru gdb-9.1/opcodes/m32c-desc.h gdb-10.2/opcodes/m32c-desc.h --- gdb-9.1/opcodes/m32c-desc.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/m32c-desc.h 2021-04-25 04:06:26.000000000 +0000 @@ -3,7 +3,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright (C) 1996-2019 Free Software Foundation, Inc. +Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of the GNU Binutils and/or GDB, the GNU debugger. diff -Nru gdb-9.1/opcodes/m32c-dis.c gdb-10.2/opcodes/m32c-dis.c --- gdb-9.1/opcodes/m32c-dis.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/m32c-dis.c 2021-04-25 04:06:26.000000000 +0000 @@ -5,7 +5,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. - the resultant file is machine generated, cgen-dis.in isn't - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of libopcodes. @@ -1064,7 +1064,7 @@ /* 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); + 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 @@ -1195,6 +1195,7 @@ CGEN_BITSET *isa; int mach; int endian; + int insn_endian; CGEN_CPU_DESC cd; } cpu_desc_list; @@ -1207,12 +1208,16 @@ 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; /* ??? gdb will set mach but leave the architecture as "unknown" */ @@ -1278,9 +1283,11 @@ prev_isa = cgen_bitset_copy (isa); prev_mach = mach; prev_endian = endian; + prev_insn_endian = insn_endian; cd = m32c_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 (); diff -Nru gdb-9.1/opcodes/m32c-ibld.c gdb-10.2/opcodes/m32c-ibld.c --- gdb-9.1/opcodes/m32c-ibld.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/m32c-ibld.c 2021-04-25 04:06:26.000000000 +0000 @@ -4,7 +4,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN: Cpu tools GENerator. - the resultant file is machine generated, cgen-ibld.in isn't - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of libopcodes. @@ -85,20 +85,20 @@ int word_length, unsigned char *bufp) { - unsigned long x,mask; + unsigned long x, mask; int shift; - x = cgen_get_insn_value (cd, bufp, word_length); + x = cgen_get_insn_value (cd, bufp, word_length, cd->endian); /* Written this way to avoid undefined behaviour. */ - mask = (((1L << (length - 1)) - 1) << 1) | 1; + mask = (1UL << (length - 1) << 1) - 1; if (CGEN_INSN_LSB0_P) shift = (start + 1) - length; else shift = (word_length - (start + length)); x = (x & ~(mask << shift)) | ((value & mask) << shift); - cgen_put_insn_value (cd, bufp, word_length, (bfd_vma) x); + cgen_put_insn_value (cd, bufp, word_length, (bfd_vma) x, cd->endian); } #endif /* ! CGEN_INT_INSN_P */ @@ -131,13 +131,15 @@ CGEN_INSN_BYTES_PTR buffer) { static char errbuf[100]; - /* Written this way to avoid undefined behaviour. */ - unsigned long mask = (((1L << (length - 1)) - 1) << 1) | 1; + unsigned long mask; /* If LENGTH is zero, this operand doesn't contribute to the value. */ if (length == 0) return NULL; + /* Written this way to avoid undefined behaviour. */ + mask = (1UL << (length - 1) << 1) - 1; + if (word_length > 8 * sizeof (CGEN_INSN_INT)) abort (); @@ -153,7 +155,7 @@ /* Ensure VALUE will fit. */ if (CGEN_BOOL_ATTR (attrs, CGEN_IFLD_SIGN_OPT)) { - long minval = - (1L << (length - 1)); + long minval = - (1UL << (length - 1)); unsigned long maxval = mask; if ((value > 0 && (unsigned long) value > maxval) @@ -191,8 +193,8 @@ { if (! cgen_signed_overflow_ok_p (cd)) { - long minval = - (1L << (length - 1)); - long maxval = (1L << (length - 1)) - 1; + long minval = - (1UL << (length - 1)); + long maxval = (1UL << (length - 1)) - 1; if (value < minval || value > maxval) { @@ -269,8 +271,8 @@ #else cgen_put_insn_value (cd, buffer, min ((unsigned) cd->base_insn_bitsize, - (unsigned) CGEN_FIELDS_BITSIZE (fields)), - value); + (unsigned) CGEN_FIELDS_BITSIZE (fields)), + value, cd->insn_endian); #endif /* ! CGEN_INT_INSN_P */ @@ -314,7 +316,7 @@ { int shift = insn_length - length; /* Written this way to avoid undefined behaviour. */ - CGEN_INSN_INT mask = (((1L << (length - 1)) - 1) << 1) | 1; + CGEN_INSN_INT mask = length == 0 ? 0 : (1UL << (length - 1) << 1) - 1; *buf = (*buf & ~(mask << shift)) | ((value & mask) << shift); } @@ -387,7 +389,7 @@ unsigned long x; int shift; - x = cgen_get_insn_value (cd, bufp, word_length); + x = cgen_get_insn_value (cd, bufp, word_length, cd->endian); if (CGEN_INSN_LSB0_P) shift = (start + 1) - length; @@ -480,7 +482,10 @@ abort (); if (fill_cache (cd, ex_info, word_offset / 8, word_length / 8, pc) == 0) - return 0; + { + *valuep = 0; + return 0; + } value = extract_1 (cd, ex_info, start, length, word_length, bufp, pc); } @@ -488,12 +493,12 @@ #endif /* ! CGEN_INT_INSN_P */ /* Written this way to avoid undefined behaviour. */ - mask = (((1L << (length - 1)) - 1) << 1) | 1; + mask = (1UL << (length - 1) << 1) - 1; value &= mask; /* sign extend? */ if (CGEN_BOOL_ATTR (attrs, CGEN_IFLD_SIGNED) - && (value & (1L << (length - 1)))) + && (value & (1UL << (length - 1)))) value |= ~mask; *valuep = value; @@ -609,14 +614,14 @@ case M32C_OPERAND_BIT32RNPREFIXED : { long value = fields->f_dst32_rn_prefixed_QI; - value = (((((((~ (value))) << (1))) & (2))) | (((((USI) (value) >> (1))) & (1)))); + value = (((((~ (((value) << (1))))) & (2))) | (((((USI) (value) >> (1))) & (1)))); errmsg = insert_normal (cd, value, 0, 0, 16, 2, 32, total_length, buffer); } break; case M32C_OPERAND_BIT32RNUNPREFIXED : { long value = fields->f_dst32_rn_unprefixed_QI; - value = (((((((~ (value))) << (1))) & (2))) | (((((USI) (value) >> (1))) & (1)))); + value = (((((~ (((value) << (1))))) & (2))) | (((((USI) (value) >> (1))) & (1)))); errmsg = insert_normal (cd, value, 0, 0, 8, 2, 32, total_length, buffer); } break; @@ -626,7 +631,7 @@ case M32C_OPERAND_BITBASE16_16_U16 : { long value = fields->f_dsp_16_u16; - value = ((((((UHI) (value) >> (8))) & (255))) | (((((value) << (8))) & (65280)))); + value = ((((((UHI) (value) >> (8))) & (255))) | (((((value) & (255))) << (8)))); errmsg = insert_normal (cd, value, 0, 0, 16, 16, 32, total_length, buffer); } break; @@ -672,7 +677,7 @@ break; { long value = fields->f_dsp_16_s16; - value = EXTHISI (((HI) (INT) (((((((UINT) (value) >> (8))) & (255))) | (((((value) << (8))) & (65280))))))); + value = EXTHISI (((HI) (INT) (((((((UINT) (value) >> (8))) & (255))) | (((((value) & (255))) << (8))))))); errmsg = insert_normal (cd, value, 0|(1<<CGEN_IFLD_SIGNED), 0, 16, 16, 32, total_length, buffer); } if (errmsg) @@ -704,7 +709,7 @@ break; { long value = fields->f_dsp_16_u16; - value = ((((((UHI) (value) >> (8))) & (255))) | (((((value) << (8))) & (65280)))); + value = ((((((UHI) (value) >> (8))) & (255))) | (((((value) & (255))) << (8)))); errmsg = insert_normal (cd, value, 0, 0, 16, 16, 32, total_length, buffer); } if (errmsg) @@ -723,7 +728,7 @@ break; { long value = fields->f_dsp_16_u16; - value = ((((((UHI) (value) >> (8))) & (255))) | (((((value) << (8))) & (65280)))); + value = ((((((UHI) (value) >> (8))) & (255))) | (((((value) & (255))) << (8)))); errmsg = insert_normal (cd, value, 0, 0, 16, 16, 32, total_length, buffer); } if (errmsg) @@ -812,7 +817,7 @@ break; { long value = fields->f_dsp_32_u16; - value = ((((((UHI) (value) >> (8))) & (255))) | (((((value) << (8))) & (65280)))); + value = ((((((UHI) (value) >> (8))) & (255))) | (((((value) & (255))) << (8)))); errmsg = insert_normal (cd, value, 0, 32, 0, 16, 32, total_length, buffer); } if (errmsg) @@ -834,7 +839,7 @@ case M32C_OPERAND_DSP_16_S16 : { long value = fields->f_dsp_16_s16; - value = EXTHISI (((HI) (INT) (((((((UINT) (value) >> (8))) & (255))) | (((((value) << (8))) & (65280))))))); + value = EXTHISI (((HI) (INT) (((((((UINT) (value) >> (8))) & (255))) | (((((value) & (255))) << (8))))))); errmsg = insert_normal (cd, value, 0|(1<<CGEN_IFLD_SIGNED), 0, 16, 16, 32, total_length, buffer); } break; @@ -844,7 +849,7 @@ case M32C_OPERAND_DSP_16_U16 : { long value = fields->f_dsp_16_u16; - value = ((((((UHI) (value) >> (8))) & (255))) | (((((value) << (8))) & (65280)))); + value = ((((((UHI) (value) >> (8))) & (255))) | (((((value) & (255))) << (8)))); errmsg = insert_normal (cd, value, 0, 0, 16, 16, 32, total_length, buffer); } break; @@ -856,7 +861,7 @@ } { long value = fields->f_dsp_16_u16; - value = ((((((UHI) (value) >> (8))) & (255))) | (((((value) << (8))) & (65280)))); + value = ((((((UHI) (value) >> (8))) & (255))) | (((((value) & (255))) << (8)))); errmsg = insert_normal (cd, value, 0, 0, 16, 16, 32, total_length, buffer); } if (errmsg) @@ -874,7 +879,7 @@ } { long value = fields->f_dsp_16_u16; - value = ((((((UHI) (value) >> (8))) & (255))) | (((((value) << (8))) & (65280)))); + value = ((((((UHI) (value) >> (8))) & (255))) | (((((value) & (255))) << (8)))); errmsg = insert_normal (cd, value, 0, 0, 16, 16, 32, total_length, buffer); } if (errmsg) @@ -929,7 +934,7 @@ break; { long value = fields->f_dsp_32_u16; - value = ((((((UHI) (value) >> (8))) & (255))) | (((((value) << (8))) & (65280)))); + value = ((((((UHI) (value) >> (8))) & (255))) | (((((value) & (255))) << (8)))); errmsg = insert_normal (cd, value, 0, 32, 0, 16, 32, total_length, buffer); } if (errmsg) @@ -947,7 +952,7 @@ break; { long value = fields->f_dsp_32_u16; - value = ((((((UHI) (value) >> (8))) & (255))) | (((((value) << (8))) & (65280)))); + value = ((((((UHI) (value) >> (8))) & (255))) | (((((value) & (255))) << (8)))); errmsg = insert_normal (cd, value, 0, 32, 0, 16, 32, total_length, buffer); } if (errmsg) @@ -960,7 +965,7 @@ case M32C_OPERAND_DSP_32_S16 : { long value = fields->f_dsp_32_s16; - value = EXTHISI (((HI) (INT) (((((((UINT) (value) >> (8))) & (255))) | (((((value) << (8))) & (65280))))))); + value = EXTHISI (((HI) (INT) (((((((UINT) (value) >> (8))) & (255))) | (((((value) & (255))) << (8))))))); errmsg = insert_normal (cd, value, 0|(1<<CGEN_IFLD_SIGNED), 32, 0, 16, 32, total_length, buffer); } break; @@ -970,7 +975,7 @@ case M32C_OPERAND_DSP_32_U16 : { long value = fields->f_dsp_32_u16; - value = ((((((UHI) (value) >> (8))) & (255))) | (((((value) << (8))) & (65280)))); + value = ((((((UHI) (value) >> (8))) & (255))) | (((((value) & (255))) << (8)))); errmsg = insert_normal (cd, value, 0, 32, 0, 16, 32, total_length, buffer); } break; @@ -994,7 +999,7 @@ case M32C_OPERAND_DSP_40_S16 : { long value = fields->f_dsp_40_s16; - value = EXTHISI (((HI) (INT) (((((((UINT) (value) >> (8))) & (255))) | (((((value) << (8))) & (65280))))))); + value = EXTHISI (((HI) (INT) (((((((UINT) (value) >> (8))) & (255))) | (((((value) & (255))) << (8))))))); errmsg = insert_normal (cd, value, 0|(1<<CGEN_IFLD_SIGNED), 32, 8, 16, 32, total_length, buffer); } break; @@ -1004,7 +1009,7 @@ case M32C_OPERAND_DSP_40_U16 : { long value = fields->f_dsp_40_u16; - value = ((((((UHI) (value) >> (8))) & (255))) | (((((value) << (8))) & (65280)))); + value = ((((((UHI) (value) >> (8))) & (255))) | (((((value) & (255))) << (8)))); errmsg = insert_normal (cd, value, 0, 32, 8, 16, 32, total_length, buffer); } break; @@ -1028,7 +1033,7 @@ case M32C_OPERAND_DSP_48_S16 : { long value = fields->f_dsp_48_s16; - value = EXTHISI (((HI) (INT) (((((((UINT) (value) >> (8))) & (255))) | (((((value) << (8))) & (65280))))))); + value = EXTHISI (((HI) (INT) (((((((UINT) (value) >> (8))) & (255))) | (((((value) & (255))) << (8))))))); errmsg = insert_normal (cd, value, 0|(1<<CGEN_IFLD_SIGNED), 32, 16, 16, 32, total_length, buffer); } break; @@ -1038,7 +1043,7 @@ case M32C_OPERAND_DSP_48_U16 : { long value = fields->f_dsp_48_u16; - value = ((((((UHI) (value) >> (8))) & (255))) | (((((value) << (8))) & (65280)))); + value = ((((((UHI) (value) >> (8))) & (255))) | (((((value) & (255))) << (8)))); errmsg = insert_normal (cd, value, 0, 32, 16, 16, 32, total_length, buffer); } break; @@ -1050,7 +1055,7 @@ } { long value = fields->f_dsp_48_u16; - value = ((((((UHI) (value) >> (8))) & (255))) | (((((value) << (8))) & (65280)))); + value = ((((((UHI) (value) >> (8))) & (255))) | (((((value) & (255))) << (8)))); errmsg = insert_normal (cd, value, 0, 32, 16, 16, 32, total_length, buffer); } if (errmsg) @@ -1068,7 +1073,7 @@ } { long value = fields->f_dsp_48_u16; - value = ((((((UHI) (value) >> (8))) & (255))) | (((((value) << (8))) & (65280)))); + value = ((((((UHI) (value) >> (8))) & (255))) | (((((value) & (255))) << (8)))); errmsg = insert_normal (cd, value, 0, 32, 16, 16, 32, total_length, buffer); } if (errmsg) @@ -1084,7 +1089,7 @@ case M32C_OPERAND_DSP_8_S24 : { long value = fields->f_dsp_8_s24; - value = ((((((((USI) (value) >> (16))) & (255))) | (((value) & (65280))))) | (((EXTQISI (TRUNCSIQI (((value) & (255))))) << (16)))); + value = ((((((((((((USI) (value) >> (16))) & (255))) | (((value) & (65280))))) | (((((value) & (255))) << (16))))) ^ (8388608))) - (8388608)); errmsg = insert_normal (cd, value, 0|(1<<CGEN_IFLD_SIGNED), 0, 8, 24, 32, total_length, buffer); } break; @@ -1094,7 +1099,7 @@ case M32C_OPERAND_DSP_8_U16 : { long value = fields->f_dsp_8_u16; - value = ((((((UHI) (value) >> (8))) & (255))) | (((((value) << (8))) & (65280)))); + value = ((((((UHI) (value) >> (8))) & (255))) | (((((value) & (255))) << (8)))); errmsg = insert_normal (cd, value, 0, 0, 8, 16, 32, total_length, buffer); } break; @@ -1191,7 +1196,7 @@ case M32C_OPERAND_DST32RNPREFIXEDQI : { long value = fields->f_dst32_rn_prefixed_QI; - value = (((((((~ (value))) << (1))) & (2))) | (((((USI) (value) >> (1))) & (1)))); + value = (((((~ (((value) << (1))))) & (2))) | (((((USI) (value) >> (1))) & (1)))); errmsg = insert_normal (cd, value, 0, 0, 16, 2, 32, total_length, buffer); } break; @@ -1212,7 +1217,7 @@ case M32C_OPERAND_DST32RNUNPREFIXEDQI : { long value = fields->f_dst32_rn_unprefixed_QI; - value = (((((((~ (value))) << (1))) & (2))) | (((((USI) (value) >> (1))) & (1)))); + value = (((((~ (((value) << (1))))) & (2))) | (((((USI) (value) >> (1))) & (1)))); errmsg = insert_normal (cd, value, 0, 0, 8, 2, 32, total_length, buffer); } break; @@ -1237,7 +1242,7 @@ case M32C_OPERAND_IMM_16_HI : { long value = fields->f_dsp_16_s16; - value = EXTHISI (((HI) (INT) (((((((UINT) (value) >> (8))) & (255))) | (((((value) << (8))) & (65280))))))); + value = EXTHISI (((HI) (INT) (((((((UINT) (value) >> (8))) & (255))) | (((((value) & (255))) << (8))))))); errmsg = insert_normal (cd, value, 0|(1<<CGEN_IFLD_SIGNED), 0, 16, 16, 32, total_length, buffer); } break; @@ -1252,14 +1257,14 @@ } { long value = fields->f_dsp_16_u16; - value = ((((((UHI) (value) >> (8))) & (255))) | (((((value) << (8))) & (65280)))); + value = ((((((UHI) (value) >> (8))) & (255))) | (((((value) & (255))) << (8)))); errmsg = insert_normal (cd, value, 0, 0, 16, 16, 32, total_length, buffer); } if (errmsg) break; { long value = fields->f_dsp_32_u16; - value = ((((((UHI) (value) >> (8))) & (255))) | (((((value) << (8))) & (65280)))); + value = ((((((UHI) (value) >> (8))) & (255))) | (((((value) & (255))) << (8)))); errmsg = insert_normal (cd, value, 0, 32, 0, 16, 32, total_length, buffer); } if (errmsg) @@ -1307,7 +1312,7 @@ case M32C_OPERAND_IMM_32_HI : { long value = fields->f_dsp_32_s16; - value = EXTHISI (((HI) (INT) (((((((UINT) (value) >> (8))) & (255))) | (((((value) << (8))) & (65280))))))); + value = EXTHISI (((HI) (INT) (((((((UINT) (value) >> (8))) & (255))) | (((((value) & (255))) << (8))))))); errmsg = insert_normal (cd, value, 0|(1<<CGEN_IFLD_SIGNED), 32, 0, 16, 32, total_length, buffer); } break; @@ -1317,14 +1322,14 @@ case M32C_OPERAND_IMM_32_SI : { long value = fields->f_dsp_32_s32; - value = EXTSISI (((((((((UINT) (value) >> (24))) & (255))) | (((((UINT) (value) >> (8))) & (65280))))) | (((((((value) << (8))) & (16711680))) | (((((value) << (24))) & (0xff000000))))))); + value = EXTSISI (((((((((UINT) (value) >> (24))) & (255))) | (((((UINT) (value) >> (8))) & (65280))))) | (((((((value) & (65280))) << (8))) | (((((value) & (255))) << (24))))))); errmsg = insert_normal (cd, value, 0|(1<<CGEN_IFLD_SIGNED), 32, 0, 32, 32, total_length, buffer); } break; case M32C_OPERAND_IMM_40_HI : { long value = fields->f_dsp_40_s16; - value = EXTHISI (((HI) (INT) (((((((UINT) (value) >> (8))) & (255))) | (((((value) << (8))) & (65280))))))); + value = EXTHISI (((HI) (INT) (((((((UINT) (value) >> (8))) & (255))) | (((((value) & (255))) << (8))))))); errmsg = insert_normal (cd, value, 0|(1<<CGEN_IFLD_SIGNED), 32, 8, 16, 32, total_length, buffer); } break; @@ -1352,7 +1357,7 @@ case M32C_OPERAND_IMM_48_HI : { long value = fields->f_dsp_48_s16; - value = EXTHISI (((HI) (INT) (((((((UINT) (value) >> (8))) & (255))) | (((((value) << (8))) & (65280))))))); + value = EXTHISI (((HI) (INT) (((((((UINT) (value) >> (8))) & (255))) | (((((value) & (255))) << (8))))))); errmsg = insert_normal (cd, value, 0|(1<<CGEN_IFLD_SIGNED), 32, 16, 16, 32, total_length, buffer); } break; @@ -1367,14 +1372,14 @@ } { long value = fields->f_dsp_48_u16; - value = ((((((UHI) (value) >> (8))) & (255))) | (((((value) << (8))) & (65280)))); + value = ((((((UHI) (value) >> (8))) & (255))) | (((((value) & (255))) << (8)))); errmsg = insert_normal (cd, value, 0, 32, 16, 16, 32, total_length, buffer); } if (errmsg) break; { long value = fields->f_dsp_64_u16; - value = ((((((UHI) (value) >> (8))) & (255))) | (((((value) << (8))) & (65280)))); + value = ((((((UHI) (value) >> (8))) & (255))) | (((((value) & (255))) << (8)))); errmsg = insert_normal (cd, value, 0, 64, 0, 16, 32, total_length, buffer); } if (errmsg) @@ -1401,14 +1406,14 @@ case M32C_OPERAND_IMM_64_HI : { long value = fields->f_dsp_64_s16; - value = EXTHISI (((HI) (INT) (((((((UINT) (value) >> (8))) & (255))) | (((((value) << (8))) & (65280))))))); + value = EXTHISI (((HI) (INT) (((((((UINT) (value) >> (8))) & (255))) | (((((value) & (255))) << (8))))))); errmsg = insert_normal (cd, value, 0|(1<<CGEN_IFLD_SIGNED), 64, 0, 16, 32, total_length, buffer); } break; case M32C_OPERAND_IMM_8_HI : { long value = fields->f_dsp_8_s16; - value = EXTHISI (((HI) (INT) (((((((UINT) (value) >> (8))) & (255))) | (((((value) << (8))) & (65280))))))); + value = EXTHISI (((HI) (INT) (((((((UINT) (value) >> (8))) & (255))) | (((((value) & (255))) << (8))))))); errmsg = insert_normal (cd, value, 0|(1<<CGEN_IFLD_SIGNED), 0, 8, 16, 32, total_length, buffer); } break; @@ -1603,7 +1608,7 @@ case M32C_OPERAND_SRC32RNPREFIXEDQI : { long value = fields->f_src32_rn_prefixed_QI; - value = (((((((~ (value))) << (1))) & (2))) | (((((USI) (value) >> (1))) & (1)))); + value = (((((~ (((value) << (1))))) & (2))) | (((((USI) (value) >> (1))) & (1)))); errmsg = insert_normal (cd, value, 0, 0, 18, 2, 32, total_length, buffer); } break; @@ -1624,7 +1629,7 @@ case M32C_OPERAND_SRC32RNUNPREFIXEDQI : { long value = fields->f_src32_rn_unprefixed_QI; - value = (((((((~ (value))) << (1))) & (2))) | (((((USI) (value) >> (1))) & (1)))); + value = (((((~ (((value) << (1))))) & (2))) | (((((USI) (value) >> (1))) & (1)))); errmsg = insert_normal (cd, value, 0, 0, 10, 2, 32, total_length, buffer); } break; @@ -1826,7 +1831,7 @@ { long value; length = extract_normal (cd, ex_info, insn_value, 0, 0, 16, 16, 32, total_length, pc, & value); - value = ((((((UHI) (value) >> (8))) & (255))) | (((((value) << (8))) & (65280)))); + value = ((((((UHI) (value) >> (8))) & (255))) | (((((value) & (255))) << (8)))); fields->f_dsp_16_u16 = value; } break; @@ -1851,7 +1856,7 @@ length = extract_normal (cd, ex_info, insn_value, 0|(1<<CGEN_IFLD_SIGNED), 0, 16, 8, 32, total_length, pc, & fields->f_dsp_16_s8); if (length <= 0) break; { - FLD (f_bitbase32_16_s11_unprefixed) = ((((FLD (f_dsp_16_s8)) << (3))) | (FLD (f_bitno32_unprefixed))); + FLD (f_bitbase32_16_s11_unprefixed) = ((((FLD (f_dsp_16_s8)) * (8))) | (FLD (f_bitno32_unprefixed))); } } break; @@ -1862,12 +1867,12 @@ { long value; length = extract_normal (cd, ex_info, insn_value, 0|(1<<CGEN_IFLD_SIGNED), 0, 16, 16, 32, total_length, pc, & value); - value = EXTHISI (((HI) (INT) (((((((UINT) (value) >> (8))) & (255))) | (((((value) << (8))) & (65280))))))); + value = EXTHISI (((HI) (INT) (((((((UINT) (value) >> (8))) & (255))) | (((((value) & (255))) << (8))))))); fields->f_dsp_16_s16 = value; } if (length <= 0) break; { - FLD (f_bitbase32_16_s19_unprefixed) = ((((FLD (f_dsp_16_s16)) << (3))) | (FLD (f_bitno32_unprefixed))); + FLD (f_bitbase32_16_s19_unprefixed) = ((((FLD (f_dsp_16_s16)) * (8))) | (FLD (f_bitno32_unprefixed))); } } break; @@ -1889,7 +1894,7 @@ { long value; length = extract_normal (cd, ex_info, insn_value, 0, 0, 16, 16, 32, total_length, pc, & value); - value = ((((((UHI) (value) >> (8))) & (255))) | (((((value) << (8))) & (65280)))); + value = ((((((UHI) (value) >> (8))) & (255))) | (((((value) & (255))) << (8)))); fields->f_dsp_16_u16 = value; } if (length <= 0) break; @@ -1905,7 +1910,7 @@ { long value; length = extract_normal (cd, ex_info, insn_value, 0, 0, 16, 16, 32, total_length, pc, & value); - value = ((((((UHI) (value) >> (8))) & (255))) | (((((value) << (8))) & (65280)))); + value = ((((((UHI) (value) >> (8))) & (255))) | (((((value) & (255))) << (8)))); fields->f_dsp_16_u16 = value; } if (length <= 0) break; @@ -1923,7 +1928,7 @@ length = extract_normal (cd, ex_info, insn_value, 0|(1<<CGEN_IFLD_SIGNED), 0, 24, 8, 32, total_length, pc, & fields->f_dsp_24_s8); if (length <= 0) break; { - FLD (f_bitbase32_24_s11_prefixed) = ((((FLD (f_dsp_24_s8)) << (3))) | (FLD (f_bitno32_prefixed))); + FLD (f_bitbase32_24_s11_prefixed) = ((((FLD (f_dsp_24_s8)) * (8))) | (FLD (f_bitno32_prefixed))); } } break; @@ -1936,7 +1941,7 @@ length = extract_normal (cd, ex_info, insn_value, 0|(1<<CGEN_IFLD_SIGNED), 32, 0, 8, 32, total_length, pc, & fields->f_dsp_32_s8); if (length <= 0) break; { - FLD (f_bitbase32_24_s19_prefixed) = ((((FLD (f_dsp_24_u8)) << (3))) | (((((FLD (f_dsp_32_s8)) << (11))) | (FLD (f_bitno32_prefixed))))); + FLD (f_bitbase32_24_s19_prefixed) = ((((FLD (f_dsp_24_u8)) << (3))) | (((((FLD (f_dsp_32_s8)) * (2048))) | (FLD (f_bitno32_prefixed))))); } } break; @@ -1973,7 +1978,7 @@ { long value; length = extract_normal (cd, ex_info, insn_value, 0, 32, 0, 16, 32, total_length, pc, & value); - value = ((((((UHI) (value) >> (8))) & (255))) | (((((value) << (8))) & (65280)))); + value = ((((((UHI) (value) >> (8))) & (255))) | (((((value) & (255))) << (8)))); fields->f_dsp_32_u16 = value; } if (length <= 0) break; @@ -1998,7 +2003,7 @@ { long value; length = extract_normal (cd, ex_info, insn_value, 0|(1<<CGEN_IFLD_SIGNED), 0, 16, 16, 32, total_length, pc, & value); - value = EXTHISI (((HI) (INT) (((((((UINT) (value) >> (8))) & (255))) | (((((value) << (8))) & (65280))))))); + value = EXTHISI (((HI) (INT) (((((((UINT) (value) >> (8))) & (255))) | (((((value) & (255))) << (8))))))); fields->f_dsp_16_s16 = value; } break; @@ -2009,7 +2014,7 @@ { long value; length = extract_normal (cd, ex_info, insn_value, 0, 0, 16, 16, 32, total_length, pc, & value); - value = ((((((UHI) (value) >> (8))) & (255))) | (((((value) << (8))) & (65280)))); + value = ((((((UHI) (value) >> (8))) & (255))) | (((((value) & (255))) << (8)))); fields->f_dsp_16_u16 = value; } break; @@ -2018,7 +2023,7 @@ { long value; length = extract_normal (cd, ex_info, insn_value, 0, 0, 16, 16, 32, total_length, pc, & value); - value = ((((((UHI) (value) >> (8))) & (255))) | (((((value) << (8))) & (65280)))); + value = ((((((UHI) (value) >> (8))) & (255))) | (((((value) & (255))) << (8)))); fields->f_dsp_16_u16 = value; } if (length <= 0) break; @@ -2034,7 +2039,7 @@ { long value; length = extract_normal (cd, ex_info, insn_value, 0, 0, 16, 16, 32, total_length, pc, & value); - value = ((((((UHI) (value) >> (8))) & (255))) | (((((value) << (8))) & (65280)))); + value = ((((((UHI) (value) >> (8))) & (255))) | (((((value) & (255))) << (8)))); fields->f_dsp_16_u16 = value; } if (length <= 0) break; @@ -2080,7 +2085,7 @@ { long value; length = extract_normal (cd, ex_info, insn_value, 0, 32, 0, 16, 32, total_length, pc, & value); - value = ((((((UHI) (value) >> (8))) & (255))) | (((((value) << (8))) & (65280)))); + value = ((((((UHI) (value) >> (8))) & (255))) | (((((value) & (255))) << (8)))); fields->f_dsp_32_u16 = value; } if (length <= 0) break; @@ -2096,7 +2101,7 @@ { long value; length = extract_normal (cd, ex_info, insn_value, 0, 32, 0, 16, 32, total_length, pc, & value); - value = ((((((UHI) (value) >> (8))) & (255))) | (((((value) << (8))) & (65280)))); + value = ((((((UHI) (value) >> (8))) & (255))) | (((((value) & (255))) << (8)))); fields->f_dsp_32_u16 = value; } if (length <= 0) break; @@ -2112,7 +2117,7 @@ { long value; length = extract_normal (cd, ex_info, insn_value, 0|(1<<CGEN_IFLD_SIGNED), 32, 0, 16, 32, total_length, pc, & value); - value = EXTHISI (((HI) (INT) (((((((UINT) (value) >> (8))) & (255))) | (((((value) << (8))) & (65280))))))); + value = EXTHISI (((HI) (INT) (((((((UINT) (value) >> (8))) & (255))) | (((((value) & (255))) << (8))))))); fields->f_dsp_32_s16 = value; } break; @@ -2123,7 +2128,7 @@ { long value; length = extract_normal (cd, ex_info, insn_value, 0, 32, 0, 16, 32, total_length, pc, & value); - value = ((((((UHI) (value) >> (8))) & (255))) | (((((value) << (8))) & (65280)))); + value = ((((((UHI) (value) >> (8))) & (255))) | (((((value) & (255))) << (8)))); fields->f_dsp_32_u16 = value; } break; @@ -2150,7 +2155,7 @@ { long value; length = extract_normal (cd, ex_info, insn_value, 0|(1<<CGEN_IFLD_SIGNED), 32, 8, 16, 32, total_length, pc, & value); - value = EXTHISI (((HI) (INT) (((((((UINT) (value) >> (8))) & (255))) | (((((value) << (8))) & (65280))))))); + value = EXTHISI (((HI) (INT) (((((((UINT) (value) >> (8))) & (255))) | (((((value) & (255))) << (8))))))); fields->f_dsp_40_s16 = value; } break; @@ -2161,7 +2166,7 @@ { long value; length = extract_normal (cd, ex_info, insn_value, 0, 32, 8, 16, 32, total_length, pc, & value); - value = ((((((UHI) (value) >> (8))) & (255))) | (((((value) << (8))) & (65280)))); + value = ((((((UHI) (value) >> (8))) & (255))) | (((((value) & (255))) << (8)))); fields->f_dsp_40_u16 = value; } break; @@ -2188,7 +2193,7 @@ { long value; length = extract_normal (cd, ex_info, insn_value, 0|(1<<CGEN_IFLD_SIGNED), 32, 16, 16, 32, total_length, pc, & value); - value = EXTHISI (((HI) (INT) (((((((UINT) (value) >> (8))) & (255))) | (((((value) << (8))) & (65280))))))); + value = EXTHISI (((HI) (INT) (((((((UINT) (value) >> (8))) & (255))) | (((((value) & (255))) << (8))))))); fields->f_dsp_48_s16 = value; } break; @@ -2199,7 +2204,7 @@ { long value; length = extract_normal (cd, ex_info, insn_value, 0, 32, 16, 16, 32, total_length, pc, & value); - value = ((((((UHI) (value) >> (8))) & (255))) | (((((value) << (8))) & (65280)))); + value = ((((((UHI) (value) >> (8))) & (255))) | (((((value) & (255))) << (8)))); fields->f_dsp_48_u16 = value; } break; @@ -2208,7 +2213,7 @@ { long value; length = extract_normal (cd, ex_info, insn_value, 0, 32, 16, 16, 32, total_length, pc, & value); - value = ((((((UHI) (value) >> (8))) & (255))) | (((((value) << (8))) & (65280)))); + value = ((((((UHI) (value) >> (8))) & (255))) | (((((value) & (255))) << (8)))); fields->f_dsp_48_u16 = value; } if (length <= 0) break; @@ -2224,7 +2229,7 @@ { long value; length = extract_normal (cd, ex_info, insn_value, 0, 32, 16, 16, 32, total_length, pc, & value); - value = ((((((UHI) (value) >> (8))) & (255))) | (((((value) << (8))) & (65280)))); + value = ((((((UHI) (value) >> (8))) & (255))) | (((((value) & (255))) << (8)))); fields->f_dsp_48_u16 = value; } if (length <= 0) break; @@ -2242,7 +2247,7 @@ { long value; length = extract_normal (cd, ex_info, insn_value, 0|(1<<CGEN_IFLD_SIGNED), 0, 8, 24, 32, total_length, pc, & value); - value = ((((((((USI) (value) >> (16))) & (255))) | (((value) & (65280))))) | (((EXTQISI (TRUNCSIQI (((value) & (255))))) << (16)))); + value = ((((((((((((USI) (value) >> (16))) & (255))) | (((value) & (65280))))) | (((((value) & (255))) << (16))))) ^ (8388608))) - (8388608)); fields->f_dsp_8_s24 = value; } break; @@ -2253,7 +2258,7 @@ { long value; length = extract_normal (cd, ex_info, insn_value, 0, 0, 8, 16, 32, total_length, pc, & value); - value = ((((((UHI) (value) >> (8))) & (255))) | (((((value) << (8))) & (65280)))); + value = ((((((UHI) (value) >> (8))) & (255))) | (((((value) & (255))) << (8)))); fields->f_dsp_8_u16 = value; } break; @@ -2404,7 +2409,7 @@ { long value; length = extract_normal (cd, ex_info, insn_value, 0|(1<<CGEN_IFLD_SIGNED), 0, 16, 16, 32, total_length, pc, & value); - value = EXTHISI (((HI) (INT) (((((((UINT) (value) >> (8))) & (255))) | (((((value) << (8))) & (65280))))))); + value = EXTHISI (((HI) (INT) (((((((UINT) (value) >> (8))) & (255))) | (((((value) & (255))) << (8))))))); fields->f_dsp_16_s16 = value; } break; @@ -2416,14 +2421,14 @@ { long value; length = extract_normal (cd, ex_info, insn_value, 0, 0, 16, 16, 32, total_length, pc, & value); - value = ((((((UHI) (value) >> (8))) & (255))) | (((((value) << (8))) & (65280)))); + value = ((((((UHI) (value) >> (8))) & (255))) | (((((value) & (255))) << (8)))); fields->f_dsp_16_u16 = value; } if (length <= 0) break; { long value; length = extract_normal (cd, ex_info, insn_value, 0, 32, 0, 16, 32, total_length, pc, & value); - value = ((((((UHI) (value) >> (8))) & (255))) | (((((value) << (8))) & (65280)))); + value = ((((((UHI) (value) >> (8))) & (255))) | (((((value) & (255))) << (8)))); fields->f_dsp_32_u16 = value; } if (length <= 0) break; @@ -2469,7 +2474,7 @@ { long value; length = extract_normal (cd, ex_info, insn_value, 0|(1<<CGEN_IFLD_SIGNED), 32, 0, 16, 32, total_length, pc, & value); - value = EXTHISI (((HI) (INT) (((((((UINT) (value) >> (8))) & (255))) | (((((value) << (8))) & (65280))))))); + value = EXTHISI (((HI) (INT) (((((((UINT) (value) >> (8))) & (255))) | (((((value) & (255))) << (8))))))); fields->f_dsp_32_s16 = value; } break; @@ -2480,7 +2485,7 @@ { long value; length = extract_normal (cd, ex_info, insn_value, 0|(1<<CGEN_IFLD_SIGNED), 32, 0, 32, 32, total_length, pc, & value); - value = EXTSISI (((((((((UINT) (value) >> (24))) & (255))) | (((((UINT) (value) >> (8))) & (65280))))) | (((((((value) << (8))) & (16711680))) | (((((value) << (24))) & (0xff000000))))))); + value = EXTSISI (((((((((UINT) (value) >> (24))) & (255))) | (((((UINT) (value) >> (8))) & (65280))))) | (((((((value) & (65280))) << (8))) | (((((value) & (255))) << (24))))))); fields->f_dsp_32_s32 = value; } break; @@ -2488,7 +2493,7 @@ { long value; length = extract_normal (cd, ex_info, insn_value, 0|(1<<CGEN_IFLD_SIGNED), 32, 8, 16, 32, total_length, pc, & value); - value = EXTHISI (((HI) (INT) (((((((UINT) (value) >> (8))) & (255))) | (((((value) << (8))) & (65280))))))); + value = EXTHISI (((HI) (INT) (((((((UINT) (value) >> (8))) & (255))) | (((((value) & (255))) << (8))))))); fields->f_dsp_40_s16 = value; } break; @@ -2515,7 +2520,7 @@ { long value; length = extract_normal (cd, ex_info, insn_value, 0|(1<<CGEN_IFLD_SIGNED), 32, 16, 16, 32, total_length, pc, & value); - value = EXTHISI (((HI) (INT) (((((((UINT) (value) >> (8))) & (255))) | (((((value) << (8))) & (65280))))))); + value = EXTHISI (((HI) (INT) (((((((UINT) (value) >> (8))) & (255))) | (((((value) & (255))) << (8))))))); fields->f_dsp_48_s16 = value; } break; @@ -2527,19 +2532,19 @@ { long value; length = extract_normal (cd, ex_info, insn_value, 0, 32, 16, 16, 32, total_length, pc, & value); - value = ((((((UHI) (value) >> (8))) & (255))) | (((((value) << (8))) & (65280)))); + value = ((((((UHI) (value) >> (8))) & (255))) | (((((value) & (255))) << (8)))); fields->f_dsp_48_u16 = value; } if (length <= 0) break; { long value; length = extract_normal (cd, ex_info, insn_value, 0, 64, 0, 16, 32, total_length, pc, & value); - value = ((((((UHI) (value) >> (8))) & (255))) | (((((value) << (8))) & (65280)))); + value = ((((((UHI) (value) >> (8))) & (255))) | (((((value) & (255))) << (8)))); fields->f_dsp_64_u16 = value; } if (length <= 0) break; { - FLD (f_dsp_48_s32) = ((((FLD (f_dsp_48_u16)) & (65535))) | (((((FLD (f_dsp_64_u16)) << (16))) & (0xffff0000)))); + FLD (f_dsp_48_s32) = ((((FLD (f_dsp_48_u16)) & (65535))) | (((((FLD (f_dsp_64_u16)) & (65535))) << (16)))); } } break; @@ -2561,7 +2566,7 @@ { long value; length = extract_normal (cd, ex_info, insn_value, 0|(1<<CGEN_IFLD_SIGNED), 64, 0, 16, 32, total_length, pc, & value); - value = EXTHISI (((HI) (INT) (((((((UINT) (value) >> (8))) & (255))) | (((((value) << (8))) & (65280))))))); + value = EXTHISI (((HI) (INT) (((((((UINT) (value) >> (8))) & (255))) | (((((value) & (255))) << (8))))))); fields->f_dsp_64_s16 = value; } break; @@ -2569,7 +2574,7 @@ { long value; length = extract_normal (cd, ex_info, insn_value, 0|(1<<CGEN_IFLD_SIGNED), 0, 8, 16, 32, total_length, pc, & value); - value = EXTHISI (((HI) (INT) (((((((UINT) (value) >> (8))) & (255))) | (((((value) << (8))) & (65280))))))); + value = EXTHISI (((HI) (INT) (((((((UINT) (value) >> (8))) & (255))) | (((((value) & (255))) << (8))))))); fields->f_dsp_8_s16 = value; } break; diff -Nru gdb-9.1/opcodes/m32c-opc.c gdb-10.2/opcodes/m32c-opc.c --- gdb-9.1/opcodes/m32c-opc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/m32c-opc.c 2021-04-25 04:06:26.000000000 +0000 @@ -3,7 +3,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright (C) 1996-2019 Free Software Foundation, Inc. +Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of the GNU Binutils and/or GDB, the GNU debugger. diff -Nru gdb-9.1/opcodes/m32c-opc.h gdb-10.2/opcodes/m32c-opc.h --- gdb-9.1/opcodes/m32c-opc.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/m32c-opc.h 2021-04-25 04:06:26.000000000 +0000 @@ -3,7 +3,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright (C) 1996-2019 Free Software Foundation, Inc. +Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of the GNU Binutils and/or GDB, the GNU debugger. diff -Nru gdb-9.1/opcodes/m32r-asm.c gdb-10.2/opcodes/m32r-asm.c --- gdb-9.1/opcodes/m32r-asm.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/m32r-asm.c 2021-04-25 04:06:26.000000000 +0000 @@ -5,7 +5,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. - the resultant file is machine generated, cgen-asm.in isn't - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of libopcodes. diff -Nru gdb-9.1/opcodes/m32r-desc.c gdb-10.2/opcodes/m32r-desc.c --- gdb-9.1/opcodes/m32r-desc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/m32r-desc.c 2021-04-25 04:06:26.000000000 +0000 @@ -3,7 +3,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright (C) 1996-2019 Free Software Foundation, Inc. +Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of the GNU Binutils and/or GDB, the GNU debugger. @@ -1395,6 +1395,7 @@ CGEN_CPU_OPEN_MACHS: bitmap of values in enum mach_attr CGEN_CPU_OPEN_BFDMACH: specify 1 mach using bfd name CGEN_CPU_OPEN_ENDIAN: specify endian choice + CGEN_CPU_OPEN_INSN_ENDIAN: specify instruction endian choice CGEN_CPU_OPEN_END: terminates arguments ??? Simultaneous multiple isas might not make sense, but it's not (yet) @@ -1408,6 +1409,7 @@ CGEN_BITSET *isas = 0; /* 0 = "unspecified" */ unsigned int machs = 0; /* 0 = "unspecified" */ enum cgen_endian endian = CGEN_ENDIAN_UNKNOWN; + enum cgen_endian insn_endian = CGEN_ENDIAN_UNKNOWN; va_list ap; if (! init_p) @@ -1442,6 +1444,9 @@ case CGEN_CPU_OPEN_ENDIAN : endian = va_arg (ap, enum cgen_endian); break; + case CGEN_CPU_OPEN_INSN_ENDIAN : + insn_endian = va_arg (ap, enum cgen_endian); + break; default : opcodes_error_handler (/* xgettext:c-format */ @@ -1471,11 +1476,8 @@ cd->isas = cgen_bitset_copy (isas); cd->machs = machs; cd->endian = endian; - /* FIXME: for the sparc case we can determine insn-endianness statically. - The worry here is where both data and insn endian can be independently - chosen, in which case this function will need another argument. - Actually, will want to allow for more arguments in the future anyway. */ - cd->insn_endian = endian; + cd->insn_endian + = (insn_endian == CGEN_ENDIAN_UNKNOWN ? endian : insn_endian); /* Table (re)builder. */ cd->rebuild_tables = m32r_cgen_rebuild_tables; @@ -1525,18 +1527,10 @@ regfree (CGEN_INSN_RX (insns)); } - if (cd->macro_insn_table.init_entries) - free ((CGEN_INSN *) cd->macro_insn_table.init_entries); - - if (cd->insn_table.init_entries) - free ((CGEN_INSN *) cd->insn_table.init_entries); - - if (cd->hw_table.entries) - free ((CGEN_HW_ENTRY *) cd->hw_table.entries); - - if (cd->operand_table.entries) - free ((CGEN_HW_ENTRY *) cd->operand_table.entries); - + free ((CGEN_INSN *) cd->macro_insn_table.init_entries); + free ((CGEN_INSN *) cd->insn_table.init_entries); + free ((CGEN_HW_ENTRY *) cd->hw_table.entries); + free ((CGEN_HW_ENTRY *) cd->operand_table.entries); free (cd); } diff -Nru gdb-9.1/opcodes/m32r-desc.h gdb-10.2/opcodes/m32r-desc.h --- gdb-9.1/opcodes/m32r-desc.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/m32r-desc.h 2021-04-25 04:06:26.000000000 +0000 @@ -3,7 +3,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright (C) 1996-2019 Free Software Foundation, Inc. +Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of the GNU Binutils and/or GDB, the GNU debugger. diff -Nru gdb-9.1/opcodes/m32r-dis.c gdb-10.2/opcodes/m32r-dis.c --- gdb-9.1/opcodes/m32r-dis.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/m32r-dis.c 2021-04-25 04:06:26.000000000 +0000 @@ -5,7 +5,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. - the resultant file is machine generated, cgen-dis.in isn't - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of libopcodes. @@ -452,7 +452,7 @@ /* 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); + 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 @@ -583,6 +583,7 @@ CGEN_BITSET *isa; int mach; int endian; + int insn_endian; CGEN_CPU_DESC cd; } cpu_desc_list; @@ -595,12 +596,16 @@ 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; /* ??? gdb will set mach but leave the architecture as "unknown" */ @@ -666,9 +671,11 @@ prev_isa = cgen_bitset_copy (isa); prev_mach = mach; prev_endian = endian; + prev_insn_endian = insn_endian; cd = m32r_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 (); diff -Nru gdb-9.1/opcodes/m32r-ibld.c gdb-10.2/opcodes/m32r-ibld.c --- gdb-9.1/opcodes/m32r-ibld.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/m32r-ibld.c 2021-04-25 04:06:26.000000000 +0000 @@ -4,7 +4,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN: Cpu tools GENerator. - the resultant file is machine generated, cgen-ibld.in isn't - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of libopcodes. @@ -85,20 +85,20 @@ int word_length, unsigned char *bufp) { - unsigned long x,mask; + unsigned long x, mask; int shift; - x = cgen_get_insn_value (cd, bufp, word_length); + x = cgen_get_insn_value (cd, bufp, word_length, cd->endian); /* Written this way to avoid undefined behaviour. */ - mask = (((1L << (length - 1)) - 1) << 1) | 1; + mask = (1UL << (length - 1) << 1) - 1; if (CGEN_INSN_LSB0_P) shift = (start + 1) - length; else shift = (word_length - (start + length)); x = (x & ~(mask << shift)) | ((value & mask) << shift); - cgen_put_insn_value (cd, bufp, word_length, (bfd_vma) x); + cgen_put_insn_value (cd, bufp, word_length, (bfd_vma) x, cd->endian); } #endif /* ! CGEN_INT_INSN_P */ @@ -131,13 +131,15 @@ CGEN_INSN_BYTES_PTR buffer) { static char errbuf[100]; - /* Written this way to avoid undefined behaviour. */ - unsigned long mask = (((1L << (length - 1)) - 1) << 1) | 1; + unsigned long mask; /* If LENGTH is zero, this operand doesn't contribute to the value. */ if (length == 0) return NULL; + /* Written this way to avoid undefined behaviour. */ + mask = (1UL << (length - 1) << 1) - 1; + if (word_length > 8 * sizeof (CGEN_INSN_INT)) abort (); @@ -153,7 +155,7 @@ /* Ensure VALUE will fit. */ if (CGEN_BOOL_ATTR (attrs, CGEN_IFLD_SIGN_OPT)) { - long minval = - (1L << (length - 1)); + long minval = - (1UL << (length - 1)); unsigned long maxval = mask; if ((value > 0 && (unsigned long) value > maxval) @@ -191,8 +193,8 @@ { if (! cgen_signed_overflow_ok_p (cd)) { - long minval = - (1L << (length - 1)); - long maxval = (1L << (length - 1)) - 1; + long minval = - (1UL << (length - 1)); + long maxval = (1UL << (length - 1)) - 1; if (value < minval || value > maxval) { @@ -269,8 +271,8 @@ #else cgen_put_insn_value (cd, buffer, min ((unsigned) cd->base_insn_bitsize, - (unsigned) CGEN_FIELDS_BITSIZE (fields)), - value); + (unsigned) CGEN_FIELDS_BITSIZE (fields)), + value, cd->insn_endian); #endif /* ! CGEN_INT_INSN_P */ @@ -314,7 +316,7 @@ { int shift = insn_length - length; /* Written this way to avoid undefined behaviour. */ - CGEN_INSN_INT mask = (((1L << (length - 1)) - 1) << 1) | 1; + CGEN_INSN_INT mask = length == 0 ? 0 : (1UL << (length - 1) << 1) - 1; *buf = (*buf & ~(mask << shift)) | ((value & mask) << shift); } @@ -387,7 +389,7 @@ unsigned long x; int shift; - x = cgen_get_insn_value (cd, bufp, word_length); + x = cgen_get_insn_value (cd, bufp, word_length, cd->endian); if (CGEN_INSN_LSB0_P) shift = (start + 1) - length; @@ -480,7 +482,10 @@ abort (); if (fill_cache (cd, ex_info, word_offset / 8, word_length / 8, pc) == 0) - return 0; + { + *valuep = 0; + return 0; + } value = extract_1 (cd, ex_info, start, length, word_length, bufp, pc); } @@ -488,12 +493,12 @@ #endif /* ! CGEN_INT_INSN_P */ /* Written this way to avoid undefined behaviour. */ - mask = (((1L << (length - 1)) - 1) << 1) | 1; + mask = (1UL << (length - 1) << 1) - 1; value &= mask; /* sign extend? */ if (CGEN_BOOL_ATTR (attrs, CGEN_IFLD_SIGNED) - && (value & (1L << (length - 1)))) + && (value & (1UL << (length - 1)))) value |= ~mask; *valuep = value; @@ -723,7 +728,7 @@ { long value; length = extract_normal (cd, ex_info, insn_value, 0|(1<<CGEN_IFLD_SIGNED)|(1<<CGEN_IFLD_RELOC)|(1<<CGEN_IFLD_PCREL_ADDR), 0, 16, 16, 32, total_length, pc, & value); - value = ((((value) << (2))) + (pc)); + value = ((((value) * (4))) + (pc)); fields->f_disp16 = value; } break; @@ -731,7 +736,7 @@ { long value; length = extract_normal (cd, ex_info, insn_value, 0|(1<<CGEN_IFLD_SIGNED)|(1<<CGEN_IFLD_RELOC)|(1<<CGEN_IFLD_PCREL_ADDR), 0, 8, 24, 32, total_length, pc, & value); - value = ((((value) << (2))) + (pc)); + value = ((((value) * (4))) + (pc)); fields->f_disp24 = value; } break; @@ -739,7 +744,7 @@ { long value; length = extract_normal (cd, ex_info, insn_value, 0|(1<<CGEN_IFLD_SIGNED)|(1<<CGEN_IFLD_RELOC)|(1<<CGEN_IFLD_PCREL_ADDR), 0, 8, 8, 32, total_length, pc, & value); - value = ((((value) << (2))) + (((pc) & (-4)))); + value = ((((value) * (4))) + (((pc) & (-4)))); fields->f_disp8 = value; } break; diff -Nru gdb-9.1/opcodes/m32r-opc.c gdb-10.2/opcodes/m32r-opc.c --- gdb-9.1/opcodes/m32r-opc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/m32r-opc.c 2021-04-25 04:06:26.000000000 +0000 @@ -3,7 +3,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright (C) 1996-2019 Free Software Foundation, Inc. +Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of the GNU Binutils and/or GDB, the GNU debugger. diff -Nru gdb-9.1/opcodes/m32r-opc.h gdb-10.2/opcodes/m32r-opc.h --- gdb-9.1/opcodes/m32r-opc.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/m32r-opc.h 2021-04-25 04:06:26.000000000 +0000 @@ -3,7 +3,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright (C) 1996-2019 Free Software Foundation, Inc. +Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of the GNU Binutils and/or GDB, the GNU debugger. diff -Nru gdb-9.1/opcodes/m32r-opinst.c gdb-10.2/opcodes/m32r-opinst.c --- gdb-9.1/opcodes/m32r-opinst.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/m32r-opinst.c 2021-04-25 04:06:26.000000000 +0000 @@ -3,7 +3,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright (C) 1996-2019 Free Software Foundation, Inc. +Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of the GNU Binutils and/or GDB, the GNU debugger. diff -Nru gdb-9.1/opcodes/m68hc11-dis.c gdb-10.2/opcodes/m68hc11-dis.c --- gdb-9.1/opcodes/m68hc11-dis.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/m68hc11-dis.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* m68hc11-dis.c -- Motorola 68HC11 & 68HC12 disassembly - Copyright (C) 1999-2019 Free Software Foundation, Inc. + Copyright (C) 1999-2020 Free Software Foundation, Inc. Written by Stephane Carrez (stcarrez@nerim.fr) XGATE and S12X added by James Murray (jsm@jsm-net.demon.co.uk) @@ -45,11 +45,6 @@ #define OP_PAGE_MASK (M6811_OP_PAGE2|M6811_OP_PAGE3|M6811_OP_PAGE4) -/* Prototypes for local functions. */ -static int read_memory (bfd_vma, bfd_byte *, int, struct disassemble_info *); -static int print_indexed_operand (bfd_vma, struct disassemble_info *, - int*, int, int, bfd_vma, int); -static int print_insn (bfd_vma, struct disassemble_info *, int); static int read_memory (bfd_vma memaddr, bfd_byte* buffer, int size, @@ -73,13 +68,13 @@ Returns the number of bytes read or -1 if failure. */ static int print_indexed_operand (bfd_vma memaddr, struct disassemble_info* info, - int* indirect, int mov_insn, int pc_offset, - bfd_vma endaddr, int arch) + int* indirect, int mov_insn, int pc_offset, + bfd_vma endaddr, int arch) { bfd_byte buffer[4]; int reg; int status; - short sval; + bfd_vma val; int pos = 1; if (indirect) @@ -95,23 +90,22 @@ if ((buffer[0] & 0x20) == 0) { reg = (buffer[0] >> 6) & 3; - sval = (buffer[0] & 0x1f); - if (sval & 0x10) - sval |= 0xfff0; + val = ((buffer[0] & 0x1f) ^ 0x10) - 0x10; /* 68HC12 requires an adjustment for movb/movw pc relative modes. */ if (reg == PC_REGNUM && info->mach == bfd_mach_m6812 && mov_insn) - sval += pc_offset; + val += pc_offset; (*info->fprintf_func) (info->stream, "0x%x,%s", - (unsigned short) sval, reg_name[reg]); + (unsigned) val & 0xffff, reg_name[reg]); if (reg == PC_REGNUM) - { - (* info->fprintf_func) (info->stream, " {"); - if (info->symtab_size > 0) /* Avoid duplicate 0x from core binutils. */ - (*info->fprintf_func) (info->stream, "0x"); - (* info->print_address_func) (endaddr + sval, info); - (* info->fprintf_func) (info->stream, "}"); - } + { + (* info->fprintf_func) (info->stream, " {"); + /* Avoid duplicate 0x from core binutils. */ + if (info->symtab_size > 0) + (*info->fprintf_func) (info->stream, "0x"); + (* info->print_address_func) (endaddr + val, info); + (* info->fprintf_func) (info->stream, "}"); + } } /* Auto pre/post increment/decrement. */ @@ -120,88 +114,81 @@ const char *mode; reg = (buffer[0] >> 6) & 3; - sval = (buffer[0] & 0x0f); - if (sval & 0x8) + val = buffer[0] & 7; + if (buffer[0] & 8) { - sval |= 0xfff0; - sval = -sval; + val = 8 - val; mode = "-"; } else { - sval = sval + 1; + val = val + 1; mode = "+"; } (*info->fprintf_func) (info->stream, "%d,%s%s%s", - (unsigned short) sval, - (buffer[0] & 0x10 ? "" : mode), - reg_name[reg], (buffer[0] & 0x10 ? mode : "")); + (unsigned) val, + buffer[0] & 0x10 ? "" : mode, + reg_name[reg], buffer[0] & 0x10 ? mode : ""); } /* [n,r] 16-bits offset indexed indirect. */ else if ((buffer[0] & 0x07) == 3) { if ((mov_insn) && (!(arch & cpu9s12x))) - { - (*info->fprintf_func) (info->stream, "<invalid op: 0x%x>", - buffer[0] & 0x0ff); - return 0; - } + { + (*info->fprintf_func) (info->stream, "<invalid op: 0x%x>", + buffer[0] & 0x0ff); + return 0; + } reg = (buffer[0] >> 3) & 0x03; status = read_memory (memaddr + pos, &buffer[0], 2, info); if (status != 0) - { - return status; - } + return status; pos += 2; - sval = ((buffer[0] << 8) | (buffer[1] & 0x0FF)); + val = (buffer[0] << 8) | buffer[1]; (*info->fprintf_func) (info->stream, "[0x%x,%s]", - sval & 0x0ffff, reg_name[reg]); + (unsigned) val & 0xffff, reg_name[reg]); if (indirect) - *indirect = 1; + *indirect = 1; } /* n,r with 9 and 16 bit signed constant. */ else if ((buffer[0] & 0x4) == 0) { if ((mov_insn) && (!(arch & cpu9s12x))) - { - (*info->fprintf_func) (info->stream, "<invalid op: 0x%x>", - buffer[0] & 0x0ff); - return 0; - } + { + (*info->fprintf_func) (info->stream, "<invalid op: 0x%x>", + buffer[0] & 0x0ff); + return 0; + } reg = (buffer[0] >> 3) & 0x03; status = read_memory (memaddr + pos, &buffer[1], (buffer[0] & 0x2 ? 2 : 1), info); if (status != 0) - { - return status; - } + return status; + if (buffer[0] & 2) { - sval = ((buffer[1] << 8) | (buffer[2] & 0x0FF)); - sval &= 0x0FFFF; + val = (((buffer[1] << 8) | buffer[2]) ^ 0x8000) - 0x8000; pos += 2; - endaddr += 2; + endaddr += 2; } else { - sval = buffer[1] & 0x00ff; - if (buffer[0] & 0x01) - sval |= 0xff00; + val = buffer[1] - ((buffer[0] & 1) << 8); pos++; - endaddr++; + endaddr++; } (*info->fprintf_func) (info->stream, "0x%x,%s", - (unsigned short) sval, reg_name[reg]); + (unsigned) val & 0xffff, reg_name[reg]); if (reg == PC_REGNUM) - { - (* info->fprintf_func) (info->stream, " {0x"); - (* info->print_address_func) (endaddr + sval, info); - (* info->fprintf_func) (info->stream, "}"); - } + { + (* info->fprintf_func) (info->stream, " {0x"); + (* info->print_address_func) (endaddr + val, info); + (* info->fprintf_func) (info->stream, "}"); + } } else { @@ -220,8 +207,8 @@ case 3: default: (*info->fprintf_func) (info->stream, "[D,%s]", reg_name[reg]); - if (indirect) - *indirect = 1; + if (indirect) + *indirect = 1; break; } } @@ -238,12 +225,11 @@ bfd_byte buffer[4]; unsigned int code; long format, pos, i; - short sval; + bfd_vma val; const struct m68hc11_opcode *opcode; if (arch & cpuxgate) { - int val; /* Get two bytes as all XGATE instructions are 16bit. */ status = read_memory (memaddr, buffer, 2, info); if (status != 0) @@ -295,17 +281,14 @@ else if (format & M68XG_OP_REL9) { (*info->fprintf_func) (info->stream, " 0x"); - val = (buffer[0] & 0x1) ? buffer[1] | 0xFFFFFF00 : buffer[1]; + val = buffer[1] - ((buffer[0] & 1) << 8); (*info->print_address_func) (memaddr + (val << 1) + 2, info); } else if (format & M68XG_OP_REL10) { (*info->fprintf_func) (info->stream, " 0x"); - val = (buffer[0] << 8) | (unsigned int) buffer[1]; - if (val & 0x200) - val |= 0xfffffc00; - else - val &= 0x000001ff; + val = (buffer[0] << 8) | buffer[1]; + val = ((val & 0x3ff) ^ 0x200) - 0x200; (*info->print_address_func) (memaddr + (val << 1) + 2, info); } else if ((code & 0x00ff) == 0x00f8) @@ -639,13 +622,11 @@ (*info->fprintf_func) (info->stream, "%s,", reg_src_table[buffer[0] & 0x07]); - sval = buffer[1] & 0x0ff; - if (buffer[0] & 0x10) - sval |= 0xff00; + val = buffer[1] - ((buffer[0] & 0x10) << 4); pos += 2; (*info->fprintf_func) (info->stream, "0x"); - (*info->print_address_func) (memaddr + pos + sval, info); + (*info->print_address_func) (memaddr + pos + val, info); format &= ~(M6812_OP_REG | M6811_OP_JUMP_REL); } else if (format & (M6812_OP_REG | M6812_OP_REG_2)) @@ -662,7 +643,6 @@ if (format & (M6811_OP_IMM16 | M6811_OP_IND16)) { - int val; bfd_vma addr; unsigned page = 0; @@ -676,9 +656,7 @@ offset = 0; pos += 2; - val = ((buffer[0] << 8) | (buffer[1] & 0x0FF)); - val &= 0x0FFFF; - addr = val; + addr = val = (buffer[0] << 8) | buffer[1]; pc_dst_offset = 2; if (format & M6812_OP_PAGE) { @@ -686,16 +664,15 @@ if (status != 0) return status; - page = (unsigned) buffer[0]; + page = buffer[0]; if (addr >= M68HC12_BANK_BASE && addr < 0x0c000) - addr = ((val - M68HC12_BANK_BASE) - | (page << M68HC12_BANK_SHIFT)) - + M68HC12_BANK_VIRT; + addr = (val - M68HC12_BANK_BASE + (page << M68HC12_BANK_SHIFT) + + M68HC12_BANK_VIRT); } else if ((arch & cpu6812) && addr >= M68HC12_BANK_BASE && addr < 0x0c000) { - int cur_page; + unsigned cur_page; bfd_vma vaddr; if (memaddr >= M68HC12_BANK_VIRT) @@ -704,9 +681,8 @@ else cur_page = 0; - vaddr = ((addr - M68HC12_BANK_BASE) - + (cur_page << M68HC12_BANK_SHIFT)) - + M68HC12_BANK_VIRT; + vaddr = (addr - M68HC12_BANK_BASE + + (cur_page << M68HC12_BANK_SHIFT)) + M68HC12_BANK_VIRT; if (!info->symbol_at_address_func (addr, info) && info->symbol_at_address_func (vaddr, info)) addr = vaddr; @@ -721,14 +697,16 @@ format &= ~M6811_OP_IND16; } - if (info->symtab_size > 0) /* Avoid duplicate 0x from core binutils. */ + /* Avoid duplicate 0x from core binutils. */ + if (info->symtab_size > 0) (*info->fprintf_func) (info->stream, "0x"); (*info->print_address_func) (addr, info); if (format & M6812_OP_PAGE) { (* info->fprintf_func) (info->stream, " {"); - if (info->symtab_size > 0) /* Avoid duplicate 0x from core binutils. */ + /* Avoid duplicate 0x from core binutils. */ + if (info->symtab_size > 0) (*info->fprintf_func) (info->stream, "0x"); (* info->print_address_func) (val, info); (* info->fprintf_func) (info->stream, ", 0x%x}", page); @@ -750,8 +728,6 @@ if (format & M6812_OP_IND16_P2) { - int val; - (*info->fprintf_func) (info->stream, ", "); status = read_memory (memaddr + pos + offset, &buffer[0], 2, info); @@ -760,9 +736,9 @@ pos += 2; - val = ((buffer[0] << 8) | (buffer[1] & 0x0FF)); - val &= 0x0FFFF; - if (info->symtab_size > 0) /* Avoid duplicate 0x from core binutils. */ + val = (buffer[0] << 8) | buffer[1]; + /* Avoid duplicate 0x from core binutils. */ + if (info->symtab_size > 0) (*info->fprintf_func) (info->stream, "0x"); (*info->print_address_func) (val, info); } @@ -784,30 +760,24 @@ } if (format & M6811_OP_JUMP_REL) { - int val; - status = read_memory (memaddr + pos, &buffer[0], 1, info); if (status != 0) return status; (*info->fprintf_func) (info->stream, "0x"); pos++; - val = (buffer[0] & 0x80) ? buffer[0] | 0xFFFFFF00 : buffer[0]; + val = (buffer[0] ^ 0x80) - 0x80; (*info->print_address_func) (memaddr + pos + val, info); format &= ~M6811_OP_JUMP_REL; } else if (format & M6812_OP_JUMP_REL16) { - int val; - status = read_memory (memaddr + pos, &buffer[0], 2, info); if (status != 0) return status; pos += 2; - val = ((buffer[0] << 8) | (buffer[1] & 0x0FF)); - if (val & 0x8000) - val |= 0xffff0000; + val = (((buffer[0] << 8) | buffer[1]) ^ 0x8000) - 0x8000; (*info->fprintf_func) (info->stream, "0x"); (*info->print_address_func) (memaddr + pos + val, info); @@ -816,16 +786,14 @@ if (format & M6812_OP_PAGE) { - int val; - status = read_memory (memaddr + pos + offset, &buffer[0], 1, info); if (status != 0) return status; pos += 1; - val = buffer[0] & 0x0ff; - (*info->fprintf_func) (info->stream, ", 0x%x", val); + val = buffer[0]; + (*info->fprintf_func) (info->stream, ", 0x%x", (unsigned) val); } #ifdef DEBUG diff -Nru gdb-9.1/opcodes/m68hc11-opc.c gdb-10.2/opcodes/m68hc11-opc.c --- gdb-9.1/opcodes/m68hc11-opc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/m68hc11-opc.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* m68hc11-opc.c -- Motorola 68HC11, 68HC12, 9S12X and XGATE opcode list - Copyright (C) 1999-2019 Free Software Foundation, Inc. + Copyright (C) 1999-2020 Free Software Foundation, Inc. Written by Stephane Carrez (stcarrez@nerim.fr) XGATE and S12X added by James Murray (jsm@jsm-net.demon.co.uk) Note: min/max cycles not updated for S12X opcodes. diff -Nru gdb-9.1/opcodes/m68k-dis.c gdb-10.2/opcodes/m68k-dis.c --- gdb-9.1/opcodes/m68k-dis.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/m68k-dis.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Print Motorola 68k instructions. - Copyright (C) 1986-2019 Free Software Foundation, Inc. + Copyright (C) 1986-2020 Free Software Foundation, Inc. This file is part of the GNU opcodes library. diff -Nru gdb-9.1/opcodes/m68k-opc.c gdb-10.2/opcodes/m68k-opc.c --- gdb-9.1/opcodes/m68k-opc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/m68k-opc.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Opcode table for m680[012346]0/m6888[12]/m68851/mcf5200. - Copyright (C) 1989-2019 Free Software Foundation, Inc. + Copyright (C) 1989-2020 Free Software Foundation, Inc. This file is part of the GNU opcodes library. @@ -265,11 +265,14 @@ {"cmpaw", 2, one(0130300), one(0170700), "*wAd", m68000up }, {"cmpal", 2, one(0130700), one(0170700), "*lAd", m68000up | mcfisa_a }, -{"cmpib", 4, one(0006000), one(0177700), "#b@s", m68000up }, +{"cmpib", 4, one(0006000), one(0177700), "#b$s", m68000 | m68010 }, +{"cmpib", 4, one(0006000), one(0177700), "#b@s", m68020up | cpu32 | fido_a }, {"cmpib", 4, one(0006000), one(0177700), "#bDs", mcfisa_b | mcfisa_c }, -{"cmpiw", 4, one(0006100), one(0177700), "#w@s", m68000up }, +{"cmpiw", 4, one(0006100), one(0177700), "#w$s", m68000 | m68010 }, +{"cmpiw", 4, one(0006100), one(0177700), "#w@s", m68020up | cpu32 | fido_a }, {"cmpiw", 4, one(0006100), one(0177700), "#wDs", mcfisa_b | mcfisa_c }, -{"cmpil", 6, one(0006200), one(0177700), "#l@s", m68000up }, +{"cmpil", 6, one(0006200), one(0177700), "#l$s", m68000 | m68010 }, +{"cmpil", 6, one(0006200), one(0177700), "#l@s", m68020up | cpu32 | fido_a }, {"cmpil", 6, one(0006200), one(0177700), "#lDs", mcfisa_a }, {"cmpmb", 2, one(0130410), one(0170770), "+s+d", m68000up }, @@ -277,18 +280,21 @@ {"cmpml", 2, one(0130610), one(0170770), "+s+d", m68000up }, /* The cmp opcode can generate the cmpa, cmpm, and cmpi instructions. */ -{"cmpb", 4, one(0006000), one(0177700), "#b@s", m68000up }, +{"cmpb", 4, one(0006000), one(0177700), "#b$s", m68000 | m68010 }, +{"cmpb", 4, one(0006000), one(0177700), "#b@s", m68020up | cpu32 | fido_a }, {"cmpb", 4, one(0006000), one(0177700), "#bDs", mcfisa_b | mcfisa_c }, {"cmpb", 2, one(0130410), one(0170770), "+s+d", m68000up }, {"cmpb", 2, one(0130000), one(0170700), ";bDd", m68000up }, {"cmpb", 2, one(0130000), one(0170700), "*bDd", mcfisa_b | mcfisa_c }, {"cmpw", 2, one(0130300), one(0170700), "*wAd", m68000up }, -{"cmpw", 4, one(0006100), one(0177700), "#w@s", m68000up }, +{"cmpw", 4, one(0006100), one(0177700), "#w$s", m68000 | m68010 }, +{"cmpw", 4, one(0006100), one(0177700), "#w@s", m68020up | cpu32 | fido_a }, {"cmpw", 4, one(0006100), one(0177700), "#wDs", mcfisa_b | mcfisa_c }, {"cmpw", 2, one(0130510), one(0170770), "+s+d", m68000up }, {"cmpw", 2, one(0130100), one(0170700), "*wDd", m68000up | mcfisa_b | mcfisa_c }, {"cmpl", 2, one(0130700), one(0170700), "*lAd", m68000up | mcfisa_a }, -{"cmpl", 6, one(0006200), one(0177700), "#l@s", m68000up }, +{"cmpl", 6, one(0006200), one(0177700), "#l$s", m68000 | m68010 }, +{"cmpl", 6, one(0006200), one(0177700), "#l@s", m68020up | cpu32 | fido_a }, {"cmpl", 6, one(0006200), one(0177700), "#lDs", mcfisa_a }, {"cmpl", 2, one(0130610), one(0170770), "+s+d", m68000up }, {"cmpl", 2, one(0130200), one(0170700), "*lDd", m68000up | mcfisa_a }, diff -Nru gdb-9.1/opcodes/MAINTAINERS gdb-10.2/opcodes/MAINTAINERS --- gdb-9.1/opcodes/MAINTAINERS 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/MAINTAINERS 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ See ../binutils/MAINTAINERS -Copyright (C) 2012-2019 Free Software Foundation, Inc. +Copyright (C) 2012-2020 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff -Nru gdb-9.1/opcodes/Makefile.am gdb-10.2/opcodes/Makefile.am --- gdb-9.1/opcodes/Makefile.am 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/Makefile.am 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ ## Process this file with automake to generate Makefile.in # -# Copyright (C) 2012-2019 Free Software Foundation, Inc. +# Copyright (C) 2012-2020 Free Software Foundation, Inc. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -245,8 +245,6 @@ tic54x-dis.c \ tic54x-opc.c \ tic6x-dis.c \ - tic80-dis.c \ - tic80-opc.c \ tilegx-dis.c \ tilegx-opc.c \ tilepro-dis.c \ @@ -563,7 +561,7 @@ @echo $@ $(srcdir)/i386-init.h: @MAINT@ i386-gen$(EXEEXT_FOR_BUILD) i386-opc.tbl i386-reg.tbl i386-opc.h - $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) - \ + $(CPP) -P $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) - \ < $(srcdir)/i386-opc.tbl \ | ./i386-gen$(EXEEXT_FOR_BUILD) --srcdir $(srcdir) diff -Nru gdb-9.1/opcodes/Makefile.in gdb-10.2/opcodes/Makefile.in --- gdb-9.1/opcodes/Makefile.in 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/Makefile.in 2021-04-25 04:06:26.000000000 +0000 @@ -15,7 +15,7 @@ @SET_MAKE@ # -# Copyright (C) 2012-2019 Free Software Foundation, Inc. +# Copyright (C) 2012-2020 Free Software Foundation, Inc. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -635,8 +635,6 @@ tic54x-dis.c \ tic54x-opc.c \ tic6x-dis.c \ - tic80-dis.c \ - tic80-opc.c \ tilegx-dis.c \ tilegx-opc.c \ tilepro-dis.c \ @@ -1051,8 +1049,6 @@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tic54x-dis.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tic54x-opc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tic6x-dis.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tic80-dis.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tic80-opc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tilegx-dis.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tilegx-opc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tilepro-dis.Plo@am__quote@ @@ -1539,7 +1535,7 @@ @echo $@ $(srcdir)/i386-init.h: @MAINT@ i386-gen$(EXEEXT_FOR_BUILD) i386-opc.tbl i386-reg.tbl i386-opc.h - $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) - \ + $(CPP) -P $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) - \ < $(srcdir)/i386-opc.tbl \ | ./i386-gen$(EXEEXT_FOR_BUILD) --srcdir $(srcdir) diff -Nru gdb-9.1/opcodes/makefile.vms gdb-10.2/opcodes/makefile.vms --- gdb-9.1/opcodes/makefile.vms 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/makefile.vms 2021-04-25 04:06:26.000000000 +0000 @@ -5,7 +5,7 @@ # # Created by Klaus K"ampf, kkaempf@progis.de # -# Copyright (C) 2012-2019 Free Software Foundation, Inc. +# Copyright (C) 2012-2020 Free Software Foundation, Inc. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/opcodes/mcore-dis.c gdb-10.2/opcodes/mcore-dis.c --- gdb-9.1/opcodes/mcore-dis.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/mcore-dis.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Disassemble Motorola M*Core instructions. - Copyright (C) 1993-2019 Free Software Foundation, Inc. + Copyright (C) 1993-2020 Free Software Foundation, Inc. This file is part of the GNU opcodes library. @@ -196,18 +196,14 @@ case BR: { - long val = inst & 0x3FF; + uint32_t val = ((inst & 0x3FF) ^ 0x400) - 0x400; - if (inst & 0x400) - val |= 0xFFFFFC00; - - (*print_func) (stream, "\t0x%lx", (long)(memaddr + 2 + (val << 1))); + val = memaddr + 2 + (val << 1); + (*print_func) (stream, "\t0x%x", val); if (strcmp (mcore_table[i].name, "bsr") == 0) { /* For bsr, we'll try to get a symbol for the target. */ - val = memaddr + 2 + (val << 1); - if (info->print_address_func && val != 0) { (*print_func) (stream, "\t// "); @@ -219,19 +215,18 @@ case BL: { - long val; - val = (inst & 0x000F); - (*print_func) (stream, "\t%s, 0x%lx", + uint32_t val = inst & 0x000F; + (*print_func) (stream, "\t%s, 0x%x", grname[(inst >> 4) & 0xF], - (long) (memaddr - (val << 1))); + (uint32_t) (memaddr - (val << 1))); } break; case LR: { - unsigned long val; + uint32_t val; - val = (memaddr + 2 + ((inst & 0xFF) << 2)) & 0xFFFFFFFC; + val = (memaddr + 2 + ((inst & 0xFF) << 2)) & ~3; /* We are not reading an instruction, so allow reads to extend beyond the next symbol. */ @@ -244,27 +239,27 @@ } if (info->endian == BFD_ENDIAN_LITTLE) - val = (ibytes[3] << 24) | (ibytes[2] << 16) - | (ibytes[1] << 8) | (ibytes[0]); + val = (((unsigned) ibytes[3] << 24) | (ibytes[2] << 16) + | (ibytes[1] << 8) | (ibytes[0])); else - val = (ibytes[0] << 24) | (ibytes[1] << 16) - | (ibytes[2] << 8) | (ibytes[3]); + val = (((unsigned) ibytes[0] << 24) | (ibytes[1] << 16) + | (ibytes[2] << 8) | (ibytes[3])); /* Removed [] around literal value to match ABI syntax 12/95. */ - (*print_func) (stream, "\t%s, 0x%lX", grname[(inst >> 8) & 0xF], val); + (*print_func) (stream, "\t%s, 0x%X", grname[(inst >> 8) & 0xF], val); if (val == 0) - (*print_func) (stream, "\t// from address pool at 0x%lx", - (long) (memaddr + 2 - + ((inst & 0xFF) << 2)) & 0xFFFFFFFC); + (*print_func) (stream, "\t// from address pool at 0x%x", + (uint32_t) (memaddr + 2 + + ((inst & 0xFF) << 2)) & ~3); } break; case LJ: { - unsigned long val; + uint32_t val; - val = (memaddr + 2 + ((inst & 0xFF) << 2)) & 0xFFFFFFFC; + val = (memaddr + 2 + ((inst & 0xFF) << 2)) & ~3; /* We are not reading an instruction, so allow reads to extend beyond the next symbol. */ @@ -277,14 +272,14 @@ } if (info->endian == BFD_ENDIAN_LITTLE) - val = (ibytes[3] << 24) | (ibytes[2] << 16) - | (ibytes[1] << 8) | (ibytes[0]); + val = (((unsigned) ibytes[3] << 24) | (ibytes[2] << 16) + | (ibytes[1] << 8) | (ibytes[0])); else - val = (ibytes[0] << 24) | (ibytes[1] << 16) - | (ibytes[2] << 8) | (ibytes[3]); + val = (((unsigned) ibytes[0] << 24) | (ibytes[1] << 16) + | (ibytes[2] << 8) | (ibytes[3])); /* Removed [] around literal value to match ABI syntax 12/95. */ - (*print_func) (stream, "\t0x%lX", val); + (*print_func) (stream, "\t0x%X", val); /* For jmpi/jsri, we'll try to get a symbol for the target. */ if (info->print_address_func && val != 0) { @@ -293,9 +288,9 @@ } else { - (*print_func) (stream, "\t// from address pool at 0x%lx", - (long) (memaddr + 2 - + ((inst & 0xFF) << 2)) & 0xFFFFFFFC); + (*print_func) (stream, "\t// from address pool at 0x%x", + (uint32_t) (memaddr + 2 + + ((inst & 0xFF) << 2)) & ~3); } } break; diff -Nru gdb-9.1/opcodes/mcore-opc.h gdb-10.2/opcodes/mcore-opc.h --- gdb-9.1/opcodes/mcore-opc.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/mcore-opc.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Assembler instructions for Motorola's Mcore processor - Copyright (C) 1999-2019 Free Software Foundation, Inc. + Copyright (C) 1999-2020 Free Software Foundation, Inc. This file is part of the GNU opcodes library. diff -Nru gdb-9.1/opcodes/mep-asm.c gdb-10.2/opcodes/mep-asm.c --- gdb-9.1/opcodes/mep-asm.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/mep-asm.c 2021-04-25 04:06:26.000000000 +0000 @@ -5,7 +5,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. - the resultant file is machine generated, cgen-asm.in isn't - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of libopcodes. @@ -811,8 +811,7 @@ *strp_in += (str - hold); } - if (hold) - free (hold); + free (hold); return errmsg; } diff -Nru gdb-9.1/opcodes/mep-desc.c gdb-10.2/opcodes/mep-desc.c --- gdb-9.1/opcodes/mep-desc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/mep-desc.c 2021-04-25 04:06:26.000000000 +0000 @@ -3,7 +3,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright (C) 1996-2019 Free Software Foundation, Inc. +Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of the GNU Binutils and/or GDB, the GNU debugger. @@ -6256,6 +6256,7 @@ CGEN_CPU_OPEN_MACHS: bitmap of values in enum mach_attr CGEN_CPU_OPEN_BFDMACH: specify 1 mach using bfd name CGEN_CPU_OPEN_ENDIAN: specify endian choice + CGEN_CPU_OPEN_INSN_ENDIAN: specify instruction endian choice CGEN_CPU_OPEN_END: terminates arguments ??? Simultaneous multiple isas might not make sense, but it's not (yet) @@ -6269,6 +6270,7 @@ CGEN_BITSET *isas = 0; /* 0 = "unspecified" */ unsigned int machs = 0; /* 0 = "unspecified" */ enum cgen_endian endian = CGEN_ENDIAN_UNKNOWN; + enum cgen_endian insn_endian = CGEN_ENDIAN_UNKNOWN; va_list ap; if (! init_p) @@ -6303,6 +6305,9 @@ case CGEN_CPU_OPEN_ENDIAN : endian = va_arg (ap, enum cgen_endian); break; + case CGEN_CPU_OPEN_INSN_ENDIAN : + insn_endian = va_arg (ap, enum cgen_endian); + break; default : opcodes_error_handler (/* xgettext:c-format */ @@ -6332,11 +6337,8 @@ cd->isas = cgen_bitset_copy (isas); cd->machs = machs; cd->endian = endian; - /* FIXME: for the sparc case we can determine insn-endianness statically. - The worry here is where both data and insn endian can be independently - chosen, in which case this function will need another argument. - Actually, will want to allow for more arguments in the future anyway. */ - cd->insn_endian = endian; + cd->insn_endian + = (insn_endian == CGEN_ENDIAN_UNKNOWN ? endian : insn_endian); /* Table (re)builder. */ cd->rebuild_tables = mep_cgen_rebuild_tables; @@ -6386,18 +6388,10 @@ regfree (CGEN_INSN_RX (insns)); } - if (cd->macro_insn_table.init_entries) - free ((CGEN_INSN *) cd->macro_insn_table.init_entries); - - if (cd->insn_table.init_entries) - free ((CGEN_INSN *) cd->insn_table.init_entries); - - if (cd->hw_table.entries) - free ((CGEN_HW_ENTRY *) cd->hw_table.entries); - - if (cd->operand_table.entries) - free ((CGEN_HW_ENTRY *) cd->operand_table.entries); - + free ((CGEN_INSN *) cd->macro_insn_table.init_entries); + free ((CGEN_INSN *) cd->insn_table.init_entries); + free ((CGEN_HW_ENTRY *) cd->hw_table.entries); + free ((CGEN_HW_ENTRY *) cd->operand_table.entries); free (cd); } diff -Nru gdb-9.1/opcodes/mep-desc.h gdb-10.2/opcodes/mep-desc.h --- gdb-9.1/opcodes/mep-desc.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/mep-desc.h 2021-04-25 04:06:26.000000000 +0000 @@ -3,7 +3,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright (C) 1996-2019 Free Software Foundation, Inc. +Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of the GNU Binutils and/or GDB, the GNU debugger. diff -Nru gdb-9.1/opcodes/mep-dis.c gdb-10.2/opcodes/mep-dis.c --- gdb-9.1/opcodes/mep-dis.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/mep-dis.c 2021-04-25 04:06:26.000000000 +0000 @@ -5,7 +5,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. - the resultant file is machine generated, cgen-dis.in isn't - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of libopcodes. @@ -467,7 +467,7 @@ CGEN_INSN_INT insn_value; CGEN_EXTRACT_INFO ex_info; - insn_value = cgen_get_insn_value (cd, buf, 32); + insn_value = cgen_get_insn_value (cd, buf, 32, 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 @@ -1360,7 +1360,7 @@ /* 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); + 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 @@ -1491,6 +1491,7 @@ CGEN_BITSET *isa; int mach; int endian; + int insn_endian; CGEN_CPU_DESC cd; } cpu_desc_list; @@ -1503,12 +1504,16 @@ 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; /* ??? gdb will set mach but leave the architecture as "unknown" */ @@ -1574,9 +1579,11 @@ prev_isa = cgen_bitset_copy (isa); prev_mach = mach; prev_endian = endian; + prev_insn_endian = insn_endian; cd = mep_cgen_cpu_open (CGEN_CPU_OPEN_ISAS, prev_isa, CGEN_CPU_OPEN_BFDMACH, mach_name, CGEN_CPU_OPEN_ENDIAN, prev_endian, + CGEN_CPU_OPEN_INSN_ENDIAN, prev_insn_endian, CGEN_CPU_OPEN_END); if (!cd) abort (); diff -Nru gdb-9.1/opcodes/mep-ibld.c gdb-10.2/opcodes/mep-ibld.c --- gdb-9.1/opcodes/mep-ibld.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/mep-ibld.c 2021-04-25 04:06:26.000000000 +0000 @@ -4,7 +4,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN: Cpu tools GENerator. - the resultant file is machine generated, cgen-ibld.in isn't - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of libopcodes. @@ -85,20 +85,20 @@ int word_length, unsigned char *bufp) { - unsigned long x,mask; + unsigned long x, mask; int shift; - x = cgen_get_insn_value (cd, bufp, word_length); + x = cgen_get_insn_value (cd, bufp, word_length, cd->endian); /* Written this way to avoid undefined behaviour. */ - mask = (((1L << (length - 1)) - 1) << 1) | 1; + mask = (1UL << (length - 1) << 1) - 1; if (CGEN_INSN_LSB0_P) shift = (start + 1) - length; else shift = (word_length - (start + length)); x = (x & ~(mask << shift)) | ((value & mask) << shift); - cgen_put_insn_value (cd, bufp, word_length, (bfd_vma) x); + cgen_put_insn_value (cd, bufp, word_length, (bfd_vma) x, cd->endian); } #endif /* ! CGEN_INT_INSN_P */ @@ -131,13 +131,15 @@ CGEN_INSN_BYTES_PTR buffer) { static char errbuf[100]; - /* Written this way to avoid undefined behaviour. */ - unsigned long mask = (((1L << (length - 1)) - 1) << 1) | 1; + unsigned long mask; /* If LENGTH is zero, this operand doesn't contribute to the value. */ if (length == 0) return NULL; + /* Written this way to avoid undefined behaviour. */ + mask = (1UL << (length - 1) << 1) - 1; + if (word_length > 8 * sizeof (CGEN_INSN_INT)) abort (); @@ -153,7 +155,7 @@ /* Ensure VALUE will fit. */ if (CGEN_BOOL_ATTR (attrs, CGEN_IFLD_SIGN_OPT)) { - long minval = - (1L << (length - 1)); + long minval = - (1UL << (length - 1)); unsigned long maxval = mask; if ((value > 0 && (unsigned long) value > maxval) @@ -191,8 +193,8 @@ { if (! cgen_signed_overflow_ok_p (cd)) { - long minval = - (1L << (length - 1)); - long maxval = (1L << (length - 1)) - 1; + long minval = - (1UL << (length - 1)); + long maxval = (1UL << (length - 1)) - 1; if (value < minval || value > maxval) { @@ -269,8 +271,8 @@ #else cgen_put_insn_value (cd, buffer, min ((unsigned) cd->base_insn_bitsize, - (unsigned) CGEN_FIELDS_BITSIZE (fields)), - value); + (unsigned) CGEN_FIELDS_BITSIZE (fields)), + value, cd->insn_endian); #endif /* ! CGEN_INT_INSN_P */ @@ -314,7 +316,7 @@ { int shift = insn_length - length; /* Written this way to avoid undefined behaviour. */ - CGEN_INSN_INT mask = (((1L << (length - 1)) - 1) << 1) | 1; + CGEN_INSN_INT mask = length == 0 ? 0 : (1UL << (length - 1) << 1) - 1; *buf = (*buf & ~(mask << shift)) | ((value & mask) << shift); } @@ -387,7 +389,7 @@ unsigned long x; int shift; - x = cgen_get_insn_value (cd, bufp, word_length); + x = cgen_get_insn_value (cd, bufp, word_length, cd->endian); if (CGEN_INSN_LSB0_P) shift = (start + 1) - length; @@ -480,7 +482,10 @@ abort (); if (fill_cache (cd, ex_info, word_offset / 8, word_length / 8, pc) == 0) - return 0; + { + *valuep = 0; + return 0; + } value = extract_1 (cd, ex_info, start, length, word_length, bufp, pc); } @@ -488,12 +493,12 @@ #endif /* ! CGEN_INT_INSN_P */ /* Written this way to avoid undefined behaviour. */ - mask = (((1L << (length - 1)) - 1) << 1) | 1; + mask = (1UL << (length - 1) << 1) - 1; value &= mask; /* sign extend? */ if (CGEN_BOOL_ATTR (attrs, CGEN_IFLD_SIGNED) - && (value & (1L << (length - 1)))) + && (value & (1UL << (length - 1)))) value |= ~mask; *valuep = value; @@ -1619,7 +1624,7 @@ { long value; length = extract_normal (cd, ex_info, insn_value, 0|(1<<CGEN_IFLD_SIGNED)|(1<<CGEN_IFLD_PCREL_ADDR), 0, 4, 11, 32, total_length, pc, & value); - value = ((((value) << (1))) + (pc)); + value = ((((value) * (2))) + (pc)); fields->f_12s4a2 = value; } break; @@ -1627,7 +1632,7 @@ { long value; length = extract_normal (cd, ex_info, insn_value, 0|(1<<CGEN_IFLD_SIGNED)|(1<<CGEN_IFLD_PCREL_ADDR), 0, 16, 16, 32, total_length, pc, & value); - value = ((((value) << (1))) + (pc)); + value = ((((value) * (2))) + (pc)); fields->f_17s16a2 = value; } break; @@ -1637,14 +1642,14 @@ if (length <= 0) break; length = extract_normal (cd, ex_info, insn_value, 0|(1<<CGEN_IFLD_PCREL_ADDR), 0, 5, 7, 32, total_length, pc, & fields->f_24s5a2n_lo); if (length <= 0) break; - FLD (f_24s5a2n) = ((((((FLD (f_24s5a2n_hi)) << (8))) | (((FLD (f_24s5a2n_lo)) << (1))))) + (pc)); + FLD (f_24s5a2n) = ((((((FLD (f_24s5a2n_hi)) * (256))) | (((FLD (f_24s5a2n_lo)) << (1))))) + (pc)); } break; case MEP_OPERAND_PCREL8A2 : { long value; length = extract_normal (cd, ex_info, insn_value, 0|(1<<CGEN_IFLD_SIGNED)|(1<<CGEN_IFLD_PCREL_ADDR), 0, 8, 7, 32, total_length, pc, & value); - value = ((((value) << (1))) + (pc)); + value = ((((value) * (2))) + (pc)); fields->f_8s8a2 = value; } break; @@ -1760,7 +1765,7 @@ { long value; length = extract_normal (cd, ex_info, insn_value, 0, 0, 9, 6, 32, total_length, pc, & value); - value = ((value) << (1)); + value = ((value) * (2)); fields->f_7u9a2 = value; } break; diff -Nru gdb-9.1/opcodes/mep-opc.c gdb-10.2/opcodes/mep-opc.c --- gdb-9.1/opcodes/mep-opc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/mep-opc.c 2021-04-25 04:06:26.000000000 +0000 @@ -3,7 +3,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright (C) 1996-2019 Free Software Foundation, Inc. +Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of the GNU Binutils and/or GDB, the GNU debugger. diff -Nru gdb-9.1/opcodes/mep-opc.h gdb-10.2/opcodes/mep-opc.h --- gdb-9.1/opcodes/mep-opc.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/mep-opc.h 2021-04-25 04:06:26.000000000 +0000 @@ -3,7 +3,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright (C) 1996-2019 Free Software Foundation, Inc. +Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of the GNU Binutils and/or GDB, the GNU debugger. diff -Nru gdb-9.1/opcodes/metag-dis.c gdb-10.2/opcodes/metag-dis.c --- gdb-9.1/opcodes/metag-dis.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/metag-dis.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Disassemble Imagination Technologies Meta instructions. - Copyright (C) 2013-2019 Free Software Foundation, Inc. + Copyright (C) 2013-2020 Free Software Foundation, Inc. Contributed by Imagination Technologies Ltd. This library is free software; you can redistribute it and/or modify @@ -3364,9 +3364,15 @@ bfd_byte buf[4]; unsigned int insn_word; size_t i; - outf->bytes_per_chunk = 4; + int status; - (*outf->read_memory_func) (pc & ~0x03, buf, 4, outf); + outf->bytes_per_chunk = 4; + status = (*outf->read_memory_func) (pc & ~0x03, buf, 4, outf); + if (status) + { + (*outf->memory_error_func) (status, pc, outf); + return -1; + } insn_word = bfd_getl32 (buf); for (i = 0; i < sizeof(metag_optab)/sizeof(metag_optab[0]); i++) diff -Nru gdb-9.1/opcodes/microblaze-dis.c gdb-10.2/opcodes/microblaze-dis.c --- gdb-9.1/opcodes/microblaze-dis.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/microblaze-dis.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Disassemble Xilinx microblaze instructions. - Copyright (C) 2009-2019 Free Software Foundation, Inc. + Copyright (C) 2009-2020 Free Software Foundation, Inc. This file is part of the GNU opcodes library. @@ -200,9 +200,11 @@ } if (info->endian == BFD_ENDIAN_BIG) - inst = (ibytes[0] << 24) | (ibytes[1] << 16) | (ibytes[2] << 8) | ibytes[3]; + inst = (((unsigned) ibytes[0] << 24) | (ibytes[1] << 16) + | (ibytes[2] << 8) | ibytes[3]); else if (info->endian == BFD_ENDIAN_LITTLE) - inst = (ibytes[3] << 24) | (ibytes[2] << 16) | (ibytes[1] << 8) | ibytes[0]; + inst = (((unsigned) ibytes[3] << 24) | (ibytes[2] << 16) + | (ibytes[1] << 8) | ibytes[0]); else abort (); diff -Nru gdb-9.1/opcodes/microblaze-dis.h gdb-10.2/opcodes/microblaze-dis.h --- gdb-9.1/opcodes/microblaze-dis.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/microblaze-dis.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Disassemble Xilinx microblaze instructions. - Copyright (C) 2009-2019 Free Software Foundation, Inc. + Copyright (C) 2009-2020 Free Software Foundation, Inc. This file is part of the GNU opcodes library. diff -Nru gdb-9.1/opcodes/microblaze-opc.h gdb-10.2/opcodes/microblaze-opc.h --- gdb-9.1/opcodes/microblaze-opc.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/microblaze-opc.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* microblaze-opc.h -- MicroBlaze Opcodes - Copyright (C) 2009-2019 Free Software Foundation, Inc. + Copyright (C) 2009-2020 Free Software Foundation, Inc. This file is part of the GNU opcodes library. @@ -255,10 +255,10 @@ {"smi", INST_TYPE_RD_R1_IMM, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0xF8000000, OPCODE_MASK_H, invalid_inst, memory_store_inst }, {"msrset",INST_TYPE_RD_IMM15, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x94100000, OPCODE_MASK_H23N, msrset, special_inst }, {"msrclr",INST_TYPE_RD_IMM15, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x94110000, OPCODE_MASK_H23N, msrclr, special_inst }, - {"fadd", INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x58000000, OPCODE_MASK_H4, fadd, arithmetic_inst }, + {"fadd", INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x58000000, OPCODE_MASK_H4, mbi_fadd, arithmetic_inst }, {"frsub", INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x58000080, OPCODE_MASK_H4, frsub, arithmetic_inst }, - {"fmul", INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x58000100, OPCODE_MASK_H4, fmul, arithmetic_inst }, - {"fdiv", INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x58000180, OPCODE_MASK_H4, fdiv, arithmetic_inst }, + {"fmul", INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x58000100, OPCODE_MASK_H4, mbi_fmul, arithmetic_inst }, + {"fdiv", INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x58000180, OPCODE_MASK_H4, mbi_fdiv, arithmetic_inst }, {"fcmp.lt", INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x58000210, OPCODE_MASK_H4, fcmp_lt, arithmetic_inst }, {"fcmp.eq", INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x58000220, OPCODE_MASK_H4, fcmp_eq, arithmetic_inst }, {"fcmp.le", INST_TYPE_RD_R1_R2, INST_NO_OFFSET, NO_DELAY_SLOT, IMMVAL_MASK_NON_SPECIAL, 0x58000230, OPCODE_MASK_H4, fcmp_le, arithmetic_inst }, diff -Nru gdb-9.1/opcodes/microblaze-opcm.h gdb-10.2/opcodes/microblaze-opcm.h --- gdb-9.1/opcodes/microblaze-opcm.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/microblaze-opcm.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* microblaze-opcm.h -- Header used in microblaze-opc.h - Copyright (C) 2009-2019 Free Software Foundation, Inc. + Copyright (C) 2009-2020 Free Software Foundation, Inc. This file is part of the GNU opcodes library. @@ -40,7 +40,7 @@ brki, beqi, beqid, bnei, bneid, blti, bltid, blei, bleid, bgti, bgtid, bgei, bgeid, lbu, lbur, lhu, lhur, lw, lwr, lwx, sb, sbr, sh, shr, sw, swr, swx, lbui, lhui, lwi, - sbi, shi, swi, msrset, msrclr, tuqula, fadd, frsub, fmul, fdiv, + sbi, shi, swi, msrset, msrclr, tuqula, mbi_fadd, frsub, mbi_fmul, mbi_fdiv, fcmp_lt, fcmp_eq, fcmp_le, fcmp_gt, fcmp_ne, fcmp_ge, fcmp_un, flt, fint, fsqrt, tget, tcget, tnget, tncget, tput, tcput, tnput, tncput, diff -Nru gdb-9.1/opcodes/micromips-opc.c gdb-10.2/opcodes/micromips-opc.c --- gdb-9.1/opcodes/micromips-opc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/micromips-opc.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* micromips-opc.c. microMIPS opcode table. - Copyright (C) 2008-2019 Free Software Foundation, Inc. + Copyright (C) 2008-2020 Free Software Foundation, Inc. Contributed by Chao-ying Fu, MIPS Technologies, Inc. This file is part of the GNU opcodes library. diff -Nru gdb-9.1/opcodes/mips16-opc.c gdb-10.2/opcodes/mips16-opc.c --- gdb-9.1/opcodes/mips16-opc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/mips16-opc.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* mips16-opc.c. Mips16 opcode table. - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. Contributed by Ian Lance Taylor, Cygnus Support This file is part of the GNU opcodes library. diff -Nru gdb-9.1/opcodes/mips-dis.c gdb-10.2/opcodes/mips-dis.c --- gdb-9.1/opcodes/mips-dis.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/mips-dis.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Print mips instructions for GDB, the GNU debugger, or for objdump. - Copyright (C) 1989-2019 Free Software Foundation, Inc. + Copyright (C) 1989-2020 Free Software Foundation, Inc. Contributed by Nobuyuki Hikichi(hikichi@sra.co.jp). This file is part of the GNU opcodes library. diff -Nru gdb-9.1/opcodes/mips-formats.h gdb-10.2/opcodes/mips-formats.h --- gdb-9.1/opcodes/mips-formats.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/mips-formats.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* mips-formats.h - Copyright (C) 2013-2019 Free Software Foundation, Inc. + Copyright (C) 2013-2020 Free Software Foundation, Inc. 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 diff -Nru gdb-9.1/opcodes/mips-opc.c gdb-10.2/opcodes/mips-opc.c --- gdb-9.1/opcodes/mips-opc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/mips-opc.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* mips-opc.c -- MIPS opcode list. - Copyright (C) 1993-2019 Free Software Foundation, Inc. + Copyright (C) 1993-2020 Free Software Foundation, Inc. Contributed by Ralph Campbell and OSF Commented and modified by Ian Lance Taylor, Cygnus Support Extended for MIPS32 support by Anders Norlander, and by SiByte, Inc. diff -Nru gdb-9.1/opcodes/mmix-dis.c gdb-10.2/opcodes/mmix-dis.c --- gdb-9.1/opcodes/mmix-dis.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/mmix-dis.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* mmix-dis.c -- Disassemble MMIX instructions. - Copyright (C) 2000-2019 Free Software Foundation, Inc. + Copyright (C) 2000-2020 Free Software Foundation, Inc. Written by Hans-Peter Nilsson (hp@bitrange.com) This file is part of the GNU opcodes library. diff -Nru gdb-9.1/opcodes/mmix-opc.c gdb-10.2/opcodes/mmix-opc.c --- gdb-9.1/opcodes/mmix-opc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/mmix-opc.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* mmix-opc.c -- MMIX opcode table - Copyright (C) 2001-2019 Free Software Foundation, Inc. + Copyright (C) 2001-2020 Free Software Foundation, Inc. Written by Hans-Peter Nilsson (hp@bitrange.com) This file is part of the GNU opcodes library. diff -Nru gdb-9.1/opcodes/moxie-dis.c gdb-10.2/opcodes/moxie-dis.c --- gdb-9.1/opcodes/moxie-dis.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/moxie-dis.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Disassemble moxie instructions. - Copyright (C) 2009-2019 Free Software Foundation, Inc. + Copyright (C) 2009-2020 Free Software Foundation, Inc. This file is part of the GNU opcodes library. @@ -33,7 +33,7 @@ /* Macros to extract operands from the instruction word. */ #define OP_A(i) ((i >> 4) & 0xf) #define OP_B(i) (i & 0xf) -#define INST2OFFSET(o) (((((o) & 0x3ff) ^ 0x200) - 0x200) << 1) +#define INST2OFFSET(o) (((((o) & 0x3ff) ^ 0x200) - 0x200) * 2) static const char * reg_names[16] = { "$fp", "$sp", "$r0", "$r1", "$r2", "$r3", "$r4", "$r5", @@ -210,8 +210,7 @@ { case MOXIE_F3_PCREL: fpr (stream, "%s\t", opcode->name); - info->print_address_func ((bfd_vma) (addr + INST2OFFSET(iword) + 2), - info); + info->print_address_func (addr + INST2OFFSET (iword) + 2, info); break; case MOXIE_BAD: fpr (stream, "bad"); diff -Nru gdb-9.1/opcodes/moxie-opc.c gdb-10.2/opcodes/moxie-opc.c --- gdb-9.1/opcodes/moxie-opc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/moxie-opc.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* moxie-opc.c -- Definitions for moxie opcodes. - Copyright (C) 2009-2019 Free Software Foundation, Inc. + Copyright (C) 2009-2020 Free Software Foundation, Inc. Contributed by Anthony Green (green@moxielogic.com). This file is part of the GNU opcodes library. @@ -52,7 +52,7 @@ const moxie_opc_info_t moxie_form1_opc_info[128] = { - { 0x00, MOXIE_BAD, "bad" }, // Reserved as bad. + { 0x00, MOXIE_BAD, "bad" }, /* Reserved as bad. */ { 0x01, MOXIE_F1_A4, "ldi.l" }, { 0x02, MOXIE_F1_AB, "mov" }, { 0x03, MOXIE_F1_M, "jsra" }, @@ -207,5 +207,5 @@ { 0x0c, MOXIE_BAD, "bad" }, { 0x0d, MOXIE_BAD, "bad" }, { 0x0e, MOXIE_BAD, "bad" }, - { 0x0f, MOXIE_BAD, "bad" } // Reserved as bad. + { 0x0f, MOXIE_BAD, "bad" } /* Reserved as bad. */ }; diff -Nru gdb-9.1/opcodes/msp430-decode.c gdb-10.2/opcodes/msp430-decode.c --- gdb-9.1/opcodes/msp430-decode.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/msp430-decode.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,7 +1,7 @@ /* DO NOT EDIT! -*- buffer-read-only: t -*- vi:set ro: */ #line 1 "msp430-decode.opc" /* -*- c -*- */ -/* Copyright (C) 2013-2019 Free Software Foundation, Inc. +/* Copyright (C) 2013-2020 Free Software Foundation, Inc. Contributed by Red Hat. Written by DJ Delorie. diff -Nru gdb-9.1/opcodes/msp430-decode.opc gdb-10.2/opcodes/msp430-decode.opc --- gdb-9.1/opcodes/msp430-decode.opc 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/msp430-decode.opc 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* -*- c -*- */ -/* Copyright (C) 2013-2019 Free Software Foundation, Inc. +/* Copyright (C) 2013-2020 Free Software Foundation, Inc. Contributed by Red Hat. Written by DJ Delorie. diff -Nru gdb-9.1/opcodes/msp430-dis.c gdb-10.2/opcodes/msp430-dis.c --- gdb-9.1/opcodes/msp430-dis.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/msp430-dis.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Disassemble MSP430 instructions. - Copyright (C) 2002-2019 Free Software Foundation, Inc. + Copyright (C) 2002-2020 Free Software Foundation, Inc. Contributed by Dmitry Diky <diwil@mail.ru> diff -Nru gdb-9.1/opcodes/mt-asm.c gdb-10.2/opcodes/mt-asm.c --- gdb-9.1/opcodes/mt-asm.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/mt-asm.c 2021-04-25 04:06:26.000000000 +0000 @@ -5,7 +5,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. - the resultant file is machine generated, cgen-asm.in isn't - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of libopcodes. diff -Nru gdb-9.1/opcodes/mt-desc.c gdb-10.2/opcodes/mt-desc.c --- gdb-9.1/opcodes/mt-desc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/mt-desc.c 2021-04-25 04:06:26.000000000 +0000 @@ -3,7 +3,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright (C) 1996-2019 Free Software Foundation, Inc. +Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of the GNU Binutils and/or GDB, the GNU debugger. @@ -1176,6 +1176,7 @@ CGEN_CPU_OPEN_MACHS: bitmap of values in enum mach_attr CGEN_CPU_OPEN_BFDMACH: specify 1 mach using bfd name CGEN_CPU_OPEN_ENDIAN: specify endian choice + CGEN_CPU_OPEN_INSN_ENDIAN: specify instruction endian choice CGEN_CPU_OPEN_END: terminates arguments ??? Simultaneous multiple isas might not make sense, but it's not (yet) @@ -1189,6 +1190,7 @@ CGEN_BITSET *isas = 0; /* 0 = "unspecified" */ unsigned int machs = 0; /* 0 = "unspecified" */ enum cgen_endian endian = CGEN_ENDIAN_UNKNOWN; + enum cgen_endian insn_endian = CGEN_ENDIAN_UNKNOWN; va_list ap; if (! init_p) @@ -1223,6 +1225,9 @@ case CGEN_CPU_OPEN_ENDIAN : endian = va_arg (ap, enum cgen_endian); break; + case CGEN_CPU_OPEN_INSN_ENDIAN : + insn_endian = va_arg (ap, enum cgen_endian); + break; default : opcodes_error_handler (/* xgettext:c-format */ @@ -1252,11 +1257,8 @@ cd->isas = cgen_bitset_copy (isas); cd->machs = machs; cd->endian = endian; - /* FIXME: for the sparc case we can determine insn-endianness statically. - The worry here is where both data and insn endian can be independently - chosen, in which case this function will need another argument. - Actually, will want to allow for more arguments in the future anyway. */ - cd->insn_endian = endian; + cd->insn_endian + = (insn_endian == CGEN_ENDIAN_UNKNOWN ? endian : insn_endian); /* Table (re)builder. */ cd->rebuild_tables = mt_cgen_rebuild_tables; @@ -1306,18 +1308,10 @@ regfree (CGEN_INSN_RX (insns)); } - if (cd->macro_insn_table.init_entries) - free ((CGEN_INSN *) cd->macro_insn_table.init_entries); - - if (cd->insn_table.init_entries) - free ((CGEN_INSN *) cd->insn_table.init_entries); - - if (cd->hw_table.entries) - free ((CGEN_HW_ENTRY *) cd->hw_table.entries); - - if (cd->operand_table.entries) - free ((CGEN_HW_ENTRY *) cd->operand_table.entries); - + free ((CGEN_INSN *) cd->macro_insn_table.init_entries); + free ((CGEN_INSN *) cd->insn_table.init_entries); + free ((CGEN_HW_ENTRY *) cd->hw_table.entries); + free ((CGEN_HW_ENTRY *) cd->operand_table.entries); free (cd); } diff -Nru gdb-9.1/opcodes/mt-desc.h gdb-10.2/opcodes/mt-desc.h --- gdb-9.1/opcodes/mt-desc.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/mt-desc.h 2021-04-25 04:06:26.000000000 +0000 @@ -3,7 +3,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright (C) 1996-2019 Free Software Foundation, Inc. +Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of the GNU Binutils and/or GDB, the GNU debugger. diff -Nru gdb-9.1/opcodes/mt-dis.c gdb-10.2/opcodes/mt-dis.c --- gdb-9.1/opcodes/mt-dis.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/mt-dis.c 2021-04-25 04:06:26.000000000 +0000 @@ -5,7 +5,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. - the resultant file is machine generated, cgen-dis.in isn't - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of libopcodes. @@ -463,7 +463,7 @@ /* 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); + 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 @@ -594,6 +594,7 @@ CGEN_BITSET *isa; int mach; int endian; + int insn_endian; CGEN_CPU_DESC cd; } cpu_desc_list; @@ -606,12 +607,16 @@ 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; /* ??? gdb will set mach but leave the architecture as "unknown" */ @@ -677,9 +682,11 @@ prev_isa = cgen_bitset_copy (isa); prev_mach = mach; prev_endian = endian; + prev_insn_endian = insn_endian; cd = mt_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 (); diff -Nru gdb-9.1/opcodes/mt-ibld.c gdb-10.2/opcodes/mt-ibld.c --- gdb-9.1/opcodes/mt-ibld.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/mt-ibld.c 2021-04-25 04:06:26.000000000 +0000 @@ -4,7 +4,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN: Cpu tools GENerator. - the resultant file is machine generated, cgen-ibld.in isn't - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of libopcodes. @@ -85,20 +85,20 @@ int word_length, unsigned char *bufp) { - unsigned long x,mask; + unsigned long x, mask; int shift; - x = cgen_get_insn_value (cd, bufp, word_length); + x = cgen_get_insn_value (cd, bufp, word_length, cd->endian); /* Written this way to avoid undefined behaviour. */ - mask = (((1L << (length - 1)) - 1) << 1) | 1; + mask = (1UL << (length - 1) << 1) - 1; if (CGEN_INSN_LSB0_P) shift = (start + 1) - length; else shift = (word_length - (start + length)); x = (x & ~(mask << shift)) | ((value & mask) << shift); - cgen_put_insn_value (cd, bufp, word_length, (bfd_vma) x); + cgen_put_insn_value (cd, bufp, word_length, (bfd_vma) x, cd->endian); } #endif /* ! CGEN_INT_INSN_P */ @@ -131,13 +131,15 @@ CGEN_INSN_BYTES_PTR buffer) { static char errbuf[100]; - /* Written this way to avoid undefined behaviour. */ - unsigned long mask = (((1L << (length - 1)) - 1) << 1) | 1; + unsigned long mask; /* If LENGTH is zero, this operand doesn't contribute to the value. */ if (length == 0) return NULL; + /* Written this way to avoid undefined behaviour. */ + mask = (1UL << (length - 1) << 1) - 1; + if (word_length > 8 * sizeof (CGEN_INSN_INT)) abort (); @@ -153,7 +155,7 @@ /* Ensure VALUE will fit. */ if (CGEN_BOOL_ATTR (attrs, CGEN_IFLD_SIGN_OPT)) { - long minval = - (1L << (length - 1)); + long minval = - (1UL << (length - 1)); unsigned long maxval = mask; if ((value > 0 && (unsigned long) value > maxval) @@ -191,8 +193,8 @@ { if (! cgen_signed_overflow_ok_p (cd)) { - long minval = - (1L << (length - 1)); - long maxval = (1L << (length - 1)) - 1; + long minval = - (1UL << (length - 1)); + long maxval = (1UL << (length - 1)) - 1; if (value < minval || value > maxval) { @@ -269,8 +271,8 @@ #else cgen_put_insn_value (cd, buffer, min ((unsigned) cd->base_insn_bitsize, - (unsigned) CGEN_FIELDS_BITSIZE (fields)), - value); + (unsigned) CGEN_FIELDS_BITSIZE (fields)), + value, cd->insn_endian); #endif /* ! CGEN_INT_INSN_P */ @@ -314,7 +316,7 @@ { int shift = insn_length - length; /* Written this way to avoid undefined behaviour. */ - CGEN_INSN_INT mask = (((1L << (length - 1)) - 1) << 1) | 1; + CGEN_INSN_INT mask = length == 0 ? 0 : (1UL << (length - 1) << 1) - 1; *buf = (*buf & ~(mask << shift)) | ((value & mask) << shift); } @@ -387,7 +389,7 @@ unsigned long x; int shift; - x = cgen_get_insn_value (cd, bufp, word_length); + x = cgen_get_insn_value (cd, bufp, word_length, cd->endian); if (CGEN_INSN_LSB0_P) shift = (start + 1) - length; @@ -480,7 +482,10 @@ abort (); if (fill_cache (cd, ex_info, word_offset / 8, word_length / 8, pc) == 0) - return 0; + { + *valuep = 0; + return 0; + } value = extract_1 (cd, ex_info, start, length, word_length, bufp, pc); } @@ -488,12 +493,12 @@ #endif /* ! CGEN_INT_INSN_P */ /* Written this way to avoid undefined behaviour. */ - mask = (((1L << (length - 1)) - 1) << 1) | 1; + mask = (1UL << (length - 1) << 1) - 1; value &= mask; /* sign extend? */ if (CGEN_BOOL_ATTR (attrs, CGEN_IFLD_SIGNED) - && (value & (1L << (length - 1)))) + && (value & (1UL << (length - 1)))) value |= ~mask; *valuep = value; diff -Nru gdb-9.1/opcodes/mt-opc.c gdb-10.2/opcodes/mt-opc.c --- gdb-9.1/opcodes/mt-opc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/mt-opc.c 2021-04-25 04:06:26.000000000 +0000 @@ -3,7 +3,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright (C) 1996-2019 Free Software Foundation, Inc. +Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of the GNU Binutils and/or GDB, the GNU debugger. diff -Nru gdb-9.1/opcodes/mt-opc.h gdb-10.2/opcodes/mt-opc.h --- gdb-9.1/opcodes/mt-opc.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/mt-opc.h 2021-04-25 04:06:26.000000000 +0000 @@ -3,7 +3,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright (C) 1996-2019 Free Software Foundation, Inc. +Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of the GNU Binutils and/or GDB, the GNU debugger. diff -Nru gdb-9.1/opcodes/nds32-asm.c gdb-10.2/opcodes/nds32-asm.c --- gdb-9.1/opcodes/nds32-asm.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/nds32-asm.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* NDS32-specific support for 32-bit ELF. - Copyright (C) 2012-2019 Free Software Foundation, Inc. + Copyright (C) 2012-2020 Free Software Foundation, Inc. Contributed by Andes Technology Corporation. This file is part of BFD, the Binary File Descriptor library. @@ -2405,7 +2405,7 @@ abort (); } -done: + done: /* Don't silently discarding bits. */ if (value & __MASK (fld->shift)) { @@ -2533,7 +2533,7 @@ if (*plex == 0 && (*p == '\0' || *p == '!' || *p == '#')) return 1; -reject: + reject: /* If not accepted, try another combination. */ variant++; } @@ -2564,7 +2564,7 @@ *s++ = '\0'; dot = strchr (mnemoic, '.'); -retry_dot: + retry_dot: /* Lookup the opcode syntax. */ hash = htab_hash_string (mnemoic); opc = (struct nds32_opcode *) @@ -2615,6 +2615,6 @@ /* A matched opcode is found. Write the result to instruction buffer. */ pdesc->result = NASM_OK; -out: + out: free (str); } diff -Nru gdb-9.1/opcodes/nds32-asm.h gdb-10.2/opcodes/nds32-asm.h --- gdb-9.1/opcodes/nds32-asm.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/nds32-asm.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* NDS32-specific support for 32-bit ELF. - Copyright (C) 2012-2019 Free Software Foundation, Inc. + Copyright (C) 2012-2020 Free Software Foundation, Inc. Contributed by Andes Technology Corporation. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/opcodes/nds32-dis.c gdb-10.2/opcodes/nds32-dis.c --- gdb-9.1/opcodes/nds32-dis.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/nds32-dis.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* NDS32-specific support for 32-bit ELF. - Copyright (C) 2012-2019 Free Software Foundation, Inc. + Copyright (C) 2012-2020 Free Software Foundation, Inc. Contributed by Andes Technology Corporation. This file is part of BFD, the Binary File Descriptor library. @@ -72,10 +72,7 @@ extern const field_t operand_fields[]; extern keyword_t *keywords[]; extern const keyword_t keyword_gpr[]; -static void print_insn16 (bfd_vma pc, disassemble_info *info, - uint32_t insn, uint32_t parse_mode); -static void print_insn32 (bfd_vma pc, disassemble_info *info, uint32_t insn, - uint32_t parse_mode); + static uint32_t nds32_mask_opcode (uint32_t); static void nds32_special_opcode (uint32_t, struct nds32_opcode **); static int get_mapping_symbol_type (struct disassemble_info *, int, @@ -83,18 +80,6 @@ static int is_mapping_symbol (struct disassemble_info *, int, enum map_type *); -/* define in objdump.c. */ -struct objdump_disasm_info -{ - bfd * abfd; - asection * sec; - bfd_boolean require_sec; - arelent ** dynrelbuf; - long dynrelcount; - disassembler_ftype disassemble_fn; - arelent * reloc; -}; - /* Hash function for disassemble. */ static htab_t opcode_htab; @@ -128,8 +113,8 @@ if (pfd->hw_res == HW_INT || pfd->hw_res == HW_UINT) { if (pfd->hw_res == HW_INT) - int_value = - N32_IMMS ((insn >> pfd->bitpos), pfd->bitsize) << pfd->shift; + int_value = (unsigned) N32_IMMS (insn >> pfd->bitpos, + pfd->bitsize) << pfd->shift; else int_value = __GF (insn, pfd->bitpos, pfd->bitsize) << pfd->shift; @@ -321,9 +306,9 @@ else if ((pfd->hw_res == HW_INT) || (pfd->hw_res == HW_UINT)) { if (pfd->hw_res == HW_INT) - int_value = - N32_IMMS ((insn >> pfd->bitpos), - pfd->bitsize) << pfd->shift; + int_value + = (unsigned) N32_IMMS (insn >> pfd->bitpos, + pfd->bitsize) << pfd->shift; else int_value = __GF (insn, pfd->bitpos, pfd->bitsize) << pfd->shift; @@ -411,8 +396,8 @@ else if ((pfd->hw_res == HW_INT) || (pfd->hw_res == HW_UINT)) { if (pfd->hw_res == HW_INT) - int_value = - N32_IMMS ((insn >> pfd->bitpos), pfd->bitsize) << pfd->shift; + int_value = (unsigned) N32_IMMS (insn >> pfd->bitpos, + pfd->bitsize) << pfd->shift; else int_value = __GF (insn, pfd->bitpos, pfd->bitsize) << pfd->shift; @@ -892,7 +877,7 @@ } return MASK_OP (insn, 0x1f << 20); default: - return (1 << 31); + return 1u << 31; } } @@ -991,8 +976,8 @@ int status; bfd_byte buf[4]; bfd_byte buf_data[16]; - long long given; - long long given1; + uint64_t given; + uint64_t given1; uint32_t insn; int n; int last_symbol_index = -1; @@ -1000,7 +985,7 @@ int is_data = FALSE; bfd_boolean found = FALSE; struct nds32_private_data *private_data; - unsigned int size = 16; + unsigned int size; enum map_type mapping_type = MAP_CODE; if (info->private_data == NULL) @@ -1078,6 +1063,7 @@ /* Fix corner case: there is no next mapping symbol, let mapping type decides size */ + size = 16; if (last_symbol_index + 1 >= info->symtab_size) { if (mapping_type == MAP_DATA0) @@ -1111,7 +1097,7 @@ size = (pc & 1) ? 1 : 2; /* Read bytes from BFD. */ - info->read_memory_func (pc, (bfd_byte *) buf_data, size, info); + info->read_memory_func (pc, buf_data, size, info); given = 0; given1 = 0; /* Start assembling data. */ @@ -1144,39 +1130,44 @@ info->bytes_per_line = 4; if (size == 16) - info->fprintf_func (info->stream, ".qword\t0x%016llx%016llx", + info->fprintf_func (info->stream, ".qword\t0x%016" PRIx64 "%016" PRIx64, given, given1); else if (size == 8) - info->fprintf_func (info->stream, ".dword\t0x%016llx", given); + info->fprintf_func (info->stream, ".dword\t0x%016" PRIx64, given); else if (size == 4) - info->fprintf_func (info->stream, ".word\t0x%08llx", given); + info->fprintf_func (info->stream, ".word\t0x%08" PRIx64, given); else if (size == 2) { /* short */ if (mapping_type == MAP_DATA0) - info->fprintf_func (info->stream, ".byte\t0x%02llx", given & 0xFF); + info->fprintf_func (info->stream, ".byte\t0x%02" PRIx64, + given & 0xFF); else - info->fprintf_func (info->stream, ".short\t0x%04llx", given); + info->fprintf_func (info->stream, ".short\t0x%04" PRIx64, given); } else { /* byte */ - info->fprintf_func (info->stream, ".byte\t0x%02llx", given); + info->fprintf_func (info->stream, ".byte\t0x%02" PRIx64, given); } return size; } - status = info->read_memory_func (pc, (bfd_byte *) buf, 4, info); + size = 4; + status = info->read_memory_func (pc, buf, 4, info); if (status) { /* For the last 16-bit instruction. */ - status = info->read_memory_func (pc, (bfd_byte *) buf, 2, info); + size = 2; + status = info->read_memory_func (pc, buf, 2, info); if (status) { - (*info->memory_error_func)(status, pc, info); + (*info->memory_error_func) (status, pc, info); return -1; } + buf[2] = 0; + buf[3] = 0; } insn = bfd_getb32 (buf); @@ -1188,11 +1179,12 @@ } /* 32-bit instructions. */ + if (size == 4) + print_insn32 (pc, info, insn, NDS32_PARSE_INSN32); else - { - print_insn32 (pc, info, insn, NDS32_PARSE_INSN32); - return 4; - } + info->fprintf_func (info->stream, + _("insufficient data to decode instruction")); + return 4; } /* Ignore disassembling unnecessary name. */ diff -Nru gdb-9.1/opcodes/nds32-opc.h gdb-10.2/opcodes/nds32-opc.h --- gdb-9.1/opcodes/nds32-opc.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/nds32-opc.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* NDS32-specific support for 32-bit ELF. - Copyright (C) 2012-2019 Free Software Foundation, Inc. + Copyright (C) 2012-2020 Free Software Foundation, Inc. Contributed by Andes Technology Corporation. This file is part of BFD, the Binary File Descriptor library. diff -Nru gdb-9.1/opcodes/nfp-dis.c gdb-10.2/opcodes/nfp-dis.c --- gdb-9.1/opcodes/nfp-dis.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/nfp-dis.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Print NFP instructions for objdump. - Copyright (C) 2017-2019 Free Software Foundation, Inc. + Copyright (C) 2017-2020 Free Software Foundation, Inc. Contributed by Francois H. Theron <francois.theron@netronome.com> This file is part of the GNU opcodes library. @@ -2958,7 +2958,7 @@ err = _print_instrs (addr, dinfo, &opts); -end: + end: if (err != 8) dinfo->fprintf_func (dinfo->stream, "\t # ERROR"); if (err == _NFP_ERR_CONT) diff -Nru gdb-9.1/opcodes/nios2-dis.c gdb-10.2/opcodes/nios2-dis.c --- gdb-9.1/opcodes/nios2-dis.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/nios2-dis.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Altera Nios II disassemble routines - Copyright (C) 2012-2019 Free Software Foundation, Inc. + Copyright (C) 2012-2020 Free Software Foundation, Inc. Contributed by Nigel Gray (ngray@altera.com). Contributed by Mentor Graphics, Inc. @@ -276,7 +276,7 @@ { unsigned long i = 0; long s = 0; - bfd_signed_vma o = 0; + int32_t o = 0; struct nios2_reg *reg_base; switch (*argptr) @@ -554,10 +554,12 @@ switch (op->format) { case iw_i_type: - s = ((GET_IW_I_IMM16 (opcode) & 0xffff) ^ 0x8000) - 0x8000; + s = ((int32_t) ((GET_IW_I_IMM16 (opcode) & 0xffff) ^ 0x8000) + - 0x8000); break; case iw_F2I16_type: - s = ((GET_IW_F2I16_IMM16 (opcode) & 0xffff) ^ 0x8000) - 0x8000; + s = ((int32_t) ((GET_IW_F2I16_IMM16 (opcode) & 0xffff) ^ 0x8000) + - 0x8000); break; default: bad_opcode (op); @@ -570,10 +572,12 @@ switch (op->format) { case iw_F2X4I12_type: - s = ((GET_IW_F2X4I12_IMM12 (opcode) & 0xfff) ^ 0x800) - 0x800; + s = ((int32_t) ((GET_IW_F2X4I12_IMM12 (opcode) & 0xfff) ^ 0x800) + - 0x800); break; case iw_F1X4I12_type: - s = ((GET_IW_F1X4I12_IMM12 (opcode) & 0xfff) ^ 0x800) - 0x800; + s = ((int32_t) ((GET_IW_F1X4I12_IMM12 (opcode) & 0xfff) ^ 0x800) + - 0x800); break; default: bad_opcode (op); @@ -690,7 +694,7 @@ switch (op->format) { case iw_I10_type: - o = (((GET_IW_I10_IMM10 (opcode) & 0x3ff) ^ 0x400) - 0x400) << 1; + o = (((GET_IW_I10_IMM10 (opcode) & 0x3ff) ^ 0x400) - 0x400) * 2; break; default: bad_opcode (op); @@ -704,7 +708,7 @@ switch (op->format) { case iw_T1I7_type: - o = (((GET_IW_T1I7_IMM7 (opcode) & 0x7f) ^ 0x40) - 0x40) << 1; + o = (((GET_IW_T1I7_IMM7 (opcode) & 0x7f) ^ 0x40) - 0x40) * 2; break; default: bad_opcode (op); @@ -858,7 +862,7 @@ if (i & (1 << 10)) reglist |= (1 << 28); if (i & (1 << 11)) - reglist |= (1 << 31); + reglist |= (1u << 31); } else reglist = i << 2; @@ -887,7 +891,7 @@ for (k = (dir == 1 ? 0 : 31); (dir == 1 && k < 32) || (dir == -1 && k >= 0); k += dir) - if (reglist & (1 << k)) + if (reglist & (1u << k)) { if (t) (*info->fprintf_func) (info->stream, ","); diff -Nru gdb-9.1/opcodes/nios2-opc.c gdb-10.2/opcodes/nios2-opc.c --- gdb-9.1/opcodes/nios2-opc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/nios2-opc.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Altera Nios II opcode list. - Copyright (C) 2012-2019 Free Software Foundation, Inc. + Copyright (C) 2012-2020 Free Software Foundation, Inc. Contributed by Nigel Gray (ngray@altera.com). Contributed by Mentor Graphics, Inc. diff -Nru gdb-9.1/opcodes/ns32k-dis.c gdb-10.2/opcodes/ns32k-dis.c --- gdb-9.1/opcodes/ns32k-dis.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/ns32k-dis.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Print National Semiconductor 32000 instructions. - Copyright (C) 1986-2019 Free Software Foundation, Inc. + Copyright (C) 1986-2020 Free Software Foundation, Inc. This file is part of the GNU opcodes library. @@ -347,9 +347,7 @@ } /* Given a character C, does it represent a general addressing mode? */ -#define Is_gen(c) \ - ((c) == 'F' || (c) == 'L' || (c) == 'B' \ - || (c) == 'W' || (c) == 'D' || (c) == 'A' || (c) == 'I' || (c) == 'Z') +#define Is_gen(c) (strchr ("FLBWDAIZf", (c)) != NULL) /* Adressing modes. */ #define Adrmod_index_byte 0x1c @@ -448,7 +446,7 @@ bit position of the addressing extension. BUFFER contains the instruction. ADDR is where BUFFER was read from. Put the disassembled version of the operand in RESULT. INDEX_OFFSET is the bit position - of the index byte (it contains garbage if this operand is not a + of the index byte (it contains -1 if this operand is not a general operand using scaled indexed addressing mode). */ static int @@ -526,9 +524,7 @@ /* Immediate. */ switch (d) { - case 'I': - case 'Z': - case 'A': + default: /* I and Z are output operands and can`t be immediate A is an address and we can`t have the address of an immediate either. We don't know how much to increase @@ -792,10 +788,8 @@ if (*d) { /* Offset in bits of the first thing beyond each index byte. - Element 0 is for operand A and element 1 is for operand B. - The rest are irrelevant, but we put them here so we don't - index outside the array. */ - int index_offset[MAX_ARGS]; + Element 0 is for operand A and element 1 is for operand B. */ + int index_offset[2]; /* 0 for operand A, 1 for operand B, greater for other args. */ int whicharg = 0; @@ -808,9 +802,12 @@ if we are using scaled indexed addressing mode, since the index bytes occur right after the basic instruction, not as part of the addressing extension. */ - if (Is_gen(d[1])) + index_offset[0] = -1; + index_offset[1] = -1; + if (Is_gen (d[1])) { - int addr_mode = bit_extract (buffer, ioffset - 5, 5); + int bitoff = d[1] == 'f' ? 10 : 5; + int addr_mode = bit_extract (buffer, ioffset - bitoff, 5); if (Adrmod_is_index (addr_mode)) { @@ -819,7 +816,7 @@ } } - if (d[2] && Is_gen(d[3])) + if (d[2] && Is_gen (d[3])) { int addr_mode = bit_extract (buffer, ioffset - 10, 5); @@ -833,15 +830,16 @@ while (*d) { argnum = *d - '1'; + if (argnum >= MAX_ARGS) + abort (); d++; - if (argnum > maxarg && argnum < MAX_ARGS) + if (argnum > maxarg) maxarg = argnum; ioffset = print_insn_arg (*d, ioffset, &aoffset, buffer, memaddr, arg_bufs[argnum], - index_offset[whicharg]); + whicharg > 1 ? -1 : index_offset[whicharg]); d++; - if (whicharg++ >= 1) - break; + whicharg++; } for (argnum = 0; argnum <= maxarg; argnum++) diff -Nru gdb-9.1/opcodes/opc2c.c gdb-10.2/opcodes/opc2c.c --- gdb-9.1/opcodes/opc2c.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/opc2c.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* opc2c.c --- generate C opcode decoder code from from .opc file - Copyright (C) 2005-2019 Free Software Foundation, Inc. + Copyright (C) 2005-2020 Free Software Foundation, Inc. Contributed by Red Hat, Inc. This file is part of the GNU opcode library. diff -Nru gdb-9.1/opcodes/opintl.h gdb-10.2/opcodes/opintl.h --- gdb-9.1/opcodes/opintl.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/opintl.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* opintl.h - opcodes specific header for gettext code. - Copyright (C) 1998-2019 Free Software Foundation, Inc. + Copyright (C) 1998-2020 Free Software Foundation, Inc. Written by Tom Tromey <tromey@cygnus.com> @@ -26,7 +26,7 @@ This is because the code in this directory is used to build a library which will be linked with code in other directories to form - programs. We want to maintain a seperate translation file for this + programs. We want to maintain a separate translation file for this directory however, rather than being forced to merge it with that of any program linked to libopcodes. This is a library, so it cannot depend on the catalog currently loaded. diff -Nru gdb-9.1/opcodes/or1k-asm.c gdb-10.2/opcodes/or1k-asm.c --- gdb-9.1/opcodes/or1k-asm.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/or1k-asm.c 2021-04-25 04:06:26.000000000 +0000 @@ -5,7 +5,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. - the resultant file is machine generated, cgen-asm.in isn't - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of libopcodes. @@ -519,9 +519,6 @@ case OR1K_OPERAND_RAD32F : errmsg = parse_regpair (cd, strp, OR1K_OPERAND_RAD32F, (unsigned long *) (& fields->f_rad32)); break; - case OR1K_OPERAND_RADF : - errmsg = cgen_parse_keyword (cd, strp, & or1k_cgen_opval_h_fdr, & fields->f_r2); - break; case OR1K_OPERAND_RADI : errmsg = parse_regpair (cd, strp, OR1K_OPERAND_RADI, (unsigned long *) (& fields->f_rad32)); break; @@ -534,9 +531,6 @@ case OR1K_OPERAND_RBD32F : errmsg = parse_regpair (cd, strp, OR1K_OPERAND_RBD32F, (unsigned long *) (& fields->f_rbd32)); break; - case OR1K_OPERAND_RBDF : - errmsg = cgen_parse_keyword (cd, strp, & or1k_cgen_opval_h_fdr, & fields->f_r3); - break; case OR1K_OPERAND_RBDI : errmsg = parse_regpair (cd, strp, OR1K_OPERAND_RBDI, (unsigned long *) (& fields->f_rbd32)); break; @@ -549,9 +543,6 @@ case OR1K_OPERAND_RDD32F : errmsg = parse_regpair (cd, strp, OR1K_OPERAND_RDD32F, (unsigned long *) (& fields->f_rdd32)); break; - case OR1K_OPERAND_RDDF : - errmsg = cgen_parse_keyword (cd, strp, & or1k_cgen_opval_h_fdr, & fields->f_r1); - break; case OR1K_OPERAND_RDDI : errmsg = parse_regpair (cd, strp, OR1K_OPERAND_RDDI, (unsigned long *) (& fields->f_rdd32)); break; diff -Nru gdb-9.1/opcodes/or1k-desc.c gdb-10.2/opcodes/or1k-desc.c --- gdb-9.1/opcodes/or1k-desc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/or1k-desc.c 2021-04-25 04:06:26.000000000 +0000 @@ -3,7 +3,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright (C) 1996-2019 Free Software Foundation, Inc. +Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of the GNU Binutils and/or GDB, the GNU debugger. @@ -49,8 +49,6 @@ { "base", MACH_BASE }, { "or32", MACH_OR32 }, { "or32nd", MACH_OR32ND }, - { "or64", MACH_OR64 }, - { "or64nd", MACH_OR64ND }, { "max", MACH_MAX }, { 0, 0 } }; @@ -129,8 +127,6 @@ static const CGEN_MACH or1k_cgen_mach_table[] = { { "or32", "or1k", MACH_OR32, 0 }, { "or32nd", "or1knd", MACH_OR32ND, 0 }, - { "or64", "or1k64", MACH_OR64, 0 }, - { "or64nd", "or1k64nd", MACH_OR64ND, 0 }, { 0, 0, 0, 0 } }; @@ -226,52 +222,6 @@ 0, 0, 0, 0, "" }; -static CGEN_KEYWORD_ENTRY or1k_cgen_opval_h_fdr_entries[] = -{ - { "r0", 0, {0, {{{0, 0}}}}, 0, 0 }, - { "r1", 1, {0, {{{0, 0}}}}, 0, 0 }, - { "r2", 2, {0, {{{0, 0}}}}, 0, 0 }, - { "r3", 3, {0, {{{0, 0}}}}, 0, 0 }, - { "r4", 4, {0, {{{0, 0}}}}, 0, 0 }, - { "r5", 5, {0, {{{0, 0}}}}, 0, 0 }, - { "r6", 6, {0, {{{0, 0}}}}, 0, 0 }, - { "r7", 7, {0, {{{0, 0}}}}, 0, 0 }, - { "r8", 8, {0, {{{0, 0}}}}, 0, 0 }, - { "r9", 9, {0, {{{0, 0}}}}, 0, 0 }, - { "r10", 10, {0, {{{0, 0}}}}, 0, 0 }, - { "r11", 11, {0, {{{0, 0}}}}, 0, 0 }, - { "r12", 12, {0, {{{0, 0}}}}, 0, 0 }, - { "r13", 13, {0, {{{0, 0}}}}, 0, 0 }, - { "r14", 14, {0, {{{0, 0}}}}, 0, 0 }, - { "r15", 15, {0, {{{0, 0}}}}, 0, 0 }, - { "r16", 16, {0, {{{0, 0}}}}, 0, 0 }, - { "r17", 17, {0, {{{0, 0}}}}, 0, 0 }, - { "r18", 18, {0, {{{0, 0}}}}, 0, 0 }, - { "r19", 19, {0, {{{0, 0}}}}, 0, 0 }, - { "r20", 20, {0, {{{0, 0}}}}, 0, 0 }, - { "r21", 21, {0, {{{0, 0}}}}, 0, 0 }, - { "r22", 22, {0, {{{0, 0}}}}, 0, 0 }, - { "r23", 23, {0, {{{0, 0}}}}, 0, 0 }, - { "r24", 24, {0, {{{0, 0}}}}, 0, 0 }, - { "r25", 25, {0, {{{0, 0}}}}, 0, 0 }, - { "r26", 26, {0, {{{0, 0}}}}, 0, 0 }, - { "r27", 27, {0, {{{0, 0}}}}, 0, 0 }, - { "r28", 28, {0, {{{0, 0}}}}, 0, 0 }, - { "r29", 29, {0, {{{0, 0}}}}, 0, 0 }, - { "r30", 30, {0, {{{0, 0}}}}, 0, 0 }, - { "r31", 31, {0, {{{0, 0}}}}, 0, 0 }, - { "lr", 9, {0, {{{0, 0}}}}, 0, 0 }, - { "sp", 1, {0, {{{0, 0}}}}, 0, 0 }, - { "fp", 2, {0, {{{0, 0}}}}, 0, 0 } -}; - -CGEN_KEYWORD or1k_cgen_opval_h_fdr = -{ - & or1k_cgen_opval_h_fdr_entries[0], - 35, - 0, 0, 0, 0, "" -}; - /* The hardware table. */ @@ -284,642 +234,641 @@ { "h-uint", HW_H_UINT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } }, { "h-addr", HW_H_ADDR, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } }, { "h-iaddr", HW_H_IADDR, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } }, - { "h-pc", HW_H_PC, CGEN_ASM_NONE, 0, { 0|A(PC), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-spr", HW_H_SPR, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-gpr", HW_H_GPR, CGEN_ASM_KEYWORD, (PTR) & or1k_cgen_opval_h_gpr, { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-fsr", HW_H_FSR, CGEN_ASM_KEYWORD, (PTR) & or1k_cgen_opval_h_fsr, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-fdr", HW_H_FDR, CGEN_ASM_KEYWORD, (PTR) & or1k_cgen_opval_h_fdr, { 0|A(VIRTUAL), { { { (1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, + { "h-pc", HW_H_PC, CGEN_ASM_NONE, 0, { 0|A(PC), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-spr", HW_H_SPR, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-gpr", HW_H_GPR, CGEN_ASM_KEYWORD, (PTR) & or1k_cgen_opval_h_gpr, { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-fsr", HW_H_FSR, CGEN_ASM_KEYWORD, (PTR) & or1k_cgen_opval_h_fsr, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, { "h-fd32r", HW_H_FD32R, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, { "h-i64r", HW_H_I64R, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, - { "h-sys-vr", HW_H_SYS_VR, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-upr", HW_H_SYS_UPR, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-cpucfgr", HW_H_SYS_CPUCFGR, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-dmmucfgr", HW_H_SYS_DMMUCFGR, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-immucfgr", HW_H_SYS_IMMUCFGR, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-dccfgr", HW_H_SYS_DCCFGR, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-iccfgr", HW_H_SYS_ICCFGR, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-dcfgr", HW_H_SYS_DCFGR, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-pccfgr", HW_H_SYS_PCCFGR, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-npc", HW_H_SYS_NPC, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-sr", HW_H_SYS_SR, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-ppc", HW_H_SYS_PPC, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-fpcsr", HW_H_SYS_FPCSR, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-epcr0", HW_H_SYS_EPCR0, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-epcr1", HW_H_SYS_EPCR1, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-epcr2", HW_H_SYS_EPCR2, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-epcr3", HW_H_SYS_EPCR3, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-epcr4", HW_H_SYS_EPCR4, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-epcr5", HW_H_SYS_EPCR5, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-epcr6", HW_H_SYS_EPCR6, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-epcr7", HW_H_SYS_EPCR7, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-epcr8", HW_H_SYS_EPCR8, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-epcr9", HW_H_SYS_EPCR9, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-epcr10", HW_H_SYS_EPCR10, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-epcr11", HW_H_SYS_EPCR11, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-epcr12", HW_H_SYS_EPCR12, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-epcr13", HW_H_SYS_EPCR13, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-epcr14", HW_H_SYS_EPCR14, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-epcr15", HW_H_SYS_EPCR15, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-eear0", HW_H_SYS_EEAR0, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-eear1", HW_H_SYS_EEAR1, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-eear2", HW_H_SYS_EEAR2, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-eear3", HW_H_SYS_EEAR3, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-eear4", HW_H_SYS_EEAR4, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-eear5", HW_H_SYS_EEAR5, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-eear6", HW_H_SYS_EEAR6, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-eear7", HW_H_SYS_EEAR7, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-eear8", HW_H_SYS_EEAR8, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-eear9", HW_H_SYS_EEAR9, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-eear10", HW_H_SYS_EEAR10, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-eear11", HW_H_SYS_EEAR11, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-eear12", HW_H_SYS_EEAR12, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-eear13", HW_H_SYS_EEAR13, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-eear14", HW_H_SYS_EEAR14, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-eear15", HW_H_SYS_EEAR15, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-esr0", HW_H_SYS_ESR0, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-esr1", HW_H_SYS_ESR1, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-esr2", HW_H_SYS_ESR2, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-esr3", HW_H_SYS_ESR3, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-esr4", HW_H_SYS_ESR4, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-esr5", HW_H_SYS_ESR5, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-esr6", HW_H_SYS_ESR6, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-esr7", HW_H_SYS_ESR7, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-esr8", HW_H_SYS_ESR8, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-esr9", HW_H_SYS_ESR9, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-esr10", HW_H_SYS_ESR10, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-esr11", HW_H_SYS_ESR11, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-esr12", HW_H_SYS_ESR12, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-esr13", HW_H_SYS_ESR13, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-esr14", HW_H_SYS_ESR14, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-esr15", HW_H_SYS_ESR15, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr0", HW_H_SYS_GPR0, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr1", HW_H_SYS_GPR1, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr2", HW_H_SYS_GPR2, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr3", HW_H_SYS_GPR3, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr4", HW_H_SYS_GPR4, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr5", HW_H_SYS_GPR5, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr6", HW_H_SYS_GPR6, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr7", HW_H_SYS_GPR7, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr8", HW_H_SYS_GPR8, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr9", HW_H_SYS_GPR9, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr10", HW_H_SYS_GPR10, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr11", HW_H_SYS_GPR11, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr12", HW_H_SYS_GPR12, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr13", HW_H_SYS_GPR13, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr14", HW_H_SYS_GPR14, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr15", HW_H_SYS_GPR15, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr16", HW_H_SYS_GPR16, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr17", HW_H_SYS_GPR17, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr18", HW_H_SYS_GPR18, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr19", HW_H_SYS_GPR19, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr20", HW_H_SYS_GPR20, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr21", HW_H_SYS_GPR21, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr22", HW_H_SYS_GPR22, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr23", HW_H_SYS_GPR23, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr24", HW_H_SYS_GPR24, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr25", HW_H_SYS_GPR25, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr26", HW_H_SYS_GPR26, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr27", HW_H_SYS_GPR27, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr28", HW_H_SYS_GPR28, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr29", HW_H_SYS_GPR29, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr30", HW_H_SYS_GPR30, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr31", HW_H_SYS_GPR31, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr32", HW_H_SYS_GPR32, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr33", HW_H_SYS_GPR33, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr34", HW_H_SYS_GPR34, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr35", HW_H_SYS_GPR35, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr36", HW_H_SYS_GPR36, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr37", HW_H_SYS_GPR37, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr38", HW_H_SYS_GPR38, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr39", HW_H_SYS_GPR39, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr40", HW_H_SYS_GPR40, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr41", HW_H_SYS_GPR41, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr42", HW_H_SYS_GPR42, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr43", HW_H_SYS_GPR43, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr44", HW_H_SYS_GPR44, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr45", HW_H_SYS_GPR45, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr46", HW_H_SYS_GPR46, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr47", HW_H_SYS_GPR47, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr48", HW_H_SYS_GPR48, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr49", HW_H_SYS_GPR49, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr50", HW_H_SYS_GPR50, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr51", HW_H_SYS_GPR51, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr52", HW_H_SYS_GPR52, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr53", HW_H_SYS_GPR53, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr54", HW_H_SYS_GPR54, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr55", HW_H_SYS_GPR55, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr56", HW_H_SYS_GPR56, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr57", HW_H_SYS_GPR57, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr58", HW_H_SYS_GPR58, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr59", HW_H_SYS_GPR59, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr60", HW_H_SYS_GPR60, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr61", HW_H_SYS_GPR61, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr62", HW_H_SYS_GPR62, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr63", HW_H_SYS_GPR63, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr64", HW_H_SYS_GPR64, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr65", HW_H_SYS_GPR65, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr66", HW_H_SYS_GPR66, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr67", HW_H_SYS_GPR67, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr68", HW_H_SYS_GPR68, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr69", HW_H_SYS_GPR69, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr70", HW_H_SYS_GPR70, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr71", HW_H_SYS_GPR71, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr72", HW_H_SYS_GPR72, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr73", HW_H_SYS_GPR73, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr74", HW_H_SYS_GPR74, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr75", HW_H_SYS_GPR75, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr76", HW_H_SYS_GPR76, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr77", HW_H_SYS_GPR77, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr78", HW_H_SYS_GPR78, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr79", HW_H_SYS_GPR79, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr80", HW_H_SYS_GPR80, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr81", HW_H_SYS_GPR81, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr82", HW_H_SYS_GPR82, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr83", HW_H_SYS_GPR83, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr84", HW_H_SYS_GPR84, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr85", HW_H_SYS_GPR85, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr86", HW_H_SYS_GPR86, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr87", HW_H_SYS_GPR87, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr88", HW_H_SYS_GPR88, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr89", HW_H_SYS_GPR89, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr90", HW_H_SYS_GPR90, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr91", HW_H_SYS_GPR91, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr92", HW_H_SYS_GPR92, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr93", HW_H_SYS_GPR93, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr94", HW_H_SYS_GPR94, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr95", HW_H_SYS_GPR95, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr96", HW_H_SYS_GPR96, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr97", HW_H_SYS_GPR97, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr98", HW_H_SYS_GPR98, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr99", HW_H_SYS_GPR99, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr100", HW_H_SYS_GPR100, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr101", HW_H_SYS_GPR101, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr102", HW_H_SYS_GPR102, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr103", HW_H_SYS_GPR103, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr104", HW_H_SYS_GPR104, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr105", HW_H_SYS_GPR105, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr106", HW_H_SYS_GPR106, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr107", HW_H_SYS_GPR107, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr108", HW_H_SYS_GPR108, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr109", HW_H_SYS_GPR109, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr110", HW_H_SYS_GPR110, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr111", HW_H_SYS_GPR111, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr112", HW_H_SYS_GPR112, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr113", HW_H_SYS_GPR113, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr114", HW_H_SYS_GPR114, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr115", HW_H_SYS_GPR115, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr116", HW_H_SYS_GPR116, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr117", HW_H_SYS_GPR117, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr118", HW_H_SYS_GPR118, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr119", HW_H_SYS_GPR119, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr120", HW_H_SYS_GPR120, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr121", HW_H_SYS_GPR121, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr122", HW_H_SYS_GPR122, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr123", HW_H_SYS_GPR123, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr124", HW_H_SYS_GPR124, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr125", HW_H_SYS_GPR125, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr126", HW_H_SYS_GPR126, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr127", HW_H_SYS_GPR127, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr128", HW_H_SYS_GPR128, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr129", HW_H_SYS_GPR129, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr130", HW_H_SYS_GPR130, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr131", HW_H_SYS_GPR131, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr132", HW_H_SYS_GPR132, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr133", HW_H_SYS_GPR133, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr134", HW_H_SYS_GPR134, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr135", HW_H_SYS_GPR135, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr136", HW_H_SYS_GPR136, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr137", HW_H_SYS_GPR137, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr138", HW_H_SYS_GPR138, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr139", HW_H_SYS_GPR139, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr140", HW_H_SYS_GPR140, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr141", HW_H_SYS_GPR141, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr142", HW_H_SYS_GPR142, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr143", HW_H_SYS_GPR143, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr144", HW_H_SYS_GPR144, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr145", HW_H_SYS_GPR145, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr146", HW_H_SYS_GPR146, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr147", HW_H_SYS_GPR147, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr148", HW_H_SYS_GPR148, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr149", HW_H_SYS_GPR149, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr150", HW_H_SYS_GPR150, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr151", HW_H_SYS_GPR151, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr152", HW_H_SYS_GPR152, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr153", HW_H_SYS_GPR153, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr154", HW_H_SYS_GPR154, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr155", HW_H_SYS_GPR155, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr156", HW_H_SYS_GPR156, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr157", HW_H_SYS_GPR157, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr158", HW_H_SYS_GPR158, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr159", HW_H_SYS_GPR159, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr160", HW_H_SYS_GPR160, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr161", HW_H_SYS_GPR161, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr162", HW_H_SYS_GPR162, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr163", HW_H_SYS_GPR163, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr164", HW_H_SYS_GPR164, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr165", HW_H_SYS_GPR165, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr166", HW_H_SYS_GPR166, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr167", HW_H_SYS_GPR167, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr168", HW_H_SYS_GPR168, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr169", HW_H_SYS_GPR169, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr170", HW_H_SYS_GPR170, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr171", HW_H_SYS_GPR171, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr172", HW_H_SYS_GPR172, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr173", HW_H_SYS_GPR173, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr174", HW_H_SYS_GPR174, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr175", HW_H_SYS_GPR175, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr176", HW_H_SYS_GPR176, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr177", HW_H_SYS_GPR177, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr178", HW_H_SYS_GPR178, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr179", HW_H_SYS_GPR179, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr180", HW_H_SYS_GPR180, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr181", HW_H_SYS_GPR181, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr182", HW_H_SYS_GPR182, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr183", HW_H_SYS_GPR183, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr184", HW_H_SYS_GPR184, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr185", HW_H_SYS_GPR185, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr186", HW_H_SYS_GPR186, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr187", HW_H_SYS_GPR187, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr188", HW_H_SYS_GPR188, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr189", HW_H_SYS_GPR189, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr190", HW_H_SYS_GPR190, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr191", HW_H_SYS_GPR191, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr192", HW_H_SYS_GPR192, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr193", HW_H_SYS_GPR193, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr194", HW_H_SYS_GPR194, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr195", HW_H_SYS_GPR195, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr196", HW_H_SYS_GPR196, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr197", HW_H_SYS_GPR197, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr198", HW_H_SYS_GPR198, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr199", HW_H_SYS_GPR199, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr200", HW_H_SYS_GPR200, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr201", HW_H_SYS_GPR201, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr202", HW_H_SYS_GPR202, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr203", HW_H_SYS_GPR203, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr204", HW_H_SYS_GPR204, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr205", HW_H_SYS_GPR205, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr206", HW_H_SYS_GPR206, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr207", HW_H_SYS_GPR207, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr208", HW_H_SYS_GPR208, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr209", HW_H_SYS_GPR209, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr210", HW_H_SYS_GPR210, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr211", HW_H_SYS_GPR211, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr212", HW_H_SYS_GPR212, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr213", HW_H_SYS_GPR213, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr214", HW_H_SYS_GPR214, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr215", HW_H_SYS_GPR215, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr216", HW_H_SYS_GPR216, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr217", HW_H_SYS_GPR217, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr218", HW_H_SYS_GPR218, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr219", HW_H_SYS_GPR219, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr220", HW_H_SYS_GPR220, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr221", HW_H_SYS_GPR221, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr222", HW_H_SYS_GPR222, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr223", HW_H_SYS_GPR223, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr224", HW_H_SYS_GPR224, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr225", HW_H_SYS_GPR225, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr226", HW_H_SYS_GPR226, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr227", HW_H_SYS_GPR227, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr228", HW_H_SYS_GPR228, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr229", HW_H_SYS_GPR229, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr230", HW_H_SYS_GPR230, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr231", HW_H_SYS_GPR231, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr232", HW_H_SYS_GPR232, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr233", HW_H_SYS_GPR233, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr234", HW_H_SYS_GPR234, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr235", HW_H_SYS_GPR235, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr236", HW_H_SYS_GPR236, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr237", HW_H_SYS_GPR237, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr238", HW_H_SYS_GPR238, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr239", HW_H_SYS_GPR239, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr240", HW_H_SYS_GPR240, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr241", HW_H_SYS_GPR241, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr242", HW_H_SYS_GPR242, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr243", HW_H_SYS_GPR243, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr244", HW_H_SYS_GPR244, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr245", HW_H_SYS_GPR245, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr246", HW_H_SYS_GPR246, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr247", HW_H_SYS_GPR247, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr248", HW_H_SYS_GPR248, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr249", HW_H_SYS_GPR249, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr250", HW_H_SYS_GPR250, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr251", HW_H_SYS_GPR251, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr252", HW_H_SYS_GPR252, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr253", HW_H_SYS_GPR253, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr254", HW_H_SYS_GPR254, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr255", HW_H_SYS_GPR255, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr256", HW_H_SYS_GPR256, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr257", HW_H_SYS_GPR257, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr258", HW_H_SYS_GPR258, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr259", HW_H_SYS_GPR259, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr260", HW_H_SYS_GPR260, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr261", HW_H_SYS_GPR261, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr262", HW_H_SYS_GPR262, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr263", HW_H_SYS_GPR263, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr264", HW_H_SYS_GPR264, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr265", HW_H_SYS_GPR265, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr266", HW_H_SYS_GPR266, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr267", HW_H_SYS_GPR267, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr268", HW_H_SYS_GPR268, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr269", HW_H_SYS_GPR269, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr270", HW_H_SYS_GPR270, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr271", HW_H_SYS_GPR271, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr272", HW_H_SYS_GPR272, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr273", HW_H_SYS_GPR273, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr274", HW_H_SYS_GPR274, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr275", HW_H_SYS_GPR275, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr276", HW_H_SYS_GPR276, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr277", HW_H_SYS_GPR277, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr278", HW_H_SYS_GPR278, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr279", HW_H_SYS_GPR279, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr280", HW_H_SYS_GPR280, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr281", HW_H_SYS_GPR281, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr282", HW_H_SYS_GPR282, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr283", HW_H_SYS_GPR283, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr284", HW_H_SYS_GPR284, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr285", HW_H_SYS_GPR285, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr286", HW_H_SYS_GPR286, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr287", HW_H_SYS_GPR287, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr288", HW_H_SYS_GPR288, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr289", HW_H_SYS_GPR289, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr290", HW_H_SYS_GPR290, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr291", HW_H_SYS_GPR291, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr292", HW_H_SYS_GPR292, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr293", HW_H_SYS_GPR293, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr294", HW_H_SYS_GPR294, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr295", HW_H_SYS_GPR295, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr296", HW_H_SYS_GPR296, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr297", HW_H_SYS_GPR297, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr298", HW_H_SYS_GPR298, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr299", HW_H_SYS_GPR299, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr300", HW_H_SYS_GPR300, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr301", HW_H_SYS_GPR301, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr302", HW_H_SYS_GPR302, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr303", HW_H_SYS_GPR303, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr304", HW_H_SYS_GPR304, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr305", HW_H_SYS_GPR305, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr306", HW_H_SYS_GPR306, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr307", HW_H_SYS_GPR307, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr308", HW_H_SYS_GPR308, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr309", HW_H_SYS_GPR309, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr310", HW_H_SYS_GPR310, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr311", HW_H_SYS_GPR311, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr312", HW_H_SYS_GPR312, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr313", HW_H_SYS_GPR313, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr314", HW_H_SYS_GPR314, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr315", HW_H_SYS_GPR315, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr316", HW_H_SYS_GPR316, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr317", HW_H_SYS_GPR317, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr318", HW_H_SYS_GPR318, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr319", HW_H_SYS_GPR319, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr320", HW_H_SYS_GPR320, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr321", HW_H_SYS_GPR321, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr322", HW_H_SYS_GPR322, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr323", HW_H_SYS_GPR323, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr324", HW_H_SYS_GPR324, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr325", HW_H_SYS_GPR325, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr326", HW_H_SYS_GPR326, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr327", HW_H_SYS_GPR327, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr328", HW_H_SYS_GPR328, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr329", HW_H_SYS_GPR329, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr330", HW_H_SYS_GPR330, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr331", HW_H_SYS_GPR331, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr332", HW_H_SYS_GPR332, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr333", HW_H_SYS_GPR333, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr334", HW_H_SYS_GPR334, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr335", HW_H_SYS_GPR335, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr336", HW_H_SYS_GPR336, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr337", HW_H_SYS_GPR337, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr338", HW_H_SYS_GPR338, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr339", HW_H_SYS_GPR339, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr340", HW_H_SYS_GPR340, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr341", HW_H_SYS_GPR341, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr342", HW_H_SYS_GPR342, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr343", HW_H_SYS_GPR343, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr344", HW_H_SYS_GPR344, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr345", HW_H_SYS_GPR345, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr346", HW_H_SYS_GPR346, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr347", HW_H_SYS_GPR347, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr348", HW_H_SYS_GPR348, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr349", HW_H_SYS_GPR349, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr350", HW_H_SYS_GPR350, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr351", HW_H_SYS_GPR351, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr352", HW_H_SYS_GPR352, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr353", HW_H_SYS_GPR353, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr354", HW_H_SYS_GPR354, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr355", HW_H_SYS_GPR355, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr356", HW_H_SYS_GPR356, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr357", HW_H_SYS_GPR357, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr358", HW_H_SYS_GPR358, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr359", HW_H_SYS_GPR359, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr360", HW_H_SYS_GPR360, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr361", HW_H_SYS_GPR361, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr362", HW_H_SYS_GPR362, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr363", HW_H_SYS_GPR363, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr364", HW_H_SYS_GPR364, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr365", HW_H_SYS_GPR365, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr366", HW_H_SYS_GPR366, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr367", HW_H_SYS_GPR367, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr368", HW_H_SYS_GPR368, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr369", HW_H_SYS_GPR369, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr370", HW_H_SYS_GPR370, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr371", HW_H_SYS_GPR371, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr372", HW_H_SYS_GPR372, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr373", HW_H_SYS_GPR373, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr374", HW_H_SYS_GPR374, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr375", HW_H_SYS_GPR375, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr376", HW_H_SYS_GPR376, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr377", HW_H_SYS_GPR377, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr378", HW_H_SYS_GPR378, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr379", HW_H_SYS_GPR379, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr380", HW_H_SYS_GPR380, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr381", HW_H_SYS_GPR381, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr382", HW_H_SYS_GPR382, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr383", HW_H_SYS_GPR383, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr384", HW_H_SYS_GPR384, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr385", HW_H_SYS_GPR385, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr386", HW_H_SYS_GPR386, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr387", HW_H_SYS_GPR387, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr388", HW_H_SYS_GPR388, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr389", HW_H_SYS_GPR389, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr390", HW_H_SYS_GPR390, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr391", HW_H_SYS_GPR391, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr392", HW_H_SYS_GPR392, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr393", HW_H_SYS_GPR393, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr394", HW_H_SYS_GPR394, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr395", HW_H_SYS_GPR395, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr396", HW_H_SYS_GPR396, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr397", HW_H_SYS_GPR397, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr398", HW_H_SYS_GPR398, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr399", HW_H_SYS_GPR399, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr400", HW_H_SYS_GPR400, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr401", HW_H_SYS_GPR401, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr402", HW_H_SYS_GPR402, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr403", HW_H_SYS_GPR403, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr404", HW_H_SYS_GPR404, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr405", HW_H_SYS_GPR405, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr406", HW_H_SYS_GPR406, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr407", HW_H_SYS_GPR407, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr408", HW_H_SYS_GPR408, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr409", HW_H_SYS_GPR409, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr410", HW_H_SYS_GPR410, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr411", HW_H_SYS_GPR411, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr412", HW_H_SYS_GPR412, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr413", HW_H_SYS_GPR413, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr414", HW_H_SYS_GPR414, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr415", HW_H_SYS_GPR415, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr416", HW_H_SYS_GPR416, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr417", HW_H_SYS_GPR417, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr418", HW_H_SYS_GPR418, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr419", HW_H_SYS_GPR419, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr420", HW_H_SYS_GPR420, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr421", HW_H_SYS_GPR421, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr422", HW_H_SYS_GPR422, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr423", HW_H_SYS_GPR423, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr424", HW_H_SYS_GPR424, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr425", HW_H_SYS_GPR425, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr426", HW_H_SYS_GPR426, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr427", HW_H_SYS_GPR427, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr428", HW_H_SYS_GPR428, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr429", HW_H_SYS_GPR429, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr430", HW_H_SYS_GPR430, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr431", HW_H_SYS_GPR431, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr432", HW_H_SYS_GPR432, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr433", HW_H_SYS_GPR433, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr434", HW_H_SYS_GPR434, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr435", HW_H_SYS_GPR435, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr436", HW_H_SYS_GPR436, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr437", HW_H_SYS_GPR437, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr438", HW_H_SYS_GPR438, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr439", HW_H_SYS_GPR439, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr440", HW_H_SYS_GPR440, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr441", HW_H_SYS_GPR441, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr442", HW_H_SYS_GPR442, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr443", HW_H_SYS_GPR443, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr444", HW_H_SYS_GPR444, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr445", HW_H_SYS_GPR445, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr446", HW_H_SYS_GPR446, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr447", HW_H_SYS_GPR447, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr448", HW_H_SYS_GPR448, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr449", HW_H_SYS_GPR449, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr450", HW_H_SYS_GPR450, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr451", HW_H_SYS_GPR451, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr452", HW_H_SYS_GPR452, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr453", HW_H_SYS_GPR453, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr454", HW_H_SYS_GPR454, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr455", HW_H_SYS_GPR455, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr456", HW_H_SYS_GPR456, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr457", HW_H_SYS_GPR457, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr458", HW_H_SYS_GPR458, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr459", HW_H_SYS_GPR459, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr460", HW_H_SYS_GPR460, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr461", HW_H_SYS_GPR461, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr462", HW_H_SYS_GPR462, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr463", HW_H_SYS_GPR463, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr464", HW_H_SYS_GPR464, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr465", HW_H_SYS_GPR465, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr466", HW_H_SYS_GPR466, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr467", HW_H_SYS_GPR467, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr468", HW_H_SYS_GPR468, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr469", HW_H_SYS_GPR469, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr470", HW_H_SYS_GPR470, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr471", HW_H_SYS_GPR471, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr472", HW_H_SYS_GPR472, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr473", HW_H_SYS_GPR473, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr474", HW_H_SYS_GPR474, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr475", HW_H_SYS_GPR475, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr476", HW_H_SYS_GPR476, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr477", HW_H_SYS_GPR477, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr478", HW_H_SYS_GPR478, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr479", HW_H_SYS_GPR479, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr480", HW_H_SYS_GPR480, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr481", HW_H_SYS_GPR481, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr482", HW_H_SYS_GPR482, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr483", HW_H_SYS_GPR483, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr484", HW_H_SYS_GPR484, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr485", HW_H_SYS_GPR485, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr486", HW_H_SYS_GPR486, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr487", HW_H_SYS_GPR487, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr488", HW_H_SYS_GPR488, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr489", HW_H_SYS_GPR489, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr490", HW_H_SYS_GPR490, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr491", HW_H_SYS_GPR491, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr492", HW_H_SYS_GPR492, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr493", HW_H_SYS_GPR493, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr494", HW_H_SYS_GPR494, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr495", HW_H_SYS_GPR495, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr496", HW_H_SYS_GPR496, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr497", HW_H_SYS_GPR497, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr498", HW_H_SYS_GPR498, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr499", HW_H_SYS_GPR499, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr500", HW_H_SYS_GPR500, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr501", HW_H_SYS_GPR501, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr502", HW_H_SYS_GPR502, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr503", HW_H_SYS_GPR503, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr504", HW_H_SYS_GPR504, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr505", HW_H_SYS_GPR505, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr506", HW_H_SYS_GPR506, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr507", HW_H_SYS_GPR507, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr508", HW_H_SYS_GPR508, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr509", HW_H_SYS_GPR509, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr510", HW_H_SYS_GPR510, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-gpr511", HW_H_SYS_GPR511, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-mac-maclo", HW_H_MAC_MACLO, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-mac-machi", HW_H_MAC_MACHI, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-tick-ttmr", HW_H_TICK_TTMR, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-vr-rev", HW_H_SYS_VR_REV, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-vr-cfg", HW_H_SYS_VR_CFG, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-vr-ver", HW_H_SYS_VR_VER, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-upr-up", HW_H_SYS_UPR_UP, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-upr-dcp", HW_H_SYS_UPR_DCP, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-upr-icp", HW_H_SYS_UPR_ICP, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-upr-dmp", HW_H_SYS_UPR_DMP, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-upr-mp", HW_H_SYS_UPR_MP, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-upr-imp", HW_H_SYS_UPR_IMP, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-upr-dup", HW_H_SYS_UPR_DUP, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-upr-pcup", HW_H_SYS_UPR_PCUP, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-upr-picp", HW_H_SYS_UPR_PICP, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-upr-pmp", HW_H_SYS_UPR_PMP, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-upr-ttp", HW_H_SYS_UPR_TTP, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-upr-cup", HW_H_SYS_UPR_CUP, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-cpucfgr-nsgr", HW_H_SYS_CPUCFGR_NSGR, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-cpucfgr-cgf", HW_H_SYS_CPUCFGR_CGF, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-cpucfgr-ob32s", HW_H_SYS_CPUCFGR_OB32S, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-cpucfgr-ob64s", HW_H_SYS_CPUCFGR_OB64S, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-cpucfgr-of32s", HW_H_SYS_CPUCFGR_OF32S, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-cpucfgr-of64s", HW_H_SYS_CPUCFGR_OF64S, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-cpucfgr-ov64s", HW_H_SYS_CPUCFGR_OV64S, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-cpucfgr-nd", HW_H_SYS_CPUCFGR_ND, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-sr-sm", HW_H_SYS_SR_SM, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-sr-tee", HW_H_SYS_SR_TEE, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-sr-iee", HW_H_SYS_SR_IEE, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-sr-dce", HW_H_SYS_SR_DCE, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-sr-ice", HW_H_SYS_SR_ICE, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-sr-dme", HW_H_SYS_SR_DME, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-sr-ime", HW_H_SYS_SR_IME, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-sr-lee", HW_H_SYS_SR_LEE, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-sr-ce", HW_H_SYS_SR_CE, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-sr-f", HW_H_SYS_SR_F, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-sr-cy", HW_H_SYS_SR_CY, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-sr-ov", HW_H_SYS_SR_OV, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-sr-ove", HW_H_SYS_SR_OVE, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-sr-dsx", HW_H_SYS_SR_DSX, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-sr-eph", HW_H_SYS_SR_EPH, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-sr-fo", HW_H_SYS_SR_FO, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-sr-sumra", HW_H_SYS_SR_SUMRA, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-sr-cid", HW_H_SYS_SR_CID, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-fpcsr-fpee", HW_H_SYS_FPCSR_FPEE, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-fpcsr-rm", HW_H_SYS_FPCSR_RM, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-fpcsr-ovf", HW_H_SYS_FPCSR_OVF, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-fpcsr-unf", HW_H_SYS_FPCSR_UNF, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-fpcsr-snf", HW_H_SYS_FPCSR_SNF, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-fpcsr-qnf", HW_H_SYS_FPCSR_QNF, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-fpcsr-zf", HW_H_SYS_FPCSR_ZF, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-fpcsr-ixf", HW_H_SYS_FPCSR_IXF, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-fpcsr-ivf", HW_H_SYS_FPCSR_IVF, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-fpcsr-inf", HW_H_SYS_FPCSR_INF, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-sys-fpcsr-dzf", HW_H_SYS_FPCSR_DZF, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { "h-simm16", HW_H_SIMM16, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, + { "h-sys-vr", HW_H_SYS_VR, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-upr", HW_H_SYS_UPR, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-cpucfgr", HW_H_SYS_CPUCFGR, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-dmmucfgr", HW_H_SYS_DMMUCFGR, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-immucfgr", HW_H_SYS_IMMUCFGR, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-dccfgr", HW_H_SYS_DCCFGR, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-iccfgr", HW_H_SYS_ICCFGR, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-dcfgr", HW_H_SYS_DCFGR, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-pccfgr", HW_H_SYS_PCCFGR, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-npc", HW_H_SYS_NPC, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-sr", HW_H_SYS_SR, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-ppc", HW_H_SYS_PPC, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-fpcsr", HW_H_SYS_FPCSR, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-epcr0", HW_H_SYS_EPCR0, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-epcr1", HW_H_SYS_EPCR1, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-epcr2", HW_H_SYS_EPCR2, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-epcr3", HW_H_SYS_EPCR3, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-epcr4", HW_H_SYS_EPCR4, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-epcr5", HW_H_SYS_EPCR5, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-epcr6", HW_H_SYS_EPCR6, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-epcr7", HW_H_SYS_EPCR7, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-epcr8", HW_H_SYS_EPCR8, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-epcr9", HW_H_SYS_EPCR9, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-epcr10", HW_H_SYS_EPCR10, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-epcr11", HW_H_SYS_EPCR11, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-epcr12", HW_H_SYS_EPCR12, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-epcr13", HW_H_SYS_EPCR13, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-epcr14", HW_H_SYS_EPCR14, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-epcr15", HW_H_SYS_EPCR15, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-eear0", HW_H_SYS_EEAR0, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-eear1", HW_H_SYS_EEAR1, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-eear2", HW_H_SYS_EEAR2, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-eear3", HW_H_SYS_EEAR3, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-eear4", HW_H_SYS_EEAR4, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-eear5", HW_H_SYS_EEAR5, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-eear6", HW_H_SYS_EEAR6, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-eear7", HW_H_SYS_EEAR7, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-eear8", HW_H_SYS_EEAR8, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-eear9", HW_H_SYS_EEAR9, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-eear10", HW_H_SYS_EEAR10, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-eear11", HW_H_SYS_EEAR11, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-eear12", HW_H_SYS_EEAR12, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-eear13", HW_H_SYS_EEAR13, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-eear14", HW_H_SYS_EEAR14, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-eear15", HW_H_SYS_EEAR15, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-esr0", HW_H_SYS_ESR0, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-esr1", HW_H_SYS_ESR1, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-esr2", HW_H_SYS_ESR2, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-esr3", HW_H_SYS_ESR3, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-esr4", HW_H_SYS_ESR4, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-esr5", HW_H_SYS_ESR5, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-esr6", HW_H_SYS_ESR6, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-esr7", HW_H_SYS_ESR7, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-esr8", HW_H_SYS_ESR8, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-esr9", HW_H_SYS_ESR9, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-esr10", HW_H_SYS_ESR10, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-esr11", HW_H_SYS_ESR11, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-esr12", HW_H_SYS_ESR12, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-esr13", HW_H_SYS_ESR13, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-esr14", HW_H_SYS_ESR14, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-esr15", HW_H_SYS_ESR15, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr0", HW_H_SYS_GPR0, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr1", HW_H_SYS_GPR1, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr2", HW_H_SYS_GPR2, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr3", HW_H_SYS_GPR3, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr4", HW_H_SYS_GPR4, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr5", HW_H_SYS_GPR5, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr6", HW_H_SYS_GPR6, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr7", HW_H_SYS_GPR7, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr8", HW_H_SYS_GPR8, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr9", HW_H_SYS_GPR9, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr10", HW_H_SYS_GPR10, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr11", HW_H_SYS_GPR11, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr12", HW_H_SYS_GPR12, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr13", HW_H_SYS_GPR13, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr14", HW_H_SYS_GPR14, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr15", HW_H_SYS_GPR15, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr16", HW_H_SYS_GPR16, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr17", HW_H_SYS_GPR17, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr18", HW_H_SYS_GPR18, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr19", HW_H_SYS_GPR19, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr20", HW_H_SYS_GPR20, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr21", HW_H_SYS_GPR21, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr22", HW_H_SYS_GPR22, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr23", HW_H_SYS_GPR23, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr24", HW_H_SYS_GPR24, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr25", HW_H_SYS_GPR25, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr26", HW_H_SYS_GPR26, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr27", HW_H_SYS_GPR27, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr28", HW_H_SYS_GPR28, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr29", HW_H_SYS_GPR29, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr30", HW_H_SYS_GPR30, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr31", HW_H_SYS_GPR31, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr32", HW_H_SYS_GPR32, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr33", HW_H_SYS_GPR33, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr34", HW_H_SYS_GPR34, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr35", HW_H_SYS_GPR35, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr36", HW_H_SYS_GPR36, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr37", HW_H_SYS_GPR37, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr38", HW_H_SYS_GPR38, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr39", HW_H_SYS_GPR39, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr40", HW_H_SYS_GPR40, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr41", HW_H_SYS_GPR41, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr42", HW_H_SYS_GPR42, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr43", HW_H_SYS_GPR43, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr44", HW_H_SYS_GPR44, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr45", HW_H_SYS_GPR45, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr46", HW_H_SYS_GPR46, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr47", HW_H_SYS_GPR47, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr48", HW_H_SYS_GPR48, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr49", HW_H_SYS_GPR49, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr50", HW_H_SYS_GPR50, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr51", HW_H_SYS_GPR51, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr52", HW_H_SYS_GPR52, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr53", HW_H_SYS_GPR53, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr54", HW_H_SYS_GPR54, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr55", HW_H_SYS_GPR55, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr56", HW_H_SYS_GPR56, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr57", HW_H_SYS_GPR57, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr58", HW_H_SYS_GPR58, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr59", HW_H_SYS_GPR59, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr60", HW_H_SYS_GPR60, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr61", HW_H_SYS_GPR61, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr62", HW_H_SYS_GPR62, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr63", HW_H_SYS_GPR63, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr64", HW_H_SYS_GPR64, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr65", HW_H_SYS_GPR65, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr66", HW_H_SYS_GPR66, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr67", HW_H_SYS_GPR67, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr68", HW_H_SYS_GPR68, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr69", HW_H_SYS_GPR69, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr70", HW_H_SYS_GPR70, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr71", HW_H_SYS_GPR71, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr72", HW_H_SYS_GPR72, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr73", HW_H_SYS_GPR73, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr74", HW_H_SYS_GPR74, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr75", HW_H_SYS_GPR75, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr76", HW_H_SYS_GPR76, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr77", HW_H_SYS_GPR77, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr78", HW_H_SYS_GPR78, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr79", HW_H_SYS_GPR79, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr80", HW_H_SYS_GPR80, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr81", HW_H_SYS_GPR81, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr82", HW_H_SYS_GPR82, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr83", HW_H_SYS_GPR83, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr84", HW_H_SYS_GPR84, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr85", HW_H_SYS_GPR85, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr86", HW_H_SYS_GPR86, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr87", HW_H_SYS_GPR87, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr88", HW_H_SYS_GPR88, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr89", HW_H_SYS_GPR89, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr90", HW_H_SYS_GPR90, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr91", HW_H_SYS_GPR91, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr92", HW_H_SYS_GPR92, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr93", HW_H_SYS_GPR93, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr94", HW_H_SYS_GPR94, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr95", HW_H_SYS_GPR95, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr96", HW_H_SYS_GPR96, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr97", HW_H_SYS_GPR97, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr98", HW_H_SYS_GPR98, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr99", HW_H_SYS_GPR99, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr100", HW_H_SYS_GPR100, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr101", HW_H_SYS_GPR101, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr102", HW_H_SYS_GPR102, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr103", HW_H_SYS_GPR103, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr104", HW_H_SYS_GPR104, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr105", HW_H_SYS_GPR105, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr106", HW_H_SYS_GPR106, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr107", HW_H_SYS_GPR107, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr108", HW_H_SYS_GPR108, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr109", HW_H_SYS_GPR109, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr110", HW_H_SYS_GPR110, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr111", HW_H_SYS_GPR111, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr112", HW_H_SYS_GPR112, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr113", HW_H_SYS_GPR113, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr114", HW_H_SYS_GPR114, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr115", HW_H_SYS_GPR115, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr116", HW_H_SYS_GPR116, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr117", HW_H_SYS_GPR117, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr118", HW_H_SYS_GPR118, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr119", HW_H_SYS_GPR119, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr120", HW_H_SYS_GPR120, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr121", HW_H_SYS_GPR121, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr122", HW_H_SYS_GPR122, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr123", HW_H_SYS_GPR123, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr124", HW_H_SYS_GPR124, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr125", HW_H_SYS_GPR125, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr126", HW_H_SYS_GPR126, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr127", HW_H_SYS_GPR127, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr128", HW_H_SYS_GPR128, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr129", HW_H_SYS_GPR129, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr130", HW_H_SYS_GPR130, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr131", HW_H_SYS_GPR131, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr132", HW_H_SYS_GPR132, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr133", HW_H_SYS_GPR133, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr134", HW_H_SYS_GPR134, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr135", HW_H_SYS_GPR135, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr136", HW_H_SYS_GPR136, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr137", HW_H_SYS_GPR137, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr138", HW_H_SYS_GPR138, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr139", HW_H_SYS_GPR139, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr140", HW_H_SYS_GPR140, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr141", HW_H_SYS_GPR141, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr142", HW_H_SYS_GPR142, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr143", HW_H_SYS_GPR143, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr144", HW_H_SYS_GPR144, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr145", HW_H_SYS_GPR145, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr146", HW_H_SYS_GPR146, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr147", HW_H_SYS_GPR147, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr148", HW_H_SYS_GPR148, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr149", HW_H_SYS_GPR149, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr150", HW_H_SYS_GPR150, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr151", HW_H_SYS_GPR151, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr152", HW_H_SYS_GPR152, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr153", HW_H_SYS_GPR153, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr154", HW_H_SYS_GPR154, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr155", HW_H_SYS_GPR155, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr156", HW_H_SYS_GPR156, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr157", HW_H_SYS_GPR157, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr158", HW_H_SYS_GPR158, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr159", HW_H_SYS_GPR159, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr160", HW_H_SYS_GPR160, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr161", HW_H_SYS_GPR161, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr162", HW_H_SYS_GPR162, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr163", HW_H_SYS_GPR163, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr164", HW_H_SYS_GPR164, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr165", HW_H_SYS_GPR165, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr166", HW_H_SYS_GPR166, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr167", HW_H_SYS_GPR167, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr168", HW_H_SYS_GPR168, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr169", HW_H_SYS_GPR169, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr170", HW_H_SYS_GPR170, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr171", HW_H_SYS_GPR171, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr172", HW_H_SYS_GPR172, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr173", HW_H_SYS_GPR173, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr174", HW_H_SYS_GPR174, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr175", HW_H_SYS_GPR175, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr176", HW_H_SYS_GPR176, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr177", HW_H_SYS_GPR177, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr178", HW_H_SYS_GPR178, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr179", HW_H_SYS_GPR179, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr180", HW_H_SYS_GPR180, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr181", HW_H_SYS_GPR181, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr182", HW_H_SYS_GPR182, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr183", HW_H_SYS_GPR183, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr184", HW_H_SYS_GPR184, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr185", HW_H_SYS_GPR185, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr186", HW_H_SYS_GPR186, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr187", HW_H_SYS_GPR187, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr188", HW_H_SYS_GPR188, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr189", HW_H_SYS_GPR189, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr190", HW_H_SYS_GPR190, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr191", HW_H_SYS_GPR191, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr192", HW_H_SYS_GPR192, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr193", HW_H_SYS_GPR193, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr194", HW_H_SYS_GPR194, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr195", HW_H_SYS_GPR195, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr196", HW_H_SYS_GPR196, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr197", HW_H_SYS_GPR197, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr198", HW_H_SYS_GPR198, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr199", HW_H_SYS_GPR199, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr200", HW_H_SYS_GPR200, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr201", HW_H_SYS_GPR201, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr202", HW_H_SYS_GPR202, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr203", HW_H_SYS_GPR203, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr204", HW_H_SYS_GPR204, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr205", HW_H_SYS_GPR205, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr206", HW_H_SYS_GPR206, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr207", HW_H_SYS_GPR207, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr208", HW_H_SYS_GPR208, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr209", HW_H_SYS_GPR209, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr210", HW_H_SYS_GPR210, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr211", HW_H_SYS_GPR211, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr212", HW_H_SYS_GPR212, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr213", HW_H_SYS_GPR213, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr214", HW_H_SYS_GPR214, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr215", HW_H_SYS_GPR215, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr216", HW_H_SYS_GPR216, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr217", HW_H_SYS_GPR217, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr218", HW_H_SYS_GPR218, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr219", HW_H_SYS_GPR219, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr220", HW_H_SYS_GPR220, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr221", HW_H_SYS_GPR221, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr222", HW_H_SYS_GPR222, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr223", HW_H_SYS_GPR223, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr224", HW_H_SYS_GPR224, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr225", HW_H_SYS_GPR225, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr226", HW_H_SYS_GPR226, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr227", HW_H_SYS_GPR227, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr228", HW_H_SYS_GPR228, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr229", HW_H_SYS_GPR229, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr230", HW_H_SYS_GPR230, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr231", HW_H_SYS_GPR231, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr232", HW_H_SYS_GPR232, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr233", HW_H_SYS_GPR233, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr234", HW_H_SYS_GPR234, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr235", HW_H_SYS_GPR235, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr236", HW_H_SYS_GPR236, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr237", HW_H_SYS_GPR237, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr238", HW_H_SYS_GPR238, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr239", HW_H_SYS_GPR239, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr240", HW_H_SYS_GPR240, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr241", HW_H_SYS_GPR241, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr242", HW_H_SYS_GPR242, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr243", HW_H_SYS_GPR243, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr244", HW_H_SYS_GPR244, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr245", HW_H_SYS_GPR245, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr246", HW_H_SYS_GPR246, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr247", HW_H_SYS_GPR247, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr248", HW_H_SYS_GPR248, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr249", HW_H_SYS_GPR249, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr250", HW_H_SYS_GPR250, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr251", HW_H_SYS_GPR251, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr252", HW_H_SYS_GPR252, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr253", HW_H_SYS_GPR253, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr254", HW_H_SYS_GPR254, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr255", HW_H_SYS_GPR255, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr256", HW_H_SYS_GPR256, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr257", HW_H_SYS_GPR257, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr258", HW_H_SYS_GPR258, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr259", HW_H_SYS_GPR259, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr260", HW_H_SYS_GPR260, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr261", HW_H_SYS_GPR261, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr262", HW_H_SYS_GPR262, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr263", HW_H_SYS_GPR263, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr264", HW_H_SYS_GPR264, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr265", HW_H_SYS_GPR265, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr266", HW_H_SYS_GPR266, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr267", HW_H_SYS_GPR267, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr268", HW_H_SYS_GPR268, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr269", HW_H_SYS_GPR269, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr270", HW_H_SYS_GPR270, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr271", HW_H_SYS_GPR271, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr272", HW_H_SYS_GPR272, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr273", HW_H_SYS_GPR273, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr274", HW_H_SYS_GPR274, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr275", HW_H_SYS_GPR275, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr276", HW_H_SYS_GPR276, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr277", HW_H_SYS_GPR277, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr278", HW_H_SYS_GPR278, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr279", HW_H_SYS_GPR279, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr280", HW_H_SYS_GPR280, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr281", HW_H_SYS_GPR281, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr282", HW_H_SYS_GPR282, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr283", HW_H_SYS_GPR283, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr284", HW_H_SYS_GPR284, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr285", HW_H_SYS_GPR285, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr286", HW_H_SYS_GPR286, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr287", HW_H_SYS_GPR287, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr288", HW_H_SYS_GPR288, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr289", HW_H_SYS_GPR289, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr290", HW_H_SYS_GPR290, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr291", HW_H_SYS_GPR291, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr292", HW_H_SYS_GPR292, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr293", HW_H_SYS_GPR293, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr294", HW_H_SYS_GPR294, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr295", HW_H_SYS_GPR295, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr296", HW_H_SYS_GPR296, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr297", HW_H_SYS_GPR297, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr298", HW_H_SYS_GPR298, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr299", HW_H_SYS_GPR299, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr300", HW_H_SYS_GPR300, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr301", HW_H_SYS_GPR301, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr302", HW_H_SYS_GPR302, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr303", HW_H_SYS_GPR303, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr304", HW_H_SYS_GPR304, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr305", HW_H_SYS_GPR305, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr306", HW_H_SYS_GPR306, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr307", HW_H_SYS_GPR307, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr308", HW_H_SYS_GPR308, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr309", HW_H_SYS_GPR309, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr310", HW_H_SYS_GPR310, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr311", HW_H_SYS_GPR311, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr312", HW_H_SYS_GPR312, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr313", HW_H_SYS_GPR313, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr314", HW_H_SYS_GPR314, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr315", HW_H_SYS_GPR315, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr316", HW_H_SYS_GPR316, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr317", HW_H_SYS_GPR317, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr318", HW_H_SYS_GPR318, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr319", HW_H_SYS_GPR319, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr320", HW_H_SYS_GPR320, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr321", HW_H_SYS_GPR321, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr322", HW_H_SYS_GPR322, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr323", HW_H_SYS_GPR323, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr324", HW_H_SYS_GPR324, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr325", HW_H_SYS_GPR325, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr326", HW_H_SYS_GPR326, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr327", HW_H_SYS_GPR327, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr328", HW_H_SYS_GPR328, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr329", HW_H_SYS_GPR329, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr330", HW_H_SYS_GPR330, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr331", HW_H_SYS_GPR331, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr332", HW_H_SYS_GPR332, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr333", HW_H_SYS_GPR333, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr334", HW_H_SYS_GPR334, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr335", HW_H_SYS_GPR335, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr336", HW_H_SYS_GPR336, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr337", HW_H_SYS_GPR337, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr338", HW_H_SYS_GPR338, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr339", HW_H_SYS_GPR339, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr340", HW_H_SYS_GPR340, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr341", HW_H_SYS_GPR341, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr342", HW_H_SYS_GPR342, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr343", HW_H_SYS_GPR343, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr344", HW_H_SYS_GPR344, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr345", HW_H_SYS_GPR345, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr346", HW_H_SYS_GPR346, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr347", HW_H_SYS_GPR347, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr348", HW_H_SYS_GPR348, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr349", HW_H_SYS_GPR349, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr350", HW_H_SYS_GPR350, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr351", HW_H_SYS_GPR351, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr352", HW_H_SYS_GPR352, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr353", HW_H_SYS_GPR353, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr354", HW_H_SYS_GPR354, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr355", HW_H_SYS_GPR355, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr356", HW_H_SYS_GPR356, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr357", HW_H_SYS_GPR357, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr358", HW_H_SYS_GPR358, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr359", HW_H_SYS_GPR359, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr360", HW_H_SYS_GPR360, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr361", HW_H_SYS_GPR361, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr362", HW_H_SYS_GPR362, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr363", HW_H_SYS_GPR363, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr364", HW_H_SYS_GPR364, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr365", HW_H_SYS_GPR365, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr366", HW_H_SYS_GPR366, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr367", HW_H_SYS_GPR367, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr368", HW_H_SYS_GPR368, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr369", HW_H_SYS_GPR369, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr370", HW_H_SYS_GPR370, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr371", HW_H_SYS_GPR371, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr372", HW_H_SYS_GPR372, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr373", HW_H_SYS_GPR373, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr374", HW_H_SYS_GPR374, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr375", HW_H_SYS_GPR375, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr376", HW_H_SYS_GPR376, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr377", HW_H_SYS_GPR377, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr378", HW_H_SYS_GPR378, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr379", HW_H_SYS_GPR379, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr380", HW_H_SYS_GPR380, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr381", HW_H_SYS_GPR381, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr382", HW_H_SYS_GPR382, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr383", HW_H_SYS_GPR383, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr384", HW_H_SYS_GPR384, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr385", HW_H_SYS_GPR385, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr386", HW_H_SYS_GPR386, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr387", HW_H_SYS_GPR387, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr388", HW_H_SYS_GPR388, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr389", HW_H_SYS_GPR389, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr390", HW_H_SYS_GPR390, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr391", HW_H_SYS_GPR391, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr392", HW_H_SYS_GPR392, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr393", HW_H_SYS_GPR393, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr394", HW_H_SYS_GPR394, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr395", HW_H_SYS_GPR395, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr396", HW_H_SYS_GPR396, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr397", HW_H_SYS_GPR397, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr398", HW_H_SYS_GPR398, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr399", HW_H_SYS_GPR399, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr400", HW_H_SYS_GPR400, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr401", HW_H_SYS_GPR401, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr402", HW_H_SYS_GPR402, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr403", HW_H_SYS_GPR403, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr404", HW_H_SYS_GPR404, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr405", HW_H_SYS_GPR405, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr406", HW_H_SYS_GPR406, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr407", HW_H_SYS_GPR407, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr408", HW_H_SYS_GPR408, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr409", HW_H_SYS_GPR409, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr410", HW_H_SYS_GPR410, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr411", HW_H_SYS_GPR411, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr412", HW_H_SYS_GPR412, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr413", HW_H_SYS_GPR413, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr414", HW_H_SYS_GPR414, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr415", HW_H_SYS_GPR415, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr416", HW_H_SYS_GPR416, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr417", HW_H_SYS_GPR417, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr418", HW_H_SYS_GPR418, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr419", HW_H_SYS_GPR419, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr420", HW_H_SYS_GPR420, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr421", HW_H_SYS_GPR421, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr422", HW_H_SYS_GPR422, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr423", HW_H_SYS_GPR423, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr424", HW_H_SYS_GPR424, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr425", HW_H_SYS_GPR425, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr426", HW_H_SYS_GPR426, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr427", HW_H_SYS_GPR427, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr428", HW_H_SYS_GPR428, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr429", HW_H_SYS_GPR429, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr430", HW_H_SYS_GPR430, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr431", HW_H_SYS_GPR431, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr432", HW_H_SYS_GPR432, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr433", HW_H_SYS_GPR433, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr434", HW_H_SYS_GPR434, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr435", HW_H_SYS_GPR435, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr436", HW_H_SYS_GPR436, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr437", HW_H_SYS_GPR437, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr438", HW_H_SYS_GPR438, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr439", HW_H_SYS_GPR439, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr440", HW_H_SYS_GPR440, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr441", HW_H_SYS_GPR441, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr442", HW_H_SYS_GPR442, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr443", HW_H_SYS_GPR443, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr444", HW_H_SYS_GPR444, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr445", HW_H_SYS_GPR445, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr446", HW_H_SYS_GPR446, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr447", HW_H_SYS_GPR447, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr448", HW_H_SYS_GPR448, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr449", HW_H_SYS_GPR449, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr450", HW_H_SYS_GPR450, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr451", HW_H_SYS_GPR451, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr452", HW_H_SYS_GPR452, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr453", HW_H_SYS_GPR453, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr454", HW_H_SYS_GPR454, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr455", HW_H_SYS_GPR455, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr456", HW_H_SYS_GPR456, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr457", HW_H_SYS_GPR457, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr458", HW_H_SYS_GPR458, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr459", HW_H_SYS_GPR459, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr460", HW_H_SYS_GPR460, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr461", HW_H_SYS_GPR461, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr462", HW_H_SYS_GPR462, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr463", HW_H_SYS_GPR463, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr464", HW_H_SYS_GPR464, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr465", HW_H_SYS_GPR465, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr466", HW_H_SYS_GPR466, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr467", HW_H_SYS_GPR467, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr468", HW_H_SYS_GPR468, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr469", HW_H_SYS_GPR469, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr470", HW_H_SYS_GPR470, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr471", HW_H_SYS_GPR471, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr472", HW_H_SYS_GPR472, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr473", HW_H_SYS_GPR473, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr474", HW_H_SYS_GPR474, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr475", HW_H_SYS_GPR475, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr476", HW_H_SYS_GPR476, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr477", HW_H_SYS_GPR477, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr478", HW_H_SYS_GPR478, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr479", HW_H_SYS_GPR479, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr480", HW_H_SYS_GPR480, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr481", HW_H_SYS_GPR481, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr482", HW_H_SYS_GPR482, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr483", HW_H_SYS_GPR483, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr484", HW_H_SYS_GPR484, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr485", HW_H_SYS_GPR485, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr486", HW_H_SYS_GPR486, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr487", HW_H_SYS_GPR487, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr488", HW_H_SYS_GPR488, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr489", HW_H_SYS_GPR489, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr490", HW_H_SYS_GPR490, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr491", HW_H_SYS_GPR491, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr492", HW_H_SYS_GPR492, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr493", HW_H_SYS_GPR493, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr494", HW_H_SYS_GPR494, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr495", HW_H_SYS_GPR495, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr496", HW_H_SYS_GPR496, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr497", HW_H_SYS_GPR497, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr498", HW_H_SYS_GPR498, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr499", HW_H_SYS_GPR499, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr500", HW_H_SYS_GPR500, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr501", HW_H_SYS_GPR501, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr502", HW_H_SYS_GPR502, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr503", HW_H_SYS_GPR503, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr504", HW_H_SYS_GPR504, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr505", HW_H_SYS_GPR505, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr506", HW_H_SYS_GPR506, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr507", HW_H_SYS_GPR507, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr508", HW_H_SYS_GPR508, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr509", HW_H_SYS_GPR509, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr510", HW_H_SYS_GPR510, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-gpr511", HW_H_SYS_GPR511, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-mac-maclo", HW_H_MAC_MACLO, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-mac-machi", HW_H_MAC_MACHI, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-tick-ttmr", HW_H_TICK_TTMR, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-vr-rev", HW_H_SYS_VR_REV, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-vr-cfg", HW_H_SYS_VR_CFG, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-vr-ver", HW_H_SYS_VR_VER, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-upr-up", HW_H_SYS_UPR_UP, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-upr-dcp", HW_H_SYS_UPR_DCP, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-upr-icp", HW_H_SYS_UPR_ICP, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-upr-dmp", HW_H_SYS_UPR_DMP, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-upr-mp", HW_H_SYS_UPR_MP, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-upr-imp", HW_H_SYS_UPR_IMP, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-upr-dup", HW_H_SYS_UPR_DUP, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-upr-pcup", HW_H_SYS_UPR_PCUP, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-upr-picp", HW_H_SYS_UPR_PICP, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-upr-pmp", HW_H_SYS_UPR_PMP, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-upr-ttp", HW_H_SYS_UPR_TTP, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-upr-cup", HW_H_SYS_UPR_CUP, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-cpucfgr-nsgr", HW_H_SYS_CPUCFGR_NSGR, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-cpucfgr-cgf", HW_H_SYS_CPUCFGR_CGF, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-cpucfgr-ob32s", HW_H_SYS_CPUCFGR_OB32S, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-cpucfgr-ob64s", HW_H_SYS_CPUCFGR_OB64S, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-cpucfgr-of32s", HW_H_SYS_CPUCFGR_OF32S, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-cpucfgr-of64s", HW_H_SYS_CPUCFGR_OF64S, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-cpucfgr-ov64s", HW_H_SYS_CPUCFGR_OV64S, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-cpucfgr-nd", HW_H_SYS_CPUCFGR_ND, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-sr-sm", HW_H_SYS_SR_SM, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-sr-tee", HW_H_SYS_SR_TEE, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-sr-iee", HW_H_SYS_SR_IEE, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-sr-dce", HW_H_SYS_SR_DCE, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-sr-ice", HW_H_SYS_SR_ICE, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-sr-dme", HW_H_SYS_SR_DME, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-sr-ime", HW_H_SYS_SR_IME, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-sr-lee", HW_H_SYS_SR_LEE, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-sr-ce", HW_H_SYS_SR_CE, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-sr-f", HW_H_SYS_SR_F, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-sr-cy", HW_H_SYS_SR_CY, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-sr-ov", HW_H_SYS_SR_OV, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-sr-ove", HW_H_SYS_SR_OVE, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-sr-dsx", HW_H_SYS_SR_DSX, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-sr-eph", HW_H_SYS_SR_EPH, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-sr-fo", HW_H_SYS_SR_FO, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-sr-sumra", HW_H_SYS_SR_SUMRA, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-sr-cid", HW_H_SYS_SR_CID, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-fpcsr-fpee", HW_H_SYS_FPCSR_FPEE, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-fpcsr-rm", HW_H_SYS_FPCSR_RM, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-fpcsr-ovf", HW_H_SYS_FPCSR_OVF, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-fpcsr-unf", HW_H_SYS_FPCSR_UNF, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-fpcsr-snf", HW_H_SYS_FPCSR_SNF, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-fpcsr-qnf", HW_H_SYS_FPCSR_QNF, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-fpcsr-zf", HW_H_SYS_FPCSR_ZF, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-fpcsr-ixf", HW_H_SYS_FPCSR_IXF, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-fpcsr-ivf", HW_H_SYS_FPCSR_IVF, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-fpcsr-inf", HW_H_SYS_FPCSR_INF, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-sys-fpcsr-dzf", HW_H_SYS_FPCSR_DZF, CGEN_ASM_NONE, 0, { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { "h-simm16", HW_H_SIMM16, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, { "h-uimm16", HW_H_UIMM16, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } }, { "h-uimm6", HW_H_UIMM6, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } }, { "h-atomic-reserve", HW_H_ATOMIC_RESERVE, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } }, @@ -939,44 +888,44 @@ { { OR1K_F_NIL, "f-nil", 0, 0, 0, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } }, { OR1K_F_ANYOF, "f-anyof", 0, 0, 0, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } }, - { OR1K_F_OPCODE, "f-opcode", 0, 32, 31, 6, { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { OR1K_F_R1, "f-r1", 0, 32, 25, 5, { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { OR1K_F_R2, "f-r2", 0, 32, 20, 5, { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { OR1K_F_R3, "f-r3", 0, 32, 15, 5, { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { OR1K_F_OP_25_2, "f-op-25-2", 0, 32, 25, 2, { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { OR1K_F_OP_25_5, "f-op-25-5", 0, 32, 25, 5, { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { OR1K_F_OP_16_1, "f-op-16-1", 0, 32, 16, 1, { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { OR1K_F_OP_7_4, "f-op-7-4", 0, 32, 7, 4, { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { OR1K_F_OP_3_4, "f-op-3-4", 0, 32, 3, 4, { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { OR1K_F_OP_9_2, "f-op-9-2", 0, 32, 9, 2, { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { OR1K_F_OP_9_4, "f-op-9-4", 0, 32, 9, 4, { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { OR1K_F_OP_7_8, "f-op-7-8", 0, 32, 7, 8, { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { OR1K_F_OP_7_2, "f-op-7-2", 0, 32, 7, 2, { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { OR1K_F_RESV_25_26, "f-resv-25-26", 0, 32, 25, 26, { 0|A(RESERVED), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { OR1K_F_RESV_25_10, "f-resv-25-10", 0, 32, 25, 10, { 0|A(RESERVED), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { OR1K_F_RESV_25_5, "f-resv-25-5", 0, 32, 25, 5, { 0|A(RESERVED), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { OR1K_F_RESV_23_8, "f-resv-23-8", 0, 32, 23, 8, { 0|A(RESERVED), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { OR1K_F_RESV_20_21, "f-resv-20-21", 0, 32, 20, 21, { 0|A(RESERVED), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { OR1K_F_RESV_20_5, "f-resv-20-5", 0, 32, 20, 5, { 0|A(RESERVED), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { OR1K_F_RESV_20_4, "f-resv-20-4", 0, 32, 20, 4, { 0|A(RESERVED), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { OR1K_F_RESV_15_8, "f-resv-15-8", 0, 32, 15, 8, { 0|A(RESERVED), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { OR1K_F_RESV_15_6, "f-resv-15-6", 0, 32, 15, 6, { 0|A(RESERVED), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { OR1K_F_RESV_10_11, "f-resv-10-11", 0, 32, 10, 11, { 0|A(RESERVED), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { OR1K_F_RESV_10_7, "f-resv-10-7", 0, 32, 10, 7, { 0|A(RESERVED), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { OR1K_F_RESV_10_3, "f-resv-10-3", 0, 32, 10, 3, { 0|A(RESERVED), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { OR1K_F_RESV_10_1, "f-resv-10-1", 0, 32, 10, 1, { 0|A(RESERVED), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { OR1K_F_RESV_8_1, "f-resv-8-1", 0, 32, 8, 1, { 0|A(RESERVED), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { OR1K_F_RESV_7_4, "f-resv-7-4", 0, 32, 7, 4, { 0|A(RESERVED), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { OR1K_F_RESV_5_2, "f-resv-5-2", 0, 32, 5, 2, { 0|A(RESERVED), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { OR1K_F_IMM16_25_5, "f-imm16-25-5", 0, 32, 25, 5, { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { OR1K_F_IMM16_10_11, "f-imm16-10-11", 0, 32, 10, 11, { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { OR1K_F_DISP26, "f-disp26", 0, 32, 25, 26, { 0|A(PCREL_ADDR), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { OR1K_F_DISP21, "f-disp21", 0, 32, 20, 21, { 0|A(ABS_ADDR), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { OR1K_F_UIMM16, "f-uimm16", 0, 32, 15, 16, { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { OR1K_F_SIMM16, "f-simm16", 0, 32, 15, 16, { 0|A(SIGN_OPT), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { OR1K_F_UIMM6, "f-uimm6", 0, 32, 5, 6, { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { OR1K_F_UIMM16_SPLIT, "f-uimm16-split", 0, 0, 0, 0,{ 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, - { OR1K_F_SIMM16_SPLIT, "f-simm16-split", 0, 0, 0, 0,{ 0|A(SIGN_OPT)|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, + { OR1K_F_OPCODE, "f-opcode", 0, 32, 31, 6, { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { OR1K_F_R1, "f-r1", 0, 32, 25, 5, { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { OR1K_F_R2, "f-r2", 0, 32, 20, 5, { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { OR1K_F_R3, "f-r3", 0, 32, 15, 5, { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { OR1K_F_OP_25_2, "f-op-25-2", 0, 32, 25, 2, { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { OR1K_F_OP_25_5, "f-op-25-5", 0, 32, 25, 5, { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { OR1K_F_OP_16_1, "f-op-16-1", 0, 32, 16, 1, { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { OR1K_F_OP_7_4, "f-op-7-4", 0, 32, 7, 4, { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { OR1K_F_OP_3_4, "f-op-3-4", 0, 32, 3, 4, { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { OR1K_F_OP_9_2, "f-op-9-2", 0, 32, 9, 2, { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { OR1K_F_OP_9_4, "f-op-9-4", 0, 32, 9, 4, { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { OR1K_F_OP_7_8, "f-op-7-8", 0, 32, 7, 8, { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { OR1K_F_OP_7_2, "f-op-7-2", 0, 32, 7, 2, { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { OR1K_F_RESV_25_26, "f-resv-25-26", 0, 32, 25, 26, { 0|A(RESERVED), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { OR1K_F_RESV_25_10, "f-resv-25-10", 0, 32, 25, 10, { 0|A(RESERVED), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { OR1K_F_RESV_25_5, "f-resv-25-5", 0, 32, 25, 5, { 0|A(RESERVED), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { OR1K_F_RESV_23_8, "f-resv-23-8", 0, 32, 23, 8, { 0|A(RESERVED), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { OR1K_F_RESV_20_21, "f-resv-20-21", 0, 32, 20, 21, { 0|A(RESERVED), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { OR1K_F_RESV_20_5, "f-resv-20-5", 0, 32, 20, 5, { 0|A(RESERVED), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { OR1K_F_RESV_20_4, "f-resv-20-4", 0, 32, 20, 4, { 0|A(RESERVED), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { OR1K_F_RESV_15_8, "f-resv-15-8", 0, 32, 15, 8, { 0|A(RESERVED), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { OR1K_F_RESV_15_6, "f-resv-15-6", 0, 32, 15, 6, { 0|A(RESERVED), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { OR1K_F_RESV_10_11, "f-resv-10-11", 0, 32, 10, 11, { 0|A(RESERVED), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { OR1K_F_RESV_10_7, "f-resv-10-7", 0, 32, 10, 7, { 0|A(RESERVED), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { OR1K_F_RESV_10_3, "f-resv-10-3", 0, 32, 10, 3, { 0|A(RESERVED), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { OR1K_F_RESV_10_1, "f-resv-10-1", 0, 32, 10, 1, { 0|A(RESERVED), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { OR1K_F_RESV_8_1, "f-resv-8-1", 0, 32, 8, 1, { 0|A(RESERVED), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { OR1K_F_RESV_7_4, "f-resv-7-4", 0, 32, 7, 4, { 0|A(RESERVED), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { OR1K_F_RESV_5_2, "f-resv-5-2", 0, 32, 5, 2, { 0|A(RESERVED), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { OR1K_F_IMM16_25_5, "f-imm16-25-5", 0, 32, 25, 5, { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { OR1K_F_IMM16_10_11, "f-imm16-10-11", 0, 32, 10, 11, { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { OR1K_F_DISP26, "f-disp26", 0, 32, 25, 26, { 0|A(PCREL_ADDR), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { OR1K_F_DISP21, "f-disp21", 0, 32, 20, 21, { 0|A(ABS_ADDR), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { OR1K_F_UIMM16, "f-uimm16", 0, 32, 15, 16, { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { OR1K_F_SIMM16, "f-simm16", 0, 32, 15, 16, { 0|A(SIGN_OPT), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { OR1K_F_UIMM6, "f-uimm6", 0, 32, 5, 6, { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { OR1K_F_UIMM16_SPLIT, "f-uimm16-split", 0, 0, 0, 0,{ 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, + { OR1K_F_SIMM16_SPLIT, "f-simm16-split", 0, 0, 0, 0,{ 0|A(SIGN_OPT)|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, { OR1K_F_RDOFF_10_1, "f-rdoff-10-1", 0, 32, 10, 1, { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, { OR1K_F_RAOFF_9_1, "f-raoff-9-1", 0, 32, 9, 1, { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, { OR1K_F_RBOFF_8_1, "f-rboff-8-1", 0, 32, 8, 1, { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, @@ -1046,127 +995,115 @@ /* sys-sr: supervision register */ { "sys-sr", OR1K_OPERAND_SYS_SR, HW_H_SYS_SR, 0, 0, { 0, { (const PTR) 0 } }, - { 0|A(SEM_ONLY), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, + { 0|A(SEM_ONLY), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* sys-esr0: exception supervision register 0 */ { "sys-esr0", OR1K_OPERAND_SYS_ESR0, HW_H_SYS_ESR0, 0, 0, { 0, { (const PTR) 0 } }, - { 0|A(SEM_ONLY), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, + { 0|A(SEM_ONLY), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* sys-epcr0: exception PC register 0 */ { "sys-epcr0", OR1K_OPERAND_SYS_EPCR0, HW_H_SYS_EPCR0, 0, 0, { 0, { (const PTR) 0 } }, - { 0|A(SEM_ONLY), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, + { 0|A(SEM_ONLY), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* sys-sr-lee: SR little endian enable bit */ { "sys-sr-lee", OR1K_OPERAND_SYS_SR_LEE, HW_H_SYS_SR_LEE, 0, 0, { 0, { (const PTR) 0 } }, - { 0|A(SEM_ONLY), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, + { 0|A(SEM_ONLY), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* sys-sr-f: SR flag bit */ { "sys-sr-f", OR1K_OPERAND_SYS_SR_F, HW_H_SYS_SR_F, 0, 0, { 0, { (const PTR) 0 } }, - { 0|A(SEM_ONLY), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, + { 0|A(SEM_ONLY), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* sys-sr-cy: SR carry bit */ { "sys-sr-cy", OR1K_OPERAND_SYS_SR_CY, HW_H_SYS_SR_CY, 0, 0, { 0, { (const PTR) 0 } }, - { 0|A(SEM_ONLY), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, + { 0|A(SEM_ONLY), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* sys-sr-ov: SR overflow bit */ { "sys-sr-ov", OR1K_OPERAND_SYS_SR_OV, HW_H_SYS_SR_OV, 0, 0, { 0, { (const PTR) 0 } }, - { 0|A(SEM_ONLY), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, + { 0|A(SEM_ONLY), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* sys-sr-ove: SR overflow exception enable bit */ { "sys-sr-ove", OR1K_OPERAND_SYS_SR_OVE, HW_H_SYS_SR_OVE, 0, 0, { 0, { (const PTR) 0 } }, - { 0|A(SEM_ONLY), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, + { 0|A(SEM_ONLY), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* sys-cpucfgr-ob64s: CPUCFGR ORBIS64 supported bit */ { "sys-cpucfgr-ob64s", OR1K_OPERAND_SYS_CPUCFGR_OB64S, HW_H_SYS_CPUCFGR_OB64S, 0, 0, { 0, { (const PTR) 0 } }, - { 0|A(SEM_ONLY), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, + { 0|A(SEM_ONLY), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* sys-cpucfgr-nd: CPUCFGR no delay bit */ { "sys-cpucfgr-nd", OR1K_OPERAND_SYS_CPUCFGR_ND, HW_H_SYS_CPUCFGR_ND, 0, 0, { 0, { (const PTR) 0 } }, - { 0|A(SEM_ONLY), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, + { 0|A(SEM_ONLY), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* sys-fpcsr-rm: floating point round mode */ { "sys-fpcsr-rm", OR1K_OPERAND_SYS_FPCSR_RM, HW_H_SYS_FPCSR_RM, 0, 0, { 0, { (const PTR) 0 } }, - { 0|A(SEM_ONLY), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, + { 0|A(SEM_ONLY), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* mac-machi: MAC HI result register */ { "mac-machi", OR1K_OPERAND_MAC_MACHI, HW_H_MAC_MACHI, 0, 0, { 0, { (const PTR) 0 } }, - { 0|A(SEM_ONLY), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, + { 0|A(SEM_ONLY), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* mac-maclo: MAC LO result register */ { "mac-maclo", OR1K_OPERAND_MAC_MACLO, HW_H_MAC_MACLO, 0, 0, { 0, { (const PTR) 0 } }, - { 0|A(SEM_ONLY), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, + { 0|A(SEM_ONLY), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* atomic-reserve: atomic reserve flag */ { "atomic-reserve", OR1K_OPERAND_ATOMIC_RESERVE, HW_H_ATOMIC_RESERVE, 0, 0, { 0, { (const PTR) 0 } }, - { 0|A(SEM_ONLY), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, + { 0|A(SEM_ONLY), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* atomic-address: atomic address */ { "atomic-address", OR1K_OPERAND_ATOMIC_ADDRESS, HW_H_ATOMIC_ADDRESS, 0, 0, { 0, { (const PTR) 0 } }, - { 0|A(SEM_ONLY), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, + { 0|A(SEM_ONLY), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* uimm6: uimm6 */ { "uimm6", OR1K_OPERAND_UIMM6, HW_H_UIMM6, 5, 6, { 0, { (const PTR) &or1k_cgen_ifld_table[OR1K_F_UIMM6] } }, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* rD: destination register */ { "rD", OR1K_OPERAND_RD, HW_H_GPR, 25, 5, { 0, { (const PTR) &or1k_cgen_ifld_table[OR1K_F_R1] } }, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* rA: source register A */ { "rA", OR1K_OPERAND_RA, HW_H_GPR, 20, 5, { 0, { (const PTR) &or1k_cgen_ifld_table[OR1K_F_R2] } }, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* rB: source register B */ { "rB", OR1K_OPERAND_RB, HW_H_GPR, 15, 5, { 0, { (const PTR) &or1k_cgen_ifld_table[OR1K_F_R3] } }, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* disp26: pc-rel 26 bit */ { "disp26", OR1K_OPERAND_DISP26, HW_H_IADDR, 25, 26, { 0, { (const PTR) &or1k_cgen_ifld_table[OR1K_F_DISP26] } }, - { 0|A(PCREL_ADDR), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, + { 0|A(PCREL_ADDR), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* disp21: pc-rel 21 bit */ { "disp21", OR1K_OPERAND_DISP21, HW_H_IADDR, 20, 21, { 0, { (const PTR) &or1k_cgen_ifld_table[OR1K_F_DISP21] } }, - { 0|A(ABS_ADDR), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, + { 0|A(ABS_ADDR), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* simm16: 16-bit signed immediate */ { "simm16", OR1K_OPERAND_SIMM16, HW_H_SIMM16, 15, 16, { 0, { (const PTR) &or1k_cgen_ifld_table[OR1K_F_SIMM16] } }, - { 0|A(SIGN_OPT), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, + { 0|A(SIGN_OPT), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* uimm16: 16-bit unsigned immediate */ { "uimm16", OR1K_OPERAND_UIMM16, HW_H_UIMM16, 15, 16, { 0, { (const PTR) &or1k_cgen_ifld_table[OR1K_F_UIMM16] } }, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* simm16-split: split 16-bit signed immediate */ { "simm16-split", OR1K_OPERAND_SIMM16_SPLIT, HW_H_SIMM16, 10, 16, { 2, { (const PTR) &OR1K_F_SIMM16_SPLIT_MULTI_IFIELD[0] } }, - { 0|A(SIGN_OPT)|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, + { 0|A(SIGN_OPT)|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* uimm16-split: split 16-bit unsigned immediate */ { "uimm16-split", OR1K_OPERAND_UIMM16_SPLIT, HW_H_UIMM16, 10, 16, { 2, { (const PTR) &OR1K_F_UIMM16_SPLIT_MULTI_IFIELD[0] } }, - { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, + { 0|A(VIRTUAL), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* rDSF: destination register (single floating point mode) */ { "rDSF", OR1K_OPERAND_RDSF, HW_H_FSR, 25, 5, { 0, { (const PTR) &or1k_cgen_ifld_table[OR1K_F_R1] } }, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* rASF: source register A (single floating point mode) */ { "rASF", OR1K_OPERAND_RASF, HW_H_FSR, 20, 5, { 0, { (const PTR) &or1k_cgen_ifld_table[OR1K_F_R2] } }, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* rBSF: source register B (single floating point mode) */ { "rBSF", OR1K_OPERAND_RBSF, HW_H_FSR, 15, 5, { 0, { (const PTR) &or1k_cgen_ifld_table[OR1K_F_R3] } }, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, -/* rDDF: or64 destination register (double floating point mode) */ - { "rDDF", OR1K_OPERAND_RDDF, HW_H_FDR, 25, 5, - { 0, { (const PTR) &or1k_cgen_ifld_table[OR1K_F_R1] } }, - { 0, { { { (1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, -/* rADF: or64 source register A (double floating point mode) */ - { "rADF", OR1K_OPERAND_RADF, HW_H_FDR, 20, 5, - { 0, { (const PTR) &or1k_cgen_ifld_table[OR1K_F_R2] } }, - { 0, { { { (1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, -/* rBDF: or64 source register B (double floating point mode) */ - { "rBDF", OR1K_OPERAND_RBDF, HW_H_FDR, 15, 5, - { 0, { (const PTR) &or1k_cgen_ifld_table[OR1K_F_R3] } }, - { 0, { { { (1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } }, + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* rDD32F: destination register (double floating point pair) */ { "rDD32F", OR1K_OPERAND_RDD32F, HW_H_FD32R, 10, 6, { 2, { (const PTR) &OR1K_F_RDD32_MULTI_IFIELD[0] } }, @@ -1214,502 +1151,497 @@ /* l.j ${disp26} */ { OR1K_INSN_L_J, "l-j", "l.j", 32, - { 0|A(UNCOND_CTI)|A(NOT_IN_DELAY_SLOT)|A(DELAYED_CTI)|A(SKIP_CTI)|A(DELAY_SLOT), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0|A(UNCOND_CTI)|A(NOT_IN_DELAY_SLOT)|A(DELAYED_CTI)|A(SKIP_CTI)|A(DELAY_SLOT), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.adrp $rD,${disp21} */ { OR1K_INSN_L_ADRP, "l-adrp", "l.adrp", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.jal ${disp26} */ { OR1K_INSN_L_JAL, "l-jal", "l.jal", 32, - { 0|A(UNCOND_CTI)|A(NOT_IN_DELAY_SLOT)|A(DELAYED_CTI)|A(SKIP_CTI)|A(DELAY_SLOT), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0|A(UNCOND_CTI)|A(NOT_IN_DELAY_SLOT)|A(DELAYED_CTI)|A(SKIP_CTI)|A(DELAY_SLOT), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.jr $rB */ { OR1K_INSN_L_JR, "l-jr", "l.jr", 32, - { 0|A(UNCOND_CTI)|A(NOT_IN_DELAY_SLOT)|A(DELAYED_CTI)|A(SKIP_CTI)|A(DELAY_SLOT), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0|A(UNCOND_CTI)|A(NOT_IN_DELAY_SLOT)|A(DELAYED_CTI)|A(SKIP_CTI)|A(DELAY_SLOT), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.jalr $rB */ { OR1K_INSN_L_JALR, "l-jalr", "l.jalr", 32, - { 0|A(UNCOND_CTI)|A(NOT_IN_DELAY_SLOT)|A(DELAYED_CTI)|A(SKIP_CTI)|A(DELAY_SLOT), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0|A(UNCOND_CTI)|A(NOT_IN_DELAY_SLOT)|A(DELAYED_CTI)|A(SKIP_CTI)|A(DELAY_SLOT), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.bnf ${disp26} */ { OR1K_INSN_L_BNF, "l-bnf", "l.bnf", 32, - { 0|A(COND_CTI)|A(NOT_IN_DELAY_SLOT)|A(DELAYED_CTI)|A(SKIP_CTI)|A(DELAY_SLOT), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0|A(COND_CTI)|A(NOT_IN_DELAY_SLOT)|A(DELAYED_CTI)|A(SKIP_CTI)|A(DELAY_SLOT), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.bf ${disp26} */ { OR1K_INSN_L_BF, "l-bf", "l.bf", 32, - { 0|A(COND_CTI)|A(NOT_IN_DELAY_SLOT)|A(DELAYED_CTI)|A(SKIP_CTI)|A(DELAY_SLOT), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0|A(COND_CTI)|A(NOT_IN_DELAY_SLOT)|A(DELAYED_CTI)|A(SKIP_CTI)|A(DELAY_SLOT), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.trap ${uimm16} */ { OR1K_INSN_L_TRAP, "l-trap", "l.trap", 32, - { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.sys ${uimm16} */ { OR1K_INSN_L_SYS, "l-sys", "l.sys", 32, - { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.msync */ { OR1K_INSN_L_MSYNC, "l-msync", "l.msync", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.psync */ { OR1K_INSN_L_PSYNC, "l-psync", "l.psync", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.csync */ { OR1K_INSN_L_CSYNC, "l-csync", "l.csync", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.rfe */ { OR1K_INSN_L_RFE, "l-rfe", "l.rfe", 32, - { 0|A(FORCED_CTI)|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0|A(FORCED_CTI)|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.nop ${uimm16} */ { OR1K_INSN_L_NOP_IMM, "l-nop-imm", "l.nop", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.nop */ { OR1K_INSN_L_NOP, "l-nop", "l.nop", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.movhi $rD,$uimm16 */ { OR1K_INSN_L_MOVHI, "l-movhi", "l.movhi", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.macrc $rD */ { OR1K_INSN_L_MACRC, "l-macrc", "l.macrc", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.mfspr $rD,$rA,${uimm16} */ { OR1K_INSN_L_MFSPR, "l-mfspr", "l.mfspr", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.mtspr $rA,$rB,${uimm16-split} */ { OR1K_INSN_L_MTSPR, "l-mtspr", "l.mtspr", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.lwz $rD,${simm16}($rA) */ { OR1K_INSN_L_LWZ, "l-lwz", "l.lwz", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.lws $rD,${simm16}($rA) */ { OR1K_INSN_L_LWS, "l-lws", "l.lws", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.lwa $rD,${simm16}($rA) */ { OR1K_INSN_L_LWA, "l-lwa", "l.lwa", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.lbz $rD,${simm16}($rA) */ { OR1K_INSN_L_LBZ, "l-lbz", "l.lbz", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.lbs $rD,${simm16}($rA) */ { OR1K_INSN_L_LBS, "l-lbs", "l.lbs", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.lhz $rD,${simm16}($rA) */ { OR1K_INSN_L_LHZ, "l-lhz", "l.lhz", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.lhs $rD,${simm16}($rA) */ { OR1K_INSN_L_LHS, "l-lhs", "l.lhs", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.sw ${simm16-split}($rA),$rB */ { OR1K_INSN_L_SW, "l-sw", "l.sw", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.sb ${simm16-split}($rA),$rB */ { OR1K_INSN_L_SB, "l-sb", "l.sb", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.sh ${simm16-split}($rA),$rB */ { OR1K_INSN_L_SH, "l-sh", "l.sh", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.swa ${simm16-split}($rA),$rB */ { OR1K_INSN_L_SWA, "l-swa", "l.swa", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.sll $rD,$rA,$rB */ { OR1K_INSN_L_SLL, "l-sll", "l.sll", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.slli $rD,$rA,${uimm6} */ { OR1K_INSN_L_SLLI, "l-slli", "l.slli", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.srl $rD,$rA,$rB */ { OR1K_INSN_L_SRL, "l-srl", "l.srl", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.srli $rD,$rA,${uimm6} */ { OR1K_INSN_L_SRLI, "l-srli", "l.srli", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.sra $rD,$rA,$rB */ { OR1K_INSN_L_SRA, "l-sra", "l.sra", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.srai $rD,$rA,${uimm6} */ { OR1K_INSN_L_SRAI, "l-srai", "l.srai", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.ror $rD,$rA,$rB */ { OR1K_INSN_L_ROR, "l-ror", "l.ror", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.rori $rD,$rA,${uimm6} */ { OR1K_INSN_L_RORI, "l-rori", "l.rori", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.and $rD,$rA,$rB */ { OR1K_INSN_L_AND, "l-and", "l.and", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.or $rD,$rA,$rB */ { OR1K_INSN_L_OR, "l-or", "l.or", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.xor $rD,$rA,$rB */ { OR1K_INSN_L_XOR, "l-xor", "l.xor", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.add $rD,$rA,$rB */ { OR1K_INSN_L_ADD, "l-add", "l.add", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.sub $rD,$rA,$rB */ { OR1K_INSN_L_SUB, "l-sub", "l.sub", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.addc $rD,$rA,$rB */ { OR1K_INSN_L_ADDC, "l-addc", "l.addc", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.mul $rD,$rA,$rB */ { OR1K_INSN_L_MUL, "l-mul", "l.mul", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.muld $rA,$rB */ { OR1K_INSN_L_MULD, "l-muld", "l.muld", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.mulu $rD,$rA,$rB */ { OR1K_INSN_L_MULU, "l-mulu", "l.mulu", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.muldu $rA,$rB */ { OR1K_INSN_L_MULDU, "l-muldu", "l.muldu", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.div $rD,$rA,$rB */ { OR1K_INSN_L_DIV, "l-div", "l.div", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.divu $rD,$rA,$rB */ { OR1K_INSN_L_DIVU, "l-divu", "l.divu", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.ff1 $rD,$rA */ { OR1K_INSN_L_FF1, "l-ff1", "l.ff1", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.fl1 $rD,$rA */ { OR1K_INSN_L_FL1, "l-fl1", "l.fl1", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.andi $rD,$rA,$uimm16 */ { OR1K_INSN_L_ANDI, "l-andi", "l.andi", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.ori $rD,$rA,$uimm16 */ { OR1K_INSN_L_ORI, "l-ori", "l.ori", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.xori $rD,$rA,$simm16 */ { OR1K_INSN_L_XORI, "l-xori", "l.xori", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.addi $rD,$rA,$simm16 */ { OR1K_INSN_L_ADDI, "l-addi", "l.addi", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.addic $rD,$rA,$simm16 */ { OR1K_INSN_L_ADDIC, "l-addic", "l.addic", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.muli $rD,$rA,$simm16 */ { OR1K_INSN_L_MULI, "l-muli", "l.muli", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.exths $rD,$rA */ { OR1K_INSN_L_EXTHS, "l-exths", "l.exths", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.extbs $rD,$rA */ { OR1K_INSN_L_EXTBS, "l-extbs", "l.extbs", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.exthz $rD,$rA */ { OR1K_INSN_L_EXTHZ, "l-exthz", "l.exthz", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.extbz $rD,$rA */ { OR1K_INSN_L_EXTBZ, "l-extbz", "l.extbz", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.extws $rD,$rA */ { OR1K_INSN_L_EXTWS, "l-extws", "l.extws", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.extwz $rD,$rA */ { OR1K_INSN_L_EXTWZ, "l-extwz", "l.extwz", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.cmov $rD,$rA,$rB */ { OR1K_INSN_L_CMOV, "l-cmov", "l.cmov", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.sfgts $rA,$rB */ { OR1K_INSN_L_SFGTS, "l-sfgts", "l.sfgts", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.sfgtsi $rA,$simm16 */ { OR1K_INSN_L_SFGTSI, "l-sfgtsi", "l.sfgtsi", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.sfgtu $rA,$rB */ { OR1K_INSN_L_SFGTU, "l-sfgtu", "l.sfgtu", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.sfgtui $rA,$simm16 */ { OR1K_INSN_L_SFGTUI, "l-sfgtui", "l.sfgtui", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.sfges $rA,$rB */ { OR1K_INSN_L_SFGES, "l-sfges", "l.sfges", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.sfgesi $rA,$simm16 */ { OR1K_INSN_L_SFGESI, "l-sfgesi", "l.sfgesi", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.sfgeu $rA,$rB */ { OR1K_INSN_L_SFGEU, "l-sfgeu", "l.sfgeu", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.sfgeui $rA,$simm16 */ { OR1K_INSN_L_SFGEUI, "l-sfgeui", "l.sfgeui", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.sflts $rA,$rB */ { OR1K_INSN_L_SFLTS, "l-sflts", "l.sflts", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.sfltsi $rA,$simm16 */ { OR1K_INSN_L_SFLTSI, "l-sfltsi", "l.sfltsi", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.sfltu $rA,$rB */ { OR1K_INSN_L_SFLTU, "l-sfltu", "l.sfltu", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.sfltui $rA,$simm16 */ { OR1K_INSN_L_SFLTUI, "l-sfltui", "l.sfltui", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.sfles $rA,$rB */ { OR1K_INSN_L_SFLES, "l-sfles", "l.sfles", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.sflesi $rA,$simm16 */ { OR1K_INSN_L_SFLESI, "l-sflesi", "l.sflesi", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.sfleu $rA,$rB */ { OR1K_INSN_L_SFLEU, "l-sfleu", "l.sfleu", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.sfleui $rA,$simm16 */ { OR1K_INSN_L_SFLEUI, "l-sfleui", "l.sfleui", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.sfeq $rA,$rB */ { OR1K_INSN_L_SFEQ, "l-sfeq", "l.sfeq", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.sfeqi $rA,$simm16 */ { OR1K_INSN_L_SFEQI, "l-sfeqi", "l.sfeqi", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.sfne $rA,$rB */ { OR1K_INSN_L_SFNE, "l-sfne", "l.sfne", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.sfnei $rA,$simm16 */ { OR1K_INSN_L_SFNEI, "l-sfnei", "l.sfnei", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.mac $rA,$rB */ { OR1K_INSN_L_MAC, "l-mac", "l.mac", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.maci $rA,${simm16} */ { OR1K_INSN_L_MACI, "l-maci", "l.maci", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.macu $rA,$rB */ { OR1K_INSN_L_MACU, "l-macu", "l.macu", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.msb $rA,$rB */ { OR1K_INSN_L_MSB, "l-msb", "l.msb", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.msbu $rA,$rB */ { OR1K_INSN_L_MSBU, "l-msbu", "l.msbu", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.cust1 */ { OR1K_INSN_L_CUST1, "l-cust1", "l.cust1", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.cust2 */ { OR1K_INSN_L_CUST2, "l-cust2", "l.cust2", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.cust3 */ { OR1K_INSN_L_CUST3, "l-cust3", "l.cust3", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.cust4 */ { OR1K_INSN_L_CUST4, "l-cust4", "l.cust4", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.cust5 */ { OR1K_INSN_L_CUST5, "l-cust5", "l.cust5", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.cust6 */ { OR1K_INSN_L_CUST6, "l-cust6", "l.cust6", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.cust7 */ { OR1K_INSN_L_CUST7, "l-cust7", "l.cust7", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* l.cust8 */ { OR1K_INSN_L_CUST8, "l-cust8", "l.cust8", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* lf.add.s $rDSF,$rASF,$rBSF */ { OR1K_INSN_LF_ADD_S, "lf-add-s", "lf.add.s", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } - }, -/* lf.add.d $rDDF,$rADF,$rBDF */ - { - OR1K_INSN_LF_ADD_D, "lf-add-d", "lf.add.d", 32, - { 0, { { { (1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* lf.add.d $rDD32F,$rAD32F,$rBD32F */ { @@ -1719,12 +1651,7 @@ /* lf.sub.s $rDSF,$rASF,$rBSF */ { OR1K_INSN_LF_SUB_S, "lf-sub-s", "lf.sub.s", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } - }, -/* lf.sub.d $rDDF,$rADF,$rBDF */ - { - OR1K_INSN_LF_SUB_D, "lf-sub-d", "lf.sub.d", 32, - { 0, { { { (1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* lf.sub.d $rDD32F,$rAD32F,$rBD32F */ { @@ -1734,12 +1661,7 @@ /* lf.mul.s $rDSF,$rASF,$rBSF */ { OR1K_INSN_LF_MUL_S, "lf-mul-s", "lf.mul.s", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } - }, -/* lf.mul.d $rDDF,$rADF,$rBDF */ - { - OR1K_INSN_LF_MUL_D, "lf-mul-d", "lf.mul.d", 32, - { 0, { { { (1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* lf.mul.d $rDD32F,$rAD32F,$rBD32F */ { @@ -1749,12 +1671,7 @@ /* lf.div.s $rDSF,$rASF,$rBSF */ { OR1K_INSN_LF_DIV_S, "lf-div-s", "lf.div.s", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } - }, -/* lf.div.d $rDDF,$rADF,$rBDF */ - { - OR1K_INSN_LF_DIV_D, "lf-div-d", "lf.div.d", 32, - { 0, { { { (1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* lf.div.d $rDD32F,$rAD32F,$rBD32F */ { @@ -1764,12 +1681,7 @@ /* lf.rem.s $rDSF,$rASF,$rBSF */ { OR1K_INSN_LF_REM_S, "lf-rem-s", "lf.rem.s", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } - }, -/* lf.rem.d $rDDF,$rADF,$rBDF */ - { - OR1K_INSN_LF_REM_D, "lf-rem-d", "lf.rem.d", 32, - { 0, { { { (1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* lf.rem.d $rDD32F,$rAD32F,$rBD32F */ { @@ -1779,12 +1691,7 @@ /* lf.itof.s $rDSF,$rA */ { OR1K_INSN_LF_ITOF_S, "lf-itof-s", "lf.itof.s", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } - }, -/* lf.itof.d $rDDF,$rA */ - { - OR1K_INSN_LF_ITOF_D, "lf-itof-d", "lf.itof.d", 32, - { 0, { { { (1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* lf.itof.d $rDD32F,$rADI */ { @@ -1794,12 +1701,7 @@ /* lf.ftoi.s $rD,$rASF */ { OR1K_INSN_LF_FTOI_S, "lf-ftoi-s", "lf.ftoi.s", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } - }, -/* lf.ftoi.d $rD,$rADF */ - { - OR1K_INSN_LF_FTOI_D, "lf-ftoi-d", "lf.ftoi.d", 32, - { 0, { { { (1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* lf.ftoi.d $rDDI,$rAD32F */ { @@ -1809,12 +1711,7 @@ /* lf.sfeq.s $rASF,$rBSF */ { OR1K_INSN_LF_SFEQ_S, "lf-sfeq-s", "lf.sfeq.s", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } - }, -/* lf.sfeq.d $rADF,$rBDF */ - { - OR1K_INSN_LF_SFEQ_D, "lf-sfeq-d", "lf.sfeq.d", 32, - { 0, { { { (1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* lf.sfeq.d $rAD32F,$rBD32F */ { @@ -1824,12 +1721,7 @@ /* lf.sfne.s $rASF,$rBSF */ { OR1K_INSN_LF_SFNE_S, "lf-sfne-s", "lf.sfne.s", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } - }, -/* lf.sfne.d $rADF,$rBDF */ - { - OR1K_INSN_LF_SFNE_D, "lf-sfne-d", "lf.sfne.d", 32, - { 0, { { { (1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* lf.sfne.d $rAD32F,$rBD32F */ { @@ -1839,12 +1731,7 @@ /* lf.sfge.s $rASF,$rBSF */ { OR1K_INSN_LF_SFGE_S, "lf-sfge-s", "lf.sfge.s", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } - }, -/* lf.sfge.d $rADF,$rBDF */ - { - OR1K_INSN_LF_SFGE_D, "lf-sfge-d", "lf.sfge.d", 32, - { 0, { { { (1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* lf.sfge.d $rAD32F,$rBD32F */ { @@ -1854,12 +1741,7 @@ /* lf.sfgt.s $rASF,$rBSF */ { OR1K_INSN_LF_SFGT_S, "lf-sfgt-s", "lf.sfgt.s", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } - }, -/* lf.sfgt.d $rADF,$rBDF */ - { - OR1K_INSN_LF_SFGT_D, "lf-sfgt-d", "lf.sfgt.d", 32, - { 0, { { { (1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* lf.sfgt.d $rAD32F,$rBD32F */ { @@ -1869,12 +1751,7 @@ /* lf.sflt.s $rASF,$rBSF */ { OR1K_INSN_LF_SFLT_S, "lf-sflt-s", "lf.sflt.s", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } - }, -/* lf.sflt.d $rADF,$rBDF */ - { - OR1K_INSN_LF_SFLT_D, "lf-sflt-d", "lf.sflt.d", 32, - { 0, { { { (1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* lf.sflt.d $rAD32F,$rBD32F */ { @@ -1884,12 +1761,7 @@ /* lf.sfle.s $rASF,$rBSF */ { OR1K_INSN_LF_SFLE_S, "lf-sfle-s", "lf.sfle.s", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } - }, -/* lf.sfle.d $rADF,$rBDF */ - { - OR1K_INSN_LF_SFLE_D, "lf-sfle-d", "lf.sfle.d", 32, - { 0, { { { (1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* lf.sfle.d $rAD32F,$rBD32F */ { @@ -1899,12 +1771,7 @@ /* lf.sfueq.s $rASF,$rBSF */ { OR1K_INSN_LF_SFUEQ_S, "lf-sfueq-s", "lf.sfueq.s", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } - }, -/* lf.sfueq.d $rADF,$rBDF */ - { - OR1K_INSN_LF_SFUEQ_D, "lf-sfueq-d", "lf.sfueq.d", 32, - { 0, { { { (1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* lf.sfueq.d $rAD32F,$rBD32F */ { @@ -1914,12 +1781,7 @@ /* lf.sfune.s $rASF,$rBSF */ { OR1K_INSN_LF_SFUNE_S, "lf-sfune-s", "lf.sfune.s", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } - }, -/* lf.sfune.d $rADF,$rBDF */ - { - OR1K_INSN_LF_SFUNE_D, "lf-sfune-d", "lf.sfune.d", 32, - { 0, { { { (1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* lf.sfune.d $rAD32F,$rBD32F */ { @@ -1929,12 +1791,7 @@ /* lf.sfugt.s $rASF,$rBSF */ { OR1K_INSN_LF_SFUGT_S, "lf-sfugt-s", "lf.sfugt.s", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } - }, -/* lf.sfugt.d $rADF,$rBDF */ - { - OR1K_INSN_LF_SFUGT_D, "lf-sfugt-d", "lf.sfugt.d", 32, - { 0, { { { (1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* lf.sfugt.d $rAD32F,$rBD32F */ { @@ -1944,12 +1801,7 @@ /* lf.sfuge.s $rASF,$rBSF */ { OR1K_INSN_LF_SFUGE_S, "lf-sfuge-s", "lf.sfuge.s", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } - }, -/* lf.sfuge.d $rADF,$rBDF */ - { - OR1K_INSN_LF_SFUGE_D, "lf-sfuge-d", "lf.sfuge.d", 32, - { 0, { { { (1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* lf.sfuge.d $rAD32F,$rBD32F */ { @@ -1959,12 +1811,7 @@ /* lf.sfult.s $rASF,$rBSF */ { OR1K_INSN_LF_SFULT_S, "lf-sfult-s", "lf.sfult.s", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } - }, -/* lf.sfult.d $rADF,$rBDF */ - { - OR1K_INSN_LF_SFULT_D, "lf-sfult-d", "lf.sfult.d", 32, - { 0, { { { (1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* lf.sfult.d $rAD32F,$rBD32F */ { @@ -1974,12 +1821,7 @@ /* lf.sfule.s $rASF,$rBSF */ { OR1K_INSN_LF_SFULE_S, "lf-sfule-s", "lf.sfule.s", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } - }, -/* lf.sfule.d $rADF,$rBDF */ - { - OR1K_INSN_LF_SFULE_D, "lf-sfule-d", "lf.sfule.d", 32, - { 0, { { { (1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* lf.sfule.d $rAD32F,$rBD32F */ { @@ -1989,12 +1831,7 @@ /* lf.sfun.s $rASF,$rBSF */ { OR1K_INSN_LF_SFUN_S, "lf-sfun-s", "lf.sfun.s", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } - }, -/* lf.sfun.d $rADF,$rBDF */ - { - OR1K_INSN_LF_SFUN_D, "lf-sfun-d", "lf.sfun.d", 32, - { 0, { { { (1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* lf.sfun.d $rAD32F,$rBD32F */ { @@ -2004,12 +1841,7 @@ /* lf.madd.s $rDSF,$rASF,$rBSF */ { OR1K_INSN_LF_MADD_S, "lf-madd-s", "lf.madd.s", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } - }, -/* lf.madd.d $rDDF,$rADF,$rBDF */ - { - OR1K_INSN_LF_MADD_D, "lf-madd-d", "lf.madd.d", 32, - { 0, { { { (1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* lf.madd.d $rDD32F,$rAD32F,$rBD32F */ { @@ -2019,12 +1851,7 @@ /* lf.cust1.s $rASF,$rBSF */ { OR1K_INSN_LF_CUST1_S, "lf-cust1-s", "lf.cust1.s", 32, - { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND)|(1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } - }, -/* lf.cust1.d */ - { - OR1K_INSN_LF_CUST1_D, "lf-cust1-d", "lf.cust1.d", 32, - { 0, { { { (1<<MACH_OR64)|(1<<MACH_OR64ND), 0 } } } } + { 0, { { { (1<<MACH_OR32)|(1<<MACH_OR32ND), 0 } } } } }, /* lf.cust1.d */ { @@ -2243,6 +2070,7 @@ CGEN_CPU_OPEN_MACHS: bitmap of values in enum mach_attr CGEN_CPU_OPEN_BFDMACH: specify 1 mach using bfd name CGEN_CPU_OPEN_ENDIAN: specify endian choice + CGEN_CPU_OPEN_INSN_ENDIAN: specify instruction endian choice CGEN_CPU_OPEN_END: terminates arguments ??? Simultaneous multiple isas might not make sense, but it's not (yet) @@ -2256,6 +2084,7 @@ CGEN_BITSET *isas = 0; /* 0 = "unspecified" */ unsigned int machs = 0; /* 0 = "unspecified" */ enum cgen_endian endian = CGEN_ENDIAN_UNKNOWN; + enum cgen_endian insn_endian = CGEN_ENDIAN_UNKNOWN; va_list ap; if (! init_p) @@ -2290,6 +2119,9 @@ case CGEN_CPU_OPEN_ENDIAN : endian = va_arg (ap, enum cgen_endian); break; + case CGEN_CPU_OPEN_INSN_ENDIAN : + insn_endian = va_arg (ap, enum cgen_endian); + break; default : opcodes_error_handler (/* xgettext:c-format */ @@ -2319,11 +2151,8 @@ cd->isas = cgen_bitset_copy (isas); cd->machs = machs; cd->endian = endian; - /* FIXME: for the sparc case we can determine insn-endianness statically. - The worry here is where both data and insn endian can be independently - chosen, in which case this function will need another argument. - Actually, will want to allow for more arguments in the future anyway. */ - cd->insn_endian = endian; + cd->insn_endian + = (insn_endian == CGEN_ENDIAN_UNKNOWN ? endian : insn_endian); /* Table (re)builder. */ cd->rebuild_tables = or1k_cgen_rebuild_tables; @@ -2373,18 +2202,10 @@ regfree (CGEN_INSN_RX (insns)); } - if (cd->macro_insn_table.init_entries) - free ((CGEN_INSN *) cd->macro_insn_table.init_entries); - - if (cd->insn_table.init_entries) - free ((CGEN_INSN *) cd->insn_table.init_entries); - - if (cd->hw_table.entries) - free ((CGEN_HW_ENTRY *) cd->hw_table.entries); - - if (cd->operand_table.entries) - free ((CGEN_HW_ENTRY *) cd->operand_table.entries); - + free ((CGEN_INSN *) cd->macro_insn_table.init_entries); + free ((CGEN_INSN *) cd->insn_table.init_entries); + free ((CGEN_HW_ENTRY *) cd->hw_table.entries); + free ((CGEN_HW_ENTRY *) cd->operand_table.entries); free (cd); } diff -Nru gdb-9.1/opcodes/or1k-desc.h gdb-10.2/opcodes/or1k-desc.h --- gdb-9.1/opcodes/or1k-desc.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/or1k-desc.h 2021-04-25 04:06:26.000000000 +0000 @@ -3,7 +3,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright (C) 1996-2019 Free Software Foundation, Inc. +Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of the GNU Binutils and/or GDB, the GNU debugger. @@ -38,7 +38,6 @@ /* Selected cpu families. */ #define HAVE_CPU_OR1K32BF -#define HAVE_CPU_OR1K64BF #define CGEN_INSN_LSB0_P 1 @@ -359,8 +358,7 @@ /* Enum declaration for machine type selection. */ typedef enum mach_attr { - MACH_BASE, MACH_OR32, MACH_OR32ND, MACH_OR64 - , MACH_OR64ND, MACH_MAX + MACH_BASE, MACH_OR32, MACH_OR32ND, MACH_MAX } MACH_ATTR; /* Enum declaration for instruction set selection. */ @@ -435,166 +433,166 @@ typedef enum cgen_hw_type { HW_H_MEMORY, HW_H_SINT, HW_H_UINT, HW_H_ADDR , HW_H_IADDR, HW_H_PC, HW_H_SPR, HW_H_GPR - , HW_H_FSR, HW_H_FDR, HW_H_FD32R, HW_H_I64R - , HW_H_SYS_VR, HW_H_SYS_UPR, HW_H_SYS_CPUCFGR, HW_H_SYS_DMMUCFGR - , HW_H_SYS_IMMUCFGR, HW_H_SYS_DCCFGR, HW_H_SYS_ICCFGR, HW_H_SYS_DCFGR - , HW_H_SYS_PCCFGR, HW_H_SYS_NPC, HW_H_SYS_SR, HW_H_SYS_PPC - , HW_H_SYS_FPCSR, HW_H_SYS_EPCR0, HW_H_SYS_EPCR1, HW_H_SYS_EPCR2 - , HW_H_SYS_EPCR3, HW_H_SYS_EPCR4, HW_H_SYS_EPCR5, HW_H_SYS_EPCR6 - , HW_H_SYS_EPCR7, HW_H_SYS_EPCR8, HW_H_SYS_EPCR9, HW_H_SYS_EPCR10 - , HW_H_SYS_EPCR11, HW_H_SYS_EPCR12, HW_H_SYS_EPCR13, HW_H_SYS_EPCR14 - , HW_H_SYS_EPCR15, HW_H_SYS_EEAR0, HW_H_SYS_EEAR1, HW_H_SYS_EEAR2 - , HW_H_SYS_EEAR3, HW_H_SYS_EEAR4, HW_H_SYS_EEAR5, HW_H_SYS_EEAR6 - , HW_H_SYS_EEAR7, HW_H_SYS_EEAR8, HW_H_SYS_EEAR9, HW_H_SYS_EEAR10 - , HW_H_SYS_EEAR11, HW_H_SYS_EEAR12, HW_H_SYS_EEAR13, HW_H_SYS_EEAR14 - , HW_H_SYS_EEAR15, HW_H_SYS_ESR0, HW_H_SYS_ESR1, HW_H_SYS_ESR2 - , HW_H_SYS_ESR3, HW_H_SYS_ESR4, HW_H_SYS_ESR5, HW_H_SYS_ESR6 - , HW_H_SYS_ESR7, HW_H_SYS_ESR8, HW_H_SYS_ESR9, HW_H_SYS_ESR10 - , HW_H_SYS_ESR11, HW_H_SYS_ESR12, HW_H_SYS_ESR13, HW_H_SYS_ESR14 - , HW_H_SYS_ESR15, HW_H_SYS_GPR0, HW_H_SYS_GPR1, HW_H_SYS_GPR2 - , HW_H_SYS_GPR3, HW_H_SYS_GPR4, HW_H_SYS_GPR5, HW_H_SYS_GPR6 - , HW_H_SYS_GPR7, HW_H_SYS_GPR8, HW_H_SYS_GPR9, HW_H_SYS_GPR10 - , HW_H_SYS_GPR11, HW_H_SYS_GPR12, HW_H_SYS_GPR13, HW_H_SYS_GPR14 - , HW_H_SYS_GPR15, HW_H_SYS_GPR16, HW_H_SYS_GPR17, HW_H_SYS_GPR18 - , HW_H_SYS_GPR19, HW_H_SYS_GPR20, HW_H_SYS_GPR21, HW_H_SYS_GPR22 - , HW_H_SYS_GPR23, HW_H_SYS_GPR24, HW_H_SYS_GPR25, HW_H_SYS_GPR26 - , HW_H_SYS_GPR27, HW_H_SYS_GPR28, HW_H_SYS_GPR29, HW_H_SYS_GPR30 - , HW_H_SYS_GPR31, HW_H_SYS_GPR32, HW_H_SYS_GPR33, HW_H_SYS_GPR34 - , HW_H_SYS_GPR35, HW_H_SYS_GPR36, HW_H_SYS_GPR37, HW_H_SYS_GPR38 - , HW_H_SYS_GPR39, HW_H_SYS_GPR40, HW_H_SYS_GPR41, HW_H_SYS_GPR42 - , HW_H_SYS_GPR43, HW_H_SYS_GPR44, HW_H_SYS_GPR45, HW_H_SYS_GPR46 - , HW_H_SYS_GPR47, HW_H_SYS_GPR48, HW_H_SYS_GPR49, HW_H_SYS_GPR50 - , HW_H_SYS_GPR51, HW_H_SYS_GPR52, HW_H_SYS_GPR53, HW_H_SYS_GPR54 - , HW_H_SYS_GPR55, HW_H_SYS_GPR56, HW_H_SYS_GPR57, HW_H_SYS_GPR58 - , HW_H_SYS_GPR59, HW_H_SYS_GPR60, HW_H_SYS_GPR61, HW_H_SYS_GPR62 - , HW_H_SYS_GPR63, HW_H_SYS_GPR64, HW_H_SYS_GPR65, HW_H_SYS_GPR66 - , HW_H_SYS_GPR67, HW_H_SYS_GPR68, HW_H_SYS_GPR69, HW_H_SYS_GPR70 - , HW_H_SYS_GPR71, HW_H_SYS_GPR72, HW_H_SYS_GPR73, HW_H_SYS_GPR74 - , HW_H_SYS_GPR75, HW_H_SYS_GPR76, HW_H_SYS_GPR77, HW_H_SYS_GPR78 - , HW_H_SYS_GPR79, HW_H_SYS_GPR80, HW_H_SYS_GPR81, HW_H_SYS_GPR82 - , HW_H_SYS_GPR83, HW_H_SYS_GPR84, HW_H_SYS_GPR85, HW_H_SYS_GPR86 - , HW_H_SYS_GPR87, HW_H_SYS_GPR88, HW_H_SYS_GPR89, HW_H_SYS_GPR90 - , HW_H_SYS_GPR91, HW_H_SYS_GPR92, HW_H_SYS_GPR93, HW_H_SYS_GPR94 - , HW_H_SYS_GPR95, HW_H_SYS_GPR96, HW_H_SYS_GPR97, HW_H_SYS_GPR98 - , HW_H_SYS_GPR99, HW_H_SYS_GPR100, HW_H_SYS_GPR101, HW_H_SYS_GPR102 - , HW_H_SYS_GPR103, HW_H_SYS_GPR104, HW_H_SYS_GPR105, HW_H_SYS_GPR106 - , HW_H_SYS_GPR107, HW_H_SYS_GPR108, HW_H_SYS_GPR109, HW_H_SYS_GPR110 - , HW_H_SYS_GPR111, HW_H_SYS_GPR112, HW_H_SYS_GPR113, HW_H_SYS_GPR114 - , HW_H_SYS_GPR115, HW_H_SYS_GPR116, HW_H_SYS_GPR117, HW_H_SYS_GPR118 - , HW_H_SYS_GPR119, HW_H_SYS_GPR120, HW_H_SYS_GPR121, HW_H_SYS_GPR122 - , HW_H_SYS_GPR123, HW_H_SYS_GPR124, HW_H_SYS_GPR125, HW_H_SYS_GPR126 - , HW_H_SYS_GPR127, HW_H_SYS_GPR128, HW_H_SYS_GPR129, HW_H_SYS_GPR130 - , HW_H_SYS_GPR131, HW_H_SYS_GPR132, HW_H_SYS_GPR133, HW_H_SYS_GPR134 - , HW_H_SYS_GPR135, HW_H_SYS_GPR136, HW_H_SYS_GPR137, HW_H_SYS_GPR138 - , HW_H_SYS_GPR139, HW_H_SYS_GPR140, HW_H_SYS_GPR141, HW_H_SYS_GPR142 - , HW_H_SYS_GPR143, HW_H_SYS_GPR144, HW_H_SYS_GPR145, HW_H_SYS_GPR146 - , HW_H_SYS_GPR147, HW_H_SYS_GPR148, HW_H_SYS_GPR149, HW_H_SYS_GPR150 - , HW_H_SYS_GPR151, HW_H_SYS_GPR152, HW_H_SYS_GPR153, HW_H_SYS_GPR154 - , HW_H_SYS_GPR155, HW_H_SYS_GPR156, HW_H_SYS_GPR157, HW_H_SYS_GPR158 - , HW_H_SYS_GPR159, HW_H_SYS_GPR160, HW_H_SYS_GPR161, HW_H_SYS_GPR162 - , HW_H_SYS_GPR163, HW_H_SYS_GPR164, HW_H_SYS_GPR165, HW_H_SYS_GPR166 - , HW_H_SYS_GPR167, HW_H_SYS_GPR168, HW_H_SYS_GPR169, HW_H_SYS_GPR170 - , HW_H_SYS_GPR171, HW_H_SYS_GPR172, HW_H_SYS_GPR173, HW_H_SYS_GPR174 - , HW_H_SYS_GPR175, HW_H_SYS_GPR176, HW_H_SYS_GPR177, HW_H_SYS_GPR178 - , HW_H_SYS_GPR179, HW_H_SYS_GPR180, HW_H_SYS_GPR181, HW_H_SYS_GPR182 - , HW_H_SYS_GPR183, HW_H_SYS_GPR184, HW_H_SYS_GPR185, HW_H_SYS_GPR186 - , HW_H_SYS_GPR187, HW_H_SYS_GPR188, HW_H_SYS_GPR189, HW_H_SYS_GPR190 - , HW_H_SYS_GPR191, HW_H_SYS_GPR192, HW_H_SYS_GPR193, HW_H_SYS_GPR194 - , HW_H_SYS_GPR195, HW_H_SYS_GPR196, HW_H_SYS_GPR197, HW_H_SYS_GPR198 - , HW_H_SYS_GPR199, HW_H_SYS_GPR200, HW_H_SYS_GPR201, HW_H_SYS_GPR202 - , HW_H_SYS_GPR203, HW_H_SYS_GPR204, HW_H_SYS_GPR205, HW_H_SYS_GPR206 - , HW_H_SYS_GPR207, HW_H_SYS_GPR208, HW_H_SYS_GPR209, HW_H_SYS_GPR210 - , HW_H_SYS_GPR211, HW_H_SYS_GPR212, HW_H_SYS_GPR213, HW_H_SYS_GPR214 - , HW_H_SYS_GPR215, HW_H_SYS_GPR216, HW_H_SYS_GPR217, HW_H_SYS_GPR218 - , HW_H_SYS_GPR219, HW_H_SYS_GPR220, HW_H_SYS_GPR221, HW_H_SYS_GPR222 - , HW_H_SYS_GPR223, HW_H_SYS_GPR224, HW_H_SYS_GPR225, HW_H_SYS_GPR226 - , HW_H_SYS_GPR227, HW_H_SYS_GPR228, HW_H_SYS_GPR229, HW_H_SYS_GPR230 - , HW_H_SYS_GPR231, HW_H_SYS_GPR232, HW_H_SYS_GPR233, HW_H_SYS_GPR234 - , HW_H_SYS_GPR235, HW_H_SYS_GPR236, HW_H_SYS_GPR237, HW_H_SYS_GPR238 - , HW_H_SYS_GPR239, HW_H_SYS_GPR240, HW_H_SYS_GPR241, HW_H_SYS_GPR242 - , HW_H_SYS_GPR243, HW_H_SYS_GPR244, HW_H_SYS_GPR245, HW_H_SYS_GPR246 - , HW_H_SYS_GPR247, HW_H_SYS_GPR248, HW_H_SYS_GPR249, HW_H_SYS_GPR250 - , HW_H_SYS_GPR251, HW_H_SYS_GPR252, HW_H_SYS_GPR253, HW_H_SYS_GPR254 - , HW_H_SYS_GPR255, HW_H_SYS_GPR256, HW_H_SYS_GPR257, HW_H_SYS_GPR258 - , HW_H_SYS_GPR259, HW_H_SYS_GPR260, HW_H_SYS_GPR261, HW_H_SYS_GPR262 - , HW_H_SYS_GPR263, HW_H_SYS_GPR264, HW_H_SYS_GPR265, HW_H_SYS_GPR266 - , HW_H_SYS_GPR267, HW_H_SYS_GPR268, HW_H_SYS_GPR269, HW_H_SYS_GPR270 - , HW_H_SYS_GPR271, HW_H_SYS_GPR272, HW_H_SYS_GPR273, HW_H_SYS_GPR274 - , HW_H_SYS_GPR275, HW_H_SYS_GPR276, HW_H_SYS_GPR277, HW_H_SYS_GPR278 - , HW_H_SYS_GPR279, HW_H_SYS_GPR280, HW_H_SYS_GPR281, HW_H_SYS_GPR282 - , HW_H_SYS_GPR283, HW_H_SYS_GPR284, HW_H_SYS_GPR285, HW_H_SYS_GPR286 - , HW_H_SYS_GPR287, HW_H_SYS_GPR288, HW_H_SYS_GPR289, HW_H_SYS_GPR290 - , HW_H_SYS_GPR291, HW_H_SYS_GPR292, HW_H_SYS_GPR293, HW_H_SYS_GPR294 - , HW_H_SYS_GPR295, HW_H_SYS_GPR296, HW_H_SYS_GPR297, HW_H_SYS_GPR298 - , HW_H_SYS_GPR299, HW_H_SYS_GPR300, HW_H_SYS_GPR301, HW_H_SYS_GPR302 - , HW_H_SYS_GPR303, HW_H_SYS_GPR304, HW_H_SYS_GPR305, HW_H_SYS_GPR306 - , HW_H_SYS_GPR307, HW_H_SYS_GPR308, HW_H_SYS_GPR309, HW_H_SYS_GPR310 - , HW_H_SYS_GPR311, HW_H_SYS_GPR312, HW_H_SYS_GPR313, HW_H_SYS_GPR314 - , HW_H_SYS_GPR315, HW_H_SYS_GPR316, HW_H_SYS_GPR317, HW_H_SYS_GPR318 - , HW_H_SYS_GPR319, HW_H_SYS_GPR320, HW_H_SYS_GPR321, HW_H_SYS_GPR322 - , HW_H_SYS_GPR323, HW_H_SYS_GPR324, HW_H_SYS_GPR325, HW_H_SYS_GPR326 - , HW_H_SYS_GPR327, HW_H_SYS_GPR328, HW_H_SYS_GPR329, HW_H_SYS_GPR330 - , HW_H_SYS_GPR331, HW_H_SYS_GPR332, HW_H_SYS_GPR333, HW_H_SYS_GPR334 - , HW_H_SYS_GPR335, HW_H_SYS_GPR336, HW_H_SYS_GPR337, HW_H_SYS_GPR338 - , HW_H_SYS_GPR339, HW_H_SYS_GPR340, HW_H_SYS_GPR341, HW_H_SYS_GPR342 - , HW_H_SYS_GPR343, HW_H_SYS_GPR344, HW_H_SYS_GPR345, HW_H_SYS_GPR346 - , HW_H_SYS_GPR347, HW_H_SYS_GPR348, HW_H_SYS_GPR349, HW_H_SYS_GPR350 - , HW_H_SYS_GPR351, HW_H_SYS_GPR352, HW_H_SYS_GPR353, HW_H_SYS_GPR354 - , HW_H_SYS_GPR355, HW_H_SYS_GPR356, HW_H_SYS_GPR357, HW_H_SYS_GPR358 - , HW_H_SYS_GPR359, HW_H_SYS_GPR360, HW_H_SYS_GPR361, HW_H_SYS_GPR362 - , HW_H_SYS_GPR363, HW_H_SYS_GPR364, HW_H_SYS_GPR365, HW_H_SYS_GPR366 - , HW_H_SYS_GPR367, HW_H_SYS_GPR368, HW_H_SYS_GPR369, HW_H_SYS_GPR370 - , HW_H_SYS_GPR371, HW_H_SYS_GPR372, HW_H_SYS_GPR373, HW_H_SYS_GPR374 - , HW_H_SYS_GPR375, HW_H_SYS_GPR376, HW_H_SYS_GPR377, HW_H_SYS_GPR378 - , HW_H_SYS_GPR379, HW_H_SYS_GPR380, HW_H_SYS_GPR381, HW_H_SYS_GPR382 - , HW_H_SYS_GPR383, HW_H_SYS_GPR384, HW_H_SYS_GPR385, HW_H_SYS_GPR386 - , HW_H_SYS_GPR387, HW_H_SYS_GPR388, HW_H_SYS_GPR389, HW_H_SYS_GPR390 - , HW_H_SYS_GPR391, HW_H_SYS_GPR392, HW_H_SYS_GPR393, HW_H_SYS_GPR394 - , HW_H_SYS_GPR395, HW_H_SYS_GPR396, HW_H_SYS_GPR397, HW_H_SYS_GPR398 - , HW_H_SYS_GPR399, HW_H_SYS_GPR400, HW_H_SYS_GPR401, HW_H_SYS_GPR402 - , HW_H_SYS_GPR403, HW_H_SYS_GPR404, HW_H_SYS_GPR405, HW_H_SYS_GPR406 - , HW_H_SYS_GPR407, HW_H_SYS_GPR408, HW_H_SYS_GPR409, HW_H_SYS_GPR410 - , HW_H_SYS_GPR411, HW_H_SYS_GPR412, HW_H_SYS_GPR413, HW_H_SYS_GPR414 - , HW_H_SYS_GPR415, HW_H_SYS_GPR416, HW_H_SYS_GPR417, HW_H_SYS_GPR418 - , HW_H_SYS_GPR419, HW_H_SYS_GPR420, HW_H_SYS_GPR421, HW_H_SYS_GPR422 - , HW_H_SYS_GPR423, HW_H_SYS_GPR424, HW_H_SYS_GPR425, HW_H_SYS_GPR426 - , HW_H_SYS_GPR427, HW_H_SYS_GPR428, HW_H_SYS_GPR429, HW_H_SYS_GPR430 - , HW_H_SYS_GPR431, HW_H_SYS_GPR432, HW_H_SYS_GPR433, HW_H_SYS_GPR434 - , HW_H_SYS_GPR435, HW_H_SYS_GPR436, HW_H_SYS_GPR437, HW_H_SYS_GPR438 - , HW_H_SYS_GPR439, HW_H_SYS_GPR440, HW_H_SYS_GPR441, HW_H_SYS_GPR442 - , HW_H_SYS_GPR443, HW_H_SYS_GPR444, HW_H_SYS_GPR445, HW_H_SYS_GPR446 - , HW_H_SYS_GPR447, HW_H_SYS_GPR448, HW_H_SYS_GPR449, HW_H_SYS_GPR450 - , HW_H_SYS_GPR451, HW_H_SYS_GPR452, HW_H_SYS_GPR453, HW_H_SYS_GPR454 - , HW_H_SYS_GPR455, HW_H_SYS_GPR456, HW_H_SYS_GPR457, HW_H_SYS_GPR458 - , HW_H_SYS_GPR459, HW_H_SYS_GPR460, HW_H_SYS_GPR461, HW_H_SYS_GPR462 - , HW_H_SYS_GPR463, HW_H_SYS_GPR464, HW_H_SYS_GPR465, HW_H_SYS_GPR466 - , HW_H_SYS_GPR467, HW_H_SYS_GPR468, HW_H_SYS_GPR469, HW_H_SYS_GPR470 - , HW_H_SYS_GPR471, HW_H_SYS_GPR472, HW_H_SYS_GPR473, HW_H_SYS_GPR474 - , HW_H_SYS_GPR475, HW_H_SYS_GPR476, HW_H_SYS_GPR477, HW_H_SYS_GPR478 - , HW_H_SYS_GPR479, HW_H_SYS_GPR480, HW_H_SYS_GPR481, HW_H_SYS_GPR482 - , HW_H_SYS_GPR483, HW_H_SYS_GPR484, HW_H_SYS_GPR485, HW_H_SYS_GPR486 - , HW_H_SYS_GPR487, HW_H_SYS_GPR488, HW_H_SYS_GPR489, HW_H_SYS_GPR490 - , HW_H_SYS_GPR491, HW_H_SYS_GPR492, HW_H_SYS_GPR493, HW_H_SYS_GPR494 - , HW_H_SYS_GPR495, HW_H_SYS_GPR496, HW_H_SYS_GPR497, HW_H_SYS_GPR498 - , HW_H_SYS_GPR499, HW_H_SYS_GPR500, HW_H_SYS_GPR501, HW_H_SYS_GPR502 - , HW_H_SYS_GPR503, HW_H_SYS_GPR504, HW_H_SYS_GPR505, HW_H_SYS_GPR506 - , HW_H_SYS_GPR507, HW_H_SYS_GPR508, HW_H_SYS_GPR509, HW_H_SYS_GPR510 - , HW_H_SYS_GPR511, HW_H_MAC_MACLO, HW_H_MAC_MACHI, HW_H_TICK_TTMR - , HW_H_SYS_VR_REV, HW_H_SYS_VR_CFG, HW_H_SYS_VR_VER, HW_H_SYS_UPR_UP - , HW_H_SYS_UPR_DCP, HW_H_SYS_UPR_ICP, HW_H_SYS_UPR_DMP, HW_H_SYS_UPR_MP - , HW_H_SYS_UPR_IMP, HW_H_SYS_UPR_DUP, HW_H_SYS_UPR_PCUP, HW_H_SYS_UPR_PICP - , HW_H_SYS_UPR_PMP, HW_H_SYS_UPR_TTP, HW_H_SYS_UPR_CUP, HW_H_SYS_CPUCFGR_NSGR - , HW_H_SYS_CPUCFGR_CGF, HW_H_SYS_CPUCFGR_OB32S, HW_H_SYS_CPUCFGR_OB64S, HW_H_SYS_CPUCFGR_OF32S - , HW_H_SYS_CPUCFGR_OF64S, HW_H_SYS_CPUCFGR_OV64S, HW_H_SYS_CPUCFGR_ND, HW_H_SYS_SR_SM - , HW_H_SYS_SR_TEE, HW_H_SYS_SR_IEE, HW_H_SYS_SR_DCE, HW_H_SYS_SR_ICE - , HW_H_SYS_SR_DME, HW_H_SYS_SR_IME, HW_H_SYS_SR_LEE, HW_H_SYS_SR_CE - , HW_H_SYS_SR_F, HW_H_SYS_SR_CY, HW_H_SYS_SR_OV, HW_H_SYS_SR_OVE - , HW_H_SYS_SR_DSX, HW_H_SYS_SR_EPH, HW_H_SYS_SR_FO, HW_H_SYS_SR_SUMRA - , HW_H_SYS_SR_CID, HW_H_SYS_FPCSR_FPEE, HW_H_SYS_FPCSR_RM, HW_H_SYS_FPCSR_OVF - , HW_H_SYS_FPCSR_UNF, HW_H_SYS_FPCSR_SNF, HW_H_SYS_FPCSR_QNF, HW_H_SYS_FPCSR_ZF - , HW_H_SYS_FPCSR_IXF, HW_H_SYS_FPCSR_IVF, HW_H_SYS_FPCSR_INF, HW_H_SYS_FPCSR_DZF - , HW_H_SIMM16, HW_H_UIMM16, HW_H_UIMM6, HW_H_ATOMIC_RESERVE - , HW_H_ATOMIC_ADDRESS, HW_H_ROFF1, HW_MAX + , HW_H_FSR, HW_H_FD32R, HW_H_I64R, HW_H_SYS_VR + , HW_H_SYS_UPR, HW_H_SYS_CPUCFGR, HW_H_SYS_DMMUCFGR, HW_H_SYS_IMMUCFGR + , HW_H_SYS_DCCFGR, HW_H_SYS_ICCFGR, HW_H_SYS_DCFGR, HW_H_SYS_PCCFGR + , HW_H_SYS_NPC, HW_H_SYS_SR, HW_H_SYS_PPC, HW_H_SYS_FPCSR + , HW_H_SYS_EPCR0, HW_H_SYS_EPCR1, HW_H_SYS_EPCR2, HW_H_SYS_EPCR3 + , HW_H_SYS_EPCR4, HW_H_SYS_EPCR5, HW_H_SYS_EPCR6, HW_H_SYS_EPCR7 + , HW_H_SYS_EPCR8, HW_H_SYS_EPCR9, HW_H_SYS_EPCR10, HW_H_SYS_EPCR11 + , HW_H_SYS_EPCR12, HW_H_SYS_EPCR13, HW_H_SYS_EPCR14, HW_H_SYS_EPCR15 + , HW_H_SYS_EEAR0, HW_H_SYS_EEAR1, HW_H_SYS_EEAR2, HW_H_SYS_EEAR3 + , HW_H_SYS_EEAR4, HW_H_SYS_EEAR5, HW_H_SYS_EEAR6, HW_H_SYS_EEAR7 + , HW_H_SYS_EEAR8, HW_H_SYS_EEAR9, HW_H_SYS_EEAR10, HW_H_SYS_EEAR11 + , HW_H_SYS_EEAR12, HW_H_SYS_EEAR13, HW_H_SYS_EEAR14, HW_H_SYS_EEAR15 + , HW_H_SYS_ESR0, HW_H_SYS_ESR1, HW_H_SYS_ESR2, HW_H_SYS_ESR3 + , HW_H_SYS_ESR4, HW_H_SYS_ESR5, HW_H_SYS_ESR6, HW_H_SYS_ESR7 + , HW_H_SYS_ESR8, HW_H_SYS_ESR9, HW_H_SYS_ESR10, HW_H_SYS_ESR11 + , HW_H_SYS_ESR12, HW_H_SYS_ESR13, HW_H_SYS_ESR14, HW_H_SYS_ESR15 + , HW_H_SYS_GPR0, HW_H_SYS_GPR1, HW_H_SYS_GPR2, HW_H_SYS_GPR3 + , HW_H_SYS_GPR4, HW_H_SYS_GPR5, HW_H_SYS_GPR6, HW_H_SYS_GPR7 + , HW_H_SYS_GPR8, HW_H_SYS_GPR9, HW_H_SYS_GPR10, HW_H_SYS_GPR11 + , HW_H_SYS_GPR12, HW_H_SYS_GPR13, HW_H_SYS_GPR14, HW_H_SYS_GPR15 + , HW_H_SYS_GPR16, HW_H_SYS_GPR17, HW_H_SYS_GPR18, HW_H_SYS_GPR19 + , HW_H_SYS_GPR20, HW_H_SYS_GPR21, HW_H_SYS_GPR22, HW_H_SYS_GPR23 + , HW_H_SYS_GPR24, HW_H_SYS_GPR25, HW_H_SYS_GPR26, HW_H_SYS_GPR27 + , HW_H_SYS_GPR28, HW_H_SYS_GPR29, HW_H_SYS_GPR30, HW_H_SYS_GPR31 + , HW_H_SYS_GPR32, HW_H_SYS_GPR33, HW_H_SYS_GPR34, HW_H_SYS_GPR35 + , HW_H_SYS_GPR36, HW_H_SYS_GPR37, HW_H_SYS_GPR38, HW_H_SYS_GPR39 + , HW_H_SYS_GPR40, HW_H_SYS_GPR41, HW_H_SYS_GPR42, HW_H_SYS_GPR43 + , HW_H_SYS_GPR44, HW_H_SYS_GPR45, HW_H_SYS_GPR46, HW_H_SYS_GPR47 + , HW_H_SYS_GPR48, HW_H_SYS_GPR49, HW_H_SYS_GPR50, HW_H_SYS_GPR51 + , HW_H_SYS_GPR52, HW_H_SYS_GPR53, HW_H_SYS_GPR54, HW_H_SYS_GPR55 + , HW_H_SYS_GPR56, HW_H_SYS_GPR57, HW_H_SYS_GPR58, HW_H_SYS_GPR59 + , HW_H_SYS_GPR60, HW_H_SYS_GPR61, HW_H_SYS_GPR62, HW_H_SYS_GPR63 + , HW_H_SYS_GPR64, HW_H_SYS_GPR65, HW_H_SYS_GPR66, HW_H_SYS_GPR67 + , HW_H_SYS_GPR68, HW_H_SYS_GPR69, HW_H_SYS_GPR70, HW_H_SYS_GPR71 + , HW_H_SYS_GPR72, HW_H_SYS_GPR73, HW_H_SYS_GPR74, HW_H_SYS_GPR75 + , HW_H_SYS_GPR76, HW_H_SYS_GPR77, HW_H_SYS_GPR78, HW_H_SYS_GPR79 + , HW_H_SYS_GPR80, HW_H_SYS_GPR81, HW_H_SYS_GPR82, HW_H_SYS_GPR83 + , HW_H_SYS_GPR84, HW_H_SYS_GPR85, HW_H_SYS_GPR86, HW_H_SYS_GPR87 + , HW_H_SYS_GPR88, HW_H_SYS_GPR89, HW_H_SYS_GPR90, HW_H_SYS_GPR91 + , HW_H_SYS_GPR92, HW_H_SYS_GPR93, HW_H_SYS_GPR94, HW_H_SYS_GPR95 + , HW_H_SYS_GPR96, HW_H_SYS_GPR97, HW_H_SYS_GPR98, HW_H_SYS_GPR99 + , HW_H_SYS_GPR100, HW_H_SYS_GPR101, HW_H_SYS_GPR102, HW_H_SYS_GPR103 + , HW_H_SYS_GPR104, HW_H_SYS_GPR105, HW_H_SYS_GPR106, HW_H_SYS_GPR107 + , HW_H_SYS_GPR108, HW_H_SYS_GPR109, HW_H_SYS_GPR110, HW_H_SYS_GPR111 + , HW_H_SYS_GPR112, HW_H_SYS_GPR113, HW_H_SYS_GPR114, HW_H_SYS_GPR115 + , HW_H_SYS_GPR116, HW_H_SYS_GPR117, HW_H_SYS_GPR118, HW_H_SYS_GPR119 + , HW_H_SYS_GPR120, HW_H_SYS_GPR121, HW_H_SYS_GPR122, HW_H_SYS_GPR123 + , HW_H_SYS_GPR124, HW_H_SYS_GPR125, HW_H_SYS_GPR126, HW_H_SYS_GPR127 + , HW_H_SYS_GPR128, HW_H_SYS_GPR129, HW_H_SYS_GPR130, HW_H_SYS_GPR131 + , HW_H_SYS_GPR132, HW_H_SYS_GPR133, HW_H_SYS_GPR134, HW_H_SYS_GPR135 + , HW_H_SYS_GPR136, HW_H_SYS_GPR137, HW_H_SYS_GPR138, HW_H_SYS_GPR139 + , HW_H_SYS_GPR140, HW_H_SYS_GPR141, HW_H_SYS_GPR142, HW_H_SYS_GPR143 + , HW_H_SYS_GPR144, HW_H_SYS_GPR145, HW_H_SYS_GPR146, HW_H_SYS_GPR147 + , HW_H_SYS_GPR148, HW_H_SYS_GPR149, HW_H_SYS_GPR150, HW_H_SYS_GPR151 + , HW_H_SYS_GPR152, HW_H_SYS_GPR153, HW_H_SYS_GPR154, HW_H_SYS_GPR155 + , HW_H_SYS_GPR156, HW_H_SYS_GPR157, HW_H_SYS_GPR158, HW_H_SYS_GPR159 + , HW_H_SYS_GPR160, HW_H_SYS_GPR161, HW_H_SYS_GPR162, HW_H_SYS_GPR163 + , HW_H_SYS_GPR164, HW_H_SYS_GPR165, HW_H_SYS_GPR166, HW_H_SYS_GPR167 + , HW_H_SYS_GPR168, HW_H_SYS_GPR169, HW_H_SYS_GPR170, HW_H_SYS_GPR171 + , HW_H_SYS_GPR172, HW_H_SYS_GPR173, HW_H_SYS_GPR174, HW_H_SYS_GPR175 + , HW_H_SYS_GPR176, HW_H_SYS_GPR177, HW_H_SYS_GPR178, HW_H_SYS_GPR179 + , HW_H_SYS_GPR180, HW_H_SYS_GPR181, HW_H_SYS_GPR182, HW_H_SYS_GPR183 + , HW_H_SYS_GPR184, HW_H_SYS_GPR185, HW_H_SYS_GPR186, HW_H_SYS_GPR187 + , HW_H_SYS_GPR188, HW_H_SYS_GPR189, HW_H_SYS_GPR190, HW_H_SYS_GPR191 + , HW_H_SYS_GPR192, HW_H_SYS_GPR193, HW_H_SYS_GPR194, HW_H_SYS_GPR195 + , HW_H_SYS_GPR196, HW_H_SYS_GPR197, HW_H_SYS_GPR198, HW_H_SYS_GPR199 + , HW_H_SYS_GPR200, HW_H_SYS_GPR201, HW_H_SYS_GPR202, HW_H_SYS_GPR203 + , HW_H_SYS_GPR204, HW_H_SYS_GPR205, HW_H_SYS_GPR206, HW_H_SYS_GPR207 + , HW_H_SYS_GPR208, HW_H_SYS_GPR209, HW_H_SYS_GPR210, HW_H_SYS_GPR211 + , HW_H_SYS_GPR212, HW_H_SYS_GPR213, HW_H_SYS_GPR214, HW_H_SYS_GPR215 + , HW_H_SYS_GPR216, HW_H_SYS_GPR217, HW_H_SYS_GPR218, HW_H_SYS_GPR219 + , HW_H_SYS_GPR220, HW_H_SYS_GPR221, HW_H_SYS_GPR222, HW_H_SYS_GPR223 + , HW_H_SYS_GPR224, HW_H_SYS_GPR225, HW_H_SYS_GPR226, HW_H_SYS_GPR227 + , HW_H_SYS_GPR228, HW_H_SYS_GPR229, HW_H_SYS_GPR230, HW_H_SYS_GPR231 + , HW_H_SYS_GPR232, HW_H_SYS_GPR233, HW_H_SYS_GPR234, HW_H_SYS_GPR235 + , HW_H_SYS_GPR236, HW_H_SYS_GPR237, HW_H_SYS_GPR238, HW_H_SYS_GPR239 + , HW_H_SYS_GPR240, HW_H_SYS_GPR241, HW_H_SYS_GPR242, HW_H_SYS_GPR243 + , HW_H_SYS_GPR244, HW_H_SYS_GPR245, HW_H_SYS_GPR246, HW_H_SYS_GPR247 + , HW_H_SYS_GPR248, HW_H_SYS_GPR249, HW_H_SYS_GPR250, HW_H_SYS_GPR251 + , HW_H_SYS_GPR252, HW_H_SYS_GPR253, HW_H_SYS_GPR254, HW_H_SYS_GPR255 + , HW_H_SYS_GPR256, HW_H_SYS_GPR257, HW_H_SYS_GPR258, HW_H_SYS_GPR259 + , HW_H_SYS_GPR260, HW_H_SYS_GPR261, HW_H_SYS_GPR262, HW_H_SYS_GPR263 + , HW_H_SYS_GPR264, HW_H_SYS_GPR265, HW_H_SYS_GPR266, HW_H_SYS_GPR267 + , HW_H_SYS_GPR268, HW_H_SYS_GPR269, HW_H_SYS_GPR270, HW_H_SYS_GPR271 + , HW_H_SYS_GPR272, HW_H_SYS_GPR273, HW_H_SYS_GPR274, HW_H_SYS_GPR275 + , HW_H_SYS_GPR276, HW_H_SYS_GPR277, HW_H_SYS_GPR278, HW_H_SYS_GPR279 + , HW_H_SYS_GPR280, HW_H_SYS_GPR281, HW_H_SYS_GPR282, HW_H_SYS_GPR283 + , HW_H_SYS_GPR284, HW_H_SYS_GPR285, HW_H_SYS_GPR286, HW_H_SYS_GPR287 + , HW_H_SYS_GPR288, HW_H_SYS_GPR289, HW_H_SYS_GPR290, HW_H_SYS_GPR291 + , HW_H_SYS_GPR292, HW_H_SYS_GPR293, HW_H_SYS_GPR294, HW_H_SYS_GPR295 + , HW_H_SYS_GPR296, HW_H_SYS_GPR297, HW_H_SYS_GPR298, HW_H_SYS_GPR299 + , HW_H_SYS_GPR300, HW_H_SYS_GPR301, HW_H_SYS_GPR302, HW_H_SYS_GPR303 + , HW_H_SYS_GPR304, HW_H_SYS_GPR305, HW_H_SYS_GPR306, HW_H_SYS_GPR307 + , HW_H_SYS_GPR308, HW_H_SYS_GPR309, HW_H_SYS_GPR310, HW_H_SYS_GPR311 + , HW_H_SYS_GPR312, HW_H_SYS_GPR313, HW_H_SYS_GPR314, HW_H_SYS_GPR315 + , HW_H_SYS_GPR316, HW_H_SYS_GPR317, HW_H_SYS_GPR318, HW_H_SYS_GPR319 + , HW_H_SYS_GPR320, HW_H_SYS_GPR321, HW_H_SYS_GPR322, HW_H_SYS_GPR323 + , HW_H_SYS_GPR324, HW_H_SYS_GPR325, HW_H_SYS_GPR326, HW_H_SYS_GPR327 + , HW_H_SYS_GPR328, HW_H_SYS_GPR329, HW_H_SYS_GPR330, HW_H_SYS_GPR331 + , HW_H_SYS_GPR332, HW_H_SYS_GPR333, HW_H_SYS_GPR334, HW_H_SYS_GPR335 + , HW_H_SYS_GPR336, HW_H_SYS_GPR337, HW_H_SYS_GPR338, HW_H_SYS_GPR339 + , HW_H_SYS_GPR340, HW_H_SYS_GPR341, HW_H_SYS_GPR342, HW_H_SYS_GPR343 + , HW_H_SYS_GPR344, HW_H_SYS_GPR345, HW_H_SYS_GPR346, HW_H_SYS_GPR347 + , HW_H_SYS_GPR348, HW_H_SYS_GPR349, HW_H_SYS_GPR350, HW_H_SYS_GPR351 + , HW_H_SYS_GPR352, HW_H_SYS_GPR353, HW_H_SYS_GPR354, HW_H_SYS_GPR355 + , HW_H_SYS_GPR356, HW_H_SYS_GPR357, HW_H_SYS_GPR358, HW_H_SYS_GPR359 + , HW_H_SYS_GPR360, HW_H_SYS_GPR361, HW_H_SYS_GPR362, HW_H_SYS_GPR363 + , HW_H_SYS_GPR364, HW_H_SYS_GPR365, HW_H_SYS_GPR366, HW_H_SYS_GPR367 + , HW_H_SYS_GPR368, HW_H_SYS_GPR369, HW_H_SYS_GPR370, HW_H_SYS_GPR371 + , HW_H_SYS_GPR372, HW_H_SYS_GPR373, HW_H_SYS_GPR374, HW_H_SYS_GPR375 + , HW_H_SYS_GPR376, HW_H_SYS_GPR377, HW_H_SYS_GPR378, HW_H_SYS_GPR379 + , HW_H_SYS_GPR380, HW_H_SYS_GPR381, HW_H_SYS_GPR382, HW_H_SYS_GPR383 + , HW_H_SYS_GPR384, HW_H_SYS_GPR385, HW_H_SYS_GPR386, HW_H_SYS_GPR387 + , HW_H_SYS_GPR388, HW_H_SYS_GPR389, HW_H_SYS_GPR390, HW_H_SYS_GPR391 + , HW_H_SYS_GPR392, HW_H_SYS_GPR393, HW_H_SYS_GPR394, HW_H_SYS_GPR395 + , HW_H_SYS_GPR396, HW_H_SYS_GPR397, HW_H_SYS_GPR398, HW_H_SYS_GPR399 + , HW_H_SYS_GPR400, HW_H_SYS_GPR401, HW_H_SYS_GPR402, HW_H_SYS_GPR403 + , HW_H_SYS_GPR404, HW_H_SYS_GPR405, HW_H_SYS_GPR406, HW_H_SYS_GPR407 + , HW_H_SYS_GPR408, HW_H_SYS_GPR409, HW_H_SYS_GPR410, HW_H_SYS_GPR411 + , HW_H_SYS_GPR412, HW_H_SYS_GPR413, HW_H_SYS_GPR414, HW_H_SYS_GPR415 + , HW_H_SYS_GPR416, HW_H_SYS_GPR417, HW_H_SYS_GPR418, HW_H_SYS_GPR419 + , HW_H_SYS_GPR420, HW_H_SYS_GPR421, HW_H_SYS_GPR422, HW_H_SYS_GPR423 + , HW_H_SYS_GPR424, HW_H_SYS_GPR425, HW_H_SYS_GPR426, HW_H_SYS_GPR427 + , HW_H_SYS_GPR428, HW_H_SYS_GPR429, HW_H_SYS_GPR430, HW_H_SYS_GPR431 + , HW_H_SYS_GPR432, HW_H_SYS_GPR433, HW_H_SYS_GPR434, HW_H_SYS_GPR435 + , HW_H_SYS_GPR436, HW_H_SYS_GPR437, HW_H_SYS_GPR438, HW_H_SYS_GPR439 + , HW_H_SYS_GPR440, HW_H_SYS_GPR441, HW_H_SYS_GPR442, HW_H_SYS_GPR443 + , HW_H_SYS_GPR444, HW_H_SYS_GPR445, HW_H_SYS_GPR446, HW_H_SYS_GPR447 + , HW_H_SYS_GPR448, HW_H_SYS_GPR449, HW_H_SYS_GPR450, HW_H_SYS_GPR451 + , HW_H_SYS_GPR452, HW_H_SYS_GPR453, HW_H_SYS_GPR454, HW_H_SYS_GPR455 + , HW_H_SYS_GPR456, HW_H_SYS_GPR457, HW_H_SYS_GPR458, HW_H_SYS_GPR459 + , HW_H_SYS_GPR460, HW_H_SYS_GPR461, HW_H_SYS_GPR462, HW_H_SYS_GPR463 + , HW_H_SYS_GPR464, HW_H_SYS_GPR465, HW_H_SYS_GPR466, HW_H_SYS_GPR467 + , HW_H_SYS_GPR468, HW_H_SYS_GPR469, HW_H_SYS_GPR470, HW_H_SYS_GPR471 + , HW_H_SYS_GPR472, HW_H_SYS_GPR473, HW_H_SYS_GPR474, HW_H_SYS_GPR475 + , HW_H_SYS_GPR476, HW_H_SYS_GPR477, HW_H_SYS_GPR478, HW_H_SYS_GPR479 + , HW_H_SYS_GPR480, HW_H_SYS_GPR481, HW_H_SYS_GPR482, HW_H_SYS_GPR483 + , HW_H_SYS_GPR484, HW_H_SYS_GPR485, HW_H_SYS_GPR486, HW_H_SYS_GPR487 + , HW_H_SYS_GPR488, HW_H_SYS_GPR489, HW_H_SYS_GPR490, HW_H_SYS_GPR491 + , HW_H_SYS_GPR492, HW_H_SYS_GPR493, HW_H_SYS_GPR494, HW_H_SYS_GPR495 + , HW_H_SYS_GPR496, HW_H_SYS_GPR497, HW_H_SYS_GPR498, HW_H_SYS_GPR499 + , HW_H_SYS_GPR500, HW_H_SYS_GPR501, HW_H_SYS_GPR502, HW_H_SYS_GPR503 + , HW_H_SYS_GPR504, HW_H_SYS_GPR505, HW_H_SYS_GPR506, HW_H_SYS_GPR507 + , HW_H_SYS_GPR508, HW_H_SYS_GPR509, HW_H_SYS_GPR510, HW_H_SYS_GPR511 + , HW_H_MAC_MACLO, HW_H_MAC_MACHI, HW_H_TICK_TTMR, HW_H_SYS_VR_REV + , HW_H_SYS_VR_CFG, HW_H_SYS_VR_VER, HW_H_SYS_UPR_UP, HW_H_SYS_UPR_DCP + , HW_H_SYS_UPR_ICP, HW_H_SYS_UPR_DMP, HW_H_SYS_UPR_MP, HW_H_SYS_UPR_IMP + , HW_H_SYS_UPR_DUP, HW_H_SYS_UPR_PCUP, HW_H_SYS_UPR_PICP, HW_H_SYS_UPR_PMP + , HW_H_SYS_UPR_TTP, HW_H_SYS_UPR_CUP, HW_H_SYS_CPUCFGR_NSGR, HW_H_SYS_CPUCFGR_CGF + , HW_H_SYS_CPUCFGR_OB32S, HW_H_SYS_CPUCFGR_OB64S, HW_H_SYS_CPUCFGR_OF32S, HW_H_SYS_CPUCFGR_OF64S + , HW_H_SYS_CPUCFGR_OV64S, HW_H_SYS_CPUCFGR_ND, HW_H_SYS_SR_SM, HW_H_SYS_SR_TEE + , HW_H_SYS_SR_IEE, HW_H_SYS_SR_DCE, HW_H_SYS_SR_ICE, HW_H_SYS_SR_DME + , HW_H_SYS_SR_IME, HW_H_SYS_SR_LEE, HW_H_SYS_SR_CE, HW_H_SYS_SR_F + , HW_H_SYS_SR_CY, HW_H_SYS_SR_OV, HW_H_SYS_SR_OVE, HW_H_SYS_SR_DSX + , HW_H_SYS_SR_EPH, HW_H_SYS_SR_FO, HW_H_SYS_SR_SUMRA, HW_H_SYS_SR_CID + , HW_H_SYS_FPCSR_FPEE, HW_H_SYS_FPCSR_RM, HW_H_SYS_FPCSR_OVF, HW_H_SYS_FPCSR_UNF + , HW_H_SYS_FPCSR_SNF, HW_H_SYS_FPCSR_QNF, HW_H_SYS_FPCSR_ZF, HW_H_SYS_FPCSR_IXF + , HW_H_SYS_FPCSR_IVF, HW_H_SYS_FPCSR_INF, HW_H_SYS_FPCSR_DZF, HW_H_SIMM16 + , HW_H_UIMM16, HW_H_UIMM6, HW_H_ATOMIC_RESERVE, HW_H_ATOMIC_ADDRESS + , HW_H_ROFF1, HW_MAX } CGEN_HW_TYPE; #define MAX_HW ((int) HW_MAX) @@ -631,13 +629,12 @@ , OR1K_OPERAND_UIMM6, OR1K_OPERAND_RD, OR1K_OPERAND_RA, OR1K_OPERAND_RB , OR1K_OPERAND_DISP26, OR1K_OPERAND_DISP21, OR1K_OPERAND_SIMM16, OR1K_OPERAND_UIMM16 , OR1K_OPERAND_SIMM16_SPLIT, OR1K_OPERAND_UIMM16_SPLIT, OR1K_OPERAND_RDSF, OR1K_OPERAND_RASF - , OR1K_OPERAND_RBSF, OR1K_OPERAND_RDDF, OR1K_OPERAND_RADF, OR1K_OPERAND_RBDF - , OR1K_OPERAND_RDD32F, OR1K_OPERAND_RDDI, OR1K_OPERAND_RAD32F, OR1K_OPERAND_RADI - , OR1K_OPERAND_RBD32F, OR1K_OPERAND_RBDI, OR1K_OPERAND_MAX + , OR1K_OPERAND_RBSF, OR1K_OPERAND_RDD32F, OR1K_OPERAND_RDDI, OR1K_OPERAND_RAD32F + , OR1K_OPERAND_RADI, OR1K_OPERAND_RBD32F, OR1K_OPERAND_RBDI, OR1K_OPERAND_MAX } CGEN_OPERAND_TYPE; /* Number of operands types. */ -#define MAX_OPERANDS 38 +#define MAX_OPERANDS 35 /* Maximum number of operands referenced by any insn. */ #define MAX_OPERAND_INSTANCES 10 @@ -687,7 +684,6 @@ extern CGEN_KEYWORD or1k_cgen_opval_h_gpr; extern CGEN_KEYWORD or1k_cgen_opval_h_fsr; -extern CGEN_KEYWORD or1k_cgen_opval_h_fdr; extern const CGEN_HW_ENTRY or1k_cgen_hw_table[]; diff -Nru gdb-9.1/opcodes/or1k-dis.c gdb-10.2/opcodes/or1k-dis.c --- gdb-9.1/opcodes/or1k-dis.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/or1k-dis.c 2021-04-25 04:06:26.000000000 +0000 @@ -5,7 +5,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. - the resultant file is machine generated, cgen-dis.in isn't - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of libopcodes. @@ -123,9 +123,6 @@ case OR1K_OPERAND_RAD32F : print_regpair (cd, info, fields->f_rad32, 0|(1<<CGEN_OPERAND_VIRTUAL), pc, length); break; - case OR1K_OPERAND_RADF : - print_keyword (cd, info, & or1k_cgen_opval_h_fdr, fields->f_r2, 0); - break; case OR1K_OPERAND_RADI : print_regpair (cd, info, fields->f_rad32, 0|(1<<CGEN_OPERAND_VIRTUAL), pc, length); break; @@ -138,9 +135,6 @@ case OR1K_OPERAND_RBD32F : print_regpair (cd, info, fields->f_rbd32, 0|(1<<CGEN_OPERAND_VIRTUAL), pc, length); break; - case OR1K_OPERAND_RBDF : - print_keyword (cd, info, & or1k_cgen_opval_h_fdr, fields->f_r3, 0); - break; case OR1K_OPERAND_RBDI : print_regpair (cd, info, fields->f_rbd32, 0|(1<<CGEN_OPERAND_VIRTUAL), pc, length); break; @@ -153,9 +147,6 @@ case OR1K_OPERAND_RDD32F : print_regpair (cd, info, fields->f_rdd32, 0|(1<<CGEN_OPERAND_VIRTUAL), pc, length); break; - case OR1K_OPERAND_RDDF : - print_keyword (cd, info, & or1k_cgen_opval_h_fdr, fields->f_r1, 0); - break; case OR1K_OPERAND_RDDI : print_regpair (cd, info, fields->f_rdd32, 0|(1<<CGEN_OPERAND_VIRTUAL), pc, length); break; @@ -356,7 +347,7 @@ /* 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); + 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 @@ -487,6 +478,7 @@ CGEN_BITSET *isa; int mach; int endian; + int insn_endian; CGEN_CPU_DESC cd; } cpu_desc_list; @@ -499,12 +491,16 @@ 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; /* ??? gdb will set mach but leave the architecture as "unknown" */ @@ -570,9 +566,11 @@ prev_isa = cgen_bitset_copy (isa); prev_mach = mach; prev_endian = endian; + prev_insn_endian = insn_endian; cd = or1k_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 (); diff -Nru gdb-9.1/opcodes/or1k-ibld.c gdb-10.2/opcodes/or1k-ibld.c --- gdb-9.1/opcodes/or1k-ibld.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/or1k-ibld.c 2021-04-25 04:06:26.000000000 +0000 @@ -4,7 +4,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN: Cpu tools GENerator. - the resultant file is machine generated, cgen-ibld.in isn't - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of libopcodes. @@ -85,20 +85,20 @@ int word_length, unsigned char *bufp) { - unsigned long x,mask; + unsigned long x, mask; int shift; - x = cgen_get_insn_value (cd, bufp, word_length); + x = cgen_get_insn_value (cd, bufp, word_length, cd->endian); /* Written this way to avoid undefined behaviour. */ - mask = (((1L << (length - 1)) - 1) << 1) | 1; + mask = (1UL << (length - 1) << 1) - 1; if (CGEN_INSN_LSB0_P) shift = (start + 1) - length; else shift = (word_length - (start + length)); x = (x & ~(mask << shift)) | ((value & mask) << shift); - cgen_put_insn_value (cd, bufp, word_length, (bfd_vma) x); + cgen_put_insn_value (cd, bufp, word_length, (bfd_vma) x, cd->endian); } #endif /* ! CGEN_INT_INSN_P */ @@ -131,13 +131,15 @@ CGEN_INSN_BYTES_PTR buffer) { static char errbuf[100]; - /* Written this way to avoid undefined behaviour. */ - unsigned long mask = (((1L << (length - 1)) - 1) << 1) | 1; + unsigned long mask; /* If LENGTH is zero, this operand doesn't contribute to the value. */ if (length == 0) return NULL; + /* Written this way to avoid undefined behaviour. */ + mask = (1UL << (length - 1) << 1) - 1; + if (word_length > 8 * sizeof (CGEN_INSN_INT)) abort (); @@ -153,7 +155,7 @@ /* Ensure VALUE will fit. */ if (CGEN_BOOL_ATTR (attrs, CGEN_IFLD_SIGN_OPT)) { - long minval = - (1L << (length - 1)); + long minval = - (1UL << (length - 1)); unsigned long maxval = mask; if ((value > 0 && (unsigned long) value > maxval) @@ -191,8 +193,8 @@ { if (! cgen_signed_overflow_ok_p (cd)) { - long minval = - (1L << (length - 1)); - long maxval = (1L << (length - 1)) - 1; + long minval = - (1UL << (length - 1)); + long maxval = (1UL << (length - 1)) - 1; if (value < minval || value > maxval) { @@ -269,8 +271,8 @@ #else cgen_put_insn_value (cd, buffer, min ((unsigned) cd->base_insn_bitsize, - (unsigned) CGEN_FIELDS_BITSIZE (fields)), - value); + (unsigned) CGEN_FIELDS_BITSIZE (fields)), + value, cd->insn_endian); #endif /* ! CGEN_INT_INSN_P */ @@ -314,7 +316,7 @@ { int shift = insn_length - length; /* Written this way to avoid undefined behaviour. */ - CGEN_INSN_INT mask = (((1L << (length - 1)) - 1) << 1) | 1; + CGEN_INSN_INT mask = length == 0 ? 0 : (1UL << (length - 1) << 1) - 1; *buf = (*buf & ~(mask << shift)) | ((value & mask) << shift); } @@ -387,7 +389,7 @@ unsigned long x; int shift; - x = cgen_get_insn_value (cd, bufp, word_length); + x = cgen_get_insn_value (cd, bufp, word_length, cd->endian); if (CGEN_INSN_LSB0_P) shift = (start + 1) - length; @@ -480,7 +482,10 @@ abort (); if (fill_cache (cd, ex_info, word_offset / 8, word_length / 8, pc) == 0) - return 0; + { + *valuep = 0; + return 0; + } value = extract_1 (cd, ex_info, start, length, word_length, bufp, pc); } @@ -488,12 +493,12 @@ #endif /* ! CGEN_INT_INSN_P */ /* Written this way to avoid undefined behaviour. */ - mask = (((1L << (length - 1)) - 1) << 1) | 1; + mask = (1UL << (length - 1) << 1) - 1; value &= mask; /* sign extend? */ if (CGEN_BOOL_ATTR (attrs, CGEN_IFLD_SIGNED) - && (value & (1L << (length - 1)))) + && (value & (1UL << (length - 1)))) value |= ~mask; *valuep = value; @@ -576,14 +581,14 @@ case OR1K_OPERAND_DISP21 : { long value = fields->f_disp21; - value = ((((DI) (value) >> (13))) - (((DI) (pc) >> (13)))); + value = ((((SI) (value) >> (13))) - (((SI) (pc) >> (13)))); errmsg = insert_normal (cd, value, 0|(1<<CGEN_IFLD_SIGNED)|(1<<CGEN_IFLD_ABS_ADDR), 0, 20, 21, 32, total_length, buffer); } break; case OR1K_OPERAND_DISP26 : { long value = fields->f_disp26; - value = ((DI) (((value) - (pc))) >> (2)); + value = ((SI) (((value) - (pc))) >> (2)); errmsg = insert_normal (cd, value, 0|(1<<CGEN_IFLD_SIGNED)|(1<<CGEN_IFLD_PCREL_ADDR), 0, 25, 26, 32, total_length, buffer); } break; @@ -604,9 +609,6 @@ break; } break; - case OR1K_OPERAND_RADF : - errmsg = insert_normal (cd, fields->f_r2, 0, 0, 20, 5, 32, total_length, buffer); - break; case OR1K_OPERAND_RADI : { { @@ -641,9 +643,6 @@ break; } break; - case OR1K_OPERAND_RBDF : - errmsg = insert_normal (cd, fields->f_r3, 0, 0, 15, 5, 32, total_length, buffer); - break; case OR1K_OPERAND_RBDI : { { @@ -678,9 +677,6 @@ break; } break; - case OR1K_OPERAND_RDDF : - errmsg = insert_normal (cd, fields->f_r1, 0, 0, 25, 5, 32, total_length, buffer); - break; case OR1K_OPERAND_RDDI : { { @@ -783,7 +779,7 @@ { long value; length = extract_normal (cd, ex_info, insn_value, 0|(1<<CGEN_IFLD_SIGNED)|(1<<CGEN_IFLD_ABS_ADDR), 0, 20, 21, 32, total_length, pc, & value); - value = ((((value) + (((DI) (pc) >> (13))))) << (13)); + value = ((((value) + (((SI) (pc) >> (13))))) * (8192)); fields->f_disp21 = value; } break; @@ -791,7 +787,7 @@ { long value; length = extract_normal (cd, ex_info, insn_value, 0|(1<<CGEN_IFLD_SIGNED)|(1<<CGEN_IFLD_PCREL_ADDR), 0, 25, 26, 32, total_length, pc, & value); - value = ((((value) << (2))) + (pc)); + value = ((((value) * (4))) + (pc)); fields->f_disp26 = value; } break; @@ -807,9 +803,6 @@ FLD (f_rad32) = ((FLD (f_r2)) | (((FLD (f_raoff_9_1)) << (5)))); } break; - case OR1K_OPERAND_RADF : - length = extract_normal (cd, ex_info, insn_value, 0, 0, 20, 5, 32, total_length, pc, & fields->f_r2); - break; case OR1K_OPERAND_RADI : { length = extract_normal (cd, ex_info, insn_value, 0, 0, 20, 5, 32, total_length, pc, & fields->f_r2); @@ -834,9 +827,6 @@ FLD (f_rbd32) = ((FLD (f_r3)) | (((FLD (f_rboff_8_1)) << (5)))); } break; - case OR1K_OPERAND_RBDF : - length = extract_normal (cd, ex_info, insn_value, 0, 0, 15, 5, 32, total_length, pc, & fields->f_r3); - break; case OR1K_OPERAND_RBDI : { length = extract_normal (cd, ex_info, insn_value, 0, 0, 15, 5, 32, total_length, pc, & fields->f_r3); @@ -861,9 +851,6 @@ FLD (f_rdd32) = ((FLD (f_r1)) | (((FLD (f_rdoff_10_1)) << (5)))); } break; - case OR1K_OPERAND_RDDF : - length = extract_normal (cd, ex_info, insn_value, 0, 0, 25, 5, 32, total_length, pc, & fields->f_r1); - break; case OR1K_OPERAND_RDDI : { length = extract_normal (cd, ex_info, insn_value, 0, 0, 25, 5, 32, total_length, pc, & fields->f_r1); @@ -954,9 +941,6 @@ case OR1K_OPERAND_RAD32F : value = fields->f_rad32; break; - case OR1K_OPERAND_RADF : - value = fields->f_r2; - break; case OR1K_OPERAND_RADI : value = fields->f_rad32; break; @@ -969,9 +953,6 @@ case OR1K_OPERAND_RBD32F : value = fields->f_rbd32; break; - case OR1K_OPERAND_RBDF : - value = fields->f_r3; - break; case OR1K_OPERAND_RBDI : value = fields->f_rbd32; break; @@ -984,9 +965,6 @@ case OR1K_OPERAND_RDD32F : value = fields->f_rdd32; break; - case OR1K_OPERAND_RDDF : - value = fields->f_r1; - break; case OR1K_OPERAND_RDDI : value = fields->f_rdd32; break; @@ -1041,9 +1019,6 @@ case OR1K_OPERAND_RAD32F : value = fields->f_rad32; break; - case OR1K_OPERAND_RADF : - value = fields->f_r2; - break; case OR1K_OPERAND_RADI : value = fields->f_rad32; break; @@ -1056,9 +1031,6 @@ case OR1K_OPERAND_RBD32F : value = fields->f_rbd32; break; - case OR1K_OPERAND_RBDF : - value = fields->f_r3; - break; case OR1K_OPERAND_RBDI : value = fields->f_rbd32; break; @@ -1071,9 +1043,6 @@ case OR1K_OPERAND_RDD32F : value = fields->f_rdd32; break; - case OR1K_OPERAND_RDDF : - value = fields->f_r1; - break; case OR1K_OPERAND_RDDI : value = fields->f_rdd32; break; @@ -1135,9 +1104,6 @@ case OR1K_OPERAND_RAD32F : fields->f_rad32 = value; break; - case OR1K_OPERAND_RADF : - fields->f_r2 = value; - break; case OR1K_OPERAND_RADI : fields->f_rad32 = value; break; @@ -1150,9 +1116,6 @@ case OR1K_OPERAND_RBD32F : fields->f_rbd32 = value; break; - case OR1K_OPERAND_RBDF : - fields->f_r3 = value; - break; case OR1K_OPERAND_RBDI : fields->f_rbd32 = value; break; @@ -1165,9 +1128,6 @@ case OR1K_OPERAND_RDD32F : fields->f_rdd32 = value; break; - case OR1K_OPERAND_RDDF : - fields->f_r1 = value; - break; case OR1K_OPERAND_RDDI : fields->f_rdd32 = value; break; @@ -1219,9 +1179,6 @@ case OR1K_OPERAND_RAD32F : fields->f_rad32 = value; break; - case OR1K_OPERAND_RADF : - fields->f_r2 = value; - break; case OR1K_OPERAND_RADI : fields->f_rad32 = value; break; @@ -1234,9 +1191,6 @@ case OR1K_OPERAND_RBD32F : fields->f_rbd32 = value; break; - case OR1K_OPERAND_RBDF : - fields->f_r3 = value; - break; case OR1K_OPERAND_RBDI : fields->f_rbd32 = value; break; @@ -1249,9 +1203,6 @@ case OR1K_OPERAND_RDD32F : fields->f_rdd32 = value; break; - case OR1K_OPERAND_RDDF : - fields->f_r1 = value; - break; case OR1K_OPERAND_RDDI : fields->f_rdd32 = value; break; diff -Nru gdb-9.1/opcodes/or1k-opc.c gdb-10.2/opcodes/or1k-opc.c --- gdb-9.1/opcodes/or1k-opc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/or1k-opc.c 2021-04-25 04:06:26.000000000 +0000 @@ -3,7 +3,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright (C) 1996-2019 Free Software Foundation, Inc. +Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of the GNU Binutils and/or GDB, the GNU debugger. @@ -163,10 +163,6 @@ 32, 32, 0xfc0007ff, { { F (F_OPCODE) }, { F (F_R1) }, { F (F_R2) }, { F (F_R3) }, { F (F_RESV_10_3) }, { F (F_OP_7_8) }, { 0 } } }; -static const CGEN_IFMT ifmt_lf_add_d ATTRIBUTE_UNUSED = { - 32, 32, 0xfc0007ff, { { F (F_OPCODE) }, { F (F_R1) }, { F (F_R2) }, { F (F_R3) }, { F (F_RESV_10_3) }, { F (F_OP_7_8) }, { 0 } } -}; - static const CGEN_IFMT ifmt_lf_add_d32 ATTRIBUTE_UNUSED = { 32, 32, 0xfc0000ff, { { F (F_OPCODE) }, { F (F_RDD32) }, { F (F_RAD32) }, { F (F_RBD32) }, { F (F_OP_7_8) }, { 0 } } }; @@ -175,10 +171,6 @@ 32, 32, 0xfc00ffff, { { F (F_OPCODE) }, { F (F_R1) }, { F (F_R2) }, { F (F_R3) }, { F (F_RESV_10_3) }, { F (F_OP_7_8) }, { 0 } } }; -static const CGEN_IFMT ifmt_lf_itof_d ATTRIBUTE_UNUSED = { - 32, 32, 0xfc00ffff, { { F (F_OPCODE) }, { F (F_R1) }, { F (F_R2) }, { F (F_R3) }, { F (F_RESV_10_3) }, { F (F_OP_7_8) }, { 0 } } -}; - static const CGEN_IFMT ifmt_lf_itof_d32 ATTRIBUTE_UNUSED = { 32, 32, 0xfc00f9ff, { { F (F_OPCODE) }, { F (F_R3) }, { F (F_RDD32) }, { F (F_RAD32) }, { F (F_RESV_8_1) }, { F (F_OP_7_8) }, { 0 } } }; @@ -187,10 +179,6 @@ 32, 32, 0xfc00ffff, { { F (F_OPCODE) }, { F (F_R1) }, { F (F_R2) }, { F (F_R3) }, { F (F_RESV_10_3) }, { F (F_OP_7_8) }, { 0 } } }; -static const CGEN_IFMT ifmt_lf_ftoi_d ATTRIBUTE_UNUSED = { - 32, 32, 0xfc00ffff, { { F (F_OPCODE) }, { F (F_R1) }, { F (F_R2) }, { F (F_R3) }, { F (F_RESV_10_3) }, { F (F_OP_7_8) }, { 0 } } -}; - static const CGEN_IFMT ifmt_lf_ftoi_d32 ATTRIBUTE_UNUSED = { 32, 32, 0xfc00f9ff, { { F (F_OPCODE) }, { F (F_R3) }, { F (F_RDD32) }, { F (F_RAD32) }, { F (F_RESV_8_1) }, { F (F_OP_7_8) }, { 0 } } }; @@ -199,10 +187,6 @@ 32, 32, 0xffe007ff, { { F (F_OPCODE) }, { F (F_R1) }, { F (F_R2) }, { F (F_R3) }, { F (F_RESV_10_3) }, { F (F_OP_7_8) }, { 0 } } }; -static const CGEN_IFMT ifmt_lf_sfeq_d ATTRIBUTE_UNUSED = { - 32, 32, 0xffe007ff, { { F (F_OPCODE) }, { F (F_R1) }, { F (F_R2) }, { F (F_R3) }, { F (F_RESV_10_3) }, { F (F_OP_7_8) }, { 0 } } -}; - static const CGEN_IFMT ifmt_lf_sfeq_d32 ATTRIBUTE_UNUSED = { 32, 32, 0xffe004ff, { { F (F_OPCODE) }, { F (F_R1) }, { F (F_RESV_10_1) }, { F (F_RAD32) }, { F (F_RBD32) }, { F (F_OP_7_8) }, { 0 } } }; @@ -211,10 +195,6 @@ 32, 32, 0xffe007ff, { { F (F_OPCODE) }, { F (F_RESV_25_5) }, { F (F_R2) }, { F (F_R3) }, { F (F_RESV_10_3) }, { F (F_OP_7_8) }, { 0 } } }; -static const CGEN_IFMT ifmt_lf_cust1_d ATTRIBUTE_UNUSED = { - 32, 32, 0xffe007ff, { { F (F_OPCODE) }, { F (F_RESV_25_5) }, { F (F_R2) }, { F (F_R3) }, { F (F_RESV_10_3) }, { F (F_OP_7_8) }, { 0 } } -}; - static const CGEN_IFMT ifmt_lf_cust1_d32 ATTRIBUTE_UNUSED = { 32, 32, 0xffe004ff, { { F (F_OPCODE) }, { F (F_RESV_25_5) }, { F (F_RESV_10_1) }, { F (F_RAD32) }, { F (F_RBD32) }, { F (F_OP_7_8) }, { 0 } } }; @@ -828,12 +808,6 @@ { { MNEM, ' ', OP (RDSF), ',', OP (RASF), ',', OP (RBSF), 0 } }, & ifmt_lf_add_s, { 0xc8000000 } }, -/* lf.add.d $rDDF,$rADF,$rBDF */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (RDDF), ',', OP (RADF), ',', OP (RBDF), 0 } }, - & ifmt_lf_add_d, { 0xc8000010 } - }, /* lf.add.d $rDD32F,$rAD32F,$rBD32F */ { { 0, 0, 0, 0 }, @@ -846,12 +820,6 @@ { { MNEM, ' ', OP (RDSF), ',', OP (RASF), ',', OP (RBSF), 0 } }, & ifmt_lf_add_s, { 0xc8000001 } }, -/* lf.sub.d $rDDF,$rADF,$rBDF */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (RDDF), ',', OP (RADF), ',', OP (RBDF), 0 } }, - & ifmt_lf_add_d, { 0xc8000011 } - }, /* lf.sub.d $rDD32F,$rAD32F,$rBD32F */ { { 0, 0, 0, 0 }, @@ -864,12 +832,6 @@ { { MNEM, ' ', OP (RDSF), ',', OP (RASF), ',', OP (RBSF), 0 } }, & ifmt_lf_add_s, { 0xc8000002 } }, -/* lf.mul.d $rDDF,$rADF,$rBDF */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (RDDF), ',', OP (RADF), ',', OP (RBDF), 0 } }, - & ifmt_lf_add_d, { 0xc8000012 } - }, /* lf.mul.d $rDD32F,$rAD32F,$rBD32F */ { { 0, 0, 0, 0 }, @@ -882,12 +844,6 @@ { { MNEM, ' ', OP (RDSF), ',', OP (RASF), ',', OP (RBSF), 0 } }, & ifmt_lf_add_s, { 0xc8000003 } }, -/* lf.div.d $rDDF,$rADF,$rBDF */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (RDDF), ',', OP (RADF), ',', OP (RBDF), 0 } }, - & ifmt_lf_add_d, { 0xc8000013 } - }, /* lf.div.d $rDD32F,$rAD32F,$rBD32F */ { { 0, 0, 0, 0 }, @@ -900,12 +856,6 @@ { { MNEM, ' ', OP (RDSF), ',', OP (RASF), ',', OP (RBSF), 0 } }, & ifmt_lf_add_s, { 0xc8000006 } }, -/* lf.rem.d $rDDF,$rADF,$rBDF */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (RDDF), ',', OP (RADF), ',', OP (RBDF), 0 } }, - & ifmt_lf_add_d, { 0xc8000016 } - }, /* lf.rem.d $rDD32F,$rAD32F,$rBD32F */ { { 0, 0, 0, 0 }, @@ -918,12 +868,6 @@ { { MNEM, ' ', OP (RDSF), ',', OP (RA), 0 } }, & ifmt_lf_itof_s, { 0xc8000004 } }, -/* lf.itof.d $rDDF,$rA */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (RDDF), ',', OP (RA), 0 } }, - & ifmt_lf_itof_d, { 0xc8000014 } - }, /* lf.itof.d $rDD32F,$rADI */ { { 0, 0, 0, 0 }, @@ -936,12 +880,6 @@ { { MNEM, ' ', OP (RD), ',', OP (RASF), 0 } }, & ifmt_lf_ftoi_s, { 0xc8000005 } }, -/* lf.ftoi.d $rD,$rADF */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (RD), ',', OP (RADF), 0 } }, - & ifmt_lf_ftoi_d, { 0xc8000015 } - }, /* lf.ftoi.d $rDDI,$rAD32F */ { { 0, 0, 0, 0 }, @@ -954,12 +892,6 @@ { { MNEM, ' ', OP (RASF), ',', OP (RBSF), 0 } }, & ifmt_lf_sfeq_s, { 0xc8000008 } }, -/* lf.sfeq.d $rADF,$rBDF */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (RADF), ',', OP (RBDF), 0 } }, - & ifmt_lf_sfeq_d, { 0xc8000018 } - }, /* lf.sfeq.d $rAD32F,$rBD32F */ { { 0, 0, 0, 0 }, @@ -972,12 +904,6 @@ { { MNEM, ' ', OP (RASF), ',', OP (RBSF), 0 } }, & ifmt_lf_sfeq_s, { 0xc8000009 } }, -/* lf.sfne.d $rADF,$rBDF */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (RADF), ',', OP (RBDF), 0 } }, - & ifmt_lf_sfeq_d, { 0xc8000019 } - }, /* lf.sfne.d $rAD32F,$rBD32F */ { { 0, 0, 0, 0 }, @@ -990,12 +916,6 @@ { { MNEM, ' ', OP (RASF), ',', OP (RBSF), 0 } }, & ifmt_lf_sfeq_s, { 0xc800000b } }, -/* lf.sfge.d $rADF,$rBDF */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (RADF), ',', OP (RBDF), 0 } }, - & ifmt_lf_sfeq_d, { 0xc800001b } - }, /* lf.sfge.d $rAD32F,$rBD32F */ { { 0, 0, 0, 0 }, @@ -1008,12 +928,6 @@ { { MNEM, ' ', OP (RASF), ',', OP (RBSF), 0 } }, & ifmt_lf_sfeq_s, { 0xc800000a } }, -/* lf.sfgt.d $rADF,$rBDF */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (RADF), ',', OP (RBDF), 0 } }, - & ifmt_lf_sfeq_d, { 0xc800001a } - }, /* lf.sfgt.d $rAD32F,$rBD32F */ { { 0, 0, 0, 0 }, @@ -1026,12 +940,6 @@ { { MNEM, ' ', OP (RASF), ',', OP (RBSF), 0 } }, & ifmt_lf_sfeq_s, { 0xc800000c } }, -/* lf.sflt.d $rADF,$rBDF */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (RADF), ',', OP (RBDF), 0 } }, - & ifmt_lf_sfeq_d, { 0xc800001c } - }, /* lf.sflt.d $rAD32F,$rBD32F */ { { 0, 0, 0, 0 }, @@ -1044,12 +952,6 @@ { { MNEM, ' ', OP (RASF), ',', OP (RBSF), 0 } }, & ifmt_lf_sfeq_s, { 0xc800000d } }, -/* lf.sfle.d $rADF,$rBDF */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (RADF), ',', OP (RBDF), 0 } }, - & ifmt_lf_sfeq_d, { 0xc800001d } - }, /* lf.sfle.d $rAD32F,$rBD32F */ { { 0, 0, 0, 0 }, @@ -1062,12 +964,6 @@ { { MNEM, ' ', OP (RASF), ',', OP (RBSF), 0 } }, & ifmt_lf_sfeq_s, { 0xc8000028 } }, -/* lf.sfueq.d $rADF,$rBDF */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (RADF), ',', OP (RBDF), 0 } }, - & ifmt_lf_sfeq_d, { 0xc8000038 } - }, /* lf.sfueq.d $rAD32F,$rBD32F */ { { 0, 0, 0, 0 }, @@ -1080,12 +976,6 @@ { { MNEM, ' ', OP (RASF), ',', OP (RBSF), 0 } }, & ifmt_lf_sfeq_s, { 0xc8000029 } }, -/* lf.sfune.d $rADF,$rBDF */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (RADF), ',', OP (RBDF), 0 } }, - & ifmt_lf_sfeq_d, { 0xc8000039 } - }, /* lf.sfune.d $rAD32F,$rBD32F */ { { 0, 0, 0, 0 }, @@ -1098,12 +988,6 @@ { { MNEM, ' ', OP (RASF), ',', OP (RBSF), 0 } }, & ifmt_lf_sfeq_s, { 0xc800002a } }, -/* lf.sfugt.d $rADF,$rBDF */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (RADF), ',', OP (RBDF), 0 } }, - & ifmt_lf_sfeq_d, { 0xc800003a } - }, /* lf.sfugt.d $rAD32F,$rBD32F */ { { 0, 0, 0, 0 }, @@ -1116,12 +1000,6 @@ { { MNEM, ' ', OP (RASF), ',', OP (RBSF), 0 } }, & ifmt_lf_sfeq_s, { 0xc800002b } }, -/* lf.sfuge.d $rADF,$rBDF */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (RADF), ',', OP (RBDF), 0 } }, - & ifmt_lf_sfeq_d, { 0xc800003b } - }, /* lf.sfuge.d $rAD32F,$rBD32F */ { { 0, 0, 0, 0 }, @@ -1134,12 +1012,6 @@ { { MNEM, ' ', OP (RASF), ',', OP (RBSF), 0 } }, & ifmt_lf_sfeq_s, { 0xc800002c } }, -/* lf.sfult.d $rADF,$rBDF */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (RADF), ',', OP (RBDF), 0 } }, - & ifmt_lf_sfeq_d, { 0xc800003c } - }, /* lf.sfult.d $rAD32F,$rBD32F */ { { 0, 0, 0, 0 }, @@ -1152,12 +1024,6 @@ { { MNEM, ' ', OP (RASF), ',', OP (RBSF), 0 } }, & ifmt_lf_sfeq_s, { 0xc800002d } }, -/* lf.sfule.d $rADF,$rBDF */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (RADF), ',', OP (RBDF), 0 } }, - & ifmt_lf_sfeq_d, { 0xc800003d } - }, /* lf.sfule.d $rAD32F,$rBD32F */ { { 0, 0, 0, 0 }, @@ -1170,12 +1036,6 @@ { { MNEM, ' ', OP (RASF), ',', OP (RBSF), 0 } }, & ifmt_lf_sfeq_s, { 0xc800002e } }, -/* lf.sfun.d $rADF,$rBDF */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (RADF), ',', OP (RBDF), 0 } }, - & ifmt_lf_sfeq_d, { 0xc800003e } - }, /* lf.sfun.d $rAD32F,$rBD32F */ { { 0, 0, 0, 0 }, @@ -1188,12 +1048,6 @@ { { MNEM, ' ', OP (RDSF), ',', OP (RASF), ',', OP (RBSF), 0 } }, & ifmt_lf_add_s, { 0xc8000007 } }, -/* lf.madd.d $rDDF,$rADF,$rBDF */ - { - { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (RDDF), ',', OP (RADF), ',', OP (RBDF), 0 } }, - & ifmt_lf_add_d, { 0xc8000017 } - }, /* lf.madd.d $rDD32F,$rAD32F,$rBD32F */ { { 0, 0, 0, 0 }, @@ -1208,12 +1062,6 @@ }, /* lf.cust1.d */ { - { 0, 0, 0, 0 }, - { { MNEM, 0 } }, - & ifmt_lf_cust1_d, { 0xc80000e0 } - }, -/* lf.cust1.d */ - { { 0, 0, 0, 0 }, { { MNEM, 0 } }, & ifmt_lf_cust1_d32, { 0xc80000e0 } diff -Nru gdb-9.1/opcodes/or1k-opc.h gdb-10.2/opcodes/or1k-opc.h --- gdb-9.1/opcodes/or1k-opc.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/or1k-opc.h 2021-04-25 04:06:26.000000000 +0000 @@ -3,7 +3,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright (C) 1996-2019 Free Software Foundation, Inc. +Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of the GNU Binutils and/or GDB, the GNU debugger. @@ -70,23 +70,17 @@ , OR1K_INSN_L_MACU, OR1K_INSN_L_MSB, OR1K_INSN_L_MSBU, OR1K_INSN_L_CUST1 , OR1K_INSN_L_CUST2, OR1K_INSN_L_CUST3, OR1K_INSN_L_CUST4, OR1K_INSN_L_CUST5 , OR1K_INSN_L_CUST6, OR1K_INSN_L_CUST7, OR1K_INSN_L_CUST8, OR1K_INSN_LF_ADD_S - , OR1K_INSN_LF_ADD_D, OR1K_INSN_LF_ADD_D32, OR1K_INSN_LF_SUB_S, OR1K_INSN_LF_SUB_D - , OR1K_INSN_LF_SUB_D32, OR1K_INSN_LF_MUL_S, OR1K_INSN_LF_MUL_D, OR1K_INSN_LF_MUL_D32 - , OR1K_INSN_LF_DIV_S, OR1K_INSN_LF_DIV_D, OR1K_INSN_LF_DIV_D32, OR1K_INSN_LF_REM_S - , OR1K_INSN_LF_REM_D, OR1K_INSN_LF_REM_D32, OR1K_INSN_LF_ITOF_S, OR1K_INSN_LF_ITOF_D - , OR1K_INSN_LF_ITOF_D32, OR1K_INSN_LF_FTOI_S, OR1K_INSN_LF_FTOI_D, OR1K_INSN_LF_FTOI_D32 - , OR1K_INSN_LF_SFEQ_S, OR1K_INSN_LF_SFEQ_D, OR1K_INSN_LF_SFEQ_D32, OR1K_INSN_LF_SFNE_S - , OR1K_INSN_LF_SFNE_D, OR1K_INSN_LF_SFNE_D32, OR1K_INSN_LF_SFGE_S, OR1K_INSN_LF_SFGE_D - , OR1K_INSN_LF_SFGE_D32, OR1K_INSN_LF_SFGT_S, OR1K_INSN_LF_SFGT_D, OR1K_INSN_LF_SFGT_D32 - , OR1K_INSN_LF_SFLT_S, OR1K_INSN_LF_SFLT_D, OR1K_INSN_LF_SFLT_D32, OR1K_INSN_LF_SFLE_S - , OR1K_INSN_LF_SFLE_D, OR1K_INSN_LF_SFLE_D32, OR1K_INSN_LF_SFUEQ_S, OR1K_INSN_LF_SFUEQ_D - , OR1K_INSN_LF_SFUEQ_D32, OR1K_INSN_LF_SFUNE_S, OR1K_INSN_LF_SFUNE_D, OR1K_INSN_LF_SFUNE_D32 - , OR1K_INSN_LF_SFUGT_S, OR1K_INSN_LF_SFUGT_D, OR1K_INSN_LF_SFUGT_D32, OR1K_INSN_LF_SFUGE_S - , OR1K_INSN_LF_SFUGE_D, OR1K_INSN_LF_SFUGE_D32, OR1K_INSN_LF_SFULT_S, OR1K_INSN_LF_SFULT_D - , OR1K_INSN_LF_SFULT_D32, OR1K_INSN_LF_SFULE_S, OR1K_INSN_LF_SFULE_D, OR1K_INSN_LF_SFULE_D32 - , OR1K_INSN_LF_SFUN_S, OR1K_INSN_LF_SFUN_D, OR1K_INSN_LF_SFUN_D32, OR1K_INSN_LF_MADD_S - , OR1K_INSN_LF_MADD_D, OR1K_INSN_LF_MADD_D32, OR1K_INSN_LF_CUST1_S, OR1K_INSN_LF_CUST1_D - , OR1K_INSN_LF_CUST1_D32 + , OR1K_INSN_LF_ADD_D32, OR1K_INSN_LF_SUB_S, OR1K_INSN_LF_SUB_D32, OR1K_INSN_LF_MUL_S + , OR1K_INSN_LF_MUL_D32, OR1K_INSN_LF_DIV_S, OR1K_INSN_LF_DIV_D32, OR1K_INSN_LF_REM_S + , OR1K_INSN_LF_REM_D32, OR1K_INSN_LF_ITOF_S, OR1K_INSN_LF_ITOF_D32, OR1K_INSN_LF_FTOI_S + , OR1K_INSN_LF_FTOI_D32, OR1K_INSN_LF_SFEQ_S, OR1K_INSN_LF_SFEQ_D32, OR1K_INSN_LF_SFNE_S + , OR1K_INSN_LF_SFNE_D32, OR1K_INSN_LF_SFGE_S, OR1K_INSN_LF_SFGE_D32, OR1K_INSN_LF_SFGT_S + , OR1K_INSN_LF_SFGT_D32, OR1K_INSN_LF_SFLT_S, OR1K_INSN_LF_SFLT_D32, OR1K_INSN_LF_SFLE_S + , OR1K_INSN_LF_SFLE_D32, OR1K_INSN_LF_SFUEQ_S, OR1K_INSN_LF_SFUEQ_D32, OR1K_INSN_LF_SFUNE_S + , OR1K_INSN_LF_SFUNE_D32, OR1K_INSN_LF_SFUGT_S, OR1K_INSN_LF_SFUGT_D32, OR1K_INSN_LF_SFUGE_S + , OR1K_INSN_LF_SFUGE_D32, OR1K_INSN_LF_SFULT_S, OR1K_INSN_LF_SFULT_D32, OR1K_INSN_LF_SFULE_S + , OR1K_INSN_LF_SFULE_D32, OR1K_INSN_LF_SFUN_S, OR1K_INSN_LF_SFUN_D32, OR1K_INSN_LF_MADD_S + , OR1K_INSN_LF_MADD_D32, OR1K_INSN_LF_CUST1_S, OR1K_INSN_LF_CUST1_D32 } CGEN_INSN_TYPE; /* Index of `invalid' insn place holder. */ diff -Nru gdb-9.1/opcodes/or1k-opinst.c gdb-10.2/opcodes/or1k-opinst.c --- gdb-9.1/opcodes/or1k-opinst.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/or1k-opinst.c 2021-04-25 04:06:26.000000000 +0000 @@ -3,7 +3,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright (C) 1996-2019 Free Software Foundation, Inc. +Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of the GNU Binutils and/or GDB, the GNU debugger. @@ -43,54 +43,54 @@ }; static const CGEN_OPINST sfmt_l_j_ops[] ATTRIBUTE_UNUSED = { - { INPUT, "disp26", HW_H_IADDR, CGEN_MODE_UDI, OP_ENT (DISP26), 0, 0 }, - { INPUT, "sys_cpucfgr_nd", HW_H_SYS_CPUCFGR_ND, CGEN_MODE_UDI, 0, 0, 0 }, - { OUTPUT, "pc", HW_H_PC, CGEN_MODE_UDI, 0, 0, 0 }, + { INPUT, "disp26", HW_H_IADDR, CGEN_MODE_USI, OP_ENT (DISP26), 0, 0 }, + { INPUT, "sys_cpucfgr_nd", HW_H_SYS_CPUCFGR_ND, CGEN_MODE_USI, 0, 0, 0 }, + { OUTPUT, "pc", HW_H_PC, CGEN_MODE_USI, 0, 0, 0 }, { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 } }; static const CGEN_OPINST sfmt_l_adrp_ops[] ATTRIBUTE_UNUSED = { - { INPUT, "disp21", HW_H_IADDR, CGEN_MODE_UDI, OP_ENT (DISP21), 0, 0 }, - { OUTPUT, "rD", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RD), 0, 0 }, + { INPUT, "disp21", HW_H_IADDR, CGEN_MODE_USI, OP_ENT (DISP21), 0, 0 }, + { OUTPUT, "rD", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RD), 0, 0 }, { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 } }; static const CGEN_OPINST sfmt_l_jal_ops[] ATTRIBUTE_UNUSED = { - { INPUT, "disp26", HW_H_IADDR, CGEN_MODE_UDI, OP_ENT (DISP26), 0, 0 }, - { INPUT, "pc", HW_H_PC, CGEN_MODE_UDI, 0, 0, 0 }, - { INPUT, "sys_cpucfgr_nd", HW_H_SYS_CPUCFGR_ND, CGEN_MODE_UDI, 0, 0, 0 }, - { OUTPUT, "h_gpr_UDI_9", HW_H_GPR, CGEN_MODE_UDI, 0, 9, 0 }, - { OUTPUT, "pc", HW_H_PC, CGEN_MODE_UDI, 0, 0, 0 }, + { INPUT, "disp26", HW_H_IADDR, CGEN_MODE_USI, OP_ENT (DISP26), 0, 0 }, + { INPUT, "pc", HW_H_PC, CGEN_MODE_USI, 0, 0, 0 }, + { INPUT, "sys_cpucfgr_nd", HW_H_SYS_CPUCFGR_ND, CGEN_MODE_USI, 0, 0, 0 }, + { OUTPUT, "h_gpr_USI_9", HW_H_GPR, CGEN_MODE_USI, 0, 9, 0 }, + { OUTPUT, "pc", HW_H_PC, CGEN_MODE_USI, 0, 0, 0 }, { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 } }; static const CGEN_OPINST sfmt_l_jr_ops[] ATTRIBUTE_UNUSED = { - { INPUT, "rB", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RB), 0, 0 }, - { INPUT, "sys_cpucfgr_nd", HW_H_SYS_CPUCFGR_ND, CGEN_MODE_UDI, 0, 0, 0 }, - { OUTPUT, "pc", HW_H_PC, CGEN_MODE_UDI, 0, 0, 0 }, + { INPUT, "rB", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RB), 0, 0 }, + { INPUT, "sys_cpucfgr_nd", HW_H_SYS_CPUCFGR_ND, CGEN_MODE_USI, 0, 0, 0 }, + { OUTPUT, "pc", HW_H_PC, CGEN_MODE_USI, 0, 0, 0 }, { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 } }; static const CGEN_OPINST sfmt_l_jalr_ops[] ATTRIBUTE_UNUSED = { - { INPUT, "pc", HW_H_PC, CGEN_MODE_UDI, 0, 0, 0 }, - { INPUT, "rB", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RB), 0, 0 }, - { INPUT, "sys_cpucfgr_nd", HW_H_SYS_CPUCFGR_ND, CGEN_MODE_UDI, 0, 0, 0 }, - { OUTPUT, "h_gpr_UDI_9", HW_H_GPR, CGEN_MODE_UDI, 0, 9, 0 }, - { OUTPUT, "pc", HW_H_PC, CGEN_MODE_UDI, 0, 0, 0 }, + { INPUT, "pc", HW_H_PC, CGEN_MODE_USI, 0, 0, 0 }, + { INPUT, "rB", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RB), 0, 0 }, + { INPUT, "sys_cpucfgr_nd", HW_H_SYS_CPUCFGR_ND, CGEN_MODE_USI, 0, 0, 0 }, + { OUTPUT, "h_gpr_USI_9", HW_H_GPR, CGEN_MODE_USI, 0, 9, 0 }, + { OUTPUT, "pc", HW_H_PC, CGEN_MODE_USI, 0, 0, 0 }, { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 } }; static const CGEN_OPINST sfmt_l_bnf_ops[] ATTRIBUTE_UNUSED = { - { INPUT, "disp26", HW_H_IADDR, CGEN_MODE_UDI, OP_ENT (DISP26), 0, COND_REF }, - { INPUT, "pc", HW_H_PC, CGEN_MODE_UDI, 0, 0, COND_REF }, - { INPUT, "sys_cpucfgr_nd", HW_H_SYS_CPUCFGR_ND, CGEN_MODE_UDI, 0, 0, COND_REF }, - { INPUT, "sys_sr_f", HW_H_SYS_SR_F, CGEN_MODE_UDI, 0, 0, 0 }, - { OUTPUT, "pc", HW_H_PC, CGEN_MODE_UDI, 0, 0, COND_REF }, + { INPUT, "disp26", HW_H_IADDR, CGEN_MODE_USI, OP_ENT (DISP26), 0, COND_REF }, + { INPUT, "pc", HW_H_PC, CGEN_MODE_USI, 0, 0, COND_REF }, + { INPUT, "sys_cpucfgr_nd", HW_H_SYS_CPUCFGR_ND, CGEN_MODE_USI, 0, 0, COND_REF }, + { INPUT, "sys_sr_f", HW_H_SYS_SR_F, CGEN_MODE_USI, 0, 0, 0 }, + { OUTPUT, "pc", HW_H_PC, CGEN_MODE_USI, 0, 0, COND_REF }, { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 } }; static const CGEN_OPINST sfmt_l_trap_ops[] ATTRIBUTE_UNUSED = { - { INPUT, "pc", HW_H_PC, CGEN_MODE_UDI, 0, 0, 0 }, + { INPUT, "pc", HW_H_PC, CGEN_MODE_USI, 0, 0, 0 }, { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 } }; @@ -105,94 +105,94 @@ static const CGEN_OPINST sfmt_l_movhi_ops[] ATTRIBUTE_UNUSED = { { INPUT, "uimm16", HW_H_UIMM16, CGEN_MODE_UINT, OP_ENT (UIMM16), 0, 0 }, - { OUTPUT, "rD", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RD), 0, 0 }, + { OUTPUT, "rD", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RD), 0, 0 }, { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 } }; static const CGEN_OPINST sfmt_l_macrc_ops[] ATTRIBUTE_UNUSED = { - { INPUT, "mac_maclo", HW_H_MAC_MACLO, CGEN_MODE_UDI, 0, 0, 0 }, - { OUTPUT, "mac_machi", HW_H_MAC_MACHI, CGEN_MODE_UDI, 0, 0, 0 }, - { OUTPUT, "mac_maclo", HW_H_MAC_MACLO, CGEN_MODE_UDI, 0, 0, 0 }, - { OUTPUT, "rD", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RD), 0, 0 }, + { INPUT, "mac_maclo", HW_H_MAC_MACLO, CGEN_MODE_USI, 0, 0, 0 }, + { OUTPUT, "mac_machi", HW_H_MAC_MACHI, CGEN_MODE_USI, 0, 0, 0 }, + { OUTPUT, "mac_maclo", HW_H_MAC_MACLO, CGEN_MODE_USI, 0, 0, 0 }, + { OUTPUT, "rD", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RD), 0, 0 }, { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 } }; static const CGEN_OPINST sfmt_l_mfspr_ops[] ATTRIBUTE_UNUSED = { - { INPUT, "rA", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RA), 0, 0 }, + { INPUT, "rA", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RA), 0, 0 }, { INPUT, "uimm16", HW_H_UIMM16, CGEN_MODE_UINT, OP_ENT (UIMM16), 0, 0 }, - { OUTPUT, "rD", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RD), 0, 0 }, + { OUTPUT, "rD", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RD), 0, 0 }, { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 } }; static const CGEN_OPINST sfmt_l_mtspr_ops[] ATTRIBUTE_UNUSED = { - { INPUT, "rA", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RA), 0, 0 }, - { INPUT, "rB", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RB), 0, 0 }, + { INPUT, "rA", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RA), 0, 0 }, + { INPUT, "rB", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RB), 0, 0 }, { INPUT, "uimm16_split", HW_H_UIMM16, CGEN_MODE_UINT, OP_ENT (UIMM16_SPLIT), 0, 0 }, { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 } }; static const CGEN_OPINST sfmt_l_lwz_ops[] ATTRIBUTE_UNUSED = { { INPUT, "h_memory_USI_c_call__AI_@cpu@_make_load_store_addr_rA_ext__SI_simm16_4", HW_H_MEMORY, CGEN_MODE_USI, 0, 0, 0 }, - { INPUT, "rA", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RA), 0, 0 }, + { INPUT, "rA", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RA), 0, 0 }, { INPUT, "simm16", HW_H_SIMM16, CGEN_MODE_INT, OP_ENT (SIMM16), 0, 0 }, - { OUTPUT, "rD", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RD), 0, 0 }, + { OUTPUT, "rD", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RD), 0, 0 }, { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 } }; static const CGEN_OPINST sfmt_l_lws_ops[] ATTRIBUTE_UNUSED = { { INPUT, "h_memory_SI_c_call__AI_@cpu@_make_load_store_addr_rA_ext__SI_simm16_4", HW_H_MEMORY, CGEN_MODE_SI, 0, 0, 0 }, - { INPUT, "rA", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RA), 0, 0 }, + { INPUT, "rA", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RA), 0, 0 }, { INPUT, "simm16", HW_H_SIMM16, CGEN_MODE_INT, OP_ENT (SIMM16), 0, 0 }, - { OUTPUT, "rD", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RD), 0, 0 }, + { OUTPUT, "rD", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RD), 0, 0 }, { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 } }; static const CGEN_OPINST sfmt_l_lwa_ops[] ATTRIBUTE_UNUSED = { { INPUT, "h_memory_USI_c_call__AI_@cpu@_make_load_store_addr_rA_ext__SI_simm16_4", HW_H_MEMORY, CGEN_MODE_USI, 0, 0, 0 }, - { INPUT, "rA", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RA), 0, 0 }, + { INPUT, "rA", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RA), 0, 0 }, { INPUT, "simm16", HW_H_SIMM16, CGEN_MODE_INT, OP_ENT (SIMM16), 0, 0 }, { OUTPUT, "atomic_address", HW_H_ATOMIC_ADDRESS, CGEN_MODE_SI, 0, 0, 0 }, { OUTPUT, "atomic_reserve", HW_H_ATOMIC_RESERVE, CGEN_MODE_BI, 0, 0, 0 }, - { OUTPUT, "rD", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RD), 0, 0 }, + { OUTPUT, "rD", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RD), 0, 0 }, { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 } }; static const CGEN_OPINST sfmt_l_lbz_ops[] ATTRIBUTE_UNUSED = { { INPUT, "h_memory_UQI_c_call__AI_@cpu@_make_load_store_addr_rA_ext__SI_simm16_1", HW_H_MEMORY, CGEN_MODE_UQI, 0, 0, 0 }, - { INPUT, "rA", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RA), 0, 0 }, + { INPUT, "rA", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RA), 0, 0 }, { INPUT, "simm16", HW_H_SIMM16, CGEN_MODE_INT, OP_ENT (SIMM16), 0, 0 }, - { OUTPUT, "rD", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RD), 0, 0 }, + { OUTPUT, "rD", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RD), 0, 0 }, { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 } }; static const CGEN_OPINST sfmt_l_lbs_ops[] ATTRIBUTE_UNUSED = { { INPUT, "h_memory_QI_c_call__AI_@cpu@_make_load_store_addr_rA_ext__SI_simm16_1", HW_H_MEMORY, CGEN_MODE_QI, 0, 0, 0 }, - { INPUT, "rA", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RA), 0, 0 }, + { INPUT, "rA", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RA), 0, 0 }, { INPUT, "simm16", HW_H_SIMM16, CGEN_MODE_INT, OP_ENT (SIMM16), 0, 0 }, - { OUTPUT, "rD", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RD), 0, 0 }, + { OUTPUT, "rD", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RD), 0, 0 }, { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 } }; static const CGEN_OPINST sfmt_l_lhz_ops[] ATTRIBUTE_UNUSED = { { INPUT, "h_memory_UHI_c_call__AI_@cpu@_make_load_store_addr_rA_ext__SI_simm16_2", HW_H_MEMORY, CGEN_MODE_UHI, 0, 0, 0 }, - { INPUT, "rA", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RA), 0, 0 }, + { INPUT, "rA", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RA), 0, 0 }, { INPUT, "simm16", HW_H_SIMM16, CGEN_MODE_INT, OP_ENT (SIMM16), 0, 0 }, - { OUTPUT, "rD", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RD), 0, 0 }, + { OUTPUT, "rD", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RD), 0, 0 }, { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 } }; static const CGEN_OPINST sfmt_l_lhs_ops[] ATTRIBUTE_UNUSED = { { INPUT, "h_memory_HI_c_call__AI_@cpu@_make_load_store_addr_rA_ext__SI_simm16_2", HW_H_MEMORY, CGEN_MODE_HI, 0, 0, 0 }, - { INPUT, "rA", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RA), 0, 0 }, + { INPUT, "rA", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RA), 0, 0 }, { INPUT, "simm16", HW_H_SIMM16, CGEN_MODE_INT, OP_ENT (SIMM16), 0, 0 }, - { OUTPUT, "rD", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RD), 0, 0 }, + { OUTPUT, "rD", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RD), 0, 0 }, { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 } }; static const CGEN_OPINST sfmt_l_sw_ops[] ATTRIBUTE_UNUSED = { { INPUT, "atomic_address", HW_H_ATOMIC_ADDRESS, CGEN_MODE_SI, 0, 0, 0 }, - { INPUT, "rA", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RA), 0, 0 }, - { INPUT, "rB", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RB), 0, 0 }, + { INPUT, "rA", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RA), 0, 0 }, + { INPUT, "rB", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RB), 0, 0 }, { INPUT, "simm16_split", HW_H_SIMM16, CGEN_MODE_INT, OP_ENT (SIMM16_SPLIT), 0, 0 }, { OUTPUT, "atomic_reserve", HW_H_ATOMIC_RESERVE, CGEN_MODE_BI, 0, 0, COND_REF }, { OUTPUT, "h_memory_USI_addr", HW_H_MEMORY, CGEN_MODE_USI, 0, 0, 0 }, @@ -201,8 +201,8 @@ static const CGEN_OPINST sfmt_l_sb_ops[] ATTRIBUTE_UNUSED = { { INPUT, "atomic_address", HW_H_ATOMIC_ADDRESS, CGEN_MODE_SI, 0, 0, 0 }, - { INPUT, "rA", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RA), 0, 0 }, - { INPUT, "rB", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RB), 0, 0 }, + { INPUT, "rA", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RA), 0, 0 }, + { INPUT, "rB", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RB), 0, 0 }, { INPUT, "simm16_split", HW_H_SIMM16, CGEN_MODE_INT, OP_ENT (SIMM16_SPLIT), 0, 0 }, { OUTPUT, "atomic_reserve", HW_H_ATOMIC_RESERVE, CGEN_MODE_BI, 0, 0, COND_REF }, { OUTPUT, "h_memory_UQI_addr", HW_H_MEMORY, CGEN_MODE_UQI, 0, 0, 0 }, @@ -211,8 +211,8 @@ static const CGEN_OPINST sfmt_l_sh_ops[] ATTRIBUTE_UNUSED = { { INPUT, "atomic_address", HW_H_ATOMIC_ADDRESS, CGEN_MODE_SI, 0, 0, 0 }, - { INPUT, "rA", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RA), 0, 0 }, - { INPUT, "rB", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RB), 0, 0 }, + { INPUT, "rA", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RA), 0, 0 }, + { INPUT, "rB", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RB), 0, 0 }, { INPUT, "simm16_split", HW_H_SIMM16, CGEN_MODE_INT, OP_ENT (SIMM16_SPLIT), 0, 0 }, { OUTPUT, "atomic_reserve", HW_H_ATOMIC_RESERVE, CGEN_MODE_BI, 0, 0, COND_REF }, { OUTPUT, "h_memory_UHI_addr", HW_H_MEMORY, CGEN_MODE_UHI, 0, 0, 0 }, @@ -222,228 +222,228 @@ static const CGEN_OPINST sfmt_l_swa_ops[] ATTRIBUTE_UNUSED = { { INPUT, "atomic_address", HW_H_ATOMIC_ADDRESS, CGEN_MODE_SI, 0, 0, 0 }, { INPUT, "atomic_reserve", HW_H_ATOMIC_RESERVE, CGEN_MODE_BI, 0, 0, 0 }, - { INPUT, "rA", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RA), 0, 0 }, - { INPUT, "rB", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RB), 0, COND_REF }, + { INPUT, "rA", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RA), 0, 0 }, + { INPUT, "rB", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RB), 0, COND_REF }, { INPUT, "simm16_split", HW_H_SIMM16, CGEN_MODE_INT, OP_ENT (SIMM16_SPLIT), 0, 0 }, - { INPUT, "sys_sr_f", HW_H_SYS_SR_F, CGEN_MODE_UDI, 0, 0, 0 }, + { INPUT, "sys_sr_f", HW_H_SYS_SR_F, CGEN_MODE_USI, 0, 0, 0 }, { OUTPUT, "atomic_reserve", HW_H_ATOMIC_RESERVE, CGEN_MODE_BI, 0, 0, 0 }, { OUTPUT, "h_memory_USI_addr", HW_H_MEMORY, CGEN_MODE_USI, 0, 0, COND_REF }, - { OUTPUT, "sys_sr_f", HW_H_SYS_SR_F, CGEN_MODE_UDI, 0, 0, 0 }, + { OUTPUT, "sys_sr_f", HW_H_SYS_SR_F, CGEN_MODE_USI, 0, 0, 0 }, { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 } }; static const CGEN_OPINST sfmt_l_sll_ops[] ATTRIBUTE_UNUSED = { - { INPUT, "rA", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RA), 0, 0 }, - { INPUT, "rB", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RB), 0, 0 }, - { OUTPUT, "rD", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RD), 0, 0 }, + { INPUT, "rA", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RA), 0, 0 }, + { INPUT, "rB", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RB), 0, 0 }, + { OUTPUT, "rD", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RD), 0, 0 }, { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 } }; static const CGEN_OPINST sfmt_l_slli_ops[] ATTRIBUTE_UNUSED = { - { INPUT, "rA", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RA), 0, 0 }, + { INPUT, "rA", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RA), 0, 0 }, { INPUT, "uimm6", HW_H_UIMM6, CGEN_MODE_UINT, OP_ENT (UIMM6), 0, 0 }, - { OUTPUT, "rD", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RD), 0, 0 }, + { OUTPUT, "rD", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RD), 0, 0 }, { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 } }; static const CGEN_OPINST sfmt_l_and_ops[] ATTRIBUTE_UNUSED = { - { INPUT, "rA", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RA), 0, 0 }, - { INPUT, "rB", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RB), 0, 0 }, - { OUTPUT, "rD", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RD), 0, 0 }, + { INPUT, "rA", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RA), 0, 0 }, + { INPUT, "rB", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RB), 0, 0 }, + { OUTPUT, "rD", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RD), 0, 0 }, { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 } }; static const CGEN_OPINST sfmt_l_add_ops[] ATTRIBUTE_UNUSED = { - { INPUT, "pc", HW_H_PC, CGEN_MODE_UDI, 0, 0, COND_REF }, - { INPUT, "rA", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RA), 0, 0 }, - { INPUT, "rB", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RB), 0, 0 }, - { INPUT, "sys_sr_ov", HW_H_SYS_SR_OV, CGEN_MODE_UDI, 0, 0, 0 }, - { INPUT, "sys_sr_ove", HW_H_SYS_SR_OVE, CGEN_MODE_UDI, 0, 0, 0 }, - { OUTPUT, "rD", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RD), 0, 0 }, - { OUTPUT, "sys_sr_cy", HW_H_SYS_SR_CY, CGEN_MODE_UDI, 0, 0, 0 }, - { OUTPUT, "sys_sr_ov", HW_H_SYS_SR_OV, CGEN_MODE_UDI, 0, 0, 0 }, + { INPUT, "pc", HW_H_PC, CGEN_MODE_USI, 0, 0, COND_REF }, + { INPUT, "rA", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RA), 0, 0 }, + { INPUT, "rB", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RB), 0, 0 }, + { INPUT, "sys_sr_ov", HW_H_SYS_SR_OV, CGEN_MODE_USI, 0, 0, 0 }, + { INPUT, "sys_sr_ove", HW_H_SYS_SR_OVE, CGEN_MODE_USI, 0, 0, 0 }, + { OUTPUT, "rD", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RD), 0, 0 }, + { OUTPUT, "sys_sr_cy", HW_H_SYS_SR_CY, CGEN_MODE_USI, 0, 0, 0 }, + { OUTPUT, "sys_sr_ov", HW_H_SYS_SR_OV, CGEN_MODE_USI, 0, 0, 0 }, { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 } }; static const CGEN_OPINST sfmt_l_addc_ops[] ATTRIBUTE_UNUSED = { - { INPUT, "pc", HW_H_PC, CGEN_MODE_UDI, 0, 0, COND_REF }, - { INPUT, "rA", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RA), 0, 0 }, - { INPUT, "rB", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RB), 0, 0 }, - { INPUT, "sys_sr_cy", HW_H_SYS_SR_CY, CGEN_MODE_UDI, 0, 0, 0 }, - { INPUT, "sys_sr_ov", HW_H_SYS_SR_OV, CGEN_MODE_UDI, 0, 0, 0 }, - { INPUT, "sys_sr_ove", HW_H_SYS_SR_OVE, CGEN_MODE_UDI, 0, 0, 0 }, - { OUTPUT, "rD", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RD), 0, 0 }, - { OUTPUT, "sys_sr_cy", HW_H_SYS_SR_CY, CGEN_MODE_UDI, 0, 0, 0 }, - { OUTPUT, "sys_sr_ov", HW_H_SYS_SR_OV, CGEN_MODE_UDI, 0, 0, 0 }, + { INPUT, "pc", HW_H_PC, CGEN_MODE_USI, 0, 0, COND_REF }, + { INPUT, "rA", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RA), 0, 0 }, + { INPUT, "rB", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RB), 0, 0 }, + { INPUT, "sys_sr_cy", HW_H_SYS_SR_CY, CGEN_MODE_USI, 0, 0, 0 }, + { INPUT, "sys_sr_ov", HW_H_SYS_SR_OV, CGEN_MODE_USI, 0, 0, 0 }, + { INPUT, "sys_sr_ove", HW_H_SYS_SR_OVE, CGEN_MODE_USI, 0, 0, 0 }, + { OUTPUT, "rD", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RD), 0, 0 }, + { OUTPUT, "sys_sr_cy", HW_H_SYS_SR_CY, CGEN_MODE_USI, 0, 0, 0 }, + { OUTPUT, "sys_sr_ov", HW_H_SYS_SR_OV, CGEN_MODE_USI, 0, 0, 0 }, { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 } }; static const CGEN_OPINST sfmt_l_mul_ops[] ATTRIBUTE_UNUSED = { - { INPUT, "pc", HW_H_PC, CGEN_MODE_UDI, 0, 0, COND_REF }, - { INPUT, "rA", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RA), 0, 0 }, - { INPUT, "rB", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RB), 0, 0 }, - { INPUT, "sys_sr_ov", HW_H_SYS_SR_OV, CGEN_MODE_UDI, 0, 0, 0 }, - { INPUT, "sys_sr_ove", HW_H_SYS_SR_OVE, CGEN_MODE_UDI, 0, 0, 0 }, - { OUTPUT, "rD", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RD), 0, 0 }, - { OUTPUT, "sys_sr_ov", HW_H_SYS_SR_OV, CGEN_MODE_UDI, 0, 0, 0 }, + { INPUT, "pc", HW_H_PC, CGEN_MODE_USI, 0, 0, COND_REF }, + { INPUT, "rA", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RA), 0, 0 }, + { INPUT, "rB", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RB), 0, 0 }, + { INPUT, "sys_sr_ov", HW_H_SYS_SR_OV, CGEN_MODE_USI, 0, 0, 0 }, + { INPUT, "sys_sr_ove", HW_H_SYS_SR_OVE, CGEN_MODE_USI, 0, 0, 0 }, + { OUTPUT, "rD", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RD), 0, 0 }, + { OUTPUT, "sys_sr_ov", HW_H_SYS_SR_OV, CGEN_MODE_USI, 0, 0, 0 }, { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 } }; static const CGEN_OPINST sfmt_l_muld_ops[] ATTRIBUTE_UNUSED = { - { INPUT, "rA", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RA), 0, 0 }, - { INPUT, "rB", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RB), 0, 0 }, - { OUTPUT, "mac_machi", HW_H_MAC_MACHI, CGEN_MODE_UDI, 0, 0, 0 }, - { OUTPUT, "mac_maclo", HW_H_MAC_MACLO, CGEN_MODE_UDI, 0, 0, 0 }, + { INPUT, "rA", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RA), 0, 0 }, + { INPUT, "rB", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RB), 0, 0 }, + { OUTPUT, "mac_machi", HW_H_MAC_MACHI, CGEN_MODE_USI, 0, 0, 0 }, + { OUTPUT, "mac_maclo", HW_H_MAC_MACLO, CGEN_MODE_USI, 0, 0, 0 }, { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 } }; static const CGEN_OPINST sfmt_l_mulu_ops[] ATTRIBUTE_UNUSED = { - { INPUT, "pc", HW_H_PC, CGEN_MODE_UDI, 0, 0, COND_REF }, - { INPUT, "rA", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RA), 0, 0 }, - { INPUT, "rB", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RB), 0, 0 }, - { INPUT, "sys_sr_cy", HW_H_SYS_SR_CY, CGEN_MODE_UDI, 0, 0, 0 }, - { INPUT, "sys_sr_ove", HW_H_SYS_SR_OVE, CGEN_MODE_UDI, 0, 0, 0 }, - { OUTPUT, "rD", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RD), 0, 0 }, - { OUTPUT, "sys_sr_cy", HW_H_SYS_SR_CY, CGEN_MODE_UDI, 0, 0, 0 }, + { INPUT, "pc", HW_H_PC, CGEN_MODE_USI, 0, 0, COND_REF }, + { INPUT, "rA", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RA), 0, 0 }, + { INPUT, "rB", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RB), 0, 0 }, + { INPUT, "sys_sr_cy", HW_H_SYS_SR_CY, CGEN_MODE_USI, 0, 0, 0 }, + { INPUT, "sys_sr_ove", HW_H_SYS_SR_OVE, CGEN_MODE_USI, 0, 0, 0 }, + { OUTPUT, "rD", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RD), 0, 0 }, + { OUTPUT, "sys_sr_cy", HW_H_SYS_SR_CY, CGEN_MODE_USI, 0, 0, 0 }, { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 } }; static const CGEN_OPINST sfmt_l_div_ops[] ATTRIBUTE_UNUSED = { - { INPUT, "pc", HW_H_PC, CGEN_MODE_UDI, 0, 0, COND_REF }, - { INPUT, "rA", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RA), 0, COND_REF }, - { INPUT, "rB", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RB), 0, 0 }, - { INPUT, "sys_sr_ove", HW_H_SYS_SR_OVE, CGEN_MODE_UDI, 0, 0, COND_REF }, - { OUTPUT, "rD", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RD), 0, COND_REF }, - { OUTPUT, "sys_sr_ov", HW_H_SYS_SR_OV, CGEN_MODE_UDI, 0, 0, COND_REF }, + { INPUT, "pc", HW_H_PC, CGEN_MODE_USI, 0, 0, COND_REF }, + { INPUT, "rA", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RA), 0, COND_REF }, + { INPUT, "rB", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RB), 0, 0 }, + { INPUT, "sys_sr_ove", HW_H_SYS_SR_OVE, CGEN_MODE_USI, 0, 0, COND_REF }, + { OUTPUT, "rD", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RD), 0, COND_REF }, + { OUTPUT, "sys_sr_ov", HW_H_SYS_SR_OV, CGEN_MODE_USI, 0, 0, COND_REF }, { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 } }; static const CGEN_OPINST sfmt_l_divu_ops[] ATTRIBUTE_UNUSED = { - { INPUT, "pc", HW_H_PC, CGEN_MODE_UDI, 0, 0, COND_REF }, - { INPUT, "rA", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RA), 0, COND_REF }, - { INPUT, "rB", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RB), 0, 0 }, - { INPUT, "sys_sr_ove", HW_H_SYS_SR_OVE, CGEN_MODE_UDI, 0, 0, COND_REF }, - { OUTPUT, "rD", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RD), 0, COND_REF }, - { OUTPUT, "sys_sr_cy", HW_H_SYS_SR_CY, CGEN_MODE_UDI, 0, 0, COND_REF }, + { INPUT, "pc", HW_H_PC, CGEN_MODE_USI, 0, 0, COND_REF }, + { INPUT, "rA", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RA), 0, COND_REF }, + { INPUT, "rB", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RB), 0, 0 }, + { INPUT, "sys_sr_ove", HW_H_SYS_SR_OVE, CGEN_MODE_USI, 0, 0, COND_REF }, + { OUTPUT, "rD", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RD), 0, COND_REF }, + { OUTPUT, "sys_sr_cy", HW_H_SYS_SR_CY, CGEN_MODE_USI, 0, 0, COND_REF }, { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 } }; static const CGEN_OPINST sfmt_l_ff1_ops[] ATTRIBUTE_UNUSED = { - { INPUT, "rA", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RA), 0, 0 }, - { OUTPUT, "rD", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RD), 0, 0 }, + { INPUT, "rA", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RA), 0, 0 }, + { OUTPUT, "rD", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RD), 0, 0 }, { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 } }; static const CGEN_OPINST sfmt_l_xori_ops[] ATTRIBUTE_UNUSED = { - { INPUT, "rA", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RA), 0, 0 }, + { INPUT, "rA", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RA), 0, 0 }, { INPUT, "simm16", HW_H_SIMM16, CGEN_MODE_INT, OP_ENT (SIMM16), 0, 0 }, - { OUTPUT, "rD", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RD), 0, 0 }, + { OUTPUT, "rD", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RD), 0, 0 }, { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 } }; static const CGEN_OPINST sfmt_l_addi_ops[] ATTRIBUTE_UNUSED = { - { INPUT, "pc", HW_H_PC, CGEN_MODE_UDI, 0, 0, COND_REF }, - { INPUT, "rA", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RA), 0, 0 }, + { INPUT, "pc", HW_H_PC, CGEN_MODE_USI, 0, 0, COND_REF }, + { INPUT, "rA", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RA), 0, 0 }, { INPUT, "simm16", HW_H_SIMM16, CGEN_MODE_INT, OP_ENT (SIMM16), 0, 0 }, - { INPUT, "sys_sr_ov", HW_H_SYS_SR_OV, CGEN_MODE_UDI, 0, 0, 0 }, - { INPUT, "sys_sr_ove", HW_H_SYS_SR_OVE, CGEN_MODE_UDI, 0, 0, 0 }, - { OUTPUT, "rD", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RD), 0, 0 }, - { OUTPUT, "sys_sr_cy", HW_H_SYS_SR_CY, CGEN_MODE_UDI, 0, 0, 0 }, - { OUTPUT, "sys_sr_ov", HW_H_SYS_SR_OV, CGEN_MODE_UDI, 0, 0, 0 }, + { INPUT, "sys_sr_ov", HW_H_SYS_SR_OV, CGEN_MODE_USI, 0, 0, 0 }, + { INPUT, "sys_sr_ove", HW_H_SYS_SR_OVE, CGEN_MODE_USI, 0, 0, 0 }, + { OUTPUT, "rD", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RD), 0, 0 }, + { OUTPUT, "sys_sr_cy", HW_H_SYS_SR_CY, CGEN_MODE_USI, 0, 0, 0 }, + { OUTPUT, "sys_sr_ov", HW_H_SYS_SR_OV, CGEN_MODE_USI, 0, 0, 0 }, { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 } }; static const CGEN_OPINST sfmt_l_addic_ops[] ATTRIBUTE_UNUSED = { - { INPUT, "pc", HW_H_PC, CGEN_MODE_UDI, 0, 0, COND_REF }, - { INPUT, "rA", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RA), 0, 0 }, + { INPUT, "pc", HW_H_PC, CGEN_MODE_USI, 0, 0, COND_REF }, + { INPUT, "rA", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RA), 0, 0 }, { INPUT, "simm16", HW_H_SIMM16, CGEN_MODE_INT, OP_ENT (SIMM16), 0, 0 }, - { INPUT, "sys_sr_cy", HW_H_SYS_SR_CY, CGEN_MODE_UDI, 0, 0, 0 }, - { INPUT, "sys_sr_ov", HW_H_SYS_SR_OV, CGEN_MODE_UDI, 0, 0, 0 }, - { INPUT, "sys_sr_ove", HW_H_SYS_SR_OVE, CGEN_MODE_UDI, 0, 0, 0 }, - { OUTPUT, "rD", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RD), 0, 0 }, - { OUTPUT, "sys_sr_cy", HW_H_SYS_SR_CY, CGEN_MODE_UDI, 0, 0, 0 }, - { OUTPUT, "sys_sr_ov", HW_H_SYS_SR_OV, CGEN_MODE_UDI, 0, 0, 0 }, + { INPUT, "sys_sr_cy", HW_H_SYS_SR_CY, CGEN_MODE_USI, 0, 0, 0 }, + { INPUT, "sys_sr_ov", HW_H_SYS_SR_OV, CGEN_MODE_USI, 0, 0, 0 }, + { INPUT, "sys_sr_ove", HW_H_SYS_SR_OVE, CGEN_MODE_USI, 0, 0, 0 }, + { OUTPUT, "rD", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RD), 0, 0 }, + { OUTPUT, "sys_sr_cy", HW_H_SYS_SR_CY, CGEN_MODE_USI, 0, 0, 0 }, + { OUTPUT, "sys_sr_ov", HW_H_SYS_SR_OV, CGEN_MODE_USI, 0, 0, 0 }, { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 } }; static const CGEN_OPINST sfmt_l_muli_ops[] ATTRIBUTE_UNUSED = { - { INPUT, "pc", HW_H_PC, CGEN_MODE_UDI, 0, 0, COND_REF }, - { INPUT, "rA", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RA), 0, 0 }, + { INPUT, "pc", HW_H_PC, CGEN_MODE_USI, 0, 0, COND_REF }, + { INPUT, "rA", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RA), 0, 0 }, { INPUT, "simm16", HW_H_SIMM16, CGEN_MODE_INT, OP_ENT (SIMM16), 0, 0 }, - { INPUT, "sys_sr_ov", HW_H_SYS_SR_OV, CGEN_MODE_UDI, 0, 0, 0 }, - { INPUT, "sys_sr_ove", HW_H_SYS_SR_OVE, CGEN_MODE_UDI, 0, 0, 0 }, - { OUTPUT, "rD", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RD), 0, 0 }, - { OUTPUT, "sys_sr_ov", HW_H_SYS_SR_OV, CGEN_MODE_UDI, 0, 0, 0 }, + { INPUT, "sys_sr_ov", HW_H_SYS_SR_OV, CGEN_MODE_USI, 0, 0, 0 }, + { INPUT, "sys_sr_ove", HW_H_SYS_SR_OVE, CGEN_MODE_USI, 0, 0, 0 }, + { OUTPUT, "rD", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RD), 0, 0 }, + { OUTPUT, "sys_sr_ov", HW_H_SYS_SR_OV, CGEN_MODE_USI, 0, 0, 0 }, { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 } }; static const CGEN_OPINST sfmt_l_exths_ops[] ATTRIBUTE_UNUSED = { - { INPUT, "rA", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RA), 0, 0 }, - { OUTPUT, "rD", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RD), 0, 0 }, + { INPUT, "rA", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RA), 0, 0 }, + { OUTPUT, "rD", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RD), 0, 0 }, { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 } }; static const CGEN_OPINST sfmt_l_cmov_ops[] ATTRIBUTE_UNUSED = { - { INPUT, "rA", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RA), 0, COND_REF }, - { INPUT, "rB", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RB), 0, COND_REF }, - { INPUT, "sys_sr_f", HW_H_SYS_SR_F, CGEN_MODE_UDI, 0, 0, 0 }, - { OUTPUT, "rD", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RD), 0, COND_REF }, + { INPUT, "rA", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RA), 0, COND_REF }, + { INPUT, "rB", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RB), 0, COND_REF }, + { INPUT, "sys_sr_f", HW_H_SYS_SR_F, CGEN_MODE_USI, 0, 0, 0 }, + { OUTPUT, "rD", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RD), 0, COND_REF }, { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 } }; static const CGEN_OPINST sfmt_l_sfgts_ops[] ATTRIBUTE_UNUSED = { - { INPUT, "rA", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RA), 0, 0 }, - { INPUT, "rB", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RB), 0, 0 }, - { OUTPUT, "sys_sr_f", HW_H_SYS_SR_F, CGEN_MODE_UDI, 0, 0, 0 }, + { INPUT, "rA", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RA), 0, 0 }, + { INPUT, "rB", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RB), 0, 0 }, + { OUTPUT, "sys_sr_f", HW_H_SYS_SR_F, CGEN_MODE_USI, 0, 0, 0 }, { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 } }; static const CGEN_OPINST sfmt_l_sfgtsi_ops[] ATTRIBUTE_UNUSED = { - { INPUT, "rA", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RA), 0, 0 }, + { INPUT, "rA", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RA), 0, 0 }, { INPUT, "simm16", HW_H_SIMM16, CGEN_MODE_INT, OP_ENT (SIMM16), 0, 0 }, - { OUTPUT, "sys_sr_f", HW_H_SYS_SR_F, CGEN_MODE_UDI, 0, 0, 0 }, + { OUTPUT, "sys_sr_f", HW_H_SYS_SR_F, CGEN_MODE_USI, 0, 0, 0 }, { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 } }; static const CGEN_OPINST sfmt_l_mac_ops[] ATTRIBUTE_UNUSED = { - { INPUT, "mac_machi", HW_H_MAC_MACHI, CGEN_MODE_UDI, 0, 0, 0 }, - { INPUT, "mac_maclo", HW_H_MAC_MACLO, CGEN_MODE_UDI, 0, 0, 0 }, - { INPUT, "pc", HW_H_PC, CGEN_MODE_UDI, 0, 0, COND_REF }, - { INPUT, "rA", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RA), 0, 0 }, - { INPUT, "rB", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RB), 0, 0 }, - { INPUT, "sys_sr_ov", HW_H_SYS_SR_OV, CGEN_MODE_UDI, 0, 0, 0 }, - { INPUT, "sys_sr_ove", HW_H_SYS_SR_OVE, CGEN_MODE_UDI, 0, 0, 0 }, - { OUTPUT, "mac_machi", HW_H_MAC_MACHI, CGEN_MODE_UDI, 0, 0, 0 }, - { OUTPUT, "mac_maclo", HW_H_MAC_MACLO, CGEN_MODE_UDI, 0, 0, 0 }, - { OUTPUT, "sys_sr_ov", HW_H_SYS_SR_OV, CGEN_MODE_UDI, 0, 0, 0 }, + { INPUT, "mac_machi", HW_H_MAC_MACHI, CGEN_MODE_USI, 0, 0, 0 }, + { INPUT, "mac_maclo", HW_H_MAC_MACLO, CGEN_MODE_USI, 0, 0, 0 }, + { INPUT, "pc", HW_H_PC, CGEN_MODE_USI, 0, 0, COND_REF }, + { INPUT, "rA", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RA), 0, 0 }, + { INPUT, "rB", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RB), 0, 0 }, + { INPUT, "sys_sr_ov", HW_H_SYS_SR_OV, CGEN_MODE_USI, 0, 0, 0 }, + { INPUT, "sys_sr_ove", HW_H_SYS_SR_OVE, CGEN_MODE_USI, 0, 0, 0 }, + { OUTPUT, "mac_machi", HW_H_MAC_MACHI, CGEN_MODE_USI, 0, 0, 0 }, + { OUTPUT, "mac_maclo", HW_H_MAC_MACLO, CGEN_MODE_USI, 0, 0, 0 }, + { OUTPUT, "sys_sr_ov", HW_H_SYS_SR_OV, CGEN_MODE_USI, 0, 0, 0 }, { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 } }; static const CGEN_OPINST sfmt_l_maci_ops[] ATTRIBUTE_UNUSED = { - { INPUT, "mac_machi", HW_H_MAC_MACHI, CGEN_MODE_UDI, 0, 0, 0 }, - { INPUT, "mac_maclo", HW_H_MAC_MACLO, CGEN_MODE_UDI, 0, 0, 0 }, - { INPUT, "pc", HW_H_PC, CGEN_MODE_UDI, 0, 0, COND_REF }, - { INPUT, "rA", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RA), 0, 0 }, - { INPUT, "simm16", HW_H_SIMM16, CGEN_MODE_INT, OP_ENT (SIMM16), 0, 0 }, - { INPUT, "sys_sr_ov", HW_H_SYS_SR_OV, CGEN_MODE_UDI, 0, 0, 0 }, - { INPUT, "sys_sr_ove", HW_H_SYS_SR_OVE, CGEN_MODE_UDI, 0, 0, 0 }, - { OUTPUT, "mac_machi", HW_H_MAC_MACHI, CGEN_MODE_UDI, 0, 0, 0 }, - { OUTPUT, "mac_maclo", HW_H_MAC_MACLO, CGEN_MODE_UDI, 0, 0, 0 }, - { OUTPUT, "sys_sr_ov", HW_H_SYS_SR_OV, CGEN_MODE_UDI, 0, 0, 0 }, + { INPUT, "mac_machi", HW_H_MAC_MACHI, CGEN_MODE_USI, 0, 0, 0 }, + { INPUT, "mac_maclo", HW_H_MAC_MACLO, CGEN_MODE_USI, 0, 0, 0 }, + { INPUT, "pc", HW_H_PC, CGEN_MODE_USI, 0, 0, COND_REF }, + { INPUT, "rA", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RA), 0, 0 }, + { INPUT, "simm16", HW_H_SIMM16, CGEN_MODE_INT, OP_ENT (SIMM16), 0, 0 }, + { INPUT, "sys_sr_ov", HW_H_SYS_SR_OV, CGEN_MODE_USI, 0, 0, 0 }, + { INPUT, "sys_sr_ove", HW_H_SYS_SR_OVE, CGEN_MODE_USI, 0, 0, 0 }, + { OUTPUT, "mac_machi", HW_H_MAC_MACHI, CGEN_MODE_USI, 0, 0, 0 }, + { OUTPUT, "mac_maclo", HW_H_MAC_MACLO, CGEN_MODE_USI, 0, 0, 0 }, + { OUTPUT, "sys_sr_ov", HW_H_SYS_SR_OV, CGEN_MODE_USI, 0, 0, 0 }, { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 } }; static const CGEN_OPINST sfmt_l_macu_ops[] ATTRIBUTE_UNUSED = { - { INPUT, "mac_machi", HW_H_MAC_MACHI, CGEN_MODE_UDI, 0, 0, 0 }, - { INPUT, "mac_maclo", HW_H_MAC_MACLO, CGEN_MODE_UDI, 0, 0, 0 }, - { INPUT, "pc", HW_H_PC, CGEN_MODE_UDI, 0, 0, COND_REF }, - { INPUT, "rA", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RA), 0, 0 }, - { INPUT, "rB", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RB), 0, 0 }, - { INPUT, "sys_sr_cy", HW_H_SYS_SR_CY, CGEN_MODE_UDI, 0, 0, 0 }, - { INPUT, "sys_sr_ove", HW_H_SYS_SR_OVE, CGEN_MODE_UDI, 0, 0, 0 }, - { OUTPUT, "mac_machi", HW_H_MAC_MACHI, CGEN_MODE_UDI, 0, 0, 0 }, - { OUTPUT, "mac_maclo", HW_H_MAC_MACLO, CGEN_MODE_UDI, 0, 0, 0 }, - { OUTPUT, "sys_sr_cy", HW_H_SYS_SR_CY, CGEN_MODE_UDI, 0, 0, 0 }, + { INPUT, "mac_machi", HW_H_MAC_MACHI, CGEN_MODE_USI, 0, 0, 0 }, + { INPUT, "mac_maclo", HW_H_MAC_MACLO, CGEN_MODE_USI, 0, 0, 0 }, + { INPUT, "pc", HW_H_PC, CGEN_MODE_USI, 0, 0, COND_REF }, + { INPUT, "rA", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RA), 0, 0 }, + { INPUT, "rB", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RB), 0, 0 }, + { INPUT, "sys_sr_cy", HW_H_SYS_SR_CY, CGEN_MODE_USI, 0, 0, 0 }, + { INPUT, "sys_sr_ove", HW_H_SYS_SR_OVE, CGEN_MODE_USI, 0, 0, 0 }, + { OUTPUT, "mac_machi", HW_H_MAC_MACHI, CGEN_MODE_USI, 0, 0, 0 }, + { OUTPUT, "mac_maclo", HW_H_MAC_MACLO, CGEN_MODE_USI, 0, 0, 0 }, + { OUTPUT, "sys_sr_cy", HW_H_SYS_SR_CY, CGEN_MODE_USI, 0, 0, 0 }, { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 } }; @@ -454,13 +454,6 @@ { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 } }; -static const CGEN_OPINST sfmt_lf_add_d_ops[] ATTRIBUTE_UNUSED = { - { INPUT, "rADF", HW_H_FDR, CGEN_MODE_DF, OP_ENT (RADF), 0, 0 }, - { INPUT, "rBDF", HW_H_FDR, CGEN_MODE_DF, OP_ENT (RBDF), 0, 0 }, - { OUTPUT, "rDDF", HW_H_FDR, CGEN_MODE_DF, OP_ENT (RDDF), 0, 0 }, - { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 } -}; - static const CGEN_OPINST sfmt_lf_add_d32_ops[] ATTRIBUTE_UNUSED = { { INPUT, "rAD32F", HW_H_FD32R, CGEN_MODE_DF, OP_ENT (RAD32F), 0, 0 }, { INPUT, "rBD32F", HW_H_FD32R, CGEN_MODE_DF, OP_ENT (RBD32F), 0, 0 }, @@ -469,43 +462,29 @@ }; static const CGEN_OPINST sfmt_lf_itof_s_ops[] ATTRIBUTE_UNUSED = { - { INPUT, "rA", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RA), 0, 0 }, - { INPUT, "sys_fpcsr_rm", HW_H_SYS_FPCSR_RM, CGEN_MODE_UDI, 0, 0, 0 }, + { INPUT, "rA", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RA), 0, 0 }, + { INPUT, "sys_fpcsr_rm", HW_H_SYS_FPCSR_RM, CGEN_MODE_USI, 0, 0, 0 }, { OUTPUT, "rDSF", HW_H_FSR, CGEN_MODE_SF, OP_ENT (RDSF), 0, 0 }, { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 } }; -static const CGEN_OPINST sfmt_lf_itof_d_ops[] ATTRIBUTE_UNUSED = { - { INPUT, "rA", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RA), 0, 0 }, - { INPUT, "sys_fpcsr_rm", HW_H_SYS_FPCSR_RM, CGEN_MODE_UDI, 0, 0, 0 }, - { OUTPUT, "rDDF", HW_H_FDR, CGEN_MODE_DF, OP_ENT (RDDF), 0, 0 }, - { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 } -}; - static const CGEN_OPINST sfmt_lf_itof_d32_ops[] ATTRIBUTE_UNUSED = { { INPUT, "rADI", HW_H_I64R, CGEN_MODE_DI, OP_ENT (RADI), 0, 0 }, - { INPUT, "sys_fpcsr_rm", HW_H_SYS_FPCSR_RM, CGEN_MODE_UDI, 0, 0, 0 }, + { INPUT, "sys_fpcsr_rm", HW_H_SYS_FPCSR_RM, CGEN_MODE_USI, 0, 0, 0 }, { OUTPUT, "rDD32F", HW_H_FD32R, CGEN_MODE_DF, OP_ENT (RDD32F), 0, 0 }, { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 } }; static const CGEN_OPINST sfmt_lf_ftoi_s_ops[] ATTRIBUTE_UNUSED = { { INPUT, "rASF", HW_H_FSR, CGEN_MODE_SF, OP_ENT (RASF), 0, 0 }, - { INPUT, "sys_fpcsr_rm", HW_H_SYS_FPCSR_RM, CGEN_MODE_UDI, 0, 0, 0 }, - { OUTPUT, "rD", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RD), 0, 0 }, - { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 } -}; - -static const CGEN_OPINST sfmt_lf_ftoi_d_ops[] ATTRIBUTE_UNUSED = { - { INPUT, "rADF", HW_H_FDR, CGEN_MODE_DF, OP_ENT (RADF), 0, 0 }, - { INPUT, "sys_fpcsr_rm", HW_H_SYS_FPCSR_RM, CGEN_MODE_UDI, 0, 0, 0 }, - { OUTPUT, "rD", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RD), 0, 0 }, + { INPUT, "sys_fpcsr_rm", HW_H_SYS_FPCSR_RM, CGEN_MODE_USI, 0, 0, 0 }, + { OUTPUT, "rD", HW_H_GPR, CGEN_MODE_USI, OP_ENT (RD), 0, 0 }, { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 } }; static const CGEN_OPINST sfmt_lf_ftoi_d32_ops[] ATTRIBUTE_UNUSED = { { INPUT, "rAD32F", HW_H_FD32R, CGEN_MODE_DF, OP_ENT (RAD32F), 0, 0 }, - { INPUT, "sys_fpcsr_rm", HW_H_SYS_FPCSR_RM, CGEN_MODE_UDI, 0, 0, 0 }, + { INPUT, "sys_fpcsr_rm", HW_H_SYS_FPCSR_RM, CGEN_MODE_USI, 0, 0, 0 }, { OUTPUT, "rDDI", HW_H_I64R, CGEN_MODE_DI, OP_ENT (RDDI), 0, 0 }, { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 } }; @@ -513,21 +492,14 @@ static const CGEN_OPINST sfmt_lf_sfeq_s_ops[] ATTRIBUTE_UNUSED = { { INPUT, "rASF", HW_H_FSR, CGEN_MODE_SF, OP_ENT (RASF), 0, 0 }, { INPUT, "rBSF", HW_H_FSR, CGEN_MODE_SF, OP_ENT (RBSF), 0, 0 }, - { OUTPUT, "sys_sr_f", HW_H_SYS_SR_F, CGEN_MODE_UDI, 0, 0, 0 }, - { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 } -}; - -static const CGEN_OPINST sfmt_lf_sfeq_d_ops[] ATTRIBUTE_UNUSED = { - { INPUT, "rADF", HW_H_FDR, CGEN_MODE_DF, OP_ENT (RADF), 0, 0 }, - { INPUT, "rBDF", HW_H_FDR, CGEN_MODE_DF, OP_ENT (RBDF), 0, 0 }, - { OUTPUT, "sys_sr_f", HW_H_SYS_SR_F, CGEN_MODE_UDI, 0, 0, 0 }, + { OUTPUT, "sys_sr_f", HW_H_SYS_SR_F, CGEN_MODE_USI, 0, 0, 0 }, { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 } }; static const CGEN_OPINST sfmt_lf_sfeq_d32_ops[] ATTRIBUTE_UNUSED = { { INPUT, "rAD32F", HW_H_FD32R, CGEN_MODE_DF, OP_ENT (RAD32F), 0, 0 }, { INPUT, "rBD32F", HW_H_FD32R, CGEN_MODE_DF, OP_ENT (RBD32F), 0, 0 }, - { OUTPUT, "sys_sr_f", HW_H_SYS_SR_F, CGEN_MODE_UDI, 0, 0, 0 }, + { OUTPUT, "sys_sr_f", HW_H_SYS_SR_F, CGEN_MODE_USI, 0, 0, 0 }, { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 } }; @@ -539,14 +511,6 @@ { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 } }; -static const CGEN_OPINST sfmt_lf_madd_d_ops[] ATTRIBUTE_UNUSED = { - { INPUT, "rADF", HW_H_FDR, CGEN_MODE_DF, OP_ENT (RADF), 0, 0 }, - { INPUT, "rBDF", HW_H_FDR, CGEN_MODE_DF, OP_ENT (RBDF), 0, 0 }, - { INPUT, "rDDF", HW_H_FDR, CGEN_MODE_DF, OP_ENT (RDDF), 0, 0 }, - { OUTPUT, "rDDF", HW_H_FDR, CGEN_MODE_DF, OP_ENT (RDDF), 0, 0 }, - { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 } -}; - static const CGEN_OPINST sfmt_lf_madd_d32_ops[] ATTRIBUTE_UNUSED = { { INPUT, "rAD32F", HW_H_FD32R, CGEN_MODE_DF, OP_ENT (RAD32F), 0, 0 }, { INPUT, "rBD32F", HW_H_FD32R, CGEN_MODE_DF, OP_ENT (RBD32F), 0, 0 }, @@ -664,71 +628,49 @@ & sfmt_l_msync_ops[0], & sfmt_l_msync_ops[0], & sfmt_lf_add_s_ops[0], - & sfmt_lf_add_d_ops[0], & sfmt_lf_add_d32_ops[0], & sfmt_lf_add_s_ops[0], - & sfmt_lf_add_d_ops[0], & sfmt_lf_add_d32_ops[0], & sfmt_lf_add_s_ops[0], - & sfmt_lf_add_d_ops[0], & sfmt_lf_add_d32_ops[0], & sfmt_lf_add_s_ops[0], - & sfmt_lf_add_d_ops[0], & sfmt_lf_add_d32_ops[0], & sfmt_lf_add_s_ops[0], - & sfmt_lf_add_d_ops[0], & sfmt_lf_add_d32_ops[0], & sfmt_lf_itof_s_ops[0], - & sfmt_lf_itof_d_ops[0], & sfmt_lf_itof_d32_ops[0], & sfmt_lf_ftoi_s_ops[0], - & sfmt_lf_ftoi_d_ops[0], & sfmt_lf_ftoi_d32_ops[0], & sfmt_lf_sfeq_s_ops[0], - & sfmt_lf_sfeq_d_ops[0], & sfmt_lf_sfeq_d32_ops[0], & sfmt_lf_sfeq_s_ops[0], - & sfmt_lf_sfeq_d_ops[0], & sfmt_lf_sfeq_d32_ops[0], & sfmt_lf_sfeq_s_ops[0], - & sfmt_lf_sfeq_d_ops[0], & sfmt_lf_sfeq_d32_ops[0], & sfmt_lf_sfeq_s_ops[0], - & sfmt_lf_sfeq_d_ops[0], & sfmt_lf_sfeq_d32_ops[0], & sfmt_lf_sfeq_s_ops[0], - & sfmt_lf_sfeq_d_ops[0], & sfmt_lf_sfeq_d32_ops[0], & sfmt_lf_sfeq_s_ops[0], - & sfmt_lf_sfeq_d_ops[0], & sfmt_lf_sfeq_d32_ops[0], & sfmt_lf_sfeq_s_ops[0], - & sfmt_lf_sfeq_d_ops[0], & sfmt_lf_sfeq_d32_ops[0], & sfmt_lf_sfeq_s_ops[0], - & sfmt_lf_sfeq_d_ops[0], & sfmt_lf_sfeq_d32_ops[0], & sfmt_lf_sfeq_s_ops[0], - & sfmt_lf_sfeq_d_ops[0], & sfmt_lf_sfeq_d32_ops[0], & sfmt_lf_sfeq_s_ops[0], - & sfmt_lf_sfeq_d_ops[0], & sfmt_lf_sfeq_d32_ops[0], & sfmt_lf_sfeq_s_ops[0], - & sfmt_lf_sfeq_d_ops[0], & sfmt_lf_sfeq_d32_ops[0], & sfmt_lf_sfeq_s_ops[0], - & sfmt_lf_sfeq_d_ops[0], & sfmt_lf_sfeq_d32_ops[0], & sfmt_lf_sfeq_s_ops[0], - & sfmt_lf_sfeq_d_ops[0], & sfmt_lf_sfeq_d32_ops[0], & sfmt_lf_madd_s_ops[0], - & sfmt_lf_madd_d_ops[0], & sfmt_lf_madd_d32_ops[0], & sfmt_l_msync_ops[0], & sfmt_l_msync_ops[0], - & sfmt_l_msync_ops[0], }; /* Function to call before using the operand instance table. */ diff -Nru gdb-9.1/opcodes/pdp11-dis.c gdb-10.2/opcodes/pdp11-dis.c --- gdb-9.1/opcodes/pdp11-dis.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/pdp11-dis.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Print DEC PDP-11 instructions. - Copyright (C) 2001-2019 Free Software Foundation, Inc. + Copyright (C) 2001-2020 Free Software Foundation, Inc. This file is part of the GNU opcodes library. diff -Nru gdb-9.1/opcodes/pdp11-opc.c gdb-10.2/opcodes/pdp11-opc.c --- gdb-9.1/opcodes/pdp11-opc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/pdp11-opc.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Opcode table for PDP-11. - Copyright (C) 2001-2019 Free Software Foundation, Inc. + Copyright (C) 2001-2020 Free Software Foundation, Inc. This file is part of the GNU opcodes library. diff -Nru gdb-9.1/opcodes/pj-dis.c gdb-10.2/opcodes/pj-dis.c --- gdb-9.1/opcodes/pj-dis.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/pj-dis.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* pj-dis.c -- Disassemble picoJava instructions. - Copyright (C) 1999-2019 Free Software Foundation, Inc. + Copyright (C) 1999-2020 Free Software Foundation, Inc. Contributed by Steve Chamberlain, of Transmeta (sac@pobox.com). This file is part of the GNU opcodes library. @@ -32,10 +32,10 @@ unsigned char ival[4]; int status = info->read_memory_func (memaddr, ival, 4, info); - *iptr = (ival[0] << 24) - | (ival[1] << 16) - | (ival[2] << 8) - | (ival[3] << 0); + *iptr = (((unsigned) ival[0] << 24) + | (ival[1] << 16) + | (ival[2] << 8) + | (ival[3] << 0)); return status; } diff -Nru gdb-9.1/opcodes/pj-opc.c gdb-10.2/opcodes/pj-opc.c --- gdb-9.1/opcodes/pj-opc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/pj-opc.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* pj-opc.c -- Definitions for picoJava opcodes. - Copyright (C) 1999-2019 Free Software Foundation, Inc. + Copyright (C) 1999-2020 Free Software Foundation, Inc. Contributed by Steve Chamberlain of Transmeta (sac@pobox.com). This file is part of the GNU opcodes library. Binary files /tmp/tmpwlqmdap4/HCMjq_z_kj/gdb-9.1/opcodes/po/de.gmo and /tmp/tmpwlqmdap4/bi0oNuAXeo/gdb-10.2/opcodes/po/de.gmo differ diff -Nru gdb-9.1/opcodes/po/de.po gdb-10.2/opcodes/po/de.po --- gdb-9.1/opcodes/po/de.po 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/po/de.po 2021-04-25 04:06:26.000000000 +0000 @@ -2,14 +2,14 @@ # Copyright (C) 2002 Free Software Foundation, Inc. # This file is distributed under the same license as the binutils package. # Martin v. Löwis <martin@v.loewis.de>, 2002. -# Roland Illig <roland.illig@gmx.de>, 2004-2019. +# Roland Illig <roland.illig@gmx.de>, 2004-2020. # msgid "" msgstr "" -"Project-Id-Version: opcodes 2.31.90\n" +"Project-Id-Version: opcodes 2.34.90\n" "Report-Msgid-Bugs-To: bug-binutils@gnu.org\n" -"POT-Creation-Date: 2019-01-19 16:32+0000\n" -"PO-Revision-Date: 2019-01-20 16:14+0100\n" +"POT-Creation-Date: 2020-07-04 10:28+0100\n" +"PO-Revision-Date: 2020-07-23 21:19+0200\n" "Last-Translator: Roland Illig <roland.illig@gmx.de>\n" "Language-Team: German <translation-team-de@lists.sourceforge.net>\n" "Language: de\n" @@ -17,24 +17,24 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" -"X-Generator: Poedit 2.2.1\n" +"X-Generator: Poedit 2.3.1\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: aarch64-asm.c:819 +#: aarch64-asm.c:820 msgid "specified register cannot be read from" msgstr "Aus dem angegebenen Register kann nicht gelesen werden" -#: aarch64-asm.c:828 +#: aarch64-asm.c:829 msgid "specified register cannot be written to" msgstr "In das angegebene Register kann nicht geschrieben werden" #. Invalid option. -#: aarch64-dis.c:92 arc-dis.c:782 arm-dis.c:6174 +#: aarch64-dis.c:93 arc-dis.c:802 arm-dis.c:11654 #, c-format msgid "unrecognised disassembler option: %s" msgstr "Unbekannte Disassembler-Option: %s" -#: aarch64-dis.c:3448 +#: aarch64-dis.c:3531 #, c-format msgid "" "\n" @@ -46,7 +46,7 @@ "mit dem Schalter »-M« unterstützt (mehrere Optionen sollten durch\n" "Kommata getrennt werden):\n" -#: aarch64-dis.c:3452 +#: aarch64-dis.c:3535 #, c-format msgid "" "\n" @@ -55,7 +55,7 @@ "\n" " no-aliases Befehls-Aliase nicht ausgeben.\n" -#: aarch64-dis.c:3455 +#: aarch64-dis.c:3538 #, c-format msgid "" "\n" @@ -64,7 +64,7 @@ "\n" " aliases Befehls-Aliase ausgeben.\n" -#: aarch64-dis.c:3458 +#: aarch64-dis.c:3541 #, c-format msgid "" "\n" @@ -73,7 +73,7 @@ "\n" " no-notes Befehls-Hinweise nicht ausgeben.\n" -#: aarch64-dis.c:3461 +#: aarch64-dis.c:3544 #, c-format msgid "" "\n" @@ -82,7 +82,7 @@ "\n" " notes Befehls-Hinweise ausgeben.\n" -#: aarch64-dis.c:3465 +#: aarch64-dis.c:3548 #, c-format msgid "" "\n" @@ -91,264 +91,264 @@ "\n" " debug_dump Temporärer Schalter für Debugspuren.\n" -#: aarch64-dis.c:3469 mips-dis.c:2773 mips-dis.c:2783 mips-dis.c:2786 -#: nfp-dis.c:2981 riscv-dis.c:552 +#: aarch64-dis.c:3552 mips-dis.c:2778 mips-dis.c:2788 mips-dis.c:2791 +#: nfp-dis.c:2981 riscv-dis.c:620 #, c-format msgid "\n" msgstr "\n" -#: aarch64-opc.c:1339 +#: aarch64-opc.c:1347 msgid "immediate value" msgstr "Direktwert" -#: aarch64-opc.c:1349 +#: aarch64-opc.c:1357 msgid "immediate offset" msgstr "Direkter Offset" -#: aarch64-opc.c:1359 +#: aarch64-opc.c:1367 msgid "register number" msgstr "Registernummer" -#: aarch64-opc.c:1369 +#: aarch64-opc.c:1377 msgid "register element index" msgstr "Register-Elementindex" -#: aarch64-opc.c:1379 +#: aarch64-opc.c:1387 msgid "shift amount" msgstr "Schiebeanzahl" -#: aarch64-opc.c:1391 +#: aarch64-opc.c:1399 msgid "multiplier" msgstr "Multiplikator" -#: aarch64-opc.c:1464 +#: aarch64-opc.c:1472 msgid "reg pair must start from even reg" msgstr "Registerpaar muss mit geradem Register anfangen" -#: aarch64-opc.c:1470 +#: aarch64-opc.c:1478 msgid "reg pair must be contiguous" msgstr "Registerpaar muss zusammenhängend sein" -#: aarch64-opc.c:1484 +#: aarch64-opc.c:1492 msgid "extraneous register" msgstr "Irrelevantes Register" -#: aarch64-opc.c:1490 +#: aarch64-opc.c:1498 msgid "missing register" msgstr "Fehlendes Register" -#: aarch64-opc.c:1501 +#: aarch64-opc.c:1509 msgid "stack pointer register expected" msgstr "Stackpointer-Register erwartet" -#: aarch64-opc.c:1524 +#: aarch64-opc.c:1534 msgid "z0-z15 expected" msgstr "z0-z15 erwartet" -#: aarch64-opc.c:1525 +#: aarch64-opc.c:1535 msgid "z0-z7 expected" msgstr "z0-z7 erwartet" -#: aarch64-opc.c:1551 +#: aarch64-opc.c:1561 msgid "invalid register list" msgstr "Ungültige Registerliste" -#: aarch64-opc.c:1565 +#: aarch64-opc.c:1575 msgid "p0-p7 expected" msgstr "p0-p7 erwartet" -#: aarch64-opc.c:1591 aarch64-opc.c:1599 +#: aarch64-opc.c:1601 aarch64-opc.c:1609 msgid "unexpected address writeback" msgstr "Unerwartetes Adressen-Zurückschreiben" -#: aarch64-opc.c:1611 +#: aarch64-opc.c:1620 msgid "address writeback expected" msgstr "Adressen-Zurückschreiben erwartet" -#: aarch64-opc.c:1658 +#: aarch64-opc.c:1667 msgid "negative or unaligned offset expected" msgstr "Negativer oder unausgerichteter Offset erwartet" -#: aarch64-opc.c:1715 +#: aarch64-opc.c:1724 msgid "invalid register offset" msgstr "Ungültiger Register-Offset" -#: aarch64-opc.c:1737 +#: aarch64-opc.c:1746 msgid "invalid post-increment amount" msgstr "Nicht erlaubte Anzahl im Post-Inkrement" -#: aarch64-opc.c:1753 aarch64-opc.c:2247 +#: aarch64-opc.c:1762 aarch64-opc.c:2271 msgid "invalid shift amount" msgstr "Ungültige Schiebeanzahl" -#: aarch64-opc.c:1766 +#: aarch64-opc.c:1775 msgid "invalid extend/shift operator" msgstr "Nicht erlaubter Extend/Shift-Operator" -#: aarch64-opc.c:1812 aarch64-opc.c:2052 aarch64-opc.c:2087 aarch64-opc.c:2106 -#: aarch64-opc.c:2114 aarch64-opc.c:2201 aarch64-opc.c:2377 aarch64-opc.c:2477 -#: aarch64-opc.c:2490 +#: aarch64-opc.c:1821 aarch64-opc.c:2073 aarch64-opc.c:2108 aarch64-opc.c:2127 +#: aarch64-opc.c:2135 aarch64-opc.c:2224 aarch64-opc.c:2401 aarch64-opc.c:2501 +#: aarch64-opc.c:2514 msgid "immediate out of range" msgstr "Direktoperand außerhalb des gültigen Bereichs" -#: aarch64-opc.c:1834 aarch64-opc.c:1876 aarch64-opc.c:1926 aarch64-opc.c:1960 +#: aarch64-opc.c:1843 aarch64-opc.c:1885 aarch64-opc.c:1947 aarch64-opc.c:1981 msgid "invalid addressing mode" msgstr "Ungültiger Adressierungsmodus" -#: aarch64-opc.c:1918 +#: aarch64-opc.c:1939 msgid "index register xzr is not allowed" msgstr "Indexregister xzr ist nicht erlaubt" -#: aarch64-opc.c:2040 aarch64-opc.c:2062 aarch64-opc.c:2280 aarch64-opc.c:2288 -#: aarch64-opc.c:2354 aarch64-opc.c:2383 +#: aarch64-opc.c:2061 aarch64-opc.c:2083 aarch64-opc.c:2304 aarch64-opc.c:2312 +#: aarch64-opc.c:2378 aarch64-opc.c:2407 msgid "invalid shift operator" msgstr "Ungültiger Schiebeoperator" -#: aarch64-opc.c:2046 +#: aarch64-opc.c:2067 msgid "shift amount must be 0 or 12" msgstr "Schiebeanzahl muss 0 oder 12 sein" -#: aarch64-opc.c:2069 +#: aarch64-opc.c:2090 msgid "shift amount must be a multiple of 16" msgstr "Schiebeanzahl muss ein Vielfaches von 16 sein" -#: aarch64-opc.c:2081 +#: aarch64-opc.c:2102 msgid "negative immediate value not allowed" msgstr "Negativer Direktwert nicht erlaubt" -#: aarch64-opc.c:2212 +#: aarch64-opc.c:2235 msgid "immediate zero expected" msgstr "Direkte Null erwartet" -#: aarch64-opc.c:2226 +#: aarch64-opc.c:2249 msgid "rotate expected to be 0, 90, 180 or 270" msgstr "Rotation muss 0, 90, 180 oder 270 sein" -#: aarch64-opc.c:2236 +#: aarch64-opc.c:2260 msgid "rotate expected to be 90 or 270" msgstr "Rotation muss 90 oder 270 sein" -#: aarch64-opc.c:2296 +#: aarch64-opc.c:2320 msgid "shift is not permitted" msgstr "Schieben ist hier nicht erlaubt" -#: aarch64-opc.c:2321 +#: aarch64-opc.c:2345 msgid "invalid value for immediate" msgstr "Ungültiger Wert für Direktwert" -#: aarch64-opc.c:2346 +#: aarch64-opc.c:2370 msgid "shift amount must be 0 or 16" msgstr "Schiebeanzahl muss 0 oder 16 sein" -#: aarch64-opc.c:2367 +#: aarch64-opc.c:2391 msgid "floating-point immediate expected" msgstr "Gleitkomma-Direktwert erwartet" -#: aarch64-opc.c:2401 +#: aarch64-opc.c:2425 msgid "no shift amount allowed for 8-bit constants" msgstr "Schieben ist für 8-Bit-Konstanten nicht möglich" -#: aarch64-opc.c:2411 +#: aarch64-opc.c:2435 msgid "shift amount must be 0 or 8" msgstr "Schiebeanzahl muss 0 oder 8 sein" -#: aarch64-opc.c:2424 +#: aarch64-opc.c:2448 msgid "immediate too big for element size" msgstr "Direktwert ist zu groß für Elementgröße" -#: aarch64-opc.c:2431 +#: aarch64-opc.c:2455 msgid "invalid arithmetic immediate" msgstr "Ungültiger Wert für Direktwert" -#: aarch64-opc.c:2445 +#: aarch64-opc.c:2469 msgid "floating-point value must be 0.5 or 1.0" msgstr "Gleitkommazahl muss entweder 0.5 oder 1.0 sein" -#: aarch64-opc.c:2455 +#: aarch64-opc.c:2479 msgid "floating-point value must be 0.5 or 2.0" msgstr "Gleitkommazahl muss entweder 0.5 oder 2.0 sein" -#: aarch64-opc.c:2465 +#: aarch64-opc.c:2489 msgid "floating-point value must be 0.0 or 1.0" msgstr "Gleitkommazahl muss entweder 0.0 oder 1.0 sein" -#: aarch64-opc.c:2496 +#: aarch64-opc.c:2520 msgid "invalid replicated MOV immediate" msgstr "Ungültiger replizierter Direktwert für MOV" -#: aarch64-opc.c:2614 +#: aarch64-opc.c:2641 msgid "extend operator expected" msgstr "Extend-Operator erwartet" -#: aarch64-opc.c:2627 +#: aarch64-opc.c:2654 msgid "missing extend operator" msgstr "Extend-Operator fehlt" -#: aarch64-opc.c:2633 +#: aarch64-opc.c:2660 msgid "'LSL' operator not allowed" msgstr "LSL-Operator ist hier nicht erlaubt" -#: aarch64-opc.c:2654 +#: aarch64-opc.c:2681 msgid "W register expected" msgstr "W-Register erwartet" -#: aarch64-opc.c:2665 +#: aarch64-opc.c:2692 msgid "shift operator expected" msgstr "Schiebe-Operator erwartet" -#: aarch64-opc.c:2672 +#: aarch64-opc.c:2699 msgid "'ROR' operator not allowed" msgstr "ROR-Operator ist hier nicht erlaubt" -#: aarch64-opc.c:3671 +#: aarch64-opc.c:3714 msgid "reading from a write-only register" msgstr "Versuch, ein lesegeschütztes Register auszulesen" -#: aarch64-opc.c:3673 +#: aarch64-opc.c:3716 msgid "writing to a read-only register" msgstr "Versuch, ein schreibgeschütztes Register zu beschreiben" -#: aarch64-opc.c:4815 +#: aarch64-opc.c:4711 msgid "instruction opens new dependency sequence without ending previous one" msgstr "Der Befehl beginnt eine neue Abhängigkeitsfolge, ohne die vorherige zu beenden" -#: aarch64-opc.c:4835 +#: aarch64-opc.c:4731 msgid "previous `movprfx' sequence not closed" msgstr "Vorherige »movprfx«-Folge nicht beendet" -#: aarch64-opc.c:4852 +#: aarch64-opc.c:4750 msgid "SVE instruction expected after `movprfx'" msgstr "SVE-Befehl hinter »movprfx« erwartet" -#: aarch64-opc.c:4865 +#: aarch64-opc.c:4763 msgid "SVE `movprfx' compatible instruction expected" msgstr "Zu SVE-»movprfx« kompatibler Befehl erwartet" -#: aarch64-opc.c:4956 +#: aarch64-opc.c:4850 msgid "predicated instruction expected after `movprfx'" msgstr "Bedingter Befehl nach »movprfx« erwartet" -#: aarch64-opc.c:4968 +#: aarch64-opc.c:4862 msgid "merging predicate expected due to preceding `movprfx'" msgstr "Zusammenführende Bedingung erwartet, aufgrund des vorangehenden »movprfx«" -#: aarch64-opc.c:4980 +#: aarch64-opc.c:4874 msgid "predicate register differs from that in preceding `movprfx'" msgstr "Bedingungsregister unterscheidet sich von dem im vorangehenden »movprfx«" -#: aarch64-opc.c:4999 +#: aarch64-opc.c:4893 msgid "output register of preceding `movprfx' not used in current instruction" msgstr "Ausgaberegister des vorangehenden »movprfx« wird in aktuellem Befehl nicht verwendet" -#: aarch64-opc.c:5012 +#: aarch64-opc.c:4906 msgid "output register of preceding `movprfx' expected as output" msgstr "Ausgaberegister des vorangehenden »movprfx« auch hier als Ausgabe erwartet" -#: aarch64-opc.c:5024 +#: aarch64-opc.c:4918 msgid "output register of preceding `movprfx' used as input" msgstr "Ausgaberegister des vorangehenden »movprfx« wird als Eingabe verwendet" -#: aarch64-opc.c:5040 +#: aarch64-opc.c:4934 msgid "register size not compatible with previous `movprfx'" msgstr "Registergröße nicht mit vorangehendem »movprfx« kompatibel" @@ -360,7 +360,7 @@ msgid "jump hint unaligned" msgstr "Sprunghinweis ist nicht ausgerichtet (unaligned)" -#: arc-dis.c:377 +#: arc-dis.c:379 msgid "" "\n" "Warning: disassembly may be wrong due to guessed opcode class choice.\n" @@ -373,12 +373,16 @@ "korrekten Opcode-Klassen auszuwählen.\n" "\t\t\t\t" -#: arc-dis.c:825 +#: arc-dis.c:440 +msgid "An error occured while generating the extension instruction operations" +msgstr "Beim Generieren der Erweiterungsoperationen für die Befehle ist ein Fehler aufgetreten" + +#: arc-dis.c:845 #, c-format msgid "unrecognised disassembler CPU option: %s" msgstr "Unbekannte Disassembler-CPU-Option: %s" -#: arc-dis.c:1387 +#: arc-dis.c:1412 #, c-format msgid "" "\n" @@ -390,42 +394,47 @@ "mit dem Schalter »-M« unterstützt (mehrere Optionen sollten durch\n" "Kommata getrennt werden):\n" -#: arc-dis.c:1399 +#: arc-dis.c:1424 #, c-format msgid " dsp Recognize DSP instructions.\n" msgstr " dsp DSP-Befehle erkennen.\n" -#: arc-dis.c:1401 +#: arc-dis.c:1426 #, c-format msgid " spfp Recognize FPX SP instructions.\n" msgstr " spfp FPX-SP-Befehle erkennen.\n" -#: arc-dis.c:1403 +#: arc-dis.c:1428 #, c-format msgid " dpfp Recognize FPX DP instructions.\n" msgstr " dpfp FPX-DP-Befehle erkennen.\n" -#: arc-dis.c:1405 +#: arc-dis.c:1430 #, c-format msgid " quarkse_em Recognize FPU QuarkSE-EM instructions.\n" msgstr " quarkse_em FPU-QuarkSE-EM-Befehle erkennen.\n" -#: arc-dis.c:1407 +#: arc-dis.c:1432 #, c-format msgid " fpuda Recognize double assist FPU instructions.\n" msgstr " fpuda Befehle für hilfsweise doppelt genaue FPU erkennen.\n" -#: arc-dis.c:1409 +#: arc-dis.c:1434 #, c-format msgid " fpus Recognize single precision FPU instructions.\n" msgstr " fpus Befehle für einfach genaue FPU erkennen.\n" -#: arc-dis.c:1411 +#: arc-dis.c:1436 #, c-format msgid " fpud Recognize double precision FPU instructions.\n" msgstr " fpud Befehle für doppelt genaue FPU erkennen.\n" -#: arc-dis.c:1413 +#: arc-dis.c:1438 +#, c-format +msgid " nps400 Recognize NPS400 instructions.\n" +msgstr " nps400 NPS400-Befehle erkennen.\n" + +#: arc-dis.c:1440 #, c-format msgid " hex Use only hexadecimal number to print immediates.\n" msgstr " hex Direktwerte ausschließlich hexadezimal ausgeben.\n" @@ -591,48 +600,67 @@ msgid "invalid position, should be one of: 0,4,8,...124." msgstr "Ungültige Position; muss 0, 4, 8, ..., 124 sein." -#: arm-dis.c:3242 +#: arm-dis.c:5192 msgid "Select raw register names" msgstr "Rohe Registernamen auswählen" -#: arm-dis.c:3244 +#: arm-dis.c:5194 msgid "Select register names used by GCC" msgstr "Von GCC verwendete Registernamen auswählen" -#: arm-dis.c:3246 +#: arm-dis.c:5196 msgid "Select register names used in ARM's ISA documentation" msgstr "Von ARMs ISA-Dokumentation verwendete Registernamen verwenden" -#: arm-dis.c:3248 +#: arm-dis.c:5198 msgid "Assume all insns are Thumb insns" msgstr "Annnehmen, dass alle Befehle Thumb-Befehle sind" -#: arm-dis.c:3249 +#: arm-dis.c:5199 msgid "Examine preceding label to determine an insn's type" msgstr "Vorangehende Sprungmarke untersuchen, um die Befehlsart festzustellen" -#: arm-dis.c:3250 +#: arm-dis.c:5200 msgid "Select register names used in the APCS" msgstr "In APCS verwendete Registernamen auswählen" -#: arm-dis.c:3252 +#: arm-dis.c:5202 msgid "Select register names used in the ATPCS" msgstr "In ATPCS verwendete Registernamen auswählen" -#: arm-dis.c:3254 +#: arm-dis.c:5204 msgid "Select special register names used in the ATPCS" msgstr "Spezielle Registernamen für ATPCS auswählen" -#: arm-dis.c:3652 +#: arm-dis.c:5206 +msgid "Enable CDE extensions for coprocessor N space" +msgstr "CDE-Erweiterungen für Koprozessor-N-Raum aktivieren" + +#: arm-dis.c:8375 msgid "<illegal precision>" msgstr "<ungültige Genauigkeit>" -#: arm-dis.c:6165 +#: arm-dis.c:11615 #, c-format msgid "unrecognised register name set: %s" msgstr "Unbekannte Registernamensmenge: %s" -#: arm-dis.c:6906 +#: arm-dis.c:11629 +#, c-format +msgid "cde coprocessor not between 0-7: %s" +msgstr "CDE-Koprozessor muss zwischen 0 und 7 sein: %s" + +#: arm-dis.c:11635 +#, c-format +msgid "coproc must have an argument: %s" +msgstr "»coproc« erfordert ein Argument: %s" + +#: arm-dis.c:11648 +#, c-format +msgid "coprocN argument takes options \"generic\", \"cde\", or \"CDE\": %s" +msgstr "Das Argument für »coprocN« akzeptiert nur die Werte »generic«, »cde« oder »CDE«: %s" + +#: arm-dis.c:12359 #, c-format msgid "" "\n" @@ -648,259 +676,289 @@ msgid "undefined" msgstr "undefiniert" -#: avr-dis.c:216 +#: avr-dis.c:218 #, c-format msgid "internal disassembler error" msgstr "internal disassembler error" -#: avr-dis.c:270 +#: avr-dis.c:272 #, c-format msgid "unknown constraint `%c'" msgstr "Unbekannte Einschränkung »%c«" -#: cgen-asm.c:351 epiphany-ibld.c:201 fr30-ibld.c:201 frv-ibld.c:201 -#: ip2k-ibld.c:201 iq2000-ibld.c:201 lm32-ibld.c:201 m32c-ibld.c:201 -#: m32r-ibld.c:201 mep-ibld.c:201 mt-ibld.c:201 or1k-ibld.c:201 -#: xc16x-ibld.c:201 xstormy16-ibld.c:201 -#, c-format -msgid "operand out of range (%ld not between %ld and %ld)" -msgstr "Operand außerhalb des gültigen Bereichs (%ld ist nicht zwischen %ld und %ld)" - -#: cgen-asm.c:373 -#, c-format -msgid "operand out of range (%lu not between %lu and %lu)" -msgstr "Operand außerhalb des gültigen Bereichs (%lu ist nicht zwischen %lu und %lu)" - -#: d30v-dis.c:229 -#, c-format -msgid "illegal id (%d)" -msgstr "Ungültige ID (%d)" - -#: d30v-dis.c:256 -#, c-format -msgid "<unknown register %d>" -msgstr "<unbekanntes Register %d>" - -# Can't happen. -#. Can't happen. -#: dis-buf.c:61 -#, c-format -msgid "Unknown error %d\n" -msgstr "Unbekannter Fehler %d\n" - -#: dis-buf.c:70 -#, c-format -msgid "Address 0x%s is out of bounds.\n" -msgstr "Adresse 0x%s ist außerhalb des gültigen Bereichs.\n" - -#: epiphany-asm.c:68 -msgid "register unavailable for short instructions" -msgstr "Dieses Register steht in kurzen Maschinenbefehlen nicht zur Verfügung" - -#: epiphany-asm.c:115 -msgid "register name used as immediate value" -msgstr "Registername fälschlicherweise als Direktwert benutzt" - -#. Don't treat "mov ip,ip" as a move-immediate. -#: epiphany-asm.c:178 epiphany-asm.c:234 -msgid "register source in immediate move" -msgstr "Register-Quelle in direktem »mov«" - -#: epiphany-asm.c:187 -msgid "byte relocation unsupported" -msgstr "Byte-Relokation nicht unterstützt" - -#. -- assembler routines inserted here. -#. -- asm.c -#: epiphany-asm.c:193 frv-asm.c:972 iq2000-asm.c:56 lm32-asm.c:95 -#: lm32-asm.c:127 lm32-asm.c:157 lm32-asm.c:187 lm32-asm.c:217 lm32-asm.c:247 -#: m32c-asm.c:140 m32c-asm.c:235 m32c-asm.c:276 m32c-asm.c:334 m32c-asm.c:355 -#: m32r-asm.c:53 mep-asm.c:241 mep-asm.c:259 mep-asm.c:274 mep-asm.c:289 -#: mep-asm.c:301 or1k-asm.c:54 -msgid "missing `)'" -msgstr "Fehlende »)«." - -#: epiphany-asm.c:270 -msgid "ABORT: unknown operand" -msgstr "ABBRUCH: Unbekannter Operand" - -#: epiphany-asm.c:296 -msgid "Not a pc-relative address." -msgstr "Das ist keine PC-relative Adresse." - -#: epiphany-asm.c:456 fr30-asm.c:311 frv-asm.c:1264 ip2k-asm.c:512 -#: iq2000-asm.c:460 lm32-asm.c:350 m32c-asm.c:1585 m32r-asm.c:329 -#: mep-asm.c:1288 mt-asm.c:596 or1k-asm.c:512 xc16x-asm.c:377 +#: bpf-asm.c:97 +msgid "expected 16, 32 or 64 in" +msgstr "16, 32 oder 64 erwartet in" + +#: bpf-asm.c:181 epiphany-asm.c:456 fr30-asm.c:311 frv-asm.c:1264 +#: ip2k-asm.c:512 iq2000-asm.c:460 lm32-asm.c:350 m32c-asm.c:1585 +#: m32r-asm.c:329 mep-asm.c:1287 mt-asm.c:596 or1k-asm.c:571 xc16x-asm.c:377 #: xstormy16-asm.c:277 #, c-format msgid "internal error: unrecognized field %d while parsing" msgstr "internal error: unrecognized field %d while parsing" -#: epiphany-asm.c:508 fr30-asm.c:363 frv-asm.c:1316 ip2k-asm.c:564 -#: iq2000-asm.c:512 lm32-asm.c:402 m32c-asm.c:1637 m32r-asm.c:381 -#: mep-asm.c:1340 mt-asm.c:648 or1k-asm.c:564 xc16x-asm.c:429 +#: bpf-asm.c:233 epiphany-asm.c:508 fr30-asm.c:363 frv-asm.c:1316 +#: ip2k-asm.c:564 iq2000-asm.c:512 lm32-asm.c:402 m32c-asm.c:1637 +#: m32r-asm.c:381 mep-asm.c:1339 mt-asm.c:648 or1k-asm.c:623 xc16x-asm.c:429 #: xstormy16-asm.c:329 msgid "missing mnemonic in syntax string" msgstr "Fehlender Mnemonic im Syntaxstring" # We couldn't parse it. #. We couldn't parse it. -#: epiphany-asm.c:643 epiphany-asm.c:647 epiphany-asm.c:736 epiphany-asm.c:843 -#: fr30-asm.c:498 fr30-asm.c:502 fr30-asm.c:591 fr30-asm.c:698 frv-asm.c:1451 -#: frv-asm.c:1455 frv-asm.c:1544 frv-asm.c:1651 ip2k-asm.c:699 ip2k-asm.c:703 -#: ip2k-asm.c:792 ip2k-asm.c:899 iq2000-asm.c:647 iq2000-asm.c:651 -#: iq2000-asm.c:740 iq2000-asm.c:847 lm32-asm.c:537 lm32-asm.c:541 -#: lm32-asm.c:630 lm32-asm.c:737 m32c-asm.c:1772 m32c-asm.c:1776 -#: m32c-asm.c:1865 m32c-asm.c:1972 m32r-asm.c:516 m32r-asm.c:520 -#: m32r-asm.c:609 m32r-asm.c:716 mep-asm.c:1475 mep-asm.c:1479 mep-asm.c:1568 -#: mep-asm.c:1675 mt-asm.c:783 mt-asm.c:787 mt-asm.c:876 mt-asm.c:983 -#: or1k-asm.c:699 or1k-asm.c:703 or1k-asm.c:792 or1k-asm.c:899 xc16x-asm.c:564 -#: xc16x-asm.c:568 xc16x-asm.c:657 xc16x-asm.c:764 xstormy16-asm.c:464 -#: xstormy16-asm.c:468 xstormy16-asm.c:557 xstormy16-asm.c:664 +#: bpf-asm.c:368 bpf-asm.c:372 bpf-asm.c:461 bpf-asm.c:568 epiphany-asm.c:643 +#: epiphany-asm.c:647 epiphany-asm.c:736 epiphany-asm.c:843 fr30-asm.c:498 +#: fr30-asm.c:502 fr30-asm.c:591 fr30-asm.c:698 frv-asm.c:1451 frv-asm.c:1455 +#: frv-asm.c:1544 frv-asm.c:1651 ip2k-asm.c:699 ip2k-asm.c:703 ip2k-asm.c:792 +#: ip2k-asm.c:899 iq2000-asm.c:647 iq2000-asm.c:651 iq2000-asm.c:740 +#: iq2000-asm.c:847 lm32-asm.c:537 lm32-asm.c:541 lm32-asm.c:630 +#: lm32-asm.c:737 m32c-asm.c:1772 m32c-asm.c:1776 m32c-asm.c:1865 +#: m32c-asm.c:1972 m32r-asm.c:516 m32r-asm.c:520 m32r-asm.c:609 m32r-asm.c:716 +#: mep-asm.c:1474 mep-asm.c:1478 mep-asm.c:1567 mep-asm.c:1674 mt-asm.c:783 +#: mt-asm.c:787 mt-asm.c:876 mt-asm.c:983 or1k-asm.c:758 or1k-asm.c:762 +#: or1k-asm.c:851 or1k-asm.c:958 xc16x-asm.c:564 xc16x-asm.c:568 +#: xc16x-asm.c:657 xc16x-asm.c:764 xstormy16-asm.c:464 xstormy16-asm.c:468 +#: xstormy16-asm.c:557 xstormy16-asm.c:664 msgid "unrecognized instruction" msgstr "Unbekannter Befehl" -#: epiphany-asm.c:690 fr30-asm.c:545 frv-asm.c:1498 ip2k-asm.c:746 -#: iq2000-asm.c:694 lm32-asm.c:584 m32c-asm.c:1819 m32r-asm.c:563 -#: mep-asm.c:1522 mt-asm.c:830 or1k-asm.c:746 xc16x-asm.c:611 +#: bpf-asm.c:415 epiphany-asm.c:690 fr30-asm.c:545 frv-asm.c:1498 +#: ip2k-asm.c:746 iq2000-asm.c:694 lm32-asm.c:584 m32c-asm.c:1819 +#: m32r-asm.c:563 mep-asm.c:1521 mt-asm.c:830 or1k-asm.c:805 xc16x-asm.c:611 #: xstormy16-asm.c:511 #, c-format msgid "syntax error (expected char `%c', found `%c')" msgstr "Syntaxfehler (erwartetes Zeichen »%c«, gefunden »%c«)" -#: epiphany-asm.c:700 fr30-asm.c:555 frv-asm.c:1508 ip2k-asm.c:756 -#: iq2000-asm.c:704 lm32-asm.c:594 m32c-asm.c:1829 m32r-asm.c:573 -#: mep-asm.c:1532 mt-asm.c:840 or1k-asm.c:756 xc16x-asm.c:621 +#: bpf-asm.c:425 epiphany-asm.c:700 fr30-asm.c:555 frv-asm.c:1508 +#: ip2k-asm.c:756 iq2000-asm.c:704 lm32-asm.c:594 m32c-asm.c:1829 +#: m32r-asm.c:573 mep-asm.c:1531 mt-asm.c:840 or1k-asm.c:815 xc16x-asm.c:621 #: xstormy16-asm.c:521 #, c-format msgid "syntax error (expected char `%c', found end of instruction)" msgstr "Syntaxfehler (Zeichen »%c« erwartet, Befehlsende bekommen)" -#: epiphany-asm.c:730 fr30-asm.c:585 frv-asm.c:1538 ip2k-asm.c:786 -#: iq2000-asm.c:734 lm32-asm.c:624 m32c-asm.c:1859 m32r-asm.c:603 -#: mep-asm.c:1562 mt-asm.c:870 or1k-asm.c:786 xc16x-asm.c:651 +#: bpf-asm.c:455 epiphany-asm.c:730 fr30-asm.c:585 frv-asm.c:1538 +#: ip2k-asm.c:786 iq2000-asm.c:734 lm32-asm.c:624 m32c-asm.c:1859 +#: m32r-asm.c:603 mep-asm.c:1561 mt-asm.c:870 or1k-asm.c:845 xc16x-asm.c:651 #: xstormy16-asm.c:551 msgid "junk at end of line" msgstr "Müll am Ende der Zeile" -#: epiphany-asm.c:842 fr30-asm.c:697 frv-asm.c:1650 ip2k-asm.c:898 -#: iq2000-asm.c:846 lm32-asm.c:736 m32c-asm.c:1971 m32r-asm.c:715 -#: mep-asm.c:1674 mt-asm.c:982 or1k-asm.c:898 xc16x-asm.c:763 +#: bpf-asm.c:567 epiphany-asm.c:842 fr30-asm.c:697 frv-asm.c:1650 +#: ip2k-asm.c:898 iq2000-asm.c:846 lm32-asm.c:736 m32c-asm.c:1971 +#: m32r-asm.c:715 mep-asm.c:1673 mt-asm.c:982 or1k-asm.c:957 xc16x-asm.c:763 #: xstormy16-asm.c:663 msgid "unrecognized form of instruction" msgstr "Unbekannte Befehlsform" -#: epiphany-asm.c:856 fr30-asm.c:711 frv-asm.c:1664 ip2k-asm.c:912 -#: iq2000-asm.c:860 lm32-asm.c:750 m32c-asm.c:1985 m32r-asm.c:729 -#: mep-asm.c:1688 mt-asm.c:996 or1k-asm.c:912 xc16x-asm.c:777 +#: bpf-asm.c:581 epiphany-asm.c:856 fr30-asm.c:711 frv-asm.c:1664 +#: ip2k-asm.c:912 iq2000-asm.c:860 lm32-asm.c:750 m32c-asm.c:1985 +#: m32r-asm.c:729 mep-asm.c:1687 mt-asm.c:996 or1k-asm.c:971 xc16x-asm.c:777 #: xstormy16-asm.c:677 #, c-format msgid "bad instruction `%.50s...'" msgstr "Falscher Befehl »%.50s...«" -#: epiphany-asm.c:859 fr30-asm.c:714 frv-asm.c:1667 ip2k-asm.c:915 -#: iq2000-asm.c:863 lm32-asm.c:753 m32c-asm.c:1988 m32r-asm.c:732 -#: mep-asm.c:1691 mt-asm.c:999 or1k-asm.c:915 xc16x-asm.c:780 +#: bpf-asm.c:584 epiphany-asm.c:859 fr30-asm.c:714 frv-asm.c:1667 +#: ip2k-asm.c:915 iq2000-asm.c:863 lm32-asm.c:753 m32c-asm.c:1988 +#: m32r-asm.c:732 mep-asm.c:1690 mt-asm.c:999 or1k-asm.c:974 xc16x-asm.c:780 #: xstormy16-asm.c:680 #, c-format msgid "bad instruction `%.50s'" msgstr "Falscher Befehl »%.50s«" -#: epiphany-desc.c:2109 +#: bpf-desc.c:1671 #, c-format -msgid "internal error: epiphany_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" -msgstr "internal error: epiphany_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" +msgid "internal error: bpf_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" +msgstr "internal error: bpf_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" -#: epiphany-desc.c:2192 +#: bpf-desc.c:1759 #, c-format -msgid "internal error: epiphany_cgen_cpu_open: unsupported argument `%d'" -msgstr "internal error: epiphany_cgen_cpu_open: unsupported argument `%d'" +msgid "internal error: bpf_cgen_cpu_open: unsupported argument `%d'" +msgstr "internal error: bpf_cgen_cpu_open: unsupported argument `%d'" -#: epiphany-desc.c:2211 +#: bpf-desc.c:1778 #, c-format -msgid "internal error: epiphany_cgen_cpu_open: no endianness specified" -msgstr "internal error: epiphany_cgen_cpu_open: no endianness specified" +msgid "internal error: bpf_cgen_cpu_open: no endianness specified" +msgstr "internal error: bpf_cgen_cpu_open: no endianness specified" # Default text to print if an instruction isn't recognized. #. Default text to print if an instruction isn't recognized. -#: epiphany-dis.c:41 fr30-dis.c:41 frv-dis.c:41 ip2k-dis.c:41 iq2000-dis.c:41 -#: lm32-dis.c:41 m32c-dis.c:41 m32r-dis.c:41 mep-dis.c:41 mmix-dis.c:275 -#: mt-dis.c:41 nds32-dis.c:64 or1k-dis.c:41 xc16x-dis.c:41 xstormy16-dis.c:41 +#: bpf-dis.c:41 epiphany-dis.c:41 fr30-dis.c:41 frv-dis.c:41 ip2k-dis.c:41 +#: iq2000-dis.c:41 lm32-dis.c:41 m32c-dis.c:41 m32r-dis.c:41 mep-dis.c:41 +#: mmix-dis.c:293 mt-dis.c:41 nds32-dis.c:64 or1k-dis.c:41 xc16x-dis.c:41 +#: xstormy16-dis.c:41 msgid "*unknown*" msgstr "*unbekannt*" -#: epiphany-dis.c:279 fr30-dis.c:300 frv-dis.c:397 ip2k-dis.c:289 -#: iq2000-dis.c:190 lm32-dis.c:148 m32c-dis.c:892 m32r-dis.c:280 -#: mep-dis.c:1188 mt-dis.c:291 or1k-dis.c:145 xc16x-dis.c:421 +#: bpf-dis.c:203 epiphany-dis.c:279 fr30-dis.c:300 frv-dis.c:397 +#: ip2k-dis.c:289 iq2000-dis.c:190 lm32-dis.c:148 m32c-dis.c:892 +#: m32r-dis.c:280 mep-dis.c:1188 mt-dis.c:291 or1k-dis.c:175 xc16x-dis.c:421 #: xstormy16-dis.c:169 #, c-format msgid "internal error: unrecognized field %d while printing insn" msgstr "internal error: unrecognized field %d while printing insn" -#: epiphany-ibld.c:164 fr30-ibld.c:164 frv-ibld.c:164 ip2k-ibld.c:164 -#: iq2000-ibld.c:164 lm32-ibld.c:164 m32c-ibld.c:164 m32r-ibld.c:164 -#: mep-ibld.c:164 mt-ibld.c:164 or1k-ibld.c:164 xc16x-ibld.c:164 -#: xstormy16-ibld.c:164 +#: bpf-ibld.c:164 epiphany-ibld.c:164 fr30-ibld.c:164 frv-ibld.c:164 +#: ip2k-ibld.c:164 iq2000-ibld.c:164 lm32-ibld.c:164 m32c-ibld.c:164 +#: m32r-ibld.c:164 mep-ibld.c:164 mt-ibld.c:164 or1k-ibld.c:164 +#: xc16x-ibld.c:164 xstormy16-ibld.c:164 #, c-format msgid "operand out of range (%ld not between %ld and %lu)" msgstr "Operand außerhalb des gültigen Bereichs (%ld ist nicht zwischen %ld und %lu)" -#: epiphany-ibld.c:185 fr30-ibld.c:185 frv-ibld.c:185 ip2k-ibld.c:185 -#: iq2000-ibld.c:185 lm32-ibld.c:185 m32c-ibld.c:185 m32r-ibld.c:185 -#: mep-ibld.c:185 mt-ibld.c:185 or1k-ibld.c:185 xc16x-ibld.c:185 -#: xstormy16-ibld.c:185 +#: bpf-ibld.c:185 epiphany-ibld.c:185 fr30-ibld.c:185 frv-ibld.c:185 +#: ip2k-ibld.c:185 iq2000-ibld.c:185 lm32-ibld.c:185 m32c-ibld.c:185 +#: m32r-ibld.c:185 mep-ibld.c:185 mt-ibld.c:185 or1k-ibld.c:185 +#: xc16x-ibld.c:185 xstormy16-ibld.c:185 #, c-format msgid "operand out of range (0x%lx not between 0 and 0x%lx)" msgstr "Operand außerhalb des gültigen Bereichs (0x%lx ist nicht zwischen 0 und 0x%lx)." -#: epiphany-ibld.c:880 fr30-ibld.c:735 frv-ibld.c:861 ip2k-ibld.c:612 -#: iq2000-ibld.c:718 lm32-ibld.c:639 m32c-ibld.c:1736 m32r-ibld.c:670 -#: mep-ibld.c:1213 mt-ibld.c:754 or1k-ibld.c:658 xc16x-ibld.c:757 -#: xstormy16-ibld.c:683 +#: bpf-ibld.c:201 cgen-asm.c:351 epiphany-ibld.c:201 fr30-ibld.c:201 +#: frv-ibld.c:201 ip2k-ibld.c:201 iq2000-ibld.c:201 lm32-ibld.c:201 +#: m32c-ibld.c:201 m32r-ibld.c:201 mep-ibld.c:201 mt-ibld.c:201 +#: or1k-ibld.c:201 xc16x-ibld.c:201 xstormy16-ibld.c:201 +#, c-format +msgid "operand out of range (%ld not between %ld and %ld)" +msgstr "Operand außerhalb des gültigen Bereichs (%ld ist nicht zwischen %ld und %ld)" + +#: bpf-ibld.c:628 epiphany-ibld.c:883 fr30-ibld.c:738 frv-ibld.c:864 +#: ip2k-ibld.c:615 iq2000-ibld.c:721 lm32-ibld.c:642 m32c-ibld.c:1739 +#: m32r-ibld.c:673 mep-ibld.c:1216 mt-ibld.c:757 or1k-ibld.c:736 +#: xc16x-ibld.c:760 xstormy16-ibld.c:686 #, c-format msgid "internal error: unrecognized field %d while building insn" msgstr "internal error: unrecognized field %d while building insn" -#: epiphany-ibld.c:1175 fr30-ibld.c:941 frv-ibld.c:1179 ip2k-ibld.c:688 -#: iq2000-ibld.c:894 lm32-ibld.c:744 m32c-ibld.c:2898 m32r-ibld.c:808 -#: mep-ibld.c:1813 mt-ibld.c:975 or1k-ibld.c:772 xc16x-ibld.c:978 -#: xstormy16-ibld.c:830 +#: bpf-ibld.c:712 epiphany-ibld.c:1178 fr30-ibld.c:944 frv-ibld.c:1182 +#: ip2k-ibld.c:691 iq2000-ibld.c:897 lm32-ibld.c:747 m32c-ibld.c:2901 +#: m32r-ibld.c:811 mep-ibld.c:1816 mt-ibld.c:978 or1k-ibld.c:895 +#: xc16x-ibld.c:981 xstormy16-ibld.c:833 #, c-format msgid "internal error: unrecognized field %d while decoding insn" msgstr "internal error: unrecognized field %d while decoding insn" -#: epiphany-ibld.c:1319 fr30-ibld.c:1088 frv-ibld.c:1458 ip2k-ibld.c:763 -#: iq2000-ibld.c:1026 lm32-ibld.c:834 m32c-ibld.c:3516 m32r-ibld.c:922 -#: mep-ibld.c:2284 mt-ibld.c:1176 or1k-ibld.c:859 xc16x-ibld.c:1200 -#: xstormy16-ibld.c:941 +#: bpf-ibld.c:781 epiphany-ibld.c:1322 fr30-ibld.c:1091 frv-ibld.c:1461 +#: ip2k-ibld.c:766 iq2000-ibld.c:1029 lm32-ibld.c:837 m32c-ibld.c:3519 +#: m32r-ibld.c:925 mep-ibld.c:2287 mt-ibld.c:1179 or1k-ibld.c:991 +#: xc16x-ibld.c:1203 xstormy16-ibld.c:944 #, c-format msgid "internal error: unrecognized field %d while getting int operand" msgstr "internal error: unrecognized field %d while getting int operand" -#: epiphany-ibld.c:1445 fr30-ibld.c:1217 frv-ibld.c:1719 ip2k-ibld.c:820 -#: iq2000-ibld.c:1140 lm32-ibld.c:906 m32c-ibld.c:4116 m32r-ibld.c:1018 -#: mep-ibld.c:2737 mt-ibld.c:1359 or1k-ibld.c:928 xc16x-ibld.c:1404 -#: xstormy16-ibld.c:1034 +#: bpf-ibld.c:832 epiphany-ibld.c:1448 fr30-ibld.c:1220 frv-ibld.c:1722 +#: ip2k-ibld.c:823 iq2000-ibld.c:1143 lm32-ibld.c:909 m32c-ibld.c:4119 +#: m32r-ibld.c:1021 mep-ibld.c:2740 mt-ibld.c:1362 or1k-ibld.c:1069 +#: xc16x-ibld.c:1407 xstormy16-ibld.c:1037 #, c-format msgid "internal error: unrecognized field %d while getting vma operand" msgstr "internal error: unrecognized field %d while getting vma operand" -#: epiphany-ibld.c:1578 fr30-ibld.c:1349 frv-ibld.c:1987 ip2k-ibld.c:880 -#: iq2000-ibld.c:1261 lm32-ibld.c:985 m32c-ibld.c:4704 m32r-ibld.c:1120 -#: mep-ibld.c:3151 mt-ibld.c:1549 or1k-ibld.c:1004 xc16x-ibld.c:1609 -#: xstormy16-ibld.c:1134 +#: bpf-ibld.c:890 epiphany-ibld.c:1581 fr30-ibld.c:1352 frv-ibld.c:1990 +#: ip2k-ibld.c:883 iq2000-ibld.c:1264 lm32-ibld.c:988 m32c-ibld.c:4707 +#: m32r-ibld.c:1123 mep-ibld.c:3154 mt-ibld.c:1552 or1k-ibld.c:1154 +#: xc16x-ibld.c:1612 xstormy16-ibld.c:1137 #, c-format msgid "internal error: unrecognized field %d while setting int operand" msgstr "internal error: unrecognized field %d while setting int operand" -#: epiphany-ibld.c:1701 fr30-ibld.c:1471 frv-ibld.c:2245 ip2k-ibld.c:930 -#: iq2000-ibld.c:1372 lm32-ibld.c:1054 m32c-ibld.c:5282 m32r-ibld.c:1212 -#: mep-ibld.c:3555 mt-ibld.c:1729 or1k-ibld.c:1070 xc16x-ibld.c:1804 -#: xstormy16-ibld.c:1224 +#: bpf-ibld.c:938 epiphany-ibld.c:1704 fr30-ibld.c:1474 frv-ibld.c:2248 +#: ip2k-ibld.c:933 iq2000-ibld.c:1375 lm32-ibld.c:1057 m32c-ibld.c:5285 +#: m32r-ibld.c:1215 mep-ibld.c:3558 mt-ibld.c:1732 or1k-ibld.c:1229 +#: xc16x-ibld.c:1807 xstormy16-ibld.c:1227 #, c-format msgid "internal error: unrecognized field %d while setting vma operand" msgstr "internal error: unrecognized field %d while setting vma operand" +#: cgen-asm.c:373 +#, c-format +msgid "operand out of range (%lu not between %lu and %lu)" +msgstr "Operand außerhalb des gültigen Bereichs (%lu ist nicht zwischen %lu und %lu)" + +#: d30v-dis.c:232 +#, c-format +msgid "illegal id (%d)" +msgstr "Ungültige ID (%d)" + +#: d30v-dis.c:259 +#, c-format +msgid "<unknown register %d>" +msgstr "<unbekanntes Register %d>" + +# Can't happen. +#. Can't happen. +#: dis-buf.c:61 +#, c-format +msgid "Unknown error %d\n" +msgstr "Unbekannter Fehler %d\n" + +#: dis-buf.c:70 +#, c-format +msgid "Address 0x%s is out of bounds.\n" +msgstr "Adresse 0x%s ist außerhalb des gültigen Bereichs.\n" + +#: disassemble.c:840 +#, c-format +msgid "assertion fail %s:%d" +msgstr "Assertion fehlgeschlagen: %s:%d" + +#: disassemble.c:841 +msgid "Please report this bug" +msgstr "Bitte melden Sie diesen Fehler (auf Englisch, an https://www.sourceware.org/bugzilla/)" + +#: epiphany-asm.c:68 +msgid "register unavailable for short instructions" +msgstr "Dieses Register steht in kurzen Maschinenbefehlen nicht zur Verfügung" + +#: epiphany-asm.c:115 +msgid "register name used as immediate value" +msgstr "Registername fälschlicherweise als Direktwert benutzt" + +#. Don't treat "mov ip,ip" as a move-immediate. +#: epiphany-asm.c:178 epiphany-asm.c:234 +msgid "register source in immediate move" +msgstr "Register-Quelle in direktem »mov«" + +#: epiphany-asm.c:187 +msgid "byte relocation unsupported" +msgstr "Byte-Relokation nicht unterstützt" + +#. -- assembler routines inserted here. +#. -- asm.c +#: epiphany-asm.c:193 frv-asm.c:972 iq2000-asm.c:56 lm32-asm.c:95 +#: lm32-asm.c:127 lm32-asm.c:157 lm32-asm.c:187 lm32-asm.c:217 lm32-asm.c:247 +#: m32c-asm.c:140 m32c-asm.c:235 m32c-asm.c:276 m32c-asm.c:334 m32c-asm.c:355 +#: m32r-asm.c:53 mep-asm.c:241 mep-asm.c:259 mep-asm.c:274 mep-asm.c:289 +#: mep-asm.c:301 or1k-asm.c:54 +msgid "missing `)'" +msgstr "Fehlende »)«." + +#: epiphany-asm.c:270 +msgid "ABORT: unknown operand" +msgstr "ABBRUCH: Unbekannter Operand" + +#: epiphany-asm.c:296 +msgid "Not a pc-relative address." +msgstr "Das ist keine PC-relative Adresse." + +#: epiphany-desc.c:2109 +#, c-format +msgid "internal error: epiphany_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" +msgstr "internal error: epiphany_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" + +#: epiphany-desc.c:2197 +#, c-format +msgid "internal error: epiphany_cgen_cpu_open: unsupported argument `%d'" +msgstr "internal error: epiphany_cgen_cpu_open: unsupported argument `%d'" + +#: epiphany-desc.c:2216 +#, c-format +msgid "internal error: epiphany_cgen_cpu_open: no endianness specified" +msgstr "internal error: epiphany_cgen_cpu_open: no endianness specified" + #: fr30-asm.c:93 m32c-asm.c:872 m32c-asm.c:879 msgid "Register number is not valid" msgstr "Die Registernummer ist nicht gültig" @@ -922,12 +980,12 @@ msgid "internal error: fr30_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" msgstr "internal error: fr30_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" -#: fr30-desc.c:1669 +#: fr30-desc.c:1674 #, c-format msgid "internal error: fr30_cgen_cpu_open: unsupported argument `%d'" msgstr "internal error: fr30_cgen_cpu_open: unsupported argument `%d'" -#: fr30-desc.c:1688 +#: fr30-desc.c:1693 #, c-format msgid "internal error: fr30_cgen_cpu_open: no endianness specified" msgstr "internal error: fr30_cgen_cpu_open: no endianness specified" @@ -953,12 +1011,12 @@ msgid "internal error: frv_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" msgstr "internal error: frv_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" -#: frv-desc.c:6409 +#: frv-desc.c:6414 #, c-format msgid "internal error: frv_cgen_cpu_open: unsupported argument `%d'" msgstr "internal error: frv_cgen_cpu_open: unsupported argument `%d'" -#: frv-desc.c:6428 +#: frv-desc.c:6433 #, c-format msgid "internal error: frv_cgen_cpu_open: no endianness specified" msgstr "internal error: frv_cgen_cpu_open: no endianness specified" @@ -978,26 +1036,21 @@ msgid "internal error: bad insn unit" msgstr "internal error: bad insn unit" -#: h8300-dis.c:63 -#, c-format -msgid "internal error, h8_disassemble_init" -msgstr "internal error, h8_disassemble_init" - -#: h8300-dis.c:314 +#: h8300-dis.c:309 #, c-format msgid "Hmmmm 0x%x" msgstr "Hmmmm 0x%x" -#: h8300-dis.c:691 +#: h8300-dis.c:617 #, c-format msgid "Don't understand 0x%x \n" msgstr "Ich verstehe »0x%x« nicht.\n" -#: i386-dis.c:11058 +#: i386-dis.c:11040 msgid "<internal disassembler error>" msgstr "<interner Disassemblerfehler>" -#: i386-dis.c:11353 +#: i386-dis.c:11337 #, c-format msgid "" "\n" @@ -1009,32 +1062,32 @@ "mit dem Schalter »-M« unterstützt (mehrere Optionen sollten durch\n" "Kommata getrennt werden):\n" -#: i386-dis.c:11357 +#: i386-dis.c:11341 #, c-format msgid " x86-64 Disassemble in 64bit mode\n" msgstr " x86-64 Im 64-Bit-Modus disassemblieren\n" -#: i386-dis.c:11358 +#: i386-dis.c:11342 #, c-format msgid " i386 Disassemble in 32bit mode\n" msgstr " i386 Im 32-Bit-Modus disassemblieren\n" -#: i386-dis.c:11359 +#: i386-dis.c:11343 #, c-format msgid " i8086 Disassemble in 16bit mode\n" msgstr " i8086 Im 16-Bit-Modus disassemblieren\n" -#: i386-dis.c:11360 +#: i386-dis.c:11344 #, c-format msgid " att Display instruction in AT&T syntax\n" msgstr " att Maschinenbefehl in AT&T-syntax anzeigen\n" -#: i386-dis.c:11361 +#: i386-dis.c:11345 #, c-format msgid " intel Display instruction in Intel syntax\n" msgstr " intel Maschinenbefehl in Intel-Syntax anzeigen\n" -#: i386-dis.c:11362 +#: i386-dis.c:11346 #, c-format msgid "" " att-mnemonic\n" @@ -1043,7 +1096,7 @@ " att-mnemonic\n" " Maschinenbefehl in AT&T-Mnemonic anzeigen\n" -#: i386-dis.c:11364 +#: i386-dis.c:11348 #, c-format msgid "" " intel-mnemonic\n" @@ -1052,106 +1105,106 @@ " intel-mnemonic\n" " Maschinenbefehl in Intel-Mnemonic anzeigen\n" -#: i386-dis.c:11366 +#: i386-dis.c:11350 #, c-format msgid " addr64 Assume 64bit address size\n" msgstr " addr64 64-Bit-Adressgröße annehmen\n" -#: i386-dis.c:11367 +#: i386-dis.c:11351 #, c-format msgid " addr32 Assume 32bit address size\n" msgstr " addr32 32-Bit-Adressgröße annehmen\n" -#: i386-dis.c:11368 +#: i386-dis.c:11352 #, c-format msgid " addr16 Assume 16bit address size\n" msgstr " addr16 16-Bit-Adressgröße annehmen\n" -#: i386-dis.c:11369 +#: i386-dis.c:11353 #, c-format msgid " data32 Assume 32bit data size\n" msgstr " data32 32-Bit-Datengröße annehmen\n" -#: i386-dis.c:11370 +#: i386-dis.c:11354 #, c-format msgid " data16 Assume 16bit data size\n" msgstr " data16 16-Bit-Datengröße annehmen\n" -#: i386-dis.c:11371 +#: i386-dis.c:11355 #, c-format msgid " suffix Always display instruction suffix in AT&T syntax\n" msgstr " suffix Maschinenbefehl-Suffix immer in AT&T-Syntax anzeigen\n" -#: i386-dis.c:11372 +#: i386-dis.c:11356 #, c-format msgid " amd64 Display instruction in AMD64 ISA\n" msgstr " amd64 Maschinenbefehl in AMD64-ISA anzeigen\n" -#: i386-dis.c:11373 +#: i386-dis.c:11357 #, c-format msgid " intel64 Display instruction in Intel64 ISA\n" msgstr " intel64 Maschinenbefehl in Intel64-ISA anzeigen\n" -#: i386-dis.c:11936 +#: i386-dis.c:11912 msgid "64-bit address is disabled" msgstr "64-Bit-Adresse ist deaktiviert" -#: i386-gen.c:732 +#: i386-gen.c:793 #, c-format msgid "%s: error: " msgstr "%s: Fehler: " -#: i386-gen.c:911 +#: i386-gen.c:960 #, c-format msgid "%s: %d: unknown bitfield: %s\n" msgstr "%s: %d: Unbekanntes Bitfeld: %s\n" -#: i386-gen.c:913 +#: i386-gen.c:962 #, c-format msgid "unknown bitfield: %s\n" msgstr "Unbekanntes Bitfeld: %s\n" -#: i386-gen.c:976 +#: i386-gen.c:1025 #, c-format msgid "%s: %d: missing `)' in bitfield: %s\n" msgstr "%s: %d: Hier fehlt eine »)« im Bitfeld: %s\n" -#: i386-gen.c:1077 +#: i386-gen.c:1126 #, c-format msgid "unknown broadcast operand: %s\n" msgstr "Unbekannter Broadcast-Operand: %s\n" -#: i386-gen.c:1478 +#: i386-gen.c:1777 #, c-format msgid "can't find i386-reg.tbl for reading, errno = %s\n" msgstr "Kann »i386-reg.tbl« nicht zum Lesen finden, errno = %s\n" -#: i386-gen.c:1556 +#: i386-gen.c:1855 #, c-format msgid "can't create i386-init.h, errno = %s\n" msgstr "Kann i386-init.h nicht anlegen, errno = %s\n" -#: i386-gen.c:1646 ia64-gen.c:2829 +#: i386-gen.c:1945 ia64-gen.c:2829 #, c-format msgid "unable to change directory to \"%s\", errno = %s\n" msgstr "Kann nicht in das Verzeichnis »%s« wechseln, errno = %s\n" -#: i386-gen.c:1658 i386-gen.c:1661 +#: i386-gen.c:1959 i386-gen.c:1964 #, c-format msgid "CpuMax != %d!\n" msgstr "CpuMax != %d\n" -#: i386-gen.c:1665 +#: i386-gen.c:1968 #, c-format msgid "%d unused bits in i386_cpu_flags.\n" msgstr "%d ungenutzte Bits in i386_cpu_flags.\n" -#: i386-gen.c:1672 +#: i386-gen.c:1983 #, c-format msgid "%d unused bits in i386_operand_type.\n" msgstr "%d ungenutzte Bits in i386_operand_type.\n" -#: i386-gen.c:1686 +#: i386-gen.c:1997 #, c-format msgid "can't create i386-tbl.h, errno = %s\n" msgstr "Kann i386-tbl.h nicht anlegen, errno = %s\n" @@ -1327,12 +1380,12 @@ msgid "internal error: ip2k_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" msgstr "internal error: ip2k_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" -#: ip2k-desc.c:1098 +#: ip2k-desc.c:1103 #, c-format msgid "internal error: ip2k_cgen_cpu_open: unsupported argument `%d'" msgstr "internal error: ip2k_cgen_cpu_open: unsupported argument `%d'" -#: ip2k-desc.c:1117 +#: ip2k-desc.c:1122 #, c-format msgid "internal error: ip2k_cgen_cpu_open: no endianness specified" msgstr "internal error: ip2k_cgen_cpu_open: no endianness specified" @@ -1354,12 +1407,12 @@ msgid "internal error: iq2000_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" msgstr "internal error: iq2000_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" -#: iq2000-desc.c:2103 +#: iq2000-desc.c:2108 #, c-format msgid "internal error: iq2000_cgen_cpu_open: unsupported argument `%d'" msgstr "internal error: iq2000_cgen_cpu_open: unsupported argument `%d'" -#: iq2000-desc.c:2122 +#: iq2000-desc.c:2127 #, c-format msgid "internal error: iq2000_cgen_cpu_open: no endianness specified" msgstr "internal error: iq2000_cgen_cpu_open: no endianness specified" @@ -1385,22 +1438,22 @@ msgid "internal error: lm32_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" msgstr "internal error: lm32_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" -#: lm32-desc.c:1085 +#: lm32-desc.c:1090 #, c-format msgid "internal error: lm32_cgen_cpu_open: unsupported argument `%d'" msgstr "internal error: lm32_cgen_cpu_open: unsupported argument `%d'" -#: lm32-desc.c:1104 +#: lm32-desc.c:1109 #, c-format msgid "internal error: lm32_cgen_cpu_open: no endianness specified" msgstr "internal error: lm32_cgen_cpu_open: no endianness specified" -#: m10200-dis.c:157 m10300-dis.c:580 +#: m10200-dis.c:151 m10300-dis.c:574 #, c-format msgid "unknown\t0x%04lx" msgstr "unbekannt\t0x%04lx" -#: m10200-dis.c:327 +#: m10200-dis.c:321 #, c-format msgid "unknown\t0x%02lx" msgstr "unbekannt\t0x%02lx" @@ -1484,12 +1537,12 @@ msgid "internal error: m32c_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" msgstr "internal error: m32c_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" -#: m32c-desc.c:63116 +#: m32c-desc.c:63121 #, c-format msgid "internal error: m32c_cgen_cpu_open: unsupported argument `%d'" msgstr "internal error: m32c_cgen_cpu_open: unsupported argument `%d'" -#: m32c-desc.c:63135 +#: m32c-desc.c:63140 #, c-format msgid "internal error: m32c_cgen_cpu_open: no endianness specified" msgstr "internal error: m32c_cgen_cpu_open: no endianness specified" @@ -1499,22 +1552,22 @@ msgid "internal error: m32r_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" msgstr "internal error: m32r_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" -#: m32r-desc.c:1448 +#: m32r-desc.c:1453 #, c-format msgid "internal error: m32r_cgen_cpu_open: unsupported argument `%d'" msgstr "internal error: m32r_cgen_cpu_open: unsupported argument `%d'" -#: m32r-desc.c:1467 +#: m32r-desc.c:1472 #, c-format msgid "internal error: m32r_cgen_cpu_open: no endianness specified" msgstr "internal error: m32r_cgen_cpu_open: no endianness specified" -#: m68k-dis.c:1292 +#: m68k-dis.c:1294 #, c-format msgid "<function code %d>" msgstr "<Funktionscode %d>" -#: m68k-dis.c:1455 +#: m68k-dis.c:1457 #, c-format msgid "<internal error in opcode table: %s %s>\n" msgstr "<interner Fehler in der Opcode-Tabelle: %s %s>\n" @@ -1557,35 +1610,35 @@ msgid "internal error: mep_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" msgstr "internal error: mep_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" -#: mep-desc.c:6309 +#: mep-desc.c:6314 #, c-format msgid "internal error: mep_cgen_cpu_open: unsupported argument `%d'" msgstr "internal error: mep_cgen_cpu_open: unsupported argument `%d'" -#: mep-desc.c:6328 +#: mep-desc.c:6333 #, c-format msgid "internal error: mep_cgen_cpu_open: no endianness specified" msgstr "internal error: mep_cgen_cpu_open: no endianness specified" -#: mips-dis.c:1800 mips-dis.c:2026 +#: mips-dis.c:1805 mips-dis.c:2031 #, c-format msgid "# internal error, undefined operand in `%s %s'" msgstr "# Interner Fehler, undefinierter Operand in „%s %s“" -#: mips-dis.c:2615 +#: mips-dis.c:2620 msgid "Use canonical instruction forms.\n" msgstr "Kanonische Form der Befehle verwenden.\n" # We couldn't parse it. -#: mips-dis.c:2617 +#: mips-dis.c:2622 msgid "Recognize MSA instructions.\n" msgstr "MSA-Befehle erkennen.\n" -#: mips-dis.c:2619 +#: mips-dis.c:2624 msgid "Recognize the virtualization ASE instructions.\n" msgstr "ASE-Befehle für Virtualisierung erkennen.\n" -#: mips-dis.c:2621 +#: mips-dis.c:2626 msgid "" "Recognize the eXtended Physical Address (XPA) ASE\n" " instructions.\n" @@ -1593,27 +1646,27 @@ "Befehle für eXtended Physical Address (XPA)\n" " Adressraumerweiterung erkennen.\n" -#: mips-dis.c:2624 +#: mips-dis.c:2629 msgid "Recognize the Global INValidate (GINV) ASE instructions.\n" msgstr "Befehle für Global INValidate (GINV) Adressraumerweiterung erkennen.\n" -#: mips-dis.c:2628 +#: mips-dis.c:2633 msgid "Recognize the Loongson MultiMedia extensions Instructions (MMI) ASE instructions.\n" msgstr "Die Loongson-ASE-Befehle für MultiMedia extensions Instructions (MMI) erkennen.\n" -#: mips-dis.c:2632 +#: mips-dis.c:2637 msgid "Recognize the Loongson Content Address Memory (CAM) instructions.\n" msgstr "Die Loongson-Befehle für Content Address Memory (CAM) erkennen.\n" -#: mips-dis.c:2636 +#: mips-dis.c:2641 msgid "Recognize the Loongson EXTensions (EXT) instructions.\n" msgstr "Die Loongson-Befehle für EXTensions (EXT) erkennen.\n" -#: mips-dis.c:2640 +#: mips-dis.c:2645 msgid "Recognize the Loongson EXTensions R2 (EXT2) instructions.\n" msgstr "Die Loongson-Befehle für EXTensions R2 (EXT2) erkennen.\n" -#: mips-dis.c:2643 +#: mips-dis.c:2648 msgid "" "Print GPR names according to specified ABI.\n" " Default: based on binary being disassembled.\n" @@ -1621,7 +1674,7 @@ "Namen der Mehrzweckregister entsprechend des angegebenen ABI ausgeben.\n" "Standard: abhängig von der Binärdatei, die disassembliert wird.\n" -#: mips-dis.c:2646 +#: mips-dis.c:2651 msgid "" "Print FPR names according to specified ABI.\n" " Default: numeric.\n" @@ -1629,7 +1682,7 @@ "FPR-Namen entsprechend des angegebenen ABI ausgeben.\n" " Vorgabe: numerisch.\n" -#: mips-dis.c:2649 +#: mips-dis.c:2654 msgid "" "Print CP0 register names according to specified architecture.\n" " Default: based on binary being disassembled.\n" @@ -1637,7 +1690,7 @@ "CP0-Registernamen entsprechend der angegebenen Architektur ausgeben.\n" " Vorgabe: abhängig von der Binärdatei, die disassembliert wird.\n" -#: mips-dis.c:2653 +#: mips-dis.c:2658 msgid "" "Print HWR names according to specified architecture.\n" " Default: based on binary being disassembled.\n" @@ -1645,17 +1698,17 @@ "HWR-Namen entsprechend der angegebenen Architektur ausgeben.\n" " Vorgabe: abhängig von der Binärdatei, die disassembliert wird.\n" -#: mips-dis.c:2656 +#: mips-dis.c:2661 msgid "Print GPR and FPR names according to specified ABI.\n" msgstr "GPR- und FPR-Namen entsprechend des angegebenen ABI ausgeben.\n" -#: mips-dis.c:2658 +#: mips-dis.c:2663 msgid "" "Print CP0 register and HWR names according to specified\n" " architecture." msgstr "CP0-Register und HWR-Namen entsprechend der angegebenen Architektur ausgeben." -#: mips-dis.c:2744 +#: mips-dis.c:2749 #, c-format msgid "" "\n" @@ -1669,7 +1722,7 @@ "Kommata getrennt werden):\n" "\n" -#: mips-dis.c:2778 +#: mips-dis.c:2783 #, c-format msgid "" "\n" @@ -1694,7 +1747,11 @@ msgid "(unknown)" msgstr "(unbekannt)" -#: mmix-dis.c:510 +#: mmix-dis.c:247 mmix-dis.c:255 +msgid "*illegal*" +msgstr "*ungültig*" + +#: mmix-dis.c:529 #, c-format msgid "*unknown operands type: %d*" msgstr "Unbekannter Operandentyp: %d*" @@ -1753,12 +1810,12 @@ msgid "internal error: mt_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" msgstr "internal error: mt_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" -#: mt-desc.c:1229 +#: mt-desc.c:1234 #, c-format msgid "internal error: mt_cgen_cpu_open: unsupported argument `%d'" msgstr "internal error: mt_cgen_cpu_open: unsupported argument `%d'" -#: mt-desc.c:1248 +#: mt-desc.c:1253 #, c-format msgid "internal error: mt_cgen_cpu_open: no endianness specified" msgstr "internal error: mt_cgen_cpu_open: no endianness specified" @@ -1778,6 +1835,10 @@ msgid "internal error: unknown hardware resource" msgstr "internal error: unknown hardware resource" +#: nds32-dis.c:1186 +msgid "insufficient data to decode instruction" +msgstr "Nicht genug Daten, um Befehl zu dekodieren" + #: nfp-dis.c:927 msgid "<invalid_instruction>:" msgstr "<ungültiger Maschinenbefehl>" @@ -1876,27 +1937,27 @@ msgid "internal relocation type invalid" msgstr "Interne Verlagerungsart ungültig" -#: or1k-desc.c:1978 +#: or1k-desc.c:2040 #, c-format msgid "internal error: or1k_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" msgstr "internal error: or1k_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" -#: or1k-desc.c:2061 +#: or1k-desc.c:2128 #, c-format msgid "internal error: or1k_cgen_cpu_open: unsupported argument `%d'" msgstr "internal error: or1k_cgen_cpu_open: unsupported argument `%d'" -#: or1k-desc.c:2080 +#: or1k-desc.c:2147 #, c-format msgid "internal error: or1k_cgen_cpu_open: no endianness specified" msgstr "internal error: or1k_cgen_cpu_open: no endianness specified" -#: ppc-dis.c:370 +#: ppc-dis.c:386 #, c-format msgid "warning: ignoring unknown -M%s option" msgstr "Warnung: Unbekannte Option »-M%s« wird ignoriert" -#: ppc-dis.c:858 +#: ppc-dis.c:977 #, c-format msgid "" "\n" @@ -1911,109 +1972,146 @@ msgid "invalid register" msgstr "Ungültiges Register" -#: ppc-opc.c:384 ppc-opc.c:412 +#: ppc-opc.c:396 msgid "invalid conditional option" msgstr "Ungültige bedingte Option" -#: ppc-opc.c:386 ppc-opc.c:414 +#: ppc-opc.c:399 msgid "invalid counter access" msgstr "Ungültiger Zugriff auf Zähler" -#: ppc-opc.c:416 +#: ppc-opc.c:463 +msgid "BO value implies no branch hint, when using + or - modifier" +msgstr "BO-Wert führt nicht zu Sprungvorhersage, bei Verwendung der Modifikatoren »+« oder »-«" + +#: ppc-opc.c:468 msgid "attempt to set y bit when using + or - modifier" msgstr "Versuch, das y-Bit zusammen mit dem Modifikator »+« oder »-« zu setzen" -#: ppc-opc.c:507 +#: ppc-opc.c:470 +msgid "attempt to set 'at' bits when using + or - modifier" +msgstr "Versuch, die at-Bits zusammen mit dem Modifikator »+« oder »-« zu setzen" + +#: ppc-opc.c:677 +msgid "invalid R operand" +msgstr "Ungültiger R-Operand" + +#: ppc-opc.c:732 msgid "invalid mask field" msgstr "Ungültiges Maskierungsfeld" -#: ppc-opc.c:530 +#: ppc-opc.c:755 msgid "invalid mfcr mask" msgstr "Ungültige mfcr-Maske" -#: ppc-opc.c:606 +#: ppc-opc.c:873 ppc-opc.c:891 msgid "illegal L operand value" msgstr "Unerlaubter Wert für L-Operanden" -#: ppc-opc.c:645 +#: ppc-opc.c:914 +msgid "illegal WC operand value" +msgstr "Unerlaubter Wert für WC-Operanden" + +#: ppc-opc.c:1011 msgid "incompatible L operand value" msgstr "Inkompatibler L-Operandenwert" -#: ppc-opc.c:684 ppc-opc.c:719 +#: ppc-opc.c:1051 ppc-opc.c:1086 msgid "illegal bitmask" msgstr "Ungültige Bitmaske" -#: ppc-opc.c:806 +#: ppc-opc.c:1173 msgid "address register in load range" msgstr "Adressregister im Ladebereich (load range)" -#: ppc-opc.c:872 +#: ppc-opc.c:1213 +msgid "illegal PL operand value" +msgstr "Unerlaubter Wert für PL-Operanden" + +#: ppc-opc.c:1274 msgid "index register in load range" msgstr "Indexregister im Ladebereich (load range)" -#: ppc-opc.c:901 ppc-opc.c:986 +#: ppc-opc.c:1303 ppc-opc.c:1389 msgid "source and target register operands must be different" msgstr "Die Operanden für das Quell- und Zielregister müssen verschieden sein" -#: ppc-opc.c:931 +#: ppc-opc.c:1334 msgid "invalid register operand when updating" msgstr "Ungültiger Registeroperand beim Aktualisieren" -#: ppc-opc.c:1049 +#: ppc-opc.c:1452 msgid "illegal immediate value" msgstr "Unerlaubter Direktwert" -#: ppc-opc.c:1154 +#: ppc-opc.c:1557 msgid "invalid bat number" msgstr "Ungültige bat-Nummer" -#: ppc-opc.c:1189 +#: ppc-opc.c:1592 msgid "invalid sprg number" msgstr "Ungültige sprg-Nummer" -#: ppc-opc.c:1226 +#: ppc-opc.c:1629 msgid "invalid tbr number" msgstr "Ungültige tbr-Nummer" -#: ppc-opc.c:1372 +#: ppc-opc.c:1715 ppc-opc.c:1761 +msgid "VSR overlaps ACC operand" +msgstr "VSR überlappt den ACC-Operanden" + +#: ppc-opc.c:1868 msgid "invalid constant" msgstr "Ungültige Konstante" -#: ppc-opc.c:1474 ppc-opc.c:1497 ppc-opc.c:1520 ppc-opc.c:1543 +#: ppc-opc.c:1970 ppc-opc.c:1993 ppc-opc.c:2016 ppc-opc.c:2039 msgid "UIMM = 00000 is illegal" msgstr "UIMM = 0000 ist ungültig" -#: ppc-opc.c:1566 +#: ppc-opc.c:2062 msgid "UIMM values >7 are illegal" msgstr "UIMM-Werte > 7 sind ungültig" -#: ppc-opc.c:1589 +#: ppc-opc.c:2085 msgid "UIMM values >15 are illegal" msgstr "UIMM-Werte > 15 sind ungültig" -#: ppc-opc.c:1612 +#: ppc-opc.c:2108 msgid "GPR odd is illegal" msgstr "GPR ungerade ist ungültig" -#: ppc-opc.c:1635 ppc-opc.c:1658 +#: ppc-opc.c:2131 ppc-opc.c:2154 msgid "invalid offset" msgstr "Ungültiger Offset" -#: ppc-opc.c:1681 +#: ppc-opc.c:2177 msgid "invalid Ddd value" msgstr "Ungültiger Ddd-Wert" -#: riscv-dis.c:68 +#. The option without '=' should be defined above. +#: riscv-dis.c:85 riscv-dis.c:109 #, c-format msgid "unrecognized disassembler option: %s" msgstr "Unbekannte Disassembler-Option: %s" -#: riscv-dis.c:346 +#. Invalid options with '=', no option name before '=', +#. and no value after '='. +#: riscv-dis.c:93 +#, c-format +msgid "unrecognized disassembler option with '=': %s" +msgstr "Unbekannte Disassembler-Option mit »=«: %s" + +#: riscv-dis.c:103 +#, c-format +msgid "unknown privilege spec set by %s=%s" +msgstr "Unbekannte Privilegien-Angabe durch %s=%s" + +#: riscv-dis.c:406 #, c-format msgid "# internal error, undefined modifier (%c)" msgstr "# Interner Fehler, unerkannter Modifikator (%c)" -#: riscv-dis.c:541 +#: riscv-dis.c:605 #, c-format msgid "" "\n" @@ -2025,25 +2123,68 @@ "mit dem Schalter »-M« unterstützt (mehrere Optionen sollten durch\n" "Kommata getrennt werden):\n" -#: riscv-dis.c:545 +#: riscv-dis.c:609 #, c-format msgid "" "\n" -" numeric Print numeric register names, rather than ABI names.\n" +" numeric Print numeric register names, rather than ABI names.\n" msgstr "" "\n" -" numeric Numerische Registernamen statt ABI-Namen ausgeben.\n" +" numeric Numerische Registernamen statt ABI-Namen ausgeben.\n" -#: riscv-dis.c:548 +#: riscv-dis.c:612 #, c-format msgid "" "\n" -" no-aliases Disassemble only into canonical instructions, rather\n" -" than into pseudoinstructions.\n" +" no-aliases Disassemble only into canonical instructions, rather\n" +" than into pseudoinstructions.\n" msgstr "" "\n" -" no-aliases Ausschließlich kanonische Befehle beim Disassemblieren\n" -" verwenden, anstelle von Pseudobefehlen.\n" +" no-aliases Ausschließlich kanonische Befehle beim Disassemblieren\n" +" verwenden, anstelle von Pseudobefehlen.\n" + +#: riscv-dis.c:616 +#, c-format +msgid "" +"\n" +" priv-spec=PRIV Print the CSR according to the chosen privilege spec\n" +" (1.9, 1.9.1, 1.10, 1.11).\n" +msgstr "" +"\n" +" priv-spec=PRIV Die CSR gemäß der gewählten Privilegien-Angabe ausgeben\n" +" (1.9, 1.9.1, 1.10, 1.11).\n" + +#: rx-dis.c:139 rx-dis.c:163 rx-dis.c:171 rx-dis.c:179 rx-dis.c:187 +msgid "<invalid register number>" +msgstr "<ungültige Registernummer>" + +#: rx-dis.c:147 rx-dis.c:195 +msgid "<invalid condition code>" +msgstr "<ungültiger Bedingungscode>" + +#: rx-dis.c:155 +msgid "<invalid flag>" +msgstr "<ungültiges Flag>" + +#: rx-dis.c:203 +msgid "<invalid opsize>" +msgstr "<ungültige Operandengröße>" + +#: rx-dis.c:211 +msgid "<invalid size>" +msgstr "<ungültige Größe>" + +#: s12z-dis.c:251 s12z-dis.c:308 s12z-dis.c:319 +msgid "<illegal reg num>" +msgstr "<ungültige Registernummer>" + +#: s12z-dis.c:382 +msgid "<bad>" +msgstr "<falsch>" + +#: s12z-dis.c:392 +msgid ".<bad>" +msgstr ".<falsch>" #: s390-dis.c:42 msgid "Disassemble in ESA architecture mode" @@ -2074,8 +2215,8 @@ "mit dem Schalter »-M« unterstützt (mehrere Optionen sollten durch\n" "Kommata getrennt werden):\n" -#: score-dis.c:663 score-dis.c:870 score-dis.c:1031 score-dis.c:1145 -#: score-dis.c:1152 score-dis.c:1159 score7-dis.c:695 score7-dis.c:858 +#: score-dis.c:661 score-dis.c:879 score-dis.c:1040 score-dis.c:1146 +#: score-dis.c:1154 score-dis.c:1161 score7-dis.c:695 score7-dis.c:858 msgid "<illegal instruction>" msgstr "<ungültiger Maschinenbefehl>" @@ -2091,16 +2232,44 @@ # Mark as non-valid instruction. #. Mark as non-valid instruction. -#: sparc-dis.c:1098 +#: sparc-dis.c:1094 msgid "unknown" msgstr "unbekannt" -#: v850-dis.c:453 +#: v850-dis.c:190 +msgid "<invalid s-reg number>" +msgstr "<ungültige S-Register-Nummer>" + +#: v850-dis.c:206 +msgid "<invalid reg number>" +msgstr "<ungültige Registernummer>" + +#: v850-dis.c:222 +msgid "<invalid v-reg number>" +msgstr "<ungültige V-Register-Nummer>" + +#: v850-dis.c:236 +msgid "<invalid CC-reg number>" +msgstr "<ungültige CC-Register-Nummer>" + +#: v850-dis.c:250 +msgid "<invalid float-CC-reg number>" +msgstr "<ungültige Gleitkomma-CC-Register-Nummer>" + +#: v850-dis.c:264 +msgid "<invalid cacheop number>" +msgstr "<ungültige cacheop-Nummer>" + +#: v850-dis.c:275 +msgid "<invalid prefop number>" +msgstr "<ungültige prefop-Nummer>" + +#: v850-dis.c:510 #, c-format msgid "unknown operand shift: %x" msgstr "Unbekannte Operandenverschiebung: %x" -#: v850-dis.c:469 +#: v850-dis.c:526 #, c-format msgid "unknown reg: %d" msgstr "Unbekanntes Register: %d" @@ -2187,7 +2356,7 @@ msgid "Name well-known globals" msgstr "Wohlbekannte globale Namen benennen" -#: wasm32-dis.c:503 +#: wasm32-dis.c:537 #, c-format msgid "" "The following WebAssembly-specific disassembler options are supported for use\n" @@ -2225,12 +2394,12 @@ msgid "internal error: xc16x_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" msgstr "internal error: xc16x_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" -#: xc16x-desc.c:3432 +#: xc16x-desc.c:3437 #, c-format msgid "internal error: xc16x_cgen_cpu_open: unsupported argument `%d'" msgstr "internal error: xc16x_cgen_cpu_open: unsupported argument `%d'" -#: xc16x-desc.c:3451 +#: xc16x-desc.c:3456 #, c-format msgid "internal error: xc16x_cgen_cpu_open: no endianness specified" msgstr "internal error: xc16x_cgen_cpu_open: no endianness specified" @@ -2280,16 +2449,19 @@ msgid "internal error: xstormy16_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" msgstr "internal error: xstormy16_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" -#: xstormy16-desc.c:1400 +#: xstormy16-desc.c:1405 #, c-format msgid "internal error: xstormy16_cgen_cpu_open: unsupported argument `%d'" msgstr "internal error: xstormy16_cgen_cpu_open: unsupported argument `%d'" -#: xstormy16-desc.c:1419 +#: xstormy16-desc.c:1424 #, c-format msgid "internal error: xstormy16_cgen_cpu_open: no endianness specified" msgstr "internal error: xstormy16_cgen_cpu_open: no endianness specified" +#~ msgid "internal error, h8_disassemble_init" +#~ msgstr "internal error, h8_disassemble_init" + #~ msgid "can't find i386-opc.tbl for reading, errno = %s\n" #~ msgstr "Kann »i386-opc.tbl« nicht zum Lesen finden, errno = %s\n" Binary files /tmp/tmpwlqmdap4/HCMjq_z_kj/gdb-9.1/opcodes/po/fr.gmo and /tmp/tmpwlqmdap4/bi0oNuAXeo/gdb-10.2/opcodes/po/fr.gmo differ diff -Nru gdb-9.1/opcodes/po/fr.po gdb-10.2/opcodes/po/fr.po --- gdb-9.1/opcodes/po/fr.po 2019-09-20 21:58:17.000000000 +0000 +++ gdb-10.2/opcodes/po/fr.po 2021-04-25 04:06:26.000000000 +0000 @@ -7,14 +7,14 @@ # Stéphane Aulery <lkppo@free.fr>, 2015, 2017, 2019. # # Réencodage ISO-8859-1 => UTF-8 et typos, S. Aulery, 2015. -# Relecture complète, S. Aulery, 2015, 2017. +# Relecture complète, S. Aulery, 2015, 2017, 2020. # msgid "" msgstr "" -"Project-Id-Version: opcodes 2.31.90\n" +"Project-Id-Version: opcodes 2.33.90\n" "Report-Msgid-Bugs-To: bug-binutils@gnu.org\n" -"POT-Creation-Date: 2019-01-19 16:32+0000\n" -"PO-Revision-Date: 2019-05-21 20:13+0200\n" +"POT-Creation-Date: 2020-01-18 14:02+0000\n" +"PO-Revision-Date: 2020-05-07 18:11+0200\n" "Last-Translator: Stéphane Aulery <lkppo@free.fr>\n" "Language-Team: French <traduc@traduc.org>\n" "Language: fr\n" @@ -24,21 +24,21 @@ "X-Bugs: Report translation errors to the Language-Team address.\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: aarch64-asm.c:819 +#: aarch64-asm.c:809 msgid "specified register cannot be read from" msgstr "le registre spécifié ne peut pas être lu depuis" -#: aarch64-asm.c:828 +#: aarch64-asm.c:818 msgid "specified register cannot be written to" msgstr "le registre spécifié ne peut pas être écrit vers" #. Invalid option. -#: aarch64-dis.c:92 arc-dis.c:782 arm-dis.c:6174 +#: aarch64-dis.c:93 arc-dis.c:801 arm-dis.c:11361 #, c-format msgid "unrecognised disassembler option: %s" msgstr "option du désassembleur inconnue : %s" -#: aarch64-dis.c:3448 +#: aarch64-dis.c:3521 #, c-format msgid "" "\n" @@ -50,7 +50,7 @@ "avec l’utilisation de l’option -M (les options multiples doivent être\n" "séparées par des virgules) :\n" -#: aarch64-dis.c:3452 +#: aarch64-dis.c:3525 #, c-format msgid "" "\n" @@ -59,7 +59,7 @@ "\n" " no-aliases Ne pas afficher les alias des instructions.\n" -#: aarch64-dis.c:3455 +#: aarch64-dis.c:3528 #, c-format msgid "" "\n" @@ -68,7 +68,7 @@ "\n" " aliases Afficher les alias des instructions.\n" -#: aarch64-dis.c:3458 +#: aarch64-dis.c:3531 #, c-format msgid "" "\n" @@ -77,7 +77,7 @@ "\n" " no-notes Ne pas afficher les instructions.\n" -#: aarch64-dis.c:3461 +#: aarch64-dis.c:3534 #, c-format msgid "" "\n" @@ -86,7 +86,7 @@ "\n" " notes Afficher les alias les instructions.\n" -#: aarch64-dis.c:3465 +#: aarch64-dis.c:3538 #, c-format msgid "" "\n" @@ -95,264 +95,264 @@ "\n" " debug_dump Interrupteur temporaire pour la trace de débogage.\n" -#: aarch64-dis.c:3469 mips-dis.c:2773 mips-dis.c:2783 mips-dis.c:2786 -#: nfp-dis.c:2981 riscv-dis.c:552 +#: aarch64-dis.c:3542 mips-dis.c:2778 mips-dis.c:2788 mips-dis.c:2791 +#: nfp-dis.c:2981 riscv-dis.c:556 #, c-format msgid "\n" msgstr "\n" -#: aarch64-opc.c:1339 +#: aarch64-opc.c:1346 msgid "immediate value" msgstr "valeur immédiate" -#: aarch64-opc.c:1349 +#: aarch64-opc.c:1356 msgid "immediate offset" msgstr "décalage immédiat" -#: aarch64-opc.c:1359 +#: aarch64-opc.c:1366 msgid "register number" msgstr "numéro de registre" -#: aarch64-opc.c:1369 +#: aarch64-opc.c:1376 msgid "register element index" msgstr "index d’élément de registre" -#: aarch64-opc.c:1379 +#: aarch64-opc.c:1386 msgid "shift amount" msgstr "longueur du décalage" -#: aarch64-opc.c:1391 +#: aarch64-opc.c:1398 msgid "multiplier" msgstr "multiplicateur" -#: aarch64-opc.c:1464 +#: aarch64-opc.c:1471 msgid "reg pair must start from even reg" msgstr "Un registre paire doit commencer par un même registre" -#: aarch64-opc.c:1470 +#: aarch64-opc.c:1477 msgid "reg pair must be contiguous" msgstr "Un registre paire doit être continu" -#: aarch64-opc.c:1484 +#: aarch64-opc.c:1491 msgid "extraneous register" msgstr "registre externe" -#: aarch64-opc.c:1490 +#: aarch64-opc.c:1497 msgid "missing register" msgstr "registre manquant" -#: aarch64-opc.c:1501 +#: aarch64-opc.c:1508 msgid "stack pointer register expected" msgstr "registre de pointeur de pile attendu" -#: aarch64-opc.c:1524 +#: aarch64-opc.c:1533 msgid "z0-z15 expected" msgstr "z0-z15 attendu" -#: aarch64-opc.c:1525 +#: aarch64-opc.c:1534 msgid "z0-z7 expected" msgstr "z0-z7 attendu" -#: aarch64-opc.c:1551 +#: aarch64-opc.c:1560 msgid "invalid register list" msgstr "liste de registres invalide" -#: aarch64-opc.c:1565 +#: aarch64-opc.c:1574 msgid "p0-p7 expected" msgstr "p0-p7 attendu" -#: aarch64-opc.c:1591 aarch64-opc.c:1599 +#: aarch64-opc.c:1600 aarch64-opc.c:1608 msgid "unexpected address writeback" msgstr "cache writeback d’adresses inattendu" -#: aarch64-opc.c:1611 +#: aarch64-opc.c:1619 msgid "address writeback expected" msgstr "cache writeback d'adresses attendu" -#: aarch64-opc.c:1658 +#: aarch64-opc.c:1666 msgid "negative or unaligned offset expected" msgstr "décalage négatif ou non aligné attendu" -#: aarch64-opc.c:1715 +#: aarch64-opc.c:1723 msgid "invalid register offset" msgstr "décalage de registre invalide" -#: aarch64-opc.c:1737 +#: aarch64-opc.c:1745 msgid "invalid post-increment amount" msgstr "longueur de post-incrément invalide" -#: aarch64-opc.c:1753 aarch64-opc.c:2247 +#: aarch64-opc.c:1761 aarch64-opc.c:2269 msgid "invalid shift amount" msgstr "longueur de décalage invalide" -#: aarch64-opc.c:1766 +#: aarch64-opc.c:1774 msgid "invalid extend/shift operator" msgstr "opérateur étendu ou de décalage invalide" -#: aarch64-opc.c:1812 aarch64-opc.c:2052 aarch64-opc.c:2087 aarch64-opc.c:2106 -#: aarch64-opc.c:2114 aarch64-opc.c:2201 aarch64-opc.c:2377 aarch64-opc.c:2477 -#: aarch64-opc.c:2490 +#: aarch64-opc.c:1820 aarch64-opc.c:2072 aarch64-opc.c:2107 aarch64-opc.c:2126 +#: aarch64-opc.c:2134 aarch64-opc.c:2222 aarch64-opc.c:2399 aarch64-opc.c:2499 +#: aarch64-opc.c:2512 msgid "immediate out of range" msgstr "valeur immédiate hors intervalle" -#: aarch64-opc.c:1834 aarch64-opc.c:1876 aarch64-opc.c:1926 aarch64-opc.c:1960 +#: aarch64-opc.c:1842 aarch64-opc.c:1884 aarch64-opc.c:1946 aarch64-opc.c:1980 msgid "invalid addressing mode" msgstr "mode d’adressage incorrecte" -#: aarch64-opc.c:1918 +#: aarch64-opc.c:1938 msgid "index register xzr is not allowed" msgstr "registre d’index xzr non autorisé" -#: aarch64-opc.c:2040 aarch64-opc.c:2062 aarch64-opc.c:2280 aarch64-opc.c:2288 -#: aarch64-opc.c:2354 aarch64-opc.c:2383 +#: aarch64-opc.c:2060 aarch64-opc.c:2082 aarch64-opc.c:2302 aarch64-opc.c:2310 +#: aarch64-opc.c:2376 aarch64-opc.c:2405 msgid "invalid shift operator" msgstr "opérateur de décalage invalide" -#: aarch64-opc.c:2046 +#: aarch64-opc.c:2066 msgid "shift amount must be 0 or 12" msgstr "la longueur de décalage doit être 0 ou 12" -#: aarch64-opc.c:2069 +#: aarch64-opc.c:2089 msgid "shift amount must be a multiple of 16" msgstr "la longueur de décalage doit être un multiple de 16" -#: aarch64-opc.c:2081 +#: aarch64-opc.c:2101 msgid "negative immediate value not allowed" msgstr "valeur immédiate négative interdite" -#: aarch64-opc.c:2212 +#: aarch64-opc.c:2233 msgid "immediate zero expected" msgstr "valeur immédiate égale à zéro attendue" -#: aarch64-opc.c:2226 +#: aarch64-opc.c:2247 msgid "rotate expected to be 0, 90, 180 or 270" msgstr "rotation attendue de 0, 90, 180 ou 270" -#: aarch64-opc.c:2236 +#: aarch64-opc.c:2258 msgid "rotate expected to be 90 or 270" msgstr "rotation attendue de 90 ou 270" -#: aarch64-opc.c:2296 +#: aarch64-opc.c:2318 msgid "shift is not permitted" msgstr "décalage interdit" -#: aarch64-opc.c:2321 +#: aarch64-opc.c:2343 msgid "invalid value for immediate" msgstr "valeur immédiate invalide" -#: aarch64-opc.c:2346 +#: aarch64-opc.c:2368 msgid "shift amount must be 0 or 16" msgstr "longueur de décalage attendue de 0 ou 16" -#: aarch64-opc.c:2367 +#: aarch64-opc.c:2389 msgid "floating-point immediate expected" msgstr "valeur immédiate en virgule flottante attendue" -#: aarch64-opc.c:2401 +#: aarch64-opc.c:2423 msgid "no shift amount allowed for 8-bit constants" msgstr "longueur de décalage interdite pour les constantes 8 bits" -#: aarch64-opc.c:2411 +#: aarch64-opc.c:2433 msgid "shift amount must be 0 or 8" msgstr "longueur de décalage attendu de 0 ou 8" -#: aarch64-opc.c:2424 +#: aarch64-opc.c:2446 msgid "immediate too big for element size" msgstr "valeur immédiate trop grande pour la taille de l’élément" -#: aarch64-opc.c:2431 +#: aarch64-opc.c:2453 msgid "invalid arithmetic immediate" msgstr "arithmetique immédiate invalide" -#: aarch64-opc.c:2445 +#: aarch64-opc.c:2467 msgid "floating-point value must be 0.5 or 1.0" msgstr "la valeur en virgule doit être 0,5 ou 1,0" -#: aarch64-opc.c:2455 +#: aarch64-opc.c:2477 msgid "floating-point value must be 0.5 or 2.0" msgstr "la valeur en virgule doit être 0,5 ou 2,0" -#: aarch64-opc.c:2465 +#: aarch64-opc.c:2487 msgid "floating-point value must be 0.0 or 1.0" msgstr "la valeur en virgule doit être 0,0 ou 1,0" -#: aarch64-opc.c:2496 +#: aarch64-opc.c:2518 msgid "invalid replicated MOV immediate" msgstr "valeur immédiate répliquée MOV incorrecte" -#: aarch64-opc.c:2614 +#: aarch64-opc.c:2639 msgid "extend operator expected" msgstr "opérateur étendu attendu" -#: aarch64-opc.c:2627 +#: aarch64-opc.c:2652 msgid "missing extend operator" msgstr "opérateur étendu manquant" -#: aarch64-opc.c:2633 +#: aarch64-opc.c:2658 msgid "'LSL' operator not allowed" msgstr "opérateur LSL interdit" -#: aarch64-opc.c:2654 +#: aarch64-opc.c:2679 msgid "W register expected" msgstr "registre W attendu" -#: aarch64-opc.c:2665 +#: aarch64-opc.c:2690 msgid "shift operator expected" msgstr "opérateur de décalage attendu" -#: aarch64-opc.c:2672 +#: aarch64-opc.c:2697 msgid "'ROR' operator not allowed" msgstr "opérateur ROR interdit" -#: aarch64-opc.c:3671 +#: aarch64-opc.c:3711 msgid "reading from a write-only register" msgstr "lecture depuis un registre en lecture / écriture" -#: aarch64-opc.c:3673 +#: aarch64-opc.c:3713 msgid "writing to a read-only register" msgstr "écriture depuis un registre en lecture / écriture" -#: aarch64-opc.c:4815 +#: aarch64-opc.c:4880 msgid "instruction opens new dependency sequence without ending previous one" msgstr "l'instruction ouvre une nouvelle séquence de dépendance sans mettre fin à la précédente" -#: aarch64-opc.c:4835 +#: aarch64-opc.c:4900 msgid "previous `movprfx' sequence not closed" msgstr "la précédente séquence \"movprfx\" n'est pas terminée" -#: aarch64-opc.c:4852 +#: aarch64-opc.c:4919 msgid "SVE instruction expected after `movprfx'" msgstr "instruction SVE attendue après \"movprfx\"" -#: aarch64-opc.c:4865 +#: aarch64-opc.c:4932 msgid "SVE `movprfx' compatible instruction expected" msgstr "instruction compatible \"movprfx\" SVE attendue" -#: aarch64-opc.c:4956 +#: aarch64-opc.c:5019 msgid "predicated instruction expected after `movprfx'" msgstr "instuction prédite attendue après \"movprfx\"" -#: aarch64-opc.c:4968 +#: aarch64-opc.c:5031 msgid "merging predicate expected due to preceding `movprfx'" msgstr "prédiction de fusion attendue en raison de l'instruction précédente \"movprfx\"" -#: aarch64-opc.c:4980 +#: aarch64-opc.c:5043 msgid "predicate register differs from that in preceding `movprfx'" msgstr "registre prédit différent de celui de l'instruction précédente \"movprfx\"" -#: aarch64-opc.c:4999 +#: aarch64-opc.c:5062 msgid "output register of preceding `movprfx' not used in current instruction" msgstr "registre de sortie de l'instruction précédente \"movprfx\" non utilisé par l'instruction courante" -#: aarch64-opc.c:5012 +#: aarch64-opc.c:5075 msgid "output register of preceding `movprfx' expected as output" msgstr "registre de sortie de l'instruction précédente \"movprfx\" attendu comme sortie" -#: aarch64-opc.c:5024 +#: aarch64-opc.c:5087 msgid "output register of preceding `movprfx' used as input" msgstr "registre de sortie de l'instruction précédente \"movprfx\" utilisé comme entrée" -#: aarch64-opc.c:5040 +#: aarch64-opc.c:5103 msgid "register size not compatible with previous `movprfx'" msgstr "taille de registre incompatible avec l'instruction précédente \"movprfx\"" @@ -364,7 +364,7 @@ msgid "jump hint unaligned" msgstr "saut indicé non aligné" -#: arc-dis.c:377 +#: arc-dis.c:379 msgid "" "\n" "Warning: disassembly may be wrong due to guessed opcode class choice.\n" @@ -376,12 +376,12 @@ "Utiliser -M<classe[,classe]> pour sélectionner la ou les classes d’opcode correctes.\n" "\t\t\t\t" -#: arc-dis.c:825 +#: arc-dis.c:844 #, c-format msgid "unrecognised disassembler CPU option: %s" msgstr "option CPU du désassembleur inconnue : %s" -#: arc-dis.c:1387 +#: arc-dis.c:1411 #, c-format msgid "" "\n" @@ -393,42 +393,47 @@ "avec l’utilisation de l’option -M (les options multiples doivent être\n" "séparées par des virgules) :\n" -#: arc-dis.c:1399 +#: arc-dis.c:1423 #, c-format msgid " dsp Recognize DSP instructions.\n" msgstr " dsp Reconnaissance des instructions DSP.\n" -#: arc-dis.c:1401 +#: arc-dis.c:1425 #, c-format msgid " spfp Recognize FPX SP instructions.\n" msgstr " spfp Reconnaissance des instructions FPX SP.\n" -#: arc-dis.c:1403 +#: arc-dis.c:1427 #, c-format msgid " dpfp Recognize FPX DP instructions.\n" msgstr " dpfp Reconnaissance des instructions FPX DP.\n" -#: arc-dis.c:1405 +#: arc-dis.c:1429 #, c-format msgid " quarkse_em Recognize FPU QuarkSE-EM instructions.\n" msgstr " quarkse_em Reconnaissance des instructions FPU QuarkSE-EM.\n" -#: arc-dis.c:1407 +#: arc-dis.c:1431 #, c-format msgid " fpuda Recognize double assist FPU instructions.\n" msgstr " fpuda Reconnaissance des instructions FPU double assist.\n" -#: arc-dis.c:1409 +#: arc-dis.c:1433 #, c-format msgid " fpus Recognize single precision FPU instructions.\n" msgstr " fpus Reconnaissance des instructions FPU simple précision.\n" -#: arc-dis.c:1411 +#: arc-dis.c:1435 #, c-format msgid " fpud Recognize double precision FPU instructions.\n" msgstr " fpud Reconnaissance des instructions FPU double précision.\n" -#: arc-dis.c:1413 +#: arc-dis.c:1437 +#, c-format +msgid " nps400 Recognize NPS400 instructions.\n" +msgstr " nps400 Reconnaissance des instructions NPS400.\n" + +#: arc-dis.c:1439 #, c-format msgid " hex Use only hexadecimal number to print immediates.\n" msgstr " hex Utilise seulement la notation héxadécimale pour l'affichage.\n" @@ -594,48 +599,48 @@ msgid "invalid position, should be one of: 0,4,8,...124." msgstr "position incorrecte, devrait être 0, 4, 8… 124." -#: arm-dis.c:3242 +#: arm-dis.c:5105 msgid "Select raw register names" msgstr "Sélectionner les noms de registres bruts" -#: arm-dis.c:3244 +#: arm-dis.c:5107 msgid "Select register names used by GCC" msgstr "Sélectionner les noms de registres utilisés par GCC" -#: arm-dis.c:3246 +#: arm-dis.c:5109 msgid "Select register names used in ARM's ISA documentation" msgstr "Sélectionner les noms de registres utilisés dans la documentation ISA pour ARM" -#: arm-dis.c:3248 +#: arm-dis.c:5111 msgid "Assume all insns are Thumb insns" msgstr "Considérer tous les insns comme des index insns" -#: arm-dis.c:3249 +#: arm-dis.c:5112 msgid "Examine preceding label to determine an insn's type" msgstr "Examiner l’étiquette précédente pour déterminer le type d’insns" -#: arm-dis.c:3250 +#: arm-dis.c:5113 msgid "Select register names used in the APCS" msgstr "Sélectionner les noms de registres utilisés par APCS" -#: arm-dis.c:3252 +#: arm-dis.c:5115 msgid "Select register names used in the ATPCS" msgstr "Sélectionner les noms de registres utilisés par ATPCS" -#: arm-dis.c:3254 +#: arm-dis.c:5117 msgid "Select special register names used in the ATPCS" msgstr "Sélectionner les noms de registres spéciaux utilisés par ATPCS" -#: arm-dis.c:3652 +#: arm-dis.c:8286 msgid "<illegal precision>" msgstr "<précision illégale>" -#: arm-dis.c:6165 +#: arm-dis.c:11352 #, c-format msgid "unrecognised register name set: %s" msgstr "jeu de registres inconnu : %s" -#: arm-dis.c:6906 +#: arm-dis.c:12066 #, c-format msgid "" "\n" @@ -651,256 +656,277 @@ msgid "undefined" msgstr "indéfini(e)" -#: avr-dis.c:216 +#: avr-dis.c:218 #, c-format msgid "internal disassembler error" msgstr "erreur interne du désassembleur" -#: avr-dis.c:270 +#: avr-dis.c:272 #, c-format msgid "unknown constraint `%c'" msgstr "contrainte « %c » inconnue" -#: cgen-asm.c:351 epiphany-ibld.c:201 fr30-ibld.c:201 frv-ibld.c:201 -#: ip2k-ibld.c:201 iq2000-ibld.c:201 lm32-ibld.c:201 m32c-ibld.c:201 -#: m32r-ibld.c:201 mep-ibld.c:201 mt-ibld.c:201 or1k-ibld.c:201 -#: xc16x-ibld.c:201 xstormy16-ibld.c:201 -#, c-format -msgid "operand out of range (%ld not between %ld and %ld)" -msgstr "opérande hors intervalle (%ld n’est pas entre %ld et %ld)" - -#: cgen-asm.c:373 -#, c-format -msgid "operand out of range (%lu not between %lu and %lu)" -msgstr "opérande hors intervalle (%lu n’est pas entre %lu et %lu)" - -#: d30v-dis.c:229 -#, c-format -msgid "illegal id (%d)" -msgstr "id illégal (%d)" - -#: d30v-dis.c:256 -#, c-format -msgid "<unknown register %d>" -msgstr "<registre %d inconnu>" - -#. Can't happen. -#: dis-buf.c:61 -#, c-format -msgid "Unknown error %d\n" -msgstr "Erreur %d inconnue\n" - -#: dis-buf.c:70 -#, c-format -msgid "Address 0x%s is out of bounds.\n" -msgstr "Adresse 0x%s hors intervalle.\n" - -#: epiphany-asm.c:68 -msgid "register unavailable for short instructions" -msgstr "registre indisponible pour les instructions courtes" - -#: epiphany-asm.c:115 -msgid "register name used as immediate value" -msgstr "nom de registre utilisé comme valeur immédiate" - -#. Don't treat "mov ip,ip" as a move-immediate. -#: epiphany-asm.c:178 epiphany-asm.c:234 -msgid "register source in immediate move" -msgstr "registre source déplacé dans une valeur immédiate" - -#: epiphany-asm.c:187 -msgid "byte relocation unsupported" -msgstr "repositionnement d’octet indisponible" - -#. -- assembler routines inserted here. -#. -- asm.c -#: epiphany-asm.c:193 frv-asm.c:972 iq2000-asm.c:56 lm32-asm.c:95 -#: lm32-asm.c:127 lm32-asm.c:157 lm32-asm.c:187 lm32-asm.c:217 lm32-asm.c:247 -#: m32c-asm.c:140 m32c-asm.c:235 m32c-asm.c:276 m32c-asm.c:334 m32c-asm.c:355 -#: m32r-asm.c:53 mep-asm.c:241 mep-asm.c:259 mep-asm.c:274 mep-asm.c:289 -#: mep-asm.c:301 or1k-asm.c:54 -msgid "missing `)'" -msgstr "« ) » manquante" - -#: epiphany-asm.c:270 -msgid "ABORT: unknown operand" -msgstr "ABANDONNER : opérande inconnu" - -#: epiphany-asm.c:296 -msgid "Not a pc-relative address." -msgstr "N’est pas une adresse de type PC." - -#: epiphany-asm.c:456 fr30-asm.c:311 frv-asm.c:1264 ip2k-asm.c:512 -#: iq2000-asm.c:460 lm32-asm.c:350 m32c-asm.c:1585 m32r-asm.c:329 -#: mep-asm.c:1288 mt-asm.c:596 or1k-asm.c:512 xc16x-asm.c:377 +#: bpf-asm.c:97 +msgid "expected 16, 32 or 64 in" +msgstr "attendu 16, 32, ou 64 in" + +#: bpf-asm.c:181 epiphany-asm.c:456 fr30-asm.c:311 frv-asm.c:1264 +#: ip2k-asm.c:512 iq2000-asm.c:460 lm32-asm.c:350 m32c-asm.c:1585 +#: m32r-asm.c:329 mep-asm.c:1288 mt-asm.c:596 or1k-asm.c:580 xc16x-asm.c:377 #: xstormy16-asm.c:277 #, c-format msgid "internal error: unrecognized field %d while parsing" msgstr "erreur interne : Champ %d inconnu lors de l’analyse" -#: epiphany-asm.c:508 fr30-asm.c:363 frv-asm.c:1316 ip2k-asm.c:564 -#: iq2000-asm.c:512 lm32-asm.c:402 m32c-asm.c:1637 m32r-asm.c:381 -#: mep-asm.c:1340 mt-asm.c:648 or1k-asm.c:564 xc16x-asm.c:429 +#: bpf-asm.c:233 epiphany-asm.c:508 fr30-asm.c:363 frv-asm.c:1316 +#: ip2k-asm.c:564 iq2000-asm.c:512 lm32-asm.c:402 m32c-asm.c:1637 +#: m32r-asm.c:381 mep-asm.c:1340 mt-asm.c:648 or1k-asm.c:632 xc16x-asm.c:429 #: xstormy16-asm.c:329 msgid "missing mnemonic in syntax string" msgstr "mnémonique manquante dans la chaîne de syntaxe" #. We couldn't parse it. -#: epiphany-asm.c:643 epiphany-asm.c:647 epiphany-asm.c:736 epiphany-asm.c:843 -#: fr30-asm.c:498 fr30-asm.c:502 fr30-asm.c:591 fr30-asm.c:698 frv-asm.c:1451 -#: frv-asm.c:1455 frv-asm.c:1544 frv-asm.c:1651 ip2k-asm.c:699 ip2k-asm.c:703 -#: ip2k-asm.c:792 ip2k-asm.c:899 iq2000-asm.c:647 iq2000-asm.c:651 -#: iq2000-asm.c:740 iq2000-asm.c:847 lm32-asm.c:537 lm32-asm.c:541 -#: lm32-asm.c:630 lm32-asm.c:737 m32c-asm.c:1772 m32c-asm.c:1776 -#: m32c-asm.c:1865 m32c-asm.c:1972 m32r-asm.c:516 m32r-asm.c:520 -#: m32r-asm.c:609 m32r-asm.c:716 mep-asm.c:1475 mep-asm.c:1479 mep-asm.c:1568 -#: mep-asm.c:1675 mt-asm.c:783 mt-asm.c:787 mt-asm.c:876 mt-asm.c:983 -#: or1k-asm.c:699 or1k-asm.c:703 or1k-asm.c:792 or1k-asm.c:899 xc16x-asm.c:564 -#: xc16x-asm.c:568 xc16x-asm.c:657 xc16x-asm.c:764 xstormy16-asm.c:464 -#: xstormy16-asm.c:468 xstormy16-asm.c:557 xstormy16-asm.c:664 +#: bpf-asm.c:368 bpf-asm.c:372 bpf-asm.c:461 bpf-asm.c:568 epiphany-asm.c:643 +#: epiphany-asm.c:647 epiphany-asm.c:736 epiphany-asm.c:843 fr30-asm.c:498 +#: fr30-asm.c:502 fr30-asm.c:591 fr30-asm.c:698 frv-asm.c:1451 frv-asm.c:1455 +#: frv-asm.c:1544 frv-asm.c:1651 ip2k-asm.c:699 ip2k-asm.c:703 ip2k-asm.c:792 +#: ip2k-asm.c:899 iq2000-asm.c:647 iq2000-asm.c:651 iq2000-asm.c:740 +#: iq2000-asm.c:847 lm32-asm.c:537 lm32-asm.c:541 lm32-asm.c:630 +#: lm32-asm.c:737 m32c-asm.c:1772 m32c-asm.c:1776 m32c-asm.c:1865 +#: m32c-asm.c:1972 m32r-asm.c:516 m32r-asm.c:520 m32r-asm.c:609 m32r-asm.c:716 +#: mep-asm.c:1475 mep-asm.c:1479 mep-asm.c:1568 mep-asm.c:1675 mt-asm.c:783 +#: mt-asm.c:787 mt-asm.c:876 mt-asm.c:983 or1k-asm.c:767 or1k-asm.c:771 +#: or1k-asm.c:860 or1k-asm.c:967 xc16x-asm.c:564 xc16x-asm.c:568 +#: xc16x-asm.c:657 xc16x-asm.c:764 xstormy16-asm.c:464 xstormy16-asm.c:468 +#: xstormy16-asm.c:557 xstormy16-asm.c:664 msgid "unrecognized instruction" msgstr "instruction inconnue" -#: epiphany-asm.c:690 fr30-asm.c:545 frv-asm.c:1498 ip2k-asm.c:746 -#: iq2000-asm.c:694 lm32-asm.c:584 m32c-asm.c:1819 m32r-asm.c:563 -#: mep-asm.c:1522 mt-asm.c:830 or1k-asm.c:746 xc16x-asm.c:611 +#: bpf-asm.c:415 epiphany-asm.c:690 fr30-asm.c:545 frv-asm.c:1498 +#: ip2k-asm.c:746 iq2000-asm.c:694 lm32-asm.c:584 m32c-asm.c:1819 +#: m32r-asm.c:563 mep-asm.c:1522 mt-asm.c:830 or1k-asm.c:814 xc16x-asm.c:611 #: xstormy16-asm.c:511 #, c-format msgid "syntax error (expected char `%c', found `%c')" msgstr "erreur de syntaxe (caractère « %c » attendu, « %c » trouvé)" -#: epiphany-asm.c:700 fr30-asm.c:555 frv-asm.c:1508 ip2k-asm.c:756 -#: iq2000-asm.c:704 lm32-asm.c:594 m32c-asm.c:1829 m32r-asm.c:573 -#: mep-asm.c:1532 mt-asm.c:840 or1k-asm.c:756 xc16x-asm.c:621 +#: bpf-asm.c:425 epiphany-asm.c:700 fr30-asm.c:555 frv-asm.c:1508 +#: ip2k-asm.c:756 iq2000-asm.c:704 lm32-asm.c:594 m32c-asm.c:1829 +#: m32r-asm.c:573 mep-asm.c:1532 mt-asm.c:840 or1k-asm.c:824 xc16x-asm.c:621 #: xstormy16-asm.c:521 #, c-format msgid "syntax error (expected char `%c', found end of instruction)" msgstr "erreur de syntaxe (caractère « %c » attendu, fin de l’instruction trouvée)" -#: epiphany-asm.c:730 fr30-asm.c:585 frv-asm.c:1538 ip2k-asm.c:786 -#: iq2000-asm.c:734 lm32-asm.c:624 m32c-asm.c:1859 m32r-asm.c:603 -#: mep-asm.c:1562 mt-asm.c:870 or1k-asm.c:786 xc16x-asm.c:651 +#: bpf-asm.c:455 epiphany-asm.c:730 fr30-asm.c:585 frv-asm.c:1538 +#: ip2k-asm.c:786 iq2000-asm.c:734 lm32-asm.c:624 m32c-asm.c:1859 +#: m32r-asm.c:603 mep-asm.c:1562 mt-asm.c:870 or1k-asm.c:854 xc16x-asm.c:651 #: xstormy16-asm.c:551 msgid "junk at end of line" msgstr "rebut en fin de ligne" -#: epiphany-asm.c:842 fr30-asm.c:697 frv-asm.c:1650 ip2k-asm.c:898 -#: iq2000-asm.c:846 lm32-asm.c:736 m32c-asm.c:1971 m32r-asm.c:715 -#: mep-asm.c:1674 mt-asm.c:982 or1k-asm.c:898 xc16x-asm.c:763 +#: bpf-asm.c:567 epiphany-asm.c:842 fr30-asm.c:697 frv-asm.c:1650 +#: ip2k-asm.c:898 iq2000-asm.c:846 lm32-asm.c:736 m32c-asm.c:1971 +#: m32r-asm.c:715 mep-asm.c:1674 mt-asm.c:982 or1k-asm.c:966 xc16x-asm.c:763 #: xstormy16-asm.c:663 msgid "unrecognized form of instruction" msgstr "forme d’instruction inconnue" -#: epiphany-asm.c:856 fr30-asm.c:711 frv-asm.c:1664 ip2k-asm.c:912 -#: iq2000-asm.c:860 lm32-asm.c:750 m32c-asm.c:1985 m32r-asm.c:729 -#: mep-asm.c:1688 mt-asm.c:996 or1k-asm.c:912 xc16x-asm.c:777 +#: bpf-asm.c:581 epiphany-asm.c:856 fr30-asm.c:711 frv-asm.c:1664 +#: ip2k-asm.c:912 iq2000-asm.c:860 lm32-asm.c:750 m32c-asm.c:1985 +#: m32r-asm.c:729 mep-asm.c:1688 mt-asm.c:996 or1k-asm.c:980 xc16x-asm.c:777 #: xstormy16-asm.c:677 #, c-format msgid "bad instruction `%.50s...'" msgstr "instruction « %.50s… » erronée" -#: epiphany-asm.c:859 fr30-asm.c:714 frv-asm.c:1667 ip2k-asm.c:915 -#: iq2000-asm.c:863 lm32-asm.c:753 m32c-asm.c:1988 m32r-asm.c:732 -#: mep-asm.c:1691 mt-asm.c:999 or1k-asm.c:915 xc16x-asm.c:780 +#: bpf-asm.c:584 epiphany-asm.c:859 fr30-asm.c:714 frv-asm.c:1667 +#: ip2k-asm.c:915 iq2000-asm.c:863 lm32-asm.c:753 m32c-asm.c:1988 +#: m32r-asm.c:732 mep-asm.c:1691 mt-asm.c:999 or1k-asm.c:983 xc16x-asm.c:780 #: xstormy16-asm.c:680 #, c-format msgid "bad instruction `%.50s'" msgstr "instruction « %.50s » erronée" -#: epiphany-desc.c:2109 +#: bpf-desc.c:1441 #, c-format -msgid "internal error: epiphany_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" -msgstr "erreur interne : epiphany_cgen_rebuild_tables : confilt de valeurs insn-chunk-bitsize : \"%d\" vs. \"%d\"" +msgid "internal error: bpf_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" +msgstr "erreur interne : bpf_cgen_rebuild_tables : confilt de valeurs insn-chunk-bitsize : \"%d\" vs. \"%d\"" -#: epiphany-desc.c:2192 +#: bpf-desc.c:1524 #, c-format -msgid "internal error: epiphany_cgen_cpu_open: unsupported argument `%d'" -msgstr "erreur interne : epiphany_cgen_cpu_open : argument %d non pris en charge" +msgid "internal error: bpf_cgen_cpu_open: unsupported argument `%d'" +msgstr "erreur interne : bpf_cgen_cpu_open : argument %d non pris en charge" -#: epiphany-desc.c:2211 +#: bpf-desc.c:1543 #, c-format -msgid "internal error: epiphany_cgen_cpu_open: no endianness specified" -msgstr "erreur interne : epiphany_cgen_cpu_open : boutisme non défini" +msgid "internal error: bpf_cgen_cpu_open: no endianness specified" +msgstr "erreur interne : bpf_cgen_cpu_open : boutisme non défini" #. Default text to print if an instruction isn't recognized. -#: epiphany-dis.c:41 fr30-dis.c:41 frv-dis.c:41 ip2k-dis.c:41 iq2000-dis.c:41 -#: lm32-dis.c:41 m32c-dis.c:41 m32r-dis.c:41 mep-dis.c:41 mmix-dis.c:275 -#: mt-dis.c:41 nds32-dis.c:64 or1k-dis.c:41 xc16x-dis.c:41 xstormy16-dis.c:41 +#: bpf-dis.c:41 epiphany-dis.c:41 fr30-dis.c:41 frv-dis.c:41 ip2k-dis.c:41 +#: iq2000-dis.c:41 lm32-dis.c:41 m32c-dis.c:41 m32r-dis.c:41 mep-dis.c:41 +#: mmix-dis.c:293 mt-dis.c:41 nds32-dis.c:64 or1k-dis.c:41 xc16x-dis.c:41 +#: xstormy16-dis.c:41 msgid "*unknown*" msgstr "*inconnu(e)*" -#: epiphany-dis.c:279 fr30-dis.c:300 frv-dis.c:397 ip2k-dis.c:289 -#: iq2000-dis.c:190 lm32-dis.c:148 m32c-dis.c:892 m32r-dis.c:280 -#: mep-dis.c:1188 mt-dis.c:291 or1k-dis.c:145 xc16x-dis.c:421 +#: bpf-dis.c:203 epiphany-dis.c:279 fr30-dis.c:300 frv-dis.c:397 +#: ip2k-dis.c:289 iq2000-dis.c:190 lm32-dis.c:148 m32c-dis.c:892 +#: m32r-dis.c:280 mep-dis.c:1188 mt-dis.c:291 or1k-dis.c:184 xc16x-dis.c:421 #: xstormy16-dis.c:169 #, c-format msgid "internal error: unrecognized field %d while printing insn" msgstr "erreur interne : champ %d inconnu lors de l’affichage d’instruction." -#: epiphany-ibld.c:164 fr30-ibld.c:164 frv-ibld.c:164 ip2k-ibld.c:164 -#: iq2000-ibld.c:164 lm32-ibld.c:164 m32c-ibld.c:164 m32r-ibld.c:164 -#: mep-ibld.c:164 mt-ibld.c:164 or1k-ibld.c:164 xc16x-ibld.c:164 -#: xstormy16-ibld.c:164 +#: bpf-ibld.c:164 epiphany-ibld.c:164 fr30-ibld.c:164 frv-ibld.c:164 +#: ip2k-ibld.c:164 iq2000-ibld.c:164 lm32-ibld.c:164 m32c-ibld.c:164 +#: m32r-ibld.c:164 mep-ibld.c:164 mt-ibld.c:164 or1k-ibld.c:164 +#: xc16x-ibld.c:164 xstormy16-ibld.c:164 #, c-format msgid "operand out of range (%ld not between %ld and %lu)" msgstr "opérande hors intervalle (%ld n’est pas entre %ld et %lu)" -#: epiphany-ibld.c:185 fr30-ibld.c:185 frv-ibld.c:185 ip2k-ibld.c:185 -#: iq2000-ibld.c:185 lm32-ibld.c:185 m32c-ibld.c:185 m32r-ibld.c:185 -#: mep-ibld.c:185 mt-ibld.c:185 or1k-ibld.c:185 xc16x-ibld.c:185 -#: xstormy16-ibld.c:185 +#: bpf-ibld.c:185 epiphany-ibld.c:185 fr30-ibld.c:185 frv-ibld.c:185 +#: ip2k-ibld.c:185 iq2000-ibld.c:185 lm32-ibld.c:185 m32c-ibld.c:185 +#: m32r-ibld.c:185 mep-ibld.c:185 mt-ibld.c:185 or1k-ibld.c:185 +#: xc16x-ibld.c:185 xstormy16-ibld.c:185 #, c-format msgid "operand out of range (0x%lx not between 0 and 0x%lx)" msgstr "opérande hors intervalle (0x%lx n’est pas entre 0 et 0x%lx)" -#: epiphany-ibld.c:880 fr30-ibld.c:735 frv-ibld.c:861 ip2k-ibld.c:612 -#: iq2000-ibld.c:718 lm32-ibld.c:639 m32c-ibld.c:1736 m32r-ibld.c:670 -#: mep-ibld.c:1213 mt-ibld.c:754 or1k-ibld.c:658 xc16x-ibld.c:757 -#: xstormy16-ibld.c:683 +#: bpf-ibld.c:201 cgen-asm.c:351 epiphany-ibld.c:201 fr30-ibld.c:201 +#: frv-ibld.c:201 ip2k-ibld.c:201 iq2000-ibld.c:201 lm32-ibld.c:201 +#: m32c-ibld.c:201 m32r-ibld.c:201 mep-ibld.c:201 mt-ibld.c:201 +#: or1k-ibld.c:201 xc16x-ibld.c:201 xstormy16-ibld.c:201 +#, c-format +msgid "operand out of range (%ld not between %ld and %ld)" +msgstr "opérande hors intervalle (%ld n’est pas entre %ld et %ld)" + +#: bpf-ibld.c:625 epiphany-ibld.c:880 fr30-ibld.c:735 frv-ibld.c:861 +#: ip2k-ibld.c:612 iq2000-ibld.c:718 lm32-ibld.c:639 m32c-ibld.c:1736 +#: m32r-ibld.c:670 mep-ibld.c:1213 mt-ibld.c:754 or1k-ibld.c:742 +#: xc16x-ibld.c:757 xstormy16-ibld.c:683 #, c-format msgid "internal error: unrecognized field %d while building insn" msgstr "erreur interne : champ %d inconnu lors de la construction d’instruction" -#: epiphany-ibld.c:1175 fr30-ibld.c:941 frv-ibld.c:1179 ip2k-ibld.c:688 -#: iq2000-ibld.c:894 lm32-ibld.c:744 m32c-ibld.c:2898 m32r-ibld.c:808 -#: mep-ibld.c:1813 mt-ibld.c:975 or1k-ibld.c:772 xc16x-ibld.c:978 -#: xstormy16-ibld.c:830 +#: bpf-ibld.c:709 epiphany-ibld.c:1175 fr30-ibld.c:941 frv-ibld.c:1179 +#: ip2k-ibld.c:688 iq2000-ibld.c:894 lm32-ibld.c:744 m32c-ibld.c:2898 +#: m32r-ibld.c:808 mep-ibld.c:1813 mt-ibld.c:975 or1k-ibld.c:910 +#: xc16x-ibld.c:978 xstormy16-ibld.c:830 #, c-format msgid "internal error: unrecognized field %d while decoding insn" msgstr "erreur interne : champ %d inconnu lors du décodage d’instruction." -#: epiphany-ibld.c:1319 fr30-ibld.c:1088 frv-ibld.c:1458 ip2k-ibld.c:763 -#: iq2000-ibld.c:1026 lm32-ibld.c:834 m32c-ibld.c:3516 m32r-ibld.c:922 -#: mep-ibld.c:2284 mt-ibld.c:1176 or1k-ibld.c:859 xc16x-ibld.c:1200 -#: xstormy16-ibld.c:941 +#: bpf-ibld.c:778 epiphany-ibld.c:1319 fr30-ibld.c:1088 frv-ibld.c:1458 +#: ip2k-ibld.c:763 iq2000-ibld.c:1026 lm32-ibld.c:834 m32c-ibld.c:3516 +#: m32r-ibld.c:922 mep-ibld.c:2284 mt-ibld.c:1176 or1k-ibld.c:1015 +#: xc16x-ibld.c:1200 xstormy16-ibld.c:941 #, c-format msgid "internal error: unrecognized field %d while getting int operand" msgstr "erreur interne : champ %d inconnu lors de l’obtention d’un opérande int." -#: epiphany-ibld.c:1445 fr30-ibld.c:1217 frv-ibld.c:1719 ip2k-ibld.c:820 -#: iq2000-ibld.c:1140 lm32-ibld.c:906 m32c-ibld.c:4116 m32r-ibld.c:1018 -#: mep-ibld.c:2737 mt-ibld.c:1359 or1k-ibld.c:928 xc16x-ibld.c:1404 -#: xstormy16-ibld.c:1034 +#: bpf-ibld.c:829 epiphany-ibld.c:1445 fr30-ibld.c:1217 frv-ibld.c:1719 +#: ip2k-ibld.c:820 iq2000-ibld.c:1140 lm32-ibld.c:906 m32c-ibld.c:4116 +#: m32r-ibld.c:1018 mep-ibld.c:2737 mt-ibld.c:1359 or1k-ibld.c:1102 +#: xc16x-ibld.c:1404 xstormy16-ibld.c:1034 #, c-format msgid "internal error: unrecognized field %d while getting vma operand" msgstr "ereur interne : champ %d inconnu lors de l’obtention d’un opérande vma." -#: epiphany-ibld.c:1578 fr30-ibld.c:1349 frv-ibld.c:1987 ip2k-ibld.c:880 -#: iq2000-ibld.c:1261 lm32-ibld.c:985 m32c-ibld.c:4704 m32r-ibld.c:1120 -#: mep-ibld.c:3151 mt-ibld.c:1549 or1k-ibld.c:1004 xc16x-ibld.c:1609 -#: xstormy16-ibld.c:1134 +#: bpf-ibld.c:887 epiphany-ibld.c:1578 fr30-ibld.c:1349 frv-ibld.c:1987 +#: ip2k-ibld.c:880 iq2000-ibld.c:1261 lm32-ibld.c:985 m32c-ibld.c:4704 +#: m32r-ibld.c:1120 mep-ibld.c:3151 mt-ibld.c:1549 or1k-ibld.c:1196 +#: xc16x-ibld.c:1609 xstormy16-ibld.c:1134 #, c-format msgid "internal error: unrecognized field %d while setting int operand" msgstr "erreur interne : champ %d inconnu lors de l’initialisation d’un opérande int." -#: epiphany-ibld.c:1701 fr30-ibld.c:1471 frv-ibld.c:2245 ip2k-ibld.c:930 -#: iq2000-ibld.c:1372 lm32-ibld.c:1054 m32c-ibld.c:5282 m32r-ibld.c:1212 -#: mep-ibld.c:3555 mt-ibld.c:1729 or1k-ibld.c:1070 xc16x-ibld.c:1804 -#: xstormy16-ibld.c:1224 +#: bpf-ibld.c:935 epiphany-ibld.c:1701 fr30-ibld.c:1471 frv-ibld.c:2245 +#: ip2k-ibld.c:930 iq2000-ibld.c:1372 lm32-ibld.c:1054 m32c-ibld.c:5282 +#: m32r-ibld.c:1212 mep-ibld.c:3555 mt-ibld.c:1729 or1k-ibld.c:1280 +#: xc16x-ibld.c:1804 xstormy16-ibld.c:1224 #, c-format msgid "internal error: unrecognized field %d while setting vma operand" msgstr "errer interne : champ %d inconnu lors de l’initialisation d’un opérande vma." +#: cgen-asm.c:373 +#, c-format +msgid "operand out of range (%lu not between %lu and %lu)" +msgstr "opérande hors intervalle (%lu n’est pas entre %lu et %lu)" + +#: d30v-dis.c:232 +#, c-format +msgid "illegal id (%d)" +msgstr "id illégal (%d)" + +#: d30v-dis.c:259 +#, c-format +msgid "<unknown register %d>" +msgstr "<registre %d inconnu>" + +#. Can't happen. +#: dis-buf.c:61 +#, c-format +msgid "Unknown error %d\n" +msgstr "Erreur %d inconnue\n" + +#: dis-buf.c:70 +#, c-format +msgid "Address 0x%s is out of bounds.\n" +msgstr "Adresse 0x%s hors intervalle.\n" + +#: epiphany-asm.c:68 +msgid "register unavailable for short instructions" +msgstr "registre indisponible pour les instructions courtes" + +#: epiphany-asm.c:115 +msgid "register name used as immediate value" +msgstr "nom de registre utilisé comme valeur immédiate" + +#. Don't treat "mov ip,ip" as a move-immediate. +#: epiphany-asm.c:178 epiphany-asm.c:234 +msgid "register source in immediate move" +msgstr "registre source déplacé dans une valeur immédiate" + +#: epiphany-asm.c:187 +msgid "byte relocation unsupported" +msgstr "repositionnement d’octet indisponible" + +#. -- assembler routines inserted here. +#. -- asm.c +#: epiphany-asm.c:193 frv-asm.c:972 iq2000-asm.c:56 lm32-asm.c:95 +#: lm32-asm.c:127 lm32-asm.c:157 lm32-asm.c:187 lm32-asm.c:217 lm32-asm.c:247 +#: m32c-asm.c:140 m32c-asm.c:235 m32c-asm.c:276 m32c-asm.c:334 m32c-asm.c:355 +#: m32r-asm.c:53 mep-asm.c:241 mep-asm.c:259 mep-asm.c:274 mep-asm.c:289 +#: mep-asm.c:301 or1k-asm.c:54 +msgid "missing `)'" +msgstr "« ) » manquante" + +#: epiphany-asm.c:270 +msgid "ABORT: unknown operand" +msgstr "ABANDONNER : opérande inconnu" + +#: epiphany-asm.c:296 +msgid "Not a pc-relative address." +msgstr "N’est pas une adresse de type PC." + +#: epiphany-desc.c:2109 +#, c-format +msgid "internal error: epiphany_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" +msgstr "erreur interne : epiphany_cgen_rebuild_tables : confilt de valeurs insn-chunk-bitsize : \"%d\" vs. \"%d\"" + +#: epiphany-desc.c:2192 +#, c-format +msgid "internal error: epiphany_cgen_cpu_open: unsupported argument `%d'" +msgstr "erreur interne : epiphany_cgen_cpu_open : argument %d non pris en charge" + +#: epiphany-desc.c:2211 +#, c-format +msgid "internal error: epiphany_cgen_cpu_open: no endianness specified" +msgstr "erreur interne : epiphany_cgen_cpu_open : boutisme non défini" + #: fr30-asm.c:93 m32c-asm.c:872 m32c-asm.c:879 msgid "Register number is not valid" msgstr "Numéro de registre invalide" @@ -984,21 +1010,21 @@ msgstr "erreur interne, h8_disassemble_init" # h8300-dis.c:380Internal error: bad sparc-opcode.h: \"%s\" == \"%s\"\n" -#: h8300-dis.c:314 +#: h8300-dis.c:315 #, c-format msgid "Hmmmm 0x%x" msgstr "Hummmm 0x%x" -#: h8300-dis.c:691 +#: h8300-dis.c:692 #, c-format msgid "Don't understand 0x%x \n" msgstr "Incompréhensible : 0x%x \n" -#: i386-dis.c:11058 +#: i386-dis.c:11062 msgid "<internal disassembler error>" msgstr "<erreur interne du désassembleur>" -#: i386-dis.c:11353 +#: i386-dis.c:11360 #, c-format msgid "" "\n" @@ -1010,32 +1036,32 @@ "avec l’utilisation de l’option -M (les options multiples doivent être\n" "séparées par des virgules) :\n" -#: i386-dis.c:11357 +#: i386-dis.c:11364 #, c-format msgid " x86-64 Disassemble in 64bit mode\n" msgstr " x86-64 Désassembleur en mode 64 bits\n" -#: i386-dis.c:11358 +#: i386-dis.c:11365 #, c-format msgid " i386 Disassemble in 32bit mode\n" msgstr " i386 Désassembleur en mode 32 bits\n" -#: i386-dis.c:11359 +#: i386-dis.c:11366 #, c-format msgid " i8086 Disassemble in 16bit mode\n" msgstr " i8086 Désassembleur en mode 16 bits\n" -#: i386-dis.c:11360 +#: i386-dis.c:11367 #, c-format msgid " att Display instruction in AT&T syntax\n" msgstr " att Afficher les instructions en syntaxe AT&T\n" -#: i386-dis.c:11361 +#: i386-dis.c:11368 #, c-format msgid " intel Display instruction in Intel syntax\n" msgstr " intel Afficher les instructions en syntaxe Intel\n" -#: i386-dis.c:11362 +#: i386-dis.c:11369 #, c-format msgid "" " att-mnemonic\n" @@ -1044,7 +1070,7 @@ " att-mnemonic\n" " Afficher les instructions avec les mnémoniques AT&T\n" -#: i386-dis.c:11364 +#: i386-dis.c:11371 #, c-format msgid "" " intel-mnemonic\n" @@ -1053,106 +1079,106 @@ " intel-mnemonic\n" " Afficher les instructions avec les mnémoniques Intel\n" -#: i386-dis.c:11366 +#: i386-dis.c:11373 #, c-format msgid " addr64 Assume 64bit address size\n" msgstr " addr64 Supposer un adressage 64 bits\n" -#: i386-dis.c:11367 +#: i386-dis.c:11374 #, c-format msgid " addr32 Assume 32bit address size\n" msgstr " addr32 Supposer un adressage 32 bits\n" -#: i386-dis.c:11368 +#: i386-dis.c:11375 #, c-format msgid " addr16 Assume 16bit address size\n" msgstr " addr16 Supposer un adressage 16 bits\n" -#: i386-dis.c:11369 +#: i386-dis.c:11376 #, c-format msgid " data32 Assume 32bit data size\n" msgstr " data32 Supposer une taille de données sur 32 bits\n" -#: i386-dis.c:11370 +#: i386-dis.c:11377 #, c-format msgid " data16 Assume 16bit data size\n" msgstr " data16 Supposer une taille de données sur 16 bits\n" -#: i386-dis.c:11371 +#: i386-dis.c:11378 #, c-format msgid " suffix Always display instruction suffix in AT&T syntax\n" msgstr " suffix Toujours afficher les suffixes d’instruction en syntaxe AT&T\n" -#: i386-dis.c:11372 +#: i386-dis.c:11379 #, c-format msgid " amd64 Display instruction in AMD64 ISA\n" msgstr " amd64 Afficher les instructions en AMD64 ISA\n" -#: i386-dis.c:11373 +#: i386-dis.c:11380 #, c-format msgid " intel64 Display instruction in Intel64 ISA\n" msgstr " intel64 Afficher les instructions en Intel64 ISA\n" -#: i386-dis.c:11936 +#: i386-dis.c:11943 msgid "64-bit address is disabled" msgstr "L’adressage 64 bits est désactivé" -#: i386-gen.c:732 +#: i386-gen.c:754 #, c-format msgid "%s: error: " msgstr "%s : erreur : " -#: i386-gen.c:911 +#: i386-gen.c:917 #, c-format msgid "%s: %d: unknown bitfield: %s\n" msgstr "%s : %d : champ de bits inconnu : %s\n" -#: i386-gen.c:913 +#: i386-gen.c:919 #, c-format msgid "unknown bitfield: %s\n" msgstr "champ de bits inconnu : %s\n" -#: i386-gen.c:976 +#: i386-gen.c:982 #, c-format msgid "%s: %d: missing `)' in bitfield: %s\n" msgstr "%s : %d : « ) » manquante dans le champ de bits : %s\n" -#: i386-gen.c:1077 +#: i386-gen.c:1083 #, c-format msgid "unknown broadcast operand: %s\n" msgstr "décalage d’opérande inconnu : %s\n" -#: i386-gen.c:1478 +#: i386-gen.c:1538 #, c-format msgid "can't find i386-reg.tbl for reading, errno = %s\n" msgstr "impossible de lire i386-reg.tbl, errno = %s\n" -#: i386-gen.c:1556 +#: i386-gen.c:1616 #, c-format msgid "can't create i386-init.h, errno = %s\n" msgstr "impossible de créer i386-init.h, errno = %s\n" -#: i386-gen.c:1646 ia64-gen.c:2829 +#: i386-gen.c:1706 ia64-gen.c:2829 #, c-format msgid "unable to change directory to \"%s\", errno = %s\n" msgstr "impossible de modifier le répertoire vers « %s », errno = %s\n" -#: i386-gen.c:1658 i386-gen.c:1661 +#: i386-gen.c:1720 i386-gen.c:1725 #, c-format msgid "CpuMax != %d!\n" msgstr "CpuMax != %d !\n" -#: i386-gen.c:1665 +#: i386-gen.c:1729 #, c-format msgid "%d unused bits in i386_cpu_flags.\n" msgstr "%d bits inutilisés dans i386_cpu_flags.\n" -#: i386-gen.c:1672 +#: i386-gen.c:1744 #, c-format msgid "%d unused bits in i386_operand_type.\n" msgstr "%d bits inutilisés dans i386_operand_type.\n" -#: i386-gen.c:1686 +#: i386-gen.c:1758 #, c-format msgid "can't create i386-tbl.h, errno = %s\n" msgstr "impossible de créer i386-tbl.h, errno = %s\n" @@ -1390,12 +1416,12 @@ msgid "internal error: lm32_cgen_cpu_open: no endianness specified" msgstr "erreur interne : lm32_cgen_cpu_open : boutisme non défini" -#: m10200-dis.c:157 m10300-dis.c:580 +#: m10200-dis.c:151 m10300-dis.c:574 #, c-format msgid "unknown\t0x%04lx" msgstr "inconnu\t0x%04lx" -#: m10200-dis.c:327 +#: m10200-dis.c:321 #, c-format msgid "unknown\t0x%02lx" msgstr "inconnu\t0x%02lx" @@ -1504,12 +1530,12 @@ msgid "internal error: m32r_cgen_cpu_open: no endianness specified" msgstr "erreur interne : m32r_cgen_cpu_open : boutisme non défini" -#: m68k-dis.c:1292 +#: m68k-dis.c:1294 #, c-format msgid "<function code %d>" msgstr "<code de fonction %d>" -#: m68k-dis.c:1455 +#: m68k-dis.c:1457 #, c-format msgid "<internal error in opcode table: %s %s>\n" msgstr "<erreur interne dans la table des opcodes : %s %s>\n" @@ -1562,24 +1588,24 @@ msgid "internal error: mep_cgen_cpu_open: no endianness specified" msgstr "erreur interne : mep_cgen_cpu_open : boutisme non défini" -#: mips-dis.c:1800 mips-dis.c:2026 +#: mips-dis.c:1805 mips-dis.c:2031 #, c-format msgid "# internal error, undefined operand in `%s %s'" msgstr "# erreur interne, opérande « %s %s » indéfini" -#: mips-dis.c:2615 +#: mips-dis.c:2620 msgid "Use canonical instruction forms.\n" msgstr "Utiliser les formes d'instructions caniniques.\n" -#: mips-dis.c:2617 +#: mips-dis.c:2622 msgid "Recognize MSA instructions.\n" msgstr "Reconaissance des instructions MSA.\n" -#: mips-dis.c:2619 +#: mips-dis.c:2624 msgid "Recognize the virtualization ASE instructions.\n" msgstr "Reconnaissance des instructions de vectorisation ASE.\n" -#: mips-dis.c:2621 +#: mips-dis.c:2626 msgid "" "Recognize the eXtended Physical Address (XPA) ASE\n" " instructions.\n" @@ -1587,27 +1613,27 @@ "Reconnaissance des instructions ASE\n" "d'adressage physique étendu (XPA).\n" -#: mips-dis.c:2624 +#: mips-dis.c:2629 msgid "Recognize the Global INValidate (GINV) ASE instructions.\n" msgstr "Reconnaissance du jeu d'instructions Global INValidate (GINV) ASE.\n" -#: mips-dis.c:2628 +#: mips-dis.c:2633 msgid "Recognize the Loongson MultiMedia extensions Instructions (MMI) ASE instructions.\n" msgstr "Reconnaissance du jeu d'instructions Loongson MultiMedia extensions Instructions (MMI) ASE.\n" -#: mips-dis.c:2632 +#: mips-dis.c:2637 msgid "Recognize the Loongson Content Address Memory (CAM) instructions.\n" msgstr "Reconnaissance du jeu d'instructions Loongson Content Address Memory (CAM).\n" -#: mips-dis.c:2636 +#: mips-dis.c:2641 msgid "Recognize the Loongson EXTensions (EXT) instructions.\n" msgstr "Reconnaissance du jeu d'instructions Loongson EXTensions (EXT).\n" -#: mips-dis.c:2640 +#: mips-dis.c:2645 msgid "Recognize the Loongson EXTensions R2 (EXT2) instructions.\n" msgstr "Reconnaissance du jeu d'instructions Loongson EXTensions R2 (EXT2).\n" -#: mips-dis.c:2643 +#: mips-dis.c:2648 msgid "" "Print GPR names according to specified ABI.\n" " Default: based on binary being disassembled.\n" @@ -1615,7 +1641,7 @@ "Afficher les noms GPR selon l’ABI spécifiée.\n" " Par défaut : à partir du binaire désassemblé.\n" -#: mips-dis.c:2646 +#: mips-dis.c:2651 msgid "" "Print FPR names according to specified ABI.\n" " Default: numeric.\n" @@ -1623,7 +1649,7 @@ "Afficher les noms FPR selon l’ABI spécifiée.\n" " Par défaut : numérique.\n" -#: mips-dis.c:2649 +#: mips-dis.c:2654 msgid "" "Print CP0 register names according to specified architecture.\n" " Default: based on binary being disassembled.\n" @@ -1631,7 +1657,7 @@ "Afficher les noms des registres CP0 selon l’architecture spécifiée.\n" " Par défaut : à partir du binaire désassemblé.\n" -#: mips-dis.c:2653 +#: mips-dis.c:2658 msgid "" "Print HWR names according to specified architecture.\n" " Default: based on binary being disassembled.\n" @@ -1639,11 +1665,11 @@ "Afficher les noms HWR selon l’architecture spécifiée.\n" " Par défaut : à partir du binaire désassemblé.\n" -#: mips-dis.c:2656 +#: mips-dis.c:2661 msgid "Print GPR and FPR names according to specified ABI.\n" msgstr "Afficher les noms GPR et FPR selon l’ABI spécifiée.\n" -#: mips-dis.c:2658 +#: mips-dis.c:2663 msgid "" "Print CP0 register and HWR names according to specified\n" " architecture." @@ -1651,7 +1677,7 @@ "Afficher les noms des registres CP0 et HWR selon\n" " l’architecture spécifiée." -#: mips-dis.c:2744 +#: mips-dis.c:2749 #, c-format msgid "" "\n" @@ -1665,7 +1691,7 @@ "par des virgules) :\n" "\n" -#: mips-dis.c:2778 +#: mips-dis.c:2783 #, c-format msgid "" "\n" @@ -1690,7 +1716,11 @@ msgid "(unknown)" msgstr "(inconnu(e))" -#: mmix-dis.c:510 +#: mmix-dis.c:247 mmix-dis.c:255 +msgid "*illegal*" +msgstr "illégal" + +#: mmix-dis.c:529 #, c-format msgid "*unknown operands type: %d*" msgstr "*type d’opérande inconnu : %d*" @@ -1854,7 +1884,7 @@ #. an immediate either. We don't know how much to increase #. aoffsetp by since whatever generated this is broken #. anyway! -#: ns32k-dis.c:533 +#: ns32k-dis.c:535 #, c-format msgid "$<undefined>" msgstr "$<non défini>" @@ -1867,27 +1897,27 @@ msgid "internal relocation type invalid" msgstr "repositionnement interne de type invalide" -#: or1k-desc.c:1978 +#: or1k-desc.c:2213 #, c-format msgid "internal error: or1k_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" msgstr "erreur interne : or1k_cgen_rebuild_tables : confilt de valeurs insn-chunk-bitsize : \"%d\" vs. \"%d\"" -#: or1k-desc.c:2061 +#: or1k-desc.c:2296 #, c-format msgid "internal error: or1k_cgen_cpu_open: unsupported argument `%d'" msgstr "erreur interne : or1k_cgen_cpu_open : argument %d non pris en charge" -#: or1k-desc.c:2080 +#: or1k-desc.c:2315 #, c-format msgid "internal error: or1k_cgen_cpu_open: no endianness specified" msgstr "erreur interne : or1k_cgen_cpu_open : boutisme non défini" -#: ppc-dis.c:370 +#: ppc-dis.c:376 #, c-format msgid "warning: ignoring unknown -M%s option" msgstr "avertissement : l'option inconnue -M%s est ignorée" -#: ppc-dis.c:858 +#: ppc-dis.c:957 #, c-format msgid "" "\n" @@ -1902,95 +1932,107 @@ msgid "invalid register" msgstr "registre invalide" -#: ppc-opc.c:384 ppc-opc.c:412 +#: ppc-opc.c:396 msgid "invalid conditional option" msgstr "option conditionnelle invalide" -#: ppc-opc.c:386 ppc-opc.c:414 +#: ppc-opc.c:399 msgid "invalid counter access" msgstr "accès compteur invalide" -#: ppc-opc.c:416 +#: ppc-opc.c:463 +msgid "BO value implies no branch hint, when using + or - modifier" +msgstr "La valeur de BO n'implique aucun indice de branche, lors de l'utilisation du modificateur + ou -" + +#: ppc-opc.c:468 msgid "attempt to set y bit when using + or - modifier" msgstr "tentative d’initialisation du bit y lors de l’utilisation du modificateur + ou -" -#: ppc-opc.c:507 +#: ppc-opc.c:470 +msgid "attempt to set 'at' bits when using + or - modifier" +msgstr "tentative d’initialisation du bit 'at' lors de l’utilisation du modificateur + ou -" + +#: ppc-opc.c:658 +msgid "invalid R operand" +msgstr "opérateur R invalide" + +#: ppc-opc.c:713 msgid "invalid mask field" msgstr "champ de masque invalide" -#: ppc-opc.c:530 +#: ppc-opc.c:736 msgid "invalid mfcr mask" msgstr "masque mfcr invalide" -#: ppc-opc.c:606 +#: ppc-opc.c:812 msgid "illegal L operand value" msgstr "valeur d’opérande L illégale" -#: ppc-opc.c:645 +#: ppc-opc.c:851 msgid "incompatible L operand value" msgstr "valeur d’opérande L incompatible" -#: ppc-opc.c:684 ppc-opc.c:719 +#: ppc-opc.c:891 ppc-opc.c:926 msgid "illegal bitmask" msgstr "masque de bits illégal" -#: ppc-opc.c:806 +#: ppc-opc.c:1013 msgid "address register in load range" msgstr "registre d’adresse dans la plage de chargement" -#: ppc-opc.c:872 +#: ppc-opc.c:1079 msgid "index register in load range" msgstr "registre d’index dans la plage de chargement" -#: ppc-opc.c:901 ppc-opc.c:986 +#: ppc-opc.c:1108 ppc-opc.c:1194 msgid "source and target register operands must be different" msgstr "les opérandes des registres source et cible doivent être différents" -#: ppc-opc.c:931 +#: ppc-opc.c:1139 msgid "invalid register operand when updating" msgstr "opérande de registre invalide lors de la mise à jour" -#: ppc-opc.c:1049 +#: ppc-opc.c:1257 msgid "illegal immediate value" msgstr "valeur immédiate illégale" -#: ppc-opc.c:1154 +#: ppc-opc.c:1362 msgid "invalid bat number" msgstr "numéro bat invalide" -#: ppc-opc.c:1189 +#: ppc-opc.c:1397 msgid "invalid sprg number" msgstr "numéro de registre spécial invalide" -#: ppc-opc.c:1226 +#: ppc-opc.c:1434 msgid "invalid tbr number" msgstr "numéro tbr invalide" -#: ppc-opc.c:1372 +#: ppc-opc.c:1581 msgid "invalid constant" msgstr "constante invalide" -#: ppc-opc.c:1474 ppc-opc.c:1497 ppc-opc.c:1520 ppc-opc.c:1543 +#: ppc-opc.c:1683 ppc-opc.c:1706 ppc-opc.c:1729 ppc-opc.c:1752 msgid "UIMM = 00000 is illegal" msgstr "UIMM = 00000 est illégal." -#: ppc-opc.c:1566 +#: ppc-opc.c:1775 msgid "UIMM values >7 are illegal" msgstr "UIMM values >7 est illégal." -#: ppc-opc.c:1589 +#: ppc-opc.c:1798 msgid "UIMM values >15 are illegal" msgstr "UIMM values >15 est illégal." -#: ppc-opc.c:1612 +#: ppc-opc.c:1821 msgid "GPR odd is illegal" msgstr "parité GPR illégale" -#: ppc-opc.c:1635 ppc-opc.c:1658 +#: ppc-opc.c:1844 ppc-opc.c:1867 msgid "invalid offset" msgstr "offset invalide" -#: ppc-opc.c:1681 +#: ppc-opc.c:1890 msgid "invalid Ddd value" msgstr "numéro Ddd invalide" @@ -2004,7 +2046,7 @@ msgid "# internal error, undefined modifier (%c)" msgstr "# erreur interne, modificateur indéfini (%c)" -#: riscv-dis.c:541 +#: riscv-dis.c:545 #, c-format msgid "" "\n" @@ -2016,7 +2058,7 @@ "l’utilisation de l’option -M (les options multiples doivent être séparées\n" "par des virgules) :\n" -#: riscv-dis.c:545 +#: riscv-dis.c:549 #, c-format msgid "" "\n" @@ -2025,7 +2067,7 @@ "\n" " numeric Affiche les numéros des registres, au lieu de leur nom ABI.\n" -#: riscv-dis.c:548 +#: riscv-dis.c:552 #, c-format msgid "" "\n" @@ -2036,6 +2078,38 @@ " no-aliases Désassembler seulement en instructions canoniques,\n" " au lieu de pseudo-instructions.\n" +#: rx-dis.c:139 rx-dis.c:163 rx-dis.c:171 rx-dis.c:179 rx-dis.c:187 +msgid "<invalid register number>" +msgstr "<numéro de registre invalide>" + +#: rx-dis.c:147 rx-dis.c:195 +msgid "<invalid condition code>" +msgstr "<code conditionnel invalide>" + +#: rx-dis.c:155 +msgid "<invalid flag>" +msgstr "<drapeau invalide>" + +#: rx-dis.c:203 +msgid "<invalid opsize>" +msgstr "<taille de l'opérateur invalide>" + +#: rx-dis.c:211 +msgid "<invalid size>" +msgstr "<taille invalide>" + +#: s12z-dis.c:258 s12z-dis.c:315 s12z-dis.c:326 +msgid "<illegal reg num>" +msgstr "<numéro de registre illégal>" + +#: s12z-dis.c:389 +msgid "<bad>" +msgstr "<mauvais>" + +#: s12z-dis.c:400 +msgid ".<bad>" +msgstr ".<mauvais>" + #: s390-dis.c:42 msgid "Disassemble in ESA architecture mode" msgstr "Désassemble en mode architecture ESA" @@ -2065,8 +2139,8 @@ "l’utilisation de l’option -M (les options multiples doivent être séparées\n" "par des virgules) :\n" -#: score-dis.c:663 score-dis.c:870 score-dis.c:1031 score-dis.c:1145 -#: score-dis.c:1152 score-dis.c:1159 score7-dis.c:695 score7-dis.c:858 +#: score-dis.c:661 score-dis.c:879 score-dis.c:1040 score-dis.c:1146 +#: score-dis.c:1154 score-dis.c:1161 score7-dis.c:695 score7-dis.c:858 msgid "<illegal instruction>" msgstr "<instruction illégale>" @@ -2081,16 +2155,44 @@ msgstr "erreur interne : sparc-opcode.h erroné : « %s » == « %s »\n" #. Mark as non-valid instruction. -#: sparc-dis.c:1098 +#: sparc-dis.c:1095 msgid "unknown" msgstr "inconnu(e)" -#: v850-dis.c:453 +#: v850-dis.c:190 +msgid "<invalid s-reg number>" +msgstr "<numéro de registre s-reg invalide>" + +#: v850-dis.c:206 +msgid "<invalid reg number>" +msgstr "<numéro de registre reg invalide>" + +#: v850-dis.c:222 +msgid "<invalid v-reg number>" +msgstr "<numéro de registre v-reg invalide>" + +#: v850-dis.c:236 +msgid "<invalid CC-reg number>" +msgstr "<numéro de registre CC-reg invalide>" + +#: v850-dis.c:250 +msgid "<invalid float-CC-reg number>" +msgstr "<numéro de registre float-CC-reg invalide>" + +#: v850-dis.c:264 +msgid "<invalid cacheop number>" +msgstr "<numéro de registre cacheop invalide>" + +#: v850-dis.c:275 +msgid "<invalid prefop number>" +msgstr "<numéro de registre prefop invalide>" + +#: v850-dis.c:510 #, c-format msgid "unknown operand shift: %x" msgstr "décalage d’opérande inconnu : %x" -#: v850-dis.c:469 +#: v850-dis.c:526 #, c-format msgid "unknown reg: %d" msgstr "registre inconnu : %d" @@ -2172,7 +2274,7 @@ msgid "Name well-known globals" msgstr "Nommer les globals bien connus" -#: wasm32-dis.c:503 +#: wasm32-dis.c:537 #, c-format msgid "" "The following WebAssembly-specific disassembler options are supported for use\n" diff -Nru gdb-9.1/opcodes/po/Make-in gdb-10.2/opcodes/po/Make-in --- gdb-9.1/opcodes/po/Make-in 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/po/Make-in 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ # Makefile for program source directory in GNU NLS utilities package. # Copyright (C) 1995, 1996, 1997 by Ulrich Drepper <drepper@gnu.ai.mit.edu> -# Copyright (C) 2003-2019 Free Software Foundation, Inc. +# Copyright (C) 2003-2020 Free Software Foundation, Inc. # # This file may be copied and used freely without restrictions. It can # be used in projects which are not available under the GNU Public License diff -Nru gdb-9.1/opcodes/po/opcodes.pot gdb-10.2/opcodes/po/opcodes.pot --- gdb-9.1/opcodes/po/opcodes.pot 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/po/opcodes.pot 2021-04-25 04:06:26.000000000 +0000 @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: bug-binutils@gnu.org\n" -"POT-Creation-Date: 2019-01-19 16:35+0000\n" +"POT-Creation-Date: 2020-07-06 10:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -17,21 +17,21 @@ "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" -#: aarch64-asm.c:819 +#: aarch64-asm.c:820 msgid "specified register cannot be read from" msgstr "" -#: aarch64-asm.c:828 +#: aarch64-asm.c:829 msgid "specified register cannot be written to" msgstr "" #. Invalid option. -#: aarch64-dis.c:92 arc-dis.c:782 arm-dis.c:6174 +#: aarch64-dis.c:93 arc-dis.c:802 arm-dis.c:11654 #, c-format msgid "unrecognised disassembler option: %s" msgstr "" -#: aarch64-dis.c:3448 +#: aarch64-dis.c:3531 #, c-format msgid "" "\n" @@ -39,299 +39,299 @@ "with the -M switch (multiple options should be separated by commas):\n" msgstr "" -#: aarch64-dis.c:3452 +#: aarch64-dis.c:3535 #, c-format msgid "" "\n" " no-aliases Don't print instruction aliases.\n" msgstr "" -#: aarch64-dis.c:3455 +#: aarch64-dis.c:3538 #, c-format msgid "" "\n" " aliases Do print instruction aliases.\n" msgstr "" -#: aarch64-dis.c:3458 +#: aarch64-dis.c:3541 #, c-format msgid "" "\n" " no-notes Don't print instruction notes.\n" msgstr "" -#: aarch64-dis.c:3461 +#: aarch64-dis.c:3544 #, c-format msgid "" "\n" " notes Do print instruction notes.\n" msgstr "" -#: aarch64-dis.c:3465 +#: aarch64-dis.c:3548 #, c-format msgid "" "\n" " debug_dump Temp switch for debug trace.\n" msgstr "" -#: aarch64-dis.c:3469 mips-dis.c:2773 mips-dis.c:2783 mips-dis.c:2786 -#: nfp-dis.c:2981 riscv-dis.c:552 +#: aarch64-dis.c:3552 mips-dis.c:2778 mips-dis.c:2788 mips-dis.c:2791 +#: nfp-dis.c:2981 riscv-dis.c:620 #, c-format msgid "\n" msgstr "" -#: aarch64-opc.c:1339 +#: aarch64-opc.c:1347 msgid "immediate value" msgstr "" -#: aarch64-opc.c:1349 +#: aarch64-opc.c:1357 msgid "immediate offset" msgstr "" -#: aarch64-opc.c:1359 +#: aarch64-opc.c:1367 msgid "register number" msgstr "" -#: aarch64-opc.c:1369 +#: aarch64-opc.c:1377 msgid "register element index" msgstr "" -#: aarch64-opc.c:1379 +#: aarch64-opc.c:1387 msgid "shift amount" msgstr "" -#: aarch64-opc.c:1391 +#: aarch64-opc.c:1399 msgid "multiplier" msgstr "" -#: aarch64-opc.c:1464 +#: aarch64-opc.c:1472 msgid "reg pair must start from even reg" msgstr "" -#: aarch64-opc.c:1470 +#: aarch64-opc.c:1478 msgid "reg pair must be contiguous" msgstr "" -#: aarch64-opc.c:1484 +#: aarch64-opc.c:1492 msgid "extraneous register" msgstr "" -#: aarch64-opc.c:1490 +#: aarch64-opc.c:1498 msgid "missing register" msgstr "" -#: aarch64-opc.c:1501 +#: aarch64-opc.c:1509 msgid "stack pointer register expected" msgstr "" -#: aarch64-opc.c:1524 +#: aarch64-opc.c:1534 msgid "z0-z15 expected" msgstr "" -#: aarch64-opc.c:1525 +#: aarch64-opc.c:1535 msgid "z0-z7 expected" msgstr "" -#: aarch64-opc.c:1551 +#: aarch64-opc.c:1561 msgid "invalid register list" msgstr "" -#: aarch64-opc.c:1565 +#: aarch64-opc.c:1575 msgid "p0-p7 expected" msgstr "" -#: aarch64-opc.c:1591 aarch64-opc.c:1599 +#: aarch64-opc.c:1601 aarch64-opc.c:1609 msgid "unexpected address writeback" msgstr "" -#: aarch64-opc.c:1611 +#: aarch64-opc.c:1620 msgid "address writeback expected" msgstr "" -#: aarch64-opc.c:1658 +#: aarch64-opc.c:1667 msgid "negative or unaligned offset expected" msgstr "" -#: aarch64-opc.c:1715 +#: aarch64-opc.c:1724 msgid "invalid register offset" msgstr "" -#: aarch64-opc.c:1737 +#: aarch64-opc.c:1746 msgid "invalid post-increment amount" msgstr "" -#: aarch64-opc.c:1753 aarch64-opc.c:2247 +#: aarch64-opc.c:1762 aarch64-opc.c:2271 msgid "invalid shift amount" msgstr "" -#: aarch64-opc.c:1766 +#: aarch64-opc.c:1775 msgid "invalid extend/shift operator" msgstr "" -#: aarch64-opc.c:1812 aarch64-opc.c:2052 aarch64-opc.c:2087 aarch64-opc.c:2106 -#: aarch64-opc.c:2114 aarch64-opc.c:2201 aarch64-opc.c:2377 aarch64-opc.c:2477 -#: aarch64-opc.c:2490 +#: aarch64-opc.c:1821 aarch64-opc.c:2073 aarch64-opc.c:2108 aarch64-opc.c:2127 +#: aarch64-opc.c:2135 aarch64-opc.c:2224 aarch64-opc.c:2401 aarch64-opc.c:2501 +#: aarch64-opc.c:2514 msgid "immediate out of range" msgstr "" -#: aarch64-opc.c:1834 aarch64-opc.c:1876 aarch64-opc.c:1926 aarch64-opc.c:1960 +#: aarch64-opc.c:1843 aarch64-opc.c:1885 aarch64-opc.c:1947 aarch64-opc.c:1981 msgid "invalid addressing mode" msgstr "" -#: aarch64-opc.c:1918 +#: aarch64-opc.c:1939 msgid "index register xzr is not allowed" msgstr "" -#: aarch64-opc.c:2040 aarch64-opc.c:2062 aarch64-opc.c:2280 aarch64-opc.c:2288 -#: aarch64-opc.c:2354 aarch64-opc.c:2383 +#: aarch64-opc.c:2061 aarch64-opc.c:2083 aarch64-opc.c:2304 aarch64-opc.c:2312 +#: aarch64-opc.c:2378 aarch64-opc.c:2407 msgid "invalid shift operator" msgstr "" -#: aarch64-opc.c:2046 +#: aarch64-opc.c:2067 msgid "shift amount must be 0 or 12" msgstr "" -#: aarch64-opc.c:2069 +#: aarch64-opc.c:2090 msgid "shift amount must be a multiple of 16" msgstr "" -#: aarch64-opc.c:2081 +#: aarch64-opc.c:2102 msgid "negative immediate value not allowed" msgstr "" -#: aarch64-opc.c:2212 +#: aarch64-opc.c:2235 msgid "immediate zero expected" msgstr "" -#: aarch64-opc.c:2226 +#: aarch64-opc.c:2249 msgid "rotate expected to be 0, 90, 180 or 270" msgstr "" -#: aarch64-opc.c:2236 +#: aarch64-opc.c:2260 msgid "rotate expected to be 90 or 270" msgstr "" -#: aarch64-opc.c:2296 +#: aarch64-opc.c:2320 msgid "shift is not permitted" msgstr "" -#: aarch64-opc.c:2321 +#: aarch64-opc.c:2345 msgid "invalid value for immediate" msgstr "" -#: aarch64-opc.c:2346 +#: aarch64-opc.c:2370 msgid "shift amount must be 0 or 16" msgstr "" -#: aarch64-opc.c:2367 +#: aarch64-opc.c:2391 msgid "floating-point immediate expected" msgstr "" -#: aarch64-opc.c:2401 +#: aarch64-opc.c:2425 msgid "no shift amount allowed for 8-bit constants" msgstr "" -#: aarch64-opc.c:2411 +#: aarch64-opc.c:2435 msgid "shift amount must be 0 or 8" msgstr "" -#: aarch64-opc.c:2424 +#: aarch64-opc.c:2448 msgid "immediate too big for element size" msgstr "" -#: aarch64-opc.c:2431 +#: aarch64-opc.c:2455 msgid "invalid arithmetic immediate" msgstr "" -#: aarch64-opc.c:2445 +#: aarch64-opc.c:2469 msgid "floating-point value must be 0.5 or 1.0" msgstr "" -#: aarch64-opc.c:2455 +#: aarch64-opc.c:2479 msgid "floating-point value must be 0.5 or 2.0" msgstr "" -#: aarch64-opc.c:2465 +#: aarch64-opc.c:2489 msgid "floating-point value must be 0.0 or 1.0" msgstr "" -#: aarch64-opc.c:2496 +#: aarch64-opc.c:2520 msgid "invalid replicated MOV immediate" msgstr "" -#: aarch64-opc.c:2614 +#: aarch64-opc.c:2641 msgid "extend operator expected" msgstr "" -#: aarch64-opc.c:2627 +#: aarch64-opc.c:2654 msgid "missing extend operator" msgstr "" -#: aarch64-opc.c:2633 +#: aarch64-opc.c:2660 msgid "'LSL' operator not allowed" msgstr "" -#: aarch64-opc.c:2654 +#: aarch64-opc.c:2681 msgid "W register expected" msgstr "" -#: aarch64-opc.c:2665 +#: aarch64-opc.c:2692 msgid "shift operator expected" msgstr "" -#: aarch64-opc.c:2672 +#: aarch64-opc.c:2699 msgid "'ROR' operator not allowed" msgstr "" -#: aarch64-opc.c:3671 +#: aarch64-opc.c:3714 msgid "reading from a write-only register" msgstr "" -#: aarch64-opc.c:3673 +#: aarch64-opc.c:3716 msgid "writing to a read-only register" msgstr "" -#: aarch64-opc.c:4815 +#: aarch64-opc.c:4711 msgid "instruction opens new dependency sequence without ending previous one" msgstr "" -#: aarch64-opc.c:4835 +#: aarch64-opc.c:4731 msgid "previous `movprfx' sequence not closed" msgstr "" -#: aarch64-opc.c:4852 +#: aarch64-opc.c:4750 msgid "SVE instruction expected after `movprfx'" msgstr "" -#: aarch64-opc.c:4865 +#: aarch64-opc.c:4763 msgid "SVE `movprfx' compatible instruction expected" msgstr "" -#: aarch64-opc.c:4956 +#: aarch64-opc.c:4850 msgid "predicated instruction expected after `movprfx'" msgstr "" -#: aarch64-opc.c:4968 +#: aarch64-opc.c:4862 msgid "merging predicate expected due to preceding `movprfx'" msgstr "" -#: aarch64-opc.c:4980 +#: aarch64-opc.c:4874 msgid "predicate register differs from that in preceding `movprfx'" msgstr "" -#: aarch64-opc.c:4999 +#: aarch64-opc.c:4893 msgid "output register of preceding `movprfx' not used in current instruction" msgstr "" -#: aarch64-opc.c:5012 +#: aarch64-opc.c:4906 msgid "output register of preceding `movprfx' expected as output" msgstr "" -#: aarch64-opc.c:5024 +#: aarch64-opc.c:4918 msgid "output register of preceding `movprfx' used as input" msgstr "" -#: aarch64-opc.c:5040 +#: aarch64-opc.c:4934 msgid "register size not compatible with previous `movprfx'" msgstr "" @@ -343,7 +343,7 @@ msgid "jump hint unaligned" msgstr "" -#: arc-dis.c:377 +#: arc-dis.c:379 msgid "" "\n" "Warning: disassembly may be wrong due to guessed opcode class choice.\n" @@ -351,12 +351,16 @@ "\t\t\t\t" msgstr "" -#: arc-dis.c:825 +#: arc-dis.c:440 +msgid "An error occurred while generating the extension instruction operations" +msgstr "" + +#: arc-dis.c:845 #, c-format msgid "unrecognised disassembler CPU option: %s" msgstr "" -#: arc-dis.c:1387 +#: arc-dis.c:1412 #, c-format msgid "" "\n" @@ -364,42 +368,47 @@ "with -M switch (multiple options should be separated by commas):\n" msgstr "" -#: arc-dis.c:1399 +#: arc-dis.c:1424 #, c-format msgid " dsp Recognize DSP instructions.\n" msgstr "" -#: arc-dis.c:1401 +#: arc-dis.c:1426 #, c-format msgid " spfp Recognize FPX SP instructions.\n" msgstr "" -#: arc-dis.c:1403 +#: arc-dis.c:1428 #, c-format msgid " dpfp Recognize FPX DP instructions.\n" msgstr "" -#: arc-dis.c:1405 +#: arc-dis.c:1430 #, c-format msgid " quarkse_em Recognize FPU QuarkSE-EM instructions.\n" msgstr "" -#: arc-dis.c:1407 +#: arc-dis.c:1432 #, c-format msgid " fpuda Recognize double assist FPU instructions.\n" msgstr "" -#: arc-dis.c:1409 +#: arc-dis.c:1434 #, c-format msgid " fpus Recognize single precision FPU instructions.\n" msgstr "" -#: arc-dis.c:1411 +#: arc-dis.c:1436 #, c-format msgid " fpud Recognize double precision FPU instructions.\n" msgstr "" -#: arc-dis.c:1413 +#: arc-dis.c:1438 +#, c-format +msgid " nps400 Recognize NPS400 instructions.\n" +msgstr "" + +#: arc-dis.c:1440 #, c-format msgid " hex Use only hexadecimal number to print immediates.\n" msgstr "" @@ -565,311 +574,362 @@ msgid "invalid position, should be one of: 0,4,8,...124." msgstr "" -#: arm-dis.c:3242 +#: arm-dis.c:5192 msgid "Select raw register names" msgstr "" -#: arm-dis.c:3244 +#: arm-dis.c:5194 msgid "Select register names used by GCC" msgstr "" -#: arm-dis.c:3246 +#: arm-dis.c:5196 msgid "Select register names used in ARM's ISA documentation" msgstr "" -#: arm-dis.c:3248 +#: arm-dis.c:5198 msgid "Assume all insns are Thumb insns" msgstr "" -#: arm-dis.c:3249 +#: arm-dis.c:5199 msgid "Examine preceding label to determine an insn's type" msgstr "" -#: arm-dis.c:3250 +#: arm-dis.c:5200 msgid "Select register names used in the APCS" msgstr "" -#: arm-dis.c:3252 +#: arm-dis.c:5202 msgid "Select register names used in the ATPCS" msgstr "" -#: arm-dis.c:3254 +#: arm-dis.c:5204 msgid "Select special register names used in the ATPCS" msgstr "" -#: arm-dis.c:3652 -msgid "<illegal precision>" +#: arm-dis.c:5206 +msgid "Enable CDE extensions for coprocessor N space" msgstr "" -#: arm-dis.c:6165 -#, c-format -msgid "unrecognised register name set: %s" -msgstr "" - -#: arm-dis.c:6906 -#, c-format -msgid "" -"\n" -"The following ARM specific disassembler options are supported for use with\n" -"the -M switch:\n" +#: arm-dis.c:8375 +msgid "<illegal precision>" msgstr "" -#: avr-dis.c:115 avr-dis.c:136 +#: arm-dis.c:11615 #, c-format -msgid "undefined" +msgid "unrecognised register name set: %s" msgstr "" -#: avr-dis.c:216 +#: arm-dis.c:11629 #, c-format -msgid "internal disassembler error" +msgid "cde coprocessor not between 0-7: %s" msgstr "" -#: avr-dis.c:270 +#: arm-dis.c:11635 #, c-format -msgid "unknown constraint `%c'" +msgid "coproc must have an argument: %s" msgstr "" -#: cgen-asm.c:351 epiphany-ibld.c:201 fr30-ibld.c:201 frv-ibld.c:201 -#: ip2k-ibld.c:201 iq2000-ibld.c:201 lm32-ibld.c:201 m32c-ibld.c:201 -#: m32r-ibld.c:201 mep-ibld.c:201 mt-ibld.c:201 or1k-ibld.c:201 -#: xc16x-ibld.c:201 xstormy16-ibld.c:201 +#: arm-dis.c:11648 #, c-format -msgid "operand out of range (%ld not between %ld and %ld)" +msgid "coprocN argument takes options \"generic\", \"cde\", or \"CDE\": %s" msgstr "" -#: cgen-asm.c:373 +#: arm-dis.c:12359 #, c-format -msgid "operand out of range (%lu not between %lu and %lu)" -msgstr "" - -#: d30v-dis.c:229 -#, c-format -msgid "illegal id (%d)" +msgid "" +"\n" +"The following ARM specific disassembler options are supported for use with\n" +"the -M switch:\n" msgstr "" -#: d30v-dis.c:256 +#: avr-dis.c:115 avr-dis.c:136 #, c-format -msgid "<unknown register %d>" +msgid "undefined" msgstr "" -#. Can't happen. -#: dis-buf.c:61 +#: avr-dis.c:218 #, c-format -msgid "Unknown error %d\n" +msgid "internal disassembler error" msgstr "" -#: dis-buf.c:70 +#: avr-dis.c:272 #, c-format -msgid "Address 0x%s is out of bounds.\n" -msgstr "" - -#: epiphany-asm.c:68 -msgid "register unavailable for short instructions" -msgstr "" - -#: epiphany-asm.c:115 -msgid "register name used as immediate value" -msgstr "" - -#. Don't treat "mov ip,ip" as a move-immediate. -#: epiphany-asm.c:178 epiphany-asm.c:234 -msgid "register source in immediate move" -msgstr "" - -#: epiphany-asm.c:187 -msgid "byte relocation unsupported" -msgstr "" - -#. -- assembler routines inserted here. -#. -- asm.c -#: epiphany-asm.c:193 frv-asm.c:972 iq2000-asm.c:56 lm32-asm.c:95 -#: lm32-asm.c:127 lm32-asm.c:157 lm32-asm.c:187 lm32-asm.c:217 lm32-asm.c:247 -#: m32c-asm.c:140 m32c-asm.c:235 m32c-asm.c:276 m32c-asm.c:334 m32c-asm.c:355 -#: m32r-asm.c:53 mep-asm.c:241 mep-asm.c:259 mep-asm.c:274 mep-asm.c:289 -#: mep-asm.c:301 or1k-asm.c:54 -msgid "missing `)'" -msgstr "" - -#: epiphany-asm.c:270 -msgid "ABORT: unknown operand" +msgid "unknown constraint `%c'" msgstr "" -#: epiphany-asm.c:296 -msgid "Not a pc-relative address." +#: bpf-asm.c:97 +msgid "expected 16, 32 or 64 in" msgstr "" -#: epiphany-asm.c:456 fr30-asm.c:311 frv-asm.c:1264 ip2k-asm.c:512 -#: iq2000-asm.c:460 lm32-asm.c:350 m32c-asm.c:1585 m32r-asm.c:329 -#: mep-asm.c:1288 mt-asm.c:596 or1k-asm.c:512 xc16x-asm.c:377 +#: bpf-asm.c:181 epiphany-asm.c:456 fr30-asm.c:311 frv-asm.c:1264 +#: ip2k-asm.c:512 iq2000-asm.c:460 lm32-asm.c:350 m32c-asm.c:1585 +#: m32r-asm.c:329 mep-asm.c:1287 mt-asm.c:596 or1k-asm.c:571 xc16x-asm.c:377 #: xstormy16-asm.c:277 #, c-format msgid "internal error: unrecognized field %d while parsing" msgstr "" -#: epiphany-asm.c:508 fr30-asm.c:363 frv-asm.c:1316 ip2k-asm.c:564 -#: iq2000-asm.c:512 lm32-asm.c:402 m32c-asm.c:1637 m32r-asm.c:381 -#: mep-asm.c:1340 mt-asm.c:648 or1k-asm.c:564 xc16x-asm.c:429 +#: bpf-asm.c:233 epiphany-asm.c:508 fr30-asm.c:363 frv-asm.c:1316 +#: ip2k-asm.c:564 iq2000-asm.c:512 lm32-asm.c:402 m32c-asm.c:1637 +#: m32r-asm.c:381 mep-asm.c:1339 mt-asm.c:648 or1k-asm.c:623 xc16x-asm.c:429 #: xstormy16-asm.c:329 msgid "missing mnemonic in syntax string" msgstr "" #. We couldn't parse it. -#: epiphany-asm.c:643 epiphany-asm.c:647 epiphany-asm.c:736 epiphany-asm.c:843 -#: fr30-asm.c:498 fr30-asm.c:502 fr30-asm.c:591 fr30-asm.c:698 frv-asm.c:1451 -#: frv-asm.c:1455 frv-asm.c:1544 frv-asm.c:1651 ip2k-asm.c:699 ip2k-asm.c:703 -#: ip2k-asm.c:792 ip2k-asm.c:899 iq2000-asm.c:647 iq2000-asm.c:651 -#: iq2000-asm.c:740 iq2000-asm.c:847 lm32-asm.c:537 lm32-asm.c:541 -#: lm32-asm.c:630 lm32-asm.c:737 m32c-asm.c:1772 m32c-asm.c:1776 -#: m32c-asm.c:1865 m32c-asm.c:1972 m32r-asm.c:516 m32r-asm.c:520 m32r-asm.c:609 -#: m32r-asm.c:716 mep-asm.c:1475 mep-asm.c:1479 mep-asm.c:1568 mep-asm.c:1675 -#: mt-asm.c:783 mt-asm.c:787 mt-asm.c:876 mt-asm.c:983 or1k-asm.c:699 -#: or1k-asm.c:703 or1k-asm.c:792 or1k-asm.c:899 xc16x-asm.c:564 xc16x-asm.c:568 -#: xc16x-asm.c:657 xc16x-asm.c:764 xstormy16-asm.c:464 xstormy16-asm.c:468 -#: xstormy16-asm.c:557 xstormy16-asm.c:664 +#: bpf-asm.c:368 bpf-asm.c:372 bpf-asm.c:461 bpf-asm.c:568 epiphany-asm.c:643 +#: epiphany-asm.c:647 epiphany-asm.c:736 epiphany-asm.c:843 fr30-asm.c:498 +#: fr30-asm.c:502 fr30-asm.c:591 fr30-asm.c:698 frv-asm.c:1451 frv-asm.c:1455 +#: frv-asm.c:1544 frv-asm.c:1651 ip2k-asm.c:699 ip2k-asm.c:703 ip2k-asm.c:792 +#: ip2k-asm.c:899 iq2000-asm.c:647 iq2000-asm.c:651 iq2000-asm.c:740 +#: iq2000-asm.c:847 lm32-asm.c:537 lm32-asm.c:541 lm32-asm.c:630 lm32-asm.c:737 +#: m32c-asm.c:1772 m32c-asm.c:1776 m32c-asm.c:1865 m32c-asm.c:1972 +#: m32r-asm.c:516 m32r-asm.c:520 m32r-asm.c:609 m32r-asm.c:716 mep-asm.c:1474 +#: mep-asm.c:1478 mep-asm.c:1567 mep-asm.c:1674 mt-asm.c:783 mt-asm.c:787 +#: mt-asm.c:876 mt-asm.c:983 or1k-asm.c:758 or1k-asm.c:762 or1k-asm.c:851 +#: or1k-asm.c:958 xc16x-asm.c:564 xc16x-asm.c:568 xc16x-asm.c:657 +#: xc16x-asm.c:764 xstormy16-asm.c:464 xstormy16-asm.c:468 xstormy16-asm.c:557 +#: xstormy16-asm.c:664 msgid "unrecognized instruction" msgstr "" -#: epiphany-asm.c:690 fr30-asm.c:545 frv-asm.c:1498 ip2k-asm.c:746 -#: iq2000-asm.c:694 lm32-asm.c:584 m32c-asm.c:1819 m32r-asm.c:563 -#: mep-asm.c:1522 mt-asm.c:830 or1k-asm.c:746 xc16x-asm.c:611 +#: bpf-asm.c:415 epiphany-asm.c:690 fr30-asm.c:545 frv-asm.c:1498 +#: ip2k-asm.c:746 iq2000-asm.c:694 lm32-asm.c:584 m32c-asm.c:1819 +#: m32r-asm.c:563 mep-asm.c:1521 mt-asm.c:830 or1k-asm.c:805 xc16x-asm.c:611 #: xstormy16-asm.c:511 #, c-format msgid "syntax error (expected char `%c', found `%c')" msgstr "" -#: epiphany-asm.c:700 fr30-asm.c:555 frv-asm.c:1508 ip2k-asm.c:756 -#: iq2000-asm.c:704 lm32-asm.c:594 m32c-asm.c:1829 m32r-asm.c:573 -#: mep-asm.c:1532 mt-asm.c:840 or1k-asm.c:756 xc16x-asm.c:621 +#: bpf-asm.c:425 epiphany-asm.c:700 fr30-asm.c:555 frv-asm.c:1508 +#: ip2k-asm.c:756 iq2000-asm.c:704 lm32-asm.c:594 m32c-asm.c:1829 +#: m32r-asm.c:573 mep-asm.c:1531 mt-asm.c:840 or1k-asm.c:815 xc16x-asm.c:621 #: xstormy16-asm.c:521 #, c-format msgid "syntax error (expected char `%c', found end of instruction)" msgstr "" -#: epiphany-asm.c:730 fr30-asm.c:585 frv-asm.c:1538 ip2k-asm.c:786 -#: iq2000-asm.c:734 lm32-asm.c:624 m32c-asm.c:1859 m32r-asm.c:603 -#: mep-asm.c:1562 mt-asm.c:870 or1k-asm.c:786 xc16x-asm.c:651 +#: bpf-asm.c:455 epiphany-asm.c:730 fr30-asm.c:585 frv-asm.c:1538 +#: ip2k-asm.c:786 iq2000-asm.c:734 lm32-asm.c:624 m32c-asm.c:1859 +#: m32r-asm.c:603 mep-asm.c:1561 mt-asm.c:870 or1k-asm.c:845 xc16x-asm.c:651 #: xstormy16-asm.c:551 msgid "junk at end of line" msgstr "" -#: epiphany-asm.c:842 fr30-asm.c:697 frv-asm.c:1650 ip2k-asm.c:898 -#: iq2000-asm.c:846 lm32-asm.c:736 m32c-asm.c:1971 m32r-asm.c:715 -#: mep-asm.c:1674 mt-asm.c:982 or1k-asm.c:898 xc16x-asm.c:763 +#: bpf-asm.c:567 epiphany-asm.c:842 fr30-asm.c:697 frv-asm.c:1650 +#: ip2k-asm.c:898 iq2000-asm.c:846 lm32-asm.c:736 m32c-asm.c:1971 +#: m32r-asm.c:715 mep-asm.c:1673 mt-asm.c:982 or1k-asm.c:957 xc16x-asm.c:763 #: xstormy16-asm.c:663 msgid "unrecognized form of instruction" msgstr "" -#: epiphany-asm.c:856 fr30-asm.c:711 frv-asm.c:1664 ip2k-asm.c:912 -#: iq2000-asm.c:860 lm32-asm.c:750 m32c-asm.c:1985 m32r-asm.c:729 -#: mep-asm.c:1688 mt-asm.c:996 or1k-asm.c:912 xc16x-asm.c:777 +#: bpf-asm.c:581 epiphany-asm.c:856 fr30-asm.c:711 frv-asm.c:1664 +#: ip2k-asm.c:912 iq2000-asm.c:860 lm32-asm.c:750 m32c-asm.c:1985 +#: m32r-asm.c:729 mep-asm.c:1687 mt-asm.c:996 or1k-asm.c:971 xc16x-asm.c:777 #: xstormy16-asm.c:677 #, c-format msgid "bad instruction `%.50s...'" msgstr "" -#: epiphany-asm.c:859 fr30-asm.c:714 frv-asm.c:1667 ip2k-asm.c:915 -#: iq2000-asm.c:863 lm32-asm.c:753 m32c-asm.c:1988 m32r-asm.c:732 -#: mep-asm.c:1691 mt-asm.c:999 or1k-asm.c:915 xc16x-asm.c:780 +#: bpf-asm.c:584 epiphany-asm.c:859 fr30-asm.c:714 frv-asm.c:1667 +#: ip2k-asm.c:915 iq2000-asm.c:863 lm32-asm.c:753 m32c-asm.c:1988 +#: m32r-asm.c:732 mep-asm.c:1690 mt-asm.c:999 or1k-asm.c:974 xc16x-asm.c:780 #: xstormy16-asm.c:680 #, c-format msgid "bad instruction `%.50s'" msgstr "" -#: epiphany-desc.c:2109 +#: bpf-desc.c:1671 #, c-format msgid "" -"internal error: epiphany_cgen_rebuild_tables: conflicting insn-chunk-bitsize " +"internal error: bpf_cgen_rebuild_tables: conflicting insn-chunk-bitsize " "values: `%d' vs. `%d'" msgstr "" -#: epiphany-desc.c:2192 +#: bpf-desc.c:1759 #, c-format -msgid "internal error: epiphany_cgen_cpu_open: unsupported argument `%d'" +msgid "internal error: bpf_cgen_cpu_open: unsupported argument `%d'" msgstr "" -#: epiphany-desc.c:2211 +#: bpf-desc.c:1778 #, c-format -msgid "internal error: epiphany_cgen_cpu_open: no endianness specified" +msgid "internal error: bpf_cgen_cpu_open: no endianness specified" msgstr "" #. Default text to print if an instruction isn't recognized. -#: epiphany-dis.c:41 fr30-dis.c:41 frv-dis.c:41 ip2k-dis.c:41 iq2000-dis.c:41 -#: lm32-dis.c:41 m32c-dis.c:41 m32r-dis.c:41 mep-dis.c:41 mmix-dis.c:275 -#: mt-dis.c:41 nds32-dis.c:64 or1k-dis.c:41 xc16x-dis.c:41 xstormy16-dis.c:41 +#: bpf-dis.c:41 epiphany-dis.c:41 fr30-dis.c:41 frv-dis.c:41 ip2k-dis.c:41 +#: iq2000-dis.c:41 lm32-dis.c:41 m32c-dis.c:41 m32r-dis.c:41 mep-dis.c:41 +#: mmix-dis.c:293 mt-dis.c:41 nds32-dis.c:64 or1k-dis.c:41 xc16x-dis.c:41 +#: xstormy16-dis.c:41 msgid "*unknown*" msgstr "" -#: epiphany-dis.c:279 fr30-dis.c:300 frv-dis.c:397 ip2k-dis.c:289 +#: bpf-dis.c:203 epiphany-dis.c:279 fr30-dis.c:300 frv-dis.c:397 ip2k-dis.c:289 #: iq2000-dis.c:190 lm32-dis.c:148 m32c-dis.c:892 m32r-dis.c:280 mep-dis.c:1188 -#: mt-dis.c:291 or1k-dis.c:145 xc16x-dis.c:421 xstormy16-dis.c:169 +#: mt-dis.c:291 or1k-dis.c:175 xc16x-dis.c:421 xstormy16-dis.c:169 #, c-format msgid "internal error: unrecognized field %d while printing insn" msgstr "" -#: epiphany-ibld.c:164 fr30-ibld.c:164 frv-ibld.c:164 ip2k-ibld.c:164 -#: iq2000-ibld.c:164 lm32-ibld.c:164 m32c-ibld.c:164 m32r-ibld.c:164 -#: mep-ibld.c:164 mt-ibld.c:164 or1k-ibld.c:164 xc16x-ibld.c:164 -#: xstormy16-ibld.c:164 +#: bpf-ibld.c:164 epiphany-ibld.c:164 fr30-ibld.c:164 frv-ibld.c:164 +#: ip2k-ibld.c:164 iq2000-ibld.c:164 lm32-ibld.c:164 m32c-ibld.c:164 +#: m32r-ibld.c:164 mep-ibld.c:164 mt-ibld.c:164 or1k-ibld.c:164 +#: xc16x-ibld.c:164 xstormy16-ibld.c:164 #, c-format msgid "operand out of range (%ld not between %ld and %lu)" msgstr "" -#: epiphany-ibld.c:185 fr30-ibld.c:185 frv-ibld.c:185 ip2k-ibld.c:185 -#: iq2000-ibld.c:185 lm32-ibld.c:185 m32c-ibld.c:185 m32r-ibld.c:185 -#: mep-ibld.c:185 mt-ibld.c:185 or1k-ibld.c:185 xc16x-ibld.c:185 -#: xstormy16-ibld.c:185 +#: bpf-ibld.c:185 epiphany-ibld.c:185 fr30-ibld.c:185 frv-ibld.c:185 +#: ip2k-ibld.c:185 iq2000-ibld.c:185 lm32-ibld.c:185 m32c-ibld.c:185 +#: m32r-ibld.c:185 mep-ibld.c:185 mt-ibld.c:185 or1k-ibld.c:185 +#: xc16x-ibld.c:185 xstormy16-ibld.c:185 #, c-format msgid "operand out of range (0x%lx not between 0 and 0x%lx)" msgstr "" -#: epiphany-ibld.c:880 fr30-ibld.c:735 frv-ibld.c:861 ip2k-ibld.c:612 -#: iq2000-ibld.c:718 lm32-ibld.c:639 m32c-ibld.c:1736 m32r-ibld.c:670 -#: mep-ibld.c:1213 mt-ibld.c:754 or1k-ibld.c:658 xc16x-ibld.c:757 -#: xstormy16-ibld.c:683 +#: bpf-ibld.c:201 cgen-asm.c:351 epiphany-ibld.c:201 fr30-ibld.c:201 +#: frv-ibld.c:201 ip2k-ibld.c:201 iq2000-ibld.c:201 lm32-ibld.c:201 +#: m32c-ibld.c:201 m32r-ibld.c:201 mep-ibld.c:201 mt-ibld.c:201 or1k-ibld.c:201 +#: xc16x-ibld.c:201 xstormy16-ibld.c:201 +#, c-format +msgid "operand out of range (%ld not between %ld and %ld)" +msgstr "" + +#: bpf-ibld.c:628 epiphany-ibld.c:883 fr30-ibld.c:738 frv-ibld.c:864 +#: ip2k-ibld.c:615 iq2000-ibld.c:721 lm32-ibld.c:642 m32c-ibld.c:1739 +#: m32r-ibld.c:673 mep-ibld.c:1216 mt-ibld.c:757 or1k-ibld.c:736 +#: xc16x-ibld.c:760 xstormy16-ibld.c:686 #, c-format msgid "internal error: unrecognized field %d while building insn" msgstr "" -#: epiphany-ibld.c:1175 fr30-ibld.c:941 frv-ibld.c:1179 ip2k-ibld.c:688 -#: iq2000-ibld.c:894 lm32-ibld.c:744 m32c-ibld.c:2898 m32r-ibld.c:808 -#: mep-ibld.c:1813 mt-ibld.c:975 or1k-ibld.c:772 xc16x-ibld.c:978 -#: xstormy16-ibld.c:830 +#: bpf-ibld.c:712 epiphany-ibld.c:1178 fr30-ibld.c:944 frv-ibld.c:1182 +#: ip2k-ibld.c:691 iq2000-ibld.c:897 lm32-ibld.c:747 m32c-ibld.c:2901 +#: m32r-ibld.c:811 mep-ibld.c:1816 mt-ibld.c:978 or1k-ibld.c:895 +#: xc16x-ibld.c:981 xstormy16-ibld.c:833 #, c-format msgid "internal error: unrecognized field %d while decoding insn" msgstr "" -#: epiphany-ibld.c:1319 fr30-ibld.c:1088 frv-ibld.c:1458 ip2k-ibld.c:763 -#: iq2000-ibld.c:1026 lm32-ibld.c:834 m32c-ibld.c:3516 m32r-ibld.c:922 -#: mep-ibld.c:2284 mt-ibld.c:1176 or1k-ibld.c:859 xc16x-ibld.c:1200 -#: xstormy16-ibld.c:941 +#: bpf-ibld.c:781 epiphany-ibld.c:1322 fr30-ibld.c:1091 frv-ibld.c:1461 +#: ip2k-ibld.c:766 iq2000-ibld.c:1029 lm32-ibld.c:837 m32c-ibld.c:3519 +#: m32r-ibld.c:925 mep-ibld.c:2287 mt-ibld.c:1179 or1k-ibld.c:991 +#: xc16x-ibld.c:1203 xstormy16-ibld.c:944 #, c-format msgid "internal error: unrecognized field %d while getting int operand" msgstr "" -#: epiphany-ibld.c:1445 fr30-ibld.c:1217 frv-ibld.c:1719 ip2k-ibld.c:820 -#: iq2000-ibld.c:1140 lm32-ibld.c:906 m32c-ibld.c:4116 m32r-ibld.c:1018 -#: mep-ibld.c:2737 mt-ibld.c:1359 or1k-ibld.c:928 xc16x-ibld.c:1404 -#: xstormy16-ibld.c:1034 +#: bpf-ibld.c:832 epiphany-ibld.c:1448 fr30-ibld.c:1220 frv-ibld.c:1722 +#: ip2k-ibld.c:823 iq2000-ibld.c:1143 lm32-ibld.c:909 m32c-ibld.c:4119 +#: m32r-ibld.c:1021 mep-ibld.c:2740 mt-ibld.c:1362 or1k-ibld.c:1069 +#: xc16x-ibld.c:1407 xstormy16-ibld.c:1037 #, c-format msgid "internal error: unrecognized field %d while getting vma operand" msgstr "" -#: epiphany-ibld.c:1578 fr30-ibld.c:1349 frv-ibld.c:1987 ip2k-ibld.c:880 -#: iq2000-ibld.c:1261 lm32-ibld.c:985 m32c-ibld.c:4704 m32r-ibld.c:1120 -#: mep-ibld.c:3151 mt-ibld.c:1549 or1k-ibld.c:1004 xc16x-ibld.c:1609 -#: xstormy16-ibld.c:1134 +#: bpf-ibld.c:890 epiphany-ibld.c:1581 fr30-ibld.c:1352 frv-ibld.c:1990 +#: ip2k-ibld.c:883 iq2000-ibld.c:1264 lm32-ibld.c:988 m32c-ibld.c:4707 +#: m32r-ibld.c:1123 mep-ibld.c:3154 mt-ibld.c:1552 or1k-ibld.c:1154 +#: xc16x-ibld.c:1612 xstormy16-ibld.c:1137 #, c-format msgid "internal error: unrecognized field %d while setting int operand" msgstr "" -#: epiphany-ibld.c:1701 fr30-ibld.c:1471 frv-ibld.c:2245 ip2k-ibld.c:930 -#: iq2000-ibld.c:1372 lm32-ibld.c:1054 m32c-ibld.c:5282 m32r-ibld.c:1212 -#: mep-ibld.c:3555 mt-ibld.c:1729 or1k-ibld.c:1070 xc16x-ibld.c:1804 -#: xstormy16-ibld.c:1224 +#: bpf-ibld.c:938 epiphany-ibld.c:1704 fr30-ibld.c:1474 frv-ibld.c:2248 +#: ip2k-ibld.c:933 iq2000-ibld.c:1375 lm32-ibld.c:1057 m32c-ibld.c:5285 +#: m32r-ibld.c:1215 mep-ibld.c:3558 mt-ibld.c:1732 or1k-ibld.c:1229 +#: xc16x-ibld.c:1807 xstormy16-ibld.c:1227 #, c-format msgid "internal error: unrecognized field %d while setting vma operand" msgstr "" +#: cgen-asm.c:373 +#, c-format +msgid "operand out of range (%lu not between %lu and %lu)" +msgstr "" + +#: d30v-dis.c:232 +#, c-format +msgid "illegal id (%d)" +msgstr "" + +#: d30v-dis.c:259 +#, c-format +msgid "<unknown register %d>" +msgstr "" + +#. Can't happen. +#: dis-buf.c:61 +#, c-format +msgid "Unknown error %d\n" +msgstr "" + +#: dis-buf.c:70 +#, c-format +msgid "Address 0x%s is out of bounds.\n" +msgstr "" + +#: disassemble.c:840 +#, c-format +msgid "assertion fail %s:%d" +msgstr "" + +#: disassemble.c:841 +msgid "Please report this bug" +msgstr "" + +#: epiphany-asm.c:68 +msgid "register unavailable for short instructions" +msgstr "" + +#: epiphany-asm.c:115 +msgid "register name used as immediate value" +msgstr "" + +#. Don't treat "mov ip,ip" as a move-immediate. +#: epiphany-asm.c:178 epiphany-asm.c:234 +msgid "register source in immediate move" +msgstr "" + +#: epiphany-asm.c:187 +msgid "byte relocation unsupported" +msgstr "" + +#. -- assembler routines inserted here. +#. -- asm.c +#: epiphany-asm.c:193 frv-asm.c:972 iq2000-asm.c:56 lm32-asm.c:95 +#: lm32-asm.c:127 lm32-asm.c:157 lm32-asm.c:187 lm32-asm.c:217 lm32-asm.c:247 +#: m32c-asm.c:140 m32c-asm.c:235 m32c-asm.c:276 m32c-asm.c:334 m32c-asm.c:355 +#: m32r-asm.c:53 mep-asm.c:241 mep-asm.c:259 mep-asm.c:274 mep-asm.c:289 +#: mep-asm.c:301 or1k-asm.c:54 +msgid "missing `)'" +msgstr "" + +#: epiphany-asm.c:270 +msgid "ABORT: unknown operand" +msgstr "" + +#: epiphany-asm.c:296 +msgid "Not a pc-relative address." +msgstr "" + +#: epiphany-desc.c:2109 +#, c-format +msgid "" +"internal error: epiphany_cgen_rebuild_tables: conflicting insn-chunk-bitsize " +"values: `%d' vs. `%d'" +msgstr "" + +#: epiphany-desc.c:2197 +#, c-format +msgid "internal error: epiphany_cgen_cpu_open: unsupported argument `%d'" +msgstr "" + +#: epiphany-desc.c:2216 +#, c-format +msgid "internal error: epiphany_cgen_cpu_open: no endianness specified" +msgstr "" + #: fr30-asm.c:93 m32c-asm.c:872 m32c-asm.c:879 msgid "Register number is not valid" msgstr "" @@ -893,12 +953,12 @@ "values: `%d' vs. `%d'" msgstr "" -#: fr30-desc.c:1669 +#: fr30-desc.c:1674 #, c-format msgid "internal error: fr30_cgen_cpu_open: unsupported argument `%d'" msgstr "" -#: fr30-desc.c:1688 +#: fr30-desc.c:1693 #, c-format msgid "internal error: fr30_cgen_cpu_open: no endianness specified" msgstr "" @@ -926,12 +986,12 @@ "values: `%d' vs. `%d'" msgstr "" -#: frv-desc.c:6409 +#: frv-desc.c:6414 #, c-format msgid "internal error: frv_cgen_cpu_open: unsupported argument `%d'" msgstr "" -#: frv-desc.c:6428 +#: frv-desc.c:6433 #, c-format msgid "internal error: frv_cgen_cpu_open: no endianness specified" msgstr "" @@ -951,26 +1011,21 @@ msgid "internal error: bad insn unit" msgstr "" -#: h8300-dis.c:63 -#, c-format -msgid "internal error, h8_disassemble_init" -msgstr "" - -#: h8300-dis.c:314 +#: h8300-dis.c:309 #, c-format msgid "Hmmmm 0x%x" msgstr "" -#: h8300-dis.c:691 +#: h8300-dis.c:617 #, c-format msgid "Don't understand 0x%x \n" msgstr "" -#: i386-dis.c:11058 +#: i386-dis.c:11040 msgid "<internal disassembler error>" msgstr "" -#: i386-dis.c:11353 +#: i386-dis.c:11337 #, c-format msgid "" "\n" @@ -979,145 +1034,145 @@ "with the -M switch (multiple options should be separated by commas):\n" msgstr "" -#: i386-dis.c:11357 +#: i386-dis.c:11341 #, c-format msgid " x86-64 Disassemble in 64bit mode\n" msgstr "" -#: i386-dis.c:11358 +#: i386-dis.c:11342 #, c-format msgid " i386 Disassemble in 32bit mode\n" msgstr "" -#: i386-dis.c:11359 +#: i386-dis.c:11343 #, c-format msgid " i8086 Disassemble in 16bit mode\n" msgstr "" -#: i386-dis.c:11360 +#: i386-dis.c:11344 #, c-format msgid " att Display instruction in AT&T syntax\n" msgstr "" -#: i386-dis.c:11361 +#: i386-dis.c:11345 #, c-format msgid " intel Display instruction in Intel syntax\n" msgstr "" -#: i386-dis.c:11362 +#: i386-dis.c:11346 #, c-format msgid "" " att-mnemonic\n" " Display instruction in AT&T mnemonic\n" msgstr "" -#: i386-dis.c:11364 +#: i386-dis.c:11348 #, c-format msgid "" " intel-mnemonic\n" " Display instruction in Intel mnemonic\n" msgstr "" -#: i386-dis.c:11366 +#: i386-dis.c:11350 #, c-format msgid " addr64 Assume 64bit address size\n" msgstr "" -#: i386-dis.c:11367 +#: i386-dis.c:11351 #, c-format msgid " addr32 Assume 32bit address size\n" msgstr "" -#: i386-dis.c:11368 +#: i386-dis.c:11352 #, c-format msgid " addr16 Assume 16bit address size\n" msgstr "" -#: i386-dis.c:11369 +#: i386-dis.c:11353 #, c-format msgid " data32 Assume 32bit data size\n" msgstr "" -#: i386-dis.c:11370 +#: i386-dis.c:11354 #, c-format msgid " data16 Assume 16bit data size\n" msgstr "" -#: i386-dis.c:11371 +#: i386-dis.c:11355 #, c-format msgid " suffix Always display instruction suffix in AT&T syntax\n" msgstr "" -#: i386-dis.c:11372 +#: i386-dis.c:11356 #, c-format msgid " amd64 Display instruction in AMD64 ISA\n" msgstr "" -#: i386-dis.c:11373 +#: i386-dis.c:11357 #, c-format msgid " intel64 Display instruction in Intel64 ISA\n" msgstr "" -#: i386-dis.c:11936 +#: i386-dis.c:11912 msgid "64-bit address is disabled" msgstr "" -#: i386-gen.c:732 +#: i386-gen.c:793 #, c-format msgid "%s: error: " msgstr "" -#: i386-gen.c:911 +#: i386-gen.c:960 #, c-format msgid "%s: %d: unknown bitfield: %s\n" msgstr "" -#: i386-gen.c:913 +#: i386-gen.c:962 #, c-format msgid "unknown bitfield: %s\n" msgstr "" -#: i386-gen.c:976 +#: i386-gen.c:1025 #, c-format msgid "%s: %d: missing `)' in bitfield: %s\n" msgstr "" -#: i386-gen.c:1077 +#: i386-gen.c:1126 #, c-format msgid "unknown broadcast operand: %s\n" msgstr "" -#: i386-gen.c:1478 +#: i386-gen.c:1777 #, c-format msgid "can't find i386-reg.tbl for reading, errno = %s\n" msgstr "" -#: i386-gen.c:1556 +#: i386-gen.c:1855 #, c-format msgid "can't create i386-init.h, errno = %s\n" msgstr "" -#: i386-gen.c:1646 ia64-gen.c:2829 +#: i386-gen.c:1945 ia64-gen.c:2829 #, c-format msgid "unable to change directory to \"%s\", errno = %s\n" msgstr "" -#: i386-gen.c:1658 i386-gen.c:1661 +#: i386-gen.c:1959 i386-gen.c:1964 #, c-format msgid "CpuMax != %d!\n" msgstr "" -#: i386-gen.c:1665 +#: i386-gen.c:1968 #, c-format msgid "%d unused bits in i386_cpu_flags.\n" msgstr "" -#: i386-gen.c:1672 +#: i386-gen.c:1983 #, c-format msgid "%d unused bits in i386_operand_type.\n" msgstr "" -#: i386-gen.c:1686 +#: i386-gen.c:1997 #, c-format msgid "can't create i386-tbl.h, errno = %s\n" msgstr "" @@ -1287,12 +1342,12 @@ "values: `%d' vs. `%d'" msgstr "" -#: ip2k-desc.c:1098 +#: ip2k-desc.c:1103 #, c-format msgid "internal error: ip2k_cgen_cpu_open: unsupported argument `%d'" msgstr "" -#: ip2k-desc.c:1117 +#: ip2k-desc.c:1122 #, c-format msgid "internal error: ip2k_cgen_cpu_open: no endianness specified" msgstr "" @@ -1316,12 +1371,12 @@ "values: `%d' vs. `%d'" msgstr "" -#: iq2000-desc.c:2103 +#: iq2000-desc.c:2108 #, c-format msgid "internal error: iq2000_cgen_cpu_open: unsupported argument `%d'" msgstr "" -#: iq2000-desc.c:2122 +#: iq2000-desc.c:2127 #, c-format msgid "internal error: iq2000_cgen_cpu_open: no endianness specified" msgstr "" @@ -1349,22 +1404,22 @@ "values: `%d' vs. `%d'" msgstr "" -#: lm32-desc.c:1085 +#: lm32-desc.c:1090 #, c-format msgid "internal error: lm32_cgen_cpu_open: unsupported argument `%d'" msgstr "" -#: lm32-desc.c:1104 +#: lm32-desc.c:1109 #, c-format msgid "internal error: lm32_cgen_cpu_open: no endianness specified" msgstr "" -#: m10200-dis.c:157 m10300-dis.c:580 +#: m10200-dis.c:151 m10300-dis.c:574 #, c-format msgid "unknown\t0x%04lx" msgstr "" -#: m10200-dis.c:327 +#: m10200-dis.c:321 #, c-format msgid "unknown\t0x%02lx" msgstr "" @@ -1450,12 +1505,12 @@ "values: `%d' vs. `%d'" msgstr "" -#: m32c-desc.c:63116 +#: m32c-desc.c:63121 #, c-format msgid "internal error: m32c_cgen_cpu_open: unsupported argument `%d'" msgstr "" -#: m32c-desc.c:63135 +#: m32c-desc.c:63140 #, c-format msgid "internal error: m32c_cgen_cpu_open: no endianness specified" msgstr "" @@ -1467,22 +1522,22 @@ "values: `%d' vs. `%d'" msgstr "" -#: m32r-desc.c:1448 +#: m32r-desc.c:1453 #, c-format msgid "internal error: m32r_cgen_cpu_open: unsupported argument `%d'" msgstr "" -#: m32r-desc.c:1467 +#: m32r-desc.c:1472 #, c-format msgid "internal error: m32r_cgen_cpu_open: no endianness specified" msgstr "" -#: m68k-dis.c:1292 +#: m68k-dis.c:1294 #, c-format msgid "<function code %d>" msgstr "" -#: m68k-dis.c:1455 +#: m68k-dis.c:1457 #, c-format msgid "<internal error in opcode table: %s %s>\n" msgstr "" @@ -1527,96 +1582,96 @@ "values: `%d' vs. `%d'" msgstr "" -#: mep-desc.c:6309 +#: mep-desc.c:6314 #, c-format msgid "internal error: mep_cgen_cpu_open: unsupported argument `%d'" msgstr "" -#: mep-desc.c:6328 +#: mep-desc.c:6333 #, c-format msgid "internal error: mep_cgen_cpu_open: no endianness specified" msgstr "" -#: mips-dis.c:1800 mips-dis.c:2026 +#: mips-dis.c:1805 mips-dis.c:2031 #, c-format msgid "# internal error, undefined operand in `%s %s'" msgstr "" -#: mips-dis.c:2615 +#: mips-dis.c:2620 msgid "Use canonical instruction forms.\n" msgstr "" -#: mips-dis.c:2617 +#: mips-dis.c:2622 msgid "Recognize MSA instructions.\n" msgstr "" -#: mips-dis.c:2619 +#: mips-dis.c:2624 msgid "Recognize the virtualization ASE instructions.\n" msgstr "" -#: mips-dis.c:2621 +#: mips-dis.c:2626 msgid "" "Recognize the eXtended Physical Address (XPA) ASE\n" " instructions.\n" msgstr "" -#: mips-dis.c:2624 +#: mips-dis.c:2629 msgid "Recognize the Global INValidate (GINV) ASE instructions.\n" msgstr "" -#: mips-dis.c:2628 +#: mips-dis.c:2633 msgid "" "Recognize the Loongson MultiMedia extensions Instructions (MMI) ASE " "instructions.\n" msgstr "" -#: mips-dis.c:2632 +#: mips-dis.c:2637 msgid "Recognize the Loongson Content Address Memory (CAM) instructions.\n" msgstr "" -#: mips-dis.c:2636 +#: mips-dis.c:2641 msgid "Recognize the Loongson EXTensions (EXT) instructions.\n" msgstr "" -#: mips-dis.c:2640 +#: mips-dis.c:2645 msgid "Recognize the Loongson EXTensions R2 (EXT2) instructions.\n" msgstr "" -#: mips-dis.c:2643 +#: mips-dis.c:2648 msgid "" "Print GPR names according to specified ABI.\n" " Default: based on binary being disassembled.\n" msgstr "" -#: mips-dis.c:2646 +#: mips-dis.c:2651 msgid "" "Print FPR names according to specified ABI.\n" " Default: numeric.\n" msgstr "" -#: mips-dis.c:2649 +#: mips-dis.c:2654 msgid "" "Print CP0 register names according to specified architecture.\n" " Default: based on binary being disassembled.\n" msgstr "" -#: mips-dis.c:2653 +#: mips-dis.c:2658 msgid "" "Print HWR names according to specified architecture.\n" " Default: based on binary being disassembled.\n" msgstr "" -#: mips-dis.c:2656 +#: mips-dis.c:2661 msgid "Print GPR and FPR names according to specified ABI.\n" msgstr "" -#: mips-dis.c:2658 +#: mips-dis.c:2663 msgid "" "Print CP0 register and HWR names according to specified\n" " architecture." msgstr "" -#: mips-dis.c:2744 +#: mips-dis.c:2749 #, c-format msgid "" "\n" @@ -1625,7 +1680,7 @@ "\n" msgstr "" -#: mips-dis.c:2778 +#: mips-dis.c:2783 #, c-format msgid "" "\n" @@ -1647,7 +1702,11 @@ msgid "(unknown)" msgstr "" -#: mmix-dis.c:510 +#: mmix-dis.c:247 mmix-dis.c:255 +msgid "*illegal*" +msgstr "" + +#: mmix-dis.c:529 #, c-format msgid "*unknown operands type: %d*" msgstr "" @@ -1708,12 +1767,12 @@ "values: `%d' vs. `%d'" msgstr "" -#: mt-desc.c:1229 +#: mt-desc.c:1234 #, c-format msgid "internal error: mt_cgen_cpu_open: unsupported argument `%d'" msgstr "" -#: mt-desc.c:1248 +#: mt-desc.c:1253 #, c-format msgid "internal error: mt_cgen_cpu_open: no endianness specified" msgstr "" @@ -1733,6 +1792,10 @@ msgid "internal error: unknown hardware resource" msgstr "" +#: nds32-dis.c:1186 +msgid "insufficient data to decode instruction" +msgstr "" + #: nfp-dis.c:927 msgid "<invalid_instruction>:" msgstr "" @@ -1818,29 +1881,29 @@ msgid "internal relocation type invalid" msgstr "" -#: or1k-desc.c:1978 +#: or1k-desc.c:2040 #, c-format msgid "" "internal error: or1k_cgen_rebuild_tables: conflicting insn-chunk-bitsize " "values: `%d' vs. `%d'" msgstr "" -#: or1k-desc.c:2061 +#: or1k-desc.c:2128 #, c-format msgid "internal error: or1k_cgen_cpu_open: unsupported argument `%d'" msgstr "" -#: or1k-desc.c:2080 +#: or1k-desc.c:2147 #, c-format msgid "internal error: or1k_cgen_cpu_open: no endianness specified" msgstr "" -#: ppc-dis.c:370 +#: ppc-dis.c:386 #, c-format msgid "warning: ignoring unknown -M%s option" msgstr "" -#: ppc-dis.c:858 +#: ppc-dis.c:977 #, c-format msgid "" "\n" @@ -1852,109 +1915,146 @@ msgid "invalid register" msgstr "" -#: ppc-opc.c:384 ppc-opc.c:412 +#: ppc-opc.c:396 msgid "invalid conditional option" msgstr "" -#: ppc-opc.c:386 ppc-opc.c:414 +#: ppc-opc.c:399 msgid "invalid counter access" msgstr "" -#: ppc-opc.c:416 +#: ppc-opc.c:463 +msgid "BO value implies no branch hint, when using + or - modifier" +msgstr "" + +#: ppc-opc.c:468 msgid "attempt to set y bit when using + or - modifier" msgstr "" -#: ppc-opc.c:507 +#: ppc-opc.c:470 +msgid "attempt to set 'at' bits when using + or - modifier" +msgstr "" + +#: ppc-opc.c:677 +msgid "invalid R operand" +msgstr "" + +#: ppc-opc.c:732 msgid "invalid mask field" msgstr "" -#: ppc-opc.c:530 +#: ppc-opc.c:755 msgid "invalid mfcr mask" msgstr "" -#: ppc-opc.c:606 +#: ppc-opc.c:873 ppc-opc.c:891 msgid "illegal L operand value" msgstr "" -#: ppc-opc.c:645 +#: ppc-opc.c:914 +msgid "illegal WC operand value" +msgstr "" + +#: ppc-opc.c:1011 msgid "incompatible L operand value" msgstr "" -#: ppc-opc.c:684 ppc-opc.c:719 +#: ppc-opc.c:1051 ppc-opc.c:1086 msgid "illegal bitmask" msgstr "" -#: ppc-opc.c:806 +#: ppc-opc.c:1173 msgid "address register in load range" msgstr "" -#: ppc-opc.c:872 +#: ppc-opc.c:1213 +msgid "illegal PL operand value" +msgstr "" + +#: ppc-opc.c:1274 msgid "index register in load range" msgstr "" -#: ppc-opc.c:901 ppc-opc.c:986 +#: ppc-opc.c:1303 ppc-opc.c:1389 msgid "source and target register operands must be different" msgstr "" -#: ppc-opc.c:931 +#: ppc-opc.c:1334 msgid "invalid register operand when updating" msgstr "" -#: ppc-opc.c:1049 +#: ppc-opc.c:1452 msgid "illegal immediate value" msgstr "" -#: ppc-opc.c:1154 +#: ppc-opc.c:1557 msgid "invalid bat number" msgstr "" -#: ppc-opc.c:1189 +#: ppc-opc.c:1592 msgid "invalid sprg number" msgstr "" -#: ppc-opc.c:1226 +#: ppc-opc.c:1629 msgid "invalid tbr number" msgstr "" -#: ppc-opc.c:1372 +#: ppc-opc.c:1715 ppc-opc.c:1761 +msgid "VSR overlaps ACC operand" +msgstr "" + +#: ppc-opc.c:1868 msgid "invalid constant" msgstr "" -#: ppc-opc.c:1474 ppc-opc.c:1497 ppc-opc.c:1520 ppc-opc.c:1543 +#: ppc-opc.c:1970 ppc-opc.c:1993 ppc-opc.c:2016 ppc-opc.c:2039 msgid "UIMM = 00000 is illegal" msgstr "" -#: ppc-opc.c:1566 +#: ppc-opc.c:2062 msgid "UIMM values >7 are illegal" msgstr "" -#: ppc-opc.c:1589 +#: ppc-opc.c:2085 msgid "UIMM values >15 are illegal" msgstr "" -#: ppc-opc.c:1612 +#: ppc-opc.c:2108 msgid "GPR odd is illegal" msgstr "" -#: ppc-opc.c:1635 ppc-opc.c:1658 +#: ppc-opc.c:2131 ppc-opc.c:2154 msgid "invalid offset" msgstr "" -#: ppc-opc.c:1681 +#: ppc-opc.c:2177 msgid "invalid Ddd value" msgstr "" -#: riscv-dis.c:68 +#. The option without '=' should be defined above. +#: riscv-dis.c:85 riscv-dis.c:109 #, c-format msgid "unrecognized disassembler option: %s" msgstr "" -#: riscv-dis.c:346 +#. Invalid options with '=', no option name before '=', +#. and no value after '='. +#: riscv-dis.c:93 +#, c-format +msgid "unrecognized disassembler option with '=': %s" +msgstr "" + +#: riscv-dis.c:103 +#, c-format +msgid "unknown privilege spec set by %s=%s" +msgstr "" + +#: riscv-dis.c:406 #, c-format msgid "# internal error, undefined modifier (%c)" msgstr "" -#: riscv-dis.c:541 +#: riscv-dis.c:605 #, c-format msgid "" "\n" @@ -1962,19 +2062,59 @@ "with the -M switch (multiple options should be separated by commas):\n" msgstr "" -#: riscv-dis.c:545 +#: riscv-dis.c:609 #, c-format msgid "" "\n" -" numeric Print numeric register names, rather than ABI names.\n" +" numeric Print numeric register names, rather than ABI names.\n" msgstr "" -#: riscv-dis.c:548 +#: riscv-dis.c:612 #, c-format msgid "" "\n" -" no-aliases Disassemble only into canonical instructions, rather\n" -" than into pseudoinstructions.\n" +" no-aliases Disassemble only into canonical instructions, rather\n" +" than into pseudoinstructions.\n" +msgstr "" + +#: riscv-dis.c:616 +#, c-format +msgid "" +"\n" +" priv-spec=PRIV Print the CSR according to the chosen privilege spec\n" +" (1.9, 1.9.1, 1.10, 1.11).\n" +msgstr "" + +#: rx-dis.c:139 rx-dis.c:163 rx-dis.c:171 rx-dis.c:179 rx-dis.c:187 +msgid "<invalid register number>" +msgstr "" + +#: rx-dis.c:147 rx-dis.c:195 +msgid "<invalid condition code>" +msgstr "" + +#: rx-dis.c:155 +msgid "<invalid flag>" +msgstr "" + +#: rx-dis.c:203 +msgid "<invalid opsize>" +msgstr "" + +#: rx-dis.c:211 +msgid "<invalid size>" +msgstr "" + +#: s12z-dis.c:251 s12z-dis.c:308 s12z-dis.c:319 +msgid "<illegal reg num>" +msgstr "" + +#: s12z-dis.c:382 +msgid "<bad>" +msgstr "" + +#: s12z-dis.c:392 +msgid ".<bad>" msgstr "" #: s390-dis.c:42 @@ -2002,8 +2142,8 @@ "with the -M switch (multiple options should be separated by commas):\n" msgstr "" -#: score-dis.c:663 score-dis.c:870 score-dis.c:1031 score-dis.c:1145 -#: score-dis.c:1152 score-dis.c:1159 score7-dis.c:695 score7-dis.c:858 +#: score-dis.c:661 score-dis.c:879 score-dis.c:1040 score-dis.c:1146 +#: score-dis.c:1154 score-dis.c:1161 score7-dis.c:695 score7-dis.c:858 msgid "<illegal instruction>" msgstr "" @@ -2018,16 +2158,44 @@ msgstr "" #. Mark as non-valid instruction. -#: sparc-dis.c:1098 +#: sparc-dis.c:1094 msgid "unknown" msgstr "" -#: v850-dis.c:453 +#: v850-dis.c:190 +msgid "<invalid s-reg number>" +msgstr "" + +#: v850-dis.c:206 +msgid "<invalid reg number>" +msgstr "" + +#: v850-dis.c:222 +msgid "<invalid v-reg number>" +msgstr "" + +#: v850-dis.c:236 +msgid "<invalid CC-reg number>" +msgstr "" + +#: v850-dis.c:250 +msgid "<invalid float-CC-reg number>" +msgstr "" + +#: v850-dis.c:264 +msgid "<invalid cacheop number>" +msgstr "" + +#: v850-dis.c:275 +msgid "<invalid prefop number>" +msgstr "" + +#: v850-dis.c:510 #, c-format msgid "unknown operand shift: %x" msgstr "" -#: v850-dis.c:469 +#: v850-dis.c:526 #, c-format msgid "unknown reg: %d" msgstr "" @@ -2109,7 +2277,7 @@ msgid "Name well-known globals" msgstr "" -#: wasm32-dis.c:503 +#: wasm32-dis.c:537 #, c-format msgid "" "The following WebAssembly-specific disassembler options are supported for " @@ -2148,12 +2316,12 @@ "values: `%d' vs. `%d'" msgstr "" -#: xc16x-desc.c:3432 +#: xc16x-desc.c:3437 #, c-format msgid "internal error: xc16x_cgen_cpu_open: unsupported argument `%d'" msgstr "" -#: xc16x-desc.c:3451 +#: xc16x-desc.c:3456 #, c-format msgid "internal error: xc16x_cgen_cpu_open: no endianness specified" msgstr "" @@ -2205,12 +2373,12 @@ "bitsize values: `%d' vs. `%d'" msgstr "" -#: xstormy16-desc.c:1400 +#: xstormy16-desc.c:1405 #, c-format msgid "internal error: xstormy16_cgen_cpu_open: unsupported argument `%d'" msgstr "" -#: xstormy16-desc.c:1419 +#: xstormy16-desc.c:1424 #, c-format msgid "internal error: xstormy16_cgen_cpu_open: no endianness specified" msgstr "" diff -Nru gdb-9.1/opcodes/po/POTFILES.in gdb-10.2/opcodes/po/POTFILES.in --- gdb-9.1/opcodes/po/POTFILES.in 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/po/POTFILES.in 2020-09-13 02:33:41.000000000 +0000 @@ -205,8 +205,6 @@ tic54x-dis.c tic54x-opc.c tic6x-dis.c -tic80-dis.c -tic80-opc.c tilegx-dis.c tilegx-opc.c tilepro-dis.c Binary files /tmp/tmpwlqmdap4/HCMjq_z_kj/gdb-9.1/opcodes/po/pt_BR.gmo and /tmp/tmpwlqmdap4/bi0oNuAXeo/gdb-10.2/opcodes/po/pt_BR.gmo differ diff -Nru gdb-9.1/opcodes/po/pt_BR.po gdb-10.2/opcodes/po/pt_BR.po --- gdb-9.1/opcodes/po/pt_BR.po 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/po/pt_BR.po 2021-04-25 04:06:26.000000000 +0000 @@ -1,14 +1,14 @@ # Brazilian Portuguese translation for opcodes -# Copyright (C) 2019 Free Software Foundation, Inc. +# Copyright (C) 2020 Free Software Foundation, Inc. # This file is distributed under the same license as the binutils package. # Alexandre Folle de Menezes <afmenez@terra.com.br>, 2002. -# Rafael Fontenelle <rafaelff@gnome.org>, 2018, 2019. +# Rafael Fontenelle <rafaelff@gnome.org>, 2018-2020. msgid "" msgstr "" -"Project-Id-Version: opcodes 2.31.90\n" +"Project-Id-Version: opcodes 2.34.90\n" "Report-Msgid-Bugs-To: bug-binutils@gnu.org\n" -"POT-Creation-Date: 2019-01-19 16:32+0000\n" -"PO-Revision-Date: 2019-01-21 11:37-0200\n" +"POT-Creation-Date: 2020-07-04 10:28+0100\n" +"PO-Revision-Date: 2020-07-04 11:24-0300\n" "Last-Translator: Rafael Fontenelle <rafaelff@gnome.org>\n" "Language-Team: Brazilian Portuguese <ldpbr-translation@lists.sourceforge.net>\n" "Language: pt_BR\n" @@ -19,21 +19,21 @@ "X-Generator: Virtaal 1.0.0-beta1\n" "X-Bugs: Report translation errors to the Language-Team address.\n" -#: aarch64-asm.c:819 +#: aarch64-asm.c:820 msgid "specified register cannot be read from" msgstr "o registrador especificado não pôde ser lido" -#: aarch64-asm.c:828 +#: aarch64-asm.c:829 msgid "specified register cannot be written to" msgstr "o registrador especificado não pôde ser escrito" #. Invalid option. -#: aarch64-dis.c:92 arc-dis.c:782 arm-dis.c:6174 +#: aarch64-dis.c:93 arc-dis.c:802 arm-dis.c:11654 #, c-format msgid "unrecognised disassembler option: %s" msgstr "opção do desmontador desconhecida: %s" -#: aarch64-dis.c:3448 +#: aarch64-dis.c:3531 #, c-format msgid "" "\n" @@ -44,7 +44,7 @@ "As opções do desmontador específicas para AARCH64 a seguir não têm suporte\n" "ao uso com a opção -M (opções múltiplas devem ser separadas por vírgulas):\n" -#: aarch64-dis.c:3452 +#: aarch64-dis.c:3535 #, c-format msgid "" "\n" @@ -53,7 +53,7 @@ "\n" " no-aliases Não exibe apelidos de instrução.\n" -#: aarch64-dis.c:3455 +#: aarch64-dis.c:3538 #, c-format msgid "" "\n" @@ -62,7 +62,7 @@ "\n" " aliases Exibe apelidos de instrução.\n" -#: aarch64-dis.c:3458 +#: aarch64-dis.c:3541 #, c-format msgid "" "\n" @@ -71,7 +71,7 @@ "\n" " no-notes Não exibe notas de instrução.\n" -#: aarch64-dis.c:3461 +#: aarch64-dis.c:3544 #, c-format msgid "" "\n" @@ -80,7 +80,7 @@ "\n" " notes Exibe notas de instrução.\n" -#: aarch64-dis.c:3465 +#: aarch64-dis.c:3548 #, c-format msgid "" "\n" @@ -89,264 +89,264 @@ "\n" " debug_dump Opção temporária para depurar rastros.\n" -#: aarch64-dis.c:3469 mips-dis.c:2773 mips-dis.c:2783 mips-dis.c:2786 -#: nfp-dis.c:2981 riscv-dis.c:552 +#: aarch64-dis.c:3552 mips-dis.c:2778 mips-dis.c:2788 mips-dis.c:2791 +#: nfp-dis.c:2981 riscv-dis.c:620 #, c-format msgid "\n" msgstr "\n" -#: aarch64-opc.c:1339 +#: aarch64-opc.c:1347 msgid "immediate value" msgstr "valor de imediato" -#: aarch64-opc.c:1349 +#: aarch64-opc.c:1357 msgid "immediate offset" msgstr "deslocamento de imediato" -#: aarch64-opc.c:1359 +#: aarch64-opc.c:1367 msgid "register number" msgstr "número de registrador" -#: aarch64-opc.c:1369 +#: aarch64-opc.c:1377 msgid "register element index" msgstr "índice de elemento de registrador" -#: aarch64-opc.c:1379 +#: aarch64-opc.c:1387 msgid "shift amount" msgstr "quantidade de troca" -#: aarch64-opc.c:1391 +#: aarch64-opc.c:1399 msgid "multiplier" msgstr "multiplicador" -#: aarch64-opc.c:1464 +#: aarch64-opc.c:1472 msgid "reg pair must start from even reg" msgstr "dupla de reg deve iniciar a partir do mesmo reg" -#: aarch64-opc.c:1470 +#: aarch64-opc.c:1478 msgid "reg pair must be contiguous" msgstr "par de regs deve ser contíguo" -#: aarch64-opc.c:1484 +#: aarch64-opc.c:1492 msgid "extraneous register" msgstr "registro estranho" -#: aarch64-opc.c:1490 +#: aarch64-opc.c:1498 msgid "missing register" msgstr "faltando o registro" -#: aarch64-opc.c:1501 +#: aarch64-opc.c:1509 msgid "stack pointer register expected" msgstr "registro de ponteiro de pilha esperado" -#: aarch64-opc.c:1524 +#: aarch64-opc.c:1534 msgid "z0-z15 expected" msgstr "z0-z15 esperado" -#: aarch64-opc.c:1525 +#: aarch64-opc.c:1535 msgid "z0-z7 expected" msgstr "z0-z7 esperado" -#: aarch64-opc.c:1551 +#: aarch64-opc.c:1561 msgid "invalid register list" msgstr "lista de registrador inválida" -#: aarch64-opc.c:1565 +#: aarch64-opc.c:1575 msgid "p0-p7 expected" msgstr "p0-p7 esperado" -#: aarch64-opc.c:1591 aarch64-opc.c:1599 +#: aarch64-opc.c:1601 aarch64-opc.c:1609 msgid "unexpected address writeback" msgstr "writeback de endereço inesperado" -#: aarch64-opc.c:1611 +#: aarch64-opc.c:1620 msgid "address writeback expected" msgstr "writeback de endereço esperado" -#: aarch64-opc.c:1658 +#: aarch64-opc.c:1667 msgid "negative or unaligned offset expected" msgstr "posição negativa ou desalinhada esperada" -#: aarch64-opc.c:1715 +#: aarch64-opc.c:1724 msgid "invalid register offset" msgstr "deslocamento de registrador inválido" -#: aarch64-opc.c:1737 +#: aarch64-opc.c:1746 msgid "invalid post-increment amount" msgstr "quantidade pós-incremento inválida" -#: aarch64-opc.c:1753 aarch64-opc.c:2247 +#: aarch64-opc.c:1762 aarch64-opc.c:2271 msgid "invalid shift amount" msgstr "quantidade de troca inválida" -#: aarch64-opc.c:1766 +#: aarch64-opc.c:1775 msgid "invalid extend/shift operator" msgstr "operador de extensão/troca inválido" -#: aarch64-opc.c:1812 aarch64-opc.c:2052 aarch64-opc.c:2087 aarch64-opc.c:2106 -#: aarch64-opc.c:2114 aarch64-opc.c:2201 aarch64-opc.c:2377 aarch64-opc.c:2477 -#: aarch64-opc.c:2490 +#: aarch64-opc.c:1821 aarch64-opc.c:2073 aarch64-opc.c:2108 aarch64-opc.c:2127 +#: aarch64-opc.c:2135 aarch64-opc.c:2224 aarch64-opc.c:2401 aarch64-opc.c:2501 +#: aarch64-opc.c:2514 msgid "immediate out of range" msgstr "imediato fora da faixa" -#: aarch64-opc.c:1834 aarch64-opc.c:1876 aarch64-opc.c:1926 aarch64-opc.c:1960 +#: aarch64-opc.c:1843 aarch64-opc.c:1885 aarch64-opc.c:1947 aarch64-opc.c:1981 msgid "invalid addressing mode" msgstr "modo de endereço inválido" -#: aarch64-opc.c:1918 +#: aarch64-opc.c:1939 msgid "index register xzr is not allowed" msgstr "registrador de índice xzr não é permitido" -#: aarch64-opc.c:2040 aarch64-opc.c:2062 aarch64-opc.c:2280 aarch64-opc.c:2288 -#: aarch64-opc.c:2354 aarch64-opc.c:2383 +#: aarch64-opc.c:2061 aarch64-opc.c:2083 aarch64-opc.c:2304 aarch64-opc.c:2312 +#: aarch64-opc.c:2378 aarch64-opc.c:2407 msgid "invalid shift operator" msgstr "operador de troca inválido" -#: aarch64-opc.c:2046 +#: aarch64-opc.c:2067 msgid "shift amount must be 0 or 12" msgstr "quantidade de troca deve ser 0 ou 12" -#: aarch64-opc.c:2069 +#: aarch64-opc.c:2090 msgid "shift amount must be a multiple of 16" msgstr "quantidade de troca deve ser um múltiplo de 16" -#: aarch64-opc.c:2081 +#: aarch64-opc.c:2102 msgid "negative immediate value not allowed" msgstr "valor negativo imediato não permitido" -#: aarch64-opc.c:2212 +#: aarch64-opc.c:2235 msgid "immediate zero expected" msgstr "zero imediato esperado" -#: aarch64-opc.c:2226 +#: aarch64-opc.c:2249 msgid "rotate expected to be 0, 90, 180 or 270" msgstr "rotação esperado ser 0, 90, 180 ou 270" -#: aarch64-opc.c:2236 +#: aarch64-opc.c:2260 msgid "rotate expected to be 90 or 270" msgstr "rotação esperado ser 90 ou 270" -#: aarch64-opc.c:2296 +#: aarch64-opc.c:2320 msgid "shift is not permitted" msgstr "troca não é permitida" -#: aarch64-opc.c:2321 +#: aarch64-opc.c:2345 msgid "invalid value for immediate" msgstr "valor inválido para imediato" -#: aarch64-opc.c:2346 +#: aarch64-opc.c:2370 msgid "shift amount must be 0 or 16" msgstr "quantidade de troca deve ser 0 ou 16" -#: aarch64-opc.c:2367 +#: aarch64-opc.c:2391 msgid "floating-point immediate expected" msgstr "imediato ponto flutuante esperado" -#: aarch64-opc.c:2401 +#: aarch64-opc.c:2425 msgid "no shift amount allowed for 8-bit constants" msgstr "nenhuma quantidade de troca permitida para constantes de 8 bits" -#: aarch64-opc.c:2411 +#: aarch64-opc.c:2435 msgid "shift amount must be 0 or 8" msgstr "quantidade de troca deve ser 0 ou 8" -#: aarch64-opc.c:2424 +#: aarch64-opc.c:2448 msgid "immediate too big for element size" msgstr "imediato grande demais para tamanho de elemento" -#: aarch64-opc.c:2431 +#: aarch64-opc.c:2455 msgid "invalid arithmetic immediate" msgstr "imediato aritmético inválido" -#: aarch64-opc.c:2445 +#: aarch64-opc.c:2469 msgid "floating-point value must be 0.5 or 1.0" msgstr "valor de ponto flutuante deve ser 0.5 ou 1.0" -#: aarch64-opc.c:2455 +#: aarch64-opc.c:2479 msgid "floating-point value must be 0.5 or 2.0" msgstr "valor de ponto flutuante deve ser 0.5 ou 2.0" -#: aarch64-opc.c:2465 +#: aarch64-opc.c:2489 msgid "floating-point value must be 0.0 or 1.0" msgstr "valor de ponto flutuante deve ser 0.0 ou 1.0" -#: aarch64-opc.c:2496 +#: aarch64-opc.c:2520 msgid "invalid replicated MOV immediate" msgstr "imediato MOV replicado inválido" -#: aarch64-opc.c:2614 +#: aarch64-opc.c:2641 msgid "extend operator expected" msgstr "operador de extensão esperado" -#: aarch64-opc.c:2627 +#: aarch64-opc.c:2654 msgid "missing extend operator" msgstr "faltando o operador de extensão" -#: aarch64-opc.c:2633 +#: aarch64-opc.c:2660 msgid "'LSL' operator not allowed" msgstr "operador \"LSL\" não permitido" -#: aarch64-opc.c:2654 +#: aarch64-opc.c:2681 msgid "W register expected" msgstr "registrador W esperado" -#: aarch64-opc.c:2665 +#: aarch64-opc.c:2692 msgid "shift operator expected" msgstr "operador de troca esperado" -#: aarch64-opc.c:2672 +#: aarch64-opc.c:2699 msgid "'ROR' operator not allowed" msgstr "operador \"ROR\" não permitido" -#: aarch64-opc.c:3671 +#: aarch64-opc.c:3714 msgid "reading from a write-only register" msgstr "lendo de um registrado de somente leitura" -#: aarch64-opc.c:3673 +#: aarch64-opc.c:3716 msgid "writing to a read-only register" msgstr "escrevendo em um registrador de somente leitura" -#: aarch64-opc.c:4815 +#: aarch64-opc.c:4711 msgid "instruction opens new dependency sequence without ending previous one" msgstr "a instrução abre nova sequência de dependência sem terminar a anterior" -#: aarch64-opc.c:4835 +#: aarch64-opc.c:4731 msgid "previous `movprfx' sequence not closed" msgstr "a sequência anterior \"movprfx\" não foi fechada" -#: aarch64-opc.c:4852 +#: aarch64-opc.c:4750 msgid "SVE instruction expected after `movprfx'" msgstr "instrução SVE esperada após \"movprfx\"" -#: aarch64-opc.c:4865 +#: aarch64-opc.c:4763 msgid "SVE `movprfx' compatible instruction expected" msgstr "instrução SVE compatível com \"movprfx\" esperada" -#: aarch64-opc.c:4956 +#: aarch64-opc.c:4850 msgid "predicated instruction expected after `movprfx'" msgstr "instrução de predicado esperada após \"movprfx\"" -#: aarch64-opc.c:4968 +#: aarch64-opc.c:4862 msgid "merging predicate expected due to preceding `movprfx'" msgstr "predicado de mesclagem esperado devido ao \"movprfx\" precedente" -#: aarch64-opc.c:4980 +#: aarch64-opc.c:4874 msgid "predicate register differs from that in preceding `movprfx'" msgstr "registro de predicado difere daquele no \"movprfx\" precedente" -#: aarch64-opc.c:4999 +#: aarch64-opc.c:4893 msgid "output register of preceding `movprfx' not used in current instruction" msgstr "registro de saída do \"movprfx\" precedente não usado na instrução atual" -#: aarch64-opc.c:5012 +#: aarch64-opc.c:4906 msgid "output register of preceding `movprfx' expected as output" msgstr "registro de saída do \"movprfx\" precedente esperado como saída" -#: aarch64-opc.c:5024 +#: aarch64-opc.c:4918 msgid "output register of preceding `movprfx' used as input" msgstr "registro de saída do \"movprfx\" precedente usado como entrada" -#: aarch64-opc.c:5040 +#: aarch64-opc.c:4934 msgid "register size not compatible with previous `movprfx'" msgstr "tamanho de registro não compatível com o \"movprfx\" anterior" @@ -358,7 +358,7 @@ msgid "jump hint unaligned" msgstr "dica de salto desalinhada" -#: arc-dis.c:377 +#: arc-dis.c:379 msgid "" "\n" "Warning: disassembly may be wrong due to guessed opcode class choice.\n" @@ -371,12 +371,16 @@ "Use -M<classe[,classe]> para selecionar classes corretas de código de operação.\n" "\t\t\t\t" -#: arc-dis.c:825 +#: arc-dis.c:440 +msgid "An error occured while generating the extension instruction operations" +msgstr "Ocorreu um erro ao gerar as operações de instrução de extensão" + +#: arc-dis.c:845 #, c-format msgid "unrecognised disassembler CPU option: %s" msgstr "opção de CPU do desmontador desconhecida: %s" -#: arc-dis.c:1387 +#: arc-dis.c:1412 #, c-format msgid "" "\n" @@ -387,42 +391,47 @@ "As opções do desmontador específicas para ARC a seguir não têm suporte \n" "ao uso com a opção -M (opções múltiplas devem ser separadas por vírgulas):\n" -#: arc-dis.c:1399 +#: arc-dis.c:1424 #, c-format msgid " dsp Recognize DSP instructions.\n" msgstr " dsp Reconhece instruções DSP.\n" -#: arc-dis.c:1401 +#: arc-dis.c:1426 #, c-format msgid " spfp Recognize FPX SP instructions.\n" msgstr " spfp Reconhece instruções FPX SP.\n" -#: arc-dis.c:1403 +#: arc-dis.c:1428 #, c-format msgid " dpfp Recognize FPX DP instructions.\n" msgstr " dpfp Reconhece instruções FPX DP.\n" -#: arc-dis.c:1405 +#: arc-dis.c:1430 #, c-format msgid " quarkse_em Recognize FPU QuarkSE-EM instructions.\n" msgstr " quarkse_em Reconhece instruções FPU QuarkSE-EM.\n" -#: arc-dis.c:1407 +#: arc-dis.c:1432 #, c-format msgid " fpuda Recognize double assist FPU instructions.\n" msgstr " fpuda Reconhece instruções double assist FPU.\n" -#: arc-dis.c:1409 +#: arc-dis.c:1434 #, c-format msgid " fpus Recognize single precision FPU instructions.\n" msgstr " fpus Reconhece instruções single precision FPU.\n" -#: arc-dis.c:1411 +#: arc-dis.c:1436 #, c-format msgid " fpud Recognize double precision FPU instructions.\n" msgstr " fpud Reconhece instruções double precision FPU.\n" -#: arc-dis.c:1413 +#: arc-dis.c:1438 +#, c-format +msgid " nps400 Recognize NPS400 instructions.\n" +msgstr " nps400 Reconhece instruções NPS400.\n" + +#: arc-dis.c:1440 #, c-format msgid " hex Use only hexadecimal number to print immediates.\n" msgstr " hex Usa apenas número hexadecimal para exibir imediatos.\n" @@ -588,48 +597,67 @@ msgid "invalid position, should be one of: 0,4,8,...124." msgstr "posição inválida, deve ser um dentre: 0,4,8,...124." -#: arm-dis.c:3242 +#: arm-dis.c:5192 msgid "Select raw register names" msgstr "Seleciona nomes de registrador não tratado" -#: arm-dis.c:3244 +#: arm-dis.c:5194 msgid "Select register names used by GCC" msgstr "Seleciona nomes de registradores usados pelo GCC" -#: arm-dis.c:3246 +#: arm-dis.c:5196 msgid "Select register names used in ARM's ISA documentation" msgstr "Seleciona nomes de registradores usados em documentação ISA do ARM" -#: arm-dis.c:3248 +#: arm-dis.c:5198 msgid "Assume all insns are Thumb insns" msgstr "Presume que todos insns são insns Thumb" -#: arm-dis.c:3249 +#: arm-dis.c:5199 msgid "Examine preceding label to determine an insn's type" msgstr "Examina rótulo anterior para determinar o tipo de um insn" -#: arm-dis.c:3250 +#: arm-dis.c:5200 msgid "Select register names used in the APCS" -msgstr "Selecione nomes de registradores usados no APCS" +msgstr "Seleciona nomes de registradores usados no APCS" -#: arm-dis.c:3252 +#: arm-dis.c:5202 msgid "Select register names used in the ATPCS" -msgstr "Selecione nomes de registradores usados no ATPCS" +msgstr "Seleciona nomes de registradores usados no ATPCS" -#: arm-dis.c:3254 +#: arm-dis.c:5204 msgid "Select special register names used in the ATPCS" -msgstr "Selecione nomes de registradores especiais usados no ATPCS" +msgstr "Seleciona nomes de registradores especiais usados no ATPCS" -#: arm-dis.c:3652 +#: arm-dis.c:5206 +msgid "Enable CDE extensions for coprocessor N space" +msgstr "Habilita extensões CDE para espaço N de coprocessador" + +#: arm-dis.c:8375 msgid "<illegal precision>" msgstr "<precisão ilegal>" -#: arm-dis.c:6165 +#: arm-dis.c:11615 #, c-format msgid "unrecognised register name set: %s" msgstr "conjunto de nomes de registrador desconhecido: %s" -#: arm-dis.c:6906 +#: arm-dis.c:11629 +#, c-format +msgid "cde coprocessor not between 0-7: %s" +msgstr "coprocessador cde não está entre 0-7: %s" + +#: arm-dis.c:11635 +#, c-format +msgid "coproc must have an argument: %s" +msgstr "coproc deve ter um argumento: %s" + +#: arm-dis.c:11648 +#, c-format +msgid "coprocN argument takes options \"generic\", \"cde\", or \"CDE\": %s" +msgstr "o argumento coprocN recebe as opções \"generic\", \"cde\", or \"CDE\": %s" + +#: arm-dis.c:12359 #, c-format msgid "" "\n" @@ -645,256 +673,286 @@ msgid "undefined" msgstr "indefinido" -#: avr-dis.c:216 +#: avr-dis.c:218 #, c-format msgid "internal disassembler error" msgstr "erro interno do desmontador" -#: avr-dis.c:270 +#: avr-dis.c:272 #, c-format msgid "unknown constraint `%c'" msgstr "restrição \"%c\" desconhecida" -#: cgen-asm.c:351 epiphany-ibld.c:201 fr30-ibld.c:201 frv-ibld.c:201 -#: ip2k-ibld.c:201 iq2000-ibld.c:201 lm32-ibld.c:201 m32c-ibld.c:201 -#: m32r-ibld.c:201 mep-ibld.c:201 mt-ibld.c:201 or1k-ibld.c:201 -#: xc16x-ibld.c:201 xstormy16-ibld.c:201 -#, c-format -msgid "operand out of range (%ld not between %ld and %ld)" -msgstr "operando fora da faixa (%ld não está entre %ld e %ld)" - -#: cgen-asm.c:373 -#, c-format -msgid "operand out of range (%lu not between %lu and %lu)" -msgstr "operando fora da faixa (%lu não está entre %lu e %lu)" - -#: d30v-dis.c:229 -#, c-format -msgid "illegal id (%d)" -msgstr "id ilegal (%d)" - -#: d30v-dis.c:256 -#, c-format -msgid "<unknown register %d>" -msgstr "<registrador %d desconhecido>" - -#. Can't happen. -#: dis-buf.c:61 -#, c-format -msgid "Unknown error %d\n" -msgstr "Erro %d desconhecido\n" - -#: dis-buf.c:70 -#, c-format -msgid "Address 0x%s is out of bounds.\n" -msgstr "Endereço 0x%s está fora dos limites.\n" - -#: epiphany-asm.c:68 -msgid "register unavailable for short instructions" -msgstr "registrador indisponível para instruções curtas" - -#: epiphany-asm.c:115 -msgid "register name used as immediate value" -msgstr "nome do registrador usado como valor imediato" - -#. Don't treat "mov ip,ip" as a move-immediate. -#: epiphany-asm.c:178 epiphany-asm.c:234 -msgid "register source in immediate move" -msgstr "origem de registrador no movimento de imediato" - -#: epiphany-asm.c:187 -msgid "byte relocation unsupported" -msgstr "sem suporte a realocação de byte" - -#. -- assembler routines inserted here. -#. -- asm.c -#: epiphany-asm.c:193 frv-asm.c:972 iq2000-asm.c:56 lm32-asm.c:95 -#: lm32-asm.c:127 lm32-asm.c:157 lm32-asm.c:187 lm32-asm.c:217 lm32-asm.c:247 -#: m32c-asm.c:140 m32c-asm.c:235 m32c-asm.c:276 m32c-asm.c:334 m32c-asm.c:355 -#: m32r-asm.c:53 mep-asm.c:241 mep-asm.c:259 mep-asm.c:274 mep-asm.c:289 -#: mep-asm.c:301 or1k-asm.c:54 -msgid "missing `)'" -msgstr "faltando \")\"" - -#: epiphany-asm.c:270 -msgid "ABORT: unknown operand" -msgstr "ABORTAR: operando desconhecido" - -#: epiphany-asm.c:296 -msgid "Not a pc-relative address." -msgstr "Não é um endereço relativo a pc." - -#: epiphany-asm.c:456 fr30-asm.c:311 frv-asm.c:1264 ip2k-asm.c:512 -#: iq2000-asm.c:460 lm32-asm.c:350 m32c-asm.c:1585 m32r-asm.c:329 -#: mep-asm.c:1288 mt-asm.c:596 or1k-asm.c:512 xc16x-asm.c:377 +#: bpf-asm.c:97 +msgid "expected 16, 32 or 64 in" +msgstr "esperado 16, 32 ou 64 em" + +#: bpf-asm.c:181 epiphany-asm.c:456 fr30-asm.c:311 frv-asm.c:1264 +#: ip2k-asm.c:512 iq2000-asm.c:460 lm32-asm.c:350 m32c-asm.c:1585 +#: m32r-asm.c:329 mep-asm.c:1287 mt-asm.c:596 or1k-asm.c:571 xc16x-asm.c:377 #: xstormy16-asm.c:277 #, c-format msgid "internal error: unrecognized field %d while parsing" msgstr "erro interno: campo %d desconhecido durante análise" -#: epiphany-asm.c:508 fr30-asm.c:363 frv-asm.c:1316 ip2k-asm.c:564 -#: iq2000-asm.c:512 lm32-asm.c:402 m32c-asm.c:1637 m32r-asm.c:381 -#: mep-asm.c:1340 mt-asm.c:648 or1k-asm.c:564 xc16x-asm.c:429 +#: bpf-asm.c:233 epiphany-asm.c:508 fr30-asm.c:363 frv-asm.c:1316 +#: ip2k-asm.c:564 iq2000-asm.c:512 lm32-asm.c:402 m32c-asm.c:1637 +#: m32r-asm.c:381 mep-asm.c:1339 mt-asm.c:648 or1k-asm.c:623 xc16x-asm.c:429 #: xstormy16-asm.c:329 msgid "missing mnemonic in syntax string" msgstr "mnemônico faltando na string de sintaxe" #. We couldn't parse it. -#: epiphany-asm.c:643 epiphany-asm.c:647 epiphany-asm.c:736 epiphany-asm.c:843 -#: fr30-asm.c:498 fr30-asm.c:502 fr30-asm.c:591 fr30-asm.c:698 frv-asm.c:1451 -#: frv-asm.c:1455 frv-asm.c:1544 frv-asm.c:1651 ip2k-asm.c:699 ip2k-asm.c:703 -#: ip2k-asm.c:792 ip2k-asm.c:899 iq2000-asm.c:647 iq2000-asm.c:651 -#: iq2000-asm.c:740 iq2000-asm.c:847 lm32-asm.c:537 lm32-asm.c:541 -#: lm32-asm.c:630 lm32-asm.c:737 m32c-asm.c:1772 m32c-asm.c:1776 -#: m32c-asm.c:1865 m32c-asm.c:1972 m32r-asm.c:516 m32r-asm.c:520 -#: m32r-asm.c:609 m32r-asm.c:716 mep-asm.c:1475 mep-asm.c:1479 mep-asm.c:1568 -#: mep-asm.c:1675 mt-asm.c:783 mt-asm.c:787 mt-asm.c:876 mt-asm.c:983 -#: or1k-asm.c:699 or1k-asm.c:703 or1k-asm.c:792 or1k-asm.c:899 xc16x-asm.c:564 -#: xc16x-asm.c:568 xc16x-asm.c:657 xc16x-asm.c:764 xstormy16-asm.c:464 -#: xstormy16-asm.c:468 xstormy16-asm.c:557 xstormy16-asm.c:664 +#: bpf-asm.c:368 bpf-asm.c:372 bpf-asm.c:461 bpf-asm.c:568 epiphany-asm.c:643 +#: epiphany-asm.c:647 epiphany-asm.c:736 epiphany-asm.c:843 fr30-asm.c:498 +#: fr30-asm.c:502 fr30-asm.c:591 fr30-asm.c:698 frv-asm.c:1451 frv-asm.c:1455 +#: frv-asm.c:1544 frv-asm.c:1651 ip2k-asm.c:699 ip2k-asm.c:703 ip2k-asm.c:792 +#: ip2k-asm.c:899 iq2000-asm.c:647 iq2000-asm.c:651 iq2000-asm.c:740 +#: iq2000-asm.c:847 lm32-asm.c:537 lm32-asm.c:541 lm32-asm.c:630 +#: lm32-asm.c:737 m32c-asm.c:1772 m32c-asm.c:1776 m32c-asm.c:1865 +#: m32c-asm.c:1972 m32r-asm.c:516 m32r-asm.c:520 m32r-asm.c:609 m32r-asm.c:716 +#: mep-asm.c:1474 mep-asm.c:1478 mep-asm.c:1567 mep-asm.c:1674 mt-asm.c:783 +#: mt-asm.c:787 mt-asm.c:876 mt-asm.c:983 or1k-asm.c:758 or1k-asm.c:762 +#: or1k-asm.c:851 or1k-asm.c:958 xc16x-asm.c:564 xc16x-asm.c:568 +#: xc16x-asm.c:657 xc16x-asm.c:764 xstormy16-asm.c:464 xstormy16-asm.c:468 +#: xstormy16-asm.c:557 xstormy16-asm.c:664 msgid "unrecognized instruction" msgstr "instrução não reconhecida" -#: epiphany-asm.c:690 fr30-asm.c:545 frv-asm.c:1498 ip2k-asm.c:746 -#: iq2000-asm.c:694 lm32-asm.c:584 m32c-asm.c:1819 m32r-asm.c:563 -#: mep-asm.c:1522 mt-asm.c:830 or1k-asm.c:746 xc16x-asm.c:611 +#: bpf-asm.c:415 epiphany-asm.c:690 fr30-asm.c:545 frv-asm.c:1498 +#: ip2k-asm.c:746 iq2000-asm.c:694 lm32-asm.c:584 m32c-asm.c:1819 +#: m32r-asm.c:563 mep-asm.c:1521 mt-asm.c:830 or1k-asm.c:805 xc16x-asm.c:611 #: xstormy16-asm.c:511 #, c-format msgid "syntax error (expected char `%c', found `%c')" msgstr "erro de sintaxe (esperado caractere \"%c\", encontrado \"%c\")" -#: epiphany-asm.c:700 fr30-asm.c:555 frv-asm.c:1508 ip2k-asm.c:756 -#: iq2000-asm.c:704 lm32-asm.c:594 m32c-asm.c:1829 m32r-asm.c:573 -#: mep-asm.c:1532 mt-asm.c:840 or1k-asm.c:756 xc16x-asm.c:621 +#: bpf-asm.c:425 epiphany-asm.c:700 fr30-asm.c:555 frv-asm.c:1508 +#: ip2k-asm.c:756 iq2000-asm.c:704 lm32-asm.c:594 m32c-asm.c:1829 +#: m32r-asm.c:573 mep-asm.c:1531 mt-asm.c:840 or1k-asm.c:815 xc16x-asm.c:621 #: xstormy16-asm.c:521 #, c-format msgid "syntax error (expected char `%c', found end of instruction)" msgstr "erro de sintaxe (esperado caractere \"%c\", encontrado fim de instrução)" -#: epiphany-asm.c:730 fr30-asm.c:585 frv-asm.c:1538 ip2k-asm.c:786 -#: iq2000-asm.c:734 lm32-asm.c:624 m32c-asm.c:1859 m32r-asm.c:603 -#: mep-asm.c:1562 mt-asm.c:870 or1k-asm.c:786 xc16x-asm.c:651 +#: bpf-asm.c:455 epiphany-asm.c:730 fr30-asm.c:585 frv-asm.c:1538 +#: ip2k-asm.c:786 iq2000-asm.c:734 lm32-asm.c:624 m32c-asm.c:1859 +#: m32r-asm.c:603 mep-asm.c:1561 mt-asm.c:870 or1k-asm.c:845 xc16x-asm.c:651 #: xstormy16-asm.c:551 msgid "junk at end of line" msgstr "lixo no fim da linha" -#: epiphany-asm.c:842 fr30-asm.c:697 frv-asm.c:1650 ip2k-asm.c:898 -#: iq2000-asm.c:846 lm32-asm.c:736 m32c-asm.c:1971 m32r-asm.c:715 -#: mep-asm.c:1674 mt-asm.c:982 or1k-asm.c:898 xc16x-asm.c:763 +#: bpf-asm.c:567 epiphany-asm.c:842 fr30-asm.c:697 frv-asm.c:1650 +#: ip2k-asm.c:898 iq2000-asm.c:846 lm32-asm.c:736 m32c-asm.c:1971 +#: m32r-asm.c:715 mep-asm.c:1673 mt-asm.c:982 or1k-asm.c:957 xc16x-asm.c:763 #: xstormy16-asm.c:663 msgid "unrecognized form of instruction" msgstr "forma de instrução não reconhecida" -#: epiphany-asm.c:856 fr30-asm.c:711 frv-asm.c:1664 ip2k-asm.c:912 -#: iq2000-asm.c:860 lm32-asm.c:750 m32c-asm.c:1985 m32r-asm.c:729 -#: mep-asm.c:1688 mt-asm.c:996 or1k-asm.c:912 xc16x-asm.c:777 +#: bpf-asm.c:581 epiphany-asm.c:856 fr30-asm.c:711 frv-asm.c:1664 +#: ip2k-asm.c:912 iq2000-asm.c:860 lm32-asm.c:750 m32c-asm.c:1985 +#: m32r-asm.c:729 mep-asm.c:1687 mt-asm.c:996 or1k-asm.c:971 xc16x-asm.c:777 #: xstormy16-asm.c:677 #, c-format msgid "bad instruction `%.50s...'" msgstr "instrução \"%.50s…\" errada" -#: epiphany-asm.c:859 fr30-asm.c:714 frv-asm.c:1667 ip2k-asm.c:915 -#: iq2000-asm.c:863 lm32-asm.c:753 m32c-asm.c:1988 m32r-asm.c:732 -#: mep-asm.c:1691 mt-asm.c:999 or1k-asm.c:915 xc16x-asm.c:780 +#: bpf-asm.c:584 epiphany-asm.c:859 fr30-asm.c:714 frv-asm.c:1667 +#: ip2k-asm.c:915 iq2000-asm.c:863 lm32-asm.c:753 m32c-asm.c:1988 +#: m32r-asm.c:732 mep-asm.c:1690 mt-asm.c:999 or1k-asm.c:974 xc16x-asm.c:780 #: xstormy16-asm.c:680 #, c-format msgid "bad instruction `%.50s'" msgstr "instrução \"%.50s\" errada" -#: epiphany-desc.c:2109 +#: bpf-desc.c:1671 #, c-format -msgid "internal error: epiphany_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" -msgstr "erro interno: epiphany_cgen_rebuild_tables: valores de insn-chunk-bitsize conflitantes: \"%d\" vs. \"%d\"" +msgid "internal error: bpf_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" +msgstr "erro interno: bpf_cgen_rebuild_tables: valores de insn-chunk-bitsize conflitantes: \"%d\" vs. \"%d\"" -#: epiphany-desc.c:2192 +#: bpf-desc.c:1759 #, c-format -msgid "internal error: epiphany_cgen_cpu_open: unsupported argument `%d'" -msgstr "erro interno: epiphany_cgen_cpu_open: sem suporte ao argumento \"%d\"" +msgid "internal error: bpf_cgen_cpu_open: unsupported argument `%d'" +msgstr "erro interno: bpf_cgen_cpu_open: sem suporte ao argumento \"%d\"" -#: epiphany-desc.c:2211 +#: bpf-desc.c:1778 #, c-format -msgid "internal error: epiphany_cgen_cpu_open: no endianness specified" -msgstr "erro interno: epiphany_cgen_cpu_open: nenhuma extremidade especificada" +msgid "internal error: bpf_cgen_cpu_open: no endianness specified" +msgstr "erro interno: bpf_cgen_cpu_open: nenhuma extremidade especificada" #. Default text to print if an instruction isn't recognized. -#: epiphany-dis.c:41 fr30-dis.c:41 frv-dis.c:41 ip2k-dis.c:41 iq2000-dis.c:41 -#: lm32-dis.c:41 m32c-dis.c:41 m32r-dis.c:41 mep-dis.c:41 mmix-dis.c:275 -#: mt-dis.c:41 nds32-dis.c:64 or1k-dis.c:41 xc16x-dis.c:41 xstormy16-dis.c:41 +#: bpf-dis.c:41 epiphany-dis.c:41 fr30-dis.c:41 frv-dis.c:41 ip2k-dis.c:41 +#: iq2000-dis.c:41 lm32-dis.c:41 m32c-dis.c:41 m32r-dis.c:41 mep-dis.c:41 +#: mmix-dis.c:293 mt-dis.c:41 nds32-dis.c:64 or1k-dis.c:41 xc16x-dis.c:41 +#: xstormy16-dis.c:41 msgid "*unknown*" msgstr "*desconhecida*" -#: epiphany-dis.c:279 fr30-dis.c:300 frv-dis.c:397 ip2k-dis.c:289 -#: iq2000-dis.c:190 lm32-dis.c:148 m32c-dis.c:892 m32r-dis.c:280 -#: mep-dis.c:1188 mt-dis.c:291 or1k-dis.c:145 xc16x-dis.c:421 +#: bpf-dis.c:203 epiphany-dis.c:279 fr30-dis.c:300 frv-dis.c:397 +#: ip2k-dis.c:289 iq2000-dis.c:190 lm32-dis.c:148 m32c-dis.c:892 +#: m32r-dis.c:280 mep-dis.c:1188 mt-dis.c:291 or1k-dis.c:175 xc16x-dis.c:421 #: xstormy16-dis.c:169 #, c-format msgid "internal error: unrecognized field %d while printing insn" msgstr "erro interno: campo %d desconhecido ao imprimir insn" -#: epiphany-ibld.c:164 fr30-ibld.c:164 frv-ibld.c:164 ip2k-ibld.c:164 -#: iq2000-ibld.c:164 lm32-ibld.c:164 m32c-ibld.c:164 m32r-ibld.c:164 -#: mep-ibld.c:164 mt-ibld.c:164 or1k-ibld.c:164 xc16x-ibld.c:164 -#: xstormy16-ibld.c:164 +#: bpf-ibld.c:164 epiphany-ibld.c:164 fr30-ibld.c:164 frv-ibld.c:164 +#: ip2k-ibld.c:164 iq2000-ibld.c:164 lm32-ibld.c:164 m32c-ibld.c:164 +#: m32r-ibld.c:164 mep-ibld.c:164 mt-ibld.c:164 or1k-ibld.c:164 +#: xc16x-ibld.c:164 xstormy16-ibld.c:164 #, c-format msgid "operand out of range (%ld not between %ld and %lu)" msgstr "operando fora da faixa (%ld não está entre %ld e %lu)" -#: epiphany-ibld.c:185 fr30-ibld.c:185 frv-ibld.c:185 ip2k-ibld.c:185 -#: iq2000-ibld.c:185 lm32-ibld.c:185 m32c-ibld.c:185 m32r-ibld.c:185 -#: mep-ibld.c:185 mt-ibld.c:185 or1k-ibld.c:185 xc16x-ibld.c:185 -#: xstormy16-ibld.c:185 +#: bpf-ibld.c:185 epiphany-ibld.c:185 fr30-ibld.c:185 frv-ibld.c:185 +#: ip2k-ibld.c:185 iq2000-ibld.c:185 lm32-ibld.c:185 m32c-ibld.c:185 +#: m32r-ibld.c:185 mep-ibld.c:185 mt-ibld.c:185 or1k-ibld.c:185 +#: xc16x-ibld.c:185 xstormy16-ibld.c:185 #, c-format msgid "operand out of range (0x%lx not between 0 and 0x%lx)" msgstr "operando fora da faixa (0x%lx não está entre 0 e 0x%lx)" -#: epiphany-ibld.c:880 fr30-ibld.c:735 frv-ibld.c:861 ip2k-ibld.c:612 -#: iq2000-ibld.c:718 lm32-ibld.c:639 m32c-ibld.c:1736 m32r-ibld.c:670 -#: mep-ibld.c:1213 mt-ibld.c:754 or1k-ibld.c:658 xc16x-ibld.c:757 -#: xstormy16-ibld.c:683 +#: bpf-ibld.c:201 cgen-asm.c:351 epiphany-ibld.c:201 fr30-ibld.c:201 +#: frv-ibld.c:201 ip2k-ibld.c:201 iq2000-ibld.c:201 lm32-ibld.c:201 +#: m32c-ibld.c:201 m32r-ibld.c:201 mep-ibld.c:201 mt-ibld.c:201 +#: or1k-ibld.c:201 xc16x-ibld.c:201 xstormy16-ibld.c:201 +#, c-format +msgid "operand out of range (%ld not between %ld and %ld)" +msgstr "operando fora da faixa (%ld não está entre %ld e %ld)" + +#: bpf-ibld.c:628 epiphany-ibld.c:883 fr30-ibld.c:738 frv-ibld.c:864 +#: ip2k-ibld.c:615 iq2000-ibld.c:721 lm32-ibld.c:642 m32c-ibld.c:1739 +#: m32r-ibld.c:673 mep-ibld.c:1216 mt-ibld.c:757 or1k-ibld.c:736 +#: xc16x-ibld.c:760 xstormy16-ibld.c:686 #, c-format msgid "internal error: unrecognized field %d while building insn" msgstr "erro interno: campo %d desconhecido ao compilar insn" -#: epiphany-ibld.c:1175 fr30-ibld.c:941 frv-ibld.c:1179 ip2k-ibld.c:688 -#: iq2000-ibld.c:894 lm32-ibld.c:744 m32c-ibld.c:2898 m32r-ibld.c:808 -#: mep-ibld.c:1813 mt-ibld.c:975 or1k-ibld.c:772 xc16x-ibld.c:978 -#: xstormy16-ibld.c:830 +#: bpf-ibld.c:712 epiphany-ibld.c:1178 fr30-ibld.c:944 frv-ibld.c:1182 +#: ip2k-ibld.c:691 iq2000-ibld.c:897 lm32-ibld.c:747 m32c-ibld.c:2901 +#: m32r-ibld.c:811 mep-ibld.c:1816 mt-ibld.c:978 or1k-ibld.c:895 +#: xc16x-ibld.c:981 xstormy16-ibld.c:833 #, c-format msgid "internal error: unrecognized field %d while decoding insn" msgstr "erro interno: campo %d desconhecido ao decodificar insn" -#: epiphany-ibld.c:1319 fr30-ibld.c:1088 frv-ibld.c:1458 ip2k-ibld.c:763 -#: iq2000-ibld.c:1026 lm32-ibld.c:834 m32c-ibld.c:3516 m32r-ibld.c:922 -#: mep-ibld.c:2284 mt-ibld.c:1176 or1k-ibld.c:859 xc16x-ibld.c:1200 -#: xstormy16-ibld.c:941 +#: bpf-ibld.c:781 epiphany-ibld.c:1322 fr30-ibld.c:1091 frv-ibld.c:1461 +#: ip2k-ibld.c:766 iq2000-ibld.c:1029 lm32-ibld.c:837 m32c-ibld.c:3519 +#: m32r-ibld.c:925 mep-ibld.c:2287 mt-ibld.c:1179 or1k-ibld.c:991 +#: xc16x-ibld.c:1203 xstormy16-ibld.c:944 #, c-format msgid "internal error: unrecognized field %d while getting int operand" msgstr "erro interno: campo %d desconhecido ao obter operando int" -#: epiphany-ibld.c:1445 fr30-ibld.c:1217 frv-ibld.c:1719 ip2k-ibld.c:820 -#: iq2000-ibld.c:1140 lm32-ibld.c:906 m32c-ibld.c:4116 m32r-ibld.c:1018 -#: mep-ibld.c:2737 mt-ibld.c:1359 or1k-ibld.c:928 xc16x-ibld.c:1404 -#: xstormy16-ibld.c:1034 +#: bpf-ibld.c:832 epiphany-ibld.c:1448 fr30-ibld.c:1220 frv-ibld.c:1722 +#: ip2k-ibld.c:823 iq2000-ibld.c:1143 lm32-ibld.c:909 m32c-ibld.c:4119 +#: m32r-ibld.c:1021 mep-ibld.c:2740 mt-ibld.c:1362 or1k-ibld.c:1069 +#: xc16x-ibld.c:1407 xstormy16-ibld.c:1037 #, c-format msgid "internal error: unrecognized field %d while getting vma operand" msgstr "erro interno: campo %d desconhecido ao obter operando vma" -#: epiphany-ibld.c:1578 fr30-ibld.c:1349 frv-ibld.c:1987 ip2k-ibld.c:880 -#: iq2000-ibld.c:1261 lm32-ibld.c:985 m32c-ibld.c:4704 m32r-ibld.c:1120 -#: mep-ibld.c:3151 mt-ibld.c:1549 or1k-ibld.c:1004 xc16x-ibld.c:1609 -#: xstormy16-ibld.c:1134 +#: bpf-ibld.c:890 epiphany-ibld.c:1581 fr30-ibld.c:1352 frv-ibld.c:1990 +#: ip2k-ibld.c:883 iq2000-ibld.c:1264 lm32-ibld.c:988 m32c-ibld.c:4707 +#: m32r-ibld.c:1123 mep-ibld.c:3154 mt-ibld.c:1552 or1k-ibld.c:1154 +#: xc16x-ibld.c:1612 xstormy16-ibld.c:1137 #, c-format msgid "internal error: unrecognized field %d while setting int operand" msgstr "erro interno: campo %d desconhecido ao definir operando int" -#: epiphany-ibld.c:1701 fr30-ibld.c:1471 frv-ibld.c:2245 ip2k-ibld.c:930 -#: iq2000-ibld.c:1372 lm32-ibld.c:1054 m32c-ibld.c:5282 m32r-ibld.c:1212 -#: mep-ibld.c:3555 mt-ibld.c:1729 or1k-ibld.c:1070 xc16x-ibld.c:1804 -#: xstormy16-ibld.c:1224 +#: bpf-ibld.c:938 epiphany-ibld.c:1704 fr30-ibld.c:1474 frv-ibld.c:2248 +#: ip2k-ibld.c:933 iq2000-ibld.c:1375 lm32-ibld.c:1057 m32c-ibld.c:5285 +#: m32r-ibld.c:1215 mep-ibld.c:3558 mt-ibld.c:1732 or1k-ibld.c:1229 +#: xc16x-ibld.c:1807 xstormy16-ibld.c:1227 #, c-format msgid "internal error: unrecognized field %d while setting vma operand" msgstr "erro interno: campo %d desconhecido ao definir operando vma" +#: cgen-asm.c:373 +#, c-format +msgid "operand out of range (%lu not between %lu and %lu)" +msgstr "operando fora da faixa (%lu não está entre %lu e %lu)" + +#: d30v-dis.c:232 +#, c-format +msgid "illegal id (%d)" +msgstr "id ilegal (%d)" + +#: d30v-dis.c:259 +#, c-format +msgid "<unknown register %d>" +msgstr "<registrador %d desconhecido>" + +#. Can't happen. +#: dis-buf.c:61 +#, c-format +msgid "Unknown error %d\n" +msgstr "Erro %d desconhecido\n" + +#: dis-buf.c:70 +#, c-format +msgid "Address 0x%s is out of bounds.\n" +msgstr "Endereço 0x%s está fora dos limites.\n" + +#: disassemble.c:840 +#, c-format +msgid "assertion fail %s:%d" +msgstr "falha de asserção em %s:%d" + +#: disassemble.c:841 +msgid "Please report this bug" +msgstr "Por favor, relate este erro" + +#: epiphany-asm.c:68 +msgid "register unavailable for short instructions" +msgstr "registrador indisponível para instruções curtas" + +#: epiphany-asm.c:115 +msgid "register name used as immediate value" +msgstr "nome do registrador usado como valor imediato" + +#. Don't treat "mov ip,ip" as a move-immediate. +#: epiphany-asm.c:178 epiphany-asm.c:234 +msgid "register source in immediate move" +msgstr "origem de registrador no movimento de imediato" + +#: epiphany-asm.c:187 +msgid "byte relocation unsupported" +msgstr "sem suporte a realocação de byte" + +#. -- assembler routines inserted here. +#. -- asm.c +#: epiphany-asm.c:193 frv-asm.c:972 iq2000-asm.c:56 lm32-asm.c:95 +#: lm32-asm.c:127 lm32-asm.c:157 lm32-asm.c:187 lm32-asm.c:217 lm32-asm.c:247 +#: m32c-asm.c:140 m32c-asm.c:235 m32c-asm.c:276 m32c-asm.c:334 m32c-asm.c:355 +#: m32r-asm.c:53 mep-asm.c:241 mep-asm.c:259 mep-asm.c:274 mep-asm.c:289 +#: mep-asm.c:301 or1k-asm.c:54 +msgid "missing `)'" +msgstr "faltando \")\"" + +#: epiphany-asm.c:270 +msgid "ABORT: unknown operand" +msgstr "ABORTAR: operando desconhecido" + +#: epiphany-asm.c:296 +msgid "Not a pc-relative address." +msgstr "Não é um endereço relativo a pc." + +#: epiphany-desc.c:2109 +#, c-format +msgid "internal error: epiphany_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" +msgstr "erro interno: epiphany_cgen_rebuild_tables: valores de insn-chunk-bitsize conflitantes: \"%d\" vs. \"%d\"" + +#: epiphany-desc.c:2197 +#, c-format +msgid "internal error: epiphany_cgen_cpu_open: unsupported argument `%d'" +msgstr "erro interno: epiphany_cgen_cpu_open: sem suporte ao argumento \"%d\"" + +#: epiphany-desc.c:2216 +#, c-format +msgid "internal error: epiphany_cgen_cpu_open: no endianness specified" +msgstr "erro interno: epiphany_cgen_cpu_open: nenhuma extremidade especificada" + #: fr30-asm.c:93 m32c-asm.c:872 m32c-asm.c:879 msgid "Register number is not valid" msgstr "Número de registrador não é válido" @@ -916,12 +974,12 @@ msgid "internal error: fr30_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" msgstr "erro interno: fr30_cgen_rebuild_tables: valores de insn-chunk-bitsize conflitantes: \"%d\" vs. \"%d\"" -#: fr30-desc.c:1669 +#: fr30-desc.c:1674 #, c-format msgid "internal error: fr30_cgen_cpu_open: unsupported argument `%d'" msgstr "erro interno: fr30_cgen_cpu_open: sem suporte ao argumento \"%d\"" -#: fr30-desc.c:1688 +#: fr30-desc.c:1693 #, c-format msgid "internal error: fr30_cgen_cpu_open: no endianness specified" msgstr "erro interno: fr30_cgen_cpu_open: nenhuma extremidade especificada" @@ -947,12 +1005,12 @@ msgid "internal error: frv_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" msgstr "erro interno: frv_cgen_rebuild_tables: valores de insn-chunk-bitsize conflitantes: \"%d\" vs. \"%d\"" -#: frv-desc.c:6409 +#: frv-desc.c:6414 #, c-format msgid "internal error: frv_cgen_cpu_open: unsupported argument `%d'" msgstr "erro interno: frv_cgen_cpu_open: sem suporte ao argumento \"%d\"" -#: frv-desc.c:6428 +#: frv-desc.c:6433 #, c-format msgid "internal error: frv_cgen_cpu_open: no endianness specified" msgstr "erro interno: frv_cgen_cpu_open: nenhuma extremidade especificada" @@ -972,26 +1030,21 @@ msgid "internal error: bad insn unit" msgstr "erro interno: unidade insn inválida" -#: h8300-dis.c:63 -#, c-format -msgid "internal error, h8_disassemble_init" -msgstr "erro interno, h8_disassemble_init" - -#: h8300-dis.c:314 +#: h8300-dis.c:309 #, c-format msgid "Hmmmm 0x%x" msgstr "Hmmmm 0x%x" -#: h8300-dis.c:691 +#: h8300-dis.c:617 #, c-format msgid "Don't understand 0x%x \n" msgstr "Não entendo 0x%x \n" -#: i386-dis.c:11058 +#: i386-dis.c:11040 msgid "<internal disassembler error>" msgstr "<erro interno do desmontador>" -#: i386-dis.c:11353 +#: i386-dis.c:11337 #, c-format msgid "" "\n" @@ -1002,32 +1055,32 @@ "As opções do desmontador específicas para i386/x86-64 a seguir não têm suporte\n" "ao uso com a opção -M (opções múltiplas devem ser separadas por vírgulas):\n" -#: i386-dis.c:11357 +#: i386-dis.c:11341 #, c-format msgid " x86-64 Disassemble in 64bit mode\n" msgstr " x86-64 Desmonta no modo 64bit\n" -#: i386-dis.c:11358 +#: i386-dis.c:11342 #, c-format msgid " i386 Disassemble in 32bit mode\n" msgstr " i386 Desmonta no modo 32bit\n" -#: i386-dis.c:11359 +#: i386-dis.c:11343 #, c-format msgid " i8086 Disassemble in 16bit mode\n" msgstr " i8086 Desmonta no modo 16bit\n" -#: i386-dis.c:11360 +#: i386-dis.c:11344 #, c-format msgid " att Display instruction in AT&T syntax\n" msgstr " att Exibe instrução na sintaxe AT&T\n" -#: i386-dis.c:11361 +#: i386-dis.c:11345 #, c-format msgid " intel Display instruction in Intel syntax\n" msgstr " intel Exibe instrução na sintaxe Intel\n" -#: i386-dis.c:11362 +#: i386-dis.c:11346 #, c-format msgid "" " att-mnemonic\n" @@ -1036,7 +1089,7 @@ " att-mnemonic\n" " Exibe instrução em mnemônico AT&T\n" -#: i386-dis.c:11364 +#: i386-dis.c:11348 #, c-format msgid "" " intel-mnemonic\n" @@ -1045,106 +1098,106 @@ " intel-mnemonic\n" " Exibe instrução na mnemônico Intel\n" -#: i386-dis.c:11366 +#: i386-dis.c:11350 #, c-format msgid " addr64 Assume 64bit address size\n" msgstr " addr64 Presume tamanho de endereço de 64bit\n" -#: i386-dis.c:11367 +#: i386-dis.c:11351 #, c-format msgid " addr32 Assume 32bit address size\n" msgstr " addr32 Presume tamanho de endereço de 32bit\n" -#: i386-dis.c:11368 +#: i386-dis.c:11352 #, c-format msgid " addr16 Assume 16bit address size\n" msgstr " addr16 Presume tamanho de endereço de 16bit\n" -#: i386-dis.c:11369 +#: i386-dis.c:11353 #, c-format msgid " data32 Assume 32bit data size\n" msgstr " data32 Presume tamanho de dados de 32bit\n" -#: i386-dis.c:11370 +#: i386-dis.c:11354 #, c-format msgid " data16 Assume 16bit data size\n" msgstr " data16 Presume tamanho de dados de 16bit\n" -#: i386-dis.c:11371 +#: i386-dis.c:11355 #, c-format msgid " suffix Always display instruction suffix in AT&T syntax\n" msgstr " suffix Sempre exibe sufixo da instrução na sintaxe AT&T\n" -#: i386-dis.c:11372 +#: i386-dis.c:11356 #, c-format msgid " amd64 Display instruction in AMD64 ISA\n" msgstr " amd64 Exibe instrução em AMD64 ISA\n" -#: i386-dis.c:11373 +#: i386-dis.c:11357 #, c-format msgid " intel64 Display instruction in Intel64 ISA\n" msgstr " intel64 Exibe instrução em Intel64 ISA\n" -#: i386-dis.c:11936 +#: i386-dis.c:11912 msgid "64-bit address is disabled" msgstr "endereço de 64 bits está desabilitado" -#: i386-gen.c:732 +#: i386-gen.c:793 #, c-format msgid "%s: error: " msgstr "%s: erro: " -#: i386-gen.c:911 +#: i386-gen.c:960 #, c-format msgid "%s: %d: unknown bitfield: %s\n" msgstr "%s: %d: bitfield desconhecido: %s\n" -#: i386-gen.c:913 +#: i386-gen.c:962 #, c-format msgid "unknown bitfield: %s\n" msgstr "bitfield desconhecido: %s\n" -#: i386-gen.c:976 +#: i386-gen.c:1025 #, c-format msgid "%s: %d: missing `)' in bitfield: %s\n" msgstr "%s: %d: faltando \")\" em bitfield: %s\n" -#: i386-gen.c:1077 +#: i386-gen.c:1126 #, c-format msgid "unknown broadcast operand: %s\n" msgstr "operando de transmissão desconhecido: %s\n" -#: i386-gen.c:1478 +#: i386-gen.c:1777 #, c-format msgid "can't find i386-reg.tbl for reading, errno = %s\n" msgstr "não foi possível localizar i386-reg.tbl para leitura, errno = %s\n" -#: i386-gen.c:1556 +#: i386-gen.c:1855 #, c-format msgid "can't create i386-init.h, errno = %s\n" msgstr "não foi possível criar i386-init.h, errno = %s\n" -#: i386-gen.c:1646 ia64-gen.c:2829 +#: i386-gen.c:1945 ia64-gen.c:2829 #, c-format msgid "unable to change directory to \"%s\", errno = %s\n" msgstr "não foi possível alterar diretório para \"%s\", errno = %s\n" -#: i386-gen.c:1658 i386-gen.c:1661 +#: i386-gen.c:1959 i386-gen.c:1964 #, c-format msgid "CpuMax != %d!\n" msgstr "CpuMax != %d!\n" -#: i386-gen.c:1665 +#: i386-gen.c:1968 #, c-format msgid "%d unused bits in i386_cpu_flags.\n" msgstr "%d bits não usados em i386_cpu_flags.\n" -#: i386-gen.c:1672 +#: i386-gen.c:1983 #, c-format msgid "%d unused bits in i386_operand_type.\n" msgstr "%d bits não usados em i386_operand_type.\n" -#: i386-gen.c:1686 +#: i386-gen.c:1997 #, c-format msgid "can't create i386-tbl.h, errno = %s\n" msgstr "não foi possível criar i386-tbl.h, errno = %s\n" @@ -1314,12 +1367,12 @@ msgid "internal error: ip2k_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" msgstr "erro interno: ip2k_cgen_rebuild_tables: valores de insn-chunk-bitsize conflitantes: \"%d\" vs. \"%d\"" -#: ip2k-desc.c:1098 +#: ip2k-desc.c:1103 #, c-format msgid "internal error: ip2k_cgen_cpu_open: unsupported argument `%d'" msgstr "erro interno: ip2k_cgen_cpu_open: sem suporte ao argumento \"%d\"" -#: ip2k-desc.c:1117 +#: ip2k-desc.c:1122 #, c-format msgid "internal error: ip2k_cgen_cpu_open: no endianness specified" msgstr "erro interno: ip2k_cgen_cpu_open: nenhuma extremidade especificada" @@ -1341,12 +1394,12 @@ msgid "internal error: iq2000_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" msgstr "erro interno: iq2000_cgen_rebuild_tables: valores de insn-chunk-bitsize conflitantes: \"%d\" vs. \"%d\"" -#: iq2000-desc.c:2103 +#: iq2000-desc.c:2108 #, c-format msgid "internal error: iq2000_cgen_cpu_open: unsupported argument `%d'" msgstr "erro interno: iq2000_cgen_cpu_open: sem suporte ao argumento \"%d\"" -#: iq2000-desc.c:2122 +#: iq2000-desc.c:2127 #, c-format msgid "internal error: iq2000_cgen_cpu_open: no endianness specified" msgstr "erro interno: iq2000_cgen_cpu_open: nenhuma extremidade especificada" @@ -1372,22 +1425,22 @@ msgid "internal error: lm32_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" msgstr "erro interno: lm32_cgen_rebuild_tables: valores de insn-chunk-bitsize conflitantes: \"%d\" vs. \"%d\"" -#: lm32-desc.c:1085 +#: lm32-desc.c:1090 #, c-format msgid "internal error: lm32_cgen_cpu_open: unsupported argument `%d'" msgstr "erro interno: lm32_cgen_cpu_open: sem suporte ao argumento \"%d\"" -#: lm32-desc.c:1104 +#: lm32-desc.c:1109 #, c-format msgid "internal error: lm32_cgen_cpu_open: no endianness specified" msgstr "erro interno: lm32_cgen_cpu_open: nenhuma extremidade especificada" -#: m10200-dis.c:157 m10300-dis.c:580 +#: m10200-dis.c:151 m10300-dis.c:574 #, c-format msgid "unknown\t0x%04lx" msgstr "desconhecido\t0x%04lx" -#: m10200-dis.c:327 +#: m10200-dis.c:321 #, c-format msgid "unknown\t0x%02lx" msgstr "desconhecido\t0x%02lx" @@ -1471,12 +1524,12 @@ msgid "internal error: m32c_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" msgstr "erro interno: m32c_cgen_rebuild_tables: valores de insn-chunk-bitsize conflitantes: \"%d\" vs. \"%d\"" -#: m32c-desc.c:63116 +#: m32c-desc.c:63121 #, c-format msgid "internal error: m32c_cgen_cpu_open: unsupported argument `%d'" msgstr "erro interno: m32c_cgen_cpu_open: sem suporte ao argumento \"%d\"" -#: m32c-desc.c:63135 +#: m32c-desc.c:63140 #, c-format msgid "internal error: m32c_cgen_cpu_open: no endianness specified" msgstr "erro interno: m32c_cgen_cpu_open: nenhuma extremidade especificada" @@ -1486,22 +1539,22 @@ msgid "internal error: m32r_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" msgstr "erro interno: m32r_cgen_rebuild_tables: valores de insn-chunk-bitsize conflitantes: \"%d\" vs. \"%d\"" -#: m32r-desc.c:1448 +#: m32r-desc.c:1453 #, c-format msgid "internal error: m32r_cgen_cpu_open: unsupported argument `%d'" msgstr "erro interno: m32r_cgen_cpu_open: sem suporte ao argumento \"%d\"" -#: m32r-desc.c:1467 +#: m32r-desc.c:1472 #, c-format msgid "internal error: m32r_cgen_cpu_open: no endianness specified" msgstr "erro interno: m32r_cgen_cpu_open: nenhuma extremidade especificada" -#: m68k-dis.c:1292 +#: m68k-dis.c:1294 #, c-format msgid "<function code %d>" msgstr "<código de função %d>" -#: m68k-dis.c:1455 +#: m68k-dis.c:1457 #, c-format msgid "<internal error in opcode table: %s %s>\n" msgstr "<erro interno na tabela de códigos de operação: %s %s>\n" @@ -1544,34 +1597,34 @@ msgid "internal error: mep_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" msgstr "erro interno: mep_cgen_rebuild_tables: valores de insn-chunk-bitsize conflitantes: \"%d\" vs. \"%d\"" -#: mep-desc.c:6309 +#: mep-desc.c:6314 #, c-format msgid "internal error: mep_cgen_cpu_open: unsupported argument `%d'" msgstr "erro interno: mep_cgen_cpu_open: sem suporte ao argumento \"%d\"" -#: mep-desc.c:6328 +#: mep-desc.c:6333 #, c-format msgid "internal error: mep_cgen_cpu_open: no endianness specified" msgstr "erro interno: mep_cgen_cpu_open: nenhuma extremidade especificada" -#: mips-dis.c:1800 mips-dis.c:2026 +#: mips-dis.c:1805 mips-dis.c:2031 #, c-format msgid "# internal error, undefined operand in `%s %s'" msgstr "# erro interno, operando indefinido em \"%s %s\"" -#: mips-dis.c:2615 +#: mips-dis.c:2620 msgid "Use canonical instruction forms.\n" msgstr "Usa formas de instrução canônicas.\n" -#: mips-dis.c:2617 +#: mips-dis.c:2622 msgid "Recognize MSA instructions.\n" msgstr "Reconhece instruções MSA.\n" -#: mips-dis.c:2619 +#: mips-dis.c:2624 msgid "Recognize the virtualization ASE instructions.\n" msgstr "Reconhece as instruções ASE de virtualização.\n" -#: mips-dis.c:2621 +#: mips-dis.c:2626 msgid "" "Recognize the eXtended Physical Address (XPA) ASE\n" " instructions.\n" @@ -1579,27 +1632,27 @@ "Reconhece as instruções ASE de eXtended Physical\n" " Address (XPA).\n" -#: mips-dis.c:2624 +#: mips-dis.c:2629 msgid "Recognize the Global INValidate (GINV) ASE instructions.\n" msgstr "Reconhece as instruções ASE de Global INValidate (GINV).\n" -#: mips-dis.c:2628 +#: mips-dis.c:2633 msgid "Recognize the Loongson MultiMedia extensions Instructions (MMI) ASE instructions.\n" msgstr "Reconhece as instruções ASE de Loongson MultiMedia extensions Instructions (MMI).\n" -#: mips-dis.c:2632 +#: mips-dis.c:2637 msgid "Recognize the Loongson Content Address Memory (CAM) instructions.\n" msgstr "Reconhece as instruções de Loongson Content Address Memory (CAM).\n" -#: mips-dis.c:2636 +#: mips-dis.c:2641 msgid "Recognize the Loongson EXTensions (EXT) instructions.\n" msgstr "Reconhece as instruções de Loongson EXTensions (EXT).\n" -#: mips-dis.c:2640 +#: mips-dis.c:2645 msgid "Recognize the Loongson EXTensions R2 (EXT2) instructions.\n" msgstr "Reconhece as instruções de Loongson EXTensions R2 (EXT).\n" -#: mips-dis.c:2643 +#: mips-dis.c:2648 msgid "" "Print GPR names according to specified ABI.\n" " Default: based on binary being disassembled.\n" @@ -1607,7 +1660,7 @@ "Emite nomes GPR conforme a ABI especificada.\n" " Padrão: baseado no binário sendo desmontado.\n" -#: mips-dis.c:2646 +#: mips-dis.c:2651 msgid "" "Print FPR names according to specified ABI.\n" " Default: numeric.\n" @@ -1615,7 +1668,7 @@ "Emite nomes FPR conforme a ABI especificada.\n" " Padrão: numérico.\n" -#: mips-dis.c:2649 +#: mips-dis.c:2654 msgid "" "Print CP0 register names according to specified architecture.\n" " Default: based on binary being disassembled.\n" @@ -1623,7 +1676,7 @@ "Emite nomes de registrador CP0 conforme a arquitetura dada.\n" " Padrão: baseado no binário sendo desmontado.\n" -#: mips-dis.c:2653 +#: mips-dis.c:2658 msgid "" "Print HWR names according to specified architecture.\n" " Default: based on binary being disassembled.\n" @@ -1631,11 +1684,11 @@ "Emite nomes GPR conforme a ABI especificada.\n" " Padrão: baseado no binário sendo desmontado.\n" -#: mips-dis.c:2656 +#: mips-dis.c:2661 msgid "Print GPR and FPR names according to specified ABI.\n" msgstr "Emite nomes GPR e FPR conforme a ABI especificada.\n" -#: mips-dis.c:2658 +#: mips-dis.c:2663 msgid "" "Print CP0 register and HWR names according to specified\n" " architecture." @@ -1643,7 +1696,7 @@ "Emite registrador CP0 e nomes HWR conforme a arquitetura\n" " especificada." -#: mips-dis.c:2744 +#: mips-dis.c:2749 #, c-format msgid "" "\n" @@ -1656,7 +1709,7 @@ "ao uso com a opção -M (opções múltiplas devem ser separadas por vírgulas):\n" "\n" -#: mips-dis.c:2778 +#: mips-dis.c:2783 #, c-format msgid "" "\n" @@ -1681,7 +1734,11 @@ msgid "(unknown)" msgstr "(desconhecido)" -#: mmix-dis.c:510 +#: mmix-dis.c:247 mmix-dis.c:255 +msgid "*illegal*" +msgstr "*ilegal*" + +#: mmix-dis.c:529 #, c-format msgid "*unknown operands type: %d*" msgstr "*tipo de operandos desconhecidos: %d*" @@ -1740,12 +1797,12 @@ msgid "internal error: mt_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" msgstr "erro interno: mt_cgen_rebuild_tables: valores de insn-chunk-bitsize conflitantes: \"%d\" vs. \"%d\"" -#: mt-desc.c:1229 +#: mt-desc.c:1234 #, c-format msgid "internal error: mt_cgen_cpu_open: unsupported argument `%d'" msgstr "erro interno: mt_cgen_cpu_open: sem suporte ao argumento \"%d\"" -#: mt-desc.c:1248 +#: mt-desc.c:1253 #, c-format msgid "internal error: mt_cgen_cpu_open: no endianness specified" msgstr "erro interno: mt_cgen_cpu_open: nenhuma extremidade especificada" @@ -1765,6 +1822,10 @@ msgid "internal error: unknown hardware resource" msgstr "erro interno: recurso de hardware desconhecido" +#: nds32-dis.c:1186 +msgid "insufficient data to decode instruction" +msgstr "dados insuficientes para decodificar instrução" + #: nfp-dis.c:927 msgid "<invalid_instruction>:" msgstr "<instrução_inválida>:" @@ -1855,29 +1916,29 @@ #: or1k-asm.c:56 msgid "internal relocation type invalid" -msgstr "tipo de relocação interna inválido" +msgstr "tipo de realocação interna inválido" -#: or1k-desc.c:1978 +#: or1k-desc.c:2040 #, c-format msgid "internal error: or1k_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" msgstr "erro interno: or1k_cgen_rebuild_tables: valores de insn-chunk-bitsize conflitantes: \"%d\" vs. \"%d\"" -#: or1k-desc.c:2061 +#: or1k-desc.c:2128 #, c-format msgid "internal error: or1k_cgen_cpu_open: unsupported argument `%d'" msgstr "erro interno: or1k_cgen_cpu_open: sem suporte ao argumento \"%d\"" -#: or1k-desc.c:2080 +#: or1k-desc.c:2147 #, c-format msgid "internal error: or1k_cgen_cpu_open: no endianness specified" msgstr "erro interno: or1k_cgen_cpu_open: nenhuma extremidade especificada" -#: ppc-dis.c:370 +#: ppc-dis.c:386 #, c-format msgid "warning: ignoring unknown -M%s option" msgstr "aviso: ignorando opção -M%s desconhecida" -#: ppc-dis.c:858 +#: ppc-dis.c:977 #, c-format msgid "" "\n" @@ -1892,109 +1953,146 @@ msgid "invalid register" msgstr "registrador inválido" -#: ppc-opc.c:384 ppc-opc.c:412 +#: ppc-opc.c:396 msgid "invalid conditional option" msgstr "opção condicional inválida" -#: ppc-opc.c:386 ppc-opc.c:414 +#: ppc-opc.c:399 msgid "invalid counter access" msgstr "acesso a contador inválido" -#: ppc-opc.c:416 +#: ppc-opc.c:463 +msgid "BO value implies no branch hint, when using + or - modifier" +msgstr "Valor BO implica em nenhuma dica de desvio, ao usar modificador + ou -" + +#: ppc-opc.c:468 msgid "attempt to set y bit when using + or - modifier" msgstr "tentativa de definir bit y ao usar modificador + ou -" -#: ppc-opc.c:507 +#: ppc-opc.c:470 +msgid "attempt to set 'at' bits when using + or - modifier" +msgstr "tentativa de definir bits \"at\" ao usar modificador + ou -" + +#: ppc-opc.c:677 +msgid "invalid R operand" +msgstr "operando R inválido" + +#: ppc-opc.c:732 msgid "invalid mask field" msgstr "campo de máscara inválido" -#: ppc-opc.c:530 +#: ppc-opc.c:755 msgid "invalid mfcr mask" msgstr "máscara de mfcr inválida" -#: ppc-opc.c:606 +#: ppc-opc.c:873 ppc-opc.c:891 msgid "illegal L operand value" msgstr "valor ilegal de operando L" -#: ppc-opc.c:645 +#: ppc-opc.c:914 +msgid "illegal WC operand value" +msgstr "valor ilegal de operando WC" + +#: ppc-opc.c:1011 msgid "incompatible L operand value" msgstr "valor incompatível de operando L" -#: ppc-opc.c:684 ppc-opc.c:719 +#: ppc-opc.c:1051 ppc-opc.c:1086 msgid "illegal bitmask" msgstr "máscara de bits ilegal" -#: ppc-opc.c:806 +#: ppc-opc.c:1173 msgid "address register in load range" msgstr "registrador de endereço no intervalo de carregamento" -#: ppc-opc.c:872 +#: ppc-opc.c:1213 +msgid "illegal PL operand value" +msgstr "valor ilegal de operando PL" + +#: ppc-opc.c:1274 msgid "index register in load range" msgstr "registrador de índice no intervalo de carregamento" -#: ppc-opc.c:901 ppc-opc.c:986 +#: ppc-opc.c:1303 ppc-opc.c:1389 msgid "source and target register operands must be different" msgstr "operandos de registrador origem e alvo devem ser diferentes" -#: ppc-opc.c:931 +#: ppc-opc.c:1334 msgid "invalid register operand when updating" msgstr "operando de registro inválido durante atualização" -#: ppc-opc.c:1049 +#: ppc-opc.c:1452 msgid "illegal immediate value" msgstr "valor de imediato ilegal" -#: ppc-opc.c:1154 +#: ppc-opc.c:1557 msgid "invalid bat number" msgstr "número de bat inválido" -#: ppc-opc.c:1189 +#: ppc-opc.c:1592 msgid "invalid sprg number" msgstr "número de sprg inválido" -#: ppc-opc.c:1226 +#: ppc-opc.c:1629 msgid "invalid tbr number" msgstr "número de tbr inválido" -#: ppc-opc.c:1372 +#: ppc-opc.c:1715 ppc-opc.c:1761 +msgid "VSR overlaps ACC operand" +msgstr "VSR se sobrepõe operando ACC" + +#: ppc-opc.c:1868 msgid "invalid constant" msgstr "constante inválida" -#: ppc-opc.c:1474 ppc-opc.c:1497 ppc-opc.c:1520 ppc-opc.c:1543 +#: ppc-opc.c:1970 ppc-opc.c:1993 ppc-opc.c:2016 ppc-opc.c:2039 msgid "UIMM = 00000 is illegal" msgstr "UIMM = 00000 é ilegal" -#: ppc-opc.c:1566 +#: ppc-opc.c:2062 msgid "UIMM values >7 are illegal" msgstr "valores UIMM >7 são ilegais" -#: ppc-opc.c:1589 +#: ppc-opc.c:2085 msgid "UIMM values >15 are illegal" msgstr "valores UIMM >15 são ilegais" -#: ppc-opc.c:1612 +#: ppc-opc.c:2108 msgid "GPR odd is illegal" msgstr "GPR ímpar é ilegal" -#: ppc-opc.c:1635 ppc-opc.c:1658 +#: ppc-opc.c:2131 ppc-opc.c:2154 msgid "invalid offset" msgstr "deslocamento inválido" -#: ppc-opc.c:1681 +#: ppc-opc.c:2177 msgid "invalid Ddd value" msgstr "valor de Ddd inválido" -#: riscv-dis.c:68 +#. The option without '=' should be defined above. +#: riscv-dis.c:85 riscv-dis.c:109 #, c-format msgid "unrecognized disassembler option: %s" msgstr "opção do desmontador desconhecida: %s" -#: riscv-dis.c:346 +#. Invalid options with '=', no option name before '=', +#. and no value after '='. +#: riscv-dis.c:93 +#, c-format +msgid "unrecognized disassembler option with '=': %s" +msgstr "opção do desmontador desconhecida com \"=\": %s" + +#: riscv-dis.c:103 +#, c-format +msgid "unknown privilege spec set by %s=%s" +msgstr "especificação de privilégio desconhecida definida por %s=%s" + +#: riscv-dis.c:406 #, c-format msgid "# internal error, undefined modifier (%c)" msgstr "# erro interno, modificador indefinido (%c)" -#: riscv-dis.c:541 +#: riscv-dis.c:605 #, c-format msgid "" "\n" @@ -2005,25 +2103,68 @@ "As opções do desmontador específicas para RISC-V a seguir não têm suporte\n" "ao uso com a opção -M (opções múltiplas devem ser separadas por vírgulas):\n" -#: riscv-dis.c:545 +#: riscv-dis.c:609 #, c-format msgid "" "\n" -" numeric Print numeric register names, rather than ABI names.\n" +" numeric Print numeric register names, rather than ABI names.\n" msgstr "" "\n" -" numeric Emite nomes de registrador numérico, em vez de nomes de ABI.\n" +" numeric Emite nomes de registrador numérico, em vez de nomes de ABI.\n" -#: riscv-dis.c:548 +#: riscv-dis.c:612 #, c-format msgid "" "\n" -" no-aliases Disassemble only into canonical instructions, rather\n" -" than into pseudoinstructions.\n" +" no-aliases Disassemble only into canonical instructions, rather\n" +" than into pseudoinstructions.\n" msgstr "" "\n" -" no-aliases Desmonta apenas em instruções canônicas, em vez de\n" -" em pseudoinstruções.\n" +" no-aliases Desmonta apenas em instruções canônicas, em vez de\n" +" em pseudoinstruções.\n" + +#: riscv-dis.c:616 +#, c-format +msgid "" +"\n" +" priv-spec=PRIV Print the CSR according to the chosen privilege spec\n" +" (1.9, 1.9.1, 1.10, 1.11).\n" +msgstr "" +"\n" +" priv-spec=PRIV Emite CSR de acordo com a especificação de privilégio\n" +" escolhida (1.9, 1.9.1, 1.10, 1.11).\n" + +#: rx-dis.c:139 rx-dis.c:163 rx-dis.c:171 rx-dis.c:179 rx-dis.c:187 +msgid "<invalid register number>" +msgstr "<número de registrador inválido>" + +#: rx-dis.c:147 rx-dis.c:195 +msgid "<invalid condition code>" +msgstr "<código de condição inválido>" + +#: rx-dis.c:155 +msgid "<invalid flag>" +msgstr "<sinalizador inválido>" + +#: rx-dis.c:203 +msgid "<invalid opsize>" +msgstr "<opsize inválido>" + +#: rx-dis.c:211 +msgid "<invalid size>" +msgstr "<tamanho inválido>" + +#: s12z-dis.c:251 s12z-dis.c:308 s12z-dis.c:319 +msgid "<illegal reg num>" +msgstr "<núm reg ilegal>" + +#: s12z-dis.c:382 +msgid "<bad>" +msgstr "<ruim>" + +#: s12z-dis.c:392 +msgid ".<bad>" +msgstr ".<ruim>" #: s390-dis.c:42 msgid "Disassemble in ESA architecture mode" @@ -2053,8 +2194,8 @@ "As opções do desmontador específicas para S/390 a seguir não têm suporte\n" "ao uso com a opção -M (opções múltiplas devem ser separadas por vírgulas):\n" -#: score-dis.c:663 score-dis.c:870 score-dis.c:1031 score-dis.c:1145 -#: score-dis.c:1152 score-dis.c:1159 score7-dis.c:695 score7-dis.c:858 +#: score-dis.c:661 score-dis.c:879 score-dis.c:1040 score-dis.c:1146 +#: score-dis.c:1154 score-dis.c:1161 score7-dis.c:695 score7-dis.c:858 msgid "<illegal instruction>" msgstr "<instrução ilegal>" @@ -2069,16 +2210,44 @@ msgstr "erro interno: sparc-opcode.h errado: \"%s\" == \"%s\"\n" #. Mark as non-valid instruction. -#: sparc-dis.c:1098 +#: sparc-dis.c:1094 msgid "unknown" msgstr "desconhecido" -#: v850-dis.c:453 +#: v850-dis.c:190 +msgid "<invalid s-reg number>" +msgstr "<número de s-reg inválido>" + +#: v850-dis.c:206 +msgid "<invalid reg number>" +msgstr "<número de reg inválido>" + +#: v850-dis.c:222 +msgid "<invalid v-reg number>" +msgstr "<número de v-reg inválido>" + +#: v850-dis.c:236 +msgid "<invalid CC-reg number>" +msgstr "<número de CC-reg inválido>" + +#: v850-dis.c:250 +msgid "<invalid float-CC-reg number>" +msgstr "<número de float-CC-reg inválido>" + +#: v850-dis.c:264 +msgid "<invalid cacheop number>" +msgstr "<número de cacheop inválido>" + +#: v850-dis.c:275 +msgid "<invalid prefop number>" +msgstr "<número de prefop inválido>" + +#: v850-dis.c:510 #, c-format msgid "unknown operand shift: %x" msgstr "deslocamento de operando desconhecido: %x" -#: v850-dis.c:469 +#: v850-dis.c:526 #, c-format msgid "unknown reg: %d" msgstr "registrador desconhecido: %d" @@ -2160,7 +2329,7 @@ msgid "Name well-known globals" msgstr "Nomeia globais bem conhecidos" -#: wasm32-dis.c:503 +#: wasm32-dis.c:537 #, c-format msgid "" "The following WebAssembly-specific disassembler options are supported for use\n" @@ -2198,12 +2367,12 @@ msgid "internal error: xc16x_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" msgstr "erro interno: xc16x_cgen_rebuild_tables: valores de insn-chunk-bitsize conflitantes: \"%d\" vs. \"%d\"" -#: xc16x-desc.c:3432 +#: xc16x-desc.c:3437 #, c-format msgid "internal error: xc16x_cgen_cpu_open: unsupported argument `%d'" msgstr "erro interno: xc16x_cgen_cpu_open: sem suporte ao argumento \"%d\"" -#: xc16x-desc.c:3451 +#: xc16x-desc.c:3456 #, c-format msgid "internal error: xc16x_cgen_cpu_open: no endianness specified" msgstr "erro interno: xc16x_cgen_cpu_open: nenhuma extremidade especificada" @@ -2253,16 +2422,19 @@ msgid "internal error: xstormy16_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" msgstr "erro interno: xstormy16_cgen_rebuild_tables: valores de insn-chunk-bitsize conflitantes: \"%d\" vs. \"%d\"" -#: xstormy16-desc.c:1400 +#: xstormy16-desc.c:1405 #, c-format msgid "internal error: xstormy16_cgen_cpu_open: unsupported argument `%d'" msgstr "erro interno: xstormy16_cgen_cpu_open: sem suporte ao argumento \"%d\"" -#: xstormy16-desc.c:1419 +#: xstormy16-desc.c:1424 #, c-format msgid "internal error: xstormy16_cgen_cpu_open: no endianness specified" msgstr "erro interno: xstormy16_cgen_cpu_open: nenhuma extremidade especificada" +#~ msgid "internal error, h8_disassemble_init" +#~ msgstr "erro interno, h8_disassemble_init" + #~ msgid "can't find i386-opc.tbl for reading, errno = %s\n" #~ msgstr "não foi possível localizar i386-opc.tbl para leitura, errno = %s\n" Binary files /tmp/tmpwlqmdap4/HCMjq_z_kj/gdb-9.1/opcodes/po/sr.gmo and /tmp/tmpwlqmdap4/bi0oNuAXeo/gdb-10.2/opcodes/po/sr.gmo differ diff -Nru gdb-9.1/opcodes/po/sr.po gdb-10.2/opcodes/po/sr.po --- gdb-9.1/opcodes/po/sr.po 2018-04-13 15:13:11.000000000 +0000 +++ gdb-10.2/opcodes/po/sr.po 2021-04-25 04:06:26.000000000 +0000 @@ -1,30 +1,38 @@ # Serbian translation of opcodes. -# Copyright © 2016 Free Software Foundation, Inc. +# Copyright © 2020 Free Software Foundation, Inc. # This file is distributed under the same license as the binutils package. -# МироÑлав Ðиколић <miroslavnikolic@rocketmail.com>, 2016. +# МироÑлав Ðиколић <miroslavnikolic@rocketmail.com>, 2016–2020. msgid "" msgstr "" -"Project-Id-Version: opcodes-2.24.90\n" +"Project-Id-Version: opcodes-2.34.90\n" "Report-Msgid-Bugs-To: bug-binutils@gnu.org\n" -"POT-Creation-Date: 2014-02-10 09:42+1030\n" -"PO-Revision-Date: 2016-12-31 09:01+0200\n" +"POT-Creation-Date: 2020-07-04 10:28+0100\n" +"PO-Revision-Date: 2020-08-04 10:38+0200\n" "Last-Translator: МироÑлав Ðиколић <miroslavnikolic@rocketmail.com>\n" "Language-Team: Serbian <(nothing)>\n" "Language: sr\n" -"X-Bugs: Report translation errors to the Language-Team address.\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Virtaal 0.7.1\n" +"X-Bugs: Report translation errors to the Language-Team address.\n" + +#: aarch64-asm.c:820 +msgid "specified register cannot be read from" +msgstr "не могу да читам из наведеног региÑтра" + +#: aarch64-asm.c:829 +msgid "specified register cannot be written to" +msgstr "не могу да пишем у наведени региÑтар" #. Invalid option. -#. XXX - should break 'option' at following delimiter. -#: aarch64-dis.c:81 arm-dis.c:4606 +#: aarch64-dis.c:93 arc-dis.c:802 arm-dis.c:11654 #, c-format -msgid "Unrecognised disassembler option: %s\n" -msgstr "Ðепозната опција разложитеља: %s\n" +msgid "unrecognised disassembler option: %s" +msgstr "непозната опција разложитеља: %s" -#: aarch64-dis.c:2395 +#: aarch64-dis.c:3531 #, c-format msgid "" "\n" @@ -35,7 +43,7 @@ "Следеће опције разложитеља Ñпецифичне за „AARCH64“ Ñу подржане за коришћење\n" "Ñа прекидачем „-M“ (више опција треба да Ñе раздвајају зарезима):\n" -#: aarch64-dis.c:2399 +#: aarch64-dis.c:3535 #, c-format msgid "" "\n" @@ -44,7 +52,7 @@ "\n" " no-aliases Ðе иÑпиÑује алијаÑе инÑтрукције.\n" -#: aarch64-dis.c:2402 +#: aarch64-dis.c:3538 #, c-format msgid "" "\n" @@ -53,7 +61,25 @@ "\n" " aliases ИÑпиÑује алијаÑе инÑтрукције.\n" -#: aarch64-dis.c:2406 +#: aarch64-dis.c:3541 +#, c-format +msgid "" +"\n" +" no-notes Don't print instruction notes.\n" +msgstr "" +"\n" +" no-notes Ðе иÑпиÑује напомене инÑтрукције.\n" + +#: aarch64-dis.c:3544 +#, c-format +msgid "" +"\n" +" notes Do print instruction notes.\n" +msgstr "" +"\n" +" notes ИÑпиÑује напомене инÑтрукције.\n" + +#: aarch64-dis.c:3548 #, c-format msgid "" "\n" @@ -62,242 +88,574 @@ "\n" " debug_dump ВременÑки прекидач за праћење прочишћавања.\n" -#: aarch64-dis.c:2410 mips-dis.c:2231 mips-dis.c:2239 mips-dis.c:2241 +#: aarch64-dis.c:3552 mips-dis.c:2778 mips-dis.c:2788 mips-dis.c:2791 +#: nfp-dis.c:2981 riscv-dis.c:620 #, c-format msgid "\n" msgstr "\n" -#: aarch64-opc.c:1152 +#: aarch64-opc.c:1347 msgid "immediate value" msgstr "вредноÑÑ‚ непоÑредног" -#: aarch64-opc.c:1162 +#: aarch64-opc.c:1357 msgid "immediate offset" msgstr "померај непоÑредног" -#: aarch64-opc.c:1172 +#: aarch64-opc.c:1367 msgid "register number" msgstr "број региÑтра" -#: aarch64-opc.c:1182 +#: aarch64-opc.c:1377 msgid "register element index" msgstr "Ð¸Ð½Ð´ÐµÐºÑ ÐµÐ»ÐµÐ¼ÐµÐ½Ñ‚Ð° региÑтра" -#: aarch64-opc.c:1192 +#: aarch64-opc.c:1387 msgid "shift amount" msgstr "Ð¸Ð·Ð½Ð¾Ñ Ð¿Ð¾Ð¼Ð°ÐºÐ°" -#: aarch64-opc.c:1264 +#: aarch64-opc.c:1399 +msgid "multiplier" +msgstr "множилац" + +#: aarch64-opc.c:1472 +msgid "reg pair must start from even reg" +msgstr "пар израза мора почети на парном изразу" + +#: aarch64-opc.c:1478 +msgid "reg pair must be contiguous" +msgstr "пар израза мора бити непрекидан" + +#: aarch64-opc.c:1492 msgid "extraneous register" msgstr "Ñтрани региÑтар" -#: aarch64-opc.c:1269 +#: aarch64-opc.c:1498 msgid "missing register" msgstr "недоÑтаје региÑтар" -#: aarch64-opc.c:1280 +#: aarch64-opc.c:1509 msgid "stack pointer register expected" msgstr "очекиван је региÑтар показивача Ñпремника" -#: aarch64-opc.c:1310 +#: aarch64-opc.c:1534 +msgid "z0-z15 expected" +msgstr "очекивано је „z0-z15“" + +#: aarch64-opc.c:1535 +msgid "z0-z7 expected" +msgstr "очекивано је „z0-z7“" + +#: aarch64-opc.c:1561 +msgid "invalid register list" +msgstr "неиÑправан ÑпиÑак региÑтра" + +#: aarch64-opc.c:1575 +msgid "p0-p7 expected" +msgstr "очекивано је „p0-p7“" + +#: aarch64-opc.c:1601 aarch64-opc.c:1609 msgid "unexpected address writeback" msgstr "неочекивано повратно пиÑање адреÑе" -#: aarch64-opc.c:1321 +#: aarch64-opc.c:1620 msgid "address writeback expected" msgstr "очекивано је повратно пиÑање адреÑе" -#: aarch64-opc.c:1367 +#: aarch64-opc.c:1667 msgid "negative or unaligned offset expected" msgstr "очекиван је негативан или непоравнат померај" -#: aarch64-opc.c:1380 +#: aarch64-opc.c:1724 msgid "invalid register offset" msgstr "неиÑправан померај региÑтра" -#: aarch64-opc.c:1402 +#: aarch64-opc.c:1746 msgid "invalid post-increment amount" msgstr "неиÑправан Ð¸Ð·Ð½Ð¾Ñ Ð¿Ð¾ÑÑ‚-увећања" -#: aarch64-opc.c:1418 aarch64-opc.c:1685 +#: aarch64-opc.c:1762 aarch64-opc.c:2271 msgid "invalid shift amount" msgstr "неиÑправан Ð¸Ð·Ð½Ð¾Ñ Ð¿Ð¾Ð¼Ð°ÐºÐ°" -#: aarch64-opc.c:1431 +#: aarch64-opc.c:1775 msgid "invalid extend/shift operator" msgstr "неиÑправан оператор проширења/помака" -#: aarch64-opc.c:1477 aarch64-opc.c:1551 aarch64-opc.c:1586 aarch64-opc.c:1605 -#: aarch64-opc.c:1613 aarch64-opc.c:1663 aarch64-opc.c:1814 +#: aarch64-opc.c:1821 aarch64-opc.c:2073 aarch64-opc.c:2108 aarch64-opc.c:2127 +#: aarch64-opc.c:2135 aarch64-opc.c:2224 aarch64-opc.c:2401 aarch64-opc.c:2501 +#: aarch64-opc.c:2514 msgid "immediate out of range" msgstr "непоÑредни је ван опÑега" -#: aarch64-opc.c:1539 aarch64-opc.c:1561 aarch64-opc.c:1718 aarch64-opc.c:1726 -#: aarch64-opc.c:1792 aarch64-opc.c:1820 +#: aarch64-opc.c:1843 aarch64-opc.c:1885 aarch64-opc.c:1947 aarch64-opc.c:1981 +msgid "invalid addressing mode" +msgstr "непознат режим адреÑирања" + +#: aarch64-opc.c:1939 +msgid "index register xzr is not allowed" +msgstr "региÑтар индекÑа „xzr“ није допуштен" + +#: aarch64-opc.c:2061 aarch64-opc.c:2083 aarch64-opc.c:2304 aarch64-opc.c:2312 +#: aarch64-opc.c:2378 aarch64-opc.c:2407 msgid "invalid shift operator" msgstr "неиÑправан оператор помака" -#: aarch64-opc.c:1545 -msgid "shift amount expected to be 0 or 12" -msgstr "Ð¸Ð·Ð½Ð¾Ñ Ð¿Ð¾Ð¼Ð°ÐºÐ° је очекиван да буде 0 или 12" - -#: aarch64-opc.c:1568 -msgid "shift amount should be a multiple of 16" -msgstr "Ð¸Ð·Ð½Ð¾Ñ Ð¿Ð¾Ð¼Ð°ÐºÐ° треба да буде множилац од 16" +#: aarch64-opc.c:2067 +msgid "shift amount must be 0 or 12" +msgstr "Ð¸Ð·Ð½Ð¾Ñ Ð¿Ð¾Ð¼Ð°ÐºÐ° мора бити 0 или 12" + +#: aarch64-opc.c:2090 +msgid "shift amount must be a multiple of 16" +msgstr "Ð¸Ð·Ð½Ð¾Ñ Ð¿Ð¾Ð¼Ð°ÐºÐ° мора бити множилац од 16" -#: aarch64-opc.c:1580 +#: aarch64-opc.c:2102 msgid "negative immediate value not allowed" msgstr "негативна вредноÑÑ‚ непоÑредног није дозвољена" -#: aarch64-opc.c:1674 +#: aarch64-opc.c:2235 msgid "immediate zero expected" msgstr "очекиван је непоÑредни нула" -#: aarch64-opc.c:1734 +#: aarch64-opc.c:2249 +msgid "rotate expected to be 0, 90, 180 or 270" +msgstr "очекивано је да заокрет буде 0, 90, 180 или 270" + +#: aarch64-opc.c:2260 +msgid "rotate expected to be 90 or 270" +msgstr "очекивано је да заокрет буде 90 или 270" + +#: aarch64-opc.c:2320 msgid "shift is not permitted" msgstr "помак није допуштен" -#: aarch64-opc.c:1759 +#: aarch64-opc.c:2345 msgid "invalid value for immediate" msgstr "неиÑправна вредноÑÑ‚ за непоÑредног" -#: aarch64-opc.c:1784 -msgid "shift amount expected to be 0 or 16" -msgstr "Ð¸Ð·Ð½Ð¾Ñ Ð¿Ð¾Ð¼Ð°ÐºÐ° је очекиван да буде 0 или 16" +#: aarch64-opc.c:2370 +msgid "shift amount must be 0 or 16" +msgstr "Ð¸Ð·Ð½Ð¾Ñ Ð¿Ð¾Ð¼Ð°ÐºÐ° мора бити 0 или 16" -#: aarch64-opc.c:1804 +#: aarch64-opc.c:2391 msgid "floating-point immediate expected" msgstr "очекиван је непоÑредни Ñа покретним зарезом" -#: aarch64-opc.c:1895 +#: aarch64-opc.c:2425 +msgid "no shift amount allowed for 8-bit constants" +msgstr "Ð¸Ð·Ð½Ð¾Ñ Ð¿Ð¾Ð¼Ð°ÐºÐ° није допуштен за 8-битне конÑтанте" + +#: aarch64-opc.c:2435 +msgid "shift amount must be 0 or 8" +msgstr "Ð¸Ð·Ð½Ð¾Ñ Ð¿Ð¾Ð¼Ð°ÐºÐ° мора бити 0 или 8" + +#: aarch64-opc.c:2448 +msgid "immediate too big for element size" +msgstr "непоÑредни је превелик за величину елеммента" + +#: aarch64-opc.c:2455 +msgid "invalid arithmetic immediate" +msgstr "неиÑправан непоÑредни аритметике" + +#: aarch64-opc.c:2469 +msgid "floating-point value must be 0.5 or 1.0" +msgstr "вредноÑÑ‚ покретног зареза мора бити 0.5 или 1.0" + +#: aarch64-opc.c:2479 +msgid "floating-point value must be 0.5 or 2.0" +msgstr "вредноÑÑ‚ покретног зареза мора бити 0.5 или 2.0" + +#: aarch64-opc.c:2489 +msgid "floating-point value must be 0.0 or 1.0" +msgstr "вредноÑÑ‚ покретног зареза мора бити 0.0 или 1.0" + +#: aarch64-opc.c:2520 +msgid "invalid replicated MOV immediate" +msgstr "неиÑправан реплицирани „MOV“ непоÑредни" + +#: aarch64-opc.c:2641 msgid "extend operator expected" msgstr "очекиван је проширени оператор" -#: aarch64-opc.c:1908 +#: aarch64-opc.c:2654 msgid "missing extend operator" msgstr "недоÑтаје проширени оператор" -#: aarch64-opc.c:1914 +#: aarch64-opc.c:2660 msgid "'LSL' operator not allowed" -msgstr "„ЛСЛ“ оператор није допуштен" +msgstr "„LSL“ оператор није допуштен" -#: aarch64-opc.c:1935 +#: aarch64-opc.c:2681 msgid "W register expected" msgstr "„W“ региÑтар је очекиван" -#: aarch64-opc.c:1946 +#: aarch64-opc.c:2692 msgid "shift operator expected" msgstr "очекиван је оператор помака" -#: aarch64-opc.c:1953 +#: aarch64-opc.c:2699 msgid "'ROR' operator not allowed" -msgstr "„РОР“ оператор није допуштен" +msgstr "„ROR“ оператор није допуштен" + +#: aarch64-opc.c:3714 +msgid "reading from a write-only register" +msgstr "читам из региÑтра Ñамо за пиÑање" + +#: aarch64-opc.c:3716 +msgid "writing to a read-only register" +msgstr "пишем у региÑтар Ñамо за читање" + +#: aarch64-opc.c:4711 +msgid "instruction opens new dependency sequence without ending previous one" +msgstr "инÑтрукција је отворила нови низ завиÑноÑти а да није завршила претходни" + +#: aarch64-opc.c:4731 +msgid "previous `movprfx' sequence not closed" +msgstr "претходни „movprfx“ низ није затворен" + +#: aarch64-opc.c:4750 +msgid "SVE instruction expected after `movprfx'" +msgstr "инÑтрукција „SVE“ је очекивана након „movprfx“" + +#: aarch64-opc.c:4763 +msgid "SVE `movprfx' compatible instruction expected" +msgstr "очекивана је „SVE movprfx“ ÑаглаÑна инÑтрукција" + +#: aarch64-opc.c:4850 +msgid "predicated instruction expected after `movprfx'" +msgstr "предвиђена инÑтрукција је очекивана након „movprfx“" + +#: aarch64-opc.c:4862 +msgid "merging predicate expected due to preceding `movprfx'" +msgstr "Ñтапање предиката је очекивано уÑлед претходећег „movprfx“" + +#: aarch64-opc.c:4874 +msgid "predicate register differs from that in preceding `movprfx'" +msgstr "региÑтрар предиката Ñе разликује од оног у претходећем „movprfx“" -#: alpha-opc.c:155 +#: aarch64-opc.c:4893 +msgid "output register of preceding `movprfx' not used in current instruction" +msgstr "региÑтар излаза претходеће „movprfx“ није коришћен у текућој инÑтрукцији" + +#: aarch64-opc.c:4906 +msgid "output register of preceding `movprfx' expected as output" +msgstr "региÑтар излаза претходеће „movprfx“ је очекиван као излаз" + +#: aarch64-opc.c:4918 +msgid "output register of preceding `movprfx' used as input" +msgstr "региÑтар излаза претходеће „movprfx“ је коришћен као улаз" + +#: aarch64-opc.c:4934 +msgid "register size not compatible with previous `movprfx'" +msgstr "величина региÑтра није ÑаглаÑна Ñа претходним „movprfx“" + +#: alpha-opc.c:154 msgid "branch operand unaligned" msgstr "операнд гране није поравнат" -#: alpha-opc.c:171 alpha-opc.c:187 +#: alpha-opc.c:170 alpha-opc.c:186 msgid "jump hint unaligned" msgstr "погодак Ñкока није поравнат" -#: arc-dis.c:75 -msgid "Illegal limm reference in last instruction!\n" -msgstr "ÐеиÑправна лимм упута у поÑледњој инÑтрукцији!\n" - -#: arc-opc.c:386 -msgid "unable to fit different valued constants into instruction" -msgstr "не могу да уклопим другачије вредноване конÑтанте у инÑтрукцији" - -#: arc-opc.c:395 -msgid "auxiliary register not allowed here" -msgstr "помоћни региÑтар није дозвољен овде" - -#: arc-opc.c:401 arc-opc.c:418 -msgid "attempt to set readonly register" -msgstr "покушавам да подеÑим региÑтар Ñамо за читање" - -#: arc-opc.c:406 arc-opc.c:423 -msgid "attempt to read writeonly register" -msgstr "покушавам да читам региÑтар Ñамо за пиÑање" - -#: arc-opc.c:428 -#, c-format -msgid "invalid register number `%d'" -msgstr "неиÑправан број региÑтра „%d“" - -#: arc-opc.c:594 arc-opc.c:645 arc-opc.c:673 -msgid "too many long constants" -msgstr "превише дугих конÑтанти" - -#: arc-opc.c:668 -msgid "too many shimms in load" -msgstr "превише „shimms“-ија у учитавању" - -#. Do we have a limm already? -#: arc-opc.c:781 -msgid "impossible store" -msgstr "немогућ Ñмештај" - -#: arc-opc.c:814 -msgid "st operand error" -msgstr "грешка ÑÑ‚ операнда" - -#: arc-opc.c:818 arc-opc.c:860 -msgid "address writeback not allowed" -msgstr "повратно пиÑање адреÑе није дозвољено" - -#: arc-opc.c:822 -msgid "store value must be zero" -msgstr "величина Ñмештаја мора бити нула" - -#: arc-opc.c:847 -msgid "invalid load/shimm insn" -msgstr "неиÑправна „load/shimm“ инÑтрукција" +#: arc-dis.c:379 +msgid "" +"\n" +"Warning: disassembly may be wrong due to guessed opcode class choice.\n" +"Use -M<class[,class]> to select the correct opcode class(es).\n" +"\t\t\t\t" +msgstr "" +"\n" +"Упозорење: рашчлањивање може бити погрешно уÑлед погођеног избора клаÑе опкода.\n" +"КориÑтите „-M<class[,class]>“ да изаберете иÑправан разред опкода.\n" +"\t\t\t\t" + +#: arc-dis.c:440 +msgid "An error occured while generating the extension instruction operations" +msgstr "Дошло је до грешке приликом Ñтварања радњи инÑтрукција проширења" + +#: arc-dis.c:845 +#, c-format +msgid "unrecognised disassembler CPU option: %s" +msgstr "непозната опција процеÑора разложитеља: %s" + +#: arc-dis.c:1412 +#, c-format +msgid "" +"\n" +"The following ARC specific disassembler options are supported for use \n" +"with -M switch (multiple options should be separated by commas):\n" +msgstr "" +"\n" +"Следеће опције разложитеља Ñпецифичне за „ARC“ Ñу подржане за коришћење\n" +"Ñа прекидачем „-M“ (више опција треба да Ñе раздвајају зарезима):\n" + +#: arc-dis.c:1424 +#, c-format +msgid " dsp Recognize DSP instructions.\n" +msgstr " dsp Препознаје „DSP“ инÑтрукције.\n" + +#: arc-dis.c:1426 +#, c-format +msgid " spfp Recognize FPX SP instructions.\n" +msgstr " spfp Препознаје „FPX SP“ инÑтрукције.\n" + +#: arc-dis.c:1428 +#, c-format +msgid " dpfp Recognize FPX DP instructions.\n" +msgstr " dpfp Препознаје „FPX DP“ инÑтрукције.\n" + +#: arc-dis.c:1430 +#, c-format +msgid " quarkse_em Recognize FPU QuarkSE-EM instructions.\n" +msgstr " quarkse_em Препознаје „FPU QuarkSE-EM“ инÑтрукције.\n" + +#: arc-dis.c:1432 +#, c-format +msgid " fpuda Recognize double assist FPU instructions.\n" +msgstr " fpuda Препознаје двоÑтруко припомогнуте „FPU“ инÑтрукције.\n" + +#: arc-dis.c:1434 +#, c-format +msgid " fpus Recognize single precision FPU instructions.\n" +msgstr " fpus Препознаје „FPU“ инÑтрукције једноÑтруке тачноÑти.\n" + +#: arc-dis.c:1436 +#, c-format +msgid " fpud Recognize double precision FPU instructions.\n" +msgstr " fpud Препознаје „FPU“ инÑтрукције двоÑтруке тачноÑти.\n" + +#: arc-dis.c:1438 +#, c-format +msgid " nps400 Recognize NPS400 instructions.\n" +msgstr " nps400 Препознаје „NPS400“ инÑтрукције.\n" + +#: arc-dis.c:1440 +#, c-format +msgid " hex Use only hexadecimal number to print immediates.\n" +msgstr " hex КориÑти Ñамо хекÑадецимални број за иÑпиÑивање непоÑредних.\n" + +#: arc-opc.c:41 arc-opc.c:64 arc-opc.c:90 +msgid "LP_COUNT register cannot be used as destination register" +msgstr "„LP_COUNT“ региÑтар Ñе не може кориÑтити као региÑтар одредишта" + +#: arc-opc.c:88 +msgid "cannot use odd number destination register" +msgstr "не могу кориÑтити одредишни региÑтар непарног броја" + +#: arc-opc.c:101 +msgid "cannot use odd number source register" +msgstr "не могу кориÑтити изворни региÑтар непарног броја" + +#: arc-opc.c:114 +msgid "operand is not zero" +msgstr "операнд није нула" + +#: arc-opc.c:173 +msgid "register R30 is a limm indicator" +msgstr "региÑÑ‚Ñ€ „R30“ је указивач ограничења" + +#: arc-opc.c:175 +msgid "register out of range" +msgstr "региÑтар је ван опÑега" + +#: arc-opc.c:194 +msgid "register must be R0" +msgstr "региÑтар мора бити „R0“" + +#: arc-opc.c:212 +msgid "register must be R1" +msgstr "региÑтар мора бити „R1“" + +#: arc-opc.c:229 +msgid "register must be R2" +msgstr "региÑтар мора бити „R2“" + +#: arc-opc.c:246 +msgid "register must be R3" +msgstr "региÑтар мора бити „R3“" + +#: arc-opc.c:263 +msgid "register must be SP" +msgstr "региÑтар мора бити „SP“" + +#: arc-opc.c:280 +msgid "register must be GP" +msgstr "региÑтар мора бити „GP“" + +#: arc-opc.c:297 +msgid "register must be PCL" +msgstr "региÑтар мора бити „PCL“" + +#: arc-opc.c:314 +msgid "register must be BLINK" +msgstr "региÑтар мора бити „BLINK“" + +#: arc-opc.c:331 +msgid "register must be ILINK1" +msgstr "региÑтар мора бити „ILINK1“" + +#: arc-opc.c:348 +msgid "register must be ILINK2" +msgstr "региÑтар мора бити „ILINK2“" + +#. ARC NPS400 Support: See comment near head of file. +#: arc-opc.c:379 arc-opc.c:417 arc-opc.c:455 arc-opc.c:724 +msgid "register must be either r0-r3 or r12-r15" +msgstr "региÑтар мора бити „r0-r3“ или „r12-r15“" + +#: arc-opc.c:506 +msgid "accepted values are from -1 to 6" +msgstr "очекиване вредноÑти Ñу од -1 до 6" + +#: arc-opc.c:535 +msgid "first register of the range should be r13" +msgstr "први региÑтар опÑега треба бити „r13“" + +#: arc-opc.c:537 +msgid "last register of the range doesn't fit" +msgstr "поÑледњи региÑтар опÑега не може да Ñтане" + +#: arc-opc.c:557 arc-opc.c:572 +msgid "invalid register number, should be fp" +msgstr "неиÑправан број региÑтра, треба бити „fp“" + +#: arc-opc.c:594 +msgid "invalid register number, should be blink" +msgstr "неиÑправан број региÑтра, треба бити „blink“" + +#: arc-opc.c:616 +msgid "invalid register number, should be pcl" +msgstr "неиÑправан број региÑтра, треба бити „pcl“" + +#: arc-opc.c:772 +msgid "invalid size, should be 1, 2, 4, or 8" +msgstr "неиÑправна величина, треба бити 1, 2, 4 или 8" + +#: arc-opc.c:817 +msgid "invalid immediate, must be 1, 2, or 4" +msgstr "неиÑправан непоÑредни, мора бит 1, 2 или 4" #: arc-opc.c:856 -msgid "ld operand error" -msgstr "грешка лд операнда" +msgid "invalid value for CMEM ld/st immediate" +msgstr "неиÑправна вредноÑÑ‚ за „CMEM ld/st“ непоÑредног" -#: arc-opc.c:943 -msgid "jump flags, but no .f seen" -msgstr "заÑтавице Ñкока, али не видех „.f“" - -#: arc-opc.c:946 -msgid "jump flags, but no limm addr" -msgstr "заÑтавице Ñкока, али нема лимм адреÑе" - -#: arc-opc.c:949 -msgid "flag bits of jump address limm lost" -msgstr "лимм губитак битова заÑтавице адреÑе Ñкока" - -#: arc-opc.c:952 -msgid "attempt to set HR bits" -msgstr "покушавам да подеÑим ХР бите" - -#: arc-opc.c:955 -msgid "bad jump flags value" -msgstr "лоша вредноÑÑ‚ заÑтавица Ñкока" - -#: arc-opc.c:988 -msgid "branch address not on 4 byte boundary" -msgstr "адреÑа гране није на граници 4 бајта" - -#: arc-opc.c:1024 -msgid "must specify .jd or no nullify suffix" -msgstr "морате навеÑти „.jd“ или ÑÑƒÑ„Ð¸ÐºÑ Ð½Ðµ нулирања" +#: arc-opc.c:883 +msgid "invalid position, should be 0, 16, 32, 48 or 64." +msgstr "неиÑправан положај, треба бити 0, 16, 32, 48 или 64." + +#: arc-opc.c:917 +msgid "invalid position, should be 16, 32, 64 or 128." +msgstr "неиÑправан положај, треба бити 16, 32, 64 или 128." + +#: arc-opc.c:939 +msgid "invalid size value must be on range 1-64." +msgstr "неиÑправна вредноÑÑ‚ величине мора бити у опÑегу 1-64." + +#: arc-opc.c:970 +msgid "invalid position, should be 0, 8, 16, or 24" +msgstr "неиÑправан положај, треба бити 0, 8, 16 или 24" + +#: arc-opc.c:995 +msgid "invalid size, value must be " +msgstr "неиÑправна величина, вредноÑÑ‚ мора бити " + +#: arc-opc.c:1069 +msgid "value out of range 1 - 256" +msgstr "вредноÑÑ‚ је ван опÑега 1 – 256" + +#: arc-opc.c:1078 +msgid "value must be power of 2" +msgstr "величина мора бити Ñтепен 2" + +#: arc-opc.c:1131 +msgid "value must be in the range 0 to 28" +msgstr "вредноÑÑ‚ мор бити у опÑегу од 0 до 28" + +#: arc-opc.c:1153 +msgid "value must be in the range 1 to " +msgstr "вредноÑÑ‚ мор бити у опÑегу од 1 до " + +#: arc-opc.c:1183 +msgid "value must be in the range 0 to 240" +msgstr "вредноÑÑ‚ мор бити у опÑегу од 0 до 240" + +#: arc-opc.c:1185 +msgid "value must be a multiple of 16" +msgstr "вредноÑÑ‚ мора бити множилац од 16" + +#: arc-opc.c:1205 +msgid "invalid address type for operand" +msgstr "неиÑправна врÑта адреÑе за операнд" + +#: arc-opc.c:1239 +msgid "value must be in the range 0 to 31" +msgstr "вредноÑÑ‚ мор бити у опÑегу од 0 до 31" + +#: arc-opc.c:1264 +msgid "invalid position, should be one of: 0,4,8,...124." +msgstr "неиÑправан положај, треба да буде: 0,4,8,...или 124." + +#: arm-dis.c:5192 +msgid "Select raw register names" +msgstr "Бира Ñирове називе региÑтра" + +#: arm-dis.c:5194 +msgid "Select register names used by GCC" +msgstr "Бира називе региÑтра које кориÑти „GCC“" + +#: arm-dis.c:5196 +msgid "Select register names used in ARM's ISA documentation" +msgstr "Бира називе региÑтра коришћене у „ISA“ документацији „ARM“-а" + +#: arm-dis.c:5198 +msgid "Assume all insns are Thumb insns" +msgstr "ПретпоÑтавља да Ñу Ñви инÑнÑи „Thumb“ инÑнÑи" + +#: arm-dis.c:5199 +msgid "Examine preceding label to determine an insn's type" +msgstr "ПроиÑпитује претходећи Ð½Ð°Ñ‚Ð¿Ð¸Ñ Ð´Ð° одреди врÑту „insn“-а" + +#: arm-dis.c:5200 +msgid "Select register names used in the APCS" +msgstr "Бира називе региÑтра који Ñе кориÑте у „APCS“-у" + +#: arm-dis.c:5202 +msgid "Select register names used in the ATPCS" +msgstr "Бира називе региÑтра који Ñе кориÑте у „ATPCS“-у" + +#: arm-dis.c:5204 +msgid "Select special register names used in the ATPCS" +msgstr "Бира поÑебне називе региÑтра који Ñе кориÑте у „ATPCS“-у" + +#: arm-dis.c:5206 +msgid "Enable CDE extensions for coprocessor N space" +msgstr "Укључује „CDE“ проширења за N проÑтор копроцеÑора" -#: arm-dis.c:2145 +#: arm-dis.c:8375 msgid "<illegal precision>" msgstr "<неиÑправна тачноÑÑ‚>" -#. XXX - should break 'option' at following delimiter. -#: arm-dis.c:4598 +#: arm-dis.c:11615 +#, c-format +msgid "unrecognised register name set: %s" +msgstr "непознат назив региÑтра је подешен: %s" + +#: arm-dis.c:11629 +#, c-format +msgid "cde coprocessor not between 0-7: %s" +msgstr "„cde“ копроцеÑор није између 0-7: %s" + +#: arm-dis.c:11635 +#, c-format +msgid "coproc must have an argument: %s" +msgstr "копроцеÑор мора имати аргумент: %s" + +#: arm-dis.c:11648 #, c-format -msgid "Unrecognised register name set: %s\n" -msgstr "Ðепознат назив региÑтра је подешен: %s\n" +msgid "coprocN argument takes options \"generic\", \"cde\", or \"CDE\": %s" +msgstr "аргумент копроцN може да има опције „generic“, „cde“, или „CDE“: %s" -#: arm-dis.c:5208 +#: arm-dis.c:12359 #, c-format msgid "" "\n" @@ -313,45 +671,236 @@ msgid "undefined" msgstr "неодређено" -#: avr-dis.c:198 +#: avr-dis.c:218 #, c-format -msgid "Internal disassembler error" -msgstr "Унутрашња грешка разложитеља" +msgid "internal disassembler error" +msgstr "унутрашња грешка разложитеља" -#: avr-dis.c:251 +#: avr-dis.c:272 #, c-format msgid "unknown constraint `%c'" msgstr "непознато ограничење „%c“" -#: cgen-asm.c:352 epiphany-ibld.c:201 fr30-ibld.c:201 frv-ibld.c:201 -#: ip2k-ibld.c:201 iq2000-ibld.c:201 lm32-ibld.c:201 m32c-ibld.c:201 -#: m32r-ibld.c:201 mep-ibld.c:201 mt-ibld.c:201 openrisc-ibld.c:201 -#: xc16x-ibld.c:201 xstormy16-ibld.c:201 +#: bpf-asm.c:97 +msgid "expected 16, 32 or 64 in" +msgstr "очекивах 16, 32 или 64 у" + +#: bpf-asm.c:181 epiphany-asm.c:456 fr30-asm.c:311 frv-asm.c:1264 +#: ip2k-asm.c:512 iq2000-asm.c:460 lm32-asm.c:350 m32c-asm.c:1585 +#: m32r-asm.c:329 mep-asm.c:1287 mt-asm.c:596 or1k-asm.c:571 xc16x-asm.c:377 +#: xstormy16-asm.c:277 +#, c-format +msgid "internal error: unrecognized field %d while parsing" +msgstr "унутрашња грешка: непознато поље %d приликом обраде" + +#: bpf-asm.c:233 epiphany-asm.c:508 fr30-asm.c:363 frv-asm.c:1316 +#: ip2k-asm.c:564 iq2000-asm.c:512 lm32-asm.c:402 m32c-asm.c:1637 +#: m32r-asm.c:381 mep-asm.c:1339 mt-asm.c:648 or1k-asm.c:623 xc16x-asm.c:429 +#: xstormy16-asm.c:329 +msgid "missing mnemonic in syntax string" +msgstr "недоÑтаје мнемоник у ниÑци ÑинтакÑе" + +#. We couldn't parse it. +#: bpf-asm.c:368 bpf-asm.c:372 bpf-asm.c:461 bpf-asm.c:568 epiphany-asm.c:643 +#: epiphany-asm.c:647 epiphany-asm.c:736 epiphany-asm.c:843 fr30-asm.c:498 +#: fr30-asm.c:502 fr30-asm.c:591 fr30-asm.c:698 frv-asm.c:1451 frv-asm.c:1455 +#: frv-asm.c:1544 frv-asm.c:1651 ip2k-asm.c:699 ip2k-asm.c:703 ip2k-asm.c:792 +#: ip2k-asm.c:899 iq2000-asm.c:647 iq2000-asm.c:651 iq2000-asm.c:740 +#: iq2000-asm.c:847 lm32-asm.c:537 lm32-asm.c:541 lm32-asm.c:630 +#: lm32-asm.c:737 m32c-asm.c:1772 m32c-asm.c:1776 m32c-asm.c:1865 +#: m32c-asm.c:1972 m32r-asm.c:516 m32r-asm.c:520 m32r-asm.c:609 m32r-asm.c:716 +#: mep-asm.c:1474 mep-asm.c:1478 mep-asm.c:1567 mep-asm.c:1674 mt-asm.c:783 +#: mt-asm.c:787 mt-asm.c:876 mt-asm.c:983 or1k-asm.c:758 or1k-asm.c:762 +#: or1k-asm.c:851 or1k-asm.c:958 xc16x-asm.c:564 xc16x-asm.c:568 +#: xc16x-asm.c:657 xc16x-asm.c:764 xstormy16-asm.c:464 xstormy16-asm.c:468 +#: xstormy16-asm.c:557 xstormy16-asm.c:664 +msgid "unrecognized instruction" +msgstr "непозната инÑтрукција" + +#: bpf-asm.c:415 epiphany-asm.c:690 fr30-asm.c:545 frv-asm.c:1498 +#: ip2k-asm.c:746 iq2000-asm.c:694 lm32-asm.c:584 m32c-asm.c:1819 +#: m32r-asm.c:563 mep-asm.c:1521 mt-asm.c:830 or1k-asm.c:805 xc16x-asm.c:611 +#: xstormy16-asm.c:511 +#, c-format +msgid "syntax error (expected char `%c', found `%c')" +msgstr "грешка ÑинтакÑе (очекивах знак „%c“, нађох „%c“)" + +#: bpf-asm.c:425 epiphany-asm.c:700 fr30-asm.c:555 frv-asm.c:1508 +#: ip2k-asm.c:756 iq2000-asm.c:704 lm32-asm.c:594 m32c-asm.c:1829 +#: m32r-asm.c:573 mep-asm.c:1531 mt-asm.c:840 or1k-asm.c:815 xc16x-asm.c:621 +#: xstormy16-asm.c:521 +#, c-format +msgid "syntax error (expected char `%c', found end of instruction)" +msgstr "грешка ÑинтакÑе (очекивах знак „%c“, нађох крај инÑтрукције)" + +#: bpf-asm.c:455 epiphany-asm.c:730 fr30-asm.c:585 frv-asm.c:1538 +#: ip2k-asm.c:786 iq2000-asm.c:734 lm32-asm.c:624 m32c-asm.c:1859 +#: m32r-asm.c:603 mep-asm.c:1561 mt-asm.c:870 or1k-asm.c:845 xc16x-asm.c:651 +#: xstormy16-asm.c:551 +msgid "junk at end of line" +msgstr "ђубре на крају реда" + +#: bpf-asm.c:567 epiphany-asm.c:842 fr30-asm.c:697 frv-asm.c:1650 +#: ip2k-asm.c:898 iq2000-asm.c:846 lm32-asm.c:736 m32c-asm.c:1971 +#: m32r-asm.c:715 mep-asm.c:1673 mt-asm.c:982 or1k-asm.c:957 xc16x-asm.c:763 +#: xstormy16-asm.c:663 +msgid "unrecognized form of instruction" +msgstr "непознат облик инÑтрукције" + +#: bpf-asm.c:581 epiphany-asm.c:856 fr30-asm.c:711 frv-asm.c:1664 +#: ip2k-asm.c:912 iq2000-asm.c:860 lm32-asm.c:750 m32c-asm.c:1985 +#: m32r-asm.c:729 mep-asm.c:1687 mt-asm.c:996 or1k-asm.c:971 xc16x-asm.c:777 +#: xstormy16-asm.c:677 +#, c-format +msgid "bad instruction `%.50s...'" +msgstr "лоша инÑтрукција „%.50s...“" + +#: bpf-asm.c:584 epiphany-asm.c:859 fr30-asm.c:714 frv-asm.c:1667 +#: ip2k-asm.c:915 iq2000-asm.c:863 lm32-asm.c:753 m32c-asm.c:1988 +#: m32r-asm.c:732 mep-asm.c:1690 mt-asm.c:999 or1k-asm.c:974 xc16x-asm.c:780 +#: xstormy16-asm.c:680 +#, c-format +msgid "bad instruction `%.50s'" +msgstr "лоша инÑтрукција „%.50s“" + +#: bpf-desc.c:1671 +#, c-format +msgid "internal error: bpf_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" +msgstr "унутрашња грешка: bpf_cgen_rebuild_tables: Ñукобљене „insn-chunk-bitsize“ вредноÑти: %d наÑпрам %d" + +#: bpf-desc.c:1759 +#, c-format +msgid "internal error: bpf_cgen_cpu_open: unsupported argument `%d'" +msgstr "унутрашња грешка: bpf_cgen_cpu_open: неподржан аргумент „%d“" + +#: bpf-desc.c:1778 +#, c-format +msgid "internal error: bpf_cgen_cpu_open: no endianness specified" +msgstr "унутрашња грешка: bpf_cgen_cpu_open: ниÑу наведене крајњоÑти" + +#. Default text to print if an instruction isn't recognized. +#: bpf-dis.c:41 epiphany-dis.c:41 fr30-dis.c:41 frv-dis.c:41 ip2k-dis.c:41 +#: iq2000-dis.c:41 lm32-dis.c:41 m32c-dis.c:41 m32r-dis.c:41 mep-dis.c:41 +#: mmix-dis.c:293 mt-dis.c:41 nds32-dis.c:64 or1k-dis.c:41 xc16x-dis.c:41 +#: xstormy16-dis.c:41 +msgid "*unknown*" +msgstr "*непознато*" + +#: bpf-dis.c:203 epiphany-dis.c:279 fr30-dis.c:300 frv-dis.c:397 +#: ip2k-dis.c:289 iq2000-dis.c:190 lm32-dis.c:148 m32c-dis.c:892 +#: m32r-dis.c:280 mep-dis.c:1188 mt-dis.c:291 or1k-dis.c:175 xc16x-dis.c:421 +#: xstormy16-dis.c:169 +#, c-format +msgid "internal error: unrecognized field %d while printing insn" +msgstr "унутрашња грешка: непознато поље %d приликом иÑпиÑивања инÑн-а" + +#: bpf-ibld.c:164 epiphany-ibld.c:164 fr30-ibld.c:164 frv-ibld.c:164 +#: ip2k-ibld.c:164 iq2000-ibld.c:164 lm32-ibld.c:164 m32c-ibld.c:164 +#: m32r-ibld.c:164 mep-ibld.c:164 mt-ibld.c:164 or1k-ibld.c:164 +#: xc16x-ibld.c:164 xstormy16-ibld.c:164 +#, c-format +msgid "operand out of range (%ld not between %ld and %lu)" +msgstr "операнд је ван опÑега (%ld није између %ld и %lu)" + +#: bpf-ibld.c:185 epiphany-ibld.c:185 fr30-ibld.c:185 frv-ibld.c:185 +#: ip2k-ibld.c:185 iq2000-ibld.c:185 lm32-ibld.c:185 m32c-ibld.c:185 +#: m32r-ibld.c:185 mep-ibld.c:185 mt-ibld.c:185 or1k-ibld.c:185 +#: xc16x-ibld.c:185 xstormy16-ibld.c:185 +#, c-format +msgid "operand out of range (0x%lx not between 0 and 0x%lx)" +msgstr "операнд је ван опÑега (0x%lx није између 0 и 0x%lx)" + +#: bpf-ibld.c:201 cgen-asm.c:351 epiphany-ibld.c:201 fr30-ibld.c:201 +#: frv-ibld.c:201 ip2k-ibld.c:201 iq2000-ibld.c:201 lm32-ibld.c:201 +#: m32c-ibld.c:201 m32r-ibld.c:201 mep-ibld.c:201 mt-ibld.c:201 +#: or1k-ibld.c:201 xc16x-ibld.c:201 xstormy16-ibld.c:201 #, c-format msgid "operand out of range (%ld not between %ld and %ld)" msgstr "операнд је ван опÑега (%ld није између %ld и %ld)" -#: cgen-asm.c:374 +#: bpf-ibld.c:628 epiphany-ibld.c:883 fr30-ibld.c:738 frv-ibld.c:864 +#: ip2k-ibld.c:615 iq2000-ibld.c:721 lm32-ibld.c:642 m32c-ibld.c:1739 +#: m32r-ibld.c:673 mep-ibld.c:1216 mt-ibld.c:757 or1k-ibld.c:736 +#: xc16x-ibld.c:760 xstormy16-ibld.c:686 +#, c-format +msgid "internal error: unrecognized field %d while building insn" +msgstr "унутрашња грешка: непознато поље %d приликом изградње инÑн-а" + +#: bpf-ibld.c:712 epiphany-ibld.c:1178 fr30-ibld.c:944 frv-ibld.c:1182 +#: ip2k-ibld.c:691 iq2000-ibld.c:897 lm32-ibld.c:747 m32c-ibld.c:2901 +#: m32r-ibld.c:811 mep-ibld.c:1816 mt-ibld.c:978 or1k-ibld.c:895 +#: xc16x-ibld.c:981 xstormy16-ibld.c:833 +#, c-format +msgid "internal error: unrecognized field %d while decoding insn" +msgstr "унутрашња грешка: непознато поље %d приликом декодирања инÑн-а" + +#: bpf-ibld.c:781 epiphany-ibld.c:1322 fr30-ibld.c:1091 frv-ibld.c:1461 +#: ip2k-ibld.c:766 iq2000-ibld.c:1029 lm32-ibld.c:837 m32c-ibld.c:3519 +#: m32r-ibld.c:925 mep-ibld.c:2287 mt-ibld.c:1179 or1k-ibld.c:991 +#: xc16x-ibld.c:1203 xstormy16-ibld.c:944 +#, c-format +msgid "internal error: unrecognized field %d while getting int operand" +msgstr "унутрашња грешка: непознато поље %d приликом добављања инт операнда" + +#: bpf-ibld.c:832 epiphany-ibld.c:1448 fr30-ibld.c:1220 frv-ibld.c:1722 +#: ip2k-ibld.c:823 iq2000-ibld.c:1143 lm32-ibld.c:909 m32c-ibld.c:4119 +#: m32r-ibld.c:1021 mep-ibld.c:2740 mt-ibld.c:1362 or1k-ibld.c:1069 +#: xc16x-ibld.c:1407 xstormy16-ibld.c:1037 +#, c-format +msgid "internal error: unrecognized field %d while getting vma operand" +msgstr "унутрашња грешка: непознато поље %d приликом добављања вма операнда" + +#: bpf-ibld.c:890 epiphany-ibld.c:1581 fr30-ibld.c:1352 frv-ibld.c:1990 +#: ip2k-ibld.c:883 iq2000-ibld.c:1264 lm32-ibld.c:988 m32c-ibld.c:4707 +#: m32r-ibld.c:1123 mep-ibld.c:3154 mt-ibld.c:1552 or1k-ibld.c:1154 +#: xc16x-ibld.c:1612 xstormy16-ibld.c:1137 +#, c-format +msgid "internal error: unrecognized field %d while setting int operand" +msgstr "унутрашња грешка: непознато поље %d приликом подешавања инт операнда" + +#: bpf-ibld.c:938 epiphany-ibld.c:1704 fr30-ibld.c:1474 frv-ibld.c:2248 +#: ip2k-ibld.c:933 iq2000-ibld.c:1375 lm32-ibld.c:1057 m32c-ibld.c:5285 +#: m32r-ibld.c:1215 mep-ibld.c:3558 mt-ibld.c:1732 or1k-ibld.c:1229 +#: xc16x-ibld.c:1807 xstormy16-ibld.c:1227 +#, c-format +msgid "internal error: unrecognized field %d while setting vma operand" +msgstr "унутрашња грешка: непознато поље %d приликом подешавања вма операнда" + +#: cgen-asm.c:373 #, c-format msgid "operand out of range (%lu not between %lu and %lu)" msgstr "операнд је ван опÑега (%lu није између %lu и %lu)" -#: d30v-dis.c:255 +#: d30v-dis.c:232 +#, c-format +msgid "illegal id (%d)" +msgstr "неиÑправан иб (%d)" + +#: d30v-dis.c:259 #, c-format msgid "<unknown register %d>" msgstr "<непознат региÑтар %d>" #. Can't happen. -#: dis-buf.c:60 +#: dis-buf.c:61 #, c-format msgid "Unknown error %d\n" msgstr "Ðепозната грешка %d\n" -#: dis-buf.c:69 +#: dis-buf.c:70 #, c-format msgid "Address 0x%s is out of bounds.\n" msgstr "ÐдреÑа 0Ñ…%s је изван граница.\n" +#: disassemble.c:840 +#, c-format +msgid "assertion fail %s:%d" +msgstr "неуÑпех тврдње „%s:%d“" + +#: disassemble.c:841 +msgid "Please report this bug" +msgstr "ИзвеÑтите о овој грешци" + #: epiphany-asm.c:68 msgid "register unavailable for short instructions" msgstr "региÑтар није доÑтупан за кратке инÑтрукције" @@ -375,7 +924,7 @@ #: lm32-asm.c:127 lm32-asm.c:157 lm32-asm.c:187 lm32-asm.c:217 lm32-asm.c:247 #: m32c-asm.c:140 m32c-asm.c:235 m32c-asm.c:276 m32c-asm.c:334 m32c-asm.c:355 #: m32r-asm.c:53 mep-asm.c:241 mep-asm.c:259 mep-asm.c:274 mep-asm.c:289 -#: mep-asm.c:301 openrisc-asm.c:54 +#: mep-asm.c:301 or1k-asm.c:54 msgid "missing `)'" msgstr "недоÑтаје )" @@ -387,163 +936,20 @@ msgid "Not a pc-relative address." msgstr "Ðије адреÑа која Ñе одноÑи на пц." -#: epiphany-asm.c:455 fr30-asm.c:310 frv-asm.c:1263 ip2k-asm.c:511 -#: iq2000-asm.c:459 lm32-asm.c:349 m32c-asm.c:1584 m32r-asm.c:328 -#: mep-asm.c:1286 mt-asm.c:595 openrisc-asm.c:241 xc16x-asm.c:376 -#: xstormy16-asm.c:276 -#, c-format -msgid "Unrecognized field %d while parsing.\n" -msgstr "Ðепознато поље %d приликом обраде.\n" - -#: epiphany-asm.c:506 fr30-asm.c:361 frv-asm.c:1314 ip2k-asm.c:562 -#: iq2000-asm.c:510 lm32-asm.c:400 m32c-asm.c:1635 m32r-asm.c:379 -#: mep-asm.c:1337 mt-asm.c:646 openrisc-asm.c:292 xc16x-asm.c:427 -#: xstormy16-asm.c:327 -msgid "missing mnemonic in syntax string" -msgstr "недоÑтаје мнемоник у ниÑци ÑинтакÑе" - -#. We couldn't parse it. -#: epiphany-asm.c:641 epiphany-asm.c:645 epiphany-asm.c:734 epiphany-asm.c:841 -#: fr30-asm.c:496 fr30-asm.c:500 fr30-asm.c:589 fr30-asm.c:696 frv-asm.c:1449 -#: frv-asm.c:1453 frv-asm.c:1542 frv-asm.c:1649 ip2k-asm.c:697 ip2k-asm.c:701 -#: ip2k-asm.c:790 ip2k-asm.c:897 iq2000-asm.c:645 iq2000-asm.c:649 -#: iq2000-asm.c:738 iq2000-asm.c:845 lm32-asm.c:535 lm32-asm.c:539 -#: lm32-asm.c:628 lm32-asm.c:735 m32c-asm.c:1770 m32c-asm.c:1774 -#: m32c-asm.c:1863 m32c-asm.c:1970 m32r-asm.c:514 m32r-asm.c:518 -#: m32r-asm.c:607 m32r-asm.c:714 mep-asm.c:1472 mep-asm.c:1476 mep-asm.c:1565 -#: mep-asm.c:1672 mt-asm.c:781 mt-asm.c:785 mt-asm.c:874 mt-asm.c:981 -#: openrisc-asm.c:427 openrisc-asm.c:431 openrisc-asm.c:520 openrisc-asm.c:627 -#: xc16x-asm.c:562 xc16x-asm.c:566 xc16x-asm.c:655 xc16x-asm.c:762 -#: xstormy16-asm.c:462 xstormy16-asm.c:466 xstormy16-asm.c:555 -#: xstormy16-asm.c:662 -msgid "unrecognized instruction" -msgstr "непозната инÑтрукција" - -#: epiphany-asm.c:688 fr30-asm.c:543 frv-asm.c:1496 ip2k-asm.c:744 -#: iq2000-asm.c:692 lm32-asm.c:582 m32c-asm.c:1817 m32r-asm.c:561 -#: mep-asm.c:1519 mt-asm.c:828 openrisc-asm.c:474 xc16x-asm.c:609 -#: xstormy16-asm.c:509 +#: epiphany-desc.c:2109 #, c-format -msgid "syntax error (expected char `%c', found `%c')" -msgstr "грешка ÑинтакÑе (очекивах знак „%c“, нађох „%c“)" - -#: epiphany-asm.c:698 fr30-asm.c:553 frv-asm.c:1506 ip2k-asm.c:754 -#: iq2000-asm.c:702 lm32-asm.c:592 m32c-asm.c:1827 m32r-asm.c:571 -#: mep-asm.c:1529 mt-asm.c:838 openrisc-asm.c:484 xc16x-asm.c:619 -#: xstormy16-asm.c:519 -#, c-format -msgid "syntax error (expected char `%c', found end of instruction)" -msgstr "грешка ÑинтакÑе (очекивах знак „%c“, нађох крај инÑтрукције)" - -#: epiphany-asm.c:728 fr30-asm.c:583 frv-asm.c:1536 ip2k-asm.c:784 -#: iq2000-asm.c:732 lm32-asm.c:622 m32c-asm.c:1857 m32r-asm.c:601 -#: mep-asm.c:1559 mt-asm.c:868 openrisc-asm.c:514 xc16x-asm.c:649 -#: xstormy16-asm.c:549 -msgid "junk at end of line" -msgstr "ђубре на крају реда" - -#: epiphany-asm.c:840 fr30-asm.c:695 frv-asm.c:1648 ip2k-asm.c:896 -#: iq2000-asm.c:844 lm32-asm.c:734 m32c-asm.c:1969 m32r-asm.c:713 -#: mep-asm.c:1671 mt-asm.c:980 openrisc-asm.c:626 xc16x-asm.c:761 -#: xstormy16-asm.c:661 -msgid "unrecognized form of instruction" -msgstr "непознат облик инÑтрукције" +msgid "internal error: epiphany_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" +msgstr "унутрашња грешка: epiphany_cgen_rebuild_tables: Ñукобљене „insn-chunk-bitsize“ вредноÑти: %d наÑпрам %d" -#: epiphany-asm.c:854 fr30-asm.c:709 frv-asm.c:1662 ip2k-asm.c:910 -#: iq2000-asm.c:858 lm32-asm.c:748 m32c-asm.c:1983 m32r-asm.c:727 -#: mep-asm.c:1685 mt-asm.c:994 openrisc-asm.c:640 xc16x-asm.c:775 -#: xstormy16-asm.c:675 +#: epiphany-desc.c:2197 #, c-format -msgid "bad instruction `%.50s...'" -msgstr "лоша инÑтрукција „%.50s...“" +msgid "internal error: epiphany_cgen_cpu_open: unsupported argument `%d'" +msgstr "унутрашња грешка: epiphany_cgen_cpu_open: неподржан аргумент „%d“" -#: epiphany-asm.c:857 fr30-asm.c:712 frv-asm.c:1665 ip2k-asm.c:913 -#: iq2000-asm.c:861 lm32-asm.c:751 m32c-asm.c:1986 m32r-asm.c:730 -#: mep-asm.c:1688 mt-asm.c:997 openrisc-asm.c:643 xc16x-asm.c:778 -#: xstormy16-asm.c:678 +#: epiphany-desc.c:2216 #, c-format -msgid "bad instruction `%.50s'" -msgstr "лоша инÑтрукција „%.50s“" - -#. Default text to print if an instruction isn't recognized. -#: epiphany-dis.c:41 fr30-dis.c:41 frv-dis.c:41 ip2k-dis.c:41 iq2000-dis.c:41 -#: lm32-dis.c:41 m32c-dis.c:41 m32r-dis.c:41 mep-dis.c:41 mmix-dis.c:276 -#: mt-dis.c:41 nds32-dis.c:56 openrisc-dis.c:41 xc16x-dis.c:41 -#: xstormy16-dis.c:41 -msgid "*unknown*" -msgstr "*непознато*" - -#: epiphany-dis.c:277 fr30-dis.c:299 frv-dis.c:396 ip2k-dis.c:288 -#: iq2000-dis.c:189 lm32-dis.c:147 m32c-dis.c:891 m32r-dis.c:279 -#: mep-dis.c:1187 mt-dis.c:290 openrisc-dis.c:135 xc16x-dis.c:420 -#: xstormy16-dis.c:168 -#, c-format -msgid "Unrecognized field %d while printing insn.\n" -msgstr "Ðепознато поље %d приликом иÑпиÑивања инÑн-а.\n" - -#: epiphany-ibld.c:164 fr30-ibld.c:164 frv-ibld.c:164 ip2k-ibld.c:164 -#: iq2000-ibld.c:164 lm32-ibld.c:164 m32c-ibld.c:164 m32r-ibld.c:164 -#: mep-ibld.c:164 mt-ibld.c:164 openrisc-ibld.c:164 xc16x-ibld.c:164 -#: xstormy16-ibld.c:164 -#, c-format -msgid "operand out of range (%ld not between %ld and %lu)" -msgstr "операнд је ван опÑега (%ld није између %ld и %lu)" - -#: epiphany-ibld.c:185 fr30-ibld.c:185 frv-ibld.c:185 ip2k-ibld.c:185 -#: iq2000-ibld.c:185 lm32-ibld.c:185 m32c-ibld.c:185 m32r-ibld.c:185 -#: mep-ibld.c:185 mt-ibld.c:185 openrisc-ibld.c:185 xc16x-ibld.c:185 -#: xstormy16-ibld.c:185 -#, c-format -msgid "operand out of range (0x%lx not between 0 and 0x%lx)" -msgstr "операнд је ван опÑега (0x%lx није између 0 и 0x%lx)" - -#: epiphany-ibld.c:872 fr30-ibld.c:727 frv-ibld.c:853 ip2k-ibld.c:604 -#: iq2000-ibld.c:710 lm32-ibld.c:631 m32c-ibld.c:1728 m32r-ibld.c:662 -#: mep-ibld.c:1205 mt-ibld.c:746 openrisc-ibld.c:630 xc16x-ibld.c:749 -#: xstormy16-ibld.c:675 -#, c-format -msgid "Unrecognized field %d while building insn.\n" -msgstr "Ðепознато поље %d приликом изградње инÑн-а.\n" - -#: epiphany-ibld.c:1166 fr30-ibld.c:932 frv-ibld.c:1170 ip2k-ibld.c:679 -#: iq2000-ibld.c:885 lm32-ibld.c:735 m32c-ibld.c:2889 m32r-ibld.c:799 -#: mep-ibld.c:1804 mt-ibld.c:966 openrisc-ibld.c:730 xc16x-ibld.c:969 -#: xstormy16-ibld.c:821 -#, c-format -msgid "Unrecognized field %d while decoding insn.\n" -msgstr "Ðепознато поље %d приликом декодирања инÑн-а.\n" - -#: epiphany-ibld.c:1309 fr30-ibld.c:1078 frv-ibld.c:1448 ip2k-ibld.c:753 -#: iq2000-ibld.c:1016 lm32-ibld.c:824 m32c-ibld.c:3506 m32r-ibld.c:912 -#: mep-ibld.c:2274 mt-ibld.c:1166 openrisc-ibld.c:807 xc16x-ibld.c:1190 -#: xstormy16-ibld.c:931 -#, c-format -msgid "Unrecognized field %d while getting int operand.\n" -msgstr "Ðепознато поље %d приликом добављања инт операнда.\n" - -#: epiphany-ibld.c:1434 fr30-ibld.c:1206 frv-ibld.c:1708 ip2k-ibld.c:809 -#: iq2000-ibld.c:1129 lm32-ibld.c:895 m32c-ibld.c:4105 m32r-ibld.c:1007 -#: mep-ibld.c:2726 mt-ibld.c:1348 openrisc-ibld.c:866 xc16x-ibld.c:1393 -#: xstormy16-ibld.c:1023 -#, c-format -msgid "Unrecognized field %d while getting vma operand.\n" -msgstr "Ðепознато поље %d приликом добављања вма операнда.\n" - -#: epiphany-ibld.c:1566 fr30-ibld.c:1337 frv-ibld.c:1975 ip2k-ibld.c:868 -#: iq2000-ibld.c:1249 lm32-ibld.c:973 m32c-ibld.c:4692 m32r-ibld.c:1108 -#: mep-ibld.c:3139 mt-ibld.c:1537 openrisc-ibld.c:932 xc16x-ibld.c:1597 -#: xstormy16-ibld.c:1122 -#, c-format -msgid "Unrecognized field %d while setting int operand.\n" -msgstr "Ðепознато поље %d приликом подешавања инт операнда.\n" - -#: epiphany-ibld.c:1688 fr30-ibld.c:1458 frv-ibld.c:2232 ip2k-ibld.c:917 -#: iq2000-ibld.c:1359 lm32-ibld.c:1041 m32c-ibld.c:5269 m32r-ibld.c:1199 -#: mep-ibld.c:3542 mt-ibld.c:1716 openrisc-ibld.c:988 xc16x-ibld.c:1791 -#: xstormy16-ibld.c:1211 -#, c-format -msgid "Unrecognized field %d while setting vma operand.\n" -msgstr "Ðепознато поље %d приликом подешавања вма операнда.\n" +msgid "internal error: epiphany_cgen_cpu_open: no endianness specified" +msgstr "унутрашња грешка: epiphany_cgen_cpu_open: ниÑу наведене крајњоÑти" #: fr30-asm.c:93 m32c-asm.c:872 m32c-asm.c:879 msgid "Register number is not valid" @@ -561,6 +967,21 @@ msgid "Register list is not valid" msgstr "СпиÑак региÑтра није иÑправан" +#: fr30-desc.c:1586 +#, c-format +msgid "internal error: fr30_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" +msgstr "унутрашња грешка: fr30_cgen_rebuild_tables: Ñукобљене „insn-chunk-bitsize“ вредноÑти: %d наÑпрам %d" + +#: fr30-desc.c:1674 +#, c-format +msgid "internal error: fr30_cgen_cpu_open: unsupported argument `%d'" +msgstr "унутрашња грешка: fr30_cgen_cpu_open: неподржан аргумент „%d“" + +#: fr30-desc.c:1693 +#, c-format +msgid "internal error: fr30_cgen_cpu_open: no endianness specified" +msgstr "унутрашња грешка: fr30_cgen_cpu_open: ниÑу наведене крајњоÑти" + #: frv-asm.c:608 msgid "missing `]'" msgstr "недоÑтаје ]" @@ -577,32 +998,51 @@ msgid "register number must be even" msgstr "број региÑтра мора бити паран" -#: h8300-dis.c:314 +#: frv-desc.c:6326 #, c-format -msgid "Hmmmm 0x%x" -msgstr "Hmmmm 0x%x" +msgid "internal error: frv_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" +msgstr "унутрашња грешка: frv_cgen_rebuild_tables: Ñукобљене „insn-chunk-bitsize“ вредноÑти: %d наÑпрам %d" -#: h8300-dis.c:695 +#: frv-desc.c:6414 #, c-format -msgid "Don't understand 0x%x \n" -msgstr "Ðе разумем 0x%x \n" +msgid "internal error: frv_cgen_cpu_open: unsupported argument `%d'" +msgstr "унутрашња грешка: frv_cgen_cpu_open: неподржан аргумент „%d“" + +#: frv-desc.c:6433 +#, c-format +msgid "internal error: frv_cgen_cpu_open: no endianness specified" +msgstr "унутрашња грешка: frv_cgen_cpu_open: ниÑу наведене крајњоÑти" + +#: frv-opc.c:459 +#, c-format +msgid "internal error: bad vliw->next_slot value" +msgstr "унутрашња грешка: лоша „vliw->next_slot“ вредноÑÑ‚" -#: h8500-dis.c:124 +#: frv-opc.c:769 #, c-format -msgid "can't cope with insert %d\n" -msgstr "не могу да умножим Ñа уметком %d\n" +msgid "internal error: bad major code" +msgstr "унутрашња грешка: лош главни код" -#. Couldn't understand anything. -#: h8500-dis.c:324 +#: frv-opc.c:819 #, c-format -msgid "%02x\t\t*unknown*" -msgstr "%02x\t\t*непознато*" +msgid "internal error: bad insn unit" +msgstr "унутрашња грешка: лоша инÑн јединица" + +#: h8300-dis.c:309 +#, c-format +msgid "Hmmmm 0x%x" +msgstr "Hmmmm 0x%x" + +#: h8300-dis.c:617 +#, c-format +msgid "Don't understand 0x%x \n" +msgstr "Ðе разумем 0x%x \n" -#: i386-dis.c:11550 +#: i386-dis.c:11040 msgid "<internal disassembler error>" msgstr "<унутрашња грешка разложитеља>" -#: i386-dis.c:11859 +#: i386-dis.c:11337 #, c-format msgid "" "\n" @@ -613,32 +1053,32 @@ "Следеће опције разложитеља Ñпецифичне за „i386/x86-64“ Ñу подржане за коришћење\n" "Ñа прекидачем „-M“ (више опција треба да Ñе раздвајају зарезима):\n" -#: i386-dis.c:11863 +#: i386-dis.c:11341 #, c-format msgid " x86-64 Disassemble in 64bit mode\n" msgstr " x86-64 Разлаже у режиму 64-бита\n" -#: i386-dis.c:11864 +#: i386-dis.c:11342 #, c-format msgid " i386 Disassemble in 32bit mode\n" msgstr " i386 Разлаже у режиму 32-бита\n" -#: i386-dis.c:11865 +#: i386-dis.c:11343 #, c-format msgid " i8086 Disassemble in 16bit mode\n" msgstr " i8086 Разлаже у режиму 16-бита\n" -#: i386-dis.c:11866 +#: i386-dis.c:11344 #, c-format msgid " att Display instruction in AT&T syntax\n" msgstr " att Приказује инÑтрукцију у ÑинтакÑи „AT&T“-ја\n" -#: i386-dis.c:11867 +#: i386-dis.c:11345 #, c-format msgid " intel Display instruction in Intel syntax\n" msgstr " intel Приказује инÑтрукцију у ÑинтакÑи Интела\n" -#: i386-dis.c:11868 +#: i386-dis.c:11346 #, c-format msgid "" " att-mnemonic\n" @@ -647,7 +1087,7 @@ " att-mnemonic\n" " Приказује инÑтрукцију у мнемонику „AT&T“-а\n" -#: i386-dis.c:11870 +#: i386-dis.c:11348 #, c-format msgid "" " intel-mnemonic\n" @@ -656,111 +1096,135 @@ " intel-mnemonic\n" " Приказује инÑтрукцију у мнемонику Интела\n" -#: i386-dis.c:11872 +#: i386-dis.c:11350 #, c-format msgid " addr64 Assume 64bit address size\n" msgstr " addr64 ПретпоÑтавља величину адреÑе од 64 бита\n" -#: i386-dis.c:11873 +#: i386-dis.c:11351 #, c-format msgid " addr32 Assume 32bit address size\n" msgstr " addr32 ПретпоÑтавља величину адреÑе од 32 бита\n" -#: i386-dis.c:11874 +#: i386-dis.c:11352 #, c-format msgid " addr16 Assume 16bit address size\n" msgstr " addr16 ПретпоÑтавља величину адреÑе од 16 бита\n" -#: i386-dis.c:11875 +#: i386-dis.c:11353 #, c-format msgid " data32 Assume 32bit data size\n" msgstr " data32 ПретпоÑтавља величину података од 32 бита\n" -#: i386-dis.c:11876 +#: i386-dis.c:11354 #, c-format msgid " data16 Assume 16bit data size\n" msgstr " data16 ПретпоÑтавља величину података од 16 бита\n" -#: i386-dis.c:11877 +#: i386-dis.c:11355 #, c-format msgid " suffix Always display instruction suffix in AT&T syntax\n" msgstr " suffix Увек приказује ÑÑƒÑ„Ð¸ÐºÑ Ð¸Ð½Ñтрукције у ÑинтакÑи „AT&T“-ја\n" -#: i386-gen.c:560 ia64-gen.c:307 +#: i386-dis.c:11356 #, c-format -msgid "%s: Error: " -msgstr "%s: Грешка: " +msgid " amd64 Display instruction in AMD64 ISA\n" +msgstr " amd64 Приказује инÑтрукцију у „AMD64 ISA“\n" + +#: i386-dis.c:11357 +#, c-format +msgid " intel64 Display instruction in Intel64 ISA\n" +msgstr " intel64 Приказује инÑтрукције у „Intel64 ISA“\n" + +#: i386-dis.c:11912 +msgid "64-bit address is disabled" +msgstr "64-битна адреÑа је иÑкључена" + +#: i386-gen.c:793 +#, c-format +msgid "%s: error: " +msgstr "%s: грешка: " -#: i386-gen.c:692 +#: i386-gen.c:960 #, c-format -msgid "%s: %d: Unknown bitfield: %s\n" -msgstr "%s: %d: Ðепознато поље бита: %s\n" +msgid "%s: %d: unknown bitfield: %s\n" +msgstr "%s: %d: непознато поље бита: %s\n" -#: i386-gen.c:694 +#: i386-gen.c:962 #, c-format -msgid "Unknown bitfield: %s\n" -msgstr "Ðепознато поље бита: %s\n" +msgid "unknown bitfield: %s\n" +msgstr "непознато поље бита: %s\n" -#: i386-gen.c:750 +#: i386-gen.c:1025 #, c-format -msgid "%s: %d: Missing `)' in bitfield: %s\n" -msgstr "%s: %d: ÐедоÑтаје ) у пољу бита: %s\n" +msgid "%s: %d: missing `)' in bitfield: %s\n" +msgstr "%s: %d: недоÑтаје ) у пољу бита: %s\n" -#: i386-gen.c:1015 +#: i386-gen.c:1126 #, c-format -msgid "can't find i386-opc.tbl for reading, errno = %s\n" -msgstr "не могу да нађем „i386-opc.tbl“ за читање, грешка = %s\n" +msgid "unknown broadcast operand: %s\n" +msgstr "непознат операнд емитовања: %s\n" -#: i386-gen.c:1146 +#: i386-gen.c:1777 #, c-format msgid "can't find i386-reg.tbl for reading, errno = %s\n" msgstr "не могу да нађем „i386-reg.tbl“ за читање, грешка = %s\n" -#: i386-gen.c:1223 +#: i386-gen.c:1855 #, c-format msgid "can't create i386-init.h, errno = %s\n" msgstr "не могу да направим „i386-init.h“, грешка = %s\n" -#: i386-gen.c:1312 ia64-gen.c:2830 +#: i386-gen.c:1945 ia64-gen.c:2829 #, c-format msgid "unable to change directory to \"%s\", errno = %s\n" msgstr "не могу да пређем у директоријум „%s“, гршка = %s\n" -#: i386-gen.c:1319 +#: i386-gen.c:1959 i386-gen.c:1964 +#, c-format +msgid "CpuMax != %d!\n" +msgstr "CpuMax != %d!\n" + +#: i386-gen.c:1968 #, c-format msgid "%d unused bits in i386_cpu_flags.\n" msgstr "%d некоришћена бита у „i386_cpu_flags“.\n" -#: i386-gen.c:1326 +#: i386-gen.c:1983 #, c-format msgid "%d unused bits in i386_operand_type.\n" msgstr "%d некоришћена бита у „i386_operand_type“.\n" -#: i386-gen.c:1340 +#: i386-gen.c:1997 #, c-format msgid "can't create i386-tbl.h, errno = %s\n" msgstr "не могу да направим „i386-tbl.h“, грешка = %s\n" -#: ia64-gen.c:320 +#: ia64-gen.c:306 +#, c-format +msgid "%s: Error: " +msgstr "%s: Грешка: " + +#: ia64-gen.c:319 #, c-format msgid "%s: Warning: " msgstr "%s: Упозорење: " -#: ia64-gen.c:506 ia64-gen.c:737 +#: ia64-gen.c:505 ia64-gen.c:736 #, c-format msgid "multiple note %s not handled\n" msgstr "ниÑам одрадио више белешки „%s“\n" -#: ia64-gen.c:617 +#: ia64-gen.c:616 msgid "can't find ia64-ic.tbl for reading\n" msgstr "не могу да нађем „ia64-ic.tbl“ за читање\n" -#: ia64-gen.c:819 +#: ia64-gen.c:818 #, c-format msgid "can't find %s for reading\n" msgstr "не могу да нађем „%s“ за читање\n" -#: ia64-gen.c:1051 +#: ia64-gen.c:1050 #, c-format msgid "" "most recent format '%s'\n" @@ -769,77 +1233,77 @@ "најновији формат „%s“\n" "изгледа ограниченији него „%s“\n" -#: ia64-gen.c:1062 +#: ia64-gen.c:1061 #, c-format msgid "overlapping field %s->%s\n" msgstr "преклапам поље %s—>%s\n" -#: ia64-gen.c:1259 +#: ia64-gen.c:1258 #, c-format msgid "overwriting note %d with note %d (IC:%s)\n" msgstr "препиÑујем белешку %d белешком %d (IC:%s)\n" -#: ia64-gen.c:1466 +#: ia64-gen.c:1465 #, c-format msgid "don't know how to specify %% dependency %s\n" msgstr "не знам како да наведем %% завиÑноÑÑ‚ „%s“\n" -#: ia64-gen.c:1488 +#: ia64-gen.c:1487 #, c-format msgid "Don't know how to specify # dependency %s\n" msgstr "Ðе знам како да наведем # завиÑноÑÑ‚ „%s“\n" -#: ia64-gen.c:1527 +#: ia64-gen.c:1526 #, c-format msgid "IC:%s [%s] has no terminals or sub-classes\n" msgstr "„IC:%s“ [%s] нема терминале или под-клаÑе\n" -#: ia64-gen.c:1530 +#: ia64-gen.c:1529 #, c-format msgid "IC:%s has no terminals or sub-classes\n" msgstr "„IC:%s“ нема терминале или под-клаÑе\n" -#: ia64-gen.c:1539 +#: ia64-gen.c:1538 #, c-format msgid "no insns mapped directly to terminal IC %s [%s]" -msgstr "ниједна инÑтрукција није мапирана директно у терминал ИЦ „%s“ [%s]" +msgstr "ниједна инÑтрукција није мапирана директно у терминал „IC %s“ [%s]" -#: ia64-gen.c:1542 +#: ia64-gen.c:1541 #, c-format msgid "no insns mapped directly to terminal IC %s\n" -msgstr "ниједна инÑтрукција није мапирана директно у терминал ИЦ „%s“\n" +msgstr "ниједна инÑтрукција није мапирана директно у терминал „IC %s“\n" -#: ia64-gen.c:1553 +#: ia64-gen.c:1552 #, c-format msgid "class %s is defined but not used\n" msgstr "клаÑа „%s“ је дефиниÑана али Ñе не кориÑти\n" -#: ia64-gen.c:1566 +#: ia64-gen.c:1565 #, c-format msgid "Warning: rsrc %s (%s) has no chks\n" msgstr "Упозорење: „rsrc“ „%s“ (%s) нема „chks“\n" -#: ia64-gen.c:1569 +#: ia64-gen.c:1568 #, c-format msgid "Warning: rsrc %s (%s) has no chks or regs\n" msgstr "Упозорење: „rsrc“ „%s“ (%s) нема „chks“ или „regs“\n" -#: ia64-gen.c:1573 +#: ia64-gen.c:1572 #, c-format msgid "rsrc %s (%s) has no regs\n" msgstr "„rsrc“ „%s“ (%s) нема „regs“\n" -#: ia64-gen.c:2465 +#: ia64-gen.c:2464 #, c-format msgid "IC note %d in opcode %s (IC:%s) conflicts with resource %s note %d\n" msgstr "ИЦ белешка %d у опкоду „%s“ (IC:%s) Ñе Ñукобљава Ñа извориштем „%s“ белешка %d\n" -#: ia64-gen.c:2493 +#: ia64-gen.c:2492 #, c-format msgid "IC note %d for opcode %s (IC:%s) conflicts with resource %s note %d\n" msgstr "ИЦ белешка %d за опкод „%s“ (IC:%s) Ñе Ñукобљава Ñа извориштем „%s“ белешка %d\n" -#: ia64-gen.c:2507 +#: ia64-gen.c:2506 #, c-format msgid "opcode %s has no class (ops %d %d %d)\n" msgstr "опкод „%s“ нема клаÑу (опције %d %d %d)\n" @@ -859,13 +1323,13 @@ #. of range. #: ip2k-asm.c:154 msgid "(DP) offset out of range." -msgstr "(ДП) померај је ван опÑега." +msgstr "(DP) померај је ван опÑега." #. Found something there in front of (SP) but it's out #. of range. #: ip2k-asm.c:195 msgid "(SP) offset out of range." -msgstr "(СП) померај је ван опÑега." +msgstr "(SP) померај је ван опÑега." #: ip2k-asm.c:211 msgid "illegal use of parentheses" @@ -896,6 +1360,21 @@ msgid "Attempt to find bit index of 0" msgstr "Покушавам да нађем Ð¸Ð½Ð´ÐµÐºÑ Ð±Ð¸Ñ‚Ð° 0" +#: ip2k-desc.c:1015 +#, c-format +msgid "internal error: ip2k_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" +msgstr "унутрашња грешка: ip2k_cgen_rebuild_tables: Ñукобљене „insn-chunk-bitsize“ вредноÑти: %d наÑпрам %d" + +#: ip2k-desc.c:1103 +#, c-format +msgid "internal error: ip2k_cgen_cpu_open: unsupported argument `%d'" +msgstr "унутрашња грешка: ip2k_cgen_cpu_open: неподржан аргумент „%d“" + +#: ip2k-desc.c:1122 +#, c-format +msgid "internal error: ip2k_cgen_cpu_open: no endianness specified" +msgstr "унутрашња грешка: ip2k_cgen_cpu_open: ниÑу наведене крајњоÑти" + #: iq2000-asm.c:112 iq2000-asm.c:142 msgid "immediate value cannot be register" msgstr "вредноÑÑ‚ непоÑредног не може бити региÑтар" @@ -908,6 +1387,21 @@ msgid "21-bit offset out of range" msgstr "Померај 21 бита је ван опÑега" +#: iq2000-desc.c:2020 +#, c-format +msgid "internal error: iq2000_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" +msgstr "унутрашња грешка: iq2000_cgen_rebuild_tables: Ñукобљене „insn-chunk-bitsize“ вредноÑти: %d наÑпрам %d" + +#: iq2000-desc.c:2108 +#, c-format +msgid "internal error: iq2000_cgen_cpu_open: unsupported argument `%d'" +msgstr "унутрашња грешка: iq2000_cgen_cpu_open: неподржан аргумент „%d“" + +#: iq2000-desc.c:2127 +#, c-format +msgid "internal error: iq2000_cgen_cpu_open: no endianness specified" +msgstr "унутрашња грешка: iq2000_cgen_cpu_open: ниÑу наведене крајњоÑти" + #: lm32-asm.c:166 msgid "expecting gp relative address: gp(symbol)" msgstr "очекујем „gp“ одноÑну адреÑу: gp(symbol)" @@ -924,12 +1418,27 @@ msgid "expecting got relative address: gotofflo16(symbol)" msgstr "очекујем „got“ одноÑну адреÑу: gotofflo16(symbol)" -#: m10200-dis.c:158 m10300-dis.c:581 +#: lm32-desc.c:1002 +#, c-format +msgid "internal error: lm32_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" +msgstr "унутрашња грешка: lm32_cgen_rebuild_tables: Ñукобљене „insn-chunk-bitsize“ вредноÑти: %d наÑпрам %d" + +#: lm32-desc.c:1090 +#, c-format +msgid "internal error: lm32_cgen_cpu_open: unsupported argument `%d'" +msgstr "унутрашња грешка: lm32_cgen_cpu_open: неподржан аргумент „%d“" + +#: lm32-desc.c:1109 +#, c-format +msgid "internal error: lm32_cgen_cpu_open: no endianness specified" +msgstr "унутрашња грешка: lm32_cgen_cpu_open: ниÑу наведене крајњоÑти" + +#: m10200-dis.c:151 m10300-dis.c:574 #, c-format msgid "unknown\t0x%04lx" msgstr "непознато 0x%04lx" -#: m10200-dis.c:328 +#: m10200-dis.c:321 #, c-format msgid "unknown\t0x%02lx" msgstr "непознато 0x%02lx" @@ -1008,21 +1517,46 @@ msgid "Invalid size specifier" msgstr "ÐеиÑправан одредник величине" -#: m68k-dis.c:1281 +#: m32c-desc.c:63033 +#, c-format +msgid "internal error: m32c_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" +msgstr "унутрашња грешка: m32_cgen_rebuild_tables: Ñукобљене „insn-chunk-bitsize“ вредноÑти: %d наÑпрам %d" + +#: m32c-desc.c:63121 +#, c-format +msgid "internal error: m32c_cgen_cpu_open: unsupported argument `%d'" +msgstr "унутрашња грешка: m32_cgen_cpu_open: неподржан аргумент „%d“" + +#: m32c-desc.c:63140 +#, c-format +msgid "internal error: m32c_cgen_cpu_open: no endianness specified" +msgstr "унутрашња грешка: m32_cgen_cpu_open: ниÑу наведене крајњоÑти" + +#: m32r-desc.c:1365 +#, c-format +msgid "internal error: m32r_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" +msgstr "унутрашња грешка: m32r_cgen_rebuild_tables: Ñукобљене „insn-chunk-bitsize“ вредноÑти: %d наÑпрам %d" + +#: m32r-desc.c:1453 +#, c-format +msgid "internal error: m32r_cgen_cpu_open: unsupported argument `%d'" +msgstr "унутрашња грешка: m32r_cgen_cpu_open: неподржан аргумент „%d“" + +#: m32r-desc.c:1472 +#, c-format +msgid "internal error: m32r_cgen_cpu_open: no endianness specified" +msgstr "унутрашња грешка: m32r_cgen_cpu_open: ниÑу наведене крајњоÑти" + +#: m68k-dis.c:1294 #, c-format msgid "<function code %d>" msgstr "<код функције %d>" -#: m68k-dis.c:1440 +#: m68k-dis.c:1457 #, c-format msgid "<internal error in opcode table: %s %s>\n" msgstr "<унутрашња грешка у табели опкода: %s %s>\n" -#: m88k-dis.c:679 -#, c-format -msgid "# <dis error: %08lx>" -msgstr "# <грешка диÑ-а: %08lx>" - #: mep-asm.c:129 msgid "Only $tp or $13 allowed for this opcode" msgstr "Само „$tp“ или „$13“ је дозвољено за овај опкод" @@ -1056,168 +1590,189 @@ msgid "Value is not aligned enough" msgstr "ВредноÑÑ‚ није довољно поравната" -#: mips-dis.c:1392 mips-dis.c:1580 +#: mep-desc.c:6226 #, c-format -msgid "# internal error, undefined operand in `%s %s'" -msgstr "# унутрашња грешка, неодређени операнд у „%s %s“" +msgid "internal error: mep_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" +msgstr "унутрашња грешка: mep_cgen_rebuild_tables: Ñукобљене „insn-chunk-bitsize“ вредноÑти: %d наÑпрам %d" -#: mips-dis.c:2190 +#: mep-desc.c:6314 #, c-format -msgid "" -"\n" -"The following MIPS specific disassembler options are supported for use\n" -"with the -M switch (multiple options should be separated by commas):\n" -msgstr "" -"\n" -"Следеће опције разложитеља Ñпецифичне за „MIPS“ Ñу подржане за коришћење\n" -"Ñа прекидачем „-M“ (више опција треба да Ñе раздвајају зарезима):\n" +msgid "internal error: mep_cgen_cpu_open: unsupported argument `%d'" +msgstr "унутрашња грешка: mep_cgen_cpu_open: неподржан аргумент „%d“" -#: mips-dis.c:2194 +#: mep-desc.c:6333 #, c-format -msgid "" -"\n" -" msa Recognize MSA instructions.\n" -msgstr "" -"\n" -" msa Препознаје МСРинÑтрукције.\n" +msgid "internal error: mep_cgen_cpu_open: no endianness specified" +msgstr "унутрашња грешка: mep_cgen_cpu_open: ниÑу наведене крајњоÑти" -#: mips-dis.c:2197 +#: mips-dis.c:1805 mips-dis.c:2031 #, c-format -msgid "" -"\n" -" virt Recognize the virtualization ASE instructions.\n" -msgstr "" -"\n" -" virt Препознаје ÐСЕ инÑтрукције виртуелизације.\n" +msgid "# internal error, undefined operand in `%s %s'" +msgstr "# унутрашња грешка, неодређени операнд у „%s %s“" -#: mips-dis.c:2200 -#, c-format +#: mips-dis.c:2620 +msgid "Use canonical instruction forms.\n" +msgstr "КориÑти облике пропиÑне инÑтрукције.\n" + +#: mips-dis.c:2622 +msgid "Recognize MSA instructions.\n" +msgstr "Препознаје „MSA“ инÑтрукције.\n" + +#: mips-dis.c:2624 +msgid "Recognize the virtualization ASE instructions.\n" +msgstr "Препознаје „ASE“ инÑтрукције виртуелизације.\n" + +#: mips-dis.c:2626 msgid "" -"\n" -" gpr-names=ABI Print GPR names according to specified ABI.\n" -" Default: based on binary being disassembled.\n" +"Recognize the eXtended Physical Address (XPA) ASE\n" +" instructions.\n" msgstr "" -"\n" -" gpr-names=ÐБИ ИÑпиÑује ГПР називе у Ñкладу Ñа наведеним ÐБИ-јем.\n" -" ОÑновно: у завиÑноÑти од разложеног бинарног.\n" +"Препознаје „eXtended Physical Address (XPA) ASE“\n" +" инÑтрукције.\n" -#: mips-dis.c:2204 -#, c-format +#: mips-dis.c:2629 +msgid "Recognize the Global INValidate (GINV) ASE instructions.\n" +msgstr "Препознаје „Global INValidate (GINV) ASE“ инÑтрукције.\n" + +#: mips-dis.c:2633 +msgid "Recognize the Loongson MultiMedia extensions Instructions (MMI) ASE instructions.\n" +msgstr "Препознаје „Loongson MultiMedia extensions Instructions (MMI) ASE“ инÑтрукције.\n" + +#: mips-dis.c:2637 +msgid "Recognize the Loongson Content Address Memory (CAM) instructions.\n" +msgstr "Препознаје „Loongson Content Address Memory (CAM)“ инÑтрукције.\n" + +#: mips-dis.c:2641 +msgid "Recognize the Loongson EXTensions (EXT) instructions.\n" +msgstr "Препознаје „Loongson EXTensions (EXT)“ инÑтрукције.\n" + +#: mips-dis.c:2645 +msgid "Recognize the Loongson EXTensions R2 (EXT2) instructions.\n" +msgstr "Препознаје „Loongson EXTensions R2 (EXT2)“ инÑтрукције.\n" + +#: mips-dis.c:2648 msgid "" -"\n" -" fpr-names=ABI Print FPR names according to specified ABI.\n" -" Default: numeric.\n" +"Print GPR names according to specified ABI.\n" +" Default: based on binary being disassembled.\n" msgstr "" -"\n" -" fpr-names=ÐБИ ИÑпиÑује ФПР називе у Ñкладу Ñа наведеним ÐБИ-јем.\n" -" ОÑновно: број.\n" +"ИÑпиÑује „GPR“ називе у Ñкладу Ñа наведеним „ABI“-јем.\n" +" ОÑновно: у завиÑноÑти од разложеног бинарног.\n" -#: mips-dis.c:2208 -#, c-format +#: mips-dis.c:2651 msgid "" -"\n" -" cp0-names=ARCH Print CP0 register names according to\n" -" specified architecture.\n" -" Default: based on binary being disassembled.\n" +"Print FPR names according to specified ABI.\n" +" Default: numeric.\n" msgstr "" -"\n" -" cp0-names=ÐРХТ ИÑпиÑује називе ЦП0 региÑтра у Ñкладу\n" -" Ñа наведеном архитектуром.\n" -" ОÑновно: у завиÑноÑти од разложеног бинарног.\n" +"ИÑпиÑује „FPR“ називе у Ñкладу Ñа наведеним „ABI“-јем.\n" +" ОÑновно: број.\n" -#: mips-dis.c:2213 -#, c-format +#: mips-dis.c:2654 msgid "" -"\n" -" hwr-names=ARCH Print HWR names according to specified \n" -"\t\t\t architecture.\n" -" Default: based on binary being disassembled.\n" +"Print CP0 register names according to specified architecture.\n" +" Default: based on binary being disassembled.\n" msgstr "" -"\n" -" hwr-names=ÐРХТ ИÑпиÑује ХВР називе у Ñкладу\n" -" Ñа наведеном архитектуром.\n" -" ОÑновно: у завиÑноÑти од разложеног бинарног.\n" +"ИÑпиÑује „CP0“ називе региÑтра у Ñкладу Ñа наведеном архитектуром.\n" +" ОÑновно: у завиÑноÑти од разложеног бинарног.\n" -#: mips-dis.c:2218 -#, c-format +#: mips-dis.c:2658 msgid "" -"\n" -" reg-names=ABI Print GPR and FPR names according to\n" -" specified ABI.\n" +"Print HWR names according to specified architecture.\n" +" Default: based on binary being disassembled.\n" msgstr "" -"\n" -" reg-names=ÐБИ ИÑпиÑује ГПР и ФПР називе у Ñкладу\n" -" Ñа наведеним ÐБИ-јем.\n" +"ИÑпиÑује „HWR“ називе у Ñкладу Ñа наведеном архитектуром.\n" +" ОÑновно: у завиÑноÑти од разложеног бинарног.\n" -#: mips-dis.c:2222 -#, c-format +#: mips-dis.c:2661 +msgid "Print GPR and FPR names according to specified ABI.\n" +msgstr "ИÑпиÑује „GPR“ и „FPR“ називе у Ñкладу Ñа наведеним „ABI“-јем.\n" + +#: mips-dis.c:2663 msgid "" -"\n" -" reg-names=ARCH Print CP0 register and HWR names according to\n" -" specified architecture.\n" +"Print CP0 register and HWR names according to specified\n" +" architecture." msgstr "" -"\n" -" reg-names=ÐРХТ ИÑпиÑује ЦП0 региÑтар и ХВР називе у Ñкладу\n" -" Ñа наведеном архитектуром.\n" +"ИÑпиÑује „CP0“ региÑтар и „HWR“ називе у Ñкладу Ñа наведеном\n" +" архитектуром." -#: mips-dis.c:2226 +#: mips-dis.c:2749 #, c-format msgid "" "\n" -" For the options above, the following values are supported for \"ABI\":\n" -" " +"The following MIPS specific disassembler options are supported for use\n" +"with the -M switch (multiple options should be separated by commas):\n" +"\n" msgstr "" "\n" -" За опције изнад, Ñледеће опције Ñу подржане за „ÐБИ“:\n" -" " +"Следеће опције разложитеља Ñпецифичне за „MIPS“ Ñу подржане за коришћење\n" +"Ñа прекидачем „-M“ (више опција треба да Ñе раздвајају зарезима):\n" +"\n" -#: mips-dis.c:2233 +#: mips-dis.c:2783 #, c-format msgid "" "\n" -" For the options above, The following values are supported for \"ARCH\":\n" +" For the options above, the following values are supported for \"%s\":\n" " " msgstr "" "\n" -" За опције изнад, Ñледеће опције Ñу подржане за „ÐРХТ“:\n" +" За опције изнад, Ñледеће опције Ñу подржане за „%s“:\n" " " -#: mmix-dis.c:34 +#: mmix-dis.c:33 #, c-format -msgid "Bad case %d (%s) in %s:%d\n" -msgstr "Лош Ñлучај %d (%s) у „%s:%d“\n" +msgid "bad case %d (%s) in %s:%d" +msgstr "лош Ñлучај %d (%s) у „%s:%d“" -#: mmix-dis.c:44 +#: mmix-dis.c:42 #, c-format -msgid "Internal: Non-debugged code (test-case missing): %s:%d" -msgstr "Унутрашње: Код не-прочишћавања (недоÑтаје Ñлучај теÑта): %s:%d" +msgid "internal: non-debugged code (test-case missing): %s:%d" +msgstr "унутрашње: не-прочишћени код (недоÑтаје Ñлучај теÑта): %s:%d" -#: mmix-dis.c:53 +#: mmix-dis.c:52 msgid "(unknown)" msgstr "(непознато)" -#: mmix-dis.c:511 +#: mmix-dis.c:247 mmix-dis.c:255 +msgid "*illegal*" +msgstr "*неиÑправно*" + +#: mmix-dis.c:529 #, c-format msgid "*unknown operands type: %d*" msgstr "*непозната врÑта операнда: %d*" -#: msp430-dis.c:412 -msgid "Illegal as emulation instr" -msgstr "ÐеиÑправно као инÑтрукција емулације" +#: msp430-decode.opc:145 rl78-decode.opc:106 +#, c-format +msgid "internal error: immediate() called with invalid byte count %d" +msgstr "унутрашња грешка: „immediate()“ је позвано Ñа неиÑправним бројем бајта %d" + +#: msp430-dis.c:59 +#, c-format +msgid "Warning: disassembly unreliable - not enough bytes available" +msgstr "Упозорење: разложитељ је непоуздан – недовољно доÑтупних бајтова" + +#: msp430-dis.c:65 +#, c-format +msgid "Error: read from memory failed" +msgstr "Грешка: читање из меморије није уÑпело" + +#: msp430-dis.c:499 +msgid "Warning: illegal as emulation instr" +msgstr "Упозорењ: неиÑправно као инÑтрукција емулације" #. R2/R3 are illegal as dest: may be data section. -#: msp430-dis.c:487 -msgid "Illegal as 2-op instr" -msgstr "ÐеиÑправно као 2-оп инÑтрукција" - -#: msp430-dis.c:839 -msgid "unrecognised CALLA addressing mode" -msgstr "непознат режим ЦÐЛЛРадреÑирања" +#: msp430-dis.c:591 +msgid "Warning: illegal as 2-op instr" +msgstr "Упозорење: неиÑправно као 2-оп инÑтрукција" + +#: msp430-dis.c:1002 +msgid "Warning: unrecognised CALLA addressing mode" +msgstr "Упозорење: непознат режим „CALLA“ адреÑирања" -#: msp430-dis.c:1110 msp430-dis.c:1127 msp430-dis.c:1148 +#: msp430-dis.c:1303 msp430-dis.c:1324 msp430-dis.c:1345 #, c-format -msgid "Reserved use of A/L and B/W bits detected" -msgstr "Откривена је резервиÑана употреба „A/L“ и „B/W“ битова" +msgid "Warning: reserved use of A/L and B/W bits detected" +msgstr "Упозорење: откривена је резервиÑана употреба „A/L“ и „B/W“ битова" #: mt-asm.c:110 mt-asm.c:190 msgid "Operand out of range. Must be between -32768 and 32767." @@ -1235,6 +1790,114 @@ msgid "invalid operand. type may have values 0,1,2 only." msgstr "неиÑправан операнд. врÑта може имати Ñамо вредноÑти 0,1,2." +#: mt-desc.c:1146 +#, c-format +msgid "internal error: mt_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" +msgstr "унутрашња грешка: mt_cgen_rebuild_tables: Ñукобљене „insn-chunk-bitsize“ вредноÑти: %d наÑпрам %d" + +#: mt-desc.c:1234 +#, c-format +msgid "internal error: mt_cgen_cpu_open: unsupported argument `%d'" +msgstr "унутрашња грешка: mt_cgen_cpu_open: неподржан аргумент „%d“" + +#: mt-desc.c:1253 +#, c-format +msgid "internal error: mt_cgen_cpu_open: no endianness specified" +msgstr "унутрашња грешка: mt_cgen_cpu_open: ниÑу наведене крајњоÑти" + +#: nds32-asm.c:1760 +#, c-format +msgid "internal error: unknown operand, %s" +msgstr "унутрашња грешка: непознат операнд, „%s“" + +#: nds32-asm.c:2396 +#, c-format +msgid "internal error: don't know how to handle parsing results" +msgstr "унутрашња грешка: немам појма шта даље Ñа резултатима обраде" + +#: nds32-asm.c:2404 +#, c-format +msgid "internal error: unknown hardware resource" +msgstr "унутрашња грешка: непознати хардверÑки реÑурÑи" + +#: nds32-dis.c:1186 +msgid "insufficient data to decode instruction" +msgstr "недовољно података за декодирање инÑтрукције" + +#: nfp-dis.c:927 +msgid "<invalid_instruction>:" +msgstr "<неиÑправна_инÑтрукција>:" + +#: nfp-dis.c:1331 +msgid ", <invalid CRC operator>, " +msgstr ", <неиÑправан „CRC“ оператор>, " + +#: nfp-dis.c:1683 +msgid "<invalid branch>[" +msgstr "<неиÑправна грана>[" + +#: nfp-dis.c:2052 nfp-dis.c:2323 +#, c-format +msgid "<invalid cmd target %d:%d:%d>[]" +msgstr "<неиÑправна мета наредбе %d:%d:%d>[]" + +#: nfp-dis.c:2063 nfp-dis.c:2334 +#, c-format +msgid "<invalid cmd action %d:%d:%d>[]" +msgstr "<неиÑправна радња наредбе %d:%d:%d>[]" + +#: nfp-dis.c:2555 +msgid "File has no ME-Config section." +msgstr "Датотека нема одељак „ME“-Подешавања." + +#: nfp-dis.c:2569 +msgid "File has invalid ME-Config section." +msgstr "Датотека има неиÑправан одељак „ME“-Подешавања." + +#: nfp-dis.c:2711 +#, c-format +msgid "Error processing section %u " +msgstr "Грешка обраде одељка %u " + +#: nfp-dis.c:2740 +#, c-format +msgid "Invalid NFP option: %s" +msgstr "ÐеиÑправна „NFP“ опција: %s" + +#: nfp-dis.c:2972 +#, c-format +msgid "" +"\n" +"The following NFP specific disassembler options are supported for use\n" +"with the -M switch (multiple options should be separated by commas):\n" +msgstr "" +"\n" +"Следеће опције разложитеља Ñпецифичне за „NFP“ Ñу подржане за коришћење\n" +"Ñа прекидачем „-M“ (више опција треба да Ñе раздвајају зарезима):\n" + +#: nfp-dis.c:2976 +#, c-format +msgid "" +"\n" +" no-pc\t\t Don't print program counter prefix.\n" +" ctx4\t\t Force disassembly using 4-context mode.\n" +" ctx8\t\t Force 8-context mode, takes precedence." +msgstr "" +"\n" +" no-pc\t\t Ðе иÑпиÑује Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ Ð±Ñ€Ð¾Ñ˜Ð°Ñ‡Ð° прогама.\n" +" ctx4\t\t Приморава разложитеља да кориÑти 4-контекÑтни режим.\n" +" ctx8\t\t Приморава 8-контекÑтни режим, таје предноÑÑ‚." + +#: nios2-dis.c:135 +#, c-format +msgid "out of memory" +msgstr "нема више меморије" + +#: nios2-dis.c:263 +#, c-format +msgid "internal error: broken opcode descriptor for `%s %s'" +msgstr "унутрашња грешка: оштећен опиÑник опкода за „%s %s“" + #. I and Z are output operands and can`t be immediate #. A is an address and we can`t have the address of #. an immediate either. We don't know how much to increase @@ -1245,12 +1908,35 @@ msgid "$<undefined>" msgstr "$<неодређено>" -#: ppc-dis.c:320 +#: or1k-asm.c:55 +msgid "relocation invalid for store" +msgstr "премештај је неиÑправан за Ñпремиште" + +#: or1k-asm.c:56 +msgid "internal relocation type invalid" +msgstr "унутрашња врÑта премештаја је неиÑправна" + +#: or1k-desc.c:2040 +#, c-format +msgid "internal error: or1k_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" +msgstr "унутрашња грешка: or1k_cgen_rebuild_tables: Ñукобљене „insn-chunk-bitsize“ вредноÑти: %d наÑпрам %d" + +#: or1k-desc.c:2128 +#, c-format +msgid "internal error: or1k_cgen_cpu_open: unsupported argument `%d'" +msgstr "унутрашња грешка: or1k_cgen_cpu_open: неподржан аргумент „%d“" + +#: or1k-desc.c:2147 +#, c-format +msgid "internal error: or1k_cgen_cpu_open: no endianness specified" +msgstr "унутрашња грешка: or1k_cgen_cpu_open: ниÑу наведене крајњоÑти" + +#: ppc-dis.c:386 #, c-format -msgid "warning: ignoring unknown -M%s option\n" -msgstr "упозорење: занемарујем непознату опцију „-M%s“\n" +msgid "warning: ignoring unknown -M%s option" +msgstr "упозорење: занемарујем непознату опцију „-M%s“" -#: ppc-dis.c:745 +#: ppc-dis.c:977 #, c-format msgid "" "\n" @@ -1261,117 +1947,308 @@ "Следеће опције разложитеља Ñпецифичне за „PPC“ Ñу подржане за коришћење Ñа\n" "прекидачем „-M“:\n" -#: ppc-opc.c:887 ppc-opc.c:910 ppc-opc.c:935 ppc-opc.c:964 +#: ppc-opc.c:51 ppc-opc.c:74 ppc-opc.c:100 ppc-opc.c:130 msgid "invalid register" msgstr "неиÑправан региÑтар" -#: ppc-opc.c:1212 ppc-opc.c:1242 +#: ppc-opc.c:396 msgid "invalid conditional option" msgstr "неиÑправна уÑловна опција" -#: ppc-opc.c:1214 ppc-opc.c:1244 +#: ppc-opc.c:399 msgid "invalid counter access" msgstr "неиÑправан приÑтуп бројача" -#: ppc-opc.c:1246 +#: ppc-opc.c:463 +msgid "BO value implies no branch hint, when using + or - modifier" +msgstr "„BO“ вредноÑÑ‚ подразумева без поготка гране, када кориÑтим + или - измењивач" + +#: ppc-opc.c:468 msgid "attempt to set y bit when using + or - modifier" msgstr "покуђавам да подеÑим „y“ бит када кориÑтим + или - измењивач" -#: ppc-opc.c:1278 +#: ppc-opc.c:470 +msgid "attempt to set 'at' bits when using + or - modifier" +msgstr "покуђавам да подеÑим „at“ битове када кориÑтим + или - измењивач" + +#: ppc-opc.c:677 +msgid "invalid R operand" +msgstr "неиÑправан „R“ операнд" + +#: ppc-opc.c:732 msgid "invalid mask field" msgstr "неиÑправно поље маÑке" -#: ppc-opc.c:1304 -msgid "ignoring invalid mfcr mask" -msgstr "занемарујем неиÑправну „mfcr“ маÑку" +#: ppc-opc.c:755 +msgid "invalid mfcr mask" +msgstr "неиÑправна „mfcr“ маÑка" + +#: ppc-opc.c:873 ppc-opc.c:891 +msgid "illegal L operand value" +msgstr "неиÑправна вредноÑÑ‚ „L“ операнда" + +#: ppc-opc.c:914 +msgid "illegal WC operand value" +msgstr "неиÑправна вредноÑÑ‚ „WC“ операнда" + +#: ppc-opc.c:1011 +msgid "incompatible L operand value" +msgstr "неÑаглаÑна вредноÑÑ‚ „L“ операнда" -#: ppc-opc.c:1403 ppc-opc.c:1438 +#: ppc-opc.c:1051 ppc-opc.c:1086 msgid "illegal bitmask" msgstr "неиÑправна битмаÑка" -#: ppc-opc.c:1525 +#: ppc-opc.c:1173 msgid "address register in load range" msgstr "региÑтар адреÑе у опÑегу учитавања" -#: ppc-opc.c:1578 +#: ppc-opc.c:1213 +msgid "illegal PL operand value" +msgstr "неиÑправна вредноÑÑ‚ „PL“ операнда" + +#: ppc-opc.c:1274 msgid "index register in load range" msgstr "региÑтар индекÑа у опÑегу учитавања" -#: ppc-opc.c:1594 ppc-opc.c:1650 +#: ppc-opc.c:1303 ppc-opc.c:1389 msgid "source and target register operands must be different" msgstr "операнди изворног и циљног региÑтра морају бити различити" -#: ppc-opc.c:1609 +#: ppc-opc.c:1334 msgid "invalid register operand when updating" msgstr "неиÑправан операнд региÑтра приликом оÑвежавања" -#: ppc-opc.c:1700 +#: ppc-opc.c:1452 msgid "illegal immediate value" msgstr "неиÑправна вредноÑÑ‚ непоÑредног" -#: ppc-opc.c:1839 +#: ppc-opc.c:1557 +msgid "invalid bat number" +msgstr "неиÑправан бат број" + +#: ppc-opc.c:1592 msgid "invalid sprg number" msgstr "неиÑправан Ñпрг број" -#: ppc-opc.c:2009 +#: ppc-opc.c:1629 +msgid "invalid tbr number" +msgstr "неиÑправан тбр број" + +#: ppc-opc.c:1715 ppc-opc.c:1761 +msgid "VSR overlaps ACC operand" +msgstr "„VSR“ преклапа „ACC“ операнд" + +#: ppc-opc.c:1868 msgid "invalid constant" msgstr "неиÑправна конÑтанта" -#: s390-dis.c:291 +#: ppc-opc.c:1970 ppc-opc.c:1993 ppc-opc.c:2016 ppc-opc.c:2039 +msgid "UIMM = 00000 is illegal" +msgstr "„UIMM = 00000“ је неиÑправно" + +#: ppc-opc.c:2062 +msgid "UIMM values >7 are illegal" +msgstr "„UIMM“ вредноÑти >7 Ñу неиÑправне" + +#: ppc-opc.c:2085 +msgid "UIMM values >15 are illegal" +msgstr "„UIMM“ вредноÑти >15 Ñу неиÑправне" + +#: ppc-opc.c:2108 +msgid "GPR odd is illegal" +msgstr "непарно „GPR“ је неиÑправно" + +#: ppc-opc.c:2131 ppc-opc.c:2154 +msgid "invalid offset" +msgstr "неиÑправан померај" + +#: ppc-opc.c:2177 +msgid "invalid Ddd value" +msgstr "неиÑправна „Ddd“ вредноÑÑ‚" + +#. The option without '=' should be defined above. +#: riscv-dis.c:85 riscv-dis.c:109 +#, c-format +msgid "unrecognized disassembler option: %s" +msgstr "непозната опција разложитеља: %s" + +#. Invalid options with '=', no option name before '=', +#. and no value after '='. +#: riscv-dis.c:93 +#, c-format +msgid "unrecognized disassembler option with '=': %s" +msgstr "непозната опција разложитеља Ñа знаком =: %s" + +#: riscv-dis.c:103 +#, c-format +msgid "unknown privilege spec set by %s=%s" +msgstr "непозната одредба привилегије поÑтављена Ñа „%s=%s“" + +#: riscv-dis.c:406 +#, c-format +msgid "# internal error, undefined modifier (%c)" +msgstr "# унутрашња грешка, неодређени измењивач (%c)" + +#: riscv-dis.c:605 #, c-format msgid "" "\n" -"The following S/390 specific disassembler options are supported for use\n" +"The following RISC-V-specific disassembler options are supported for use\n" "with the -M switch (multiple options should be separated by commas):\n" msgstr "" "\n" -"Следеће опције разложитеља Ñпецифичне за „S/390“ Ñу подржане за коришћење\n" +"Следеће опције разложитеља Ñпецифичне за „RISC-V-“ Ñу подржане за коришћење\n" "Ñа прекидачем „-M“ (више опција треба да Ñе раздвајају зарезима):\n" -#: s390-dis.c:295 +#: riscv-dis.c:609 #, c-format -msgid " esa Disassemble in ESA architecture mode\n" -msgstr " esa Разлаже у режиму ЕСРархитектуре\n" +msgid "" +"\n" +" numeric Print numeric register names, rather than ABI names.\n" +msgstr "" +"\n" +" numeric ИÑпиÑује бројчане називе региÑтра, радије него „ABI“ називе.\n" -#: s390-dis.c:296 +#: riscv-dis.c:612 #, c-format -msgid " zarch Disassemble in z/Architecture mode\n" -msgstr " zarch Разлаже у режиму з/Ðрхитектуре\n" +msgid "" +"\n" +" no-aliases Disassemble only into canonical instructions, rather\n" +" than into pseudoinstructions.\n" +msgstr "" +"\n" +" no-aliases Разлаже Ñамо у пропиÑне инÑтрукције, радије него\n" +" у пÑеудоинÑтрукције.\n" -#: score-dis.c:662 score-dis.c:869 score-dis.c:1030 score-dis.c:1144 -#: score-dis.c:1151 score-dis.c:1158 score7-dis.c:694 score7-dis.c:857 -msgid "<illegal instruction>" -msgstr "<неиÑправна инÑтрукција>" +#: riscv-dis.c:616 +#, c-format +msgid "" +"\n" +" priv-spec=PRIV Print the CSR according to the chosen privilege spec\n" +" (1.9, 1.9.1, 1.10, 1.11).\n" +msgstr "" +"\n" +" priv-spec=ПРИВ ИÑпиÑује „CSR“ у Ñкладу Ñа изабраном одредбом привилегије\n" +" (1.9, 1.9.1, 1.10, 1.11).\n" + +#: rx-dis.c:139 rx-dis.c:163 rx-dis.c:171 rx-dis.c:179 rx-dis.c:187 +msgid "<invalid register number>" +msgstr "<неиÑправан број региÑтра>" -#: sparc-dis.c:286 +#: rx-dis.c:147 rx-dis.c:195 +msgid "<invalid condition code>" +msgstr "<неиÑправан код уÑлова>" + +#: rx-dis.c:155 +msgid "<invalid flag>" +msgstr "<неиÑправн азаÑтавица>" + +#: rx-dis.c:203 +msgid "<invalid opsize>" +msgstr "<неиÑправна оп_величина>" + +#: rx-dis.c:211 +msgid "<invalid size>" +msgstr "<неиÑправна величина>" + +#: s12z-dis.c:251 s12z-dis.c:308 s12z-dis.c:319 +msgid "<illegal reg num>" +msgstr "<неиÑправан број региÑтра>" + +#: s12z-dis.c:382 +msgid "<bad>" +msgstr "<лоше>" + +#: s12z-dis.c:392 +msgid ".<bad>" +msgstr ".<лоше>" + +#: s390-dis.c:42 +msgid "Disassemble in ESA architecture mode" +msgstr "Разлаже у режиму „ESA“ архитектуре" + +#: s390-dis.c:43 +msgid "Disassemble in z/Architecture mode" +msgstr "Разлаже у режиму z/Ðрхитектуре" + +#: s390-dis.c:44 +msgid "Print unknown instructions according to length from first two bits" +msgstr "ИÑпиÑује непознате инÑтрукције у Ñкладу Ñа дужином из прва два бита" + +#: s390-dis.c:76 #, c-format -msgid "Internal error: bad sparc-opcode.h: \"%s\", %#.8lx, %#.8lx\n" -msgstr "Унутрашња грешка: лоше „sparc-opcode.h“: „%s“, %#.8lx, %#.8lx\n" +msgid "unknown S/390 disassembler option: %s" +msgstr "непозната опција „S/390“ разложитеља: %s" -#: sparc-dis.c:297 +#: s390-dis.c:416 #, c-format -msgid "Internal error: bad sparc-opcode.h: \"%s\", %#.8lx, %#.8lx\n" -msgstr "Унутрашња грешка: лоше „sparc-opcode.h“: „%s“, %#.8lx, %#.8lx\n" +msgid "" +"\n" +"The following S/390 specific disassembler options are supported for use\n" +"with the -M switch (multiple options should be separated by commas):\n" +msgstr "" +"\n" +"Следеће опције разложитеља Ñпецифичне за „S/390“ Ñу подржане за коришћење\n" +"Ñа прекидачем „-M“ (више опција треба да Ñе раздвајају зарезима):\n" + +#: score-dis.c:661 score-dis.c:879 score-dis.c:1040 score-dis.c:1146 +#: score-dis.c:1154 score-dis.c:1161 score7-dis.c:695 score7-dis.c:858 +msgid "<illegal instruction>" +msgstr "<неиÑправна инÑтрукција>" + +#: sparc-dis.c:308 sparc-dis.c:318 +#, c-format +msgid "internal error: bad sparc-opcode.h: \"%s\", %#.8lx, %#.8lx\n" +msgstr "унутрашња грешка: лоше „sparc-opcode.h“: „%s“, %#.8lx, %#.8lx\n" -#: sparc-dis.c:356 +#: sparc-dis.c:377 #, c-format -msgid "Internal error: bad sparc-opcode.h: \"%s\" == \"%s\"\n" -msgstr "Унутрашња грешка: лоше „sparc-opcode.h“: „%s“ == „%s“\n" +msgid "internal error: bad sparc-opcode.h: \"%s\" == \"%s\"\n" +msgstr "унутрашња грешка: лоше „sparc-opcode.h“: „%s“ == „%s“\n" #. Mark as non-valid instruction. -#: sparc-dis.c:1047 +#: sparc-dis.c:1094 msgid "unknown" msgstr "непознато" -#: v850-dis.c:453 +#: v850-dis.c:190 +msgid "<invalid s-reg number>" +msgstr "<неиÑправан „s-reg“ број>" + +#: v850-dis.c:206 +msgid "<invalid reg number>" +msgstr "<неиÑправан „reg“ број>" + +#: v850-dis.c:222 +msgid "<invalid v-reg number>" +msgstr "<неиÑправан „v-reg“ број>" + +#: v850-dis.c:236 +msgid "<invalid CC-reg number>" +msgstr "<неиÑправан „CC--reg“ број>" + +#: v850-dis.c:250 +msgid "<invalid float-CC-reg number>" +msgstr "<neispravan „float-CC-reg“ broj>" + +#: v850-dis.c:264 +msgid "<invalid cacheop number>" +msgstr "<неиÑправан „casheop“ број>" + +#: v850-dis.c:275 +msgid "<invalid prefop number>" +msgstr "<неиÑправан „prefop“ број>" + +#: v850-dis.c:510 #, c-format -msgid "unknown operand shift: %x\n" -msgstr "непознат помак операнда: %x\n" +msgid "unknown operand shift: %x" +msgstr "непознат помак операнда: %x" -#: v850-dis.c:465 +#: v850-dis.c:526 #, c-format -msgid "unknown reg: %d\n" -msgstr "непознат региÑтар: %d\n" +msgid "unknown reg: %d" +msgstr "непознат региÑтар: %d" #. The functions used to insert and extract complicated operands. #. Note: There is a conspiracy between these functions and @@ -1442,6 +2319,23 @@ msgid "invalid register name" msgstr "неиÑправан назив региÑтра" +#: wasm32-dis.c:88 +msgid "Disassemble \"register\" names" +msgstr "Разлаже „register“ називе" + +#: wasm32-dis.c:89 +msgid "Name well-known globals" +msgstr "Ðазиву добро познати општи" + +#: wasm32-dis.c:537 +#, c-format +msgid "" +"The following WebAssembly-specific disassembler options are supported for use\n" +"with the -M switch:\n" +msgstr "" +"Следеће опције разложитеља Ñпецифичне за „WebAssembly“ Ñу подржане за коришћење Ñа\n" +"прекидачем „-M“:\n" + #: xc16x-asm.c:66 msgid "Missing '#' prefix" msgstr "ÐедоÑтаје Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ â€ž#“" @@ -1466,6 +2360,21 @@ msgid "Missing 'seg:' prefix" msgstr "ÐедоÑтаје Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ â€žseg:“" +#: xc16x-desc.c:3349 +#, c-format +msgid "internal error: xc16x_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" +msgstr "унутрашња грешка: xc16x_cgen_rebuild_tables: Ñукобљене „insn-chunk-bitsize“ вредноÑти: %d наÑпрам %d" + +#: xc16x-desc.c:3437 +#, c-format +msgid "internal error: xc16x_cgen_cpu_open: unsupported argument `%d'" +msgstr "унутрашња грешка: xc16x_cgen_cpu_open: неподржан аргумент „%d“" + +#: xc16x-desc.c:3456 +#, c-format +msgid "internal error: xc16x_cgen_cpu_open: no endianness specified" +msgstr "унутрашња грешка: xc16x_cgen_cpu_open: ниÑу наведене крајњоÑти" + #: xstormy16-asm.c:71 msgid "Bad register in preincrement" msgstr "Лош региÑтар у предувећању" @@ -1505,3 +2414,110 @@ #: xstormy16-asm.c:165 msgid "Syntax error: No trailing ')'" msgstr "Грешка ÑинтакÑе: Ðема пратеће )" + +#: xstormy16-desc.c:1317 +#, c-format +msgid "internal error: xstormy16_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" +msgstr "унутрашња грешка: xstormy16_cgen_rebuild_tables: Ñукобљене „insn-chunk-bitsize“ вредноÑти: %d наÑпрам %d" + +#: xstormy16-desc.c:1405 +#, c-format +msgid "internal error: xstormy16_cgen_cpu_open: unsupported argument `%d'" +msgstr "унутрашња грешка: xstormy16_cgen_cpu_open: неподржан аргумент „%d“" + +#: xstormy16-desc.c:1424 +#, c-format +msgid "internal error: xstormy16_cgen_cpu_open: no endianness specified" +msgstr "унутрашња грешка: xstormy16_cgen_cpu_open: ниÑу наведене крајњоÑти" + +#~ msgid "internal error, h8_disassemble_init" +#~ msgstr "унутрашња грешка, „h8_disassemble_init“" + +#~ msgid "Illegal limm reference in last instruction!\n" +#~ msgstr "ÐеиÑправна лимм упута у поÑледњој инÑтрукцији!\n" + +#~ msgid "unable to fit different valued constants into instruction" +#~ msgstr "не могу да уклопим другачије вредноване конÑтанте у инÑтрукцији" + +#~ msgid "auxiliary register not allowed here" +#~ msgstr "помоћни региÑтар није дозвољен овде" + +#~ msgid "too many long constants" +#~ msgstr "превише дугих конÑтанти" + +#~ msgid "too many shimms in load" +#~ msgstr "превише „shimms“-ија у учитавању" + +#~ msgid "impossible store" +#~ msgstr "немогућ Ñмештај" + +#~ msgid "st operand error" +#~ msgstr "грешка ÑÑ‚ операнда" + +#~ msgid "address writeback not allowed" +#~ msgstr "повратно пиÑање адреÑе није дозвољено" + +#~ msgid "invalid load/shimm insn" +#~ msgstr "неиÑправна „load/shimm“ инÑтрукција" + +#~ msgid "ld operand error" +#~ msgstr "грешка лд операнда" + +#~ msgid "jump flags, but no .f seen" +#~ msgstr "заÑтавице Ñкока, али не видех „.f“" + +#~ msgid "jump flags, but no limm addr" +#~ msgstr "заÑтавице Ñкока, али нема лимм адреÑе" + +#~ msgid "flag bits of jump address limm lost" +#~ msgstr "лимм губитак битова заÑтавице адреÑе Ñкока" + +#~ msgid "attempt to set HR bits" +#~ msgstr "покушавам да подеÑим ХР бите" + +#~ msgid "bad jump flags value" +#~ msgstr "лоша вредноÑÑ‚ заÑтавица Ñкока" + +#~ msgid "branch address not on 4 byte boundary" +#~ msgstr "адреÑа гране није на граници 4 бајта" + +#~ msgid "must specify .jd or no nullify suffix" +#~ msgstr "морате навеÑти „.jd“ или ÑÑƒÑ„Ð¸ÐºÑ Ð½Ðµ нулирања" + +#~ msgid "Internal disassembler error" +#~ msgstr "Унутрашња грешка разложитеља" + +#~ msgid "can't cope with insert %d\n" +#~ msgstr "не могу да умножим Ñа уметком %d\n" + +#~ msgid "%02x\t\t*unknown*" +#~ msgstr "%02x\t\t*непознато*" + +#~ msgid "can't find i386-opc.tbl for reading, errno = %s\n" +#~ msgstr "не могу да нађем „i386-opc.tbl“ за читање, грешка = %s\n" + +#~ msgid "# <dis error: %08lx>" +#~ msgstr "# <грешка диÑ-а: %08lx>" + +#~ msgid "" +#~ "\n" +#~ " cp0-names=ARCH Print CP0 register names according to\n" +#~ " specified architecture.\n" +#~ " Default: based on binary being disassembled.\n" +#~ msgstr "" +#~ "\n" +#~ " cp0-names=ÐРХТ ИÑпиÑује називе ЦП0 региÑтра у Ñкладу\n" +#~ " Ñа наведеном архитектуром.\n" +#~ " ОÑновно: у завиÑноÑти од разложеног бинарног.\n" + +#~ msgid "" +#~ "\n" +#~ " For the options above, The following values are supported for \"ARCH\":\n" +#~ " " +#~ msgstr "" +#~ "\n" +#~ " За опције изнад, Ñледеће опције Ñу подржане за „ÐРХТ“:\n" +#~ " " + +#~ msgid "Internal error: bad sparc-opcode.h: \"%s\", %#.8lx, %#.8lx\n" +#~ msgstr "Унутрашња грешка: лоше „sparc-opcode.h“: „%s“, %#.8lx, %#.8lx\n" Binary files /tmp/tmpwlqmdap4/HCMjq_z_kj/gdb-9.1/opcodes/po/sv.gmo and /tmp/tmpwlqmdap4/bi0oNuAXeo/gdb-10.2/opcodes/po/sv.gmo differ diff -Nru gdb-9.1/opcodes/po/sv.po gdb-10.2/opcodes/po/sv.po --- gdb-9.1/opcodes/po/sv.po 2019-02-14 03:10:04.000000000 +0000 +++ gdb-10.2/opcodes/po/sv.po 2021-04-25 04:06:26.000000000 +0000 @@ -1,16 +1,16 @@ # Swedish messages for opcodes. -# Copyright (C) 2001, 2002, 2003, 2006, 2017, 2018, 2019 Free Software Foundation, Inc. +# Copyright (C) 2001, 2002, 2003, 2006, 2017, 2018, 2019, 2020 Free Software Foundation, Inc. # This file is distributed under the same license as the binutils package. # Christian Rose <menthos@menthos.com>, 2001, 2002, 2003. # Daniel Nylander <po@danielnylander.se>, 2006. -# Sebastian Rasmussen <sebras@gmail.com>, 2017, 2018, 2019. +# Sebastian Rasmussen <sebras@gmail.com>, 2017, 2018, 2019, 2020. # msgid "" msgstr "" -"Project-Id-Version: opcodes 2.31.90\n" +"Project-Id-Version: opcodes 2.33.90\n" "Report-Msgid-Bugs-To: bug-binutils@gnu.org\n" -"POT-Creation-Date: 2019-01-19 16:32+0000\n" -"PO-Revision-Date: 2019-02-05 18:47+0100\n" +"POT-Creation-Date: 2020-01-18 14:02+0000\n" +"PO-Revision-Date: 2020-04-29 00:38+0800\n" "Last-Translator: Sebastian Rasmussen <sebras@gmail.com>\n" "Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n" "Language: sv\n" @@ -19,23 +19,23 @@ "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Bugs: Report translation errors to the Language-Team address.\n" -"X-Generator: Poedit 2.2.1\n" +"X-Generator: Poedit 2.3\n" -#: aarch64-asm.c:819 +#: aarch64-asm.c:809 msgid "specified register cannot be read from" msgstr "angivet register kan inte läsas frÃ¥n" -#: aarch64-asm.c:828 +#: aarch64-asm.c:818 msgid "specified register cannot be written to" msgstr "angivet register kan inte skrivas till" #. Invalid option. -#: aarch64-dis.c:92 arc-dis.c:782 arm-dis.c:6174 +#: aarch64-dis.c:93 arc-dis.c:801 arm-dis.c:11361 #, c-format msgid "unrecognised disassembler option: %s" msgstr "okänt avassemblerflagga: %s" -#: aarch64-dis.c:3448 +#: aarch64-dis.c:3521 #, c-format msgid "" "\n" @@ -46,7 +46,7 @@ "Följande AARCH64-specifika avassemblerarflaggor stöds för användning\n" "tillsammans med flaggan -M (flera flaggor kan skiljas Ã¥t med komman):\n" -#: aarch64-dis.c:3452 +#: aarch64-dis.c:3525 #, c-format msgid "" "\n" @@ -55,7 +55,7 @@ "\n" " no-aliases Skriv inte ut instruktionsalias.\n" -#: aarch64-dis.c:3455 +#: aarch64-dis.c:3528 #, c-format msgid "" "\n" @@ -64,7 +64,7 @@ "\n" " aliases Skriv ut instruktionsalias.\n" -#: aarch64-dis.c:3458 +#: aarch64-dis.c:3531 #, c-format msgid "" "\n" @@ -73,7 +73,7 @@ "\n" " no-notes Skriv inte ut instruktionsnoteringar.\n" -#: aarch64-dis.c:3461 +#: aarch64-dis.c:3534 #, c-format msgid "" "\n" @@ -82,7 +82,7 @@ "\n" " notes Skriv ut instruktionsnoteringar.\n" -#: aarch64-dis.c:3465 +#: aarch64-dis.c:3538 #, c-format msgid "" "\n" @@ -91,264 +91,264 @@ "\n" " debug_dump Tillfällig flagga för felsökningsspÃ¥rning.\n" -#: aarch64-dis.c:3469 mips-dis.c:2773 mips-dis.c:2783 mips-dis.c:2786 -#: nfp-dis.c:2981 riscv-dis.c:552 +#: aarch64-dis.c:3542 mips-dis.c:2778 mips-dis.c:2788 mips-dis.c:2791 +#: nfp-dis.c:2981 riscv-dis.c:556 #, c-format msgid "\n" msgstr "\n" -#: aarch64-opc.c:1339 +#: aarch64-opc.c:1346 msgid "immediate value" msgstr "omedelbart värde" -#: aarch64-opc.c:1349 +#: aarch64-opc.c:1356 msgid "immediate offset" msgstr "omedelbar position" -#: aarch64-opc.c:1359 +#: aarch64-opc.c:1366 msgid "register number" msgstr "registernummer" -#: aarch64-opc.c:1369 +#: aarch64-opc.c:1376 msgid "register element index" msgstr "registerelementindex" -#: aarch64-opc.c:1379 +#: aarch64-opc.c:1386 msgid "shift amount" msgstr "skiftmängd" -#: aarch64-opc.c:1391 +#: aarch64-opc.c:1398 msgid "multiplier" msgstr "multiplikator" -#: aarch64-opc.c:1464 +#: aarch64-opc.c:1471 msgid "reg pair must start from even reg" msgstr "registerpar mÃ¥ste börja med jämnt register" -#: aarch64-opc.c:1470 +#: aarch64-opc.c:1477 msgid "reg pair must be contiguous" msgstr "registerpar mÃ¥ste vara kontinuerligt" -#: aarch64-opc.c:1484 +#: aarch64-opc.c:1491 msgid "extraneous register" msgstr "extra register" -#: aarch64-opc.c:1490 +#: aarch64-opc.c:1497 msgid "missing register" msgstr "saknar register" -#: aarch64-opc.c:1501 +#: aarch64-opc.c:1508 msgid "stack pointer register expected" msgstr "stackpekarregister förväntat" -#: aarch64-opc.c:1524 +#: aarch64-opc.c:1533 msgid "z0-z15 expected" msgstr "z0-z15 förväntat" -#: aarch64-opc.c:1525 +#: aarch64-opc.c:1534 msgid "z0-z7 expected" msgstr "z0-z7 förväntat" -#: aarch64-opc.c:1551 +#: aarch64-opc.c:1560 msgid "invalid register list" msgstr "ogiltig registerlista" -#: aarch64-opc.c:1565 +#: aarch64-opc.c:1574 msgid "p0-p7 expected" msgstr "p0-p7 förväntat" -#: aarch64-opc.c:1591 aarch64-opc.c:1599 +#: aarch64-opc.c:1600 aarch64-opc.c:1608 msgid "unexpected address writeback" msgstr "oväntad adressÃ¥terskrivning" -#: aarch64-opc.c:1611 +#: aarch64-opc.c:1619 msgid "address writeback expected" msgstr "adressÃ¥terskrivning förväntad" -#: aarch64-opc.c:1658 +#: aarch64-opc.c:1666 msgid "negative or unaligned offset expected" msgstr "negativ eller ojusterad position förväntad" -#: aarch64-opc.c:1715 +#: aarch64-opc.c:1723 msgid "invalid register offset" msgstr "ogiltig registerposition" -#: aarch64-opc.c:1737 +#: aarch64-opc.c:1745 msgid "invalid post-increment amount" msgstr "ogiltig efter-inkrementeringsmängd" -#: aarch64-opc.c:1753 aarch64-opc.c:2247 +#: aarch64-opc.c:1761 aarch64-opc.c:2269 msgid "invalid shift amount" msgstr "ogiltigt skiftmängd" -#: aarch64-opc.c:1766 +#: aarch64-opc.c:1774 msgid "invalid extend/shift operator" msgstr "ogiltig utökad-/skiftoperator" -#: aarch64-opc.c:1812 aarch64-opc.c:2052 aarch64-opc.c:2087 aarch64-opc.c:2106 -#: aarch64-opc.c:2114 aarch64-opc.c:2201 aarch64-opc.c:2377 aarch64-opc.c:2477 -#: aarch64-opc.c:2490 +#: aarch64-opc.c:1820 aarch64-opc.c:2072 aarch64-opc.c:2107 aarch64-opc.c:2126 +#: aarch64-opc.c:2134 aarch64-opc.c:2222 aarch64-opc.c:2399 aarch64-opc.c:2499 +#: aarch64-opc.c:2512 msgid "immediate out of range" msgstr "omedelbar är utanför intervall" -#: aarch64-opc.c:1834 aarch64-opc.c:1876 aarch64-opc.c:1926 aarch64-opc.c:1960 +#: aarch64-opc.c:1842 aarch64-opc.c:1884 aarch64-opc.c:1946 aarch64-opc.c:1980 msgid "invalid addressing mode" msgstr "ogiltigt adresseringsläge" -#: aarch64-opc.c:1918 +#: aarch64-opc.c:1938 msgid "index register xzr is not allowed" msgstr "indexregister xzr är inte tillÃ¥tet" -#: aarch64-opc.c:2040 aarch64-opc.c:2062 aarch64-opc.c:2280 aarch64-opc.c:2288 -#: aarch64-opc.c:2354 aarch64-opc.c:2383 +#: aarch64-opc.c:2060 aarch64-opc.c:2082 aarch64-opc.c:2302 aarch64-opc.c:2310 +#: aarch64-opc.c:2376 aarch64-opc.c:2405 msgid "invalid shift operator" msgstr "ogiltig skiftoperator" -#: aarch64-opc.c:2046 +#: aarch64-opc.c:2066 msgid "shift amount must be 0 or 12" msgstr "skiftmängd mÃ¥ste vara 0 eller 12" -#: aarch64-opc.c:2069 +#: aarch64-opc.c:2089 msgid "shift amount must be a multiple of 16" msgstr "skiftmängden mÃ¥ste vara en multipel av 16" -#: aarch64-opc.c:2081 +#: aarch64-opc.c:2101 msgid "negative immediate value not allowed" msgstr "negativ omedelbart värde tillÃ¥ts inte" -#: aarch64-opc.c:2212 +#: aarch64-opc.c:2233 msgid "immediate zero expected" msgstr "omedelbar nolla förväntad" -#: aarch64-opc.c:2226 +#: aarch64-opc.c:2247 msgid "rotate expected to be 0, 90, 180 or 270" msgstr "rotation förväntades vara 0, 90, 180 eller 270" -#: aarch64-opc.c:2236 +#: aarch64-opc.c:2258 msgid "rotate expected to be 90 or 270" msgstr "rotation förväntades vara 90 eller 270" -#: aarch64-opc.c:2296 +#: aarch64-opc.c:2318 msgid "shift is not permitted" msgstr "skift är inte tillÃ¥tet" -#: aarch64-opc.c:2321 +#: aarch64-opc.c:2343 msgid "invalid value for immediate" msgstr "ogiltigt värde för omedelbar" -#: aarch64-opc.c:2346 +#: aarch64-opc.c:2368 msgid "shift amount must be 0 or 16" msgstr "skiftmängd mÃ¥ste vara 0 eller 16" -#: aarch64-opc.c:2367 +#: aarch64-opc.c:2389 msgid "floating-point immediate expected" msgstr "omedelbart flyttal förväntades" -#: aarch64-opc.c:2401 +#: aarch64-opc.c:2423 msgid "no shift amount allowed for 8-bit constants" msgstr "ingen skiftmängd tillÃ¥ten för 8-bitarskonstanter" -#: aarch64-opc.c:2411 +#: aarch64-opc.c:2433 msgid "shift amount must be 0 or 8" msgstr "skiftmängd mÃ¥ste vara 0 eller 8" -#: aarch64-opc.c:2424 +#: aarch64-opc.c:2446 msgid "immediate too big for element size" msgstr "omedelbar för stor för elementstorlek" -#: aarch64-opc.c:2431 +#: aarch64-opc.c:2453 msgid "invalid arithmetic immediate" msgstr "ogiltigt aritmetiskt omedelbar" -#: aarch64-opc.c:2445 +#: aarch64-opc.c:2467 msgid "floating-point value must be 0.5 or 1.0" msgstr "flyttalsvärde mÃ¥ste vara 0.5 eller 1.0" -#: aarch64-opc.c:2455 +#: aarch64-opc.c:2477 msgid "floating-point value must be 0.5 or 2.0" msgstr "flyttalsvärde mÃ¥ste vara 0.5 eller 2.0" -#: aarch64-opc.c:2465 +#: aarch64-opc.c:2487 msgid "floating-point value must be 0.0 or 1.0" msgstr "flyttalsvärde mÃ¥ste vara 0.0 eller 1.0" -#: aarch64-opc.c:2496 +#: aarch64-opc.c:2518 msgid "invalid replicated MOV immediate" msgstr "ogiltig, replikerad MOV-omedelbar" -#: aarch64-opc.c:2614 +#: aarch64-opc.c:2639 msgid "extend operator expected" msgstr "utökad operator förväntades" -#: aarch64-opc.c:2627 +#: aarch64-opc.c:2652 msgid "missing extend operator" msgstr "saknar utökad operator" -#: aarch64-opc.c:2633 +#: aarch64-opc.c:2658 msgid "'LSL' operator not allowed" msgstr "â€LSLâ€-operator inte tillÃ¥ten" -#: aarch64-opc.c:2654 +#: aarch64-opc.c:2679 msgid "W register expected" msgstr "W-register förvätnades" -#: aarch64-opc.c:2665 +#: aarch64-opc.c:2690 msgid "shift operator expected" msgstr "skiftoperator förväntades" -#: aarch64-opc.c:2672 +#: aarch64-opc.c:2697 msgid "'ROR' operator not allowed" msgstr "â€RORâ€-operator inte tillÃ¥ten" -#: aarch64-opc.c:3671 +#: aarch64-opc.c:3711 msgid "reading from a write-only register" msgstr "läsning frÃ¥n ett register som endast kan skrivas" -#: aarch64-opc.c:3673 +#: aarch64-opc.c:3713 msgid "writing to a read-only register" msgstr "skrivning till ett register som endast kan läsas" -#: aarch64-opc.c:4815 +#: aarch64-opc.c:4880 msgid "instruction opens new dependency sequence without ending previous one" msgstr "instruktion öppnar en ny beroende sekvens utan att avsluta föregÃ¥ende" -#: aarch64-opc.c:4835 +#: aarch64-opc.c:4900 msgid "previous `movprfx' sequence not closed" msgstr "föregÃ¥ende â€movprfxâ€-sekvens inte stängd" -#: aarch64-opc.c:4852 +#: aarch64-opc.c:4919 msgid "SVE instruction expected after `movprfx'" msgstr "SVE-instruktion förväntad efter â€movprfxâ€" -#: aarch64-opc.c:4865 +#: aarch64-opc.c:4932 msgid "SVE `movprfx' compatible instruction expected" msgstr "SVE â€movprfxâ€-kompatibel instruktion förväntad" -#: aarch64-opc.c:4956 +#: aarch64-opc.c:5019 msgid "predicated instruction expected after `movprfx'" msgstr "instruktion med predikat förväntad efter â€movprfxâ€" -#: aarch64-opc.c:4968 +#: aarch64-opc.c:5031 msgid "merging predicate expected due to preceding `movprfx'" msgstr "sammanslagningspredikat förväntat pÃ¥ grund av föregÃ¥ende â€movprfxâ€" -#: aarch64-opc.c:4980 +#: aarch64-opc.c:5043 msgid "predicate register differs from that in preceding `movprfx'" msgstr "predikatregister skiljer sig frÃ¥n det i föregÃ¥ende â€movprfxâ€" -#: aarch64-opc.c:4999 +#: aarch64-opc.c:5062 msgid "output register of preceding `movprfx' not used in current instruction" msgstr "utdataregister frÃ¥n föregÃ¥ende â€movprfx†används inte i aktuell instruktion" -#: aarch64-opc.c:5012 +#: aarch64-opc.c:5075 msgid "output register of preceding `movprfx' expected as output" msgstr "utdataregister frÃ¥n föregÃ¥ende â€movprfx†förväntat som utdata" -#: aarch64-opc.c:5024 +#: aarch64-opc.c:5087 msgid "output register of preceding `movprfx' used as input" msgstr "utdataregister frÃ¥n föregÃ¥ende â€movprfx†används som indata" -#: aarch64-opc.c:5040 +#: aarch64-opc.c:5103 msgid "register size not compatible with previous `movprfx'" msgstr "registerstorlek inte kompatibel med föregÃ¥ende â€movprfxâ€" @@ -360,7 +360,7 @@ msgid "jump hint unaligned" msgstr "hopptipset ligger inte pÃ¥ jämn gräns" -#: arc-dis.c:377 +#: arc-dis.c:379 msgid "" "\n" "Warning: disassembly may be wrong due to guessed opcode class choice.\n" @@ -372,12 +372,12 @@ "Använd -M<klass[,klass]> för att välja korrekt opkodsklasser.\n" "\t\t\t\t" -#: arc-dis.c:825 +#: arc-dis.c:844 #, c-format msgid "unrecognised disassembler CPU option: %s" msgstr "okänd avassembleringsflagga för CPU: %s" -#: arc-dis.c:1387 +#: arc-dis.c:1411 #, c-format msgid "" "\n" @@ -388,42 +388,47 @@ "Följande ARC-specifika avassemblerarflaggor stöds för användning\n" "tillsammans med flaggan -M (flera flaggor kan skiljas Ã¥t med komman):\n" -#: arc-dis.c:1399 +#: arc-dis.c:1423 #, c-format msgid " dsp Recognize DSP instructions.\n" msgstr " dsp Känn igen DSP-instruktioner.\n" -#: arc-dis.c:1401 +#: arc-dis.c:1425 #, c-format msgid " spfp Recognize FPX SP instructions.\n" msgstr " spfp Känn igen FPX SP-instruktioner.\n" -#: arc-dis.c:1403 +#: arc-dis.c:1427 #, c-format msgid " dpfp Recognize FPX DP instructions.\n" msgstr " dpfp Känn igen FPX DP-instruktioner.\n" -#: arc-dis.c:1405 +#: arc-dis.c:1429 #, c-format msgid " quarkse_em Recognize FPU QuarkSE-EM instructions.\n" msgstr " quarkse_em Känn igen FPU QuarkSE-EM-instruktioner.\n" -#: arc-dis.c:1407 +#: arc-dis.c:1431 #, c-format msgid " fpuda Recognize double assist FPU instructions.\n" msgstr " fpuda Känn igen dubbelassisterade FPU-instruktioner.\n" -#: arc-dis.c:1409 +#: arc-dis.c:1433 #, c-format msgid " fpus Recognize single precision FPU instructions.\n" msgstr " fpus Känn igen enkelprecisions-FPU-instruktioner.\n" -#: arc-dis.c:1411 +#: arc-dis.c:1435 #, c-format msgid " fpud Recognize double precision FPU instructions.\n" msgstr " fpud Känn igen dubbelprecisions-FPU-instruktioner.\n" -#: arc-dis.c:1413 +#: arc-dis.c:1437 +#, c-format +msgid " nps400 Recognize NPS400 instructions.\n" +msgstr " nps400 Känn igen NPS400-instruktioner.\n" + +#: arc-dis.c:1439 #, c-format msgid " hex Use only hexadecimal number to print immediates.\n" msgstr " hex Använd endast hexadecimala nummer för att skriva ut omedelbara.\n" @@ -589,48 +594,48 @@ msgid "invalid position, should be one of: 0,4,8,...124." msgstr "ogiltig position, borde vara endera av: 0, 4, 8, …124." -#: arm-dis.c:3242 +#: arm-dis.c:5105 msgid "Select raw register names" msgstr "Välj rÃ¥a registernamn" -#: arm-dis.c:3244 +#: arm-dis.c:5107 msgid "Select register names used by GCC" msgstr "Välj registernamn som används av GCC" -#: arm-dis.c:3246 +#: arm-dis.c:5109 msgid "Select register names used in ARM's ISA documentation" msgstr "Välj registernamn som används i ARM:s ISA-dokumentation" -#: arm-dis.c:3248 +#: arm-dis.c:5111 msgid "Assume all insns are Thumb insns" msgstr "Förvänta att alla instr är Thumb-instr" -#: arm-dis.c:3249 +#: arm-dis.c:5112 msgid "Examine preceding label to determine an insn's type" msgstr "Undersök föregÃ¥ende etikett för att avgöra en instruktions typ" -#: arm-dis.c:3250 +#: arm-dis.c:5113 msgid "Select register names used in the APCS" msgstr "Välj registernamn som används i APCS" -#: arm-dis.c:3252 +#: arm-dis.c:5115 msgid "Select register names used in the ATPCS" msgstr "Välj register namn som används i ATPCS" -#: arm-dis.c:3254 +#: arm-dis.c:5117 msgid "Select special register names used in the ATPCS" msgstr "Välj specialregisternamn som används i ATPCS" -#: arm-dis.c:3652 +#: arm-dis.c:8286 msgid "<illegal precision>" msgstr "<otillÃ¥ten precision>" -#: arm-dis.c:6165 +#: arm-dis.c:11352 #, c-format msgid "unrecognised register name set: %s" msgstr "okänt registernamnsuppsättning: %s" -#: arm-dis.c:6906 +#: arm-dis.c:12066 #, c-format msgid "" "\n" @@ -646,256 +651,277 @@ msgid "undefined" msgstr "odefinierad" -#: avr-dis.c:216 +#: avr-dis.c:218 #, c-format msgid "internal disassembler error" msgstr "internt fel i avassemblerare" -#: avr-dis.c:270 +#: avr-dis.c:272 #, c-format msgid "unknown constraint `%c'" msgstr "okänd begränsning \"%c\"" -#: cgen-asm.c:351 epiphany-ibld.c:201 fr30-ibld.c:201 frv-ibld.c:201 -#: ip2k-ibld.c:201 iq2000-ibld.c:201 lm32-ibld.c:201 m32c-ibld.c:201 -#: m32r-ibld.c:201 mep-ibld.c:201 mt-ibld.c:201 or1k-ibld.c:201 -#: xc16x-ibld.c:201 xstormy16-ibld.c:201 -#, c-format -msgid "operand out of range (%ld not between %ld and %ld)" -msgstr "operanden är utanför intervallet (%ld är inte mellan %ld och %ld)" - -#: cgen-asm.c:373 -#, c-format -msgid "operand out of range (%lu not between %lu and %lu)" -msgstr "operanden är utanför intervallet (%lu är inte mellan %lu och %lu)" - -#: d30v-dis.c:229 -#, c-format -msgid "illegal id (%d)" -msgstr "otillÃ¥tet id (%d)" - -#: d30v-dis.c:256 -#, c-format -msgid "<unknown register %d>" -msgstr "<okänt register %d>" - -#. Can't happen. -#: dis-buf.c:61 -#, c-format -msgid "Unknown error %d\n" -msgstr "Okänt fel %d\n" - -#: dis-buf.c:70 -#, c-format -msgid "Address 0x%s is out of bounds.\n" -msgstr "Adressen 0x%s ligger utanför tillÃ¥tna gränser.\n" - -#: epiphany-asm.c:68 -msgid "register unavailable for short instructions" -msgstr "register otillgänglig för korta instruktioner" - -#: epiphany-asm.c:115 -msgid "register name used as immediate value" -msgstr "registernamn mÃ¥ste användas som omedelbart värde" - -#. Don't treat "mov ip,ip" as a move-immediate. -#: epiphany-asm.c:178 epiphany-asm.c:234 -msgid "register source in immediate move" -msgstr "registerkälla i omedelbar förflyttning" - -#: epiphany-asm.c:187 -msgid "byte relocation unsupported" -msgstr "byteomlokalisering stöds inte" - -#. -- assembler routines inserted here. -#. -- asm.c -#: epiphany-asm.c:193 frv-asm.c:972 iq2000-asm.c:56 lm32-asm.c:95 -#: lm32-asm.c:127 lm32-asm.c:157 lm32-asm.c:187 lm32-asm.c:217 lm32-asm.c:247 -#: m32c-asm.c:140 m32c-asm.c:235 m32c-asm.c:276 m32c-asm.c:334 m32c-asm.c:355 -#: m32r-asm.c:53 mep-asm.c:241 mep-asm.c:259 mep-asm.c:274 mep-asm.c:289 -#: mep-asm.c:301 or1k-asm.c:54 -msgid "missing `)'" -msgstr "â€)†saknas" - -#: epiphany-asm.c:270 -msgid "ABORT: unknown operand" -msgstr "AVBROTT: okänd operand" - -#: epiphany-asm.c:296 -msgid "Not a pc-relative address." -msgstr "Inte en pc-relativ adress." - -#: epiphany-asm.c:456 fr30-asm.c:311 frv-asm.c:1264 ip2k-asm.c:512 -#: iq2000-asm.c:460 lm32-asm.c:350 m32c-asm.c:1585 m32r-asm.c:329 -#: mep-asm.c:1288 mt-asm.c:596 or1k-asm.c:512 xc16x-asm.c:377 +#: bpf-asm.c:97 +msgid "expected 16, 32 or 64 in" +msgstr "förväntade 16, 32 eller 64 i" + +#: bpf-asm.c:181 epiphany-asm.c:456 fr30-asm.c:311 frv-asm.c:1264 +#: ip2k-asm.c:512 iq2000-asm.c:460 lm32-asm.c:350 m32c-asm.c:1585 +#: m32r-asm.c:329 mep-asm.c:1288 mt-asm.c:596 or1k-asm.c:580 xc16x-asm.c:377 #: xstormy16-asm.c:277 #, c-format msgid "internal error: unrecognized field %d while parsing" msgstr "internt fel: okänt fält %d vid tolkning" -#: epiphany-asm.c:508 fr30-asm.c:363 frv-asm.c:1316 ip2k-asm.c:564 -#: iq2000-asm.c:512 lm32-asm.c:402 m32c-asm.c:1637 m32r-asm.c:381 -#: mep-asm.c:1340 mt-asm.c:648 or1k-asm.c:564 xc16x-asm.c:429 +#: bpf-asm.c:233 epiphany-asm.c:508 fr30-asm.c:363 frv-asm.c:1316 +#: ip2k-asm.c:564 iq2000-asm.c:512 lm32-asm.c:402 m32c-asm.c:1637 +#: m32r-asm.c:381 mep-asm.c:1340 mt-asm.c:648 or1k-asm.c:632 xc16x-asm.c:429 #: xstormy16-asm.c:329 msgid "missing mnemonic in syntax string" msgstr "instruktion saknas i syntaxsträng" #. We couldn't parse it. -#: epiphany-asm.c:643 epiphany-asm.c:647 epiphany-asm.c:736 epiphany-asm.c:843 -#: fr30-asm.c:498 fr30-asm.c:502 fr30-asm.c:591 fr30-asm.c:698 frv-asm.c:1451 -#: frv-asm.c:1455 frv-asm.c:1544 frv-asm.c:1651 ip2k-asm.c:699 ip2k-asm.c:703 -#: ip2k-asm.c:792 ip2k-asm.c:899 iq2000-asm.c:647 iq2000-asm.c:651 -#: iq2000-asm.c:740 iq2000-asm.c:847 lm32-asm.c:537 lm32-asm.c:541 -#: lm32-asm.c:630 lm32-asm.c:737 m32c-asm.c:1772 m32c-asm.c:1776 -#: m32c-asm.c:1865 m32c-asm.c:1972 m32r-asm.c:516 m32r-asm.c:520 -#: m32r-asm.c:609 m32r-asm.c:716 mep-asm.c:1475 mep-asm.c:1479 mep-asm.c:1568 -#: mep-asm.c:1675 mt-asm.c:783 mt-asm.c:787 mt-asm.c:876 mt-asm.c:983 -#: or1k-asm.c:699 or1k-asm.c:703 or1k-asm.c:792 or1k-asm.c:899 xc16x-asm.c:564 -#: xc16x-asm.c:568 xc16x-asm.c:657 xc16x-asm.c:764 xstormy16-asm.c:464 -#: xstormy16-asm.c:468 xstormy16-asm.c:557 xstormy16-asm.c:664 +#: bpf-asm.c:368 bpf-asm.c:372 bpf-asm.c:461 bpf-asm.c:568 epiphany-asm.c:643 +#: epiphany-asm.c:647 epiphany-asm.c:736 epiphany-asm.c:843 fr30-asm.c:498 +#: fr30-asm.c:502 fr30-asm.c:591 fr30-asm.c:698 frv-asm.c:1451 frv-asm.c:1455 +#: frv-asm.c:1544 frv-asm.c:1651 ip2k-asm.c:699 ip2k-asm.c:703 ip2k-asm.c:792 +#: ip2k-asm.c:899 iq2000-asm.c:647 iq2000-asm.c:651 iq2000-asm.c:740 +#: iq2000-asm.c:847 lm32-asm.c:537 lm32-asm.c:541 lm32-asm.c:630 +#: lm32-asm.c:737 m32c-asm.c:1772 m32c-asm.c:1776 m32c-asm.c:1865 +#: m32c-asm.c:1972 m32r-asm.c:516 m32r-asm.c:520 m32r-asm.c:609 m32r-asm.c:716 +#: mep-asm.c:1475 mep-asm.c:1479 mep-asm.c:1568 mep-asm.c:1675 mt-asm.c:783 +#: mt-asm.c:787 mt-asm.c:876 mt-asm.c:983 or1k-asm.c:767 or1k-asm.c:771 +#: or1k-asm.c:860 or1k-asm.c:967 xc16x-asm.c:564 xc16x-asm.c:568 +#: xc16x-asm.c:657 xc16x-asm.c:764 xstormy16-asm.c:464 xstormy16-asm.c:468 +#: xstormy16-asm.c:557 xstormy16-asm.c:664 msgid "unrecognized instruction" msgstr "okänd instruktion" -#: epiphany-asm.c:690 fr30-asm.c:545 frv-asm.c:1498 ip2k-asm.c:746 -#: iq2000-asm.c:694 lm32-asm.c:584 m32c-asm.c:1819 m32r-asm.c:563 -#: mep-asm.c:1522 mt-asm.c:830 or1k-asm.c:746 xc16x-asm.c:611 +#: bpf-asm.c:415 epiphany-asm.c:690 fr30-asm.c:545 frv-asm.c:1498 +#: ip2k-asm.c:746 iq2000-asm.c:694 lm32-asm.c:584 m32c-asm.c:1819 +#: m32r-asm.c:563 mep-asm.c:1522 mt-asm.c:830 or1k-asm.c:814 xc16x-asm.c:611 #: xstormy16-asm.c:511 #, c-format msgid "syntax error (expected char `%c', found `%c')" msgstr "syntaxfel (tecknet \"%c\" förväntades, hittade \"%c\")" -#: epiphany-asm.c:700 fr30-asm.c:555 frv-asm.c:1508 ip2k-asm.c:756 -#: iq2000-asm.c:704 lm32-asm.c:594 m32c-asm.c:1829 m32r-asm.c:573 -#: mep-asm.c:1532 mt-asm.c:840 or1k-asm.c:756 xc16x-asm.c:621 +#: bpf-asm.c:425 epiphany-asm.c:700 fr30-asm.c:555 frv-asm.c:1508 +#: ip2k-asm.c:756 iq2000-asm.c:704 lm32-asm.c:594 m32c-asm.c:1829 +#: m32r-asm.c:573 mep-asm.c:1532 mt-asm.c:840 or1k-asm.c:824 xc16x-asm.c:621 #: xstormy16-asm.c:521 #, c-format msgid "syntax error (expected char `%c', found end of instruction)" msgstr "syntaxfel (tecknet \"%c\" förväntades, hittade slutet pÃ¥ instruktion)" -#: epiphany-asm.c:730 fr30-asm.c:585 frv-asm.c:1538 ip2k-asm.c:786 -#: iq2000-asm.c:734 lm32-asm.c:624 m32c-asm.c:1859 m32r-asm.c:603 -#: mep-asm.c:1562 mt-asm.c:870 or1k-asm.c:786 xc16x-asm.c:651 +#: bpf-asm.c:455 epiphany-asm.c:730 fr30-asm.c:585 frv-asm.c:1538 +#: ip2k-asm.c:786 iq2000-asm.c:734 lm32-asm.c:624 m32c-asm.c:1859 +#: m32r-asm.c:603 mep-asm.c:1562 mt-asm.c:870 or1k-asm.c:854 xc16x-asm.c:651 #: xstormy16-asm.c:551 msgid "junk at end of line" msgstr "skräp vid slutet pÃ¥ raden" -#: epiphany-asm.c:842 fr30-asm.c:697 frv-asm.c:1650 ip2k-asm.c:898 -#: iq2000-asm.c:846 lm32-asm.c:736 m32c-asm.c:1971 m32r-asm.c:715 -#: mep-asm.c:1674 mt-asm.c:982 or1k-asm.c:898 xc16x-asm.c:763 +#: bpf-asm.c:567 epiphany-asm.c:842 fr30-asm.c:697 frv-asm.c:1650 +#: ip2k-asm.c:898 iq2000-asm.c:846 lm32-asm.c:736 m32c-asm.c:1971 +#: m32r-asm.c:715 mep-asm.c:1674 mt-asm.c:982 or1k-asm.c:966 xc16x-asm.c:763 #: xstormy16-asm.c:663 msgid "unrecognized form of instruction" msgstr "okänd instruktionsform" -#: epiphany-asm.c:856 fr30-asm.c:711 frv-asm.c:1664 ip2k-asm.c:912 -#: iq2000-asm.c:860 lm32-asm.c:750 m32c-asm.c:1985 m32r-asm.c:729 -#: mep-asm.c:1688 mt-asm.c:996 or1k-asm.c:912 xc16x-asm.c:777 +#: bpf-asm.c:581 epiphany-asm.c:856 fr30-asm.c:711 frv-asm.c:1664 +#: ip2k-asm.c:912 iq2000-asm.c:860 lm32-asm.c:750 m32c-asm.c:1985 +#: m32r-asm.c:729 mep-asm.c:1688 mt-asm.c:996 or1k-asm.c:980 xc16x-asm.c:777 #: xstormy16-asm.c:677 #, c-format msgid "bad instruction `%.50s...'" msgstr "felaktig instruktion \"%.50s...\"" -#: epiphany-asm.c:859 fr30-asm.c:714 frv-asm.c:1667 ip2k-asm.c:915 -#: iq2000-asm.c:863 lm32-asm.c:753 m32c-asm.c:1988 m32r-asm.c:732 -#: mep-asm.c:1691 mt-asm.c:999 or1k-asm.c:915 xc16x-asm.c:780 +#: bpf-asm.c:584 epiphany-asm.c:859 fr30-asm.c:714 frv-asm.c:1667 +#: ip2k-asm.c:915 iq2000-asm.c:863 lm32-asm.c:753 m32c-asm.c:1988 +#: m32r-asm.c:732 mep-asm.c:1691 mt-asm.c:999 or1k-asm.c:983 xc16x-asm.c:780 #: xstormy16-asm.c:680 #, c-format msgid "bad instruction `%.50s'" msgstr "felaktig instruktion \"%.50s\"" -#: epiphany-desc.c:2109 +#: bpf-desc.c:1441 #, c-format -msgid "internal error: epiphany_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" -msgstr "internt fel: epiphany_cgen_rebuild_tables: insn-chunk-bitsize värden i konflikt: â€%d†vs. â€%dâ€" +msgid "internal error: bpf_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" +msgstr "internt fel: bpf_cgen_rebuild_tables: insn-chunk-bitsize-värden i konflikt: â€%d†vs. â€%dâ€" -#: epiphany-desc.c:2192 +#: bpf-desc.c:1524 #, c-format -msgid "internal error: epiphany_cgen_cpu_open: unsupported argument `%d'" -msgstr "internt fel: epiphany_cgen_cpu_open: argument stöds inte â€%dâ€" +msgid "internal error: bpf_cgen_cpu_open: unsupported argument `%d'" +msgstr "internt fel: bpf_cgen_cpu_open: argument stöds inte â€%dâ€" -#: epiphany-desc.c:2211 +#: bpf-desc.c:1543 #, c-format -msgid "internal error: epiphany_cgen_cpu_open: no endianness specified" -msgstr "internt fel: epiphany_cgen_cpu_open: ingen byteordning angiven" +msgid "internal error: bpf_cgen_cpu_open: no endianness specified" +msgstr "internt fel: bpf_cgen_cpu_open: ingen byteordning angiven" #. Default text to print if an instruction isn't recognized. -#: epiphany-dis.c:41 fr30-dis.c:41 frv-dis.c:41 ip2k-dis.c:41 iq2000-dis.c:41 -#: lm32-dis.c:41 m32c-dis.c:41 m32r-dis.c:41 mep-dis.c:41 mmix-dis.c:275 -#: mt-dis.c:41 nds32-dis.c:64 or1k-dis.c:41 xc16x-dis.c:41 xstormy16-dis.c:41 +#: bpf-dis.c:41 epiphany-dis.c:41 fr30-dis.c:41 frv-dis.c:41 ip2k-dis.c:41 +#: iq2000-dis.c:41 lm32-dis.c:41 m32c-dis.c:41 m32r-dis.c:41 mep-dis.c:41 +#: mmix-dis.c:293 mt-dis.c:41 nds32-dis.c:64 or1k-dis.c:41 xc16x-dis.c:41 +#: xstormy16-dis.c:41 msgid "*unknown*" msgstr "*okänd*" -#: epiphany-dis.c:279 fr30-dis.c:300 frv-dis.c:397 ip2k-dis.c:289 -#: iq2000-dis.c:190 lm32-dis.c:148 m32c-dis.c:892 m32r-dis.c:280 -#: mep-dis.c:1188 mt-dis.c:291 or1k-dis.c:145 xc16x-dis.c:421 +#: bpf-dis.c:203 epiphany-dis.c:279 fr30-dis.c:300 frv-dis.c:397 +#: ip2k-dis.c:289 iq2000-dis.c:190 lm32-dis.c:148 m32c-dis.c:892 +#: m32r-dis.c:280 mep-dis.c:1188 mt-dis.c:291 or1k-dis.c:184 xc16x-dis.c:421 #: xstormy16-dis.c:169 #, c-format msgid "internal error: unrecognized field %d while printing insn" msgstr "internt fel: okänt fält %d vid utskrift av instruktion" -#: epiphany-ibld.c:164 fr30-ibld.c:164 frv-ibld.c:164 ip2k-ibld.c:164 -#: iq2000-ibld.c:164 lm32-ibld.c:164 m32c-ibld.c:164 m32r-ibld.c:164 -#: mep-ibld.c:164 mt-ibld.c:164 or1k-ibld.c:164 xc16x-ibld.c:164 -#: xstormy16-ibld.c:164 +#: bpf-ibld.c:164 epiphany-ibld.c:164 fr30-ibld.c:164 frv-ibld.c:164 +#: ip2k-ibld.c:164 iq2000-ibld.c:164 lm32-ibld.c:164 m32c-ibld.c:164 +#: m32r-ibld.c:164 mep-ibld.c:164 mt-ibld.c:164 or1k-ibld.c:164 +#: xc16x-ibld.c:164 xstormy16-ibld.c:164 #, c-format msgid "operand out of range (%ld not between %ld and %lu)" msgstr "operanden är utanför intervallet (%ld är inte mellan %ld och %lu)" -#: epiphany-ibld.c:185 fr30-ibld.c:185 frv-ibld.c:185 ip2k-ibld.c:185 -#: iq2000-ibld.c:185 lm32-ibld.c:185 m32c-ibld.c:185 m32r-ibld.c:185 -#: mep-ibld.c:185 mt-ibld.c:185 or1k-ibld.c:185 xc16x-ibld.c:185 -#: xstormy16-ibld.c:185 +#: bpf-ibld.c:185 epiphany-ibld.c:185 fr30-ibld.c:185 frv-ibld.c:185 +#: ip2k-ibld.c:185 iq2000-ibld.c:185 lm32-ibld.c:185 m32c-ibld.c:185 +#: m32r-ibld.c:185 mep-ibld.c:185 mt-ibld.c:185 or1k-ibld.c:185 +#: xc16x-ibld.c:185 xstormy16-ibld.c:185 #, c-format msgid "operand out of range (0x%lx not between 0 and 0x%lx)" msgstr "operand utanför intervall (0x%lx inte mellan 0 och 0x%lx)" -#: epiphany-ibld.c:880 fr30-ibld.c:735 frv-ibld.c:861 ip2k-ibld.c:612 -#: iq2000-ibld.c:718 lm32-ibld.c:639 m32c-ibld.c:1736 m32r-ibld.c:670 -#: mep-ibld.c:1213 mt-ibld.c:754 or1k-ibld.c:658 xc16x-ibld.c:757 -#: xstormy16-ibld.c:683 +#: bpf-ibld.c:201 cgen-asm.c:351 epiphany-ibld.c:201 fr30-ibld.c:201 +#: frv-ibld.c:201 ip2k-ibld.c:201 iq2000-ibld.c:201 lm32-ibld.c:201 +#: m32c-ibld.c:201 m32r-ibld.c:201 mep-ibld.c:201 mt-ibld.c:201 +#: or1k-ibld.c:201 xc16x-ibld.c:201 xstormy16-ibld.c:201 +#, c-format +msgid "operand out of range (%ld not between %ld and %ld)" +msgstr "operanden är utanför intervallet (%ld är inte mellan %ld och %ld)" + +#: bpf-ibld.c:625 epiphany-ibld.c:880 fr30-ibld.c:735 frv-ibld.c:861 +#: ip2k-ibld.c:612 iq2000-ibld.c:718 lm32-ibld.c:639 m32c-ibld.c:1736 +#: m32r-ibld.c:670 mep-ibld.c:1213 mt-ibld.c:754 or1k-ibld.c:742 +#: xc16x-ibld.c:757 xstormy16-ibld.c:683 #, c-format msgid "internal error: unrecognized field %d while building insn" msgstr "internt fel: okänt fält %d vid konstruktion av instruktion" -#: epiphany-ibld.c:1175 fr30-ibld.c:941 frv-ibld.c:1179 ip2k-ibld.c:688 -#: iq2000-ibld.c:894 lm32-ibld.c:744 m32c-ibld.c:2898 m32r-ibld.c:808 -#: mep-ibld.c:1813 mt-ibld.c:975 or1k-ibld.c:772 xc16x-ibld.c:978 -#: xstormy16-ibld.c:830 +#: bpf-ibld.c:709 epiphany-ibld.c:1175 fr30-ibld.c:941 frv-ibld.c:1179 +#: ip2k-ibld.c:688 iq2000-ibld.c:894 lm32-ibld.c:744 m32c-ibld.c:2898 +#: m32r-ibld.c:808 mep-ibld.c:1813 mt-ibld.c:975 or1k-ibld.c:910 +#: xc16x-ibld.c:978 xstormy16-ibld.c:830 #, c-format msgid "internal error: unrecognized field %d while decoding insn" msgstr "internt fel: okänt fält %d vid avkodning av instruktion" -#: epiphany-ibld.c:1319 fr30-ibld.c:1088 frv-ibld.c:1458 ip2k-ibld.c:763 -#: iq2000-ibld.c:1026 lm32-ibld.c:834 m32c-ibld.c:3516 m32r-ibld.c:922 -#: mep-ibld.c:2284 mt-ibld.c:1176 or1k-ibld.c:859 xc16x-ibld.c:1200 -#: xstormy16-ibld.c:941 +#: bpf-ibld.c:778 epiphany-ibld.c:1319 fr30-ibld.c:1088 frv-ibld.c:1458 +#: ip2k-ibld.c:763 iq2000-ibld.c:1026 lm32-ibld.c:834 m32c-ibld.c:3516 +#: m32r-ibld.c:922 mep-ibld.c:2284 mt-ibld.c:1176 or1k-ibld.c:1015 +#: xc16x-ibld.c:1200 xstormy16-ibld.c:941 #, c-format msgid "internal error: unrecognized field %d while getting int operand" msgstr "internt fel: okänt fält %d vid hämtning av heltalsoperand" -#: epiphany-ibld.c:1445 fr30-ibld.c:1217 frv-ibld.c:1719 ip2k-ibld.c:820 -#: iq2000-ibld.c:1140 lm32-ibld.c:906 m32c-ibld.c:4116 m32r-ibld.c:1018 -#: mep-ibld.c:2737 mt-ibld.c:1359 or1k-ibld.c:928 xc16x-ibld.c:1404 -#: xstormy16-ibld.c:1034 +#: bpf-ibld.c:829 epiphany-ibld.c:1445 fr30-ibld.c:1217 frv-ibld.c:1719 +#: ip2k-ibld.c:820 iq2000-ibld.c:1140 lm32-ibld.c:906 m32c-ibld.c:4116 +#: m32r-ibld.c:1018 mep-ibld.c:2737 mt-ibld.c:1359 or1k-ibld.c:1102 +#: xc16x-ibld.c:1404 xstormy16-ibld.c:1034 #, c-format msgid "internal error: unrecognized field %d while getting vma operand" msgstr "internt fel: okänt fält %d vid hämtning av vma-operand" -#: epiphany-ibld.c:1578 fr30-ibld.c:1349 frv-ibld.c:1987 ip2k-ibld.c:880 -#: iq2000-ibld.c:1261 lm32-ibld.c:985 m32c-ibld.c:4704 m32r-ibld.c:1120 -#: mep-ibld.c:3151 mt-ibld.c:1549 or1k-ibld.c:1004 xc16x-ibld.c:1609 -#: xstormy16-ibld.c:1134 +#: bpf-ibld.c:887 epiphany-ibld.c:1578 fr30-ibld.c:1349 frv-ibld.c:1987 +#: ip2k-ibld.c:880 iq2000-ibld.c:1261 lm32-ibld.c:985 m32c-ibld.c:4704 +#: m32r-ibld.c:1120 mep-ibld.c:3151 mt-ibld.c:1549 or1k-ibld.c:1196 +#: xc16x-ibld.c:1609 xstormy16-ibld.c:1134 #, c-format msgid "internal error: unrecognized field %d while setting int operand" msgstr "internt fel: okänt fält %d vid inställning av heltalsoperand" -#: epiphany-ibld.c:1701 fr30-ibld.c:1471 frv-ibld.c:2245 ip2k-ibld.c:930 -#: iq2000-ibld.c:1372 lm32-ibld.c:1054 m32c-ibld.c:5282 m32r-ibld.c:1212 -#: mep-ibld.c:3555 mt-ibld.c:1729 or1k-ibld.c:1070 xc16x-ibld.c:1804 -#: xstormy16-ibld.c:1224 +#: bpf-ibld.c:935 epiphany-ibld.c:1701 fr30-ibld.c:1471 frv-ibld.c:2245 +#: ip2k-ibld.c:930 iq2000-ibld.c:1372 lm32-ibld.c:1054 m32c-ibld.c:5282 +#: m32r-ibld.c:1212 mep-ibld.c:3555 mt-ibld.c:1729 or1k-ibld.c:1280 +#: xc16x-ibld.c:1804 xstormy16-ibld.c:1224 #, c-format msgid "internal error: unrecognized field %d while setting vma operand" msgstr "internt fel: okänt fält %d vid inställning av vma-operand" +#: cgen-asm.c:373 +#, c-format +msgid "operand out of range (%lu not between %lu and %lu)" +msgstr "operanden är utanför intervallet (%lu är inte mellan %lu och %lu)" + +#: d30v-dis.c:232 +#, c-format +msgid "illegal id (%d)" +msgstr "otillÃ¥tet id (%d)" + +#: d30v-dis.c:259 +#, c-format +msgid "<unknown register %d>" +msgstr "<okänt register %d>" + +#. Can't happen. +#: dis-buf.c:61 +#, c-format +msgid "Unknown error %d\n" +msgstr "Okänt fel %d\n" + +#: dis-buf.c:70 +#, c-format +msgid "Address 0x%s is out of bounds.\n" +msgstr "Adressen 0x%s ligger utanför tillÃ¥tna gränser.\n" + +#: epiphany-asm.c:68 +msgid "register unavailable for short instructions" +msgstr "register otillgänglig för korta instruktioner" + +#: epiphany-asm.c:115 +msgid "register name used as immediate value" +msgstr "registernamn mÃ¥ste användas som omedelbart värde" + +#. Don't treat "mov ip,ip" as a move-immediate. +#: epiphany-asm.c:178 epiphany-asm.c:234 +msgid "register source in immediate move" +msgstr "registerkälla i omedelbar förflyttning" + +#: epiphany-asm.c:187 +msgid "byte relocation unsupported" +msgstr "byteomlokalisering stöds inte" + +#. -- assembler routines inserted here. +#. -- asm.c +#: epiphany-asm.c:193 frv-asm.c:972 iq2000-asm.c:56 lm32-asm.c:95 +#: lm32-asm.c:127 lm32-asm.c:157 lm32-asm.c:187 lm32-asm.c:217 lm32-asm.c:247 +#: m32c-asm.c:140 m32c-asm.c:235 m32c-asm.c:276 m32c-asm.c:334 m32c-asm.c:355 +#: m32r-asm.c:53 mep-asm.c:241 mep-asm.c:259 mep-asm.c:274 mep-asm.c:289 +#: mep-asm.c:301 or1k-asm.c:54 +msgid "missing `)'" +msgstr "â€)†saknas" + +#: epiphany-asm.c:270 +msgid "ABORT: unknown operand" +msgstr "AVBROTT: okänd operand" + +#: epiphany-asm.c:296 +msgid "Not a pc-relative address." +msgstr "Inte en pc-relativ adress." + +#: epiphany-desc.c:2109 +#, c-format +msgid "internal error: epiphany_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" +msgstr "internt fel: epiphany_cgen_rebuild_tables: insn-chunk-bitsize värden i konflikt: â€%d†vs. â€%dâ€" + +#: epiphany-desc.c:2192 +#, c-format +msgid "internal error: epiphany_cgen_cpu_open: unsupported argument `%d'" +msgstr "internt fel: epiphany_cgen_cpu_open: argument stöds inte â€%dâ€" + +#: epiphany-desc.c:2211 +#, c-format +msgid "internal error: epiphany_cgen_cpu_open: no endianness specified" +msgstr "internt fel: epiphany_cgen_cpu_open: ingen byteordning angiven" + #: fr30-asm.c:93 m32c-asm.c:872 m32c-asm.c:879 msgid "Register number is not valid" msgstr "Registernummer är inte giltigt" @@ -978,21 +1004,21 @@ msgid "internal error, h8_disassemble_init" msgstr "internt fel, h8_disassemble_init" -#: h8300-dis.c:314 +#: h8300-dis.c:315 #, c-format msgid "Hmmmm 0x%x" msgstr "Hmmmm 0x%x" -#: h8300-dis.c:691 +#: h8300-dis.c:692 #, c-format msgid "Don't understand 0x%x \n" msgstr "FörstÃ¥r inte 0x%x \n" -#: i386-dis.c:11058 +#: i386-dis.c:11062 msgid "<internal disassembler error>" msgstr "<internt fel i avassembleraren>" -#: i386-dis.c:11353 +#: i386-dis.c:11360 #, c-format msgid "" "\n" @@ -1003,32 +1029,32 @@ "Följande i386/x86-64-specifika avassemblerarflaggor stöds för användning\n" "tillsammans med flaggan -M (flera flaggor kan skiljas Ã¥t med komman):\n" -#: i386-dis.c:11357 +#: i386-dis.c:11364 #, c-format msgid " x86-64 Disassemble in 64bit mode\n" msgstr " x86-64 Avassemblera i 64-bitarsläge\n" -#: i386-dis.c:11358 +#: i386-dis.c:11365 #, c-format msgid " i386 Disassemble in 32bit mode\n" msgstr " i386 Avassemblera i 32-bitarsläge\n" -#: i386-dis.c:11359 +#: i386-dis.c:11366 #, c-format msgid " i8086 Disassemble in 16bit mode\n" msgstr " i8086 Avassemblera i 16-bitarsläge\n" -#: i386-dis.c:11360 +#: i386-dis.c:11367 #, c-format msgid " att Display instruction in AT&T syntax\n" msgstr " att Visa instruktion i AT&T-syntax\n" -#: i386-dis.c:11361 +#: i386-dis.c:11368 #, c-format msgid " intel Display instruction in Intel syntax\n" msgstr " intel Visa instruktion i Intel-syntax\n" -#: i386-dis.c:11362 +#: i386-dis.c:11369 #, c-format msgid "" " att-mnemonic\n" @@ -1037,7 +1063,7 @@ " att-mnemonic\n" " Visa instruktion i AT&T-mnemonic\n" -#: i386-dis.c:11364 +#: i386-dis.c:11371 #, c-format msgid "" " intel-mnemonic\n" @@ -1046,106 +1072,106 @@ " intel-mnemonic\n" " Visa instruktion i Intel-mnemonic\n" -#: i386-dis.c:11366 +#: i386-dis.c:11373 #, c-format msgid " addr64 Assume 64bit address size\n" msgstr " addr64 Antag 64-bitars adresstorlek\n" -#: i386-dis.c:11367 +#: i386-dis.c:11374 #, c-format msgid " addr32 Assume 32bit address size\n" msgstr " addr32 Antag 32-bitars adresstorlek\n" -#: i386-dis.c:11368 +#: i386-dis.c:11375 #, c-format msgid " addr16 Assume 16bit address size\n" msgstr " addr16 Antag 16-bitars adresstorlek\n" -#: i386-dis.c:11369 +#: i386-dis.c:11376 #, c-format msgid " data32 Assume 32bit data size\n" msgstr " data32 Antag 32-bitars datastorlek\n" -#: i386-dis.c:11370 +#: i386-dis.c:11377 #, c-format msgid " data16 Assume 16bit data size\n" msgstr " data16 Antag 16-bitars datastorlek\n" -#: i386-dis.c:11371 +#: i386-dis.c:11378 #, c-format msgid " suffix Always display instruction suffix in AT&T syntax\n" msgstr " suffix Visa alltid instruktionssuffix i AT&T-syntax\n" -#: i386-dis.c:11372 +#: i386-dis.c:11379 #, c-format msgid " amd64 Display instruction in AMD64 ISA\n" msgstr " amd64 Visa instruktion i AMD64 ISA\n" -#: i386-dis.c:11373 +#: i386-dis.c:11380 #, c-format msgid " intel64 Display instruction in Intel64 ISA\n" msgstr " intel64 Visa instruktion i Intel64 ISA\n" -#: i386-dis.c:11936 +#: i386-dis.c:11943 msgid "64-bit address is disabled" msgstr "64-bitars adress är inaktiverad" -#: i386-gen.c:732 +#: i386-gen.c:754 #, c-format msgid "%s: error: " msgstr "%s: fel: " -#: i386-gen.c:911 +#: i386-gen.c:917 #, c-format msgid "%s: %d: unknown bitfield: %s\n" msgstr "%s: %d: okänt bitfält: %s\n" -#: i386-gen.c:913 +#: i386-gen.c:919 #, c-format msgid "unknown bitfield: %s\n" msgstr "okänt bitfält: %s\n" -#: i386-gen.c:976 +#: i386-gen.c:982 #, c-format msgid "%s: %d: missing `)' in bitfield: %s\n" msgstr "%s: %d: saknar â€)†i bitfält: %s\n" -#: i386-gen.c:1077 +#: i386-gen.c:1083 #, c-format msgid "unknown broadcast operand: %s\n" msgstr "okänd utsändningsoperand: %s\n" -#: i386-gen.c:1478 +#: i386-gen.c:1538 #, c-format msgid "can't find i386-reg.tbl for reading, errno = %s\n" msgstr "kan inte hitta i386-reg.tbl för läsning, errno = %s\n" -#: i386-gen.c:1556 +#: i386-gen.c:1616 #, c-format msgid "can't create i386-init.h, errno = %s\n" msgstr "kan inte skapa i386-init.h, errno = %s\n" -#: i386-gen.c:1646 ia64-gen.c:2829 +#: i386-gen.c:1706 ia64-gen.c:2829 #, c-format msgid "unable to change directory to \"%s\", errno = %s\n" msgstr "kan inte byta katalog till \"%s\", felnummer = %s\n" -#: i386-gen.c:1658 i386-gen.c:1661 +#: i386-gen.c:1720 i386-gen.c:1725 #, c-format msgid "CpuMax != %d!\n" msgstr "CpuMax != %d!\n" -#: i386-gen.c:1665 +#: i386-gen.c:1729 #, c-format msgid "%d unused bits in i386_cpu_flags.\n" msgstr "%d oanvända bitar i i386_cpu_flags.\n" -#: i386-gen.c:1672 +#: i386-gen.c:1744 #, c-format msgid "%d unused bits in i386_operand_type.\n" msgstr "%d oanvända bitar i386_operand_type.\n" -#: i386-gen.c:1686 +#: i386-gen.c:1758 #, c-format msgid "can't create i386-tbl.h, errno = %s\n" msgstr "kan inte skapa i386-tbl.h, errno = %s\n" @@ -1389,12 +1415,12 @@ msgid "internal error: lm32_cgen_cpu_open: no endianness specified" msgstr "internt fel: lm32_cgen_cpu_open: ingen byteordning angiven" -#: m10200-dis.c:157 m10300-dis.c:580 +#: m10200-dis.c:151 m10300-dis.c:574 #, c-format msgid "unknown\t0x%04lx" msgstr "okänd\t0x%04lx" -#: m10200-dis.c:327 +#: m10200-dis.c:321 #, c-format msgid "unknown\t0x%02lx" msgstr "okänd\t0x%02lx" @@ -1503,12 +1529,12 @@ msgid "internal error: m32r_cgen_cpu_open: no endianness specified" msgstr "internt fel: m32r_cgen_cpu_open: ingen byteordning angiven" -#: m68k-dis.c:1292 +#: m68k-dis.c:1294 #, c-format msgid "<function code %d>" msgstr "<funktionskod %d>" -#: m68k-dis.c:1455 +#: m68k-dis.c:1457 #, c-format msgid "<internal error in opcode table: %s %s>\n" msgstr "<internt fel i instruktionstabellen: %s %s>\n" @@ -1561,24 +1587,24 @@ msgid "internal error: mep_cgen_cpu_open: no endianness specified" msgstr "internt fel: mep_cgen_cpu_open: ingen byteordning angiven" -#: mips-dis.c:1800 mips-dis.c:2026 +#: mips-dis.c:1805 mips-dis.c:2031 #, c-format msgid "# internal error, undefined operand in `%s %s'" msgstr "# internt fel, okänd operand i â€%s %sâ€" -#: mips-dis.c:2615 +#: mips-dis.c:2620 msgid "Use canonical instruction forms.\n" msgstr "Använd kanoniska instruktionsformer.\n" -#: mips-dis.c:2617 +#: mips-dis.c:2622 msgid "Recognize MSA instructions.\n" msgstr "Kän igen MSA-instruktioner.\n" -#: mips-dis.c:2619 +#: mips-dis.c:2624 msgid "Recognize the virtualization ASE instructions.\n" msgstr "Känn igen ASE-virtualiseringsinstruktioner.\n" -#: mips-dis.c:2621 +#: mips-dis.c:2626 msgid "" "Recognize the eXtended Physical Address (XPA) ASE\n" " instructions.\n" @@ -1586,27 +1612,27 @@ "Känn igen utökade fysiskadress- (XPA) ASE-\n" " instruktioner.\n" -#: mips-dis.c:2624 +#: mips-dis.c:2629 msgid "Recognize the Global INValidate (GINV) ASE instructions.\n" msgstr "Känn igen globala invaliderings- (GINV) ASE-instruktioner.\n" -#: mips-dis.c:2628 +#: mips-dis.c:2633 msgid "Recognize the Loongson MultiMedia extensions Instructions (MMI) ASE instructions.\n" msgstr "Känn igen Loongson MultiMedia extensions Instructions (MMI) ASE-instruktioner\n" -#: mips-dis.c:2632 +#: mips-dis.c:2637 msgid "Recognize the Loongson Content Address Memory (CAM) instructions.\n" msgstr "Känn igen Loongson Content Address Memory (CAM)-instruktioner.\n" -#: mips-dis.c:2636 +#: mips-dis.c:2641 msgid "Recognize the Loongson EXTensions (EXT) instructions.\n" msgstr "Känn igen Loongson EXTensions (EXT)-instruktioner.\n" -#: mips-dis.c:2640 +#: mips-dis.c:2645 msgid "Recognize the Loongson EXTensions R2 (EXT2) instructions.\n" msgstr "Känn igen Loongson EXTensions R2 (EXT2)-instruktioner.\n" -#: mips-dis.c:2643 +#: mips-dis.c:2648 msgid "" "Print GPR names according to specified ABI.\n" " Default: based on binary being disassembled.\n" @@ -1614,7 +1640,7 @@ "Skriv ut GPR-namn enligt angivet ABI.\n" " Standard: baserat pÃ¥ den binärfil som avassembleras.\n" -#: mips-dis.c:2646 +#: mips-dis.c:2651 msgid "" "Print FPR names according to specified ABI.\n" " Default: numeric.\n" @@ -1622,7 +1648,7 @@ "Skriv ut FPR-namn enligt angivet ABI.\n" " Standard: numeriskt.\n" -#: mips-dis.c:2649 +#: mips-dis.c:2654 msgid "" "Print CP0 register names according to specified architecture.\n" " Default: based on binary being disassembled.\n" @@ -1630,7 +1656,7 @@ "Skriv ut CP0-registernamn enligt den angiven arkitektur.\n" " Standard: baserat pÃ¥ den binärfil som disassembleras.\n" -#: mips-dis.c:2653 +#: mips-dis.c:2658 msgid "" "Print HWR names according to specified architecture.\n" " Default: based on binary being disassembled.\n" @@ -1638,11 +1664,11 @@ "Skriv ut HWR-namn enligt angiven arkitektur.\n" " Standard: baserat pÃ¥ den binärfil som avassembleras.\n" -#: mips-dis.c:2656 +#: mips-dis.c:2661 msgid "Print GPR and FPR names according to specified ABI.\n" msgstr "Skriv ut GPR- och FPR-namn enligt det angivna ABI:t.\n" -#: mips-dis.c:2658 +#: mips-dis.c:2663 msgid "" "Print CP0 register and HWR names according to specified\n" " architecture." @@ -1650,7 +1676,7 @@ "Skriv ut CP0-register med HWR-namn enligt angiven\n" " arkitektur." -#: mips-dis.c:2744 +#: mips-dis.c:2749 #, c-format msgid "" "\n" @@ -1663,7 +1689,7 @@ "tillsammans med flaggan -M (flera flaggor kan skiljas Ã¥t med komman):\n" "\n" -#: mips-dis.c:2778 +#: mips-dis.c:2783 #, c-format msgid "" "\n" @@ -1688,7 +1714,11 @@ msgid "(unknown)" msgstr "(okänd)" -#: mmix-dis.c:510 +#: mmix-dis.c:247 mmix-dis.c:255 +msgid "*illegal*" +msgstr "*otillÃ¥ten*" + +#: mmix-dis.c:529 #, c-format msgid "*unknown operands type: %d*" msgstr "*okänd operandtyp: %d*" @@ -1851,7 +1881,7 @@ #. an immediate either. We don't know how much to increase #. aoffsetp by since whatever generated this is broken #. anyway! -#: ns32k-dis.c:533 +#: ns32k-dis.c:535 #, c-format msgid "$<undefined>" msgstr "$<odefinierad>" @@ -1864,27 +1894,27 @@ msgid "internal relocation type invalid" msgstr "intern omlokaliserings typ ogiltig" -#: or1k-desc.c:1978 +#: or1k-desc.c:2213 #, c-format msgid "internal error: or1k_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" msgstr "internt fel: or1k_cgen_rebuild_tables: insn-chunk-bitsize-värden i konflikt: â€%d†vs. â€%dâ€" -#: or1k-desc.c:2061 +#: or1k-desc.c:2296 #, c-format msgid "internal error: or1k_cgen_cpu_open: unsupported argument `%d'" msgstr "internt fel: or1k_cgen_cpu_open: argument stöds inte â€%dâ€" -#: or1k-desc.c:2080 +#: or1k-desc.c:2315 #, c-format msgid "internal error: or1k_cgen_cpu_open: no endianness specified" msgstr "internt fel: or1k_cgen_cpu_open: ingen byteordning angiven" -#: ppc-dis.c:370 +#: ppc-dis.c:376 #, c-format msgid "warning: ignoring unknown -M%s option" msgstr "varning: hoppar över okänd -M%s-flagga" -#: ppc-dis.c:858 +#: ppc-dis.c:957 #, c-format msgid "" "\n" @@ -1899,95 +1929,107 @@ msgid "invalid register" msgstr "ogiltigt register" -#: ppc-opc.c:384 ppc-opc.c:412 +#: ppc-opc.c:396 msgid "invalid conditional option" msgstr "ogiltig villkorlig flagga" -#: ppc-opc.c:386 ppc-opc.c:414 +#: ppc-opc.c:399 msgid "invalid counter access" msgstr "ogiltig räknarÃ¥tkomst" -#: ppc-opc.c:416 +#: ppc-opc.c:463 +msgid "BO value implies no branch hint, when using + or - modifier" +msgstr "BO-värde implicerar inget grentips, när + eller - modifierare används" + +#: ppc-opc.c:468 msgid "attempt to set y bit when using + or - modifier" msgstr "försök att ställa in y-biten dÃ¥ modifieraren + eller - användes" -#: ppc-opc.c:507 +#: ppc-opc.c:470 +msgid "attempt to set 'at' bits when using + or - modifier" +msgstr "försök att ställa in â€atâ€-bitar när + eller - modifierare används" + +#: ppc-opc.c:658 +msgid "invalid R operand" +msgstr "ogiltig R-operand" + +#: ppc-opc.c:713 msgid "invalid mask field" msgstr "ogiltigt maskfält" -#: ppc-opc.c:530 +#: ppc-opc.c:736 msgid "invalid mfcr mask" msgstr "ogiltig mfcr-mask" -#: ppc-opc.c:606 +#: ppc-opc.c:812 msgid "illegal L operand value" msgstr "felaktigt L-operandsvärde" -#: ppc-opc.c:645 +#: ppc-opc.c:851 msgid "incompatible L operand value" msgstr "inkompatibelt L-operandsvärde" -#: ppc-opc.c:684 ppc-opc.c:719 +#: ppc-opc.c:891 ppc-opc.c:926 msgid "illegal bitmask" msgstr "otillÃ¥ten bitmask" -#: ppc-opc.c:806 +#: ppc-opc.c:1013 msgid "address register in load range" msgstr "addressregister i inläsningsintervall" -#: ppc-opc.c:872 +#: ppc-opc.c:1079 msgid "index register in load range" msgstr "indexregistret är i inläsningsintervallet" -#: ppc-opc.c:901 ppc-opc.c:986 +#: ppc-opc.c:1108 ppc-opc.c:1194 msgid "source and target register operands must be different" msgstr "käll- och mÃ¥lregisteroperander mÃ¥ste vara olika" -#: ppc-opc.c:931 +#: ppc-opc.c:1139 msgid "invalid register operand when updating" msgstr "ogiltig registeroperand vid uppdatering" -#: ppc-opc.c:1049 +#: ppc-opc.c:1257 msgid "illegal immediate value" msgstr "felaktigt omedelbart värde" -#: ppc-opc.c:1154 +#: ppc-opc.c:1362 msgid "invalid bat number" msgstr "ogiltigt bat-nummer" -#: ppc-opc.c:1189 +#: ppc-opc.c:1397 msgid "invalid sprg number" msgstr "ogiltigt sprg-nummer" -#: ppc-opc.c:1226 +#: ppc-opc.c:1434 msgid "invalid tbr number" msgstr "ogiltigt tbr-nummer" -#: ppc-opc.c:1372 +#: ppc-opc.c:1581 msgid "invalid constant" msgstr "ogiltig konstant" -#: ppc-opc.c:1474 ppc-opc.c:1497 ppc-opc.c:1520 ppc-opc.c:1543 +#: ppc-opc.c:1683 ppc-opc.c:1706 ppc-opc.c:1729 ppc-opc.c:1752 msgid "UIMM = 00000 is illegal" msgstr "UIMM = 00000 är otillÃ¥tet" -#: ppc-opc.c:1566 +#: ppc-opc.c:1775 msgid "UIMM values >7 are illegal" msgstr "UIMM-värden >7 är otillÃ¥tna" -#: ppc-opc.c:1589 +#: ppc-opc.c:1798 msgid "UIMM values >15 are illegal" msgstr "UIMM-värden >15 är otillÃ¥tna" -#: ppc-opc.c:1612 +#: ppc-opc.c:1821 msgid "GPR odd is illegal" msgstr "Udda GPR är otillÃ¥tet" -#: ppc-opc.c:1635 ppc-opc.c:1658 +#: ppc-opc.c:1844 ppc-opc.c:1867 msgid "invalid offset" msgstr "ogiltig position" -#: ppc-opc.c:1681 +#: ppc-opc.c:1890 msgid "invalid Ddd value" msgstr "ogiltigt Ddd-värde" @@ -2001,7 +2043,7 @@ msgid "# internal error, undefined modifier (%c)" msgstr "# internt fel, okänd modifierare (%c)" -#: riscv-dis.c:541 +#: riscv-dis.c:545 #, c-format msgid "" "\n" @@ -2013,7 +2055,7 @@ "tillsammans med flaggan -M (flera flaggor kan skiljas Ã¥t med komman):\n" # sebras: typo in English text -#: riscv-dis.c:545 +#: riscv-dis.c:549 #, c-format msgid "" "\n" @@ -2022,7 +2064,7 @@ "\n" " numeric Skriv ut numeriska registernamn, snarare än ABI-namn.\n" -#: riscv-dis.c:548 +#: riscv-dis.c:552 #, c-format msgid "" "\n" @@ -2033,6 +2075,38 @@ " no-aliases Avassemblera endast till kanoniska instruktioner, snarare\n" " än till pseudoinstruktioner.\n" +#: rx-dis.c:139 rx-dis.c:163 rx-dis.c:171 rx-dis.c:179 rx-dis.c:187 +msgid "<invalid register number>" +msgstr "<ogiltigt registernummer>" + +#: rx-dis.c:147 rx-dis.c:195 +msgid "<invalid condition code>" +msgstr "<ogiltig villkorsflagga>" + +#: rx-dis.c:155 +msgid "<invalid flag>" +msgstr "<ogiltig flagga>" + +#: rx-dis.c:203 +msgid "<invalid opsize>" +msgstr "<ogiltig opstorlek>" + +#: rx-dis.c:211 +msgid "<invalid size>" +msgstr "<ogiltig storlek>" + +#: s12z-dis.c:258 s12z-dis.c:315 s12z-dis.c:326 +msgid "<illegal reg num>" +msgstr "<otillÃ¥tet reg. num.>" + +#: s12z-dis.c:389 +msgid "<bad>" +msgstr "<felaktig>" + +#: s12z-dis.c:400 +msgid ".<bad>" +msgstr ".<felaktig>" + #: s390-dis.c:42 msgid "Disassemble in ESA architecture mode" msgstr "Avassemblera i ESA-arkitektursläge" @@ -2061,8 +2135,8 @@ "Följande S/390-specifika avassemblerarflaggor stöds för användning\n" "tillsammans med flaggan -M (flera flaggor kan skiljas Ã¥t med komman):\n" -#: score-dis.c:663 score-dis.c:870 score-dis.c:1031 score-dis.c:1145 -#: score-dis.c:1152 score-dis.c:1159 score7-dis.c:695 score7-dis.c:858 +#: score-dis.c:661 score-dis.c:879 score-dis.c:1040 score-dis.c:1146 +#: score-dis.c:1154 score-dis.c:1161 score7-dis.c:695 score7-dis.c:858 msgid "<illegal instruction>" msgstr "<otillÃ¥ten instruktion>" @@ -2077,16 +2151,44 @@ msgstr "internt fel: felaktig sparc-opcode.h: â€%s†== â€%sâ€\n" #. Mark as non-valid instruction. -#: sparc-dis.c:1098 +#: sparc-dis.c:1095 msgid "unknown" msgstr "okänd" -#: v850-dis.c:453 +#: v850-dis.c:190 +msgid "<invalid s-reg number>" +msgstr "<ogiltigt s-regnummer>" + +#: v850-dis.c:206 +msgid "<invalid reg number>" +msgstr "<ogiltigt regnummer>" + +#: v850-dis.c:222 +msgid "<invalid v-reg number>" +msgstr "<ogiltigt v-regnummer>" + +#: v850-dis.c:236 +msgid "<invalid CC-reg number>" +msgstr "<ogiltigt CC-regnummer>" + +#: v850-dis.c:250 +msgid "<invalid float-CC-reg number>" +msgstr "<ogiltigt flyt-CC-regnummer>" + +#: v850-dis.c:264 +msgid "<invalid cacheop number>" +msgstr "<ogiltigt cacheopnummer>" + +#: v850-dis.c:275 +msgid "<invalid prefop number>" +msgstr "<ogiltigt prefopnummer>" + +#: v850-dis.c:510 #, c-format msgid "unknown operand shift: %x" msgstr "okänd operandskiftning: %x" -#: v850-dis.c:469 +#: v850-dis.c:526 #, c-format msgid "unknown reg: %d" msgstr "okänt register: %d" @@ -2168,7 +2270,7 @@ msgid "Name well-known globals" msgstr "Namnge välkända globaler" -#: wasm32-dis.c:503 +#: wasm32-dis.c:537 #, c-format msgid "" "The following WebAssembly-specific disassembler options are supported for use\n" Binary files /tmp/tmpwlqmdap4/HCMjq_z_kj/gdb-9.1/opcodes/po/uk.gmo and /tmp/tmpwlqmdap4/bi0oNuAXeo/gdb-10.2/opcodes/po/uk.gmo differ diff -Nru gdb-9.1/opcodes/po/uk.po gdb-10.2/opcodes/po/uk.po --- gdb-9.1/opcodes/po/uk.po 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/po/uk.po 2021-04-25 04:06:26.000000000 +0000 @@ -2,38 +2,38 @@ # Copyright (C) 2012 Free Software Foundation, Inc. # This file is distributed under the same license as the binutils package. # -# Yuri Chornoivan <yurchor@ukr.net>, 2012, 2013, 2014, 2017, 2018, 2019. +# Yuri Chornoivan <yurchor@ukr.net>, 2012, 2013, 2014, 2017, 2018, 2019, 2020. msgid "" msgstr "" -"Project-Id-Version: opcodes 2.31.90\n" +"Project-Id-Version: opcodes 2.34.90\n" "Report-Msgid-Bugs-To: bug-binutils@gnu.org\n" -"POT-Creation-Date: 2019-01-19 16:32+0000\n" -"PO-Revision-Date: 2019-01-20 10:31+0200\n" +"POT-Creation-Date: 2020-07-04 10:28+0100\n" +"PO-Revision-Date: 2020-07-04 16:41+0300\n" "Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n" -"Language-Team: Ukrainian <translation-team-uk@lists.sourceforge.net>\n" +"Language-Team: Ukrainian <trans-uk@lists.fedoraproject.org>\n" "Language: uk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" "Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -"X-Generator: Lokalize 2.0\n" +"X-Generator: Lokalize 20.07.70\n" -#: aarch64-asm.c:819 +#: aarch64-asm.c:820 msgid "specified register cannot be read from" msgstr "з вказаного регіÑтру не можна читати дані" -#: aarch64-asm.c:828 +#: aarch64-asm.c:829 msgid "specified register cannot be written to" msgstr "до вказаного регіÑтру не можна запиÑувати дані" #. Invalid option. -#: aarch64-dis.c:92 arc-dis.c:782 arm-dis.c:6174 +#: aarch64-dis.c:93 arc-dis.c:802 arm-dis.c:11654 #, c-format msgid "unrecognised disassembler option: %s" msgstr "невідомий параметр дизаÑемблюваннÑ: %s" -#: aarch64-dis.c:3448 +#: aarch64-dis.c:3531 #, c-format msgid "" "\n" @@ -44,7 +44,7 @@ "З перемикачем -M можна викориÑтовувати такі Ñпецифічні Ð´Ð»Ñ AARCH64 параметри\n" "дизаÑемблера (декілька параметрів Ñлід відокремлювати комами):\n" -#: aarch64-dis.c:3452 +#: aarch64-dis.c:3535 #, c-format msgid "" "\n" @@ -53,7 +53,7 @@ "\n" " no-aliases не виводити альтернативних назв інÑтрукцій.\n" -#: aarch64-dis.c:3455 +#: aarch64-dis.c:3538 #, c-format msgid "" "\n" @@ -62,7 +62,7 @@ "\n" " aliases вивеÑти альтернативні назви інÑтрукцій.\n" -#: aarch64-dis.c:3458 +#: aarch64-dis.c:3541 #, c-format msgid "" "\n" @@ -71,7 +71,7 @@ "\n" " no-notes не виводити нотатки щодо інÑтрукції.\n" -#: aarch64-dis.c:3461 +#: aarch64-dis.c:3544 #, c-format msgid "" "\n" @@ -80,7 +80,7 @@ "\n" " notes виводити нотатки щодо інÑтрукції.\n" -#: aarch64-dis.c:3465 +#: aarch64-dis.c:3548 #, c-format msgid "" "\n" @@ -89,264 +89,264 @@ "\n" " debug_dump тимчаÑовий перемикач Ð´Ð»Ñ Ð´Ñ–Ð°Ð³Ð½Ð¾Ñтичного траÑуваннÑ.\n" -#: aarch64-dis.c:3469 mips-dis.c:2773 mips-dis.c:2783 mips-dis.c:2786 -#: nfp-dis.c:2981 riscv-dis.c:552 +#: aarch64-dis.c:3552 mips-dis.c:2778 mips-dis.c:2788 mips-dis.c:2791 +#: nfp-dis.c:2981 riscv-dis.c:620 #, c-format msgid "\n" msgstr "\n" -#: aarch64-opc.c:1339 +#: aarch64-opc.c:1347 msgid "immediate value" msgstr "конÑтанта" -#: aarch64-opc.c:1349 +#: aarch64-opc.c:1357 msgid "immediate offset" msgstr "Ñталий зÑув" -#: aarch64-opc.c:1359 +#: aarch64-opc.c:1367 msgid "register number" msgstr "номер регіÑтра" -#: aarch64-opc.c:1369 +#: aarch64-opc.c:1377 msgid "register element index" msgstr "Ñ–Ð½Ð´ÐµÐºÑ ÐµÐ»ÐµÐ¼ÐµÐ½Ñ‚Ð° регіÑтра" -#: aarch64-opc.c:1379 +#: aarch64-opc.c:1387 msgid "shift amount" msgstr "величина зÑуву" -#: aarch64-opc.c:1391 +#: aarch64-opc.c:1399 msgid "multiplier" msgstr "множник" -#: aarch64-opc.c:1464 +#: aarch64-opc.c:1472 msgid "reg pair must start from even reg" msgstr "пара регіÑтрів має починатиÑÑ Ñ–Ð· парного регіÑтра" -#: aarch64-opc.c:1470 +#: aarch64-opc.c:1478 msgid "reg pair must be contiguous" msgstr "пара регіÑтрів має бути поÑлідовною" -#: aarch64-opc.c:1484 +#: aarch64-opc.c:1492 msgid "extraneous register" msgstr "Ñторонній регіÑÑ‚Ñ€" -#: aarch64-opc.c:1490 +#: aarch64-opc.c:1498 msgid "missing register" msgstr "не виÑтачає регіÑтра" -#: aarch64-opc.c:1501 +#: aarch64-opc.c:1509 msgid "stack pointer register expected" msgstr "мало бути викориÑтано регіÑÑ‚Ñ€ вказівника на Ñтек" -#: aarch64-opc.c:1524 +#: aarch64-opc.c:1534 msgid "z0-z15 expected" msgstr "мало бути z0-z15" -#: aarch64-opc.c:1525 +#: aarch64-opc.c:1535 msgid "z0-z7 expected" msgstr "мало бути z0-z7" -#: aarch64-opc.c:1551 +#: aarch64-opc.c:1561 msgid "invalid register list" msgstr "некоректний ÑпиÑок регіÑтрів" -#: aarch64-opc.c:1565 +#: aarch64-opc.c:1575 msgid "p0-p7 expected" msgstr "мало бути p0-p7" -#: aarch64-opc.c:1591 aarch64-opc.c:1599 +#: aarch64-opc.c:1601 aarch64-opc.c:1609 msgid "unexpected address writeback" msgstr "неочікуваний зворотний Ð·Ð°Ð¿Ð¸Ñ Ð°Ð´Ñ€ÐµÑ" -#: aarch64-opc.c:1611 +#: aarch64-opc.c:1620 msgid "address writeback expected" msgstr "мало бути викориÑтано зворотний Ð·Ð°Ð¿Ð¸Ñ Ð°Ð´Ñ€ÐµÑ" -#: aarch64-opc.c:1658 +#: aarch64-opc.c:1667 msgid "negative or unaligned offset expected" msgstr "мало бути викориÑтано від’ємне або невирівнÑне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ñ–Ð´Ñтупу" -#: aarch64-opc.c:1715 +#: aarch64-opc.c:1724 msgid "invalid register offset" msgstr "некоректний зÑув регіÑтра" -#: aarch64-opc.c:1737 +#: aarch64-opc.c:1746 msgid "invalid post-increment amount" msgstr "некоректна величина Ð·Ð±Ñ–Ð»ÑŒÑˆÐµÐ½Ð½Ñ Ð¿Ñ–ÑÐ»Ñ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ð¿Ð¾Ñ€Ñ–Ð²Ð½ÑннÑ" -#: aarch64-opc.c:1753 aarch64-opc.c:2247 +#: aarch64-opc.c:1762 aarch64-opc.c:2271 msgid "invalid shift amount" msgstr "некоректна величина зÑуву" -#: aarch64-opc.c:1766 +#: aarch64-opc.c:1775 msgid "invalid extend/shift operator" msgstr "некоректний оператор Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ Ð°Ð±Ð¾ зÑуву" -#: aarch64-opc.c:1812 aarch64-opc.c:2052 aarch64-opc.c:2087 aarch64-opc.c:2106 -#: aarch64-opc.c:2114 aarch64-opc.c:2201 aarch64-opc.c:2377 aarch64-opc.c:2477 -#: aarch64-opc.c:2490 +#: aarch64-opc.c:1821 aarch64-opc.c:2073 aarch64-opc.c:2108 aarch64-opc.c:2127 +#: aarch64-opc.c:2135 aarch64-opc.c:2224 aarch64-opc.c:2401 aarch64-opc.c:2501 +#: aarch64-opc.c:2514 msgid "immediate out of range" msgstr "конÑтанта поза межами припуÑтимого діапазону" -#: aarch64-opc.c:1834 aarch64-opc.c:1876 aarch64-opc.c:1926 aarch64-opc.c:1960 +#: aarch64-opc.c:1843 aarch64-opc.c:1885 aarch64-opc.c:1947 aarch64-opc.c:1981 msgid "invalid addressing mode" msgstr "некоректний режим адреÑуваннÑ" -#: aarch64-opc.c:1918 +#: aarch64-opc.c:1939 msgid "index register xzr is not allowed" msgstr "регіÑÑ‚Ñ€ xzr індекÑу не можна викориÑтовувати" -#: aarch64-opc.c:2040 aarch64-opc.c:2062 aarch64-opc.c:2280 aarch64-opc.c:2288 -#: aarch64-opc.c:2354 aarch64-opc.c:2383 +#: aarch64-opc.c:2061 aarch64-opc.c:2083 aarch64-opc.c:2304 aarch64-opc.c:2312 +#: aarch64-opc.c:2378 aarch64-opc.c:2407 msgid "invalid shift operator" msgstr "некоректний оператор зÑуву" -#: aarch64-opc.c:2046 +#: aarch64-opc.c:2067 msgid "shift amount must be 0 or 12" msgstr "величина зÑуву має бути 0 або 12" -#: aarch64-opc.c:2069 +#: aarch64-opc.c:2090 msgid "shift amount must be a multiple of 16" msgstr "зÑув мав бути кратним до 16" -#: aarch64-opc.c:2081 +#: aarch64-opc.c:2102 msgid "negative immediate value not allowed" msgstr "викориÑÑ‚Ð°Ð½Ð½Ñ Ð²Ñ–Ð´â€™Ñ”Ð¼Ð½Ð¸Ñ… конÑтант заборонено" -#: aarch64-opc.c:2212 +#: aarch64-opc.c:2235 msgid "immediate zero expected" msgstr "мало бути викориÑтано нульову конÑтанту" -#: aarch64-opc.c:2226 +#: aarch64-opc.c:2249 msgid "rotate expected to be 0, 90, 180 or 270" msgstr "Ð´Ð»Ñ Ð¾Ð±ÐµÑ€Ñ‚Ð°Ð½Ð½Ñ Ð¼Ð°Ð»Ð¾ бути Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ 0, 90, 180 або 270" -#: aarch64-opc.c:2236 +#: aarch64-opc.c:2260 msgid "rotate expected to be 90 or 270" msgstr "Ð´Ð»Ñ Ð¾Ð±ÐµÑ€Ñ‚Ð°Ð½Ð½Ñ Ð¼Ð°Ð»Ð¾ бути Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ 90 або 270" -#: aarch64-opc.c:2296 +#: aarch64-opc.c:2320 msgid "shift is not permitted" msgstr "зÑув заборонено" -#: aarch64-opc.c:2321 +#: aarch64-opc.c:2345 msgid "invalid value for immediate" msgstr "некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ ÐºÐ¾Ð½Ñтанти" -#: aarch64-opc.c:2346 +#: aarch64-opc.c:2370 msgid "shift amount must be 0 or 16" msgstr "величина зÑуву має бути 0 або 16" -#: aarch64-opc.c:2367 +#: aarch64-opc.c:2391 msgid "floating-point immediate expected" msgstr "мало бути викориÑтано конÑтанту з рухомою крапкою" -#: aarch64-opc.c:2401 +#: aarch64-opc.c:2425 msgid "no shift amount allowed for 8-bit constants" msgstr "Ð´Ð»Ñ 8-бітових Ñталих не передбачено величини зÑуву" -#: aarch64-opc.c:2411 +#: aarch64-opc.c:2435 msgid "shift amount must be 0 or 8" msgstr "величина зÑуву має бути 0 або 8" -#: aarch64-opc.c:2424 +#: aarch64-opc.c:2448 msgid "immediate too big for element size" msgstr "Ñтала велична Ñ” надто великою Ð´Ð»Ñ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ елемента" -#: aarch64-opc.c:2431 +#: aarch64-opc.c:2455 msgid "invalid arithmetic immediate" msgstr "некоректна арифметична Ñтала" -#: aarch64-opc.c:2445 +#: aarch64-opc.c:2469 msgid "floating-point value must be 0.5 or 1.0" msgstr "чиÑлом із рухомою крапкою має бути 0.5 або 1.0" -#: aarch64-opc.c:2455 +#: aarch64-opc.c:2479 msgid "floating-point value must be 0.5 or 2.0" msgstr "чиÑлом із рухомою крапкою має бути 0.5 або 2.0" -#: aarch64-opc.c:2465 +#: aarch64-opc.c:2489 msgid "floating-point value must be 0.0 or 1.0" msgstr "чиÑлом із рухомою крапкою має бути 0.0 або 1.0" -#: aarch64-opc.c:2496 +#: aarch64-opc.c:2520 msgid "invalid replicated MOV immediate" msgstr "некоректно відтворена Ñтала у MOV" -#: aarch64-opc.c:2614 +#: aarch64-opc.c:2641 msgid "extend operator expected" msgstr "мало бути викориÑтано оператор розширеннÑ" -#: aarch64-opc.c:2627 +#: aarch64-opc.c:2654 msgid "missing extend operator" msgstr "не виÑтачає оператора розширеннÑ" -#: aarch64-opc.c:2633 +#: aarch64-opc.c:2660 msgid "'LSL' operator not allowed" msgstr "ВикориÑÑ‚Ð°Ð½Ð½Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ‚Ð¾Ñ€Ð° «LSL» заборонено" -#: aarch64-opc.c:2654 +#: aarch64-opc.c:2681 msgid "W register expected" msgstr "мало бути викориÑтано регіÑÑ‚Ñ€ W" -#: aarch64-opc.c:2665 +#: aarch64-opc.c:2692 msgid "shift operator expected" msgstr "мало бути викориÑтано оператор зÑуву" -#: aarch64-opc.c:2672 +#: aarch64-opc.c:2699 msgid "'ROR' operator not allowed" msgstr "ВикориÑÑ‚Ð°Ð½Ð½Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ‚Ð¾Ñ€Ð° «ROR» заборонено" -#: aarch64-opc.c:3671 +#: aarch64-opc.c:3714 msgid "reading from a write-only register" msgstr "Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ñ–Ð· призначено лише Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñу регіÑтру" -#: aarch64-opc.c:3673 +#: aarch64-opc.c:3716 msgid "writing to a read-only register" msgstr "Ð·Ð°Ð¿Ð¸Ñ Ð´Ð¾ призначеного лише Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ñ€ÐµÐ³Ñ–Ñтру" -#: aarch64-opc.c:4815 +#: aarch64-opc.c:4711 msgid "instruction opens new dependency sequence without ending previous one" msgstr "інÑÑ‚Ñ€ÑƒÐºÑ†Ñ–Ñ Ð²Ñ–Ð´ÐºÑ€Ð¸Ð²Ð°Ñ” нову поÑлідовніÑÑ‚ÑŒ залежноÑтей без Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½ÑŒÐ¾Ñ—" -#: aarch64-opc.c:4835 +#: aarch64-opc.c:4731 msgid "previous `movprfx' sequence not closed" msgstr "попередню поÑлідовніÑÑ‚ÑŒ «movprfx» не завершено" -#: aarch64-opc.c:4852 +#: aarch64-opc.c:4750 msgid "SVE instruction expected after `movprfx'" msgstr "піÑÐ»Ñ Â«movprfx» мала бути інÑÑ‚Ñ€ÑƒÐºÑ†Ñ–Ñ SVE" -#: aarch64-opc.c:4865 +#: aarch64-opc.c:4763 msgid "SVE `movprfx' compatible instruction expected" msgstr "мало бути вказано ÑуміÑну із «movprfx» інÑтрукцію SVE" -#: aarch64-opc.c:4956 +#: aarch64-opc.c:4850 msgid "predicated instruction expected after `movprfx'" msgstr "піÑÐ»Ñ Â«movprfx» мала бути Ñтверджувальна інÑтрукціÑ" -#: aarch64-opc.c:4968 +#: aarch64-opc.c:4862 msgid "merging predicate expected due to preceding `movprfx'" msgstr "мало бути об'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð¿Ñ€ÐµÐ´Ð¸ÐºÐ°Ñ‚Ñ–Ð² через попередню «movprfx»" -#: aarch64-opc.c:4980 +#: aarch64-opc.c:4874 msgid "predicate register differs from that in preceding `movprfx'" msgstr "предикативний регіÑÑ‚Ñ€ не збігаєтьÑÑ Ñ–Ð· визначеним Ð´Ð»Ñ Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½ÑŒÐ¾Ð³Ð¾ «movprfx»" -#: aarch64-opc.c:4999 +#: aarch64-opc.c:4893 msgid "output register of preceding `movprfx' not used in current instruction" msgstr "регіÑÑ‚Ñ€ Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… попереднього «movprfx» не викориÑтано у поточній інÑтрукції." -#: aarch64-opc.c:5012 +#: aarch64-opc.c:4906 msgid "output register of preceding `movprfx' expected as output" msgstr "регіÑÑ‚Ñ€ Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… попереднього «movprfx» мало бути викориÑтано Ñк вивід" -#: aarch64-opc.c:5024 +#: aarch64-opc.c:4918 msgid "output register of preceding `movprfx' used as input" msgstr "регіÑÑ‚Ñ€ Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… попереднього «movprfx» викориÑтано Ñк вхідні дані" -#: aarch64-opc.c:5040 +#: aarch64-opc.c:4934 msgid "register size not compatible with previous `movprfx'" msgstr "розмір регіÑтру Ñ” неÑуміÑним із попереднім «movprfx»" @@ -358,7 +358,7 @@ msgid "jump hint unaligned" msgstr "прив’Ñзку переходу не вирівнÑно" -#: arc-dis.c:377 +#: arc-dis.c:379 msgid "" "\n" "Warning: disassembly may be wrong due to guessed opcode class choice.\n" @@ -370,12 +370,16 @@ "СкориÑтайтеÑÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ -M<клаÑ[,клаÑ]> Ð´Ð»Ñ Ð²Ð¸Ð±Ð¾Ñ€Ñƒ правильних клаÑів кодів операцій.\n" "\t\t\t\t" -#: arc-dis.c:825 +#: arc-dis.c:440 +msgid "An error occured while generating the extension instruction operations" +msgstr "СталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° під Ñ‡Ð°Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ñ–Ð¹ інÑтрукцій розширеннÑ" + +#: arc-dis.c:845 #, c-format msgid "unrecognised disassembler CPU option: %s" msgstr "невідомий параметр дизаÑÐµÐ¼Ð±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñ†ÐµÑора: %s" -#: arc-dis.c:1387 +#: arc-dis.c:1412 #, c-format msgid "" "\n" @@ -386,42 +390,47 @@ "З перемикачем -M можна викориÑтовувати такі Ñпецифічні Ð´Ð»Ñ ARC параметри\n" "дизаÑемблера (декілька параметрів Ñлід відокремлювати комами):\n" -#: arc-dis.c:1399 +#: arc-dis.c:1424 #, c-format msgid " dsp Recognize DSP instructions.\n" msgstr " dsp розпізнавати інÑтрукції DSP.\n" -#: arc-dis.c:1401 +#: arc-dis.c:1426 #, c-format msgid " spfp Recognize FPX SP instructions.\n" msgstr " spfp розпізнавати інÑтрукції SP FPX.\n" -#: arc-dis.c:1403 +#: arc-dis.c:1428 #, c-format msgid " dpfp Recognize FPX DP instructions.\n" msgstr " dpfp розпізнавати інÑтрукції DP FPX.\n" -#: arc-dis.c:1405 +#: arc-dis.c:1430 #, c-format msgid " quarkse_em Recognize FPU QuarkSE-EM instructions.\n" msgstr " quarkse_em розпізнавати інÑтрукції QuarkSE-EM FPU.\n" -#: arc-dis.c:1407 +#: arc-dis.c:1432 #, c-format msgid " fpuda Recognize double assist FPU instructions.\n" msgstr " fpuda розпізнавати інÑтрукції подвійної точноÑÑ‚Ñ– допоміжного FPU.\n" -#: arc-dis.c:1409 +#: arc-dis.c:1434 #, c-format msgid " fpus Recognize single precision FPU instructions.\n" msgstr " fpus розпізнавати інÑтрукції FPU одинарної точноÑÑ‚Ñ–.\n" -#: arc-dis.c:1411 +#: arc-dis.c:1436 #, c-format msgid " fpud Recognize double precision FPU instructions.\n" msgstr " fpud розпізнавати інÑтрукції FPU подвійної точноÑÑ‚Ñ–.\n" -#: arc-dis.c:1413 +#: arc-dis.c:1438 +#, c-format +msgid " nps400 Recognize NPS400 instructions.\n" +msgstr " nps400 розпізнавати інÑтрукції NPS400.\n" + +#: arc-dis.c:1440 #, c-format msgid " hex Use only hexadecimal number to print immediates.\n" msgstr " hex викориÑтовувати лише шіÑтнадцÑткове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾Ð¼Ñ–Ð¶Ð½Ð¸Ñ….\n" @@ -587,48 +596,67 @@ msgid "invalid position, should be one of: 0,4,8,...124." msgstr "некоректна позиціÑ, мало бути одне з таких значень: 0,4,8,...124." -#: arm-dis.c:3242 +#: arm-dis.c:5192 msgid "Select raw register names" msgstr "Вибрати проÑÑ‚Ñ– назви регіÑтрів" -#: arm-dis.c:3244 +#: arm-dis.c:5194 msgid "Select register names used by GCC" msgstr "Виберіть назви регіÑтрів, Ñкі викориÑтовуватимутьÑÑ GCC" -#: arm-dis.c:3246 +#: arm-dis.c:5196 msgid "Select register names used in ARM's ISA documentation" msgstr "Виберіть назви регіÑтрів, Ñкі викориÑтовуютьÑÑ Ñƒ документації з ISA ARM" -#: arm-dis.c:3248 +#: arm-dis.c:5198 msgid "Assume all insns are Thumb insns" msgstr "ПрипуÑкати, що уÑÑ– інÑтрукції Ñ” інÑтрукціÑми Thumb" -#: arm-dis.c:3249 +#: arm-dis.c:5199 msgid "Examine preceding label to determine an insn's type" msgstr "Вивчати попередню мітку Ð´Ð»Ñ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ‚Ð¸Ð¿Ñƒ інÑтрукції" -#: arm-dis.c:3250 +#: arm-dis.c:5200 msgid "Select register names used in the APCS" msgstr "Вибрати назви регіÑтрів, що викориÑтовуютьÑÑ Ð² APCS" -#: arm-dis.c:3252 +#: arm-dis.c:5202 msgid "Select register names used in the ATPCS" msgstr "Вибрати назви регіÑтрів, що викориÑтовуютьÑÑ Ð² ATPCS" -#: arm-dis.c:3254 +#: arm-dis.c:5204 msgid "Select special register names used in the ATPCS" msgstr "Вибрати назви Ñпеціальних регіÑтрів, що викориÑтовуютьÑÑ Ð² ATPCS" -#: arm-dis.c:3652 +#: arm-dis.c:5206 +msgid "Enable CDE extensions for coprocessor N space" +msgstr "Увімкнути Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ CDE Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñтору N ÑпівпроцеÑора" + +#: arm-dis.c:8375 msgid "<illegal precision>" msgstr "<некоректна точніÑÑ‚ÑŒ>" -#: arm-dis.c:6165 +#: arm-dis.c:11615 #, c-format msgid "unrecognised register name set: %s" msgstr "невідомий набір назв регіÑтрів: %s" -#: arm-dis.c:6906 +#: arm-dis.c:11629 +#, c-format +msgid "cde coprocessor not between 0-7: %s" +msgstr "СпівпроцеÑор cde не у діапазоні 0-7: %s" + +#: arm-dis.c:11635 +#, c-format +msgid "coproc must have an argument: %s" +msgstr "coproc повинен мати аргумент: %s" + +#: arm-dis.c:11648 +#, c-format +msgid "coprocN argument takes options \"generic\", \"cde\", or \"CDE\": %s" +msgstr "Ðргумент coprocN приймає параметри «generic», «cde» або «CDE»: %s" + +#: arm-dis.c:12359 #, c-format msgid "" "\n" @@ -644,256 +672,286 @@ msgid "undefined" msgstr "не визначено" -#: avr-dis.c:216 +#: avr-dis.c:218 #, c-format msgid "internal disassembler error" msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° дизаÑемблера" -#: avr-dis.c:270 +#: avr-dis.c:272 #, c-format msgid "unknown constraint `%c'" msgstr "невідоме Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ Â«%c»" -#: cgen-asm.c:351 epiphany-ibld.c:201 fr30-ibld.c:201 frv-ibld.c:201 -#: ip2k-ibld.c:201 iq2000-ibld.c:201 lm32-ibld.c:201 m32c-ibld.c:201 -#: m32r-ibld.c:201 mep-ibld.c:201 mt-ibld.c:201 or1k-ibld.c:201 -#: xc16x-ibld.c:201 xstormy16-ibld.c:201 -#, c-format -msgid "operand out of range (%ld not between %ld and %ld)" -msgstr "операнд лежить поза межами діапазону (%ld не перебуває між %ld Ñ– %ld)" - -#: cgen-asm.c:373 -#, c-format -msgid "operand out of range (%lu not between %lu and %lu)" -msgstr "операнд лежить поза межами діапазону (%lu не перебуває між %lu Ñ– %lu)" - -#: d30v-dis.c:229 -#, c-format -msgid "illegal id (%d)" -msgstr "некоректний ідентифікатор (%d)" - -#: d30v-dis.c:256 -#, c-format -msgid "<unknown register %d>" -msgstr "<невідомий регіÑÑ‚Ñ€ %d>" - -#. Can't happen. -#: dis-buf.c:61 -#, c-format -msgid "Unknown error %d\n" -msgstr "Ðевідома помилка %d\n" - -#: dis-buf.c:70 -#, c-format -msgid "Address 0x%s is out of bounds.\n" -msgstr "ÐдреÑа 0x%s лежить поза межами доÑтупного діапазону.\n" - -#: epiphany-asm.c:68 -msgid "register unavailable for short instructions" -msgstr "регіÑÑ‚Ñ€ недоÑтупний Ð´Ð»Ñ ÐºÐ¾Ñ€Ð¾Ñ‚ÐºÐ¸Ñ… інÑтрукцій" - -#: epiphany-asm.c:115 -msgid "register name used as immediate value" -msgstr "назву регіÑтра викориÑтано Ñк поточне значеннÑ" - -#. Don't treat "mov ip,ip" as a move-immediate. -#: epiphany-asm.c:178 epiphany-asm.c:234 -msgid "register source in immediate move" -msgstr "джерело у регіÑтрі під Ñ‡Ð°Ñ Ð¿ÐµÑ€ÐµÑÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ñ‚Ð¾Ñ‡Ð½Ð¾Ð³Ð¾ значеннÑ" - -#: epiphany-asm.c:187 -msgid "byte relocation unsupported" -msgstr "підтримки переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð±Ð°Ð¹Ñ‚Ñ–Ð² не передбачено" - -#. -- assembler routines inserted here. -#. -- asm.c -#: epiphany-asm.c:193 frv-asm.c:972 iq2000-asm.c:56 lm32-asm.c:95 -#: lm32-asm.c:127 lm32-asm.c:157 lm32-asm.c:187 lm32-asm.c:217 lm32-asm.c:247 -#: m32c-asm.c:140 m32c-asm.c:235 m32c-asm.c:276 m32c-asm.c:334 m32c-asm.c:355 -#: m32r-asm.c:53 mep-asm.c:241 mep-asm.c:259 mep-asm.c:274 mep-asm.c:289 -#: mep-asm.c:301 or1k-asm.c:54 -msgid "missing `)'" -msgstr "не виÑтачає «)»" - -#: epiphany-asm.c:270 -msgid "ABORT: unknown operand" -msgstr "ABORT: невідомий операнд" - -#: epiphany-asm.c:296 -msgid "Not a pc-relative address." -msgstr "ÐдреÑа, Ñка не Ñ” відноÑною щодо лічильника команд (pc)." - -#: epiphany-asm.c:456 fr30-asm.c:311 frv-asm.c:1264 ip2k-asm.c:512 -#: iq2000-asm.c:460 lm32-asm.c:350 m32c-asm.c:1585 m32r-asm.c:329 -#: mep-asm.c:1288 mt-asm.c:596 or1k-asm.c:512 xc16x-asm.c:377 +#: bpf-asm.c:97 +msgid "expected 16, 32 or 64 in" +msgstr "мало бути 16, 32 або 64 у" + +#: bpf-asm.c:181 epiphany-asm.c:456 fr30-asm.c:311 frv-asm.c:1264 +#: ip2k-asm.c:512 iq2000-asm.c:460 lm32-asm.c:350 m32c-asm.c:1585 +#: m32r-asm.c:329 mep-asm.c:1287 mt-asm.c:596 or1k-asm.c:571 xc16x-asm.c:377 #: xstormy16-asm.c:277 #, c-format msgid "internal error: unrecognized field %d while parsing" msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: під Ñ‡Ð°Ñ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ виÑвлено нерозпізнане поле %d" -#: epiphany-asm.c:508 fr30-asm.c:363 frv-asm.c:1316 ip2k-asm.c:564 -#: iq2000-asm.c:512 lm32-asm.c:402 m32c-asm.c:1637 m32r-asm.c:381 -#: mep-asm.c:1340 mt-asm.c:648 or1k-asm.c:564 xc16x-asm.c:429 +#: bpf-asm.c:233 epiphany-asm.c:508 fr30-asm.c:363 frv-asm.c:1316 +#: ip2k-asm.c:564 iq2000-asm.c:512 lm32-asm.c:402 m32c-asm.c:1637 +#: m32r-asm.c:381 mep-asm.c:1339 mt-asm.c:648 or1k-asm.c:623 xc16x-asm.c:429 #: xstormy16-asm.c:329 msgid "missing mnemonic in syntax string" msgstr "не виÑтачає Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñимволічного запиÑу у Ñ€Ñдку ÑинтакÑиÑу" #. We couldn't parse it. -#: epiphany-asm.c:643 epiphany-asm.c:647 epiphany-asm.c:736 epiphany-asm.c:843 -#: fr30-asm.c:498 fr30-asm.c:502 fr30-asm.c:591 fr30-asm.c:698 frv-asm.c:1451 -#: frv-asm.c:1455 frv-asm.c:1544 frv-asm.c:1651 ip2k-asm.c:699 ip2k-asm.c:703 -#: ip2k-asm.c:792 ip2k-asm.c:899 iq2000-asm.c:647 iq2000-asm.c:651 -#: iq2000-asm.c:740 iq2000-asm.c:847 lm32-asm.c:537 lm32-asm.c:541 -#: lm32-asm.c:630 lm32-asm.c:737 m32c-asm.c:1772 m32c-asm.c:1776 -#: m32c-asm.c:1865 m32c-asm.c:1972 m32r-asm.c:516 m32r-asm.c:520 -#: m32r-asm.c:609 m32r-asm.c:716 mep-asm.c:1475 mep-asm.c:1479 mep-asm.c:1568 -#: mep-asm.c:1675 mt-asm.c:783 mt-asm.c:787 mt-asm.c:876 mt-asm.c:983 -#: or1k-asm.c:699 or1k-asm.c:703 or1k-asm.c:792 or1k-asm.c:899 xc16x-asm.c:564 -#: xc16x-asm.c:568 xc16x-asm.c:657 xc16x-asm.c:764 xstormy16-asm.c:464 -#: xstormy16-asm.c:468 xstormy16-asm.c:557 xstormy16-asm.c:664 +#: bpf-asm.c:368 bpf-asm.c:372 bpf-asm.c:461 bpf-asm.c:568 epiphany-asm.c:643 +#: epiphany-asm.c:647 epiphany-asm.c:736 epiphany-asm.c:843 fr30-asm.c:498 +#: fr30-asm.c:502 fr30-asm.c:591 fr30-asm.c:698 frv-asm.c:1451 frv-asm.c:1455 +#: frv-asm.c:1544 frv-asm.c:1651 ip2k-asm.c:699 ip2k-asm.c:703 ip2k-asm.c:792 +#: ip2k-asm.c:899 iq2000-asm.c:647 iq2000-asm.c:651 iq2000-asm.c:740 +#: iq2000-asm.c:847 lm32-asm.c:537 lm32-asm.c:541 lm32-asm.c:630 +#: lm32-asm.c:737 m32c-asm.c:1772 m32c-asm.c:1776 m32c-asm.c:1865 +#: m32c-asm.c:1972 m32r-asm.c:516 m32r-asm.c:520 m32r-asm.c:609 m32r-asm.c:716 +#: mep-asm.c:1474 mep-asm.c:1478 mep-asm.c:1567 mep-asm.c:1674 mt-asm.c:783 +#: mt-asm.c:787 mt-asm.c:876 mt-asm.c:983 or1k-asm.c:758 or1k-asm.c:762 +#: or1k-asm.c:851 or1k-asm.c:958 xc16x-asm.c:564 xc16x-asm.c:568 +#: xc16x-asm.c:657 xc16x-asm.c:764 xstormy16-asm.c:464 xstormy16-asm.c:468 +#: xstormy16-asm.c:557 xstormy16-asm.c:664 msgid "unrecognized instruction" msgstr "нерозпізнана інÑтрукціÑ" -#: epiphany-asm.c:690 fr30-asm.c:545 frv-asm.c:1498 ip2k-asm.c:746 -#: iq2000-asm.c:694 lm32-asm.c:584 m32c-asm.c:1819 m32r-asm.c:563 -#: mep-asm.c:1522 mt-asm.c:830 or1k-asm.c:746 xc16x-asm.c:611 +#: bpf-asm.c:415 epiphany-asm.c:690 fr30-asm.c:545 frv-asm.c:1498 +#: ip2k-asm.c:746 iq2000-asm.c:694 lm32-asm.c:584 m32c-asm.c:1819 +#: m32r-asm.c:563 mep-asm.c:1521 mt-asm.c:830 or1k-asm.c:805 xc16x-asm.c:611 #: xstormy16-asm.c:511 #, c-format msgid "syntax error (expected char `%c', found `%c')" msgstr "ÑинтакÑична помилка (мало бути вказано Ñимвол «%c», виÑвлено ж Ñимвол «%c»)" -#: epiphany-asm.c:700 fr30-asm.c:555 frv-asm.c:1508 ip2k-asm.c:756 -#: iq2000-asm.c:704 lm32-asm.c:594 m32c-asm.c:1829 m32r-asm.c:573 -#: mep-asm.c:1532 mt-asm.c:840 or1k-asm.c:756 xc16x-asm.c:621 +#: bpf-asm.c:425 epiphany-asm.c:700 fr30-asm.c:555 frv-asm.c:1508 +#: ip2k-asm.c:756 iq2000-asm.c:704 lm32-asm.c:594 m32c-asm.c:1829 +#: m32r-asm.c:573 mep-asm.c:1531 mt-asm.c:840 or1k-asm.c:815 xc16x-asm.c:621 #: xstormy16-asm.c:521 #, c-format msgid "syntax error (expected char `%c', found end of instruction)" msgstr "ÑинтакÑична помилка (мало бути вказано Ñимвол «%c», виÑвлено ж Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ñ–Ð½Ñтрукції)" -#: epiphany-asm.c:730 fr30-asm.c:585 frv-asm.c:1538 ip2k-asm.c:786 -#: iq2000-asm.c:734 lm32-asm.c:624 m32c-asm.c:1859 m32r-asm.c:603 -#: mep-asm.c:1562 mt-asm.c:870 or1k-asm.c:786 xc16x-asm.c:651 +#: bpf-asm.c:455 epiphany-asm.c:730 fr30-asm.c:585 frv-asm.c:1538 +#: ip2k-asm.c:786 iq2000-asm.c:734 lm32-asm.c:624 m32c-asm.c:1859 +#: m32r-asm.c:603 mep-asm.c:1561 mt-asm.c:870 or1k-asm.c:845 xc16x-asm.c:651 #: xstormy16-asm.c:551 msgid "junk at end of line" msgstr "зайві Ñимволи наприкінці Ñ€Ñдка" -#: epiphany-asm.c:842 fr30-asm.c:697 frv-asm.c:1650 ip2k-asm.c:898 -#: iq2000-asm.c:846 lm32-asm.c:736 m32c-asm.c:1971 m32r-asm.c:715 -#: mep-asm.c:1674 mt-asm.c:982 or1k-asm.c:898 xc16x-asm.c:763 +#: bpf-asm.c:567 epiphany-asm.c:842 fr30-asm.c:697 frv-asm.c:1650 +#: ip2k-asm.c:898 iq2000-asm.c:846 lm32-asm.c:736 m32c-asm.c:1971 +#: m32r-asm.c:715 mep-asm.c:1673 mt-asm.c:982 or1k-asm.c:957 xc16x-asm.c:763 #: xstormy16-asm.c:663 msgid "unrecognized form of instruction" msgstr "нерозпізнана форма інÑтрукції" -#: epiphany-asm.c:856 fr30-asm.c:711 frv-asm.c:1664 ip2k-asm.c:912 -#: iq2000-asm.c:860 lm32-asm.c:750 m32c-asm.c:1985 m32r-asm.c:729 -#: mep-asm.c:1688 mt-asm.c:996 or1k-asm.c:912 xc16x-asm.c:777 +#: bpf-asm.c:581 epiphany-asm.c:856 fr30-asm.c:711 frv-asm.c:1664 +#: ip2k-asm.c:912 iq2000-asm.c:860 lm32-asm.c:750 m32c-asm.c:1985 +#: m32r-asm.c:729 mep-asm.c:1687 mt-asm.c:996 or1k-asm.c:971 xc16x-asm.c:777 #: xstormy16-asm.c:677 #, c-format msgid "bad instruction `%.50s...'" msgstr "помилкова інÑÑ‚Ñ€ÑƒÐºÑ†Ñ–Ñ Â«%.50s...»" -#: epiphany-asm.c:859 fr30-asm.c:714 frv-asm.c:1667 ip2k-asm.c:915 -#: iq2000-asm.c:863 lm32-asm.c:753 m32c-asm.c:1988 m32r-asm.c:732 -#: mep-asm.c:1691 mt-asm.c:999 or1k-asm.c:915 xc16x-asm.c:780 +#: bpf-asm.c:584 epiphany-asm.c:859 fr30-asm.c:714 frv-asm.c:1667 +#: ip2k-asm.c:915 iq2000-asm.c:863 lm32-asm.c:753 m32c-asm.c:1988 +#: m32r-asm.c:732 mep-asm.c:1690 mt-asm.c:999 or1k-asm.c:974 xc16x-asm.c:780 #: xstormy16-asm.c:680 #, c-format msgid "bad instruction `%.50s'" msgstr "помилкова інÑÑ‚Ñ€ÑƒÐºÑ†Ñ–Ñ Â«%.50s»" -#: epiphany-desc.c:2109 +#: bpf-desc.c:1671 #, c-format -msgid "internal error: epiphany_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" -msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: epiphany_cgen_rebuild_tables: конфлікт значень insn-chunk-bitsize: «%d» Ñ– «%d»" +msgid "internal error: bpf_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" +msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: bpf_cgen_rebuild_tables: конфлікт значень insn-chunk-bitsize: «%d» Ñ– «%d»" -#: epiphany-desc.c:2192 +#: bpf-desc.c:1759 #, c-format -msgid "internal error: epiphany_cgen_cpu_open: unsupported argument `%d'" -msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: epiphany_cgen_cpu_open: непідтримуваний аргумент «%d»" +msgid "internal error: bpf_cgen_cpu_open: unsupported argument `%d'" +msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: bpf_cgen_cpu_open: непідтримуваний аргумент «%d»" -#: epiphany-desc.c:2211 +#: bpf-desc.c:1778 #, c-format -msgid "internal error: epiphany_cgen_cpu_open: no endianness specified" -msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: epiphany_cgen_cpu_open: не вказано порÑдку байтів" +msgid "internal error: bpf_cgen_cpu_open: no endianness specified" +msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: bpf_cgen_cpu_open: не визначено порÑдок байтів" #. Default text to print if an instruction isn't recognized. -#: epiphany-dis.c:41 fr30-dis.c:41 frv-dis.c:41 ip2k-dis.c:41 iq2000-dis.c:41 -#: lm32-dis.c:41 m32c-dis.c:41 m32r-dis.c:41 mep-dis.c:41 mmix-dis.c:275 -#: mt-dis.c:41 nds32-dis.c:64 or1k-dis.c:41 xc16x-dis.c:41 xstormy16-dis.c:41 +#: bpf-dis.c:41 epiphany-dis.c:41 fr30-dis.c:41 frv-dis.c:41 ip2k-dis.c:41 +#: iq2000-dis.c:41 lm32-dis.c:41 m32c-dis.c:41 m32r-dis.c:41 mep-dis.c:41 +#: mmix-dis.c:293 mt-dis.c:41 nds32-dis.c:64 or1k-dis.c:41 xc16x-dis.c:41 +#: xstormy16-dis.c:41 msgid "*unknown*" msgstr "*невідома*" -#: epiphany-dis.c:279 fr30-dis.c:300 frv-dis.c:397 ip2k-dis.c:289 -#: iq2000-dis.c:190 lm32-dis.c:148 m32c-dis.c:892 m32r-dis.c:280 -#: mep-dis.c:1188 mt-dis.c:291 or1k-dis.c:145 xc16x-dis.c:421 +#: bpf-dis.c:203 epiphany-dis.c:279 fr30-dis.c:300 frv-dis.c:397 +#: ip2k-dis.c:289 iq2000-dis.c:190 lm32-dis.c:148 m32c-dis.c:892 +#: m32r-dis.c:280 mep-dis.c:1188 mt-dis.c:291 or1k-dis.c:175 xc16x-dis.c:421 #: xstormy16-dis.c:169 #, c-format msgid "internal error: unrecognized field %d while printing insn" msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: нерозпізнане поле %d під Ñ‡Ð°Ñ Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ñ–Ð½Ñтрукції" -#: epiphany-ibld.c:164 fr30-ibld.c:164 frv-ibld.c:164 ip2k-ibld.c:164 -#: iq2000-ibld.c:164 lm32-ibld.c:164 m32c-ibld.c:164 m32r-ibld.c:164 -#: mep-ibld.c:164 mt-ibld.c:164 or1k-ibld.c:164 xc16x-ibld.c:164 -#: xstormy16-ibld.c:164 +#: bpf-ibld.c:164 epiphany-ibld.c:164 fr30-ibld.c:164 frv-ibld.c:164 +#: ip2k-ibld.c:164 iq2000-ibld.c:164 lm32-ibld.c:164 m32c-ibld.c:164 +#: m32r-ibld.c:164 mep-ibld.c:164 mt-ibld.c:164 or1k-ibld.c:164 +#: xc16x-ibld.c:164 xstormy16-ibld.c:164 #, c-format msgid "operand out of range (%ld not between %ld and %lu)" msgstr "операнд лежить поза межами діапазону (%ld не перебуває між %ld Ñ– %lu)" -#: epiphany-ibld.c:185 fr30-ibld.c:185 frv-ibld.c:185 ip2k-ibld.c:185 -#: iq2000-ibld.c:185 lm32-ibld.c:185 m32c-ibld.c:185 m32r-ibld.c:185 -#: mep-ibld.c:185 mt-ibld.c:185 or1k-ibld.c:185 xc16x-ibld.c:185 -#: xstormy16-ibld.c:185 +#: bpf-ibld.c:185 epiphany-ibld.c:185 fr30-ibld.c:185 frv-ibld.c:185 +#: ip2k-ibld.c:185 iq2000-ibld.c:185 lm32-ibld.c:185 m32c-ibld.c:185 +#: m32r-ibld.c:185 mep-ibld.c:185 mt-ibld.c:185 or1k-ibld.c:185 +#: xc16x-ibld.c:185 xstormy16-ibld.c:185 #, c-format msgid "operand out of range (0x%lx not between 0 and 0x%lx)" msgstr "операнд поза діапазоном (0x%lx не лежить між 0 Ñ– 0x%lx)" -#: epiphany-ibld.c:880 fr30-ibld.c:735 frv-ibld.c:861 ip2k-ibld.c:612 -#: iq2000-ibld.c:718 lm32-ibld.c:639 m32c-ibld.c:1736 m32r-ibld.c:670 -#: mep-ibld.c:1213 mt-ibld.c:754 or1k-ibld.c:658 xc16x-ibld.c:757 -#: xstormy16-ibld.c:683 +#: bpf-ibld.c:201 cgen-asm.c:351 epiphany-ibld.c:201 fr30-ibld.c:201 +#: frv-ibld.c:201 ip2k-ibld.c:201 iq2000-ibld.c:201 lm32-ibld.c:201 +#: m32c-ibld.c:201 m32r-ibld.c:201 mep-ibld.c:201 mt-ibld.c:201 +#: or1k-ibld.c:201 xc16x-ibld.c:201 xstormy16-ibld.c:201 +#, c-format +msgid "operand out of range (%ld not between %ld and %ld)" +msgstr "операнд лежить поза межами діапазону (%ld не перебуває між %ld Ñ– %ld)" + +#: bpf-ibld.c:628 epiphany-ibld.c:883 fr30-ibld.c:738 frv-ibld.c:864 +#: ip2k-ibld.c:615 iq2000-ibld.c:721 lm32-ibld.c:642 m32c-ibld.c:1739 +#: m32r-ibld.c:673 mep-ibld.c:1216 mt-ibld.c:757 or1k-ibld.c:736 +#: xc16x-ibld.c:760 xstormy16-ibld.c:686 #, c-format msgid "internal error: unrecognized field %d while building insn" msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: нерозпізнане поле %d під Ñ‡Ð°Ñ Ð¿Ð¾Ð±ÑƒÐ´Ð¾Ð²Ð¸ інÑтрукції" -#: epiphany-ibld.c:1175 fr30-ibld.c:941 frv-ibld.c:1179 ip2k-ibld.c:688 -#: iq2000-ibld.c:894 lm32-ibld.c:744 m32c-ibld.c:2898 m32r-ibld.c:808 -#: mep-ibld.c:1813 mt-ibld.c:975 or1k-ibld.c:772 xc16x-ibld.c:978 -#: xstormy16-ibld.c:830 +#: bpf-ibld.c:712 epiphany-ibld.c:1178 fr30-ibld.c:944 frv-ibld.c:1182 +#: ip2k-ibld.c:691 iq2000-ibld.c:897 lm32-ibld.c:747 m32c-ibld.c:2901 +#: m32r-ibld.c:811 mep-ibld.c:1816 mt-ibld.c:978 or1k-ibld.c:895 +#: xc16x-ibld.c:981 xstormy16-ibld.c:833 #, c-format msgid "internal error: unrecognized field %d while decoding insn" msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: нерозпізнане поле %d під Ñ‡Ð°Ñ Ð´ÐµÐºÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ Ñ–Ð½Ñтрукції" -#: epiphany-ibld.c:1319 fr30-ibld.c:1088 frv-ibld.c:1458 ip2k-ibld.c:763 -#: iq2000-ibld.c:1026 lm32-ibld.c:834 m32c-ibld.c:3516 m32r-ibld.c:922 -#: mep-ibld.c:2284 mt-ibld.c:1176 or1k-ibld.c:859 xc16x-ibld.c:1200 -#: xstormy16-ibld.c:941 +#: bpf-ibld.c:781 epiphany-ibld.c:1322 fr30-ibld.c:1091 frv-ibld.c:1461 +#: ip2k-ibld.c:766 iq2000-ibld.c:1029 lm32-ibld.c:837 m32c-ibld.c:3519 +#: m32r-ibld.c:925 mep-ibld.c:2287 mt-ibld.c:1179 or1k-ibld.c:991 +#: xc16x-ibld.c:1203 xstormy16-ibld.c:944 #, c-format msgid "internal error: unrecognized field %d while getting int operand" msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: помилкове поле %d під Ñ‡Ð°Ñ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ñ†Ñ–Ð»Ð¾Ð³Ð¾ операнда" -#: epiphany-ibld.c:1445 fr30-ibld.c:1217 frv-ibld.c:1719 ip2k-ibld.c:820 -#: iq2000-ibld.c:1140 lm32-ibld.c:906 m32c-ibld.c:4116 m32r-ibld.c:1018 -#: mep-ibld.c:2737 mt-ibld.c:1359 or1k-ibld.c:928 xc16x-ibld.c:1404 -#: xstormy16-ibld.c:1034 +#: bpf-ibld.c:832 epiphany-ibld.c:1448 fr30-ibld.c:1220 frv-ibld.c:1722 +#: ip2k-ibld.c:823 iq2000-ibld.c:1143 lm32-ibld.c:909 m32c-ibld.c:4119 +#: m32r-ibld.c:1021 mep-ibld.c:2740 mt-ibld.c:1362 or1k-ibld.c:1069 +#: xc16x-ibld.c:1407 xstormy16-ibld.c:1037 #, c-format msgid "internal error: unrecognized field %d while getting vma operand" msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: помилкове поле %d під Ñ‡Ð°Ñ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð¾Ð¿ÐµÑ€Ð°Ð½Ð´Ð° vma" -#: epiphany-ibld.c:1578 fr30-ibld.c:1349 frv-ibld.c:1987 ip2k-ibld.c:880 -#: iq2000-ibld.c:1261 lm32-ibld.c:985 m32c-ibld.c:4704 m32r-ibld.c:1120 -#: mep-ibld.c:3151 mt-ibld.c:1549 or1k-ibld.c:1004 xc16x-ibld.c:1609 -#: xstormy16-ibld.c:1134 +#: bpf-ibld.c:890 epiphany-ibld.c:1581 fr30-ibld.c:1352 frv-ibld.c:1990 +#: ip2k-ibld.c:883 iq2000-ibld.c:1264 lm32-ibld.c:988 m32c-ibld.c:4707 +#: m32r-ibld.c:1123 mep-ibld.c:3154 mt-ibld.c:1552 or1k-ibld.c:1154 +#: xc16x-ibld.c:1612 xstormy16-ibld.c:1137 #, c-format msgid "internal error: unrecognized field %d while setting int operand" msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: некоректне поле %d під Ñ‡Ð°Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ñ†Ñ–Ð»Ð¾Ð³Ð¾ операнда" -#: epiphany-ibld.c:1701 fr30-ibld.c:1471 frv-ibld.c:2245 ip2k-ibld.c:930 -#: iq2000-ibld.c:1372 lm32-ibld.c:1054 m32c-ibld.c:5282 m32r-ibld.c:1212 -#: mep-ibld.c:3555 mt-ibld.c:1729 or1k-ibld.c:1070 xc16x-ibld.c:1804 -#: xstormy16-ibld.c:1224 +#: bpf-ibld.c:938 epiphany-ibld.c:1704 fr30-ibld.c:1474 frv-ibld.c:2248 +#: ip2k-ibld.c:933 iq2000-ibld.c:1375 lm32-ibld.c:1057 m32c-ibld.c:5285 +#: m32r-ibld.c:1215 mep-ibld.c:3558 mt-ibld.c:1732 or1k-ibld.c:1229 +#: xc16x-ibld.c:1807 xstormy16-ibld.c:1227 #, c-format msgid "internal error: unrecognized field %d while setting vma operand" msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: некоректне поле %d під Ñ‡Ð°Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¾Ð¿ÐµÑ€Ð°Ð½Ð´Ð° vma" +#: cgen-asm.c:373 +#, c-format +msgid "operand out of range (%lu not between %lu and %lu)" +msgstr "операнд лежить поза межами діапазону (%lu не перебуває між %lu Ñ– %lu)" + +#: d30v-dis.c:232 +#, c-format +msgid "illegal id (%d)" +msgstr "некоректний ідентифікатор (%d)" + +#: d30v-dis.c:259 +#, c-format +msgid "<unknown register %d>" +msgstr "<невідомий регіÑÑ‚Ñ€ %d>" + +#. Can't happen. +#: dis-buf.c:61 +#, c-format +msgid "Unknown error %d\n" +msgstr "Ðевідома помилка %d\n" + +#: dis-buf.c:70 +#, c-format +msgid "Address 0x%s is out of bounds.\n" +msgstr "ÐдреÑа 0x%s лежить поза межами доÑтупного діапазону.\n" + +#: disassemble.c:840 +#, c-format +msgid "assertion fail %s:%d" +msgstr "виÑвлено помилку %s:%d" + +#: disassemble.c:841 +msgid "Please report this bug" +msgstr "Будь лаÑка, повідомте про цю ваду" + +#: epiphany-asm.c:68 +msgid "register unavailable for short instructions" +msgstr "регіÑÑ‚Ñ€ недоÑтупний Ð´Ð»Ñ ÐºÐ¾Ñ€Ð¾Ñ‚ÐºÐ¸Ñ… інÑтрукцій" + +#: epiphany-asm.c:115 +msgid "register name used as immediate value" +msgstr "назву регіÑтра викориÑтано Ñк поточне значеннÑ" + +#. Don't treat "mov ip,ip" as a move-immediate. +#: epiphany-asm.c:178 epiphany-asm.c:234 +msgid "register source in immediate move" +msgstr "джерело у регіÑтрі під Ñ‡Ð°Ñ Ð¿ÐµÑ€ÐµÑÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ñ‚Ð¾Ñ‡Ð½Ð¾Ð³Ð¾ значеннÑ" + +#: epiphany-asm.c:187 +msgid "byte relocation unsupported" +msgstr "підтримки переÑÑƒÐ²Ð°Ð½Ð½Ñ Ð±Ð°Ð¹Ñ‚Ñ–Ð² не передбачено" + +#. -- assembler routines inserted here. +#. -- asm.c +#: epiphany-asm.c:193 frv-asm.c:972 iq2000-asm.c:56 lm32-asm.c:95 +#: lm32-asm.c:127 lm32-asm.c:157 lm32-asm.c:187 lm32-asm.c:217 lm32-asm.c:247 +#: m32c-asm.c:140 m32c-asm.c:235 m32c-asm.c:276 m32c-asm.c:334 m32c-asm.c:355 +#: m32r-asm.c:53 mep-asm.c:241 mep-asm.c:259 mep-asm.c:274 mep-asm.c:289 +#: mep-asm.c:301 or1k-asm.c:54 +msgid "missing `)'" +msgstr "не виÑтачає «)»" + +#: epiphany-asm.c:270 +msgid "ABORT: unknown operand" +msgstr "ABORT: невідомий операнд" + +#: epiphany-asm.c:296 +msgid "Not a pc-relative address." +msgstr "ÐдреÑа, Ñка не Ñ” відноÑною щодо лічильника команд (pc)." + +#: epiphany-desc.c:2109 +#, c-format +msgid "internal error: epiphany_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" +msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: epiphany_cgen_rebuild_tables: конфлікт значень insn-chunk-bitsize: «%d» Ñ– «%d»" + +#: epiphany-desc.c:2197 +#, c-format +msgid "internal error: epiphany_cgen_cpu_open: unsupported argument `%d'" +msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: epiphany_cgen_cpu_open: непідтримуваний аргумент «%d»" + +#: epiphany-desc.c:2216 +#, c-format +msgid "internal error: epiphany_cgen_cpu_open: no endianness specified" +msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: epiphany_cgen_cpu_open: не вказано порÑдку байтів" + #: fr30-asm.c:93 m32c-asm.c:872 m32c-asm.c:879 msgid "Register number is not valid" msgstr "Ðомер регіÑтра не Ñ” коректним" @@ -915,12 +973,12 @@ msgid "internal error: fr30_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: fr30_cgen_rebuild_tables: конфлікт значень insn-chunk-bitsize: «%d» Ñ– «%d»" -#: fr30-desc.c:1669 +#: fr30-desc.c:1674 #, c-format msgid "internal error: fr30_cgen_cpu_open: unsupported argument `%d'" msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: fr30_cgen_cpu_open: непідтримуваний аргумент «%d»" -#: fr30-desc.c:1688 +#: fr30-desc.c:1693 #, c-format msgid "internal error: fr30_cgen_cpu_open: no endianness specified" msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: fr30_cgen_cpu_open: не визначено порÑдок байтів" @@ -946,12 +1004,12 @@ msgid "internal error: frv_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: frv_cgen_rebuild_tables: конфлікт значень insn-chunk-bitsize: «%d» Ñ– «%d»" -#: frv-desc.c:6409 +#: frv-desc.c:6414 #, c-format msgid "internal error: frv_cgen_cpu_open: unsupported argument `%d'" msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: frv_cgen_cpu_open: непідтримуваний аргумент «%d»" -#: frv-desc.c:6428 +#: frv-desc.c:6433 #, c-format msgid "internal error: frv_cgen_cpu_open: no endianness specified" msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: frv_cgen_cpu_open: не визначено порÑдок байтів" @@ -971,26 +1029,21 @@ msgid "internal error: bad insn unit" msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: помилковий модуль insn" -#: h8300-dis.c:63 -#, c-format -msgid "internal error, h8_disassemble_init" -msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°, h8_disassemble_init" - -#: h8300-dis.c:314 +#: h8300-dis.c:309 #, c-format msgid "Hmmmm 0x%x" msgstr "Г-м-м, 0x%x" -#: h8300-dis.c:691 +#: h8300-dis.c:617 #, c-format msgid "Don't understand 0x%x \n" msgstr "Ðезрозуміле 0x%x \n" -#: i386-dis.c:11058 +#: i386-dis.c:11040 msgid "<internal disassembler error>" msgstr "<помилка внутрішнього дизаÑемблера>" -#: i386-dis.c:11353 +#: i386-dis.c:11337 #, c-format msgid "" "\n" @@ -1001,32 +1054,32 @@ "З перемикачем -M можна викориÑтовувати такі Ñпецифічні Ð´Ð»Ñ i386/x86-64 параметри\n" "дизаÑемблера (декілька параметрів Ñлід відокремлювати комами):\n" -#: i386-dis.c:11357 +#: i386-dis.c:11341 #, c-format msgid " x86-64 Disassemble in 64bit mode\n" msgstr " x86-64 дизаÑÐµÐ¼Ð±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ñƒ 64-бітовому режимі\n" -#: i386-dis.c:11358 +#: i386-dis.c:11342 #, c-format msgid " i386 Disassemble in 32bit mode\n" msgstr " i386 дизаÑÐµÐ¼Ð±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ñƒ 32-бітовому режимі\n" -#: i386-dis.c:11359 +#: i386-dis.c:11343 #, c-format msgid " i8086 Disassemble in 16bit mode\n" msgstr " i8086 дизаÑÐµÐ¼Ð±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ñƒ 16-бітовому режимі\n" -#: i386-dis.c:11360 +#: i386-dis.c:11344 #, c-format msgid " att Display instruction in AT&T syntax\n" msgstr " att показати інÑтрукцію у ÑинтакÑиÑÑ– AT&T\n" -#: i386-dis.c:11361 +#: i386-dis.c:11345 #, c-format msgid " intel Display instruction in Intel syntax\n" msgstr " intel показати інÑтрукцію у ÑинтакÑиÑÑ– Intel\n" -#: i386-dis.c:11362 +#: i386-dis.c:11346 #, c-format msgid "" " att-mnemonic\n" @@ -1035,7 +1088,7 @@ " att-mnemonic\n" " показати інÑтрукцію у Ñимволах AT&T\n" -#: i386-dis.c:11364 +#: i386-dis.c:11348 #, c-format msgid "" " intel-mnemonic\n" @@ -1044,106 +1097,106 @@ " intel-mnemonic\n" " показати інÑтрукцію у Ñимволах Intel\n" -#: i386-dis.c:11366 +#: i386-dis.c:11350 #, c-format msgid " addr64 Assume 64bit address size\n" msgstr " addr64 припуÑкати 64-бітовий розмір адреÑ\n" -#: i386-dis.c:11367 +#: i386-dis.c:11351 #, c-format msgid " addr32 Assume 32bit address size\n" msgstr " addr32 припуÑкати 32-бітовий розмір адреÑ\n" -#: i386-dis.c:11368 +#: i386-dis.c:11352 #, c-format msgid " addr16 Assume 16bit address size\n" msgstr " addr16 припуÑкати 16-бітовий розмір адреÑ\n" -#: i386-dis.c:11369 +#: i386-dis.c:11353 #, c-format msgid " data32 Assume 32bit data size\n" msgstr " data32 припуÑкати 32-бітовий розмір даних\n" -#: i386-dis.c:11370 +#: i386-dis.c:11354 #, c-format msgid " data16 Assume 16bit data size\n" msgstr " data16 припуÑкати 16-бітовий розмір даних\n" -#: i386-dis.c:11371 +#: i386-dis.c:11355 #, c-format msgid " suffix Always display instruction suffix in AT&T syntax\n" msgstr " suffix завжди показувати ÑÑƒÑ„Ñ–ÐºÑ Ñ–Ð½Ñтрукцій у ÑинтакÑиÑÑ– AT&T\n" -#: i386-dis.c:11372 +#: i386-dis.c:11356 #, c-format msgid " amd64 Display instruction in AMD64 ISA\n" msgstr " amd64 показати інÑтрукцію у ÑинтакÑиÑÑ– ISA AMD64\n" -#: i386-dis.c:11373 +#: i386-dis.c:11357 #, c-format msgid " intel64 Display instruction in Intel64 ISA\n" msgstr " intel64 показати інÑтрукцію у ÑинтакÑиÑÑ– ISA Intel64\n" -#: i386-dis.c:11936 +#: i386-dis.c:11912 msgid "64-bit address is disabled" msgstr "64-бітову адреÑу вимкнено" -#: i386-gen.c:732 +#: i386-gen.c:793 #, c-format msgid "%s: error: " msgstr "%s: помилка: " -#: i386-gen.c:911 +#: i386-gen.c:960 #, c-format msgid "%s: %d: unknown bitfield: %s\n" msgstr "%s: %d: невідоме бітове поле: %s\n" -#: i386-gen.c:913 +#: i386-gen.c:962 #, c-format msgid "unknown bitfield: %s\n" msgstr "невідоме бітове поле: %s\n" -#: i386-gen.c:976 +#: i386-gen.c:1025 #, c-format msgid "%s: %d: missing `)' in bitfield: %s\n" msgstr "%s: %d: не виÑтачає «)» у бітовому полі: %s\n" -#: i386-gen.c:1077 +#: i386-gen.c:1126 #, c-format msgid "unknown broadcast operand: %s\n" msgstr "невідомий операнд транÑлÑції: %s\n" -#: i386-gen.c:1478 +#: i386-gen.c:1777 #, c-format msgid "can't find i386-reg.tbl for reading, errno = %s\n" msgstr "не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ i386-reg.tbl Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ, номер помилки = %s\n" -#: i386-gen.c:1556 +#: i386-gen.c:1855 #, c-format msgid "can't create i386-init.h, errno = %s\n" msgstr "не вдалоÑÑ Ñтворити i386-init.h, номер помилки = %s\n" -#: i386-gen.c:1646 ia64-gen.c:2829 +#: i386-gen.c:1945 ia64-gen.c:2829 #, c-format msgid "unable to change directory to \"%s\", errno = %s\n" msgstr "не вдалоÑÑ Ð·Ð¼Ñ–Ð½Ð¸Ñ‚Ð¸ каталог на «%s», номер помилки = %s\n" -#: i386-gen.c:1658 i386-gen.c:1661 +#: i386-gen.c:1959 i386-gen.c:1964 #, c-format msgid "CpuMax != %d!\n" msgstr "CpuMax != %d!\n" -#: i386-gen.c:1665 +#: i386-gen.c:1968 #, c-format msgid "%d unused bits in i386_cpu_flags.\n" msgstr "%d невикориÑтаних бітів у i386_cpu_flags.\n" -#: i386-gen.c:1672 +#: i386-gen.c:1983 #, c-format msgid "%d unused bits in i386_operand_type.\n" msgstr "%d невикориÑтаних бітів у i386_operand_type.\n" -#: i386-gen.c:1686 +#: i386-gen.c:1997 #, c-format msgid "can't create i386-tbl.h, errno = %s\n" msgstr "не вдалоÑÑ Ñтворити i386-tbl.h, номер помилки = %s\n" @@ -1313,12 +1366,12 @@ msgid "internal error: ip2k_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: ip2k_cgen_rebuild_tables: конфлікт значень insn-chunk-bitsize: «%d» Ñ– «%d»" -#: ip2k-desc.c:1098 +#: ip2k-desc.c:1103 #, c-format msgid "internal error: ip2k_cgen_cpu_open: unsupported argument `%d'" msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: ip2k_cgen_cpu_open: непідтримуваний аргумент «%d»" -#: ip2k-desc.c:1117 +#: ip2k-desc.c:1122 #, c-format msgid "internal error: ip2k_cgen_cpu_open: no endianness specified" msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: ip2k_cgen_cpu_open: не визначено порÑдок байтів" @@ -1340,12 +1393,12 @@ msgid "internal error: iq2000_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: iq2000_cgen_rebuild_tables: конфлікт значень insn-chunk-bitsize: «%d» Ñ– «%d»" -#: iq2000-desc.c:2103 +#: iq2000-desc.c:2108 #, c-format msgid "internal error: iq2000_cgen_cpu_open: unsupported argument `%d'" msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: iq2000_cgen_cpu_open: непідтримуваний аргумент «%d»" -#: iq2000-desc.c:2122 +#: iq2000-desc.c:2127 #, c-format msgid "internal error: iq2000_cgen_cpu_open: no endianness specified" msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: iq2000_cgen_cpu_open: не визначено порÑдок байтів" @@ -1371,22 +1424,22 @@ msgid "internal error: lm32_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: lm32_cgen_rebuild_tables: конфлікт значень insn-chunk-bitsize: «%d» Ñ– «%d»" -#: lm32-desc.c:1085 +#: lm32-desc.c:1090 #, c-format msgid "internal error: lm32_cgen_cpu_open: unsupported argument `%d'" msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: lm32_cgen_cpu_open: непідтримуваний аргумент «%d»" -#: lm32-desc.c:1104 +#: lm32-desc.c:1109 #, c-format msgid "internal error: lm32_cgen_cpu_open: no endianness specified" msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: lm32_cgen_cpu_open: не визначено порÑдок байтів" -#: m10200-dis.c:157 m10300-dis.c:580 +#: m10200-dis.c:151 m10300-dis.c:574 #, c-format msgid "unknown\t0x%04lx" msgstr "невідоме\t0x%04lx" -#: m10200-dis.c:327 +#: m10200-dis.c:321 #, c-format msgid "unknown\t0x%02lx" msgstr "невідоме\t0x%02lx" @@ -1470,12 +1523,12 @@ msgid "internal error: m32c_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: m32c_cgen_rebuild_tables: конфлікт значень insn-chunk-bitsize: «%d» Ñ– «%d»" -#: m32c-desc.c:63116 +#: m32c-desc.c:63121 #, c-format msgid "internal error: m32c_cgen_cpu_open: unsupported argument `%d'" msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: m32c_cgen_cpu_open: непідтримуваний аргумент «%d»" -#: m32c-desc.c:63135 +#: m32c-desc.c:63140 #, c-format msgid "internal error: m32c_cgen_cpu_open: no endianness specified" msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: m32c_cgen_cpu_open: не визначено порÑдок байтів" @@ -1485,22 +1538,22 @@ msgid "internal error: m32r_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: m32r_cgen_rebuild_tables: конфлікт значень insn-chunk-bitsize: «%d» Ñ– «%d»" -#: m32r-desc.c:1448 +#: m32r-desc.c:1453 #, c-format msgid "internal error: m32r_cgen_cpu_open: unsupported argument `%d'" msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: m32r_cgen_cpu_open: непідтримуваний аргумент «%d»" -#: m32r-desc.c:1467 +#: m32r-desc.c:1472 #, c-format msgid "internal error: m32r_cgen_cpu_open: no endianness specified" msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: m32r_cgen_cpu_open: не визначено порÑдок байтів" -#: m68k-dis.c:1292 +#: m68k-dis.c:1294 #, c-format msgid "<function code %d>" msgstr "<код функції %d>" -#: m68k-dis.c:1455 +#: m68k-dis.c:1457 #, c-format msgid "<internal error in opcode table: %s %s>\n" msgstr "<Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° у таблиці кодів операцій: %s %s>\n" @@ -1543,34 +1596,34 @@ msgid "internal error: mep_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: mep_cgen_rebuild_tables: конфлікт значень insn-chunk-bitsize: «%d» Ñ– «%d»" -#: mep-desc.c:6309 +#: mep-desc.c:6314 #, c-format msgid "internal error: mep_cgen_cpu_open: unsupported argument `%d'" msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: mep_cgen_cpu_open: непідтримуваний аргумент «%d»" -#: mep-desc.c:6328 +#: mep-desc.c:6333 #, c-format msgid "internal error: mep_cgen_cpu_open: no endianness specified" msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: mep_cgen_cpu_open: не визначено порÑдок байтів" -#: mips-dis.c:1800 mips-dis.c:2026 +#: mips-dis.c:1805 mips-dis.c:2031 #, c-format msgid "# internal error, undefined operand in `%s %s'" msgstr "# Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°, невизначений операнд у «%s %s»" -#: mips-dis.c:2615 +#: mips-dis.c:2620 msgid "Use canonical instruction forms.\n" msgstr "викориÑтовувати канонічні форми інÑтрукцій.\n" -#: mips-dis.c:2617 +#: mips-dis.c:2622 msgid "Recognize MSA instructions.\n" msgstr "розпізнавати інÑтрукції MSA.\n" -#: mips-dis.c:2619 +#: mips-dis.c:2624 msgid "Recognize the virtualization ASE instructions.\n" msgstr "розпізнавати інÑтрукції віртуалізації ASE.\n" -#: mips-dis.c:2621 +#: mips-dis.c:2626 msgid "" "Recognize the eXtended Physical Address (XPA) ASE\n" " instructions.\n" @@ -1578,27 +1631,27 @@ "розпізнавати інÑтрукції eXtended Physical\n" " Address (XPA) ASE.\n" -#: mips-dis.c:2624 +#: mips-dis.c:2629 msgid "Recognize the Global INValidate (GINV) ASE instructions.\n" msgstr "розпізнавати інÑтрукції Global INValidate (GINV) ASE.\n" -#: mips-dis.c:2628 +#: mips-dis.c:2633 msgid "Recognize the Loongson MultiMedia extensions Instructions (MMI) ASE instructions.\n" msgstr "Розпізнавати інÑтрукції мультимедійних розширень Loongson (MMI) ASE.\n" -#: mips-dis.c:2632 +#: mips-dis.c:2637 msgid "Recognize the Loongson Content Address Memory (CAM) instructions.\n" msgstr "розпізнавати інÑтрукції Loongson Content Address Memory (CAM).\n" -#: mips-dis.c:2636 +#: mips-dis.c:2641 msgid "Recognize the Loongson EXTensions (EXT) instructions.\n" msgstr "розпізнавати інÑтрукції Loongson EXTensions (EXT).\n" -#: mips-dis.c:2640 +#: mips-dis.c:2645 msgid "Recognize the Loongson EXTensions R2 (EXT2) instructions.\n" msgstr "розпізнавати інÑтрукції Loongson EXTensions R2 (EXT2).\n" -#: mips-dis.c:2643 +#: mips-dis.c:2648 msgid "" "Print GPR names according to specified ABI.\n" " Default: based on binary being disassembled.\n" @@ -1607,7 +1660,7 @@ " Типове значеннÑ: визначаєтьÑÑ Ð½Ð° оÑнові файла, що\n" " дизаÑемблюєтьÑÑ.\n" -#: mips-dis.c:2646 +#: mips-dis.c:2651 msgid "" "Print FPR names according to specified ABI.\n" " Default: numeric.\n" @@ -1615,7 +1668,7 @@ "виводити назви FPR відповідно до вказаного ABI.\n" " Типове значеннÑ: numeric.\n" -#: mips-dis.c:2649 +#: mips-dis.c:2654 msgid "" "Print CP0 register names according to specified architecture.\n" " Default: based on binary being disassembled.\n" @@ -1624,7 +1677,7 @@ " вказаній архітектурі.\n" " Типове значеннÑ: визначаєтьÑÑ Ð·Ð° файлом, Ñкий дизаÑемблюєтьÑÑ.\n" -#: mips-dis.c:2653 +#: mips-dis.c:2658 msgid "" "Print HWR names according to specified architecture.\n" " Default: based on binary being disassembled.\n" @@ -1633,11 +1686,11 @@ " Типове значеннÑ: визначаєтьÑÑ Ð½Ð° оÑнові файла, що\n" " дизаÑемблюєтьÑÑ.\n" -#: mips-dis.c:2656 +#: mips-dis.c:2661 msgid "Print GPR and FPR names according to specified ABI.\n" msgstr "виводити назви GPR Ñ– FPR відповідно до вказаного ABI.\n" -#: mips-dis.c:2658 +#: mips-dis.c:2663 msgid "" "Print CP0 register and HWR names according to specified\n" " architecture." @@ -1645,7 +1698,7 @@ "виводити назви регіÑтрів CP0 Ñ– HWR у\n" " вказаній архітектурі." -#: mips-dis.c:2744 +#: mips-dis.c:2749 #, c-format msgid "" "\n" @@ -1658,7 +1711,7 @@ "дизаÑемблера (декілька параметрів Ñлід відокремлювати комами):\n" "\n" -#: mips-dis.c:2778 +#: mips-dis.c:2783 #, c-format msgid "" "\n" @@ -1683,7 +1736,11 @@ msgid "(unknown)" msgstr "(невідомо)" -#: mmix-dis.c:510 +#: mmix-dis.c:247 mmix-dis.c:255 +msgid "*illegal*" +msgstr "*заборонено*" + +#: mmix-dis.c:529 #, c-format msgid "*unknown operands type: %d*" msgstr "*невідомий тип операндів: %d*" @@ -1742,12 +1799,12 @@ msgid "internal error: mt_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: mt_cgen_rebuild_tables: конфлікт значень insn-chunk-bitsize: «%d» Ñ– «%d»" -#: mt-desc.c:1229 +#: mt-desc.c:1234 #, c-format msgid "internal error: mt_cgen_cpu_open: unsupported argument `%d'" msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: mt_cgen_cpu_open: непідтримуваний аргумент «%d»" -#: mt-desc.c:1248 +#: mt-desc.c:1253 #, c-format msgid "internal error: mt_cgen_cpu_open: no endianness specified" msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: mt_cgen_cpu_open: не визначено порÑдок байтів" @@ -1767,6 +1824,10 @@ msgid "internal error: unknown hardware resource" msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: невідомий апаратний реÑурÑ" +#: nds32-dis.c:1186 +msgid "insufficient data to decode instruction" +msgstr "недоÑтатньо даних Ð´Ð»Ñ Ð´ÐµÐºÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ Ñ–Ð½Ñтрукції" + #: nfp-dis.c:927 msgid "<invalid_instruction>:" msgstr "<некоректна_інÑтрукціÑ>:" @@ -1859,27 +1920,27 @@ msgid "internal relocation type invalid" msgstr "некоректний тип внутрішнього переÑуваннÑ" -#: or1k-desc.c:1978 +#: or1k-desc.c:2040 #, c-format msgid "internal error: or1k_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: or1k_cgen_rebuild_tables: конфлікт значень insn-chunk-bitsize: «%d» Ñ– «%d»" -#: or1k-desc.c:2061 +#: or1k-desc.c:2128 #, c-format msgid "internal error: or1k_cgen_cpu_open: unsupported argument `%d'" msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: or1k_cgen_cpu_open: непідтримуваний аргумент «%d»" -#: or1k-desc.c:2080 +#: or1k-desc.c:2147 #, c-format msgid "internal error: or1k_cgen_cpu_open: no endianness specified" msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: or1k_cgen_cpu_open: не визначено порÑдок байтів" -#: ppc-dis.c:370 +#: ppc-dis.c:386 #, c-format msgid "warning: ignoring unknown -M%s option" msgstr "попередженнÑ: ігноруємо невідомий параметр -M%s" -#: ppc-dis.c:858 +#: ppc-dis.c:977 #, c-format msgid "" "\n" @@ -1894,109 +1955,146 @@ msgid "invalid register" msgstr "некоректний регіÑÑ‚Ñ€" -#: ppc-opc.c:384 ppc-opc.c:412 +#: ppc-opc.c:396 msgid "invalid conditional option" msgstr "некоректна умова" -#: ppc-opc.c:386 ppc-opc.c:414 +#: ppc-opc.c:399 msgid "invalid counter access" msgstr "некоректний доÑтуп до лічильника" -#: ppc-opc.c:416 +#: ppc-opc.c:463 +msgid "BO value implies no branch hint, when using + or - modifier" +msgstr "Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ BO вказує на те, що не буде підказки щодо розгалуженнÑ, Ñкщо викориÑтано модифікатор + або -" + +#: ppc-opc.c:468 msgid "attempt to set y bit when using + or - modifier" msgstr "Ñпроба вÑтановити біт y під Ñ‡Ð°Ñ Ð²Ð¸ÐºÐ¾Ñ€Ð¸ÑÑ‚Ð°Ð½Ð½Ñ Ð¼Ð¾Ð´Ð¸Ñ„Ñ–ÐºÐ°Ñ‚Ð¾Ñ€Ð° + або -" -#: ppc-opc.c:507 +#: ppc-opc.c:470 +msgid "attempt to set 'at' bits when using + or - modifier" +msgstr "Ñпроба вÑтановити біт «at» під Ñ‡Ð°Ñ Ð²Ð¸ÐºÐ¾Ñ€Ð¸ÑÑ‚Ð°Ð½Ð½Ñ Ð¼Ð¾Ð´Ð¸Ñ„Ñ–ÐºÐ°Ñ‚Ð¾Ñ€Ð° + або -" + +#: ppc-opc.c:677 +msgid "invalid R operand" +msgstr "некоректний операнд R" + +#: ppc-opc.c:732 msgid "invalid mask field" msgstr "некоректне поле маÑки" -#: ppc-opc.c:530 +#: ppc-opc.c:755 msgid "invalid mfcr mask" msgstr "некоректна маÑка mfcr" -#: ppc-opc.c:606 +#: ppc-opc.c:873 ppc-opc.c:891 msgid "illegal L operand value" msgstr "некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¾Ð¿ÐµÑ€Ð°Ð½Ð´Ð° L" -#: ppc-opc.c:645 +#: ppc-opc.c:914 +msgid "illegal WC operand value" +msgstr "некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¾Ð¿ÐµÑ€Ð°Ð½Ð´Ð° WC" + +#: ppc-opc.c:1011 msgid "incompatible L operand value" msgstr "неÑуміÑне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¾Ð¿ÐµÑ€Ð°Ð½Ð´Ð° L" -#: ppc-opc.c:684 ppc-opc.c:719 +#: ppc-opc.c:1051 ppc-opc.c:1086 msgid "illegal bitmask" msgstr "некоректна бітова маÑка" -#: ppc-opc.c:806 +#: ppc-opc.c:1173 msgid "address register in load range" msgstr "регіÑÑ‚Ñ€ адреÑи у діапазоні завантаженнÑ" -#: ppc-opc.c:872 +#: ppc-opc.c:1213 +msgid "illegal PL operand value" +msgstr "некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¾Ð¿ÐµÑ€Ð°Ð½Ð´Ð° PL" + +#: ppc-opc.c:1274 msgid "index register in load range" msgstr "регіÑÑ‚Ñ€ індекÑу у діапазоні завантаженнÑ" -#: ppc-opc.c:901 ppc-opc.c:986 +#: ppc-opc.c:1303 ppc-opc.c:1389 msgid "source and target register operands must be different" msgstr "регіÑтрові операнди джерела Ñ– Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¼Ð°ÑŽÑ‚ÑŒ бути різними" -#: ppc-opc.c:931 +#: ppc-opc.c:1334 msgid "invalid register operand when updating" msgstr "некоректний операнд регіÑтра під Ñ‡Ð°Ñ Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ" -#: ppc-opc.c:1049 +#: ppc-opc.c:1452 msgid "illegal immediate value" msgstr "некоректна конÑтанта" -#: ppc-opc.c:1154 +#: ppc-opc.c:1557 msgid "invalid bat number" msgstr "некоректний номер bat" -#: ppc-opc.c:1189 +#: ppc-opc.c:1592 msgid "invalid sprg number" msgstr "некоректний номер sprg" -#: ppc-opc.c:1226 +#: ppc-opc.c:1629 msgid "invalid tbr number" msgstr "некоректний номер tbr" -#: ppc-opc.c:1372 +#: ppc-opc.c:1715 ppc-opc.c:1761 +msgid "VSR overlaps ACC operand" +msgstr "VSR перекриває операнд ACC" + +#: ppc-opc.c:1868 msgid "invalid constant" msgstr "некоректна конÑтанта" -#: ppc-opc.c:1474 ppc-opc.c:1497 ppc-opc.c:1520 ppc-opc.c:1543 +#: ppc-opc.c:1970 ppc-opc.c:1993 ppc-opc.c:2016 ppc-opc.c:2039 msgid "UIMM = 00000 is illegal" msgstr "UIMM = 00000 Ñ” некоректним" -#: ppc-opc.c:1566 +#: ppc-opc.c:2062 msgid "UIMM values >7 are illegal" msgstr "Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ UIMM > 7 Ñ” некоректними" -#: ppc-opc.c:1589 +#: ppc-opc.c:2085 msgid "UIMM values >15 are illegal" msgstr "Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ UIMM > 15 Ñ” некоректними" -#: ppc-opc.c:1612 +#: ppc-opc.c:2108 msgid "GPR odd is illegal" msgstr "Ðепарне GPR Ñ” некоректним" -#: ppc-opc.c:1635 ppc-opc.c:1658 +#: ppc-opc.c:2131 ppc-opc.c:2154 msgid "invalid offset" msgstr "некоректний зÑув" -#: ppc-opc.c:1681 +#: ppc-opc.c:2177 msgid "invalid Ddd value" msgstr "некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ddd" -#: riscv-dis.c:68 +#. The option without '=' should be defined above. +#: riscv-dis.c:85 riscv-dis.c:109 #, c-format msgid "unrecognized disassembler option: %s" msgstr "невідомий параметр дизаÑемблюваннÑ: %s" -#: riscv-dis.c:346 +#. Invalid options with '=', no option name before '=', +#. and no value after '='. +#: riscv-dis.c:93 +#, c-format +msgid "unrecognized disassembler option with '=': %s" +msgstr "невідомий параметр дизаÑÐµÐ¼Ð±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ð· «=»: %s" + +#: riscv-dis.c:103 +#, c-format +msgid "unknown privilege spec set by %s=%s" +msgstr "невідома ÑÐ¿ÐµÑ†Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ Ð¿Ñ€Ð°Ð² доÑтупу, Ñку вÑтановлено інÑтрукцією %s=%s" + +#: riscv-dis.c:406 #, c-format msgid "# internal error, undefined modifier (%c)" msgstr "# Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°, невизначений модифікатор (%c)" -#: riscv-dis.c:541 +#: riscv-dis.c:605 #, c-format msgid "" "\n" @@ -2007,25 +2105,68 @@ "З перемикачем -M можна викориÑтовувати такі Ñпецифічні Ð´Ð»Ñ RISC-V параметри\n" "дизаÑемблера (декілька параметрів Ñлід відокремлювати комами):\n" -#: riscv-dis.c:545 +#: riscv-dis.c:609 #, c-format msgid "" "\n" -" numeric Print numeric register names, rather than ABI names.\n" +" numeric Print numeric register names, rather than ABI names.\n" msgstr "" "\n" -" numeric вивеÑти чиÑлові назви регіÑтрів, а не назви в ABI.\n" +" numeric вивеÑти чиÑлові назви регіÑтрів, а не назви в ABI.\n" -#: riscv-dis.c:548 +#: riscv-dis.c:612 #, c-format msgid "" "\n" -" no-aliases Disassemble only into canonical instructions, rather\n" -" than into pseudoinstructions.\n" +" no-aliases Disassemble only into canonical instructions, rather\n" +" than into pseudoinstructions.\n" msgstr "" "\n" -" no-aliases дизаÑемблювати лише у канонічні інÑтрукції, а не у\n" -" пÑевдоінÑтрукції.\n" +" no-aliases дизаÑемблювати лише у канонічні інÑтрукції, а не у\n" +" пÑевдоінÑтрукції.\n" + +#: riscv-dis.c:616 +#, c-format +msgid "" +"\n" +" priv-spec=PRIV Print the CSR according to the chosen privilege spec\n" +" (1.9, 1.9.1, 1.10, 1.11).\n" +msgstr "" +"\n" +" priv-spec=ПРДОСТ вивеÑти CSR відповідно до вибраної Ñпецифікації прав доÑтупу\n" +" (1.9, 1.9.1, 1.10, 1.11).\n" + +#: rx-dis.c:139 rx-dis.c:163 rx-dis.c:171 rx-dis.c:179 rx-dis.c:187 +msgid "<invalid register number>" +msgstr "<некоректний номер регіÑтру>" + +#: rx-dis.c:147 rx-dis.c:195 +msgid "<invalid condition code>" +msgstr "<некоректний код умови>" + +#: rx-dis.c:155 +msgid "<invalid flag>" +msgstr "<некоректний прапорець>" + +#: rx-dis.c:203 +msgid "<invalid opsize>" +msgstr "<некоретний розмір операції>" + +#: rx-dis.c:211 +msgid "<invalid size>" +msgstr "<некоректний розмір>" + +#: s12z-dis.c:251 s12z-dis.c:308 s12z-dis.c:319 +msgid "<illegal reg num>" +msgstr "<некоректний номер регіÑтру>" + +#: s12z-dis.c:382 +msgid "<bad>" +msgstr "<помилка>" + +#: s12z-dis.c:392 +msgid ".<bad>" +msgstr ".<помилка>" #: s390-dis.c:42 msgid "Disassemble in ESA architecture mode" @@ -2055,8 +2196,8 @@ "З перемикачем -M можна викориÑтовувати такі Ñпецифічні Ð´Ð»Ñ S/390 параметри\n" "дизаÑемблера (декілька параметрів Ñлід відокремлювати комами):\n" -#: score-dis.c:663 score-dis.c:870 score-dis.c:1031 score-dis.c:1145 -#: score-dis.c:1152 score-dis.c:1159 score7-dis.c:695 score7-dis.c:858 +#: score-dis.c:661 score-dis.c:879 score-dis.c:1040 score-dis.c:1146 +#: score-dis.c:1154 score-dis.c:1161 score7-dis.c:695 score7-dis.c:858 msgid "<illegal instruction>" msgstr "<некоректна інÑтрукціÑ>" @@ -2071,16 +2212,44 @@ msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: помилка у sparc-opcode.h: «%s» == «%s»\n" #. Mark as non-valid instruction. -#: sparc-dis.c:1098 +#: sparc-dis.c:1094 msgid "unknown" msgstr "невідома" -#: v850-dis.c:453 +#: v850-dis.c:190 +msgid "<invalid s-reg number>" +msgstr "<некоректний номер s-регіÑтру>" + +#: v850-dis.c:206 +msgid "<invalid reg number>" +msgstr "<некоректний номер регіÑтру>" + +#: v850-dis.c:222 +msgid "<invalid v-reg number>" +msgstr "<некоректний номер v-регіÑтру>" + +#: v850-dis.c:236 +msgid "<invalid CC-reg number>" +msgstr "<некоректний номер CC-регіÑтру>" + +#: v850-dis.c:250 +msgid "<invalid float-CC-reg number>" +msgstr "<некоректний номер float-CC-регіÑтру>" + +#: v850-dis.c:264 +msgid "<invalid cacheop number>" +msgstr "<некоректний номер cacheop>" + +#: v850-dis.c:275 +msgid "<invalid prefop number>" +msgstr "<некоректний номер prefop>" + +#: v850-dis.c:510 #, c-format msgid "unknown operand shift: %x" msgstr "невідомий зÑув операнда: %x" -#: v850-dis.c:469 +#: v850-dis.c:526 #, c-format msgid "unknown reg: %d" msgstr "невідомий регіÑÑ‚Ñ€: %d" @@ -2162,7 +2331,7 @@ msgid "Name well-known globals" msgstr "Ðазивати добре відомі загальні" -#: wasm32-dis.c:503 +#: wasm32-dis.c:537 #, c-format msgid "" "The following WebAssembly-specific disassembler options are supported for use\n" @@ -2200,12 +2369,12 @@ msgid "internal error: xc16x_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: xc16x_cgen_rebuild_tables: конфлікт значень insn-chunk-bitsize: «%d» Ñ– «%d»" -#: xc16x-desc.c:3432 +#: xc16x-desc.c:3437 #, c-format msgid "internal error: xc16x_cgen_cpu_open: unsupported argument `%d'" msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: xc16x_cgen_cpu_open: непідтримуваний аргумент «%d»" -#: xc16x-desc.c:3451 +#: xc16x-desc.c:3456 #, c-format msgid "internal error: xc16x_cgen_cpu_open: no endianness specified" msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: xc16x_cgen_cpu_open: не визначено порÑдок байтів" @@ -2255,123 +2424,12 @@ msgid "internal error: xstormy16_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'" msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: xstormy16_cgen_rebuild_tables: конфлікт значень insn-chunk-bitsize: «%d» Ñ– «%d»" -#: xstormy16-desc.c:1400 +#: xstormy16-desc.c:1405 #, c-format msgid "internal error: xstormy16_cgen_cpu_open: unsupported argument `%d'" msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: xstormy16_cgen_cpu_open: непідтримуваний аргумент «%d»" -#: xstormy16-desc.c:1419 +#: xstormy16-desc.c:1424 #, c-format msgid "internal error: xstormy16_cgen_cpu_open: no endianness specified" msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: xstormy16_cgen_cpu_open: не визначено порÑдок байтів" - -#~ msgid "can't find i386-opc.tbl for reading, errno = %s\n" -#~ msgstr "не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ i386-opc.tbl Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ, номер помилки = %s\n" - -#~ msgid "" -#~ "\n" -#~ " msa Recognize MSA instructions.\n" -#~ msgstr "" -#~ "\n" -#~ " msa розпізнавати інÑтрукції MSA.\n" - -#~ msgid "" -#~ "\n" -#~ " hwr-names=ARCH Print HWR names according to specified \n" -#~ " architecture.\n" -#~ " Default: based on binary being disassembled.\n" -#~ msgstr "" -#~ "\n" -#~ " hwr-names=ARCH виводити назви HWR відповідно до вказаної \n" -#~ " архітектури.\n" -#~ " Типове значеннÑ: визначаєтьÑÑ Ð·Ð° файлом, Ñкий дизаÑемблюєтьÑÑ.\n" - -#~ msgid "" -#~ "\n" -#~ " For the options above, The following values are supported for \"ARCH\":\n" -#~ " " -#~ msgstr "" -#~ "\n" -#~ " У вказаних вище параметрах викориÑтовуютьÑÑ Ñ‚Ð°ÐºÑ– Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ ARCH:\n" -#~ " " - -#~ msgid "Internal disassembler error" -#~ msgstr "Ð’Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° дизаÑемблера" - -#~ msgid "can't cope with insert %d\n" -#~ msgstr "не вдалоÑÑ Ð¾Ð±Ñ€Ð¾Ð±Ð¸Ñ‚Ð¸ вÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð½Ñ %d\n" - -#~ msgid "%02x\t\t*unknown*" -#~ msgstr "%02x\t\t*невідомо*" - -#~ msgid "# <dis error: %08lx>" -#~ msgstr "# <помилка дизаÑемблера: %08lx>" - -#~ msgid "Internal error: bad sparc-opcode.h: \"%s\", %#.8lx, %#.8lx\n" -#~ msgstr "Ð’Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: помилка у файлі sparc-opcode.h: «%s», %#.8lx, %#.8lx\n" - -#~ msgid "Illegal limm reference in last instruction!\n" -#~ msgstr "Ðекоректне поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ñƒ оÑтанній інÑтрукції!\n" - -#~ msgid "unable to fit different valued constants into instruction" -#~ msgstr "не вдалоÑÑ Ð²Ð¼Ñ–Ñтити конÑтанти з різними значеннÑм у інÑтрукцію" - -#~ msgid "auxiliary register not allowed here" -#~ msgstr "тут не можна викориÑтовувати допоміжний регіÑÑ‚Ñ€" - -#~ msgid "too many long constants" -#~ msgstr "занадто багато довгих Ñталих" - -#~ msgid "too many shimms in load" -#~ msgstr "занадто багато shimm у load" - -#~ msgid "impossible store" -#~ msgstr "неможливе Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ" - -#~ msgid "st operand error" -#~ msgstr "помилка у операнді st" - -#~ msgid "address writeback not allowed" -#~ msgstr "зворотний Ð·Ð°Ð¿Ð¸Ñ Ð°Ð´Ñ€ÐµÑ Ð·Ð°Ð±Ð¾Ñ€Ð¾Ð½ÐµÐ½Ð¾" - -#~ msgid "invalid load/shimm insn" -#~ msgstr "некоректна інÑÑ‚Ñ€ÑƒÐºÑ†Ñ–Ñ load/shimm" - -#~ msgid "ld operand error" -#~ msgstr "помилка у операнді ld" - -#~ msgid "jump flags, but no .f seen" -#~ msgstr "прапорці переходу (jump), але не видно .f" - -#~ msgid "jump flags, but no limm addr" -#~ msgstr "прапорці переходу (jump), але немає адреÑи limm" - -#~ msgid "flag bits of jump address limm lost" -#~ msgstr "біти прапорців адреÑи переходу (jump) limm втрачено" - -#~ msgid "attempt to set HR bits" -#~ msgstr "Ñпроба вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð±Ñ–Ñ‚Ñ–Ð² HR" - -#~ msgid "bad jump flags value" -#~ msgstr "помилкове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ–Ð² jump" - -#~ msgid "branch address not on 4 byte boundary" -#~ msgstr "адреÑа Ð²Ñ–Ð´Ð³Ð°Ð»ÑƒÐ¶ÐµÐ½Ð½Ñ Ð¿ÐµÑ€ÐµÐ±ÑƒÐ²Ð°Ñ” не на межі 4 байтів" - -#~ msgid "must specify .jd or no nullify suffix" -#~ msgstr "Ñлід вказати .jd або чинне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ ÑуфікÑа" - -#~ msgid "# internal error, incomplete extension sequence (+)" -#~ msgstr "# Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°, незавершена поÑлідовніÑÑ‚ÑŒ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ (+)" - -#~ msgid "# internal error, undefined extension sequence (+%c)" -#~ msgstr "# Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°, невизначена поÑлідовніÑÑ‚ÑŒ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ (+%c)" - -#~ msgid "# internal disassembler error, unrecognized modifier (+%c)" -#~ msgstr "# Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° дизаÑемблера, нерозпізнаний модифікатор (+%c)" - -#~ msgid "# internal disassembler error, unrecognized modifier (m%c)" -#~ msgstr "# Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° дизаÑемблера, нерозпізнаний модифікатор (m%c)" - -#~ msgid "# internal disassembler error, unrecognized modifier (%c)" -#~ msgstr "# Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° дизаÑемблера, нерозпізнаний модифікатор (%c)" diff -Nru gdb-9.1/opcodes/ppc-dis.c gdb-10.2/opcodes/ppc-dis.c --- gdb-9.1/opcodes/ppc-dis.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/ppc-dis.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* ppc-dis.c -- Disassemble PowerPC instructions - Copyright (C) 1994-2019 Free Software Foundation, Inc. + Copyright (C) 1994-2020 Free Software Foundation, Inc. Written by Ian Lance Taylor, Cygnus Support This file is part of the GNU opcodes library. @@ -185,10 +185,15 @@ | PPC_OPCODE_POWER7 | PPC_OPCODE_POWER8 | PPC_OPCODE_POWER9 | PPC_OPCODE_ALTIVEC | PPC_OPCODE_VSX), 0 }, + { "power10", (PPC_OPCODE_PPC | PPC_OPCODE_ISEL | PPC_OPCODE_64 + | PPC_OPCODE_POWER4 | PPC_OPCODE_POWER5 | PPC_OPCODE_POWER6 + | PPC_OPCODE_POWER7 | PPC_OPCODE_POWER8 | PPC_OPCODE_POWER9 + | PPC_OPCODE_POWER10 | PPC_OPCODE_ALTIVEC | PPC_OPCODE_VSX), + 0 }, { "future", (PPC_OPCODE_PPC | PPC_OPCODE_ISEL | PPC_OPCODE_64 | PPC_OPCODE_POWER4 | PPC_OPCODE_POWER5 | PPC_OPCODE_POWER6 | PPC_OPCODE_POWER7 | PPC_OPCODE_POWER8 | PPC_OPCODE_POWER9 - | PPC_OPCODE_POWERXX | PPC_OPCODE_ALTIVEC | PPC_OPCODE_VSX), + | PPC_OPCODE_POWER10 | PPC_OPCODE_ALTIVEC | PPC_OPCODE_VSX), 0 }, { "ppc", PPC_OPCODE_PPC, 0 }, @@ -233,6 +238,11 @@ | PPC_OPCODE_POWER7 | PPC_OPCODE_POWER8 | PPC_OPCODE_POWER9 | PPC_OPCODE_ALTIVEC | PPC_OPCODE_VSX), 0 }, + { "pwr10", (PPC_OPCODE_PPC | PPC_OPCODE_ISEL | PPC_OPCODE_64 + | PPC_OPCODE_POWER4 | PPC_OPCODE_POWER5 | PPC_OPCODE_POWER6 + | PPC_OPCODE_POWER7 | PPC_OPCODE_POWER8 | PPC_OPCODE_POWER9 + | PPC_OPCODE_POWER10 | PPC_OPCODE_ALTIVEC | PPC_OPCODE_VSX), + 0 }, { "pwrx", PPC_OPCODE_POWER | PPC_OPCODE_POWER2, 0 }, { "raw", PPC_OPCODE_PPC, @@ -354,7 +364,7 @@ break; default: if (info->arch == bfd_arch_powerpc) - dialect = ppc_parse_cpu (dialect, &sticky, "power9") | PPC_OPCODE_ANY; + dialect = ppc_parse_cpu (dialect, &sticky, "power10") | PPC_OPCODE_ANY; else dialect = ppc_parse_cpu (dialect, &sticky, "pwr"); break; @@ -389,12 +399,36 @@ #define SPE2_OPCD_SEGS (1 + SPE2_XOP_TO_SEG (SPE2_XOP (-1))) static unsigned short spe2_opcd_indices[SPE2_OPCD_SEGS + 1]; +static bfd_boolean +ppc_symbol_is_valid (asymbol *sym, + struct disassemble_info *info ATTRIBUTE_UNUSED) +{ + elf_symbol_type * est; + + if (sym == NULL) + return FALSE; + + est = elf_symbol_from (NULL, sym); + + /* Ignore ELF hidden, local, no-type symbols. + These are generated by annobin. */ + if (est != NULL + && ELF_ST_VISIBILITY (est->internal_elf_sym.st_other) == STV_HIDDEN + && ELF_ST_BIND (est->internal_elf_sym.st_info) == STB_LOCAL + && ELF_ST_TYPE (est->internal_elf_sym.st_info) == STT_NOTYPE) + return FALSE; + + return TRUE; +} + /* Calculate opcode table indices to speed up disassembly, and init dialect. */ void disassemble_init_powerpc (struct disassemble_info *info) { + info->symbol_is_valid = ppc_symbol_is_valid; + if (powerpc_opcd_indices[PPC_OPCD_SEGS] == 0) { unsigned seg, idx, op; @@ -750,8 +784,9 @@ if (status != 0 && (dialect & PPC_OPCODE_VLE) != 0) { /* Clear buffer so unused bytes will not have garbage in them. */ - buffer[0] = buffer[1] = buffer[2] = buffer[3] = 0; + buffer[2] = buffer[3] = 0; status = (*info->read_memory_func) (memaddr, buffer, 2, info); + insn_length = 2; } if (status != 0) @@ -767,7 +802,7 @@ /* Get the major opcode of the insn. */ opcode = NULL; - if ((dialect & PPC_OPCODE_POWERXX) != 0 + if ((dialect & PPC_OPCODE_POWER10) != 0 && PPC_OP (insn) == 0x1) { uint64_t temp_insn, suffix; @@ -801,12 +836,15 @@ insn_length = 2; } } - if (opcode == NULL && (dialect & PPC_OPCODE_SPE2) != 0) - opcode = lookup_spe2 (insn); - if (opcode == NULL) - opcode = lookup_powerpc (insn, dialect & ~PPC_OPCODE_ANY); - if (opcode == NULL && (dialect & PPC_OPCODE_ANY) != 0) - opcode = lookup_powerpc (insn, dialect); + if (opcode == NULL && insn_length == 4) + { + if ((dialect & PPC_OPCODE_SPE2) != 0) + opcode = lookup_spe2 (insn); + if (opcode == NULL) + opcode = lookup_powerpc (insn, dialect & ~PPC_OPCODE_ANY); + if (opcode == NULL && (dialect & PPC_OPCODE_ANY) != 0) + opcode = lookup_powerpc (insn, dialect); + } if (opcode != NULL) { @@ -824,16 +862,16 @@ need_paren } op_separator; bfd_boolean skip_optional; - int spaces; + int blanks; (*info->fprintf_func) (info->stream, "%s", opcode->name); /* gdb fprintf_func doesn't return count printed. */ - spaces = 8 - strlen (opcode->name); - if (spaces <= 0) - spaces = 1; + blanks = 8 - strlen (opcode->name); + if (blanks <= 0) + blanks = 1; /* Now extract and print the operands. */ - op_separator = spaces; + op_separator = blanks; skip_optional = FALSE; for (opindex = opcode->operands; *opindex != 0; opindex++) { @@ -872,6 +910,8 @@ (*info->fprintf_func) (info->stream, "v%" PRId64, value); else if ((operand->flags & PPC_OPERAND_VSR) != 0) (*info->fprintf_func) (info->stream, "vs%" PRId64, value); + else if ((operand->flags & PPC_OPERAND_ACC) != 0) + (*info->fprintf_func) (info->stream, "a%" PRId64, value); else if ((operand->flags & PPC_OPERAND_RELATIVE) != 0) (*info->print_address_func) (memaddr + value, info); else if ((operand->flags & PPC_OPERAND_ABSOLUTE) != 0) @@ -918,9 +958,13 @@ } /* We could not find a match. */ - (*info->fprintf_func) (info->stream, ".long 0x%" PRIx64, insn); - - return 4; + if (insn_length == 4) + (*info->fprintf_func) (info->stream, ".long 0x%x", + (unsigned int) insn); + else + (*info->fprintf_func) (info->stream, ".word 0x%x", + (unsigned int) insn >> 16); + return insn_length; } const disasm_options_and_args_t * diff -Nru gdb-9.1/opcodes/ppc-opc.c gdb-10.2/opcodes/ppc-opc.c --- gdb-9.1/opcodes/ppc-opc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/ppc-opc.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* ppc-opc.c -- PowerPC opcode list - Copyright (C) 1994-2019 Free Software Foundation, Inc. + Copyright (C) 1994-2020 Free Software Foundation, Inc. Written by Ian Lance Taylor, Cygnus Support This file is part of the GNU opcodes library. @@ -643,6 +643,25 @@ return -value; } +/* The split IMM32 field in a vector splat insn. */ + +static uint64_t +insert_imm32 (uint64_t insn, + int64_t value, + ppc_cpu_t dialect ATTRIBUTE_UNUSED, + const char **errmsg ATTRIBUTE_UNUSED) +{ + return insn | ((value & 0xffff0000) << 16) | (value & 0xffff); +} + +static int64_t +extract_imm32 (uint64_t insn, + ppc_cpu_t dialect ATTRIBUTE_UNUSED, + int *invalid ATTRIBUTE_UNUSED) +{ + return (insn & 0xffff) | ((insn >> 16) & 0xffff0000); +} + /* The R field in an 8-byte prefix instruction when there are restrictions between R's value and the RA value (ie, they cannot both be non zero). */ @@ -771,6 +790,29 @@ return mask; } +/* L field in the paste. instruction. */ + +static uint64_t +insert_l1opt (uint64_t insn, + int64_t value, + ppc_cpu_t dialect ATTRIBUTE_UNUSED, + const char **errmsg ATTRIBUTE_UNUSED) +{ + return insn | ((value & 1) << 21); +} + +static int64_t +extract_l1opt (uint64_t insn, + ppc_cpu_t dialect ATTRIBUTE_UNUSED, + int *invalid) +{ + /* Return a value of 1 for a missing optional operand. */ + if (*invalid < 0) + return 1; + + return (insn >> 21) & 1; +} + static uint64_t insert_li20 (uint64_t insn, int64_t value, @@ -793,10 +835,16 @@ | (insn & 0x7ff)) ^ 0x80000) - 0x80000; } -/* The 2-bit L field in a SYNC or WC field in a WAIT instruction. +/* The 2-bit/3-bit L or 2-bit WC field in a SYNC, DCBF or WAIT instruction. For SYNC, some L values are reserved: - * Value 3 is reserved on newer server cpus. - * Values 2 and 3 are reserved on all other cpus. */ + * Values 6 and 7 are reserved on newer server cpus. + * Value 3 is reserved on all server cpus. + * Value 2 is reserved on all other cpus. + For DCBF, some L values are reserved: + * Values 2, 5 and 7 are reserved on all cpus. + For WAIT, some WC values are reserved: + * Value 3 is reserved on all server cpus. + * Values 1 and 2 are reserved on older server cpus. */ static uint64_t insert_ls (uint64_t insn, @@ -804,15 +852,73 @@ ppc_cpu_t dialect, const char **errmsg) { - /* For SYNC, some L values are illegal. */ + int64_t mask; + if (((insn >> 1) & 0x3ff) == 598) { - int64_t max_lvalue = (dialect & PPC_OPCODE_POWER4) ? 2 : 1; - if (value > max_lvalue) - *errmsg = _("illegal L operand value"); + /* For SYNC, some L values are illegal. */ + mask = (dialect & PPC_OPCODE_POWER10) ? 0x7 : 0x3; + + /* If the value is within range, check for other illegal values. */ + if ((value & mask) == value) + switch (value) + { + case 2: + if (dialect & PPC_OPCODE_POWER4) + break; + /* Fall through. */ + case 3: + case 6: + case 7: + *errmsg = _("illegal L operand value"); + break; + default: + break; + } + } + else if (((insn >> 1) & 0x3ff) == 86) + { + /* For DCBF, some L values are illegal. */ + mask = (dialect & PPC_OPCODE_POWER10) ? 0x7 : 0x3; + + /* If the value is within range, check for other illegal values. */ + if ((value & mask) == value) + switch (value) + { + case 2: + case 5: + case 7: + *errmsg = _("illegal L operand value"); + break; + default: + break; + } } + else + { + /* For WAIT, some WC values are illegal. */ + mask = 0x3; - return insn | ((value & 0x3) << 21); + /* If the value is within range, check for other illegal values. */ + if ((dialect & PPC_OPCODE_A2) == 0 + && (dialect & PPC_OPCODE_E500MC) == 0 + && (value & mask) == value) + switch (value) + { + case 1: + case 2: + if (dialect & PPC_OPCODE_POWER10) + break; + /* Fall through. */ + case 3: + *errmsg = _("illegal WC operand value"); + break; + default: + break; + } + } + + return insn | ((value & mask) << 21); } static int64_t @@ -820,18 +926,72 @@ ppc_cpu_t dialect, int *invalid) { + uint64_t value; + /* Missing optional operands have a value of zero. */ if (*invalid < 0) return 0; - uint64_t lvalue = (insn >> 21) & 3; if (((insn >> 1) & 0x3ff) == 598) { - uint64_t max_lvalue = (dialect & PPC_OPCODE_POWER4) ? 2 : 1; - if (lvalue > max_lvalue) - *invalid = 1; + /* For SYNC, some L values are illegal. */ + int64_t mask = (dialect & PPC_OPCODE_POWER10) ? 0x7 : 0x3; + + value = (insn >> 21) & mask; + switch (value) + { + case 2: + if (dialect & PPC_OPCODE_POWER4) + break; + /* Fall through. */ + case 3: + case 6: + case 7: + *invalid = 1; + break; + default: + break; + } } - return lvalue; + else if (((insn >> 1) & 0x3ff) == 86) + { + /* For DCBF, some L values are illegal. */ + int64_t mask = (dialect & PPC_OPCODE_POWER10) ? 0x7 : 0x3; + + value = (insn >> 21) & mask; + switch (value) + { + case 2: + case 5: + case 7: + *invalid = 1; + break; + default: + break; + } + } + else + { + /* For WAIT, some WC values are illegal. */ + value = (insn >> 21) & 0x3; + if ((dialect & PPC_OPCODE_A2) == 0 + && (dialect & PPC_OPCODE_E500MC) == 0) + switch (value) + { + case 1: + case 2: + if (dialect & PPC_OPCODE_POWER10) + break; + /* Fall through. */ + case 3: + *invalid = 1; + break; + default: + break; + } + } + + return value; } /* The 4-bit E field in a sync instruction that accepts 2 operands. @@ -1037,6 +1197,41 @@ return -(((insn & 0xffff) ^ 0x8000) - 0x8000); } +/* The 2-bit SC field in a SYNC or PL field in a WAIT instruction. + For WAIT, some PL values are reserved: + * Values 1, 2 and 3 are reserved. */ + +static uint64_t +insert_pl (uint64_t insn, + int64_t value, + ppc_cpu_t dialect ATTRIBUTE_UNUSED, + const char **errmsg) +{ + /* For WAIT, some PL values are illegal. */ + if (((insn >> 1) & 0x3ff) == 30 + && value != 0) + *errmsg = _("illegal PL operand value"); + return insn | ((value & 0x3) << 16); +} + +static int64_t +extract_pl (uint64_t insn, + ppc_cpu_t dialect ATTRIBUTE_UNUSED, + int *invalid) +{ + /* Missing optional operands have a value of zero. */ + if (*invalid < 0) + return 0; + + uint64_t value = (insn >> 16) & 0x3; + + /* For WAIT, some PL values are illegal. */ + if (((insn >> 1) & 0x3ff) == 30 + && value != 0) + *invalid = 1; + return value; +} + /* The RA field in a D or X form instruction which is an updating load, which means that the RA field may not be zero and may not equal the RT field. */ @@ -1506,6 +1701,33 @@ return ((insn << 3) & 0x20) | ((insn >> 16) & 0x1f); } +/* The XA field in an MMA XX3 form instruction. This is split + and must not overlap with the ACC operand. */ + +static uint64_t +insert_xa6a (uint64_t insn, + int64_t value, + ppc_cpu_t dialect, + const char **errmsg) +{ + int64_t acc = (insn >> 23) & 0x7; + if ((value >> 2) == acc) + *errmsg = _("VSR overlaps ACC operand"); + return insert_xa6 (insn, value, dialect, errmsg); +} + +static int64_t +extract_xa6a (uint64_t insn, + ppc_cpu_t dialect, + int *invalid) +{ + int64_t acc = (insn >> 23) & 0x7; + int64_t value = extract_xa6 (insn, dialect, invalid); + if ((value >> 2) == acc) + *invalid = 1; + return value; +} + /* The XB field in an XX3 form instruction. This is split. */ static uint64_t @@ -1525,6 +1747,33 @@ return ((insn << 4) & 0x20) | ((insn >> 11) & 0x1f); } +/* The XB field in an MMA XX3 form instruction. This is split + and must not overlap with the ACC operand. */ + +static uint64_t +insert_xb6a (uint64_t insn, + int64_t value, + ppc_cpu_t dialect, + const char **errmsg) +{ + int64_t acc = (insn >> 23) & 0x7; + if ((value >> 2) == acc) + *errmsg = _("VSR overlaps ACC operand"); + return insert_xb6 (insn, value, dialect, errmsg); +} + +static int64_t +extract_xb6a (uint64_t insn, + ppc_cpu_t dialect, + int *invalid) +{ + int64_t acc = (insn >> 23) & 0x7; + int64_t value = extract_xb6 (insn, dialect, invalid); + if ((value >> 2) == acc) + *invalid = 1; + return value; +} + /* The XA and XB fields in an XX3 form instruction when they must be the same. This is used for extended mnemonics like xvmovdp. The extraction function enforces that the fields are the same. */ @@ -1571,6 +1820,44 @@ return ((insn << 2) & 0x20) | ((insn >> 6) & 0x1f); } +/* The split XTp field in a vector paired insn. */ + +static uint64_t +insert_xtp (uint64_t insn, + int64_t value, + ppc_cpu_t dialect ATTRIBUTE_UNUSED, + const char **errmsg ATTRIBUTE_UNUSED) +{ + return insn | ((value & 0x1e) << 21) | ((value & 0x20) << (21 - 5)); +} + +static int64_t +extract_xtp (uint64_t insn, + ppc_cpu_t dialect ATTRIBUTE_UNUSED, + int *invalid ATTRIBUTE_UNUSED) +{ + return ((insn >> (21 - 5)) & 0x20) | ((insn >> 21) & 0x1e); +} + +/* The split XT field in a vector splat insn. */ + +static uint64_t +insert_xts (uint64_t insn, + int64_t value, + ppc_cpu_t dialect ATTRIBUTE_UNUSED, + const char **errmsg ATTRIBUTE_UNUSED) +{ + return insn | ((value & 0x1f) << 21) | ((value & 0x20) << (16 - 5)); +} + +static int64_t +extract_xts (uint64_t insn, + ppc_cpu_t dialect ATTRIBUTE_UNUSED, + int *invalid ATTRIBUTE_UNUSED) +{ + return ((insn >> (16 - 5)) & 0x20) | ((insn >> 21) & 0x1f); +} + static uint64_t insert_dm (uint64_t insn, int64_t value, @@ -2015,9 +2302,13 @@ #define BFF BF + 1 { 0x7, 23, NULL, NULL, 0 }, + /* The ACC field in a VSX ACC 8LS:D-form instruction. */ +#define ACC BFF + 1 + { 0x7, 23, NULL, NULL, PPC_OPERAND_ACC }, + /* An optional BF field. This is used for comparison instructions, in which an omitted BF field is taken as zero. */ -#define OBF BFF + 1 +#define OBF ACC + 1 { 0x7, 23, NULL, NULL, PPC_OPERAND_CR_REG | PPC_OPERAND_OPTIONAL }, /* The BFA field in an X or XL form instruction. */ @@ -2147,22 +2438,62 @@ off a register, and implies that the next operand is a register in parentheses. */ #define D34 DS + 1 - { 0x3ffffffff, PPC_OPSHIFT_INV, insert_d34, extract_d34, + { UINT64_C(0x3ffffffff), PPC_OPSHIFT_INV, insert_d34, extract_d34, PPC_OPERAND_PARENS | PPC_OPERAND_SIGNED }, /* The SI field in an 8-byte D form prefix instruction. */ #define SI34 D34 + 1 - { 0x3ffffffff, PPC_OPSHIFT_INV, insert_d34, extract_d34, PPC_OPERAND_SIGNED }, + { UINT64_C(0x3ffffffff), PPC_OPSHIFT_INV, insert_d34, extract_d34, PPC_OPERAND_SIGNED }, /* The NSI field in an 8-byte D form prefix instruction. This is the same as the SI34 field, only negated. */ #define NSI34 SI34 + 1 - { 0x3ffffffff, PPC_OPSHIFT_INV, insert_nsi34, extract_nsi34, + { UINT64_C(0x3ffffffff), PPC_OPSHIFT_INV, insert_nsi34, extract_nsi34, PPC_OPERAND_NEGATIVE | PPC_OPERAND_SIGNED }, + /* The IMM32 field in a vector splat immediate prefix instruction. */ +#define IMM32 NSI34 + 1 + { 0xffffffff, PPC_OPSHIFT_INV, insert_imm32, extract_imm32, 0}, + + /* The UIM field in a vector permute extended prefix instruction. */ +#define UIM3 IMM32 + 1 + { 0x7, 32, NULL, NULL, 0}, + + /* The UIM field in a vector eval prefix instruction. */ +#define UIM8 UIM3 + 1 + { 0xff, 32, NULL, NULL, 0}, + + /* The IX field in xxsplti32dx. */ +#define IX UIM8 + 1 + { 0x1, 17, NULL, NULL, 0 }, + + /* The PMSK field in GER rank 8 prefix instructions. */ +#define PMSK8 IX + 1 + { 0xff, 40, NULL, NULL, 0 }, + + /* The PMSK field in GER rank 4 prefix instructions. */ +#define PMSK4 PMSK8 + 1 + { 0xf, 44, NULL, NULL, 0 }, + + /* The PMSK field in GER rank 2 prefix instructions. */ +#define PMSK2 PMSK4 + 1 + { 0x3, 46, NULL, NULL, 0 }, + + /* The XMSK field in GER prefix instructions. */ +#define XMSK PMSK2 + 1 + { 0xf, 36, NULL, NULL, 0 }, + + /* The YMSK field in GER prefix instructions. */ +#define YMSK XMSK + 1 + { 0xf, 32, NULL, NULL, 0 }, + + /* The YMSK field in 64-bit GER prefix instructions. */ +#define YMSK2 YMSK + 1 + { 0x3, 34, NULL, NULL, 0 }, + /* The DUIS or BHRBE fields in a XFX form instruction, 10 bits unsigned imediate */ -#define DUIS NSI34 + 1 +#define DUIS YMSK2 + 1 #define BHRBE DUIS { 0x3ff, 11, NULL, NULL, 0 }, @@ -2256,13 +2587,20 @@ #define HTM_R LOPT { 0x1, 21, NULL, NULL, PPC_OPERAND_OPTIONAL }, + /* The optional L field in the paste. instruction. This is similar to LOPT + above, but with a default value of 1. */ +#define L1OPT LOPT + 1 + { 0x1, 21, insert_l1opt, extract_l1opt, PPC_OPERAND_OPTIONAL }, + /* The optional (for 32-bit) L field in cmp[l][i] instructions. */ -#define L32OPT LOPT + 1 +#define L32OPT L1OPT + 1 { 0x1, 21, NULL, NULL, PPC_OPERAND_OPTIONAL | PPC_OPERAND_OPTIONAL32 }, - /* The L field in dcbf instruction. */ + /* The 2-bit L or WC field in an X (sync, dcbf or wait) form instruction. */ #define L2OPT L32OPT + 1 - { 0x3, 21, NULL, NULL, PPC_OPERAND_OPTIONAL }, +#define LS L2OPT +#define WC L2OPT + { 0x3, 21, insert_ls, extract_ls, PPC_OPERAND_OPTIONAL }, /* The LEV field in a POWER SVC / POWER9 SCV form instruction. */ #define SVC_LEV L2OPT + 1 @@ -2282,13 +2620,13 @@ #define LIA LI + 1 { 0x3fffffc, 0, NULL, NULL, PPC_OPERAND_ABSOLUTE | PPC_OPERAND_SIGNED }, - /* The LS or WC field in an X (sync or wait) form instruction. */ -#define LS LIA + 1 -#define WC LS - { 0x3, 21, insert_ls, extract_ls, PPC_OPERAND_OPTIONAL }, + /* The 3-bit L field in a sync or dcbf instruction. */ +#define LS3 LIA + 1 +#define L3OPT LS3 + { 0x7, 21, insert_ls, extract_ls, PPC_OPERAND_OPTIONAL }, /* The ME field in an M form instruction. */ -#define ME LS + 1 +#define ME LS3 + 1 #define ME_MASK (0x1f << 1) { 0x1f, 1, NULL, NULL, 0 }, @@ -2477,6 +2815,7 @@ #define EVUIMM SH /* The FC field in an atomic X form instruction. */ #define FC SH +#define UIM5 SH { 0x1f, 11, NULL, NULL, 0 }, #define EVUIMM_LT8 SH + 1 @@ -2632,8 +2971,12 @@ #define PS SIX + 1 { 0x1, 9, NULL, NULL, 0 }, + /* The SH field in a vector shift double by bit immediate instruction. */ +#define SH3 PS + 1 + { 0x7, 6, NULL, NULL, 0 }, + /* The SHB field in a VA form instruction. */ -#define SHB PS + 1 +#define SHB SH3 + 1 { 0xf, 6, NULL, NULL, 0 }, /* The other UIMM field in a half word EVX form instruction. */ @@ -2702,6 +3045,7 @@ { 0x3, 9, NULL, NULL, 0 }, #define R RMC + 1 +#define MP R { 0x1, 16, NULL, NULL, 0 }, #define RIC R + 1 @@ -2789,21 +3133,43 @@ #define XTQ6 XSQ6 { 0x3f, PPC_OPSHIFT_INV, insert_xtq6, extract_xtq6, PPC_OPERAND_VSR }, + /* The split XTp field in a vector paired instruction. */ +#define XTP XSQ6 + 1 + { 0x3e, PPC_OPSHIFT_INV, insert_xtp, extract_xtp, PPC_OPERAND_VSR }, + +#define XTS XTP + 1 + { 0x3f, PPC_OPSHIFT_INV, insert_xts, extract_xts, PPC_OPERAND_VSR }, + /* The XT field in a plxv instruction. Runs into the OP field. */ -#define XTOP XSQ6 + 1 +#define XTOP XTS + 1 { 0x3f, 21, NULL, NULL, PPC_OPERAND_VSR }, /* The XA field in an XX3 form instruction. This is split. */ #define XA6 XTOP + 1 { 0x3f, PPC_OPSHIFT_INV, insert_xa6, extract_xa6, PPC_OPERAND_VSR }, + /* The XA field in an MMA XX3 form instruction. This is split and + must not overlap with the ACC operand. */ +#define XA6a XA6 + 1 + { 0x3f, PPC_OPSHIFT_INV, insert_xa6a, extract_xa6a, PPC_OPERAND_VSR }, + + /* The XAp field in an MMA XX3 form instruction. This is split. + This is like XA6a, but must be even. */ +#define XA6ap XA6a + 1 + { 0x3e, PPC_OPSHIFT_INV, insert_xa6a, extract_xa6a, PPC_OPERAND_VSR }, + /* The XB field in an XX2 or XX3 form instruction. This is split. */ -#define XB6 XA6 + 1 +#define XB6 XA6ap + 1 { 0x3f, PPC_OPSHIFT_INV, insert_xb6, extract_xb6, PPC_OPERAND_VSR }, + /* The XB field in an XX3 form instruction. This is split and + must not overlap with the ACC operand. */ +#define XB6a XB6 + 1 + { 0x3f, PPC_OPSHIFT_INV, insert_xb6a, extract_xb6a, PPC_OPERAND_VSR }, + /* The XA and XB fields in an XX3 form instruction when they must be the same. This is used in extended mnemonics like xvmovdp. This is split. */ -#define XAB6 XB6 + 1 +#define XAB6 XB6a + 1 { 0x3f, PPC_OPSHIFT_INV, insert_xab6, extract_xab6, PPC_OPERAND_VSR }, /* The XC field in an XX4 form instruction. This is split. */ @@ -2833,8 +3199,13 @@ #define IH ERAT_T + 1 { 0x7, 21, NULL, NULL, PPC_OPERAND_OPTIONAL }, + /* The 2-bit SC or PL field in an X form instruction. */ +#define SC2 IH + 1 +#define PL SC2 + { 0x3, 16, insert_pl, extract_pl, PPC_OPERAND_OPTIONAL }, + /* The 8-bit IMM8 field in a XX1 form instruction. */ -#define IMM8 IH + 1 +#define IMM8 SC2 + 1 { 0xff, 11, NULL, NULL, PPC_OPERAND_SIGNOPT }, #define VX_OFF IMM8 + 1 @@ -2875,18 +3246,45 @@ /* Prefix insn, eight byte load/store form 8LS. */ #define P8LS (PREFIX_OP | PREFIX_FORM (0)) +/* Prefix insn, eight byte register to register form 8RR. */ +#define P8RR (PREFIX_OP | PREFIX_FORM (1)) + /* Prefix insn, modified load/store form MLS. */ #define PMLS (PREFIX_OP | PREFIX_FORM (2)) /* Prefix insn, modified register to register form MRR. */ #define PMRR (PREFIX_OP | PREFIX_FORM (3)) +/* Prefix insn, modified masked immediate register to register form MMIRR. */ +#define PMMIRR (PREFIX_OP | PREFIX_FORM (3) | (9ULL << 52)) + /* An 8-byte D form prefix instruction. */ #define P_D_MASK (((-1ULL << 50) & ~PCREL_MASK) | OP_MASK) /* The same as P_D_MASK, but with the RA and PCREL fields specified. */ #define P_DRAPCREL_MASK (P_D_MASK | PCREL_MASK | RA_MASK) +/* Mask for prefix X form instructions. */ +#define P_X_MASK (PREFIX_MASK | X_MASK) +#define P_XX1_MASK (PREFIX_MASK | XX1_MASK) + +/* Mask for prefix vector permute insns. */ +#define P_XX4_MASK (PREFIX_MASK | XX4_MASK) +#define P_UXX4_MASK (P_XX4_MASK & ~(7ULL << 32)) +#define P_U8XX4_MASK (P_XX4_MASK & ~(0xffULL << 32)) + +/* MMIRR:XX3-form 8-byte outer product instructions. */ +#define P_GER_MASK ((-1ULL << 40) | XX3_MASK | (3 << 21) | 1) +#define P_GER2_MASK (P_GER_MASK & ~(3ULL << 46)) +#define P_GER4_MASK (P_GER_MASK & ~(15ULL << 44)) +#define P_GER8_MASK (P_GER_MASK & ~(255ULL << 40)) +#define P_GER64_MASK (P_GER_MASK | (3ULL << 32)) + +/* Vector splat immediate op. */ +#define VSOP(op, xop) (OP (op) | (xop << 17)) +#define P_VS_MASK ((-1ULL << 48) | VSOP (0x3f, 0xf)) +#define P_VSI_MASK ((-1ULL << 48) | VSOP (0x3f, 0xe)) + /* The main opcode combined with a trap code in the TO field of a D form instruction. Used for extended mnemonics for the trap instructions. */ @@ -2967,7 +3365,7 @@ /* A BD15 form instruction for extended conditional branch mnemonics. */ #define EBD15(op, aa, bo, lk) \ - (((op) & 0x3f) << 26) \ + (((op) & 0x3fu) << 26) \ | (((aa) & 0xf) << 22) \ | (((bo) & 0x3) << 20) \ | ((lk) & 1) @@ -2976,7 +3374,7 @@ /* A BD15 form instruction for extended conditional branch mnemonics with BI. */ #define EBD15BI(op, aa, bo, bi, lk) \ - ((((op) & 0x3f) << 26) \ + ((((op) & 0x3fu) << 26) \ | (((aa) & 0xf) << 22) \ | (((bo) & 0x3) << 20) \ | (((bi) & 0x3) << 16) \ @@ -3042,6 +3440,10 @@ #define DQX(op, xop) (OP (op) | ((xop) & 0x7)) #define DQX_MASK DQX (0x3f, 7) +/* A DQ form VSX vector paired instruction. */ +#define DQXP(op, xop) (OP (op) | ((xop) & 0xf)) +#define DQXP_MASK DQXP (0x3f, 0xf) + /* A DS form instruction. */ #define DSO(op, xop) (OP (op) | ((xop) & 0x3)) #define DS_MASK DSO (0x3f, 3) @@ -3256,7 +3658,19 @@ #define VXPS_MASK (VX_MASK & ~(0x1 << 9)) /* A VX_MASK with the VA field fixed with a PS field. */ -#define VXVAPS_MASK ((VX_MASK | (0x1f << 16)) & ~(0x1 << 9)) +#define VXVAPS_MASK (VXVA_MASK & ~(0x1 << 9)) + +/* A VX_MASK with the VA field fixed with a MP field. */ +#define VXVAM_MASK (VXVA_MASK & ~(0x1 << 16)) + +/* A VX_MASK for instructions using a BF field. */ +#define VXBF_MASK (VX_MASK | (3 << 21)) + +/* A VX_MASK for instructions with an RC field. */ +#define VXRC_MASK (VX_MASK & ~(0x1f << 6)) + +/* A VX_MASK for instructions with a SH field. */ +#define VXSH_MASK (VX_MASK & ~(0x7 << 6)) /* A VA form instruction. */ #define VXA(op, xop) (OP (op) | (((uint64_t)(xop)) & 0x03f)) @@ -3340,6 +3754,10 @@ field. */ #define XWC_MASK (XRC (0x3f, 0x3ff, 1) | (7 << 23) | RA_MASK | RB_MASK) +/* An X form wait instruction with everything filled in except the WC + and PL fields. */ +#define XWCPL_MASK (XRC (0x3f, 0x3ff, 1) | (7 << 23) | (3 << 18) | RB_MASK) + /* The mask for an XX1 form instruction. */ #define XX1_MASK X (0x3f, 0x3ff) @@ -3405,9 +3823,12 @@ /* An X_MASK with the RT field fixed. */ #define XRT_MASK (X_MASK | RT_MASK) -/* An XRT_MASK mask with the L bits clear. */ +/* An XRT_MASK mask with the 2 L bits clear. */ #define XLRT_MASK (XRT_MASK & ~((uint64_t) 0x3 << 21)) +/* An XRT_MASK mask with the 3 L bits clear. */ +#define XL3RT_MASK (XRT_MASK & ~((uint64_t) 0x7 << 21)) + /* An X_MASK with the RA and RB fields fixed. */ #define XRARB_MASK (X_MASK | RA_MASK | RB_MASK) @@ -3446,11 +3867,21 @@ (X ((op), (xop)) \ | ((((uint64_t)(l)) & 1) << 21)) -/* An X form instruction with the L bits specified. */ +/* An X form instruction with the 2 L bits specified. */ #define XOPL2(op, xop, l) \ (X ((op), (xop)) \ | ((((uint64_t)(l)) & 3) << 21)) +/* An X form instruction with the 3 L bits specified. */ +#define XOPL3(op, xop, l) \ + (X ((op), (xop)) \ + | ((((uint64_t)(l)) & 7) << 21)) + +/* An X form instruction with the WC and PL bits specified. */ +#define XWCPL(op, xop, wc, pl) \ + (XOPL3 ((op), (xop), (wc)) \ + | ((((uint64_t)(pl)) & 3) << 16)) + /* An X form instruction with the L bit and RC bit specified. */ #define XRCL(op, xop, l, rc) \ (XRC ((op), (xop), (rc)) \ @@ -3499,6 +3930,16 @@ and E fields. */ #define XSYNCLE_MASK (0xff90ffff) +/* An X form sync instruction. */ +#define XSYNCLS(op, xop, l, s) \ + (X ((op), (xop)) \ + | ((((uint64_t)(l)) & 7) << 21) \ + | ((((uint64_t)(s)) & 3) << 16)) + +/* An X form sync instruction with everything filled in except the + L and SC fields. */ +#define XSYNCLS_MASK (0xff1cffff) + /* An X_MASK, but with the EH bit clear. */ #define XEH_MASK (X_MASK & ~((uint64_t )1)) @@ -3713,7 +4154,7 @@ #define POWER7 PPC_OPCODE_POWER7 #define POWER8 PPC_OPCODE_POWER8 #define POWER9 PPC_OPCODE_POWER9 -#define POWERXX PPC_OPCODE_POWERXX +#define POWER10 PPC_OPCODE_POWER10 #define CELL PPC_OPCODE_CELL #define PPC64 PPC_OPCODE_64 | PPC_OPCODE_64_BRIDGE #define NON32 (PPC_OPCODE_64 | PPC_OPCODE_POWER4 \ @@ -3735,6 +4176,7 @@ #define PPCVSX PPC_OPCODE_VSX #define PPCVSX2 PPC_OPCODE_POWER8 #define PPCVSX3 PPC_OPCODE_POWER9 +#define PPCVSX4 PPC_OPCODE_POWER10 #define POWER PPC_OPCODE_POWER #define POWER2 PPC_OPCODE_POWER | PPC_OPCODE_POWER2 #define PWR2COM PPC_OPCODE_POWER | PPC_OPCODE_POWER2 | PPC_OPCODE_COMMON @@ -3855,35 +4297,53 @@ {"vmul10cuq", VX (4, 1), VXVB_MASK, PPCVEC3, 0, {VD, VA}}, {"vmaxub", VX (4, 2), VX_MASK, PPCVEC, 0, {VD, VA, VB}}, {"vrlb", VX (4, 4), VX_MASK, PPCVEC, 0, {VD, VA, VB}}, +{"vrlq", VX (4, 5), VX_MASK, POWER10, 0, {VD, VA, VB}}, {"vcmpequb", VXR(4, 6,0), VXR_MASK, PPCVEC, 0, {VD, VA, VB}}, {"vcmpneb", VXR(4, 7,0), VXR_MASK, PPCVEC3, 0, {VD, VA, VB}}, {"vmuloub", VX (4, 8), VX_MASK, PPCVEC, 0, {VD, VA, VB}}, {"vaddfp", VX (4, 10), VX_MASK, PPCVEC, 0, {VD, VA, VB}}, +{"vdivuq", VX (4, 11), VX_MASK, POWER10, 0, {VD, VA, VB}}, {"psq_lx", XW (4, 6,0), XW_MASK, PPCPS, 0, {FRT,RA,RB,PSWM,PSQM}}, {"vmrghb", VX (4, 12), VX_MASK, PPCVEC, 0, {VD, VA, VB}}, +{"vstribl", VXVA(4,13,0), VXVA_MASK, POWER10, 0, {VD, VB}}, +{"vstribr", VXVA(4,13,1), VXVA_MASK, POWER10, 0, {VD, VB}}, +{"vstrihl", VXVA(4,13,2), VXVA_MASK, POWER10, 0, {VD, VB}}, +{"vstrihr", VXVA(4,13,3), VXVA_MASK, POWER10, 0, {VD, VB}}, {"psq_stx", XW (4, 7,0), XW_MASK, PPCPS, 0, {FRS,RA,RB,PSWM,PSQM}}, {"vpkuhum", VX (4, 14), VX_MASK, PPCVEC, 0, {VD, VA, VB}}, +{"vinsbvlx", VX (4, 15), VX_MASK, POWER10, 0, {VD, RA, VB}}, {"mulhhwu", XRC(4, 8,0), X_MASK, MULHW, 0, {RT, RA, RB}}, {"mulhhwu.", XRC(4, 8,1), X_MASK, MULHW, 0, {RT, RA, RB}}, +{"mtvsrbmi", DX (4,10), DX_MASK, POWER10, 0, {VD, DXD}}, {"ps_sum0", A (4, 10,0), A_MASK, PPCPS, 0, {FRT, FRA, FRC, FRB}}, {"ps_sum0.", A (4, 10,1), A_MASK, PPCPS, 0, {FRT, FRA, FRC, FRB}}, +{"vsldbi", VX (4, 22), VXSH_MASK, POWER10, 0, {VD, VA, VB, SH3}}, {"ps_sum1", A (4, 11,0), A_MASK, PPCPS, 0, {FRT, FRA, FRC, FRB}}, {"ps_sum1.", A (4, 11,1), A_MASK, PPCPS, 0, {FRT, FRA, FRC, FRB}}, +{"vextdubvlx", VX (4, 24), VXRC_MASK, POWER10, 0, {VD, VA, VB, RC}}, {"ps_muls0", A (4, 12,0), AFRB_MASK, PPCPS, 0, {FRT, FRA, FRC}}, {"machhwu", XO (4, 12,0,0), XO_MASK, MULHW, 0, {RT, RA, RB}}, +{"vextdubvrx", VX (4, 25), VXRC_MASK, POWER10, 0, {VD, VA, VB, RC}}, {"ps_muls0.", A (4, 12,1), AFRB_MASK, PPCPS, 0, {FRT, FRA, FRC}}, {"machhwu.", XO (4, 12,0,1), XO_MASK, MULHW, 0, {RT, RA, RB}}, +{"vextduhvlx", VX (4, 26), VXRC_MASK, POWER10, 0, {VD, VA, VB, RC}}, {"ps_muls1", A (4, 13,0), AFRB_MASK, PPCPS, 0, {FRT, FRA, FRC}}, +{"vextduhvrx", VX (4, 27), VXRC_MASK, POWER10, 0, {VD, VA, VB, RC}}, {"ps_muls1.", A (4, 13,1), AFRB_MASK, PPCPS, 0, {FRT, FRA, FRC}}, +{"vextduwvlx", VX (4, 28), VXRC_MASK, POWER10, 0, {VD, VA, VB, RC}}, {"ps_madds0", A (4, 14,0), A_MASK, PPCPS, 0, {FRT, FRA, FRC, FRB}}, +{"vextduwvrx", VX (4, 29), VXRC_MASK, POWER10, 0, {VD, VA, VB, RC}}, {"ps_madds0.", A (4, 14,1), A_MASK, PPCPS, 0, {FRT, FRA, FRC, FRB}}, +{"vextddvlx", VX (4, 30), VXRC_MASK, POWER10, 0, {VD, VA, VB, RC}}, {"ps_madds1", A (4, 15,0), A_MASK, PPCPS, 0, {FRT, FRA, FRC, FRB}}, +{"vextddvrx", VX (4, 31), VXRC_MASK, POWER10, 0, {VD, VA, VB, RC}}, {"ps_madds1.", A (4, 15,1), A_MASK, PPCPS, 0, {FRT, FRA, FRC, FRB}}, {"vmhaddshs", VXA(4, 32), VXA_MASK, PPCVEC, 0, {VD, VA, VB, VC}}, {"vmhraddshs", VXA(4, 33), VXA_MASK, PPCVEC, 0, {VD, VA, VB, VC}}, {"vmladduhm", VXA(4, 34), VXA_MASK, PPCVEC, 0, {VD, VA, VB, VC}}, {"vmsumudm", VXA(4, 35), VXA_MASK, PPCVEC3, 0, {VD, VA, VB, VC}}, {"ps_div", A (4, 18,0), AFRC_MASK, PPCPS, 0, {FRT, FRA, FRB}}, +{"vmsumcud", VXA(4, 23), VXA_MASK, POWER10, 0, {VD, VA, VB, VC}}, {"vmsumubm", VXA(4, 36), VXA_MASK, PPCVEC, 0, {VD, VA, VB, VC}}, {"ps_div.", A (4, 18,1), AFRC_MASK, PPCPS, 0, {FRT, FRA, FRB}}, {"vmsummbm", VXA(4, 37), VXA_MASK, PPCVEC, 0, {VD, VA, VB, VC}}, @@ -3930,6 +4390,7 @@ {"vmul10ecuq", VX (4, 65), VX_MASK, PPCVEC3, 0, {VD, VA, VB}}, {"vmaxuh", VX (4, 66), VX_MASK, PPCVEC, 0, {VD, VA, VB}}, {"vrlh", VX (4, 68), VX_MASK, PPCVEC, 0, {VD, VA, VB}}, +{"vrlqmi", VX (4, 69), VX_MASK, POWER10, 0, {VD, VA, VB}}, {"vcmpequh", VXR(4, 70,0), VXR_MASK, PPCVEC, 0, {VD, VA, VB}}, {"vcmpneh", VXR(4, 71,0), VXR_MASK, PPCVEC3, 0, {VD, VA, VB}}, {"vmulouh", VX (4, 72), VX_MASK, PPCVEC, 0, {VD, VA, VB}}, @@ -3938,6 +4399,7 @@ {"vmrghh", VX (4, 76), VX_MASK, PPCVEC, 0, {VD, VA, VB}}, {"psq_stux", XW (4, 39,0), XW_MASK, PPCPS, 0, {FRS,RA,RB,PSWM,PSQM}}, {"vpkuwum", VX (4, 78), VX_MASK, PPCVEC, 0, {VD, VA, VB}}, +{"vinshvlx", VX (4, 79), VX_MASK, POWER10, 0, {VD, RA, VB}}, {"ps_neg", XRC(4, 40,0), XRA_MASK, PPCPS, 0, {FRT, FRB}}, {"mulhhw", XRC(4, 40,0), X_MASK, MULHW, 0, {RT, RA, RB}}, {"ps_neg.", XRC(4, 40,1), XRA_MASK, PPCPS, 0, {FRT, FRB}}, @@ -3955,8 +4417,10 @@ {"vcmpnew", VXR(4, 135,0), VXR_MASK, PPCVEC3, 0, {VD, VA, VB}}, {"vmulouw", VX (4, 136), VX_MASK, PPCVEC2, 0, {VD, VA, VB}}, {"vmuluwm", VX (4, 137), VX_MASK, PPCVEC2, 0, {VD, VA, VB}}, +{"vdivuw", VX (4, 139), VX_MASK, POWER10, 0, {VD, VA, VB}}, {"vmrghw", VX (4, 140), VX_MASK, PPCVEC, 0, {VD, VA, VB}}, {"vpkuhus", VX (4, 142), VX_MASK, PPCVEC, 0, {VD, VA, VB}}, +{"vinswvlx", VX (4, 143), VX_MASK, POWER10, 0, {VD, RA, VB}}, {"ps_mr", XRC(4, 72,0), XRA_MASK, PPCPS, 0, {FRT, FRB}}, {"ps_mr.", XRC(4, 72,1), XRA_MASK, PPCPS, 0, {FRT, FRB}}, {"machhwsu", XO (4, 76,0,0), XO_MASK, MULHW, 0, {RT, RA, RB}}, @@ -3968,19 +4432,26 @@ {"vrldmi", VX (4, 197), VX_MASK, PPCVEC3, 0, {VD, VA, VB}}, {"vcmpeqfp", VXR(4, 198,0), VXR_MASK, PPCVEC, 0, {VD, VA, VB}}, {"vcmpequd", VXR(4, 199,0), VXR_MASK, PPCVEC2, 0, {VD, VA, VB}}, +{"vmuloud", VX (4, 200), VX_MASK, POWER10, 0, {VD, VA, VB}}, +{"vdivud", VX (4, 203), VX_MASK, POWER10, 0, {VD, VA, VB}}, {"vpkuwus", VX (4, 206), VX_MASK, PPCVEC, 0, {VD, VA, VB}}, +{"vinsw", VX (4, 207), VXUIMM4_MASK, POWER10, 0, {VD, RB, UIMM4}}, {"machhws", XO (4, 108,0,0), XO_MASK, MULHW, 0, {RT, RA, RB}}, {"machhws.", XO (4, 108,0,1), XO_MASK, MULHW, 0, {RT, RA, RB}}, {"nmachhws", XO (4, 110,0,0), XO_MASK, MULHW, 0, {RT, RA, RB}}, {"nmachhws.", XO (4, 110,0,1), XO_MASK, MULHW, 0, {RT, RA, RB}}, {"vadduqm", VX (4, 256), VX_MASK, PPCVEC2, 0, {VD, VA, VB}}, +{"vcmpuq", VX (4, 257), VXBF_MASK, POWER10, 0, {BF, VA, VB}}, {"vmaxsb", VX (4, 258), VX_MASK, PPCVEC, 0, {VD, VA, VB}}, {"vslb", VX (4, 260), VX_MASK, PPCVEC, 0, {VD, VA, VB}}, +{"vslq", VX (4, 261), VX_MASK, POWER10, 0, {VD, VA, VB}}, {"vcmpnezb", VXR(4, 263,0), VXR_MASK, PPCVEC3, 0, {VD, VA, VB}}, {"vmulosb", VX (4, 264), VX_MASK, PPCVEC, 0, {VD, VA, VB}}, {"vrefp", VX (4, 266), VXVA_MASK, PPCVEC, 0, {VD, VB}}, +{"vdivsq", VX (4, 267), VX_MASK, POWER10, 0, {VD, VA, VB}}, {"vmrglb", VX (4, 268), VX_MASK, PPCVEC, 0, {VD, VA, VB}}, {"vpkshus", VX (4, 270), VX_MASK, PPCVEC, 0, {VD, VA, VB}}, +{"vinsbvrx", VX (4, 271), VX_MASK, POWER10, 0, {VD, RA, VB}}, {"ps_nabs", XRC(4, 136,0), XRA_MASK, PPCPS, 0, {FRT, FRB}}, {"mulchwu", XRC(4, 136,0), X_MASK, MULHW, 0, {RT, RA, RB}}, {"ps_nabs.", XRC(4, 136,1), XRA_MASK, PPCPS, 0, {FRT, FRB}}, @@ -3988,13 +4459,16 @@ {"macchwu", XO (4, 140,0,0), XO_MASK, MULHW, 0, {RT, RA, RB}}, {"macchwu.", XO (4, 140,0,1), XO_MASK, MULHW, 0, {RT, RA, RB}}, {"vaddcuq", VX (4, 320), VX_MASK, PPCVEC2, 0, {VD, VA, VB}}, +{"vcmpsq", VX (4, 321), VXBF_MASK, POWER10, 0, {BF, VA, VB}}, {"vmaxsh", VX (4, 322), VX_MASK, PPCVEC, 0, {VD, VA, VB}}, {"vslh", VX (4, 324), VX_MASK, PPCVEC, 0, {VD, VA, VB}}, +{"vrlqnm", VX (4, 325), VX_MASK, POWER10, 0, {VD, VA, VB}}, {"vcmpnezh", VXR(4, 327,0), VXR_MASK, PPCVEC3, 0, {VD, VA, VB}}, {"vmulosh", VX (4, 328), VX_MASK, PPCVEC, 0, {VD, VA, VB}}, {"vrsqrtefp", VX (4, 330), VXVA_MASK, PPCVEC, 0, {VD, VB}}, {"vmrglh", VX (4, 332), VX_MASK, PPCVEC, 0, {VD, VA, VB}}, {"vpkswus", VX (4, 334), VX_MASK, PPCVEC, 0, {VD, VA, VB}}, +{"vinshvrx", VX (4, 335), VX_MASK, POWER10, 0, {VD, RA, VB}}, {"mulchw", XRC(4, 168,0), X_MASK, MULHW, 0, {RT, RA, RB}}, {"mulchw.", XRC(4, 168,1), X_MASK, MULHW, 0, {RT, RA, RB}}, {"macchw", XO (4, 172,0,0), XO_MASK, MULHW, 0, {RT, RA, RB}}, @@ -4008,16 +4482,25 @@ {"vcmpnezw", VXR(4, 391,0), VXR_MASK, PPCVEC3, 0, {VD, VA, VB}}, {"vmulosw", VX (4, 392), VX_MASK, PPCVEC2, 0, {VD, VA, VB}}, {"vexptefp", VX (4, 394), VXVA_MASK, PPCVEC, 0, {VD, VB}}, +{"vdivsw", VX (4, 395), VX_MASK, POWER10, 0, {VD, VA, VB}}, {"vmrglw", VX (4, 396), VX_MASK, PPCVEC, 0, {VD, VA, VB}}, +{"vclrlb", VX (4, 397), VX_MASK, POWER10, 0, {VD, VA, RB}}, {"vpkshss", VX (4, 398), VX_MASK, PPCVEC, 0, {VD, VA, VB}}, +{"vinswvrx", VX (4, 399), VX_MASK, POWER10, 0, {VD, RA, VB}}, {"macchwsu", XO (4, 204,0,0), XO_MASK, MULHW, 0, {RT, RA, RB}}, {"macchwsu.", XO (4, 204,0,1), XO_MASK, MULHW, 0, {RT, RA, RB}}, {"vmaxsd", VX (4, 450), VX_MASK, PPCVEC2, 0, {VD, VA, VB}}, {"vsl", VX (4, 452), VX_MASK, PPCVEC, 0, {VD, VA, VB}}, {"vrldnm", VX (4, 453), VX_MASK, PPCVEC3, 0, {VD, VA, VB}}, {"vcmpgefp", VXR(4, 454,0), VXR_MASK, PPCVEC, 0, {VD, VA, VB}}, +{"vcmpequq", VXR(4, 455,0), VXR_MASK, POWER10, 0, {VD, VA, VB}}, +{"vmulosd", VX (4, 456), VX_MASK, POWER10, 0, {VD, VA, VB}}, +{"vmulld", VX (4, 457), VX_MASK, POWER10, 0, {VD, VA, VB}}, {"vlogefp", VX (4, 458), VXVA_MASK, PPCVEC, 0, {VD, VB}}, +{"vdivsd", VX (4, 459), VX_MASK, POWER10, 0, {VD, VA, VB}}, +{"vclrrb", VX (4, 461), VX_MASK, POWER10, 0, {VD, VA, RB}}, {"vpkswss", VX (4, 462), VX_MASK, PPCVEC, 0, {VD, VA, VB}}, +{"vinsd", VX (4, 463), VXUIMM4_MASK, POWER10, 0, {VD, RB, UIMM4}}, {"macchws", XO (4, 236,0,0), XO_MASK, MULHW, 0, {RT, RA, RB}}, {"macchws.", XO (4, 236,0,1), XO_MASK, MULHW, 0, {RT, RA, RB}}, {"nmacchws", XO (4, 238,0,0), XO_MASK, MULHW, 0, {RT, RA, RB}}, @@ -4030,6 +4513,7 @@ {"evsubfw", VX (4, 516), VX_MASK, PPCSPE, 0, {RS, RA, RB}}, {"evsubw", VX (4, 516), VX_MASK, PPCSPE, 0, {RS, RB, RA}}, {"vsrb", VX (4, 516), VX_MASK, PPCVEC, 0, {VD, VA, VB}}, +{"vsrq", VX (4, 517), VX_MASK, POWER10, 0, {VD, VA, VB}}, {"evsubifw", VX (4, 518), VX_MASK, PPCSPE, 0, {RS, UIMM, RB}}, {"evsubiw", VX (4, 518), VX_MASK, PPCSPE, 0, {RS, RB, UIMM}}, {"vcmpgtub", VXR(4, 518,0), VXR_MASK, PPCVEC, 0, {VD, VA, VB}}, @@ -4038,6 +4522,7 @@ {"evneg", VX (4, 521), VX_MASK, PPCSPE, 0, {RS, RA}}, {"evextsb", VX (4, 522), VX_MASK, PPCSPE, 0, {RS, RA}}, {"vrfin", VX (4, 522), VXVA_MASK, PPCVEC, 0, {VD, VB}}, +{"vdiveuq", VX (4, 523), VX_MASK, POWER10, 0, {VD, VA, VB}}, {"evextsh", VX (4, 523), VX_MASK, PPCSPE, 0, {RS, RA}}, {"evrndw", VX (4, 524), VX_MASK, PPCSPE, 0, {RS, RA}}, {"vspltb", VX (4, 524), VXUIMM4_MASK, PPCVEC, 0, {VD, VB, UIMM4}}, @@ -4045,11 +4530,13 @@ {"evcntlzw", VX (4, 525), VX_MASK, PPCSPE, 0, {RS, RA}}, {"evcntlsw", VX (4, 526), VX_MASK, PPCSPE, 0, {RS, RA}}, {"vupkhsb", VX (4, 526), VXVA_MASK, PPCVEC, 0, {VD, VB}}, +{"vinsblx", VX (4, 527), VX_MASK, POWER10, 0, {VD, RA, RB}}, {"brinc", VX (4, 527), VX_MASK, PPCSPE, 0, {RS, RA, RB}}, {"ps_abs", XRC(4, 264,0), XRA_MASK, PPCPS, 0, {FRT, FRB}}, {"ps_abs.", XRC(4, 264,1), XRA_MASK, PPCPS, 0, {FRT, FRB}}, {"evand", VX (4, 529), VX_MASK, PPCSPE, 0, {RS, RA, RB}}, {"evandc", VX (4, 530), VX_MASK, PPCSPE, 0, {RS, RA, RB}}, +{"vsrdbi", VX (4, 534), VXSH_MASK, POWER10, 0, {VD, VA, VB, SH3}}, {"evxor", VX (4, 534), VX_MASK, PPCSPE, 0, {RS, RA, RB}}, {"evmr", VX (4, 535), VX_MASK, PPCSPE, 0, {RS, RAB}}, {"evor", VX (4, 535), VX_MASK, PPCSPE, 0, {RS, RA, RB}}, @@ -4089,6 +4576,7 @@ {"vsplth", VX (4, 588), VXUIMM3_MASK, PPCVEC, 0, {VD, VB, UIMM3}}, {"vextractuh", VX (4, 589), VXUIMM4_MASK, PPCVEC3, 0, {VD, VB, UIMM4}}, {"vupkhsh", VX (4, 590), VXVA_MASK, PPCVEC, 0, {VD, VB}}, +{"vinshlx", VX (4, 591), VX_MASK, POWER10, 0, {VD, RA, RB}}, {"nget", APU(4, 300,0), APU_RA_MASK, PPC405, 0, {RT, FSL}}, {"evsel", EVSEL(4,79), EVSEL_MASK, PPCSPE, 0, {RS, RA, RB, CRFS}}, {"ncget", APU(4, 316,0), APU_RA_MASK, PPC405, 0, {RT, FSL}}, @@ -4103,12 +4591,15 @@ {"evfsnabs", VX (4, 645), VX_MASK, PPCSPE, 0, {RS, RA}}, {"evfsneg", VX (4, 646), VX_MASK, PPCSPE, 0, {RS, RA}}, {"vcmpgtuw", VXR(4, 646,0), VXR_MASK, PPCVEC, 0, {VD, VA, VB}}, +{"vcmpgtuq", VXR(4, 647,0), VXR_MASK, POWER10, 0, {VD, VA, VB}}, {"evfssqrt", VX_RB_CONST(4, 647, 0), VX_RB_CONST_MASK, PPCEFS2, 0, {RD, RA}}, {"vmuleuw", VX (4, 648), VX_MASK, PPCVEC2, 0, {VD, VA, VB}}, {"evfsmul", VX (4, 648), VX_MASK, PPCSPE, 0, {RS, RA, RB}}, +{"vmulhuw", VX (4, 649), VX_MASK, POWER10, 0, {VD, VA, VB}}, {"evfsdiv", VX (4, 649), VX_MASK, PPCSPE, 0, {RS, RA, RB}}, {"evfsnmadd", VX (4, 650), VX_MASK, PPCSPE, 0, {RS, RA, RB}}, {"vrfip", VX (4, 650), VXVA_MASK, PPCVEC, 0, {VD, VB}}, +{"vdiveuw", VX (4, 651), VX_MASK, POWER10, 0, {VD, VA, VB}}, {"evfsnmsub", VX (4, 651), VX_MASK, PPCSPE, 0, {RS, RA, RB}}, {"evfscmpgt", VX (4, 652), VX_MASK, PPCSPE, 0, {CRFD, RA, RB}}, {"vspltw", VX (4, 652), VXUIMM2_MASK, PPCVEC, 0, {VD, VB, UIMM2}}, @@ -4116,6 +4607,7 @@ {"evfscmplt", VX (4, 653), VX_MASK, PPCSPE, 0, {CRFD, RA, RB}}, {"evfscmpeq", VX (4, 654), VX_MASK, PPCSPE, 0, {CRFD, RA, RB}}, {"vupklsb", VX (4, 654), VXVA_MASK, PPCVEC, 0, {VD, VB}}, +{"vinswlx", VX (4, 655), VX_MASK, POWER10, 0, {VD, RA, RB}}, {"evfscfui", VX (4, 656), VX_MASK, PPCSPE, 0, {RS, RB}}, {"evfscfh", VX_RA_CONST(4, 657, 4), VX_RA_CONST_MASK, PPCEFS2, 0, {RD, RB}}, {"evfscfsi", VX (4, 657), VX_MASK, PPCSPE, 0, {RS, RB}}, @@ -4164,16 +4656,20 @@ {"vcmpgtfp", VXR(4, 710,0), VXR_MASK, PPCVEC, 0, {VD, VA, VB}}, {"efssqrt", VX_RB_CONST(4, 711, 0), VX_RB_CONST_MASK,PPCEFS2, 0, {RD, RA}}, {"vcmpgtud", VXR(4, 711,0), VXR_MASK, PPCVEC2, 0, {VD, VA, VB}}, +{"vmuleud", VX (4, 712), VX_MASK, POWER10, 0, {VD, VA, VB}}, {"efsmul", VX (4, 712), VX_MASK, PPCEFS, 0, {RS, RA, RB}}, +{"vmulhud", VX (4, 713), VX_MASK, POWER10, 0, {VD, VA, VB}}, {"efsdiv", VX (4, 713), VX_MASK, PPCEFS, 0, {RS, RA, RB}}, {"efsnmadd", VX (4, 714), VX_MASK, PPCEFS2, 0, {RS, RA, RB}}, {"vrfim", VX (4, 714), VXVA_MASK, PPCVEC, 0, {VD, VB}}, +{"vdiveud", VX (4, 715), VX_MASK, POWER10, 0, {VD, VA, VB}}, {"efsnmsub", VX (4, 715), VX_MASK, PPCEFS2, 0, {RS, RA, RB}}, {"efscmpgt", VX (4, 716), VX_MASK, PPCEFS, 0, {CRFD, RA, RB}}, {"vextractd", VX (4, 717), VXUIMM4_MASK, PPCVEC3, 0, {VD, VB, UIMM4}}, {"efscmplt", VX (4, 717), VX_MASK, PPCEFS, 0, {CRFD, RA, RB}}, {"efscmpeq", VX (4, 718), VX_MASK, PPCEFS, 0, {CRFD, RA, RB}}, {"vupklsh", VX (4, 718), VXVA_MASK, PPCVEC, 0, {VD, VB}}, +{"vinsdlx", VX (4, 719), VX_MASK, POWER10, 0, {VD, RA, RB}}, {"efscfd", VX (4, 719), VX_MASK, PPCEFS, 0, {RS, RB}}, {"efscfui", VX (4, 720), VX_MASK, PPCEFS, 0, {RS, RB}}, {"efscfh", VX_RA_CONST(4, 721, 4), VX_RA_CONST_MASK, PPCEFS2, 0, {RD, RB}}, @@ -4239,6 +4735,7 @@ {"evldw", VX (4, 771), VX_MASK, PPCSPE, 0, {RS, EVUIMM_8, RA}}, {"evldhx", VX (4, 772), VX_MASK, PPCSPE, 0, {RS, RA, RB}}, {"vsrab", VX (4, 772), VX_MASK, PPCVEC, 0, {VD, VA, VB}}, +{"vsraq", VX (4, 773), VX_MASK, POWER10, 0, {VD, VA, VB}}, {"evldh", VX (4, 773), VX_MASK, PPCSPE, 0, {RS, EVUIMM_8, RA}}, {"vcmpgtsb", VXR(4, 774,0), VXR_MASK, PPCVEC, 0, {VD, VA, VB}}, {"evlhhesplatx",VX (4, 776), VX_MASK, PPCSPE, 0, {RS, RA, RB}}, @@ -4246,12 +4743,14 @@ {"evlhhesplat", VX (4, 777), VX_MASK, PPCSPE, 0, {RS, EVUIMM_2, RA}}, {"vcfux", VX (4, 778), VX_MASK, PPCVEC, 0, {VD, VB, UIMM}}, {"vcuxwfp", VX (4, 778), VX_MASK, PPCVEC, 0, {VD, VB, UIMM}}, +{"vdivesq", VX (4, 779), VX_MASK, POWER10, 0, {VD, VA, VB}}, {"evlhhousplatx",VX(4, 780), VX_MASK, PPCSPE, 0, {RS, RA, RB}}, {"vspltisb", VX (4, 780), VXVB_MASK, PPCVEC, 0, {VD, SIMM}}, {"vinsertb", VX (4, 781), VXUIMM4_MASK, PPCVEC3, 0, {VD, VB, UIMM4}}, {"evlhhousplat",VX (4, 781), VX_MASK, PPCSPE, 0, {RS, EVUIMM_2, RA}}, {"evlhhossplatx",VX(4, 782), VX_MASK, PPCSPE, 0, {RS, RA, RB}}, {"vpkpx", VX (4, 782), VX_MASK, PPCVEC, 0, {VD, VA, VB}}, +{"vinsbrx", VX (4, 783), VX_MASK, POWER10, 0, {VD, RA, RB}}, {"evlhhossplat",VX (4, 783), VX_MASK, PPCSPE, 0, {RS, EVUIMM_2, RA}}, {"mullhwu", XRC(4, 392,0), X_MASK, MULHW, 0, {RT, RA, RB}}, {"evlwhex", VX (4, 784), VX_MASK, PPCSPE, 0, {RS, RA, RB}}, @@ -4292,6 +4791,7 @@ {"vspltish", VX (4, 844), VXVB_MASK, PPCVEC, 0, {VD, SIMM}}, {"vinserth", VX (4, 845), VXUIMM4_MASK, PPCVEC3, 0, {VD, VB, UIMM4}}, {"vupkhpx", VX (4, 846), VXVA_MASK, PPCVEC, 0, {VD, VB}}, +{"vinshrx", VX (4, 847), VX_MASK, POWER10, 0, {VD, RA, RB}}, {"mullhw", XRC(4, 424,0), X_MASK, MULHW, 0, {RT, RA, RB}}, {"mullhw.", XRC(4, 424,1), X_MASK, MULHW, 0, {RT, RA, RB}}, {"maclhw", XO (4, 428,0,0),XO_MASK, MULHW, 0, {RT, RA, RB}}, @@ -4302,21 +4802,29 @@ {"vminsw", VX (4, 898), VX_MASK, PPCVEC, 0, {VD, VA, VB}}, {"vsraw", VX (4, 900), VX_MASK, PPCVEC, 0, {VD, VA, VB}}, {"vcmpgtsw", VXR(4, 902,0), VXR_MASK, PPCVEC, 0, {VD, VA, VB}}, +{"vcmpgtsq", VXR(4, 903,0), VXR_MASK, POWER10, 0, {VD, VA, VB}}, {"vmulesw", VX (4, 904), VX_MASK, PPCVEC2, 0, {VD, VA, VB}}, +{"vmulhsw", VX (4, 905), VX_MASK, POWER10, 0, {VD, VA, VB}}, {"vctuxs", VX (4, 906), VX_MASK, PPCVEC, 0, {VD, VB, UIMM}}, {"vcfpuxws", VX (4, 906), VX_MASK, PPCVEC, 0, {VD, VB, UIMM}}, +{"vdivesw", VX (4, 907), VX_MASK, POWER10, 0, {VD, VA, VB}}, {"vspltisw", VX (4, 908), VXVB_MASK, PPCVEC, 0, {VD, SIMM}}, {"vinsertw", VX (4, 909), VXUIMM4_MASK, PPCVEC3, 0, {VD, VB, UIMM4}}, +{"vinswrx", VX (4, 911), VX_MASK, POWER10, 0, {VD, RA, RB}}, {"maclhwsu", XO (4, 460,0,0), XO_MASK, MULHW, 0, {RT, RA, RB}}, {"maclhwsu.", XO (4, 460,0,1), XO_MASK, MULHW, 0, {RT, RA, RB}}, {"vminsd", VX (4, 962), VX_MASK, PPCVEC2, 0, {VD, VA, VB}}, {"vsrad", VX (4, 964), VX_MASK, PPCVEC2, 0, {VD, VA, VB}}, {"vcmpbfp", VXR(4, 966,0), VXR_MASK, PPCVEC, 0, {VD, VA, VB}}, {"vcmpgtsd", VXR(4, 967,0), VXR_MASK, PPCVEC2, 0, {VD, VA, VB}}, +{"vmulesd", VX (4, 968), VX_MASK, POWER10, 0, {VD, VA, VB}}, +{"vmulhsd", VX (4, 969), VX_MASK, POWER10, 0, {VD, VA, VB}}, {"vctsxs", VX (4, 970), VX_MASK, PPCVEC, 0, {VD, VB, UIMM}}, {"vcfpsxws", VX (4, 970), VX_MASK, PPCVEC, 0, {VD, VB, UIMM}}, +{"vdivesd", VX (4, 971), VX_MASK, POWER10, 0, {VD, VA, VB}}, {"vinsertd", VX (4, 973), VXUIMM4_MASK, PPCVEC3, 0, {VD, VB, UIMM4}}, {"vupklpx", VX (4, 974), VXVA_MASK, PPCVEC, 0, {VD, VB}}, +{"vinsdrx", VX (4, 975), VX_MASK, POWER10, 0, {VD, RA, RB}}, {"maclhws", XO (4, 492,0,0), XO_MASK, MULHW, 0, {RT, RA, RB}}, {"maclhws.", XO (4, 492,0,1), XO_MASK, MULHW, 0, {RT, RA, RB}}, {"nmaclhws", XO (4, 494,0,0), XO_MASK, MULHW, 0, {RT, RA, RB}}, @@ -4339,6 +4847,10 @@ {"evmhesmf", VX (4,1035), VX_MASK, PPCSPE, 0, {RS, RA, RB}}, {"evmhoumi", VX (4,1036), VX_MASK, PPCSPE, 0, {RS, RA, RB}}, {"vslo", VX (4,1036), VX_MASK, PPCVEC, 0, {VD, VA, VB}}, +{"vstribl.", VXVA(4,1037,0), VXVA_MASK, POWER10, 0, {VD, VB}}, +{"vstribr.", VXVA(4,1037,1), VXVA_MASK, POWER10, 0, {VD, VB}}, +{"vstrihl.", VXVA(4,1037,2), VXVA_MASK, POWER10, 0, {VD, VB}}, +{"vstrihr.", VXVA(4,1037,3), VXVA_MASK, POWER10, 0, {VD, VB}}, {"evmhosmi", VX (4,1037), VX_MASK, PPCSPE, 0, {RS, RA, RB}}, {"evmhosmf", VX (4,1039), VX_MASK, PPCSPE, 0, {RS, RA, RB}}, {"machhwuo", XO (4, 12,1,0), XO_MASK, MULHW, 0, {RT, RA, RB}}, @@ -4428,6 +4940,7 @@ {"evaddsmiaaw", VX (4,1225), VX_MASK, PPCSPE, 0, {RS, RA}}, {"evsubfumiaaw",VX (4,1226), VX_MASK, PPCSPE, 0, {RS, RA}}, {"evsubfsmiaaw",VX (4,1227), VX_MASK, PPCSPE, 0, {RS, RA}}, +{"vgnb", VX (4,1228), VX_MASK, POWER10, 0, {RT, VB, UIMM3}}, {"vpkudus", VX (4,1230), VX_MASK, PPCVEC2, 0, {VD, VA, VB}}, {"machhwso", XO (4, 108,1,0), XO_MASK, MULHW, 0, {RT, RA, RB}}, {"machhwso.", XO (4, 108,1,1), XO_MASK, MULHW, 0, {RT, RA, RB}}, @@ -4486,6 +4999,7 @@ {"evmwlsmfaaw", VX (4,1355), VX_MASK, PPCSPE, 0, {RD, RA, RB}}, {"evmwhumiaa", VX (4,1356), VX_MASK, PPCSPE, 0, {RD, RA, RB}}, {"vbpermq", VX (4,1356), VX_MASK, PPCVEC2, 0, {VD, VA, VB}}, +{"vcfuged", VX (4,1357), VX_MASK, POWER10, 0, {VD, VA, VB}}, {"evmwhsmiaa", VX (4,1357), VX_MASK, PPCSPE, 0, {RD, RA, RB}}, {"vpksdus", VX (4,1358), VX_MASK, PPCVEC2, 0, {VD, VA, VB}}, {"evmwhsmfaa", VX (4,1359), VX_MASK, PPCSPE, 0, {RD, RA, RB}}, @@ -4524,6 +5038,7 @@ {"evmhesmianw", VX (4,1417), VX_MASK, PPCSPE, 0, {RS, RA, RB}}, {"evmhesmfanw", VX (4,1419), VX_MASK, PPCSPE, 0, {RS, RA, RB}}, {"evmhoumianw", VX (4,1420), VX_MASK, PPCSPE, 0, {RS, RA, RB}}, +{"vpextd", VX (4,1421), VX_MASK, POWER10, 0, {VD, VA, VB}}, {"evmhosmianw", VX (4,1421), VX_MASK, PPCSPE, 0, {RS, RA, RB}}, {"evmhosmfanw", VX (4,1423), VX_MASK, PPCSPE, 0, {RS, RA, RB}}, {"macchwsuo", XO (4, 204,1,0), XO_MASK, MULHW, 0, {RT, RA, RB}}, @@ -4544,6 +5059,7 @@ {"vcmpgefp.", VXR(4, 454,1), VXR_MASK, PPCVEC, 0, {VD, VA, VB}}, {"udi7fcm.", APU(4, 739,0), APU_MASK, PPC405|PPC440, 0, {URT, URA, URB}}, {"udi7fcm", APU(4, 739,1), APU_MASK, PPC405|PPC440, 0, {URT, URA, URB}}, +{"vcmpequq.", VXR(4, 455,1), VXR_MASK, POWER10, 0, {VD, VA, VB}}, {"evmwhssfan", VX (4,1479), VX_MASK, PPCSPE, 0, {RD, RA, RB}}, {"vsbox", VX (4,1480), VXVB_MASK, PPCVEC2, 0, {VD, VA}}, {"evmwlumianw", VX (4,1480), VX_MASK, PPCSPE, 0, {RS, RA, RB}}, @@ -4551,6 +5067,7 @@ {"evmwlsmfanw", VX (4,1483), VX_MASK, PPCSPE, 0, {RD, RA, RB}}, {"evmwhumian", VX (4,1484), VX_MASK, PPCSPE, 0, {RD, RA, RB}}, {"vbpermd", VX (4,1484), VX_MASK, PPCVEC3, 0, {VD, VA, VB}}, +{"vpdepd", VX (4,1485), VX_MASK, POWER10, 0, {VD, VA, VB}}, {"evmwhsmian", VX (4,1485), VX_MASK, PPCSPE, 0, {RD, RA, RB}}, {"vpksdss", VX (4,1486), VX_MASK, PPCVEC2, 0, {VD, VA, VB}}, {"evmwhsmfan", VX (4,1487), VX_MASK, PPCSPE, 0, {RD, RA, RB}}, @@ -4579,6 +5096,7 @@ {"vextsb2d", VXVA(4,1538,24), VXVA_MASK, PPCVEC3, 0, {VD, VB}}, {"vextsh2d", VXVA(4,1538,25), VXVA_MASK, PPCVEC3, 0, {VD, VB}}, {"vextsw2d", VXVA(4,1538,26), VXVA_MASK, PPCVEC3, 0, {VD, VB}}, +{"vextsd2q", VXVA(4,1538,27), VXVA_MASK, POWER10, 0, {VD, VB}}, {"vctzb", VXVA(4,1538,28), VXVA_MASK, PPCVEC3, 0, {VD, VB}}, {"vctzh", VXVA(4,1538,29), VXVA_MASK, PPCVEC3, 0, {VD, VB}}, {"vctzw", VXVA(4,1538,30), VXVA_MASK, PPCVEC3, 0, {VD, VB}}, @@ -4588,8 +5106,30 @@ {"udi8fcm.", APU(4, 771,0), APU_MASK, PPC440, 0, {URT, URA, URB}}, {"udi8fcm", APU(4, 771,1), APU_MASK, PPC440, 0, {URT, URA, URB}}, {"vsum4ubs", VX (4,1544), VX_MASK, PPCVEC, 0, {VD, VA, VB}}, +{"vmoduq", VX (4,1547), VX_MASK, POWER10, 0, {VD, VA, VB}}, {"vextublx", VX (4,1549), VX_MASK, PPCVEC3, 0, {RT, RA, VB}}, {"vsubuhs", VX (4,1600), VX_MASK, PPCVEC, 0, {VD, VA, VB}}, + +{"vexpandbm", VXVA(4,1602,0), VXVA_MASK, POWER10, 0, {VD, VB}}, +{"vexpandhm", VXVA(4,1602,1), VXVA_MASK, POWER10, 0, {VD, VB}}, +{"vexpandwm", VXVA(4,1602,2), VXVA_MASK, POWER10, 0, {VD, VB}}, +{"vexpanddm", VXVA(4,1602,3), VXVA_MASK, POWER10, 0, {VD, VB}}, +{"vexpandqm", VXVA(4,1602,4), VXVA_MASK, POWER10, 0, {VD, VB}}, +{"vextractbm", VXVA(4,1602,8), VXVA_MASK, POWER10, 0, {RT, VB}}, +{"vextracthm", VXVA(4,1602,9), VXVA_MASK, POWER10, 0, {RT, VB}}, +{"vextractwm", VXVA(4,1602,10), VXVA_MASK, POWER10, 0, {RT, VB}}, +{"vextractdm", VXVA(4,1602,11), VXVA_MASK, POWER10, 0, {RT, VB}}, +{"vextractqm", VXVA(4,1602,12), VXVA_MASK, POWER10, 0, {RT, VB}}, +{"mtvsrbm", VXVA(4,1602,16), VXVA_MASK, POWER10, 0, {VD, RB}}, +{"mtvsrhm", VXVA(4,1602,17), VXVA_MASK, POWER10, 0, {VD, RB}}, +{"mtvsrwm", VXVA(4,1602,18), VXVA_MASK, POWER10, 0, {VD, RB}}, +{"mtvsrdm", VXVA(4,1602,19), VXVA_MASK, POWER10, 0, {VD, RB}}, +{"mtvsrqm", VXVA(4,1602,20), VXVA_MASK, POWER10, 0, {VD, RB}}, +{"vcntmbb", VXVA(4,1602,24), VXVAM_MASK, POWER10, 0, {RT, VB, MP}}, +{"vcntmbh", VXVA(4,1602,26), VXVAM_MASK, POWER10, 0, {RT, VB, MP}}, +{"vcntmbw", VXVA(4,1602,28), VXVAM_MASK, POWER10, 0, {RT, VB, MP}}, +{"vcntmbd", VXVA(4,1602,30), VXVAM_MASK, POWER10, 0, {RT, VB, MP}}, + {"mtvscr", VX (4,1604), VXVDVA_MASK, PPCVEC, 0, {VB}}, {"vcmpgtuh.", VXR(4, 582,1), VXR_MASK, PPCVEC, 0, {VD, VA, VB}}, {"vsum4shs", VX (4,1608), VX_MASK, PPCVEC, 0, {VD, VA, VB}}, @@ -4602,8 +5142,10 @@ {"veqv", VX (4,1668), VX_MASK, PPCVEC2, 0, {VD, VA, VB}}, {"vcmpgtuw.", VXR(4, 646,1), VXR_MASK, PPCVEC, 0, {VD, VA, VB}}, {"udi10fcm.", APU(4, 835,0), APU_MASK, PPC440, 0, {URT, URA, URB}}, +{"vcmpgtuq.", VXR(4, 647,1), VXR_MASK, POWER10, 0, {VD, VA, VB}}, {"udi10fcm", APU(4, 835,1), APU_MASK, PPC440, 0, {URT, URA, URB}}, {"vsum2sws", VX (4,1672), VX_MASK, PPCVEC, 0, {VD, VA, VB}}, +{"vmoduw", VX (4,1675), VX_MASK, POWER10, 0, {VD, VA, VB}}, {"vmrgow", VX (4,1676), VX_MASK, PPCVEC2, 0, {VD, VA, VB}}, {"vextuwlx", VX (4,1677), VX_MASK, PPCVEC3, 0, {RT, RA, VB}}, {"vshasigmad", VX (4,1730), VX_MASK, PPCVEC2, 0, {VD, VA, ST, SIX}}, @@ -4612,6 +5154,7 @@ {"udi11fcm.", APU(4, 867,0), APU_MASK, PPC440, 0, {URT, URA, URB}}, {"vcmpgtud.", VXR(4, 711,1), VXR_MASK, PPCVEC2, 0, {VD, VA, VB}}, {"udi11fcm", APU(4, 867,1), APU_MASK, PPC440, 0, {URT, URA, URB}}, +{"vmodud", VX (4,1739), VX_MASK, POWER10, 0, {VD, VA, VB}}, {"vupklsw", VX (4,1742), VXVA_MASK, PPCVEC2, 0, {VD, VB}}, {"vsubsbs", VX (4,1792), VX_MASK, PPCVEC, 0, {VD, VA, VB}}, {"vclzb", VX (4,1794), VXVA_MASK, PPCVEC2, 0, {VD, VB}}, @@ -4621,6 +5164,7 @@ {"udi12fcm.", APU(4, 899,0), APU_MASK, PPC440, 0, {URT, URA, URB}}, {"udi12fcm", APU(4, 899,1), APU_MASK, PPC440, 0, {URT, URA, URB}}, {"vsum4sbs", VX (4,1800), VX_MASK, PPCVEC, 0, {VD, VA, VB}}, +{"vmodsq", VX (4,1803), VX_MASK, POWER10, 0, {VD, VA, VB}}, {"vextubrx", VX (4,1805), VX_MASK, PPCVEC3, 0, {RT, RA, VB}}, {"maclhwuo", XO (4, 396,1,0), XO_MASK, MULHW, 0, {RT, RA, RB}}, {"maclhwuo.", XO (4, 396,1,1), XO_MASK, MULHW, 0, {RT, RA, RB}}, @@ -4639,26 +5183,34 @@ {"vsubsws", VX (4,1920), VX_MASK, PPCVEC, 0, {VD, VA, VB}}, {"vclzw", VX (4,1922), VXVA_MASK, PPCVEC2, 0, {VD, VB}}, {"vpopcntw", VX (4,1923), VXVA_MASK, PPCVEC2, 0, {VD, VB}}, +{"vclzdm", VX (4,1924), VX_MASK, POWER10, 0, {VD, VA, VB}}, {"vcmpgtsw.", VXR(4, 902,1), VXR_MASK, PPCVEC, 0, {VD, VA, VB}}, {"udi14fcm.", APU(4, 963,0), APU_MASK, PPC440, 0, {URT, URA, URB}}, +{"vcmpgtsq.", VXR(4, 903,1), VXR_MASK, POWER10, 0, {VD, VA, VB}}, {"udi14fcm", APU(4, 963,1), APU_MASK, PPC440, 0, {URT, URA, URB}}, {"vsumsws", VX (4,1928), VX_MASK, PPCVEC, 0, {VD, VA, VB}}, +{"vmodsw", VX (4,1931), VX_MASK, POWER10, 0, {VD, VA, VB}}, {"vmrgew", VX (4,1932), VX_MASK, PPCVEC2, 0, {VD, VA, VB}}, {"vextuwrx", VX (4,1933), VX_MASK, PPCVEC3, 0, {RT, RA, VB}}, {"maclhwsuo", XO (4, 460,1,0), XO_MASK, MULHW, 0, {RT, RA, RB}}, {"maclhwsuo.", XO (4, 460,1,1), XO_MASK, MULHW, 0, {RT, RA, RB}}, {"vclzd", VX (4,1986), VXVA_MASK, PPCVEC2, 0, {VD, VB}}, {"vpopcntd", VX (4,1987), VXVA_MASK, PPCVEC2, 0, {VD, VB}}, +{"vctzdm", VX (4,1988), VX_MASK, POWER10, 0, {VD, VA, VB}}, {"vcmpbfp.", VXR(4, 966,1), VXR_MASK, PPCVEC, 0, {VD, VA, VB}}, {"udi15fcm.", APU(4, 995,0), APU_MASK, PPC440, 0, {URT, URA, URB}}, {"vcmpgtsd.", VXR(4, 967,1), VXR_MASK, PPCVEC2, 0, {VD, VA, VB}}, {"udi15fcm", APU(4, 995,1), APU_MASK, PPC440, 0, {URT, URA, URB}}, +{"vmodsd", VX (4,1995), VX_MASK, POWER10, 0, {VD, VA, VB}}, {"maclhwso", XO (4, 492,1,0), XO_MASK, MULHW, 0, {RT, RA, RB}}, {"maclhwso.", XO (4, 492,1,1), XO_MASK, MULHW, 0, {RT, RA, RB}}, {"nmaclhwso", XO (4, 494,1,0), XO_MASK, MULHW, 0, {RT, RA, RB}}, {"nmaclhwso.", XO (4, 494,1,1), XO_MASK, MULHW, 0, {RT, RA, RB}}, {"dcbz_l", X (4,1014), XRT_MASK, PPCPS, 0, {RA, RB}}, +{"lxvp", DQXP(6,0), DQXP_MASK, POWER10, PPCVLE, {XTP, DQ, RA0}}, +{"stxvp", DQXP(6,1), DQXP_MASK, POWER10, PPCVLE, {XTP, DQ, RA0}}, + {"mulli", OP(7), OP_MASK, PPCCOM, PPCVLE, {RT, RA, SI}}, {"muli", OP(7), OP_MASK, PWRCOM, PPCVLE, {RT, RA, SI}}, @@ -5562,6 +6114,7 @@ {"rlnm.", M(23,1), M_MASK, PWRCOM, PPCVLE, {RA, RS, RB, MBE, ME}}, {"nop", OP(24), 0xffffffff, PPCCOM, PPCVLE, {0}}, +{"exser", 0x63ff0000, 0xffffffff, POWER9, PPCVLE, {0}}, {"ori", OP(24), OP_MASK, PPCCOM, PPCVLE, {RA, RS, UI}}, {"oril", OP(24), OP_MASK, PWRCOM, PPCVLE, {RA, RS, UI}}, @@ -5668,6 +6221,8 @@ {"lxsiwzx", X(31,12), XX1_MASK, PPCVSX2, 0, {XT6, RA0, RB}}, +{"lxvrbx", X(31,13), XX1_MASK, POWER10, 0, {XT6, RA0, RB}}, + {"isellt", X(31,15), X_MASK, PPCISEL, 0, {RT, RA0, RB}}, {"tlbilxlpid", XTO(31,18,0), XTO_MASK, E500MC|PPCA2, 0, {0}}, @@ -5682,7 +6237,7 @@ {"ldx", X(31,21), X_MASK, PPC64, 0, {RT, RA0, RB}}, -{"icbt", X(31,22), X_MASK, BOOKE|PPCE300|PPCA2|PPC476, 0, {CT, RA0, RB}}, +{"icbt", X(31,22), X_MASK, POWER5|BOOKE|PPCE300, 0, {CT, RA0, RB}}, {"lwzx", X(31,23), X_MASK, PPCCOM, 0, {RT, RA0, RB}}, {"lx", X(31,23), X_MASK, PWRCOM, 0, {RT, RA, RB}}, @@ -5709,7 +6264,10 @@ {"ldepx", X(31,29), X_MASK, E500MC|PPCA2, 0, {RT, RA0, RB}}, {"waitasec", X(31,30), XRTRARB_MASK, POWER8, POWER9, {0}}, -{"wait", X(31,30), XWC_MASK, POWER9, 0, {WC}}, +{"waitrsv", XWCPL(31,30,1,0),0xffffffff, POWER10, 0, {0}}, +{"pause_short", XWCPL(31,30,2,0),0xffffffff, POWER10, 0, {0}}, +{"wait", X(31,30), XWCPL_MASK, POWER10, 0, {WC, PL}}, +{"wait", X(31,30), XWC_MASK, POWER9, POWER10, {WC}}, {"lwepx", X(31,31), X_MASK, E500MC|PPCA2, 0, {RT, RA0, RB}}, @@ -5722,6 +6280,8 @@ {"lvehx", X(31,39), X_MASK, PPCVEC, 0, {VD, RA0, RB}}, {"lhfcmx", APU(31,39,0), APU_MASK, PPC405, 0, {FCRT, RA, RB}}, +{"lxvrhx", X(31,45), XX1_MASK, POWER10, 0, {XT6, RA0, RB}}, + {"mviwsplt", X(31,46), X_MASK, E6500, 0, {VD, RA, RB}}, {"iselgt", X(31,47), X_MASK, PPCISEL, 0, {RT, RA0, RB}}, @@ -5732,6 +6292,8 @@ {"lxsiwax", X(31,76), XX1_MASK, PPCVSX2, 0, {XT6, RA0, RB}}, +{"lxvrwx", X(31,77), XX1_MASK, POWER10, 0, {XT6, RA0, RB}}, + {"iseleq", X(31,79), X_MASK, PPCISEL, 0, {RT, RA0, RB}}, {"isel", XISEL(31,15), XISEL_MASK, PPCISEL|TITAN, 0, {RT, RA0, RB, CRB}}, @@ -5741,9 +6303,9 @@ {"subf.", XO(31,40,0,1), XO_MASK, PPC, 0, {RT, RA, RB}}, {"sub.", XO(31,40,0,1), XO_MASK, PPC, 0, {RT, RB, RA}}, -{"mfvsrd", X(31,51), XX1RB_MASK, PPCVSX2, 0, {RA, XS6}}, {"mffprd", X(31,51), XX1RB_MASK|1, PPCVSX2, 0, {RA, FRS}}, {"mfvrd", X(31,51)|1, XX1RB_MASK|1, PPCVSX2, 0, {RA, VS}}, +{"mfvsrd", X(31,51), XX1RB_MASK, PPCVSX2, 0, {RA, XS6}}, {"eratilx", X(31,51), X_MASK, PPCA2, 0, {ERAT_T, RA, RB}}, {"lbarx", X(31,52), XEH_MASK, POWER8|E6500, 0, {RT, RA0, RB, EH}}, @@ -5758,6 +6320,8 @@ {"cntlzd", XRC(31,58,0), XRB_MASK, PPC64, 0, {RA, RS}}, {"cntlzd.", XRC(31,58,1), XRB_MASK, PPC64, 0, {RA, RS}}, +{"cntlzdm", X(31,59), X_MASK, POWER10, 0, {RA, RS, RB}}, + {"andc", XRC(31,60,0), X_MASK, COM, 0, {RA, RS, RB}}, {"andc.", XRC(31,60,1), X_MASK, COM, 0, {RA, RS, RB}}, @@ -5791,6 +6355,7 @@ {"mulhw", XO(31,75,0,0), XO_MASK, PPC, 0, {RT, RA, RB}}, {"mulhw.", XO(31,75,0,1), XO_MASK, PPC, 0, {RT, RA, RB}}, +{"msgsndu", XRTRA(31,78,0,0), XRTRA_MASK, POWER9, 0, {RB}}, {"dlmzb", XRC(31,78,0), X_MASK, PPC403|PPC440|PPC476|TITAN, 0, {RA, RS, RB}}, {"dlmzb.", XRC(31,78,1), X_MASK, PPC403|PPC440|PPC476|TITAN, 0, {RA, RS, RB}}, @@ -5801,7 +6366,11 @@ {"ldarx", X(31,84), XEH_MASK, PPC64, 0, {RT, RA0, RB, EH}}, {"dcbfl", XOPL(31,86,1), XRT_MASK, POWER5, PPC476, {RA0, RB}}, -{"dcbf", X(31,86), XLRT_MASK, PPC, 0, {RA0, RB, L2OPT}}, +{"dcbflp", XOPL2(31,86,3), XRT_MASK, POWER9, PPC476, {RA0, RB}}, +{"dcbfps", XOPL3(31,86,4), XRT_MASK, POWER10, PPC476, {RA0, RB}}, +{"dcbstps", XOPL3(31,86,6), XRT_MASK, POWER10, PPC476, {RA0, RB}}, +{"dcbf", X(31,86), XL3RT_MASK, POWER10, PPC476, {RA0, RB, L3OPT}}, +{"dcbf", X(31,86), XLRT_MASK, PPC, POWER10, {RA0, RB, L2OPT}}, {"lbzx", X(31,87), X_MASK, COM, 0, {RT, RA0, RB}}, @@ -5818,6 +6387,9 @@ {"mul", XO(31,107,0,0), XO_MASK, M601, 0, {RT, RA, RB}}, {"mul.", XO(31,107,0,1), XO_MASK, M601, 0, {RT, RA, RB}}, +{"lxvrdx", X(31,109), XX1_MASK, POWER10, 0, {XT6, RA0, RB}}, + +{"msgclru", XRTRA(31,110,0,0), XRTRA_MASK, POWER9, 0, {RB}}, {"mvidsplt", X(31,110), X_MASK, E6500, 0, {VD, RA, RB}}, {"mtsrdin", X(31,114), XRA_MASK, PPC64, 0, {RS, RB}}, @@ -5862,6 +6434,8 @@ {"stxsiwx", X(31,140), XX1_MASK, PPCVSX2, 0, {XS6, RA0, RB}}, +{"stxvrbx", X(31,141), XX1_MASK, POWER10, 0, {XT6, RA0, RB}}, + {"msgsndp", XRTRA(31,142,0,0), XRTRA_MASK, POWER8, 0, {RB}}, {"dcbtstlse", X(31,142), X_MASK, PPCCHLK, E500MC, {CT, RA0, RB}}, @@ -5891,6 +6465,9 @@ {"prtyw", X(31,154), XRB_MASK, POWER6|PPCA2|PPC476, 0, {RA, RS}}, +{"brw", X(31,155), XRB_MASK, POWER10, 0, {RA, RS}}, +{"pdepd", X(31,156), X_MASK, POWER10, 0, {RA, RS, RB}}, + {"stdepx", X(31,157), X_MASK, E500MC|PPCA2, 0, {RS, RA0, RB}}, {"stwepx", X(31,159), X_MASK, E500MC|PPCA2, 0, {RS, RA0, RB}}, @@ -5904,14 +6481,20 @@ {"addex", ZRC(31,170,0), Z2_MASK, POWER9, 0, {RT, RA, RB, CY}}, +{"stxvrhx", X(31,173), XX1_MASK, POWER10, 0, {XT6, RA0, RB}}, + {"msgclrp", XRTRA(31,174,0,0), XRTRA_MASK, POWER8, 0, {RB}}, {"dcbtlse", X(31,174), X_MASK, PPCCHLK, E500MC, {CT, RA0, RB}}, +{"xxmfacc", XVA(31,177,0), XRARB_MASK|3<<21, POWER10, 0, {ACC}}, +{"xxmtacc", XVA(31,177,1), XRARB_MASK|3<<21, POWER10, 0, {ACC}}, +{"xxsetaccz", XVA(31,177,3), XRARB_MASK|3<<21, POWER10, 0, {ACC}}, + {"mtmsrd", X(31,178), XRLARB_MASK, PPC64, 0, {RS, A_L}}, -{"mtvsrd", X(31,179), XX1RB_MASK, PPCVSX2, 0, {XT6, RA}}, {"mtfprd", X(31,179), XX1RB_MASK|1, PPCVSX2, 0, {FRT, RA}}, {"mtvrd", X(31,179)|1, XX1RB_MASK|1, PPCVSX2, 0, {VD, RA}}, +{"mtvsrd", X(31,179), XX1RB_MASK, PPCVSX2, 0, {XT6, RA}}, {"eratre", X(31,179), X_MASK, PPCA2, 0, {RT, RA, WS}}, {"stdux", X(31,181), X_MASK, PPC64, 0, {RS, RAS, RB}}, @@ -5927,6 +6510,9 @@ {"prtyd", X(31,186), XRB_MASK, POWER6|PPCA2, 0, {RA, RS}}, +{"brd", X(31,187), XRB_MASK, POWER10, 0, {RA, RS}}, +{"pextd", X(31,188), X_MASK, POWER10, 0, {RA, RS, RB}}, + {"cmprb", X(31,192), XCMP_MASK, POWER9, 0, {BF, L, RA, RB}}, {"icblq.", XRC(31,198,1), X_MASK, E6500, 0, {CT, RA0, RB}}, @@ -5944,6 +6530,8 @@ {"addze.", XO(31,202,0,1), XORB_MASK, PPCCOM, 0, {RT, RA}}, {"aze.", XO(31,202,0,1), XORB_MASK, PWRCOM, 0, {RT, RA}}, +{"stxvrwx", X(31,205), XX1_MASK, POWER10, 0, {XT6, RA0, RB}}, + {"msgsnd", XRTRA(31,206,0,0), XRTRA_MASK, E500MC|PPCA2|POWER8, 0, {RB}}, {"mtsr", X(31,210), XRB_MASK|(1<<20), COM, NON32, {SR, RS}}, @@ -5965,6 +6553,9 @@ {"sleq", XRC(31,217,0), X_MASK, M601, 0, {RA, RS, RB}}, {"sleq.", XRC(31,217,1), X_MASK, M601, 0, {RA, RS, RB}}, +{"brh", X(31,219), XRB_MASK, POWER10, 0, {RA, RS}}, +{"cfuged", X(31,220), X_MASK, POWER10, 0, {RA, RS, RB}}, + {"stbepx", X(31,223), X_MASK, E500MC|PPCA2, 0, {RS, RA0, RB}}, {"cmpeqb", X(31,224), XCMPL_MASK, POWER9, 0, {BF, RA, RB}}, @@ -5992,6 +6583,8 @@ {"mullw.", XO(31,235,0,1), XO_MASK, PPCCOM, 0, {RT, RA, RB}}, {"muls.", XO(31,235,0,1), XO_MASK, PWRCOM, 0, {RT, RA, RB}}, +{"stxvrdx", X(31,237), XX1_MASK, POWER10, 0, {XT6, RA0, RB}}, + {"icblce", X(31,238), X_MASK, PPCCHLK, E500MC|PPCA2, {CT, RA, RB}}, {"msgclr", XRTRA(31,238,0,0), XRTRA_MASK, E500MC|PPCA2|POWER8, 0, {RB}}, {"mtsrin", X(31,242), XRA_MASK, PPC, NON32, {RS, RB}}, @@ -6139,6 +6732,8 @@ {"lxvdsx", X(31,332), XX1_MASK, PPCVSX, 0, {XT6, RA0, RB}}, +{"lxvpx", X(31,333), XX1_MASK, POWER10, 0, {XTP, RA0, RB}}, + {"mfpmr", X(31,334), X_MASK, PPCPMR|PPCE300, 0, {RT, PMR}}, {"mftmr", X(31,366), X_MASK, PPCTMR, 0, {RT, TMR}}, @@ -6146,11 +6741,13 @@ {"mfmq", XSPR(31,339, 0), XSPR_MASK, M601, 0, {RT}}, {"mfxer", XSPR(31,339, 1), XSPR_MASK, COM, 0, {RT}}, +{"mfudscr", XSPR(31,339, 3), XSPR_MASK, POWER9, 0, {RS}}, {"mfrtcu", XSPR(31,339, 4), XSPR_MASK, COM, TITAN, {RT}}, {"mfrtcl", XSPR(31,339, 5), XSPR_MASK, COM, TITAN, {RT}}, {"mfdec", XSPR(31,339, 6), XSPR_MASK, MFDEC1, 0, {RT}}, {"mflr", XSPR(31,339, 8), XSPR_MASK, COM, 0, {RT}}, {"mfctr", XSPR(31,339, 9), XSPR_MASK, COM, 0, {RT}}, +{"mfuamr", XSPR(31,339, 13), XSPR_MASK, POWER9, 0, {RS}}, {"mfdscr", XSPR(31,339, 17), XSPR_MASK, POWER6, 0, {RT}}, {"mftid", XSPR(31,339, 17), XSPR_MASK, POWER, 0, {RT}}, {"mfdsisr", XSPR(31,339, 18), XSPR_MASK, COM, TITAN, {RT}}, @@ -6161,9 +6758,12 @@ {"mfsrr0", XSPR(31,339, 26), XSPR_MASK, COM, 0, {RT}}, {"mfsrr1", XSPR(31,339, 27), XSPR_MASK, COM, 0, {RT}}, {"mfcfar", XSPR(31,339, 28), XSPR_MASK, POWER6, 0, {RT}}, +{"mfamr", XSPR(31,339, 29), XSPR_MASK, POWER7, 0, {RS}}, +{"mfpidr", XSPR(31,339, 48), XSPR_MASK, POWER10, 0, {RS}}, {"mfpid", XSPR(31,339, 48), XSPR_MASK, BOOKE, 0, {RT}}, {"mfcsrr0", XSPR(31,339, 58), XSPR_MASK, BOOKE, 0, {RT}}, {"mfcsrr1", XSPR(31,339, 59), XSPR_MASK, BOOKE, 0, {RT}}, +{"mfiamr", XSPR(31,339, 61), XSPR_MASK, POWER10, 0, {RS}}, {"mfdear", XSPR(31,339, 61), XSPR_MASK, BOOKE, 0, {RT}}, {"mfesr", XSPR(31,339, 62), XSPR_MASK, BOOKE, 0, {RT}}, {"mfivpr", XSPR(31,339, 63), XSPR_MASK, BOOKE, 0, {RT}}, @@ -6177,16 +6777,28 @@ {"mfcounta", XSPR(31,339,150), XSPR_MASK, PPC860, 0, {RT}}, {"mfcountb", XSPR(31,339,151), XSPR_MASK, PPC860, 0, {RT}}, {"mfcmpe", XSPR(31,339,152), XSPR_MASK, PPC860, 0, {RT}}, +{"mffscr", XSPR(31,339,153), XSPR_MASK, POWER10, 0, {RS}}, {"mfcmpf", XSPR(31,339,153), XSPR_MASK, PPC860, 0, {RT}}, {"mfcmpg", XSPR(31,339,154), XSPR_MASK, PPC860, 0, {RT}}, {"mfcmph", XSPR(31,339,155), XSPR_MASK, PPC860, 0, {RT}}, {"mflctrl1", XSPR(31,339,156), XSPR_MASK, PPC860, 0, {RT}}, +{"mfuamor", XSPR(31,339,157), XSPR_MASK, POWER7, 0, {RS}}, {"mflctrl2", XSPR(31,339,157), XSPR_MASK, PPC860, 0, {RT}}, {"mfictrl", XSPR(31,339,158), XSPR_MASK, PPC860, 0, {RT}}, +{"mfpspb", XSPR(31,339,159), XSPR_MASK, POWER10, 0, {RS}}, {"mfbar", XSPR(31,339,159), XSPR_MASK, PPC860, 0, {RT}}, +{"mfdpdes", XSPR(31,339,176), XSPR_MASK, POWER10, 0, {RS}}, +{"mfdawr0", XSPR(31,339,180), XSPR_MASK, POWER10, 0, {RS}}, +{"mfdawr1", XSPR(31,339,181), XSPR_MASK, POWER10, 0, {RS}}, +{"mfrpr", XSPR(31,339,186), XSPR_MASK, POWER10, 0, {RS}}, +{"mfciabr", XSPR(31,339,187), XSPR_MASK, POWER10, 0, {RS}}, +{"mfdawrx0", XSPR(31,339,188), XSPR_MASK, POWER10, 0, {RS}}, +{"mfdawrx1", XSPR(31,339,189), XSPR_MASK, POWER10, 0, {RS}}, +{"mfhfscr", XSPR(31,339,190), XSPR_MASK, POWER10, 0, {RS}}, {"mfvrsave", XSPR(31,339,256), XSPR_MASK, PPCVEC, 0, {RT}}, {"mfusprg0", XSPR(31,339,256), XSPR_MASK, BOOKE, 0, {RT}}, {"mfsprg", XSPR(31,339,256), XSPRG_MASK, PPC, 0, {RT, SPRG}}, +{"mfusprg3", XSPR(31,339,259), XSPR_MASK, POWER10, 0, {RT}}, {"mfsprg4", XSPR(31,339,260), XSPR_MASK, PPC405|BOOKE, 0, {RT}}, {"mfsprg5", XSPR(31,339,261), XSPR_MASK, PPC405|BOOKE, 0, {RT}}, {"mfsprg6", XSPR(31,339,262), XSPR_MASK, PPC405|BOOKE, 0, {RT}}, @@ -6202,20 +6814,37 @@ {"mfear", XSPR(31,339,282), XSPR_MASK, PPC, TITAN, {RT}}, {"mfpir", XSPR(31,339,286), XSPR_MASK, BOOKE, 0, {RT}}, {"mfpvr", XSPR(31,339,287), XSPR_MASK, PPC, 0, {RT}}, +{"mfhsprg0", XSPR(31,339,304), XSPR_MASK, POWER10, 0, {RS}}, {"mfdbsr", XSPR(31,339,304), XSPR_MASK, BOOKE, 0, {RT}}, +{"mfhsprg1", XSPR(31,339,305), XSPR_MASK, POWER10, 0, {RS}}, +{"mfhdisr", XSPR(31,339,306), XSPR_MASK, POWER10, 0, {RS}}, +{"mfhdar", XSPR(31,339,307), XSPR_MASK, POWER10, 0, {RS}}, +{"mfspurr", XSPR(31,339,308), XSPR_MASK, POWER10, 0, {RS}}, {"mfdbcr0", XSPR(31,339,308), XSPR_MASK, BOOKE, 0, {RT}}, +{"mfpurr", XSPR(31,339,309), XSPR_MASK, POWER10, 0, {RS}}, {"mfdbcr1", XSPR(31,339,309), XSPR_MASK, BOOKE, 0, {RT}}, +{"mfhdec", XSPR(31,339,310), XSPR_MASK, POWER10, 0, {RS}}, {"mfdbcr2", XSPR(31,339,310), XSPR_MASK, BOOKE, 0, {RT}}, {"mfiac1", XSPR(31,339,312), XSPR_MASK, BOOKE, 0, {RT}}, +{"mfhrmor", XSPR(31,339,313), XSPR_MASK, POWER10, 0, {RS}}, {"mfiac2", XSPR(31,339,313), XSPR_MASK, BOOKE, 0, {RT}}, +{"mfhsrr0", XSPR(31,339,314), XSPR_MASK, POWER10, 0, {RS}}, {"mfiac3", XSPR(31,339,314), XSPR_MASK, BOOKE, 0, {RT}}, +{"mfhsrr1", XSPR(31,339,315), XSPR_MASK, POWER10, 0, {RS}}, {"mfiac4", XSPR(31,339,315), XSPR_MASK, BOOKE, 0, {RT}}, {"mfdac1", XSPR(31,339,316), XSPR_MASK, BOOKE, 0, {RT}}, {"mfdac2", XSPR(31,339,317), XSPR_MASK, BOOKE, 0, {RT}}, +{"mflpcr", XSPR(31,339,318), XSPR_MASK, POWER10, 0, {RS}}, {"mfdvc1", XSPR(31,339,318), XSPR_MASK, BOOKE, 0, {RT}}, +{"mflpidr", XSPR(31,339,319), XSPR_MASK, POWER10, 0, {RS}}, {"mfdvc2", XSPR(31,339,319), XSPR_MASK, BOOKE, 0, {RT}}, +{"mfhmer", XSPR(31,339,336), XSPR_MASK, POWER7, 0, {RS}}, {"mftsr", XSPR(31,339,336), XSPR_MASK, BOOKE, 0, {RT}}, +{"mfhmeer", XSPR(31,339,337), XSPR_MASK, POWER7, 0, {RS}}, +{"mfpcr", XSPR(31,339,338), XSPR_MASK, POWER10, 0, {RS}}, +{"mfheir", XSPR(31,339,339), XSPR_MASK, POWER10, 0, {RS}}, {"mftcr", XSPR(31,339,340), XSPR_MASK, BOOKE, 0, {RT}}, +{"mfamor", XSPR(31,339,349), XSPR_MASK, POWER7, 0, {RS}}, {"mfivor0", XSPR(31,339,400), XSPR_MASK, BOOKE, 0, {RT}}, {"mfivor1", XSPR(31,339,401), XSPR_MASK, BOOKE, 0, {RT}}, {"mfivor2", XSPR(31,339,402), XSPR_MASK, BOOKE, 0, {RT}}, @@ -6232,6 +6861,14 @@ {"mfivor13", XSPR(31,339,413), XSPR_MASK, BOOKE, 0, {RT}}, {"mfivor14", XSPR(31,339,414), XSPR_MASK, BOOKE, 0, {RT}}, {"mfivor15", XSPR(31,339,415), XSPR_MASK, BOOKE, 0, {RT}}, +{"mftir", XSPR(31,339,446), XSPR_MASK, POWER10, 0, {RS}}, +{"mfptcr", XSPR(31,339,464), XSPR_MASK, POWER10, 0, {RS}}, +{"mfuspgr0", XSPR(31,339,496), XSPR_MASK, POWER10, 0, {RS}}, +{"mfuspgr1", XSPR(31,339,497), XSPR_MASK, POWER10, 0, {RS}}, +{"mfurmor", XSPR(31,339,505), XSPR_MASK, POWER10, 0, {RS}}, +{"mfusrr0", XSPR(31,339,506), XSPR_MASK, POWER10, 0, {RS}}, +{"mfusrr1", XSPR(31,339,507), XSPR_MASK, POWER10, 0, {RS}}, +{"mfsmfctrl", XSPR(31,339,511), XSPR_MASK, POWER10, 0, {RS}}, {"mfspefscr", XSPR(31,339,512), XSPR_MASK, PPCSPE, 0, {RT}}, {"mfbbear", XSPR(31,339,513), XSPR_MASK, PPCBRLK, 0, {RT}}, {"mfbbtar", XSPR(31,339,514), XSPR_MASK, PPCBRLK, 0, {RT}}, @@ -6256,18 +6893,36 @@ {"mfdpdr", XSPR(31,339,630), XSPR_MASK, PPC860, 0, {RT}}, {"mfdpir", XSPR(31,339,631), XSPR_MASK, PPC860, 0, {RT}}, {"mfimmr", XSPR(31,339,638), XSPR_MASK, PPC860, 0, {RT}}, +{"mfusier2", XSPR(31,339,736), XSPR_MASK, POWER10, 0, {RT}}, +{"mfsier2", XSPR(31,339,736), XSPR_MASK, POWER10, 0, {RT}}, +{"mfusier3", XSPR(31,339,737), XSPR_MASK, POWER10, 0, {RT}}, +{"mfsier3", XSPR(31,339,737), XSPR_MASK, POWER10, 0, {RT}}, +{"mfummcr3", XSPR(31,339,738), XSPR_MASK, POWER10, 0, {RT}}, +{"mfmmcr3", XSPR(31,339,738), XSPR_MASK, POWER10, 0, {RT}}, +{"mfusier", XSPR(31,339,768), XSPR_MASK, POWER10, 0, {RT}}, +{"mfsier", XSPR(31,339,768), XSPR_MASK, POWER10, 0, {RT}}, +{"mfummcra", XSPR(31,339,770), XSPR_MASK, POWER9, 0, {RS}}, +{"mfmmcra", XSPR(31,339,770), XSPR_MASK, POWER7, 0, {RS}}, {"mfupmc1", XSPR(31,339,771), XSPR_MASK, POWER9, 0, {RT}}, -{"mfpmc1", XSPR(31,339,771), XSPR_MASK, POWER9, 0, {RT}}, +{"mfpmc1", XSPR(31,339,771), XSPR_MASK, POWER7, 0, {RT}}, {"mfupmc2", XSPR(31,339,772), XSPR_MASK, POWER9, 0, {RT}}, -{"mfpmc2", XSPR(31,339,772), XSPR_MASK, POWER9, 0, {RT}}, +{"mfpmc2", XSPR(31,339,772), XSPR_MASK, POWER7, 0, {RT}}, {"mfupmc3", XSPR(31,339,773), XSPR_MASK, POWER9, 0, {RT}}, -{"mfpmc3", XSPR(31,339,773), XSPR_MASK, POWER9, 0, {RT}}, +{"mfpmc3", XSPR(31,339,773), XSPR_MASK, POWER7, 0, {RT}}, {"mfupmc4", XSPR(31,339,774), XSPR_MASK, POWER9, 0, {RT}}, -{"mfpmc4", XSPR(31,339,774), XSPR_MASK, POWER9, 0, {RT}}, +{"mfpmc4", XSPR(31,339,774), XSPR_MASK, POWER7, 0, {RT}}, {"mfupmc5", XSPR(31,339,775), XSPR_MASK, POWER9, 0, {RT}}, -{"mfpmc5", XSPR(31,339,775), XSPR_MASK, POWER9, 0, {RT}}, +{"mfpmc5", XSPR(31,339,775), XSPR_MASK, POWER7, 0, {RT}}, {"mfupmc6", XSPR(31,339,776), XSPR_MASK, POWER9, 0, {RT}}, -{"mfpmc6", XSPR(31,339,776), XSPR_MASK, POWER9, 0, {RT}}, +{"mfpmc6", XSPR(31,339,776), XSPR_MASK, POWER7, 0, {RT}}, +{"mfummcr0", XSPR(31,339,779), XSPR_MASK, POWER9, 0, {RS}}, +{"mfmmcr0", XSPR(31,339,779), XSPR_MASK, POWER7, 0, {RS}}, +{"mfusiar", XSPR(31,339,780), XSPR_MASK, POWER9, 0, {RS}}, +{"mfsiar", XSPR(31,339,780), XSPR_MASK, POWER9, 0, {RS}}, +{"mfusdar", XSPR(31,339,781), XSPR_MASK, POWER9, 0, {RS}}, +{"mfsdar", XSPR(31,339,781), XSPR_MASK, POWER9, 0, {RS}}, +{"mfummcr1", XSPR(31,339,782), XSPR_MASK, POWER9, 0, {RS}}, +{"mfmmcr1", XSPR(31,339,782), XSPR_MASK, POWER7, 0, {RS}}, {"mfmi_ctr", XSPR(31,339,784), XSPR_MASK, PPC860, 0, {RT}}, {"mfmi_ap", XSPR(31,339,786), XSPR_MASK, PPC860, 0, {RT}}, {"mfmi_epn", XSPR(31,339,787), XSPR_MASK, PPC860, 0, {RT}}, @@ -6281,12 +6936,25 @@ {"mfmd_twc", XSPR(31,339,797), XSPR_MASK, PPC860, 0, {RT}}, {"mfmd_rpn", XSPR(31,339,798), XSPR_MASK, PPC860, 0, {RT}}, {"mfm_tw", XSPR(31,339,799), XSPR_MASK, PPC860, 0, {RT}}, +{"mfbescrs", XSPR(31,339,800), XSPR_MASK, POWER9, 0, {RS}}, +{"mfbescrsu", XSPR(31,339,801), XSPR_MASK, POWER9, 0, {RS}}, +{"mfbescrr", XSPR(31,339,802), XSPR_MASK, POWER9, 0, {RS}}, +{"mfbescrru", XSPR(31,339,803), XSPR_MASK, POWER9, 0, {RS}}, +{"mfebbhr", XSPR(31,339,804), XSPR_MASK, POWER9, 0, {RS}}, +{"mfebbrr", XSPR(31,339,805), XSPR_MASK, POWER9, 0, {RS}}, +{"mfbescr", XSPR(31,339,806), XSPR_MASK, POWER9, 0, {RS}}, +{"mftar", XSPR(31,339,815), XSPR_MASK, POWER9, 0, {RS}}, +{"mfasdr", XSPR(31,339,816), XSPR_MASK, POWER10, 0, {RS}}, {"mfmi_dbcam", XSPR(31,339,816), XSPR_MASK, PPC860, 0, {RT}}, {"mfmi_dbram0", XSPR(31,339,817), XSPR_MASK, PPC860, 0, {RT}}, {"mfmi_dbram1", XSPR(31,339,818), XSPR_MASK, PPC860, 0, {RT}}, +{"mfpsscr", XSPR(31,339,823), XSPR_MASK, POWER10, 0, {RS}}, {"mfmd_dbcam", XSPR(31,339,824), XSPR_MASK, PPC860, 0, {RT}}, {"mfmd_dbram0", XSPR(31,339,825), XSPR_MASK, PPC860, 0, {RT}}, {"mfmd_dbram1", XSPR(31,339,826), XSPR_MASK, PPC860, 0, {RT}}, +{"mfic", XSPR(31,339,848), XSPR_MASK, POWER8, 0, {RS}}, +{"mfvtb", XSPR(31,339,849), XSPR_MASK, POWER8, 0, {RS}}, +{"mfhpsscr", XSPR(31,339,855), XSPR_MASK, POWER10, 0, {RS}}, {"mfivndx", XSPR(31,339,880), XSPR_MASK, TITAN, 0, {RT}}, {"mfdvndx", XSPR(31,339,881), XSPR_MASK, TITAN, 0, {RT}}, {"mfivlim", XSPR(31,339,882), XSPR_MASK, TITAN, 0, {RT}}, @@ -6398,6 +7066,8 @@ {"popcntw", X(31,378), XRB_MASK, POWER7|PPCA2, 0, {RA, RS}}, +{"setbc", X(31,384), XRB_MASK, POWER10, 0, {RT, BI}}, + {"mtdcrx", X(31,387), X_MASK, BOOKE|PPCA2|PPC476, TITAN, {RA, RS}}, {"mtdcrx.", XRC(31,387,1), X_MASK, PPCA2, 0, {RA, RS}}, @@ -6432,6 +7102,8 @@ {"sthepx", X(31,415), X_MASK, E500MC|PPCA2, 0, {RS, RA0, RB}}, +{"setbcr", X(31,416), XRB_MASK, POWER10, 0, {RT, BI}}, + {"mtdcrux", X(31,419), X_MASK, PPC464|PPC476, 0, {RA, RS}}, {"stvexhx", X(31,421), X_MASK, E6500, 0, {VS, RA0, RB}}, @@ -6455,20 +7127,30 @@ {"sthux", X(31,439), X_MASK, COM, 0, {RS, RAS, RB}}, -{"mdors", 0x7f9ce378, 0xffffffff, E500MC, 0, {0}}, - -{"miso", 0x7f5ad378, 0xffffffff, E6500, 0, {0}}, - -/* The "yield", "mdoio" and "mdoom" instructions are extended mnemonics for - "or rX,rX,rX", with rX being r27, r29 and r30 respectively. */ +/* or 1,1,1 */ +{"cctpl", 0x7c210b78, 0xffffffff, CELL, 0, {0}}, +/* or 2,2,2 */ +{"cctpm", 0x7c421378, 0xffffffff, CELL, 0, {0}}, +/* or 3,3,3 */ +{"cctph", 0x7c631b78, 0xffffffff, CELL, 0, {0}}, +/* or 26,26,26 */ +{"miso", 0x7f5ad378, 0xffffffff, POWER8|E6500, 0, {0}}, +/* or 27,27,27 */ {"yield", 0x7f7bdb78, 0xffffffff, POWER7, 0, {0}}, +/* or 28,28,28 */ +{"mdors", 0x7f9ce378, 0xffffffff, E500MC, 0, {0}}, +/* or 29,29,29 */ {"mdoio", 0x7fbdeb78, 0xffffffff, POWER7, 0, {0}}, +/* or 30,30,30 */ {"mdoom", 0x7fdef378, 0xffffffff, POWER7, 0, {0}}, + {"mr", XRC(31,444,0), X_MASK, COM, 0, {RA, RSB}}, {"or", XRC(31,444,0), X_MASK, COM, 0, {RA, RS, RB}}, {"mr.", XRC(31,444,1), X_MASK, COM, 0, {RA, RSB}}, {"or.", XRC(31,444,1), X_MASK, COM, 0, {RA, RS, RB}}, +{"setnbc", X(31,448), XRB_MASK, POWER10, 0, {RT, BI}}, + {"mtexisr", XSPR(31,451, 64), XSPR_MASK, PPC403, 0, {RS}}, {"mtexier", XSPR(31,451, 66), XSPR_MASK, PPC403, 0, {RS}}, {"mtbr0", XSPR(31,451,128), XSPR_MASK, PPC403, 0, {RS}}, @@ -6517,6 +7199,8 @@ {"divwu", XO(31,459,0,0), XO_MASK, PPC, 0, {RT, RA, RB}}, {"divwu.", XO(31,459,0,1), XO_MASK, PPC, 0, {RT, RA, RB}}, +{"stxvpx", X(31,461), XX1_MASK, POWER10, 0, {XTP, RA0, RB}}, + {"mtpmr", X(31,462), X_MASK, PPCPMR|PPCE300, 0, {PMR, RS}}, {"mttmr", X(31,494), X_MASK, PPCTMR, 0, {TMR, RS}}, @@ -6524,8 +7208,10 @@ {"mtmq", XSPR(31,467, 0), XSPR_MASK, M601, 0, {RS}}, {"mtxer", XSPR(31,467, 1), XSPR_MASK, COM, 0, {RS}}, +{"mtudscr", XSPR(31,467, 3), XSPR_MASK, POWER9, 0, {RS}}, {"mtlr", XSPR(31,467, 8), XSPR_MASK, COM, 0, {RS}}, {"mtctr", XSPR(31,467, 9), XSPR_MASK, COM, 0, {RS}}, +{"mtuamr", XSPR(31,467, 13), XSPR_MASK, POWER9, 0, {RS}}, {"mtdscr", XSPR(31,467, 17), XSPR_MASK, POWER6, 0, {RS}}, {"mttid", XSPR(31,467, 17), XSPR_MASK, POWER, 0, {RS}}, {"mtdsisr", XSPR(31,467, 18), XSPR_MASK, COM, TITAN, {RS}}, @@ -6538,13 +7224,20 @@ {"mtsrr0", XSPR(31,467, 26), XSPR_MASK, COM, 0, {RS}}, {"mtsrr1", XSPR(31,467, 27), XSPR_MASK, COM, 0, {RS}}, {"mtcfar", XSPR(31,467, 28), XSPR_MASK, POWER6, 0, {RS}}, +{"mtamr", XSPR(31,467, 29), XSPR_MASK, POWER7, 0, {RS}}, +{"mtpidr", XSPR(31,467, 48), XSPR_MASK, POWER10, 0, {RS}}, {"mtpid", XSPR(31,467, 48), XSPR_MASK, BOOKE, 0, {RS}}, {"mtdecar", XSPR(31,467, 54), XSPR_MASK, BOOKE, 0, {RS}}, {"mtcsrr0", XSPR(31,467, 58), XSPR_MASK, BOOKE, 0, {RS}}, {"mtcsrr1", XSPR(31,467, 59), XSPR_MASK, BOOKE, 0, {RS}}, +{"mtiamr", XSPR(31,467, 61), XSPR_MASK, POWER10, 0, {RS}}, {"mtdear", XSPR(31,467, 61), XSPR_MASK, BOOKE, 0, {RS}}, {"mtesr", XSPR(31,467, 62), XSPR_MASK, BOOKE, 0, {RS}}, {"mtivpr", XSPR(31,467, 63), XSPR_MASK, BOOKE, 0, {RS}}, +{"mttfhar", XSPR(31,467,128), XSPR_MASK, POWER9, 0, {RS}}, +{"mttfiar", XSPR(31,467,129), XSPR_MASK, POWER9, 0, {RS}}, +{"mttexasr", XSPR(31,467,130), XSPR_MASK, POWER9, 0, {RS}}, +{"mttexasru", XSPR(31,467,131), XSPR_MASK, POWER9, 0, {RS}}, {"mtcmpa", XSPR(31,467,144), XSPR_MASK, PPC860, 0, {RS}}, {"mtcmpb", XSPR(31,467,145), XSPR_MASK, PPC860, 0, {RS}}, {"mtcmpc", XSPR(31,467,146), XSPR_MASK, PPC860, 0, {RS}}, @@ -6555,13 +7248,24 @@ {"mtcountb", XSPR(31,467,151), XSPR_MASK, PPC860, 0, {RS}}, {"mtctrl", XSPR(31,467,152), XSPR_MASK, POWER4, 0, {RS}}, {"mtcmpe", XSPR(31,467,152), XSPR_MASK, PPC860, 0, {RS}}, +{"mtfscr", XSPR(31,467,153), XSPR_MASK, POWER10, 0, {RS}}, {"mtcmpf", XSPR(31,467,153), XSPR_MASK, PPC860, 0, {RS}}, {"mtcmpg", XSPR(31,467,154), XSPR_MASK, PPC860, 0, {RS}}, {"mtcmph", XSPR(31,467,155), XSPR_MASK, PPC860, 0, {RS}}, {"mtlctrl1", XSPR(31,467,156), XSPR_MASK, PPC860, 0, {RS}}, +{"mtuamor", XSPR(31,467,157), XSPR_MASK, POWER7, 0, {RS}}, {"mtlctrl2", XSPR(31,467,157), XSPR_MASK, PPC860, 0, {RS}}, {"mtictrl", XSPR(31,467,158), XSPR_MASK, PPC860, 0, {RS}}, +{"mtpspb", XSPR(31,467,159), XSPR_MASK, POWER10, 0, {RS}}, {"mtbar", XSPR(31,467,159), XSPR_MASK, PPC860, 0, {RS}}, +{"mtdpdes", XSPR(31,467,176), XSPR_MASK, POWER10, 0, {RS}}, +{"mtdawr0", XSPR(31,467,180), XSPR_MASK, POWER10, 0, {RS}}, +{"mtdawr1", XSPR(31,467,181), XSPR_MASK, POWER10, 0, {RS}}, +{"mtrpr", XSPR(31,467,186), XSPR_MASK, POWER10, 0, {RS}}, +{"mtciabr", XSPR(31,467,187), XSPR_MASK, POWER10, 0, {RS}}, +{"mtdawrx0", XSPR(31,467,188), XSPR_MASK, POWER10, 0, {RS}}, +{"mtdawrx1", XSPR(31,467,189), XSPR_MASK, POWER10, 0, {RS}}, +{"mthfscr", XSPR(31,467,190), XSPR_MASK, POWER10, 0, {RS}}, {"mtvrsave", XSPR(31,467,256), XSPR_MASK, PPCVEC, 0, {RS}}, {"mtusprg0", XSPR(31,467,256), XSPR_MASK, BOOKE, 0, {RS}}, {"mtsprg", XSPR(31,467,256), XSPRG_MASK, PPC, 0, {SPRG, RS}}, @@ -6577,20 +7281,38 @@ {"mtear", XSPR(31,467,282), XSPR_MASK, PPC, TITAN, {RS}}, {"mttbl", XSPR(31,467,284), XSPR_MASK, PPC, 0, {RS}}, {"mttbu", XSPR(31,467,285), XSPR_MASK, PPC, 0, {RS}}, +{"mttbu40", XSPR(31,467,286), XSPR_MASK, POWER10, 0, {RS}}, +{"mthsprg0", XSPR(31,467,304), XSPR_MASK, POWER10, 0, {RS}}, {"mtdbsr", XSPR(31,467,304), XSPR_MASK, BOOKE, 0, {RS}}, +{"mthsprg1", XSPR(31,467,305), XSPR_MASK, POWER10, 0, {RS}}, +{"mthdisr", XSPR(31,467,306), XSPR_MASK, POWER10, 0, {RS}}, +{"mthdar", XSPR(31,467,307), XSPR_MASK, POWER10, 0, {RS}}, +{"mtspurr", XSPR(31,467,308), XSPR_MASK, POWER10, 0, {RS}}, {"mtdbcr0", XSPR(31,467,308), XSPR_MASK, BOOKE, 0, {RS}}, +{"mtpurr", XSPR(31,467,309), XSPR_MASK, POWER10, 0, {RS}}, {"mtdbcr1", XSPR(31,467,309), XSPR_MASK, BOOKE, 0, {RS}}, +{"mthdec", XSPR(31,467,310), XSPR_MASK, POWER10, 0, {RS}}, {"mtdbcr2", XSPR(31,467,310), XSPR_MASK, BOOKE, 0, {RS}}, {"mtiac1", XSPR(31,467,312), XSPR_MASK, BOOKE, 0, {RS}}, +{"mthrmor", XSPR(31,467,313), XSPR_MASK, POWER10, 0, {RS}}, {"mtiac2", XSPR(31,467,313), XSPR_MASK, BOOKE, 0, {RS}}, +{"mthsrr0", XSPR(31,467,314), XSPR_MASK, POWER10, 0, {RS}}, {"mtiac3", XSPR(31,467,314), XSPR_MASK, BOOKE, 0, {RS}}, +{"mthsrr1", XSPR(31,467,315), XSPR_MASK, POWER10, 0, {RS}}, {"mtiac4", XSPR(31,467,315), XSPR_MASK, BOOKE, 0, {RS}}, {"mtdac1", XSPR(31,467,316), XSPR_MASK, BOOKE, 0, {RS}}, {"mtdac2", XSPR(31,467,317), XSPR_MASK, BOOKE, 0, {RS}}, +{"mtlpcr", XSPR(31,467,318), XSPR_MASK, POWER10, 0, {RS}}, {"mtdvc1", XSPR(31,467,318), XSPR_MASK, BOOKE, 0, {RS}}, +{"mtlpidr", XSPR(31,467,319), XSPR_MASK, POWER10, 0, {RS}}, {"mtdvc2", XSPR(31,467,319), XSPR_MASK, BOOKE, 0, {RS}}, +{"mthmer", XSPR(31,467,336), XSPR_MASK, POWER7, 0, {RS}}, {"mttsr", XSPR(31,467,336), XSPR_MASK, BOOKE, 0, {RS}}, +{"mthmeer", XSPR(31,467,337), XSPR_MASK, POWER7, 0, {RS}}, +{"mtpcr", XSPR(31,467,338), XSPR_MASK, POWER10, 0, {RS}}, +{"mtheir", XSPR(31,467,339), XSPR_MASK, POWER10, 0, {RS}}, {"mttcr", XSPR(31,467,340), XSPR_MASK, BOOKE, 0, {RS}}, +{"mtamor", XSPR(31,467,349), XSPR_MASK, POWER7, 0, {RS}}, {"mtivor0", XSPR(31,467,400), XSPR_MASK, BOOKE, 0, {RS}}, {"mtivor1", XSPR(31,467,401), XSPR_MASK, BOOKE, 0, {RS}}, {"mtivor2", XSPR(31,467,402), XSPR_MASK, BOOKE, 0, {RS}}, @@ -6607,6 +7329,13 @@ {"mtivor13", XSPR(31,467,413), XSPR_MASK, BOOKE, 0, {RS}}, {"mtivor14", XSPR(31,467,414), XSPR_MASK, BOOKE, 0, {RS}}, {"mtivor15", XSPR(31,467,415), XSPR_MASK, BOOKE, 0, {RS}}, +{"mtptcr", XSPR(31,467,464), XSPR_MASK, POWER10, 0, {RS}}, +{"mtuspgr0", XSPR(31,467,496), XSPR_MASK, POWER10, 0, {RS}}, +{"mtuspgr1", XSPR(31,467,497), XSPR_MASK, POWER10, 0, {RS}}, +{"mturmor", XSPR(31,467,505), XSPR_MASK, POWER10, 0, {RS}}, +{"mtusrr0", XSPR(31,467,506), XSPR_MASK, POWER10, 0, {RS}}, +{"mtusrr1", XSPR(31,467,507), XSPR_MASK, POWER10, 0, {RS}}, +{"mtsmfctrl", XSPR(31,467,511), XSPR_MASK, POWER10, 0, {RS}}, {"mtspefscr", XSPR(31,467,512), XSPR_MASK, PPCSPE, 0, {RS}}, {"mtbbear", XSPR(31,467,513), XSPR_MASK, PPCBRLK, 0, {RS}}, {"mtbbtar", XSPR(31,467,514), XSPR_MASK, PPCBRLK, 0, {RS}}, @@ -6621,12 +7350,44 @@ {"mtmcsrr0", XSPR(31,467,570), XSPR_MASK, PPCRFMCI, 0, {RS}}, {"mtmcsrr1", XSPR(31,467,571), XSPR_MASK, PPCRFMCI, 0, {RS}}, {"mtmcsr", XSPR(31,467,572), XSPR_MASK, PPCRFMCI, 0, {RS}}, +{"mtsier2", XSPR(31,467,752), XSPR_MASK, POWER10, 0, {RS}}, +{"mtsier3", XSPR(31,467,753), XSPR_MASK, POWER10, 0, {RS}}, +{"mtmmcr3", XSPR(31,467,754), XSPR_MASK, POWER10, 0, {RS}}, +{"mtummcr2", XSPR(31,467,769), XSPR_MASK, POWER9, 0, {RS}}, +{"mtmmcr2", XSPR(31,467,769), XSPR_MASK, POWER9, 0, {RS}}, +{"mtummcra", XSPR(31,467,770), XSPR_MASK, POWER9, 0, {RS}}, {"mtupmc1", XSPR(31,467,771), XSPR_MASK, POWER9, 0, {RS}}, {"mtupmc2", XSPR(31,467,772), XSPR_MASK, POWER9, 0, {RS}}, {"mtupmc3", XSPR(31,467,773), XSPR_MASK, POWER9, 0, {RS}}, {"mtupmc4", XSPR(31,467,774), XSPR_MASK, POWER9, 0, {RS}}, {"mtupmc5", XSPR(31,467,775), XSPR_MASK, POWER9, 0, {RS}}, {"mtupmc6", XSPR(31,467,776), XSPR_MASK, POWER9, 0, {RS}}, +{"mtummcr0", XSPR(31,467,779), XSPR_MASK, POWER9, 0, {RS}}, +{"mtsier", XSPR(31,467,784), XSPR_MASK, POWER10, 0, {RS}}, +{"mtmmcra", XSPR(31,467,786), XSPR_MASK, POWER7, 0, {RS}}, +{"mtpmc1", XSPR(31,467,787), XSPR_MASK, POWER7, 0, {RS}}, +{"mtpmc2", XSPR(31,467,788), XSPR_MASK, POWER7, 0, {RS}}, +{"mtpmc3", XSPR(31,467,789), XSPR_MASK, POWER7, 0, {RS}}, +{"mtpmc4", XSPR(31,467,790), XSPR_MASK, POWER7, 0, {RS}}, +{"mtpmc5", XSPR(31,467,791), XSPR_MASK, POWER7, 0, {RS}}, +{"mtpmc6", XSPR(31,467,792), XSPR_MASK, POWER7, 0, {RS}}, +{"mtmmcr0", XSPR(31,467,795), XSPR_MASK, POWER7, 0, {RS}}, +{"mtsiar", XSPR(31,467,796), XSPR_MASK, POWER10, 0, {RS}}, +{"mtsdar", XSPR(31,467,797), XSPR_MASK, POWER10, 0, {RS}}, +{"mtmmcr1", XSPR(31,467,798), XSPR_MASK, POWER7, 0, {RS}}, +{"mtbescrs", XSPR(31,467,800), XSPR_MASK, POWER9, 0, {RS}}, +{"mtbescrsu", XSPR(31,467,801), XSPR_MASK, POWER9, 0, {RS}}, +{"mtbescrr", XSPR(31,467,802), XSPR_MASK, POWER9, 0, {RS}}, +{"mtbescrru", XSPR(31,467,803), XSPR_MASK, POWER9, 0, {RS}}, +{"mtebbhr", XSPR(31,467,804), XSPR_MASK, POWER9, 0, {RS}}, +{"mtebbrr", XSPR(31,467,805), XSPR_MASK, POWER9, 0, {RS}}, +{"mtbescr", XSPR(31,467,806), XSPR_MASK, POWER9, 0, {RS}}, +{"mttar", XSPR(31,467,815), XSPR_MASK, POWER9, 0, {RS}}, +{"mtasdr", XSPR(31,467,816), XSPR_MASK, POWER10, 0, {RS}}, +{"mtpsscr", XSPR(31,467,823), XSPR_MASK, POWER10, 0, {RS}}, +{"mtic", XSPR(31,467,848), XSPR_MASK, POWER8, 0, {RS}}, +{"mtvtb", XSPR(31,467,849), XSPR_MASK, POWER8, 0, {RS}}, +{"mthpsscr", XSPR(31,467,855), XSPR_MASK, POWER10, 0, {RS}}, {"mtivndx", XSPR(31,467,880), XSPR_MASK, TITAN, 0, {RS}}, {"mtdvndx", XSPR(31,467,881), XSPR_MASK, TITAN, 0, {RS}}, {"mtivlim", XSPR(31,467,882), XSPR_MASK, TITAN, 0, {RS}}, @@ -6709,6 +7470,8 @@ {"nand", XRC(31,476,0), X_MASK, COM, 0, {RA, RS, RB}}, {"nand.", XRC(31,476,1), X_MASK, COM, 0, {RA, RS, RB}}, +{"setnbcr", X(31,480), XRB_MASK, POWER10, 0, {RT, BI}}, + {"dsn", X(31,483), XRT_MASK, E500MC, 0, {RA, RB}}, {"dcread", X(31,486), X_MASK, PPC403|PPC440, PPCA2, {RT, RA0, RB}}, @@ -6812,6 +7575,8 @@ {"cnttzd", XRC(31,570,0), XRB_MASK, POWER9, 0, {RA, RS}}, {"cnttzd.", XRC(31,570,1), XRB_MASK, POWER9, 0, {RA, RS}}, +{"cnttzdm", X(31,571), X_MASK, POWER10, 0, {RA, RS, RB}}, + {"mcrxrx", X(31,576), XBFRARB_MASK, POWER9, 0, {BF}}, {"lwdcbx", X(31,578), X_MASK, E200Z4, 0, {RT, RA, RB}}, @@ -6833,8 +7598,14 @@ {"hwsync", XSYNC(31,598,0), 0xffffffff, POWER4, BOOKE|PPC476, {0}}, {"lwsync", XSYNC(31,598,1), 0xffffffff, PPC, E500, {0}}, {"ptesync", XSYNC(31,598,2), 0xffffffff, PPC64, 0, {0}}, +{"phwsync", XSYNCLS(31,598,4,0), 0xffffffff, POWER10, 0, {0}}, +{"plwsync", XSYNCLS(31,598,5,0), 0xffffffff, POWER10, 0, {0}}, +{"stncisync", XSYNCLS(31,598,1,1), 0xffffffff, POWER10, 0, {0}}, +{"stcisync", XSYNCLS(31,598,0,2), 0xffffffff, POWER10, 0, {0}}, +{"stsync", XSYNCLS(31,598,0,3), 0xffffffff, POWER10, 0, {0}}, +{"sync", X(31,598), XSYNCLS_MASK, POWER10, BOOKE|PPC476, {LS3, SC2}}, {"sync", X(31,598), XSYNCLE_MASK, E6500, 0, {LS, ESYNC}}, -{"sync", X(31,598), XSYNC_MASK, PPCCOM, BOOKE|PPC476, {LS}}, +{"sync", X(31,598), XSYNC_MASK, PPCCOM, POWER10|BOOKE|PPC476, {LS}}, {"msync", X(31,598), 0xffffffff, BOOKE|PPCA2|PPC476, 0, {0}}, {"sync", X(31,598), 0xffffffff, BOOKE|PPC476, E6500, {0}}, {"lwsync", X(31,598), 0xffffffff, E500, 0, {0}}, @@ -7085,7 +7856,9 @@ {"tlbsrx.", XRC(31,850,1), XRT_MASK, PPCA2, 0, {RA0, RB}}, -{"slbiag", X(31,850), XRARB_MASK, POWER9, 0, {RS}}, +{"slbiag", X(31,850), XRLARB_MASK, POWER10, 0, {RS, A_L}}, +{"slbiag", X(31,850), XRARB_MASK, POWER9, POWER10, {RS}}, + {"slbmfev", X(31,851), XRLA_MASK, POWER9, 0, {RT, RB, A_L}}, {"slbmfev", X(31,851), XRA_MASK, PPC64, POWER9, {RT, RB}}, @@ -7121,7 +7894,8 @@ {"extswsli", XS(31,445,0), XS_MASK, POWER9, 0, {RA, RS, SH6}}, {"extswsli.", XS(31,445,1), XS_MASK, POWER9, 0, {RA, RS, SH6}}, -{"paste.", XRCL(31,902,1,1),XRT_MASK, POWER9, 0, {RA0, RB}}, +{"paste.", XRC(31,902,1), XLRT_MASK, POWER10, 0, {RA0, RB, L1OPT}}, +{"paste.", XRCL(31,902,1,1),XRT_MASK, POWER9, POWER10, {RA0, RB}}, {"stvlxl", X(31,903), X_MASK, CELL, 0, {VS, RA0, RB}}, {"stdfcmux", APU(31,903,0), APU_MASK, PPC405, 0, {FCRT, RA, RB}}, @@ -7258,10 +8032,6 @@ {"dcbzl", XOPL(31,1014,1), XRT_MASK, POWER4|E500MC, PPC476, {RA0, RB}}, -{"cctpl", 0x7c210b78, 0xffffffff, CELL, 0, {0}}, -{"cctpm", 0x7c421378, 0xffffffff, CELL, 0, {0}}, -{"cctph", 0x7c631b78, 0xffffffff, CELL, 0, {0}}, - {"dstt", XDSS(31,342,1), XDSS_MASK, PPCVEC, 0, {RA, RB, STRM}}, {"dststt", XDSS(31,374,1), XDSS_MASK, PPCVEC, 0, {RA, RB, STRM}}, {"dssall", XDSS(31,822,1), XDSS_MASK, PPCVEC, 0, {0}}, @@ -7345,6 +8115,9 @@ {"dqua", ZRC(59,3,0), Z2_MASK, POWER6, PPCVLE, {FRT,FRA,FRB,RMC}}, {"dqua.", ZRC(59,3,1), Z2_MASK, POWER6, PPCVLE, {FRT,FRA,FRB,RMC}}, +{"xvi8ger4pp", XX3(59,2), XX3_MASK|3<<21, POWER10, PPCVLE, {ACC, XA6a, XB6a}}, +{"xvi8ger4", XX3(59,3), XX3_MASK|3<<21, POWER10, PPCVLE, {ACC, XA6a, XB6a}}, + {"fdivs", A(59,18,0), AFRC_MASK, PPC, PPCEFS|PPCVLE, {FRT, FRA, FRB}}, {"fdivs.", A(59,18,1), AFRC_MASK, PPC, PPCEFS|PPCVLE, {FRT, FRA, FRB}}, @@ -7394,21 +8167,41 @@ {"dquai", ZRC(59,67,0), Z2_MASK, POWER6, PPCVLE, {TE, FRT,FRB,RMC}}, {"dquai.", ZRC(59,67,1), Z2_MASK, POWER6, PPCVLE, {TE, FRT,FRB,RMC}}, +{"xvf16ger2pp", XX3(59,18), XX3_MASK|3<<21, POWER10, PPCVLE, {ACC, XA6a, XB6a}}, +{"xvf16ger2", XX3(59,19), XX3_MASK|3<<21, POWER10, PPCVLE, {ACC, XA6a, XB6a}}, + {"dscri", ZRC(59,98,0), Z_MASK, POWER6, PPCVLE, {FRT, FRA, SH16}}, {"dscri.", ZRC(59,98,1), Z_MASK, POWER6, PPCVLE, {FRT, FRA, SH16}}, {"drintx", ZRC(59,99,0), Z2_MASK, POWER6, PPCVLE, {R, FRT, FRB, RMC}}, {"drintx.", ZRC(59,99,1), Z2_MASK, POWER6, PPCVLE, {R, FRT, FRB, RMC}}, +{"xvf32gerpp", XX3(59,26), XX3_MASK|3<<21, POWER10, PPCVLE, {ACC, XA6a, XB6a}}, +{"xvf32ger", XX3(59,27), XX3_MASK|3<<21, POWER10, PPCVLE, {ACC, XA6a, XB6a}}, + {"dcmpo", X(59,130), X_MASK, POWER6, PPCVLE, {BF, FRA, FRB}}, +{"xvi4ger8pp", XX3(59,34), XX3_MASK|3<<21, POWER10, PPCVLE, {ACC, XA6a, XB6a}}, +{"xvi4ger8", XX3(59,35), XX3_MASK|3<<21, POWER10, PPCVLE, {ACC, XA6a, XB6a}}, + {"dtstex", X(59,162), X_MASK, POWER6, PPCVLE, {BF, FRA, FRB}}, + +{"xvi16ger2spp", XX3(59,42), XX3_MASK|3<<21, POWER10, PPCVLE, {ACC, XA6a, XB6a}}, +{"xvi16ger2s", XX3(59,43), XX3_MASK|3<<21, POWER10, PPCVLE, {ACC, XA6a, XB6a}}, + {"dtstdc", Z(59,194), Z_MASK, POWER6, PPCVLE, {BF, FRA, DCM}}, + +{"xvbf16ger2pp",XX3(59,50), XX3_MASK|3<<21, POWER10, PPCVLE, {ACC, XA6a, XB6a}}, +{"xvbf16ger2", XX3(59,51), XX3_MASK|3<<21, POWER10, PPCVLE, {ACC, XA6a, XB6a}}, + {"dtstdg", Z(59,226), Z_MASK, POWER6, PPCVLE, {BF, FRA, DGM}}, {"drintn", ZRC(59,227,0), Z2_MASK, POWER6, PPCVLE, {R, FRT, FRB, RMC}}, {"drintn.", ZRC(59,227,1), Z2_MASK, POWER6, PPCVLE, {R, FRT, FRB, RMC}}, +{"xvf64gerpp", XX3(59,58), XX3_MASK|3<<21, POWER10, PPCVLE, {ACC, XA6ap, XB6a}}, +{"xvf64ger", XX3(59,59), XX3_MASK|3<<21, POWER10, PPCVLE, {ACC, XA6ap, XB6a}}, + {"dctdp", XRC(59,258,0), X_MASK, POWER6, PPCVLE, {FRT, FRB}}, {"dctdp.", XRC(59,258,1), X_MASK, POWER6, PPCVLE, {FRT, FRB}}, @@ -7418,20 +8211,42 @@ {"ddedpd", XRC(59,322,0), X_MASK, POWER6, PPCVLE, {SP, FRT, FRB}}, {"ddedpd.", XRC(59,322,1), X_MASK, POWER6, PPCVLE, {SP, FRT, FRB}}, +{"xvi16ger2", XX3(59,75), XX3_MASK|3<<21, POWER10, PPCVLE, {ACC, XA6a, XB6a}}, + +{"xvf16ger2np", XX3(59,82), XX3_MASK|3<<21, POWER10, PPCVLE, {ACC, XA6a, XB6a}}, + {"dxex", XRC(59,354,0), X_MASK, POWER6, PPCVLE, {FRT, FRB}}, {"dxex.", XRC(59,354,1), X_MASK, POWER6, PPCVLE, {FRT, FRB}}, +{"xvf32gernp", XX3(59,90), XX3_MASK|3<<21, POWER10, PPCVLE, {ACC, XA6a, XB6a}}, + +{"xvi8ger4spp", XX3(59,99), XX3_MASK|3<<21, POWER10, PPCVLE, {ACC, XA6a, XB6a}}, + +{"xvi16ger2pp", XX3(59,107), XX3_MASK|3<<21, POWER10, PPCVLE, {ACC, XA6a, XB6a}}, + +{"xvbf16ger2np",XX3(59,114), XX3_MASK|3<<21, POWER10, PPCVLE, {ACC, XA6a, XB6a}}, + +{"xvf64gernp", XX3(59,122), XX3_MASK|3<<21, POWER10, PPCVLE, {ACC, XA6ap, XB6a}}, + {"dsub", XRC(59,514,0), X_MASK, POWER6, PPCVLE, {FRT, FRA, FRB}}, {"dsub.", XRC(59,514,1), X_MASK, POWER6, PPCVLE, {FRT, FRA, FRB}}, {"ddiv", XRC(59,546,0), X_MASK, POWER6, PPCVLE, {FRT, FRA, FRB}}, {"ddiv.", XRC(59,546,1), X_MASK, POWER6, PPCVLE, {FRT, FRA, FRB}}, +{"xvf16ger2pn", XX3(59,146), XX3_MASK|3<<21, POWER10, PPCVLE, {ACC, XA6a, XB6a}}, + +{"xvf32gerpn", XX3(59,154), XX3_MASK|3<<21, POWER10, PPCVLE, {ACC, XA6a, XB6a}}, + {"dcmpu", X(59,642), X_MASK, POWER6, PPCVLE, {BF, FRA, FRB}}, {"dtstsf", X(59,674), X_MASK, POWER6, PPCVLE, {BF, FRA, FRB}}, {"dtstsfi", X(59,675), X_MASK|1<<22,POWER9, PPCVLE, {BF, UIM6, FRB}}, +{"xvbf16ger2pn",XX3(59,178), XX3_MASK|3<<21, POWER10, PPCVLE, {ACC, XA6a, XB6a}}, + +{"xvf64gerpn", XX3(59,186), XX3_MASK|3<<21, POWER10, PPCVLE, {ACC, XA6ap, XB6a}}, + {"drsp", XRC(59,770,0), X_MASK, POWER6, PPCVLE, {FRT, FRB}}, {"drsp.", XRC(59,770,1), X_MASK, POWER6, PPCVLE, {FRT, FRB}}, @@ -7441,15 +8256,23 @@ {"denbcd", XRC(59,834,0), X_MASK, POWER6, PPCVLE, {S, FRT, FRB}}, {"denbcd.", XRC(59,834,1), X_MASK, POWER6, PPCVLE, {S, FRT, FRB}}, +{"xvf16ger2nn", XX3(59,210), XX3_MASK|3<<21, POWER10, PPCVLE, {ACC, XA6a, XB6a}}, + {"fcfids", XRC(59,846,0), XRA_MASK, POWER7|PPCA2, PPCVLE, {FRT, FRB}}, {"fcfids.", XRC(59,846,1), XRA_MASK, POWER7|PPCA2, PPCVLE, {FRT, FRB}}, {"diex", XRC(59,866,0), X_MASK, POWER6, PPCVLE, {FRT, FRA, FRB}}, {"diex.", XRC(59,866,1), X_MASK, POWER6, PPCVLE, {FRT, FRA, FRB}}, +{"xvf32gernn", XX3(59,218), XX3_MASK|3<<21, POWER10, PPCVLE, {ACC, XA6a, XB6a}}, + +{"xvbf16ger2nn",XX3(59,242), XX3_MASK|3<<21, POWER10, PPCVLE, {ACC, XA6a, XB6a}}, + {"fcfidus", XRC(59,974,0), XRA_MASK, POWER7|PPCA2, PPCVLE, {FRT, FRB}}, {"fcfidus.", XRC(59,974,1), XRA_MASK, POWER7|PPCA2, PPCVLE, {FRT, FRB}}, +{"xvf64gernn", XX3(59,250), XX3_MASK|3<<21, POWER10, PPCVLE, {ACC, XA6ap, XB6a}}, + {"xsaddsp", XX3(60,0), XX3_MASK, PPCVSX2, PPCVLE, {XT6, XA6, XB6}}, {"xsmaddasp", XX3(60,1), XX3_MASK, PPCVSX2, PPCVLE, {XT6, XA6, XB6}}, {"xxsldwi", XX3(60,2), XX3SHW_MASK, PPCVSX, PPCVLE, {XT6, XA6, XB6, SHW}}, @@ -7526,6 +8349,7 @@ {"xvdivsp", XX3(60,88), XX3_MASK, PPCVSX, PPCVLE, {XT6, XA6, XB6}}, {"xvmsubmsp", XX3(60,89), XX3_MASK, PPCVSX, PPCVLE, {XT6, XA6, XB6}}, {"xxspltib", X(60,360), XX1_MASK|3<<19, PPCVSX3, PPCVLE, {XT6, IMM8}}, +{"lxvkq", XVA(60,360,31), XVA_MASK&~1, POWER10, PPCVLE, {XT6, UIM5}}, {"xxinsertw", XX2(60,181), XX2UIM4_MASK, PPCVSX3, PPCVLE, {XT6, XB6, UIMM4}}, {"xvcvsxwsp", XX2(60,184), XX2_MASK, PPCVSX, PPCVLE, {XT6, XB6}}, {"xvrspim", XX2(60,185), XX2_MASK, PPCVSX, PPCVLE, {XT6, XB6}}, @@ -7623,17 +8447,24 @@ {"xvnmaddadp", XX3(60,225), XX3_MASK, PPCVSX, PPCVLE, {XT6, XA6, XB6}}, {"xvcvdpuxds", XX2(60,456), XX2_MASK, PPCVSX, PPCVLE, {XT6, XB6}}, {"xvcvspdp", XX2(60,457), XX2_MASK, PPCVSX, PPCVLE, {XT6, XB6}}, +{"xxgenpcvbm", X(60,916), XX1_MASK, POWER10, PPCVLE, {XT6, VB, UIMM}}, +{"xxgenpcvhm", X(60,917), XX1_MASK, POWER10, PPCVLE, {XT6, VB, UIMM}}, {"xsiexpdp", X(60,918), XX1_MASK, PPCVSX3, PPCVLE, {XT6, RA, RB}}, {"xvmindp", XX3(60,232), XX3_MASK, PPCVSX, PPCVLE, {XT6, XA6, XB6}}, {"xvnmaddmdp", XX3(60,233), XX3_MASK, PPCVSX, PPCVLE, {XT6, XA6, XB6}}, {"xvcvdpsxds", XX2(60,472), XX2_MASK, PPCVSX, PPCVLE, {XT6, XB6}}, {"xvabsdp", XX2(60,473), XX2_MASK, PPCVSX, PPCVLE, {XT6, XB6}}, +{"xxgenpcvwm", X(60,948), XX1_MASK, POWER10, PPCVLE, {XT6, VB, UIMM}}, +{"xxgenpcvdm", X(60,949), XX1_MASK, POWER10, PPCVLE, {XT6, VB, UIMM}}, {"xvxexpdp", XX2VA(60,475,0),XX2_MASK, PPCVSX3, PPCVLE, {XT6, XB6}}, {"xvxsigdp", XX2VA(60,475,1),XX2_MASK, PPCVSX3, PPCVLE, {XT6, XB6}}, +{"xvtlsbb", XX2VA(60,475,2),XX2BF_MASK, POWER10, PPCVLE, {BF, XB6}}, {"xxbrh", XX2VA(60,475,7),XX2_MASK, PPCVSX3, PPCVLE, {XT6, XB6}}, {"xvxexpsp", XX2VA(60,475,8),XX2_MASK, PPCVSX3, PPCVLE, {XT6, XB6}}, {"xvxsigsp", XX2VA(60,475,9),XX2_MASK, PPCVSX3, PPCVLE, {XT6, XB6}}, {"xxbrw", XX2VA(60,475,15),XX2_MASK, PPCVSX3, PPCVLE, {XT6, XB6}}, +{"xvcvbf16spn", XX2VA(60,475,16),XX2_MASK, PPCVSX4, PPCVLE, {XT6, XB6}}, +{"xvcvspbf16", XX2VA(60,475,17),XX2_MASK, PPCVSX4, PPCVLE, {XT6, XB6}}, {"xxbrd", XX2VA(60,475,23),XX2_MASK, PPCVSX3, PPCVLE, {XT6, XB6}}, {"xvcvhpsp", XX2VA(60,475,24),XX2_MASK, PPCVSX3, PPCVLE, {XT6, XB6}}, {"xvcvsphp", XX2VA(60,475,25),XX2_MASK, PPCVSX3, PPCVLE, {XT6, XB6}}, @@ -7777,6 +8608,8 @@ {"dquaiq", ZRC(63,67,0), Z2_MASK|Q_MASK, POWER6, PPCVLE, {TE, FRTp, FRBp, RMC}}, {"dquaiq.", ZRC(63,67,1), Z2_MASK|Q_MASK, POWER6, PPCVLE, {TE, FRTp, FRBp, RMC}}, +{"xscmpeqqp", X(63,68), X_MASK, POWER10, PPCVLE, {VD, VA, VB}}, + {"mtfsb0", XRC(63,70,0), XRARB_MASK, COM, PPCVLE, {BTF}}, {"mtfsb0.", XRC(63,70,1), XRARB_MASK, COM, PPCVLE, {BTF}}, @@ -7817,11 +8650,16 @@ {"xscmpexpqp", X(63,164), XBF_MASK, PPCVSX3, PPCVLE, {BF, VA, VB}}, {"dtstdcq", Z(63,194), Z_MASK, POWER6, PPCVLE, {BF, FRAp, DCM}}, + +{"xscmpgeqp", X(63,196), X_MASK, POWER10, PPCVLE, {VD, VA, VB}}, + {"dtstdgq", Z(63,226), Z_MASK, POWER6, PPCVLE, {BF, FRAp, DGM}}, {"drintnq", ZRC(63,227,0), Z2_MASK|Q_MASK, POWER6, PPCVLE, {R, FRTp, FRBp, RMC}}, {"drintnq.", ZRC(63,227,1), Z2_MASK|Q_MASK, POWER6, PPCVLE, {R, FRTp, FRBp, RMC}}, +{"xscmpgtqp", X(63,228), X_MASK, POWER10, PPCVLE, {VD, VA, VB}}, + {"dctqpq", XRC(63,258,0), X_MASK|Q_MASK, POWER6, PPCVLE, {FRTp, FRB}}, {"dctqpq.", XRC(63,258,1), X_MASK|Q_MASK, POWER6, PPCVLE, {FRTp, FRB}}, @@ -7890,6 +8728,8 @@ {"dtstsfq", X(63,674), X_MASK, POWER6, PPCVLE, {BF, FRA, FRBp}}, {"dtstsfiq", X(63,675), X_MASK|1<<22,POWER9, PPCVLE, {BF, UIM6, FRBp}}, +{"xsmaxcqp", X(63,676), X_MASK, POWER10, PPCVLE, {VD, VA, VB}}, + {"xststdcqp", X(63,708), X_MASK, PPCVSX3, PPCVLE, {BF, VB, DCMX}}, {"mtfsf", XFL(63,711,0), XFL_MASK, POWER6|PPCA2|PPC476, PPCVLE, {FLM, FRB, XFL_L, W}}, @@ -7897,6 +8737,8 @@ {"mtfsf.", XFL(63,711,1), XFL_MASK, POWER6|PPCA2|PPC476, PPCVLE, {FLM, FRB, XFL_L, W}}, {"mtfsf.", XFL(63,711,1), XFL_MASK, COM, POWER6|PPCA2|PPC476|PPCEFS|PPCVLE, {FLM, FRB}}, +{"xsmincqp", X(63,740), X_MASK, POWER10, PPCVLE, {VD, VA, VB}}, + {"drdpq", XRC(63,770,0), X_MASK|Q_MASK, POWER6, PPCVLE, {FRTp, FRBp}}, {"drdpq.", XRC(63,770,1), X_MASK|Q_MASK, POWER6, PPCVLE, {FRTp, FRBp}}, @@ -7924,10 +8766,14 @@ {"denbcdq", XRC(63,834,0), X_MASK|Q_MASK, POWER6, PPCVLE, {S, FRTp, FRBp}}, {"denbcdq.", XRC(63,834,1), X_MASK|Q_MASK, POWER6, PPCVLE, {S, FRTp, FRBp}}, +{"xscvqpuqz", XVA(63,836,0), XVA_MASK, POWER10, PPCVLE, {VD, VB}}, {"xscvqpuwz", XVA(63,836,1), XVA_MASK, PPCVSX3, PPCVLE, {VD, VB}}, {"xscvudqp", XVA(63,836,2), XVA_MASK, PPCVSX3, PPCVLE, {VD, VB}}, +{"xscvuqqp", XVA(63,836,3), XVA_MASK, POWER10, PPCVLE, {VD, VB}}, +{"xscvqpsqz", XVA(63,836,8), XVA_MASK, POWER10, PPCVLE, {VD, VB}}, {"xscvqpswz", XVA(63,836,9), XVA_MASK, PPCVSX3, PPCVLE, {VD, VB}}, {"xscvsdqp", XVA(63,836,10), XVA_MASK, PPCVSX3, PPCVLE, {VD, VB}}, +{"xscvsqqp", XVA(63,836,11), XVA_MASK, POWER10, PPCVLE, {VD, VB}}, {"xscvqpudz", XVA(63,836,17), XVA_MASK, PPCVSX3, PPCVLE, {VD, VB}}, {"xscvqpdp", XVARC(63,836,20,0), XVA_MASK, PPCVSX3, PPCVLE, {VD, VB}}, {"xscvqpdpo", XVARC(63,836,20,1), XVA_MASK, PPCVSX3, PPCVLE, {VD, VB}}, @@ -7956,6 +8802,9 @@ {"fcfidu", XRC(63,974,0), XRA_MASK, POWER7|PPCA2, PPCVLE, {FRT, FRB}}, {"fcfidu.", XRC(63,974,1), XRA_MASK, POWER7|PPCA2, PPCVLE, {FRT, FRB}}, + +{"dcffixqq", XVA(63,994,0), XVA_MASK, POWER10, PPCVLE, {FRTp, VB}}, +{"dctfixqq", XVA(63,994,1), XVA_MASK, POWER10, PPCVLE, {VD, FRBp}}, }; const unsigned int powerpc_num_opcodes = @@ -7966,33 +8815,73 @@ The format of this opcode table is the same as the main opcode table. */ const struct powerpc_opcode prefix_opcodes[] = { -{"pnop", PMRR, PREFIX_MASK, POWERXX, 0, {0}}, -{"pli", PMLS|OP(14), P_DRAPCREL_MASK, POWERXX, 0, {RT, SI34}}, -{"paddi", PMLS|OP(14), P_D_MASK, POWERXX, 0, {RT, RA0, SI34, PCREL0}}, -{"psubi", PMLS|OP(14), P_D_MASK, POWERXX, 0, {RT, RA0, NSI34, PCREL0}}, -{"pla", PMLS|OP(14), P_D_MASK, POWERXX, 0, {RT, D34, PRA0, PCREL}}, -{"plwz", PMLS|OP(32), P_D_MASK, POWERXX, 0, {RT, D34, PRA0, PCREL}}, -{"plbz", PMLS|OP(34), P_D_MASK, POWERXX, 0, {RT, D34, PRA0, PCREL}}, -{"pstw", PMLS|OP(36), P_D_MASK, POWERXX, 0, {RS, D34, PRA0, PCREL}}, -{"pstb", PMLS|OP(38), P_D_MASK, POWERXX, 0, {RS, D34, PRA0, PCREL}}, -{"plhz", PMLS|OP(40), P_D_MASK, POWERXX, 0, {RT, D34, PRA0, PCREL}}, -{"plwa", P8LS|OP(41), P_D_MASK, POWERXX, 0, {RT, D34, PRA0, PCREL}}, -{"plxsd", P8LS|OP(42), P_D_MASK, POWERXX, 0, {VD, D34, PRA0, PCREL}}, -{"plha", PMLS|OP(42), P_D_MASK, POWERXX, 0, {RT, D34, PRA0, PCREL}}, -{"plxssp", P8LS|OP(43), P_D_MASK, POWERXX, 0, {VD, D34, PRA0, PCREL}}, -{"psth", PMLS|OP(44), P_D_MASK, POWERXX, 0, {RS, D34, PRA0, PCREL}}, -{"pstxsd", P8LS|OP(46), P_D_MASK, POWERXX, 0, {VS, D34, PRA0, PCREL}}, -{"pstxssp", P8LS|OP(47), P_D_MASK, POWERXX, 0, {VS, D34, PRA0, PCREL}}, -{"plfs", PMLS|OP(48), P_D_MASK, POWERXX, 0, {FRT, D34, PRA0, PCREL}}, -{"plxv", P8LS|OP(50), P_D_MASK&~OP(1), POWERXX, 0, {XTOP, D34, PRA0, PCREL}}, -{"plfd", PMLS|OP(50), P_D_MASK, POWERXX, 0, {FRT, D34, PRA0, PCREL}}, -{"pstfs", PMLS|OP(52), P_D_MASK, POWERXX, 0, {FRS, D34, PRA0, PCREL}}, -{"pstxv", P8LS|OP(54), P_D_MASK&~OP(1), POWERXX, 0, {XTOP, D34, PRA0, PCREL}}, -{"pstfd", PMLS|OP(54), P_D_MASK, POWERXX, 0, {FRS, D34, PRA0, PCREL}}, -{"plq", P8LS|OP(56), P_D_MASK, POWERXX, 0, {RTQ, D34, PRAQ, PCREL}}, -{"pld", P8LS|OP(57), P_D_MASK, POWERXX, 0, {RT, D34, PRA0, PCREL}}, -{"pstq", P8LS|OP(60), P_D_MASK, POWERXX, 0, {RSQ, D34, PRA0, PCREL}}, -{"pstd", P8LS|OP(61), P_D_MASK, POWERXX, 0, {RS, D34, PRA0, PCREL}}, +{"pnop", PMRR, PREFIX_MASK, POWER10, 0, {0}}, +{"pli", PMLS|OP(14), P_DRAPCREL_MASK, POWER10, 0, {RT, SI34}}, +{"paddi", PMLS|OP(14), P_D_MASK, POWER10, 0, {RT, RA0, SI34, PCREL0}}, +{"psubi", PMLS|OP(14), P_D_MASK, POWER10, 0, {RT, RA0, NSI34, PCREL0}}, +{"pla", PMLS|OP(14), P_D_MASK, POWER10, 0, {RT, D34, PRA0, PCREL}}, +{"xxsplti32dx", P8RR|VSOP(32,0), P_VSI_MASK, POWER10, 0, {XTS, IX, IMM32}}, +{"xxspltidp", P8RR|VSOP(32,2), P_VS_MASK, POWER10, 0, {XTS, IMM32}}, +{"xxspltiw", P8RR|VSOP(32,3), P_VS_MASK, POWER10, 0, {XTS, IMM32}}, +{"plwz", PMLS|OP(32), P_D_MASK, POWER10, 0, {RT, D34, PRA0, PCREL}}, +{"xxblendvb", P8RR|XX4(33,0), P_XX4_MASK, POWER10, 0, {XT6, XA6, XB6, XC6}}, +{"xxblendvh", P8RR|XX4(33,1), P_XX4_MASK, POWER10, 0, {XT6, XA6, XB6, XC6}}, +{"xxblendvw", P8RR|XX4(33,2), P_XX4_MASK, POWER10, 0, {XT6, XA6, XB6, XC6}}, +{"xxblendvd", P8RR|XX4(33,3), P_XX4_MASK, POWER10, 0, {XT6, XA6, XB6, XC6}}, +{"xxpermx", P8RR|XX4(34,0), P_UXX4_MASK, POWER10, 0, {XT6, XA6, XB6, XC6, UIM3}}, +{"xxeval", P8RR|XX4(34,1), P_U8XX4_MASK, POWER10, 0, {XT6, XA6, XB6, XC6, UIM8}}, +{"plbz", PMLS|OP(34), P_D_MASK, POWER10, 0, {RT, D34, PRA0, PCREL}}, +{"pstw", PMLS|OP(36), P_D_MASK, POWER10, 0, {RS, D34, PRA0, PCREL}}, +{"pstb", PMLS|OP(38), P_D_MASK, POWER10, 0, {RS, D34, PRA0, PCREL}}, +{"plhz", PMLS|OP(40), P_D_MASK, POWER10, 0, {RT, D34, PRA0, PCREL}}, +{"plwa", P8LS|OP(41), P_D_MASK, POWER10, 0, {RT, D34, PRA0, PCREL}}, +{"plxsd", P8LS|OP(42), P_D_MASK, POWER10, 0, {VD, D34, PRA0, PCREL}}, +{"plha", PMLS|OP(42), P_D_MASK, POWER10, 0, {RT, D34, PRA0, PCREL}}, +{"plxssp", P8LS|OP(43), P_D_MASK, POWER10, 0, {VD, D34, PRA0, PCREL}}, +{"psth", PMLS|OP(44), P_D_MASK, POWER10, 0, {RS, D34, PRA0, PCREL}}, +{"pstxsd", P8LS|OP(46), P_D_MASK, POWER10, 0, {VS, D34, PRA0, PCREL}}, +{"pstxssp", P8LS|OP(47), P_D_MASK, POWER10, 0, {VS, D34, PRA0, PCREL}}, +{"plfs", PMLS|OP(48), P_D_MASK, POWER10, 0, {FRT, D34, PRA0, PCREL}}, +{"plxv", P8LS|OP(50), P_D_MASK&~OP(1), POWER10, 0, {XTOP, D34, PRA0, PCREL}}, +{"plfd", PMLS|OP(50), P_D_MASK, POWER10, 0, {FRT, D34, PRA0, PCREL}}, +{"pstfs", PMLS|OP(52), P_D_MASK, POWER10, 0, {FRS, D34, PRA0, PCREL}}, +{"pstxv", P8LS|OP(54), P_D_MASK&~OP(1), POWER10, 0, {XTOP, D34, PRA0, PCREL}}, +{"pstfd", PMLS|OP(54), P_D_MASK, POWER10, 0, {FRS, D34, PRA0, PCREL}}, +{"plq", P8LS|OP(56), P_D_MASK, POWER10, 0, {RTQ, D34, PRAQ, PCREL}}, +{"pld", P8LS|OP(57), P_D_MASK, POWER10, 0, {RT, D34, PRA0, PCREL}}, +{"plxvp", P8LS|OP(58), P_D_MASK, POWER10, 0, {XTP, D34, PRA0, PCREL}}, +{"pmxvi8ger4pp", PMMIRR|XX3(59,2), P_GER4_MASK, POWER10, 0, {ACC, XA6a, XB6a, XMSK, YMSK, PMSK4}}, +{"pmxvi8ger4", PMMIRR|XX3(59,3), P_GER4_MASK, POWER10, 0, {ACC, XA6a, XB6a, XMSK, YMSK, PMSK4}}, +{"pmxvf16ger2pp", PMMIRR|XX3(59,18), P_GER2_MASK, POWER10, 0, {ACC, XA6a, XB6a, XMSK, YMSK, PMSK2}}, +{"pmxvf16ger2", PMMIRR|XX3(59,19), P_GER2_MASK, POWER10, 0, {ACC, XA6a, XB6a, XMSK, YMSK, PMSK2}}, +{"pmxvf32gerpp", PMMIRR|XX3(59,26), P_GER_MASK, POWER10, 0, {ACC, XA6a, XB6a, XMSK, YMSK}}, +{"pmxvf32ger", PMMIRR|XX3(59,27), P_GER_MASK, POWER10, 0, {ACC, XA6a, XB6a, XMSK, YMSK}}, +{"pmxvi4ger8pp", PMMIRR|XX3(59,34), P_GER8_MASK, POWER10, 0, {ACC, XA6a, XB6a, XMSK, YMSK, PMSK8}}, +{"pmxvi4ger8", PMMIRR|XX3(59,35), P_GER8_MASK, POWER10, 0, {ACC, XA6a, XB6a, XMSK, YMSK, PMSK8}}, +{"pmxvi16ger2spp",PMMIRR|XX3(59,42), P_GER2_MASK, POWER10, 0, {ACC, XA6a, XB6a, XMSK, YMSK, PMSK2}}, +{"pmxvi16ger2s", PMMIRR|XX3(59,43), P_GER2_MASK, POWER10, 0, {ACC, XA6a, XB6a, XMSK, YMSK, PMSK2}}, +{"pmxvbf16ger2pp",PMMIRR|XX3(59,50), P_GER2_MASK, POWER10, 0, {ACC, XA6a, XB6a, XMSK, YMSK, PMSK2}}, +{"pmxvbf16ger2", PMMIRR|XX3(59,51), P_GER2_MASK, POWER10, 0, {ACC, XA6a, XB6a, XMSK, YMSK, PMSK2}}, +{"pmxvf64gerpp", PMMIRR|XX3(59,58), P_GER64_MASK, POWER10, 0, {ACC, XA6ap, XB6a, XMSK, YMSK2}}, +{"pmxvf64ger", PMMIRR|XX3(59,59), P_GER64_MASK, POWER10, 0, {ACC, XA6ap, XB6a, XMSK, YMSK2}}, +{"pmxvi16ger2", PMMIRR|XX3(59,75), P_GER2_MASK, POWER10, 0, {ACC, XA6a, XB6a, XMSK, YMSK, PMSK2}}, +{"pmxvf16ger2np", PMMIRR|XX3(59,82), P_GER2_MASK, POWER10, 0, {ACC, XA6a, XB6a, XMSK, YMSK, PMSK2}}, +{"pmxvf32gernp", PMMIRR|XX3(59,90), P_GER_MASK, POWER10, 0, {ACC, XA6a, XB6a, XMSK, YMSK}}, +{"pmxvi8ger4spp", PMMIRR|XX3(59,99), P_GER4_MASK, POWER10, 0, {ACC, XA6a, XB6a, XMSK, YMSK, PMSK4}}, +{"pmxvi16ger2pp", PMMIRR|XX3(59,107), P_GER2_MASK, POWER10, 0, {ACC, XA6a, XB6a, XMSK, YMSK, PMSK2}}, +{"pmxvbf16ger2np",PMMIRR|XX3(59,114), P_GER2_MASK, POWER10, 0, {ACC, XA6a, XB6a, XMSK, YMSK, PMSK2}}, +{"pmxvf64gernp", PMMIRR|XX3(59,122), P_GER64_MASK, POWER10, 0, {ACC, XA6ap, XB6a, XMSK, YMSK2}}, +{"pmxvf16ger2pn", PMMIRR|XX3(59,146), P_GER2_MASK, POWER10, 0, {ACC, XA6a, XB6a, XMSK, YMSK, PMSK2}}, +{"pmxvf32gerpn", PMMIRR|XX3(59,154), P_GER_MASK, POWER10, 0, {ACC, XA6a, XB6a, XMSK, YMSK}}, +{"pmxvbf16ger2pn",PMMIRR|XX3(59,178), P_GER2_MASK, POWER10, 0, {ACC, XA6a, XB6a, XMSK, YMSK, PMSK2}}, +{"pmxvf64gerpn", PMMIRR|XX3(59,186), P_GER64_MASK, POWER10, 0, {ACC, XA6ap, XB6a, XMSK, YMSK2}}, +{"pmxvf16ger2nn", PMMIRR|XX3(59,210), P_GER2_MASK, POWER10, 0, {ACC, XA6a, XB6a, XMSK, YMSK, PMSK2}}, +{"pmxvf32gernn", PMMIRR|XX3(59,218), P_GER_MASK, POWER10, 0, {ACC, XA6a, XB6a, XMSK, YMSK}}, +{"pmxvbf16ger2nn",PMMIRR|XX3(59,242), P_GER2_MASK, POWER10, 0, {ACC, XA6a, XB6a, XMSK, YMSK, PMSK2}}, +{"pmxvf64gernn", PMMIRR|XX3(59,250), P_GER64_MASK, POWER10, 0, {ACC, XA6ap, XB6a, XMSK, YMSK2}}, +{"pstq", P8LS|OP(60), P_D_MASK, POWER10, 0, {RSQ, D34, PRA0, PCREL}}, +{"pstd", P8LS|OP(61), P_D_MASK, POWER10, 0, {RS, D34, PRA0, PCREL}}, +{"pstxvp", P8LS|OP(62), P_D_MASK, POWER10, 0, {XTP, D34, PRA0, PCREL}}, }; const unsigned int prefix_num_opcodes = diff -Nru gdb-9.1/opcodes/pru-dis.c gdb-10.2/opcodes/pru-dis.c --- gdb-9.1/opcodes/pru-dis.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/pru-dis.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* TI PRU disassemble routines - Copyright (C) 2014-2019 Free Software Foundation, Inc. + Copyright (C) 2014-2020 Free Software Foundation, Inc. Contributed by Dimitar Dimitrov <dimitar@dinux.eu> This file is part of the GNU opcodes library. diff -Nru gdb-9.1/opcodes/pru-opc.c gdb-10.2/opcodes/pru-opc.c --- gdb-9.1/opcodes/pru-opc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/pru-opc.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* TI PRU opcode list. - Copyright (C) 2014-2019 Free Software Foundation, Inc. + Copyright (C) 2014-2020 Free Software Foundation, Inc. Contributed by Dimitar Dimitrov <dimitar@dinux.eu> This file is part of the GNU opcodes library. diff -Nru gdb-9.1/opcodes/riscv-dis.c gdb-10.2/opcodes/riscv-dis.c --- gdb-9.1/opcodes/riscv-dis.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/riscv-dis.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* RISC-V disassembler - Copyright (C) 2011-2019 Free Software Foundation, Inc. + Copyright (C) 2011-2020 Free Software Foundation, Inc. Contributed by Andrew Waterman (andrew@sifive.com). Based on MIPS target. @@ -27,10 +27,13 @@ #include "opintl.h" #include "elf-bfd.h" #include "elf/riscv.h" +#include "elfxx-riscv.h" #include "bfd_stdint.h" #include <ctype.h> +static enum riscv_priv_spec_class default_priv_spec = PRIV_SPEC_CLASS_NONE; + struct riscv_private_data { bfd_vma gp; @@ -52,8 +55,8 @@ no_aliases = 0; } -static void -parse_riscv_dis_option (const char *option) +static bfd_boolean +parse_riscv_dis_option_without_args (const char *option) { if (strcmp (option, "no-aliases") == 0) no_aliases = 1; @@ -63,6 +66,44 @@ riscv_fpr_names = riscv_fpr_names_numeric; } else + return FALSE; + return TRUE; +} + +static void +parse_riscv_dis_option (const char *option) +{ + char *equal, *value; + + if (parse_riscv_dis_option_without_args (option)) + return; + + equal = strchr (option, '='); + if (equal == NULL) + { + /* The option without '=' should be defined above. */ + opcodes_error_handler (_("unrecognized disassembler option: %s"), option); + return; + } + if (equal == option + || *(equal + 1) == '\0') + { + /* Invalid options with '=', no option name before '=', + and no value after '='. */ + opcodes_error_handler (_("unrecognized disassembler option with '=': %s"), + option); + return; + } + + *equal = '\0'; + value = equal + 1; + if (strcmp (option, "priv-spec") == 0) + { + if (!riscv_get_priv_spec_class (value, &default_priv_spec)) + opcodes_error_handler (_("unknown privilege spec set by %s=%s"), + option, value); + } + else { /* xgettext:c-format */ opcodes_error_handler (_("unrecognized disassembler option: %s"), option); @@ -322,16 +363,35 @@ case 'E': { - const char* csr_name = NULL; + static const char *riscv_csr_hash[4096]; /* Total 2^12 CSR. */ + static bfd_boolean init_csr = FALSE; unsigned int csr = EXTRACT_OPERAND (CSR, l); - switch (csr) + + if (!init_csr) { -#define DECLARE_CSR(name, num) case num: csr_name = #name; break; + unsigned int i; + for (i = 0; i < 4096; i++) + riscv_csr_hash[i] = NULL; + + /* Set to the newest privilege version. */ + if (default_priv_spec == PRIV_SPEC_CLASS_NONE) + default_priv_spec = PRIV_SPEC_CLASS_DRAFT - 1; + +#define DECLARE_CSR(name, num, class, define_version, abort_version) \ + if (riscv_csr_hash[num] == NULL \ + && ((define_version == PRIV_SPEC_CLASS_NONE \ + && abort_version == PRIV_SPEC_CLASS_NONE) \ + || (default_priv_spec >= define_version \ + && default_priv_spec < abort_version))) \ + riscv_csr_hash[num] = #name; +#define DECLARE_CSR_ALIAS(name, num, class, define_version, abort_version) \ + DECLARE_CSR (name, num, class, define_version, abort_version) #include "opcode/riscv-opc.h" #undef DECLARE_CSR } - if (csr_name) - print (info->stream, "%s", csr_name); + + if (riscv_csr_hash[csr] != NULL) + print (info->stream, "%s", riscv_csr_hash[csr]); else print (info->stream, "0x%x", csr); break; @@ -547,11 +607,15 @@ with the -M switch (multiple options should be separated by commas):\n")); fprintf (stream, _("\n\ - numeric Print numeric register names, rather than ABI names.\n")); + numeric Print numeric register names, rather than ABI names.\n")); + + fprintf (stream, _("\n\ + no-aliases Disassemble only into canonical instructions, rather\n\ + than into pseudoinstructions.\n")); fprintf (stream, _("\n\ - no-aliases Disassemble only into canonical instructions, rather\n\ - than into pseudoinstructions.\n")); + priv-spec=PRIV Print the CSR according to the chosen privilege spec\n\ + (1.9, 1.9.1, 1.10, 1.11).\n")); fprintf (stream, _("\n")); } diff -Nru gdb-9.1/opcodes/riscv-opc.c gdb-10.2/opcodes/riscv-opc.c --- gdb-9.1/opcodes/riscv-opc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/riscv-opc.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* RISC-V opcode list - Copyright (C) 2011-2019 Free Software Foundation, Inc. + Copyright (C) 2011-2020 Free Software Foundation, Inc. Contributed by Andrew Waterman (andrew@sifive.com). Based on MIPS target. @@ -269,12 +269,14 @@ {"addi", 0, INSN_CLASS_C, "d,CU,Cj", MATCH_C_ADDI, MASK_C_ADDI, match_rd_nonzero, INSN_ALIAS }, {"addi", 0, INSN_CLASS_C, "d,CU,z", MATCH_C_NOP, MASK_C_ADDI | MASK_RVC_IMM, match_c_nop, INSN_ALIAS }, {"addi", 0, INSN_CLASS_C, "Cc,Cc,CL", MATCH_C_ADDI16SP, MASK_C_ADDI16SP, match_c_addi16sp, INSN_ALIAS }, +{"addi", 0, INSN_CLASS_C, "d,Cz,Co", MATCH_C_LI, MASK_C_LI, match_rd_nonzero, INSN_ALIAS }, {"addi", 0, INSN_CLASS_I, "d,s,j", MATCH_ADDI, MASK_ADDI, match_opcode, 0 }, {"add", 0, INSN_CLASS_C, "d,CU,CV", MATCH_C_ADD, MASK_C_ADD, match_c_add, INSN_ALIAS }, {"add", 0, INSN_CLASS_C, "d,CV,CU", MATCH_C_ADD, MASK_C_ADD, match_c_add, INSN_ALIAS }, {"add", 0, INSN_CLASS_C, "d,CU,Co", MATCH_C_ADDI, MASK_C_ADDI, match_rd_nonzero, INSN_ALIAS }, {"add", 0, INSN_CLASS_C, "Ct,Cc,CK", MATCH_C_ADDI4SPN, MASK_C_ADDI4SPN, match_c_addi4spn, INSN_ALIAS }, {"add", 0, INSN_CLASS_C, "Cc,Cc,CL", MATCH_C_ADDI16SP, MASK_C_ADDI16SP, match_c_addi16sp, INSN_ALIAS }, +{"add", 0, INSN_CLASS_C, "d,Cz,CV", MATCH_C_MV, MASK_C_MV, match_c_add, INSN_ALIAS }, {"add", 0, INSN_CLASS_I, "d,s,t", MATCH_ADD, MASK_ADD, match_opcode, 0 }, /* This is used for TLS, where the fourth arg is %tprel_add, to get a reloc applied to an add instruction, for relaxation to use. */ @@ -882,3 +884,96 @@ /* Terminate the list. */ {0, 0, INSN_CLASS_NONE, 0, 0, 0, 0, 0} }; + +/* All standard extensions defined in all supported ISA spec. */ +const struct riscv_ext_version riscv_ext_version_table[] = +{ +/* name, ISA spec, major version, minor_version. */ +{"e", ISA_SPEC_CLASS_20191213, 1, 9}, +{"e", ISA_SPEC_CLASS_20190608, 1, 9}, +{"e", ISA_SPEC_CLASS_2P2, 1, 9}, + +{"i", ISA_SPEC_CLASS_20191213, 2, 1}, +{"i", ISA_SPEC_CLASS_20190608, 2, 1}, +{"i", ISA_SPEC_CLASS_2P2, 2, 0}, + +{"m", ISA_SPEC_CLASS_20191213, 2, 0}, +{"m", ISA_SPEC_CLASS_20190608, 2, 0}, +{"m", ISA_SPEC_CLASS_2P2, 2, 0}, + +{"a", ISA_SPEC_CLASS_20191213, 2, 1}, +{"a", ISA_SPEC_CLASS_20190608, 2, 0}, +{"a", ISA_SPEC_CLASS_2P2, 2, 0}, + +{"f", ISA_SPEC_CLASS_20191213, 2, 2}, +{"f", ISA_SPEC_CLASS_20190608, 2, 2}, +{"f", ISA_SPEC_CLASS_2P2, 2, 0}, + +{"d", ISA_SPEC_CLASS_20191213, 2, 2}, +{"d", ISA_SPEC_CLASS_20190608, 2, 2}, +{"d", ISA_SPEC_CLASS_2P2, 2, 0}, + +{"q", ISA_SPEC_CLASS_20191213, 2, 2}, +{"q", ISA_SPEC_CLASS_20190608, 2, 2}, +{"q", ISA_SPEC_CLASS_2P2, 2, 0}, + +{"c", ISA_SPEC_CLASS_20191213, 2, 0}, +{"c", ISA_SPEC_CLASS_20190608, 2, 0}, +{"c", ISA_SPEC_CLASS_2P2, 2, 0}, + +{"p", ISA_SPEC_CLASS_20191213, 0, 2}, +{"p", ISA_SPEC_CLASS_20190608, 0, 2}, +{"p", ISA_SPEC_CLASS_2P2, 0, 1}, + +{"v", ISA_SPEC_CLASS_20191213, 0, 7}, +{"v", ISA_SPEC_CLASS_20190608, 0, 7}, +{"v", ISA_SPEC_CLASS_2P2, 0, 7}, + +{"n", ISA_SPEC_CLASS_20190608, 1, 1}, +{"n", ISA_SPEC_CLASS_2P2, 1, 1}, + +{"zicsr", ISA_SPEC_CLASS_20191213, 2, 0}, +{"zicsr", ISA_SPEC_CLASS_20190608, 2, 0}, + +/* Terminate the list. */ +{NULL, 0, 0, 0} +}; + +struct isa_spec_t +{ + const char *name; + enum riscv_isa_spec_class class; +}; + +/* List for all supported ISA spec versions. */ +static const struct isa_spec_t isa_specs[] = +{ + {"2.2", ISA_SPEC_CLASS_2P2}, + {"20190608", ISA_SPEC_CLASS_20190608}, + {"20191213", ISA_SPEC_CLASS_20191213}, + +/* Terminate the list. */ + {NULL, 0} +}; + +/* Get the corresponding ISA spec class by giving a ISA spec string. */ + +int +riscv_get_isa_spec_class (const char *s, + enum riscv_isa_spec_class *class) +{ + const struct isa_spec_t *version; + + if (s == NULL) + return 0; + + for (version = &isa_specs[0]; version->name != NULL; ++version) + if (strcmp (version->name, s) == 0) + { + *class = version->class; + return 1; + } + + /* Can not find the supported ISA spec. */ + return 0; +} diff -Nru gdb-9.1/opcodes/rl78-decode.c gdb-10.2/opcodes/rl78-decode.c --- gdb-9.1/opcodes/rl78-decode.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/rl78-decode.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,7 +1,7 @@ /* DO NOT EDIT! -*- buffer-read-only: t -*- vi:set ro: */ #line 1 "rl78-decode.opc" /* -*- c -*- */ -/* Copyright (C) 2012-2019 Free Software Foundation, Inc. +/* Copyright (C) 2012-2020 Free Software Foundation, Inc. Contributed by Red Hat. Written by DJ Delorie. diff -Nru gdb-9.1/opcodes/rl78-decode.opc gdb-10.2/opcodes/rl78-decode.opc --- gdb-9.1/opcodes/rl78-decode.opc 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/rl78-decode.opc 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* -*- c -*- */ -/* Copyright (C) 2012-2019 Free Software Foundation, Inc. +/* Copyright (C) 2012-2020 Free Software Foundation, Inc. Contributed by Red Hat. Written by DJ Delorie. diff -Nru gdb-9.1/opcodes/rl78-dis.c gdb-10.2/opcodes/rl78-dis.c --- gdb-9.1/opcodes/rl78-dis.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/rl78-dis.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Disassembler code for Renesas RL78. - Copyright (C) 2011-2019 Free Software Foundation, Inc. + Copyright (C) 2011-2020 Free Software Foundation, Inc. Contributed by Red Hat. Written by DJ Delorie. diff -Nru gdb-9.1/opcodes/rx-decode.c gdb-10.2/opcodes/rx-decode.c --- gdb-9.1/opcodes/rx-decode.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/rx-decode.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,7 +1,7 @@ /* DO NOT EDIT! -*- buffer-read-only: t -*- vi:set ro: */ #line 1 "rx-decode.opc" /* -*- c -*- */ -/* Copyright (C) 2012-2019 Free Software Foundation, Inc. +/* Copyright (C) 2012-2020 Free Software Foundation, Inc. Contributed by Red Hat. Written by DJ Delorie. diff -Nru gdb-9.1/opcodes/rx-decode.opc gdb-10.2/opcodes/rx-decode.opc --- gdb-9.1/opcodes/rx-decode.opc 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/rx-decode.opc 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* -*- c -*- */ -/* Copyright (C) 2012-2019 Free Software Foundation, Inc. +/* Copyright (C) 2012-2020 Free Software Foundation, Inc. Contributed by Red Hat. Written by DJ Delorie. diff -Nru gdb-9.1/opcodes/rx-dis.c gdb-10.2/opcodes/rx-dis.c --- gdb-9.1/opcodes/rx-dis.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/rx-dis.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Disassembler code for Renesas RX. - Copyright (C) 2008-2019 Free Software Foundation, Inc. + Copyright (C) 2008-2020 Free Software Foundation, Inc. Contributed by Red Hat. Written by DJ Delorie. diff -Nru gdb-9.1/opcodes/s12z-dis.c gdb-10.2/opcodes/s12z-dis.c --- gdb-9.1/opcodes/s12z-dis.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/s12z-dis.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* s12z-dis.c -- Freescale S12Z disassembly - Copyright (C) 2018-2019 Free Software Foundation, Inc. + Copyright (C) 2018-2020 Free Software Foundation, Inc. This file is part of the GNU opcodes library. @@ -59,16 +59,9 @@ { struct mem_read_abstraction *mra = (struct mem_read_abstraction *) b; - int status = - (*mra->info->read_memory_func) (mra->memaddr + offset, - bytes, n, mra->info); - - if (status != 0) - { - (*mra->info->memory_error_func) (status, mra->memaddr, mra->info); - return -1; - } - return 0; + int status = (*mra->info->read_memory_func) (mra->memaddr + offset, + bytes, n, mra->info); + return status != 0 ? -1 : 0; } /* Start of disassembly file. */ @@ -390,7 +383,6 @@ else (*mra.info->fprintf_func) (mra.info->stream, "%c", shift_size_table[osize]); - } } } diff -Nru gdb-9.1/opcodes/s12z-opc.c gdb-10.2/opcodes/s12z-opc.c --- gdb-9.1/opcodes/s12z-opc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/s12z-opc.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* s12z-decode.c -- Freescale S12Z disassembly - Copyright (C) 2018 Free Software Foundation, Inc. + Copyright (C) 2018-2020 Free Software Foundation, Inc. This file is part of the GNU opcodes library. @@ -31,13 +31,13 @@ #include "s12z-opc.h" -typedef int (* insn_bytes_f) (struct mem_read_abstraction_base *); +typedef int (*insn_bytes_f) (struct mem_read_abstraction_base *); -typedef void (*operands_f) (struct mem_read_abstraction_base *, - int *n_operands, struct operand **operand); +typedef int (*operands_f) (struct mem_read_abstraction_base *, + int *n_operands, struct operand **operand); typedef enum optr (*discriminator_f) (struct mem_read_abstraction_base *, - enum optr hint); + enum optr hint); enum OPR_MODE { @@ -127,15 +127,22 @@ static int opr_n_bytes_p1 (struct mem_read_abstraction_base *mra) { - return 1 + x_opr_n_bytes (mra, 0); + int n = x_opr_n_bytes (mra, 0); + if (n < 0) + return n; + return 1 + n; } static int opr_n_bytes2 (struct mem_read_abstraction_base *mra) { int s = x_opr_n_bytes (mra, 0); - s += x_opr_n_bytes (mra, s); - return s + 1; + if (s < 0) + return s; + int n = x_opr_n_bytes (mra, s); + if (n < 0) + return n; + return s + n + 1; } enum BB_MODE @@ -188,7 +195,12 @@ int n = bbs->n_operands; if (bbs->opr) - n += x_opr_n_bytes (mra, n - 1); + { + int x = x_opr_n_bytes (mra, n - 1); + if (x < 0) + return x; + n += x; + } return n; } @@ -261,10 +273,12 @@ { struct immediate_operand *op = malloc (sizeof (*op)); - ((struct operand *)op)->cl = OPND_CL_IMMEDIATE; - op->value = value; - ((struct operand *)op)->osize = -1; - + if (op != NULL) + { + op->parent.cl = OPND_CL_IMMEDIATE; + op->parent.osize = -1; + op->value = value; + } return (struct operand *) op; } @@ -273,11 +287,13 @@ { struct bitfield_operand *op = malloc (sizeof (*op)); - ((struct operand *)op)->cl = OPND_CL_BIT_FIELD; - op->width = width; - op->offset = offset; - ((struct operand *)op)->osize = -1; - + if (op != NULL) + { + op->parent.cl = OPND_CL_BIT_FIELD; + op->parent.osize = -1; + op->width = width; + op->offset = offset; + } return (struct operand *) op; } @@ -286,10 +302,12 @@ { struct register_operand *op = malloc (sizeof (*op)); - ((struct operand *)op)->cl = OPND_CL_REGISTER; - op->reg = reg; - ((struct operand *)op)->osize = osize; - + if (op != NULL) + { + op->parent.cl = OPND_CL_REGISTER; + op->parent.osize = osize; + op->reg = reg; + } return (struct operand *) op; } @@ -304,9 +322,11 @@ { struct register_operand *op = malloc (sizeof (*op)); - ((struct operand *)op)->cl = OPND_CL_REGISTER_ALL; - ((struct operand *)op)->osize = -1; - + if (op != NULL) + { + op->parent.cl = OPND_CL_REGISTER_ALL; + op->parent.osize = -1; + } return (struct operand *) op; } @@ -315,9 +335,11 @@ { struct register_operand *op = malloc (sizeof (*op)); - ((struct operand *)op)->cl = OPND_CL_REGISTER_ALL16; - ((struct operand *)op)->osize = -1; - + if (op != NULL) + { + op->parent.cl = OPND_CL_REGISTER_ALL16; + op->parent.osize = -1; + } return (struct operand *) op; } @@ -325,16 +347,18 @@ static struct operand * create_simple_memory_operand (bfd_vma addr, bfd_vma base, bool relative) { - struct simple_memory_operand *op = malloc (sizeof (*op)); - - ((struct operand *)op)->cl = OPND_CL_SIMPLE_MEMORY; - op->addr = addr; - op->base = base; - op->relative = relative; - ((struct operand *)op)->osize = -1; + struct simple_memory_operand *op; assert (relative || base == 0); - + op = malloc (sizeof (*op)); + if (op != NULL) + { + op->parent.cl = OPND_CL_SIMPLE_MEMORY; + op->parent.osize = -1; + op->addr = addr; + op->base = base; + op->relative = relative; + } return (struct operand *) op; } @@ -343,15 +367,17 @@ { struct memory_operand *op = malloc (sizeof (*op)); - ((struct operand *)op)->cl = OPND_CL_MEMORY; - op->indirect = indirect; - op->base_offset = base; - op->mutation = OPND_RM_NONE; - op->n_regs = n_regs; - op->regs[0] = reg0; - op->regs[1] = reg1; - ((struct operand *)op)->osize = -1; - + if (op != NULL) + { + op->parent.cl = OPND_CL_MEMORY; + op->parent.osize = -1; + op->indirect = indirect; + op->base_offset = base; + op->mutation = OPND_RM_NONE; + op->n_regs = n_regs; + op->regs[0] = reg0; + op->regs[1] = reg1; + } return (struct operand *) op; } @@ -360,28 +386,31 @@ { struct memory_operand *op = malloc (sizeof (*op)); - ((struct operand *)op)->cl = OPND_CL_MEMORY; - op->indirect = false; - op->base_offset = 0; - op->mutation = mutation; - op->n_regs = 1; - op->regs[0] = reg; - op->regs[1] = -1; - ((struct operand *)op)->osize = -1; - + if (op != NULL) + { + op->parent.cl = OPND_CL_MEMORY; + op->parent.osize = -1; + op->indirect = false; + op->base_offset = 0; + op->mutation = mutation; + op->n_regs = 1; + op->regs[0] = reg; + op->regs[1] = -1; + } return (struct operand *) op; } -static void +static int z_ext24_decode (struct mem_read_abstraction_base *mra, int *n_operands, struct operand **operand) { + struct operand *op; uint8_t buffer[3]; int status = mra->read (mra, 0, 3, buffer); if (status < 0) - return; + return status; int i; uint32_t addr = 0; @@ -391,21 +420,24 @@ addr |= buffer[i]; } - operand[(*n_operands)++] = create_simple_memory_operand (addr, 0, false); + op = create_simple_memory_operand (addr, 0, false); + if (op == NULL) + return -1; + operand[(*n_operands)++] = op; + return 0; } -static uint32_t +static int z_decode_signed_value (struct mem_read_abstraction_base *mra, int offset, - short size) + short size, uint32_t *result) { assert (size >0); assert (size <= 4); bfd_byte buffer[4]; - if (0 > mra->read (mra, offset, size, buffer)) - { - return 0; - } + int status = mra->read (mra, offset, size, buffer); + if (status < 0) + return status; int i; uint32_t value = 0; @@ -415,43 +447,50 @@ if (buffer[0] & 0x80) { /* Deal with negative values */ - value -= 0x1UL << (size * 8); + value -= 1u << (size * 4) << (size * 4); } - return value; + *result = value; + return 0; } -static uint32_t -decode_signed_value (struct mem_read_abstraction_base *mra, short size) +static int +decode_signed_value (struct mem_read_abstraction_base *mra, short size, + uint32_t *result) { - return z_decode_signed_value (mra, 0, size); + return z_decode_signed_value (mra, 0, size, result); } -static void +static int x_imm1 (struct mem_read_abstraction_base *mra, int offset, int *n_operands, struct operand **operand) { + struct operand *op; bfd_byte byte; int status = mra->read (mra, offset, 1, &byte); if (status < 0) - return; + return status; - operand[(*n_operands)++] = create_immediate_operand (byte); + op = create_immediate_operand (byte); + if (op == NULL) + return -1; + operand[(*n_operands)++] = op; + return 0; } /* An eight bit immediate operand. */ -static void +static int imm1_decode (struct mem_read_abstraction_base *mra, int *n_operands, struct operand **operand) { - x_imm1 (mra, 0, n_operands, operand); + return x_imm1 (mra, 0, n_operands, operand); } -static void +static int trap_decode (struct mem_read_abstraction_base *mra, int *n_operands, struct operand **operand) { - x_imm1 (mra, -1, n_operands, operand); + return x_imm1 (mra, -1, n_operands, operand); } @@ -520,7 +559,9 @@ case OPR_IDX_INDIRECT: { uint8_t x1; - mra->read (mra, offset, 1, &x1); + status = mra->read (mra, offset, 1, &x1); + if (status < 0) + return NULL; int idx = x1; if (postbyte & 0x01) @@ -537,7 +578,9 @@ case OPR_IDX3_DIRECT: { uint8_t x[3]; - mra->read (mra, offset, 3, x); + status = mra->read (mra, offset, 3, x); + if (status < 0) + return NULL; int idx = x[0] << 16 | x[1] << 8 | x[2]; if (x[0] & 0x80) @@ -554,7 +597,9 @@ case OPR_IDX3_DIRECT_REG: { uint8_t x[3]; - mra->read (mra, offset, 3, x); + status = mra->read (mra, offset, 3, x); + if (status < 0) + return NULL; int idx = x[0] << 16 | x[1] << 8 | x[2]; if (x[0] & 0x80) @@ -570,7 +615,9 @@ case OPR_IDX3_INDIRECT: { uint8_t x[3]; - mra->read (mra, offset, 3, x); + status = mra->read (mra, offset, 3, x); + if (status < 0) + return NULL; int idx = x[0] << 16 | x[1] << 8 | x[2]; if (x[0] & 0x80) @@ -587,7 +634,9 @@ case OPR_IDX_DIRECT: { uint8_t x1; - mra->read (mra, offset, 1, &x1); + status = mra->read (mra, offset, 1, &x1); + if (status < 0) + return NULL; int idx = x1; if (postbyte & 0x01) @@ -604,7 +653,9 @@ case OPR_IDX2_REG: { uint8_t x[2]; - mra->read (mra, offset, 2, x); + status = mra->read (mra, offset, 2, x); + if (status < 0) + return NULL; uint32_t idx = x[1] | x[0] << 8 ; idx |= (postbyte & 0x30) << 12; @@ -653,7 +704,7 @@ bfd_byte buffer[4]; status = mra->read (mra, offset, size, buffer); if (status < 0) - operand = NULL; + return NULL; uint32_t ext18 = 0; for (i = 0; i < size; ++i) @@ -672,7 +723,9 @@ case OPR_EXT1: { uint8_t x1 = 0; - mra->read (mra, offset, 1, &x1); + status = mra->read (mra, offset, 1, &x1); + if (status < 0) + return NULL; int16_t addr; addr = x1; addr |= (postbyte & 0x3f) << 8; @@ -687,7 +740,7 @@ bfd_byte buffer[4]; status = mra->read (mra, offset, size, buffer); if (status < 0) - operand = NULL; + return NULL; uint32_t ext24 = 0; for (i = 0; i < size; ++i) @@ -705,7 +758,7 @@ bfd_byte buffer[4]; status = mra->read (mra, offset, size, buffer); if (status < 0) - operand = NULL; + return NULL; uint32_t ext24 = 0; for (i = 0; i < size; ++i) @@ -722,7 +775,8 @@ abort (); } - operand->osize = osize; + if (operand != NULL) + operand->osize = osize; return operand; } @@ -733,124 +787,181 @@ return x_opr_decode_with_size (mra, offset, -1); } -static void +static int z_opr_decode (struct mem_read_abstraction_base *mra, int *n_operands, struct operand **operand) { - operand[(*n_operands)++] = x_opr_decode (mra, 0); + struct operand *op = x_opr_decode (mra, 0); + if (op == NULL) + return -1; + operand[(*n_operands)++] = op; + return 0; } -static void +static int z_opr_decode2 (struct mem_read_abstraction_base *mra, int *n_operands, struct operand **operand) { int n = x_opr_n_bytes (mra, 0); - - operand[(*n_operands)++] = x_opr_decode (mra, 0); - operand[(*n_operands)++] = x_opr_decode (mra, n); + if (n < 0) + return n; + struct operand *op = x_opr_decode (mra, 0); + if (op == NULL) + return -1; + operand[(*n_operands)++] = op; + op = x_opr_decode (mra, n); + if (op == NULL) + return -1; + operand[(*n_operands)++] = op; + return 0; } -static void +static int imm1234 (struct mem_read_abstraction_base *mra, int base, int *n_operands, struct operand **operand) { + struct operand *op; bfd_byte opcode; int status = mra->read (mra, -1, 1, &opcode); if (status < 0) - return; + return status; opcode -= base; int size = registers[opcode & 0xF].bytes; - uint32_t imm = decode_signed_value (mra, size); - - operand[(*n_operands)++] = create_immediate_operand (imm); + uint32_t imm; + if (decode_signed_value (mra, size, &imm) < 0) + return -1; + + op = create_immediate_operand (imm); + if (op == NULL) + return -1; + operand[(*n_operands)++] = op; + return 0; } /* Special case of LD and CMP with register S and IMM operand */ -static void +static int reg_s_imm (struct mem_read_abstraction_base *mra, int *n_operands, struct operand **operand) { - operand[(*n_operands)++] = create_register_operand (REG_S); + struct operand *op; - uint32_t imm = decode_signed_value (mra, 3); - operand[(*n_operands)++] = create_immediate_operand (imm); + op = create_register_operand (REG_S); + if (op == NULL) + return -1; + operand[(*n_operands)++] = op; + + uint32_t imm; + if (decode_signed_value (mra, 3, &imm) < 0) + return -1; + op = create_immediate_operand (imm); + if (op == NULL) + return -1; + operand[(*n_operands)++] = op; + return 0; } /* Special case of LD, CMP and ST with register S and OPR operand */ -static void +static int reg_s_opr (struct mem_read_abstraction_base *mra, int *n_operands, struct operand **operand) { - operand[(*n_operands)++] = create_register_operand (REG_S); - operand[(*n_operands)++] = x_opr_decode (mra, 0); + struct operand *op; + + op = create_register_operand (REG_S); + if (op == NULL) + return -1; + operand[(*n_operands)++] = op; + op = x_opr_decode (mra, 0); + if (op == NULL) + return -1; + operand[(*n_operands)++] = op; + return 0; } -static void +static int z_imm1234_8base (struct mem_read_abstraction_base *mra, int *n_operands, struct operand **operand) { - imm1234 (mra, 8, n_operands, operand); + return imm1234 (mra, 8, n_operands, operand); } -static void +static int z_imm1234_0base (struct mem_read_abstraction_base *mra, int *n_operands, struct operand **operand) { - imm1234 (mra, 0, n_operands, operand); + return imm1234 (mra, 0, n_operands, operand); } -static void +static int z_tfr (struct mem_read_abstraction_base *mra, int *n_operands, struct operand **operand) { + struct operand *op; bfd_byte byte; int status = mra->read (mra, 0, 1, &byte); if (status < 0) - return; + return status; - operand[(*n_operands)++] = create_register_operand (byte >> 4); - operand[(*n_operands)++] = create_register_operand (byte & 0x0F); + op = create_register_operand (byte >> 4); + if (op == NULL) + return -1; + operand[(*n_operands)++] = op; + op = create_register_operand (byte & 0x0F); + if (op == NULL) + return -1; + operand[(*n_operands)++] = op; + return 0; } -static void +static int z_reg (struct mem_read_abstraction_base *mra, int *n_operands, struct operand **operand) { + struct operand *op; bfd_byte byte; int status = mra->read (mra, -1, 1, &byte); if (status < 0) - return; + return status; - operand[(*n_operands)++] = create_register_operand (byte & 0x07); + op = create_register_operand (byte & 0x07); + if (op == NULL) + return -1; + operand[(*n_operands)++] = op; + return 0; } -static void +static int reg_xy (struct mem_read_abstraction_base *mra, int *n_operands, struct operand **operand) { + struct operand *op; bfd_byte byte; int status = mra->read (mra, -1, 1, &byte); if (status < 0) - return; + return status; - operand[(*n_operands)++] = - create_register_operand ((byte & 0x01) ? REG_Y : REG_X); + op = create_register_operand ((byte & 0x01) ? REG_Y : REG_X); + if (op == NULL) + return -1; + operand[(*n_operands)++] = op; + return 0; } -static void +static int lea_reg_xys_opr (struct mem_read_abstraction_base *mra, int *n_operands, struct operand **operand) { + struct operand *op; bfd_byte byte; int status = mra->read (mra, -1, 1, &byte); if (status < 0) - return; + return status; int reg_xys = -1; switch (byte & 0x03) @@ -866,18 +977,26 @@ break; } - operand[(*n_operands)++] = create_register_operand (reg_xys); - operand[(*n_operands)++] = x_opr_decode (mra, 0); + op = create_register_operand (reg_xys); + if (op == NULL) + return -1; + operand[(*n_operands)++] = op; + op = x_opr_decode (mra, 0); + if (op == NULL) + return -1; + operand[(*n_operands)++] = op; + return 0; } -static void +static int lea_reg_xys (struct mem_read_abstraction_base *mra, int *n_operands, struct operand **operand) { + struct operand *op; bfd_byte byte; int status = mra->read (mra, -1, 1, &byte); if (status < 0) - return; + return status; int reg_n = -1; switch (byte & 0x03) @@ -895,23 +1014,30 @@ status = mra->read (mra, 0, 1, &byte); if (status < 0) - return; + return status; - operand[(*n_operands)++] = create_register_operand (reg_n); - operand[(*n_operands)++] = create_memory_operand (false, (int8_t) byte, - 1, reg_n, -1); + op = create_register_operand (reg_n); + if (op == NULL) + return -1; + operand[(*n_operands)++] = op; + op = create_memory_operand (false, (int8_t) byte, 1, reg_n, -1); + if (op == NULL) + return -1; + operand[(*n_operands)++] = op; + return 0; } /* PC Relative offsets of size 15 or 7 bits */ -static void +static int rel_15_7 (struct mem_read_abstraction_base *mra, int offset, int *n_operands, struct operand **operands) { + struct operand *op; bfd_byte upper; int status = mra->read (mra, offset - 1, 1, &upper); if (status < 0) - return; + return status; bool rel_size = (upper & 0x80); @@ -922,7 +1048,7 @@ bfd_byte lower; status = mra->read (mra, offset, 1, &lower); if (status < 0) - return; + return status; addr <<= 8; addr |= lower; @@ -942,17 +1068,20 @@ addr = addr - 0x40; } - operands[(*n_operands)++] = - create_simple_memory_operand (addr, mra->posn (mra) - 1, true); + op = create_simple_memory_operand (addr, mra->posn (mra) - 1, true); + if (op == NULL) + return -1; + operands[(*n_operands)++] = op; + return 0; } /* PC Relative offsets of size 15 or 7 bits */ -static void +static int decode_rel_15_7 (struct mem_read_abstraction_base *mra, int *n_operands, struct operand **operand) { - rel_15_7 (mra, 1, n_operands, operand); + return rel_15_7 (mra, 1, n_operands, operand); } static int shift_n_bytes (struct mem_read_abstraction_base *); @@ -962,15 +1091,15 @@ static int mul_n_bytes (struct mem_read_abstraction_base *); static int bm_n_bytes (struct mem_read_abstraction_base *); -static void psh_pul_decode (struct mem_read_abstraction_base *mra, int *n_operands, struct operand **operand); -static void shift_decode (struct mem_read_abstraction_base *mra, int *n_operands, struct operand **operand); -static void mul_decode (struct mem_read_abstraction_base *mra, int *n_operands, struct operand **operand); -static void bm_decode (struct mem_read_abstraction_base *mra, int *n_operands, struct operand **operand); -static void bm_rel_decode (struct mem_read_abstraction_base *mra, int *n_operands, struct operand **operand); -static void mov_imm_opr (struct mem_read_abstraction_base *mra, int *n_operands, struct operand **operand); -static void loop_primitive_decode (struct mem_read_abstraction_base *mra, int *n_operands, struct operand **operands); -static void bit_field_decode (struct mem_read_abstraction_base *mra, int *n_operands, struct operand **operands); -static void exg_sex_decode (struct mem_read_abstraction_base *mra, int *n_operands, struct operand **operands); +static int psh_pul_decode (struct mem_read_abstraction_base *mra, int *n_operands, struct operand **operand); +static int shift_decode (struct mem_read_abstraction_base *mra, int *n_operands, struct operand **operand); +static int mul_decode (struct mem_read_abstraction_base *mra, int *n_operands, struct operand **operand); +static int bm_decode (struct mem_read_abstraction_base *mra, int *n_operands, struct operand **operand); +static int bm_rel_decode (struct mem_read_abstraction_base *mra, int *n_operands, struct operand **operand); +static int mov_imm_opr (struct mem_read_abstraction_base *mra, int *n_operands, struct operand **operand); +static int loop_primitive_decode (struct mem_read_abstraction_base *mra, int *n_operands, struct operand **operands); +static int bit_field_decode (struct mem_read_abstraction_base *mra, int *n_operands, struct operand **operands); +static int exg_sex_decode (struct mem_read_abstraction_base *mra, int *n_operands, struct operand **operands); static enum optr shift_discrim (struct mem_read_abstraction_base *mra, enum optr hint); @@ -981,33 +1110,66 @@ static enum optr exg_sex_discrim (struct mem_read_abstraction_base *mra, enum optr hint); -static void +static int cmp_xy (struct mem_read_abstraction_base *mra ATTRIBUTE_UNUSED, int *n_operands, struct operand **operand) { - operand[(*n_operands)++] = create_register_operand (REG_X); - operand[(*n_operands)++] = create_register_operand (REG_Y); + struct operand *op; + + op = create_register_operand (REG_X); + if (op == NULL) + return -1; + operand[(*n_operands)++] = op; + op = create_register_operand (REG_Y); + if (op == NULL) + return -1; + operand[(*n_operands)++] = op; + return 0; } -static void +static int sub_d6_x_y (struct mem_read_abstraction_base *mra ATTRIBUTE_UNUSED, int *n_operands, struct operand **operand) { - operand[(*n_operands)++] = create_register_operand (REG_D6); - operand[(*n_operands)++] = create_register_operand (REG_X); - operand[(*n_operands)++] = create_register_operand (REG_Y); + struct operand *op; + + op = create_register_operand (REG_D6); + if (op == NULL) + return -1; + operand[(*n_operands)++] = op; + op = create_register_operand (REG_X); + if (op == NULL) + return -1; + operand[(*n_operands)++] = op; + op = create_register_operand (REG_Y); + if (op == NULL) + return -1; + operand[(*n_operands)++] = op; + return 0; } -static void +static int sub_d6_y_x (struct mem_read_abstraction_base *mra ATTRIBUTE_UNUSED, int *n_operands, struct operand **operand) { - operand[(*n_operands)++] = create_register_operand (REG_D6); - operand[(*n_operands)++] = create_register_operand (REG_Y); - operand[(*n_operands)++] = create_register_operand (REG_X); + struct operand *op; + + op = create_register_operand (REG_D6); + if (op == NULL) + return -1; + operand[(*n_operands)++] = op; + op = create_register_operand (REG_Y); + if (op == NULL) + return -1; + operand[(*n_operands)++] = op; + op = create_register_operand (REG_X); + if (op == NULL) + return -1; + operand[(*n_operands)++] = op; + return 0; } -static void +static int ld_18bit_decode (struct mem_read_abstraction_base *mra, int *n_operands, struct operand **operand); @@ -1628,19 +1790,20 @@ }; -static void +static int mul_decode (struct mem_read_abstraction_base *mra, int *n_operands, struct operand **operand) { uint8_t mb; + struct operand *op; int status = mra->read (mra, 0, 1, &mb); if (status < 0) - return; + return status; uint8_t byte; status = mra->read (mra, -1, 1, &byte); if (status < 0) - return; + return status; enum MUL_MODE mode = -1; size_t i; @@ -1653,37 +1816,67 @@ break; } } - operand[(*n_operands)++] = create_register_operand (byte & 0x07); + op = create_register_operand (byte & 0x07); + if (op == NULL) + return -1; + operand[(*n_operands)++] = op; switch (mode) { case MUL_REG_IMM: { int size = (mb & 0x3); - operand[(*n_operands)++] = - create_register_operand_with_size ((mb & 0x38) >> 3, size); - uint32_t imm = z_decode_signed_value (mra, 1, size + 1); - operand[(*n_operands)++] = create_immediate_operand (imm); + op = create_register_operand_with_size ((mb & 0x38) >> 3, size); + if (op == NULL) + return -1; + operand[(*n_operands)++] = op; + + uint32_t imm; + if (z_decode_signed_value (mra, 1, size + 1, &imm) < 0) + return -1; + op = create_immediate_operand (imm); + if (op == NULL) + return -1; + operand[(*n_operands)++] = op; } break; case MUL_REG_REG: - operand[(*n_operands)++] = create_register_operand ((mb & 0x38) >> 3); - operand[(*n_operands)++] = create_register_operand (mb & 0x07); + op = create_register_operand ((mb & 0x38) >> 3); + if (op == NULL) + return -1; + operand[(*n_operands)++] = op; + op = create_register_operand (mb & 0x07); + if (op == NULL) + return -1; + operand[(*n_operands)++] = op; break; case MUL_REG_OPR: - operand[(*n_operands)++] = create_register_operand ((mb & 0x38) >> 3); - operand[(*n_operands)++] = x_opr_decode_with_size (mra, 1, mb & 0x3); + op = create_register_operand ((mb & 0x38) >> 3); + if (op == NULL) + return -1; + operand[(*n_operands)++] = op; + op = x_opr_decode_with_size (mra, 1, mb & 0x3); + if (op == NULL) + return -1; + operand[(*n_operands)++] = op; break; case MUL_OPR_OPR: { int first = x_opr_n_bytes (mra, 1); - operand[(*n_operands)++] = x_opr_decode_with_size (mra, 1, - (mb & 0x30) >> 4); - operand[(*n_operands)++] = x_opr_decode_with_size (mra, first + 1, - (mb & 0x0c) >> 2); + if (first < 0) + return first; + op = x_opr_decode_with_size (mra, 1, (mb & 0x30) >> 4); + if (op == NULL) + return -1; + operand[(*n_operands)++] = op; + op = x_opr_decode_with_size (mra, first + 1, (mb & 0x0c) >> 2); + if (op == NULL) + return -1; + operand[(*n_operands)++] = op; break; } } + return 0; } @@ -1691,10 +1884,11 @@ mul_n_bytes (struct mem_read_abstraction_base *mra) { int nx = 2; + int first, second; uint8_t mb; int status = mra->read (mra, 0, 1, &mb); if (status < 0) - return 0; + return status; enum MUL_MODE mode = -1; size_t i; @@ -1718,15 +1912,20 @@ case MUL_REG_REG: break; case MUL_REG_OPR: - nx += x_opr_n_bytes (mra, 1); + first = x_opr_n_bytes (mra, 1); + if (first < 0) + return first; + nx += first; break; case MUL_OPR_OPR: - { - int first = x_opr_n_bytes (mra, nx - 1); - nx += first; - int second = x_opr_n_bytes (mra, nx - 1); - nx += second; - } + first = x_opr_n_bytes (mra, nx - 1); + if (first < 0) + return first; + nx += first; + second = x_opr_n_bytes (mra, nx - 1); + if (second < 0) + return second; + nx += second; break; } @@ -1763,7 +1962,7 @@ { 0x84, 0x00, BM_REG_IMM}, { 0x06, 0x06, BM_REG_IMM}, { 0xC6, 0x44, BM_RESERVED0}, - // 00 + { 0x8F, 0x80, BM_OPR_B}, { 0x8E, 0x82, BM_OPR_W}, { 0x8C, 0x88, BM_OPR_L}, @@ -1772,14 +1971,15 @@ { 0x87, 0x84, BM_RESERVED1}, }; -static void +static int bm_decode (struct mem_read_abstraction_base *mra, int *n_operands, struct operand **operand) { + struct operand *op; uint8_t bm; int status = mra->read (mra, 0, 1, &bm); if (status < 0) - return; + return status; size_t i; enum BM_MODE mode = -1; @@ -1797,28 +1997,44 @@ { case BM_REG_IMM: case BM_RESERVED0: - operand[(*n_operands)++] = create_register_operand (bm & 0x07); + op = create_register_operand (bm & 0x07); + if (op == NULL) + return -1; + operand[(*n_operands)++] = op; break; case BM_OPR_B: - operand[(*n_operands)++] = x_opr_decode_with_size (mra, 1, 0); + op = x_opr_decode_with_size (mra, 1, 0); + if (op == NULL) + return -1; + operand[(*n_operands)++] = op; break; case BM_OPR_W: - operand[(*n_operands)++] = x_opr_decode_with_size (mra, 1, 1); + op = x_opr_decode_with_size (mra, 1, 1); + if (op == NULL) + return -1; + operand[(*n_operands)++] = op; break; case BM_OPR_L: - operand[(*n_operands)++] = x_opr_decode_with_size (mra, 1, 3); + op = x_opr_decode_with_size (mra, 1, 3); + if (op == NULL) + return -1; + operand[(*n_operands)++] = op; break; case BM_OPR_REG: case BM_RESERVED1: { uint8_t xb; - mra->read (mra, 1, 1, &xb); + status = mra->read (mra, 1, 1, &xb); + if (status < 0) + return status; /* Don't emit a size suffix for register operands */ if ((xb & 0xF8) != 0xB8) - operand[(*n_operands)++] = - x_opr_decode_with_size (mra, 1, (bm & 0x0c) >> 2); + op = x_opr_decode_with_size (mra, 1, (bm & 0x0c) >> 2); else - operand[(*n_operands)++] = x_opr_decode (mra, 1); + op = x_opr_decode (mra, 1); + if (op == NULL) + return -1; + operand[(*n_operands)++] = op; } break; } @@ -1829,7 +2045,10 @@ case BM_REG_IMM: case BM_RESERVED0: imm = (bm & 0x38) >> 3; - operand[(*n_operands)++] = create_immediate_operand (imm); + op = create_immediate_operand (imm); + if (op == NULL) + return -1; + operand[(*n_operands)++] = op; break; case BM_OPR_L: imm |= (bm & 0x03) << 3; @@ -1839,24 +2058,32 @@ /* fallthrough */ case BM_OPR_B: imm |= (bm & 0x70) >> 4; - operand[(*n_operands)++] = create_immediate_operand (imm); + op = create_immediate_operand (imm); + if (op == NULL) + return -1; + operand[(*n_operands)++] = op; break; case BM_OPR_REG: case BM_RESERVED1: - operand[(*n_operands)++] = create_register_operand ((bm & 0x70) >> 4); + op = create_register_operand ((bm & 0x70) >> 4); + if (op == NULL) + return -1; + operand[(*n_operands)++] = op; break; } + return 0; } -static void +static int bm_rel_decode (struct mem_read_abstraction_base *mra, int *n_operands, struct operand **operand) { + struct operand *op; uint8_t bm; int status = mra->read (mra, 0, 1, &bm); if (status < 0) - return; + return status; size_t i; enum BM_MODE mode = -1; @@ -1875,39 +2102,64 @@ { case BM_REG_IMM: case BM_RESERVED0: - operand[(*n_operands)++] = create_register_operand (bm & 0x07); + op = create_register_operand (bm & 0x07); + if (op == NULL) + return -1; + operand[(*n_operands)++] = op; break; case BM_OPR_B: - operand[(*n_operands)++] = x_opr_decode_with_size (mra, 1, 0); - n = 1 + x_opr_n_bytes (mra, 1); + op = x_opr_decode_with_size (mra, 1, 0); + if (op == NULL) + return -1; + operand[(*n_operands)++] = op; + n = x_opr_n_bytes (mra, 1); + if (n < 0) + return n; + n += 1; break; case BM_OPR_W: - operand[(*n_operands)++] = x_opr_decode_with_size (mra, 1, 1); - n = 1 + x_opr_n_bytes (mra, 1); + op = x_opr_decode_with_size (mra, 1, 1); + if (op == NULL) + return -1; + operand[(*n_operands)++] = op; + n = x_opr_n_bytes (mra, 1); + if (n < 0) + return n; + n += 1; break; case BM_OPR_L: - operand[(*n_operands)++] = x_opr_decode_with_size (mra, 1, 3); - n = 1 + x_opr_n_bytes (mra, 1); + op = x_opr_decode_with_size (mra, 1, 3); + if (op == NULL) + return -1; + operand[(*n_operands)++] = op; + n = x_opr_n_bytes (mra, 1); + if (n < 0) + return n; + n += 1; break; case BM_OPR_REG: case BM_RESERVED1: { uint8_t xb; - mra->read (mra, +1, 1, &xb); + status = mra->read (mra, +1, 1, &xb); + if (status < 0) + return status; /* Don't emit a size suffix for register operands */ if ((xb & 0xF8) != 0xB8) { short os = (bm & 0x0c) >> 2; - operand[(*n_operands)++] = x_opr_decode_with_size (mra, 1, os); + op = x_opr_decode_with_size (mra, 1, os); } else - operand[(*n_operands)++] = x_opr_decode (mra, 1); - + op = x_opr_decode (mra, 1); + if (op == NULL) + return -1; + operand[(*n_operands)++] = op; } break; } - int imm = 0; + int x, imm = 0; switch (mode) { case BM_OPR_L: @@ -1918,24 +2170,39 @@ /* fall through */ case BM_OPR_B: imm |= (bm & 0x70) >> 4; - operand[(*n_operands)++] = create_immediate_operand (imm); + op = create_immediate_operand (imm); + if (op == NULL) + return -1; + operand[(*n_operands)++] = op; break; case BM_RESERVED0: imm = (bm & 0x38) >> 3; - operand[(*n_operands)++] = create_immediate_operand (imm); + op = create_immediate_operand (imm); + if (op == NULL) + return -1; + operand[(*n_operands)++] = op; break; case BM_REG_IMM: imm = (bm & 0xF8) >> 3; - operand[(*n_operands)++] = create_immediate_operand (imm); + op = create_immediate_operand (imm); + if (op == NULL) + return -1; + operand[(*n_operands)++] = op; break; case BM_OPR_REG: case BM_RESERVED1: - operand[(*n_operands)++] = create_register_operand ((bm & 0x70) >> 4); - n += x_opr_n_bytes (mra, 1); + op = create_register_operand ((bm & 0x70) >> 4); + if (op == NULL) + return -1; + operand[(*n_operands)++] = op; + x = x_opr_n_bytes (mra, 1); + if (x < 0) + return x; + n += x; break; } - rel_15_7 (mra, n + 1, n_operands, operand); + return rel_15_7 (mra, n + 1, n_operands, operand); } static int @@ -1958,7 +2225,7 @@ } } - int n = 2; + int n = 0; switch (mode) { case BM_REG_IMM: @@ -1968,15 +2235,15 @@ case BM_OPR_B: case BM_OPR_W: case BM_OPR_L: - n += x_opr_n_bytes (mra, 1); - break; case BM_OPR_REG: case BM_RESERVED1: - n += x_opr_n_bytes (mra, 1); + n = x_opr_n_bytes (mra, 1); + if (n < 0) + return n; break; } - return n; + return n + 2; } static int @@ -2043,6 +2310,7 @@ shift_n_bytes (struct mem_read_abstraction_base *mra) { bfd_byte sb; + int opr1, opr2; int status = mra->read (mra, 0, 1, &sb); if (status != 0) return status; @@ -2060,20 +2328,24 @@ { case SB_REG_REG_N_EFF: return 2; - break; case SB_REG_OPR_EFF: case SB_ROT: - return 2 + x_opr_n_bytes (mra, 1); - break; + opr1 = x_opr_n_bytes (mra, 1); + if (opr1 < 0) + return opr1; + return 2 + opr1; case SB_REG_OPR_OPR: - { - int opr1 = x_opr_n_bytes (mra, 1); - int opr2 = 0; - if ((sb & 0x30) != 0x20) + opr1 = x_opr_n_bytes (mra, 1); + if (opr1 < 0) + return opr1; + opr2 = 0; + if ((sb & 0x30) != 0x20) + { opr2 = x_opr_n_bytes (mra, opr1 + 1); - return 2 + opr1 + opr2; - } - break; + if (opr2 < 0) + return opr2; + } + return 2 + opr1 + opr2; default: return 3; } @@ -2084,50 +2356,63 @@ static int - mov_imm_opr_n_bytes (struct mem_read_abstraction_base *mra) { bfd_byte byte; - int status = mra->read (mra, -1, 1, &byte); + int status = mra->read (mra, -1, 1, &byte); if (status < 0) return status; int size = byte - 0x0c + 1; + int n = x_opr_n_bytes (mra, size); + if (n < 0) + return n; - return size + x_opr_n_bytes (mra, size) + 1; + return size + n + 1; } -static void +static int mov_imm_opr (struct mem_read_abstraction_base *mra, int *n_operands, struct operand **operand) { + struct operand *op; bfd_byte byte; int status = mra->read (mra, -1, 1, &byte); if (status < 0) - return ; + return status; int size = byte - 0x0c + 1; - uint32_t imm = decode_signed_value (mra, size); - - operand[(*n_operands)++] = create_immediate_operand (imm); - operand[(*n_operands)++] = x_opr_decode (mra, size); + uint32_t imm; + if (decode_signed_value (mra, size, &imm)) + return -1; + + op = create_immediate_operand (imm); + if (op == NULL) + return -1; + operand[(*n_operands)++] = op; + op = x_opr_decode (mra, size); + if (op == NULL) + return -1; + operand[(*n_operands)++] = op; + return 0; } -static void +static int ld_18bit_decode (struct mem_read_abstraction_base *mra, int *n_operands, struct operand **operand) { + struct operand *op; size_t size = 3; bfd_byte buffer[3]; int status = mra->read (mra, 0, 2, buffer + 1); if (status < 0) - return ; + return status; status = mra->read (mra, -1, 1, buffer); if (status < 0) - return ; + return status; buffer[0] = (buffer[0] & 0x30) >> 4; @@ -2138,7 +2423,11 @@ imm |= buffer[i] << (8 * (size - i - 1)); } - operand[(*n_operands)++] = create_immediate_operand (imm); + op = create_immediate_operand (imm); + if (op == NULL) + return -1; + operand[(*n_operands)++] = op; + return 0; } @@ -2170,7 +2459,9 @@ { int mx = 0; uint8_t lb; - mra->read (mra, mx++, 1, &lb); + int status = mra->read (mra, mx++, 1, &lb); + if (status < 0) + return status; enum LP_MODE mode = -1; size_t i; @@ -2186,11 +2477,16 @@ if (mode == LP_OPR) { - mx += x_opr_n_bytes (mra, mx) ; + int n = x_opr_n_bytes (mra, mx); + if (n < 0) + return n; + mx += n; } uint8_t rb; - mra->read (mra, mx++, 1, &rb); + status = mra->read (mra, mx++, 1, &rb); + if (status < 0) + return status; if (rb & 0x80) mx++; @@ -2211,7 +2507,11 @@ return operator; struct operand *op0 = create_register_operand ((eb & 0xf0) >> 4); + if (op0 == NULL) + return -1; struct operand *op1 = create_register_operand (eb & 0xf); + if (op1 == NULL) + return -1; int reg0 = ((struct register_operand *) op0)->reg; int reg1 = ((struct register_operand *) op1)->reg; @@ -2231,18 +2531,26 @@ } -static void +static int exg_sex_decode (struct mem_read_abstraction_base *mra, int *n_operands, struct operand **operands) { + struct operand *op; uint8_t eb; int status = mra->read (mra, 0, 1, &eb); if (status < 0) - return; + return status; /* Ship out the operands. */ - operands[(*n_operands)++] = create_register_operand ((eb & 0xf0) >> 4); - operands[(*n_operands)++] = create_register_operand (eb & 0xf); + op = create_register_operand ((eb & 0xf0) >> 4); + if (op == NULL) + return -1; + operands[(*n_operands)++] = op; + op = create_register_operand (eb & 0xf); + if (op == NULL) + return -1; + operands[(*n_operands)++] = op; + return 0; } static enum optr @@ -2258,15 +2566,16 @@ return opbase + ((lb & 0x70) >> 4); } -static void +static int loop_primitive_decode (struct mem_read_abstraction_base *mra, int *n_operands, struct operand **operands) { - int offs = 1; + struct operand *op; + int n, offs = 1; uint8_t lb; int status = mra->read (mra, 0, 1, &lb); if (status < 0) - return ; + return status; enum LP_MODE mode = -1; size_t i; @@ -2283,19 +2592,30 @@ switch (mode) { case LP_REG: - operands[(*n_operands)++] = create_register_operand (lb & 0x07); + op = create_register_operand (lb & 0x07); + if (op == NULL) + return -1; + operands[(*n_operands)++] = op; break; case LP_XY: - operands[(*n_operands)++] = - create_register_operand ((lb & 0x01) + REG_X); + op = create_register_operand ((lb & 0x01) + REG_X); + if (op == NULL) + return -1; + operands[(*n_operands)++] = op; break; case LP_OPR: - offs += x_opr_n_bytes (mra, 1); - operands[(*n_operands)++] = x_opr_decode_with_size (mra, 1, lb & 0x03); + n = x_opr_n_bytes (mra, 1); + if (n < 0) + return n; + offs += n; + op = x_opr_decode_with_size (mra, 1, lb & 0x03); + if (op == NULL) + return -1; + operands[(*n_operands)++] = op; break; } - rel_15_7 (mra, offs + 1, n_operands, operands); + return rel_15_7 (mra, offs + 1, n_operands, operands); } @@ -2329,21 +2649,21 @@ } -static void +static int shift_decode (struct mem_read_abstraction_base *mra, int *n_operands, struct operand **operands) { + struct operand *op; size_t i; - uint8_t byte; int status = mra->read (mra, -1, 1, &byte); if (status < 0) - return ; + return status; uint8_t sb; status = mra->read (mra, 0, 1, &sb); if (status < 0) - return ; + return status; enum SB_MODE mode = -1; for (i = 0; i < sizeof (sb_table) / sizeof (sb_table[0]); ++i) @@ -2364,7 +2684,9 @@ case SB_OPR_N: { uint8_t xb; - mra->read (mra, 1, 1, &xb); + status = mra->read (mra, 1, 1, &xb); + if (status < 0) + return status; /* The size suffix is not printed if the OPR operand refers directly to a register, because the size is implied by the size of that register. */ @@ -2381,15 +2703,24 @@ { case SB_REG_REG_N_EFF: case SB_REG_REG_N: - operands[(*n_operands)++] = create_register_operand (byte & 0x07); + op = create_register_operand (byte & 0x07); + if (op == NULL) + return -1; + operands[(*n_operands)++] = op; break; case SB_REG_OPR_EFF: case SB_REG_OPR_OPR: - operands[(*n_operands)++] = create_register_operand (byte & 0x07); + op = create_register_operand (byte & 0x07); + if (op == NULL) + return -1; + operands[(*n_operands)++] = op; break; case SB_ROT: - operands[(*n_operands)++] = x_opr_decode_with_size (mra, 1, osize); + op = x_opr_decode_with_size (mra, 1, osize); + if (op == NULL) + return -1; + operands[(*n_operands)++] = op; break; default: @@ -2401,12 +2732,17 @@ { case SB_REG_REG_N_EFF: case SB_REG_REG_N: - operands[(*n_operands)++] = - create_register_operand_with_size (sb & 0x07, osize); + op = create_register_operand_with_size (sb & 0x07, osize); + if (op == NULL) + return -1; + operands[(*n_operands)++] = op; break; case SB_REG_OPR_OPR: - operands[(*n_operands)++] = x_opr_decode_with_size (mra, 1, osize); + op = x_opr_decode_with_size (mra, 1, osize); + if (op == NULL) + return -1; + operands[(*n_operands)++] = op; break; default: @@ -2418,13 +2754,18 @@ { case SB_REG_OPR_EFF: case SB_OPR_N: - operands[(*n_operands)++] = x_opr_decode_with_size (mra, 1, osize); + op = x_opr_decode_with_size (mra, 1, osize); + if (op == NULL) + return -1; + operands[(*n_operands)++] = op; break; case SB_REG_REG_N: { uint8_t xb; - mra->read (mra, 1, 1, &xb); + status = mra->read (mra, 1, 1, &xb); + if (status < 0) + return status; /* This case is slightly unusual. If XB matches the binary pattern 0111XXXX, then instead of @@ -2435,7 +2776,10 @@ if (byte & 0x10) { int shift = ((sb & 0x08) >> 3) | ((xb & 0x0f) << 1); - operands[(*n_operands)++] = create_immediate_operand (shift); + op = create_immediate_operand (shift); + if (op == NULL) + return -1; + operands[(*n_operands)++] = op; } else { @@ -2445,7 +2789,10 @@ } else { - operands[(*n_operands)++] = x_opr_decode (mra, 1); + op = x_opr_decode (mra, 1); + if (op == NULL) + return -1; + operands[(*n_operands)++] = op; } } break; @@ -2453,18 +2800,28 @@ { uint8_t xb; int n = x_opr_n_bytes (mra, 1); - mra->read (mra, 1 + n, 1, &xb); + if (n < 0) + return n; + status = mra->read (mra, 1 + n, 1, &xb); + if (status < 0) + return status; if ((xb & 0xF0) == 0x70) { int imm = xb & 0x0F; imm <<= 1; imm |= (sb & 0x08) >> 3; - operands[(*n_operands)++] = create_immediate_operand (imm); + op = create_immediate_operand (imm); + if (op == NULL) + return -1; + operands[(*n_operands)++] = op; } else { - operands[(*n_operands)++] = x_opr_decode (mra, 1 + n); + op = x_opr_decode (mra, 1 + n); + if (op == NULL) + return -1; + operands[(*n_operands)++] = op; } } break; @@ -2479,13 +2836,17 @@ case SB_OPR_N: { int imm = (sb & 0x08) ? 2 : 1; - operands[(*n_operands)++] = create_immediate_operand (imm); + op = create_immediate_operand (imm); + if (op == NULL) + return -1; + operands[(*n_operands)++] = op; } break; default: break; } + return 0; } static enum optr @@ -2501,41 +2862,59 @@ } -static void +static int psh_pul_decode (struct mem_read_abstraction_base *mra, int *n_operands, struct operand **operand) { + struct operand *op; uint8_t byte; int status = mra->read (mra, 0, 1, &byte); if (status != 0) - return; + return status; int bit; if (byte & 0x40) { if ((byte & 0x3F) == 0) - operand[(*n_operands)++] = create_register_all16_operand (); + { + op = create_register_all16_operand (); + if (op == NULL) + return -1; + operand[(*n_operands)++] = op; + } else for (bit = 5; bit >= 0; --bit) { if (byte & (0x1 << bit)) { - operand[(*n_operands)++] = create_register_operand (oprregs2[bit]); + op = create_register_operand (oprregs2[bit]); + if (op == NULL) + return -1; + operand[(*n_operands)++] = op; } } } else { if ((byte & 0x3F) == 0) - operand[(*n_operands)++] = create_register_all_operand (); + { + op = create_register_all_operand (); + if (op == NULL) + return -1; + operand[(*n_operands)++] = op; + } else for (bit = 5; bit >= 0; --bit) { if (byte & (0x1 << bit)) { - operand[(*n_operands)++] = create_register_operand (oprregs1[bit]); + op = create_register_operand (oprregs1[bit]); + if (op == NULL) + return -1; + operand[(*n_operands)++] = op; } } } + return 0; } static enum optr @@ -2548,24 +2927,25 @@ if (status != 0) return OP_INVALID; - return (bb & 0x80) ? OP_bfins : OP_bfext; + return (bb & 0x80) ? OP_bfins : OP_bfext; } -static void +static int bit_field_decode (struct mem_read_abstraction_base *mra, int *n_operands, struct operand **operands) { + struct operand *op; int status; bfd_byte byte2; status = mra->read (mra, -1, 1, &byte2); if (status != 0) - return; + return status; bfd_byte bb; status = mra->read (mra, 0, 1, &bb); if (status != 0) - return; + return status; enum BB_MODE mode = -1; size_t i; @@ -2587,15 +2967,22 @@ case BB_REG_REG_IMM: case BB_REG_OPR_REG: case BB_REG_OPR_IMM: - operands[(*n_operands)++] = create_register_operand (reg1); + op = create_register_operand (reg1); + if (op == NULL) + return -1; + operands[(*n_operands)++] = op; break; case BB_OPR_REG_REG: - operands[(*n_operands)++] = x_opr_decode_with_size (mra, 1, - (bb >> 2) & 0x03); + op = x_opr_decode_with_size (mra, 1, (bb >> 2) & 0x03); + if (op == NULL) + return -1; + operands[(*n_operands)++] = op; break; case BB_OPR_REG_IMM: - operands[(*n_operands)++] = x_opr_decode_with_size (mra, 2, - (bb >> 2) & 0x03); + op = x_opr_decode_with_size (mra, 2, (bb >> 2) & 0x03); + if (op == NULL) + return -1; + operands[(*n_operands)++] = op; break; } @@ -2606,23 +2993,33 @@ case BB_REG_REG_IMM: { int reg_src = (bb >> 2) & 0x07; - operands[(*n_operands)++] = create_register_operand (reg_src); + op = create_register_operand (reg_src); + if (op == NULL) + return -1; + operands[(*n_operands)++] = op; } break; case BB_OPR_REG_REG: case BB_OPR_REG_IMM: { int reg_src = (byte2 & 0x07); - operands[(*n_operands)++] = create_register_operand (reg_src); + op = create_register_operand (reg_src); + if (op == NULL) + return -1; + operands[(*n_operands)++] = op; } break; case BB_REG_OPR_REG: - operands[(*n_operands)++] = x_opr_decode_with_size (mra, 1, - (bb >> 2) & 0x03); + op = x_opr_decode_with_size (mra, 1, (bb >> 2) & 0x03); + if (op == NULL) + return -1; + operands[(*n_operands)++] = op; break; case BB_REG_OPR_IMM: - operands[(*n_operands)++] = x_opr_decode_with_size (mra, 2, - (bb >> 2) & 0x03); + op = x_opr_decode_with_size (mra, 2, (bb >> 2) & 0x03); + if (op == NULL) + return -1; + operands[(*n_operands)++] = op; break; } @@ -2634,7 +3031,10 @@ case BB_REG_OPR_REG: { int reg_parm = bb & 0x03; - operands[(*n_operands)++] = create_register_operand (reg_parm); + op = create_register_operand (reg_parm); + if (op == NULL) + return -1; + operands[(*n_operands)++] = op; } break; case BB_REG_REG_IMM: @@ -2642,15 +3042,21 @@ case BB_REG_OPR_IMM: { bfd_byte i1; - mra->read (mra, 1, 1, &i1); + status = mra->read (mra, 1, 1, &i1); + if (status < 0) + return status; int offset = i1 & 0x1f; int width = bb & 0x03; width <<= 3; width |= i1 >> 5; - operands[(*n_operands)++] = create_bitfield_operand (width, offset); + op = create_bitfield_operand (width, offset); + if (op == NULL) + return -1; + operands[(*n_operands)++] = op; } break; } + return 0; } @@ -2665,13 +3071,19 @@ { enum optr op = opc->operator; if (opc->discriminator) - op = opc->discriminator (mra, opc->operator); + { + op = opc->discriminator (mra, opc->operator); + if (op == OP_INVALID) + return op; + } if (opc->operands) - opc->operands (mra, n_operands, operands); + if (opc->operands (mra, n_operands, operands) < 0) + return OP_INVALID; if (opc->operands2) - opc->operands2 (mra, n_operands, operands); + if (opc->operands2 (mra, n_operands, operands) < 0) + return OP_INVALID; return op; } @@ -2685,7 +3097,7 @@ bfd_byte byte; int status = mra->read (mra, 0, 1, &byte); - if (status != 0) + if (status < 0) return status; mra->advance (mra); @@ -2697,7 +3109,9 @@ n_bytes++; bfd_byte byte2; - mra->read (mra, 0, 1, &byte2); + status = mra->read (mra, 0, 1, &byte2); + if (status < 0) + return status; mra->advance (mra); opc = page2 + byte2; } @@ -2705,7 +3119,15 @@ *osize = opc->osize; /* Return the number of bytes in the instruction. */ - n_bytes += (opc && opc->insn_bytes) ? opc->insn_bytes (mra) : 0; + if (*myoperator != OP_INVALID && opc->insn_bytes) + { + int n = opc->insn_bytes (mra); + if (n < 0) + return n; + n_bytes += n; + } + else + n_bytes += 1; return n_bytes; } diff -Nru gdb-9.1/opcodes/s12z-opc.h gdb-10.2/opcodes/s12z-opc.h --- gdb-9.1/opcodes/s12z-opc.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/s12z-opc.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* s12z-dis.h -- Header file for s12z-dis.c and s12z-decode.c - Copyright (C) 2019 Free Software Foundation, Inc. + Copyright (C) 2019-2020 Free Software Foundation, Inc. This file is part of the GNU opcodes library. diff -Nru gdb-9.1/opcodes/s390-dis.c gdb-10.2/opcodes/s390-dis.c --- gdb-9.1/opcodes/s390-dis.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/s390-dis.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* s390-dis.c -- Disassemble S390 instructions - Copyright (C) 2000-2019 Free Software Foundation, Inc. + Copyright (C) 2000-2020 Free Software Foundation, Inc. Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). This file is part of the GNU opcodes library. diff -Nru gdb-9.1/opcodes/s390-mkopc.c gdb-10.2/opcodes/s390-mkopc.c --- gdb-9.1/opcodes/s390-mkopc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/s390-mkopc.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* s390-mkopc.c -- Generates opcode table out of s390-opc.txt - Copyright (C) 2000-2019 Free Software Foundation, Inc. + Copyright (C) 2000-2020 Free Software Foundation, Inc. Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). This file is part of the GNU opcodes library. @@ -240,7 +240,8 @@ ext_table = s390_crb_extensions; ext_table_length = NUM_CRB_EXTENSIONS; break; - default: fprintf (stderr, "Unknown tag char: %c\n", *tag); + default: + abort (); /* Should be unreachable. */ } for (i = 0; i < ext_table_length; i++) diff -Nru gdb-9.1/opcodes/s390-opc.c gdb-10.2/opcodes/s390-opc.c --- gdb-9.1/opcodes/s390-opc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/s390-opc.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* s390-opc.c -- S390 opcode list - Copyright (C) 2000-2019 Free Software Foundation, Inc. + Copyright (C) 2000-2020 Free Software Foundation, Inc. Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). This file is part of the GNU opcodes library. diff -Nru gdb-9.1/opcodes/s390-opc.txt gdb-10.2/opcodes/s390-opc.txt --- gdb-9.1/opcodes/s390-opc.txt 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/s390-opc.txt 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ # S/390 opcodes list. Use s390-mkopc to convert it into the opcode table. -# Copyright (C) 2000-2019 Free Software Foundation, Inc. +# Copyright (C) 2000-2020 Free Software Foundation, Inc. # Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). 5a a RX_RRRD "add" g5 esa,zarch 6a ad RX_FRRD "add normalized (long)" g5 esa,zarch @@ -1159,7 +1159,6 @@ e70000001046 vgmh VRI_V0UU "vector generate mask halfword" z13 zarch vx e70000002046 vgmf VRI_V0UU "vector generate mask word" z13 zarch vx e70000003046 vgmg VRI_V0UU "vector generate mask double word" z13 zarch vx -e70000000006 vl VRX_VRRD "vector memory load" z13 zarch vx e70000000056 vlr VRX_VV "vector register load" z13 zarch vx e70000000005 vlrep VRX_VRRDU "vector load and replicate" z13 zarch vx e70000000005 vlrepb VRX_VRRD "vector load and replicate byte elements" z13 zarch vx @@ -1184,7 +1183,6 @@ e70000001004 vllezh VRX_VRRD "vector load logical halfword element and zero" z13 zarch vx e70000002004 vllezf VRX_VRRD "vector load logical word element and zero" z13 zarch vx e70000003004 vllezg VRX_VRRD "vector load logical double word element and zero" z13 zarch vx -e70000000036 vlm VRS_VVRD "vector load multiple" z13 zarch vx e70000000007 vlbb VRX_VRRDU "vector load to block boundary" z13 zarch vx e70000000022 vlvg VRS_VRRDU "vector load VR element from GR" z13 zarch vx e70000000022 vlvgb VRS_VRRD "vector load VR byte element from GR" z13 zarch vx @@ -1240,12 +1238,10 @@ e7000000005f vsegb VRR_VV "vector sign extend byte to double word" z13 zarch vx e7000000105f vsegh VRR_VV "vector sign extend halfword to double word" z13 zarch vx e7000000205f vsegf VRR_VV "vector sign extend word to double word" z13 zarch vx -e7000000000e vst VRX_VRRD "vector store" z13 zarch vx e70000000008 vsteb VRX_VRRDU "vector store byte element" z13 zarch vx e70000000009 vsteh VRX_VRRDU "vector store halfword element" z13 zarch vx e7000000000b vstef VRX_VRRDU "vector store word element" z13 zarch vx e7000000000a vsteg VRX_VRRDU "vector store double word element" z13 zarch vx -e7000000003e vstm VRS_VVRD "vector store multiple" z13 zarch vx e7000000003f vstl VRS_VRRD "vector store with length" z13 zarch vx e700000000d7 vuph VRR_VV0U "vector unpack high" z13 zarch vx e700000000d7 vuphb VRR_VV "vector unpack high byte" z13 zarch vx @@ -1680,6 +1676,13 @@ e3000000002a lzrg RXY_RRRD "load and zero rightmost byte 64->64" z13 zarch b93c ppno RRE_RR "perform pseudorandom number operation" z13 zarch +# Aligned vector store hints + +e70000000006 vl VRX_VRRDU "vector memory load" z13 zarch optparm,vx +e70000000036 vlm VRS_VVRDU "vector load multiple" z13 zarch optparm,vx +e7000000000e vst VRX_VRRDU "vector store" z13 zarch optparm,vx +e7000000003e vstm VRS_VVRDU "vector store multiple" z13 zarch optparm,vx + # arch12 instructions # Vector Enhancements Facility 1 @@ -1881,14 +1884,6 @@ b9a1 tpei RRE_RR "test pending external interruption" arch12 zarch b9ac irbm RRE_RR "insert reference bits multiple" arch12 zarch -# Aligned vector store hints - -e70000000006 vl VRX_VRRDU "vector memory load" arch12 zarch optparm -e70000000036 vlm VRS_VVRDU "vector load multiple" arch12 zarch optparm -e7000000000e vst VRX_VRRDU "vector store" arch12 zarch optparm -e7000000003e vstm VRS_VVRDU "vector store multiple" arch12 zarch optparm - - # arch13 instructions diff -Nru gdb-9.1/opcodes/score7-dis.c gdb-10.2/opcodes/score7-dis.c --- gdb-9.1/opcodes/score7-dis.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/score7-dis.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Instruction printing code for Score - Copyright (C) 2009-2019 Free Software Foundation, Inc. + Copyright (C) 2009-2020 Free Software Foundation, Inc. Contributed by: Brain.lin (brain.lin@sunplusct.com) Mei Ligang (ligang@sunnorth.com.cn) @@ -48,8 +48,8 @@ struct score_opcode { unsigned long value; - unsigned long mask; /* Recognise instruction if (op & mask) == value. */ - char *assembler; /* Disassembly string. */ + unsigned long mask; /* Recognise instruction if (op & mask) == value. */ + char *assembler; /* Disassembly string. */ }; /* Note: There is a partial ordering in this table - it must be searched from @@ -553,142 +553,142 @@ for (insn = score_opcodes; insn->assembler; insn++) { if ((insn->mask & 0xffff0000) && (given & insn->mask) == insn->value) - { - char *c; + { + char *c; - for (c = insn->assembler; *c; c++) - { - if (*c == '%') - { - switch (*++c) - { - case 'j': - { - int target; - - if (info->flags & INSN_HAS_RELOC) - pc = 0; - target = (pc & 0xfe000000) | (given & 0x01fffffe); - (*info->print_address_func) (target, info); - } - break; - case 'b': - { - /* Sign-extend a 20-bit number. */ -#define SEXT20(x) ((((x) & 0xfffff) ^ (~ 0x7ffff)) + 0x80000) - int disp = ((given & 0x01ff8000) >> 5) | (given & 0x3fe); - int target = (pc + SEXT20 (disp)); - - (*info->print_address_func) (target, info); - } - break; - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - { - int bitstart = *c++ - '0'; - int bitend = 0; - - while (*c >= '0' && *c <= '9') - bitstart = (bitstart * 10) + *c++ - '0'; - - switch (*c) - { - case '-': - c++; - while (*c >= '0' && *c <= '9') - bitend = (bitend * 10) + *c++ - '0'; - - if (!bitend) - abort (); - - switch (*c) - { - case 'r': - { - long reg; - - reg = given >> bitstart; - reg &= (2 << (bitend - bitstart)) - 1; - - func (stream, "%s", score_regnames[reg]); - } - break; - case 'd': - { - long reg; - - reg = given >> bitstart; - reg &= (2 << (bitend - bitstart)) - 1; - - func (stream, "%ld", reg); - } - break; - case 'i': - { - long reg; - - reg = given >> bitstart; - reg &= (2 << (bitend - bitstart)) - 1; - reg = ((reg ^ (1 << (bitend - bitstart))) - - (1 << (bitend - bitstart))); - - if (((given & insn->mask) == 0x0c00000a) /* ldc1 */ - || ((given & insn->mask) == 0x0c000012) /* ldc2 */ - || ((given & insn->mask) == 0x0c00001c) /* ldc3 */ - || ((given & insn->mask) == 0x0c00000b) /* stc1 */ - || ((given & insn->mask) == 0x0c000013) /* stc2 */ - || ((given & insn->mask) == 0x0c00001b)) /* stc3 */ - reg <<= 2; - - func (stream, "%ld", reg); - } - break; - case 'x': - { - long reg; - - reg = given >> bitstart; - reg &= (2 << (bitend - bitstart)) - 1; - - func (stream, "%lx", reg); - } - break; - default: - abort (); - } - break; - case '`': - c++; - if ((given & (1 << bitstart)) == 0) - func (stream, "%c", *c); - break; - case '\'': - c++; - if ((given & (1 << bitstart)) != 0) - func (stream, "%c", *c); - break; - default: - abort (); - } - break; - } - default: + for (c = insn->assembler; *c; c++) + { + if (*c == '%') + { + switch (*++c) + { + case 'j': + { + int target; + + if (info->flags & INSN_HAS_RELOC) + pc = 0; + target = (pc & 0xfe000000) | (given & 0x01fffffe); + (*info->print_address_func) (target, info); + } + break; + case 'b': + { + /* Sign-extend a 20-bit number. */ +#define SEXT20(x) ((((x) & 0xfffff) ^ (~ 0x7ffff)) + 0x80000) + int disp = (given & 0x01ff8000) >> 5 | (given & 0x3fe); + int target = (pc + SEXT20 (disp)); + + (*info->print_address_func) (target, info); + } + break; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + { + int bitstart = *c++ - '0'; + int bitend = 0; + + while (*c >= '0' && *c <= '9') + bitstart = (bitstart * 10) + *c++ - '0'; + + switch (*c) + { + case '-': + c++; + while (*c >= '0' && *c <= '9') + bitend = (bitend * 10) + *c++ - '0'; + + if (!bitend) + abort (); + + switch (*c) + { + case 'r': + { + unsigned long reg; + + reg = given >> bitstart; + reg &= (2u << (bitend - bitstart)) - 1; + + func (stream, "%s", score_regnames[reg]); + } + break; + case 'd': + { + unsigned long reg; + + reg = given >> bitstart; + reg &= (2u << (bitend - bitstart)) - 1; + + func (stream, "%ld", reg); + } + break; + case 'i': + { + long reg; + + reg = given >> bitstart; + reg &= (2u << (bitend - bitstart)) - 1; + reg = ((reg ^ (1 << (bitend - bitstart))) + - (1 << (bitend - bitstart))); + + if (((given & insn->mask) == 0x0c00000a) /* ldc1 */ + || ((given & insn->mask) == 0x0c000012) /* ldc2 */ + || ((given & insn->mask) == 0x0c00001c) /* ldc3 */ + || ((given & insn->mask) == 0x0c00000b) /* stc1 */ + || ((given & insn->mask) == 0x0c000013) /* stc2 */ + || ((given & insn->mask) == 0x0c00001b)) /* stc3 */ + reg *= 4; + + func (stream, "%ld", reg); + } + break; + case 'x': + { + unsigned long reg; + + reg = given >> bitstart; + reg &= (2u << (bitend - bitstart)) - 1; + + func (stream, "%lx", reg); + } + break; + default: + abort (); + } + break; + case '`': + c++; + if ((given & (1u << bitstart)) == 0) + func (stream, "%c", *c); + break; + case '\'': + c++; + if ((given & (1u << bitstart)) != 0) + func (stream, "%c", *c); + break; + default: + abort (); + } + break; + } + default: abort (); - } - } - else - func (stream, "%c", *c); - } - return 4; - } + } + } + else + func (stream, "%c", *c); + } + return 4; + } } #if (SCORE_SIMULATOR_ACTIVE) @@ -724,135 +724,135 @@ for (insn = score_opcodes; insn->assembler; insn++) { if (!(insn->mask & 0xffff0000) && (given & insn->mask) == insn->value) - { - char *c = insn->assembler; + { + char *c = insn->assembler; - info->bytes_per_chunk = 2; - info->bytes_per_line = 4; - given &= 0xffff; - - for (; *c; c++) - { - if (*c == '%') - { - switch (*++c) - { - - case 'j': - { - int target; - - if (info->flags & INSN_HAS_RELOC) - pc = 0; - - target = (pc & 0xfffff000) | (given & 0x00000ffe); - (*info->print_address_func) (target, info); - } - break; - case 'b': - { - /* Sign-extend a 9-bit number. */ -#define SEXT9(x) ((((x) & 0x1ff) ^ (~ 0xff)) + 0x100) - int disp = (given & 0xff) << 1; - int target = (pc + SEXT9 (disp)); - - (*info->print_address_func) (target, info); - } - break; - - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - { - int bitstart = *c++ - '0'; - int bitend = 0; - - while (*c >= '0' && *c <= '9') - bitstart = (bitstart * 10) + *c++ - '0'; - - switch (*c) - { - case '-': - { - long reg; - - c++; - while (*c >= '0' && *c <= '9') - bitend = (bitend * 10) + *c++ - '0'; - if (!bitend) - abort (); - reg = given >> bitstart; - reg &= (2 << (bitend - bitstart)) - 1; - switch (*c) - { - case 'R': - func (stream, "%s", score_regnames[reg + 16]); - break; - case 'r': - func (stream, "%s", score_regnames[reg]); - break; - case 'd': - if (*(c + 1) == '\0') - func (stream, "%ld", reg); - else - { - c++; - if (*c == '1') - func (stream, "%ld", reg << 1); - else if (*c == '2') - func (stream, "%ld", reg << 2); - } - break; - - case 'x': - if (*(c + 1) == '\0') - func (stream, "%lx", reg); - else - { - c++; - if (*c == '1') - func (stream, "%lx", reg << 1); - else if (*c == '2') - func (stream, "%lx", reg << 2); - } - break; - case 'i': - reg = ((reg ^ (1 << bitend)) - (1 << bitend)); - func (stream, "%ld", reg); - break; - default: - abort (); - } - } - break; - - case '\'': - c++; - if ((given & (1 << bitstart)) != 0) - func (stream, "%c", *c); - break; - default: - abort (); - } - } - break; - default: - abort (); - } - } - else - func (stream, "%c", *c); - } + info->bytes_per_chunk = 2; + info->bytes_per_line = 4; + given &= 0xffff; + + for (; *c; c++) + { + if (*c == '%') + { + switch (*++c) + { + + case 'j': + { + int target; + + if (info->flags & INSN_HAS_RELOC) + pc = 0; + + target = (pc & 0xfffff000) | (given & 0x00000ffe); + (*info->print_address_func) (target, info); + } + break; + case 'b': + { + /* Sign-extend a 9-bit number. */ +#define SEXT9(x) ((((x) & 0x1ff) ^ (~ 0xff)) + 0x100) + int disp = (given & 0xff) << 1; + int target = (pc + SEXT9 (disp)); + + (*info->print_address_func) (target, info); + } + break; + + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + { + int bitstart = *c++ - '0'; + int bitend = 0; + + while (*c >= '0' && *c <= '9') + bitstart = (bitstart * 10) + *c++ - '0'; + + switch (*c) + { + case '-': + { + long reg; + + c++; + while (*c >= '0' && *c <= '9') + bitend = (bitend * 10) + *c++ - '0'; + if (!bitend) + abort (); + reg = given >> bitstart; + reg &= (2u << (bitend - bitstart)) - 1; + switch (*c) + { + case 'R': + func (stream, "%s", score_regnames[reg + 16]); + break; + case 'r': + func (stream, "%s", score_regnames[reg]); + break; + case 'd': + if (*(c + 1) == '\0') + func (stream, "%ld", reg); + else + { + c++; + if (*c == '1') + func (stream, "%ld", reg << 1); + else if (*c == '2') + func (stream, "%ld", reg << 2); + } + break; + + case 'x': + if (*(c + 1) == '\0') + func (stream, "%lx", reg); + else + { + c++; + if (*c == '1') + func (stream, "%lx", reg << 1); + else if (*c == '2') + func (stream, "%lx", reg << 2); + } + break; + case 'i': + reg = ((reg ^ (1 << bitend)) - (1 << bitend)); + func (stream, "%ld", reg); + break; + default: + abort (); + } + } + break; + + case '\'': + c++; + if ((given & (1u << bitstart)) != 0) + func (stream, "%c", *c); + break; + default: + abort (); + } + } + break; + default: + abort (); + } + } + else + func (stream, "%c", *c); + } - return 2; - } + return 2; + } } #if (SCORE_SIMULATOR_ACTIVE) func (stream, _("<illegal instruction>")); @@ -862,7 +862,6 @@ abort (); } -/*****************************************************************************/ /* s3_s7: exported functions. */ /* NOTE: There are no checks in these routines that @@ -871,7 +870,7 @@ s7_print_insn (bfd_vma pc, struct disassemble_info *info, bfd_boolean little) { unsigned char b[4]; - long given; + unsigned long given; long ridparity; int status; bfd_boolean insn_pce_p = FALSE; @@ -889,14 +888,14 @@ else { info->bytes_per_chunk = 4; - status = info->read_memory_func (pc, (bfd_byte *) & b[0], 4, info); + status = info->read_memory_func (pc, (bfd_byte *) &b[0], 4, info); if (status != 0) - { - info->bytes_per_chunk = 2; - status = info->read_memory_func (pc, (bfd_byte *) b, 2, info); - b[3] = b[2] = 0; - insn_16_p = TRUE; - } + { + info->bytes_per_chunk = 2; + status = info->read_memory_func (pc, (bfd_byte *) b, 2, info); + b[3] = b[2] = 0; + insn_16_p = TRUE; + } } if (status != 0) @@ -906,13 +905,9 @@ } if (little) - { - given = (b[0]) | (b[1] << 8) | (b[2] << 16) | (b[3] << 24); - } + given = b[0] | b[1] << 8 | b[2] << 16 | (unsigned) b[3] << 24; else - { - given = (b[0] << 24) | (b[1] << 16) | (b[2] << 8) | (b[3]); - } + given = (unsigned) b[0] << 24 | b[1] << 16 | b[2] << 8 | b[3]; if ((given & 0x80008000) == 0x80008000) { @@ -920,25 +915,17 @@ insn_16_p = FALSE; } else if ((given & 0x8000) == 0x8000) - { - insn_pce_p = TRUE; - } + insn_pce_p = TRUE; else - { - insn_16_p = TRUE; - } + insn_16_p = TRUE; /* 16 bit instruction. */ if (insn_16_p) { if (little) - { - given = b[0] | (b[1] << 8); - } + given = b[0] | (b[1] << 8); else - { - given = (b[0] << 8) | b[1]; - } + given = (b[0] << 8) | b[1]; status = print_insn_score16 (pc, info, given); } @@ -953,7 +940,8 @@ status = print_insn_score16 (pc, info, given); print_insn_parallel_sym (info); status += print_insn_score16 (pc, info, other); - /* disassemble_bytes() will output 4 byte per chunk for pce instructio. */ + /* disassemble_bytes() will output 4 byte per chunk for pce + instruction. */ info->bytes_per_chunk = 4; } /* 32 bit instruction. */ @@ -968,5 +956,3 @@ return status; } - -/*****************************************************************************/ diff -Nru gdb-9.1/opcodes/score-dis.c gdb-10.2/opcodes/score-dis.c --- gdb-9.1/opcodes/score-dis.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/score-dis.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Instruction printing code for Score - Copyright (C) 2006-2019 Free Software Foundation, Inc. + Copyright (C) 2006-2020 Free Software Foundation, Inc. Contributed by: Brain.lin (brain.lin@sunplusct.com) Mei Ligang (ligang@sunnorth.com.cn) @@ -41,8 +41,8 @@ struct score_opcode { bfd_vma value; - bfd_vma mask; /* Recognise instruction if (op & mask) == value. */ - char *assembler; /* Disassembly string. */ + bfd_vma mask; /* Recognise instruction if (op & mask) == value. */ + char *assembler; /* Disassembly string. */ }; /* Note: There is a partial ordering in this table - it must be searched from @@ -521,142 +521,140 @@ for (insn = score_opcodes; insn->assembler; insn++) { /* Using insn->mask &0xff00000000 to distinguish 48/32 bit. */ - if (((insn->mask & 0xff0000000000LL)!=0) && (given & insn->mask) == insn->value) - { - info->bytes_per_chunk = 2; - info->bytes_per_line =6; - - char *c; - - for (c = insn->assembler; *c; c++) - { - if (*c == '%') - { - switch (*++c) - { - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - { - int bitstart = *c++ - '0'; - int bitend = 0; - - while (*c >= '0' && *c <= '9') - bitstart = (bitstart * 10) + *c++ - '0'; - - switch (*c) - { - case '-': - c++; - while (*c >= '0' && *c <= '9') - bitend = (bitend * 10) + *c++ - '0'; - - if (!bitend) - abort (); - - switch (*c) - { - case 'r': - { - long reg; - - reg = given >> bitstart; - reg &= (2 << (bitend - bitstart)) - 1; - - func (stream, "%s", score_regnames[reg]); - } - break; - case 'd': - { - long reg; - - reg = given >> bitstart; - reg &= (2 << (bitend - bitstart)) - 1; - - func (stream, "%ld", reg); - } - break; - case 'i': - { - long reg; - reg = given >> bitstart; - reg &= (2 << (bitend - bitstart)) - 1; - reg = ((reg ^ (1 << (bitend - bitstart))) - - (1 << (bitend - bitstart))); - /* Fix bug: s3_testsuite 64-bit. - Remove high 32 bits. */ - reg = (int) reg; - - if (((given & insn->mask) == 0x0c00000a) /* ldc1 */ - || ((given & insn->mask) == 0x0c000012) /* ldc2 */ - || ((given & insn->mask) == 0x0c00001c) /* ldc3 */ - || ((given & insn->mask) == 0x0c00000b) /* stc1 */ - || ((given & insn->mask) == 0x0c000013) /* stc2 */ - || ((given & insn->mask) == 0x0c00001b)) /* stc3 */ - reg <<= 2; - - func (stream, "%ld", reg); - } - break; - case 'x': - { - long reg; - - reg = given >> bitstart; - reg &= (2 << (bitend - bitstart)) - 1; - /* Fix bug: s3_testsuite 64-bit. - Remove high 32 bits. */ - reg = (int) reg; - - func (stream, "%lx", reg); - } - break; - case 'w': - { - long reg; - reg = given >> bitstart; - reg &= (2 << (bitend - bitstart)) - 1; - reg <<=2; - func (stream, "%lx", reg); - } - break; - - default: - abort (); - } - break; - - case '`': - c++; - if ((given & (1 << bitstart)) == 0) - func (stream, "%c", *c); - break; - case '\'': - c++; - if ((given & (1 << bitstart)) != 0) - func (stream, "%c", *c); - break; - default: - abort (); - } - break; - } - default: + if ((insn->mask & 0xff0000000000LL) != 0 + && (given & insn->mask) == insn->value) + { + info->bytes_per_chunk = 2; + info->bytes_per_line =6; + + char *c; + + for (c = insn->assembler; *c; c++) + { + if (*c == '%') + { + switch (*++c) + { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + { + int bitstart = *c++ - '0'; + int bitend = 0; + + while (*c >= '0' && *c <= '9') + bitstart = (bitstart * 10) + *c++ - '0'; + + switch (*c) + { + case '-': + c++; + while (*c >= '0' && *c <= '9') + bitend = (bitend * 10) + *c++ - '0'; + + if (!bitend) + abort (); + + switch (*c) + { + case 'r': + { + unsigned long reg; + + reg = given >> bitstart; + reg &= (2u << (bitend - bitstart)) - 1; + + func (stream, "%s", score_regnames[reg]); + } + break; + case 'd': + { + unsigned long reg; + + reg = given >> bitstart; + reg &= (2u << (bitend - bitstart)) - 1; + + func (stream, "%ld", reg); + } + break; + case 'i': + { + long reg; + reg = given >> bitstart; + reg &= (2u << (bitend - bitstart)) - 1; + reg = ((reg ^ (1u << (bitend - bitstart))) + - (1u << (bitend - bitstart))); + /* Fix bug: s3_testsuite 64-bit. + Remove high 32 bits. */ + reg = (int) reg; + + if (((given & insn->mask) == 0x0c00000a) /* ldc1 */ + || ((given & insn->mask) == 0x0c000012) /* ldc2 */ + || ((given & insn->mask) == 0x0c00001c) /* ldc3 */ + || ((given & insn->mask) == 0x0c00000b) /* stc1 */ + || ((given & insn->mask) == 0x0c000013) /* stc2 */ + || ((given & insn->mask) == 0x0c00001b)) /* stc3 */ + reg *= 4; + + func (stream, "%ld", reg); + } + break; + case 'x': + { + unsigned long reg; + + reg = given >> bitstart; + reg &= (2u << (bitend - bitstart)) - 1; + + func (stream, "%lx", reg); + } + break; + case 'w': + { + unsigned long reg; + reg = given >> bitstart; + reg &= (2u << (bitend - bitstart)) - 1; + reg <<= 2; + func (stream, "%lx", reg); + } + break; + + default: + abort (); + } + break; + + case '`': + c++; + if ((given & (1u << bitstart)) == 0) + func (stream, "%c", *c); + break; + case '\'': + c++; + if ((given & (1u << bitstart)) != 0) + func (stream, "%c", *c); + break; + default: + abort (); + } + break; + } + default: abort (); - } - } - else - func (stream, "%c", *c); - } - return 6; - } + } + } + else + func (stream, "%c", *c); + } + return 6; + } } #if (SCORE_SIMULATOR_ACTIVE) @@ -674,196 +672,207 @@ { struct score_opcode *insn; void *stream = info->stream; - int rb_equal_zero=1; + int rb_equal_zero = 1; fprintf_ftype func = info->fprintf_func; for (insn = score_opcodes; insn->assembler; insn++) { - if (((insn->mask & 0xff0000000000LL)==0)&&(insn->mask & 0xffff0000) && (given & insn->mask) == insn->value) - { - /* check for bcmpeq / bcmpeqz / bcmpne / bcmpnez */ - /* given &0x7c00 is for to test if rb is zero , - rb_equal_zero =1 : index to bcmpeqz - rb_equal_zero =0 , index to bcmpeq - this checking rule only for branch compare ( insn->mask ==0x3e00007e*/ - if (((given & 0x7c00) !=0)&&(rb_equal_zero ==1)&&(insn->mask == 0x3e00007e) - && (insn->value == 0x0000004c || insn->value == 0x0000004e)) - { - rb_equal_zero =0; - continue; - } - - char *c; - - for (c = insn->assembler; *c; c++) - { - if (*c == '%') - { - switch (*++c) - { - case 'j': - { - int target; - - if (info->flags & INSN_HAS_RELOC) - pc = 0; - target = (pc & 0xfe000000) | (given & 0x01fffffe); - (*info->print_address_func) (target, info); - } - break; - case 'b': - { - /* Sign-extend a 20-bit number. */ -#define SEXT20(x) ((((x) & 0xfffff) ^ (~ 0x7ffff)) + 0x80000) - int disp = ((given & 0x01ff8000) >> 5) | (given & 0x3fe); - int target = (pc + SEXT20 (disp)); - - (*info->print_address_func) (target, info); - } - break; - case 'z': - { -#define SEXT10(x) ((((x) & 0x3ff) ^ (~ 0x1ff)) + 0x200) - if ((given & 0x7c00 ) == 0) - { - /* Sign-extend a 20-bit number. */ - /* disp : [24 -20] , [9-7 ] , [0] */ - int disp = (given&1)<<1 |((given>>7)&7)<<2 |((given>>20)&0x1f)<<5; - int target = (pc + SEXT10 (disp)); - (*info->print_address_func) (target, info); - } - else - { - long reg; - int bitstart = 10; - int bitend = 14; - reg = given >> bitstart; - reg &= (2 << (bitend - bitstart)) - 1; - /* Sign-extend a 20-bit number. */ - int disp = (given&1)<<1 |((given>>7)&7)<<2 |((given>>20)&0x1f)<<5; - int target = (pc + SEXT10 (disp)); - func (stream, "%s ,", score_regnames[reg] ); - (*info->print_address_func) (target, info); - - } - - } - break; - case 'm': - { - /* disp : [24 -20] , [9-7 ] , [0] */ - int disp = (given&1)<<2 |((given>>7)&7)<<3 |((given>>20)&0x1f)<<6; - (*info->print_address_func) (disp, info); - } - break; - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - { - int bitstart = *c++ - '0'; - int bitend = 0; - - while (*c >= '0' && *c <= '9') - bitstart = (bitstart * 10) + *c++ - '0'; - - switch (*c) - { - case '-': - c++; - while (*c >= '0' && *c <= '9') - bitend = (bitend * 10) + *c++ - '0'; - - if (!bitend) - abort (); - - switch (*c) - { - case 'r': - { - long reg; - - reg = given >> bitstart; - reg &= (2 << (bitend - bitstart)) - 1; - - func (stream, "%s", score_regnames[reg]); - } - break; - case 'd': - { - long reg; - - reg = given >> bitstart; - reg &= (2 << (bitend - bitstart)) - 1; - - func (stream, "%ld", reg); - } - break; - case 'i': - { - long reg; - - reg = given >> bitstart; - reg &= (2 << (bitend - bitstart)) - 1; - reg = ((reg ^ (1 << (bitend - bitstart))) - - (1 << (bitend - bitstart))); - - if (((given & insn->mask) == 0x0c00000a) /* ldc1 */ - || ((given & insn->mask) == 0x0c000012) /* ldc2 */ - || ((given & insn->mask) == 0x0c00001c) /* ldc3 */ - || ((given & insn->mask) == 0x0c00000b) /* stc1 */ - || ((given & insn->mask) == 0x0c000013) /* stc2 */ - || ((given & insn->mask) == 0x0c00001b)) /* stc3 */ - reg <<= 2; - - func (stream, "%ld", reg); - } - break; - case 'x': - { - long reg; - - reg = given >> bitstart; - reg &= (2 << (bitend - bitstart)) - 1; - - func (stream, "%lx", reg); - } - break; - default: - abort (); - } - break; - - case '`': - c++; - if ((given & (1 << bitstart)) == 0) - func (stream, "%c", *c); - break; - case '\'': - c++; - if ((given & (1 << bitstart)) != 0) - func (stream, "%c", *c); - break; - default: - abort (); - } - break; - } - default: + if ((insn->mask & 0xff0000000000LL) == 0 + && (insn->mask & 0xffff0000) != 0 + && (given & insn->mask) == insn->value) + { + /* check for bcmpeq / bcmpeqz / bcmpne / bcmpnez + given & 0x7c00 is to test if rb is zero, + rb_equal_zero = 1 : index to bcmpeqz + rb_equal_zero = 0 , index to bcmpeq + only for branch compare (insn->mask == 0x3e00007e). */ + if ((given & 0x7c00) != 0 + && rb_equal_zero + && insn->mask == 0x3e00007e + && (insn->value == 0x0000004c || insn->value == 0x0000004e)) + { + rb_equal_zero =0; + continue; + } + + char *c; + + for (c = insn->assembler; *c; c++) + { + if (*c == '%') + { + switch (*++c) + { + case 'j': + { + int target; + + if (info->flags & INSN_HAS_RELOC) + pc = 0; + target = (pc & 0xfe000000) | (given & 0x01fffffe); + (*info->print_address_func) (target, info); + } + break; + case 'b': + { + /* Sign-extend a 20-bit number. */ +#define SEXT20(x) ((((x) & 0xfffff) ^ (~ 0x7ffff)) + 0x80000) + int disp = (((given & 0x01ff8000) >> 5) + | (given & 0x3fe)); + int target = (pc + SEXT20 (disp)); + + (*info->print_address_func) (target, info); + } + break; + case 'z': + { +#define SEXT10(x) ((((x) & 0x3ff) ^ (~ 0x1ff)) + 0x200) + if ((given & 0x7c00 ) == 0) + { + /* Sign-extend a 20-bit number. */ + /* disp : [24 -20] , [9-7 ] , [0] */ + int disp = ((given & 1) << 1 + | ((given >> 7) & 7) << 2 + | ((given >> 20) & 0x1f) <<5); + int target = (pc + SEXT10 (disp)); + (*info->print_address_func) (target, info); + } + else + { + unsigned long reg; + int bitstart = 10; + int bitend = 14; + reg = given >> bitstart; + reg &= (2u << (bitend - bitstart)) - 1; + /* Sign-extend a 20-bit number. */ + int disp = ((given & 1) << 1 + | ((given >> 7) & 7) << 2 + | ((given >> 20) & 0x1f) <<5); + int target = (pc + SEXT10 (disp)); + func (stream, "%s ,", score_regnames[reg] ); + (*info->print_address_func) (target, info); + + } + + } + break; + case 'm': + { + /* disp : [24 -20] , [9-7 ] , [0] */ + int disp = ((given & 1) << 2 + | ((given >> 7) & 7) << 3 + | ((given >> 20) & 0x1f) << 6); + (*info->print_address_func) (disp, info); + } + break; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + { + int bitstart = *c++ - '0'; + int bitend = 0; + + while (*c >= '0' && *c <= '9') + bitstart = (bitstart * 10) + *c++ - '0'; + + switch (*c) + { + case '-': + c++; + while (*c >= '0' && *c <= '9') + bitend = (bitend * 10) + *c++ - '0'; + + if (!bitend) + abort (); + + switch (*c) + { + case 'r': + { + unsigned long reg; + + reg = given >> bitstart; + reg &= (2u << (bitend - bitstart)) - 1; + + func (stream, "%s", score_regnames[reg]); + } + break; + case 'd': + { + unsigned long reg; + + reg = given >> bitstart; + reg &= (2u << (bitend - bitstart)) - 1; + + func (stream, "%ld", reg); + } + break; + case 'i': + { + long reg; + + reg = given >> bitstart; + reg &= (2u << (bitend - bitstart)) - 1; + reg = ((reg ^ (1u << (bitend - bitstart))) + - (1u << (bitend - bitstart))); + + if (((given & insn->mask) == 0x0c00000a) /* ldc1 */ + || ((given & insn->mask) == 0x0c000012) /* ldc2 */ + || ((given & insn->mask) == 0x0c00001c) /* ldc3 */ + || ((given & insn->mask) == 0x0c00000b) /* stc1 */ + || ((given & insn->mask) == 0x0c000013) /* stc2 */ + || ((given & insn->mask) == 0x0c00001b)) /* stc3 */ + reg *= 4; + + func (stream, "%ld", reg); + } + break; + case 'x': + { + unsigned long reg; + + reg = given >> bitstart; + reg &= (2u << (bitend - bitstart)) - 1; + + func (stream, "%lx", reg); + } + break; + default: + abort (); + } + break; + + case '`': + c++; + if ((given & (1u << bitstart)) == 0) + func (stream, "%c", *c); + break; + case '\'': + c++; + if ((given & (1u << bitstart)) != 0) + func (stream, "%c", *c); + break; + default: + abort (); + } + break; + } + default: abort (); - } - } - else - func (stream, "%c", *c); - } - return 4; - } + } + } + else + func (stream, "%c", *c); + } + return 4; + } } #if (SCORE_SIMULATOR_ACTIVE) @@ -886,146 +895,146 @@ given &= 0xffff; for (insn = score_opcodes; insn->assembler; insn++) { - if (((insn->mask & 0xff0000000000LL)==0) &&!(insn->mask & 0xffff0000) && (given & insn->mask) == insn->value) - { - char *c = insn->assembler; - - info->bytes_per_chunk = 2; - info->bytes_per_line = 4; - given &= 0xffff; - - for (; *c; c++) - { - if (*c == '%') - { - switch (*++c) - { - - case 'j': - { - int target; - - if (info->flags & INSN_HAS_RELOC) - pc = 0; - - target = (pc & 0xfffff000) | (given & 0x00000ffe); - (*info->print_address_func) (target, info); - } - break; - case 'b': - { - /* Sign-extend a 9-bit number. */ -#define SEXT10(x) ((((x) & 0x3ff) ^ (~ 0x1ff)) + 0x200) - int disp = (given & 0x1ff) << 1; - int target = (pc + SEXT10 (disp)); - - (*info->print_address_func) (target, info); - } - break; - - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - { - int bitstart = *c++ - '0'; - int bitend = 0; - - while (*c >= '0' && *c <= '9') - bitstart = (bitstart * 10) + *c++ - '0'; - - switch (*c) - { - case '-': - { - long reg; - - c++; - while (*c >= '0' && *c <= '9') - bitend = (bitend * 10) + *c++ - '0'; - if (!bitend) - abort (); - reg = given >> bitstart; - reg &= (2 << (bitend - bitstart)) - 1; - - /* Check rpush rd, 0 and rpop! rd, 0. - If reg = 0, then set to 32. */ - if (((given & 0x00007c00) == 0x00006c00 - || (given & 0x00007c00) == 0x00006800) - && reg == 0) - { - reg = 32; - } - - switch (*c) - { - case 'R': - func (stream, "%s", score_regnames[reg + 16]); - break; - case 'r': - func (stream, "%s", score_regnames[reg]); - break; - case 'd': - if (*(c + 1) == '\0') - func (stream, "%ld", reg); - else - { - c++; - if (*c == '1') - func (stream, "%ld", reg << 1); - else if (*c == '2') - func (stream, "%ld", reg << 2); - } - break; - - case 'x': - if (*(c + 1) == '\0') - func (stream, "%lx", reg); - else - { - c++; - if (*c == '1') - func (stream, "%lx", reg << 1); - else if (*c == '2') - func (stream, "%lx", reg << 2); - } - break; - case 'i': - reg = ((reg ^ (1 << bitend)) - (1 << bitend)); - func (stream, "%ld", reg); - break; - default: - abort (); - } - } - break; - - case '\'': - c++; - if ((given & (1 << bitstart)) != 0) - func (stream, "%c", *c); - break; - default: - abort (); - } - } - break; - default: - abort (); - } - } - else - func (stream, "%c", *c); - } + if ((insn->mask & 0xff0000000000LL) == 0 + && !(insn->mask & 0xffff0000) + && (given & insn->mask) == insn->value) + { + char *c = insn->assembler; + + info->bytes_per_chunk = 2; + info->bytes_per_line = 4; + given &= 0xffff; + + for (; *c; c++) + { + if (*c == '%') + { + switch (*++c) + { + case 'j': + { + int target; + + if (info->flags & INSN_HAS_RELOC) + pc = 0; + + target = (pc & 0xfffff000) | (given & 0x00000ffe); + (*info->print_address_func) (target, info); + } + break; + + case 'b': + { + /* Sign-extend a 9-bit number. */ +#define SEXT10(x) ((((x) & 0x3ff) ^ (~ 0x1ff)) + 0x200) + int disp = (given & 0x1ff) << 1; + int target = (pc + SEXT10 (disp)); + + (*info->print_address_func) (target, info); + } + break; + + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + { + int bitstart = *c++ - '0'; + int bitend = 0; + + while (*c >= '0' && *c <= '9') + bitstart = (bitstart * 10) + *c++ - '0'; + + switch (*c) + { + case '-': + { + long reg; + + c++; + while (*c >= '0' && *c <= '9') + bitend = (bitend * 10) + *c++ - '0'; + if (!bitend) + abort (); + reg = given >> bitstart; + reg &= (2u << (bitend - bitstart)) - 1; + + switch (*c) + { + case 'R': + func (stream, "%s", score_regnames[reg + 16]); + break; + case 'r': + func (stream, "%s", score_regnames[reg]); + break; + case 'd': + /* Check rpush rd, 0 and rpop! rd, 0. + If 0, then print 32. */ + if (((given & 0x00007c00) == 0x00006c00 + || (given & 0x00007c00) == 0x00006800) + && reg == 0) + reg = 32; + + if (*(c + 1) == '\0') + func (stream, "%ld", reg); + else + { + c++; + if (*c == '1') + func (stream, "%ld", reg << 1); + else if (*c == '2') + func (stream, "%ld", reg << 2); + } + break; + + case 'x': + if (*(c + 1) == '\0') + func (stream, "%lx", reg); + else + { + c++; + if (*c == '1') + func (stream, "%lx", reg << 1); + else if (*c == '2') + func (stream, "%lx", reg << 2); + } + break; + case 'i': + reg = (reg ^ (1u << bitend)) - (1u << bitend); + func (stream, "%ld", reg); + break; + default: + abort (); + } + } + break; + + case '\'': + c++; + if ((given & (1u << bitstart)) != 0) + func (stream, "%c", *c); + break; + default: + abort (); + } + } + break; + default: + abort (); + } + } + else + func (stream, "%c", *c); + } - return 2; - } + return 2; + } } #if (SCORE_SIMULATOR_ACTIVE) func (stream, _("<illegal instruction>")); @@ -1042,7 +1051,7 @@ s3_print_insn (bfd_vma pc, struct disassemble_info *info, bfd_boolean little) { unsigned char b[6]; - bfd_vma given,given_h , given_l, given_16, given_32, given_48; + bfd_vma given, given_h, given_l, given_16, given_32, given_48; bfd_vma ridparity; int status; void *stream = info->stream; @@ -1050,61 +1059,54 @@ info->display_endian = little ? BFD_ENDIAN_LITTLE : BFD_ENDIAN_BIG; info->bytes_per_chunk = 2; - status = info->read_memory_func (pc, (bfd_byte *) & b[0], 4, info); + status = info->read_memory_func (pc, (bfd_byte *) &b[0], 4, info); if (status != 0) { info->bytes_per_chunk = 2; status = info->read_memory_func (pc, (bfd_byte *) b, 2, info); b[3] = b[2] = 0; if (status != 0) - { - info->memory_error_func (status, pc, info); - return -1; - } + { + info->memory_error_func (status, pc, info); + return -1; + } } if (little) - { - given = b[0] | (b[1] << 8); - } + given = b[0] | (b[1] << 8); else - { - given = (b[0] << 8) | b[1]; - } + given = (b[0] << 8) | b[1]; /* Set given_16. */ given_16 = given; /* Judge if now is insn_16_p. */ if ((given & 0x8000)==0) - return print_insn_score16 (pc, info, given); - + return print_insn_score16 (pc, info, given); else { if (little) - { - given = ((bfd_vma)b[2]) | ((bfd_vma)b[3] << 8) | ((bfd_vma)b[0] << 16) | ((bfd_vma)b[1] << 24); - } + given = ((bfd_vma) b[2] | (bfd_vma) b[3] << 8 + | (bfd_vma) b[0] << 16 | (bfd_vma) b[1] << 24); else - { - given = ((bfd_vma)b[0] << 24) | ((bfd_vma)b[1] << 16) | ((bfd_vma)b[2] << 8) | ((bfd_vma)b[3]); - } + given = ((bfd_vma) b[0] << 24 | (bfd_vma) b[1] << 16 + | (bfd_vma) b[2] << 8 | (bfd_vma) b[3]); /* Set given_32. */ given_32 = given; /* Judge if now is insn_32. */ - if ((given &0x80008000)==0x80000000) - { - /* Get rid of parity. */ - ridparity = (given & 0x7FFF); - ridparity |= (given & 0x7FFF0000) >> 1; - given = ridparity; - return print_insn_score32 (pc, info, given); - } + if ((given & 0x80008000) == 0x80000000) + { + /* Get rid of parity. */ + ridparity = (given & 0x7FFF); + ridparity |= (given & 0x7FFF0000) >> 1; + given = ridparity; + return print_insn_score32 (pc, info, given); + } } /* The insn is 48 bit. */ - status = info->read_memory_func (pc, (bfd_byte *) & b[0], 6, info); + status = info->read_memory_func (pc, (bfd_byte *) &b[0], 6, info); if (status != 0) { info->memory_error_func (status, pc, info); @@ -1112,58 +1114,56 @@ } if (little) - { - given = ((bfd_vma)b[4]) | ((bfd_vma)b[5] << 8) | ((bfd_vma)b[2] << 16) | ((bfd_vma)b[3] << 24) - | ((bfd_vma)b[0] << 32) | ((bfd_vma)b[1] << 40); - } + given = ((bfd_vma) b[4] | (bfd_vma) b[5] << 8 + | (bfd_vma) b[2] << 16 | (bfd_vma) b[3] << 24 + | (bfd_vma) b[0] << 32 | (bfd_vma) b[1] << 40); else { - given_l = ((bfd_vma)b[5]) | ((bfd_vma)b[4] << 8) | ((bfd_vma)b[3] << 16) | ((bfd_vma)b[2] << 24) ; - given_h = ((bfd_vma)b[1] )|((bfd_vma)b[0] <<8); - given = ((bfd_vma)given_h<<32) | (bfd_vma)given_l ; - + given_l = ((bfd_vma) b[5] | (bfd_vma) b[4] << 8 + | (bfd_vma) b[3] << 16 | (bfd_vma) b[2] << 24); + given_h = (bfd_vma) b[1] | (bfd_vma) b[0] << 8; + given = (bfd_vma) given_h << 32 | (bfd_vma) given_l ; } - /* Set given_48. */ - given_48 = given; + /* Set given_48. */ + given_48 = given; + + if ((given & 0x800080008000LL) == 0x800080000000LL) + { + /* Get rid of parity. */ + ridparity = (given & 0x7FFF); + ridparity |= (given & 0x7FFF0000) >> 1; + ridparity |= (given & 0x7FFF00000000LL) >> 2; + given = ridparity; + status = print_insn_score48 (info, given); + return status; + } - if ((given & 0x800080008000LL) == 0x800080000000LL) - { - /* Get rid of parity. */ - ridparity = (given & 0x7FFF); - ridparity |= (given & 0x7FFF0000) >> 1; - ridparity |= (given & 0x7FFF00000000LL) >> 2; - given = ridparity; - status = print_insn_score48 (info, given); - return status; - } - - /* Check 0x800080008000, 0x80008000, 0x8000. */ - if ((given_48 & 0x800080008000LL) != 0x800080000000LL) - { + /* Check 0x800080008000, 0x80008000, 0x8000. */ + if ((given_48 & 0x800080008000LL) != 0x800080000000LL) + { #if (SCORE_SIMULATOR_ACTIVE) - func (stream, _("<illegal instruction>")); - return 6; + func (stream, _("<illegal instruction>")); + return 6; #endif - } - if (((given_32 & 0xffff00000000LL) == 0) && ((given_32 & 0x80008000) != 0x80000000)) - { + } + if ((given_32 & 0xffff00000000LL) == 0 + && ((given_32 & 0x80008000) != 0x80000000)) + { #if (SCORE_SIMULATOR_ACTIVE) - func (stream, _("<illegal instruction>")); - return 4; + func (stream, _("<illegal instruction>")); + return 4; #endif - } - if (((given_16 & 0xffffffff0000LL) == 0) && ((given_16 & 0x8000) != 0)) - { + } + if (((given_16 & 0xffffffff0000LL) == 0) && ((given_16 & 0x8000) != 0)) + { #if (SCORE_SIMULATOR_ACTIVE) - func (stream, _("<illegal instruction>")); - return 2; + func (stream, _("<illegal instruction>")); + return 2; #endif - } - else - { - return 0; - } + } + else + return 0; } static unsigned long @@ -1195,14 +1195,14 @@ #else /* not BFD64 */ int print_insn_big_score (bfd_vma pc ATTRIBUTE_UNUSED, - struct disassemble_info * info ATTRIBUTE_UNUSED) + struct disassemble_info *info ATTRIBUTE_UNUSED) { abort (); } int print_insn_little_score (bfd_vma pc ATTRIBUTE_UNUSED, - struct disassemble_info * info ATTRIBUTE_UNUSED) + struct disassemble_info *info ATTRIBUTE_UNUSED) { abort (); } diff -Nru gdb-9.1/opcodes/score-opc.h gdb-10.2/opcodes/score-opc.h --- gdb-9.1/opcodes/score-opc.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/score-opc.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2006-2019 Free Software Foundation, Inc. +/* Copyright (C) 2006-2020 Free Software Foundation, Inc. This file is part of the GNU opcodes library. diff -Nru gdb-9.1/opcodes/sh-dis.c gdb-10.2/opcodes/sh-dis.c --- gdb-9.1/opcodes/sh-dis.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/sh-dis.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Disassemble SH instructions. - Copyright (C) 1993-2019 Free Software Foundation, Inc. + Copyright (C) 1993-2020 Free Software Foundation, Inc. This file is part of the GNU opcodes library. @@ -102,8 +102,7 @@ /* Print a double data transfer insn. INSN is just the lower three nibbles of the insn, i.e. field a and the bit that indicates if - a parallel processing insn follows. - Return nonzero if a field b of a parallel processing insns follows. */ + a parallel processing insn follows. */ static void print_insn_ddt (int insn, struct disassemble_info *info) @@ -113,7 +112,10 @@ /* If this is just a nop, make sure to emit something. */ if (insn == 0x000) - fprintf_fn (stream, "nopx\tnopy"); + { + fprintf_fn (stream, "nopx\tnopy"); + return; + } /* If a parallel processing insn was printed before, and we got a non-nop, emit a tab. */ @@ -121,8 +123,8 @@ fprintf_fn (stream, "\t"); /* Check if either the x or y part is invalid. */ - if (((insn & 0xc) == 0 && (insn & 0x2a0)) - || ((insn & 3) == 0 && (insn & 0x150))) + if (((insn & 3) != 0 && (insn & 0xc) == 0 && (insn & 0x2a0)) + || ((insn & 3) == 0 && (insn & 0xc) != 0 && (insn & 0x150))) if (info->mach != bfd_mach_sh_dsp && info->mach != bfd_mach_sh3_dsp) { @@ -157,7 +159,7 @@ fprintf_fn, stream); } else - fprintf_fn (stream, ".word 0x%x", insn); + fprintf_fn (stream, ".word 0x%x", insn | 0xf000); else { static const sh_opcode_info *first_movx, *first_movy; @@ -189,6 +191,8 @@ print_movxy (opy, ((insn >> 8) & 1) + 6, (insn >> 6) & 1, fprintf_fn, stream); } + if (!insn_x && !insn_y && ((insn & 0x3ff) != 0 || (insn & 0x800) == 0)) + fprintf_fn (stream, ".word 0x%x", insn | 0xf000); } } @@ -593,7 +597,7 @@ case IMM1_4BY4: imm = nibs[3] << 2; goto ok; - case IMM0_8: + case IMM0_8S: case IMM1_8: imm = (nibs[2] << 4) | nibs[3]; disp = imm; @@ -601,6 +605,10 @@ if (imm & 0x80) imm -= 0x100; goto ok; + case IMM0_8U: + disp = imm = (nibs[2] << 4) | nibs[3]; + has_disp = 1; + goto ok; case PCRELIMM_8BY2: imm = ((nibs[2] << 4) | nibs[3]) << 1; relmask = ~(bfd_vma) 1; diff -Nru gdb-9.1/opcodes/sh-opc.h gdb-10.2/opcodes/sh-opc.h --- gdb-9.1/opcodes/sh-opc.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/sh-opc.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Definitions for SH opcodes. - Copyright (C) 1993-2019 Free Software Foundation, Inc. + Copyright (C) 1993-2020 Free Software Foundation, Inc. This file is part of the GNU opcodes library. @@ -61,7 +61,8 @@ IMM1_4BY4, PCRELIMM_8BY2, PCRELIMM_8BY4, - IMM0_8, + IMM0_8S, + IMM0_8U, IMM0_8BY2, IMM0_8BY4, IMM1_8, @@ -381,7 +382,7 @@ const sh_opcode_info sh_table[] = { -/* 0111nnnni8*1.... add #<imm>,<REG_N> */{"add",{A_IMM,A_REG_N},{HEX_7,REG_N,IMM0_8}, arch_sh_up}, +/* 0111nnnni8*1.... add #<imm>,<REG_N> */{"add",{A_IMM,A_REG_N},{HEX_7,REG_N,IMM0_8S}, arch_sh_up}, /* 0011nnnnmmmm1100 add <REG_M>,<REG_N> */{"add",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_C}, arch_sh_up}, @@ -389,11 +390,11 @@ /* 0011nnnnmmmm1111 addv <REG_M>,<REG_N>*/{"addv",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_F}, arch_sh_up}, -/* 11001001i8*1.... and #<imm>,R0 */{"and",{A_IMM,A_R0},{HEX_C,HEX_9,IMM0_8}, arch_sh_up}, +/* 11001001i8*1.... and #<imm>,R0 */{"and",{A_IMM,A_R0},{HEX_C,HEX_9,IMM0_8U}, arch_sh_up}, /* 0010nnnnmmmm1001 and <REG_M>,<REG_N> */{"and",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_9}, arch_sh_up}, -/* 11001101i8*1.... and.b #<imm>,@(R0,GBR)*/{"and.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_D,IMM0_8}, arch_sh_up}, +/* 11001101i8*1.... and.b #<imm>,@(R0,GBR)*/{"and.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_D,IMM0_8U}, arch_sh_up}, /* 1010i12......... bra <bdisp12> */{"bra",{A_BDISP12},{HEX_A,BRANCH_12}, arch_sh_up}, @@ -419,7 +420,7 @@ /* 0000000000001000 clrt */{"clrt",{0},{HEX_0,HEX_0,HEX_0,HEX_8}, arch_sh_up}, -/* 10001000i8*1.... cmp/eq #<imm>,R0 */{"cmp/eq",{A_IMM,A_R0},{HEX_8,HEX_8,IMM0_8}, arch_sh_up}, +/* 10001000i8*1.... cmp/eq #<imm>,R0 */{"cmp/eq",{A_IMM,A_R0},{HEX_8,HEX_8,IMM0_8S}, arch_sh_up}, /* 0011nnnnmmmm0000 cmp/eq <REG_M>,<REG_N>*/{"cmp/eq",{ A_REG_M,A_REG_N},{HEX_3,REG_N,REG_M,HEX_0}, arch_sh_up}, @@ -504,7 +505,7 @@ /* 0100nnnn1xxx0111 ldc.l @<REG_N>+,Rn_BANK */{"ldc.l",{A_INC_N,A_REG_B},{HEX_4,REG_N,REG_B,HEX_7}, arch_sh3_nommu_up}, /* 0100mmmm00110100 ldrc <REG_M> */{"ldrc",{A_REG_M},{HEX_4,REG_M,HEX_3,HEX_4}, arch_sh4al_dsp_up}, -/* 10001010i8*1.... ldrc #<imm> */{"ldrc",{A_IMM},{HEX_8,HEX_A,IMM0_8}, arch_sh4al_dsp_up}, +/* 10001010i8*1.... ldrc #<imm> */{"ldrc",{A_IMM},{HEX_8,HEX_A,IMM0_8U}, arch_sh4al_dsp_up}, /* 10001110i8p2.... ldre @(<disp>,PC) */{"ldre",{A_DISP_PC},{HEX_8,HEX_E,PCRELIMM_8BY2}, arch_sh_dsp_up}, @@ -558,7 +559,7 @@ /* 0100nnnnmmmm1111 mac.w @<REG_M>+,@<REG_N>+*/{"mac.w",{A_INC_M,A_INC_N},{HEX_4,REG_N,REG_M,HEX_F}, arch_sh_up}, -/* 1110nnnni8*1.... mov #<imm>,<REG_N> */{"mov",{A_IMM,A_REG_N},{HEX_E,REG_N,IMM0_8}, arch_sh_up}, +/* 1110nnnni8*1.... mov #<imm>,<REG_N> */{"mov",{A_IMM,A_REG_N},{HEX_E,REG_N,IMM0_8S}, arch_sh_up}, /* 0110nnnnmmmm0011 mov <REG_M>,<REG_N> */{"mov",{ A_REG_M,A_REG_N},{HEX_6,REG_N,REG_M,HEX_3}, arch_sh_up}, @@ -570,7 +571,7 @@ /* 10000100mmmmi4*1 mov.b @(<disp>,<REG_M>),R0*/{"mov.b",{A_DISP_REG_M,A_R0},{HEX_8,HEX_4,REG_M,IMM0_4}, arch_sh_up}, -/* 11000100i8*1.... mov.b @(<disp>,GBR),R0*/{"mov.b",{A_DISP_GBR,A_R0},{HEX_C,HEX_4,IMM0_8}, arch_sh_up}, +/* 11000100i8*1.... mov.b @(<disp>,GBR),R0*/{"mov.b",{A_DISP_GBR,A_R0},{HEX_C,HEX_4,IMM0_8S}, arch_sh_up}, /* 0000nnnnmmmm1100 mov.b @(R0,<REG_M>),<REG_N>*/{"mov.b",{A_IND_R0_REG_M,A_REG_N},{HEX_0,REG_N,REG_M,HEX_C}, arch_sh_up}, @@ -677,11 +678,11 @@ /* 0000nnnn10110011 ocbwb @<REG_N> */{"ocbwb",{A_IND_N},{HEX_0,REG_N,HEX_B,HEX_3}, arch_sh4_nommu_nofpu_up}, -/* 11001011i8*1.... or #<imm>,R0 */{"or",{A_IMM,A_R0},{HEX_C,HEX_B,IMM0_8}, arch_sh_up}, +/* 11001011i8*1.... or #<imm>,R0 */{"or",{A_IMM,A_R0},{HEX_C,HEX_B,IMM0_8U}, arch_sh_up}, /* 0010nnnnmmmm1011 or <REG_M>,<REG_N> */{"or",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_B}, arch_sh_up}, -/* 11001111i8*1.... or.b #<imm>,@(R0,GBR)*/{"or.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_F,IMM0_8}, arch_sh_up}, +/* 11001111i8*1.... or.b #<imm>,@(R0,GBR)*/{"or.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_F,IMM0_8U}, arch_sh_up}, /* 0000nnnn10000011 pref @<REG_N> */{"pref",{A_IND_N},{HEX_0,REG_N,HEX_8,HEX_3}, arch_sh2a_nofpu_or_sh3_nommu_up}, @@ -707,11 +708,11 @@ /* 0100nnnn00010100 setrc <REG_N> */{"setrc",{A_REG_N},{HEX_4,REG_N,HEX_1,HEX_4}, arch_sh_dsp_up}, -/* 10000010i8*1.... setrc #<imm> */{"setrc",{A_IMM},{HEX_8,HEX_2,IMM0_8}, arch_sh_dsp_up}, +/* 10000010i8*1.... setrc #<imm> */{"setrc",{A_IMM},{HEX_8,HEX_2,IMM0_8U}, arch_sh_dsp_up}, /* repeat start end <REG_N> */{"repeat",{A_DISP_PC,A_DISP_PC,A_REG_N},{REPEAT,REG_N,HEX_1,HEX_4}, arch_sh_dsp_up}, -/* repeat start end #<imm> */{"repeat",{A_DISP_PC,A_DISP_PC,A_IMM},{REPEAT,HEX_2,IMM0_8,HEX_8}, arch_sh_dsp_up}, +/* repeat start end #<imm> */{"repeat",{A_DISP_PC,A_DISP_PC,A_IMM},{REPEAT,HEX_2,IMM0_8S,HEX_8}, arch_sh_dsp_up}, /* 0100nnnnmmmm1100 shad <REG_M>,<REG_N>*/{"shad",{ A_REG_M,A_REG_N},{HEX_4,REG_N,REG_M,HEX_C}, arch_sh2a_nofpu_or_sh3_nommu_up}, @@ -843,19 +844,19 @@ /* 0100nnnn00011011 tas.b @<REG_N> */{"tas.b",{A_IND_N},{HEX_4,REG_N,HEX_1,HEX_B}, arch_sh_up}, -/* 11000011i8*1.... trapa #<imm> */{"trapa",{A_IMM},{HEX_C,HEX_3,IMM0_8}, arch_sh_up}, +/* 11000011i8*1.... trapa #<imm> */{"trapa",{A_IMM},{HEX_C,HEX_3,IMM0_8U}, arch_sh_up}, -/* 11001000i8*1.... tst #<imm>,R0 */{"tst",{A_IMM,A_R0},{HEX_C,HEX_8,IMM0_8}, arch_sh_up}, +/* 11001000i8*1.... tst #<imm>,R0 */{"tst",{A_IMM,A_R0},{HEX_C,HEX_8,IMM0_8U}, arch_sh_up}, /* 0010nnnnmmmm1000 tst <REG_M>,<REG_N> */{"tst",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_8}, arch_sh_up}, -/* 11001100i8*1.... tst.b #<imm>,@(R0,GBR)*/{"tst.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_C,IMM0_8}, arch_sh_up}, +/* 11001100i8*1.... tst.b #<imm>,@(R0,GBR)*/{"tst.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_C,IMM0_8U}, arch_sh_up}, -/* 11001010i8*1.... xor #<imm>,R0 */{"xor",{A_IMM,A_R0},{HEX_C,HEX_A,IMM0_8}, arch_sh_up}, +/* 11001010i8*1.... xor #<imm>,R0 */{"xor",{A_IMM,A_R0},{HEX_C,HEX_A,IMM0_8U}, arch_sh_up}, /* 0010nnnnmmmm1010 xor <REG_M>,<REG_N> */{"xor",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_A}, arch_sh_up}, -/* 11001110i8*1.... xor.b #<imm>,@(R0,GBR)*/{"xor.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_E,IMM0_8}, arch_sh_up}, +/* 11001110i8*1.... xor.b #<imm>,@(R0,GBR)*/{"xor.b",{A_IMM,A_R0_GBR},{HEX_C,HEX_E,IMM0_8U}, arch_sh_up}, /* 0010nnnnmmmm1101 xtrct <REG_M>,<REG_N>*/{"xtrct",{ A_REG_M,A_REG_N},{HEX_2,REG_N,REG_M,HEX_D}, arch_sh_up}, diff -Nru gdb-9.1/opcodes/sparc-dis.c gdb-10.2/opcodes/sparc-dis.c --- gdb-9.1/opcodes/sparc-dis.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/sparc-dis.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Print SPARC instructions. - Copyright (C) 1989-2019 Free Software Foundation, Inc. + Copyright (C) 1989-2020 Free Software Foundation, Inc. This file is part of the GNU opcodes library. @@ -63,8 +63,8 @@ /* Sign-extend a value which is N bits long. */ #define SEX(value, bits) \ - ((((int)(value)) << ((8 * sizeof (int)) - bits)) \ - >> ((8 * sizeof (int)) - bits) ) + ((int) (((value & ((1u << (bits - 1) << 1) - 1)) \ + ^ (1u << (bits - 1))) - (1u << (bits - 1)))) static char *reg_names[] = { "g0", "g1", "g2", "g3", "g4", "g5", "g6", "g7", @@ -325,7 +325,7 @@ another, it is important to order the opcodes in the right order. */ for (i = 0; i < 32; ++i) { - unsigned long int x = 1 << i; + unsigned long int x = 1ul << i; int x0 = (match0 & x) != 0; int x1 = (match1 & x) != 0; @@ -335,7 +335,7 @@ for (i = 0; i < 32; ++i) { - unsigned long int x = 1 << i; + unsigned long int x = 1ul << i; int x0 = (lose0 & x) != 0; int x1 = (lose1 & x) != 0; @@ -441,8 +441,7 @@ memset (hash_table, 0, HASH_SIZE * sizeof (hash_table[0])); memset (hash_count, 0, HASH_SIZE * sizeof (hash_count[0])); - if (hash_buf != NULL) - free (hash_buf); + free (hash_buf); hash_buf = xmalloc (sizeof (* hash_buf) * num_opcodes); for (i = num_opcodes - 1; i >= 0; --i) { @@ -712,8 +711,7 @@ case 'h': (*info->fprintf_func) (stream, "%%hi(%#x)", - ((unsigned) 0xFFFFFFFF - & ((int) X_IMM22 (insn) << 10))); + (unsigned) X_IMM22 (insn) << 10); break; case 'i': /* 13 bit immediate. */ @@ -1062,9 +1060,7 @@ && X_RD (prev_insn) == X_RS1 (insn)) { (*info->fprintf_func) (stream, "\t! "); - info->target = - ((unsigned) 0xFFFFFFFF - & ((int) X_IMM22 (prev_insn) << 10)); + info->target = (unsigned) X_IMM22 (prev_insn) << 10; if (imm_added_to_rs1) info->target += X_SIMM (insn, 13); else diff -Nru gdb-9.1/opcodes/sparc-opc.c gdb-10.2/opcodes/sparc-opc.c --- gdb-9.1/opcodes/sparc-opc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/sparc-opc.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Table of opcodes for the sparc. - Copyright (C) 1989-2019 Free Software Foundation, Inc. + Copyright (C) 1989-2020 Free Software Foundation, Inc. This file is part of the GNU opcodes library. diff -Nru gdb-9.1/opcodes/spu-dis.c gdb-10.2/opcodes/spu-dis.c --- gdb-9.1/opcodes/spu-dis.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/spu-dis.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Disassemble SPU instructions - Copyright (C) 2006-2019 Free Software Foundation, Inc. + Copyright (C) 2006-2020 Free Software Foundation, Inc. This file is part of the GNU opcodes library. diff -Nru gdb-9.1/opcodes/spu-opc.c gdb-10.2/opcodes/spu-opc.c --- gdb-9.1/opcodes/spu-opc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/spu-opc.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* SPU opcode list - Copyright (C) 2006-2019 Free Software Foundation, Inc. + Copyright (C) 2006-2020 Free Software Foundation, Inc. This file is part of the GNU opcodes library. diff -Nru gdb-9.1/opcodes/sysdep.h gdb-10.2/opcodes/sysdep.h --- gdb-9.1/opcodes/sysdep.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/sysdep.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Random host-dependent support code. - Copyright (C) 1995-2019 Free Software Foundation, Inc. + Copyright (C) 1995-2020 Free Software Foundation, Inc. Written by Ken Raeburn. This file is part of the GNU opcodes library. diff -Nru gdb-9.1/opcodes/tic30-dis.c gdb-10.2/opcodes/tic30-dis.c --- gdb-9.1/opcodes/tic30-dis.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/tic30-dis.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Disassembly routines for TMS320C30 architecture - Copyright (C) 1998-2019 Free Software Foundation, Inc. + Copyright (C) 1998-2020 Free Software Foundation, Inc. Contributed by Steven Haworth (steve@pm.cse.rmit.edu.au) This file is part of the GNU opcodes library. @@ -696,8 +696,10 @@ bfd_vma bufaddr = pc - info->buffer_vma; /* Obtain the current instruction word from the buffer. */ - insn_word = (*(info->buffer + bufaddr) << 24) | (*(info->buffer + bufaddr + 1) << 16) | - (*(info->buffer + bufaddr + 2) << 8) | *(info->buffer + bufaddr + 3); + insn_word = (((unsigned) *(info->buffer + bufaddr) << 24) + | (*(info->buffer + bufaddr + 1) << 16) + | (*(info->buffer + bufaddr + 2) << 8) + | *(info->buffer + bufaddr + 3)); _pc = pc / 4; /* Get the instruction refered to by the current instruction word and print it out based on its type. */ diff -Nru gdb-9.1/opcodes/tic4x-dis.c gdb-10.2/opcodes/tic4x-dis.c --- gdb-9.1/opcodes/tic4x-dis.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/tic4x-dis.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Print instructions for the Texas TMS320C[34]X, for GDB and GNU Binutils. - Copyright (C) 2002-2019 Free Software Foundation, Inc. + Copyright (C) 2002-2020 Free Software Foundation, Inc. Contributed by Michael P. Hayes (m.hayes@elec.canterbury.ac.nz) @@ -51,8 +51,11 @@ } indirect_t; -static int tic4x_version = 0; -static int tic4x_dp = 0; +static unsigned long tic4x_version = 0; +static unsigned int tic4x_dp = 0; +static tic4x_inst_t **optab = NULL; +static tic4x_inst_t **optab_special = NULL; +static const char *registernames[REG_TABLE_SIZE]; static int tic4x_pc_offset (unsigned int op) @@ -130,29 +133,24 @@ static int tic4x_print_register (struct disassemble_info *info, unsigned long regno) { - static tic4x_register_t ** registertable = NULL; unsigned int i; - if (registertable == NULL) + if (registernames[REG_R0] == NULL) { - registertable = xmalloc (sizeof (tic4x_register_t *) * REG_TABLE_SIZE); for (i = 0; i < tic3x_num_registers; i++) - registertable[tic3x_registers[i].regno] - = (tic4x_register_t *) (tic3x_registers + i); + registernames[tic3x_registers[i].regno] = tic3x_registers[i].name; if (IS_CPU_TIC4X (tic4x_version)) { /* Add C4x additional registers, overwriting any C3x registers if necessary. */ for (i = 0; i < tic4x_num_registers; i++) - registertable[tic4x_registers[i].regno] - = (tic4x_register_t *)(tic4x_registers + i); + registernames[tic4x_registers[i].regno] = tic4x_registers[i].name; } } - if (regno > (IS_CPU_TIC4X (tic4x_version) ? TIC4X_REG_MAX : TIC3X_REG_MAX) - || registertable[regno] == NULL) + if (regno > (IS_CPU_TIC4X (tic4x_version) ? TIC4X_REG_MAX : TIC3X_REG_MAX)) return 0; if (info != NULL) - (*info->fprintf_func) (info->stream, "%s", registertable[regno]->name); + (*info->fprintf_func) (info->stream, "%s", registernames[regno]); return 1; } @@ -277,7 +275,7 @@ if (condtable == NULL) { - condtable = xmalloc (sizeof (tic4x_cond_t *) * 32); + condtable = xcalloc (32, sizeof (tic4x_cond_t *)); for (i = 0; i < tic4x_num_conds; i++) condtable[tic4x_conds[i].cond] = (tic4x_cond_t *)(tic4x_conds + i); } @@ -688,61 +686,69 @@ unsigned long instruction, struct disassemble_info *info) { - static tic4x_inst_t **optable = NULL; - static tic4x_inst_t **optable_special = NULL; tic4x_inst_t *p; int i; unsigned long tic4x_oplevel; - tic4x_version = info->mach; + if (tic4x_version != info->mach) + { + tic4x_version = info->mach; + /* Don't stash anything from a previous call using a different + machine. */ + free (optab); + optab = NULL; + free (optab_special); + optab_special = NULL; + registernames[REG_R0] = NULL; + } tic4x_oplevel = (IS_CPU_TIC4X (tic4x_version)) ? OP_C4X : 0; tic4x_oplevel |= OP_C3X | OP_LPWR | OP_IDLE2 | OP_ENH; - if (optable == NULL) + if (optab == NULL) { - optable = xcalloc (sizeof (tic4x_inst_t *), (1 << TIC4X_HASH_SIZE)); + optab = xcalloc (sizeof (tic4x_inst_t *), (1 << TIC4X_HASH_SIZE)); - optable_special = xcalloc (sizeof (tic4x_inst_t *), TIC4X_SPESOP_SIZE); + optab_special = xcalloc (sizeof (tic4x_inst_t *), TIC4X_SPESOP_SIZE); /* Install opcodes in reverse order so that preferred forms overwrite synonyms. */ for (i = tic4x_num_insts - 1; i >= 0; i--) - tic4x_hash_opcode (optable, optable_special, &tic4x_insts[i], + tic4x_hash_opcode (optab, optab_special, &tic4x_insts[i], tic4x_oplevel); /* We now need to remove the insn that are special from the - "normal" optable, to make the disasm search this extra list - for them. */ + "normal" optable, to make the disasm search this extra list + for them. */ for (i = 0; i < TIC4X_SPESOP_SIZE; i++) - if (optable_special[i] != NULL) - optable[optable_special[i]->opcode >> (32 - TIC4X_HASH_SIZE)] = NULL; + if (optab_special[i] != NULL) + optab[optab_special[i]->opcode >> (32 - TIC4X_HASH_SIZE)] = NULL; } /* See if we can pick up any loading of the DP register... */ if ((instruction >> 16) == 0x5070 || (instruction >> 16) == 0x1f70) tic4x_dp = EXTRU (instruction, 15, 0); - p = optable[instruction >> (32 - TIC4X_HASH_SIZE)]; + p = optab[instruction >> (32 - TIC4X_HASH_SIZE)]; if (p != NULL) { if (((instruction & p->opmask) == p->opcode) - && tic4x_print_op (NULL, instruction, p, pc)) - tic4x_print_op (info, instruction, p, pc); + && tic4x_print_op (NULL, instruction, p, pc)) + tic4x_print_op (info, instruction, p, pc); else - (*info->fprintf_func) (info->stream, "%08lx", instruction); + (*info->fprintf_func) (info->stream, "%08lx", instruction); } else { for (i = 0; i<TIC4X_SPESOP_SIZE; i++) - if (optable_special[i] != NULL - && optable_special[i]->opcode == instruction) - { - (*info->fprintf_func)(info->stream, "%s", optable_special[i]->name); - break; - } + if (optab_special[i] != NULL + && optab_special[i]->opcode == instruction) + { + (*info->fprintf_func)(info->stream, "%s", optab_special[i]->name); + break; + } if (i == TIC4X_SPESOP_SIZE) - (*info->fprintf_func) (info->stream, "%08lx", instruction); + (*info->fprintf_func) (info->stream, "%08lx", instruction); } /* Return size of insn in words. */ diff -Nru gdb-9.1/opcodes/tic54x-dis.c gdb-10.2/opcodes/tic54x-dis.c --- gdb-9.1/opcodes/tic54x-dis.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/tic54x-dis.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Disassembly routines for TMS320C54X architecture - Copyright (C) 1999-2019 Free Software Foundation, Inc. + Copyright (C) 1999-2020 Free Software Foundation, Inc. Contributed by Timothy Wall (twall@cygnus.com) This file is part of the GNU opcodes library. @@ -117,7 +117,7 @@ bfd_byte opbuf[2]; bfd_vma addr2 = addr + 1 + has_lkaddr (memdata, tm); int status = (*info->read_memory_func) (addr2, opbuf, 2, info); - // FIXME handle errors + /* FIXME handle errors. */ if (status == 0) { unsigned short data2 = bfd_getl16 (opbuf); diff -Nru gdb-9.1/opcodes/tic54x-opc.c gdb-10.2/opcodes/tic54x-opc.c --- gdb-9.1/opcodes/tic54x-opc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/tic54x-opc.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Table of opcodes for the Texas Instruments TMS320C54X - Copyright (C) 1999-2019 Free Software Foundation, Inc. + Copyright (C) 1999-2020 Free Software Foundation, Inc. Contributed by Timothy Wall (twall@cygnus.com) This file is part of the GNU opcodes library. diff -Nru gdb-9.1/opcodes/tic6x-dis.c gdb-10.2/opcodes/tic6x-dis.c --- gdb-9.1/opcodes/tic6x-dis.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/tic6x-dis.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* TI C6X disassembler. - Copyright (C) 2010-2019 Free Software Foundation, Inc. + Copyright (C) 2010-2020 Free Software Foundation, Inc. Contributed by Joseph Myers <joseph@codesourcery.com> Bernd Schmidt <bernds@codesourcery.com> diff -Nru gdb-9.1/opcodes/tic80-dis.c gdb-10.2/opcodes/tic80-dis.c --- gdb-9.1/opcodes/tic80-dis.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/tic80-dis.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,315 +0,0 @@ -/* Print TI TMS320C80 (MVP) instructions - Copyright (C) 1996-2019 Free Software Foundation, Inc. - - This file is part of the GNU opcodes library. - - 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 - 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. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, - MA 02110-1301, USA. */ - -#include "sysdep.h" -#include <stdio.h> -#include "opcode/tic80.h" -#include "disassemble.h" - -static int length; - -/* Print an integer operand. Try to be somewhat smart about the - format by assuming that small positive or negative integers are - probably loop increment values, structure offsets, or similar - values that are more meaningful printed as signed decimal values. - Larger numbers are probably better printed as hex values. */ - -static void -print_operand_integer (struct disassemble_info *info, long value) -{ - if ((value > 9999 || value < -9999)) - (*info->fprintf_func) (info->stream, "%#lx", value); - else - (*info->fprintf_func) (info->stream, "%ld", value); -} - -/* FIXME: depends upon sizeof (long) == sizeof (float) and - also upon host floating point format matching target - floating point format. */ - -static void -print_operand_float (struct disassemble_info *info, long value) -{ - union { float f; long l; } fval; - - fval.l = value; - (*info->fprintf_func) (info->stream, "%g", fval.f); -} - -static void -print_operand_control_register (struct disassemble_info *info, long value) -{ - const char *tmp; - - tmp = tic80_value_to_symbol (value, TIC80_OPERAND_CR); - if (tmp != NULL) - (*info->fprintf_func) (info->stream, "%s", tmp); - else - (*info->fprintf_func) (info->stream, "%#lx", value); -} - -static void -print_operand_condition_code (struct disassemble_info *info, long value) -{ - const char *tmp; - - tmp = tic80_value_to_symbol (value, TIC80_OPERAND_CC); - if (tmp != NULL) - (*info->fprintf_func) (info->stream, "%s", tmp); - else - (*info->fprintf_func) (info->stream, "%ld", value); -} - -static void -print_operand_bitnum (struct disassemble_info *info, long value) -{ - int bitnum; - const char *tmp; - - bitnum = ~value & 0x1F; - tmp = tic80_value_to_symbol (bitnum, TIC80_OPERAND_BITNUM); - if (tmp != NULL) - (*info->fprintf_func) (info->stream, "%s", tmp); - else - (*info->fprintf_func) (info->stream, "%d", bitnum); -} - -/* Print the operand as directed by the flags. */ - -#define M_SI(insn,op) ((((op)->flags & TIC80_OPERAND_M_SI) != 0) && ((insn) & (1 << 17))) -#define M_LI(insn,op) ((((op)->flags & TIC80_OPERAND_M_LI) != 0) && ((insn) & (1 << 15))) -#define R_SCALED(insn,op) ((((op)->flags & TIC80_OPERAND_SCALED) != 0) && ((insn) & (1 << 11))) - -static void -print_operand (struct disassemble_info *info, - long value, - unsigned long insn, - const struct tic80_operand *operand, - bfd_vma memaddr) -{ - if ((operand->flags & TIC80_OPERAND_GPR) != 0) - { - (*info->fprintf_func) (info->stream, "r%ld", value); - if (M_SI (insn, operand) || M_LI (insn, operand)) - { - (*info->fprintf_func) (info->stream, ":m"); - } - } - else if ((operand->flags & TIC80_OPERAND_FPA) != 0) - (*info->fprintf_func) (info->stream, "a%ld", value); - - else if ((operand->flags & TIC80_OPERAND_PCREL) != 0) - (*info->print_address_func) (memaddr + 4 * value, info); - - else if ((operand->flags & TIC80_OPERAND_BASEREL) != 0) - (*info->print_address_func) (value, info); - - else if ((operand->flags & TIC80_OPERAND_BITNUM) != 0) - print_operand_bitnum (info, value); - - else if ((operand->flags & TIC80_OPERAND_CC) != 0) - print_operand_condition_code (info, value); - - else if ((operand->flags & TIC80_OPERAND_CR) != 0) - print_operand_control_register (info, value); - - else if ((operand->flags & TIC80_OPERAND_FLOAT) != 0) - print_operand_float (info, value); - - else if ((operand->flags & TIC80_OPERAND_BITFIELD)) - (*info->fprintf_func) (info->stream, "%#lx", value); - - else - print_operand_integer (info, value); - - /* If this is a scaled operand, then print the modifier. */ - if (R_SCALED (insn, operand)) - (*info->fprintf_func) (info->stream, ":s"); -} - -/* Get the next 32 bit word from the instruction stream and convert it - into internal format in the unsigned long INSN, for which we are - passed the address. Return 0 on success, -1 on error. */ - -static int -fill_instruction (struct disassemble_info *info, - bfd_vma memaddr, - unsigned long *insnp) -{ - bfd_byte buffer[4]; - int status; - - /* Get the bits for the next 32 bit word and put in buffer. */ - status = (*info->read_memory_func) (memaddr + length, buffer, 4, info); - if (status != 0) - { - (*info->memory_error_func) (status, memaddr, info); - return -1; - } - - /* Read was successful, so increment count of bytes read and convert - the bits into internal format. */ - - length += 4; - if (info->endian == BFD_ENDIAN_LITTLE) - *insnp = bfd_getl32 (buffer); - - else if (info->endian == BFD_ENDIAN_BIG) - *insnp = bfd_getb32 (buffer); - - else - /* FIXME: Should probably just default to one or the other. */ - abort (); - - return 0; -} - -/* We have chosen an opcode table entry. */ - -static int -print_one_instruction (struct disassemble_info *info, - bfd_vma memaddr, - unsigned long insn, - const struct tic80_opcode *opcode) -{ - const struct tic80_operand *operand; - long value; - int status; - const unsigned char *opindex; - int close_paren; - - (*info->fprintf_func) (info->stream, "%-10s", opcode->name); - - for (opindex = opcode->operands; *opindex != 0; opindex++) - { - operand = tic80_operands + *opindex; - - /* Extract the value from the instruction. */ - if (operand->extract) - value = (*operand->extract) (insn, NULL); - - else if (operand->bits == 32) - { - status = fill_instruction (info, memaddr, (unsigned long *) &value); - if (status == -1) - return status; - } - else - { - value = (insn >> operand->shift) & ((1 << operand->bits) - 1); - - if ((operand->flags & TIC80_OPERAND_SIGNED) != 0 - && (value & (1 << (operand->bits - 1))) != 0) - value -= 1 << operand->bits; - } - - /* If this operand is enclosed in parenthesis, then print - the open paren, otherwise just print the regular comma - separator, except for the first operand. */ - if ((operand->flags & TIC80_OPERAND_PARENS) == 0) - { - close_paren = 0; - if (opindex != opcode->operands) - (*info->fprintf_func) (info->stream, ","); - } - else - { - close_paren = 1; - (*info->fprintf_func) (info->stream, "("); - } - - print_operand (info, value, insn, operand, memaddr); - - /* If we printed an open paren before printing this operand, close - it now. The flag gets reset on each loop. */ - if (close_paren) - (*info->fprintf_func) (info->stream, ")"); - } - - return length; -} - -/* There are no specific bits that tell us for certain whether a vector - instruction opcode contains one or two instructions. However since - a destination register of r0 is illegal, we can check for nonzero - values in both destination register fields. Only opcodes that have - two valid instructions will have non-zero in both. */ - -#define TWO_INSN(insn) ((((insn) & (0x1F << 27)) != 0) && (((insn) & (0x1F << 22)) != 0)) - -static int -print_instruction (struct disassemble_info *info, - bfd_vma memaddr, - unsigned long insn, - const struct tic80_opcode *vec_opcode) -{ - const struct tic80_opcode *opcode; - const struct tic80_opcode *opcode_end; - - /* Find the first opcode match in the opcodes table. For vector - opcodes (vec_opcode != NULL) find the first match that is not the - previously found match. FIXME: there should be faster ways to - search (hash table or binary search), but don't worry too much - about it until other TIc80 support is finished. */ - - opcode_end = tic80_opcodes + tic80_num_opcodes; - for (opcode = tic80_opcodes; opcode < opcode_end; opcode++) - { - if ((insn & opcode->mask) == opcode->opcode && - opcode != vec_opcode) - break; - } - - if (opcode == opcode_end) - { - /* No match found, just print the bits as a .word directive. */ - (*info->fprintf_func) (info->stream, ".word %#08lx", insn); - } - else - { - /* Match found, decode the instruction. */ - length = print_one_instruction (info, memaddr, insn, opcode); - if (opcode->flags & TIC80_VECTOR && vec_opcode == NULL && TWO_INSN (insn)) - { - /* There is another instruction to print from the same opcode. - Print the separator and then find and print the other - instruction. */ - (*info->fprintf_func) (info->stream, " || "); - length = print_instruction (info, memaddr, insn, opcode); - } - } - - return length; -} - -int -print_insn_tic80 (bfd_vma memaddr, struct disassemble_info *info) -{ - unsigned long insn; - int status; - - length = 0; - info->bytes_per_line = 8; - status = fill_instruction (info, memaddr, &insn); - if (status != -1) - status = print_instruction (info, memaddr, insn, NULL); - - return status; -} diff -Nru gdb-9.1/opcodes/tic80-opc.c gdb-10.2/opcodes/tic80-opc.c --- gdb-9.1/opcodes/tic80-opc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/tic80-opc.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,1211 +0,0 @@ -/* Opcode table for TI TMS320C80 (MVP). - Copyright (C) 1996-2019 Free Software Foundation, Inc. - - This file is part of the GNU opcodes library. - - 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 - 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. - - You should have received a copy of the GNU General Public License - along with this file; see the file COPYING. If not, write to the - Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston, - MA 02110-1301, USA. */ - -#include "sysdep.h" -#include <stdio.h> -#include "opcode/tic80.h" - -/* This file holds various tables for the TMS320C80 (MVP). - - The opcode table is strictly constant data, so the compiler should - be able to put it in the .text section. - - This file also holds the operand table. All knowledge about - inserting operands into instructions and vice-versa is kept in this - file. - - The predefined register table maps from register names to register - values. */ - - -/* Table of predefined symbol names, such as general purpose registers, - floating point registers, condition codes, control registers, and bit - numbers. - - The table is sorted case independently by name so that it is suitable for - searching via a binary search using a case independent comparison - function. - - Note that the type of the symbol is stored in the upper bits of the value - field, which allows the value and type to be passed around as a unit in a - single int. The types have to be masked off before using the numeric - value as a number. -*/ - -const struct predefined_symbol tic80_predefined_symbols[] = -{ - { "a0", TIC80_OPERAND_FPA | 0 }, - { "a1", TIC80_OPERAND_FPA | 1 }, - { "alw.b", TIC80_OPERAND_CC | 7 }, - { "alw.h", TIC80_OPERAND_CC | 15 }, - { "alw.w", TIC80_OPERAND_CC | 23 }, - { "ANASTAT", TIC80_OPERAND_CR | 0x34 }, - { "BRK1", TIC80_OPERAND_CR | 0x39 }, - { "BRK2", TIC80_OPERAND_CR | 0x3A }, - { "CONFIG", TIC80_OPERAND_CR | 2 }, - { "DLRU", TIC80_OPERAND_CR | 0x500 }, - { "DTAG0", TIC80_OPERAND_CR | 0x400 }, - { "DTAG1", TIC80_OPERAND_CR | 0x401 }, - { "DTAG10", TIC80_OPERAND_CR | 0x40A }, - { "DTAG11", TIC80_OPERAND_CR | 0x40B }, - { "DTAG12", TIC80_OPERAND_CR | 0x40C }, - { "DTAG13", TIC80_OPERAND_CR | 0x40D }, - { "DTAG14", TIC80_OPERAND_CR | 0x40E }, - { "DTAG15", TIC80_OPERAND_CR | 0x40F }, - { "DTAG2", TIC80_OPERAND_CR | 0x402 }, - { "DTAG3", TIC80_OPERAND_CR | 0x403 }, - { "DTAG4", TIC80_OPERAND_CR | 0x404 }, - { "DTAG5", TIC80_OPERAND_CR | 0x405 }, - { "DTAG6", TIC80_OPERAND_CR | 0x406 }, - { "DTAG7", TIC80_OPERAND_CR | 0x407 }, - { "DTAG8", TIC80_OPERAND_CR | 0x408 }, - { "DTAG9", TIC80_OPERAND_CR | 0x409 }, - { "ECOMCNTL", TIC80_OPERAND_CR | 0x33 }, - { "EIP", TIC80_OPERAND_CR | 1 }, - { "EPC", TIC80_OPERAND_CR | 0 }, - { "eq.b", TIC80_OPERAND_BITNUM | 0 }, - { "eq.f", TIC80_OPERAND_BITNUM | 20 }, - { "eq.h", TIC80_OPERAND_BITNUM | 10 }, - { "eq.w", TIC80_OPERAND_BITNUM | 20 }, - { "eq0.b", TIC80_OPERAND_CC | 2 }, - { "eq0.h", TIC80_OPERAND_CC | 10 }, - { "eq0.w", TIC80_OPERAND_CC | 18 }, - { "FLTADR", TIC80_OPERAND_CR | 0x11 }, - { "FLTDTH", TIC80_OPERAND_CR | 0x14 }, - { "FLTDTL", TIC80_OPERAND_CR | 0x13 }, - { "FLTOP", TIC80_OPERAND_CR | 0x10 }, - { "FLTTAG", TIC80_OPERAND_CR | 0x12 }, - { "FPST", TIC80_OPERAND_CR | 8 }, - { "ge.b", TIC80_OPERAND_BITNUM | 5 }, - { "ge.f", TIC80_OPERAND_BITNUM | 25 }, - { "ge.h", TIC80_OPERAND_BITNUM | 15 }, - { "ge.w", TIC80_OPERAND_BITNUM | 25 }, - { "ge0.b", TIC80_OPERAND_CC | 3 }, - { "ge0.h", TIC80_OPERAND_CC | 11 }, - { "ge0.w", TIC80_OPERAND_CC | 19 }, - { "gt.b", TIC80_OPERAND_BITNUM | 2 }, - { "gt.f", TIC80_OPERAND_BITNUM | 22 }, - { "gt.h", TIC80_OPERAND_BITNUM | 12 }, - { "gt.w", TIC80_OPERAND_BITNUM | 22 }, - { "gt0.b", TIC80_OPERAND_CC | 1 }, - { "gt0.h", TIC80_OPERAND_CC | 9 }, - { "gt0.w", TIC80_OPERAND_CC | 17 }, - { "hi.b", TIC80_OPERAND_BITNUM | 6 }, - { "hi.h", TIC80_OPERAND_BITNUM | 16 }, - { "hi.w", TIC80_OPERAND_BITNUM | 26 }, - { "hs.b", TIC80_OPERAND_BITNUM | 9 }, - { "hs.h", TIC80_OPERAND_BITNUM | 19 }, - { "hs.w", TIC80_OPERAND_BITNUM | 29 }, - { "ib.f", TIC80_OPERAND_BITNUM | 28 }, - { "IE", TIC80_OPERAND_CR | 6 }, - { "ILRU", TIC80_OPERAND_CR | 0x300 }, - { "in.f", TIC80_OPERAND_BITNUM | 27 }, - { "IN0P", TIC80_OPERAND_CR | 0x4000 }, - { "IN1P", TIC80_OPERAND_CR | 0x4001 }, - { "INTPEN", TIC80_OPERAND_CR | 4 }, - { "ITAG0", TIC80_OPERAND_CR | 0x200 }, - { "ITAG1", TIC80_OPERAND_CR | 0x201 }, - { "ITAG10", TIC80_OPERAND_CR | 0x20A }, - { "ITAG11", TIC80_OPERAND_CR | 0x20B }, - { "ITAG12", TIC80_OPERAND_CR | 0x20C }, - { "ITAG13", TIC80_OPERAND_CR | 0x20D }, - { "ITAG14", TIC80_OPERAND_CR | 0x20E }, - { "ITAG15", TIC80_OPERAND_CR | 0x20F }, - { "ITAG2", TIC80_OPERAND_CR | 0x202 }, - { "ITAG3", TIC80_OPERAND_CR | 0x203 }, - { "ITAG4", TIC80_OPERAND_CR | 0x204 }, - { "ITAG5", TIC80_OPERAND_CR | 0x205 }, - { "ITAG6", TIC80_OPERAND_CR | 0x206 }, - { "ITAG7", TIC80_OPERAND_CR | 0x207 }, - { "ITAG8", TIC80_OPERAND_CR | 0x208 }, - { "ITAG9", TIC80_OPERAND_CR | 0x209 }, - { "le.b", TIC80_OPERAND_BITNUM | 3 }, - { "le.f", TIC80_OPERAND_BITNUM | 23 }, - { "le.h", TIC80_OPERAND_BITNUM | 13 }, - { "le.w", TIC80_OPERAND_BITNUM | 23 }, - { "le0.b", TIC80_OPERAND_CC | 6 }, - { "le0.h", TIC80_OPERAND_CC | 14 }, - { "le0.w", TIC80_OPERAND_CC | 22 }, - { "lo.b", TIC80_OPERAND_BITNUM | 8 }, - { "lo.h", TIC80_OPERAND_BITNUM | 18 }, - { "lo.w", TIC80_OPERAND_BITNUM | 28 }, - { "ls.b", TIC80_OPERAND_BITNUM | 7 }, - { "ls.h", TIC80_OPERAND_BITNUM | 17 }, - { "ls.w", TIC80_OPERAND_BITNUM | 27 }, - { "lt.b", TIC80_OPERAND_BITNUM | 4 }, - { "lt.f", TIC80_OPERAND_BITNUM | 24 }, - { "lt.h", TIC80_OPERAND_BITNUM | 14 }, - { "lt.w", TIC80_OPERAND_BITNUM | 24 }, - { "lt0.b", TIC80_OPERAND_CC | 4 }, - { "lt0.h", TIC80_OPERAND_CC | 12 }, - { "lt0.w", TIC80_OPERAND_CC | 20 }, - { "MIP", TIC80_OPERAND_CR | 0x31 }, - { "MPC", TIC80_OPERAND_CR | 0x30 }, - { "ne.b", TIC80_OPERAND_BITNUM | 1 }, - { "ne.f", TIC80_OPERAND_BITNUM | 21 }, - { "ne.h", TIC80_OPERAND_BITNUM | 11 }, - { "ne.w", TIC80_OPERAND_BITNUM | 21 }, - { "ne0.b", TIC80_OPERAND_CC | 5 }, - { "ne0.h", TIC80_OPERAND_CC | 13 }, - { "ne0.w", TIC80_OPERAND_CC | 21 }, - { "nev.b", TIC80_OPERAND_CC | 0 }, - { "nev.h", TIC80_OPERAND_CC | 8 }, - { "nev.w", TIC80_OPERAND_CC | 16 }, - { "ob.f", TIC80_OPERAND_BITNUM | 29 }, - { "or.f", TIC80_OPERAND_BITNUM | 31 }, - { "ou.f", TIC80_OPERAND_BITNUM | 26 }, - { "OUTP", TIC80_OPERAND_CR | 0x4002 }, - { "PKTREQ", TIC80_OPERAND_CR | 0xD }, - { "PPERROR", TIC80_OPERAND_CR | 0xA }, - { "r0", TIC80_OPERAND_GPR | 0 }, - { "r1", TIC80_OPERAND_GPR | 1 }, - { "r10", TIC80_OPERAND_GPR | 10 }, - { "r11", TIC80_OPERAND_GPR | 11 }, - { "r12", TIC80_OPERAND_GPR | 12 }, - { "r13", TIC80_OPERAND_GPR | 13 }, - { "r14", TIC80_OPERAND_GPR | 14 }, - { "r15", TIC80_OPERAND_GPR | 15 }, - { "r16", TIC80_OPERAND_GPR | 16 }, - { "r17", TIC80_OPERAND_GPR | 17 }, - { "r18", TIC80_OPERAND_GPR | 18 }, - { "r19", TIC80_OPERAND_GPR | 19 }, - { "r2", TIC80_OPERAND_GPR | 2 }, - { "r20", TIC80_OPERAND_GPR | 20 }, - { "r21", TIC80_OPERAND_GPR | 21 }, - { "r22", TIC80_OPERAND_GPR | 22 }, - { "r23", TIC80_OPERAND_GPR | 23 }, - { "r24", TIC80_OPERAND_GPR | 24 }, - { "r25", TIC80_OPERAND_GPR | 25 }, - { "r26", TIC80_OPERAND_GPR | 26 }, - { "r27", TIC80_OPERAND_GPR | 27 }, - { "r28", TIC80_OPERAND_GPR | 28 }, - { "r29", TIC80_OPERAND_GPR | 29 }, - { "r3", TIC80_OPERAND_GPR | 3 }, - { "r30", TIC80_OPERAND_GPR | 30 }, - { "r31", TIC80_OPERAND_GPR | 31 }, - { "r4", TIC80_OPERAND_GPR | 4 }, - { "r5", TIC80_OPERAND_GPR | 5 }, - { "r6", TIC80_OPERAND_GPR | 6 }, - { "r7", TIC80_OPERAND_GPR | 7 }, - { "r8", TIC80_OPERAND_GPR | 8 }, - { "r9", TIC80_OPERAND_GPR | 9 }, - { "SYSSTK", TIC80_OPERAND_CR | 0x20 }, - { "SYSTMP", TIC80_OPERAND_CR | 0x21 }, - { "TCOUNT", TIC80_OPERAND_CR | 0xE }, - { "TSCALE", TIC80_OPERAND_CR | 0xF }, - { "uo.f", TIC80_OPERAND_BITNUM | 30 }, -}; - -const int tic80_num_predefined_symbols = sizeof (tic80_predefined_symbols) / sizeof (struct predefined_symbol); - -/* This function takes a predefined symbol name in NAME, symbol class - in CLASS, and translates it to a numeric value, which it returns. - - If CLASS is zero, any symbol that matches NAME is translated. If - CLASS is non-zero, then only a symbol that has symbol_class CLASS is - matched. - - If no translation is possible, it returns -1, a value not used by - any predefined symbol. Note that the predefined symbol array is - presorted case independently by name. - - This function is implemented with the assumption that there are no - duplicate names in the predefined symbol array, which happens to be - true at the moment. - - */ - -int -tic80_symbol_to_value (char *name, int symbol_class) -{ - const struct predefined_symbol *pdsp; - int low = 0; - int middle; - int high = tic80_num_predefined_symbols - 1; - int cmp; - int rtnval = -1; - - while (low <= high) - { - middle = (low + high) / 2; - cmp = strcasecmp (name, tic80_predefined_symbols[middle].name); - if (cmp < 0) - { - high = middle - 1; - } - else if (cmp > 0) - { - low = middle + 1; - } - else - { - pdsp = &tic80_predefined_symbols[middle]; - if ((symbol_class == 0) || (symbol_class & PDS_VALUE (pdsp))) - { - rtnval = PDS_VALUE (pdsp); - } - /* For now we assume that there are no duplicate names */ - break; - } - } - return (rtnval); -} - -/* This function takes a value VAL and finds a matching predefined - symbol that is in the operand symbol_class specified by CLASS. If CLASS - is zero, the first matching symbol is returned. */ - -const char * -tic80_value_to_symbol (int val, int symbol_class) -{ - const struct predefined_symbol *pdsp; - int ival; - char *name; - - name = NULL; - for (pdsp = tic80_predefined_symbols; - pdsp < tic80_predefined_symbols + tic80_num_predefined_symbols; - pdsp++) - { - ival = PDS_VALUE (pdsp) & ~TIC80_OPERAND_MASK; - if (ival == val) - { - if ((symbol_class == 0) || (symbol_class & PDS_VALUE (pdsp))) - { - /* Found the desired match */ - name = PDS_NAME (pdsp); - break; - } - } - } - return (name); -} - -/* This function returns a pointer to the next symbol in the predefined - symbol table after PDSP, or NULL if PDSP points to the last symbol. If - PDSP is NULL, it returns the first symbol in the table. Thus it can be - used to walk through the table by first calling it with NULL and then - calling it with each value it returned on the previous call, until it - returns NULL. */ - -const struct predefined_symbol * -tic80_next_predefined_symbol (const struct predefined_symbol *pdsp) -{ - if (pdsp == NULL) - { - pdsp = tic80_predefined_symbols; - } - else if (pdsp >= tic80_predefined_symbols && - pdsp < tic80_predefined_symbols + tic80_num_predefined_symbols - 1) - { - pdsp++; - } - else - { - pdsp = NULL; - } - return (pdsp); -} - - - -/* The operands table. The fields are: - - bits, shift, insertion function, extraction function, flags - */ - -const struct tic80_operand tic80_operands[] = -{ - - /* The zero index is used to indicate the end of the list of operands. */ - -#define UNUSED (0) - { 0, 0, 0, 0, 0 }, - - /* Short signed immediate value in bits 14-0. */ - -#define SSI (UNUSED + 1) - { 15, 0, NULL, NULL, TIC80_OPERAND_SIGNED }, - - /* Short unsigned immediate value in bits 14-0 */ - -#define SUI (SSI + 1) - { 15, 0, NULL, NULL, 0 }, - - /* Short unsigned bitfield in bits 14-0. We distinguish this - from a regular unsigned immediate value only for the convenience - of the disassembler and the user. */ - -#define SUBF (SUI + 1) - { 15, 0, NULL, NULL, TIC80_OPERAND_BITFIELD }, - - /* Long signed immediate in following 32 bit word */ - -#define LSI (SUBF + 1) - { 32, 0, NULL, NULL, TIC80_OPERAND_SIGNED }, - - /* Long unsigned immediate in following 32 bit word */ - -#define LUI (LSI + 1) - { 32, 0, NULL, NULL, 0 }, - - /* Long unsigned bitfield in following 32 bit word. We distinguish - this from a regular unsigned immediate value only for the - convenience of the disassembler and the user. */ - -#define LUBF (LUI + 1) - { 32, 0, NULL, NULL, TIC80_OPERAND_BITFIELD }, - - /* Single precision floating point immediate in following 32 bit - word. */ - -#define SPFI (LUBF + 1) - { 32, 0, NULL, NULL, TIC80_OPERAND_FLOAT }, - - /* Register in bits 4-0 */ - -#define REG_0 (SPFI + 1) - { 5, 0, NULL, NULL, TIC80_OPERAND_GPR }, - - /* Even register in bits 4-0 */ - -#define REG_0_E (REG_0 + 1) - { 5, 0, NULL, NULL, TIC80_OPERAND_GPR | TIC80_OPERAND_EVEN }, - - /* Register in bits 26-22 */ - -#define REG_22 (REG_0_E + 1) - { 5, 22, NULL, NULL, TIC80_OPERAND_GPR }, - - /* Even register in bits 26-22 */ - -#define REG_22_E (REG_22 + 1) - { 5, 22, NULL, NULL, TIC80_OPERAND_GPR | TIC80_OPERAND_EVEN }, - - /* Register in bits 31-27 */ - -#define REG_DEST (REG_22_E + 1) - { 5, 27, NULL, NULL, TIC80_OPERAND_GPR }, - - /* Even register in bits 31-27 */ - -#define REG_DEST_E (REG_DEST + 1) - { 5, 27, NULL, NULL, TIC80_OPERAND_GPR | TIC80_OPERAND_EVEN }, - - /* Floating point accumulator register (a0-a3) specified by bit 16 (MSB) - and bit 11 (LSB) */ - /* FIXME! Needs to use functions to insert and extract the register - number in bits 16 and 11. */ - -#define REG_FPA (REG_DEST_E + 1) - { 0, 0, NULL, NULL, TIC80_OPERAND_FPA }, - - /* Short signed PC word offset in bits 14-0 */ - -#define OFF_SS_PC (REG_FPA + 1) - { 15, 0, NULL, NULL, TIC80_OPERAND_PCREL | TIC80_OPERAND_SIGNED }, - - /* Long signed PC word offset in following 32 bit word */ - -#define OFF_SL_PC (OFF_SS_PC + 1) - { 32, 0, NULL, NULL, TIC80_OPERAND_PCREL | TIC80_OPERAND_SIGNED }, - - /* Short signed base relative byte offset in bits 14-0 */ - -#define OFF_SS_BR (OFF_SL_PC + 1) - { 15, 0, NULL, NULL, TIC80_OPERAND_BASEREL | TIC80_OPERAND_SIGNED }, - - /* Long signed base relative byte offset in following 32 bit word */ - -#define OFF_SL_BR (OFF_SS_BR + 1) - { 32, 0, NULL, NULL, TIC80_OPERAND_BASEREL | TIC80_OPERAND_SIGNED }, - - /* Long signed base relative byte offset in following 32 bit word - with optional ":s" modifier flag in bit 11 */ - -#define OFF_SL_BR_SCALED (OFF_SL_BR + 1) - { 32, 0, NULL, NULL, TIC80_OPERAND_BASEREL | TIC80_OPERAND_SIGNED | TIC80_OPERAND_SCALED }, - - /* BITNUM in bits 31-27 */ - -#define BITNUM (OFF_SL_BR_SCALED + 1) - { 5, 27, NULL, NULL, TIC80_OPERAND_BITNUM }, - - /* Condition code in bits 31-27 */ - -#define CC (BITNUM + 1) - { 5, 27, NULL, NULL, TIC80_OPERAND_CC }, - - /* Control register number in bits 14-0 */ - -#define CR_SI (CC + 1) - { 15, 0, NULL, NULL, TIC80_OPERAND_CR }, - - /* Control register number in next 32 bit word */ - -#define CR_LI (CR_SI + 1) - { 32, 0, NULL, NULL, TIC80_OPERAND_CR }, - - /* A base register in bits 26-22, enclosed in parens */ - -#define REG_BASE (CR_LI + 1) - { 5, 22, NULL, NULL, TIC80_OPERAND_GPR | TIC80_OPERAND_PARENS }, - - /* A base register in bits 26-22, enclosed in parens, with optional ":m" - flag in bit 17 (short immediate instructions only) */ - -#define REG_BASE_M_SI (REG_BASE + 1) - { 5, 22, NULL, NULL, TIC80_OPERAND_GPR | TIC80_OPERAND_PARENS | TIC80_OPERAND_M_SI }, - - /* A base register in bits 26-22, enclosed in parens, with optional ":m" - flag in bit 15 (long immediate and register instructions only) */ - -#define REG_BASE_M_LI (REG_BASE_M_SI + 1) - { 5, 22, NULL, NULL, TIC80_OPERAND_GPR | TIC80_OPERAND_PARENS | TIC80_OPERAND_M_LI }, - - /* Scaled register in bits 4-0, with optional ":s" modifier flag in bit 11 */ - -#define REG_SCALED (REG_BASE_M_LI + 1) - { 5, 0, NULL, NULL, TIC80_OPERAND_GPR | TIC80_OPERAND_SCALED }, - - /* Unsigned immediate in bits 4-0, used only for shift instructions */ - -#define ROTATE (REG_SCALED + 1) - { 5, 0, NULL, NULL, 0 }, - - /* Unsigned immediate in bits 9-5, used only for shift instructions */ -#define ENDMASK (ROTATE + 1) - { 5, 5, NULL, NULL, TIC80_OPERAND_ENDMASK }, - -}; - -const int tic80_num_operands = sizeof (tic80_operands)/sizeof(*tic80_operands); - - -/* Macros used to generate entries for the opcodes table. */ - -#define FIXME 0 - -/* Short-Immediate Format Instructions - basic opcode */ -#define OP_SI(x) (((x) & 0x7F) << 15) -#define MASK_SI OP_SI(0x7F) - -/* Long-Immediate Format Instructions - basic opcode */ -#define OP_LI(x) (((x) & 0x3FF) << 12) -#define MASK_LI OP_LI(0x3FF) - -/* Register Format Instructions - basic opcode */ -#define OP_REG(x) OP_LI(x) /* For readability */ -#define MASK_REG MASK_LI /* For readability */ - -/* The 'n' bit at bit 10 */ -#define n(x) ((x) << 10) - -/* The 'i' bit at bit 11 */ -#define i(x) ((x) << 11) - -/* The 'F' bit at bit 27 */ -#define F(x) ((x) << 27) - -/* The 'E' bit at bit 27 */ -#define E(x) ((x) << 27) - -/* The 'M' bit at bit 15 in register and long immediate opcodes */ -#define M_REG(x) ((x) << 15) -#define M_LI(x) ((x) << 15) - -/* The 'M' bit at bit 17 in short immediate opcodes */ -#define M_SI(x) ((x) << 17) - -/* The 'SZ' field at bits 14-13 in register and long immediate opcodes */ -#define SZ_REG(x) ((x) << 13) -#define SZ_LI(x) ((x) << 13) - -/* The 'SZ' field at bits 16-15 in short immediate opcodes */ -#define SZ_SI(x) ((x) << 15) - -/* The 'D' (direct external memory access) bit at bit 10 in long immediate - and register opcodes. */ -#define D(x) ((x) << 10) - -/* The 'S' (scale offset by data size) bit at bit 11 in long immediate - and register opcodes. */ -#define S(x) ((x) << 11) - -/* The 'PD' field at bits 10-9 in floating point instructions */ -#define PD(x) ((x) << 9) - -/* The 'P2' field at bits 8-7 in floating point instructions */ -#define P2(x) ((x) << 7) - -/* The 'P1' field at bits 6-5 in floating point instructions */ -#define P1(x) ((x) << 5) - -/* The 'a' field at bit 16 in vector instructions */ -#define V_a1(x) ((x) << 16) - -/* The 'a' field at bit 11 in vector instructions */ -#define V_a0(x) ((x) << 11) - -/* The 'm' field at bit 10 in vector instructions */ -#define V_m(x) ((x) << 10) - -/* The 'S' field at bit 9 in vector instructions */ -#define V_S(x) ((x) << 9) - -/* The 'Z' field at bit 8 in vector instructions */ -#define V_Z(x) ((x) << 8) - -/* The 'p' field at bit 6 in vector instructions */ -#define V_p(x) ((x) << 6) - -/* The opcode field at bits 21-17 for vector instructions */ -#define OP_V(x) ((x) << 17) -#define MASK_V OP_V(0x1F) - - -/* The opcode table. Formatted for better readability on a wide screen. Also, all - entries with the same mnemonic are sorted so that they are adjacent in the table, - allowing the use of a hash table to locate the first of a sequence of opcodes that have - a particular name. The short immediate forms also come before the long immediate forms - so that the assembler will pick the "best fit" for the size of the operand, except for - the case of the PC relative forms, where the long forms come first and are the default - forms. */ - -const struct tic80_opcode tic80_opcodes[] = { - - /* The "nop" instruction is really "rdcr 0,r0". We put it first so that this - specific bit pattern will get disassembled as a nop rather than an rdcr. The - mask of all ones ensures that this will happen. */ - - {"nop", OP_SI(0x4), ~0, 0, {0} }, - - /* The "br" instruction is really "bbz target,r0,31". We put it first so that - this specific bit pattern will get disassembled as a br rather than bbz. */ - - {"br", OP_SI(0x48), 0xFFFF8000, 0, {OFF_SS_PC} }, - {"br", OP_LI(0x391), 0xFFFFF000, 0, {OFF_SL_PC} }, - {"br", OP_REG(0x390), 0xFFFFF000, 0, {REG_0} }, - {"br.a", OP_SI(0x49), 0xFFFF8000, 0, {OFF_SS_PC} }, - {"br.a", OP_LI(0x393), 0xFFFFF000, 0, {OFF_SL_PC} }, - {"br.a", OP_REG(0x392), 0xFFFFF000, 0, {REG_0} }, - - /* Signed integer ADD */ - - {"add", OP_SI(0x58), MASK_SI, 0, {SSI, REG_22, REG_DEST} }, - {"add", OP_LI(0x3B1), MASK_LI, 0, {LSI, REG_22, REG_DEST} }, - {"add", OP_REG(0x3B0), MASK_REG, 0, {REG_0, REG_22, REG_DEST} }, - - /* Unsigned integer ADD */ - - {"addu", OP_SI(0x59), MASK_SI, 0, {SSI, REG_22, REG_DEST} }, - {"addu", OP_LI(0x3B3), MASK_LI, 0, {LSI, REG_22, REG_DEST} }, - {"addu", OP_REG(0x3B2), MASK_REG, 0, {REG_0, REG_22, REG_DEST} }, - - /* Bitwise AND */ - - {"and", OP_SI(0x11), MASK_SI, 0, {SUBF, REG_22, REG_DEST} }, - {"and", OP_LI(0x323), MASK_LI, 0, {LUBF, REG_22, REG_DEST} }, - {"and", OP_REG(0x322), MASK_REG, 0, {REG_0, REG_22, REG_DEST} }, - {"and.tt", OP_SI(0x11), MASK_SI, 0, {SUBF, REG_22, REG_DEST} }, - {"and.tt", OP_LI(0x323), MASK_LI, 0, {LUBF, REG_22, REG_DEST} }, - {"and.tt", OP_REG(0x322), MASK_REG, 0, {REG_0, REG_22, REG_DEST} }, - - /* Bitwise AND with ones complement of both sources */ - - {"and.ff", OP_SI(0x18), MASK_SI, 0, {SUBF, REG_22, REG_DEST} }, - {"and.ff", OP_LI(0x331), MASK_LI, 0, {LUBF, REG_22, REG_DEST} }, - {"and.ff", OP_REG(0x330), MASK_REG, 0, {REG_0, REG_22, REG_DEST} }, - - /* Bitwise AND with ones complement of source 1 */ - - {"and.ft", OP_SI(0x14), MASK_SI, 0, {SUBF, REG_22, REG_DEST} }, - {"and.ft", OP_LI(0x329), MASK_LI, 0, {LUBF, REG_22, REG_DEST} }, - {"and.ft", OP_REG(0x328), MASK_REG, 0, {REG_0, REG_22, REG_DEST} }, - - /* Bitwise AND with ones complement of source 2 */ - - {"and.tf", OP_SI(0x12), MASK_SI, 0, {SUBF, REG_22, REG_DEST} }, - {"and.tf", OP_LI(0x325), MASK_LI, 0, {LUBF, REG_22, REG_DEST} }, - {"and.tf", OP_REG(0x324), MASK_REG, 0, {REG_0, REG_22, REG_DEST} }, - - /* Branch Bit One - nonannulled */ - - {"bbo", OP_SI(0x4A), MASK_SI, 0, {OFF_SS_PC, REG_22, BITNUM} }, - {"bbo", OP_LI(0x395), MASK_LI, 0, {OFF_SL_PC, REG_22, BITNUM} }, - {"bbo", OP_REG(0x394), MASK_REG, 0, {REG_0, REG_22, BITNUM} }, - - /* Branch Bit One - annulled */ - - {"bbo.a", OP_SI(0x4B), MASK_SI, 0, {OFF_SS_PC, REG_22, BITNUM} }, - {"bbo.a", OP_LI(0x397), MASK_LI, 0, {OFF_SL_PC, REG_22, BITNUM} }, - {"bbo.a", OP_REG(0x396), MASK_REG, 0, {REG_0, REG_22, BITNUM} }, - - /* Branch Bit Zero - nonannulled */ - - {"bbz", OP_SI(0x48), MASK_SI, 0, {OFF_SS_PC, REG_22, BITNUM} }, - {"bbz", OP_LI(0x391), MASK_LI, 0, {OFF_SL_PC, REG_22, BITNUM} }, - {"bbz", OP_REG(0x390), MASK_REG, 0, {REG_0, REG_22, BITNUM} }, - - /* Branch Bit Zero - annulled */ - - {"bbz.a", OP_SI(0x49), MASK_SI, 0, {OFF_SS_PC, REG_22, BITNUM} }, - {"bbz.a", OP_LI(0x393), MASK_LI, 0, {OFF_SL_PC, REG_22, BITNUM} }, - {"bbz.a", OP_REG(0x392), MASK_REG, 0, {REG_0, REG_22, BITNUM} }, - - /* Branch Conditional - nonannulled */ - - {"bcnd", OP_SI(0x4C), MASK_SI, 0, {OFF_SS_PC, REG_22, CC} }, - {"bcnd", OP_LI(0x399), MASK_LI, 0, {OFF_SL_PC, REG_22, CC} }, - {"bcnd", OP_REG(0x398), MASK_REG, 0, {REG_0, REG_22, CC} }, - - /* Branch Conditional - annulled */ - - {"bcnd.a", OP_SI(0x4D), MASK_SI, 0, {OFF_SS_PC, REG_22, CC} }, - {"bcnd.a", OP_LI(0x39B), MASK_LI, 0, {OFF_SL_PC, REG_22, CC} }, - {"bcnd.a", OP_REG(0x39A), MASK_REG, 0, {REG_0, REG_22, CC} }, - - /* Branch Control Register */ - - {"brcr", OP_SI(0x6), MASK_SI, 0, {CR_SI} }, - {"brcr", OP_LI(0x30D), MASK_LI, 0, {CR_LI} }, - {"brcr", OP_REG(0x30C), MASK_REG, 0, {REG_0} }, - - /* Branch and save return - nonannulled */ - - {"bsr", OP_SI(0x40), MASK_SI, 0, {OFF_SS_PC, REG_DEST} }, - {"bsr", OP_LI(0x381), MASK_LI, 0, {OFF_SL_PC, REG_DEST} }, - {"bsr", OP_REG(0x380), MASK_REG, 0, {REG_0, REG_DEST} }, - - /* Branch and save return - annulled */ - - {"bsr.a", OP_SI(0x41), MASK_SI, 0, {OFF_SS_PC, REG_DEST} }, - {"bsr.a", OP_LI(0x383), MASK_LI, 0, {OFF_SL_PC, REG_DEST} }, - {"bsr.a", OP_REG(0x382), MASK_REG, 0, {REG_0, REG_DEST} }, - - /* Send command */ - - {"cmnd", OP_SI(0x2), MASK_SI, 0, {SUI} }, - {"cmnd", OP_LI(0x305), MASK_LI, 0, {LUI} }, - {"cmnd", OP_REG(0x304), MASK_REG, 0, {REG_0} }, - - /* Integer compare */ - - {"cmp", OP_SI(0x50), MASK_SI, 0, {SSI, REG_22, REG_DEST} }, - {"cmp", OP_LI(0x3A1), MASK_LI, 0, {LSI, REG_22, REG_DEST} }, - {"cmp", OP_REG(0x3A0), MASK_REG, 0, {REG_0, REG_22, REG_DEST} }, - - /* Flush data cache subblock - don't clear subblock preset flag */ - - {"dcachec", OP_SI(0x38), F(1) | (MASK_SI & ~M_SI(1)), 0, {SSI, REG_BASE_M_SI} }, - {"dcachec", OP_LI(0x371), F(1) | (MASK_LI & ~M_LI(1)) | S(1) | D(1), 0, {LSI, REG_BASE_M_LI} }, - {"dcachec", OP_REG(0x370), F(1) | (MASK_REG & ~M_REG(1)) | S(1) | D(1), 0, {REG_0, REG_BASE_M_LI} }, - - /* Flush data cache subblock - clear subblock preset flag */ - - {"dcachef", OP_SI(0x38) | F(1), F(1) | (MASK_SI & ~M_SI(1)), 0, {SSI, REG_BASE_M_SI} }, - {"dcachef", OP_LI(0x371) | F(1), F(1) | (MASK_LI & ~M_LI(1)) | S(1) | D(1), 0, {LSI, REG_BASE_M_LI} }, - {"dcachef", OP_REG(0x370) | F(1), F(1) | (MASK_REG & ~M_REG(1)) | S(1) | D(1), 0, {REG_0, REG_BASE_M_LI} }, - - /* Direct load signed data into register */ - - {"dld", OP_LI(0x345) | D(1), (MASK_LI & ~M_REG(1)) | D(1), 0, {OFF_SL_BR_SCALED, REG_BASE_M_LI, REG_DEST} }, - {"dld", OP_REG(0x344) | D(1), (MASK_REG & ~M_REG(1)) | D(1), 0, {REG_SCALED, REG_BASE_M_LI, REG_DEST} }, - {"dld.b", OP_LI(0x341) | D(1), (MASK_LI & ~M_REG(1)) | D(1), 0, {OFF_SL_BR_SCALED, REG_BASE_M_LI, REG_DEST} }, - {"dld.b", OP_REG(0x340) | D(1), (MASK_REG & ~M_REG(1)) | D(1), 0, {REG_SCALED, REG_BASE_M_LI, REG_DEST} }, - {"dld.d", OP_LI(0x347) | D(1), (MASK_LI & ~M_REG(1)) | D(1), 0, {OFF_SL_BR_SCALED, REG_BASE_M_LI, REG_DEST_E} }, - {"dld.d", OP_REG(0x346) | D(1), (MASK_REG & ~M_REG(1)) | D(1), 0, {REG_SCALED, REG_BASE_M_LI, REG_DEST_E} }, - {"dld.h", OP_LI(0x343) | D(1), (MASK_LI & ~M_REG(1)) | D(1), 0, {OFF_SL_BR_SCALED, REG_BASE_M_LI, REG_DEST} }, - {"dld.h", OP_REG(0x342) | D(1), (MASK_REG & ~M_REG(1)) | D(1), 0, {REG_SCALED, REG_BASE_M_LI, REG_DEST} }, - - /* Direct load unsigned data into register */ - - {"dld.ub", OP_LI(0x351) | D(1), (MASK_LI & ~M_REG(1)) | D(1), 0, {OFF_SL_BR_SCALED, REG_BASE_M_LI, REG_DEST} }, - {"dld.ub", OP_REG(0x350) | D(1), (MASK_REG & ~M_REG(1)) | D(1), 0, {REG_SCALED, REG_BASE_M_LI, REG_DEST} }, - {"dld.uh", OP_LI(0x353) | D(1), (MASK_LI & ~M_REG(1)) | D(1), 0, {OFF_SL_BR_SCALED, REG_BASE_M_LI, REG_DEST} }, - {"dld.uh", OP_REG(0x352) | D(1), (MASK_REG & ~M_REG(1)) | D(1), 0, {REG_SCALED, REG_BASE_M_LI, REG_DEST} }, - - /* Direct store data into memory */ - - {"dst", OP_LI(0x365) | D(1), (MASK_LI & ~M_REG(1)) | D(1), 0, {OFF_SL_BR_SCALED, REG_BASE_M_LI, REG_DEST} }, - {"dst", OP_REG(0x364) | D(1), (MASK_REG & ~M_REG(1)) | D(1), 0, {REG_SCALED, REG_BASE_M_LI, REG_DEST} }, - {"dst.b", OP_LI(0x361) | D(1), (MASK_LI & ~M_REG(1)) | D(1), 0, {OFF_SL_BR_SCALED, REG_BASE_M_LI, REG_DEST} }, - {"dst.b", OP_REG(0x360) | D(1), (MASK_REG & ~M_REG(1)) | D(1), 0, {REG_SCALED, REG_BASE_M_LI, REG_DEST} }, - {"dst.d", OP_LI(0x367) | D(1), (MASK_LI & ~M_REG(1)) | D(1), 0, {OFF_SL_BR_SCALED, REG_BASE_M_LI, REG_DEST_E} }, - {"dst.d", OP_REG(0x366) | D(1), (MASK_REG & ~M_REG(1)) | D(1), 0, {REG_SCALED, REG_BASE_M_LI, REG_DEST_E} }, - {"dst.h", OP_LI(0x363) | D(1), (MASK_LI & ~M_REG(1)) | D(1), 0, {OFF_SL_BR_SCALED, REG_BASE_M_LI, REG_DEST} }, - {"dst.h", OP_REG(0x362) | D(1), (MASK_REG & ~M_REG(1)) | D(1), 0, {REG_SCALED, REG_BASE_M_LI, REG_DEST} }, - - /* Emulation stop */ - - {"estop", OP_LI(0x3FC), MASK_LI, 0, {0} }, - - /* Emulation trap */ - - {"etrap", OP_SI(0x1) | E(1), MASK_SI | E(1), 0, {SUI} }, - {"etrap", OP_LI(0x303) | E(1), MASK_LI | E(1), 0, {LUI} }, - {"etrap", OP_REG(0x302) | E(1), MASK_REG | E(1), 0, {REG_0} }, - - /* Floating-point addition */ - - {"fadd.ddd", OP_REG(0x3E0) | PD(1) | P2(1) | P1(1), MASK_REG | PD(3) | P2(3) | P1(3), 0, {REG_0_E, REG_22_E, REG_DEST_E} }, - {"fadd.dsd", OP_REG(0x3E0) | PD(1) | P2(0) | P1(1), MASK_REG | PD(3) | P2(3) | P1(3), 0, {REG_0_E, REG_22, REG_DEST_E} }, - {"fadd.sdd", OP_LI(0x3E1) | PD(1) | P2(1) | P1(0), MASK_LI | PD(3) | P2(3) | P1(3), 0, {SPFI, REG_22_E, REG_DEST_E} }, - {"fadd.sdd", OP_REG(0x3E0) | PD(1) | P2(1) | P1(0), MASK_REG | PD(3) | P2(3) | P1(3), 0, {REG_0, REG_22_E, REG_DEST_E} }, - {"fadd.ssd", OP_LI(0x3E1) | PD(1) | P2(0) | P1(0), MASK_LI | PD(3) | P2(3) | P1(3), 0, {SPFI, REG_22, REG_DEST_E} }, - {"fadd.ssd", OP_REG(0x3E0) | PD(1) | P2(0) | P1(0), MASK_REG | PD(3) | P2(3) | P1(3), 0, {REG_0, REG_22, REG_DEST_E} }, - {"fadd.sss", OP_LI(0x3E1) | PD(0) | P2(0) | P1(0), MASK_LI | PD(3) | P2(3) | P1(3), 0, {SPFI, REG_22, REG_DEST} }, - {"fadd.sss", OP_REG(0x3E0) | PD(0) | P2(0) | P1(0), MASK_REG | PD(3) | P2(3) | P1(3), 0, {REG_0, REG_22, REG_DEST} }, - - /* Floating point compare */ - - {"fcmp.dd", OP_REG(0x3EA) | PD(0) | P2(1) | P1(1), MASK_REG | PD(3) | P2(3) | P1(3), 0, {REG_0_E, REG_22_E, REG_DEST} }, - {"fcmp.ds", OP_REG(0x3EA) | PD(0) | P2(0) | P1(1), MASK_REG | PD(3) | P2(3) | P1(3), 0, {REG_0_E, REG_22, REG_DEST} }, - {"fcmp.sd", OP_LI(0x3EB) | PD(0) | P2(1) | P1(0), MASK_LI | PD(3) | P2(3) | P1(3), 0, {SPFI, REG_22_E, REG_DEST} }, - {"fcmp.sd", OP_REG(0x3EA) | PD(0) | P2(1) | P1(0), MASK_REG | PD(3) | P2(3) | P1(3), 0, {REG_0, REG_22_E, REG_DEST} }, - {"fcmp.ss", OP_LI(0x3EB) | PD(0) | P2(0) | P1(0), MASK_LI | PD(3) | P2(3) | P1(3), 0, {SPFI, REG_22, REG_DEST} }, - {"fcmp.ss", OP_REG(0x3EA) | PD(0) | P2(0) | P1(0), MASK_REG | PD(3) | P2(3) | P1(3), 0, {REG_0, REG_22, REG_DEST} }, - - /* Floating point divide */ - - {"fdiv.ddd", OP_REG(0x3E6) | PD(1) | P2(1) | P1(1), MASK_REG | PD(3) | P2(3) | P1(3), 0, {REG_0_E, REG_22_E, REG_DEST_E} }, - {"fdiv.dsd", OP_REG(0x3E6) | PD(1) | P2(0) | P1(1), MASK_REG | PD(3) | P2(3) | P1(3), 0, {REG_0_E, REG_22, REG_DEST_E} }, - {"fdiv.sdd", OP_LI(0x3E7) | PD(1) | P2(1) | P1(0), MASK_LI | PD(3) | P2(3) | P1(3), 0, {SPFI, REG_22_E, REG_DEST_E} }, - {"fdiv.sdd", OP_REG(0x3E6) | PD(1) | P2(1) | P1(0), MASK_REG | PD(3) | P2(3) | P1(3), 0, {REG_0, REG_22_E, REG_DEST_E} }, - {"fdiv.ssd", OP_LI(0x3E7) | PD(1) | P2(0) | P1(0), MASK_LI | PD(3) | P2(3) | P1(3), 0, {SPFI, REG_22, REG_DEST_E} }, - {"fdiv.ssd", OP_REG(0x3E6) | PD(1) | P2(0) | P1(0), MASK_REG | PD(3) | P2(3) | P1(3), 0, {REG_0, REG_22, REG_DEST_E} }, - {"fdiv.sss", OP_LI(0x3E7) | PD(0) | P2(0) | P1(0), MASK_LI | PD(3) | P2(3) | P1(3), 0, {SPFI, REG_22, REG_DEST} }, - {"fdiv.sss", OP_REG(0x3E6) | PD(0) | P2(0) | P1(0), MASK_REG | PD(3) | P2(3) | P1(3), 0, {REG_0, REG_22, REG_DEST} }, - - /* Floating point multiply */ - - {"fmpy.ddd", OP_REG(0x3E4) | PD(1) | P2(1) | P1(1), MASK_REG | PD(3) | P2(3) | P1(3), 0, {REG_0_E, REG_22_E, REG_DEST_E} }, - {"fmpy.dsd", OP_REG(0x3E4) | PD(1) | P2(0) | P1(1), MASK_REG | PD(3) | P2(3) | P1(3), 0, {REG_0_E, REG_22, REG_DEST_E} }, - {"fmpy.iii", OP_LI(0x3E5) | PD(2) | P2(2) | P1(2), MASK_LI | PD(3) | P2(3) | P1(3), 0, {LSI, REG_22, REG_DEST} }, - {"fmpy.iii", OP_REG(0x3E4) | PD(2) | P2(2) | P1(2), MASK_REG | PD(3) | P2(3) | P1(3), 0, {REG_0, REG_22, REG_DEST} }, - {"fmpy.sdd", OP_LI(0x3E5) | PD(1) | P2(1) | P1(0), MASK_LI | PD(3) | P2(3) | P1(3), 0, {SPFI, REG_22_E, REG_DEST_E} }, - {"fmpy.sdd", OP_REG(0x3E4) | PD(1) | P2(1) | P1(0), MASK_REG | PD(3) | P2(3) | P1(3), 0, {REG_0, REG_22_E, REG_DEST_E} }, - {"fmpy.ssd", OP_LI(0x3E5) | PD(1) | P2(0) | P1(0), MASK_LI | PD(3) | P2(3) | P1(3), 0, {SPFI, REG_22, REG_DEST_E} }, - {"fmpy.ssd", OP_REG(0x3E4) | PD(1) | P2(0) | P1(0), MASK_REG | PD(3) | P2(3) | P1(3), 0, {REG_0, REG_22, REG_DEST_E} }, - {"fmpy.sss", OP_LI(0x3E5) | PD(0) | P2(0) | P1(0), MASK_LI | PD(3) | P2(3) | P1(3), 0, {SPFI, REG_22, REG_DEST} }, - {"fmpy.sss", OP_REG(0x3E4) | PD(0) | P2(0) | P1(0), MASK_REG | PD(3) | P2(3) | P1(3), 0, {REG_0, REG_22, REG_DEST} }, - {"fmpy.uuu", OP_LI(0x3E5) | PD(3) | P2(3) | P1(3), MASK_LI | PD(3) | P2(3) | P1(3), 0, {LUI, REG_22, REG_DEST} }, - {"fmpy.uuu", OP_REG(0x3E4) | PD(3) | P2(3) | P1(3), MASK_REG | PD(3) | P2(3) | P1(3), 0, {REG_0, REG_22, REG_DEST} }, - - /* Convert/Round to Minus Infinity */ - - {"frndm.dd", OP_REG(0x3E8) | PD(1) | P2(3) | P1(1), MASK_REG | PD(3) | P2(3) | P1(3), 0, {REG_0_E, REG_DEST_E} }, - {"frndm.di", OP_REG(0x3E8) | PD(2) | P2(3) | P1(1), MASK_REG | PD(3) | P2(3) | P1(3), 0, {REG_0_E, REG_DEST} }, - {"frndm.ds", OP_REG(0x3E8) | PD(0) | P2(3) | P1(1), MASK_REG | PD(3) | P2(3) | P1(3), 0, {REG_0_E, REG_DEST} }, - {"frndm.du", OP_REG(0x3E8) | PD(3) | P2(3) | P1(1), MASK_REG | PD(3) | P2(3) | P1(3), 0, {REG_0_E, REG_DEST} }, - {"frndm.id", OP_LI(0x3E9) | PD(1) | P2(3) | P1(2), MASK_LI | PD(3) | P2(3) | P1(3), 0, {LSI, REG_DEST_E} }, - {"frndm.id", OP_REG(0x3E8) | PD(1) | P2(3) | P1(2), MASK_REG | PD(3) | P2(3) | P1(3), 0, {REG_0, REG_DEST_E} }, - {"frndm.is", OP_LI(0x3E9) | PD(0) | P2(3) | P1(2), MASK_LI | PD(3) | P2(3) | P1(3), 0, {LSI, REG_DEST} }, - {"frndm.is", OP_REG(0x3E8) | PD(0) | P2(3) | P1(2), MASK_REG | PD(3) | P2(3) | P1(3), 0, {REG_0, REG_DEST} }, - {"frndm.sd", OP_LI(0x3E9) | PD(1) | P2(3) | P1(0), MASK_LI | PD(3) | P2(3) | P1(3), 0, {SPFI, REG_DEST_E} }, - {"frndm.sd", OP_REG(0x3E8) | PD(1) | P2(3) | P1(0), MASK_REG | PD(3) | P2(3) | P1(3), 0, {REG_0, REG_DEST_E} }, - {"frndm.si", OP_LI(0x3E9) | PD(2) | P2(3) | P1(0), MASK_LI | PD(3) | P2(3) | P1(3), 0, {SPFI, REG_DEST} }, - {"frndm.si", OP_REG(0x3E8) | PD(2) | P2(3) | P1(0), MASK_REG | PD(3) | P2(3) | P1(3), 0, {REG_0, REG_DEST} }, - {"frndm.ss", OP_LI(0x3E9) | PD(0) | P2(3) | P1(0), MASK_LI | PD(3) | P2(3) | P1(3), 0, {SPFI, REG_DEST} }, - {"frndm.ss", OP_REG(0x3E8) | PD(0) | P2(3) | P1(0), MASK_REG | PD(3) | P2(3) | P1(3), 0, {REG_0, REG_DEST} }, - {"frndm.su", OP_LI(0x3E9) | PD(3) | P2(3) | P1(0), MASK_LI | PD(3) | P2(3) | P1(3), 0, {SPFI, REG_DEST} }, - {"frndm.su", OP_REG(0x3E8) | PD(3) | P2(3) | P1(0), MASK_REG | PD(3) | P2(3) | P1(3), 0, {REG_0, REG_DEST} }, - {"frndm.ud", OP_LI(0x3E9) | PD(1) | P2(3) | P1(3), MASK_LI | PD(3) | P2(3) | P1(3), 0, {LSI, REG_DEST_E} }, - {"frndm.ud", OP_REG(0x3E8) | PD(1) | P2(3) | P1(3), MASK_REG | PD(3) | P2(3) | P1(3), 0, {REG_0, REG_DEST_E} }, - {"frndm.us", OP_LI(0x3E9) | PD(0) | P2(3) | P1(3), MASK_LI | PD(3) | P2(3) | P1(3), 0, {LSI, REG_DEST} }, - {"frndm.us", OP_REG(0x3E8) | PD(0) | P2(3) | P1(3), MASK_REG | PD(3) | P2(3) | P1(3), 0, {REG_0, REG_DEST} }, - - /* Convert/Round to Nearest */ - - {"frndn.dd", OP_REG(0x3E8) | PD(1) | P2(0) | P1(1), MASK_REG | PD(3) | P2(3) | P1(3), 0, {REG_0_E, REG_DEST_E} }, - {"frndn.di", OP_REG(0x3E8) | PD(2) | P2(0) | P1(1), MASK_REG | PD(3) | P2(3) | P1(3), 0, {REG_0_E, REG_DEST} }, - {"frndn.ds", OP_REG(0x3E8) | PD(0) | P2(0) | P1(1), MASK_REG | PD(3) | P2(3) | P1(3), 0, {REG_0_E, REG_DEST} }, - {"frndn.du", OP_REG(0x3E8) | PD(3) | P2(0) | P1(1), MASK_REG | PD(3) | P2(3) | P1(3), 0, {REG_0_E, REG_DEST} }, - {"frndn.id", OP_LI(0x3E9) | PD(1) | P2(0) | P1(2), MASK_LI | PD(3) | P2(3) | P1(3), 0, {LSI, REG_DEST_E} }, - {"frndn.id", OP_REG(0x3E8) | PD(1) | P2(0) | P1(2), MASK_REG | PD(3) | P2(3) | P1(3), 0, {REG_0, REG_DEST_E} }, - {"frndn.is", OP_LI(0x3E9) | PD(0) | P2(0) | P1(2), MASK_LI | PD(3) | P2(3) | P1(3), 0, {LSI, REG_DEST} }, - {"frndn.is", OP_REG(0x3E8) | PD(0) | P2(0) | P1(2), MASK_REG | PD(3) | P2(3) | P1(3), 0, {REG_0, REG_DEST} }, - {"frndn.sd", OP_LI(0x3E9) | PD(1) | P2(0) | P1(0), MASK_LI | PD(3) | P2(3) | P1(3), 0, {SPFI, REG_DEST_E} }, - {"frndn.sd", OP_REG(0x3E8) | PD(1) | P2(0) | P1(0), MASK_REG | PD(3) | P2(3) | P1(3), 0, {REG_0, REG_DEST_E} }, - {"frndn.si", OP_LI(0x3E9) | PD(2) | P2(0) | P1(0), MASK_LI | PD(3) | P2(3) | P1(3), 0, {SPFI, REG_DEST} }, - {"frndn.si", OP_REG(0x3E8) | PD(2) | P2(0) | P1(0), MASK_REG | PD(3) | P2(3) | P1(3), 0, {REG_0, REG_DEST} }, - {"frndn.ss", OP_LI(0x3E9) | PD(0) | P2(0) | P1(0), MASK_LI | PD(3) | P2(3) | P1(3), 0, {SPFI, REG_DEST} }, - {"frndn.ss", OP_REG(0x3E8) | PD(0) | P2(0) | P1(0), MASK_REG | PD(3) | P2(3) | P1(3), 0, {REG_0, REG_DEST} }, - {"frndn.su", OP_LI(0x3E9) | PD(3) | P2(0) | P1(0), MASK_LI | PD(3) | P2(3) | P1(3), 0, {SPFI, REG_DEST} }, - {"frndn.su", OP_REG(0x3E8) | PD(3) | P2(0) | P1(0), MASK_REG | PD(3) | P2(3) | P1(3), 0, {REG_0, REG_DEST} }, - {"frndn.ud", OP_LI(0x3E9) | PD(1) | P2(0) | P1(3), MASK_LI | PD(3) | P2(3) | P1(3), 0, {LSI, REG_DEST_E} }, - {"frndn.ud", OP_REG(0x3E8) | PD(1) | P2(0) | P1(3), MASK_REG | PD(3) | P2(3) | P1(3), 0, {REG_0, REG_DEST_E} }, - {"frndn.us", OP_LI(0x3E9) | PD(0) | P2(0) | P1(3), MASK_LI | PD(3) | P2(3) | P1(3), 0, {LSI, REG_DEST} }, - {"frndn.us", OP_REG(0x3E8) | PD(0) | P2(0) | P1(3), MASK_REG | PD(3) | P2(3) | P1(3), 0, {REG_0, REG_DEST} }, - - /* Convert/Round to Positive Infinity */ - - {"frndp.dd", OP_REG(0x3E8) | PD(1) | P2(2) | P1(1), MASK_REG | PD(3) | P2(3) | P1(3), 0, {REG_0_E, REG_DEST_E} }, - {"frndp.di", OP_REG(0x3E8) | PD(2) | P2(2) | P1(1), MASK_REG | PD(3) | P2(3) | P1(3), 0, {REG_0_E, REG_DEST} }, - {"frndp.ds", OP_REG(0x3E8) | PD(0) | P2(2) | P1(1), MASK_REG | PD(3) | P2(3) | P1(3), 0, {REG_0_E, REG_DEST} }, - {"frndp.du", OP_REG(0x3E8) | PD(3) | P2(2) | P1(1), MASK_REG | PD(3) | P2(3) | P1(3), 0, {REG_0_E, REG_DEST} }, - {"frndp.id", OP_LI(0x3E9) | PD(1) | P2(2) | P1(2), MASK_LI | PD(3) | P2(3) | P1(3), 0, {LSI, REG_DEST_E} }, - {"frndp.id", OP_REG(0x3E8) | PD(1) | P2(2) | P1(2), MASK_REG | PD(3) | P2(3) | P1(3), 0, {REG_0, REG_DEST_E} }, - {"frndp.is", OP_LI(0x3E9) | PD(0) | P2(2) | P1(2), MASK_LI | PD(3) | P2(3) | P1(3), 0, {LSI, REG_DEST} }, - {"frndp.is", OP_REG(0x3E8) | PD(0) | P2(2) | P1(2), MASK_REG | PD(3) | P2(3) | P1(3), 0, {REG_0, REG_DEST} }, - {"frndp.sd", OP_LI(0x3E9) | PD(1) | P2(2) | P1(0), MASK_LI | PD(3) | P2(3) | P1(3), 0, {SPFI, REG_DEST_E} }, - {"frndp.sd", OP_REG(0x3E8) | PD(1) | P2(2) | P1(0), MASK_REG | PD(3) | P2(3) | P1(3), 0, {REG_0, REG_DEST_E} }, - {"frndp.si", OP_LI(0x3E9) | PD(2) | P2(2) | P1(0), MASK_LI | PD(3) | P2(3) | P1(3), 0, {SPFI, REG_DEST} }, - {"frndp.si", OP_REG(0x3E8) | PD(2) | P2(2) | P1(0), MASK_REG | PD(3) | P2(3) | P1(3), 0, {REG_0, REG_DEST} }, - {"frndp.ss", OP_LI(0x3E9) | PD(0) | P2(2) | P1(0), MASK_LI | PD(3) | P2(3) | P1(3), 0, {SPFI, REG_DEST} }, - {"frndp.ss", OP_REG(0x3E8) | PD(0) | P2(2) | P1(0), MASK_REG | PD(3) | P2(3) | P1(3), 0, {REG_0, REG_DEST} }, - {"frndp.su", OP_LI(0x3E9) | PD(3) | P2(2) | P1(0), MASK_LI | PD(3) | P2(3) | P1(3), 0, {SPFI, REG_DEST} }, - {"frndp.su", OP_REG(0x3E8) | PD(3) | P2(2) | P1(0), MASK_REG | PD(3) | P2(3) | P1(3), 0, {REG_0, REG_DEST} }, - {"frndp.ud", OP_LI(0x3E9) | PD(1) | P2(2) | P1(3), MASK_LI | PD(3) | P2(3) | P1(3), 0, {LSI, REG_DEST_E} }, - {"frndp.ud", OP_REG(0x3E8) | PD(1) | P2(2) | P1(3), MASK_REG | PD(3) | P2(3) | P1(3), 0, {REG_0, REG_DEST_E} }, - {"frndp.us", OP_LI(0x3E9) | PD(0) | P2(2) | P1(3), MASK_LI | PD(3) | P2(3) | P1(3), 0, {LSI, REG_DEST} }, - {"frndp.us", OP_REG(0x3E8) | PD(0) | P2(2) | P1(3), MASK_REG | PD(3) | P2(3) | P1(3), 0, {REG_0, REG_DEST} }, - - /* Convert/Round to Zero */ - - {"frndz.dd", OP_REG(0x3E8) | PD(1) | P2(1) | P1(1), MASK_REG | PD(3) | P2(3) | P1(3), 0, {REG_0_E, REG_DEST_E} }, - {"frndz.di", OP_REG(0x3E8) | PD(2) | P2(1) | P1(1), MASK_REG | PD(3) | P2(3) | P1(3), 0, {REG_0_E, REG_DEST} }, - {"frndz.ds", OP_REG(0x3E8) | PD(0) | P2(1) | P1(1), MASK_REG | PD(3) | P2(3) | P1(3), 0, {REG_0_E, REG_DEST} }, - {"frndz.du", OP_REG(0x3E8) | PD(3) | P2(1) | P1(1), MASK_REG | PD(3) | P2(3) | P1(3), 0, {REG_0_E, REG_DEST} }, - {"frndz.id", OP_LI(0x3E9) | PD(1) | P2(1) | P1(2), MASK_LI | PD(3) | P2(3) | P1(3), 0, {LSI, REG_DEST_E} }, - {"frndz.id", OP_REG(0x3E8) | PD(1) | P2(1) | P1(2), MASK_REG | PD(3) | P2(3) | P1(3), 0, {REG_0, REG_DEST_E} }, - {"frndz.is", OP_LI(0x3E9) | PD(0) | P2(1) | P1(2), MASK_LI | PD(3) | P2(3) | P1(3), 0, {LSI, REG_DEST} }, - {"frndz.is", OP_REG(0x3E8) | PD(0) | P2(1) | P1(2), MASK_REG | PD(3) | P2(3) | P1(3), 0, {REG_0, REG_DEST} }, - {"frndz.sd", OP_LI(0x3E9) | PD(1) | P2(1) | P1(0), MASK_LI | PD(3) | P2(3) | P1(3), 0, {SPFI, REG_DEST_E} }, - {"frndz.sd", OP_REG(0x3E8) | PD(1) | P2(1) | P1(0), MASK_REG | PD(3) | P2(3) | P1(3), 0, {REG_0, REG_DEST_E} }, - {"frndz.si", OP_LI(0x3E9) | PD(2) | P2(1) | P1(0), MASK_LI | PD(3) | P2(3) | P1(3), 0, {SPFI, REG_DEST} }, - {"frndz.si", OP_REG(0x3E8) | PD(2) | P2(1) | P1(0), MASK_REG | PD(3) | P2(3) | P1(3), 0, {REG_0, REG_DEST} }, - {"frndz.ss", OP_LI(0x3E9) | PD(0) | P2(1) | P1(0), MASK_LI | PD(3) | P2(3) | P1(3), 0, {SPFI, REG_DEST} }, - {"frndz.ss", OP_REG(0x3E8) | PD(0) | P2(1) | P1(0), MASK_REG | PD(3) | P2(3) | P1(3), 0, {REG_0, REG_DEST} }, - {"frndz.su", OP_LI(0x3E9) | PD(3) | P2(1) | P1(0), MASK_LI | PD(3) | P2(3) | P1(3), 0, {SPFI, REG_DEST} }, - {"frndz.su", OP_REG(0x3E8) | PD(3) | P2(1) | P1(0), MASK_REG | PD(3) | P2(3) | P1(3), 0, {REG_0, REG_DEST} }, - {"frndz.ud", OP_LI(0x3E9) | PD(1) | P2(1) | P1(3), MASK_LI | PD(3) | P2(3) | P1(3), 0, {LSI, REG_DEST_E} }, - {"frndz.ud", OP_REG(0x3E8) | PD(1) | P2(1) | P1(3), MASK_REG | PD(3) | P2(3) | P1(3), 0, {REG_0, REG_DEST_E} }, - {"frndz.us", OP_LI(0x3E9) | PD(0) | P2(1) | P1(3), MASK_LI | PD(3) | P2(3) | P1(3), 0, {LSI, REG_DEST} }, - {"frndz.us", OP_REG(0x3E8) | PD(0) | P2(1) | P1(3), MASK_REG | PD(3) | P2(3) | P1(3), 0, {REG_0, REG_DEST} }, - - /* Floating point square root */ - - {"fsqrt.dd", OP_REG(0x3EE) | PD(1) | P2(0) | P1(1), MASK_REG | PD(3) | P2(3) | P1(3), 0, {REG_0_E, REG_DEST_E} }, - {"fsqrt.sd", OP_LI(0x3EF) | PD(1) | P2(0) | P1(0), MASK_LI | PD(3) | P2(3) | P1(3), 0, {SPFI, REG_DEST_E} }, - {"fsqrt.sd", OP_REG(0x3EE) | PD(1) | P2(0) | P1(0), MASK_REG | PD(3) | P2(3) | P1(3), 0, {REG_0, REG_DEST_E} }, - {"fsqrt.ss", OP_LI(0x3EF) | PD(0) | P2(0) | P1(0), MASK_LI | PD(3) | P2(3) | P1(3), 0, {SPFI, REG_DEST} }, - {"fsqrt.ss", OP_REG(0x3EE) | PD(0) | P2(0) | P1(0), MASK_REG | PD(3) | P2(3) | P1(3), 0, {REG_0, REG_DEST} }, - - /* Floating point subtraction */ - - { "fsub.ddd", OP_REG(0x3E2) | PD(1) | P2(1) | P1(1), MASK_REG | PD(3) | P2(3) | P1(3), 0, {REG_0_E, REG_22_E, REG_DEST_E} }, - { "fsub.dsd", OP_REG(0x3E2) | PD(1) | P2(0) | P1(1), MASK_REG | PD(3) | P2(3) | P1(3), 0, {REG_0_E, REG_22, REG_DEST_E} }, - { "fsub.sdd", OP_LI(0x3E3) | PD(1) | P2(1) | P1(0), MASK_LI | PD(3) | P2(3) | P1(3), 0, {SPFI, REG_22_E, REG_DEST_E} }, - { "fsub.sdd", OP_REG(0x3E2) | PD(1) | P2(1) | P1(0), MASK_REG | PD(3) | P2(3) | P1(3), 0, {REG_0, REG_22_E, REG_DEST_E} }, - { "fsub.ssd", OP_LI(0x3E3) | PD(1) | P2(0) | P1(0), MASK_LI | PD(3) | P2(3) | P1(3), 0, {SPFI, REG_22, REG_DEST_E} }, - { "fsub.ssd", OP_REG(0x3E2) | PD(1) | P2(0) | P1(0), MASK_REG | PD(3) | P2(3) | P1(3), 0, {REG_0, REG_22, REG_DEST_E} }, - { "fsub.sss", OP_LI(0x3E3) | PD(0) | P2(0) | P1(0), MASK_LI | PD(3) | P2(3) | P1(3), 0, {SPFI, REG_22, REG_DEST} }, - { "fsub.sss", OP_REG(0x3E2) | PD(0) | P2(0) | P1(0), MASK_REG | PD(3) | P2(3) | P1(3), 0, {REG_0, REG_22, REG_DEST} }, - - /* Illegal instructions */ - - {"illop0", OP_SI(0x0), MASK_SI, 0, {0} }, - {"illopF", 0x1FF << 13, 0x1FF << 13, 0, {0} }, - - /* Jump and save return */ - - {"jsr", OP_SI(0x44), MASK_SI, 0, {OFF_SS_BR, REG_BASE, REG_DEST} }, - {"jsr", OP_LI(0x389), MASK_LI, 0, {OFF_SL_BR, REG_BASE, REG_DEST} }, - {"jsr", OP_REG(0x388), MASK_REG, 0, {REG_0, REG_BASE, REG_DEST} }, - {"jsr.a", OP_SI(0x45), MASK_SI, 0, {OFF_SS_BR, REG_BASE, REG_DEST} }, - {"jsr.a", OP_LI(0x38B), MASK_LI, 0, {OFF_SL_BR, REG_BASE, REG_DEST} }, - {"jsr.a", OP_REG(0x38A), MASK_REG, 0, {REG_0, REG_BASE, REG_DEST} }, - - /* Load Signed Data Into Register */ - - {"ld", OP_SI(0x22), (MASK_SI & ~M_SI(1)), 0, {OFF_SS_BR, REG_BASE_M_SI, REG_DEST} }, - {"ld", OP_LI(0x345) | D(0), (MASK_LI & ~M_REG(1)) | D(1), 0, {OFF_SL_BR_SCALED, REG_BASE_M_LI, REG_DEST} }, - {"ld", OP_REG(0x344) | D(0), (MASK_REG & ~M_REG(1)) | D(1), 0, {REG_SCALED, REG_BASE_M_LI, REG_DEST} }, - {"ld.b", OP_SI(0x20), (MASK_SI & ~M_SI(1)), 0, {OFF_SS_BR, REG_BASE_M_SI, REG_DEST} }, - {"ld.b", OP_LI(0x341) | D(0), (MASK_LI & ~M_REG(1)) | D(1), 0, {OFF_SL_BR_SCALED, REG_BASE_M_LI, REG_DEST} }, - {"ld.b", OP_REG(0x340) | D(0), (MASK_REG & ~M_REG(1)) | D(1), 0, {REG_SCALED, REG_BASE_M_LI, REG_DEST} }, - {"ld.d", OP_SI(0x23), (MASK_SI & ~M_SI(1)), 0, {OFF_SS_BR, REG_BASE_M_SI, REG_DEST_E} }, - {"ld.d", OP_LI(0x347) | D(0), (MASK_LI & ~M_REG(1)) | D(1), 0, {OFF_SL_BR_SCALED, REG_BASE_M_LI, REG_DEST_E} }, - {"ld.d", OP_REG(0x346) | D(0), (MASK_REG & ~M_REG(1)) | D(1), 0, {REG_SCALED, REG_BASE_M_LI, REG_DEST_E} }, - {"ld.h", OP_SI(0x21), (MASK_SI & ~M_SI(1)), 0, {OFF_SS_BR, REG_BASE_M_SI, REG_DEST} }, - {"ld.h", OP_LI(0x343) | D(0), (MASK_LI & ~M_REG(1)) | D(1), 0, {OFF_SL_BR_SCALED, REG_BASE_M_LI, REG_DEST} }, - {"ld.h", OP_REG(0x342) | D(0), (MASK_REG & ~M_REG(1)) | D(1), 0, {REG_SCALED, REG_BASE_M_LI, REG_DEST} }, - - /* Load Unsigned Data Into Register */ - - {"ld.ub", OP_SI(0x28), (MASK_SI & ~M_SI(1)), 0, {OFF_SS_BR, REG_BASE_M_SI, REG_DEST} }, - {"ld.ub", OP_LI(0x351) | D(0), (MASK_LI & ~M_REG(1)) | D(1), 0, {OFF_SL_BR_SCALED, REG_BASE_M_LI, REG_DEST} }, - {"ld.ub", OP_REG(0x350) | D(0), (MASK_REG & ~M_REG(1)) | D(1), 0, {REG_SCALED, REG_BASE_M_LI, REG_DEST} }, - {"ld.uh", OP_SI(0x29), (MASK_SI & ~M_SI(1)), 0, {OFF_SS_BR, REG_BASE_M_SI, REG_DEST} }, - {"ld.uh", OP_LI(0x353) | D(0), (MASK_LI & ~M_REG(1)) | D(1), 0, {OFF_SL_BR_SCALED, REG_BASE_M_LI, REG_DEST} }, - {"ld.uh", OP_REG(0x352) | D(0), (MASK_REG & ~M_REG(1)) | D(1), 0, {REG_SCALED, REG_BASE_M_LI, REG_DEST} }, - - /* Leftmost one */ - - {"lmo", OP_LI(0x3F0), MASK_LI, 0, {REG_22, REG_DEST} }, - - /* Bitwise logical OR. Note that "or.tt" and "or" are the same instructions. */ - - {"or.ff", OP_SI(0x1E), MASK_SI, 0, {SUI, REG_22, REG_DEST} }, - {"or.ff", OP_LI(0x33D), MASK_LI, 0, {LUI, REG_22, REG_DEST} }, - {"or.ff", OP_REG(0x33C), MASK_REG, 0, {REG_0, REG_22, REG_DEST} }, - {"or.ft", OP_SI(0x1D), MASK_SI, 0, {SUI, REG_22, REG_DEST} }, - {"or.ft", OP_LI(0x33B), MASK_LI, 0, {LUI, REG_22, REG_DEST} }, - {"or.ft", OP_REG(0x33A), MASK_REG, 0, {REG_0, REG_22, REG_DEST} }, - {"or.tf", OP_SI(0x1B), MASK_SI, 0, {SUI, REG_22, REG_DEST} }, - {"or.tf", OP_LI(0x337), MASK_LI, 0, {LUI, REG_22, REG_DEST} }, - {"or.tf", OP_REG(0x336), MASK_REG, 0, {REG_0, REG_22, REG_DEST} }, - {"or.tt", OP_SI(0x17), MASK_SI, 0, {SUI, REG_22, REG_DEST} }, - {"or.tt", OP_LI(0x32F), MASK_LI, 0, {LUI, REG_22, REG_DEST} }, - {"or.tt", OP_REG(0x32E), MASK_REG, 0, {REG_0, REG_22, REG_DEST} }, - {"or", OP_SI(0x17), MASK_SI, 0, {SUI, REG_22, REG_DEST} }, - {"or", OP_LI(0x32F), MASK_LI, 0, {LUI, REG_22, REG_DEST} }, - {"or", OP_REG(0x32E), MASK_REG, 0, {REG_0, REG_22, REG_DEST} }, - - /* Read Control Register */ - - {"rdcr", OP_SI(0x4), MASK_SI | (0x1F << 22), 0, {CR_SI, REG_DEST} }, - {"rdcr", OP_LI(0x309), MASK_LI | (0x1F << 22), 0, {CR_LI, REG_DEST} }, - {"rdcr", OP_REG(0x308), MASK_REG | (0x1F << 22), 0, {REG_0, REG_DEST} }, - - /* Rightmost one */ - - {"rmo", OP_LI(0x3F2), MASK_LI, 0, {REG_22, REG_DEST} }, - - /* Shift Register Left - note that rotl, shl, and ins are all alternate names for one of the shift instructions. - They appear prior to their sl equivalent so that they will be diassembled as the alternate name. */ - - - {"ins", OP_REG(0x31E) | i(0) | n(0), MASK_REG | i(1) | n(1), 0, {REG_0, ENDMASK, REG_22, REG_DEST} }, - {"ins", OP_SI(0xF) | i(0) | n(0), MASK_SI | i(1) | n(1), 0, {ROTATE, ENDMASK, REG_22, REG_DEST} }, - {"rotl", OP_REG(0x310) | i(0) | n(0), MASK_REG | i(1) | n(1), 0, {REG_0, ENDMASK, REG_22, REG_DEST} }, - {"rotl", OP_SI(0x8) | i(0) | n(0), MASK_SI | i(1) | n(1), 0, {ROTATE, ENDMASK, REG_22, REG_DEST} }, - {"shl", OP_REG(0x31C) | i(0) | n(0), MASK_REG | i(1) | n(1), 0, {REG_0, ENDMASK, REG_22, REG_DEST} }, - {"shl", OP_SI(0xE) | i(0) | n(0), MASK_SI | i(1) | n(1), 0, {ROTATE, ENDMASK, REG_22, REG_DEST} }, - {"sl.dm", OP_REG(0x312) | i(0) | n(0), MASK_REG | i(1) | n(1), 0, {REG_0, ENDMASK, REG_22, REG_DEST} }, - {"sl.dm", OP_SI(0x9) | i(0) | n(0), MASK_SI | i(1) | n(1), 0, {ROTATE, ENDMASK, REG_22, REG_DEST} }, - {"sl.ds", OP_REG(0x314) | i(0) | n(0), MASK_REG | i(1) | n(1), 0, {REG_0, ENDMASK, REG_22, REG_DEST} }, - {"sl.ds", OP_SI(0xA) | i(0) | n(0), MASK_SI | i(1) | n(1), 0, {ROTATE, ENDMASK, REG_22, REG_DEST} }, - {"sl.dz", OP_REG(0x310) | i(0) | n(0), MASK_REG | i(1) | n(1), 0, {REG_0, ENDMASK, REG_22, REG_DEST} }, - {"sl.dz", OP_SI(0x8) | i(0) | n(0), MASK_SI | i(1) | n(1), 0, {ROTATE, ENDMASK, REG_22, REG_DEST} }, - {"sl.em", OP_REG(0x318) | i(0) | n(0), MASK_REG | i(1) | n(1), 0, {REG_0, ENDMASK, REG_22, REG_DEST} }, - {"sl.em", OP_SI(0xC) | i(0) | n(0), MASK_SI | i(1) | n(1), 0, {ROTATE, ENDMASK, REG_22, REG_DEST} }, - {"sl.es", OP_REG(0x31A) | i(0) | n(0), MASK_REG | i(1) | n(1), 0, {REG_0, ENDMASK, REG_22, REG_DEST} }, - {"sl.es", OP_SI(0xD) | i(0) | n(0), MASK_SI | i(1) | n(1), 0, {ROTATE, ENDMASK, REG_22, REG_DEST} }, - {"sl.ez", OP_REG(0x316) | i(0) | n(0), MASK_REG | i(1) | n(1), 0, {REG_0, ENDMASK, REG_22, REG_DEST} }, - {"sl.ez", OP_SI(0xB) | i(0) | n(0), MASK_SI | i(1) | n(1), 0, {ROTATE, ENDMASK, REG_22, REG_DEST} }, - {"sl.im", OP_REG(0x31E) | i(0) | n(0), MASK_REG | i(1) | n(1), 0, {REG_0, ENDMASK, REG_22, REG_DEST} }, - {"sl.im", OP_SI(0xF) | i(0) | n(0), MASK_SI | i(1) | n(1), 0, {ROTATE, ENDMASK, REG_22, REG_DEST} }, - {"sl.iz", OP_REG(0x31C) | i(0) | n(0), MASK_REG | i(1) | n(1), 0, {REG_0, ENDMASK, REG_22, REG_DEST} }, - {"sl.iz", OP_SI(0xE) | i(0) | n(0), MASK_SI | i(1) | n(1), 0, {ROTATE, ENDMASK, REG_22, REG_DEST} }, - - /* Shift Register Left With Inverted Endmask */ - - {"sli.dm", OP_REG(0x312) | i(1) | n(0), MASK_REG | i(1) | n(1), 0, {REG_0, ENDMASK, REG_22, REG_DEST} }, - {"sli.dm", OP_SI(0x9) | i(1) | n(0), MASK_SI | i(1) | n(1), 0, {ROTATE, ENDMASK, REG_22, REG_DEST} }, - {"sli.ds", OP_REG(0x314) | i(1) | n(0), MASK_REG | i(1) | n(1), 0, {REG_0, ENDMASK, REG_22, REG_DEST} }, - {"sli.ds", OP_SI(0xA) | i(1) | n(0), MASK_SI | i(1) | n(1), 0, {ROTATE, ENDMASK, REG_22, REG_DEST} }, - {"sli.dz", OP_REG(0x310) | i(1) | n(0), MASK_REG | i(1) | n(1), 0, {REG_0, ENDMASK, REG_22, REG_DEST} }, - {"sli.dz", OP_SI(0x8) | i(1) | n(0), MASK_SI | i(1) | n(1), 0, {ROTATE, ENDMASK, REG_22, REG_DEST} }, - {"sli.em", OP_REG(0x318) | i(1) | n(0), MASK_REG | i(1) | n(1), 0, {REG_0, ENDMASK, REG_22, REG_DEST} }, - {"sli.em", OP_SI(0xC) | i(1) | n(0), MASK_SI | i(1) | n(1), 0, {ROTATE, ENDMASK, REG_22, REG_DEST} }, - {"sli.es", OP_REG(0x31A) | i(1) | n(0), MASK_REG | i(1) | n(1), 0, {REG_0, ENDMASK, REG_22, REG_DEST} }, - {"sli.es", OP_SI(0xD) | i(1) | n(0), MASK_SI | i(1) | n(1), 0, {ROTATE, ENDMASK, REG_22, REG_DEST} }, - {"sli.ez", OP_REG(0x316) | i(1) | n(0), MASK_REG | i(1) | n(1), 0, {REG_0, ENDMASK, REG_22, REG_DEST} }, - {"sli.ez", OP_SI(0xB) | i(1) | n(0), MASK_SI | i(1) | n(1), 0, {ROTATE, ENDMASK, REG_22, REG_DEST} }, - {"sli.im", OP_REG(0x31E) | i(1) | n(0), MASK_REG | i(1) | n(1), 0, {REG_0, ENDMASK, REG_22, REG_DEST} }, - {"sli.im", OP_SI(0xF) | i(1) | n(0), MASK_SI | i(1) | n(1), 0, {ROTATE, ENDMASK, REG_22, REG_DEST} }, - {"sli.iz", OP_REG(0x31C) | i(1) | n(0), MASK_REG | i(1) | n(1), 0, {REG_0, ENDMASK, REG_22, REG_DEST} }, - {"sli.iz", OP_SI(0xE) | i(1) | n(0), MASK_SI | i(1) | n(1), 0, {ROTATE, ENDMASK, REG_22, REG_DEST} }, - - /* Shift Register Right - note that exts, extu, rotr, sra, and srl are all alternate names for one of the shift instructions. - They appear prior to their sr equivalent so that they will be diassembled as the alternate name. */ - - {"exts", OP_REG(0x314) | i(0) | n(1), MASK_REG | i(1) | n(1), 0, {REG_0, ENDMASK, REG_22, REG_DEST} }, - {"exts", OP_SI(0xA) | i(0) | n(1), MASK_SI | i(1) | n(1), 0, {ROTATE, ENDMASK, REG_22, REG_DEST} }, - {"extu", OP_REG(0x310) | i(0) | n(1), MASK_REG | i(1) | n(1), 0, {REG_0, ENDMASK, REG_22, REG_DEST} }, - {"extu", OP_SI(0x8) | i(0) | n(1), MASK_SI | i(1) | n(1), 0, {ROTATE, ENDMASK, REG_22, REG_DEST} }, - {"rotr", OP_REG(0x310) | i(0) | n(1), MASK_REG | i(1) | n(1), 0, {REG_0, ENDMASK, REG_22, REG_DEST} }, - {"rotr", OP_SI(0x8) | i(0) | n(1), MASK_SI | i(1) | n(1), 0, {ROTATE, ENDMASK, REG_22, REG_DEST} }, - {"sra", OP_REG(0x31A) | i(0) | n(1), MASK_REG | i(1) | n(1), 0, {REG_0, ENDMASK, REG_22, REG_DEST} }, - {"sra", OP_SI(0xD) | i(0) | n(1), MASK_SI | i(1) | n(1), 0, {ROTATE, ENDMASK, REG_22, REG_DEST} }, - {"srl", OP_REG(0x316) | i(0) | n(1), MASK_REG | i(1) | n(1), 0, {REG_0, ENDMASK, REG_22, REG_DEST} }, - {"srl", OP_SI(0xB) | i(0) | n(1), MASK_SI | i(1) | n(1), 0, {ROTATE, ENDMASK, REG_22, REG_DEST} }, - {"sr.dm", OP_REG(0x312) | i(0) | n(1), MASK_REG | i(1) | n(1), 0, {REG_0, ENDMASK, REG_22, REG_DEST} }, - {"sr.dm", OP_SI(0x9) | i(0) | n(1), MASK_SI | i(1) | n(1), 0, {ROTATE, ENDMASK, REG_22, REG_DEST} }, - {"sr.ds", OP_REG(0x314) | i(0) | n(1), MASK_REG | i(1) | n(1), 0, {REG_0, ENDMASK, REG_22, REG_DEST} }, - {"sr.ds", OP_SI(0xA) | i(0) | n(1), MASK_SI | i(1) | n(1), 0, {ROTATE, ENDMASK, REG_22, REG_DEST} }, - {"sr.dz", OP_REG(0x310) | i(0) | n(1), MASK_REG | i(1) | n(1), 0, {REG_0, ENDMASK, REG_22, REG_DEST} }, - {"sr.dz", OP_SI(0x8) | i(0) | n(1), MASK_SI | i(1) | n(1), 0, {ROTATE, ENDMASK, REG_22, REG_DEST} }, - {"sr.em", OP_REG(0x318) | i(0) | n(1), MASK_REG | i(1) | n(1), 0, {REG_0, ENDMASK, REG_22, REG_DEST} }, - {"sr.em", OP_SI(0xC) | i(0) | n(1), MASK_SI | i(1) | n(1), 0, {ROTATE, ENDMASK, REG_22, REG_DEST} }, - {"sr.es", OP_REG(0x31A) | i(0) | n(1), MASK_REG | i(1) | n(1), 0, {REG_0, ENDMASK, REG_22, REG_DEST} }, - {"sr.es", OP_SI(0xD) | i(0) | n(1), MASK_SI | i(1) | n(1), 0, {ROTATE, ENDMASK, REG_22, REG_DEST} }, - {"sr.ez", OP_REG(0x316) | i(0) | n(1), MASK_REG | i(1) | n(1), 0, {REG_0, ENDMASK, REG_22, REG_DEST} }, - {"sr.ez", OP_SI(0xB) | i(0) | n(1), MASK_SI | i(1) | n(1), 0, {ROTATE, ENDMASK, REG_22, REG_DEST} }, - {"sr.im", OP_REG(0x31E) | i(0) | n(1), MASK_REG | i(1) | n(1), 0, {REG_0, ENDMASK, REG_22, REG_DEST} }, - {"sr.im", OP_SI(0xF) | i(0) | n(1), MASK_SI | i(1) | n(1), 0, {ROTATE, ENDMASK, REG_22, REG_DEST} }, - {"sr.iz", OP_REG(0x31C) | i(0) | n(1), MASK_REG | i(1) | n(1), 0, {REG_0, ENDMASK, REG_22, REG_DEST} }, - {"sr.iz", OP_SI(0xE) | i(0) | n(1), MASK_SI | i(1) | n(1), 0, {ROTATE, ENDMASK, REG_22, REG_DEST} }, - - /* Shift Register Right With Inverted Endmask */ - - {"sri.dm", OP_REG(0x312) | i(1) | n(1), MASK_REG | i(1) | n(1), 0, {REG_0, ENDMASK, REG_22, REG_DEST} }, - {"sri.dm", OP_SI(0x9) | i(1) | n(1), MASK_SI | i(1) | n(1), 0, {ROTATE, ENDMASK, REG_22, REG_DEST} }, - {"sri.ds", OP_REG(0x314) | i(1) | n(1), MASK_REG | i(1) | n(1), 0, {REG_0, ENDMASK, REG_22, REG_DEST} }, - {"sri.ds", OP_SI(0xA) | i(1) | n(1), MASK_SI | i(1) | n(1), 0, {ROTATE, ENDMASK, REG_22, REG_DEST} }, - {"sri.dz", OP_REG(0x310) | i(1) | n(1), MASK_REG | i(1) | n(1), 0, {REG_0, ENDMASK, REG_22, REG_DEST} }, - {"sri.dz", OP_SI(0x8) | i(1) | n(1), MASK_SI | i(1) | n(1), 0, {ROTATE, ENDMASK, REG_22, REG_DEST} }, - {"sri.em", OP_REG(0x318) | i(1) | n(1), MASK_REG | i(1) | n(1), 0, {REG_0, ENDMASK, REG_22, REG_DEST} }, - {"sri.em", OP_SI(0xC) | i(1) | n(1), MASK_SI | i(1) | n(1), 0, {ROTATE, ENDMASK, REG_22, REG_DEST} }, - {"sri.es", OP_REG(0x31A) | i(1) | n(1), MASK_REG | i(1) | n(1), 0, {REG_0, ENDMASK, REG_22, REG_DEST} }, - {"sri.es", OP_SI(0xD) | i(1) | n(1), MASK_SI | i(1) | n(1), 0, {ROTATE, ENDMASK, REG_22, REG_DEST} }, - {"sri.ez", OP_REG(0x316) | i(1) | n(1), MASK_REG | i(1) | n(1), 0, {REG_0, ENDMASK, REG_22, REG_DEST} }, - {"sri.ez", OP_SI(0xB) | i(1) | n(1), MASK_SI | i(1) | n(1), 0, {ROTATE, ENDMASK, REG_22, REG_DEST} }, - {"sri.im", OP_REG(0x31E) | i(1) | n(1), MASK_REG | i(1) | n(1), 0, {REG_0, ENDMASK, REG_22, REG_DEST} }, - {"sri.im", OP_SI(0xF) | i(1) | n(1), MASK_SI | i(1) | n(1), 0, {ROTATE, ENDMASK, REG_22, REG_DEST} }, - {"sri.iz", OP_REG(0x31C) | i(1) | n(1), MASK_REG | i(1) | n(1), 0, {REG_0, ENDMASK, REG_22, REG_DEST} }, - {"sri.iz", OP_SI(0xE) | i(1) | n(1), MASK_SI | i(1) | n(1), 0, {ROTATE, ENDMASK, REG_22, REG_DEST} }, - - /* Store Data into Memory */ - - {"st", OP_SI(0x32), (MASK_SI & ~M_SI(1)), 0, {OFF_SS_BR, REG_BASE_M_SI, REG_DEST} }, - {"st", OP_LI(0x365) | D(0), (MASK_LI & ~M_REG(1)) | D(1), 0, {OFF_SL_BR_SCALED, REG_BASE_M_LI, REG_DEST} }, - {"st", OP_REG(0x364) | D(0), (MASK_REG & ~M_REG(1)) | D(1), 0, {REG_SCALED, REG_BASE_M_LI, REG_DEST} }, - {"st.b", OP_SI(0x30), (MASK_SI & ~M_SI(1)), 0, {OFF_SS_BR, REG_BASE_M_SI, REG_DEST} }, - {"st.b", OP_LI(0x361) | D(0), (MASK_LI & ~M_REG(1)) | D(1), 0, {OFF_SL_BR_SCALED, REG_BASE_M_LI, REG_DEST} }, - {"st.b", OP_REG(0x360) | D(0), (MASK_REG & ~M_REG(1)) | D(1), 0, {REG_SCALED, REG_BASE_M_LI, REG_DEST} }, - {"st.d", OP_SI(0x33), (MASK_SI & ~M_SI(1)), 0, {OFF_SS_BR, REG_BASE_M_SI, REG_DEST_E} }, - {"st.d", OP_LI(0x367) | D(0), (MASK_LI & ~M_REG(1)) | D(1), 0, {OFF_SL_BR_SCALED, REG_BASE_M_LI, REG_DEST_E} }, - {"st.d", OP_REG(0x366) | D(0), (MASK_REG & ~M_REG(1)) | D(1), 0, {REG_SCALED, REG_BASE_M_LI, REG_DEST_E} }, - {"st.h", OP_SI(0x31), (MASK_SI & ~M_SI(1)), 0, {OFF_SS_BR, REG_BASE_M_SI, REG_DEST} }, - {"st.h", OP_LI(0x363) | D(0), (MASK_LI & ~M_REG(1)) | D(1), 0, {OFF_SL_BR_SCALED, REG_BASE_M_LI, REG_DEST} }, - {"st.h", OP_REG(0x362) | D(0), (MASK_REG & ~M_REG(1)) | D(1), 0, {REG_SCALED, REG_BASE_M_LI, REG_DEST} }, - - /* Signed Integer Subtract */ - - {"sub", OP_SI(0x5A), MASK_SI, 0, {SSI, REG_22, REG_DEST} }, - {"sub", OP_LI(0x3B5), MASK_LI, 0, {LSI, REG_22, REG_DEST} }, - {"sub", OP_REG(0x3B4), MASK_REG, 0, {REG_0, REG_22, REG_DEST} }, - - /* Unsigned Integer Subtract */ - - {"subu", OP_SI(0x5B), MASK_SI, 0, {SSI, REG_22, REG_DEST} }, - {"subu", OP_LI(0x3B7), MASK_LI, 0, {LSI, REG_22, REG_DEST} }, - {"subu", OP_REG(0x3B6), MASK_REG, 0, {REG_0, REG_22, REG_DEST} }, - - /* Write Control Register - Is a special form of the "swcr" instruction so comes before it in the table. */ - - {"wrcr", OP_SI(0x5), MASK_SI | (0x1F << 27), 0, {CR_SI, REG_22} }, - {"wrcr", OP_LI(0x30B), MASK_LI | (0x1F << 27), 0, {CR_LI, REG_22} }, - {"wrcr", OP_REG(0x30A), MASK_REG | (0x1F << 27), 0, {REG_0, REG_22} }, - - /* Swap Control Register */ - - {"swcr", OP_SI(0x5), MASK_SI, 0, {CR_SI, REG_22, REG_DEST} }, - {"swcr", OP_LI(0x30B), MASK_LI, 0, {CR_LI, REG_22, REG_DEST} }, - {"swcr", OP_REG(0x30A), MASK_REG, 0, {REG_0, REG_22, REG_DEST} }, - - /* Trap */ - - {"trap", OP_SI(0x1) | E(0), MASK_SI | E(1), 0, {SUI} }, - {"trap", OP_LI(0x303) | E(0), MASK_LI | E(1), 0, {LUI} }, - {"trap", OP_REG(0x302) | E(0), MASK_REG | E(1), 0, {REG_0} }, - - /* Vector Floating-Point Add */ - - {"vadd.dd", OP_REG(0x3C0) | P2(1) | P1(1), MASK_REG | V_a1(1) | P2(1) | P1(1), TIC80_VECTOR, {REG_0_E, REG_22_E, REG_22_E} }, - {"vadd.sd", OP_LI(0x3C1) | P2(1) | P1(0), MASK_LI | V_a1(1) | P2(1) | P1(1), TIC80_VECTOR, {SPFI, REG_22_E, REG_22_E} }, - {"vadd.sd", OP_REG(0x3C0) | P2(1) | P1(0), MASK_REG | V_a1(1) | P2(1) | P1(1), TIC80_VECTOR, {REG_0, REG_22_E, REG_22_E} }, - {"vadd.ss", OP_LI(0x3C1) | P2(0) | P1(0), MASK_LI | V_a1(1) | P2(1) | P1(1), TIC80_VECTOR, {SPFI, REG_22, REG_22} }, - {"vadd.ss", OP_REG(0x3C0) | P2(0) | P1(0), MASK_REG | V_a1(1) | P2(1) | P1(1), TIC80_VECTOR, {REG_0, REG_22, REG_22} }, - - /* Vector Floating-Point Multiply and Add to Accumulator FIXME! This is not yet fully implemented. - From the documentation there appears to be no way to tell the difference between the opcodes for - instructions that have register destinations and instructions that have accumulator destinations. - Further investigation is necessary. Since this isn't critical to getting a TIC80 toolchain up - and running, it is defered until later. */ - - /* Vector Floating-Point Multiply - Note: If r0 is in the destination reg, then this is a "vector nop" instruction. */ - - {"vmpy.dd", OP_REG(0x3C4) | P2(1) | P1(1), MASK_REG | V_a1(1) | P2(1) | P1(1), TIC80_VECTOR | TIC80_NO_R0_DEST, {REG_0_E, REG_22_E, REG_22_E} }, - {"vmpy.sd", OP_LI(0x3C5) | P2(1) | P1(0), MASK_LI | V_a1(1) | P2(1) | P1(1), TIC80_VECTOR | TIC80_NO_R0_DEST, {SPFI, REG_22_E, REG_22_E} }, - {"vmpy.sd", OP_REG(0x3C4) | P2(1) | P1(0), MASK_REG | V_a1(1) | P2(1) | P1(1), TIC80_VECTOR | TIC80_NO_R0_DEST, {REG_0, REG_22_E, REG_22_E} }, - {"vmpy.ss", OP_LI(0x3C5) | P2(0) | P1(0), MASK_LI | V_a1(1) | P2(1) | P1(1), TIC80_VECTOR | TIC80_NO_R0_DEST, {SPFI, REG_22, REG_22} }, - {"vmpy.ss", OP_REG(0x3C4) | P2(0) | P1(0), MASK_REG | V_a1(1) | P2(1) | P1(1), TIC80_VECTOR | TIC80_NO_R0_DEST, {REG_0, REG_22, REG_22} }, - - /* Vector Floating-Point Multiply and Subtract from Accumulator - FIXME: See note above for vmac instruction */ - - /* Vector Floating-Point Subtract Accumulator From Source - FIXME: See note above for vmac instruction */ - - /* Vector Round With Floating-Point Input - FIXME: See note above for vmac instruction */ - - /* Vector Round with Integer Input */ - - {"vrnd.id", OP_LI (0x3CB) | P2(1) | P1(0), MASK_LI | V_a0(1) | V_Z(1) | P2(1) | P1(1), TIC80_VECTOR, {LSI, REG_22_E}}, - {"vrnd.id", OP_REG (0x3CA) | P2(1) | P1(0), MASK_REG | V_a0(1) | V_Z(1) | P2(1) | P1(1), TIC80_VECTOR, {REG_0, REG_22_E}}, - {"vrnd.is", OP_LI (0x3CB) | P2(0) | P1(0), MASK_LI | V_a0(1) | V_Z(1) | P2(1) | P1(1), TIC80_VECTOR, {LSI, REG_22}}, - {"vrnd.is", OP_REG (0x3CA) | P2(0) | P1(0), MASK_REG | V_a0(1) | V_Z(1) | P2(1) | P1(1), TIC80_VECTOR, {REG_0, REG_22}}, - {"vrnd.ud", OP_LI (0x3CB) | P2(1) | P1(1), MASK_LI | V_a0(1) | V_Z(1) | P2(1) | P1(1), TIC80_VECTOR, {LUI, REG_22_E}}, - {"vrnd.ud", OP_REG (0x3CA) | P2(1) | P1(1), MASK_REG | V_a0(1) | V_Z(1) | P2(1) | P1(1), TIC80_VECTOR, {REG_0, REG_22_E}}, - {"vrnd.us", OP_LI (0x3CB) | P2(0) | P1(1), MASK_LI | V_a0(1) | V_Z(1) | P2(1) | P1(1), TIC80_VECTOR, {LUI, REG_22}}, - {"vrnd.us", OP_REG (0x3CA) | P2(0) | P1(1), MASK_REG | V_a0(1) | V_Z(1) | P2(1) | P1(1), TIC80_VECTOR, {REG_0, REG_22}}, - - /* Vector Floating-Point Subtract */ - - {"vsub.dd", OP_REG(0x3C2) | P2(1) | P1(1), MASK_REG | V_a1(1) | P2(1) | P1(1), TIC80_VECTOR, {REG_0_E, REG_22_E, REG_22_E} }, - {"vsub.sd", OP_LI(0x3C3) | P2(1) | P1(0), MASK_LI | V_a1(1) | P2(1) | P1(1), TIC80_VECTOR, {SPFI, REG_22_E, REG_22_E} }, - {"vsub.sd", OP_REG(0x3C2) | P2(1) | P1(0), MASK_REG | V_a1(1) | P2(1) | P1(1), TIC80_VECTOR, {REG_0, REG_22_E, REG_22_E} }, - {"vsub.ss", OP_LI(0x3C3) | P2(0) | P1(0), MASK_LI | V_a1(1) | P2(1) | P1(1), TIC80_VECTOR, {SPFI, REG_22, REG_22} }, - {"vsub.ss", OP_REG(0x3C2) | P2(0) | P1(0), MASK_REG | V_a1(1) | P2(1) | P1(1), TIC80_VECTOR, {REG_0, REG_22, REG_22} }, - - /* Vector Load Data Into Register - Note that the vector load/store instructions come after the other - vector instructions so that the disassembler will always print the load/store instruction second for - vector instructions that have two instructions in the same opcode. */ - - {"vld0.d", OP_V(0x1E) | V_m(1) | V_S(1) | V_p(0), MASK_V | V_m(1) | V_S(1) | V_p(1), TIC80_VECTOR, {REG_DEST_E} }, - {"vld0.s", OP_V(0x1E) | V_m(1) | V_S(0) | V_p(0), MASK_V | V_m(1) | V_S(1) | V_p(1), TIC80_VECTOR, {REG_DEST} }, - {"vld1.d", OP_V(0x1E) | V_m(1) | V_S(1) | V_p(1), MASK_V | V_m(1) | V_S(1) | V_p(1), TIC80_VECTOR, {REG_DEST_E} }, - {"vld1.s", OP_V(0x1E) | V_m(1) | V_S(0) | V_p(1), MASK_V | V_m(1) | V_S(1) | V_p(1), TIC80_VECTOR, {REG_DEST} }, - - /* Vector Store Data Into Memory - Note that the vector load/store instructions come after the other - vector instructions so that the disassembler will always print the load/store instruction second for - vector instructions that have two instructions in the same opcode. */ - - {"vst.d", OP_V(0x1E) | V_m(0) | V_S(1) | V_p(1), MASK_V | V_m(1) | V_S(1) | V_p(1), TIC80_VECTOR, {REG_DEST_E} }, - {"vst.s", OP_V(0x1E) | V_m(0) | V_S(0) | V_p(1), MASK_V | V_m(1) | V_S(1) | V_p(1), TIC80_VECTOR, {REG_DEST} }, - - {"xnor", OP_SI(0x19), MASK_SI, 0, {SUBF, REG_22, REG_DEST} }, - {"xnor", OP_LI(0x333), MASK_LI, 0, {LUBF, REG_22, REG_DEST} }, - {"xnor", OP_REG(0x332), MASK_REG, 0, {REG_0, REG_22, REG_DEST} }, - - {"xor", OP_SI(0x16), MASK_SI, 0, {SUBF, REG_22, REG_DEST} }, - {"xor", OP_LI(0x32D), MASK_LI, 0, {LUBF, REG_22, REG_DEST} }, - {"xor", OP_REG(0x32C), MASK_REG, 0, {REG_0, REG_22, REG_DEST} }, - -}; - -const int tic80_num_opcodes = sizeof (tic80_opcodes) / sizeof (tic80_opcodes[0]); diff -Nru gdb-9.1/opcodes/tilegx-dis.c gdb-10.2/opcodes/tilegx-dis.c --- gdb-9.1/opcodes/tilegx-dis.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/tilegx-dis.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* tilegx-dis.c. Disassembly routines for the TILE-Gx architecture. - Copyright (C) 2011-2019 Free Software Foundation, Inc. + Copyright (C) 2011-2020 Free Software Foundation, Inc. This file is part of the GNU opcodes library. diff -Nru gdb-9.1/opcodes/tilegx-opc.c gdb-10.2/opcodes/tilegx-opc.c --- gdb-9.1/opcodes/tilegx-opc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/tilegx-opc.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* TILE-Gx opcode information. - Copyright (C) 2011-2019 Free Software Foundation, Inc. + Copyright (C) 2011-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -8096,21 +8096,18 @@ { const struct tilegx_operand *op = &tilegx_operands[opc->operands[pipe][i]]; - int raw_opval = op->extract (bits); - long long opval; + unsigned int opval = op->extract (bits); if (op->is_signed) { /* Sign-extend the operand. */ unsigned int sign = 1u << (op->num_bits - 1); - raw_opval = ((raw_opval & (sign + sign - 1)) ^ sign) - sign; + opval = ((opval & (sign + sign - 1)) ^ sign) - sign; } /* Adjust PC-relative scaled branch offsets. */ if (op->type == TILEGX_OP_TYPE_ADDRESS) - opval = (raw_opval * TILEGX_BUNDLE_SIZE_IN_BYTES) + pc; - else - opval = raw_opval; + opval = opval * TILEGX_BUNDLE_SIZE_IN_BYTES + pc; /* Record the final value. */ d->operands[i] = op; diff -Nru gdb-9.1/opcodes/tilepro-dis.c gdb-10.2/opcodes/tilepro-dis.c --- gdb-9.1/opcodes/tilepro-dis.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/tilepro-dis.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* tilepro-dis.c. Disassembly routines for the TILEPro architecture. - Copyright (C) 2011-2019 Free Software Foundation, Inc. + Copyright (C) 2011-2020 Free Software Foundation, Inc. This file is part of the GNU opcodes library. diff -Nru gdb-9.1/opcodes/tilepro-opc.c gdb-10.2/opcodes/tilepro-opc.c --- gdb-9.1/opcodes/tilepro-opc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/tilepro-opc.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* TILEPro opcode information. - Copyright (C) 2011-2019 Free Software Foundation, Inc. + Copyright (C) 2011-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -10215,7 +10215,7 @@ { const struct tilepro_operand *op = &tilepro_operands[opc->operands[pipe][i]]; - int opval = op->extract (bits); + unsigned int opval = op->extract (bits); if (op->is_signed) { @@ -10226,10 +10226,7 @@ /* Adjust PC-relative scaled branch offsets. */ if (op->type == TILEPRO_OP_TYPE_ADDRESS) - { - opval *= TILEPRO_BUNDLE_SIZE_IN_BYTES; - opval += (int)pc; - } + opval = opval * TILEPRO_BUNDLE_SIZE_IN_BYTES + pc; /* Record the final value. */ d->operands[i] = op; diff -Nru gdb-9.1/opcodes/v850-dis.c gdb-10.2/opcodes/v850-dis.c --- gdb-9.1/opcodes/v850-dis.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/v850-dis.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Disassemble V850 instructions. - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of the GNU opcodes library. @@ -499,7 +499,7 @@ 0, 0, 0, 0, 0, 31, 29, 28, 23, 22, 21, 20, 27, 26, 25, 24 }; int *regs; int i; - unsigned long int mask = 0; + unsigned int mask = 0; int pc = 0; switch (operand->shift) @@ -514,12 +514,12 @@ for (i = 0; i < 32; i++) { - if (value & (1 << i)) + if (value & (1u << i)) { switch (regs[ i ]) { default: - mask |= (1 << regs[ i ]); + mask |= (1u << regs[ i ]); break; case 0: /* xgettext:c-format */ @@ -543,10 +543,10 @@ int shown_one = 0; for (bit = 0; bit < 32; bit++) - if (mask & (1 << bit)) + if (mask & (1u << bit)) { - unsigned long int first = bit; - unsigned long int last; + unsigned int first = bit; + unsigned int last; if (shown_one) info->fprintf_func (info->stream, ", "); @@ -556,7 +556,7 @@ info->fprintf_func (info->stream, "%s", get_v850_reg_name (first)); for (bit++; bit < 32; bit++) - if ((mask & (1 << bit)) == 0) + if ((mask & (1u << bit)) == 0) break; last = bit; diff -Nru gdb-9.1/opcodes/v850-opc.c gdb-10.2/opcodes/v850-opc.c --- gdb-9.1/opcodes/v850-opc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/v850-opc.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Assemble V850 instructions. - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of the GNU opcodes library. @@ -75,7 +75,7 @@ } static unsigned long -insert_i5div1 (unsigned long insn, long value, const char ** errmsg) +insert_i5div1 (unsigned long insn, unsigned long value, const char ** errmsg) { if (value > 30 || value < 2) { @@ -104,7 +104,7 @@ } static unsigned long -insert_i5div2 (unsigned long insn, long value, const char ** errmsg) +insert_i5div2 (unsigned long insn, unsigned long value, const char ** errmsg) { if (value > 30 || value < 4) { @@ -133,7 +133,7 @@ } static unsigned long -insert_i5div3 (unsigned long insn, long value, const char ** errmsg) +insert_i5div3 (unsigned long insn, unsigned long value, const char ** errmsg) { if (value > 32 || value < 2) { @@ -162,9 +162,9 @@ } static unsigned long -insert_d5_4 (unsigned long insn, long value, const char ** errmsg) +insert_d5_4 (unsigned long insn, unsigned long value, const char ** errmsg) { - if (value > 0x1f || value < 0) + if (value > 0x1f) { if (value & 1) * errmsg = _(not_valid); @@ -192,9 +192,9 @@ } static unsigned long -insert_d8_6 (unsigned long insn, long value, const char ** errmsg) +insert_d8_6 (unsigned long insn, unsigned long value, const char ** errmsg) { - if (value > 0xff || value < 0) + if (value > 0xff) { if ((value % 4) != 0) * errmsg = _(not_valid); @@ -222,9 +222,9 @@ } static unsigned long -insert_d8_7 (unsigned long insn, long value, const char ** errmsg) +insert_d8_7 (unsigned long insn, unsigned long value, const char ** errmsg) { - if (value > 0xff || value < 0) + if (value > 0xff) { if ((value % 2) != 0) * errmsg = _(not_valid); @@ -252,9 +252,9 @@ } static unsigned long -insert_v8 (unsigned long insn, long value, const char ** errmsg) +insert_v8 (unsigned long insn, unsigned long value, const char ** errmsg) { - if (value > 0xff || value < 0) + if (value > 0xff) * errmsg = _(immediate_out_of_range); return insn | (value & 0x1f) | ((value & 0xe0) << (27-5)); @@ -271,9 +271,9 @@ } static unsigned long -insert_d9 (unsigned long insn, long value, const char ** errmsg) +insert_d9 (unsigned long insn, unsigned long value, const char ** errmsg) { - if (value > 0xff || value < -0x100) + if (value + 0x100 > 0x1ff) { if ((value % 2) != 0) * errmsg = branch_out_of_range_and_odd_offset; @@ -289,7 +289,7 @@ static unsigned long extract_d9 (unsigned long insn, int * invalid) { - signed long ret = ((insn >> 7) & 0x1f0) | ((insn >> 3) & 0x0e); + unsigned long ret = ((insn >> 7) & 0x1f0) | ((insn >> 3) & 0x0e); ret = (ret ^ 0x100) - 0x100; @@ -299,11 +299,11 @@ } static unsigned long -insert_u16_loop (unsigned long insn, long value, const char ** errmsg) +insert_u16_loop (unsigned long insn, unsigned long value, const char ** errmsg) { /* Loop displacement is encoded as a positive value, even though the instruction branches backwards. */ - if (value < 0 || value > 0xffff) + if (value > 0xffff) { if ((value % 2) != 0) * errmsg = branch_out_of_range_and_odd_offset; @@ -327,9 +327,9 @@ } static unsigned long -insert_d16_15 (unsigned long insn, long value, const char ** errmsg) +insert_d16_15 (unsigned long insn, unsigned long value, const char ** errmsg) { - if (value > 0x7fff || value < -0x8000) + if (value + 0x8000 > 0xffff) { if ((value % 2) != 0) * errmsg = _(not_valid); @@ -345,7 +345,7 @@ static unsigned long extract_d16_15 (unsigned long insn, int * invalid) { - signed long ret = (insn >> 16) & 0xfffe; + unsigned long ret = (insn >> 16) & 0xfffe; ret = (ret ^ 0x8000) - 0x8000; @@ -355,9 +355,9 @@ } static unsigned long -insert_d16_16 (unsigned long insn, signed long value, const char ** errmsg) +insert_d16_16 (unsigned long insn, unsigned long value, const char ** errmsg) { - if (value > 0x7fff || value < -0x8000) + if (value + 0x8000 > 0xffff) * errmsg = _(out_of_range); return insn | ((value & 0xfffe) << 16) | ((value & 1) << 5); @@ -366,7 +366,7 @@ static unsigned long extract_d16_16 (unsigned long insn, int * invalid) { - signed long ret = ((insn >> 16) & 0xfffe) | ((insn >> 5) & 1); + unsigned long ret = ((insn >> 16) & 0xfffe) | ((insn >> 5) & 1); ret = (ret ^ 0x8000) - 0x8000; @@ -376,9 +376,9 @@ } static unsigned long -insert_d17_16 (unsigned long insn, long value, const char ** errmsg) +insert_d17_16 (unsigned long insn, unsigned long value, const char ** errmsg) { - if (value > 0xffff || value < -0x10000) + if (value + 0x10000 > 0x1ffff) * errmsg = _(out_of_range); return insn | ((value & 0xfffe) << 16) | ((value & 0x10000) >> (16 - 4)); @@ -387,19 +387,19 @@ static unsigned long extract_d17_16 (unsigned long insn, int * invalid) { - signed long ret = ((insn >> 16) & 0xfffe) | ((insn << (16 - 4)) & 0x10000); + unsigned long ret = ((insn >> 16) & 0xfffe) | ((insn << (16 - 4)) & 0x10000); ret = (ret ^ 0x10000) - 0x10000; if (invalid != 0) *invalid = 0; - return (unsigned long)ret; + return ret; } static unsigned long -insert_d22 (unsigned long insn, long value, const char ** errmsg) +insert_d22 (unsigned long insn, unsigned long value, const char ** errmsg) { - if (value > 0x1fffff || value < -0x200000) + if (value + 0x200000 > 0x3fffff) { if ((value % 2) != 0) * errmsg = branch_out_of_range_and_odd_offset; @@ -415,28 +415,28 @@ static unsigned long extract_d22 (unsigned long insn, int * invalid) { - signed long ret = ((insn >> 16) & 0xfffe) | ((insn << 16) & 0x3f0000); + unsigned long ret = ((insn >> 16) & 0xfffe) | ((insn << 16) & 0x3f0000); ret = (ret ^ 0x200000) - 0x200000; if (invalid != 0) *invalid = 0; - return (unsigned long) ret; + return ret; } static unsigned long -insert_d23 (unsigned long insn, long value, const char ** errmsg) +insert_d23 (unsigned long insn, unsigned long value, const char ** errmsg) { - if (value > 0x3fffff || value < -0x400000) + if (value + 0x400000 > 0x7fffff) * errmsg = out_of_range; return insn | ((value & 0x7f) << 4) | ((value & 0x7fff80) << (16-7)); } static unsigned long -insert_d23_align1 (unsigned long insn, long value, const char ** errmsg) +insert_d23_align1 (unsigned long insn, unsigned long value, const char ** errmsg) { - if (value > 0x3fffff || value < -0x400000) + if (value + 0x400000 > 0x7fffff) { if (value & 0x1) * errmsg = _(not_valid); @@ -452,19 +452,19 @@ static unsigned long extract_d23 (unsigned long insn, int * invalid) { - signed long ret = ((insn >> 4) & 0x7f) | ((insn >> (16-7)) & 0x7fff80); + unsigned long ret = ((insn >> 4) & 0x7f) | ((insn >> (16-7)) & 0x7fff80); ret = (ret ^ 0x400000) - 0x400000; if (invalid != 0) *invalid = 0; - return (unsigned long) ret; + return ret; } static unsigned long -insert_i9 (unsigned long insn, signed long value, const char ** errmsg) +insert_i9 (unsigned long insn, unsigned long value, const char ** errmsg) { - if (value > 0xff || value < -0x100) + if (value + 0x100 > 0x1ff) * errmsg = _(immediate_out_of_range); return insn | ((value & 0x1e0) << 13) | (value & 0x1f); @@ -473,7 +473,7 @@ static unsigned long extract_i9 (unsigned long insn, int * invalid) { - signed long ret = ((insn >> 13) & 0x1e0) | (insn & 0x1f); + unsigned long ret = ((insn >> 13) & 0x1e0) | (insn & 0x1f); ret = (ret ^ 0x100) - 0x100; @@ -483,10 +483,8 @@ } static unsigned long -insert_u9 (unsigned long insn, long v, const char ** errmsg) +insert_u9 (unsigned long insn, unsigned long value, const char ** errmsg) { - unsigned long value = (unsigned long) v; - if (value > 0x1ff) * errmsg = _(immediate_out_of_range); @@ -504,10 +502,8 @@ } static unsigned long -insert_spe (unsigned long insn, long v, const char ** errmsg) +insert_spe (unsigned long insn, unsigned long value, const char ** errmsg) { - unsigned long value = (unsigned long) v; - if (value != 3) * errmsg = _("invalid register for stack adjustment"); @@ -524,10 +520,8 @@ } static unsigned long -insert_r4 (unsigned long insn, long v, const char ** errmsg) +insert_r4 (unsigned long insn, unsigned long value, const char ** errmsg) { - unsigned long value = (unsigned long) v; - if (value >= 32) * errmsg = _("invalid register name"); @@ -552,12 +546,12 @@ static unsigned long G_pos; static unsigned long -insert_POS (unsigned long insn, long pos, const char ** errmsg) +insert_POS (unsigned long insn, unsigned long pos, const char ** errmsg) { - if (pos > 0x1f || pos < 0) + if (pos > 0x1f) * errmsg = _(pos_out_of_range); - G_pos = (unsigned long) pos; + G_pos = pos; return insn; /* Not an oparaton until WIDTH. */ } @@ -598,17 +592,17 @@ } static unsigned long -insert_WIDTH (unsigned long insn, long width, const char ** errmsg) +insert_WIDTH (unsigned long insn, unsigned long width, const char ** errmsg) { unsigned long msb, lsb, opc, ret; unsigned long msb_expand, lsb_expand; - msb = (unsigned long)width + G_pos - 1; + msb = width + G_pos - 1; lsb = G_pos; opc = 0; G_pos = 0; - if (width > 0x20 || width < 0) + if (width > 0x20) * errmsg = _(width_out_of_range); if ((msb >= 16) && (lsb >= 16)) @@ -691,16 +685,12 @@ } static unsigned long -insert_SELID (unsigned long insn, long selid, const char ** errmsg) +insert_SELID (unsigned long insn, unsigned long selid, const char ** errmsg) { - unsigned long ret; - - if (selid > 0x1f || selid < 0) + if (selid > 0x1f) * errmsg = _(selid_out_of_range); - ret = (insn | ((selid & 0x1f) << 27)); - - return ret; + return insn | ((selid & 0x1fUL) << 27); } static unsigned long @@ -720,12 +710,12 @@ } static unsigned long -insert_VECTOR8 (unsigned long insn, long vector8, const char ** errmsg) +insert_VECTOR8 (unsigned long insn, unsigned long vector8, const char ** errmsg) { unsigned long ret; - unsigned long VVV,vvvvv; + unsigned long VVV, vvvvv; - if (vector8 > 0xff || vector8 < 0) + if (vector8 > 0xff) * errmsg = _(vector8_out_of_range); VVV = (vector8 & 0xe0) >> 5; @@ -755,12 +745,12 @@ } static unsigned long -insert_VECTOR5 (unsigned long insn, long vector5, const char ** errmsg) +insert_VECTOR5 (unsigned long insn, unsigned long vector5, const char ** errmsg) { unsigned long ret; unsigned long vvvvv; - if (vector5 > 0x1f || vector5 < 0) + if (vector5 > 0x1f) * errmsg = _(vector5_out_of_range); vvvvv = (vector5 & 0x1f); @@ -784,10 +774,10 @@ } static unsigned long -insert_CACHEOP (unsigned long insn, long cacheop, const char ** errmsg ATTRIBUTE_UNUSED) +insert_CACHEOP (unsigned long insn, unsigned long cacheop, const char ** errmsg ATTRIBUTE_UNUSED) { unsigned long ret; - unsigned long pp,PPPPP; + unsigned long pp, PPPPP; pp = (cacheop & 0x60) >> 5; PPPPP = (cacheop & 0x1f); @@ -801,7 +791,7 @@ extract_CACHEOP (unsigned long insn, int * invalid) { unsigned long ret; - unsigned long pp,PPPPP; + unsigned long pp, PPPPP; unsigned long insn2; insn2 = insn >> 16; @@ -818,7 +808,7 @@ } static unsigned long -insert_PREFOP (unsigned long insn, long prefop, const char ** errmsg ATTRIBUTE_UNUSED) +insert_PREFOP (unsigned long insn, unsigned long prefop, const char ** errmsg ATTRIBUTE_UNUSED) { unsigned long ret; unsigned long PPPPP; @@ -850,15 +840,15 @@ } static unsigned long -insert_IMM10U (unsigned long insn, long value, const char ** errmsg) +insert_IMM10U (unsigned long insn, unsigned long value, const char ** errmsg) { unsigned long imm10, ret; unsigned long iiiii,IIIII; - if (value > 0x3ff || value < 0) + if (value > 0x3ff) * errmsg = _(imm10_out_of_range); - imm10 = ((unsigned long) value) & 0x3ff; + imm10 = value & 0x3ff; IIIII = (imm10 >> 5) & 0x1f; iiiii = imm10 & 0x1f; @@ -887,15 +877,15 @@ } static unsigned long -insert_SRSEL1 (unsigned long insn, long value, const char ** errmsg) +insert_SRSEL1 (unsigned long insn, unsigned long value, const char ** errmsg) { unsigned long imm10, ret; unsigned long sr,selid; - if (value > 0x3ff || value < 0) + if (value > 0x3ff) * errmsg = _(sr_selid_out_of_range); - imm10 = (unsigned long) value; + imm10 = value; selid = (imm10 & 0x3e0) >> 5; sr = imm10 & 0x1f; @@ -925,15 +915,15 @@ } static unsigned long -insert_SRSEL2 (unsigned long insn, long value, const char ** errmsg) +insert_SRSEL2 (unsigned long insn, unsigned long value, const char ** errmsg) { unsigned long imm10, ret; unsigned long sr, selid; - if (value > 0x3ff || value < 0) + if (value > 0x3ff) * errmsg = _(sr_selid_out_of_range); - imm10 = (unsigned long) value; + imm10 = value; selid = (imm10 & 0x3e0) >> 5; sr = imm10 & 0x1f; diff -Nru gdb-9.1/opcodes/vax-dis.c gdb-10.2/opcodes/vax-dis.c --- gdb-9.1/opcodes/vax-dis.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/vax-dis.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Print VAX instructions. - Copyright (C) 1995-2019 Free Software Foundation, Inc. + Copyright (C) 1995-2020 Free Software Foundation, Inc. Contributed by Pauline Middelink <middelin@polyware.iaf.nl> This file is part of the GNU opcodes library. @@ -129,8 +129,8 @@ if (entry_addr_occupied_slots >= entry_addr_total_slots) { /* A guesstimate of the number of entries we will have to create. */ - entry_addr_total_slots += - strlen (options) / (strlen (entry_switch) + 5); + entry_addr_total_slots + += 1 + strlen (options) / (strlen (entry_switch) + 5); entry_addr = realloc (entry_addr, sizeof (bfd_vma) * entry_addr_total_slots); @@ -240,8 +240,18 @@ (*info->fprintf_func) (info->stream, "$0x%x", mode); break; case 0x40: /* Index: base-addr[Rn] */ - p += print_insn_mode (d, size, p0 + 1, addr + 1, info); - (*info->fprintf_func) (info->stream, "[%s]", reg_names[reg]); + { + unsigned char *q = p0 + 1; + unsigned char nextmode = NEXTBYTE (q); + if (nextmode < 0x60 || nextmode == 0x8f) + /* Literal, index, register, or immediate is invalid. In + particular don't recurse into another index mode which + might overflow the_buffer. */ + (*info->fprintf_func) (info->stream, "[invalid base]"); + else + p += print_insn_mode (d, size, p0 + 1, addr + 1, info); + (*info->fprintf_func) (info->stream, "[%s]", reg_names[reg]); + } break; case 0x50: /* Register: Rn */ (*info->fprintf_func) (info->stream, "%s", reg_names[reg]); @@ -440,7 +450,8 @@ int offset; FETCH_DATA (info, buffer + 4); - offset = buffer[3] << 24 | buffer[2] << 16 | buffer[1] << 8 | buffer[0]; + offset = ((unsigned) buffer[3] << 24 | buffer[2] << 16 + | buffer[1] << 8 | buffer[0]); (*info->fprintf_func) (info->stream, ".long 0x%08x", offset); return 4; diff -Nru gdb-9.1/opcodes/visium-dis.c gdb-10.2/opcodes/visium-dis.c --- gdb-9.1/opcodes/visium-dis.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/visium-dis.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Single instruction disassembler for the Visium. - Copyright (C) 2002-2019 Free Software Foundation, Inc. + Copyright (C) 2002-2020 Free Software Foundation, Inc. This file is part of the GNU opcodes library. @@ -166,7 +166,7 @@ } return 0; -illegal_opcode: + illegal_opcode: return -1; } @@ -421,7 +421,7 @@ return 0; -illegal_opcode: + illegal_opcode: return -1; } @@ -518,7 +518,7 @@ return 0; -illegal_opcode: + illegal_opcode: return -1; } @@ -747,7 +747,7 @@ return 0; -illegal_opcode: + illegal_opcode: return -1; } @@ -789,7 +789,7 @@ /* Get 32-bit instruction word. */ FETCH_DATA (info, buffer + 4); - ins = buffer[0] << 24; + ins = (unsigned) buffer[0] << 24; ins |= buffer[1] << 16; ins |= buffer[2] << 8; ins |= buffer[3]; diff -Nru gdb-9.1/opcodes/visium-opc.c gdb-10.2/opcodes/visium-opc.c --- gdb-9.1/opcodes/visium-opc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/visium-opc.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Opcode table for the Visium. - Copyright (C) 2002-2019 Free Software Foundation, Inc. + Copyright (C) 2002-2020 Free Software Foundation, Inc. This file is part of the GNU opcodes library. diff -Nru gdb-9.1/opcodes/wasm32-dis.c gdb-10.2/opcodes/wasm32-dis.c --- gdb-9.1/opcodes/wasm32-dis.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/wasm32-dis.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Opcode printing code for the WebAssembly target - Copyright (C) 2017-2019 Free Software Foundation, Inc. + Copyright (C) 2017-2020 Free Software Foundation, Inc. This file is part of libopcodes. @@ -192,29 +192,36 @@ unsigned int num_read = 0; unsigned int shift = 0; unsigned char byte = 0; - bfd_boolean success = FALSE; + int status = 1; while (info->read_memory_func (pc + num_read, &byte, 1, info) == 0) { num_read++; - result |= ((bfd_vma) (byte & 0x7f)) << shift; + if (shift < sizeof (result) * 8) + { + result |= ((uint64_t) (byte & 0x7f)) << shift; + if ((result >> shift) != (byte & 0x7f)) + /* Overflow. */ + status |= 2; + shift += 7; + } + else if ((byte & 0x7f) != 0) + status |= 2; - shift += 7; if ((byte & 0x80) == 0) - { - success = TRUE; - break; - } + { + status &= ~1; + if (sign && (shift < 8 * sizeof (result)) && (byte & 0x40)) + result |= -((uint64_t) 1 << shift); + break; + } } if (length_return != NULL) *length_return = num_read; if (error_return != NULL) - *error_return = ! success; - - if (sign && (shift < 8 * sizeof (result)) && (byte & 0x40)) - result |= -((uint64_t) 1 << shift); + *error_return = status != 0; return result; } @@ -264,33 +271,10 @@ void *stream = info->stream; fprintf_ftype prin = info->fprintf_func; struct wasm32_private_data *private_data = info->private_data; - long long constant = 0; - double fconstant = 0.0; - long flags = 0; - long offset = 0; - long depth = 0; - long function_index = 0; - long target_count = 0; - long block_type = 0; - int len = 1; - int ret = 0; - unsigned int bytes_read = 0; - int i; - const char *locals[] = - { - "$dpc", "$sp1", "$r0", "$r1", "$rpc", "$pc0", - "$rp", "$fp", "$sp", - "$r2", "$r3", "$r4", "$r5", "$r6", "$r7", - "$i0", "$i1", "$i2", "$i3", "$i4", "$i5", "$i6", "$i7", - "$f0", "$f1", "$f2", "$f3", "$f4", "$f5", "$f6", "$f7", - }; - int nlocals = ARRAY_SIZE (locals); - const char *globals[] = - { - "$got", "$plt", "$gpo" - }; - int nglobals = ARRAY_SIZE (globals); - bfd_boolean error = FALSE; + uint64_t val; + int len; + unsigned int bytes_read; + bfd_boolean error; if (info->read_memory_func (pc, buffer, 1, info)) return -1; @@ -306,189 +290,239 @@ prin (stream, "\t.byte 0x%02x\n", buffer[0]); return 1; } - else + + len = 1; + + prin (stream, "\t"); + prin (stream, "%s", op->name); + + if (op->clas == wasm_typed) { - len = 1; + val = wasm_read_leb128 (pc + len, info, &error, &bytes_read, FALSE); + if (error) + return -1; + len += bytes_read; + switch (val) + { + case BLOCK_TYPE_NONE: + prin (stream, "[]"); + break; + case BLOCK_TYPE_I32: + prin (stream, "[i]"); + break; + case BLOCK_TYPE_I64: + prin (stream, "[l]"); + break; + case BLOCK_TYPE_F32: + prin (stream, "[f]"); + break; + case BLOCK_TYPE_F64: + prin (stream, "[d]"); + break; + default: + return -1; + } + } + + switch (op->clas) + { + case wasm_special: + case wasm_eqz: + case wasm_binary: + case wasm_unary: + case wasm_conv: + case wasm_relational: + case wasm_drop: + case wasm_signature: + case wasm_call_import: + case wasm_typed: + case wasm_select: + break; + + case wasm_break_table: + { + uint32_t target_count, i; + val = wasm_read_leb128 (pc + len, info, &error, &bytes_read, + FALSE); + target_count = val; + if (error || target_count != val || target_count == (uint32_t) -1) + return -1; + len += bytes_read; + prin (stream, " %u", target_count); + for (i = 0; i < target_count + 1; i++) + { + uint32_t target; + val = wasm_read_leb128 (pc + len, info, &error, &bytes_read, + FALSE); + target = val; + if (error || target != val) + return -1; + len += bytes_read; + prin (stream, " %u", target); + } + } + break; + + case wasm_break: + case wasm_break_if: + { + uint32_t depth; + val = wasm_read_leb128 (pc + len, info, &error, &bytes_read, + FALSE); + depth = val; + if (error || depth != val) + return -1; + len += bytes_read; + prin (stream, " %u", depth); + } + break; + + case wasm_return: + break; + + case wasm_constant_i32: + case wasm_constant_i64: + val = wasm_read_leb128 (pc + len, info, &error, &bytes_read, TRUE); + if (error) + return -1; + len += bytes_read; + prin (stream, " %" PRId64, val); + break; + + case wasm_constant_f32: + { + double fconstant; + int ret; + /* This appears to be the best we can do, even though we're + using host doubles for WebAssembly floats. */ + ret = read_f32 (&fconstant, pc + len, info); + if (ret < 0) + return -1; + len += ret; + prin (stream, " %.9g", fconstant); + } + break; + + case wasm_constant_f64: + { + double fconstant; + int ret; + ret = read_f64 (&fconstant, pc + len, info); + if (ret < 0) + return -1; + len += ret; + prin (stream, " %.17g", fconstant); + } + break; - prin (stream, "\t"); - prin (stream, "%s", op->name); + case wasm_call: + { + uint32_t function_index; + val = wasm_read_leb128 (pc + len, info, &error, &bytes_read, + FALSE); + function_index = val; + if (error || function_index != val) + return -1; + len += bytes_read; + prin (stream, " "); + private_data->section_prefix = ".space.function_index"; + (*info->print_address_func) ((bfd_vma) function_index, info); + private_data->section_prefix = NULL; + } + break; - if (op->clas == wasm_typed) - { - block_type = wasm_read_leb128 - (pc + len, info, &error, &bytes_read, FALSE); - if (error) - return -1; - len += bytes_read; - switch (block_type) - { - case BLOCK_TYPE_NONE: - prin (stream, "[]"); - break; - case BLOCK_TYPE_I32: - prin (stream, "[i]"); - break; - case BLOCK_TYPE_I64: - prin (stream, "[l]"); - break; - case BLOCK_TYPE_F32: - prin (stream, "[f]"); - break; - case BLOCK_TYPE_F64: - prin (stream, "[d]"); - break; - } - } - - switch (op->clas) - { - case wasm_special: - case wasm_eqz: - case wasm_binary: - case wasm_unary: - case wasm_conv: - case wasm_relational: - case wasm_drop: - case wasm_signature: - case wasm_call_import: - case wasm_typed: - case wasm_select: - break; - - case wasm_break_table: - target_count = wasm_read_leb128 - (pc + len, info, &error, &bytes_read, FALSE); - if (error) - return -1; - len += bytes_read; - prin (stream, " %ld", target_count); - for (i = 0; i < target_count + 1; i++) - { - long target = 0; - target = wasm_read_leb128 - (pc + len, info, &error, &bytes_read, FALSE); - if (error) - return -1; - len += bytes_read; - prin (stream, " %ld", target); - } - break; - - case wasm_break: - case wasm_break_if: - depth = wasm_read_leb128 - (pc + len, info, &error, &bytes_read, FALSE); - if (error) - return -1; - len += bytes_read; - prin (stream, " %ld", depth); - break; - - case wasm_return: - break; - - case wasm_constant_i32: - case wasm_constant_i64: - constant = wasm_read_leb128 - (pc + len, info, &error, &bytes_read, TRUE); - if (error) - return -1; - len += bytes_read; - prin (stream, " %lld", constant); - break; - - case wasm_constant_f32: - /* This appears to be the best we can do, even though we're - using host doubles for WebAssembly floats. */ - ret = read_f32 (&fconstant, pc + len, info); - if (ret < 0) - return -1; - len += ret; - prin (stream, " %.9g", fconstant); - break; - - case wasm_constant_f64: - ret = read_f64 (&fconstant, pc + len, info); - if (ret < 0) - return -1; - len += ret; - prin (stream, " %.17g", fconstant); - break; - - case wasm_call: - function_index = wasm_read_leb128 - (pc + len, info, &error, &bytes_read, FALSE); - if (error) - return -1; - len += bytes_read; - prin (stream, " "); - private_data->section_prefix = ".space.function_index"; - (*info->print_address_func) ((bfd_vma) function_index, info); - private_data->section_prefix = NULL; - break; - - case wasm_call_indirect: - constant = wasm_read_leb128 - (pc + len, info, &error, &bytes_read, FALSE); - if (error) - return -1; - len += bytes_read; - prin (stream, " %lld", constant); - constant = wasm_read_leb128 - (pc + len, info, &error, &bytes_read, FALSE); - if (error) - return -1; - len += bytes_read; - prin (stream, " %lld", constant); - break; - - case wasm_get_local: - case wasm_set_local: - case wasm_tee_local: - constant = wasm_read_leb128 - (pc + len, info, &error, &bytes_read, FALSE); - if (error) - return -1; - len += bytes_read; - prin (stream, " %lld", constant); - if (strcmp (op->name + 4, "local") == 0) - { - if (private_data->print_registers - && constant >= 0 && constant < nlocals) - prin (stream, " <%s>", locals[constant]); - } - else - { - if (private_data->print_well_known_globals - && constant >= 0 && constant < nglobals) - prin (stream, " <%s>", globals[constant]); - } - break; - - case wasm_grow_memory: - case wasm_current_memory: - constant = wasm_read_leb128 - (pc + len, info, &error, &bytes_read, FALSE); - if (error) - return -1; - len += bytes_read; - prin (stream, " %lld", constant); - break; - - case wasm_load: - case wasm_store: - flags = wasm_read_leb128 - (pc + len, info, &error, &bytes_read, FALSE); - if (error) - return -1; - len += bytes_read; - offset = wasm_read_leb128 - (pc + len, info, &error, &bytes_read, FALSE); - if (error) - return -1; - len += bytes_read; - prin (stream, " a=%ld %ld", flags, offset); - } + case wasm_call_indirect: + { + uint32_t type_index, xtra_index; + val = wasm_read_leb128 (pc + len, info, &error, &bytes_read, + FALSE); + type_index = val; + if (error || type_index != val) + return -1; + len += bytes_read; + prin (stream, " %u", type_index); + val = wasm_read_leb128 (pc + len, info, &error, &bytes_read, + FALSE); + xtra_index = val; + if (error || xtra_index != val) + return -1; + len += bytes_read; + prin (stream, " %u", xtra_index); + } + break; + + case wasm_get_local: + case wasm_set_local: + case wasm_tee_local: + { + uint32_t local_index; + val = wasm_read_leb128 (pc + len, info, &error, &bytes_read, + FALSE); + local_index = val; + if (error || local_index != val) + return -1; + len += bytes_read; + prin (stream, " %u", local_index); + if (strcmp (op->name + 4, "local") == 0) + { + static const char *locals[] = + { + "$dpc", "$sp1", "$r0", "$r1", "$rpc", "$pc0", + "$rp", "$fp", "$sp", + "$r2", "$r3", "$r4", "$r5", "$r6", "$r7", + "$i0", "$i1", "$i2", "$i3", "$i4", "$i5", "$i6", "$i7", + "$f0", "$f1", "$f2", "$f3", "$f4", "$f5", "$f6", "$f7", + }; + if (private_data->print_registers + && local_index < ARRAY_SIZE (locals)) + prin (stream, " <%s>", locals[local_index]); + } + else + { + static const char *globals[] = + { + "$got", "$plt", "$gpo" + }; + if (private_data->print_well_known_globals + && local_index < ARRAY_SIZE (globals)) + prin (stream, " <%s>", globals[local_index]); + } + } + break; + + case wasm_grow_memory: + case wasm_current_memory: + { + uint32_t reserved_size; + val = wasm_read_leb128 (pc + len, info, &error, &bytes_read, + FALSE); + reserved_size = val; + if (error || reserved_size != val) + return -1; + len += bytes_read; + prin (stream, " %u", reserved_size); + } + break; + + case wasm_load: + case wasm_store: + { + uint32_t flags, offset; + val = wasm_read_leb128 (pc + len, info, &error, &bytes_read, + FALSE); + flags = val; + if (error || flags != val) + return -1; + len += bytes_read; + val = wasm_read_leb128 (pc + len, info, &error, &bytes_read, + FALSE); + offset = val; + if (error || offset != val) + return -1; + len += bytes_read; + prin (stream, " a=%u %u", flags, offset); + } + break; } return len; } diff -Nru gdb-9.1/opcodes/xc16x-asm.c gdb-10.2/opcodes/xc16x-asm.c --- gdb-9.1/opcodes/xc16x-asm.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/xc16x-asm.c 2021-04-25 04:06:26.000000000 +0000 @@ -5,7 +5,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. - the resultant file is machine generated, cgen-asm.in isn't - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of libopcodes. diff -Nru gdb-9.1/opcodes/xc16x-desc.c gdb-10.2/opcodes/xc16x-desc.c --- gdb-9.1/opcodes/xc16x-desc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/xc16x-desc.c 2021-04-25 04:06:26.000000000 +0000 @@ -3,7 +3,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright (C) 1996-2019 Free Software Foundation, Inc. +Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of the GNU Binutils and/or GDB, the GNU debugger. @@ -3379,6 +3379,7 @@ CGEN_CPU_OPEN_MACHS: bitmap of values in enum mach_attr CGEN_CPU_OPEN_BFDMACH: specify 1 mach using bfd name CGEN_CPU_OPEN_ENDIAN: specify endian choice + CGEN_CPU_OPEN_INSN_ENDIAN: specify instruction endian choice CGEN_CPU_OPEN_END: terminates arguments ??? Simultaneous multiple isas might not make sense, but it's not (yet) @@ -3392,6 +3393,7 @@ CGEN_BITSET *isas = 0; /* 0 = "unspecified" */ unsigned int machs = 0; /* 0 = "unspecified" */ enum cgen_endian endian = CGEN_ENDIAN_UNKNOWN; + enum cgen_endian insn_endian = CGEN_ENDIAN_UNKNOWN; va_list ap; if (! init_p) @@ -3426,6 +3428,9 @@ case CGEN_CPU_OPEN_ENDIAN : endian = va_arg (ap, enum cgen_endian); break; + case CGEN_CPU_OPEN_INSN_ENDIAN : + insn_endian = va_arg (ap, enum cgen_endian); + break; default : opcodes_error_handler (/* xgettext:c-format */ @@ -3455,11 +3460,8 @@ cd->isas = cgen_bitset_copy (isas); cd->machs = machs; cd->endian = endian; - /* FIXME: for the sparc case we can determine insn-endianness statically. - The worry here is where both data and insn endian can be independently - chosen, in which case this function will need another argument. - Actually, will want to allow for more arguments in the future anyway. */ - cd->insn_endian = endian; + cd->insn_endian + = (insn_endian == CGEN_ENDIAN_UNKNOWN ? endian : insn_endian); /* Table (re)builder. */ cd->rebuild_tables = xc16x_cgen_rebuild_tables; @@ -3509,18 +3511,10 @@ regfree (CGEN_INSN_RX (insns)); } - if (cd->macro_insn_table.init_entries) - free ((CGEN_INSN *) cd->macro_insn_table.init_entries); - - if (cd->insn_table.init_entries) - free ((CGEN_INSN *) cd->insn_table.init_entries); - - if (cd->hw_table.entries) - free ((CGEN_HW_ENTRY *) cd->hw_table.entries); - - if (cd->operand_table.entries) - free ((CGEN_HW_ENTRY *) cd->operand_table.entries); - + free ((CGEN_INSN *) cd->macro_insn_table.init_entries); + free ((CGEN_INSN *) cd->insn_table.init_entries); + free ((CGEN_HW_ENTRY *) cd->hw_table.entries); + free ((CGEN_HW_ENTRY *) cd->operand_table.entries); free (cd); } diff -Nru gdb-9.1/opcodes/xc16x-desc.h gdb-10.2/opcodes/xc16x-desc.h --- gdb-9.1/opcodes/xc16x-desc.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/xc16x-desc.h 2021-04-25 04:06:26.000000000 +0000 @@ -3,7 +3,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright (C) 1996-2019 Free Software Foundation, Inc. +Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of the GNU Binutils and/or GDB, the GNU debugger. diff -Nru gdb-9.1/opcodes/xc16x-dis.c gdb-10.2/opcodes/xc16x-dis.c --- gdb-9.1/opcodes/xc16x-dis.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/xc16x-dis.c 2021-04-25 04:06:26.000000000 +0000 @@ -5,7 +5,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. - the resultant file is machine generated, cgen-dis.in isn't - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of libopcodes. @@ -593,7 +593,7 @@ /* 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); + 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 @@ -724,6 +724,7 @@ CGEN_BITSET *isa; int mach; int endian; + int insn_endian; CGEN_CPU_DESC cd; } cpu_desc_list; @@ -736,12 +737,16 @@ 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; /* ??? gdb will set mach but leave the architecture as "unknown" */ @@ -807,9 +812,11 @@ prev_isa = cgen_bitset_copy (isa); prev_mach = mach; prev_endian = endian; + prev_insn_endian = insn_endian; cd = xc16x_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 (); diff -Nru gdb-9.1/opcodes/xc16x-ibld.c gdb-10.2/opcodes/xc16x-ibld.c --- gdb-9.1/opcodes/xc16x-ibld.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/xc16x-ibld.c 2021-04-25 04:06:26.000000000 +0000 @@ -4,7 +4,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN: Cpu tools GENerator. - the resultant file is machine generated, cgen-ibld.in isn't - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of libopcodes. @@ -85,20 +85,20 @@ int word_length, unsigned char *bufp) { - unsigned long x,mask; + unsigned long x, mask; int shift; - x = cgen_get_insn_value (cd, bufp, word_length); + x = cgen_get_insn_value (cd, bufp, word_length, cd->endian); /* Written this way to avoid undefined behaviour. */ - mask = (((1L << (length - 1)) - 1) << 1) | 1; + mask = (1UL << (length - 1) << 1) - 1; if (CGEN_INSN_LSB0_P) shift = (start + 1) - length; else shift = (word_length - (start + length)); x = (x & ~(mask << shift)) | ((value & mask) << shift); - cgen_put_insn_value (cd, bufp, word_length, (bfd_vma) x); + cgen_put_insn_value (cd, bufp, word_length, (bfd_vma) x, cd->endian); } #endif /* ! CGEN_INT_INSN_P */ @@ -131,13 +131,15 @@ CGEN_INSN_BYTES_PTR buffer) { static char errbuf[100]; - /* Written this way to avoid undefined behaviour. */ - unsigned long mask = (((1L << (length - 1)) - 1) << 1) | 1; + unsigned long mask; /* If LENGTH is zero, this operand doesn't contribute to the value. */ if (length == 0) return NULL; + /* Written this way to avoid undefined behaviour. */ + mask = (1UL << (length - 1) << 1) - 1; + if (word_length > 8 * sizeof (CGEN_INSN_INT)) abort (); @@ -153,7 +155,7 @@ /* Ensure VALUE will fit. */ if (CGEN_BOOL_ATTR (attrs, CGEN_IFLD_SIGN_OPT)) { - long minval = - (1L << (length - 1)); + long minval = - (1UL << (length - 1)); unsigned long maxval = mask; if ((value > 0 && (unsigned long) value > maxval) @@ -191,8 +193,8 @@ { if (! cgen_signed_overflow_ok_p (cd)) { - long minval = - (1L << (length - 1)); - long maxval = (1L << (length - 1)) - 1; + long minval = - (1UL << (length - 1)); + long maxval = (1UL << (length - 1)) - 1; if (value < minval || value > maxval) { @@ -269,8 +271,8 @@ #else cgen_put_insn_value (cd, buffer, min ((unsigned) cd->base_insn_bitsize, - (unsigned) CGEN_FIELDS_BITSIZE (fields)), - value); + (unsigned) CGEN_FIELDS_BITSIZE (fields)), + value, cd->insn_endian); #endif /* ! CGEN_INT_INSN_P */ @@ -314,7 +316,7 @@ { int shift = insn_length - length; /* Written this way to avoid undefined behaviour. */ - CGEN_INSN_INT mask = (((1L << (length - 1)) - 1) << 1) | 1; + CGEN_INSN_INT mask = length == 0 ? 0 : (1UL << (length - 1) << 1) - 1; *buf = (*buf & ~(mask << shift)) | ((value & mask) << shift); } @@ -387,7 +389,7 @@ unsigned long x; int shift; - x = cgen_get_insn_value (cd, bufp, word_length); + x = cgen_get_insn_value (cd, bufp, word_length, cd->endian); if (CGEN_INSN_LSB0_P) shift = (start + 1) - length; @@ -480,7 +482,10 @@ abort (); if (fill_cache (cd, ex_info, word_offset / 8, word_length / 8, pc) == 0) - return 0; + { + *valuep = 0; + return 0; + } value = extract_1 (cd, ex_info, start, length, word_length, bufp, pc); } @@ -488,12 +493,12 @@ #endif /* ! CGEN_INT_INSN_P */ /* Written this way to avoid undefined behaviour. */ - mask = (((1L << (length - 1)) - 1) << 1) | 1; + mask = (1UL << (length - 1) << 1) - 1; value &= mask; /* sign extend? */ if (CGEN_BOOL_ATTR (attrs, CGEN_IFLD_SIGNED) - && (value & (1L << (length - 1)))) + && (value & (1UL << (length - 1)))) value |= ~mask; *valuep = value; diff -Nru gdb-9.1/opcodes/xc16x-opc.c gdb-10.2/opcodes/xc16x-opc.c --- gdb-9.1/opcodes/xc16x-opc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/xc16x-opc.c 2021-04-25 04:06:26.000000000 +0000 @@ -3,7 +3,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright (C) 1996-2019 Free Software Foundation, Inc. +Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of the GNU Binutils and/or GDB, the GNU debugger. diff -Nru gdb-9.1/opcodes/xc16x-opc.h gdb-10.2/opcodes/xc16x-opc.h --- gdb-9.1/opcodes/xc16x-opc.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/xc16x-opc.h 2021-04-25 04:06:26.000000000 +0000 @@ -3,7 +3,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright (C) 1996-2019 Free Software Foundation, Inc. +Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of the GNU Binutils and/or GDB, the GNU debugger. diff -Nru gdb-9.1/opcodes/xgate-dis.c gdb-10.2/opcodes/xgate-dis.c --- gdb-9.1/opcodes/xgate-dis.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/xgate-dis.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* xgate-dis.c -- Freescale XGATE disassembly - Copyright (C) 2009-2019 Free Software Foundation, Inc. + Copyright (C) 2009-2020 Free Software Foundation, Inc. Written by Sean Keys (skeys@ipdatasys.com) This file is part of the GNU opcodes library. @@ -193,12 +193,12 @@ relAddr = XGATE_NINE_BITS >> 1; /* Clip sign bit. */ relAddr = ~relAddr; /* Make signed. */ relAddr |= (raw_code & 0xFF) + 1; /* Apply our value. */ - relAddr <<= 1; /* Multiply by two as per processor docs. */ + relAddr *= 2; /* Multiply by two as per processor docs. */ } else { relAddr = raw_code & 0xff; - relAddr = (relAddr << 1) + 2; + relAddr = relAddr * 2 + 2; } (*info->fprintf_func)(info->stream, " *%d", relAddr); (*info->fprintf_func)(info->stream, " Abs* 0x"); @@ -212,12 +212,12 @@ relAddr = XGATE_TEN_BITS >> 1; /* Clip sign bit. */ relAddr = ~relAddr; /* Make signed. */ relAddr |= (raw_code & 0x1FF) + 1; /* Apply our value. */ - relAddr <<= 1; /* Multiply by two as per processor docs. */ + relAddr *= 2; /* Multiply by two as per processor docs. */ } else { relAddr = raw_code & 0x1FF; - relAddr = (relAddr << 1) + 2; + relAddr = relAddr * 2 + 2; } (*info->fprintf_func)(info->stream, " *%d", relAddr); (*info->fprintf_func)(info->stream, " Abs* 0x"); @@ -254,7 +254,6 @@ } else if (!strcmp (decodePTR->opcodePTR->constraints, XGATE_OP_INH)) { - // } else { @@ -299,12 +298,12 @@ unsigned int memory) { unsigned int currentBit; - int operand; + unsigned int operand = 0; int numBitsFound; - for (operand = 0, numBitsFound = 0, currentBit = 1 - << ((opcodePTR->size * 8) - 1); - (numBitsFound < numBitsRequested) && currentBit; currentBit >>= 1) + for (numBitsFound = 0, currentBit = 1u << ((opcodePTR->size * 8) - 1); + numBitsFound < numBitsRequested && currentBit != 0; + currentBit >>= 1) { if (currentBit & *operandBitsRemaining) { diff -Nru gdb-9.1/opcodes/xgate-opc.c gdb-10.2/opcodes/xgate-opc.c --- gdb-9.1/opcodes/xgate-opc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/xgate-opc.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* mc9xgate-opc.c -- Freescale XGATE opcode list - Copyright (C) 1999-2019 Free Software Foundation, Inc. + Copyright (C) 1999-2020 Free Software Foundation, Inc. Written by Sean Keys (skeys@ipdatasys.com) This file is part of the GNU opcodes library. diff -Nru gdb-9.1/opcodes/xstormy16-asm.c gdb-10.2/opcodes/xstormy16-asm.c --- gdb-9.1/opcodes/xstormy16-asm.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/xstormy16-asm.c 2021-04-25 04:06:26.000000000 +0000 @@ -5,7 +5,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. - the resultant file is machine generated, cgen-asm.in isn't - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of libopcodes. diff -Nru gdb-9.1/opcodes/xstormy16-desc.c gdb-10.2/opcodes/xstormy16-desc.c --- gdb-9.1/opcodes/xstormy16-desc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/xstormy16-desc.c 2021-04-25 04:06:26.000000000 +0000 @@ -3,7 +3,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright (C) 1996-2019 Free Software Foundation, Inc. +Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of the GNU Binutils and/or GDB, the GNU debugger. @@ -1347,6 +1347,7 @@ CGEN_CPU_OPEN_MACHS: bitmap of values in enum mach_attr CGEN_CPU_OPEN_BFDMACH: specify 1 mach using bfd name CGEN_CPU_OPEN_ENDIAN: specify endian choice + CGEN_CPU_OPEN_INSN_ENDIAN: specify instruction endian choice CGEN_CPU_OPEN_END: terminates arguments ??? Simultaneous multiple isas might not make sense, but it's not (yet) @@ -1360,6 +1361,7 @@ CGEN_BITSET *isas = 0; /* 0 = "unspecified" */ unsigned int machs = 0; /* 0 = "unspecified" */ enum cgen_endian endian = CGEN_ENDIAN_UNKNOWN; + enum cgen_endian insn_endian = CGEN_ENDIAN_UNKNOWN; va_list ap; if (! init_p) @@ -1394,6 +1396,9 @@ case CGEN_CPU_OPEN_ENDIAN : endian = va_arg (ap, enum cgen_endian); break; + case CGEN_CPU_OPEN_INSN_ENDIAN : + insn_endian = va_arg (ap, enum cgen_endian); + break; default : opcodes_error_handler (/* xgettext:c-format */ @@ -1423,11 +1428,8 @@ cd->isas = cgen_bitset_copy (isas); cd->machs = machs; cd->endian = endian; - /* FIXME: for the sparc case we can determine insn-endianness statically. - The worry here is where both data and insn endian can be independently - chosen, in which case this function will need another argument. - Actually, will want to allow for more arguments in the future anyway. */ - cd->insn_endian = endian; + cd->insn_endian + = (insn_endian == CGEN_ENDIAN_UNKNOWN ? endian : insn_endian); /* Table (re)builder. */ cd->rebuild_tables = xstormy16_cgen_rebuild_tables; @@ -1477,18 +1479,10 @@ regfree (CGEN_INSN_RX (insns)); } - if (cd->macro_insn_table.init_entries) - free ((CGEN_INSN *) cd->macro_insn_table.init_entries); - - if (cd->insn_table.init_entries) - free ((CGEN_INSN *) cd->insn_table.init_entries); - - if (cd->hw_table.entries) - free ((CGEN_HW_ENTRY *) cd->hw_table.entries); - - if (cd->operand_table.entries) - free ((CGEN_HW_ENTRY *) cd->operand_table.entries); - + free ((CGEN_INSN *) cd->macro_insn_table.init_entries); + free ((CGEN_INSN *) cd->insn_table.init_entries); + free ((CGEN_HW_ENTRY *) cd->hw_table.entries); + free ((CGEN_HW_ENTRY *) cd->operand_table.entries); free (cd); } diff -Nru gdb-9.1/opcodes/xstormy16-desc.h gdb-10.2/opcodes/xstormy16-desc.h --- gdb-9.1/opcodes/xstormy16-desc.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/xstormy16-desc.h 2021-04-25 04:06:26.000000000 +0000 @@ -3,7 +3,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright (C) 1996-2019 Free Software Foundation, Inc. +Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of the GNU Binutils and/or GDB, the GNU debugger. diff -Nru gdb-9.1/opcodes/xstormy16-dis.c gdb-10.2/opcodes/xstormy16-dis.c --- gdb-9.1/opcodes/xstormy16-dis.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/xstormy16-dis.c 2021-04-25 04:06:26.000000000 +0000 @@ -5,7 +5,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. - the resultant file is machine generated, cgen-dis.in isn't - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of libopcodes. @@ -341,7 +341,7 @@ /* 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); + 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 @@ -472,6 +472,7 @@ CGEN_BITSET *isa; int mach; int endian; + int insn_endian; CGEN_CPU_DESC cd; } cpu_desc_list; @@ -484,12 +485,16 @@ 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; /* ??? gdb will set mach but leave the architecture as "unknown" */ @@ -555,9 +560,11 @@ prev_isa = cgen_bitset_copy (isa); prev_mach = mach; prev_endian = endian; + prev_insn_endian = insn_endian; cd = xstormy16_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 (); diff -Nru gdb-9.1/opcodes/xstormy16-ibld.c gdb-10.2/opcodes/xstormy16-ibld.c --- gdb-9.1/opcodes/xstormy16-ibld.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/xstormy16-ibld.c 2021-04-25 04:06:26.000000000 +0000 @@ -4,7 +4,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN: Cpu tools GENerator. - the resultant file is machine generated, cgen-ibld.in isn't - Copyright (C) 1996-2019 Free Software Foundation, Inc. + Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of libopcodes. @@ -85,20 +85,20 @@ int word_length, unsigned char *bufp) { - unsigned long x,mask; + unsigned long x, mask; int shift; - x = cgen_get_insn_value (cd, bufp, word_length); + x = cgen_get_insn_value (cd, bufp, word_length, cd->endian); /* Written this way to avoid undefined behaviour. */ - mask = (((1L << (length - 1)) - 1) << 1) | 1; + mask = (1UL << (length - 1) << 1) - 1; if (CGEN_INSN_LSB0_P) shift = (start + 1) - length; else shift = (word_length - (start + length)); x = (x & ~(mask << shift)) | ((value & mask) << shift); - cgen_put_insn_value (cd, bufp, word_length, (bfd_vma) x); + cgen_put_insn_value (cd, bufp, word_length, (bfd_vma) x, cd->endian); } #endif /* ! CGEN_INT_INSN_P */ @@ -131,13 +131,15 @@ CGEN_INSN_BYTES_PTR buffer) { static char errbuf[100]; - /* Written this way to avoid undefined behaviour. */ - unsigned long mask = (((1L << (length - 1)) - 1) << 1) | 1; + unsigned long mask; /* If LENGTH is zero, this operand doesn't contribute to the value. */ if (length == 0) return NULL; + /* Written this way to avoid undefined behaviour. */ + mask = (1UL << (length - 1) << 1) - 1; + if (word_length > 8 * sizeof (CGEN_INSN_INT)) abort (); @@ -153,7 +155,7 @@ /* Ensure VALUE will fit. */ if (CGEN_BOOL_ATTR (attrs, CGEN_IFLD_SIGN_OPT)) { - long minval = - (1L << (length - 1)); + long minval = - (1UL << (length - 1)); unsigned long maxval = mask; if ((value > 0 && (unsigned long) value > maxval) @@ -191,8 +193,8 @@ { if (! cgen_signed_overflow_ok_p (cd)) { - long minval = - (1L << (length - 1)); - long maxval = (1L << (length - 1)) - 1; + long minval = - (1UL << (length - 1)); + long maxval = (1UL << (length - 1)) - 1; if (value < minval || value > maxval) { @@ -269,8 +271,8 @@ #else cgen_put_insn_value (cd, buffer, min ((unsigned) cd->base_insn_bitsize, - (unsigned) CGEN_FIELDS_BITSIZE (fields)), - value); + (unsigned) CGEN_FIELDS_BITSIZE (fields)), + value, cd->insn_endian); #endif /* ! CGEN_INT_INSN_P */ @@ -314,7 +316,7 @@ { int shift = insn_length - length; /* Written this way to avoid undefined behaviour. */ - CGEN_INSN_INT mask = (((1L << (length - 1)) - 1) << 1) | 1; + CGEN_INSN_INT mask = length == 0 ? 0 : (1UL << (length - 1) << 1) - 1; *buf = (*buf & ~(mask << shift)) | ((value & mask) << shift); } @@ -387,7 +389,7 @@ unsigned long x; int shift; - x = cgen_get_insn_value (cd, bufp, word_length); + x = cgen_get_insn_value (cd, bufp, word_length, cd->endian); if (CGEN_INSN_LSB0_P) shift = (start + 1) - length; @@ -480,7 +482,10 @@ abort (); if (fill_cache (cd, ex_info, word_offset / 8, word_length / 8, pc) == 0) - return 0; + { + *valuep = 0; + return 0; + } value = extract_1 (cd, ex_info, start, length, word_length, bufp, pc); } @@ -488,12 +493,12 @@ #endif /* ! CGEN_INT_INSN_P */ /* Written this way to avoid undefined behaviour. */ - mask = (((1L << (length - 1)) - 1) << 1) | 1; + mask = (1UL << (length - 1) << 1) - 1; value &= mask; /* sign extend? */ if (CGEN_BOOL_ATTR (attrs, CGEN_IFLD_SIGNED) - && (value & (1L << (length - 1)))) + && (value & (1UL << (length - 1)))) value |= ~mask; *valuep = value; @@ -800,7 +805,7 @@ { long value; length = extract_normal (cd, ex_info, insn_value, 0|(1<<CGEN_IFLD_SIGNED)|(1<<CGEN_IFLD_PCREL_ADDR), 0, 4, 11, 32, total_length, pc, & value); - value = ((((value) << (1))) + (((pc) + (2)))); + value = ((((value) * (2))) + (((pc) + (2)))); fields->f_rel12a = value; } break; diff -Nru gdb-9.1/opcodes/xstormy16-opc.c gdb-10.2/opcodes/xstormy16-opc.c --- gdb-9.1/opcodes/xstormy16-opc.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/xstormy16-opc.c 2021-04-25 04:06:26.000000000 +0000 @@ -3,7 +3,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright (C) 1996-2019 Free Software Foundation, Inc. +Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of the GNU Binutils and/or GDB, the GNU debugger. diff -Nru gdb-9.1/opcodes/xstormy16-opc.h gdb-10.2/opcodes/xstormy16-opc.h --- gdb-9.1/opcodes/xstormy16-opc.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/xstormy16-opc.h 2021-04-25 04:06:26.000000000 +0000 @@ -3,7 +3,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright (C) 1996-2019 Free Software Foundation, Inc. +Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of the GNU Binutils and/or GDB, the GNU debugger. diff -Nru gdb-9.1/opcodes/xtensa-dis.c gdb-10.2/opcodes/xtensa-dis.c --- gdb-9.1/opcodes/xtensa-dis.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/xtensa-dis.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* xtensa-dis.c. Disassembly functions for Xtensa. - Copyright (C) 2003-2019 Free Software Foundation, Inc. + Copyright (C) 2003-2020 Free Software Foundation, Inc. Contributed by Bob Wilson at Tensilica, Inc. (bwilson@tensilica.com) This file is part of the GNU opcodes library. @@ -306,8 +306,7 @@ { /* Reset insn_table_entries. */ priv.insn_table_entry_count = 0; - if (priv.insn_table_entries) - free (priv.insn_table_entries); + free (priv.insn_table_entries); priv.insn_table_entries = NULL; } priv.last_section = section; @@ -319,8 +318,7 @@ XTENSA_PROP_SEC_NAME, FALSE); if (priv.insn_table_entry_count == 0) { - if (priv.insn_table_entries) - free (priv.insn_table_entries); + free (priv.insn_table_entries); priv.insn_table_entries = NULL; /* Backwards compatibility support. */ priv.insn_table_entry_count = diff -Nru gdb-9.1/opcodes/z80-dis.c gdb-10.2/opcodes/z80-dis.c --- gdb-9.1/opcodes/z80-dis.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/z80-dis.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ -/* Print Z80 and R800 instructions - Copyright (C) 2005-2019 Free Software Foundation, Inc. +/* Print Z80, Z180, EZ80 and R800 instructions + Copyright (C) 2005-2020 Free Software Foundation, Inc. Contributed by Arnold Metselaar <arnold_m@operamail.com> This file is part of the GNU opcodes library. @@ -28,38 +28,66 @@ bfd_vma base; int n_fetch; int n_used; - signed char data[4]; + signed char data[6]; + long inss; /* instruction set bit mask, taken from bfd_mach */ + int nn_len; /* address length: 2 - Z80 mode, 3 - ADL mode*/ } ; -typedef int (*func)(struct buffer *, disassemble_info *, char *); +typedef int (*func)(struct buffer *, disassemble_info *, const char *); struct tab_elt { unsigned char val; unsigned char mask; func fp; - char * text; + const char * text; + unsigned inss; /* bit mask of supported bfd_mach_* or 0 for all mach */ } ; +#define INSS_ALL 0 +#define INSS_Z80 ((1 << bfd_mach_z80) | (1 << bfd_mach_z80strict) | (1 << bfd_mach_z80full)) +#define INSS_R800 (1 << bfd_mach_r800) +#define INSS_GBZ80 (1 << bfd_mach_gbz80) +#define INSS_Z180 (1 << bfd_mach_z180) +#define INSS_EZ80_Z80 (1 << bfd_mach_ez80_z80) +#define INSS_EZ80_ADL (1 << bfd_mach_ez80_adl) +#define INSS_EZ80 (INSS_EZ80_ADL | INSS_EZ80_Z80) +#define INSS_Z80N (1 << bfd_mach_z80n) + #define TXTSIZ 24 /* Names of 16-bit registers. */ -static char * rr_str[] = { "bc", "de", "hl", "sp" }; +static const char * rr_str[] = { "bc", "de", "hl", "sp" }; /* Names of 8-bit registers. */ -static char * r_str[] = { "b", "c", "d", "e", "h", "l", "(hl)", "a" }; +static const char * r_str[] = { "b", "c", "d", "e", "h", "l", "(hl)", "a" }; /* Texts for condition codes. */ -static char * cc_str[] = { "nz", "z", "nc", "c", "po", "pe", "p", "m" }; +static const char * cc_str[] = { "nz", "z", "nc", "c", "po", "pe", "p", "m" }; /* Instruction names for 8-bit arithmetic, operand "a" is often implicit */ -static char * arit_str[] = +static const char * arit_str[] = { "add a,", "adc a,", "sub ", "sbc a,", "and ", "xor ", "or ", "cp " } ; +static const char * arit_str_gbz80[] = +{ + "add a,", "adc a,", "sub a,", "sbc a,", "and ", "xor ", "or ", "cp " +} ; +static const char * arit_str_ez80[] = +{ + "add a,", "adc a,", "sub a,", "sbc a,", "and a,", "xor a,", "or a,", "cp a," +} ; + static int +mach_inst (struct buffer *buf, const struct tab_elt *p) +{ + return !p->inss || (p->inss & buf->inss); +} + +static int fetch_data (struct buffer *buf, disassemble_info * info, int n) { int r; - if (buf->n_fetch + n > 4) + if (buf->n_fetch + n > (int)sizeof (buf->data)) abort (); r = info->read_memory_func (buf->base + buf->n_fetch, @@ -71,7 +99,7 @@ } static int -prt (struct buffer *buf, disassemble_info * info, char *txt) +prt (struct buffer *buf, disassemble_info * info, const char *txt) { info->fprintf_func (info->stream, "%s", txt); buf->n_used = buf->n_fetch; @@ -79,7 +107,7 @@ } static int -prt_e (struct buffer *buf, disassemble_info * info, char *txt) +prt_e (struct buffer *buf, disassemble_info * info, const char *txt) { char e; int target_addr; @@ -98,7 +126,7 @@ } static int -jr_cc (struct buffer *buf, disassemble_info * info, char *txt) +jr_cc (struct buffer *buf, disassemble_info * info, const char *txt) { char mytxt[TXTSIZ]; @@ -107,15 +135,19 @@ } static int -prt_nn (struct buffer *buf, disassemble_info * info, char *txt) +prt_nn (struct buffer *buf, disassemble_info * info, const char *txt) { int nn; unsigned char *p; + int i; p = (unsigned char*) buf->data + buf->n_fetch; - if (fetch_data (buf, info, 2)) + if (fetch_data (buf, info, buf->nn_len)) { - nn = p[0] + (p[1] << 8); + nn = 0; + i = buf->nn_len; + while (i--) + nn = nn * 0x100 + p[i]; info->fprintf_func (info->stream, txt, nn); buf->n_used = buf->n_fetch; } @@ -125,7 +157,7 @@ } static int -prt_rr_nn (struct buffer *buf, disassemble_info * info, char *txt) +prt_rr_nn (struct buffer *buf, disassemble_info * info, const char *txt) { char mytxt[TXTSIZ]; int rr; @@ -136,7 +168,7 @@ } static int -prt_rr (struct buffer *buf, disassemble_info * info, char *txt) +prt_rr (struct buffer *buf, disassemble_info * info, const char *txt) { info->fprintf_func (info->stream, "%s%s", txt, rr_str[(buf->data[buf->n_fetch - 1] >> 4) & 3]); @@ -145,7 +177,7 @@ } static int -prt_n (struct buffer *buf, disassemble_info * info, char *txt) +prt_n (struct buffer *buf, disassemble_info * info, const char *txt) { int n; unsigned char *p; @@ -165,16 +197,48 @@ } static int -ld_r_n (struct buffer *buf, disassemble_info * info, char *txt) +prt_n_n (struct buffer *buf, disassemble_info * info, const char *txt) +{ + char mytxt[TXTSIZ]; + int n; + unsigned char *p; + + p = (unsigned char*) buf->data + buf->n_fetch; + + if (fetch_data (buf, info, 1)) + { + n = p[0]; + snprintf (mytxt, TXTSIZ, txt, n); + buf->n_used = buf->n_fetch; + } + else + buf->n_used = -1; + + return prt_n (buf, info, mytxt); +} + +static int +prt_r_n (struct buffer *buf, disassemble_info * info, const char *txt) +{ + char mytxt[TXTSIZ]; + int r; + + r = (buf->data[buf->n_fetch - 1] >> 3) & 7; + snprintf (mytxt, TXTSIZ, txt, r_str[r]); + return prt_n (buf, info, mytxt); +} + +static int +ld_r_n (struct buffer *buf, disassemble_info * info, const char *txt) { char mytxt[TXTSIZ]; - snprintf (mytxt, TXTSIZ, txt, r_str[(buf->data[0] >> 3) & 7]); + snprintf (mytxt, TXTSIZ, txt, r_str[(buf->data[buf->n_fetch - 1] >> 3) & 7]); return prt_n (buf, info, mytxt); } static int -prt_r (struct buffer *buf, disassemble_info * info, char *txt) +prt_r (struct buffer *buf, disassemble_info * info, const char *txt) { info->fprintf_func (info->stream, txt, r_str[(buf->data[buf->n_fetch - 1] >> 3) & 7]); @@ -183,7 +247,7 @@ } static int -ld_r_r (struct buffer *buf, disassemble_info * info, char *txt) +ld_r_r (struct buffer *buf, disassemble_info * info, const char *txt) { info->fprintf_func (info->stream, txt, r_str[(buf->data[buf->n_fetch - 1] >> 3) & 7], @@ -193,17 +257,60 @@ } static int -arit_r (struct buffer *buf, disassemble_info * info, char *txt) +prt_d (struct buffer *buf, disassemble_info * info, const char *txt) { + int d; + signed char *p; + + p = buf->data + buf->n_fetch; + + if (fetch_data (buf, info, 1)) + { + d = p[0]; + info->fprintf_func (info->stream, txt, d); + buf->n_used = buf->n_fetch; + } + else + buf->n_used = -1; + + return buf->n_used; +} + +static int +prt_rr_d (struct buffer *buf, disassemble_info * info, const char *txt) +{ + char mytxt[TXTSIZ]; + int rr; + + rr = (buf->data[buf->n_fetch - 1] >> 4) & 3; + if (rr == 3) /* SP is not supported */ + return 0; + + snprintf (mytxt, TXTSIZ, txt, rr_str[rr]); + return prt_d (buf, info, mytxt); +} + +static int +arit_r (struct buffer *buf, disassemble_info * info, const char *txt) +{ + const char * const *arit; + + if (buf->inss & INSS_EZ80) + arit = arit_str_ez80; + else if (buf->inss & INSS_GBZ80) + arit = arit_str_gbz80; + else + arit = arit_str; + info->fprintf_func (info->stream, txt, - arit_str[(buf->data[buf->n_fetch - 1] >> 3) & 7], - r_str[buf->data[buf->n_fetch - 1] & 7]); + arit[(buf->data[buf->n_fetch - 1] >> 3) & 7], + r_str[buf->data[buf->n_fetch - 1] & 7]); buf->n_used = buf->n_fetch; return buf->n_used; } static int -prt_cc (struct buffer *buf, disassemble_info * info, char *txt) +prt_cc (struct buffer *buf, disassemble_info * info, const char *txt) { info->fprintf_func (info->stream, "%s%s", txt, cc_str[(buf->data[0] >> 3) & 7]); @@ -212,7 +319,7 @@ } static int -pop_rr (struct buffer *buf, disassemble_info * info, char *txt) +pop_rr (struct buffer *buf, disassemble_info * info, const char *txt) { static char *rr_stack[] = { "bc","de","hl","af"}; @@ -224,7 +331,7 @@ static int -jp_cc_nn (struct buffer *buf, disassemble_info * info, char *txt) +jp_cc_nn (struct buffer *buf, disassemble_info * info, const char *txt) { char mytxt[TXTSIZ]; @@ -234,25 +341,33 @@ } static int -arit_n (struct buffer *buf, disassemble_info * info, char *txt) +arit_n (struct buffer *buf, disassemble_info * info, const char *txt) { char mytxt[TXTSIZ]; + const char * const *arit; - snprintf (mytxt,TXTSIZ, txt, arit_str[(buf->data[0] >> 3) & 7]); + if (buf->inss & INSS_EZ80) + arit = arit_str_ez80; + else if (buf->inss & INSS_GBZ80) + arit = arit_str_gbz80; + else + arit = arit_str; + + snprintf (mytxt,TXTSIZ, txt, arit[(buf->data[0] >> 3) & 7]); return prt_n (buf, info, mytxt); } static int -rst (struct buffer *buf, disassemble_info * info, char *txt) +rst (struct buffer *buf, disassemble_info * info, const char *txt) { info->fprintf_func (info->stream, txt, buf->data[0] & 0x38); buf->n_used = buf->n_fetch; return buf->n_used; } - + static int -cis (struct buffer *buf, disassemble_info * info, char *txt ATTRIBUTE_UNUSED) +cis (struct buffer *buf, disassemble_info * info, const char *txt ATTRIBUTE_UNUSED) { static char * opar[] = { "ld", "cp", "in", "out" }; char * op; @@ -269,7 +384,24 @@ } static int -dump (struct buffer *buf, disassemble_info * info, char *txt) +cism (struct buffer *buf, disassemble_info * info, const char *txt ATTRIBUTE_UNUSED) +{ + static char * opar[] = { "in%cm%s", "ot%cm%s" }; + char * op; + char c; + + c = buf->data[1]; + op = opar[c & 1]; + info->fprintf_func (info->stream, + op, + (c & 0x08) ? 'd' : 'i', + (c & 0x10) ? "r" : ""); + buf->n_used = 2; + return buf->n_used; +} + +static int +dump (struct buffer *buf, disassemble_info * info, const char *txt) { int i; @@ -280,49 +412,125 @@ buf->n_used = i; return buf->n_used; } - + /* Table to disassemble machine codes with prefix 0xED. */ struct tab_elt opc_ed[] = { - { 0x70, 0xFF, prt, "in f,(c)" }, - { 0x70, 0xFF, dump, "xx" }, - { 0x40, 0xC7, prt_r, "in %s,(c)" }, - { 0x71, 0xFF, prt, "out (c),0" }, - { 0x70, 0xFF, dump, "xx" }, - { 0x41, 0xC7, prt_r, "out (c),%s" }, - { 0x42, 0xCF, prt_rr, "sbc hl," }, - { 0x43, 0xCF, prt_rr_nn, "ld (0x%%04x),%s" }, - { 0x44, 0xFF, prt, "neg" }, - { 0x45, 0xFF, prt, "retn" }, - { 0x46, 0xFF, prt, "im 0" }, - { 0x47, 0xFF, prt, "ld i,a" }, - { 0x4A, 0xCF, prt_rr, "adc hl," }, - { 0x4B, 0xCF, prt_rr_nn, "ld %s,(0x%%04x)" }, - { 0x4D, 0xFF, prt, "reti" }, - { 0x4F, 0xFF, prt, "ld r,a" }, - { 0x56, 0xFF, prt, "im 1" }, - { 0x57, 0xFF, prt, "ld a,i" }, - { 0x5E, 0xFF, prt, "im 2" }, - { 0x5F, 0xFF, prt, "ld a,r" }, - { 0x67, 0xFF, prt, "rrd" }, - { 0x6F, 0xFF, prt, "rld" }, - { 0xA0, 0xE4, cis, "" }, - { 0xC3, 0xFF, prt, "muluw hl,bc" }, - { 0xC5, 0xE7, prt_r, "mulub a,%s" }, - { 0xF3, 0xFF, prt, "muluw hl,sp" }, - { 0x00, 0x00, dump, "xx" } + { 0x30, 0xFF, prt, "mul d,e", INSS_Z80N }, + { 0x31, 0xFF, prt, "add hl,a", INSS_Z80N }, + { 0x31, 0xFF, prt, "ld iy,(hl)", INSS_EZ80 }, + { 0x30, 0xFE, dump, "xx", INSS_ALL }, /* do not move this line */ + { 0x00, 0xC7, prt_r_n, "in0 %s,(0x%%02x)", INSS_Z180|INSS_EZ80 }, + { 0x01, 0xC7, prt_r_n, "out0 (0x%%02x),%s", INSS_Z180|INSS_EZ80 }, + { 0x32, 0xFF, prt_d, "lea ix,ix%+d", INSS_EZ80 }, + { 0x33, 0xFF, prt_d, "lea iy,iy%+d", INSS_EZ80 }, + { 0x02, 0xCF, prt_rr_d, "lea %s,ix%%+d", INSS_EZ80 }, + { 0x03, 0xCF, prt_rr_d, "lea %s,iy%%+d", INSS_EZ80 }, + { 0x04, 0xC7, prt_r, "tst %s", INSS_Z180}, + { 0x04, 0xC7, prt_r, "tst a,%s", INSS_EZ80 }, + { 0x07, 0xFF, prt, "ld bc,(hl)", INSS_EZ80 }, + { 0x3F, 0xFF, prt, "ld (hl),ix", INSS_EZ80 }, + { 0x0F, 0xCF, prt_rr, "ld (hl),", INSS_EZ80 }, + { 0x17, 0xFF, prt, "ld de,(hl)", INSS_EZ80 }, + { 0x23, 0xFF, prt, "swapnib", INSS_Z80N }, + { 0x24, 0xFF, prt, "mirror", INSS_Z80N }, + { 0x27, 0xFF, prt, "ld hl,(hl)", INSS_EZ80 }, + { 0x27, 0xFF, prt_n, "test 0x%02x", INSS_Z80N }, + { 0x28, 0xFF, prt, "bsla de,b", INSS_Z80N }, + { 0x29, 0xFF, prt, "bsra de,b", INSS_Z80N }, + { 0x2A, 0xFF, prt, "bsrl de,b", INSS_Z80N }, + { 0x2B, 0xFF, prt, "bsrf de,b", INSS_Z80N }, + { 0x2C, 0xFF, prt, "bslc de,b", INSS_Z80N }, + { 0x32, 0xFF, prt, "add de,a", INSS_Z80N }, + { 0x33, 0xFF, prt, "add bc,a", INSS_Z80N }, + { 0x34, 0xFF, prt_nn, "add hl,0x%04x", INSS_Z80N }, + { 0x35, 0xFF, prt_nn, "add de,0x%04x", INSS_Z80N }, + { 0x36, 0xFF, prt_nn, "add bc,0x%04x", INSS_Z80N }, + { 0x37, 0xFF, prt, "ld ix,(hl)", INSS_EZ80 }, + { 0x3E, 0xFF, prt, "ld (hl),iy", INSS_EZ80 }, + { 0x70, 0xFF, prt, "in f,(c)", INSS_Z80 | INSS_R800 | INSS_Z80N }, + { 0x70, 0xFF, dump, "xx", INSS_ALL }, + { 0x40, 0xC7, prt_r, "in %s,(bc)", INSS_EZ80 }, + { 0x40, 0xC7, prt_r, "in %s,(c)", INSS_ALL }, + { 0x71, 0xFF, prt, "out (c),0", INSS_Z80 | INSS_Z80N }, + { 0x71, 0xFF, dump, "xx", INSS_ALL }, + { 0x41, 0xC7, prt_r, "out (bc),%s", INSS_EZ80 }, + { 0x41, 0xC7, prt_r, "out (c),%s", INSS_ALL }, + { 0x42, 0xCF, prt_rr, "sbc hl,", INSS_ALL }, + { 0x43, 0xCF, prt_rr_nn, "ld (0x%%04x),%s", INSS_ALL }, + { 0x44, 0xFF, prt, "neg", INSS_ALL }, + { 0x45, 0xFF, prt, "retn", INSS_ALL }, + { 0x46, 0xFF, prt, "im 0", INSS_ALL }, + { 0x47, 0xFF, prt, "ld i,a", INSS_ALL }, + { 0x4A, 0xCF, prt_rr, "adc hl,", INSS_ALL }, + { 0x4B, 0xCF, prt_rr_nn, "ld %s,(0x%%04x)", INSS_ALL }, + { 0x4C, 0xCF, prt_rr, "mlt ", INSS_Z180|INSS_EZ80 }, + { 0x4D, 0xFF, prt, "reti", INSS_ALL }, + { 0x4F, 0xFF, prt, "ld r,a", INSS_ALL }, + { 0x54, 0xFF, prt_d, "lea ix,iy%+d", INSS_EZ80 }, + { 0x55, 0xFF, prt_d, "lea iy,ix%+d", INSS_EZ80 }, + { 0x56, 0xFF, prt, "im 1", INSS_ALL }, + { 0x57, 0xFF, prt, "ld a,i", INSS_ALL }, + { 0x5E, 0xFF, prt, "im 2", INSS_ALL }, + { 0x5F, 0xFF, prt, "ld a,r", INSS_ALL }, + { 0x64, 0xFF, prt_n, "tst 0x%02x", INSS_Z180 }, + { 0x64, 0xFF, prt_n, "tst a,0x%02x", INSS_EZ80 }, + { 0x65, 0xFF, prt_d, "pea ix%+d", INSS_EZ80 }, + { 0x66, 0xFF, prt_d, "pea iy%+d", INSS_EZ80 }, + { 0x67, 0xFF, prt, "rrd", INSS_ALL }, + { 0x6D, 0xFF, prt, "ld mb,a", INSS_EZ80 }, + { 0x6E, 0xFF, prt, "ld a,mb", INSS_EZ80 }, + { 0x6F, 0xFF, prt, "rld", INSS_ALL }, + { 0x74, 0xFF, prt_n, "tstio 0x%02x", INSS_Z180|INSS_EZ80 }, + { 0x76, 0xFF, prt, "slp", INSS_Z180|INSS_EZ80 }, + { 0x7D, 0xFF, prt, "stmix", INSS_EZ80 }, + { 0x7E, 0xFF, prt, "rsmix", INSS_EZ80 }, + { 0x82, 0xE6, cism, "", INSS_Z180|INSS_EZ80 }, + { 0x84, 0xFF, prt, "ini2", INSS_EZ80 }, + { 0x8A, 0xFF, prt_n_n, "push 0x%02x%%02x", INSS_Z80N }, + { 0x8C, 0xFF, prt, "ind2", INSS_EZ80 }, + { 0x90, 0xFF, prt, "outinb", INSS_Z80N }, + { 0x91, 0xFF, prt_n_n, "nextreg 0x%02x,0x%%02x", INSS_Z80N }, + { 0x92, 0xFF, prt_n, "nextreg 0x%02x,a", INSS_Z80N }, + { 0x93, 0xFF, prt, "pixeldn", INSS_Z80N }, + { 0x94, 0xFF, prt, "ini2r", INSS_EZ80 }, + { 0x94, 0xFF, prt, "pixelad", INSS_Z80N }, + { 0x95, 0xFF, prt, "setae", INSS_Z80N }, + { 0x98, 0xFF, prt, "jp (c)", INSS_Z80N }, + { 0x9c, 0xFF, prt, "ind2r", INSS_EZ80 }, + { 0xA0, 0xE4, cis, "", INSS_ALL }, + { 0xA4, 0xFF, prt, "outi2", INSS_EZ80 }, + { 0xA4, 0xFF, prt, "ldix", INSS_Z80N }, + { 0xAC, 0xFF, prt, "outd2", INSS_EZ80 }, + { 0xAC, 0xFF, prt, "lddx", INSS_Z80N }, + { 0xA5, 0xFF, prt, "ldws", INSS_Z80N }, + { 0xB4, 0xFF, prt, "oti2r", INSS_EZ80 }, + { 0xB4, 0xFF, prt, "ldirx", INSS_Z80N }, + { 0xB7, 0xFF, prt, "ldpirx", INSS_Z80N }, + { 0xBC, 0xFF, prt, "otd2r", INSS_EZ80 }, + { 0xBC, 0xFF, prt, "lddrx", INSS_Z80N }, + { 0xC2, 0xFF, prt, "inirx", INSS_EZ80 }, + { 0xC3, 0xFF, prt, "otirx", INSS_EZ80 }, + { 0xC7, 0xFF, prt, "ld i,hl", INSS_EZ80 }, + { 0xCA, 0xFF, prt, "indrx", INSS_EZ80 }, + { 0xCB, 0xFF, prt, "otdrx", INSS_EZ80 }, + { 0xC3, 0xFF, prt, "muluw hl,bc", INSS_R800 }, + { 0xC5, 0xE7, prt_r, "mulub a,%s", INSS_R800 }, + { 0xD7, 0xFF, prt, "ld hl,i", INSS_EZ80 }, + { 0xF3, 0xFF, prt, "muluw hl,sp", INSS_R800 }, + { 0x00, 0x00, dump, "xx", INSS_ALL } }; static int -pref_ed (struct buffer * buf, disassemble_info * info, - char* txt ATTRIBUTE_UNUSED) +pref_ed (struct buffer *buf, disassemble_info *info, + const char *txt ATTRIBUTE_UNUSED) { struct tab_elt *p; - if (fetch_data(buf, info, 1)) + if (fetch_data (buf, info, 1)) { - for (p = opc_ed; p->val != (buf->data[1] & p->mask); ++p) - ; + for (p = opc_ed; p->val != (buf->data[1] & p->mask) || !mach_inst (buf, p); ++p) + ; p->fp (buf, info, p->text); } else @@ -340,16 +548,25 @@ }; static int -pref_cb (struct buffer * buf, disassemble_info * info, - char* txt ATTRIBUTE_UNUSED) +pref_cb (struct buffer *buf, disassemble_info *info, + const char *txt ATTRIBUTE_UNUSED) { + const char *op_txt; + int idx; if (fetch_data (buf, info, 1)) { buf->n_used = 2; if ((buf->data[1] & 0xc0) == 0) - info->fprintf_func (info->stream, "%s %s", - cb2_str[(buf->data[1] >> 3) & 7], - r_str[buf->data[1] & 7]); + { + idx = (buf->data[1] >> 3) & 7; + if ((buf->inss & INSS_GBZ80) && (idx == 6)) + op_txt = "swap"; + else + op_txt = cb2_str[idx]; + info->fprintf_func (info->stream, "%s %s", + op_txt, + r_str[buf->data[1] & 7]); + } else info->fprintf_func (info->stream, "%s %d,%s", cb1_str[(buf->data[1] >> 6) & 3], @@ -361,9 +578,9 @@ return buf->n_used; } - + static int -addvv (struct buffer * buf, disassemble_info * info, char* txt) +addvv (struct buffer * buf, disassemble_info * info, const char *txt) { info->fprintf_func (info->stream, "add %s,%s", txt, txt); @@ -371,7 +588,7 @@ } static int -ld_v_v (struct buffer * buf, disassemble_info * info, char* txt) +ld_v_v (struct buffer * buf, disassemble_info * info, const char *txt) { char mytxt[TXTSIZ]; @@ -380,8 +597,9 @@ } static int -prt_d (struct buffer *buf, disassemble_info * info, char *txt) +prt_d_n (struct buffer *buf, disassemble_info * info, const char *txt) { + char mytxt[TXTSIZ]; int d; signed char *p; @@ -390,8 +608,8 @@ if (fetch_data (buf, info, 1)) { d = p[0]; - info->fprintf_func (info->stream, txt, d); - buf->n_used = buf->n_fetch; + snprintf (mytxt, TXTSIZ, txt, d); + return prt_n (buf, info, mytxt); } else buf->n_used = -1; @@ -400,61 +618,58 @@ } static int -prt_d_n (struct buffer *buf, disassemble_info * info, char *txt) +arit_d (struct buffer *buf, disassemble_info * info, const char *txt) { char mytxt[TXTSIZ]; - int d; - signed char *p; - - p = buf->data + buf->n_fetch; - - if (fetch_data (buf, info, 1)) - { - d = p[0]; - snprintf (mytxt, TXTSIZ, txt, d); - return prt_n (buf, info, mytxt); - } - else - buf->n_used = -1; + signed char c; + const char * const *arit; - return buf->n_used; + arit = (buf->inss & INSS_EZ80) ? arit_str_ez80 : arit_str; + c = buf->data[buf->n_fetch - 1]; + snprintf (mytxt, TXTSIZ, txt, arit[(c >> 3) & 7]); + return prt_d (buf, info, mytxt); } static int -arit_d (struct buffer *buf, disassemble_info * info, char *txt) +ld_r_d (struct buffer *buf, disassemble_info * info, const char *txt) { char mytxt[TXTSIZ]; signed char c; c = buf->data[buf->n_fetch - 1]; - snprintf (mytxt, TXTSIZ, txt, arit_str[(c >> 3) & 7]); + snprintf (mytxt, TXTSIZ, txt, r_str[(c >> 3) & 7]); return prt_d (buf, info, mytxt); } static int -ld_r_d (struct buffer *buf, disassemble_info * info, char *txt) +ld_d_r (struct buffer *buf, disassemble_info * info, const char *txt) { char mytxt[TXTSIZ]; signed char c; c = buf->data[buf->n_fetch - 1]; - snprintf (mytxt, TXTSIZ, txt, r_str[(c >> 3) & 7]); + snprintf (mytxt, TXTSIZ, txt, r_str[c & 7]); return prt_d (buf, info, mytxt); } static int -ld_d_r(struct buffer *buf, disassemble_info * info, char *txt) +ld_ii_ii (struct buffer *buf, disassemble_info * info, const char *txt) { char mytxt[TXTSIZ]; signed char c; + int p; + static const char *ii[2] = { "ix", "iy" }; + p = (buf->data[buf->n_fetch - 2] == (signed char) 0xdd) ? 0 : 1; c = buf->data[buf->n_fetch - 1]; - snprintf (mytxt, TXTSIZ, txt, r_str[c & 7]); + if ((c & 0x07) != 0x07) + p = 1 - p; /* 0 -> 1, 1 -> 0 */ + snprintf (mytxt, TXTSIZ, txt, ii[p]); return prt_d (buf, info, mytxt); } static int -pref_xd_cb (struct buffer * buf, disassemble_info * info, char* txt) +pref_xd_cb (struct buffer * buf, disassemble_info * info, const char *txt) { if (fetch_data (buf, info, 2)) { @@ -490,49 +705,58 @@ /* Table to disassemble machine codes with prefix 0xDD or 0xFD. */ static struct tab_elt opc_ind[] = { - { 0x24, 0xF7, prt_r, "inc %s%%s" }, - { 0x25, 0xF7, prt_r, "dec %s%%s" }, - { 0x26, 0xF7, ld_r_n, "ld %s%%s,0x%%%%02x" }, - { 0x21, 0xFF, prt_nn, "ld %s,0x%%04x" }, - { 0x22, 0xFF, prt_nn, "ld (0x%%04x),%s" }, - { 0x2A, 0xFF, prt_nn, "ld %s,(0x%%04x)" }, - { 0x23, 0xFF, prt, "inc %s" }, - { 0x2B, 0xFF, prt, "dec %s" }, - { 0x29, 0xFF, addvv, "%s" }, - { 0x09, 0xCF, prt_rr, "add %s," }, - { 0x34, 0xFF, prt_d, "inc (%s%%+d)" }, - { 0x35, 0xFF, prt_d, "dec (%s%%+d)" }, - { 0x36, 0xFF, prt_d_n, "ld (%s%%+d),0x%%%%02x" }, - - { 0x76, 0xFF, dump, "h" }, - { 0x46, 0xC7, ld_r_d, "ld %%s,(%s%%%%+d)" }, - { 0x70, 0xF8, ld_d_r, "ld (%s%%%%+d),%%s" }, - { 0x64, 0xF6, ld_v_v, "%s" }, - { 0x60, 0xF0, ld_r_r, "ld %s%%s,%%s" }, - { 0x44, 0xC6, ld_r_r, "ld %%s,%s%%s" }, - - { 0x86, 0xC7, arit_d, "%%s(%s%%%%+d)" }, - { 0x84, 0xC6, arit_r, "%%s%s%%s" }, - - { 0xE1, 0xFF, prt, "pop %s" }, - { 0xE5, 0xFF, prt, "push %s" }, - { 0xCB, 0xFF, pref_xd_cb, "%s" }, - { 0xE3, 0xFF, prt, "ex (sp),%s" }, - { 0xE9, 0xFF, prt, "jp (%s)" }, - { 0xF9, 0xFF, prt, "ld sp,%s" }, - { 0x00, 0x00, dump, "?" }, + { 0x07, 0xFF, prt_d, "ld bc,(%s%%+d)", INSS_EZ80 }, + { 0x0F, 0xFF, prt_d, "ld (%s%%+d),bc", INSS_EZ80 }, + { 0x17, 0xFF, prt_d, "ld de,(%s%%+d)", INSS_EZ80 }, + { 0x1F, 0xFF, prt_d, "ld (%s%%+d),de", INSS_EZ80 }, + { 0x24, 0xF7, prt_r, "inc %s%%s", INSS_ALL }, + { 0x25, 0xF7, prt_r, "dec %s%%s", INSS_ALL }, + { 0x26, 0xF7, ld_r_n, "ld %s%%s,0x%%%%02x", INSS_ALL }, + { 0x27, 0xFF, prt_d, "ld hl,(%s%%+d)", INSS_EZ80 }, + { 0x2F, 0xFF, prt_d, "ld (%s%%+d),hl", INSS_EZ80 }, + { 0x21, 0xFF, prt_nn, "ld %s,0x%%04x", INSS_ALL }, + { 0x22, 0xFF, prt_nn, "ld (0x%%04x),%s", INSS_ALL }, + { 0x2A, 0xFF, prt_nn, "ld %s,(0x%%04x)", INSS_ALL }, + { 0x23, 0xFF, prt, "inc %s", INSS_ALL }, + { 0x2B, 0xFF, prt, "dec %s", INSS_ALL }, + { 0x29, 0xFF, addvv, "%s", INSS_ALL }, + { 0x31, 0xFF, ld_ii_ii, "ld %%s,(%s%%%%+d)", INSS_EZ80 }, + { 0x37, 0xFF, ld_ii_ii, "ld %%s,(%s%%%%+d)", INSS_EZ80 }, + { 0x3E, 0xFE, ld_ii_ii, "ld (%s%%%%+d),%%s", INSS_EZ80 }, + { 0x09, 0xCF, prt_rr, "add %s,", INSS_ALL }, + { 0x34, 0xFF, prt_d, "inc (%s%%+d)", INSS_ALL }, + { 0x35, 0xFF, prt_d, "dec (%s%%+d)", INSS_ALL }, + { 0x36, 0xFF, prt_d_n, "ld (%s%%+d),0x%%%%02x", INSS_ALL }, + + { 0x76, 0xFF, dump, "h", INSS_ALL }, + { 0x46, 0xC7, ld_r_d, "ld %%s,(%s%%%%+d)", INSS_ALL }, + { 0x70, 0xF8, ld_d_r, "ld (%s%%%%+d),%%s", INSS_ALL }, + { 0x64, 0xF6, ld_v_v, "%s", INSS_ALL }, + { 0x60, 0xF0, ld_r_r, "ld %s%%s,%%s", INSS_ALL }, + { 0x44, 0xC6, ld_r_r, "ld %%s,%s%%s", INSS_ALL }, + + { 0x86, 0xC7, arit_d, "%%s(%s%%%%+d)", INSS_ALL }, + { 0x84, 0xC6, arit_r, "%%s%s%%s", INSS_ALL }, + + { 0xE1, 0xFF, prt, "pop %s", INSS_ALL }, + { 0xE5, 0xFF, prt, "push %s", INSS_ALL }, + { 0xCB, 0xFF, pref_xd_cb, "%s", INSS_ALL }, + { 0xE3, 0xFF, prt, "ex (sp),%s", INSS_ALL }, + { 0xE9, 0xFF, prt, "jp (%s)", INSS_ALL }, + { 0xF9, 0xFF, prt, "ld sp,%s", INSS_ALL }, + { 0x00, 0x00, dump, "?", INSS_ALL }, } ; static int -pref_ind (struct buffer * buf, disassemble_info * info, char* txt) +pref_ind (struct buffer *buf, disassemble_info *info, const char *txt) { if (fetch_data (buf, info, 1)) { char mytxt[TXTSIZ]; struct tab_elt *p; - for (p = opc_ind; p->val != (buf->data[1] & p->mask); ++p) - ; + for (p = opc_ind; p->val != (buf->data[1] & p->mask) || !mach_inst (buf, p); ++p) + ; snprintf (mytxt, TXTSIZ, p->text, txt); p->fp (buf, info, mytxt); } @@ -542,85 +766,224 @@ return buf->n_used; } +static int +print_insn_z80_buf (struct buffer *buf, disassemble_info *info); + +static int +suffix (struct buffer *buf, disassemble_info *info, const char *txt) +{ + char mybuf[TXTSIZ*4]; + fprintf_ftype old_fprintf; + void *old_stream; + char *p; + + switch (txt[2]) + { + case 'l': /* SIL or LIL */ + buf->nn_len = 3; + break; + case 's': /* SIS or LIS */ + buf->nn_len = 2; + break; + default: + abort (); + } + if (!fetch_data (buf, info, 1) + || buf->data[1] == 0x40 + || buf->data[1] == 0x49 + || buf->data[1] == 0x52 + || buf->data[1] == 0x5b) + { + /* Double prefix, or end of data. */ + info->fprintf_func (info->stream, ".db 0x%02x ; %s", (unsigned)buf->data[0], txt); + buf->n_used = 1; + return buf->n_used; + } + + old_fprintf = info->fprintf_func; + old_stream = info->stream; + info->fprintf_func = (fprintf_ftype) &sprintf; + info->stream = mybuf; + mybuf[0] = 0; + buf->base++; + if (print_insn_z80_buf (buf, info) >= 0) + buf->n_used++; + info->fprintf_func = old_fprintf; + info->stream = old_stream; + + for (p = mybuf; *p; ++p) + if (*p == ' ') + break; + if (*p) + { + *p++ = '\0'; + info->fprintf_func (info->stream, "%s.%s %s", mybuf, txt, p); + } + else + info->fprintf_func (info->stream, "%s.%s", mybuf, txt); + return buf->n_used; +} + /* Table to disassemble machine codes without prefix. */ -static struct tab_elt opc_main[] = +static const struct tab_elt +opc_main[] = { - { 0x00, 0xFF, prt, "nop" }, - { 0x01, 0xCF, prt_rr_nn, "ld %s,0x%%04x" }, - { 0x02, 0xFF, prt, "ld (bc),a" }, - { 0x03, 0xCF, prt_rr, "inc " }, - { 0x04, 0xC7, prt_r, "inc %s" }, - { 0x05, 0xC7, prt_r, "dec %s" }, - { 0x06, 0xC7, ld_r_n, "ld %s,0x%%02x" }, - { 0x07, 0xFF, prt, "rlca" }, - { 0x08, 0xFF, prt, "ex af,af'" }, - { 0x09, 0xCF, prt_rr, "add hl," }, - { 0x0A, 0xFF, prt, "ld a,(bc)" }, - { 0x0B, 0xCF, prt_rr, "dec " }, - { 0x0F, 0xFF, prt, "rrca" }, - { 0x10, 0xFF, prt_e, "djnz " }, - { 0x12, 0xFF, prt, "ld (de),a" }, - { 0x17, 0xFF, prt, "rla" }, - { 0x18, 0xFF, prt_e, "jr "}, - { 0x1A, 0xFF, prt, "ld a,(de)" }, - { 0x1F, 0xFF, prt, "rra" }, - { 0x20, 0xE7, jr_cc, "jr %s,"}, - { 0x22, 0xFF, prt_nn, "ld (0x%04x),hl" }, - { 0x27, 0xFF, prt, "daa"}, - { 0x2A, 0xFF, prt_nn, "ld hl,(0x%04x)" }, - { 0x2F, 0xFF, prt, "cpl" }, - { 0x32, 0xFF, prt_nn, "ld (0x%04x),a" }, - { 0x37, 0xFF, prt, "scf" }, - { 0x3A, 0xFF, prt_nn, "ld a,(0x%04x)" }, - { 0x3F, 0xFF, prt, "ccf" }, - - { 0x76, 0xFF, prt, "halt" }, - { 0x40, 0xC0, ld_r_r, "ld %s,%s"}, - - { 0x80, 0xC0, arit_r, "%s%s" }, - - { 0xC0, 0xC7, prt_cc, "ret " }, - { 0xC1, 0xCF, pop_rr, "pop" }, - { 0xC2, 0xC7, jp_cc_nn, "jp " }, - { 0xC3, 0xFF, prt_nn, "jp 0x%04x" }, - { 0xC4, 0xC7, jp_cc_nn, "call " }, - { 0xC5, 0xCF, pop_rr, "push" }, - { 0xC6, 0xC7, arit_n, "%s0x%%02x" }, - { 0xC7, 0xC7, rst, "rst 0x%02x" }, - { 0xC9, 0xFF, prt, "ret" }, - { 0xCB, 0xFF, pref_cb, "" }, - { 0xCD, 0xFF, prt_nn, "call 0x%04x" }, - { 0xD3, 0xFF, prt_n, "out (0x%02x),a" }, - { 0xD9, 0xFF, prt, "exx" }, - { 0xDB, 0xFF, prt_n, "in a,(0x%02x)" }, - { 0xDD, 0xFF, pref_ind, "ix" }, - { 0xE3, 0xFF, prt, "ex (sp),hl" }, - { 0xE9, 0xFF, prt, "jp (hl)" }, - { 0xEB, 0xFF, prt, "ex de,hl" }, - { 0xED, 0xFF, pref_ed, ""}, - { 0xF3, 0xFF, prt, "di" }, - { 0xF9, 0xFF, prt, "ld sp,hl" }, - { 0xFB, 0xFF, prt, "ei" }, - { 0xFD, 0xFF, pref_ind, "iy" }, - { 0x00, 0x00, prt, "????" }, + { 0x00, 0xFF, prt, "nop", INSS_ALL }, + { 0x01, 0xCF, prt_rr_nn, "ld %s,0x%%04x", INSS_ALL }, + { 0x02, 0xFF, prt, "ld (bc),a", INSS_ALL }, + { 0x03, 0xCF, prt_rr, "inc ", INSS_ALL }, + { 0x04, 0xC7, prt_r, "inc %s", INSS_ALL }, + { 0x05, 0xC7, prt_r, "dec %s", INSS_ALL }, + { 0x06, 0xC7, ld_r_n, "ld %s,0x%%02x", INSS_ALL }, + { 0x07, 0xFF, prt, "rlca", INSS_ALL }, + { 0x08, 0xFF, prt, "ex af,af'", ~INSS_GBZ80 }, + { 0x09, 0xCF, prt_rr, "add hl,", INSS_ALL }, + { 0x0A, 0xFF, prt, "ld a,(bc)", INSS_ALL }, + { 0x0B, 0xCF, prt_rr, "dec ", INSS_ALL }, + { 0x0F, 0xFF, prt, "rrca", INSS_ALL }, + { 0x10, 0xFF, prt_e, "djnz ", ~INSS_GBZ80 }, + { 0x12, 0xFF, prt, "ld (de),a", INSS_ALL }, + { 0x17, 0xFF, prt, "rla", INSS_ALL }, + { 0x18, 0xFF, prt_e, "jr ", INSS_ALL }, + { 0x1A, 0xFF, prt, "ld a,(de)", INSS_ALL }, + { 0x1F, 0xFF, prt, "rra", INSS_ALL }, + { 0x20, 0xE7, jr_cc, "jr %s,", INSS_ALL }, + { 0x22, 0xFF, prt_nn, "ld (0x%04x),hl", ~INSS_GBZ80 }, + { 0x27, 0xFF, prt, "daa", INSS_ALL }, + { 0x2A, 0xFF, prt_nn, "ld hl,(0x%04x)", ~INSS_GBZ80 }, + { 0x2F, 0xFF, prt, "cpl", INSS_ALL }, + { 0x32, 0xFF, prt_nn, "ld (0x%04x),a", INSS_ALL }, + { 0x37, 0xFF, prt, "scf", INSS_ALL }, + { 0x3A, 0xFF, prt_nn, "ld a,(0x%04x)", INSS_ALL }, + { 0x3F, 0xFF, prt, "ccf", INSS_ALL }, + + { 0x76, 0xFF, prt, "halt", INSS_ALL }, + + { 0x40, 0xFF, suffix, "sis", INSS_EZ80 }, + { 0x49, 0xFF, suffix, "lis", INSS_EZ80 }, + { 0x52, 0xFF, suffix, "sil", INSS_EZ80 }, + { 0x5B, 0xFF, suffix, "lil", INSS_EZ80 }, + + { 0x40, 0xC0, ld_r_r, "ld %s,%s", INSS_ALL}, + + { 0x80, 0xC0, arit_r, "%s%s", INSS_ALL }, + + { 0xC0, 0xC7, prt_cc, "ret ", INSS_ALL }, + { 0xC1, 0xCF, pop_rr, "pop", INSS_ALL }, + { 0xC2, 0xC7, jp_cc_nn, "jp ", INSS_ALL }, + { 0xC3, 0xFF, prt_nn, "jp 0x%04x", INSS_ALL }, + { 0xC4, 0xC7, jp_cc_nn, "call ", INSS_ALL }, + { 0xC5, 0xCF, pop_rr, "push", INSS_ALL }, + { 0xC6, 0xC7, arit_n, "%s0x%%02x", INSS_ALL }, + { 0xC7, 0xC7, rst, "rst 0x%02x", INSS_ALL }, + { 0xC9, 0xFF, prt, "ret", INSS_ALL }, + { 0xCB, 0xFF, pref_cb, "", INSS_ALL }, + { 0xCD, 0xFF, prt_nn, "call 0x%04x", INSS_ALL }, + { 0xD3, 0xFF, prt_n, "out (0x%02x),a", ~INSS_GBZ80 }, + { 0xD9, 0xFF, prt, "exx", ~INSS_GBZ80 }, + { 0xDB, 0xFF, prt_n, "in a,(0x%02x)", ~INSS_GBZ80 }, + { 0xDD, 0xFF, pref_ind, "ix", ~INSS_GBZ80 }, + { 0xE3, 0xFF, prt, "ex (sp),hl", ~INSS_GBZ80 }, + { 0xE9, 0xFF, prt, "jp (hl)", INSS_ALL }, + { 0xEB, 0xFF, prt, "ex de,hl", ~INSS_GBZ80 }, + { 0xED, 0xFF, pref_ed, "", ~INSS_GBZ80 }, + { 0xF3, 0xFF, prt, "di", INSS_ALL }, + { 0xF9, 0xFF, prt, "ld sp,hl", INSS_ALL }, + { 0xFB, 0xFF, prt, "ei", INSS_ALL }, + { 0xFD, 0xFF, pref_ind, "iy", ~INSS_GBZ80 }, + { 0x00, 0x00, prt, "????", INSS_ALL }, +} ; + +/* Separate GBZ80 main opcode table due to many differences */ +static const struct tab_elt +opc_main_gbz80[] = +{ + { 0x00, 0xFF, prt,"nop", INSS_ALL }, + { 0x01, 0xCF, prt_rr_nn, "ld %s,0x%%04x", INSS_ALL }, + { 0x02, 0xFF, prt, "ld (bc),a", INSS_ALL }, + { 0x03, 0xCF, prt_rr, "inc ", INSS_ALL }, + { 0x04, 0xC7, prt_r, "inc %s", INSS_ALL }, + { 0x05, 0xC7, prt_r, "dec %s", INSS_ALL }, + { 0x06, 0xC7, ld_r_n, "ld %s,0x%%02x", INSS_ALL }, + { 0x07, 0xFF, prt, "rlca", INSS_ALL }, + { 0x08, 0xFF, prt_nn, "ld (0x%04x),sp", INSS_GBZ80 }, + { 0x09, 0xCF, prt_rr, "add hl,", INSS_ALL }, + { 0x0A, 0xFF, prt, "ld a,(bc)", INSS_ALL }, + { 0x0B, 0xCF, prt_rr, "dec ", INSS_ALL }, + { 0x0F, 0xFF, prt, "rrca", INSS_ALL }, + { 0x10, 0xFF, prt, "stop", INSS_GBZ80 }, + { 0x12, 0xFF, prt, "ld (de),a", INSS_ALL }, + { 0x17, 0xFF, prt, "rla", INSS_ALL }, + { 0x18, 0xFF, prt_e, "jr ", INSS_ALL }, + { 0x1A, 0xFF, prt, "ld a,(de)", INSS_ALL }, + { 0x1F, 0xFF, prt, "rra", INSS_ALL }, + { 0x20, 0xE7, jr_cc, "jr %s,", INSS_ALL }, + { 0x22, 0xFF, prt, "ld (hl+),a", INSS_GBZ80 }, + { 0x27, 0xFF, prt, "daa", INSS_ALL }, + { 0x2A, 0xFF, prt, "ld a,(hl+)", INSS_GBZ80 }, + { 0x2F, 0xFF, prt, "cpl", INSS_ALL }, + { 0x32, 0xFF, prt, "ld (hl-),a", INSS_GBZ80 }, + { 0x37, 0xFF, prt, "scf", INSS_ALL }, + { 0x3A, 0xFF, prt, "ld a,(hl-)", INSS_GBZ80 }, + { 0x3F, 0xFF, prt, "ccf", INSS_ALL }, + { 0x76, 0xFF, prt, "halt", INSS_ALL }, + { 0x40, 0xC0, ld_r_r, "ld %s,%s", INSS_ALL}, + { 0x80, 0xC0, arit_r, "%s%s", INSS_ALL }, + { 0xC0, 0xE7, prt_cc, "ret ", INSS_ALL }, + { 0xC1, 0xCF, pop_rr, "pop", INSS_ALL }, + { 0xC2, 0xE7, jp_cc_nn, "jp ", INSS_ALL }, + { 0xC3, 0xFF, prt_nn, "jp 0x%04x", INSS_ALL }, + { 0xC4, 0xE7, jp_cc_nn, "call ", INSS_ALL }, + { 0xC5, 0xCF, pop_rr, "push", INSS_ALL }, + { 0xC6, 0xC7, arit_n, "%s0x%%02x", INSS_ALL }, + { 0xC7, 0xC7, rst, "rst 0x%02x", INSS_ALL }, + { 0xC9, 0xFF, prt, "ret", INSS_ALL }, + { 0xCB, 0xFF, pref_cb, "", INSS_ALL }, + { 0xCD, 0xFF, prt_nn, "call 0x%04x", INSS_ALL }, + { 0xD9, 0xFF, prt, "reti", INSS_GBZ80 }, + { 0xE0, 0xFF, prt_n, "ldh (0x%02x),a", INSS_GBZ80 }, + { 0xE2, 0xFF, prt, "ldh (c),a", INSS_GBZ80 }, + { 0xE8, 0xFF, prt_d, "add sp,%d", INSS_GBZ80 }, + { 0xE9, 0xFF, prt, "jp (hl)", INSS_ALL }, + { 0xEA, 0xFF, prt_nn, "ld (0x%04x),a", INSS_GBZ80 }, + { 0xF0, 0xFF, prt_n, "ldh a,(0x%02x)", INSS_GBZ80 }, + { 0xF2, 0xFF, prt, "ldh a,(c)", INSS_GBZ80 }, + { 0xF3, 0xFF, prt, "di", INSS_ALL }, + { 0xF8, 0xFF, prt_d, "ldhl sp,%d", INSS_GBZ80 }, + { 0xF9, 0xFF, prt, "ld sp,hl", INSS_ALL }, + { 0xFA, 0xFF, prt_nn, "ld a,(0x%04x)", INSS_GBZ80 }, + { 0xFB, 0xFF, prt, "ei", INSS_ALL }, + { 0x00, 0x00, dump, "?", INSS_ALL }, } ; int print_insn_z80 (bfd_vma addr, disassemble_info * info) { struct buffer buf; - struct tab_elt *p; buf.base = addr; - buf.n_fetch = 0; - buf.n_used = 0; + buf.inss = 1 << info->mach; + buf.nn_len = info->mach == bfd_mach_ez80_adl ? 3 : 2; + info->bytes_per_line = (buf.inss & INSS_EZ80) ? 6 : 4; /* <ss pp oo nn mm MM> OR <pp oo nn mm> */ - if (! fetch_data (& buf, info, 1)) + return print_insn_z80_buf (&buf, info); +} + +static int +print_insn_z80_buf (struct buffer *buf, disassemble_info *info) +{ + const struct tab_elt *p; + + buf->n_fetch = 0; + buf->n_used = 0; + if (! fetch_data (buf, info, 1)) return -1; - for (p = opc_main; p->val != (buf.data[0] & p->mask); ++p) + p = (buf->inss & INSS_GBZ80) ? opc_main_gbz80 : opc_main; + + for (; p->val != (buf->data[0] & p->mask) || !mach_inst (buf, p); ++p) ; - p->fp (& buf, info, p->text); + p->fp (buf, info, p->text); - return buf.n_used; + return buf->n_used; } diff -Nru gdb-9.1/opcodes/z8k-dis.c gdb-10.2/opcodes/z8k-dis.c --- gdb-9.1/opcodes/z8k-dis.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/z8k-dis.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Disassemble z8000 code. - Copyright (C) 1992-2019 Free Software Foundation, Inc. + Copyright (C) 1992-2020 Free Software Foundation, Inc. This file is part of the GNU opcodes library. @@ -20,6 +20,7 @@ #include "sysdep.h" #include "disassemble.h" +#include "libiberty.h" #define DEFINE_TABLE #include "z8k-opc.h" @@ -35,7 +36,7 @@ unsigned short words[24]; /* Nibble number of first word not yet fetched. */ - int max_fetched; + unsigned int max_fetched; bfd_vma insn_start; OPCODES_SIGJMP_BUF bailout; @@ -189,7 +190,7 @@ int z8k_lookup_instr (unsigned char *nibbles, disassemble_info *info) { - int nibl_index, tabl_index; + unsigned int nibl_index, tabl_index; int nibl_matched; int need_fetch = 0; unsigned short instr_nibl; @@ -202,7 +203,9 @@ { nibl_matched = 1; for (nibl_index = 0; - nibl_index < z8k_table[tabl_index].length * 2 && nibl_matched; + nibl_matched + && nibl_index < ARRAY_SIZE (z8k_table[0].byte_info) + && nibl_index < z8k_table[tabl_index].length * 2; nibl_index++) { if ((nibl_index % 4) == 0) @@ -281,7 +284,7 @@ unsigned long addr ATTRIBUTE_UNUSED, disassemble_info *info) { - int num_bytes; + unsigned int num_bytes; char out_str[100]; out_str[0] = 0; @@ -297,7 +300,7 @@ static void unpack_instr (instr_data_s *instr_data, int is_segmented, disassemble_info *info) { - int nibl_count, loop; + unsigned int nibl_count, loop; unsigned short instr_nibl, instr_byte, instr_word; long instr_long; unsigned int tabl_datum, datum_class; @@ -366,8 +369,8 @@ break; case ARG_IMM32: FETCH_DATA (info, nibl_count + 8); - instr_long = (instr_data->words[nibl_count] << 16) - | (instr_data->words[nibl_count + 4]); + instr_long = ((unsigned) instr_data->words[nibl_count] << 16 + | instr_data->words[nibl_count + 4]); instr_data->immediate = instr_long; nibl_count += 7; break; @@ -399,17 +402,17 @@ if (instr_nibl & 0x8) { FETCH_DATA (info, nibl_count + 8); - instr_long = (instr_data->words[nibl_count] << 16) - | (instr_data->words[nibl_count + 4]); - instr_data->address = ((instr_word & 0x7f00) << 16) - + (instr_long & 0xffff); + instr_long = ((unsigned) instr_data->words[nibl_count] << 16 + | instr_data->words[nibl_count + 4]); + instr_data->address = ((instr_word & 0x7f00) << 16 + | (instr_long & 0xffff)); nibl_count += 7; seg_length = 2; } else { - instr_data->address = ((instr_word & 0x7f00) << 16) - + (instr_word & 0x00ff); + instr_data->address = ((instr_word & 0x7f00) << 16 + | (instr_word & 0x00ff)); nibl_count += 3; } } diff -Nru gdb-9.1/opcodes/z8kgen.c gdb-10.2/opcodes/z8kgen.c --- gdb-9.1/opcodes/z8kgen.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/z8kgen.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2001-2019 Free Software Foundation, Inc. +/* Copyright (C) 2001-2020 Free Software Foundation, Inc. This file is part of the GNU opcodes library. @@ -458,8 +458,8 @@ {"CZS---", 13, 8, "1011 0010 dddd 0001 iiii iiii 0000 imm4", "sllb rbd,imm4", 0}, {"CZS---", 13, 32, "1011 0011 dddd 0101 0000 0000 imm8", "slll rrd,imm8", 0}, - {"------", 12, 16, "0011 1011 ssss 0110 imm16", "sout imm16,rs", 0}, - {"------", 12, 8, "0011 1010 ssss 0110 imm16", "soutb imm16,rbs", 0}, + {"------", 12, 16, "0011 1011 ssss 0111 imm16", "sout imm16,rs", 0}, + {"------", 12, 8, "0011 1010 ssss 0111 imm16", "soutb imm16,rbs", 0}, {"---V--", 21, 16, "0011 1011 ssN0 1011 0000 aaaa dddd 1000", "soutd @ro,@rs,ra", 0}, {"---V--", 21, 8, "0011 1010 ssN0 1011 0000 aaaa dddd 1000", "soutdb @ro,@rs,ra", 0}, {"---V--", 11, 16, "0011 1011 ssN0 1011 0000 aaaa dddd 0000", "sotdr @ro,@rs,ra", 0}, @@ -987,7 +987,7 @@ printf ("/* DO NOT EDIT! -*- buffer-read-only: t -*-\n"); printf (" This file is automatically generated by z8kgen. */\n\n"); - printf ("/* Copyright (C) 2007-2019 Free Software Foundation, Inc.\n\ + printf ("/* Copyright (C) 2007-2020 Free Software Foundation, Inc.\n\ \n\ This file is part of the GNU opcodes library.\n\ \n\ @@ -1290,9 +1290,9 @@ printf (" void (*func) (void);\n"); printf (" unsigned int arg_info[4];\n"); printf (" unsigned int byte_info[%d];\n", BYTE_INFO_LEN); - printf (" int noperands;\n"); - printf (" int length;\n"); - printf (" int idx;\n"); + printf (" unsigned int noperands;\n"); + printf (" unsigned int length;\n"); + printf (" unsigned int idx;\n"); printf ("} opcode_entry_type;\n\n"); printf ("#ifdef DEFINE_TABLE\n"); printf ("const opcode_entry_type z8k_table[] = {\n"); diff -Nru gdb-9.1/opcodes/z8k-opc.h gdb-10.2/opcodes/z8k-opc.h --- gdb-9.1/opcodes/z8k-opc.h 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/opcodes/z8k-opc.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,7 +1,7 @@ /* DO NOT EDIT! -*- buffer-read-only: t -*- This file is automatically generated by z8kgen. */ -/* Copyright (C) 2007-2019 Free Software Foundation, Inc. +/* Copyright (C) 2007-2020 Free Software Foundation, Inc. This file is part of the GNU opcodes library. @@ -292,9 +292,9 @@ void (*func) (void); unsigned int arg_info[4]; unsigned int byte_info[10]; - int noperands; - int length; - int idx; + unsigned int noperands; + unsigned int length; + unsigned int idx; } opcode_entry_type; #ifdef DEFINE_TABLE @@ -3252,21 +3252,21 @@ "sotirb",OPC_sotirb,0,{CLASS_IRO+(ARG_RD),CLASS_IR+(ARG_RS),CLASS_REG_WORD+(ARG_RA),}, {CLASS_BIT+3,CLASS_BIT+0xa,CLASS_REGN0+(ARG_RS),CLASS_BIT+3,CLASS_BIT+0,CLASS_REG+(ARG_RA),CLASS_REG+(ARG_RD),CLASS_BIT+0,0,},3,4,170}, -/* 0011 1011 ssss 0110 imm16 *** sout imm16,rs */ +/* 0011 1011 ssss 0111 imm16 *** sout imm16,rs */ { #ifdef NICENAMES "sout imm16,rs",16,12,0x00, #endif "sout",OPC_sout,0,{CLASS_IMM+(ARG_IMM16),CLASS_REG_WORD+(ARG_RS),}, - {CLASS_BIT+3,CLASS_BIT+0xb,CLASS_REG+(ARG_RS),CLASS_BIT+6,CLASS_IMM+(ARG_IMM16),0,0,0,0,},2,4,171}, + {CLASS_BIT+3,CLASS_BIT+0xb,CLASS_REG+(ARG_RS),CLASS_BIT+7,CLASS_IMM+(ARG_IMM16),0,0,0,0,},2,4,171}, -/* 0011 1010 ssss 0110 imm16 *** soutb imm16,rbs */ +/* 0011 1010 ssss 0111 imm16 *** soutb imm16,rbs */ { #ifdef NICENAMES "soutb imm16,rbs",8,12,0x00, #endif "soutb",OPC_soutb,0,{CLASS_IMM+(ARG_IMM16),CLASS_REG_BYTE+(ARG_RS),}, - {CLASS_BIT+3,CLASS_BIT+0xa,CLASS_REG+(ARG_RS),CLASS_BIT+6,CLASS_IMM+(ARG_IMM16),0,0,0,0,},2,4,172}, + {CLASS_BIT+3,CLASS_BIT+0xa,CLASS_REG+(ARG_RS),CLASS_BIT+7,CLASS_IMM+(ARG_IMM16),0,0,0,0,},2,4,172}, /* 0011 1011 ssN0 1011 0000 aaaa dddd 1000 *** soutd @ro,@rs,ra */ { diff -Nru gdb-9.1/readline/ChangeLog gdb-10.2/readline/ChangeLog --- gdb-9.1/readline/ChangeLog 2019-11-19 01:10:41.000000000 +0000 +++ gdb-10.2/readline/ChangeLog 2021-04-25 04:06:26.000000000 +0000 @@ -1,3 +1,7 @@ +2020-06-30 Tom Tromey <tom@tromey.com> + + * README: Update instructions. + 2019-11-15 Tom Tromey <tromey@adacore.com> * configure, Makefile.in: Rebuild. diff -Nru gdb-9.1/readline/readline/doc/history.info gdb-10.2/readline/readline/doc/history.info --- gdb-9.1/readline/readline/doc/history.info 2020-02-08 12:54:10.000000000 +0000 +++ gdb-10.2/readline/readline/doc/history.info 2021-04-25 04:10:36.000000000 +0000 @@ -1,4 +1,4 @@ -This is history.info, produced by makeinfo version 6.5 from +This is history.info, produced by makeinfo version 6.7 from history.texi. This document describes the GNU History library (version 8.0, 30 @@ -1410,3 +1410,8 @@ Node: Function and Variable Index56487  End Tag Table + + +Local Variables: +coding: utf-8 +End: diff -Nru gdb-9.1/readline/readline/doc/readline.info gdb-10.2/readline/readline/doc/readline.info --- gdb-9.1/readline/readline/doc/readline.info 2020-02-08 12:54:09.000000000 +0000 +++ gdb-10.2/readline/readline/doc/readline.info 2021-04-25 04:10:35.000000000 +0000 @@ -1,4 +1,4 @@ -This is readline.info, produced by makeinfo version 6.5 from rlman.texi. +This is readline.info, produced by makeinfo version 6.7 from rlman.texi. This manual describes the GNU Readline Library (version 8.0, 30 November 2018), a library which aids in the consistency of user interface across @@ -5120,3 +5120,8 @@ Node: Function and Variable Index195679  End Tag Table + + +Local Variables: +coding: utf-8 +End: diff -Nru gdb-9.1/readline/readline/doc/rluserman.info gdb-10.2/readline/readline/doc/rluserman.info --- gdb-9.1/readline/readline/doc/rluserman.info 2020-02-08 12:54:10.000000000 +0000 +++ gdb-10.2/readline/readline/doc/rluserman.info 2021-04-25 04:10:36.000000000 +0000 @@ -1,4 +1,4 @@ -This is rluserman.info, produced by makeinfo version 6.5 from +This is rluserman.info, produced by makeinfo version 6.7 from rluserman.texi. This manual describes the end user interface of the GNU Readline Library @@ -1990,3 +1990,8 @@ Node: GNU Free Documentation License62539  End Tag Table + + +Local Variables: +coding: utf-8 +End: diff -Nru gdb-9.1/readline/readline/histfile.c gdb-10.2/readline/readline/histfile.c --- gdb-9.1/readline/readline/histfile.c 2019-11-19 01:10:41.000000000 +0000 +++ gdb-10.2/readline/readline/histfile.c 2021-04-25 04:06:26.000000000 +0000 @@ -305,6 +305,7 @@ if (file_size == 0) { free (input); + close (file); return 0; /* don't waste time if we don't have to */ } @@ -368,9 +369,11 @@ } has_timestamps = HIST_TIMESTAMP_START (buffer); - history_multiline_entries += has_timestamps && history_write_timestamps; + history_multiline_entries += has_timestamps && history_write_timestamps; /* Skip lines until we are at FROM. */ + if (has_timestamps) + last_ts = buffer; for (line_start = line_end = buffer; line_end < bufend && current_line < from; line_end++) if (*line_end == '\n') { @@ -379,7 +382,18 @@ line. We should check more extensively here... */ if (HIST_TIMESTAMP_START(p) == 0) current_line++; + else + last_ts = p; line_start = p; + /* If we are at the last line (current_line == from) but we have + timestamps (has_timestamps), then line_start points to the + text of the last command, and we need to skip to its end. */ + if (current_line >= from && has_timestamps) + { + for (line_end = p; line_end < bufend && *line_end != '\n'; line_end++) + ; + line_start = (*line_end == '\n') ? line_end + 1 : line_end; + } } /* If there are lines left to gobble, then gobble them now. */ @@ -606,6 +620,7 @@ if (rv != 0) { + rv = errno; if (tempname) unlink (tempname); history_lines_written_to_file = 0; @@ -753,6 +768,7 @@ if (rv != 0) { + rv = errno; if (tempname) unlink (tempname); history_lines_written_to_file = 0; diff -Nru gdb-9.1/readline/readline/misc.c gdb-10.2/readline/readline/misc.c --- gdb-9.1/readline/readline/misc.c 2019-11-19 01:10:41.000000000 +0000 +++ gdb-10.2/readline/readline/misc.c 2021-04-25 04:06:26.000000000 +0000 @@ -576,6 +576,7 @@ rl_get_previous_history (int count, int key) { HIST_ENTRY *old_temp, *temp; + int had_saved_line; if (count < 0) return (rl_get_next_history (-count, key)); @@ -588,6 +589,7 @@ _rl_history_saved_point = (rl_point == rl_end) ? -1 : rl_point; /* If we don't have a line saved, then save this one. */ + had_saved_line = _rl_saved_line_for_history != 0; rl_maybe_save_line (); /* If the current line has changed, save the changes. */ @@ -611,7 +613,8 @@ if (temp == 0) { - rl_maybe_unsave_line (); + if (had_saved_line == 0) + _rl_free_saved_history_line (); rl_ding (); } else diff -Nru gdb-9.1/readline/readline/patchlevel gdb-10.2/readline/readline/patchlevel --- gdb-9.1/readline/readline/patchlevel 2019-11-19 01:10:41.000000000 +0000 +++ gdb-10.2/readline/readline/patchlevel 2021-04-25 04:06:26.000000000 +0000 @@ -1,3 +1,3 @@ # Do not edit -- exists only for use by patch -0 +4 diff -Nru gdb-9.1/readline/README gdb-10.2/readline/README --- gdb-9.1/readline/README 2019-11-19 01:10:41.000000000 +0000 +++ gdb-10.2/readline/README 2020-09-13 02:33:41.000000000 +0000 @@ -12,3 +12,7 @@ If your import removes the need for a local patch, please remember to update this file. + +Individual upstream readline patches can be directly imported using +"git am". You can see the current patch level by looking at +readline/patchlevel. diff -Nru gdb-9.1/sim/aarch64/ChangeLog gdb-10.2/sim/aarch64/ChangeLog --- gdb-9.1/sim/aarch64/ChangeLog 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/sim/aarch64/ChangeLog 2021-04-25 04:06:26.000000000 +0000 @@ -1,3 +1,9 @@ +2020-02-06 Carlo Bramini <carlo_bramini@users.sourceforge.net> + + PR sim/25318 + * simulator.c (blr): Read destination register before calling + aarch64_save_LR. + 2019-03-28 Andrew Burgess <andrew.burgess@embecosm.com> * cpustate.c: Add 'libiberty.h' include. diff -Nru gdb-9.1/sim/aarch64/configure.ac gdb-10.2/sim/aarch64/configure.ac --- gdb-9.1/sim/aarch64/configure.ac 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/aarch64/configure.ac 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ dnl Process this file with autoconf to produce a configure script. -dnl Copyright (C) 2015-2020 Free Software Foundation, Inc. +dnl Copyright (C) 2015-2021 Free Software Foundation, Inc. dnl dnl Contributed by Red Hat. dnl diff -Nru gdb-9.1/sim/aarch64/cpustate.c gdb-10.2/sim/aarch64/cpustate.c --- gdb-9.1/sim/aarch64/cpustate.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/aarch64/cpustate.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* cpustate.h -- Prototypes for AArch64 simulator functions. - Copyright (C) 2015-2020 Free Software Foundation, Inc. + Copyright (C) 2015-2021 Free Software Foundation, Inc. Contributed by Red Hat. diff -Nru gdb-9.1/sim/aarch64/cpustate.h gdb-10.2/sim/aarch64/cpustate.h --- gdb-9.1/sim/aarch64/cpustate.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/aarch64/cpustate.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* cpustate.h -- Prototypes for AArch64 cpu state functions. - Copyright (C) 2015-2020 Free Software Foundation, Inc. + Copyright (C) 2015-2021 Free Software Foundation, Inc. Contributed by Red Hat. diff -Nru gdb-9.1/sim/aarch64/decode.h gdb-10.2/sim/aarch64/decode.h --- gdb-9.1/sim/aarch64/decode.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/aarch64/decode.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* decode.h -- Prototypes for AArch64 simulator decoder functions. - Copyright (C) 2015-2020 Free Software Foundation, Inc. + Copyright (C) 2015-2021 Free Software Foundation, Inc. Contributed by Red Hat. diff -Nru gdb-9.1/sim/aarch64/interp.c gdb-10.2/sim/aarch64/interp.c --- gdb-9.1/sim/aarch64/interp.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/aarch64/interp.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* interp.c -- AArch64 sim interface to GDB. - Copyright (C) 2015-2020 Free Software Foundation, Inc. + Copyright (C) 2015-2021 Free Software Foundation, Inc. Contributed by Red Hat. diff -Nru gdb-9.1/sim/aarch64/Makefile.in gdb-10.2/sim/aarch64/Makefile.in --- gdb-9.1/sim/aarch64/Makefile.in 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/aarch64/Makefile.in 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ #### Makefile.in --- Makefile template for the AArch64 simulator -### Copyright (C) 2015-2020 Free Software Foundation, Inc. +### Copyright (C) 2015-2021 Free Software Foundation, Inc. ### Contributed by Red Hat. diff -Nru gdb-9.1/sim/aarch64/memory.c gdb-10.2/sim/aarch64/memory.c --- gdb-9.1/sim/aarch64/memory.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/aarch64/memory.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* memory.c -- Memory accessor functions for the AArch64 simulator - Copyright (C) 2015-2020 Free Software Foundation, Inc. + Copyright (C) 2015-2021 Free Software Foundation, Inc. Contributed by Red Hat. diff -Nru gdb-9.1/sim/aarch64/memory.h gdb-10.2/sim/aarch64/memory.h --- gdb-9.1/sim/aarch64/memory.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/aarch64/memory.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* memory.h -- Prototypes for AArch64 memory accessor functions. - Copyright (C) 2015-2020 Free Software Foundation, Inc. + Copyright (C) 2015-2021 Free Software Foundation, Inc. Contributed by Red Hat. diff -Nru gdb-9.1/sim/aarch64/sim-main.h gdb-10.2/sim/aarch64/sim-main.h --- gdb-9.1/sim/aarch64/sim-main.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/aarch64/sim-main.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* sim-main.h -- Interface with sim/common. - Copyright (C) 2015-2020 Free Software Foundation, Inc. + Copyright (C) 2015-2021 Free Software Foundation, Inc. Contributed by Red Hat. diff -Nru gdb-9.1/sim/aarch64/simulator.c gdb-10.2/sim/aarch64/simulator.c --- gdb-9.1/sim/aarch64/simulator.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/sim/aarch64/simulator.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* simulator.c -- Interface for the AArch64 simulator. - Copyright (C) 2015-2020 Free Software Foundation, Inc. + Copyright (C) 2015-2021 Free Software Foundation, Inc. Contributed by Red Hat. @@ -13437,13 +13437,12 @@ static void blr (sim_cpu *cpu) { - unsigned rn = INSTR (9, 5); + /* Ensure we read the destination before we write LR. */ + uint64_t target = aarch64_get_reg_u64 (cpu, INSTR (9, 5), NO_SP); TRACE_DECODE (cpu, "emulated at line %d", __LINE__); - /* The pseudo code in the spec says we update LR before fetching. - the value from the rn. */ aarch64_save_LR (cpu); - aarch64_set_next_PC (cpu, aarch64_get_reg_u64 (cpu, rn, NO_SP)); + aarch64_set_next_PC (cpu, target); if (TRACE_BRANCH_P (cpu)) { diff -Nru gdb-9.1/sim/aarch64/simulator.h gdb-10.2/sim/aarch64/simulator.h --- gdb-9.1/sim/aarch64/simulator.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/aarch64/simulator.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* simulator.h -- Prototypes for AArch64 simulator functions. - Copyright (C) 2015-2020 Free Software Foundation, Inc. + Copyright (C) 2015-2021 Free Software Foundation, Inc. Contributed by Red Hat. diff -Nru gdb-9.1/sim/arm/ChangeLog gdb-10.2/sim/arm/ChangeLog --- gdb-9.1/sim/arm/ChangeLog 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/sim/arm/ChangeLog 2021-04-25 04:06:26.000000000 +0000 @@ -1,3 +1,15 @@ +2020-08-13 Luis Machado <luis.machado@linaro.org> + + PR sim/26365 + + * wrapper.c (sim_target_parse_command_line): Free discarded argv + entries. + (sim_open): Use a duplicate of argv instead of the original argv. + +2020-01-17 Christian Biesinger <cbiesinger@google.com> + + * iwmmxt.c: Fix spelling error (seperate). + 2019-12-06 Luis Machado <luis.machado@linaro.org> * armemu.c (isize): Move this declaration ... diff -Nru gdb-9.1/sim/arm/iwmmxt.c gdb-10.2/sim/arm/iwmmxt.c --- gdb-9.1/sim/arm/iwmmxt.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/sim/arm/iwmmxt.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* iwmmxt.c -- Intel(r) Wireless MMX(tm) technology co-processor interface. - Copyright (C) 2002-2020 Free Software Foundation, Inc. + Copyright (C) 2002-2021 Free Software Foundation, Inc. Contributed by matthew green (mrg@redhat.com). This program is free software; you can redistribute it and/or modify @@ -3539,7 +3539,7 @@ return ARMul_DONE; } -/* This switch table is moved to a seperate function in order +/* This switch table is moved to a separate function in order to work around a compiler bug in the host compiler... */ static int diff -Nru gdb-9.1/sim/arm/iwmmxt.h gdb-10.2/sim/arm/iwmmxt.h --- gdb-9.1/sim/arm/iwmmxt.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/arm/iwmmxt.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* iwmmxt.h -- Intel(r) Wireless MMX(tm) technology co-processor interface. - Copyright (C) 2002-2020 Free Software Foundation, Inc. + Copyright (C) 2002-2021 Free Software Foundation, Inc. Contributed by matthew green (mrg@redhat.com). This program is free software; you can redistribute it and/or modify diff -Nru gdb-9.1/sim/arm/Makefile.in gdb-10.2/sim/arm/Makefile.in --- gdb-9.1/sim/arm/Makefile.in 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/arm/Makefile.in 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ # Makefile template for Configure for the arm sim library. -# Copyright 1995-2020 Free Software Foundation, Inc. +# Copyright 1995-2021 Free Software Foundation, Inc. # Written by Cygnus Support. # # This program is free software; you can redistribute it and/or modify diff -Nru gdb-9.1/sim/arm/maverick.c gdb-10.2/sim/arm/maverick.c --- gdb-9.1/sim/arm/maverick.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/arm/maverick.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* maverick.c -- Cirrus/DSP co-processor interface. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. Contributed by Aldy Hernandez (aldyh@redhat.com). This program is free software; you can redistribute it and/or modify diff -Nru gdb-9.1/sim/arm/maverick.h gdb-10.2/sim/arm/maverick.h --- gdb-9.1/sim/arm/maverick.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/arm/maverick.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* maverick.h -- Cirrus/DSP co-processor interface header - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. Contributed by Aldy Hernandez (aldyh@redhat.com). This program is free software; you can redistribute it and/or modify diff -Nru gdb-9.1/sim/arm/sim-main.h gdb-10.2/sim/arm/sim-main.h --- gdb-9.1/sim/arm/sim-main.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/arm/sim-main.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Simulation code for the ARM processor. - Copyright (C) 2009-2020 Free Software Foundation, Inc. + Copyright (C) 2009-2021 Free Software Foundation, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/arm/wrapper.c gdb-10.2/sim/arm/wrapper.c --- gdb-9.1/sim/arm/wrapper.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/arm/wrapper.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* run front end support for arm - Copyright (C) 1995-2020 Free Software Foundation, Inc. + Copyright (C) 1995-2021 Free Software Foundation, Inc. This file is part of ARM SIM. @@ -672,7 +672,10 @@ { /* Remove this option from the argv array. */ for (arg = i; arg < argc; arg ++) - argv[arg] = argv[arg + 1]; + { + free (argv[arg]); + argv[arg] = argv[arg + 1]; + } argc --; i --; trace_funcs = 1; @@ -683,7 +686,10 @@ { /* Remove this option from the argv array. */ for (arg = i; arg < argc; arg ++) - argv[arg] = argv[arg + 1]; + { + free (argv[arg]); + argv[arg] = argv[arg + 1]; + } argc --; i --; disas = 1; @@ -697,7 +703,10 @@ { /* Remove this option from the argv array. */ for (arg = i; arg < argc; arg ++) - argv[arg] = argv[arg + 1]; + { + free (argv[arg]); + argv[arg] = argv[arg + 1]; + } argc --; ptr = argv[i]; @@ -733,7 +742,10 @@ /* Remove this option from the argv array. */ for (arg = i; arg < argc; arg ++) - argv[arg] = argv[arg + 1]; + { + free (argv[arg]); + argv[arg] = argv[arg + 1]; + } argc --; i --; } @@ -774,6 +786,7 @@ char * const *argv) { int i; + char **argv_copy; SIM_DESC sd = sim_state_alloc (kind, cb); SIM_ASSERT (STATE_MAGIC (sd) == SIM_MAGIC_NUMBER); @@ -836,21 +849,24 @@ sim_callback = cb; - sim_target_parse_arg_array (argv); + /* Copy over the argv contents so we can modify them. */ + argv_copy = dupargv (argv); - if (argv[1] != NULL) + sim_target_parse_arg_array (argv_copy); + + if (argv_copy[1] != NULL) { int i; /* Scan for memory-size switches. */ - for (i = 0; (argv[i] != NULL) && (argv[i][0] != 0); i++) - if (argv[i][0] == '-' && argv[i][1] == 'm') + for (i = 0; (argv_copy[i] != NULL) && (argv_copy[i][0] != 0); i++) + if (argv_copy[i][0] == '-' && argv_copy[i][1] == 'm') { - if (argv[i][2] != '\0') - mem_size = atoi (&argv[i][2]); - else if (argv[i + 1] != NULL) + if (argv_copy[i][2] != '\0') + mem_size = atoi (&argv_copy[i][2]); + else if (argv_copy[i + 1] != NULL) { - mem_size = atoi (argv[i + 1]); + mem_size = atoi (argv_copy[i + 1]); i++; } else @@ -862,6 +878,8 @@ } } + freeargv (argv_copy); + return sd; } diff -Nru gdb-9.1/sim/avr/interp.c gdb-10.2/sim/avr/interp.c --- gdb-9.1/sim/avr/interp.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/avr/interp.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Simulator for Atmel's AVR core. - Copyright (C) 2009-2020 Free Software Foundation, Inc. + Copyright (C) 2009-2021 Free Software Foundation, Inc. Written by Tristan Gingold, AdaCore. This file is part of GDB, the GNU debugger. diff -Nru gdb-9.1/sim/avr/Makefile.in gdb-10.2/sim/avr/Makefile.in --- gdb-9.1/sim/avr/Makefile.in 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/avr/Makefile.in 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ # Makefile template for Configure for the AVR sim library. -# Copyright (C) 2009-2020 Free Software Foundation, Inc. +# Copyright (C) 2009-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/sim/avr/sim-main.h gdb-10.2/sim/avr/sim-main.h --- gdb-9.1/sim/avr/sim-main.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/avr/sim-main.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Moxie Simulator definition. - Copyright (C) 2009-2020 Free Software Foundation, Inc. + Copyright (C) 2009-2021 Free Software Foundation, Inc. This file is part of GDB, the GNU debugger. diff -Nru gdb-9.1/sim/bfin/aclocal.m4 gdb-10.2/sim/bfin/aclocal.m4 --- gdb-9.1/sim/bfin/aclocal.m4 2018-06-26 21:37:28.000000000 +0000 +++ gdb-10.2/sim/bfin/aclocal.m4 2021-04-25 04:06:26.000000000 +0000 @@ -12,350 +12,6 @@ # PARTICULAR PURPOSE. m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) -# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- -# serial 11 (pkg-config-0.29.1) - -dnl Copyright © 2004 Scott James Remnant <scott@netsplit.com>. -dnl Copyright © 2012-2015 Dan Nicholson <dbn.lists@gmail.com> -dnl -dnl This program is free software; you can redistribute it and/or modify -dnl it under the terms of the GNU General Public License as published by -dnl the Free Software Foundation; either version 2 of the License, or -dnl (at your option) any later version. -dnl -dnl This program is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -dnl General Public License for more details. -dnl -dnl You should have received a copy of the GNU General Public License -dnl along with this program; if not, write to the Free Software -dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -dnl 02111-1307, USA. -dnl -dnl As a special exception to the GNU General Public License, if you -dnl distribute this file as part of a program that contains a -dnl configuration script generated by Autoconf, you may include it under -dnl the same distribution terms that you use for the rest of that -dnl program. - -dnl PKG_PREREQ(MIN-VERSION) -dnl ----------------------- -dnl Since: 0.29 -dnl -dnl Verify that the version of the pkg-config macros are at least -dnl MIN-VERSION. Unlike PKG_PROG_PKG_CONFIG, which checks the user's -dnl installed version of pkg-config, this checks the developer's version -dnl of pkg.m4 when generating configure. -dnl -dnl To ensure that this macro is defined, also add: -dnl m4_ifndef([PKG_PREREQ], -dnl [m4_fatal([must install pkg-config 0.29 or later before running autoconf/autogen])]) -dnl -dnl See the "Since" comment for each macro you use to see what version -dnl of the macros you require. -m4_defun([PKG_PREREQ], -[m4_define([PKG_MACROS_VERSION], [0.29.1]) -m4_if(m4_version_compare(PKG_MACROS_VERSION, [$1]), -1, - [m4_fatal([pkg.m4 version $1 or higher is required but ]PKG_MACROS_VERSION[ found])]) -])dnl PKG_PREREQ - -dnl PKG_PROG_PKG_CONFIG([MIN-VERSION]) -dnl ---------------------------------- -dnl Since: 0.16 -dnl -dnl Search for the pkg-config tool and set the PKG_CONFIG variable to -dnl first found in the path. Checks that the version of pkg-config found -dnl is at least MIN-VERSION. If MIN-VERSION is not specified, 0.9.0 is -dnl used since that's the first version where most current features of -dnl pkg-config existed. -AC_DEFUN([PKG_PROG_PKG_CONFIG], -[m4_pattern_forbid([^_?PKG_[A-Z_]+$]) -m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) -m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) -AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) -AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) -AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) - -if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then - AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) -fi -if test -n "$PKG_CONFIG"; then - _pkg_min_version=m4_default([$1], [0.9.0]) - AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) - if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then - AC_MSG_RESULT([yes]) - else - AC_MSG_RESULT([no]) - PKG_CONFIG="" - fi -fi[]dnl -])dnl PKG_PROG_PKG_CONFIG - -dnl PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) -dnl ------------------------------------------------------------------- -dnl Since: 0.18 -dnl -dnl Check to see whether a particular set of modules exists. Similar to -dnl PKG_CHECK_MODULES(), but does not set variables or print errors. -dnl -dnl Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) -dnl only at the first occurence in configure.ac, so if the first place -dnl it's called might be skipped (such as if it is within an "if", you -dnl have to call PKG_CHECK_EXISTS manually -AC_DEFUN([PKG_CHECK_EXISTS], -[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl -if test -n "$PKG_CONFIG" && \ - AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then - m4_default([$2], [:]) -m4_ifvaln([$3], [else - $3])dnl -fi]) - -dnl _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) -dnl --------------------------------------------- -dnl Internal wrapper calling pkg-config via PKG_CONFIG and setting -dnl pkg_failed based on the result. -m4_define([_PKG_CONFIG], -[if test -n "$$1"; then - pkg_cv_[]$1="$$1" - elif test -n "$PKG_CONFIG"; then - PKG_CHECK_EXISTS([$3], - [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null` - test "x$?" != "x0" && pkg_failed=yes ], - [pkg_failed=yes]) - else - pkg_failed=untried -fi[]dnl -])dnl _PKG_CONFIG - -dnl _PKG_SHORT_ERRORS_SUPPORTED -dnl --------------------------- -dnl Internal check to see if pkg-config supports short errors. -AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], -[AC_REQUIRE([PKG_PROG_PKG_CONFIG]) -if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then - _pkg_short_errors_supported=yes -else - _pkg_short_errors_supported=no -fi[]dnl -])dnl _PKG_SHORT_ERRORS_SUPPORTED - - -dnl PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], -dnl [ACTION-IF-NOT-FOUND]) -dnl -------------------------------------------------------------- -dnl Since: 0.4.0 -dnl -dnl Note that if there is a possibility the first call to -dnl PKG_CHECK_MODULES might not happen, you should be sure to include an -dnl explicit call to PKG_PROG_PKG_CONFIG in your configure.ac -AC_DEFUN([PKG_CHECK_MODULES], -[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl -AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl -AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl - -pkg_failed=no -AC_MSG_CHECKING([for $1]) - -_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) -_PKG_CONFIG([$1][_LIBS], [libs], [$2]) - -m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS -and $1[]_LIBS to avoid the need to call pkg-config. -See the pkg-config man page for more details.]) - -if test $pkg_failed = yes; then - AC_MSG_RESULT([no]) - _PKG_SHORT_ERRORS_SUPPORTED - if test $_pkg_short_errors_supported = yes; then - $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1` - else - $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1` - fi - # Put the nasty error message in config.log where it belongs - echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD - - m4_default([$4], [AC_MSG_ERROR( -[Package requirements ($2) were not met: - -$$1_PKG_ERRORS - -Consider adjusting the PKG_CONFIG_PATH environment variable if you -installed software in a non-standard prefix. - -_PKG_TEXT])[]dnl - ]) -elif test $pkg_failed = untried; then - AC_MSG_RESULT([no]) - m4_default([$4], [AC_MSG_FAILURE( -[The pkg-config script could not be found or is too old. Make sure it -is in your PATH or set the PKG_CONFIG environment variable to the full -path to pkg-config. - -_PKG_TEXT - -To get pkg-config, see <http://pkg-config.freedesktop.org/>.])[]dnl - ]) -else - $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS - $1[]_LIBS=$pkg_cv_[]$1[]_LIBS - AC_MSG_RESULT([yes]) - $3 -fi[]dnl -])dnl PKG_CHECK_MODULES - - -dnl PKG_CHECK_MODULES_STATIC(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], -dnl [ACTION-IF-NOT-FOUND]) -dnl --------------------------------------------------------------------- -dnl Since: 0.29 -dnl -dnl Checks for existence of MODULES and gathers its build flags with -dnl static libraries enabled. Sets VARIABLE-PREFIX_CFLAGS from --cflags -dnl and VARIABLE-PREFIX_LIBS from --libs. -dnl -dnl Note that if there is a possibility the first call to -dnl PKG_CHECK_MODULES_STATIC might not happen, you should be sure to -dnl include an explicit call to PKG_PROG_PKG_CONFIG in your -dnl configure.ac. -AC_DEFUN([PKG_CHECK_MODULES_STATIC], -[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl -_save_PKG_CONFIG=$PKG_CONFIG -PKG_CONFIG="$PKG_CONFIG --static" -PKG_CHECK_MODULES($@) -PKG_CONFIG=$_save_PKG_CONFIG[]dnl -])dnl PKG_CHECK_MODULES_STATIC - - -dnl PKG_INSTALLDIR([DIRECTORY]) -dnl ------------------------- -dnl Since: 0.27 -dnl -dnl Substitutes the variable pkgconfigdir as the location where a module -dnl should install pkg-config .pc files. By default the directory is -dnl $libdir/pkgconfig, but the default can be changed by passing -dnl DIRECTORY. The user can override through the --with-pkgconfigdir -dnl parameter. -AC_DEFUN([PKG_INSTALLDIR], -[m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])]) -m4_pushdef([pkg_description], - [pkg-config installation directory @<:@]pkg_default[@:>@]) -AC_ARG_WITH([pkgconfigdir], - [AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],, - [with_pkgconfigdir=]pkg_default) -AC_SUBST([pkgconfigdir], [$with_pkgconfigdir]) -m4_popdef([pkg_default]) -m4_popdef([pkg_description]) -])dnl PKG_INSTALLDIR - - -dnl PKG_NOARCH_INSTALLDIR([DIRECTORY]) -dnl -------------------------------- -dnl Since: 0.27 -dnl -dnl Substitutes the variable noarch_pkgconfigdir as the location where a -dnl module should install arch-independent pkg-config .pc files. By -dnl default the directory is $datadir/pkgconfig, but the default can be -dnl changed by passing DIRECTORY. The user can override through the -dnl --with-noarch-pkgconfigdir parameter. -AC_DEFUN([PKG_NOARCH_INSTALLDIR], -[m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])]) -m4_pushdef([pkg_description], - [pkg-config arch-independent installation directory @<:@]pkg_default[@:>@]) -AC_ARG_WITH([noarch-pkgconfigdir], - [AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],, - [with_noarch_pkgconfigdir=]pkg_default) -AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir]) -m4_popdef([pkg_default]) -m4_popdef([pkg_description]) -])dnl PKG_NOARCH_INSTALLDIR - - -dnl PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE, -dnl [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) -dnl ------------------------------------------- -dnl Since: 0.28 -dnl -dnl Retrieves the value of the pkg-config variable for the given module. -AC_DEFUN([PKG_CHECK_VAR], -[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl -AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl - -_PKG_CONFIG([$1], [variable="][$3]["], [$2]) -AS_VAR_COPY([$1], [pkg_cv_][$1]) - -AS_VAR_IF([$1], [""], [$5], [$4])dnl -])dnl PKG_CHECK_VAR - -dnl PKG_WITH_MODULES(VARIABLE-PREFIX, MODULES, -dnl [ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND], -dnl [DESCRIPTION], [DEFAULT]) -dnl ------------------------------------------ -dnl -dnl Prepare a "--with-" configure option using the lowercase -dnl [VARIABLE-PREFIX] name, merging the behaviour of AC_ARG_WITH and -dnl PKG_CHECK_MODULES in a single macro. -AC_DEFUN([PKG_WITH_MODULES], -[ -m4_pushdef([with_arg], m4_tolower([$1])) - -m4_pushdef([description], - [m4_default([$5], [build with ]with_arg[ support])]) - -m4_pushdef([def_arg], [m4_default([$6], [auto])]) -m4_pushdef([def_action_if_found], [AS_TR_SH([with_]with_arg)=yes]) -m4_pushdef([def_action_if_not_found], [AS_TR_SH([with_]with_arg)=no]) - -m4_case(def_arg, - [yes],[m4_pushdef([with_without], [--without-]with_arg)], - [m4_pushdef([with_without],[--with-]with_arg)]) - -AC_ARG_WITH(with_arg, - AS_HELP_STRING(with_without, description[ @<:@default=]def_arg[@:>@]),, - [AS_TR_SH([with_]with_arg)=def_arg]) - -AS_CASE([$AS_TR_SH([with_]with_arg)], - [yes],[PKG_CHECK_MODULES([$1],[$2],$3,$4)], - [auto],[PKG_CHECK_MODULES([$1],[$2], - [m4_n([def_action_if_found]) $3], - [m4_n([def_action_if_not_found]) $4])]) - -m4_popdef([with_arg]) -m4_popdef([description]) -m4_popdef([def_arg]) - -])dnl PKG_WITH_MODULES - -dnl PKG_HAVE_WITH_MODULES(VARIABLE-PREFIX, MODULES, -dnl [DESCRIPTION], [DEFAULT]) -dnl ----------------------------------------------- -dnl -dnl Convenience macro to trigger AM_CONDITIONAL after PKG_WITH_MODULES -dnl check._[VARIABLE-PREFIX] is exported as make variable. -AC_DEFUN([PKG_HAVE_WITH_MODULES], -[ -PKG_WITH_MODULES([$1],[$2],,,[$3],[$4]) - -AM_CONDITIONAL([HAVE_][$1], - [test "$AS_TR_SH([with_]m4_tolower([$1]))" = "yes"]) -])dnl PKG_HAVE_WITH_MODULES - -dnl PKG_HAVE_DEFINE_WITH_MODULES(VARIABLE-PREFIX, MODULES, -dnl [DESCRIPTION], [DEFAULT]) -dnl ------------------------------------------------------ -dnl -dnl Convenience macro to run AM_CONDITIONAL and AC_DEFINE after -dnl PKG_WITH_MODULES check. HAVE_[VARIABLE-PREFIX] is exported as make -dnl and preprocessor variable. -AC_DEFUN([PKG_HAVE_DEFINE_WITH_MODULES], -[ -PKG_HAVE_WITH_MODULES([$1],[$2],[$3],[$4]) - -AS_IF([test "$AS_TR_SH([with_]m4_tolower([$1]))" = "yes"], - [AC_DEFINE([HAVE_][$1], 1, [Enable ]m4_tolower([$1])[ support])]) -])dnl PKG_HAVE_DEFINE_WITH_MODULES - # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997-2017 Free Software Foundation, Inc. diff -Nru gdb-9.1/sim/bfin/arch.h gdb-10.2/sim/bfin/arch.h --- gdb-9.1/sim/bfin/arch.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/bfin/arch.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Simulator for Analog Devices Blackfin processors. - Copyright (C) 2005-2020 Free Software Foundation, Inc. + Copyright (C) 2005-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/bfin/bfin-sim.c gdb-10.2/sim/bfin/bfin-sim.c --- gdb-9.1/sim/bfin/bfin-sim.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/bfin/bfin-sim.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Simulator for Analog Devices Blackfin processors. - Copyright (C) 2005-2020 Free Software Foundation, Inc. + Copyright (C) 2005-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/bfin/bfin-sim.h gdb-10.2/sim/bfin/bfin-sim.h --- gdb-9.1/sim/bfin/bfin-sim.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/bfin/bfin-sim.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Simulator for Analog Devices Blackfin processors. - Copyright (C) 2005-2020 Free Software Foundation, Inc. + Copyright (C) 2005-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/bfin/ChangeLog gdb-10.2/sim/bfin/ChangeLog --- gdb-9.1/sim/bfin/ChangeLog 2019-02-23 12:20:11.000000000 +0000 +++ gdb-10.2/sim/bfin/ChangeLog 2021-04-25 04:06:26.000000000 +0000 @@ -1,3 +1,11 @@ +2020-08-21 Simon Marchi <simon.marchi@polymtl.ca> + + * configure.ac: Include config/pkg.m4. + +2020-07-29 Simon Marchi <simon.marchi@efficios.com> + + * aclocal.m4, configure: Re-generate. + 2017-09-06 John Baldwin <jhb@FreeBSD.org> * configure: Regenerate. diff -Nru gdb-9.1/sim/bfin/configure gdb-10.2/sim/bfin/configure --- gdb-9.1/sim/bfin/configure 2018-06-26 21:37:28.000000000 +0000 +++ gdb-10.2/sim/bfin/configure 2021-04-25 04:06:26.000000000 +0000 @@ -4190,6 +4190,26 @@ +# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- +# serial 12 (pkg-config-0.29.2) + + + + + + + + + + + + + + + + + + ac_ext=c ac_cpp='$CPP $CPPFLAGS' @@ -12902,7 +12922,7 @@ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 12905 "configure" +#line 12925 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -13008,7 +13028,7 @@ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 13011 "configure" +#line 13031 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -14063,8 +14083,8 @@ fi pkg_failed=no -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for SDL" >&5 -$as_echo_n "checking for SDL... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sdl" >&5 +$as_echo_n "checking for sdl... " >&6; } if test -n "$SDL_CFLAGS"; then pkg_cv_SDL_CFLAGS="$SDL_CFLAGS" @@ -14101,10 +14121,34 @@ pkg_failed=untried fi +if test $pkg_failed = no; then + pkg_save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $pkg_cv_SDL_LIBS" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + +else + pkg_failed=yes +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$pkg_save_LDFLAGS +fi + if test $pkg_failed = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then @@ -14122,7 +14166,7 @@ : elif test $pkg_failed = untried; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } : else diff -Nru gdb-9.1/sim/bfin/configure.ac gdb-10.2/sim/bfin/configure.ac --- gdb-9.1/sim/bfin/configure.ac 2019-02-23 12:20:11.000000000 +0000 +++ gdb-10.2/sim/bfin/configure.ac 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,7 @@ dnl Process this file with autoconf to produce a configure script. AC_INIT(Makefile.in) sinclude(../common/acinclude.m4) +m4_include([../../config/pkg.m4]) SIM_AC_COMMON diff -Nru gdb-9.1/sim/bfin/devices.c gdb-10.2/sim/bfin/devices.c --- gdb-9.1/sim/bfin/devices.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/bfin/devices.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Blackfin device support. - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/bfin/devices.h gdb-10.2/sim/bfin/devices.h --- gdb-9.1/sim/bfin/devices.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/bfin/devices.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Common Blackfin device stuff. - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/bfin/dv-bfin_cec.c gdb-10.2/sim/bfin/dv-bfin_cec.c --- gdb-9.1/sim/bfin/dv-bfin_cec.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/bfin/dv-bfin_cec.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Blackfin Core Event Controller (CEC) model. - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/bfin/dv-bfin_cec.h gdb-10.2/sim/bfin/dv-bfin_cec.h --- gdb-9.1/sim/bfin/dv-bfin_cec.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/bfin/dv-bfin_cec.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Blackfin Core Event Controller (CEC) model. - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/bfin/dv-bfin_ctimer.c gdb-10.2/sim/bfin/dv-bfin_ctimer.c --- gdb-9.1/sim/bfin/dv-bfin_ctimer.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/bfin/dv-bfin_ctimer.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Blackfin Core Timer model. - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/bfin/dv-bfin_ctimer.h gdb-10.2/sim/bfin/dv-bfin_ctimer.h --- gdb-9.1/sim/bfin/dv-bfin_ctimer.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/bfin/dv-bfin_ctimer.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Blackfin Core Timer model. - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/bfin/dv-bfin_dma.c gdb-10.2/sim/bfin/dv-bfin_dma.c --- gdb-9.1/sim/bfin/dv-bfin_dma.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/bfin/dv-bfin_dma.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Blackfin Direct Memory Access (DMA) Channel model. - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/bfin/dv-bfin_dmac.c gdb-10.2/sim/bfin/dv-bfin_dmac.c --- gdb-9.1/sim/bfin/dv-bfin_dmac.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/bfin/dv-bfin_dmac.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Blackfin Direct Memory Access (DMA) Controller model. - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/bfin/dv-bfin_dmac.h gdb-10.2/sim/bfin/dv-bfin_dmac.h --- gdb-9.1/sim/bfin/dv-bfin_dmac.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/bfin/dv-bfin_dmac.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Blackfin Direct Memory Access (DMA) Controller model. - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/bfin/dv-bfin_dma.h gdb-10.2/sim/bfin/dv-bfin_dma.h --- gdb-9.1/sim/bfin/dv-bfin_dma.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/bfin/dv-bfin_dma.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Blackfin Direct Memory Access (DMA) Channel model. - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/bfin/dv-bfin_ebiu_amc.c gdb-10.2/sim/bfin/dv-bfin_ebiu_amc.c --- gdb-9.1/sim/bfin/dv-bfin_ebiu_amc.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/bfin/dv-bfin_ebiu_amc.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,7 +1,7 @@ /* Blackfin External Bus Interface Unit (EBIU) Asynchronous Memory Controller (AMC) model. - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/bfin/dv-bfin_ebiu_amc.h gdb-10.2/sim/bfin/dv-bfin_ebiu_amc.h --- gdb-9.1/sim/bfin/dv-bfin_ebiu_amc.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/bfin/dv-bfin_ebiu_amc.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,7 +1,7 @@ /* Blackfin External Bus Interface Unit (EBIU) Asynchronous Memory Controller (AMC) model. - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/bfin/dv-bfin_ebiu_ddrc.c gdb-10.2/sim/bfin/dv-bfin_ebiu_ddrc.c --- gdb-9.1/sim/bfin/dv-bfin_ebiu_ddrc.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/bfin/dv-bfin_ebiu_ddrc.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Blackfin External Bus Interface Unit (EBIU) DDR Controller (DDRC) Model. - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/bfin/dv-bfin_ebiu_ddrc.h gdb-10.2/sim/bfin/dv-bfin_ebiu_ddrc.h --- gdb-9.1/sim/bfin/dv-bfin_ebiu_ddrc.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/bfin/dv-bfin_ebiu_ddrc.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Blackfin External Bus Interface Unit (EBIU) DDR Controller (DDRC) Model. - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/bfin/dv-bfin_ebiu_sdc.c gdb-10.2/sim/bfin/dv-bfin_ebiu_sdc.c --- gdb-9.1/sim/bfin/dv-bfin_ebiu_sdc.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/bfin/dv-bfin_ebiu_sdc.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Blackfin External Bus Interface Unit (EBIU) SDRAM Controller (SDC) Model. - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/bfin/dv-bfin_ebiu_sdc.h gdb-10.2/sim/bfin/dv-bfin_ebiu_sdc.h --- gdb-9.1/sim/bfin/dv-bfin_ebiu_sdc.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/bfin/dv-bfin_ebiu_sdc.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Blackfin External Bus Interface Unit (EBIU) SDRAM Controller (SDC) Model. - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/bfin/dv-bfin_emac.c gdb-10.2/sim/bfin/dv-bfin_emac.c --- gdb-9.1/sim/bfin/dv-bfin_emac.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/bfin/dv-bfin_emac.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Blackfin Ethernet Media Access Controller (EMAC) model. - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/bfin/dv-bfin_emac.h gdb-10.2/sim/bfin/dv-bfin_emac.h --- gdb-9.1/sim/bfin/dv-bfin_emac.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/bfin/dv-bfin_emac.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Blackfin Ethernet Media Access Controller (EMAC) model. - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/bfin/dv-bfin_eppi.c gdb-10.2/sim/bfin/dv-bfin_eppi.c --- gdb-9.1/sim/bfin/dv-bfin_eppi.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/bfin/dv-bfin_eppi.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,7 +1,7 @@ /* Blackfin Enhanced Parallel Port Interface (EPPI) model For "new style" PPIs on BF54x/etc... parts. - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/bfin/dv-bfin_eppi.h gdb-10.2/sim/bfin/dv-bfin_eppi.h --- gdb-9.1/sim/bfin/dv-bfin_eppi.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/bfin/dv-bfin_eppi.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,7 +1,7 @@ /* Blackfin Enhanced Parallel Port Interface (EPPI) model For "new style" PPIs on BF54x/etc... parts. - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/bfin/dv-bfin_evt.c gdb-10.2/sim/bfin/dv-bfin_evt.c --- gdb-9.1/sim/bfin/dv-bfin_evt.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/bfin/dv-bfin_evt.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Blackfin Event Vector Table (EVT) model. - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/bfin/dv-bfin_evt.h gdb-10.2/sim/bfin/dv-bfin_evt.h --- gdb-9.1/sim/bfin/dv-bfin_evt.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/bfin/dv-bfin_evt.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Blackfin Event Vector Table (EVT) model. - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/bfin/dv-bfin_gpio2.c gdb-10.2/sim/bfin/dv-bfin_gpio2.c --- gdb-9.1/sim/bfin/dv-bfin_gpio2.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/bfin/dv-bfin_gpio2.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,7 +1,7 @@ /* Blackfin General Purpose Ports (GPIO) model For "new style" GPIOs on BF54x parts. - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. and Mike Frysinger. This file is part of simulators. diff -Nru gdb-9.1/sim/bfin/dv-bfin_gpio2.h gdb-10.2/sim/bfin/dv-bfin_gpio2.h --- gdb-9.1/sim/bfin/dv-bfin_gpio2.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/bfin/dv-bfin_gpio2.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,7 +1,7 @@ /* Blackfin General Purpose Ports (GPIO) model For "new style" GPIOs on BF54x parts. - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. and Mike Frysinger. This file is part of simulators. diff -Nru gdb-9.1/sim/bfin/dv-bfin_gpio.c gdb-10.2/sim/bfin/dv-bfin_gpio.c --- gdb-9.1/sim/bfin/dv-bfin_gpio.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/bfin/dv-bfin_gpio.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Blackfin General Purpose Ports (GPIO) model - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/bfin/dv-bfin_gpio.h gdb-10.2/sim/bfin/dv-bfin_gpio.h --- gdb-9.1/sim/bfin/dv-bfin_gpio.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/bfin/dv-bfin_gpio.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Blackfin General Purpose Ports (GPIO) model - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/bfin/dv-bfin_gptimer.c gdb-10.2/sim/bfin/dv-bfin_gptimer.c --- gdb-9.1/sim/bfin/dv-bfin_gptimer.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/bfin/dv-bfin_gptimer.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Blackfin General Purpose Timers (GPtimer) model - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/bfin/dv-bfin_gptimer.h gdb-10.2/sim/bfin/dv-bfin_gptimer.h --- gdb-9.1/sim/bfin/dv-bfin_gptimer.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/bfin/dv-bfin_gptimer.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Blackfin General Purpose Timers (GPtimer) model - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/bfin/dv-bfin_jtag.c gdb-10.2/sim/bfin/dv-bfin_jtag.c --- gdb-9.1/sim/bfin/dv-bfin_jtag.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/bfin/dv-bfin_jtag.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Blackfin JTAG model. - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/bfin/dv-bfin_jtag.h gdb-10.2/sim/bfin/dv-bfin_jtag.h --- gdb-9.1/sim/bfin/dv-bfin_jtag.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/bfin/dv-bfin_jtag.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Blackfin JTAG model. - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/bfin/dv-bfin_mmu.c gdb-10.2/sim/bfin/dv-bfin_mmu.c --- gdb-9.1/sim/bfin/dv-bfin_mmu.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/bfin/dv-bfin_mmu.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Blackfin Memory Management Unit (MMU) model. - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/bfin/dv-bfin_mmu.h gdb-10.2/sim/bfin/dv-bfin_mmu.h --- gdb-9.1/sim/bfin/dv-bfin_mmu.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/bfin/dv-bfin_mmu.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Blackfin Memory Management Unit (MMU) model. - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/bfin/dv-bfin_nfc.c gdb-10.2/sim/bfin/dv-bfin_nfc.c --- gdb-9.1/sim/bfin/dv-bfin_nfc.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/bfin/dv-bfin_nfc.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Blackfin NAND Flash Memory Controller (NFC) model - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/bfin/dv-bfin_nfc.h gdb-10.2/sim/bfin/dv-bfin_nfc.h --- gdb-9.1/sim/bfin/dv-bfin_nfc.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/bfin/dv-bfin_nfc.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Blackfin NAND Flash Memory Controller (NFC) model - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/bfin/dv-bfin_otp.c gdb-10.2/sim/bfin/dv-bfin_otp.c --- gdb-9.1/sim/bfin/dv-bfin_otp.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/bfin/dv-bfin_otp.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Blackfin One-Time Programmable Memory (OTP) model - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/bfin/dv-bfin_otp.h gdb-10.2/sim/bfin/dv-bfin_otp.h --- gdb-9.1/sim/bfin/dv-bfin_otp.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/bfin/dv-bfin_otp.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Blackfin One-Time Programmable Memory (OTP) model - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/bfin/dv-bfin_pfmon.c gdb-10.2/sim/bfin/dv-bfin_pfmon.c --- gdb-9.1/sim/bfin/dv-bfin_pfmon.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/bfin/dv-bfin_pfmon.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Blackfin Performance Monitor model. - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/bfin/dv-bfin_pfmon.h gdb-10.2/sim/bfin/dv-bfin_pfmon.h --- gdb-9.1/sim/bfin/dv-bfin_pfmon.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/bfin/dv-bfin_pfmon.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Blackfin Performance Monitor model. - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/bfin/dv-bfin_pint.c gdb-10.2/sim/bfin/dv-bfin_pint.c --- gdb-9.1/sim/bfin/dv-bfin_pint.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/bfin/dv-bfin_pint.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Blackfin Pin Interrupt (PINT) model - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. and Mike Frysinger. This file is part of simulators. diff -Nru gdb-9.1/sim/bfin/dv-bfin_pint.h gdb-10.2/sim/bfin/dv-bfin_pint.h --- gdb-9.1/sim/bfin/dv-bfin_pint.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/bfin/dv-bfin_pint.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Blackfin Pin Interrupt (PINT) model - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. and Mike Frysinger. This file is part of simulators. diff -Nru gdb-9.1/sim/bfin/dv-bfin_pll.c gdb-10.2/sim/bfin/dv-bfin_pll.c --- gdb-9.1/sim/bfin/dv-bfin_pll.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/bfin/dv-bfin_pll.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Blackfin Phase Lock Loop (PLL) model. - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/bfin/dv-bfin_pll.h gdb-10.2/sim/bfin/dv-bfin_pll.h --- gdb-9.1/sim/bfin/dv-bfin_pll.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/bfin/dv-bfin_pll.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Blackfin Phase Lock Loop (PLL) model. - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/bfin/dv-bfin_ppi.c gdb-10.2/sim/bfin/dv-bfin_ppi.c --- gdb-9.1/sim/bfin/dv-bfin_ppi.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/bfin/dv-bfin_ppi.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,7 +1,7 @@ /* Blackfin Parallel Port Interface (PPI) model For "old style" PPIs on BF53x/etc... parts. - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/bfin/dv-bfin_ppi.h gdb-10.2/sim/bfin/dv-bfin_ppi.h --- gdb-9.1/sim/bfin/dv-bfin_ppi.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/bfin/dv-bfin_ppi.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,7 +1,7 @@ /* Blackfin Parallel Port Interface (PPI) model For "old style" PPIs on BF53x/etc... parts. - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/bfin/dv-bfin_rtc.c gdb-10.2/sim/bfin/dv-bfin_rtc.c --- gdb-9.1/sim/bfin/dv-bfin_rtc.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/bfin/dv-bfin_rtc.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Blackfin Real Time Clock (RTC) model. - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/bfin/dv-bfin_rtc.h gdb-10.2/sim/bfin/dv-bfin_rtc.h --- gdb-9.1/sim/bfin/dv-bfin_rtc.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/bfin/dv-bfin_rtc.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Blackfin Real Time Clock (RTC) model. - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/bfin/dv-bfin_sic.c gdb-10.2/sim/bfin/dv-bfin_sic.c --- gdb-9.1/sim/bfin/dv-bfin_sic.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/bfin/dv-bfin_sic.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Blackfin System Interrupt Controller (SIC) model. - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/bfin/dv-bfin_sic.h gdb-10.2/sim/bfin/dv-bfin_sic.h --- gdb-9.1/sim/bfin/dv-bfin_sic.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/bfin/dv-bfin_sic.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Blackfin System Interrupt Controller (SIC) model. - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/bfin/dv-bfin_spi.c gdb-10.2/sim/bfin/dv-bfin_spi.c --- gdb-9.1/sim/bfin/dv-bfin_spi.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/bfin/dv-bfin_spi.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Blackfin Serial Peripheral Interface (SPI) model - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/bfin/dv-bfin_spi.h gdb-10.2/sim/bfin/dv-bfin_spi.h --- gdb-9.1/sim/bfin/dv-bfin_spi.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/bfin/dv-bfin_spi.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Blackfin Serial Peripheral Interface (SPI) model - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/bfin/dv-bfin_trace.c gdb-10.2/sim/bfin/dv-bfin_trace.c --- gdb-9.1/sim/bfin/dv-bfin_trace.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/bfin/dv-bfin_trace.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Blackfin Trace (TBUF) model. - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/bfin/dv-bfin_trace.h gdb-10.2/sim/bfin/dv-bfin_trace.h --- gdb-9.1/sim/bfin/dv-bfin_trace.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/bfin/dv-bfin_trace.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Blackfin Trace (TBUF) model. - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/bfin/dv-bfin_twi.c gdb-10.2/sim/bfin/dv-bfin_twi.c --- gdb-9.1/sim/bfin/dv-bfin_twi.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/bfin/dv-bfin_twi.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Blackfin Two Wire Interface (TWI) model - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/bfin/dv-bfin_twi.h gdb-10.2/sim/bfin/dv-bfin_twi.h --- gdb-9.1/sim/bfin/dv-bfin_twi.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/bfin/dv-bfin_twi.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Blackfin Two Wire Interface (TWI) model - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/bfin/dv-bfin_uart2.c gdb-10.2/sim/bfin/dv-bfin_uart2.c --- gdb-9.1/sim/bfin/dv-bfin_uart2.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/bfin/dv-bfin_uart2.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,7 +1,7 @@ /* Blackfin Universal Asynchronous Receiver/Transmitter (UART) model. For "new style" UARTs on BF50x/BF54x parts. - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/bfin/dv-bfin_uart2.h gdb-10.2/sim/bfin/dv-bfin_uart2.h --- gdb-9.1/sim/bfin/dv-bfin_uart2.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/bfin/dv-bfin_uart2.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,7 +1,7 @@ /* Blackfin Universal Asynchronous Receiver/Transmitter (UART) model. For "new style" UARTs on BF50x/BF54x parts. - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/bfin/dv-bfin_uart.c gdb-10.2/sim/bfin/dv-bfin_uart.c --- gdb-9.1/sim/bfin/dv-bfin_uart.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/bfin/dv-bfin_uart.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,7 +1,7 @@ /* Blackfin Universal Asynchronous Receiver/Transmitter (UART) model. For "old style" UARTs on BF53x/etc... parts. - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/bfin/dv-bfin_uart.h gdb-10.2/sim/bfin/dv-bfin_uart.h --- gdb-9.1/sim/bfin/dv-bfin_uart.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/bfin/dv-bfin_uart.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,7 +1,7 @@ /* Blackfin Universal Asynchronous Receiver/Transmitter (UART) model. For "old style" UARTs on BF53x/etc... parts. - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/bfin/dv-bfin_wdog.c gdb-10.2/sim/bfin/dv-bfin_wdog.c --- gdb-9.1/sim/bfin/dv-bfin_wdog.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/bfin/dv-bfin_wdog.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Blackfin Watchdog (WDOG) model. - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/bfin/dv-bfin_wdog.h gdb-10.2/sim/bfin/dv-bfin_wdog.h --- gdb-9.1/sim/bfin/dv-bfin_wdog.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/bfin/dv-bfin_wdog.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Blackfin Watchdog (WDOG) model. - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/bfin/dv-bfin_wp.c gdb-10.2/sim/bfin/dv-bfin_wp.c --- gdb-9.1/sim/bfin/dv-bfin_wp.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/bfin/dv-bfin_wp.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Blackfin Watchpoint (WP) model. - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/bfin/dv-bfin_wp.h gdb-10.2/sim/bfin/dv-bfin_wp.h --- gdb-9.1/sim/bfin/dv-bfin_wp.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/bfin/dv-bfin_wp.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Blackfin Watchpoint (WP) model. - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/bfin/dv-eth_phy.c gdb-10.2/sim/bfin/dv-eth_phy.c --- gdb-9.1/sim/bfin/dv-eth_phy.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/bfin/dv-eth_phy.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Ethernet Physical Receiver model. - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/bfin/gui.c gdb-10.2/sim/bfin/gui.c --- gdb-9.1/sim/bfin/gui.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/bfin/gui.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Blackfin GUI (SDL) helper code - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/bfin/gui.h gdb-10.2/sim/bfin/gui.h --- gdb-9.1/sim/bfin/gui.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/bfin/gui.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Blackfin GUI (SDL) helper code - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/bfin/insn_list.def gdb-10.2/sim/bfin/insn_list.def --- gdb-9.1/sim/bfin/insn_list.def 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/bfin/insn_list.def 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Blackfin instruction classes list - Copyright (C) 2005-2020 Free Software Foundation, Inc. + Copyright (C) 2005-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/bfin/interp.c gdb-10.2/sim/bfin/interp.c --- gdb-9.1/sim/bfin/interp.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/bfin/interp.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Simulator for Analog Devices Blackfin processors. - Copyright (C) 2005-2020 Free Software Foundation, Inc. + Copyright (C) 2005-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/bfin/linux-fixed-code.s gdb-10.2/sim/bfin/linux-fixed-code.s --- gdb-9.1/sim/bfin/linux-fixed-code.s 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/bfin/linux-fixed-code.s 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Linux fixed code userspace ABI - Copyright (C) 2005-2020 Free Software Foundation, Inc. + Copyright (C) 2005-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/bfin/machs.c gdb-10.2/sim/bfin/machs.c --- gdb-9.1/sim/bfin/machs.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/bfin/machs.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Simulator for Analog Devices Blackfin processors. - Copyright (C) 2005-2020 Free Software Foundation, Inc. + Copyright (C) 2005-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. and Mike Frysinger. This file is part of simulators. diff -Nru gdb-9.1/sim/bfin/machs.h gdb-10.2/sim/bfin/machs.h --- gdb-9.1/sim/bfin/machs.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/bfin/machs.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Simulator for Analog Devices Blackfin processors. - Copyright (C) 2005-2020 Free Software Foundation, Inc. + Copyright (C) 2005-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/bfin/Makefile.in gdb-10.2/sim/bfin/Makefile.in --- gdb-9.1/sim/bfin/Makefile.in 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/bfin/Makefile.in 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ # Makefile template for Configure for the Blackfin simulator. -# Copyright (C) 2005-2020 Free Software Foundation, Inc. +# Copyright (C) 2005-2021 Free Software Foundation, Inc. # Written by Analog Devices, Inc. # # This program is free software; you can redistribute it and/or modify diff -Nru gdb-9.1/sim/bfin/proc_list.def gdb-10.2/sim/bfin/proc_list.def --- gdb-9.1/sim/bfin/proc_list.def 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/bfin/proc_list.def 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Blackfin processor list - Copyright (C) 2005-2020 Free Software Foundation, Inc. + Copyright (C) 2005-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/bfin/sim-main.h gdb-10.2/sim/bfin/sim-main.h --- gdb-9.1/sim/bfin/sim-main.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/bfin/sim-main.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Simulator for Analog Devices Blackfin processors. - Copyright (C) 2005-2020 Free Software Foundation, Inc. + Copyright (C) 2005-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/bpf/aclocal.m4 gdb-10.2/sim/bpf/aclocal.m4 --- gdb-9.1/sim/bpf/aclocal.m4 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/sim/bpf/aclocal.m4 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,119 @@ +# generated automatically by aclocal 1.15.1 -*- Autoconf -*- + +# Copyright (C) 1996-2017 Free Software Foundation, Inc. + +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) +# AM_CONDITIONAL -*- Autoconf -*- + +# Copyright (C) 1997-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_CONDITIONAL(NAME, SHELL-CONDITION) +# ------------------------------------- +# Define a conditional. +AC_DEFUN([AM_CONDITIONAL], +[AC_PREREQ([2.52])dnl + m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], + [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl +AC_SUBST([$1_TRUE])dnl +AC_SUBST([$1_FALSE])dnl +_AM_SUBST_NOTMAKE([$1_TRUE])dnl +_AM_SUBST_NOTMAKE([$1_FALSE])dnl +m4_define([_AM_COND_VALUE_$1], [$2])dnl +if $2; then + $1_TRUE= + $1_FALSE='#' +else + $1_TRUE='#' + $1_FALSE= +fi +AC_CONFIG_COMMANDS_PRE( +[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then + AC_MSG_ERROR([[conditional "$1" was never defined. +Usually this means the macro was only invoked conditionally.]]) +fi])]) + +# Copyright (C) 2003-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# Check whether the underlying file-system supports filenames +# with a leading dot. For instance MS-DOS doesn't. +AC_DEFUN([AM_SET_LEADING_DOT], +[rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null +AC_SUBST([am__leading_dot])]) + +# Add --enable-maintainer-mode option to configure. -*- Autoconf -*- +# From Jim Meyering + +# Copyright (C) 1996-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_MAINTAINER_MODE([DEFAULT-MODE]) +# ---------------------------------- +# Control maintainer-specific portions of Makefiles. +# Default is to disable them, unless 'enable' is passed literally. +# For symmetry, 'disable' may be passed as well. Anyway, the user +# can override the default with the --enable/--disable switch. +AC_DEFUN([AM_MAINTAINER_MODE], +[m4_case(m4_default([$1], [disable]), + [enable], [m4_define([am_maintainer_other], [disable])], + [disable], [m4_define([am_maintainer_other], [enable])], + [m4_define([am_maintainer_other], [enable]) + m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])]) +AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) + dnl maintainer-mode's default is 'disable' unless 'enable' is passed + AC_ARG_ENABLE([maintainer-mode], + [AS_HELP_STRING([--]am_maintainer_other[-maintainer-mode], + am_maintainer_other[ make rules and dependencies not useful + (and sometimes confusing) to the casual installer])], + [USE_MAINTAINER_MODE=$enableval], + [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) + AC_MSG_RESULT([$USE_MAINTAINER_MODE]) + AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) + MAINT=$MAINTAINER_MODE_TRUE + AC_SUBST([MAINT])dnl +] +) + +# Copyright (C) 2006-2017 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. +# This macro is traced by Automake. +AC_DEFUN([_AM_SUBST_NOTMAKE]) + +# AM_SUBST_NOTMAKE(VARIABLE) +# -------------------------- +# Public sister of _AM_SUBST_NOTMAKE. +AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) + diff -Nru gdb-9.1/sim/bpf/arch.c gdb-10.2/sim/bpf/arch.c --- gdb-9.1/sim/bpf/arch.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/sim/bpf/arch.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,35 @@ +/* Simulator support for bpf. + +THIS FILE IS MACHINE GENERATED WITH CGEN. + +Copyright (C) 1996-2021 Free Software Foundation, Inc. + +This file is part of the GNU simulators. + + This file is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, 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. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. + +*/ + +#include "sim-main.h" +#include "bfd.h" + +const SIM_MACH *sim_machs[] = +{ +#ifdef HAVE_CPU_BPFBF + & bpf_mach, +#endif + 0 +}; + diff -Nru gdb-9.1/sim/bpf/arch.h gdb-10.2/sim/bpf/arch.h --- gdb-9.1/sim/bpf/arch.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/sim/bpf/arch.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,50 @@ +/* Simulator header for bpf. + +THIS FILE IS MACHINE GENERATED WITH CGEN. + +Copyright (C) 1996-2021 Free Software Foundation, Inc. + +This file is part of the GNU simulators. + + This file is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, 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. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. + +*/ + +#ifndef BPF_ARCH_H +#define BPF_ARCH_H + +#define TARGET_BIG_ENDIAN 1 + +#define WI DI +#define UWI UDI +#define AI UDI + +#define IAI UDI + +/* Enum declaration for model types. */ +typedef enum model_type { + MODEL_BPF_DEF, MODEL_MAX +} MODEL_TYPE; + +#define MAX_MODELS ((int) MODEL_MAX) + +/* Enum declaration for unit types. */ +typedef enum unit_type { + UNIT_NONE, UNIT_BPF_DEF_U_EXEC, UNIT_MAX +} UNIT_TYPE; + +#define MAX_UNITS (1) + +#endif /* BPF_ARCH_H */ diff -Nru gdb-9.1/sim/bpf/bpf.c gdb-10.2/sim/bpf/bpf.c --- gdb-9.1/sim/bpf/bpf.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/sim/bpf/bpf.c 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,328 @@ +/* eBPF simulator support code + Copyright (C) 2020-2021 Free Software Foundation, Inc. + + This file is part of GDB, the GNU debugger. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#define WANT_CPU_BPFBF +#define WANT_CPU bpfbf + +#include "sim-main.h" +#include "sim-fpu.h" +#include "cgen-mem.h" +#include "cgen-ops.h" +#include "cpuall.h" +#include "decode.h" + +#include "defs-le.h" /* For SCACHE */ +#include "bpf-helpers.h" + +/* It is not possible to include both defs-le.h and defs-be.h due to + duplicated definitions, so we need a bunch of forward declarations + here. */ +extern void bpfbf_ebpfle_init_idesc_table (SIM_CPU *); +extern void bpfbf_ebpfbe_init_idesc_table (SIM_CPU *); + +uint64_t skb_data_offset; + +IDESC *bpf_idesc_le; +IDESC *bpf_idesc_be; + + +int +bpfbf_fetch_register (SIM_CPU *current_cpu, + int rn, + unsigned char *buf, + int len) +{ + if (rn == 11) + SETTDI (buf, CPU_PC_GET (current_cpu)); + else if (0 <= rn && rn < 10) + SETTDI (buf, GET_H_GPR (rn)); + else + return 0; + + return len; +} + +int +bpfbf_store_register (SIM_CPU *current_cpu, + int rn, + unsigned char *buf, + int len) +{ + if (rn == 11) + CPU_PC_SET (current_cpu, GETTDI (buf)); + else if (0 <= rn && rn < 10) + SET_H_GPR (rn, GETTDI (buf)); + else + return 0; + + return len; +} + +void +bpfbf_model_insn_before (SIM_CPU *current_cpu, int first_p) +{ + /* XXX */ +} + +void +bpfbf_model_insn_after (SIM_CPU *current_cpu, int first_p) +{ + /* XXX */ +} + + +/***** Instruction helpers. *****/ + +/* The semantic routines for most instructions are expressed in RTL in + the cpu/bpf.cpu file, and automatically translated to C in the + sem-*.c files in this directory. + + However, some of the semantic routines make use of helper C + functions. This happens when the semantics of the instructions + can't be expressed in RTL alone in a satisfactory way, or not at + all. + + The following functions implement these C helpers. */ + +DI +bpfbf_endle (SIM_CPU *current_cpu, DI value, UINT bitsize) +{ + switch (bitsize) + { + case 16: return endian_h2le_2(endian_t2h_2(value)); + case 32: return endian_h2le_4(endian_t2h_4(value)); + case 64: return endian_h2le_8(endian_t2h_8(value)); + default: assert(0); + } + return value; +} + +DI +bpfbf_endbe (SIM_CPU *current_cpu, DI value, UINT bitsize) +{ + switch (bitsize) + { + case 16: return endian_h2be_2(endian_t2h_2(value)); + case 32: return endian_h2be_4(endian_t2h_4(value)); + case 64: return endian_h2be_8(endian_t2h_8(value)); + default: assert(0); + } + return value; +} + +DI +bpfbf_skb_data_offset (SIM_CPU *current_cpu) +{ + /* Simply return the user-configured value. + This will be 0 if it has not been set. */ + return skb_data_offset; +} + + +VOID +bpfbf_call (SIM_CPU *current_cpu, INT disp32, UINT src) +{ + /* eBPF supports two kind of CALL instructions: the so called pseudo + calls ("bpf to bpf") and external calls ("bpf to helper"). + + Both kind of calls use the same instruction (CALL). However, + external calls are constructed by passing a constant argument to + the instruction, that identifies the helper, whereas pseudo calls + result from expressions involving symbols. + + We distinguish calls from pseudo-calls with the later having a 1 + stored in the SRC field of the instruction. */ + + if (src == 1) + { + /* This is a pseudo-call. */ + + /* XXX allocate a new stack frame and transfer control. For + that we need to analyze the target function, like the kernel + verifier does. We better populate a cache + (function_start_address -> frame_size) so we avoid + calculating this more than once. */ + /* XXX note that disp32 is PC-relative in number of 64-bit + words, _minus one_. */ + } + else + { + /* This is a call to a helper. + + DISP32 contains the helper number. Dispatch to the + corresponding helper emulator in bpf-helpers.c. */ + + switch (disp32) { + /* case TRACE_PRINTK: */ + case 7: + bpf_trace_printk (current_cpu); + break; + default:; + } + } +} + +VOID +bpfbf_exit (SIM_CPU *current_cpu) +{ + SIM_DESC sd = CPU_STATE (current_cpu); + + /* r0 holds "return code" */ + DI r0 = GET_H_GPR (0); + + printf ("exit %ld (0x%lx)\n", r0, r0); + + sim_engine_halt (sd, current_cpu, NULL, CPU_PC_GET (current_cpu), + sim_exited, 0 /* sigrc */); +} + +VOID +bpfbf_breakpoint (SIM_CPU *current_cpu) +{ + SIM_DESC sd = CPU_STATE (current_cpu); + + sim_engine_halt (sd, current_cpu, NULL, CPU_PC_GET (current_cpu), + sim_stopped, SIM_SIGTRAP); +} + +/* We use the definitions below instead of the cgen-generated model.c, + because the later is not really able to work with cpus featuring + several ISAs. This should be fixed in CGEN. */ + +static void +bpf_def_model_init () +{ + /* Do nothing. */ +} + +static void +bpfbf_prepare_run (SIM_CPU *cpu) +{ + /* Nothing. */ +} + +void +bpf_engine_run_full (SIM_CPU *cpu) +{ + if (current_target_byte_order == BFD_ENDIAN_LITTLE) + { + if (!bpf_idesc_le) + { + bpfbf_ebpfle_init_idesc_table (cpu); + bpf_idesc_le = CPU_IDESC (cpu); + } + else + CPU_IDESC (cpu) = bpf_idesc_le; + + bpfbf_ebpfle_engine_run_full (cpu); + } + else + { + if (!bpf_idesc_be) + { + bpfbf_ebpfbe_init_idesc_table (cpu); + bpf_idesc_be = CPU_IDESC (cpu); + } + else + CPU_IDESC (cpu) = bpf_idesc_be; + + bpfbf_ebpfbe_engine_run_full (cpu); + } +} + +#if WITH_FAST + +void +bpf_engine_run_fast (SIM_CPU *cpu) +{ + if (current_target_byte_order == BFD_ENDIAN_LITTLE) + { + if (!bpf_idesc_le) + { + bpfbf_ebpfle_init_idesc_table (cpu); + bpf_idesc_le = CPU_IDESC (cpu); + } + else + CPU_IDESC (cpu) = bpf_idesc_le; + + bpfbf_ebpfle_engine_run_fast (cpu); + } + else + { + if (!bpf_idesc_be) + { + bpfbf_ebpfbe_init_idesc_table (cpu); + bpf_idesc_be = CPU_IDESC (cpu); + } + else + CPU_IDESC (cpu) = bpf_idesc_be; + + bpfbf_ebpfbe_engine_run_fast (cpu); + } +} + +#endif /* WITH_FAST */ + +static const CGEN_INSN * +bpfbf_get_idata (SIM_CPU *cpu, int inum) +{ + return CPU_IDESC (cpu) [inum].idata; +} + +static void +bpf_init_cpu (SIM_CPU *cpu) +{ + CPU_REG_FETCH (cpu) = bpfbf_fetch_register; + CPU_REG_STORE (cpu) = bpfbf_store_register; + CPU_PC_FETCH (cpu) = bpfbf_h_pc_get; + CPU_PC_STORE (cpu) = bpfbf_h_pc_set; + CPU_GET_IDATA (cpu) = bpfbf_get_idata; + /* Only used by profiling. 0 disables it. */ + CPU_MAX_INSNS (cpu) = 0; + CPU_INSN_NAME (cpu) = cgen_insn_name; + CPU_FULL_ENGINE_FN (cpu) = bpf_engine_run_full; +#if WITH_FAST + CPU_FAST_ENGINE_FN (cpu) = bpf_engine_run_fast; +#else + CPU_FAST_ENGINE_FN (cpu) = bpf_engine_run_full; +#endif +} + +static const SIM_MODEL bpf_models[] = +{ + { "bpf-def", & bpf_mach, MODEL_BPF_DEF, NULL, bpf_def_model_init }, + { 0 } +}; + +static const SIM_MACH_IMP_PROPERTIES bpfbf_imp_properties = +{ + sizeof (SIM_CPU), +#if WITH_SCACHE + sizeof (SCACHE) +#else + 0 +#endif +}; + +const SIM_MACH bpf_mach = +{ + "bpf", "bpf", MACH_BPF, + 32, 32, & bpf_models[0], & bpfbf_imp_properties, + bpf_init_cpu, + bpfbf_prepare_run +}; diff -Nru gdb-9.1/sim/bpf/bpf-helpers.c gdb-10.2/sim/bpf/bpf-helpers.c --- gdb-9.1/sim/bpf/bpf-helpers.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/sim/bpf/bpf-helpers.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,175 @@ +/* Emulation of eBPF helpers. + Copyright (C) 2020-2021 Free Software Foundation, Inc. + + This file is part of GDB, the GNU debugger. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +/* BPF programs rely on the existence of several helper functions, + which are provided by the kernel. This simulator provides an + implementation of the helpers, which can be customized by the + user. */ + +#define WANT_CPU_BPFBF +#define WANT_CPU bpfbf + +#include "sim-main.h" +#include "cgen-mem.h" +#include "cgen-ops.h" +#include "cpu.h" + +/* bpf_trace_printk is a printk-like facility for debugging. + + In the kernel, it appends a line to the Linux's tracing debugging + interface. + + In this simulator, it uses the simulator's tracing interface + instead. + + The format tags recognized by this helper are: + %d, %i, %u, %x, %ld, %li, %lu, %lx, %lld, %lli, %llu, %llx, + %p, %s + + A maximum of three tags are supported. + + This helper returns the number of bytes written, or a negative + value in case of failure. */ + +int +bpf_trace_printk (SIM_CPU *current_cpu) +{ + va_list ap; + SIM_DESC sd = CPU_STATE (current_cpu); + + DI fmt_address; + uint32_t size, tags_processed; + size_t i, bytes_written = 0; + + /* The first argument is the format string, which is passed as a + pointer in %r1. */ + fmt_address = GET_H_GPR (1); + + /* The second argument is the length of the format string, as an + unsigned 32-bit number in %r2. */ + size = GET_H_GPR (2); + + /* Read the format string from the memory pointed by %r2, printing + out the stuff as we go. There is a maximum of three format tags + supported, which are read from %r3, %r4 and %r5 respectively. */ + for (i = 0, tags_processed = 0; i < size;) + { + QI c = GETMEMUQI (current_cpu, CPU_PC_GET (current_cpu), + fmt_address + i); + + switch (c) + { + case '%': + /* Check we are not exceeding the limit of three format + tags. */ + if (tags_processed > 2) + return -1; /* XXX look for kernel error code. */ + + /* Depending on the kind of tag, extract the value from the + proper argument. */ + if (i++ >= size) + return -1; /* XXX look for kernel error code. */ + + UDI value = GET_H_GPR (3 + tags_processed); + + switch ((GETMEMUQI (current_cpu, CPU_PC_GET (current_cpu), + fmt_address + i))) + { + case 'd': + trace_printf (sd, current_cpu, "%d", value); + break; + case 'i': + trace_printf (sd, current_cpu, "%i", value); + break; + case 'u': + trace_printf (sd, current_cpu, "%u", value); + break; + case 'x': + trace_printf (sd, current_cpu, "%x", value); + break; + case 'l': + { + if (i++ >= size) + return -1; + switch (GETMEMUQI (current_cpu, CPU_PC_GET (current_cpu), + fmt_address + i)) + { + case 'd': + trace_printf (sd, current_cpu, "%ld", value); + break; + case 'i': + trace_printf (sd, current_cpu, "%li", value); + break; + case 'u': + trace_printf (sd, current_cpu, "%lu", value); + break; + case 'x': + trace_printf (sd, current_cpu, "%lx", value); + break; + case 'l': + { + if (i++ >= size) + return -1; + switch (GETMEMUQI (current_cpu, CPU_PC_GET (current_cpu), + fmt_address + i)) { + case 'd': + trace_printf (sd, current_cpu, "%lld", value); + break; + case 'i': + trace_printf (sd, current_cpu, "%lli", value); + break; + case 'u': + trace_printf (sd, current_cpu, "%llu", value); + break; + case 'x': + trace_printf (sd, current_cpu, "%llx", value); + break; + default: + assert (0); + break; + } + break; + } + default: + assert (0); + break; + } + break; + } + default: + /* XXX completeme */ + assert (0); + break; + } + + tags_processed++; + i++; + break; + case '\0': + i = size; + break; + default: + trace_printf (sd, current_cpu, "%c", c); + bytes_written++; + i++; + break; + } + } + + return bytes_written; +} diff -Nru gdb-9.1/sim/bpf/bpf-helpers.def gdb-10.2/sim/bpf/bpf-helpers.def --- gdb-9.1/sim/bpf/bpf-helpers.def 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/sim/bpf/bpf-helpers.def 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,194 @@ +/* BPF helpers database. + Copyright (C) 2019-2021 Free Software Foundation, Inc. + +This file is part of the GNU simulator. + +GCC is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 3, or (at your option) +any later version. + +GCC is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with GCC; see the file COPYING3. If not see +<http://www.gnu.org/licenses/>. */ + +/* This file contains the definition of the helpers that are available + to BPF programs. + + The primary source for information on kernel helpers is the + linux/include/uapi/linux/bpf.h file in the Linux source tree. + Please keep this database in sync. + + The first column is the first kernel version featuring the helper + function. This should be an enumerate from bpf_kernel_version, + defined in bpf-opts.h. Note that the backend assumes that helpers + never get deprecated in the kernel. If that eventually happens, + then we will need to use a bitmask here instead of an enumerate. + + The second column is the constant-name for the helper. + The third column is the program-name of the helper. + + The fourth column is a list of names describing the types of the + values returned and accepted by the helper, in one of these forms: + + TYPES (type1, type2, ..., 0) + VTYPES (type1, type2, ..., 0) + + VTYPES should be used should the helper accept a variable number of + arguments, TYPES otherwise. The valid type names are: + + `vt' for void. + `it' for signed int. + `ut' for unsigned int. + `pt' for void*. + `cpt' for const void*. + `st' for short int. + `ust' for unsigned short int. + `cst' for const char *. + `ullt' for unsigned long long. + `llt' for long long. + `u32t' for uint32. + `u64t' for uint64. + + In types descriptions, the firt entry corresponds to the value + returned by the helper. Subsequent names correspond to the helper + arguments. Finally, a 0 should close the list. + + VERY IMPORTANT: the helper entries should be listed in the same + order than in the definition of __BPF_FUNC_MAPPER in + linux/include/uapi/linux/bpf.h! */ + +DEF_HELPER (LINUX_V4_0, MAP_LOOKUP_ELEM, map_lookup_elem, TYPES (pt, pt, pt, 0)) +DEF_HELPER (LINUX_V4_0, MAP_UPDATE_ELEM, map_update_elem, TYPES (it, pt, pt, pt, ullt, 0)) +DEF_HELPER (LINUX_V4_0, MAP_DELETE_ELEM, map_delete_elem, TYPES (it, pt, pt, 0)) +DEF_HELPER (LINUX_V4_1, PROBE_READ, probe_read, TYPES (it, pt, ut, cpt, 0)) +DEF_HELPER (LINUX_V4_1, KTIME_GET_NS, ktime_get_ns, TYPES (ullt, 0)) +DEF_HELPER (LINUX_V4_1, TRACE_PRINTK, trace_printk, VTYPES (it, cst, it, 0)) +DEF_HELPER (LINUX_V4_1, GET_PRANDOM_U32, get_prandom_u32, TYPES (ullt, 0)) +DEF_HELPER (LINUX_V4_1, GET_SMP_PROCESSOR_ID, get_smp_processor_id, TYPES (ullt, 0)) +DEF_HELPER (LINUX_V4_1, SKB_STORE_BYTES, skb_store_bytes, TYPES (it, pt, it, pt, it, it, 0)) +DEF_HELPER (LINUX_V4_1, L3_CSUM_REPLACE, l3_csum_replace, TYPES (it, pt, it, it ,it ,it, 0)) +DEF_HELPER (LINUX_V4_1, L4_CSUM_REPLACE, l4_csum_replace, TYPES (it, pt, it, it, it, it, 0)) +DEF_HELPER (LINUX_V4_2, TAIL_CALL, tail_call, TYPES (vt, pt, pt, it, 0)) +DEF_HELPER (LINUX_V4_2, CLONE_REDIRECT, clone_redirect, TYPES (it, pt, it, it, 0)) +DEF_HELPER (LINUX_V4_2, GET_CURRENT_PID_TGID, get_current_pid_tgid, TYPES (ullt, 0)) +DEF_HELPER (LINUX_V4_2, GET_CURRENT_UID_GID, get_current_uid_gid, TYPES (ullt, 0)) +DEF_HELPER (LINUX_V4_2, GET_CURRENT_COMM, get_current_comm, TYPES (it, pt, it, 0)) +DEF_HELPER (LINUX_V4_3, GET_CGROUP_CLASSID, get_cgroup_classid, TYPES (it, pt, 0)) +DEF_HELPER (LINUX_V4_3, SKB_VLAN_PUSH, skb_vlan_push, TYPES (it, pt, st, ust, 0)) +DEF_HELPER (LINUX_V4_3, SKB_VLAN_POP, skb_vlan_pop, TYPES (it, pt, 0)) +DEF_HELPER (LINUX_V4_3, SKB_GET_TUNNEL_KEY, skb_get_tunnel_key, TYPES (it, pt, pt, it, it, 0)) +DEF_HELPER (LINUX_V4_3, SKB_SET_TUNNEL_KEY, skb_set_tunnel_key, TYPES (it, pt, pt, it, it, 0)) +DEF_HELPER (LINUX_V4_3, PERF_EVENT_READ, perf_event_read, TYPES (ullt, pt, ullt, 0)) +DEF_HELPER (LINUX_V4_4, REDIRECT, redirect, TYPES (it, it, it, 0)) +DEF_HELPER (LINUX_V4_4, GET_ROUTE_REALM, get_route_realm, TYPES (ut, pt, 0)) +DEF_HELPER (LINUX_V4_4, PERF_EVENT_OUTPUT, perf_event_output, \ + TYPES (it, pt, pt, ullt, pt, it, 0)) +DEF_HELPER (LINUX_V4_5, SKB_LOAD_BYTES, skb_load_bytes, TYPES (it, pt, it, pt, it, 0)) +DEF_HELPER (LINUX_V4_6, GET_STACKID, get_stackid, TYPES (it, pt, pt, it, 0)) +DEF_HELPER (LINUX_V4_6, CSUM_DIFF, csum_diff, TYPES (it, pt, it, pt, it, it, 0)) +DEF_HELPER (LINUX_V4_6, SKB_GET_TUNNEL_OPT, skb_get_tunnel_opt, TYPES (it, pt, pt, it, 0)) +DEF_HELPER (LINUX_V4_6, SKB_SET_TUNNEL_OPT, skb_set_tunnel_opt, TYPES (it, pt, pt, it, 0)) +DEF_HELPER (LINUX_V4_8, SKB_CHANGE_PROTO, skb_change_proto, TYPES (it, pt, st, u64t, 0)) +DEF_HELPER (LINUX_V4_8, SKB_CHANGE_TYPE, skb_change_type, TYPES (it, pt, u32t, 0)) +DEF_HELPER (LINUX_V4_8, SKB_UNDER_CGROUP, skb_under_cgroup, TYPES (it, pt, pt, it, 0)) +DEF_HELPER (LINUX_V4_8, GET_HASH_RECALC, get_hash_recalc, TYPES (ut, pt, 0)) +DEF_HELPER (LINUX_V4_8, GET_CURRENT_TASK, get_current_task, TYPES (ullt, 0)) +DEF_HELPER (LINUX_V4_8, PROBE_WRITE_USER, probe_write_user, TYPES (it, pt, cpt, ut, 0)) +DEF_HELPER (LINUX_V4_9, CURRENT_TASK_UNDER_CGROUP, current_task_under_cgroup, \ + TYPES (it, pt, it, 0)) +DEF_HELPER (LINUX_V4_9, SKB_CHANGE_TAIL, skb_change_tail, TYPES (it, pt, ut, u64t, 0)) +DEF_HELPER (LINUX_V4_9, SKB_PULL_DATA, skb_pull_data, TYPES (it, pt, it, 0)) +DEF_HELPER (LINUX_V4_9, CSUM_UPDATE, csum_update, TYPES (llt, pt, u32t, 0)) +DEF_HELPER (LINUX_V4_9, SET_HASH_INVALID, set_hash_invalid, TYPES (vt, pt, 0)) +DEF_HELPER (LINUX_V4_10, GET_NUMA_NODE_ID, get_numa_node_id, TYPES (it, 0)) +DEF_HELPER (LINUX_V4_10, SKB_CHANGE_HEAD, skb_change_head, TYPES (it, pt, it, it, 0)) +DEF_HELPER (LINUX_V4_10, XDP_ADJUST_HEAD, xdp_adjust_head, TYPES (it, pt, it, 0)) +DEF_HELPER (LINUX_V4_11, PROBE_READ_STR, probe_read_str, TYPES (it, pt, u32t, cpt, 0)) +DEF_HELPER (LINUX_V4_12, GET_SOCKET_COOKIE, get_socket_cookie, TYPES (it, pt, 0)) +DEF_HELPER (LINUX_V4_12, GET_SOCKET_UID, get_socket_uid, TYPES (ut, pt, 0)) +DEF_HELPER (LINUX_V4_13, SET_HASH, set_hash, TYPES (ut, pt, u32t, 0)) +DEF_HELPER (LINUX_V4_13, SETSOCKOPT, setsockopt, TYPES (it, pt, it, it, pt, it, 0)) +DEF_HELPER (LINUX_V4_13, SKB_ADJUST_ROOM, skb_adjust_room, TYPES (it, pt, st, u32t, ullt, 0)) +DEF_HELPER (LINUX_V4_14, REDIRECT_MAP, redirect_map, TYPES (it, pt, it, it, 0)) +DEF_HELPER (LINUX_V4_14, SK_REDIRECT_MAP, sk_redirect_map, TYPES (it, pt, pt, it, it, 0)) +DEF_HELPER (LINUX_V4_14, SOCK_MAP_UPDATE, sock_map_update, TYPES (it, pt, pt, pt, ullt, 0)) +DEF_HELPER (LINUX_V4_15, XDP_ADJUST_META, xdp_adjust_meta, TYPES (it, pt, it, 0)) +DEF_HELPER (LINUX_V4_15, PERF_EVENT_READ_VALUE, perf_event_read_value, + TYPES (it, pt, ullt, pt, ut, 0)) +DEF_HELPER (LINUX_V4_15, PERF_PROG_READ_VALUE, perf_prog_read_value, + TYPES (it, pt, pt, ut, 0)) +DEF_HELPER (LINUX_V4_15, GETSOCKOPT, getsockopt, TYPES (it, pt, it, it, pt, it, 0)) + +DEF_HELPER (LINUX_V4_16, OVERRIDE_RETURN, override_return, TYPES (it, pt, ult, 0)) +DEF_HELPER (LINUX_V4_16, SOCK_OPS_CB_FLAGS_SET, sock_ops_cb_flags_set, TYPES (it, pt, it, 0)) +DEF_HELPER (LINUX_V4_17, MSG_REDIRECT_MAP, msg_redirect_map, TYPES (it, pt, pt, it, it, 0)) +DEF_HELPER (LINUX_V4_17, MSG_APPLY_BYTES, msg_apply_bytes, TYPES (it, pt, it, 0)) +DEF_HELPER (LINUX_V4_17, MSG_CORK_BYTES, msg_cork_bytes, TYPES (it, pt, it, 0)) +DEF_HELPER (LINUX_V4_17, MSG_PULL_DATA, msg_pull_data, TYPES (it, pt, it, it, it, 0)) +DEF_HELPER (LINUX_V4_17, BIND, bind, TYPES (it, pt, pt, it, 0)) +DEF_HELPER (LINUX_V4_18, XDP_ADJUST_TAIL, xdp_adjust_tail, TYPES (it, pt, it, 0)) +DEF_HELPER (LINUX_V4_18, SKB_GET_XFRM_STATE, + skb_get_xfrm_state, TYPES (it, pt, it, pt, it, it, 0)) +DEF_HELPER (LINUX_V4_18, GET_STACK, get_stack, TYPES (it, pt, pt, it, it, 0)) +DEF_HELPER (LINUX_V4_18, SKB_LOAD_BYTES_RELATIVE, skb_load_bytes_relative, + TYPES (it, pt, it, pt, it, ut, 0)) +DEF_HELPER (LINUX_V4_18, FIB_LOOKUP, fib_lookup, TYPES (it, pt, pt, it, ut, 0)) +DEF_HELPER (LINUX_V4_18, SOCK_HASH_UPDATE, sock_hash_update, TYPES (it, pt, pt, pt, ullt, 0)) +DEF_HELPER (LINUX_V4_18, MSG_REDIRECT_HASH, msg_redirect_hash, TYPES (it, pt, pt, pt, it, 0)) +DEF_HELPER (LINUX_V4_18, SK_REDIRECT_HASH, sk_redirect_hash, TYPES (it, pt, pt, pt, it, 0)) +DEF_HELPER (LINUX_V4_18, LWT_PUSH_ENCAP, lwt_push_encap, TYPES (it, pt, ut, pt, ut, 0)) +DEF_HELPER (LINUX_V4_18, LWT_SEG6_STORE_BYTES, lwt_seg6_store_bytes, + TYPES (it, pt, ut, pt, ut, 0)) +DEF_HELPER (LINUX_V4_18, LWT_SEG6_ADJUST_SRH, lwt_seg6_adjust_srh, TYPES (it, pt, ut, ut, 0)) +DEF_HELPER (LINUX_V4_18, LWT_SEG6_ACTION, lwt_seg6_action, TYPES (it, pt, ut, pt, ut, 0)) +DEF_HELPER (LINUX_V4_18, RC_REPEAT, rc_repeat, TYPES (it, pt, 0)) +DEF_HELPER (LINUX_V4_18, RC_KEYDOWN, rc_keydown, TYPES (it, pt, ut, ullt, ut, 0)) +DEF_HELPER (LINUX_V4_18, SKB_CGROUP_ID, skb_cgroup_id, TYPES (ullt, pt, 0)) +DEF_HELPER (LINUX_V4_18, GET_CURRENT_CGROUP_ID, get_current_cgroup_id, TYPES (ullt, 0)) +DEF_HELPER (LINUX_V4_19, GET_LOCAL_STORAGE, get_local_storage, TYPES (pt, pt, ullt, 0)) +DEF_HELPER (LINUX_V4_19, SK_SELECT_REUSEPORT, sk_select_reuseport, + TYPES (it, pt, pt, pt, ut, 0)) +DEF_HELPER (LINUX_V4_19, SKB_ANCESTOR_CGROUP_ID, skb_ancestor_cgroup_id, + TYPES (ullt, pt, it, 0)) +DEF_HELPER (LINUX_V4_20, SK_LOOKUP_TCP, sk_lookup_tcp, TYPES (pt, pt, pt, it, ullt, ullt, 0)) +DEF_HELPER (LINUX_V4_20, SK_LOOKUP_UDP, sk_lookup_udp, TYPES (pt, pt, pt, it, ullt, ullt, 0)) +DEF_HELPER (LINUX_V4_20, SK_RELEASE, sk_release, TYPES (it, pt, 0)) +DEF_HELPER (LINUX_V4_20, MAP_PUSH_ELEM, map_push_elem, TYPES (it, pt, pt, ullt, 0)) +DEF_HELPER (LINUX_V4_20, MAP_POP_ELEM, map_pop_elem, TYPES (it, pt, pt, 0)) +DEF_HELPER (LINUX_V4_20, MAP_PEEK_ELEM, map_peek_elem, TYPES (it, pt, pt, 0)) +DEF_HELPER (LINUX_V4_20, MSG_PUSH_DATA, msg_push_data, TYPES (it, pt, it, it, it, 0)) +DEF_HELPER (LINUX_V5_0, MSG_POP_DATA, msg_pop_data, TYPES (it, pt, it, it, it, 0)) +DEF_HELPER (LINUX_V5_0, RC_POINTER_REL, rc_pointer_rel, TYPES (it, pt, it, it, 0)) +DEF_HELPER (LINUX_V5_1, SPIN_LOCK, spin_lock, TYPES (vt, pt, 0)) +DEF_HELPER (LINUX_V5_1, SPIN_UNLOCK, spin_unlock, TYPES (vt, pt, 0)) +DEF_HELPER (LINUX_V5_1, SK_FULLSOCK, sk_fullsock, TYPES (pt, pt, 0)) +DEF_HELPER (LINUX_V5_1, TCP_SOCK, tcp_sock, TYPES (pt, pt, 0)) +DEF_HELPER (LINUX_V5_1, SKB_ECN_SET_CE, skb_ecn_set_ce, TYPES (it, pt, 0)) +DEF_HELPER (LINUX_V5_1, GET_LISTENER_SOCK, get_listener_sock, TYPES (pt, pt, 0)) +DEF_HELPER (LINUX_V5_2, SKC_LOOKUP_TCP, skc_lookup_tcp, + TYPES (pt, pt, pt, u32t, u64t, u64t, 0)) +DEF_HELPER (LINUX_V5_2, TCP_CHECK_SYNCOOKIE, tcp_check_syncookie, + TYPES (it, pt, pt, u32t, pt, u32t, 0)) +DEF_HELPER (LINUX_V5_2, SYSCTL_GET_NAME, sysctl_get_name, TYPES (it, pt, pt, ullt, u64t, 0)) +DEF_HELPER (LINUX_V5_2, SYSCTL_GET_CURRENT_VALUE, sysctl_get_current_value, + TYPES (it, pt, pt, ullt, 0)) +DEF_HELPER (LINUX_V5_2, SYSCTL_GET_NEW_VALUE, sysctl_get_new_value, + TYPES (it, pt, pt, ullt, 0)) +DEF_HELPER (LINUX_V5_2, SYSCTL_SET_NEW_VALUE, sysctl_set_new_value, + TYPES (it, pt, pt, ullt, 0)) +DEF_HELPER (LINUX_V5_2, STRTOL, strtol, TYPES (it, cst, ullt, u64t, pt, 0)) +DEF_HELPER (LINUX_V5_2, STRTOUL, strtoul, TYPES (it, pt, ullt, u64t, pt, 0)) +DEF_HELPER (LINUX_V5_2, SK_STORAGE_GET, sk_storage_get, TYPES (pt, pt, pt, pt, u64t, 0)) +DEF_HELPER (LINUX_V5_2, SK_STORAGE_DELETE, sk_storage_delete, TYPES (it, pt, pt, 0)) + +/* +Local variables: +mode:c +End: +*/ diff -Nru gdb-9.1/sim/bpf/bpf-helpers.h gdb-10.2/sim/bpf/bpf-helpers.h --- gdb-9.1/sim/bpf/bpf-helpers.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/sim/bpf/bpf-helpers.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,31 @@ +/* Emulation of eBPF helpers. Interface. + Copyright (C) 2020-2021 Free Software Foundation, Inc. + + This file is part of GDB, the GNU debugger. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef BPF_HELPERS_H +#define BPF_HELPERS_H + +enum bpf_kernel_helper + { +#define DEF_HELPER(kver, name, fn, types) name, +#include "bpf-helpers.def" +#undef DEF_HELPER + }; + +void bpf_trace_printk (SIM_CPU *current_cpu); + +#endif /* ! BPF_HELPERS_H */ diff -Nru gdb-9.1/sim/bpf/bpf-sim.h gdb-10.2/sim/bpf/bpf-sim.h --- gdb-9.1/sim/bpf/bpf-sim.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/sim/bpf/bpf-sim.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,31 @@ +/* eBPF simulator support code header + Copyright (C) 2020-2021 Free Software Foundation, Inc. + + This file is part of GDB, the GNU debugger. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef BPF_SIM_H +#define BPF_SIM_H + +void bpfbf_insn_before (sim_cpu* current_cpu, SEM_PC vpc, const IDESC *idesc); +void bpfbf_insn_after (sim_cpu* current_cpu, SEM_PC vpc, const IDESC *idesc); + +DI bpfbf_endbe (SIM_CPU *, DI, UINT); +DI bpfbf_endle (SIM_CPU *, DI, UINT); +DI bpfbf_skb_data_offset (SIM_CPU *); +VOID bpfbf_call (SIM_CPU *, INT, UINT); +VOID bpfbf_exit (SIM_CPU *); + +#endif /* ! BPF_SIM_H */ diff -Nru gdb-9.1/sim/bpf/config.in gdb-10.2/sim/bpf/config.in --- gdb-9.1/sim/bpf/config.in 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/sim/bpf/config.in 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,248 @@ +/* config.in. Generated from configure.ac by autoheader. */ + +/* Define if building universal (internal helper macro) */ +#undef AC_APPLE_UNIVERSAL_BUILD + +/* Sim debug setting */ +#undef DEBUG + +/* Define to 1 if translation of program messages to the user's native + language is requested. */ +#undef ENABLE_NLS + +/* Define to 1 if you have the <dlfcn.h> header file. */ +#undef HAVE_DLFCN_H + +/* Define to 1 if you have the <errno.h> header file. */ +#undef HAVE_ERRNO_H + +/* Define to 1 if you have the <fcntl.h> header file. */ +#undef HAVE_FCNTL_H + +/* Define to 1 if you have the <fpu_control.h> header file. */ +#undef HAVE_FPU_CONTROL_H + +/* Define to 1 if you have the `ftruncate' function. */ +#undef HAVE_FTRUNCATE + +/* Define to 1 if you have the `getrusage' function. */ +#undef HAVE_GETRUSAGE + +/* Define to 1 if you have the <inttypes.h> header file. */ +#undef HAVE_INTTYPES_H + +/* Define to 1 if you have the `nsl' library (-lnsl). */ +#undef HAVE_LIBNSL + +/* Define to 1 if you have the `socket' library (-lsocket). */ +#undef HAVE_LIBSOCKET + +/* Define to 1 if you have the `lstat' function. */ +#undef HAVE_LSTAT + +/* Define to 1 if you have the <memory.h> header file. */ +#undef HAVE_MEMORY_H + +/* Define to 1 if you have the `mmap' function. */ +#undef HAVE_MMAP + +/* Define to 1 if you have the `munmap' function. */ +#undef HAVE_MUNMAP + +/* Define to 1 if you have the `posix_fallocate' function. */ +#undef HAVE_POSIX_FALLOCATE + +/* Define to 1 if you have the `sigaction' function. */ +#undef HAVE_SIGACTION + +/* Define to 1 if the system has the type `socklen_t'. */ +#undef HAVE_SOCKLEN_T + +/* Define to 1 if you have the <stdint.h> header file. */ +#undef HAVE_STDINT_H + +/* Define to 1 if you have the <stdlib.h> header file. */ +#undef HAVE_STDLIB_H + +/* Define to 1 if you have the <strings.h> header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the <string.h> header file. */ +#undef HAVE_STRING_H + +/* Define to 1 if `st_atime' is a member of `struct stat'. */ +#undef HAVE_STRUCT_STAT_ST_ATIME + +/* Define to 1 if `st_blksize' is a member of `struct stat'. */ +#undef HAVE_STRUCT_STAT_ST_BLKSIZE + +/* Define to 1 if `st_blocks' is a member of `struct stat'. */ +#undef HAVE_STRUCT_STAT_ST_BLOCKS + +/* Define to 1 if `st_ctime' is a member of `struct stat'. */ +#undef HAVE_STRUCT_STAT_ST_CTIME + +/* Define to 1 if `st_dev' is a member of `struct stat'. */ +#undef HAVE_STRUCT_STAT_ST_DEV + +/* Define to 1 if `st_gid' is a member of `struct stat'. */ +#undef HAVE_STRUCT_STAT_ST_GID + +/* Define to 1 if `st_ino' is a member of `struct stat'. */ +#undef HAVE_STRUCT_STAT_ST_INO + +/* Define to 1 if `st_mode' is a member of `struct stat'. */ +#undef HAVE_STRUCT_STAT_ST_MODE + +/* Define to 1 if `st_mtime' is a member of `struct stat'. */ +#undef HAVE_STRUCT_STAT_ST_MTIME + +/* Define to 1 if `st_nlink' is a member of `struct stat'. */ +#undef HAVE_STRUCT_STAT_ST_NLINK + +/* Define to 1 if `st_rdev' is a member of `struct stat'. */ +#undef HAVE_STRUCT_STAT_ST_RDEV + +/* Define to 1 if `st_size' is a member of `struct stat'. */ +#undef HAVE_STRUCT_STAT_ST_SIZE + +/* Define to 1 if `st_uid' is a member of `struct stat'. */ +#undef HAVE_STRUCT_STAT_ST_UID + +/* Define to 1 if you have the <sys/mman.h> header file. */ +#undef HAVE_SYS_MMAN_H + +/* Define to 1 if you have the <sys/resource.h> header file. */ +#undef HAVE_SYS_RESOURCE_H + +/* Define to 1 if you have the <sys/stat.h> header file. */ +#undef HAVE_SYS_STAT_H + +/* Define to 1 if you have the <sys/times.h> header file. */ +#undef HAVE_SYS_TIMES_H + +/* Define to 1 if you have the <sys/time.h> header file. */ +#undef HAVE_SYS_TIME_H + +/* Define to 1 if you have the <sys/types.h> header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define to 1 if you have the `time' function. */ +#undef HAVE_TIME + +/* Define to 1 if you have the <time.h> header file. */ +#undef HAVE_TIME_H + +/* Define to 1 if you have the `truncate' function. */ +#undef HAVE_TRUNCATE + +/* Define to 1 if you have the <unistd.h> header file. */ +#undef HAVE_UNISTD_H + +/* Define to 1 if you have the <windows.h> header file. */ +#undef HAVE_WINDOWS_H + +/* Define to 1 if you have the `__setfpucw' function. */ +#undef HAVE___SETFPUCW + +/* Define to the sub-directory in which libtool stores uninstalled libraries. + */ +#undef LT_OBJDIR + +/* Name of this package. */ +#undef PACKAGE + +/* Define to the address where bug reports for this package should be sent. */ +#undef PACKAGE_BUGREPORT + +/* Define to the full name of this package. */ +#undef PACKAGE_NAME + +/* Define to the full name and version of this package. */ +#undef PACKAGE_STRING + +/* Define to the one symbol short name of this package. */ +#undef PACKAGE_TARNAME + +/* Define to the home page for this package. */ +#undef PACKAGE_URL + +/* Define to the version of this package. */ +#undef PACKAGE_VERSION + +/* Additional package description */ +#undef PKGVERSION + +/* Sim profile settings */ +#undef PROFILE + +/* Bug reporting address */ +#undef REPORT_BUGS_TO + +/* Define as the return type of signal handlers (`int' or `void'). */ +#undef RETSIGTYPE + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Enable extensions on AIX 3, Interix. */ +#ifndef _ALL_SOURCE +# undef _ALL_SOURCE +#endif +/* Enable GNU extensions on systems that have them. */ +#ifndef _GNU_SOURCE +# undef _GNU_SOURCE +#endif +/* Enable threading extensions on Solaris. */ +#ifndef _POSIX_PTHREAD_SEMANTICS +# undef _POSIX_PTHREAD_SEMANTICS +#endif +/* Enable extensions on HP NonStop. */ +#ifndef _TANDEM_SOURCE +# undef _TANDEM_SOURCE +#endif +/* Enable general extensions on Solaris. */ +#ifndef __EXTENSIONS__ +# undef __EXTENSIONS__ +#endif + + +/* Sim assert settings */ +#undef WITH_ASSERT + +/* Sim debug setting */ +#undef WITH_DEBUG + +/* Sim default environment */ +#undef WITH_ENVIRONMENT + +/* Sim profile settings */ +#undef WITH_PROFILE + +/* How to route I/O */ +#undef WITH_STDIO + +/* Sim trace settings */ +#undef WITH_TRACE + +/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most + significant byte first (like Motorola and SPARC, unlike Intel). */ +#if defined AC_APPLE_UNIVERSAL_BUILD +# if defined __BIG_ENDIAN__ +# define WORDS_BIGENDIAN 1 +# endif +#else +# ifndef WORDS_BIGENDIAN +# undef WORDS_BIGENDIAN +# endif +#endif + +/* Define to 1 if on MINIX. */ +#undef _MINIX + +/* Define to 2 if the system does not provide POSIX.1 features except with + this defined. */ +#undef _POSIX_1_SOURCE + +/* Define to 1 if you need to in order for `stat' and other things to work. */ +#undef _POSIX_SOURCE diff -Nru gdb-9.1/sim/bpf/configure gdb-10.2/sim/bpf/configure --- gdb-9.1/sim/bpf/configure 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/sim/bpf/configure 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,16003 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.69. +# +# +# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. +# +# +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +# Use a proper internal environment variable to ensure we don't fall + # into an infinite loop, continuously re-executing ourselves. + if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then + _as_can_reexec=no; export _as_can_reexec; + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +as_fn_exit 255 + fi + # We don't want this to propagate to other subprocesses. + { _as_can_reexec=; unset _as_can_reexec;} +if test "x$CONFIG_SHELL" = x; then + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } + +exitcode=0 +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : + +else + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1 +test -x / || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 +test \$(( 1 + 1 )) = 2 || exit 1 + + test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( + ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO + ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO + PATH=/empty FPATH=/empty; export PATH FPATH + test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ + || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1" + if (eval "$as_required") 2>/dev/null; then : + as_have_required=yes +else + as_have_required=no +fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + as_found=: + case $as_dir in #( + /*) + for as_base in sh bash ksh sh5; do + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + break 2 +fi +fi + done;; + esac + as_found=false +done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } +IFS=$as_save_IFS + + + if test "x$CONFIG_SHELL" != x; then : + export CONFIG_SHELL + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +exit 255 +fi + + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." + else + $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, +$0: including any error possibly output before this +$0: message. Then install a modern shell, or manually run +$0: the script under such a shell if you do have one." + fi + exit 1 +fi +fi +fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS + +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + + + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + + # If we had to re-execute with $CONFIG_SHELL, we're ensured to have + # already done that, so ensure we don't try to do so again and fall + # in an infinite loop. This has already happened in practice. + _as_can_reexec=no; export _as_can_reexec + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' + fi +else + as_ln_s='cp -pR' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +as_test_x='test -x' +as_executable_p=as_fn_executable_p + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + +SHELL=${CONFIG_SHELL-/bin/sh} + + +test -n "$DJDIR" || exec 7<&0 </dev/null +exec 6>&1 + +# Name of the host. +# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_clean_files= +ac_config_libobj_dir=. +LIBOBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= + +# Identity of this package. +PACKAGE_NAME= +PACKAGE_TARNAME= +PACKAGE_VERSION= +PACKAGE_STRING= +PACKAGE_BUGREPORT= +PACKAGE_URL= + +ac_unique_file="Makefile.in" +# Factoring default headers for most tests. +ac_includes_default="\ +#include <stdio.h> +#ifdef HAVE_SYS_TYPES_H +# include <sys/types.h> +#endif +#ifdef HAVE_SYS_STAT_H +# include <sys/stat.h> +#endif +#ifdef STDC_HEADERS +# include <stdlib.h> +# include <stddef.h> +#else +# ifdef HAVE_STDLIB_H +# include <stdlib.h> +# endif +#endif +#ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H +# include <memory.h> +# endif +# include <string.h> +#endif +#ifdef HAVE_STRINGS_H +# include <strings.h> +#endif +#ifdef HAVE_INTTYPES_H +# include <inttypes.h> +#endif +#ifdef HAVE_STDINT_H +# include <stdint.h> +#endif +#ifdef HAVE_UNISTD_H +# include <unistd.h> +#endif" + +ac_subst_vars='LTLIBOBJS +LIBOBJS +cgen_breaks +cgen +cgendir +CGEN_MAINT +REPORT_BUGS_TEXI +REPORT_BUGS_TO +PKGVERSION +MAINT +MAINTAINER_MODE_FALSE +MAINTAINER_MODE_TRUE +lt_cv_dlopen_libs +OTOOL64 +OTOOL +LIPO +NMEDIT +DSYMUTIL +AWK +STRIP +OBJDUMP +LN_S +NM +ac_ct_DUMPBIN +DUMPBIN +LD +FGREP +SED +LIBTOOL +PLUGINS_FALSE +PLUGINS_TRUE +zlibinc +zlibdir +CATOBJEXT +GENCAT +INSTOBJEXT +DATADIRNAME +CATALOGS +POSUB +GMSGFMT +XGETTEXT +INCINTL +LIBINTL_DEP +LIBINTL +USE_NLS +GMAKE_FALSE +GMAKE_TRUE +MAKE +CCDEPMODE +DEPDIR +am__leading_dot +PACKAGE +RANLIB +AR +HDEFINES +CC_FOR_BUILD +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM +EGREP +GREP +CPP +target_os +target_vendor +target_cpu +target +host_os +host_vendor +host_cpu +host +build_os +build_vendor +build_cpu +build +OBJEXT +EXEEXT +ac_ct_CC +CPPFLAGS +LDFLAGS +CFLAGS +CC +WERROR_CFLAGS +WARN_CFLAGS +sim_reserved_bits +sim_inline +sim_hw +sim_hw_objs +sim_hw_cflags +sim_default_model +sim_scache +sim_float +sim_endian +sim_bitsize +sim_alignment +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_URL +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' +ac_subst_files='' +ac_user_opts=' +enable_option_checking +with_system_zlib +enable_plugins +enable_shared +enable_static +with_pic +enable_fast_install +with_gnu_ld +enable_libtool_lock +enable_maintainer_mode +enable_sim_debug +enable_sim_stdio +enable_sim_trace +enable_sim_profile +enable_sim_assert +enable_sim_environment +enable_sim_inline +with_pkgversion +with_bugurl +enable_sim_bitsize +enable_sim_endian +enable_sim_alignment +enable_sim_scache +enable_sim_default_model +enable_cgen_maint +' + ac_precious_vars='build_alias +host_alias +target_alias +CC +CFLAGS +LDFLAGS +LIBS +CPPFLAGS +CPP' + + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datarootdir='${prefix}/share' +datadir='${datarootdir}' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +includedir='${prefix}/include' +oldincludedir='/usr/include' +docdir='${datarootdir}/doc/${PACKAGE}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' + +ac_prev= +ac_dashdash= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval $ac_prev=\$ac_option + ac_prev= + continue + fi + + case $ac_option in + *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *=) ac_optarg= ;; + *) ac_optarg=yes ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=*) + datadir=$ac_optarg ;; + + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=\$ac_optarg ;; + + -without-* | --without-*) + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) as_fn_error $? "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information" + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + case $ac_envvar in #( + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; + esac + eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + as_fn_error $? "missing argument to $ac_option" +fi + +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + esac +fi + +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir +do + eval ac_val=\$$ac_var + # Remove trailing slashes. + case $ac_val in + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; + esac + # Be sure to have absolute directory names. + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + as_fn_error $? "working directory cannot be determined" +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + as_fn_error $? "pwd does not report name of working directory" + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures this package to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking ...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] +_ACEOF + + cat <<\_ACEOF + +Program names: + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM run sed PROGRAM on installed program names + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] + --target=TARGET configure for building compilers for TARGET [HOST] +_ACEOF +fi + +if test -n "$ac_init_help"; then + + cat <<\_ACEOF + +Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --enable-plugins Enable support for plugins + --enable-shared[=PKGS] build shared libraries [default=yes] + --enable-static[=PKGS] build static libraries [default=yes] + --enable-fast-install[=PKGS] + optimize for fast installation [default=yes] + --disable-libtool-lock avoid locking (might break parallel builds) + --enable-maintainer-mode + enable make rules and dependencies not useful (and + sometimes confusing) to the casual installer + --enable-sim-debug=opts Enable debugging flags (for developers of the sim + itself) + --enable-sim-stdio Specify whether to use stdio for console + input/output + --enable-sim-trace=opts Enable tracing of simulated programs + --enable-sim-profile=opts + Enable profiling flags + --enable-sim-assert Specify whether to perform random assertions + --enable-sim-environment=environment + Specify mixed, user, virtual or operating + environment + --enable-sim-inline=inlines + Specify which functions should be inlined + --enable-sim-bitsize=N Specify target bitsize (32 or 64) + --enable-sim-endian=endian + Specify target byte endian orientation + --enable-sim-alignment=align + Specify strict, nonstrict or forced alignment of + memory accesses + --enable-sim-scache=size + Specify simulator execution cache size + --enable-sim-default-model=model + Specify default model to simulate + --enable-cgen-maint=DIR build cgen generated files + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-system-zlib use installed libz + --with-pic try to use only PIC/non-PIC objects [default=use + both] + --with-gnu-ld assume the C compiler uses GNU ld [default=no] + --with-pkgversion=PKG Use PKG in the version string in place of "SIM" + --with-bugurl=URL Direct users to URL to report a bug + +Some influential environment variables: + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a + nonstandard directory <lib dir> + LIBS libraries to pass to the linker, e.g. -l<library> + CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if + you have headers in a nonstandard directory <include dir> + CPP C preprocessor + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +Report bugs to the package provider. +_ACEOF +ac_status=$? +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for guested configure. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive + else + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } + done +fi + +test -n "$ac_init_help" && exit $ac_status +if $ac_init_version; then + cat <<\_ACEOF +configure +generated by GNU Autoconf 2.69 + +Copyright (C) 2012 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit +fi + +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## + +# ac_fn_c_try_compile LINENO +# -------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_compile + +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_cpp + +# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists, giving a warning if it cannot be compiled using +# the include files in INCLUDES and setting the cache variable VAR +# accordingly. +ac_fn_c_check_header_mongrel () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if eval \${$3+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 +$as_echo_n "checking $2 usability... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_header_compiler=yes +else + ac_header_compiler=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 +$as_echo_n "checking $2 presence... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <$2> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + ac_header_preproc=yes +else + ac_header_preproc=no +fi +rm -f conftest.err conftest.i conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( + yes:no: ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; + no:yes:* ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=\$ac_header_compiler" +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_mongrel + +# ac_fn_c_try_run LINENO +# ---------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes +# that executables *can* be run. +ac_fn_c_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_run + +# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists and can be compiled using the include files in +# INCLUDES, setting the cache variable VAR accordingly. +ac_fn_c_check_header_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_compile + +# ac_fn_c_try_link LINENO +# ----------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + test -x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_link + +# ac_fn_c_check_func LINENO FUNC VAR +# ---------------------------------- +# Tests whether FUNC exists, setting the cache variable VAR accordingly +ac_fn_c_check_func () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case <limits.h> declares $2. + For example, HP-UX 11i <limits.h> declares gettimeofday. */ +#define $2 innocuous_$2 + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $2 (); below. + Prefer <limits.h> to <assert.h> if __STDC__ is defined, since + <limits.h> exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include <limits.h> +#else +# include <assert.h> +#endif + +#undef $2 + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $2 (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$2 || defined __stub___$2 +choke me +#endif + +int +main () +{ +return $2 (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_func + +# ac_fn_c_check_member LINENO AGGR MEMBER VAR INCLUDES +# ---------------------------------------------------- +# Tries to find if the field MEMBER exists in type AGGR, after including +# INCLUDES, setting cache variable VAR accordingly. +ac_fn_c_check_member () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5 +$as_echo_n "checking for $2.$3... " >&6; } +if eval \${$4+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$5 +int +main () +{ +static $2 ac_aggr; +if (ac_aggr.$3) +return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$4=yes" +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$5 +int +main () +{ +static $2 ac_aggr; +if (sizeof ac_aggr.$3) +return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$4=yes" +else + eval "$4=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$4 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_member + +# ac_fn_c_check_type LINENO TYPE VAR INCLUDES +# ------------------------------------------- +# Tests whether TYPE exists after having included INCLUDES, setting cache +# variable VAR accordingly. +ac_fn_c_check_type () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=no" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +if (sizeof ($2)) + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +if (sizeof (($2))) + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + eval "$3=yes" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_type +cat >config.log <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by $as_me, which was +generated by GNU Autoconf 2.69. Invocation command line was + + $ $0 $@ + +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + $as_echo "PATH: $as_dir" + done +IFS=$as_save_IFS + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *\'*) + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; + 2) + as_fn_append ac_configure_args1 " '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + as_fn_append ac_configure_args " '$ac_arg'" + ;; + esac + done +done +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + $as_echo "## ---------------- ## +## Cache variables. ## +## ---------------- ##" + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + $as_echo "## ----------------- ## +## Output variables. ## +## ----------------- ##" + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + $as_echo "## ------------------- ## +## File substitutions. ## +## ------------------- ##" + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + $as_echo "## ----------- ## +## confdefs.h. ## +## ----------- ##" + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status +' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +$as_echo "/* confdefs.h */" > confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_URL "$PACKAGE_URL" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + # We do not want a PATH search for config.site. + case $CONFIG_SITE in #(( + -*) ac_site_file1=./$CONFIG_SITE;; + */*) ac_site_file1=$CONFIG_SITE;; + *) ac_site_file1=./$CONFIG_SITE;; + esac +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site +fi +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue + if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" \ + || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "failed to load site script $ac_site_file +See \`config.log' for more details" "$LINENO" 5; } + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special files + # actually), so we avoid doing that. DJGPP emulates it as a regular file. + if test /dev/null != "$cache_file" && test -f "$cache_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) as_fn_append ac_configure_args " '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 +fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +# This file contains common code used by all simulators. +# +# SIM_AC_COMMON invokes AC macros used by all simulators and by the common +# directory. It is intended to be invoked before any target specific stuff. +# SIM_AC_OUTPUT is a cover function to AC_OUTPUT to generate the Makefile. +# It is intended to be invoked last. +# +# The simulator's configure.ac should look like: +# +# dnl Process this file with autoconf to produce a configure script. +# AC_PREREQ(2.64)dnl +# AC_INIT(Makefile.in) +# sinclude(../common/aclocal.m4) +# +# SIM_AC_COMMON +# +# ... target specific stuff ... +# +# SIM_AC_OUTPUT + +# Include global overrides and fixes for Autoconf. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008, 2009 Free Software Foundation, Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + + + +# serial 56 LT_INIT + + +# LT_PREREQ(VERSION) +# ------------------ +# Complain and exit if this libtool version is less that VERSION. + + + +# _LT_CHECK_BUILDDIR +# ------------------ +# Complain if the absolute build directory name contains unusual characters + + + +# LT_INIT([OPTIONS]) +# ------------------ +# LT_INIT + +# Old names: +# This is what autoupdate's m4 run will expand. It fires +# the warning (with _au_warn_XXX), outputs it into the +# updated configure.ac (with AC_DIAGNOSE), and then outputs +# the replacement expansion. + + +# This is an auxiliary macro that is also run when +# autoupdate runs m4. It simply calls m4_warning, but +# we need a wrapper so that each warning is emitted only +# once. We break the quoting in m4_warning's argument in +# order to expand this macro's arguments, not AU_DEFUN's. + + +# Finally, this is the expansion that is picked up by +# autoconf. It tells the user to run autoupdate, and +# then outputs the replacement expansion. We do not care +# about autoupdate's warning because that contains +# information on what to do *after* running autoupdate. + +# This is what autoupdate's m4 run will expand. It fires +# the warning (with _au_warn_XXX), outputs it into the +# updated configure.ac (with AC_DIAGNOSE), and then outputs +# the replacement expansion. + + +# This is an auxiliary macro that is also run when +# autoupdate runs m4. It simply calls m4_warning, but +# we need a wrapper so that each warning is emitted only +# once. We break the quoting in m4_warning's argument in +# order to expand this macro's arguments, not AU_DEFUN's. + + +# Finally, this is the expansion that is picked up by +# autoconf. It tells the user to run autoupdate, and +# then outputs the replacement expansion. We do not care +# about autoupdate's warning because that contains +# information on what to do *after* running autoupdate. + + + +# _LT_CC_BASENAME(CC) +# ------------------- +# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. + + + +# _LT_FILEUTILS_DEFAULTS +# ---------------------- +# It is okay to use these file commands and assume they have been set +# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. +# _LT_FILEUTILS_DEFAULTS + + +# _LT_SETUP +# --------- +# _LT_SETUP + + +# _LT_PREPARE_SED_QUOTE_VARS +# -------------------------- +# Define a few sed substitution that help us do robust quoting. + + +# _LT_PROG_LTMAIN +# --------------- +# Note that this code is called both from `configure', and `config.status' +# now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, +# `config.status' has no value for ac_aux_dir unless we are using Automake, +# so we pass a copy along to make sure it has a sensible value anyway. +# _LT_PROG_LTMAIN + + +## ------------------------------------- ## +## Accumulate code for creating libtool. ## +## ------------------------------------- ## + +# So that we can recreate a full libtool script including additional +# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS +# in macros and then make a single call at the end using the `libtool' +# label. + + +# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) +# ---------------------------------------- +# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. + + +# Initialize. + + + +# _LT_CONFIG_LIBTOOL([COMMANDS]) +# ------------------------------ +# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. + + +# Initialize. + + + +# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) +# ----------------------------------------------------- + + + +# _LT_FORMAT_COMMENT([COMMENT]) +# ----------------------------- +# Add leading comment marks to the start of each line, and a trailing +# full-stop to the whole comment if one is not present already. + + + + +## ------------------------ ## +## FIXME: Eliminate VARNAME ## +## ------------------------ ## + + +# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) +# ------------------------------------------------------------------- +# CONFIGNAME is the name given to the value in the libtool script. +# VARNAME is the (base) name used in the configure script. +# VALUE may be 0, 1 or 2 for a computed quote escaped value based on +# VARNAME. Any other value will be used directly. + + + +# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) +# -------------------------------------------------------- + + + +# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) +# ------------------------------------------------ + + + +# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) +# --------------------------------------------------------- + + + +# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) +# -------------------------------------------------- + + + +# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) +# --------------------------------------------------- + + + +# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) +# --------------------------------------------------- + + + + +# lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) +# ------------------------------------------------ + + + + +# _LT_CONFIG_STATUS_DECLARE([VARNAME]) +# ------------------------------------ +# Quote a variable value, and forward it to `config.status' so that its +# declaration there will have the same value as in `configure'. VARNAME +# must have a single quote delimited value for this to work. + + + +# _LT_CONFIG_STATUS_DECLARATIONS +# ------------------------------ +# We delimit libtool config variables with single quotes, so when +# we write them to config.status, we have to be sure to quote all +# embedded single quotes properly. In configure, this macro expands +# each variable declared with _LT_DECL (and _LT_TAGDECL) into: +# +# <var>='`$ECHO "$<var>" | $SED "$delay_single_quote_subst"`' + + + +# _LT_LIBTOOL_TAGS +# ---------------- +# Output comment and list of tags supported by the script + + + +# _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) +# ----------------------------------- +# Extract the dictionary values for VARNAME (optionally with TAG) and +# expand to a commented shell variable setting: +# +# # Some comment about what VAR is for. +# visible_name=$lt_internal_name + + + +# _LT_LIBTOOL_CONFIG_VARS +# ----------------------- +# Produce commented declarations of non-tagged libtool config variables +# suitable for insertion in the LIBTOOL CONFIG section of the `libtool' +# script. Tagged libtool config variables (even for the LIBTOOL CONFIG +# section) are produced by _LT_LIBTOOL_TAG_VARS. + + + +# _LT_LIBTOOL_TAG_VARS(TAG) +# ------------------------- + + + +# _LT_TAGVAR(VARNAME, [TAGNAME]) +# ------------------------------ + + + +# _LT_CONFIG_COMMANDS +# ------------------- +# Send accumulated output to $CONFIG_STATUS. Thanks to the lists of +# variables for single and double quote escaping we saved from calls +# to _LT_DECL, we can put quote escaped variables declarations +# into `config.status', and then the shell code to quote escape them in +# for loops in `config.status'. Finally, any additional code accumulated +# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. +#_LT_CONFIG_COMMANDS + + +# Initialize. + + +# _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) +# ------------------------------------ +# Generate a child script FILE with all initialization necessary to +# reuse the environment learned by the parent script, and make the +# file executable. If COMMENT is supplied, it is inserted after the +# `#!' sequence but before initialization text begins. After this +# macro, additional text can be appended to FILE to form the body of +# the child script. The macro ends with non-zero status if the +# file could not be fully written (such as if the disk is full). +# _LT_GENERATED_FILE_INIT + +# LT_OUTPUT +# --------- +# This macro allows early generation of the libtool script (before +# AC_OUTPUT is called), incase it is used in configure for compilation +# tests. +# LT_OUTPUT + + +# _LT_CONFIG(TAG) +# --------------- +# If TAG is the built-in tag, create an initial libtool script with a +# default configuration from the untagged config vars. Otherwise add code +# to config.status for appending the configuration named by TAG from the +# matching tagged config vars. +# _LT_CONFIG + + +# LT_SUPPORTED_TAG(TAG) +# --------------------- +# Trace this macro to discover what tags are supported by the libtool +# --tag option, using: +# autoconf --trace 'LT_SUPPORTED_TAG:$1' + + + +# C support is built-in for now + + + + +# LT_LANG(LANG) +# ------------- +# Enable libtool support for the given language if not already enabled. +# LT_LANG + + +# _LT_LANG(LANGNAME) +# ------------------ +# _LT_LANG + + +# _LT_LANG_DEFAULT_CONFIG +# ----------------------- +# _LT_LANG_DEFAULT_CONFIG + +# Obsolete macros: +# This is what autoupdate's m4 run will expand. It fires +# the warning (with _au_warn_XXX), outputs it into the +# updated configure.ac (with AC_DIAGNOSE), and then outputs +# the replacement expansion. + + +# This is an auxiliary macro that is also run when +# autoupdate runs m4. It simply calls m4_warning, but +# we need a wrapper so that each warning is emitted only +# once. We break the quoting in m4_warning's argument in +# order to expand this macro's arguments, not AU_DEFUN's. + + +# Finally, this is the expansion that is picked up by +# autoconf. It tells the user to run autoupdate, and +# then outputs the replacement expansion. We do not care +# about autoupdate's warning because that contains +# information on what to do *after* running autoupdate. + +# This is what autoupdate's m4 run will expand. It fires +# the warning (with _au_warn_XXX), outputs it into the +# updated configure.ac (with AC_DIAGNOSE), and then outputs +# the replacement expansion. + + +# This is an auxiliary macro that is also run when +# autoupdate runs m4. It simply calls m4_warning, but +# we need a wrapper so that each warning is emitted only +# once. We break the quoting in m4_warning's argument in +# order to expand this macro's arguments, not AU_DEFUN's. + + +# Finally, this is the expansion that is picked up by +# autoconf. It tells the user to run autoupdate, and +# then outputs the replacement expansion. We do not care +# about autoupdate's warning because that contains +# information on what to do *after* running autoupdate. + +# This is what autoupdate's m4 run will expand. It fires +# the warning (with _au_warn_XXX), outputs it into the +# updated configure.ac (with AC_DIAGNOSE), and then outputs +# the replacement expansion. + + +# This is an auxiliary macro that is also run when +# autoupdate runs m4. It simply calls m4_warning, but +# we need a wrapper so that each warning is emitted only +# once. We break the quoting in m4_warning's argument in +# order to expand this macro's arguments, not AU_DEFUN's. + + +# Finally, this is the expansion that is picked up by +# autoconf. It tells the user to run autoupdate, and +# then outputs the replacement expansion. We do not care +# about autoupdate's warning because that contains +# information on what to do *after* running autoupdate. + +# This is what autoupdate's m4 run will expand. It fires +# the warning (with _au_warn_XXX), outputs it into the +# updated configure.ac (with AC_DIAGNOSE), and then outputs +# the replacement expansion. + + +# This is an auxiliary macro that is also run when +# autoupdate runs m4. It simply calls m4_warning, but +# we need a wrapper so that each warning is emitted only +# once. We break the quoting in m4_warning's argument in +# order to expand this macro's arguments, not AU_DEFUN's. + + +# Finally, this is the expansion that is picked up by +# autoconf. It tells the user to run autoupdate, and +# then outputs the replacement expansion. We do not care +# about autoupdate's warning because that contains +# information on what to do *after* running autoupdate. + +# This is what autoupdate's m4 run will expand. It fires +# the warning (with _au_warn_XXX), outputs it into the +# updated configure.ac (with AC_DIAGNOSE), and then outputs +# the replacement expansion. + + +# This is an auxiliary macro that is also run when +# autoupdate runs m4. It simply calls m4_warning, but +# we need a wrapper so that each warning is emitted only +# once. We break the quoting in m4_warning's argument in +# order to expand this macro's arguments, not AU_DEFUN's. + + +# Finally, this is the expansion that is picked up by +# autoconf. It tells the user to run autoupdate, and +# then outputs the replacement expansion. We do not care +# about autoupdate's warning because that contains +# information on what to do *after* running autoupdate. + + + +# _LT_TAG_COMPILER +# ---------------- +# _LT_TAG_COMPILER + + +# _LT_COMPILER_BOILERPLATE +# ------------------------ +# Check for compiler boilerplate output or warnings with +# the simple compiler test code. +# _LT_COMPILER_BOILERPLATE + + +# _LT_LINKER_BOILERPLATE +# ---------------------- +# Check for linker boilerplate output or warnings with +# the simple link test code. +# _LT_LINKER_BOILERPLATE + +# _LT_REQUIRED_DARWIN_CHECKS +# ------------------------- + + + +# _LT_DARWIN_LINKER_FEATURES +# -------------------------- +# Checks for linker and compiler features on darwin + + +# _LT_SYS_MODULE_PATH_AIX +# ----------------------- +# Links a minimal program and checks the executable +# for the system default hardcoded library path. In most cases, +# this is /usr/lib:/lib, but when the MPI compilers are used +# the location of the communication and MPI libs are included too. +# If we don't find anything, use the default library path according +# to the aix ld manual. +# _LT_SYS_MODULE_PATH_AIX + + +# _LT_SHELL_INIT(ARG) +# ------------------- +# _LT_SHELL_INIT + + + +# _LT_PROG_ECHO_BACKSLASH +# ----------------------- +# Find how we can fake an echo command that does not interpret backslash. +# In particular, with Autoconf 2.60 or later we add some code to the start +# of the generated configure script which will find a shell with a builtin +# printf (which we can use as an echo command). +# _LT_PROG_ECHO_BACKSLASH + + +# _LT_ENABLE_LOCK +# --------------- +# _LT_ENABLE_LOCK + + +# _LT_CMD_OLD_ARCHIVE +# ------------------- +# _LT_CMD_OLD_ARCHIVE + + +# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------------------- +# Check whether the given compiler option works +# _LT_COMPILER_OPTION + +# Old name: +# This is what autoupdate's m4 run will expand. It fires +# the warning (with _au_warn_XXX), outputs it into the +# updated configure.ac (with AC_DIAGNOSE), and then outputs +# the replacement expansion. + + +# This is an auxiliary macro that is also run when +# autoupdate runs m4. It simply calls m4_warning, but +# we need a wrapper so that each warning is emitted only +# once. We break the quoting in m4_warning's argument in +# order to expand this macro's arguments, not AU_DEFUN's. + + +# Finally, this is the expansion that is picked up by +# autoconf. It tells the user to run autoupdate, and +# then outputs the replacement expansion. We do not care +# about autoupdate's warning because that contains +# information on what to do *after* running autoupdate. + + + +# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------- +# Check whether the given linker option works +# _LT_LINKER_OPTION + +# Old name: +# This is what autoupdate's m4 run will expand. It fires +# the warning (with _au_warn_XXX), outputs it into the +# updated configure.ac (with AC_DIAGNOSE), and then outputs +# the replacement expansion. + + +# This is an auxiliary macro that is also run when +# autoupdate runs m4. It simply calls m4_warning, but +# we need a wrapper so that each warning is emitted only +# once. We break the quoting in m4_warning's argument in +# order to expand this macro's arguments, not AU_DEFUN's. + + +# Finally, this is the expansion that is picked up by +# autoconf. It tells the user to run autoupdate, and +# then outputs the replacement expansion. We do not care +# about autoupdate's warning because that contains +# information on what to do *after* running autoupdate. + + + +# LT_CMD_MAX_LEN +#--------------- +# LT_CMD_MAX_LEN + +# Old name: +# This is what autoupdate's m4 run will expand. It fires +# the warning (with _au_warn_XXX), outputs it into the +# updated configure.ac (with AC_DIAGNOSE), and then outputs +# the replacement expansion. + + +# This is an auxiliary macro that is also run when +# autoupdate runs m4. It simply calls m4_warning, but +# we need a wrapper so that each warning is emitted only +# once. We break the quoting in m4_warning's argument in +# order to expand this macro's arguments, not AU_DEFUN's. + + +# Finally, this is the expansion that is picked up by +# autoconf. It tells the user to run autoupdate, and +# then outputs the replacement expansion. We do not care +# about autoupdate's warning because that contains +# information on what to do *after* running autoupdate. + + + +# _LT_HEADER_DLFCN +# ---------------- +# _LT_HEADER_DLFCN + + +# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, +# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) +# ---------------------------------------------------------------- +# _LT_TRY_DLOPEN_SELF + + +# LT_SYS_DLOPEN_SELF +# ------------------ +# LT_SYS_DLOPEN_SELF + +# Old name: +# This is what autoupdate's m4 run will expand. It fires +# the warning (with _au_warn_XXX), outputs it into the +# updated configure.ac (with AC_DIAGNOSE), and then outputs +# the replacement expansion. + + +# This is an auxiliary macro that is also run when +# autoupdate runs m4. It simply calls m4_warning, but +# we need a wrapper so that each warning is emitted only +# once. We break the quoting in m4_warning's argument in +# order to expand this macro's arguments, not AU_DEFUN's. + + +# Finally, this is the expansion that is picked up by +# autoconf. It tells the user to run autoupdate, and +# then outputs the replacement expansion. We do not care +# about autoupdate's warning because that contains +# information on what to do *after* running autoupdate. + + + +# _LT_COMPILER_C_O([TAGNAME]) +# --------------------------- +# Check to see if options -c and -o are simultaneously supported by compiler. +# This macro does not hard code the compiler like AC_PROG_CC_C_O. +# _LT_COMPILER_C_O + + +# _LT_COMPILER_FILE_LOCKS([TAGNAME]) +# ---------------------------------- +# Check to see if we can do hard links to lock some files if needed +# _LT_COMPILER_FILE_LOCKS + + +# _LT_CHECK_OBJDIR +# ---------------- +# _LT_CHECK_OBJDIR + + +# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) +# -------------------------------------- +# Check hardcoding attributes. +# _LT_LINKER_HARDCODE_LIBPATH + + +# _LT_CMD_STRIPLIB +# ---------------- +# _LT_CMD_STRIPLIB + + +# _LT_SYS_DYNAMIC_LINKER([TAG]) +# ----------------------------- +# PORTME Fill in your ld.so characteristics +# _LT_SYS_DYNAMIC_LINKER + + +# _LT_PATH_TOOL_PREFIX(TOOL) +# -------------------------- +# find a file program which can recognize shared library +# _LT_PATH_TOOL_PREFIX + +# Old name: +# This is what autoupdate's m4 run will expand. It fires +# the warning (with _au_warn_XXX), outputs it into the +# updated configure.ac (with AC_DIAGNOSE), and then outputs +# the replacement expansion. + + +# This is an auxiliary macro that is also run when +# autoupdate runs m4. It simply calls m4_warning, but +# we need a wrapper so that each warning is emitted only +# once. We break the quoting in m4_warning's argument in +# order to expand this macro's arguments, not AU_DEFUN's. + + +# Finally, this is the expansion that is picked up by +# autoconf. It tells the user to run autoupdate, and +# then outputs the replacement expansion. We do not care +# about autoupdate's warning because that contains +# information on what to do *after* running autoupdate. + + + +# _LT_PATH_MAGIC +# -------------- +# find a file program which can recognize a shared library +# _LT_PATH_MAGIC + + +# LT_PATH_LD +# ---------- +# find the pathname to the GNU or non-GNU linker +# LT_PATH_LD + +# Old names: +# This is what autoupdate's m4 run will expand. It fires +# the warning (with _au_warn_XXX), outputs it into the +# updated configure.ac (with AC_DIAGNOSE), and then outputs +# the replacement expansion. + + +# This is an auxiliary macro that is also run when +# autoupdate runs m4. It simply calls m4_warning, but +# we need a wrapper so that each warning is emitted only +# once. We break the quoting in m4_warning's argument in +# order to expand this macro's arguments, not AU_DEFUN's. + + +# Finally, this is the expansion that is picked up by +# autoconf. It tells the user to run autoupdate, and +# then outputs the replacement expansion. We do not care +# about autoupdate's warning because that contains +# information on what to do *after* running autoupdate. + +# This is what autoupdate's m4 run will expand. It fires +# the warning (with _au_warn_XXX), outputs it into the +# updated configure.ac (with AC_DIAGNOSE), and then outputs +# the replacement expansion. + + +# This is an auxiliary macro that is also run when +# autoupdate runs m4. It simply calls m4_warning, but +# we need a wrapper so that each warning is emitted only +# once. We break the quoting in m4_warning's argument in +# order to expand this macro's arguments, not AU_DEFUN's. + + +# Finally, this is the expansion that is picked up by +# autoconf. It tells the user to run autoupdate, and +# then outputs the replacement expansion. We do not care +# about autoupdate's warning because that contains +# information on what to do *after* running autoupdate. + + + +# _LT_PATH_LD_GNU +#- -------------- +# _LT_PATH_LD_GNU + + +# _LT_CMD_RELOAD +# -------------- +# find reload flag for linker +# -- PORTME Some linkers may need a different reload flag. +# _LT_CMD_RELOAD + + +# _LT_CHECK_MAGIC_METHOD +# ---------------------- +# how to check for library dependencies +# -- PORTME fill in with the dynamic library characteristics +# _LT_CHECK_MAGIC_METHOD + + +# LT_PATH_NM +# ---------- +# find the pathname to a BSD- or MS-compatible name lister +# LT_PATH_NM + +# Old names: +# This is what autoupdate's m4 run will expand. It fires +# the warning (with _au_warn_XXX), outputs it into the +# updated configure.ac (with AC_DIAGNOSE), and then outputs +# the replacement expansion. + + +# This is an auxiliary macro that is also run when +# autoupdate runs m4. It simply calls m4_warning, but +# we need a wrapper so that each warning is emitted only +# once. We break the quoting in m4_warning's argument in +# order to expand this macro's arguments, not AU_DEFUN's. + + +# Finally, this is the expansion that is picked up by +# autoconf. It tells the user to run autoupdate, and +# then outputs the replacement expansion. We do not care +# about autoupdate's warning because that contains +# information on what to do *after* running autoupdate. + +# This is what autoupdate's m4 run will expand. It fires +# the warning (with _au_warn_XXX), outputs it into the +# updated configure.ac (with AC_DIAGNOSE), and then outputs +# the replacement expansion. + + +# This is an auxiliary macro that is also run when +# autoupdate runs m4. It simply calls m4_warning, but +# we need a wrapper so that each warning is emitted only +# once. We break the quoting in m4_warning's argument in +# order to expand this macro's arguments, not AU_DEFUN's. + + +# Finally, this is the expansion that is picked up by +# autoconf. It tells the user to run autoupdate, and +# then outputs the replacement expansion. We do not care +# about autoupdate's warning because that contains +# information on what to do *after* running autoupdate. + + + +# LT_LIB_M +# -------- +# check for math library +# LT_LIB_M + +# Old name: +# This is what autoupdate's m4 run will expand. It fires +# the warning (with _au_warn_XXX), outputs it into the +# updated configure.ac (with AC_DIAGNOSE), and then outputs +# the replacement expansion. + + +# This is an auxiliary macro that is also run when +# autoupdate runs m4. It simply calls m4_warning, but +# we need a wrapper so that each warning is emitted only +# once. We break the quoting in m4_warning's argument in +# order to expand this macro's arguments, not AU_DEFUN's. + + +# Finally, this is the expansion that is picked up by +# autoconf. It tells the user to run autoupdate, and +# then outputs the replacement expansion. We do not care +# about autoupdate's warning because that contains +# information on what to do *after* running autoupdate. + + + +# _LT_COMPILER_NO_RTTI([TAGNAME]) +# ------------------------------- +# _LT_COMPILER_NO_RTTI + + +# _LT_CMD_GLOBAL_SYMBOLS +# ---------------------- + # _LT_CMD_GLOBAL_SYMBOLS + + +# _LT_COMPILER_PIC([TAGNAME]) +# --------------------------- +# _LT_COMPILER_PIC + + +# _LT_LINKER_SHLIBS([TAGNAME]) +# ---------------------------- +# See if the linker supports building shared libraries. +# _LT_LINKER_SHLIBS + + +# _LT_LANG_C_CONFIG([TAG]) +# ------------------------ +# Ensure that the configuration variables for a C compiler are suitably +# defined. These variables are subsequently used by _LT_CONFIG to write +# the compiler configuration to `libtool'. +# _LT_LANG_C_CONFIG + + +# _LT_LANG_CXX_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for a C++ compiler are suitably +# defined. These variables are subsequently used by _LT_CONFIG to write +# the compiler configuration to `libtool'. +# _LT_LANG_CXX_CONFIG + + +# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) +# --------------------------------- +# Figure out "hidden" library dependencies from verbose +# compiler output when linking a shared library. +# Parse the compiler output and extract the necessary +# objects, libraries and library flags. +# _LT_SYS_HIDDEN_LIBDEPS + + +# _LT_LANG_F77_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for a Fortran 77 compiler are +# suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +# _LT_LANG_F77_CONFIG + + +# _LT_LANG_FC_CONFIG([TAG]) +# ------------------------- +# Ensure that the configuration variables for a Fortran compiler are +# suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +# _LT_LANG_FC_CONFIG + + +# _LT_LANG_GCJ_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for the GNU Java Compiler compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +# _LT_LANG_GCJ_CONFIG + + +# _LT_LANG_RC_CONFIG([TAG]) +# ------------------------- +# Ensure that the configuration variables for the Windows resource compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +# _LT_LANG_RC_CONFIG + + +# LT_PROG_GCJ +# ----------- + + +# Old name: +# This is what autoupdate's m4 run will expand. It fires +# the warning (with _au_warn_XXX), outputs it into the +# updated configure.ac (with AC_DIAGNOSE), and then outputs +# the replacement expansion. + + +# This is an auxiliary macro that is also run when +# autoupdate runs m4. It simply calls m4_warning, but +# we need a wrapper so that each warning is emitted only +# once. We break the quoting in m4_warning's argument in +# order to expand this macro's arguments, not AU_DEFUN's. + + +# Finally, this is the expansion that is picked up by +# autoconf. It tells the user to run autoupdate, and +# then outputs the replacement expansion. We do not care +# about autoupdate's warning because that contains +# information on what to do *after* running autoupdate. + + + +# LT_PROG_RC +# ---------- + + +# Old name: +# This is what autoupdate's m4 run will expand. It fires +# the warning (with _au_warn_XXX), outputs it into the +# updated configure.ac (with AC_DIAGNOSE), and then outputs +# the replacement expansion. + + +# This is an auxiliary macro that is also run when +# autoupdate runs m4. It simply calls m4_warning, but +# we need a wrapper so that each warning is emitted only +# once. We break the quoting in m4_warning's argument in +# order to expand this macro's arguments, not AU_DEFUN's. + + +# Finally, this is the expansion that is picked up by +# autoconf. It tells the user to run autoupdate, and +# then outputs the replacement expansion. We do not care +# about autoupdate's warning because that contains +# information on what to do *after* running autoupdate. + + + +# _LT_DECL_EGREP +# -------------- +# If we don't have a new enough Autoconf to choose the best grep +# available, choose the one first in the user's PATH. + + + +# _LT_DECL_OBJDUMP +# -------------- +# If we don't have a new enough Autoconf to choose the best objdump +# available, choose the one first in the user's PATH. + + + +# _LT_DECL_SED +# ------------ +# Check for a fully-functional sed program, that truncates +# as few characters as possible. Prefer GNU sed if found. +# _LT_DECL_SED + +#m4_ifndef + +# Old name: +# This is what autoupdate's m4 run will expand. It fires +# the warning (with _au_warn_XXX), outputs it into the +# updated configure.ac (with AC_DIAGNOSE), and then outputs +# the replacement expansion. + + +# This is an auxiliary macro that is also run when +# autoupdate runs m4. It simply calls m4_warning, but +# we need a wrapper so that each warning is emitted only +# once. We break the quoting in m4_warning's argument in +# order to expand this macro's arguments, not AU_DEFUN's. + + +# Finally, this is the expansion that is picked up by +# autoconf. It tells the user to run autoupdate, and +# then outputs the replacement expansion. We do not care +# about autoupdate's warning because that contains +# information on what to do *after* running autoupdate. + + + +# _LT_CHECK_SHELL_FEATURES +# ------------------------ +# Find out whether the shell is Bourne or XSI compatible, +# or has some other useful features. +# _LT_CHECK_SHELL_FEATURES + + +# _LT_PROG_XSI_SHELLFNS +# --------------------- +# Bourne and XSI compatible variants of some useful shell functions. + + +# Helper functions for option handling. -*- Autoconf -*- +# +# Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# Written by Gary V. Vaughan, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 6 ltoptions.m4 + +# This is to help aclocal find these macros, as it can't see m4_define. + + + +# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) +# ------------------------------------------ + + + +# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) +# --------------------------------------- +# Set option OPTION-NAME for macro MACRO-NAME, and if there is a +# matching handler defined, dispatch to it. Other OPTION-NAMEs are +# saved as a flag. + + + +# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) +# ------------------------------------------------------------ +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. + + + +# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) +# ------------------------------------------------------- +# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME +# are set. + + + +# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) +# ---------------------------------------- +# OPTION-LIST is a space-separated list of Libtool options associated +# with MACRO-NAME. If any OPTION has a matching handler declared with +# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about +# the unknown option and exit. +# _LT_SET_OPTIONS + + +## --------------------------------- ## +## Macros to handle LT_INIT options. ## +## --------------------------------- ## + +# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) +# ----------------------------------------- + + + +# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) +# ----------------------------------------------- +# LT_OPTION_DEFINE + + +# dlopen +# ------ + + +# This is what autoupdate's m4 run will expand. It fires +# the warning (with _au_warn_XXX), outputs it into the +# updated configure.ac (with AC_DIAGNOSE), and then outputs +# the replacement expansion. + + +# This is an auxiliary macro that is also run when +# autoupdate runs m4. It simply calls m4_warning, but +# we need a wrapper so that each warning is emitted only +# once. We break the quoting in m4_warning's argument in +# order to expand this macro's arguments, not AU_DEFUN's. + + +# Finally, this is the expansion that is picked up by +# autoconf. It tells the user to run autoupdate, and +# then outputs the replacement expansion. We do not care +# about autoupdate's warning because that contains +# information on what to do *after* running autoupdate. + + + + +# win32-dll +# --------- +# Declare package support for building win32 dll's. +# win32-dll + +# This is what autoupdate's m4 run will expand. It fires +# the warning (with _au_warn_XXX), outputs it into the +# updated configure.ac (with AC_DIAGNOSE), and then outputs +# the replacement expansion. + + +# This is an auxiliary macro that is also run when +# autoupdate runs m4. It simply calls m4_warning, but +# we need a wrapper so that each warning is emitted only +# once. We break the quoting in m4_warning's argument in +# order to expand this macro's arguments, not AU_DEFUN's. + + +# Finally, this is the expansion that is picked up by +# autoconf. It tells the user to run autoupdate, and +# then outputs the replacement expansion. We do not care +# about autoupdate's warning because that contains +# information on what to do *after* running autoupdate. + + + + +# _LT_ENABLE_SHARED([DEFAULT]) +# ---------------------------- +# implement the --enable-shared flag, and supports the `shared' and +# `disable-shared' LT_INIT options. +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +# _LT_ENABLE_SHARED + + + + +# Old names: + + + + +# This is what autoupdate's m4 run will expand. It fires +# the warning (with _au_warn_XXX), outputs it into the +# updated configure.ac (with AC_DIAGNOSE), and then outputs +# the replacement expansion. + + +# This is an auxiliary macro that is also run when +# autoupdate runs m4. It simply calls m4_warning, but +# we need a wrapper so that each warning is emitted only +# once. We break the quoting in m4_warning's argument in +# order to expand this macro's arguments, not AU_DEFUN's. + + +# Finally, this is the expansion that is picked up by +# autoconf. It tells the user to run autoupdate, and +# then outputs the replacement expansion. We do not care +# about autoupdate's warning because that contains +# information on what to do *after* running autoupdate. + +# This is what autoupdate's m4 run will expand. It fires +# the warning (with _au_warn_XXX), outputs it into the +# updated configure.ac (with AC_DIAGNOSE), and then outputs +# the replacement expansion. + + +# This is an auxiliary macro that is also run when +# autoupdate runs m4. It simply calls m4_warning, but +# we need a wrapper so that each warning is emitted only +# once. We break the quoting in m4_warning's argument in +# order to expand this macro's arguments, not AU_DEFUN's. + + +# Finally, this is the expansion that is picked up by +# autoconf. It tells the user to run autoupdate, and +# then outputs the replacement expansion. We do not care +# about autoupdate's warning because that contains +# information on what to do *after* running autoupdate. + + + + + +# _LT_ENABLE_STATIC([DEFAULT]) +# ---------------------------- +# implement the --enable-static flag, and support the `static' and +# `disable-static' LT_INIT options. +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +# _LT_ENABLE_STATIC + + + + +# Old names: + + + + +# This is what autoupdate's m4 run will expand. It fires +# the warning (with _au_warn_XXX), outputs it into the +# updated configure.ac (with AC_DIAGNOSE), and then outputs +# the replacement expansion. + + +# This is an auxiliary macro that is also run when +# autoupdate runs m4. It simply calls m4_warning, but +# we need a wrapper so that each warning is emitted only +# once. We break the quoting in m4_warning's argument in +# order to expand this macro's arguments, not AU_DEFUN's. + + +# Finally, this is the expansion that is picked up by +# autoconf. It tells the user to run autoupdate, and +# then outputs the replacement expansion. We do not care +# about autoupdate's warning because that contains +# information on what to do *after* running autoupdate. + +# This is what autoupdate's m4 run will expand. It fires +# the warning (with _au_warn_XXX), outputs it into the +# updated configure.ac (with AC_DIAGNOSE), and then outputs +# the replacement expansion. + + +# This is an auxiliary macro that is also run when +# autoupdate runs m4. It simply calls m4_warning, but +# we need a wrapper so that each warning is emitted only +# once. We break the quoting in m4_warning's argument in +# order to expand this macro's arguments, not AU_DEFUN's. + + +# Finally, this is the expansion that is picked up by +# autoconf. It tells the user to run autoupdate, and +# then outputs the replacement expansion. We do not care +# about autoupdate's warning because that contains +# information on what to do *after* running autoupdate. + + + + + +# _LT_ENABLE_FAST_INSTALL([DEFAULT]) +# ---------------------------------- +# implement the --enable-fast-install flag, and support the `fast-install' +# and `disable-fast-install' LT_INIT options. +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +# _LT_ENABLE_FAST_INSTALL + + + + +# Old names: +# This is what autoupdate's m4 run will expand. It fires +# the warning (with _au_warn_XXX), outputs it into the +# updated configure.ac (with AC_DIAGNOSE), and then outputs +# the replacement expansion. + + +# This is an auxiliary macro that is also run when +# autoupdate runs m4. It simply calls m4_warning, but +# we need a wrapper so that each warning is emitted only +# once. We break the quoting in m4_warning's argument in +# order to expand this macro's arguments, not AU_DEFUN's. + + +# Finally, this is the expansion that is picked up by +# autoconf. It tells the user to run autoupdate, and +# then outputs the replacement expansion. We do not care +# about autoupdate's warning because that contains +# information on what to do *after* running autoupdate. + + +# This is what autoupdate's m4 run will expand. It fires +# the warning (with _au_warn_XXX), outputs it into the +# updated configure.ac (with AC_DIAGNOSE), and then outputs +# the replacement expansion. + + +# This is an auxiliary macro that is also run when +# autoupdate runs m4. It simply calls m4_warning, but +# we need a wrapper so that each warning is emitted only +# once. We break the quoting in m4_warning's argument in +# order to expand this macro's arguments, not AU_DEFUN's. + + +# Finally, this is the expansion that is picked up by +# autoconf. It tells the user to run autoupdate, and +# then outputs the replacement expansion. We do not care +# about autoupdate's warning because that contains +# information on what to do *after* running autoupdate. + + + + +# _LT_WITH_PIC([MODE]) +# -------------------- +# implement the --with-pic flag, and support the `pic-only' and `no-pic' +# LT_INIT options. +# MODE is either `yes' or `no'. If omitted, it defaults to `both'. +# _LT_WITH_PIC + + + + +# Old name: +# This is what autoupdate's m4 run will expand. It fires +# the warning (with _au_warn_XXX), outputs it into the +# updated configure.ac (with AC_DIAGNOSE), and then outputs +# the replacement expansion. + + +# This is an auxiliary macro that is also run when +# autoupdate runs m4. It simply calls m4_warning, but +# we need a wrapper so that each warning is emitted only +# once. We break the quoting in m4_warning's argument in +# order to expand this macro's arguments, not AU_DEFUN's. + + +# Finally, this is the expansion that is picked up by +# autoconf. It tells the user to run autoupdate, and +# then outputs the replacement expansion. We do not care +# about autoupdate's warning because that contains +# information on what to do *after* running autoupdate. + + + +## ----------------- ## +## LTDL_INIT Options ## +## ----------------- ## + + + + + + + + + + +# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- +# +# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. +# Written by Gary V. Vaughan, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 6 ltsugar.m4 + +# This is to help aclocal find these macros, as it can't see m4_define. + + + +# lt_join(SEP, ARG1, [ARG2...]) +# ----------------------------- +# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their +# associated separator. +# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier +# versions in m4sugar had bugs. + + + + +# lt_car(LIST) +# lt_cdr(LIST) +# ------------ +# Manipulate m4 lists. +# These macros are necessary as long as will still need to support +# Autoconf-2.59 which quotes differently. + + + + + +# lt_append(MACRO-NAME, STRING, [SEPARATOR]) +# ------------------------------------------ +# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. +# Note that neither SEPARATOR nor STRING are expanded; they are appended +# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). +# No SEPARATOR is output if MACRO-NAME was previously undefined (different +# than defined and empty). +# +# This macro is needed until we can rely on Autoconf 2.62, since earlier +# versions of m4sugar mistakenly expanded SEPARATOR but not STRING. + + + + +# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) +# ---------------------------------------------------------- +# Produce a SEP delimited list of all paired combinations of elements of +# PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list +# has the form PREFIXmINFIXSUFFIXn. +# Needed until we can rely on m4_combine added in Autoconf 2.62. + + + +# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) +# ----------------------------------------------------------------------- +# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited +# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. + + + +# lt_dict_add(DICT, KEY, VALUE) +# ----------------------------- + + + +# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) +# -------------------------------------------- + + + +# lt_dict_fetch(DICT, KEY, [SUBKEY]) +# ---------------------------------- + + + +# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) +# ----------------------------------------------------------------- + + + +# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) +# -------------------------------------------------------------- + + +# ltversion.m4 -- version numbers -*- Autoconf -*- +# +# Copyright (C) 2004 Free Software Foundation, Inc. +# Written by Scott James Remnant, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# Generated from ltversion.in. + +# serial 3134 ltversion.m4 +# This file is part of GNU Libtool + + + + + + +# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- +# +# Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc. +# Written by Scott James Remnant, 2004. +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 4 lt~obsolete.m4 + +# These exist entirely to fool aclocal when bootstrapping libtool. +# +# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN) +# which have later been changed to m4_define as they aren't part of the +# exported API, or moved to Autoconf or Automake where they belong. +# +# The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN +# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us +# using a macro with the same name in our local m4/libtool.m4 it'll +# pull the old libtool.m4 in (it doesn't see our shiny new m4_define +# and doesn't know about Autoconf macros at all.) +# +# So we provide this file, which has a silly filename so it's always +# included after everything else. This provides aclocal with the +# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything +# because those macros already exist, or will be overwritten later. +# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. +# +# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. +# Yes, that means every name once taken will need to remain here until +# we give up compatibility with versions before 1.7, at which point +# we need to keep only those names which we still refer to. + +# This is to help aclocal find these macros, as it can't see m4_define. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +## -*- Autoconf -*- + +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 8 + +# Based on depend.m4 from automake 1.9, modified for standalone use in +# an environment where GNU make is required. + +# ZW_PROG_COMPILER_DEPENDENCIES +# ----------------------------- +# Variant of _AM_DEPENDENCIES which just does the dependency probe and +# sets fooDEPMODE accordingly. Cache-variable compatible with +# original; not side-effect compatible. As the users of this macro +# may require accurate dependencies for correct builds, it does *not* +# honor --disable-dependency-checking, and failure to detect a usable +# method is an error. depcomp is assumed to be located in +# $ac_aux_dir. +# +# FIXME: Should use the Autoconf 2.5x language-selection mechanism. + + + +# AM_SET_DEPDIR +# ------------- +# Choose a directory name for dependency files. + + +# ZW_CREATE_DEPDIR +# ---------------- +# As AM_SET_DEPDIR, but also create the directory at config.status time. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# intl sister-directory configuration rules. +# + +# The idea behind this macro is that there's no need to repeat all the +# autoconf probes done by the intl directory - it's already done them +# for us. In fact, there's no need even to look at the cache for the +# answers. All we need to do is nab a few pieces of information. +# The intl directory is set up to make this easy, by generating a +# small file which can be sourced as a shell script; then we produce +# the necessary substitutions and definitions for this directory. + + + +# Autoconf M4 include file defining utility macros for complex Canadian +# cross builds. + + + + + + + + + +#### +# _NCN_TOOL_PREFIXES: Some stuff that oughtta be done in AC_CANONICAL_SYSTEM +# or AC_INIT. +# These demand that AC_CANONICAL_SYSTEM be called beforehand. + +#### +# NCN_STRICT_CHECK_TOOLS(variable, progs-to-check-for,[value-if-not-found],[path]) +# Like plain AC_CHECK_TOOLS, but require prefix if build!=host. + + +#### +# NCN_STRICT_CHECK_TARGET_TOOLS(variable, progs-to-check-for,[value-if-not-found],[path]) +# Like CVS Autoconf AC_CHECK_TARGET_TOOLS, but require prefix if build!=target. + + + +# Backported from Autoconf 2.5x; can go away when and if +# we switch. Put the OS path separator in $PATH_SEPARATOR. + + + + + + + + +# ACX_HAVE_GCC_FOR_TARGET +# Check if the variable GCC_FOR_TARGET really points to a GCC binary. + + +# ACX_CHECK_INSTALLED_TARGET_TOOL(VAR, PROG) +# Searching for installed target binutils. We need to take extra care, +# else we may find the wrong assembler, linker, etc., and lose. +# +# First try --with-build-time-tools, if specified. +# +# For build != host, we ask the installed GCC for the name of the tool it +# uses, and accept it if it is an absolute path. This is because the +# only good choice for a compiler is the same GCC version that is being +# installed (or we couldn't make target libraries), and we assume that +# on the host system we'll have not only the same GCC version, but also +# the same binutils version. +# +# For build == host, search the same directories that the installed +# compiler will search. We used to do this for the assembler, linker, +# and nm only; for simplicity of configuration, however, we extend this +# criterion to tools (such as ar and ranlib) that are never invoked by +# the compiler, to avoid mismatches. +# +# Also note we have to check MD_EXEC_PREFIX before checking the user's path +# if build == target. This makes the most sense only when bootstrapping, +# but we also do so when build != host. In this case, we hope that the +# build and host systems will have similar contents of MD_EXEC_PREFIX. +# +# If we do not find a suitable binary, then try the user's path. + + +### +# AC_PROG_CPP_WERROR +# Used for autoconf 2.5x to force AC_PREPROC_IFELSE to reject code which +# triggers warnings from the preprocessor. Will be in autoconf 2.58. +# For now, using this also overrides header checks to use only the +# preprocessor (matches 2.13 behavior; matching 2.58's behavior is a +# bit harder from here). +# Eventually autoconf will default to checking headers with the compiler +# instead, and we'll have to do this differently. + +# AC_PROG_CPP_WERROR + +# Test for GNAT. +# We require the gnatbind & gnatmake programs, as well as a compiler driver +# that understands Ada. We use the user's CC setting, already found, and +# possibly add $1 to the command-line parameters. +# +# Sets the shell variable have_gnat to yes or no as appropriate, and +# substitutes GNATBIND and GNATMAKE. + + + + + + + + + + + + + + + + + + + + + + + + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5; } + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +$as_echo_n "checking whether the C compiler works... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { { ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. + break;; + * ) + break;; + esac +done +test "$ac_cv_exeext" = no && ac_cv_exeext= + +else + ac_file='' +fi +if test -z "$ac_file"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "C compiler cannot create executables +See \`config.log' for more details" "$LINENO" 5; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +$as_echo_n "checking for C compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +ac_exeext=$ac_cv_exeext + +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest conftest$ac_cv_exeext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdio.h> +int +main () +{ +FILE *f = fopen ("conftest.out", "w"); + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +ac_clean_files="$ac_clean_files conftest.out" +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +if test "$cross_compiling" != yes; then + { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if { ac_try='./conftest$ac_cv_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details" "$LINENO" 5; } + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if ${ac_cv_objext+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of object files: cannot compile +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if ${ac_cv_c_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if ${ac_cv_prog_cc_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdarg.h> +#include <stdio.h> +struct stat; +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +ac_aux_dir= +for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 +fi + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + + +# Make sure we can run config.sub. +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if ${ac_cv_build+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; +esac +build=$ac_cv_build +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if ${ac_cv_host+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build +else + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; +esac +host=$ac_cv_host +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5 +$as_echo_n "checking target system type... " >&6; } +if ${ac_cv_target+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "x$target_alias" = x; then + ac_cv_target=$ac_cv_host +else + ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5 +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5 +$as_echo "$ac_cv_target" >&6; } +case $ac_cv_target in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical target" "$LINENO" 5;; +esac +target=$ac_cv_target +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_target +shift +target_cpu=$1 +target_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +target_os=$* +IFS=$ac_save_IFS +case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac + + +# The aliases save the names the user supplied, while $host etc. +# will get canonicalized. +test -n "$target_alias" && + test "$program_prefix$program_suffix$program_transform_name" = \ + NONENONEs,x,x, && + program_prefix=${target_alias}- + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if ${ac_cv_prog_CPP+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since + # <limits.h> exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include <limits.h> +#else +# include <assert.h> +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <ac_nonexistent.h> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since + # <limits.h> exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include <limits.h> +#else +# include <assert.h> +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <ac_nonexistent.h> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if ${ac_cv_path_GREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_GREP" || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if ${ac_cv_path_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_EGREP" || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if ${ac_cv_header_stdc+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdlib.h> +#include <stdarg.h> +#include <string.h> +#include <float.h> + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <string.h> + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdlib.h> + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <ctype.h> +#include <stdlib.h> +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "#define STDC_HEADERS 1" >>confdefs.h + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + + ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default" +if test "x$ac_cv_header_minix_config_h" = xyes; then : + MINIX=yes +else + MINIX= +fi + + + if test "$MINIX" = yes; then + +$as_echo "#define _POSIX_SOURCE 1" >>confdefs.h + + +$as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h + + +$as_echo "#define _MINIX 1" >>confdefs.h + + fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5 +$as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; } +if ${ac_cv_safe_to_define___extensions__+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +# define __EXTENSIONS__ 1 + $ac_includes_default +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_safe_to_define___extensions__=yes +else + ac_cv_safe_to_define___extensions__=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5 +$as_echo "$ac_cv_safe_to_define___extensions__" >&6; } + test $ac_cv_safe_to_define___extensions__ = yes && + $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h + + $as_echo "#define _ALL_SOURCE 1" >>confdefs.h + + $as_echo "#define _GNU_SOURCE 1" >>confdefs.h + + $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h + + $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h + + +test "$program_prefix" != NONE && + program_transform_name="s&^&$program_prefix&;$program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s&\$&$program_suffix&;$program_transform_name" +# Double any \ or $. +# By default was `s,x,x', remove it if useless. +ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' +program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } +if test -z "$INSTALL"; then +if ${ac_cv_path_install+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in #(( + ./ | .// | /[cC]/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + fi + done + done + ;; +esac + + done +IFS=$as_save_IFS + +rm -rf conftest.one conftest.two conftest.dir + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null + +DEPDIR="${am__leading_dot}deps" + +case `pwd` in + *\ * | *\ *) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 +$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; +esac + + + +macro_version='2.2.7a' +macro_revision='1.3134' + + + + + + + + + + + + + +ltmain="$ac_aux_dir/ltmain.sh" + +# Backslashify metacharacters that are still active within +# double-quoted strings. +sed_quote_subst='s/\(["`$\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' + +ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 +$as_echo_n "checking how to print strings... " >&6; } +# Test print first, because it will be a builtin if present. +if test "X`print -r -- -n 2>/dev/null`" = X-n && \ + test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='print -r --' +elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='printf %s\n' +else + # Use this function as a fallback that always works. + func_fallback_echo () + { + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' + } + ECHO='func_fallback_echo' +fi + +# func_echo_all arg... +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "" +} + +case "$ECHO" in + printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 +$as_echo "printf" >&6; } ;; + print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 +$as_echo "print -r" >&6; } ;; + *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 +$as_echo "cat" >&6; } ;; +esac + + + + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if ${ac_cv_path_SED+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed + { ac_script=; unset ac_script;} + if test -z "$SED"; then + ac_path_SED_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_SED" || continue +# Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_SED_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_SED"; then + as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 + fi +else + ac_cv_path_SED=$SED +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +$as_echo "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed + +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 +$as_echo_n "checking for fgrep... " >&6; } +if ${ac_cv_path_FGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 + then ac_cv_path_FGREP="$GREP -F" + else + if test -z "$FGREP"; then + ac_path_FGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in fgrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_FGREP" || continue +# Check for GNU ac_path_FGREP and select it if it is found. + # Check for GNU $ac_path_FGREP +case `"$ac_path_FGREP" --version 2>&1` in +*GNU*) + ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'FGREP' >> "conftest.nl" + "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_FGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_FGREP="$ac_path_FGREP" + ac_path_FGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_FGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_FGREP"; then + as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_FGREP=$FGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 +$as_echo "$ac_cv_path_FGREP" >&6; } + FGREP="$ac_cv_path_FGREP" + + +test -z "$GREP" && GREP=grep + + + + + + + + + + + + + + + + + + + +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then : + withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if ${lt_cv_path_LD+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in + *GNU* | *'with BFD'*) + test "$with_gnu_ld" != no && break + ;; + *) + test "$with_gnu_ld" != yes && break + ;; + esac + fi + done + IFS="$lt_save_ifs" +else + lt_cv_path_LD="$LD" # Let the user override the test with a path. +fi +fi + +LD="$lt_cv_path_LD" +if test -n "$LD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if ${lt_cv_prog_gnu_ld+:} false; then : + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 </dev/null` in +*GNU* | *'with BFD'*) + lt_cv_prog_gnu_ld=yes + ;; +*) + lt_cv_prog_gnu_ld=no + ;; +esac +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5 +$as_echo "$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 +$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } +if ${lt_cv_path_NM+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM="$NM" +else + lt_nm_to_check="${ac_tool_prefix}nm" + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + tmp_nm="$ac_dir/$lt_tmp_nm" + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in + */dev/null* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS="$lt_save_ifs" + done + : ${lt_cv_path_NM=no} +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 +$as_echo "$lt_cv_path_NM" >&6; } +if test "$lt_cv_path_NM" != "no"; then + NM="$lt_cv_path_NM" +else + # Didn't find any BSD compatible name lister, look for dumpbin. + if test -n "$DUMPBIN"; then : + # Let the user override the test. + else + if test -n "$ac_tool_prefix"; then + for ac_prog in dumpbin "link -dump" + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DUMPBIN+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DUMPBIN"; then + ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DUMPBIN=$ac_cv_prog_DUMPBIN +if test -n "$DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 +$as_echo "$DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$DUMPBIN" && break + done +fi +if test -z "$DUMPBIN"; then + ac_ct_DUMPBIN=$DUMPBIN + for ac_prog in dumpbin "link -dump" +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DUMPBIN"; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN +if test -n "$ac_ct_DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 +$as_echo "$ac_ct_DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_DUMPBIN" && break +done + + if test "x$ac_ct_DUMPBIN" = x; then + DUMPBIN=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DUMPBIN=$ac_ct_DUMPBIN + fi +fi + + case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in + *COFF*) + DUMPBIN="$DUMPBIN -symbols" + ;; + *) + DUMPBIN=: + ;; + esac + fi + + if test "$DUMPBIN" != ":"; then + NM="$DUMPBIN" + fi +fi +test -z "$NM" && NM=nm + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 +$as_echo_n "checking the name lister ($NM) interface... " >&6; } +if ${lt_cv_nm_interface+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&5 + (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&5 + (eval echo "\"\$as_me:$LINENO: output\"" >&5) + cat conftest.out >&5 + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 +$as_echo "$lt_cv_nm_interface" >&6; } + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +$as_echo_n "checking whether ln -s works... " >&6; } +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +$as_echo "no, using $LN_S" >&6; } +fi + +# find the maximum length of command line arguments +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 +$as_echo_n "checking the maximum length of command line arguments... " >&6; } +if ${lt_cv_sys_max_cmd_len+:} false; then : + $as_echo_n "(cached) " >&6 +else + i=0 + teststring="ABCD" + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + mint*) + # On MiNT this can take a long time and run out of memory. + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8 ; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test "X"`func_fallback_echo "$teststring$teststring" 2>/dev/null` \ + = "X$teststring$teststring"; } >/dev/null 2>&1 && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac + +fi + +if test -n $lt_cv_sys_max_cmd_len ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 +$as_echo "$lt_cv_sys_max_cmd_len" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 +$as_echo "none" >&6; } +fi +max_cmd_len=$lt_cv_sys_max_cmd_len + + + + + + +: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 +$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } +# Try some XSI features +xsi_shell=no +( _lt_dummy="a/b/c" + test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \ + = c,a/b,, \ + && eval 'test $(( 1 + 1 )) -eq 2 \ + && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ + && xsi_shell=yes +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 +$as_echo "$xsi_shell" >&6; } + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 +$as_echo_n "checking whether the shell understands \"+=\"... " >&6; } +lt_shell_append=no +( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ + >/dev/null 2>&1 \ + && lt_shell_append=yes +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 +$as_echo "$lt_shell_append" >&6; } + + +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset +else + lt_unset=false +fi + + + + + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; +esac + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 +$as_echo_n "checking for $LD option to reload object files... " >&6; } +if ${lt_cv_ld_reload_flag+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_reload_flag='-r' +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 +$as_echo "$lt_cv_ld_reload_flag" >&6; } +reload_flag=$lt_cv_ld_reload_flag +case $reload_flag in +"" | " "*) ;; +*) reload_flag=" $reload_flag" ;; +esac +reload_cmds='$LD$reload_flag -o $output$reload_objs' +case $host_os in + darwin*) + if test "$GCC" = yes; then + reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' + else + reload_cmds='$LD$reload_flag -o $output$reload_objs' + fi + ;; +esac + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. +set dummy ${ac_tool_prefix}objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OBJDUMP"; then + ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OBJDUMP=$ac_cv_prog_OBJDUMP +if test -n "$OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +$as_echo "$OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OBJDUMP"; then + ac_ct_OBJDUMP=$OBJDUMP + # Extract the first word of "objdump", so it can be a program name with args. +set dummy objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OBJDUMP"; then + ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OBJDUMP="objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP +if test -n "$ac_ct_OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 +$as_echo "$ac_ct_OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OBJDUMP" = x; then + OBJDUMP="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OBJDUMP=$ac_ct_OBJDUMP + fi +else + OBJDUMP="$ac_cv_prog_OBJDUMP" +fi + +test -z "$OBJDUMP" && OBJDUMP=objdump + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 +$as_echo_n "checking how to recognize dependent libraries... " >&6; } +if ${lt_cv_deplibs_check_method+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# `unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [[regex]]' -- check by looking for files in library path +# which responds to the $file_magic_cmd with a given extended regex. +# If you have `file' or equivalent on your system and you're not sure +# whether `pass_all' will *always* work, you probably want this one. + +case $host_os in +aix[4-9]*) + lt_cv_deplibs_check_method=pass_all + ;; + +beos*) + lt_cv_deplibs_check_method=pass_all + ;; + +bsdi[45]*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' + lt_cv_file_magic_cmd='/usr/bin/file -L' + lt_cv_file_magic_test_file=/shlib/libc.so + ;; + +cygwin*) + # func_win32_libid is a shell function defined in ltmain.sh + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + ;; + +mingw* | pw32*) + # Base MSYS/MinGW do not provide the 'file' command needed by + # func_win32_libid shell function, so use a weaker test based on 'objdump', + # unless we find 'file', for example because we are cross-compiling. + # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin. + if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; + +cegcc*) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +haiku*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix[3-9]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; + +openbsd*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 +$as_echo "$lt_cv_deplibs_check_method" >&6; } +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + + + + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + +test -z "$AR" && AR=ar +test -z "$AR_FLAGS" && AR_FLAGS=cru + + + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +test -z "$STRIP" && STRIP=: + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi +else + RANLIB="$ac_cv_prog_RANLIB" +fi + +test -z "$RANLIB" && RANLIB=: + + + + + + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" +fi + +case $host_os in + darwin*) + lock_old_archive_extraction=yes ;; + *) + lock_old_archive_extraction=no ;; +esac + + + + + + + + + + + + + + + + + + + + + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AWK+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AWK="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AWK" && break +done + + + + + + + + + + + + + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# Check for command to grab the raw symbol name followed by C symbol from nm. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 +$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } +if ${lt_cv_sys_global_symbol_pipe+:} false; then : + $as_echo_n "(cached) " >&6 +else + +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[BCDEGRST]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([_A-Za-z][_A-Za-z0-9]*\)' + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[BCDT]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[ABCDGISTW]' + ;; +hpux*) + if test "$host_cpu" = ia64; then + symcode='[ABCDEGRST]' + fi + ;; +irix* | nonstopux*) + symcode='[BCDEGRST]' + ;; +osf*) + symcode='[BCDEGQRST]' + ;; +solaris*) + symcode='[BDRT]' + ;; +sco3.2v5*) + symcode='[DT]' + ;; +sysv4.2uw2*) + symcode='[DT]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[ABDT]' + ;; +sysv4) + symcode='[DFNSTU]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[ABCDGIRSTW]' ;; +esac + +# Transform an extracted symbol line into a proper C declaration. +# Some systems (esp. on ia64) link data and code symbols differently, +# so use this general approach. +lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Fake it for dumpbin and say T for any non-static function + # and D for any global variable. + # Also find C++ and __fastcall symbols from MSVC++, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK '"\ +" {last_section=section; section=\$ 3};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ +" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ +" s[1]~/^[@?]/{print s[1], s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ +" ' prfx=^$ac_symprfx" + else + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + fi + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + # Now try to grab the symbols. + nlist=conftest.nm + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 + (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + + cat <<_LT_EOF >> conftest.$ac_ext + +/* The mapping between symbol names and symbols. */ +const struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_save_LIBS="$LIBS" + lt_save_CFLAGS="$CFLAGS" + LIBS="conftstm.$ac_objext" + CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext}; then + pipe_works=yes + fi + LIBS="$lt_save_LIBS" + CFLAGS="$lt_save_CFLAGS" + else + echo "cannot find nm_test_func in $nlist" >&5 + fi + else + echo "cannot find nm_test_var in $nlist" >&5 + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 + fi + else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done + +fi + +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 +$as_echo "failed" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 +$as_echo "ok" >&6; } +fi + + + + + + + + + + + + + + + + + + + + + + +# Check whether --enable-libtool-lock was given. +if test "${enable_libtool_lock+set}" = set; then : + enableval=$enable_libtool_lock; +fi + +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE="32" + ;; + *ELF-64*) + HPUX_IA64_MODE="64" + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out which ABI we are using. + echo '#line '$LINENO' "configure"' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + if test "$lt_cv_prog_gnu_ld" = yes; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; + x86_64-*linux*) + case `/usr/bin/file conftest.o` in + *x86-64*) + LD="${LD-ld} -m elf32_x86_64" + ;; + *) + LD="${LD-ld} -m elf_i386" + ;; + esac + ;; + powerpc64le-*linux*) + LD="${LD-ld} -m elf32lppclinux" + ;; + powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + powerpcle-*linux*) + LD="${LD-ld} -m elf64lppc" + ;; + powerpc-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 +$as_echo_n "checking whether the C compiler needs -belf... " >&6; } +if ${lt_cv_cc_needs_belf+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_cc_needs_belf=yes +else + lt_cv_cc_needs_belf=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 +$as_echo "$lt_cv_cc_needs_belf" >&6; } + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; +sparc*-*solaris*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) LD="${LD-ld} -m elf64_sparc" ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +esac + +need_locks="$enable_libtool_lock" + + + case $host_os in + rhapsody* | darwin*) + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. +set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DSYMUTIL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DSYMUTIL"; then + ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DSYMUTIL=$ac_cv_prog_DSYMUTIL +if test -n "$DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 +$as_echo "$DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DSYMUTIL"; then + ac_ct_DSYMUTIL=$DSYMUTIL + # Extract the first word of "dsymutil", so it can be a program name with args. +set dummy dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DSYMUTIL"; then + ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL +if test -n "$ac_ct_DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 +$as_echo "$ac_ct_DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DSYMUTIL" = x; then + DSYMUTIL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DSYMUTIL=$ac_ct_DSYMUTIL + fi +else + DSYMUTIL="$ac_cv_prog_DSYMUTIL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. +set dummy ${ac_tool_prefix}nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_NMEDIT+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NMEDIT"; then + ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +NMEDIT=$ac_cv_prog_NMEDIT +if test -n "$NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 +$as_echo "$NMEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_NMEDIT"; then + ac_ct_NMEDIT=$NMEDIT + # Extract the first word of "nmedit", so it can be a program name with args. +set dummy nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_NMEDIT"; then + ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_NMEDIT="nmedit" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT +if test -n "$ac_ct_NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 +$as_echo "$ac_ct_NMEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_NMEDIT" = x; then + NMEDIT=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + NMEDIT=$ac_ct_NMEDIT + fi +else + NMEDIT="$ac_cv_prog_NMEDIT" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. +set dummy ${ac_tool_prefix}lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_LIPO+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$LIPO"; then + ac_cv_prog_LIPO="$LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_LIPO="${ac_tool_prefix}lipo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +LIPO=$ac_cv_prog_LIPO +if test -n "$LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 +$as_echo "$LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_LIPO"; then + ac_ct_LIPO=$LIPO + # Extract the first word of "lipo", so it can be a program name with args. +set dummy lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_LIPO+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LIPO"; then + ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_LIPO="lipo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO +if test -n "$ac_ct_LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 +$as_echo "$ac_ct_LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LIPO" = x; then + LIPO=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LIPO=$ac_ct_LIPO + fi +else + LIPO="$ac_cv_prog_LIPO" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL"; then + ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_OTOOL="${ac_tool_prefix}otool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OTOOL=$ac_cv_prog_OTOOL +if test -n "$OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 +$as_echo "$OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL"; then + ac_ct_OTOOL=$OTOOL + # Extract the first word of "otool", so it can be a program name with args. +set dummy otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL"; then + ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OTOOL="otool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL +if test -n "$ac_ct_OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 +$as_echo "$ac_ct_OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL" = x; then + OTOOL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL=$ac_ct_OTOOL + fi +else + OTOOL="$ac_cv_prog_OTOOL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OTOOL64+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL64"; then + ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OTOOL64=$ac_cv_prog_OTOOL64 +if test -n "$OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 +$as_echo "$OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL64"; then + ac_ct_OTOOL64=$OTOOL64 + # Extract the first word of "otool64", so it can be a program name with args. +set dummy otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL64"; then + ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OTOOL64="otool64" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 +if test -n "$ac_ct_OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 +$as_echo "$ac_ct_OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL64" = x; then + OTOOL64=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL64=$ac_ct_OTOOL64 + fi +else + OTOOL64="$ac_cv_prog_OTOOL64" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 +$as_echo_n "checking for -single_module linker flag... " >&6; } +if ${lt_cv_apple_cc_single_mod+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_apple_cc_single_mod=no + if test -z "${LT_MULTI_MODULE}"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&5 + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 +$as_echo "$lt_cv_apple_cc_single_mod" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 +$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } +if ${lt_cv_ld_exported_symbols_list+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_ld_exported_symbols_list=yes +else + lt_cv_ld_exported_symbols_list=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 +$as_echo "$lt_cv_ld_exported_symbols_list" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 +$as_echo_n "checking for -force_load linker flag... " >&6; } +if ${lt_cv_ld_force_load+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_force_load=no + cat > conftest.c << _LT_EOF +int forced_loaded() { return 2;} +_LT_EOF + echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 + $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 + echo "$AR cru libconftest.a conftest.o" >&5 + $AR cru libconftest.a conftest.o 2>&5 + cat > conftest.c << _LT_EOF +int main() { return 0;} +_LT_EOF + echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err + _lt_result=$? + if test -f conftest && test ! -s conftest.err && test $_lt_result = 0 && $GREP forced_load conftest 2>&1 >/dev/null; then + lt_cv_ld_force_load=yes + else + cat conftest.err >&5 + fi + rm -f conftest.err libconftest.a conftest conftest.c + rm -rf conftest.dSYM + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 +$as_echo "$lt_cv_ld_force_load" >&6; } + case $host_os in + rhapsody* | darwin1.[012]) + _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + darwin*) # darwin 5.x on + # if running on 10.5 or later, the deployment target defaults + # to the OS version, if on x86, and 10.4, the deployment + # target defaults to 10.4. Don't you love it? + case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in + 10.0,*86*-darwin8*|10.0,*-darwin[91]*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + 10.[012][,.]*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + 10.*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test "$lt_cv_apple_cc_single_mod" = "yes"; then + _lt_dar_single_mod='$single_module' + fi + if test "$lt_cv_ld_exported_symbols_list" = "yes"; then + _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac + +for ac_header in dlfcn.h +do : + ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default +" +if test "x$ac_cv_header_dlfcn_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_DLFCN_H 1 +_ACEOF + +fi + +done + + + +# autoconf.info says this should be called right after AC_INIT. +ac_config_headers="$ac_config_headers config.h:config.in" + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 +$as_echo_n "checking whether byte ordering is bigendian... " >&6; } +if ${ac_cv_c_bigendian+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_c_bigendian=unknown + # See if we're dealing with a universal compiler. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifndef __APPLE_CC__ + not a universal capable compiler + #endif + typedef int dummy; + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + + # Check for potential -arch flags. It is not universal unless + # there are at least two -arch flags with different values. + ac_arch= + ac_prev= + for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do + if test -n "$ac_prev"; then + case $ac_word in + i?86 | x86_64 | ppc | ppc64) + if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then + ac_arch=$ac_word + else + ac_cv_c_bigendian=universal + break + fi + ;; + esac + ac_prev= + elif test "x$ac_word" = "x-arch"; then + ac_prev=arch + fi + done +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if test $ac_cv_c_bigendian = unknown; then + # See if sys/param.h defines the BYTE_ORDER macro. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> + #include <sys/param.h> + +int +main () +{ +#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ + && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ + && LITTLE_ENDIAN) + bogus endian macros + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + # It does; now see whether it defined to BIG_ENDIAN or not. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> + #include <sys/param.h> + +int +main () +{ +#if BYTE_ORDER != BIG_ENDIAN + not big endian + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_bigendian=yes +else + ac_cv_c_bigendian=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + if test $ac_cv_c_bigendian = unknown; then + # See if <limits.h> defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <limits.h> + +int +main () +{ +#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) + bogus endian macros + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + # It does; now see whether it defined to _BIG_ENDIAN or not. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <limits.h> + +int +main () +{ +#ifndef _BIG_ENDIAN + not big endian + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_bigendian=yes +else + ac_cv_c_bigendian=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + if test $ac_cv_c_bigendian = unknown; then + # Compile a test program. + if test "$cross_compiling" = yes; then : + # Try to guess by grepping values from an object file. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +short int ascii_mm[] = + { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; + short int ascii_ii[] = + { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; + int use_ascii (int i) { + return ascii_mm[i] + ascii_ii[i]; + } + short int ebcdic_ii[] = + { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; + short int ebcdic_mm[] = + { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; + int use_ebcdic (int i) { + return ebcdic_mm[i] + ebcdic_ii[i]; + } + extern int foo; + +int +main () +{ +return use_ascii (foo) == use_ebcdic (foo); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then + ac_cv_c_bigendian=yes + fi + if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then + if test "$ac_cv_c_bigendian" = unknown; then + ac_cv_c_bigendian=no + else + # finding both strings is unlikely to happen, but who knows? + ac_cv_c_bigendian=unknown + fi + fi +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ + + /* Are we little or big endian? From Harbison&Steele. */ + union + { + long int l; + char c[sizeof (long int)]; + } u; + u.l = 1; + return u.c[sizeof (long int) - 1] == 1; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_c_bigendian=no +else + ac_cv_c_bigendian=yes +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 +$as_echo "$ac_cv_c_bigendian" >&6; } + case $ac_cv_c_bigendian in #( + yes) + $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h +;; #( + no) + ;; #( + universal) + +$as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h + + ;; #( + *) + as_fn_error $? "unknown endianness + presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;; + esac + + + + +# Put a plausible default for CC_FOR_BUILD in Makefile. +if test -z "$CC_FOR_BUILD"; then + if test "x$cross_compiling" = "xno"; then + CC_FOR_BUILD='$(CC)' + else + CC_FOR_BUILD=gcc + fi +fi + + + + +AR=${AR-ar} + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi +else + RANLIB="$ac_cv_prog_RANLIB" +fi + + +# Some of the common include files depend on bfd.h, and bfd.h checks +# that config.h is included first by testing that the PACKAGE macro +# is defined. +PACKAGE=sim + +cat >>confdefs.h <<_ACEOF +#define PACKAGE "$PACKAGE" +_ACEOF + + + +# Dependency checking. +ac_config_commands="$ac_config_commands depdir" + + +depcc="$CC" am_compiler_list= + +am_depcomp=$ac_aux_dir/depcomp +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if ${am_cv_CC_dependencies_compiler_type+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + for depmode in $am_compiler_list; do + if test $depmode = none; then break; fi + + $as_echo "$as_me:$LINENO: trying $depmode" >&5 + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "include sub/conftest.Po" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. + depcmd="depmode=$depmode \ + source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c" + echo "| $depcmd" | sed -e 's/ */ /g' >&5 + if env $depcmd > conftest.err 2>&1 && + grep sub/conftst6.h sub/conftest.Po >>conftest.err 2>&1 && + grep sub/conftest.${OBJEXT-o} sub/conftest.Po >>conftest.err 2>&1 && + ${MAKE-make} -s -f confmf >>conftest.err 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + $as_echo "$as_me:$LINENO: success" >&5 + break + fi + fi + $as_echo "$as_me:$LINENO: failure, diagnostics are:" >&5 + sed -e 's/^/| /' < conftest.err >&5 + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } +if test x${am_cv_CC_dependencies_compiler_type-none} = xnone +then as_fn_error $? "no usable dependency style found" "$LINENO" 5 +else CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + +fi + + +# Check for the 'make' the user wants to use. +for ac_prog in make +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_MAKE+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$MAKE"; then + ac_cv_prog_MAKE="$MAKE" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_MAKE="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +MAKE=$ac_cv_prog_MAKE +if test -n "$MAKE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAKE" >&5 +$as_echo "$MAKE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$MAKE" && break +done + +MAKE_IS_GNU= +case "`$MAKE --version 2>&1 | sed 1q`" in + *GNU*) + MAKE_IS_GNU=yes + ;; +esac + if test "$MAKE_IS_GNU" = yes; then + GMAKE_TRUE= + GMAKE_FALSE='#' +else + GMAKE_TRUE='#' + GMAKE_FALSE= +fi + + +ALL_LINGUAS= +# If we haven't got the data from the intl directory, +# assume NLS is disabled. +USE_NLS=no +LIBINTL= +LIBINTL_DEP= +INCINTL= +XGETTEXT= +GMSGFMT= +POSUB= + +if test -f ../../intl/config.intl; then + . ../../intl/config.intl +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5 +$as_echo_n "checking whether NLS is requested... " >&6; } +if test x"$USE_NLS" != xyes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define ENABLE_NLS 1" >>confdefs.h + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for catalogs to be installed" >&5 +$as_echo_n "checking for catalogs to be installed... " >&6; } + # Look for .po and .gmo files in the source directory. + CATALOGS= + XLINGUAS= + for cat in $srcdir/po/*.gmo $srcdir/po/*.po; do + # If there aren't any .gmo files the shell will give us the + # literal string "../path/to/srcdir/po/*.gmo" which has to be + # weeded out. + case "$cat" in *\**) + continue;; + esac + # The quadruple backslash is collapsed to a double backslash + # by the backticks, then collapsed again by the double quotes, + # leaving us with one backslash in the sed expression (right + # before the dot that mustn't act as a wildcard). + cat=`echo $cat | sed -e "s!$srcdir/po/!!" -e "s!\\\\.po!.gmo!"` + lang=`echo $cat | sed -e "s!\\\\.gmo!!"` + # The user is allowed to set LINGUAS to a list of languages to + # install catalogs for. If it's empty that means "all of them." + if test "x$LINGUAS" = x; then + CATALOGS="$CATALOGS $cat" + XLINGUAS="$XLINGUAS $lang" + else + case "$LINGUAS" in *$lang*) + CATALOGS="$CATALOGS $cat" + XLINGUAS="$XLINGUAS $lang" + ;; + esac + fi + done + LINGUAS="$XLINGUAS" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LINGUAS" >&5 +$as_echo "$LINGUAS" >&6; } + + + DATADIRNAME=share + + INSTOBJEXT=.mo + + GENCAT=gencat + + CATOBJEXT=.gmo + +fi + +# Check for common headers. +# FIXME: Seems to me this can cause problems for i386-windows hosts. +# At one point there were hardcoded AC_DEFINE's if ${host} = i386-*-windows*. +for ac_header in stdlib.h string.h strings.h unistd.h time.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + +for ac_header in sys/time.h sys/times.h sys/resource.h sys/mman.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + +for ac_header in fcntl.h fpu_control.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + +for ac_header in dlfcn.h errno.h sys/stat.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + +for ac_func in getrusage time sigaction __setfpucw +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + +for ac_func in mmap munmap lstat truncate ftruncate posix_fallocate +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + +ac_fn_c_check_member "$LINENO" "struct stat" "st_dev" "ac_cv_member_struct_stat_st_dev" "#ifdef HAVE_SYS_TYPES_H +#include <sys/types.h> +#endif +#ifdef HAVE_SYS_STAT_H +#include <sys/stat.h> +#endif +" +if test "x$ac_cv_member_struct_stat_st_dev" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_STAT_ST_DEV 1 +_ACEOF + + +fi +ac_fn_c_check_member "$LINENO" "struct stat" "st_ino" "ac_cv_member_struct_stat_st_ino" "#ifdef HAVE_SYS_TYPES_H +#include <sys/types.h> +#endif +#ifdef HAVE_SYS_STAT_H +#include <sys/stat.h> +#endif +" +if test "x$ac_cv_member_struct_stat_st_ino" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_STAT_ST_INO 1 +_ACEOF + + +fi +ac_fn_c_check_member "$LINENO" "struct stat" "st_mode" "ac_cv_member_struct_stat_st_mode" "#ifdef HAVE_SYS_TYPES_H +#include <sys/types.h> +#endif +#ifdef HAVE_SYS_STAT_H +#include <sys/stat.h> +#endif +" +if test "x$ac_cv_member_struct_stat_st_mode" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_STAT_ST_MODE 1 +_ACEOF + + +fi +ac_fn_c_check_member "$LINENO" "struct stat" "st_nlink" "ac_cv_member_struct_stat_st_nlink" "#ifdef HAVE_SYS_TYPES_H +#include <sys/types.h> +#endif +#ifdef HAVE_SYS_STAT_H +#include <sys/stat.h> +#endif +" +if test "x$ac_cv_member_struct_stat_st_nlink" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_STAT_ST_NLINK 1 +_ACEOF + + +fi +ac_fn_c_check_member "$LINENO" "struct stat" "st_uid" "ac_cv_member_struct_stat_st_uid" "#ifdef HAVE_SYS_TYPES_H +#include <sys/types.h> +#endif +#ifdef HAVE_SYS_STAT_H +#include <sys/stat.h> +#endif +" +if test "x$ac_cv_member_struct_stat_st_uid" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_STAT_ST_UID 1 +_ACEOF + + +fi +ac_fn_c_check_member "$LINENO" "struct stat" "st_gid" "ac_cv_member_struct_stat_st_gid" "#ifdef HAVE_SYS_TYPES_H +#include <sys/types.h> +#endif +#ifdef HAVE_SYS_STAT_H +#include <sys/stat.h> +#endif +" +if test "x$ac_cv_member_struct_stat_st_gid" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_STAT_ST_GID 1 +_ACEOF + + +fi +ac_fn_c_check_member "$LINENO" "struct stat" "st_rdev" "ac_cv_member_struct_stat_st_rdev" "#ifdef HAVE_SYS_TYPES_H +#include <sys/types.h> +#endif +#ifdef HAVE_SYS_STAT_H +#include <sys/stat.h> +#endif +" +if test "x$ac_cv_member_struct_stat_st_rdev" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_STAT_ST_RDEV 1 +_ACEOF + + +fi +ac_fn_c_check_member "$LINENO" "struct stat" "st_size" "ac_cv_member_struct_stat_st_size" "#ifdef HAVE_SYS_TYPES_H +#include <sys/types.h> +#endif +#ifdef HAVE_SYS_STAT_H +#include <sys/stat.h> +#endif +" +if test "x$ac_cv_member_struct_stat_st_size" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_STAT_ST_SIZE 1 +_ACEOF + + +fi +ac_fn_c_check_member "$LINENO" "struct stat" "st_blksize" "ac_cv_member_struct_stat_st_blksize" "#ifdef HAVE_SYS_TYPES_H +#include <sys/types.h> +#endif +#ifdef HAVE_SYS_STAT_H +#include <sys/stat.h> +#endif +" +if test "x$ac_cv_member_struct_stat_st_blksize" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_STAT_ST_BLKSIZE 1 +_ACEOF + + +fi +ac_fn_c_check_member "$LINENO" "struct stat" "st_blocks" "ac_cv_member_struct_stat_st_blocks" "#ifdef HAVE_SYS_TYPES_H +#include <sys/types.h> +#endif +#ifdef HAVE_SYS_STAT_H +#include <sys/stat.h> +#endif +" +if test "x$ac_cv_member_struct_stat_st_blocks" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_STAT_ST_BLOCKS 1 +_ACEOF + + +fi +ac_fn_c_check_member "$LINENO" "struct stat" "st_atime" "ac_cv_member_struct_stat_st_atime" "#ifdef HAVE_SYS_TYPES_H +#include <sys/types.h> +#endif +#ifdef HAVE_SYS_STAT_H +#include <sys/stat.h> +#endif +" +if test "x$ac_cv_member_struct_stat_st_atime" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_STAT_ST_ATIME 1 +_ACEOF + + +fi +ac_fn_c_check_member "$LINENO" "struct stat" "st_mtime" "ac_cv_member_struct_stat_st_mtime" "#ifdef HAVE_SYS_TYPES_H +#include <sys/types.h> +#endif +#ifdef HAVE_SYS_STAT_H +#include <sys/stat.h> +#endif +" +if test "x$ac_cv_member_struct_stat_st_mtime" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_STAT_ST_MTIME 1 +_ACEOF + + +fi +ac_fn_c_check_member "$LINENO" "struct stat" "st_ctime" "ac_cv_member_struct_stat_st_ctime" "#ifdef HAVE_SYS_TYPES_H +#include <sys/types.h> +#endif +#ifdef HAVE_SYS_STAT_H +#include <sys/stat.h> +#endif +" +if test "x$ac_cv_member_struct_stat_st_ctime" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_STAT_ST_CTIME 1 +_ACEOF + + +fi + +ac_fn_c_check_type "$LINENO" "socklen_t" "ac_cv_type_socklen_t" "#include <sys/types.h> +#include <sys/socket.h> + +" +if test "x$ac_cv_type_socklen_t" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_SOCKLEN_T 1 +_ACEOF + + +fi + + +# Check for socket libraries +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for bind in -lsocket" >&5 +$as_echo_n "checking for bind in -lsocket... " >&6; } +if ${ac_cv_lib_socket_bind+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsocket $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char bind (); +int +main () +{ +return bind (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_socket_bind=yes +else + ac_cv_lib_socket_bind=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_bind" >&5 +$as_echo "$ac_cv_lib_socket_bind" >&6; } +if test "x$ac_cv_lib_socket_bind" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBSOCKET 1 +_ACEOF + + LIBS="-lsocket $LIBS" + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lnsl" >&5 +$as_echo_n "checking for gethostbyname in -lnsl... " >&6; } +if ${ac_cv_lib_nsl_gethostbyname+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lnsl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char gethostbyname (); +int +main () +{ +return gethostbyname (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_nsl_gethostbyname=yes +else + ac_cv_lib_nsl_gethostbyname=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_gethostbyname" >&5 +$as_echo "$ac_cv_lib_nsl_gethostbyname" >&6; } +if test "x$ac_cv_lib_nsl_gethostbyname" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBNSL 1 +_ACEOF + + LIBS="-lnsl $LIBS" + +fi + + +# BFD conditionally uses zlib, so we must link it in if libbfd does, by +# using the same condition. + + # Use the system's zlib library. + zlibdir="-L\$(top_builddir)/../zlib" + zlibinc="-I\$(top_srcdir)/../zlib" + +# Check whether --with-system-zlib was given. +if test "${with_system_zlib+set}" = set; then : + withval=$with_system_zlib; if test x$with_system_zlib = xyes ; then + zlibdir= + zlibinc= + fi + +fi + + + + + +# BFD uses libdl when when plugins enabled. + + maybe_plugins=no + for ac_header in dlfcn.h +do : + ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default +" +if test "x$ac_cv_header_dlfcn_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_DLFCN_H 1 +_ACEOF + maybe_plugins=yes +fi + +done + + for ac_header in windows.h +do : + ac_fn_c_check_header_compile "$LINENO" "windows.h" "ac_cv_header_windows_h" "$ac_includes_default +" +if test "x$ac_cv_header_windows_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_WINDOWS_H 1 +_ACEOF + maybe_plugins=yes +fi + +done + + + # Check whether --enable-plugins was given. +if test "${enable_plugins+set}" = set; then : + enableval=$enable_plugins; case "${enableval}" in + no) plugins=no ;; + *) plugins=yes + if test "$maybe_plugins" != "yes" ; then + as_fn_error $? "Building with plugin support requires a host that supports dlopen." "$LINENO" 5 + fi ;; + esac +else + plugins=$maybe_plugins + +fi + + if test "$plugins" = "yes"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing dlsym" >&5 +$as_echo_n "checking for library containing dlsym... " >&6; } +if ${ac_cv_search_dlsym+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlsym (); +int +main () +{ +return dlsym (); + ; + return 0; +} +_ACEOF +for ac_lib in '' dl; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_dlsym=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_dlsym+:} false; then : + break +fi +done +if ${ac_cv_search_dlsym+:} false; then : + +else + ac_cv_search_dlsym=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_dlsym" >&5 +$as_echo "$ac_cv_search_dlsym" >&6; } +ac_res=$ac_cv_search_dlsym +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + +fi + + fi + + if test "$plugins" = yes; then + PLUGINS_TRUE= + PLUGINS_FALSE='#' +else + PLUGINS_TRUE='#' + PLUGINS_FALSE= +fi + + + + + +# Set options +enable_dlopen=yes + + + + + enable_win32_dll=no + + + # Check whether --enable-shared was given. +if test "${enable_shared+set}" = set; then : + enableval=$enable_shared; p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_shared=yes +fi + + + + + + + + + + # Check whether --enable-static was given. +if test "${enable_static+set}" = set; then : + enableval=$enable_static; p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_static=yes +fi + + + + + + + + + + +# Check whether --with-pic was given. +if test "${with_pic+set}" = set; then : + withval=$with_pic; pic_mode="$withval" +else + pic_mode=default +fi + + +test -z "$pic_mode" && pic_mode=default + + + + + + + + # Check whether --enable-fast-install was given. +if test "${enable_fast_install+set}" = set; then : + enableval=$enable_fast_install; p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_fast_install=yes +fi + + + + + + + + + + + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ltmain" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' + + + + + + + + + + + + + + + + + + + + + + + + + + +test -z "$LN_S" && LN_S="ln -s" + + + + + + + + + + + + + + +if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 +$as_echo_n "checking for objdir... " >&6; } +if ${lt_cv_objdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 +$as_echo "$lt_cv_objdir" >&6; } +objdir=$lt_cv_objdir + + + + + +cat >>confdefs.h <<_ACEOF +#define LT_OBJDIR "$lt_cv_objdir/" +_ACEOF + + + + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Global variables: +ofile=libtool +can_build_shared=yes + +# All known linkers require a `.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a + +with_gnu_ld="$lt_cv_prog_gnu_ld" + +old_CC="$CC" +old_CFLAGS="$CFLAGS" + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` + + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 +$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } +if ${lt_cv_path_MAGIC_CMD+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/${ac_tool_prefix}file; then + lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + + +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 +$as_echo_n "checking for file... " >&6; } +if ${lt_cv_path_MAGIC_CMD+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/file; then + lt_cv_path_MAGIC_CMD="$ac_dir/file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + else + MAGIC_CMD=: + fi +fi + + fi + ;; +esac + +# Use C for the default configuration in the libtool script + +lt_save_CC="$CC" +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +objext=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC + +# save warnings/boilerplate of simple test code +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* + +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* + + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + +lt_prog_compiler_no_builtin_flag= + +if test "$GCC" = yes; then + case $cc_basename in + nvcc*) + lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; + *) + lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; + esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } +if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_rtti_exceptions=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="-fno-rtti -fno-exceptions" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_rtti_exceptions=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } + +if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then + lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" +else + : +fi + +fi + + + + + + + lt_prog_compiler_wl= +lt_prog_compiler_pic= +lt_prog_compiler_static= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +$as_echo_n "checking for $compiler option to produce PIC... " >&6; } + + if test "$GCC" = yes; then + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_static='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + fi + lt_prog_compiler_pic='-fPIC' + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + lt_prog_compiler_pic='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic='-fno-common' + ;; + + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + lt_prog_compiler_static= + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + ;; + + interix[3-9]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + lt_prog_compiler_can_build_shared=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic=-Kconform_pic + fi + ;; + + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + + case $cc_basename in + nvcc*) # Cuda Compiler Driver 2.2 + lt_prog_compiler_wl='-Xlinker ' + lt_prog_compiler_pic='-Xcompiler -fPIC' + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + lt_prog_compiler_wl='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + else + lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; + + hpux9* | hpux10* | hpux11*) + lt_prog_compiler_wl='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + lt_prog_compiler_static='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + lt_prog_compiler_wl='-Wl,' + # PIC (with -KPIC) is the default. + lt_prog_compiler_static='-non_shared' + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + # old Intel for x86_64 which still supported -KPIC. + ecc*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='--shared' + lt_prog_compiler_static='--static' + ;; + pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fpic' + lt_prog_compiler_static='-Bstatic' + ;; + ccc*) + lt_prog_compiler_wl='-Wl,' + # All Alpha code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + xl* | bgxl* | bgf* | mpixl*) + # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-qpic' + lt_prog_compiler_static='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ F* | *Sun*Fortran*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='' + ;; + *Sun\ C*) + # Sun C 5.9 + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='-Wl,' + ;; + esac + ;; + esac + ;; + + newsos6) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + lt_prog_compiler_wl='-Wl,' + # All OSF/1 code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + + rdos*) + lt_prog_compiler_static='-non_shared' + ;; + + solaris*) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + case $cc_basename in + f77* | f90* | f95*) + lt_prog_compiler_wl='-Qoption ld ';; + *) + lt_prog_compiler_wl='-Wl,';; + esac + ;; + + sunos4*) + lt_prog_compiler_wl='-Qoption ld ' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + lt_prog_compiler_pic='-Kconform_pic' + lt_prog_compiler_static='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + unicos*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_can_build_shared=no + ;; + + uts4*) + lt_prog_compiler_pic='-pic' + lt_prog_compiler_static='-Bstatic' + ;; + + *) + lt_prog_compiler_can_build_shared=no + ;; + esac + fi + +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic= + ;; + *) + lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5 +$as_echo "$lt_prog_compiler_pic" >&6; } + + + + + + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 +$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } +if ${lt_cv_prog_compiler_pic_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic_works=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic -DPIC" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_pic_works=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 +$as_echo "$lt_cv_prog_compiler_pic_works" >&6; } + +if test x"$lt_cv_prog_compiler_pic_works" = xyes; then + case $lt_prog_compiler_pic in + "" | " "*) ;; + *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; + esac +else + lt_prog_compiler_pic= + lt_prog_compiler_can_build_shared=no +fi + +fi + + + + + + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if ${lt_cv_prog_compiler_static_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_static_works=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_static_works=yes + fi + else + lt_cv_prog_compiler_static_works=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 +$as_echo "$lt_cv_prog_compiler_static_works" >&6; } + +if test x"$lt_cv_prog_compiler_static_works" = xyes; then + : +else + lt_prog_compiler_static= +fi + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +$as_echo_n "checking if we can lock with hard links... " >&6; } + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +$as_echo "$hard_links" >&6; } + if test "$hard_links" = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + + runpath_var= + allow_undefined_flag= + always_export_symbols=no + archive_cmds= + archive_expsym_cmds= + compiler_needs_object=no + enable_shared_with_static_runtimes=no + export_dynamic_flag_spec= + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + hardcode_automatic=no + hardcode_direct=no + hardcode_direct_absolute=no + hardcode_libdir_flag_spec= + hardcode_libdir_flag_spec_ld= + hardcode_libdir_separator= + hardcode_minus_L=no + hardcode_shlibpath_var=unsupported + inherit_rpath=no + link_all_deplibs=unknown + module_cmds= + module_expsym_cmds= + old_archive_from_new_cmds= + old_archive_from_expsyms_cmds= + thread_safe_flag_spec= + whole_archive_flag_spec= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + include_expsyms= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd*) + with_gnu_ld=no + ;; + esac + + ld_shlibs=yes + + # On some targets, GNU ld is compatible enough with the native linker + # that we're better off using the native interface for both. + lt_use_gnu_ld_interface=no + if test "$with_gnu_ld" = yes; then + case $host_os in + aix*) + # The AIX port of GNU ld has always aspired to compatibility + # with the native linker. However, as the warning in the GNU ld + # block says, versions before 2.19.5* couldn't really create working + # shared libraries, regardless of the interface used. + case `$LD -v 2>&1` in + *\ \(GNU\ Binutils\)\ 2.19.5*) ;; + *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; + *\ \(GNU\ Binutils\)\ [3-9]*) ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + fi + + if test "$lt_use_gnu_ld_interface" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + export_dynamic_flag_spec='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec= + fi + supports_anon_versioning=no + case `$LD -v 2>&1` in + *GNU\ gold*) supports_anon_versioning=yes ;; + *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix[3-9]*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.19, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to install binutils +*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. +*** You will then need to restart the configuration process. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag=unsupported + # Joseph Beckenbach <jrb3@best.com> says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec='-L$libdir' + export_dynamic_flag_spec='${wl}--export-all-symbols' + allow_undefined_flag=unsupported + always_export_symbols=no + enable_shared_with_static_runtimes=yes + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs=no + fi + ;; + + haiku*) + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + link_all_deplibs=yes + ;; + + interix[3-9]*) + hardcode_direct=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) + tmp_diet=no + if test "$host_os" = linux-dietlibc; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test "$tmp_diet" = no + then + tmp_addflag=' $pic_flag' + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group f77 and f90 compilers + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + whole_archive_flag_spec= + tmp_sharedflag='--shared' ;; + xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + nvcc*) # Cuda Compiler Driver 2.2 + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + compiler_needs_object=yes + ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + compiler_needs_object=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + + case $cc_basename in + xlf* | bgf* | bgxlf* | mpixlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' + hardcode_libdir_flag_spec= + hardcode_libdir_flag_spec_ld='-rpath $libdir' + archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + ld_shlibs=no + fi + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + ;; + + sunos4*) + archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + + if test "$ld_shlibs" = no; then + runpath_var= + hardcode_libdir_flag_spec= + export_dynamic_flag_spec= + whole_archive_flag_spec= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag=unsupported + always_export_symbols=yes + archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct=unsupported + fi + ;; + + aix[4-9]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + # Also, AIX nm treats weak defined symbols like other global + # defined symbols, whereas GNU nm marks them as "W". + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "L")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds='' + hardcode_direct=yes + hardcode_direct_absolute=yes + hardcode_libdir_separator=':' + link_all_deplibs=yes + file_list_spec='${wl}-f,' + + if test "$GCC" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + hardcode_direct=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L=yes + hardcode_libdir_flag_spec='-L$libdir' + hardcode_libdir_separator= + fi + ;; + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + export_dynamic_flag_spec='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + always_export_symbols=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + +lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\(.*\)$/\1/ + p + } + }' +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag="-z nodefs" + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + +lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\(.*\)$/\1/ + p + } + }' +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag=' ${wl}-bernotok' + allow_undefined_flag=' ${wl}-berok' + if test "$with_gnu_ld" = yes; then + # We only use this code for GNU lds that support --whole-archive. + whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec='$convenience' + fi + archive_cmds_need_lc=yes + # This is similar to how AIX traditionally builds its shared libraries. + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + bsdi[45]*) + export_dynamic_flag_spec=-rdynamic + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_from_new_cmds='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' + fix_srcfile_path='`cygpath -w "$srcfile"`' + enable_shared_with_static_runtimes=yes + ;; + + darwin* | rhapsody*) + + + archive_cmds_need_lc=no + hardcode_direct=no + hardcode_automatic=yes + hardcode_shlibpath_var=unsupported + if test "$lt_cv_ld_force_load" = "yes"; then + whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + else + whole_archive_flag_spec='' + fi + link_all_deplibs=yes + allow_undefined_flag="$_lt_dar_allow_undefined" + case $cc_basename in + ifort*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test "$_lt_dar_can_shared" = "yes"; then + output_verbose_link_cmd=func_echo_all + archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" + module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" + archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" + module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + + else + ld_shlibs=no + fi + + ;; + + dgux*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2.*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + hpux9*) + if test "$GCC" = yes; then + archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + export_dynamic_flag_spec='${wl}-E' + ;; + + hpux10*) + if test "$GCC" = yes && test "$with_gnu_ld" = no; then + archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_flag_spec_ld='+b $libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='${wl}-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + fi + ;; + + hpux11*) + if test "$GCC" = yes && test "$with_gnu_ld" = no; then + case $host_cpu in + hppa*64*) + archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + + # Older versions of the 11.00 compiler do not understand -b yet + # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 +$as_echo_n "checking if $CC understands -b... " >&6; } +if ${lt_cv_prog_compiler__b+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler__b=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -b" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler__b=yes + fi + else + lt_cv_prog_compiler__b=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 +$as_echo "$lt_cv_prog_compiler__b" >&6; } + +if test x"$lt_cv_prog_compiler__b" = xyes; then + archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' +else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' +fi + + ;; + esac + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct=no + hardcode_shlibpath_var=no + ;; + *) + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int foo(void) {} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' + +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS="$save_LDFLAGS" + else + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + inherit_rpath=yes + link_all_deplibs=yes + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + newsos6) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_shlibpath_var=no + ;; + + *nto* | *qnx*) + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + hardcode_direct=yes + hardcode_shlibpath_var=no + hardcode_direct_absolute=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + else + case $host_os in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-R$libdir' + ;; + *) + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + ;; + esac + fi + else + ld_shlibs=no + fi + ;; + + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + allow_undefined_flag=unsupported + archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + hardcode_libdir_flag_spec='-rpath $libdir' + fi + archive_cmds_need_lc='no' + hardcode_libdir_separator=: + ;; + + solaris*) + no_undefined_flag=' -z defs' + if test "$GCC" = yes; then + wlarc='${wl}' + archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='${wl}' + archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_shlibpath_var=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. GCC discards it without `$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test "$GCC" = yes; then + whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + else + whole_archive_flag_spec='-z allextract$convenience -z defaultextract' + fi + ;; + esac + link_all_deplibs=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + sysv4) + case $host_vendor in + sni) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' + reload_cmds='$CC -r -o $output$reload_objs' + hardcode_direct=no + ;; + motorola) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var=no + ;; + + sysv4.3*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + export_dynamic_flag_spec='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + no_undefined_flag='${wl}-z,text' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag='${wl}-z,text' + allow_undefined_flag='${wl}-z,nodefs' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='${wl}-R,$libdir' + hardcode_libdir_separator=':' + link_all_deplibs=yes + export_dynamic_flag_spec='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + *) + ld_shlibs=no + ;; + esac + + if test x$host_vendor = xsni; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + export_dynamic_flag_spec='${wl}-Blargedynsym' + ;; + esac + fi + fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 +$as_echo "$ld_shlibs" >&6; } +test "$ld_shlibs" = no && can_build_shared=no + +with_gnu_ld=$with_gnu_ld + + + + + + + + + + + + + + + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } +if ${lt_cv_archive_cmds_need_lc+:} false; then : + $as_echo_n "(cached) " >&6 +else + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl + pic_flag=$lt_prog_compiler_pic + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag + allow_undefined_flag= + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 + (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + then + lt_cv_archive_cmds_need_lc=no + else + lt_cv_archive_cmds_need_lc=yes + fi + allow_undefined_flag=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 +$as_echo "$lt_cv_archive_cmds_need_lc" >&6; } + archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc + ;; + esac + fi + ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +$as_echo_n "checking dynamic linker characteristics... " >&6; } + +if test "$GCC" = yes; then + case $host_os in + darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; + *) lt_awk_arg="/^libraries:/" ;; + esac + case $host_os in + mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;; + *) lt_sed_strip_eq="s,=/,/,g" ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` + case $lt_search_path_spec in + *\;*) + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` + ;; + *) + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` + ;; + esac + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary. + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path/$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" + else + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' +BEGIN {RS=" "; FS="/|\n";} { + lt_foo=""; + lt_count=0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo="/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[lt_foo]++; } + if (lt_freq[lt_foo] == 1) { print lt_foo; } +}'` + # AWK program above erroneously prepends '/' to C:/dos/paths + # for these hosts. + case $host_os in + mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ + $SED 's,/\([A-Za-z]:\),\1,g'` ;; + esac + sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix[4-9]*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib<name>.so + # instead of lib<name>.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + esac + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[23].*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2.*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +haiku*) + version_type=linux + need_lib_prefix=no + need_version=no + dynamic_linker="$host_os runtime_loader" + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=yes + sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/beos/system/lib' + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555, ... + postinstall_cmds='chmod 555 $lib' + # or fails outright, so override atomically: + install_override_mode=555 + ;; + +interix[3-9]*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + + # Some binutils ld are patched to set DT_RUNPATH + if ${lt_cv_shlibpath_overrides_runpath+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ + LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : + lt_cv_shlibpath_overrides_runpath=yes +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + +fi + + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +$as_echo "$dynamic_linker" >&6; } +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then + sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +fi +if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then + sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +$as_echo_n "checking how to hardcode library paths into programs... " >&6; } +hardcode_action= +if test -n "$hardcode_libdir_flag_spec" || + test -n "$runpath_var" || + test "X$hardcode_automatic" = "Xyes" ; then + + # We can hardcode non-existent directories. + if test "$hardcode_direct" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && + test "$hardcode_minus_L" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action=unsupported +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 +$as_echo "$hardcode_action" >&6; } + +if test "$hardcode_action" = relink || + test "$inherit_rpath" = yes; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + + + + + + if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if ${ac_cv_lib_dl_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + +fi + + ;; + + *) + ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" +if test "x$ac_cv_func_shl_load" = xyes; then : + lt_cv_dlopen="shl_load" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 +$as_echo_n "checking for shl_load in -ldld... " >&6; } +if ${ac_cv_lib_dld_shl_load+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char shl_load (); +int +main () +{ +return shl_load (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_shl_load=yes +else + ac_cv_lib_dld_shl_load=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 +$as_echo "$ac_cv_lib_dld_shl_load" >&6; } +if test "x$ac_cv_lib_dld_shl_load" = xyes; then : + lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" +else + ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" +if test "x$ac_cv_func_dlopen" = xyes; then : + lt_cv_dlopen="dlopen" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if ${ac_cv_lib_dl_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 +$as_echo_n "checking for dlopen in -lsvld... " >&6; } +if ${ac_cv_lib_svld_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsvld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_svld_dlopen=yes +else + ac_cv_lib_svld_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 +$as_echo "$ac_cv_lib_svld_dlopen" >&6; } +if test "x$ac_cv_lib_svld_dlopen" = xyes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 +$as_echo_n "checking for dld_link in -ldld... " >&6; } +if ${ac_cv_lib_dld_dld_link+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dld_link (); +int +main () +{ +return dld_link (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_dld_link=yes +else + ac_cv_lib_dld_dld_link=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 +$as_echo "$ac_cv_lib_dld_dld_link" >&6; } +if test "x$ac_cv_lib_dld_dld_link" = xyes; then : + lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" +fi + + +fi + + +fi + + +fi + + +fi + + +fi + + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 +$as_echo_n "checking whether a program can dlopen itself... " >&6; } +if ${lt_cv_dlopen_self+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line 12899 "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include <dlfcn.h> +#endif + +#include <stdio.h> + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisbility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +void fnord () __attribute__((visibility("default"))); +#endif + +void fnord () { int i=42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 +$as_echo "$lt_cv_dlopen_self" >&6; } + + if test "x$lt_cv_dlopen_self" = xyes; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 +$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } +if ${lt_cv_dlopen_self_static+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self_static=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line 13005 "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include <dlfcn.h> +#endif + +#include <stdio.h> + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisbility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +void fnord () __attribute__((visibility("default"))); +#endif + +void fnord () { int i=42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self_static=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 +$as_echo "$lt_cv_dlopen_self_static" >&6; } + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi + + + + + + + + + + + + + + + + + +striplib= +old_striplib= +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 +$as_echo_n "checking whether stripping libraries is possible... " >&6; } +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + old_striplib="$STRIP -S" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + fi + ;; + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + ;; + esac +fi + + + + + + + + + + + + + # Report which library types will actually be built + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 +$as_echo_n "checking if libtool supports shared libraries... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 +$as_echo "$can_build_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 +$as_echo_n "checking whether to build shared libraries... " >&6; } + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + + aix[4-9]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 +$as_echo "$enable_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 +$as_echo_n "checking whether to build static libraries... " >&6; } + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 +$as_echo "$enable_static" >&6; } + + + + +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +CC="$lt_save_CC" + + + + + + + + + + + + + + ac_config_commands="$ac_config_commands libtool" + + + + +# Only expand once: + + + + +. ${srcdir}/../../bfd/configure.host + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 +$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } + # Check whether --enable-maintainer-mode was given. +if test "${enable_maintainer_mode+set}" = set; then : + enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval +else + USE_MAINTAINER_MODE=no +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 +$as_echo "$USE_MAINTAINER_MODE" >&6; } + if test $USE_MAINTAINER_MODE = yes; then + MAINTAINER_MODE_TRUE= + MAINTAINER_MODE_FALSE='#' +else + MAINTAINER_MODE_TRUE='#' + MAINTAINER_MODE_FALSE= +fi + + MAINT=$MAINTAINER_MODE_TRUE + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sim debug setting" >&5 +$as_echo_n "checking for sim debug setting... " >&6; } +sim_debug="0" +# Check whether --enable-sim-debug was given. +if test "${enable_sim_debug+set}" = set; then : + enableval=$enable_sim_debug; case "${enableval}" in + yes) sim_debug="7";; + no) sim_debug="0";; + *) sim_debug="($enableval)";; +esac +fi +if test "$sim_debug" != "0"; then + +cat >>confdefs.h <<_ACEOF +#define DEBUG $sim_debug +_ACEOF + +fi + +cat >>confdefs.h <<_ACEOF +#define WITH_DEBUG $sim_debug +_ACEOF + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $sim_debug" >&5 +$as_echo "$sim_debug" >&6; } + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sim stdio debug behavior" >&5 +$as_echo_n "checking for sim stdio debug behavior... " >&6; } +sim_stdio="0" +# Check whether --enable-sim-stdio was given. +if test "${enable_sim_stdio+set}" = set; then : + enableval=$enable_sim_stdio; case "${enableval}" in + yes) sim_stdio="DO_USE_STDIO";; + no) sim_stdio="DONT_USE_STDIO";; + *) as_fn_error $? "Unknown value $enableval passed to --enable-sim-stdio" "$LINENO" 5;; +esac +fi + +cat >>confdefs.h <<_ACEOF +#define WITH_STDIO $sim_stdio +_ACEOF + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $sim_stdio" >&5 +$as_echo "$sim_stdio" >&6; } + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sim trace settings" >&5 +$as_echo_n "checking for sim trace settings... " >&6; } +sim_trace="~TRACE_debug" +# Check whether --enable-sim-trace was given. +if test "${enable_sim_trace+set}" = set; then : + enableval=$enable_sim_trace; case "${enableval}" in + yes) sim_trace="-1";; + no) sim_trace="0";; + [-0-9]*) + sim_trace="'(${enableval})'";; + [[:lower:]]*) + sim_trace="" + for x in `echo "$enableval" | sed -e "s/,/ /g"`; do + if test x"$sim_trace" = x; then + sim_trace="(TRACE_$x" + else + sim_trace="${sim_trace}|TRACE_$x" + fi + done + sim_trace="$sim_trace)" ;; +esac +fi + +cat >>confdefs.h <<_ACEOF +#define WITH_TRACE $sim_trace +_ACEOF + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $sim_trace" >&5 +$as_echo "$sim_trace" >&6; } + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sim profile settings" >&5 +$as_echo_n "checking for sim profile settings... " >&6; } +profile="1" +sim_profile="-1" +# Check whether --enable-sim-profile was given. +if test "${enable_sim_profile+set}" = set; then : + enableval=$enable_sim_profile; case "${enableval}" in + yes) profile="1" sim_profile="-1";; + no) profile="0" sim_profile="0";; + [-0-9]*) + profile="(${enableval})" sim_profile="(${enableval})";; + [a-z]*) + profile="1" + sim_profile="" + for x in `echo "$enableval" | sed -e "s/,/ /g"`; do + if test x"$sim_profile" = x; then + sim_profile="(PROFILE_$x" + else + sim_profile="${sim_profile}|PROFILE_$x" + fi + done + sim_profile="$sim_profile)" ;; +esac +fi + +cat >>confdefs.h <<_ACEOF +#define PROFILE $profile +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define WITH_PROFILE $sim_profile +_ACEOF + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $sim_profile" >&5 +$as_echo "$sim_profile" >&6; } + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable sim asserts" >&5 +$as_echo_n "checking whether to enable sim asserts... " >&6; } +sim_assert="1" +# Check whether --enable-sim-assert was given. +if test "${enable_sim_assert+set}" = set; then : + enableval=$enable_sim_assert; case "${enableval}" in + yes) sim_assert="1";; + no) sim_assert="0";; + *) as_fn_error $? "--enable-sim-assert does not take a value" "$LINENO" 5;; +esac +fi + +cat >>confdefs.h <<_ACEOF +#define WITH_ASSERT $sim_assert +_ACEOF + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $sim_assert" >&5 +$as_echo "$sim_assert" >&6; } + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking default sim environment setting" >&5 +$as_echo_n "checking default sim environment setting... " >&6; } +sim_environment="ALL_ENVIRONMENT" +# Check whether --enable-sim-environment was given. +if test "${enable_sim_environment+set}" = set; then : + enableval=$enable_sim_environment; case "${enableval}" in + all | ALL) sim_environment="ALL_ENVIRONMENT";; + user | USER) sim_environment="USER_ENVIRONMENT";; + virtual | VIRTUAL) sim_environment="VIRTUAL_ENVIRONMENT";; + operating | OPERATING) sim_environment="OPERATING_ENVIRONMENT";; + *) as_fn_error $? "Unknown value $enableval passed to --enable-sim-environment" "$LINENO" 5;; +esac +fi + +cat >>confdefs.h <<_ACEOF +#define WITH_ENVIRONMENT $sim_environment +_ACEOF + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $sim_environment" >&5 +$as_echo "$sim_environment" >&6; } + + +sim_inline="-DDEFAULT_INLINE=0" +# Check whether --enable-sim-inline was given. +if test "${enable_sim_inline+set}" = set; then : + enableval=$enable_sim_inline; sim_inline="" +case "$enableval" in + no) sim_inline="-DDEFAULT_INLINE=0";; + 0) sim_inline="-DDEFAULT_INLINE=0";; + yes | 2) sim_inline="-DDEFAULT_INLINE=ALL_C_INLINE";; + 1) sim_inline="-DDEFAULT_INLINE=INLINE_LOCALS";; + *) for x in `echo "$enableval" | sed -e "s/,/ /g"`; do + new_flag="" + case "$x" in + *_INLINE=*) new_flag="-D$x";; + *=*) new_flag=`echo "$x" | sed -e "s/=/_INLINE=/" -e "s/^/-D/"`;; + *_INLINE) new_flag="-D$x=ALL_C_INLINE";; + *) new_flag="-D$x""_INLINE=ALL_C_INLINE";; + esac + if test x"$sim_inline" = x""; then + sim_inline="$new_flag" + else + sim_inline="$sim_inline $new_flag" + fi + done;; +esac +if test x"$silent" != x"yes" && test x"$sim_inline" != x""; then + echo "Setting inline flags = $sim_inline" 6>&1 +fi +fi + + + + +# Check whether --with-pkgversion was given. +if test "${with_pkgversion+set}" = set; then : + withval=$with_pkgversion; case "$withval" in + yes) as_fn_error $? "package version not specified" "$LINENO" 5 ;; + no) PKGVERSION= ;; + *) PKGVERSION="($withval) " ;; + esac +else + PKGVERSION="(SIM) " + +fi + + + + + +# Check whether --with-bugurl was given. +if test "${with_bugurl+set}" = set; then : + withval=$with_bugurl; case "$withval" in + yes) as_fn_error $? "bug URL not specified" "$LINENO" 5 ;; + no) BUGURL= + ;; + *) BUGURL="$withval" + ;; + esac +else + BUGURL="http://www.gnu.org/software/gdb/bugs/" + +fi + + case ${BUGURL} in + "") + REPORT_BUGS_TO= + REPORT_BUGS_TEXI= + ;; + *) + REPORT_BUGS_TO="<$BUGURL>" + REPORT_BUGS_TEXI=@uref{`echo "$BUGURL" | sed 's/@/@@/g'`} + ;; + esac; + + + + +cat >>confdefs.h <<_ACEOF +#define PKGVERSION "$PKGVERSION" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define REPORT_BUGS_TO "$REPORT_BUGS_TO" +_ACEOF + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking return type of signal handlers" >&5 +$as_echo_n "checking return type of signal handlers... " >&6; } +if ${ac_cv_type_signal+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> +#include <signal.h> + +int +main () +{ +return *(signal (0, 0)) (0) == 1; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_type_signal=int +else + ac_cv_type_signal=void +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_signal" >&5 +$as_echo "$ac_cv_type_signal" >&6; } + +cat >>confdefs.h <<_ACEOF +#define RETSIGTYPE $ac_cv_type_signal +_ACEOF + + + + + + + +wire_word_bitsize="64" +wire_word_msb="" +wire_address_bitsize="" +wire_cell_bitsize="" +# Check whether --enable-sim-bitsize was given. +if test "${enable_sim_bitsize+set}" = set; then : + enableval=$enable_sim_bitsize; sim_bitsize= +case "${enableval}" in + 64,63 | 64,63,* ) sim_bitsize="-DWITH_TARGET_WORD_BITSIZE=64 -DWITH_TARGET_WORD_MSB=63";; + 32,31 | 32,31,* ) sim_bitsize="-DWITH_TARGET_WORD_BITSIZE=32 -DWITH_TARGET_WORD_MSB=31";; + 64,0 | 64,0,* ) sim_bitsize="-DWITH_TARGET_WORD_BITSIZE=32 -DWITH_TARGET_WORD_MSB=0";; + 32,0 | 64,0,* ) sim_bitsize="-DWITH_TARGET_WORD_BITSIZE=32 -DWITH_TARGET_WORD_MSB=0";; + 32) if test x"$wire_word_msb" != x -a x"$wire_word_msb" != x0; then + sim_bitsize="-DWITH_TARGET_WORD_BITSIZE=32 -DWITH_TARGET_WORD_MSB=31" + else + sim_bitsize="-DWITH_TARGET_WORD_BITSIZE=32 -DWITH_TARGET_WORD_MSB=0" + fi ;; + 64) if test x"$wire_word_msb" != x -a x"$wire_word_msb" != x0; then + sim_bitsize="-DWITH_TARGET_WORD_BITSIZE=64 -DWITH_TARGET_WORD_MSB=63" + else + sim_bitsize="-DWITH_TARGET_WORD_BITSIZE=64 -DWITH_TARGET_WORD_MSB=0" + fi ;; + *) as_fn_error $? "\"--enable-sim-bitsize was given $enableval. Expected 32 or 64\"" "$LINENO" 5 ;; +esac +# address bitsize +tmp=`echo "${enableval}" | sed -e "s/^[0-9]*,*[0-9]*,*//"` +case x"${tmp}" in + x ) ;; + x32 | x32,* ) sim_bitsize="${sim_bitsize} -DWITH_TARGET_ADDRESS_BITSIZE=32" ;; + x64 | x64,* ) sim_bitsize="${sim_bitsize} -DWITH_TARGET_ADDRESS_BITSIZE=64" ;; + * ) as_fn_error $? "\"--enable-sim-bitsize was given address size $enableval. Expected 32 or 64\"" "$LINENO" 5 ;; +esac +# cell bitsize +tmp=`echo "${enableval}" | sed -e "s/^[0-9]*,*[0-9*]*,*[0-9]*,*//"` +case x"${tmp}" in + x ) ;; + x32 | x32,* ) sim_bitsize="${sim_bitsize} -DWITH_TARGET_CELL_BITSIZE=32" ;; + x64 | x64,* ) sim_bitsize="${sim_bitsize} -DWITH_TARGET_CELL_BITSIZE=64" ;; + * ) as_fn_error $? "\"--enable-sim-bitsize was given cell size $enableval. Expected 32 or 64\"" "$LINENO" 5 ;; +esac +if test x"$silent" != x"yes" && test x"$sim_bitsize" != x""; then + echo "Setting bitsize flags = $sim_bitsize" 6>&1 +fi +else + sim_bitsize="" +if test x"$wire_word_bitsize" != x; then + sim_bitsize="$sim_bitsize -DWITH_TARGET_WORD_BITSIZE=$wire_word_bitsize" +fi +if test x"$wire_word_msb" != x; then + sim_bitsize="$sim_bitsize -DWITH_TARGET_WORD_MSB=$wire_word_msb" +fi +if test x"$wire_address_bitsize" != x; then + sim_bitsize="$sim_bitsize -DWITH_TARGET_ADDRESS_BITSIZE=$wire_address_bitsize" +fi +if test x"$wire_cell_bitsize" != x; then + sim_bitsize="$sim_bitsize -DWITH_TARGET_CELL_BITSIZE=$wire_cell_bitsize" +fi +fi + + +wire_endian="" +default_endian="LITTLE" +# Check whether --enable-sim-endian was given. +if test "${enable_sim_endian+set}" = set; then : + enableval=$enable_sim_endian; case "${enableval}" in + b*|B*) sim_endian="-DWITH_TARGET_BYTE_ORDER=BFD_ENDIAN_BIG";; + l*|L*) sim_endian="-DWITH_TARGET_BYTE_ORDER=BFD_ENDIAN_LITTLE";; + yes) if test x"$wire_endian" != x; then + sim_endian="-DWITH_TARGET_BYTE_ORDER=BFD_ENDIAN_${wire_endian}" + else + if test x"$default_endian" != x; then + sim_endian="-DWITH_TARGET_BYTE_ORDER=BFD_ENDIAN_${default_endian}" + else + echo "No hard-wired endian for target $target" 1>&6 + sim_endian="-DWITH_TARGET_BYTE_ORDER=BFD_ENDIAN_UNKNOWN" + fi + fi;; + no) if test x"$default_endian" != x; then + sim_endian="-DWITH_DEFAULT_TARGET_BYTE_ORDER=BFD_ENDIAN_${default_endian}" + else + if test x"$wire_endian" != x; then + sim_endian="-DWITH_DEFAULT_TARGET_BYTE_ORDER=BFD_ENDIAN_${wire_endian}" + else + echo "No default endian for target $target" 1>&6 + sim_endian="-DWITH_DEFAULT_TARGET_BYTE_ORDER=BFD_ENDIAN_UNKNOWN" + fi + fi;; + *) as_fn_error $? "\"Unknown value $enableval for --enable-sim-endian\"" "$LINENO" 5; sim_endian="";; +esac +if test x"$silent" != x"yes" && test x"$sim_endian" != x""; then + echo "Setting endian flags = $sim_endian" 6>&1 +fi +else + if test x"$default_endian" != x; then + sim_endian="-DWITH_DEFAULT_TARGET_BYTE_ORDER=BFD_ENDIAN_${default_endian}" +else + if test x"$wire_endian" != x; then + sim_endian="-DWITH_TARGET_BYTE_ORDER=BFD_ENDIAN_${wire_endian}" + else + sim_endian= + fi +fi +fi + +wire_alignment="NONSTRICT_ALIGNMENT" +default_alignment="" + +# Check whether --enable-sim-alignment was given. +if test "${enable_sim_alignment+set}" = set; then : + enableval=$enable_sim_alignment; case "${enableval}" in + strict | STRICT) sim_alignment="-DWITH_ALIGNMENT=STRICT_ALIGNMENT";; + nonstrict | NONSTRICT) sim_alignment="-DWITH_ALIGNMENT=NONSTRICT_ALIGNMENT";; + forced | FORCED) sim_alignment="-DWITH_ALIGNMENT=FORCED_ALIGNMENT";; + yes) if test x"$wire_alignment" != x; then + sim_alignment="-DWITH_ALIGNMENT=${wire_alignment}" + else + if test x"$default_alignment" != x; then + sim_alignment="-DWITH_ALIGNMENT=${default_alignment}" + else + echo "No hard-wired alignment for target $target" 1>&6 + sim_alignment="-DWITH_ALIGNMENT=0" + fi + fi;; + no) if test x"$default_alignment" != x; then + sim_alignment="-DWITH_DEFAULT_ALIGNMENT=${default_alignment}" + else + if test x"$wire_alignment" != x; then + sim_alignment="-DWITH_DEFAULT_ALIGNMENT=${wire_alignment}" + else + echo "No default alignment for target $target" 1>&6 + sim_alignment="-DWITH_DEFAULT_ALIGNMENT=0" + fi + fi;; + *) as_fn_error $? "\"Unknown value $enableval passed to --enable-sim-alignment\"" "$LINENO" 5; sim_alignment="";; +esac +if test x"$silent" != x"yes" && test x"$sim_alignment" != x""; then + echo "Setting alignment flags = $sim_alignment" 6>&1 +fi +else + if test x"$default_alignment" != x; then + sim_alignment="-DWITH_DEFAULT_ALIGNMENT=${default_alignment}" +else + if test x"$wire_alignment" != x; then + sim_alignment="-DWITH_ALIGNMENT=${wire_alignment}" + else + sim_alignment= + fi +fi +fi + + +default_sim_scache="16384" +# Check whether --enable-sim-scache was given. +if test "${enable_sim_scache+set}" = set; then : + enableval=$enable_sim_scache; case "${enableval}" in + yes) sim_scache="-DWITH_SCACHE=${default_sim_scache}";; + no) sim_scache="-DWITH_SCACHE=0" ;; + [0-9]*) sim_scache="-DWITH_SCACHE=${enableval}";; + *) as_fn_error $? "\"Bad value $enableval passed to --enable-sim-scache\"" "$LINENO" 5; + sim_scache="";; +esac +if test x"$silent" != x"yes" && test x"$sim_scache" != x""; then + echo "Setting scache size = $sim_scache" 6>&1 +fi +else + sim_scache="-DWITH_SCACHE=${default_sim_scache}" +fi + + + +default_sim_default_model="bpf-def" +# Check whether --enable-sim-default-model was given. +if test "${enable_sim_default_model+set}" = set; then : + enableval=$enable_sim_default_model; case "${enableval}" in + yes|no) as_fn_error $? "\"Missing argument to --enable-sim-default-model\"" "$LINENO" 5;; + *) sim_default_model="-DWITH_DEFAULT_MODEL='\"${enableval}\"'";; +esac +if test x"$silent" != x"yes" && test x"$sim_default_model" != x""; then + echo "Setting default model = $sim_default_model" 6>&1 +fi +else + sim_default_model="-DWITH_DEFAULT_MODEL='\"${default_sim_default_model}\"'" +fi + + + +cgen_maint=no +cgen=guile +cgendir='$(srcdir)/../../cgen' +# Check whether --enable-cgen-maint was given. +if test "${enable_cgen_maint+set}" = set; then : + enableval=$enable_cgen_maint; case "${enableval}" in + yes) cgen_maint=yes ;; + no) cgen_maint=no ;; + *) + # Argument is a directory where cgen can be found. In some + # future world cgen could be installable, but right now this + # is not the case. Instead we assume the directory is a path + # to the cgen source tree. + cgen_maint=yes + if test -r ${enableval}/iformat.scm; then + # This looks like a cgen source tree. + cgendir=${enableval} + else + as_fn_error $? "${enableval} doesn't look like a cgen source tree" "$LINENO" 5 + fi + ;; +esac +fi +if test x${cgen_maint} != xno ; then + CGEN_MAINT='' +else + CGEN_MAINT='#' +fi + + + + + + +cgen_breaks="" +if grep CGEN_MAINT $srcdir/Makefile.in >/dev/null; then +cgen_breaks="break cgen_rtx_error"; +fi + +ac_config_files="$ac_config_files Makefile.sim:Makefile.in" + +ac_config_files="$ac_config_files Make-common.sim:../common/Make-common.in" + +ac_config_files="$ac_config_files .gdbinit:../common/gdbinit.in" + +ac_config_commands="$ac_config_commands Makefile" + +ac_config_commands="$ac_config_commands stamp-h" + +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, we kill variables containing newlines. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes: double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \. + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + if test "x$cache_file" != "x/dev/null"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} + if test ! -f "$cache_file" || test -h "$cache_file"; then + cat confcache >"$cache_file" + else + case $cache_file in #( + */* | ?:*) + mv -f confcache "$cache_file"$$ && + mv -f "$cache_file"$$ "$cache_file" ;; #( + *) + mv -f confcache "$cache_file" ;; + esac + fi + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +DEFS=-DHAVE_CONFIG_H + +ac_libobjs= +ac_ltlibobjs= +U= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + + +if test -z "${GMAKE_TRUE}" && test -z "${GMAKE_FALSE}"; then + as_fn_error $? "conditional \"GMAKE\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${PLUGINS_TRUE}" && test -z "${PLUGINS_FALSE}"; then + as_fn_error $? "conditional \"PLUGINS\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then + as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi + +: "${CONFIG_STATUS=./config.status}" +ac_write_fail=0 +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false + +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' + fi +else + as_ln_s='cp -pR' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +as_test_x='test -x' +as_executable_p=as_fn_executable_p + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by $as_me, which was +generated by GNU Autoconf 2.69. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + +case $ac_config_headers in *" +"*) set x $ac_config_headers; shift; ac_config_headers=$*;; +esac + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# Files that config.status was made for. +config_files="$ac_config_files" +config_headers="$ac_config_headers" +config_commands="$ac_config_commands" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +ac_cs_usage="\ +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. + +Usage: $0 [OPTION]... [TAG]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + --config print configuration, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Configuration commands: +$config_commands + +Report bugs to the package provider." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" +ac_cs_version="\\ +config.status +configured by $0, generated by GNU Autoconf 2.69, + with options \\"\$ac_cs_config\\" + +Copyright (C) 2012 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +INSTALL='$INSTALL' +AWK='$AWK' +test -n "\$AWK" || AWK=awk +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=?*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + --*=) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg= + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + '') as_fn_error $? "missing file argument" ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_HEADERS " '$ac_optarg'" + ac_need_defaults=false;; + --he | --h) + # Conflict between --help and --header + as_fn_error $? "ambiguous option: \`$1' +Try \`$0 --help' for more information.";; + --help | --hel | -h ) + $as_echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) as_fn_error $? "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; + + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +if \$ac_cs_recheck; then + set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + $as_echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# +# INIT-COMMANDS +# +ac_aux_dir=$ac_aux_dir DEPDIR=$DEPDIR + + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' +macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' +enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' +enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' +pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' +enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' +SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' +ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' +host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' +host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' +host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' +build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' +build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' +build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' +SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' +Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' +GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' +EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' +FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' +LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' +NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' +LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' +max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' +ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' +exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' +lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' +lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' +lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' +reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' +reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' +OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' +deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' +file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' +AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' +AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' +STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' +RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' +old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' +old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' +old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' +lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' +CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' +CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' +compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' +GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' +objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' +MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' +lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' +need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' +DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' +NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' +LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' +OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' +OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' +libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' +shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' +extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' +archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' +enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' +export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' +whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' +compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' +old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' +old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' +archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' +archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' +module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' +module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' +with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' +allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' +no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec_ld='`$ECHO "$hardcode_libdir_flag_spec_ld" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' +hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' +hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' +hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' +hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' +hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' +inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' +link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' +fix_srcfile_path='`$ECHO "$fix_srcfile_path" | $SED "$delay_single_quote_subst"`' +always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' +export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' +exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' +include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' +prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' +file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' +variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' +need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' +need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' +version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' +runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' +shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' +shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' +libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' +library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' +soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' +install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' +postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' +postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' +finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' +finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' +hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' +sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' +sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`' +hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' +enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' +enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' +enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' +old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' +striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' + +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$1 +_LTECHO_EOF' +} + +# Quote evaled strings. +for var in SHELL \ +ECHO \ +SED \ +GREP \ +EGREP \ +FGREP \ +LD \ +NM \ +LN_S \ +lt_SP2NL \ +lt_NL2SP \ +reload_flag \ +OBJDUMP \ +deplibs_check_method \ +file_magic_cmd \ +AR \ +AR_FLAGS \ +STRIP \ +RANLIB \ +CC \ +CFLAGS \ +compiler \ +lt_cv_sys_global_symbol_pipe \ +lt_cv_sys_global_symbol_to_cdecl \ +lt_cv_sys_global_symbol_to_c_name_address \ +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ +lt_prog_compiler_no_builtin_flag \ +lt_prog_compiler_wl \ +lt_prog_compiler_pic \ +lt_prog_compiler_static \ +lt_cv_prog_compiler_c_o \ +need_locks \ +DSYMUTIL \ +NMEDIT \ +LIPO \ +OTOOL \ +OTOOL64 \ +shrext_cmds \ +export_dynamic_flag_spec \ +whole_archive_flag_spec \ +compiler_needs_object \ +with_gnu_ld \ +allow_undefined_flag \ +no_undefined_flag \ +hardcode_libdir_flag_spec \ +hardcode_libdir_flag_spec_ld \ +hardcode_libdir_separator \ +fix_srcfile_path \ +exclude_expsyms \ +include_expsyms \ +file_list_spec \ +variables_saved_for_relink \ +libname_spec \ +library_names_spec \ +soname_spec \ +install_override_mode \ +finish_eval \ +old_striplib \ +striplib; do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in reload_cmds \ +old_postinstall_cmds \ +old_postuninstall_cmds \ +old_archive_cmds \ +extract_expsyms_cmds \ +old_archive_from_new_cmds \ +old_archive_from_expsyms_cmds \ +archive_cmds \ +archive_expsym_cmds \ +module_cmds \ +module_expsym_cmds \ +export_symbols_cmds \ +prelink_cmds \ +postinstall_cmds \ +postuninstall_cmds \ +finish_cmds \ +sys_lib_search_path_spec \ +sys_lib_dlsearch_path_spec; do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +ac_aux_dir='$ac_aux_dir' +xsi_shell='$xsi_shell' +lt_shell_append='$lt_shell_append' + +# See if we are running on zsh, and set the options which allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + + + PACKAGE='$PACKAGE' + VERSION='$VERSION' + TIMESTAMP='$TIMESTAMP' + RM='$RM' + ofile='$ofile' + + + + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h:config.in" ;; + "depdir") CONFIG_COMMANDS="$CONFIG_COMMANDS depdir" ;; + "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; + "Makefile.sim") CONFIG_FILES="$CONFIG_FILES Makefile.sim:Makefile.in" ;; + "Make-common.sim") CONFIG_FILES="$CONFIG_FILES Make-common.sim:../common/Make-common.in" ;; + ".gdbinit") CONFIG_FILES="$CONFIG_FILES .gdbinit:../common/gdbinit.in" ;; + "Makefile") CONFIG_COMMANDS="$CONFIG_COMMANDS Makefile" ;; + "stamp-h") CONFIG_COMMANDS="$CONFIG_COMMANDS stamp-h" ;; + + *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= ac_tmp= + trap 'exit_status=$? + : "${ac_tmp:=$tmp}" + { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 +ac_tmp=$tmp + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$ac_tmp/subs1.awk" && +_ACEOF + + +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\)..*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\)..*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' <conf$$subs.awk | sed ' +/^[^""]/{ + N + s/\n// +} +' >>$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ + || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 +_ACEOF + +# VPATH may cause trouble with some makes, so we remove sole $(srcdir), +# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ +h +s/// +s/^/:/ +s/[ ]*$/:/ +s/:\$(srcdir):/:/g +s/:\${srcdir}:/:/g +s/:@srcdir@:/:/g +s/^:*// +s/:*$// +x +s/\(=[ ]*\).*/\1/ +G +s/\n// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +fi # test -n "$CONFIG_FILES" + +# Set up the scripts for CONFIG_HEADERS section. +# No need to generate them if there are no CONFIG_HEADERS. +# This happens for instance with `./config.status Makefile'. +if test -n "$CONFIG_HEADERS"; then +cat >"$ac_tmp/defines.awk" <<\_ACAWK || +BEGIN { +_ACEOF + +# Transform confdefs.h into an awk script `defines.awk', embedded as +# here-document in config.status, that substitutes the proper values into +# config.h.in to produce config.h. + +# Create a delimiter string that does not exist in confdefs.h, to ease +# handling of long lines. +ac_delim='%!_!# ' +for ac_last_try in false false :; do + ac_tt=`sed -n "/$ac_delim/p" confdefs.h` + if test -z "$ac_tt"; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +# For the awk script, D is an array of macro values keyed by name, +# likewise P contains macro parameters if any. Preserve backslash +# newline sequences. + +ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* +sed -n ' +s/.\{148\}/&'"$ac_delim"'/g +t rset +:rset +s/^[ ]*#[ ]*define[ ][ ]*/ / +t def +d +:def +s/\\$// +t bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3"/p +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p +d +:bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3\\\\\\n"\\/p +t cont +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p +t cont +d +:cont +n +s/.\{148\}/&'"$ac_delim"'/g +t clear +:clear +s/\\$// +t bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/"/p +d +:bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p +b cont +' <confdefs.h | sed ' +s/'"$ac_delim"'/"\\\ +"/g' >>$CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + for (key in D) D_is_set[key] = 1 + FS = "" +} +/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { + line = \$ 0 + split(line, arg, " ") + if (arg[1] == "#") { + defundef = arg[2] + mac1 = arg[3] + } else { + defundef = substr(arg[1], 2) + mac1 = arg[2] + } + split(mac1, mac2, "(") #) + macro = mac2[1] + prefix = substr(line, 1, index(line, defundef) - 1) + if (D_is_set[macro]) { + # Preserve the white space surrounding the "#". + print prefix "define", macro P[macro] D[macro] + next + } else { + # Replace #undef with comments. This is necessary, for example, + # in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. + if (defundef == "undef") { + print "/*", prefix defundef, macro, "*/" + next + } + } +} +{ print } +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 +fi # test -n "$CONFIG_HEADERS" + + +eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$ac_tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$ac_tmp/stdin" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir="$ac_dir"; as_fn_mkdir_p + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + case $ac_mode in + :F) + # + # CONFIG_FILE + # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ + >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ + "$ac_tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&5 +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&2;} + + rm -f "$ac_tmp/stdin" + case $ac_file in + -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; + *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; + esac \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + ;; + :H) + # + # CONFIG_HEADER + # + if test x"$ac_file" != x-; then + { + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" + } >"$ac_tmp/config.h" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +$as_echo "$as_me: $ac_file is unchanged" >&6;} + else + rm -f "$ac_file" + mv "$ac_tmp/config.h" "$ac_file" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + fi + else + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ + || as_fn_error $? "could not create -" "$LINENO" 5 + fi + ;; + + :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} + ;; + esac + + + case $ac_file$ac_mode in + "depdir":C) $SHELL $ac_aux_dir/mkinstalldirs $DEPDIR ;; + "libtool":C) + + # See if we are running on zsh, and set the options which allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + + cfgfile="${ofile}T" + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL + +# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008, 2009 Free Software Foundation, Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is part of GNU Libtool. +# +# GNU Libtool is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of +# the License, or (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, or +# obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + +# The names of the tagged configurations supported by this script. +available_tags="" + +# ### BEGIN LIBTOOL CONFIG + +# Which release of libtool.m4 was used? +macro_version=$macro_version +macro_revision=$macro_revision + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# What type of objects to build. +pic_mode=$pic_mode + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# An echo program that protects backslashes. +ECHO=$lt_ECHO + +# The host system. +host_alias=$host_alias +host=$host +host_os=$host_os + +# The build system. +build_alias=$build_alias +build=$build +build_os=$build_os + +# A sed program that does not truncate output. +SED=$lt_SED + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="\$SED -e 1s/^X//" + +# A grep program that handles long lines. +GREP=$lt_GREP + +# An ERE matcher. +EGREP=$lt_EGREP + +# A literal string matcher. +FGREP=$lt_FGREP + +# A BSD- or MS-compatible name lister. +NM=$lt_NM + +# Whether we need soft or hard links. +LN_S=$lt_LN_S + +# What is the maximum length of a command? +max_cmd_len=$max_cmd_len + +# Object file suffix (normally "o"). +objext=$ac_objext + +# Executable file suffix (normally ""). +exeext=$exeext + +# whether the shell understands "unset". +lt_unset=$lt_unset + +# turn spaces into newlines. +SP2NL=$lt_lt_SP2NL + +# turn newlines into spaces. +NL2SP=$lt_lt_NL2SP + +# An object symbol dumper. +OBJDUMP=$lt_OBJDUMP + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method == "file_magic". +file_magic_cmd=$lt_file_magic_cmd + +# The archiver. +AR=$lt_AR +AR_FLAGS=$lt_AR_FLAGS + +# A symbol stripping program. +STRIP=$lt_STRIP + +# Commands used to install an old-style archive. +RANLIB=$lt_RANLIB +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Whether to use a lock for old archive extraction. +lock_old_archive_extraction=$lock_old_archive_extraction + +# A C compiler. +LTCC=$lt_CC + +# LTCC compiler flags. +LTCFLAGS=$lt_CFLAGS + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration. +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair. +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# Transform the output of nm in a C name address pair when lib prefix is needed. +global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# Used to examine libraries when file_magic_cmd begins with "file". +MAGIC_CMD=$MAGIC_CMD + +# Must we lock files when doing compilation? +need_locks=$lt_need_locks + +# Tool to manipulate archived DWARF debug symbol files on Mac OS X. +DSYMUTIL=$lt_DSYMUTIL + +# Tool to change global to local symbols on Mac OS X. +NMEDIT=$lt_NMEDIT + +# Tool to manipulate fat objects and archives on Mac OS X. +LIPO=$lt_LIPO + +# ldd/readelf like tool for Mach-O binaries on Mac OS X. +OTOOL=$lt_OTOOL + +# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. +OTOOL64=$lt_OTOOL64 + +# Old archive suffix (normally "a"). +libext=$libext + +# Shared library suffix (normally ".so"). +shrext_cmds=$lt_shrext_cmds + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at link time. +variables_saved_for_relink=$lt_variables_saved_for_relink + +# Do we need the "lib" prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Library versioning type. +version_type=$version_type + +# Shared library runtime path variable. +runpath_var=$runpath_var + +# Shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Permission mode override for installation of shared libraries. +install_override_mode=$lt_install_override_mode + +# Command to use after installation of a shared archive. +postinstall_cmds=$lt_postinstall_cmds + +# Command to use after uninstallation of a shared archive. +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# As "finish_cmds", except a single script fragment to be evaled but +# not shown. +finish_eval=$lt_finish_eval + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Compile-time system search path for libraries. +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries. +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + + +# The linker used to build libraries. +LD=$lt_LD + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds + +# A language specific compiler. +CC=$lt_compiler + +# Is the compiler the GNU compiler? +with_gcc=$GCC + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds + +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds +archive_expsym_cmds=$lt_archive_expsym_cmds + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds +module_expsym_cmds=$lt_module_expsym_cmds + +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag + +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec + +# If ld is used when linking, flag to hardcode \$libdir into a binary +# during linking. This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \${shlibpath_var} if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path=$lt_fix_srcfile_path + +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds + +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action + +# ### END LIBTOOL CONFIG + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + +ltmain="$ac_aux_dir/ltmain.sh" + + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + case $xsi_shell in + yes) + cat << \_LT_EOF >> "$cfgfile" + +# func_dirname file append nondir_replacement +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +func_dirname () +{ + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac +} + +# func_basename file +func_basename () +{ + func_basename_result="${1##*/}" +} + +# func_dirname_and_basename file append nondir_replacement +# perform func_basename and func_dirname in a single function +# call: +# dirname: Compute the dirname of FILE. If nonempty, +# add APPEND to the result, otherwise set result +# to NONDIR_REPLACEMENT. +# value returned in "$func_dirname_result" +# basename: Compute filename of FILE. +# value retuned in "$func_basename_result" +# Implementation must be kept synchronized with func_dirname +# and func_basename. For efficiency, we do not delegate to +# those functions but instead duplicate the functionality here. +func_dirname_and_basename () +{ + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac + func_basename_result="${1##*/}" +} + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +func_stripname () +{ + # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are + # positional parameters, so assign one to ordinary parameter first. + func_stripname_result=${3} + func_stripname_result=${func_stripname_result#"${1}"} + func_stripname_result=${func_stripname_result%"${2}"} +} + +# func_opt_split +func_opt_split () +{ + func_opt_split_opt=${1%%=*} + func_opt_split_arg=${1#*=} +} + +# func_lo2o object +func_lo2o () +{ + case ${1} in + *.lo) func_lo2o_result=${1%.lo}.${objext} ;; + *) func_lo2o_result=${1} ;; + esac +} + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=${1%.*}.lo +} + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=$(( $* )) +} + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=${#1} +} + +_LT_EOF + ;; + *) # Bourne compatible functions. + cat << \_LT_EOF >> "$cfgfile" + +# func_dirname file append nondir_replacement +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +func_dirname () +{ + # Extract subdirectory from the argument. + func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` + if test "X$func_dirname_result" = "X${1}"; then + func_dirname_result="${3}" + else + func_dirname_result="$func_dirname_result${2}" + fi +} + +# func_basename file +func_basename () +{ + func_basename_result=`$ECHO "${1}" | $SED "$basename"` +} + + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +# func_strip_suffix prefix name +func_stripname () +{ + case ${2} in + .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; + *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; + esac +} + +# sed scripts: +my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q' +my_sed_long_arg='1s/^-[^=]*=//' + +# func_opt_split +func_opt_split () +{ + func_opt_split_opt=`$ECHO "${1}" | $SED "$my_sed_long_opt"` + func_opt_split_arg=`$ECHO "${1}" | $SED "$my_sed_long_arg"` +} + +# func_lo2o object +func_lo2o () +{ + func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` +} + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` +} + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=`expr "$@"` +} + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` +} + +_LT_EOF +esac + +case $lt_shell_append in + yes) + cat << \_LT_EOF >> "$cfgfile" + +# func_append var value +# Append VALUE to the end of shell variable VAR. +func_append () +{ + eval "$1+=\$2" +} +_LT_EOF + ;; + *) + cat << \_LT_EOF >> "$cfgfile" + +# func_append var value +# Append VALUE to the end of shell variable VAR. +func_append () +{ + eval "$1=\$$1\$2" +} + +_LT_EOF + ;; + esac + + + sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" + + ;; + "Makefile":C) echo "Merging Makefile.sim+Make-common.sim into Makefile ..." + rm -f Makesim1.tmp Makesim2.tmp Makefile + sed -n -e '/^## COMMON_PRE_/,/^## End COMMON_PRE_/ p' <Make-common.sim >Makesim1.tmp + sed -n -e '/^## COMMON_POST_/,/^## End COMMON_POST_/ p' <Make-common.sim >Makesim2.tmp + sed -e '/^## COMMON_PRE_/ r Makesim1.tmp' \ + -e '/^## COMMON_POST_/ r Makesim2.tmp' \ + <Makefile.sim >Makefile + rm -f Makefile.sim Make-common.sim Makesim1.tmp Makesim2.tmp + ;; + "stamp-h":C) echo > stamp-h ;; + + esac +done # for ac_tag + + +as_fn_exit 0 +_ACEOF +ac_clean_files=$ac_clean_files_save + +test $ac_write_fail = 0 || + as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || as_fn_exit 1 +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} +fi + + diff -Nru gdb-9.1/sim/bpf/configure.ac gdb-10.2/sim/bpf/configure.ac --- gdb-9.1/sim/bpf/configure.ac 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/sim/bpf/configure.ac 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,14 @@ +dnl Process this file with autoconf to produce a configure script. +AC_INIT(Makefile.in) +sinclude(../common/acinclude.m4) + +SIM_AC_COMMON + +SIM_AC_OPTION_BITSIZE([64]) +SIM_AC_OPTION_ENDIAN([], [LITTLE]) +SIM_AC_OPTION_ALIGNMENT(NONSTRICT_ALIGNMENT) +SIM_AC_OPTION_SCACHE(16384) +SIM_AC_OPTION_DEFAULT_MODEL([bpf-def]) +SIM_AC_OPTION_CGEN_MAINT + +SIM_AC_OUTPUT diff -Nru gdb-9.1/sim/bpf/cpuall.h gdb-10.2/sim/bpf/cpuall.h --- gdb-9.1/sim/bpf/cpuall.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/sim/bpf/cpuall.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,65 @@ +/* Simulator CPU header for bpf. + +THIS FILE IS MACHINE GENERATED WITH CGEN. + +Copyright (C) 1996-2021 Free Software Foundation, Inc. + +This file is part of the GNU simulators. + + This file is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, 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. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. + +*/ + +#ifndef BPF_CPUALL_H +#define BPF_CPUALL_H + +/* Include files for each cpu family. */ + +#ifdef WANT_CPU_BPFBF +#include "eng.h" +#include "cpu.h" +#include "decode.h" +#endif + +extern const SIM_MACH bpf_mach; + +#ifndef WANT_CPU +/* The ARGBUF struct. */ +struct argbuf { + /* These are the baseclass definitions. */ + IADDR addr; + const IDESC *idesc; + char trace_p; + char profile_p; + /* ??? Temporary hack for skip insns. */ + char skip_count; + char unused; + /* cpu specific data follows */ +}; +#endif + +#ifndef WANT_CPU +/* A cached insn. + + ??? SCACHE used to contain more than just argbuf. We could delete the + type entirely and always just use ARGBUF, but for future concerns and as + a level of abstraction it is left in. */ + +struct scache { + struct argbuf argbuf; +}; +#endif + +#endif /* BPF_CPUALL_H */ diff -Nru gdb-9.1/sim/bpf/cpu.c gdb-10.2/sim/bpf/cpu.c --- gdb-9.1/sim/bpf/cpu.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/sim/bpf/cpu.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,69 @@ +/* Misc. support for CPU family bpfbf. + +THIS FILE IS MACHINE GENERATED WITH CGEN. + +Copyright (C) 1996-2021 Free Software Foundation, Inc. + +This file is part of the GNU simulators. + + This file is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, 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. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. + +*/ + +#define WANT_CPU bpfbf +#define WANT_CPU_BPFBF + +#include "sim-main.h" +#include "cgen-ops.h" + +/* Get the value of h-gpr. */ + +DI +bpfbf_h_gpr_get (SIM_CPU *current_cpu, UINT regno) +{ + return CPU (h_gpr[regno]); +} + +/* Set a value for h-gpr. */ + +void +bpfbf_h_gpr_set (SIM_CPU *current_cpu, UINT regno, DI newval) +{ + CPU (h_gpr[regno]) = newval; +} + +/* Get the value of h-pc. */ + +UDI +bpfbf_h_pc_get (SIM_CPU *current_cpu) +{ + return GET_H_PC (); +} + +/* Set a value for h-pc. */ + +void +bpfbf_h_pc_set (SIM_CPU *current_cpu, UDI newval) +{ + SET_H_PC (newval); +} + +/* Record trace results for INSN. */ + +void +bpfbf_record_trace_results (SIM_CPU *current_cpu, CGEN_INSN *insn, + int *indices, TRACE_RECORD *tr) +{ +} diff -Nru gdb-9.1/sim/bpf/cpu.h gdb-10.2/sim/bpf/cpu.h --- gdb-9.1/sim/bpf/cpu.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/sim/bpf/cpu.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,81 @@ +/* CPU family header for bpfbf. + +THIS FILE IS MACHINE GENERATED WITH CGEN. + +Copyright (C) 1996-2021 Free Software Foundation, Inc. + +This file is part of the GNU simulators. + + This file is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, 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. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. + +*/ + +#ifndef CPU_BPFBF_H +#define CPU_BPFBF_H + +/* Maximum number of instructions that are fetched at a time. + This is for LIW type instructions sets (e.g. m32r). */ +#define MAX_LIW_INSNS 1 + +/* Maximum number of instructions that can be executed in parallel. */ +#define MAX_PARALLEL_INSNS 1 + +/* The size of an "int" needed to hold an instruction word. + This is usually 32 bits, but some architectures needs 64 bits. */ +typedef CGEN_INSN_LGUINT CGEN_INSN_WORD; + +#include "cgen-engine.h" + +/* CPU state information. */ +typedef struct { + /* Hardware elements. */ + struct { + /* General Purpose Registers */ + DI h_gpr[16]; +#define GET_H_GPR(a1) CPU (h_gpr)[a1] +#define SET_H_GPR(a1, x) (CPU (h_gpr)[a1] = (x)) + /* program counter */ + UDI h_pc; +#define GET_H_PC() CPU (h_pc) +#define SET_H_PC(x) \ +do { \ +CPU (h_pc) = (x);\ +;} while (0) + } hardware; +#define CPU_CGEN_HW(cpu) (& (cpu)->cpu_data.hardware) +} BPFBF_CPU_DATA; + +/* Cover fns for register access. */ +DI bpfbf_h_gpr_get (SIM_CPU *, UINT); +void bpfbf_h_gpr_set (SIM_CPU *, UINT, DI); +UDI bpfbf_h_pc_get (SIM_CPU *); +void bpfbf_h_pc_set (SIM_CPU *, UDI); + +/* These must be hand-written. */ +extern CPUREG_FETCH_FN bpfbf_fetch_register; +extern CPUREG_STORE_FN bpfbf_store_register; + +typedef struct { + int empty; +} MODEL_BPF_DEF_DATA; + +/* Collection of various things for the trace handler to use. */ + +typedef struct trace_record { + IADDR pc; + /* FIXME:wip */ +} TRACE_RECORD; + +#endif /* CPU_BPFBF_H */ diff -Nru gdb-9.1/sim/bpf/decode-be.c gdb-10.2/sim/bpf/decode-be.c --- gdb-9.1/sim/bpf/decode-be.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/sim/bpf/decode-be.c 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,1129 @@ +/* Simulator instruction decoder for bpfbf_ebpfbe. + +THIS FILE IS MACHINE GENERATED WITH CGEN. + +Copyright (C) 1996-2021 Free Software Foundation, Inc. + +This file is part of the GNU simulators. + + This file is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, 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. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. + +*/ + +#define WANT_CPU bpfbf +#define WANT_CPU_BPFBF + +#include "sim-main.h" +#include "sim-assert.h" + +/* The instruction descriptor array. + This is computed at runtime. Space for it is not malloc'd to save a + teensy bit of cpu in the decoder. Moving it to malloc space is trivial + but won't be done until necessary (we don't currently support the runtime + addition of instructions nor an SMP machine with different cpus). */ +static IDESC bpfbf_ebpfbe_insn_data[BPFBF_EBPFBE_INSN__MAX]; + +/* Commas between elements are contained in the macros. + Some of these are conditionally compiled out. */ + +static const struct insn_sem bpfbf_ebpfbe_insn_sem[] = +{ + { VIRTUAL_INSN_X_INVALID, BPFBF_EBPFBE_INSN_X_INVALID, BPFBF_EBPFBE_SFMT_EMPTY }, + { VIRTUAL_INSN_X_AFTER, BPFBF_EBPFBE_INSN_X_AFTER, BPFBF_EBPFBE_SFMT_EMPTY }, + { VIRTUAL_INSN_X_BEFORE, BPFBF_EBPFBE_INSN_X_BEFORE, BPFBF_EBPFBE_SFMT_EMPTY }, + { VIRTUAL_INSN_X_CTI_CHAIN, BPFBF_EBPFBE_INSN_X_CTI_CHAIN, BPFBF_EBPFBE_SFMT_EMPTY }, + { VIRTUAL_INSN_X_CHAIN, BPFBF_EBPFBE_INSN_X_CHAIN, BPFBF_EBPFBE_SFMT_EMPTY }, + { VIRTUAL_INSN_X_BEGIN, BPFBF_EBPFBE_INSN_X_BEGIN, BPFBF_EBPFBE_SFMT_EMPTY }, + { BPF_INSN_ADDIBE, BPFBF_EBPFBE_INSN_ADDIBE, BPFBF_EBPFBE_SFMT_ADDIBE }, + { BPF_INSN_ADDRBE, BPFBF_EBPFBE_INSN_ADDRBE, BPFBF_EBPFBE_SFMT_ADDRBE }, + { BPF_INSN_ADD32IBE, BPFBF_EBPFBE_INSN_ADD32IBE, BPFBF_EBPFBE_SFMT_ADDIBE }, + { BPF_INSN_ADD32RBE, BPFBF_EBPFBE_INSN_ADD32RBE, BPFBF_EBPFBE_SFMT_ADDRBE }, + { BPF_INSN_SUBIBE, BPFBF_EBPFBE_INSN_SUBIBE, BPFBF_EBPFBE_SFMT_ADDIBE }, + { BPF_INSN_SUBRBE, BPFBF_EBPFBE_INSN_SUBRBE, BPFBF_EBPFBE_SFMT_ADDRBE }, + { BPF_INSN_SUB32IBE, BPFBF_EBPFBE_INSN_SUB32IBE, BPFBF_EBPFBE_SFMT_ADDIBE }, + { BPF_INSN_SUB32RBE, BPFBF_EBPFBE_INSN_SUB32RBE, BPFBF_EBPFBE_SFMT_ADDRBE }, + { BPF_INSN_MULIBE, BPFBF_EBPFBE_INSN_MULIBE, BPFBF_EBPFBE_SFMT_ADDIBE }, + { BPF_INSN_MULRBE, BPFBF_EBPFBE_INSN_MULRBE, BPFBF_EBPFBE_SFMT_ADDRBE }, + { BPF_INSN_MUL32IBE, BPFBF_EBPFBE_INSN_MUL32IBE, BPFBF_EBPFBE_SFMT_ADDIBE }, + { BPF_INSN_MUL32RBE, BPFBF_EBPFBE_INSN_MUL32RBE, BPFBF_EBPFBE_SFMT_ADDRBE }, + { BPF_INSN_DIVIBE, BPFBF_EBPFBE_INSN_DIVIBE, BPFBF_EBPFBE_SFMT_ADDIBE }, + { BPF_INSN_DIVRBE, BPFBF_EBPFBE_INSN_DIVRBE, BPFBF_EBPFBE_SFMT_ADDRBE }, + { BPF_INSN_DIV32IBE, BPFBF_EBPFBE_INSN_DIV32IBE, BPFBF_EBPFBE_SFMT_ADDIBE }, + { BPF_INSN_DIV32RBE, BPFBF_EBPFBE_INSN_DIV32RBE, BPFBF_EBPFBE_SFMT_ADDRBE }, + { BPF_INSN_ORIBE, BPFBF_EBPFBE_INSN_ORIBE, BPFBF_EBPFBE_SFMT_ADDIBE }, + { BPF_INSN_ORRBE, BPFBF_EBPFBE_INSN_ORRBE, BPFBF_EBPFBE_SFMT_ADDRBE }, + { BPF_INSN_OR32IBE, BPFBF_EBPFBE_INSN_OR32IBE, BPFBF_EBPFBE_SFMT_ADDIBE }, + { BPF_INSN_OR32RBE, BPFBF_EBPFBE_INSN_OR32RBE, BPFBF_EBPFBE_SFMT_ADDRBE }, + { BPF_INSN_ANDIBE, BPFBF_EBPFBE_INSN_ANDIBE, BPFBF_EBPFBE_SFMT_ADDIBE }, + { BPF_INSN_ANDRBE, BPFBF_EBPFBE_INSN_ANDRBE, BPFBF_EBPFBE_SFMT_ADDRBE }, + { BPF_INSN_AND32IBE, BPFBF_EBPFBE_INSN_AND32IBE, BPFBF_EBPFBE_SFMT_ADDIBE }, + { BPF_INSN_AND32RBE, BPFBF_EBPFBE_INSN_AND32RBE, BPFBF_EBPFBE_SFMT_ADDRBE }, + { BPF_INSN_LSHIBE, BPFBF_EBPFBE_INSN_LSHIBE, BPFBF_EBPFBE_SFMT_ADDIBE }, + { BPF_INSN_LSHRBE, BPFBF_EBPFBE_INSN_LSHRBE, BPFBF_EBPFBE_SFMT_ADDRBE }, + { BPF_INSN_LSH32IBE, BPFBF_EBPFBE_INSN_LSH32IBE, BPFBF_EBPFBE_SFMT_ADDIBE }, + { BPF_INSN_LSH32RBE, BPFBF_EBPFBE_INSN_LSH32RBE, BPFBF_EBPFBE_SFMT_ADDRBE }, + { BPF_INSN_RSHIBE, BPFBF_EBPFBE_INSN_RSHIBE, BPFBF_EBPFBE_SFMT_ADDIBE }, + { BPF_INSN_RSHRBE, BPFBF_EBPFBE_INSN_RSHRBE, BPFBF_EBPFBE_SFMT_ADDRBE }, + { BPF_INSN_RSH32IBE, BPFBF_EBPFBE_INSN_RSH32IBE, BPFBF_EBPFBE_SFMT_ADDIBE }, + { BPF_INSN_RSH32RBE, BPFBF_EBPFBE_INSN_RSH32RBE, BPFBF_EBPFBE_SFMT_ADDRBE }, + { BPF_INSN_MODIBE, BPFBF_EBPFBE_INSN_MODIBE, BPFBF_EBPFBE_SFMT_ADDIBE }, + { BPF_INSN_MODRBE, BPFBF_EBPFBE_INSN_MODRBE, BPFBF_EBPFBE_SFMT_ADDRBE }, + { BPF_INSN_MOD32IBE, BPFBF_EBPFBE_INSN_MOD32IBE, BPFBF_EBPFBE_SFMT_ADDIBE }, + { BPF_INSN_MOD32RBE, BPFBF_EBPFBE_INSN_MOD32RBE, BPFBF_EBPFBE_SFMT_ADDRBE }, + { BPF_INSN_XORIBE, BPFBF_EBPFBE_INSN_XORIBE, BPFBF_EBPFBE_SFMT_ADDIBE }, + { BPF_INSN_XORRBE, BPFBF_EBPFBE_INSN_XORRBE, BPFBF_EBPFBE_SFMT_ADDRBE }, + { BPF_INSN_XOR32IBE, BPFBF_EBPFBE_INSN_XOR32IBE, BPFBF_EBPFBE_SFMT_ADDIBE }, + { BPF_INSN_XOR32RBE, BPFBF_EBPFBE_INSN_XOR32RBE, BPFBF_EBPFBE_SFMT_ADDRBE }, + { BPF_INSN_ARSHIBE, BPFBF_EBPFBE_INSN_ARSHIBE, BPFBF_EBPFBE_SFMT_ADDIBE }, + { BPF_INSN_ARSHRBE, BPFBF_EBPFBE_INSN_ARSHRBE, BPFBF_EBPFBE_SFMT_ADDRBE }, + { BPF_INSN_ARSH32IBE, BPFBF_EBPFBE_INSN_ARSH32IBE, BPFBF_EBPFBE_SFMT_ADDIBE }, + { BPF_INSN_ARSH32RBE, BPFBF_EBPFBE_INSN_ARSH32RBE, BPFBF_EBPFBE_SFMT_ADDRBE }, + { BPF_INSN_NEGBE, BPFBF_EBPFBE_INSN_NEGBE, BPFBF_EBPFBE_SFMT_NEGBE }, + { BPF_INSN_NEG32BE, BPFBF_EBPFBE_INSN_NEG32BE, BPFBF_EBPFBE_SFMT_NEGBE }, + { BPF_INSN_MOVIBE, BPFBF_EBPFBE_INSN_MOVIBE, BPFBF_EBPFBE_SFMT_MOVIBE }, + { BPF_INSN_MOVRBE, BPFBF_EBPFBE_INSN_MOVRBE, BPFBF_EBPFBE_SFMT_MOVRBE }, + { BPF_INSN_MOV32IBE, BPFBF_EBPFBE_INSN_MOV32IBE, BPFBF_EBPFBE_SFMT_MOVIBE }, + { BPF_INSN_MOV32RBE, BPFBF_EBPFBE_INSN_MOV32RBE, BPFBF_EBPFBE_SFMT_MOVRBE }, + { BPF_INSN_ENDLEBE, BPFBF_EBPFBE_INSN_ENDLEBE, BPFBF_EBPFBE_SFMT_ENDLEBE }, + { BPF_INSN_ENDBEBE, BPFBF_EBPFBE_INSN_ENDBEBE, BPFBF_EBPFBE_SFMT_ENDLEBE }, + { BPF_INSN_LDDWBE, BPFBF_EBPFBE_INSN_LDDWBE, BPFBF_EBPFBE_SFMT_LDDWBE }, + { BPF_INSN_LDABSW, BPFBF_EBPFBE_INSN_LDABSW, BPFBF_EBPFBE_SFMT_LDABSW }, + { BPF_INSN_LDABSH, BPFBF_EBPFBE_INSN_LDABSH, BPFBF_EBPFBE_SFMT_LDABSH }, + { BPF_INSN_LDABSB, BPFBF_EBPFBE_INSN_LDABSB, BPFBF_EBPFBE_SFMT_LDABSB }, + { BPF_INSN_LDABSDW, BPFBF_EBPFBE_INSN_LDABSDW, BPFBF_EBPFBE_SFMT_LDABSDW }, + { BPF_INSN_LDINDWBE, BPFBF_EBPFBE_INSN_LDINDWBE, BPFBF_EBPFBE_SFMT_LDINDWBE }, + { BPF_INSN_LDINDHBE, BPFBF_EBPFBE_INSN_LDINDHBE, BPFBF_EBPFBE_SFMT_LDINDHBE }, + { BPF_INSN_LDINDBBE, BPFBF_EBPFBE_INSN_LDINDBBE, BPFBF_EBPFBE_SFMT_LDINDBBE }, + { BPF_INSN_LDINDDWBE, BPFBF_EBPFBE_INSN_LDINDDWBE, BPFBF_EBPFBE_SFMT_LDINDDWBE }, + { BPF_INSN_LDXWBE, BPFBF_EBPFBE_INSN_LDXWBE, BPFBF_EBPFBE_SFMT_LDXWBE }, + { BPF_INSN_LDXHBE, BPFBF_EBPFBE_INSN_LDXHBE, BPFBF_EBPFBE_SFMT_LDXHBE }, + { BPF_INSN_LDXBBE, BPFBF_EBPFBE_INSN_LDXBBE, BPFBF_EBPFBE_SFMT_LDXBBE }, + { BPF_INSN_LDXDWBE, BPFBF_EBPFBE_INSN_LDXDWBE, BPFBF_EBPFBE_SFMT_LDXDWBE }, + { BPF_INSN_STXWBE, BPFBF_EBPFBE_INSN_STXWBE, BPFBF_EBPFBE_SFMT_STXWBE }, + { BPF_INSN_STXHBE, BPFBF_EBPFBE_INSN_STXHBE, BPFBF_EBPFBE_SFMT_STXHBE }, + { BPF_INSN_STXBBE, BPFBF_EBPFBE_INSN_STXBBE, BPFBF_EBPFBE_SFMT_STXBBE }, + { BPF_INSN_STXDWBE, BPFBF_EBPFBE_INSN_STXDWBE, BPFBF_EBPFBE_SFMT_STXDWBE }, + { BPF_INSN_STBBE, BPFBF_EBPFBE_INSN_STBBE, BPFBF_EBPFBE_SFMT_STBBE }, + { BPF_INSN_STHBE, BPFBF_EBPFBE_INSN_STHBE, BPFBF_EBPFBE_SFMT_STHBE }, + { BPF_INSN_STWBE, BPFBF_EBPFBE_INSN_STWBE, BPFBF_EBPFBE_SFMT_STWBE }, + { BPF_INSN_STDWBE, BPFBF_EBPFBE_INSN_STDWBE, BPFBF_EBPFBE_SFMT_STDWBE }, + { BPF_INSN_JEQIBE, BPFBF_EBPFBE_INSN_JEQIBE, BPFBF_EBPFBE_SFMT_JEQIBE }, + { BPF_INSN_JEQRBE, BPFBF_EBPFBE_INSN_JEQRBE, BPFBF_EBPFBE_SFMT_JEQRBE }, + { BPF_INSN_JEQ32IBE, BPFBF_EBPFBE_INSN_JEQ32IBE, BPFBF_EBPFBE_SFMT_JEQIBE }, + { BPF_INSN_JEQ32RBE, BPFBF_EBPFBE_INSN_JEQ32RBE, BPFBF_EBPFBE_SFMT_JEQRBE }, + { BPF_INSN_JGTIBE, BPFBF_EBPFBE_INSN_JGTIBE, BPFBF_EBPFBE_SFMT_JEQIBE }, + { BPF_INSN_JGTRBE, BPFBF_EBPFBE_INSN_JGTRBE, BPFBF_EBPFBE_SFMT_JEQRBE }, + { BPF_INSN_JGT32IBE, BPFBF_EBPFBE_INSN_JGT32IBE, BPFBF_EBPFBE_SFMT_JEQIBE }, + { BPF_INSN_JGT32RBE, BPFBF_EBPFBE_INSN_JGT32RBE, BPFBF_EBPFBE_SFMT_JEQRBE }, + { BPF_INSN_JGEIBE, BPFBF_EBPFBE_INSN_JGEIBE, BPFBF_EBPFBE_SFMT_JEQIBE }, + { BPF_INSN_JGERBE, BPFBF_EBPFBE_INSN_JGERBE, BPFBF_EBPFBE_SFMT_JEQRBE }, + { BPF_INSN_JGE32IBE, BPFBF_EBPFBE_INSN_JGE32IBE, BPFBF_EBPFBE_SFMT_JEQIBE }, + { BPF_INSN_JGE32RBE, BPFBF_EBPFBE_INSN_JGE32RBE, BPFBF_EBPFBE_SFMT_JEQRBE }, + { BPF_INSN_JLTIBE, BPFBF_EBPFBE_INSN_JLTIBE, BPFBF_EBPFBE_SFMT_JEQIBE }, + { BPF_INSN_JLTRBE, BPFBF_EBPFBE_INSN_JLTRBE, BPFBF_EBPFBE_SFMT_JEQRBE }, + { BPF_INSN_JLT32IBE, BPFBF_EBPFBE_INSN_JLT32IBE, BPFBF_EBPFBE_SFMT_JEQIBE }, + { BPF_INSN_JLT32RBE, BPFBF_EBPFBE_INSN_JLT32RBE, BPFBF_EBPFBE_SFMT_JEQRBE }, + { BPF_INSN_JLEIBE, BPFBF_EBPFBE_INSN_JLEIBE, BPFBF_EBPFBE_SFMT_JEQIBE }, + { BPF_INSN_JLERBE, BPFBF_EBPFBE_INSN_JLERBE, BPFBF_EBPFBE_SFMT_JEQRBE }, + { BPF_INSN_JLE32IBE, BPFBF_EBPFBE_INSN_JLE32IBE, BPFBF_EBPFBE_SFMT_JEQIBE }, + { BPF_INSN_JLE32RBE, BPFBF_EBPFBE_INSN_JLE32RBE, BPFBF_EBPFBE_SFMT_JEQRBE }, + { BPF_INSN_JSETIBE, BPFBF_EBPFBE_INSN_JSETIBE, BPFBF_EBPFBE_SFMT_JEQIBE }, + { BPF_INSN_JSETRBE, BPFBF_EBPFBE_INSN_JSETRBE, BPFBF_EBPFBE_SFMT_JEQRBE }, + { BPF_INSN_JSET32IBE, BPFBF_EBPFBE_INSN_JSET32IBE, BPFBF_EBPFBE_SFMT_JEQIBE }, + { BPF_INSN_JSET32RBE, BPFBF_EBPFBE_INSN_JSET32RBE, BPFBF_EBPFBE_SFMT_JEQRBE }, + { BPF_INSN_JNEIBE, BPFBF_EBPFBE_INSN_JNEIBE, BPFBF_EBPFBE_SFMT_JEQIBE }, + { BPF_INSN_JNERBE, BPFBF_EBPFBE_INSN_JNERBE, BPFBF_EBPFBE_SFMT_JEQRBE }, + { BPF_INSN_JNE32IBE, BPFBF_EBPFBE_INSN_JNE32IBE, BPFBF_EBPFBE_SFMT_JEQIBE }, + { BPF_INSN_JNE32RBE, BPFBF_EBPFBE_INSN_JNE32RBE, BPFBF_EBPFBE_SFMT_JEQRBE }, + { BPF_INSN_JSGTIBE, BPFBF_EBPFBE_INSN_JSGTIBE, BPFBF_EBPFBE_SFMT_JEQIBE }, + { BPF_INSN_JSGTRBE, BPFBF_EBPFBE_INSN_JSGTRBE, BPFBF_EBPFBE_SFMT_JEQRBE }, + { BPF_INSN_JSGT32IBE, BPFBF_EBPFBE_INSN_JSGT32IBE, BPFBF_EBPFBE_SFMT_JEQIBE }, + { BPF_INSN_JSGT32RBE, BPFBF_EBPFBE_INSN_JSGT32RBE, BPFBF_EBPFBE_SFMT_JEQRBE }, + { BPF_INSN_JSGEIBE, BPFBF_EBPFBE_INSN_JSGEIBE, BPFBF_EBPFBE_SFMT_JEQIBE }, + { BPF_INSN_JSGERBE, BPFBF_EBPFBE_INSN_JSGERBE, BPFBF_EBPFBE_SFMT_JEQRBE }, + { BPF_INSN_JSGE32IBE, BPFBF_EBPFBE_INSN_JSGE32IBE, BPFBF_EBPFBE_SFMT_JEQIBE }, + { BPF_INSN_JSGE32RBE, BPFBF_EBPFBE_INSN_JSGE32RBE, BPFBF_EBPFBE_SFMT_JEQRBE }, + { BPF_INSN_JSLTIBE, BPFBF_EBPFBE_INSN_JSLTIBE, BPFBF_EBPFBE_SFMT_JEQIBE }, + { BPF_INSN_JSLTRBE, BPFBF_EBPFBE_INSN_JSLTRBE, BPFBF_EBPFBE_SFMT_JEQRBE }, + { BPF_INSN_JSLT32IBE, BPFBF_EBPFBE_INSN_JSLT32IBE, BPFBF_EBPFBE_SFMT_JEQIBE }, + { BPF_INSN_JSLT32RBE, BPFBF_EBPFBE_INSN_JSLT32RBE, BPFBF_EBPFBE_SFMT_JEQRBE }, + { BPF_INSN_JSLEIBE, BPFBF_EBPFBE_INSN_JSLEIBE, BPFBF_EBPFBE_SFMT_JEQIBE }, + { BPF_INSN_JSLERBE, BPFBF_EBPFBE_INSN_JSLERBE, BPFBF_EBPFBE_SFMT_JEQRBE }, + { BPF_INSN_JSLE32IBE, BPFBF_EBPFBE_INSN_JSLE32IBE, BPFBF_EBPFBE_SFMT_JEQIBE }, + { BPF_INSN_JSLE32RBE, BPFBF_EBPFBE_INSN_JSLE32RBE, BPFBF_EBPFBE_SFMT_JEQRBE }, + { BPF_INSN_CALLBE, BPFBF_EBPFBE_INSN_CALLBE, BPFBF_EBPFBE_SFMT_CALLBE }, + { BPF_INSN_JA, BPFBF_EBPFBE_INSN_JA, BPFBF_EBPFBE_SFMT_JA }, + { BPF_INSN_EXIT, BPFBF_EBPFBE_INSN_EXIT, BPFBF_EBPFBE_SFMT_EXIT }, + { BPF_INSN_XADDDWBE, BPFBF_EBPFBE_INSN_XADDDWBE, BPFBF_EBPFBE_SFMT_XADDDWBE }, + { BPF_INSN_XADDWBE, BPFBF_EBPFBE_INSN_XADDWBE, BPFBF_EBPFBE_SFMT_XADDWBE }, + { BPF_INSN_BRKPT, BPFBF_EBPFBE_INSN_BRKPT, BPFBF_EBPFBE_SFMT_EXIT }, +}; + +static const struct insn_sem bpfbf_ebpfbe_insn_sem_invalid = +{ + VIRTUAL_INSN_X_INVALID, BPFBF_EBPFBE_INSN_X_INVALID, BPFBF_EBPFBE_SFMT_EMPTY +}; + +/* Initialize an IDESC from the compile-time computable parts. */ + +static INLINE void +init_idesc (SIM_CPU *cpu, IDESC *id, const struct insn_sem *t) +{ + const CGEN_INSN *insn_table = CGEN_CPU_INSN_TABLE (CPU_CPU_DESC (cpu))->init_entries; + + id->num = t->index; + id->sfmt = t->sfmt; + if ((int) t->type <= 0) + id->idata = & cgen_virtual_insn_table[- (int) t->type]; + else + id->idata = & insn_table[t->type]; + id->attrs = CGEN_INSN_ATTRS (id->idata); + /* Oh my god, a magic number. */ + id->length = CGEN_INSN_BITSIZE (id->idata) / 8; + +#if WITH_PROFILE_MODEL_P + id->timing = & MODEL_TIMING (CPU_MODEL (cpu)) [t->index]; + { + SIM_DESC sd = CPU_STATE (cpu); + SIM_ASSERT (t->index == id->timing->num); + } +#endif + + /* Semantic pointers are initialized elsewhere. */ +} + +/* Initialize the instruction descriptor table. */ + +void +bpfbf_ebpfbe_init_idesc_table (SIM_CPU *cpu) +{ + IDESC *id,*tabend; + const struct insn_sem *t,*tend; + int tabsize = BPFBF_EBPFBE_INSN__MAX; + IDESC *table = bpfbf_ebpfbe_insn_data; + + memset (table, 0, tabsize * sizeof (IDESC)); + + /* First set all entries to the `invalid insn'. */ + t = & bpfbf_ebpfbe_insn_sem_invalid; + for (id = table, tabend = table + tabsize; id < tabend; ++id) + init_idesc (cpu, id, t); + + /* Now fill in the values for the chosen cpu. */ + for (t = bpfbf_ebpfbe_insn_sem, tend = t + sizeof (bpfbf_ebpfbe_insn_sem) / sizeof (*t); + t != tend; ++t) + { + init_idesc (cpu, & table[t->index], t); + } + + /* Link the IDESC table into the cpu. */ + CPU_IDESC (cpu) = table; +} + +/* Given an instruction, return a pointer to its IDESC entry. */ + +const IDESC * +bpfbf_ebpfbe_decode (SIM_CPU *current_cpu, IADDR pc, + CGEN_INSN_WORD base_insn, + ARGBUF *abuf) +{ + /* Result of decoder. */ + BPFBF_EBPFBE_INSN_TYPE itype; + + { + CGEN_INSN_WORD insn = base_insn; + + { + unsigned int val = (((insn >> 0) & (255 << 0))); + switch (val) + { + case 4 : itype = BPFBF_EBPFBE_INSN_ADD32IBE; goto extract_sfmt_addibe; + case 5 : itype = BPFBF_EBPFBE_INSN_JA; goto extract_sfmt_ja; + case 7 : itype = BPFBF_EBPFBE_INSN_ADDIBE; goto extract_sfmt_addibe; + case 12 : itype = BPFBF_EBPFBE_INSN_ADD32RBE; goto extract_sfmt_addrbe; + case 15 : itype = BPFBF_EBPFBE_INSN_ADDRBE; goto extract_sfmt_addrbe; + case 20 : itype = BPFBF_EBPFBE_INSN_SUB32IBE; goto extract_sfmt_addibe; + case 21 : itype = BPFBF_EBPFBE_INSN_JEQIBE; goto extract_sfmt_jeqibe; + case 22 : itype = BPFBF_EBPFBE_INSN_JEQ32IBE; goto extract_sfmt_jeqibe; + case 23 : itype = BPFBF_EBPFBE_INSN_SUBIBE; goto extract_sfmt_addibe; + case 24 : itype = BPFBF_EBPFBE_INSN_LDDWBE; goto extract_sfmt_lddwbe; + case 28 : itype = BPFBF_EBPFBE_INSN_SUB32RBE; goto extract_sfmt_addrbe; + case 29 : itype = BPFBF_EBPFBE_INSN_JEQRBE; goto extract_sfmt_jeqrbe; + case 30 : itype = BPFBF_EBPFBE_INSN_JEQ32RBE; goto extract_sfmt_jeqrbe; + case 31 : itype = BPFBF_EBPFBE_INSN_SUBRBE; goto extract_sfmt_addrbe; + case 32 : itype = BPFBF_EBPFBE_INSN_LDABSW; goto extract_sfmt_ldabsw; + case 36 : itype = BPFBF_EBPFBE_INSN_MUL32IBE; goto extract_sfmt_addibe; + case 37 : itype = BPFBF_EBPFBE_INSN_JGTIBE; goto extract_sfmt_jeqibe; + case 38 : itype = BPFBF_EBPFBE_INSN_JGT32IBE; goto extract_sfmt_jeqibe; + case 39 : itype = BPFBF_EBPFBE_INSN_MULIBE; goto extract_sfmt_addibe; + case 40 : itype = BPFBF_EBPFBE_INSN_LDABSH; goto extract_sfmt_ldabsh; + case 44 : itype = BPFBF_EBPFBE_INSN_MUL32RBE; goto extract_sfmt_addrbe; + case 45 : itype = BPFBF_EBPFBE_INSN_JGTRBE; goto extract_sfmt_jeqrbe; + case 46 : itype = BPFBF_EBPFBE_INSN_JGT32RBE; goto extract_sfmt_jeqrbe; + case 47 : itype = BPFBF_EBPFBE_INSN_MULRBE; goto extract_sfmt_addrbe; + case 48 : itype = BPFBF_EBPFBE_INSN_LDABSB; goto extract_sfmt_ldabsb; + case 52 : itype = BPFBF_EBPFBE_INSN_DIV32IBE; goto extract_sfmt_addibe; + case 53 : itype = BPFBF_EBPFBE_INSN_JGEIBE; goto extract_sfmt_jeqibe; + case 54 : itype = BPFBF_EBPFBE_INSN_JGE32IBE; goto extract_sfmt_jeqibe; + case 55 : itype = BPFBF_EBPFBE_INSN_DIVIBE; goto extract_sfmt_addibe; + case 56 : itype = BPFBF_EBPFBE_INSN_LDABSDW; goto extract_sfmt_ldabsdw; + case 60 : itype = BPFBF_EBPFBE_INSN_DIV32RBE; goto extract_sfmt_addrbe; + case 61 : itype = BPFBF_EBPFBE_INSN_JGERBE; goto extract_sfmt_jeqrbe; + case 62 : itype = BPFBF_EBPFBE_INSN_JGE32RBE; goto extract_sfmt_jeqrbe; + case 63 : itype = BPFBF_EBPFBE_INSN_DIVRBE; goto extract_sfmt_addrbe; + case 64 : itype = BPFBF_EBPFBE_INSN_LDINDWBE; goto extract_sfmt_ldindwbe; + case 68 : itype = BPFBF_EBPFBE_INSN_OR32IBE; goto extract_sfmt_addibe; + case 69 : itype = BPFBF_EBPFBE_INSN_JSETIBE; goto extract_sfmt_jeqibe; + case 70 : itype = BPFBF_EBPFBE_INSN_JSET32IBE; goto extract_sfmt_jeqibe; + case 71 : itype = BPFBF_EBPFBE_INSN_ORIBE; goto extract_sfmt_addibe; + case 72 : itype = BPFBF_EBPFBE_INSN_LDINDHBE; goto extract_sfmt_ldindhbe; + case 76 : itype = BPFBF_EBPFBE_INSN_OR32RBE; goto extract_sfmt_addrbe; + case 77 : itype = BPFBF_EBPFBE_INSN_JSETRBE; goto extract_sfmt_jeqrbe; + case 78 : itype = BPFBF_EBPFBE_INSN_JSET32RBE; goto extract_sfmt_jeqrbe; + case 79 : itype = BPFBF_EBPFBE_INSN_ORRBE; goto extract_sfmt_addrbe; + case 80 : itype = BPFBF_EBPFBE_INSN_LDINDBBE; goto extract_sfmt_ldindbbe; + case 84 : itype = BPFBF_EBPFBE_INSN_AND32IBE; goto extract_sfmt_addibe; + case 85 : itype = BPFBF_EBPFBE_INSN_JNEIBE; goto extract_sfmt_jeqibe; + case 86 : itype = BPFBF_EBPFBE_INSN_JNE32IBE; goto extract_sfmt_jeqibe; + case 87 : itype = BPFBF_EBPFBE_INSN_ANDIBE; goto extract_sfmt_addibe; + case 88 : itype = BPFBF_EBPFBE_INSN_LDINDDWBE; goto extract_sfmt_ldinddwbe; + case 92 : itype = BPFBF_EBPFBE_INSN_AND32RBE; goto extract_sfmt_addrbe; + case 93 : itype = BPFBF_EBPFBE_INSN_JNERBE; goto extract_sfmt_jeqrbe; + case 94 : itype = BPFBF_EBPFBE_INSN_JNE32RBE; goto extract_sfmt_jeqrbe; + case 95 : itype = BPFBF_EBPFBE_INSN_ANDRBE; goto extract_sfmt_addrbe; + case 97 : itype = BPFBF_EBPFBE_INSN_LDXWBE; goto extract_sfmt_ldxwbe; + case 98 : itype = BPFBF_EBPFBE_INSN_STWBE; goto extract_sfmt_stwbe; + case 99 : itype = BPFBF_EBPFBE_INSN_STXWBE; goto extract_sfmt_stxwbe; + case 100 : itype = BPFBF_EBPFBE_INSN_LSH32IBE; goto extract_sfmt_addibe; + case 101 : itype = BPFBF_EBPFBE_INSN_JSGTIBE; goto extract_sfmt_jeqibe; + case 102 : itype = BPFBF_EBPFBE_INSN_JSGT32IBE; goto extract_sfmt_jeqibe; + case 103 : itype = BPFBF_EBPFBE_INSN_LSHIBE; goto extract_sfmt_addibe; + case 105 : itype = BPFBF_EBPFBE_INSN_LDXHBE; goto extract_sfmt_ldxhbe; + case 106 : itype = BPFBF_EBPFBE_INSN_STHBE; goto extract_sfmt_sthbe; + case 107 : itype = BPFBF_EBPFBE_INSN_STXHBE; goto extract_sfmt_stxhbe; + case 108 : itype = BPFBF_EBPFBE_INSN_LSH32RBE; goto extract_sfmt_addrbe; + case 109 : itype = BPFBF_EBPFBE_INSN_JSGTRBE; goto extract_sfmt_jeqrbe; + case 110 : itype = BPFBF_EBPFBE_INSN_JSGT32RBE; goto extract_sfmt_jeqrbe; + case 111 : itype = BPFBF_EBPFBE_INSN_LSHRBE; goto extract_sfmt_addrbe; + case 113 : itype = BPFBF_EBPFBE_INSN_LDXBBE; goto extract_sfmt_ldxbbe; + case 114 : itype = BPFBF_EBPFBE_INSN_STBBE; goto extract_sfmt_stbbe; + case 115 : itype = BPFBF_EBPFBE_INSN_STXBBE; goto extract_sfmt_stxbbe; + case 116 : itype = BPFBF_EBPFBE_INSN_RSH32IBE; goto extract_sfmt_addibe; + case 117 : itype = BPFBF_EBPFBE_INSN_JSGEIBE; goto extract_sfmt_jeqibe; + case 118 : itype = BPFBF_EBPFBE_INSN_JSGE32IBE; goto extract_sfmt_jeqibe; + case 119 : itype = BPFBF_EBPFBE_INSN_RSHIBE; goto extract_sfmt_addibe; + case 121 : itype = BPFBF_EBPFBE_INSN_LDXDWBE; goto extract_sfmt_ldxdwbe; + case 122 : itype = BPFBF_EBPFBE_INSN_STDWBE; goto extract_sfmt_stdwbe; + case 123 : itype = BPFBF_EBPFBE_INSN_STXDWBE; goto extract_sfmt_stxdwbe; + case 124 : itype = BPFBF_EBPFBE_INSN_RSH32RBE; goto extract_sfmt_addrbe; + case 125 : itype = BPFBF_EBPFBE_INSN_JSGERBE; goto extract_sfmt_jeqrbe; + case 126 : itype = BPFBF_EBPFBE_INSN_JSGE32RBE; goto extract_sfmt_jeqrbe; + case 127 : itype = BPFBF_EBPFBE_INSN_RSHRBE; goto extract_sfmt_addrbe; + case 132 : itype = BPFBF_EBPFBE_INSN_NEG32BE; goto extract_sfmt_negbe; + case 133 : itype = BPFBF_EBPFBE_INSN_CALLBE; goto extract_sfmt_callbe; + case 135 : itype = BPFBF_EBPFBE_INSN_NEGBE; goto extract_sfmt_negbe; + case 140 : itype = BPFBF_EBPFBE_INSN_BRKPT; goto extract_sfmt_exit; + case 148 : itype = BPFBF_EBPFBE_INSN_MOD32IBE; goto extract_sfmt_addibe; + case 149 : itype = BPFBF_EBPFBE_INSN_EXIT; goto extract_sfmt_exit; + case 151 : itype = BPFBF_EBPFBE_INSN_MODIBE; goto extract_sfmt_addibe; + case 156 : itype = BPFBF_EBPFBE_INSN_MOD32RBE; goto extract_sfmt_addrbe; + case 159 : itype = BPFBF_EBPFBE_INSN_MODRBE; goto extract_sfmt_addrbe; + case 164 : itype = BPFBF_EBPFBE_INSN_XOR32IBE; goto extract_sfmt_addibe; + case 165 : itype = BPFBF_EBPFBE_INSN_JLTIBE; goto extract_sfmt_jeqibe; + case 166 : itype = BPFBF_EBPFBE_INSN_JLT32IBE; goto extract_sfmt_jeqibe; + case 167 : itype = BPFBF_EBPFBE_INSN_XORIBE; goto extract_sfmt_addibe; + case 172 : itype = BPFBF_EBPFBE_INSN_XOR32RBE; goto extract_sfmt_addrbe; + case 173 : itype = BPFBF_EBPFBE_INSN_JLTRBE; goto extract_sfmt_jeqrbe; + case 174 : itype = BPFBF_EBPFBE_INSN_JLT32RBE; goto extract_sfmt_jeqrbe; + case 175 : itype = BPFBF_EBPFBE_INSN_XORRBE; goto extract_sfmt_addrbe; + case 180 : itype = BPFBF_EBPFBE_INSN_MOV32IBE; goto extract_sfmt_movibe; + case 181 : itype = BPFBF_EBPFBE_INSN_JLEIBE; goto extract_sfmt_jeqibe; + case 182 : itype = BPFBF_EBPFBE_INSN_JLE32IBE; goto extract_sfmt_jeqibe; + case 183 : itype = BPFBF_EBPFBE_INSN_MOVIBE; goto extract_sfmt_movibe; + case 188 : itype = BPFBF_EBPFBE_INSN_MOV32RBE; goto extract_sfmt_movrbe; + case 189 : itype = BPFBF_EBPFBE_INSN_JLERBE; goto extract_sfmt_jeqrbe; + case 190 : itype = BPFBF_EBPFBE_INSN_JLE32RBE; goto extract_sfmt_jeqrbe; + case 191 : itype = BPFBF_EBPFBE_INSN_MOVRBE; goto extract_sfmt_movrbe; + case 195 : itype = BPFBF_EBPFBE_INSN_XADDWBE; goto extract_sfmt_xaddwbe; + case 196 : itype = BPFBF_EBPFBE_INSN_ARSH32IBE; goto extract_sfmt_addibe; + case 197 : itype = BPFBF_EBPFBE_INSN_JSLTIBE; goto extract_sfmt_jeqibe; + case 198 : itype = BPFBF_EBPFBE_INSN_JSLT32IBE; goto extract_sfmt_jeqibe; + case 199 : itype = BPFBF_EBPFBE_INSN_ARSHIBE; goto extract_sfmt_addibe; + case 204 : itype = BPFBF_EBPFBE_INSN_ARSH32RBE; goto extract_sfmt_addrbe; + case 205 : itype = BPFBF_EBPFBE_INSN_JSLTRBE; goto extract_sfmt_jeqrbe; + case 206 : itype = BPFBF_EBPFBE_INSN_JSLT32RBE; goto extract_sfmt_jeqrbe; + case 207 : itype = BPFBF_EBPFBE_INSN_ARSHRBE; goto extract_sfmt_addrbe; + case 212 : itype = BPFBF_EBPFBE_INSN_ENDLEBE; goto extract_sfmt_endlebe; + case 213 : itype = BPFBF_EBPFBE_INSN_JSLEIBE; goto extract_sfmt_jeqibe; + case 214 : itype = BPFBF_EBPFBE_INSN_JSLE32IBE; goto extract_sfmt_jeqibe; + case 219 : itype = BPFBF_EBPFBE_INSN_XADDDWBE; goto extract_sfmt_xadddwbe; + case 220 : itype = BPFBF_EBPFBE_INSN_ENDBEBE; goto extract_sfmt_endlebe; + case 221 : itype = BPFBF_EBPFBE_INSN_JSLERBE; goto extract_sfmt_jeqrbe; + case 222 : itype = BPFBF_EBPFBE_INSN_JSLE32RBE; goto extract_sfmt_jeqrbe; + default : itype = BPFBF_EBPFBE_INSN_X_INVALID; goto extract_sfmt_empty; + } + } + } + + /* The instruction has been decoded, now extract the fields. */ + + extract_sfmt_empty: + { + const IDESC *idesc = &bpfbf_ebpfbe_insn_data[itype]; +#define FLD(f) abuf->fields.sfmt_empty.f + + + /* Record the fields for the semantic handler. */ + TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_empty", (char *) 0)); + +#undef FLD + return idesc; + } + + extract_sfmt_addibe: + { + const IDESC *idesc = &bpfbf_ebpfbe_insn_data[itype]; + CGEN_INSN_WORD insn = base_insn; +#define FLD(f) abuf->fields.sfmt_stbbe.f + INT f_imm32; + UINT f_dstbe; + + f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); + f_dstbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); + + /* Record the fields for the semantic handler. */ + FLD (f_dstbe) = f_dstbe; + FLD (f_imm32) = f_imm32; + TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_addibe", "f_dstbe 0x%x", 'x', f_dstbe, "f_imm32 0x%x", 'x', f_imm32, (char *) 0)); + +#undef FLD + return idesc; + } + + extract_sfmt_addrbe: + { + const IDESC *idesc = &bpfbf_ebpfbe_insn_data[itype]; + CGEN_INSN_WORD insn = base_insn; +#define FLD(f) abuf->fields.sfmt_ldxwbe.f + UINT f_dstbe; + UINT f_srcbe; + + f_dstbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); + f_srcbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); + + /* Record the fields for the semantic handler. */ + FLD (f_dstbe) = f_dstbe; + FLD (f_srcbe) = f_srcbe; + TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_addrbe", "f_dstbe 0x%x", 'x', f_dstbe, "f_srcbe 0x%x", 'x', f_srcbe, (char *) 0)); + +#undef FLD + return idesc; + } + + extract_sfmt_negbe: + { + const IDESC *idesc = &bpfbf_ebpfbe_insn_data[itype]; + CGEN_INSN_WORD insn = base_insn; +#define FLD(f) abuf->fields.sfmt_lddwbe.f + UINT f_dstbe; + + f_dstbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); + + /* Record the fields for the semantic handler. */ + FLD (f_dstbe) = f_dstbe; + TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_negbe", "f_dstbe 0x%x", 'x', f_dstbe, (char *) 0)); + +#undef FLD + return idesc; + } + + extract_sfmt_movibe: + { + const IDESC *idesc = &bpfbf_ebpfbe_insn_data[itype]; + CGEN_INSN_WORD insn = base_insn; +#define FLD(f) abuf->fields.sfmt_stbbe.f + INT f_imm32; + UINT f_dstbe; + + f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); + f_dstbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); + + /* Record the fields for the semantic handler. */ + FLD (f_imm32) = f_imm32; + FLD (f_dstbe) = f_dstbe; + TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_movibe", "f_imm32 0x%x", 'x', f_imm32, "f_dstbe 0x%x", 'x', f_dstbe, (char *) 0)); + +#undef FLD + return idesc; + } + + extract_sfmt_movrbe: + { + const IDESC *idesc = &bpfbf_ebpfbe_insn_data[itype]; + CGEN_INSN_WORD insn = base_insn; +#define FLD(f) abuf->fields.sfmt_ldxwbe.f + UINT f_dstbe; + UINT f_srcbe; + + f_dstbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); + f_srcbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); + + /* Record the fields for the semantic handler. */ + FLD (f_srcbe) = f_srcbe; + FLD (f_dstbe) = f_dstbe; + TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_movrbe", "f_srcbe 0x%x", 'x', f_srcbe, "f_dstbe 0x%x", 'x', f_dstbe, (char *) 0)); + +#undef FLD + return idesc; + } + + extract_sfmt_endlebe: + { + const IDESC *idesc = &bpfbf_ebpfbe_insn_data[itype]; + CGEN_INSN_WORD insn = base_insn; +#define FLD(f) abuf->fields.sfmt_stbbe.f + INT f_imm32; + UINT f_dstbe; + + f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); + f_dstbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); + + /* Record the fields for the semantic handler. */ + FLD (f_dstbe) = f_dstbe; + FLD (f_imm32) = f_imm32; + TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_endlebe", "f_dstbe 0x%x", 'x', f_dstbe, "f_imm32 0x%x", 'x', f_imm32, (char *) 0)); + +#undef FLD + return idesc; + } + + extract_sfmt_lddwbe: + { + const IDESC *idesc = &bpfbf_ebpfbe_insn_data[itype]; + CGEN_INSN_WORD insn = base_insn; +#define FLD(f) abuf->fields.sfmt_lddwbe.f + UINT f_imm64_c; + UINT f_imm64_b; + UINT f_imm64_a; + UINT f_dstbe; + DI f_imm64; + /* Contents of trailing part of insn. */ + UINT word_1; + UINT word_2; + + word_1 = GETIMEMUSI (current_cpu, pc + 8); + word_2 = GETIMEMUSI (current_cpu, pc + 12); + f_imm64_c = (0|(EXTRACT_LSB0_UINT (word_2, 32, 31, 32) << 0)); + f_imm64_b = (0|(EXTRACT_LSB0_UINT (word_1, 32, 31, 32) << 0)); + f_imm64_a = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); + f_dstbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); +{ + f_imm64 = ((((((UDI) (UINT) (f_imm64_c))) << (32))) | (((UDI) (UINT) (f_imm64_a)))); +} + + /* Record the fields for the semantic handler. */ + FLD (f_imm64) = f_imm64; + FLD (f_dstbe) = f_dstbe; + TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_lddwbe", "f_imm64 0x%x", 'x', f_imm64, "f_dstbe 0x%x", 'x', f_dstbe, (char *) 0)); + +#undef FLD + return idesc; + } + + extract_sfmt_ldabsw: + { + const IDESC *idesc = &bpfbf_ebpfbe_insn_data[itype]; + CGEN_INSN_WORD insn = base_insn; +#define FLD(f) abuf->fields.sfmt_ldindwbe.f + INT f_imm32; + + f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); + + /* Record the fields for the semantic handler. */ + FLD (f_imm32) = f_imm32; + TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldabsw", "f_imm32 0x%x", 'x', f_imm32, (char *) 0)); + +#undef FLD + return idesc; + } + + extract_sfmt_ldabsh: + { + const IDESC *idesc = &bpfbf_ebpfbe_insn_data[itype]; + CGEN_INSN_WORD insn = base_insn; +#define FLD(f) abuf->fields.sfmt_ldindwbe.f + INT f_imm32; + + f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); + + /* Record the fields for the semantic handler. */ + FLD (f_imm32) = f_imm32; + TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldabsh", "f_imm32 0x%x", 'x', f_imm32, (char *) 0)); + +#undef FLD + return idesc; + } + + extract_sfmt_ldabsb: + { + const IDESC *idesc = &bpfbf_ebpfbe_insn_data[itype]; + CGEN_INSN_WORD insn = base_insn; +#define FLD(f) abuf->fields.sfmt_ldindwbe.f + INT f_imm32; + + f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); + + /* Record the fields for the semantic handler. */ + FLD (f_imm32) = f_imm32; + TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldabsb", "f_imm32 0x%x", 'x', f_imm32, (char *) 0)); + +#undef FLD + return idesc; + } + + extract_sfmt_ldabsdw: + { + const IDESC *idesc = &bpfbf_ebpfbe_insn_data[itype]; + CGEN_INSN_WORD insn = base_insn; +#define FLD(f) abuf->fields.sfmt_ldindwbe.f + INT f_imm32; + + f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); + + /* Record the fields for the semantic handler. */ + FLD (f_imm32) = f_imm32; + TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldabsdw", "f_imm32 0x%x", 'x', f_imm32, (char *) 0)); + +#undef FLD + return idesc; + } + + extract_sfmt_ldindwbe: + { + const IDESC *idesc = &bpfbf_ebpfbe_insn_data[itype]; + CGEN_INSN_WORD insn = base_insn; +#define FLD(f) abuf->fields.sfmt_ldindwbe.f + INT f_imm32; + UINT f_srcbe; + + f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); + f_srcbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); + + /* Record the fields for the semantic handler. */ + FLD (f_imm32) = f_imm32; + FLD (f_srcbe) = f_srcbe; + TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldindwbe", "f_imm32 0x%x", 'x', f_imm32, "f_srcbe 0x%x", 'x', f_srcbe, (char *) 0)); + +#undef FLD + return idesc; + } + + extract_sfmt_ldindhbe: + { + const IDESC *idesc = &bpfbf_ebpfbe_insn_data[itype]; + CGEN_INSN_WORD insn = base_insn; +#define FLD(f) abuf->fields.sfmt_ldindwbe.f + INT f_imm32; + UINT f_srcbe; + + f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); + f_srcbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); + + /* Record the fields for the semantic handler. */ + FLD (f_imm32) = f_imm32; + FLD (f_srcbe) = f_srcbe; + TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldindhbe", "f_imm32 0x%x", 'x', f_imm32, "f_srcbe 0x%x", 'x', f_srcbe, (char *) 0)); + +#undef FLD + return idesc; + } + + extract_sfmt_ldindbbe: + { + const IDESC *idesc = &bpfbf_ebpfbe_insn_data[itype]; + CGEN_INSN_WORD insn = base_insn; +#define FLD(f) abuf->fields.sfmt_ldindwbe.f + INT f_imm32; + UINT f_srcbe; + + f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); + f_srcbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); + + /* Record the fields for the semantic handler. */ + FLD (f_imm32) = f_imm32; + FLD (f_srcbe) = f_srcbe; + TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldindbbe", "f_imm32 0x%x", 'x', f_imm32, "f_srcbe 0x%x", 'x', f_srcbe, (char *) 0)); + +#undef FLD + return idesc; + } + + extract_sfmt_ldinddwbe: + { + const IDESC *idesc = &bpfbf_ebpfbe_insn_data[itype]; + CGEN_INSN_WORD insn = base_insn; +#define FLD(f) abuf->fields.sfmt_ldindwbe.f + INT f_imm32; + UINT f_srcbe; + + f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); + f_srcbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); + + /* Record the fields for the semantic handler. */ + FLD (f_imm32) = f_imm32; + FLD (f_srcbe) = f_srcbe; + TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldinddwbe", "f_imm32 0x%x", 'x', f_imm32, "f_srcbe 0x%x", 'x', f_srcbe, (char *) 0)); + +#undef FLD + return idesc; + } + + extract_sfmt_ldxwbe: + { + const IDESC *idesc = &bpfbf_ebpfbe_insn_data[itype]; + CGEN_INSN_WORD insn = base_insn; +#define FLD(f) abuf->fields.sfmt_ldxwbe.f + HI f_offset16; + UINT f_dstbe; + UINT f_srcbe; + + f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); + f_dstbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); + f_srcbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); + + /* Record the fields for the semantic handler. */ + FLD (f_offset16) = f_offset16; + FLD (f_srcbe) = f_srcbe; + FLD (f_dstbe) = f_dstbe; + TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldxwbe", "f_offset16 0x%x", 'x', f_offset16, "f_srcbe 0x%x", 'x', f_srcbe, "f_dstbe 0x%x", 'x', f_dstbe, (char *) 0)); + +#undef FLD + return idesc; + } + + extract_sfmt_ldxhbe: + { + const IDESC *idesc = &bpfbf_ebpfbe_insn_data[itype]; + CGEN_INSN_WORD insn = base_insn; +#define FLD(f) abuf->fields.sfmt_ldxwbe.f + HI f_offset16; + UINT f_dstbe; + UINT f_srcbe; + + f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); + f_dstbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); + f_srcbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); + + /* Record the fields for the semantic handler. */ + FLD (f_offset16) = f_offset16; + FLD (f_srcbe) = f_srcbe; + FLD (f_dstbe) = f_dstbe; + TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldxhbe", "f_offset16 0x%x", 'x', f_offset16, "f_srcbe 0x%x", 'x', f_srcbe, "f_dstbe 0x%x", 'x', f_dstbe, (char *) 0)); + +#undef FLD + return idesc; + } + + extract_sfmt_ldxbbe: + { + const IDESC *idesc = &bpfbf_ebpfbe_insn_data[itype]; + CGEN_INSN_WORD insn = base_insn; +#define FLD(f) abuf->fields.sfmt_ldxwbe.f + HI f_offset16; + UINT f_dstbe; + UINT f_srcbe; + + f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); + f_dstbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); + f_srcbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); + + /* Record the fields for the semantic handler. */ + FLD (f_offset16) = f_offset16; + FLD (f_srcbe) = f_srcbe; + FLD (f_dstbe) = f_dstbe; + TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldxbbe", "f_offset16 0x%x", 'x', f_offset16, "f_srcbe 0x%x", 'x', f_srcbe, "f_dstbe 0x%x", 'x', f_dstbe, (char *) 0)); + +#undef FLD + return idesc; + } + + extract_sfmt_ldxdwbe: + { + const IDESC *idesc = &bpfbf_ebpfbe_insn_data[itype]; + CGEN_INSN_WORD insn = base_insn; +#define FLD(f) abuf->fields.sfmt_ldxwbe.f + HI f_offset16; + UINT f_dstbe; + UINT f_srcbe; + + f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); + f_dstbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); + f_srcbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); + + /* Record the fields for the semantic handler. */ + FLD (f_offset16) = f_offset16; + FLD (f_srcbe) = f_srcbe; + FLD (f_dstbe) = f_dstbe; + TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldxdwbe", "f_offset16 0x%x", 'x', f_offset16, "f_srcbe 0x%x", 'x', f_srcbe, "f_dstbe 0x%x", 'x', f_dstbe, (char *) 0)); + +#undef FLD + return idesc; + } + + extract_sfmt_stxwbe: + { + const IDESC *idesc = &bpfbf_ebpfbe_insn_data[itype]; + CGEN_INSN_WORD insn = base_insn; +#define FLD(f) abuf->fields.sfmt_ldxwbe.f + HI f_offset16; + UINT f_dstbe; + UINT f_srcbe; + + f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); + f_dstbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); + f_srcbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); + + /* Record the fields for the semantic handler. */ + FLD (f_dstbe) = f_dstbe; + FLD (f_offset16) = f_offset16; + FLD (f_srcbe) = f_srcbe; + TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_stxwbe", "f_dstbe 0x%x", 'x', f_dstbe, "f_offset16 0x%x", 'x', f_offset16, "f_srcbe 0x%x", 'x', f_srcbe, (char *) 0)); + +#undef FLD + return idesc; + } + + extract_sfmt_stxhbe: + { + const IDESC *idesc = &bpfbf_ebpfbe_insn_data[itype]; + CGEN_INSN_WORD insn = base_insn; +#define FLD(f) abuf->fields.sfmt_ldxwbe.f + HI f_offset16; + UINT f_dstbe; + UINT f_srcbe; + + f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); + f_dstbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); + f_srcbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); + + /* Record the fields for the semantic handler. */ + FLD (f_dstbe) = f_dstbe; + FLD (f_offset16) = f_offset16; + FLD (f_srcbe) = f_srcbe; + TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_stxhbe", "f_dstbe 0x%x", 'x', f_dstbe, "f_offset16 0x%x", 'x', f_offset16, "f_srcbe 0x%x", 'x', f_srcbe, (char *) 0)); + +#undef FLD + return idesc; + } + + extract_sfmt_stxbbe: + { + const IDESC *idesc = &bpfbf_ebpfbe_insn_data[itype]; + CGEN_INSN_WORD insn = base_insn; +#define FLD(f) abuf->fields.sfmt_ldxwbe.f + HI f_offset16; + UINT f_dstbe; + UINT f_srcbe; + + f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); + f_dstbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); + f_srcbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); + + /* Record the fields for the semantic handler. */ + FLD (f_dstbe) = f_dstbe; + FLD (f_offset16) = f_offset16; + FLD (f_srcbe) = f_srcbe; + TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_stxbbe", "f_dstbe 0x%x", 'x', f_dstbe, "f_offset16 0x%x", 'x', f_offset16, "f_srcbe 0x%x", 'x', f_srcbe, (char *) 0)); + +#undef FLD + return idesc; + } + + extract_sfmt_stxdwbe: + { + const IDESC *idesc = &bpfbf_ebpfbe_insn_data[itype]; + CGEN_INSN_WORD insn = base_insn; +#define FLD(f) abuf->fields.sfmt_ldxwbe.f + HI f_offset16; + UINT f_dstbe; + UINT f_srcbe; + + f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); + f_dstbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); + f_srcbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); + + /* Record the fields for the semantic handler. */ + FLD (f_dstbe) = f_dstbe; + FLD (f_offset16) = f_offset16; + FLD (f_srcbe) = f_srcbe; + TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_stxdwbe", "f_dstbe 0x%x", 'x', f_dstbe, "f_offset16 0x%x", 'x', f_offset16, "f_srcbe 0x%x", 'x', f_srcbe, (char *) 0)); + +#undef FLD + return idesc; + } + + extract_sfmt_stbbe: + { + const IDESC *idesc = &bpfbf_ebpfbe_insn_data[itype]; + CGEN_INSN_WORD insn = base_insn; +#define FLD(f) abuf->fields.sfmt_stbbe.f + INT f_imm32; + HI f_offset16; + UINT f_dstbe; + + f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); + f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); + f_dstbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); + + /* Record the fields for the semantic handler. */ + FLD (f_dstbe) = f_dstbe; + FLD (f_imm32) = f_imm32; + FLD (f_offset16) = f_offset16; + TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_stbbe", "f_dstbe 0x%x", 'x', f_dstbe, "f_imm32 0x%x", 'x', f_imm32, "f_offset16 0x%x", 'x', f_offset16, (char *) 0)); + +#undef FLD + return idesc; + } + + extract_sfmt_sthbe: + { + const IDESC *idesc = &bpfbf_ebpfbe_insn_data[itype]; + CGEN_INSN_WORD insn = base_insn; +#define FLD(f) abuf->fields.sfmt_stbbe.f + INT f_imm32; + HI f_offset16; + UINT f_dstbe; + + f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); + f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); + f_dstbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); + + /* Record the fields for the semantic handler. */ + FLD (f_dstbe) = f_dstbe; + FLD (f_imm32) = f_imm32; + FLD (f_offset16) = f_offset16; + TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_sthbe", "f_dstbe 0x%x", 'x', f_dstbe, "f_imm32 0x%x", 'x', f_imm32, "f_offset16 0x%x", 'x', f_offset16, (char *) 0)); + +#undef FLD + return idesc; + } + + extract_sfmt_stwbe: + { + const IDESC *idesc = &bpfbf_ebpfbe_insn_data[itype]; + CGEN_INSN_WORD insn = base_insn; +#define FLD(f) abuf->fields.sfmt_stbbe.f + INT f_imm32; + HI f_offset16; + UINT f_dstbe; + + f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); + f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); + f_dstbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); + + /* Record the fields for the semantic handler. */ + FLD (f_dstbe) = f_dstbe; + FLD (f_imm32) = f_imm32; + FLD (f_offset16) = f_offset16; + TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_stwbe", "f_dstbe 0x%x", 'x', f_dstbe, "f_imm32 0x%x", 'x', f_imm32, "f_offset16 0x%x", 'x', f_offset16, (char *) 0)); + +#undef FLD + return idesc; + } + + extract_sfmt_stdwbe: + { + const IDESC *idesc = &bpfbf_ebpfbe_insn_data[itype]; + CGEN_INSN_WORD insn = base_insn; +#define FLD(f) abuf->fields.sfmt_stbbe.f + INT f_imm32; + HI f_offset16; + UINT f_dstbe; + + f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); + f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); + f_dstbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); + + /* Record the fields for the semantic handler. */ + FLD (f_dstbe) = f_dstbe; + FLD (f_imm32) = f_imm32; + FLD (f_offset16) = f_offset16; + TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_stdwbe", "f_dstbe 0x%x", 'x', f_dstbe, "f_imm32 0x%x", 'x', f_imm32, "f_offset16 0x%x", 'x', f_offset16, (char *) 0)); + +#undef FLD + return idesc; + } + + extract_sfmt_jeqibe: + { + const IDESC *idesc = &bpfbf_ebpfbe_insn_data[itype]; + CGEN_INSN_WORD insn = base_insn; +#define FLD(f) abuf->fields.sfmt_stbbe.f + INT f_imm32; + HI f_offset16; + UINT f_dstbe; + + f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); + f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); + f_dstbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); + + /* Record the fields for the semantic handler. */ + FLD (f_offset16) = f_offset16; + FLD (f_dstbe) = f_dstbe; + FLD (f_imm32) = f_imm32; + TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_jeqibe", "f_offset16 0x%x", 'x', f_offset16, "f_dstbe 0x%x", 'x', f_dstbe, "f_imm32 0x%x", 'x', f_imm32, (char *) 0)); + +#if WITH_PROFILE_MODEL_P + /* Record the fields for profiling. */ + if (PROFILE_MODEL_P (current_cpu)) + { + } +#endif +#undef FLD + return idesc; + } + + extract_sfmt_jeqrbe: + { + const IDESC *idesc = &bpfbf_ebpfbe_insn_data[itype]; + CGEN_INSN_WORD insn = base_insn; +#define FLD(f) abuf->fields.sfmt_ldxwbe.f + HI f_offset16; + UINT f_dstbe; + UINT f_srcbe; + + f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); + f_dstbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); + f_srcbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); + + /* Record the fields for the semantic handler. */ + FLD (f_offset16) = f_offset16; + FLD (f_dstbe) = f_dstbe; + FLD (f_srcbe) = f_srcbe; + TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_jeqrbe", "f_offset16 0x%x", 'x', f_offset16, "f_dstbe 0x%x", 'x', f_dstbe, "f_srcbe 0x%x", 'x', f_srcbe, (char *) 0)); + +#if WITH_PROFILE_MODEL_P + /* Record the fields for profiling. */ + if (PROFILE_MODEL_P (current_cpu)) + { + } +#endif +#undef FLD + return idesc; + } + + extract_sfmt_callbe: + { + const IDESC *idesc = &bpfbf_ebpfbe_insn_data[itype]; + CGEN_INSN_WORD insn = base_insn; +#define FLD(f) abuf->fields.sfmt_ldindwbe.f + INT f_imm32; + UINT f_srcbe; + + f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); + f_srcbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); + + /* Record the fields for the semantic handler. */ + FLD (f_imm32) = f_imm32; + FLD (f_srcbe) = f_srcbe; + TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_callbe", "f_imm32 0x%x", 'x', f_imm32, "f_srcbe 0x%x", 'x', f_srcbe, (char *) 0)); + +#undef FLD + return idesc; + } + + extract_sfmt_ja: + { + const IDESC *idesc = &bpfbf_ebpfbe_insn_data[itype]; + CGEN_INSN_WORD insn = base_insn; +#define FLD(f) abuf->fields.sfmt_stbbe.f + HI f_offset16; + + f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); + + /* Record the fields for the semantic handler. */ + FLD (f_offset16) = f_offset16; + TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ja", "f_offset16 0x%x", 'x', f_offset16, (char *) 0)); + +#if WITH_PROFILE_MODEL_P + /* Record the fields for profiling. */ + if (PROFILE_MODEL_P (current_cpu)) + { + } +#endif +#undef FLD + return idesc; + } + + extract_sfmt_exit: + { + const IDESC *idesc = &bpfbf_ebpfbe_insn_data[itype]; +#define FLD(f) abuf->fields.sfmt_empty.f + + + /* Record the fields for the semantic handler. */ + TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_exit", (char *) 0)); + +#undef FLD + return idesc; + } + + extract_sfmt_xadddwbe: + { + const IDESC *idesc = &bpfbf_ebpfbe_insn_data[itype]; + CGEN_INSN_WORD insn = base_insn; +#define FLD(f) abuf->fields.sfmt_ldxwbe.f + HI f_offset16; + UINT f_dstbe; + UINT f_srcbe; + + f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); + f_dstbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); + f_srcbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); + + /* Record the fields for the semantic handler. */ + FLD (f_dstbe) = f_dstbe; + FLD (f_offset16) = f_offset16; + FLD (f_srcbe) = f_srcbe; + TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_xadddwbe", "f_dstbe 0x%x", 'x', f_dstbe, "f_offset16 0x%x", 'x', f_offset16, "f_srcbe 0x%x", 'x', f_srcbe, (char *) 0)); + +#undef FLD + return idesc; + } + + extract_sfmt_xaddwbe: + { + const IDESC *idesc = &bpfbf_ebpfbe_insn_data[itype]; + CGEN_INSN_WORD insn = base_insn; +#define FLD(f) abuf->fields.sfmt_ldxwbe.f + HI f_offset16; + UINT f_dstbe; + UINT f_srcbe; + + f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); + f_dstbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); + f_srcbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); + + /* Record the fields for the semantic handler. */ + FLD (f_dstbe) = f_dstbe; + FLD (f_offset16) = f_offset16; + FLD (f_srcbe) = f_srcbe; + TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_xaddwbe", "f_dstbe 0x%x", 'x', f_dstbe, "f_offset16 0x%x", 'x', f_offset16, "f_srcbe 0x%x", 'x', f_srcbe, (char *) 0)); + +#undef FLD + return idesc; + } + +} diff -Nru gdb-9.1/sim/bpf/decode-be.h gdb-10.2/sim/bpf/decode-be.h --- gdb-9.1/sim/bpf/decode-be.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/sim/bpf/decode-be.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,94 @@ +/* Decode header for bpfbf_ebpfbe. + +THIS FILE IS MACHINE GENERATED WITH CGEN. + +Copyright (C) 1996-2021 Free Software Foundation, Inc. + +This file is part of the GNU simulators. + + This file is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, 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. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. + +*/ + +#ifndef BPFBF_EBPFBE_DECODE_H +#define BPFBF_EBPFBE_DECODE_H + +extern const IDESC *bpfbf_ebpfbe_decode (SIM_CPU *, IADDR, + CGEN_INSN_WORD, + ARGBUF *); +extern void bpfbf_ebpfbe_init_idesc_table (SIM_CPU *); +extern void bpfbf_ebpfbe_sem_init_idesc_table (SIM_CPU *); +extern void bpfbf_ebpfbe_semf_init_idesc_table (SIM_CPU *); + +/* Enum declaration for instructions in cpu family bpfbf. */ +typedef enum bpfbf_ebpfbe_insn_type { + BPFBF_EBPFBE_INSN_X_INVALID, BPFBF_EBPFBE_INSN_X_AFTER, BPFBF_EBPFBE_INSN_X_BEFORE, BPFBF_EBPFBE_INSN_X_CTI_CHAIN + , BPFBF_EBPFBE_INSN_X_CHAIN, BPFBF_EBPFBE_INSN_X_BEGIN, BPFBF_EBPFBE_INSN_ADDIBE, BPFBF_EBPFBE_INSN_ADDRBE + , BPFBF_EBPFBE_INSN_ADD32IBE, BPFBF_EBPFBE_INSN_ADD32RBE, BPFBF_EBPFBE_INSN_SUBIBE, BPFBF_EBPFBE_INSN_SUBRBE + , BPFBF_EBPFBE_INSN_SUB32IBE, BPFBF_EBPFBE_INSN_SUB32RBE, BPFBF_EBPFBE_INSN_MULIBE, BPFBF_EBPFBE_INSN_MULRBE + , BPFBF_EBPFBE_INSN_MUL32IBE, BPFBF_EBPFBE_INSN_MUL32RBE, BPFBF_EBPFBE_INSN_DIVIBE, BPFBF_EBPFBE_INSN_DIVRBE + , BPFBF_EBPFBE_INSN_DIV32IBE, BPFBF_EBPFBE_INSN_DIV32RBE, BPFBF_EBPFBE_INSN_ORIBE, BPFBF_EBPFBE_INSN_ORRBE + , BPFBF_EBPFBE_INSN_OR32IBE, BPFBF_EBPFBE_INSN_OR32RBE, BPFBF_EBPFBE_INSN_ANDIBE, BPFBF_EBPFBE_INSN_ANDRBE + , BPFBF_EBPFBE_INSN_AND32IBE, BPFBF_EBPFBE_INSN_AND32RBE, BPFBF_EBPFBE_INSN_LSHIBE, BPFBF_EBPFBE_INSN_LSHRBE + , BPFBF_EBPFBE_INSN_LSH32IBE, BPFBF_EBPFBE_INSN_LSH32RBE, BPFBF_EBPFBE_INSN_RSHIBE, BPFBF_EBPFBE_INSN_RSHRBE + , BPFBF_EBPFBE_INSN_RSH32IBE, BPFBF_EBPFBE_INSN_RSH32RBE, BPFBF_EBPFBE_INSN_MODIBE, BPFBF_EBPFBE_INSN_MODRBE + , BPFBF_EBPFBE_INSN_MOD32IBE, BPFBF_EBPFBE_INSN_MOD32RBE, BPFBF_EBPFBE_INSN_XORIBE, BPFBF_EBPFBE_INSN_XORRBE + , BPFBF_EBPFBE_INSN_XOR32IBE, BPFBF_EBPFBE_INSN_XOR32RBE, BPFBF_EBPFBE_INSN_ARSHIBE, BPFBF_EBPFBE_INSN_ARSHRBE + , BPFBF_EBPFBE_INSN_ARSH32IBE, BPFBF_EBPFBE_INSN_ARSH32RBE, BPFBF_EBPFBE_INSN_NEGBE, BPFBF_EBPFBE_INSN_NEG32BE + , BPFBF_EBPFBE_INSN_MOVIBE, BPFBF_EBPFBE_INSN_MOVRBE, BPFBF_EBPFBE_INSN_MOV32IBE, BPFBF_EBPFBE_INSN_MOV32RBE + , BPFBF_EBPFBE_INSN_ENDLEBE, BPFBF_EBPFBE_INSN_ENDBEBE, BPFBF_EBPFBE_INSN_LDDWBE, BPFBF_EBPFBE_INSN_LDABSW + , BPFBF_EBPFBE_INSN_LDABSH, BPFBF_EBPFBE_INSN_LDABSB, BPFBF_EBPFBE_INSN_LDABSDW, BPFBF_EBPFBE_INSN_LDINDWBE + , BPFBF_EBPFBE_INSN_LDINDHBE, BPFBF_EBPFBE_INSN_LDINDBBE, BPFBF_EBPFBE_INSN_LDINDDWBE, BPFBF_EBPFBE_INSN_LDXWBE + , BPFBF_EBPFBE_INSN_LDXHBE, BPFBF_EBPFBE_INSN_LDXBBE, BPFBF_EBPFBE_INSN_LDXDWBE, BPFBF_EBPFBE_INSN_STXWBE + , BPFBF_EBPFBE_INSN_STXHBE, BPFBF_EBPFBE_INSN_STXBBE, BPFBF_EBPFBE_INSN_STXDWBE, BPFBF_EBPFBE_INSN_STBBE + , BPFBF_EBPFBE_INSN_STHBE, BPFBF_EBPFBE_INSN_STWBE, BPFBF_EBPFBE_INSN_STDWBE, BPFBF_EBPFBE_INSN_JEQIBE + , BPFBF_EBPFBE_INSN_JEQRBE, BPFBF_EBPFBE_INSN_JEQ32IBE, BPFBF_EBPFBE_INSN_JEQ32RBE, BPFBF_EBPFBE_INSN_JGTIBE + , BPFBF_EBPFBE_INSN_JGTRBE, BPFBF_EBPFBE_INSN_JGT32IBE, BPFBF_EBPFBE_INSN_JGT32RBE, BPFBF_EBPFBE_INSN_JGEIBE + , BPFBF_EBPFBE_INSN_JGERBE, BPFBF_EBPFBE_INSN_JGE32IBE, BPFBF_EBPFBE_INSN_JGE32RBE, BPFBF_EBPFBE_INSN_JLTIBE + , BPFBF_EBPFBE_INSN_JLTRBE, BPFBF_EBPFBE_INSN_JLT32IBE, BPFBF_EBPFBE_INSN_JLT32RBE, BPFBF_EBPFBE_INSN_JLEIBE + , BPFBF_EBPFBE_INSN_JLERBE, BPFBF_EBPFBE_INSN_JLE32IBE, BPFBF_EBPFBE_INSN_JLE32RBE, BPFBF_EBPFBE_INSN_JSETIBE + , BPFBF_EBPFBE_INSN_JSETRBE, BPFBF_EBPFBE_INSN_JSET32IBE, BPFBF_EBPFBE_INSN_JSET32RBE, BPFBF_EBPFBE_INSN_JNEIBE + , BPFBF_EBPFBE_INSN_JNERBE, BPFBF_EBPFBE_INSN_JNE32IBE, BPFBF_EBPFBE_INSN_JNE32RBE, BPFBF_EBPFBE_INSN_JSGTIBE + , BPFBF_EBPFBE_INSN_JSGTRBE, BPFBF_EBPFBE_INSN_JSGT32IBE, BPFBF_EBPFBE_INSN_JSGT32RBE, BPFBF_EBPFBE_INSN_JSGEIBE + , BPFBF_EBPFBE_INSN_JSGERBE, BPFBF_EBPFBE_INSN_JSGE32IBE, BPFBF_EBPFBE_INSN_JSGE32RBE, BPFBF_EBPFBE_INSN_JSLTIBE + , BPFBF_EBPFBE_INSN_JSLTRBE, BPFBF_EBPFBE_INSN_JSLT32IBE, BPFBF_EBPFBE_INSN_JSLT32RBE, BPFBF_EBPFBE_INSN_JSLEIBE + , BPFBF_EBPFBE_INSN_JSLERBE, BPFBF_EBPFBE_INSN_JSLE32IBE, BPFBF_EBPFBE_INSN_JSLE32RBE, BPFBF_EBPFBE_INSN_CALLBE + , BPFBF_EBPFBE_INSN_JA, BPFBF_EBPFBE_INSN_EXIT, BPFBF_EBPFBE_INSN_XADDDWBE, BPFBF_EBPFBE_INSN_XADDWBE + , BPFBF_EBPFBE_INSN_BRKPT, BPFBF_EBPFBE_INSN__MAX +} BPFBF_EBPFBE_INSN_TYPE; + +/* Enum declaration for semantic formats in cpu family bpfbf. */ +typedef enum bpfbf_ebpfbe_sfmt_type { + BPFBF_EBPFBE_SFMT_EMPTY, BPFBF_EBPFBE_SFMT_ADDIBE, BPFBF_EBPFBE_SFMT_ADDRBE, BPFBF_EBPFBE_SFMT_NEGBE + , BPFBF_EBPFBE_SFMT_MOVIBE, BPFBF_EBPFBE_SFMT_MOVRBE, BPFBF_EBPFBE_SFMT_ENDLEBE, BPFBF_EBPFBE_SFMT_LDDWBE + , BPFBF_EBPFBE_SFMT_LDABSW, BPFBF_EBPFBE_SFMT_LDABSH, BPFBF_EBPFBE_SFMT_LDABSB, BPFBF_EBPFBE_SFMT_LDABSDW + , BPFBF_EBPFBE_SFMT_LDINDWBE, BPFBF_EBPFBE_SFMT_LDINDHBE, BPFBF_EBPFBE_SFMT_LDINDBBE, BPFBF_EBPFBE_SFMT_LDINDDWBE + , BPFBF_EBPFBE_SFMT_LDXWBE, BPFBF_EBPFBE_SFMT_LDXHBE, BPFBF_EBPFBE_SFMT_LDXBBE, BPFBF_EBPFBE_SFMT_LDXDWBE + , BPFBF_EBPFBE_SFMT_STXWBE, BPFBF_EBPFBE_SFMT_STXHBE, BPFBF_EBPFBE_SFMT_STXBBE, BPFBF_EBPFBE_SFMT_STXDWBE + , BPFBF_EBPFBE_SFMT_STBBE, BPFBF_EBPFBE_SFMT_STHBE, BPFBF_EBPFBE_SFMT_STWBE, BPFBF_EBPFBE_SFMT_STDWBE + , BPFBF_EBPFBE_SFMT_JEQIBE, BPFBF_EBPFBE_SFMT_JEQRBE, BPFBF_EBPFBE_SFMT_CALLBE, BPFBF_EBPFBE_SFMT_JA + , BPFBF_EBPFBE_SFMT_EXIT, BPFBF_EBPFBE_SFMT_XADDDWBE, BPFBF_EBPFBE_SFMT_XADDWBE +} BPFBF_EBPFBE_SFMT_TYPE; + +/* Function unit handlers (user written). */ + +extern int bpfbf_model_bpf_def_u_exec (SIM_CPU *, const IDESC *, int /*unit_num*/, int /*referenced*/); + +/* Profiling before/after handlers (user written) */ + +extern void bpfbf_model_insn_before (SIM_CPU *, int /*first_p*/); +extern void bpfbf_model_insn_after (SIM_CPU *, int /*last_p*/, int /*cycles*/); + +#endif /* BPFBF_EBPFBE_DECODE_H */ diff -Nru gdb-9.1/sim/bpf/decode.h gdb-10.2/sim/bpf/decode.h --- gdb-9.1/sim/bpf/decode.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/sim/bpf/decode.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,37 @@ +/* Decode declarations. + Copyright (C) 2020-2021 Free Software Foundation, Inc. + Contributed by Oracle, Inc. + +This file is part of the GNU simulators. + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +/* Include declarations for eBPF LE and eBPF BE ISAs. */ + +#ifndef DECODE_H +#define DECODE_H + +#undef WITH_PROFILE_MODEL_P + +#ifdef WANT_ISA_EBPFLE +#include "decode-le.h" +#include "defs-le.h" +#endif /* WANT_ISA_EBPFLE */ + +#ifdef WANT_ISA_EBPFBE +#include "decode-be.h" +#include "defs-be.h" +#endif /* WANT_ISA_EBPFBE */ + +#endif /* DECODE_H */ diff -Nru gdb-9.1/sim/bpf/decode-le.c gdb-10.2/sim/bpf/decode-le.c --- gdb-9.1/sim/bpf/decode-le.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/sim/bpf/decode-le.c 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,1129 @@ +/* Simulator instruction decoder for bpfbf_ebpfle. + +THIS FILE IS MACHINE GENERATED WITH CGEN. + +Copyright (C) 1996-2021 Free Software Foundation, Inc. + +This file is part of the GNU simulators. + + This file is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, 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. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. + +*/ + +#define WANT_CPU bpfbf +#define WANT_CPU_BPFBF + +#include "sim-main.h" +#include "sim-assert.h" + +/* The instruction descriptor array. + This is computed at runtime. Space for it is not malloc'd to save a + teensy bit of cpu in the decoder. Moving it to malloc space is trivial + but won't be done until necessary (we don't currently support the runtime + addition of instructions nor an SMP machine with different cpus). */ +static IDESC bpfbf_ebpfle_insn_data[BPFBF_EBPFLE_INSN__MAX]; + +/* Commas between elements are contained in the macros. + Some of these are conditionally compiled out. */ + +static const struct insn_sem bpfbf_ebpfle_insn_sem[] = +{ + { VIRTUAL_INSN_X_INVALID, BPFBF_EBPFLE_INSN_X_INVALID, BPFBF_EBPFLE_SFMT_EMPTY }, + { VIRTUAL_INSN_X_AFTER, BPFBF_EBPFLE_INSN_X_AFTER, BPFBF_EBPFLE_SFMT_EMPTY }, + { VIRTUAL_INSN_X_BEFORE, BPFBF_EBPFLE_INSN_X_BEFORE, BPFBF_EBPFLE_SFMT_EMPTY }, + { VIRTUAL_INSN_X_CTI_CHAIN, BPFBF_EBPFLE_INSN_X_CTI_CHAIN, BPFBF_EBPFLE_SFMT_EMPTY }, + { VIRTUAL_INSN_X_CHAIN, BPFBF_EBPFLE_INSN_X_CHAIN, BPFBF_EBPFLE_SFMT_EMPTY }, + { VIRTUAL_INSN_X_BEGIN, BPFBF_EBPFLE_INSN_X_BEGIN, BPFBF_EBPFLE_SFMT_EMPTY }, + { BPF_INSN_ADDILE, BPFBF_EBPFLE_INSN_ADDILE, BPFBF_EBPFLE_SFMT_ADDILE }, + { BPF_INSN_ADDRLE, BPFBF_EBPFLE_INSN_ADDRLE, BPFBF_EBPFLE_SFMT_ADDRLE }, + { BPF_INSN_ADD32ILE, BPFBF_EBPFLE_INSN_ADD32ILE, BPFBF_EBPFLE_SFMT_ADDILE }, + { BPF_INSN_ADD32RLE, BPFBF_EBPFLE_INSN_ADD32RLE, BPFBF_EBPFLE_SFMT_ADDRLE }, + { BPF_INSN_SUBILE, BPFBF_EBPFLE_INSN_SUBILE, BPFBF_EBPFLE_SFMT_ADDILE }, + { BPF_INSN_SUBRLE, BPFBF_EBPFLE_INSN_SUBRLE, BPFBF_EBPFLE_SFMT_ADDRLE }, + { BPF_INSN_SUB32ILE, BPFBF_EBPFLE_INSN_SUB32ILE, BPFBF_EBPFLE_SFMT_ADDILE }, + { BPF_INSN_SUB32RLE, BPFBF_EBPFLE_INSN_SUB32RLE, BPFBF_EBPFLE_SFMT_ADDRLE }, + { BPF_INSN_MULILE, BPFBF_EBPFLE_INSN_MULILE, BPFBF_EBPFLE_SFMT_ADDILE }, + { BPF_INSN_MULRLE, BPFBF_EBPFLE_INSN_MULRLE, BPFBF_EBPFLE_SFMT_ADDRLE }, + { BPF_INSN_MUL32ILE, BPFBF_EBPFLE_INSN_MUL32ILE, BPFBF_EBPFLE_SFMT_ADDILE }, + { BPF_INSN_MUL32RLE, BPFBF_EBPFLE_INSN_MUL32RLE, BPFBF_EBPFLE_SFMT_ADDRLE }, + { BPF_INSN_DIVILE, BPFBF_EBPFLE_INSN_DIVILE, BPFBF_EBPFLE_SFMT_ADDILE }, + { BPF_INSN_DIVRLE, BPFBF_EBPFLE_INSN_DIVRLE, BPFBF_EBPFLE_SFMT_ADDRLE }, + { BPF_INSN_DIV32ILE, BPFBF_EBPFLE_INSN_DIV32ILE, BPFBF_EBPFLE_SFMT_ADDILE }, + { BPF_INSN_DIV32RLE, BPFBF_EBPFLE_INSN_DIV32RLE, BPFBF_EBPFLE_SFMT_ADDRLE }, + { BPF_INSN_ORILE, BPFBF_EBPFLE_INSN_ORILE, BPFBF_EBPFLE_SFMT_ADDILE }, + { BPF_INSN_ORRLE, BPFBF_EBPFLE_INSN_ORRLE, BPFBF_EBPFLE_SFMT_ADDRLE }, + { BPF_INSN_OR32ILE, BPFBF_EBPFLE_INSN_OR32ILE, BPFBF_EBPFLE_SFMT_ADDILE }, + { BPF_INSN_OR32RLE, BPFBF_EBPFLE_INSN_OR32RLE, BPFBF_EBPFLE_SFMT_ADDRLE }, + { BPF_INSN_ANDILE, BPFBF_EBPFLE_INSN_ANDILE, BPFBF_EBPFLE_SFMT_ADDILE }, + { BPF_INSN_ANDRLE, BPFBF_EBPFLE_INSN_ANDRLE, BPFBF_EBPFLE_SFMT_ADDRLE }, + { BPF_INSN_AND32ILE, BPFBF_EBPFLE_INSN_AND32ILE, BPFBF_EBPFLE_SFMT_ADDILE }, + { BPF_INSN_AND32RLE, BPFBF_EBPFLE_INSN_AND32RLE, BPFBF_EBPFLE_SFMT_ADDRLE }, + { BPF_INSN_LSHILE, BPFBF_EBPFLE_INSN_LSHILE, BPFBF_EBPFLE_SFMT_ADDILE }, + { BPF_INSN_LSHRLE, BPFBF_EBPFLE_INSN_LSHRLE, BPFBF_EBPFLE_SFMT_ADDRLE }, + { BPF_INSN_LSH32ILE, BPFBF_EBPFLE_INSN_LSH32ILE, BPFBF_EBPFLE_SFMT_ADDILE }, + { BPF_INSN_LSH32RLE, BPFBF_EBPFLE_INSN_LSH32RLE, BPFBF_EBPFLE_SFMT_ADDRLE }, + { BPF_INSN_RSHILE, BPFBF_EBPFLE_INSN_RSHILE, BPFBF_EBPFLE_SFMT_ADDILE }, + { BPF_INSN_RSHRLE, BPFBF_EBPFLE_INSN_RSHRLE, BPFBF_EBPFLE_SFMT_ADDRLE }, + { BPF_INSN_RSH32ILE, BPFBF_EBPFLE_INSN_RSH32ILE, BPFBF_EBPFLE_SFMT_ADDILE }, + { BPF_INSN_RSH32RLE, BPFBF_EBPFLE_INSN_RSH32RLE, BPFBF_EBPFLE_SFMT_ADDRLE }, + { BPF_INSN_MODILE, BPFBF_EBPFLE_INSN_MODILE, BPFBF_EBPFLE_SFMT_ADDILE }, + { BPF_INSN_MODRLE, BPFBF_EBPFLE_INSN_MODRLE, BPFBF_EBPFLE_SFMT_ADDRLE }, + { BPF_INSN_MOD32ILE, BPFBF_EBPFLE_INSN_MOD32ILE, BPFBF_EBPFLE_SFMT_ADDILE }, + { BPF_INSN_MOD32RLE, BPFBF_EBPFLE_INSN_MOD32RLE, BPFBF_EBPFLE_SFMT_ADDRLE }, + { BPF_INSN_XORILE, BPFBF_EBPFLE_INSN_XORILE, BPFBF_EBPFLE_SFMT_ADDILE }, + { BPF_INSN_XORRLE, BPFBF_EBPFLE_INSN_XORRLE, BPFBF_EBPFLE_SFMT_ADDRLE }, + { BPF_INSN_XOR32ILE, BPFBF_EBPFLE_INSN_XOR32ILE, BPFBF_EBPFLE_SFMT_ADDILE }, + { BPF_INSN_XOR32RLE, BPFBF_EBPFLE_INSN_XOR32RLE, BPFBF_EBPFLE_SFMT_ADDRLE }, + { BPF_INSN_ARSHILE, BPFBF_EBPFLE_INSN_ARSHILE, BPFBF_EBPFLE_SFMT_ADDILE }, + { BPF_INSN_ARSHRLE, BPFBF_EBPFLE_INSN_ARSHRLE, BPFBF_EBPFLE_SFMT_ADDRLE }, + { BPF_INSN_ARSH32ILE, BPFBF_EBPFLE_INSN_ARSH32ILE, BPFBF_EBPFLE_SFMT_ADDILE }, + { BPF_INSN_ARSH32RLE, BPFBF_EBPFLE_INSN_ARSH32RLE, BPFBF_EBPFLE_SFMT_ADDRLE }, + { BPF_INSN_NEGLE, BPFBF_EBPFLE_INSN_NEGLE, BPFBF_EBPFLE_SFMT_NEGLE }, + { BPF_INSN_NEG32LE, BPFBF_EBPFLE_INSN_NEG32LE, BPFBF_EBPFLE_SFMT_NEGLE }, + { BPF_INSN_MOVILE, BPFBF_EBPFLE_INSN_MOVILE, BPFBF_EBPFLE_SFMT_MOVILE }, + { BPF_INSN_MOVRLE, BPFBF_EBPFLE_INSN_MOVRLE, BPFBF_EBPFLE_SFMT_MOVRLE }, + { BPF_INSN_MOV32ILE, BPFBF_EBPFLE_INSN_MOV32ILE, BPFBF_EBPFLE_SFMT_MOVILE }, + { BPF_INSN_MOV32RLE, BPFBF_EBPFLE_INSN_MOV32RLE, BPFBF_EBPFLE_SFMT_MOVRLE }, + { BPF_INSN_ENDLELE, BPFBF_EBPFLE_INSN_ENDLELE, BPFBF_EBPFLE_SFMT_ENDLELE }, + { BPF_INSN_ENDBELE, BPFBF_EBPFLE_INSN_ENDBELE, BPFBF_EBPFLE_SFMT_ENDLELE }, + { BPF_INSN_LDDWLE, BPFBF_EBPFLE_INSN_LDDWLE, BPFBF_EBPFLE_SFMT_LDDWLE }, + { BPF_INSN_LDABSW, BPFBF_EBPFLE_INSN_LDABSW, BPFBF_EBPFLE_SFMT_LDABSW }, + { BPF_INSN_LDABSH, BPFBF_EBPFLE_INSN_LDABSH, BPFBF_EBPFLE_SFMT_LDABSH }, + { BPF_INSN_LDABSB, BPFBF_EBPFLE_INSN_LDABSB, BPFBF_EBPFLE_SFMT_LDABSB }, + { BPF_INSN_LDABSDW, BPFBF_EBPFLE_INSN_LDABSDW, BPFBF_EBPFLE_SFMT_LDABSDW }, + { BPF_INSN_LDINDWLE, BPFBF_EBPFLE_INSN_LDINDWLE, BPFBF_EBPFLE_SFMT_LDINDWLE }, + { BPF_INSN_LDINDHLE, BPFBF_EBPFLE_INSN_LDINDHLE, BPFBF_EBPFLE_SFMT_LDINDHLE }, + { BPF_INSN_LDINDBLE, BPFBF_EBPFLE_INSN_LDINDBLE, BPFBF_EBPFLE_SFMT_LDINDBLE }, + { BPF_INSN_LDINDDWLE, BPFBF_EBPFLE_INSN_LDINDDWLE, BPFBF_EBPFLE_SFMT_LDINDDWLE }, + { BPF_INSN_LDXWLE, BPFBF_EBPFLE_INSN_LDXWLE, BPFBF_EBPFLE_SFMT_LDXWLE }, + { BPF_INSN_LDXHLE, BPFBF_EBPFLE_INSN_LDXHLE, BPFBF_EBPFLE_SFMT_LDXHLE }, + { BPF_INSN_LDXBLE, BPFBF_EBPFLE_INSN_LDXBLE, BPFBF_EBPFLE_SFMT_LDXBLE }, + { BPF_INSN_LDXDWLE, BPFBF_EBPFLE_INSN_LDXDWLE, BPFBF_EBPFLE_SFMT_LDXDWLE }, + { BPF_INSN_STXWLE, BPFBF_EBPFLE_INSN_STXWLE, BPFBF_EBPFLE_SFMT_STXWLE }, + { BPF_INSN_STXHLE, BPFBF_EBPFLE_INSN_STXHLE, BPFBF_EBPFLE_SFMT_STXHLE }, + { BPF_INSN_STXBLE, BPFBF_EBPFLE_INSN_STXBLE, BPFBF_EBPFLE_SFMT_STXBLE }, + { BPF_INSN_STXDWLE, BPFBF_EBPFLE_INSN_STXDWLE, BPFBF_EBPFLE_SFMT_STXDWLE }, + { BPF_INSN_STBLE, BPFBF_EBPFLE_INSN_STBLE, BPFBF_EBPFLE_SFMT_STBLE }, + { BPF_INSN_STHLE, BPFBF_EBPFLE_INSN_STHLE, BPFBF_EBPFLE_SFMT_STHLE }, + { BPF_INSN_STWLE, BPFBF_EBPFLE_INSN_STWLE, BPFBF_EBPFLE_SFMT_STWLE }, + { BPF_INSN_STDWLE, BPFBF_EBPFLE_INSN_STDWLE, BPFBF_EBPFLE_SFMT_STDWLE }, + { BPF_INSN_JEQILE, BPFBF_EBPFLE_INSN_JEQILE, BPFBF_EBPFLE_SFMT_JEQILE }, + { BPF_INSN_JEQRLE, BPFBF_EBPFLE_INSN_JEQRLE, BPFBF_EBPFLE_SFMT_JEQRLE }, + { BPF_INSN_JEQ32ILE, BPFBF_EBPFLE_INSN_JEQ32ILE, BPFBF_EBPFLE_SFMT_JEQILE }, + { BPF_INSN_JEQ32RLE, BPFBF_EBPFLE_INSN_JEQ32RLE, BPFBF_EBPFLE_SFMT_JEQRLE }, + { BPF_INSN_JGTILE, BPFBF_EBPFLE_INSN_JGTILE, BPFBF_EBPFLE_SFMT_JEQILE }, + { BPF_INSN_JGTRLE, BPFBF_EBPFLE_INSN_JGTRLE, BPFBF_EBPFLE_SFMT_JEQRLE }, + { BPF_INSN_JGT32ILE, BPFBF_EBPFLE_INSN_JGT32ILE, BPFBF_EBPFLE_SFMT_JEQILE }, + { BPF_INSN_JGT32RLE, BPFBF_EBPFLE_INSN_JGT32RLE, BPFBF_EBPFLE_SFMT_JEQRLE }, + { BPF_INSN_JGEILE, BPFBF_EBPFLE_INSN_JGEILE, BPFBF_EBPFLE_SFMT_JEQILE }, + { BPF_INSN_JGERLE, BPFBF_EBPFLE_INSN_JGERLE, BPFBF_EBPFLE_SFMT_JEQRLE }, + { BPF_INSN_JGE32ILE, BPFBF_EBPFLE_INSN_JGE32ILE, BPFBF_EBPFLE_SFMT_JEQILE }, + { BPF_INSN_JGE32RLE, BPFBF_EBPFLE_INSN_JGE32RLE, BPFBF_EBPFLE_SFMT_JEQRLE }, + { BPF_INSN_JLTILE, BPFBF_EBPFLE_INSN_JLTILE, BPFBF_EBPFLE_SFMT_JEQILE }, + { BPF_INSN_JLTRLE, BPFBF_EBPFLE_INSN_JLTRLE, BPFBF_EBPFLE_SFMT_JEQRLE }, + { BPF_INSN_JLT32ILE, BPFBF_EBPFLE_INSN_JLT32ILE, BPFBF_EBPFLE_SFMT_JEQILE }, + { BPF_INSN_JLT32RLE, BPFBF_EBPFLE_INSN_JLT32RLE, BPFBF_EBPFLE_SFMT_JEQRLE }, + { BPF_INSN_JLEILE, BPFBF_EBPFLE_INSN_JLEILE, BPFBF_EBPFLE_SFMT_JEQILE }, + { BPF_INSN_JLERLE, BPFBF_EBPFLE_INSN_JLERLE, BPFBF_EBPFLE_SFMT_JEQRLE }, + { BPF_INSN_JLE32ILE, BPFBF_EBPFLE_INSN_JLE32ILE, BPFBF_EBPFLE_SFMT_JEQILE }, + { BPF_INSN_JLE32RLE, BPFBF_EBPFLE_INSN_JLE32RLE, BPFBF_EBPFLE_SFMT_JEQRLE }, + { BPF_INSN_JSETILE, BPFBF_EBPFLE_INSN_JSETILE, BPFBF_EBPFLE_SFMT_JEQILE }, + { BPF_INSN_JSETRLE, BPFBF_EBPFLE_INSN_JSETRLE, BPFBF_EBPFLE_SFMT_JEQRLE }, + { BPF_INSN_JSET32ILE, BPFBF_EBPFLE_INSN_JSET32ILE, BPFBF_EBPFLE_SFMT_JEQILE }, + { BPF_INSN_JSET32RLE, BPFBF_EBPFLE_INSN_JSET32RLE, BPFBF_EBPFLE_SFMT_JEQRLE }, + { BPF_INSN_JNEILE, BPFBF_EBPFLE_INSN_JNEILE, BPFBF_EBPFLE_SFMT_JEQILE }, + { BPF_INSN_JNERLE, BPFBF_EBPFLE_INSN_JNERLE, BPFBF_EBPFLE_SFMT_JEQRLE }, + { BPF_INSN_JNE32ILE, BPFBF_EBPFLE_INSN_JNE32ILE, BPFBF_EBPFLE_SFMT_JEQILE }, + { BPF_INSN_JNE32RLE, BPFBF_EBPFLE_INSN_JNE32RLE, BPFBF_EBPFLE_SFMT_JEQRLE }, + { BPF_INSN_JSGTILE, BPFBF_EBPFLE_INSN_JSGTILE, BPFBF_EBPFLE_SFMT_JEQILE }, + { BPF_INSN_JSGTRLE, BPFBF_EBPFLE_INSN_JSGTRLE, BPFBF_EBPFLE_SFMT_JEQRLE }, + { BPF_INSN_JSGT32ILE, BPFBF_EBPFLE_INSN_JSGT32ILE, BPFBF_EBPFLE_SFMT_JEQILE }, + { BPF_INSN_JSGT32RLE, BPFBF_EBPFLE_INSN_JSGT32RLE, BPFBF_EBPFLE_SFMT_JEQRLE }, + { BPF_INSN_JSGEILE, BPFBF_EBPFLE_INSN_JSGEILE, BPFBF_EBPFLE_SFMT_JEQILE }, + { BPF_INSN_JSGERLE, BPFBF_EBPFLE_INSN_JSGERLE, BPFBF_EBPFLE_SFMT_JEQRLE }, + { BPF_INSN_JSGE32ILE, BPFBF_EBPFLE_INSN_JSGE32ILE, BPFBF_EBPFLE_SFMT_JEQILE }, + { BPF_INSN_JSGE32RLE, BPFBF_EBPFLE_INSN_JSGE32RLE, BPFBF_EBPFLE_SFMT_JEQRLE }, + { BPF_INSN_JSLTILE, BPFBF_EBPFLE_INSN_JSLTILE, BPFBF_EBPFLE_SFMT_JEQILE }, + { BPF_INSN_JSLTRLE, BPFBF_EBPFLE_INSN_JSLTRLE, BPFBF_EBPFLE_SFMT_JEQRLE }, + { BPF_INSN_JSLT32ILE, BPFBF_EBPFLE_INSN_JSLT32ILE, BPFBF_EBPFLE_SFMT_JEQILE }, + { BPF_INSN_JSLT32RLE, BPFBF_EBPFLE_INSN_JSLT32RLE, BPFBF_EBPFLE_SFMT_JEQRLE }, + { BPF_INSN_JSLEILE, BPFBF_EBPFLE_INSN_JSLEILE, BPFBF_EBPFLE_SFMT_JEQILE }, + { BPF_INSN_JSLERLE, BPFBF_EBPFLE_INSN_JSLERLE, BPFBF_EBPFLE_SFMT_JEQRLE }, + { BPF_INSN_JSLE32ILE, BPFBF_EBPFLE_INSN_JSLE32ILE, BPFBF_EBPFLE_SFMT_JEQILE }, + { BPF_INSN_JSLE32RLE, BPFBF_EBPFLE_INSN_JSLE32RLE, BPFBF_EBPFLE_SFMT_JEQRLE }, + { BPF_INSN_CALLLE, BPFBF_EBPFLE_INSN_CALLLE, BPFBF_EBPFLE_SFMT_CALLLE }, + { BPF_INSN_JA, BPFBF_EBPFLE_INSN_JA, BPFBF_EBPFLE_SFMT_JA }, + { BPF_INSN_EXIT, BPFBF_EBPFLE_INSN_EXIT, BPFBF_EBPFLE_SFMT_EXIT }, + { BPF_INSN_XADDDWLE, BPFBF_EBPFLE_INSN_XADDDWLE, BPFBF_EBPFLE_SFMT_XADDDWLE }, + { BPF_INSN_XADDWLE, BPFBF_EBPFLE_INSN_XADDWLE, BPFBF_EBPFLE_SFMT_XADDWLE }, + { BPF_INSN_BRKPT, BPFBF_EBPFLE_INSN_BRKPT, BPFBF_EBPFLE_SFMT_EXIT }, +}; + +static const struct insn_sem bpfbf_ebpfle_insn_sem_invalid = +{ + VIRTUAL_INSN_X_INVALID, BPFBF_EBPFLE_INSN_X_INVALID, BPFBF_EBPFLE_SFMT_EMPTY +}; + +/* Initialize an IDESC from the compile-time computable parts. */ + +static INLINE void +init_idesc (SIM_CPU *cpu, IDESC *id, const struct insn_sem *t) +{ + const CGEN_INSN *insn_table = CGEN_CPU_INSN_TABLE (CPU_CPU_DESC (cpu))->init_entries; + + id->num = t->index; + id->sfmt = t->sfmt; + if ((int) t->type <= 0) + id->idata = & cgen_virtual_insn_table[- (int) t->type]; + else + id->idata = & insn_table[t->type]; + id->attrs = CGEN_INSN_ATTRS (id->idata); + /* Oh my god, a magic number. */ + id->length = CGEN_INSN_BITSIZE (id->idata) / 8; + +#if WITH_PROFILE_MODEL_P + id->timing = & MODEL_TIMING (CPU_MODEL (cpu)) [t->index]; + { + SIM_DESC sd = CPU_STATE (cpu); + SIM_ASSERT (t->index == id->timing->num); + } +#endif + + /* Semantic pointers are initialized elsewhere. */ +} + +/* Initialize the instruction descriptor table. */ + +void +bpfbf_ebpfle_init_idesc_table (SIM_CPU *cpu) +{ + IDESC *id,*tabend; + const struct insn_sem *t,*tend; + int tabsize = BPFBF_EBPFLE_INSN__MAX; + IDESC *table = bpfbf_ebpfle_insn_data; + + memset (table, 0, tabsize * sizeof (IDESC)); + + /* First set all entries to the `invalid insn'. */ + t = & bpfbf_ebpfle_insn_sem_invalid; + for (id = table, tabend = table + tabsize; id < tabend; ++id) + init_idesc (cpu, id, t); + + /* Now fill in the values for the chosen cpu. */ + for (t = bpfbf_ebpfle_insn_sem, tend = t + sizeof (bpfbf_ebpfle_insn_sem) / sizeof (*t); + t != tend; ++t) + { + init_idesc (cpu, & table[t->index], t); + } + + /* Link the IDESC table into the cpu. */ + CPU_IDESC (cpu) = table; +} + +/* Given an instruction, return a pointer to its IDESC entry. */ + +const IDESC * +bpfbf_ebpfle_decode (SIM_CPU *current_cpu, IADDR pc, + CGEN_INSN_WORD base_insn, + ARGBUF *abuf) +{ + /* Result of decoder. */ + BPFBF_EBPFLE_INSN_TYPE itype; + + { + CGEN_INSN_WORD insn = base_insn; + + { + unsigned int val = (((insn >> 0) & (255 << 0))); + switch (val) + { + case 4 : itype = BPFBF_EBPFLE_INSN_ADD32ILE; goto extract_sfmt_addile; + case 5 : itype = BPFBF_EBPFLE_INSN_JA; goto extract_sfmt_ja; + case 7 : itype = BPFBF_EBPFLE_INSN_ADDILE; goto extract_sfmt_addile; + case 12 : itype = BPFBF_EBPFLE_INSN_ADD32RLE; goto extract_sfmt_addrle; + case 15 : itype = BPFBF_EBPFLE_INSN_ADDRLE; goto extract_sfmt_addrle; + case 20 : itype = BPFBF_EBPFLE_INSN_SUB32ILE; goto extract_sfmt_addile; + case 21 : itype = BPFBF_EBPFLE_INSN_JEQILE; goto extract_sfmt_jeqile; + case 22 : itype = BPFBF_EBPFLE_INSN_JEQ32ILE; goto extract_sfmt_jeqile; + case 23 : itype = BPFBF_EBPFLE_INSN_SUBILE; goto extract_sfmt_addile; + case 24 : itype = BPFBF_EBPFLE_INSN_LDDWLE; goto extract_sfmt_lddwle; + case 28 : itype = BPFBF_EBPFLE_INSN_SUB32RLE; goto extract_sfmt_addrle; + case 29 : itype = BPFBF_EBPFLE_INSN_JEQRLE; goto extract_sfmt_jeqrle; + case 30 : itype = BPFBF_EBPFLE_INSN_JEQ32RLE; goto extract_sfmt_jeqrle; + case 31 : itype = BPFBF_EBPFLE_INSN_SUBRLE; goto extract_sfmt_addrle; + case 32 : itype = BPFBF_EBPFLE_INSN_LDABSW; goto extract_sfmt_ldabsw; + case 36 : itype = BPFBF_EBPFLE_INSN_MUL32ILE; goto extract_sfmt_addile; + case 37 : itype = BPFBF_EBPFLE_INSN_JGTILE; goto extract_sfmt_jeqile; + case 38 : itype = BPFBF_EBPFLE_INSN_JGT32ILE; goto extract_sfmt_jeqile; + case 39 : itype = BPFBF_EBPFLE_INSN_MULILE; goto extract_sfmt_addile; + case 40 : itype = BPFBF_EBPFLE_INSN_LDABSH; goto extract_sfmt_ldabsh; + case 44 : itype = BPFBF_EBPFLE_INSN_MUL32RLE; goto extract_sfmt_addrle; + case 45 : itype = BPFBF_EBPFLE_INSN_JGTRLE; goto extract_sfmt_jeqrle; + case 46 : itype = BPFBF_EBPFLE_INSN_JGT32RLE; goto extract_sfmt_jeqrle; + case 47 : itype = BPFBF_EBPFLE_INSN_MULRLE; goto extract_sfmt_addrle; + case 48 : itype = BPFBF_EBPFLE_INSN_LDABSB; goto extract_sfmt_ldabsb; + case 52 : itype = BPFBF_EBPFLE_INSN_DIV32ILE; goto extract_sfmt_addile; + case 53 : itype = BPFBF_EBPFLE_INSN_JGEILE; goto extract_sfmt_jeqile; + case 54 : itype = BPFBF_EBPFLE_INSN_JGE32ILE; goto extract_sfmt_jeqile; + case 55 : itype = BPFBF_EBPFLE_INSN_DIVILE; goto extract_sfmt_addile; + case 56 : itype = BPFBF_EBPFLE_INSN_LDABSDW; goto extract_sfmt_ldabsdw; + case 60 : itype = BPFBF_EBPFLE_INSN_DIV32RLE; goto extract_sfmt_addrle; + case 61 : itype = BPFBF_EBPFLE_INSN_JGERLE; goto extract_sfmt_jeqrle; + case 62 : itype = BPFBF_EBPFLE_INSN_JGE32RLE; goto extract_sfmt_jeqrle; + case 63 : itype = BPFBF_EBPFLE_INSN_DIVRLE; goto extract_sfmt_addrle; + case 64 : itype = BPFBF_EBPFLE_INSN_LDINDWLE; goto extract_sfmt_ldindwle; + case 68 : itype = BPFBF_EBPFLE_INSN_OR32ILE; goto extract_sfmt_addile; + case 69 : itype = BPFBF_EBPFLE_INSN_JSETILE; goto extract_sfmt_jeqile; + case 70 : itype = BPFBF_EBPFLE_INSN_JSET32ILE; goto extract_sfmt_jeqile; + case 71 : itype = BPFBF_EBPFLE_INSN_ORILE; goto extract_sfmt_addile; + case 72 : itype = BPFBF_EBPFLE_INSN_LDINDHLE; goto extract_sfmt_ldindhle; + case 76 : itype = BPFBF_EBPFLE_INSN_OR32RLE; goto extract_sfmt_addrle; + case 77 : itype = BPFBF_EBPFLE_INSN_JSETRLE; goto extract_sfmt_jeqrle; + case 78 : itype = BPFBF_EBPFLE_INSN_JSET32RLE; goto extract_sfmt_jeqrle; + case 79 : itype = BPFBF_EBPFLE_INSN_ORRLE; goto extract_sfmt_addrle; + case 80 : itype = BPFBF_EBPFLE_INSN_LDINDBLE; goto extract_sfmt_ldindble; + case 84 : itype = BPFBF_EBPFLE_INSN_AND32ILE; goto extract_sfmt_addile; + case 85 : itype = BPFBF_EBPFLE_INSN_JNEILE; goto extract_sfmt_jeqile; + case 86 : itype = BPFBF_EBPFLE_INSN_JNE32ILE; goto extract_sfmt_jeqile; + case 87 : itype = BPFBF_EBPFLE_INSN_ANDILE; goto extract_sfmt_addile; + case 88 : itype = BPFBF_EBPFLE_INSN_LDINDDWLE; goto extract_sfmt_ldinddwle; + case 92 : itype = BPFBF_EBPFLE_INSN_AND32RLE; goto extract_sfmt_addrle; + case 93 : itype = BPFBF_EBPFLE_INSN_JNERLE; goto extract_sfmt_jeqrle; + case 94 : itype = BPFBF_EBPFLE_INSN_JNE32RLE; goto extract_sfmt_jeqrle; + case 95 : itype = BPFBF_EBPFLE_INSN_ANDRLE; goto extract_sfmt_addrle; + case 97 : itype = BPFBF_EBPFLE_INSN_LDXWLE; goto extract_sfmt_ldxwle; + case 98 : itype = BPFBF_EBPFLE_INSN_STWLE; goto extract_sfmt_stwle; + case 99 : itype = BPFBF_EBPFLE_INSN_STXWLE; goto extract_sfmt_stxwle; + case 100 : itype = BPFBF_EBPFLE_INSN_LSH32ILE; goto extract_sfmt_addile; + case 101 : itype = BPFBF_EBPFLE_INSN_JSGTILE; goto extract_sfmt_jeqile; + case 102 : itype = BPFBF_EBPFLE_INSN_JSGT32ILE; goto extract_sfmt_jeqile; + case 103 : itype = BPFBF_EBPFLE_INSN_LSHILE; goto extract_sfmt_addile; + case 105 : itype = BPFBF_EBPFLE_INSN_LDXHLE; goto extract_sfmt_ldxhle; + case 106 : itype = BPFBF_EBPFLE_INSN_STHLE; goto extract_sfmt_sthle; + case 107 : itype = BPFBF_EBPFLE_INSN_STXHLE; goto extract_sfmt_stxhle; + case 108 : itype = BPFBF_EBPFLE_INSN_LSH32RLE; goto extract_sfmt_addrle; + case 109 : itype = BPFBF_EBPFLE_INSN_JSGTRLE; goto extract_sfmt_jeqrle; + case 110 : itype = BPFBF_EBPFLE_INSN_JSGT32RLE; goto extract_sfmt_jeqrle; + case 111 : itype = BPFBF_EBPFLE_INSN_LSHRLE; goto extract_sfmt_addrle; + case 113 : itype = BPFBF_EBPFLE_INSN_LDXBLE; goto extract_sfmt_ldxble; + case 114 : itype = BPFBF_EBPFLE_INSN_STBLE; goto extract_sfmt_stble; + case 115 : itype = BPFBF_EBPFLE_INSN_STXBLE; goto extract_sfmt_stxble; + case 116 : itype = BPFBF_EBPFLE_INSN_RSH32ILE; goto extract_sfmt_addile; + case 117 : itype = BPFBF_EBPFLE_INSN_JSGEILE; goto extract_sfmt_jeqile; + case 118 : itype = BPFBF_EBPFLE_INSN_JSGE32ILE; goto extract_sfmt_jeqile; + case 119 : itype = BPFBF_EBPFLE_INSN_RSHILE; goto extract_sfmt_addile; + case 121 : itype = BPFBF_EBPFLE_INSN_LDXDWLE; goto extract_sfmt_ldxdwle; + case 122 : itype = BPFBF_EBPFLE_INSN_STDWLE; goto extract_sfmt_stdwle; + case 123 : itype = BPFBF_EBPFLE_INSN_STXDWLE; goto extract_sfmt_stxdwle; + case 124 : itype = BPFBF_EBPFLE_INSN_RSH32RLE; goto extract_sfmt_addrle; + case 125 : itype = BPFBF_EBPFLE_INSN_JSGERLE; goto extract_sfmt_jeqrle; + case 126 : itype = BPFBF_EBPFLE_INSN_JSGE32RLE; goto extract_sfmt_jeqrle; + case 127 : itype = BPFBF_EBPFLE_INSN_RSHRLE; goto extract_sfmt_addrle; + case 132 : itype = BPFBF_EBPFLE_INSN_NEG32LE; goto extract_sfmt_negle; + case 133 : itype = BPFBF_EBPFLE_INSN_CALLLE; goto extract_sfmt_callle; + case 135 : itype = BPFBF_EBPFLE_INSN_NEGLE; goto extract_sfmt_negle; + case 140 : itype = BPFBF_EBPFLE_INSN_BRKPT; goto extract_sfmt_exit; + case 148 : itype = BPFBF_EBPFLE_INSN_MOD32ILE; goto extract_sfmt_addile; + case 149 : itype = BPFBF_EBPFLE_INSN_EXIT; goto extract_sfmt_exit; + case 151 : itype = BPFBF_EBPFLE_INSN_MODILE; goto extract_sfmt_addile; + case 156 : itype = BPFBF_EBPFLE_INSN_MOD32RLE; goto extract_sfmt_addrle; + case 159 : itype = BPFBF_EBPFLE_INSN_MODRLE; goto extract_sfmt_addrle; + case 164 : itype = BPFBF_EBPFLE_INSN_XOR32ILE; goto extract_sfmt_addile; + case 165 : itype = BPFBF_EBPFLE_INSN_JLTILE; goto extract_sfmt_jeqile; + case 166 : itype = BPFBF_EBPFLE_INSN_JLT32ILE; goto extract_sfmt_jeqile; + case 167 : itype = BPFBF_EBPFLE_INSN_XORILE; goto extract_sfmt_addile; + case 172 : itype = BPFBF_EBPFLE_INSN_XOR32RLE; goto extract_sfmt_addrle; + case 173 : itype = BPFBF_EBPFLE_INSN_JLTRLE; goto extract_sfmt_jeqrle; + case 174 : itype = BPFBF_EBPFLE_INSN_JLT32RLE; goto extract_sfmt_jeqrle; + case 175 : itype = BPFBF_EBPFLE_INSN_XORRLE; goto extract_sfmt_addrle; + case 180 : itype = BPFBF_EBPFLE_INSN_MOV32ILE; goto extract_sfmt_movile; + case 181 : itype = BPFBF_EBPFLE_INSN_JLEILE; goto extract_sfmt_jeqile; + case 182 : itype = BPFBF_EBPFLE_INSN_JLE32ILE; goto extract_sfmt_jeqile; + case 183 : itype = BPFBF_EBPFLE_INSN_MOVILE; goto extract_sfmt_movile; + case 188 : itype = BPFBF_EBPFLE_INSN_MOV32RLE; goto extract_sfmt_movrle; + case 189 : itype = BPFBF_EBPFLE_INSN_JLERLE; goto extract_sfmt_jeqrle; + case 190 : itype = BPFBF_EBPFLE_INSN_JLE32RLE; goto extract_sfmt_jeqrle; + case 191 : itype = BPFBF_EBPFLE_INSN_MOVRLE; goto extract_sfmt_movrle; + case 195 : itype = BPFBF_EBPFLE_INSN_XADDWLE; goto extract_sfmt_xaddwle; + case 196 : itype = BPFBF_EBPFLE_INSN_ARSH32ILE; goto extract_sfmt_addile; + case 197 : itype = BPFBF_EBPFLE_INSN_JSLTILE; goto extract_sfmt_jeqile; + case 198 : itype = BPFBF_EBPFLE_INSN_JSLT32ILE; goto extract_sfmt_jeqile; + case 199 : itype = BPFBF_EBPFLE_INSN_ARSHILE; goto extract_sfmt_addile; + case 204 : itype = BPFBF_EBPFLE_INSN_ARSH32RLE; goto extract_sfmt_addrle; + case 205 : itype = BPFBF_EBPFLE_INSN_JSLTRLE; goto extract_sfmt_jeqrle; + case 206 : itype = BPFBF_EBPFLE_INSN_JSLT32RLE; goto extract_sfmt_jeqrle; + case 207 : itype = BPFBF_EBPFLE_INSN_ARSHRLE; goto extract_sfmt_addrle; + case 212 : itype = BPFBF_EBPFLE_INSN_ENDLELE; goto extract_sfmt_endlele; + case 213 : itype = BPFBF_EBPFLE_INSN_JSLEILE; goto extract_sfmt_jeqile; + case 214 : itype = BPFBF_EBPFLE_INSN_JSLE32ILE; goto extract_sfmt_jeqile; + case 219 : itype = BPFBF_EBPFLE_INSN_XADDDWLE; goto extract_sfmt_xadddwle; + case 220 : itype = BPFBF_EBPFLE_INSN_ENDBELE; goto extract_sfmt_endlele; + case 221 : itype = BPFBF_EBPFLE_INSN_JSLERLE; goto extract_sfmt_jeqrle; + case 222 : itype = BPFBF_EBPFLE_INSN_JSLE32RLE; goto extract_sfmt_jeqrle; + default : itype = BPFBF_EBPFLE_INSN_X_INVALID; goto extract_sfmt_empty; + } + } + } + + /* The instruction has been decoded, now extract the fields. */ + + extract_sfmt_empty: + { + const IDESC *idesc = &bpfbf_ebpfle_insn_data[itype]; +#define FLD(f) abuf->fields.sfmt_empty.f + + + /* Record the fields for the semantic handler. */ + TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_empty", (char *) 0)); + +#undef FLD + return idesc; + } + + extract_sfmt_addile: + { + const IDESC *idesc = &bpfbf_ebpfle_insn_data[itype]; + CGEN_INSN_WORD insn = base_insn; +#define FLD(f) abuf->fields.sfmt_stble.f + INT f_imm32; + UINT f_dstle; + + f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); + f_dstle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); + + /* Record the fields for the semantic handler. */ + FLD (f_dstle) = f_dstle; + FLD (f_imm32) = f_imm32; + TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_addile", "f_dstle 0x%x", 'x', f_dstle, "f_imm32 0x%x", 'x', f_imm32, (char *) 0)); + +#undef FLD + return idesc; + } + + extract_sfmt_addrle: + { + const IDESC *idesc = &bpfbf_ebpfle_insn_data[itype]; + CGEN_INSN_WORD insn = base_insn; +#define FLD(f) abuf->fields.sfmt_ldxwle.f + UINT f_srcle; + UINT f_dstle; + + f_srcle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); + f_dstle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); + + /* Record the fields for the semantic handler. */ + FLD (f_dstle) = f_dstle; + FLD (f_srcle) = f_srcle; + TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_addrle", "f_dstle 0x%x", 'x', f_dstle, "f_srcle 0x%x", 'x', f_srcle, (char *) 0)); + +#undef FLD + return idesc; + } + + extract_sfmt_negle: + { + const IDESC *idesc = &bpfbf_ebpfle_insn_data[itype]; + CGEN_INSN_WORD insn = base_insn; +#define FLD(f) abuf->fields.sfmt_lddwle.f + UINT f_dstle; + + f_dstle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); + + /* Record the fields for the semantic handler. */ + FLD (f_dstle) = f_dstle; + TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_negle", "f_dstle 0x%x", 'x', f_dstle, (char *) 0)); + +#undef FLD + return idesc; + } + + extract_sfmt_movile: + { + const IDESC *idesc = &bpfbf_ebpfle_insn_data[itype]; + CGEN_INSN_WORD insn = base_insn; +#define FLD(f) abuf->fields.sfmt_stble.f + INT f_imm32; + UINT f_dstle; + + f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); + f_dstle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); + + /* Record the fields for the semantic handler. */ + FLD (f_imm32) = f_imm32; + FLD (f_dstle) = f_dstle; + TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_movile", "f_imm32 0x%x", 'x', f_imm32, "f_dstle 0x%x", 'x', f_dstle, (char *) 0)); + +#undef FLD + return idesc; + } + + extract_sfmt_movrle: + { + const IDESC *idesc = &bpfbf_ebpfle_insn_data[itype]; + CGEN_INSN_WORD insn = base_insn; +#define FLD(f) abuf->fields.sfmt_ldxwle.f + UINT f_srcle; + UINT f_dstle; + + f_srcle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); + f_dstle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); + + /* Record the fields for the semantic handler. */ + FLD (f_srcle) = f_srcle; + FLD (f_dstle) = f_dstle; + TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_movrle", "f_srcle 0x%x", 'x', f_srcle, "f_dstle 0x%x", 'x', f_dstle, (char *) 0)); + +#undef FLD + return idesc; + } + + extract_sfmt_endlele: + { + const IDESC *idesc = &bpfbf_ebpfle_insn_data[itype]; + CGEN_INSN_WORD insn = base_insn; +#define FLD(f) abuf->fields.sfmt_stble.f + INT f_imm32; + UINT f_dstle; + + f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); + f_dstle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); + + /* Record the fields for the semantic handler. */ + FLD (f_dstle) = f_dstle; + FLD (f_imm32) = f_imm32; + TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_endlele", "f_dstle 0x%x", 'x', f_dstle, "f_imm32 0x%x", 'x', f_imm32, (char *) 0)); + +#undef FLD + return idesc; + } + + extract_sfmt_lddwle: + { + const IDESC *idesc = &bpfbf_ebpfle_insn_data[itype]; + CGEN_INSN_WORD insn = base_insn; +#define FLD(f) abuf->fields.sfmt_lddwle.f + UINT f_imm64_c; + UINT f_imm64_b; + UINT f_imm64_a; + UINT f_dstle; + DI f_imm64; + /* Contents of trailing part of insn. */ + UINT word_1; + UINT word_2; + + word_1 = GETIMEMUSI (current_cpu, pc + 8); + word_2 = GETIMEMUSI (current_cpu, pc + 12); + f_imm64_c = (0|(EXTRACT_LSB0_UINT (word_2, 32, 31, 32) << 0)); + f_imm64_b = (0|(EXTRACT_LSB0_UINT (word_1, 32, 31, 32) << 0)); + f_imm64_a = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); + f_dstle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); +{ + f_imm64 = ((((((UDI) (UINT) (f_imm64_c))) << (32))) | (((UDI) (UINT) (f_imm64_a)))); +} + + /* Record the fields for the semantic handler. */ + FLD (f_imm64) = f_imm64; + FLD (f_dstle) = f_dstle; + TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_lddwle", "f_imm64 0x%x", 'x', f_imm64, "f_dstle 0x%x", 'x', f_dstle, (char *) 0)); + +#undef FLD + return idesc; + } + + extract_sfmt_ldabsw: + { + const IDESC *idesc = &bpfbf_ebpfle_insn_data[itype]; + CGEN_INSN_WORD insn = base_insn; +#define FLD(f) abuf->fields.sfmt_ldindwle.f + INT f_imm32; + + f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); + + /* Record the fields for the semantic handler. */ + FLD (f_imm32) = f_imm32; + TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldabsw", "f_imm32 0x%x", 'x', f_imm32, (char *) 0)); + +#undef FLD + return idesc; + } + + extract_sfmt_ldabsh: + { + const IDESC *idesc = &bpfbf_ebpfle_insn_data[itype]; + CGEN_INSN_WORD insn = base_insn; +#define FLD(f) abuf->fields.sfmt_ldindwle.f + INT f_imm32; + + f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); + + /* Record the fields for the semantic handler. */ + FLD (f_imm32) = f_imm32; + TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldabsh", "f_imm32 0x%x", 'x', f_imm32, (char *) 0)); + +#undef FLD + return idesc; + } + + extract_sfmt_ldabsb: + { + const IDESC *idesc = &bpfbf_ebpfle_insn_data[itype]; + CGEN_INSN_WORD insn = base_insn; +#define FLD(f) abuf->fields.sfmt_ldindwle.f + INT f_imm32; + + f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); + + /* Record the fields for the semantic handler. */ + FLD (f_imm32) = f_imm32; + TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldabsb", "f_imm32 0x%x", 'x', f_imm32, (char *) 0)); + +#undef FLD + return idesc; + } + + extract_sfmt_ldabsdw: + { + const IDESC *idesc = &bpfbf_ebpfle_insn_data[itype]; + CGEN_INSN_WORD insn = base_insn; +#define FLD(f) abuf->fields.sfmt_ldindwle.f + INT f_imm32; + + f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); + + /* Record the fields for the semantic handler. */ + FLD (f_imm32) = f_imm32; + TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldabsdw", "f_imm32 0x%x", 'x', f_imm32, (char *) 0)); + +#undef FLD + return idesc; + } + + extract_sfmt_ldindwle: + { + const IDESC *idesc = &bpfbf_ebpfle_insn_data[itype]; + CGEN_INSN_WORD insn = base_insn; +#define FLD(f) abuf->fields.sfmt_ldindwle.f + INT f_imm32; + UINT f_srcle; + + f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); + f_srcle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); + + /* Record the fields for the semantic handler. */ + FLD (f_imm32) = f_imm32; + FLD (f_srcle) = f_srcle; + TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldindwle", "f_imm32 0x%x", 'x', f_imm32, "f_srcle 0x%x", 'x', f_srcle, (char *) 0)); + +#undef FLD + return idesc; + } + + extract_sfmt_ldindhle: + { + const IDESC *idesc = &bpfbf_ebpfle_insn_data[itype]; + CGEN_INSN_WORD insn = base_insn; +#define FLD(f) abuf->fields.sfmt_ldindwle.f + INT f_imm32; + UINT f_srcle; + + f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); + f_srcle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); + + /* Record the fields for the semantic handler. */ + FLD (f_imm32) = f_imm32; + FLD (f_srcle) = f_srcle; + TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldindhle", "f_imm32 0x%x", 'x', f_imm32, "f_srcle 0x%x", 'x', f_srcle, (char *) 0)); + +#undef FLD + return idesc; + } + + extract_sfmt_ldindble: + { + const IDESC *idesc = &bpfbf_ebpfle_insn_data[itype]; + CGEN_INSN_WORD insn = base_insn; +#define FLD(f) abuf->fields.sfmt_ldindwle.f + INT f_imm32; + UINT f_srcle; + + f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); + f_srcle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); + + /* Record the fields for the semantic handler. */ + FLD (f_imm32) = f_imm32; + FLD (f_srcle) = f_srcle; + TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldindble", "f_imm32 0x%x", 'x', f_imm32, "f_srcle 0x%x", 'x', f_srcle, (char *) 0)); + +#undef FLD + return idesc; + } + + extract_sfmt_ldinddwle: + { + const IDESC *idesc = &bpfbf_ebpfle_insn_data[itype]; + CGEN_INSN_WORD insn = base_insn; +#define FLD(f) abuf->fields.sfmt_ldindwle.f + INT f_imm32; + UINT f_srcle; + + f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); + f_srcle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); + + /* Record the fields for the semantic handler. */ + FLD (f_imm32) = f_imm32; + FLD (f_srcle) = f_srcle; + TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldinddwle", "f_imm32 0x%x", 'x', f_imm32, "f_srcle 0x%x", 'x', f_srcle, (char *) 0)); + +#undef FLD + return idesc; + } + + extract_sfmt_ldxwle: + { + const IDESC *idesc = &bpfbf_ebpfle_insn_data[itype]; + CGEN_INSN_WORD insn = base_insn; +#define FLD(f) abuf->fields.sfmt_ldxwle.f + HI f_offset16; + UINT f_srcle; + UINT f_dstle; + + f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); + f_srcle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); + f_dstle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); + + /* Record the fields for the semantic handler. */ + FLD (f_offset16) = f_offset16; + FLD (f_srcle) = f_srcle; + FLD (f_dstle) = f_dstle; + TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldxwle", "f_offset16 0x%x", 'x', f_offset16, "f_srcle 0x%x", 'x', f_srcle, "f_dstle 0x%x", 'x', f_dstle, (char *) 0)); + +#undef FLD + return idesc; + } + + extract_sfmt_ldxhle: + { + const IDESC *idesc = &bpfbf_ebpfle_insn_data[itype]; + CGEN_INSN_WORD insn = base_insn; +#define FLD(f) abuf->fields.sfmt_ldxwle.f + HI f_offset16; + UINT f_srcle; + UINT f_dstle; + + f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); + f_srcle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); + f_dstle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); + + /* Record the fields for the semantic handler. */ + FLD (f_offset16) = f_offset16; + FLD (f_srcle) = f_srcle; + FLD (f_dstle) = f_dstle; + TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldxhle", "f_offset16 0x%x", 'x', f_offset16, "f_srcle 0x%x", 'x', f_srcle, "f_dstle 0x%x", 'x', f_dstle, (char *) 0)); + +#undef FLD + return idesc; + } + + extract_sfmt_ldxble: + { + const IDESC *idesc = &bpfbf_ebpfle_insn_data[itype]; + CGEN_INSN_WORD insn = base_insn; +#define FLD(f) abuf->fields.sfmt_ldxwle.f + HI f_offset16; + UINT f_srcle; + UINT f_dstle; + + f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); + f_srcle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); + f_dstle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); + + /* Record the fields for the semantic handler. */ + FLD (f_offset16) = f_offset16; + FLD (f_srcle) = f_srcle; + FLD (f_dstle) = f_dstle; + TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldxble", "f_offset16 0x%x", 'x', f_offset16, "f_srcle 0x%x", 'x', f_srcle, "f_dstle 0x%x", 'x', f_dstle, (char *) 0)); + +#undef FLD + return idesc; + } + + extract_sfmt_ldxdwle: + { + const IDESC *idesc = &bpfbf_ebpfle_insn_data[itype]; + CGEN_INSN_WORD insn = base_insn; +#define FLD(f) abuf->fields.sfmt_ldxwle.f + HI f_offset16; + UINT f_srcle; + UINT f_dstle; + + f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); + f_srcle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); + f_dstle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); + + /* Record the fields for the semantic handler. */ + FLD (f_offset16) = f_offset16; + FLD (f_srcle) = f_srcle; + FLD (f_dstle) = f_dstle; + TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ldxdwle", "f_offset16 0x%x", 'x', f_offset16, "f_srcle 0x%x", 'x', f_srcle, "f_dstle 0x%x", 'x', f_dstle, (char *) 0)); + +#undef FLD + return idesc; + } + + extract_sfmt_stxwle: + { + const IDESC *idesc = &bpfbf_ebpfle_insn_data[itype]; + CGEN_INSN_WORD insn = base_insn; +#define FLD(f) abuf->fields.sfmt_ldxwle.f + HI f_offset16; + UINT f_srcle; + UINT f_dstle; + + f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); + f_srcle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); + f_dstle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); + + /* Record the fields for the semantic handler. */ + FLD (f_dstle) = f_dstle; + FLD (f_offset16) = f_offset16; + FLD (f_srcle) = f_srcle; + TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_stxwle", "f_dstle 0x%x", 'x', f_dstle, "f_offset16 0x%x", 'x', f_offset16, "f_srcle 0x%x", 'x', f_srcle, (char *) 0)); + +#undef FLD + return idesc; + } + + extract_sfmt_stxhle: + { + const IDESC *idesc = &bpfbf_ebpfle_insn_data[itype]; + CGEN_INSN_WORD insn = base_insn; +#define FLD(f) abuf->fields.sfmt_ldxwle.f + HI f_offset16; + UINT f_srcle; + UINT f_dstle; + + f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); + f_srcle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); + f_dstle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); + + /* Record the fields for the semantic handler. */ + FLD (f_dstle) = f_dstle; + FLD (f_offset16) = f_offset16; + FLD (f_srcle) = f_srcle; + TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_stxhle", "f_dstle 0x%x", 'x', f_dstle, "f_offset16 0x%x", 'x', f_offset16, "f_srcle 0x%x", 'x', f_srcle, (char *) 0)); + +#undef FLD + return idesc; + } + + extract_sfmt_stxble: + { + const IDESC *idesc = &bpfbf_ebpfle_insn_data[itype]; + CGEN_INSN_WORD insn = base_insn; +#define FLD(f) abuf->fields.sfmt_ldxwle.f + HI f_offset16; + UINT f_srcle; + UINT f_dstle; + + f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); + f_srcle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); + f_dstle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); + + /* Record the fields for the semantic handler. */ + FLD (f_dstle) = f_dstle; + FLD (f_offset16) = f_offset16; + FLD (f_srcle) = f_srcle; + TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_stxble", "f_dstle 0x%x", 'x', f_dstle, "f_offset16 0x%x", 'x', f_offset16, "f_srcle 0x%x", 'x', f_srcle, (char *) 0)); + +#undef FLD + return idesc; + } + + extract_sfmt_stxdwle: + { + const IDESC *idesc = &bpfbf_ebpfle_insn_data[itype]; + CGEN_INSN_WORD insn = base_insn; +#define FLD(f) abuf->fields.sfmt_ldxwle.f + HI f_offset16; + UINT f_srcle; + UINT f_dstle; + + f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); + f_srcle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); + f_dstle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); + + /* Record the fields for the semantic handler. */ + FLD (f_dstle) = f_dstle; + FLD (f_offset16) = f_offset16; + FLD (f_srcle) = f_srcle; + TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_stxdwle", "f_dstle 0x%x", 'x', f_dstle, "f_offset16 0x%x", 'x', f_offset16, "f_srcle 0x%x", 'x', f_srcle, (char *) 0)); + +#undef FLD + return idesc; + } + + extract_sfmt_stble: + { + const IDESC *idesc = &bpfbf_ebpfle_insn_data[itype]; + CGEN_INSN_WORD insn = base_insn; +#define FLD(f) abuf->fields.sfmt_stble.f + INT f_imm32; + HI f_offset16; + UINT f_dstle; + + f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); + f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); + f_dstle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); + + /* Record the fields for the semantic handler. */ + FLD (f_dstle) = f_dstle; + FLD (f_imm32) = f_imm32; + FLD (f_offset16) = f_offset16; + TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_stble", "f_dstle 0x%x", 'x', f_dstle, "f_imm32 0x%x", 'x', f_imm32, "f_offset16 0x%x", 'x', f_offset16, (char *) 0)); + +#undef FLD + return idesc; + } + + extract_sfmt_sthle: + { + const IDESC *idesc = &bpfbf_ebpfle_insn_data[itype]; + CGEN_INSN_WORD insn = base_insn; +#define FLD(f) abuf->fields.sfmt_stble.f + INT f_imm32; + HI f_offset16; + UINT f_dstle; + + f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); + f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); + f_dstle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); + + /* Record the fields for the semantic handler. */ + FLD (f_dstle) = f_dstle; + FLD (f_imm32) = f_imm32; + FLD (f_offset16) = f_offset16; + TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_sthle", "f_dstle 0x%x", 'x', f_dstle, "f_imm32 0x%x", 'x', f_imm32, "f_offset16 0x%x", 'x', f_offset16, (char *) 0)); + +#undef FLD + return idesc; + } + + extract_sfmt_stwle: + { + const IDESC *idesc = &bpfbf_ebpfle_insn_data[itype]; + CGEN_INSN_WORD insn = base_insn; +#define FLD(f) abuf->fields.sfmt_stble.f + INT f_imm32; + HI f_offset16; + UINT f_dstle; + + f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); + f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); + f_dstle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); + + /* Record the fields for the semantic handler. */ + FLD (f_dstle) = f_dstle; + FLD (f_imm32) = f_imm32; + FLD (f_offset16) = f_offset16; + TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_stwle", "f_dstle 0x%x", 'x', f_dstle, "f_imm32 0x%x", 'x', f_imm32, "f_offset16 0x%x", 'x', f_offset16, (char *) 0)); + +#undef FLD + return idesc; + } + + extract_sfmt_stdwle: + { + const IDESC *idesc = &bpfbf_ebpfle_insn_data[itype]; + CGEN_INSN_WORD insn = base_insn; +#define FLD(f) abuf->fields.sfmt_stble.f + INT f_imm32; + HI f_offset16; + UINT f_dstle; + + f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); + f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); + f_dstle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); + + /* Record the fields for the semantic handler. */ + FLD (f_dstle) = f_dstle; + FLD (f_imm32) = f_imm32; + FLD (f_offset16) = f_offset16; + TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_stdwle", "f_dstle 0x%x", 'x', f_dstle, "f_imm32 0x%x", 'x', f_imm32, "f_offset16 0x%x", 'x', f_offset16, (char *) 0)); + +#undef FLD + return idesc; + } + + extract_sfmt_jeqile: + { + const IDESC *idesc = &bpfbf_ebpfle_insn_data[itype]; + CGEN_INSN_WORD insn = base_insn; +#define FLD(f) abuf->fields.sfmt_stble.f + INT f_imm32; + HI f_offset16; + UINT f_dstle; + + f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); + f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); + f_dstle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); + + /* Record the fields for the semantic handler. */ + FLD (f_offset16) = f_offset16; + FLD (f_dstle) = f_dstle; + FLD (f_imm32) = f_imm32; + TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_jeqile", "f_offset16 0x%x", 'x', f_offset16, "f_dstle 0x%x", 'x', f_dstle, "f_imm32 0x%x", 'x', f_imm32, (char *) 0)); + +#if WITH_PROFILE_MODEL_P + /* Record the fields for profiling. */ + if (PROFILE_MODEL_P (current_cpu)) + { + } +#endif +#undef FLD + return idesc; + } + + extract_sfmt_jeqrle: + { + const IDESC *idesc = &bpfbf_ebpfle_insn_data[itype]; + CGEN_INSN_WORD insn = base_insn; +#define FLD(f) abuf->fields.sfmt_ldxwle.f + HI f_offset16; + UINT f_srcle; + UINT f_dstle; + + f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); + f_srcle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); + f_dstle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); + + /* Record the fields for the semantic handler. */ + FLD (f_offset16) = f_offset16; + FLD (f_dstle) = f_dstle; + FLD (f_srcle) = f_srcle; + TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_jeqrle", "f_offset16 0x%x", 'x', f_offset16, "f_dstle 0x%x", 'x', f_dstle, "f_srcle 0x%x", 'x', f_srcle, (char *) 0)); + +#if WITH_PROFILE_MODEL_P + /* Record the fields for profiling. */ + if (PROFILE_MODEL_P (current_cpu)) + { + } +#endif +#undef FLD + return idesc; + } + + extract_sfmt_callle: + { + const IDESC *idesc = &bpfbf_ebpfle_insn_data[itype]; + CGEN_INSN_WORD insn = base_insn; +#define FLD(f) abuf->fields.sfmt_ldindwle.f + INT f_imm32; + UINT f_srcle; + + f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); + f_srcle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); + + /* Record the fields for the semantic handler. */ + FLD (f_imm32) = f_imm32; + FLD (f_srcle) = f_srcle; + TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_callle", "f_imm32 0x%x", 'x', f_imm32, "f_srcle 0x%x", 'x', f_srcle, (char *) 0)); + +#undef FLD + return idesc; + } + + extract_sfmt_ja: + { + const IDESC *idesc = &bpfbf_ebpfle_insn_data[itype]; + CGEN_INSN_WORD insn = base_insn; +#define FLD(f) abuf->fields.sfmt_stble.f + HI f_offset16; + + f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); + + /* Record the fields for the semantic handler. */ + FLD (f_offset16) = f_offset16; + TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ja", "f_offset16 0x%x", 'x', f_offset16, (char *) 0)); + +#if WITH_PROFILE_MODEL_P + /* Record the fields for profiling. */ + if (PROFILE_MODEL_P (current_cpu)) + { + } +#endif +#undef FLD + return idesc; + } + + extract_sfmt_exit: + { + const IDESC *idesc = &bpfbf_ebpfle_insn_data[itype]; +#define FLD(f) abuf->fields.sfmt_empty.f + + + /* Record the fields for the semantic handler. */ + TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_exit", (char *) 0)); + +#undef FLD + return idesc; + } + + extract_sfmt_xadddwle: + { + const IDESC *idesc = &bpfbf_ebpfle_insn_data[itype]; + CGEN_INSN_WORD insn = base_insn; +#define FLD(f) abuf->fields.sfmt_ldxwle.f + HI f_offset16; + UINT f_srcle; + UINT f_dstle; + + f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); + f_srcle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); + f_dstle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); + + /* Record the fields for the semantic handler. */ + FLD (f_dstle) = f_dstle; + FLD (f_offset16) = f_offset16; + FLD (f_srcle) = f_srcle; + TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_xadddwle", "f_dstle 0x%x", 'x', f_dstle, "f_offset16 0x%x", 'x', f_offset16, "f_srcle 0x%x", 'x', f_srcle, (char *) 0)); + +#undef FLD + return idesc; + } + + extract_sfmt_xaddwle: + { + const IDESC *idesc = &bpfbf_ebpfle_insn_data[itype]; + CGEN_INSN_WORD insn = base_insn; +#define FLD(f) abuf->fields.sfmt_ldxwle.f + HI f_offset16; + UINT f_srcle; + UINT f_dstle; + + f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); + f_srcle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); + f_dstle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); + + /* Record the fields for the semantic handler. */ + FLD (f_dstle) = f_dstle; + FLD (f_offset16) = f_offset16; + FLD (f_srcle) = f_srcle; + TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_xaddwle", "f_dstle 0x%x", 'x', f_dstle, "f_offset16 0x%x", 'x', f_offset16, "f_srcle 0x%x", 'x', f_srcle, (char *) 0)); + +#undef FLD + return idesc; + } + +} diff -Nru gdb-9.1/sim/bpf/decode-le.h gdb-10.2/sim/bpf/decode-le.h --- gdb-9.1/sim/bpf/decode-le.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/sim/bpf/decode-le.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,94 @@ +/* Decode header for bpfbf_ebpfle. + +THIS FILE IS MACHINE GENERATED WITH CGEN. + +Copyright (C) 1996-2021 Free Software Foundation, Inc. + +This file is part of the GNU simulators. + + This file is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, 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. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. + +*/ + +#ifndef BPFBF_EBPFLE_DECODE_H +#define BPFBF_EBPFLE_DECODE_H + +extern const IDESC *bpfbf_ebpfle_decode (SIM_CPU *, IADDR, + CGEN_INSN_WORD, + ARGBUF *); +extern void bpfbf_ebpfle_init_idesc_table (SIM_CPU *); +extern void bpfbf_ebpfle_sem_init_idesc_table (SIM_CPU *); +extern void bpfbf_ebpfle_semf_init_idesc_table (SIM_CPU *); + +/* Enum declaration for instructions in cpu family bpfbf. */ +typedef enum bpfbf_ebpfle_insn_type { + BPFBF_EBPFLE_INSN_X_INVALID, BPFBF_EBPFLE_INSN_X_AFTER, BPFBF_EBPFLE_INSN_X_BEFORE, BPFBF_EBPFLE_INSN_X_CTI_CHAIN + , BPFBF_EBPFLE_INSN_X_CHAIN, BPFBF_EBPFLE_INSN_X_BEGIN, BPFBF_EBPFLE_INSN_ADDILE, BPFBF_EBPFLE_INSN_ADDRLE + , BPFBF_EBPFLE_INSN_ADD32ILE, BPFBF_EBPFLE_INSN_ADD32RLE, BPFBF_EBPFLE_INSN_SUBILE, BPFBF_EBPFLE_INSN_SUBRLE + , BPFBF_EBPFLE_INSN_SUB32ILE, BPFBF_EBPFLE_INSN_SUB32RLE, BPFBF_EBPFLE_INSN_MULILE, BPFBF_EBPFLE_INSN_MULRLE + , BPFBF_EBPFLE_INSN_MUL32ILE, BPFBF_EBPFLE_INSN_MUL32RLE, BPFBF_EBPFLE_INSN_DIVILE, BPFBF_EBPFLE_INSN_DIVRLE + , BPFBF_EBPFLE_INSN_DIV32ILE, BPFBF_EBPFLE_INSN_DIV32RLE, BPFBF_EBPFLE_INSN_ORILE, BPFBF_EBPFLE_INSN_ORRLE + , BPFBF_EBPFLE_INSN_OR32ILE, BPFBF_EBPFLE_INSN_OR32RLE, BPFBF_EBPFLE_INSN_ANDILE, BPFBF_EBPFLE_INSN_ANDRLE + , BPFBF_EBPFLE_INSN_AND32ILE, BPFBF_EBPFLE_INSN_AND32RLE, BPFBF_EBPFLE_INSN_LSHILE, BPFBF_EBPFLE_INSN_LSHRLE + , BPFBF_EBPFLE_INSN_LSH32ILE, BPFBF_EBPFLE_INSN_LSH32RLE, BPFBF_EBPFLE_INSN_RSHILE, BPFBF_EBPFLE_INSN_RSHRLE + , BPFBF_EBPFLE_INSN_RSH32ILE, BPFBF_EBPFLE_INSN_RSH32RLE, BPFBF_EBPFLE_INSN_MODILE, BPFBF_EBPFLE_INSN_MODRLE + , BPFBF_EBPFLE_INSN_MOD32ILE, BPFBF_EBPFLE_INSN_MOD32RLE, BPFBF_EBPFLE_INSN_XORILE, BPFBF_EBPFLE_INSN_XORRLE + , BPFBF_EBPFLE_INSN_XOR32ILE, BPFBF_EBPFLE_INSN_XOR32RLE, BPFBF_EBPFLE_INSN_ARSHILE, BPFBF_EBPFLE_INSN_ARSHRLE + , BPFBF_EBPFLE_INSN_ARSH32ILE, BPFBF_EBPFLE_INSN_ARSH32RLE, BPFBF_EBPFLE_INSN_NEGLE, BPFBF_EBPFLE_INSN_NEG32LE + , BPFBF_EBPFLE_INSN_MOVILE, BPFBF_EBPFLE_INSN_MOVRLE, BPFBF_EBPFLE_INSN_MOV32ILE, BPFBF_EBPFLE_INSN_MOV32RLE + , BPFBF_EBPFLE_INSN_ENDLELE, BPFBF_EBPFLE_INSN_ENDBELE, BPFBF_EBPFLE_INSN_LDDWLE, BPFBF_EBPFLE_INSN_LDABSW + , BPFBF_EBPFLE_INSN_LDABSH, BPFBF_EBPFLE_INSN_LDABSB, BPFBF_EBPFLE_INSN_LDABSDW, BPFBF_EBPFLE_INSN_LDINDWLE + , BPFBF_EBPFLE_INSN_LDINDHLE, BPFBF_EBPFLE_INSN_LDINDBLE, BPFBF_EBPFLE_INSN_LDINDDWLE, BPFBF_EBPFLE_INSN_LDXWLE + , BPFBF_EBPFLE_INSN_LDXHLE, BPFBF_EBPFLE_INSN_LDXBLE, BPFBF_EBPFLE_INSN_LDXDWLE, BPFBF_EBPFLE_INSN_STXWLE + , BPFBF_EBPFLE_INSN_STXHLE, BPFBF_EBPFLE_INSN_STXBLE, BPFBF_EBPFLE_INSN_STXDWLE, BPFBF_EBPFLE_INSN_STBLE + , BPFBF_EBPFLE_INSN_STHLE, BPFBF_EBPFLE_INSN_STWLE, BPFBF_EBPFLE_INSN_STDWLE, BPFBF_EBPFLE_INSN_JEQILE + , BPFBF_EBPFLE_INSN_JEQRLE, BPFBF_EBPFLE_INSN_JEQ32ILE, BPFBF_EBPFLE_INSN_JEQ32RLE, BPFBF_EBPFLE_INSN_JGTILE + , BPFBF_EBPFLE_INSN_JGTRLE, BPFBF_EBPFLE_INSN_JGT32ILE, BPFBF_EBPFLE_INSN_JGT32RLE, BPFBF_EBPFLE_INSN_JGEILE + , BPFBF_EBPFLE_INSN_JGERLE, BPFBF_EBPFLE_INSN_JGE32ILE, BPFBF_EBPFLE_INSN_JGE32RLE, BPFBF_EBPFLE_INSN_JLTILE + , BPFBF_EBPFLE_INSN_JLTRLE, BPFBF_EBPFLE_INSN_JLT32ILE, BPFBF_EBPFLE_INSN_JLT32RLE, BPFBF_EBPFLE_INSN_JLEILE + , BPFBF_EBPFLE_INSN_JLERLE, BPFBF_EBPFLE_INSN_JLE32ILE, BPFBF_EBPFLE_INSN_JLE32RLE, BPFBF_EBPFLE_INSN_JSETILE + , BPFBF_EBPFLE_INSN_JSETRLE, BPFBF_EBPFLE_INSN_JSET32ILE, BPFBF_EBPFLE_INSN_JSET32RLE, BPFBF_EBPFLE_INSN_JNEILE + , BPFBF_EBPFLE_INSN_JNERLE, BPFBF_EBPFLE_INSN_JNE32ILE, BPFBF_EBPFLE_INSN_JNE32RLE, BPFBF_EBPFLE_INSN_JSGTILE + , BPFBF_EBPFLE_INSN_JSGTRLE, BPFBF_EBPFLE_INSN_JSGT32ILE, BPFBF_EBPFLE_INSN_JSGT32RLE, BPFBF_EBPFLE_INSN_JSGEILE + , BPFBF_EBPFLE_INSN_JSGERLE, BPFBF_EBPFLE_INSN_JSGE32ILE, BPFBF_EBPFLE_INSN_JSGE32RLE, BPFBF_EBPFLE_INSN_JSLTILE + , BPFBF_EBPFLE_INSN_JSLTRLE, BPFBF_EBPFLE_INSN_JSLT32ILE, BPFBF_EBPFLE_INSN_JSLT32RLE, BPFBF_EBPFLE_INSN_JSLEILE + , BPFBF_EBPFLE_INSN_JSLERLE, BPFBF_EBPFLE_INSN_JSLE32ILE, BPFBF_EBPFLE_INSN_JSLE32RLE, BPFBF_EBPFLE_INSN_CALLLE + , BPFBF_EBPFLE_INSN_JA, BPFBF_EBPFLE_INSN_EXIT, BPFBF_EBPFLE_INSN_XADDDWLE, BPFBF_EBPFLE_INSN_XADDWLE + , BPFBF_EBPFLE_INSN_BRKPT, BPFBF_EBPFLE_INSN__MAX +} BPFBF_EBPFLE_INSN_TYPE; + +/* Enum declaration for semantic formats in cpu family bpfbf. */ +typedef enum bpfbf_ebpfle_sfmt_type { + BPFBF_EBPFLE_SFMT_EMPTY, BPFBF_EBPFLE_SFMT_ADDILE, BPFBF_EBPFLE_SFMT_ADDRLE, BPFBF_EBPFLE_SFMT_NEGLE + , BPFBF_EBPFLE_SFMT_MOVILE, BPFBF_EBPFLE_SFMT_MOVRLE, BPFBF_EBPFLE_SFMT_ENDLELE, BPFBF_EBPFLE_SFMT_LDDWLE + , BPFBF_EBPFLE_SFMT_LDABSW, BPFBF_EBPFLE_SFMT_LDABSH, BPFBF_EBPFLE_SFMT_LDABSB, BPFBF_EBPFLE_SFMT_LDABSDW + , BPFBF_EBPFLE_SFMT_LDINDWLE, BPFBF_EBPFLE_SFMT_LDINDHLE, BPFBF_EBPFLE_SFMT_LDINDBLE, BPFBF_EBPFLE_SFMT_LDINDDWLE + , BPFBF_EBPFLE_SFMT_LDXWLE, BPFBF_EBPFLE_SFMT_LDXHLE, BPFBF_EBPFLE_SFMT_LDXBLE, BPFBF_EBPFLE_SFMT_LDXDWLE + , BPFBF_EBPFLE_SFMT_STXWLE, BPFBF_EBPFLE_SFMT_STXHLE, BPFBF_EBPFLE_SFMT_STXBLE, BPFBF_EBPFLE_SFMT_STXDWLE + , BPFBF_EBPFLE_SFMT_STBLE, BPFBF_EBPFLE_SFMT_STHLE, BPFBF_EBPFLE_SFMT_STWLE, BPFBF_EBPFLE_SFMT_STDWLE + , BPFBF_EBPFLE_SFMT_JEQILE, BPFBF_EBPFLE_SFMT_JEQRLE, BPFBF_EBPFLE_SFMT_CALLLE, BPFBF_EBPFLE_SFMT_JA + , BPFBF_EBPFLE_SFMT_EXIT, BPFBF_EBPFLE_SFMT_XADDDWLE, BPFBF_EBPFLE_SFMT_XADDWLE +} BPFBF_EBPFLE_SFMT_TYPE; + +/* Function unit handlers (user written). */ + +extern int bpfbf_model_bpf_def_u_exec (SIM_CPU *, const IDESC *, int /*unit_num*/, int /*referenced*/); + +/* Profiling before/after handlers (user written) */ + +extern void bpfbf_model_insn_before (SIM_CPU *, int /*first_p*/); +extern void bpfbf_model_insn_after (SIM_CPU *, int /*last_p*/, int /*cycles*/); + +#endif /* BPFBF_EBPFLE_DECODE_H */ diff -Nru gdb-9.1/sim/bpf/defs-be.h gdb-10.2/sim/bpf/defs-be.h --- gdb-9.1/sim/bpf/defs-be.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/sim/bpf/defs-be.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,383 @@ +/* ISA definitions header for ebpfbe. + +THIS FILE IS MACHINE GENERATED WITH CGEN. + +Copyright (C) 1996-2021 Free Software Foundation, Inc. + +This file is part of the GNU simulators. + + This file is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, 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. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. + +*/ + +#ifndef DEFS_BPFBF_EBPFBE_H +#define DEFS_BPFBF_EBPFBE_H + +/* Instruction argument buffer. */ + +union sem_fields { + struct { /* no operands */ + int empty; + } sfmt_empty; + struct { /* */ + INT f_imm32; + UINT f_srcbe; + } sfmt_ldindwbe; + struct { /* */ + DI f_imm64; + UINT f_dstbe; + } sfmt_lddwbe; + struct { /* */ + INT f_imm32; + UINT f_dstbe; + HI f_offset16; + } sfmt_stbbe; + struct { /* */ + UINT f_dstbe; + UINT f_srcbe; + HI f_offset16; + } sfmt_ldxwbe; +#if WITH_SCACHE_PBB + /* Writeback handler. */ + struct { + /* Pointer to argbuf entry for insn whose results need writing back. */ + const struct argbuf *abuf; + } write; + /* x-before handler */ + struct { + /*const SCACHE *insns[MAX_PARALLEL_INSNS];*/ + int first_p; + } before; + /* x-after handler */ + struct { + int empty; + } after; + /* This entry is used to terminate each pbb. */ + struct { + /* Number of insns in pbb. */ + int insn_count; + /* Next pbb to execute. */ + SCACHE *next; + SCACHE *branch_target; + } chain; +#endif +}; + +/* The ARGBUF struct. */ +struct argbuf { + /* These are the baseclass definitions. */ + IADDR addr; + const IDESC *idesc; + char trace_p; + char profile_p; + /* ??? Temporary hack for skip insns. */ + char skip_count; + char unused; + /* cpu specific data follows */ + union sem semantic; + int written; + union sem_fields fields; +}; + +/* A cached insn. + + ??? SCACHE used to contain more than just argbuf. We could delete the + type entirely and always just use ARGBUF, but for future concerns and as + a level of abstraction it is left in. */ + +struct scache { + struct argbuf argbuf; +}; + +/* Macros to simplify extraction, reading and semantic code. + These define and assign the local vars that contain the insn's fields. */ + +#define EXTRACT_IFMT_EMPTY_VARS \ + unsigned int length; +#define EXTRACT_IFMT_EMPTY_CODE \ + length = 0; \ + +#define EXTRACT_IFMT_ADDIBE_VARS \ + INT f_imm32; \ + HI f_offset16; \ + UINT f_dstbe; \ + UINT f_op_code; \ + UINT f_srcbe; \ + UINT f_op_src; \ + UINT f_op_class; \ + unsigned int length; +#define EXTRACT_IFMT_ADDIBE_CODE \ + length = 8; \ + f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); \ + f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); \ + f_dstbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); \ + f_op_code = EXTRACT_LSB0_LGUINT (insn, 64, 7, 4); \ + f_srcbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); \ + f_op_src = EXTRACT_LSB0_LGUINT (insn, 64, 3, 1); \ + f_op_class = EXTRACT_LSB0_LGUINT (insn, 64, 2, 3); \ + +#define EXTRACT_IFMT_ADDRBE_VARS \ + INT f_imm32; \ + HI f_offset16; \ + UINT f_dstbe; \ + UINT f_op_code; \ + UINT f_srcbe; \ + UINT f_op_src; \ + UINT f_op_class; \ + unsigned int length; +#define EXTRACT_IFMT_ADDRBE_CODE \ + length = 8; \ + f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); \ + f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); \ + f_dstbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); \ + f_op_code = EXTRACT_LSB0_LGUINT (insn, 64, 7, 4); \ + f_srcbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); \ + f_op_src = EXTRACT_LSB0_LGUINT (insn, 64, 3, 1); \ + f_op_class = EXTRACT_LSB0_LGUINT (insn, 64, 2, 3); \ + +#define EXTRACT_IFMT_NEGBE_VARS \ + INT f_imm32; \ + HI f_offset16; \ + UINT f_dstbe; \ + UINT f_op_code; \ + UINT f_srcbe; \ + UINT f_op_src; \ + UINT f_op_class; \ + unsigned int length; +#define EXTRACT_IFMT_NEGBE_CODE \ + length = 8; \ + f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); \ + f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); \ + f_dstbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); \ + f_op_code = EXTRACT_LSB0_LGUINT (insn, 64, 7, 4); \ + f_srcbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); \ + f_op_src = EXTRACT_LSB0_LGUINT (insn, 64, 3, 1); \ + f_op_class = EXTRACT_LSB0_LGUINT (insn, 64, 2, 3); \ + +#define EXTRACT_IFMT_ENDLEBE_VARS \ + INT f_imm32; \ + HI f_offset16; \ + UINT f_dstbe; \ + UINT f_op_code; \ + UINT f_srcbe; \ + UINT f_op_src; \ + UINT f_op_class; \ + unsigned int length; +#define EXTRACT_IFMT_ENDLEBE_CODE \ + length = 8; \ + f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); \ + f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); \ + f_dstbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); \ + f_op_code = EXTRACT_LSB0_LGUINT (insn, 64, 7, 4); \ + f_srcbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); \ + f_op_src = EXTRACT_LSB0_LGUINT (insn, 64, 3, 1); \ + f_op_class = EXTRACT_LSB0_LGUINT (insn, 64, 2, 3); \ + +#define EXTRACT_IFMT_LDDWBE_VARS \ + UINT f_imm64_a; \ + UINT f_imm64_b; \ + UINT f_imm64_c; \ + DI f_imm64; \ + HI f_offset16; \ + UINT f_dstbe; \ + UINT f_op_mode; \ + UINT f_op_size; \ + UINT f_srcbe; \ + UINT f_op_class; \ + /* Contents of trailing part of insn. */ \ + UINT word_1; \ + UINT word_2; \ + unsigned int length; +#define EXTRACT_IFMT_LDDWBE_CODE \ + length = 16; \ + word_1 = GETIMEMUSI (current_cpu, pc + 8); \ + word_2 = GETIMEMUSI (current_cpu, pc + 12); \ + f_imm64_a = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); \ + f_imm64_b = (0|(EXTRACT_LSB0_UINT (word_1, 32, 31, 32) << 0)); \ + f_imm64_c = (0|(EXTRACT_LSB0_UINT (word_2, 32, 31, 32) << 0)); \ +{\ + f_imm64 = ((((((UDI) (UINT) (f_imm64_c))) << (32))) | (((UDI) (UINT) (f_imm64_a))));\ +}\ + f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); \ + f_dstbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); \ + f_op_mode = EXTRACT_LSB0_LGUINT (insn, 64, 7, 3); \ + f_op_size = EXTRACT_LSB0_LGUINT (insn, 64, 4, 2); \ + f_srcbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); \ + f_op_class = EXTRACT_LSB0_LGUINT (insn, 64, 2, 3); \ + +#define EXTRACT_IFMT_LDABSW_VARS \ + INT f_imm32; \ + HI f_offset16; \ + UINT f_regs; \ + UINT f_op_mode; \ + UINT f_op_size; \ + UINT f_op_class; \ + unsigned int length; +#define EXTRACT_IFMT_LDABSW_CODE \ + length = 8; \ + f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); \ + f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); \ + f_regs = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 8) << 0)); \ + f_op_mode = EXTRACT_LSB0_LGUINT (insn, 64, 7, 3); \ + f_op_size = EXTRACT_LSB0_LGUINT (insn, 64, 4, 2); \ + f_op_class = EXTRACT_LSB0_LGUINT (insn, 64, 2, 3); \ + +#define EXTRACT_IFMT_LDINDWBE_VARS \ + INT f_imm32; \ + HI f_offset16; \ + UINT f_dstbe; \ + UINT f_op_mode; \ + UINT f_op_size; \ + UINT f_srcbe; \ + UINT f_op_class; \ + unsigned int length; +#define EXTRACT_IFMT_LDINDWBE_CODE \ + length = 8; \ + f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); \ + f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); \ + f_dstbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); \ + f_op_mode = EXTRACT_LSB0_LGUINT (insn, 64, 7, 3); \ + f_op_size = EXTRACT_LSB0_LGUINT (insn, 64, 4, 2); \ + f_srcbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); \ + f_op_class = EXTRACT_LSB0_LGUINT (insn, 64, 2, 3); \ + +#define EXTRACT_IFMT_LDXWBE_VARS \ + INT f_imm32; \ + HI f_offset16; \ + UINT f_dstbe; \ + UINT f_op_mode; \ + UINT f_op_size; \ + UINT f_srcbe; \ + UINT f_op_class; \ + unsigned int length; +#define EXTRACT_IFMT_LDXWBE_CODE \ + length = 8; \ + f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); \ + f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); \ + f_dstbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); \ + f_op_mode = EXTRACT_LSB0_LGUINT (insn, 64, 7, 3); \ + f_op_size = EXTRACT_LSB0_LGUINT (insn, 64, 4, 2); \ + f_srcbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); \ + f_op_class = EXTRACT_LSB0_LGUINT (insn, 64, 2, 3); \ + +#define EXTRACT_IFMT_STBBE_VARS \ + INT f_imm32; \ + HI f_offset16; \ + UINT f_dstbe; \ + UINT f_op_mode; \ + UINT f_op_size; \ + UINT f_srcbe; \ + UINT f_op_class; \ + unsigned int length; +#define EXTRACT_IFMT_STBBE_CODE \ + length = 8; \ + f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); \ + f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); \ + f_dstbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); \ + f_op_mode = EXTRACT_LSB0_LGUINT (insn, 64, 7, 3); \ + f_op_size = EXTRACT_LSB0_LGUINT (insn, 64, 4, 2); \ + f_srcbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); \ + f_op_class = EXTRACT_LSB0_LGUINT (insn, 64, 2, 3); \ + +#define EXTRACT_IFMT_JEQIBE_VARS \ + INT f_imm32; \ + HI f_offset16; \ + UINT f_dstbe; \ + UINT f_op_code; \ + UINT f_srcbe; \ + UINT f_op_src; \ + UINT f_op_class; \ + unsigned int length; +#define EXTRACT_IFMT_JEQIBE_CODE \ + length = 8; \ + f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); \ + f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); \ + f_dstbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); \ + f_op_code = EXTRACT_LSB0_LGUINT (insn, 64, 7, 4); \ + f_srcbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); \ + f_op_src = EXTRACT_LSB0_LGUINT (insn, 64, 3, 1); \ + f_op_class = EXTRACT_LSB0_LGUINT (insn, 64, 2, 3); \ + +#define EXTRACT_IFMT_JEQRBE_VARS \ + INT f_imm32; \ + HI f_offset16; \ + UINT f_dstbe; \ + UINT f_op_code; \ + UINT f_srcbe; \ + UINT f_op_src; \ + UINT f_op_class; \ + unsigned int length; +#define EXTRACT_IFMT_JEQRBE_CODE \ + length = 8; \ + f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); \ + f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); \ + f_dstbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); \ + f_op_code = EXTRACT_LSB0_LGUINT (insn, 64, 7, 4); \ + f_srcbe = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); \ + f_op_src = EXTRACT_LSB0_LGUINT (insn, 64, 3, 1); \ + f_op_class = EXTRACT_LSB0_LGUINT (insn, 64, 2, 3); \ + +#define EXTRACT_IFMT_CALLBE_VARS \ + INT f_imm32; \ + HI f_offset16; \ + UINT f_regs; \ + UINT f_op_code; \ + UINT f_op_src; \ + UINT f_op_class; \ + unsigned int length; +#define EXTRACT_IFMT_CALLBE_CODE \ + length = 8; \ + f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); \ + f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); \ + f_regs = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 8) << 0)); \ + f_op_code = EXTRACT_LSB0_LGUINT (insn, 64, 7, 4); \ + f_op_src = EXTRACT_LSB0_LGUINT (insn, 64, 3, 1); \ + f_op_class = EXTRACT_LSB0_LGUINT (insn, 64, 2, 3); \ + +#define EXTRACT_IFMT_JA_VARS \ + INT f_imm32; \ + HI f_offset16; \ + UINT f_regs; \ + UINT f_op_code; \ + UINT f_op_src; \ + UINT f_op_class; \ + unsigned int length; +#define EXTRACT_IFMT_JA_CODE \ + length = 8; \ + f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); \ + f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); \ + f_regs = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 8) << 0)); \ + f_op_code = EXTRACT_LSB0_LGUINT (insn, 64, 7, 4); \ + f_op_src = EXTRACT_LSB0_LGUINT (insn, 64, 3, 1); \ + f_op_class = EXTRACT_LSB0_LGUINT (insn, 64, 2, 3); \ + +#define EXTRACT_IFMT_EXIT_VARS \ + INT f_imm32; \ + HI f_offset16; \ + UINT f_regs; \ + UINT f_op_code; \ + UINT f_op_src; \ + UINT f_op_class; \ + unsigned int length; +#define EXTRACT_IFMT_EXIT_CODE \ + length = 8; \ + f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); \ + f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); \ + f_regs = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 8) << 0)); \ + f_op_code = EXTRACT_LSB0_LGUINT (insn, 64, 7, 4); \ + f_op_src = EXTRACT_LSB0_LGUINT (insn, 64, 3, 1); \ + f_op_class = EXTRACT_LSB0_LGUINT (insn, 64, 2, 3); \ + +#endif /* DEFS_BPFBF_EBPFBE_H */ diff -Nru gdb-9.1/sim/bpf/defs-le.h gdb-10.2/sim/bpf/defs-le.h --- gdb-9.1/sim/bpf/defs-le.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/sim/bpf/defs-le.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,383 @@ +/* ISA definitions header for ebpfle. + +THIS FILE IS MACHINE GENERATED WITH CGEN. + +Copyright (C) 1996-2021 Free Software Foundation, Inc. + +This file is part of the GNU simulators. + + This file is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, 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. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. + +*/ + +#ifndef DEFS_BPFBF_EBPFLE_H +#define DEFS_BPFBF_EBPFLE_H + +/* Instruction argument buffer. */ + +union sem_fields { + struct { /* no operands */ + int empty; + } sfmt_empty; + struct { /* */ + INT f_imm32; + UINT f_srcle; + } sfmt_ldindwle; + struct { /* */ + DI f_imm64; + UINT f_dstle; + } sfmt_lddwle; + struct { /* */ + INT f_imm32; + UINT f_dstle; + HI f_offset16; + } sfmt_stble; + struct { /* */ + UINT f_dstle; + UINT f_srcle; + HI f_offset16; + } sfmt_ldxwle; +#if WITH_SCACHE_PBB + /* Writeback handler. */ + struct { + /* Pointer to argbuf entry for insn whose results need writing back. */ + const struct argbuf *abuf; + } write; + /* x-before handler */ + struct { + /*const SCACHE *insns[MAX_PARALLEL_INSNS];*/ + int first_p; + } before; + /* x-after handler */ + struct { + int empty; + } after; + /* This entry is used to terminate each pbb. */ + struct { + /* Number of insns in pbb. */ + int insn_count; + /* Next pbb to execute. */ + SCACHE *next; + SCACHE *branch_target; + } chain; +#endif +}; + +/* The ARGBUF struct. */ +struct argbuf { + /* These are the baseclass definitions. */ + IADDR addr; + const IDESC *idesc; + char trace_p; + char profile_p; + /* ??? Temporary hack for skip insns. */ + char skip_count; + char unused; + /* cpu specific data follows */ + union sem semantic; + int written; + union sem_fields fields; +}; + +/* A cached insn. + + ??? SCACHE used to contain more than just argbuf. We could delete the + type entirely and always just use ARGBUF, but for future concerns and as + a level of abstraction it is left in. */ + +struct scache { + struct argbuf argbuf; +}; + +/* Macros to simplify extraction, reading and semantic code. + These define and assign the local vars that contain the insn's fields. */ + +#define EXTRACT_IFMT_EMPTY_VARS \ + unsigned int length; +#define EXTRACT_IFMT_EMPTY_CODE \ + length = 0; \ + +#define EXTRACT_IFMT_ADDILE_VARS \ + INT f_imm32; \ + HI f_offset16; \ + UINT f_srcle; \ + UINT f_op_code; \ + UINT f_dstle; \ + UINT f_op_src; \ + UINT f_op_class; \ + unsigned int length; +#define EXTRACT_IFMT_ADDILE_CODE \ + length = 8; \ + f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); \ + f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); \ + f_srcle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); \ + f_op_code = EXTRACT_LSB0_LGUINT (insn, 64, 7, 4); \ + f_dstle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); \ + f_op_src = EXTRACT_LSB0_LGUINT (insn, 64, 3, 1); \ + f_op_class = EXTRACT_LSB0_LGUINT (insn, 64, 2, 3); \ + +#define EXTRACT_IFMT_ADDRLE_VARS \ + INT f_imm32; \ + HI f_offset16; \ + UINT f_srcle; \ + UINT f_op_code; \ + UINT f_dstle; \ + UINT f_op_src; \ + UINT f_op_class; \ + unsigned int length; +#define EXTRACT_IFMT_ADDRLE_CODE \ + length = 8; \ + f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); \ + f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); \ + f_srcle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); \ + f_op_code = EXTRACT_LSB0_LGUINT (insn, 64, 7, 4); \ + f_dstle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); \ + f_op_src = EXTRACT_LSB0_LGUINT (insn, 64, 3, 1); \ + f_op_class = EXTRACT_LSB0_LGUINT (insn, 64, 2, 3); \ + +#define EXTRACT_IFMT_NEGLE_VARS \ + INT f_imm32; \ + HI f_offset16; \ + UINT f_srcle; \ + UINT f_op_code; \ + UINT f_dstle; \ + UINT f_op_src; \ + UINT f_op_class; \ + unsigned int length; +#define EXTRACT_IFMT_NEGLE_CODE \ + length = 8; \ + f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); \ + f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); \ + f_srcle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); \ + f_op_code = EXTRACT_LSB0_LGUINT (insn, 64, 7, 4); \ + f_dstle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); \ + f_op_src = EXTRACT_LSB0_LGUINT (insn, 64, 3, 1); \ + f_op_class = EXTRACT_LSB0_LGUINT (insn, 64, 2, 3); \ + +#define EXTRACT_IFMT_ENDLELE_VARS \ + INT f_imm32; \ + HI f_offset16; \ + UINT f_srcle; \ + UINT f_op_code; \ + UINT f_dstle; \ + UINT f_op_src; \ + UINT f_op_class; \ + unsigned int length; +#define EXTRACT_IFMT_ENDLELE_CODE \ + length = 8; \ + f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); \ + f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); \ + f_srcle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); \ + f_op_code = EXTRACT_LSB0_LGUINT (insn, 64, 7, 4); \ + f_dstle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); \ + f_op_src = EXTRACT_LSB0_LGUINT (insn, 64, 3, 1); \ + f_op_class = EXTRACT_LSB0_LGUINT (insn, 64, 2, 3); \ + +#define EXTRACT_IFMT_LDDWLE_VARS \ + UINT f_imm64_a; \ + UINT f_imm64_b; \ + UINT f_imm64_c; \ + DI f_imm64; \ + HI f_offset16; \ + UINT f_srcle; \ + UINT f_op_mode; \ + UINT f_op_size; \ + UINT f_dstle; \ + UINT f_op_class; \ + /* Contents of trailing part of insn. */ \ + UINT word_1; \ + UINT word_2; \ + unsigned int length; +#define EXTRACT_IFMT_LDDWLE_CODE \ + length = 16; \ + word_1 = GETIMEMUSI (current_cpu, pc + 8); \ + word_2 = GETIMEMUSI (current_cpu, pc + 12); \ + f_imm64_a = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); \ + f_imm64_b = (0|(EXTRACT_LSB0_UINT (word_1, 32, 31, 32) << 0)); \ + f_imm64_c = (0|(EXTRACT_LSB0_UINT (word_2, 32, 31, 32) << 0)); \ +{\ + f_imm64 = ((((((UDI) (UINT) (f_imm64_c))) << (32))) | (((UDI) (UINT) (f_imm64_a))));\ +}\ + f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); \ + f_srcle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); \ + f_op_mode = EXTRACT_LSB0_LGUINT (insn, 64, 7, 3); \ + f_op_size = EXTRACT_LSB0_LGUINT (insn, 64, 4, 2); \ + f_dstle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); \ + f_op_class = EXTRACT_LSB0_LGUINT (insn, 64, 2, 3); \ + +#define EXTRACT_IFMT_LDABSW_VARS \ + INT f_imm32; \ + HI f_offset16; \ + UINT f_regs; \ + UINT f_op_mode; \ + UINT f_op_size; \ + UINT f_op_class; \ + unsigned int length; +#define EXTRACT_IFMT_LDABSW_CODE \ + length = 8; \ + f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); \ + f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); \ + f_regs = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 8) << 0)); \ + f_op_mode = EXTRACT_LSB0_LGUINT (insn, 64, 7, 3); \ + f_op_size = EXTRACT_LSB0_LGUINT (insn, 64, 4, 2); \ + f_op_class = EXTRACT_LSB0_LGUINT (insn, 64, 2, 3); \ + +#define EXTRACT_IFMT_LDINDWLE_VARS \ + INT f_imm32; \ + HI f_offset16; \ + UINT f_srcle; \ + UINT f_op_mode; \ + UINT f_op_size; \ + UINT f_dstle; \ + UINT f_op_class; \ + unsigned int length; +#define EXTRACT_IFMT_LDINDWLE_CODE \ + length = 8; \ + f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); \ + f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); \ + f_srcle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); \ + f_op_mode = EXTRACT_LSB0_LGUINT (insn, 64, 7, 3); \ + f_op_size = EXTRACT_LSB0_LGUINT (insn, 64, 4, 2); \ + f_dstle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); \ + f_op_class = EXTRACT_LSB0_LGUINT (insn, 64, 2, 3); \ + +#define EXTRACT_IFMT_LDXWLE_VARS \ + INT f_imm32; \ + HI f_offset16; \ + UINT f_srcle; \ + UINT f_op_mode; \ + UINT f_op_size; \ + UINT f_dstle; \ + UINT f_op_class; \ + unsigned int length; +#define EXTRACT_IFMT_LDXWLE_CODE \ + length = 8; \ + f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); \ + f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); \ + f_srcle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); \ + f_op_mode = EXTRACT_LSB0_LGUINT (insn, 64, 7, 3); \ + f_op_size = EXTRACT_LSB0_LGUINT (insn, 64, 4, 2); \ + f_dstle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); \ + f_op_class = EXTRACT_LSB0_LGUINT (insn, 64, 2, 3); \ + +#define EXTRACT_IFMT_STBLE_VARS \ + INT f_imm32; \ + HI f_offset16; \ + UINT f_srcle; \ + UINT f_op_mode; \ + UINT f_op_size; \ + UINT f_dstle; \ + UINT f_op_class; \ + unsigned int length; +#define EXTRACT_IFMT_STBLE_CODE \ + length = 8; \ + f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); \ + f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); \ + f_srcle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); \ + f_op_mode = EXTRACT_LSB0_LGUINT (insn, 64, 7, 3); \ + f_op_size = EXTRACT_LSB0_LGUINT (insn, 64, 4, 2); \ + f_dstle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); \ + f_op_class = EXTRACT_LSB0_LGUINT (insn, 64, 2, 3); \ + +#define EXTRACT_IFMT_JEQILE_VARS \ + INT f_imm32; \ + HI f_offset16; \ + UINT f_srcle; \ + UINT f_op_code; \ + UINT f_dstle; \ + UINT f_op_src; \ + UINT f_op_class; \ + unsigned int length; +#define EXTRACT_IFMT_JEQILE_CODE \ + length = 8; \ + f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); \ + f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); \ + f_srcle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); \ + f_op_code = EXTRACT_LSB0_LGUINT (insn, 64, 7, 4); \ + f_dstle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); \ + f_op_src = EXTRACT_LSB0_LGUINT (insn, 64, 3, 1); \ + f_op_class = EXTRACT_LSB0_LGUINT (insn, 64, 2, 3); \ + +#define EXTRACT_IFMT_JEQRLE_VARS \ + INT f_imm32; \ + HI f_offset16; \ + UINT f_srcle; \ + UINT f_op_code; \ + UINT f_dstle; \ + UINT f_op_src; \ + UINT f_op_class; \ + unsigned int length; +#define EXTRACT_IFMT_JEQRLE_CODE \ + length = 8; \ + f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); \ + f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); \ + f_srcle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); \ + f_op_code = EXTRACT_LSB0_LGUINT (insn, 64, 7, 4); \ + f_dstle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); \ + f_op_src = EXTRACT_LSB0_LGUINT (insn, 64, 3, 1); \ + f_op_class = EXTRACT_LSB0_LGUINT (insn, 64, 2, 3); \ + +#define EXTRACT_IFMT_CALLLE_VARS \ + INT f_imm32; \ + HI f_offset16; \ + UINT f_regs; \ + UINT f_op_code; \ + UINT f_op_src; \ + UINT f_op_class; \ + unsigned int length; +#define EXTRACT_IFMT_CALLLE_CODE \ + length = 8; \ + f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); \ + f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); \ + f_regs = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 8) << 0)); \ + f_op_code = EXTRACT_LSB0_LGUINT (insn, 64, 7, 4); \ + f_op_src = EXTRACT_LSB0_LGUINT (insn, 64, 3, 1); \ + f_op_class = EXTRACT_LSB0_LGUINT (insn, 64, 2, 3); \ + +#define EXTRACT_IFMT_JA_VARS \ + INT f_imm32; \ + HI f_offset16; \ + UINT f_regs; \ + UINT f_op_code; \ + UINT f_op_src; \ + UINT f_op_class; \ + unsigned int length; +#define EXTRACT_IFMT_JA_CODE \ + length = 8; \ + f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); \ + f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); \ + f_regs = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 8) << 0)); \ + f_op_code = EXTRACT_LSB0_LGUINT (insn, 64, 7, 4); \ + f_op_src = EXTRACT_LSB0_LGUINT (insn, 64, 3, 1); \ + f_op_class = EXTRACT_LSB0_LGUINT (insn, 64, 2, 3); \ + +#define EXTRACT_IFMT_EXIT_VARS \ + INT f_imm32; \ + HI f_offset16; \ + UINT f_regs; \ + UINT f_op_code; \ + UINT f_op_src; \ + UINT f_op_class; \ + unsigned int length; +#define EXTRACT_IFMT_EXIT_CODE \ + length = 8; \ + f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); \ + f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); \ + f_regs = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 8) << 0)); \ + f_op_code = EXTRACT_LSB0_LGUINT (insn, 64, 7, 4); \ + f_op_src = EXTRACT_LSB0_LGUINT (insn, 64, 3, 1); \ + f_op_class = EXTRACT_LSB0_LGUINT (insn, 64, 2, 3); \ + +#endif /* DEFS_BPFBF_EBPFLE_H */ diff -Nru gdb-9.1/sim/bpf/eng.h gdb-10.2/sim/bpf/eng.h --- gdb-9.1/sim/bpf/eng.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/sim/bpf/eng.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,23 @@ +/* Engine declarations. + Copyright (C) 2020-2021 Free Software Foundation, Inc. + Contributed by Oracle, Inc. + +This file is part of the GNU simulators. + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +/* Include declarations for eBPF LE and eBPF BE ISAs. */ + +#include "eng-le.h" +#include "eng-be.h" diff -Nru gdb-9.1/sim/bpf/Makefile.in gdb-10.2/sim/bpf/Makefile.in --- gdb-9.1/sim/bpf/Makefile.in 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/sim/bpf/Makefile.in 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,203 @@ +# Makefile template for configure for the eBPF simulator +# Copyright (C) 2020-2021 Free Software Foundation, Inc. +# +# This file is part of GDB, the GNU debugger. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +## COMMON_PRE_CONFIG_FRAG + +CGEN_STD_OBJS = cgen-run.o cgen-scache.o cgen-trace.o cgen-utils.o +BPF_GEN_OBJS = arch.o cpu.o \ + decode-le.o decode-be.o \ + sem-le.o sem-be.o \ + mloop-le.o mloop-be.o +BPF_HAND_OBJS = bpf.o sim-if.o traps.o bpf-helpers.o + +SIM_OBJS = \ + $(SIM_NEW_COMMON_OBJS) \ + $(CGEN_STD_OBJS) \ + $(BPF_GEN_OBJS) \ + $(BPF_HAND_OBJS) + +SIM_EXTRA_DEPS = \ + $(CGEN_INCLUDE_DEPS) \ + arch.h \ + bpf-sim.h \ + $(srcdir)/../../opcodes/bpf-desc.h \ + $(srcdir)/../../opcodes/bpf-opc.h + +SIM_EXTRA_CLEAN = bpf-clean + +## COMMON_POST_CONFIG_FRAG + +# cgen support, enable with --enable-cgen-maint +CGEN_MAINT = ; @true +# The following line is commented in or out depending upon --enable-cgen-maint. +@CGEN_MAINT@CGEN_MAINT = + +# BPF headers + +BPF_INCLUDE_DEPS = \ + $(CGEN_MAIN_CPU_DEPS) \ + $(SIM_EXTRA_DEPS) \ + cpu.h cpuall.h \ + decode-le.h decode-be.h \ + defs-le.h defs-be.h \ + eng-le.h eng-be.h \ + config.h + +# Dependencies for binaries from CGEN generated source + +arch.o: arch.c $(SIM_MAIN_DEPS) +cpu.o: cpu.c $(BPF_INCLUDE_DEPS) +decode-le.o: decode-le.c $(BPF_INCLUDE_DEPS) +decode-be.o: decode-be.c $(BPF_INCLUDE_DEPS) + +sim-if.o: sim-if.c $(SIM_MAIN_DEPS) $(srcdir)/../common/sim-core.h eng.h + $(COMPILE) $< + $(POSTCOMPILE) + +traps.o: traps.c $(SIM_MAIN_DEPS) eng.h + $(COMPILE) $< + $(POSTCOMPILE) + +mloop-le.o: mloop-le.c $(BPF_INCLUDE_DEPS) + $(CC) -c mloop-le.c $(ALL_CFLAGS) -DWANT_ISA_EBPFLE +mloop-be.o: mloop-be.c $(BPF_INCLUDE_DEPS) + $(CC) -c mloop-be.c $(ALL_CFLAGS) -DWANT_ISA_EBPFBE + +decode-le.o: decode-le.c $(BPF_INCLUDE_DEPS) + $(CC) -c $(srcdir)/decode-le.c $(ALL_CFLAGS) -DWANT_ISA_EBPFLE +decode-be.o: decode-be.c $(BPF_INCLUDE_DEPS) + $(CC) -c $(srcdir)/decode-be.c $(ALL_CFLAGS) -DWANT_ISA_EBPFBE + +sem-le.o: sem-le.c $(BPF_INCLUDE_DEPS) + $(CC) -c $(srcdir)/sem-le.c $(ALL_CFLAGS) -DWANT_ISA_EBPFLE +sem-be.o: sem-be.c $(BPF_INCLUDE_DEPS) + $(CC) -c $(srcdir)/sem-be.c $(ALL_CFLAGS) -DWANT_ISA_EBPFBE + +arch = bpf + +CGEN_COMMON_DEPS = \ + $(CGEN_READ_SCM) \ + $(srcdir)/../../cpu/bpf.cpu \ + $(srcdir)/../../cpu/bpf.opc \ + Makefile + +stamp-arch: $(CGEN_COMMON_DEPS) $(CGEN_ARCH_SCM) + $(MAKE) cgen-arch $(CGEN_FLAGS_TO_PASS) \ + mach=bpf cpu=bpfbf \ + archfile=$(srcdir)/../../cpu/bpf.cpu \ + FLAGS="with-scache" + touch $@ +$(srcdir)/arch.h $(srcdir)/arch.c $(srcdir)/cpuall.h: $(CGEN_MAINT) stamp-arch + @true + +stamp-cpu: $(CGEN_COMMON_DEPS) $(CGEN_CPU_SCM) + $(MAKE) cgen-cpu $(CGEN_FLAGS_TO_PASS) \ + isa=ebpfle,ebpfbe cpu=bpfbf mach=bpf \ + archfile=$(srcdir)/../../cpu/bpf.cpu \ + FLAGS="with-multiple-isa with-scache" + rm -f $(srcdir)/model.c + touch $@ +$(srcdir)/cpu.h $(srcdir)/cpu.c $(srcdir)/model.c: $(CGEN_MAINT) stamp-cpu + @true + +# We need to generate a group of files per ISA. +# For eBPF little-endian: +# defs-le.h +# sem-le.c, decode-le.c, decode-le.h +# $(objdir)/mloop-le.c $(objdir)/eng-le.h +# For eBPF big-endian: +# defs-be.h +# sem-be.c, decode-be.c, decode-be.h +# $(objdir)/mloop-be.c $(objdir)/eng-le.h +# +# The rules below take care of that. + +stamp-defs-le: $(CGEN_COMMON_DEPS) $(CGEN_CPU_SCM) + $(MAKE) cgen-defs $(CGEN_FLAGS_TO_PASS) \ + isa=ebpfle cpu=bpfbf mach=bpf \ + archfile=$(srcdir)/../../cpu/bpf.cpu \ + FLAGS="with-scache" \ + SUFFIX="-le" + touch $@ +$(srcdir)/defs-le.h: $(CGEN_MAINT) stamp-defs-le + @true + + +stamp-defs-be: $(CGEN_COMMON_DEPS) $(CGEN_CPU_SCM) + $(MAKE) cgen-defs $(CGEN_FLAGS_TO_PASS) \ + isa=ebpfbe cpu=bpfbf mach=bpf \ + archfile=$(srcdir)/../../cpu/bpf.cpu \ + FLAGS="with-scache" \ + SUFFIX="-be" + touch $@ +$(srcdir)/defs-be.h: $(CGEN_MAINT) stamp-defs-be + @true + +stamp-decode-le: $(CGEN_COMMON_DEPS) $(CGEN_CPU_SCM) $(GEN_DECODE_SCM) + $(MAKE) cgen-decode $(CGEN_FLAGS_TO_PASS) \ + isa=ebpfle cpu=bpfbf mach=bpf \ + archfile=$(srcdir)/../../cpu/bpf.cpu \ + FLAGS="with-scache" \ + SUFFIX="-le" \ + EXTRAFILES="$(CGEN_CPU_SEM)" + touch $@ +$(srcdir)/sem-le.c $(srcdir)/decode-le.c $(srcdir)/decode-le.h: \ + $(CGEN_MAINT) stamp-decode-le + @true + + +stamp-decode-be: $(CGEN_COMMON_DEPS) $(CGEN_CPU_SCM) $(GEN_DECODE_SCM) + $(MAKE) cgen-decode $(CGEN_FLAGS_TO_PASS) \ + isa=ebpfbe cpu=bpfbf mach=bpf \ + archfile=$(srcdir)/../../cpu/bpf.cpu \ + FLAGS="with-scache" \ + SUFFIX="-be" \ + EXTRAFILES="$(CGEN_CPU_SEM)" + touch $@ +$(srcdir)/sem-be.c $(srcdir)/decode-be.c $(srcdir)/decode-be.h: \ + $(CGEN_MAINT) stamp-decode-be + @true + +# Note the following files are generated in objdir, not srcdir. + +stamp-mloop: stamp-mloop-le stamp-mloop-be + +stamp-mloop-le: $(srcdir)/../common/genmloop.sh mloop.in Makefile + $(SHELL) $(srccom)/genmloop.sh -shell $(SHELL) \ + -mono -scache -prefix bpfbf_ebpfle -cpu bpfbf \ + -infile $(srcdir)/mloop.in -outfile-suffix -le + $(SHELL) $(srcroot)/move-if-change eng-le.hin eng-le.h + $(SHELL) $(srcroot)/move-if-change mloop-le.cin mloop-le.c + touch $@ +mloop-le.c eng-le.h: stamp-mloop-le + @true + +stamp-mloop-be: $(srcdir)/../common/genmloop.sh mloop.in Makefile + $(SHELL) $(srccom)/genmloop.sh -shell $(SHELL) \ + -mono -scache -prefix bpfbf_ebpfbe -cpu bpfbf \ + -infile $(srcdir)/mloop.in -outfile-suffix -be + $(SHELL) $(srcroot)/move-if-change eng-be.hin eng-be.h + $(SHELL) $(srcroot)/move-if-change mloop-be.cin mloop-be.c + touch $@ +mloop-be.c eng-be.h: stamp-mloop-be + @true + +.PHONY = bpf-clean + +bpf-clean: + rm -f stamp-arch stamp-cpu stamp-decode stamp-defs stamp-mloop diff -Nru gdb-9.1/sim/bpf/mloop.in gdb-10.2/sim/bpf/mloop.in --- gdb-9.1/sim/bpf/mloop.in 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/sim/bpf/mloop.in 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,165 @@ +# Simulator main loop for eBPF. -*- C -*- +# +# Copyright (C) 2020-2021 Free Software Foundation, Inc. +# +# This file is part of the GNU Simulators. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Syntax: +# /bin/sh mloop.in command +# +# Command is one of: +# +# init +# support +# extract-{simple,scache,pbb} +# {full,fast}-exec-{simple,scache,pbb} +# +# A target need only provide a "full" version of one of simple,scache,pbb. +# If the target wants it can also provide a fast version of same, or if +# the slow (full featured) version is `simple', then the fast version can be +# one of scache/pbb. +# A target can't provide more than this. +# However for illustration's sake this file provides examples of all. + +# ??? After a few more ports are done, revisit. +# Will eventually need to machine generate a lot of this. + +case "x$1" in + +xsupport) + +cat <<EOF + +static INLINE const IDESC * +extract (SIM_CPU *current_cpu, PCADDR pc, CGEN_INSN_WORD insn, + ARGBUF *abuf, int fast_p) +{ + const IDESC *id = @prefix@_decode (current_cpu, pc, insn, abuf); + @prefix@_fill_argbuf (current_cpu, abuf, id, pc, fast_p); + if (!fast_p) + { + int trace_p = PC_IN_TRACE_RANGE_P (current_cpu, pc); + int profile_p = PC_IN_PROFILE_RANGE_P (current_cpu, pc); + @prefix@_fill_argbuf_tp (current_cpu, abuf, trace_p, profile_p); + } + return id; +} + +static INLINE SEM_PC +execute (SIM_CPU *current_cpu, SCACHE *sc, int fast_p) +{ + SEM_PC vpc; + + if (fast_p) + vpc = (*sc->argbuf.semantic.sem_fast) (current_cpu, sc); + else + { + ARGBUF *abuf = &sc->argbuf; + const IDESC *idesc = abuf->idesc; + const CGEN_INSN *idata = idesc->idata; + int virtual_p = 0; + + if (! virtual_p) + { + /* FIXME: call x-before */ + if (ARGBUF_PROFILE_P (abuf)) + PROFILE_COUNT_INSN (current_cpu, abuf->addr, idesc->num); + /* FIXME: Later make cover macros: PROFILE_INSN_{INIT,FINI}. */ + if (PROFILE_MODEL_P (current_cpu) + && ARGBUF_PROFILE_P (abuf)) + @cpu@_model_insn_before (current_cpu, 1 /*first_p*/); + CGEN_TRACE_INSN_INIT (current_cpu, abuf, 1); + CGEN_TRACE_INSN (current_cpu, idata, + (const struct argbuf *) abuf, abuf->addr); + } + vpc = (*sc->argbuf.semantic.sem_full) (current_cpu, sc); + if (! virtual_p) + { + /* FIXME: call x-after */ + if (PROFILE_MODEL_P (current_cpu) + && ARGBUF_PROFILE_P (abuf)) + { + int cycles; + + cycles = (*idesc->timing->model_fn) (current_cpu, sc); + @cpu@_model_insn_after (current_cpu, 1 /*last_p*/, cycles); + } + CGEN_TRACE_INSN_FINI (current_cpu, abuf, 1); + } + } + + return vpc; +} + +EOF + +;; + +xinit) + +# Nothing needed. + +;; + +xextract-scache) + +cat <<EOF +{ + + UDI insn = GETIMEMUDI (current_cpu, vpc); + + if (current_target_byte_order == BFD_ENDIAN_BIG) + { + /* eBPF instructions are little-endian, but GETIMEMUDI reads according + to target byte order. Swap to little-endian. */ + insn = SWAP_8 (insn); + + /* But, the imm32 and offset16 fields within instructions follow target + byte order. Swap those fields back. */ + UHI off16 = (UHI) ((insn & 0x00000000ffff0000) >> 16); + USI imm32 = (USI) ((insn & 0xffffffff00000000) >> 32); + off16 = SWAP_2 (off16); + imm32 = SWAP_4 (imm32); + + insn = (((UDI) imm32) << 32) | (((UDI) off16) << 16) | (insn & 0xffff); + } + + extract (current_cpu, vpc, insn, sc, FAST_P); + + //XXX SEM_SKIP_COMPILE (current_cpu, sc, 1); +} +EOF + +;; + +xfull-exec-* | xfast-exec-*) + +# Inputs: current_cpu, vpc, sc, FAST_P +# Outputs: vpc +# vpc is the virtual program counter. + +cat <<EOF + vpc = execute (current_cpu, sc, FAST_P); +EOF + +;; + +*) + echo "Invalid argument to mainloop.in: $1" >&2 + exit 1 + ;; + +esac diff -Nru gdb-9.1/sim/bpf/sem-be.c gdb-10.2/sim/bpf/sem-be.c --- gdb-9.1/sim/bpf/sem-be.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/sim/bpf/sem-be.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,3207 @@ +/* Simulator instruction semantics for bpfbf. + +THIS FILE IS MACHINE GENERATED WITH CGEN. + +Copyright (C) 1996-2021 Free Software Foundation, Inc. + +This file is part of the GNU simulators. + + This file is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, 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. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. + +*/ + +#define WANT_CPU bpfbf +#define WANT_CPU_BPFBF + +#include "sim-main.h" +#include "cgen-mem.h" +#include "cgen-ops.h" + +#undef GET_ATTR +#define GET_ATTR(cpu, num, attr) CGEN_ATTR_VALUE (NULL, abuf->idesc->attrs, CGEN_INSN_##attr) + +/* This is used so that we can compile two copies of the semantic code, + one with full feature support and one without that runs fast(er). + FAST_P, when desired, is defined on the command line, -DFAST_P=1. */ +#if FAST_P +#define SEM_FN_NAME(cpu,fn) XCONCAT3 (cpu,_semf_,fn) +#undef CGEN_TRACE_RESULT +#define CGEN_TRACE_RESULT(cpu, abuf, name, type, val) +#else +#define SEM_FN_NAME(cpu,fn) XCONCAT3 (cpu,_sem_,fn) +#endif + +/* x-invalid: --invalid-- */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,x_invalid) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_empty.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 0); + + { + /* Update the recorded pc in the cpu state struct. + Only necessary for WITH_SCACHE case, but to avoid the + conditional compilation .... */ + SET_H_PC (pc); + /* Virtual insns have zero size. Overwrite vpc with address of next insn + using the default-insn-bitsize spec. When executing insns in parallel + we may want to queue the fault and continue execution. */ + vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + vpc = sim_engine_invalid_insn (current_cpu, pc, vpc); + } + + return vpc; +#undef FLD +} + +/* x-after: --after-- */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,x_after) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_empty.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 0); + + { +#if WITH_SCACHE_PBB_BPFBF_EBPFBE + bpfbf_ebpfbe_pbb_after (current_cpu, sem_arg); +#endif + } + + return vpc; +#undef FLD +} + +/* x-before: --before-- */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,x_before) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_empty.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 0); + + { +#if WITH_SCACHE_PBB_BPFBF_EBPFBE + bpfbf_ebpfbe_pbb_before (current_cpu, sem_arg); +#endif + } + + return vpc; +#undef FLD +} + +/* x-cti-chain: --cti-chain-- */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,x_cti_chain) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_empty.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 0); + + { +#if WITH_SCACHE_PBB_BPFBF_EBPFBE +#ifdef DEFINE_SWITCH + vpc = bpfbf_ebpfbe_pbb_cti_chain (current_cpu, sem_arg, + pbb_br_type, pbb_br_npc); + BREAK (sem); +#else + /* FIXME: Allow provision of explicit ifmt spec in insn spec. */ + vpc = bpfbf_ebpfbe_pbb_cti_chain (current_cpu, sem_arg, + CPU_PBB_BR_TYPE (current_cpu), + CPU_PBB_BR_NPC (current_cpu)); +#endif +#endif + } + + return vpc; +#undef FLD +} + +/* x-chain: --chain-- */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,x_chain) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_empty.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 0); + + { +#if WITH_SCACHE_PBB_BPFBF_EBPFBE + vpc = bpfbf_ebpfbe_pbb_chain (current_cpu, sem_arg); +#ifdef DEFINE_SWITCH + BREAK (sem); +#endif +#endif + } + + return vpc; +#undef FLD +} + +/* x-begin: --begin-- */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,x_begin) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_empty.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 0); + + { +#if WITH_SCACHE_PBB_BPFBF_EBPFBE +#if defined DEFINE_SWITCH || defined FAST_P + /* In the switch case FAST_P is a constant, allowing several optimizations + in any called inline functions. */ + vpc = bpfbf_ebpfbe_pbb_begin (current_cpu, FAST_P); +#else +#if 0 /* cgen engine can't handle dynamic fast/full switching yet. */ + vpc = bpfbf_ebpfbe_pbb_begin (current_cpu, STATE_RUN_FAST_P (CPU_STATE (current_cpu))); +#else + vpc = bpfbf_ebpfbe_pbb_begin (current_cpu, 0); +#endif +#endif +#endif + } + + return vpc; +#undef FLD +} + +/* addibe: add $dstbe,$imm32 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,addibe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stbbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + DI opval = ADDDI (CPU (h_gpr[FLD (f_dstbe)]), FLD (f_imm32)); + CPU (h_gpr[FLD (f_dstbe)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'D', opval); + } + + return vpc; +#undef FLD +} + +/* addrbe: add $dstbe,$srcbe */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,addrbe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + DI opval = ADDDI (CPU (h_gpr[FLD (f_dstbe)]), CPU (h_gpr[FLD (f_srcbe)])); + CPU (h_gpr[FLD (f_dstbe)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'D', opval); + } + + return vpc; +#undef FLD +} + +/* add32ibe: add32 $dstbe,$imm32 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,add32ibe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stbbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + USI opval = ADDSI (CPU (h_gpr[FLD (f_dstbe)]), FLD (f_imm32)); + CPU (h_gpr[FLD (f_dstbe)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* add32rbe: add32 $dstbe,$srcbe */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,add32rbe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + USI opval = ADDSI (CPU (h_gpr[FLD (f_dstbe)]), CPU (h_gpr[FLD (f_srcbe)])); + CPU (h_gpr[FLD (f_dstbe)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* subibe: sub $dstbe,$imm32 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,subibe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stbbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + DI opval = SUBDI (CPU (h_gpr[FLD (f_dstbe)]), FLD (f_imm32)); + CPU (h_gpr[FLD (f_dstbe)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'D', opval); + } + + return vpc; +#undef FLD +} + +/* subrbe: sub $dstbe,$srcbe */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,subrbe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + DI opval = SUBDI (CPU (h_gpr[FLD (f_dstbe)]), CPU (h_gpr[FLD (f_srcbe)])); + CPU (h_gpr[FLD (f_dstbe)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'D', opval); + } + + return vpc; +#undef FLD +} + +/* sub32ibe: sub32 $dstbe,$imm32 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,sub32ibe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stbbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + USI opval = SUBSI (CPU (h_gpr[FLD (f_dstbe)]), FLD (f_imm32)); + CPU (h_gpr[FLD (f_dstbe)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* sub32rbe: sub32 $dstbe,$srcbe */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,sub32rbe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + USI opval = SUBSI (CPU (h_gpr[FLD (f_dstbe)]), CPU (h_gpr[FLD (f_srcbe)])); + CPU (h_gpr[FLD (f_dstbe)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* mulibe: mul $dstbe,$imm32 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,mulibe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stbbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + DI opval = MULDI (CPU (h_gpr[FLD (f_dstbe)]), FLD (f_imm32)); + CPU (h_gpr[FLD (f_dstbe)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'D', opval); + } + + return vpc; +#undef FLD +} + +/* mulrbe: mul $dstbe,$srcbe */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,mulrbe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + DI opval = MULDI (CPU (h_gpr[FLD (f_dstbe)]), CPU (h_gpr[FLD (f_srcbe)])); + CPU (h_gpr[FLD (f_dstbe)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'D', opval); + } + + return vpc; +#undef FLD +} + +/* mul32ibe: mul32 $dstbe,$imm32 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,mul32ibe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stbbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + USI opval = MULSI (CPU (h_gpr[FLD (f_dstbe)]), FLD (f_imm32)); + CPU (h_gpr[FLD (f_dstbe)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* mul32rbe: mul32 $dstbe,$srcbe */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,mul32rbe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + USI opval = MULSI (CPU (h_gpr[FLD (f_dstbe)]), CPU (h_gpr[FLD (f_srcbe)])); + CPU (h_gpr[FLD (f_dstbe)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* divibe: div $dstbe,$imm32 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,divibe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stbbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + DI opval = UDIVDI (CPU (h_gpr[FLD (f_dstbe)]), FLD (f_imm32)); + CPU (h_gpr[FLD (f_dstbe)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'D', opval); + } + + return vpc; +#undef FLD +} + +/* divrbe: div $dstbe,$srcbe */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,divrbe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + DI opval = UDIVDI (CPU (h_gpr[FLD (f_dstbe)]), CPU (h_gpr[FLD (f_srcbe)])); + CPU (h_gpr[FLD (f_dstbe)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'D', opval); + } + + return vpc; +#undef FLD +} + +/* div32ibe: div32 $dstbe,$imm32 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,div32ibe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stbbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + USI opval = UDIVSI (CPU (h_gpr[FLD (f_dstbe)]), FLD (f_imm32)); + CPU (h_gpr[FLD (f_dstbe)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* div32rbe: div32 $dstbe,$srcbe */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,div32rbe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + USI opval = UDIVSI (CPU (h_gpr[FLD (f_dstbe)]), CPU (h_gpr[FLD (f_srcbe)])); + CPU (h_gpr[FLD (f_dstbe)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* oribe: or $dstbe,$imm32 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,oribe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stbbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + DI opval = ORDI (CPU (h_gpr[FLD (f_dstbe)]), FLD (f_imm32)); + CPU (h_gpr[FLD (f_dstbe)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'D', opval); + } + + return vpc; +#undef FLD +} + +/* orrbe: or $dstbe,$srcbe */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,orrbe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + DI opval = ORDI (CPU (h_gpr[FLD (f_dstbe)]), CPU (h_gpr[FLD (f_srcbe)])); + CPU (h_gpr[FLD (f_dstbe)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'D', opval); + } + + return vpc; +#undef FLD +} + +/* or32ibe: or32 $dstbe,$imm32 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,or32ibe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stbbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + USI opval = ORSI (CPU (h_gpr[FLD (f_dstbe)]), FLD (f_imm32)); + CPU (h_gpr[FLD (f_dstbe)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* or32rbe: or32 $dstbe,$srcbe */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,or32rbe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + USI opval = ORSI (CPU (h_gpr[FLD (f_dstbe)]), CPU (h_gpr[FLD (f_srcbe)])); + CPU (h_gpr[FLD (f_dstbe)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* andibe: and $dstbe,$imm32 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,andibe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stbbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + DI opval = ANDDI (CPU (h_gpr[FLD (f_dstbe)]), FLD (f_imm32)); + CPU (h_gpr[FLD (f_dstbe)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'D', opval); + } + + return vpc; +#undef FLD +} + +/* andrbe: and $dstbe,$srcbe */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,andrbe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + DI opval = ANDDI (CPU (h_gpr[FLD (f_dstbe)]), CPU (h_gpr[FLD (f_srcbe)])); + CPU (h_gpr[FLD (f_dstbe)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'D', opval); + } + + return vpc; +#undef FLD +} + +/* and32ibe: and32 $dstbe,$imm32 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,and32ibe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stbbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + USI opval = ANDSI (CPU (h_gpr[FLD (f_dstbe)]), FLD (f_imm32)); + CPU (h_gpr[FLD (f_dstbe)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* and32rbe: and32 $dstbe,$srcbe */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,and32rbe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + USI opval = ANDSI (CPU (h_gpr[FLD (f_dstbe)]), CPU (h_gpr[FLD (f_srcbe)])); + CPU (h_gpr[FLD (f_dstbe)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* lshibe: lsh $dstbe,$imm32 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,lshibe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stbbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + DI opval = SLLDI (CPU (h_gpr[FLD (f_dstbe)]), FLD (f_imm32)); + CPU (h_gpr[FLD (f_dstbe)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'D', opval); + } + + return vpc; +#undef FLD +} + +/* lshrbe: lsh $dstbe,$srcbe */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,lshrbe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + DI opval = SLLDI (CPU (h_gpr[FLD (f_dstbe)]), CPU (h_gpr[FLD (f_srcbe)])); + CPU (h_gpr[FLD (f_dstbe)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'D', opval); + } + + return vpc; +#undef FLD +} + +/* lsh32ibe: lsh32 $dstbe,$imm32 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,lsh32ibe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stbbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + USI opval = SLLSI (CPU (h_gpr[FLD (f_dstbe)]), FLD (f_imm32)); + CPU (h_gpr[FLD (f_dstbe)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* lsh32rbe: lsh32 $dstbe,$srcbe */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,lsh32rbe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + USI opval = SLLSI (CPU (h_gpr[FLD (f_dstbe)]), CPU (h_gpr[FLD (f_srcbe)])); + CPU (h_gpr[FLD (f_dstbe)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* rshibe: rsh $dstbe,$imm32 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,rshibe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stbbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + DI opval = SRLDI (CPU (h_gpr[FLD (f_dstbe)]), FLD (f_imm32)); + CPU (h_gpr[FLD (f_dstbe)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'D', opval); + } + + return vpc; +#undef FLD +} + +/* rshrbe: rsh $dstbe,$srcbe */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,rshrbe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + DI opval = SRLDI (CPU (h_gpr[FLD (f_dstbe)]), CPU (h_gpr[FLD (f_srcbe)])); + CPU (h_gpr[FLD (f_dstbe)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'D', opval); + } + + return vpc; +#undef FLD +} + +/* rsh32ibe: rsh32 $dstbe,$imm32 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,rsh32ibe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stbbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + USI opval = SRLSI (CPU (h_gpr[FLD (f_dstbe)]), FLD (f_imm32)); + CPU (h_gpr[FLD (f_dstbe)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* rsh32rbe: rsh32 $dstbe,$srcbe */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,rsh32rbe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + USI opval = SRLSI (CPU (h_gpr[FLD (f_dstbe)]), CPU (h_gpr[FLD (f_srcbe)])); + CPU (h_gpr[FLD (f_dstbe)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* modibe: mod $dstbe,$imm32 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,modibe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stbbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + DI opval = UMODDI (CPU (h_gpr[FLD (f_dstbe)]), FLD (f_imm32)); + CPU (h_gpr[FLD (f_dstbe)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'D', opval); + } + + return vpc; +#undef FLD +} + +/* modrbe: mod $dstbe,$srcbe */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,modrbe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + DI opval = UMODDI (CPU (h_gpr[FLD (f_dstbe)]), CPU (h_gpr[FLD (f_srcbe)])); + CPU (h_gpr[FLD (f_dstbe)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'D', opval); + } + + return vpc; +#undef FLD +} + +/* mod32ibe: mod32 $dstbe,$imm32 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,mod32ibe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stbbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + USI opval = UMODSI (CPU (h_gpr[FLD (f_dstbe)]), FLD (f_imm32)); + CPU (h_gpr[FLD (f_dstbe)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* mod32rbe: mod32 $dstbe,$srcbe */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,mod32rbe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + USI opval = UMODSI (CPU (h_gpr[FLD (f_dstbe)]), CPU (h_gpr[FLD (f_srcbe)])); + CPU (h_gpr[FLD (f_dstbe)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* xoribe: xor $dstbe,$imm32 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,xoribe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stbbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + DI opval = XORDI (CPU (h_gpr[FLD (f_dstbe)]), FLD (f_imm32)); + CPU (h_gpr[FLD (f_dstbe)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'D', opval); + } + + return vpc; +#undef FLD +} + +/* xorrbe: xor $dstbe,$srcbe */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,xorrbe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + DI opval = XORDI (CPU (h_gpr[FLD (f_dstbe)]), CPU (h_gpr[FLD (f_srcbe)])); + CPU (h_gpr[FLD (f_dstbe)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'D', opval); + } + + return vpc; +#undef FLD +} + +/* xor32ibe: xor32 $dstbe,$imm32 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,xor32ibe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stbbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + USI opval = XORSI (CPU (h_gpr[FLD (f_dstbe)]), FLD (f_imm32)); + CPU (h_gpr[FLD (f_dstbe)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* xor32rbe: xor32 $dstbe,$srcbe */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,xor32rbe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + USI opval = XORSI (CPU (h_gpr[FLD (f_dstbe)]), CPU (h_gpr[FLD (f_srcbe)])); + CPU (h_gpr[FLD (f_dstbe)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* arshibe: arsh $dstbe,$imm32 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,arshibe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stbbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + DI opval = SRADI (CPU (h_gpr[FLD (f_dstbe)]), FLD (f_imm32)); + CPU (h_gpr[FLD (f_dstbe)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'D', opval); + } + + return vpc; +#undef FLD +} + +/* arshrbe: arsh $dstbe,$srcbe */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,arshrbe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + DI opval = SRADI (CPU (h_gpr[FLD (f_dstbe)]), CPU (h_gpr[FLD (f_srcbe)])); + CPU (h_gpr[FLD (f_dstbe)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'D', opval); + } + + return vpc; +#undef FLD +} + +/* arsh32ibe: arsh32 $dstbe,$imm32 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,arsh32ibe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stbbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + USI opval = SRASI (CPU (h_gpr[FLD (f_dstbe)]), FLD (f_imm32)); + CPU (h_gpr[FLD (f_dstbe)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* arsh32rbe: arsh32 $dstbe,$srcbe */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,arsh32rbe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + USI opval = SRASI (CPU (h_gpr[FLD (f_dstbe)]), CPU (h_gpr[FLD (f_srcbe)])); + CPU (h_gpr[FLD (f_dstbe)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* negbe: neg $dstbe */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,negbe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_lddwbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + DI opval = NEGDI (CPU (h_gpr[FLD (f_dstbe)])); + CPU (h_gpr[FLD (f_dstbe)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'D', opval); + } + + return vpc; +#undef FLD +} + +/* neg32be: neg32 $dstbe */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,neg32be) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_lddwbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + USI opval = NEGSI (CPU (h_gpr[FLD (f_dstbe)])); + CPU (h_gpr[FLD (f_dstbe)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* movibe: mov $dstbe,$imm32 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,movibe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stbbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + DI opval = FLD (f_imm32); + CPU (h_gpr[FLD (f_dstbe)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'D', opval); + } + + return vpc; +#undef FLD +} + +/* movrbe: mov $dstbe,$srcbe */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,movrbe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + DI opval = CPU (h_gpr[FLD (f_srcbe)]); + CPU (h_gpr[FLD (f_dstbe)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'D', opval); + } + + return vpc; +#undef FLD +} + +/* mov32ibe: mov32 $dstbe,$imm32 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,mov32ibe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stbbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + USI opval = FLD (f_imm32); + CPU (h_gpr[FLD (f_dstbe)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* mov32rbe: mov32 $dstbe,$srcbe */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,mov32rbe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + USI opval = CPU (h_gpr[FLD (f_srcbe)]); + CPU (h_gpr[FLD (f_dstbe)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* endlebe: endle $dstbe,$endsize */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,endlebe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stbbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + DI opval = bpfbf_endle (current_cpu, CPU (h_gpr[FLD (f_dstbe)]), FLD (f_imm32)); + CPU (h_gpr[FLD (f_dstbe)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'D', opval); + } + + return vpc; +#undef FLD +} + +/* endbebe: endbe $dstbe,$endsize */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,endbebe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stbbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + DI opval = bpfbf_endbe (current_cpu, CPU (h_gpr[FLD (f_dstbe)]), FLD (f_imm32)); + CPU (h_gpr[FLD (f_dstbe)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'D', opval); + } + + return vpc; +#undef FLD +} + +/* lddwbe: lddw $dstbe,$imm64 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,lddwbe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_lddwbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 16); + + { + DI opval = FLD (f_imm64); + CPU (h_gpr[FLD (f_dstbe)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'D', opval); + } + + return vpc; +#undef FLD +} + +/* ldabsw: ldabsw $imm32 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,ldabsw) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldindwbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + SI opval = GETMEMSI (current_cpu, pc, ADDDI (GETMEMDI (current_cpu, pc, ADDDI (CPU (h_gpr[((UINT) 6)]), bpfbf_skb_data_offset (current_cpu))), FLD (f_imm32))); + CPU (h_gpr[((UINT) 0)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* ldabsh: ldabsh $imm32 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,ldabsh) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldindwbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + HI opval = GETMEMHI (current_cpu, pc, ADDDI (GETMEMDI (current_cpu, pc, ADDDI (CPU (h_gpr[((UINT) 6)]), bpfbf_skb_data_offset (current_cpu))), FLD (f_imm32))); + CPU (h_gpr[((UINT) 0)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* ldabsb: ldabsb $imm32 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,ldabsb) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldindwbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + QI opval = GETMEMQI (current_cpu, pc, ADDDI (GETMEMDI (current_cpu, pc, ADDDI (CPU (h_gpr[((UINT) 6)]), bpfbf_skb_data_offset (current_cpu))), FLD (f_imm32))); + CPU (h_gpr[((UINT) 0)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* ldabsdw: ldabsdw $imm32 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,ldabsdw) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldindwbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + DI opval = GETMEMDI (current_cpu, pc, ADDDI (GETMEMDI (current_cpu, pc, ADDDI (CPU (h_gpr[((UINT) 6)]), bpfbf_skb_data_offset (current_cpu))), FLD (f_imm32))); + CPU (h_gpr[((UINT) 0)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'D', opval); + } + + return vpc; +#undef FLD +} + +/* ldindwbe: ldindw $srcbe,$imm32 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,ldindwbe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldindwbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + SI opval = GETMEMSI (current_cpu, pc, ADDDI (GETMEMDI (current_cpu, pc, ADDDI (CPU (h_gpr[((UINT) 6)]), bpfbf_skb_data_offset (current_cpu))), ADDDI (CPU (h_gpr[FLD (f_srcbe)]), FLD (f_imm32)))); + CPU (h_gpr[((UINT) 0)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* ldindhbe: ldindh $srcbe,$imm32 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,ldindhbe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldindwbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + HI opval = GETMEMHI (current_cpu, pc, ADDDI (GETMEMDI (current_cpu, pc, ADDDI (CPU (h_gpr[((UINT) 6)]), bpfbf_skb_data_offset (current_cpu))), ADDDI (CPU (h_gpr[FLD (f_srcbe)]), FLD (f_imm32)))); + CPU (h_gpr[((UINT) 0)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* ldindbbe: ldindb $srcbe,$imm32 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,ldindbbe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldindwbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + QI opval = GETMEMQI (current_cpu, pc, ADDDI (GETMEMDI (current_cpu, pc, ADDDI (CPU (h_gpr[((UINT) 6)]), bpfbf_skb_data_offset (current_cpu))), ADDDI (CPU (h_gpr[FLD (f_srcbe)]), FLD (f_imm32)))); + CPU (h_gpr[((UINT) 0)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* ldinddwbe: ldinddw $srcbe,$imm32 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,ldinddwbe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldindwbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + DI opval = GETMEMDI (current_cpu, pc, ADDDI (GETMEMDI (current_cpu, pc, ADDDI (CPU (h_gpr[((UINT) 6)]), bpfbf_skb_data_offset (current_cpu))), ADDDI (CPU (h_gpr[FLD (f_srcbe)]), FLD (f_imm32)))); + CPU (h_gpr[((UINT) 0)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'D', opval); + } + + return vpc; +#undef FLD +} + +/* ldxwbe: ldxw $dstbe,[$srcbe+$offset16] */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,ldxwbe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + SI opval = GETMEMSI (current_cpu, pc, ADDDI (CPU (h_gpr[FLD (f_srcbe)]), FLD (f_offset16))); + CPU (h_gpr[FLD (f_dstbe)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* ldxhbe: ldxh $dstbe,[$srcbe+$offset16] */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,ldxhbe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + HI opval = GETMEMHI (current_cpu, pc, ADDDI (CPU (h_gpr[FLD (f_srcbe)]), FLD (f_offset16))); + CPU (h_gpr[FLD (f_dstbe)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* ldxbbe: ldxb $dstbe,[$srcbe+$offset16] */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,ldxbbe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + QI opval = GETMEMQI (current_cpu, pc, ADDDI (CPU (h_gpr[FLD (f_srcbe)]), FLD (f_offset16))); + CPU (h_gpr[FLD (f_dstbe)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* ldxdwbe: ldxdw $dstbe,[$srcbe+$offset16] */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,ldxdwbe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + DI opval = GETMEMDI (current_cpu, pc, ADDDI (CPU (h_gpr[FLD (f_srcbe)]), FLD (f_offset16))); + CPU (h_gpr[FLD (f_dstbe)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'D', opval); + } + + return vpc; +#undef FLD +} + +/* stxwbe: stxw [$dstbe+$offset16],$srcbe */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,stxwbe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + SI opval = CPU (h_gpr[FLD (f_srcbe)]); + SETMEMSI (current_cpu, pc, ADDDI (CPU (h_gpr[FLD (f_dstbe)]), FLD (f_offset16)), opval); + CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* stxhbe: stxh [$dstbe+$offset16],$srcbe */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,stxhbe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + HI opval = CPU (h_gpr[FLD (f_srcbe)]); + SETMEMHI (current_cpu, pc, ADDDI (CPU (h_gpr[FLD (f_dstbe)]), FLD (f_offset16)), opval); + CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* stxbbe: stxb [$dstbe+$offset16],$srcbe */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,stxbbe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + QI opval = CPU (h_gpr[FLD (f_srcbe)]); + SETMEMQI (current_cpu, pc, ADDDI (CPU (h_gpr[FLD (f_dstbe)]), FLD (f_offset16)), opval); + CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* stxdwbe: stxdw [$dstbe+$offset16],$srcbe */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,stxdwbe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + DI opval = CPU (h_gpr[FLD (f_srcbe)]); + SETMEMDI (current_cpu, pc, ADDDI (CPU (h_gpr[FLD (f_dstbe)]), FLD (f_offset16)), opval); + CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'D', opval); + } + + return vpc; +#undef FLD +} + +/* stbbe: stb [$dstbe+$offset16],$imm32 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,stbbe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stbbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + QI opval = FLD (f_imm32); + SETMEMQI (current_cpu, pc, ADDDI (CPU (h_gpr[FLD (f_dstbe)]), FLD (f_offset16)), opval); + CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* sthbe: sth [$dstbe+$offset16],$imm32 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,sthbe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stbbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + HI opval = FLD (f_imm32); + SETMEMHI (current_cpu, pc, ADDDI (CPU (h_gpr[FLD (f_dstbe)]), FLD (f_offset16)), opval); + CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* stwbe: stw [$dstbe+$offset16],$imm32 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,stwbe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stbbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + SI opval = FLD (f_imm32); + SETMEMSI (current_cpu, pc, ADDDI (CPU (h_gpr[FLD (f_dstbe)]), FLD (f_offset16)), opval); + CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* stdwbe: stdw [$dstbe+$offset16],$imm32 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,stdwbe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stbbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + DI opval = FLD (f_imm32); + SETMEMDI (current_cpu, pc, ADDDI (CPU (h_gpr[FLD (f_dstbe)]), FLD (f_offset16)), opval); + CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'D', opval); + } + + return vpc; +#undef FLD +} + +/* jeqibe: jeq $dstbe,$imm32,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,jeqibe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stbbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (EQDI (CPU (h_gpr[FLD (f_dstbe)]), FLD (f_imm32))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jeqrbe: jeq $dstbe,$srcbe,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,jeqrbe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (EQDI (CPU (h_gpr[FLD (f_dstbe)]), CPU (h_gpr[FLD (f_srcbe)]))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jeq32ibe: jeq32 $dstbe,$imm32,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,jeq32ibe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stbbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (EQSI (CPU (h_gpr[FLD (f_dstbe)]), FLD (f_imm32))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jeq32rbe: jeq32 $dstbe,$srcbe,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,jeq32rbe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (EQSI (CPU (h_gpr[FLD (f_dstbe)]), CPU (h_gpr[FLD (f_srcbe)]))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jgtibe: jgt $dstbe,$imm32,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,jgtibe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stbbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (GTUDI (CPU (h_gpr[FLD (f_dstbe)]), FLD (f_imm32))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jgtrbe: jgt $dstbe,$srcbe,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,jgtrbe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (GTUDI (CPU (h_gpr[FLD (f_dstbe)]), CPU (h_gpr[FLD (f_srcbe)]))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jgt32ibe: jgt32 $dstbe,$imm32,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,jgt32ibe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stbbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (GTUSI (CPU (h_gpr[FLD (f_dstbe)]), FLD (f_imm32))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jgt32rbe: jgt32 $dstbe,$srcbe,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,jgt32rbe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (GTUSI (CPU (h_gpr[FLD (f_dstbe)]), CPU (h_gpr[FLD (f_srcbe)]))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jgeibe: jge $dstbe,$imm32,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,jgeibe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stbbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (GEUDI (CPU (h_gpr[FLD (f_dstbe)]), FLD (f_imm32))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jgerbe: jge $dstbe,$srcbe,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,jgerbe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (GEUDI (CPU (h_gpr[FLD (f_dstbe)]), CPU (h_gpr[FLD (f_srcbe)]))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jge32ibe: jge32 $dstbe,$imm32,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,jge32ibe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stbbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (GEUSI (CPU (h_gpr[FLD (f_dstbe)]), FLD (f_imm32))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jge32rbe: jge32 $dstbe,$srcbe,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,jge32rbe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (GEUSI (CPU (h_gpr[FLD (f_dstbe)]), CPU (h_gpr[FLD (f_srcbe)]))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jltibe: jlt $dstbe,$imm32,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,jltibe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stbbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (LTUDI (CPU (h_gpr[FLD (f_dstbe)]), FLD (f_imm32))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jltrbe: jlt $dstbe,$srcbe,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,jltrbe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (LTUDI (CPU (h_gpr[FLD (f_dstbe)]), CPU (h_gpr[FLD (f_srcbe)]))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jlt32ibe: jlt32 $dstbe,$imm32,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,jlt32ibe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stbbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (LTUSI (CPU (h_gpr[FLD (f_dstbe)]), FLD (f_imm32))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jlt32rbe: jlt32 $dstbe,$srcbe,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,jlt32rbe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (LTUSI (CPU (h_gpr[FLD (f_dstbe)]), CPU (h_gpr[FLD (f_srcbe)]))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jleibe: jle $dstbe,$imm32,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,jleibe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stbbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (LEUDI (CPU (h_gpr[FLD (f_dstbe)]), FLD (f_imm32))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jlerbe: jle $dstbe,$srcbe,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,jlerbe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (LEUDI (CPU (h_gpr[FLD (f_dstbe)]), CPU (h_gpr[FLD (f_srcbe)]))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jle32ibe: jle32 $dstbe,$imm32,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,jle32ibe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stbbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (LEUSI (CPU (h_gpr[FLD (f_dstbe)]), FLD (f_imm32))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jle32rbe: jle32 $dstbe,$srcbe,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,jle32rbe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (LEUSI (CPU (h_gpr[FLD (f_dstbe)]), CPU (h_gpr[FLD (f_srcbe)]))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jsetibe: jset $dstbe,$imm32,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,jsetibe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stbbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (ANDDI (CPU (h_gpr[FLD (f_dstbe)]), FLD (f_imm32))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jsetrbe: jset $dstbe,$srcbe,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,jsetrbe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (ANDDI (CPU (h_gpr[FLD (f_dstbe)]), CPU (h_gpr[FLD (f_srcbe)]))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jset32ibe: jset32 $dstbe,$imm32,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,jset32ibe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stbbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (ANDSI (CPU (h_gpr[FLD (f_dstbe)]), FLD (f_imm32))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jset32rbe: jset32 $dstbe,$srcbe,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,jset32rbe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (ANDSI (CPU (h_gpr[FLD (f_dstbe)]), CPU (h_gpr[FLD (f_srcbe)]))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jneibe: jne $dstbe,$imm32,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,jneibe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stbbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (NEDI (CPU (h_gpr[FLD (f_dstbe)]), FLD (f_imm32))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jnerbe: jne $dstbe,$srcbe,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,jnerbe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (NEDI (CPU (h_gpr[FLD (f_dstbe)]), CPU (h_gpr[FLD (f_srcbe)]))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jne32ibe: jne32 $dstbe,$imm32,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,jne32ibe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stbbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (NESI (CPU (h_gpr[FLD (f_dstbe)]), FLD (f_imm32))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jne32rbe: jne32 $dstbe,$srcbe,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,jne32rbe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (NESI (CPU (h_gpr[FLD (f_dstbe)]), CPU (h_gpr[FLD (f_srcbe)]))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jsgtibe: jsgt $dstbe,$imm32,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,jsgtibe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stbbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (GTDI (CPU (h_gpr[FLD (f_dstbe)]), FLD (f_imm32))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jsgtrbe: jsgt $dstbe,$srcbe,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,jsgtrbe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (GTDI (CPU (h_gpr[FLD (f_dstbe)]), CPU (h_gpr[FLD (f_srcbe)]))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jsgt32ibe: jsgt32 $dstbe,$imm32,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,jsgt32ibe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stbbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (GTSI (CPU (h_gpr[FLD (f_dstbe)]), FLD (f_imm32))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jsgt32rbe: jsgt32 $dstbe,$srcbe,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,jsgt32rbe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (GTSI (CPU (h_gpr[FLD (f_dstbe)]), CPU (h_gpr[FLD (f_srcbe)]))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jsgeibe: jsge $dstbe,$imm32,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,jsgeibe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stbbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (GEDI (CPU (h_gpr[FLD (f_dstbe)]), FLD (f_imm32))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jsgerbe: jsge $dstbe,$srcbe,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,jsgerbe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (GEDI (CPU (h_gpr[FLD (f_dstbe)]), CPU (h_gpr[FLD (f_srcbe)]))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jsge32ibe: jsge32 $dstbe,$imm32,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,jsge32ibe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stbbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (GESI (CPU (h_gpr[FLD (f_dstbe)]), FLD (f_imm32))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jsge32rbe: jsge32 $dstbe,$srcbe,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,jsge32rbe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (GESI (CPU (h_gpr[FLD (f_dstbe)]), CPU (h_gpr[FLD (f_srcbe)]))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jsltibe: jslt $dstbe,$imm32,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,jsltibe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stbbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (LTDI (CPU (h_gpr[FLD (f_dstbe)]), FLD (f_imm32))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jsltrbe: jslt $dstbe,$srcbe,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,jsltrbe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (LTDI (CPU (h_gpr[FLD (f_dstbe)]), CPU (h_gpr[FLD (f_srcbe)]))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jslt32ibe: jslt32 $dstbe,$imm32,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,jslt32ibe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stbbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (LTSI (CPU (h_gpr[FLD (f_dstbe)]), FLD (f_imm32))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jslt32rbe: jslt32 $dstbe,$srcbe,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,jslt32rbe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (LTSI (CPU (h_gpr[FLD (f_dstbe)]), CPU (h_gpr[FLD (f_srcbe)]))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jsleibe: jsle $dstbe,$imm32,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,jsleibe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stbbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (LEDI (CPU (h_gpr[FLD (f_dstbe)]), FLD (f_imm32))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jslerbe: jsle $dstbe,$srcbe,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,jslerbe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (LEDI (CPU (h_gpr[FLD (f_dstbe)]), CPU (h_gpr[FLD (f_srcbe)]))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jsle32ibe: jsle32 $dstbe,$imm32,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,jsle32ibe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stbbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (LESI (CPU (h_gpr[FLD (f_dstbe)]), FLD (f_imm32))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jsle32rbe: jsle32 $dstbe,$srcbe,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,jsle32rbe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (LESI (CPU (h_gpr[FLD (f_dstbe)]), CPU (h_gpr[FLD (f_srcbe)]))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* callbe: call $disp32 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,callbe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldindwbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +bpfbf_call (current_cpu, FLD (f_imm32), FLD (f_srcbe)); + + return vpc; +#undef FLD +} + +/* ja: ja $disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,ja) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stbbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } + + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* exit: exit */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,exit) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_empty.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +bpfbf_exit (current_cpu); + + return vpc; +#undef FLD +} + +/* xadddwbe: xadddw [$dstbe+$offset16],$srcbe */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,xadddwbe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +{ + DI tmp_tmp; + tmp_tmp = GETMEMDI (current_cpu, pc, ADDDI (CPU (h_gpr[FLD (f_dstbe)]), FLD (f_offset16))); + { + DI opval = ADDDI (tmp_tmp, CPU (h_gpr[FLD (f_srcbe)])); + SETMEMDI (current_cpu, pc, ADDDI (CPU (h_gpr[FLD (f_dstbe)]), FLD (f_offset16)), opval); + CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'D', opval); + } +} + + return vpc; +#undef FLD +} + +/* xaddwbe: xaddw [$dstbe+$offset16],$srcbe */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,xaddwbe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwbe.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +{ + SI tmp_tmp; + tmp_tmp = GETMEMSI (current_cpu, pc, ADDDI (CPU (h_gpr[FLD (f_dstbe)]), FLD (f_offset16))); + { + SI opval = ADDSI (tmp_tmp, CPU (h_gpr[FLD (f_srcbe)])); + SETMEMSI (current_cpu, pc, ADDDI (CPU (h_gpr[FLD (f_dstbe)]), FLD (f_offset16)), opval); + CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); + } +} + + return vpc; +#undef FLD +} + +/* brkpt: brkpt */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfbe,brkpt) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_empty.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +bpfbf_breakpoint (current_cpu); + + return vpc; +#undef FLD +} + +/* Table of all semantic fns. */ + +static const struct sem_fn_desc sem_fns[] = { + { BPFBF_EBPFBE_INSN_X_INVALID, SEM_FN_NAME (bpfbf_ebpfbe,x_invalid) }, + { BPFBF_EBPFBE_INSN_X_AFTER, SEM_FN_NAME (bpfbf_ebpfbe,x_after) }, + { BPFBF_EBPFBE_INSN_X_BEFORE, SEM_FN_NAME (bpfbf_ebpfbe,x_before) }, + { BPFBF_EBPFBE_INSN_X_CTI_CHAIN, SEM_FN_NAME (bpfbf_ebpfbe,x_cti_chain) }, + { BPFBF_EBPFBE_INSN_X_CHAIN, SEM_FN_NAME (bpfbf_ebpfbe,x_chain) }, + { BPFBF_EBPFBE_INSN_X_BEGIN, SEM_FN_NAME (bpfbf_ebpfbe,x_begin) }, + { BPFBF_EBPFBE_INSN_ADDIBE, SEM_FN_NAME (bpfbf_ebpfbe,addibe) }, + { BPFBF_EBPFBE_INSN_ADDRBE, SEM_FN_NAME (bpfbf_ebpfbe,addrbe) }, + { BPFBF_EBPFBE_INSN_ADD32IBE, SEM_FN_NAME (bpfbf_ebpfbe,add32ibe) }, + { BPFBF_EBPFBE_INSN_ADD32RBE, SEM_FN_NAME (bpfbf_ebpfbe,add32rbe) }, + { BPFBF_EBPFBE_INSN_SUBIBE, SEM_FN_NAME (bpfbf_ebpfbe,subibe) }, + { BPFBF_EBPFBE_INSN_SUBRBE, SEM_FN_NAME (bpfbf_ebpfbe,subrbe) }, + { BPFBF_EBPFBE_INSN_SUB32IBE, SEM_FN_NAME (bpfbf_ebpfbe,sub32ibe) }, + { BPFBF_EBPFBE_INSN_SUB32RBE, SEM_FN_NAME (bpfbf_ebpfbe,sub32rbe) }, + { BPFBF_EBPFBE_INSN_MULIBE, SEM_FN_NAME (bpfbf_ebpfbe,mulibe) }, + { BPFBF_EBPFBE_INSN_MULRBE, SEM_FN_NAME (bpfbf_ebpfbe,mulrbe) }, + { BPFBF_EBPFBE_INSN_MUL32IBE, SEM_FN_NAME (bpfbf_ebpfbe,mul32ibe) }, + { BPFBF_EBPFBE_INSN_MUL32RBE, SEM_FN_NAME (bpfbf_ebpfbe,mul32rbe) }, + { BPFBF_EBPFBE_INSN_DIVIBE, SEM_FN_NAME (bpfbf_ebpfbe,divibe) }, + { BPFBF_EBPFBE_INSN_DIVRBE, SEM_FN_NAME (bpfbf_ebpfbe,divrbe) }, + { BPFBF_EBPFBE_INSN_DIV32IBE, SEM_FN_NAME (bpfbf_ebpfbe,div32ibe) }, + { BPFBF_EBPFBE_INSN_DIV32RBE, SEM_FN_NAME (bpfbf_ebpfbe,div32rbe) }, + { BPFBF_EBPFBE_INSN_ORIBE, SEM_FN_NAME (bpfbf_ebpfbe,oribe) }, + { BPFBF_EBPFBE_INSN_ORRBE, SEM_FN_NAME (bpfbf_ebpfbe,orrbe) }, + { BPFBF_EBPFBE_INSN_OR32IBE, SEM_FN_NAME (bpfbf_ebpfbe,or32ibe) }, + { BPFBF_EBPFBE_INSN_OR32RBE, SEM_FN_NAME (bpfbf_ebpfbe,or32rbe) }, + { BPFBF_EBPFBE_INSN_ANDIBE, SEM_FN_NAME (bpfbf_ebpfbe,andibe) }, + { BPFBF_EBPFBE_INSN_ANDRBE, SEM_FN_NAME (bpfbf_ebpfbe,andrbe) }, + { BPFBF_EBPFBE_INSN_AND32IBE, SEM_FN_NAME (bpfbf_ebpfbe,and32ibe) }, + { BPFBF_EBPFBE_INSN_AND32RBE, SEM_FN_NAME (bpfbf_ebpfbe,and32rbe) }, + { BPFBF_EBPFBE_INSN_LSHIBE, SEM_FN_NAME (bpfbf_ebpfbe,lshibe) }, + { BPFBF_EBPFBE_INSN_LSHRBE, SEM_FN_NAME (bpfbf_ebpfbe,lshrbe) }, + { BPFBF_EBPFBE_INSN_LSH32IBE, SEM_FN_NAME (bpfbf_ebpfbe,lsh32ibe) }, + { BPFBF_EBPFBE_INSN_LSH32RBE, SEM_FN_NAME (bpfbf_ebpfbe,lsh32rbe) }, + { BPFBF_EBPFBE_INSN_RSHIBE, SEM_FN_NAME (bpfbf_ebpfbe,rshibe) }, + { BPFBF_EBPFBE_INSN_RSHRBE, SEM_FN_NAME (bpfbf_ebpfbe,rshrbe) }, + { BPFBF_EBPFBE_INSN_RSH32IBE, SEM_FN_NAME (bpfbf_ebpfbe,rsh32ibe) }, + { BPFBF_EBPFBE_INSN_RSH32RBE, SEM_FN_NAME (bpfbf_ebpfbe,rsh32rbe) }, + { BPFBF_EBPFBE_INSN_MODIBE, SEM_FN_NAME (bpfbf_ebpfbe,modibe) }, + { BPFBF_EBPFBE_INSN_MODRBE, SEM_FN_NAME (bpfbf_ebpfbe,modrbe) }, + { BPFBF_EBPFBE_INSN_MOD32IBE, SEM_FN_NAME (bpfbf_ebpfbe,mod32ibe) }, + { BPFBF_EBPFBE_INSN_MOD32RBE, SEM_FN_NAME (bpfbf_ebpfbe,mod32rbe) }, + { BPFBF_EBPFBE_INSN_XORIBE, SEM_FN_NAME (bpfbf_ebpfbe,xoribe) }, + { BPFBF_EBPFBE_INSN_XORRBE, SEM_FN_NAME (bpfbf_ebpfbe,xorrbe) }, + { BPFBF_EBPFBE_INSN_XOR32IBE, SEM_FN_NAME (bpfbf_ebpfbe,xor32ibe) }, + { BPFBF_EBPFBE_INSN_XOR32RBE, SEM_FN_NAME (bpfbf_ebpfbe,xor32rbe) }, + { BPFBF_EBPFBE_INSN_ARSHIBE, SEM_FN_NAME (bpfbf_ebpfbe,arshibe) }, + { BPFBF_EBPFBE_INSN_ARSHRBE, SEM_FN_NAME (bpfbf_ebpfbe,arshrbe) }, + { BPFBF_EBPFBE_INSN_ARSH32IBE, SEM_FN_NAME (bpfbf_ebpfbe,arsh32ibe) }, + { BPFBF_EBPFBE_INSN_ARSH32RBE, SEM_FN_NAME (bpfbf_ebpfbe,arsh32rbe) }, + { BPFBF_EBPFBE_INSN_NEGBE, SEM_FN_NAME (bpfbf_ebpfbe,negbe) }, + { BPFBF_EBPFBE_INSN_NEG32BE, SEM_FN_NAME (bpfbf_ebpfbe,neg32be) }, + { BPFBF_EBPFBE_INSN_MOVIBE, SEM_FN_NAME (bpfbf_ebpfbe,movibe) }, + { BPFBF_EBPFBE_INSN_MOVRBE, SEM_FN_NAME (bpfbf_ebpfbe,movrbe) }, + { BPFBF_EBPFBE_INSN_MOV32IBE, SEM_FN_NAME (bpfbf_ebpfbe,mov32ibe) }, + { BPFBF_EBPFBE_INSN_MOV32RBE, SEM_FN_NAME (bpfbf_ebpfbe,mov32rbe) }, + { BPFBF_EBPFBE_INSN_ENDLEBE, SEM_FN_NAME (bpfbf_ebpfbe,endlebe) }, + { BPFBF_EBPFBE_INSN_ENDBEBE, SEM_FN_NAME (bpfbf_ebpfbe,endbebe) }, + { BPFBF_EBPFBE_INSN_LDDWBE, SEM_FN_NAME (bpfbf_ebpfbe,lddwbe) }, + { BPFBF_EBPFBE_INSN_LDABSW, SEM_FN_NAME (bpfbf_ebpfbe,ldabsw) }, + { BPFBF_EBPFBE_INSN_LDABSH, SEM_FN_NAME (bpfbf_ebpfbe,ldabsh) }, + { BPFBF_EBPFBE_INSN_LDABSB, SEM_FN_NAME (bpfbf_ebpfbe,ldabsb) }, + { BPFBF_EBPFBE_INSN_LDABSDW, SEM_FN_NAME (bpfbf_ebpfbe,ldabsdw) }, + { BPFBF_EBPFBE_INSN_LDINDWBE, SEM_FN_NAME (bpfbf_ebpfbe,ldindwbe) }, + { BPFBF_EBPFBE_INSN_LDINDHBE, SEM_FN_NAME (bpfbf_ebpfbe,ldindhbe) }, + { BPFBF_EBPFBE_INSN_LDINDBBE, SEM_FN_NAME (bpfbf_ebpfbe,ldindbbe) }, + { BPFBF_EBPFBE_INSN_LDINDDWBE, SEM_FN_NAME (bpfbf_ebpfbe,ldinddwbe) }, + { BPFBF_EBPFBE_INSN_LDXWBE, SEM_FN_NAME (bpfbf_ebpfbe,ldxwbe) }, + { BPFBF_EBPFBE_INSN_LDXHBE, SEM_FN_NAME (bpfbf_ebpfbe,ldxhbe) }, + { BPFBF_EBPFBE_INSN_LDXBBE, SEM_FN_NAME (bpfbf_ebpfbe,ldxbbe) }, + { BPFBF_EBPFBE_INSN_LDXDWBE, SEM_FN_NAME (bpfbf_ebpfbe,ldxdwbe) }, + { BPFBF_EBPFBE_INSN_STXWBE, SEM_FN_NAME (bpfbf_ebpfbe,stxwbe) }, + { BPFBF_EBPFBE_INSN_STXHBE, SEM_FN_NAME (bpfbf_ebpfbe,stxhbe) }, + { BPFBF_EBPFBE_INSN_STXBBE, SEM_FN_NAME (bpfbf_ebpfbe,stxbbe) }, + { BPFBF_EBPFBE_INSN_STXDWBE, SEM_FN_NAME (bpfbf_ebpfbe,stxdwbe) }, + { BPFBF_EBPFBE_INSN_STBBE, SEM_FN_NAME (bpfbf_ebpfbe,stbbe) }, + { BPFBF_EBPFBE_INSN_STHBE, SEM_FN_NAME (bpfbf_ebpfbe,sthbe) }, + { BPFBF_EBPFBE_INSN_STWBE, SEM_FN_NAME (bpfbf_ebpfbe,stwbe) }, + { BPFBF_EBPFBE_INSN_STDWBE, SEM_FN_NAME (bpfbf_ebpfbe,stdwbe) }, + { BPFBF_EBPFBE_INSN_JEQIBE, SEM_FN_NAME (bpfbf_ebpfbe,jeqibe) }, + { BPFBF_EBPFBE_INSN_JEQRBE, SEM_FN_NAME (bpfbf_ebpfbe,jeqrbe) }, + { BPFBF_EBPFBE_INSN_JEQ32IBE, SEM_FN_NAME (bpfbf_ebpfbe,jeq32ibe) }, + { BPFBF_EBPFBE_INSN_JEQ32RBE, SEM_FN_NAME (bpfbf_ebpfbe,jeq32rbe) }, + { BPFBF_EBPFBE_INSN_JGTIBE, SEM_FN_NAME (bpfbf_ebpfbe,jgtibe) }, + { BPFBF_EBPFBE_INSN_JGTRBE, SEM_FN_NAME (bpfbf_ebpfbe,jgtrbe) }, + { BPFBF_EBPFBE_INSN_JGT32IBE, SEM_FN_NAME (bpfbf_ebpfbe,jgt32ibe) }, + { BPFBF_EBPFBE_INSN_JGT32RBE, SEM_FN_NAME (bpfbf_ebpfbe,jgt32rbe) }, + { BPFBF_EBPFBE_INSN_JGEIBE, SEM_FN_NAME (bpfbf_ebpfbe,jgeibe) }, + { BPFBF_EBPFBE_INSN_JGERBE, SEM_FN_NAME (bpfbf_ebpfbe,jgerbe) }, + { BPFBF_EBPFBE_INSN_JGE32IBE, SEM_FN_NAME (bpfbf_ebpfbe,jge32ibe) }, + { BPFBF_EBPFBE_INSN_JGE32RBE, SEM_FN_NAME (bpfbf_ebpfbe,jge32rbe) }, + { BPFBF_EBPFBE_INSN_JLTIBE, SEM_FN_NAME (bpfbf_ebpfbe,jltibe) }, + { BPFBF_EBPFBE_INSN_JLTRBE, SEM_FN_NAME (bpfbf_ebpfbe,jltrbe) }, + { BPFBF_EBPFBE_INSN_JLT32IBE, SEM_FN_NAME (bpfbf_ebpfbe,jlt32ibe) }, + { BPFBF_EBPFBE_INSN_JLT32RBE, SEM_FN_NAME (bpfbf_ebpfbe,jlt32rbe) }, + { BPFBF_EBPFBE_INSN_JLEIBE, SEM_FN_NAME (bpfbf_ebpfbe,jleibe) }, + { BPFBF_EBPFBE_INSN_JLERBE, SEM_FN_NAME (bpfbf_ebpfbe,jlerbe) }, + { BPFBF_EBPFBE_INSN_JLE32IBE, SEM_FN_NAME (bpfbf_ebpfbe,jle32ibe) }, + { BPFBF_EBPFBE_INSN_JLE32RBE, SEM_FN_NAME (bpfbf_ebpfbe,jle32rbe) }, + { BPFBF_EBPFBE_INSN_JSETIBE, SEM_FN_NAME (bpfbf_ebpfbe,jsetibe) }, + { BPFBF_EBPFBE_INSN_JSETRBE, SEM_FN_NAME (bpfbf_ebpfbe,jsetrbe) }, + { BPFBF_EBPFBE_INSN_JSET32IBE, SEM_FN_NAME (bpfbf_ebpfbe,jset32ibe) }, + { BPFBF_EBPFBE_INSN_JSET32RBE, SEM_FN_NAME (bpfbf_ebpfbe,jset32rbe) }, + { BPFBF_EBPFBE_INSN_JNEIBE, SEM_FN_NAME (bpfbf_ebpfbe,jneibe) }, + { BPFBF_EBPFBE_INSN_JNERBE, SEM_FN_NAME (bpfbf_ebpfbe,jnerbe) }, + { BPFBF_EBPFBE_INSN_JNE32IBE, SEM_FN_NAME (bpfbf_ebpfbe,jne32ibe) }, + { BPFBF_EBPFBE_INSN_JNE32RBE, SEM_FN_NAME (bpfbf_ebpfbe,jne32rbe) }, + { BPFBF_EBPFBE_INSN_JSGTIBE, SEM_FN_NAME (bpfbf_ebpfbe,jsgtibe) }, + { BPFBF_EBPFBE_INSN_JSGTRBE, SEM_FN_NAME (bpfbf_ebpfbe,jsgtrbe) }, + { BPFBF_EBPFBE_INSN_JSGT32IBE, SEM_FN_NAME (bpfbf_ebpfbe,jsgt32ibe) }, + { BPFBF_EBPFBE_INSN_JSGT32RBE, SEM_FN_NAME (bpfbf_ebpfbe,jsgt32rbe) }, + { BPFBF_EBPFBE_INSN_JSGEIBE, SEM_FN_NAME (bpfbf_ebpfbe,jsgeibe) }, + { BPFBF_EBPFBE_INSN_JSGERBE, SEM_FN_NAME (bpfbf_ebpfbe,jsgerbe) }, + { BPFBF_EBPFBE_INSN_JSGE32IBE, SEM_FN_NAME (bpfbf_ebpfbe,jsge32ibe) }, + { BPFBF_EBPFBE_INSN_JSGE32RBE, SEM_FN_NAME (bpfbf_ebpfbe,jsge32rbe) }, + { BPFBF_EBPFBE_INSN_JSLTIBE, SEM_FN_NAME (bpfbf_ebpfbe,jsltibe) }, + { BPFBF_EBPFBE_INSN_JSLTRBE, SEM_FN_NAME (bpfbf_ebpfbe,jsltrbe) }, + { BPFBF_EBPFBE_INSN_JSLT32IBE, SEM_FN_NAME (bpfbf_ebpfbe,jslt32ibe) }, + { BPFBF_EBPFBE_INSN_JSLT32RBE, SEM_FN_NAME (bpfbf_ebpfbe,jslt32rbe) }, + { BPFBF_EBPFBE_INSN_JSLEIBE, SEM_FN_NAME (bpfbf_ebpfbe,jsleibe) }, + { BPFBF_EBPFBE_INSN_JSLERBE, SEM_FN_NAME (bpfbf_ebpfbe,jslerbe) }, + { BPFBF_EBPFBE_INSN_JSLE32IBE, SEM_FN_NAME (bpfbf_ebpfbe,jsle32ibe) }, + { BPFBF_EBPFBE_INSN_JSLE32RBE, SEM_FN_NAME (bpfbf_ebpfbe,jsle32rbe) }, + { BPFBF_EBPFBE_INSN_CALLBE, SEM_FN_NAME (bpfbf_ebpfbe,callbe) }, + { BPFBF_EBPFBE_INSN_JA, SEM_FN_NAME (bpfbf_ebpfbe,ja) }, + { BPFBF_EBPFBE_INSN_EXIT, SEM_FN_NAME (bpfbf_ebpfbe,exit) }, + { BPFBF_EBPFBE_INSN_XADDDWBE, SEM_FN_NAME (bpfbf_ebpfbe,xadddwbe) }, + { BPFBF_EBPFBE_INSN_XADDWBE, SEM_FN_NAME (bpfbf_ebpfbe,xaddwbe) }, + { BPFBF_EBPFBE_INSN_BRKPT, SEM_FN_NAME (bpfbf_ebpfbe,brkpt) }, + { 0, 0 } +}; + +/* Add the semantic fns to IDESC_TABLE. */ + +void +SEM_FN_NAME (bpfbf_ebpfbe,init_idesc_table) (SIM_CPU *current_cpu) +{ + IDESC *idesc_table = CPU_IDESC (current_cpu); + const struct sem_fn_desc *sf; + int mach_num = MACH_NUM (CPU_MACH (current_cpu)); + + for (sf = &sem_fns[0]; sf->fn != 0; ++sf) + { + const CGEN_INSN *insn = idesc_table[sf->index].idata; + int valid_p = (CGEN_INSN_VIRTUAL_P (insn) + || CGEN_INSN_MACH_HAS_P (insn, mach_num)); +#if FAST_P + if (valid_p) + idesc_table[sf->index].sem_fast = sf->fn; + else + idesc_table[sf->index].sem_fast = SEM_FN_NAME (bpfbf_ebpfbe,x_invalid); +#else + if (valid_p) + idesc_table[sf->index].sem_full = sf->fn; + else + idesc_table[sf->index].sem_full = SEM_FN_NAME (bpfbf_ebpfbe,x_invalid); +#endif + } +} + diff -Nru gdb-9.1/sim/bpf/sem-le.c gdb-10.2/sim/bpf/sem-le.c --- gdb-9.1/sim/bpf/sem-le.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/sim/bpf/sem-le.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,3207 @@ +/* Simulator instruction semantics for bpfbf. + +THIS FILE IS MACHINE GENERATED WITH CGEN. + +Copyright (C) 1996-2021 Free Software Foundation, Inc. + +This file is part of the GNU simulators. + + This file is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, 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. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. + +*/ + +#define WANT_CPU bpfbf +#define WANT_CPU_BPFBF + +#include "sim-main.h" +#include "cgen-mem.h" +#include "cgen-ops.h" + +#undef GET_ATTR +#define GET_ATTR(cpu, num, attr) CGEN_ATTR_VALUE (NULL, abuf->idesc->attrs, CGEN_INSN_##attr) + +/* This is used so that we can compile two copies of the semantic code, + one with full feature support and one without that runs fast(er). + FAST_P, when desired, is defined on the command line, -DFAST_P=1. */ +#if FAST_P +#define SEM_FN_NAME(cpu,fn) XCONCAT3 (cpu,_semf_,fn) +#undef CGEN_TRACE_RESULT +#define CGEN_TRACE_RESULT(cpu, abuf, name, type, val) +#else +#define SEM_FN_NAME(cpu,fn) XCONCAT3 (cpu,_sem_,fn) +#endif + +/* x-invalid: --invalid-- */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,x_invalid) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_empty.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 0); + + { + /* Update the recorded pc in the cpu state struct. + Only necessary for WITH_SCACHE case, but to avoid the + conditional compilation .... */ + SET_H_PC (pc); + /* Virtual insns have zero size. Overwrite vpc with address of next insn + using the default-insn-bitsize spec. When executing insns in parallel + we may want to queue the fault and continue execution. */ + vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + vpc = sim_engine_invalid_insn (current_cpu, pc, vpc); + } + + return vpc; +#undef FLD +} + +/* x-after: --after-- */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,x_after) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_empty.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 0); + + { +#if WITH_SCACHE_PBB_BPFBF_EBPFLE + bpfbf_ebpfle_pbb_after (current_cpu, sem_arg); +#endif + } + + return vpc; +#undef FLD +} + +/* x-before: --before-- */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,x_before) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_empty.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 0); + + { +#if WITH_SCACHE_PBB_BPFBF_EBPFLE + bpfbf_ebpfle_pbb_before (current_cpu, sem_arg); +#endif + } + + return vpc; +#undef FLD +} + +/* x-cti-chain: --cti-chain-- */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,x_cti_chain) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_empty.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 0); + + { +#if WITH_SCACHE_PBB_BPFBF_EBPFLE +#ifdef DEFINE_SWITCH + vpc = bpfbf_ebpfle_pbb_cti_chain (current_cpu, sem_arg, + pbb_br_type, pbb_br_npc); + BREAK (sem); +#else + /* FIXME: Allow provision of explicit ifmt spec in insn spec. */ + vpc = bpfbf_ebpfle_pbb_cti_chain (current_cpu, sem_arg, + CPU_PBB_BR_TYPE (current_cpu), + CPU_PBB_BR_NPC (current_cpu)); +#endif +#endif + } + + return vpc; +#undef FLD +} + +/* x-chain: --chain-- */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,x_chain) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_empty.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 0); + + { +#if WITH_SCACHE_PBB_BPFBF_EBPFLE + vpc = bpfbf_ebpfle_pbb_chain (current_cpu, sem_arg); +#ifdef DEFINE_SWITCH + BREAK (sem); +#endif +#endif + } + + return vpc; +#undef FLD +} + +/* x-begin: --begin-- */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,x_begin) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_empty.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 0); + + { +#if WITH_SCACHE_PBB_BPFBF_EBPFLE +#if defined DEFINE_SWITCH || defined FAST_P + /* In the switch case FAST_P is a constant, allowing several optimizations + in any called inline functions. */ + vpc = bpfbf_ebpfle_pbb_begin (current_cpu, FAST_P); +#else +#if 0 /* cgen engine can't handle dynamic fast/full switching yet. */ + vpc = bpfbf_ebpfle_pbb_begin (current_cpu, STATE_RUN_FAST_P (CPU_STATE (current_cpu))); +#else + vpc = bpfbf_ebpfle_pbb_begin (current_cpu, 0); +#endif +#endif +#endif + } + + return vpc; +#undef FLD +} + +/* addile: add $dstle,$imm32 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,addile) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stble.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + DI opval = ADDDI (CPU (h_gpr[FLD (f_dstle)]), FLD (f_imm32)); + CPU (h_gpr[FLD (f_dstle)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'D', opval); + } + + return vpc; +#undef FLD +} + +/* addrle: add $dstle,$srcle */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,addrle) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwle.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + DI opval = ADDDI (CPU (h_gpr[FLD (f_dstle)]), CPU (h_gpr[FLD (f_srcle)])); + CPU (h_gpr[FLD (f_dstle)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'D', opval); + } + + return vpc; +#undef FLD +} + +/* add32ile: add32 $dstle,$imm32 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,add32ile) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stble.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + USI opval = ADDSI (CPU (h_gpr[FLD (f_dstle)]), FLD (f_imm32)); + CPU (h_gpr[FLD (f_dstle)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* add32rle: add32 $dstle,$srcle */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,add32rle) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwle.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + USI opval = ADDSI (CPU (h_gpr[FLD (f_dstle)]), CPU (h_gpr[FLD (f_srcle)])); + CPU (h_gpr[FLD (f_dstle)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* subile: sub $dstle,$imm32 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,subile) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stble.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + DI opval = SUBDI (CPU (h_gpr[FLD (f_dstle)]), FLD (f_imm32)); + CPU (h_gpr[FLD (f_dstle)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'D', opval); + } + + return vpc; +#undef FLD +} + +/* subrle: sub $dstle,$srcle */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,subrle) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwle.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + DI opval = SUBDI (CPU (h_gpr[FLD (f_dstle)]), CPU (h_gpr[FLD (f_srcle)])); + CPU (h_gpr[FLD (f_dstle)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'D', opval); + } + + return vpc; +#undef FLD +} + +/* sub32ile: sub32 $dstle,$imm32 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,sub32ile) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stble.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + USI opval = SUBSI (CPU (h_gpr[FLD (f_dstle)]), FLD (f_imm32)); + CPU (h_gpr[FLD (f_dstle)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* sub32rle: sub32 $dstle,$srcle */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,sub32rle) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwle.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + USI opval = SUBSI (CPU (h_gpr[FLD (f_dstle)]), CPU (h_gpr[FLD (f_srcle)])); + CPU (h_gpr[FLD (f_dstle)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* mulile: mul $dstle,$imm32 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,mulile) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stble.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + DI opval = MULDI (CPU (h_gpr[FLD (f_dstle)]), FLD (f_imm32)); + CPU (h_gpr[FLD (f_dstle)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'D', opval); + } + + return vpc; +#undef FLD +} + +/* mulrle: mul $dstle,$srcle */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,mulrle) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwle.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + DI opval = MULDI (CPU (h_gpr[FLD (f_dstle)]), CPU (h_gpr[FLD (f_srcle)])); + CPU (h_gpr[FLD (f_dstle)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'D', opval); + } + + return vpc; +#undef FLD +} + +/* mul32ile: mul32 $dstle,$imm32 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,mul32ile) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stble.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + USI opval = MULSI (CPU (h_gpr[FLD (f_dstle)]), FLD (f_imm32)); + CPU (h_gpr[FLD (f_dstle)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* mul32rle: mul32 $dstle,$srcle */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,mul32rle) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwle.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + USI opval = MULSI (CPU (h_gpr[FLD (f_dstle)]), CPU (h_gpr[FLD (f_srcle)])); + CPU (h_gpr[FLD (f_dstle)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* divile: div $dstle,$imm32 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,divile) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stble.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + DI opval = UDIVDI (CPU (h_gpr[FLD (f_dstle)]), FLD (f_imm32)); + CPU (h_gpr[FLD (f_dstle)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'D', opval); + } + + return vpc; +#undef FLD +} + +/* divrle: div $dstle,$srcle */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,divrle) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwle.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + DI opval = UDIVDI (CPU (h_gpr[FLD (f_dstle)]), CPU (h_gpr[FLD (f_srcle)])); + CPU (h_gpr[FLD (f_dstle)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'D', opval); + } + + return vpc; +#undef FLD +} + +/* div32ile: div32 $dstle,$imm32 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,div32ile) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stble.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + USI opval = UDIVSI (CPU (h_gpr[FLD (f_dstle)]), FLD (f_imm32)); + CPU (h_gpr[FLD (f_dstle)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* div32rle: div32 $dstle,$srcle */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,div32rle) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwle.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + USI opval = UDIVSI (CPU (h_gpr[FLD (f_dstle)]), CPU (h_gpr[FLD (f_srcle)])); + CPU (h_gpr[FLD (f_dstle)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* orile: or $dstle,$imm32 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,orile) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stble.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + DI opval = ORDI (CPU (h_gpr[FLD (f_dstle)]), FLD (f_imm32)); + CPU (h_gpr[FLD (f_dstle)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'D', opval); + } + + return vpc; +#undef FLD +} + +/* orrle: or $dstle,$srcle */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,orrle) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwle.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + DI opval = ORDI (CPU (h_gpr[FLD (f_dstle)]), CPU (h_gpr[FLD (f_srcle)])); + CPU (h_gpr[FLD (f_dstle)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'D', opval); + } + + return vpc; +#undef FLD +} + +/* or32ile: or32 $dstle,$imm32 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,or32ile) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stble.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + USI opval = ORSI (CPU (h_gpr[FLD (f_dstle)]), FLD (f_imm32)); + CPU (h_gpr[FLD (f_dstle)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* or32rle: or32 $dstle,$srcle */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,or32rle) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwle.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + USI opval = ORSI (CPU (h_gpr[FLD (f_dstle)]), CPU (h_gpr[FLD (f_srcle)])); + CPU (h_gpr[FLD (f_dstle)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* andile: and $dstle,$imm32 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,andile) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stble.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + DI opval = ANDDI (CPU (h_gpr[FLD (f_dstle)]), FLD (f_imm32)); + CPU (h_gpr[FLD (f_dstle)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'D', opval); + } + + return vpc; +#undef FLD +} + +/* andrle: and $dstle,$srcle */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,andrle) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwle.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + DI opval = ANDDI (CPU (h_gpr[FLD (f_dstle)]), CPU (h_gpr[FLD (f_srcle)])); + CPU (h_gpr[FLD (f_dstle)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'D', opval); + } + + return vpc; +#undef FLD +} + +/* and32ile: and32 $dstle,$imm32 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,and32ile) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stble.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + USI opval = ANDSI (CPU (h_gpr[FLD (f_dstle)]), FLD (f_imm32)); + CPU (h_gpr[FLD (f_dstle)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* and32rle: and32 $dstle,$srcle */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,and32rle) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwle.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + USI opval = ANDSI (CPU (h_gpr[FLD (f_dstle)]), CPU (h_gpr[FLD (f_srcle)])); + CPU (h_gpr[FLD (f_dstle)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* lshile: lsh $dstle,$imm32 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,lshile) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stble.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + DI opval = SLLDI (CPU (h_gpr[FLD (f_dstle)]), FLD (f_imm32)); + CPU (h_gpr[FLD (f_dstle)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'D', opval); + } + + return vpc; +#undef FLD +} + +/* lshrle: lsh $dstle,$srcle */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,lshrle) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwle.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + DI opval = SLLDI (CPU (h_gpr[FLD (f_dstle)]), CPU (h_gpr[FLD (f_srcle)])); + CPU (h_gpr[FLD (f_dstle)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'D', opval); + } + + return vpc; +#undef FLD +} + +/* lsh32ile: lsh32 $dstle,$imm32 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,lsh32ile) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stble.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + USI opval = SLLSI (CPU (h_gpr[FLD (f_dstle)]), FLD (f_imm32)); + CPU (h_gpr[FLD (f_dstle)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* lsh32rle: lsh32 $dstle,$srcle */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,lsh32rle) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwle.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + USI opval = SLLSI (CPU (h_gpr[FLD (f_dstle)]), CPU (h_gpr[FLD (f_srcle)])); + CPU (h_gpr[FLD (f_dstle)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* rshile: rsh $dstle,$imm32 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,rshile) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stble.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + DI opval = SRLDI (CPU (h_gpr[FLD (f_dstle)]), FLD (f_imm32)); + CPU (h_gpr[FLD (f_dstle)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'D', opval); + } + + return vpc; +#undef FLD +} + +/* rshrle: rsh $dstle,$srcle */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,rshrle) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwle.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + DI opval = SRLDI (CPU (h_gpr[FLD (f_dstle)]), CPU (h_gpr[FLD (f_srcle)])); + CPU (h_gpr[FLD (f_dstle)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'D', opval); + } + + return vpc; +#undef FLD +} + +/* rsh32ile: rsh32 $dstle,$imm32 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,rsh32ile) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stble.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + USI opval = SRLSI (CPU (h_gpr[FLD (f_dstle)]), FLD (f_imm32)); + CPU (h_gpr[FLD (f_dstle)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* rsh32rle: rsh32 $dstle,$srcle */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,rsh32rle) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwle.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + USI opval = SRLSI (CPU (h_gpr[FLD (f_dstle)]), CPU (h_gpr[FLD (f_srcle)])); + CPU (h_gpr[FLD (f_dstle)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* modile: mod $dstle,$imm32 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,modile) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stble.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + DI opval = UMODDI (CPU (h_gpr[FLD (f_dstle)]), FLD (f_imm32)); + CPU (h_gpr[FLD (f_dstle)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'D', opval); + } + + return vpc; +#undef FLD +} + +/* modrle: mod $dstle,$srcle */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,modrle) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwle.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + DI opval = UMODDI (CPU (h_gpr[FLD (f_dstle)]), CPU (h_gpr[FLD (f_srcle)])); + CPU (h_gpr[FLD (f_dstle)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'D', opval); + } + + return vpc; +#undef FLD +} + +/* mod32ile: mod32 $dstle,$imm32 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,mod32ile) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stble.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + USI opval = UMODSI (CPU (h_gpr[FLD (f_dstle)]), FLD (f_imm32)); + CPU (h_gpr[FLD (f_dstle)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* mod32rle: mod32 $dstle,$srcle */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,mod32rle) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwle.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + USI opval = UMODSI (CPU (h_gpr[FLD (f_dstle)]), CPU (h_gpr[FLD (f_srcle)])); + CPU (h_gpr[FLD (f_dstle)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* xorile: xor $dstle,$imm32 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,xorile) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stble.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + DI opval = XORDI (CPU (h_gpr[FLD (f_dstle)]), FLD (f_imm32)); + CPU (h_gpr[FLD (f_dstle)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'D', opval); + } + + return vpc; +#undef FLD +} + +/* xorrle: xor $dstle,$srcle */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,xorrle) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwle.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + DI opval = XORDI (CPU (h_gpr[FLD (f_dstle)]), CPU (h_gpr[FLD (f_srcle)])); + CPU (h_gpr[FLD (f_dstle)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'D', opval); + } + + return vpc; +#undef FLD +} + +/* xor32ile: xor32 $dstle,$imm32 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,xor32ile) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stble.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + USI opval = XORSI (CPU (h_gpr[FLD (f_dstle)]), FLD (f_imm32)); + CPU (h_gpr[FLD (f_dstle)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* xor32rle: xor32 $dstle,$srcle */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,xor32rle) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwle.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + USI opval = XORSI (CPU (h_gpr[FLD (f_dstle)]), CPU (h_gpr[FLD (f_srcle)])); + CPU (h_gpr[FLD (f_dstle)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* arshile: arsh $dstle,$imm32 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,arshile) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stble.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + DI opval = SRADI (CPU (h_gpr[FLD (f_dstle)]), FLD (f_imm32)); + CPU (h_gpr[FLD (f_dstle)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'D', opval); + } + + return vpc; +#undef FLD +} + +/* arshrle: arsh $dstle,$srcle */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,arshrle) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwle.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + DI opval = SRADI (CPU (h_gpr[FLD (f_dstle)]), CPU (h_gpr[FLD (f_srcle)])); + CPU (h_gpr[FLD (f_dstle)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'D', opval); + } + + return vpc; +#undef FLD +} + +/* arsh32ile: arsh32 $dstle,$imm32 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,arsh32ile) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stble.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + USI opval = SRASI (CPU (h_gpr[FLD (f_dstle)]), FLD (f_imm32)); + CPU (h_gpr[FLD (f_dstle)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* arsh32rle: arsh32 $dstle,$srcle */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,arsh32rle) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwle.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + USI opval = SRASI (CPU (h_gpr[FLD (f_dstle)]), CPU (h_gpr[FLD (f_srcle)])); + CPU (h_gpr[FLD (f_dstle)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* negle: neg $dstle */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,negle) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_lddwle.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + DI opval = NEGDI (CPU (h_gpr[FLD (f_dstle)])); + CPU (h_gpr[FLD (f_dstle)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'D', opval); + } + + return vpc; +#undef FLD +} + +/* neg32le: neg32 $dstle */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,neg32le) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_lddwle.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + USI opval = NEGSI (CPU (h_gpr[FLD (f_dstle)])); + CPU (h_gpr[FLD (f_dstle)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* movile: mov $dstle,$imm32 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,movile) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stble.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + DI opval = FLD (f_imm32); + CPU (h_gpr[FLD (f_dstle)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'D', opval); + } + + return vpc; +#undef FLD +} + +/* movrle: mov $dstle,$srcle */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,movrle) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwle.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + DI opval = CPU (h_gpr[FLD (f_srcle)]); + CPU (h_gpr[FLD (f_dstle)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'D', opval); + } + + return vpc; +#undef FLD +} + +/* mov32ile: mov32 $dstle,$imm32 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,mov32ile) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stble.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + USI opval = FLD (f_imm32); + CPU (h_gpr[FLD (f_dstle)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* mov32rle: mov32 $dstle,$srcle */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,mov32rle) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwle.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + USI opval = CPU (h_gpr[FLD (f_srcle)]); + CPU (h_gpr[FLD (f_dstle)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* endlele: endle $dstle,$endsize */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,endlele) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stble.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + DI opval = bpfbf_endle (current_cpu, CPU (h_gpr[FLD (f_dstle)]), FLD (f_imm32)); + CPU (h_gpr[FLD (f_dstle)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'D', opval); + } + + return vpc; +#undef FLD +} + +/* endbele: endbe $dstle,$endsize */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,endbele) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stble.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + DI opval = bpfbf_endbe (current_cpu, CPU (h_gpr[FLD (f_dstle)]), FLD (f_imm32)); + CPU (h_gpr[FLD (f_dstle)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'D', opval); + } + + return vpc; +#undef FLD +} + +/* lddwle: lddw $dstle,$imm64 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,lddwle) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_lddwle.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 16); + + { + DI opval = FLD (f_imm64); + CPU (h_gpr[FLD (f_dstle)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'D', opval); + } + + return vpc; +#undef FLD +} + +/* ldabsw: ldabsw $imm32 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,ldabsw) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldindwle.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + SI opval = GETMEMSI (current_cpu, pc, ADDDI (GETMEMDI (current_cpu, pc, ADDDI (CPU (h_gpr[((UINT) 6)]), bpfbf_skb_data_offset (current_cpu))), FLD (f_imm32))); + CPU (h_gpr[((UINT) 0)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* ldabsh: ldabsh $imm32 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,ldabsh) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldindwle.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + HI opval = GETMEMHI (current_cpu, pc, ADDDI (GETMEMDI (current_cpu, pc, ADDDI (CPU (h_gpr[((UINT) 6)]), bpfbf_skb_data_offset (current_cpu))), FLD (f_imm32))); + CPU (h_gpr[((UINT) 0)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* ldabsb: ldabsb $imm32 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,ldabsb) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldindwle.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + QI opval = GETMEMQI (current_cpu, pc, ADDDI (GETMEMDI (current_cpu, pc, ADDDI (CPU (h_gpr[((UINT) 6)]), bpfbf_skb_data_offset (current_cpu))), FLD (f_imm32))); + CPU (h_gpr[((UINT) 0)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* ldabsdw: ldabsdw $imm32 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,ldabsdw) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldindwle.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + DI opval = GETMEMDI (current_cpu, pc, ADDDI (GETMEMDI (current_cpu, pc, ADDDI (CPU (h_gpr[((UINT) 6)]), bpfbf_skb_data_offset (current_cpu))), FLD (f_imm32))); + CPU (h_gpr[((UINT) 0)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'D', opval); + } + + return vpc; +#undef FLD +} + +/* ldindwle: ldindw $srcle,$imm32 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,ldindwle) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldindwle.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + SI opval = GETMEMSI (current_cpu, pc, ADDDI (GETMEMDI (current_cpu, pc, ADDDI (CPU (h_gpr[((UINT) 6)]), bpfbf_skb_data_offset (current_cpu))), ADDDI (CPU (h_gpr[FLD (f_srcle)]), FLD (f_imm32)))); + CPU (h_gpr[((UINT) 0)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* ldindhle: ldindh $srcle,$imm32 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,ldindhle) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldindwle.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + HI opval = GETMEMHI (current_cpu, pc, ADDDI (GETMEMDI (current_cpu, pc, ADDDI (CPU (h_gpr[((UINT) 6)]), bpfbf_skb_data_offset (current_cpu))), ADDDI (CPU (h_gpr[FLD (f_srcle)]), FLD (f_imm32)))); + CPU (h_gpr[((UINT) 0)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* ldindble: ldindb $srcle,$imm32 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,ldindble) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldindwle.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + QI opval = GETMEMQI (current_cpu, pc, ADDDI (GETMEMDI (current_cpu, pc, ADDDI (CPU (h_gpr[((UINT) 6)]), bpfbf_skb_data_offset (current_cpu))), ADDDI (CPU (h_gpr[FLD (f_srcle)]), FLD (f_imm32)))); + CPU (h_gpr[((UINT) 0)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* ldinddwle: ldinddw $srcle,$imm32 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,ldinddwle) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldindwle.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + DI opval = GETMEMDI (current_cpu, pc, ADDDI (GETMEMDI (current_cpu, pc, ADDDI (CPU (h_gpr[((UINT) 6)]), bpfbf_skb_data_offset (current_cpu))), ADDDI (CPU (h_gpr[FLD (f_srcle)]), FLD (f_imm32)))); + CPU (h_gpr[((UINT) 0)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'D', opval); + } + + return vpc; +#undef FLD +} + +/* ldxwle: ldxw $dstle,[$srcle+$offset16] */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,ldxwle) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwle.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + SI opval = GETMEMSI (current_cpu, pc, ADDDI (CPU (h_gpr[FLD (f_srcle)]), FLD (f_offset16))); + CPU (h_gpr[FLD (f_dstle)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* ldxhle: ldxh $dstle,[$srcle+$offset16] */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,ldxhle) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwle.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + HI opval = GETMEMHI (current_cpu, pc, ADDDI (CPU (h_gpr[FLD (f_srcle)]), FLD (f_offset16))); + CPU (h_gpr[FLD (f_dstle)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* ldxble: ldxb $dstle,[$srcle+$offset16] */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,ldxble) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwle.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + QI opval = GETMEMQI (current_cpu, pc, ADDDI (CPU (h_gpr[FLD (f_srcle)]), FLD (f_offset16))); + CPU (h_gpr[FLD (f_dstle)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* ldxdwle: ldxdw $dstle,[$srcle+$offset16] */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,ldxdwle) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwle.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + DI opval = GETMEMDI (current_cpu, pc, ADDDI (CPU (h_gpr[FLD (f_srcle)]), FLD (f_offset16))); + CPU (h_gpr[FLD (f_dstle)]) = opval; + CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'D', opval); + } + + return vpc; +#undef FLD +} + +/* stxwle: stxw [$dstle+$offset16],$srcle */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,stxwle) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwle.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + SI opval = CPU (h_gpr[FLD (f_srcle)]); + SETMEMSI (current_cpu, pc, ADDDI (CPU (h_gpr[FLD (f_dstle)]), FLD (f_offset16)), opval); + CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* stxhle: stxh [$dstle+$offset16],$srcle */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,stxhle) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwle.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + HI opval = CPU (h_gpr[FLD (f_srcle)]); + SETMEMHI (current_cpu, pc, ADDDI (CPU (h_gpr[FLD (f_dstle)]), FLD (f_offset16)), opval); + CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* stxble: stxb [$dstle+$offset16],$srcle */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,stxble) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwle.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + QI opval = CPU (h_gpr[FLD (f_srcle)]); + SETMEMQI (current_cpu, pc, ADDDI (CPU (h_gpr[FLD (f_dstle)]), FLD (f_offset16)), opval); + CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* stxdwle: stxdw [$dstle+$offset16],$srcle */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,stxdwle) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwle.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + DI opval = CPU (h_gpr[FLD (f_srcle)]); + SETMEMDI (current_cpu, pc, ADDDI (CPU (h_gpr[FLD (f_dstle)]), FLD (f_offset16)), opval); + CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'D', opval); + } + + return vpc; +#undef FLD +} + +/* stble: stb [$dstle+$offset16],$imm32 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,stble) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stble.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + QI opval = FLD (f_imm32); + SETMEMQI (current_cpu, pc, ADDDI (CPU (h_gpr[FLD (f_dstle)]), FLD (f_offset16)), opval); + CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* sthle: sth [$dstle+$offset16],$imm32 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,sthle) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stble.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + HI opval = FLD (f_imm32); + SETMEMHI (current_cpu, pc, ADDDI (CPU (h_gpr[FLD (f_dstle)]), FLD (f_offset16)), opval); + CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* stwle: stw [$dstle+$offset16],$imm32 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,stwle) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stble.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + SI opval = FLD (f_imm32); + SETMEMSI (current_cpu, pc, ADDDI (CPU (h_gpr[FLD (f_dstle)]), FLD (f_offset16)), opval); + CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); + } + + return vpc; +#undef FLD +} + +/* stdwle: stdw [$dstle+$offset16],$imm32 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,stdwle) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stble.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + DI opval = FLD (f_imm32); + SETMEMDI (current_cpu, pc, ADDDI (CPU (h_gpr[FLD (f_dstle)]), FLD (f_offset16)), opval); + CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'D', opval); + } + + return vpc; +#undef FLD +} + +/* jeqile: jeq $dstle,$imm32,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,jeqile) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stble.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (EQDI (CPU (h_gpr[FLD (f_dstle)]), FLD (f_imm32))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jeqrle: jeq $dstle,$srcle,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,jeqrle) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwle.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (EQDI (CPU (h_gpr[FLD (f_dstle)]), CPU (h_gpr[FLD (f_srcle)]))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jeq32ile: jeq32 $dstle,$imm32,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,jeq32ile) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stble.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (EQSI (CPU (h_gpr[FLD (f_dstle)]), FLD (f_imm32))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jeq32rle: jeq32 $dstle,$srcle,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,jeq32rle) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwle.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (EQSI (CPU (h_gpr[FLD (f_dstle)]), CPU (h_gpr[FLD (f_srcle)]))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jgtile: jgt $dstle,$imm32,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,jgtile) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stble.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (GTUDI (CPU (h_gpr[FLD (f_dstle)]), FLD (f_imm32))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jgtrle: jgt $dstle,$srcle,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,jgtrle) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwle.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (GTUDI (CPU (h_gpr[FLD (f_dstle)]), CPU (h_gpr[FLD (f_srcle)]))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jgt32ile: jgt32 $dstle,$imm32,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,jgt32ile) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stble.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (GTUSI (CPU (h_gpr[FLD (f_dstle)]), FLD (f_imm32))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jgt32rle: jgt32 $dstle,$srcle,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,jgt32rle) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwle.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (GTUSI (CPU (h_gpr[FLD (f_dstle)]), CPU (h_gpr[FLD (f_srcle)]))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jgeile: jge $dstle,$imm32,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,jgeile) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stble.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (GEUDI (CPU (h_gpr[FLD (f_dstle)]), FLD (f_imm32))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jgerle: jge $dstle,$srcle,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,jgerle) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwle.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (GEUDI (CPU (h_gpr[FLD (f_dstle)]), CPU (h_gpr[FLD (f_srcle)]))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jge32ile: jge32 $dstle,$imm32,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,jge32ile) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stble.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (GEUSI (CPU (h_gpr[FLD (f_dstle)]), FLD (f_imm32))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jge32rle: jge32 $dstle,$srcle,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,jge32rle) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwle.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (GEUSI (CPU (h_gpr[FLD (f_dstle)]), CPU (h_gpr[FLD (f_srcle)]))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jltile: jlt $dstle,$imm32,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,jltile) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stble.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (LTUDI (CPU (h_gpr[FLD (f_dstle)]), FLD (f_imm32))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jltrle: jlt $dstle,$srcle,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,jltrle) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwle.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (LTUDI (CPU (h_gpr[FLD (f_dstle)]), CPU (h_gpr[FLD (f_srcle)]))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jlt32ile: jlt32 $dstle,$imm32,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,jlt32ile) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stble.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (LTUSI (CPU (h_gpr[FLD (f_dstle)]), FLD (f_imm32))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jlt32rle: jlt32 $dstle,$srcle,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,jlt32rle) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwle.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (LTUSI (CPU (h_gpr[FLD (f_dstle)]), CPU (h_gpr[FLD (f_srcle)]))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jleile: jle $dstle,$imm32,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,jleile) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stble.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (LEUDI (CPU (h_gpr[FLD (f_dstle)]), FLD (f_imm32))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jlerle: jle $dstle,$srcle,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,jlerle) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwle.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (LEUDI (CPU (h_gpr[FLD (f_dstle)]), CPU (h_gpr[FLD (f_srcle)]))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jle32ile: jle32 $dstle,$imm32,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,jle32ile) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stble.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (LEUSI (CPU (h_gpr[FLD (f_dstle)]), FLD (f_imm32))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jle32rle: jle32 $dstle,$srcle,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,jle32rle) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwle.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (LEUSI (CPU (h_gpr[FLD (f_dstle)]), CPU (h_gpr[FLD (f_srcle)]))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jsetile: jset $dstle,$imm32,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,jsetile) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stble.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (ANDDI (CPU (h_gpr[FLD (f_dstle)]), FLD (f_imm32))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jsetrle: jset $dstle,$srcle,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,jsetrle) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwle.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (ANDDI (CPU (h_gpr[FLD (f_dstle)]), CPU (h_gpr[FLD (f_srcle)]))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jset32ile: jset32 $dstle,$imm32,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,jset32ile) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stble.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (ANDSI (CPU (h_gpr[FLD (f_dstle)]), FLD (f_imm32))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jset32rle: jset32 $dstle,$srcle,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,jset32rle) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwle.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (ANDSI (CPU (h_gpr[FLD (f_dstle)]), CPU (h_gpr[FLD (f_srcle)]))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jneile: jne $dstle,$imm32,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,jneile) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stble.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (NEDI (CPU (h_gpr[FLD (f_dstle)]), FLD (f_imm32))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jnerle: jne $dstle,$srcle,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,jnerle) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwle.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (NEDI (CPU (h_gpr[FLD (f_dstle)]), CPU (h_gpr[FLD (f_srcle)]))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jne32ile: jne32 $dstle,$imm32,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,jne32ile) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stble.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (NESI (CPU (h_gpr[FLD (f_dstle)]), FLD (f_imm32))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jne32rle: jne32 $dstle,$srcle,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,jne32rle) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwle.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (NESI (CPU (h_gpr[FLD (f_dstle)]), CPU (h_gpr[FLD (f_srcle)]))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jsgtile: jsgt $dstle,$imm32,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,jsgtile) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stble.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (GTDI (CPU (h_gpr[FLD (f_dstle)]), FLD (f_imm32))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jsgtrle: jsgt $dstle,$srcle,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,jsgtrle) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwle.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (GTDI (CPU (h_gpr[FLD (f_dstle)]), CPU (h_gpr[FLD (f_srcle)]))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jsgt32ile: jsgt32 $dstle,$imm32,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,jsgt32ile) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stble.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (GTSI (CPU (h_gpr[FLD (f_dstle)]), FLD (f_imm32))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jsgt32rle: jsgt32 $dstle,$srcle,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,jsgt32rle) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwle.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (GTSI (CPU (h_gpr[FLD (f_dstle)]), CPU (h_gpr[FLD (f_srcle)]))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jsgeile: jsge $dstle,$imm32,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,jsgeile) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stble.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (GEDI (CPU (h_gpr[FLD (f_dstle)]), FLD (f_imm32))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jsgerle: jsge $dstle,$srcle,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,jsgerle) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwle.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (GEDI (CPU (h_gpr[FLD (f_dstle)]), CPU (h_gpr[FLD (f_srcle)]))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jsge32ile: jsge32 $dstle,$imm32,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,jsge32ile) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stble.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (GESI (CPU (h_gpr[FLD (f_dstle)]), FLD (f_imm32))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jsge32rle: jsge32 $dstle,$srcle,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,jsge32rle) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwle.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (GESI (CPU (h_gpr[FLD (f_dstle)]), CPU (h_gpr[FLD (f_srcle)]))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jsltile: jslt $dstle,$imm32,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,jsltile) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stble.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (LTDI (CPU (h_gpr[FLD (f_dstle)]), FLD (f_imm32))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jsltrle: jslt $dstle,$srcle,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,jsltrle) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwle.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (LTDI (CPU (h_gpr[FLD (f_dstle)]), CPU (h_gpr[FLD (f_srcle)]))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jslt32ile: jslt32 $dstle,$imm32,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,jslt32ile) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stble.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (LTSI (CPU (h_gpr[FLD (f_dstle)]), FLD (f_imm32))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jslt32rle: jslt32 $dstle,$srcle,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,jslt32rle) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwle.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (LTSI (CPU (h_gpr[FLD (f_dstle)]), CPU (h_gpr[FLD (f_srcle)]))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jsleile: jsle $dstle,$imm32,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,jsleile) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stble.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (LEDI (CPU (h_gpr[FLD (f_dstle)]), FLD (f_imm32))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jslerle: jsle $dstle,$srcle,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,jslerle) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwle.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (LEDI (CPU (h_gpr[FLD (f_dstle)]), CPU (h_gpr[FLD (f_srcle)]))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jsle32ile: jsle32 $dstle,$imm32,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,jsle32ile) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stble.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (LESI (CPU (h_gpr[FLD (f_dstle)]), FLD (f_imm32))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* jsle32rle: jsle32 $dstle,$srcle,$disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,jsle32rle) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwle.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +if (LESI (CPU (h_gpr[FLD (f_dstle)]), CPU (h_gpr[FLD (f_srcle)]))) { + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + written |= (1 << 4); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } +} + + abuf->written = written; + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* callle: call $disp32 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,callle) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldindwle.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +bpfbf_call (current_cpu, FLD (f_imm32), FLD (f_srcle)); + + return vpc; +#undef FLD +} + +/* ja: ja $disp16 */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,ja) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_stble.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_BRANCH_INIT + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + + { + DI opval = ADDDI (pc, MULDI (ADDHI (FLD (f_offset16), 1), 8)); + SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); + CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); + } + + SEM_BRANCH_FINI (vpc); + return vpc; +#undef FLD +} + +/* exit: exit */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,exit) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_empty.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +bpfbf_exit (current_cpu); + + return vpc; +#undef FLD +} + +/* xadddwle: xadddw [$dstle+$offset16],$srcle */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,xadddwle) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwle.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +{ + DI tmp_tmp; + tmp_tmp = GETMEMDI (current_cpu, pc, ADDDI (CPU (h_gpr[FLD (f_dstle)]), FLD (f_offset16))); + { + DI opval = ADDDI (tmp_tmp, CPU (h_gpr[FLD (f_srcle)])); + SETMEMDI (current_cpu, pc, ADDDI (CPU (h_gpr[FLD (f_dstle)]), FLD (f_offset16)), opval); + CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'D', opval); + } +} + + return vpc; +#undef FLD +} + +/* xaddwle: xaddw [$dstle+$offset16],$srcle */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,xaddwle) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_ldxwle.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +{ + SI tmp_tmp; + tmp_tmp = GETMEMSI (current_cpu, pc, ADDDI (CPU (h_gpr[FLD (f_dstle)]), FLD (f_offset16))); + { + SI opval = ADDSI (tmp_tmp, CPU (h_gpr[FLD (f_srcle)])); + SETMEMSI (current_cpu, pc, ADDDI (CPU (h_gpr[FLD (f_dstle)]), FLD (f_offset16)), opval); + CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); + } +} + + return vpc; +#undef FLD +} + +/* brkpt: brkpt */ + +static SEM_PC +SEM_FN_NAME (bpfbf_ebpfle,brkpt) (SIM_CPU *current_cpu, SEM_ARG sem_arg) +{ +#define FLD(f) abuf->fields.sfmt_empty.f + ARGBUF *abuf = SEM_ARGBUF (sem_arg); + int UNUSED written = 0; + IADDR UNUSED pc = abuf->addr; + SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); + +bpfbf_breakpoint (current_cpu); + + return vpc; +#undef FLD +} + +/* Table of all semantic fns. */ + +static const struct sem_fn_desc sem_fns[] = { + { BPFBF_EBPFLE_INSN_X_INVALID, SEM_FN_NAME (bpfbf_ebpfle,x_invalid) }, + { BPFBF_EBPFLE_INSN_X_AFTER, SEM_FN_NAME (bpfbf_ebpfle,x_after) }, + { BPFBF_EBPFLE_INSN_X_BEFORE, SEM_FN_NAME (bpfbf_ebpfle,x_before) }, + { BPFBF_EBPFLE_INSN_X_CTI_CHAIN, SEM_FN_NAME (bpfbf_ebpfle,x_cti_chain) }, + { BPFBF_EBPFLE_INSN_X_CHAIN, SEM_FN_NAME (bpfbf_ebpfle,x_chain) }, + { BPFBF_EBPFLE_INSN_X_BEGIN, SEM_FN_NAME (bpfbf_ebpfle,x_begin) }, + { BPFBF_EBPFLE_INSN_ADDILE, SEM_FN_NAME (bpfbf_ebpfle,addile) }, + { BPFBF_EBPFLE_INSN_ADDRLE, SEM_FN_NAME (bpfbf_ebpfle,addrle) }, + { BPFBF_EBPFLE_INSN_ADD32ILE, SEM_FN_NAME (bpfbf_ebpfle,add32ile) }, + { BPFBF_EBPFLE_INSN_ADD32RLE, SEM_FN_NAME (bpfbf_ebpfle,add32rle) }, + { BPFBF_EBPFLE_INSN_SUBILE, SEM_FN_NAME (bpfbf_ebpfle,subile) }, + { BPFBF_EBPFLE_INSN_SUBRLE, SEM_FN_NAME (bpfbf_ebpfle,subrle) }, + { BPFBF_EBPFLE_INSN_SUB32ILE, SEM_FN_NAME (bpfbf_ebpfle,sub32ile) }, + { BPFBF_EBPFLE_INSN_SUB32RLE, SEM_FN_NAME (bpfbf_ebpfle,sub32rle) }, + { BPFBF_EBPFLE_INSN_MULILE, SEM_FN_NAME (bpfbf_ebpfle,mulile) }, + { BPFBF_EBPFLE_INSN_MULRLE, SEM_FN_NAME (bpfbf_ebpfle,mulrle) }, + { BPFBF_EBPFLE_INSN_MUL32ILE, SEM_FN_NAME (bpfbf_ebpfle,mul32ile) }, + { BPFBF_EBPFLE_INSN_MUL32RLE, SEM_FN_NAME (bpfbf_ebpfle,mul32rle) }, + { BPFBF_EBPFLE_INSN_DIVILE, SEM_FN_NAME (bpfbf_ebpfle,divile) }, + { BPFBF_EBPFLE_INSN_DIVRLE, SEM_FN_NAME (bpfbf_ebpfle,divrle) }, + { BPFBF_EBPFLE_INSN_DIV32ILE, SEM_FN_NAME (bpfbf_ebpfle,div32ile) }, + { BPFBF_EBPFLE_INSN_DIV32RLE, SEM_FN_NAME (bpfbf_ebpfle,div32rle) }, + { BPFBF_EBPFLE_INSN_ORILE, SEM_FN_NAME (bpfbf_ebpfle,orile) }, + { BPFBF_EBPFLE_INSN_ORRLE, SEM_FN_NAME (bpfbf_ebpfle,orrle) }, + { BPFBF_EBPFLE_INSN_OR32ILE, SEM_FN_NAME (bpfbf_ebpfle,or32ile) }, + { BPFBF_EBPFLE_INSN_OR32RLE, SEM_FN_NAME (bpfbf_ebpfle,or32rle) }, + { BPFBF_EBPFLE_INSN_ANDILE, SEM_FN_NAME (bpfbf_ebpfle,andile) }, + { BPFBF_EBPFLE_INSN_ANDRLE, SEM_FN_NAME (bpfbf_ebpfle,andrle) }, + { BPFBF_EBPFLE_INSN_AND32ILE, SEM_FN_NAME (bpfbf_ebpfle,and32ile) }, + { BPFBF_EBPFLE_INSN_AND32RLE, SEM_FN_NAME (bpfbf_ebpfle,and32rle) }, + { BPFBF_EBPFLE_INSN_LSHILE, SEM_FN_NAME (bpfbf_ebpfle,lshile) }, + { BPFBF_EBPFLE_INSN_LSHRLE, SEM_FN_NAME (bpfbf_ebpfle,lshrle) }, + { BPFBF_EBPFLE_INSN_LSH32ILE, SEM_FN_NAME (bpfbf_ebpfle,lsh32ile) }, + { BPFBF_EBPFLE_INSN_LSH32RLE, SEM_FN_NAME (bpfbf_ebpfle,lsh32rle) }, + { BPFBF_EBPFLE_INSN_RSHILE, SEM_FN_NAME (bpfbf_ebpfle,rshile) }, + { BPFBF_EBPFLE_INSN_RSHRLE, SEM_FN_NAME (bpfbf_ebpfle,rshrle) }, + { BPFBF_EBPFLE_INSN_RSH32ILE, SEM_FN_NAME (bpfbf_ebpfle,rsh32ile) }, + { BPFBF_EBPFLE_INSN_RSH32RLE, SEM_FN_NAME (bpfbf_ebpfle,rsh32rle) }, + { BPFBF_EBPFLE_INSN_MODILE, SEM_FN_NAME (bpfbf_ebpfle,modile) }, + { BPFBF_EBPFLE_INSN_MODRLE, SEM_FN_NAME (bpfbf_ebpfle,modrle) }, + { BPFBF_EBPFLE_INSN_MOD32ILE, SEM_FN_NAME (bpfbf_ebpfle,mod32ile) }, + { BPFBF_EBPFLE_INSN_MOD32RLE, SEM_FN_NAME (bpfbf_ebpfle,mod32rle) }, + { BPFBF_EBPFLE_INSN_XORILE, SEM_FN_NAME (bpfbf_ebpfle,xorile) }, + { BPFBF_EBPFLE_INSN_XORRLE, SEM_FN_NAME (bpfbf_ebpfle,xorrle) }, + { BPFBF_EBPFLE_INSN_XOR32ILE, SEM_FN_NAME (bpfbf_ebpfle,xor32ile) }, + { BPFBF_EBPFLE_INSN_XOR32RLE, SEM_FN_NAME (bpfbf_ebpfle,xor32rle) }, + { BPFBF_EBPFLE_INSN_ARSHILE, SEM_FN_NAME (bpfbf_ebpfle,arshile) }, + { BPFBF_EBPFLE_INSN_ARSHRLE, SEM_FN_NAME (bpfbf_ebpfle,arshrle) }, + { BPFBF_EBPFLE_INSN_ARSH32ILE, SEM_FN_NAME (bpfbf_ebpfle,arsh32ile) }, + { BPFBF_EBPFLE_INSN_ARSH32RLE, SEM_FN_NAME (bpfbf_ebpfle,arsh32rle) }, + { BPFBF_EBPFLE_INSN_NEGLE, SEM_FN_NAME (bpfbf_ebpfle,negle) }, + { BPFBF_EBPFLE_INSN_NEG32LE, SEM_FN_NAME (bpfbf_ebpfle,neg32le) }, + { BPFBF_EBPFLE_INSN_MOVILE, SEM_FN_NAME (bpfbf_ebpfle,movile) }, + { BPFBF_EBPFLE_INSN_MOVRLE, SEM_FN_NAME (bpfbf_ebpfle,movrle) }, + { BPFBF_EBPFLE_INSN_MOV32ILE, SEM_FN_NAME (bpfbf_ebpfle,mov32ile) }, + { BPFBF_EBPFLE_INSN_MOV32RLE, SEM_FN_NAME (bpfbf_ebpfle,mov32rle) }, + { BPFBF_EBPFLE_INSN_ENDLELE, SEM_FN_NAME (bpfbf_ebpfle,endlele) }, + { BPFBF_EBPFLE_INSN_ENDBELE, SEM_FN_NAME (bpfbf_ebpfle,endbele) }, + { BPFBF_EBPFLE_INSN_LDDWLE, SEM_FN_NAME (bpfbf_ebpfle,lddwle) }, + { BPFBF_EBPFLE_INSN_LDABSW, SEM_FN_NAME (bpfbf_ebpfle,ldabsw) }, + { BPFBF_EBPFLE_INSN_LDABSH, SEM_FN_NAME (bpfbf_ebpfle,ldabsh) }, + { BPFBF_EBPFLE_INSN_LDABSB, SEM_FN_NAME (bpfbf_ebpfle,ldabsb) }, + { BPFBF_EBPFLE_INSN_LDABSDW, SEM_FN_NAME (bpfbf_ebpfle,ldabsdw) }, + { BPFBF_EBPFLE_INSN_LDINDWLE, SEM_FN_NAME (bpfbf_ebpfle,ldindwle) }, + { BPFBF_EBPFLE_INSN_LDINDHLE, SEM_FN_NAME (bpfbf_ebpfle,ldindhle) }, + { BPFBF_EBPFLE_INSN_LDINDBLE, SEM_FN_NAME (bpfbf_ebpfle,ldindble) }, + { BPFBF_EBPFLE_INSN_LDINDDWLE, SEM_FN_NAME (bpfbf_ebpfle,ldinddwle) }, + { BPFBF_EBPFLE_INSN_LDXWLE, SEM_FN_NAME (bpfbf_ebpfle,ldxwle) }, + { BPFBF_EBPFLE_INSN_LDXHLE, SEM_FN_NAME (bpfbf_ebpfle,ldxhle) }, + { BPFBF_EBPFLE_INSN_LDXBLE, SEM_FN_NAME (bpfbf_ebpfle,ldxble) }, + { BPFBF_EBPFLE_INSN_LDXDWLE, SEM_FN_NAME (bpfbf_ebpfle,ldxdwle) }, + { BPFBF_EBPFLE_INSN_STXWLE, SEM_FN_NAME (bpfbf_ebpfle,stxwle) }, + { BPFBF_EBPFLE_INSN_STXHLE, SEM_FN_NAME (bpfbf_ebpfle,stxhle) }, + { BPFBF_EBPFLE_INSN_STXBLE, SEM_FN_NAME (bpfbf_ebpfle,stxble) }, + { BPFBF_EBPFLE_INSN_STXDWLE, SEM_FN_NAME (bpfbf_ebpfle,stxdwle) }, + { BPFBF_EBPFLE_INSN_STBLE, SEM_FN_NAME (bpfbf_ebpfle,stble) }, + { BPFBF_EBPFLE_INSN_STHLE, SEM_FN_NAME (bpfbf_ebpfle,sthle) }, + { BPFBF_EBPFLE_INSN_STWLE, SEM_FN_NAME (bpfbf_ebpfle,stwle) }, + { BPFBF_EBPFLE_INSN_STDWLE, SEM_FN_NAME (bpfbf_ebpfle,stdwle) }, + { BPFBF_EBPFLE_INSN_JEQILE, SEM_FN_NAME (bpfbf_ebpfle,jeqile) }, + { BPFBF_EBPFLE_INSN_JEQRLE, SEM_FN_NAME (bpfbf_ebpfle,jeqrle) }, + { BPFBF_EBPFLE_INSN_JEQ32ILE, SEM_FN_NAME (bpfbf_ebpfle,jeq32ile) }, + { BPFBF_EBPFLE_INSN_JEQ32RLE, SEM_FN_NAME (bpfbf_ebpfle,jeq32rle) }, + { BPFBF_EBPFLE_INSN_JGTILE, SEM_FN_NAME (bpfbf_ebpfle,jgtile) }, + { BPFBF_EBPFLE_INSN_JGTRLE, SEM_FN_NAME (bpfbf_ebpfle,jgtrle) }, + { BPFBF_EBPFLE_INSN_JGT32ILE, SEM_FN_NAME (bpfbf_ebpfle,jgt32ile) }, + { BPFBF_EBPFLE_INSN_JGT32RLE, SEM_FN_NAME (bpfbf_ebpfle,jgt32rle) }, + { BPFBF_EBPFLE_INSN_JGEILE, SEM_FN_NAME (bpfbf_ebpfle,jgeile) }, + { BPFBF_EBPFLE_INSN_JGERLE, SEM_FN_NAME (bpfbf_ebpfle,jgerle) }, + { BPFBF_EBPFLE_INSN_JGE32ILE, SEM_FN_NAME (bpfbf_ebpfle,jge32ile) }, + { BPFBF_EBPFLE_INSN_JGE32RLE, SEM_FN_NAME (bpfbf_ebpfle,jge32rle) }, + { BPFBF_EBPFLE_INSN_JLTILE, SEM_FN_NAME (bpfbf_ebpfle,jltile) }, + { BPFBF_EBPFLE_INSN_JLTRLE, SEM_FN_NAME (bpfbf_ebpfle,jltrle) }, + { BPFBF_EBPFLE_INSN_JLT32ILE, SEM_FN_NAME (bpfbf_ebpfle,jlt32ile) }, + { BPFBF_EBPFLE_INSN_JLT32RLE, SEM_FN_NAME (bpfbf_ebpfle,jlt32rle) }, + { BPFBF_EBPFLE_INSN_JLEILE, SEM_FN_NAME (bpfbf_ebpfle,jleile) }, + { BPFBF_EBPFLE_INSN_JLERLE, SEM_FN_NAME (bpfbf_ebpfle,jlerle) }, + { BPFBF_EBPFLE_INSN_JLE32ILE, SEM_FN_NAME (bpfbf_ebpfle,jle32ile) }, + { BPFBF_EBPFLE_INSN_JLE32RLE, SEM_FN_NAME (bpfbf_ebpfle,jle32rle) }, + { BPFBF_EBPFLE_INSN_JSETILE, SEM_FN_NAME (bpfbf_ebpfle,jsetile) }, + { BPFBF_EBPFLE_INSN_JSETRLE, SEM_FN_NAME (bpfbf_ebpfle,jsetrle) }, + { BPFBF_EBPFLE_INSN_JSET32ILE, SEM_FN_NAME (bpfbf_ebpfle,jset32ile) }, + { BPFBF_EBPFLE_INSN_JSET32RLE, SEM_FN_NAME (bpfbf_ebpfle,jset32rle) }, + { BPFBF_EBPFLE_INSN_JNEILE, SEM_FN_NAME (bpfbf_ebpfle,jneile) }, + { BPFBF_EBPFLE_INSN_JNERLE, SEM_FN_NAME (bpfbf_ebpfle,jnerle) }, + { BPFBF_EBPFLE_INSN_JNE32ILE, SEM_FN_NAME (bpfbf_ebpfle,jne32ile) }, + { BPFBF_EBPFLE_INSN_JNE32RLE, SEM_FN_NAME (bpfbf_ebpfle,jne32rle) }, + { BPFBF_EBPFLE_INSN_JSGTILE, SEM_FN_NAME (bpfbf_ebpfle,jsgtile) }, + { BPFBF_EBPFLE_INSN_JSGTRLE, SEM_FN_NAME (bpfbf_ebpfle,jsgtrle) }, + { BPFBF_EBPFLE_INSN_JSGT32ILE, SEM_FN_NAME (bpfbf_ebpfle,jsgt32ile) }, + { BPFBF_EBPFLE_INSN_JSGT32RLE, SEM_FN_NAME (bpfbf_ebpfle,jsgt32rle) }, + { BPFBF_EBPFLE_INSN_JSGEILE, SEM_FN_NAME (bpfbf_ebpfle,jsgeile) }, + { BPFBF_EBPFLE_INSN_JSGERLE, SEM_FN_NAME (bpfbf_ebpfle,jsgerle) }, + { BPFBF_EBPFLE_INSN_JSGE32ILE, SEM_FN_NAME (bpfbf_ebpfle,jsge32ile) }, + { BPFBF_EBPFLE_INSN_JSGE32RLE, SEM_FN_NAME (bpfbf_ebpfle,jsge32rle) }, + { BPFBF_EBPFLE_INSN_JSLTILE, SEM_FN_NAME (bpfbf_ebpfle,jsltile) }, + { BPFBF_EBPFLE_INSN_JSLTRLE, SEM_FN_NAME (bpfbf_ebpfle,jsltrle) }, + { BPFBF_EBPFLE_INSN_JSLT32ILE, SEM_FN_NAME (bpfbf_ebpfle,jslt32ile) }, + { BPFBF_EBPFLE_INSN_JSLT32RLE, SEM_FN_NAME (bpfbf_ebpfle,jslt32rle) }, + { BPFBF_EBPFLE_INSN_JSLEILE, SEM_FN_NAME (bpfbf_ebpfle,jsleile) }, + { BPFBF_EBPFLE_INSN_JSLERLE, SEM_FN_NAME (bpfbf_ebpfle,jslerle) }, + { BPFBF_EBPFLE_INSN_JSLE32ILE, SEM_FN_NAME (bpfbf_ebpfle,jsle32ile) }, + { BPFBF_EBPFLE_INSN_JSLE32RLE, SEM_FN_NAME (bpfbf_ebpfle,jsle32rle) }, + { BPFBF_EBPFLE_INSN_CALLLE, SEM_FN_NAME (bpfbf_ebpfle,callle) }, + { BPFBF_EBPFLE_INSN_JA, SEM_FN_NAME (bpfbf_ebpfle,ja) }, + { BPFBF_EBPFLE_INSN_EXIT, SEM_FN_NAME (bpfbf_ebpfle,exit) }, + { BPFBF_EBPFLE_INSN_XADDDWLE, SEM_FN_NAME (bpfbf_ebpfle,xadddwle) }, + { BPFBF_EBPFLE_INSN_XADDWLE, SEM_FN_NAME (bpfbf_ebpfle,xaddwle) }, + { BPFBF_EBPFLE_INSN_BRKPT, SEM_FN_NAME (bpfbf_ebpfle,brkpt) }, + { 0, 0 } +}; + +/* Add the semantic fns to IDESC_TABLE. */ + +void +SEM_FN_NAME (bpfbf_ebpfle,init_idesc_table) (SIM_CPU *current_cpu) +{ + IDESC *idesc_table = CPU_IDESC (current_cpu); + const struct sem_fn_desc *sf; + int mach_num = MACH_NUM (CPU_MACH (current_cpu)); + + for (sf = &sem_fns[0]; sf->fn != 0; ++sf) + { + const CGEN_INSN *insn = idesc_table[sf->index].idata; + int valid_p = (CGEN_INSN_VIRTUAL_P (insn) + || CGEN_INSN_MACH_HAS_P (insn, mach_num)); +#if FAST_P + if (valid_p) + idesc_table[sf->index].sem_fast = sf->fn; + else + idesc_table[sf->index].sem_fast = SEM_FN_NAME (bpfbf_ebpfle,x_invalid); +#else + if (valid_p) + idesc_table[sf->index].sem_full = sf->fn; + else + idesc_table[sf->index].sem_full = SEM_FN_NAME (bpfbf_ebpfle,x_invalid); +#endif + } +} + diff -Nru gdb-9.1/sim/bpf/sim-if.c gdb-10.2/sim/bpf/sim-if.c --- gdb-9.1/sim/bpf/sim-if.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/sim/bpf/sim-if.c 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,216 @@ +/* Main simulator entry points specific to the eBPF. + Copyright (C) 2020-2021 Free Software Foundation, Inc. + + This file is part of GDB, the GNU debugger. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include <stdlib.h> + +#include "sim-main.h" +#include "sim-options.h" +#include "libiberty.h" +#include "bfd.h" + +/* Globals. */ + +/* String with the name of the section containing the BPF program to + run. */ +static char *bpf_program_section = NULL; + +extern uint64_t skb_data_offset; + + +/* Handle BPF-specific options. */ + +static SIM_RC bpf_option_handler (SIM_DESC, sim_cpu *, int, char *, int); + +typedef enum +{ + OPTION_BPF_SET_PROGRAM = OPTION_START, + OPTION_BPF_LIST_PROGRAMS, + OPTION_BPF_VERIFY_PROGRAM, + OPTION_BPF_SKB_DATA_OFFSET, +} BPF_OPTION; + +static const OPTION bpf_options[] = +{ + { {"bpf-set-program", required_argument, NULL, OPTION_BPF_SET_PROGRAM}, + '\0', "SECTION_NAME", "Set the entry point", + bpf_option_handler }, + { {"bpf-list-programs", no_argument, NULL, OPTION_BPF_LIST_PROGRAMS}, + '\0', "", "List loaded bpf programs", + bpf_option_handler }, + { {"bpf-verify-program", required_argument, NULL, OPTION_BPF_VERIFY_PROGRAM}, + '\0', "PROGRAM", "Run the verifier on the given BPF program", + bpf_option_handler }, + { {"skb-data-offset", required_argument, NULL, OPTION_BPF_SKB_DATA_OFFSET}, + '\0', "OFFSET", "Configure offsetof(struct sk_buff, data)", + bpf_option_handler }, + + { {NULL, no_argument, NULL, 0}, '\0', NULL, NULL, NULL, NULL } +}; + +static SIM_RC +bpf_option_handler (SIM_DESC sd, sim_cpu *cpu ATTRIBUTE_UNUSED, int opt, + char *arg, int is_command ATTRIBUTE_UNUSED) +{ + switch ((BPF_OPTION) opt) + { + case OPTION_BPF_VERIFY_PROGRAM: + /* XXX call the verifier. */ + sim_io_printf (sd, "Verifying BPF program %s...\n", arg); + break; + + case OPTION_BPF_LIST_PROGRAMS: + /* XXX list programs. */ + sim_io_printf (sd, "BPF programs available:\n"); + break; + + case OPTION_BPF_SET_PROGRAM: + /* XXX: check that the section exists and tell the user about a + new start_address. */ + bpf_program_section = xstrdup (arg); + break; + + case OPTION_BPF_SKB_DATA_OFFSET: + skb_data_offset = strtoul (arg, NULL, 0); + break; + + default: + sim_io_eprintf (sd, "Unknown option `%s'\n", arg); + return SIM_RC_FAIL; + } + + return SIM_RC_OK; +} + +/* Like sim_state_free, but free the cpu buffers as well. */ + +static void +bpf_free_state (SIM_DESC sd) +{ + if (STATE_MODULES (sd) != NULL) + sim_module_uninstall (sd); + + sim_cpu_free_all (sd); + sim_state_free (sd); +} + +/* Create an instance of the simulator. */ + +SIM_DESC +sim_open (SIM_OPEN_KIND kind, + host_callback *callback, + struct bfd *abfd, + char * const *argv) +{ + /* XXX Analyze the program, and collect per-function information + like the kernel verifier does. The implementation of the CALL + instruction will need that information, to update %fp. */ + + SIM_DESC sd = sim_state_alloc (kind, callback); + + if (sim_cpu_alloc_all (sd, 1, cgen_cpu_max_extra_bytes ()) + != SIM_RC_OK) + goto error; + + if (sim_pre_argv_init (sd, argv[0]) != SIM_RC_OK) + goto error; + + /* Add the BPF-specific option list to the simulator. */ + if (sim_add_option_table (sd, NULL, bpf_options) != SIM_RC_OK) + { + bpf_free_state (sd); + return 0; + } + + if (sim_parse_args (sd, argv) != SIM_RC_OK) + goto error; + + if (sim_analyze_program (sd, + (STATE_PROG_ARGV (sd) != NULL + ? *STATE_PROG_ARGV (sd) + : NULL), abfd) != SIM_RC_OK) + goto error; + + if (sim_config (sd) != SIM_RC_OK) + goto error; + + if (sim_post_argv_init (sd) != SIM_RC_OK) + goto error; + + /* ... */ + + /* Initialize the CPU descriptors and the disassemble in the cpu + descriptor table entries. */ + { + int i; + CGEN_CPU_DESC cd = bpf_cgen_cpu_open_1 (STATE_ARCHITECTURE (sd)->printable_name, + CGEN_ENDIAN_LITTLE); + + /* We have one cpu per installed program! MAX_NR_PROCESSORS is an + arbitrary upper limit. XXX where is it defined? */ + for (i = 0; i < MAX_NR_PROCESSORS; ++i) + { + SIM_CPU *cpu = STATE_CPU (sd, i); + + CPU_CPU_DESC (cpu) = cd; + CPU_DISASSEMBLER (cpu) = sim_cgen_disassemble_insn; + } + + bpf_cgen_init_dis (cd); + } + + /* Initialize various cgen things not done by common framework. + Must be done after bpf_cgen_cpu_open. */ + cgen_init (sd); + + /* XXX do eBPF sim specific initializations. */ + + return sd; + + error: + bpf_free_state (sd); + return NULL; +} + + +SIM_RC +sim_create_inferior (SIM_DESC sd, struct bfd *abfd, + char *const *argv, char *const *envp) +{ + SIM_CPU *current_cpu = STATE_CPU (sd, 0); + SIM_ADDR addr; + + /* Determine the start address. + + XXX acknowledge bpf_program_section. If it is NULL, emit a + warning explaining that we are using the ELF file start address, + which often is not what is actually wanted. */ + if (abfd != NULL) + addr = bfd_get_start_address (abfd); + else + addr = 0; + + sim_pc_set (current_cpu, addr); + + if (STATE_PROG_ARGV (sd) != argv) + { + freeargv (STATE_PROG_ARGV (sd)); + STATE_PROG_ARGV (sd) = dupargv (argv); + } + + return SIM_RC_OK; +} diff -Nru gdb-9.1/sim/bpf/sim-main.h gdb-10.2/sim/bpf/sim-main.h --- gdb-9.1/sim/bpf/sim-main.h 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/sim/bpf/sim-main.h 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,51 @@ +/* eBPF simulator main header + Copyright (C) 2020-2021 Free Software Foundation, Inc. + + This file is part of GDB, the GNU debugger. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef SIM_MAIN_H +#define SIM_MAIN_H + +#include "sim-basics.h" +#include "cgen-types.h" +#include "bpf-desc.h" +#include "bpf-opc.h" +#include "arch.h" +#include "sim-base.h" +#include "cgen-sim.h" +#include "bpf-sim.h" + + +struct _sim_cpu +{ + sim_cpu_base base; + CGEN_CPU cgen_cpu; + +#if defined (WANT_CPU_BPFBF) + BPFBF_CPU_DATA cpu_data; +#endif +}; + + + +struct sim_state +{ + sim_cpu *cpu[MAX_NR_PROCESSORS]; + CGEN_STATE cgen_state; + sim_state_base base; +}; + +#endif /* ! SIM_MAIN_H */ diff -Nru gdb-9.1/sim/bpf/traps.c gdb-10.2/sim/bpf/traps.c --- gdb-9.1/sim/bpf/traps.c 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/sim/bpf/traps.c 2021-04-25 04:04:35.000000000 +0000 @@ -0,0 +1,35 @@ +/* Trap handlers for eBPF. + Copyright (C) 2020-2021 Free Software Foundation, Inc. + + This file is part of GDB, the GNU debugger. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#define WANT_CPU bpfbf +#define WANT_CPU_BPFBF + +#include <stdlib.h> + +#include "sim-main.h" + +SEM_PC +sim_engine_invalid_insn (SIM_CPU *current_cpu ATTRIBUTE_UNUSED, + IADDR cia ATTRIBUTE_UNUSED, + SEM_PC pc ATTRIBUTE_UNUSED) +{ + /* Can't just return 0 here: the return value is used to set vpc + (see decdde-{le,be}.c) + Returning 0 will cause an infinite loop! */ + abort(); +} diff -Nru gdb-9.1/sim/ChangeLog gdb-10.2/sim/ChangeLog --- gdb-9.1/sim/ChangeLog 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/sim/ChangeLog 2021-04-25 04:06:26.000000000 +0000 @@ -1,3 +1,68 @@ +2020-09-08 David Faust <david.faust@oracle.com> + + * bpf/sem-be.c: Regenerate. + * bpf/sem-le.c: Likewise. + +2020-09-03 Jose E. Marchesi <jose.marchesi@oracle.com> + + * bpf/bpf.c: Include bpf-helpers.h. + * bpf/bpf-helpers.h: Provide a prototype for bpf_trace_printk. + * bpf/configure.ac: Set simulator bitsize to 64. + * bpf/configure (includedir): Regenerate. + * bpf/sim-if.c: Include stdlib.h. + * bpf/traps.c: Likewise. + +2020-09-03 Jose E. Marchesi <jose.marchesi@oracle.com> + + * configure.ac: Do not configure sim/testsuite nor sim/igen if the + primary target doesn't have a simulator. + * configure: Regenerate. + +2020-08-04 Jose E. Marchesi <jose.marchesi@oracle.com> + David Faust <david.faust@oracle.com> + + * bpf/arch.c: Likewise. + * bpf/arch.h: Likewise. + * bpf/cpu.c: Likewise. + * bpf/cpu.h: Likewise. + * bpf/cpuall.h: Likewise. + * bpf/decode-be.c: Likewise. + * bpf/decode-be.h: Likewise. + * bpf/decode-le.c: Likewise. + * bpf/decode-le.h: Likewise. + * bpf/defs-be.h: Likewise. + * bpf/defs-le.h: Likewise. + * bpf/sem-be.c: Likewise. + * bpf/sem-le.c: Likewise. + +2020-08-04 Jose E. Marchesi <jose.marchesi@oracle.com> + David Faust <david.faust@oracle.com> + + * configure.tgt (sim_arch): Add entry for bpf-*-*. + * configure: Regenerate. + * MAINTAINERS: Add maintainer for the BPF simulator. + * bpf/Makefile.in: New file. + * bpf/bpf-helpers.c: Likewise. + * bpf/bpf-helpers.def: Likewise. + * bpf/bpf-helpers.h: Likewise. + * bpf/bpf-sim.h: Likewise. + * bpf/bpf.c: Likewise. + * bpf/config.in: Likewise. + * bpf/configure.ac: Likewise. + * bpf/decode.h: Likewise. + * bpf/eng.h: Likewise. + * bpf/mloop.in: Likewise. + * bpf/sim-if.c: Likewise. + * bpf/sim-main.h: Likewise. + * bpf/traps.c: Likewise. + * bpf/configure: Generate. + * bpf/aclocal.m4: Likewise. + +2019-12-19 Tom Tromey <tromey@adacore.com> + + PR build/24572: + * Makefile.in (install-strip): New target. + 2019-09-23 Dimitar Dimitrov <dimitar@dinux.eu> * MAINTAINERS: Add myself as PRU maintainer. diff -Nru gdb-9.1/sim/common/callback.c gdb-10.2/sim/common/callback.c --- gdb-9.1/sim/common/callback.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/callback.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Remote target callback routines. - Copyright 1995-2020 Free Software Foundation, Inc. + Copyright 1995-2021 Free Software Foundation, Inc. Contributed by Cygnus Solutions. This file is part of GDB. diff -Nru gdb-9.1/sim/common/cgen-cpu.h gdb-10.2/sim/common/cgen-cpu.h --- gdb-9.1/sim/common/cgen-cpu.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/cgen-cpu.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Simulator header for cgen cpus. - Copyright (C) 1998-2020 Free Software Foundation, Inc. + Copyright (C) 1998-2021 Free Software Foundation, Inc. Contributed by Cygnus Support. This file is part of GDB, the GNU debugger. diff -Nru gdb-9.1/sim/common/cgen-defs.h gdb-10.2/sim/common/cgen-defs.h --- gdb-9.1/sim/common/cgen-defs.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/cgen-defs.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* General Cpu tools GENerated simulator support. - Copyright (C) 1996-2020 Free Software Foundation, Inc. + Copyright (C) 1996-2021 Free Software Foundation, Inc. Contributed by Cygnus Support. This file is part of GDB, the GNU debugger. diff -Nru gdb-9.1/sim/common/cgen-engine.h gdb-10.2/sim/common/cgen-engine.h --- gdb-9.1/sim/common/cgen-engine.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/cgen-engine.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Engine header for Cpu tools GENerated simulators. - Copyright (C) 1998-2020 Free Software Foundation, Inc. + Copyright (C) 1998-2021 Free Software Foundation, Inc. Contributed by Cygnus Support. This file is part of GDB, the GNU debugger. diff -Nru gdb-9.1/sim/common/cgen-mem.h gdb-10.2/sim/common/cgen-mem.h --- gdb-9.1/sim/common/cgen-mem.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/cgen-mem.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Memory ops header for CGEN-based simulators. - Copyright (C) 1996-2020 Free Software Foundation, Inc. + Copyright (C) 1996-2021 Free Software Foundation, Inc. Contributed by Cygnus Solutions. This file is part of the GNU Simulators. diff -Nru gdb-9.1/sim/common/cgen-ops.h gdb-10.2/sim/common/cgen-ops.h --- gdb-9.1/sim/common/cgen-ops.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/cgen-ops.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Semantics ops support for CGEN-based simulators. - Copyright (C) 1996-2020 Free Software Foundation, Inc. + Copyright (C) 1996-2021 Free Software Foundation, Inc. Contributed by Cygnus Solutions. This file is part of the GNU Simulators. diff -Nru gdb-9.1/sim/common/cgen-par.c gdb-10.2/sim/common/cgen-par.c --- gdb-9.1/sim/common/cgen-par.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/cgen-par.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Simulator parallel routines for CGEN simulators (and maybe others). - Copyright (C) 1999-2020 Free Software Foundation, Inc. + Copyright (C) 1999-2021 Free Software Foundation, Inc. Contributed by Cygnus Solutions. This file is part of the GNU instruction set simulator. diff -Nru gdb-9.1/sim/common/cgen-par.h gdb-10.2/sim/common/cgen-par.h --- gdb-9.1/sim/common/cgen-par.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/cgen-par.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Simulator header for cgen parallel support. - Copyright (C) 1999-2020 Free Software Foundation, Inc. + Copyright (C) 1999-2021 Free Software Foundation, Inc. Contributed by Cygnus Solutions. This file is part of the GNU instruction set simulator. diff -Nru gdb-9.1/sim/common/cgen-run.c gdb-10.2/sim/common/cgen-run.c --- gdb-9.1/sim/common/cgen-run.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/cgen-run.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Main simulator loop for CGEN-based simulators. - Copyright (C) 1998-2020 Free Software Foundation, Inc. + Copyright (C) 1998-2021 Free Software Foundation, Inc. Contributed by Cygnus Solutions. This file is part of GDB, the GNU debugger. diff -Nru gdb-9.1/sim/common/cgen-scache.c gdb-10.2/sim/common/cgen-scache.c --- gdb-9.1/sim/common/cgen-scache.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/cgen-scache.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Simulator cache routines for CGEN simulators (and maybe others). - Copyright (C) 1996-2020 Free Software Foundation, Inc. + Copyright (C) 1996-2021 Free Software Foundation, Inc. Contributed by Cygnus Support. This file is part of GDB, the GNU debugger. diff -Nru gdb-9.1/sim/common/cgen-scache.h gdb-10.2/sim/common/cgen-scache.h --- gdb-9.1/sim/common/cgen-scache.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/cgen-scache.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Simulator header for cgen scache support. - Copyright (C) 1998-2020 Free Software Foundation, Inc. + Copyright (C) 1998-2021 Free Software Foundation, Inc. Contributed by Cygnus Solutions. This file is part of GDB, the GNU debugger. diff -Nru gdb-9.1/sim/common/cgen-sim.h gdb-10.2/sim/common/cgen-sim.h --- gdb-9.1/sim/common/cgen-sim.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/cgen-sim.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Main header file for Cpu tools GENerated simulators. - Copyright (C) 1998-2020 Free Software Foundation, Inc. + Copyright (C) 1998-2021 Free Software Foundation, Inc. Contributed by Cygnus Support. This file is part of GDB, the GNU debugger. diff -Nru gdb-9.1/sim/common/cgen-trace.c gdb-10.2/sim/common/cgen-trace.c --- gdb-9.1/sim/common/cgen-trace.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/cgen-trace.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Tracing support for CGEN-based simulators. - Copyright (C) 1996-2020 Free Software Foundation, Inc. + Copyright (C) 1996-2021 Free Software Foundation, Inc. Contributed by Cygnus Support. This file is part of GDB, the GNU debugger. diff -Nru gdb-9.1/sim/common/cgen-trace.h gdb-10.2/sim/common/cgen-trace.h --- gdb-9.1/sim/common/cgen-trace.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/cgen-trace.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Simulator tracing support for Cpu tools GENerated simulators. - Copyright (C) 1996-2020 Free Software Foundation, Inc. + Copyright (C) 1996-2021 Free Software Foundation, Inc. Contributed by Cygnus Support. This file is part of GDB, the GNU debugger. diff -Nru gdb-9.1/sim/common/cgen-types.h gdb-10.2/sim/common/cgen-types.h --- gdb-9.1/sim/common/cgen-types.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/cgen-types.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Types for Cpu tools GENerated simulators. - Copyright (C) 1996-2020 Free Software Foundation, Inc. + Copyright (C) 1996-2021 Free Software Foundation, Inc. Contributed by Cygnus Support. This file is part of GDB, the GNU debugger. diff -Nru gdb-9.1/sim/common/cgen-utils.c gdb-10.2/sim/common/cgen-utils.c --- gdb-9.1/sim/common/cgen-utils.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/cgen-utils.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Support code for various pieces of CGEN simulators. - Copyright (C) 1996-2020 Free Software Foundation, Inc. + Copyright (C) 1996-2021 Free Software Foundation, Inc. Contributed by Cygnus Support. This file is part of GDB, the GNU debugger. diff -Nru gdb-9.1/sim/common/ChangeLog gdb-10.2/sim/common/ChangeLog --- gdb-9.1/sim/common/ChangeLog 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/sim/common/ChangeLog 2021-04-25 04:06:26.000000000 +0000 @@ -1,3 +1,21 @@ +2020-08-10 Tom de Vries <tdevries@suse.de> + + * sim-cpu.c: Include stdlib.h for free. + +2020-01-19 Simon Marchi <simon.marchi@polymtl.ca> + + * nrun.c: Include stdlib.h. + * sim-core.c: Likewise. + * sim-engine.c: Likewise. + * sim-io.c: Likewise. + * sim-module.c: Likewise. + * sim-reason.c: Likewise. + +2019-12-19 Tom Tromey <tromey@adacore.com> + + PR build/24572: + * Makefile.in (install-strip): New target. + 2019-12-01 Pavel I. Kryukov <kryukov@frtk.ru> * sim-utils.c: Prevent buffer overflow. diff -Nru gdb-9.1/sim/common/create-version.sh gdb-10.2/sim/common/create-version.sh --- gdb-9.1/sim/common/create-version.sh 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/create-version.sh 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ #!/bin/sh -# Copyright (C) 1989-2020 Free Software Foundation, Inc. +# Copyright (C) 1989-2021 Free Software Foundation, Inc. # This file is part of GDB. diff -Nru gdb-9.1/sim/common/dv-cfi.c gdb-10.2/sim/common/dv-cfi.c --- gdb-9.1/sim/common/dv-cfi.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/dv-cfi.c 2021-04-25 04:06:26.000000000 +0000 @@ -2,7 +2,7 @@ http://www.spansion.com/Support/AppNotes/CFI_Spec_AN_03.pdf http://www.spansion.com/Support/AppNotes/cfi_100_20011201.pdf - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/common/dv-cfi.h gdb-10.2/sim/common/dv-cfi.h --- gdb-9.1/sim/common/dv-cfi.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/dv-cfi.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Common Flash Memory Interface (CFI) model. - Copyright (C) 2010-2020 Free Software Foundation, Inc. + Copyright (C) 2010-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/common/dv-core.c gdb-10.2/sim/common/dv-core.c --- gdb-9.1/sim/common/dv-core.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/dv-core.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* The common simulator framework for GDB, the GNU Debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. Contributed by Andrew Cagney and Red Hat. diff -Nru gdb-9.1/sim/common/dv-glue.c gdb-10.2/sim/common/dv-glue.c --- gdb-9.1/sim/common/dv-glue.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/dv-glue.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* The common simulator framework for GDB, the GNU Debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. Contributed by Andrew Cagney and Red Hat. diff -Nru gdb-9.1/sim/common/dv-pal.c gdb-10.2/sim/common/dv-pal.c --- gdb-9.1/sim/common/dv-pal.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/dv-pal.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* The common simulator framework for GDB, the GNU Debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. Contributed by Andrew Cagney and Red Hat. diff -Nru gdb-9.1/sim/common/dv-sockser.c gdb-10.2/sim/common/dv-sockser.c --- gdb-9.1/sim/common/dv-sockser.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/dv-sockser.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Serial port emulation using sockets. - Copyright (C) 1998-2020 Free Software Foundation, Inc. + Copyright (C) 1998-2021 Free Software Foundation, Inc. Contributed by Cygnus Solutions. This program is free software; you can redistribute it and/or modify diff -Nru gdb-9.1/sim/common/dv-sockser.h gdb-10.2/sim/common/dv-sockser.h --- gdb-9.1/sim/common/dv-sockser.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/dv-sockser.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Serial port emulation via sockets. - Copyright (C) 1998-2020 Free Software Foundation, Inc. + Copyright (C) 1998-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/common/genmloop.sh gdb-10.2/sim/common/genmloop.sh --- gdb-9.1/sim/common/genmloop.sh 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/genmloop.sh 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ # Generate the main loop of the simulator. -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2021 Free Software Foundation, Inc. # Contributed by Cygnus Support. # # This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/common/hw-alloc.c gdb-10.2/sim/common/hw-alloc.c --- gdb-9.1/sim/common/hw-alloc.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/hw-alloc.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Hardware memory allocator. - Copyright (C) 1998-2020 Free Software Foundation, Inc. + Copyright (C) 1998-2021 Free Software Foundation, Inc. Contributed by Cygnus Support. This file is part of GDB, the GNU debugger. diff -Nru gdb-9.1/sim/common/hw-alloc.h gdb-10.2/sim/common/hw-alloc.h --- gdb-9.1/sim/common/hw-alloc.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/hw-alloc.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Hardware memory allocator. - Copyright (C) 1998-2020 Free Software Foundation, Inc. + Copyright (C) 1998-2021 Free Software Foundation, Inc. Contributed by Cygnus Support. This file is part of GDB, the GNU debugger. diff -Nru gdb-9.1/sim/common/hw-base.c gdb-10.2/sim/common/hw-base.c --- gdb-9.1/sim/common/hw-base.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/hw-base.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* The common simulator framework for GDB, the GNU Debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. Contributed by Andrew Cagney and Red Hat. diff -Nru gdb-9.1/sim/common/hw-base.h gdb-10.2/sim/common/hw-base.h --- gdb-9.1/sim/common/hw-base.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/hw-base.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* The common simulator framework for GDB, the GNU Debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. Contributed by Andrew Cagney and Red Hat. diff -Nru gdb-9.1/sim/common/hw-device.c gdb-10.2/sim/common/hw-device.c --- gdb-9.1/sim/common/hw-device.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/hw-device.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* The common simulator framework for GDB, the GNU Debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. Contributed by Andrew Cagney and Red Hat. diff -Nru gdb-9.1/sim/common/hw-device.h gdb-10.2/sim/common/hw-device.h --- gdb-9.1/sim/common/hw-device.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/hw-device.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* The common simulator framework for GDB, the GNU Debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. Contributed by Andrew Cagney and Red Hat. diff -Nru gdb-9.1/sim/common/hw-events.c gdb-10.2/sim/common/hw-events.c --- gdb-9.1/sim/common/hw-events.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/hw-events.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Hardware event manager. - Copyright (C) 1998-2020 Free Software Foundation, Inc. + Copyright (C) 1998-2021 Free Software Foundation, Inc. Contributed by Cygnus Support. This file is part of GDB, the GNU debugger. diff -Nru gdb-9.1/sim/common/hw-events.h gdb-10.2/sim/common/hw-events.h --- gdb-9.1/sim/common/hw-events.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/hw-events.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Hardware event manager. - Copyright (C) 1998-2020 Free Software Foundation, Inc. + Copyright (C) 1998-2021 Free Software Foundation, Inc. Contributed by Cygnus Support. This file is part of GDB, the GNU debugger. diff -Nru gdb-9.1/sim/common/hw-handles.c gdb-10.2/sim/common/hw-handles.c --- gdb-9.1/sim/common/hw-handles.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/hw-handles.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* The common simulator framework for GDB, the GNU Debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. Contributed by Andrew Cagney and Red Hat. diff -Nru gdb-9.1/sim/common/hw-handles.h gdb-10.2/sim/common/hw-handles.h --- gdb-9.1/sim/common/hw-handles.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/hw-handles.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* The common simulator framework for GDB, the GNU Debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. Contributed by Andrew Cagney and Red Hat. diff -Nru gdb-9.1/sim/common/hw-instances.c gdb-10.2/sim/common/hw-instances.c --- gdb-9.1/sim/common/hw-instances.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/hw-instances.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* The common simulator framework for GDB, the GNU Debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. Contributed by Andrew Cagney and Red Hat. diff -Nru gdb-9.1/sim/common/hw-instances.h gdb-10.2/sim/common/hw-instances.h --- gdb-9.1/sim/common/hw-instances.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/hw-instances.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* The common simulator framework for GDB, the GNU Debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. Contributed by Andrew Cagney and Red Hat. diff -Nru gdb-9.1/sim/common/hw-main.h gdb-10.2/sim/common/hw-main.h --- gdb-9.1/sim/common/hw-main.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/hw-main.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Common hardware header file. - Copyright (C) 1998-2020 Free Software Foundation, Inc. + Copyright (C) 1998-2021 Free Software Foundation, Inc. Contributed by Andrew Cagney and Cygnus Support. This file is part of GDB, the GNU debugger. diff -Nru gdb-9.1/sim/common/hw-ports.c gdb-10.2/sim/common/hw-ports.c --- gdb-9.1/sim/common/hw-ports.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/hw-ports.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Hardware ports. - Copyright (C) 1998-2020 Free Software Foundation, Inc. + Copyright (C) 1998-2021 Free Software Foundation, Inc. Contributed by Andrew Cagney and Cygnus Solutions. This file is part of GDB, the GNU debugger. diff -Nru gdb-9.1/sim/common/hw-ports.h gdb-10.2/sim/common/hw-ports.h --- gdb-9.1/sim/common/hw-ports.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/hw-ports.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Hardware ports. - Copyright (C) 1998-2020 Free Software Foundation, Inc. + Copyright (C) 1998-2021 Free Software Foundation, Inc. Contributed by Andrew Cagney and Cygnus Solutions. This file is part of GDB, the GNU debugger. diff -Nru gdb-9.1/sim/common/hw-properties.c gdb-10.2/sim/common/hw-properties.c --- gdb-9.1/sim/common/hw-properties.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/hw-properties.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* The common simulator framework for GDB, the GNU Debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. Contributed by Andrew Cagney and Red Hat. diff -Nru gdb-9.1/sim/common/hw-properties.h gdb-10.2/sim/common/hw-properties.h --- gdb-9.1/sim/common/hw-properties.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/hw-properties.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* The common simulator framework for GDB, the GNU Debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. Contributed by Andrew Cagney and Red Hat. diff -Nru gdb-9.1/sim/common/hw-tree.c gdb-10.2/sim/common/hw-tree.c --- gdb-9.1/sim/common/hw-tree.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/hw-tree.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* The common simulator framework for GDB, the GNU Debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. Contributed by Andrew Cagney and Red Hat. diff -Nru gdb-9.1/sim/common/hw-tree.h gdb-10.2/sim/common/hw-tree.h --- gdb-9.1/sim/common/hw-tree.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/hw-tree.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* The common simulator framework for GDB, the GNU Debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. Contributed by Andrew Cagney and Red Hat. diff -Nru gdb-9.1/sim/common/Make-common.in gdb-10.2/sim/common/Make-common.in --- gdb-9.1/sim/common/Make-common.in 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/Make-common.in 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ # Makefile fragment for common parts of all simulators. -# Copyright 1997-2020 Free Software Foundation, Inc. +# Copyright 1997-2021 Free Software Foundation, Inc. # Contributed by Cygnus Support. # This program is free software; you can redistribute it and/or modify diff -Nru gdb-9.1/sim/common/Makefile.in gdb-10.2/sim/common/Makefile.in --- gdb-9.1/sim/common/Makefile.in 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/sim/common/Makefile.in 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ # Makefile template for Configure for simulator common directory -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -115,6 +115,7 @@ # Copy the files into directories where they will be run. install: install-man +install-strip: install-man install-man: installdirs n=`echo run | sed '$(program_transform_name)'`; \ diff -Nru gdb-9.1/sim/common/nrun.c gdb-10.2/sim/common/nrun.c --- gdb-9.1/sim/common/nrun.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/sim/common/nrun.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* New version of run front end support for simulators. - Copyright (C) 1997-2020 Free Software Foundation, Inc. + Copyright (C) 1997-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -20,6 +20,7 @@ #endif #include <signal.h> +#include <stdlib.h> /* For strsignal. */ #ifdef HAVE_STRING_H diff -Nru gdb-9.1/sim/common/run.1 gdb-10.2/sim/common/run.1 --- gdb-9.1/sim/common/run.1 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/run.1 2021-04-25 04:04:35.000000000 +0000 @@ -99,7 +99,7 @@ , Richard M. Stallman and Roland H. Pesch. .SH COPYING -Copyright (c) 1993-2020 Free Software Foundation, Inc. +Copyright (c) 1993-2021 Free Software Foundation, Inc. .PP This document is distributed under the terms of the GNU Free Documentation License, version 1.1. That license is described in the diff -Nru gdb-9.1/sim/common/sim-abort.c gdb-10.2/sim/common/sim-abort.c --- gdb-9.1/sim/common/sim-abort.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/sim-abort.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Generic simulator abort. - Copyright (C) 1997-2020 Free Software Foundation, Inc. + Copyright (C) 1997-2021 Free Software Foundation, Inc. Contributed by Cygnus Support. This file is part of GDB, the GNU debugger. diff -Nru gdb-9.1/sim/common/sim-alu.h gdb-10.2/sim/common/sim-alu.h --- gdb-9.1/sim/common/sim-alu.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/sim-alu.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* The common simulator framework for GDB, the GNU Debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. Contributed by Andrew Cagney and Red Hat. diff -Nru gdb-9.1/sim/common/sim-arange.c gdb-10.2/sim/common/sim-arange.c --- gdb-9.1/sim/common/sim-arange.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/sim-arange.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Address ranges. - Copyright (C) 1998-2020 Free Software Foundation, Inc. + Copyright (C) 1998-2021 Free Software Foundation, Inc. Contributed by Cygnus Solutions. This file is part of the GNU Simulators. diff -Nru gdb-9.1/sim/common/sim-arange.h gdb-10.2/sim/common/sim-arange.h --- gdb-9.1/sim/common/sim-arange.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/sim-arange.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Address ranges. - Copyright (C) 1998-2020 Free Software Foundation, Inc. + Copyright (C) 1998-2021 Free Software Foundation, Inc. Contributed by Cygnus Solutions. This file is part of the GNU Simulators. diff -Nru gdb-9.1/sim/common/sim-assert.h gdb-10.2/sim/common/sim-assert.h --- gdb-9.1/sim/common/sim-assert.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/sim-assert.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This file is part of the program GDB. - Copyright (C) 1997-2020 Free Software Foundation, Inc. + Copyright (C) 1997-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/sim/common/sim-base.h gdb-10.2/sim/common/sim-base.h --- gdb-9.1/sim/common/sim-base.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/sim-base.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Simulator pseudo baseclass. - Copyright 1997-2020 Free Software Foundation, Inc. + Copyright 1997-2021 Free Software Foundation, Inc. Contributed by Cygnus Support. diff -Nru gdb-9.1/sim/common/sim-basics.h gdb-10.2/sim/common/sim-basics.h --- gdb-9.1/sim/common/sim-basics.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/sim-basics.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* The common simulator framework for GDB, the GNU Debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. Contributed by Andrew Cagney and Red Hat. diff -Nru gdb-9.1/sim/common/sim-bits.c gdb-10.2/sim/common/sim-bits.c --- gdb-9.1/sim/common/sim-bits.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/sim-bits.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* The common simulator framework for GDB, the GNU Debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. Contributed by Andrew Cagney and Red Hat. diff -Nru gdb-9.1/sim/common/sim-bits.h gdb-10.2/sim/common/sim-bits.h --- gdb-9.1/sim/common/sim-bits.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/sim-bits.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* The common simulator framework for GDB, the GNU Debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. Contributed by Andrew Cagney and Red Hat. diff -Nru gdb-9.1/sim/common/sim-close.c gdb-10.2/sim/common/sim-close.c --- gdb-9.1/sim/common/sim-close.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/sim-close.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Miscellaneous simulator utilities. - Copyright (C) 2005-2020 Free Software Foundation, Inc. + Copyright (C) 2005-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. and Stephane Carrez. This file is part of simulators. diff -Nru gdb-9.1/sim/common/sim-command.c gdb-10.2/sim/common/sim-command.c --- gdb-9.1/sim/common/sim-command.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/sim-command.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Miscellaneous simulator utilities. - Copyright (C) 2005-2020 Free Software Foundation, Inc. + Copyright (C) 2005-2021 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/common/sim-config.c gdb-10.2/sim/common/sim-config.c --- gdb-9.1/sim/common/sim-config.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/sim-config.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* The common simulator framework for GDB, the GNU Debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. Contributed by Andrew Cagney and Red Hat. diff -Nru gdb-9.1/sim/common/sim-config.h gdb-10.2/sim/common/sim-config.h --- gdb-9.1/sim/common/sim-config.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/sim-config.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* The common simulator framework for GDB, the GNU Debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. Contributed by Andrew Cagney and Red Hat. diff -Nru gdb-9.1/sim/common/sim-core.c gdb-10.2/sim/common/sim-core.c --- gdb-9.1/sim/common/sim-core.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/sim/common/sim-core.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* The common simulator framework for GDB, the GNU Debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. Contributed by Andrew Cagney and Red Hat. @@ -30,6 +30,8 @@ #include "sim-hw.h" #endif +#include <stdlib.h> + /* "core" module install handler. This is called via sim_module_install to install the "core" diff -Nru gdb-9.1/sim/common/sim-core.h gdb-10.2/sim/common/sim-core.h --- gdb-9.1/sim/common/sim-core.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/sim-core.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* The common simulator framework for GDB, the GNU Debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. Contributed by Andrew Cagney and Red Hat. diff -Nru gdb-9.1/sim/common/sim-cpu.c gdb-10.2/sim/common/sim-cpu.c --- gdb-9.1/sim/common/sim-cpu.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/sim-cpu.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* CPU support. - Copyright (C) 1998-2020 Free Software Foundation, Inc. + Copyright (C) 1998-2021 Free Software Foundation, Inc. Contributed by Cygnus Solutions. This file is part of GDB, the GNU debugger. @@ -17,6 +17,8 @@ You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ +#include <stdlib.h> + #include "sim-main.h" #include "bfd.h" diff -Nru gdb-9.1/sim/common/sim-cpu.h gdb-10.2/sim/common/sim-cpu.h --- gdb-9.1/sim/common/sim-cpu.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/sim-cpu.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* CPU support. - Copyright (C) 1998-2020 Free Software Foundation, Inc. + Copyright (C) 1998-2021 Free Software Foundation, Inc. Contributed by Cygnus Solutions. This file is part of GDB, the GNU debugger. diff -Nru gdb-9.1/sim/common/sim-endian.c gdb-10.2/sim/common/sim-endian.c --- gdb-9.1/sim/common/sim-endian.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/sim-endian.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* The common simulator framework for GDB, the GNU Debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. Contributed by Andrew Cagney and Red Hat. diff -Nru gdb-9.1/sim/common/sim-endian.h gdb-10.2/sim/common/sim-endian.h --- gdb-9.1/sim/common/sim-endian.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/sim-endian.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* The common simulator framework for GDB, the GNU Debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. Contributed by Andrew Cagney and Red Hat. diff -Nru gdb-9.1/sim/common/sim-engine.c gdb-10.2/sim/common/sim-engine.c --- gdb-9.1/sim/common/sim-engine.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/sim/common/sim-engine.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Generic simulator halt/restart. - Copyright (C) 1997-2020 Free Software Foundation, Inc. + Copyright (C) 1997-2021 Free Software Foundation, Inc. Contributed by Cygnus Support. This file is part of GDB, the GNU debugger. @@ -17,11 +17,12 @@ You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ -#include <stdio.h> - #include "sim-main.h" #include "sim-assert.h" +#include <stdio.h> +#include <stdlib.h> + /* Get the run state. REASON/SIGRC are the values returned by sim_stop_reason. ??? Should each cpu have its own copy? */ diff -Nru gdb-9.1/sim/common/sim-engine.h gdb-10.2/sim/common/sim-engine.h --- gdb-9.1/sim/common/sim-engine.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/sim-engine.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Generic simulator halt/resume. - Copyright (C) 1997-2020 Free Software Foundation, Inc. + Copyright (C) 1997-2021 Free Software Foundation, Inc. Contributed by Cygnus Support. This file is part of GDB, the GNU debugger. diff -Nru gdb-9.1/sim/common/sim-events.c gdb-10.2/sim/common/sim-events.c --- gdb-9.1/sim/common/sim-events.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/sim-events.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* The common simulator framework for GDB, the GNU Debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. Contributed by Andrew Cagney and Red Hat. diff -Nru gdb-9.1/sim/common/sim-events.h gdb-10.2/sim/common/sim-events.h --- gdb-9.1/sim/common/sim-events.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/sim-events.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* The common simulator framework for GDB, the GNU Debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. Contributed by Andrew Cagney and Red Hat. diff -Nru gdb-9.1/sim/common/sim-fpu.c gdb-10.2/sim/common/sim-fpu.c --- gdb-9.1/sim/common/sim-fpu.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/sim-fpu.c 2021-04-25 04:06:26.000000000 +0000 @@ -2,7 +2,7 @@ of the floating point routines in libgcc1.c for targets without hardware floating point. */ -/* Copyright 1994-2020 Free Software Foundation, Inc. +/* Copyright 1994-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/sim/common/sim-fpu.h gdb-10.2/sim/common/sim-fpu.h --- gdb-9.1/sim/common/sim-fpu.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/sim-fpu.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Simulator Floating-point support. - Copyright 1997-2020 Free Software Foundation, Inc. + Copyright 1997-2021 Free Software Foundation, Inc. Contributed by Cygnus Support. diff -Nru gdb-9.1/sim/common/sim-hload.c gdb-10.2/sim/common/sim-hload.c --- gdb-9.1/sim/common/sim-hload.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/sim-hload.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Generic load for hardware simulator models. - Copyright (C) 1997-2020 Free Software Foundation, Inc. + Copyright (C) 1997-2021 Free Software Foundation, Inc. Contributed by Cygnus Support. This file is part of GDB, the GNU debugger. diff -Nru gdb-9.1/sim/common/sim-hrw.c gdb-10.2/sim/common/sim-hrw.c --- gdb-9.1/sim/common/sim-hrw.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/sim-hrw.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Generic memory read/write for hardware simulator models. - Copyright (C) 1997-2020 Free Software Foundation, Inc. + Copyright (C) 1997-2021 Free Software Foundation, Inc. Contributed by Cygnus Support. This file is part of GDB, the GNU debugger. diff -Nru gdb-9.1/sim/common/sim-hw.c gdb-10.2/sim/common/sim-hw.c --- gdb-9.1/sim/common/sim-hw.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/sim-hw.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Simulator hardware option handling. - Copyright (C) 1998-2020 Free Software Foundation, Inc. + Copyright (C) 1998-2021 Free Software Foundation, Inc. Contributed by Cygnus Support and Andrew Cagney. This file is part of GDB, the GNU debugger. diff -Nru gdb-9.1/sim/common/sim-hw.h gdb-10.2/sim/common/sim-hw.h --- gdb-9.1/sim/common/sim-hw.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/sim-hw.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Device definitions. - Copyright (C) 1998-2020 Free Software Foundation, Inc. + Copyright (C) 1998-2021 Free Software Foundation, Inc. Contributed by Cygnus Support. This file is part of GDB, the GNU debugger. diff -Nru gdb-9.1/sim/common/sim-info.c gdb-10.2/sim/common/sim-info.c --- gdb-9.1/sim/common/sim-info.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/sim-info.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Generic memory read/write for hardware simulator models. - Copyright (C) 1998-2020 Free Software Foundation, Inc. + Copyright (C) 1998-2021 Free Software Foundation, Inc. Contributed by Cygnus Support. This file is part of GDB, the GNU debugger. diff -Nru gdb-9.1/sim/common/sim-inline.c gdb-10.2/sim/common/sim-inline.c --- gdb-9.1/sim/common/sim-inline.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/sim-inline.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* The common simulator framework for GDB, the GNU Debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. Contributed by Andrew Cagney and Red Hat. diff -Nru gdb-9.1/sim/common/sim-inline.h gdb-10.2/sim/common/sim-inline.h --- gdb-9.1/sim/common/sim-inline.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/sim-inline.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* The common simulator framework for GDB, the GNU Debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. Contributed by Andrew Cagney and Red Hat. diff -Nru gdb-9.1/sim/common/sim-io.c gdb-10.2/sim/common/sim-io.c --- gdb-9.1/sim/common/sim-io.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/sim/common/sim-io.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* The common simulator framework for GDB, the GNU Debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. Contributed by Andrew Cagney and Red Hat. @@ -33,6 +33,8 @@ #include <unistd.h> #endif +#include <stdlib.h> + /* Define the rate at which the simulator should poll the host for a quit. */ #ifndef POLL_QUIT_INTERVAL diff -Nru gdb-9.1/sim/common/sim-io.h gdb-10.2/sim/common/sim-io.h --- gdb-9.1/sim/common/sim-io.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/sim-io.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* The common simulator framework for GDB, the GNU Debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. Contributed by Andrew Cagney and Red Hat. diff -Nru gdb-9.1/sim/common/sim-load.c gdb-10.2/sim/common/sim-load.c --- gdb-9.1/sim/common/sim-load.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/sim-load.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Utility to load a file into the simulator. - Copyright (C) 1997-2020 Free Software Foundation, Inc. + Copyright (C) 1997-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/sim/common/sim-memopt.c gdb-10.2/sim/common/sim-memopt.c --- gdb-9.1/sim/common/sim-memopt.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/sim-memopt.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Simulator memory option handling. - Copyright (C) 1996-2020 Free Software Foundation, Inc. + Copyright (C) 1996-2021 Free Software Foundation, Inc. Contributed by Cygnus Support. This file is part of GDB, the GNU debugger. diff -Nru gdb-9.1/sim/common/sim-memopt.h gdb-10.2/sim/common/sim-memopt.h --- gdb-9.1/sim/common/sim-memopt.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/sim-memopt.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Header file for simulator memory argument handling. - Copyright (C) 1997-2020 Free Software Foundation, Inc. + Copyright (C) 1997-2021 Free Software Foundation, Inc. Contributed by Cygnus Support. This file is part of GDB, the GNU debugger. diff -Nru gdb-9.1/sim/common/sim-model.c gdb-10.2/sim/common/sim-model.c --- gdb-9.1/sim/common/sim-model.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/sim-model.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Model support. - Copyright (C) 1996-2020 Free Software Foundation, Inc. + Copyright (C) 1996-2021 Free Software Foundation, Inc. Contributed by Cygnus Support. This file is part of GDB, the GNU debugger. diff -Nru gdb-9.1/sim/common/sim-model.h gdb-10.2/sim/common/sim-model.h --- gdb-9.1/sim/common/sim-model.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/sim-model.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Architecture, machine, and model support. - Copyright (C) 1997-2020 Free Software Foundation, Inc. + Copyright (C) 1997-2021 Free Software Foundation, Inc. Contributed by Cygnus Support. This file is part of GDB, the GNU debugger. diff -Nru gdb-9.1/sim/common/sim-module.c gdb-10.2/sim/common/sim-module.c --- gdb-9.1/sim/common/sim-module.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/sim/common/sim-module.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Module support. - Copyright 1996-2020 Free Software Foundation, Inc. + Copyright 1996-2021 Free Software Foundation, Inc. Contributed by Cygnus Support. @@ -36,6 +36,8 @@ #include "libiberty.h" +#include <stdlib.h> + /* List of all modules. */ static MODULE_INSTALL_FN * const modules[] = { standard_install, diff -Nru gdb-9.1/sim/common/sim-module.h gdb-10.2/sim/common/sim-module.h --- gdb-9.1/sim/common/sim-module.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/sim-module.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Module support. - Copyright (C) 1996-2020 Free Software Foundation, Inc. + Copyright (C) 1996-2021 Free Software Foundation, Inc. Contributed by Cygnus Support. This file is part of GDB, the GNU debugger. diff -Nru gdb-9.1/sim/common/sim-n-bits.h gdb-10.2/sim/common/sim-n-bits.h --- gdb-9.1/sim/common/sim-n-bits.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/sim-n-bits.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* The common simulator framework for GDB, the GNU Debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. Contributed by Andrew Cagney and Red Hat. diff -Nru gdb-9.1/sim/common/sim-n-core.h gdb-10.2/sim/common/sim-n-core.h --- gdb-9.1/sim/common/sim-n-core.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/sim-n-core.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* The common simulator framework for GDB, the GNU Debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. Contributed by Andrew Cagney and Red Hat. diff -Nru gdb-9.1/sim/common/sim-n-endian.h gdb-10.2/sim/common/sim-n-endian.h --- gdb-9.1/sim/common/sim-n-endian.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/sim-n-endian.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* The common simulator framework for GDB, the GNU Debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. Contributed by Andrew Cagney and Red Hat. diff -Nru gdb-9.1/sim/common/sim-options.c gdb-10.2/sim/common/sim-options.c --- gdb-9.1/sim/common/sim-options.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/sim-options.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Simulator option handling. - Copyright (C) 1996-2020 Free Software Foundation, Inc. + Copyright (C) 1996-2021 Free Software Foundation, Inc. Contributed by Cygnus Support. This file is part of GDB, the GNU debugger. diff -Nru gdb-9.1/sim/common/sim-options.h gdb-10.2/sim/common/sim-options.h --- gdb-9.1/sim/common/sim-options.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/sim-options.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Header file for simulator argument handling. - Copyright (C) 1997-2020 Free Software Foundation, Inc. + Copyright (C) 1997-2021 Free Software Foundation, Inc. Contributed by Cygnus Support. This file is part of GDB, the GNU debugger. diff -Nru gdb-9.1/sim/common/sim-profile.c gdb-10.2/sim/common/sim-profile.c --- gdb-9.1/sim/common/sim-profile.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/sim-profile.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Default profiling support. - Copyright (C) 1996-2020 Free Software Foundation, Inc. + Copyright (C) 1996-2021 Free Software Foundation, Inc. Contributed by Cygnus Support. This file is part of GDB, the GNU debugger. diff -Nru gdb-9.1/sim/common/sim-profile.h gdb-10.2/sim/common/sim-profile.h --- gdb-9.1/sim/common/sim-profile.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/sim-profile.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Profile header for simulators using common framework. - Copyright (C) 1996-2020 Free Software Foundation, Inc. + Copyright (C) 1996-2021 Free Software Foundation, Inc. Contributed by Cygnus Support. This file is part of GDB, the GNU debugger. diff -Nru gdb-9.1/sim/common/sim-reason.c gdb-10.2/sim/common/sim-reason.c --- gdb-9.1/sim/common/sim-reason.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/sim/common/sim-reason.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Generic simulator stop_reason. - Copyright (C) 1997-2020 Free Software Foundation, Inc. + Copyright (C) 1997-2021 Free Software Foundation, Inc. Contributed by Cygnus Support. This file is part of GDB, the GNU debugger. @@ -20,6 +20,8 @@ #include "sim-main.h" #include "sim-assert.h" +#include <stdlib.h> + /* Generic implementation of sim_stop_reason */ void diff -Nru gdb-9.1/sim/common/sim-reg.c gdb-10.2/sim/common/sim-reg.c --- gdb-9.1/sim/common/sim-reg.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/sim-reg.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Generic register read/write. - Copyright (C) 1998-2020 Free Software Foundation, Inc. + Copyright (C) 1998-2021 Free Software Foundation, Inc. Contributed by Cygnus Solutions. This file is part of GDB, the GNU debugger. diff -Nru gdb-9.1/sim/common/sim-resume.c gdb-10.2/sim/common/sim-resume.c --- gdb-9.1/sim/common/sim-resume.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/sim-resume.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Generic simulator resume. - Copyright (C) 1997-2020 Free Software Foundation, Inc. + Copyright (C) 1997-2021 Free Software Foundation, Inc. Contributed by Cygnus Support. This file is part of GDB, the GNU debugger. diff -Nru gdb-9.1/sim/common/sim-run.c gdb-10.2/sim/common/sim-run.c --- gdb-9.1/sim/common/sim-run.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/sim-run.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Generic simulator run. - Copyright (C) 1997-2020 Free Software Foundation, Inc. + Copyright (C) 1997-2021 Free Software Foundation, Inc. Contributed by Cygnus Support. This file is part of GDB, the GNU debugger. diff -Nru gdb-9.1/sim/common/sim-signal.c gdb-10.2/sim/common/sim-signal.c --- gdb-9.1/sim/common/sim-signal.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/sim-signal.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Simulator signal support - Copyright (C) 1997-2020 Free Software Foundation, Inc. + Copyright (C) 1997-2021 Free Software Foundation, Inc. Contributed by Cygnus Support This file is part of the GNU Simulators. diff -Nru gdb-9.1/sim/common/sim-signal.h gdb-10.2/sim/common/sim-signal.h --- gdb-9.1/sim/common/sim-signal.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/sim-signal.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Simulator signal support - Copyright (C) 1997-2020 Free Software Foundation, Inc. + Copyright (C) 1997-2021 Free Software Foundation, Inc. Contributed by Cygnus Support This file is part of the GNU Simulators. diff -Nru gdb-9.1/sim/common/sim-stop.c gdb-10.2/sim/common/sim-stop.c --- gdb-9.1/sim/common/sim-stop.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/sim-stop.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Generic simulator stop. - Copyright (C) 1997-2020 Free Software Foundation, Inc. + Copyright (C) 1997-2021 Free Software Foundation, Inc. Contributed by Cygnus Support. This file is part of GDB, the GNU debugger. diff -Nru gdb-9.1/sim/common/sim-syscall.c gdb-10.2/sim/common/sim-syscall.c --- gdb-9.1/sim/common/sim-syscall.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/sim-syscall.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Simulator system call support. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/common/sim-syscall.h gdb-10.2/sim/common/sim-syscall.h --- gdb-9.1/sim/common/sim-syscall.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/sim-syscall.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Simulator system call support. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/common/sim-trace.c gdb-10.2/sim/common/sim-trace.c --- gdb-9.1/sim/common/sim-trace.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/sim-trace.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Simulator tracing/debugging support. - Copyright (C) 1997-2020 Free Software Foundation, Inc. + Copyright (C) 1997-2021 Free Software Foundation, Inc. Contributed by Cygnus Support. This file is part of GDB, the GNU debugger. diff -Nru gdb-9.1/sim/common/sim-trace.h gdb-10.2/sim/common/sim-trace.h --- gdb-9.1/sim/common/sim-trace.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/sim-trace.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Simulator tracing/debugging support. - Copyright (C) 1997-2020 Free Software Foundation, Inc. + Copyright (C) 1997-2021 Free Software Foundation, Inc. Contributed by Cygnus Support. This file is part of GDB, the GNU debugger. diff -Nru gdb-9.1/sim/common/sim-types.h gdb-10.2/sim/common/sim-types.h --- gdb-9.1/sim/common/sim-types.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/sim-types.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* The common simulator framework for GDB, the GNU Debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. Contributed by Andrew Cagney and Red Hat. diff -Nru gdb-9.1/sim/common/sim-utils.c gdb-10.2/sim/common/sim-utils.c --- gdb-9.1/sim/common/sim-utils.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/sim-utils.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Miscellaneous simulator utilities. - Copyright (C) 1997-2020 Free Software Foundation, Inc. + Copyright (C) 1997-2021 Free Software Foundation, Inc. Contributed by Cygnus Support. This file is part of GDB, the GNU debugger. diff -Nru gdb-9.1/sim/common/sim-utils.h gdb-10.2/sim/common/sim-utils.h --- gdb-9.1/sim/common/sim-utils.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/sim-utils.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Miscellaneous simulator utilities. - Copyright (C) 1997-2020 Free Software Foundation, Inc. + Copyright (C) 1997-2021 Free Software Foundation, Inc. Contributed by Cygnus Support. This file is part of GDB, the GNU debugger. diff -Nru gdb-9.1/sim/common/sim-watch.c gdb-10.2/sim/common/sim-watch.c --- gdb-9.1/sim/common/sim-watch.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/sim-watch.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Generic simulator watchpoint support. - Copyright (C) 1997-2020 Free Software Foundation, Inc. + Copyright (C) 1997-2021 Free Software Foundation, Inc. Contributed by Cygnus Support. This file is part of GDB, the GNU debugger. diff -Nru gdb-9.1/sim/common/sim-watch.h gdb-10.2/sim/common/sim-watch.h --- gdb-9.1/sim/common/sim-watch.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/sim-watch.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Simulator watchpoint support. - Copyright (C) 1997-2020 Free Software Foundation, Inc. + Copyright (C) 1997-2021 Free Software Foundation, Inc. Contributed by Cygnus Support. This file is part of GDB, the GNU debugger. diff -Nru gdb-9.1/sim/common/syscall.c gdb-10.2/sim/common/syscall.c --- gdb-9.1/sim/common/syscall.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/syscall.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Remote target system call support. - Copyright 1997-2020 Free Software Foundation, Inc. + Copyright 1997-2021 Free Software Foundation, Inc. Contributed by Cygnus Solutions. This file is part of GDB. diff -Nru gdb-9.1/sim/common/version.h gdb-10.2/sim/common/version.h --- gdb-9.1/sim/common/version.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/common/version.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Version information for GDB. - Copyright (C) 1999-2020 Free Software Foundation, Inc. + Copyright (C) 1999-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/sim/configure gdb-10.2/sim/configure --- gdb-9.1/sim/configure 2019-09-23 23:33:55.000000000 +0000 +++ gdb-10.2/sim/configure 2021-04-25 04:06:26.000000000 +0000 @@ -669,6 +669,7 @@ arm avr bfin +bpf cr16 cris d10v @@ -3718,6 +3719,13 @@ ;; + bpf-*-*) + + sim_arch=bpf + subdirs="$subdirs bpf" + + + ;; cr16*-*-*) sim_arch=cr16 @@ -3906,11 +3914,13 @@ esac - subdirs="$subdirs testsuite" + if test x"${sim_arch}" != x; then + subdirs="$subdirs testsuite" - if test "$sim_igen" = yes; then - subdirs="$subdirs igen" + if test "$sim_igen" = yes; then + subdirs="$subdirs igen" + fi fi fi diff -Nru gdb-9.1/sim/configure.ac gdb-10.2/sim/configure.ac --- gdb-9.1/sim/configure.ac 2019-02-23 12:20:11.000000000 +0000 +++ gdb-10.2/sim/configure.ac 2021-04-25 04:06:26.000000000 +0000 @@ -43,9 +43,11 @@ ]) if test "${enable_sim}" != no; then sinclude(configure.tgt) - AC_CONFIG_SUBDIRS(testsuite) - if test "$sim_igen" = yes; then - AC_CONFIG_SUBDIRS(igen) + if test x"${sim_arch}" != x; then + AC_CONFIG_SUBDIRS(testsuite) + if test "$sim_igen" = yes; then + AC_CONFIG_SUBDIRS(igen) + fi fi fi diff -Nru gdb-9.1/sim/configure.tgt gdb-10.2/sim/configure.tgt --- gdb-9.1/sim/configure.tgt 2019-09-23 23:33:55.000000000 +0000 +++ gdb-10.2/sim/configure.tgt 2021-04-25 04:06:26.000000000 +0000 @@ -26,6 +26,9 @@ bfin-*-*) SIM_ARCH(bfin) ;; + bpf-*-*) + SIM_ARCH(bpf) + ;; cr16*-*-*) SIM_ARCH(cr16) ;; diff -Nru gdb-9.1/sim/cr16/cr16_sim.h gdb-10.2/sim/cr16/cr16_sim.h --- gdb-9.1/sim/cr16/cr16_sim.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/cr16/cr16_sim.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Simulation code for the CR16 processor. - Copyright (C) 2008-2020 Free Software Foundation, Inc. + Copyright (C) 2008-2021 Free Software Foundation, Inc. Contributed by M Ranga Swami Reddy <MR.Swami.Reddy@nsc.com> This file is part of GDB, the GNU debugger. diff -Nru gdb-9.1/sim/cr16/gencode.c gdb-10.2/sim/cr16/gencode.c --- gdb-9.1/sim/cr16/gencode.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/cr16/gencode.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Simulation code for the CR16 processor. - Copyright (C) 2008-2020 Free Software Foundation, Inc. + Copyright (C) 2008-2021 Free Software Foundation, Inc. Contributed by M Ranga Swami Reddy <MR.Swami.Reddy@nsc.com> This file is part of GDB, the GNU debugger. diff -Nru gdb-9.1/sim/cr16/interp.c gdb-10.2/sim/cr16/interp.c --- gdb-9.1/sim/cr16/interp.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/cr16/interp.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Simulation code for the CR16 processor. - Copyright (C) 2008-2020 Free Software Foundation, Inc. + Copyright (C) 2008-2021 Free Software Foundation, Inc. Contributed by M Ranga Swami Reddy <MR.Swami.Reddy@nsc.com> This file is part of GDB, the GNU debugger. diff -Nru gdb-9.1/sim/cr16/Makefile.in gdb-10.2/sim/cr16/Makefile.in --- gdb-9.1/sim/cr16/Makefile.in 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/cr16/Makefile.in 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ # Makefile template for Configure for the CR16 sim library. -# Copyright (C) 2008-2020 Free Software Foundation, Inc. +# Copyright (C) 2008-2021 Free Software Foundation, Inc. # Contributed by M Ranga Swami Reddy <MR.Swami.Reddy@nsc.com> # # This program is free software; you can redistribute it and/or modify diff -Nru gdb-9.1/sim/cr16/sim-main.h gdb-10.2/sim/cr16/sim-main.h --- gdb-9.1/sim/cr16/sim-main.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/cr16/sim-main.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Simulation code for the CR16 processor. - Copyright (C) 2009-2020 Free Software Foundation, Inc. + Copyright (C) 2009-2021 Free Software Foundation, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/cr16/simops.c gdb-10.2/sim/cr16/simops.c --- gdb-9.1/sim/cr16/simops.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/cr16/simops.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Simulation code for the CR16 processor. - Copyright (C) 2008-2020 Free Software Foundation, Inc. + Copyright (C) 2008-2021 Free Software Foundation, Inc. Contributed by M Ranga Swami Reddy <MR.Swami.Reddy@nsc.com> This file is part of GDB, the GNU debugger. diff -Nru gdb-9.1/sim/cris/arch.c gdb-10.2/sim/cris/arch.c --- gdb-9.1/sim/cris/arch.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/cris/arch.c 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/cris/arch.h gdb-10.2/sim/cris/arch.h --- gdb-9.1/sim/cris/arch.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/cris/arch.h 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/cris/cpuall.h gdb-10.2/sim/cris/cpuall.h --- gdb-9.1/sim/cris/cpuall.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/cris/cpuall.h 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/cris/cpuv10.c gdb-10.2/sim/cris/cpuv10.c --- gdb-9.1/sim/cris/cpuv10.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/cris/cpuv10.c 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/cris/cpuv10.h gdb-10.2/sim/cris/cpuv10.h --- gdb-9.1/sim/cris/cpuv10.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/cris/cpuv10.h 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/cris/cpuv32.c gdb-10.2/sim/cris/cpuv32.c --- gdb-9.1/sim/cris/cpuv32.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/cris/cpuv32.c 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/cris/cpuv32.h gdb-10.2/sim/cris/cpuv32.h --- gdb-9.1/sim/cris/cpuv32.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/cris/cpuv32.h 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/cris/cris-desc.c gdb-10.2/sim/cris/cris-desc.c --- gdb-9.1/sim/cris/cris-desc.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/cris/cris-desc.c 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU Binutils and/or GDB, the GNU debugger. diff -Nru gdb-9.1/sim/cris/cris-desc.h gdb-10.2/sim/cris/cris-desc.h --- gdb-9.1/sim/cris/cris-desc.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/cris/cris-desc.h 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU Binutils and/or GDB, the GNU debugger. diff -Nru gdb-9.1/sim/cris/cris-opc.h gdb-10.2/sim/cris/cris-opc.h --- gdb-9.1/sim/cris/cris-opc.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/cris/cris-opc.h 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU Binutils and/or GDB, the GNU debugger. diff -Nru gdb-9.1/sim/cris/cris-sim.h gdb-10.2/sim/cris/cris-sim.h --- gdb-9.1/sim/cris/cris-sim.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/cris/cris-sim.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Collection of junk for CRIS. - Copyright (C) 2004-2020 Free Software Foundation, Inc. + Copyright (C) 2004-2021 Free Software Foundation, Inc. Contributed by Axis Communications. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/cris/cris-tmpl.c gdb-10.2/sim/cris/cris-tmpl.c --- gdb-9.1/sim/cris/cris-tmpl.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/cris/cris-tmpl.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* CRIS base simulator support code - Copyright (C) 2004-2020 Free Software Foundation, Inc. + Copyright (C) 2004-2021 Free Software Foundation, Inc. Contributed by Axis Communications. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/cris/crisv10f.c gdb-10.2/sim/cris/crisv10f.c --- gdb-9.1/sim/cris/crisv10f.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/cris/crisv10f.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* CRIS v10 simulator support code - Copyright (C) 2004-2020 Free Software Foundation, Inc. + Copyright (C) 2004-2021 Free Software Foundation, Inc. Contributed by Axis Communications. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/cris/crisv32f.c gdb-10.2/sim/cris/crisv32f.c --- gdb-9.1/sim/cris/crisv32f.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/cris/crisv32f.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* CRIS v32 simulator support code - Copyright (C) 2004-2020 Free Software Foundation, Inc. + Copyright (C) 2004-2021 Free Software Foundation, Inc. Contributed by Axis Communications. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/cris/decodev10.c gdb-10.2/sim/cris/decodev10.c --- gdb-9.1/sim/cris/decodev10.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/cris/decodev10.c 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/cris/decodev10.h gdb-10.2/sim/cris/decodev10.h --- gdb-9.1/sim/cris/decodev10.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/cris/decodev10.h 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/cris/decodev32.c gdb-10.2/sim/cris/decodev32.c --- gdb-9.1/sim/cris/decodev32.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/cris/decodev32.c 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/cris/decodev32.h gdb-10.2/sim/cris/decodev32.h --- gdb-9.1/sim/cris/decodev32.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/cris/decodev32.h 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/cris/dv-cris_900000xx.c gdb-10.2/sim/cris/dv-cris_900000xx.c --- gdb-9.1/sim/cris/dv-cris_900000xx.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/cris/dv-cris_900000xx.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Handle 0x900000xx addresses in the sim. - Copyright (C) 2004-2020 Free Software Foundation, Inc. + Copyright (C) 2004-2021 Free Software Foundation, Inc. Contributed by Axis Communications. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/cris/dv-cris.c gdb-10.2/sim/cris/dv-cris.c --- gdb-9.1/sim/cris/dv-cris.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/cris/dv-cris.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* The CRIS interrupt framework for GDB, the GNU Debugger. - Copyright 2006-2020 Free Software Foundation, Inc. + Copyright 2006-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/sim/cris/dv-rv.c gdb-10.2/sim/cris/dv-rv.c --- gdb-9.1/sim/cris/dv-rv.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/cris/dv-rv.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,7 +1,7 @@ /* The remote-virtual-component simulator framework for GDB, the GNU Debugger. - Copyright 2006-2020 Free Software Foundation, Inc. + Copyright 2006-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/sim/cris/Makefile.in gdb-10.2/sim/cris/Makefile.in --- gdb-9.1/sim/cris/Makefile.in 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/cris/Makefile.in 2021-04-25 04:06:26.000000000 +0000 @@ -1,7 +1,7 @@ # Makefile template for Configure for the CRIS simulator, based on a mix # of the ones for m32r and i960. # -# Copyright (C) 2004-2020 Free Software Foundation, Inc. +# Copyright (C) 2004-2021 Free Software Foundation, Inc. # Contributed by Axis Communications. # # This program is free software; you can redistribute it and/or modify diff -Nru gdb-9.1/sim/cris/mloop.in gdb-10.2/sim/cris/mloop.in --- gdb-9.1/sim/cris/mloop.in 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/cris/mloop.in 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ # Simulator main loop for CRIS. -*- C -*- -# Copyright (C) 2004-2020 Free Software Foundation, Inc. +# Copyright (C) 2004-2021 Free Software Foundation, Inc. # Contributed by Axis Communications. # # This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/cris/modelv10.c gdb-10.2/sim/cris/modelv10.c --- gdb-9.1/sim/cris/modelv10.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/cris/modelv10.c 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/cris/modelv32.c gdb-10.2/sim/cris/modelv32.c --- gdb-9.1/sim/cris/modelv32.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/cris/modelv32.c 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/cris/rvdummy.c gdb-10.2/sim/cris/rvdummy.c --- gdb-9.1/sim/cris/rvdummy.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/cris/rvdummy.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,7 +1,7 @@ /* Test-driver for the remote-virtual-component simulator framework for GDB, the GNU Debugger. - Copyright 2006-2020 Free Software Foundation, Inc. + Copyright 2006-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/sim/cris/semcrisv10f-switch.c gdb-10.2/sim/cris/semcrisv10f-switch.c --- gdb-9.1/sim/cris/semcrisv10f-switch.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/cris/semcrisv10f-switch.c 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/cris/semcrisv32f-switch.c gdb-10.2/sim/cris/semcrisv32f-switch.c --- gdb-9.1/sim/cris/semcrisv32f-switch.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/cris/semcrisv32f-switch.c 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/cris/sim-if.c gdb-10.2/sim/cris/sim-if.c --- gdb-9.1/sim/cris/sim-if.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/cris/sim-if.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Main simulator entry points specific to the CRIS. - Copyright (C) 2004-2020 Free Software Foundation, Inc. + Copyright (C) 2004-2021 Free Software Foundation, Inc. Contributed by Axis Communications. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/cris/sim-main.h gdb-10.2/sim/cris/sim-main.h --- gdb-9.1/sim/cris/sim-main.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/cris/sim-main.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Main header for the CRIS simulator, based on the m32r header. - Copyright (C) 2004-2020 Free Software Foundation, Inc. + Copyright (C) 2004-2021 Free Software Foundation, Inc. Contributed by Axis Communications. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/cris/traps.c gdb-10.2/sim/cris/traps.c --- gdb-9.1/sim/cris/traps.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/cris/traps.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* CRIS exception, interrupt, and trap (EIT) support - Copyright (C) 2004-2020 Free Software Foundation, Inc. + Copyright (C) 2004-2021 Free Software Foundation, Inc. Contributed by Axis Communications. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/d10v/Makefile.in gdb-10.2/sim/d10v/Makefile.in --- gdb-9.1/sim/d10v/Makefile.in 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/d10v/Makefile.in 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ # Makefile template for Configure for the D10v sim library. -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2021 Free Software Foundation, Inc. # Written by Cygnus Support. # # This program is free software; you can redistribute it and/or modify diff -Nru gdb-9.1/sim/d10v/sim-main.h gdb-10.2/sim/d10v/sim-main.h --- gdb-9.1/sim/d10v/sim-main.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/d10v/sim-main.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Simulation code for the d10v processor. - Copyright (C) 2009-2020 Free Software Foundation, Inc. + Copyright (C) 2009-2021 Free Software Foundation, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/erc32/ChangeLog gdb-10.2/sim/erc32/ChangeLog --- gdb-9.1/sim/erc32/ChangeLog 2019-02-23 12:20:11.000000000 +0000 +++ gdb-10.2/sim/erc32/ChangeLog 2021-04-25 04:06:26.000000000 +0000 @@ -1,3 +1,7 @@ +2020-07-29 Simon Marchi <simon.marchi@efficios.com> + + * configure: Re-generate. + 2018-10-30 Joel Sherrill <joel@rtems.org> * configure.ac: Remove the Cygwin-specific libtermcap.a hack diff -Nru gdb-9.1/sim/erc32/configure gdb-10.2/sim/erc32/configure --- gdb-9.1/sim/erc32/configure 2018-11-07 19:00:24.000000000 +0000 +++ gdb-10.2/sim/erc32/configure 2021-04-25 04:06:26.000000000 +0000 @@ -13548,7 +13548,6 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $sim_cv_os_cygwin" >&5 $as_echo "$sim_cv_os_cygwin" >&6; } - # Keep in sync with gdb's configure.ac list. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing tgetent" >&5 $as_echo_n "checking for library containing tgetent... " >&6; } diff -Nru gdb-9.1/sim/erc32/configure.ac gdb-10.2/sim/erc32/configure.ac --- gdb-9.1/sim/erc32/configure.ac 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/erc32/configure.ac 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -dnl Copyright (C) 1996-2020 Free Software Foundation, Inc. +dnl Copyright (C) 1996-2021 Free Software Foundation, Inc. dnl dnl This program is free software; you can redistribute it and/or modify dnl it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/sim/erc32/erc32.c gdb-10.2/sim/erc32/erc32.c --- gdb-9.1/sim/erc32/erc32.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/erc32/erc32.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This file is part of SIS (SPARC instruction simulator) - Copyright (C) 1995-2020 Free Software Foundation, Inc. + Copyright (C) 1995-2021 Free Software Foundation, Inc. Contributed by Jiri Gaisler, European Space Agency This program is free software; you can redistribute it and/or modify diff -Nru gdb-9.1/sim/erc32/exec.c gdb-10.2/sim/erc32/exec.c --- gdb-9.1/sim/erc32/exec.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/erc32/exec.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This file is part of SIS (SPARC instruction simulator) - Copyright (C) 1995-2020 Free Software Foundation, Inc. + Copyright (C) 1995-2021 Free Software Foundation, Inc. Contributed by Jiri Gaisler, European Space Agency This program is free software; you can redistribute it and/or modify diff -Nru gdb-9.1/sim/erc32/float.c gdb-10.2/sim/erc32/float.c --- gdb-9.1/sim/erc32/float.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/erc32/float.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This file is part of SIS (SPARC instruction simulator) - Copyright (C) 1995-2020 Free Software Foundation, Inc. + Copyright (C) 1995-2021 Free Software Foundation, Inc. Contributed by Jiri Gaisler, European Space Agency This program is free software; you can redistribute it and/or modify diff -Nru gdb-9.1/sim/erc32/func.c gdb-10.2/sim/erc32/func.c --- gdb-9.1/sim/erc32/func.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/erc32/func.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This file is part of SIS (SPARC instruction simulator) - Copyright (C) 1995-2020 Free Software Foundation, Inc. + Copyright (C) 1995-2021 Free Software Foundation, Inc. Contributed by Jiri Gaisler, European Space Agency This program is free software; you can redistribute it and/or modify diff -Nru gdb-9.1/sim/erc32/help.c gdb-10.2/sim/erc32/help.c --- gdb-9.1/sim/erc32/help.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/erc32/help.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This file is part of SIS (SPARC instruction simulator) - Copyright (C) 1995-2020 Free Software Foundation, Inc. + Copyright (C) 1995-2021 Free Software Foundation, Inc. Contributed by Jiri Gaisler, European Space Agency This program is free software; you can redistribute it and/or modify diff -Nru gdb-9.1/sim/erc32/interf.c gdb-10.2/sim/erc32/interf.c --- gdb-9.1/sim/erc32/interf.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/erc32/interf.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This file is part of SIS (SPARC instruction simulator) - Copyright (C) 1995-2020 Free Software Foundation, Inc. + Copyright (C) 1995-2021 Free Software Foundation, Inc. Contributed by Jiri Gaisler, European Space Agency This program is free software; you can redistribute it and/or modify diff -Nru gdb-9.1/sim/erc32/Makefile.in gdb-10.2/sim/erc32/Makefile.in --- gdb-9.1/sim/erc32/Makefile.in 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/erc32/Makefile.in 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ # Makefile template for Configure for the erc32sim library. -# Copyright (C) 1993-2020 Free Software Foundation, Inc. +# Copyright (C) 1993-2021 Free Software Foundation, Inc. # Written by Cygnus Support # Modified by J.Gaisler ESA/ESTEC # diff -Nru gdb-9.1/sim/erc32/sis.c gdb-10.2/sim/erc32/sis.c --- gdb-9.1/sim/erc32/sis.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/erc32/sis.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* This file is part of SIS (SPARC instruction simulator) - Copyright (C) 1995-2020 Free Software Foundation, Inc. + Copyright (C) 1995-2021 Free Software Foundation, Inc. Contributed by Jiri Gaisler, European Space Agency This program is free software; you can redistribute it and/or modify diff -Nru gdb-9.1/sim/erc32/sis.h gdb-10.2/sim/erc32/sis.h --- gdb-9.1/sim/erc32/sis.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/erc32/sis.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 1995-2020 Free Software Foundation, Inc. +/* Copyright (C) 1995-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/sim/erc32/startsim gdb-10.2/sim/erc32/startsim --- gdb-9.1/sim/erc32/startsim 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/erc32/startsim 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/sim/frv/arch.c gdb-10.2/sim/frv/arch.c --- gdb-9.1/sim/frv/arch.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/frv/arch.c 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/frv/arch.h gdb-10.2/sim/frv/arch.h --- gdb-9.1/sim/frv/arch.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/frv/arch.h 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/frv/cache.c gdb-10.2/sim/frv/cache.c --- gdb-9.1/sim/frv/cache.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/frv/cache.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* frv cache model. - Copyright (C) 1999-2020 Free Software Foundation, Inc. + Copyright (C) 1999-2021 Free Software Foundation, Inc. Contributed by Red Hat. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/frv/cache.h gdb-10.2/sim/frv/cache.h --- gdb-9.1/sim/frv/cache.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/frv/cache.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Cache support for the FRV simulator - Copyright (C) 1999-2020 Free Software Foundation, Inc. + Copyright (C) 1999-2021 Free Software Foundation, Inc. Contributed by Red Hat. This file is part of the GNU Simulators. diff -Nru gdb-9.1/sim/frv/cpuall.h gdb-10.2/sim/frv/cpuall.h --- gdb-9.1/sim/frv/cpuall.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/frv/cpuall.h 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/frv/cpu.c gdb-10.2/sim/frv/cpu.c --- gdb-9.1/sim/frv/cpu.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/frv/cpu.c 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/frv/cpu.h gdb-10.2/sim/frv/cpu.h --- gdb-9.1/sim/frv/cpu.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/frv/cpu.h 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/frv/decode.c gdb-10.2/sim/frv/decode.c --- gdb-9.1/sim/frv/decode.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/frv/decode.c 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/frv/decode.h gdb-10.2/sim/frv/decode.h --- gdb-9.1/sim/frv/decode.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/frv/decode.h 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/frv/frv.c gdb-10.2/sim/frv/frv.c --- gdb-9.1/sim/frv/frv.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/frv/frv.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* frv simulator support code - Copyright (C) 1998-2020 Free Software Foundation, Inc. + Copyright (C) 1998-2021 Free Software Foundation, Inc. Contributed by Red Hat. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/frv/frv-sim.h gdb-10.2/sim/frv/frv-sim.h --- gdb-9.1/sim/frv/frv-sim.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/frv/frv-sim.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* collection of junk waiting time to sort out - Copyright (C) 1998-2020 Free Software Foundation, Inc. + Copyright (C) 1998-2021 Free Software Foundation, Inc. Contributed by Red Hat This file is part of the GNU Simulators. diff -Nru gdb-9.1/sim/frv/interrupts.c gdb-10.2/sim/frv/interrupts.c --- gdb-9.1/sim/frv/interrupts.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/frv/interrupts.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* frv exception and interrupt support - Copyright (C) 1999-2020 Free Software Foundation, Inc. + Copyright (C) 1999-2021 Free Software Foundation, Inc. Contributed by Red Hat. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/frv/Makefile.in gdb-10.2/sim/frv/Makefile.in --- gdb-9.1/sim/frv/Makefile.in 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/frv/Makefile.in 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ # Makefile template for Configure for the frv simulator -# Copyright (C) 1998-2020 Free Software Foundation, Inc. +# Copyright (C) 1998-2021 Free Software Foundation, Inc. # Contributed by Red Hat. # # This program is free software; you can redistribute it and/or modify diff -Nru gdb-9.1/sim/frv/memory.c gdb-10.2/sim/frv/memory.c --- gdb-9.1/sim/frv/memory.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/frv/memory.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* frv memory model. - Copyright (C) 1999-2020 Free Software Foundation, Inc. + Copyright (C) 1999-2021 Free Software Foundation, Inc. Contributed by Red Hat This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/frv/mloop.in gdb-10.2/sim/frv/mloop.in --- gdb-9.1/sim/frv/mloop.in 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/frv/mloop.in 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ # Simulator main loop for frv. -*- C -*- -# Copyright (C) 1998-2020 Free Software Foundation, Inc. +# Copyright (C) 1998-2021 Free Software Foundation, Inc. # Contributed by Red Hat. # # This file is part of the GNU Simulators. diff -Nru gdb-9.1/sim/frv/model.c gdb-10.2/sim/frv/model.c --- gdb-9.1/sim/frv/model.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/frv/model.c 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/frv/options.c gdb-10.2/sim/frv/options.c --- gdb-9.1/sim/frv/options.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/frv/options.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* FRV simulator memory option handling. - Copyright (C) 1999-2020 Free Software Foundation, Inc. + Copyright (C) 1999-2021 Free Software Foundation, Inc. Contributed by Red Hat. This file is part of GDB, the GNU debugger. diff -Nru gdb-9.1/sim/frv/pipeline.c gdb-10.2/sim/frv/pipeline.c --- gdb-9.1/sim/frv/pipeline.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/frv/pipeline.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* frv vliw model. - Copyright (C) 1999-2020 Free Software Foundation, Inc. + Copyright (C) 1999-2021 Free Software Foundation, Inc. Contributed by Red Hat. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/frv/profile.c gdb-10.2/sim/frv/profile.c --- gdb-9.1/sim/frv/profile.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/frv/profile.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* frv simulator machine independent profiling code. - Copyright (C) 1998-2020 Free Software Foundation, Inc. + Copyright (C) 1998-2021 Free Software Foundation, Inc. Contributed by Red Hat This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/frv/profile-fr400.c gdb-10.2/sim/frv/profile-fr400.c --- gdb-9.1/sim/frv/profile-fr400.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/frv/profile-fr400.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* frv simulator fr400 dependent profiling code. - Copyright (C) 2001-2020 Free Software Foundation, Inc. + Copyright (C) 2001-2021 Free Software Foundation, Inc. Contributed by Red Hat This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/frv/profile-fr400.h gdb-10.2/sim/frv/profile-fr400.h --- gdb-9.1/sim/frv/profile-fr400.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/frv/profile-fr400.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Profiling definitions for the fr400 model of the FRV simulator - Copyright (C) 1998-2020 Free Software Foundation, Inc. + Copyright (C) 1998-2021 Free Software Foundation, Inc. Contributed by Red Hat. This file is part of the GNU Simulators. diff -Nru gdb-9.1/sim/frv/profile-fr450.c gdb-10.2/sim/frv/profile-fr450.c --- gdb-9.1/sim/frv/profile-fr450.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/frv/profile-fr450.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* frv simulator fr450 dependent profiling code. - Copyright (C) 2001-2020 Free Software Foundation, Inc. + Copyright (C) 2001-2021 Free Software Foundation, Inc. Contributed by Red Hat This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/frv/profile-fr500.c gdb-10.2/sim/frv/profile-fr500.c --- gdb-9.1/sim/frv/profile-fr500.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/frv/profile-fr500.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* frv simulator fr500 dependent profiling code. - Copyright (C) 1998-2020 Free Software Foundation, Inc. + Copyright (C) 1998-2021 Free Software Foundation, Inc. Contributed by Red Hat This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/frv/profile-fr500.h gdb-10.2/sim/frv/profile-fr500.h --- gdb-9.1/sim/frv/profile-fr500.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/frv/profile-fr500.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Profiling definitions for the fr500 model of the FRV simulator - Copyright (C) 1998-2020 Free Software Foundation, Inc. + Copyright (C) 1998-2021 Free Software Foundation, Inc. Contributed by Red Hat. This file is part of the GNU Simulators. diff -Nru gdb-9.1/sim/frv/profile-fr550.c gdb-10.2/sim/frv/profile-fr550.c --- gdb-9.1/sim/frv/profile-fr550.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/frv/profile-fr550.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* frv simulator fr550 dependent profiling code. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. Contributed by Red Hat This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/frv/profile-fr550.h gdb-10.2/sim/frv/profile-fr550.h --- gdb-9.1/sim/frv/profile-fr550.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/frv/profile-fr550.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Profiling definitions for the fr550 model of the FRV simulator - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. Contributed by Red Hat. This file is part of the GNU Simulators. diff -Nru gdb-9.1/sim/frv/profile.h gdb-10.2/sim/frv/profile.h --- gdb-9.1/sim/frv/profile.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/frv/profile.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Profiling definitions for the FRV simulator - Copyright (C) 1998-2020 Free Software Foundation, Inc. + Copyright (C) 1998-2021 Free Software Foundation, Inc. Contributed by Red Hat. This file is part of the GNU Simulators. diff -Nru gdb-9.1/sim/frv/registers.c gdb-10.2/sim/frv/registers.c --- gdb-9.1/sim/frv/registers.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/frv/registers.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* frv simulator support code - Copyright (C) 2000-2020 Free Software Foundation, Inc. + Copyright (C) 2000-2021 Free Software Foundation, Inc. Contributed by Red Hat. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/frv/registers.h gdb-10.2/sim/frv/registers.h --- gdb-9.1/sim/frv/registers.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/frv/registers.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Register definitions for the FRV simulator - Copyright (C) 2000-2020 Free Software Foundation, Inc. + Copyright (C) 2000-2021 Free Software Foundation, Inc. Contributed by Red Hat. This file is part of the GNU Simulators. diff -Nru gdb-9.1/sim/frv/reset.c gdb-10.2/sim/frv/reset.c --- gdb-9.1/sim/frv/reset.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/frv/reset.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* frv simulator support code - Copyright (C) 1999-2020 Free Software Foundation, Inc. + Copyright (C) 1999-2021 Free Software Foundation, Inc. Contributed by Red Hat. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/frv/sem.c gdb-10.2/sim/frv/sem.c --- gdb-9.1/sim/frv/sem.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/frv/sem.c 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/frv/sim-if.c gdb-10.2/sim/frv/sim-if.c --- gdb-9.1/sim/frv/sim-if.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/frv/sim-if.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Main simulator entry points specific to the FRV. - Copyright (C) 1998-2020 Free Software Foundation, Inc. + Copyright (C) 1998-2021 Free Software Foundation, Inc. Contributed by Red Hat. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/frv/sim-main.h gdb-10.2/sim/frv/sim-main.h --- gdb-9.1/sim/frv/sim-main.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/frv/sim-main.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* frv simulator support code - Copyright (C) 1998-2020 Free Software Foundation, Inc. + Copyright (C) 1998-2021 Free Software Foundation, Inc. Contributed by Red Hat. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/frv/traps.c gdb-10.2/sim/frv/traps.c --- gdb-9.1/sim/frv/traps.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/frv/traps.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* frv trap support - Copyright (C) 1999-2020 Free Software Foundation, Inc. + Copyright (C) 1999-2021 Free Software Foundation, Inc. Contributed by Red Hat. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/ft32/ft32-sim.h gdb-10.2/sim/ft32/ft32-sim.h --- gdb-9.1/sim/ft32/ft32-sim.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/ft32/ft32-sim.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Simulator for the FT32 processor - Copyright (C) 2008-2020 Free Software Foundation, Inc. + Copyright (C) 2008-2021 Free Software Foundation, Inc. Contributed by FTDI <support@ftdichip.com> This file is part of simulators. diff -Nru gdb-9.1/sim/ft32/interp.c gdb-10.2/sim/ft32/interp.c --- gdb-9.1/sim/ft32/interp.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/ft32/interp.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Simulator for the FT32 processor - Copyright (C) 2008-2020 Free Software Foundation, Inc. + Copyright (C) 2008-2021 Free Software Foundation, Inc. Contributed by FTDI <support@ftdichip.com> This file is part of simulators. diff -Nru gdb-9.1/sim/ft32/Makefile.in gdb-10.2/sim/ft32/Makefile.in --- gdb-9.1/sim/ft32/Makefile.in 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/ft32/Makefile.in 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ # Makefile template for Configure for the ft32 sim library. -# Copyright (C) 2008-2020 Free Software Foundation, Inc. +# Copyright (C) 2008-2021 Free Software Foundation, Inc. # Written by FTDI # # This program is free software; you can redistribute it and/or modify diff -Nru gdb-9.1/sim/ft32/sim-main.h gdb-10.2/sim/ft32/sim-main.h --- gdb-9.1/sim/ft32/sim-main.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/ft32/sim-main.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Simulator for FTDI FT32 processor. - Copyright (C) 2009-2020 Free Software Foundation, Inc. + Copyright (C) 2009-2021 Free Software Foundation, Inc. Contributed by FTDI <support@ftdichip.com> This file is part of simulators. diff -Nru gdb-9.1/sim/h8300/Makefile.in gdb-10.2/sim/h8300/Makefile.in --- gdb-9.1/sim/h8300/Makefile.in 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/h8300/Makefile.in 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ # Makefile template for Configure for the h8300 sim library. -# Copyright (C) 1990-2020 Free Software Foundation, Inc. +# Copyright (C) 1990-2021 Free Software Foundation, Inc. # Written by Cygnus Support. # # This program is free software; you can redistribute it and/or modify diff -Nru gdb-9.1/sim/igen/ChangeLog gdb-10.2/sim/igen/ChangeLog --- gdb-9.1/sim/igen/ChangeLog 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/sim/igen/ChangeLog 2021-04-25 04:06:26.000000000 +0000 @@ -1,3 +1,17 @@ +2020-07-03 Sebastian Huber <sebastian.huber@embedded-brains.de> + + PR sim/26194 + * lf.h (lf_get_file_type): Declare. + * lf.c (lf_get_file_type): Define. + * gen-idecode.c (print_idecode_issue_function_header): Use + lf_get_file_type() to issue an extern variable declaration in + case of header files. + +2019-12-19 Tom Tromey <tromey@adacore.com> + + PR build/24572: + * Makefile.in (install-strip): New target. + 2016-01-10 Mike Frysinger <vapier@gentoo.org> * configure: Regenerate. diff -Nru gdb-9.1/sim/igen/compare_igen_models gdb-10.2/sim/igen/compare_igen_models --- gdb-9.1/sim/igen/compare_igen_models 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/igen/compare_igen_models 2021-04-25 04:04:35.000000000 +0000 @@ -1,7 +1,7 @@ #!/bin/sh # Script to compare functions and instructions used by different igen models. -# Copyright (C) 2002-2020 Free Software Foundation, Inc. +# Copyright (C) 2002-2021 Free Software Foundation, Inc. # Contributed by Chris Demetriou of Broadcom Corporation (SiByte). # # This file is part of GDB, the GNU debugger. diff -Nru gdb-9.1/sim/igen/filter.c gdb-10.2/sim/igen/filter.c --- gdb-9.1/sim/igen/filter.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/igen/filter.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* The IGEN simulator generator for GDB, the GNU Debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. Contributed by Andrew Cagney. diff -Nru gdb-9.1/sim/igen/filter.h gdb-10.2/sim/igen/filter.h --- gdb-9.1/sim/igen/filter.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/igen/filter.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* The IGEN simulator generator for GDB, the GNU Debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. Contributed by Andrew Cagney. diff -Nru gdb-9.1/sim/igen/filter_host.c gdb-10.2/sim/igen/filter_host.c --- gdb-9.1/sim/igen/filter_host.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/igen/filter_host.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* The IGEN simulator generator for GDB, the GNU Debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. Contributed by Andrew Cagney. diff -Nru gdb-9.1/sim/igen/filter_host.h gdb-10.2/sim/igen/filter_host.h --- gdb-9.1/sim/igen/filter_host.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/igen/filter_host.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* The IGEN simulator generator for GDB, the GNU Debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. Contributed by Andrew Cagney. diff -Nru gdb-9.1/sim/igen/gen.c gdb-10.2/sim/igen/gen.c --- gdb-9.1/sim/igen/gen.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/igen/gen.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* The IGEN simulator generator for GDB, the GNU Debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. Contributed by Andrew Cagney. diff -Nru gdb-9.1/sim/igen/gen-engine.c gdb-10.2/sim/igen/gen-engine.c --- gdb-9.1/sim/igen/gen-engine.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/igen/gen-engine.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* The IGEN simulator generator for GDB, the GNU Debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. Contributed by Andrew Cagney. diff -Nru gdb-9.1/sim/igen/gen-engine.h gdb-10.2/sim/igen/gen-engine.h --- gdb-9.1/sim/igen/gen-engine.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/igen/gen-engine.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* The IGEN simulator generator for GDB, the GNU Debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. Contributed by Andrew Cagney. diff -Nru gdb-9.1/sim/igen/gen.h gdb-10.2/sim/igen/gen.h --- gdb-9.1/sim/igen/gen.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/igen/gen.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* The IGEN simulator generator for GDB, the GNU Debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. Contributed by Andrew Cagney. diff -Nru gdb-9.1/sim/igen/gen-icache.c gdb-10.2/sim/igen/gen-icache.c --- gdb-9.1/sim/igen/gen-icache.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/igen/gen-icache.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* The IGEN simulator generator for GDB, the GNU Debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. Contributed by Andrew Cagney. diff -Nru gdb-9.1/sim/igen/gen-icache.h gdb-10.2/sim/igen/gen-icache.h --- gdb-9.1/sim/igen/gen-icache.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/igen/gen-icache.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* The IGEN simulator generator for GDB, the GNU Debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. Contributed by Andrew Cagney. diff -Nru gdb-9.1/sim/igen/gen-idecode.c gdb-10.2/sim/igen/gen-idecode.c --- gdb-9.1/sim/igen/gen-idecode.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/igen/gen-idecode.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* The IGEN simulator generator for GDB, the GNU Debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. Contributed by Andrew Cagney. @@ -930,6 +930,8 @@ "INLINE_IDECODE", "\n"); break; case is_function_variable: + if (lf_get_file_type (file) == lf_is_h) + lf_printf (file, "extern "); print_semantic_function_type (file); lf_printf (file, " (*"); break; diff -Nru gdb-9.1/sim/igen/gen-idecode.h gdb-10.2/sim/igen/gen-idecode.h --- gdb-9.1/sim/igen/gen-idecode.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/igen/gen-idecode.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* The IGEN simulator generator for GDB, the GNU Debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. Contributed by Andrew Cagney. diff -Nru gdb-9.1/sim/igen/gen-itable.c gdb-10.2/sim/igen/gen-itable.c --- gdb-9.1/sim/igen/gen-itable.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/igen/gen-itable.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* The IGEN simulator generator for GDB, the GNU Debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. Contributed by Andrew Cagney. diff -Nru gdb-9.1/sim/igen/gen-itable.h gdb-10.2/sim/igen/gen-itable.h --- gdb-9.1/sim/igen/gen-itable.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/igen/gen-itable.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* The IGEN simulator generator for GDB, the GNU Debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. Contributed by Andrew Cagney. diff -Nru gdb-9.1/sim/igen/gen-model.c gdb-10.2/sim/igen/gen-model.c --- gdb-9.1/sim/igen/gen-model.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/igen/gen-model.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* The IGEN simulator generator for GDB, the GNU Debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. Contributed by Andrew Cagney. diff -Nru gdb-9.1/sim/igen/gen-model.h gdb-10.2/sim/igen/gen-model.h --- gdb-9.1/sim/igen/gen-model.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/igen/gen-model.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* The IGEN simulator generator for GDB, the GNU Debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. Contributed by Andrew Cagney. diff -Nru gdb-9.1/sim/igen/gen-semantics.c gdb-10.2/sim/igen/gen-semantics.c --- gdb-9.1/sim/igen/gen-semantics.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/igen/gen-semantics.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* The IGEN simulator generator for GDB, the GNU Debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. Contributed by Andrew Cagney. diff -Nru gdb-9.1/sim/igen/gen-semantics.h gdb-10.2/sim/igen/gen-semantics.h --- gdb-9.1/sim/igen/gen-semantics.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/igen/gen-semantics.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* The IGEN simulator generator for GDB, the GNU Debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. Contributed by Andrew Cagney. diff -Nru gdb-9.1/sim/igen/gen-support.c gdb-10.2/sim/igen/gen-support.c --- gdb-9.1/sim/igen/gen-support.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/igen/gen-support.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* The IGEN simulator generator for GDB, the GNU Debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. Contributed by Andrew Cagney. diff -Nru gdb-9.1/sim/igen/gen-support.h gdb-10.2/sim/igen/gen-support.h --- gdb-9.1/sim/igen/gen-support.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/igen/gen-support.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* The IGEN simulator generator for GDB, the GNU Debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. Contributed by Andrew Cagney. diff -Nru gdb-9.1/sim/igen/igen.c gdb-10.2/sim/igen/igen.c --- gdb-9.1/sim/igen/igen.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/igen/igen.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* The IGEN simulator generator for GDB, the GNU Debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. Contributed by Andrew Cagney. diff -Nru gdb-9.1/sim/igen/igen.h gdb-10.2/sim/igen/igen.h --- gdb-9.1/sim/igen/igen.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/igen/igen.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* The IGEN simulator generator for GDB, the GNU Debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. Contributed by Andrew Cagney. diff -Nru gdb-9.1/sim/igen/ld-cache.c gdb-10.2/sim/igen/ld-cache.c --- gdb-9.1/sim/igen/ld-cache.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/igen/ld-cache.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* The IGEN simulator generator for GDB, the GNU Debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. Contributed by Andrew Cagney. diff -Nru gdb-9.1/sim/igen/ld-cache.h gdb-10.2/sim/igen/ld-cache.h --- gdb-9.1/sim/igen/ld-cache.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/igen/ld-cache.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* The IGEN simulator generator for GDB, the GNU Debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. Contributed by Andrew Cagney. diff -Nru gdb-9.1/sim/igen/ld-decode.c gdb-10.2/sim/igen/ld-decode.c --- gdb-9.1/sim/igen/ld-decode.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/igen/ld-decode.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* The IGEN simulator generator for GDB, the GNU Debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. Contributed by Andrew Cagney. diff -Nru gdb-9.1/sim/igen/ld-decode.h gdb-10.2/sim/igen/ld-decode.h --- gdb-9.1/sim/igen/ld-decode.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/igen/ld-decode.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* The IGEN simulator generator for GDB, the GNU Debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. Contributed by Andrew Cagney. diff -Nru gdb-9.1/sim/igen/ld-insn.c gdb-10.2/sim/igen/ld-insn.c --- gdb-9.1/sim/igen/ld-insn.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/igen/ld-insn.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* The IGEN simulator generator for GDB, the GNU Debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. Contributed by Andrew Cagney. diff -Nru gdb-9.1/sim/igen/ld-insn.h gdb-10.2/sim/igen/ld-insn.h --- gdb-9.1/sim/igen/ld-insn.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/igen/ld-insn.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* The IGEN simulator generator for GDB, the GNU Debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. Contributed by Andrew Cagney. diff -Nru gdb-9.1/sim/igen/lf.c gdb-10.2/sim/igen/lf.c --- gdb-9.1/sim/igen/lf.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/igen/lf.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* The IGEN simulator generator for GDB, the GNU Debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. Contributed by Andrew Cagney. @@ -86,6 +86,13 @@ } +lf_file_type +lf_get_file_type (const lf *file) +{ + return file->type; +} + + void lf_close (lf *file) { diff -Nru gdb-9.1/sim/igen/lf.h gdb-10.2/sim/igen/lf.h --- gdb-9.1/sim/igen/lf.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/igen/lf.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* The IGEN simulator generator for GDB, the GNU Debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. Contributed by Andrew Cagney. @@ -54,6 +54,8 @@ lf_file_references file_references, lf_file_type type, const char *program); +extern lf_file_type lf_get_file_type (const lf *file); + extern void lf_close (lf *file); diff -Nru gdb-9.1/sim/igen/Makefile.in gdb-10.2/sim/igen/Makefile.in --- gdb-9.1/sim/igen/Makefile.in 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/sim/igen/Makefile.in 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ # The IGEN simulator generator for GDB, the GNU Debugger. # -# Copyright 2002-2020 Free Software Foundation, Inc. +# Copyright 2002-2021 Free Software Foundation, Inc. # # Contributed by Andrew Cagney. # @@ -183,4 +183,5 @@ $(SHELL) ./config.status --recheck install: +install-strip: # diff -Nru gdb-9.1/sim/igen/misc.c gdb-10.2/sim/igen/misc.c --- gdb-9.1/sim/igen/misc.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/igen/misc.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* The IGEN simulator generator for GDB, the GNU Debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. Contributed by Andrew Cagney. diff -Nru gdb-9.1/sim/igen/misc.h gdb-10.2/sim/igen/misc.h --- gdb-9.1/sim/igen/misc.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/igen/misc.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* The IGEN simulator generator for GDB, the GNU Debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. Contributed by Andrew Cagney. diff -Nru gdb-9.1/sim/igen/table.c gdb-10.2/sim/igen/table.c --- gdb-9.1/sim/igen/table.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/igen/table.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* The IGEN simulator generator for GDB, the GNU Debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. Contributed by Andrew Cagney. diff -Nru gdb-9.1/sim/igen/table.h gdb-10.2/sim/igen/table.h --- gdb-9.1/sim/igen/table.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/igen/table.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* The IGEN simulator generator for GDB, the GNU Debugger. - Copyright 2002-2020 Free Software Foundation, Inc. + Copyright 2002-2021 Free Software Foundation, Inc. Contributed by Andrew Cagney. diff -Nru gdb-9.1/sim/iq2000/arch.c gdb-10.2/sim/iq2000/arch.c --- gdb-9.1/sim/iq2000/arch.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/iq2000/arch.c 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/iq2000/arch.h gdb-10.2/sim/iq2000/arch.h --- gdb-9.1/sim/iq2000/arch.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/iq2000/arch.h 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/iq2000/cpuall.h gdb-10.2/sim/iq2000/cpuall.h --- gdb-9.1/sim/iq2000/cpuall.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/iq2000/cpuall.h 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/iq2000/cpu.c gdb-10.2/sim/iq2000/cpu.c --- gdb-9.1/sim/iq2000/cpu.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/iq2000/cpu.c 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/iq2000/cpu.h gdb-10.2/sim/iq2000/cpu.h --- gdb-9.1/sim/iq2000/cpu.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/iq2000/cpu.h 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/iq2000/decode.c gdb-10.2/sim/iq2000/decode.c --- gdb-9.1/sim/iq2000/decode.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/iq2000/decode.c 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/iq2000/decode.h gdb-10.2/sim/iq2000/decode.h --- gdb-9.1/sim/iq2000/decode.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/iq2000/decode.h 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/iq2000/iq2000.c gdb-10.2/sim/iq2000/iq2000.c --- gdb-9.1/sim/iq2000/iq2000.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/iq2000/iq2000.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* IQ2000 simulator support code - Copyright (C) 2000-2020 Free Software Foundation, Inc. + Copyright (C) 2000-2021 Free Software Foundation, Inc. Contributed by Cygnus Support. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/iq2000/Makefile.in gdb-10.2/sim/iq2000/Makefile.in --- gdb-9.1/sim/iq2000/Makefile.in 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/iq2000/Makefile.in 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ # Makefile template for Configure for the IQ2000 simulator -# Copyright (C) 1998-2020 Free Software Foundation, Inc. +# Copyright (C) 1998-2021 Free Software Foundation, Inc. # Contributed by Cygnus Support. # # This program is free software; you can redistribute it and/or modify diff -Nru gdb-9.1/sim/iq2000/mloop.in gdb-10.2/sim/iq2000/mloop.in --- gdb-9.1/sim/iq2000/mloop.in 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/iq2000/mloop.in 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ # Simulator main loop for IQ2000. -*- C -*- -# Copyright (C) 1998-2020 Free Software Foundation, Inc. +# Copyright (C) 1998-2021 Free Software Foundation, Inc. # Contributed by Cygnus Solutions. # # This file is part of the GNU Simulators. diff -Nru gdb-9.1/sim/iq2000/model.c gdb-10.2/sim/iq2000/model.c --- gdb-9.1/sim/iq2000/model.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/iq2000/model.c 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/iq2000/sem.c gdb-10.2/sim/iq2000/sem.c --- gdb-9.1/sim/iq2000/sem.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/iq2000/sem.c 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/iq2000/sem-switch.c gdb-10.2/sim/iq2000/sem-switch.c --- gdb-9.1/sim/iq2000/sem-switch.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/iq2000/sem-switch.c 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/iq2000/sim-if.c gdb-10.2/sim/iq2000/sim-if.c --- gdb-9.1/sim/iq2000/sim-if.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/iq2000/sim-if.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Main simulator entry points specific to the IQ2000. - Copyright (C) 2000-2020 Free Software Foundation, Inc. + Copyright (C) 2000-2021 Free Software Foundation, Inc. Contributed by Cygnus Solutions. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/lm32/arch.c gdb-10.2/sim/lm32/arch.c --- gdb-9.1/sim/lm32/arch.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/lm32/arch.c 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/lm32/arch.h gdb-10.2/sim/lm32/arch.h --- gdb-9.1/sim/lm32/arch.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/lm32/arch.h 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/lm32/cpuall.h gdb-10.2/sim/lm32/cpuall.h --- gdb-9.1/sim/lm32/cpuall.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/lm32/cpuall.h 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/lm32/cpu.c gdb-10.2/sim/lm32/cpu.c --- gdb-9.1/sim/lm32/cpu.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/lm32/cpu.c 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/lm32/cpu.h gdb-10.2/sim/lm32/cpu.h --- gdb-9.1/sim/lm32/cpu.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/lm32/cpu.h 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/lm32/decode.c gdb-10.2/sim/lm32/decode.c --- gdb-9.1/sim/lm32/decode.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/lm32/decode.c 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/lm32/decode.h gdb-10.2/sim/lm32/decode.h --- gdb-9.1/sim/lm32/decode.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/lm32/decode.h 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/lm32/dv-lm32cpu.c gdb-10.2/sim/lm32/dv-lm32cpu.c --- gdb-9.1/sim/lm32/dv-lm32cpu.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/lm32/dv-lm32cpu.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,7 +1,7 @@ /* Lattice Mico32 CPU model. Contributed by Jon Beniston <jon@beniston.com> - Copyright (C) 2009-2020 Free Software Foundation, Inc. + Copyright (C) 2009-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/sim/lm32/dv-lm32timer.c gdb-10.2/sim/lm32/dv-lm32timer.c --- gdb-9.1/sim/lm32/dv-lm32timer.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/lm32/dv-lm32timer.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,7 +1,7 @@ /* Lattice Mico32 timer model. Contributed by Jon Beniston <jon@beniston.com> - Copyright (C) 2009-2020 Free Software Foundation, Inc. + Copyright (C) 2009-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/sim/lm32/dv-lm32uart.c gdb-10.2/sim/lm32/dv-lm32uart.c --- gdb-9.1/sim/lm32/dv-lm32uart.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/lm32/dv-lm32uart.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,7 +1,7 @@ /* Lattice Mico32 UART model. Contributed by Jon Beniston <jon@beniston.com> - Copyright (C) 2009-2020 Free Software Foundation, Inc. + Copyright (C) 2009-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/sim/lm32/lm32.c gdb-10.2/sim/lm32/lm32.c --- gdb-9.1/sim/lm32/lm32.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/lm32/lm32.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,7 +1,7 @@ /* Lattice Mico32 simulator support code. Contributed by Jon Beniston <jon@beniston.com> - Copyright (C) 2009-2020 Free Software Foundation, Inc. + Copyright (C) 2009-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/sim/lm32/lm32-sim.h gdb-10.2/sim/lm32/lm32-sim.h --- gdb-9.1/sim/lm32/lm32-sim.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/lm32/lm32-sim.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Contributed by Jon Beniston <jon@beniston.com> - Copyright (C) 2009-2020 Free Software Foundation, Inc. + Copyright (C) 2009-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/sim/lm32/model.c gdb-10.2/sim/lm32/model.c --- gdb-9.1/sim/lm32/model.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/lm32/model.c 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/lm32/sem.c gdb-10.2/sim/lm32/sem.c --- gdb-9.1/sim/lm32/sem.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/lm32/sem.c 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/lm32/sem-switch.c gdb-10.2/sim/lm32/sem-switch.c --- gdb-9.1/sim/lm32/sem-switch.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/lm32/sem-switch.c 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/lm32/sim-if.c gdb-10.2/sim/lm32/sim-if.c --- gdb-9.1/sim/lm32/sim-if.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/lm32/sim-if.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,7 +1,7 @@ /* Main simulator entry points specific to Lattice Mico32. Contributed by Jon Beniston <jon@beniston.com> - Copyright (C) 2009-2020 Free Software Foundation, Inc. + Copyright (C) 2009-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/sim/lm32/sim-main.h gdb-10.2/sim/lm32/sim-main.h --- gdb-9.1/sim/lm32/sim-main.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/lm32/sim-main.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,7 +1,7 @@ /* Lattice Mico32 simulator support code Contributed by Jon Beniston <jon@beniston.com> - Copyright (C) 2009-2020 Free Software Foundation, Inc. + Copyright (C) 2009-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/sim/lm32/traps.c gdb-10.2/sim/lm32/traps.c --- gdb-9.1/sim/lm32/traps.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/lm32/traps.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,7 +1,7 @@ /* Lattice Mico32 exception and system call support. Contributed by Jon Beniston <jon@beniston.com> - Copyright (C) 2009-2020 Free Software Foundation, Inc. + Copyright (C) 2009-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/sim/lm32/user.c gdb-10.2/sim/lm32/user.c --- gdb-9.1/sim/lm32/user.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/lm32/user.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,7 +1,7 @@ /* Semantics for user defined instructions on the Lattice Mico32. Contributed by Jon Beniston <jon@beniston.com> - Copyright (C) 2009-2020 Free Software Foundation, Inc. + Copyright (C) 2009-2021 Free Software Foundation, Inc. This file is part of GDB. diff -Nru gdb-9.1/sim/m32c/configure.ac gdb-10.2/sim/m32c/configure.ac --- gdb-9.1/sim/m32c/configure.ac 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/m32c/configure.ac 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ dnl Process this file with autoconf to produce a configure script. -dnl Copyright (C) 2005-2020 Free Software Foundation, Inc. +dnl Copyright (C) 2005-2021 Free Software Foundation, Inc. dnl Contributed by Red Hat, Inc. dnl dnl This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/m32c/cpu.h gdb-10.2/sim/m32c/cpu.h --- gdb-9.1/sim/m32c/cpu.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/m32c/cpu.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* cpu.h --- declarations for the M32C core. -Copyright (C) 2005-2020 Free Software Foundation, Inc. +Copyright (C) 2005-2021 Free Software Foundation, Inc. Contributed by Red Hat, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/m32c/gdb-if.c gdb-10.2/sim/m32c/gdb-if.c --- gdb-9.1/sim/m32c/gdb-if.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/m32c/gdb-if.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* gdb.c --- sim interface to GDB. -Copyright (C) 2005-2020 Free Software Foundation, Inc. +Copyright (C) 2005-2021 Free Software Foundation, Inc. Contributed by Red Hat, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/m32c/int.c gdb-10.2/sim/m32c/int.c --- gdb-9.1/sim/m32c/int.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/m32c/int.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* int.c --- M32C interrupt handling. -Copyright (C) 2005-2020 Free Software Foundation, Inc. +Copyright (C) 2005-2021 Free Software Foundation, Inc. Contributed by Red Hat, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/m32c/int.h gdb-10.2/sim/m32c/int.h --- gdb-9.1/sim/m32c/int.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/m32c/int.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* int.h --- interface to M32C interrupt handling. -Copyright (C) 2005-2020 Free Software Foundation, Inc. +Copyright (C) 2005-2021 Free Software Foundation, Inc. Contributed by Red Hat, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/m32c/load.c gdb-10.2/sim/m32c/load.c --- gdb-9.1/sim/m32c/load.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/m32c/load.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* load.c --- loading object files into the M32C simulator. -Copyright (C) 2005-2020 Free Software Foundation, Inc. +Copyright (C) 2005-2021 Free Software Foundation, Inc. Contributed by Red Hat, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/m32c/load.h gdb-10.2/sim/m32c/load.h --- gdb-9.1/sim/m32c/load.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/m32c/load.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* load.h --- interface to loading object files into the M32C simulator. -Copyright (C) 2005-2020 Free Software Foundation, Inc. +Copyright (C) 2005-2021 Free Software Foundation, Inc. Contributed by Red Hat, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/m32c/m32c.opc gdb-10.2/sim/m32c/m32c.opc --- gdb-9.1/sim/m32c/m32c.opc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/m32c/m32c.opc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* m32c.opc --- semantics for m32c opcodes. -*- mode: c -*- -Copyright (C) 2005-2020 Free Software Foundation, Inc. +Copyright (C) 2005-2021 Free Software Foundation, Inc. Contributed by Red Hat, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/m32c/main.c gdb-10.2/sim/m32c/main.c --- gdb-9.1/sim/m32c/main.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/m32c/main.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* main.c --- main function for stand-alone M32C simulator. -Copyright (C) 2005-2020 Free Software Foundation, Inc. +Copyright (C) 2005-2021 Free Software Foundation, Inc. Contributed by Red Hat, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/m32c/Makefile.in gdb-10.2/sim/m32c/Makefile.in --- gdb-9.1/sim/m32c/Makefile.in 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/m32c/Makefile.in 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ #### Makefile.in --- Makefile template for the M32C simulator -### Copyright (C) 2005-2020 Free Software Foundation, Inc. +### Copyright (C) 2005-2021 Free Software Foundation, Inc. ### Contributed by Red Hat, Inc. ### ### This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/m32c/mem.c gdb-10.2/sim/m32c/mem.c --- gdb-9.1/sim/m32c/mem.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/m32c/mem.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* mem.c --- memory for M32C simulator. -Copyright (C) 2005-2020 Free Software Foundation, Inc. +Copyright (C) 2005-2021 Free Software Foundation, Inc. Contributed by Red Hat, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/m32c/mem.h gdb-10.2/sim/m32c/mem.h --- gdb-9.1/sim/m32c/mem.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/m32c/mem.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* mem.h --- interface to memory for M32C simulator. -Copyright (C) 2005-2020 Free Software Foundation, Inc. +Copyright (C) 2005-2021 Free Software Foundation, Inc. Contributed by Red Hat, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/m32c/misc.c gdb-10.2/sim/m32c/misc.c --- gdb-9.1/sim/m32c/misc.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/m32c/misc.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* misc.c --- miscellaneous utility functions for M32C simulator. -Copyright (C) 2005-2020 Free Software Foundation, Inc. +Copyright (C) 2005-2021 Free Software Foundation, Inc. Contributed by Red Hat, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/m32c/misc.h gdb-10.2/sim/m32c/misc.h --- gdb-9.1/sim/m32c/misc.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/m32c/misc.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* misc.h --- interface to miscellaneous utility functions for M32C simulator. -Copyright (C) 2005-2020 Free Software Foundation, Inc. +Copyright (C) 2005-2021 Free Software Foundation, Inc. Contributed by Red Hat, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/m32c/opc2c.c gdb-10.2/sim/m32c/opc2c.c --- gdb-9.1/sim/m32c/opc2c.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/m32c/opc2c.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* opc2c.c --- generate C simulator code from from .opc file -Copyright (C) 2005-2020 Free Software Foundation, Inc. +Copyright (C) 2005-2021 Free Software Foundation, Inc. Contributed by Red Hat, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/m32c/r8c.opc gdb-10.2/sim/m32c/r8c.opc --- gdb-9.1/sim/m32c/r8c.opc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/m32c/r8c.opc 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* r8c.opc --- semantics for r8c opcodes. -*- mode: c -*- -Copyright (C) 2005-2020 Free Software Foundation, Inc. +Copyright (C) 2005-2021 Free Software Foundation, Inc. Contributed by Red Hat, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/m32c/reg.c gdb-10.2/sim/m32c/reg.c --- gdb-9.1/sim/m32c/reg.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/m32c/reg.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* reg.c --- register set model for M32C simulator. -Copyright (C) 2005-2020 Free Software Foundation, Inc. +Copyright (C) 2005-2021 Free Software Foundation, Inc. Contributed by Red Hat, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/m32c/safe-fgets.c gdb-10.2/sim/m32c/safe-fgets.c --- gdb-9.1/sim/m32c/safe-fgets.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/m32c/safe-fgets.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* safe-fgets.c --- like fgets, but allocates its own static buffer. -Copyright (C) 2005-2020 Free Software Foundation, Inc. +Copyright (C) 2005-2021 Free Software Foundation, Inc. Contributed by Red Hat, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/m32c/safe-fgets.h gdb-10.2/sim/m32c/safe-fgets.h --- gdb-9.1/sim/m32c/safe-fgets.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/m32c/safe-fgets.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* safe-fgets.h --- interface to safe version of fgets. -Copyright (C) 2005-2020 Free Software Foundation, Inc. +Copyright (C) 2005-2021 Free Software Foundation, Inc. Contributed by Red Hat, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/m32c/srcdest.c gdb-10.2/sim/m32c/srcdest.c --- gdb-9.1/sim/m32c/srcdest.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/m32c/srcdest.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* srcdest.c --- decoding M32C addressing modes. -Copyright (C) 2005-2020 Free Software Foundation, Inc. +Copyright (C) 2005-2021 Free Software Foundation, Inc. Contributed by Red Hat, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/m32c/syscalls.c gdb-10.2/sim/m32c/syscalls.c --- gdb-9.1/sim/m32c/syscalls.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/m32c/syscalls.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* syscalls.c --- implement system calls for the M32C simulator. -Copyright (C) 2005-2020 Free Software Foundation, Inc. +Copyright (C) 2005-2021 Free Software Foundation, Inc. Contributed by Red Hat, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/m32c/syscalls.h gdb-10.2/sim/m32c/syscalls.h --- gdb-9.1/sim/m32c/syscalls.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/m32c/syscalls.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* syscalls.h --- interface to syscalls for the M32C sim. -Copyright (C) 2005-2020 Free Software Foundation, Inc. +Copyright (C) 2005-2021 Free Software Foundation, Inc. Contributed by Red Hat, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/m32c/trace.c gdb-10.2/sim/m32c/trace.c --- gdb-9.1/sim/m32c/trace.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/m32c/trace.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* trace.c --- tracing output for the M32C simulator. -Copyright (C) 2005-2020 Free Software Foundation, Inc. +Copyright (C) 2005-2021 Free Software Foundation, Inc. Contributed by Red Hat, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/m32c/trace.h gdb-10.2/sim/m32c/trace.h --- gdb-9.1/sim/m32c/trace.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/m32c/trace.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* trace.h --- interface to tracing output for the M32C simulator. -Copyright (C) 2005-2020 Free Software Foundation, Inc. +Copyright (C) 2005-2021 Free Software Foundation, Inc. Contributed by Red Hat, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/m32r/arch.c gdb-10.2/sim/m32r/arch.c --- gdb-9.1/sim/m32r/arch.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/m32r/arch.c 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/m32r/arch.h gdb-10.2/sim/m32r/arch.h --- gdb-9.1/sim/m32r/arch.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/m32r/arch.h 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/m32r/cpu2.c gdb-10.2/sim/m32r/cpu2.c --- gdb-9.1/sim/m32r/cpu2.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/m32r/cpu2.c 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/m32r/cpu2.h gdb-10.2/sim/m32r/cpu2.h --- gdb-9.1/sim/m32r/cpu2.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/m32r/cpu2.h 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/m32r/cpuall.h gdb-10.2/sim/m32r/cpuall.h --- gdb-9.1/sim/m32r/cpuall.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/m32r/cpuall.h 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/m32r/cpu.c gdb-10.2/sim/m32r/cpu.c --- gdb-9.1/sim/m32r/cpu.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/m32r/cpu.c 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/m32r/cpu.h gdb-10.2/sim/m32r/cpu.h --- gdb-9.1/sim/m32r/cpu.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/m32r/cpu.h 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/m32r/cpux.c gdb-10.2/sim/m32r/cpux.c --- gdb-9.1/sim/m32r/cpux.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/m32r/cpux.c 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/m32r/cpux.h gdb-10.2/sim/m32r/cpux.h --- gdb-9.1/sim/m32r/cpux.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/m32r/cpux.h 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/m32r/decode2.c gdb-10.2/sim/m32r/decode2.c --- gdb-9.1/sim/m32r/decode2.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/m32r/decode2.c 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/m32r/decode2.h gdb-10.2/sim/m32r/decode2.h --- gdb-9.1/sim/m32r/decode2.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/m32r/decode2.h 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/m32r/decode.c gdb-10.2/sim/m32r/decode.c --- gdb-9.1/sim/m32r/decode.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/m32r/decode.c 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/m32r/decode.h gdb-10.2/sim/m32r/decode.h --- gdb-9.1/sim/m32r/decode.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/m32r/decode.h 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/m32r/decodex.c gdb-10.2/sim/m32r/decodex.c --- gdb-9.1/sim/m32r/decodex.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/m32r/decodex.c 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/m32r/decodex.h gdb-10.2/sim/m32r/decodex.h --- gdb-9.1/sim/m32r/decodex.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/m32r/decodex.h 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/m32r/dv-m32r_cache.c gdb-10.2/sim/m32r/dv-m32r_cache.c --- gdb-9.1/sim/m32r/dv-m32r_cache.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/m32r/dv-m32r_cache.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Handle cache related addresses. - Copyright (C) 1996-2020 Free Software Foundation, Inc. + Copyright (C) 1996-2021 Free Software Foundation, Inc. Contributed by Cygnus Solutions and Mike Frysinger. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/m32r/dv-m32r_cache.h gdb-10.2/sim/m32r/dv-m32r_cache.h --- gdb-9.1/sim/m32r/dv-m32r_cache.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/m32r/dv-m32r_cache.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Handle cache related addresses. - Copyright (C) 1996-2020 Free Software Foundation, Inc. + Copyright (C) 1996-2021 Free Software Foundation, Inc. Contributed by Cygnus Solutions and Mike Frysinger. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/m32r/dv-m32r_uart.c gdb-10.2/sim/m32r/dv-m32r_uart.c --- gdb-9.1/sim/m32r/dv-m32r_uart.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/m32r/dv-m32r_uart.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* UART model. - Copyright (C) 1996-2020 Free Software Foundation, Inc. + Copyright (C) 1996-2021 Free Software Foundation, Inc. Contributed by Cygnus Solutions and Mike Frysinger. This file is part of simulators. diff -Nru gdb-9.1/sim/m32r/dv-m32r_uart.h gdb-10.2/sim/m32r/dv-m32r_uart.h --- gdb-9.1/sim/m32r/dv-m32r_uart.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/m32r/dv-m32r_uart.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* UART model. - Copyright (C) 1996-2020 Free Software Foundation, Inc. + Copyright (C) 1996-2021 Free Software Foundation, Inc. Contributed by Cygnus Solutions and Mike Frysinger. This file is part of simulators. diff -Nru gdb-9.1/sim/m32r/m32r2.c gdb-10.2/sim/m32r/m32r2.c --- gdb-9.1/sim/m32r/m32r2.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/m32r/m32r2.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* m32r2 simulator support code - Copyright (C) 1997-2020 Free Software Foundation, Inc. + Copyright (C) 1997-2021 Free Software Foundation, Inc. Contributed by Cygnus Support. This file is part of GDB, the GNU debugger. diff -Nru gdb-9.1/sim/m32r/m32r.c gdb-10.2/sim/m32r/m32r.c --- gdb-9.1/sim/m32r/m32r.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/m32r/m32r.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* m32r simulator support code - Copyright (C) 1996-2020 Free Software Foundation, Inc. + Copyright (C) 1996-2021 Free Software Foundation, Inc. Contributed by Cygnus Support. This file is part of GDB, the GNU debugger. diff -Nru gdb-9.1/sim/m32r/m32r-sim.h gdb-10.2/sim/m32r/m32r-sim.h --- gdb-9.1/sim/m32r/m32r-sim.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/m32r/m32r-sim.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* collection of junk waiting time to sort out - Copyright (C) 1996-2020 Free Software Foundation, Inc. + Copyright (C) 1996-2021 Free Software Foundation, Inc. Contributed by Cygnus Support. This file is part of GDB, the GNU debugger. diff -Nru gdb-9.1/sim/m32r/m32rx.c gdb-10.2/sim/m32r/m32rx.c --- gdb-9.1/sim/m32r/m32rx.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/m32r/m32rx.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* m32rx simulator support code - Copyright (C) 1997-2020 Free Software Foundation, Inc. + Copyright (C) 1997-2021 Free Software Foundation, Inc. Contributed by Cygnus Support. This file is part of GDB, the GNU debugger. diff -Nru gdb-9.1/sim/m32r/Makefile.in gdb-10.2/sim/m32r/Makefile.in --- gdb-9.1/sim/m32r/Makefile.in 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/m32r/Makefile.in 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ # Makefile template for Configure for the m32r simulator -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2021 Free Software Foundation, Inc. # Contributed by Cygnus Support. # # This file is part of GDB, the GNU debugger. diff -Nru gdb-9.1/sim/m32r/mloop2.in gdb-10.2/sim/m32r/mloop2.in --- gdb-9.1/sim/m32r/mloop2.in 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/m32r/mloop2.in 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # Simulator main loop for m32r2. -*- C -*- # -# Copyright 1996-2020 Free Software Foundation, Inc. +# Copyright 1996-2021 Free Software Foundation, Inc. # # This file is part of GDB, the GNU debugger. # diff -Nru gdb-9.1/sim/m32r/mloop.in gdb-10.2/sim/m32r/mloop.in --- gdb-9.1/sim/m32r/mloop.in 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/m32r/mloop.in 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # Simulator main loop for m32r. -*- C -*- # -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2021 Free Software Foundation, Inc. # # This file is part of the GNU Simulators. # diff -Nru gdb-9.1/sim/m32r/mloopx.in gdb-10.2/sim/m32r/mloopx.in --- gdb-9.1/sim/m32r/mloopx.in 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/m32r/mloopx.in 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # Simulator main loop for m32rx. -*- C -*- # -# Copyright 1996-2020 Free Software Foundation, Inc. +# Copyright 1996-2021 Free Software Foundation, Inc. # # This file is part of the GNU Simulators. # diff -Nru gdb-9.1/sim/m32r/model2.c gdb-10.2/sim/m32r/model2.c --- gdb-9.1/sim/m32r/model2.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/m32r/model2.c 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/m32r/model.c gdb-10.2/sim/m32r/model.c --- gdb-9.1/sim/m32r/model.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/m32r/model.c 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/m32r/modelx.c gdb-10.2/sim/m32r/modelx.c --- gdb-9.1/sim/m32r/modelx.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/m32r/modelx.c 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/m32r/sem2-switch.c gdb-10.2/sim/m32r/sem2-switch.c --- gdb-9.1/sim/m32r/sem2-switch.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/m32r/sem2-switch.c 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/m32r/sem.c gdb-10.2/sim/m32r/sem.c --- gdb-9.1/sim/m32r/sem.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/m32r/sem.c 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/m32r/sem-switch.c gdb-10.2/sim/m32r/sem-switch.c --- gdb-9.1/sim/m32r/sem-switch.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/m32r/sem-switch.c 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/m32r/semx-switch.c gdb-10.2/sim/m32r/semx-switch.c --- gdb-9.1/sim/m32r/semx-switch.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/m32r/semx-switch.c 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/m32r/sim-if.c gdb-10.2/sim/m32r/sim-if.c --- gdb-9.1/sim/m32r/sim-if.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/m32r/sim-if.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Main simulator entry points specific to the M32R. - Copyright (C) 1996-2020 Free Software Foundation, Inc. + Copyright (C) 1996-2021 Free Software Foundation, Inc. Contributed by Cygnus Support. This file is part of GDB, the GNU debugger. diff -Nru gdb-9.1/sim/m32r/traps.c gdb-10.2/sim/m32r/traps.c --- gdb-9.1/sim/m32r/traps.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/m32r/traps.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* m32r exception, interrupt, and trap (EIT) support - Copyright (C) 1998-2020 Free Software Foundation, Inc. + Copyright (C) 1998-2021 Free Software Foundation, Inc. Contributed by Cygnus Solutions. This file is part of GDB, the GNU debugger. diff -Nru gdb-9.1/sim/m32r/traps-linux.c gdb-10.2/sim/m32r/traps-linux.c --- gdb-9.1/sim/m32r/traps-linux.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/m32r/traps-linux.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* m32r exception, interrupt, and trap (EIT) support - Copyright (C) 1998-2020 Free Software Foundation, Inc. + Copyright (C) 1998-2021 Free Software Foundation, Inc. Contributed by Renesas. This file is part of GDB, the GNU debugger. diff -Nru gdb-9.1/sim/m68hc11/dv-m68hc11.c gdb-10.2/sim/m68hc11/dv-m68hc11.c --- gdb-9.1/sim/m68hc11/dv-m68hc11.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/m68hc11/dv-m68hc11.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* dv-m68hc11.c -- CPU 68HC11&68HC12 as a device. - Copyright (C) 1999-2020 Free Software Foundation, Inc. + Copyright (C) 1999-2021 Free Software Foundation, Inc. Written by Stephane Carrez (stcarrez@nerim.fr) (From a driver model Contributed by Cygnus Solutions.) diff -Nru gdb-9.1/sim/m68hc11/dv-m68hc11eepr.c gdb-10.2/sim/m68hc11/dv-m68hc11eepr.c --- gdb-9.1/sim/m68hc11/dv-m68hc11eepr.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/m68hc11/dv-m68hc11eepr.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* dv-m68hc11eepr.c -- Simulation of the 68HC11 Internal EEPROM. - Copyright (C) 1999-2020 Free Software Foundation, Inc. + Copyright (C) 1999-2021 Free Software Foundation, Inc. Written by Stephane Carrez (stcarrez@nerim.fr) (From a driver model Contributed by Cygnus Solutions.) diff -Nru gdb-9.1/sim/m68hc11/dv-m68hc11sio.c gdb-10.2/sim/m68hc11/dv-m68hc11sio.c --- gdb-9.1/sim/m68hc11/dv-m68hc11sio.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/m68hc11/dv-m68hc11sio.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* dv-m68hc11sio.c -- Simulation of the 68HC11 serial device. - Copyright (C) 1999-2020 Free Software Foundation, Inc. + Copyright (C) 1999-2021 Free Software Foundation, Inc. Written by Stephane Carrez (stcarrez@worldnet.fr) (From a driver model Contributed by Cygnus Solutions.) diff -Nru gdb-9.1/sim/m68hc11/dv-m68hc11spi.c gdb-10.2/sim/m68hc11/dv-m68hc11spi.c --- gdb-9.1/sim/m68hc11/dv-m68hc11spi.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/m68hc11/dv-m68hc11spi.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* dv-m68hc11spi.c -- Simulation of the 68HC11 SPI - Copyright (C) 2000-2020 Free Software Foundation, Inc. + Copyright (C) 2000-2021 Free Software Foundation, Inc. Written by Stephane Carrez (stcarrez@nerim.fr) (From a driver model Contributed by Cygnus Solutions.) diff -Nru gdb-9.1/sim/m68hc11/dv-m68hc11tim.c gdb-10.2/sim/m68hc11/dv-m68hc11tim.c --- gdb-9.1/sim/m68hc11/dv-m68hc11tim.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/m68hc11/dv-m68hc11tim.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* dv-m68hc11tim.c -- Simulation of the 68HC11 timer devices. - Copyright (C) 1999-2020 Free Software Foundation, Inc. + Copyright (C) 1999-2021 Free Software Foundation, Inc. Written by Stephane Carrez (stcarrez@nerim.fr) (From a driver model Contributed by Cygnus Solutions.) diff -Nru gdb-9.1/sim/m68hc11/dv-nvram.c gdb-10.2/sim/m68hc11/dv-nvram.c --- gdb-9.1/sim/m68hc11/dv-nvram.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/m68hc11/dv-nvram.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* dv-nvram.c -- Generic driver for a non volatile ram (battery saved) - Copyright (C) 1999-2020 Free Software Foundation, Inc. + Copyright (C) 1999-2021 Free Software Foundation, Inc. Written by Stephane Carrez (stcarrez@worldnet.fr) (From a driver model Contributed by Cygnus Solutions.) diff -Nru gdb-9.1/sim/m68hc11/emulos.c gdb-10.2/sim/m68hc11/emulos.c --- gdb-9.1/sim/m68hc11/emulos.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/m68hc11/emulos.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* emulos.c -- Small OS emulation - Copyright 1999-2020 Free Software Foundation, Inc. + Copyright 1999-2021 Free Software Foundation, Inc. Written by Stephane Carrez (stcarrez@worldnet.fr) This file is part of GDB, GAS, and the GNU binutils. diff -Nru gdb-9.1/sim/m68hc11/gencode.c gdb-10.2/sim/m68hc11/gencode.c --- gdb-9.1/sim/m68hc11/gencode.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/m68hc11/gencode.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* gencode.c -- Motorola 68HC11 & 68HC12 Emulator Generator - Copyright 1999-2020 Free Software Foundation, Inc. + Copyright 1999-2021 Free Software Foundation, Inc. Written by Stephane Carrez (stcarrez@nerim.fr) This file is part of GDB, GAS, and the GNU binutils. diff -Nru gdb-9.1/sim/m68hc11/interp.c gdb-10.2/sim/m68hc11/interp.c --- gdb-9.1/sim/m68hc11/interp.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/m68hc11/interp.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* interp.c -- Simulator for Motorola 68HC11/68HC12 - Copyright (C) 1999-2020 Free Software Foundation, Inc. + Copyright (C) 1999-2021 Free Software Foundation, Inc. Written by Stephane Carrez (stcarrez@nerim.fr) This file is part of GDB, the GNU debugger. diff -Nru gdb-9.1/sim/m68hc11/interrupts.c gdb-10.2/sim/m68hc11/interrupts.c --- gdb-9.1/sim/m68hc11/interrupts.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/m68hc11/interrupts.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* interrupts.c -- 68HC11 Interrupts Emulation - Copyright 1999-2020 Free Software Foundation, Inc. + Copyright 1999-2021 Free Software Foundation, Inc. Written by Stephane Carrez (stcarrez@nerim.fr) This file is part of GDB, GAS, and the GNU binutils. diff -Nru gdb-9.1/sim/m68hc11/interrupts.h gdb-10.2/sim/m68hc11/interrupts.h --- gdb-9.1/sim/m68hc11/interrupts.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/m68hc11/interrupts.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* interrupts.h -- 68HC11 Interrupts Emulation - Copyright 1999-2020 Free Software Foundation, Inc. + Copyright 1999-2021 Free Software Foundation, Inc. Written by Stephane Carrez (stcarrez@worldnet.fr) This file is part of GDB, GAS, and the GNU binutils. diff -Nru gdb-9.1/sim/m68hc11/m68hc11_sim.c gdb-10.2/sim/m68hc11/m68hc11_sim.c --- gdb-9.1/sim/m68hc11/m68hc11_sim.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/m68hc11/m68hc11_sim.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* m6811_cpu.c -- 68HC11&68HC12 CPU Emulation - Copyright 1999-2020 Free Software Foundation, Inc. + Copyright 1999-2021 Free Software Foundation, Inc. Written by Stephane Carrez (stcarrez@nerim.fr) This file is part of GDB, GAS, and the GNU binutils. diff -Nru gdb-9.1/sim/m68hc11/Makefile.in gdb-10.2/sim/m68hc11/Makefile.in --- gdb-9.1/sim/m68hc11/Makefile.in 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/m68hc11/Makefile.in 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ # Makefile template for Configure for the 68HC11 sim library. -# Copyright (C) 1999-2020 Free Software Foundation, Inc. +# Copyright (C) 1999-2021 Free Software Foundation, Inc. # Written by Cygnus Support. # # This program is free software; you can redistribute it and/or modify diff -Nru gdb-9.1/sim/m68hc11/sim-main.h gdb-10.2/sim/m68hc11/sim-main.h --- gdb-9.1/sim/m68hc11/sim-main.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/m68hc11/sim-main.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* sim-main.h -- Simulator for Motorola 68HC11 & 68HC12 - Copyright (C) 1999-2020 Free Software Foundation, Inc. + Copyright (C) 1999-2021 Free Software Foundation, Inc. Written by Stephane Carrez (stcarrez@nerim.fr) This file is part of GDB, the GNU debugger. diff -Nru gdb-9.1/sim/MAINTAINERS gdb-10.2/sim/MAINTAINERS --- gdb-9.1/sim/MAINTAINERS 2019-09-23 23:33:55.000000000 +0000 +++ gdb-10.2/sim/MAINTAINERS 2021-04-25 04:06:26.000000000 +0000 @@ -17,6 +17,7 @@ aarch64 Jim Wilson <wilson@tuliptree.org> arm Nick Clifton <nickc@redhat.com> bfin Mike Frysinger <vapier@gentoo.org> +bpf Jose E. Marchesi <jose.marchesi@oracle.com> cr16 M R Swami Reddy <MR.Swami.Reddy@nsc.com> frv Dave Brolley <brolley@redhat.com> ft32 James Bowman <james.bowman@ftdichip.com> diff -Nru gdb-9.1/sim/Makefile.in gdb-10.2/sim/Makefile.in --- gdb-9.1/sim/Makefile.in 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/sim/Makefile.in 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ # Makefile template for Configure for the sim library. -# Copyright (C) 1993-2020 Free Software Foundation, Inc. +# Copyright (C) 1993-2021 Free Software Foundation, Inc. # Written by Cygnus Support. # # This file is part of BFD, the Binary File Descriptor library. @@ -166,6 +166,16 @@ else true; fi; \ done +install-strip: + @rootme=`pwd` ; export rootme ; \ + for dir in . ${SUBDIRS}; do \ + if [ "$$dir" = "." ]; then \ + true; \ + elif [ -d $$dir ]; then \ + (cd $$dir; $(MAKE) $(FLAGS_TO_PASS) install-strip) || exit 1; \ + else true; fi; \ + done + installcheck: @echo No installcheck target is available yet for the GNU simulators. diff -Nru gdb-9.1/sim/mcore/interp.c gdb-10.2/sim/mcore/interp.c --- gdb-9.1/sim/mcore/interp.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/mcore/interp.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Simulator for Motorola's MCore processor - Copyright (C) 1999-2020 Free Software Foundation, Inc. + Copyright (C) 1999-2021 Free Software Foundation, Inc. Contributed by Cygnus Solutions. This file is part of GDB, the GNU debugger. diff -Nru gdb-9.1/sim/mcore/Makefile.in gdb-10.2/sim/mcore/Makefile.in --- gdb-9.1/sim/mcore/Makefile.in 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/mcore/Makefile.in 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ # Makefile template for Configure for the MCore sim library. -# Copyright (C) 1990-2020 Free Software Foundation, Inc. +# Copyright (C) 1990-2021 Free Software Foundation, Inc. # Written by Cygnus Solutions. # # This program is free software; you can redistribute it and/or modify diff -Nru gdb-9.1/sim/mcore/sim-main.h gdb-10.2/sim/mcore/sim-main.h --- gdb-9.1/sim/mcore/sim-main.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/mcore/sim-main.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Simulator for Motorola's MCore processor - Copyright (C) 2009-2020 Free Software Foundation, Inc. + Copyright (C) 2009-2021 Free Software Foundation, Inc. This file is part of GDB, the GNU debugger. diff -Nru gdb-9.1/sim/microblaze/interp.c gdb-10.2/sim/microblaze/interp.c --- gdb-9.1/sim/microblaze/interp.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/microblaze/interp.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Simulator for Xilinx MicroBlaze processor - Copyright 2009-2020 Free Software Foundation, Inc. + Copyright 2009-2021 Free Software Foundation, Inc. This file is part of GDB, the GNU debugger. diff -Nru gdb-9.1/sim/microblaze/Makefile.in gdb-10.2/sim/microblaze/Makefile.in --- gdb-9.1/sim/microblaze/Makefile.in 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/microblaze/Makefile.in 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ # Makefile template for Configure for the MCore sim library. -# Copyright (C) 1990-2020 Free Software Foundation, Inc. +# Copyright (C) 1990-2021 Free Software Foundation, Inc. # Written by Cygnus Solutions. # # This program is free software; you can redistribute it and/or modify diff -Nru gdb-9.1/sim/microblaze/microblaze.h gdb-10.2/sim/microblaze/microblaze.h --- gdb-9.1/sim/microblaze/microblaze.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/microblaze/microblaze.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,7 +1,7 @@ #ifndef MICROBLAZE_H #define MICROBLAZE_H -/* Copyright 2009-2020 Free Software Foundation, Inc. +/* Copyright 2009-2021 Free Software Foundation, Inc. This file is part of the Xilinx MicroBlaze simulator. diff -Nru gdb-9.1/sim/microblaze/microblaze.isa gdb-10.2/sim/microblaze/microblaze.isa --- gdb-9.1/sim/microblaze/microblaze.isa 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/microblaze/microblaze.isa 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2009-2020 Free Software Foundation, Inc. +/* Copyright 2009-2021 Free Software Foundation, Inc. This file is part of the Xilinx MicroBlaze simulator. diff -Nru gdb-9.1/sim/microblaze/sim-main.h gdb-10.2/sim/microblaze/sim-main.h --- gdb-9.1/sim/microblaze/sim-main.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/microblaze/sim-main.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2009-2020 Free Software Foundation, Inc. +/* Copyright 2009-2021 Free Software Foundation, Inc. This file is part of the Xilinx MicroBlaze simulator. diff -Nru gdb-9.1/sim/mips/ChangeLog gdb-10.2/sim/mips/ChangeLog --- gdb-9.1/sim/mips/ChangeLog 2019-02-23 12:20:11.000000000 +0000 +++ gdb-10.2/sim/mips/ChangeLog 2021-04-25 04:06:26.000000000 +0000 @@ -1,3 +1,7 @@ +2020-07-29 Simon Marchi <simon.marchi@efficios.com> + + * configure: Re-generate. + 2017-09-06 John Baldwin <jhb@FreeBSD.org> * configure: Regenerate. diff -Nru gdb-9.1/sim/mips/configure gdb-10.2/sim/mips/configure --- gdb-9.1/sim/mips/configure 2018-06-26 21:37:28.000000000 +0000 +++ gdb-10.2/sim/mips/configure 2021-04-25 04:06:26.000000000 +0000 @@ -14074,7 +14074,7 @@ cat << __EOF__ > multi-run.c /* Main entry point for MULTI simulators. - Copyright (C) 2003-2018 Free Software Foundation, Inc. + Copyright (C) 2003-2020 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/sim/mips/configure.ac gdb-10.2/sim/mips/configure.ac --- gdb-9.1/sim/mips/configure.ac 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/mips/configure.ac 2021-04-25 04:06:26.000000000 +0000 @@ -221,7 +221,7 @@ cat << __EOF__ > multi-run.c /* Main entry point for MULTI simulators. - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/sim/mips/cp1.c gdb-10.2/sim/mips/cp1.c --- gdb-9.1/sim/mips/cp1.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/mips/cp1.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /*> cp1.c <*/ /* MIPS Simulator FPU (CoProcessor 1) support. - Copyright (C) 2002-2020 Free Software Foundation, Inc. + Copyright (C) 2002-2021 Free Software Foundation, Inc. Originally created by Cygnus Solutions. Extensive modifications, including paired-single operation support and MIPS-3D support contributed by Ed Satterthwaite and Chris Demetriou, of Broadcom diff -Nru gdb-9.1/sim/mips/cp1.h gdb-10.2/sim/mips/cp1.h --- gdb-9.1/sim/mips/cp1.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/mips/cp1.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /*> cp1.h <*/ /* MIPS Simulator FPU (CoProcessor 1) definitions. - Copyright (C) 1997-2020 Free Software Foundation, Inc. + Copyright (C) 1997-2021 Free Software Foundation, Inc. Derived from sim-main.h contributed by Cygnus Solutions, modified substantially by Ed Satterthwaite of Broadcom Corporation (SiByte). diff -Nru gdb-9.1/sim/mips/dsp2.igen gdb-10.2/sim/mips/dsp2.igen --- gdb-9.1/sim/mips/dsp2.igen 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/mips/dsp2.igen 2021-04-25 04:04:35.000000000 +0000 @@ -1,7 +1,7 @@ // -*- C -*- // Simulator definition for the MIPS DSP REV 2 ASE. -// Copyright (C) 2007-2020 Free Software Foundation, Inc. +// Copyright (C) 2007-2021 Free Software Foundation, Inc. // Contributed by MIPS Technologies, Inc. // Written by Chao-ying Fu (fu@mips.com). // diff -Nru gdb-9.1/sim/mips/dsp.c gdb-10.2/sim/mips/dsp.c --- gdb-9.1/sim/mips/dsp.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/mips/dsp.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Simulation code for the MIPS DSP ASE. - Copyright (C) 2005-2020 Free Software Foundation, Inc. + Copyright (C) 2005-2021 Free Software Foundation, Inc. Contributed by MIPS Technologies, Inc. Written by Chao-ying Fu. This file is part of GDB, the GNU debugger. diff -Nru gdb-9.1/sim/mips/dsp.igen gdb-10.2/sim/mips/dsp.igen --- gdb-9.1/sim/mips/dsp.igen 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/mips/dsp.igen 2021-04-25 04:04:35.000000000 +0000 @@ -1,7 +1,7 @@ // -*- C -*- // Simulator definition for the MIPS DSP ASE. -// Copyright (C) 2005-2020 Free Software Foundation, Inc. +// Copyright (C) 2005-2021 Free Software Foundation, Inc. // Contributed by MIPS Technologies, Inc. Written by Chao-ying Fu. // // This file is part of the MIPS sim diff -Nru gdb-9.1/sim/mips/dv-tx3904cpu.c gdb-10.2/sim/mips/dv-tx3904cpu.c --- gdb-9.1/sim/mips/dv-tx3904cpu.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/mips/dv-tx3904cpu.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This file is part of the program GDB, the GNU debugger. - Copyright (C) 1998-2020 Free Software Foundation, Inc. + Copyright (C) 1998-2021 Free Software Foundation, Inc. Contributed by Cygnus Solutions. This program is free software; you can redistribute it and/or modify diff -Nru gdb-9.1/sim/mips/dv-tx3904irc.c gdb-10.2/sim/mips/dv-tx3904irc.c --- gdb-9.1/sim/mips/dv-tx3904irc.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/mips/dv-tx3904irc.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This file is part of the program GDB, the GNU debugger. - Copyright (C) 1998-2020 Free Software Foundation, Inc. + Copyright (C) 1998-2021 Free Software Foundation, Inc. Contributed by Cygnus Solutions. This program is free software; you can redistribute it and/or modify diff -Nru gdb-9.1/sim/mips/dv-tx3904sio.c gdb-10.2/sim/mips/dv-tx3904sio.c --- gdb-9.1/sim/mips/dv-tx3904sio.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/mips/dv-tx3904sio.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This file is part of the program GDB, the GNU debugger. - Copyright (C) 1998-2020 Free Software Foundation, Inc. + Copyright (C) 1998-2021 Free Software Foundation, Inc. Contributed by Cygnus Solutions. This program is free software; you can redistribute it and/or modify diff -Nru gdb-9.1/sim/mips/dv-tx3904tmr.c gdb-10.2/sim/mips/dv-tx3904tmr.c --- gdb-9.1/sim/mips/dv-tx3904tmr.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/mips/dv-tx3904tmr.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This file is part of the program GDB, the GNU debugger. - Copyright (C) 1998-2020 Free Software Foundation, Inc. + Copyright (C) 1998-2021 Free Software Foundation, Inc. Contributed by Cygnus Solutions. This program is free software; you can redistribute it and/or modify diff -Nru gdb-9.1/sim/mips/m16e.igen gdb-10.2/sim/mips/m16e.igen --- gdb-9.1/sim/mips/m16e.igen 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/mips/m16e.igen 2021-04-25 04:04:35.000000000 +0000 @@ -1,7 +1,7 @@ // -*- C -*- // Simulator definition for the MIPS16e instructions. -// Copyright (C) 2005-2020 Free Software Foundation, Inc. +// Copyright (C) 2005-2021 Free Software Foundation, Inc. // Contributed by Nigel Stephens (nigel@mips.com) and // David Ung (davidu@mips.com) of MIPS Technologies. // diff -Nru gdb-9.1/sim/mips/mdmx.c gdb-10.2/sim/mips/mdmx.c --- gdb-9.1/sim/mips/mdmx.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/mips/mdmx.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Simulation code for the MIPS MDMX ASE. - Copyright (C) 2002-2020 Free Software Foundation, Inc. + Copyright (C) 2002-2021 Free Software Foundation, Inc. Contributed by Ed Satterthwaite and Chris Demetriou, of Broadcom Corporation (SiByte). diff -Nru gdb-9.1/sim/mips/mdmx.igen gdb-10.2/sim/mips/mdmx.igen --- gdb-9.1/sim/mips/mdmx.igen 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/mips/mdmx.igen 2021-04-25 04:04:35.000000000 +0000 @@ -1,7 +1,7 @@ // -*- C -*- // Simulator definition for the MIPS MDMX ASE. -// Copyright (C) 2002-2020 Free Software Foundation, Inc. +// Copyright (C) 2002-2021 Free Software Foundation, Inc. // Contributed by Ed Satterthwaite and Chris Demetriou, of Broadcom // Corporation (SiByte). // diff -Nru gdb-9.1/sim/mips/micromipsdsp.igen gdb-10.2/sim/mips/micromipsdsp.igen --- gdb-9.1/sim/mips/micromipsdsp.igen 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/mips/micromipsdsp.igen 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ // Simulator definition for the micromips DSP ASE. -// Copyright (C) 2005-2020 Free Software Foundation, Inc. +// Copyright (C) 2005-2021 Free Software Foundation, Inc. // Contributed by Imagination Technologies, Ltd. // Written by Andrew Bennett <andrew.bennett@imgtec.com> // diff -Nru gdb-9.1/sim/mips/micromips.igen gdb-10.2/sim/mips/micromips.igen --- gdb-9.1/sim/mips/micromips.igen 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/mips/micromips.igen 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ // Simulator definition for the micromips ASE. -// Copyright (C) 2005-2020 Free Software Foundation, Inc. +// Copyright (C) 2005-2021 Free Software Foundation, Inc. // Contributed by Imagination Technologies, Ltd. // Written by Andrew Bennett <andrew.bennett@imgtec.com> // diff -Nru gdb-9.1/sim/mips/micromipsrun.c gdb-10.2/sim/mips/micromipsrun.c --- gdb-9.1/sim/mips/micromipsrun.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/mips/micromipsrun.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Run function for the micromips simulator - Copyright (C) 2005-2020 Free Software Foundation, Inc. + Copyright (C) 2005-2021 Free Software Foundation, Inc. Contributed by Imagination Technologies, Ltd. Written by Andrew Bennett <andrew.bennett@imgtec.com>. diff -Nru gdb-9.1/sim/mips/mips3264r2.igen gdb-10.2/sim/mips/mips3264r2.igen --- gdb-9.1/sim/mips/mips3264r2.igen 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/mips/mips3264r2.igen 2021-04-25 04:04:35.000000000 +0000 @@ -1,7 +1,7 @@ // -*- C -*- // Simulator definition for the MIPS 32/64 revision 2 instructions. -// Copyright (C) 2004-2020 Free Software Foundation, Inc. +// Copyright (C) 2004-2021 Free Software Foundation, Inc. // Contributed by David Ung, of MIPS Technologies. // // This file is part of the MIPS sim. diff -Nru gdb-9.1/sim/mips/mips3d.igen gdb-10.2/sim/mips/mips3d.igen --- gdb-9.1/sim/mips/mips3d.igen 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/mips/mips3d.igen 2021-04-25 04:04:35.000000000 +0000 @@ -1,7 +1,7 @@ // -*- C -*- // Simulator definition for the MIPS MIPS-3D ASE. -// Copyright (C) 2002-2020 Free Software Foundation, Inc. +// Copyright (C) 2002-2021 Free Software Foundation, Inc. // Contributed by Ed Satterthwaite and Chris Demetriou, of Broadcom // Corporation (SiByte). // diff -Nru gdb-9.1/sim/mips/sb1.igen gdb-10.2/sim/mips/sb1.igen --- gdb-9.1/sim/mips/sb1.igen 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/mips/sb1.igen 2021-04-25 04:04:35.000000000 +0000 @@ -1,7 +1,7 @@ // -*- C -*- // Simulator definition for the Broadcom SiByte SB-1 CPU extensions. -// Copyright (C) 2002-2020 Free Software Foundation, Inc. +// Copyright (C) 2002-2021 Free Software Foundation, Inc. // Contributed by Ed Satterthwaite and Chris Demetriou, of Broadcom // Corporation (SiByte). // diff -Nru gdb-9.1/sim/mips/sim-main.h gdb-10.2/sim/mips/sim-main.h --- gdb-9.1/sim/mips/sim-main.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/mips/sim-main.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* MIPS Simulator definition. - Copyright (C) 1997-2020 Free Software Foundation, Inc. + Copyright (C) 1997-2021 Free Software Foundation, Inc. Contributed by Cygnus Support. This file is part of the MIPS sim. diff -Nru gdb-9.1/sim/mips/smartmips.igen gdb-10.2/sim/mips/smartmips.igen --- gdb-9.1/sim/mips/smartmips.igen 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/mips/smartmips.igen 2021-04-25 04:04:35.000000000 +0000 @@ -1,7 +1,7 @@ // -*- C -*- // // Simulator definition for the SmartMIPS extensions. -// Copyright (C) 2005-2020 Free Software Foundation, Inc. +// Copyright (C) 2005-2021 Free Software Foundation, Inc. // Contributed by Nigel Stephens (nigel@mips.com) and // David Ung (davidu@mips.com) of MIPS Technologies. // diff -Nru gdb-9.1/sim/mn10300/dv-mn103cpu.c gdb-10.2/sim/mn10300/dv-mn103cpu.c --- gdb-9.1/sim/mn10300/dv-mn103cpu.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/mn10300/dv-mn103cpu.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This file is part of the program GDB, the GNU debugger. - Copyright (C) 1998-2020 Free Software Foundation, Inc. + Copyright (C) 1998-2021 Free Software Foundation, Inc. Contributed by Cygnus Solutions. This program is free software; you can redistribute it and/or modify diff -Nru gdb-9.1/sim/mn10300/dv-mn103int.c gdb-10.2/sim/mn10300/dv-mn103int.c --- gdb-9.1/sim/mn10300/dv-mn103int.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/mn10300/dv-mn103int.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This file is part of the program GDB, the GNU debugger. - Copyright (C) 1998-2020 Free Software Foundation, Inc. + Copyright (C) 1998-2021 Free Software Foundation, Inc. Contributed by Cygnus Solutions. This program is free software; you can redistribute it and/or modify diff -Nru gdb-9.1/sim/mn10300/dv-mn103iop.c gdb-10.2/sim/mn10300/dv-mn103iop.c --- gdb-9.1/sim/mn10300/dv-mn103iop.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/mn10300/dv-mn103iop.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This file is part of the program GDB, the GNU debugger. - Copyright (C) 1998-2020 Free Software Foundation, Inc. + Copyright (C) 1998-2021 Free Software Foundation, Inc. Contributed by Cygnus Solutions. This program is free software; you can redistribute it and/or modify diff -Nru gdb-9.1/sim/mn10300/dv-mn103ser.c gdb-10.2/sim/mn10300/dv-mn103ser.c --- gdb-9.1/sim/mn10300/dv-mn103ser.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/mn10300/dv-mn103ser.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This file is part of the program GDB, the GNU debugger. - Copyright (C) 1998-2020 Free Software Foundation, Inc. + Copyright (C) 1998-2021 Free Software Foundation, Inc. Contributed by Cygnus Solutions. This program is free software; you can redistribute it and/or modify diff -Nru gdb-9.1/sim/mn10300/dv-mn103tim.c gdb-10.2/sim/mn10300/dv-mn103tim.c --- gdb-9.1/sim/mn10300/dv-mn103tim.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/mn10300/dv-mn103tim.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This file is part of the program GDB, the GNU debugger. - Copyright (C) 1998-2020 Free Software Foundation, Inc. + Copyright (C) 1998-2021 Free Software Foundation, Inc. Contributed by Cygnus Solutions. This program is free software; you can redistribute it and/or modify diff -Nru gdb-9.1/sim/mn10300/Makefile.in gdb-10.2/sim/mn10300/Makefile.in --- gdb-9.1/sim/mn10300/Makefile.in 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/mn10300/Makefile.in 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ # Makefile template for Configure for the mn10300 sim library. -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2021 Free Software Foundation, Inc. # Written by Cygnus Support. # # This program is free software; you can redistribute it and/or modify diff -Nru gdb-9.1/sim/mn10300/sim-main.h gdb-10.2/sim/mn10300/sim-main.h --- gdb-9.1/sim/mn10300/sim-main.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/mn10300/sim-main.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,7 +1,7 @@ /* This file is part of the program psim. Copyright (C) 1994-1997, Andrew Cagney <cagney@highland.com.au> - Copyright (C) 1997-2020 Free Software Foundation, Inc. + Copyright (C) 1997-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/sim/moxie/ChangeLog gdb-10.2/sim/moxie/ChangeLog --- gdb-9.1/sim/moxie/ChangeLog 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/sim/moxie/ChangeLog 2021-04-25 04:06:26.000000000 +0000 @@ -1,3 +1,8 @@ +2019-12-14 Anthony Green <green@moxielogic.com> + + * interp.c (sim_engine_run): Make use of sim_io_* functions for + read/write/open system calls. Implement the unlink system call. + 2017-09-06 John Baldwin <jhb@FreeBSD.org> * configure: Regenerate. diff -Nru gdb-9.1/sim/moxie/interp.c gdb-10.2/sim/moxie/interp.c --- gdb-9.1/sim/moxie/interp.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/sim/moxie/interp.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Simulator for the moxie processor - Copyright (C) 2008-2020 Free Software Foundation, Inc. + Copyright (C) 2008-2021 Free Software Foundation, Inc. Contributed by Anthony Green This file is part of GDB, the GNU debugger. @@ -32,6 +32,7 @@ #include "sim-main.h" #include "sim-base.h" #include "sim-options.h" +#include "sim-io.h" typedef int word; typedef unsigned int uword; @@ -942,9 +943,10 @@ char fname[1024]; int mode = (int) convert_target_flags ((unsigned) cpu.asregs.regs[3]); int perm = (int) cpu.asregs.regs[4]; - int fd = open (fname, mode, perm); + int fd; sim_core_read_buffer (sd, scpu, read_map, fname, cpu.asregs.regs[2], 1024); + fd = sim_io_open (sd, fname, mode); /* FIXME - set errno */ cpu.asregs.regs[2] = fd; break; @@ -954,7 +956,7 @@ int fd = cpu.asregs.regs[2]; unsigned len = (unsigned) cpu.asregs.regs[4]; char *buf = malloc (len); - cpu.asregs.regs[2] = read (fd, buf, len); + cpu.asregs.regs[2] = sim_io_read (sd, fd, buf, len); sim_core_write_buffer (sd, scpu, write_map, buf, cpu.asregs.regs[3], len); free (buf); @@ -968,11 +970,22 @@ str = malloc (len); sim_core_read_buffer (sd, scpu, read_map, str, cpu.asregs.regs[3], len); - count = write (cpu.asregs.regs[2], str, len); + count = sim_io_write (sd, cpu.asregs.regs[2], str, len); free (str); cpu.asregs.regs[2] = count; break; } + case 0x7: /* SYS_unlink */ + { + char fname[1024]; + int fd; + sim_core_read_buffer (sd, scpu, read_map, fname, + cpu.asregs.regs[2], 1024); + fd = sim_io_unlink (sd, fname); + /* FIXME - set errno */ + cpu.asregs.regs[2] = fd; + break; + } case 0xffffffff: /* Linux System Call */ { unsigned int handler = cpu.asregs.sregs[1]; diff -Nru gdb-9.1/sim/moxie/Makefile.in gdb-10.2/sim/moxie/Makefile.in --- gdb-9.1/sim/moxie/Makefile.in 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/moxie/Makefile.in 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ # Makefile template for Configure for the moxie sim library. -# Copyright (C) 2008-2020 Free Software Foundation, Inc. +# Copyright (C) 2008-2021 Free Software Foundation, Inc. # Written by Anthony Green # # This program is free software; you can redistribute it and/or modify diff -Nru gdb-9.1/sim/moxie/sim-main.h gdb-10.2/sim/moxie/sim-main.h --- gdb-9.1/sim/moxie/sim-main.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/moxie/sim-main.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Moxie Simulator definition. - Copyright (C) 2009-2020 Free Software Foundation, Inc. + Copyright (C) 2009-2021 Free Software Foundation, Inc. Contributed by Anthony Green <green@moxielogic.com> This file is part of GDB, the GNU debugger. diff -Nru gdb-9.1/sim/msp430/ChangeLog gdb-10.2/sim/msp430/ChangeLog --- gdb-9.1/sim/msp430/ChangeLog 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/sim/msp430/ChangeLog 2021-04-25 04:06:26.000000000 +0000 @@ -1,3 +1,20 @@ +2020-08-07 Jozef Lawrynowicz <jozef.l@mittosystems.com> + + * msp430-sim.c (sim_open): Increase the size of the main memory region + to 0xFAC0. + +2020-08-05 Jozef Lawrynowicz <jozef.l@mittosystems.com> + + * msp430-sim.c (put_op): For unsigned multiplication, explicitly cast + operands to the unsigned type before multiplying. + * msp430-sim.h (struct msp430_cpu_state): Fix types used to store hwmult + operands. + +2020-01-22 Jozef Lawrynowicz <jozef.l@mittosystems.com> + + * msp430-sim.c (msp430_step_once): Ignore the carry flag when executing + an RRC instruction, if the ZC bit of the extension word is set. + 2017-09-06 John Baldwin <jhb@FreeBSD.org> * configure: Regenerate. diff -Nru gdb-9.1/sim/msp430/configure.ac gdb-10.2/sim/msp430/configure.ac --- gdb-9.1/sim/msp430/configure.ac 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/msp430/configure.ac 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ dnl Process this file with autoconf to produce a configure script. -dnl Copyright (C) 2005-2020 Free Software Foundation, Inc. +dnl Copyright (C) 2005-2021 Free Software Foundation, Inc. dnl Contributed by Red Hat, Inc. dnl dnl This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/msp430/Makefile.in gdb-10.2/sim/msp430/Makefile.in --- gdb-9.1/sim/msp430/Makefile.in 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/msp430/Makefile.in 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ # Makefile template for Configure for the MSP430 sim library. -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # Written by Red Hat Inc. # # This program is free software; you can redistribute it and/or modify diff -Nru gdb-9.1/sim/msp430/msp430-sim.c gdb-10.2/sim/msp430/msp430-sim.c --- gdb-9.1/sim/msp430/msp430-sim.c 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/sim/msp430/msp430-sim.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Simulator for TI MSP430 and MSP430X - Copyright (C) 2013-2020 Free Software Foundation, Inc. + Copyright (C) 2013-2021 Free Software Foundation, Inc. Contributed by Red Hat. Based on sim/bfin/bfin-sim.c which was contributed by Analog Devices, Inc. @@ -138,7 +138,7 @@ if (sim_core_read_buffer (sd, MSP430_CPU (sd), read_map, &c, 0x2, 1) == 0) sim_do_commandf (sd, "memory-region 0,0x20"); /* Needed by the GDB testsuite. */ if (sim_core_read_buffer (sd, MSP430_CPU (sd), read_map, &c, 0x500, 1) == 0) - sim_do_commandf (sd, "memory-region 0x500,0xfa00"); /* RAM and/or ROM */ + sim_do_commandf (sd, "memory-region 0x500,0xfac0"); /* RAM and/or ROM */ if (sim_core_read_buffer (sd, MSP430_CPU (sd), read_map, &c, 0xfffe, 1) == 0) sim_do_commandf (sd, "memory-region 0xffc0,0x40"); /* VECTORS. */ if (sim_core_read_buffer (sd, MSP430_CPU (sd), read_map, &c, 0x10000, 1) == 0) @@ -566,8 +566,13 @@ switch (HWMULT (sd, hwmult_type)) { case UNSIGN_32: - HWMULT (sd, hwmult_result) = HWMULT (sd, hwmult_op1) * HWMULT (sd, hwmult_op2); - HWMULT (sd, hwmult_signed_result) = (signed) HWMULT (sd, hwmult_result); + a = HWMULT (sd, hwmult_op1); + b = HWMULT (sd, hwmult_op2); + /* For unsigned 32-bit multiplication of 16-bit operands, an + explicit cast is required to prevent any implicit + sign-extension. */ + HWMULT (sd, hwmult_result) = (unsigned32) a * (unsigned32) b; + HWMULT (sd, hwmult_signed_result) = a * b; HWMULT (sd, hwmult_accumulator) = HWMULT (sd, hwmult_signed_accumulator) = 0; break; @@ -575,13 +580,16 @@ a = sign_ext (HWMULT (sd, hwmult_op1), 16); b = sign_ext (HWMULT (sd, hwmult_op2), 16); HWMULT (sd, hwmult_signed_result) = a * b; - HWMULT (sd, hwmult_result) = (unsigned) HWMULT (sd, hwmult_signed_result); + HWMULT (sd, hwmult_result) = (unsigned32) a * (unsigned32) b; HWMULT (sd, hwmult_accumulator) = HWMULT (sd, hwmult_signed_accumulator) = 0; break; case UNSIGN_MAC_32: - HWMULT (sd, hwmult_accumulator) += HWMULT (sd, hwmult_op1) * HWMULT (sd, hwmult_op2); - HWMULT (sd, hwmult_signed_accumulator) += HWMULT (sd, hwmult_op1) * HWMULT (sd, hwmult_op2); + a = HWMULT (sd, hwmult_op1); + b = HWMULT (sd, hwmult_op2); + HWMULT (sd, hwmult_accumulator) + += (unsigned32) a * (unsigned32) b; + HWMULT (sd, hwmult_signed_accumulator) += a * b; HWMULT (sd, hwmult_result) = HWMULT (sd, hwmult_accumulator); HWMULT (sd, hwmult_signed_result) = HWMULT (sd, hwmult_signed_accumulator); break; @@ -589,7 +597,8 @@ case SIGN_MAC_32: a = sign_ext (HWMULT (sd, hwmult_op1), 16); b = sign_ext (HWMULT (sd, hwmult_op2), 16); - HWMULT (sd, hwmult_accumulator) += a * b; + HWMULT (sd, hwmult_accumulator) + += (unsigned32) a * (unsigned32) b; HWMULT (sd, hwmult_signed_accumulator) += a * b; HWMULT (sd, hwmult_result) = HWMULT (sd, hwmult_accumulator); HWMULT (sd, hwmult_signed_result) = HWMULT (sd, hwmult_signed_accumulator); @@ -648,10 +657,13 @@ switch (HWMULT (sd, hw32mult_type)) { case UNSIGN_64: - HWMULT (sd, hw32mult_result) = HWMULT (sd, hw32mult_op1) * HWMULT (sd, hw32mult_op2); + HWMULT (sd, hw32mult_result) + = (unsigned64) HWMULT (sd, hw32mult_op1) + * (unsigned64) HWMULT (sd, hw32mult_op2); break; case SIGN_64: - HWMULT (sd, hw32mult_result) = sign_ext (HWMULT (sd, hw32mult_op1), 32) + HWMULT (sd, hw32mult_result) + = sign_ext (HWMULT (sd, hw32mult_op1), 32) * sign_ext (HWMULT (sd, hw32mult_op2), 32); break; } @@ -1292,8 +1304,10 @@ u1 = SRC; carry_to_use = u1 & 1; uresult = u1 >> 1; - if (SR & MSP430_FLAG_C) - uresult |= (1 << (opcode->size - 1)); + /* If the ZC bit of the opcode is set, it means we are synthesizing + RRUX, so the carry bit must be ignored. */ + if (opcode->zc == 0 && (SR & MSP430_FLAG_C)) + uresult |= (1 << (opcode->size - 1)); TRACE_ALU (MSP430_CPU (sd), "RRC: %#x >>= %#x", u1, uresult); DEST (uresult); diff -Nru gdb-9.1/sim/msp430/msp430-sim.h gdb-10.2/sim/msp430/msp430-sim.h --- gdb-9.1/sim/msp430/msp430-sim.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/msp430/msp430-sim.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Simulator for TI MSP430 and MSP430x processors. - Copyright (C) 2012-2020 Free Software Foundation, Inc. + Copyright (C) 2012-2021 Free Software Foundation, Inc. Contributed by Red Hat, Inc. This file is part of simulators. @@ -31,16 +31,16 @@ int cio_buffer; hwmult_type hwmult_type; - unsigned32 hwmult_op1; - unsigned32 hwmult_op2; + unsigned16 hwmult_op1; + unsigned16 hwmult_op2; unsigned32 hwmult_result; signed32 hwmult_signed_result; unsigned32 hwmult_accumulator; signed32 hwmult_signed_accumulator; hw32mult_type hw32mult_type; - unsigned64 hw32mult_op1; - unsigned64 hw32mult_op2; + unsigned32 hw32mult_op1; + unsigned32 hw32mult_op2; unsigned64 hw32mult_result; }; diff -Nru gdb-9.1/sim/msp430/sim-main.h gdb-10.2/sim/msp430/sim-main.h --- gdb-9.1/sim/msp430/sim-main.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/msp430/sim-main.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Simulator for TI MSP430 and MSP430X processors. - Copyright (C) 2012-2020 Free Software Foundation, Inc. + Copyright (C) 2012-2021 Free Software Foundation, Inc. Contributed by Red Hat, Inc. This file is part of simulators. diff -Nru gdb-9.1/sim/or1k/arch.c gdb-10.2/sim/or1k/arch.c --- gdb-9.1/sim/or1k/arch.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/or1k/arch.c 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright (C) 1996-2020 Free Software Foundation, Inc. +Copyright (C) 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/or1k/arch.h gdb-10.2/sim/or1k/arch.h --- gdb-9.1/sim/or1k/arch.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/or1k/arch.h 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright (C) 1996-2020 Free Software Foundation, Inc. +Copyright (C) 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/or1k/cpuall.h gdb-10.2/sim/or1k/cpuall.h --- gdb-9.1/sim/or1k/cpuall.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/or1k/cpuall.h 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright (C) 1996-2020 Free Software Foundation, Inc. +Copyright (C) 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/or1k/cpu.c gdb-10.2/sim/or1k/cpu.c --- gdb-9.1/sim/or1k/cpu.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/or1k/cpu.c 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright (C) 1996-2020 Free Software Foundation, Inc. +Copyright (C) 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/or1k/cpu.h gdb-10.2/sim/or1k/cpu.h --- gdb-9.1/sim/or1k/cpu.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/or1k/cpu.h 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright (C) 1996-2020 Free Software Foundation, Inc. +Copyright (C) 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/or1k/decode.c gdb-10.2/sim/or1k/decode.c --- gdb-9.1/sim/or1k/decode.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/or1k/decode.c 2021-04-25 04:06:26.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright (C) 1996-2020 Free Software Foundation, Inc. +Copyright (C) 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/or1k/decode.h gdb-10.2/sim/or1k/decode.h --- gdb-9.1/sim/or1k/decode.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/or1k/decode.h 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright (C) 1996-2020 Free Software Foundation, Inc. +Copyright (C) 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/or1k/Makefile.in gdb-10.2/sim/or1k/Makefile.in --- gdb-9.1/sim/or1k/Makefile.in 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/or1k/Makefile.in 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ # Makefile template for configure for the or1k simulator -# Copyright (C) 2017-2020 Free Software Foundation, Inc. +# Copyright (C) 2017-2021 Free Software Foundation, Inc. # # This file is part of GDB, the GNU debugger. # diff -Nru gdb-9.1/sim/or1k/mloop.in gdb-10.2/sim/or1k/mloop.in --- gdb-9.1/sim/or1k/mloop.in 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/or1k/mloop.in 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # Simulator main loop for or1k. -*- C -*- # -# Copyright (C) 2017-2020 Free Software Foundation, Inc. +# Copyright (C) 2017-2021 Free Software Foundation, Inc. # # This file is part of the GNU Simulators. # diff -Nru gdb-9.1/sim/or1k/model.c gdb-10.2/sim/or1k/model.c --- gdb-9.1/sim/or1k/model.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/or1k/model.c 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright (C) 1996-2020 Free Software Foundation, Inc. +Copyright (C) 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/or1k/or1k.c gdb-10.2/sim/or1k/or1k.c --- gdb-9.1/sim/or1k/or1k.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/or1k/or1k.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* OpenRISC simulator support code - Copyright (C) 2017-2020 Free Software Foundation, Inc. + Copyright (C) 2017-2021 Free Software Foundation, Inc. This file is part of GDB, the GNU debugger. diff -Nru gdb-9.1/sim/or1k/or1k-sim.h gdb-10.2/sim/or1k/or1k-sim.h --- gdb-9.1/sim/or1k/or1k-sim.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/or1k/or1k-sim.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* OpenRISC simulator support code header - Copyright (C) 2017-2020 Free Software Foundation, Inc. + Copyright (C) 2017-2021 Free Software Foundation, Inc. This file is part of GDB, the GNU debugger. diff -Nru gdb-9.1/sim/or1k/sem.c gdb-10.2/sim/or1k/sem.c --- gdb-9.1/sim/or1k/sem.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/or1k/sem.c 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright (C) 1996-2020 Free Software Foundation, Inc. +Copyright (C) 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/or1k/sem-switch.c gdb-10.2/sim/or1k/sem-switch.c --- gdb-9.1/sim/or1k/sem-switch.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/or1k/sem-switch.c 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright (C) 1996-2020 Free Software Foundation, Inc. +Copyright (C) 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/or1k/sim-if.c gdb-10.2/sim/or1k/sim-if.c --- gdb-9.1/sim/or1k/sim-if.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/or1k/sim-if.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Main simulator entry points specific to the OR1K. - Copyright (C) 2017-2020 Free Software Foundation, Inc. + Copyright (C) 2017-2021 Free Software Foundation, Inc. This file is part of GDB, the GNU debugger. diff -Nru gdb-9.1/sim/or1k/sim-main.h gdb-10.2/sim/or1k/sim-main.h --- gdb-9.1/sim/or1k/sim-main.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/or1k/sim-main.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* OpenRISC simulator main header - Copyright (C) 2017-2020 Free Software Foundation, Inc. + Copyright (C) 2017-2021 Free Software Foundation, Inc. This file is part of GDB, the GNU debugger. diff -Nru gdb-9.1/sim/or1k/traps.c gdb-10.2/sim/or1k/traps.c --- gdb-9.1/sim/or1k/traps.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/or1k/traps.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* OpenRISC exception, interrupts, syscall and trap support - Copyright (C) 2017-2020 Free Software Foundation, Inc. + Copyright (C) 2017-2021 Free Software Foundation, Inc. This file is part of GDB, the GNU debugger. diff -Nru gdb-9.1/sim/ppc/altivec_expression.h gdb-10.2/sim/ppc/altivec_expression.h --- gdb-9.1/sim/ppc/altivec_expression.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/ppc/altivec_expression.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Altivec expression macros, for PSIM, the PowerPC simulator. - Copyright 2003-2020 Free Software Foundation, Inc. + Copyright 2003-2021 Free Software Foundation, Inc. Contributed by Red Hat Inc; developed under contract from Motorola. Written by matthew green <mrg@redhat.com>. diff -Nru gdb-9.1/sim/ppc/altivec.igen gdb-10.2/sim/ppc/altivec.igen --- gdb-9.1/sim/ppc/altivec.igen 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/ppc/altivec.igen 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # Altivec instruction set, for PSIM, the PowerPC simulator. -# Copyright 2003-2020 Free Software Foundation, Inc. +# Copyright 2003-2021 Free Software Foundation, Inc. # Contributed by Red Hat Inc; developed under contract from Motorola. # Written by matthew green <mrg@redhat.com>. diff -Nru gdb-9.1/sim/ppc/altivec_registers.h gdb-10.2/sim/ppc/altivec_registers.h --- gdb-9.1/sim/ppc/altivec_registers.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/ppc/altivec_registers.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* Altivec registers, for PSIM, the PowerPC simulator. - Copyright 2003-2020 Free Software Foundation, Inc. + Copyright 2003-2021 Free Software Foundation, Inc. Contributed by Red Hat Inc; developed under contract from Motorola. Written by matthew green <mrg@redhat.com>. diff -Nru gdb-9.1/sim/ppc/ChangeLog gdb-10.2/sim/ppc/ChangeLog --- gdb-9.1/sim/ppc/ChangeLog 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/sim/ppc/ChangeLog 2021-04-25 04:06:26.000000000 +0000 @@ -1,3 +1,29 @@ +2020-07-03 Sebastian Huber <sebastian.huber@embedded-brains.de> + + * ld-insn.h (last_model, last_model_data, last_model_function, + last_model_internal, last_model_macro, last_model_static): + Delete. + (max_model_fields_len, model_data, model_functions, + model_internal, model_macros, model_static, models): Declare, but do not + define. + * ld-insn.c (last_model, last_model_data, last_model_function, + last_model_internal, last_model_macro, last_model_static, + max_model_fields_len, model_data, model_functions, + model_internal, model_macros, model_static, models): Define. + +2020-03-12 Kamil Rytarowski <n54@gmx.com> + + * emul_netbsd.c (netbsd_signal_names): Sync with NetBSD 9.99.49. + +2020-03-12 Kamil Rytarowski <n54@gmx.com> + + * emul_netbsd.c (netbsd_error_names): Sync with NetBSD 9.99.49. + +2019-12-19 Tom Tromey <tromey@adacore.com> + + PR build/24572: + * Makefile.in (install-strip): New target. + 2019-01-26 Tom Tromey <tom@tromey.com> * Makefile.in (version.c): Use sim's create-version.sh. diff -Nru gdb-9.1/sim/ppc/dp-bit.c gdb-10.2/sim/ppc/dp-bit.c --- gdb-9.1/sim/ppc/dp-bit.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/ppc/dp-bit.c 2021-04-25 04:04:35.000000000 +0000 @@ -2,7 +2,7 @@ the floating point routines in libgcc1.c for targets without hardware floating point. */ -/* Copyright (C) 1994-2020 Free Software Foundation, Inc. +/* Copyright (C) 1994-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/sim/ppc/e500_expression.h gdb-10.2/sim/ppc/e500_expression.h --- gdb-9.1/sim/ppc/e500_expression.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/ppc/e500_expression.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* e500 expression macros, for PSIM, the PowerPC simulator. - Copyright 2003-2020 Free Software Foundation, Inc. + Copyright 2003-2021 Free Software Foundation, Inc. Contributed by Red Hat Inc; developed under contract from Motorola. Written by matthew green <mrg@redhat.com>. diff -Nru gdb-9.1/sim/ppc/e500.igen gdb-10.2/sim/ppc/e500.igen --- gdb-9.1/sim/ppc/e500.igen 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/ppc/e500.igen 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ # e500 core instructions, for PSIM, the PowerPC simulator. -# Copyright 2003-2020 Free Software Foundation, Inc. +# Copyright 2003-2021 Free Software Foundation, Inc. # Contributed by Red Hat Inc; developed under contract from Motorola. # Written by matthew green <mrg@redhat.com>. diff -Nru gdb-9.1/sim/ppc/e500_registers.h gdb-10.2/sim/ppc/e500_registers.h --- gdb-9.1/sim/ppc/e500_registers.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/ppc/e500_registers.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* e500 registers, for PSIM, the PowerPC simulator. - Copyright 2003-2020 Free Software Foundation, Inc. + Copyright 2003-2021 Free Software Foundation, Inc. Contributed by Red Hat Inc; developed under contract from Motorola. Written by matthew green <mrg@redhat.com>. diff -Nru gdb-9.1/sim/ppc/emul_netbsd.c gdb-10.2/sim/ppc/emul_netbsd.c --- gdb-9.1/sim/ppc/emul_netbsd.c 2018-04-13 15:13:12.000000000 +0000 +++ gdb-10.2/sim/ppc/emul_netbsd.c 2021-04-25 04:06:26.000000000 +0000 @@ -1373,7 +1373,24 @@ /* 79 */ "EFTYPE", /* 80 */ "EAUTH", /* 81 */ "ENEEDAUTH", - /* 81 */ "ELAST", + /* 82 */ "EIDRM", + /* 83 */ "ENOMSG", + /* 84 */ "EOVERFLOW", + /* 85 */ "EILSEQ", + /* 86 */ "ENOTSUP", + /* 87 */ "ECANCELED", + /* 88 */ "EBADMSG", + /* 89 */ "ENODATA", + /* 90 */ "ENOSR", + /* 91 */ "ENOSTR", + /* 92 */ "ETIME", + /* 93 */ "ENOATTR", + /* 94 */ "EMULTIHOP", + /* 95 */ "ENOLINK", + /* 96 */ "EPROTO", + /* 97 */ "EOWNERDEAD", + /* 98 */ "ENOTRECOVERABLE", + /* 98 */ "ELAST", }; static char *(netbsd_signal_names[]) = { @@ -1409,6 +1426,38 @@ /* 29 */ "SIGINFO", /* 30 */ "SIGUSR1", /* 31 */ "SIGUSR2", + /* 32 */ "SIGPWR", + /* 33 */ "SIGRTMIN", + /* 34 */ "SIGRTMIN+1", + /* 35 */ "SIGRTMIN+2", + /* 36 */ "SIGRTMIN+3", + /* 37 */ "SIGRTMIN+4", + /* 38 */ "SIGRTMIN+5", + /* 39 */ "SIGRTMIN+6", + /* 40 */ "SIGRTMIN+7", + /* 41 */ "SIGRTMIN+8", + /* 42 */ "SIGRTMIN+9", + /* 43 */ "SIGRTMIN+10", + /* 44 */ "SIGRTMIN+11", + /* 45 */ "SIGRTMIN+12", + /* 46 */ "SIGRTMIN+13", + /* 47 */ "SIGRTMIN+14", + /* 48 */ "SIGRTMIN+15", + /* 49 */ "SIGRTMIN+16", + /* 50 */ "SIGRTMIN+17", + /* 51 */ "SIGRTMIN+18", + /* 52 */ "SIGRTMIN+19", + /* 53 */ "SIGRTMIN+20", + /* 54 */ "SIGRTMIN+21", + /* 55 */ "SIGRTMIN+22", + /* 56 */ "SIGRTMIN+23", + /* 57 */ "SIGRTMIN+24", + /* 58 */ "SIGRTMIN+25", + /* 59 */ "SIGRTMIN+26", + /* 60 */ "SIGRTMIN+27", + /* 61 */ "SIGRTMIN+28", + /* 62 */ "SIGRTMIN+29", + /* 63 */ "SIGRTMAX", }; static emul_syscall emul_netbsd_syscalls = { diff -Nru gdb-9.1/sim/ppc/gdb-sim.c gdb-10.2/sim/ppc/gdb-sim.c --- gdb-9.1/sim/ppc/gdb-sim.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/ppc/gdb-sim.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* This file is part of GDB. - Copyright 2004-2020 Free Software Foundation, Inc. + Copyright 2004-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/sim/ppc/ld-insn.c gdb-10.2/sim/ppc/ld-insn.c --- gdb-9.1/sim/ppc/ld-insn.c 2013-12-26 07:21:52.000000000 +0000 +++ gdb-10.2/sim/ppc/ld-insn.c 2020-09-13 02:33:41.000000000 +0000 @@ -28,6 +28,24 @@ #include "igen.h" +static model *last_model; + +static insn *last_model_macro; +static insn *last_model_function; +static insn *last_model_internal; +static insn *last_model_static; +static insn *last_model_data; + +model *models; + +insn *model_macros; +insn *model_functions; +insn *model_internal; +insn *model_static; +insn *model_data; + +int max_model_fields_len; + static void update_depth(insn_table *entry, lf *file, diff -Nru gdb-9.1/sim/ppc/ld-insn.h gdb-10.2/sim/ppc/ld-insn.h --- gdb-9.1/sim/ppc/ld-insn.h 2013-12-26 07:21:52.000000000 +0000 +++ gdb-10.2/sim/ppc/ld-insn.h 2020-09-13 02:33:41.000000000 +0000 @@ -200,25 +200,15 @@ table_include *includes, cache_table **cache_rules); -model *models; -model *last_model; +extern model *models; -insn *model_macros; -insn *last_model_macro; +extern insn *model_macros; +extern insn *model_functions; +extern insn *model_internal; +extern insn *model_static; +extern insn *model_data; -insn *model_functions; -insn *last_model_function; - -insn *model_internal; -insn *last_model_internal; - -insn *model_static; -insn *last_model_static; - -insn *model_data; -insn *last_model_data; - -int max_model_fields_len; +extern int max_model_fields_len; extern void insn_table_insert_insn (insn_table *table, diff -Nru gdb-9.1/sim/ppc/Makefile.in gdb-10.2/sim/ppc/Makefile.in --- gdb-9.1/sim/ppc/Makefile.in 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/sim/ppc/Makefile.in 2021-04-25 04:06:26.000000000 +0000 @@ -884,5 +884,10 @@ n=`echo run | sed '$(program_transform_name)'`; \ $(INSTALL_PROGRAM) run$(EXEEXT) $(DESTDIR)$(bindir)/$$n$(EXEEXT) +install-strip: installdirs + n=`echo run | sed '$(program_transform_name)'`; \ + $(INSTALL_PROGRAM) run$(EXEEXT) $(DESTDIR)$(bindir)/$$n$(EXEEXT) + $(STRIP) $(DESTDIR)$(bindir)/$$n$(EXEEXT) + installdirs: $(SHELL) $(srcdir)/../../mkinstalldirs $(DESTDIR)$(bindir) diff -Nru gdb-9.1/sim/ppc/psim.texinfo gdb-10.2/sim/ppc/psim.texinfo --- gdb-9.1/sim/ppc/psim.texinfo 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/sim/ppc/psim.texinfo 2021-04-25 04:04:35.000000000 +0000 @@ -54,7 +54,7 @@ This file documents Texinfo, a documentation system that uses a single source file to produce both on-line information and a printed manual. -Copyright (C) 1988-2020 Free Software Foundation, Inc. +Copyright (C) 1988--2021 Free Software Foundation, Inc. This is the second edition of the Texinfo documentation,@* and is consistent with version 2 of @file{texinfo.tex}. diff -Nru gdb-9.1/sim/pru/configure.ac gdb-10.2/sim/pru/configure.ac --- gdb-9.1/sim/pru/configure.ac 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/pru/configure.ac 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ dnl Process this file with autoconf to produce a configure script. -dnl Copyright (C) 2016-2020 Free Software Foundation, Inc. +dnl Copyright (C) 2016-2021 Free Software Foundation, Inc. dnl Contributed by Dimitar Dimitrov <dimitar@dinux.eu> dnl dnl This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/pru/interp.c gdb-10.2/sim/pru/interp.c --- gdb-9.1/sim/pru/interp.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/pru/interp.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Simulator for the Texas Instruments PRU processor - Copyright 2009-2020 Free Software Foundation, Inc. + Copyright 2009-2021 Free Software Foundation, Inc. Inspired by the Microblaze simulator Contributed by Dimitar Dimitrov <dimitar@dinux.eu> diff -Nru gdb-9.1/sim/pru/Makefile.in gdb-10.2/sim/pru/Makefile.in --- gdb-9.1/sim/pru/Makefile.in 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/pru/Makefile.in 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ # Makefile template for Configure for the PRU sim library. -# Copyright (C) 1990-2020 Free Software Foundation, Inc. +# Copyright (C) 1990-2021 Free Software Foundation, Inc. # Written by Dimitar Dimitrov <dimitar@dinux.eu> # # Based on the MCore sim library diff -Nru gdb-9.1/sim/pru/pru.h gdb-10.2/sim/pru/pru.h --- gdb-9.1/sim/pru/pru.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/pru/pru.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2016-2020 Free Software Foundation, Inc. +/* Copyright 2016-2021 Free Software Foundation, Inc. Contributed by Dimitar Dimitrov <dimitar@dinux.eu> This file is part of the PRU simulator. diff -Nru gdb-9.1/sim/pru/pru.isa gdb-10.2/sim/pru/pru.isa --- gdb-9.1/sim/pru/pru.isa 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/pru/pru.isa 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2016-2020 Free Software Foundation, Inc. +/* Copyright 2016-2021 Free Software Foundation, Inc. Contributed by Dimitar Dimitrov <dimitar@dinux.eu> This file is part of the PRU simulator. diff -Nru gdb-9.1/sim/pru/sim-main.h gdb-10.2/sim/pru/sim-main.h --- gdb-9.1/sim/pru/sim-main.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/pru/sim-main.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright 2016-2020 Free Software Foundation, Inc. +/* Copyright 2016-2021 Free Software Foundation, Inc. Contributed by Dimitar Dimitrov <dimitar@dinux.eu> This file is part of the PRU simulator. diff -Nru gdb-9.1/sim/rl78/configure.ac gdb-10.2/sim/rl78/configure.ac --- gdb-9.1/sim/rl78/configure.ac 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/rl78/configure.ac 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ dnl Process this file with autoconf to produce a configure script. -dnl Copyright (C) 2005-2020 Free Software Foundation, Inc. +dnl Copyright (C) 2005-2021 Free Software Foundation, Inc. dnl Contributed by Red Hat, Inc. dnl dnl This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/rl78/cpu.c gdb-10.2/sim/rl78/cpu.c --- gdb-9.1/sim/rl78/cpu.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/rl78/cpu.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* cpu.c --- CPU for RL78 simulator. - Copyright (C) 2011-2020 Free Software Foundation, Inc. + Copyright (C) 2011-2021 Free Software Foundation, Inc. Contributed by Red Hat, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/rl78/cpu.h gdb-10.2/sim/rl78/cpu.h --- gdb-9.1/sim/rl78/cpu.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/rl78/cpu.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* cpu.h --- declarations for the RL78 core. - Copyright (C) 2005-2020 Free Software Foundation, Inc. + Copyright (C) 2005-2021 Free Software Foundation, Inc. Contributed by Red Hat, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/rl78/gdb-if.c gdb-10.2/sim/rl78/gdb-if.c --- gdb-9.1/sim/rl78/gdb-if.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/rl78/gdb-if.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* gdb-if.c -- sim interface to GDB. -Copyright (C) 2011-2020 Free Software Foundation, Inc. +Copyright (C) 2011-2021 Free Software Foundation, Inc. Contributed by Red Hat, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/rl78/load.c gdb-10.2/sim/rl78/load.c --- gdb-9.1/sim/rl78/load.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/rl78/load.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* load.c --- loading object files into the RL78 simulator. - Copyright (C) 2005-2020 Free Software Foundation, Inc. + Copyright (C) 2005-2021 Free Software Foundation, Inc. Contributed by Red Hat, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/rl78/load.h gdb-10.2/sim/rl78/load.h --- gdb-9.1/sim/rl78/load.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/rl78/load.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* load.h --- interface to loading object files into the RX simulator. - Copyright (C) 2008-2020 Free Software Foundation, Inc. + Copyright (C) 2008-2021 Free Software Foundation, Inc. Contributed by Red Hat, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/rl78/main.c gdb-10.2/sim/rl78/main.c --- gdb-9.1/sim/rl78/main.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/rl78/main.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* main.c --- main function for stand-alone RL78 simulator. - Copyright (C) 2011-2020 Free Software Foundation, Inc. + Copyright (C) 2011-2021 Free Software Foundation, Inc. Contributed by Red Hat, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/rl78/Makefile.in gdb-10.2/sim/rl78/Makefile.in --- gdb-9.1/sim/rl78/Makefile.in 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/rl78/Makefile.in 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ #### Makefile.in --- Makefile template for the RL78 simulator -### Copyright (C) 2008-2020 Free Software Foundation, Inc. +### Copyright (C) 2008-2021 Free Software Foundation, Inc. ### Contributed by Red Hat, Inc. ### ### This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/rl78/mem.c gdb-10.2/sim/rl78/mem.c --- gdb-9.1/sim/rl78/mem.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/rl78/mem.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* mem.c --- memory for RL78 simulator. - Copyright (C) 2011-2020 Free Software Foundation, Inc. + Copyright (C) 2011-2021 Free Software Foundation, Inc. Contributed by Red Hat, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/rl78/mem.h gdb-10.2/sim/rl78/mem.h --- gdb-9.1/sim/rl78/mem.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/rl78/mem.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* mem.h --- interface to memory for RL78 simulator. - Copyright (C) 2011-2020 Free Software Foundation, Inc. + Copyright (C) 2011-2021 Free Software Foundation, Inc. Contributed by Red Hat, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/rl78/rl78.c gdb-10.2/sim/rl78/rl78.c --- gdb-9.1/sim/rl78/rl78.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/rl78/rl78.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* rl78.c --- opcode semantics for stand-alone RL78 simulator. - Copyright (C) 2008-2020 Free Software Foundation, Inc. + Copyright (C) 2008-2021 Free Software Foundation, Inc. Contributed by Red Hat, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/rl78/trace.c gdb-10.2/sim/rl78/trace.c --- gdb-9.1/sim/rl78/trace.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/rl78/trace.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* trace.c --- tracing output for the RL78 simulator. - Copyright (C) 2005-2020 Free Software Foundation, Inc. + Copyright (C) 2005-2021 Free Software Foundation, Inc. Contributed by Red Hat, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/rl78/trace.h gdb-10.2/sim/rl78/trace.h --- gdb-9.1/sim/rl78/trace.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/rl78/trace.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* trace.h --- interface to tracing output for the RX simulator. - Copyright (C) 2005-2020 Free Software Foundation, Inc. + Copyright (C) 2005-2021 Free Software Foundation, Inc. Contributed by Red Hat, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/rx/configure.ac gdb-10.2/sim/rx/configure.ac --- gdb-9.1/sim/rx/configure.ac 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/rx/configure.ac 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ dnl Process this file with autoconf to produce a configure script. -dnl Copyright (C) 2005-2020 Free Software Foundation, Inc. +dnl Copyright (C) 2005-2021 Free Software Foundation, Inc. dnl Contributed by Red Hat, Inc. dnl dnl This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/rx/cpu.h gdb-10.2/sim/rx/cpu.h --- gdb-9.1/sim/rx/cpu.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/rx/cpu.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* cpu.h --- declarations for the RX core. -Copyright (C) 2005-2020 Free Software Foundation, Inc. +Copyright (C) 2005-2021 Free Software Foundation, Inc. Contributed by Red Hat, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/rx/err.c gdb-10.2/sim/rx/err.c --- gdb-9.1/sim/rx/err.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/rx/err.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* err.c --- handle errors for RX simulator. -Copyright (C) 2008-2020 Free Software Foundation, Inc. +Copyright (C) 2008-2021 Free Software Foundation, Inc. Contributed by Red Hat, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/rx/err.h gdb-10.2/sim/rx/err.h --- gdb-9.1/sim/rx/err.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/rx/err.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* err.h --- handle errors for RX simulator. -Copyright (C) 2008-2020 Free Software Foundation, Inc. +Copyright (C) 2008-2021 Free Software Foundation, Inc. Contributed by Red Hat, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/rx/fpu.c gdb-10.2/sim/rx/fpu.c --- gdb-9.1/sim/rx/fpu.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/rx/fpu.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* fpu.c --- FPU emulator for stand-alone RX simulator. -Copyright (C) 2008-2020 Free Software Foundation, Inc. +Copyright (C) 2008-2021 Free Software Foundation, Inc. Contributed by Red Hat, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/rx/fpu.h gdb-10.2/sim/rx/fpu.h --- gdb-9.1/sim/rx/fpu.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/rx/fpu.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* fpu.h --- FPU emulator for stand-alone RX simulator. -Copyright (C) 2008-2020 Free Software Foundation, Inc. +Copyright (C) 2008-2021 Free Software Foundation, Inc. Contributed by Red Hat, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/rx/gdb-if.c gdb-10.2/sim/rx/gdb-if.c --- gdb-9.1/sim/rx/gdb-if.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/rx/gdb-if.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* gdb-if.c -- sim interface to GDB. -Copyright (C) 2008-2020 Free Software Foundation, Inc. +Copyright (C) 2008-2021 Free Software Foundation, Inc. Contributed by Red Hat, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/rx/load.c gdb-10.2/sim/rx/load.c --- gdb-9.1/sim/rx/load.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/rx/load.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* load.c --- loading object files into the RX simulator. -Copyright (C) 2005-2020 Free Software Foundation, Inc. +Copyright (C) 2005-2021 Free Software Foundation, Inc. Contributed by Red Hat, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/rx/load.h gdb-10.2/sim/rx/load.h --- gdb-9.1/sim/rx/load.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/rx/load.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* load.h --- interface to loading object files into the RX simulator. -Copyright (C) 2008-2020 Free Software Foundation, Inc. +Copyright (C) 2008-2021 Free Software Foundation, Inc. Contributed by Red Hat, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/rx/main.c gdb-10.2/sim/rx/main.c --- gdb-9.1/sim/rx/main.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/rx/main.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* main.c --- main function for stand-alone RX simulator. -Copyright (C) 2005-2020 Free Software Foundation, Inc. +Copyright (C) 2005-2021 Free Software Foundation, Inc. Contributed by Red Hat, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/rx/Makefile.in gdb-10.2/sim/rx/Makefile.in --- gdb-9.1/sim/rx/Makefile.in 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/rx/Makefile.in 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ #### Makefile.in --- Makefile template for the RX simulator -### Copyright (C) 2008-2020 Free Software Foundation, Inc. +### Copyright (C) 2008-2021 Free Software Foundation, Inc. ### Contributed by Red Hat, Inc. ### ### This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/rx/mem.c gdb-10.2/sim/rx/mem.c --- gdb-9.1/sim/rx/mem.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/rx/mem.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* mem.c --- memory for RX simulator. -Copyright (C) 2005-2020 Free Software Foundation, Inc. +Copyright (C) 2005-2021 Free Software Foundation, Inc. Contributed by Red Hat, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/rx/mem.h gdb-10.2/sim/rx/mem.h --- gdb-9.1/sim/rx/mem.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/rx/mem.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* mem.h --- interface to memory for M32C simulator. -Copyright (C) 2005-2020 Free Software Foundation, Inc. +Copyright (C) 2005-2021 Free Software Foundation, Inc. Contributed by Red Hat, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/rx/misc.c gdb-10.2/sim/rx/misc.c --- gdb-9.1/sim/rx/misc.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/rx/misc.c 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* misc.c --- miscellaneous utility functions for RX simulator. -Copyright (C) 2005-2020 Free Software Foundation, Inc. +Copyright (C) 2005-2021 Free Software Foundation, Inc. Contributed by Red Hat, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/rx/misc.h gdb-10.2/sim/rx/misc.h --- gdb-9.1/sim/rx/misc.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/rx/misc.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* misc.h --- interface to miscellaneous utility functions for RX simulator. -Copyright (C) 2005-2020 Free Software Foundation, Inc. +Copyright (C) 2005-2021 Free Software Foundation, Inc. Contributed by Red Hat, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/rx/reg.c gdb-10.2/sim/rx/reg.c --- gdb-9.1/sim/rx/reg.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/rx/reg.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* reg.c --- register set model for RX simulator. - Copyright (C) 2005-2020 Free Software Foundation, Inc. + Copyright (C) 2005-2021 Free Software Foundation, Inc. Contributed by Red Hat, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/rx/rx.c gdb-10.2/sim/rx/rx.c --- gdb-9.1/sim/rx/rx.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/rx/rx.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* rx.c --- opcode semantics for stand-alone RX simulator. -Copyright (C) 2008-2020 Free Software Foundation, Inc. +Copyright (C) 2008-2021 Free Software Foundation, Inc. Contributed by Red Hat, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/rx/syscalls.c gdb-10.2/sim/rx/syscalls.c --- gdb-9.1/sim/rx/syscalls.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/rx/syscalls.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* syscalls.c --- implement system calls for the RX simulator. -Copyright (C) 2005-2020 Free Software Foundation, Inc. +Copyright (C) 2005-2021 Free Software Foundation, Inc. Contributed by Red Hat, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/rx/syscalls.h gdb-10.2/sim/rx/syscalls.h --- gdb-9.1/sim/rx/syscalls.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/rx/syscalls.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* syscalls.h --- interface to syscalls for the RX sim. -Copyright (C) 2005-2020 Free Software Foundation, Inc. +Copyright (C) 2005-2021 Free Software Foundation, Inc. Contributed by Red Hat, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/rx/trace.c gdb-10.2/sim/rx/trace.c --- gdb-9.1/sim/rx/trace.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/rx/trace.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* trace.c --- tracing output for the RX simulator. -Copyright (C) 2005-2020 Free Software Foundation, Inc. +Copyright (C) 2005-2021 Free Software Foundation, Inc. Contributed by Red Hat, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/rx/trace.h gdb-10.2/sim/rx/trace.h --- gdb-9.1/sim/rx/trace.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/rx/trace.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,6 +1,6 @@ /* trace.h --- interface to tracing output for the RX simulator. - Copyright (C) 2005-2020 Free Software Foundation, Inc. + Copyright (C) 2005-2021 Free Software Foundation, Inc. Contributed by Red Hat, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/sh/Makefile.in gdb-10.2/sim/sh/Makefile.in --- gdb-9.1/sim/sh/Makefile.in 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/sh/Makefile.in 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ # Makefile template for Configure for the SH sim library. -# Copyright (C) 1990-2020 Free Software Foundation, Inc. +# Copyright (C) 1990-2021 Free Software Foundation, Inc. # Written by Cygnus Support. # # This program is free software; you can redistribute it and/or modify diff -Nru gdb-9.1/sim/sh/sim-main.h gdb-10.2/sim/sh/sim-main.h --- gdb-9.1/sim/sh/sim-main.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/sh/sim-main.h 2021-04-25 04:04:35.000000000 +0000 @@ -1,5 +1,5 @@ /* Moxie Simulator definition. - Copyright (C) 2009-2020 Free Software Foundation, Inc. + Copyright (C) 2009-2021 Free Software Foundation, Inc. This file is part of GDB, the GNU debugger. diff -Nru gdb-9.1/sim/sh64/arch.c gdb-10.2/sim/sh64/arch.c --- gdb-9.1/sim/sh64/arch.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/sh64/arch.c 2021-04-25 04:06:26.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/sh64/arch.h gdb-10.2/sim/sh64/arch.h --- gdb-9.1/sim/sh64/arch.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/sh64/arch.h 2021-04-25 04:06:26.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/sh64/cpuall.h gdb-10.2/sim/sh64/cpuall.h --- gdb-9.1/sim/sh64/cpuall.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/sh64/cpuall.h 2021-04-25 04:06:26.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/sh64/cpu.c gdb-10.2/sim/sh64/cpu.c --- gdb-9.1/sim/sh64/cpu.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/sh64/cpu.c 2021-04-25 04:06:26.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/sh64/cpu.h gdb-10.2/sim/sh64/cpu.h --- gdb-9.1/sim/sh64/cpu.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/sh64/cpu.h 2021-04-25 04:06:26.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/sh64/decode-compact.c gdb-10.2/sim/sh64/decode-compact.c --- gdb-9.1/sim/sh64/decode-compact.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/sh64/decode-compact.c 2021-04-25 04:06:26.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/sh64/decode-compact.h gdb-10.2/sim/sh64/decode-compact.h --- gdb-9.1/sim/sh64/decode-compact.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/sh64/decode-compact.h 2021-04-25 04:06:26.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/sh64/decode-media.c gdb-10.2/sim/sh64/decode-media.c --- gdb-9.1/sim/sh64/decode-media.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/sh64/decode-media.c 2021-04-25 04:06:26.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/sh64/decode-media.h gdb-10.2/sim/sh64/decode-media.h --- gdb-9.1/sim/sh64/decode-media.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/sh64/decode-media.h 2021-04-25 04:06:26.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/sh64/defs-compact.h gdb-10.2/sim/sh64/defs-compact.h --- gdb-9.1/sim/sh64/defs-compact.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/sh64/defs-compact.h 2021-04-25 04:06:26.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/sh64/defs-media.h gdb-10.2/sim/sh64/defs-media.h --- gdb-9.1/sim/sh64/defs-media.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/sh64/defs-media.h 2021-04-25 04:06:26.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/sh64/eng.h gdb-10.2/sim/sh64/eng.h --- gdb-9.1/sim/sh64/eng.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/sh64/eng.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Engine declarations. - Copyright (C) 2000-2020 Free Software Foundation, Inc. + Copyright (C) 2000-2021 Free Software Foundation, Inc. Contributed by Red Hat, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/sh64/Makefile.in gdb-10.2/sim/sh64/Makefile.in --- gdb-9.1/sim/sh64/Makefile.in 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/sh64/Makefile.in 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ # Makefile template for Configure for the SH64 simulator -# Copyright (C) 2000-2020 Free Software Foundation, Inc. +# Copyright (C) 2000-2021 Free Software Foundation, Inc. # Contributed by Red Hat, Inc. # # This program is free software; you can redistribute it and/or modify diff -Nru gdb-9.1/sim/sh64/sem-compact.c gdb-10.2/sim/sh64/sem-compact.c --- gdb-9.1/sim/sh64/sem-compact.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/sh64/sem-compact.c 2021-04-25 04:06:26.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/sh64/sem-compact-switch.c gdb-10.2/sim/sh64/sem-compact-switch.c --- gdb-9.1/sim/sh64/sem-compact-switch.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/sh64/sem-compact-switch.c 2021-04-25 04:06:26.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/sh64/sem-media.c gdb-10.2/sim/sh64/sem-media.c --- gdb-9.1/sim/sh64/sem-media.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/sh64/sem-media.c 2021-04-25 04:06:26.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/sh64/sem-media-switch.c gdb-10.2/sim/sh64/sem-media-switch.c --- gdb-9.1/sim/sh64/sem-media-switch.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/sh64/sem-media-switch.c 2021-04-25 04:06:26.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/sh64/sh64.c gdb-10.2/sim/sh64/sh64.c --- gdb-9.1/sim/sh64/sh64.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/sh64/sh64.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* SH5 simulator support code - Copyright (C) 2000-2020 Free Software Foundation, Inc. + Copyright (C) 2000-2021 Free Software Foundation, Inc. Contributed by Red Hat, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/sh64/sh64-sim.h gdb-10.2/sim/sh64/sh64-sim.h --- gdb-9.1/sim/sh64/sh64-sim.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/sh64/sh64-sim.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* collection of junk waiting time to sort out - Copyright (C) 2000-2020 Free Software Foundation, Inc. + Copyright (C) 2000-2021 Free Software Foundation, Inc. Contributed by Red Hat, Inc. This file is part of the GNU Simulators. diff -Nru gdb-9.1/sim/sh64/sh-desc.c gdb-10.2/sim/sh64/sh-desc.c --- gdb-9.1/sim/sh64/sh-desc.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/sh64/sh-desc.c 2021-04-25 04:06:26.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU Binutils and/or GDB, the GNU debugger. diff -Nru gdb-9.1/sim/sh64/sh-desc.h gdb-10.2/sim/sh64/sh-desc.h --- gdb-9.1/sim/sh64/sh-desc.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/sh64/sh-desc.h 2021-04-25 04:06:26.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU Binutils and/or GDB, the GNU debugger. diff -Nru gdb-9.1/sim/sh64/sh-opc.h gdb-10.2/sim/sh64/sh-opc.h --- gdb-9.1/sim/sh64/sh-opc.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/sh64/sh-opc.h 2021-04-25 04:06:26.000000000 +0000 @@ -2,7 +2,7 @@ THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright 1996-2020 Free Software Foundation, Inc. +Copyright 1996-2021 Free Software Foundation, Inc. This file is part of the GNU Binutils and/or GDB, the GNU debugger. diff -Nru gdb-9.1/sim/sh64/sim-if.c gdb-10.2/sim/sh64/sim-if.c --- gdb-9.1/sim/sh64/sim-if.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/sh64/sim-if.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Main simulator entry points specific to the SH5. - Copyright (C) 2000-2020 Free Software Foundation, Inc. + Copyright (C) 2000-2021 Free Software Foundation, Inc. Contributed by Cygnus Solutions. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/testsuite/ChangeLog gdb-10.2/sim/testsuite/ChangeLog --- gdb-9.1/sim/testsuite/ChangeLog 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/sim/testsuite/ChangeLog 2021-04-25 04:06:26.000000000 +0000 @@ -1,3 +1,34 @@ +2020-09-08 David Faust <david.faust@oracle.com> + + * sim/bpf/alu.s: Correct div and mod tests. + * sim/bpf/alu32.s: Likewise. + +2020-08-04 David Faust <david.faust@oracle.com> + Jose E. Marchesi <jose.marchesi@oracle.com> + + * configure: Regenerate. + * sim/bpf/allinsn.exp: New file. + * sim/bpf/alu.s: Likewise. + * sim/bpf/alu32.s: Likewise. + * sim/bpf/endbe.s: Likewise. + * sim/bpf/endle.s: Likewise. + * sim/bpf/jmp.s: Likewise. + * sim/bpf/jmp32.s: Likewise. + * sim/bpf/ldabs.s: Likewise. + * sim/bpf/mem.s: Likewise. + * sim/bpf/mov.s: Likewise. + * sim/bpf/testutils.inc: Likewise. + * sim/bpf/xadd.s: Likewise. + +2020-07-29 Simon Marchi <simon.marchi@efficios.com> + + * configure: Re-generate. + +2019-12-19 Tom Tromey <tromey@adacore.com> + + PR build/24572: + * Makefile.in (install-strip): New target. + 2019-09-23 Dimitar Dimitrov <dimitar@dinux.eu> * configure: Regenerate. diff -Nru gdb-9.1/sim/testsuite/common/bits-gen.c gdb-10.2/sim/testsuite/common/bits-gen.c --- gdb-9.1/sim/testsuite/common/bits-gen.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/testsuite/common/bits-gen.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ /* Miscellaneous simulator utilities. - Copyright (C) 1997-2020 Free Software Foundation, Inc. + Copyright (C) 1997-2021 Free Software Foundation, Inc. Contributed by Cygnus Support. This file is part of GDB, the GNU debugger. diff -Nru gdb-9.1/sim/testsuite/configure gdb-10.2/sim/testsuite/configure --- gdb-9.1/sim/testsuite/configure 2019-09-23 23:33:55.000000000 +0000 +++ gdb-10.2/sim/testsuite/configure 2021-04-25 04:06:26.000000000 +0000 @@ -1875,6 +1875,9 @@ bfin-*-*) sim_arch=bfin ;; + bpf-*-*) + sim_arch=bpf + ;; cr16*-*-*) sim_arch=cr16 ;; @@ -1928,6 +1931,9 @@ or1k-*-* | or1knd-*-*) sim_arch=or1k ;; + pru*-*-*) + sim_arch=pru + ;; rl78-*-*) sim_arch=rl78 ;; @@ -1946,9 +1952,6 @@ powerpc*-*-*) sim_arch=ppc ;; - pru*-*-*) - sim_arch=pru - ;; ft32-*-*) sim_arch=ft32 ;; diff -Nru gdb-9.1/sim/testsuite/d10v-elf/Makefile.in gdb-10.2/sim/testsuite/d10v-elf/Makefile.in --- gdb-9.1/sim/testsuite/d10v-elf/Makefile.in 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/testsuite/d10v-elf/Makefile.in 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ # Makefile for regression testing the GNU debugger. -# Copyright (C) 1992-2020 Free Software Foundation, Inc. +# Copyright (C) 1992-2021 Free Software Foundation, Inc. # This file is part of GDB. diff -Nru gdb-9.1/sim/testsuite/frv-elf/Makefile.in gdb-10.2/sim/testsuite/frv-elf/Makefile.in --- gdb-9.1/sim/testsuite/frv-elf/Makefile.in 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/testsuite/frv-elf/Makefile.in 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ # Makefile for regression testing the frv simulator. -# Copyright (C) 1998-2020 Free Software Foundation, Inc. +# Copyright (C) 1998-2021 Free Software Foundation, Inc. # This file is part of GDB. diff -Nru gdb-9.1/sim/testsuite/m32r-elf/Makefile.in gdb-10.2/sim/testsuite/m32r-elf/Makefile.in --- gdb-9.1/sim/testsuite/m32r-elf/Makefile.in 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/testsuite/m32r-elf/Makefile.in 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ # Makefile for regression testing the m32r simulator. -# Copyright (C) 1998-2020 Free Software Foundation, Inc. +# Copyright (C) 1998-2021 Free Software Foundation, Inc. # This file is part of GDB. diff -Nru gdb-9.1/sim/testsuite/Makefile.in gdb-10.2/sim/testsuite/Makefile.in --- gdb-9.1/sim/testsuite/Makefile.in 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/sim/testsuite/Makefile.in 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ # Makefile for regression testing the GNU debugger. -# Copyright (C) 1997-2020 Free Software Foundation, Inc. +# Copyright (C) 1997-2021 Free Software Foundation, Inc. # This file is part of GDB. @@ -81,6 +81,7 @@ dvi: install: +install-strip: uninstall: force diff -Nru gdb-9.1/sim/testsuite/mips64el-elf/Makefile.in gdb-10.2/sim/testsuite/mips64el-elf/Makefile.in --- gdb-9.1/sim/testsuite/mips64el-elf/Makefile.in 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/testsuite/mips64el-elf/Makefile.in 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ # Makefile for regression testing the GNU debugger. -# Copyright (C) 1992-2020 Free Software Foundation, Inc. +# Copyright (C) 1992-2021 Free Software Foundation, Inc. # This file is part of GDB. diff -Nru gdb-9.1/sim/testsuite/sim/bpf/allinsn.exp gdb-10.2/sim/testsuite/sim/bpf/allinsn.exp --- gdb-9.1/sim/testsuite/sim/bpf/allinsn.exp 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/sim/testsuite/sim/bpf/allinsn.exp 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,26 @@ +# eBPF simulator testsuite + +if [istarget bpf-unknown-none] { + # all machines + set all_machs "bpf" + + global global_sim_options + if ![info exists global_sim_options] { + set global_sim_options "--memory-size=4Mb" + } + + global global_ld_options + if ![info exists global_ld_options] { + set global_ld_options "-Ttext=0x0" + } + + foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.s]] { + # If we're only testing specific files and this isn't one of them, + # skip it. + if ![runtest_file_p $runtests $src] { + continue + } + + run_sim_test $src $all_machs + } +} diff -Nru gdb-9.1/sim/testsuite/sim/bpf/alu32.s gdb-10.2/sim/testsuite/sim/bpf/alu32.s --- gdb-9.1/sim/testsuite/sim/bpf/alu32.s 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/sim/testsuite/sim/bpf/alu32.s 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,110 @@ +# mach: bpf +# output: pass\nexit 0 (0x0)\n +;; alu32.s +;; Tests for ALU(32) BPF instructions in simulator + + .include "testutils.inc" + + .text + .global main + .type main, @function +main: + mov32 %r1, 10 ; r1 = 10 + mov32 %r2, -5 ; r2 = -5 + + ;; add + add32 %r1, 1 ; r1 += 1 (r1 = 11) + add32 %r2, -1 ; r2 += -1 (r2 = -6) + add32 %r1, %r2 ; r1 += r2 (r1 = 11 + -6 = 5) + fail_ne32 %r1, 5 + + ;; sub + sub32 %r1, 5 ; r1 -= 5 (r1 = 0) + sub32 %r1, -5 ; r1 -= -5 (r1 = 5) + sub32 %r1, %r2 ; r1 -= r2 (r1 = 5 - -6 = 11) + fail_ne32 %r1, 11 + + ;; mul + mul32 %r1, 2 ; r1 *= 2 (r1 = 22) + mul32 %r1, -2 ; r1 *= -2 (r1 = -44) + mul32 %r1, %r2 ; r1 *= r2 (r1 = -44 * -6 = 264) + fail_ne32 %r1, 264 + + ;; div + div32 %r1, 6 + mov32 %r2, 11 + div32 %r1, %r2 + fail_ne32 %r1, 4 + + ;; div is unsigned + mov32 %r1, -8 ; 0xfffffff8 + div32 %r1, 2 + fail_ne32 %r1, 0x7ffffffc ; sign bits are not preserved + + ;; and (bitwise) + mov32 %r1, 0xb ; r1 = (0xb = 0b1011) + mov32 %r2, 0x5 ; r2 = (0x5 = 0b0101) + and32 %r1, 0xa ; r1 &= (0xa = 0b1010) = (0b1010 = 0xa) + fail_ne32 %r1, 0xa + and32 %r1, %r2 ; r1 &= r2 = 0x0 + fail_ne32 %r1, 0x0 + + ;; or (bitwise) + or32 %r1, 0xb + or32 %r1, %r2 + fail_ne32 %r1, 0xf + + ;; lsh (left shift) + lsh32 %r1, 4 ; r1 <<= 4 (r1 = 0xf0) + mov32 %r2, 24 ; r2 = 24 + lsh32 %r1, %r2 + fail_ne32 %r1, 0xf0000000 + + ;; rsh (right logical shift) + rsh32 %r1, 2 + rsh32 %r1, %r2 + fail_ne32 %r1, 0x3c ; (0xf000 0000 >> 26) + + ;; arsh (right arithmetic shift) + arsh32 %r1, 1 + or32 %r1, 0x80000000 + mov32 %r2, 3 + arsh32 %r1, %r2 + fail_ne %r1, 0x00000000F0000003 + ; Note: make sure r1 is NOT sign-extended + ; i.e. upper-32 bits should be untouched + + ;; mod + mov32 %r1, 1025 + mod32 %r1, 16 + fail_ne32 %r1, 1 + + ;; mod is unsigned + mov32 %r1, 1025 + mod32 %r1, -16 ; when unsigned, much larger than 1025 + fail_ne32 %r1, 1025 + + mov32 %r1, -25 ; when unsigned, a large positive which is + mov32 %r2, 5 ; ... not evenly divisible by 5 + mod32 %r1, %r2 + fail_ne32 %r1, 1 + + ;; xor + xor32 %r1, %r2 + fail_ne32 %r1, 4 + xor32 %r1, 0xF000000F + fail_ne %r1, 0xF000000B ; Note: check for (bad) sign-extend + xor32 %r1, %r1 + fail_ne %r1, 0 + + ;; neg + mov32 %r1, -1 + mov32 %r2, 0x7fffffff + neg32 %r1 + neg32 %r2 + fail_ne32 %r1, 1 + fail_ne %r2, 0x80000001 ; Note: check for (bad) sign-extend + neg32 %r2 + fail_ne32 %r2, 0x7fffffff + + pass diff -Nru gdb-9.1/sim/testsuite/sim/bpf/alu.s gdb-10.2/sim/testsuite/sim/bpf/alu.s --- gdb-9.1/sim/testsuite/sim/bpf/alu.s 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/sim/testsuite/sim/bpf/alu.s 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,121 @@ +# mach: bpf +# output: pass\nexit 0 (0x0)\n +;;; alu.s +;;; Tests for ALU64 BPF instructions in simulator + + .include "testutils.inc" + + .text + .global main + .type main, @function +main: + mov %r1, 0 + mov %r2, -1 + + ;; add + add %r1, 1 + add %r2, -1 + add %r1, %r2 + fail_ne %r1, -1 + + ;; sub + sub %r1, %r1 + fail_ne %r1, 0 + sub %r1, 10 + sub %r2, %r1 + fail_ne %r2, 8 + + ;; mul + mul %r2, %r2 ; r2 = 64 + mul %r2, 3 ; r2 = 192 + mov %r1, -3 + mul %r1, %r2 ; r1 = -576 + mul %r2, 0 + fail_ne %r1, -576 + fail_ne %r2, 0 + mul %r1, %r1 + mul %r1, %r1 + fail_ne %r1, 110075314176 + + ;; div + div %r2, %r1 + fail_ne %r2, 0 + div %r1, 10000 + fail_ne %r1, 11007531 + div %r1, %r1 + fail_ne %r1, 1 + + ;; div is unsigned + lddw %r1, -8 + div %r1, 2 + fail_ne %r1, 0x7ffffffffffffffc ; sign bits NOT maintained - large pos. + + ;; and + lddw %r1, 0xaaaaaaaa55555555 + and %r1, 0x55aaaaaa ; we still only have 32-bit imm. + fail_ne %r1, 0x0000000055000000 + lddw %r2, 0x5555555a5aaaaaaa + and %r2, %r1 + fail_ne %r2, 0x0000000050000000 + + ;; or + or %r2, 0xdeadbeef + fail_ne %r2, 0xffffffffdeadbeef ; 0xdeadbeef gets sign extended + lddw %r1, 0xdead00000000beef + lddw %r2, 0x0000123456780000 + or %r1, %r2 + fail_ne %r1, 0xdead12345678beef + + ;; lsh + mov %r1, 0xdeadbeef + lsh %r1, 11 + fail_ne %r1, 0xfffffef56df77800 ; because deadbeef gets sign ext. + mov %r2, 21 + lsh %r1, %r2 + fail_ne %r1, 0xdeadbeef00000000 + + ;; rsh + rsh %r1, 11 + fail_ne %r1, 0x001bd5b7dde00000 ; 0xdeadbeef 00000000 >> 0xb + rsh %r1, %r2 + fail_ne %r1, 0x00000000deadbeef + + ;; arsh + arsh %r1, 8 + fail_ne %r1, 0x0000000000deadbe + lsh %r1, 40 ; r1 = 0xdead be00 0000 0000 + arsh %r1, %r2 ; r1 arsh (r2 == 21) + fail_ne %r1, 0xfffffef56df00000 + + ;; mod + mov %r1, 1025 + mod %r1, 16 + fail_ne %r1, 1 + + ;; mod is unsigned + mov %r1, 1025 + mod %r1, -16 ; mod unsigned -> will treat as large positive + fail_ne %r1, 1025 + + mov %r1, -25 ; -25 is 0xff..ffe7 + mov %r2, 5 ; ... which when unsigned is a large positive + mod %r1, %r2 ; ... which is not evenly divisible by 5 + fail_ne %r1, 1 + + ;; xor + mov %r1, 0 + xor %r1, %r2 + fail_ne %r1, 5 + xor %r1, 0x7eadbeef + fail_ne %r1, 0x7eadbeea + xor %r1, %r1 + fail_ne %r1, 0 + + ;; neg + neg %r2 + fail_ne %r2, -5 + mov %r1, -1025 + neg %r1 + fail_ne %r1, 1025 + + pass diff -Nru gdb-9.1/sim/testsuite/sim/bpf/endbe.s gdb-10.2/sim/testsuite/sim/bpf/endbe.s --- gdb-9.1/sim/testsuite/sim/bpf/endbe.s 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/sim/testsuite/sim/bpf/endbe.s 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,46 @@ +# mach: bpf +# as: --EB +# ld: --EB +# sim: -E big +# output: pass\nexit 0 (0x0)\n +;;; endbe.s +;;; Tests for BPF endianness-conversion instructions in simulator +;;; running in BIG ENDIAN +;;; +;;; Both 'be' and 'le' ISAs have both endbe and endle instructions. + + .include "testutils.inc" + + .text + .global main + .type main, @function +main: + lddw %r1, 0x12345678deadbeef + endle %r1, 64 + fail_ne %r1, 0xefbeadde78563412 + endle %r1, 64 + fail_ne %r1, 0x12345678deadbeef + + ;; `bitsize` < 64 will truncate + endle %r1, 32 + fail_ne %r1, 0xefbeadde + endle %r1, 32 + fail_ne %r1, 0xdeadbeef + + endle %r1, 16 + fail_ne %r1, 0xefbe + endle %r1, 16 + fail_ne %r1, 0xbeef + + ;; endbe on be should be noop (except truncate) + lddw %r1, 0x12345678deadbeef + endbe %r1, 64 + fail_ne %r1, 0x12345678deadbeef + + endbe %r1, 32 + fail_ne %r1, 0xdeadbeef + + endbe %r1, 16 + fail_ne %r1, 0xbeef + + pass diff -Nru gdb-9.1/sim/testsuite/sim/bpf/endle.s gdb-10.2/sim/testsuite/sim/bpf/endle.s --- gdb-9.1/sim/testsuite/sim/bpf/endle.s 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/sim/testsuite/sim/bpf/endle.s 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,43 @@ +# mach: bpf +# output: pass\nexit 0 (0x0)\n +;;; endle.s +;;; Tests for BPF endianness-conversion instructions in simulator +;;; running in LITTLE ENDIAN +;;; +;;; Both 'be' and 'le' ISAs have both endbe and endle instructions. + + .include "testutils.inc" + + .text + .global main + .type main, @function +main: + lddw %r1, 0x12345678deadbeef + endbe %r1, 64 + fail_ne %r1, 0xefbeadde78563412 + endbe %r1, 64 + fail_ne %r1, 0x12345678deadbeef + + ;; `bitsize` < 64 will truncate + endbe %r1, 32 + fail_ne %r1, 0xefbeadde + endbe %r1, 32 + fail_ne %r1, 0xdeadbeef + + endbe %r1, 16 + fail_ne %r1, 0xefbe + endbe %r1, 16 + fail_ne %r1, 0xbeef + + ;; endle on le should be noop (except truncate) + lddw %r1, 0x12345678deadbeef + endle %r1, 64 + fail_ne %r1, 0x12345678deadbeef + + endle %r1, 32 + fail_ne %r1, 0xdeadbeef + + endle %r1, 16 + fail_ne %r1, 0xbeef + + pass diff -Nru gdb-9.1/sim/testsuite/sim/bpf/jmp32.s gdb-10.2/sim/testsuite/sim/bpf/jmp32.s --- gdb-9.1/sim/testsuite/sim/bpf/jmp32.s 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/sim/testsuite/sim/bpf/jmp32.s 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,120 @@ +# mach: bpf +# output: pass\nexit 0 (0x0)\n +;;; jmp32.s +;;; Tests for eBPF JMP32 instructions in simulator + + .include "testutils.inc" + + .text + .global main + .type main, @function +main: + mov32 %r1, 5 + mov32 %r2, 2 + mov32 %r3, 7 + mov32 %r4, -1 + + ;; ja - jump absolute (unconditional) + ja 2f +1: fail + +2: ;; jeq - jump eq + jeq32 %r1, 4, 1b ; no + jeq32 %r1, %r2, 1b ; no + jeq32 %r1, 5, 2f ; yes + fail +2: jeq32 %r1, %r1, 2f ; yes + fail + +2: ;; jgt - jump (unsigned) greater-than + jgt32 %r1, 6, 1b ; no + jgt32 %r1, -5, 1b ; no - unsigned + jgt32 %r1, %r4, 1b ; no - unsigned + jgt32 %r1, 4, 2f ; yes + fail +2: jgt32 %r1, %r2, 2f ; yes + fail + +2: ;; jge - jump (unsigned) greater-than-or-equal-to + jge32 %r1, 6, 1b ; no + jge32 %r1, 5, 2f ; yes + fail +2: jge32 %r1, %r3, 1b ; no + jge32 %r1, -5, 1b ; no - unsigned + jge32 %r1, %r2, 2f ; yes + fail + +2: ;; jlt - jump (unsigned) less-than + jlt32 %r1, 5, 1b ; no + jlt32 %r1, %r2, 1b ; no + jlt32 %r4, %r1, 1b ; no - unsigned + jlt32 %r1, 6, 2f ; yes + fail +2: + jlt32 %r1, %r3, 2f ; yes + fail + +2: ;; jle - jump (unsigned) less-than-or-equal-to + jle32 %r1, 4, 1b ; no + jle32 %r1, %r2, 1b ; no + jle32 %r4, %r1, 1b ; no + jle32 %r1, 5, 2f ; yes + fail +2: jle32 %r1, %r1, 2f ; yes + fail + +2: ;; jset - jump "test" (AND) + jset32 %r1, 2, 1b ; no (5 & 2 = 0) + jset32 %r1, %r2, 1b ; no (same) + jset32 %r1, 4, 2f ; yes (5 & 4 != 0) + fail + +2: ;; jne - jump not-equal-to + jne32 %r1, 5, 1b ; no + jne32 %r1, %r1, 1b ; no + jne32 %r1, 6, 2f ; yes + fail +2: jne32 %r1, %r4, 2f ; yes + fail + +2: ;; jsgt - jump (signed) greater-than + jsgt32 %r1, %r3, 1b ; no + jsgt32 %r1, %r1, 1b ; no + jsgt32 %r1, 5, 1b ; no + jsgt32 %r1, -4, 2f ; yes + fail +2: jsgt32 %r1, %r4, 2f ; yes + fail + +2: ;; jsge - jump (signed) greater-than-or-equal-to + jsge32 %r1, %r3, 1b ; no + jsge32 %r1, %r1, 2f ; yes + fail +2: jsge32 %r1, 7, 1b ; no + jsge32 %r1, -4, 2f ; yes + fail +2: jsge32 %r1, %r4, 2f ; yes + fail + +2: ;; jslt - jump (signed) less-than + jslt32 %r1, 5, 1b ; no + jslt32 %r1, %r2, 1b ; no + jslt32 %r4, %r1, 2f ; yes + fail +2: jslt32 %r1, 6, 2f ; yes + fail +2: jslt32 %r1, %r3, 2f ; yes + fail + +2: ;; jsle - jump (signed) less-than-or-equal-to + jsle32 %r1, 4, 1b ; no + jsle32 %r1, %r2, 1b ; no + jsle32 %r4, %r1, 2f ; yes + fail +2: jsle32 %r1, 5, 2f ; yes + fail +2: jsle32 %r1, %r3, 2f ; yes + fail + +2: + pass diff -Nru gdb-9.1/sim/testsuite/sim/bpf/jmp.s gdb-10.2/sim/testsuite/sim/bpf/jmp.s --- gdb-9.1/sim/testsuite/sim/bpf/jmp.s 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/sim/testsuite/sim/bpf/jmp.s 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,120 @@ +# mach: bpf +# output: pass\nexit 0 (0x0)\n +;;; jmp.s +;;; Tests for eBPF JMP instructions in simulator + + .include "testutils.inc" + + .text + .global main + .type main, @function +main: + mov %r1, 5 + mov %r2, 2 + mov %r3, 7 + mov %r4, -1 + + ;; ja - jump absolute (unconditional) + ja 2f +1: fail + +2: ;; jeq - jump eq + jeq %r1, 4, 1b ; no + jeq %r1, %r2, 1b ; no + jeq %r1, 5, 2f ; yes + fail +2: jeq %r1, %r1, 2f ; yes + fail + +2: ;; jgt - jump (unsigned) greater-than + jgt %r1, 6, 1b ; no + jgt %r1, -5, 1b ; no - unsigned + jgt %r1, %r4, 1b ; no - unsigned + jgt %r1, 4, 2f ; yes + fail +2: jgt %r1, %r2, 2f ; yes + fail + +2: ;; jge - jump (unsigned) greater-than-or-equal-to + jge %r1, 6, 1b ; no + jge %r1, 5, 2f ; yes + fail +2: jge %r1, %r3, 1b ; no + jge %r1, -5, 1b ; no - unsigned + jge %r1, %r2, 2f ; yes + fail + +2: ;; jlt - jump (unsigned) less-than + jlt %r1, 5, 1b ; no + jlt %r1, %r2, 1b ; no + jlt %r4, %r1, 1b ; no - unsigned + jlt %r1, 6, 2f ; yes + fail +2: + jlt %r1, %r3, 2f ; yes + fail + +2: ;; jle - jump (unsigned) less-than-or-equal-to + jle %r1, 4, 1b ; no + jle %r1, %r2, 1b ; no + jle %r4, %r1, 1b ; no + jle %r1, 5, 2f ; yes + fail +2: jle %r1, %r1, 2f ; yes + fail + +2: ;; jset - jump "test" (AND) + jset %r1, 2, 1b ; no (5 & 2 = 0) + jset %r1, %r2, 1b ; no (same) + jset %r1, 4, 2f ; yes (5 & 4 != 0) + fail + +2: ;; jne - jump not-equal-to + jne %r1, 5, 1b ; no + jne %r1, %r1, 1b ; no + jne %r1, 6, 2f ; yes + fail +2: jne %r1, %r4, 2f ; yes + fail + +2: ;; jsgt - jump (signed) greater-than + jsgt %r1, %r3, 1b ; no + jsgt %r1, %r1, 1b ; no + jsgt %r1, 5, 1b ; no + jsgt %r1, -4, 2f ; yes + fail +2: jsgt %r1, %r4, 2f ; yes + fail + +2: ;; jsge - jump (signed) greater-than-or-equal-to + jsge %r1, %r3, 1b ; no + jsge %r1, %r1, 2f ; yes + fail +2: jsge %r1, 7, 1b ; no + jsge %r1, -4, 2f ; yes + fail +2: jsge %r1, %r4, 2f ; yes + fail + +2: ;; jslt - jump (signed) less-than + jslt %r1, 5, 1b ; no + jslt %r1, %r2, 1b ; no + jslt %r4, %r1, 2f ; yes + fail +2: jslt %r1, 6, 2f ; yes + fail +2: jslt %r1, %r3, 2f ; yes + fail + +2: ;; jsle - jump (signed) less-than-or-equal-to + jsle %r1, 4, 1b ; no + jsle %r1, %r2, 1b ; no + jsle %r4, %r1, 2f ; yes + fail +2: jsle %r1, 5, 2f ; yes + fail +2: jsle %r1, %r3, 2f ; yes + fail + +2: + pass diff -Nru gdb-9.1/sim/testsuite/sim/bpf/ldabs.s gdb-10.2/sim/testsuite/sim/bpf/ldabs.s --- gdb-9.1/sim/testsuite/sim/bpf/ldabs.s 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/sim/testsuite/sim/bpf/ldabs.s 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,87 @@ +# mach: bpf +# sim: --skb-data-offset=0x20 +# output: pass\nexit 0 (0x0)\n +;;; ldabs.s +;;; Tests for non-generic BPF load instructions in simulator. +;;; These instructions (ld{abs,ind}{b,h,w,dw}) are used to access +;;; kernel socket data from BPF programs for high performance filters. +;;; +;;; Register r6 is an implicit input holding a pointer to a struct sk_buff. +;;; Register r0 is an implicit output, holding the fetched data. +;;; +;;; e.g. +;;; ldabsw means: +;;; r0 = ntohl (*(u32 *) (((struct sk_buff *)r6)->data + imm32)) +;;; +;;; ldindw means +;;; r0 = ntohl (*(u32 *) (((struct sk_buff *)r6)->data + src_reg + imm32)) + + .include "testutils.inc" + + .text + .global main + .type main, @function +main: + ;; R6 holds a pointer to a struct sk_buff, which we pretend + ;; exists at 0x1000 + mov %r6, 0x1000 + + ;; We configure skb-data-offset=0x20 + ;; This specifies offsetof(struct sk_buff, data), where the field 'data' + ;; is a pointer a data buffer, in this case at 0x2000 + stw [%r6+0x20], 0x2000 + + ;; Write the value 0x7eadbeef into memory at 0x2004 + ;; i.e. offset 4 within the data buffer pointed to by + ;; ((struct sk_buff *)r6)->data + stw [%r6+0x1004], 0xdeadbeef + + ;; Now load data[4] into r0 using the ldabsw instruction + ldabsw 0x4 + + ;; ...and compare to what we expect + fail_ne32 %r0, 0xdeadbeef + + ;; Repeat for a half-word (2-bytes) + sth [%r6+0x1008], 0x1234 + ldabsh 0x8 + fail_ne32 %r0, 0x1234 + + ;; Repeat for a single byte + stb [%r6+0x1010], 0x5a + ldabsb 0x10 + fail_ne32 %r0, 0x5a + + ;; Repeat for a double-word (8-byte) + ;; (note: fail_ne macro uses r0, so copy to another r1 to compare) + lddw %r2, 0x1234deadbeef5678 + stxdw [%r6+0x1018], %r2 + ldabsdw 0x18 + mov %r1, %r0 + fail_ne %r1, 0x1234deadbeef5678 + + ;; Now, we do the same for the indirect loads + mov %r7, 0x100 + stw [%r6+0x1100], 0xfeedbeef + + ldindw %r7, 0x0 + fail_ne32 %r0, 0xfeedbeef + + ;; half-word + sth [%r6+0x1104], 0x6789 + ldindh %r7, 0x4 + fail_ne32 %r0, 0x6789 + + ;; byte + stb [%r6+0x1108], 0x5f + ldindb %r7, 0x8 + fail_ne32 %r0, 0x5f + + ;; double-word + lddw %r2, 0xcafe12345678d00d + stxdw [%r6+0x1110], %r2 + ldinddw %r7, 0x10 + mov %r1, %r0 + fail_ne %r1, 0xcafe12345678d00d + + pass diff -Nru gdb-9.1/sim/testsuite/sim/bpf/mem.s gdb-10.2/sim/testsuite/sim/bpf/mem.s --- gdb-9.1/sim/testsuite/sim/bpf/mem.s 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/sim/testsuite/sim/bpf/mem.s 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,56 @@ +# mach: bpf +# output: pass\nexit 0 (0x0)\n +;;; mem.s +;;; Tests for BPF memory (ldx, stx, ..) instructions in simulator + + .include "testutils.inc" + + .text + .global main + .type main, @function +main: + lddw %r1, 0x1234deadbeef5678 + mov %r2, 0x1000 + + ;; basic store/load check + stxb [%r2+0], %r1 + stxh [%r2+2], %r1 + stxw [%r2+4], %r1 + stxdw [%r2+8], %r1 + + stb [%r2+16], 0x5a + sth [%r2+18], 0xcafe + stw [%r2+20], 0xbeefface + stdw [%r2+24], 0x7eadbeef + + ldxb %r1, [%r2+16] + fail_ne %r1, 0x5a + ldxh %r1, [%r2+18] + fail_ne %r1, 0xffffffffffffcafe + ldxw %r1, [%r2+20] + fail_ne %r1, 0xffffffffbeefface + ldxdw %r1, [%r2+24] + fail_ne %r1, 0x7eadbeef + + ldxb %r3, [%r2+0] + fail_ne %r3, 0x78 + ldxh %r3, [%r2+2] + fail_ne %r3, 0x5678 + ldxw %r3, [%r2+4] + fail_ne %r3, 0xffffffffbeef5678 + ldxdw %r3, [%r2+8] + fail_ne %r3, 0x1234deadbeef5678 + + ldxw %r4, [%r2+10] + fail_ne %r4, 0xffffffffdeadbeef + + ;; negative offsets + add %r2, 16 + ldxh %r5, [%r2+-14] + fail_ne %r5, 0x5678 + ldxw %r5, [%r2+-12] + fail_ne %r5, 0xffffffffbeef5678 + ldxdw %r5, [%r2+-8] + fail_ne %r5, 0x1234deadbeef5678 + + pass diff -Nru gdb-9.1/sim/testsuite/sim/bpf/mov.s gdb-10.2/sim/testsuite/sim/bpf/mov.s --- gdb-9.1/sim/testsuite/sim/bpf/mov.s 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/sim/testsuite/sim/bpf/mov.s 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,54 @@ +# mach: bpf +# output: pass\nexit 0 (0x0)\n +;; mov.s +;; Tests for mov and mov32 instructions + + .include "testutils.inc" + + .text + .global main + .type main, @function +main: + ;; some basic sanity checks + mov32 %r1, 5 + fail_ne %r1, 5 + + mov32 %r2, %r1 + fail_ne %r2, 5 + + mov %r2, %r1 + fail_ne %r2, 5 + + mov %r1, -666 + fail_ne %r1, -666 + + ;; should NOT sign extend + mov32 %r1, -1 + fail_ne %r1, 0x00000000ffffffff + + ;; should sign extend + mov %r2, -1 + fail_ne %r2, 0xffffffffffffffff + + mov %r3, 0x80000000 + + ;; should NOT sign extend + mov32 %r4, %r3 + fail_ne %r4, 0x0000000080000000 + + ;; should sign extend + mov %r5, %r3 + fail_ne %r5, 0xffffffff80000000 + + mov32 %r1, -2147483648 + mov32 %r1, %r1 + fail_ne32 %r1, -2147483648 + + ;; casting shenanigans + mov %r1, %r1 + fail_ne %r1, +2147483648 + mov32 %r2, -1 + mov %r2, %r2 + fail_ne %r2, +4294967295 + + pass diff -Nru gdb-9.1/sim/testsuite/sim/bpf/testutils.inc gdb-10.2/sim/testsuite/sim/bpf/testutils.inc --- gdb-9.1/sim/testsuite/sim/bpf/testutils.inc 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/sim/testsuite/sim/bpf/testutils.inc 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,38 @@ + + ;; Print "pass\n" and 'exit 0' + .macro pass + .data +mpass: + .string "pass\n" + .text +_pass: + mov %r1, mpass ; point to "pass\n" string + mov %r2, 5 ; strlen mpass + call 7 ; printk + mov %r0, 0 ; + exit ; exit 0 + .endm + +;;; MACRO fail +;;; Exit with status 1 + .macro fail + mov %r0, 1 + exit + .endm + +;;; MACRO fail_ne32 +;;; Exit with status 1 if \reg32 != \val + .macro fail_ne32 reg val + jeq32 \reg, \val, 2 + mov %r0, 1 + exit + .endm + +;;; MACRO fail_ne +;;; Exit with status1 if \reg ne \val + .macro fail_ne reg val + lddw %r0, \val + jeq \reg, %r0, 2 + mov %r0, 1 + exit + .endm diff -Nru gdb-9.1/sim/testsuite/sim/bpf/xadd.s gdb-10.2/sim/testsuite/sim/bpf/xadd.s --- gdb-9.1/sim/testsuite/sim/bpf/xadd.s 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/sim/testsuite/sim/bpf/xadd.s 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,44 @@ +# mach: bpf +# output: pass\nexit 0 (0x0)\n +;;; xadd.s +;;; Tests for BPF atomic exchange-and-add instructions in simulator +;;; +;;; The xadd instructions (XADDW, XADDDW) operate on a memory location +;;; specified in $dst + offset16, atomically adding the value in $src. +;;; +;;; In the simulator, there isn't anything else happening. The atomic +;;; instructions are identical to a non-atomic load/add/store. + + .include "testutils.inc" + + .text + .global main + .type main, @function +main: + mov %r1, 0x1000 + mov %r2, 5 + + ;; basic xadd w + stw [%r1+0], 10 + xaddw [%r1+0], %r2 + ldxw %r3, [%r1+0] + fail_ne %r3, 15 + + ;; basic xadd dw + stdw [%r1+8], 42 + xadddw [%r1+8], %r2 + ldxdw %r3, [%r1+8] + fail_ne %r3, 47 + + ;; xadd w negative value + mov %r4, -1 + xaddw [%r1+0], %r4 + ldxw %r3, [%r1+0] + fail_ne %r3, 14 + + ;; xadd dw negative val + xadddw [%r1+8], %r4 + ldxdw %r3, [%r1+8] + fail_ne %r3, 46 + + pass diff -Nru gdb-9.1/sim/testsuite/sim/cris/asm/asm.exp gdb-10.2/sim/testsuite/sim/cris/asm/asm.exp --- gdb-9.1/sim/testsuite/sim/cris/asm/asm.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/testsuite/sim/cris/asm/asm.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2005-2020 Free Software Foundation, Inc. +# Copyright (C) 2005-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/sim/testsuite/sim/cris/c/c.exp gdb-10.2/sim/testsuite/sim/cris/c/c.exp --- gdb-9.1/sim/testsuite/sim/cris/c/c.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/testsuite/sim/cris/c/c.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2005-2020 Free Software Foundation, Inc. +# Copyright (C) 2005-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/sim/testsuite/sim/cris/hw/rv-n-cris/rvc.exp gdb-10.2/sim/testsuite/sim/cris/hw/rv-n-cris/rvc.exp --- gdb-9.1/sim/testsuite/sim/cris/hw/rv-n-cris/rvc.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/testsuite/sim/cris/hw/rv-n-cris/rvc.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2006-2020 Free Software Foundation, Inc. +# Copyright (C) 2006-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/sim/testsuite/sim/m32c/blinky.s gdb-10.2/sim/testsuite/sim/m32c/blinky.s --- gdb-9.1/sim/testsuite/sim/m32c/blinky.s 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/testsuite/sim/m32c/blinky.s 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ ;;; blinky.s --- sample program to blink LED's on M32C simulator ;;; -;;; Copyright (C) 2005-2020 Free Software Foundation, Inc. +;;; Copyright (C) 2005-2021 Free Software Foundation, Inc. ;;; Contributed by Red Hat, Inc. ;;; ;;; This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/testsuite/sim/m32c/gloss.s gdb-10.2/sim/testsuite/sim/m32c/gloss.s --- gdb-9.1/sim/testsuite/sim/m32c/gloss.s 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/testsuite/sim/m32c/gloss.s 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ ;;; gloss.s --- system calls for sample2.x ;;; -;;; Copyright (C) 2005-2020 Free Software Foundation, Inc. +;;; Copyright (C) 2005-2021 Free Software Foundation, Inc. ;;; Contributed by Red Hat, Inc. ;;; ;;; This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/testsuite/sim/m32c/sample2.c gdb-10.2/sim/testsuite/sim/m32c/sample2.c --- gdb-9.1/sim/testsuite/sim/m32c/sample2.c 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/testsuite/sim/m32c/sample2.c 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* sample2.c --- main source for sample2.x test program for M32C simulator -Copyright (C) 2005-2020 Free Software Foundation, Inc. +Copyright (C) 2005-2021 Free Software Foundation, Inc. Contributed by Red Hat, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/testsuite/sim/m32c/sample.ld gdb-10.2/sim/testsuite/sim/m32c/sample.ld --- gdb-9.1/sim/testsuite/sim/m32c/sample.ld 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/testsuite/sim/m32c/sample.ld 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* sample2.ld --- linker script for sample2.x -Copyright (C) 2005-2020 Free Software Foundation, Inc. +Copyright (C) 2005-2021 Free Software Foundation, Inc. Contributed by Red Hat, Inc. This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/testsuite/sim/m32c/sample.s gdb-10.2/sim/testsuite/sim/m32c/sample.s --- gdb-9.1/sim/testsuite/sim/m32c/sample.s 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/testsuite/sim/m32c/sample.s 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ ;;; sample.s --- simple test program for M32C simulator ;;; -;;; Copyright (C) 2005-2020 Free Software Foundation, Inc. +;;; Copyright (C) 2005-2021 Free Software Foundation, Inc. ;;; Contributed by Red Hat, Inc. ;;; ;;; This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/testsuite/sim/mips/hilo-hazard-4.s gdb-10.2/sim/testsuite/sim/mips/hilo-hazard-4.s --- gdb-9.1/sim/testsuite/sim/mips/hilo-hazard-4.s 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/testsuite/sim/mips/hilo-hazard-4.s 2021-04-25 04:06:26.000000000 +0000 @@ -5,7 +5,7 @@ # ld: -N -Ttext=0x80010000 # output: pass\\n -# Copyright (C) 2013-2020 Free Software Foundation, Inc. +# Copyright (C) 2013-2021 Free Software Foundation, Inc. # Contributed by Andrew Bennett (andrew.bennett@imgtec.com) # # This file is part of the MIPS sim. diff -Nru gdb-9.1/sim/testsuite/sim/mips/mips32-dsp.s gdb-10.2/sim/testsuite/sim/mips/mips32-dsp.s --- gdb-9.1/sim/testsuite/sim/mips/mips32-dsp.s 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/testsuite/sim/mips/mips32-dsp.s 2021-04-25 04:06:26.000000000 +0000 @@ -4,7 +4,7 @@ #ld: -N -Ttext=0x80010000 #output: *\\npass\\n -# Copyright (C) 2005-2020 Free Software Foundation, Inc. +# Copyright (C) 2005-2021 Free Software Foundation, Inc. # Contributed by MIPS Technologies, Inc. Written by Chao-ying Fu. # # This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/testsuite/sim/mips/testutils.inc gdb-10.2/sim/testsuite/sim/mips/testutils.inc --- gdb-9.1/sim/testsuite/sim/mips/testutils.inc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/testsuite/sim/mips/testutils.inc 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ # MIPS simulator testsuite utility functions. -# Copyright (C) 2004-2020 Free Software Foundation, Inc. +# Copyright (C) 2004-2021 Free Software Foundation, Inc. # Contributed by Chris Demetriou of Broadcom Corporation. # # This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/testsuite/sim/mips/utils-dsp.inc gdb-10.2/sim/testsuite/sim/mips/utils-dsp.inc --- gdb-9.1/sim/testsuite/sim/mips/utils-dsp.inc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/testsuite/sim/mips/utils-dsp.inc 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ # MIPS DSP ASE simulator testsuite utility functions. -# Copyright (C) 2005-2020 Free Software Foundation, Inc. +# Copyright (C) 2005-2021 Free Software Foundation, Inc. # Contributed by MIPS Technologies, Inc. Written by Chao-ying Fu. # # This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/testsuite/sim/mips/utils-fpu.inc gdb-10.2/sim/testsuite/sim/mips/utils-fpu.inc --- gdb-9.1/sim/testsuite/sim/mips/utils-fpu.inc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/testsuite/sim/mips/utils-fpu.inc 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ # MIPS simulator testsuite FPU utility functions. -# Copyright (C) 2004-2020 Free Software Foundation, Inc. +# Copyright (C) 2004-2021 Free Software Foundation, Inc. # Contributed by Chris Demetriou of Broadcom Corporation. # # This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/testsuite/sim/mips/utils-mdmx.inc gdb-10.2/sim/testsuite/sim/mips/utils-mdmx.inc --- gdb-9.1/sim/testsuite/sim/mips/utils-mdmx.inc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/testsuite/sim/mips/utils-mdmx.inc 2021-04-25 04:06:26.000000000 +0000 @@ -1,5 +1,5 @@ # MIPS simulator testsuite MDMX utility functions. -# Copyright (C) 2004-2020 Free Software Foundation, Inc. +# Copyright (C) 2004-2021 Free Software Foundation, Inc. # Contributed by Chris Demetriou of Broadcom Corporation. # # This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/testsuite/sim/msp430/ChangeLog gdb-10.2/sim/testsuite/sim/msp430/ChangeLog --- gdb-9.1/sim/testsuite/sim/msp430/ChangeLog 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/sim/testsuite/sim/msp430/ChangeLog 2021-04-25 04:06:26.000000000 +0000 @@ -1,3 +1,11 @@ +2020-08-05 Jozef Lawrynowicz <jozef.l@mittosystems.com> + + * mpyull_hwmult.s: New test. + +2020-01-22 Jozef Lawrynowicz <jozef.l@mittosystems.com> + + * rrux.s: New test. + 2016-01-05 Nick Clifton <nickc@redhat.com> * testutils.inc (__pass): Use the LMA addresses of the _passmsg diff -Nru gdb-9.1/sim/testsuite/sim/msp430/mpyull_hwmult.s gdb-10.2/sim/testsuite/sim/msp430/mpyull_hwmult.s --- gdb-9.1/sim/testsuite/sim/msp430/mpyull_hwmult.s 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/sim/testsuite/sim/msp430/mpyull_hwmult.s 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,55 @@ +# Test that unsigned widening multiplication of 32-bit operands to produce a +# 64-bit result is simulated correctly, when using 32-bit or F5series hardware +# multiply functionality. +# 0xffff fffc * 0x2 = 0x1 ffff fff8 +# mach: msp430 + +# 32-bit hwmult register addresses +.set MPY32L, 0x0140 +.set MPY32H, 0x0142 +.set OP2L, 0x0150 +.set OP2H, 0x0152 +.set RES0, 0x0154 +.set RES1, 0x0156 +.set RES2, 0x0158 +.set RES3, 0x015A + +# F5series hwmult register addresses +.set MPY32L_F5, 0x04D0 +.set MPY32H_F5, 0x04D2 +.set OP2L_F5, 0x04E0 +.set OP2H_F5, 0x04E2 +.set RES0_F5, 0x04E4 +.set RES1_F5, 0x04E6 +.set RES2_F5, 0x04E8 +.set RES3_F5, 0x04EA + +.include "testutils.inc" + + start + + ; Test 32bit hwmult + MOV.W #2, &MPY32L ; Load operand 1 Low into multiplier + MOV.W #0, &MPY32H ; Load operand 1 High into multiplier + MOV.W #-4, &OP2L ; Load operand 2 Low into multiplier + MOV.W #-1, &OP2H ; Load operand 2 High, trigger MPY + + CMP.W #-8, &RES0 { JNE .L5 + CMP.W #-1, &RES1 { JNE .L5 + CMP.W #1, &RES2 { JNE .L5 + CMP.W #0, &RES3 { JNE .L5 + + ; Test f5series hwmult + MOV.W #2, &MPY32L_F5 + MOV.W #0, &MPY32H_F5 + MOV.W #-4, &OP2L_F5 + MOV.W #-1, &OP2H_F5 + + CMP.W #-8, &RES0_F5 { JNE .L5 + CMP.W #-1, &RES1_F5 { JNE .L5 + CMP.W #1, &RES2_F5 { JNE .L5 + CMP.W #0, &RES3_F5 { JEQ .L6 +.L5: + fail +.L6: + pass diff -Nru gdb-9.1/sim/testsuite/sim/msp430/rrux.s gdb-10.2/sim/testsuite/sim/msp430/rrux.s --- gdb-9.1/sim/testsuite/sim/msp430/rrux.s 1970-01-01 00:00:00.000000000 +0000 +++ gdb-10.2/sim/testsuite/sim/msp430/rrux.s 2021-04-25 04:06:26.000000000 +0000 @@ -0,0 +1,14 @@ +# check that rrux (synthesized as rrc with ZC bit set) works. +# mach: msp430 + +.include "testutils.inc" + + start + + setc ; set the carry bit to ensure ZC bit is obeyed + mov.w #16, r10 + rrux.w r10 + cmp.w #8, r10 + jeq 1f + fail + 1: pass diff -Nru gdb-9.1/sim/testsuite/sim/or1k/add.S gdb-10.2/sim/testsuite/sim/or1k/add.S --- gdb-9.1/sim/testsuite/sim/or1k/add.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/testsuite/sim/or1k/add.S 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Tests instructions l.add, l.addc, l.addi and l.addic. - Copyright (C) 2017-2020 Free Software Foundation, Inc. + Copyright (C) 2017-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/sim/testsuite/sim/or1k/adrp.S gdb-10.2/sim/testsuite/sim/or1k/adrp.S --- gdb-9.1/sim/testsuite/sim/or1k/adrp.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/testsuite/sim/or1k/adrp.S 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Tests the load page address instruction. - Copyright (C) 2019-2020 Free Software Foundation, Inc. + Copyright (C) 2019-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/sim/testsuite/sim/or1k/alltests.exp gdb-10.2/sim/testsuite/sim/or1k/alltests.exp --- gdb-9.1/sim/testsuite/sim/or1k/alltests.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/testsuite/sim/or1k/alltests.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ # OR1K simulator testsuite. # -# Copyright 2017-2020 Free Software Foundation, Inc. +# Copyright 2017-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/sim/testsuite/sim/or1k/and.S gdb-10.2/sim/testsuite/sim/or1k/and.S --- gdb-9.1/sim/testsuite/sim/or1k/and.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/testsuite/sim/or1k/and.S 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Tests instructions l.and, l.andi. - Copyright (C) 2017-2020 Free Software Foundation, Inc. + Copyright (C) 2017-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/sim/testsuite/sim/or1k/basic.S gdb-10.2/sim/testsuite/sim/or1k/basic.S --- gdb-9.1/sim/testsuite/sim/or1k/basic.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/testsuite/sim/or1k/basic.S 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Tests some basic CPU instructions. - Copyright (C) 2017-2020 Free Software Foundation, Inc. + Copyright (C) 2017-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/sim/testsuite/sim/or1k/div.S gdb-10.2/sim/testsuite/sim/or1k/div.S --- gdb-9.1/sim/testsuite/sim/or1k/div.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/testsuite/sim/or1k/div.S 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Tests the divide instructions. - Copyright (C) 2017-2020 Free Software Foundation, Inc. + Copyright (C) 2017-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/sim/testsuite/sim/or1k/ext.S gdb-10.2/sim/testsuite/sim/or1k/ext.S --- gdb-9.1/sim/testsuite/sim/or1k/ext.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/testsuite/sim/or1k/ext.S 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Tests the l.ext{b,h}{s,z} instructions. - Copyright (C) 2017-2020 Free Software Foundation, Inc. + Copyright (C) 2017-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/sim/testsuite/sim/or1k/find.S gdb-10.2/sim/testsuite/sim/or1k/find.S --- gdb-9.1/sim/testsuite/sim/or1k/find.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/testsuite/sim/or1k/find.S 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Tests the find instructions. - Copyright (C) 2017-2020 Free Software Foundation, Inc. + Copyright (C) 2017-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/sim/testsuite/sim/or1k/flag.S gdb-10.2/sim/testsuite/sim/or1k/flag.S --- gdb-9.1/sim/testsuite/sim/or1k/flag.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/testsuite/sim/or1k/flag.S 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Tests the set flag (l.sf*) instructions. - Copyright (C) 2017-2020 Free Software Foundation, Inc. + Copyright (C) 2017-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/sim/testsuite/sim/or1k/fpu64a32.S gdb-10.2/sim/testsuite/sim/or1k/fpu64a32.S --- gdb-9.1/sim/testsuite/sim/or1k/fpu64a32.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/testsuite/sim/or1k/fpu64a32.S 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Tests some basic fpu instructions. - Copyright (C) 2019-2020 Free Software Foundation, Inc. + Copyright (C) 2019-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/sim/testsuite/sim/or1k/fpu64a32-unordered.S gdb-10.2/sim/testsuite/sim/or1k/fpu64a32-unordered.S --- gdb-9.1/sim/testsuite/sim/or1k/fpu64a32-unordered.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/testsuite/sim/or1k/fpu64a32-unordered.S 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Tests some basic unordered fpu compare instructions. - Copyright (C) 2019-2020 Free Software Foundation, Inc. + Copyright (C) 2019-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/sim/testsuite/sim/or1k/fpu.S gdb-10.2/sim/testsuite/sim/or1k/fpu.S --- gdb-9.1/sim/testsuite/sim/or1k/fpu.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/testsuite/sim/or1k/fpu.S 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Tests some basic fpu instructions. - Copyright (C) 2017-2020 Free Software Foundation, Inc. + Copyright (C) 2017-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/sim/testsuite/sim/or1k/fpu-unordered.S gdb-10.2/sim/testsuite/sim/or1k/fpu-unordered.S --- gdb-9.1/sim/testsuite/sim/or1k/fpu-unordered.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/testsuite/sim/or1k/fpu-unordered.S 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Tests some basic unordered fpu compare instructions. - Copyright (C) 2019-2020 Free Software Foundation, Inc. + Copyright (C) 2019-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/sim/testsuite/sim/or1k/jump.S gdb-10.2/sim/testsuite/sim/or1k/jump.S --- gdb-9.1/sim/testsuite/sim/or1k/jump.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/testsuite/sim/or1k/jump.S 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Tests the jump instructions. - Copyright (C) 2017-2020 Free Software Foundation, Inc. + Copyright (C) 2017-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/sim/testsuite/sim/or1k/load.S gdb-10.2/sim/testsuite/sim/or1k/load.S --- gdb-9.1/sim/testsuite/sim/or1k/load.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/testsuite/sim/or1k/load.S 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Tests the load and store instructions. - Copyright (C) 2017-2020 Free Software Foundation, Inc. + Copyright (C) 2017-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/sim/testsuite/sim/or1k/mac.S gdb-10.2/sim/testsuite/sim/or1k/mac.S --- gdb-9.1/sim/testsuite/sim/or1k/mac.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/testsuite/sim/or1k/mac.S 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Tests the MAC instructions. - Copyright (C) 2017-2020 Free Software Foundation, Inc. + Copyright (C) 2017-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/sim/testsuite/sim/or1k/mfspr.S gdb-10.2/sim/testsuite/sim/or1k/mfspr.S --- gdb-9.1/sim/testsuite/sim/or1k/mfspr.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/testsuite/sim/or1k/mfspr.S 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Tests instructions l.mfspr and l.mtspr. - Copyright (C) 2017-2020 Free Software Foundation, Inc. + Copyright (C) 2017-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/sim/testsuite/sim/or1k/mul.S gdb-10.2/sim/testsuite/sim/or1k/mul.S --- gdb-9.1/sim/testsuite/sim/or1k/mul.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/testsuite/sim/or1k/mul.S 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Tests the multiply instructions. - Copyright (C) 2017-2020 Free Software Foundation, Inc. + Copyright (C) 2017-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/sim/testsuite/sim/or1k/or1k-asm.h gdb-10.2/sim/testsuite/sim/or1k/or1k-asm.h --- gdb-9.1/sim/testsuite/sim/or1k/or1k-asm.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/testsuite/sim/or1k/or1k-asm.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Testsuite assembly helpers for OpenRISC. - Copyright (C) 2017-2020 Free Software Foundation, Inc. + Copyright (C) 2017-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/sim/testsuite/sim/or1k/or1k-asm-test-env.h gdb-10.2/sim/testsuite/sim/or1k/or1k-asm-test-env.h --- gdb-9.1/sim/testsuite/sim/or1k/or1k-asm-test-env.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/testsuite/sim/or1k/or1k-asm-test-env.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Testsuite macros for OpenRISC. - Copyright (C) 2017-2020 Free Software Foundation, Inc. + Copyright (C) 2017-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/sim/testsuite/sim/or1k/or1k-asm-test.h gdb-10.2/sim/testsuite/sim/or1k/or1k-asm-test.h --- gdb-9.1/sim/testsuite/sim/or1k/or1k-asm-test.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/testsuite/sim/or1k/or1k-asm-test.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Testsuite architecture macros for OpenRISC. - Copyright (C) 2017-2020 Free Software Foundation, Inc. + Copyright (C) 2017-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/sim/testsuite/sim/or1k/or1k-asm-test-helpers.h gdb-10.2/sim/testsuite/sim/or1k/or1k-asm-test-helpers.h --- gdb-9.1/sim/testsuite/sim/or1k/or1k-asm-test-helpers.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/testsuite/sim/or1k/or1k-asm-test-helpers.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Testsuite helpers for OpenRISC. - Copyright (C) 2017-2020 Free Software Foundation, Inc. + Copyright (C) 2017-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/sim/testsuite/sim/or1k/or1k-test.ld gdb-10.2/sim/testsuite/sim/or1k/or1k-test.ld --- gdb-9.1/sim/testsuite/sim/or1k/or1k-test.ld 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/testsuite/sim/or1k/or1k-test.ld 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Test linker script for OpenRISC. - Copyright (C) 2017-2020 Free Software Foundation, Inc. + Copyright (C) 2017-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/sim/testsuite/sim/or1k/or.S gdb-10.2/sim/testsuite/sim/or1k/or.S --- gdb-9.1/sim/testsuite/sim/or1k/or.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/testsuite/sim/or1k/or.S 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Tests instructions l.or, l.ori. - Copyright (C) 2017-2020 Free Software Foundation, Inc. + Copyright (C) 2017-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/sim/testsuite/sim/or1k/ror.S gdb-10.2/sim/testsuite/sim/or1k/ror.S --- gdb-9.1/sim/testsuite/sim/or1k/ror.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/testsuite/sim/or1k/ror.S 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Tests instructions l.ror and l.rori. - Copyright (C) 2017-2020 Free Software Foundation, Inc. + Copyright (C) 2017-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/sim/testsuite/sim/or1k/shift.S gdb-10.2/sim/testsuite/sim/or1k/shift.S --- gdb-9.1/sim/testsuite/sim/or1k/shift.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/testsuite/sim/or1k/shift.S 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Tests the shift instructions. - Copyright (C) 2017-2020 Free Software Foundation, Inc. + Copyright (C) 2017-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/sim/testsuite/sim/or1k/spr-defs.h gdb-10.2/sim/testsuite/sim/or1k/spr-defs.h --- gdb-9.1/sim/testsuite/sim/or1k/spr-defs.h 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/testsuite/sim/or1k/spr-defs.h 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Special Purpose Registers definitions - Copyright (C) 2017-2020 Free Software Foundation, Inc. + Copyright (C) 2017-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/sim/testsuite/sim/or1k/sub.S gdb-10.2/sim/testsuite/sim/or1k/sub.S --- gdb-9.1/sim/testsuite/sim/or1k/sub.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/testsuite/sim/or1k/sub.S 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Tests instruction l.sub. - Copyright (C) 2017-2020 Free Software Foundation, Inc. + Copyright (C) 2017-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/sim/testsuite/sim/or1k/xor.S gdb-10.2/sim/testsuite/sim/or1k/xor.S --- gdb-9.1/sim/testsuite/sim/or1k/xor.S 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/testsuite/sim/or1k/xor.S 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ /* Tests instructions l.xor, l.xori. - Copyright (C) 2017-2020 Free Software Foundation, Inc. + Copyright (C) 2017-2021 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru gdb-9.1/sim/testsuite/sim/pru/add.s gdb-10.2/sim/testsuite/sim/pru/add.s --- gdb-9.1/sim/testsuite/sim/pru/add.s 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/testsuite/sim/pru/add.s 2021-04-25 04:06:26.000000000 +0000 @@ -1,7 +1,7 @@ # Check that basic add insn works. # mach: pru -# Copyright (C) 2016-2020 Free Software Foundation, Inc. +# Copyright (C) 2016-2021 Free Software Foundation, Inc. # Contributed by Dimitar Dimitrov <dimitar@dinux.eu> # # This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/testsuite/sim/pru/allinsn.exp gdb-10.2/sim/testsuite/sim/pru/allinsn.exp --- gdb-9.1/sim/testsuite/sim/pru/allinsn.exp 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/testsuite/sim/pru/allinsn.exp 2021-04-25 04:06:26.000000000 +0000 @@ -1,6 +1,6 @@ # PRU simulator testsuite. -# Copyright (C) 2016-2020 Free Software Foundation, Inc. +# Copyright (C) 2016-2021 Free Software Foundation, Inc. # Contributed by Dimitar Dimitrov <dimitar@dinux.eu> # # This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/testsuite/sim/pru/dmem-zero-pass.s gdb-10.2/sim/testsuite/sim/pru/dmem-zero-pass.s --- gdb-9.1/sim/testsuite/sim/pru/dmem-zero-pass.s 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/testsuite/sim/pru/dmem-zero-pass.s 2021-04-25 04:06:26.000000000 +0000 @@ -1,7 +1,7 @@ # Check that DMEM zero address access works by default. # mach: pru -# Copyright (C) 2016-2020 Free Software Foundation, Inc. +# Copyright (C) 2016-2021 Free Software Foundation, Inc. # Contributed by Dimitar Dimitrov <dimitar@dinux.eu> # # This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/testsuite/sim/pru/dmem-zero-trap.s gdb-10.2/sim/testsuite/sim/pru/dmem-zero-trap.s --- gdb-9.1/sim/testsuite/sim/pru/dmem-zero-trap.s 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/testsuite/sim/pru/dmem-zero-trap.s 2021-04-25 04:06:26.000000000 +0000 @@ -4,7 +4,7 @@ # xerror: # output: core: 4 byte read to unmapped address 0x0 at *\n -# Copyright (C) 2016-2020 Free Software Foundation, Inc. +# Copyright (C) 2016-2021 Free Software Foundation, Inc. # Contributed by Dimitar Dimitrov <dimitar@dinux.eu> # # This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/testsuite/sim/pru/dram.s gdb-10.2/sim/testsuite/sim/pru/dram.s --- gdb-9.1/sim/testsuite/sim/pru/dram.s 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/testsuite/sim/pru/dram.s 2021-04-25 04:06:26.000000000 +0000 @@ -1,7 +1,7 @@ # Check that DRAM memory access works. # mach: pru -# Copyright (C) 2016-2020 Free Software Foundation, Inc. +# Copyright (C) 2016-2021 Free Software Foundation, Inc. # Contributed by Dimitar Dimitrov <dimitar@dinux.eu> # # This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/testsuite/sim/pru/jmp.s gdb-10.2/sim/testsuite/sim/pru/jmp.s --- gdb-9.1/sim/testsuite/sim/pru/jmp.s 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/testsuite/sim/pru/jmp.s 2021-04-25 04:06:26.000000000 +0000 @@ -1,7 +1,7 @@ # Check that jump and branch insns work. # mach: pru -# Copyright (C) 2016-2020 Free Software Foundation, Inc. +# Copyright (C) 2016-2021 Free Software Foundation, Inc. # Contributed by Dimitar Dimitrov <dimitar@dinux.eu> # # This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/testsuite/sim/pru/loop-imm.s gdb-10.2/sim/testsuite/sim/pru/loop-imm.s --- gdb-9.1/sim/testsuite/sim/pru/loop-imm.s 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/testsuite/sim/pru/loop-imm.s 2021-04-25 04:06:26.000000000 +0000 @@ -1,7 +1,7 @@ # Check that loop insn works. # mach: pru -# Copyright (C) 2016-2020 Free Software Foundation, Inc. +# Copyright (C) 2016-2021 Free Software Foundation, Inc. # Contributed by Dimitar Dimitrov <dimitar@dinux.eu> # # This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/testsuite/sim/pru/loop-reg.s gdb-10.2/sim/testsuite/sim/pru/loop-reg.s --- gdb-9.1/sim/testsuite/sim/pru/loop-reg.s 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/testsuite/sim/pru/loop-reg.s 2021-04-25 04:06:26.000000000 +0000 @@ -1,7 +1,7 @@ # Check that loop insn works. # mach: pru -# Copyright (C) 2016-2020 Free Software Foundation, Inc. +# Copyright (C) 2016-2021 Free Software Foundation, Inc. # Contributed by Dimitar Dimitrov <dimitar@dinux.eu> # # This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/testsuite/sim/pru/mul.s gdb-10.2/sim/testsuite/sim/pru/mul.s --- gdb-9.1/sim/testsuite/sim/pru/mul.s 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/testsuite/sim/pru/mul.s 2021-04-25 04:06:26.000000000 +0000 @@ -1,7 +1,7 @@ # Check that multiplication works. # mach: pru -# Copyright (C) 2016-2020 Free Software Foundation, Inc. +# Copyright (C) 2016-2021 Free Software Foundation, Inc. # Contributed by Dimitar Dimitrov <dimitar@dinux.eu> # # This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/testsuite/sim/pru/subreg.s gdb-10.2/sim/testsuite/sim/pru/subreg.s --- gdb-9.1/sim/testsuite/sim/pru/subreg.s 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/testsuite/sim/pru/subreg.s 2021-04-25 04:06:26.000000000 +0000 @@ -1,7 +1,7 @@ # Check that subregister addressing works. # mach: pru -# Copyright (C) 2016-2020 Free Software Foundation, Inc. +# Copyright (C) 2016-2021 Free Software Foundation, Inc. # Contributed by Dimitar Dimitrov <dimitar@dinux.eu> # # This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/testsuite/sim/pru/testutils.inc gdb-10.2/sim/testsuite/sim/pru/testutils.inc --- gdb-9.1/sim/testsuite/sim/pru/testutils.inc 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/testsuite/sim/pru/testutils.inc 2021-04-25 04:06:26.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2016-2020 Free Software Foundation, Inc. +# Copyright (C) 2016-2021 Free Software Foundation, Inc. # Contributed by Dimitar Dimitrov <dimitar@dinux.eu> # # This file is part of the GNU simulators. diff -Nru gdb-9.1/sim/v850/Makefile.in gdb-10.2/sim/v850/Makefile.in --- gdb-9.1/sim/v850/Makefile.in 2020-02-08 12:49:30.000000000 +0000 +++ gdb-10.2/sim/v850/Makefile.in 2021-04-25 04:06:27.000000000 +0000 @@ -1,5 +1,5 @@ # Makefile template for Configure for the V850 sim library. -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2021 Free Software Foundation, Inc. # Written by Cygnus Support. # # This program is free software; you can redistribute it and/or modify diff -Nru gdb-9.1/src-release.sh gdb-10.2/src-release.sh --- gdb-9.1/src-release.sh 2020-02-08 12:50:14.000000000 +0000 +++ gdb-10.2/src-release.sh 2021-04-25 04:06:27.000000000 +0000 @@ -1,5 +1,5 @@ #!/usr/bin/env bash -# Copyright (C) 1990-2018 Free Software Foundation +# Copyright (C) 1990-2020 Free Software Foundation # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -61,8 +61,8 @@ $tool/common/create-version.sh $tool 'dummy-host' 'dummy-target' VER.tmp cat VER.tmp | grep 'version\[\]' | sed 's/.*"\([^"]*\)".*/\1/' | sed 's/-git$//' rm -f VER.tmp - elif test -f $tool/gdbsupport/create-version.sh; then - $tool/gdbsupport/create-version.sh $tool 'dummy-host' 'dummy-target' VER.tmp + elif test $tool = "gdb"; then + ./gdbsupport/create-version.sh $tool 'dummy-host' 'dummy-target' VER.tmp cat VER.tmp | grep 'version\[\]' | sed 's/.*"\([^"]*\)".*/\1/' | sed 's/-git$//' rm -f VER.tmp elif test -f $tool/version.in; then @@ -99,8 +99,8 @@ *) disables="$disables --disable-$dir" ;; esac done - echo "==> configure --target=i386-pc-linux-gnu --enable-src-release-build=yes $disables $enables" - ./configure --target=i386-pc-linux-gnu --enable-src-release-build=yes $disables $enables + echo "==> configure --target=i386-pc-linux-gnu $disables $enables" + ./configure --target=i386-pc-linux-gnu $disables $enables $MAKE configure-host configure-target \ ALL_GCC="" ALL_GCC_C="" ALL_GCC_CXX="" \ CC_FOR_TARGET="$CC" CXX_FOR_TARGET="$CXX" @@ -315,7 +315,7 @@ tar_compress $package $tool "$GAS_SUPPORT_DIRS" "$compressors" } -GDB_SUPPORT_DIRS="bfd include libiberty libctf opcodes readline sim intl libdecnumber cpu zlib contrib gnulib" +GDB_SUPPORT_DIRS="bfd include libiberty libctf opcodes readline sim intl libdecnumber cpu zlib contrib gnulib gdbsupport gdbserver" gdb_release() { compressors=$1 diff -Nru gdb-9.1/zlib/ChangeLog.bin-gdb gdb-10.2/zlib/ChangeLog.bin-gdb --- gdb-9.1/zlib/ChangeLog.bin-gdb 2018-11-07 19:00:24.000000000 +0000 +++ gdb-10.2/zlib/ChangeLog.bin-gdb 2021-04-25 04:06:27.000000000 +0000 @@ -1,3 +1,7 @@ +2020-02-19 Andrew Burgess <andrew.burgess@embecosm.com> + + * configure: Regenerate. + 2018-10-31 Joseph Myers <joseph@codesourcery.com> * configure: Regenerate. diff -Nru gdb-9.1/zlib/configure gdb-10.2/zlib/configure --- gdb-9.1/zlib/configure 2018-11-07 19:00:24.000000000 +0000 +++ gdb-10.2/zlib/configure 2021-04-25 04:06:27.000000000 +0000 @@ -3397,11 +3397,11 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ - +#include <stdio.h> int main () { - +printf ("hello world\n"); ; return 0; }